ZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IGRjYTZhYmMuLjk1YzQ2OWMgMTAwNjQ0Ci0tLSBhL0NSRURJVFMKKysrIGIvQ1JFRElUUwpAQCAtMzI4LDcgKzMyOCw3IEBACiBOOiBKb2hhbm5lcyBCZXJnCiBFOiBqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0CiBXOiBodHRwOi8vam9oYW5uZXMuc2lwc29sdXRpb25zLm5ldC8KLVA6IDEwMjRELzlBQjc4Q0E1IEFEMDIgMDE3NiA0RTI5IEMxMzcgMURGNiAwOEQyIEZDNDQgQ0Y4NiA5QUI3IDhDQTUKK1A6IDQwOTZSLzdCRjkwOTlBIEMwRUIgQzQ0MCBGNkRBIDA5MUMgODg0RCAgODUzMiBFMEYzIDczRjMgN0JGOSAwOTlBCiBEOiBwb3dlcnBjICYgODAyLjExIGhhY2tlcgogCiBOOiBTdGVwaGVuIFIuIHZhbiBkZW4gQmVyZyAoQUtBIEJ1R2xlc3MpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS9vYnNvbGV0ZS9zeXNmcy1kcml2ZXItaGlkLXJvY2NhdC1rb25lcGx1cyBiL0RvY3VtZW50YXRpb24vQUJJL29ic29sZXRlL3N5c2ZzLWRyaXZlci1oaWQtcm9jY2F0LWtvbmVwbHVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYTI3MGIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS9vYnNvbGV0ZS9zeXNmcy1kcml2ZXItaGlkLXJvY2NhdC1rb25lcGx1cwpAQCAtMCwwICsxLDEwIEBACitXaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZXMvPGJ1c251bT4tPGRldm51bT46PGNvbmZpZyBudW0+LjxpbnRlcmZhY2UgbnVtPi88aGlkLWJ1cz46PHZlbmRvci1pZD46PHByb2R1Y3QtaWQ+LjxudW0+L2tvbmVwbHVzL3JvY2NhdGtvbmVwbHVzPG1pbm9yPi9zdGFydHVwX3Byb2ZpbGUKK0RhdGU6CQlPY3RvYmVyIDIwMTAKK0NvbnRhY3Q6CVN0ZWZhbiBBY2hhdHogPGVyYXpvcl9kZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEZXNjcmlwdGlvbjoJVGhlIGludGVnZXIgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGUgcmFuZ2VzIGZyb20gMC00LgorICAgICAgICAgICAgICAgIFdoZW4gcmVhZCwgdGhpcyBhdHRyaWJ1dGUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBhY3R1YWwKKyAgICAgICAgICAgICAgICBwcm9maWxlLiBUaGlzIHZhbHVlIGlzIHBlcnNpc3RlbnQsIHNvIGl0cyBlcXVpdmFsZW50IHRvIHRoZQorICAgICAgICAgICAgICAgIHByb2ZpbGUgdGhhdCdzIGFjdGl2ZSB3aGVuIHRoZSBtb3VzZSBpcyBwb3dlcmVkIG9uIG5leHQgdGltZS4KKwkJV2hlbiB3cml0dGVuLCB0aGlzIGZpbGUgc2V0cyB0aGUgbnVtYmVyIG9mIHRoZSBzdGFydHVwIHByb2ZpbGUKKwkJYW5kIHRoZSBtb3VzZSBhY3RpdmF0ZXMgdGhpcyBwcm9maWxlIGltbWVkaWF0ZWx5LgorCQlQbGVhc2UgdXNlIGFjdHVhbF9wcm9maWxlLCBpdCBkb2VzIHRoZSBzYW1lIHRoaW5nLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtYmNtYSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWJjbWEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZiNjJiYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWJjbWEKQEAgLTAsMCArMSwzMSBAQAorV2hhdDoJCS9zeXMvYnVzL2JjbWEvZGV2aWNlcy8uLi4vbWFudWYKK0RhdGU6CQlNYXkgMjAxMQorS2VybmVsVmVyc2lvbjoJMi42LjQwCitDb250YWN0OglSYWZhxYIgTWnFgmVja2kgPHphamVjNUBnbWFpbC5jb20+CitEZXNjcmlwdGlvbjoKKwkJRWFjaCBCQ01BIGNvcmUgaGFzIGl0J3MgbWFudWZhY3R1cmVyIGlkLiBTZWUKKwkJaW5jbHVkZS9saW51eC9iY21hL2JjbWEuaCBmb3IgcG9zc2libGUgdmFsdWVzLgorCitXaGF0OgkJL3N5cy9idXMvYmNtYS9kZXZpY2VzLy4uLi9pZAorRGF0ZToJCU1heSAyMDExCitLZXJuZWxWZXJzaW9uOgkyLjYuNDAKK0NvbnRhY3Q6CVJhZmHFgiBNacWCZWNraSA8emFqZWM1QGdtYWlsLmNvbT4KK0Rlc2NyaXB0aW9uOgorCQlUaGVyZSBhcmUgYSBmZXcgdHlwZXMgb2YgQkNNQSBjb3JlcywgdGhleSBjYW4gYmUgaWRlbnRpZmllZCBieQorCQlpZCBmaWVsZC4KKworV2hhdDoJCS9zeXMvYnVzL2JjbWEvZGV2aWNlcy8uLi4vcmV2CitEYXRlOgkJTWF5IDIwMTEKK0tlcm5lbFZlcnNpb246CTIuNi40MAorQ29udGFjdDoJUmFmYcWCIE1pxYJlY2tpIDx6YWplYzVAZ21haWwuY29tPgorRGVzY3JpcHRpb246CisJCUJDTUEgY29yZXMgb2YgdGhlIHNhbWUgdHlwZSBjYW4gc3RpbGwgc2xpZ2h0bHkgZGlmZmVyIGRlcGVuZGluZworCQlvbiB0aGVpciByZXZpc2lvbi4gVXNlIGl0IGZvciBkZXRhaWxlZCBwcm9ncmFtbWluZy4KKworV2hhdDoJCS9zeXMvYnVzL2JjbWEvZGV2aWNlcy8uLi4vY2xhc3MKK0RhdGU6CQlNYXkgMjAxMQorS2VybmVsVmVyc2lvbjoJMi42LjQwCitDb250YWN0OglSYWZhxYIgTWnFgmVja2kgPHphamVjNUBnbWFpbC5jb20+CitEZXNjcmlwdGlvbjoKKwkJRWFjaCBCQ01BIGNvcmUgaXMgaWRlbnRpZmllZCBieSBmZXcgZmllbGRzLCBpbmNsdWRpbmcgY2xhc3MgaXQKKwkJYmVsb25ncyB0by4gU2VlIGluY2x1ZGUvbGludXgvYmNtYS9iY21hLmggZm9yIHBvc3NpYmxlIHZhbHVlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZHJpdmVyLWhpZC1yb2NjYXQta29uZXBsdXMgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRyaXZlci1oaWQtcm9jY2F0LWtvbmVwbHVzCmluZGV4IDMyNmUwNTQuLmMxYjUzYjggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZHJpdmVyLWhpZC1yb2NjYXQta29uZXBsdXMKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kcml2ZXItaGlkLXJvY2NhdC1rb25lcGx1cwpAQCAtMSw5ICsxLDEyIEBACiBXaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZXMvPGJ1c251bT4tPGRldm51bT46PGNvbmZpZyBudW0+LjxpbnRlcmZhY2UgbnVtPi88aGlkLWJ1cz46PHZlbmRvci1pZD46PHByb2R1Y3QtaWQ+LjxudW0+L2tvbmVwbHVzL3JvY2NhdGtvbmVwbHVzPG1pbm9yPi9hY3R1YWxfcHJvZmlsZQogRGF0ZToJCU9jdG9iZXIgMjAxMAogQ29udGFjdDoJU3RlZmFuIEFjaGF0eiA8ZXJhem9yX2RlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLURlc2NyaXB0aW9uOglXaGVuIHJlYWQsIHRoaXMgZmlsZSByZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIGFjdHVhbCBwcm9maWxlIGluCi0JCXJhbmdlIDAtNC4KLQkJVGhpcyBmaWxlIGlzIHJlYWRvbmx5LgorRGVzY3JpcHRpb246CVRoZSBpbnRlZ2VyIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIHJhbmdlcyBmcm9tIDAtNC4KKyAgICAgICAgICAgICAgICBXaGVuIHJlYWQsIHRoaXMgYXR0cmlidXRlIHJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgYWN0dWFsCisgICAgICAgICAgICAgICAgcHJvZmlsZS4gVGhpcyB2YWx1ZSBpcyBwZXJzaXN0ZW50LCBzbyBpdHMgZXF1aXZhbGVudCB0byB0aGUKKyAgICAgICAgICAgICAgICBwcm9maWxlIHRoYXQncyBhY3RpdmUgd2hlbiB0aGUgbW91c2UgaXMgcG93ZXJlZCBvbiBuZXh0IHRpbWUuCisJCVdoZW4gd3JpdHRlbiwgdGhpcyBmaWxlIHNldHMgdGhlIG51bWJlciBvZiB0aGUgc3RhcnR1cCBwcm9maWxlCisJCWFuZCB0aGUgbW91c2UgYWN0aXZhdGVzIHRoaXMgcHJvZmlsZSBpbW1lZGlhdGVseS4KIFVzZXJzOgkJaHR0cDovL3JvY2NhdC5zb3VyY2Vmb3JnZS5uZXQKIAogV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9rb25lcGx1cy9yb2NjYXRrb25lcGx1czxtaW5vcj4vZmlybXdhcmVfdmVyc2lvbgpAQCAtODksMTYgKzkyLDYgQEAKIAkJVGhpcyBmaWxlIGlzIHdyaXRlb25seS4KIFVzZXJzOgkJaHR0cDovL3JvY2NhdC5zb3VyY2Vmb3JnZS5uZXQKIAotV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9rb25lcGx1cy9yb2NjYXRrb25lcGx1czxtaW5vcj4vc3RhcnR1cF9wcm9maWxlCi1EYXRlOgkJT2N0b2JlciAyMDEwCi1Db250YWN0OglTdGVmYW4gQWNoYXR6IDxlcmF6b3JfZGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotRGVzY3JpcHRpb246CVRoZSBpbnRlZ2VyIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIHJhbmdlcyBmcm9tIDAtNC4KLSAgICAgICAgICAgICAgICBXaGVuIHJlYWQsIHRoaXMgYXR0cmlidXRlIHJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgcHJvZmlsZQotICAgICAgICAgICAgICAgIHRoYXQncyBhY3RpdmUgd2hlbiB0aGUgbW91c2UgaXMgcG93ZXJlZCBvbi4KLQkJV2hlbiB3cml0dGVuLCB0aGlzIGZpbGUgc2V0cyB0aGUgbnVtYmVyIG9mIHRoZSBzdGFydHVwIHByb2ZpbGUKLQkJYW5kIHRoZSBtb3VzZSBhY3RpdmF0ZXMgdGhpcyBwcm9maWxlIGltbWVkaWF0ZWx5LgotVXNlcnM6CQlodHRwOi8vcm9jY2F0LnNvdXJjZWZvcmdlLm5ldAotCiBXaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZXMvPGJ1c251bT4tPGRldm51bT46PGNvbmZpZyBudW0+LjxpbnRlcmZhY2UgbnVtPi88aGlkLWJ1cz46PHZlbmRvci1pZD46PHByb2R1Y3QtaWQ+LjxudW0+L2tvbmVwbHVzL3JvY2NhdGtvbmVwbHVzPG1pbm9yPi90Y3UKIERhdGU6CQlPY3RvYmVyIDIwMTAKIENvbnRhY3Q6CVN0ZWZhbiBBY2hhdHogPGVyYXpvcl9kZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY3J5cHRvL2ZzbC1zZWM0LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jcnlwdG8vZnNsLXNlYzQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNTdlY2QKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY3J5cHRvL2ZzbC1zZWM0LnR4dApAQCAtMCwwICsxLDM5NyBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitTRUMgNCBEZXZpY2UgVHJlZSBCaW5kaW5nCitDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisKKyBDT05URU5UUworICAgLU92ZXJ2aWV3CisgICAtU0VDIDQgTm9kZQorICAgLUpvYiBSaW5nIE5vZGUKKyAgIC1SdW4gVGltZSBJbnRlZ3JpdHkgQ2hlY2sgKFJUSUMpIE5vZGUKKyAgIC1SdW4gVGltZSBJbnRlZ3JpdHkgQ2hlY2sgKFJUSUMpIE1lbW9yeSBOb2RlCisgICAtU2VjdXJlIE5vbi1Wb2xhdGlsZSBTdG9yYWdlIChTTlZTKSBOb2RlCisgICAtRnVsbCBFeGFtcGxlCisKK05PVEU6IHRoZSBTRUMgNCBpcyBhbHNvIGtub3duIGFzIEZyZWVzY2FsZSdzIENyeXB0b2dyYXBoaWMgQWNjZWxlcmF0b3IKK0FjY2VsZXJhdG9yIGFuZCBBc3N1cmFuY2UgTW9kdWxlIChDQUFNKS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitPdmVydmlldworCitERVNDUklQVElPTgorCitTRUMgNCBoL3cgY2FuIHByb2Nlc3MgcmVxdWVzdHMgZnJvbSAyIHR5cGVzIG9mIHNvdXJjZXMuCisxLiBEUEFBIFF1ZXVlIEludGVyZmFjZSAoSFcgaW50ZXJmYWNlIGJldHdlZW4gUXVldWUgTWFuYWdlciAmIFNFQyA0KS4KKzIuIEpvYiBSaW5ncyAoSFcgaW50ZXJmYWNlIGJldHdlZW4gY29yZXMgJiBTRUMgNCByZWdpc3RlcnMpLgorCitIaWdoIFNwZWVkIERhdGEgUGF0aCBDb25maWd1cmF0aW9uOgorCitIVyBpbnRlcmZhY2UgYmV0d2VlbiBRTSAmIFNFQyA0IGFuZCBhbHNvIEJNICYgU0VDIDQsIG9uIERQQUEtZW5hYmxlZCBwYXJ0cworc3VjaCBhcyB0aGUgUDQwODAuICBUaGUgbnVtYmVyIG9mIHNpbXVsdGFuZW91cyBkZXF1ZXVlcyB0aGUgUUkgY2FuIG1ha2UgaXMKK2VxdWFsIHRvIHRoZSBudW1iZXIgb2YgRGVzY3JpcHRvciBDb250cm9sbGVyIChERUNPKSBlbmdpbmVzIGluIGEgcGFydGljdWxhcgorU0VDIHZlcnNpb24uICBFLmcuLCB0aGUgU0VDIDQuMCBpbiB0aGUgUDQwODAgaGFzIDUgREVDT3MgYW5kIGNhbiB0aHVzCitkZXF1ZXVlIGZyb20gNSBzdWJwb3J0YWxzIHNpbXVsdGFuZW91c2x5LgorCitKb2IgUmluZyBEYXRhIFBhdGggQ29uZmlndXJhdGlvbjoKKworRWFjaCBKUiBpcyBsb2NhdGVkIG9uIGEgc2VwYXJhdGUgNGsgcGFnZSwgdGhleSBtYXkgKG9yIG1heSBub3QpIGJlIG1hZGUgdmlzaWJsZQoraW4gdGhlIG1lbW9yeSBwYXJ0aXRpb24gZGV2b3RlZCB0byBhIHBhcnRpY3VsYXIgY29yZS4gIFRoZSBQNDA4MCBoYXMgNCBKUnMsIHNvCit1cCB0byA0IEpScyBjYW4gYmUgY29uZmlndXJlZDsgYW5kIGFsbCA0IEpScyBwcm9jZXNzIHJlcXVlc3RzIGluIHBhcmFsbGVsLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1NFQyA0IE5vZGUKKworRGVzY3JpcHRpb24KKworICAgIE5vZGUgZGVmaW5lcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBTRUMgNCBibG9jay4KKyAgICBUaGlzIGJsb2NrIHNwZWNpZmllcyB0aGUgYWRkcmVzcyByYW5nZSBvZiBhbGwgZ2xvYmFsCisgICAgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgZm9yIHRoZSBTRUMgNCBibG9jay4gIEl0CisgICAgYWxzbyByZWNlaXZlcyBpbnRlcnJ1cHRzIGZyb20gdGhlIFJ1biBUaW1lIEludGVncml0eSBDaGVjaworICAgIChSVElDKSBmdW5jdGlvbiB3aXRoaW4gdGhlIFNFQyA0IGJsb2NrLgorCitQUk9QRVJUSUVTCisKKyAgIC0gY29tcGF0aWJsZQorICAgICAgVXNhZ2U6IHJlcXVpcmVkCisgICAgICBWYWx1ZSB0eXBlOiA8c3RyaW5nPgorICAgICAgRGVmaW5pdGlvbjogTXVzdCBpbmNsdWRlICJmc2wsc2VjLXY0LjAiCisKKyAgIC0gI2FkZHJlc3MtY2VsbHMKKyAgICAgICBVc2FnZTogcmVxdWlyZWQKKyAgICAgICBWYWx1ZSB0eXBlOiA8dTMyPgorICAgICAgIERlZmluaXRpb246IEEgc3RhbmRhcmQgcHJvcGVydHkuICBEZWZpbmVzIHRoZSBudW1iZXIgb2YgY2VsbHMKKyAgICAgICAgICAgZm9yIHJlcHJlc2VudGluZyBwaHlzaWNhbCBhZGRyZXNzZXMgaW4gY2hpbGQgbm9kZXMuCisKKyAgIC0gI3NpemUtY2VsbHMKKyAgICAgICBVc2FnZTogcmVxdWlyZWQKKyAgICAgICBWYWx1ZSB0eXBlOiA8dTMyPgorICAgICAgIERlZmluaXRpb246IEEgc3RhbmRhcmQgcHJvcGVydHkuICBEZWZpbmVzIHRoZSBudW1iZXIgb2YgY2VsbHMKKyAgICAgICAgICAgZm9yIHJlcHJlc2VudGluZyB0aGUgc2l6ZSBvZiBwaHlzaWNhbCBhZGRyZXNzZXMgaW4KKyAgICAgICAgICAgY2hpbGQgbm9kZXMuCisKKyAgIC0gcmVnCisgICAgICBVc2FnZTogcmVxdWlyZWQKKyAgICAgIFZhbHVlIHR5cGU6IDxwcm9wLWVuY29kZWQtYXJyYXk+CisgICAgICBEZWZpbml0aW9uOiBBIHN0YW5kYXJkIHByb3BlcnR5LiAgU3BlY2lmaWVzIHRoZSBwaHlzaWNhbAorICAgICAgICAgIGFkZHJlc3MgYW5kIGxlbmd0aCBvZiB0aGUgU0VDNCBjb25maWd1cmF0aW9uIHJlZ2lzdGVycy4KKyAgICAgICAgICByZWdpc3RlcnMKKworICAgLSByYW5nZXMKKyAgICAgICBVc2FnZTogcmVxdWlyZWQKKyAgICAgICBWYWx1ZSB0eXBlOiA8cHJvcC1lbmNvZGVkLWFycmF5PgorICAgICAgIERlZmluaXRpb246IEEgc3RhbmRhcmQgcHJvcGVydHkuICBTcGVjaWZpZXMgdGhlIHBoeXNpY2FsIGFkZHJlc3MKKyAgICAgICAgICAgcmFuZ2Ugb2YgdGhlIFNFQyA0LjAgcmVnaXN0ZXIgc3BhY2UgKC1TTlZTIG5vdCBpbmNsdWRlZCkuICBBCisgICAgICAgICAgIHRyaXBsZXQgdGhhdCBpbmNsdWRlcyB0aGUgY2hpbGQgYWRkcmVzcywgcGFyZW50IGFkZHJlc3MsICYKKyAgICAgICAgICAgbGVuZ3RoLgorCisgICAtIGludGVycnVwdHMKKyAgICAgIFVzYWdlOiByZXF1aXJlZAorICAgICAgVmFsdWUgdHlwZTogPHByb3BfZW5jb2RlZC1hcnJheT4KKyAgICAgIERlZmluaXRpb246ICBTcGVjaWZpZXMgdGhlIGludGVycnVwdHMgZ2VuZXJhdGVkIGJ5IHRoaXMKKyAgICAgICAgICAgZGV2aWNlLiAgVGhlIHZhbHVlIG9mIHRoZSBpbnRlcnJ1cHRzIHByb3BlcnR5CisgICAgICAgICAgIGNvbnNpc3RzIG9mIG9uZSBpbnRlcnJ1cHQgc3BlY2lmaWVyLiBUaGUgZm9ybWF0CisgICAgICAgICAgIG9mIHRoZSBzcGVjaWZpZXIgaXMgZGVmaW5lZCBieSB0aGUgYmluZGluZyBkb2N1bWVudAorICAgICAgICAgICBkZXNjcmliaW5nIHRoZSBub2RlJ3MgaW50ZXJydXB0IHBhcmVudC4KKworICAgLSBpbnRlcnJ1cHQtcGFyZW50CisgICAgICBVc2FnZTogKHJlcXVpcmVkIGlmIGludGVycnVwdCBwcm9wZXJ0eSBpcyBkZWZpbmVkKQorICAgICAgVmFsdWUgdHlwZTogPHBoYW5kbGU+CisgICAgICBEZWZpbml0aW9uOiBBIHNpbmdsZSA8cGhhbmRsZT4gdmFsdWUgdGhhdCBwb2ludHMKKyAgICAgICAgICB0byB0aGUgaW50ZXJydXB0IHBhcmVudCB0byB3aGljaCB0aGUgY2hpbGQgZG9tYWluCisgICAgICAgICAgaXMgYmVpbmcgbWFwcGVkLgorCisgICBOb3RlOiBBbGwgb3RoZXIgc3RhbmRhcmQgcHJvcGVydGllcyAoc2VlIHRoZSBlUEFQUikgYXJlIGFsbG93ZWQKKyAgIGJ1dCBhcmUgb3B0aW9uYWwuCisKKworRVhBTVBMRQorCWNyeXB0b0AzMDAwMDAgeworCQljb21wYXRpYmxlID0gImZzbCxzZWMtdjQuMCI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmVnID0gPDB4MzAwMDAwIDB4MTAwMDA+OworCQlyYW5nZXMgPSA8MCAweDMwMDAwMCAweDEwMDAwPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCWludGVycnVwdHMgPSA8OTIgMj47CisJfTsKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitKb2IgUmluZyAoSlIpIE5vZGUKKworICAgIENoaWxkIG9mIHRoZSBjcnlwdG8gbm9kZSBkZWZpbmVzIGRhdGEgcHJvY2Vzc2luZyBpbnRlcmZhY2UgdG8gU0VDIDQKKyAgICBhY3Jvc3MgdGhlIHBlcmlwaGVyYWwgYnVzIGZvciBwdXJwb3NlcyBvZiBwcm9jZXNzaW5nCisgICAgY3J5cHRvZ3JhcGhpYyBkZXNjcmlwdG9ycy4gVGhlIHNwZWNpZmllZCBhZGRyZXNzCisgICAgcmFuZ2UgY2FuIGJlIG1hZGUgdmlzaWJsZSB0byBvbmUgKG9yIG1vcmUpIGNvcmVzLgorICAgIFRoZSBpbnRlcnJ1cHQgZGVmaW5lZCBmb3IgdGhpcyBub2RlIGlzIGNvbnRyb2xsZWQgd2l0aGluCisgICAgdGhlIGFkZHJlc3MgcmFuZ2Ugb2YgdGhpcyBub2RlLgorCisgIC0gY29tcGF0aWJsZQorICAgICAgVXNhZ2U6IHJlcXVpcmVkCisgICAgICBWYWx1ZSB0eXBlOiA8c3RyaW5nPgorICAgICAgRGVmaW5pdGlvbjogTXVzdCBpbmNsdWRlICJmc2wsc2VjLXY0LjAtam9iLXJpbmciCisKKyAgLSByZWcKKyAgICAgIFVzYWdlOiByZXF1aXJlZAorICAgICAgVmFsdWUgdHlwZTogPHByb3AtZW5jb2RlZC1hcnJheT4KKyAgICAgIERlZmluaXRpb246IFNwZWNpZmllcyBhIHR3byBKUiBwYXJhbWV0ZXJzOiAgYW4gb2Zmc2V0IGZyb20KKyAgICAgICAgICB0aGUgcGFyZW50IHBoeXNpY2FsIGFkZHJlc3MgYW5kIHRoZSBsZW5ndGggdGhlIEpSIHJlZ2lzdGVycy4KKworICAgLSBmc2wsbGlvZG4KKyAgICAgICBVc2FnZTogb3B0aW9uYWwtYnV0LXJlY29tbWVuZGVkCisgICAgICAgVmFsdWUgdHlwZTogPHByb3AtZW5jb2RlZC1hcnJheT4KKyAgICAgICBEZWZpbml0aW9uOgorICAgICAgICAgICBTcGVjaWZpZXMgdGhlIExJT0ROIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aAorICAgICAgICAgICB0aGUgcHBpZC10by1saW9kbiB0YWJsZSB0aGF0IHNwZWNpZmllcyB0aGUgUFBJRCB0byBMSU9ETiBtYXBwaW5nLgorICAgICAgICAgICBOZWVkZWQgaWYgdGhlIFBBTVUgaXMgdXNlZC4gIFZhbHVlIGlzIGEgMTIgYml0IHZhbHVlCisgICAgICAgICAgIHdoZXJlIHZhbHVlIGlzIGEgTElPRE4gSUQgZm9yIHRoaXMgSlIuIFRoaXMgcHJvcGVydHkgaXMKKyAgICAgICAgICAgbm9ybWFsbHkgc2V0IGJ5IGJvb3QgZmlybXdhcmUuCisKKyAgIC0gaW50ZXJydXB0cworICAgICAgVXNhZ2U6IHJlcXVpcmVkCisgICAgICBWYWx1ZSB0eXBlOiA8cHJvcF9lbmNvZGVkLWFycmF5PgorICAgICAgRGVmaW5pdGlvbjogIFNwZWNpZmllcyB0aGUgaW50ZXJydXB0cyBnZW5lcmF0ZWQgYnkgdGhpcworICAgICAgICAgICBkZXZpY2UuICBUaGUgdmFsdWUgb2YgdGhlIGludGVycnVwdHMgcHJvcGVydHkKKyAgICAgICAgICAgY29uc2lzdHMgb2Ygb25lIGludGVycnVwdCBzcGVjaWZpZXIuIFRoZSBmb3JtYXQKKyAgICAgICAgICAgb2YgdGhlIHNwZWNpZmllciBpcyBkZWZpbmVkIGJ5IHRoZSBiaW5kaW5nIGRvY3VtZW50CisgICAgICAgICAgIGRlc2NyaWJpbmcgdGhlIG5vZGUncyBpbnRlcnJ1cHQgcGFyZW50LgorCisgICAtIGludGVycnVwdC1wYXJlbnQKKyAgICAgIFVzYWdlOiAocmVxdWlyZWQgaWYgaW50ZXJydXB0IHByb3BlcnR5IGlzIGRlZmluZWQpCisgICAgICBWYWx1ZSB0eXBlOiA8cGhhbmRsZT4KKyAgICAgIERlZmluaXRpb246IEEgc2luZ2xlIDxwaGFuZGxlPiB2YWx1ZSB0aGF0IHBvaW50cworICAgICAgICAgIHRvIHRoZSBpbnRlcnJ1cHQgcGFyZW50IHRvIHdoaWNoIHRoZSBjaGlsZCBkb21haW4KKyAgICAgICAgICBpcyBiZWluZyBtYXBwZWQuCisKK0VYQU1QTEUKKwlqckAxMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsc2VjLXY0LjAtam9iLXJpbmciOworCQlyZWcgPSA8MHgxMDAwIDB4MTAwMD47CisJCWZzbCxsaW9kbiA9IDwweDA4MT47CisJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQlpbnRlcnJ1cHRzID0gPDg4IDI+OworCX07CisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSdW4gVGltZSBJbnRlZ3JpdHkgQ2hlY2sgKFJUSUMpIE5vZGUKKworICBDaGlsZCBub2RlIG9mIHRoZSBjcnlwdG8gbm9kZS4gIERlZmluZXMgYSByZWdpc3RlciBzcGFjZSB0aGF0CisgIGNvbnRhaW5zIHVwIHRvIDUgc2V0cyBvZiBhZGRyZXNzZXMgYW5kIHRoZWlyIGxlbmd0aHMgKHNpemVzKSB0aGF0CisgIHdpbGwgYmUgY2hlY2tlZCBhdCBydW4gdGltZS4gIEFmdGVyIGFuIGluaXRpYWwgaGFzaCByZXN1bHQgaXMKKyAgY2FsY3VsYXRlZCwgdGhlc2UgYWRkcmVzc2VzIGFyZSBjaGVja2VkIGJ5IEhXIHRvIG1vbml0b3IgYW55CisgIGNoYW5nZS4gIElmIGFueSBtZW1vcnkgaXMgbW9kaWZpZWQsIGEgU2VjdXJpdHkgVmlvbGF0aW9uIGlzCisgIHRyaWdnZXJlZCAoc2VlIFNOVlMgZGVmaW5pdGlvbikuCisKKworICAtIGNvbXBhdGlibGUKKyAgICAgIFVzYWdlOiByZXF1aXJlZAorICAgICAgVmFsdWUgdHlwZTogPHN0cmluZz4KKyAgICAgIERlZmluaXRpb246IE11c3QgaW5jbHVkZSAiZnNsLHNlYy12NC4wLXJ0aWMiLgorCisgICAtICNhZGRyZXNzLWNlbGxzCisgICAgICAgVXNhZ2U6IHJlcXVpcmVkCisgICAgICAgVmFsdWUgdHlwZTogPHUzMj4KKyAgICAgICBEZWZpbml0aW9uOiBBIHN0YW5kYXJkIHByb3BlcnR5LiAgRGVmaW5lcyB0aGUgbnVtYmVyIG9mIGNlbGxzCisgICAgICAgICAgIGZvciByZXByZXNlbnRpbmcgcGh5c2ljYWwgYWRkcmVzc2VzIGluIGNoaWxkIG5vZGVzLiAgTXVzdAorICAgICAgICAgICBoYXZlIGEgdmFsdWUgb2YgMS4KKworICAgLSAjc2l6ZS1jZWxscworICAgICAgIFVzYWdlOiByZXF1aXJlZAorICAgICAgIFZhbHVlIHR5cGU6IDx1MzI+CisgICAgICAgRGVmaW5pdGlvbjogQSBzdGFuZGFyZCBwcm9wZXJ0eS4gIERlZmluZXMgdGhlIG51bWJlciBvZiBjZWxscworICAgICAgICAgICBmb3IgcmVwcmVzZW50aW5nIHRoZSBzaXplIG9mIHBoeXNpY2FsIGFkZHJlc3NlcyBpbgorICAgICAgICAgICBjaGlsZCBub2Rlcy4gIE11c3QgaGF2ZSBhIHZhbHVlIG9mIDEuCisKKyAgLSByZWcKKyAgICAgIFVzYWdlOiByZXF1aXJlZAorICAgICAgVmFsdWUgdHlwZTogPHByb3AtZW5jb2RlZC1hcnJheT4KKyAgICAgIERlZmluaXRpb246IEEgc3RhbmRhcmQgcHJvcGVydHkuICBTcGVjaWZpZXMgYSB0d28gcGFyYW1ldGVyczoKKyAgICAgICAgICBhbiBvZmZzZXQgZnJvbSB0aGUgcGFyZW50IHBoeXNpY2FsIGFkZHJlc3MgYW5kIHRoZSBsZW5ndGgKKyAgICAgICAgICB0aGUgU0VDNCByZWdpc3RlcnMuCisKKyAgIC0gcmFuZ2VzCisgICAgICAgVXNhZ2U6IHJlcXVpcmVkCisgICAgICAgVmFsdWUgdHlwZTogPHByb3AtZW5jb2RlZC1hcnJheT4KKyAgICAgICBEZWZpbml0aW9uOiBBIHN0YW5kYXJkIHByb3BlcnR5LiAgU3BlY2lmaWVzIHRoZSBwaHlzaWNhbCBhZGRyZXNzCisgICAgICAgICAgIHJhbmdlIG9mIHRoZSBTRUMgNCByZWdpc3RlciBzcGFjZSAoLVNOVlMgbm90IGluY2x1ZGVkKS4gIEEKKyAgICAgICAgICAgdHJpcGxldCB0aGF0IGluY2x1ZGVzIHRoZSBjaGlsZCBhZGRyZXNzLCBwYXJlbnQgYWRkcmVzcywgJgorICAgICAgICAgICBsZW5ndGguCisKK0VYQU1QTEUKKwlydGljQDYwMDAgeworCQljb21wYXRpYmxlID0gImZzbCxzZWMtdjQuMC1ydGljIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyZWcgPSA8MHg2MDAwIDB4MTAwPjsKKwkJcmFuZ2VzID0gPDB4MCAweDYxMDAgMHhlMDA+OworCX07CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUnVuIFRpbWUgSW50ZWdyaXR5IENoZWNrIChSVElDKSBNZW1vcnkgTm9kZQorICBBIGNoaWxkIG5vZGUgdGhhdCBkZWZpbmVzIGluZGl2aWR1YWwgUlRJQyBtZW1vcnkgcmVnaW9ucyB0aGF0IGFyZSB1c2VkIHRvCisgIHBlcmZvcm0gcnVuLXRpbWUgaW50ZWdyaXR5IGNoZWNrIG9mIG1lbW9yeSBhcmVhcyB0aGF0IHNob3VsZCBub3QgbW9kaWZpZWQuCisgIFRoZSBub2RlIGRlZmluZXMgYSByZWdpc3RlciB0aGF0IGNvbnRhaW5zIHRoZSBtZW1vcnkgYWRkcmVzcyAmCisgIGxlbmd0aCAoY29tYmluZWQpIGFuZCBhIHNlY29uZCByZWdpc3RlciB0aGF0IGNvbnRhaW5zIHRoZSBoYXNoIHJlc3VsdAorICBpbiBiaWcgZW5kaWFuIGZvcm1hdC4KKworICAtIGNvbXBhdGlibGUKKyAgICAgIFVzYWdlOiByZXF1aXJlZAorICAgICAgVmFsdWUgdHlwZTogPHN0cmluZz4KKyAgICAgIERlZmluaXRpb246IE11c3QgaW5jbHVkZSAiZnNsLHNlYy12NC4wLXJ0aWMtbWVtb3J5Ii4KKworICAtIHJlZworICAgICAgVXNhZ2U6IHJlcXVpcmVkCisgICAgICBWYWx1ZSB0eXBlOiA8cHJvcC1lbmNvZGVkLWFycmF5PgorICAgICAgRGVmaW5pdGlvbjogQSBzdGFuZGFyZCBwcm9wZXJ0eS4gIFNwZWNpZmllcyB0d28gcGFyYW1ldGVyczoKKyAgICAgICAgICBhbiBvZmZzZXQgZnJvbSB0aGUgcGFyZW50IHBoeXNpY2FsIGFkZHJlc3MgYW5kIHRoZSBsZW5ndGg6CisKKyAgICAgICAgICAxLiBUaGUgbG9jYXRpb24gb2YgdGhlIFJUSUMgbWVtb3J5IGFkZHJlc3MgJiBsZW5ndGggcmVnaXN0ZXJzLgorICAgICAgICAgIDIuIFRoZSBsb2NhdGlvbiBSVElDIGhhc2ggcmVzdWx0LgorCisgIC0gZnNsLHJ0aWMtcmVnaW9uCisgICAgICAgVXNhZ2U6IG9wdGlvbmFsLWJ1dC1yZWNvbW1lbmRlZAorICAgICAgIFZhbHVlIHR5cGU6IDxwcm9wLWVuY29kZWQtYXJyYXk+CisgICAgICAgRGVmaW5pdGlvbjoKKyAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBIVyBhZGRyZXNzICgzNiBiaXQgYWRkcmVzcykgZm9yIHRoaXMgcmVnaW9uCisgICAgICAgICAgIGZvbGxvd2VkIGJ5IHRoZSBsZW5ndGggb2YgdGhlIEhXIHBhcnRpdGlvbiB0byBiZSBjaGVja2VkOworICAgICAgICAgICB0aGUgYWRkcmVzcyBpcyByZXByZXNlbnRlZCBhcyBhIDY0IGJpdCBxdWFudGl0eSBmb2xsb3dlZAorICAgICAgICAgICBieSBhIDMyIGJpdCBsZW5ndGguCisKKyAgIC0gZnNsLGxpb2RuCisgICAgICAgVXNhZ2U6IG9wdGlvbmFsLWJ1dC1yZWNvbW1lbmRlZAorICAgICAgIFZhbHVlIHR5cGU6IDxwcm9wLWVuY29kZWQtYXJyYXk+CisgICAgICAgRGVmaW5pdGlvbjoKKyAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBMSU9ETiB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGgKKyAgICAgICAgICAgdGhlIHBwaWQtdG8tbGlvZG4gdGFibGUgdGhhdCBzcGVjaWZpZXMgdGhlIFBQSUQgdG8gTElPRE4KKyAgICAgICAgICAgbWFwcGluZy4gIE5lZWRlZCBpZiB0aGUgUEFNVSBpcyB1c2VkLiAgVmFsdWUgaXMgYSAxMiBiaXQgdmFsdWUKKyAgICAgICAgICAgd2hlcmUgdmFsdWUgaXMgYSBMSU9ETiBJRCBmb3IgdGhpcyBSVElDIG1lbW9yeSByZWdpb24uIFRoaXMKKyAgICAgICAgICAgcHJvcGVydHkgaXMgbm9ybWFsbHkgc2V0IGJ5IGJvb3QgZmlybXdhcmUuCisKK0VYQU1QTEUKKwlydGljLWFAMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLHNlYy12NC4wLXJ0aWMtbWVtb3J5IjsKKwkJcmVnID0gPDB4MDAgMHgyMCAweDEwMCAweDgwPjsKKwkJZnNsLGxpb2RuICAgPSA8MHgwM2M+OworCQlmc2wscnRpYy1yZWdpb24gID0gPDB4MTIzNDU2NzggMHgxMjM0NTY3OCAweDEyMzQ1Njc4PjsKKwl9OworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1NlY3VyZSBOb24tVm9sYXRpbGUgU3RvcmFnZSAoU05WUykgTm9kZQorCisgICAgTm9kZSBkZWZpbmVzIGFkZHJlc3MgcmFuZ2UgYW5kIHRoZSBhc3NvY2lhdGVkCisgICAgaW50ZXJydXB0IGZvciB0aGUgU05WUyBmdW5jdGlvbi4gIFRoaXMgZnVuY3Rpb24KKyAgICBtb25pdG9ycyBzZWN1cml0eSBzdGF0ZSBpbmZvcm1hdGlvbiAmIHJlcG9ydHMKKyAgICBzZWN1cml0eSB2aW9sYXRpb25zLgorCisgIC0gY29tcGF0aWJsZQorICAgICAgVXNhZ2U6IHJlcXVpcmVkCisgICAgICBWYWx1ZSB0eXBlOiA8c3RyaW5nPgorICAgICAgRGVmaW5pdGlvbjogTXVzdCBpbmNsdWRlICJmc2wsc2VjLXY0LjAtbW9uIi4KKworICAtIHJlZworICAgICAgVXNhZ2U6IHJlcXVpcmVkCisgICAgICBWYWx1ZSB0eXBlOiA8cHJvcC1lbmNvZGVkLWFycmF5PgorICAgICAgRGVmaW5pdGlvbjogQSBzdGFuZGFyZCBwcm9wZXJ0eS4gIFNwZWNpZmllcyB0aGUgcGh5c2ljYWwKKyAgICAgICAgICBhZGRyZXNzIGFuZCBsZW5ndGggb2YgdGhlIFNFQzQgY29uZmlndXJhdGlvbgorICAgICAgICAgIHJlZ2lzdGVycy4KKworICAgLSBpbnRlcnJ1cHRzCisgICAgICBVc2FnZTogcmVxdWlyZWQKKyAgICAgIFZhbHVlIHR5cGU6IDxwcm9wX2VuY29kZWQtYXJyYXk+CisgICAgICBEZWZpbml0aW9uOiAgU3BlY2lmaWVzIHRoZSBpbnRlcnJ1cHRzIGdlbmVyYXRlZCBieSB0aGlzCisgICAgICAgICAgIGRldmljZS4gIFRoZSB2YWx1ZSBvZiB0aGUgaW50ZXJydXB0cyBwcm9wZXJ0eQorICAgICAgICAgICBjb25zaXN0cyBvZiBvbmUgaW50ZXJydXB0IHNwZWNpZmllci4gVGhlIGZvcm1hdAorICAgICAgICAgICBvZiB0aGUgc3BlY2lmaWVyIGlzIGRlZmluZWQgYnkgdGhlIGJpbmRpbmcgZG9jdW1lbnQKKyAgICAgICAgICAgZGVzY3JpYmluZyB0aGUgbm9kZSdzIGludGVycnVwdCBwYXJlbnQuCisKKyAgIC0gaW50ZXJydXB0LXBhcmVudAorICAgICAgVXNhZ2U6IChyZXF1aXJlZCBpZiBpbnRlcnJ1cHQgcHJvcGVydHkgaXMgZGVmaW5lZCkKKyAgICAgIFZhbHVlIHR5cGU6IDxwaGFuZGxlPgorICAgICAgRGVmaW5pdGlvbjogQSBzaW5nbGUgPHBoYW5kbGU+IHZhbHVlIHRoYXQgcG9pbnRzCisgICAgICAgICAgdG8gdGhlIGludGVycnVwdCBwYXJlbnQgdG8gd2hpY2ggdGhlIGNoaWxkIGRvbWFpbgorICAgICAgICAgIGlzIGJlaW5nIG1hcHBlZC4KKworRVhBTVBMRQorCXNlY19tb25AMzE0MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsc2VjLXY0LjAtbW9uIjsKKwkJcmVnID0gPDB4MzE0MDAwIDB4MTAwMD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQlpbnRlcnJ1cHRzID0gPDkzIDI+OworCX07CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorRlVMTCBFWEFNUExFCisKKwljcnlwdG86IGNyeXB0b0AzMDAwMDAgeworCQljb21wYXRpYmxlID0gImZzbCxzZWMtdjQuMCI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmVnID0gPDB4MzAwMDAwIDB4MTAwMDA+OworCQlyYW5nZXMgPSA8MCAweDMwMDAwMCAweDEwMDAwPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCWludGVycnVwdHMgPSA8OTIgMj47CisKKwkJc2VjX2pyMDoganJAMTAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxzZWMtdjQuMC1qb2ItcmluZyI7CisJCQlyZWcgPSA8MHgxMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8ODggMj47CisJCX07CisKKwkJc2VjX2pyMToganJAMjAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxzZWMtdjQuMC1qb2ItcmluZyI7CisJCQlyZWcgPSA8MHgyMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8ODkgMj47CisJCX07CisKKwkJc2VjX2pyMjoganJAMzAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxzZWMtdjQuMC1qb2ItcmluZyI7CisJCQlyZWcgPSA8MHgzMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8OTAgMj47CisJCX07CisKKwkJc2VjX2pyMzoganJANDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxzZWMtdjQuMC1qb2ItcmluZyI7CisJCQlyZWcgPSA8MHg0MDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8OTEgMj47CisJCX07CisKKwkJcnRpY0A2MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHNlYy12NC4wLXJ0aWMiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCXJlZyA9IDwweDYwMDAgMHgxMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDYxMDAgMHhlMDA+OworCisJCQlydGljX2E6IHJ0aWMtYUAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxzZWMtdjQuMC1ydGljLW1lbW9yeSI7CisJCQkJcmVnID0gPDB4MDAgMHgyMCAweDEwMCAweDgwPjsKKwkJCX07CisKKwkJCXJ0aWNfYjogcnRpYy1iQDIwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxzZWMtdjQuMC1ydGljLW1lbW9yeSI7CisJCQkJcmVnID0gPDB4MjAgMHgyMCAweDIwMCAweDgwPjsKKwkJCX07CisKKwkJCXJ0aWNfYzogcnRpYy1jQDQwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxzZWMtdjQuMC1ydGljLW1lbW9yeSI7CisJCQkJcmVnID0gPDB4NDAgMHgyMCAweDMwMCAweDgwPjsKKwkJCX07CisKKwkJCXJ0aWNfZDogcnRpYy1kQDYwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxzZWMtdjQuMC1ydGljLW1lbW9yeSI7CisJCQkJcmVnID0gPDB4NjAgMHgyMCAweDUwMCAweDgwPjsKKwkJCX07CisJCX07CisJfTsKKworCXNlY19tb246IHNlY19tb25AMzE0MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsc2VjLXY0LjAtbW9uIjsKKwkJcmVnID0gPDB4MzE0MDAwIDB4MTAwMD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQlpbnRlcnJ1cHRzID0gPDkzIDI+OworCX07CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9jYW4vZnNsLWZsZXhjYW4udHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9jYW4vZnNsLWZsZXhjYW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFhNzI5ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Nhbi9mc2wtZmxleGNhbi50eHQKQEAgLTAsMCArMSw2MSBAQAorQ0FOIERldmljZSBUcmVlIEJpbmRpbmdzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzIwMTEgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKworZnNsLGZsZXhjYW4tdjEuMCBub2RlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0luIGFkZGl0aW9uIHRvIHRoZSByZXF1aXJlZCBjb21wYXRpYmxlLSwgcmVnLSBhbmQgaW50ZXJydXB0LXByb3BlcnRpZXMsIHlvdSBjYW4KK2Fsc28gc3BlY2lmeSB3aGljaCBjbG9jayBzb3VyY2Ugc2hhbGwgYmUgdXNlZCBmb3IgdGhlIGNvbnRyb2xsZXIuCisKK0NQSSBDbG9jay0gQ2FuIFByb3RvY29sIEludGVyZmFjZSBDbG9jaworCVRoaXMgQ0xLX1NSQyBiaXQgb2YgQ1RSTChjb250cm9sIHJlZ2lzdGVyKSBzZWxlY3RzIHRoZSBjbG9jayBzb3VyY2UgdG8KKwl0aGUgQ0FOIFByb3RvY29sIEludGVyZmFjZShDUEkpIHRvIGJlIGVpdGhlciB0aGUgcGVyaXBoZXJhbCBjbG9jaworCShkcml2ZW4gYnkgdGhlIFBMTCkgb3IgdGhlIGNyeXN0YWwgb3NjaWxsYXRvciBjbG9jay4gVGhlIHNlbGVjdGVkIGNsb2NrCisJaXMgdGhlIG9uZSBmZWQgdG8gdGhlIHByZXNjYWxlciB0byBnZW5lcmF0ZSB0aGUgU2VyaWFsIENsb2NrIChTY2xvY2spLgorCVRoZSBQUkVTRElWIGZpZWxkIG9mIENUUkwoY29udHJvbCByZWdpc3RlcikgY29udHJvbHMgYSBwcmVzY2FsZXIgdGhhdAorCWdlbmVyYXRlcyB0aGUgU2VyaWFsIENsb2NrIChTY2xvY2spLCB3aG9zZSBwZXJpb2QgZGVmaW5lcyB0aGUKKwl0aW1lIHF1YW50dW0gdXNlZCB0byBjb21wb3NlIHRoZSBDQU4gd2F2ZWZvcm0uCisKK0NhbiBFbmdpbmUgQ2xvY2sgU291cmNlCisJVGhlcmUgYXJlIHR3byBzb3VyY2VzIGZvciBDQU4gY2xvY2sKKwktIFBsYXRmb3JtIENsb2NrICBJdCByZXByZXNlbnRzIHRoZSBidXMgY2xvY2sKKwktIE9zY2lsbGF0b3IgQ2xvY2sKKworCVBlcmlwaGVyYWwgQ2xvY2sgKFBMTCkKKwktLS0tLS0tLS0tLS0tLQorCQkgICAgIHwKKwkJICAgIC0tLS0tLS0tLQkJICAgICAgLS0tLS0tLS0tLS0tLQorCQkgICAgfCAgICAgICB8Q1BJIENsb2NrCSAgICAgIHwgUHJlc2NhbGVyIHwgICAgICAgU2Nsb2NrCisJCSAgICB8ICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tPnwgKDEuLiAyNTYpIHwtLS0tLS0tLS0tLS0+CisJCSAgICAtLS0tLS0tLS0JCSAgICAgIC0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgIHwgIHwKKwktLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tQ0xLX1NSQworCU9zY2lsbGF0b3IgQ2xvY2sKKworLSBmc2wsZmxleGNhbi1jbG9jay1zb3VyY2UgOiBDQU4gRW5naW5lIENsb2NrIFNvdXJjZS5UaGlzIHByb3BlcnR5IHNlbGVjdHMKKwkJCSAgICAgdGhlIHBlcmlwaGVyYWwgY2xvY2suIFBMTCBjbG9jayBpcyBmZWQgdG8gdGhlCisJCQkgICAgIHByZXNjYWxlciB0byBnZW5lcmF0ZSB0aGUgU2VyaWFsIENsb2NrIChTY2xvY2spLgorCQkJICAgICBWYWxpZCB2YWx1ZXMgYXJlICJvc2NpbGxhdG9yIiBhbmQgInBsYXRmb3JtIgorCQkJICAgICAib3NjaWxsYXRvciI6IENBTiBlbmdpbmUgY2xvY2sgc291cmNlIGlzIG9zY2lsbGF0b3IgY2xvY2suCisJCQkgICAgICJwbGF0Zm9ybSIgVGhlIENBTiBlbmdpbmUgY2xvY2sgc291cmNlIGlzIHRoZSBidXMgY2xvY2sKKwkJICAgICAgICAgICAgIChwbGF0Zm9ybSBjbG9jaykuCisKKy0gZnNsLGZsZXhjYW4tY2xvY2stZGl2aWRlciA6IGZvciB0aGUgcmVmZXJlbmNlIGFuZCBzeXN0ZW0gY2xvY2ssIGFuIGFkZGl0aW9uYWwKKwkJCSAgICAgIGNsb2NrIGRpdmlkZXIgY2FuIGJlIHNwZWNpZmllZC4KKy0gY2xvY2stZnJlcXVlbmN5OiBmcmVxdWVuY3kgcmVxdWlyZWQgdG8gY2FsY3VsYXRlIHRoZSBiaXRyYXRlIGZvciBGbGV4Q0FOLgorCitOb3RlOgorCS0gdjEuMCBvZiBmbGV4Y2FuLXYxLjAgcmVwcmVzZW50IHRoZSBJUCBibG9jayB2ZXJzaW9uIGZvciBQMTAxMCBTT0MuCisJLSBQMTAxMCBkb2VzIG5vdCBoYXZlIG9zY2lsbGF0b3IgYXMgdGhlIENsb2NrIFNvdXJjZS5TbyB0aGUgZGVmYXVsdAorCSAgQ2xvY2sgU291cmNlIGlzIHBsYXRmb3JtIGNsb2NrLgorRXhhbXBsZXM6CisKKwljYW4wQDFjMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsZmxleGNhbi12MS4wIjsKKwkJcmVnID0gPDB4MWMwMDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0cyA9IDw0OCAweDI+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJZnNsLGZsZXhjYW4tY2xvY2stc291cmNlID0gInBsYXRmb3JtIjsKKwkJZnNsLGZsZXhjYW4tY2xvY2stZGl2aWRlciA9IDwyPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPGZpeGVkIGJ5IHUtYm9vdD47CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9pZmMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2lmYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM5YTI2ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9pZmMudHh0CkBAIC0wLDAgKzEsNzYgQEAKK0ludGVncmF0ZWQgRmxhc2ggQ29udHJvbGxlcgorCitQcm9wZXJ0aWVzOgorLSBuYW1lIDogU2hvdWxkIGJlIGlmYworLSBjb21wYXRpYmxlIDogc2hvdWxkIGNvbnRhaW4gImZzbCxpZmMiLiBUaGUgdmVyc2lvbiBvZiB0aGUgaW50ZWdyYXRlZAorICAgICAgICAgICAgICAgZmxhc2ggY29udHJvbGxlciBjYW4gYmUgZm91bmQgaW4gdGhlIElGQ19SRVYgcmVnaXN0ZXIgYXQKKyAgICAgICAgICAgICAgIG9mZnNldCB6ZXJvLgorCistICNhZGRyZXNzLWNlbGxzIDogU2hvdWxkIGJlIGVpdGhlciB0d28gb3IgdGhyZWUuICBUaGUgZmlyc3QgY2VsbCBpcyB0aGUKKyAgICAgICAgICAgICAgICAgICBjaGlwc2VsZWN0IG51bWJlciwgYW5kIHRoZSByZW1haW5pbmcgY2VsbHMgYXJlIHRoZQorICAgICAgICAgICAgICAgICAgIG9mZnNldCBpbnRvIHRoZSBjaGlwc2VsZWN0LgorLSAjc2l6ZS1jZWxscyA6IEVpdGhlciBvbmUgb3IgdHdvLCBkZXBlbmRpbmcgb24gaG93IGxhcmdlIGVhY2ggY2hpcHNlbGVjdAorICAgICAgICAgICAgICAgIGNhbiBiZS4KKy0gcmVnIDogT2Zmc2V0IGFuZCBsZW5ndGggb2YgdGhlIHJlZ2lzdGVyIHNldCBmb3IgdGhlIGRldmljZQorLSBpbnRlcnJ1cHRzIDogSUZDIGhhcyB0d28gaW50ZXJydXB0cy4gVGhlIGZpcnN0IG9uZSBpcyB0aGUgImNvbW1vbiIKKyAgICAgICAgICAgICAgIGludGVycnVwdChDTV9FVlRFUl9TVEFUKSwgYW5kIHNlY29uZCBpcyB0aGUgTkFORCBpbnRlcnJ1cHQKKyAgICAgICAgICAgICAgIChOQU5EX0VWVEVSX1NUQVQpLgorCistIHJhbmdlcyA6IEVhY2ggcmFuZ2UgY29ycmVzcG9uZHMgdG8gYSBzaW5nbGUgY2hpcHNlbGVjdCwgYW5kIGNvdmVycworICAgICAgICAgICB0aGUgZW50aXJlIGFjY2VzcyB3aW5kb3cgYXMgY29uZmlndXJlZC4KKworQ2hpbGQgZGV2aWNlIG5vZGVzIGRlc2NyaWJlIHRoZSBkZXZpY2VzIGNvbm5lY3RlZCB0byBJRkMgc3VjaCBhcyBOT1IgKGUuZy4KK2NmaS1mbGFzaCkgYW5kIE5BTkQgKGZzbCxpZmMtbmFuZCkuIFRoZXJlIG1pZ2h0IGJlIGJvYXJkIHNwZWNpZmljIGRldmljZXMKK2xpa2UgRlBHQXMsIENQTERzLCBldGMuCisKK0V4YW1wbGU6CisKKwlpZmNAZmZlMWUwMDAgeworCQljb21wYXRpYmxlID0gImZzbCxpZmMiLCAic2ltcGxlLWJ1cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmVnID0gPDB4MCAweGZmZTFlMDAwIDAgMHgyMDAwPjsKKwkJaW50ZXJydXB0cyA9IDwxNiAyIDE5IDI+OworCisJCS8qIE5PUiwgTkFORCBGbGFzaGVzIGFuZCBDUExEIG9uIGJvYXJkICovCisJCXJhbmdlcyA9IDwweDAgMHgwIDB4MCAweGVlMDAwMDAwIDB4MDIwMDAwMDAKKwkJCSAgMHgxIDB4MCAweDAgMHhmZmEwMDAwMCAweDAwMDEwMDAwCisJCQkgIDB4MyAweDAgMHgwIDB4ZmZiMDAwMDAgMHgwMDAyMDAwMD47CisKKwkJZmxhc2hAMCwwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MHgwIDB4MCAweDIwMDAwMDA+OworCQkJYmFuay13aWR0aCA9IDwyPjsKKwkJCWRldmljZS13aWR0aCA9IDwxPjsKKworCQkJcGFydGl0aW9uQDAgeworCQkJCS8qIDMyTUIgZm9yIHVzZXIgZGF0YSAqLworCQkJCXJlZyA9IDwweDAgMHgwMjAwMDAwMD47CisJCQkJbGFiZWwgPSAiTk9SIERhdGEiOworCQkJfTsKKwkJfTsKKworCQlmbGFzaEAxLDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGlmYy1uYW5kIjsKKwkJCXJlZyA9IDwweDEgMHgwIDB4MTAwMDA+OworCisJCQlwYXJ0aXRpb25AMCB7CisJCQkJLyogVGhpcyBsb2NhdGlvbiBtdXN0IG5vdCBiZSBhbHRlcmVkICAqLworCQkJCS8qIDFNQiBmb3IgdS1ib290IEJvb3Rsb2FkZXIgSW1hZ2UgKi8KKwkJCQlyZWcgPSA8MHgwIDB4MDAxMDAwMDA+OworCQkJCWxhYmVsID0gIk5BTkQgVS1Cb290IEltYWdlIjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCQl9OworCisJCWNwbGRAMywwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbCxwMTAxMHJkYi1jcGxkIjsKKwkJCXJlZyA9IDwweDMgMHgwIDB4MDAwMDAxZj47CisJCX07CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9tcGljLXRpbWVyLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9tcGljLXRpbWVyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjQxOTU4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL21waWMtdGltZXIudHh0CkBAIC0wLDAgKzEsMzggQEAKKyogRnJlZXNjYWxlIE1QSUMgdGltZXJzCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CistIGNvbXBhdGlibGU6ICJmc2wsbXBpYy1nbG9iYWwtdGltZXIiCisKKy0gcmVnIDogQ29udGFpbnMgdHdvIHJlZ2lvbnMuICBUaGUgZmlyc3QgaXMgdGhlIG1haW4gdGltZXIgcmVnaXN0ZXIgYmFuaworICAoR1RDQ1J4eCwgR1RCQ1J4eCwgR1RWUFJ4eCwgR1REUnh4KS4gIFRoZSBzZWNvbmQgaXMgdGhlIHRpbWVyIGNvbnRyb2wKKyAgcmVnaXN0ZXIgKFRDUngpIGZvciB0aGUgZ3JvdXAuCisKKy0gZnNsLGF2YWlsYWJsZS1yYW5nZXM6IHVzZSA8c3RhcnQgY291bnQ+IHN0eWxlIHNlY3Rpb24gdG8gZGVmaW5lIHdoaWNoCisgIHRpbWVyIGludGVycnVwdHMgY2FuIGJlIHVzZWQuICBUaGlzIHByb3BlcnR5IGlzIG9wdGlvbmFsOyB3aXRob3V0IHRoaXMsCisgIGFsbCB0aW1lcnMgd2l0aGluIHRoZSBncm91cCBjYW4gYmUgdXNlZC4KKworLSBpbnRlcnJ1cHRzOiBvbmUgaW50ZXJydXB0IHBlciB0aW1lciBpbiB0aGUgZ3JvdXAsIGluIG9yZGVyLCBzdGFydGluZworICB3aXRoIHRpbWVyIHplcm8uICBJZiB0aW1lci1hdmFpbGFibGUtcmFuZ2VzIGlzIHByZXNlbnQsIG9ubHkgdGhlCisgIGludGVycnVwdHMgdGhhdCBjb3JyZXNwb25kIHRvIGF2YWlsYWJsZSB0aW1lcnMgc2hhbGwgYmUgcHJlc2VudC4KKworRXhhbXBsZToKKwkvKiBOb3RlIHRoYXQgdGhpcyByZXF1aXJlcyAjaW50ZXJydXB0LWNlbGxzIHRvIGJlIDQgKi8KKwl0aW1lcjA6IHRpbWVyQDQxMTAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBpYy1nbG9iYWwtdGltZXIiOworCQlyZWcgPSA8MHg0MTEwMCAweDEwMCAweDQxMzAwIDQ+OworCisJCS8qIEFub3RoZXIgQU1QIHBhcnRpdGlvbiBpcyB1c2luZyB0aW1lcnMgMCBhbmQgMSAqLworCQlmc2wsYXZhaWxhYmxlLXJhbmdlcyA9IDwyIDI+OworCisJCWludGVycnVwdHMgPSA8MiAwIDMgMAorCQkgICAgICAgICAgICAgIDMgMCAzIDA+OworCX07CisKKwl0aW1lcjE6IHRpbWVyQDQyMTAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBpYy1nbG9iYWwtdGltZXIiOworCQlyZWcgPSA8MHg0MjEwMCAweDEwMCAweDQyMzAwIDQ+OworCQlpbnRlcnJ1cHRzID0gPDQgMCAzIDAKKwkJICAgICAgICAgICAgICA1IDAgMyAwCisJCSAgICAgICAgICAgICAgNiAwIDMgMAorCQkgICAgICAgICAgICAgIDcgMCAzIDA+OworCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvbXBpYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvbXBpYy50eHQKaW5kZXggNGY2MTQ1OC4uMmNmMzhiZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL21waWMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9tcGljLnR4dApAQCAtMTkwLDcgKzE5MCw3IEBACiAJICovCiAJdGltZXIwOiB0aW1lckA0MTEwMCB7CiAJCWNvbXBhdGlibGUgPSAiZnNsLG1waWMtZ2xvYmFsLXRpbWVyIjsKLQkJcmVnID0gPDB4NDExMDAgMHgxMDA+OworCQlyZWcgPSA8MHg0MTEwMCAweDEwMCAweDQxMzAwIDQ+OwogCQlpbnRlcnJ1cHRzID0gPDAgMCAzIDAKIAkJICAgICAgICAgICAgICAxIDAgMyAwCiAJCSAgICAgICAgICAgICAgMiAwIDMgMApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvbmludGVuZG8vd2lpLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL25pbnRlbmRvL3dpaS50eHQKaW5kZXggYTdlMTU1YS4uMzZhZmEzMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvbmludGVuZG8vd2lpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9uaW50ZW5kby93aWkudHh0CkBAIC0xMjcsNyArMTI3LDcgQEAKICAgIC0gcmVnIDogc2hvdWxkIGNvbnRhaW4gdGhlIFNESENJIHJlZ2lzdGVycyBsb2NhdGlvbiBhbmQgbGVuZ3RoCiAgICAtIGludGVycnVwdHMgOiBzaG91bGQgY29udGFpbiB0aGUgU0RIQ0kgaW50ZXJydXB0CiAKLTEuaikgVGhlIEludGVyLVByb2Nlc3Nzb3IgQ29tbXVuaWNhdGlvbiAoSVBDKSBub2RlCisxLmopIFRoZSBJbnRlci1Qcm9jZXNzb3IgQ29tbXVuaWNhdGlvbiAoSVBDKSBub2RlCiAKICAgUmVwcmVzZW50IHRoZSBJbnRlci1Qcm9jZXNzb3IgQ29tbXVuaWNhdGlvbiBpbnRlcmZhY2UuIFRoaXMgaW50ZXJmYWNlCiAgIGVuYWJsZXMgY29tbXVuaWNhdGlvbnMgYmV0d2VlbiB0aGUgQnJvYWR3YXkgYW5kIHRoZSBTdGFybGV0IHByb2Nlc3NvcnMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKaW5kZXggZjZhMjRlOC4uMTkxMzJjYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dApAQCAtMzUsMTcgKzM1LDYgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdoYXQ6CUFSOTE3MFVTQgotV2hlbjoJMi42LjQwCi0KLVdoeToJVGhpcyBkcml2ZXIgaXMgZGVwcmVjYXRlZCBhbmQgdGhlIGZpcm13YXJlIGlzIG5vIGxvbmdlcgotCW1haW50YWluZWQuIFRoZSByZXBsYWNlbWVudCBkcml2ZXIgImNhcmw5MTcwIiBoYXMgYmVlbgotCWFyb3VuZCBmb3IgYSB3aGlsZSwgc28gdGhlIGRldmljZXMgYXJlIHN0aWxsIHN1cHBvcnRlZC4KLQotV2hvOglDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUBnb29nbGVtYWlsLmNvbT4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIFdoYXQ6CUlSUUZfU0FNUExFX1JBTkRPTQogQ2hlY2s6CUlSUUZfU0FNUExFX1JBTkRPTQogV2hlbjoJSnVseSAyMDA5CkBAIC0yMjYsNyArMjE1LDcgQEAKIFdoYXQ6CUNPTkZJR19BQ1BJX1BST0NGU19QT1dFUgogV2hlbjoJMi42LjM5CiBXaHk6CXN5c2ZzIEkvRiBmb3IgQUNQSSBwb3dlciBkZXZpY2VzLCBpbmNsdWRpbmcgQUMgYW5kIEJhdHRlcnksCi0gICAgICAgIGhhcyBiZWVuIHdvcmtpbmcgaW4gdXBzdHJlYW0ga2VucmVsIHNpbmNlIDIuNi4yNCwgU2VwIDIwMDcuCisgICAgICAgIGhhcyBiZWVuIHdvcmtpbmcgaW4gdXBzdHJlYW0ga2VybmVsIHNpbmNlIDIuNi4yNCwgU2VwIDIwMDcuCiAJSW4gMi42LjM3LCB3ZSBtYWtlIHRoZSBzeXNmcyBJL0YgYWx3YXlzIGJ1aWx0IGluIGFuZCB0aGlzIG9wdGlvbgogCWRpc2FibGVkIGJ5IGRlZmF1bHQuCiAJUmVtb3ZlIHRoaXMgb3B0aW9uIGFuZCB0aGUgQUNQSSBwb3dlciBwcm9jZnMgaW50ZXJmYWNlIGluIDIuNi4zOS4KQEAgLTQwNSwxNiArMzk0LDYgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGF0OgljYXBpZnMKLVdoZW46CUZlYnJ1YXJ5IDIwMTEKLUZpbGVzOglkcml2ZXJzL2lzZG4vY2FwaS9jYXBpZnMuKgotV2h5Ogl1ZGV2IGZ1bGx5IHJlcGxhY2VzIHRoaXMgc3BlY2lhbCBmaWxlIHN5c3RlbSB0aGF0IG9ubHkgY29udGFpbnMgQ0FQSQotCU5DQ0kgVFRZIGRldmljZSBub2Rlcy4gVXNlciBzcGFjZSAocHBwZGNhcGlwbHVnaW4pIHdvcmtzIHdpdGhvdXQKLQlub3RpY2luZyB0aGUgZGlmZmVyZW5jZS4KLVdobzoJSmFuIEtpc3prYSA8amFuLmtpc3prYUB3ZWIuZGU+Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogV2hhdDoJS1ZNIHBhcmF2aXJ0IG1tdSBob3N0IHN1cHBvcnQKIFdoZW46CUphbnVhcnkgMjAxMQogV2h5OglUaGUgcGFyYXZpcnQgbW11IGhvc3Qgc3VwcG9ydCBpcyBzbG93ZXIgdGhhbiBub24tcGFyYXZpcnQgbW11LCBib3RoCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9oaWRkZXYudHh0IGIvRG9jdW1lbnRhdGlvbi9oaWQvaGlkZGV2LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi91c2IvaGlkZGV2LnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9oaWQvaGlkZGV2LnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9oaWQvaGlkcmF3LnR4dCBiL0RvY3VtZW50YXRpb24vaGlkL2hpZHJhdy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI5ZTZjYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaGlkL2hpZHJhdy50eHQKQEAgLTAsMCArMSwxMTkgQEAKKyAgICAgIEhJRFJBVyAtIFJhdyBBY2Nlc3MgdG8gVVNCIGFuZCBCbHVldG9vdGggSHVtYW4gSW50ZXJmYWNlIERldmljZXMKKyAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBoaWRyYXcgZHJpdmVyIHByb3ZpZGVzIGEgcmF3IGludGVyZmFjZSB0byBVU0IgYW5kIEJsdWV0b290aCBIdW1hbgorSW50ZXJmYWNlIERldmljZXMgKEhJRHMpLiAgSXQgZGlmZmVycyBmcm9tIGhpZGRldiBpbiB0aGF0IHJlcG9ydHMgc2VudCBhbmQKK3JlY2VpdmVkIGFyZSBub3QgcGFyc2VkIGJ5IHRoZSBISUQgcGFyc2VyLCBidXQgYXJlIHNlbnQgdG8gYW5kIHJlY2VpdmVkIGZyb20KK3RoZSBkZXZpY2UgdW5tb2RpZmllZC4KKworSGlkcmF3IHNob3VsZCBiZSB1c2VkIGlmIHRoZSB1c2Vyc3BhY2UgYXBwbGljYXRpb24ga25vd3MgZXhhY3RseSBob3cgdG8KK2NvbW11bmljYXRlIHdpdGggdGhlIGhhcmR3YXJlIGRldmljZSwgYW5kIGlzIGFibGUgdG8gY29uc3RydWN0IHRoZSBISUQKK3JlcG9ydHMgbWFudWFsbHkuICBUaGlzIGlzIG9mdGVuIHRoZSBjYXNlIHdoZW4gbWFraW5nIHVzZXJzcGFjZSBkcml2ZXJzIGZvcgorY3VzdG9tIEhJRCBkZXZpY2VzLgorCitIaWRyYXcgaXMgYWxzbyB1c2VmdWwgZm9yIGNvbW11bmljYXRpbmcgd2l0aCBub24tY29uZm9ybWFudCBISUQgZGV2aWNlcword2hpY2ggc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIGluIGEgd2F5IHRoYXQgaXMgaW5jb25zaXN0ZW50IHdpdGggdGhlaXIgcmVwb3J0CitkZXNjcmlwdG9ycy4gIEJlY2F1c2UgaGlkZGV2IHBhcnNlcyByZXBvcnRzIHdoaWNoIGFyZSBzZW50IGFuZCByZWNlaXZlZAordGhyb3VnaCBpdCwgY2hlY2tpbmcgdGhlbSBhZ2FpbnN0IHRoZSBkZXZpY2UncyByZXBvcnQgZGVzY3JpcHRvciwgc3VjaAorY29tbXVuaWNhdGlvbiB3aXRoIHRoZXNlIG5vbi1jb25mb3JtYW50IGRldmljZXMgaXMgaW1wb3NzaWJsZSB1c2luZyBoaWRkZXYuCitIaWRyYXcgaXMgdGhlIG9ubHkgYWx0ZXJuYXRpdmUsIHNob3J0IG9mIHdyaXRpbmcgYSBjdXN0b20ga2VybmVsIGRyaXZlciwgZm9yCit0aGVzZSBub24tY29uZm9ybWFudCBkZXZpY2VzLgorCitBIGJlbmVmaXQgb2YgaGlkcmF3IGlzIHRoYXQgaXRzIHVzZSBieSB1c2Vyc3BhY2UgYXBwbGljYXRpb25zIGlzIGluZGVwZW5kZW50CitvZiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSB0eXBlLiAgQ3VycmVudGx5LCBIaWRyYXcgaXMgaW1wbGVtZW50ZWQgZm9yIFVTQgorYW5kIEJsdWV0b290aC4gIEluIHRoZSBmdXR1cmUsIGFzIG5ldyBoYXJkd2FyZSBidXMgdHlwZXMgYXJlIGRldmVsb3BlZCB3aGljaAordXNlIHRoZSBISUQgc3BlY2lmaWNhdGlvbiwgaGlkcmF3IHdpbGwgYmUgZXhwYW5kZWQgdG8gYWRkIHN1cHBvcnQgZm9yIHRoZXNlCituZXcgYnVzIHR5cGVzLgorCitIaWRyYXcgdXNlcyBhIGR5bmFtaWMgbWFqb3IgbnVtYmVyLCBtZWFuaW5nIHRoYXQgdWRldiBzaG91bGQgYmUgcmVsaWVkIG9uIHRvCitjcmVhdGUgaGlkcmF3IGRldmljZSBub2Rlcy4gIFVkZXYgd2lsbCB0eXBpY2FsbHkgY3JlYXRlIHRoZSBkZXZpY2Ugbm9kZXMKK2RpcmVjdGx5IHVuZGVyIC9kZXYgKGVnOiAvZGV2L2hpZHJhdzApLiAgQXMgdGhpcyBsb2NhdGlvbiBpcyBkaXN0cmlidXRpb24tCithbmQgdWRldiBydWxlLWRlcGVuZGVudCwgYXBwbGljYXRpb25zIHNob3VsZCB1c2UgbGlidWRldiB0byBsb2NhdGUgaGlkcmF3CitkZXZpY2VzIGF0dGFjaGVkIHRvIHRoZSBzeXN0ZW0uICBUaGVyZSBpcyBhIHR1dG9yaWFsIG9uIGxpYnVkZXYgd2l0aCBhCit3b3JraW5nIGV4YW1wbGUgYXQ6CisJaHR0cDovL3d3dy5zaWduYWwxMS51cy9vc3MvdWRldi8KKworVGhlIEhJRFJBVyBBUEkKKy0tLS0tLS0tLS0tLS0tLQorCityZWFkKCkKKy0tLS0tLS0KK3JlYWQoKSB3aWxsIHJlYWQgYSBxdWV1ZWQgcmVwb3J0IHJlY2VpdmVkIGZyb20gdGhlIEhJRCBkZXZpY2UuIE9uIFVTQgorZGV2aWNlcywgdGhlIHJlcG9ydHMgcmVhZCB1c2luZyByZWFkKCkgYXJlIHRoZSByZXBvcnRzIHNlbnQgZnJvbSB0aGUgZGV2aWNlCitvbiB0aGUgSU5URVJSVVBUIElOIGVuZHBvaW50LiAgQnkgZGVmYXVsdCwgcmVhZCgpIHdpbGwgYmxvY2sgdW50aWwgdGhlcmUgaXMKK2EgcmVwb3J0IGF2YWlsYWJsZSB0byBiZSByZWFkLiAgcmVhZCgpIGNhbiBiZSBtYWRlIG5vbi1ibG9ja2luZywgYnkgcGFzc2luZwordGhlIE9fTk9OQkxPQ0sgZmxhZyB0byBvcGVuKCksIG9yIGJ5IHNldHRpbmcgdGhlIE9fTk9OQkxPQ0sgZmxhZyB1c2luZworZmNudGwoKS4KKworT24gYSBkZXZpY2Ugd2hpY2ggdXNlcyBudW1iZXJlZCByZXBvcnRzLCB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgcmV0dXJuZWQgZGF0YQord2lsbCBiZSB0aGUgcmVwb3J0IG51bWJlcjsgdGhlIHJlcG9ydCBkYXRhIGZvbGxvd3MsIGJlZ2lubmluZyBpbiB0aGUgc2Vjb25kCitieXRlLiAgRm9yIGRldmljZXMgd2hpY2ggZG8gbm90IHVzZSBudW1iZXJlZCByZXBvcnRzLCB0aGUgcmVwb3J0IGRhdGEKK3dpbGwgYmVnaW4gYXQgdGhlIGZpcnN0IGJ5dGUuCisKK3dyaXRlKCkKKy0tLS0tLS0tCitUaGUgd3JpdGUoKSBmdW5jdGlvbiB3aWxsIHdyaXRlIGEgcmVwb3J0IHRvIHRoZSBkZXZpY2UuIEZvciBVU0IgZGV2aWNlcywgaWYKK3RoZSBkZXZpY2UgaGFzIGFuIElOVEVSUlVQVCBPVVQgZW5kcG9pbnQsIHRoZSByZXBvcnQgd2lsbCBiZSBzZW50IG9uIHRoYXQKK2VuZHBvaW50LiBJZiBpdCBkb2VzIG5vdCwgdGhlIHJlcG9ydCB3aWxsIGJlIHNlbnQgb3ZlciB0aGUgY29udHJvbCBlbmRwb2ludCwKK3VzaW5nIGEgU0VUX1JFUE9SVCB0cmFuc2Zlci4KKworVGhlIGZpcnN0IGJ5dGUgb2YgdGhlIGJ1ZmZlciBwYXNzZWQgdG8gd3JpdGUoKSBzaG91bGQgYmUgc2V0IHRvIHRoZSByZXBvcnQKK251bWJlci4gIElmIHRoZSBkZXZpY2UgZG9lcyBub3QgdXNlIG51bWJlcmVkIHJlcG9ydHMsIHRoZSBmaXJzdCBieXRlIHNob3VsZAorYmUgc2V0IHRvIDAuIFRoZSByZXBvcnQgZGF0YSBpdHNlbGYgc2hvdWxkIGJlZ2luIGF0IHRoZSBzZWNvbmQgYnl0ZS4KKworaW9jdGwoKQorLS0tLS0tLS0KK0hpZHJhdyBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIGlvY3RsczoKKworSElESU9DR1JERVNDU0laRTogR2V0IFJlcG9ydCBEZXNjcmlwdG9yIFNpemUKK1RoaXMgaW9jdGwgd2lsbCBnZXQgdGhlIHNpemUgb2YgdGhlIGRldmljZSdzIHJlcG9ydCBkZXNjcmlwdG9yLgorCitISURJT0NHUkRFU0M6IEdldCBSZXBvcnQgRGVzY3JpcHRvcgorVGhpcyBpb2N0bCByZXR1cm5zIHRoZSBkZXZpY2UncyByZXBvcnQgZGVzY3JpcHRvciB1c2luZyBhCitoaWRyYXdfcmVwb3J0X2Rlc2NyaXB0b3Igc3RydWN0LiAgTWFrZSBzdXJlIHRvIHNldCB0aGUgc2l6ZSBmaWVsZCBvZiB0aGUKK2hpZHJhd19yZXBvcnRfZGVzY3JpcHRvciBzdHJ1Y3QgdG8gdGhlIHNpemUgcmV0dXJuZWQgZnJvbSBISURJT0NHUkRFU0NTSVpFLgorCitISURJT0NHUkFXSU5GTzogR2V0IFJhdyBJbmZvCitUaGlzIGlvY3RsIHdpbGwgcmV0dXJuIGEgaGlkcmF3X2RldmluZm8gc3RydWN0IGNvbnRhaW5pbmcgdGhlIGJ1cyB0eXBlLCB0aGUKK3ZlbmRvciBJRCAoVklEKSwgYW5kIHByb2R1Y3QgSUQgKFBJRCkgb2YgdGhlIGRldmljZS4gVGhlIGJ1cyB0eXBlIGNhbiBiZSBvbmUKK29mOgorCUJVU19VU0IKKwlCVVNfSElMCisJQlVTX0JMVUVUT09USAorCUJVU19WSVJUVUFMCit3aGljaCBhcmUgZGVmaW5lZCBpbiBsaW51eC9pbnB1dC5oLgorCitISURJT0NHUkFXTkFNRShsZW4pOiBHZXQgUmF3IE5hbWUKK1RoaXMgaW9jdGwgcmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIHRoZSB2ZW5kb3IgYW5kIHByb2R1Y3Qgc3RyaW5ncyBvZgordGhlIGRldmljZS4gIFRoZSByZXR1cm5lZCBzdHJpbmcgaXMgVW5pY29kZSwgVVRGLTggZW5jb2RlZC4KKworSElESU9DR1JBV1BIWVMobGVuKTogR2V0IFBoeXNpY2FsIEFkZHJlc3MKK1RoaXMgaW9jdGwgcmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGRldmljZS4KK0ZvciBVU0IgZGV2aWNlcywgdGhlIHN0cmluZyBjb250YWlucyB0aGUgcGh5c2ljYWwgcGF0aCB0byB0aGUgZGV2aWNlICh0aGUKK1VTQiBjb250cm9sbGVyLCBodWJzLCBwb3J0cywgZXRjKS4gIEZvciBCbHVldG9vdGggZGV2aWNlcywgdGhlIHN0cmluZworY29udGFpbnMgdGhlIGhhcmR3YXJlIChNQUMpIGFkZHJlc3Mgb2YgdGhlIGRldmljZS4KKworSElESU9DU0ZFQVRVUkUobGVuKTogU2VuZCBhIEZlYXR1cmUgUmVwb3J0CitUaGlzIGlvY3RsIHdpbGwgc2VuZCBhIGZlYXR1cmUgcmVwb3J0IHRvIHRoZSBkZXZpY2UuICBQZXIgdGhlIEhJRAorc3BlY2lmaWNhdGlvbiwgZmVhdHVyZSByZXBvcnRzIGFyZSBhbHdheXMgc2VudCB1c2luZyB0aGUgY29udHJvbCBlbmRwb2ludC4KK1NldCB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgc3VwcGxpZWQgYnVmZmVyIHRvIHRoZSByZXBvcnQgbnVtYmVyLiAgRm9yIGRldmljZXMKK3doaWNoIGRvIG5vdCB1c2UgbnVtYmVyZWQgcmVwb3J0cywgc2V0IHRoZSBmaXJzdCBieXRlIHRvIDAuIFRoZSByZXBvcnQgZGF0YQorYmVnaW5zIGluIHRoZSBzZWNvbmQgYnl0ZS4gTWFrZSBzdXJlIHRvIHNldCBsZW4gYWNjb3JkaW5nbHksIHRvIG9uZSBtb3JlCit0aGFuIHRoZSBsZW5ndGggb2YgdGhlIHJlcG9ydCAodG8gYWNjb3VudCBmb3IgdGhlIHJlcG9ydCBudW1iZXIpLgorCitISURJT0NHRkVBVFVSRShsZW4pOiBHZXQgYSBGZWF0dXJlIFJlcG9ydAorVGhpcyBpb2N0bCB3aWxsIHJlcXVlc3QgYSBmZWF0dXJlIHJlcG9ydCBmcm9tIHRoZSBkZXZpY2UgdXNpbmcgdGhlIGNvbnRyb2wKK2VuZHBvaW50LiAgVGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHN1cHBsaWVkIGJ1ZmZlciBzaG91bGQgYmUgc2V0IHRvIHRoZSByZXBvcnQKK251bWJlciBvZiB0aGUgcmVxdWVzdGVkIHJlcG9ydC4gIEZvciBkZXZpY2VzIHdoaWNoIGRvIG5vdCB1c2UgbnVtYmVyZWQKK3JlcG9ydHMsIHNldCB0aGUgZmlyc3QgYnl0ZSB0byAwLiAgVGhlIHJlcG9ydCB3aWxsIGJlIHJldHVybmVkIHN0YXJ0aW5nIGF0Cit0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgYnVmZmVyIChpZTogdGhlIHJlcG9ydCBudW1iZXIgaXMgbm90IHJldHVybmVkKS4KKworRXhhbXBsZQorLS0tLS0tLS0tCitJbiBzYW1wbGVzLywgZmluZCBoaWQtZXhhbXBsZS5jLCB3aGljaCBzaG93cyBleGFtcGxlcyBvZiByZWFkKCksIHdyaXRlKCksCithbmQgYWxsIHRoZSBpb2N0bHMgZm9yIGhpZHJhdy4gIFRoZSBjb2RlIG1heSBiZSB1c2VkIGJ5IGFueW9uZSBmb3IgYW55CitwdXJwb3NlLCBhbmQgY2FuIHNlcnZlIGFzIGEgc3RhcnRpbmcgcG9pbnQgZm9yIGRldmVsb3BpbmcgYXBwbGljYXRpb25zIHVzaW5nCitoaWRyYXcuCisKK0RvY3VtZW50IGJ5OgorCUFsYW4gT3R0IDxhbGFuQHNpZ25hbDExLnVzPiwgU2lnbmFsIDExIFNvZnR3YXJlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2FkbTEyNzUgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2FkbTEyNzUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEzYTY0NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vYWRtMTI3NQpAQCAtMCwwICsxLDYwIEBACitLZXJuZWwgZHJpdmVyIGFkbTEyNzUKKz09PT09PT09PT09PT09PT09PT09PQorCitTdXBwb3J0ZWQgY2hpcHM6CisgICogQW5hbG9nIERldmljZXMgQURNMTI3NQorICAgIFByZWZpeDogJ2FkbTEyNzUnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IC0KKyAgICBEYXRhc2hlZXQ6IHd3dy5hbmFsb2cuY29tL3N0YXRpYy9pbXBvcnRlZC1maWxlcy9kYXRhX3NoZWV0cy9BRE0xMjc1LnBkZgorCitBdXRob3I6IEd1ZW50ZXIgUm9lY2sgPGd1ZW50ZXIucm9lY2tAZXJpY3Nzb24uY29tPgorCisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBzdXBwb3J0cyBoYXJkd2FyZSBtb250b3JpbmcgZm9yIEFuYWxvZyBEZXZpY2VzIEFETTEyNzUgSG90LVN3YXAKK0NvbnRyb2xsZXIgYW5kIERpZ2l0YWwgUG93ZXIgTW9uaXRvci4KKworVGhlIEFETTEyNzUgaXMgYSBob3Qtc3dhcCBjb250cm9sbGVyIHRoYXQgYWxsb3dzIGEgY2lyY3VpdCBib2FyZCB0byBiZSByZW1vdmVkCitmcm9tIG9yIGluc2VydGVkIGludG8gYSBsaXZlIGJhY2twbGFuZS4gSXQgYWxzbyBmZWF0dXJlcyBjdXJyZW50IGFuZCB2b2x0YWdlCityZWFkYmFjayB2aWEgYW4gaW50ZWdyYXRlZCAxMi1iaXQgYW5hbG9nLXRvLWRpZ2l0YWwgY29udmVydGVyIChBREMpLCBhY2Nlc3NlZAordXNpbmcgYSBQTUJ1cy4gaW50ZXJmYWNlLgorCitUaGUgZHJpdmVyIGlzIGEgY2xpZW50IGRyaXZlciB0byB0aGUgY29yZSBQTUJ1cyBkcml2ZXIuIFBsZWFzZSBzZWUKK0RvY3VtZW50YXRpb24vaHdtb24vcG1idXMgZm9yIGRldGFpbHMgb24gUE1CdXMgY2xpZW50IGRyaXZlcnMuCisKKworVXNhZ2UgTm90ZXMKKy0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIGRvZXMgbm90IGF1dG8tZGV0ZWN0IGRldmljZXMuIFlvdSB3aWxsIGhhdmUgdG8gaW5zdGFudGlhdGUgdGhlCitkZXZpY2VzIGV4cGxpY2l0bHkuIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pMmMvaW5zdGFudGlhdGluZy1kZXZpY2VzIGZvcgorZGV0YWlscy4KKworCitQbGF0Zm9ybSBkYXRhIHN1cHBvcnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZHJpdmVyIHN1cHBvcnRzIHN0YW5kYXJkIFBNQnVzIGRyaXZlciBwbGF0Zm9ybSBkYXRhLiBQbGVhc2Ugc2VlCitEb2N1bWVudGF0aW9uL2h3bW9uL3BtYnVzIGZvciBkZXRhaWxzLgorCisKK1N5c2ZzIGVudHJpZXMKKy0tLS0tLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFyZSBzdXBwb3J0ZWQuIExpbWl0cyBhcmUgcmVhZC13cml0ZTsgYWxsIG90aGVyCithdHRyaWJ1dGVzIGFyZSByZWFkLW9ubHkuCisKK2luMV9sYWJlbAkJInZpbjEiIG9yICJ2b3V0MSIgZGVwZW5kaW5nIG9uIGNoaXAgdmFyaWFudCBhbmQKKwkJCWNvbmZpZ3VyYXRpb24uCitpbjFfaW5wdXQJCU1lYXN1cmVkIHZvbHRhZ2UuIEZyb20gUkVBRF9WT1VUIHJlZ2lzdGVyLgoraW4xX21pbgkJCU1pbnVtdW0gVm9sdGFnZS4gRnJvbSBWT1VUX1VWX1dBUk5fTElNSVQgcmVnaXN0ZXIuCitpbjFfbWF4CQkJTWF4aW11bSB2b2x0YWdlLiBGcm9tIFZPVVRfT1ZfV0FSTl9MSU1JVCByZWdpc3Rlci4KK2luMV9taW5fYWxhcm0JCVZvbHRhZ2UgbG93IGFsYXJtLiBGcm9tIFZPTFRBR0VfVVZfV0FSTklORyBzdGF0dXMuCitpbjFfbWF4X2FsYXJtCQlWb2x0YWdlIGhpZ2ggYWxhcm0uIEZyb20gVk9MVEFHRV9PVl9XQVJOSU5HIHN0YXR1cy4KKworY3VycjFfbGFiZWwJCSJpb3V0MSIKK2N1cnIxX2lucHV0CQlNZWFzdXJlZCBjdXJyZW50LiBGcm9tIFJFQURfSU9VVCByZWdpc3Rlci4KK2N1cnIxX21heAkJTWF4aW11bSBjdXJyZW50LiBGcm9tIElPVVRfT0NfV0FSTl9MSU1JVCByZWdpc3Rlci4KK2N1cnIxX21heF9hbGFybQkJQ3VycmVudCBoaWdoIGFsYXJtLiBGcm9tIElPVVRfT0NfV0FSTl9MSU1JVCByZWdpc3Rlci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vY29yZXRlbXAgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2NvcmV0ZW1wCmluZGV4IDI1NTY4ZjguLmY4NWU5MTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vY29yZXRlbXAKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9jb3JldGVtcApAQCAtMTUsOCArMTUsMTMgQEAKIAogRGVzY3JpcHRpb24KIC0tLS0tLS0tLS0tCitUaGlzIGRyaXZlciBwZXJtaXRzIHJlYWRpbmcgdGhlIERUUyAoRGlnaXRhbCBUZW1wZXJhdHVyZSBTZW5zb3IpIGVtYmVkZGVkCitpbnNpZGUgSW50ZWwgQ1BVcy4gVGhpcyBkcml2ZXIgY2FuIHJlYWQgYm90aCB0aGUgcGVyLWNvcmUgYW5kIHBlci1wYWNrYWdlCit0ZW1wZXJhdHVyZSB1c2luZyB0aGUgYXBwcm9wcmlhdGUgc2Vuc29ycy4gVGhlIHBlci1wYWNrYWdlIHNlbnNvciBpcyBuZXc7CithcyBvZiBub3csIGl0IGlzIHByZXNlbnQgb25seSBpbiB0aGUgU2FuZHlCcmlkZ2UgcGxhdGZvcm0uIFRoZSBkcml2ZXIgd2lsbAorc2hvdyB0aGUgdGVtcGVyYXR1cmUgb2YgYWxsIGNvcmVzIGluc2lkZSBhIHBhY2thZ2UgdW5kZXIgYSBzaW5nbGUgZGV2aWNlCitkaXJlY3RvcnkgaW5zaWRlIGh3bW9uLgogCi1UaGlzIGRyaXZlciBwZXJtaXRzIHJlYWRpbmcgdGVtcGVyYXR1cmUgc2Vuc29yIGVtYmVkZGVkIGluc2lkZSBJbnRlbCBDb3JlIENQVS4KIFRlbXBlcmF0dXJlIGlzIG1lYXN1cmVkIGluIGRlZ3JlZXMgQ2Vsc2l1cyBhbmQgbWVhc3VyZW1lbnQgcmVzb2x1dGlvbiBpcwogMSBkZWdyZWUgQy4gVmFsaWQgdGVtcGVyYXR1cmVzIGFyZSBmcm9tIDAgdG8gVGpNYXggZGVncmVlcyBDLCBiZWNhdXNlCiB0aGUgYWN0dWFsIHZhbHVlIG9mIHRlbXBlcmF0dXJlIHJlZ2lzdGVyIGlzIGluIGZhY3QgYSBkZWx0YSBmcm9tIFRqTWF4LgpAQCAtMjcsMTMgKzMyLDE1IEBACiBtYXkgYmUgcmFpc2VkLCBpZiB0aGUgdGVtcGVyYXR1cmUgZ3Jvd3MgZW5vdWdoIChtb3JlIHRoYW4gVGpNYXgpIHRvIHRyaWdnZXIKIHRoZSBPdXQtT2YtU3BlYyBiaXQuIEZvbGxvd2luZyB0YWJsZSBzdW1tYXJpemVzIHRoZSBleHBvcnRlZCBzeXNmcyBmaWxlczoKIAotdGVtcDFfaW5wdXQJIC0gQ29yZSB0ZW1wZXJhdHVyZSAoaW4gbWlsbGlkZWdyZWVzIENlbHNpdXMpLgotdGVtcDFfbWF4CSAtIEFsbCBjb29saW5nIGRldmljZXMgc2hvdWxkIGJlIHR1cm5lZCBvbiAob24gQ29yZTIpLgotdGVtcDFfY3JpdAkgLSBNYXhpbXVtIGp1bmN0aW9uIHRlbXBlcmF0dXJlIChpbiBtaWxsaWRlZ3JlZXMgQ2Vsc2l1cykuCi10ZW1wMV9jcml0X2FsYXJtIC0gU2V0IHdoZW4gT3V0LW9mLXNwZWMgYml0IGlzIHNldCwgbmV2ZXIgY2xlYXJzLgorQWxsIFN5c2ZzIGVudHJpZXMgYXJlIG5hbWVkIHdpdGggdGhlaXIgY29yZV9pZCAocmVwcmVzZW50ZWQgaGVyZSBieSAnWCcpLgordGVtcFhfaW5wdXQJIC0gQ29yZSB0ZW1wZXJhdHVyZSAoaW4gbWlsbGlkZWdyZWVzIENlbHNpdXMpLgordGVtcFhfbWF4CSAtIEFsbCBjb29saW5nIGRldmljZXMgc2hvdWxkIGJlIHR1cm5lZCBvbiAob24gQ29yZTIpLgordGVtcFhfY3JpdAkgLSBNYXhpbXVtIGp1bmN0aW9uIHRlbXBlcmF0dXJlIChpbiBtaWxsaWRlZ3JlZXMgQ2Vsc2l1cykuCit0ZW1wWF9jcml0X2FsYXJtIC0gU2V0IHdoZW4gT3V0LW9mLXNwZWMgYml0IGlzIHNldCwgbmV2ZXIgY2xlYXJzLgogCQkgICBDb3JyZWN0IENQVSBvcGVyYXRpb24gaXMgbm8gbG9uZ2VyIGd1YXJhbnRlZWQuCi10ZW1wMV9sYWJlbAkgLSBDb250YWlucyBzdHJpbmcgIkNvcmUgWCIsIHdoZXJlIFggaXMgcHJvY2Vzc29yCi0JCSAgIG51bWJlci4KK3RlbXBYX2xhYmVsCSAtIENvbnRhaW5zIHN0cmluZyAiQ29yZSBYIiwgd2hlcmUgWCBpcyBwcm9jZXNzb3IKKwkJICAgbnVtYmVyLiBGb3IgUGFja2FnZSB0ZW1wLCB0aGlzIHdpbGwgYmUgIlBoeXNpY2FsIGlkIFkiLAorCQkgICB3aGVyZSBZIGlzIHRoZSBwYWNrYWdlIG51bWJlci4KIAogVGhlIFRqTWF4IHRlbXBlcmF0dXJlIGlzIHNldCB0byA4NSBkZWdyZWVzIEMgaWYgdW5kb2N1bWVudGVkIG1vZGVsIHNwZWNpZmljCiByZWdpc3RlciAoVU1TUikgMHhlZSBoYXMgYml0IDMwIHNldC4gSWYgbm90IHRoZSBUak1heCBpcyAxMDAgZGVncmVlcyBDIGFzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL21heDE2MDY1IGIvRG9jdW1lbnRhdGlvbi9od21vbi9tYXgxNjA2NQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGI0ZjYxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9tYXgxNjA2NQpAQCAtMCwwICsxLDk4IEBACitLZXJuZWwgZHJpdmVyIG1heDE2MDY1Cis9PT09PT09PT09PT09PT09PT09PT09CisKK1N1cHBvcnRlZCBjaGlwczoKKyAgKiBNYXhpbSBNQVgxNjA2NSwgTUFYMTYwNjYKKyAgICBQcmVmaXhlczogJ21heDE2MDY1JywgJ21heDE2MDY2JworICAgIEFkZHJlc3NlcyBzY2FubmVkOiAtCisgICAgRGF0YXNoZWV0OgorCWh0dHA6Ly9kYXRhc2hlZXRzLm1heGltLWljLmNvbS9lbi9kcy9NQVgxNjA2NS1NQVgxNjA2Ni5wZGYKKyAqICBNYXhpbSBNQVgxNjA2NworICAgIFByZWZpeDogJ21heDE2MDY3JworICAgIEFkZHJlc3NlcyBzY2FubmVkOiAtCisgICAgRGF0YXNoZWV0OgorCWh0dHA6Ly9kYXRhc2hlZXRzLm1heGltLWljLmNvbS9lbi9kcy9NQVgxNjA2Ny5wZGYKKyAqICBNYXhpbSBNQVgxNjA2OAorICAgIFByZWZpeDogJ21heDE2MDY4JworICAgIEFkZHJlc3NlcyBzY2FubmVkOiAtCisgICAgRGF0YXNoZWV0OgorCWh0dHA6Ly9kYXRhc2hlZXRzLm1heGltLWljLmNvbS9lbi9kcy9NQVgxNjA2OC5wZGYKKyAqICBNYXhpbSBNQVgxNjA3MC9NQVgxNjA3MQorICAgIFByZWZpeGVzOiAnbWF4MTYwNzAnLCAnbWF4MTYwNzEnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IC0KKyAgICBEYXRhc2hlZXQ6CisJaHR0cDovL2RhdGFzaGVldHMubWF4aW0taWMuY29tL2VuL2RzL01BWDE2MDcwLU1BWDE2MDcxLnBkZgorCisKK0F1dGhvcjogR3VlbnRlciBSb2VjayA8Z3VlbnRlci5yb2Vja0Blcmljc3Nvbi5jb20+CisKKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1tGcm9tIGRhdGFzaGVldHNdIFRoZSBNQVgxNjA2NS9NQVgxNjA2NiBmbGFzaC1jb25maWd1cmFibGUgc3lzdGVtIG1hbmFnZXJzCittb25pdG9yIGFuZCBzZXF1ZW5jZSBtdWx0aXBsZSBzeXN0ZW0gdm9sdGFnZXMuIFRoZSBNQVgxNjA2NS9NQVgxNjA2NiBjYW4gYWxzbworYWNjdXJhdGVseSBtb25pdG9yICgrLy0yLjUlKSBvbmUgY3VycmVudCBjaGFubmVsIHVzaW5nIGEgZGVkaWNhdGVkIGhpZ2gtc2lkZQorY3VycmVudC1zZW5zZSBhbXBsaWZpZXIuIFRoZSBNQVgxNjA2NSBtYW5hZ2VzIHVwIHRvIHR3ZWx2ZSBzeXN0ZW0gdm9sdGFnZXMKK3NpbXVsdGFuZW91c2x5LCBhbmQgdGhlIE1BWDE2MDY2IG1hbmFnZXMgdXAgdG8gZWlnaHQgc3VwcGx5IHZvbHRhZ2VzLgorCitUaGUgTUFYMTYwNjcgZmxhc2gtY29uZmlndXJhYmxlIHN5c3RlbSBtYW5hZ2VyIG1vbml0b3JzIGFuZCBzZXF1ZW5jZXMgbXVsdGlwbGUKK3N5c3RlbSB2b2x0YWdlcy4gVGhlIE1BWDE2MDY3IG1hbmFnZXMgdXAgdG8gc2l4IHN5c3RlbSB2b2x0YWdlcyBzaW11bHRhbmVvdXNseS4KKworVGhlIE1BWDE2MDY4IGZsYXNoLWNvbmZpZ3VyYWJsZSBzeXN0ZW0gbWFuYWdlciBtb25pdG9ycyBhbmQgbWFuYWdlcyB1cCB0byBzaXgKK3N5c3RlbSB2b2x0YWdlcyBzaW11bHRhbmVvdXNseS4KKworVGhlIE1BWDE2MDcwL01BWDE2MDcxIGZsYXNoLWNvbmZpZ3VyYWJsZSBzeXN0ZW0gbW9uaXRvcnMgc3VwZXJ2aXNlIG11bHRpcGxlCitzeXN0ZW0gdm9sdGFnZXMuIFRoZSBNQVgxNjA3MC9NQVgxNjA3MSBjYW4gYWxzbyBhY2N1cmF0ZWx5IG1vbml0b3IgKCsvLTIuNSUpCitvbmUgY3VycmVudCBjaGFubmVsIHVzaW5nIGEgZGVkaWNhdGVkIGhpZ2gtc2lkZSBjdXJyZW50LXNlbnNlIGFtcGxpZmllci4gVGhlCitNQVgxNjA3MCBtb25pdG9ycyB1cCB0byB0d2VsdmUgc3lzdGVtIHZvbHRhZ2VzIHNpbXVsdGFuZW91c2x5LCBhbmQgdGhlIE1BWDE2MDcxCittb25pdG9ycyB1cCB0byBlaWdodCBzdXBwbHkgdm9sdGFnZXMuCisKK0VhY2ggbW9uaXRvcmVkIGNoYW5uZWwgaGFzIGl0cyBvd24gbG93IGFuZCBoaWdoIGNyaXRpY2FsIGxpbWl0cy4gTUFYMTYwNjUsCitNQVgxNjA2NiwgTUFYMTYwNzAsIGFuZCBNQVgxNjA3MSBzdXBwb3J0IGFuIGFkZGl0aW9uYWwgbGltaXQgd2hpY2ggaXMKK2NvbmZpZ3VyYWJsZSBhcyBlaXRoZXIgbG93IG9yIGhpZ2ggc2Vjb25kYXJ5IGxpbWl0LiBNQVgxNjA2NSwgTUFYMTYwNjYsCitNQVgxNjA3MCwgYW5kIE1BWDE2MDcxIGFsc28gc3VwcG9ydCBzdXBwbHkgY3VycmVudCBtb25pdG9yaW5nLgorCisKK1VzYWdlIE5vdGVzCistLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBkb2VzIG5vdCBwcm9iZSBmb3IgZGV2aWNlcywgc2luY2UgdGhlcmUgaXMgbm8gcmVnaXN0ZXIgd2hpY2gKK2NhbiBiZSBzYWZlbHkgdXNlZCB0byBpZGVudGlmeSB0aGUgY2hpcC4gWW91IHdpbGwgaGF2ZSB0byBpbnN0YW50aWF0ZQordGhlIGRldmljZXMgZXhwbGljaXRseS4gUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2kyYy9pbnN0YW50aWF0aW5nLWRldmljZXMgZm9yCitkZXRhaWxzLgorCisKK1N5c2ZzIGVudHJpZXMKKy0tLS0tLS0tLS0tLS0KKworaW5bMC0xMV1faW5wdXQJCUlucHV0IHZvbHRhZ2UgbWVhc3VyZW1lbnRzLgorCitpbjEyX2lucHV0CQlWb2x0YWdlIG9uIENTUCAoQ3VycmVudCBTZW5zZSBQb3NpdGl2ZSkgcGluLgorCQkJT25seSBpZiB0aGUgY2hpcCBzdXBwb3J0cyBjdXJyZW50IHNlbnNpbmcgYW5kIGlmCisJCQljdXJyZW50IHNlbnNpbmcgaXMgZW5hYmxlZC4KKworaW5bMC0xMV1fbWluCQlMb3cgd2FybmluZyBsaW1pdC4KKwkJCVN1cHBvcnRlZCBvbiBNQVgxNjA2NSwgTUFYMTYwNjYsIE1BWDE2MDcwLCBhbmQgTUFYMTYwNzEKKwkJCW9ubHkuCisKK2luWzAtMTFdX21heAkJSGlnaCB3YXJuaW5nIGxpbWl0LgorCQkJU3VwcG9ydGVkIG9uIE1BWDE2MDY1LCBNQVgxNjA2NiwgTUFYMTYwNzAsIGFuZCBNQVgxNjA3MQorCQkJb25seS4KKworCQkJRWl0aGVyIGxvdyBvciBoaWdoIHdhcm5pbmcgbGltaXRzIGFyZSBzdXBwb3J0ZWQKKwkJCShkZXBlbmRpbmcgb24gY2hpcCBjb25maWd1cmF0aW9uKSwgYnV0IG5vdCBib3RoLgorCitpblswLTExXV9sY3JpdAkJTG93IGNyaXRpY2FsIGxpbWl0LgorCitpblswLTExXV9jcml0CQlIaWdoIGNyaXRpY2FsIGxpbWl0LgorCitpblswLTExXV9hbGFybQkJSW5wdXQgdm9sdGFnZSBhbGFybS4KKworY3VycjFfaW5wdXQJCUN1cnJlbnQgc2Vuc2UgaW5wdXQ7IG9ubHkgaWYgdGhlIGNoaXAgc3VwcG9ydHMgY3VycmVudAorCQkJc2Vuc2luZyBhbmQgaWYgY3VycmVudCBzZW5zaW5nIGlzIGVuYWJsZWQuCisJCQlEaXNwbGF5ZWQgY3VycmVudCBhc3N1bWVzIDAuMDAxIE9obSBjdXJyZW50IHNlbnNlCisJCQlyZXNpc3Rvci4KKworY3VycjFfYWxhcm0JCU92ZXJjdXJyZW50IGFsYXJtOyBvbmx5IGlmIHRoZSBjaGlwIHN1cHBvcnRzIGN1cnJlbnQKKwkJCXNlbnNpbmcgYW5kIGlmIGN1cnJlbnQgc2Vuc2luZyBpcyBlbmFibGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9tYXg2NjQyIGIvRG9jdW1lbnRhdGlvbi9od21vbi9tYXg2NjQyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYmQzZTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL21heDY2NDIKQEAgLTAsMCArMSwyMSBAQAorS2VybmVsIGRyaXZlciBtYXg2NjQyCis9PT09PT09PT09PT09PT09PT09PT0KKworU3VwcG9ydGVkIGNoaXBzOgorICAqIE1heGltIE1BWDY2NDIKKyAgICBQcmVmaXg6ICdtYXg2NjQyJworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg0OC0weDRmCisgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIE1heGltIHdlYnNpdGUKKyAgICAgICAgICAgICAgIGh0dHA6Ly9kYXRhc2hlZXRzLm1heGltLWljLmNvbS9lbi9kcy9NQVg2NjQyLnBkZgorCitBdXRob3JzOgorICAgICAgICBQZXIgRGFsZW4gPHBlci5kYWxlbkBhcHBlYXJ0di5jb20+CisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitUaGUgTUFYNjY0MiBpcyBhIGRpZ2l0YWwgdGVtcGVyYXR1cmUgc2Vuc29yLiBJdCBzZW5zZXMgaXRzIG93biB0ZW1wZXJhdHVyZSBhcword2VsbCBhcyB0aGUgdGVtcGVyYXR1cmUgb24gb25lIGV4dGVybmFsIGRpb2RlLgorCitBbGwgdGVtcGVyYXR1cmUgdmFsdWVzIGFyZSBnaXZlbiBpbiBkZWdyZWVzIENlbHNpdXMuIFJlc29sdXRpb24KK2lzIDAuMjUgZGVncmVlIGZvciB0aGUgbG9jYWwgdGVtcGVyYXR1cmUgYW5kIGZvciB0aGUgcmVtb3RlIHRlbXBlcmF0dXJlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9wa2d0ZW1wIGIvRG9jdW1lbnRhdGlvbi9od21vbi9wa2d0ZW1wCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGUxZmIwLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vcGtndGVtcAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLUtlcm5lbCBkcml2ZXIgcGtndGVtcAotPT09PT09PT09PT09PT09PT09PT09PQotCi1TdXBwb3J0ZWQgY2hpcHM6Ci0gICogSW50ZWwgZmFtaWx5Ci0gICAgUHJlZml4OiAncGtndGVtcCcKLSAgICBDUFVJRDoKLSAgICBEYXRhc2hlZXQ6IEludGVsIDY0IGFuZCBJQS0zMiBBcmNoaXRlY3R1cmVzIFNvZnR3YXJlIERldmVsb3BlcidzIE1hbnVhbAotICAgICAgICAgICAgICAgVm9sdW1lIDNBOiBTeXN0ZW0gUHJvZ3JhbW1pbmcgR3VpZGUKLQotQXV0aG9yOiBGZW5naHVhIFl1Ci0KLURlc2NyaXB0aW9uCi0tLS0tLS0tLS0tLQotCi1UaGlzIGRyaXZlciBwZXJtaXRzIHJlYWRpbmcgcGFja2FnZSBsZXZlbCB0ZW1wZXJhdHVyZSBzZW5zb3IgZW1iZWRkZWQgaW5zaWRlCi1JbnRlbCBDUFUgcGFja2FnZS4gVGhlIHNlbnNvcnMgY2FuIGJlIGluIGNvcmUsIHVuY29yZSwgbWVtb3J5IGNvbnRyb2xsZXIsIG9yCi1vdGhlciBjb21wb25lbnRzIGluIGEgcGFja2FnZS4gVGhlIGZlYXR1cmUgaXMgZmlyc3QgaW1wbGVtZW50ZWQgaW4gSW50ZWwgU2FuZHkKLUJyaWRnZSBwbGF0Zm9ybS4KLQotVGVtcGVyYXR1cmUgaXMgbWVhc3VyZWQgaW4gZGVncmVlcyBDZWxzaXVzIGFuZCBtZWFzdXJlbWVudCByZXNvbHV0aW9uIGlzCi0xIGRlZ3JlZSBDLiBWYWxpZCB0ZW1wZXJhdHVyZXMgYXJlIGZyb20gMCB0byBUak1heCBkZWdyZWVzIEMsIGJlY2F1c2UgdGhlIGFjdHVhbAotdmFsdWUgb2YgdGVtcGVyYXR1cmUgcmVnaXN0ZXIgaXMgaW4gZmFjdCBhIGRlbHRhIGZyb20gVGpNYXguCi0KLVRlbXBlcmF0dXJlIGtub3duIGFzIFRqTWF4IGlzIHRoZSBtYXhpbXVtIGp1bmN0aW9uIHRlbXBlcmF0dXJlIG9mIHBhY2thZ2UuCi1XZSBnZXQgdGhpcyBmcm9tIE1TUl9JQTMyX1RFTVBFUkFUVVJFX1RBUkdFVC4gSWYgdGhlIE1TUiBpcyBub3QgYWNjZXNzaWJsZSwKLXdlIGRlZmluZSBUak1heCBhcyAxMDAgZGVncmVlcyBDZWxzaXVzLiBBdCB0aGlzIHRlbXBlcmF0dXJlLCBwcm90ZWN0aW9uCi1tZWNoYW5pc20gd2lsbCBwZXJmb3JtIGFjdGlvbnMgdG8gZm9yY2libHkgY29vbCBkb3duIHRoZSBwYWNrYWdlLiBBbGFybQotbWF5IGJlIHJhaXNlZCwgaWYgdGhlIHRlbXBlcmF0dXJlIGdyb3dzIGVub3VnaCAobW9yZSB0aGFuIFRqTWF4KSB0byB0cmlnZ2VyCi10aGUgT3V0LU9mLVNwZWMgYml0LiBGb2xsb3dpbmcgdGFibGUgc3VtbWFyaXplcyB0aGUgZXhwb3J0ZWQgc3lzZnMgZmlsZXM6Ci0KLXRlbXAxX2lucHV0CSAgLSBQYWNrYWdlIHRlbXBlcmF0dXJlIChpbiBtaWxsaWRlZ3JlZXMgQ2Vsc2l1cykuCi10ZW1wMV9tYXggICAgICAgIC0gQWxsIGNvb2xpbmcgZGV2aWNlcyBzaG91bGQgYmUgdHVybmVkIG9uLgotdGVtcDFfY3JpdAkgIC0gTWF4aW11bSBqdW5jdGlvbiB0ZW1wZXJhdHVyZSAoaW4gbWlsbGlkZWdyZWVzIENlbHNpdXMpLgotdGVtcDFfY3JpdF9hbGFybSAtIFNldCB3aGVuIE91dC1vZi1zcGVjIGJpdCBpcyBzZXQsIG5ldmVyIGNsZWFycy4KLQkJICAgIENvcnJlY3QgQ1BVIG9wZXJhdGlvbiBpcyBubyBsb25nZXIgZ3VhcmFudGVlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vc2h0MTUgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3NodDE1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyODUwYmQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3NodDE1CkBAIC0wLDAgKzEsNzQgQEAKK0tlcm5lbCBkcml2ZXIgc2h0MTUKKz09PT09PT09PT09PT09PT09PT0KKworQXV0aG9yczoKKyAgKiBXb3V0ZXIgSG9ycmUKKyAgKiBKb25hdGhhbiBDYW1lcm9uCisgICogVml2aWVuIERpZGVsb3QgPHZpdmllbi5kaWRlbG90QHNhdm9pcmZhaXJlbGludXguY29tPgorICAqIEplcm9tZSBPdWZlbGxhIDxqZXJvbWUub3VmZWxsYUBzYXZvaXJmYWlyZWxpbnV4LmNvbT4KKworU3VwcG9ydGVkIGNoaXBzOgorICAqIFNlbnNpcmlvbiBTSFQxMAorICAgIFByZWZpeDogJ3NodDEwJworCisgICogU2Vuc2lyaW9uIFNIVDExCisgICAgUHJlZml4OiAnc2h0MTEnCisKKyAgKiBTZW5zaXJpb24gU0hUMTUKKyAgICBQcmVmaXg6ICdzaHQxNScKKworICAqIFNlbnNpcmlvbiBTSFQ3MQorICAgIFByZWZpeDogJ3NodDcxJworCisgICogU2Vuc2lyaW9uIFNIVDc1CisgICAgUHJlZml4OiAnc2h0NzUnCisKK0RhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBTZW5zaXJpb24gd2Vic2l0ZQoraHR0cDovL3d3dy5zZW5zaXJpb24uY2gvZW4vcGRmL3Byb2R1Y3RfaW5mb3JtYXRpb24vRGF0YXNoZWV0LWh1bWlkaXR5LXNlbnNvci1TSFQxeC5wZGYKKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoZSBTSFQxMCwgU0hUMTEsIFNIVDE1LCBTSFQ3MSwgYW5kIFNIVDc1IGFyZSBodW1pZGl0eSBhbmQgdGVtcGVyYXR1cmUKK3NlbnNvcnMuCisKK1RoZSBkZXZpY2VzIGNvbW11bmljYXRlIHVzaW5nIHR3byBHUElPIGxpbmVzLgorCitTdXBwb3J0ZWQgcmVzb2x1dGlvbnMgZm9yIHRoZSBtZWFzdXJlbWVudHMgYXJlIDE0IGJpdHMgZm9yIHRlbXBlcmF0dXJlIGFuZCAxMgorYml0cyBmb3IgaHVtaWRpdHksIG9yIDEyIGJpdHMgZm9yIHRlbXBlcmF0dXJlIGFuZCA4IGJpdHMgZm9yIGh1bWlkaXR5LgorCitUaGUgaHVtaWRpdHkgY2FsaWJyYXRpb24gY29lZmZpY2llbnRzIGFyZSBwcm9ncmFtbWVkIGludG8gYW4gT1RQIG1lbW9yeSBvbiB0aGUKK2NoaXAuIFRoZXNlIGNvZWZmaWNpZW50cyBhcmUgdXNlZCB0byBpbnRlcm5hbGx5IGNhbGlicmF0ZSB0aGUgc2lnbmFscyBmcm9tIHRoZQorc2Vuc29ycy4gRGlzYWJsaW5nIHRoZSByZWxvYWQgb2YgdGhvc2UgY29lZmZpY2llbnRzIGFsbG93cyBzYXZpbmcgMTBtcyBmb3IgZWFjaAorbWVhc3VyZW1lbnQgYW5kIGRlY3JlYXNlIHBvd2VyIGNvbnN1bXB0aW9uLCB3aGlsZSBsb29zaW5nIG9uIHByZWNpc2lvbi4KKworU29tZSBvcHRpb25zIG1heSBiZSBzZXQgZGlyZWN0bHkgaW4gdGhlIHNodDE1X3BsYXRmb3JtX2RhdGEgc3RydWN0dXJlCitvciB2aWEgc3lzZnMgYXR0cmlidXRlcy4KKworTm90ZXM6CisgICogVGhlIHJlZ3VsYXRvciBzdXBwbHkgbmFtZSBpcyBzZXQgdG8gInZjYyIuCisgICogSWYgYSBDUkMgdmFsaWRhdGlvbiBmYWlscywgYSBzb2Z0IHJlc2V0IGNvbW1hbmQgaXMgc2VudCwgd2hpY2ggcmVzZXRzCisgICAgc3RhdHVzIHJlZ2lzdGVyIHRvIGl0cyBoYXJkd2FyZSBkZWZhdWx0IHZhbHVlLCBidXQgdGhlIGRyaXZlciB3aWxsIHRyeSB0bworICAgIHJlc3RvcmUgdGhlIHByZXZpb3VzIGRldmljZSBjb25maWd1cmF0aW9uLgorCitQbGF0Zm9ybSBkYXRhCistLS0tLS0tLS0tLS0tCisKKyogY2hlY2tzdW06CisgIHNldCBpdCB0byB0cnVlIHRvIGVuYWJsZSBDUkMgdmFsaWRhdGlvbiBvZiB0aGUgcmVhZGluZ3MgKGRlZmF1bHQgdG8gZmFsc2UpLgorKiBub19vdHBfcmVsb2FkOgorICBmbGFnIHRvIGluZGljYXRlIG5vdCB0byByZWxvYWQgZnJvbSBPVFAgKGRlZmF1bHQgdG8gZmFsc2UpLgorKiBsb3dfcmVzb2x1dGlvbjoKKyAgZmxhZyB0byBpbmRpY2F0ZSB0aGUgdGVtcC9odW1pZGl0eSByZXNvbHV0aW9uIHRvIHVzZSAoZGVmYXVsdCB0byBmYWxzZSkuCisKK1N5c2ZzIGludGVyZmFjZQorLS0tLS0tLS0tLS0tLS0tCisKKyogdGVtcDFfaW5wdXQ6ICAgICB0ZW1wZXJhdHVyZSBpbnB1dAorKiBodW1pZGl0eTFfaW5wdXQ6IGh1bWlkaXR5IGlucHV0CisqIGhlYXRlcl9lbmFibGU6ICAgd3JpdGUgMSBpbiB0aGlzIGF0dHJpYnV0ZSB0byBlbmFibGUgdGhlIG9uLWNoaXAgaGVhdGVyLAorICAgICAgICAgICAgICAgICAgIDAgdG8gZGlzYWJsZSBpdC4gQmUgY2FyZWZ1bCBub3QgdG8gZW5hYmxlIHRoZSBoZWF0ZXIKKyAgICAgICAgICAgICAgICAgICBmb3IgdG9vIGxvbmcuCisqIHRlbXAxX2ZhdWx0OiAgICAgaWYgMSwgdGhpcyBtZWFucyB0aGF0IHRoZSB2b2x0YWdlIGlzIGxvdyAoYmVsb3cgMi40N1YpIGFuZAorICAgICAgICAgICAgICAgICAgIG1lYXN1cmVtZW50IG1heSBiZSBpbnZhbGlkLgorKiBodW1pZGl0eTFfZmF1bHQ6IHNhbWUgYXMgdGVtcDFfZmF1bHQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3VjZDkwMDAgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3VjZDkwMDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBjYTZkYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vdWNkOTAwMApAQCAtMCwwICsxLDExMCBAQAorS2VybmVsIGRyaXZlciB1Y2Q5MDAwCis9PT09PT09PT09PT09PT09PT09PT0KKworU3VwcG9ydGVkIGNoaXBzOgorICAqIFRJIFVDRDkwMTIwLCBVQ0Q5MDEyNCwgVUNEOTA5MCwgYW5kIFVDRDkwOTEwCisgICAgUHJlZml4ZXM6ICd1Y2Q5MDEyMCcsICd1Y2Q5MDEyNCcsICd1Y2Q5MDkwJywgJ3VjZDkwOTEwJworICAgIEFkZHJlc3NlcyBzY2FubmVkOiAtCisgICAgRGF0YXNoZWV0czoKKwlodHRwOi8vZm9jdXMudGkuY29tL2xpdC9kcy9zeW1saW5rL3VjZDkwMTIwLnBkZgorCWh0dHA6Ly9mb2N1cy50aS5jb20vbGl0L2RzL3N5bWxpbmsvdWNkOTAxMjQucGRmCisJaHR0cDovL2ZvY3VzLnRpLmNvbS9saXQvZHMvc3ltbGluay91Y2Q5MDkwLnBkZgorCWh0dHA6Ly9mb2N1cy50aS5jb20vbGl0L2RzL3N5bWxpbmsvdWNkOTA5MTAucGRmCisKK0F1dGhvcjogR3VlbnRlciBSb2VjayA8Z3VlbnRlci5yb2Vja0Blcmljc3Nvbi5jb20+CisKKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK0Zyb20gZGF0YXNoZWV0czoKKworVGhlIFVDRDkwMTIwIFBvd2VyIFN1cHBseSBTZXF1ZW5jZXIgYW5kIFN5c3RlbSBIZWFsdGggTW9uaXRvciBtb25pdG9ycyBhbmQKK3NlcXVlbmNlcyB1cCB0byAxMiBpbmRlcGVuZGVudCB2b2x0YWdlIHJhaWxzLiBUaGUgZGV2aWNlIGludGVncmF0ZXMgYSAxMi1iaXQKK0FEQyB3aXRoIGEgMi41ViBpbnRlcm5hbCByZWZlcmVuY2UgZm9yIG1vbml0b3JpbmcgdXAgdG8gMTMgcG93ZXIgc3VwcGx5IHZvbHRhZ2UsCitjdXJyZW50LCBvciB0ZW1wZXJhdHVyZSBpbnB1dHMuCisKK1RoZSBVQ0Q5MDEyNCBpcyBhIDEyLXJhaWwgUE1CdXMvSTJDIGFkZHJlc3NhYmxlIHBvd2VyLXN1cHBseSBzZXF1ZW5jZXIgYW5kCitzeXN0ZW0taGVhbHRoIG1vbml0b3IuIFRoZSBkZXZpY2UgaW50ZWdyYXRlcyBhIDEyLWJpdCBBREMgZm9yIG1vbml0b3JpbmcgdXAgdG8KKzEzIHBvd2VyLXN1cHBseSB2b2x0YWdlLCBjdXJyZW50LCBvciB0ZW1wZXJhdHVyZSBpbnB1dHMuIFR3ZW50eS1zaXggR1BJTyBwaW5zCitjYW4gYmUgdXNlZCBmb3IgcG93ZXIgc3VwcGx5IGVuYWJsZXMsIHBvd2VyLW9uIHJlc2V0IHNpZ25hbHMsIGV4dGVybmFsCitpbnRlcnJ1cHRzLCBjYXNjYWRpbmcsIG9yIG90aGVyIHN5c3RlbSBmdW5jdGlvbnMuIFR3ZWx2ZSBvZiB0aGVzZSBwaW5zIG9mZmVyIFBXTQorZnVuY3Rpb25hbGl0eS4gVXNpbmcgdGhlc2UgcGlucywgdGhlIFVDRDkwMTI0IG9mZmVycyBzdXBwb3J0IGZvciBmYW4gY29udHJvbCwKK21hcmdpbmluZywgYW5kIGdlbmVyYWwtcHVycG9zZSBQV00gZnVuY3Rpb25zLgorCitUaGUgVUNEOTA5MCBpcyBhIDEwLXJhaWwgUE1CdXMvSTJDIGFkZHJlc3NhYmxlIHBvd2VyLXN1cHBseSBzZXF1ZW5jZXIgYW5kCittb25pdG9yLiBUaGUgZGV2aWNlIGludGVncmF0ZXMgYSAxMi1iaXQgQURDIGZvciBtb25pdG9yaW5nIHVwIHRvIDEwIHBvd2VyLXN1cHBseQordm9sdGFnZSBpbnB1dHMuIFR3ZW50eS10aHJlZSBHUElPIHBpbnMgY2FuIGJlIHVzZWQgZm9yIHBvd2VyIHN1cHBseSBlbmFibGVzLAorcG93ZXItb24gcmVzZXQgc2lnbmFscywgZXh0ZXJuYWwgaW50ZXJydXB0cywgY2FzY2FkaW5nLCBvciBvdGhlciBzeXN0ZW0KK2Z1bmN0aW9ucy4gVGVuIG9mIHRoZXNlIHBpbnMgb2ZmZXIgUFdNIGZ1bmN0aW9uYWxpdHkuIFVzaW5nIHRoZXNlIHBpbnMsIHRoZQorVUNEOTA5MCBvZmZlcnMgc3VwcG9ydCBmb3IgbWFyZ2luaW5nLCBhbmQgZ2VuZXJhbC1wdXJwb3NlIFBXTSBmdW5jdGlvbnMuCisKK1RoZSBVQ0Q5MDkxMCBpcyBhIHRlbi1yYWlsIEkyQyAvIFBNQnVzIGFkZHJlc3NhYmxlIHBvd2VyLXN1cHBseSBzZXF1ZW5jZXIgYW5kCitzeXN0ZW0taGVhbHRoIG1vbml0b3IuIFRoZSBkZXZpY2UgaW50ZWdyYXRlcyBhIDEyLWJpdCBBREMgZm9yIG1vbml0b3JpbmcgdXAgdG8KKzEzIHBvd2VyLXN1cHBseSB2b2x0YWdlLCBjdXJyZW50LCBvciB0ZW1wZXJhdHVyZSBpbnB1dHMuCisKK1RoaXMgZHJpdmVyIGlzIGEgY2xpZW50IGRyaXZlciB0byB0aGUgY29yZSBQTUJ1cyBkcml2ZXIuIFBsZWFzZSBzZWUKK0RvY3VtZW50YXRpb24vaHdtb24vcG1idXMgZm9yIGRldGFpbHMgb24gUE1CdXMgY2xpZW50IGRyaXZlcnMuCisKKworVXNhZ2UgTm90ZXMKKy0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIGRvZXMgbm90IGF1dG8tZGV0ZWN0IGRldmljZXMuIFlvdSB3aWxsIGhhdmUgdG8gaW5zdGFudGlhdGUgdGhlCitkZXZpY2VzIGV4cGxpY2l0bHkuIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pMmMvaW5zdGFudGlhdGluZy1kZXZpY2VzIGZvcgorZGV0YWlscy4KKworCitQbGF0Zm9ybSBkYXRhIHN1cHBvcnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZHJpdmVyIHN1cHBvcnRzIHN0YW5kYXJkIFBNQnVzIGRyaXZlciBwbGF0Zm9ybSBkYXRhLiBQbGVhc2Ugc2VlCitEb2N1bWVudGF0aW9uL2h3bW9uL3BtYnVzIGZvciBkZXRhaWxzLgorCisKK1N5c2ZzIGVudHJpZXMKKy0tLS0tLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFyZSBzdXBwb3J0ZWQuIExpbWl0cyBhcmUgcmVhZC13cml0ZTsgYWxsIG90aGVyCithdHRyaWJ1dGVzIGFyZSByZWFkLW9ubHkuCisKK2luWzEtMTJdX2xhYmVsCQkidm91dFsxLTEyXSIuCitpblsxLTEyXV9pbnB1dAkJTWVhc3VyZWQgdm9sdGFnZS4gRnJvbSBSRUFEX1ZPVVQgcmVnaXN0ZXIuCitpblsxLTEyXV9taW4JCU1pbnVtdW0gVm9sdGFnZS4gRnJvbSBWT1VUX1VWX1dBUk5fTElNSVQgcmVnaXN0ZXIuCitpblsxLTEyXV9tYXgJCU1heGltdW0gdm9sdGFnZS4gRnJvbSBWT1VUX09WX1dBUk5fTElNSVQgcmVnaXN0ZXIuCitpblsxLTEyXV9sY3JpdAkJQ3JpdGljYWwgbWludW11bSBWb2x0YWdlLiBWT1VUX1VWX0ZBVUxUX0xJTUlUIHJlZ2lzdGVyLgoraW5bMS0xMl1fY3JpdAkJQ3JpdGljYWwgbWF4aW11bSB2b2x0YWdlLiBGcm9tIFZPVVRfT1ZfRkFVTFRfTElNSVQgcmVnaXN0ZXIuCitpblsxLTEyXV9taW5fYWxhcm0JVm9sdGFnZSBsb3cgYWxhcm0uIEZyb20gVk9MVEFHRV9VVl9XQVJOSU5HIHN0YXR1cy4KK2luWzEtMTJdX21heF9hbGFybQlWb2x0YWdlIGhpZ2ggYWxhcm0uIEZyb20gVk9MVEFHRV9PVl9XQVJOSU5HIHN0YXR1cy4KK2luWzEtMTJdX2xjcml0X2FsYXJtCVZvbHRhZ2UgY3JpdGljYWwgbG93IGFsYXJtLiBGcm9tIFZPTFRBR0VfVVZfRkFVTFQgc3RhdHVzLgoraW5bMS0xMl1fY3JpdF9hbGFybQlWb2x0YWdlIGNyaXRpY2FsIGhpZ2ggYWxhcm0uIEZyb20gVk9MVEFHRV9PVl9GQVVMVCBzdGF0dXMuCisKK2N1cnJbMS0xMl1fbGFiZWwJImlvdXRbMS0xMl0iLgorY3VyclsxLTEyXV9pbnB1dAlNZWFzdXJlZCBjdXJyZW50LiBGcm9tIFJFQURfSU9VVCByZWdpc3Rlci4KK2N1cnJbMS0xMl1fbWF4CQlNYXhpbXVtIGN1cnJlbnQuIEZyb20gSU9VVF9PQ19XQVJOX0xJTUlUIHJlZ2lzdGVyLgorY3VyclsxLTEyXV9sY3JpdAlDcml0aWNhbCBtaW51bXVtIG91dHB1dCBjdXJyZW50LiBGcm9tIElPVVRfVUNfRkFVTFRfTElNSVQKKwkJCXJlZ2lzdGVyLgorY3VyclsxLTEyXV9jcml0CQlDcml0aWNhbCBtYXhpbXVtIGN1cnJlbnQuIEZyb20gSU9VVF9PQ19GQVVMVF9MSU1JVCByZWdpc3Rlci4KK2N1cnJbMS0xMl1fbWF4X2FsYXJtCUN1cnJlbnQgaGlnaCBhbGFybS4gRnJvbSBJT1VUX09DX1dBUk5JTkcgc3RhdHVzLgorY3VyclsxLTEyXV9jcml0X2FsYXJtCUN1cnJlbnQgY3JpdGljYWwgaGlnaCBhbGFybS4gRnJvbSBJT1VUX09DX0ZBVUxUIHN0YXR1cy4KKworCQkJRm9yIGVhY2ggYXR0cmlidXRlIGluZGV4LCBlaXRoZXIgdm9sdGFnZSBvciBjdXJyZW50IGlzCisJCQlyZXBvcnRlZCwgYnV0IG5vdCBib3RoLiBJZiB2b2x0YWdlIG9yIGN1cnJlbnQgaXMKKwkJCXJlcG9ydGVkIGRlcGVuZHMgb24gdGhlIGNoaXAgY29uZmlndXJhdGlvbi4KKwordGVtcFsxLTJdX2lucHV0CQlNZWFzdXJlZCB0ZW1wZXJhdHVyZXMuIEZyb20gUkVBRF9URU1QRVJBVFVSRV8xIGFuZAorCQkJUkVBRF9URU1QRVJBVFVSRV8yIHJlZ2lzdGVycy4KK3RlbXBbMS0yXV9tYXgJCU1heGltdW0gdGVtcGVyYXR1cmUuIEZyb20gT1RfV0FSTl9MSU1JVCByZWdpc3Rlci4KK3RlbXBbMS0yXV9jcml0CQlDcml0aWNhbCBoaWdoIHRlbXBlcmF0dXJlLiBGcm9tIE9UX0ZBVUxUX0xJTUlUIHJlZ2lzdGVyLgordGVtcFsxLTJdX21heF9hbGFybQlUZW1wZXJhdHVyZSBoaWdoIGFsYXJtLgordGVtcFsxLTJdX2NyaXRfYWxhcm0JVGVtcGVyYXR1cmUgY3JpdGljYWwgaGlnaCBhbGFybS4KKworZmFuWzEtNF1faW5wdXQJCUZhbiBSUE0uCitmYW5bMS00XV9hbGFybQkJRmFuIGFsYXJtLgorZmFuWzEtNF1fZmF1bHQJCUZhbiBmYXVsdC4KKworCQkJRmFuIGF0dHJpYnV0ZXMgYXJlIG9ubHkgYXZhaWxhYmxlIG9uIGNoaXBzIHN1cHBvcnRpbmcKKwkJCWZhbiBjb250cm9sIChVQ0Q5MDEyNCwgVUNEOTA5MTApLiBBdHRyaWJ1dGUgZmlsZXMgYXJlCisJCQljcmVhdGVkIG9ubHkgZm9yIGVuYWJsZWQgZmFucy4KKwkJCU5vdGUgdGhhdCBldmVuIHRob3VnaCBVQ0Q5MDkxMCBzdXBwb3J0cyB1cCB0byAxMCBmYW5zLAorCQkJb25seSB1cCB0byBmb3VyIGZhbnMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3VjZDkyMDAgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3VjZDkyMDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M1ODYwNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vdWNkOTIwMApAQCAtMCwwICsxLDExMiBAQAorS2VybmVsIGRyaXZlciB1Y2Q5MjAwCis9PT09PT09PT09PT09PT09PT09PT0KKworU3VwcG9ydGVkIGNoaXBzOgorICAqIFRJIFVDRDkyMjAsIFVDRDkyMjIsIFVDRDkyMjQsIFVDRDkyNDAsIFVDRDkyNDQsIFVDRDkyNDYsIGFuZCBVQ0Q5MjQ4CisgICAgUHJlZml4ZXM6ICd1Y2Q5MjIwJywgJ3VjZDkyMjInLCAndWNkOTIyNCcsICd1Y2Q5MjQwJywgJ3VjZDkyNDQnLCAndWNkOTI0NicsCisJJ3VjZDkyNDgnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IC0KKyAgICBEYXRhc2hlZXRzOgorCWh0dHA6Ly9mb2N1cy50aS5jb20vbGl0L2RzL3N5bWxpbmsvdWNkOTIyMC5wZGYKKwlodHRwOi8vZm9jdXMudGkuY29tL2xpdC9kcy9zeW1saW5rL3VjZDkyMjIucGRmCisJaHR0cDovL2ZvY3VzLnRpLmNvbS9saXQvZHMvc3ltbGluay91Y2Q5MjI0LnBkZgorCWh0dHA6Ly9mb2N1cy50aS5jb20vbGl0L2RzL3N5bWxpbmsvdWNkOTI0MC5wZGYKKwlodHRwOi8vZm9jdXMudGkuY29tL2xpdC9kcy9zeW1saW5rL3VjZDkyNDQucGRmCisJaHR0cDovL2ZvY3VzLnRpLmNvbS9saXQvZHMvc3ltbGluay91Y2Q5MjQ2LnBkZgorCWh0dHA6Ly9mb2N1cy50aS5jb20vbGl0L2RzL3N5bWxpbmsvdWNkOTI0OC5wZGYKKworQXV0aG9yOiBHdWVudGVyIFJvZWNrIDxndWVudGVyLnJvZWNrQGVyaWNzc29uLmNvbT4KKworCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworW0Zyb20gZGF0YXNoZWV0c10gVUNEOTIyMCwgVUNEOTIyMiwgVUNEOTIyNCwgVUNEOTI0MCwgVUNEOTI0NCwgVUNEOTI0NiwgYW5kCitVQ0Q5MjQ4IGFyZSBtdWx0aS1yYWlsLCBtdWx0aS1waGFzZSBzeW5jaHJvbm91cyBidWNrIGRpZ2l0YWwgUFdNIGNvbnRyb2xsZXJzCitkZXNpZ25lZCBmb3Igbm9uLWlzb2xhdGVkIERDL0RDIHBvd2VyIGFwcGxpY2F0aW9ucy4gVGhlIGRldmljZXMgaW50ZWdyYXRlCitkZWRpY2F0ZWQgY2lyY3VpdHJ5IGZvciBEQy9EQyBsb29wIG1hbmFnZW1lbnQgd2l0aCBmbGFzaCBtZW1vcnkgYW5kIGEgc2VyaWFsCitpbnRlcmZhY2UgdG8gc3VwcG9ydCBjb25maWd1cmF0aW9uLCBtb25pdG9yaW5nIGFuZCBtYW5hZ2VtZW50LgorCitUaGlzIGRyaXZlciBpcyBhIGNsaWVudCBkcml2ZXIgdG8gdGhlIGNvcmUgUE1CdXMgZHJpdmVyLiBQbGVhc2Ugc2VlCitEb2N1bWVudGF0aW9uL2h3bW9uL3BtYnVzIGZvciBkZXRhaWxzIG9uIFBNQnVzIGNsaWVudCBkcml2ZXJzLgorCisKK1VzYWdlIE5vdGVzCistLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBkb2VzIG5vdCBhdXRvLWRldGVjdCBkZXZpY2VzLiBZb3Ugd2lsbCBoYXZlIHRvIGluc3RhbnRpYXRlIHRoZQorZGV2aWNlcyBleHBsaWNpdGx5LiBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaTJjL2luc3RhbnRpYXRpbmctZGV2aWNlcyBmb3IKK2RldGFpbHMuCisKKworUGxhdGZvcm0gZGF0YSBzdXBwb3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGRyaXZlciBzdXBwb3J0cyBzdGFuZGFyZCBQTUJ1cyBkcml2ZXIgcGxhdGZvcm0gZGF0YS4gUGxlYXNlIHNlZQorRG9jdW1lbnRhdGlvbi9od21vbi9wbWJ1cyBmb3IgZGV0YWlscy4KKworCitTeXNmcyBlbnRyaWVzCistLS0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBhcmUgc3VwcG9ydGVkLiBMaW1pdHMgYXJlIHJlYWQtd3JpdGU7IGFsbCBvdGhlcgorYXR0cmlidXRlcyBhcmUgcmVhZC1vbmx5LgorCitpbjFfbGFiZWwJCSJ2aW4iLgoraW4xX2lucHV0CQlNZWFzdXJlZCB2b2x0YWdlLiBGcm9tIFJFQURfVklOIHJlZ2lzdGVyLgoraW4xX21pbgkJCU1pbnVtdW0gVm9sdGFnZS4gRnJvbSBWSU5fVVZfV0FSTl9MSU1JVCByZWdpc3Rlci4KK2luMV9tYXgJCQlNYXhpbXVtIHZvbHRhZ2UuIEZyb20gVklOX09WX1dBUk5fTElNSVQgcmVnaXN0ZXIuCitpbjFfbGNyaXQJCUNyaXRpY2FsIG1pbnVtdW0gVm9sdGFnZS4gVklOX1VWX0ZBVUxUX0xJTUlUIHJlZ2lzdGVyLgoraW4xX2NyaXQJCUNyaXRpY2FsIG1heGltdW0gdm9sdGFnZS4gRnJvbSBWSU5fT1ZfRkFVTFRfTElNSVQgcmVnaXN0ZXIuCitpbjFfbWluX2FsYXJtCQlWb2x0YWdlIGxvdyBhbGFybS4gRnJvbSBWSU5fVVZfV0FSTklORyBzdGF0dXMuCitpbjFfbWF4X2FsYXJtCQlWb2x0YWdlIGhpZ2ggYWxhcm0uIEZyb20gVklOX09WX1dBUk5JTkcgc3RhdHVzLgoraW4xX2xjcml0X2FsYXJtCQlWb2x0YWdlIGNyaXRpY2FsIGxvdyBhbGFybS4gRnJvbSBWSU5fVVZfRkFVTFQgc3RhdHVzLgoraW4xX2NyaXRfYWxhcm0JCVZvbHRhZ2UgY3JpdGljYWwgaGlnaCBhbGFybS4gRnJvbSBWSU5fT1ZfRkFVTFQgc3RhdHVzLgorCitpblsyLTVdX2xhYmVsCQkidm91dFsxLTRdIi4KK2luWzItNV1faW5wdXQJCU1lYXN1cmVkIHZvbHRhZ2UuIEZyb20gUkVBRF9WT1VUIHJlZ2lzdGVyLgoraW5bMi01XV9taW4JCU1pbnVtdW0gVm9sdGFnZS4gRnJvbSBWT1VUX1VWX1dBUk5fTElNSVQgcmVnaXN0ZXIuCitpblsyLTVdX21heAkJTWF4aW11bSB2b2x0YWdlLiBGcm9tIFZPVVRfT1ZfV0FSTl9MSU1JVCByZWdpc3Rlci4KK2luWzItNV1fbGNyaXQJCUNyaXRpY2FsIG1pbnVtdW0gVm9sdGFnZS4gVk9VVF9VVl9GQVVMVF9MSU1JVCByZWdpc3Rlci4KK2luWzItNV1fY3JpdAkJQ3JpdGljYWwgbWF4aW11bSB2b2x0YWdlLiBGcm9tIFZPVVRfT1ZfRkFVTFRfTElNSVQgcmVnaXN0ZXIuCitpblsyLTVdX21pbl9hbGFybQlWb2x0YWdlIGxvdyBhbGFybS4gRnJvbSBWT0xUQUdFX1VWX1dBUk5JTkcgc3RhdHVzLgoraW5bMi01XV9tYXhfYWxhcm0JVm9sdGFnZSBoaWdoIGFsYXJtLiBGcm9tIFZPTFRBR0VfT1ZfV0FSTklORyBzdGF0dXMuCitpblsyLTVdX2xjcml0X2FsYXJtCVZvbHRhZ2UgY3JpdGljYWwgbG93IGFsYXJtLiBGcm9tIFZPTFRBR0VfVVZfRkFVTFQgc3RhdHVzLgoraW5bMi01XV9jcml0X2FsYXJtCVZvbHRhZ2UgY3JpdGljYWwgaGlnaCBhbGFybS4gRnJvbSBWT0xUQUdFX09WX0ZBVUxUIHN0YXR1cy4KKworY3VycjFfbGFiZWwJCSJpaW4iLgorY3VycjFfaW5wdXQJCU1lYXN1cmVkIGN1cnJlbnQuIEZyb20gUkVBRF9JSU4gcmVnaXN0ZXIuCisKK2N1cnJbMi01XV9sYWJlbAkJImlvdXRbMS00XSIuCitjdXJyWzItNV1faW5wdXQJCU1lYXN1cmVkIGN1cnJlbnQuIEZyb20gUkVBRF9JT1VUIHJlZ2lzdGVyLgorY3VyclsyLTVdX21heAkJTWF4aW11bSBjdXJyZW50LiBGcm9tIElPVVRfT0NfV0FSTl9MSU1JVCByZWdpc3Rlci4KK2N1cnJbMi01XV9sY3JpdAkJQ3JpdGljYWwgbWludW11bSBvdXRwdXQgY3VycmVudC4gRnJvbSBJT1VUX1VDX0ZBVUxUX0xJTUlUCisJCQlyZWdpc3Rlci4KK2N1cnJbMi01XV9jcml0CQlDcml0aWNhbCBtYXhpbXVtIGN1cnJlbnQuIEZyb20gSU9VVF9PQ19GQVVMVF9MSU1JVCByZWdpc3Rlci4KK2N1cnJbMi01XV9tYXhfYWxhcm0JQ3VycmVudCBoaWdoIGFsYXJtLiBGcm9tIElPVVRfT0NfV0FSTklORyBzdGF0dXMuCitjdXJyWzItNV1fY3JpdF9hbGFybQlDdXJyZW50IGNyaXRpY2FsIGhpZ2ggYWxhcm0uIEZyb20gSU9VVF9PQ19GQVVMVCBzdGF0dXMuCisKK3Bvd2VyMV9pbnB1dAkJTWVhc3VyZWQgaW5wdXQgcG93ZXIuIEZyb20gUkVBRF9QSU4gcmVnaXN0ZXIuCitwb3dlcjFfbGFiZWwJCSJwaW4iCisKK3Bvd2VyWzItNV1faW5wdXQJTWVhc3VyZWQgb3V0cHV0IHBvd2VyLiBGcm9tIFJFQURfUE9VVCByZWdpc3Rlci4KK3Bvd2VyWzItNV1fbGFiZWwJInBvdXRbMS00XSIKKworCQkJVGhlIG51bWJlciBvZiBvdXRwdXQgdm9sdGFnZSwgY3VycmVudCwgYW5kIHBvd2VyCisJCQlhdHRyaWJ1dGUgc2V0cyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBudW1iZXIgb2YgZW5hYmxlZAorCQkJcmFpbHMuIFNlZSBjaGlwIGRhdGFzaGVldHMgZm9yIGRldGFpbHMuCisKK3RlbXBbMS01XV9pbnB1dAkJTWVhc3VyZWQgdGVtcGVyYXR1cmVzLiBGcm9tIFJFQURfVEVNUEVSQVRVUkVfMSBhbmQKKwkJICAgICAgICBSRUFEX1RFTVBFUkFUVVJFXzIgcmVnaXN0ZXJzLgorCQkJdGVtcDEgaXMgdGhlIGNoaXAgaW50ZXJuYWwgdGVtcGVyYXR1cmUuIHRlbXBbMi01XSBhcmUKKwkJCXJhaWwgdGVtcGVyYXR1cmVzLiAgdGVtcFsyLTVdIGF0dHJpYnV0ZXMgYXJlIG9ubHkKKwkJCWNyZWF0ZWQgZm9yIGVuYWJsZWQgcmFpbHMuIFNlZSBjaGlwIGRhdGFzaGVldHMgZm9yCisJCQlkZXRhaWxzLgordGVtcFsxLTVdX21heAkJTWF4aW11bSB0ZW1wZXJhdHVyZS4gRnJvbSBPVF9XQVJOX0xJTUlUIHJlZ2lzdGVyLgordGVtcFsxLTVdX2NyaXQJCUNyaXRpY2FsIGhpZ2ggdGVtcGVyYXR1cmUuIEZyb20gT1RfRkFVTFRfTElNSVQgcmVnaXN0ZXIuCit0ZW1wWzEtNV1fbWF4X2FsYXJtCVRlbXBlcmF0dXJlIGhpZ2ggYWxhcm0uCit0ZW1wWzEtNV1fY3JpdF9hbGFybQlUZW1wZXJhdHVyZSBjcml0aWNhbCBoaWdoIGFsYXJtLgorCitmYW4xX2lucHV0CQlGYW4gUlBNLiB1Y2Q5MjQwIG9ubHkuCitmYW4xX2FsYXJtCQlGYW4gYWxhcm0uIHVjZDkyNDAgb25seS4KK2ZhbjFfZmF1bHQJCUZhbiBmYXVsdC4gdWNkOTI0MCBvbmx5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCBjNjAzZWY3Li43YzY2MjRlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtMjU4NSw2ICsyNTg1LDEwIEBACiAJCQkJCWJ5dGVzIG9mIHNlbnNlIGRhdGEpOwogCQkJCWMgPSBGSVhfQ0FQQUNJVFkgKGRlY3JlYXNlIHRoZSByZXBvcnRlZAogCQkJCQlkZXZpY2UgY2FwYWNpdHkgYnkgb25lIHNlY3Rvcik7CisJCQkJZCA9IE5PX1JFQURfRElTQ19JTkZPIChkb24ndCB1c2UKKwkJCQkJUkVBRF9ESVNDX0lORk8gY29tbWFuZCk7CisJCQkJZSA9IE5PX1JFQURfQ0FQQUNJVFlfMTYgKGRvbid0IHVzZQorCQkJCQlSRUFEX0NBUEFDSVRZXzE2IGNvbW1hbmQpOwogCQkJCWggPSBDQVBBQ0lUWV9IRVVSSVNUSUNTIChkZWNyZWFzZSB0aGUKIAkJCQkJcmVwb3J0ZWQgZGV2aWNlIGNhcGFjaXR5IGJ5IG9uZQogCQkJCQlzZWN0b3IgaWYgdGhlIG51bWJlciBpcyBvZGQpOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JhdG1hbi1hZHYudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JhdG1hbi1hZHYudHh0CmluZGV4IGVlNDk2ZWIuLjg4ZDRhZmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9iYXRtYW4tYWR2LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYmF0bWFuLWFkdi50eHQKQEAgLTEsNCArMSw0IEBACi1bc3RhdGU6IDI3LTAxLTIwMTFdCitbc3RhdGU6IDE3LTA0LTIwMTFdCiAKIEJBVE1BTi1BRFYKIC0tLS0tLS0tLS0KQEAgLTE5LDYgKzE5LDcgQEAKIG5ldHdvcmsgZHJpdmVyLCBhbmQgY2FuIGJlIHVzZWQgb24gd2lmaSBhcyB3ZWxsIGFzIGV0aGVybmV0ICBsYW4sCiB2cG4sICBldGMgLi4uIChhbnl0aGluZyB3aXRoIGV0aGVybmV0LXN0eWxlIGxheWVyIDIpLgogCisKIENPTkZJR1VSQVRJT04KIC0tLS0tLS0tLS0tLS0KIApAQCAtMTYwLDEzICsxNjEsMTMgQEAKIC0+ICJUUSBtYWMgIHZhbHVlIiAgLSAgc3JjIG1hYydzIGxpbmsgcXVhbGl0eSB0b3dhcmRzIG1hYyBhZGRyZXNzCiAgICAgICAgICAgICAgICAgICAgICAgIG9mIGEgbmVpZ2hib3Igb3JpZ2luYXRvcidzIGludGVyZmFjZSB3aGljaAogICAgICAgICAgICAgICAgICAgICAgICBpcyBiZWluZyB1c2VkIGZvciByb3V0aW5nCi0tPiAiSE5BIG1hYyIgLSBITkEgYW5ub3VuY2VkIGJ5IHNvdXJjZSBtYWMKKy0+ICJUVCBtYWMiIC0gVFQgYW5ub3VuY2VkIGJ5IHNvdXJjZSBtYWMKIC0+ICJQUklNQVJZIiAtIHRoaXMgIGlzIGEgcHJpbWFyeSBpbnRlcmZhY2UKIC0+ICJTRUMgbWFjIiAtIHNlY29uZGFyeSBtYWMgYWRkcmVzcyBvZiBzb3VyY2UKICAgICAgICAgICAgICAgIChyZXF1aXJlcyBwcmVjZWRpbmcgUFJJTUFSWSkKIAogVGhlIFRRIHZhbHVlIGhhcyBhIHJhbmdlIGZyb20gNCB0byAyNTUgd2l0aCAyNTUgYmVpbmcgIHRoZSAgYmVzdC4KLVRoZSBITkEgZW50cmllcyBhcmUgc2hvd2luZyB3aGljaCBob3N0cyBhcmUgY29ubmVjdGVkIHRvIHRoZSBtZXNoCitUaGUgVFQgZW50cmllcyBhcmUgc2hvd2luZyB3aGljaCBob3N0cyBhcmUgY29ubmVjdGVkIHRvIHRoZSBtZXNoCiB2aWEgYmF0MCBvciBiZWluZyBicmlkZ2VkIGludG8gdGhlIG1lc2ggbmV0d29yay4gIFRoZSBQUklNQVJZL1NFQwogdmFsdWVzIGFyZSBvbmx5IGFwcGxpZWQgb24gcHJpbWFyeSBpbnRlcmZhY2VzCiAKQEAgLTE5OSw3ICsyMDAsNyBAQAogCiAwIC0gQWxsICBkZWJ1ZyAgb3V0cHV0ICBkaXNhYmxlZAogMSAtIEVuYWJsZSBtZXNzYWdlcyByZWxhdGVkIHRvIHJvdXRpbmcgLyBmbG9vZGluZyAvIGJyb2FkY2FzdGluZwotMiAtIEVuYWJsZSByb3V0ZSBvciBobmEgYWRkZWQgLyBjaGFuZ2VkIC8gZGVsZXRlZAorMiAtIEVuYWJsZSByb3V0ZSBvciB0dCBlbnRyeSBhZGRlZCAvIGNoYW5nZWQgLyBkZWxldGVkCiAzIC0gRW5hYmxlIGFsbCBtZXNzYWdlcwogCiBUaGUgZGVidWcgb3V0cHV0IGNhbiBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUgIHVzaW5nICB0aGUgIGZpbGUKQEAgLTIwNyw3ICsyMDgsNyBAQAogCiAjIGVjaG8gMiA+IC9zeXMvY2xhc3MvbmV0L2JhdDAvbWVzaC9sb2dfbGV2ZWwKIAotd2lsbCBlbmFibGUgZGVidWcgbWVzc2FnZXMgZm9yIHdoZW4gcm91dGVzIG9yIEhOQXMgY2hhbmdlLgord2lsbCBlbmFibGUgZGVidWcgbWVzc2FnZXMgZm9yIHdoZW4gcm91dGVzIG9yIFRUcyBjaGFuZ2UuCiAKIAogQkFUQ1RMCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy50eHQKaW5kZXggZTI3MjAyYmIuLjFmNDViZDggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy50eHQKQEAgLTEsNyArMSw3IEBACiAKIAkJTGludXggRXRoZXJuZXQgQm9uZGluZyBEcml2ZXIgSE9XVE8KIAotCQlMYXRlc3QgdXBkYXRlOiAyMyBTZXB0ZW1iZXIgMjAwOQorCQlMYXRlc3QgdXBkYXRlOiAyNyBBcHJpbCAyMDExCiAKIEluaXRpYWwgcmVsZWFzZSA6IFRob21hcyBEYXZpcyA8dGFkYXZpcyBhdCBsYmwuZ292PgogQ29ycmVjdGlvbnMsIEhBIGV4dGVuc2lvbnMgOiAyMDAwLzEwLzAzLTE1IDoKQEAgLTU4NSwyNSArNTg1LDIzIEBACiAJCWNob3Nlbi4KIAogbnVtX2dyYXRfYXJwCi0KLQlTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBncmF0dWl0b3VzIEFSUHMgdG8gYmUgaXNzdWVkIGFmdGVyIGEKLQlmYWlsb3ZlciBldmVudC4gIE9uZSBncmF0dWl0b3VzIEFSUCBpcyBpc3N1ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIKLQl0aGUgZmFpbG92ZXIsIHN1YnNlcXVlbnQgQVJQcyBhcmUgc2VudCBhdCBhIHJhdGUgb2Ygb25lIHBlciBsaW5rCi0JbW9uaXRvciBpbnRlcnZhbCAoYXJwX2ludGVydmFsIG9yIG1paW1vbiwgd2hpY2hldmVyIGlzIGFjdGl2ZSkuCi0KLQlUaGUgdmFsaWQgcmFuZ2UgaXMgMCAtIDI1NTsgdGhlIGRlZmF1bHQgdmFsdWUgaXMgMS4gIFRoaXMgb3B0aW9uCi0JYWZmZWN0cyBvbmx5IHRoZSBhY3RpdmUtYmFja3VwIG1vZGUuICBUaGlzIG9wdGlvbiB3YXMgYWRkZWQgZm9yCi0JYm9uZGluZyB2ZXJzaW9uIDMuMy4wLgotCiBudW1fdW5zb2xfbmEKIAotCVNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHVuc29saWNpdGVkIElQdjYgTmVpZ2hib3IgQWR2ZXJ0aXNlbWVudHMKLQl0byBiZSBpc3N1ZWQgYWZ0ZXIgYSBmYWlsb3ZlciBldmVudC4gIE9uZSB1bnNvbGljaXRlZCBOQSBpcyBpc3N1ZWQKLQlpbW1lZGlhdGVseSBhZnRlciB0aGUgZmFpbG92ZXIuCisJU3BlY2lmeSB0aGUgbnVtYmVyIG9mIHBlZXIgbm90aWZpY2F0aW9ucyAoZ3JhdHVpdG91cyBBUlBzIGFuZAorCXVuc29saWNpdGVkIElQdjYgTmVpZ2hib3IgQWR2ZXJ0aXNlbWVudHMpIHRvIGJlIGlzc3VlZCBhZnRlciBhCisJZmFpbG92ZXIgZXZlbnQuICBBcyBzb29uIGFzIHRoZSBsaW5rIGlzIHVwIG9uIHRoZSBuZXcgc2xhdmUKKwkocG9zc2libHkgaW1tZWRpYXRlbHkpIGEgcGVlciBub3RpZmljYXRpb24gaXMgc2VudCBvbiB0aGUKKwlib25kaW5nIGRldmljZSBhbmQgZWFjaCBWTEFOIHN1Yi1kZXZpY2UuICBUaGlzIGlzIHJlcGVhdGVkIGF0CisJZWFjaCBsaW5rIG1vbml0b3IgaW50ZXJ2YWwgKGFycF9pbnRlcnZhbCBvciBtaWltb24sIHdoaWNoZXZlcgorCWlzIGFjdGl2ZSkgaWYgdGhlIG51bWJlciBpcyBncmVhdGVyIHRoYW4gMS4KIAotCVRoZSB2YWxpZCByYW5nZSBpcyAwIC0gMjU1OyB0aGUgZGVmYXVsdCB2YWx1ZSBpcyAxLiAgVGhpcyBvcHRpb24KLQlhZmZlY3RzIG9ubHkgdGhlIGFjdGl2ZS1iYWNrdXAgbW9kZS4gIFRoaXMgb3B0aW9uIHdhcyBhZGRlZCBmb3IKLQlib25kaW5nIHZlcnNpb24gMy40LjAuCisJVGhlIHZhbGlkIHJhbmdlIGlzIDAgLSAyNTU7IHRoZSBkZWZhdWx0IHZhbHVlIGlzIDEuICBUaGVzZSBvcHRpb25zCisJYWZmZWN0IG9ubHkgdGhlIGFjdGl2ZS1iYWNrdXAgbW9kZS4gIFRoZXNlIG9wdGlvbnMgd2VyZSBhZGRlZCBmb3IKKwlib25kaW5nIHZlcnNpb25zIDMuMy4wIGFuZCAzLjQuMCByZXNwZWN0aXZlbHkuCisKKwlGcm9tIExpbnV4IDIuNi40MCBhbmQgYm9uZGluZyB2ZXJzaW9uIDMuNy4xLCB0aGVzZSBub3RpZmljYXRpb25zCisJYXJlIGdlbmVyYXRlZCBieSB0aGUgaXB2NCBhbmQgaXB2NiBjb2RlIGFuZCB0aGUgbnVtYmVycyBvZgorCXJlcGV0aXRpb25zIGNhbm5vdCBiZSBzZXQgaW5kZXBlbmRlbnRseS4KIAogcHJpbWFyeQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaWdiLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pZ2IudHh0CmluZGV4IDk4OTUzYzAuLjlhMmEwMzcxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaWdiLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaWdiLnR4dApAQCAtOTMsNiArOTMsMTkgQEAKICAgUkVRVUlSRU1FTlRTOiBNU0ktWCBzdXBwb3J0IGlzIHJlcXVpcmVkIGZvciBNdWx0aXF1ZXVlLiBJZiBNU0ktWCBpcyBub3QKICAgZm91bmQsIHRoZSBzeXN0ZW0gd2lsbCBmYWxsYmFjayB0byBNU0kgb3IgdG8gTGVnYWN5IGludGVycnVwdHMuCiAKKyAgTUFDIGFuZCBWTEFOIGFudGktc3Bvb2ZpbmcgZmVhdHVyZQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFdoZW4gYSBtYWxpY2lvdXMgZHJpdmVyIGF0dGVtcHRzIHRvIHNlbmQgYSBzcG9vZmVkIHBhY2tldCwgaXQgaXMgZHJvcHBlZCBieQorICB0aGUgaGFyZHdhcmUgYW5kIG5vdCB0cmFuc21pdHRlZC4gIEFuIGludGVycnVwdCBpcyBzZW50IHRvIHRoZSBQRiBkcml2ZXIKKyAgbm90aWZ5aW5nIGl0IG9mIHRoZSBzcG9vZiBhdHRlbXB0LgorCisgIFdoZW4gYSBzcG9vZmVkIHBhY2tldCBpcyBkZXRlY3RlZCB0aGUgUEYgZHJpdmVyIHdpbGwgc2VuZCB0aGUgZm9sbG93aW5nCisgIG1lc3NhZ2UgdG8gdGhlIHN5c3RlbSBsb2cgKGRpc3BsYXllZCBieSAgdGhlICJkbWVzZyIgY29tbWFuZCk6CisKKyAgU3Bvb2YgZXZlbnQocykgZGV0ZWN0ZWQgb24gVkYobikKKworICBXaGVyZSBuPXRoZSBWRiB0aGF0IGF0dGVtcHRlZCB0byBkbyB0aGUgc3Bvb2ZpbmcuCisKIFN1cHBvcnQKID09PT09PT0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wdGkvcHRpX2ludGVsX21pZC50eHQgYi9Eb2N1bWVudGF0aW9uL3B0aS9wdGlfaW50ZWxfbWlkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2E1YjZkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wdGkvcHRpX2ludGVsX21pZC50eHQKQEAgLTAsMCArMSw5OSBAQAorVGhlIEludGVsIE1JRCBQVEkgcHJvamVjdCBpcyBIVyBpbXBsZW1lbnRlZCBpbiBJbnRlbCBBdG9tCitzeXN0ZW0tb24tYS1jaGlwIGRlc2lnbnMgYmFzZWQgb24gdGhlIFBhcmFsbGVsIFRyYWNlCitJbnRlcmZhY2UgZm9yIE1JUEkgUDExNDkuNyBjSlRBRyBzdGFuZGFyZC4gIFRoZSBrZXJuZWwgc29sdXRpb24KK2ZvciB0aGlzIHBsYXRmb3JtIGludm9sdmVzIHRoZSBmb2xsb3dpbmcgZmlsZXM6CisKKy4vaW5jbHVkZS9saW51eC9wdGkuaAorLi9kcml2ZXJzLy4uLi9uX3RyYWNlc2luay5oCisuL2RyaXZlcnMvLi4uL25fdHJhY2Vyb3V0ZXIuYworLi9kcml2ZXJzLy4uLi9uX3RyYWNlc2luay5jCisuL2RyaXZlcnMvLi4uL3B0aS5jCisKK3B0aS5jIGlzIHRoZSBkcml2ZXIgdGhhdCBlbmFibGVzIHZhcmlvdXMgZGVidWdnaW5nIGZlYXR1cmVzCitwb3B1bGFyIG9uIHBsYXRmb3JtcyBmcm9tIGNlcnRhaW4gbW9iaWxlIG1hbnVmYWN0dXJlcnMuCituX3RyYWNlcm91dGVyLmMgYW5kIG5fdHJhY2VzaW5rLmMgYWxsb3cgZXh0cmEgc3lzdGVtIGluZm9ybWF0aW9uIHRvCitiZSBjb2xsZWN0ZWQgYW5kIHJvdXRlZCB0byB0aGUgcHRpIGRyaXZlciwgc3VjaCBhcyB0cmFjZQorZGVidWdnaW5nIGRhdGEgZnJvbSBhIG1vZGVtLiAgQWx0aG91Z2ggbl90cmFjZXJvdXRlcgorYW5kIG5fdHJhY2VzaW5rIGFyZSBhIHBhcnQgb2YgdGhlIGNvbXBsZXRlIFBUSSBzb2x1dGlvbiwKK3RoZXNlIHR3byBsaW5lIGRpc2NpcGxpbmVzIGNhbiB3b3JrIHNlcGFyYXRlbHkgZnJvbQorcHRpLmMgYW5kIHJvdXRlIGFueSBkYXRhIHN0cmVhbSBmcm9tIG9uZSAvZGV2L3R0eSBub2RlCit0byBhbm90aGVyIC9kZXYvdHR5IG5vZGUgdmlhIGtlcm5lbC1zcGFjZS4gIFRoaXMgcHJvdmlkZXMKK2Egc3RhYmxlLCByZWxpYWJsZSBjb25uZWN0aW9uIHRoYXQgd2lsbCBub3QgYnJlYWsgdW5sZXNzCit0aGUgdXNlci1zcGFjZSBhcHBsaWNhdGlvbiBzaHV0cyBkb3duIChwbHVzIGF2b2lkcwora2VybmVsLT51c2VyLT5rZXJuZWwgY29udGV4dCBzd2l0Y2ggb3ZlcmhlYWRzIG9mIHJvdXRpbmcKK2RhdGEpLgorCitBbiBleGFtcGxlIGRlYnVnZ2luZyB1c2FnZSBmb3IgdGhpcyBkcml2ZXIgc3lzdGVtOgorICAgKkhvb2sgL2Rldi90dHlQVEkwIHRvIHN5c2xvZ2QuICBPcGVuaW5nIHRoaXMgcG9ydCB3aWxsIGFsc28gc3RhcnQKKyAgICBhIGNvbnNvbGUgZGV2aWNlIHRvIGZ1cnRoZXIgY2FwdHVyZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgdG8gUFRJLgorICAgKkhvb2sgL2Rldi90dHlQVEkxIHRvIG1vZGVtIGRlYnVnZ2luZyBkYXRhIHRvIHdyaXRlIHRvIFBUSSBIVy4KKyAgICBUaGlzIGlzIHdoZXJlIG5fdHJhY2Vyb3V0ZXIgYW5kIG5fdHJhY2VzaW5rIGFyZSB1c2VkLgorICAgKkhvb2sgL2Rldi9wdGkgdG8gYSB1c2VyLWxldmVsIGRlYnVnZ2luZyBhcHBsaWNhdGlvbiBmb3Igd3JpdGluZworICAgIHRvIFBUSSBIVy4KKyAgICpVc2UgbWlwaV8qIEtlcm5lbCBEcml2ZXIgQVBJIGluIG90aGVyIGRldmljZSBkcml2ZXJzIGZvcgorICAgIGRlYnVnZ2luZyB0byBQVEkgYnkgZmlyc3QgcmVxdWVzdGluZyBhIFBUSSB3cml0ZSBhZGRyZXNzIHZpYQorICAgIG1pcGlfcmVxdWVzdF9tYXN0ZXJjaGFubmVsKDEpLgorCitCZWxvdyBpcyBleGFtcGxlIHBzZXVkby1jb2RlIG9uIGhvdyBhICdwcml2aWxlZ2VkJyBhcHBsaWNhdGlvbgorY2FuIGhvb2sgdXAgbl90cmFjZXJvdXRlciBhbmQgbl90cmFjZXNpbmsgdG8gYW55IHR0eSBvbgorYSBzeXN0ZW0uICAnUHJpdmlsZWdlZCcgbWVhbnMgdGhlIGFwcGxpY2F0aW9uIGhhcyBlbm91Z2gKK3ByaXZpbGVnZXMgdG8gc3VjY2Vzc2Z1bGx5IG1hbmlwdWxhdGUgdGhlIGxkaXNjIGRyaXZlcnMKK2J1dCBpcyBub3QganVzdCBibGluZGx5IGV4ZWN1dGluZyBhcyAncm9vdCcuIEtlZXAgaW4gbWluZAordGhlIHVzZSBvZiBpb2N0bCgsVElPQ1NFVEQsKSBpcyBub3Qgc3BlY2lmaWMgdG8gdGhlIG5fdHJhY2Vyb3V0ZXIKK2FuZCBuX3RyYWNlc2luayBsaW5lIGRpc2NwbGluZSBkcml2ZXJzIGJ1dCBpcyBhIGdlbmVyaWMKK29wZXJhdGlvbiBmb3IgYSBwcm9ncmFtIHRvIHVzZSBhIGxpbmUgZGlzY3BsaW5lIGRyaXZlcgorb24gYSB0dHkgcG9ydCBvdGhlciB0aGFuIHRoZSBkZWZhdWx0IG5fdHR5LgorCisvLy8vLy8vLy8vLyBUbyBob29rIHVwIG5fdHJhY2Vyb3V0ZXIgYW5kIG5fdHJhY2VzaW5rIC8vLy8vLy8vLworCisvLyBOb3RlIHRoYXQgbl90cmFjZXJvdXRlciBkZXBlbmRzIG9uIG5fdHJhY2VzaW5rLgorI2luY2x1ZGUgPGVycm5vLmg+CisjZGVmaW5lIE9ORV9UVFkgIi9kZXYvdHR5T25lIgorI2RlZmluZSBUV09fVFRZICIvZGV2L3R0eVR3byIKKworLy8gbmVlZGVkIGdsb2JhbCB0byBoYW5kIG9udG8gbGRpc2MgY29ubmVjdGlvbgorc3RhdGljIGludCBnX2ZkX3NvdXJjZSA9IC0xOworc3RhdGljIGludCBnX2ZkX3NpbmsgID0gLTE7CisKKy8vIHRoZXNlIHR3byB2YXJzIHVzZWQgdG8gZ3JhYiBMRElTQyB2YWx1ZXMgZnJvbSBsb2FkZWQgbGRpc2MgZHJpdmVycworLy8gaW4gT1MuICBMb29rIGF0IC9wcm9jL3R0eS9sZGlzY3MgdG8gZ2V0IHRoZSByaWdodCBudW1iZXJzIGZyb20KKy8vIHRoZSBsZGlzY3MgbG9hZGVkIGluIHRoZSBzeXN0ZW0uCitpbnQgc291cmNlX2xkaXNjX251bSwgc2lua19sZGlzY19udW0gPSAtMTsKK2ludCByZXR2YWw7CisKK2dfZmRfc291cmNlID0gb3BlbihPTkVfVFRZLCBPX1JEV1IpOyAvLyBtdXN0IGJlIFIvVworZ19mZF9zaW5rICAgPSBvcGVuKFRXT19UVFksIE9fUkRXUik7IC8vIG11c3QgYmUgUi9XCisKK2lmIChnX2ZkX3NvdXJjZSA8PSAwKSB8fCAoZ19mZF9zaW5rIDw9IDApIHsKKyAgIC8vIGRvdWJ0IHlvdSdsbCB3YW50IHRvIHVzZSB0aGVzZSBleGFjdCBlcnJvciBsaW5lcyBvZiBjb2RlCisgICBwcmludGYoIkVycm9yIG9uIG9wZW4oKS4gZXJybm86ICVkXG4iLGVycm5vKTsKKyAgIHJldHVybiBlcnJubzsKK30KKworcmV0dmFsID0gaW9jdGwoZ19mZF9zaW5rLCBUSU9DU0VURCwgJnNpbmtfbGRpc2NfbnVtKTsKK2lmIChyZXR2YWwgPCAwKSB7CisgICBwcmludGYoIkVycm9yIG9uIGlvY3RsKCkuICBlcnJubzogJWRcbiIsIGVycm5vKTsKKyAgIHJldHVybiBlcnJubzsKK30KKworcmV0dmFsID0gaW9jdGwoZ19mZF9zb3VyY2UsIFRJT0NTRVRELCAmc291cmNlX2xkaXNjX251bSk7CitpZiAocmV0dmFsIDwgMCkgeworICAgcHJpbnRmKCJFcnJvciBvbiBpb2N0bCgpLiAgZXJybm86ICVkXG4iLCBlcnJubyk7CisgICByZXR1cm4gZXJybm87Cit9CisKKy8vLy8vLy8vLy8vIFRvIGRpc2Nvbm5lY3Qgbl90cmFjZXJvdXRlciBhbmQgbl90cmFjZXNpbmsgLy8vLy8vLy8KKworLy8gRmlyc3QgbWFrZSBzdXJlIGRhdGEgdGhyb3VnaCB0aGUgbGRpc2NzIGhhcyBzdG9wcGVkLgorCisvLyBTZWNvbmQsIGRpc2Nvbm5lY3QgbGRpc2NzLiAgVGhpcyBwcm92aWRlcyBhCisvLyBsaXR0bGUgY2xlYW5lciBzaHV0ZG93biBvbiB0dHkgc3RhY2suCitzaW5rX2xkaXNjX251bSA9IDA7Citzb3VyY2VfbGRpc2NfbnVtID0gMDsKK2lvY3RsKGdfZmRfdWFydCwgVElPQ1NFVEQsICZzaW5rX2xkaXNjX251bSk7Citpb2N0bChnX2ZkX2dhZGdldCwgVElPQ1NFVEQsICZzb3VyY2VfbGRpc2NfbnVtKTsKKworLy8gVGhyZWUsIHByb2dyYW0gY2xvc2VzIGNvbm5lY3Rpb24sIGFuZCBjbGVhbnVwOgorY2xvc2UoZ19mZF91YXJ0KTsKK2Nsb3NlKGdfZmRfZ2FkZ2V0KTsKK2dfZmRfdWFydCA9IGdfZmRfZ2FkZ2V0ID0gTlVMTDsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9MSUNFTlNFLnFsYTJ4eHggYi9Eb2N1bWVudGF0aW9uL3Njc2kvTElDRU5TRS5xbGEyeHh4CmluZGV4IDllMTViNGYuLjE5ZTdjZDQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NzaS9MSUNFTlNFLnFsYTJ4eHgKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0xJQ0VOU0UucWxhMnh4eApAQCAtMSwxMSArMSwxMSBAQAotQ29weXJpZ2h0IChjKSAgMjAwMy0yMDA1IFFMb2dpYyBDb3Jwb3JhdGlvbgotUUxvZ2ljIExpbnV4IEZpYnJlIENoYW5uZWwgSEJBIERyaXZlcgorQ29weXJpZ2h0IChjKSAyMDAzLTIwMTEgUUxvZ2ljIENvcnBvcmF0aW9uCitRTG9naWMgTGludXgvRVNYIEZpYnJlIENoYW5uZWwgSEJBIERyaXZlcgogCi1UaGlzIHByb2dyYW0gaW5jbHVkZXMgYSBkZXZpY2UgZHJpdmVyIGZvciBMaW51eCAyLjYgdGhhdCBtYXkgYmUKK1RoaXMgcHJvZ3JhbSBpbmNsdWRlcyBhIGRldmljZSBkcml2ZXIgZm9yIExpbnV4IDIuNi9FU1ggdGhhdCBtYXkgYmUKIGRpc3RyaWJ1dGVkIHdpdGggUUxvZ2ljIGhhcmR3YXJlIHNwZWNpZmljIGZpcm13YXJlIGJpbmFyeSBmaWxlLgogWW91IG1heSBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUgZGV2aWNlIGRyaXZlciBjb2RlIHVuZGVyIHRoZQotR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi1Gb3VuZGF0aW9uICh2ZXJzaW9uIDIgb3IgYSBsYXRlciB2ZXJzaW9uKS4KK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChhIGNvcHkgb2Ygd2hpY2ggaXMgYXR0YWNoZWQgaGVyZXRvIGFzCitFeGhpYml0IEEpIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uICh2ZXJzaW9uIDIpLgogCiBZb3UgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgaGFyZHdhcmUgc3BlY2lmaWMgZmlybXdhcmUgYmluYXJ5IGZpbGUKIHVuZGVyIHRoZSBmb2xsb3dpbmcgdGVybXM6CkBAIC00MywzICs0MywyODUgQEAKIFRSQURFIFNFQ1JFVCwgTUFTSyBXT1JLLCBPUiBPVEhFUiBQUk9QUklFVEFSWSBSSUdIVCkgRU1CT0RJRUQgSU4KIEFOWSBPVEhFUiBRTE9HSUMgSEFSRFdBUkUgT1IgU09GVFdBUkUgRUlUSEVSIFNPTEVMWSBPUiBJTgogQ09NQklOQVRJT04gV0lUSCBUSElTIFBST0dSQU0uCisKKworRVhISUJJVCBBCisKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorCisgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dAppbmRleCA5ODIyYWZiLi44OTc1NzAxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dApAQCAtMTIzMCw2ICsxMjMwLDEzIEBACiAgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMuCiAgICAgVGhlIGRyaXZlciByZXF1aXJlcyB0aGUgZmlybXdhcmUgbG9hZGVyIHN1cHBvcnQgb24ga2VybmVsLgogCisgIE1vZHVsZSBzbmQtbG9sYQorICAtLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgRGlnaWdyYW0gTG9sYSBQQ0ktZSBib2FyZHMKKworICAgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIG11bHRpcGxlIGNhcmRzLgorCiAgIE1vZHVsZSBzbmQtbHg2NDY0ZXMKICAgLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CmluZGV4IDBjYWY3N2UuLmQ3MGM5M2IgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CkBAIC05NCw3ICs5NCw3IEBACiAgIDNzdGFjay1kaWcJMy1zdGFjayAoMi1jaGFubmVsKSB3aXRoIFNQRElGCiAgIDNzdGFjay02Y2gJIDMtc3RhY2sgKDYtY2hhbm5lbCkKICAgM3N0YWNrLTZjaC1kaWcgMy1zdGFjayAoNi1jaGFubmVsKSB3aXRoIFNQRElGCi0gIDZzdGFjay1kaWcJIDYtc3RhY2sgd2l0aCBTUERJRgorICA1c3RhY2stZGlnCSA1LXN0YWNrIHdpdGggU1BESUYKICAgbGVub3ZvLTEwMWUJIExlbm92byBsYXB0b3AKICAgZWVlcGMtcDcwMQlBU1VTIEVlZXBjIFA3MDEKICAgZWVlcGMtZXAyMAlBU1VTIEVlZXBjIEVQMjAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3RhYmxlX2FwaV9ub25zZW5zZS50eHQgYi9Eb2N1bWVudGF0aW9uL3N0YWJsZV9hcGlfbm9uc2Vuc2UudHh0CmluZGV4IDg0N2IzNDIuLmRiM2JlODkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc3RhYmxlX2FwaV9ub25zZW5zZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zdGFibGVfYXBpX25vbnNlbnNlLnR4dApAQCAtMTIyLDcgKzEyMiw3IEBACiAKIEluIGJvdGggb2YgdGhlc2UgaW5zdGFuY2VzLCBhbGwgZGV2ZWxvcGVycyBhZ3JlZWQgdGhhdCB0aGVzZSB3ZXJlCiBpbXBvcnRhbnQgY2hhbmdlcyB0aGF0IG5lZWRlZCB0byBiZSBtYWRlLCBhbmQgdGhleSB3ZXJlIG1hZGUsIHdpdGgKLXJlbGF0aXZlbHkgbGl0dGxlIHBhaW4uICBJZiBMaW51eCBoYWQgdG8gZW5zdXJlIHRoYXQgaXQgcHJlc2VydmUgYQorcmVsYXRpdmVseSBsaXR0bGUgcGFpbi4gIElmIExpbnV4IGhhZCB0byBlbnN1cmUgdGhhdCBpdCB3aWxsIHByZXNlcnZlIGEKIHN0YWJsZSBzb3VyY2UgaW50ZXJmYWNlLCBhIG5ldyBpbnRlcmZhY2Ugd291bGQgaGF2ZSBiZWVuIGNyZWF0ZWQsIGFuZAogdGhlIG9sZGVyLCBicm9rZW4gb25lIHdvdWxkIGhhdmUgaGFkIHRvIGJlIG1haW50YWluZWQgb3ZlciB0aW1lLCBsZWFkaW5nCiB0byBleHRyYSB3b3JrIGZvciB0aGUgVVNCIGRldmVsb3BlcnMuICBTaW5jZSBhbGwgTGludXggVVNCIGRldmVsb3BlcnMgZG8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3lzY3RsL25ldC50eHQgYi9Eb2N1bWVudGF0aW9uL3N5c2N0bC9uZXQudHh0CmluZGV4IGNiZDA1ZmYuLjMyMDFhNzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc3lzY3RsL25ldC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwvbmV0LnR4dApAQCAtMzIsNiArMzIsMTcgQEAKIDEuIC9wcm9jL3N5cy9uZXQvY29yZSAtIE5ldHdvcmsgY29yZSBvcHRpb25zCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK2JwZl9qaXRfZW5hYmxlCistLS0tLS0tLS0tLS0tLQorCitUaGlzIGVuYWJsZXMgQmVya2VsZXkgUGFja2V0IEZpbHRlciBKdXN0IGluIFRpbWUgY29tcGlsZXIuCitDdXJyZW50bHkgc3VwcG9ydGVkIG9uIHg4Nl82NCBhcmNoaXRlY3R1cmUsIGJwZl9qaXQgcHJvdmlkZXMgYSBmcmFtZXdvcmsKK3RvIHNwZWVkIHBhY2tldCBmaWx0ZXJpbmcsIHRoZSBvbmUgdXNlZCBieSB0Y3BkdW1wL2xpYnBjYXAgZm9yIGV4YW1wbGUuCitWYWx1ZXMgOgorCTAgLSBkaXNhYmxlIHRoZSBKSVQgKGRlZmF1bHQgdmFsdWUpCisJMSAtIGVuYWJsZSB0aGUgSklUCisJMiAtIGVuYWJsZSB0aGUgSklUIGFuZCBhc2sgdGhlIGNvbXBpbGVyIHRvIGVtaXQgdHJhY2VzIG9uIGtlcm5lbCBsb2cuCisKIHJtZW1fZGVmYXVsdAogLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3lzY3RsL3ZtLnR4dCBiL0RvY3VtZW50YXRpb24vc3lzY3RsL3ZtLnR4dAppbmRleCAzMDI4OWZhLi45NmYwZWU4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3N5c2N0bC92bS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwvdm0udHh0CkBAIC00ODEsMTAgKzQ4MSwxMCBAQAogVHlwZShBKSBpcyBjYWxsZWQgYXMgIk5vZGUiIG9yZGVyLiBUeXBlIChCKSBpcyAiWm9uZSIgb3JkZXIuCiAKICJOb2RlIG9yZGVyIiBvcmRlcnMgdGhlIHpvbmVsaXN0cyBieSBub2RlLCB0aGVuIGJ5IHpvbmUgd2l0aGluIGVhY2ggbm9kZS4KLVNwZWNpZnkgIltObl1vZGUiIGZvciB6b25lIG9yZGVyCitTcGVjaWZ5ICJbTm5db2RlIiBmb3Igbm9kZSBvcmRlcgogCiAiWm9uZSBPcmRlciIgb3JkZXJzIHRoZSB6b25lbGlzdHMgYnkgem9uZSB0eXBlLCB0aGVuIGJ5IG5vZGUgd2l0aGluIGVhY2gKLXpvbmUuICBTcGVjaWZ5ICJbWnpdb25lImZvciB6b2RlIG9yZGVyLgorem9uZS4gIFNwZWNpZnkgIltael1vbmUiIGZvciB6b25lIG9yZGVyLgogCiBTcGVjaWZ5ICJbRGRdZWZhdWx0IiB0byByZXF1ZXN0IGF1dG9tYXRpYyBjb25maWd1cmF0aW9uLiAgQXV0b2NvbmZpZ3VyYXRpb24KIHdpbGwgc2VsZWN0ICJub2RlIiBvcmRlciBpbiBmb2xsb3dpbmcgY2FzZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGltZXJzL3RpbWVycy1ob3d0by50eHQgYi9Eb2N1bWVudGF0aW9uL3RpbWVycy90aW1lcnMtaG93dG8udHh0CmluZGV4IGM5ZWYyOWQuLjAzOGY4YzcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdGltZXJzL3RpbWVycy1ob3d0by50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90aW1lcnMvdGltZXJzLWhvd3RvLnR4dApAQCAtMjQsNyArMjQsNyBAQAogCiAJbmRlbGF5KHVuc2lnbmVkIGxvbmcgbnNlY3MpCiAJdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlY3MpCi0JbWRlbGF5KHVuc2dpbmVkIGxvbmcgbXNlY3MpCisJbWRlbGF5KHVuc2lnbmVkIGxvbmcgbXNlY3MpCiAKIAl1ZGVsYXkgaXMgdGhlIGdlbmVyYWxseSBwcmVmZXJyZWQgQVBJOyBuZGVsYXktbGV2ZWwKIAlwcmVjaXNpb24gbWF5IG5vdCBhY3R1YWxseSBleGlzdCBvbiBtYW55IG5vbi1QQyBkZXZpY2VzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2IvY2FsbGJhY2tzLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL2NhbGxiYWNrcy50eHQKaW5kZXggYmZiMzZiMy4uOWU4NTg0NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi91c2IvY2FsbGJhY2tzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3VzYi9jYWxsYmFja3MudHh0CkBAIC05NSw5ICs5NSwxMSBAQAogCiBpbnQgKCpwcmVfcmVzZXQpKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKIAotQW5vdGhlciBkcml2ZXIgb3IgdXNlciBzcGFjZSBpcyB0cmlnZ2VyaW5nIGEgcmVzZXQgb24gdGhlIGRldmljZSB3aGljaAotY29udGFpbnMgdGhlIGludGVyZmFjZSBwYXNzZWQgYXMgYW4gYXJndW1lbnQuIENlYXNlIElPIGFuZCBzYXZlIGFueQotZGV2aWNlIHN0YXRlIHlvdSBuZWVkIHRvIHJlc3RvcmUuCitBIGRyaXZlciBvciB1c2VyIHNwYWNlIGlzIHRyaWdnZXJpbmcgYSByZXNldCBvbiB0aGUgZGV2aWNlIHdoaWNoCitjb250YWlucyB0aGUgaW50ZXJmYWNlIHBhc3NlZCBhcyBhbiBhcmd1bWVudC4gQ2Vhc2UgSU8sIHdhaXQgZm9yIGFsbAorb3V0c3RhbmRpbmcgVVJCcyB0byBjb21wbGV0ZSwgYW5kIHNhdmUgYW55IGRldmljZSBzdGF0ZSB5b3UgbmVlZCB0bworcmVzdG9yZS4gIE5vIG1vcmUgVVJCcyBtYXkgYmUgc3VibWl0dGVkIHVudGlsIHRoZSBwb3N0X3Jlc2V0IG1ldGhvZAoraXMgY2FsbGVkLgogCiBJZiB5b3UgbmVlZCB0byBhbGxvY2F0ZSBtZW1vcnkgaGVyZSwgdXNlIEdGUF9OT0lPIG9yIEdGUF9BVE9NSUMsIGlmIHlvdQogYXJlIGluIGF0b21pYyBjb250ZXh0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2IvbGludXgtY2RjLWFjbS5pbmYgYi9Eb2N1bWVudGF0aW9uL3VzYi9saW51eC1jZGMtYWNtLmluZgppbmRleCA2MTJlNzIyLi4zN2EwMmNlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3VzYi9saW51eC1jZGMtYWNtLmluZgorKysgYi9Eb2N1bWVudGF0aW9uL3VzYi9saW51eC1jZGMtYWNtLmluZgpAQCAtOTAsMTAgKzkwLDEwIEBACiBbU291cmNlRGlza3NGaWxlc10KIFtTb3VyY2VEaXNrc05hbWVzXQogW0RldmljZUxpc3RdCi0lREVTQ1JJUFRJT04lPURyaXZlckluc3RhbGwsIFVTQlxWSURfMDUyNSZQSURfQTRBNywgVVNCXFZJRF8wNTI1JlBJRF9BNEFCJk1JXzAyCislREVTQ1JJUFRJT04lPURyaXZlckluc3RhbGwsIFVTQlxWSURfMDUyNSZQSURfQTRBNywgVVNCXFZJRF8xRDZCJlBJRF8wMTA0Jk1JXzAyCiAKIFtEZXZpY2VMaXN0Lk5UYW1kNjRdCi0lREVTQ1JJUFRJT04lPURyaXZlckluc3RhbGwsIFVTQlxWSURfMDUyNSZQSURfQTRBNywgVVNCXFZJRF8wNTI1JlBJRF9BNEFCJk1JXzAyCislREVTQ1JJUFRJT04lPURyaXZlckluc3RhbGwsIFVTQlxWSURfMDUyNSZQSURfQTRBNywgVVNCXFZJRF8xRDZCJlBJRF8wMTA0Jk1JXzAyCiAKIAogOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2IvbGludXguaW5mIGIvRG9jdW1lbnRhdGlvbi91c2IvbGludXguaW5mCmluZGV4IDRkZWU5NTguLjRmZmE3MTViMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi91c2IvbGludXguaW5mCisrKyBiL0RvY3VtZW50YXRpb24vdXNiL2xpbnV4LmluZgpAQCAtMTgsMTUgKzE4LDE1IEBACiAKIDsgRGVjb3JhdGlvbiBmb3IgeDg2IGFyY2hpdGVjdHVyZQogW0xpbnV4RGV2aWNlcy5OVHg4Nl0KLSVMaW51eERldmljZSUgICAgICAgPSBSTkRJUy5OVC41LjEsIFVTQlxWSURfMDUyNSZQSURfYTRhMiwgVVNCXFZJRF8wNTI1JlBJRF9hNGFiJk1JXzAwCislTGludXhEZXZpY2UlICAgICAgID0gUk5ESVMuTlQuNS4xLCBVU0JcVklEXzA1MjUmUElEX2E0YTIsIFVTQlxWSURfMWQ2YiZQSURfMDEwNCZNSV8wMAogCiA7IERlY29yYXRpb24gZm9yIHg2NCBhcmNoaXRlY3R1cmUKIFtMaW51eERldmljZXMuTlRhbWQ2NF0KLSVMaW51eERldmljZSUgICAgICAgPSBSTkRJUy5OVC41LjEsIFVTQlxWSURfMDUyNSZQSURfYTRhMiwgVVNCXFZJRF8wNTI1JlBJRF9hNGFiJk1JXzAwCislTGludXhEZXZpY2UlICAgICAgID0gUk5ESVMuTlQuNS4xLCBVU0JcVklEXzA1MjUmUElEX2E0YTIsIFVTQlxWSURfMWQ2YiZQSURfMDEwNCZNSV8wMAogCiA7IERlY29yYXRpb24gZm9yIGlhNjQgYXJjaGl0ZWN0dXJlCiBbTGludXhEZXZpY2VzLk5UaWE2NF0KLSVMaW51eERldmljZSUgICAgICAgPSBSTkRJUy5OVC41LjEsIFVTQlxWSURfMDUyNSZQSURfYTRhMiwgVVNCXFZJRF8wNTI1JlBJRF9hNGFiJk1JXzAwCislTGludXhEZXZpY2UlICAgICAgID0gUk5ESVMuTlQuNS4xLCBVU0JcVklEXzA1MjUmUElEX2E0YTIsIFVTQlxWSURfMWQ2YiZQSURfMDEwNCZNSV8wMAogCiA7QEBAIFRoaXMgaXMgdGhlIGNvbW1vbiBzZXR0aW5nIGZvciBzZXR1cAogW0NvbnRyb2xGbGFnc10KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlydHVhbC9rdm0vYXBpLnR4dCBiL0RvY3VtZW50YXRpb24vdmlydHVhbC9rdm0vYXBpLnR4dAppbmRleCA5YmVmNGU0Li40MjU0MmViIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwva3ZtL2FwaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2t2bS9hcGkudHh0CkBAIC0xNzUsNyArMTc1LDEwIEBACiBSZXR1cm5zOiB2Y3B1IGZkIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yCiAKIFRoaXMgQVBJIGFkZHMgYSB2Y3B1IHRvIGEgdmlydHVhbCBtYWNoaW5lLiAgVGhlIHZjcHUgaWQgaXMgYSBzbWFsbCBpbnRlZ2VyCi1pbiB0aGUgcmFuZ2UgWzAsIG1heF92Y3B1cykuCitpbiB0aGUgcmFuZ2UgWzAsIG1heF92Y3B1cykuICBZb3UgY2FuIHVzZSBLVk1fQ0FQX05SX1ZDUFVTIG9mIHRoZQorS1ZNX0NIRUNLX0VYVEVOU0lPTiBpb2N0bCgpIHRvIGRldGVybWluZSB0aGUgdmFsdWUgZm9yIG1heF92Y3B1cyBhdCBydW4tdGltZS4KK0lmIHRoZSBLVk1fQ0FQX05SX1ZDUFVTIGRvZXMgbm90IGV4aXN0LCB5b3Ugc2hvdWxkIGFzc3VtZSB0aGF0IG1heF92Y3B1cyBpcyA0CitjcHVzIG1heC4KIAogNC44IEtWTV9HRVRfRElSVFlfTE9HICh2bSBpb2N0bCkKIApAQCAtMjYxLDcgKzI2NCw3IEBACiA0LjEzIEtWTV9HRVRfU1JFR1MKIAogQ2FwYWJpbGl0eTogYmFzaWMKLUFyY2hpdGVjdHVyZXM6IHg4NgorQXJjaGl0ZWN0dXJlczogeDg2LCBwcGMKIFR5cGU6IHZjcHUgaW9jdGwKIFBhcmFtZXRlcnM6IHN0cnVjdCBrdm1fc3JlZ3MgKG91dCkKIFJldHVybnM6IDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKQEAgLTI3OSw2ICsyODIsOCBAQAogCV9fdTY0IGludGVycnVwdF9iaXRtYXBbKEtWTV9OUl9JTlRFUlJVUFRTICsgNjMpIC8gNjRdOwogfTsKIAorLyogcHBjIC0tIHNlZSBhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtLmggKi8KKwogaW50ZXJydXB0X2JpdG1hcCBpcyBhIGJpdG1hcCBvZiBwZW5kaW5nIGV4dGVybmFsIGludGVycnVwdHMuICBBdCBtb3N0CiBvbmUgYml0IG1heSBiZSBzZXQuICBUaGlzIGludGVycnVwdCBoYXMgYmVlbiBhY2tub3dsZWRnZWQgYnkgdGhlIEFQSUMKIGJ1dCBub3QgeWV0IGluamVjdGVkIGludG8gdGhlIGNwdSBjb3JlLgpAQCAtMjg2LDcgKzI5MSw3IEBACiA0LjE0IEtWTV9TRVRfU1JFR1MKIAogQ2FwYWJpbGl0eTogYmFzaWMKLUFyY2hpdGVjdHVyZXM6IHg4NgorQXJjaGl0ZWN0dXJlczogeDg2LCBwcGMKIFR5cGU6IHZjcHUgaW9jdGwKIFBhcmFtZXRlcnM6IHN0cnVjdCBrdm1fc3JlZ3MgKGluKQogUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvcgpAQCAtMTI2Myw2ICsxMjY4LDI5IEBACiAJX191MTYgcGFkZGluZ1szXTsKIH07CiAKKzQuNTQgS1ZNX1NFVF9UU0NfS0haCisKK0NhcGFiaWxpdHk6IEtWTV9DQVBfVFNDX0NPTlRST0wKK0FyY2hpdGVjdHVyZXM6IHg4NgorVHlwZTogdmNwdSBpb2N0bAorUGFyYW1ldGVyczogdmlydHVhbCB0c2Nfa2h6CitSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yCisKK1NwZWNpZmllcyB0aGUgdHNjIGZyZXF1ZW5jeSBmb3IgdGhlIHZpcnR1YWwgbWFjaGluZS4gVGhlIHVuaXQgb2YgdGhlCitmcmVxdWVuY3kgaXMgS0h6LgorCis0LjU1IEtWTV9HRVRfVFNDX0tIWgorCitDYXBhYmlsaXR5OiBLVk1fQ0FQX0dFVF9UU0NfS0haCitBcmNoaXRlY3R1cmVzOiB4ODYKK1R5cGU6IHZjcHUgaW9jdGwKK1BhcmFtZXRlcnM6IG5vbmUKK1JldHVybnM6IHZpcnR1YWwgdHNjLWtoeiBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvcgorCitSZXR1cm5zIHRoZSB0c2MgZnJlcXVlbmN5IG9mIHRoZSBndWVzdC4gVGhlIHVuaXQgb2YgdGhlIHJldHVybiB2YWx1ZSBpcworS0h6LiBJZiB0aGUgaG9zdCBoYXMgdW5zdGFibGUgdHNjIHRoaXMgaW9jdGwgcmV0dXJucyAtRUlPIGluc3RlYWQgYXMgYW4KK2Vycm9yLgorCiA1LiBUaGUga3ZtX3J1biBzdHJ1Y3R1cmUKIAogQXBwbGljYXRpb24gY29kZSBvYnRhaW5zIGEgcG9pbnRlciB0byB0aGUga3ZtX3J1biBzdHJ1Y3R1cmUgYnkKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggOGRmOGQyZC4uMGI0MTUyNCAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTU0OCwxMCArNTQ4LDExIEBACiBGOglzb3VuZC9hb2EvCiAKIEFQTSBEUklWRVIKLUw6CWxpbnV4LWxhcHRvcEB2Z2VyLmtlcm5lbC5vcmcKLVM6CU9ycGhhbgorTToJSmlyaSBLb3NpbmEgPGprb3NpbmFAc3VzZS5jej4KK1M6CU9kZCBmaXhlcwogRjoJYXJjaC94ODYva2VybmVsL2FwbV8zMi5jCiBGOglpbmNsdWRlL2xpbnV4L2FwbV9iaW9zLmgKK0Y6CWRyaXZlcnMvY2hhci9hcG0tZW11bGF0aW9uLmMKIAogQVBQTEUgQkNNNTk3NCBNVUxUSVRPVUNIIERSSVZFUgogTToJSGVucmlrIFJ5ZGJlcmcgPHJ5ZGJlcmdAZXVyb21haWwuc2U+CkBAIC03MjksNyArNzMwLDcgQEAKIE06CURhbmllbCBSaWJlaXJvIDxkcnd5cm1AZ21haWwuY29tPgogTToJU3RlZmFuIFNjaG1pZHQgPHN0ZWZhbkBvcGVuZXp4Lm9yZz4KIE06CUhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBvcGVuZXp4Lm9yZz4KLUw6CW9wZW5lengtZGV2ZWxAbGlzdHMub3BlbmV6eC5vcmcgKHN1YnNjcmliZXJzLW9ubHkpCitMOglvcGVuZXp4LWRldmVsQGxpc3RzLm9wZW5lengub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFc6CWh0dHA6Ly93d3cub3BlbmV6eC5vcmcvCiBTOglNYWludGFpbmVkCiBUOgl0b3BnaXQgZ2l0Oi8vZ2l0Lm9wZW5lengub3JnL29wZW5lenguZ2l0CkBAIC0xMjMyLDEzICsxMjMzLDYgQEAKIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrLwogCi1BVEhFUk9TIEFSOTE3MCBXSVJFTEVTUyBEUklWRVIKLU06CUNocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QHdlYi5kZT4KLUw6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZwotVzoJaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcvZW4vdXNlcnMvRHJpdmVycy9hcjkxNzAKLVM6CU9ic29sZXRlCi1GOglkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwLwotCiBDQVJMOTE3MCBMSU5VWCBDT01NVU5JVFkgV0lSRUxFU1MgRFJJVkVSCiBNOglDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUBnb29nbGVtYWlsLmNvbT4KIEw6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZwpAQCAtMzM2Myw2ICszMzU3LDEyIEBACiBGOglkcml2ZXJzL25ldC93aW1heC9pMjQwMG0vCiBGOglpbmNsdWRlL2xpbnV4L3dpbWF4L2kyNDAwbS5oCiAKK0lOVEVMIFdJUkVMRVNTIDM5NDVBQkcvQkcsIDQ5NjVBR04gKGl3bGVnYWN5KQorTToJU3RhbmlzbGF3IEdydXN6a2EgPHNncnVzemthQHJlZGhhdC5jb20+CitMOglsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmcKK1M6CVN1cHBvcnRlZAorRjoJZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvCisKIElOVEVMIFdJUkVMRVNTIFdJRkkgTElOSyAoaXdsd2lmaSkKIE06CVdleS1ZaSBHdXkgPHdleS15aS53Lmd1eUBpbnRlbC5jb20+CiBNOglJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KQEAgLTQyNTMsNyArNDI1Myw3IEBACiBNVVNCIE1VTFRJUE9JTlQgSElHSCBTUEVFRCBEVUFMLVJPTEUgQ09OVFJPTExFUgogTToJRmVsaXBlIEJhbGJpIDxiYWxiaUB0aS5jb20+CiBMOglsaW51eC11c2JAdmdlci5rZXJuZWwub3JnCi1UOglnaXQgZ2l0Oi8vZ2l0b3Jpb3VzLm9yZy91c2IvdXNiLmdpdAorVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9iYWxiaS91c2IuZ2l0CiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3VzYi9tdXNiLwogCkBAIC00MjcwLDYgKzQyNzAsMTMgQEAKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvbmV0L25hdHNlbWkuYwogCitOQVRJVkUgSU5TVFJVTUVOVFMgVVNCIFNPVU5EIElOVEVSRkFDRSBEUklWRVIKK006CURhbmllbCBNYWNrIDx6b25xdWVAZ21haWwuY29tPgorUzoJTWFpbnRhaW5lZAorTDoJYWxzYS1kZXZlbEBhbHNhLXByb2plY3Qub3JnCitXOglodHRwOi8vd3d3Lm5hdGl2ZS1pbnN0cnVtZW50cy5jb20KK0Y6CXNvdW5kL3VzYi9jYWlhcS8KKwogTkNQIEZJTEVTWVNURU0KIE06CVBldHIgVmFuZHJvdmVjIDxwZXRyQHZhbmRyb3ZlYy5uYW1lPgogUzoJT2RkIEZpeGVzCkBAIC00Mzg1LDYgKzQzOTIsNyBAQAogRjoJbmV0L2lwdjQvCiBGOgluZXQvaXB2Ni8KIEY6CWluY2x1ZGUvbmV0L2lwKgorRjoJYXJjaC94ODYvbmV0LyoKIAogTkVUV09SS0lORyBbTEFCRUxFRF0gKE5ldExhYmVsLCBDSVBTTywgTGFiZWxlZCBJUHNlYywgU0VDTUFSSykKIE06CVBhdWwgTW9vcmUgPHBhdWwubW9vcmVAaHAuY29tPgpAQCAtNDU4MCw2ICs0NTg4LDcgQEAKIE06CURhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogTDoJbGludXgtdXNiQHZnZXIua2VybmVsLm9yZwogTDoJbGludXgtb21hcEB2Z2VyLmtlcm5lbC5vcmcKK1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYmFsYmkvdXNiLmdpdAogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy91c2IvKi8qb21hcCoKIEY6CWFyY2gvYXJtLypvbWFwKi91c2IqCkBAIC01NDMxLDYgKzU0NDAsNyBAQAogRjoJa2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYwogRjoJa2VybmVsL3RpbWUvdGltZSouYwogRjoJa2VybmVsL3RpbWUvbnRwLmMKK0Y6CWRyaXZlcnMvY2xvY2tzb3VyY2UKIAogVExHMjMwMCBWSURFTzRMSU5VWC0yIERSSVZFUgogTToJSHVhbmcgU2hpamllIDxzaGlqaWU4QGdtYWlsLmNvbT4KQEAgLTU2MTEsOSArNTYyMSw5IEBACiBGOglpbmNsdWRlL2xpbnV4L2xpYmF0YS5oCiAKIFNFUlZFUiBFTkdJTkVTIDEwR2JwcyBpU0NTSSAtIEJsYWRlRW5naW5lIDIgRFJJVkVSCi1NOglKYXlhbW9oYW4gS2FsbGlja2FsIDxqYXlhbW9oYW5rQHNlcnZlcmVuZ2luZXMuY29tPgorTToJSmF5YW1vaGFuIEthbGxpY2thbCA8amF5YW1vaGFuLmthbGxpY2thbEBlbXVsZXguY29tPgogTDoJbGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmcKLVc6CWh0dHA6Ly93d3cuc2VydmVyZW5naW5lcy5jb20KK1c6CWh0dHA6Ly93d3cuZW11bGV4LmNvbQogUzoJU3VwcG9ydGVkCiBGOglkcml2ZXJzL3Njc2kvYmUyaXNjc2kvCiAKQEAgLTU4MzEsNiArNTg0MSwxMyBAQAogRjoJZHJpdmVycy9zc2IvCiBGOglpbmNsdWRlL2xpbnV4L3NzYi8KIAorQlJPQURDT00gU1BFQ0lGSUMgQU1CQSBEUklWRVIgKEJDTUEpCitNOglSYWZhxYIgTWnFgmVja2kgPHphamVjNUBnbWFpbC5jb20+CitMOglsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvYmNtYS8KK0Y6CWluY2x1ZGUvbGludXgvYmNtYS8KKwogU09OWSBWQUlPIENPTlRST0wgREVWSUNFIERSSVZFUgogTToJTWF0dGlhIERvbmdpbGkgPG1hbGF0dGlhQGxpbnV4Lml0PgogTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKQEAgLTU4NjAsNyArNTg3Nyw3IEBACiBGOglzb3VuZC8KIAogU09VTkQgLSBTT0MgTEFZRVIgLyBEWU5BTUlDIEFVRElPIFBPV0VSIE1BTkFHRU1FTlQgKEFTb0MpCi1NOglMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgorTToJTGlhbSBHaXJkd29vZCA8bHJnQHRpLmNvbT4KIE06CU1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9icm9vbmllL3NvdW5kLTIuNi5naXQKIEw6CWFsc2EtZGV2ZWxAYWxzYS1wcm9qZWN0Lm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCkBAIC02MTExLDcgKzYxMjgsNyBAQAogRjoJaW5jbHVkZS9saW51eC90aWZtLmgKIAogVEkgVFdMNDAzMCBTRVJJRVMgU09DIENPREVDIERSSVZFUgotTToJUGV0ZXIgVWpmYWx1c2kgPHBldGVyLnVqZmFsdXNpQG5va2lhLmNvbT4KK006CVBldGVyIFVqZmFsdXNpIDxwZXRlci51amZhbHVzaUB0aS5jb20+CiBMOglhbHNhLWRldmVsQGFsc2EtcHJvamVjdC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJTWFpbnRhaW5lZAogRjoJc291bmQvc29jL2NvZGVjcy90d2w0MDMwKgpAQCAtNjIxNCw2ICs2MjMxLDcgQEAKIE06CUppcmkgS29zaW5hIDx0cml2aWFsQGtlcm5lbC5vcmc+CiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2ppa29zL3RyaXZpYWwuZ2l0CiBTOglNYWludGFpbmVkCitLOgleU3ViamVjdDouKig/aSl0cml2aWFsCiAKIFRUWSBMQVlFUgogTToJR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KQEAgLTY3NTUsNyArNjc3Myw3IEBACiBGOglkcml2ZXJzL3Njc2kvdm13X3B2c2NzaS5oCiAKIFZPTFRBR0UgQU5EIENVUlJFTlQgUkVHVUxBVE9SIEZSQU1FV09SSwotTToJTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KK006CUxpYW0gR2lyZHdvb2QgPGxyZ0B0aS5jb20+CiBNOglNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KIFc6CWh0dHA6Ly9vcGVuc291cmNlLndvbGZzb25taWNyby5jb20vbm9kZS8xNQogVzoJaHR0cDovL3d3dy5zbGltbG9naWMuY28udWsvP3A9NDgKZGlmZiAtLWdpdCBhL2FyY2gvS2NvbmZpZyBiL2FyY2gvS2NvbmZpZwppbmRleCBmNzhjMmJlLi44ZDI0YmFjIDEwMDY0NAotLS0gYS9hcmNoL0tjb25maWcKKysrIGIvYXJjaC9LY29uZmlnCkBAIC0xNDQsOSArMTQ0LDYgQEAKIGNvbmZpZyBIQVZFX0RNQV9BUElfREVCVUcKIAlib29sCiAKLWNvbmZpZyBIQVZFX0RFRkFVTFRfTk9fU1BJTl9NVVRFWEVTCi0JYm9vbAotCiBjb25maWcgSEFWRV9IV19CUkVBS1BPSU5UCiAJYm9vbAogCWRlcGVuZHMgb24gUEVSRl9FVkVOVFMKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2FscGhhL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDQzM2JlMmEuLjNkODkwYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNDYsNiArNDYsNyBAQAogCV9faW5pdF9lbmQgPSAuOwogCS8qIEZyZWVkIGFmdGVyIGluaXQgZW5kcyBoZXJlICovCiAKKwlfc2RhdGEgPSAuOwkvKiBTdGFydCBvZiBydyBkYXRhIHNlY3Rpb24gKi8KIAlfZGF0YSA9IC47CiAJUldfREFUQV9TRUNUSU9OKEwxX0NBQ0hFX0JZVEVTLCBQQUdFX1NJWkUsIFRIUkVBRF9TSVpFKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MWNhcDlfZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFjYXA5X2RldmljZXMuYwppbmRleCA5ZmZiZjNhLi4yMTAyMGNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MWNhcDlfZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxY2FwOV9kZXZpY2VzLmMKQEAgLTE3MSw3ICsxNzEsNyBAQAogCSAqLwogCXVzYmFfdWRjX2RhdGEucGRhdGEudmJ1c19waW4gPSAtRUlOVkFMOwogCXVzYmFfdWRjX2RhdGEucGRhdGEubnVtX2VwID0gQVJSQVlfU0laRSh1c2JhX3VkY19lcCk7Ci0JbWVtY3B5KHVzYmFfdWRjX2RhdGEuZXAsIHVzYmFfdWRjX2VwLCBzaXplb2YodXNiYV91ZGNfZXApKTs7CisJbWVtY3B5KHVzYmFfdWRjX2RhdGEuZXAsIHVzYmFfdWRjX2VwLCBzaXplb2YodXNiYV91ZGNfZXApKTsKIAogCWlmIChkYXRhICYmIGRhdGEtPnZidXNfcGluID4gMCkgewogCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnZidXNfcGluLCAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOWc0NV9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlnNDVfZGV2aWNlcy5jCmluZGV4IDFlOGYyNzUuLjVlOWY4YTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOWc0NV9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05ZzQ1X2RldmljZXMuYwpAQCAtMjU2LDcgKzI1Niw3IEBACiB7CiAJdXNiYV91ZGNfZGF0YS5wZGF0YS52YnVzX3BpbiA9IC1FSU5WQUw7CiAJdXNiYV91ZGNfZGF0YS5wZGF0YS5udW1fZXAgPSBBUlJBWV9TSVpFKHVzYmFfdWRjX2VwKTsKLQltZW1jcHkodXNiYV91ZGNfZGF0YS5lcCwgdXNiYV91ZGNfZXAsIHNpemVvZih1c2JhX3VkY19lcCkpOzsKKwltZW1jcHkodXNiYV91ZGNfZGF0YS5lcCwgdXNiYV91ZGNfZXAsIHNpemVvZih1c2JhX3VkY19lcCkpOwogCiAJaWYgKGRhdGEgJiYgZGF0YS0+dmJ1c19waW4gPiAwKSB7CiAJCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+dmJ1c19waW4sIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05cmxfZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05cmxfZGV2aWNlcy5jCmluZGV4IDUzYWFhOTQuLmM0OTI2MmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOXJsX2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlybF9kZXZpY2VzLmMKQEAgLTE0NSw3ICsxNDUsNyBAQAogCSAqLwogCXVzYmFfdWRjX2RhdGEucGRhdGEudmJ1c19waW4gPSAtRUlOVkFMOwogCXVzYmFfdWRjX2RhdGEucGRhdGEubnVtX2VwID0gQVJSQVlfU0laRSh1c2JhX3VkY19lcCk7Ci0JbWVtY3B5KHVzYmFfdWRjX2RhdGEuZXAsIHVzYmFfdWRjX2VwLCBzaXplb2YodXNiYV91ZGNfZXApKTs7CisJbWVtY3B5KHVzYmFfdWRjX2RhdGEuZXAsIHVzYmFfdWRjX2VwLCBzaXplb2YodXNiYV91ZGNfZXApKTsKIAogCWlmIChkYXRhICYmIGRhdGEtPnZidXNfcGluID4gMCkgewogCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnZidXNfcGluLCAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L0tjb25maWcKaW5kZXggZTg0OWY2Ny4uODA1MTk2MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L0tjb25maWcKQEAgLTE3MCw2ICsxNzAsNyBAQAogCXNlbGVjdCBTM0NfREVWX0hTTU1DMwogCXNlbGVjdCBTM0NfREVWX0kyQzEKIAlzZWxlY3QgUzNDX0RFVl9JMkM1CisJc2VsZWN0IFM1UF9ERVZfVVNCX0VIQ0kKIAlzZWxlY3QgRVhZTk9TNF9TRVRVUF9JMkMxCiAJc2VsZWN0IEVYWU5PUzRfU0VUVVBfSTJDNQogCXNlbGVjdCBFWFlOT1M0X1NFVFVQX1NESENJCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vczQvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvTWFrZWZpbGUKaW5kZXggOWJlMTA0Zi4uNzc3ODk3NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9NYWtlZmlsZQpAQCAtNTQsMyArNTQsNSBAQAogb2JqLSQoQ09ORklHX0VYWU5PUzRfU0VUVVBfS0VZUEFEKQkrPSBzZXR1cC1rZXlwYWQubwogb2JqLSQoQ09ORklHX0VYWU5PUzRfU0VUVVBfU0RIQ0kpCSs9IHNldHVwLXNkaGNpLm8KIG9iai0kKENPTkZJR19FWFlOT1M0X1NFVFVQX1NESENJX0dQSU8pCSs9IHNldHVwLXNkaGNpLWdwaW8ubworCitvYmotJChDT05GSUdfVVNCX1NVUFBPUlQpCQkrPSB1c2ItcGh5Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9jcHUuYyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9jcHUuYwppbmRleCA3OTMwMTEzLi4wODgxM2E2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWV4eW5vczQvY3B1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2NwdS5jCkBAIC05Nyw3ICs5NywxMiBAQAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oRVhZTk9TNF9QQV9TUk9NQyksCiAJCS5sZW5ndGgJCT0gU1pfNEssCiAJCS50eXBlCQk9IE1UX0RFVklDRSwKLQl9LAorCX0sIHsKKwkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTNVBfVkFfVVNCX0hTUEhZLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oRVhZTk9TNF9QQV9IU1BIWSksCisJCS5sZW5ndGgJCT0gU1pfNEssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9CiB9OwogCiBzdGF0aWMgdm9pZCBleHlub3M0X2lkbGUodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvbWFwLmggYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL21hcC5oCmluZGV4IDYzMzBiNzMuLjAwMDllNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvbWFwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9tYXAuaApAQCAtMTAxLDYgKzEwMSw5IEBACiAKICNkZWZpbmUgRVhZTk9TNF9QQV9TUk9NQwkJMHgxMjU3MDAwMAogCisjZGVmaW5lIEVYWU5PUzRfUEFfRUhDSQkJCTB4MTI1ODAwMDAKKyNkZWZpbmUgRVhZTk9TNF9QQV9IU1BIWQkJMHgxMjVCMDAwMAorCiAjZGVmaW5lIEVYWU5PUzRfUEFfVUFSVAkJCTB4MTM4MDAwMDAKIAogI2RlZmluZSBFWFlOT1M0X1BBX0lJQyh4KQkJKDB4MTM4NjAwMDAgKyAoKHgpICogMHgxMDAwMCkpCkBAIC0xNDMsNiArMTQ2LDcgQEAKICNkZWZpbmUgUzVQX1BBX1NST01DCQkJRVhZTk9TNF9QQV9TUk9NQwogI2RlZmluZSBTNVBfUEFfU1lTQ09OCQkJRVhZTk9TNF9QQV9TWVNDT04KICNkZWZpbmUgUzVQX1BBX1RJTUVSCQkJRVhZTk9TNF9QQV9USU1FUgorI2RlZmluZSBTNVBfUEFfRUhDSQkJCUVYWU5PUzRfUEFfRUhDSQogCiAjZGVmaW5lIFNBTVNVTkdfUEFfS0VZUEFECQlFWFlOT1M0X1BBX0tFWVBBRAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL3JlZ3MtcG11LmggYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL3JlZ3MtcG11LmgKaW5kZXggNjJiMDAxNC4uYTk2NDMzNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9yZWdzLXBtdS5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvcmVncy1wbXUuaApAQCAtMzMsNiArMzMsOSBAQAogI2RlZmluZSBTNVBfRUlOVF9XQUtFVVBfTUFTSwkJCVM1UF9QTVVSRUcoMHgwNjA0KQogI2RlZmluZSBTNVBfV0FLRVVQX01BU0sJCQkJUzVQX1BNVVJFRygweDA2MDgpCiAKKyNkZWZpbmUgUzVQX1VTQkhPU1RfUEhZX0NPTlRST0wJCQlTNVBfUE1VUkVHKDB4MDcwOCkKKyNkZWZpbmUgUzVQX1VTQkhPU1RfUEhZX0VOQUJMRQkJCSgxIDw8IDApCisKICNkZWZpbmUgUzVQX01JUElfRFBIWV9DT05UUk9MKG4pCQlTNVBfUE1VUkVHKDB4MDcxMCArIChuKSAqIDQpCiAjZGVmaW5lIFM1UF9NSVBJX0RQSFlfRU5BQkxFCQkJKDEgPDwgMCkKICNkZWZpbmUgUzVQX01JUElfRFBIWV9TUkVTRVROCQkJKDEgPDwgMSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvcmVncy11c2ItcGh5LmggYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL3JlZ3MtdXNiLXBoeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMzExOGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL3JlZ3MtdXNiLXBoeS5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby5MdGQKKyAqIEF1dGhvcjogSm9vbnlvdW5nIFNoaW0gPGp5MDkyMi5zaGltQHNhbXN1bmcuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX1BMQVRfUzVQX1JFR1NfVVNCX1BIWV9ICisjZGVmaW5lIF9fUExBVF9TNVBfUkVHU19VU0JfUEhZX0gKKworI2RlZmluZSBFWFlOT1M0X0hTT1RHX1BIWVJFRyh4KQkJKCh4KSArIFM1UF9WQV9VU0JfSFNQSFkpCisKKyNkZWZpbmUgRVhZTk9TNF9QSFlQV1IJCQlFWFlOT1M0X0hTT1RHX1BIWVJFRygweDAwKQorI2RlZmluZSBQSFkxX0hTSUNfTk9STUFMX01BU0sJCSgweGYgPDwgOSkKKyNkZWZpbmUgUEhZMV9IU0lDMV9TTEVFUAkJKDEgPDwgMTIpCisjZGVmaW5lIFBIWTFfSFNJQzFfRk9SQ0VfU1VTUEVORAkoMSA8PCAxMSkKKyNkZWZpbmUgUEhZMV9IU0lDMF9TTEVFUAkJKDEgPDwgMTApCisjZGVmaW5lIFBIWTFfSFNJQzBfRk9SQ0VfU1VTUEVORAkoMSA8PCA5KQorCisjZGVmaW5lIFBIWTFfU1REX05PUk1BTF9NQVNLCQkoMHg3IDw8IDYpCisjZGVmaW5lIFBIWTFfU1REX1NMRUVQCQkJKDEgPDwgOCkKKyNkZWZpbmUgUEhZMV9TVERfQU5BTE9HX1BPV0VSRE9XTgkoMSA8PCA3KQorI2RlZmluZSBQSFkxX1NURF9GT1JDRV9TVVNQRU5ECQkoMSA8PCA2KQorCisjZGVmaW5lIFBIWTBfTk9STUFMX01BU0sJCSgweDM5IDw8IDApCisjZGVmaW5lIFBIWTBfU0xFRVAJCQkoMSA8PCA1KQorI2RlZmluZSBQSFkwX09UR19ESVNBQkxFCQkoMSA8PCA0KQorI2RlZmluZSBQSFkwX0FOQUxPR19QT1dFUkRPV04JCSgxIDw8IDMpCisjZGVmaW5lIFBIWTBfRk9SQ0VfU1VTUEVORAkJKDEgPDwgMCkKKworI2RlZmluZSBFWFlOT1M0X1BIWUNMSwkJCUVYWU5PUzRfSFNPVEdfUEhZUkVHKDB4MDQpCisjZGVmaW5lIFBIWTFfQ09NTU9OX09OX04JCSgxIDw8IDcpCisjZGVmaW5lIFBIWTBfQ09NTU9OX09OX04JCSgxIDw8IDQpCisjZGVmaW5lIFBIWTBfSURfUFVMTFVQCQkJKDEgPDwgMikKKyNkZWZpbmUgQ0xLU0VMX01BU0sJCQkoMHgzIDw8IDApCisjZGVmaW5lIENMS1NFTF9TSElGVAkJCSgwKQorI2RlZmluZSBDTEtTRUxfNDhNCQkJKDB4MCA8PCAwKQorI2RlZmluZSBDTEtTRUxfMTJNCQkJKDB4MiA8PCAwKQorI2RlZmluZSBDTEtTRUxfMjRNCQkJKDB4MyA8PCAwKQorCisjZGVmaW5lIEVYWU5PUzRfUlNUQ09OCQkJRVhZTk9TNF9IU09UR19QSFlSRUcoMHgwOCkKKyNkZWZpbmUgSE9TVF9MSU5LX1BPUlRfU1dSU1RfTUFTSwkoMHhmIDw8IDYpCisjZGVmaW5lIEhPU1RfTElOS19QT1JUMl9TV1JTVAkJKDEgPDwgOSkKKyNkZWZpbmUgSE9TVF9MSU5LX1BPUlQxX1NXUlNUCQkoMSA8PCA4KQorI2RlZmluZSBIT1NUX0xJTktfUE9SVDBfU1dSU1QJCSgxIDw8IDcpCisjZGVmaW5lIEhPU1RfTElOS19BTExfU1dSU1QJCSgxIDw8IDYpCisKKyNkZWZpbmUgUEhZMV9TV1JTVF9NQVNLCQkJKDB4NyA8PCAzKQorI2RlZmluZSBQSFkxX0hTSUNfU1dSU1QJCQkoMSA8PCA1KQorI2RlZmluZSBQSFkxX1NURF9TV1JTVAkJCSgxIDw8IDQpCisjZGVmaW5lIFBIWTFfQUxMX1NXUlNUCQkJKDEgPDwgMykKKworI2RlZmluZSBQSFkwX1NXUlNUX01BU0sJCQkoMHg3IDw8IDApCisjZGVmaW5lIFBIWTBfUEhZTElOS19TV1JTVAkJKDEgPDwgMikKKyNkZWZpbmUgUEhZMF9ITElOS19TV1JTVAkJKDEgPDwgMSkKKyNkZWZpbmUgUEhZMF9TV1JTVAkJCSgxIDw8IDApCisKKyNkZWZpbmUgRVhZTk9TNF9QSFkxQ09OCQkJRVhZTk9TNF9IU09UR19QSFlSRUcoMHgzNCkKKyNkZWZpbmUgRlBFTkFCTEVOCQkJKDEgPDwgMCkKKworI2VuZGlmIC8qIF9fUExBVF9TNVBfUkVHU19VU0JfUEhZX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9tYWNoLW51cmkuYyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9tYWNoLW51cmkuYwppbmRleCBiNzlhZDAxLi5iYjVkMTJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWV4eW5vczQvbWFjaC1udXJpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L21hY2gtbnVyaS5jCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KICNpbmNsdWRlIDxwbGF0L2RldnMuaD4KICNpbmNsdWRlIDxwbGF0L3NkaGNpLmg+CisjaW5jbHVkZSA8cGxhdC9laGNpLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgogCiAjaW5jbHVkZSA8bWFjaC9tYXAuaD4KIApAQCAtMjYyLDYgKzI2NCwxNiBAQAogCS8qIG1heDg5OTcsIFRvIGJlIHVwZGF0ZWQgKi8KIH07CiAKKy8qIFVTQiBFSENJICovCitzdGF0aWMgc3RydWN0IHM1cF9laGNpX3BsYXRkYXRhIG51cmlfZWhjaV9wZGF0YTsKKworc3RhdGljIHZvaWQgX19pbml0IG51cmlfZWhjaV9pbml0KHZvaWQpCit7CisJc3RydWN0IHM1cF9laGNpX3BsYXRkYXRhICpwZGF0YSA9ICZudXJpX2VoY2lfcGRhdGE7CisKKwlzNXBfZWhjaV9zZXRfcGxhdGRhdGEocGRhdGEpOworfQorCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbnVyaV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkvKiBTYW1zdW5nIFBsYXRmb3JtIERldmljZXMgKi8KIAkmZW1tY19maXhlZF92b2x0YWdlLApAQCAtMjcwLDYgKzI4Miw3IEBACiAJJnMzY19kZXZpY2VfaHNtbWMzLAogCSZzM2NfZGV2aWNlX3dkdCwKIAkmczNjX2RldmljZV90aW1lclswXSwKKwkmczVwX2RldmljZV9laGNpLAogCiAJLyogTlVSSSBEZXZpY2VzICovCiAJJm51cmlfZ3Bpb19rZXlzLApAQCAtMjkxLDYgKzMwNCw5IEBACiAJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgaTJjMV9kZXZzLCBBUlJBWV9TSVpFKGkyYzFfZGV2cykpOwogCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDUsIGkyYzVfZGV2cywgQVJSQVlfU0laRShpMmM1X2RldnMpKTsKIAorCW51cmlfZWhjaV9pbml0KCk7CisJY2xrX3h1c2J4dGkucmF0ZSA9IDI0MDAwMDAwOworCiAJLyogTGFzdCAqLwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKG51cmlfZGV2aWNlcywgQVJSQVlfU0laRShudXJpX2RldmljZXMpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zNC91c2ItcGh5LmMgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvdXNiLXBoeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ODNjMWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvdXNiLXBoeS5jCkBAIC0wLDAgKzEsMTM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uTHRkCisgKiBBdXRob3I6IEpvb255b3VuZyBTaGltIDxqeTA5MjIuc2hpbUBzYW1zdW5nLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtcG11Lmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLXVzYi1waHkuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvdXNiLXBoeS5oPgorCitzdGF0aWMgaW50IGV4eW5vczRfdXNiX3BoeTFfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBjbGsgKm90Z19jbGs7CisJc3RydWN0IGNsayAqeHVzYnh0aV9jbGs7CisJdTMyIHBoeWNsazsKKwl1MzIgcnN0Y29uOworCWludCBlcnI7CisKKwlvdGdfY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAib3RnIik7CisJaWYgKElTX0VSUihvdGdfY2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZ2V0IG90ZyBjbG9ja1xuIik7CisJCXJldHVybiBQVFJfRVJSKG90Z19jbGspOworCX0KKworCWVyciA9IGNsa19lbmFibGUob3RnX2Nsayk7CisJaWYgKGVycikgeworCQljbGtfcHV0KG90Z19jbGspOworCQlyZXR1cm4gZXJyOworCX0KKworCXdyaXRlbChyZWFkbChTNVBfVVNCSE9TVF9QSFlfQ09OVFJPTCkgfCBTNVBfVVNCSE9TVF9QSFlfRU5BQkxFLAorCQkJUzVQX1VTQkhPU1RfUEhZX0NPTlRST0wpOworCisJLyogc2V0IGNsb2NrIGZyZXF1ZW5jeSBmb3IgUExMICovCisJcGh5Y2xrID0gcmVhZGwoRVhZTk9TNF9QSFlDTEspICYgfkNMS1NFTF9NQVNLOworCisJeHVzYnh0aV9jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJ4dXNieHRpIik7CisJaWYgKHh1c2J4dGlfY2xrICYmICFJU19FUlIoeHVzYnh0aV9jbGspKSB7CisJCXN3aXRjaCAoY2xrX2dldF9yYXRlKHh1c2J4dGlfY2xrKSkgeworCQljYXNlIDEyICogTUhaOgorCQkJcGh5Y2xrIHw9IENMS1NFTF8xMk07CisJCQlicmVhazsKKwkJY2FzZSAyNCAqIE1IWjoKKwkJCXBoeWNsayB8PSBDTEtTRUxfMjRNOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCWNhc2UgNDggKiBNSFo6CisJCQkvKiBkZWZhdWx0IHJlZmVyZW5jZSBjbG9jayAqLworCQkJYnJlYWs7CisJCX0KKwkJY2xrX3B1dCh4dXNieHRpX2Nsayk7CisJfQorCisJd3JpdGVsKHBoeWNsaywgRVhZTk9TNF9QSFlDTEspOworCisJLyogZmxvYXRpbmcgcHJldmVudGlvbiBsb2dpYzogZGlzYWJsZSAqLworCXdyaXRlbCgocmVhZGwoRVhZTk9TNF9QSFkxQ09OKSB8IEZQRU5BQkxFTiksIEVYWU5PUzRfUEhZMUNPTik7CisKKwkvKiBzZXQgdG8gbm9ybWFsIEhTSUMgMCBhbmQgMSBvZiBQSFkxICovCisJd3JpdGVsKChyZWFkbChFWFlOT1M0X1BIWVBXUikgJiB+UEhZMV9IU0lDX05PUk1BTF9NQVNLKSwKKwkJCUVYWU5PUzRfUEhZUFdSKTsKKworCS8qIHNldCB0byBub3JtYWwgc3RhbmRhcmQgVVNCIG9mIFBIWTEgKi8KKwl3cml0ZWwoKHJlYWRsKEVYWU5PUzRfUEhZUFdSKSAmIH5QSFkxX1NURF9OT1JNQUxfTUFTSyksIEVYWU5PUzRfUEhZUFdSKTsKKworCS8qIHJlc2V0IGFsbCBwb3J0cyBvZiBib3RoIFBIWSBhbmQgTGluayAqLworCXJzdGNvbiA9IHJlYWRsKEVYWU5PUzRfUlNUQ09OKSB8IEhPU1RfTElOS19QT1JUX1NXUlNUX01BU0sgfAorCQlQSFkxX1NXUlNUX01BU0s7CisJd3JpdGVsKHJzdGNvbiwgRVhZTk9TNF9SU1RDT04pOworCXVkZWxheSgxMCk7CisKKwlyc3Rjb24gJj0gfihIT1NUX0xJTktfUE9SVF9TV1JTVF9NQVNLIHwgUEhZMV9TV1JTVF9NQVNLKTsKKwl3cml0ZWwocnN0Y29uLCBFWFlOT1M0X1JTVENPTik7CisJdWRlbGF5KDUwKTsKKworCWNsa19kaXNhYmxlKG90Z19jbGspOworCWNsa19wdXQob3RnX2Nsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBleHlub3M0X3VzYl9waHkxX2V4aXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgY2xrICpvdGdfY2xrOworCWludCBlcnI7CisKKwlvdGdfY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAib3RnIik7CisJaWYgKElTX0VSUihvdGdfY2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZ2V0IG90ZyBjbG9ja1xuIik7CisJCXJldHVybiBQVFJfRVJSKG90Z19jbGspOworCX0KKworCWVyciA9IGNsa19lbmFibGUob3RnX2Nsayk7CisJaWYgKGVycikgeworCQljbGtfcHV0KG90Z19jbGspOworCQlyZXR1cm4gZXJyOworCX0KKworCXdyaXRlbCgocmVhZGwoRVhZTk9TNF9QSFlQV1IpIHwgUEhZMV9TVERfQU5BTE9HX1BPV0VSRE9XTiksCisJCQlFWFlOT1M0X1BIWVBXUik7CisKKwl3cml0ZWwocmVhZGwoUzVQX1VTQkhPU1RfUEhZX0NPTlRST0wpICYgflM1UF9VU0JIT1NUX1BIWV9FTkFCTEUsCisJCQlTNVBfVVNCSE9TVF9QSFlfQ09OVFJPTCk7CisKKwljbGtfZGlzYWJsZShvdGdfY2xrKTsKKwljbGtfcHV0KG90Z19jbGspOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBzNXBfdXNiX3BoeV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCB0eXBlKQoreworCWlmICh0eXBlID09IFM1UF9VU0JfUEhZX0hPU1QpCisJCXJldHVybiBleHlub3M0X3VzYl9waHkxX2luaXQocGRldik7CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworaW50IHM1cF91c2JfcGh5X2V4aXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IHR5cGUpCit7CisJaWYgKHR5cGUgPT0gUzVQX1VTQl9QSFlfSE9TVCkKKwkJcmV0dXJuIGV4eW5vczRfdXNiX3BoeTFfZXhpdChwZGV2KTsKKworCXJldHVybiAtRUlOVkFMOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL21zbV9pb21hcC5oIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL21zbV9pb21hcC5oCmluZGV4IGM5OGM3NTkuLjJmNDk0YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9tc21faW9tYXAuaAorKysgYi9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvbXNtX2lvbWFwLmgKQEAgLTU1LDcgKzU1LDcgQEAKIAogI2luY2x1ZGUgIm1zbV9pb21hcC04OTYwLmgiCiAKLS8qIFZpcnR1YWwgYWRkcmVzc3NlcyBzaGFyZWQgYWNyb3NzIGFsbCBNU00gdGFyZ2V0cy4gKi8KKy8qIFZpcnR1YWwgYWRkcmVzc2VzIHNoYXJlZCBhY3Jvc3MgYWxsIE1TTSB0YXJnZXRzLiAqLwogI2RlZmluZSBNU01fQ1NSX0JBU0UJCUlPTUVNKDB4RTAwMDEwMDApCiAjZGVmaW5lIE1TTV9RR0lDX0RJU1RfQkFTRQlJT01FTSgweEYwMDAwMDAwKQogI2RlZmluZSBNU01fUUdJQ19DUFVfQkFTRQlJT01FTSgweEYwMDAxMDAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jb250cm9sLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbnRyb2wuaAppbmRleCBjMjgwNGMxLi5hMDE2YzhiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbnRyb2wuaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbnRyb2wuaApAQCAtMjM2LDcgKzIzNiw3IEBACiAjZGVmaW5lIE9NQVAzNDNYX0NPTlRST0xfV0tVUF9ERUJPQlMzIChPTUFQMzQzWF9DT05UUk9MX0dFTkVSQUxfV0tVUCArIDB4MDE0KQogI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX1dLVVBfREVCT0JTNCAoT01BUDM0M1hfQ09OVFJPTF9HRU5FUkFMX1dLVVAgKyAweDAxOCkKIAotLyogMzZ4eC1vbmx5IFJUQSAtIFJldGVudGlvbiB0aWxsIEFjY2Vzc3MgY29udHJvbCByZWdpc3RlcnMgYW5kIGJpdHMgKi8KKy8qIDM2eHgtb25seSBSVEEgLSBSZXRlbnRpb24gdGlsbCBBY2Nlc3MgY29udHJvbCByZWdpc3RlcnMgYW5kIGJpdHMgKi8KICNkZWZpbmUgT01BUDM2WFhfQ09OVFJPTF9NRU1fUlRBX0NUUkwJMHg0MEMKICNkZWZpbmUgT01BUDM2WFhfUlRBX0RJU0FCTEUJCTB4MAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL21hcC5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9tYXAuaAppbmRleCAyNWJiZjVhLi40MjU1NTJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL21hcC5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvbWFwLmgKQEAgLTIxLDYgKzIxLDEwIEBACiAvKiBVU0IgaG9zdCBjb250cm9sbGVyICovCiAjZGVmaW5lIFMzQzI0MTBfUEFfVVNCSE9TVCAoMHg0OTAwMDAwMCkKIAorLyogUzNDMjQxNi9TM0MyNDQzL1MzQzI0NTAgSGlnaC1TcGVlZCBVU0IgR2FkZ2V0ICovCisjZGVmaW5lIFMzQzI0MTZfUEFfSFNVREMJKDB4NDk4MDAwMDApCisjZGVmaW5lIFMzQzI0MTZfU1pfSFNVREMJKFNaXzRLKQorCiAvKiBETUEgY29udHJvbGxlciAqLwogI2RlZmluZSBTM0MyNDEwX1BBX0RNQQkgICAoMHg0QjAwMDAwMCkKICNkZWZpbmUgUzNDMjRYWF9TWl9ETUEJICAgU1pfMU0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvcmVncy1zM2MyNDQzLWNsb2NrLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3JlZ3MtczNjMjQ0My1jbG9jay5oCmluZGV4IDQ0NDk0YTUuLjVlMDZjNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvcmVncy1zM2MyNDQzLWNsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9yZWdzLXMzYzI0NDMtY2xvY2suaApAQCAtMzcsNiArMzcsMTAgQEAKICNkZWZpbmUgUzNDMjQ0M19TWVNJRAkJCVMzQzI0NDNfQ0xLUkVHKDB4NUMpCiAjZGVmaW5lIFMzQzI0NDNfUFdSQ0ZHCQkJUzNDMjQ0M19DTEtSRUcoMHg2MCkKICNkZWZpbmUgUzNDMjQ0M19SU1RDT04JCQlTM0MyNDQzX0NMS1JFRygweDY0KQorI2RlZmluZSBTM0MyNDQzX1BIWUNUUkwJCQlTM0MyNDQzX0NMS1JFRygweDgwKQorI2RlZmluZSBTM0MyNDQzX1BIWVBXUgkJCVMzQzI0NDNfQ0xLUkVHKDB4ODQpCisjZGVmaW5lIFMzQzI0NDNfVVJTVENPTgkJCVMzQzI0NDNfQ0xLUkVHKDB4ODgpCisjZGVmaW5lIFMzQzI0NDNfVUNMS0NPTgkJCVMzQzI0NDNfQ0xLUkVHKDB4OEMpCiAKICNkZWZpbmUgUzNDMjQ0M19TV1JTVF9SRVNFVAkJKDB4NTMzYzI0NDMpCiAKQEAgLTEyMSw2ICsxMjUsMjcgQEAKIAogI2RlZmluZSBTM0MyNDQzX1BXUkNGR19TTEVFUAkJKDE8PDE1KQogCisjZGVmaW5lIFMzQzI0NDNfUFdSQ0ZHX1VTQlBIWQkJKDEgPDwgNCkKKworI2RlZmluZSBTM0MyNDQzX1VSU1RDT05fRlVOQ1JTVAkJKDEgPDwgMikKKyNkZWZpbmUgUzNDMjQ0M19VUlNUQ09OX1BIWVJTVAkJKDEgPDwgMCkKKworI2RlZmluZSBTM0MyNDQzX1BIWUNUUkxfQ0xLU0VMCQkoMSA8PCAzKQorI2RlZmluZSBTM0MyNDQzX1BIWUNUUkxfRVhUQ0xLCQkoMSA8PCAyKQorI2RlZmluZSBTM0MyNDQzX1BIWUNUUkxfUExMU0VMCQkoMSA8PCAxKQorI2RlZmluZSBTM0MyNDQzX1BIWUNUUkxfRFNQT1JUCQkoMSA8PCAwKQorCisjZGVmaW5lIFMzQzI0NDNfUEhZUFdSX0NPTU1PTl9PTgkoMSA8PCAzMSkKKyNkZWZpbmUgUzNDMjQ0M19QSFlQV1JfQU5BTE9HX1BECSgxIDw8IDQpCisjZGVmaW5lIFMzQzI0NDNfUEhZUFdSX1BMTF9SRUZDTEsJKDEgPDwgMykKKyNkZWZpbmUgUzNDMjQ0M19QSFlQV1JfWE9fT04JCSgxIDw8IDIpCisjZGVmaW5lIFMzQzI0NDNfUEhZUFdSX1BMTF9QV1JETgkoMSA8PCAxKQorI2RlZmluZSBTM0MyNDQzX1BIWVBXUl9GU1VTUEVORAkJKDEgPDwgMCkKKworI2RlZmluZSBTM0MyNDQzX1VDTEtDT05fREVURUNUX1ZCVVMJKDEgPDwgMzEpCisjZGVmaW5lIFMzQzI0NDNfVUNMS0NPTl9GVU5DX0NMS0VOCSgxIDw8IDIpCisjZGVmaW5lIFMzQzI0NDNfVUNMS0NPTl9UQ0xLRU4JCSgxIDw8IDApCisKICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxNi9tYWNoLXNtZGsyNDE2LmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTYvbWFjaC1zbWRrMjQxNi5jCmluZGV4IDNmODMxNzcuLmFjMjdlYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxNi9tYWNoLXNtZGsyNDE2LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDE2L21hY2gtc21kazI0MTYuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KQEAgLTM1LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbGNkLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLXMzYzI0NDMtY2xvY2suaD4KIAogI2luY2x1ZGUgPG1hY2gvaWRsZS5oPgogI2luY2x1ZGUgPG1hY2gvbGVkcy1ncGlvLmg+CkBAIC00Nyw2ICs0OSw3IEBACiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KICNpbmNsdWRlIDxwbGF0L25hbmQuaD4KICNpbmNsdWRlIDxwbGF0L3NkaGNpLmg+CisjaW5jbHVkZSA8cGxhdC91ZGMuaD4KIAogI2luY2x1ZGUgPHBsYXQvcmVncy1mYi12NC5oPgogI2luY2x1ZGUgPHBsYXQvZmIuaD4KQEAgLTEyMSw2ICsxMjQsMjcgQEAKIAl9CiB9OwogCit2b2lkIHNtZGsyNDE2X2hzdWRjX2dwaW9faW5pdCh2b2lkKQoreworCXMzY19ncGlvX3NldHB1bGwoUzNDMjQxMF9HUEgoMTQpLCBTM0NfR1BJT19QVUxMX1VQKTsKKwlzM2NfZ3Bpb19zZXRwdWxsKFMzQzI0MTBfR1BGKDIpLCBTM0NfR1BJT19QVUxMX05PTkUpOworCXMzY19ncGlvX2NmZ3BpbihTM0MyNDEwX0dQSCgxNCksIFMzQ19HUElPX1NGTigxKSk7CisJczNjMjQxMF9tb2RpZnlfbWlzY2NyKFMzQzI0MTZfTUlTQ0NSX1NFTF9TVVNQTkQsIDApOworfQorCit2b2lkIHNtZGsyNDE2X2hzdWRjX2dwaW9fdW5pbml0KHZvaWQpCit7CisJczNjMjQxMF9tb2RpZnlfbWlzY2NyKFMzQzI0MTZfTUlTQ0NSX1NFTF9TVVNQTkQsIDEpOworCXMzY19ncGlvX3NldHB1bGwoUzNDMjQxMF9HUEgoMTQpLCBTM0NfR1BJT19QVUxMX05PTkUpOworCXMzY19ncGlvX2NmZ3BpbihTM0MyNDEwX0dQSCgxNCksIFMzQ19HUElPX1NGTigwKSk7Cit9CisKK3N0cnVjdCBzM2MyNHh4X2hzdWRjX3BsYXRkYXRhIHNtZGsyNDE2X2hzdWRjX3BsYXRkYXRhID0geworCS5lcG51bSA9IDksCisJLmdwaW9faW5pdCA9IHNtZGsyNDE2X2hzdWRjX2dwaW9faW5pdCwKKwkuZ3Bpb191bmluaXQgPSBzbWRrMjQxNl9oc3VkY19ncGlvX3VuaW5pdCwKK307CisKIHN0cnVjdCBzM2NfZmJfcGRfd2luIHNtZGsyNDE2X2ZiX3dpbltdID0gewogCVswXSA9IHsKIAkJLyogdGhpbmsgdGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgc21kazY0MTAgKi8KQEAgLTE4Niw2ICsyMTAsNyBAQAogCSZzM2NfZGV2aWNlX2kyYzAsCiAJJnMzY19kZXZpY2VfaHNtbWMwLAogCSZzM2NfZGV2aWNlX2hzbW1jMSwKKwkmczNjX2RldmljZV91c2JfaHN1ZGMsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgc21kazI0MTZfbWFwX2lvKHZvaWQpCkBAIC0yMDMsNiArMjI4LDggQEAKIAlzM2Nfc2RoY2kwX3NldF9wbGF0ZGF0YSgmc21kazI0MTZfaHNtbWMwX3BkYXRhKTsKIAlzM2Nfc2RoY2kxX3NldF9wbGF0ZGF0YSgmc21kazI0MTZfaHNtbWMxX3BkYXRhKTsKIAorCXMzYzI0eHhfaHN1ZGNfc2V0X3BsYXRkYXRhKCZzbWRrMjQxNl9oc3VkY19wbGF0ZGF0YSk7CisKIAlncGlvX3JlcXVlc3QoUzNDMjQxMF9HUEIoNCksICJVU0JIb3N0IFBvd2VyIik7CiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFMzQzI0MTBfR1BCKDQpLCAxKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9LY29uZmlnCmluZGV4IDNjZGVmZmMuLjVlYzE4NDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdGVncmEvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL0tjb25maWcKQEAgLTI3LDEyICsyNywxNCBAQAogCiBjb25maWcgTUFDSF9IQVJNT05ZCiAgICAgICAgYm9vbCAiSGFybW9ueSBib2FyZCIKKyAgICAgICBzZWxlY3QgTUFDSF9IQVNfU05EX1NPQ19URUdSQV9XTTg5MDMKICAgICAgICBoZWxwCiAgICAgICAgICBTdXBwb3J0IGZvciBuVmlkaWEgSGFybW9ueSBkZXZlbG9wbWVudCBwbGF0Zm9ybQogCiBjb25maWcgTUFDSF9LQUVOCiAgICAgICAgYm9vbCAiS2FlbiBib2FyZCIKICAgICAgICBzZWxlY3QgTUFDSF9TRUFCT0FSRAorICAgICAgIHNlbGVjdCBNQUNIX0hBU19TTkRfU09DX1RFR1JBX1dNODkwMwogICAgICAgIGhlbHAKICAgICAgICAgIFN1cHBvcnQgZm9yIHRoZSBLYWVuIHZlcnNpb24gb2YgU2VhYm9hcmQKIApAQCAtNDMsNiArNDUsNyBAQAogCiBjb25maWcgTUFDSF9TRUFCT0FSRAogICAgICAgIGJvb2wgIlNlYWJvYXJkIGJvYXJkIgorICAgICAgIHNlbGVjdCBNQUNIX0hBU19TTkRfU09DX1RFR1JBX1dNODkwMwogICAgICAgIGhlbHAKICAgICAgICAgIFN1cHBvcnQgZm9yIG5WaWRpYSBTZWFib2FyZCBkZXZlbG9wbWVudCBwbGF0Zm9ybS4gSXQgd2lsbAogCSBhbHNvIGJlIGluY2x1ZGVkIGZvciBzb21lIG9mIHRoZSBkZXJpdmF0aXZlIGJvYXJkcyB0aGF0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2JvYXJkLWhhcm1vbnkuYyBiL2FyY2gvYXJtL21hY2gtdGVncmEvYm9hcmQtaGFybW9ueS5jCmluZGV4IDc1YzkxOGEuLjMwZTE4YmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdGVncmEvYm9hcmQtaGFybW9ueS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvYm9hcmQtaGFybW9ueS5jCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogCi0jaW5jbHVkZSA8bWFjaC9oYXJtb255X2F1ZGlvLmg+CisjaW5jbHVkZSA8bWFjaC90ZWdyYV93bTg5MDNfcGRhdGEuaD4KICNpbmNsdWRlIDxtYWNoL2lvbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAjaW5jbHVkZSA8bWFjaC9zZGhjaS5oPgpAQCAtNjcsMTUgKzY3LDE2IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGFybW9ueV9hdWRpb19wbGF0Zm9ybV9kYXRhIGhhcm1vbnlfYXVkaW9fcGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHRlZ3JhX3dtODkwM19wbGF0Zm9ybV9kYXRhIGhhcm1vbnlfYXVkaW9fcGRhdGEgPSB7CiAJLmdwaW9fc3Brcl9lbgkJPSBURUdSQV9HUElPX1NQS1JfRU4sCiAJLmdwaW9faHBfZGV0CQk9IFRFR1JBX0dQSU9fSFBfREVULAorCS5ncGlvX2hwX211dGUJCT0gLTEsCiAJLmdwaW9faW50X21pY19lbgk9IFRFR1JBX0dQSU9fSU5UX01JQ19FTiwKIAkuZ3Bpb19leHRfbWljX2VuCT0gVEVHUkFfR1BJT19FWFRfTUlDX0VOLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaGFybW9ueV9hdWRpb19kZXZpY2UgPSB7Ci0JLm5hbWUJPSAidGVncmEtc25kLWhhcm1vbnkiLAorCS5uYW1lCT0gInRlZ3JhLXNuZC13bTg5MDMiLAogCS5pZAk9IDAsCiAJLmRldgk9IHsKIAkJLnBsYXRmb3JtX2RhdGEgID0gJmhhcm1vbnlfYXVkaW9fcGRhdGEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9oYXJtb255X2F1ZGlvLmggYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC90ZWdyYV93bTg5MDNfcGRhdGEuaApzaW1pbGFyaXR5IGluZGV4IDgzJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9oYXJtb255X2F1ZGlvLmgKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL3RlZ3JhX3dtODkwM19wZGF0YS5oCmluZGV4IGFmMDg2NTAuLjlkMjkzMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2hhcm1vbnlfYXVkaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC90ZWdyYV93bTg5MDNfcGRhdGEuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBhcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9oYXJtb255X2F1ZGlvLmgKKyAqIGFyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL3RlZ3JhX3dtODkwM19wZGF0YS5oCiAgKgogICogQ29weXJpZ2h0IDIwMTEgTlZJRElBLCBJbmMuCiAgKgpAQCAtMTQsOSArMTQsMTAgQEAKICAqCiAgKi8KIAotc3RydWN0IGhhcm1vbnlfYXVkaW9fcGxhdGZvcm1fZGF0YSB7CitzdHJ1Y3QgdGVncmFfd204OTAzX3BsYXRmb3JtX2RhdGEgewogCWludCBncGlvX3Nwa3JfZW47CiAJaW50IGdwaW9faHBfZGV0OworCWludCBncGlvX2hwX211dGU7CiAJaW50IGdwaW9faW50X21pY19lbjsKIAlpbnQgZ3Bpb19leHRfbWljX2VuOwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvdGVncmEyX2Nsb2Nrcy5jIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS90ZWdyYTJfY2xvY2tzLmMKaW5kZXggNDQ1OTQ3MC4uYmI2MTgwNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC10ZWdyYS90ZWdyYTJfY2xvY2tzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS90ZWdyYTJfY2xvY2tzLmMKQEAgLTMzNyw3ICszMzcsNyBAQAogCWNvbnN0IHN0cnVjdCBjbGtfbXV4X3NlbCAqc2VsOwogCWludCBzaGlmdDsKIAotCXZhbCA9IGNsa19yZWFkbChjLT5yZWcgKyBTVVBFUl9DTEtfTVVYKTs7CisJdmFsID0gY2xrX3JlYWRsKGMtPnJlZyArIFNVUEVSX0NMS19NVVgpOwogCUJVR19PTigoKHZhbCAmIFNVUEVSX1NUQVRFX01BU0spICE9IFNVUEVSX1NUQVRFX1JVTikgJiYKIAkJKCh2YWwgJiBTVVBFUl9TVEFURV9NQVNLKSAhPSBTVVBFUl9TVEFURV9JRExFKSk7CiAJc2hpZnQgPSAoKHZhbCAmIFNVUEVSX1NUQVRFX01BU0spID09IFNVUEVSX1NUQVRFX0lETEUpID8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvbWJveC1kYjU1MDAuYyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvbWJveC1kYjU1MDAuYwppbmRleCBhNGZmYjlmLi4yYjJkNTFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL21ib3gtZGI1NTAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9tYm94LWRiNTUwMC5jCkBAIC00MTYsOCArNDE2LDcgQEAKIAlkZXZfZGJnKCYobWJveC0+cGRldi0+ZGV2KSwKIAkJIlJlc291cmNlIG5hbWU6ICVzIHN0YXJ0OiAweCVYLCBlbmQ6IDB4JVhcbiIsCiAJCXJlc291cmNlLT5uYW1lLCByZXNvdXJjZS0+c3RhcnQsIHJlc291cmNlLT5lbmQpOwotCW1ib3gtPnZpcnRiYXNlX3BlZXIgPQotCQlpb3JlbWFwKHJlc291cmNlLT5zdGFydCwgcmVzb3VyY2UtPmVuZCAtIHJlc291cmNlLT5zdGFydCk7CisJbWJveC0+dmlydGJhc2VfcGVlciA9IGlvcmVtYXAocmVzb3VyY2UtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlc291cmNlKSk7CiAJaWYgKCFtYm94LT52aXJ0YmFzZV9wZWVyKSB7CiAJCWRldl9lcnIoJihtYm94LT5wZGV2LT5kZXYpLCAiVW5hYmxlIHRvIGlvcmVtYXAgcGVlciBtYm94XG4iKTsKIAkJbWJveCA9IE5VTEw7CkBAIC00NDAsOCArNDM5LDcgQEAKIAlkZXZfZGJnKCYobWJveC0+cGRldi0+ZGV2KSwKIAkJIlJlc291cmNlIG5hbWU6ICVzIHN0YXJ0OiAweCVYLCBlbmQ6IDB4JVhcbiIsCiAJCXJlc291cmNlLT5uYW1lLCByZXNvdXJjZS0+c3RhcnQsIHJlc291cmNlLT5lbmQpOwotCW1ib3gtPnZpcnRiYXNlX2xvY2FsID0KLQkJaW9yZW1hcChyZXNvdXJjZS0+c3RhcnQsIHJlc291cmNlLT5lbmQgLSByZXNvdXJjZS0+c3RhcnQpOworCW1ib3gtPnZpcnRiYXNlX2xvY2FsID0gaW9yZW1hcChyZXNvdXJjZS0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzb3VyY2UpKTsKIAlpZiAoIW1ib3gtPnZpcnRiYXNlX2xvY2FsKSB7CiAJCWRldl9lcnIoJihtYm94LT5wZGV2LT5kZXYpLCAiVW5hYmxlIHRvIGlvcmVtYXAgbG9jYWwgbWJveFxuIik7CiAJCW1ib3ggPSBOVUxMOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1pb3AvdGltZS5jIGIvYXJjaC9hcm0vcGxhdC1pb3AvdGltZS5jCmluZGV4IDA3ZjIzYmIuLjdjZGM1MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtaW9wL3RpbWUuYworKysgYi9hcmNoL2FybS9wbGF0LWlvcC90aW1lLmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9jcHVmcmVxLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9jcHVmcmVxLmMKaW5kZXggNDI2OGEyYi4uNzRhYWM5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvY3B1ZnJlcS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2NwdWZyZXEuYwpAQCAtMTUzLDggKzE1Myw4IEBACiAJcmV0ID0gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfY3B1aW5mbyhwb2xpY3ksIGlteF9mcmVxX3RhYmxlKTsKIAogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWdpc3RlciBpLk1YQyBDUFVmcmVxIFwKLQkJCQl3aXRoIGVycm9yIGNvZGUgJWRcbiIsIF9fZnVuY19fLCByZXQpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgaS5NWEMgQ1BVZnJlcSB3aXRoIGVycm9yIGNvZGUgJWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgcmV0KTsKIAkJZ290byBlcnI7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZGV2cy5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RldnMuYwppbmRleCAyNjhmM2VkLi43MzY2Nzk5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZGV2cy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kZXZzLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgpAQCAtMjMzLDYgKzIzNCw0NiBAQAogCX0KIH0KIAorLyogVVNCIEhpZ2ggU3BlZWQgMi4wIERldmljZSAoR2FkZ2V0KSAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2NfaHN1ZGNfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IFMzQzI0MTZfUEFfSFNVREMsCisJCS5lbmQJPSBTM0MyNDE2X1BBX0hTVURDICsgUzNDMjQxNl9TWl9IU1VEQyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBJUlFfVVNCRCwKKwkJLmVuZAk9IElSUV9VU0JELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdGF0aWMgdTY0IHMzY19oc3VkY19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3VzYl9oc3VkYyA9IHsKKwkubmFtZQkJPSAiczNjLWhzdWRjIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHMzY19oc3VkY19yZXNvdXJjZSksCisJLnJlc291cmNlCT0gczNjX2hzdWRjX3Jlc291cmNlLAorCS5kZXYJCT0geworCQkuZG1hX21hc2sJCT0gJnMzY19oc3VkY19kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAorCX0sCit9OworCit2b2lkIF9faW5pdCBzM2MyNHh4X2hzdWRjX3NldF9wbGF0ZGF0YShzdHJ1Y3QgczNjMjR4eF9oc3VkY19wbGF0ZGF0YSAqcGQpCit7CisJc3RydWN0IHMzYzI0eHhfaHN1ZGNfcGxhdGRhdGEgKm5wZDsKKworCW5wZCA9IGttYWxsb2Moc2l6ZW9mKCpucGQpLCBHRlBfS0VSTkVMKTsKKwlpZiAobnBkKSB7CisJCW1lbWNweShucGQsIHBkLCBzaXplb2YoKm5wZCkpOworCQlzM2NfZGV2aWNlX3VzYl9oc3VkYy5kZXYucGxhdGZvcm1fZGF0YSA9IG5wZDsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIm5vIG1lbW9yeSBmb3IgdWRjIHBsYXRmb3JtIGRhdGFcbiIpOworCX0KK30KKwogLyogSUlTICovCiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjX2lpc19yZXNvdXJjZVtdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC91ZGMuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvdWRjLmgKaW5kZXggODA0NTdjNi4uZjYzODg0MjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvdWRjLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC91ZGMuaApAQCAtMzcsNCArMzcsMjEgQEAKIAogZXh0ZXJuIHZvaWQgX19pbml0IHMzYzI0eHhfdWRjX3NldF9wbGF0ZGF0YShzdHJ1Y3QgczNjMjQxMF91ZGNfbWFjaF9pbmZvICopOwogCisvKioKKyAqIHMzYzI0eHhfaHN1ZGNfcGxhdGRhdGEgLSBQbGF0Zm9ybSBkYXRhIGZvciBVU0IgSGlnaC1TcGVlZCBnYWRnZXQgY29udHJvbGxlci4KKyAqIEBlcG51bTogTnVtYmVyIG9mIGVuZHBvaW50cyB0byBiZSBpbnN0YW50aWF0ZWQgYnkgdGhlIGNvbnRyb2xsZXIgZHJpdmVyLgorICogQGdwaW9faW5pdDogUGxhdGZvcm0gc3BlY2lmaWMgVVNCIHJlbGF0ZWQgR1BJTyBpbml0aWFsaXphdGlvbi4KKyAqIEBncGlvX3VuaW5pdDogUGxhdGZvcm0gc3BlY2lmaWMgVVNCIHJlbGV0ZWQgR1BJTyB1bmluaXRpYWx6YXRpb24uCisgKgorICogUmVwcmVzZW50YXRpb24gb2YgcGxhdGZvcm0gZGF0YSBmb3IgdGhlIFMzQzI0WFggVVNCIDIuMCBIaWdoIFNwZWVkIGdhZGdldAorICogY29udHJvbGxlcnMuCisgKi8KK3N0cnVjdCBzM2MyNHh4X2hzdWRjX3BsYXRkYXRhIHsKKwl1bnNpZ25lZCBpbnQJZXBudW07CisJdm9pZAkJKCpncGlvX2luaXQpKHZvaWQpOworCXZvaWQJCSgqZ3Bpb191bmluaXQpKHZvaWQpOworfTsKKworZXh0ZXJuIHZvaWQgX19pbml0IHMzYzI0eHhfaHN1ZGNfc2V0X3BsYXRkYXRhKHN0cnVjdCBzM2MyNHh4X2hzdWRjX3BsYXRkYXRhICpwZCk7CisKICNlbmRpZiAvKiBfX0FTTV9BUk1fQVJDSF9VRENfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXAvS2NvbmZpZyBiL2FyY2gvYXJtL3BsYXQtczVwL0tjb25maWcKaW5kZXggODQ5MjI5Ny4uNjc1MWJjZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zNXAvS2NvbmZpZworKysgYi9hcmNoL2FybS9wbGF0LXM1cC9LY29uZmlnCkBAIC04NSw2ICs4NSwxMSBAQAogCWhlbHAKIAkgIENvbXBpbGUgaW4gcGxhdGZvcm0gZGV2aWNlIGRlZmluaXRpb25zIGZvciBNSVBJLUNTSVMgY2hhbm5lbCAxCiAKK2NvbmZpZyBTNVBfREVWX1VTQl9FSENJCisJYm9vbAorCWhlbHAKKwkgIENvbXBpbGUgaW4gcGxhdGZvcm0gZGV2aWNlIGRlZmluaXRpb24gZm9yIFVTQiBFSENJCisKIGNvbmZpZyBTNVBfU0VUVVBfTUlQSVBIWQogCWJvb2wKIAloZWxwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9NYWtlZmlsZSBiL2FyY2gvYXJtL3BsYXQtczVwL01ha2VmaWxlCmluZGV4IDQyYWZmZjcuLmUyMzRjYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczVwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwL01ha2VmaWxlCkBAIC0zMyw0ICszMyw1IEBACiBvYmotJChDT05GSUdfUzVQX0RFVl9PTkVOQU5EKQkrPSBkZXYtb25lbmFuZC5vCiBvYmotJChDT05GSUdfUzVQX0RFVl9DU0lTMCkJKz0gZGV2LWNzaXMwLm8KIG9iai0kKENPTkZJR19TNVBfREVWX0NTSVMxKQkrPSBkZXYtY3NpczEubworb2JqLSQoQ09ORklHX1M1UF9ERVZfVVNCX0VIQ0kpCSs9IGRldi1laGNpLm8KIG9iai0kKENPTkZJR19TNVBfU0VUVVBfTUlQSVBIWSkJKz0gc2V0dXAtbWlwaXBoeS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9kZXYtZWhjaS5jIGIvYXJjaC9hcm0vcGxhdC1zNXAvZGV2LWVoY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDA4MGZmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXAvZGV2LWVoY2kuYwpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uTHRkCisgKiBBdXRob3I6IEpvb255b3VuZyBTaGltIDxqeTA5MjIuc2hpbUBzYW1zdW5nLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9laGNpLmg+CisjaW5jbHVkZSA8cGxhdC91c2ItcGh5Lmg+CisKKy8qIFVTQiBFSENJIEhvc3QgQ29udHJvbGxlciByZWdpc3RyYXRpb24gKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczVwX2VoY2lfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IFM1UF9QQV9FSENJLAorCQkuZW5kCT0gUzVQX1BBX0VIQ0kgKyBTWl8yNTYgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX1VTQl9IT1NULAorCQkuZW5kCT0gSVJRX1VTQl9IT1NULAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdGF0aWMgdTY0IHM1cF9kZXZpY2VfZWhjaV9kbWFtYXNrID0gMHhmZmZmZmZmZlVMOworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cF9kZXZpY2VfZWhjaSA9IHsKKwkubmFtZQkJPSAiczVwLWVoY2kiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoczVwX2VoY2lfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQk9IHM1cF9laGNpX3Jlc291cmNlLAorCS5kZXYJCT0geworCQkuZG1hX21hc2sgPSAmczVwX2RldmljZV9laGNpX2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmZVTAorCX0KK307CisKK3ZvaWQgX19pbml0IHM1cF9laGNpX3NldF9wbGF0ZGF0YShzdHJ1Y3QgczVwX2VoY2lfcGxhdGRhdGEgKnBkKQoreworCXN0cnVjdCBzNXBfZWhjaV9wbGF0ZGF0YSAqbnBkOworCisJbnBkID0gczNjX3NldF9wbGF0ZGF0YShwZCwgc2l6ZW9mKHN0cnVjdCBzNXBfZWhjaV9wbGF0ZGF0YSksCisJCQkmczVwX2RldmljZV9laGNpKTsKKworCWlmICghbnBkLT5waHlfaW5pdCkKKwkJbnBkLT5waHlfaW5pdCA9IHM1cF91c2JfcGh5X2luaXQ7CisJaWYgKCFucGQtPnBoeV9leGl0KQorCQlucGQtPnBoeV9leGl0ID0gczVwX3VzYl9waHlfZXhpdDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9laGNpLmggYi9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvZWhjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZTY4MTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvZWhjaS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby5MdGQKKyAqIEF1dGhvcjogSm9vbnlvdW5nIFNoaW0gPGp5MDkyMi5zaGltQHNhbXN1bmcuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX1BMQVRfUzVQX0VIQ0lfSAorI2RlZmluZSBfX1BMQVRfUzVQX0VIQ0lfSAorCitzdHJ1Y3QgczVwX2VoY2lfcGxhdGRhdGEgeworCWludCAoKnBoeV9pbml0KShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgdHlwZSk7CisJaW50ICgqcGh5X2V4aXQpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCB0eXBlKTsKK307CisKK2V4dGVybiB2b2lkIHM1cF9laGNpX3NldF9wbGF0ZGF0YShzdHJ1Y3QgczVwX2VoY2lfcGxhdGRhdGEgKnBkKTsKKworI2VuZGlmIC8qIF9fUExBVF9TNVBfRUhDSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvbWFwLXM1cC5oIGIvYXJjaC9hcm0vcGxhdC1zNXAvaW5jbHVkZS9wbGF0L21hcC1zNXAuaAppbmRleCBkOTczZDM5Li5hNmMzZDMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvbWFwLXM1cC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9tYXAtczVwLmgKQEAgLTM5LDcgKzM5LDcgQEAKICNkZWZpbmUgUzVQX1ZBX1RXRAkJUzVQX1ZBX0NPUkVQRVJJKDB4NjAwKQogI2RlZmluZSBTNVBfVkFfR0lDX0RJU1QJCVM1UF9WQV9DT1JFUEVSSSgweDEwMDApCiAKLSNkZWZpbmUgUzNDX1ZBX1VTQl9IU1BIWQlTM0NfQUREUigweDAyOTAwMDAwKQorI2RlZmluZSBTNVBfVkFfVVNCX0hTUEhZCVMzQ19BRERSKDB4MDI5MDAwMDApCiAKICNkZWZpbmUgVkFfVklDKHgpCQkoUzNDX1ZBX0lSUSArICgoeCkgKiAweDEwMDAwKSkKICNkZWZpbmUgVkFfVklDMAkJCVZBX1ZJQygwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXAvaW5jbHVkZS9wbGF0L3VzYi1waHkuaCBiL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC91c2ItcGh5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRkNmJjZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC91c2ItcGh5LmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLkx0ZAorICogQXV0aG9yOiBKb29ueW91bmcgU2hpbSA8ankwOTIyLnNoaW1Ac2Ftc3VuZy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9fUExBVF9TNVBfVVNCX1BIWV9ICisjZGVmaW5lIF9fUExBVF9TNVBfVVNCX1BIWV9ICisKK2VudW0gczVwX3VzYl9waHlfdHlwZSB7CisJUzVQX1VTQl9QSFlfREVWSUNFLAorCVM1UF9VU0JfUEhZX0hPU1QsCit9OworCitleHRlcm4gaW50IHM1cF91c2JfcGh5X2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IHR5cGUpOworZXh0ZXJuIGludCBzNXBfdXNiX3BoeV9leGl0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCB0eXBlKTsKKworI2VuZGlmIC8qIF9fUExBVF9TNVBfUkVHU19VU0JfUEhZX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvZGV2cy5oIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9kZXZzLmgKaW5kZXggZjBkYTZiNy4uMzk4MThkOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9kZXZzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9kZXZzLmgKQEAgLTg4LDYgKzg4LDcgQEAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cF9kZXZpY2Vfb25lbmFuZDsKIAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV91c2JnYWRnZXQ7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3VzYl9oc3VkYzsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfdXNiX2hzb3RnOwogCiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXB2MjEwX2RldmljZV9hYzk3OwpAQCAtMTQyLDYgKzE0Myw4IEBACiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXBfZGV2aWNlX21pcGlfY3NpczA7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXBfZGV2aWNlX21pcGlfY3NpczE7CiAKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cF9kZXZpY2VfZWhjaTsKKwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXh5bm9zNF9kZXZpY2Vfc3lzbW11OwogCiAvKiBzM2MyNDQwIHNwZWNpZmljIGRldmljZXMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWZzL01ha2VmaWxlIGIvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtZnMvTWFrZWZpbGUKaW5kZXggNGZmNDA3YS4uNDFmYTZhNiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtZnMvTWFrZWZpbGUKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtZnMvTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBACiAjCiAKIG9iai15ICAgOj0gZG1hLm8gcGlubXV4Lm8gaW8ubyBhcmJpdGVyLm8KLWJqLSQoQ09ORklHX0VUUkFYX1ZDU19TSU0pICs9IHZjc19ob29rLm8KK29iai0kKENPTkZJR19FVFJBWF9WQ1NfU0lNKSArPSB2Y3NfaG9vay5vCiBvYmotJChDT05GSUdfQ1BVX0ZSRVEpICAgKz0gY3B1ZnJlcS5vCiAKIGNsZWFuOgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2hwL2NvbW1vbi9zYmFfaW9tbXUuYyBiL2FyY2gvaWE2NC9ocC9jb21tb24vc2JhX2lvbW11LmMKaW5kZXggNGNlOGQxMy4uODAyNDFmZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2hwL2NvbW1vbi9zYmFfaW9tbXUuYworKysgYi9hcmNoL2lhNjQvaHAvY29tbW9uL3NiYV9pb21tdS5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvY3Jhc2hfZHVtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvbW11LWhlbHBlci5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgkJLyogaWE2NF9nZXRfaXRjKCkgKi8KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTEwNjMsNyArMTA2NCw3IEBACiAJCS8qCiAJCSoqIEFkZHJlc3MgZG9lcyBub3QgZmFsbCB3L2luIElPVkEsIG11c3QgYmUgYnlwYXNzaW5nCiAJCSovCi0JCURCR19CWVBBU1MoInNiYV91bm1hcF9zaW5nbGVfYXR0dHJzKCkgYnlwYXNzIGFkZHI6IDB4JWx4XG4iLAorCQlEQkdfQllQQVNTKCJzYmFfdW5tYXBfc2luZ2xlX2F0dHJzKCkgYnlwYXNzIGFkZHI6IDB4JWx4XG4iLAogCQkJICAgaW92YSk7CiAKICNpZmRlZiBFTkFCTEVfTUFSS19DTEVBTgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9pYTY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDc4N2RlNGEuLjUzYzBiYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2lhNjQva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTIwOSw2ICsyMDksNyBAQAogCWRhdGEgOiB7CiAJfSA6ZGF0YQogCS5kYXRhIDogQVQoQUREUiguZGF0YSkgLSBMT0FEX09GRlNFVCkgeworCQlfc2RhdGEgID0gIC47CiAJCUlOSVRfVEFTS19EQVRBKFBBR0VfU0laRSkKIAkJQ0FDSEVMSU5FX0FMSUdORURfREFUQShTTVBfQ0FDSEVfQllURVMpCiAJCVJFQURfTU9TVExZX0RBVEEoU01QX0NBQ0hFX0JZVEVTKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS92dGkuaCBiL2FyY2gvaWE2NC9rdm0vdnRpLmgKaW5kZXggZjZjNTYxNy4uYjIxNGI1YiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS92dGkuaAorKysgYi9hcmNoL2lhNjQva3ZtL3Z0aS5oCkBAIC04MywxMyArODMsMTMgQEAKIHVuaW9uIHZhYyB7CiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKIAlzdHJ1Y3QgewotCQlpbnQgYV9pbnQ6MTsKLQkJaW50IGFfZnJvbV9pbnRfY3I6MTsKLQkJaW50IGFfdG9faW50X2NyOjE7Ci0JCWludCBhX2Zyb21fcHNyOjE7Ci0JCWludCBhX2Zyb21fY3B1aWQ6MTsKLQkJaW50IGFfY292ZXI6MTsKLQkJaW50IGFfYnN3OjE7CisJCXVuc2lnbmVkIGludCBhX2ludDoxOworCQl1bnNpZ25lZCBpbnQgYV9mcm9tX2ludF9jcjoxOworCQl1bnNpZ25lZCBpbnQgYV90b19pbnRfY3I6MTsKKwkJdW5zaWduZWQgaW50IGFfZnJvbV9wc3I6MTsKKwkJdW5zaWduZWQgaW50IGFfZnJvbV9jcHVpZDoxOworCQl1bnNpZ25lZCBpbnQgYV9jb3ZlcjoxOworCQl1bnNpZ25lZCBpbnQgYV9ic3c6MTsKIAkJbG9uZyByZXNlcnZlZDo1NzsKIAl9OwogfTsKQEAgLTk3LDEyICs5NywxMiBAQAogdW5pb24gdmRjIHsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwogCXN0cnVjdCB7Ci0JCWludCBkX3Ztc3c6MTsKLQkJaW50IGRfZXh0aW50OjE7Ci0JCWludCBkX2licl9kYnI6MTsKLQkJaW50IGRfcG1jOjE7Ci0JCWludCBkX3RvX3BtZDoxOwotCQlpbnQgZF9pdG06MTsKKwkJdW5zaWduZWQgaW50IGRfdm1zdzoxOworCQl1bnNpZ25lZCBpbnQgZF9leHRpbnQ6MTsKKwkJdW5zaWduZWQgaW50IGRfaWJyX2RicjoxOworCQl1bnNpZ25lZCBpbnQgZF9wbWM6MTsKKwkJdW5zaWduZWQgaW50IGRfdG9fcG1kOjE7CisJCXVuc2lnbmVkIGludCBkX2l0bToxOwogCQlsb25nIHJlc2VydmVkOjU4OwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L21tL2ZhdWx0LmMgYi9hcmNoL2lhNjQvbW0vZmF1bHQuYwppbmRleCAwNzk5ZmVhLi4yMGIzNTkzIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbW0vZmF1bHQuYworKysgYi9hcmNoL2lhNjQvbW0vZmF1bHQuYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvb3Byb2ZpbGUvYmFja3RyYWNlLmMgYi9hcmNoL2lhNjQvb3Byb2ZpbGUvYmFja3RyYWNlLmMKaW5kZXggNWNkZDdlNC4uZjdiNzk4OSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L29wcm9maWxlL2JhY2t0cmFjZS5jCisrKyBiL2FyY2gvaWE2NC9vcHJvZmlsZS9iYWNrdHJhY2UuYwpAQCAtMjksNyArMjksNyBAQAogCXVuc2lnbmVkIGludCBkZXB0aDsKIAlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKIAlzdHJ1Y3QgdW53X2ZyYW1lX2luZm8gZnJhbWU7Ci0JdTY0ICpwcmV2X3Bmc19sb2M7CS8qIHN0YXRlIGZvciBXQVIgZm9yIG9sZCBzcGlubG9jayBvb2wgY29kZSAqLworCXVuc2lnbmVkIGxvbmcgKnByZXZfcGZzX2xvYzsJLyogc3RhdGUgZm9yIFdBUiBmb3Igb2xkIHNwaW5sb2NrIG9vbCBjb2RlICovCiB9IGlhNjRfYmFja3RyYWNlX3Q7CiAKIC8qIFJldHVybnMgbm9uLXplcm8gaWYgdGhlIFBDIGlzIGluIHRoZSBJbnRlcnJ1cHQgVmVjdG9yIFRhYmxlICovCmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL20zMnIva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggYzE5NGQ2NC4uY2Y5NWFlYyAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNDQsNiArNDQsNyBAQAogICBFWENFUFRJT05fVEFCTEUoMTYpCiAgIE5PVEVTCiAKKyAgX3NkYXRhID0gLjsJCQkvKiBTdGFydCBvZiBkYXRhIHNlY3Rpb24gKi8KICAgUk9EQVRBCiAgIFJXX0RBVEFfU0VDVElPTigzMiwgUEFHRV9TSVpFLCBUSFJFQURfU0laRSkKICAgX2VkYXRhID0gLjsJCQkvKiBFbmQgb2YgZGF0YSBzZWN0aW9uICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vTUM2OEVaMzI4LmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vTUM2OEVaMzI4LmgKaW5kZXggNjliN2Y5MS4uZDFiZGU1OCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL01DNjhFWjMyOC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9NQzY4RVozMjguaApAQCAtMTA0Nyw3ICsxMDQ3LDcgQEAKIAogI2RlZmluZSBXQVRDSERPR19FTgkweDAwMDEJLyogV2F0Y2hkb2cgRW5hYmxlZCAqLwogI2RlZmluZSBXQVRDSERPR19JU0VMCTB4MDAwMgkvKiBTZWxlY3QgdGhlIHdhdGNoZG9nIGludGVycnVwdCAqLwotI2RlZmluZSBXQVRDSERPR19JTlRGCTB4MDA4MAkvKiBXYXRjaGRvZyBpbnRlcnJ1cHQgb2NjY3VyZWQgKi8KKyNkZWZpbmUgV0FUQ0hET0dfSU5URgkweDAwODAJLyogV2F0Y2hkb2cgaW50ZXJydXB0IG9jY3VycmVkICovCiAjZGVmaW5lIFdBVENIRE9HX0NOVF9NQVNLICAweDAzMDAJLyogV2F0Y2hkb2cgQ291bnRlciAqLwogI2RlZmluZSBXQVRDSERPR19DTlRfU0hJRlQgOAogCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vTUM2OFZaMzI4LmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vTUM2OFZaMzI4LmgKaW5kZXggMmI5YmY2Mi4uNmJkMWJmMSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL01DNjhWWjMyOC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9NQzY4VlozMjguaApAQCAtMTE0Myw3ICsxMTQzLDcgQEAKIAogI2RlZmluZSBXQVRDSERPR19FTgkweDAwMDEJLyogV2F0Y2hkb2cgRW5hYmxlZCAqLwogI2RlZmluZSBXQVRDSERPR19JU0VMCTB4MDAwMgkvKiBTZWxlY3QgdGhlIHdhdGNoZG9nIGludGVycnVwdCAqLwotI2RlZmluZSBXQVRDSERPR19JTlRGCTB4MDA4MAkvKiBXYXRjaGRvZyBpbnRlcnJ1cHQgb2NjY3VyZWQgKi8KKyNkZWZpbmUgV0FUQ0hET0dfSU5URgkweDAwODAJLyogV2F0Y2hkb2cgaW50ZXJydXB0IG9jY3VycmVkICovCiAjZGVmaW5lIFdBVENIRE9HX0NOVF9NQVNLICAweDAzMDAJLyogV2F0Y2hkb2cgQ291bnRlciAqLwogI2RlZmluZSBXQVRDSERPR19DTlRfU0hJRlQgOAogCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3ZtbGludXgtc3RkLmxkcyBiL2FyY2gvbTY4ay9rZXJuZWwvdm1saW51eC1zdGQubGRzCmluZGV4IDg3OGJlNWYuLmQwOTkzNTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvdm1saW51eC1zdGQubGRzCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvdm1saW51eC1zdGQubGRzCkBAIC0yNSw2ICsyNSw4IEBACiAKICAgRVhDRVBUSU9OX1RBQkxFKDE2KQogCisgIF9zZGF0YSA9IC47CQkJLyogU3RhcnQgb2YgZGF0YSBzZWN0aW9uICovCisKICAgUk9EQVRBCiAKICAgUldfREFUQV9TRUNUSU9OKDE2LCBQQUdFX1NJWkUsIFRIUkVBRF9TSVpFKQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC92bWxpbnV4LXN1bjMubGRzIGIvYXJjaC9tNjhrL2tlcm5lbC92bWxpbnV4LXN1bjMubGRzCmluZGV4IDFhZDZiN2EuLjgwODA0NjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvdm1saW51eC1zdW4zLmxkcworKysgYi9hcmNoL202OGsva2VybmVsL3ZtbGludXgtc3VuMy5sZHMKQEAgLTI1LDYgKzI1LDcgQEAKICAgX2V0ZXh0ID0gLjsJCQkvKiBFbmQgb2YgdGV4dCBzZWN0aW9uICovCiAKICAgRVhDRVBUSU9OX1RBQkxFKDE2KSA6ZGF0YQorICBfc2RhdGEgPSAuOwkJCS8qIFN0YXJ0IG9mIHJ3IGRhdGEgc2VjdGlvbiAqLwogICBSV19EQVRBX1NFQ1RJT04oMTYsIFBBR0VfU0laRSwgVEhSRUFEX1NJWkUpIDpkYXRhCiAgIC8qIEVuZCBvZiBkYXRhIGdvZXMgKmhlcmUqIHNvIHRoYXQgZnJlZWluZyBpbml0IGNvZGUgd29ya3MgcHJvcGVybHkuICovCiAgIF9lZGF0YSA9IC47CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXRoNzkvS2NvbmZpZyBiL2FyY2gvbWlwcy9hdGg3OS9LY29uZmlnCmluZGV4IGIwNTgyODIuLjQ3NzA3NDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hdGg3OS9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9hdGg3OS9LY29uZmlnCkBAIC0yNiwxMiArMjYsMTcgQEAKIGVuZG1lbnUKIAogY29uZmlnIFNPQ19BUjcxWFgKKwlzZWxlY3QgVVNCX0FSQ0hfSEFTX0VIQ0kKKwlzZWxlY3QgVVNCX0FSQ0hfSEFTX09IQ0kKIAlkZWZfYm9vbCBuCiAKIGNvbmZpZyBTT0NfQVI3MjRYCisJc2VsZWN0IFVTQl9BUkNIX0hBU19FSENJCisJc2VsZWN0IFVTQl9BUkNIX0hBU19PSENJCiAJZGVmX2Jvb2wgbgogCiBjb25maWcgU09DX0FSOTEzWAorCXNlbGVjdCBVU0JfQVJDSF9IQVNfRUhDSQogCWRlZl9ib29sIG4KIAogY29uZmlnIEFUSDc5X0RFVl9BUjkxM1hfV01BQwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Z3L2FyYy9jbWRsaW5lLmMgYi9hcmNoL21pcHMvZncvYXJjL2NtZGxpbmUuYwppbmRleCA1Yzg2MDNjOC4uOWZkZjA3ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Z3L2FyYy9jbWRsaW5lLmMKKysrIGIvYXJjaC9taXBzL2Z3L2FyYy9jbWRsaW5lLmMKQEAgLTUsNyArNSw3IEBACiAgKgogICogY21kbGluZS5jOiBLZXJuZWwgY29tbWFuZCBsaW5lIGNyZWF0aW9uIHVzaW5nIEFSQ1MgYXJnYy9hcmd2LgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRtQGVuZ3Iuc2dpLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZncvYXJjL2Vudi5jIGIvYXJjaC9taXBzL2Z3L2FyYy9lbnYuYwppbmRleCA2ZjVkZDQyLi4xMTE4YTI2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZncvYXJjL2Vudi5jCisrKyBiL2FyY2gvbWlwcy9mdy9hcmMvZW52LmMKQEAgLTUsNyArNSw3IEBACiAgKgogICogZW52LmM6IEFSQ1MgZW52aXJvbm1lbnQgdmFyaWFibGUgcm91dGluZXMuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZG1AZW5nci5zZ2kuY29tKQorICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9mdy9hcmMvaWRlbnRpZnkuYyBiL2FyY2gvbWlwcy9mdy9hcmMvaWRlbnRpZnkuYwppbmRleCAwY2U5YWNmLi43ODgwNjBhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZncvYXJjL2lkZW50aWZ5LmMKKysrIGIvYXJjaC9taXBzL2Z3L2FyYy9pZGVudGlmeS5jCkBAIC05LDcgKzksNyBAQAogICoKICAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBhcmNoL21pcHMvc2dpL2tlcm5lbC9zeXN0ZW0uYywgd2hpY2ggaXMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkbUBlbmdyLnNnaS5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Z3L2FyYy9pbml0LmMgYi9hcmNoL21pcHMvZncvYXJjL2luaXQuYwppbmRleCAzYWQ4Nzg4Li42MjliMjRkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZncvYXJjL2luaXQuYworKysgYi9hcmNoL21pcHMvZncvYXJjL2luaXQuYwpAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBQUk9NIGxpYnJhcnkgaW5pdGlhbGlzYXRpb24gY29kZS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkbUBlbmdyLnNnaS5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Z3L2FyYy9taXNjLmMgYi9hcmNoL21pcHMvZncvYXJjL21pc2MuYwppbmRleCBlNTI3YzVmLi4yOTYyN2ZiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZncvYXJjL21pc2MuYworKysgYi9hcmNoL21pcHMvZncvYXJjL21pc2MuYwpAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBNaXNjZWxsYW5lb3VzIEFSQ1MgUFJPTSByb3V0aW5lcy4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkbUBlbmdyLnNnaS5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQogICogQ29weXJpZ2h0IChDKSAxOTk5IFJhbGYgQmFlY2hsZSAocmFsZkBnbnUub3JnKQogICogQ29weXJpZ2h0IChDKSAxOTk5IFNpbGljb24gR3JhcGhpY3MsIEluYy4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Z3L2FyYy9zYWxvbmUuYyBiL2FyY2gvbWlwcy9mdy9hcmMvc2Fsb25lLmMKaW5kZXggZTZhZmI2NC4uOWI1Njg5NSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Z3L2FyYy9zYWxvbmUuYworKysgYi9hcmNoL21pcHMvZncvYXJjL3NhbG9uZS5jCkBAIC0yLDcgKzIsNyBAQAogICogUm91dGluZXMgdG8gbG9hZCBpbnRvIG1lbW9yeSBhbmQgZXhlY3V0ZSBzdGFuZC1hbG9uZyBwcm9ncmFtIGltYWdlcyB1c2luZwogICogQVJDUyBQUk9NIGZpcm13YXJlLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRtQGVuZ3Iuc2dpLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL3NnaWFsaWIuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9mdy9hcmMvdGltZS5jIGIvYXJjaC9taXBzL2Z3L2FyYy90aW1lLmMKaW5kZXggNDIxMzhjOC4uMTkwY2RiNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Z3L2FyYy90aW1lLmMKKysrIGIvYXJjaC9taXBzL2Z3L2FyYy90aW1lLmMKQEAgLTUsNyArNSw3IEBACiAgKgogICogRXh0cmFjdGluZyB0aW1lIGluZm9ybWF0aW9uIGZyb20gQVJDUyBwcm9tLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRtQGVuZ3Iuc2dpLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9mdy9hcmMvdHJlZS5jIGIvYXJjaC9taXBzL2Z3L2FyYy90cmVlLmMKaW5kZXggZDY4ZTVhNS4uOTI0YTM3ZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Z3L2FyYy90cmVlLmMKKysrIGIvYXJjaC9taXBzL2Z3L2FyYy90cmVlLmMKQEAgLTUsNyArNSw3IEBACiAgKgogICogUFJPTSBjb21wb25lbnQgZGV2aWNlIHRyZWUgY29kZS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkbUBlbmdyLnNnaS5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQogICogQ29weXJpZ2h0IChDKSAxOTk5IFJhbGYgQmFlY2hsZSAocmFsZkBnbnUub3JnKQogICogQ29weXJpZ2h0IChDKSAxOTk5IFNpbGljb24gR3JhcGhpY3MsIEluYy4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2FzbW1hY3JvLTMyLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vYXNtbWFjcm8tMzIuaAppbmRleCA1ZGUzOTYzZi4uMjQxM2FmZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2FzbW1hY3JvLTMyLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2FzbW1hY3JvLTMyLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogYXNtbWFjcm8uaDogQXNzZW1ibGVyIG1hY3JvcyB0byBtYWtlIHRoaW5ncyBlYXNpZXIgdG8gcmVhZC4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkbUBlbmdyLnNnaS5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQogICogQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAzIFJhbGYgQmFlY2hsZQogICovCiAjaWZuZGVmIF9BU01fQVNNTUFDUk9fMzJfSApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2FzbW1hY3JvLTY0LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vYXNtbWFjcm8tNjQuaAppbmRleCAyMjVmZWVmLi4wOGE1MjdkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vYXNtbWFjcm8tNjQuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vYXNtbWFjcm8tNjQuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBhc21tYWNyby5oOiBBc3NlbWJsZXIgbWFjcm9zIHRvIG1ha2UgdGhpbmdzIGVhc2llciB0byByZWFkLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRtQGVuZ3Iuc2dpLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTkgUmFsZiBCYWVjaGxlCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgU2lsaWNvbiBHcmFwaGljcywgSW5jLgogICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LmgKaW5kZXggMzRjMGQzYy4uNWY5NWE0YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NwdS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jcHUuaApAQCAtMiw3ICsyLDcgQEAKICAqIGNwdS5oOiBWYWx1ZXMgb2YgdGhlIFBSSWQgcmVnaXN0ZXIgdXNlZCB0byBtYXRjaCB1cAogICogICAgICAgIHZhcmlvdXMgTUlQUyBjcHUgdHlwZXMuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZG1AZW5nci5zZ2kuY29tKQorICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkKICAqIENvcHlyaWdodCAoQykgMjAwNCAgTWFjaWVqIFcuIFJvenlja2kKICAqLwogI2lmbmRlZiBfQVNNX0NQVV9ICmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcjRrY2FjaGUuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9yNGtjYWNoZS5oCmluZGV4IDM4N2JmNTkuLjU0ZWE0N2QgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9yNGtjYWNoZS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9yNGtjYWNoZS5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIElubGluZSBhc3NlbWJseSBjYWNoZSBvcGVyYXRpb25zLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRtQGVuZ3Iuc2dpLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTcgLSAyMDAyIFJhbGYgQmFlY2hsZSAocmFsZkBnbnUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA0IFJhbGYgQmFlY2hsZSAocmFsZkBsaW51eC1taXBzLm9yZykKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NnaWFsaWIuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZ2lhbGliLmgKaW5kZXggMmEyZjFiZC4uZjU4MTE1NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NnaWFsaWIuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2dpYWxpYi5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIFNHSSBBUkNTIGZpcm13YXJlIGludGVyZmFjZSBsaWJyYXJ5IGZvciB0aGUgTGludXgga2VybmVsLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRtQGVuZ3Iuc2dpLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgUmFsZiBCYWVjaGxlIChyYWxmQGdudS5vcmcpCiAgKi8KICNpZm5kZWYgX0FTTV9TR0lBTElCX0gKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZ2lhcmNzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2dpYXJjcy5oCmluZGV4IDcyMTMyN2YuLjE0OTM0MjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZ2lhcmNzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NnaWFyY3MuaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBBUkMgZmlybXdhcmUgaW50ZXJmYWNlIGRlZmluZXMuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZG1AZW5nci5zZ2kuY29tKQorICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkKICAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMSBSYWxmIEJhZWNobGUgKHJhbGZAZ251Lm9yZykKICAqIENvcHlyaWdodCAoQykgMTk5OSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvb2N0ZW9uX3N3aXRjaC5TIGIvYXJjaC9taXBzL2tlcm5lbC9vY3Rlb25fc3dpdGNoLlMKaW5kZXggZGQxOGIyNi4uY2U4OWM4MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9vY3Rlb25fc3dpdGNoLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9vY3Rlb25fc3dpdGNoLlMKQEAgLTQsNyArNCw3IEBACiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICoKICAqIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMiwgMjAwMyBSYWxmIEJhZWNobGUKLSAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRtQGVuZ3Iuc2dpLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIGJ5IEFuZHJlYXMgQnVzc2UKICAqIENvcHlyaWdodCAoQykgMTk5OSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcjIzMDBfZnB1LlMgYi9hcmNoL21pcHMva2VybmVsL3IyMzAwX2ZwdS5TCmluZGV4IGFjNjhlNjguLjYxYzhhMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvcjIzMDBfZnB1LlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9yMjMwMF9mcHUuUwpAQCAtNiw3ICs2LDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5NiwgMTk5OCBieSBSYWxmIEJhZWNobGUKICAqCiAgKiBNdWx0aS1hcmNoIGFic3RyYWN0aW9uIGFuZCBhc20gbWFjcm9zIGZvciBlYXNpZXIgcmVhZGluZzoKLSAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRtQGVuZ3Iuc2dpLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCiAgKgogICogRnVydGhlciBtb2RpZmljYXRpb25zIHRvIG1ha2UgdGhpcyB3b3JrOgogICogQ29weXJpZ2h0IChjKSAxOTk4IEhhcmFsZCBLb2VyZmdlbgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9yMjMwMF9zd2l0Y2guUyBiL2FyY2gvbWlwcy9rZXJuZWwvcjIzMDBfc3dpdGNoLlMKaW5kZXggNjk4NDE0Yi4uMjkzODk4MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9yMjMwMF9zd2l0Y2guUworKysgYi9hcmNoL21pcHMva2VybmVsL3IyMzAwX3N3aXRjaC5TCkBAIC01LDcgKzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2IGJ5IEFuZHJlYXMgQnVzc2UKICAqCiAgKiBNdWx0aS1jcHUgYWJzdHJhY3Rpb24gYW5kIG1hY3JvcyBmb3IgZWFzaWVyIHJlYWRpbmc6Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkbUBlbmdyLnNnaS5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQogICoKICAqIEZ1cnRoZXIgbW9kaWZpY2F0aW9ucyB0byBtYWtlIHRoaXMgd29yazoKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAwIEhhcmFsZCBLb2VyZmdlbgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9yNGtfZnB1LlMgYi9hcmNoL21pcHMva2VybmVsL3I0a19mcHUuUwppbmRleCBkYmQ0MmFkLi41NWZmZTE0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3I0a19mcHUuUworKysgYi9hcmNoL21pcHMva2VybmVsL3I0a19mcHUuUwpAQCAtNiw3ICs2LDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5NiwgOTgsIDk5LCAyMDAwLCAwMSBSYWxmIEJhZWNobGUKICAqCiAgKiBNdWx0aS1hcmNoIGFic3RyYWN0aW9uIGFuZCBhc20gbWFjcm9zIGZvciBlYXNpZXIgcmVhZGluZzoKLSAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRtQGVuZ3Iuc2dpLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCiAgKgogICogQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcjRrX3N3aXRjaC5TIGIvYXJjaC9taXBzL2tlcm5lbC9yNGtfc3dpdGNoLlMKaW5kZXggODg5M2VlMS4uOTQxNGY5MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9yNGtfc3dpdGNoLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9yNGtfc3dpdGNoLlMKQEAgLTQsNyArNCw3IEBACiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICoKICAqIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMiwgMjAwMyBSYWxmIEJhZWNobGUKLSAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRtQGVuZ3Iuc2dpLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIGJ5IEFuZHJlYXMgQnVzc2UKICAqIENvcHlyaWdodCAoQykgMTk5OSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcjYwMDBfZnB1LlMgYi9hcmNoL21pcHMva2VybmVsL3I2MDAwX2ZwdS5TCmluZGV4IDQzY2RhNTMuLmRhMGZiZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvcjYwMDBfZnB1LlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9yNjAwMF9mcHUuUwpAQCAtOCw3ICs4LDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5NiBieSBSYWxmIEJhZWNobGUKICAqCiAgKiBNdWx0aS1hcmNoIGFic3RyYWN0aW9uIGFuZCBhc20gbWFjcm9zIGZvciBlYXNpZXIgcmVhZGluZzoKLSAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRtQGVuZ3Iuc2dpLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCiAgKi8KICNpbmNsdWRlIDxhc20vYXNtLmg+CiAjaW5jbHVkZSA8YXNtL2ZwcmVnZGVmLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggY2QyY2E1NC4uMDFhZjM4NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNjUsNiArNjUsNyBAQAogCU5PVEVTIDp0ZXh0IDpub3RlCiAJLmR1bW15IDogeyAqKC5kdW1teSkgfSA6dGV4dAogCisJX3NkYXRhID0gLjsJCQkvKiBTdGFydCBvZiBkYXRhIHNlY3Rpb24gKi8KIAlST0RBVEEKIAogCS8qIHdyaXRlYWJsZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2MtcjNrLmMgYi9hcmNoL21pcHMvbW0vYy1yM2suYwppbmRleCA1NGU1ZjdiLi5lNmIwZWZkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vYy1yM2suYworKysgYi9hcmNoL21pcHMvbW0vYy1yM2suYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiByMjMwMC5jOiBSMjAwMCBhbmQgUjMwMDAgc3BlY2lmaWMgbW11L2NhY2hlIGNvZGUuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZG1AZW5nci5zZ2kuY29tKQorICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkKICAqCiAgKiB3aXRoIGEgbG90IG9mIGNoYW5nZXMgdG8gbWFrZSB0aGlzIHRoaW5nIHdvcmsgZm9yIFIzMDAwcwogICogVHgzOVhYIFI0ayBzdHlsZSBjYWNoZXMgYWRkZWQuIEhLCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vYy1yNGsuYyBiL2FyY2gvbWlwcy9tbS9jLXI0ay5jCmluZGV4IGQ5YmM1ZDMuLmVlYjY0MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9jLXI0ay5jCisrKyBiL2FyY2gvbWlwcy9tbS9jLXI0ay5jCkBAIC0zLDcgKzMsNyBAQAogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQogICogZm9yIG1vcmUgZGV0YWlscy4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkbUBlbmdyLnNnaS5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQogICogQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyIFJhbGYgQmFlY2hsZSAocmFsZkBnbnUub3JnKQogICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2MtdHgzOS5jIGIvYXJjaC9taXBzL21tL2MtdHgzOS5jCmluZGV4IDY1MTViNDQuLmQzNTJmYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9jLXR4MzkuYworKysgYi9hcmNoL21pcHMvbW0vYy10eDM5LmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogcjIzMDAuYzogUjIwMDAgYW5kIFIzMDAwIHNwZWNpZmljIG1tdS9jYWNoZSBjb2RlLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRtQGVuZ3Iuc2dpLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCiAgKgogICogd2l0aCBhIGxvdCBvZiBjaGFuZ2VzIHRvIG1ha2UgdGhpcyB0aGluZyB3b3JrIGZvciBSMzAwMHMKICAqIFR4MzlYWCBSNGsgc3R5bGUgY2FjaGVzIGFkZGVkLiBISwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3NjLWlwMjIuYyBiL2FyY2gvbWlwcy9tbS9zYy1pcDIyLmMKaW5kZXggMTNhZGI1Ny4uYTZiZDExZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3NjLWlwMjIuYworKysgYi9hcmNoL21pcHMvbW0vc2MtaXAyMi5jCkBAIC0yLDcgKzIsNyBAQAogICogc2MtaXAyMi5jOiBJbmR5IGNhY2hlIG1hbmFnZW1lbnQgZnVuY3Rpb25zLgogICoKICAqIENvcHlyaWdodCAoQykgMTk5NywgMjAwMSBSYWxmIEJhZWNobGUgKHJhbGZAZ251Lm9yZyksCi0gKiBkZXJpdmVkIGZyb20gcjR4eDAuYyBieSBEYXZpZCBTLiBNaWxsZXIgKGRtQGVuZ3Iuc2dpLmNvbSkuCisgKiBkZXJpdmVkIGZyb20gcjR4eDAuYyBieSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpLgogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3NjLXI1ay5jIGIvYXJjaC9taXBzL21tL3NjLXI1ay5jCmluZGV4IGYzMzBkMzguLmFlMWU1MzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9zYy1yNWsuYworKysgYi9hcmNoL21pcHMvbW0vc2MtcjVrLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk3LCAyMDAxIFJhbGYgQmFlY2hsZSAocmFsZkBnbnUub3JnKSwKLSAqIGRlcml2ZWQgZnJvbSByNHh4MC5jIGJ5IERhdmlkIFMuIE1pbGxlciAoZG1AZW5nci5zZ2kuY29tKS4KKyAqIGRlcml2ZWQgZnJvbSByNHh4MC5jIGJ5IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vdGxiLXIzay5jIGIvYXJjaC9taXBzL21tL3RsYi1yM2suYwppbmRleCAwZjVhYjIzLi40MDQyNGFmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vdGxiLXIzay5jCisrKyBiL2FyY2gvbWlwcy9tbS90bGItcjNrLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogcjIzMDAuYzogUjIwMDAgYW5kIFIzMDAwIHNwZWNpZmljIG1tdS9jYWNoZSBjb2RlLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRtQGVuZ3Iuc2dpLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCiAgKgogICogd2l0aCBhIGxvdCBvZiBjaGFuZ2VzIHRvIG1ha2UgdGhpcyB0aGluZyB3b3JrIGZvciBSMzAwMHMKICAqIFR4MzlYWCBSNGsgc3R5bGUgY2FjaGVzIGFkZGVkLiBISwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3RsYi1yNGsuYyBiL2FyY2gvbWlwcy9tbS90bGItcjRrLmMKaW5kZXggYzYxOGVlZC4uYmE0MDMyNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3RsYi1yNGsuYworKysgYi9hcmNoL21pcHMvbW0vdGxiLXI0ay5jCkBAIC0zLDcgKzMsNyBAQAogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQogICogZm9yIG1vcmUgZGV0YWlscy4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkbUBlbmdyLnNnaS5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQogICogQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwIFJhbGYgQmFlY2hsZSByYWxmQGdudS5vcmcKICAqIENhcnN0ZW4gTGFuZ2dhYXJkLCBjYXJzdGVubEBtaXBzLmNvbQogICogQ29weXJpZ2h0IChDKSAyMDAyIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3RsYi1yOGsuYyBiL2FyY2gvbWlwcy9tbS90bGItcjhrLmMKaW5kZXggMmI4MmYyMy4uM2Q5NWY3NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS90bGItcjhrLmMKKysrIGIvYXJjaC9taXBzL21tL3RsYi1yOGsuYwpAQCAtMyw3ICszLDcgQEAKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZG1AZW5nci5zZ2kuY29tKQorICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkKICAqIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCBSYWxmIEJhZWNobGUgcmFsZkBnbnUub3JnCiAgKiBDYXJzdGVuIExhbmdnYWFyZCwgY2Fyc3RlbmxAbWlwcy5jb20KICAqIENvcHlyaWdodCAoQykgMjAwMiBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLWhwYy5jIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItaHBjLmMKaW5kZXggNWMwMGNkZC4uYmI3MDU4OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItaHBjLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItaHBjLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogaXAyMi1ocGMuYzogUm91dGluZXMgZm9yIGdlbmVyaWMgbWFuaXB1bGF0aW9uIG9mIHRoZSBIUEMgY29udHJvbGxlcnMuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZG1AZW5nci5zZ2kuY29tKQorICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkKICAqIENvcHlyaWdodCAoQykgMTk5OCBSYWxmIEJhZWNobGUKICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1pbnQuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLWludC5jCmluZGV4IDQ3NjQyM2EuLmI0ZDA4ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLWludC5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLWludC5jCkBAIC0yLDcgKzIsNyBAQAogICogaXAyMi1pbnQuYzogUm91dGluZXMgZm9yIGdlbmVyaWMgbWFuaXB1bGF0aW9uIG9mIHRoZSBJTlRbMjNdIEFTSUMKICAqICAgICAgICAgICAgIGZvdW5kIG9uIElORFkgYW5kIEluZGlnbzIgd29ya3N0YXRpb25zLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRtQGVuZ3Iuc2dpLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTggUmFsZiBCYWVjaGxlIChyYWxmQGdudS5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgQW5kcmV3IFIuIEJha2VyIChhbmRyZXdiQHVhYi5lZHUpCiAgKiAgICAgICAgICAgICAgICAgICAgLSBJbmRpZ28yIGNoYW5nZXMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLW1jLmMgYi9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1tYy5jCmluZGV4IDUyNjhhYzEuLmQyMjI2MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLW1jLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItbWMuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBpcDIyLW1jLmM6IFJvdXRpbmVzIGZvciBtYW5pcHVsYXRpbmcgU0dJIE1lbW9yeSBDb250cm9sbGVyLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRtQGVuZ3Iuc2dpLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgQW5kcmV3IFIuIEJha2VyIChhbmRyZXdiQHVhYi5lZHUpIC0gSW5kaWdvMiBjaGFuZ2VzCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMgTGFkaXNsYXYgTWljaGwgIChsYWRpc0BsaW51eC1taXBzLm9yZykKICAqIENvcHlyaWdodCAoQykgMjAwNCBQZXRlciBGdWVyc3QgICAgKHBmQG5ldC5hbHBoYWR2LmRlKSAtIElQMjgKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXNldHVwLmMgYi9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1zZXR1cC5jCmluZGV4IDVkZWViNjguLjVlNjYyMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXNldHVwLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItc2V0dXAuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBpcDIyLXNldHVwLmM6IFNHSSBzcGVjaWZpYyBzZXR1cCwgaW5jbHVkaW5nIGluaXQgb2YgdGhlIGZlYXR1cmUgc3RydWN0LgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRtQGVuZ3Iuc2dpLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTggUmFsZiBCYWVjaGxlIChyYWxmQGdudS5vcmcpCiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdHh4OS9nZW5lcmljL3NldHVwX3R4NDkzOS5jIGIvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9zZXR1cF90eDQ5MzkuYwppbmRleCAzZGMxOWY0Li5lOWY5NWRjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHh4OS9nZW5lcmljL3NldHVwX3R4NDkzOS5jCisrKyBiL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvc2V0dXBfdHg0OTM5LmMKQEAgLTMxOCwxOSArMzE4LDE1IEBACiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19UQzM1ODE1KSB8fCBkZWZpbmVkKENPTkZJR19UQzM1ODE1X01PRFVMRSkKLXN0YXRpYyBpbnQgdHg0OTM5X2dldF9ldGhfc3BlZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyB1MzIgdHg0OTM5X2dldF9ldGhfc3BlZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZXRodG9vbF9jbWQgY21kID0geyBFVEhUT09MX0dTRVQgfTsKLQlpbnQgc3BlZWQgPSAxMDA7CS8qIGRlZmF1bHQgMTAwTWJwcyAqLwotCWludCBlcnI7Ci0JaWYgKCFkZXYtPmV0aHRvb2xfb3BzIHx8ICFkZXYtPmV0aHRvb2xfb3BzLT5nZXRfc2V0dGluZ3MpCi0JCXJldHVybiBzcGVlZDsKLQllcnIgPSBkZXYtPmV0aHRvb2xfb3BzLT5nZXRfc2V0dGluZ3MoZGV2LCAmY21kKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIHNwZWVkOwotCXNwZWVkID0gY21kLnNwZWVkID09IFNQRUVEXzEwMCA/IDEwMCA6IDEwOwotCXJldHVybiBzcGVlZDsKKwlzdHJ1Y3QgZXRodG9vbF9jbWQgY21kOworCWlmIChkZXZfZXRodG9vbF9nZXRfc2V0dGluZ3MoZGV2LCAmY21kKSkKKwkJcmV0dXJuIDEwMDsJLyogZGVmYXVsdCAxMDBNYnBzICovCisKKwlyZXR1cm4gZXRodG9vbF9jbWRfc3BlZWQoJmNtZCk7CiB9CisKIHN0YXRpYyBpbnQgdHg0OTM5X25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBldmVudCwKIAkJCSAgICAgICB2b2lkICpwdHIpCkBAIC0zNDMsOCArMzM5LDcgQEAKIAkJZWxzZSBpZiAoZGV2LT5pcnEgPT0gVFhYOV9JUlFfQkFTRSArIFRYNDkzOV9JUl9FVEgoMSkpCiAJCQliaXQgPSBUWDQ5MzlfUENGR19TUEVFRDE7CiAJCWlmIChiaXQpIHsKLQkJCWludCBzcGVlZCA9IHR4NDkzOV9nZXRfZXRoX3NwZWVkKGRldik7Ci0JCQlpZiAoc3BlZWQgPT0gMTAwKQorCQkJaWYgKHR4NDkzOV9nZXRfZXRoX3NwZWVkKGRldikgPT0gMTAwKQogCQkJCXR4eDlfc2V0NjQoJnR4NDkzOV9jY2ZncHRyLT5wY2ZnLCBiaXQpOwogCQkJZWxzZQogCQkJCXR4eDlfY2xlYXI2NCgmdHg0OTM5X2NjZmdwdHItPnBjZmcsIGJpdCk7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggZDE4MzI4Yi4uZGE2MDFkZCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtMyw2ICszLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCiAvKiBUaGUgdXN1YWwgY29tbWVudCBpcyAiQ2FjaGVzIGFyZW4ndCBicmFpbi1kZWFkIG9uIHRoZSA8YXJjaGl0ZWN0dXJlPiIuCiAgKiBVbmZvcnR1bmF0ZWx5LCB0aGF0IGRvZXNuJ3QgYXBwbHkgdG8gUEEtUklTQy4gKi8KQEAgLTExMiw4ICsxMTMsMTAgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogZmx1c2hfYW5vbl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyB2bWFkZHIpCiB7Ci0JaWYgKFBhZ2VBbm9uKHBhZ2UpKQorCWlmIChQYWdlQW5vbihwYWdlKSkgeworCQlmbHVzaF90bGJfcGFnZSh2bWEsIHZtYWRkcik7CiAJCWZsdXNoX2RjYWNoZV9wYWdlX2FzbShwYWdlX3RvX3BoeXMocGFnZSksIHZtYWRkcik7CisJfQogfQogCiAjaWZkZWYgQ09ORklHX0RFQlVHX1JPREFUQQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDVkN2I4Y2UuLjIyZGFkZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTE3Nyw3ICsxNzcsMTAgQEAKIAogI2RlZmluZSBfUEFHRV9UQUJMRQkoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JFQUQgfCBfUEFHRV9XUklURSB8ICBfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEKQogI2RlZmluZSBfUEFHRV9DSEdfTUFTSwkoUEFHRV9NQVNLIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSkKLSNkZWZpbmUgX1BBR0VfS0VSTkVMCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfRVhFQyB8IF9QQUdFX1JFQUQgfCBfUEFHRV9XUklURSB8IF9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQpCisjZGVmaW5lIF9QQUdFX0tFUk5FTF9STwkoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JFQUQgfCBfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEKQorI2RlZmluZSBfUEFHRV9LRVJORUxfRVhFQwkoX1BBR0VfS0VSTkVMX1JPIHwgX1BBR0VfRVhFQykKKyNkZWZpbmUgX1BBR0VfS0VSTkVMX1JXWAkoX1BBR0VfS0VSTkVMX0VYRUMgfCBfUEFHRV9XUklURSkKKyNkZWZpbmUgX1BBR0VfS0VSTkVMCQkoX1BBR0VfS0VSTkVMX1JPIHwgX1BBR0VfV1JJVEUpCiAKIC8qIFRoZSBwZ2QvcG1kIGNvbnRhaW5zIGEgcHRyIChpbiBwaHlzIGFkZHIgc3BhY2UpOyBzaW5jZSBhbGwgcGdkcy9wbWRzCiAgKiBhcmUgcGFnZS1hbGlnbmVkLCB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZSBQQUdFX09GRlNFVCBiaXRzLCBleGNlcHQKQEAgLTIwOCw3ICsyMTEsOSBAQAogI2RlZmluZSBQQUdFX0NPUFkgICAgICAgUEFHRV9FWEVDUkVBRAogI2RlZmluZSBQQUdFX1JXWCAgICAgICAgX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1VTRVIgfCBfUEFHRV9SRUFEIHwgX1BBR0VfV1JJVEUgfCBfUEFHRV9FWEVDIHxfUEFHRV9BQ0NFU1NFRCkKICNkZWZpbmUgUEFHRV9LRVJORUwJX19wZ3Byb3QoX1BBR0VfS0VSTkVMKQotI2RlZmluZSBQQUdFX0tFUk5FTF9STwlfX3BncHJvdChfUEFHRV9LRVJORUwgJiB+X1BBR0VfV1JJVEUpCisjZGVmaW5lIFBBR0VfS0VSTkVMX0VYRUMJX19wZ3Byb3QoX1BBR0VfS0VSTkVMX0VYRUMpCisjZGVmaW5lIFBBR0VfS0VSTkVMX1JXWAlfX3BncHJvdChfUEFHRV9LRVJORUxfUldYKQorI2RlZmluZSBQQUdFX0tFUk5FTF9STwlfX3BncHJvdChfUEFHRV9LRVJORUxfUk8pCiAjZGVmaW5lIFBBR0VfS0VSTkVMX1VOQwlfX3BncHJvdChfUEFHRV9LRVJORUwgfCBfUEFHRV9OT19DQUNIRSkKICNkZWZpbmUgUEFHRV9HQVRFV0FZICAgIF9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9VU0VSIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9HQVRFV0FZfCBfUEFHRV9SRUFEKQogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IDNlYjgyYzJhLi45Y2JjMmMzIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtODE0LDggKzgxNCwxNCBAQAogI2RlZmluZSBfX05SX3JlY3ZtbXNnCQkoX19OUl9MaW51eCArIDMxOSkKICNkZWZpbmUgX19OUl9hY2NlcHQ0CQkoX19OUl9MaW51eCArIDMyMCkKICNkZWZpbmUgX19OUl9wcmxpbWl0NjQJCShfX05SX0xpbnV4ICsgMzIxKQorI2RlZmluZSBfX05SX2Zhbm90aWZ5X2luaXQJKF9fTlJfTGludXggKyAzMjIpCisjZGVmaW5lIF9fTlJfZmFub3RpZnlfbWFyawkoX19OUl9MaW51eCArIDMyMykKKyNkZWZpbmUgX19OUl9jbG9ja19hZGp0aW1lCShfX05SX0xpbnV4ICsgMzI0KQorI2RlZmluZSBfX05SX25hbWVfdG9faGFuZGxlX2F0CShfX05SX0xpbnV4ICsgMzI1KQorI2RlZmluZSBfX05SX29wZW5fYnlfaGFuZGxlX2F0CShfX05SX0xpbnV4ICsgMzI2KQorI2RlZmluZSBfX05SX3N5bmNmcwkJKF9fTlJfTGludXggKyAzMjcpCiAKLSNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkoX19OUl9wcmxpbWl0NjQgKyAxKQorI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCShfX05SX3N5bmNmcyArIDEpCiAKIAogI2RlZmluZSBfX0lHTk9SRV9zZWxlY3QJCS8qIG5ld3NlbGVjdCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL2NhY2hlLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvY2FjaGUuYwppbmRleCAzZjExMzMxLi44MzMzNWYzIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvY2FjaGUuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvY2FjaGUuYwpAQCAtMzA0LDEwICszMDQsMjAgQEAKIAkJb2Zmc2V0ID0gKHBnb2ZmIC0gbXBudC0+dm1fcGdvZmYpIDw8IFBBR0VfU0hJRlQ7CiAJCWFkZHIgPSBtcG50LT52bV9zdGFydCArIG9mZnNldDsKIAorCQkvKiBUaGUgVExCIGlzIHRoZSBlbmdpbmUgb2YgY29oZXJlbmNlIG9uIHBhcmlzYzogVGhlCisJCSAqIENQVSBpcyBlbnRpdGxlZCB0byBzcGVjdWxhdGUgYW55IHBhZ2Ugd2l0aCBhIFRMQgorCQkgKiBtYXBwaW5nLCBzbyBoZXJlIHdlIGtpbGwgdGhlIG1hcHBpbmcgdGhlbiBmbHVzaCB0aGUKKwkJICogcGFnZSBhbG9uZyBhIHNwZWNpYWwgZmx1c2ggb25seSBhbGlhcyBtYXBwaW5nLgorCQkgKiBUaGlzIGd1YXJhbnRlZXMgdGhhdCB0aGUgcGFnZSBpcyBuby1sb25nZXIgaW4gdGhlCisJCSAqIGNhY2hlIGZvciBhbnkgcHJvY2VzcyBhbmQgbm9yIG1heSBpdCBiZQorCQkgKiBzcGVjdWxhdGl2ZWx5IHJlYWQgaW4gKHVudGlsIHRoZSB1c2VyIG9yIGtlcm5lbAorCQkgKiBzcGVjaWZpY2FsbHkgYWNjZXNzZXMgaXQsIG9mIGNvdXJzZSkgKi8KKworCQlmbHVzaF90bGJfcGFnZShtcG50LCBhZGRyKTsKIAkJaWYgKG9sZF9hZGRyID09IDAgfHwgKG9sZF9hZGRyICYgKFNITUxCQSAtIDEpKSAhPSAoYWRkciAmIChTSE1MQkEgLSAxKSkpIHsKIAkJCV9fZmx1c2hfY2FjaGVfcGFnZShtcG50LCBhZGRyLCBwYWdlX3RvX3BoeXMocGFnZSkpOwogCQkJaWYgKG9sZF9hZGRyKQotCQkJCXByaW50ayhLRVJOX0VSUiAiSU5FUVVJVkFMRU5UIEFMSUFTRVMgMHglbHggYW5kIDB4JWx4IGluIGZpbGUgJXNcbiIsIG9sZF9hZGRyLCBhZGRyLCBtcG50LT52bV9maWxlID8gbXBudC0+dm1fZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLm5hbWUgOiAiKG51bGwpIik7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJJTkVRVUlWQUxFTlQgQUxJQVNFUyAweCVseCBhbmQgMHglbHggaW4gZmlsZSAlc1xuIiwgb2xkX2FkZHIsIGFkZHIsIG1wbnQtPnZtX2ZpbGUgPyAoY2hhciAqKW1wbnQtPnZtX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfbmFtZS5uYW1lIDogIihudWxsKSIpOwogCQkJb2xkX2FkZHIgPSBhZGRyOwogCQl9CiAJfQpAQCAtNDk5LDYgKzUwOSw3IEBACiB7CiAJQlVHX09OKCF2bWEtPnZtX21tLT5jb250ZXh0KTsKIAorCWZsdXNoX3RsYl9wYWdlKHZtYSwgdm1hZGRyKTsKIAlfX2ZsdXNoX2NhY2hlX3BhZ2Uodm1hLCB2bWFkZHIsIHBhZ2VfdG9fcGh5cyhwZm5fdG9fcGFnZShwZm4pKSk7CiAKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMKaW5kZXggZWFkOGQyYS4uNmYwNTk0NCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMKQEAgLTY5Miw2ICs2OTIsOSBAQAogRU5EKGZhdWx0X3ZlY3Rvcl8xMSkKIAogI2VuZGlmCisJLyogRmF1bHQgdmVjdG9yIGlzIHNlcGFyYXRlbHkgcHJvdGVjdGVkIGFuZCAqbXVzdCogYmUgb24gaXRzIG93biBwYWdlICovCisJLmFsaWduCQlQQUdFX1NJWkUKK0VOVFJZKGVuZF9mYXVsdF92ZWN0b3IpCiAKIAkuaW1wb3J0CQloYW5kbGVfaW50ZXJydXB0aW9uLGNvZGUKIAkuaW1wb3J0CQlkb19jcHVfaXJxX21hc2ssY29kZQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL2hlYWQuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9oZWFkLlMKaW5kZXggMTQ1YzVlNC4uMzdhYWJkNyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2hlYWQuUworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvaGVhZC5TCkBAIC0xMDYsOCArMTA2LDkgQEAKICNlbmRpZgogCiAKLQkvKiBOb3cgaW5pdGlhbGl6ZSB0aGUgUFRFcyB0aGVtc2VsdmVzICovCi0JbGRvCQkwK19QQUdFX0tFUk5FTCglcjApLCVyMyAvKiBIYXJkd2lyZWQgMCBwaHlzIGFkZHIgc3RhcnQgKi8KKwkvKiBOb3cgaW5pdGlhbGl6ZSB0aGUgUFRFcyB0aGVtc2VsdmVzLiAgV2UgdXNlIFJXWCBmb3IKKwkgKiBldmVyeXRoaW5nIC4uLiBpdCB3aWxsIGdldCByZW1hcHBlZCBjb3JyZWN0bHkgbGF0ZXIgKi8KKwlsZG8JCTArX1BBR0VfS0VSTkVMX1JXWCglcjApLCVyMyAvKiBIYXJkd2lyZWQgMCBwaHlzIGFkZHIgc3RhcnQgKi8KIAlsZGkJCSgxPDwoS0VSTkVMX0lOSVRJQUxfT1JERVItUEFHRV9TSElGVCkpLCVyMTEgLyogUEZOIGNvdW50ICovCiAJbG9hZDMyCQlQQShwZzApLCVyMQogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvbW9kdWxlLmMKaW5kZXggNmU4MWJiNS4uY2VkYmJiOCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL21vZHVsZS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9tb2R1bGUuYwpAQCAtNjEsOCArNjEsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9idWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3Vud2luZC5oPgogCiAjaWYgMApAQCAtMjE0LDcgKzIxNiwxMyBAQAogewogCWlmIChzaXplID09IDApCiAJCXJldHVybiBOVUxMOwotCXJldHVybiB2bWFsbG9jKHNpemUpOworCS8qIHVzaW5nIFJXWCBtZWFucyBsZXNzIHByb3RlY3Rpb24gZm9yIG1vZHVsZXMsIGJ1dCBpdCdzCisJICogZWFzaWVyIHRoYW4gdHJ5aW5nIHRvIG1hcCB0aGUgdGV4dCwgZGF0YSwgaW5pdF90ZXh0IGFuZAorCSAqIGluaXRfZGF0YSBjb3JyZWN0bHkgKi8KKwlyZXR1cm4gX192bWFsbG9jX25vZGVfcmFuZ2Uoc2l6ZSwgMSwgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsCisJCQkJICAgIEdGUF9LRVJORUwgfCBfX0dGUF9ISUdITUVNLAorCQkJCSAgICBQQUdFX0tFUk5FTF9SV1gsIC0xLAorCQkJCSAgICBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogfQogCiAjaWZuZGVmIENPTkZJR182NEJJVApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3BhY2FjaGUuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wYWNhY2hlLlMKaW5kZXggYTg1ODIzNi4uOTNmZjNkOSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3BhY2FjaGUuUworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcGFjYWNoZS5TCkBAIC04MTcsMTAgKzgxNyw3IEBACiAJLnByb2NlbmQKIEVORFBST0MocHVyZ2Vfa2VybmVsX2RjYWNoZV9wYWdlKQogCi0KLQkuZXhwb3J0IGZsdXNoX3VzZXJfZGNhY2hlX3JhbmdlX2FzbQotCi1mbHVzaF91c2VyX2RjYWNoZV9yYW5nZV9hc206CitFTlRSWShmbHVzaF91c2VyX2RjYWNoZV9yYW5nZV9hc20pCiAJLnByb2MKIAkuY2FsbGluZm8gTk9fQ0FMTFMKIAkuZW50cnkKQEAgLTgzOSw2ICs4MzYsNyBAQAogCS5leGl0CiAKIAkucHJvY2VuZAorRU5EUFJPQyhmbHVzaF91c2VyX2RjYWNoZV9yYW5nZV9hc20pCiAKIEVOVFJZKGZsdXNoX2tlcm5lbF9kY2FjaGVfcmFuZ2VfYXNtKQogCS5wcm9jCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzX3BhcmlzYzMyLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzX3BhcmlzYzMyLmMKaW5kZXggODhhMGFkMS4uZGM5YTYyNCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c19wYXJpc2MzMi5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNfcGFyaXNjMzIuYwpAQCAtMjI4LDMgKzIyOCwxMSBAQAogICAgICAgICByZXR1cm4gc3lzX2ZhbGxvY2F0ZShmZCwgbW9kZSwgKChsb2ZmX3Qpb2ZmaGkgPDwgMzIpIHwgb2ZmbG8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobG9mZl90KWxlbmhpIDw8IDMyKSB8IGxlbmxvKTsKIH0KKworYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfZmFub3RpZnlfbWFyayhpbnQgZmFuX2ZkLCBpbnQgZmxhZ3MsIHUzMiBtYXNrX2hpLAorCQkJCQkgdTMyIG1hc2tfbG8sIGludCBmZCwKKwkJCQkJIGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSkKK3sKKwlyZXR1cm4gc3lzX2Zhbm90aWZ5X21hcmsoZmFuX2ZkLCBmbGFncywgKCh1NjQpbWFza19oaSA8PCAzMikgfCBtYXNrX2xvLAorCQkJCSBmZCwgcGF0aG5hbWUpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKaW5kZXggNGJlODVlZS4uYTViMDJjZSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCkBAIC00MjAsNiArNDIwLDEyIEBACiAJRU5UUllfQ09NUChyZWN2bW1zZykKIAlFTlRSWV9TQU1FKGFjY2VwdDQpCQkvKiAzMjAgKi8KIAlFTlRSWV9TQU1FKHBybGltaXQ2NCkKKwlFTlRSWV9TQU1FKGZhbm90aWZ5X2luaXQpCisJRU5UUllfQ09NUChmYW5vdGlmeV9tYXJrKQorCUVOVFJZX0NPTVAoY2xvY2tfYWRqdGltZSkKKwlFTlRSWV9TQU1FKG5hbWVfdG9faGFuZGxlX2F0KQkvKiAzMjUgKi8KKwlFTlRSWV9DT01QKG9wZW5fYnlfaGFuZGxlX2F0KQorCUVOVFJZX1NBTUUoc3luY2ZzKQogCiAJLyogTm90aGluZyB5ZXQgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA4ZjFlNGVmLi5lMWE1NTg0IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNjksNiArNjksOSBAQAogCS8qIEVuZCBvZiB0ZXh0IHNlY3Rpb24gKi8KIAlfZXRleHQgPSAuOwogCisJLyogU3RhcnQgb2YgZGF0YSBzZWN0aW9uICovCisJX3NkYXRhID0gLjsKKwogCVJPREFUQQogCiAJLyogd3JpdGVhYmxlICovCkBAIC0xMzQsNiArMTM3LDcgQEAKIAkuID0gQUxJR04oMTYzODQpOwogCV9faW5pdF9iZWdpbiA9IC47CiAJSU5JVF9URVhUX1NFQ1RJT04oMTYzODQpCisJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJSU5JVF9EQVRBX1NFQ1RJT04oMTYpCiAJLyogd2UgaGF2ZSB0byBkaXNjYXJkIGV4aXQgdGV4dCBhbmQgc3VjaCBhdCBydW50aW1lLCBub3QgbGluayB0aW1lICovCiAJLmV4aXQudGV4dCA6CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9tbS9pbml0LmMgYi9hcmNoL3BhcmlzYy9tbS9pbml0LmMKaW5kZXggYjFkMTI2Mi4uNWZhMWUyNyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvbW0vaW5pdC5jCisrKyBiL2FyY2gvcGFyaXNjL21tL2luaXQuYwpAQCAtMzcxLDI0ICszNzEsMTU4IEBACiAJcmVxdWVzdF9yZXNvdXJjZSgmc3lzcmFtX3Jlc291cmNlc1swXSwgJnBkY2RhdGFfcmVzb3VyY2UpOwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgbWFwX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfdmFkZHIsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCSAgICAgcGdwcm90X3QgcGdwcm90LCBpbnQgZm9yY2UpCit7CisJcGdkX3QgKnBnX2RpcjsKKwlwbWRfdCAqcG1kOworCXB0ZV90ICpwZ190YWJsZTsKKwl1bnNpZ25lZCBsb25nIGVuZF9wYWRkcjsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X3BtZDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X3B0ZTsKKwl1bnNpZ25lZCBsb25nIHRtcDE7CisJdW5zaWduZWQgbG9uZyB0bXAyOworCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKKwl1bnNpZ25lZCBsb25nIHZhZGRyOworCXVuc2lnbmVkIGxvbmcgcm9fc3RhcnQ7CisJdW5zaWduZWQgbG9uZyByb19lbmQ7CisJdW5zaWduZWQgbG9uZyBmdl9hZGRyOworCXVuc2lnbmVkIGxvbmcgZ3dfYWRkcjsKKwlleHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyBmYXVsdF92ZWN0b3JfMjA7CisJZXh0ZXJuIHZvaWQgKiBjb25zdCBsaW51eF9nYXRld2F5X3BhZ2U7CisKKwlyb19zdGFydCA9IF9fcGEoKHVuc2lnbmVkIGxvbmcpX3RleHQpOworCXJvX2VuZCAgID0gX19wYSgodW5zaWduZWQgbG9uZykmZGF0YV9zdGFydCk7CisJZnZfYWRkciAgPSBfX3BhKCh1bnNpZ25lZCBsb25nKSZmYXVsdF92ZWN0b3JfMjApICYgUEFHRV9NQVNLOworCWd3X2FkZHIgID0gX19wYSgodW5zaWduZWQgbG9uZykmbGludXhfZ2F0ZXdheV9wYWdlKSAmIFBBR0VfTUFTSzsKKworCWVuZF9wYWRkciA9IHN0YXJ0X3BhZGRyICsgc2l6ZTsKKworCXBnX2RpciA9IHBnZF9vZmZzZXRfayhzdGFydF92YWRkcik7CisKKyNpZiBQVFJTX1BFUl9QTUQgPT0gMQorCXN0YXJ0X3BtZCA9IDA7CisjZWxzZQorCXN0YXJ0X3BtZCA9ICgoc3RhcnRfdmFkZHIgPj4gUE1EX1NISUZUKSAmIChQVFJTX1BFUl9QTUQgLSAxKSk7CisjZW5kaWYKKwlzdGFydF9wdGUgPSAoKHN0YXJ0X3ZhZGRyID4+IFBBR0VfU0hJRlQpICYgKFBUUlNfUEVSX1BURSAtIDEpKTsKKworCWFkZHJlc3MgPSBzdGFydF9wYWRkcjsKKwl2YWRkciA9IHN0YXJ0X3ZhZGRyOworCXdoaWxlIChhZGRyZXNzIDwgZW5kX3BhZGRyKSB7CisjaWYgUFRSU19QRVJfUE1EID09IDEKKwkJcG1kID0gKHBtZF90ICopX19wYShwZ19kaXIpOworI2Vsc2UKKwkJcG1kID0gKHBtZF90ICopcGdkX2FkZHJlc3MoKnBnX2Rpcik7CisKKwkJLyoKKwkJICogcG1kIGlzIHBoeXNpY2FsIGF0IHRoaXMgcG9pbnQKKwkJICovCisKKwkJaWYgKCFwbWQpIHsKKwkJCXBtZCA9IChwbWRfdCAqKSBhbGxvY19ib290bWVtX2xvd19wYWdlc19ub2RlKE5PREVfREFUQSgwKSwgUEFHRV9TSVpFIDw8IFBNRF9PUkRFUik7CisJCQlwbWQgPSAocG1kX3QgKikgX19wYShwbWQpOworCQl9CisKKwkJcGdkX3BvcHVsYXRlKE5VTEwsIHBnX2RpciwgX192YShwbWQpKTsKKyNlbmRpZgorCQlwZ19kaXIrKzsKKworCQkvKiBub3cgY2hhbmdlIHBtZCB0byBrZXJuZWwgdmlydHVhbCBhZGRyZXNzZXMgKi8KKworCQlwbWQgPSAocG1kX3QgKilfX3ZhKHBtZCkgKyBzdGFydF9wbWQ7CisJCWZvciAodG1wMSA9IHN0YXJ0X3BtZDsgdG1wMSA8IFBUUlNfUEVSX1BNRDsgdG1wMSsrLCBwbWQrKykgeworCisJCQkvKgorCQkJICogcGdfdGFibGUgaXMgcGh5c2ljYWwgYXQgdGhpcyBwb2ludAorCQkJICovCisKKwkJCXBnX3RhYmxlID0gKHB0ZV90ICopcG1kX2FkZHJlc3MoKnBtZCk7CisJCQlpZiAoIXBnX3RhYmxlKSB7CisJCQkJcGdfdGFibGUgPSAocHRlX3QgKikKKwkJCQkJYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXNfbm9kZShOT0RFX0RBVEEoMCksIFBBR0VfU0laRSk7CisJCQkJcGdfdGFibGUgPSAocHRlX3QgKikgX19wYShwZ190YWJsZSk7CisJCQl9CisKKwkJCXBtZF9wb3B1bGF0ZV9rZXJuZWwoTlVMTCwgcG1kLCBfX3ZhKHBnX3RhYmxlKSk7CisKKwkJCS8qIG5vdyBjaGFuZ2UgcGdfdGFibGUgdG8ga2VybmVsIHZpcnR1YWwgYWRkcmVzc2VzICovCisKKwkJCXBnX3RhYmxlID0gKHB0ZV90ICopIF9fdmEocGdfdGFibGUpICsgc3RhcnRfcHRlOworCQkJZm9yICh0bXAyID0gc3RhcnRfcHRlOyB0bXAyIDwgUFRSU19QRVJfUFRFOyB0bXAyKyssIHBnX3RhYmxlKyspIHsKKwkJCQlwdGVfdCBwdGU7CisKKwkJCQkvKgorCQkJCSAqIE1hcCB0aGUgZmF1bHQgdmVjdG9yIHdyaXRhYmxlIHNvIHdlIGNhbgorCQkJCSAqIHdyaXRlIHRoZSBIUE1DIGNoZWNrc3VtLgorCQkJCSAqLworCQkJCWlmIChmb3JjZSkKKwkJCQkJcHRlID0gIF9fbWtfcHRlKGFkZHJlc3MsIHBncHJvdCk7CisJCQkJZWxzZSBpZiAoY29yZV9rZXJuZWxfdGV4dCh2YWRkcikgJiYKKwkJCQkJIGFkZHJlc3MgIT0gZnZfYWRkcikKKwkJCQkJcHRlID0gX19ta19wdGUoYWRkcmVzcywgUEFHRV9LRVJORUxfRVhFQyk7CisJCQkJZWxzZQorI2lmIGRlZmluZWQoQ09ORklHX1BBUklTQ19QQUdFX1NJWkVfNEtCKQorCQkJCWlmIChhZGRyZXNzID49IHJvX3N0YXJ0ICYmIGFkZHJlc3MgPCByb19lbmQKKwkJCQkJCQkmJiBhZGRyZXNzICE9IGZ2X2FkZHIKKwkJCQkJCQkmJiBhZGRyZXNzICE9IGd3X2FkZHIpCisJCQkJCXB0ZSA9IF9fbWtfcHRlKGFkZHJlc3MsIFBBR0VfS0VSTkVMX1JPKTsKKwkJCQllbHNlCisjZW5kaWYKKwkJCQkJcHRlID0gX19ta19wdGUoYWRkcmVzcywgcGdwcm90KTsKKworCQkJCWlmIChhZGRyZXNzID49IGVuZF9wYWRkcikgeworCQkJCQlpZiAoZm9yY2UpCisJCQkJCQlicmVhazsKKwkJCQkJZWxzZQorCQkJCQkJcHRlX3ZhbChwdGUpID0gMDsKKwkJCQl9CisKKwkJCQlzZXRfcHRlKHBnX3RhYmxlLCBwdGUpOworCisJCQkJYWRkcmVzcyArPSBQQUdFX1NJWkU7CisJCQkJdmFkZHIgKz0gUEFHRV9TSVpFOworCQkJfQorCQkJc3RhcnRfcHRlID0gMDsKKworCQkJaWYgKGFkZHJlc3MgPj0gZW5kX3BhZGRyKQorCQkJICAgIGJyZWFrOworCQl9CisJCXN0YXJ0X3BtZCA9IDA7CisJfQorfQorCiB2b2lkIGZyZWVfaW5pdG1lbSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAl1bnNpZ25lZCBsb25nIGluaXRfYmVnaW4gPSAodW5zaWduZWQgbG9uZylfX2luaXRfYmVnaW47CiAJdW5zaWduZWQgbG9uZyBpbml0X2VuZCA9ICh1bnNpZ25lZCBsb25nKV9faW5pdF9lbmQ7CiAKLSNpZmRlZiBDT05GSUdfREVCVUdfS0VSTkVMCisJLyogVGhlIGluaXQgdGV4dCBwYWdlcyBhcmUgbWFya2VkIFItWC4gIFdlIGhhdmUgdG8KKwkgKiBmbHVzaCB0aGUgaWNhY2hlIGFuZCBtYXJrIHRoZW0gUlctCisJICoKKwkgKiBUaGlzIGlzIHRyaWNreSwgYmVjYXVzZSBtYXBfcGFnZXMgaXMgaW4gdGhlIGluaXQgc2VjdGlvbi4KKwkgKiBEbyBhIGR1bW15IHJlbWFwIG9mIHRoZSBkYXRhIHNlY3Rpb24gZmlyc3QgKHRoZSBkYXRhCisJICogc2VjdGlvbiBpcyBhbHJlYWR5IFBBR0VfS0VSTkVMKSB0byBwdWxsIGluIHRoZSBUTEIgZW50cmllcworCSAqIGZvciBtYXBfa2VybmVsICovCisJbWFwX3BhZ2VzKGluaXRfYmVnaW4sIF9fcGEoaW5pdF9iZWdpbiksIGluaXRfZW5kIC0gaW5pdF9iZWdpbiwKKwkJICBQQUdFX0tFUk5FTF9SV1gsIDEpOworCS8qIG5vdyByZW1hcCBhdCBQQUdFX0tFUk5FTCBzaW5jZSB0aGUgVExCIGlzIHByZS1wcmltZWQgdG8gZXhlY3V0ZQorCSAqIG1hcF9wYWdlcyAqLworCW1hcF9wYWdlcyhpbml0X2JlZ2luLCBfX3BhKGluaXRfYmVnaW4pLCBpbml0X2VuZCAtIGluaXRfYmVnaW4sCisJCSAgUEFHRV9LRVJORUwsIDEpOworCisJLyogZm9yY2UgdGhlIGtlcm5lbCB0byBzZWUgdGhlIG5ldyBUTEIgZW50cmllcyAqLworCV9fZmx1c2hfdGxiX3JhbmdlKDAsIGluaXRfYmVnaW4sIGluaXRfZW5kKTsKIAkvKiBBdHRlbXB0IHRvIGNhdGNoIGFueW9uZSB0cnlpbmcgdG8gZXhlY3V0ZSBjb2RlIGhlcmUKIAkgKiBieSBmaWxsaW5nIHRoZSBwYWdlIHdpdGggQlJLIGluc25zLgogCSAqLwogCW1lbXNldCgodm9pZCAqKWluaXRfYmVnaW4sIDB4MDAsIGluaXRfZW5kIC0gaW5pdF9iZWdpbik7CisJLyogZmluYWxseSBkdW1wIGFsbCB0aGUgaW5zdHJ1Y3Rpb25zIHdoaWNoIHdlcmUgY2FjaGVkLCBzaW5jZSB0aGUKKwkgKiBwYWdlcyBhcmUgbm8tbG9uZ2VyIGV4ZWN1dGFibGUgKi8KIAlmbHVzaF9pY2FjaGVfcmFuZ2UoaW5pdF9iZWdpbiwgaW5pdF9lbmQpOwotI2VuZGlmCiAJCi0JLyogYWxpZ24gX19pbml0X2JlZ2luIGFuZCBfX2luaXRfZW5kIHRvIHBhZ2Ugc2l6ZSwKLQkgICBpZ25vcmluZyBsaW5rZXIgc2NyaXB0IHdoZXJlIHdlIG1pZ2h0IGhhdmUgdHJpZWQgdG8gc2F2ZSBSQU0gKi8KLQlpbml0X2JlZ2luID0gUEFHRV9BTElHTihpbml0X2JlZ2luKTsKLQlpbml0X2VuZCA9IFBBR0VfQUxJR04oaW5pdF9lbmQpOwogCWZvciAoYWRkciA9IGluaXRfYmVnaW47IGFkZHIgPCBpbml0X2VuZDsgYWRkciArPSBQQUdFX1NJWkUpIHsKIAkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKGFkZHIpKTsKIAkJaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShhZGRyKSk7CkBAIC02MTgsMTE0ICs3NTIsNiBAQAogI2VuZGlmCiB9CiAKLQotc3RhdGljIHZvaWQgX19pbml0IG1hcF9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3ZhZGRyLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHBncHJvdCkKLXsKLQlwZ2RfdCAqcGdfZGlyOwotCXBtZF90ICpwbWQ7Ci0JcHRlX3QgKnBnX3RhYmxlOwotCXVuc2lnbmVkIGxvbmcgZW5kX3BhZGRyOwotCXVuc2lnbmVkIGxvbmcgc3RhcnRfcG1kOwotCXVuc2lnbmVkIGxvbmcgc3RhcnRfcHRlOwotCXVuc2lnbmVkIGxvbmcgdG1wMTsKLQl1bnNpZ25lZCBsb25nIHRtcDI7Ci0JdW5zaWduZWQgbG9uZyBhZGRyZXNzOwotCXVuc2lnbmVkIGxvbmcgcm9fc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyByb19lbmQ7Ci0JdW5zaWduZWQgbG9uZyBmdl9hZGRyOwotCXVuc2lnbmVkIGxvbmcgZ3dfYWRkcjsKLQlleHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyBmYXVsdF92ZWN0b3JfMjA7Ci0JZXh0ZXJuIHZvaWQgKiBjb25zdCBsaW51eF9nYXRld2F5X3BhZ2U7Ci0KLQlyb19zdGFydCA9IF9fcGEoKHVuc2lnbmVkIGxvbmcpX3RleHQpOwotCXJvX2VuZCAgID0gX19wYSgodW5zaWduZWQgbG9uZykmZGF0YV9zdGFydCk7Ci0JZnZfYWRkciAgPSBfX3BhKCh1bnNpZ25lZCBsb25nKSZmYXVsdF92ZWN0b3JfMjApICYgUEFHRV9NQVNLOwotCWd3X2FkZHIgID0gX19wYSgodW5zaWduZWQgbG9uZykmbGludXhfZ2F0ZXdheV9wYWdlKSAmIFBBR0VfTUFTSzsKLQotCWVuZF9wYWRkciA9IHN0YXJ0X3BhZGRyICsgc2l6ZTsKLQotCXBnX2RpciA9IHBnZF9vZmZzZXRfayhzdGFydF92YWRkcik7Ci0KLSNpZiBQVFJTX1BFUl9QTUQgPT0gMQotCXN0YXJ0X3BtZCA9IDA7Ci0jZWxzZQotCXN0YXJ0X3BtZCA9ICgoc3RhcnRfdmFkZHIgPj4gUE1EX1NISUZUKSAmIChQVFJTX1BFUl9QTUQgLSAxKSk7Ci0jZW5kaWYKLQlzdGFydF9wdGUgPSAoKHN0YXJ0X3ZhZGRyID4+IFBBR0VfU0hJRlQpICYgKFBUUlNfUEVSX1BURSAtIDEpKTsKLQotCWFkZHJlc3MgPSBzdGFydF9wYWRkcjsKLQl3aGlsZSAoYWRkcmVzcyA8IGVuZF9wYWRkcikgewotI2lmIFBUUlNfUEVSX1BNRCA9PSAxCi0JCXBtZCA9IChwbWRfdCAqKV9fcGEocGdfZGlyKTsKLSNlbHNlCi0JCXBtZCA9IChwbWRfdCAqKXBnZF9hZGRyZXNzKCpwZ19kaXIpOwotCi0JCS8qCi0JCSAqIHBtZCBpcyBwaHlzaWNhbCBhdCB0aGlzIHBvaW50Ci0JCSAqLwotCi0JCWlmICghcG1kKSB7Ci0JCQlwbWQgPSAocG1kX3QgKikgYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXNfbm9kZShOT0RFX0RBVEEoMCksUEFHRV9TSVpFIDw8IFBNRF9PUkRFUik7Ci0JCQlwbWQgPSAocG1kX3QgKikgX19wYShwbWQpOwotCQl9Ci0KLQkJcGdkX3BvcHVsYXRlKE5VTEwsIHBnX2RpciwgX192YShwbWQpKTsKLSNlbmRpZgotCQlwZ19kaXIrKzsKLQotCQkvKiBub3cgY2hhbmdlIHBtZCB0byBrZXJuZWwgdmlydHVhbCBhZGRyZXNzZXMgKi8KLQotCQlwbWQgPSAocG1kX3QgKilfX3ZhKHBtZCkgKyBzdGFydF9wbWQ7Ci0JCWZvciAodG1wMSA9IHN0YXJ0X3BtZDsgdG1wMSA8IFBUUlNfUEVSX1BNRDsgdG1wMSsrLHBtZCsrKSB7Ci0KLQkJCS8qCi0JCQkgKiBwZ190YWJsZSBpcyBwaHlzaWNhbCBhdCB0aGlzIHBvaW50Ci0JCQkgKi8KLQotCQkJcGdfdGFibGUgPSAocHRlX3QgKilwbWRfYWRkcmVzcygqcG1kKTsKLQkJCWlmICghcGdfdGFibGUpIHsKLQkJCQlwZ190YWJsZSA9IChwdGVfdCAqKQotCQkJCQlhbGxvY19ib290bWVtX2xvd19wYWdlc19ub2RlKE5PREVfREFUQSgwKSxQQUdFX1NJWkUpOwotCQkJCXBnX3RhYmxlID0gKHB0ZV90ICopIF9fcGEocGdfdGFibGUpOwotCQkJfQotCi0JCQlwbWRfcG9wdWxhdGVfa2VybmVsKE5VTEwsIHBtZCwgX192YShwZ190YWJsZSkpOwotCi0JCQkvKiBub3cgY2hhbmdlIHBnX3RhYmxlIHRvIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3NlcyAqLwotCi0JCQlwZ190YWJsZSA9IChwdGVfdCAqKSBfX3ZhKHBnX3RhYmxlKSArIHN0YXJ0X3B0ZTsKLQkJCWZvciAodG1wMiA9IHN0YXJ0X3B0ZTsgdG1wMiA8IFBUUlNfUEVSX1BURTsgdG1wMisrLHBnX3RhYmxlKyspIHsKLQkJCQlwdGVfdCBwdGU7Ci0KLQkJCQkvKgotCQkJCSAqIE1hcCB0aGUgZmF1bHQgdmVjdG9yIHdyaXRhYmxlIHNvIHdlIGNhbgotCQkJCSAqIHdyaXRlIHRoZSBIUE1DIGNoZWNrc3VtLgotCQkJCSAqLwotI2lmIGRlZmluZWQoQ09ORklHX1BBUklTQ19QQUdFX1NJWkVfNEtCKQotCQkJCWlmIChhZGRyZXNzID49IHJvX3N0YXJ0ICYmIGFkZHJlc3MgPCByb19lbmQKLQkJCQkJCQkmJiBhZGRyZXNzICE9IGZ2X2FkZHIKLQkJCQkJCQkmJiBhZGRyZXNzICE9IGd3X2FkZHIpCi0JCQkJICAgIHB0ZSA9IF9fbWtfcHRlKGFkZHJlc3MsIFBBR0VfS0VSTkVMX1JPKTsKLQkJCQllbHNlCi0jZW5kaWYKLQkJCQkgICAgcHRlID0gX19ta19wdGUoYWRkcmVzcywgcGdwcm90KTsKLQotCQkJCWlmIChhZGRyZXNzID49IGVuZF9wYWRkcikKLQkJCQkJcHRlX3ZhbChwdGUpID0gMDsKLQotCQkJCXNldF9wdGUocGdfdGFibGUsIHB0ZSk7Ci0KLQkJCQlhZGRyZXNzICs9IFBBR0VfU0laRTsKLQkJCX0KLQkJCXN0YXJ0X3B0ZSA9IDA7Ci0KLQkJCWlmIChhZGRyZXNzID49IGVuZF9wYWRkcikKLQkJCSAgICBicmVhazsKLQkJfQotCQlzdGFydF9wbWQgPSAwOwotCX0KLX0KLQogLyoKICAqIHBhZ2V0YWJsZV9pbml0KCkgc2V0cyB1cCB0aGUgcGFnZSB0YWJsZXMKICAqCkBAIC03NTAsMTQgKzc3NiwxNCBAQAogCQlzaXplID0gcG1lbV9yYW5nZXNbcmFuZ2VdLnBhZ2VzIDw8IFBBR0VfU0hJRlQ7CiAKIAkJbWFwX3BhZ2VzKCh1bnNpZ25lZCBsb25nKV9fdmEoc3RhcnRfcGFkZHIpLCBzdGFydF9wYWRkciwKLQkJCXNpemUsIFBBR0VfS0VSTkVMKTsKKwkJCSAgc2l6ZSwgUEFHRV9LRVJORUwsIDApOwogCX0KIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAogCWlmIChpbml0cmRfZW5kICYmIGluaXRyZF9lbmQgPiBtZW1fbGltaXQpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiaW5pdHJkOiBtYXBwaW5nICUwOGx4LSUwOGx4XG4iLCBpbml0cmRfc3RhcnQsIGluaXRyZF9lbmQpOwogCQltYXBfcGFnZXMoaW5pdHJkX3N0YXJ0LCBfX3BhKGluaXRyZF9zdGFydCksCi0JCQlpbml0cmRfZW5kIC0gaW5pdHJkX3N0YXJ0LCBQQUdFX0tFUk5FTCk7CisJCQkgIGluaXRyZF9lbmQgLSBpbml0cmRfc3RhcnQsIFBBR0VfS0VSTkVMLCAwKTsKIAl9CiAjZW5kaWYKIApAQCAtNzgyLDcgKzgwOCw3IEBACiAJICovCiAKIAltYXBfcGFnZXMobGludXhfZ2F0ZXdheV9wYWdlX2FkZHIsIF9fcGEoJmxpbnV4X2dhdGV3YXlfcGFnZSksCi0JCVBBR0VfU0laRSwgUEFHRV9HQVRFV0FZKTsKKwkJICBQQUdFX1NJWkUsIFBBR0VfR0FURVdBWSwgMSk7CiB9CiAKICNpZmRlZiBDT05GSUdfSFBVWApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwppbmRleCA4ZjRkNTBiLi5hMzEyOGNhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwpAQCAtMTkzLDYgKzE5MywxMiBAQAogCWRlZmF1bHQgeSBpZiBQTUFDX0FQTV9FTVUKIAlib29sCiAKK2NvbmZpZyBFUEFQUl9CT09UCisJYm9vbAorCWhlbHAKKwkgIFVzZWQgdG8gYWxsb3cgYSBib2FyZCB0byBzcGVjaWZ5IGl0IHdhbnRzIGFuIGVQQVBSIGNvbXBsaWFudCB3cmFwcGVyLgorCWRlZmF1bHQgbgorCiBjb25maWcgREVGQVVMVF9VSU1BR0UKIAlib29sCiAJaGVscApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcuZGVidWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZy5kZWJ1ZwppbmRleCAyZDM4YTUwLi5hNTk3ZGQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZy5kZWJ1ZwpAQCAtMjY3LDYgKzI2NywxMSBAQAogCSAgU2VsZWN0IHRoaXMgdG8gZW5hYmxlIGVhcmx5IGRlYnVnZ2luZyBmb3IgTmludGVuZG8gR2FtZUN1YmUvV2lpCiAJICBjb25zb2xlcyB2aWEgYW4gZXh0ZXJuYWwgVVNCIEdlY2tvIGFkYXB0ZXIuCiAKK2NvbmZpZyBQUENfRUFSTFlfREVCVUdfV1NQCisJYm9vbCAiRWFybHkgZGVidWdnaW5nIHZpYSBXU1AncyBpbnRlcm5hbCBVQVJUIgorCWRlcGVuZHMgb24gUFBDX1dTUAorCXNlbGVjdCBQUENfVURCR18xNjU1MAorCiBlbmRjaG9pY2UKIAogY29uZmlnIFBQQ19FQVJMWV9ERUJVR180NHhfUEhZU0xPVwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvYm9vdC9NYWtlZmlsZQppbmRleCA4OTE3ODE2Li5jMjYyMDBiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9NYWtlZmlsZQpAQCAtNjksNyArNjksOCBAQAogCQljcG0tc2VyaWFsLmMgc3RkbGliLmMgbXBjNTJ4eC1wc2MuYyBwbGFuZXRjb3JlLmMgdWFydGxpdGUuYyBcCiAJCWZzbC1zb2MuYyBtcGM4eHguYyBwcTIuYyB1Z2Vjb24uYwogc3JjLXBsYXQgOj0gb2YuYyBjdWJvb3QtNTJ4eC5jIGN1Ym9vdC04MjR4LmMgY3Vib290LTgzeHguYyBjdWJvb3QtODV4eC5jIGhvbGx5LmMgXAotCQljdWJvb3QtZWJvbnkuYyBjdWJvb3QtaG90Zm9vdC5jIHRyZWVib290LWVib255LmMgcHJwbWMyODAwLmMgXAorCQljdWJvb3QtZWJvbnkuYyBjdWJvb3QtaG90Zm9vdC5jIGVwYXByLmMgdHJlZWJvb3QtZWJvbnkuYyBcCisJCXBycG1jMjgwMC5jIFwKIAkJcHMzLWhlYWQuUyBwczMtaHZjYWxsLlMgcHMzLmMgdHJlZWJvb3QtYmFtYm9vLmMgY3Vib290LTh4eC5jIFwKIAkJY3Vib290LXBxMi5jIGN1Ym9vdC1zZXF1b2lhLmMgdHJlZWJvb3Qtd2FsbnV0LmMgXAogCQljdWJvb3QtYmFtYm9vLmMgY3Vib290LW1wYzc0NDhocGMyLmMgY3Vib290LXRhaXNoYW4uYyBcCkBAIC0xMjcsNyArMTI4LDcgQEAKICAgICAgIGNtZF9ib290YXMgPSAkKENST1NTMzJDQykgLVdwLC1NRCwkKGRlcGZpbGUpICQoQk9PVEFGTEFHUykgLWMgLW8gJEAgJDwKIAogcXVpZXRfY21kX2Jvb3RhciA9IEJPT1RBUiAgJEAKLSAgICAgIGNtZF9ib290YXIgPSAkKENST1NTMzJBUikgLWNyICRALiQkJCQgJChmaWx0ZXItb3V0IEZPUkNFLCReKTsgbXYgJEAuJCQkJCAkQAorICAgICAgY21kX2Jvb3RhciA9ICQoQ1JPU1MzMkFSKSAtY3IkKEtCVUlMRF9BUkZMQUdTKSAkQC4kJCQkICQoZmlsdGVyLW91dCBGT1JDRSwkXik7IG12ICRALiQkJCQgJEAKIAogJChvYmotbGliZmR0KTogJChvYmopLyUubzogJChzcmN0cmVlKS9zY3JpcHRzL2R0Yy9saWJmZHQvJS5jIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWRfZGVwLGJvb3RjYykKQEAgLTE4Miw2ICsxODMsNyBAQAogaW1hZ2UtJChDT05GSUdfUFBDX1BSUE1DMjgwMCkJCSs9IGR0YkltYWdlLnBycG1jMjgwMAogaW1hZ2UtJChDT05GSUdfUFBDX0lTRVJJRVMpCQkrPSB6SW1hZ2UuaXNlcmllcwogaW1hZ2UtJChDT05GSUdfREVGQVVMVF9VSU1BR0UpCQkrPSB1SW1hZ2UKK2ltYWdlLSQoQ09ORklHX0VQQVBSX0JPT1QpCQkrPSB6SW1hZ2UuZXBhcHIKIAogIwogIyBUYXJnZXRzIHdoaWNoIGVtYmVkIGEgZGV2aWNlIHRyZWUgYmxvYgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvY3J0MC5TIGIvYXJjaC9wb3dlcnBjL2Jvb3QvY3J0MC5TCmluZGV4IGYxYzRkZmMuLjBmNzQyOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2NydDAuUworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9jcnQwLlMKQEAgLTYsMTYgKzYsMjggQEAKICAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCi0gKiBOT1RFOiB0aGlzIGNvZGUgcnVucyBpbiAzMiBiaXQgbW9kZSBhbmQgaXMgcGFja2FnZWQgYXMgRUxGMzIuCisgKiBOT1RFOiB0aGlzIGNvZGUgcnVucyBpbiAzMiBiaXQgbW9kZSwgaXMgcG9zaXRpb24taW5kZXBlbmRlbnQsCisgKiBhbmQgaXMgcGFja2FnZWQgYXMgRUxGMzIuCiAgKi8KIAogI2luY2x1ZGUgInBwY19hc20uaCIKIAogCS50ZXh0Ci0JLyogYSBwcm9jZWR1cmUgZGVzY3JpcHRvciB1c2VkIHdoZW4gYm9vdGluZyB0aGlzIGFzIGEgQ09GRiBmaWxlICovCisJLyogQSBwcm9jZWR1cmUgZGVzY3JpcHRvciB1c2VkIHdoZW4gYm9vdGluZyB0aGlzIGFzIGEgQ09GRiBmaWxlLgorCSAqIFdoZW4gbWFraW5nIENPRkYsIHRoaXMgY29tZXMgZmlyc3QgaW4gdGhlIGxpbmsgYW5kIHdlJ3JlCisJICogbGlua2VkIGF0IDB4NTAwMDAwLgorCSAqLwogCS5nbG9ibAlfemltYWdlX3N0YXJ0X29wZAogX3ppbWFnZV9zdGFydF9vcGQ6Ci0JLmxvbmcJX3ppbWFnZV9zdGFydCwgMCwgMCwgMAorCS5sb25nCTB4NTAwMDAwLCAwLCAwLCAwCisKK3Bfc3RhcnQ6CS5sb25nCV9zdGFydAorcF9ldGV4dDoJLmxvbmcJX2V0ZXh0CitwX2Jzc19zdGFydDoJLmxvbmcJX19ic3Nfc3RhcnQKK3BfZW5kOgkJLmxvbmcJX2VuZAorCisJLndlYWsJX3BsYXRmb3JtX3N0YWNrX3RvcAorcF9wc3RhY2s6CS5sb25nCV9wbGF0Zm9ybV9zdGFja190b3AKIAogCS53ZWFrCV96aW1hZ2Vfc3RhcnQKIAkuZ2xvYmwJX3ppbWFnZV9zdGFydApAQCAtMjQsMzcgKzM2LDY1IEBACiBfemltYWdlX3N0YXJ0X2xpYjoKIAkvKiBXb3JrIG91dCB0aGUgb2Zmc2V0IGJldHdlZW4gdGhlIGFkZHJlc3Mgd2Ugd2VyZSBsaW5rZWQgYXQKIAkgICBhbmQgdGhlIGFkZHJlc3Mgd2hlcmUgd2UncmUgcnVubmluZy4gKi8KLQlibAkxZgotMToJbWZscglyMAotCWxpcwlyOSwxYkBoYQotCWFkZGkJcjkscjksMWJAbAotCXN1YmYuCXIwLHI5LHIwCi0JYmVxCTNmCQkvKiBpZiBydW5uaW5nIGF0IHNhbWUgYWRkcmVzcyBhcyBsaW5rZWQgKi8KKwlibAkuKzQKK3BfYmFzZToJbWZscglyMTAJCS8qIHIxMCBub3cgcG9pbnRzIHRvIHJ1bnRpbWUgYWRkciBvZiBwX2Jhc2UgKi8KKwkvKiBncmFiIHRoZSBsaW5rIGFkZHJlc3Mgb2YgdGhlIGR5bmFtaWMgc2VjdGlvbiBpbiByMTEgKi8KKwlhZGRpcwlyMTEscjEwLChfR0xPQkFMX09GRlNFVF9UQUJMRV8tcF9iYXNlKUBoYQorCWx3eglyMTEsKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXy1wX2Jhc2UpQGwocjExKQorCWNtcHdpCXIxMSwwCisJYmVxCTNmCQkvKiBpZiBub3QgbGlua2VkIC1waWUgKi8KKwkvKiBnZXQgdGhlIHJ1bnRpbWUgYWRkcmVzcyBvZiB0aGUgZHluYW1pYyBzZWN0aW9uIGluIHIxMiAqLworCS53ZWFrCV9fZHluYW1pY19zdGFydAorCWFkZGlzCXIxMixyMTAsKF9fZHluYW1pY19zdGFydC1wX2Jhc2UpQGhhCisJYWRkaQlyMTIscjEyLChfX2R5bmFtaWNfc3RhcnQtcF9iYXNlKUBsCisJc3ViZglyMTEscjExLHIxMgkvKiBydW50aW1lIC0gbGlua3RpbWUgb2Zmc2V0ICovCiAKLQkvKiBUaGUgLmdvdDIgc2VjdGlvbiBjb250YWlucyBhIGxpc3Qgb2YgYWRkcmVzc2VzLCBzbyBhZGQKLQkgICB0aGUgYWRkcmVzcyBvZmZzZXQgb250byBlYWNoIGVudHJ5LiAqLwotCWxpcwlyOSxfX2dvdDJfc3RhcnRAaGEKLQlhZGRpCXI5LHI5LF9fZ290Ml9zdGFydEBsCi0JbGlzCXI4LF9fZ290Ml9lbmRAaGEKLQlhZGRpCXI4LHI4LF9fZ290Ml9lbmRAbAotCXN1YmYuCXI4LHI5LHI4CisJLyogVGhlIGR5bmFtaWMgc2VjdGlvbiBjb250YWlucyBhIHNlcmllcyBvZiB0YWdnZWQgZW50cmllcy4KKwkgKiBXZSBuZWVkIHRoZSBSRUxBIGFuZCBSRUxBQ09VTlQgZW50cmllcy4gKi8KK1JFTEEgPSA3CitSRUxBQ09VTlQgPSAweDZmZmZmZmY5CisJbGkJcjksMAorCWxpCXIwLDAKKzk6CWx3eglyOCwwKHIxMikJLyogZ2V0IHRhZyAqLworCWNtcHdpCXI4LDAKKwliZXEJMTBmCQkvKiBlbmQgb2YgbGlzdCAqLworCWNtcHdpCXI4LFJFTEEKKwlibmUJMTFmCisJbHd6CXI5LDQocjEyKQkvKiBnZXQgUkVMQSBwb2ludGVyIGluIHI5ICovCisJYgkxMmYKKzExOglhZGRpcwlyOCxyOCwoLVJFTEFDT1VOVClAaGEKKwljbXB3aQlyOCxSRUxBQ09VTlRAbAorCWJuZQkxMmYKKwlsd3oJcjAsNChyMTIpCS8qIGdldCBSRUxBQ09VTlQgdmFsdWUgaW4gcjAgKi8KKzEyOglhZGRpCXIxMixyMTIsOAorCWIJOWIKKworCS8qIFRoZSByZWxvY2F0aW9uIHNlY3Rpb24gY29udGFpbnMgYSBsaXN0IG9mIHJlbG9jYXRpb25zLgorCSAqIFdlIG5vdyBkbyB0aGUgUl9QUENfUkVMQVRJVkUgb25lcywgd2hpY2ggcG9pbnQgdG8gd29yZHMKKwkgKiB3aGljaCBuZWVkIHRvIGJlIGluaXRpYWxpemVkIHdpdGggYWRkZW5kICsgb2Zmc2V0LgorCSAqIFRoZSBSX1BQQ19SRUxBVElWRSBvbmVzIGNvbWUgZmlyc3QgYW5kIHRoZXJlIGFyZSBSRUxBQ09VTlQKKwkgKiBvZiB0aGVtLiAqLworMTA6CS8qIHNraXAgcmVsb2NhdGlvbiBpZiB3ZSBkb24ndCBoYXZlIGJvdGggKi8KKwljbXB3aQlyMCwwCiAJYmVxCTNmCi0Jc3J3aS4JcjgscjgsMgotCW10Y3RyCXI4Ci0JYWRkCXI5LHIwLHI5Ci0yOglsd3oJcjgsMChyOSkKLQlhZGQJcjgscjgscjAKLQlzdHcJcjgsMChyOSkKLQlhZGRpCXI5LHI5LDQKKwljbXB3aQlyOSwwCisJYmVxCTNmCisKKwlhZGQJcjkscjkscjExCS8qIFJlbG9jYXRlIFJFTEEgcG9pbnRlciAqLworCW10Y3RyCXIwCisyOglsYnoJcjAsNCszKHI5KQkvKiBFTEYzMl9SX0lORk8ocmVsb2MtPnJfaW5mbykgKi8KKwljbXB3aQlyMCwyMgkJLyogUl9QUENfUkVMQVRJVkUgKi8KKwlibmUJM2YKKwlsd3oJcjEyLDAocjkpCS8qIHJlbG9jLT5yX29mZnNldCAqLworCWx3eglyMCw4KHI5KQkvKiByZWxvYy0+cl9hZGRlbmQgKi8KKwlhZGQJcjAscjAscjExCisJc3R3eAlyMCxyMTEscjEyCisJYWRkaQlyOSxyOSwxMgogCWJkbnoJMmIKIAogCS8qIERvIGEgY2FjaGUgZmx1c2ggZm9yIG91ciB0ZXh0LCBpbiBjYXNlIHRoZSBsb2FkZXIgZGlkbid0ICovCi0zOglsaXMJcjksX3N0YXJ0QGhhCi0JYWRkaQlyOSxyOSxfc3RhcnRAbAotCWFkZAlyOSxyMCxyOQotCWxpcwlyOCxfZXRleHRAaGEKLQlhZGRpCXI4LHI4LF9ldGV4dEBsCi0JYWRkCXI4LHIwLHI4CiszOglsd3oJcjkscF9zdGFydC1wX2Jhc2UocjEwKQkvKiBub3RlOiB0aGVzZSBhcmUgcmVsb2NhdGVkIG5vdyAqLworCWx3eglyOCxwX2V0ZXh0LXBfYmFzZShyMTApCiA0OglkY2JmCXIwLHI5CiAJaWNiaQlyMCxyOQogCWFkZGkJcjkscjksMHgyMApAQCAtNjQsMjcgKzEwNCwxOSBAQAogCWlzeW5jCiAKIAkvKiBDbGVhciB0aGUgQlNTICovCi0JbGlzCXI5LF9fYnNzX3N0YXJ0QGhhCi0JYWRkaQlyOSxyOSxfX2Jzc19zdGFydEBsCi0JYWRkCXI5LHIwLHI5Ci0JbGlzCXI4LF9lbmRAaGEKLQlhZGRpCXI4LHI4LF9lbmRAbAotCWFkZAlyOCxyMCxyOAotCWxpCXIxMCwwCi01OglzdHcJcjEwLDAocjkpCisJbHd6CXI5LHBfYnNzX3N0YXJ0LXBfYmFzZShyMTApCisJbHd6CXI4LHBfZW5kLXBfYmFzZShyMTApCisJbGkJcjAsMAorNToJc3R3CXIwLDAocjkpCiAJYWRkaQlyOSxyOSw0CiAJY21wbHcJY3IwLHI5LHI4CiAJYmx0CTViCiAKIAkvKiBQb3NzaWJseSBzZXQgdXAgYSBjdXN0b20gc3RhY2sgKi8KLS53ZWFrCV9wbGF0Zm9ybV9zdGFja190b3AKLQlsaXMJcjgsX3BsYXRmb3JtX3N0YWNrX3RvcEBoYQotCWFkZGkJcjgscjgsX3BsYXRmb3JtX3N0YWNrX3RvcEBsCisJbHd6CXI4LHBfcHN0YWNrLXBfYmFzZShyMTApCiAJY21wd2kJcjgsMAogCWJlcQk2ZgotCWFkZAlyOCxyMCxyOAogCWx3eglyMSwwKHI4KQotCWFkZAlyMSxyMCxyMQogCWxpCXIwLDAKIAlzdHd1CXIwLC0xNihyMSkJLyogZXN0YWJsaXNoIGEgc3RhY2sgZnJhbWUgKi8KIDY6CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDEwMjByZGIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AxMDIwcmRiLmR0cwppbmRleCBlMDY2OGY4Li5kNmE4YWU0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDEwMjByZGIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMTAyMHJkYi5kdHMKQEAgLTksMTIgKzksMTEgQEAKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotL2R0cy12MS87CisvaW5jbHVkZS8gInAxMDIwc2kuZHRzaSIKKwogLyB7Ci0JbW9kZWwgPSAiZnNsLFAxMDIwIjsKKwltb2RlbCA9ICJmc2wsUDEwMjBSREIiOwogCWNvbXBhdGlibGUgPSAiZnNsLFAxMDIwUkRCIjsKLQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKLQkjc2l6ZS1jZWxscyA9IDwyPjsKIAogCWFsaWFzZXMgewogCQlzZXJpYWwwID0gJnNlcmlhbDA7CkBAIC0yNiwzNCArMjUsMTEgQEAKIAkJcGNpMSA9ICZwY2kxOwogCX07CiAKLQljcHVzIHsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCSNzaXplLWNlbGxzID0gPDA+OwotCi0JCVBvd2VyUEMsUDEwMjBAMCB7Ci0JCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwotCQkJcmVnID0gPDB4MD47Ci0JCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47Ci0JCX07Ci0KLQkJUG93ZXJQQyxQMTAyMEAxIHsKLQkJCWRldmljZV90eXBlID0gImNwdSI7Ci0JCQlyZWcgPSA8MHgxPjsKLQkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyPjsKLQkJfTsKLQl9OwotCiAJbWVtb3J5IHsKIAkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKIAl9OwogCiAJbG9jYWxidXNAZmZlMDUwMDAgewotCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKLQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCWNvbXBhdGlibGUgPSAiZnNsLHAxMDIwLWVsYmMiLCAiZnNsLGVsYmMiLCAic2ltcGxlLWJ1cyI7Ci0JCXJlZyA9IDwwIDB4ZmZlMDUwMDAgMCAweDEwMDA+OwotCQlpbnRlcnJ1cHRzID0gPDE5IDI+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAogCQkvKiBOT1IsIE5BTkQgRmxhc2hlcyBhbmQgVml0ZXNzZSA1IHBvcnQgTDIgc3dpdGNoICovCiAJCXJhbmdlcyA9IDwweDAgMHgwIDB4MCAweGVmMDAwMDAwIDB4MDEwMDAwMDAKQEAgLTE2NSw4OCArMTQxLDE0IEBACiAJfTsKIAogCXNvY0BmZmUwMDAwMCB7Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJZGV2aWNlX3R5cGUgPSAic29jIjsKLQkJY29tcGF0aWJsZSA9ICJmc2wscDEwMjAtaW1tciIsICJzaW1wbGUtYnVzIjsKLQkJcmFuZ2VzID0gPDB4MCAgMHgwIDB4ZmZlMDAwMDAgMHgxMDAwMDA+OwotCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gRmlsbGVkIG91dCBieSB1Ym9vdC4KLQotCQllY20tbGF3QDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wsZWNtLWxhdyI7Ci0JCQlyZWcgPSA8MHgwIDB4MTAwMD47Ci0JCQlmc2wsbnVtLWxhd3MgPSA8MTI+OwotCQl9OwotCi0JCWVjbUAxMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLHAxMDIwLWVjbSIsICJmc2wsZWNtIjsKLQkJCXJlZyA9IDwweDEwMDAgMHgxMDAwPjsKLQkJCWludGVycnVwdHMgPSA8MTYgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJfTsKLQotCQltZW1vcnktY29udHJvbGxlckAyMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLHAxMDIwLW1lbW9yeS1jb250cm9sbGVyIjsKLQkJCXJlZyA9IDwweDIwMDAgMHgxMDAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJaW50ZXJydXB0cyA9IDwxNiAyPjsKLQkJfTsKLQogCQlpMmNAMzAwMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY2VsbC1pbmRleCA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7Ci0JCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8NDMgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCWRmc3JyOwogCQkJcnRjQDY4IHsKIAkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMzkiOwogCQkJCXJlZyA9IDwweDY4PjsKIAkJCX07CiAJCX07CiAKLQkJaTJjQDMxMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNlbGwtaW5kZXggPSA8MT47Ci0JCQljb21wYXRpYmxlID0gImZzbC1pMmMiOwotCQkJcmVnID0gPDB4MzEwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDQzIDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlkZnNycjsKLQkJfTsKLQotCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKLQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7Ci0JCQlyZWcgPSA8MHg0NTAwIDB4MTAwPjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKLQkJCWludGVycnVwdHMgPSA8NDIgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJfTsKLQotCQlzZXJpYWwxOiBzZXJpYWxANDYwMCB7Ci0JCQljZWxsLWluZGV4ID0gPDE+OwotCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKLQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7Ci0JCQlyZWcgPSA8MHg0NjAwIDB4MTAwPjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKLQkJCWludGVycnVwdHMgPSA8NDIgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJfTsKLQogCQlzcGlANzAwMCB7Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGVzcGkiOwotCQkJcmVnID0gPDB4NzAwMCAweDEwMDA+OwotCQkJaW50ZXJydXB0cyA9IDw1OSAweDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQltb2RlID0gImNwdSI7CiAKIAkJCWZzbF9tMjVwODBAMCB7CiAJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC0yOTQsNjYgKzE5Niw3IEBACiAJCQl9OwogCQl9OwogCi0JCWdwaW86IGdwaW8tY29udHJvbGxlckBmMDAwIHsKLQkJCSNncGlvLWNlbGxzID0gPDI+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1ncGlvIjsKLQkJCXJlZyA9IDwweGYwMDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDw0NyAweDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlncGlvLWNvbnRyb2xsZXI7Ci0JCX07Ci0KLQkJTDI6IGwyLWNhY2hlLWNvbnRyb2xsZXJAMjAwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wscDEwMjAtbDItY2FjaGUtY29udHJvbGxlciI7Ci0JCQlyZWcgPSA8MHgyMDAwMCAweDEwMDA+OwotCQkJY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKLQkJCWNhY2hlLXNpemUgPSA8MHg0MDAwMD47IC8vIEwyLDI1NksKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJaW50ZXJydXB0cyA9IDwxNiAyPjsKLQkJfTsKLQotCQlkbWFAMjEzMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hIjsKLQkJCXJlZyA9IDwweDIxMzAwIDB4ND47Ci0JCQlyYW5nZXMgPSA8MHgwIDB4MjExMDAgMHgyMDA+OwotCQkJY2VsbC1pbmRleCA9IDwwPjsKLQkJCWRtYS1jaGFubmVsQDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOwotCQkJCXJlZyA9IDwweDAgMHg4MD47Ci0JCQkJY2VsbC1pbmRleCA9IDwwPjsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDIwIDI+OwotCQkJfTsKLQkJCWRtYS1jaGFubmVsQDgwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKLQkJCQlyZWcgPSA8MHg4MCAweDgwPjsKLQkJCQljZWxsLWluZGV4ID0gPDE+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MjEgMj47Ci0JCQl9OwotCQkJZG1hLWNoYW5uZWxAMTAwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKLQkJCQlyZWcgPSA8MHgxMDAgMHg4MD47Ci0JCQkJY2VsbC1pbmRleCA9IDwyPjsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDIyIDI+OwotCQkJfTsKLQkJCWRtYS1jaGFubmVsQDE4MCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7Ci0JCQkJcmVnID0gPDB4MTgwIDB4ODA+OwotCQkJCWNlbGwtaW5kZXggPSA8Mz47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwyMyAyPjsKLQkJCX07Ci0JCX07Ci0KIAkJbWRpb0AyNDAwMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZXRzZWMyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwIDB4YjAwMzAgMHg0PjsKIAogCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwpAQCAtMzY5LDEwICsyMTIsNiBAQAogCQl9OwogCiAJCW1kaW9AMjUwMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGV0c2VjMi10YmkiOwotCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwIDB4YjEwMzAgMHg0PjsKIAogCQkJdGJpMDogdGJpLXBoeUAxMSB7CiAJCQkJcmVnID0gPDB4MTE+OwpAQCAtMzgxLDk3ICsyMjAsMjUgQEAKIAkJfTsKIAogCQllbmV0MDogZXRoZXJuZXRAYjAwMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwotCQkJbW9kZWwgPSAiZVRTRUMiOwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZXRzZWMyIjsKLQkJCWZzbCxudW1fcnhfcXVldWVzID0gPDB4OD47Ci0JCQlmc2wsbnVtX3R4X3F1ZXVlcyA9IDwweDg+OwotCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCWZpeGVkLWxpbmsgPSA8MSAxIDEwMDAgMCAwPjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOwogCi0JCQlxdWV1ZS1ncm91cEAwIHsKLQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJCQlyZWcgPSA8MHhiMDAwMCAweDEwMDA+OwotCQkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OwotCQkJfTsKLQotCQkJcXVldWUtZ3JvdXBAMSB7Ci0JCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCQkJcmVnID0gPDB4YjQwMDAgMHgxMDAwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDE3IDIgMTggMiAyNCAyPjsKLQkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QGIxMDAwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKLQkJCW1vZGVsID0gImVUU0VDIjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGV0c2VjMiI7Ci0JCQlmc2wsbnVtX3J4X3F1ZXVlcyA9IDwweDg+OwotCQkJZnNsLG51bV90eF9xdWV1ZXMgPSA8MHg4PjsKLQkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJzZ21paSI7CiAKLQkJCXF1ZXVlLWdyb3VwQDAgewotCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJCXJlZyA9IDwweGIxMDAwIDB4MTAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47Ci0JCQl9OwotCi0JCQlxdWV1ZS1ncm91cEAxIHsKLQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJCQlyZWcgPSA8MHhiNTAwMCAweDEwMDA+OwotCQkJCWludGVycnVwdHMgPSA8NTEgMiA1MiAyIDY3IDI+OwotCQkJfTsKIAkJfTsKIAogCQllbmV0MjogZXRoZXJuZXRAYjIwMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwotCQkJbW9kZWwgPSAiZVRTRUMiOwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZXRzZWMyIjsKLQkJCWZzbCxudW1fcnhfcXVldWVzID0gPDB4OD47Ci0JCQlmc2wsbnVtX3R4X3F1ZXVlcyA9IDwweDg+OwotCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CiAKLQkJCXF1ZXVlLWdyb3VwQDAgewotCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJCXJlZyA9IDwweGIyMDAwIDB4MTAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwzMSAyIDMyIDIgMzMgMj47Ci0JCQl9OwotCi0JCQlxdWV1ZS1ncm91cEAxIHsKLQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJCQlyZWcgPSA8MHhiNjAwMCAweDEwMDA+OwotCQkJCWludGVycnVwdHMgPSA8MjUgMiAyNiAyIDI3IDI+OwotCQkJfTsKIAkJfTsKIAogCQl1c2JAMjIwMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLXVzYjItZHIiOwotCQkJcmVnID0gPDB4MjIwMDAgMHgxMDAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJaW50ZXJydXB0cyA9IDwyOCAweDI+OwogCQkJcGh5X3R5cGUgPSAidWxwaSI7CiAJCX07CiAKQEAgLTQ4MSw4MiArMjQ4LDIzIEBACiAJCSAgIGl0IGVuYWJsZXMgVVNCMi4gT1RPSCwgVS1Cb290IGRvZXMgY3JlYXRlIGEgbmV3IG5vZGUKIAkJICAgd2hlbiB0aGVyZSBpc24ndCBhbnkuIFNvLCBqdXN0IGNvbW1lbnQgaXQgb3V0LgogCQl1c2JAMjMwMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLXVzYjItZHIiOwotCQkJcmVnID0gPDB4MjMwMDAgMHgxMDAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJaW50ZXJydXB0cyA9IDw0NiAweDI+OwogCQkJcGh5X3R5cGUgPSAidWxwaSI7CiAJCX07CiAJCSovCiAKLQkJc2RoY2lAMmUwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wscDEwMjAtZXNkaGMiLCAiZnNsLGVzZGhjIjsKLQkJCXJlZyA9IDwweDJlMDAwIDB4MTAwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDcyIDB4Mj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCS8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKLQkJfTsKLQotCQljcnlwdG9AMzAwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wsc2VjMy4xIiwgImZzbCxzZWMzLjAiLCAiZnNsLHNlYzIuNCIsCi0JCQkJICAgICAiZnNsLHNlYzIuMiIsICJmc2wsc2VjMi4xIiwgImZzbCxzZWMyLjAiOwotCQkJcmVnID0gPDB4MzAwMDAgMHgxMDAwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDQ1IDIgNTggMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCWZzbCxudW0tY2hhbm5lbHMgPSA8ND47Ci0JCQlmc2wsY2hhbm5lbC1maWZvLWxlbiA9IDwyND47Ci0JCQlmc2wsZXhlYy11bml0cy1tYXNrID0gPDB4YmZlPjsKLQkJCWZzbCxkZXNjcmlwdG9yLXR5cGVzLW1hc2sgPSA8MHgzYWIwZWJmPjsKLQkJfTsKLQotCQltcGljOiBwaWNANDAwMDAgewotCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKLQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47Ci0JCQlyZWcgPSA8MHg0MDAwMCAweDQwMDAwPjsKLQkJCWNvbXBhdGlibGUgPSAiY2hycCxvcGVuLXBpYyI7Ci0JCQlkZXZpY2VfdHlwZSA9ICJvcGVuLXBpYyI7Ci0JCX07Ci0KLQkJbXNpQDQxNjAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLHAxMDIwLW1zaSIsICJmc2wsbXBpYy1tc2kiOwotCQkJcmVnID0gPDB4NDE2MDAgMHg4MD47Ci0JCQltc2ktYXZhaWxhYmxlLXJhbmdlcyA9IDwwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8Ci0JCQkJMHhlMCAwCi0JCQkJMHhlMSAwCi0JCQkJMHhlMiAwCi0JCQkJMHhlMyAwCi0JCQkJMHhlNCAwCi0JCQkJMHhlNSAwCi0JCQkJMHhlNiAwCi0JCQkJMHhlNyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQl9OwotCi0JCWdsb2JhbC11dGlsaXRpZXNAZTAwMDAgewkvL2dsb2JhbCB1dGlsaXRpZXMgYmxvY2sKLQkJCWNvbXBhdGlibGUgPSAiZnNsLHAxMDIwLWd1dHMiOwotCQkJcmVnID0gPDB4ZTAwMDAgMHgxMDAwPjsKLQkJCWZzbCxoYXMtcnN0Y3I7Ci0JCX07CiAJfTsKIAogCXBjaTA6IHBjaWVAZmZlMDkwMDAgewotCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ4LXBjaWUiOwotCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwotCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwyPjsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47Ci0JCXJlZyA9IDwwIDB4ZmZlMDkwMDAgMCAweDEwMDA+OwotCQlidXMtcmFuZ2UgPSA8MCAyNTU+OwogCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweGEwMDAwMDAwIDAgMHhhMDAwMDAwMCAweDAgMHgyMDAwMDAwMAogCQkJICAweDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMCAweGZmYzEwMDAwIDB4MCAweDEwMDAwPjsKLQkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCWludGVycnVwdHMgPSA8MTYgMj47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMHgwIDB4MCAweDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPAorCQkJLyogSURTRUwgMHgwICovCisJCQkwMDAwIDB4MCAweDAgMHgxICZtcGljIDB4NCAweDEKKwkJCTAwMDAgMHgwIDB4MCAweDIgJm1waWMgMHg1IDB4MQorCQkJMDAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDYgMHgxCisJCQkwMDAwIDB4MCAweDAgMHg0ICZtcGljIDB4NyAweDEKKwkJCT47CiAJCXBjaWVAMCB7CiAJCQlyZWcgPSA8MHgwIDB4MCAweDAgMHgwIDB4MD47CiAJCQkjc2l6ZS1jZWxscyA9IDwyPjsKQEAgLTU3MywxOCArMjgxLDE2IEBACiAJfTsKIAogCXBjaTE6IHBjaWVAZmZlMGEwMDAgewotCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ4LXBjaWUiOwotCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwotCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwyPjsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47Ci0JCXJlZyA9IDwwIDB4ZmZlMGEwMDAgMCAweDEwMDA+OwotCQlidXMtcmFuZ2UgPSA8MCAyNTU+OwogCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweDgwMDAwMDAwIDAgMHg4MDAwMDAwMCAweDAgMHgyMDAwMDAwMAogCQkJICAweDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMCAweGZmYzAwMDAwIDB4MCAweDEwMDAwPjsKLQkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCWludGVycnVwdHMgPSA8MTYgMj47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMHgwIDB4MCAweDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPAorCQkJLyogSURTRUwgMHgwICovCisJCQkwMDAwIDB4MCAweDAgMHgxICZtcGljIDB4MCAweDEKKwkJCTAwMDAgMHgwIDB4MCAweDIgJm1waWMgMHgxIDB4MQorCQkJMDAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDIgMHgxCisJCQkwMDAwIDB4MCAweDAgMHg0ICZtcGljIDB4MyAweDEKKwkJCT47CiAJCXBjaWVAMCB7CiAJCQlyZWcgPSA8MHgwIDB4MCAweDAgMHgwIDB4MD47CiAJCQkjc2l6ZS1jZWxscyA9IDwyPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMTAyMHJkYl9jYW1wX2NvcmUwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMTAyMHJkYl9jYW1wX2NvcmUwLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGJmN2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AxMDIwcmRiX2NhbXBfY29yZTAuZHRzCkBAIC0wLDAgKzEsMjEzIEBACisvKgorICogUDEwMjAgUkRCICBDb3JlMCBEZXZpY2UgVHJlZSBTb3VyY2UgaW4gQ0FNUCBtb2RlLgorICoKKyAqIEluIENBTVAgbW9kZSwgZWFjaCBjb3JlIG5lZWRzIHRvIGhhdmUgaXRzIG93biBkdHMuIE9ubHkgbXBpYyBhbmQgTDIgY2FjaGUKKyAqIGNhbiBiZSBzaGFyZWQsIGFsbCB0aGUgb3RoZXIgZGV2aWNlcyBtdXN0IGJlIGFzc2lnbmVkIHRvIG9uZSBjb3JlIG9ubHkuCisgKiBUaGlzIGR0cyBmaWxlIGFsbG93cyBjb3JlMCB0byBoYXZlIG1lbW9yeSwgbDIsIGkyYywgc3BpLCBncGlvLCB0ZG0sIGRtYSwgdXNiLAorICogZXRoMSwgZXRoMiwgc2RoYywgY3J5cHRvLCBnbG9iYWwtdXRpbCwgbWVzc2FnZSwgcGNpMCwgcGNpMSwgbXNpLgorICoKKyAqIFBsZWFzZSBub3RlIHRvIGFkZCAiLWIgMCIgZm9yIGNvcmUwJ3MgZHRzIGNvbXBpbGluZy4KKyAqCisgKiBDb3B5cmlnaHQgMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvaW5jbHVkZS8gInAxMDIwc2kuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiZnNsLFAxMDIwUkRCIjsKKwljb21wYXRpYmxlID0gImZzbCxQMTAyMFJEQiIsICJmc2wsTVBDODVYWFJEQi1DQU1QIjsKKworCWFsaWFzZXMgeworCQlldGhlcm5ldDEgPSAmZW5ldDE7CisJCWV0aGVybmV0MiA9ICZlbmV0MjsKKwkJc2VyaWFsMCA9ICZzZXJpYWwwOworCQlwY2kwID0gJnBjaTA7CisJCXBjaTEgPSAmcGNpMTsKKwl9OworCisJY3B1cyB7CisJCVBvd2VyUEMsUDEwMjBAMSB7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJfTsKKworCWxvY2FsYnVzQGZmZTA1MDAwIHsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJc29jQGZmZTAwMDAwIHsKKwkJaTJjQDMwMDAgeworCQkJcnRjQDY4IHsKKwkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMzkiOworCQkJCXJlZyA9IDwweDY4PjsKKwkJCX07CisJCX07CisKKwkJc2VyaWFsMTogc2VyaWFsQDQ2MDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlzcGlANzAwMCB7CisJCQlmc2xfbTI1cDgwQDAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVzcGktZmxhc2giOworCQkJCXJlZyA9IDwwPjsKKwkJCQlsaW51eCxtb2RhbGlhcyA9ICJmc2xfbTI1cDgwIjsKKwkJCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDw0MDAwMDAwMD47CisKKwkJCQlwYXJ0aXRpb25AMCB7CisJCQkJCS8qIDUxMktCIGZvciB1LWJvb3QgQm9vdGxvYWRlciBJbWFnZSAqLworCQkJCQlyZWcgPSA8MHgwIDB4MDAwODAwMDA+OworCQkJCQlsYWJlbCA9ICJTUEkgKFJPKSBVLUJvb3QgSW1hZ2UiOworCQkJCQlyZWFkLW9ubHk7CisJCQkJfTsKKworCQkJCXBhcnRpdGlvbkA4MDAwMCB7CisJCQkJCS8qIDUxMktCIGZvciBEVEIgSW1hZ2UgKi8KKwkJCQkJcmVnID0gPDB4MDAwODAwMDAgMHgwMDA4MDAwMD47CisJCQkJCWxhYmVsID0gIlNQSSAoUk8pIERUQiBJbWFnZSI7CisJCQkJCXJlYWQtb25seTsKKwkJCQl9OworCisJCQkJcGFydGl0aW9uQDEwMDAwMCB7CisJCQkJCS8qIDRNQiBmb3IgTGludXggS2VybmVsIEltYWdlICovCisJCQkJCXJlZyA9IDwweDAwMTAwMDAwIDB4MDA0MDAwMDA+OworCQkJCQlsYWJlbCA9ICJTUEkgKFJPKSBMaW51eCBLZXJuZWwgSW1hZ2UiOworCQkJCQlyZWFkLW9ubHk7CisJCQkJfTsKKworCQkJCXBhcnRpdGlvbkA1MDAwMDAgeworCQkJCQkvKiA0TUIgZm9yIENvbXByZXNzZWQgUkZTIEltYWdlICovCisJCQkJCXJlZyA9IDwweDAwNTAwMDAwIDB4MDA0MDAwMDA+OworCQkJCQlsYWJlbCA9ICJTUEkgKFJPKSBDb21wcmVzc2VkIFJGUyBJbWFnZSI7CisJCQkJCXJlYWQtb25seTsKKwkJCQl9OworCisJCQkJcGFydGl0aW9uQDkwMDAwMCB7CisJCQkJCS8qIDdNQiBmb3IgSkZGUzIgYmFzZWQgUkZTICovCisJCQkJCXJlZyA9IDwweDAwOTAwMDAwIDB4MDA3MDAwMDA+OworCQkJCQlsYWJlbCA9ICJTUEkgKFJXKSBKRkZTMiBSRlMiOworCQkJCX07CisJCQl9OworCQl9OworCisJCW1kaW9AMjQwMDAgeworCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MyAxPjsKKwkJCQlyZWcgPSA8MHgwPjsKKwkJCX07CisJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyIDE+OworCQkJCXJlZyA9IDwweDE+OworCQkJfTsKKwkJfTsKKworCQltZGlvQDI1MDAwIHsKKwkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCXJlZyA9IDwweDExPjsKKwkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCX07CisJCX07CisKKwkJZW5ldDA6IGV0aGVybmV0QGIwMDAwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJZW5ldDE6IGV0aGVybmV0QGIxMDAwIHsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CisJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInNnbWlpIjsKKwkJfTsKKworCQllbmV0MjogZXRoZXJuZXRAYjIwMDAgeworCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CisJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKwkJfTsKKworCQl1c2JAMjIwMDAgeworCQkJcGh5X3R5cGUgPSAidWxwaSI7CisJCX07CisKKwkJLyogVVNCMiBpcyBzaGFyZWQgd2l0aCBsb2NhbGJ1cywgc28gaXQgbXVzdCBiZSBkaXNhYmxlZAorCQkgICBieSBkZWZhdWx0LiBXZSBjYW4ndCBwdXQgJ3N0YXR1cyA9ICJkaXNhYmxlZCI7JyBoZXJlCisJCSAgIHNpbmNlIFUtQm9vdCBkb2Vzbid0IGNsZWFyIHRoZSBzdGF0dXMgcHJvcGVydHkgd2hlbgorCQkgICBpdCBlbmFibGVzIFVTQjIuIE9UT0gsIFUtQm9vdCBkb2VzIGNyZWF0ZSBhIG5ldyBub2RlCisJCSAgIHdoZW4gdGhlcmUgaXNuJ3QgYW55LiBTbywganVzdCBjb21tZW50IGl0IG91dC4KKwkJdXNiQDIzMDAwIHsKKwkJCXBoeV90eXBlID0gInVscGkiOworCQl9OworCQkqLworCisJCW1waWM6IHBpY0A0MDAwMCB7CisJCQlwcm90ZWN0ZWQtc291cmNlcyA9IDwKKwkJCTQyIDI5IDMwIDM0CS8qIHNlcmlhbDEsIGVuZXQwLXF1ZXVlLWdyb3VwMCAqLworCQkJMTcgMTggMjQgNDUJLyogZW5ldDAtcXVldWUtZ3JvdXAxLCBjcnlwdG8gKi8KKwkJCT47CisJCX07CisKKwl9OworCisJcGNpMDogcGNpZUBmZmUwOTAwMCB7CisJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YTAwMDAwMDAgMCAweGEwMDAwMDAwIDB4MCAweDIwMDAwMDAwCisJCQkgIDB4MTAwMDAwMCAweDAgMHgwMDAwMDAwMCAwIDB4ZmZjMTAwMDAgMHgwIDB4MTAwMDA+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwKKwkJCS8qIElEU0VMIDB4MCAqLworCQkJMDAwMCAweDAgMHgwIDB4MSAmbXBpYyAweDQgMHgxCisJCQkwMDAwIDB4MCAweDAgMHgyICZtcGljIDB4NSAweDEKKwkJCTAwMDAgMHgwIDB4MCAweDMgJm1waWMgMHg2IDB4MQorCQkJMDAwMCAweDAgMHgwIDB4NCAmbXBpYyAweDcgMHgxCisJCQk+OworCQlwY2llQDAgeworCQkJcmVnID0gPDB4MCAweDAgMHgwIDB4MCAweDA+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweGEwMDAwMDAwCisJCQkJICAweDIwMDAwMDAgMHgwIDB4YTAwMDAwMDAKKwkJCQkgIDB4MCAweDIwMDAwMDAwCisKKwkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJICAweDEwMDAwMDAgMHgwIDB4MAorCQkJCSAgMHgwIDB4MTAwMDAwPjsKKwkJfTsKKwl9OworCisJcGNpMTogcGNpZUBmZmUwYTAwMCB7CisJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMCAweDgwMDAwMDAwIDB4MCAweDIwMDAwMDAwCisJCQkgIDB4MTAwMDAwMCAweDAgMHgwMDAwMDAwMCAwIDB4ZmZjMDAwMDAgMHgwIDB4MTAwMDA+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwKKwkJCS8qIElEU0VMIDB4MCAqLworCQkJMDAwMCAweDAgMHgwIDB4MSAmbXBpYyAweDAgMHgxCisJCQkwMDAwIDB4MCAweDAgMHgyICZtcGljIDB4MSAweDEKKwkJCTAwMDAgMHgwIDB4MCAweDMgJm1waWMgMHgyIDB4MQorCQkJMDAwMCAweDAgMHgwIDB4NCAmbXBpYyAweDMgMHgxCisJCQk+OworCQlwY2llQDAgeworCQkJcmVnID0gPDB4MCAweDAgMHgwIDB4MCAweDA+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweDgwMDAwMDAwCisJCQkJICAweDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAKKwkJCQkgIDB4MCAweDIwMDAwMDAwCisKKwkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJICAweDEwMDAwMDAgMHgwIDB4MAorCQkJCSAgMHgwIDB4MTAwMDAwPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMTAyMHJkYl9jYW1wX2NvcmUxLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMTAyMHJkYl9jYW1wX2NvcmUxLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWMwMjIwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AxMDIwcmRiX2NhbXBfY29yZTEuZHRzCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogUDEwMjAgUkRCIENvcmUxIERldmljZSBUcmVlIFNvdXJjZSBpbiBDQU1QIG1vZGUuCisgKgorICogSW4gQ0FNUCBtb2RlLCBlYWNoIGNvcmUgbmVlZHMgdG8gaGF2ZSBpdHMgb3duIGR0cy4gT25seSBtcGljIGFuZCBMMiBjYWNoZQorICogY2FuIGJlIHNoYXJlZCwgYWxsIHRoZSBvdGhlciBkZXZpY2VzIG11c3QgYmUgYXNzaWduZWQgdG8gb25lIGNvcmUgb25seS4KKyAqIFRoaXMgZHRzIGFsbG93cyBjb3JlMSB0byBoYXZlIGwyLCBldGgwLCBjcnlwdG8uCisgKgorICogUGxlYXNlIG5vdGUgdG8gYWRkICItYiAxIiBmb3IgY29yZTEncyBkdHMgY29tcGlsaW5nLgorICoKKyAqIENvcHlyaWdodCAyMDExIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy9pbmNsdWRlLyAicDEwMjBzaS5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJmc2wsUDEwMjBSREIiOworCWNvbXBhdGlibGUgPSAiZnNsLFAxMDIwUkRCIiwgImZzbCxNUEM4NVhYUkRCLUNBTVAiOworCisJYWxpYXNlcyB7CisJCWV0aGVybmV0MCA9ICZlbmV0MDsKKwkJc2VyaWFsMCA9ICZzZXJpYWwxOworCQl9OworCisJY3B1cyB7CisJCVBvd2VyUEMsUDEwMjBAMCB7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJfTsKKworCWxvY2FsYnVzQGZmZTA1MDAwIHsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJc29jQGZmZTAwMDAwIHsKKwkJZWNtLWxhd0AwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJZWNtQDEwMDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQltZW1vcnktY29udHJvbGxlckAyMDAwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjQDMwMDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmNAMzEwMCB7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJc3BpQDcwMDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlncGlvOiBncGlvLWNvbnRyb2xsZXJAZjAwMCB7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWRtYUAyMTMwMCB7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCW1kaW9AMjQwMDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQltZGlvQDI1MDAwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJZW5ldDA6IGV0aGVybmV0QGIwMDAwIHsKKwkJCWZpeGVkLWxpbmsgPSA8MSAxIDEwMDAgMCAwPjsKKwkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCX07CisKKwkJZW5ldDE6IGV0aGVybmV0QGIxMDAwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJZW5ldDI6IGV0aGVybmV0QGIyMDAwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJdXNiQDIyMDAwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJc2RoY2lAMmUwMDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQltcGljOiBwaWNANDAwMDAgeworCQkJcHJvdGVjdGVkLXNvdXJjZXMgPSA8CisJCQkxNiAJCS8qIGVjbSwgbWVtLCBMMiwgcGNpMCwgcGNpMSAqLworCQkJNDMgNDIgNTkJLyogaTJjLCBzZXJpYWwwLCBzcGkgKi8KKwkJCTQ3IDYzIDYyIAkvKiBncGlvLCB0ZG0gKi8KKwkJCTIwIDIxIDIyIDIzCS8qIGRtYSAqLworCQkJMDMgMDIgCQkvKiBtZGlvICovCisJCQkzNSAzNiA0MAkvKiBlbmV0MS1xdWV1ZS1ncm91cDAgKi8KKwkJCTUxIDUyIDY3CS8qIGVuZXQxLXF1ZXVlLWdyb3VwMSAqLworCQkJMzEgMzIgMzMJLyogZW5ldDItcXVldWUtZ3JvdXAwICovCisJCQkyNSAyNiAyNwkvKiBlbmV0Mi1xdWV1ZS1ncm91cDEgKi8KKwkJCTI4IDcyIDU4IAkvKiB1c2IsIHNkaGNpLCBjcnlwdG8gKi8KKwkJCTB4YjAgMHhiMSAweGIyCS8qIG1lc3NhZ2UgKi8KKwkJCTB4YjMgMHhiNCAweGI1CisJCQkweGI2IDB4YjcKKwkJCTB4ZTAgMHhlMSAweGUyCS8qIG1zaSAqLworCQkJMHhlMyAweGU0IDB4ZTUKKwkJCTB4ZTYgMHhlNwkJLyogc2RoY2ksIGNyeXB0byAsIHBjaSAqLworCQkJPjsKKwkJfTsKKworCQltc2lANDE2MDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlnbG9iYWwtdXRpbGl0aWVzQGUwMDAwIHsJLy9nbG9iYWwgdXRpbGl0aWVzIGJsb2NrCisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJfTsKKworCXBjaTA6IHBjaWVAZmZlMDkwMDAgeworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwlwY2kxOiBwY2llQGZmZTBhMDAwIHsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMTAyMHNpLmR0c2kgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDEwMjBzaS5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNWFjYjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDEwMjBzaS5kdHNpCkBAIC0wLDAgKzEsMzc3IEBACisvKgorICogUDEwMjBzaSBEZXZpY2UgVHJlZSBTb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvZHRzLXYxLzsKKy8geworCWNvbXBhdGlibGUgPSAiZnNsLFAxMDIwIjsKKwkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkjc2l6ZS1jZWxscyA9IDwyPjsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJUG93ZXJQQyxQMTAyMEAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MHgwPjsKKwkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyPjsKKwkJfTsKKworCQlQb3dlclBDLFAxMDIwQDEgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwweDE+OworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OworCQl9OworCX07CisKKwlsb2NhbGJ1c0BmZmUwNTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wscDEwMjAtZWxiYyIsICJmc2wsZWxiYyIsICJzaW1wbGUtYnVzIjsKKwkJcmVnID0gPDAgMHhmZmUwNTAwMCAwIDB4MTAwMD47CisJCWludGVycnVwdHMgPSA8MTkgMj47CisJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCX07CisKKwlzb2NAZmZlMDAwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWRldmljZV90eXBlID0gInNvYyI7CisJCWNvbXBhdGlibGUgPSAiZnNsLHAxMDIwLWltbXIiLCAic2ltcGxlLWJ1cyI7CisJCXJhbmdlcyA9IDwweDAgIDB4MCAweGZmZTAwMDAwIDB4MTAwMDAwPjsKKwkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIEZpbGxlZCBvdXQgYnkgdWJvb3QuCisKKwkJZWNtLWxhd0AwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGVjbS1sYXciOworCQkJcmVnID0gPDB4MCAweDEwMDA+OworCQkJZnNsLG51bS1sYXdzID0gPDEyPjsKKwkJfTsKKworCQllY21AMTAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxwMTAyMC1lY20iLCAiZnNsLGVjbSI7CisJCQlyZWcgPSA8MHgxMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDE2IDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKKwkJbWVtb3J5LWNvbnRyb2xsZXJAMjAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxwMTAyMC1tZW1vcnktY29udHJvbGxlciI7CisJCQlyZWcgPSA8MHgyMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8MTYgMj47CisJCX07CisKKwkJaTJjQDMwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJcmVnID0gPDB4MzAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDQzIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlkZnNycjsKKwkJfTsKKworCQlpMmNAMzEwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQlyZWcgPSA8MHgzMTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NDMgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWRmc3JyOworCQl9OworCisJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDwweDQ1MDAgMHgxMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJaW50ZXJydXB0cyA9IDw0MiAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQl9OworCisJCXNlcmlhbDE6IHNlcmlhbEA0NjAwIHsKKwkJCWNlbGwtaW5kZXggPSA8MT47CisJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDwweDQ2MDAgMHgxMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJaW50ZXJydXB0cyA9IDw0MiAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQl9OworCisJCXNwaUA3MDAwIHsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsZXNwaSI7CisJCQlyZWcgPSA8MHg3MDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDU5IDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCW1vZGUgPSAiY3B1IjsKKwkJfTsKKworCQlncGlvOiBncGlvLWNvbnRyb2xsZXJAZjAwMCB7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZ3BpbyI7CisJCQlyZWcgPSA8MHhmMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NDcgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQl9OworCisJCUwyOiBsMi1jYWNoZS1jb250cm9sbGVyQDIwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHAxMDIwLWwyLWNhY2hlLWNvbnRyb2xsZXIiOworCQkJcmVnID0gPDB4MjAwMDAgMHgxMDAwPjsKKwkJCWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQljYWNoZS1zaXplID0gPDB4NDAwMDA+OyAvLyBMMiwyNTZLCisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8MTYgMj47CisJCX07CisKKwkJZG1hQDIxMzAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYSI7CisJCQlyZWcgPSA8MHgyMTMwMCAweDQ+OworCQkJcmFuZ2VzID0gPDB4MCAweDIxMTAwIDB4MjAwPjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlkbWEtY2hhbm5lbEAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyMCAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEA4MCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4ODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIxIDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDEwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyMiAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEAxODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDE4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDM+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjMgMj47CisJCQl9OworCQl9OworCisJCW1kaW9AMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGV0c2VjMi1tZGlvIjsKKwkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMCAweGIwMDMwIDB4ND47CisKKwkJfTsKKworCQltZGlvQDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbCxldHNlYzItdGJpIjsKKwkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMCAweGIxMDMwIDB4ND47CisKKwkJfTsKKworCQllbmV0MDogZXRoZXJuZXRAYjAwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJbW9kZWwgPSAiZVRTRUMiOworCQkJY29tcGF0aWJsZSA9ICJmc2wsZXRzZWMyIjsKKwkJCWZzbCxudW1fcnhfcXVldWVzID0gPDB4OD47CisJCQlmc2wsbnVtX3R4X3F1ZXVlcyA9IDwweDg+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKworCQkJcXVldWUtZ3JvdXBAMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkJcmVnID0gPDB4YjAwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKKwkJCX07CisKKwkJCXF1ZXVlLWdyb3VwQDEgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJCXJlZyA9IDwweGI0MDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDwxNyAyIDE4IDIgMjQgMj47CisJCQl9OworCQl9OworCisJCWVuZXQxOiBldGhlcm5ldEBiMTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJlVFNFQyI7CisJCQljb21wYXRpYmxlID0gImZzbCxldHNlYzIiOworCQkJZnNsLG51bV9yeF9xdWV1ZXMgPSA8MHg4PjsKKwkJCWZzbCxudW1fdHhfcXVldWVzID0gPDB4OD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCisJCQlxdWV1ZS1ncm91cEAwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCQlyZWcgPSA8MHhiMTAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MzUgMiAzNiAyIDQwIDI+OworCQkJfTsKKworCQkJcXVldWUtZ3JvdXBAMSB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkJcmVnID0gPDB4YjUwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDUxIDIgNTIgMiA2NyAyPjsKKwkJCX07CisJCX07CisKKwkJZW5ldDI6IGV0aGVybmV0QGIyMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gImVUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGV0c2VjMiI7CisJCQlmc2wsbnVtX3J4X3F1ZXVlcyA9IDwweDg+OworCQkJZnNsLG51bV90eF9xdWV1ZXMgPSA8MHg4PjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisKKwkJCXF1ZXVlLWdyb3VwQDAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJCXJlZyA9IDwweGIyMDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDwzMSAyIDMyIDIgMzMgMj47CisJCQl9OworCisJCQlxdWV1ZS1ncm91cEAxIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCQlyZWcgPSA8MHhiNjAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MjUgMiAyNiAyIDI3IDI+OworCQkJfTsKKwkJfTsKKworCQl1c2JAMjIwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLXVzYjItZHIiOworCQkJcmVnID0gPDB4MjIwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJaW50ZXJydXB0cyA9IDwyOCAweDI+OworCQl9OworCisJCS8qIFVTQjIgaXMgc2hhcmVkIHdpdGggbG9jYWxidXMsIHNvIGl0IG11c3QgYmUgZGlzYWJsZWQKKwkJICAgYnkgZGVmYXVsdC4gV2UgY2FuJ3QgcHV0ICdzdGF0dXMgPSAiZGlzYWJsZWQiOycgaGVyZQorCQkgICBzaW5jZSBVLUJvb3QgZG9lc24ndCBjbGVhciB0aGUgc3RhdHVzIHByb3BlcnR5IHdoZW4KKwkJICAgaXQgZW5hYmxlcyBVU0IyLiBPVE9ILCBVLUJvb3QgZG9lcyBjcmVhdGUgYSBuZXcgbm9kZQorCQkgICB3aGVuIHRoZXJlIGlzbid0IGFueS4gU28sIGp1c3QgY29tbWVudCBpdCBvdXQuCisJCXVzYkAyMzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wtdXNiMi1kciI7CisJCQlyZWcgPSA8MHgyMzAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlpbnRlcnJ1cHRzID0gPDQ2IDB4Mj47CisJCQlwaHlfdHlwZSA9ICJ1bHBpIjsKKwkJfTsKKwkJKi8KKworCQlzZGhjaUAyZTAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxwMTAyMC1lc2RoYyIsICJmc2wsZXNkaGMiOworCQkJcmVnID0gPDB4MmUwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8NzIgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQl9OworCisJCWNyeXB0b0AzMDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxzZWMzLjEiLCAiZnNsLHNlYzMuMCIsICJmc2wsc2VjMi40IiwKKwkJCQkgICAgICJmc2wsc2VjMi4yIiwgImZzbCxzZWMyLjEiLCAiZnNsLHNlYzIuMCI7CisJCQlyZWcgPSA8MHgzMDAwMCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8NDUgMiA1OCAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZnNsLG51bS1jaGFubmVscyA9IDw0PjsKKwkJCWZzbCxjaGFubmVsLWZpZm8tbGVuID0gPDI0PjsKKwkJCWZzbCxleGVjLXVuaXRzLW1hc2sgPSA8MHhiZmU+OworCQkJZnNsLGRlc2NyaXB0b3ItdHlwZXMtbWFzayA9IDwweDNhYjBlYmY+OworCQl9OworCisJCW1waWM6IHBpY0A0MDAwMCB7CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCXJlZyA9IDwweDQwMDAwIDB4NDAwMDA+OworCQkJY29tcGF0aWJsZSA9ICJjaHJwLG9wZW4tcGljIjsKKwkJCWRldmljZV90eXBlID0gIm9wZW4tcGljIjsKKwkJfTsKKworCQltc2lANDE2MDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wscDEwMjAtbXNpIiwgImZzbCxtcGljLW1zaSI7CisJCQlyZWcgPSA8MHg0MTYwMCAweDgwPjsKKwkJCW1zaS1hdmFpbGFibGUtcmFuZ2VzID0gPDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwKKwkJCQkweGUwIDAKKwkJCQkweGUxIDAKKwkJCQkweGUyIDAKKwkJCQkweGUzIDAKKwkJCQkweGU0IDAKKwkJCQkweGU1IDAKKwkJCQkweGU2IDAKKwkJCQkweGU3IDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKKwkJZ2xvYmFsLXV0aWxpdGllc0BlMDAwMCB7CS8vZ2xvYmFsIHV0aWxpdGllcyBibG9jaworCQkJY29tcGF0aWJsZSA9ICJmc2wscDEwMjAtZ3V0cyIsImZzbCxwMjAyMC1ndXRzIjsKKwkJCXJlZyA9IDwweGUwMDAwIDB4MTAwMD47CisJCQlmc2wsaGFzLXJzdGNyOworCQl9OworCX07CisKKwlwY2kwOiBwY2llQGZmZTA5MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0OC1wY2llIjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQlyZWcgPSA8MCAweGZmZTA5MDAwIDAgMHgxMDAwPjsKKwkJYnVzLXJhbmdlID0gPDAgMjU1PjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCWludGVycnVwdHMgPSA8MTYgMj47CisJfTsKKworCXBjaTE6IHBjaWVAZmZlMGEwMDAgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ4LXBjaWUiOworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCXJlZyA9IDwwIDB4ZmZlMGEwMDAgMCAweDEwMDA+OworCQlidXMtcmFuZ2UgPSA8MCAyNTU+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJaW50ZXJydXB0cyA9IDwxNiAyPjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMTAyMmRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMTAyMmRzLmR0cwppbmRleCA1OWVmNDA1Li40ZjY4NWE3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDEwMjJkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AxMDIyZHMuZHRzCkBAIC01Miw3ICs1Miw3IEBACiAJCSNzaXplLWNlbGxzID0gPDE+OwogCQljb21wYXRpYmxlID0gImZzbCxwMTAyMi1lbGJjIiwgImZzbCxlbGJjIiwgInNpbXBsZS1idXMiOwogCQlyZWcgPSA8MCAweGZmZTA1MDAwIDAgMHgxMDAwPjsKLQkJaW50ZXJydXB0cyA9IDwxOSAyPjsKKwkJaW50ZXJydXB0cyA9IDwxOSAyIDAgMD47CiAKIAkJcmFuZ2VzID0gPDB4MCAweDAgMHhmIDB4ZTgwMDAwMDAgMHgwODAwMDAwMAogCQkJICAweDEgMHgwIDB4ZiAweGUwMDAwMDAwIDB4MDgwMDAwMDAKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCQkJICogSVJROCBpcyBnZW5lcmF0ZWQgaWYgdGhlICJFVkVOVCIgc3dpdGNoIGlzIHByZXNzZWQKIAkJCSAqIGFuZCBQWF9DVExbRVZFU0VMXSBpcyBzZXQgdG8gMDAuCiAJCQkgKi8KLQkJCWludGVycnVwdHMgPSA8OCA4PjsKKwkJCWludGVycnVwdHMgPSA8OCA4IDAgMD47CiAJCX07CiAJfTsKIApAQCAtMTc4LDEzICsxNzgsMTMgQEAKIAkJZWNtQDEwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wscDEwMjItZWNtIiwgImZzbCxlY20iOwogCQkJcmVnID0gPDB4MTAwMCAweDEwMDA+OwotCQkJaW50ZXJydXB0cyA9IDwxNiAyPjsKKwkJCWludGVycnVwdHMgPSA8MTYgMiAwIDA+OwogCQl9OwogCiAJCW1lbW9yeS1jb250cm9sbGVyQDIwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wscDEwMjItbWVtb3J5LWNvbnRyb2xsZXIiOwogCQkJcmVnID0gPDB4MjAwMCAweDEwMDA+OwotCQkJaW50ZXJydXB0cyA9IDwxNiAyPjsKKwkJCWludGVycnVwdHMgPSA8MTYgMiAwIDA+OwogCQl9OwogCiAJCWkyY0AzMDAwIHsKQEAgLTE5Myw3ICsxOTMsNyBAQAogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8NDMgMj47CisJCQlpbnRlcnJ1cHRzID0gPDQzIDIgMCAwPjsKIAkJCWRmc3JyOwogCQl9OwogCkBAIC0yMDMsNyArMjAzLDcgQEAKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOwogCQkJcmVnID0gPDB4MzEwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDQzIDI+OworCQkJaW50ZXJydXB0cyA9IDw0MyAyIDAgMD47CiAJCQlkZnNycjsKIAogCQkJd204Nzc2OmNvZGVjQDFhIHsKQEAgLTIyMCw3ICsyMjAsNyBAQAogCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKIAkJCXJlZyA9IDwweDQ1MDAgMHgxMDA+OwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwotCQkJaW50ZXJydXB0cyA9IDw0MiAyPjsKKwkJCWludGVycnVwdHMgPSA8NDIgMiAwIDA+OwogCQl9OwogCiAJCXNlcmlhbDE6IHNlcmlhbEA0NjAwIHsKQEAgLTIyOSw3ICsyMjksNyBAQAogCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKIAkJCXJlZyA9IDwweDQ2MDAgMHgxMDA+OwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwotCQkJaW50ZXJydXB0cyA9IDw0MiAyPjsKKwkJCWludGVycnVwdHMgPSA8NDIgMiAwIDA+OwogCQl9OwogCiAJCXNwaUA3MDAwIHsKQEAgLTIzOCw3ICsyMzgsNyBAQAogCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQljb21wYXRpYmxlID0gImZzbCxlc3BpIjsKIAkJCXJlZyA9IDwweDcwMDAgMHgxMDAwPjsKLQkJCWludGVycnVwdHMgPSA8NTkgMHgyPjsKKwkJCWludGVycnVwdHMgPSA8NTkgMHgyIDAgMD47CiAJCQllc3BpLG51bS1zcy1iaXRzID0gPDQ+OwogCQkJbW9kZSA9ICJjcHUiOwogCkBAIC0yNzUsNyArMjc1LDcgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2MTAtc3NpIjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlyZWcgPSA8MHgxNTAwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDc1IDI+OworCQkJaW50ZXJydXB0cyA9IDw3NSAyIDAgMD47CiAJCQlmc2wsbW9kZSA9ICJpMnMtc2xhdmUiOwogCQkJY29kZWMtaGFuZGxlID0gPCZ3bTg3NzY+OwogCQkJZnNsLHBsYXliYWNrLWRtYSA9IDwmZG1hMDA+OwpAQCAtMjk0LDI1ICsyOTQsMjUgQEAKIAkJCQljb21wYXRpYmxlID0gImZzbCxzc2ktZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDAgMHg4MD47CiAJCQkJY2VsbC1pbmRleCA9IDwwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDc2IDI+OworCQkJCWludGVycnVwdHMgPSA8NzYgMiAwIDA+OwogCQkJfTsKIAkJCWRtYTAxOiBkbWEtY2hhbm5lbEA4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsc3NpLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHg4MCAweDgwPjsKIAkJCQljZWxsLWluZGV4ID0gPDE+OwotCQkJCWludGVycnVwdHMgPSA8NzcgMj47CisJCQkJaW50ZXJydXB0cyA9IDw3NyAyIDAgMD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAMTAwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHgxMDAgMHg4MD47CiAJCQkJY2VsbC1pbmRleCA9IDwyPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDc4IDI+OworCQkJCWludGVycnVwdHMgPSA8NzggMiAwIDA+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDE4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTgwIDB4ODA+OwogCQkJCWNlbGwtaW5kZXggPSA8Mz47Ci0JCQkJaW50ZXJydXB0cyA9IDw3OSAyPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDc5IDIgMCAwPjsKIAkJCX07CiAJCX07CiAKQEAgLTMyMCw3ICszMjAsNyBAQAogCQkJI2dwaW8tY2VsbHMgPSA8Mj47CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLWdwaW8iOwogCQkJcmVnID0gPDB4ZjAwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDQ3IDB4Mj47CisJCQlpbnRlcnJ1cHRzID0gPDQ3IDB4MiAwIDA+OwogCQkJZ3Bpby1jb250cm9sbGVyOwogCQl9OwogCkBAIC0zMjksNyArMzI5LDcgQEAKIAkJCXJlZyA9IDwweDIwMDAwIDB4MTAwMD47CiAJCQljYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcwogCQkJY2FjaGUtc2l6ZSA9IDwweDQwMDAwPjsgLy8gTDIsIDI1NksKLQkJCWludGVycnVwdHMgPSA8MTYgMj47CisJCQlpbnRlcnJ1cHRzID0gPDE2IDIgMCAwPjsKIAkJfTsKIAogCQlkbWFAMjEzMDAgewpAQCAtMzQzLDI1ICszNDMsMjUgQEAKIAkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHgwIDB4ODA+OwogCQkJCWNlbGwtaW5kZXggPSA8MD47Ci0JCQkJaW50ZXJydXB0cyA9IDwyMCAyPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIwIDIgMCAwPjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEA4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4ODAgMHg4MD47CiAJCQkJY2VsbC1pbmRleCA9IDwxPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDIxIDI+OworCQkJCWludGVycnVwdHMgPSA8MjEgMiAwIDA+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDEwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTAwIDB4ODA+OwogCQkJCWNlbGwtaW5kZXggPSA8Mj47Ci0JCQkJaW50ZXJydXB0cyA9IDwyMiAyPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIyIDIgMCAwPjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDE4MCAweDgwPjsKIAkJCQljZWxsLWluZGV4ID0gPDM+OwotCQkJCWludGVycnVwdHMgPSA8MjMgMj47CisJCQkJaW50ZXJydXB0cyA9IDwyMyAyIDAgMD47CiAJCQl9OwogCQl9OwogCkBAIC0zNzAsNyArMzcwLDcgQEAKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wtdXNiMi1kciI7CiAJCQlyZWcgPSA8MHgyMjAwMCAweDEwMDA+OwotCQkJaW50ZXJydXB0cyA9IDwyOCAweDI+OworCQkJaW50ZXJydXB0cyA9IDwyOCAweDIgMCAwPjsKIAkJCXBoeV90eXBlID0gInVscGkiOwogCQl9OwogCkBAIC0zODEsMTEgKzM4MSwxMSBAQAogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwIDB4YjAwMzAgMHg0PjsKIAogCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewotCQkJCWludGVycnVwdHMgPSA8MyAxPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDMgMSAwIDA+OwogCQkJCXJlZyA9IDwweDE+OwogCQkJfTsKIAkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHRzID0gPDkgMT47CisJCQkJaW50ZXJydXB0cyA9IDw5IDEgMCAwPjsKIAkJCQlyZWcgPSA8MHgyPjsKIAkJCX07CiAJCX07CkBAIC00MTYsMTMgKzQxNiwxMyBAQAogCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJCXJlZyA9IDwweEIwMDAwIDB4MTAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CisJCQkJaW50ZXJydXB0cyA9IDwyOSAyIDAgMCAzMCAyIDAgMCAzNCAyIDAgMD47CiAJCQl9OwogCQkJcXVldWUtZ3JvdXBAMXsKIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCQlyZWcgPSA8MHhCNDAwMCAweDEwMDA+OwotCQkJCWludGVycnVwdHMgPSA8MTcgMiAxOCAyIDI0IDI+OworCQkJCWludGVycnVwdHMgPSA8MTcgMiAwIDAgMTggMiAwIDAgMjQgMiAwIDA+OwogCQkJfTsKIAkJfTsKIApAQCAtNDQzLDIwICs0NDMsMjAgQEAKIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCQlyZWcgPSA8MHhCMTAwMCAweDEwMDA+OwotCQkJCWludGVycnVwdHMgPSA8MzUgMiAzNiAyIDQwIDI+OworCQkJCWludGVycnVwdHMgPSA8MzUgMiAwIDAgMzYgMiAwIDAgNDAgMiAwIDA+OwogCQkJfTsKIAkJCXF1ZXVlLWdyb3VwQDF7CiAJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQkJcmVnID0gPDB4QjUwMDAgMHgxMDAwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDUxIDIgNTIgMiA2NyAyPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDUxIDIgMCAwIDUyIDIgMCAwIDY3IDIgMCAwPjsKIAkJCX07CiAJCX07CiAKIAkJc2RoY2lAMmUwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wscDEwMjItZXNkaGMiLCAiZnNsLGVzZGhjIjsKIAkJCXJlZyA9IDwweDJlMDAwIDB4MTAwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDcyIDB4Mj47CisJCQlpbnRlcnJ1cHRzID0gPDcyIDB4MiAwIDA+OwogCQkJZnNsLHNkaGNpLWF1dG8tY21kMTI7CiAJCQkvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CkBAIC00NjcsNyArNDY3LDcgQEAKIAkJCQkgICAgICJmc2wsc2VjMi40IiwgImZzbCxzZWMyLjIiLCAiZnNsLHNlYzIuMSIsCiAJCQkJICAgICAiZnNsLHNlYzIuMCI7CiAJCQlyZWcgPSA8MHgzMDAwMCAweDEwMDAwPjsKLQkJCWludGVycnVwdHMgPSA8NDUgMiA1OCAyPjsKKwkJCWludGVycnVwdHMgPSA8NDUgMiAwIDAgNTggMiAwIDA+OwogCQkJZnNsLG51bS1jaGFubmVscyA9IDw0PjsKIAkJCWZzbCxjaGFubmVsLWZpZm8tbGVuID0gPDI0PjsKIAkJCWZzbCxleGVjLXVuaXRzLW1hc2sgPSA8MHg5N2M+OwpAQCAtNDc4LDE0ICs0NzgsMTQgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLHAxMDIyLXNhdGEiLCAiZnNsLHBxLXNhdGEtdjIiOwogCQkJcmVnID0gPDB4MTgwMDAgMHgxMDAwPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47Ci0JCQlpbnRlcnJ1cHRzID0gPDc0IDB4Mj47CisJCQlpbnRlcnJ1cHRzID0gPDc0IDB4MiAwIDA+OwogCQl9OwogCiAJCXNhdGFAMTkwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wscDEwMjItc2F0YSIsICJmc2wscHEtc2F0YS12MiI7CiAJCQlyZWcgPSA8MHgxOTAwMCAweDEwMDA+OwogCQkJY2VsbC1pbmRleCA9IDwyPjsKLQkJCWludGVycnVwdHMgPSA8NDEgMHgyPjsKKwkJCWludGVycnVwdHMgPSA8NDEgMHgyIDAgMD47CiAJCX07CiAKIAkJcG93ZXJAZTAwNzB7CkBAIC00OTYsMjEgKzQ5NiwzMyBAQAogCQlkaXNwbGF5QDEwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLGRpdSIsICJmc2wscDEwMjItZGl1IjsKIAkJCXJlZyA9IDwweDEwMDAwIDEwMDA+OwotCQkJaW50ZXJydXB0cyA9IDw2NCAyPjsKKwkJCWludGVycnVwdHMgPSA8NjQgMiAwIDA+OwogCQl9OwogCiAJCXRpbWVyQDQxMTAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1waWMtZ2xvYmFsLXRpbWVyIjsKLQkJCXJlZyA9IDwweDQxMTAwIDB4MjA0PjsKLQkJCWludGVycnVwdHMgPSA8MHhmNyAweDI+OworCQkJcmVnID0gPDB4NDExMDAgMHgxMDAgMHg0MTMwMCA0PjsKKwkJCWludGVycnVwdHMgPSA8MCAwIDMgMAorCQkJICAgICAgICAgICAgICAxIDAgMyAwCisJCQkgICAgICAgICAgICAgIDIgMCAzIDAKKwkJCSAgICAgICAgICAgICAgMyAwIDMgMD47CisJCX07CisKKwkJdGltZXJANDIxMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBpYy1nbG9iYWwtdGltZXIiOworCQkJcmVnID0gPDB4NDIxMDAgMHgxMDAgMHg0MjMwMCA0PjsKKwkJCWludGVycnVwdHMgPSA8NCAwIDMgMAorCQkJICAgICAgICAgICAgICA1IDAgMyAwCisJCQkgICAgICAgICAgICAgIDYgMCAzIDAKKwkJCSAgICAgICAgICAgICAgNyAwIDMgMD47CiAJCX07CiAKIAkJbXBpYzogcGljQDQwMDAwIHsKIAkJCWludGVycnVwdC1jb250cm9sbGVyOwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47Ci0JCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDw0PjsKIAkJCXJlZyA9IDwweDQwMDAwIDB4NDAwMDA+OwotCQkJY29tcGF0aWJsZSA9ICJjaHJwLG9wZW4tcGljIjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1waWMiOwogCQkJZGV2aWNlX3R5cGUgPSAib3Blbi1waWMiOwogCQl9OwogCkBAIC01MTksMTQgKzUzMSwxNCBAQAogCQkJcmVnID0gPDB4NDE2MDAgMHg4MD47CiAJCQltc2ktYXZhaWxhYmxlLXJhbmdlcyA9IDwwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8Ci0JCQkJMHhlMCAwCi0JCQkJMHhlMSAwCi0JCQkJMHhlMiAwCi0JCQkJMHhlMyAwCi0JCQkJMHhlNCAwCi0JCQkJMHhlNSAwCi0JCQkJMHhlNiAwCi0JCQkJMHhlNyAwPjsKKwkJCQkweGUwIDAgMCAwCisJCQkJMHhlMSAwIDAgMAorCQkJCTB4ZTIgMCAwIDAKKwkJCQkweGUzIDAgMCAwCisJCQkJMHhlNCAwIDAgMAorCQkJCTB4ZTUgMCAwIDAKKwkJCQkweGU2IDAgMCAwCisJCQkJMHhlNyAwIDAgMD47CiAJCX07CiAKIAkJZ2xvYmFsLXV0aWxpdGllc0BlMDAwMCB7CS8vZ2xvYmFsIHV0aWxpdGllcyBibG9jawpAQCAtNTQ3LDcgKzU1OSw3IEBACiAJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YTAwMDAwMDAgMHhjIDB4MjAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKIAkJCSAgMHgxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDB4ZiAweGZmYzEwMDAwIDB4MCAweDEwMDAwPjsKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKLQkJaW50ZXJydXB0cyA9IDwxNiAyPjsKKwkJaW50ZXJydXB0cyA9IDwxNiAyIDAgMD47CiAJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMCAwIDc+OwogCQlpbnRlcnJ1cHQtbWFwID0gPAogCQkJLyogSURTRUwgMHgwICovCkBAIC01ODIsNyArNTk0LDcgQEAKIAkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHhjMDAwMDAwMCAweGMgMHg0MDAwMDAwMCAweDAgMHgyMDAwMDAwMAogCQkJICAweDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMHhmIDB4ZmZjMjAwMDAgMHgwIDB4MTAwMDA+OwogCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OwotCQlpbnRlcnJ1cHRzID0gPDE2IDI+OworCQlpbnRlcnJ1cHRzID0gPDE2IDIgMCAwPjsKIAkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAwIDAgNz47CiAJCWludGVycnVwdC1tYXAgPSA8CiAJCQkvKiBJRFNFTCAweDAgKi8KQEAgLTYxOCw3ICs2MzAsNyBAQAogCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweDgwMDAwMDAwIDB4YyAweDAwMDAwMDAwIDB4MCAweDIwMDAwMDAwCiAJCQkgIDB4MTAwMDAwMCAweDAgMHgwMDAwMDAwMCAweGYgMHhmZmMwMDAwMCAweDAgMHgxMDAwMD47CiAJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47Ci0JCWludGVycnVwdHMgPSA8MTYgMj47CisJCWludGVycnVwdHMgPSA8MTYgMiAwIDA+OwogCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDAgMCA3PjsKIAkJaW50ZXJydXB0LW1hcCA9IDwKIAkJCS8qIElEU0VMIDB4MCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AyMDIwZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AyMDIwZHMuZHRzCmluZGV4IDExMDE5MTQuLjJiY2YzNjggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMjAyMGRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDIwMjBkcy5kdHMKQEAgLTEsNyArMSw3IEBACiAvKgogICogUDIwMjAgRFMgRGV2aWNlIFRyZWUgU291cmNlCiAgKgotICogQ29weXJpZ2h0IDIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICogQ29weXJpZ2h0IDIwMDktMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTksMTIgKzksMTEgQEAKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotL2R0cy12MS87CisvaW5jbHVkZS8gInAyMDIwc2kuZHRzaSIKKwogLyB7Ci0JbW9kZWwgPSAiZnNsLFAyMDIwIjsKKwltb2RlbCA9ICJmc2wsUDIwMjBEUyI7CiAJY29tcGF0aWJsZSA9ICJmc2wsUDIwMjBEUyI7Ci0JI2FkZHJlc3MtY2VsbHMgPSA8Mj47Ci0JI3NpemUtY2VsbHMgPSA8Mj47CiAKIAlhbGlhc2VzIHsKIAkJZXRoZXJuZXQwID0gJmVuZXQwOwpAQCAtMjcsMzUgKzI2LDEzIEBACiAJCXBjaTIgPSAmcGNpMjsKIAl9OwogCi0JY3B1cyB7Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQotCQlQb3dlclBDLFAyMDIwQDAgewotCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKLQkJCXJlZyA9IDwweDA+OwotCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OwotCQl9OwotCi0JCVBvd2VyUEMsUDIwMjBAMSB7Ci0JCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwotCQkJcmVnID0gPDB4MT47Ci0JCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47Ci0JCX07Ci0JfTsKIAogCW1lbW9yeSB7CiAJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CiAJfTsKIAogCWxvY2FsYnVzQGZmZTA1MDAwIHsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47Ci0JCSNzaXplLWNlbGxzID0gPDE+OwogCQljb21wYXRpYmxlID0gImZzbCxlbGJjIiwgInNpbXBsZS1idXMiOwotCQlyZWcgPSA8MCAweGZmZTA1MDAwIDAgMHgxMDAwPjsKLQkJaW50ZXJydXB0cyA9IDwxOSAyPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0KIAkJcmFuZ2VzID0gPDB4MCAweDAgMHgwIDB4ZTgwMDAwMDAgMHgwODAwMDAwMAogCQkJICAweDEgMHgwIDB4MCAweGUwMDAwMDAwIDB4MDgwMDAwMDAKIAkJCSAgMHgyIDB4MCAweDAgMHhmZmEwMDAwMCAweDAwMDQwMDAwCkBAIC0xNTgsMzUyICsxMzUsNzcgQEAKIAl9OwogCiAJc29jQGZmZTAwMDAwIHsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCSNzaXplLWNlbGxzID0gPDE+OwotCQlkZXZpY2VfdHlwZSA9ICJzb2MiOwotCQljb21wYXRpYmxlID0gImZzbCxwMjAyMC1pbW1yIiwgInNpbXBsZS1idXMiOwotCQlyYW5nZXMgPSA8MHgwIDAgMHhmZmUwMDAwMCAweDEwMDAwMD47Ci0JCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBGaWxsZWQgb3V0IGJ5IHVib290LgotCi0JCWVjbS1sYXdAMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCxlY20tbGF3IjsKLQkJCXJlZyA9IDwweDAgMHgxMDAwPjsKLQkJCWZzbCxudW0tbGF3cyA9IDwxMj47Ci0JCX07Ci0KLQkJZWNtQDEwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wscDIwMjAtZWNtIiwgImZzbCxlY20iOwotCQkJcmVnID0gPDB4MTAwMCAweDEwMDA+OwotCQkJaW50ZXJydXB0cyA9IDwxNyAyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQl9OwotCi0JCW1lbW9yeS1jb250cm9sbGVyQDIwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wscDIwMjAtbWVtb3J5LWNvbnRyb2xsZXIiOwotCQkJcmVnID0gPDB4MjAwMCAweDEwMDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlpbnRlcnJ1cHRzID0gPDE4IDI+OwotCQl9OwotCi0JCWkyY0AzMDAwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKLQkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDw0MyAyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJZGZzcnI7Ci0JCX07Ci0KLQkJaTJjQDMxMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNlbGwtaW5kZXggPSA8MT47Ci0JCQljb21wYXRpYmxlID0gImZzbC1pMmMiOwotCQkJcmVnID0gPDB4MzEwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDQzIDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlkZnNycjsKLQkJfTsKLQotCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKLQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7Ci0JCQlyZWcgPSA8MHg0NTAwIDB4MTAwPjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKLQkJCWludGVycnVwdHMgPSA8NDIgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJfTsKLQotCQlzZXJpYWwxOiBzZXJpYWxANDYwMCB7Ci0JCQljZWxsLWluZGV4ID0gPDE+OwotCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKLQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7Ci0JCQlyZWcgPSA8MHg0NjAwIDB4MTAwPjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKLQkJCWludGVycnVwdHMgPSA8NDIgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJfTsKLQotCQlzcGlANzAwMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCxlc3BpIjsKLQkJCXJlZyA9IDwweDcwMDAgMHgxMDAwPjsKLQkJCWludGVycnVwdHMgPSA8NTkgMHgyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQl9OwotCi0JCWRtYUBjMzAwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYSI7Ci0JCQlyZWcgPSA8MHhjMzAwIDB4ND47Ci0JCQlyYW5nZXMgPSA8MHgwIDB4YzEwMCAweDIwMD47Ci0JCQljZWxsLWluZGV4ID0gPDE+OwotCQkJZG1hLWNoYW5uZWxAMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7Ci0JCQkJcmVnID0gPDB4MCAweDgwPjsKLQkJCQljZWxsLWluZGV4ID0gPDA+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8NzYgMj47Ci0JCQl9OwotCQkJZG1hLWNoYW5uZWxAODAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOwotCQkJCXJlZyA9IDwweDgwIDB4ODA+OwotCQkJCWNlbGwtaW5kZXggPSA8MT47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw3NyAyPjsKLQkJCX07Ci0JCQlkbWEtY2hhbm5lbEAxMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOwotCQkJCXJlZyA9IDwweDEwMCAweDgwPjsKLQkJCQljZWxsLWluZGV4ID0gPDI+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8NzggMj47Ci0JCQl9OwotCQkJZG1hLWNoYW5uZWxAMTgwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKLQkJCQlyZWcgPSA8MHgxODAgMHg4MD47Ci0JCQkJY2VsbC1pbmRleCA9IDwzPjsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDc5IDI+OwotCQkJfTsKLQkJfTsKLQotCQlncGlvOiBncGlvLWNvbnRyb2xsZXJAZjAwMCB7Ci0JCQkjZ3Bpby1jZWxscyA9IDwyPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZ3BpbyI7Ci0JCQlyZWcgPSA8MHhmMDAwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8NDcgMHgyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJZ3Bpby1jb250cm9sbGVyOwotCQl9OwotCi0JCUwyOiBsMi1jYWNoZS1jb250cm9sbGVyQDIwMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLHAyMDIwLWwyLWNhY2hlLWNvbnRyb2xsZXIiOwotCQkJcmVnID0gPDB4MjAwMDAgMHgxMDAwPjsKLQkJCWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCi0JCQljYWNoZS1zaXplID0gPDB4ODAwMDA+OyAvLyBMMiwgNTEyawotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlpbnRlcnJ1cHRzID0gPDE2IDI+OwotCQl9OwotCi0JCWRtYUAyMTMwMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEiOwotCQkJcmVnID0gPDB4MjEzMDAgMHg0PjsKLQkJCXJhbmdlcyA9IDwweDAgMHgyMTEwMCAweDIwMD47Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJZG1hLWNoYW5uZWxAMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7Ci0JCQkJcmVnID0gPDB4MCAweDgwPjsKLQkJCQljZWxsLWluZGV4ID0gPDA+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MjAgMj47Ci0JCQl9OwotCQkJZG1hLWNoYW5uZWxAODAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOwotCQkJCXJlZyA9IDwweDgwIDB4ODA+OwotCQkJCWNlbGwtaW5kZXggPSA8MT47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwyMSAyPjsKLQkJCX07Ci0JCQlkbWEtY2hhbm5lbEAxMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOwotCQkJCXJlZyA9IDwweDEwMCAweDgwPjsKLQkJCQljZWxsLWluZGV4ID0gPDI+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MjIgMj47Ci0JCQl9OwotCQkJZG1hLWNoYW5uZWxAMTgwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKLQkJCQlyZWcgPSA8MHgxODAgMHg4MD47Ci0JCQkJY2VsbC1pbmRleCA9IDwzPjsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDIzIDI+OwotCQkJfTsKLQkJfTsKIAogCQl1c2JAMjIwMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLXVzYjItZHIiOwotCQkJcmVnID0gPDB4MjIwMDAgMHgxMDAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJaW50ZXJydXB0cyA9IDwyOCAweDI+OwogCQkJcGh5X3R5cGUgPSAidWxwaSI7CiAJCX07CiAKLQkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7Ci0JCQltb2RlbCA9ICJlVFNFQyI7Ci0JCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwotCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKLQkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwotCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07Ci0JCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47Ci0JCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKLQkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCQltZGlvQDI0NTIwIHsKKwkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDMgMT47CisJCQkJcmVnID0gPDB4MD47CisJCQl9OworCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MyAxPjsKKwkJCQlyZWcgPSA8MHgxPjsKKwkJCX07CisJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwzIDE+OworCQkJCXJlZyA9IDwweDI+OworCQkJfTsKKwkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCXJlZyA9IDwweDExPjsKKwkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCX07CiAKLQkJCW1kaW9ANTIwIHsKLQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKwkJfTsKIAotCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKLQkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJCWludGVycnVwdHMgPSA8MyAxPjsKLQkJCQkJcmVnID0gPDB4MD47Ci0JCQkJfTsKLQkJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCQlpbnRlcnJ1cHRzID0gPDMgMT47Ci0JCQkJCXJlZyA9IDwweDE+OwotCQkJCX07Ci0JCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgewotCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQkJaW50ZXJydXB0cyA9IDwzIDE+OwotCQkJCQlyZWcgPSA8MHgyPjsKLQkJCQl9OwotCQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJCX07CisJCW1kaW9AMjU1MjAgeworCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJcmVnID0gPDB4MTE+OworCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwogCQkJfTsKIAkJfTsKIAorCQltZGlvQDI2NTIwIHsKKwkJCXRiaTI6IHRiaS1waHlAMTEgeworCQkJCXJlZyA9IDwweDExPjsKKwkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCX07CisKKwkJfTsKKworCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CisJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKKwkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCQl9OworCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJY2VsbC1pbmRleCA9IDwxPjsKLQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwotCQkJbW9kZWwgPSAiZVRTRUMiOwotCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKLQkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47Ci0JCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKLQkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwotCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKIAotCQkJbWRpb0A1MjAgewotCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCQlyZWcgPSA8MHg1MjAgMHgyMD47Ci0KLQkJCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQkJcmVnID0gPDB4MTE+OwotCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCQl9OwotCQkJfTsKIAkJfTsKIAogCQllbmV0MjogZXRoZXJuZXRAMjYwMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJCWNlbGwtaW5kZXggPSA8Mj47Ci0JCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKLQkJCW1vZGVsID0gImVUU0VDIjsKLQkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7Ci0JCQlyZWcgPSA8MHgyNjAwMCAweDEwMDA+OwotCQkJcmFuZ2VzID0gPDB4MCAweDI2MDAwIDB4MTAwMD47Ci0JCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKLQkJCWludGVycnVwdHMgPSA8MzEgMiAzMiAyIDMzIDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkyPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7Ci0KLQkJCW1kaW9ANTIwIHsKLQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQkJcmVnID0gPDB4NTIwIDB4MjA+OwotCi0JCQkJdGJpMjogdGJpLXBoeUAxMSB7Ci0JCQkJCXJlZyA9IDwweDExPjsKLQkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQkJfTsKLQkJCX07CiAJCX07CiAKLQkJc2RoY2lAMmUwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wscDIwMjAtZXNkaGMiLCAiZnNsLGVzZGhjIjsKLQkJCXJlZyA9IDwweDJlMDAwIDB4MTAwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDcyIDB4Mj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCS8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKLQkJfTsKLQotCQljcnlwdG9AMzAwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wsc2VjMy4xIiwgImZzbCxzZWMzLjAiLCAiZnNsLHNlYzIuNCIsCi0JCQkJICAgICAiZnNsLHNlYzIuMiIsICJmc2wsc2VjMi4xIiwgImZzbCxzZWMyLjAiOwotCQkJcmVnID0gPDB4MzAwMDAgMHgxMDAwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDQ1IDIgNTggMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCWZzbCxudW0tY2hhbm5lbHMgPSA8ND47Ci0JCQlmc2wsY2hhbm5lbC1maWZvLWxlbiA9IDwyND47Ci0JCQlmc2wsZXhlYy11bml0cy1tYXNrID0gPDB4YmZlPjsKLQkJCWZzbCxkZXNjcmlwdG9yLXR5cGVzLW1hc2sgPSA8MHgzYWIwZWJmPjsKLQkJfTsKLQotCQltcGljOiBwaWNANDAwMDAgewotCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKLQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47Ci0JCQlyZWcgPSA8MHg0MDAwMCAweDQwMDAwPjsKLQkJCWNvbXBhdGlibGUgPSAiY2hycCxvcGVuLXBpYyI7Ci0JCQlkZXZpY2VfdHlwZSA9ICJvcGVuLXBpYyI7Ci0JCX07CiAKIAkJbXNpQDQxNjAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1waWMtbXNpIjsKLQkJCXJlZyA9IDwweDQxNjAwIDB4ODA+OwotCQkJbXNpLWF2YWlsYWJsZS1yYW5nZXMgPSA8MCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPAotCQkJCTB4ZTAgMAotCQkJCTB4ZTEgMAotCQkJCTB4ZTIgMAotCQkJCTB4ZTMgMAotCQkJCTB4ZTQgMAotCQkJCTB4ZTUgMAotCQkJCTB4ZTYgMAotCQkJCTB4ZTcgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJfTsKLQotCQlnbG9iYWwtdXRpbGl0aWVzQGUwMDAwIHsJLy9nbG9iYWwgdXRpbGl0aWVzIGJsb2NrCi0JCQljb21wYXRpYmxlID0gImZzbCxwMjAyMC1ndXRzIjsKLQkJCXJlZyA9IDwweGUwMDAwIDB4MTAwMD47Ci0JCQlmc2wsaGFzLXJzdGNyOwogCQl9OwogCX07CiAKIAlwY2kwOiBwY2llQGZmZTA4MDAwIHsKLQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0OC1wY2llIjsKLQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKLQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8Mj47Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8MCAweGZmZTA4MDAwIDAgMHgxMDAwPjsKLQkJYnVzLXJhbmdlID0gPDAgMjU1PjsKIAkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHg4MDAwMDAwMCAwIDB4ODAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKIAkJCSAgMHgxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDAgMHhmZmMwMDAwMCAweDAgMHgxMDAwMD47Ci0JCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQlpbnRlcnJ1cHRzID0gPDI0IDI+OwogCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKIAkJaW50ZXJydXB0LW1hcCA9IDwKIAkJCS8qIElEU0VMIDB4MCAqLwpAQCAtNTI4LDE4ICsyMzAsOCBAQAogCX07CiAKIAlwY2kxOiBwY2llQGZmZTA5MDAwIHsKLQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0OC1wY2llIjsKLQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKLQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8Mj47Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8MCAweGZmZTA5MDAwIDAgMHgxMDAwPjsKLQkJYnVzLXJhbmdlID0gPDAgMjU1PjsKIAkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHhhMDAwMDAwMCAwIDB4YTAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKIAkJCSAgMHgxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDAgMHhmZmMxMDAwMCAweDAgMHgxMDAwMD47Ci0JCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQlpbnRlcnJ1cHRzID0gPDI1IDI+OwogCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmZjAwIDB4MCAweDAgMHg3PjsKIAkJaW50ZXJydXB0LW1hcCA9IDwKIApAQCAtNjY3LDE4ICszNTksOCBAQAogCX07CiAKIAlwY2kyOiBwY2llQGZmZTBhMDAwIHsKLQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0OC1wY2llIjsKLQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKLQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8Mj47Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8MCAweGZmZTBhMDAwIDAgMHgxMDAwPjsKLQkJYnVzLXJhbmdlID0gPDAgMjU1PjsKIAkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHhjMDAwMDAwMCAwIDB4YzAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKIAkJCSAgMHgxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDAgMHhmZmMyMDAwMCAweDAgMHgxMDAwMD47Ci0JCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQlpbnRlcnJ1cHRzID0gPDI2IDI+OwogCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKIAkJaW50ZXJydXB0LW1hcCA9IDwKIAkJCS8qIElEU0VMIDB4MCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AyMDIwcmRiLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMjAyMHJkYi5kdHMKaW5kZXggZTJkNDhmZC4uMzc4MmE1OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AyMDIwcmRiLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDIwMjByZGIuZHRzCkBAIC05LDEyICs5LDExIEBACiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLS9kdHMtdjEvOworL2luY2x1ZGUvICJwMjAyMHNpLmR0c2kiCisKIC8gewotCW1vZGVsID0gImZzbCxQMjAyMCI7CisJbW9kZWwgPSAiZnNsLFAyMDIwUkRCIjsKIAljb21wYXRpYmxlID0gImZzbCxQMjAyMFJEQiI7Ci0JI2FkZHJlc3MtY2VsbHMgPSA8Mj47Ci0JI3NpemUtY2VsbHMgPSA8Mj47CiAKIAlhbGlhc2VzIHsKIAkJZXRoZXJuZXQwID0gJmVuZXQwOwpAQCAtMjYsMzQgKzI1LDExIEBACiAJCXBjaTEgPSAmcGNpMTsKIAl9OwogCi0JY3B1cyB7Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQotCQlQb3dlclBDLFAyMDIwQDAgewotCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKLQkJCXJlZyA9IDwweDA+OwotCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OwotCQl9OwotCi0JCVBvd2VyUEMsUDIwMjBAMSB7Ci0JCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwotCQkJcmVnID0gPDB4MT47Ci0JCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47Ci0JCX07Ci0JfTsKLQogCW1lbW9yeSB7CiAJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CiAJfTsKIAogCWxvY2FsYnVzQGZmZTA1MDAwIHsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47Ci0JCSNzaXplLWNlbGxzID0gPDE+OwotCQljb21wYXRpYmxlID0gImZzbCxwMjAyMC1lbGJjIiwgImZzbCxlbGJjIiwgInNpbXBsZS1idXMiOwotCQlyZWcgPSA8MCAweGZmZTA1MDAwIDAgMHgxMDAwPjsKLQkJaW50ZXJydXB0cyA9IDwxOSAyPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAKIAkJLyogTk9SIGFuZCBOQU5EIEZsYXNoZXMgKi8KIAkJcmFuZ2VzID0gPDB4MCAweDAgMHgwIDB4ZWYwMDAwMDAgMHgwMTAwMDAwMApAQCAtMTY1LDkwICsxNDEsMTYgQEAKIAl9OwogCiAJc29jQGZmZTAwMDAwIHsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCSNzaXplLWNlbGxzID0gPDE+OwotCQlkZXZpY2VfdHlwZSA9ICJzb2MiOwotCQljb21wYXRpYmxlID0gImZzbCxwMjAyMC1pbW1yIiwgInNpbXBsZS1idXMiOwotCQlyYW5nZXMgPSA8MHgwICAweDAgMHhmZmUwMDAwMCAweDEwMDAwMD47Ci0JCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBGaWxsZWQgb3V0IGJ5IHVib290LgotCi0JCWVjbS1sYXdAMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCxlY20tbGF3IjsKLQkJCXJlZyA9IDwweDAgMHgxMDAwPjsKLQkJCWZzbCxudW0tbGF3cyA9IDwxMj47Ci0JCX07Ci0KLQkJZWNtQDEwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wscDIwMjAtZWNtIiwgImZzbCxlY20iOwotCQkJcmVnID0gPDB4MTAwMCAweDEwMDA+OwotCQkJaW50ZXJydXB0cyA9IDwxNyAyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQl9OwotCi0JCW1lbW9yeS1jb250cm9sbGVyQDIwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wscDIwMjAtbWVtb3J5LWNvbnRyb2xsZXIiOwotCQkJcmVnID0gPDB4MjAwMCAweDEwMDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlpbnRlcnJ1cHRzID0gPDE4IDI+OwotCQl9OwotCiAJCWkyY0AzMDAwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKLQkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDw0MyAyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJZGZzcnI7CiAJCQlydGNANjggewogCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTMzOSI7CiAJCQkJcmVnID0gPDB4Njg+OwogCQkJfTsKIAkJfTsKIAotCQlpMmNAMzEwMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY2VsbC1pbmRleCA9IDwxPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7Ci0JCQlyZWcgPSA8MHgzMTAwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8NDMgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCWRmc3JyOwotCQl9OworCXNwaUA3MDAwIHsKIAotCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKLQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7Ci0JCQlyZWcgPSA8MHg0NTAwIDB4MTAwPjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKLQkJCWludGVycnVwdHMgPSA8NDIgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJfTsKLQotCQlzZXJpYWwxOiBzZXJpYWxANDYwMCB7Ci0JCQljZWxsLWluZGV4ID0gPDE+OwotCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKLQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7Ci0JCQlyZWcgPSA8MHg0NjAwIDB4MTAwPjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKLQkJCWludGVycnVwdHMgPSA8NDIgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJfTsKLQotCQlzcGlANzAwMCB7Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGVzcGkiOwotCQkJcmVnID0gPDB4NzAwMCAweDEwMDA+OwotCQkJaW50ZXJydXB0cyA9IDw1OSAweDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQltb2RlID0gImNwdSI7Ci0KLQkJCWZzbF9tMjVwODBAMCB7CisJCWZzbF9tMjVwODBAMCB7CiAJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsZXNwaS1mbGFzaCI7CkBAIC0yOTQsMjU0ICsxOTYsNjggQEAKIAkJCX07CiAJCX07CiAKLQkJZG1hQGMzMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hIjsKLQkJCXJlZyA9IDwweGMzMDAgMHg0PjsKLQkJCXJhbmdlcyA9IDwweDAgMHhjMTAwIDB4MjAwPjsKLQkJCWNlbGwtaW5kZXggPSA8MT47Ci0JCQlkbWEtY2hhbm5lbEAwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKLQkJCQlyZWcgPSA8MHgwIDB4ODA+OwotCQkJCWNlbGwtaW5kZXggPSA8MD47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw3NiAyPjsKLQkJCX07Ci0JCQlkbWEtY2hhbm5lbEA4MCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7Ci0JCQkJcmVnID0gPDB4ODAgMHg4MD47Ci0JCQkJY2VsbC1pbmRleCA9IDwxPjsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDc3IDI+OwotCQkJfTsKLQkJCWRtYS1jaGFubmVsQDEwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7Ci0JCQkJcmVnID0gPDB4MTAwIDB4ODA+OwotCQkJCWNlbGwtaW5kZXggPSA8Mj47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw3OCAyPjsKLQkJCX07Ci0JCQlkbWEtY2hhbm5lbEAxODAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOwotCQkJCXJlZyA9IDwweDE4MCAweDgwPjsKLQkJCQljZWxsLWluZGV4ID0gPDM+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8NzkgMj47Ci0JCQl9OwotCQl9OwotCi0JCWdwaW86IGdwaW8tY29udHJvbGxlckBmMDAwIHsKLQkJCSNncGlvLWNlbGxzID0gPDI+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1ncGlvIjsKLQkJCXJlZyA9IDwweGYwMDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDw0NyAweDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlncGlvLWNvbnRyb2xsZXI7Ci0JCX07Ci0KLQkJTDI6IGwyLWNhY2hlLWNvbnRyb2xsZXJAMjAwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wscDIwMjAtbDItY2FjaGUtY29udHJvbGxlciI7Ci0JCQlyZWcgPSA8MHgyMDAwMCAweDEwMDA+OwotCQkJY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKLQkJCWNhY2hlLXNpemUgPSA8MHg4MDAwMD47IC8vIEwyLDUxMksKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJaW50ZXJydXB0cyA9IDwxNiAyPjsKLQkJfTsKLQotCQlkbWFAMjEzMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hIjsKLQkJCXJlZyA9IDwweDIxMzAwIDB4ND47Ci0JCQlyYW5nZXMgPSA8MHgwIDB4MjExMDAgMHgyMDA+OwotCQkJY2VsbC1pbmRleCA9IDwwPjsKLQkJCWRtYS1jaGFubmVsQDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOwotCQkJCXJlZyA9IDwweDAgMHg4MD47Ci0JCQkJY2VsbC1pbmRleCA9IDwwPjsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDIwIDI+OwotCQkJfTsKLQkJCWRtYS1jaGFubmVsQDgwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKLQkJCQlyZWcgPSA8MHg4MCAweDgwPjsKLQkJCQljZWxsLWluZGV4ID0gPDE+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MjEgMj47Ci0JCQl9OwotCQkJZG1hLWNoYW5uZWxAMTAwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKLQkJCQlyZWcgPSA8MHgxMDAgMHg4MD47Ci0JCQkJY2VsbC1pbmRleCA9IDwyPjsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDIyIDI+OwotCQkJfTsKLQkJCWRtYS1jaGFubmVsQDE4MCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7Ci0JCQkJcmVnID0gPDB4MTgwIDB4ODA+OwotCQkJCWNlbGwtaW5kZXggPSA8Mz47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwyMyAyPjsKLQkJCX07Ci0JCX07Ci0KIAkJdXNiQDIyMDAwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbC11c2IyLWRyIjsKLQkJCXJlZyA9IDwweDIyMDAwIDB4MTAwMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCWludGVycnVwdHMgPSA8MjggMHgyPjsKIAkJCXBoeV90eXBlID0gInVscGkiOwogCQl9OwogCisJCW1kaW9AMjQ1MjAgeworCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MyAxPjsKKwkJCQlyZWcgPSA8MHgwPjsKKwkJCQl9OworCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MyAxPjsKKwkJCQlyZWcgPSA8MHgxPjsKKwkJCQl9OworCQl9OworCisJCW1kaW9AMjU1MjAgeworCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJcmVnID0gPDB4MTE+OworCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJfTsKKwkJfTsKKworCQltZGlvQDI2NTIwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7Ci0JCQltb2RlbCA9ICJlVFNFQyI7Ci0JCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwotCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKLQkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwotCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07Ci0JCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJZml4ZWQtbGluayA9IDwxIDEgMTAwMCAwIDA+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7Ci0KLQkJCW1kaW9ANTIwIHsKLQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKLQotCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKLQkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJCWludGVycnVwdHMgPSA8MyAxPjsKLQkJCQkJcmVnID0gPDB4MD47Ci0JCQkJfTsKLQkJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCQlpbnRlcnJ1cHRzID0gPDMgMT47Ci0JCQkJCXJlZyA9IDwweDE+OwotCQkJCX07Ci0JCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJY2VsbC1pbmRleCA9IDwxPjsKLQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwotCQkJbW9kZWwgPSAiZVRTRUMiOwotCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKLQkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47Ci0JCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKLQkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwotCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInNnbWlpIjsKLQotCQkJbWRpb0A1MjAgewotCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCQlyZWcgPSA8MHg1MjAgMHgyMD47Ci0KLQkJCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQkJcmVnID0gPDB4MTE+OwotCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCQl9OwotCQkJfTsKIAkJfTsKIAogCQllbmV0MjogZXRoZXJuZXRAMjYwMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJCWNlbGwtaW5kZXggPSA8Mj47Ci0JCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKLQkJCW1vZGVsID0gImVUU0VDIjsKLQkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7Ci0JCQlyZWcgPSA8MHgyNjAwMCAweDEwMDA+OwotCQkJcmFuZ2VzID0gPDB4MCAweDI2MDAwIDB4MTAwMD47Ci0JCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKLQkJCWludGVycnVwdHMgPSA8MzEgMiAzMiAyIDMzIDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOwogCQl9OwogCi0JCXNkaGNpQDJlMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLHAyMDIwLWVzZGhjIiwgImZzbCxlc2RoYyI7Ci0JCQlyZWcgPSA8MHgyZTAwMCAweDEwMDA+OwotCQkJaW50ZXJydXB0cyA9IDw3MiAweDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCi0JCQljbG9jay1mcmVxdWVuY3kgPSA8MD47Ci0JCX07Ci0KLQkJY3J5cHRvQDMwMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLHNlYzMuMSIsICJmc2wsc2VjMy4wIiwgImZzbCxzZWMyLjQiLAotCQkJCSAgICAgImZzbCxzZWMyLjIiLCAiZnNsLHNlYzIuMSIsICJmc2wsc2VjMi4wIjsKLQkJCXJlZyA9IDwweDMwMDAwIDB4MTAwMDA+OwotCQkJaW50ZXJydXB0cyA9IDw0NSAyIDU4IDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlmc2wsbnVtLWNoYW5uZWxzID0gPDQ+OwotCQkJZnNsLGNoYW5uZWwtZmlmby1sZW4gPSA8MjQ+OwotCQkJZnNsLGV4ZWMtdW5pdHMtbWFzayA9IDwweGJmZT47Ci0JCQlmc2wsZGVzY3JpcHRvci10eXBlcy1tYXNrID0gPDB4M2FiMGViZj47Ci0JCX07Ci0KLQkJbXBpYzogcGljQDQwMDAwIHsKLQkJCWludGVycnVwdC1jb250cm9sbGVyOwotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47Ci0JCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwotCQkJcmVnID0gPDB4NDAwMDAgMHg0MDAwMD47Ci0JCQljb21wYXRpYmxlID0gImNocnAsb3Blbi1waWMiOwotCQkJZGV2aWNlX3R5cGUgPSAib3Blbi1waWMiOwotCQl9OwotCi0JCW1zaUA0MTYwMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCxwMjAyMC1tc2kiLCAiZnNsLG1waWMtbXNpIjsKLQkJCXJlZyA9IDwweDQxNjAwIDB4ODA+OwotCQkJbXNpLWF2YWlsYWJsZS1yYW5nZXMgPSA8MCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPAotCQkJCTB4ZTAgMAotCQkJCTB4ZTEgMAotCQkJCTB4ZTIgMAotCQkJCTB4ZTMgMAotCQkJCTB4ZTQgMAotCQkJCTB4ZTUgMAotCQkJCTB4ZTYgMAotCQkJCTB4ZTcgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJfTsKLQotCQlnbG9iYWwtdXRpbGl0aWVzQGUwMDAwIHsJLy9nbG9iYWwgdXRpbGl0aWVzIGJsb2NrCi0JCQljb21wYXRpYmxlID0gImZzbCxwMjAyMC1ndXRzIjsKLQkJCXJlZyA9IDwweGUwMDAwIDB4MTAwMD47Ci0JCQlmc2wsaGFzLXJzdGNyOwotCQl9OwogCX07CiAKLQlwY2kwOiBwY2llQGZmZTA5MDAwIHsKLQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0OC1wY2llIjsKLQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKLQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8Mj47Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8MCAweGZmZTA5MDAwIDAgMHgxMDAwPjsKLQkJYnVzLXJhbmdlID0gPDAgMjU1PjsKKwlwY2kwOiBwY2llQGZmZTA4MDAwIHsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJcGNpMTogcGNpZUBmZmUwOTAwMCB7CiAJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YTAwMDAwMDAgMCAweGEwMDAwMDAwIDB4MCAweDIwMDAwMDAwCiAJCQkgIDB4MTAwMDAwMCAweDAgMHgwMDAwMDAwMCAwIDB4ZmZjMTAwMDAgMHgwIDB4MTAwMDA+OwotCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJaW50ZXJydXB0cyA9IDwyNSAyPjsKLQkJcGNpZUAwIHsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47CisJCWludGVycnVwdC1tYXAgPSA8CisJCQkvKiBJRFNFTCAweDAgKi8KKwkJCTAwMDAgMHgwIDB4MCAweDEgJm1waWMgMHg0IDB4MQorCQkJMDAwMCAweDAgMHgwIDB4MiAmbXBpYyAweDUgMHgxCisJCQkwMDAwIDB4MCAweDAgMHgzICZtcGljIDB4NiAweDEKKwkJCTAwMDAgMHgwIDB4MCAweDQgJm1waWMgMHg3IDB4MQorCQkJPjsKKwkJCXBjaWVAMCB7CiAJCQlyZWcgPSA8MHgwIDB4MCAweDAgMHgwIDB4MD47CiAJCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwpAQCAtNTU2LDE5ICsyNzIsMTcgQEAKIAkJfTsKIAl9OwogCi0JcGNpMTogcGNpZUBmZmUwYTAwMCB7Ci0JCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDgtcGNpZSI7Ci0JCWRldmljZV90eXBlID0gInBjaSI7Ci0JCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47Ci0JCSNzaXplLWNlbGxzID0gPDI+OwotCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJcmVnID0gPDAgMHhmZmUwYTAwMCAwIDB4MTAwMD47Ci0JCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJcGNpMjogcGNpZUBmZmUwYTAwMCB7CiAJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMCAweDgwMDAwMDAwIDB4MCAweDIwMDAwMDAwCiAJCQkgIDB4MTAwMDAwMCAweDAgMHgwMDAwMDAwMCAwIDB4ZmZjMDAwMDAgMHgwIDB4MTAwMDA+OwotCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJaW50ZXJydXB0cyA9IDwyNiAyPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47CisJCWludGVycnVwdC1tYXAgPSA8CisJCQkvKiBJRFNFTCAweDAgKi8KKwkJCTAwMDAgMHgwIDB4MCAweDEgJm1waWMgMHgwIDB4MQorCQkJMDAwMCAweDAgMHgwIDB4MiAmbXBpYyAweDEgMHgxCisJCQkwMDAwIDB4MCAweDAgMHgzICZtcGljIDB4MiAweDEKKwkJCTAwMDAgMHgwIDB4MCAweDQgJm1waWMgMHgzIDB4MQorCQkJPjsKIAkJcGNpZUAwIHsKIAkJCXJlZyA9IDwweDAgMHgwIDB4MCAweDAgMHgwPjsKIAkJCSNzaXplLWNlbGxzID0gPDI+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AyMDIwcmRiX2NhbXBfY29yZTAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AyMDIwcmRiX2NhbXBfY29yZTAuZHRzCmluZGV4IGI2OWMzYTUuLmZjOGRkZGRmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDIwMjByZGJfY2FtcF9jb3JlMC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AyMDIwcmRiX2NhbXBfY29yZTAuZHRzCkBAIC0xNCwxMiArMTQsMTEgQEAKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotL2R0cy12MS87CisvaW5jbHVkZS8gInAyMDIwc2kuZHRzaSIKKwogLyB7Ci0JbW9kZWwgPSAiZnNsLFAyMDIwIjsKKwltb2RlbCA9ICJmc2wsUDIwMjBSREIiOwogCWNvbXBhdGlibGUgPSAiZnNsLFAyMDIwUkRCIiwgImZzbCxNUEM4NVhYUkRCLUNBTVAiOwotCSNhZGRyZXNzLWNlbGxzID0gPDI+OwotCSNzaXplLWNlbGxzID0gPDI+OwogCiAJYWxpYXNlcyB7CiAJCWV0aGVybmV0MSA9ICZlbmV0MTsKQEAgLTI5LDkxICsyOCwzMyBAQAogCX07CiAKIAljcHVzIHsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCSNzaXplLWNlbGxzID0gPDA+OwotCi0JCVBvd2VyUEMsUDIwMjBAMCB7Ci0JCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwotCQkJcmVnID0gPDB4MD47Ci0JCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CisJCVBvd2VyUEMsUDIwMjBAMSB7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CisKIAl9OwogCiAJbWVtb3J5IHsKIAkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKIAl9OwogCisJbG9jYWxidXNAZmZlMDUwMDAgeworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKIAlzb2NAZmZlMDAwMDAgewotCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCWRldmljZV90eXBlID0gInNvYyI7Ci0JCWNvbXBhdGlibGUgPSAiZnNsLHAyMDIwLWltbXIiLCAic2ltcGxlLWJ1cyI7Ci0JCXJhbmdlcyA9IDwweDAgIDB4MCAweGZmZTAwMDAwIDB4MTAwMDAwPjsKLQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIEZpbGxlZCBvdXQgYnkgdWJvb3QuCi0KLQkJZWNtLWxhd0AwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGVjbS1sYXciOwotCQkJcmVnID0gPDB4MCAweDEwMDA+OwotCQkJZnNsLG51bS1sYXdzID0gPDEyPjsKLQkJfTsKLQotCQllY21AMTAwMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCxwMjAyMC1lY20iLCAiZnNsLGVjbSI7Ci0JCQlyZWcgPSA8MHgxMDAwIDB4MTAwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDE3IDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCX07Ci0KLQkJbWVtb3J5LWNvbnRyb2xsZXJAMjAwMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCxwMjAyMC1tZW1vcnktY29udHJvbGxlciI7Ci0JCQlyZWcgPSA8MHgyMDAwIDB4MTAwMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCWludGVycnVwdHMgPSA8MTggMj47Ci0JCX07Ci0KIAkJaTJjQDMwMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNlbGwtaW5kZXggPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbC1pMmMiOwotCQkJcmVnID0gPDB4MzAwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDQzIDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlkZnNycjsKIAkJCXJ0Y0A2OCB7CiAJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzM5IjsKIAkJCQlyZWcgPSA8MHg2OD47CiAJCQl9OwogCQl9OwogCi0JCWkyY0AzMTAwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljZWxsLWluZGV4ID0gPDE+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKLQkJCXJlZyA9IDwweDMxMDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDw0MyAyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJZGZzcnI7Ci0JCX07Ci0KLQkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewotCQkJY2VsbC1pbmRleCA9IDwwPjsKLQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7Ci0JCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOwotCQkJcmVnID0gPDB4NDUwMCAweDEwMD47Ci0JCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCXNlcmlhbDE6IHNlcmlhbEA0NjAwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CiAKIAkJc3BpQDcwMDAgewotCQkJY2VsbC1pbmRleCA9IDwwPjsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxlc3BpIjsKLQkJCXJlZyA9IDwweDcwMDAgMHgxMDAwPjsKLQkJCWludGVycnVwdHMgPSA8NTkgMHgyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJbW9kZSA9ICJjcHUiOwogCiAJCQlmc2xfbTI1cDgwQDAgewogCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpAQCAtMTYxLDc2ICsxMDIsMTUgQEAKIAkJCX07CiAJCX07CiAKLQkJZ3BpbzogZ3Bpby1jb250cm9sbGVyQGYwMDAgewotCQkJI2dwaW8tY2VsbHMgPSA8Mj47Ci0JCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLWdwaW8iOwotCQkJcmVnID0gPDB4ZjAwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDQ3IDB4Mj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCWdwaW8tY29udHJvbGxlcjsKLQkJfTsKLQotCQlMMjogbDItY2FjaGUtY29udHJvbGxlckAyMDAwMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCxwMjAyMC1sMi1jYWNoZS1jb250cm9sbGVyIjsKLQkJCXJlZyA9IDwweDIwMDAwIDB4MTAwMD47Ci0JCQljYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcwotCQkJY2FjaGUtc2l6ZSA9IDwweDgwMDAwPjsgLy8gTDIsNTEySwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlpbnRlcnJ1cHRzID0gPDE2IDI+OwotCQl9OwotCi0JCWRtYUAyMTMwMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEiOwotCQkJcmVnID0gPDB4MjEzMDAgMHg0PjsKLQkJCXJhbmdlcyA9IDwweDAgMHgyMTEwMCAweDIwMD47Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJZG1hLWNoYW5uZWxAMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7Ci0JCQkJcmVnID0gPDB4MCAweDgwPjsKLQkJCQljZWxsLWluZGV4ID0gPDA+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MjAgMj47Ci0JCQl9OwotCQkJZG1hLWNoYW5uZWxAODAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOwotCQkJCXJlZyA9IDwweDgwIDB4ODA+OwotCQkJCWNlbGwtaW5kZXggPSA8MT47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwyMSAyPjsKLQkJCX07Ci0JCQlkbWEtY2hhbm5lbEAxMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOwotCQkJCXJlZyA9IDwweDEwMCAweDgwPjsKLQkJCQljZWxsLWluZGV4ID0gPDI+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MjIgMj47Ci0JCQl9OwotCQkJZG1hLWNoYW5uZWxAMTgwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKLQkJCQlyZWcgPSA8MHgxODAgMHg4MD47Ci0JCQkJY2VsbC1pbmRleCA9IDwzPjsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDIzIDI+OwotCQkJfTsKKwkJZG1hQGMzMDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKIAogCQl1c2JAMjIwMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLXVzYjItZHIiOwotCQkJcmVnID0gPDB4MjIwMDAgMHgxMDAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJaW50ZXJydXB0cyA9IDwyOCAweDI+OwogCQkJcGh5X3R5cGUgPSAidWxwaSI7CiAJCX07CiAKIAkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwogCiAJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CkBAIC0yNDUsMjkgKzEyNSwyMSBAQAogCQl9OwogCiAJCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI2NTIwIDB4MjA+OwotCiAJCQl0YmkwOiB0YmktcGh5QDExIHsKIAkJCQlyZWcgPSA8MHgxMT47CiAJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CiAJCQl9OwogCQl9OwogCisJCW1kaW9AMjY1MjAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKwogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJCWNlbGwtaW5kZXggPSA8MT47Ci0JCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKLQkJCW1vZGVsID0gImVUU0VDIjsKLQkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7Ci0JCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OwotCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47Ci0JCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKLQkJCWludGVycnVwdHMgPSA8MzUgMiAzNiAyIDQwIDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJzZ21paSI7CkBAIC0yNzUsNDkgKzE0NywxMiBAQAogCQl9OwogCiAJCWVuZXQyOiBldGhlcm5ldEAyNjAwMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJY2VsbC1pbmRleCA9IDwyPjsKLQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwotCQkJbW9kZWwgPSAiZVRTRUMiOwotCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKLQkJCXJlZyA9IDwweDI2MDAwIDB4MTAwMD47Ci0JCQlyYW5nZXMgPSA8MHgwIDB4MjYwMDAgMHgxMDAwPjsKLQkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwotCQkJaW50ZXJydXB0cyA9IDwzMSAyIDMyIDIgMzMgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CiAJCX07CiAKLQkJc2RoY2lAMmUwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wscDIwMjAtZXNkaGMiLCAiZnNsLGVzZGhjIjsKLQkJCXJlZyA9IDwweDJlMDAwIDB4MTAwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDcyIDB4Mj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCS8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKLQkJfTsKLQotCQljcnlwdG9AMzAwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wsc2VjMy4xIiwgImZzbCxzZWMzLjAiLCAiZnNsLHNlYzIuNCIsCi0JCQkJICAgICAiZnNsLHNlYzIuMiIsICJmc2wsc2VjMi4xIiwgImZzbCxzZWMyLjAiOwotCQkJcmVnID0gPDB4MzAwMDAgMHgxMDAwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDQ1IDIgNTggMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCWZzbCxudW0tY2hhbm5lbHMgPSA8ND47Ci0JCQlmc2wsY2hhbm5lbC1maWZvLWxlbiA9IDwyND47Ci0JCQlmc2wsZXhlYy11bml0cy1tYXNrID0gPDB4YmZlPjsKLQkJCWZzbCxkZXNjcmlwdG9yLXR5cGVzLW1hc2sgPSA8MHgzYWIwZWJmPjsKLQkJfTsKIAogCQltcGljOiBwaWNANDAwMDAgewotCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKLQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47Ci0JCQlyZWcgPSA8MHg0MDAwMCAweDQwMDAwPjsKLQkJCWNvbXBhdGlibGUgPSAiY2hycCxvcGVuLXBpYyI7Ci0JCQlkZXZpY2VfdHlwZSA9ICJvcGVuLXBpYyI7CiAJCQlwcm90ZWN0ZWQtc291cmNlcyA9IDwKIAkJCTQyIDc2IDc3IDc4IDc5IC8qIHNlcmlhbDEgLCBkbWEyICovCiAJCQkyOSAzMCAzNCAyNiAvKiBlbmV0MCwgcGNpMSAqLwpAQCAtMzI2LDI2ICsxNjEsMjggQEAKIAkJCT47CiAJCX07CiAKLQkJZ2xvYmFsLXV0aWxpdGllc0BlMDAwMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCxwMjAyMC1ndXRzIjsKLQkJCXJlZyA9IDwweGUwMDAwIDB4MTAwMD47Ci0JCQlmc2wsaGFzLXJzdGNyOworCQltc2lANDE2MDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKKworCiAJfTsKIAotCXBjaTA6IHBjaWVAZmZlMDkwMDAgewotCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ4LXBjaWUiOwotCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwotCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwyPjsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47Ci0JCXJlZyA9IDwwIDB4ZmZlMDkwMDAgMCAweDEwMDA+OwotCQlidXMtcmFuZ2UgPSA8MCAyNTU+OworCXBjaTA6IHBjaWVAZmZlMDgwMDAgeworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwlwY2kxOiBwY2llQGZmZTA5MDAwIHsKIAkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHhhMDAwMDAwMCAwIDB4YTAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKIAkJCSAgMHgxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDAgMHhmZmMxMDAwMCAweDAgMHgxMDAwMD47Ci0JCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQlpbnRlcnJ1cHRzID0gPDI1IDI+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwKKwkJCS8qIElEU0VMIDB4MCAqLworCQkJMDAwMCAweDAgMHgwIDB4MSAmbXBpYyAweDQgMHgxCisJCQkwMDAwIDB4MCAweDAgMHgyICZtcGljIDB4NSAweDEKKwkJCTAwMDAgMHgwIDB4MCAweDMgJm1waWMgMHg2IDB4MQorCQkJMDAwMCAweDAgMHgwIDB4NCAmbXBpYyAweDcgMHgxCisJCQk+OwogCQlwY2llQDAgewogCQkJcmVnID0gPDB4MCAweDAgMHgwIDB4MCAweDA+OwogCQkJI3NpemUtY2VsbHMgPSA8Mj47CkBAIC0zNjAsNCArMTk3LDggQEAKIAkJCQkgIDB4MCAweDEwMDAwMD47CiAJCX07CiAJfTsKKworCXBjaTI6IHBjaWVAZmZlMGEwMDAgeworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AyMDIwcmRiX2NhbXBfY29yZTEuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AyMDIwcmRiX2NhbXBfY29yZTEuZHRzCmluZGV4IDdhMzFkNDZjLi4yNjFjMzRiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDIwMjByZGJfY2FtcF9jb3JlMS5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AyMDIwcmRiX2NhbXBfY29yZTEuZHRzCkBAIC0xNSwyNyArMTUsMjEgQEAKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotL2R0cy12MS87CisvaW5jbHVkZS8gInAyMDIwc2kuZHRzaSIKKwogLyB7Ci0JbW9kZWwgPSAiZnNsLFAyMDIwIjsKKwltb2RlbCA9ICJmc2wsUDIwMjBSREIiOwogCWNvbXBhdGlibGUgPSAiZnNsLFAyMDIwUkRCIiwgImZzbCxNUEM4NVhYUkRCLUNBTVAiOwotCSNhZGRyZXNzLWNlbGxzID0gPDI+OwotCSNzaXplLWNlbGxzID0gPDI+OwogCiAJYWxpYXNlcyB7CiAJCWV0aGVybmV0MCA9ICZlbmV0MDsKLQkJc2VyaWFsMCA9ICZzZXJpYWwwOworCQlzZXJpYWwwID0gJnNlcmlhbDE7CiAJCXBjaTEgPSAmcGNpMTsKIAl9OwogCiAJY3B1cyB7Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQotCQlQb3dlclBDLFAyMDIwQDEgewotCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKLQkJCXJlZyA9IDwweDE+OwotCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OworCQlQb3dlclBDLFAyMDIwQDAgeworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQl9OwogCX07CiAKQEAgLTQzLDIwICszNywzNyBAQAogCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOwogCX07CiAKLQlzb2NAZmZlMDAwMDAgewotCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCWRldmljZV90eXBlID0gInNvYyI7Ci0JCWNvbXBhdGlibGUgPSAiZnNsLHAyMDIwLWltbXIiLCAic2ltcGxlLWJ1cyI7Ci0JCXJhbmdlcyA9IDwweDAgIDB4MCAweGZmZTAwMDAwIDB4MTAwMDAwPjsKLQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIEZpbGxlZCBvdXQgYnkgdWJvb3QuCisJbG9jYWxidXNAZmZlMDUwMDAgeworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CiAKLQkJc2VyaWFsMDogc2VyaWFsQDQ2MDAgewotCQkJY2VsbC1pbmRleCA9IDwxPjsKLQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7Ci0JCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOwotCQkJcmVnID0gPDB4NDYwMCAweDEwMD47Ci0JCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJc29jQGZmZTAwMDAwIHsKKwkJZWNtLWxhd0AwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJZWNtQDEwMDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQltZW1vcnktY29udHJvbGxlckAyMDAwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjQDMwMDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmNAMzEwMCB7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJc3BpQDcwMDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKIAogCQlkbWFAYzMwMCB7CkBAIC05Niw2ICsxMDcsMTAgQEAKIAkJCX07CiAJCX07CiAKKwkJZ3BpbzogZ3Bpby1jb250cm9sbGVyQGYwMDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKwogCQlMMjogbDItY2FjaGUtY29udHJvbGxlckAyMDAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxwMjAyMC1sMi1jYWNoZS1jb250cm9sbGVyIjsKIAkJCXJlZyA9IDwweDIwMDAwIDB4MTAwMD47CkBAIC0xMDQsMzEgKzExOSw0OSBAQAogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCX07CiAKKwkJZG1hQDIxMzAwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJdXNiQDIyMDAwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJbWRpb0AyNDUyMCB7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCW1kaW9AMjU1MjAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQltZGlvQDI2NTIwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CiAKIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7Ci0JCQltb2RlbCA9ICJlVFNFQyI7Ci0JCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwotCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKLQkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwotCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07Ci0JCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJZml4ZWQtbGluayA9IDwxIDEgMTAwMCAwIDA+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CiAKIAkJfTsKIAorCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQllbmV0MjogZXRoZXJuZXRAMjYwMDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlzZGhjaUAyZTAwMCB7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWNyeXB0b0AzMDAwMCB7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCiAJCW1waWM6IHBpY0A0MDAwMCB7Ci0JCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OwotCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKLQkJCXJlZyA9IDwweDQwMDAwIDB4NDAwMDA+OwotCQkJY29tcGF0aWJsZSA9ICJjaHJwLG9wZW4tcGljIjsKLQkJCWRldmljZV90eXBlID0gIm9wZW4tcGljIjsKIAkJCXByb3RlY3RlZC1zb3VyY2VzID0gPAogCQkJMTcgMTggNDMgNDIgNTkgNDcgLyplY20sIG1lbSwgaTJjLCBzZXJpYWwwLCBzcGksZ3BpbyAqLwogCQkJMTYgMjAgMjEgMjIgMjMgMjggCS8qIEwyLCBkbWExLCBVU0IgKi8KQEAgLTE1MiwyMSArMTg1LDMyIEBACiAJCQkJMHhlNyAwPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQl9OworCisJCWdsb2JhbC11dGlsaXRpZXNAZTAwMDAgewkvL2dsb2JhbCB1dGlsaXRpZXMgYmxvY2sKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKIAl9OwogCi0JcGNpMTogcGNpZUBmZmUwYTAwMCB7Ci0JCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDgtcGNpZSI7Ci0JCWRldmljZV90eXBlID0gInBjaSI7Ci0JCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47Ci0JCSNzaXplLWNlbGxzID0gPDI+OwotCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJcmVnID0gPDAgMHhmZmUwYTAwMCAwIDB4MTAwMD47Ci0JCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJcGNpMDogcGNpZUBmZmUwODAwMCB7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXBjaTE6IHBjaWVAZmZlMDkwMDAgeworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwlwY2kyOiBwY2llQGZmZTBhMDAwIHsKIAkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHg4MDAwMDAwMCAwIDB4ODAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKIAkJCSAgMHgxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDAgMHhmZmMwMDAwMCAweDAgMHgxMDAwMD47Ci0JCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQlpbnRlcnJ1cHRzID0gPDI2IDI+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwKKwkJCS8qIElEU0VMIDB4MCAqLworCQkJMDAwMCAweDAgMHgwIDB4MSAmbXBpYyAweDAgMHgxCisJCQkwMDAwIDB4MCAweDAgMHgyICZtcGljIDB4MSAweDEKKwkJCTAwMDAgMHgwIDB4MCAweDMgJm1waWMgMHgyIDB4MQorCQkJMDAwMCAweDAgMHgwIDB4NCAmbXBpYyAweDMgMHgxCisJCQk+OwogCQlwY2llQDAgewogCQkJcmVnID0gPDB4MCAweDAgMHgwIDB4MCAweDA+OwogCQkJI3NpemUtY2VsbHMgPSA8Mj47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDIwMjBzaS5kdHNpIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AyMDIwc2kuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGVmMTdmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AyMDIwc2kuZHRzaQpAQCAtMCwwICsxLDM4MiBAQAorLyoKKyAqIFAyMDIwIERldmljZSBUcmVlIFNvdXJjZQorICoKKyAqIENvcHlyaWdodCAyMDExIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy9kdHMtdjEvOworLyB7CisJY29tcGF0aWJsZSA9ICJmc2wsUDIwMjAiOworCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCSNzaXplLWNlbGxzID0gPDI+OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlQb3dlclBDLFAyMDIwQDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwweDA+OworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OworCQl9OworCisJCVBvd2VyUEMsUDIwMjBAMSB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDB4MT47CisJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CisJCX07CisJfTsKKworCWxvY2FsYnVzQGZmZTA1MDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gImZzbCxwMjAyMC1lbGJjIiwgImZzbCxlbGJjIiwgInNpbXBsZS1idXMiOworCQlyZWcgPSA8MCAweGZmZTA1MDAwIDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0cyA9IDwxOSAyPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJfTsKKworCXNvY0BmZmUwMDAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJZGV2aWNlX3R5cGUgPSAic29jIjsKKwkJY29tcGF0aWJsZSA9ICJmc2wscDIwMjAtaW1tciIsICJzaW1wbGUtYnVzIjsKKwkJcmFuZ2VzID0gPDB4MCAgMHgwIDB4ZmZlMDAwMDAgMHgxMDAwMDA+OworCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gRmlsbGVkIG91dCBieSB1Ym9vdC4KKworCQllY20tbGF3QDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsZWNtLWxhdyI7CisJCQlyZWcgPSA8MHgwIDB4MTAwMD47CisJCQlmc2wsbnVtLWxhd3MgPSA8MTI+OworCQl9OworCisJCWVjbUAxMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHAyMDIwLWVjbSIsICJmc2wsZWNtIjsKKwkJCXJlZyA9IDwweDEwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MTcgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJfTsKKworCQltZW1vcnktY29udHJvbGxlckAyMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHAyMDIwLW1lbW9yeS1jb250cm9sbGVyIjsKKwkJCXJlZyA9IDwweDIwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJaW50ZXJydXB0cyA9IDwxOCAyPjsKKwkJfTsKKworCQlpMmNAMzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NDMgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWRmc3JyOworCQl9OworCisJCWkyY0AzMTAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDMxMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw0MyAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZGZzcnI7CisJCX07CisKKwkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgeworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJcmVnID0gPDB4NDUwMCAweDEwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQlpbnRlcnJ1cHRzID0gPDQyIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKKwkJc2VyaWFsMTogc2VyaWFsQDQ2MDAgeworCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJcmVnID0gPDB4NDYwMCAweDEwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQlpbnRlcnJ1cHRzID0gPDQyIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKKwkJc3BpQDcwMDAgeworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbCxlc3BpIjsKKwkJCXJlZyA9IDwweDcwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8NTkgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJbW9kZSA9ICJjcHUiOworCQl9OworCisJCWRtYUBjMzAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYSI7CisJCQlyZWcgPSA8MHhjMzAwIDB4ND47CisJCQlyYW5nZXMgPSA8MHgwIDB4YzEwMCAweDIwMD47CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJZG1hLWNoYW5uZWxAMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8NzYgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDw3NyAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEAxMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDEwMCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDI+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8NzggMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAMTgwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgxODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwzPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDc5IDI+OworCQkJfTsKKwkJfTsKKworCQlncGlvOiBncGlvLWNvbnRyb2xsZXJAZjAwMCB7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZ3BpbyI7CisJCQlyZWcgPSA8MHhmMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NDcgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQl9OworCisJCUwyOiBsMi1jYWNoZS1jb250cm9sbGVyQDIwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHAyMDIwLWwyLWNhY2hlLWNvbnRyb2xsZXIiOworCQkJcmVnID0gPDB4MjAwMDAgMHgxMDAwPjsKKwkJCWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQljYWNoZS1zaXplID0gPDB4ODAwMDA+OyAvLyBMMiw1MTJLCisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8MTYgMj47CisJCX07CisKKwkJZG1hQDIxMzAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYSI7CisJCQlyZWcgPSA8MHgyMTMwMCAweDQ+OworCQkJcmFuZ2VzID0gPDB4MCAweDIxMTAwIDB4MjAwPjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlkbWEtY2hhbm5lbEAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyMCAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEA4MCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4ODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIxIDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDEwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyMiAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEAxODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDE4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDM+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjMgMj47CisJCQl9OworCQl9OworCisJCXVzYkAyMjAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wtdXNiMi1kciI7CisJCQlyZWcgPSA8MHgyMjAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlpbnRlcnJ1cHRzID0gPDI4IDB4Mj47CisJCX07CisKKwkJbWRpb0AyNDUyMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OworCQl9OworCisJCW1kaW9AMjU1MjAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCXJlZyA9IDwweDI2NTIwIDB4MjA+OworCQl9OworCisJCW1kaW9AMjY1MjAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCXJlZyA9IDwweDUyMCAweDIwPjsKKwkJfTsKKworCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gImVUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKKwkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJlVFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDM1IDIgMzYgMiA0MCAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCisJCX07CisKKwkJZW5ldDI6IGV0aGVybmV0QDI2MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljZWxsLWluZGV4ID0gPDI+OworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJlVFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDB4MjYwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNjAwMCAweDEwMDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDMxIDIgMzIgMiAzMyAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCisJCX07CisKKwkJc2RoY2lAMmUwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wscDIwMjAtZXNkaGMiLCAiZnNsLGVzZGhjIjsKKwkJCXJlZyA9IDwweDJlMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDcyIDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCS8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJfTsKKworCQljcnlwdG9AMzAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsc2VjMy4xIiwgImZzbCxzZWMzLjAiLCAiZnNsLHNlYzIuNCIsCisJCQkJICAgICAiZnNsLHNlYzIuMiIsICJmc2wsc2VjMi4xIiwgImZzbCxzZWMyLjAiOworCQkJcmVnID0gPDB4MzAwMDAgMHgxMDAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDQ1IDIgNTggMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWZzbCxudW0tY2hhbm5lbHMgPSA8ND47CisJCQlmc2wsY2hhbm5lbC1maWZvLWxlbiA9IDwyND47CisJCQlmc2wsZXhlYy11bml0cy1tYXNrID0gPDB4YmZlPjsKKwkJCWZzbCxkZXNjcmlwdG9yLXR5cGVzLW1hc2sgPSA8MHgzYWIwZWJmPjsKKwkJfTsKKworCQltcGljOiBwaWNANDAwMDAgeworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQlyZWcgPSA8MHg0MDAwMCAweDQwMDAwPjsKKwkJCWNvbXBhdGlibGUgPSAiY2hycCxvcGVuLXBpYyI7CisJCQlkZXZpY2VfdHlwZSA9ICJvcGVuLXBpYyI7CisJCX07CisKKwkJbXNpQDQxNjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHAyMDIwLW1zaSIsICJmc2wsbXBpYy1tc2kiOworCQkJcmVnID0gPDB4NDE2MDAgMHg4MD47CisJCQltc2ktYXZhaWxhYmxlLXJhbmdlcyA9IDwwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8CisJCQkJMHhlMCAwCisJCQkJMHhlMSAwCisJCQkJMHhlMiAwCisJCQkJMHhlMyAwCisJCQkJMHhlNCAwCisJCQkJMHhlNSAwCisJCQkJMHhlNiAwCisJCQkJMHhlNyAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQl9OworCisJCWdsb2JhbC11dGlsaXRpZXNAZTAwMDAgewkvL2dsb2JhbCB1dGlsaXRpZXMgYmxvY2sKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHAyMDIwLWd1dHMiOworCQkJcmVnID0gPDB4ZTAwMDAgMHgxMDAwPjsKKwkJCWZzbCxoYXMtcnN0Y3I7CisJCX07CisJfTsKKworCXBjaTA6IHBjaWVAZmZlMDgwMDAgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ4LXBjaWUiOworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCXJlZyA9IDwwIDB4ZmZlMDgwMDAgMCAweDEwMDA+OworCQlidXMtcmFuZ2UgPSA8MCAyNTU+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJaW50ZXJydXB0cyA9IDwyNCAyPjsKKwl9OworCisJcGNpMTogcGNpZUBmZmUwOTAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDgtcGNpZSI7CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJcmVnID0gPDAgMHhmZmUwOTAwMCAwIDB4MTAwMD47CisJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47CisJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQlpbnRlcnJ1cHRzID0gPDI1IDI+OworCX07CisKKwlwY2kyOiBwY2llQGZmZTBhMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0OC1wY2llIjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQlyZWcgPSA8MCAweGZmZTBhMDAwIDAgMHgxMDAwPjsKKwkJYnVzLXJhbmdlID0gPDAgMjU1PjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCWludGVycnVwdHMgPSA8MjYgMj47CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDQwODBkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDQwODBkcy5kdHMKaW5kZXggNWI3ZmMyOS4uOTI3Zjk0ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3A0MDgwZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wNDA4MGRzLmR0cwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBQNDA4MERTIERldmljZSBUcmVlIFNvdXJjZQogICoKLSAqIENvcHlyaWdodCAyMDA5IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqIENvcHlyaWdodCAyMDA5LTIwMTEgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQlpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mCXRoZSBHTlUgR2VuZXJhbAkgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtMzMsNiArMzMsMTcgQEAKIAkJZG1hMSA9ICZkbWExOwogCQlzZGhjID0gJnNkaGM7CiAKKwkJY3J5cHRvID0gJmNyeXB0bzsKKwkJc2VjX2pyMCA9ICZzZWNfanIwOworCQlzZWNfanIxID0gJnNlY19qcjE7CisJCXNlY19qcjIgPSAmc2VjX2pyMjsKKwkJc2VjX2pyMyA9ICZzZWNfanIzOworCQlydGljX2EgPSAmcnRpY19hOworCQlydGljX2IgPSAmcnRpY19iOworCQlydGljX2MgPSAmcnRpY19jOworCQlydGljX2QgPSAmcnRpY19kOworCQlzZWNfbW9uID0gJnNlY19tb247CisKIAkJcmlvMCA9ICZyYXBpZGlvMDsKIAl9OwogCkBAIC00MTAsNiArNDIxLDc5IEBACiAJCQlkcl9tb2RlID0gImhvc3QiOwogCQkJcGh5X3R5cGUgPSAidWxwaSI7CiAJCX07CisKKwkJY3J5cHRvOiBjcnlwdG9AMzAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHNlYy12NC4wIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlyZWcgPSA8MHgzMDAwMDAgMHgxMDAwMD47CisJCQlyYW5nZXMgPSA8MCAweDMwMDAwMCAweDEwMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJaW50ZXJydXB0cyA9IDw5MiAyPjsKKworCQkJc2VjX2pyMDoganJAMTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsc2VjLXY0LjAtam9iLXJpbmciOworCQkJCXJlZyA9IDwweDEwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDg4IDI+OworCQkJfTsKKworCQkJc2VjX2pyMToganJAMjAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsc2VjLXY0LjAtam9iLXJpbmciOworCQkJCXJlZyA9IDwweDIwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDg5IDI+OworCQkJfTsKKworCQkJc2VjX2pyMjoganJAMzAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsc2VjLXY0LjAtam9iLXJpbmciOworCQkJCXJlZyA9IDwweDMwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDkwIDI+OworCQkJfTsKKworCQkJc2VjX2pyMzoganJANDAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsc2VjLXY0LjAtam9iLXJpbmciOworCQkJCXJlZyA9IDwweDQwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDkxIDI+OworCQkJfTsKKworCQkJcnRpY0A2MDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxzZWMtdjQuMC1ydGljIjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCQlyZWcgPSA8MHg2MDAwIDB4MTAwPjsKKwkJCQlyYW5nZXMgPSA8MHgwIDB4NjEwMCAweGUwMD47CisKKwkJCQlydGljX2E6IHJ0aWMtYUAwIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJmc2wsc2VjLXY0LjAtcnRpYy1tZW1vcnkiOworCQkJCQlyZWcgPSA8MHgwMCAweDIwIDB4MTAwIDB4ODA+OworCQkJCX07CisKKwkJCQlydGljX2I6IHJ0aWMtYkAyMCB7CisJCQkJCWNvbXBhdGlibGUgPSAiZnNsLHNlYy12NC4wLXJ0aWMtbWVtb3J5IjsKKwkJCQkJcmVnID0gPDB4MjAgMHgyMCAweDIwMCAweDgwPjsKKwkJCQl9OworCisJCQkJcnRpY19jOiBydGljLWNANDAgeworCQkJCQljb21wYXRpYmxlID0gImZzbCxzZWMtdjQuMC1ydGljLW1lbW9yeSI7CisJCQkJCXJlZyA9IDwweDQwIDB4MjAgMHgzMDAgMHg4MD47CisJCQkJfTsKKworCQkJCXJ0aWNfZDogcnRpYy1kQDYwIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJmc2wsc2VjLXY0LjAtcnRpYy1tZW1vcnkiOworCQkJCQlyZWcgPSA8MHg2MCAweDIwIDB4NTAwIDB4ODA+OworCQkJCX07CisJCQl9OworCQl9OworCisJCXNlY19tb246IHNlY19tb25AMzE0MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHNlYy12NC4wLW1vbiI7CisJCQlyZWcgPSA8MHgzMTQwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJaW50ZXJydXB0cyA9IDw5MyAyPjsKKwkJfTsKIAl9OwogCiAJcmFwaWRpbzA6IHJhcGlkaW9AZmZlMGMwMDAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2VwYXByLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9lcGFwci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YzE5NjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9lcGFwci5jCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBCb290d3JhcHBlciBmb3IgZVBBUFIgY29tcGxpYW50IGZpcm13YXJlcworICoKKyAqIENvcHlyaWdodCAyMDEwIERhdmlkIEdpYnNvbiA8ZGF2aWRAZ2lic29uLmRyb3BiZWFyLmlkLmF1PiwgSUJNIENvcnBvcmF0aW9uLgorICoKKyAqIEJhc2VkIG9uIGVhcmxpZXIgYm9vdHdyYXBwZXJzIGJ5OgorICogKGMpIEJlbmphbWluIEhlcnJlbnNjaG1pZHQgPGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZz4sIElCTSBDb3JwLFwKKyAqICAgYW5kCisgKiBTY290dCBXb29kIDxzY290dHdvb2RAZnJlZXNjYWxlLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgIm9wcy5oIgorI2luY2x1ZGUgInN0ZGlvLmgiCisjaW5jbHVkZSAiaW8uaCIKKyNpbmNsdWRlIDxsaWJmZHQuaD4KKworQlNTX1NUQUNLKDQwOTYpOworCisjZGVmaW5lIEVQQVBSX1NNQUdJQwkweDY1NTA0MTUwCisjZGVmaW5lIEVQQVBSX0VNQUdJQwkweDQ1NTA0MTUwCisKK3N0YXRpYyB1bnNpZ25lZCBlcGFwcl9tYWdpYzsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGltYV9zaXplOworc3RhdGljIHVuc2lnbmVkIGxvbmcgZmR0X2FkZHI7CisKK3N0YXRpYyB2b2lkIHBsYXRmb3JtX2ZpeHVwcyh2b2lkKQoreworCWlmICgoZXBhcHJfbWFnaWMgIT0gRVBBUFJfRU1BR0lDKQorCSAgICAmJiAoZXBhcHJfbWFnaWMgIT0gRVBBUFJfU01BR0lDKSkKKwkJZmF0YWwoInI2IGNvbnRhaW5lZCAweCUwOHggaW5zdGVhZCBvZiBlUEFQUiBtYWdpYyBudW1iZXJcbiIsCisJCSAgICAgIGVwYXByX21hZ2ljKTsKKworCWlmIChpbWFfc2l6ZSA8ICh1bnNpZ25lZCBsb25nKV9lbmQpCisJCXByaW50ZigiV0FSTklORzogSW1hZ2UgbG9hZGVkIG91dHNpZGUgSU1BISIKKwkJICAgICAgICIgKF9lbmQ9JXAsIGltYV9zaXplPTB4JWx4KVxuIiwgX2VuZCwgaW1hX3NpemUpOworCWlmIChpbWFfc2l6ZSA8IGZkdF9hZGRyKQorCQlwcmludGYoIldBUk5JTkc6IERldmljZSB0cmVlIGFkZHJlc3MgaXMgb3V0c2lkZSBJTUEhIgorCQkgICAgICAgIihmZHRfYWRkcj0weCVseCwgaW1hX3NpemU9MHglbHgpXG4iLCBmZHRfYWRkciwKKwkJICAgICAgIGltYV9zaXplKTsKKwlpZiAoaW1hX3NpemUgPCBmZHRfYWRkciArIGZkdF90b3RhbHNpemUoKHZvaWQgKilmZHRfYWRkcikpCisJCXByaW50ZigiV0FSTklORzogRGV2aWNlIHRyZWUgZXh0ZW5kcyBvdXRzaWRlIElNQSEiCisJCSAgICAgICAiIChmZHRfYWRkcj0weCVseCwgc2l6ZT0weCV4LCBpbWFfc2l6ZT0weCVseFxuIiwKKwkJICAgICAgIGZkdF9hZGRyLCBmZHRfdG90YWxzaXplKCh2b2lkICopZmR0X2FkZHIpLCBpbWFfc2l6ZSk7Cit9CisKK3ZvaWQgcGxhdGZvcm1faW5pdCh1bnNpZ25lZCBsb25nIHIzLCB1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkgICB1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3KQoreworCWVwYXByX21hZ2ljID0gcjY7CisJaW1hX3NpemUgPSByNzsKKwlmZHRfYWRkciA9IHIzOworCisJLyogRklYTUU6IHdlIHNob3VsZCBwcm9jZXNzIHJlc2VydmUgZW50cmllcyAqLworCisJc2ltcGxlX2FsbG9jX2luaXQoX2VuZCwgaW1hX3NpemUgLSAodW5zaWduZWQgbG9uZylfZW5kLCAzMiwgNjQpOworCisJZmR0X2luaXQoKHZvaWQgKilmZHRfYWRkcik7CisKKwlzZXJpYWxfY29uc29sZV9pbml0KCk7CisJcGxhdGZvcm1fb3BzLmZpeHVwcyA9IHBsYXRmb3JtX2ZpeHVwczsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L3dyYXBwZXIgYi9hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyCmluZGV4IGNiOTdlNzUuLmM3NDUzMWEgMTAwNzU1Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L3dyYXBwZXIKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3Qvd3JhcHBlcgpAQCAtMzksNiArMzksNyBAQAogY2FjaGVpdD0KIGJpbmFyeT0KIGd6aXA9Lmd6CitwaWU9CiAKICMgY3Jvc3MtY29tcGlsYXRpb24gcHJlZml4CiBDUk9TUz0KQEAgLTE1Nyw5ICsxNTgsMTAgQEAKICAgICBwbGF0Zm9ybW89JG9iamVjdC9vZi5vCiAgICAgOzsKIGNvZmYpCi0gICAgcGxhdGZvcm1vPSRvYmplY3Qvb2YubworICAgIHBsYXRmb3Jtbz0iJG9iamVjdC9jcnQwLm8gJG9iamVjdC9vZi5vIgogICAgIGxkcz0kb2JqZWN0L3pJbWFnZS5jb2ZmLmxkcwogICAgIGxpbmtfYWRkcmVzcz0nMHg1MDAwMDAnCisgICAgcGllPQogICAgIDs7CiBtaWJvb3R8dWJvb3QpCiAgICAgIyBtaWJvb3QgYW5kIFUtYm9vdCB3YW50IGp1c3QgdGhlIGJhcmUgYml0cywgbm90IGFuIEVMRiBiaW5hcnkKQEAgLTIwOCw2ICsyMTAsNyBAQAogICAgIGtzZWN0aW9uPS5rZXJuZWw6dm1saW51eC5iaW4KICAgICBpc2VjdGlvbj0ua2VybmVsOmluaXRyZAogICAgIGxpbmtfYWRkcmVzcz0nJworICAgIHBpZT0KICAgICA7OwogZXA4OHhjfGVwNDA1fGVwODI0OGUpCiAgICAgcGxhdGZvcm1vPSIkb2JqZWN0L2ZpeGVkLWhlYWQubyAkb2JqZWN0LyRwbGF0Zm9ybS5vIgpAQCAtMjQ0LDYgKzI0NywxMCBAQAogdHJlZWJvb3QtaXNzNHh4LW1waWMpCiAgICAgcGxhdGZvcm1vPSIkb2JqZWN0L3RyZWVib290LWlzczR4eC5vIgogICAgIDs7CitlcGFwcikKKyAgICBsaW5rX2FkZHJlc3M9JzB4MjAwMDAwMDAnCisgICAgcGllPS1waWUKKyAgICA7OwogZXNhYwogCiB2bXo9IiR0bXBkaXIvYGJhc2VuYW1lIFwiJGtlcm5lbFwiYC4kZXh0IgpAQCAtMjUxLDcgKzI1OCw3IEBACiAgICAgJHtDUk9TU31vYmpjb3B5ICRvYmpmbGFncyAiJGtlcm5lbCIgIiR2bXouJCQiCiAKICAgICBpZiBbIC1uICIkZ3ppcCIgXTsgdGhlbgotICAgICAgICBnemlwIC1mIC05ICIkdm16LiQkIgorICAgICAgICBnemlwIC1uIC1mIC05ICIkdm16LiQkIgogICAgIGZpCiAKICAgICBpZiBbIC1uICIkY2FjaGVpdCIgXTsgdGhlbgpAQCAtMzEwLDkgKzMxNyw5IEBACiAKIGlmIFsgIiRwbGF0Zm9ybSIgIT0gIm1pYm9vdCIgXTsgdGhlbgogICAgIGlmIFsgLW4gIiRsaW5rX2FkZHJlc3MiIF0gOyB0aGVuCi0gICAgICAgIHRleHRfc3RhcnQ9Ii1UdGV4dCAkbGlua19hZGRyZXNzIC0tZGVmc3ltIF9zdGFydD0kbGlua19hZGRyZXNzIgorICAgICAgICB0ZXh0X3N0YXJ0PSItVHRleHQgJGxpbmtfYWRkcmVzcyIKICAgICBmaQotICAgICR7Q1JPU1N9bGQgLW0gZWxmMzJwcGMgLVQgJGxkcyAkdGV4dF9zdGFydCAtbyAiJG9maWxlIiBcCisgICAgJHtDUk9TU31sZCAtbSBlbGYzMnBwYyAtVCAkbGRzICR0ZXh0X3N0YXJ0ICRwaWUgLW8gIiRvZmlsZSIgXAogCSRwbGF0Zm9ybW8gJHRtcCAkb2JqZWN0L3dyYXBwZXIuYQogICAgIHJtICR0bXAKIGZpCkBAIC0zMzYsNyArMzQzLDcgQEAKICAgICAkb2JqYmluL2hhY2stY29mZiAiJG9maWxlIgogICAgIDs7CiBjdWJvb3QqKQotICAgIGd6aXAgLWYgLTkgIiRvZmlsZSIKKyAgICBnemlwIC1uIC1mIC05ICIkb2ZpbGUiCiAgICAgJHtNS0lNQUdFfSAtQSBwcGMgLU8gbGludXggLVQga2VybmVsIC1DIGd6aXAgLWEgIiRiYXNlIiAtZSAiJGVudHJ5IiBcCiAgICAgICAgICAgICAkdWJvb3RfdmVyc2lvbiAtZCAiJG9maWxlIi5neiAiJG9maWxlIgogICAgIDs7CkBAIC0zODMsNiArMzkwLDYgQEAKIAogICAgIG9kaXI9IiQoZGlybmFtZSAiJG9maWxlLmJpbiIpIgogICAgIHJtIC1mICIkb2Rpci9vdGhlcm9zLmJsZCIKLSAgICBnemlwIC0tZm9yY2UgLTkgLS1zdGRvdXQgIiRvZmlsZS5iaW4iID4gIiRvZGlyL290aGVyb3MuYmxkIgorICAgIGd6aXAgLW4gLS1mb3JjZSAtOSAtLXN0ZG91dCAiJG9maWxlLmJpbiIgPiAiJG9kaXIvb3RoZXJvcy5ibGQiCiAgICAgOzsKIGVzYWMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L3pJbWFnZS5jb2ZmLmxkcy5TIGIvYXJjaC9wb3dlcnBjL2Jvb3QvekltYWdlLmNvZmYubGRzLlMKaW5kZXggODU2ZGM3OC4uZGU0YzllMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvekltYWdlLmNvZmYubGRzLlMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvekltYWdlLmNvZmYubGRzLlMKQEAgLTMsMTMgKzMsMTMgQEAKIEVYVEVSTihfemltYWdlX3N0YXJ0X29wZCkKIFNFQ1RJT05TCiB7Ci0gIF9zdGFydCA9IC47CiAgIC50ZXh0ICAgICAgOgogICB7CisgICAgX3N0YXJ0ID0gLjsKICAgICAqKC50ZXh0KQogICAgICooLmZpeHVwKQorICAgIF9ldGV4dCA9IC47CiAgIH0KLSAgX2V0ZXh0ID0gLjsKICAgLiA9IEFMSUdOKDQwOTYpOwogICAuZGF0YSAgICA6CiAgIHsKQEAgLTE3LDkgKzE3LDcgQEAKICAgICAqKC5kYXRhKikKICAgICAqKF9fYnVpbHRpbl8qKQogICAgICooLnNkYXRhKikKLSAgICBfX2dvdDJfc3RhcnQgPSAuOwogICAgICooLmdvdDIpCi0gICAgX19nb3QyX2VuZCA9IC47CiAKICAgICBfZHRiX3N0YXJ0ID0gLjsKICAgICAqKC5rZXJuZWw6ZHRiKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvekltYWdlLmxkcy5TIGIvYXJjaC9wb3dlcnBjL2Jvb3QvekltYWdlLmxkcy5TCmluZGV4IDA5NjJkNjIuLjJiZDg3MzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L3pJbWFnZS5sZHMuUworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC96SW1hZ2UubGRzLlMKQEAgLTMsNDkgKzMsNjQgQEAKIEVYVEVSTihfemltYWdlX3N0YXJ0KQogU0VDVElPTlMKIHsKLSAgX3N0YXJ0ID0gLjsKICAgLnRleHQgICAgICA6CiAgIHsKKyAgICBfc3RhcnQgPSAuOwogICAgICooLnRleHQpCiAgICAgKiguZml4dXApCisgICAgX2V0ZXh0ID0gLjsKICAgfQotICBfZXRleHQgPSAuOwogICAuID0gQUxJR04oNDA5Nik7CiAgIC5kYXRhICAgIDoKICAgewogICAgICooLnJvZGF0YSopCiAgICAgKiguZGF0YSopCiAgICAgKiguc2RhdGEqKQotICAgIF9fZ290Ml9zdGFydCA9IC47CiAgICAgKiguZ290MikKLSAgICBfX2dvdDJfZW5kID0gLjsKICAgfQorICAuZHluc3ltIDogeyAqKC5keW5zeW0pIH0KKyAgLmR5bnN0ciA6IHsgKiguZHluc3RyKSB9CisgIC5keW5hbWljIDoKKyAgeworICAgIF9fZHluYW1pY19zdGFydCA9IC47CisgICAgKiguZHluYW1pYykKKyAgfQorICAuaGFzaCA6IHsgKiguaGFzaCkgfQorICAuaW50ZXJwIDogeyAqKC5pbnRlcnApIH0KKyAgLnJlbGEuZHluIDogeyAqKC5yZWxhKikgfQogCiAgIC4gPSBBTElHTig4KTsKLSAgX2R0Yl9zdGFydCA9IC47Ci0gIC5rZXJuZWw6ZHRiIDogeyAqKC5rZXJuZWw6ZHRiKSB9Ci0gIF9kdGJfZW5kID0gLjsKKyAgLmtlcm5lbDpkdGIgOgorICB7CisgICAgX2R0Yl9zdGFydCA9IC47CisgICAgKigua2VybmVsOmR0YikKKyAgICBfZHRiX2VuZCA9IC47CisgIH0KIAogICAuID0gQUxJR04oNDA5Nik7Ci0gIF92bWxpbnV4X3N0YXJ0ID0gIC47Ci0gIC5rZXJuZWw6dm1saW51eC5zdHJpcCA6IHsgKigua2VybmVsOnZtbGludXguc3RyaXApIH0KLSAgX3ZtbGludXhfZW5kID0gIC47CisgIC5rZXJuZWw6dm1saW51eC5zdHJpcCA6CisgIHsKKyAgICBfdm1saW51eF9zdGFydCA9ICAuOworICAgICooLmtlcm5lbDp2bWxpbnV4LnN0cmlwKQorICAgIF92bWxpbnV4X2VuZCA9ICAuOworICB9CiAKICAgLiA9IEFMSUdOKDQwOTYpOwotICBfaW5pdHJkX3N0YXJ0ID0gIC47Ci0gIC5rZXJuZWw6aW5pdHJkIDogeyAqKC5rZXJuZWw6aW5pdHJkKSB9Ci0gIF9pbml0cmRfZW5kID0gIC47CisgIC5rZXJuZWw6aW5pdHJkIDoKKyAgeworICAgIF9pbml0cmRfc3RhcnQgPSAgLjsKKyAgICAqKC5rZXJuZWw6aW5pdHJkKQorICAgIF9pbml0cmRfZW5kID0gIC47CisgIH0KIAogICAuID0gQUxJR04oNDA5Nik7Ci0gIF9lZGF0YSAgPSAgLjsKLQotICAuID0gQUxJR04oNDA5Nik7Ci0gIF9fYnNzX3N0YXJ0ID0gLjsKICAgLmJzcyAgICAgICA6CiAgIHsKLSAgICooLnNic3MpCi0gICAqKC5ic3MpCisgICAgX2VkYXRhICA9ICAuOworICAgIF9fYnNzX3N0YXJ0ID0gLjsKKyAgICAqKC5zYnNzKQorICAgICooLmJzcykKKyAgICAqKENPTU1PTikKKyAgICBfZW5kID0gLiA7CiAgIH0KLSAgLiA9IEFMSUdOKDQwOTYpOwotICBfZW5kID0gLiA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMTNfcmRiX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxM19yZGJfZGVmY29uZmlnCmluZGV4IGM2ODNiY2UuLjEyNmVmMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxM19yZGJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxM19yZGJfZGVmY29uZmlnCkBAIC0xMDQsNyArMTA0LDYgQEAKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKIENPTkZJR19DUllQVE9fUENCQz1tCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMTVfcmRiX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxNV9yZGJfZGVmY29uZmlnCmluZGV4IGE3MjFjZDMuLmFiY2YwMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxNV9yZGJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxNV9yZGJfZGVmY29uZmlnCkBAIC0xMDEsNyArMTAxLDYgQEAKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKIENPTkZJR19DUllQVE9fUENCQz1tCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NDBfYWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODU0MF9hZHNfZGVmY29uZmlnCmluZGV4IDU1ZTA3MjUuLjExNjYyYzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODU0MF9hZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODU0MF9hZHNfZGVmY29uZmlnCkBAIC01OCw3ICs1OCw2IEBACiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTYwX2Fkc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NjBfYWRzX2RlZmNvbmZpZwppbmRleCBkNzI0MDk1Li5lYmU5YjMwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NjBfYWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NjBfYWRzX2RlZmNvbmZpZwpAQCAtNTksNyArNTksNiBAQAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CiBDT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODV4eF9jZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NXh4X2Nkc19kZWZjb25maWcKaW5kZXggNGI0NGJlYS4uZWIyNTIyOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NXh4X2Nkc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NXh4X2Nkc19kZWZjb25maWcKQEAgLTYzLDcgKzYzLDYgQEAKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQogQ09ORklHX0RFQlVHX01VVEVYRVM9eQotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2NDFfaHBjbl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2NDFfaHBjbl9kZWZjb25maWcKaW5kZXggYjYxNDUwOGQuLmY1MWM3ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODY0MV9ocGNuX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2NDFfaHBjbl9kZWZjb25maWcKQEAgLTE2OCw3ICsxNjgsNiBAQAogQ09ORklHX0NSQ19UMTBESUY9eQogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19JTkZPPXkKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2Mya19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jMmtfZGVmY29uZmlnCmluZGV4IGY5ZTZhM2UuLjJhODRmZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2Mya19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYzJrX2RlZmNvbmZpZwpAQCAtMTMyLDggKzEzMiw4IEBACiBDT05GSUdfTkVUX0NMU19SU1ZQNj1tCiBDT05GSUdfTkVUX0NMU19JTkQ9eQogQ09ORklHX0JUPW0KLUNPTkZJR19CVF9MMkNBUD1tCi1DT05GSUdfQlRfU0NPPW0KK0NPTkZJR19CVF9MMkNBUD15CitDT05GSUdfQlRfU0NPPXkKIENPTkZJR19CVF9SRkNPTU09bQogQ09ORklHX0JUX1JGQ09NTV9UVFk9eQogQ09ORklHX0JUX0JORVA9bQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZTU1eHhfc21wX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2U1NXh4X3NtcF9kZWZjb25maWcKaW5kZXggOWZhMTYxM2UuLmQzMjI4MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2U1NXh4X3NtcF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZTU1eHhfc21wX2RlZmNvbmZpZwpAQCAtNiwxMCArNiwxMCBAQAogQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CitDT05GSUdfU1BBUlNFX0lSUT15CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRVhQRVJUPXkKQEAgLTI1LDggKzI1LDMyIEBACiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfQklORk1UX01JU0M9bQotQ09ORklHX1NQQVJTRV9JUlE9eQogIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKK0NPTkZJR19ORVQ9eQorQ09ORklHX1BBQ0tFVD15CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTV9VU0VSPXkKK0NPTkZJR19ORVRfS0VZPXkKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15CitDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTPXkKK0NPTkZJR19JUF9ST1VURV9NVUxUSVBBVEg9eQorQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CitDT05GSUdfSVBfUE5QX1JBUlA9eQorQ09ORklHX05FVF9JUElQPXkKK0NPTkZJR19JUF9NUk9VVEU9eQorQ09ORklHX0lQX1BJTVNNX1YxPXkKK0NPTkZJR19JUF9QSU1TTV9WMj15CitDT05GSUdfQVJQRD15CitDT05GSUdfSU5FVF9FU1A9eQorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNj15CitDT05GSUdfSVBfU0NUUD1tCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKQEAgLTM0LDYgKzU4LDkgQEAKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTEzMTA3MgogQ09ORklHX01JU0NfREVWSUNFUz15CiBDT05GSUdfRUVQUk9NX0xFR0FDWT15CitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfRFVNTVk9eQorQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CkBAIC02NCwyMiArOTEsMTQgQEAKIENPTkZJR19OTFNfVVRGOD1tCiBDT05GSUdfQ1JDX1QxMERJRj15CiBDT05GSUdfQ1JDX0lUVV9UPW0KLUNPTkZJR19MSUJDUkMzMkM9bQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX0RFQlVHX0ZTPXkKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfSU5GTz15CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiBDT05GSUdfVklSUV9ERUJVRz15Ci1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQ0JDPXkKIENPTkZJR19DUllQVE9fUENCQz1tCi1DT05GSUdfQ1JZUFRPX0hNQUM9eQotQ09ORklHX0NSWVBUT19NRDU9eQotQ09ORklHX0NSWVBUT19TSEExPW0KLUNPTkZJR19DUllQVE9fREVTPXkKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVWX1RBTElUT1M9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X2RlZmNvbmZpZwppbmRleCBjMDZhODZjLi45NmI4OWRmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X2RlZmNvbmZpZwpAQCAtMjA0LDcgKzIwNCw2IEBACiBDT05GSUdfREVCVUdfRlM9eQogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19JTkZPPXkKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfc21wX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfc21wX2RlZmNvbmZpZwppbmRleCA5NDJjZWQ5Li5kZTY1ODQxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X3NtcF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9zbXBfZGVmY29uZmlnCkBAIC0yMDYsNyArMjA2LDYgQEAKIENPTkZJR19ERUJVR19GUz15CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0lORk89eQogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODZ4eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4Nnh4X2RlZmNvbmZpZwppbmRleCAwMzhhMzA4Li5hMWNjODE3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4Nnh4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4Nnh4X2RlZmNvbmZpZwpAQCAtMTcxLDcgKzE3MSw2IEBACiBDT05GSUdfQ1JDX1QxMERJRj15CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0lORk89eQogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG1hYzMyX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BtYWMzMl9kZWZjb25maWcKaW5kZXggYWM0ZmM0MS4uZjhiMzk0YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG1hYzMyX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wbWFjMzJfZGVmY29uZmlnCkBAIC0xMTIsOCArMTEyLDggQEAKIENPTkZJR19JUkRBX0ZBU1RfUlI9eQogQ09ORklHX0lSVFRZX1NJUj1tCiBDT05GSUdfQlQ9bQotQ09ORklHX0JUX0wyQ0FQPW0KLUNPTkZJR19CVF9TQ089bQorQ09ORklHX0JUX0wyQ0FQPXkKK0NPTkZJR19CVF9TQ089eQogQ09ORklHX0JUX1JGQ09NTT1tCiBDT05GSUdfQlRfUkZDT01NX1RUWT15CiBDT05GSUdfQlRfQk5FUD1tCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZwppbmRleCAwYTEwZmIwLi4yMTQyMDg5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWcKQEAgLTM1MSw4ICszNTEsOCBAQAogQ09ORklHX1ZJQV9GSVI9bQogQ09ORklHX01DU19GSVI9bQogQ09ORklHX0JUPW0KLUNPTkZJR19CVF9MMkNBUD1tCi1DT05GSUdfQlRfU0NPPW0KK0NPTkZJR19CVF9MMkNBUD15CitDT05GSUdfQlRfU0NPPXkKIENPTkZJR19CVF9SRkNPTU09bQogQ09ORklHX0JUX1JGQ09NTV9UVFk9eQogQ09ORklHX0JUX0JORVA9bQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHMzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWcKaW5kZXggY2FiYTkxOS4uNjQ3MjMyMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHMzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wczNfZGVmY29uZmlnCkBAIC01Miw4ICs1Miw4IEBACiAjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAogQ09ORklHX0lQVjY9eQogQ09ORklHX0JUPW0KLUNPTkZJR19CVF9MMkNBUD1tCi1DT05GSUdfQlRfU0NPPW0KK0NPTkZJR19CVF9MMkNBUD15CitDT05GSUdfQlRfU0NPPXkKIENPTkZJR19CVF9SRkNPTU09bQogQ09ORklHX0JUX1JGQ09NTV9UVFk9eQogQ09ORklHX0JUX0JORVA9bQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZwppbmRleCAyNDlkZGQwLi43ZGUxMzg2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZwpAQCAtMTQ2LDEyICsxNDYsMTggQEAKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15CiBDT05GSUdfU0NTSV9GQ19BVFRSUz15CiBDT05GSUdfU0NTSV9TQVNfQVRUUlM9bQorQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0k9bQorQ09ORklHX1NDU0lfQ1hHQjRfSVNDU0k9bQorQ09ORklHX1NDU0lfQk5YMl9JU0NTST1tCitDT05GSUdfU0NTSV9CTlgyX0lTQ1NJPW0KK0NPTkZJR19CRTJJU0NTST1tCiBDT05GSUdfU0NTSV9JQk1WU0NTST15CiBDT05GSUdfU0NTSV9JQk1WRkM9bQogQ09ORklHX1NDU0lfU1lNNTNDOFhYXzI9eQogQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RNQV9BRERSRVNTSU5HX01PREU9MAogQ09ORklHX1NDU0lfSVBSPXkKIENPTkZJR19TQ1NJX1FMQV9GQz1tCitDT05GSUdfU0NTSV9RTEFfSVNDU0k9bQogQ09ORklHX1NDU0lfTFBGQz1tCiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9TRkYgaXMgbm90IHNldApAQCAtMTk3LDYgKzIwMyw4IEBACiBDT05GSUdfTVlSSTEwR0U9bQogQ09ORklHX05FVFhFTl9OSUM9bQogQ09ORklHX01MWDRfRU49bQorQ09ORklHX1FMR0U9bQorQ09ORklHX0JFMk5FVD1tCiBDT05GSUdfUFBQPW0KIENPTkZJR19QUFBfQVNZTkM9bQogQ09ORklHX1BQUF9TWU5DX1RUWT1tCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGFibGUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oCmluZGV4IDE4MzNkMWEuLmMwZDg0MmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oCkBAIC0xNTcsNiArMTU3LDcgQEAKICNkZWZpbmUgQ1BVX0ZUUl80NzZfREQyCQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAxMDAwMCkKICNkZWZpbmUgQ1BVX0ZUUl9ORUVEX0NPSEVSRU5UCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDIwMDAwKQogI2RlZmluZSBDUFVfRlRSX05PX0JUSUMJCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDQwMDAwKQorI2RlZmluZSBDUFVfRlRSX0RFQlVHX0xWTF9FWEMJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwODAwMDApCiAjZGVmaW5lIENQVV9GVFJfTk9EU0lTUkFMSUdOCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMTAwMDAwKQogI2RlZmluZSBDUFVfRlRSX1BQQ19MRQkJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAyMDAwMDApCiAjZGVmaW5lIENQVV9GVFJfUkVBTF9MRQkJCUFTTV9DT05TVCgweDAwMDAwMDAwMDA0MDAwMDApCkBAIC0xNzgsMjIgKzE3OSwxOCBAQAogI2RlZmluZSBMT05HX0FTTV9DT05TVCh4KQkJMAogI2VuZGlmCiAKLSNkZWZpbmUgQ1BVX0ZUUl9TTEIJCQlMT05HX0FTTV9DT05TVCgweDAwMDAwMDAxMDAwMDAwMDApCi0jZGVmaW5lIENQVV9GVFJfMTZNX1BBR0UJCUxPTkdfQVNNX0NPTlNUKDB4MDAwMDAwMDIwMDAwMDAwMCkKLSNkZWZpbmUgQ1BVX0ZUUl9UTEJJRUwJCQlMT05HX0FTTV9DT05TVCgweDAwMDAwMDA0MDAwMDAwMDApCisKKyNkZWZpbmUgQ1BVX0ZUUl9IVk1PREVfMjA2CQlMT05HX0FTTV9DT05TVCgweDAwMDAwMDA4MDAwMDAwMDApCisjZGVmaW5lIENQVV9GVFJfQ0ZBUgkJCUxPTkdfQVNNX0NPTlNUKDB4MDAwMDAwMTAwMDAwMDAwMCkKICNkZWZpbmUgQ1BVX0ZUUl9JQUJSCQkJTE9OR19BU01fQ09OU1QoMHgwMDAwMDAyMDAwMDAwMDAwKQogI2RlZmluZSBDUFVfRlRSX01NQ1JBCQkJTE9OR19BU01fQ09OU1QoMHgwMDAwMDA0MDAwMDAwMDAwKQogI2RlZmluZSBDUFVfRlRSX0NUUkwJCQlMT05HX0FTTV9DT05TVCgweDAwMDAwMDgwMDAwMDAwMDApCiAjZGVmaW5lIENQVV9GVFJfU01UCQkJTE9OR19BU01fQ09OU1QoMHgwMDAwMDEwMDAwMDAwMDAwKQotI2RlZmluZSBDUFVfRlRSX0xPQ0tMRVNTX1RMQklFCQlMT05HX0FTTV9DT05TVCgweDAwMDAwNDAwMDAwMDAwMDApCi0jZGVmaW5lIENQVV9GVFJfQ0lfTEFSR0VfUEFHRQkJTE9OR19BU01fQ09OU1QoMHgwMDAwMTAwMDAwMDAwMDAwKQogI2RlZmluZSBDUFVfRlRSX1BBVVNFX1pFUk8JCUxPTkdfQVNNX0NPTlNUKDB4MDAwMDIwMDAwMDAwMDAwMCkKICNkZWZpbmUgQ1BVX0ZUUl9QVVJSCQkJTE9OR19BU01fQ09OU1QoMHgwMDAwNDAwMDAwMDAwMDAwKQogI2RlZmluZSBDUFVfRlRSX0NFTExfVEJfQlVHCQlMT05HX0FTTV9DT05TVCgweDAwMDA4MDAwMDAwMDAwMDApCiAjZGVmaW5lIENQVV9GVFJfU1BVUlIJCQlMT05HX0FTTV9DT05TVCgweDAwMDEwMDAwMDAwMDAwMDApCiAjZGVmaW5lIENQVV9GVFJfRFNDUgkJCUxPTkdfQVNNX0NPTlNUKDB4MDAwMjAwMDAwMDAwMDAwMCkKLSNkZWZpbmUgQ1BVX0ZUUl8xVF9TRUdNRU5UCQlMT05HX0FTTV9DT05TVCgweDAwMDQwMDAwMDAwMDAwMDApCi0jZGVmaW5lIENQVV9GVFJfTk9fU0xCSUVfQgkJTE9OR19BU01fQ09OU1QoMHgwMDA4MDAwMDAwMDAwMDAwKQogI2RlZmluZSBDUFVfRlRSX1ZTWAkJCUxPTkdfQVNNX0NPTlNUKDB4MDAxMDAwMDAwMDAwMDAwMCkKICNkZWZpbmUgQ1BVX0ZUUl9TQU8JCQlMT05HX0FTTV9DT05TVCgweDAwMjAwMDAwMDAwMDAwMDApCiAjZGVmaW5lIENQVV9GVFJfQ1BfVVNFX0RDQlRaCQlMT05HX0FTTV9DT05TVCgweDAwNDAwMDAwMDAwMDAwMDApCkBAIC0yMDIsMTIgKzE5OSwxNCBAQAogI2RlZmluZSBDUFVfRlRSX1NUQ1hfQ0hFQ0tTX0FERFJFU1MJTE9OR19BU01fQ09OU1QoMHgwMjAwMDAwMDAwMDAwMDAwKQogI2RlZmluZSBDUFVfRlRSX1BPUENOVEIJCQlMT05HX0FTTV9DT05TVCgweDA0MDAwMDAwMDAwMDAwMDApCiAjZGVmaW5lIENQVV9GVFJfUE9QQ05URAkJCUxPTkdfQVNNX0NPTlNUKDB4MDgwMDAwMDAwMDAwMDAwMCkKKyNkZWZpbmUgQ1BVX0ZUUl9JQ1NXWAkJCUxPTkdfQVNNX0NPTlNUKDB4MTAwMDAwMDAwMDAwMDAwMCkKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAotI2RlZmluZSBDUFVfRlRSX1BQQ0FTX0FSQ0hfVjIJKENQVV9GVFJfU0xCIHwgXAotCQkJCSBDUFVfRlRSX1RMQklFTCB8IENQVV9GVFJfTk9FWEVDVVRFIHwgXAotCQkJCSBDUFVfRlRSX05PRFNJU1JBTElHTiB8IENQVV9GVFJfMTZNX1BBR0UpCisjZGVmaW5lIENQVV9GVFJfUFBDQVNfQVJDSF9WMgkoQ1BVX0ZUUl9OT0VYRUNVVEUgfCBDUFVfRlRSX05PRFNJU1JBTElHTikKKworI2RlZmluZSBNTVVfRlRSX1BQQ0FTX0FSQ0hfVjIgCShNTVVfRlRSX1NMQiB8IE1NVV9GVFJfVExCSUVMIHwgXAorCQkJCSBNTVVfRlRSXzE2TV9QQUdFKQogCiAvKiBXZSBvbmx5IHNldCB0aGUgYWx0aXZlYyBmZWF0dXJlcyBpZiB0aGUga2VybmVsIHdhcyBjb21waWxlZCB3aXRoIGFsdGl2ZWMKICAqIHN1cHBvcnQKQEAgLTM4Nyw3ICszODYsOCBAQAogCSAgICBDUFVfRlRSX0RCRUxMKQogI2RlZmluZSBDUFVfRlRSU19FNTUwMAkoQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX05PRFNJU1JBTElHTiB8IFwKIAkgICAgQ1BVX0ZUUl9MMkNTUiB8IENQVV9GVFJfTFdTWU5DIHwgQ1BVX0ZUUl9OT0VYRUNVVEUgfCBcCi0JICAgIENQVV9GVFJfREJFTEwgfCBDUFVfRlRSX1BPUENOVEIgfCBDUFVfRlRSX1BPUENOVEQpCisJICAgIENQVV9GVFJfREJFTEwgfCBDUFVfRlRSX1BPUENOVEIgfCBDUFVfRlRSX1BPUENOVEQgfCBcCisJICAgIENQVV9GVFJfREVCVUdfTFZMX0VYQykKICNkZWZpbmUgQ1BVX0ZUUlNfR0VORVJJQ18zMgkoQ1BVX0ZUUl9DT01NT04gfCBDUFVfRlRSX05PRFNJU1JBTElHTikKIAogLyogNjQtYml0IENQVXMgKi8KQEAgLTQwNyw0NCArNDA3LDQ1IEBACiAjZGVmaW5lIENQVV9GVFJTX1BPV0VSNQkoQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX0xXU1lOQyB8IFwKIAkgICAgQ1BVX0ZUUl9QUENBU19BUkNIX1YyIHwgQ1BVX0ZUUl9DVFJMIHwgXAogCSAgICBDUFVfRlRSX01NQ1JBIHwgQ1BVX0ZUUl9TTVQgfCBcCi0JICAgIENQVV9GVFJfQ09IRVJFTlRfSUNBQ0hFIHwgQ1BVX0ZUUl9MT0NLTEVTU19UTEJJRSB8IFwKLQkgICAgQ1BVX0ZUUl9QVVJSIHwgQ1BVX0ZUUl9TVENYX0NIRUNLU19BRERSRVNTIHwgXAotCSAgICBDUFVfRlRSX1BPUENOVEIpCisJICAgIENQVV9GVFJfQ09IRVJFTlRfSUNBQ0hFIHwgQ1BVX0ZUUl9QVVJSIHwgXAorCSAgICBDUFVfRlRSX1NUQ1hfQ0hFQ0tTX0FERFJFU1MgfCBDUFVfRlRSX1BPUENOVEIpCiAjZGVmaW5lIENQVV9GVFJTX1BPV0VSNiAoQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX0xXU1lOQyB8IFwKIAkgICAgQ1BVX0ZUUl9QUENBU19BUkNIX1YyIHwgQ1BVX0ZUUl9DVFJMIHwgXAogCSAgICBDUFVfRlRSX01NQ1JBIHwgQ1BVX0ZUUl9TTVQgfCBcCi0JICAgIENQVV9GVFJfQ09IRVJFTlRfSUNBQ0hFIHwgQ1BVX0ZUUl9MT0NLTEVTU19UTEJJRSB8IFwKKwkgICAgQ1BVX0ZUUl9DT0hFUkVOVF9JQ0FDSEUgfCBcCiAJICAgIENQVV9GVFJfUFVSUiB8IENQVV9GVFJfU1BVUlIgfCBDUFVfRlRSX1JFQUxfTEUgfCBcCiAJICAgIENQVV9GVFJfRFNDUiB8IENQVV9GVFJfVU5BTElHTkVEX0xEX1NURCB8IFwKLQkgICAgQ1BVX0ZUUl9TVENYX0NIRUNLU19BRERSRVNTIHwgQ1BVX0ZUUl9QT1BDTlRCKQorCSAgICBDUFVfRlRSX1NUQ1hfQ0hFQ0tTX0FERFJFU1MgfCBDUFVfRlRSX1BPUENOVEIgfCBDUFVfRlRSX0NGQVIpCiAjZGVmaW5lIENQVV9GVFJTX1BPV0VSNyAoQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX0xXU1lOQyB8IFwKLQkgICAgQ1BVX0ZUUl9QUENBU19BUkNIX1YyIHwgQ1BVX0ZUUl9DVFJMIHwgXAorCSAgICBDUFVfRlRSX1BQQ0FTX0FSQ0hfVjIgfCBDUFVfRlRSX0NUUkwgfCBDUFVfRlRSX0hWTU9ERV8yMDYgfFwKIAkgICAgQ1BVX0ZUUl9NTUNSQSB8IENQVV9GVFJfU01UIHwgXAotCSAgICBDUFVfRlRSX0NPSEVSRU5UX0lDQUNIRSB8IENQVV9GVFJfTE9DS0xFU1NfVExCSUUgfCBcCisJICAgIENQVV9GVFJfQ09IRVJFTlRfSUNBQ0hFIHwgXAogCSAgICBDUFVfRlRSX1BVUlIgfCBDUFVfRlRSX1NQVVJSIHwgQ1BVX0ZUUl9SRUFMX0xFIHwgXAogCSAgICBDUFVfRlRSX0RTQ1IgfCBDUFVfRlRSX1NBTyAgfCBDUFVfRlRSX0FTWU1fU01UIHwgXAotCSAgICBDUFVfRlRSX1NUQ1hfQ0hFQ0tTX0FERFJFU1MgfCBDUFVfRlRSX1BPUENOVEIgfCBDUFVfRlRSX1BPUENOVEQpCisJICAgIENQVV9GVFJfU1RDWF9DSEVDS1NfQUREUkVTUyB8IENQVV9GVFJfUE9QQ05UQiB8IENQVV9GVFJfUE9QQ05URCB8IFwKKwkgICAgQ1BVX0ZUUl9JQ1NXWCB8IENQVV9GVFJfQ0ZBUikKICNkZWZpbmUgQ1BVX0ZUUlNfQ0VMTAkoQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX0xXU1lOQyB8IFwKIAkgICAgQ1BVX0ZUUl9QUENBU19BUkNIX1YyIHwgQ1BVX0ZUUl9DVFJMIHwgXAogCSAgICBDUFVfRlRSX0FMVElWRUNfQ09NUCB8IENQVV9GVFJfTU1DUkEgfCBDUFVfRlRSX1NNVCB8IFwKLQkgICAgQ1BVX0ZUUl9QQVVTRV9aRVJPIHwgQ1BVX0ZUUl9DSV9MQVJHRV9QQUdFIHwgXAotCSAgICBDUFVfRlRSX0NFTExfVEJfQlVHIHwgQ1BVX0ZUUl9DUF9VU0VfRENCVFogfCBcCisJICAgIENQVV9GVFJfUEFVU0VfWkVSTyAgfCBDUFVfRlRSX0NFTExfVEJfQlVHIHwgQ1BVX0ZUUl9DUF9VU0VfRENCVFogfCBcCiAJICAgIENQVV9GVFJfVU5BTElHTkVEX0xEX1NURCkKICNkZWZpbmUgQ1BVX0ZUUlNfUEE2VCAoQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX0xXU1lOQyB8IFwKLQkgICAgQ1BVX0ZUUl9QUENBU19BUkNIX1YyIHwgXAotCSAgICBDUFVfRlRSX0FMVElWRUNfQ09NUCB8IENQVV9GVFJfQ0lfTEFSR0VfUEFHRSB8IFwKLQkgICAgQ1BVX0ZUUl9QVVJSIHwgQ1BVX0ZUUl9SRUFMX0xFIHwgQ1BVX0ZUUl9OT19TTEJJRV9CKQorCSAgICBDUFVfRlRSX1BQQ0FTX0FSQ0hfVjIgfCBDUFVfRlRSX0FMVElWRUNfQ09NUCB8IFwKKwkgICAgQ1BVX0ZUUl9QVVJSIHwgQ1BVX0ZUUl9SRUFMX0xFKQogI2RlZmluZSBDUFVfRlRSU19DT01QQVRJQkxFCShDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfUFBDQVNfQVJDSF9WMikKIAorI2RlZmluZSBDUFVfRlRSU19BMiAoQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX1NNVCB8IENQVV9GVFJfREJFTEwgfCBcCisJCSAgICAgQ1BVX0ZUUl9OT0VYRUNVVEUgfCBDUFVfRlRSX05PRFNJU1JBTElHTikKKwogI2lmZGVmIF9fcG93ZXJwYzY0X18KICNpZmRlZiBDT05GSUdfUFBDX0JPT0szRQotI2RlZmluZSBDUFVfRlRSU19QT1NTSUJMRQkoQ1BVX0ZUUlNfRTU1MDApCisjZGVmaW5lIENQVV9GVFJTX1BPU1NJQkxFCShDUFVfRlRSU19FNTUwMCB8IENQVV9GVFJTX0EyKQogI2Vsc2UKICNkZWZpbmUgQ1BVX0ZUUlNfUE9TU0lCTEUJXAogCSAgICAoQ1BVX0ZUUlNfUE9XRVIzIHwgQ1BVX0ZUUlNfUlM2NCB8IENQVV9GVFJTX1BPV0VSNCB8CVwKIAkgICAgQ1BVX0ZUUlNfUFBDOTcwIHwgQ1BVX0ZUUlNfUE9XRVI1IHwgQ1BVX0ZUUlNfUE9XRVI2IHwJXAogCSAgICBDUFVfRlRSU19QT1dFUjcgfCBDUFVfRlRSU19DRUxMIHwgQ1BVX0ZUUlNfUEE2VCB8CQlcCi0JICAgIENQVV9GVFJfMVRfU0VHTUVOVCB8IENQVV9GVFJfVlNYKQorCSAgICBDUFVfRlRSX1ZTWCkKICNlbmRpZgogI2Vsc2UKIGVudW0gewpAQCAtNDg3LDcgKzQ4OCw3IEBACiAKICNpZmRlZiBfX3Bvd2VycGM2NF9fCiAjaWZkZWYgQ09ORklHX1BQQ19CT09LM0UKLSNkZWZpbmUgQ1BVX0ZUUlNfQUxXQVlTCQkoQ1BVX0ZUUlNfRTU1MDApCisjZGVmaW5lIENQVV9GVFJTX0FMV0FZUwkJKENQVV9GVFJTX0U1NTAwICYgQ1BVX0ZUUlNfQTIpCiAjZWxzZQogI2RlZmluZSBDUFVfRlRSU19BTFdBWVMJCVwKIAkgICAgKENQVV9GVFJTX1BPV0VSMyAmIENQVV9GVFJTX1JTNjQgJiBDUFVfRlRSU19QT1dFUjQgJglcCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGhyZWFkcy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRocmVhZHMuaAppbmRleCBmNzFiYjRjLi5jZTUxNmU1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGhyZWFkcy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0aHJlYWRzLmgKQEAgLTM3LDE2ICszNywxNiBAQAogICogVGhpcyBjYW4gdHlwaWNhbGx5IGJlIHVzZWQgZm9yIHRoaW5ncyBsaWtlIElQSSBmb3IgdGxiIGludmFsaWRhdGlvbnMKICAqIHNpbmNlIHRob3NlIG5lZWQgdG8gYmUgZG9uZSBvbmx5IG9uY2UgcGVyIGNvcmUvVExCCiAgKi8KLXN0YXRpYyBpbmxpbmUgY3B1bWFza190IGNwdV90aHJlYWRfbWFza190b19jb3JlcyhjcHVtYXNrX3QgdGhyZWFkcykKK3N0YXRpYyBpbmxpbmUgY3B1bWFza190IGNwdV90aHJlYWRfbWFza190b19jb3Jlcyhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqdGhyZWFkcykKIHsKIAljcHVtYXNrX3QJdG1wLCByZXM7CiAJaW50CQlpOwogCi0JcmVzID0gQ1BVX01BU0tfTk9ORTsKKwljcHVtYXNrX2NsZWFyKCZyZXMpOwogCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpICs9IHRocmVhZHNfcGVyX2NvcmUpIHsKLQkJY3B1c19zaGlmdF9sZWZ0KHRtcCwgdGhyZWFkc19jb3JlX21hc2ssIGkpOwotCQlpZiAoY3B1c19pbnRlcnNlY3RzKHRocmVhZHMsIHRtcCkpCi0JCQljcHVfc2V0KGksIHJlcyk7CisJCWNwdW1hc2tfc2hpZnRfbGVmdCgmdG1wLCAmdGhyZWFkc19jb3JlX21hc2ssIGkpOworCQlpZiAoY3B1bWFza19pbnRlcnNlY3RzKHRocmVhZHMsICZ0bXApKQorCQkJY3B1bWFza19zZXRfY3B1KGksICZyZXMpOwogCX0KIAlyZXR1cm4gcmVzOwogfQpAQCAtNTgsNyArNTgsNyBAQAogCiBzdGF0aWMgaW5saW5lIGNwdW1hc2tfdCBjcHVfb25saW5lX2NvcmVzX21hcCh2b2lkKQogewotCXJldHVybiBjcHVfdGhyZWFkX21hc2tfdG9fY29yZXMoY3B1X29ubGluZV9tYXApOworCXJldHVybiBjcHVfdGhyZWFkX21hc2tfdG9fY29yZXMoY3B1X29ubGluZV9tYXNrKTsKIH0KIAogI2lmZGVmIENPTkZJR19TTVAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kYmVsbC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RiZWxsLmgKaW5kZXggMDg5M2FiOS4uOWM3MGQwYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RiZWxsLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RiZWxsLmgKQEAgLTI3LDkgKzI3LDggQEAKIAlQUENfR19EQkVMTF9NQyA9IDQsCS8qIGd1ZXN0IG1jaGVjayBkb29yYmVsbCAqLwogfTsKIAotZXh0ZXJuIHZvaWQgZG9vcmJlbGxfbWVzc2FnZV9wYXNzKGludCB0YXJnZXQsIGludCBtc2cpOworZXh0ZXJuIHZvaWQgZG9vcmJlbGxfY2F1c2VfaXBpKGludCBjcHUsIHVuc2lnbmVkIGxvbmcgZGF0YSk7CiBleHRlcm4gdm9pZCBkb29yYmVsbF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotZXh0ZXJuIHZvaWQgZG9vcmJlbGxfY2hlY2tfc2VsZih2b2lkKTsKIGV4dGVybiB2b2lkIGRvb3JiZWxsX3NldHVwX3RoaXNfY3B1KHZvaWQpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHBjX21zZ3NuZChlbnVtIHBwY19kYmVsbCB0eXBlLCB1MzIgZmxhZ3MsIHUzMiB0YWcpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZW11bGF0ZWRfb3BzLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZW11bGF0ZWRfb3BzLmgKaW5kZXggZjBmYjRmYy4uNDU5MjE2NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VtdWxhdGVkX29wcy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbXVsYXRlZF9vcHMuaApAQCAtNTIsNiArNTIsMTAgQEAKICNpZmRlZiBDT05GSUdfVlNYCiAJc3RydWN0IHBwY19lbXVsYXRlZF9lbnRyeSB2c3g7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfUFBDNjQKKwlzdHJ1Y3QgcHBjX2VtdWxhdGVkX2VudHJ5IG1mZHNjcjsKKwlzdHJ1Y3QgcHBjX2VtdWxhdGVkX2VudHJ5IG10ZHNjcjsKKyNlbmRpZgogfSBwcGNfZW11bGF0ZWQ7CiAKIGV4dGVybiB1MzIgcHBjX3dhcm5fZW11bGF0ZWQ7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZXhjZXB0aW9uLTY0cy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2V4Y2VwdGlvbi02NHMuaAppbmRleCA3Nzc4ZDZmLi5mNWRmZTM0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZXhjZXB0aW9uLTY0cy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9leGNlcHRpb24tNjRzLmgKQEAgLTQ2LDYgKzQ2LDcgQEAKICNkZWZpbmUgRVhfQ0NSCQk2MAogI2RlZmluZSBFWF9SMwkJNjQKICNkZWZpbmUgRVhfTFIJCTcyCisjZGVmaW5lIEVYX0NGQVIJCTgwCiAKIC8qCiAgKiBXZSdyZSBzaG9ydCBvbiBzcGFjZSBhbmQgdGltZSBpbiB0aGUgZXhjZXB0aW9uIHByb2xvZywgc28gd2UgY2FuJ3QKQEAgLTU2LDMwICs1Nyw0MCBAQAogI2RlZmluZSBMT0FEX0hBTkRMRVIocmVnLCBsYWJlbCkJCQkJCVwKIAlhZGRpCXJlZyxyZWcsKGxhYmVsKS1fc3RleHQ7CS8qIHZpcnQgYWRkciBvZiBoYW5kbGVyIC4uLiAqLwogCi0jZGVmaW5lIEVYQ0VQVElPTl9QUk9MT0dfMShhcmVhKQkJCQlcCi0JbWZzcHIJcjEzLFNQUk5fU1BSR19QQUNBOwkvKiBnZXQgcGFjYSBhZGRyZXNzIGludG8gcjEzICovCVwKKy8qIEV4Y2VwdGlvbiByZWdpc3RlciBwcmVmaXhlcyAqLworI2RlZmluZSBFWENfSFYJSAorI2RlZmluZSBFWENfU1RECisKKyNkZWZpbmUgRVhDRVBUSU9OX1BST0xPR18xKGFyZWEpCQkJCQlcCisJR0VUX1BBQ0EocjEzKTsJCQkJCQkJXAogCXN0ZAlyOSxhcmVhK0VYX1I5KHIxMyk7CS8qIHNhdmUgcjkgLSByMTIgKi8JCVwKIAlzdGQJcjEwLGFyZWErRVhfUjEwKHIxMyk7CQkJCQlcCiAJc3RkCXIxMSxhcmVhK0VYX1IxMShyMTMpOwkJCQkJXAogCXN0ZAlyMTIsYXJlYStFWF9SMTIocjEzKTsJCQkJCVwKLQltZnNwcglyOSxTUFJOX1NQUkdfU0NSQVRDSDA7CQkJCQlcCisJQkVHSU5fRlRSX1NFQ1RJT05fTkVTVEVEKDY2KTsJCQkJCVwKKwltZnNwcglyMTAsU1BSTl9DRkFSOwkJCQkJCVwKKwlzdGQJcjEwLGFyZWErRVhfQ0ZBUihyMTMpOwkJCQkJXAorCUVORF9GVFJfU0VDVElPTl9ORVNURUQoQ1BVX0ZUUl9DRkFSLCBDUFVfRlRSX0NGQVIsIDY2KTsJCVwKKwlHRVRfU0NSQVRDSDAocjkpOwkJCQkJCVwKIAlzdGQJcjksYXJlYStFWF9SMTMocjEzKTsJCQkJCVwKIAltZmNyCXI5CiAKLSNkZWZpbmUgRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTXzEobGFiZWwpCQkJCVwKKyNkZWZpbmUgX19FWENFUFRJT05fUFJPTE9HX1BTRVJJRVNfMShsYWJlbCwgaCkJCQkJXAogCWxkCXIxMixQQUNBS0JBU0UocjEzKTsJLyogZ2V0IGhpZ2ggcGFydCBvZiAmbGFiZWwgKi8JXAogCWxkCXIxMCxQQUNBS01TUihyMTMpOwkvKiBnZXQgTVNSIHZhbHVlIGZvciBrZXJuZWwgKi8JXAotCW1mc3ByCXIxMSxTUFJOX1NSUjA7CQkvKiBzYXZlIFNSUjAgKi8JCQlcCisJbWZzcHIJcjExLFNQUk5fIyNoIyNTUlIwOwkvKiBzYXZlIFNSUjAgKi8JCQlcCiAJTE9BRF9IQU5ETEVSKHIxMixsYWJlbCkJCQkJCQlcCi0JbXRzcHIJU1BSTl9TUlIwLHIxMjsJCQkJCQlcCi0JbWZzcHIJcjEyLFNQUk5fU1JSMTsJCS8qIGFuZCBTUlIxICovCQkJXAotCW10c3ByCVNQUk5fU1JSMSxyMTA7CQkJCQkJXAotCXJmaWQ7CQkJCQkJCQlcCisJbXRzcHIJU1BSTl8jI2gjI1NSUjAscjEyOwkJCQkJXAorCW1mc3ByCXIxMixTUFJOXyMjaCMjU1JSMTsJLyogYW5kIFNSUjEgKi8JCQlcCisJbXRzcHIJU1BSTl8jI2gjI1NSUjEscjEwOwkJCQkJXAorCWgjI3JmaWQ7CQkJCQkJCVwKIAliCS4JLyogcHJldmVudCBzcGVjdWxhdGl2ZSBleGVjdXRpb24gKi8KKyNkZWZpbmUgRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTXzEobGFiZWwsIGgpIFwKKwlfX0VYQ0VQVElPTl9QUk9MT0dfUFNFUklFU18xKGxhYmVsLCBoKQogCi0jZGVmaW5lIEVYQ0VQVElPTl9QUk9MT0dfUFNFUklFUyhhcmVhLCBsYWJlbCkJCQkJXAorI2RlZmluZSBFWENFUFRJT05fUFJPTE9HX1BTRVJJRVMoYXJlYSwgbGFiZWwsIGgpCQkJXAogCUVYQ0VQVElPTl9QUk9MT0dfMShhcmVhKTsJCQkJCVwKLQlFWENFUFRJT05fUFJPTE9HX1BTRVJJRVNfMShsYWJlbCk7CisJRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTXzEobGFiZWwsIGgpOwogCiAvKgogICogVGhlIGNvbW1vbiBleGNlcHRpb24gcHJvbG9nIGlzIHVzZWQgZm9yIGFsbCBleGNlcHQgYSBmZXcgZXhjZXB0aW9ucwpAQCAtOTgsMTAgKzEwOSwxMSBAQAogCWJlcS0JMWY7CQkJCQkJCSAgIFwKIAlsZAlyMSxQQUNBS1NBVkUocjEzKTsJLyoga2VybmVsIHN0YWNrIHRvIHVzZQkJKi8gXAogMToJY21wZGkJY3IxLHIxLDA7CQkvKiBjaGVjayBpZiByMSBpcyBpbiB1c2Vyc3BhY2UJKi8gXAotCWJnZS0JY3IxLDJmOwkJCS8qIGFib3J0IGlmIGl0IGlzCQkqLyBcCi0JYgkzZjsJCQkJCQkJICAgXAotMjoJbGkJcjEsKG4pOwkJCS8qIHdpbGwgYmUgcmVsb2FkZWQgbGF0ZXIJKi8gXAorCWJsdCsJY3IxLDNmOwkJCS8qIGFib3J0IGlmIGl0IGlzCQkqLyBcCisJbGkJcjEsKG4pOwkJCS8qIHdpbGwgYmUgcmVsb2FkZWQgbGF0ZXIJKi8gXAogCXN0aAlyMSxQQUNBX1RSQVBfU0FWRShyMTMpOwkJCQkJICAgXAorCXN0ZAlyMyxhcmVhK0VYX1IzKHIxMyk7CQkJCQkgICBcCisJYWRkaQlyMyxyMTMsYXJlYTsJCS8qIHIzIC0+IHdoZXJlIHJlZ3MgYXJlIHNhdmVkKi8JICAgXAogCWIJYmFkX3N0YWNrOwkJCQkJCSAgIFwKIDM6CXN0ZAlyOSxfQ0NSKHIxKTsJCS8qIHNhdmUgQ1IgaW4gc3RhY2tmcmFtZQkqLyBcCiAJc3RkCXIxMSxfTklQKHIxKTsJCS8qIHNhdmUgU1JSMCBpbiBzdGFja2ZyYW1lCSovIFwKQEAgLTEyMyw2ICsxMzUsMTAgQEAKIAlzdGQJcjksR1BSMTEocjEpOwkJCQkJCSAgIFwKIAlzdGQJcjEwLEdQUjEyKHIxKTsJCQkJCQkgICBcCiAJc3RkCXIxMSxHUFIxMyhyMSk7CQkJCQkJICAgXAorCUJFR0lOX0ZUUl9TRUNUSU9OX05FU1RFRCg2Nik7CQkJCQkgICBcCisJbGQJcjEwLGFyZWErRVhfQ0ZBUihyMTMpOwkJCQkJICAgXAorCXN0ZAlyMTAsT1JJR19HUFIzKHIxKTsJCQkJCSAgIFwKKwlFTkRfRlRSX1NFQ1RJT05fTkVTVEVEKENQVV9GVFJfQ0ZBUiwgQ1BVX0ZUUl9DRkFSLCA2Nik7CQkgICBcCiAJbGQJcjIsUEFDQVRPQyhyMTMpOwkvKiBnZXQga2VybmVsIFRPQyBpbnRvIHIyCSovIFwKIAltZmxyCXI5OwkJCS8qIHNhdmUgTFIgaW4gc3RhY2tmcmFtZQkqLyBcCiAJc3RkCXI5LF9MSU5LKHIxKTsJCQkJCQkgICBcCkBAIC0xNDMsNTcgKzE1OSw2MiBAQAogLyoKICAqIEV4Y2VwdGlvbiB2ZWN0b3JzLgogICovCi0jZGVmaW5lIFNURF9FWENFUFRJT05fUFNFUklFUyhuLCBsYWJlbCkJCQlcCi0JLiA9IG47CQkJCQkJXAorI2RlZmluZSBTVERfRVhDRVBUSU9OX1BTRVJJRVMobG9jLCB2ZWMsIGxhYmVsKQkJXAorCS4gPSBsb2M7CQkJCQlcCiAJLmdsb2JsIGxhYmVsIyNfcFNlcmllczsJCQkJXAogbGFiZWwjI19wU2VyaWVzOgkJCQkJXAogCUhNVF9NRURJVU07CQkJCQlcCi0JRE9fS1ZNCW47CQkJCQlcCi0JbXRzcHIJU1BSTl9TUFJHX1NDUkFUQ0gwLHIxMzsJCS8qIHNhdmUgcjEzICovCVwKLQlFWENFUFRJT05fUFJPTE9HX1BTRVJJRVMoUEFDQV9FWEdFTiwgbGFiZWwjI19jb21tb24pCisJRE9fS1ZNCXZlYzsJCQkJCVwKKwlTRVRfU0NSQVRDSDAocjEzKTsJCS8qIHNhdmUgcjEzICovCQlcCisJRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTKFBBQ0FfRVhHRU4sIGxhYmVsIyNfY29tbW9uLCBFWENfU1REKQogCi0jZGVmaW5lIEhTVERfRVhDRVBUSU9OX1BTRVJJRVMobiwgbGFiZWwpCQlcCi0JLiA9IG47CQkJCQkJXAotCS5nbG9ibCBsYWJlbCMjX3BTZXJpZXM7CQkJCVwKLWxhYmVsIyNfcFNlcmllczoJCQkJCVwKKyNkZWZpbmUgU1REX0VYQ0VQVElPTl9IVihsb2MsIHZlYywgbGFiZWwpCQlcCisJLiA9IGxvYzsJCQkJCVwKKwkuZ2xvYmwgbGFiZWwjI19odjsJCQkJXAorbGFiZWwjI19odjoJCQkJCQlcCiAJSE1UX01FRElVTTsJCQkJCVwKLQltdHNwcglTUFJOX1NQUkdfU0NSQVRDSDAscjIwOwkvKiBzYXZlIHIyMCAqLwlcCi0JbWZzcHIJcjIwLFNQUk5fSFNSUjA7CQkvKiBjb3B5IEhTUlIwIHRvIFNSUjAgKi8gXAotCW10c3ByCVNQUk5fU1JSMCxyMjA7CQkJCVwKLQltZnNwcglyMjAsU1BSTl9IU1JSMTsJCS8qIGNvcHkgSFNSUjAgdG8gU1JSMCAqLyBcCi0JbXRzcHIJU1BSTl9TUlIxLHIyMDsJCQkJXAotCW1mc3ByCXIyMCxTUFJOX1NQUkdfU0NSQVRDSDA7CS8qIHJlc3RvcmUgcjIwICovIFwKLQltdHNwcglTUFJOX1NQUkdfU0NSQVRDSDAscjEzOwkJLyogc2F2ZSByMTMgKi8JXAotCUVYQ0VQVElPTl9QUk9MT0dfUFNFUklFUyhQQUNBX0VYR0VOLCBsYWJlbCMjX2NvbW1vbikKKwlET19LVk0JdmVjOwkJCQkJXAorCVNFVF9TQ1JBVENIMChyMTMpOwkvKiBzYXZlIHIxMyAqLwkJXAorCUVYQ0VQVElPTl9QUk9MT0dfUFNFUklFUyhQQUNBX0VYR0VOLCBsYWJlbCMjX2NvbW1vbiwgRVhDX0hWKQogCi0KLSNkZWZpbmUgTUFTS0FCTEVfRVhDRVBUSU9OX1BTRVJJRVMobiwgbGFiZWwpCQkJCVwKLQkuID0gbjsJCQkJCQkJCVwKLQkuZ2xvYmwgbGFiZWwjI19wU2VyaWVzOwkJCQkJCVwKLWxhYmVsIyNfcFNlcmllczoJCQkJCQkJXAorI2RlZmluZSBfX01BU0tBQkxFX0VYQ0VQVElPTl9QU0VSSUVTKHZlYywgbGFiZWwsIGgpCQkJXAogCUhNVF9NRURJVU07CQkJCQkJCVwKLQlET19LVk0JbjsJCQkJCQkJXAotCW10c3ByCVNQUk5fU1BSR19TQ1JBVENIMCxyMTM7CS8qIHNhdmUgcjEzICovCQkJXAotCW1mc3ByCXIxMyxTUFJOX1NQUkdfUEFDQTsJLyogZ2V0IHBhY2EgYWRkcmVzcyBpbnRvIHIxMyAqLwlcCisJRE9fS1ZNCXZlYzsJCQkJCQkJXAorCVNFVF9TQ1JBVENIMChyMTMpOyAgICAvKiBzYXZlIHIxMyAqLwkJCQlcCisJR0VUX1BBQ0EocjEzKTsJCQkJCQkJXAogCXN0ZAlyOSxQQUNBX0VYR0VOK0VYX1I5KHIxMyk7CS8qIHNhdmUgcjksIHIxMCAqLwlcCiAJc3RkCXIxMCxQQUNBX0VYR0VOK0VYX1IxMChyMTMpOwkJCQlcCiAJbGJ6CXIxMCxQQUNBU09GVElSUUVOKHIxMyk7CQkJCQlcCiAJbWZjcglyOTsJCQkJCQkJXAogCWNtcHdpCXIxMCwwOwkJCQkJCQlcCi0JYmVxCW1hc2tlZF9pbnRlcnJ1cHQ7CQkJCQlcCi0JbWZzcHIJcjEwLFNQUk5fU1BSR19TQ1JBVENIMDsJCQkJCVwKKwliZXEJbWFza2VkXyMjaCMjaW50ZXJydXB0OwkJCQkJXAorCUdFVF9TQ1JBVENIMChyMTApOwkJCQkJCVwKIAlzdGQJcjEwLFBBQ0FfRVhHRU4rRVhfUjEzKHIxMyk7CQkJCVwKIAlzdGQJcjExLFBBQ0FfRVhHRU4rRVhfUjExKHIxMyk7CQkJCVwKIAlzdGQJcjEyLFBBQ0FfRVhHRU4rRVhfUjEyKHIxMyk7CQkJCVwKIAlsZAlyMTIsUEFDQUtCQVNFKHIxMyk7CS8qIGdldCBoaWdoIHBhcnQgb2YgJmxhYmVsICovCVwKIAlsZAlyMTAsUEFDQUtNU1IocjEzKTsJLyogZ2V0IE1TUiB2YWx1ZSBmb3Iga2VybmVsICovCVwKLQltZnNwcglyMTEsU1BSTl9TUlIwOwkJLyogc2F2ZSBTUlIwICovCQkJXAorCW1mc3ByCXIxMSxTUFJOXyMjaCMjU1JSMDsJLyogc2F2ZSBTUlIwICovCQkJXAogCUxPQURfSEFORExFUihyMTIsbGFiZWwjI19jb21tb24pCQkJCVwKLQltdHNwcglTUFJOX1NSUjAscjEyOwkJCQkJCVwKLQltZnNwcglyMTIsU1BSTl9TUlIxOwkJLyogYW5kIFNSUjEgKi8JCQlcCi0JbXRzcHIJU1BSTl9TUlIxLHIxMDsJCQkJCQlcCi0JcmZpZDsJCQkJCQkJCVwKKwltdHNwcglTUFJOXyMjaCMjU1JSMCxyMTI7CQkJCQlcCisJbWZzcHIJcjEyLFNQUk5fIyNoIyNTUlIxOwkvKiBhbmQgU1JSMSAqLwkJCVwKKwltdHNwcglTUFJOXyMjaCMjU1JSMSxyMTA7CQkJCQlcCisJaCMjcmZpZDsJCQkJCQkJXAogCWIJLgkvKiBwcmV2ZW50IHNwZWN1bGF0aXZlIGV4ZWN1dGlvbiAqLworI2RlZmluZSBfTUFTS0FCTEVfRVhDRVBUSU9OX1BTRVJJRVModmVjLCBsYWJlbCwgaCkJCQlcCisJX19NQVNLQUJMRV9FWENFUFRJT05fUFNFUklFUyh2ZWMsIGxhYmVsLCBoKQorCisjZGVmaW5lIE1BU0tBQkxFX0VYQ0VQVElPTl9QU0VSSUVTKGxvYywgdmVjLCBsYWJlbCkJCQlcCisJLiA9IGxvYzsJCQkJCQkJXAorCS5nbG9ibCBsYWJlbCMjX3BTZXJpZXM7CQkJCQkJXAorbGFiZWwjI19wU2VyaWVzOgkJCQkJCQlcCisJX01BU0tBQkxFX0VYQ0VQVElPTl9QU0VSSUVTKHZlYywgbGFiZWwsIEVYQ19TVEQpCisKKyNkZWZpbmUgTUFTS0FCTEVfRVhDRVBUSU9OX0hWKGxvYywgdmVjLCBsYWJlbCkJCQkJXAorCS4gPSBsb2M7CQkJCQkJCVwKKwkuZ2xvYmwgbGFiZWwjI19odjsJCQkJCQlcCitsYWJlbCMjX2h2OgkJCQkJCQkJXAorCV9NQVNLQUJMRV9FWENFUFRJT05fUFNFUklFUyh2ZWMsIGxhYmVsLCBFWENfSFYpCiAKICNpZmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKICNkZWZpbmUgRElTQUJMRV9JTlRTCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mZWF0dXJlLWZpeHVwcy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZlYXR1cmUtZml4dXBzLmgKaW5kZXggOTIxYTg0Ny4uOWE2N2EzOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZlYXR1cmUtZml4dXBzLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZlYXR1cmUtZml4dXBzLmgKQEAgLTQ5LDcgKzQ5LDcgQEAKIAlGVFJfRU5UUllfT0ZGU0VUIGxhYmVsIyMyYi1sYWJlbCMjNWI7CQkJXAogCUZUUl9FTlRSWV9PRkZTRVQgbGFiZWwjIzNiLWxhYmVsIyM1YjsJCQlcCiAJRlRSX0VOVFJZX09GRlNFVCBsYWJlbCMjNGItbGFiZWwjIzViOwkJCVwKLQkuaWZndCAobGFiZWwjIzRiLWxhYmVsIyMzYiktKGxhYmVsIyMyYi1sYWJlbCMjMWIpOwlcCisJLmlmZ3QgKGxhYmVsIyM0Yi0gbGFiZWwjIzNiKS0obGFiZWwjIzJiLSBsYWJlbCMjMWIpOwlcCiAJLmVycm9yICJGZWF0dXJlIHNlY3Rpb24gZWxzZSBjYXNlIGxhcmdlciB0aGFuIGJvZHkiOwlcCiAJLmVuZGlmOwkJCQkJCQlcCiAJLnBvcHNlY3Rpb247CkBAIC0xNDYsNiArMTQ2LDE5IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKKyNkZWZpbmUgQVNNX0ZUUl9JRihzZWN0aW9uX2lmLCBzZWN0aW9uX2Vsc2UsIG1zaywgdmFsKQlcCisJc3RyaW5naWZ5X2luX2MoQkVHSU5fRlRSX1NFQ1RJT04pCQkJXAorCXNlY3Rpb25faWYgIjsgIgkJCQkJCVwKKwlzdHJpbmdpZnlfaW5fYyhGVFJfU0VDVElPTl9FTFNFKQkJCVwKKwlzZWN0aW9uX2Vsc2UgIjsgIgkJCQkJXAorCXN0cmluZ2lmeV9pbl9jKEFMVF9GVFJfU0VDVElPTl9FTkQoKG1zayksICh2YWwpKSkKKworI2RlZmluZSBBU01fRlRSX0lGU0VUKHNlY3Rpb25faWYsIHNlY3Rpb25fZWxzZSwgbXNrKQlcCisJQVNNX0ZUUl9JRihzZWN0aW9uX2lmLCBzZWN0aW9uX2Vsc2UsIChtc2spLCAobXNrKSkKKworI2RlZmluZSBBU01fRlRSX0lGQ0xSKHNlY3Rpb25faWYsIHNlY3Rpb25fZWxzZSwgbXNrKQlcCisJQVNNX0ZUUl9JRihzZWN0aW9uX2lmLCBzZWN0aW9uX2Vsc2UsIChtc2spLCAwKQorCiAjZGVmaW5lIEFTTV9NTVVfRlRSX0lGKHNlY3Rpb25faWYsIHNlY3Rpb25fZWxzZSwgbXNrLCB2YWwpCVwKIAlzdHJpbmdpZnlfaW5fYyhCRUdJTl9NTVVfRlRSX1NFQ1RJT04pCQkJXAogCXNlY3Rpb25faWYgIjsgIgkJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9maXJtd2FyZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Zpcm13YXJlLmgKaW5kZXggNGVmNjYyZS4uM2E2YzU4NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Zpcm13YXJlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Zpcm13YXJlLmgKQEAgLTQ3LDYgKzQ3LDcgQEAKICNkZWZpbmUgRldfRkVBVFVSRV9CRUFUCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAxMDAwMDAwKQogI2RlZmluZSBGV19GRUFUVVJFX0NNTwkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMjAwMDAwMCkKICNkZWZpbmUgRldfRkVBVFVSRV9WUEhOCQlBU01fQ09OU1QoMHgwMDAwMDAwMDA0MDAwMDAwKQorI2RlZmluZSBGV19GRUFUVVJFX1hDTU8JCUFTTV9DT05TVCgweDAwMDAwMDAwMDgwMDAwMDApCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKQEAgLTYwLDcgKzYxLDcgQEAKIAkJRldfRkVBVFVSRV9WSU8gfCBGV19GRUFUVVJFX1JETUEgfCBGV19GRUFUVVJFX0xMQU4gfAogCQlGV19GRUFUVVJFX0JVTEtfUkVNT1ZFIHwgRldfRkVBVFVSRV9YREFCUiB8CiAJCUZXX0ZFQVRVUkVfTVVMVElUQ0UgfCBGV19GRUFUVVJFX1NQTFBBUiB8IEZXX0ZFQVRVUkVfTFBBUiB8Ci0JCUZXX0ZFQVRVUkVfQ01PIHwgRldfRkVBVFVSRV9WUEhOLAorCQlGV19GRUFUVVJFX0NNTyB8IEZXX0ZFQVRVUkVfVlBITiB8IEZXX0ZFQVRVUkVfWENNTywKIAlGV19GRUFUVVJFX1BTRVJJRVNfQUxXQVlTID0gMCwKIAlGV19GRUFUVVJFX0lTRVJJRVNfUE9TU0lCTEUgPSBGV19GRUFUVVJFX0lTRVJJRVMgfCBGV19GRUFUVVJFX0xQQVIsCiAJRldfRkVBVFVSRV9JU0VSSUVTX0FMV0FZUyA9IEZXX0ZFQVRVUkVfSVNFUklFUyB8IEZXX0ZFQVRVUkVfTFBBUiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odmNhbGwuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odmNhbGwuaAppbmRleCA4ZWRlYzcxLi44NTJiOGMxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHZjYWxsLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h2Y2FsbC5oCkBAIC0xMDIsNiArMTAyLDcgQEAKICNkZWZpbmUgSF9BTkRDT05ECQkoMVVMPDwoNjMtMzMpKQogI2RlZmluZSBIX0lDQUNIRV9JTlZBTElEQVRFCSgxVUw8PCg2My00MCkpCS8qIGljYmksIGV0Yy4gIChpZ25vcmVkIGZvciBJTyBwYWdlcykgKi8KICNkZWZpbmUgSF9JQ0FDSEVfU1lOQ0hST05JWkUJKDFVTDw8KDYzLTQxKSkJLyogZGNic3QsIGljYmksIGV0YyAoaWdub3JlZCBmb3IgSU8gcGFnZXMgKi8KKyNkZWZpbmUgSF9DT0FMRVNDRV9DQU5ECSgxVUw8PCg2My00MikpCS8qIHBhZ2UgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgY29hbGVzY2luZyAqLwogI2RlZmluZSBIX1pFUk9fUEFHRQkJKDFVTDw8KDYzLTQ4KSkJLyogemVybyB0aGUgcGFnZSBiZWZvcmUgbWFwcGluZyAoaWdub3JlZCBmb3IgSU8gcGFnZXMpICovCiAjZGVmaW5lIEhfQ09QWV9QQUdFCQkoMVVMPDwoNjMtNDkpKQogI2RlZmluZSBIX04JCQkoMVVMPDwoNjMtNjEpKQpAQCAtMjM0LDYgKzIzNSw3IEBACiAjZGVmaW5lIEhfR0VUX01QUAkJMHgyRDQKICNkZWZpbmUgSF9IT01FX05PREVfQVNTT0NJQVRJVklUWSAweDJFQwogI2RlZmluZSBIX0JFU1RfRU5FUkdZCQkweDJGNAorI2RlZmluZSBIX0dFVF9NUFBfWAkJMHgzMTQKICNkZWZpbmUgTUFYX0hDQUxMX09QQ09ERQlIX0JFU1RfRU5FUkdZCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCkBAIC0zMTIsNiArMzE0LDE2IEBACiAKIGludCBoX2dldF9tcHAoc3RydWN0IGh2Y2FsbF9tcHBfZGF0YSAqKTsKIAorc3RydWN0IGh2Y2FsbF9tcHBfeF9kYXRhIHsKKwl1bnNpZ25lZCBsb25nIGNvYWxlc2NlZF9ieXRlczsKKwl1bnNpZ25lZCBsb25nIHBvb2xfY29hbGVzY2VkX2J5dGVzOworCXVuc2lnbmVkIGxvbmcgcG9vbF9wdXJyX2N5Y2xlczsKKwl1bnNpZ25lZCBsb25nIHBvb2xfc3B1cnJfY3ljbGVzOworCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRbM107Cit9OworCitpbnQgaF9nZXRfbXBwX3goc3RydWN0IGh2Y2FsbF9tcHBfeF9kYXRhICptcHBfeF9kYXRhKTsKKwogI2lmZGVmIENPTkZJR19QUENfUFNFUklFUwogZXh0ZXJuIGludCBDTU9fUHJQU1A7CiBleHRlcm4gaW50IENNT19TZWNQU1A7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW8td29ya2Fyb3VuZHMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pby13b3JrYXJvdW5kcy5oCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pby13b3JrYXJvdW5kcy5oCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW8td29ya2Fyb3VuZHMuaAppbmRleCA2ZWZjNzc4Li5mYmFlNDkyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW8td29ya2Fyb3VuZHMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW8td29ya2Fyb3VuZHMuaApAQCAtMzEsNyArMzEsNiBAQAogCXZvaWQgICAqcHJpdmF0ZTsKIH07CiAKLXZvaWQgX19kZXZpbml0IGlvX3dvcmthcm91bmRfaW5pdCh2b2lkKTsKIHZvaWQgX19kZXZpbml0IGlvd2FfcmVnaXN0ZXJfYnVzKHN0cnVjdCBwY2lfY29udHJvbGxlciAqLCBzdHJ1Y3QgcHBjX3BjaV9pbyAqLAogCQkJCSBpbnQgKCopKHN0cnVjdCBpb3dhX2J1cyAqLCB2b2lkICopLCB2b2lkICopOwogc3RydWN0IGlvd2FfYnVzICppb3dhX21lbV9maW5kX2J1cyhjb25zdCBQQ0lfSU9fQUREUik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDAwMWYyZjEuLjQ1Njk4ZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pby5oCkBAIC0yLDYgKzIsOCBAQAogI2RlZmluZSBfQVNNX1BPV0VSUENfSU9fSAogI2lmZGVmIF9fS0VSTkVMX18KIAorI2RlZmluZSBBUkNIX0hBU19JT1JFTUFQX1dDCisKIC8qCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtNDgxLDEwICs0ODMsMTYgQEAKIAkJCQlfbWVtY3B5X2Zyb21pbyhkc3QsUENJX0ZJWF9BRERSKHNyYyksbikKICNlbmRpZiAvKiAhQ09ORklHX0VFSCAqLwogCi0jaWZkZWYgQ09ORklHX1BQQ19JTkRJUkVDVF9JTwotI2RlZmluZSBERUZfUENJX0hPT0soeCkJCXgKKyNpZmRlZiBDT05GSUdfUFBDX0lORElSRUNUX1BJTworI2RlZmluZSBERUZfUENJX0hPT0tfcGlvKHgpCXgKICNlbHNlCi0jZGVmaW5lIERFRl9QQ0lfSE9PSyh4KQkJTlVMTAorI2RlZmluZSBERUZfUENJX0hPT0tfcGlvKHgpCU5VTEwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BQQ19JTkRJUkVDVF9NTUlPCisjZGVmaW5lIERFRl9QQ0lfSE9PS19tZW0oeCkJeAorI2Vsc2UKKyNkZWZpbmUgREVGX1BDSV9IT09LX21lbSh4KQlOVUxMCiAjZW5kaWYKIAogLyogU3RydWN0dXJlIGNvbnRhaW5pbmcgYWxsIHRoZSBob29rcyAqLwpAQCAtNTA0LDcgKzUxMiw3IEBACiAjZGVmaW5lIERFRl9QQ0lfQUNfUkVUKG5hbWUsIHJldCwgYXQsIGFsLCBzcGFjZSwgYWEpCQlcCiBzdGF0aWMgaW5saW5lIHJldCBuYW1lIGF0CQkJCQlcCiB7CQkJCQkJCQlcCi0JaWYgKERFRl9QQ0lfSE9PSyhwcGNfcGNpX2lvLm5hbWUpICE9IE5VTEwpCQlcCisJaWYgKERFRl9QQ0lfSE9PS18jI3NwYWNlKHBwY19wY2lfaW8ubmFtZSkgIT0gTlVMTCkJXAogCQlyZXR1cm4gcHBjX3BjaV9pby5uYW1lIGFsOwkJCVwKIAlyZXR1cm4gX19kb18jI25hbWUgYWw7CQkJCQlcCiB9CkBAIC01MTIsNyArNTIwLDcgQEAKICNkZWZpbmUgREVGX1BDSV9BQ19OT1JFVChuYW1lLCBhdCwgYWwsIHNwYWNlLCBhYSkJCVwKIHN0YXRpYyBpbmxpbmUgdm9pZCBuYW1lIGF0CQkJCQlcCiB7CQkJCQkJCQlcCi0JaWYgKERFRl9QQ0lfSE9PSyhwcGNfcGNpX2lvLm5hbWUpICE9IE5VTEwpCQlcCisJaWYgKERFRl9QQ0lfSE9PS18jI3NwYWNlKHBwY19wY2lfaW8ubmFtZSkgIT0gTlVMTCkJCVwKIAkJcHBjX3BjaV9pby5uYW1lIGFsOwkJCQlcCiAJZWxzZQkJCQkJCQlcCiAJCV9fZG9fIyNuYW1lIGFsOwkJCQkJXApAQCAtNjE2LDEyICs2MjQsMTMgQEAKICAqICogaW9yZW1hcCBpcyB0aGUgc3RhbmRhcmQgb25lIGFuZCBwcm92aWRlcyBub24tY2FjaGVhYmxlIGd1YXJkZWQgbWFwcGluZ3MKICAqICAgYW5kIGNhbiBiZSBob29rZWQgYnkgdGhlIHBsYXRmb3JtIHZpYSBwcGNfbWQKICAqCi0gKiAqIGlvcmVtYXBfZmxhZ3MgYWxsb3dzIHRvIHNwZWNpZnkgdGhlIHBhZ2UgZmxhZ3MgYXMgYW4gYXJndW1lbnQgYW5kIGNhbgotICogICBhbHNvIGJlIGhvb2tlZCBieSB0aGUgcGxhdGZvcm0gdmlhIHBwY19tZC4gaW9yZW1hcF9wcm90IGlzIHRoZSBleGFjdAotICogICBzYW1lIHRoaW5nIGFzIGlvcmVtYXBfZmxhZ3MuCisgKiAqIGlvcmVtYXBfcHJvdCBhbGxvd3MgdG8gc3BlY2lmeSB0aGUgcGFnZSBmbGFncyBhcyBhbiBhcmd1bWVudCBhbmQgY2FuCisgKiAgIGFsc28gYmUgaG9va2VkIGJ5IHRoZSBwbGF0Zm9ybSB2aWEgcHBjX21kLgogICoKICAqICogaW9yZW1hcF9ub2NhY2hlIGlzIGlkZW50aWNhbCB0byBpb3JlbWFwCiAgKgorICogKiBpb3JlbWFwX3djIGVuYWJsZXMgd3JpdGUgY29tYmluaW5nCisgKgogICogKiBpb3VubWFwIHVuZG9lcyBzdWNoIGEgbWFwcGluZyBhbmQgY2FuIGJlIGhvb2tlZAogICoKICAqICogX19pb3JlbWFwX2F0IChhbmQgdGhlIHBlbmRpbmcgX19pb3VubWFwX2F0KSBhcmUgbG93IGxldmVsIGZ1bmN0aW9ucyB0bwpAQCAtNjI5LDcgKzYzOCw3IEBACiAgKiAgIGN1cnJlbnRseSBiZSBob29rZWQuIE11c3QgYmUgcGFnZSBhbGlnbmVkLgogICoKICAqICogX19pb3JlbWFwIGlzIHRoZSBsb3cgbGV2ZWwgaW1wbGVtZW50YXRpb24gdXNlZCBieSBpb3JlbWFwIGFuZAotICogICBpb3JlbWFwX2ZsYWdzIGFuZCBjYW5ub3QgYmUgaG9va2VkIChidXQgY2FuIGJlIHVzZWQgYnkgYSBob29rIG9uIG9uZQorICogICBpb3JlbWFwX3Byb3QgYW5kIGNhbm5vdCBiZSBob29rZWQgKGJ1dCBjYW4gYmUgdXNlZCBieSBhIGhvb2sgb24gb25lCiAgKiAgIG9mIHRoZSBwcmV2aW91cyBvbmVzKQogICoKICAqICogX19pb3JlbWFwX2NhbGxlciBpcyB0aGUgc2FtZSBhcyBhYm92ZSBidXQgdGFrZXMgYW4gZXhwbGljaXQgY2FsbGVyCkBAIC02NDAsMTAgKzY0OSwxMCBAQAogICoKICAqLwogZXh0ZXJuIHZvaWQgX19pb21lbSAqaW9yZW1hcChwaHlzX2FkZHJfdCBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIHNpemUpOwotZXh0ZXJuIHZvaWQgX19pb21lbSAqaW9yZW1hcF9mbGFncyhwaHlzX2FkZHJfdCBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkJICAgdW5zaWduZWQgbG9uZyBmbGFncyk7CitleHRlcm4gdm9pZCBfX2lvbWVtICppb3JlbWFwX3Byb3QocGh5c19hZGRyX3QgYWRkcmVzcywgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCSAgdW5zaWduZWQgbG9uZyBmbGFncyk7CitleHRlcm4gdm9pZCBfX2lvbWVtICppb3JlbWFwX3djKHBoeXNfYWRkcl90IGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiAjZGVmaW5lIGlvcmVtYXBfbm9jYWNoZShhZGRyLCBzaXplKQlpb3JlbWFwKChhZGRyKSwgKHNpemUpKQotI2RlZmluZSBpb3JlbWFwX3Byb3QoYWRkciwgc2l6ZSwgcHJvdCkJaW9yZW1hcF9mbGFncygoYWRkciksIChzaXplKSwgKHByb3QpKQogCiBleHRlcm4gdm9pZCBpb3VubWFwKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pb19ldmVudF9pcnEuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pb19ldmVudF9pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWE5YTFiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvX2V2ZW50X2lycS5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCwgMjAxMSBNYXJrIE5lbHNvbiBhbmQgVHNlbmctSHVpIChGcmFuaykgTGluLCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9BU01fUE9XRVJQQ19JT19FVkVOVF9JUlFfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfSU9fRVZFTlRfSVJRX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKworI2RlZmluZSBQU0VSSUVTX0lPRUlfUlBDX01BWF9MRU4gMjE2CisKKyNkZWZpbmUgUFNFUklFU19JT0VJX1RZUEVfRVJSX0RFVEVDVEVECQkweDAxCisjZGVmaW5lIFBTRVJJRVNfSU9FSV9UWVBFX0VSUl9SRUNPVkVSRUQJCTB4MDIKKyNkZWZpbmUgUFNFUklFU19JT0VJX1RZUEVfRVZFTlQJCQkweDAzCisjZGVmaW5lIFBTRVJJRVNfSU9FSV9UWVBFX1JQQ19QQVNTX1RIUlUJCTB4MDQKKworI2RlZmluZSBQU0VSSUVTX0lPRUlfU1VCVFlQRV9OT1RfQVBQCQkweDAwCisjZGVmaW5lIFBTRVJJRVNfSU9FSV9TVUJUWVBFX1JFQkFMQU5DRV9SRVEJMHgwMQorI2RlZmluZSBQU0VSSUVTX0lPRUlfU1VCVFlQRV9OT0RFX09OTElORQkweDAzCisjZGVmaW5lIFBTRVJJRVNfSU9FSV9TVUJUWVBFX05PREVfT0ZGTElORQkweDA0CisjZGVmaW5lIFBTRVJJRVNfSU9FSV9TVUJUWVBFX0RVTVBfU0laRV9DSEFOR0UJMHgwNQorI2RlZmluZSBQU0VSSUVTX0lPRUlfU1VCVFlQRV9UT1JSRU5UX0lSVl9VUERBVEUJMHgwNgorI2RlZmluZSBQU0VSSUVTX0lPRUlfU1VCVFlQRV9UT1JSRU5UX0hGSV9DRkdFRAkweDA3CisKKyNkZWZpbmUgUFNFUklFU19JT0VJX1NDT1BFX05PVF9BUFAJCTB4MDAKKyNkZWZpbmUgUFNFUklFU19JT0VJX1NDT1BFX1JJT19IVUIJCTB4MzYKKyNkZWZpbmUgUFNFUklFU19JT0VJX1NDT1BFX1JJT19CUklER0UJCTB4MzcKKyNkZWZpbmUgUFNFUklFU19JT0VJX1NDT1BFX1BIQgkJCTB4MzgKKyNkZWZpbmUgUFNFUklFU19JT0VJX1NDT1BFX0VBRFNfR0xPQkFMCQkweDM5CisjZGVmaW5lIFBTRVJJRVNfSU9FSV9TQ09QRV9FQURTX1NMT1QJCTB4M0EKKyNkZWZpbmUgUFNFUklFU19JT0VJX1NDT1BFX1RPUlJFTlRfSFVCCQkweDNCCisjZGVmaW5lIFBTRVJJRVNfSU9FSV9TQ09QRV9TRVJWSUNFX1BST0MJCTB4NTEKKworLyogUGxhdGZvcm0gRXZlbnQgTG9nIEZvcm1hdCwgVmVyc2lvbiA2LCBkYXRhIHBvcnRpdGlvbiBvZiBJTyBldmVudCBzZWN0aW9uICovCitzdHJ1Y3QgcHNlcmllc19pb19ldmVudCB7CisJdWludDhfdCBldmVudF90eXBlOwkJLyogMHgwMCBJTy1FdmVudCBUeXBlCQkqLworCXVpbnQ4X3QgcnBjX2RhdGFfbGVuOwkJLyogMHgwMSBSUEMgZGF0YSBsZW5ndGgJCSovCisJdWludDhfdCBzY29wZTsJCQkvKiAweDAyIEVycm9yL0V2ZW50IFNjb3BlCSovCisJdWludDhfdCBldmVudF9zdWJ0eXBlOwkJLyogMHgwMyBJL08tRXZlbnQgU3ViLVR5cGUJKi8KKwl1aW50MzJfdCBkcmNfaW5kZXg7CQkvKiAweDA0IERSQyBJbmRleAkJKi8KKwl1aW50OF90IHJwY19kYXRhW1BTRVJJRVNfSU9FSV9SUENfTUFYX0xFTl07CisJCQkJCS8qIDB4MDggUlBDIERhdGEgKDAtMjE2IGJ5dGVzLAkqLworCQkJCQkvKiBwYWRkZWQgdG8gNCBieXRlcyBhbGlnbm1lbnQpCSovCit9OworCitleHRlcm4gc3RydWN0IGF0b21pY19ub3RpZmllcl9oZWFkIHBzZXJpZXNfaW9laV9ub3RpZmllcl9saXN0OworCisjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0lPX0VWRU5UX0lSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaXJxLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaXJxLmgKaW5kZXggNjdhYjVmYi4uMWJmZjU5MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lycS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pcnEuaApAQCAtODgsOSArODgsNiBAQAogCS8qIERpc3Bvc2Ugb2Ygc3VjaCBhIG1hcHBpbmcgKi8KIAl2b2lkICgqdW5tYXApKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEpOwogCi0JLyogVXBkYXRlIG9mIHN1Y2ggYSBtYXBwaW5nICAqLwotCXZvaWQgKCpyZW1hcCkoc3RydWN0IGlycV9ob3N0ICpoLCB1bnNpZ25lZCBpbnQgdmlycSwgaXJxX2h3X251bWJlcl90IGh3KTsKLQogCS8qIFRyYW5zbGF0ZSBkZXZpY2UtdHJlZSBpbnRlcnJ1cHQgc3BlY2lmaWVyIGZyb20gcmF3IGZvcm1hdCBjb21pbmcKIAkgKiBmcm9tIHRoZSBmaXJtd2FyZSB0byBhIGlycV9od19udW1iZXJfdCAoaW50ZXJydXB0IGxpbmUgbnVtYmVyKSBhbmQKIAkgKiB0eXBlIChzZW5zZSkgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIHNldF9pcnFfdHlwZSgpLiBJbiB0aGUgYWJzZW5jZQpAQCAtMTI4LDE5ICsxMjUsMTAgQEAKIAlzdHJ1Y3QgZGV2aWNlX25vZGUJKm9mX25vZGU7CiB9OwogCi0vKiBUaGUgbWFpbiBpcnEgbWFwIGl0c2VsZiBpcyBhbiBhcnJheSBvZiBOUl9JUlEgZW50cmllcyBjb250YWluaW5nIHRoZQotICogYXNzb2NpYXRlIGhvc3QgYW5kIGlycSBudW1iZXIuIEFuIGVudHJ5IHdpdGggYSBob3N0IG9mIE5VTEwgaXMgZnJlZS4KLSAqIEFuIGVudHJ5IGNhbiBiZSBhbGxvY2F0ZWQgaWYgaXQncyBmcmVlLCB0aGUgYWxsb2NhdG9yIGFsd2F5cyB0aGVuIHNldHMKLSAqIGh3aXJxIGZpcnN0IHRvIHRoZSBob3N0J3MgaW52YWxpZCBpcnEgbnVtYmVyIGFuZCB0aGVuIGZpbGxzIG9wcy4KLSAqLwotc3RydWN0IGlycV9tYXBfZW50cnkgewotCWlycV9od19udW1iZXJfdAlod2lycTsKLQlzdHJ1Y3QgaXJxX2hvc3QJKmhvc3Q7Ci19OwotCi1leHRlcm4gc3RydWN0IGlycV9tYXBfZW50cnkgaXJxX21hcFtOUl9JUlFTXTsKLQorc3RydWN0IGlycV9kYXRhOworZXh0ZXJuIGlycV9od19udW1iZXJfdCBpcnFkX3RvX2h3aXJxKHN0cnVjdCBpcnFfZGF0YSAqZCk7CiBleHRlcm4gaXJxX2h3X251bWJlcl90IHZpcnFfdG9faHcodW5zaWduZWQgaW50IHZpcnEpOworZXh0ZXJuIGJvb2wgdmlycV9pc19ob3N0KHVuc2lnbmVkIGludCB2aXJxLCBzdHJ1Y3QgaXJxX2hvc3QgKmhvc3QpOwogCiAvKioKICAqIGlycV9hbGxvY19ob3N0IC0gQWxsb2NhdGUgYSBuZXcgaXJxX2hvc3QgZGF0YSBzdHJ1Y3R1cmUKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rZXhlYy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2tleGVjLmgKaW5kZXggZjU0NDA4ZC4uOGEzMzY5OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2tleGVjLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2tleGVjLmgKQEAgLTc2LDcgKzc2LDcgQEAKIGV4dGVybiBjcHVtYXNrX3QgY3B1c19pbl9zcjsKIHN0YXRpYyBpbmxpbmUgaW50IGtleGVjX3NyX2FjdGl2YXRlZChpbnQgY3B1KQogewotCXJldHVybiBjcHVfaXNzZXQoY3B1LGNwdXNfaW5fc3IpOworCXJldHVybiBjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgJmNwdXNfaW5fc3IpOwogfQogCiBzdHJ1Y3Qga2ltYWdlOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bS5oCmluZGV4IDE4ZWE2OTYuLmQyY2E1ZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm0uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtLmgKQEAgLTQ1LDYgKzQ1LDExNCBAQAogCV9fdTY0IGdwclszMl07CiB9OwogCisjZGVmaW5lIEtWTV9TUkVHU19FX0lNUExfTk9ORQkwCisjZGVmaW5lIEtWTV9TUkVHU19FX0lNUExfRlNMCTEKKworI2RlZmluZSBLVk1fU1JFR1NfRV9GU0xfUElEbgkoMSA8PCAwKSAvKiBQSUQxL1BJRDIgKi8KKworLyoKKyAqIEZlYXR1cmUgYml0cyBpbmRpY2F0ZSB3aGljaCBzZWN0aW9ucyBvZiB0aGUgc3JlZ3Mgc3RydWN0IGFyZSB2YWxpZCwKKyAqIGJvdGggaW4gS1ZNX0dFVF9TUkVHUyBhbmQgS1ZNX1NFVF9TUkVHUy4gIE9uIEtWTV9TRVRfU1JFR1MsIHJlZ2lzdGVycworICogY29ycmVzcG9uZGluZyB0byB1bnNldCBmZWF0dXJlIGJpdHMgd2lsbCBub3QgYmUgbW9kaWZpZWQuICBUaGlzIGFsbG93cworICogcmVzdG9yaW5nIGEgY2hlY2twb2ludCBtYWRlIHdpdGhvdXQgdGhhdCBmZWF0dXJlLCB3aGlsZSBrZWVwaW5nIHRoZQorICogZGVmYXVsdCB2YWx1ZXMgb2YgdGhlIG5ldyByZWdpc3RlcnMuCisgKgorICogS1ZNX1NSRUdTX0VfQkFTRSBjb250YWluczoKKyAqIENTUlIwLzEgKHJlZmVycyB0byBTUlIyLzMgb24gNDB4KQorICogRVNSCisgKiBERUFSCisgKiBNQ1NSCisgKiBUU1IKKyAqIFRDUgorICogREVDCisgKiBUQgorICogVlJTQVZFIChVU1BSRzApCisgKi8KKyNkZWZpbmUgS1ZNX1NSRUdTX0VfQkFTRQkJKDEgPDwgMCkKKworLyoKKyAqIEtWTV9TUkVHU19FX0FSQ0gyMDYgY29udGFpbnM6CisgKgorICogUElSCisgKiBNQ1NSUjAvMQorICogREVDQVIKKyAqIElWUFIKKyAqLworI2RlZmluZSBLVk1fU1JFR1NfRV9BUkNIMjA2CQkoMSA8PCAxKQorCisvKgorICogQ29udGFpbnMgRVBDUiwgcGx1cyB0aGUgdXBwZXIgaGFsZiBvZiA2NC1iaXQgcmVnaXN0ZXJzCisgKiB0aGF0IGFyZSAzMi1iaXQgb24gMzItYml0IGltcGxlbWVudGF0aW9ucy4KKyAqLworI2RlZmluZSBLVk1fU1JFR1NfRV82NAkJCSgxIDw8IDIpCisKKyNkZWZpbmUgS1ZNX1NSRUdTX0VfU1BSRzgJCSgxIDw8IDMpCisjZGVmaW5lIEtWTV9TUkVHU19FX01DSVZQUgkJKDEgPDwgNCkKKworLyoKKyAqIElWT1JzIGFyZSB1c2VkIC0tIGNvbnRhaW5zIElWT1IwLTE1LCBwbHVzIGFkZGl0aW9uYWwgSVZPUnMKKyAqIGluIGNvbWJpbmF0aW9uIHdpdGggYW4gYXBwcm9wcmlhdGUgZmVhdHVyZSBiaXQuCisgKi8KKyNkZWZpbmUgS1ZNX1NSRUdTX0VfSVZPUgkJKDEgPDwgNSkKKworLyoKKyAqIENvbnRhaW5zIE1BUzAtNCwgTUFTNi03LCBUTEJuQ0ZHLCBNTVVDRkcuCisgKiBBbHNvIFRMQm5QUyBpZiBNTVVDRkdbTUFWTl0gPSAxLgorICovCisjZGVmaW5lIEtWTV9TUkVHU19FX0FSQ0gyMDZfTU1VCQkoMSA8PCA2KQorCisvKiBEQlNSLCBEQkNSLCBJQUMsIERBQywgRFZDICovCisjZGVmaW5lIEtWTV9TUkVHU19FX0RFQlVHCQkoMSA8PCA3KQorCisvKiBFbmhhbmNlZCBkZWJ1ZyAtLSBEU1JSMC8xLCBTUFJHOSAqLworI2RlZmluZSBLVk1fU1JFR1NfRV9FRAkJCSgxIDw8IDgpCisKKy8qIEVtYmVkZGVkIEZsb2F0aW5nIFBvaW50IChTUEUpIC0tIElWT1IzMi0zNCBpZiBLVk1fU1JFR1NfRV9JVk9SICovCisjZGVmaW5lIEtWTV9TUkVHU19FX1NQRQkJCSgxIDw8IDkpCisKKy8qIEV4dGVybmFsIFByb3h5IChFWFApIC0tIEVQUiAqLworI2RlZmluZSBLVk1fU1JFR1NfRVhQCQkJKDEgPDwgMTApCisKKy8qIEV4dGVybmFsIFBJRCAoRS5QRCkgLS0gRVBTQy9FUExDICovCisjZGVmaW5lIEtWTV9TUkVHU19FX1BECQkJKDEgPDwgMTEpCisKKy8qIFByb2Nlc3NvciBDb250cm9sIChFLlBDKSAtLSBJVk9SMzYtMzcgaWYgS1ZNX1NSRUdTX0VfSVZPUiAqLworI2RlZmluZSBLVk1fU1JFR1NfRV9QQwkJCSgxIDw8IDEyKQorCisvKiBQYWdlIHRhYmxlIChFLlBUKSAtLSBFUFRDRkcgKi8KKyNkZWZpbmUgS1ZNX1NSRUdTX0VfUFQJCQkoMSA8PCAxMykKKworLyogRW1iZWRkZWQgUGVyZm9ybWFuY2UgTW9uaXRvciAoRS5QTSkgLS0gSVZPUjM1IGlmIEtWTV9TUkVHU19FX0lWT1IgKi8KKyNkZWZpbmUgS1ZNX1NSRUdTX0VfUE0JCQkoMSA8PCAxNCkKKworLyoKKyAqIFNwZWNpYWwgdXBkYXRlczoKKyAqCisgKiBTb21lIHJlZ2lzdGVycyBtYXkgY2hhbmdlIGV2ZW4gd2hpbGUgYSB2Y3B1IGlzIG5vdCBydW5uaW5nLgorICogVG8gYXZvaWQgbG9zaW5nIHRoZXNlIGNoYW5nZXMsIGJ5IGRlZmF1bHQgdGhlc2UgcmVnaXN0ZXJzIGFyZQorICogbm90IHVwZGF0ZWQgYnkgS1ZNX1NFVF9TUkVHUy4gIFRvIGZvcmNlIGFuIHVwZGF0ZSwgc2V0IHRoZSBiaXQKKyAqIGluIHUuZS51cGRhdGVfc3BlY2lhbCBjb3JyZXNwb25kaW5nIHRvIHRoZSByZWdpc3RlciB0byBiZSB1cGRhdGVkLgorICoKKyAqIFRoZSB1cGRhdGVfc3BlY2lhbCBmaWVsZCBpcyB6ZXJvIG9uIHJldHVybiBmcm9tIEtWTV9HRVRfU1JFR1MuCisgKgorICogV2hlbiByZXN0b3JpbmcgYSBjaGVja3BvaW50LCB0aGUgY2FsbGVyIGNhbiBzZXQgdXBkYXRlX3NwZWNpYWwKKyAqIHRvIDB4ZmZmZmZmZmYgdG8gZW5zdXJlIHRoYXQgZXZlcnl0aGluZyBpcyByZXN0b3JlZCwgZXZlbiBuZXcgZmVhdHVyZXMKKyAqIHRoYXQgdGhlIGNhbGxlciBkb2Vzbid0IGtub3cgYWJvdXQuCisgKi8KKyNkZWZpbmUgS1ZNX1NSRUdTX0VfVVBEQVRFX01DU1IJCSgxIDw8IDApCisjZGVmaW5lIEtWTV9TUkVHU19FX1VQREFURV9UU1IJCSgxIDw8IDEpCisjZGVmaW5lIEtWTV9TUkVHU19FX1VQREFURV9ERUMJCSgxIDw8IDIpCisjZGVmaW5lIEtWTV9TUkVHU19FX1VQREFURV9EQlNSCQkoMSA8PCAzKQorCisvKgorICogSW4gS1ZNX1NFVF9TUkVHUywgcmVzZXJ2ZWQvcGFkIGZpZWxkcyBtdXN0IGJlIGxlZnQgdW50b3VjaGVkIGZyb20gYQorICogcHJldmlvdXMgS1ZNX0dFVF9SRUdTLgorICoKKyAqIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBzZXR0aW5nIGFueSByZWdpc3RlciB3aXRoIEtWTV9TRVRfU1JFR1MKKyAqIGRpcmVjdGx5IHNldHMgaXRzIHZhbHVlLiAgSXQgZG9lcyBub3QgdHJpZ2dlciBhbnkgc3BlY2lhbCBzZW1hbnRpY3Mgc3VjaAorICogYXMgd3JpdGUtb25lLXRvLWNsZWFyLiAgQ2FsbGluZyBLVk1fU0VUX1NSRUdTIG9uIGFuIHVubW9kaWZpZWQgc3RydWN0CisgKiBqdXN0IHJlY2VpdmVkIGZyb20gS1ZNX0dFVF9TUkVHUyBpcyBhbHdheXMgYSBuby1vcC4KKyAqLwogc3RydWN0IGt2bV9zcmVncyB7CiAJX191MzIgcHZyOwogCXVuaW9uIHsKQEAgLTYyLDYgKzE3MCw4MiBAQAogCQkJCV9fdTY0IGRiYXRbOF07IAogCQkJfSBwcGMzMjsKIAkJfSBzOworCQlzdHJ1Y3QgeworCQkJdW5pb24geworCQkJCXN0cnVjdCB7IC8qIEtWTV9TUkVHU19FX0lNUExfRlNMICovCisJCQkJCV9fdTMyIGZlYXR1cmVzOyAvKiBLVk1fU1JFR1NfRV9GU0xfICovCisJCQkJCV9fdTMyIHN2cjsKKwkJCQkJX191NjQgbWNhcjsKKwkJCQkJX191MzIgaGlkMDsKKworCQkJCQkvKiBLVk1fU1JFR1NfRV9GU0xfUElEbiAqLworCQkJCQlfX3UzMiBwaWQxLCBwaWQyOworCQkJCX0gZnNsOworCQkJCV9fdTggcGFkWzI1Nl07CisJCQl9IGltcGw7CisKKwkJCV9fdTMyIGZlYXR1cmVzOyAvKiBLVk1fU1JFR1NfRV8gKi8KKwkJCV9fdTMyIGltcGxfaWQ7CS8qIEtWTV9TUkVHU19FX0lNUExfICovCisJCQlfX3UzMiB1cGRhdGVfc3BlY2lhbDsgLyogS1ZNX1NSRUdTX0VfVVBEQVRFXyAqLworCQkJX191MzIgcGlyOwkvKiByZWFkLW9ubHkgKi8KKwkJCV9fdTY0IHNwcmc4OworCQkJX191NjQgc3ByZzk7CS8qIEUuRUQgKi8KKwkJCV9fdTY0IGNzcnIwOworCQkJX191NjQgZHNycjA7CS8qIEUuRUQgKi8KKwkJCV9fdTY0IG1jc3JyMDsKKwkJCV9fdTMyIGNzcnIxOworCQkJX191MzIgZHNycjE7CS8qIEUuRUQgKi8KKwkJCV9fdTMyIG1jc3JyMTsKKwkJCV9fdTMyIGVzcjsKKwkJCV9fdTY0IGRlYXI7CisJCQlfX3U2NCBpdnByOworCQkJX191NjQgbWNpdnByOworCQkJX191NjQgbWNzcjsJLyogS1ZNX1NSRUdTX0VfVVBEQVRFX01DU1IgKi8KKworCQkJX191MzIgdHNyOwkvKiBLVk1fU1JFR1NfRV9VUERBVEVfVFNSICovCisJCQlfX3UzMiB0Y3I7CisJCQlfX3UzMiBkZWNhcjsKKwkJCV9fdTMyIGRlYzsJLyogS1ZNX1NSRUdTX0VfVVBEQVRFX0RFQyAqLworCisJCQkvKgorCQkJICogVXNlcnNwYWNlIGNhbiByZWFkIFRCIGRpcmVjdGx5LCBidXQgdGhlCisJCQkgKiB2YWx1ZSByZXBvcnRlZCBoZXJlIGlzIGNvbnNpc3RlbnQgd2l0aCAiZGVjIi4KKwkJCSAqCisJCQkgKiBSZWFkLW9ubHkuCisJCQkgKi8KKwkJCV9fdTY0IHRiOworCisJCQlfX3UzMiBkYnNyOwkvKiBLVk1fU1JFR1NfRV9VUERBVEVfREJTUiAqLworCQkJX191MzIgZGJjclszXTsKKwkJCV9fdTMyIGlhY1s0XTsKKwkJCV9fdTMyIGRhY1syXTsKKwkJCV9fdTMyIGR2Y1syXTsKKwkJCV9fdTggbnVtX2lhYzsJLyogcmVhZC1vbmx5ICovCisJCQlfX3U4IG51bV9kYWM7CS8qIHJlYWQtb25seSAqLworCQkJX191OCBudW1fZHZjOwkvKiByZWFkLW9ubHkgKi8KKwkJCV9fdTggcGFkOworCisJCQlfX3UzMiBlcHI7CS8qIEVYUCAqLworCQkJX191MzIgdnJzYXZlOwkvKiBhLmsuYS4gVVNQUkcwICovCisJCQlfX3UzMiBlcGNyOwkvKiBLVk1fU1JFR1NfRV82NCAqLworCisJCQlfX3UzMiBtYXMwOworCQkJX191MzIgbWFzMTsKKwkJCV9fdTY0IG1hczI7CisJCQlfX3U2NCBtYXM3XzM7CisJCQlfX3UzMiBtYXM0OworCQkJX191MzIgbWFzNjsKKworCQkJX191MzIgaXZvcl9sb3dbMTZdOyAvKiBJVk9SMC0xNSAqLworCQkJX191MzIgaXZvcl9oaWdoWzE4XTsgLyogSVZPUjMyKywgcGx1cyByb29tIHRvIGV4cGFuZCAqLworCisJCQlfX3UzMiBtbXVjZmc7CS8qIHJlYWQtb25seSAqLworCQkJX191MzIgZXB0Y2ZnOwkvKiBFLlBULCByZWFkLW9ubHkgKi8KKwkJCV9fdTMyIHRsYmNmZ1s0XTsvKiByZWFkLW9ubHkgKi8KKwkJCV9fdTMyIHRsYnBzWzRdOyAvKiByZWFkLW9ubHkgKi8KKworCQkJX191MzIgZXBsYywgZXBzYzsgLyogRS5QRCAqLworCQl9IGU7CiAJCV9fdTggcGFkWzEwMjBdOwogCX0gdTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtXzQ0eC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV80NHguaAppbmRleCBkMjJkMzk5Li5hMGU1NzYxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtXzQ0eC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fNDR4LmgKQEAgLTYxLDcgKzYxLDYgQEAKIAlyZXR1cm4gY29udGFpbmVyX29mKHZjcHUsIHN0cnVjdCBrdm1wcGNfdmNwdV80NHgsIHZjcHUpOwogfQogCi12b2lkIGt2bXBwY19zZXRfcGlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG5ld19waWQpOwogdm9pZCBrdm1wcGNfNDR4X3RsYl9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQga3ZtcHBjXzQ0eF90bGJfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2FzbS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9hc20uaAppbmRleCA1Yjc1MDQ2Li4wOTUxYjE3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2FzbS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYXNtLmgKQEAgLTU5LDYgKzU5LDcgQEAKICNkZWZpbmUgQk9PSzNTX0lOVEVSUlVQVF9JTlNUX1NFR01FTlQJMHg0ODAKICNkZWZpbmUgQk9PSzNTX0lOVEVSUlVQVF9FWFRFUk5BTAkweDUwMAogI2RlZmluZSBCT09LM1NfSU5URVJSVVBUX0VYVEVSTkFMX0xFVkVMCTB4NTAxCisjZGVmaW5lIEJPT0szU19JTlRFUlJVUFRfRVhURVJOQUxfSFYJMHg1MDIKICNkZWZpbmUgQk9PSzNTX0lOVEVSUlVQVF9BTElHTk1FTlQJMHg2MDAKICNkZWZpbmUgQk9PSzNTX0lOVEVSUlVQVF9QUk9HUkFNCTB4NzAwCiAjZGVmaW5lIEJPT0szU19JTlRFUlJVUFRfRlBfVU5BVkFJTAkweDgwMApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3NfYXNtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szc19hc20uaAppbmRleCAzNmZkYjNhLi5kNWE4YTM4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szc19hc20uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szc19hc20uaApAQCAtMzQsNiArMzQsNyBAQAogCSAgICAoXGludG5vID09IEJPT0szU19JTlRFUlJVUFRfREFUQV9TRUdNRU5UKSB8fCBcCiAJICAgIChcaW50bm8gPT0gQk9PSzNTX0lOVEVSUlVQVF9JTlNUX1NFR01FTlQpIHx8IFwKIAkgICAgKFxpbnRubyA9PSBCT09LM1NfSU5URVJSVVBUX0VYVEVSTkFMKSB8fCBcCisJICAgIChcaW50bm8gPT0gQk9PSzNTX0lOVEVSUlVQVF9FWFRFUk5BTF9IVikgfHwgXAogCSAgICAoXGludG5vID09IEJPT0szU19JTlRFUlJVUFRfQUxJR05NRU5UKSB8fCBcCiAJICAgIChcaW50bm8gPT0gQk9PSzNTX0lOVEVSUlVQVF9QUk9HUkFNKSB8fCBcCiAJICAgIChcaW50bm8gPT0gQk9PSzNTX0lOVEVSUlVQVF9GUF9VTkFWQUlMKSB8fCBcCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2U1MDAuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fZTUwMC5oCmluZGV4IDdmZWEyNmYuLjdhMmE1NjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fZTUwMC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fZTUwMC5oCkBAIC00Myw2ICs0Myw3IEBACiAKIAl1MzIgaG9zdF9waWRbRTUwMF9QSURfTlVNXTsKIAl1MzIgcGlkW0U1MDBfUElEX05VTV07CisJdTMyIHN2cjsKIAogCXUzMiBtYXMwOwogCXUzMiBtYXMxOwpAQCAtNTgsNiArNTksNyBAQAogCXUzMiBoaWQxOwogCXUzMiB0bGIwY2ZnOwogCXUzMiB0bGIxY2ZnOworCXU2NCBtY2FyOwogCiAJc3RydWN0IGt2bV92Y3B1IHZjcHU7CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCBiYmEzYjliLi4xODZmMTUwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMjIzLDYgKzIyMyw3IEBACiAJdWxvbmcgaGZsYWdzOwogCXVsb25nIGd1ZXN0X293bmVkX2V4dDsKICNlbmRpZgorCXUzMiB2cnNhdmU7IC8qIGFsc28gVVNQUkcwICovCiAJdTMyIG1tdWNyOwogCXVsb25nIHNwcmc0OwogCXVsb25nIHNwcmc1OwpAQCAtMjMyLDYgKzIzMyw5IEBACiAJdWxvbmcgY3NycjE7CiAJdWxvbmcgZHNycjA7CiAJdWxvbmcgZHNycjE7CisJdWxvbmcgbWNzcnIwOworCXVsb25nIG1jc3JyMTsKKwl1bG9uZyBtY3NyOwogCXVsb25nIGVzcjsKIAl1MzIgZGVjOwogCXUzMiBkZWNhcjsKQEAgLTI1NSw2ICsyNTksNyBAQAogCXUzMiBkYnNyOwogCiAjaWZkZWYgQ09ORklHX0tWTV9FWElUX1RJTUlORworCXN0cnVjdCBtdXRleCBleGl0X3RpbWluZ19sb2NrOwogCXN0cnVjdCBrdm1wcGNfZXhpdF90aW1pbmcgdGltaW5nX2V4aXQ7CiAJc3RydWN0IGt2bXBwY19leGl0X3RpbWluZyB0aW1pbmdfbGFzdF9lbnRlcjsKIAl1MzIgbGFzdF9leGl0X3R5cGU7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaAppbmRleCBlY2IzYmM3Li45MzQ1MjM4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgKQEAgLTYxLDYgKzYxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGV4dGVybiBpbnQga3ZtcHBjX2VtdWxhdGVfbW1pbyhzdHJ1Y3Qga3ZtX3J1biAqcnVuLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogZXh0ZXJuIHZvaWQga3ZtcHBjX2VtdWxhdGVfZGVjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CitleHRlcm4gdTMyIGt2bXBwY19nZXRfZGVjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHRiKTsKIAogLyogQ29yZS1zcGVjaWZpYyBob29rcyAqLwogCkBAIC0xNDIsNCArMTQzLDEyIEBACiAJcmV0dXJuIHI7CiB9CiAKK3ZvaWQga3ZtcHBjX2NvcmVfZ2V0X3NyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zcmVncyAqc3JlZ3MpOworaW50IGt2bXBwY19jb3JlX3NldF9zcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fc3JlZ3MgKnNyZWdzKTsKKwordm9pZCBrdm1wcGNfZ2V0X3NyZWdzX2l2b3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncyk7CitpbnQga3ZtcHBjX3NldF9zcmVnc19pdm9yKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zcmVncyAqc3JlZ3MpOworCit2b2lkIGt2bXBwY19zZXRfcGlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHBpZCk7CisKICNlbmRpZiAvKiBfX1BPV0VSUENfS1ZNX1BQQ19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9scHBhY2EuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9scHBhY2EuaAppbmRleCBhMDc3YWRjLi5lMDI5OGQyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbHBwYWNhLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2xwcGFjYS5oCkBAIC0yMTAsNiArMjEwLDggQEAKICNkZWZpbmUgRElTUEFUQ0hfTE9HX0JZVEVTCTQwOTYJLyogYnl0ZXMgcGVyIGNwdSAqLwogI2RlZmluZSBOX0RJU1BBVENIX0xPRwkJKERJU1BBVENIX0xPR19CWVRFUyAvIHNpemVvZihzdHJ1Y3QgZHRsX2VudHJ5KSkKIAorZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICpkdGxfY2FjaGU7CisKIC8qCiAgKiBXaGVuIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HID0geSwgdGhlIGNwdSBhY2NvdW50aW5nIGNvZGUgY29udHJvbHMKICAqIHJlYWRpbmcgZnJvbSB0aGUgZGlzcGF0Y2ggdHJhY2UgbG9nLiAgSWYgb3RoZXIgY29kZSB3YW50cyB0byBjb25zdW1lCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbWFjaGRlcC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21hY2hkZXAuaAppbmRleCBlNGYwMTkxLi40N2NhY2RkYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21hY2hkZXAuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbWFjaGRlcC5oCkBAIC0yOSwyMSArMjksNiBAQAogc3RydWN0IHBjaV9jb250cm9sbGVyOwogc3RydWN0IGtpbWFnZTsKIAotI2lmZGVmIENPTkZJR19TTVAKLXN0cnVjdCBzbXBfb3BzX3QgewotCXZvaWQgICgqbWVzc2FnZV9wYXNzKShpbnQgdGFyZ2V0LCBpbnQgbXNnKTsKLQlpbnQgICAoKnByb2JlKSh2b2lkKTsKLQl2b2lkICAoKmtpY2tfY3B1KShpbnQgbnIpOwotCXZvaWQgICgqc2V0dXBfY3B1KShpbnQgbnIpOwotCXZvaWQgICgqYnJpbmd1cF9kb25lKSh2b2lkKTsKLQl2b2lkICAoKnRha2VfdGltZWJhc2UpKHZvaWQpOwotCXZvaWQgICgqZ2l2ZV90aW1lYmFzZSkodm9pZCk7Ci0JaW50ICAgKCpjcHVfZGlzYWJsZSkodm9pZCk7Ci0Jdm9pZCAgKCpjcHVfZGllKSh1bnNpZ25lZCBpbnQgbnIpOwotCWludCAgICgqY3B1X2Jvb3RhYmxlKSh1bnNpZ25lZCBpbnQgbnIpOwotfTsKLSNlbmRpZgotCiBzdHJ1Y3QgbWFjaGRlcF9jYWxscyB7CiAJY2hhcgkJKm5hbWU7CiAjaWZkZWYgQ09ORklHX1BQQzY0CkBAIC0yNjcsNiArMjUyLDcgQEAKIAogZXh0ZXJuIHZvaWQgZTUwMF9pZGxlKHZvaWQpOwogZXh0ZXJuIHZvaWQgcG93ZXI0X2lkbGUodm9pZCk7CitleHRlcm4gdm9pZCBwb3dlcjdfaWRsZSh2b2lkKTsKIGV4dGVybiB2b2lkIHBwYzZ4eF9pZGxlKHZvaWQpOwogZXh0ZXJuIHZvaWQgYm9vazNlX2lkbGUodm9pZCk7CiAKQEAgLTMxMSwxMiArMjk3LDYgQEAKIAogI2VuZGlmIC8qIENPTkZJR19QUENfUE1BQyAqLwogCi0jaWZkZWYgQ09ORklHX1NNUAotLyogUG9vciBkZWZhdWx0IGltcGxlbWVudGF0aW9ucyAqLwotZXh0ZXJuIHZvaWQgX19kZXZpbml0IHNtcF9nZW5lcmljX2dpdmVfdGltZWJhc2Uodm9pZCk7Ci1leHRlcm4gdm9pZCBfX2RldmluaXQgc21wX2dlbmVyaWNfdGFrZV90aW1lYmFzZSh2b2lkKTsKLSNlbmRpZiAvKiBDT05GSUdfU01QICovCi0KIAogLyogRnVuY3Rpb25zIHRvIHByb2R1Y2UgY29kZXMgb24gdGhlIGxlZHMuCiAgKiBUaGUgU1JDIGNvZGUgc2hvdWxkIGJlIHVuaXF1ZSBmb3IgdGhlIG1lc3NhZ2UgY2F0ZWdvcnkgYW5kIHNob3VsZApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1ib29rM2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtYm9vazNlLmgKaW5kZXggMTcxOTRmYy4uM2VhMGY5YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1ib29rM2UuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWJvb2szZS5oCkBAIC00Myw2ICs0Myw3IEBACiAjZGVmaW5lIE1BUzBfVExCU0VMKHgpCQkoKCh4KSA8PCAyOCkgJiAweDMwMDAwMDAwKQogI2RlZmluZSBNQVMwX0VTRUwoeCkJCSgoKHgpIDw8IDE2KSAmIDB4MEZGRjAwMDApCiAjZGVmaW5lIE1BUzBfTlYoeCkJCSgoeCkgJiAweDAwMDAwRkZGKQorI2RlZmluZSBNQVMwX0VTRUxfTUFTSwkJMHgwRkZGMDAwMAogI2RlZmluZSBNQVMwX0hFUwkJMHgwMDAwNDAwMAogI2RlZmluZSBNQVMwX1dRX0FMTFdBWVMJCTB4MDAwMDAwMDAKICNkZWZpbmUgTUFTMF9XUV9DT05ECQkweDAwMDAxMDAwCkBAIC0xMzcsNiArMTM4LDIxIEBACiAjZGVmaW5lIE1NVUNTUjBfVExCMlBTCTB4MDAwNzgwMDAJLyogVExCMiBQYWdlIFNpemUgKi8KICNkZWZpbmUgTU1VQ1NSMF9UTEIzUFMJMHgwMDc4MDAwMAkvKiBUTEIzIFBhZ2UgU2l6ZSAqLwogCisvKiBNTVVDRkcgYml0cyAqLworI2RlZmluZSBNTVVDRkdfTUFWTl9OQVNLCTB4MDAwMDAwMDMKKyNkZWZpbmUgTU1VQ0ZHX01BVk5fVjFfMAkweDAwMDAwMDAwCisjZGVmaW5lIE1NVUNGR19NQVZOX1YyXzAJMHgwMDAwMDAwMQorI2RlZmluZSBNTVVDRkdfTlRMQl9NQVNLCTB4MDAwMDAwMGMKKyNkZWZpbmUgTU1VQ0ZHX05UTEJfU0hJRlQJMgorI2RlZmluZSBNTVVDRkdfUElEU0laRV9NQVNLCTB4MDAwMDA3YzAKKyNkZWZpbmUgTU1VQ0ZHX1BJRFNJWkVfU0hJRlQJNgorI2RlZmluZSBNTVVDRkdfVFdDCQkweDAwMDA4MDAwCisjZGVmaW5lIE1NVUNGR19MUkFUCQkweDAwMDEwMDAwCisjZGVmaW5lIE1NVUNGR19SQVNJWkVfTUFTSwkweDAwZmUwMDAwCisjZGVmaW5lIE1NVUNGR19SQVNJWkVfU0hJRlQJMTcKKyNkZWZpbmUgTU1VQ0ZHX0xQSURTSVpFX01BU0sJMHgwZjAwMDAwMAorI2RlZmluZSBNTVVDRkdfTFBJRFNJWkVfU0hJRlQJMjQKKwogLyogVExCbkNGRyBlbmNvZGluZyAqLwogI2RlZmluZSBUTEJuQ0ZHX05fRU5UUlkJCTB4MDAwMDBmZmYJLyogbnVtYmVyIG9mIGVudHJpZXMgKi8KICNkZWZpbmUgVExCbkNGR19IRVMJCTB4MDAwMDIwMDAJLyogSFcgc2VsZWN0IHN1cHBvcnRlZCAqLwpAQCAtMjI5LDYgKzI0NSwxMCBAQAogZXh0ZXJuIGludCBtbXVfbGluZWFyX3BzaXplOwogZXh0ZXJuIGludCBtbXVfdm1lbW1hcF9wc2l6ZTsKIAorI2lmZGVmIENPTkZJR19QUEM2NAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbGluZWFyX21hcF90b3A7CisjZW5kaWYKKwogI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KIAogI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19NTVVfQk9PSzNFX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWhhc2g2NC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1oYXNoNjQuaAppbmRleCBhZTdiM2VmLi5kODY1YmQ5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWhhc2g2NC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtaGFzaDY0LmgKQEAgLTQwOCw2ICs0MDgsNyBAQAogI2VuZGlmIC8qIENPTkZJR19QUENfU1VCUEFHRV9QUk9UICovCiAKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBtbV9jb250ZXh0X2lkX3Q7CitzdHJ1Y3Qgc3BpbmxvY2s7CiAKIHR5cGVkZWYgc3RydWN0IHsKIAltbV9jb250ZXh0X2lkX3QgaWQ7CkBAIC00MjMsNiArNDI0LDExIEBACiAjaWZkZWYgQ09ORklHX1BQQ19TVUJQQUdFX1BST1QKIAlzdHJ1Y3Qgc3VicGFnZV9wcm90X3RhYmxlIHNwdDsKICNlbmRpZiAvKiBDT05GSUdfUFBDX1NVQlBBR0VfUFJPVCAqLworI2lmZGVmIENPTkZJR19QUENfSUNTV1gKKwlzdHJ1Y3Qgc3BpbmxvY2sgKmNvcF9sb2NrcDsgLyogZ3VhcmQgYWNvcCBhbmQgY29wX3BpZCAqLworCXVuc2lnbmVkIGxvbmcgYWNvcDsJLyogbWFzayBvZiBlbmFibGVkIGNvcHJvY2Vzc29yIHR5cGVzICovCisJdW5zaWduZWQgaW50IGNvcF9waWQ7CS8qIHBpZCB2YWx1ZSB1c2VkIHdpdGggY29wcm9jZXNzb3JzICovCisjZW5kaWYgLyogQ09ORklHX1BQQ19JQ1NXWCAqLwogfSBtbV9jb250ZXh0X3Q7CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS5oCmluZGV4IGJiNDBhMDYuLjQxMzhiMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LmgKQEAgLTU2LDExICs1Niw2IEBACiAgKi8KICNkZWZpbmUgTU1VX0ZUUl9ORUVEX0RUTEJfU1dfTFJVCUFTTV9DT05TVCgweDAwMjAwMDAwKQogCi0vKiBUaGlzIGluZGljYXRlcyB0aGF0IHRoZSBwcm9jZXNzb3IgdXNlcyB0aGUgSVNBIDIuMDYgc2VydmVyIHRsYmllCi0gKiBtbmVtb25pY3MKLSAqLwotI2RlZmluZSBNTVVfRlRSX1RMQklFXzIwNgkJQVNNX0NPTlNUKDB4MDA0MDAwMDApCi0KIC8qIEVuYWJsZSB1c2Ugb2YgVExCIHJlc2VydmF0aW9uLiAgUHJvY2Vzc29yIHNob3VsZCBzdXBwb3J0IHRsYnNyeC4KICAqIGluc3RydWN0aW9uIGFuZCBNQVMwW1dRXS4KICAqLwpAQCAtNzAsNiArNjUsNTMgQEAKICAqLwogI2RlZmluZSBNTVVfRlRSX1VTRV9QQUlSRURfTUFTCQlBU01fQ09OU1QoMHgwMTAwMDAwMCkKIAorLyogTU1VIGlzIFNMQi1iYXNlZAorICovCisjZGVmaW5lIE1NVV9GVFJfU0xCCQkJQVNNX0NPTlNUKDB4MDIwMDAwMDApCisKKy8qIFN1cHBvcnQgMTZNIGxhcmdlIHBhZ2VzCisgKi8KKyNkZWZpbmUgTU1VX0ZUUl8xNk1fUEFHRQkJQVNNX0NPTlNUKDB4MDQwMDAwMDApCisKKy8qIFN1cHBvcnRzIFRMQklFTCB2YXJpYW50CisgKi8KKyNkZWZpbmUgTU1VX0ZUUl9UTEJJRUwJCQlBU01fQ09OU1QoMHgwODAwMDAwMCkKKworLyogU3VwcG9ydHMgdGxiaWVzIHcvbyBsb2NraW5nCisgKi8KKyNkZWZpbmUgTU1VX0ZUUl9MT0NLTEVTU19UTEJJRQkJQVNNX0NPTlNUKDB4MTAwMDAwMDApCisKKy8qIExhcmdlIHBhZ2VzIGNhbiBiZSBtYXJrZWQgQ0kKKyAqLworI2RlZmluZSBNTVVfRlRSX0NJX0xBUkdFX1BBR0UJCUFTTV9DT05TVCgweDIwMDAwMDAwKQorCisvKiAxVCBzZWdtZW50cyBhdmFpbGFibGUKKyAqLworI2RlZmluZSBNTVVfRlRSXzFUX1NFR01FTlQJCUFTTV9DT05TVCgweDQwMDAwMDAwKQorCisvKiBEb2Vzbid0IHN1cHBvcnQgdGhlIEIgYml0ICgxVCBzZWdtZW50KSBpbiBTTEJJRQorICovCisjZGVmaW5lIE1NVV9GVFJfTk9fU0xCSUVfQgkJQVNNX0NPTlNUKDB4ODAwMDAwMDApCisKKy8qIE1NVSBmZWF0dXJlIGJpdCBzZXRzIGZvciB2YXJpb3VzIENQVXMgKi8KKyNkZWZpbmUgTU1VX0ZUUlNfREVGQVVMVF9IUFRFX0FSQ0hfVjIJXAorCU1NVV9GVFJfSFBURV9UQUJMRSB8IE1NVV9GVFJfUFBDQVNfQVJDSF9WMgorI2RlZmluZSBNTVVfRlRSU19QT1dFUjQJCU1NVV9GVFJTX0RFRkFVTFRfSFBURV9BUkNIX1YyCisjZGVmaW5lIE1NVV9GVFJTX1BQQzk3MAkJTU1VX0ZUUlNfUE9XRVI0CisjZGVmaW5lIE1NVV9GVFJTX1BPV0VSNQkJTU1VX0ZUUlNfUE9XRVI0IHwgTU1VX0ZUUl9MT0NLTEVTU19UTEJJRQorI2RlZmluZSBNTVVfRlRSU19QT1dFUjYJCU1NVV9GVFJTX1BPV0VSNCB8IE1NVV9GVFJfTE9DS0xFU1NfVExCSUUKKyNkZWZpbmUgTU1VX0ZUUlNfUE9XRVI3CQlNTVVfRlRSU19QT1dFUjQgfCBNTVVfRlRSX0xPQ0tMRVNTX1RMQklFCisjZGVmaW5lIE1NVV9GVFJTX0NFTEwJCU1NVV9GVFJTX0RFRkFVTFRfSFBURV9BUkNIX1YyIHwgXAorCQkJCU1NVV9GVFJfQ0lfTEFSR0VfUEFHRQorI2RlZmluZSBNTVVfRlRSU19QQTZUCQlNTVVfRlRSU19ERUZBVUxUX0hQVEVfQVJDSF9WMiB8IFwKKwkJCQlNTVVfRlRSX0NJX0xBUkdFX1BBR0UgfCBNTVVfRlRSX05PX1NMQklFX0IKKyNkZWZpbmUgTU1VX0ZUUlNfQTIJCU1NVV9GVFJfVFlQRV8zRSB8IE1NVV9GVFJfVVNFX1RMQklMWCB8IFwKKwkJCQlNTVVfRlRSX1VTRV9UTEJJVkFYX0JDQVNUIHwgXAorCQkJCU1NVV9GVFJfTE9DS19CQ0FTVF9JTlZBTCB8IFwKKwkJCQlNTVVfRlRSX1VTRV9UTEJSU1JWIHwgXAorCQkJCU1NVV9GVFJfVVNFX1BBSVJFRF9NQVMgfCBcCisJCQkJTU1VX0ZUUl9UTEJJRUwgfCBcCisJCQkJTU1VX0ZUUl8xNk1fUEFHRQogI2lmbmRlZiBfX0FTU0VNQkxZX18KICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCA4MWZiNDEyLi5hNzM2NjhhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtMzIsNiArMzIsMTAgQEAKIGV4dGVybiB2b2lkIG1tdV9jb250ZXh0X2luaXQodm9pZCk7CiAjZW5kaWYKIAorZXh0ZXJuIHZvaWQgc3dpdGNoX2NvcChzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0KTsKK2V4dGVybiBpbnQgdXNlX2NvcCh1bnNpZ25lZCBsb25nIGFjb3AsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKK2V4dGVybiB2b2lkIGRyb3BfY29wKHVuc2lnbmVkIGxvbmcgYWNvcCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pOworCiAvKgogICogc3dpdGNoX21tIGlzIHRoZSBlbnRyeSBwb2ludCBjYWxsZWQgZnJvbSB0aGUgYXJjaGl0ZWN0dXJlIGluZGVwZW5kZW50CiAgKiBjb2RlIGluIGtlcm5lbC9zY2hlZC5jCkBAIC01NSw2ICs1OSwxMiBAQAogCWlmIChwcmV2ID09IG5leHQpCiAJCXJldHVybjsKIAorI2lmZGVmIENPTkZJR19QUENfSUNTV1gKKwkvKiBTd2l0Y2ggY29wcm9jZXNzb3IgY29udGV4dCBvbmx5IGlmIHByZXYgb3IgbmV4dCB1c2VzIGEgY29wcm9jZXNzb3IgKi8KKwlpZiAocHJldi0+Y29udGV4dC5hY29wIHx8IG5leHQtPmNvbnRleHQuYWNvcCkKKwkJc3dpdGNoX2NvcChuZXh0KTsKKyNlbmRpZiAvKiBDT05GSUdfUFBDX0lDU1dYICovCisKIAkvKiBXZSBtdXN0IHN0b3AgYWxsIGFsdGl2ZWMgc3RyZWFtcyBiZWZvcmUgY2hhbmdpbmcgdGhlIEhXCiAJICogY29udGV4dAogCSAqLwpAQCAtNjcsNyArNzcsNyBAQAogCSAqIHN1YiBhcmNoaXRlY3R1cmVzLgogCSAqLwogI2lmZGVmIENPTkZJR19QUENfU1REX01NVV82NAotCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9TTEIpKQorCWlmIChtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl9TTEIpKQogCQlzd2l0Y2hfc2xiKHRzaywgbmV4dCk7CiAJZWxzZQogCQlzd2l0Y2hfc3RhYih0c2ssIG5leHQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21waWMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGljLmgKaW5kZXggNDliYWRkYy4uZGYxODk4OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21waWMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBpYy5oCkBAIC0yNjIsNiArMjYyLDcgQEAKICNpZmRlZiBDT05GSUdfU01QCiAJc3RydWN0IGlycV9jaGlwCQloY19pcGk7CiAjZW5kaWYKKwlzdHJ1Y3QgaXJxX2NoaXAJCWhjX3RtOwogCWNvbnN0IGNoYXIJCSpuYW1lOwogCS8qIEZsYWdzICovCiAJdW5zaWduZWQgaW50CQlmbGFnczsKQEAgLTI4MCw3ICsyODEsNyBAQAogCiAJLyogdmVjdG9yIG51bWJlcnMgdXNlZCBmb3IgaW50ZXJuYWwgc291cmNlcyAoaXBpL3RpbWVycykgKi8KIAl1bnNpZ25lZCBpbnQJCWlwaV92ZWNzWzRdOwotCXVuc2lnbmVkIGludAkJdGltZXJfdmVjc1s0XTsKKwl1bnNpZ25lZCBpbnQJCXRpbWVyX3ZlY3NbOF07CiAKIAkvKiBTcHVyaW91cyB2ZWN0b3IgdG8gcHJvZ3JhbSBpbnRvIHVudXNlZCBzb3VyY2VzICovCiAJdW5zaWduZWQgaW50CQlzcHVyaW91c192ZWM7CkBAIC0zNjgsNiArMzY5LDggQEAKICAqIE5PVEU6IFRoaXMgZmxhZyB0cnVtcHMgTVBJQ19XQU5UU19SRVNFVC4KICAqLwogI2RlZmluZSBNUElDX05PX1JFU0VUCQkJMHgwMDAwNDAwMAorLyogRnJlZXNjYWxlIE1QSUMgKGNvbXBhdGlibGUgaW5jbHVkZXMgImZzbCxtcGljIikgKi8KKyNkZWZpbmUgTVBJQ19GU0wJCQkweDAwMDA4MDAwCiAKIC8qIE1QSUMgSFcgbW9kaWZpY2F0aW9uIElEICovCiAjZGVmaW5lIE1QSUNfUkVHU0VUX01BU0sJCTB4ZjAwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wU2VyaWVzX3JlY29uZmlnLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcFNlcmllc19yZWNvbmZpZy5oCmluZGV4IGQ0YjRiZmEuLjg5ZDJmOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wU2VyaWVzX3JlY29uZmlnLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BTZXJpZXNfcmVjb25maWcuaApAQCAtMTgsMTMgKzE4LDE4IEBACiBleHRlcm4gaW50IHBTZXJpZXNfcmVjb25maWdfbm90aWZpZXJfcmVnaXN0ZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICopOwogZXh0ZXJuIHZvaWQgcFNlcmllc19yZWNvbmZpZ19ub3RpZmllcl91bnJlZ2lzdGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqKTsKIGV4dGVybiBzdHJ1Y3QgYmxvY2tpbmdfbm90aWZpZXJfaGVhZCBwU2VyaWVzX3JlY29uZmlnX2NoYWluOworLyogTm90IHRoZSBiZXN0IHBsYWNlIHRvIHB1dCB0aGlzLCB3aWxsIGJlIGZpeGVkIHdoZW4gd2UgbW92ZSBzb21lCisgKiBvZiB0aGUgcnRhcyBzdXNwZW5kLW1lIHN0dWZmIHRvIHBzZXJpZXMgKi8KK2V4dGVybiB2b2lkIHBTZXJpZXNfY29hbGVzY2VfaW5pdCh2b2lkKTsKICNlbHNlIC8qICFDT05GSUdfUFBDX1BTRVJJRVMgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHBTZXJpZXNfcmVjb25maWdfbm90aWZpZXJfcmVnaXN0ZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKIHsKIAlyZXR1cm4gMDsKIH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwU2VyaWVzX3JlY29uZmlnX25vdGlmaWVyX3VucmVnaXN0ZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcFNlcmllc19jb2FsZXNjZV9pbml0KHZvaWQpIHsgfQogI2VuZGlmIC8qIENPTkZJR19QUENfUFNFUklFUyAqLwogCisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX1BQQzY0X1BTRVJJRVNfUkVDT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhY2EuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWNhLmgKaW5kZXggZWM1NzU0MC4uNzQxMjY3NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhY2EuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFjYS5oCkBAIC05Miw5ICs5Miw5IEBACiAJICogTm93LCBzdGFydGluZyBpbiBjYWNoZWxpbmUgMiwgdGhlIGV4Y2VwdGlvbiBzYXZlIGFyZWFzCiAJICovCiAJLyogdXNlZCBmb3IgbW9zdCBpbnRlcnJ1cHRzL2V4Y2VwdGlvbnMgKi8KLQl1NjQgZXhnZW5bMTBdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMHg4MCkpKTsKLQl1NjQgZXhtY1sxMF07CQkvKiB1c2VkIGZvciBtYWNoaW5lIGNoZWNrcyAqLwotCXU2NCBleHNsYlsxMF07CQkvKiB1c2VkIGZvciBTTEIvc2VnbWVudCB0YWJsZSBtaXNzZXMKKwl1NjQgZXhnZW5bMTFdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMHg4MCkpKTsKKwl1NjQgZXhtY1sxMV07CQkvKiB1c2VkIGZvciBtYWNoaW5lIGNoZWNrcyAqLworCXU2NCBleHNsYlsxMV07CQkvKiB1c2VkIGZvciBTTEIvc2VnbWVudCB0YWJsZSBtaXNzZXMKICAJCQkJICogb24gdGhlIGxpbmVhciBtYXBwaW5nICovCiAJLyogU0xCIHJlbGF0ZWQgZGVmaW5pdGlvbnMgKi8KIAl1MTYgdm1hbGxvY19zbGxwOwpAQCAtMTA2LDcgKzEwNiw4IEBACiAJcGdkX3QgKnBnZDsJCQkvKiBDdXJyZW50IFBHRCAqLwogCXBnZF90ICprZXJuZWxfcGdkOwkJLyogS2VybmVsIFBHRCAqLwogCXU2NCBleGdlbls4XSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDB4ODApKSk7Ci0JdTY0IGV4dGxiW0VYX1RMQl9TSVpFKjNdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMHg4MCkpKTsKKwkvKiBXZSBjYW4gaGF2ZSB1cCB0byAzIGxldmVscyBvZiByZWVudHJhbmN5IGluIHRoZSBUTEIgbWlzcyBoYW5kbGVyICovCisJdTY0IGV4dGxiWzNdW0VYX1RMQl9TSVpFIC8gc2l6ZW9mKHU2NCldIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMHg4MCkpKTsKIAl1NjQgZXhtY1s4XTsJCS8qIHVzZWQgZm9yIG1hY2hpbmUgY2hlY2tzICovCiAJdTY0IGV4Y3JpdFs4XTsJCS8qIHVzZWQgZm9yIGNyaXQgaW50ZXJydXB0cyAqLwogCXU2NCBleGRiZ1s4XTsJCS8qIHVzZWQgZm9yIGRlYnVnIGludGVycnVwdHMgKi8KQEAgLTEyNSw3ICsxMjYsNyBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqX19jdXJyZW50OwkvKiBQb2ludGVyIHRvIGN1cnJlbnQgKi8KIAl1NjQga3N0YWNrOwkJCS8qIFNhdmVkIEtlcm5lbCBzdGFjayBhZGRyICovCiAJdTY0IHN0YWJfcnI7CQkJLyogc3RhYi9zbGIgcm91bmQtcm9iaW4gY291bnRlciAqLwotCXU2NCBzYXZlZF9yMTsJCQkvKiByMSBzYXZlIGZvciBSVEFTIGNhbGxzICovCisJdTY0IHNhdmVkX3IxOwkJCS8qIHIxIHNhdmUgZm9yIFJUQVMgY2FsbHMgb3IgUE0gKi8KIAl1NjQgc2F2ZWRfbXNyOwkJCS8qIE1TUiBzYXZlZCBoZXJlIGJ5IGVudGVyX3J0YXMgKi8KIAl1MTYgdHJhcF9zYXZlOwkJCS8qIFVzZWQgd2hlbiBiYWQgc3RhY2sgaXMgZW5jb3VudGVyZWQgKi8KIAl1OCBzb2Z0X2VuYWJsZWQ7CQkvKiBpcnEgc29mdC1lbmFibGUgZmxhZyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2VfNjQuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlXzY0LmgKaW5kZXggODEyYjJjZC4uOTM1NjI2MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2VfNjQuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZV82NC5oCkBAIC01OSwyNCArNTksNyBAQAogCTogImN0ciIsICJtZW1vcnkiKTsKIH0KIAotZXh0ZXJuIHZvaWQgY29weV80S19wYWdlKHZvaWQgKnRvLCB2b2lkICpmcm9tKTsKLQotI2lmZGVmIENPTkZJR19QUENfNjRLX1BBR0VTCi1zdGF0aWMgaW5saW5lIHZvaWQgY29weV9wYWdlKHZvaWQgKnRvLCB2b2lkICpmcm9tKQotewotCXVuc2lnbmVkIGludCBpOwotCWZvciAoaT0wOyBpIDwgKDEgPDwgKFBBR0VfU0hJRlQgLSAxMikpOyBpKyspIHsKLQkJY29weV80S19wYWdlKHRvLCBmcm9tKTsKLQkJdG8gKz0gNDA5NjsKLQkJZnJvbSArPSA0MDk2OwotCX0KLX0KLSNlbHNlIC8qIENPTkZJR19QUENfNjRLX1BBR0VTICovCi1zdGF0aWMgaW5saW5lIHZvaWQgY29weV9wYWdlKHZvaWQgKnRvLCB2b2lkICpmcm9tKQotewotCWNvcHlfNEtfcGFnZSh0bywgZnJvbSk7Ci19Ci0jZW5kaWYgLyogQ09ORklHX1BQQ182NEtfUEFHRVMgKi8KK2V4dGVybiB2b2lkIGNvcHlfcGFnZSh2b2lkICp0bywgdm9pZCAqZnJvbSk7CiAKIC8qIExvZyAyIG9mIHBhZ2UgdGFibGUgc2l6ZSAqLwogZXh0ZXJuIHU2NCBwcGM2NF9wZnRfc2l6ZTsKQEAgLTEzMCw3ICsxMTMsNyBAQAogZXh0ZXJuIHZvaWQgc2xpY2Vfc2V0X3JhbmdlX3BzaXplKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCQkJCSAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGludCBwc2l6ZSk7CiAKLSNkZWZpbmUgc2xpY2VfbW1fbmV3X2NvbnRleHQobW0pCSgobW0pLT5jb250ZXh0LmlkID09IDApCisjZGVmaW5lIHNsaWNlX21tX25ld19jb250ZXh0KG1tKQkoKG1tKS0+Y29udGV4dC5pZCA9PSBNTVVfTk9fQ09OVEVYVCkKIAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGM2NC5oCmluZGV4IDJiMDljZDUuLjgxNTc2ZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjNjQuaApAQCAtMjU3LDIxICsyNTcsMjAgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdGVwX3NldF93cnByb3RlY3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQkgICAgICBwdGVfdCAqcHRlcCkKIHsKLQl1bnNpZ25lZCBsb25nIG9sZDsKIAotICAgICAgIAlpZiAoKHB0ZV92YWwoKnB0ZXApICYgX1BBR0VfUlcpID09IDApCi0gICAgICAgCQlyZXR1cm47Ci0Jb2xkID0gcHRlX3VwZGF0ZShtbSwgYWRkciwgcHRlcCwgX1BBR0VfUlcsIDApOworCWlmICgocHRlX3ZhbCgqcHRlcCkgJiBfUEFHRV9SVykgPT0gMCkKKwkJcmV0dXJuOworCisJcHRlX3VwZGF0ZShtbSwgYWRkciwgcHRlcCwgX1BBR0VfUlcsIDApOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaHVnZV9wdGVwX3NldF93cnByb3RlY3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCiB7Ci0JdW5zaWduZWQgbG9uZyBvbGQ7Ci0KIAlpZiAoKHB0ZV92YWwoKnB0ZXApICYgX1BBR0VfUlcpID09IDApCiAJCXJldHVybjsKLQlvbGQgPSBwdGVfdXBkYXRlKG1tLCBhZGRyLCBwdGVwLCBfUEFHRV9SVywgMSk7CisKKwlwdGVfdXBkYXRlKG1tLCBhZGRyLCBwdGVwLCBfUEFHRV9SVywgMSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjLW9wY29kZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwYy1vcGNvZGUuaAppbmRleCAxMjU1NTY5Li5lNDcyNjU5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjLW9wY29kZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGMtb3Bjb2RlLmgKQEAgLTQxLDYgKzQxLDEwIEBACiAjZGVmaW5lIFBQQ19JTlNUX1JGQ0kJCQkweDRjMDAwMDY2CiAjZGVmaW5lIFBQQ19JTlNUX1JGREkJCQkweDRjMDAwMDRlCiAjZGVmaW5lIFBQQ19JTlNUX1JGTUNJCQkJMHg0YzAwMDA0YworI2RlZmluZSBQUENfSU5TVF9NRlNQUl9EU0NSCQkweDdjMTEwMmE2CisjZGVmaW5lIFBQQ19JTlNUX01GU1BSX0RTQ1JfTUFTSwkweGZjMWZmZmZmCisjZGVmaW5lIFBQQ19JTlNUX01UU1BSX0RTQ1IJCTB4N2MxMTAzYTYKKyNkZWZpbmUgUFBDX0lOU1RfTVRTUFJfRFNDUl9NQVNLCTB4ZmMxZmZmZmYKIAogI2RlZmluZSBQUENfSU5TVF9TVFJJTkcJCQkweDdjMDAwNDJhCiAjZGVmaW5lIFBQQ19JTlNUX1NUUklOR19NQVNLCQkweGZjMDAwN2ZlCkBAIC01Niw2ICs2MCwxNyBAQAogI2RlZmluZSBQUENfSU5TVF9UTEJTUlhfRE9UCQkweDdjMDAwNmE1CiAjZGVmaW5lIFBQQ19JTlNUX1hYTE9SCQkJMHhmMDAwMDUxMAogCisjZGVmaW5lIFBQQ19JTlNUX05BUAkJCTB4NGMwMDAzNjQKKyNkZWZpbmUgUFBDX0lOU1RfU0xFRVAJCQkweDRjMDAwM2E0CisKKy8qIEEyIHNwZWNpZmljIGluc3RydWN0aW9ucyAqLworI2RlZmluZSBQUENfSU5TVF9FUkFUV0UJCQkweDdjMDAwMWE2CisjZGVmaW5lIFBQQ19JTlNUX0VSQVRSRQkJCTB4N2MwMDAxNjYKKyNkZWZpbmUgUFBDX0lOU1RfRVJBVElMWAkJMHg3YzAwMDA2NgorI2RlZmluZSBQUENfSU5TVF9FUkFUSVZBWAkJMHg3YzAwMDY2NgorI2RlZmluZSBQUENfSU5TVF9FUkFUU1gJCQkweDdjMDAwMTI2CisjZGVmaW5lIFBQQ19JTlNUX0VSQVRTWF9ET1QJCTB4N2MwMDAxMjcKKwogLyogbWFjcm9zIHRvIGluc2VydCBmaWVsZHMgaW50byBvcGNvZGVzICovCiAjZGVmaW5lIF9fUFBDX1JBKGEpCSgoKGEpICYgMHgxZikgPDwgMTYpCiAjZGVmaW5lIF9fUFBDX1JCKGIpCSgoKGIpICYgMHgxZikgPDwgMTEpCkBAIC02Nyw2ICs4Miw4IEBACiAjZGVmaW5lIF9fUFBDX1hUKHMpCV9fUFBDX1hTKHMpCiAjZGVmaW5lIF9fUFBDX1RfVExCKHQpCSgoKHQpICYgMHgzKSA8PCAyMSkKICNkZWZpbmUgX19QUENfV0ModykJKCgodykgJiAweDMpIDw8IDIxKQorI2RlZmluZSBfX1BQQ19XUyh3KQkoKCh3KSAmIDB4MWYpIDw8IDExKQorCiAvKgogICogT25seSB1c2UgdGhlIGxhcnggaGludCBiaXQgb24gNjRiaXQgQ1BVcy4gZTUwMHYxL3YyIGJhc2VkIENQVXMgd2lsbCB0cmVhdCBhCiAgKiBsYXJ4IHdpdGggRUggc2V0IGFzIGFuIGlsbGVnYWwgaW5zdHJ1Y3Rpb24uCkBAIC0xMTMsNiArMTMwLDIxIEBACiAjZGVmaW5lIFBQQ19UTEJJVkFYKGEsYikJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfVExCSVZBWCB8IFwKIAkJCQkJX19QUENfUkEoYSkgfCBfX1BQQ19SQihiKSkKIAorI2RlZmluZSBQUENfRVJBVFdFKHMsIGEsIHcpCXN0cmluZ2lmeV9pbl9jKC5sb25nIFBQQ19JTlNUX0VSQVRXRSB8IFwKKwkJCQkJX19QUENfUlMocykgfCBfX1BQQ19SQShhKSB8IF9fUFBDX1dTKHcpKQorI2RlZmluZSBQUENfRVJBVFJFKHMsIGEsIHcpCXN0cmluZ2lmeV9pbl9jKC5sb25nIFBQQ19JTlNUX0VSQVRSRSB8IFwKKwkJCQkJX19QUENfUlMocykgfCBfX1BQQ19SQShhKSB8IF9fUFBDX1dTKHcpKQorI2RlZmluZSBQUENfRVJBVElMWCh0LCBhLCBiKQlzdHJpbmdpZnlfaW5fYygubG9uZyBQUENfSU5TVF9FUkFUSUxYIHwgXAorCQkJCQlfX1BQQ19UX1RMQih0KSB8IF9fUFBDX1JBKGEpIHwgXAorCQkJCQlfX1BQQ19SQihiKSkKKyNkZWZpbmUgUFBDX0VSQVRJVkFYKHMsIGEsIGIpCXN0cmluZ2lmeV9pbl9jKC5sb25nIFBQQ19JTlNUX0VSQVRJVkFYIHwgXAorCQkJCQlfX1BQQ19SUyhzKSB8IF9fUFBDX1JBKGEpIHwgX19QUENfUkIoYikpCisjZGVmaW5lIFBQQ19FUkFUU1godCwgYSwgdykJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfRVJBVFNYIHwgXAorCQkJCQlfX1BQQ19SUyh0KSB8IF9fUFBDX1JBKGEpIHwgX19QUENfUkIoYikpCisjZGVmaW5lIFBQQ19FUkFUU1hfRE9UKHQsIGEsIHcpCXN0cmluZ2lmeV9pbl9jKC5sb25nIFBQQ19JTlNUX0VSQVRTWF9ET1QgfCBcCisJCQkJCV9fUFBDX1JTKHQpIHwgX19QUENfUkEoYSkgfCBfX1BQQ19SQihiKSkKKworCiAvKgogICogRGVmaW5lIHdoYXQgdGhlIFZTWCBYWDEgZm9ybSBpbnN0cnVjdGlvbnMgd2lsbCBsb29rIGxpa2UsIHRoZW4gYWRkCiAgKiB0aGUgMTI4IGJpdCBsb2FkIHN0b3JlIGluc3RydWN0aW9ucyBiYXNlZCBvbiB0aGF0LgpAQCAtMTI2LDQgKzE1OCw3IEBACiAjZGVmaW5lIFhYTE9SKHQsIGEsIGIpCQlzdHJpbmdpZnlfaW5fYygubG9uZyBQUENfSU5TVF9YWExPUiB8IFwKIAkJCQkJICAgICAgIFZTWF9YWDMoKHQpLCAoYSksIChiKSkpCiAKKyNkZWZpbmUgUFBDX05BUAkJCXN0cmluZ2lmeV9pbl9jKC5sb25nIFBQQ19JTlNUX05BUCkKKyNkZWZpbmUgUFBDX1NMRUVQCQlzdHJpbmdpZnlfaW5fYygubG9uZyBQUENfSU5TVF9TTEVFUCkKKwogI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19QUENfT1BDT0RFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGNfYXNtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjX2FzbS5oCmluZGV4IDk4MjEwMDYuLjFiNDIyMzggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGNfYXNtLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwY19hc20uaApAQCAtMTcwLDYgKzE3MCw3IEBACiAjZGVmaW5lIEhNVF9NRURJVU0Jb3IJMiwyLDIKICNkZWZpbmUgSE1UX01FRElVTV9ISUdIIG9yCTUsNSw1CQkjIG1lZGl1bSBoaWdoIHByaW9yaXR5CiAjZGVmaW5lIEhNVF9ISUdICW9yCTMsMywzCisjZGVmaW5lIEhNVF9FWFRSQV9ISUdICW9yCTcsNyw3CQkjIHBvd2VyNyBvbmx5CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAjaWZkZWYgQ09ORklHX1BQQzY0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggZGUxOTY3YS4uZDUwYzJiNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtMjM4LDYgKzIzOCwxMCBAQAogI2lmZGVmIENPTkZJR19LVk1fQk9PSzNTXzMyX0hBTkRMRVIKIAl2b2lkKgkJa3ZtX3NoYWRvd192Y3B1OyAvKiBLVk0gaW50ZXJuYWwgZGF0YSAqLwogI2VuZGlmIC8qIENPTkZJR19LVk1fQk9PSzNTXzMyX0hBTkRMRVIgKi8KKyNpZmRlZiBDT05GSUdfUFBDNjQKKwl1bnNpZ25lZCBsb25nCWRzY3I7CisJaW50CQlkc2NyX2luaGVyaXQ7CisjZW5kaWYKIH07CiAKICNkZWZpbmUgQVJDSF9NSU5fVEFTS0FMSUdOIDE2CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWhhc2g2NC02NGsuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtaGFzaDY0LTY0ay5oCmluZGV4IGM0NDkwZjkuLjU5MjQ3ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtaGFzaDY0LTY0ay5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtaGFzaDY0LTY0ay5oCkBAIC0yMiw3ICsyMiw3IEBACiAjZGVmaW5lIF9QQUdFX0hBU0hQVEUJX1BBR0VfSFBURV9TVUIKIAogLyogTm90ZSB0aGUgZnVsbCBwYWdlIGJpdHMgbXVzdCBiZSBpbiB0aGUgc2FtZSBsb2NhdGlvbiBhcyBmb3Igbm9ybWFsCi0gKiA0ayBwYWdlcyBhcyB0aGUgc2FtZSBhc3NzZW1ibHkgd2lsbCBiZSB1c2VkIHRvIGluc2VydCA2NEsgcGFnZXMKKyAqIDRrIHBhZ2VzIGFzIHRoZSBzYW1lIGFzc2VtYmx5IHdpbGwgYmUgdXNlZCB0byBpbnNlcnQgNjRLIHBhZ2VzCiAgKiB3ZXRoZXIgdGhlIGtlcm5lbCBoYXMgQ09ORklHX1BQQ182NEtfUEFHRVMgb3Igbm90CiAgKi8KICNkZWZpbmUgX1BBR0VfRl9TRUNPTkQgIDB4MDAwMDgwMDAgLyogZnVsbCBwYWdlOiBoaWR4IGJpdHMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWcuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWcuaAppbmRleCA3ZTRhYmViLi5jNWNhZTBkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZy5oCkBAIC05OSwxNyArOTksMjMgQEAKICNkZWZpbmUgTVNSX0xFCQlfX01BU0soTVNSX0xFX0xHKQkvKiBMaXR0bGUgRW5kaWFuICovCiAKICNpZiBkZWZpbmVkKENPTkZJR19QUENfQk9PSzNTXzY0KQorI2RlZmluZSBNU1JfNjRCSVQJTVNSX1NGCisKIC8qIFNlcnZlciB2YXJpYW50ICovCiAjZGVmaW5lIE1TUl8JCU1TUl9NRSB8IE1TUl9SSSB8IE1TUl9JUiB8IE1TUl9EUiB8IE1TUl9JU0YgfE1TUl9IVgotI2RlZmluZSBNU1JfS0VSTkVMICAgICAgTVNSXyB8IE1TUl9TRgorI2RlZmluZSBNU1JfS0VSTkVMCU1TUl8gfCBNU1JfNjRCSVQKICNkZWZpbmUgTVNSX1VTRVIzMglNU1JfIHwgTVNSX1BSIHwgTVNSX0VFCi0jZGVmaW5lIE1TUl9VU0VSNjQJTVNSX1VTRVIzMiB8IE1TUl9TRgorI2RlZmluZSBNU1JfVVNFUjY0CU1TUl9VU0VSMzIgfCBNU1JfNjRCSVQKICNlbGlmIGRlZmluZWQoQ09ORklHX1BQQ19CT09LM1NfMzIpIHx8IGRlZmluZWQoQ09ORklHXzh4eCkKIC8qIERlZmF1bHQgTVNSIGZvciBrZXJuZWwgbW9kZS4gKi8KICNkZWZpbmUgTVNSX0tFUk5FTAkoTVNSX01FfE1TUl9SSXxNU1JfSVJ8TVNSX0RSKQogI2RlZmluZSBNU1JfVVNFUgkoTVNSX0tFUk5FTHxNU1JfUFJ8TVNSX0VFKQogI2VuZGlmCiAKKyNpZm5kZWYgTVNSXzY0QklUCisjZGVmaW5lIE1TUl82NEJJVAkwCisjZW5kaWYKKwogLyogRmxvYXRpbmcgUG9pbnQgU3RhdHVzIGFuZCBDb250cm9sIFJlZ2lzdGVyIChGUFNDUikgRmllbGRzICovCiAjZGVmaW5lIEZQU0NSX0ZYCTB4ODAwMDAwMDAJLyogRlBVIGV4Y2VwdGlvbiBzdW1tYXJ5ICovCiAjZGVmaW5lIEZQU0NSX0ZFWAkweDQwMDAwMDAwCS8qIEZQVSBlbmFibGVkIGV4Y2VwdGlvbiBzdW1tYXJ5ICovCkBAIC0xODIsNiArMTg4LDggQEAKIAogI2RlZmluZSBTUFJOX0NUUgkweDAwOQkvKiBDb3VudCBSZWdpc3RlciAqLwogI2RlZmluZSBTUFJOX0RTQ1IJMHgxMQorI2RlZmluZSBTUFJOX0NGQVIJMHgxYwkvKiBDb21lIEZyb20gQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX0FDT1AJMHgxRgkvKiBBdmFpbGFibGUgQ29wcm9jZXNzb3IgUmVnaXN0ZXIgKi8KICNkZWZpbmUgU1BSTl9DVFJMRgkweDA4OAogI2RlZmluZSBTUFJOX0NUUkxUCTB4MDk4CiAjZGVmaW5lICAgQ1RSTF9DVAkweGMwMDAwMDAwCS8qIGN1cnJlbnQgdGhyZWFkICovCkBAIC0yMTAsOCArMjE4LDQzIEBACiAjZGVmaW5lIFNQUk5fVEJXTAkweDExQwkvKiBUaW1lIEJhc2UgTG93ZXIgUmVnaXN0ZXIgKHN1cGVyLCBSL1cpICovCiAjZGVmaW5lIFNQUk5fVEJXVQkweDExRAkvKiBUaW1lIEJhc2UgVXBwZXIgUmVnaXN0ZXIgKHN1cGVyLCBSL1cpICovCiAjZGVmaW5lIFNQUk5fU1BVUlIJMHgxMzQJLyogU2NhbGVkIFBVUlIgKi8KKyNkZWZpbmUgU1BSTl9IU1BSRzAJMHgxMzAJLyogSHlwZXJ2aXNvciBTY3JhdGNoIDAgKi8KKyNkZWZpbmUgU1BSTl9IU1BSRzEJMHgxMzEJLyogSHlwZXJ2aXNvciBTY3JhdGNoIDEgKi8KKyNkZWZpbmUgU1BSTl9IRFNJU1IgICAgIDB4MTMyCisjZGVmaW5lIFNQUk5fSERBUiAgICAgICAweDEzMworI2RlZmluZSBTUFJOX0hERUMJMHgxMzYJLyogSHlwZXJ2aXNvciBEZWNyZW1lbnRlciAqLwogI2RlZmluZSBTUFJOX0hJT1IJMHgxMzcJLyogOTcwIEh5cGVydmlzb3IgaW50ZXJydXB0IG9mZnNldCAqLworI2RlZmluZSBTUFJOX1JNT1IJMHgxMzgJLyogUmVhbCBtb2RlIG9mZnNldCByZWdpc3RlciAqLworI2RlZmluZSBTUFJOX0hSTU9SCTB4MTM5CS8qIFJlYWwgbW9kZSBvZmZzZXQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9IU1JSMAkweDEzQQkvKiBIeXBlcnZpc29yIFNhdmUvUmVzdG9yZSAwICovCisjZGVmaW5lIFNQUk5fSFNSUjEJMHgxM0IJLyogSHlwZXJ2aXNvciBTYXZlL1Jlc3RvcmUgMSAqLwogI2RlZmluZSBTUFJOX0xQQ1IJMHgxM0UJLyogTFBBUiBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgTFBDUl9WUE0wCSgxdWwgPDwgKDYzLTApKQorI2RlZmluZSAgIExQQ1JfVlBNMQkoMXVsIDw8ICg2My0xKSkKKyNkZWZpbmUgICBMUENSX0lTTAkoMXVsIDw8ICg2My0yKSkKKyNkZWZpbmUgICBMUENSX0RQRkRfU0gJKDYzLTExKQorI2RlZmluZSAgIExQQ1JfVlJNQV9MCSgxdWwgPDwgKDYzLTEyKSkKKyNkZWZpbmUgICBMUENSX1ZSTUFfTFAwCSgxdWwgPDwgKDYzLTE1KSkKKyNkZWZpbmUgICBMUENSX1ZSTUFfTFAxCSgxdWwgPDwgKDYzLTE2KSkKKyNkZWZpbmUgICBMUENSX1JNTFMgICAgMHgxQzAwMDAwMCAgICAgIC8qIGltcGwgZGVwZW5kZW50IHJtbyBsaW1pdCBzZWwgKi8KKyNkZWZpbmUgICBMUENSX0lMRSAgICAgMHgwMjAwMDAwMCAgICAgIC8qICFIViBpcnFzIHNldCBNU1I6TEUgKi8KKyNkZWZpbmUgICBMUENSX1BFQ0UJMHgwMDAwNzAwMAkvKiBwb3dlcnNhdmUgZXhpdCBjYXVzZSBlbmFibGUgKi8KKyNkZWZpbmUgICAgIExQQ1JfUEVDRTAJMHgwMDAwNDAwMAkvKiBleHQuIGV4Y2VwdGlvbnMgY2FuIGNhdXNlIGV4aXQgKi8KKyNkZWZpbmUgICAgIExQQ1JfUEVDRTEJMHgwMDAwMjAwMAkvKiBkZWNyZW1lbnRlciBjYW4gY2F1c2UgZXhpdCAqLworI2RlZmluZSAgICAgTFBDUl9QRUNFMgkweDAwMDAxMDAwCS8qIG1hY2hpbmUgY2hlY2sgZXRjIGNhbiBjYXVzZSBleGl0ICovCisjZGVmaW5lICAgTFBDUl9NRVIJMHgwMDAwMDgwMAkvKiBNZWRpYXRlZCBFeHRlcm5hbCBFeGNlcHRpb24gKi8KKyNkZWZpbmUgICBMUENSX0xQRVMwICAgMHgwMDAwMDAwOCAgICAgIC8qIExQQVIgRW52IHNlbGVjdG9yIDAgKi8KKyNkZWZpbmUgICBMUENSX0xQRVMxICAgMHgwMDAwMDAwNCAgICAgIC8qIExQQVIgRW52IHNlbGVjdG9yIDEgKi8KKyNkZWZpbmUgICBMUENSX1JNSSAgICAgMHgwMDAwMDAwMiAgICAgIC8qIHJlYWwgbW9kZSBpcyBjYWNoZSBpbmhpYml0ICovCisjZGVmaW5lICAgTFBDUl9IRElDRSAgIDB4MDAwMDAwMDEgICAgICAvKiBIeXAgRGVjciBlbmFibGUgKEhWLFBSLEVFKSAqLworI2RlZmluZSBTUFJOX0xQSUQJMHgxM0YJLyogTG9naWNhbCBQYXJ0aXRpb24gSWRlbnRpZmllciAqLworI2RlZmluZQlTUFJOX0hNRVIJMHgxNTAJLyogSGFyZHdhcmUgbT8gZXJyb3IgcmVjb3ZlcnkgKi8KKyNkZWZpbmUJU1BSTl9ITUVFUgkweDE1MQkvKiBIYXJkd2FyZSBtPyBlbmFibGUgZXJyb3IgcmVjb3ZlcnkgKi8KKyNkZWZpbmUJU1BSTl9IRUlSCTB4MTUzCS8qIEh5cGVydmlzb3IgRW11bGF0ZWQgSW5zdHJ1Y3Rpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9UTEJJTkRFWFIJMHgxNTQJLyogUDcgVExCIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9UTEJWUE5SCTB4MTU1CS8qIFA3IFRMQiBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fVExCUlBOUgkweDE1NgkvKiBQNyBUTEIgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBTUFJOX1RMQkxQSURSCTB4MTU3CS8qIFA3IFRMQiBjb250cm9sIHJlZ2lzdGVyICovCiAjZGVmaW5lIFNQUk5fREJBVDBMCTB4MjE5CS8qIERhdGEgQkFUIDAgTG93ZXIgUmVnaXN0ZXIgKi8KICNkZWZpbmUgU1BSTl9EQkFUMFUJMHgyMTgJLyogRGF0YSBCQVQgMCBVcHBlciBSZWdpc3RlciAqLwogI2RlZmluZSBTUFJOX0RCQVQxTAkweDIxQgkvKiBEYXRhIEJBVCAxIExvd2VyIFJlZ2lzdGVyICovCkBAIC00MzQsMTYgKzQ3NywyMyBAQAogI2RlZmluZSBTUFJOX1NSUjAJMHgwMUEJLyogU2F2ZS9SZXN0b3JlIFJlZ2lzdGVyIDAgKi8KICNkZWZpbmUgU1BSTl9TUlIxCTB4MDFCCS8qIFNhdmUvUmVzdG9yZSBSZWdpc3RlciAxICovCiAjZGVmaW5lICAgU1JSMV9XQUtFTUFTSwkJMHgwMDM4MDAwMCAvKiByZWFzb24gZm9yIHdha2V1cCAqLwotI2RlZmluZSAgIFNSUjFfV0FLRVJFU0VUCTB4MDAzODAwMDAgLyogU3lzdGVtIHJlc2V0ICovCiAjZGVmaW5lICAgU1JSMV9XQUtFU1lTRVJSCTB4MDAzMDAwMDAgLyogU3lzdGVtIGVycm9yICovCiAjZGVmaW5lICAgU1JSMV9XQUtFRUUJCTB4MDAyMDAwMDAgLyogRXh0ZXJuYWwgaW50ZXJydXB0ICovCiAjZGVmaW5lICAgU1JSMV9XQUtFTVQJCTB4MDAyODAwMDAgLyogbXRjdHJsICovCisjZGVmaW5lCSAgU1JSMV9XQUtFSE1JCQkweDAwMjgwMDAwIC8qIEh5cGVydmlzb3IgbWFpbnRlbmFuY2UgKi8KICNkZWZpbmUgICBTUlIxX1dBS0VERUMJCTB4MDAxODAwMDAgLyogRGVjcmVtZW50ZXIgaW50ZXJydXB0ICovCiAjZGVmaW5lICAgU1JSMV9XQUtFVEhFUk0JMHgwMDEwMDAwMCAvKiBUaGVybWFsIG1hbmFnZW1lbnQgaW50ZXJydXB0ICovCisjZGVmaW5lCSAgU1JSMV9XQUtFUkVTRVQJMHgwMDEwMDAwMCAvKiBTeXN0ZW0gcmVzZXQgKi8KKyNkZWZpbmUJICBTUlIxX1dBS0VTVEFURQkweDAwMDMwMDAwIC8qIFBvd2Vyc2F2ZSBleGl0IG1hc2sgWzQ2OjQ3XSAqLworI2RlZmluZQkgIFNSUjFfV1NfREVFUEVTVAkweDAwMDMwMDAwIC8qIFNvbWUgcmVzb3VyY2VzIG5vdCBtYWludGFpbmVkLAorCQkJCQkgICogbWF5IG5vdCBiZSByZWNvdmVyYWJsZSAqLworI2RlZmluZQkgIFNSUjFfV1NfREVFUEVSCTB4MDAwMjAwMDAgLyogU29tZSByZXNvdXJjZXMgbm90IG1haW50YWluZWQgKi8KKyNkZWZpbmUJICBTUlIxX1dTX0RFRVAJCTB4MDAwMTAwMDAgLyogQWxsIHJlc291cmNlcyBtYWludGFpbmVkICovCiAjZGVmaW5lICAgU1JSMV9QUk9HRlBFCQkweDAwMTAwMDAwIC8qIEZsb2F0aW5nIFBvaW50IEVuYWJsZWQgKi8KICNkZWZpbmUgICBTUlIxX1BST0dQUklWCQkweDAwMDQwMDAwIC8qIFByaXZpbGVnZWQgaW5zdHJ1Y3Rpb24gKi8KICNkZWZpbmUgICBTUlIxX1BST0dUUkFQCQkweDAwMDIwMDAwIC8qIFRyYXAgKi8KICNkZWZpbmUgICBTUlIxX1BST0dBRERSCQkweDAwMDEwMDAwIC8qIFNSUjAgY29udGFpbnMgc3Vic2VxdWVudCBhZGRyICovCisKICNkZWZpbmUgU1BSTl9IU1JSMAkweDEzQQkvKiBTYXZlL1Jlc3RvcmUgUmVnaXN0ZXIgMCAqLwogI2RlZmluZSBTUFJOX0hTUlIxCTB4MTNCCS8qIFNhdmUvUmVzdG9yZSBSZWdpc3RlciAxICovCiAKQEAgLTY3MywxMiArNzIzLDE1IEBACiAgKiBTUFJHIHVzYWdlOgogICoKICAqIEFsbCA2NC1iaXQ6Ci0gKgktIFNQUkcxIHN0b3JlcyBQQUNBIHBvaW50ZXIKKyAqCS0gU1BSRzEgc3RvcmVzIFBBQ0EgcG9pbnRlciBleGNlcHQgNjQtYml0IHNlcnZlciBpbgorICogICAgICAgIEhWIG1vZGUgaW4gd2hpY2ggY2FzZSBpdCBpcyBIU1BSRzAKICAqCiAgKiA2NC1iaXQgc2VydmVyOgogICoJLSBTUFJHMCB1bnVzZWQgKHJlc2VydmVkIGZvciBIViBvbiBQb3dlcjQpCiAgKgktIFNQUkcyIHNjcmF0Y2ggZm9yIGV4Y2VwdGlvbiB2ZWN0b3JzCiAgKgktIFNQUkczIHVudXNlZCAodXNlciB2aXNpYmxlKQorICogICAgICAtIEhTUFJHMCBzdG9yZXMgUEFDQSBpbiBIViBtb2RlCisgKiAgICAgIC0gSFNQUkcxIHNjcmF0Y2ggZm9yICJIViIgZXhjZXB0aW9ucwogICoKICAqIDY0LWJpdCBlbWJlZGRlZAogICoJLSBTUFJHMCBnZW5lcmljIGV4Y2VwdGlvbiBzY3JhdGNoCkBAIC03NDEsNiArNzk0LDQxIEBACiAKICNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAogI2RlZmluZSBTUFJOX1NQUkdfU0NSQVRDSDAJU1BSTl9TUFJHMgorI2RlZmluZSBTUFJOX1NQUkdfSFBBQ0EJCVNQUk5fSFNQUkcwCisjZGVmaW5lIFNQUk5fU1BSR19IU0NSQVRDSDAJU1BSTl9IU1BSRzEKKworI2RlZmluZSBHRVRfUEFDQShyWCkJCQkJCVwKKwlCRUdJTl9GVFJfU0VDVElPTl9ORVNURUQoNjYpOwkJCVwKKwltZnNwcglyWCxTUFJOX1NQUkdfUEFDQTsJCQlcCisJRlRSX1NFQ1RJT05fRUxTRV9ORVNURUQoNjYpOwkJCVwKKwltZnNwcglyWCxTUFJOX1NQUkdfSFBBQ0E7CQkJXAorCUFMVF9GVFJfU0VDVElPTl9FTkRfTkVTVEVEX0lGQ0xSKENQVV9GVFJfSFZNT0RFXzIwNiwgNjYpCisKKyNkZWZpbmUgU0VUX1BBQ0EoclgpCQkJCQlcCisJQkVHSU5fRlRSX1NFQ1RJT05fTkVTVEVEKDY2KTsJCQlcCisJbXRzcHIJU1BSTl9TUFJHX1BBQ0Esclg7CQkJXAorCUZUUl9TRUNUSU9OX0VMU0VfTkVTVEVEKDY2KTsJCQlcCisJbXRzcHIJU1BSTl9TUFJHX0hQQUNBLHJYOwkJCVwKKwlBTFRfRlRSX1NFQ1RJT05fRU5EX05FU1RFRF9JRkNMUihDUFVfRlRSX0hWTU9ERV8yMDYsIDY2KQorCisjZGVmaW5lIEdFVF9TQ1JBVENIMChyWCkJCQkJXAorCUJFR0lOX0ZUUl9TRUNUSU9OX05FU1RFRCg2Nik7CQkJXAorCW1mc3ByCXJYLFNQUk5fU1BSR19TQ1JBVENIMDsJCQlcCisJRlRSX1NFQ1RJT05fRUxTRV9ORVNURUQoNjYpOwkJCVwKKwltZnNwcglyWCxTUFJOX1NQUkdfSFNDUkFUQ0gwOwkJCVwKKwlBTFRfRlRSX1NFQ1RJT05fRU5EX05FU1RFRF9JRkNMUihDUFVfRlRSX0hWTU9ERV8yMDYsIDY2KQorCisjZGVmaW5lIFNFVF9TQ1JBVENIMChyWCkJCQkJXAorCUJFR0lOX0ZUUl9TRUNUSU9OX05FU1RFRCg2Nik7CQkJXAorCW10c3ByCVNQUk5fU1BSR19TQ1JBVENIMCxyWDsJCQlcCisJRlRSX1NFQ1RJT05fRUxTRV9ORVNURUQoNjYpOwkJCVwKKwltdHNwcglTUFJOX1NQUkdfSFNDUkFUQ0gwLHJYOwkJCVwKKwlBTFRfRlRSX1NFQ1RJT05fRU5EX05FU1RFRF9JRkNMUihDUFVfRlRSX0hWTU9ERV8yMDYsIDY2KQorCisjZWxzZSAvKiBDT05GSUdfUFBDX0JPT0szU182NCAqLworI2RlZmluZSBHRVRfU0NSQVRDSDAoclgpCW1mc3ByCXJYLFNQUk5fU1BSR19TQ1JBVENIMAorI2RlZmluZSBTRVRfU0NSQVRDSDAoclgpCW10c3ByCVNQUk5fU1BSR19TQ1JBVENIMCxyWAorCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QUENfQk9PSzNFXzY0CkBAIC03NTAsNiArODM4LDEwIEBACiAjZGVmaW5lIFNQUk5fU1BSR19UTEJfRVhGUkFNRQlTUFJOX1NQUkcyCiAjZGVmaW5lIFNQUk5fU1BSR19UTEJfU0NSQVRDSAlTUFJOX1NQUkc2CiAjZGVmaW5lIFNQUk5fU1BSR19HRU5fU0NSQVRDSAlTUFJOX1NQUkcwCisKKyNkZWZpbmUgU0VUX1BBQ0EoclgpCW10c3ByCVNQUk5fU1BSR19QQUNBLHJYCisjZGVmaW5lIEdFVF9QQUNBKHJYKQltZnNwcglyWCxTUFJOX1NQUkdfUEFDQQorCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzMyCkBAIC04MDAsNiArODkyLDggQEAKICNkZWZpbmUgU1BSTl9TUFJHX1NDUkFUQ0gxCVNQUk5fU1BSRzEKICNlbmRpZgogCisKKwogLyoKICAqIEFuIG10ZnNmIGluc3RydWN0aW9uIHdpdGggdGhlIEwgYml0IHNldC4gT24gQ1BVcyB0aGF0IHN1cHBvcnQgdGhpcyBhCiAgKiBmdWxsIDY0Yml0cyBvZiBGUFNDUiBpcyByZXN0b3JlZCBhbmQgb24gb3RoZXIgQ1BVcyB0aGUgTCBiaXQgaXMgaWdub3JlZC4KQEAgLTg5NCw2ICs5ODgsOCBAQAogI2RlZmluZSBQVl9QT1dFUjVwCTB4MDAzQgogI2RlZmluZSBQVl9QT1dFUjcJMHgwMDNGCiAjZGVmaW5lIFBWXzk3MEZYCTB4MDAzQworI2RlZmluZSBQVl9QT1dFUjYJMHgwMDNFCisjZGVmaW5lIFBWX1BPV0VSNwkweDAwM0YKICNkZWZpbmUgUFZfNjMwCQkweDAwNDAKICNkZWZpbmUgUFZfNjMwcAkweDAwNDEKICNkZWZpbmUgUFZfOTcwTVAJMHgwMDQ0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2EyLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2EyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q1MmExMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfYTIuaApAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqICBSZWdpc3RlciBkZWZpbml0aW9ucyBzcGVjaWZpYyB0byB0aGUgQTIgY29yZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggQmVuLiBIZXJyZW5zY2htaWR0IChiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmcpLCBJQk0gQ29ycC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9fQVNNX1BPV0VSUENfUkVHX0EyX0hfXworI2RlZmluZSBfX0FTTV9QT1dFUlBDX1JFR19BMl9IX18KKworI2RlZmluZSBTUFJOX1RFTlNSCTB4MWI1CisjZGVmaW5lIFNQUk5fVEVOUwkweDFiNgkvKiBUaHJlYWQgRU5hYmxlIFNldCAqLworI2RlZmluZSBTUFJOX1RFTkMJMHgxYjcJLyogVGhyZWFkIEVOYWJsZSBDbGVhciAqLworCisjZGVmaW5lIFNQUk5fQTJfQ0NSMAkweDNmMAkvKiBDb3JlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMCAqLworI2RlZmluZSBTUFJOX0EyX0NDUjEJMHgzZjEJLyogQ29yZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgU1BSTl9BMl9DQ1IyCTB4M2YyCS8qIENvcmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyICovCisjZGVmaW5lIFNQUk5fTU1VQ1IwCTB4M2ZjCS8qIE1NVSBDb250cm9sIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgU1BSTl9NTVVDUjEJMHgzZmQJLyogTU1VIENvbnRyb2wgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBTUFJOX01NVUNSMgkweDNmZQkvKiBNTVUgQ29udHJvbCBSZWdpc3RlciAyICovCisjZGVmaW5lIFNQUk5fTU1VQ1IzCTB4M2ZmCS8qIE1NVSBDb250cm9sIFJlZ2lzdGVyIDMgKi8KKworI2RlZmluZSBTUFJOX0lBUgkweDM3MgorCisjZGVmaW5lIFNQUk5fSVVDUjAJMHgzZjMKKyNkZWZpbmUgSVVDUjBfSUNCSV9BQ0sJMHgxMDAwCisKKyNkZWZpbmUgU1BSTl9YVUNSMAkweDNmNgkvKiBFeGVjdXRpb24gVW5pdCBDb25maWcgUmVnaXN0ZXIgMCAqLworCisjZGVmaW5lIEEyX0lFUkFUX1NJWkUJMTYKKyNkZWZpbmUgQTJfREVSQVRfU0laRQkzMgorCisvKiBBMiBNTVVDUjAgYml0cyAqLworI2RlZmluZSBNTVVDUjBfRUNMCTB4ODAwMDAwMDAJLyogRXh0ZW5kZWQgQ2xhc3MgZm9yIFRMQiBmaWxscyAqLworI2RlZmluZSBNTVVDUjBfVElEX05aCTB4NDAwMDAwMDAJLyogVElEIGlzIG5vbi16ZXJvICovCisjZGVmaW5lIE1NVUNSMF9UUwkweDEwMDAwMDAwCS8qIFRyYW5zbGF0aW9uIHNwYWNlIGZvciBUTEIgZmlsbHMgKi8KKyNkZWZpbmUgTU1VQ1IwX1RHUwkweDIwMDAwMDAwCS8qIEd1ZXN0IHNwYWNlIGZvciBUTEIgZmlsbHMgKi8KKyNkZWZpbmUgTU1VQ1IwX1RMQlNFTAkweDBjMDAwMDAwCS8qIFRMQiBvciBFUkFUIHRhcmdldCBmb3IgVExCIGZpbGxzICovCisjZGVmaW5lIE1NVUNSMF9UTEJTRUxfVQkweDAwMDAwMDAwCS8qICBUTEJTRUwgPSBVVExCICovCisjZGVmaW5lIE1NVUNSMF9UTEJTRUxfSQkweDA4MDAwMDAwCS8qICBUTEJTRUwgPSBJLUVSQVQgKi8KKyNkZWZpbmUgTU1VQ1IwX1RMQlNFTF9ECTB4MGMwMDAwMDAJLyogIFRMQlNFTCA9IEQtRVJBVCAqLworI2RlZmluZSBNTVVDUjBfTE9DS1NSU0gJMHgwMjAwMDAwMAkvKiBVc2UgVExCIGxvY2sgb24gdGxic3guICovCisjZGVmaW5lIE1NVUNSMF9USURfTUFTSwkweDAwMDAwMGZmCS8qIFRJRCBmaWVsZCAqLworCisvKiBBMiBNTVVDUjEgYml0cyAqLworI2RlZmluZSBNTVVDUjFfSVJSRQkJMHg4MDAwMDAwMAkvKiBJLUVSQVQgcm91bmQgcm9iaW4gZW5hYmxlICovCisjZGVmaW5lIE1NVUNSMV9EUlJFCQkweDQwMDAwMDAwCS8qIEQtRVJBVCByb3VuZCByb2JpbiBlbmFibGUgKi8KKyNkZWZpbmUgTU1VQ1IxX1JFRQkJMHgyMDAwMDAwMAkvKiBSZWZlcmVuY2UgRXhjZXB0aW9uIEVuYWJsZSovCisjZGVmaW5lIE1NVUNSMV9DRUUJCTB4MTAwMDAwMDAJLyogQ2hhbmdlIGV4Y2VwdGlvbiBlbmFibGUgKi8KKyNkZWZpbmUgTU1VQ1IxX0NTSU5WX0FMTAkweDAwMDAwMDAwCS8qIEludmFsIEVSQVQgb24gYWxsIENTIGV2dHMgKi8KKyNkZWZpbmUgTU1VQ1IxX0NTSU5WX05JU1lOQwkweDA0MDAwMDAwCS8qIEludmFsIEVSQVQgb24gYWxsIGV4IGlzeW5jKi8KKyNkZWZpbmUgTU1VQ1IxX0NTSU5WX05FVkVSCTB4MGMwMDAwMDAJLyogRG9uJ3QgaW52YWwgRVJBVCBvbiBDUyAqLworI2RlZmluZSBNTVVDUjFfSUNUSUQJCTB4MDAwODAwMDAJLyogSUVSQVQgY2xhc3MgZmllbGQgYXMgVElEICovCisjZGVmaW5lIE1NVUNSMV9JVFRJRAkJMHgwMDA0MDAwMAkvKiBJRVJBVCB0aGRpZCBmaWVsZCBhcyBUSUQgKi8KKyNkZWZpbmUgTU1VQ1IxX0RDVElECQkweDAwMDIwMDAwCS8qIERFUkFUIGNsYXNzIGZpZWxkIGFzIFRJRCAqLworI2RlZmluZSBNTVVDUjFfRFRUSUQJCTB4MDAwMTAwMDAJLyogREVSQVQgdGhkaWQgZmllbGQgYXMgVElEICovCisjZGVmaW5lIE1NVUNSMV9EQ0NECQkweDAwMDA4MDAwCS8qIERFUkFUIGNsYXNzIGlnbm9yZSAqLworI2RlZmluZSBNTVVDUjFfVExCV0VfQklOVgkweDAwMDA0MDAwCS8qIGJhY2sgaW52YWxpZGF0ZSBvbiB0bGJ3ZSAqLworCisvKiBBMiBNTVVDUjIgYml0cyAqLworI2RlZmluZSBNTVVDUjJfUFNTRUxfU0hJRlQJNAorCisvKiBBMiBNTVVDUjMgYml0cyAqLworI2RlZmluZSBNTVVDUjNfVEhJRAkJMHgwMDAwMDAwZgkvKiBUaHJlYWQgSUQgKi8KKworLyogKioqIEVSQVQgVExCIGJpdHMgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVExCMF9FUE5fTUFTSwkJQVNNX0NPTlNUKDB4ZmZmZmZmZmZmZmZmZjAwMCkKKyNkZWZpbmUgVExCMF9DTEFTU19NQVNLCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwYzAwKQorI2RlZmluZSBUTEIwX0NMQVNTXzAwCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMDAwKQorI2RlZmluZSBUTEIwX0NMQVNTXzAxCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwNDAwKQorI2RlZmluZSBUTEIwX0NMQVNTXzEwCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwODAwKQorI2RlZmluZSBUTEIwX0NMQVNTXzExCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwYzAwKQorI2RlZmluZSBUTEIwX1YJCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMjAwKQorI2RlZmluZSBUTEIwX1gJCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMTAwKQorI2RlZmluZSBUTEIwX1NJWkVfTUFTSwkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMDBmMCkKKyNkZWZpbmUgVExCMF9TSVpFXzRLCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMDEwKQorI2RlZmluZSBUTEIwX1NJWkVfNjRLCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMDMwKQorI2RlZmluZSBUTEIwX1NJWkVfMU0JCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMDAwNTApCisjZGVmaW5lIFRMQjBfU0laRV8xNk0JCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMDAwNzApCisjZGVmaW5lIFRMQjBfU0laRV8xRwkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMDBhMCkKKyNkZWZpbmUgVExCMF9USERJRF9NQVNLCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMDBmKQorI2RlZmluZSBUTEIwX1RIRElEXzAJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMDAwMDEpCisjZGVmaW5lIFRMQjBfVEhESURfMQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMDAwMikKKyNkZWZpbmUgVExCMF9USERJRF8yCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMDA0KQorI2RlZmluZSBUTEIwX1RIRElEXzMJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMDAwMDgpCisjZGVmaW5lIFRMQjBfVEhESURfQUxMCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMDBmKQorCisjZGVmaW5lIFRMQjFfUkVTVkFUVFIJCUFTTV9DT05TVCgweDAwZjAwMDAwMDAwMDAwMDApCisjZGVmaW5lIFRMQjFfVTAJCQlBU01fQ09OU1QoMHgwMDA4MDAwMDAwMDAwMDAwKQorI2RlZmluZSBUTEIxX1UxCQkJQVNNX0NPTlNUKDB4MDAwNDAwMDAwMDAwMDAwMCkKKyNkZWZpbmUgVExCMV9VMgkJCUFTTV9DT05TVCgweDAwMDIwMDAwMDAwMDAwMDApCisjZGVmaW5lIFRMQjFfVTMJCQlBU01fQ09OU1QoMHgwMDAxMDAwMDAwMDAwMDAwKQorI2RlZmluZSBUTEIxX1IJCQlBU01fQ09OU1QoMHgwMDAwODAwMDAwMDAwMDAwKQorI2RlZmluZSBUTEIxX0MJCQlBU01fQ09OU1QoMHgwMDAwNDAwMDAwMDAwMDAwKQorI2RlZmluZSBUTEIxX1JQTl9NQVNLCQlBU01fQ09OU1QoMHgwMDAwMDNmZmZmZmZmMDAwKQorI2RlZmluZSBUTEIxX1cJCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwODAwKQorI2RlZmluZSBUTEIxX0kJCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwNDAwKQorI2RlZmluZSBUTEIxX00JCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMjAwKQorI2RlZmluZSBUTEIxX0cJCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMTAwKQorI2RlZmluZSBUTEIxX0UJCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMDgwKQorI2RlZmluZSBUTEIxX1ZGCQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMDA0MCkKKyNkZWZpbmUgVExCMV9VWAkJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMDAwMjApCisjZGVmaW5lIFRMQjFfU1gJCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMDEwKQorI2RlZmluZSBUTEIxX1VXCQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMDAwOCkKKyNkZWZpbmUgVExCMV9TVwkJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMDAwMDQpCisjZGVmaW5lIFRMQjFfVVIJCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMDAyKQorI2RlZmluZSBUTEIxX1NSCQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMDAwMSkKKworI2lmZGVmIENPTkZJR19QUENfRUFSTFlfREVCVUdfV1NQCisjZGVmaW5lIFdTUF9VQVJUX1BIWVMJMHhmZmMwMDBjMDAwCisvKiBUaGlzIG5lZWRzIHRvIGJlIGNhcmVmdWwgY2hvc2VuIHRvIGhpdCBhICEwIGNvbmdydWVuY2UgY2xhc3MKKyAqIGluIHRoZSBUTEIgc2luY2Ugd2UgYm9sdCBpdCBpbiB3YXkgMywgd2hpY2ggaXMgYWxyZWFkeSBvY2N1cGllZAorICogYnkgb3VyIGxpbmVhciBtYXBwaW5nIHByaW1hcnkgYm9sdGVkIGVudHJ5IGluIENDIDAuCisgKi8KKyNkZWZpbmUgV1NQX1VBUlRfVklSVAkweGYwMDAwMDAwMDAwMDEwMDAKKyNlbmRpZgorCisvKiBBMiBlcmF0aXZheCBhdHRyaWJ1dGVzIGRlZmluaXRpb25zICovCisjZGVmaW5lIEVSQVRJVkFYX1JTX0lTX0FMTAkJMHgwMDAKKyNkZWZpbmUgRVJBVElWQVhfUlNfSVNfVElECQkweDA0MAorI2RlZmluZSBFUkFUSVZBWF9SU19JU19DTEFTUwkJMHgwODAKKyNkZWZpbmUgRVJBVElWQVhfUlNfSVNfRlVMTE1BVENICTB4MGMwCisjZGVmaW5lIEVSQVRJVkFYX0NMQVNTXzAwCQkweDAwMAorI2RlZmluZSBFUkFUSVZBWF9DTEFTU18wMQkJMHgwMTAKKyNkZWZpbmUgRVJBVElWQVhfQ0xBU1NfMTAJCTB4MDIwCisjZGVmaW5lIEVSQVRJVkFYX0NMQVNTXzExCQkweDAzMAorI2RlZmluZSBFUkFUSVZBWF9QU0laRV80SwkJKFRMQl9QU0laRV80SyA+PiAxKQorI2RlZmluZSBFUkFUSVZBWF9QU0laRV82NEsJCShUTEJfUFNJWkVfNjRLID4+IDEpCisjZGVmaW5lIEVSQVRJVkFYX1BTSVpFXzFNCQkoVExCX1BTSVpFXzFNID4+IDEpCisjZGVmaW5lIEVSQVRJVkFYX1BTSVpFXzE2TQkJKFRMQl9QU0laRV8xNk0gPj4gMSkKKyNkZWZpbmUgRVJBVElWQVhfUFNJWkVfMUcJCShUTEJfUFNJWkVfMUcgPj4gMSkKKworLyogQTIgZXJhdGlseCBhdHRyaWJ1dGVzIGRlZmluaXRpb25zICovCisjZGVmaW5lIEVSQVRJTFhfVF9BTEwJCQkwCisjZGVmaW5lIEVSQVRJTFhfVF9USUQJCQkxCisjZGVmaW5lIEVSQVRJTFhfVF9UR1MJCQkyCisjZGVmaW5lIEVSQVRJTFhfVF9GVUxMTUFUQ0gJCTMKKyNkZWZpbmUgRVJBVElMWF9UX0NMQVNTMAkJNAorI2RlZmluZSBFUkFUSUxYX1RfQ0xBU1MxCQk1CisjZGVmaW5lIEVSQVRJTFhfVF9DTEFTUzIJCTYKKyNkZWZpbmUgRVJBVElMWF9UX0NMQVNTMwkJNworCisvKiBYVUNSMCBiaXRzICovCisjZGVmaW5lIFhVQ1IwX1RSQUNFX1VNX1QwCQkweDQwMDAwMDAwCS8qIFRocmVhZCAwICovCisjZGVmaW5lIFhVQ1IwX1RSQUNFX1VNX1QxCQkweDIwMDAwMDAwCS8qIFRocmVhZCAxICovCisjZGVmaW5lIFhVQ1IwX1RSQUNFX1VNX1QyCQkweDEwMDAwMDAwCS8qIFRocmVhZCAyICovCisjZGVmaW5lIFhVQ1IwX1RSQUNFX1VNX1QzCQkweDA4MDAwMDAwCS8qIFRocmVhZCAzICovCisKKy8qIEEyIENDUjAgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQTJfQ0NSMF9QTUVfRElTQUJMRUQJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQTJfQ0NSMF9QTUVfU0xFRVAJCTB4NDAwMDAwMDAKKyNkZWZpbmUgQTJfQ0NSMF9QTUVfUlZXCQkJMHg4MDAwMDAwMAorI2RlZmluZSBBMl9DQ1IwX1BNRV9ESVNBQkxFRDIJCTB4YzAwMDAwMDAKKworLyogQTIgQ0NSMiByZWdpc3RlciAqLworI2RlZmluZSBBMl9DQ1IyX0VSQVRfT05MWV9NT0RFCQkweDAwMDAwMDAxCisjZGVmaW5lIEEyX0NDUjJfRU5BQkxFX0lDU1dYCQkweDAwMDAwMDAyCisjZGVmaW5lIEEyX0NDUjJfRU5BQkxFX1BDCQkweDIwMDAwMDAwCisjZGVmaW5lIEEyX0NDUjJfRU5BQkxFX1RSQUNFCQkweDQwMDAwMDAwCisKKyNlbmRpZiAvKiBfX0FTTV9QT1dFUlBDX1JFR19BMl9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfYm9va2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfYm9va2UuaAppbmRleCBiMzE2Nzk0Li4wZjBhZDlmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2Jvb2tlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19ib29rZS5oCkBAIC0yNywxMCArMjcsMTIgQEAKICNkZWZpbmUgTVNSX0NNCQkoMTw8MzEpIC8qIENvbXB1dGF0aW9uIE1vZGUgKDA9MzItYml0LCAxPTY0LWJpdCkgKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX1BQQ19CT09LM0VfNjQpCisjZGVmaW5lIE1TUl82NEJJVAlNU1JfQ00KKwogI2RlZmluZSBNU1JfCQlNU1JfTUUgfCBNU1JfQ0UKLSNkZWZpbmUgTVNSX0tFUk5FTCAgICAgIE1TUl8gfCBNU1JfQ00KKyNkZWZpbmUgTVNSX0tFUk5FTAlNU1JfIHwgTVNSXzY0QklUCiAjZGVmaW5lIE1TUl9VU0VSMzIJTVNSXyB8IE1TUl9QUiB8IE1TUl9FRSB8IE1TUl9ERQotI2RlZmluZSBNU1JfVVNFUjY0CU1TUl9VU0VSMzIgfCBNU1JfQ00gfCBNU1JfREUKKyNkZWZpbmUgTVNSX1VTRVI2NAlNU1JfVVNFUjMyIHwgTVNSXzY0QklUCiAjZWxpZiBkZWZpbmVkIChDT05GSUdfNDB4KQogI2RlZmluZSBNU1JfS0VSTkVMCShNU1JfTUV8TVNSX1JJfE1TUl9JUnxNU1JfRFJ8TVNSX0NFKQogI2RlZmluZSBNU1JfVVNFUgkoTVNSX0tFUk5FTHxNU1JfUFJ8TVNSX0VFKQpAQCAtODEsNiArODMsMTAgQEAKICNkZWZpbmUgU1BSTl9JVk9SMTMJMHgxOUQJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgMTMgKi8KICNkZWZpbmUgU1BSTl9JVk9SMTQJMHgxOUUJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgMTQgKi8KICNkZWZpbmUgU1BSTl9JVk9SMTUJMHgxOUYJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgMTUgKi8KKyNkZWZpbmUgU1BSTl9JVk9SMzgJMHgxQjAJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgMzggKi8KKyNkZWZpbmUgU1BSTl9JVk9SMzkJMHgxQjEJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgMzkgKi8KKyNkZWZpbmUgU1BSTl9JVk9SNDAJMHgxQjIJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgNDAgKi8KKyNkZWZpbmUgU1BSTl9JVk9SNDEJMHgxQjMJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgNDEgKi8KICNkZWZpbmUgU1BSTl9TUEVGU0NSCTB4MjAwCS8qIFNQRSAmIEVtYmVkZGVkIEZQIFN0YXR1cyAmIENvbnRyb2wgKi8KICNkZWZpbmUgU1BSTl9CQkVBUgkweDIwMQkvKiBCcmFuY2ggQnVmZmVyIEVudHJ5IEFkZHJlc3MgUmVnaXN0ZXIgKi8KICNkZWZpbmUgU1BSTl9CQlRBUgkweDIwMgkvKiBCcmFuY2ggQnVmZmVyIFRhcmdldCBBZGRyZXNzIFJlZ2lzdGVyICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcnRhcy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3J0YXMuaAppbmRleCA5YTExOTNlLi41ODYyNWQxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcnRhcy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ydGFzLmgKQEAgLTE1OCw3ICsxNTgsNTAgQEAKIAl1bnNpZ25lZCBsb25nIHRhcmdldDo0OwkJCS8qIFRhcmdldCBvZiBmYWlsZWQgb3BlcmF0aW9uICovCiAJdW5zaWduZWQgbG9uZyB0eXBlOjg7CQkJLyogR2VuZXJhbCBldmVudCBvciBlcnJvciovCiAJdW5zaWduZWQgbG9uZyBleHRlbmRlZF9sb2dfbGVuZ3RoOjMyOwkvKiBsZW5ndGggaW4gYnl0ZXMgKi8KLQl1bnNpZ25lZCBjaGFyIGJ1ZmZlclsxXTsKKwl1bnNpZ25lZCBjaGFyIGJ1ZmZlclsxXTsJCS8qIFN0YXJ0IG9mIGV4dGVuZGVkIGxvZyAqLworCQkJCQkJLyogVmFyaWFibGUgbGVuZ3RoLiAgICAgICovCit9OworCisjZGVmaW5lIFJUQVNfVjZFWFRfTE9HX0ZPUk1BVF9FVkVOVF9MT0cJMTQKKworI2RlZmluZSBSVEFTX1Y2RVhUX0NPTVBBTllfSURfSUJNCSgoJ0knIDw8IDI0KSB8ICgnQicgPDwgMTYpIHwgKCdNJyA8PCA4KSkKKworLyogUlRBUyBnZW5lcmFsIGV4dGVuZGVkIGV2ZW50IGxvZywgVmVyc2lvbiA2LiBUaGUgZXh0ZW5kZWQgbG9nIHN0YXJ0cworICogZnJvbSAiYnVmZmVyIiBmaWVsZCBvZiBzdHJ1Y3QgcnRhc19lcnJvcl9sb2cgZGVmaW5lZCBhYm92ZS4KKyAqLworc3RydWN0IHJ0YXNfZXh0X2V2ZW50X2xvZ192NiB7CisJLyogQnl0ZSAwICovCisJdWludDMyX3QgbG9nX3ZhbGlkOjE7CQkvKiAxOkxvZyB2YWxpZCAqLworCXVpbnQzMl90IHVucmVjb3ZlcmFibGVfZXJyb3I6MTsJLyogMTpVbnJlY292ZXJhYmxlIGVycm9yICovCisJdWludDMyX3QgcmVjb3ZlcmFibGVfZXJyb3I6MTsJLyogMTpyZWNvdmVyYWJsZSAoY29ycmVjdGFibGUJKi8KKwkJCQkJLyogICBvciBzdWNjZXNzZnVsbHkgcmV0cmllZCkJKi8KKwl1aW50MzJfdCBkZWdyYWRlZF9vcGVyYXRpb246MTsJLyogMTpVbnJlY292ZXJhYmxlIGVyciwgYnlwYXNzZWQqLworCQkJCQkvKiAgIC0gZGVncmFkZWQgb3BlcmF0aW9uIChlLmcuCSovCisJCQkJCS8qICAgQ1BVIG9yIG1lbSB0YWtlbiBvZmYtbGluZSkJKi8KKwl1aW50MzJfdCBwcmVkaWN0aXZlX2Vycm9yOjE7CisJdWludDMyX3QgbmV3X2xvZzoxOwkJLyogMToiTmV3IiBsb2cgKEFsd2F5cyAxIGZvcgkqLworCQkJCQkvKiAgIGRhdGEgcmV0dXJuZWQgZnJvbSBSVEFTCSovCisJdWludDMyX3QgYmlnX2VuZGlhbjoxOwkJLyogMTogQmlnIGVuZGlhbiAqLworCXVpbnQzMl90IDoxOwkJCS8qIHJlc2VydmVkICovCisJLyogQnl0ZSAxICovCisJdWludDMyX3QgOjg7CQkJLyogcmVzZXJ2ZWQgKi8KKwkvKiBCeXRlIDIgKi8KKwl1aW50MzJfdCBwb3dlcnBjX2Zvcm1hdDoxOwkvKiBTZXQgdG8gMSAoaW5kaWNhdGluZyBsb2cgaXMJKi8KKwkJCQkJLyogaW4gUG93ZXJQQyBmb3JtYXQJCSovCisJdWludDMyX3QgOjM7CQkJLyogcmVzZXJ2ZWQgKi8KKwl1aW50MzJfdCBsb2dfZm9ybWF0OjQ7CQkvKiBMb2cgZm9ybWF0IGluZGljYXRvci4gRGVmaW5lCSovCisJCQkJCS8qIGZvcm1hdCB1c2VkIGZvciBieXRlIDEyLTIwNDcJKi8KKwkvKiBCeXRlIDMgKi8KKwl1aW50MzJfdCA6ODsJCQkvKiByZXNlcnZlZCAqLworCS8qIEJ5dGUgNC0xMSAqLworCXVpbnQ4X3QgcmVzZXJ2ZWRbOF07CQkvKiByZXNlcnZlZCAqLworCS8qIEJ5dGUgMTItMTUgKi8KKwl1aW50MzJfdCBjb21wYW55X2lkOwkJLyogQ29tcGFueSBJRCBvZiB0aGUgY29tcGFueQkqLworCQkJCQkvKiB0aGF0IGRlZmluZXMgdGhlIGZvcm1hdCBmb3IJKi8KKwkJCQkJLyogdGhlIHZlbmRvciBzcGVjaWZpYyBsb2cgdHlwZQkqLworCS8qIEJ5dGUgMTYtZW5kIG9mIGxvZyAqLworCXVpbnQ4X3QgdmVuZG9yX2xvZ1sxXTsJCS8qIFN0YXJ0IG9mIHZlbmRvciBzcGVjaWZpYyBsb2cJKi8KKwkJCQkJLyogVmFyaWFibGUgbGVuZ3RoLgkJKi8KIH07CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc2NvbS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Njb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2FiZmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Njb20uaApAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIEJlbmphbWluIEhlcnJlbnNjaG1pZHQsIElCTSBDb3JwCisgKiAgICAgICAgICAgICAgICA8YmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnPgorICogICAgIGFuZCAgICAgICAgRGF2aWQgR2lic29uLCBJQk0gQ29ycG9yYXRpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7ICB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlCisgKiAgIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07ICBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfQVNNX1BPV0VSUENfU0NPTV9ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19TQ09NX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaWZkZWYgQ09ORklHX1BQQ19TQ09NCisKKy8qCisgKiBUaGUgU0NPTSBidXMgaXMgYSBzaWRlYmFuZCBidXMgdXNlZCBmb3IgYWNjZXNzaW5nIHZhcmlvdXMgaW50ZXJuYWwKKyAqIHJlZ2lzdGVycyBvZiB0aGUgcHJvY2Vzc29yIG9yIHRoZSBjaGlwc2V0LiBUaGUgaW1wbGVtZW50YXRpb24gZGV0YWlscworICogZGlmZmVyIGJldHdlZW4gcHJvY2Vzc29ycyBhbmQgcGxhdGZvcm1zLCBhbmQgdGhlIGFjY2VzcyBtZXRob2QgYXMKKyAqIHdlbGwuCisgKgorICogVGhpcyBBUEkgYWxsb3dzIHRvICJtYXAiIHJhbmdlcyBvZiBTQ09NIHJlZ2lzdGVyIG51bWJlcnMgYXNzb2NpYXRlZAorICogd2l0aCBhIGdpdmVuIFNDT00gY29udHJvbGxlci4gVGhlIGxhdGVyIG11c3QgYmUgcmVwcmVzZW50ZWQgYnkgYQorICogZGV2aWNlIG5vZGUsIHRob3VnaCBzb21lIGltcGxlbWVudGF0aW9ucyBtaWdodCBzdXBwb3J0IE5VTEwgaWYgdGhlcmUKKyAqIGlzIG5vIHBvc3NpYmxlIGFtYmlndWl0eQorICoKKyAqIFRoZW4sIHNjb21fcmVhZC9zY29tX3dyaXRlIGNhbiBiZSB1c2VkIHRvIGFjY2Vzc2VzIHJlZ2lzdGVycyBpbnNpZGUKKyAqIHRoYXQgcmFuZ2UuIFRoZSBhcmd1bWVudCBwYXNzZWQgaXMgYSByZWdpc3RlciBudW1iZXIgcmVsYXRpdmUgdG8KKyAqIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJhbmdlIG1hcHBlZC4KKyAqLworCit0eXBlZGVmIHZvaWQgKnNjb21fbWFwX3Q7CisKKy8qIFZhbHVlIGZvciBhbiBpbnZhbGlkIFNDT00gbWFwICovCisjZGVmaW5lIFNDT01fTUFQX0lOVkFMSUQJKE5VTEwpCisKKy8qIFRoZSBzY29tX2NvbnRyb2xsZXIgZGF0YSBzdHJ1Y3R1cmUgaXMgd2hhdCB0aGUgcGxhdGZvcm0gcGFzc2VzCisgKiB0byB0aGUgY29yZSBjb2RlIGluIHNjb21faW5pdCwgaXQgcHJvdmlkZXMgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbgorICogb2YgYWxsIHRoZSBTQ09NIGZ1bmN0aW9ucworICovCitzdHJ1Y3Qgc2NvbV9jb250cm9sbGVyIHsKKwlzY29tX21hcF90ICgqbWFwKShzdHJ1Y3QgZGV2aWNlX25vZGUgKmN0cmxfZGV2LCB1NjQgcmVnLCB1NjQgY291bnQpOworCXZvaWQgKCp1bm1hcCkoc2NvbV9tYXBfdCBtYXApOworCisJdTY0ICgqcmVhZCkoc2NvbV9tYXBfdCBtYXAsIHUzMiByZWcpOworCXZvaWQgKCp3cml0ZSkoc2NvbV9tYXBfdCBtYXAsIHUzMiByZWcsIHU2NCB2YWx1ZSk7Cit9OworCitleHRlcm4gY29uc3Qgc3RydWN0IHNjb21fY29udHJvbGxlciAqc2NvbV9jb250cm9sbGVyOworCisvKioKKyAqIHNjb21faW5pdCAtIEluaXRpYWxpemUgdGhlIFNDT00gYmFja2VuZCwgY2FsbGVkIGJ5IHRoZSBwbGF0Zm9ybQorICogQGNvbnRyb2xsZXI6IFRoZSBwbGF0Zm9ybSBTQ09NIGNvbnRyb2xsZXIKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNjb21faW5pdChjb25zdCBzdHJ1Y3Qgc2NvbV9jb250cm9sbGVyICpjb250cm9sbGVyKQoreworCXNjb21fY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Cit9CisKKy8qKgorICogc2NvbV9tYXBfb2sgLSBUZXN0IGlzIGEgU0NPTSBtYXBwaW5nIGlzIHN1Y2Nlc3NmdWwKKyAqIEBtYXA6IFRoZSByZXN1bHQgb2Ygc2NvbV9tYXAgdG8gdGVzdAorICovCitzdGF0aWMgaW5saW5lIGludCBzY29tX21hcF9vayhzY29tX21hcF90IG1hcCkKK3sKKwlyZXR1cm4gbWFwICE9IFNDT01fTUFQX0lOVkFMSUQ7Cit9CisKKy8qKgorICogc2NvbV9tYXAgLSBNYXAgYSBibG9jayBvZiBTQ09NIHJlZ2lzdGVycworICogQGN0cmxfZGV2OiBEZXZpY2Ugbm9kZSBvZiB0aGUgU0NPTSBjb250cm9sbGVyCisgKiAgICAgICAgICAgIHNvbWUgaW1wbGVtZW50YXRpb25zIGFsbG93IE5VTEwgaGVyZQorICogQHJlZzogZmlyc3QgU0NPTSByZWdpc3RlciB0byBtYXAKKyAqIEBjb3VudDogTnVtYmVyIG9mIFNDT00gcmVnaXN0ZXJzIHRvIG1hcAorICovCisKK3N0YXRpYyBpbmxpbmUgc2NvbV9tYXBfdCBzY29tX21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKmN0cmxfZGV2LAorCQkJCSAgdTY0IHJlZywgdTY0IGNvdW50KQoreworCXJldHVybiBzY29tX2NvbnRyb2xsZXItPm1hcChjdHJsX2RldiwgcmVnLCBjb3VudCk7Cit9CisKKy8qKgorICogc2NvbV9maW5kX3BhcmVudCAtIEZpbmQgdGhlIFNDT00gY29udHJvbGxlciBmb3IgYSBkZXZpY2UKKyAqIEBkZXY6IE9GIG5vZGUgb2YgdGhlIGRldmljZQorICoKKyAqIFRoaXMgaXMgbm90IG1lYW50IGZvciBnZW5lcmFsIHVzYWdlLCBidXQgaW4gY29tYmluYXRpb24gd2l0aAorICogc2NvbV9tYXAoKSBhbGxvd3MgdG8gbWFwIHJlZ2lzdGVycyBub3QgcmVwcmVzZW50ZWQgYnkgdGhlCisgKiBkZXZpY2Ugb3duIHNjb20tcmVnIHByb3BlcnR5LiBVc2VmdWwgZm9yIGFwcGx5aW5nIEhXIHdvcmthcm91bmRzCisgKiBvbiB0aGluZ3Mgbm90IHByb3Blcmx5IHJlcHJlc2VudGVkIGluIHRoZSBkZXZpY2UtdHJlZSBmb3IgZXhhbXBsZS4KKyAqLworc3RydWN0IGRldmljZV9ub2RlICpzY29tX2ZpbmRfcGFyZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2KTsKKworCisvKioKKyAqIHNjb21fbWFwX2RldmljZSAtIE1hcCBhIGRldmljZSdzIGJsb2NrIG9mIFNDT00gcmVnaXN0ZXJzCisgKiBAZGV2OiBPRiBub2RlIG9mIHRoZSBkZXZpY2UKKyAqIEBpbmRleDogUmVnaXN0ZXIgYmFuayBpbmRleCAoaW5kZXggaW4gInNjb20tcmVnIiBwcm9wZXJ0eSkKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgdXNlIHRoZSBkZXZpY2UtdHJlZSBiaW5kaW5nIGZvciBTQ09NIHdoaWNoCisgKiBpcyB0byBmb2xsb3cgInNjb20tcGFyZW50IiBwcm9wZXJ0aWVzIHVudGlsIGl0IGZpbmRzIGEgbm9kZSB3aXRoCisgKiBhICJzY29tLWNvbnRyb2xsZXIiIHByb3BlcnR5IHRvIGZpbmQgdGhlIGNvbnRyb2xsZXIuIEl0IHdpbGwgdGhlbgorICogdXNlIHRoZSAic2NvbS1yZWciIHByb3BlcnR5IHdoaWNoIGlzIG1hZGUgb2YgcmVnL2NvdW50IHBhaXJzLAorICogZWFjaCBvZiB0aGVtIGhhdmluZyBhIHNpemUgZGVmaW5lZCBieSB0aGUgY29udHJvbGxlcidzICNzY29tLWNlbGxzCisgKiBwcm9wZXJ0eQorICovCitleHRlcm4gc2NvbV9tYXBfdCBzY29tX21hcF9kZXZpY2Uoc3RydWN0IGRldmljZV9ub2RlICpkZXYsIGludCBpbmRleCk7CisKKworLyoqCisgKiBzY29tX3VubWFwIC0gVW5tYXAgYSBibG9jayBvZiBTQ09NIHJlZ2lzdGVycworICogQG1hcDogUmVzdWx0IG9mIHNjb21fbWFwIGlzIHRvIGJlIHVubWFwcGVkCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzY29tX3VubWFwKHNjb21fbWFwX3QgbWFwKQoreworCWlmIChzY29tX21hcF9vayhtYXApKQorCQlzY29tX2NvbnRyb2xsZXItPnVubWFwKG1hcCk7Cit9CisKKy8qKgorICogc2NvbV9yZWFkIC0gUmVhZCBhIFNDT00gcmVnaXN0ZXIKKyAqIEBtYXA6IFJlc3VsdCBvZiBzY29tX21hcAorICogQHJlZzogUmVnaXN0ZXIgaW5kZXggd2l0aGluIHRoYXQgbWFwCisgKi8KK3N0YXRpYyBpbmxpbmUgdTY0IHNjb21fcmVhZChzY29tX21hcF90IG1hcCwgdTMyIHJlZykKK3sKKwlyZXR1cm4gc2NvbV9jb250cm9sbGVyLT5yZWFkKG1hcCwgcmVnKTsKK30KKworLyoqCisgKiBzY29tX3dyaXRlIC0gV3JpdGUgdG8gYSBTQ09NIHJlZ2lzdGVyCisgKiBAbWFwOiBSZXN1bHQgb2Ygc2NvbV9tYXAKKyAqIEByZWc6IFJlZ2lzdGVyIGluZGV4IHdpdGhpbiB0aGF0IG1hcAorICogQHZhbHVlOiBWYWx1ZSB0byB3cml0ZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2NvbV93cml0ZShzY29tX21hcF90IG1hcCwgdTMyIHJlZywgdTY0IHZhbHVlKQoreworCXNjb21fY29udHJvbGxlci0+d3JpdGUobWFwLCByZWcsIHZhbHVlKTsKK30KKworI2VuZGlmIC8qIENPTkZJR19QUENfU0NPTSAqLworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfQVNNX1BPV0VSUENfU0NPTV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc21wLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc21wLmgKaW5kZXggYTkwMmEwZC4uODgwYjhjMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NtcC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zbXAuaApAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaXJxcmV0dXJuLmg+CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKQEAgLTI5LDE0ICszMCwzMiBAQAogI2luY2x1ZGUgPGFzbS9wZXJjcHUuaD4KIAogZXh0ZXJuIGludCBib290X2NwdWlkOworZXh0ZXJuIGludCBib290X2NwdV9jb3VudDsKIAogZXh0ZXJuIHZvaWQgY3B1X2RpZSh2b2lkKTsKIAogI2lmZGVmIENPTkZJR19TTVAKIAotZXh0ZXJuIHZvaWQgc21wX3NlbmRfZGVidWdnZXJfYnJlYWsoaW50IGNwdSk7Ci1leHRlcm4gdm9pZCBzbXBfbWVzc2FnZV9yZWN2KGludCk7CitzdHJ1Y3Qgc21wX29wc190IHsKKwl2b2lkICAoKm1lc3NhZ2VfcGFzcykoaW50IGNwdSwgaW50IG1zZyk7CisjaWZkZWYgQ09ORklHX1BQQ19TTVBfTVVYRURfSVBJCisJdm9pZCAgKCpjYXVzZV9pcGkpKGludCBjcHUsIHVuc2lnbmVkIGxvbmcgZGF0YSk7CisjZW5kaWYKKwlpbnQgICAoKnByb2JlKSh2b2lkKTsKKwlpbnQgICAoKmtpY2tfY3B1KShpbnQgbnIpOworCXZvaWQgICgqc2V0dXBfY3B1KShpbnQgbnIpOworCXZvaWQgICgqYnJpbmd1cF9kb25lKSh2b2lkKTsKKwl2b2lkICAoKnRha2VfdGltZWJhc2UpKHZvaWQpOworCXZvaWQgICgqZ2l2ZV90aW1lYmFzZSkodm9pZCk7CisJaW50ICAgKCpjcHVfZGlzYWJsZSkodm9pZCk7CisJdm9pZCAgKCpjcHVfZGllKSh1bnNpZ25lZCBpbnQgbnIpOworCWludCAgICgqY3B1X2Jvb3RhYmxlKSh1bnNpZ25lZCBpbnQgbnIpOworfTsKKworZXh0ZXJuIHZvaWQgc21wX3NlbmRfZGVidWdnZXJfYnJlYWsodm9pZCk7CiBleHRlcm4gdm9pZCBzdGFydF9zZWNvbmRhcnlfcmVzdW1lKHZvaWQpOworZXh0ZXJuIHZvaWQgX19kZXZpbml0IHNtcF9nZW5lcmljX2dpdmVfdGltZWJhc2Uodm9pZCk7CitleHRlcm4gdm9pZCBfX2RldmluaXQgc21wX2dlbmVyaWNfdGFrZV90aW1lYmFzZSh2b2lkKTsKIAogREVDTEFSRV9QRVJfQ1BVKHVuc2lnbmVkIGludCwgY3B1X3B2cik7CiAKQEAgLTkzLDEzICsxMTIsMTYgQEAKICNkZWZpbmUgUFBDX01TR19DQUxMX0ZVTkNfU0lOR0xFCTIKICNkZWZpbmUgUFBDX01TR19ERUJVR0dFUl9CUkVBSyAgMwogCi0vKgotICogaXJxIGNvbnRyb2xsZXJzIHRoYXQgaGF2ZSBkZWRpY2F0ZWQgaXBpcyBwZXIgbWVzc2FnZSBhbmQgZG9uJ3QKLSAqIG5lZWQgYWRkaXRpb25hbCBjb2RlIGluIHRoZSBhY3Rpb24gaGFuZGxlciBtYXkgdXNlIHRoaXMKLSAqLworLyogZm9yIGlycSBjb250cm9sbGVycyB0aGF0IGhhdmUgZGVkaWNhdGVkIGlwaXMgcGVyIG1lc3NhZ2UgKDQpICovCiBleHRlcm4gaW50IHNtcF9yZXF1ZXN0X21lc3NhZ2VfaXBpKGludCB2aXJxLCBpbnQgbWVzc2FnZSk7CiBleHRlcm4gY29uc3QgY2hhciAqc21wX2lwaV9uYW1lW107CiAKKy8qIGZvciBpcnEgY29udHJvbGxlcnMgd2l0aCBvbmx5IGEgc2luZ2xlIGlwaSAqLworZXh0ZXJuIHZvaWQgc21wX211eGVkX2lwaV9zZXRfZGF0YShpbnQgY3B1LCB1bnNpZ25lZCBsb25nIGRhdGEpOworZXh0ZXJuIHZvaWQgc21wX211eGVkX2lwaV9tZXNzYWdlX3Bhc3MoaW50IGNwdSwgaW50IG1zZyk7CitleHRlcm4gdm9pZCBzbXBfbXV4ZWRfaXBpX3Jlc2VuZCh2b2lkKTsKK2V4dGVybiBpcnFyZXR1cm5fdCBzbXBfaXBpX2RlbXV4KHZvaWQpOworCiB2b2lkIHNtcF9pbml0X2lTZXJpZXModm9pZCk7CiB2b2lkIHNtcF9pbml0X3BTZXJpZXModm9pZCk7CiB2b2lkIHNtcF9pbml0X2NlbGwodm9pZCk7CkBAIC0xNDksNyArMTcxLDcgQEAKIAogZXh0ZXJuIGludCBzbXBfbXBpY19wcm9iZSh2b2lkKTsKIGV4dGVybiB2b2lkIHNtcF9tcGljX3NldHVwX2NwdShpbnQgY3B1KTsKLWV4dGVybiB2b2lkIHNtcF9nZW5lcmljX2tpY2tfY3B1KGludCBucik7CitleHRlcm4gaW50IHNtcF9nZW5lcmljX2tpY2tfY3B1KGludCBucik7CiAKIGV4dGVybiB2b2lkIHNtcF9nZW5lcmljX2dpdmVfdGltZWJhc2Uodm9pZCk7CiBleHRlcm4gdm9pZCBzbXBfZ2VuZXJpY190YWtlX3RpbWViYXNlKHZvaWQpOwpAQCAtMTY5LDYgKzE5MSw4IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBfX3NlY29uZGFyeV9ob2xkX2Fja25vd2xlZGdlOwogZXh0ZXJuIGNoYXIgX19zZWNvbmRhcnlfaG9sZDsKIAorZXh0ZXJuIGlycXJldHVybl90IGRlYnVnX2lwaV9hY3Rpb24oaW50IGlycSwgdm9pZCAqZGF0YSk7CisKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0YmwuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0YmwuaAppbmRleCA2MGY2NGIxLi44NDg5ZDM3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGJsLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RibC5oCkBAIC0zNTIsMyArMzUyLDQgQEAKIENPTVBBVF9TWVNfU1BVKG9wZW5fYnlfaGFuZGxlX2F0KQogQ09NUEFUX1NZU19TUFUoY2xvY2tfYWRqdGltZSkKIFNZU0NBTExfU1BVKHN5bmNmcykKK0NPTVBBVF9TWVNfU1BVKHNlbmRtbXNnKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RlbS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RlbS5oCmluZGV4IDVlNDc0ZGQuLjJkYzU5NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0ZW0uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGVtLmgKQEAgLTIxOSw4ICsyMTksNiBAQAogZXh0ZXJuIGludCBpbml0X2Jvb3RtZW1fZG9uZTsJLyogc2V0IG9uY2UgYm9vdG1lbSBpcyBhdmFpbGFibGUgKi8KIGV4dGVybiBwaHlzX2FkZHJfdCBtZW1vcnlfbGltaXQ7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBrbGltaXQ7Ci0KLWV4dGVybiB2b2lkICphbGxvY19tYXliZV9ib290bWVtKHNpemVfdCBzaXplLCBnZnBfdCBtYXNrKTsKIGV4dGVybiB2b2lkICp6YWxsb2NfbWF5YmVfYm9vdG1lbShzaXplX3Qgc2l6ZSwgZ2ZwX3QgbWFzayk7CiAKIGV4dGVybiBpbnQgcG93ZXJzYXZlX25hcDsJLyogc2V0IGlmIG5hcCBtb2RlIGNhbiBiZSB1c2VkIGluIGlkbGUgbG9vcCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdGxiZmx1c2guaAppbmRleCBkNTBhMzgwLi44MTE0M2ZjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdGxiZmx1c2guaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdGxiZmx1c2guaApAQCAtNzksNiArNzksOCBAQAogCiAjZWxpZiBkZWZpbmVkKENPTkZJR19QUENfU1REX01NVV82NCkKIAorI2RlZmluZSBNTVVfTk9fQ09OVEVYVAkJMAorCiAvKgogICogVExCIGZsdXNoaW5nIGZvciA2NC1iaXQgaGFzaC1NTVUgQ1BVcwogICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdWRiZy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3VkYmcuaAppbmRleCAxMWFlNjk5Li41ODU4MGU5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdWRiZy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS91ZGJnLmgKQEAgLTUyLDYgKzUyLDcgQEAKIGV4dGVybiB2b2lkIF9faW5pdCB1ZGJnX2luaXRfNDB4X3JlYWxtb2RlKHZvaWQpOwogZXh0ZXJuIHZvaWQgX19pbml0IHVkYmdfaW5pdF9jcG0odm9pZCk7CiBleHRlcm4gdm9pZCBfX2luaXQgdWRiZ19pbml0X3VzYmdlY2tvKHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IHVkYmdfaW5pdF93c3Aodm9pZCk7CiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX1VEQkdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IDNjMjE1NjQuLjZkMjNjODEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTM3MSwxMCArMzcxLDExIEBACiAjZGVmaW5lIF9fTlJfb3Blbl9ieV9oYW5kbGVfYXQJMzQ2CiAjZGVmaW5lIF9fTlJfY2xvY2tfYWRqdGltZQkzNDcKICNkZWZpbmUgX19OUl9zeW5jZnMJCTM0OAorI2RlZmluZSBfX05SX3NlbmRtbXNnCQkzNDkKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2RlZmluZSBfX05SX3N5c2NhbGxzCQkzNDkKKyNkZWZpbmUgX19OUl9zeXNjYWxscwkJMzUwCiAKICNkZWZpbmUgX19OUl9fZXhpdCBfX05SX2V4aXQKICNkZWZpbmUgTlJfc3lzY2FsbHMJX19OUl9zeXNjYWxscwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3dzcC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3dzcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZGM4MzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vd3NwLmgKQEAgLTAsMCArMSwxNCBAQAorLyoKKyAqICBDb3B5cmlnaHQgMjAxMSBNaWNoYWVsIEVsbGVybWFuLCBJQk0gQ29ycC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfX0FTTV9QT1dFUlBDX1dTUF9ICisjZGVmaW5lIF9fQVNNX1BPV0VSUENfV1NQX0gKKworZXh0ZXJuIGludCB3c3BfZ2V0X2NoaXBfaWQoc3RydWN0IGRldmljZV9ub2RlICpkbik7CisKKyNlbmRpZiAvKiBfX0FTTV9QT1dFUlBDX1dTUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20veGljcy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3hpY3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTgzYTQwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3hpY3MuaApAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIENvbW1vbiBkZWZpbml0aW9ucyBhY2Nyb3NzIGFsbCB2YXJpYW50cyBvZiBJQ1AgYW5kIElDUyBpbnRlcnJ1cHQKKyAqIGNvbnRyb2xsZXJzLgorICovCisKKyNpZm5kZWYgX1hJQ1NfSAorI2RlZmluZSBfWElDU19ICisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2RlZmluZSBYSUNTX0lQSQkJMgorI2RlZmluZSBYSUNTX0lSUV9TUFVSSU9VUwkwCisKKy8qIFdhbnQgYSBwcmlvcml0eSBvdGhlciB0aGFuIDAuICBWYXJpb3VzIEhXIGlzc3VlcyByZXF1aXJlIHRoaXMuICovCisjZGVmaW5lCURFRkFVTFRfUFJJT1JJVFkJNQorCisvKgorICogTWFyayBJUElzIGFzIGhpZ2hlciBwcmlvcml0eSBzbyB3ZSBjYW4gdGFrZSB0aGVtIGluc2lkZSBpbnRlcnJ1cHRzIHRoYXQKKyAqIGFyZW50IG1hcmtlZCBJUlFGX0RJU0FCTEVECisgKi8KKyNkZWZpbmUgSVBJX1BSSU9SSVRZCQk0CisKKy8qIFRoZSBsZWFzdCBmYXZvcmVkIHByaW9yaXR5ICovCisjZGVmaW5lIExPV0VTVF9QUklPUklUWQkJMHhGRgorCisvKiBUaGUgbnVtYmVyIG9mIHByaW9yaXRpZXMgZGVmaW5lZCBhYm92ZSAqLworI2RlZmluZSBNQVhfTlVNX1BSSU9SSVRJRVMJMworCisvKiBOYXRpdmUgSUNQICovCitleHRlcm4gaW50IGljcF9uYXRpdmVfaW5pdCh2b2lkKTsKKworLyogUEFQUiBJQ1AgKi8KK2V4dGVybiBpbnQgaWNwX2h2X2luaXQodm9pZCk7CisKKy8qIElDUCBvcHMgKi8KK3N0cnVjdCBpY3Bfb3BzIHsKKwl1bnNpZ25lZCBpbnQgKCpnZXRfaXJxKSh2b2lkKTsKKwl2b2lkICgqZW9pKShzdHJ1Y3QgaXJxX2RhdGEgKmQpOworCXZvaWQgKCpzZXRfcHJpb3JpdHkpKHVuc2lnbmVkIGNoYXIgcHJpbyk7CisJdm9pZCAoKnRlYXJkb3duX2NwdSkodm9pZCk7CisJdm9pZCAoKmZsdXNoX2lwaSkodm9pZCk7CisjaWZkZWYgQ09ORklHX1NNUAorCXZvaWQgKCpjYXVzZV9pcGkpKGludCBjcHUsIHVuc2lnbmVkIGxvbmcgZGF0YSk7CisJaXJxX2hhbmRsZXJfdCBpcGlfYWN0aW9uOworI2VuZGlmCit9OworCitleHRlcm4gY29uc3Qgc3RydWN0IGljcF9vcHMgKmljcF9vcHM7CisKKy8qIE5hdGl2ZSBJQ1MgKi8KK2V4dGVybiBpbnQgaWNzX25hdGl2ZV9pbml0KHZvaWQpOworCisvKiBSVEFTIElDUyAqLworZXh0ZXJuIGludCBpY3NfcnRhc19pbml0KHZvaWQpOworCisvKiBJQ1MgaW5zdGFuY2UsIGhvb2tlZCB1cCB0byBjaGlwX2RhdGEgb2YgYW4gaXJxICovCitzdHJ1Y3QgaWNzIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CisJaW50ICgqbWFwKShzdHJ1Y3QgaWNzICppY3MsIHVuc2lnbmVkIGludCB2aXJxKTsKKwl2b2lkICgqbWFza191bmtub3duKShzdHJ1Y3QgaWNzICppY3MsIHVuc2lnbmVkIGxvbmcgdmVjKTsKKwlsb25nICgqZ2V0X3NlcnZlcikoc3RydWN0IGljcyAqaWNzLCB1bnNpZ25lZCBsb25nIHZlYyk7CisJaW50ICgqaG9zdF9tYXRjaCkoc3RydWN0IGljcyAqaWNzLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpOworCWNoYXIgZGF0YVtdOworfTsKKworLyogQ29tbW9ucyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCB4aWNzX2RlZmF1bHRfc2VydmVyOworZXh0ZXJuIHVuc2lnbmVkIGludCB4aWNzX2RlZmF1bHRfZGlzdHJpYl9zZXJ2ZXI7CitleHRlcm4gdW5zaWduZWQgaW50IHhpY3NfaW50ZXJydXB0X3NlcnZlcl9zaXplOworZXh0ZXJuIHN0cnVjdCBpcnFfaG9zdCAqeGljc19ob3N0OworCitzdHJ1Y3QgeGljc19jcHByIHsKKwl1bnNpZ25lZCBjaGFyIHN0YWNrW01BWF9OVU1fUFJJT1JJVElFU107CisJaW50IGluZGV4OworfTsKKworREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCB4aWNzX2NwcHIsIHhpY3NfY3Bwcik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB4aWNzX3B1c2hfY3Bwcih1bnNpZ25lZCBpbnQgdmVjKQoreworCXN0cnVjdCB4aWNzX2NwcHIgKm9zX2NwcHIgPSAmX19nZXRfY3B1X3Zhcih4aWNzX2NwcHIpOworCisJaWYgKFdBUk5fT04ob3NfY3Bwci0+aW5kZXggPj0gTUFYX05VTV9QUklPUklUSUVTIC0gMSkpCisJCXJldHVybjsKKworCWlmICh2ZWMgPT0gWElDU19JUEkpCisJCW9zX2NwcHItPnN0YWNrWysrb3NfY3Bwci0+aW5kZXhdID0gSVBJX1BSSU9SSVRZOworCWVsc2UKKwkJb3NfY3Bwci0+c3RhY2tbKytvc19jcHByLT5pbmRleF0gPSBERUZBVUxUX1BSSU9SSVRZOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgeGljc19wb3BfY3Bwcih2b2lkKQoreworCXN0cnVjdCB4aWNzX2NwcHIgKm9zX2NwcHIgPSAmX19nZXRfY3B1X3Zhcih4aWNzX2NwcHIpOworCisJaWYgKFdBUk5fT04ob3NfY3Bwci0+aW5kZXggPCAxKSkKKwkJcmV0dXJuIExPV0VTVF9QUklPUklUWTsKKworCXJldHVybiBvc19jcHByLT5zdGFja1stLW9zX2NwcHItPmluZGV4XTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHhpY3Nfc2V0X2Jhc2VfY3Bwcih1bnNpZ25lZCBjaGFyIGNwcHIpCit7CisJc3RydWN0IHhpY3NfY3BwciAqb3NfY3BwciA9ICZfX2dldF9jcHVfdmFyKHhpY3NfY3Bwcik7CisKKwkvKiB3ZSBvbmx5IHJlYWxseSB3YW50IHRvIHNldCB0aGUgcHJpb3JpdHkgd2hlbiB0aGVyZSdzCisJICoganVzdCBvbmUgY3BwciB2YWx1ZSBvbiB0aGUgc3RhY2sKKwkgKi8KKwlXQVJOX09OKG9zX2NwcHItPmluZGV4ICE9IDApOworCisJb3NfY3Bwci0+c3RhY2tbMF0gPSBjcHByOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgeGljc19jcHByX3RvcCh2b2lkKQoreworCXN0cnVjdCB4aWNzX2NwcHIgKm9zX2NwcHIgPSAmX19nZXRfY3B1X3Zhcih4aWNzX2NwcHIpOworCQorCXJldHVybiBvc19jcHByLT5zdGFja1tvc19jcHByLT5pbmRleF07Cit9CisKK0RFQ0xBUkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRCh1bnNpZ25lZCBsb25nLCB4aWNzX2lwaV9tZXNzYWdlKTsKKworZXh0ZXJuIHZvaWQgeGljc19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgeGljc19zZXR1cF9jcHUodm9pZCk7CitleHRlcm4gdm9pZCB4aWNzX3VwZGF0ZV9pcnFfc2VydmVycyh2b2lkKTsKK2V4dGVybiB2b2lkIHhpY3Nfc2V0X2NwdV9naXEodW5zaWduZWQgaW50IGdzZXJ2ZXIsIHVuc2lnbmVkIGludCBqb2luKTsKK2V4dGVybiB2b2lkIHhpY3NfbWFza191bmtub3duX3ZlYyh1bnNpZ25lZCBpbnQgdmVjKTsKK2V4dGVybiBpcnFyZXR1cm5fdCB4aWNzX2lwaV9kaXNwYXRjaChpbnQgY3B1KTsKK2V4dGVybiBpbnQgeGljc19zbXBfcHJvYmUodm9pZCk7CitleHRlcm4gdm9pZCB4aWNzX3JlZ2lzdGVyX2ljcyhzdHJ1Y3QgaWNzICppY3MpOworZXh0ZXJuIHZvaWQgeGljc190ZWFyZG93bl9jcHUodm9pZCk7CitleHRlcm4gdm9pZCB4aWNzX2tleGVjX3RlYXJkb3duX2NwdShpbnQgc2Vjb25kYXJ5KTsKK2V4dGVybiB2b2lkIHhpY3NfbWlncmF0ZV9pcnFzX2F3YXkodm9pZCk7CisjaWZkZWYgQ09ORklHX1NNUAorZXh0ZXJuIGludCB4aWNzX2dldF9pcnFfc2VydmVyKHVuc2lnbmVkIGludCB2aXJxLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgc3RyaWN0X2NoZWNrKTsKKyNlbHNlCisjZGVmaW5lIHhpY3NfZ2V0X2lycV9zZXJ2ZXIodmlycSwgY3B1bWFzaywgc3RyaWN0X2NoZWNrKSAoeGljc19kZWZhdWx0X3NlcnZlcikKKyNlbmRpZgorCisKKyNlbmRpZiAvKiBfWElDU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZQppbmRleCAzYmIyYTNlLi45YWFiMzYzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUKQEAgLTM4LDExICszOCwxNCBAQAogCQkJCSAgIHBhY2EubyBudnJhbV82NC5vIGZpcm13YXJlLm8KIG9iai0kKENPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlQpCSs9IGh3X2JyZWFrcG9pbnQubwogb2JqLSQoQ09ORklHX1BQQ19CT09LM1NfNjQpCSs9IGNwdV9zZXR1cF9wcGM5NzAubyBjcHVfc2V0dXBfcGE2dC5vCitvYmotJChDT05GSUdfUFBDX0JPT0szU182NCkJKz0gY3B1X3NldHVwX3Bvd2VyNy5vCiBvYmo2NC0kKENPTkZJR19SRUxPQ0FUQUJMRSkJKz0gcmVsb2NfNjQubwogb2JqLSQoQ09ORklHX1BQQ19CT09LM0VfNjQpCSs9IGV4Y2VwdGlvbnMtNjRlLm8gaWRsZV9ib29rM2Uubworb2JqLSQoQ09ORklHX1BQQ19BMikJCSs9IGNwdV9zZXR1cF9hMi5vCiBvYmotJChDT05GSUdfUFBDNjQpCQkrPSB2ZHNvNjQvCiBvYmotJChDT05GSUdfQUxUSVZFQykJCSs9IHZlY2VtdS5vCiBvYmotJChDT05GSUdfUFBDXzk3MF9OQVApCSs9IGlkbGVfcG93ZXI0Lm8KK29iai0kKENPTkZJR19QUENfUDdfTkFQKQkrPSBpZGxlX3Bvd2VyNy5vCiBvYmotJChDT05GSUdfUFBDX09GKQkJKz0gb2ZfcGxhdGZvcm0ubyBwcm9tX3BhcnNlLm8KIG9iai0kKENPTkZJR19QUENfQ0xPQ0spCQkrPSBjbG9jay5vCiBwcm9jZnMteQkJCTo9IHByb2NfcG93ZXJwYy5vCkBAIC03NSw3ICs3OCw2IEBACiBvYmotJChDT05GSUdfUFBDX0JPT0szRV82NCkJKz0gZGJlbGwubwogCiBleHRyYS15CQkJCTo9IGhlYWRfJChDT05GSUdfV09SRF9TSVpFKS5vCi1leHRyYS0kKENPTkZJR19QUENfQk9PSzNFXzMyKQk6PSBoZWFkX25ld19ib29rZS5vCiBleHRyYS0kKENPTkZJR180MHgpCQk6PSBoZWFkXzQweC5vCiBleHRyYS0kKENPTkZJR180NHgpCQk6PSBoZWFkXzQ0eC5vCiBleHRyYS0kKENPTkZJR19GU0xfQk9PS0UpCTo9IGhlYWRfZnNsX2Jvb2tlLm8KQEAgLTEwMyw2ICsxMDUsOCBAQAogb2JqLSQoQ09ORklHX0FVRElUKQkJKz0gYXVkaXQubwogb2JqNjQtJChDT05GSUdfQVVESVQpCQkrPSBjb21wYXRfYXVkaXQubwogCitvYmotJChDT05GSUdfUFBDX0lPX1dPUktBUk9VTkRTKQkrPSBpby13b3JrYXJvdW5kcy5vCisKIG9iai0kKENPTkZJR19EWU5BTUlDX0ZUUkFDRSkJKz0gZnRyYWNlLm8KIG9iai0kKENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIpCSs9IGZ0cmFjZS5vCiBvYmotJChDT05GSUdfUEVSRl9FVkVOVFMpCSs9IHBlcmZfY2FsbGNoYWluLm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCAyM2U2YTkzLi4zNmUxYzhhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC03NCw2ICs3NCw3IEBACiAJREVGSU5FKEFVRElUQ09OVEVYVCwgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCBhdWRpdF9jb250ZXh0KSk7CiAJREVGSU5FKFNJR1NFR1YsIFNJR1NFR1YpOwogCURFRklORShOTUlfTUFTSywgTk1JX01BU0spOworCURFRklORShUSFJFQURfRFNDUiwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9zdHJ1Y3QsIGRzY3IpKTsKICNlbHNlCiAJREVGSU5FKFRIUkVBRF9JTkZPLCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHN0YWNrKSk7CiAjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCkBAIC0zOTUsNiArMzk2LDcgQEAKIAlERUZJTkUoVkNQVV9IT1NUX1NUQUNLLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guaG9zdF9zdGFjaykpOwogCURFRklORShWQ1BVX0hPU1RfUElELCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guaG9zdF9waWQpKTsKIAlERUZJTkUoVkNQVV9HUFJTLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guZ3ByKSk7CisJREVGSU5FKFZDUFVfVlJTQVZFLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2gudnJzYXZlKSk7CiAJREVGSU5FKFZDUFVfU1BSRzQsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5zcHJnNCkpOwogCURFRklORShWQ1BVX1NQUkc1LCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guc3ByZzUpKTsKIAlERUZJTkUoVkNQVV9TUFJHNiwgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLnNwcmc2KSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF9hMi5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfYTIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjgxOGZlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfYTIuUwpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqICBBMiBzcGVjaWZpYyBhc3NlbWJseSBzdXBwb3J0IGNvZGUKKyAqCisgKiAgQ29weXJpZ2h0IDIwMDkgQmVuIEhlcnJlbnNjaG1pZHQsIElCTSBDb3JwLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgorI2luY2x1ZGUgPGFzbS9wcGMtb3Bjb2RlLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9yZWdfYTIuaD4KKyNpbmNsdWRlIDxhc20vcmVnLmg+CisjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CisKKy8qCisgKiBEaXNhYmxlIHRoZGlkIGFuZCBjbGFzcyBmaWVsZHMgaW4gRVJBVHMgdG8gYnVtcCBQSUQgdG8gZnVsbCAxNCBiaXRzIGNhcGFjaXR5LgorICogVGhpcyBhbHNvIHByZXZlbnRzIGV4dGVybmFsIExQSUQgYWNjZXNzZXMgYnV0IHRoYXQgaXNuJ3QgYSBwcm9ibGVtIHdoZW4gbm90IGEKKyAqIGd1ZXN0LiBVbmRlciBQViwgdGhpcyBzZXR0aW5nIHdpbGwgYmUgaWdub3JlZCBhbmQgTU1VQ1Igd2lsbCByZXR1cm4gdGhlIHJpZ2h0CisgKiBudW1iZXIgb2YgUElEIGJpdHMgd2UgY2FuIHVzZS4KKyAqLworI2RlZmluZSBNTVVDUjFfRVhURU5EX1BJRCBcCisJKE1NVUNSMV9JQ1RJRCB8IE1NVUNSMV9JVFRJRCB8IE1NVUNSMV9EQ1RJRCB8IFwKKwkgTU1VQ1IxX0RUVElEIHwgTU1VQ1IxX0RDQ0QpCisKKy8qCisgKiBVc2UgZXh0ZW5kZWQgUElEcyBpZiBlbmFibGVkLgorICogRG9uJ3QgY2xlYXIgdGhlIEVSQVRzIG9uIGNvbnRleHQgc3luYyBldmVudHMgYW5kIGVuYWJsZSBJICYgRCBMUlUuCisgKiBFbmFibGUgRVJBVCBiYWNrIGludmFsaWRhdGUgd2hlbiB0bGJ3ZSBvdmVyd3JpdGVzIGFuIGVudHJ5LgorICovCisjZGVmaW5lIElOSVRJQUxfTU1VQ1IxIFwKKwkoTU1VQ1IxX0VYVEVORF9QSUQgfCBNTVVDUjFfQ1NJTlZfTkVWRVIgfCBNTVVDUjFfSVJSRSB8IFwKKwkgTU1VQ1IxX0RSUkUgfCBNTVVDUjFfVExCV0VfQklOVikKKworX0dMT0JBTChfX3NldHVwX2NwdV9hMikKKwkvKiBTb21lIG9mIHRoZXNlIGFyZSBhY3R1YWxseSB0aHJlYWQgbG9jYWwgYW5kIHNvbWUgYXJlCisJICogY29yZSBsb2NhbCBidXQgZG9pbmcgaXQgYWx3YXlzIHdvbid0IGh1cnQKKwkgKi8KKworI2lmZGVmIENPTkZJR19QUENfV1NQX0NPUFJPCisJLyogTWFrZSBzdXJlIEFDT1Agc3RhcnRzIG91dCBhcyB6ZXJvICovCisJbGkJcjMsMAorCW10c3ByICAgU1BSTl9BQ09QLHIzCisKKwkvKiBFbmFibGUgaWNzd3ggaW5zdHJ1Y3Rpb24gKi8KKwltZnNwciAgIHIzLFNQUk5fQTJfQ0NSMgorCW9yaSAgICAgcjMscjMsQTJfQ0NSMl9FTkFCTEVfSUNTV1gKKwltdHNwciAgIFNQUk5fQTJfQ0NSMixyMworCisJLyogVW5tYXNrIGFsbCBDVHMgaW4gSEFDT1AgKi8KKwlsaSAgICAgIHIzLC0xCisJbXRzcHIgICBTUFJOX0hBQ09QLHIzCisjZW5kaWYgLyogQ09ORklHX1BQQ19XU1BfQ09QUk8gKi8KKworCS8qIEVuYWJsZSBkb29yYmVsbCAqLworCW1mc3ByICAgcjMsU1BSTl9BMl9DQ1IyCisJb3JpcyAgICAgcjMscjMsQTJfQ0NSMl9FTkFCTEVfUENAaAorCW10c3ByICAgU1BSTl9BMl9DQ1IyLHIzCisJaXN5bmMKKworCS8qIFNldHVwIENDUjAgdG8gZGlzYWJsZSBwb3dlciBzYXZpbmcgZm9yIG5vdyBhcyBpdCdzIGJ1c3RlZAorCSAqIGluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9ucy4gU2V0dXAgQ0NSMSB0byB3YWtlIG9uCisJICogaW50ZXJydXB0cyBub3JtYWxseSAod2Ugd3JpdGUgdGhlIGRlZmF1bHQgdmFsdWUgYnV0IHdobworCSAqIGtub3dzIHdoYXQgRlcgbWF5IGhhdmUgY2xvYmJlcmVkLi4uKQorCSAqLworCWxpCXIzLDAKKwltdHNwcglTUFJOX0EyX0NDUjAsIHIzCisJTE9BRF9SRUdfSU1NRURJQVRFKHIzLDB4MGYwZjBmMGYpCisJbXRzcHIJU1BSTl9BMl9DQ1IxLCByMworCisJLyogSW5pdGlhbGlzZSBNTVVDUjEgKi8KKwlsaXMJcjMsSU5JVElBTF9NTVVDUjFAaAorCW9yaQlyMyxyMyxJTklUSUFMX01NVUNSMUBsCisJbXRzcHIJU1BSTl9NTVVDUjEscjMKKworCS8qIFNldCBNTVVDUjIgdG8gZW5hYmxlIDRLLCA2NEssIDFNLCAxNk0gYW5kIDFHIHBhZ2VzICovCisJTE9BRF9SRUdfSU1NRURJQVRFKHIzLCAweDAwMGE3NTMxKQorCW10c3ByCVNQUk5fTU1VQ1IyLHIzCisKKwkvKiBTZXQgTU1VQ1IzIHRvIHdyaXRlIGFsbCB0aGlkcyBiaXQgdG8gdGhlIFRMQiAqLworCUxPQURfUkVHX0lNTUVESUFURShyMywgMHgwMDAwMDAwZikKKwltdHNwcglTUFJOX01NVUNSMyxyMworCisJLyogRG9uJ3QgZG8gRVJBVCBzdHVmZiBpZiBydW5uaW5nIGd1ZXN0IG1vZGUgKi8KKwltZm1zcglyMworCWFuZGlzLglyMCxyMyxNU1JfR1NAaAorCWJuZQkxZgorCisJLyogTm93IHNldCB0aGUgSS1FUkFUIHdhdGVybWFyayB0byAxNSAqLworCWxpcwlyNCwoTU1VQ1IwX1RMQlNFTF9JfE1NVUNSMF9FQ0wpQGgKKwltdHNwcglTUFJOX01NVUNSMCwgcjQKKwlsaQlyNCxBMl9JRVJBVF9TSVpFLTEKKwlQUENfRVJBVFdFKHI0LHI0LDMpCisKKwkvKiBOb3cgc2V0IHRoZSBELUVSQVQgd2F0ZXJtYXJrIHRvIDMxICovCisJbGlzCXI0LChNTVVDUjBfVExCU0VMX0R8TU1VQ1IwX0VDTClAaAorCW10c3ByCVNQUk5fTU1VQ1IwLCByNAorCWxpCXI0LEEyX0RFUkFUX1NJWkUtMQorCVBQQ19FUkFUV0UocjQscjQsMykKKworCS8qIEFuZCBpbnZhbGlkYXRlIHRoZSBiZWFzdCBqdXN0IGluIGNhc2UuIFRoYXQgd29uJ3QgZ2V0IHJpZCBvZgorCSAqIGEgYm9sdGVkIGVudHJ5IHRob3VnaCBpdCB3aWxsIGJlIGluIExSVSBhbmQgc28gd2lsbCBnbyBhd2F5IGV2ZW50dWFsbHkKKwkgKiBidXQgbGV0J3Mgbm90IGJvdGhlciBmb3Igbm93CisJICovCisJUFBDX0VSQVRJTFgoMCwwLDApCisxOgorCWJscgorCitfR0xPQkFMKF9fcmVzdG9yZV9jcHVfYTIpCisJYglfX3NldHVwX2NwdV9hMgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfZnNsX2Jvb2tlLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF9mc2xfYm9va2UuUwppbmRleCA5MTM2MTExLi44MDUzZGIwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF9mc2xfYm9va2UuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF9mc2xfYm9va2UuUwpAQCAtODgsNiArODgsOSBAQAogCWJsCV9fZTUwMF9kY2FjaGVfc2V0dXAKICNpZmRlZiBDT05GSUdfUFBDX0JPT0szRV82NAogCWJsCS5fX3NldHVwX2Jhc2VfaXZvcnMKKwlibAkuc2V0dXBfcGVyZm1vbl9pdm9yCisJYmwJLnNldHVwX2Rvb3JiZWxsX2l2b3JzCisJYmwJLnNldHVwX2Vodl9pdm9ycwogI2Vsc2UKIAlibAlfX3NldHVwX2U1MDBtY19pdm9ycwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF9wb3dlcjcuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwX3Bvd2VyNy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOWE5M2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF9wb3dlcjcuUwpAQCAtMCwwICsxLDkxIEBACisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGxvdyBsZXZlbCBDUFUgc2V0dXAgZnVuY3Rpb25zLgorICogICAgQ29weXJpZ2h0IChDKSAyMDAzIEJlbmphbWluIEhlcnJlbnNjaG1pZHQgKGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZykKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3BwY19hc20uaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKworLyogRW50cnk6IHIzID0gY3JhcCwgcjQgPSBwdHIgdG8gY3B1dGFibGUgZW50cnkKKyAqCisgKiBOb3RlIHRoYXQgd2UgY2FuIGJlIGNhbGxlZCB0d2ljZSBmb3IgcHNldWRvLVBWUnMKKyAqLworX0dMT0JBTChfX3NldHVwX2NwdV9wb3dlcjcpCisJbWZscglyMTEKKwlibAlfX2luaXRfaHZtb2RlXzIwNgorCW10bHIJcjExCisJYmVxbHIKKwlsaQlyMCwwCisJbXRzcHIJU1BSTl9MUElELHIwCisJYmwJX19pbml0X0xQQ1IKKwlibAlfX2luaXRfVExCCisJbXRscglyMTEKKwlibHIKKworX0dMT0JBTChfX3Jlc3RvcmVfY3B1X3Bvd2VyNykKKwltZmxyCXIxMQorCW1mbXNyCXIzCisJcmxkaWNsLglyMCxyMyw0LDYzCisJYmVxbHIKKwlsaQlyMCwwCisJbXRzcHIJU1BSTl9MUElELHIwCisJYmwJX19pbml0X0xQQ1IKKwlibAlfX2luaXRfVExCCisJbXRscglyMTEKKwlibHIKKworX19pbml0X2h2bW9kZV8yMDY6CisJLyogRGlzYWJsZSBDUFVfRlRSX0hWTU9ERV8yMDYgYW5kIGV4aXQgaWYgTVNSOkhWIGlzIG5vdCBzZXQgKi8KKwltZm1zcglyMworCXJsZGljbC4JcjAscjMsNCw2MworCWJuZWxyCisJbGQJcjUsQ1BVX1NQRUNfRkVBVFVSRVMocjQpCisJTE9BRF9SRUdfSU1NRURJQVRFKHI2LENQVV9GVFJfSFZNT0RFXzIwNikKKwl4b3IJcjUscjUscjYKKwlzdGQJcjUsQ1BVX1NQRUNfRkVBVFVSRVMocjQpCisJYmxyCisKK19faW5pdF9MUENSOgorCS8qIFNldHVwIGEgc2FuZSBMUENSOgorCSAqCisJICogICBMUEVTID0gMGIwMSAoSFNSUjAvMSB1c2VkIGZvciAweDUwMCkKKwkgKiAgIFBFQ0UgPSAwYjExMQorCSAqICAgRFBGRCA9IDQKKwkgKgorCSAqIE90aGVyIGJpdHMgdW50b3VjaGVkIGZvciBub3cKKwkgKi8KKwltZnNwcglyMyxTUFJOX0xQQ1IKKwlvcmkJcjMscjMsKExQQ1JfTFBFUzB8TFBDUl9MUEVTMSkKKwl4b3JpCXIzLHIzLCBMUENSX0xQRVMwCisJb3JpCXIzLHIzLChMUENSX1BFQ0UwfExQQ1JfUEVDRTF8TFBDUl9QRUNFMikKKwlsaQlyNSw3CisJc2xkaQlyNSxyNSxMUENSX0RQRkRfU0gKKwlhbmRjCXIzLHIzLHI1CisJbGkJcjUsNAorCXNsZGkJcjUscjUsTFBDUl9EUEZEX1NICisJb3IJcjMscjMscjUKKwltdHNwcglTUFJOX0xQQ1IscjMKKwlpc3luYworCWJscgorCitfX2luaXRfVExCOgorCS8qIENsZWFyIHRoZSBUTEIgKi8KKwlsaQlyNiwxMjgKKwltdGN0cglyNgorCWxpCXI3LDB4YzAwCS8qIElTIGZpZWxkID0gMGIxMSAqLworCXB0ZXN5bmMKKzI6CXRsYmllbAlyNworCWFkZGkJcjcscjcsMHgxMDAwCisJYmRuegkyYgorCXB0ZXN5bmMKKzE6CWJscgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCmluZGV4IGI5NjAyZWUuLjM0ZDI3MjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKQEAgLTYyLDEwICs2MiwxMiBAQAogZXh0ZXJuIHZvaWQgX19zZXR1cF9jcHVfcHBjOTcwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzdHJ1Y3QgY3B1X3NwZWMqIHNwZWMpOwogZXh0ZXJuIHZvaWQgX19zZXR1cF9jcHVfcHBjOTcwTVAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CiBleHRlcm4gdm9pZCBfX3NldHVwX2NwdV9wYTZ0KHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzdHJ1Y3QgY3B1X3NwZWMqIHNwZWMpOworZXh0ZXJuIHZvaWQgX19zZXR1cF9jcHVfYTIodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CiBleHRlcm4gdm9pZCBfX3Jlc3RvcmVfY3B1X3BhNnQodm9pZCk7CiBleHRlcm4gdm9pZCBfX3Jlc3RvcmVfY3B1X3BwYzk3MCh2b2lkKTsKIGV4dGVybiB2b2lkIF9fc2V0dXBfY3B1X3Bvd2VyNyh1bnNpZ25lZCBsb25nIG9mZnNldCwgc3RydWN0IGNwdV9zcGVjKiBzcGVjKTsKIGV4dGVybiB2b2lkIF9fcmVzdG9yZV9jcHVfcG93ZXI3KHZvaWQpOworZXh0ZXJuIHZvaWQgX19yZXN0b3JlX2NwdV9hMih2b2lkKTsKICNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KICNpZiBkZWZpbmVkKENPTkZJR19FNTAwKQogZXh0ZXJuIHZvaWQgX19zZXR1cF9jcHVfZTU1MDAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CkBAIC0xOTksNyArMjAxLDcgQEAKIAkJLmNwdV9uYW1lCQk9ICJQT1dFUjQgKGdwKSIsCiAJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfUE9XRVI0LAogCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QT1dFUjQsCi0JCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUl9IUFRFX1RBQkxFLAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJTX1BPV0VSNCwKIAkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5kY2FjaGVfYnNpemUJCT0gMTI4LAogCQkubnVtX3BtY3MJCT0gOCwKQEAgLTIxNCw3ICsyMTYsNyBAQAogCQkuY3B1X25hbWUJCT0gIlBPV0VSNCsgKGdxKSIsCiAJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfUE9XRVI0LAogCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QT1dFUjQsCi0JCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUl9IUFRFX1RBQkxFLAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJTX1BPV0VSNCwKIAkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5kY2FjaGVfYnNpemUJCT0gMTI4LAogCQkubnVtX3BtY3MJCT0gOCwKQEAgLTIzMCw3ICsyMzIsNyBAQAogCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTX1BQQzk3MCwKIAkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUE9XRVI0IHwKIAkJCVBQQ19GRUFUVVJFX0hBU19BTFRJVkVDX0NPTVAsCi0JCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUl9IUFRFX1RBQkxFLAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJTX1BQQzk3MCwKIAkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5kY2FjaGVfYnNpemUJCT0gMTI4LAogCQkubnVtX3BtY3MJCT0gOCwKQEAgLTI0OCw3ICsyNTAsNyBAQAogCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTX1BQQzk3MCwKIAkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUE9XRVI0IHwKIAkJCVBQQ19GRUFUVVJFX0hBU19BTFRJVkVDX0NPTVAsCi0JCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUl9IUFRFX1RBQkxFLAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJTX1BQQzk3MCwKIAkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5kY2FjaGVfYnNpemUJCT0gMTI4LAogCQkubnVtX3BtY3MJCT0gOCwKQEAgLTI4NCw3ICsyODYsNyBAQAogCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTX1BQQzk3MCwKIAkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUE9XRVI0IHwKIAkJCVBQQ19GRUFUVVJFX0hBU19BTFRJVkVDX0NPTVAsCi0JCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUl9IUFRFX1RBQkxFLAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJTX1BQQzk3MCwKIAkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5kY2FjaGVfYnNpemUJCT0gMTI4LAogCQkubnVtX3BtY3MJCT0gOCwKQEAgLTMwMiw3ICszMDQsNyBAQAogCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTX1BQQzk3MCwKIAkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUE9XRVI0IHwKIAkJCVBQQ19GRUFUVVJFX0hBU19BTFRJVkVDX0NPTVAsCi0JCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUl9IUFRFX1RBQkxFLAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJTX1BQQzk3MCwKIAkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5kY2FjaGVfYnNpemUJCT0gMTI4LAogCQkubnVtX3BtY3MJCT0gOCwKQEAgLTMxOCw3ICszMjAsNyBAQAogCQkuY3B1X25hbWUJCT0gIlBPV0VSNSAoZ3IpIiwKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19QT1dFUjUsCiAJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BPV0VSNSwKLQkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSX0hQVEVfVEFCTEUsCisJCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUlNfUE9XRVI1LAogCQkuaWNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5udW1fcG1jcwkJPSA2LApAQCAtMzM4LDcgKzM0MCw3IEBACiAJCS5jcHVfbmFtZQkJPSAiUE9XRVI1KyAoZ3MpIiwKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19QT1dFUjUsCiAJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BPV0VSNV9QTFVTLAotCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfSFBURV9UQUJMRSwKKwkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSU19QT1dFUjUsCiAJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAogCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLm51bV9wbWNzCQk9IDYsCkBAIC0zNTQsNyArMzU2LDcgQEAKIAkJLmNwdV9uYW1lCQk9ICJQT1dFUjUrIChncykiLAogCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTX1BPV0VSNSwKIAkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUE9XRVI1X1BMVVMsCi0JCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUl9IUFRFX1RBQkxFLAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJTX1BPV0VSNSwKIAkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5kY2FjaGVfYnNpemUJCT0gMTI4LAogCQkubnVtX3BtY3MJCT0gNiwKQEAgLTM3MSw3ICszNzMsNyBAQAogCQkuY3B1X25hbWUJCT0gIlBPV0VSNSsiLAogCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTX1BPV0VSNSwKIAkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUE9XRVI1X1BMVVMsCi0JCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUl9IUFRFX1RBQkxFLAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJTX1BPV0VSNSwKIAkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5kY2FjaGVfYnNpemUJCT0gMTI4LAogCQkub3Byb2ZpbGVfY3B1X3R5cGUJPSAicHBjNjQvaWJtLWNvbXBhdC12MSIsCkBAIC0zODUsNyArMzg3LDcgQEAKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19QT1dFUjYsCiAJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BPV0VSNiB8CiAJCQlQUENfRkVBVFVSRV9QT1dFUjZfRVhULAotCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfSFBURV9UQUJMRSwKKwkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSU19QT1dFUjYsCiAJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAogCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLm51bV9wbWNzCQk9IDYsCkBAIC00MDQsNyArNDA2LDcgQEAKIAkJLmNwdV9uYW1lCQk9ICJQT1dFUjYgKGFyY2hpdGVjdGVkKSIsCiAJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfUE9XRVI2LAogCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QT1dFUjYsCi0JCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUl9IUFRFX1RBQkxFLAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJTX1BPV0VSNiwKIAkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5kY2FjaGVfYnNpemUJCT0gMTI4LAogCQkub3Byb2ZpbGVfY3B1X3R5cGUJPSAicHBjNjQvaWJtLWNvbXBhdC12MSIsCkBAIC00MTcsMTIgKzQxOSwxMyBAQAogCQkuY3B1X25hbWUJCT0gIlBPV0VSNyAoYXJjaGl0ZWN0ZWQpIiwKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19QT1dFUjcsCiAJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BPV0VSNywKLQkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSX0hQVEVfVEFCTEUgfAotCQkJTU1VX0ZUUl9UTEJJRV8yMDYsCisJCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUlNfUE9XRVI3LAogCQkuaWNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9QT1dFUjQsCiAJCS5vcHJvZmlsZV9jcHVfdHlwZQk9ICJwcGM2NC9pYm0tY29tcGF0LXYxIiwKKwkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV9wb3dlcjcsCisJCS5jcHVfcmVzdG9yZQkJPSBfX3Jlc3RvcmVfY3B1X3Bvd2VyNywKIAkJLnBsYXRmb3JtCQk9ICJwb3dlcjciLAogCX0sCiAJewkvKiBQb3dlcjcgKi8KQEAgLTQzMSwxNCArNDM0LDE1IEBACiAJCS5jcHVfbmFtZQkJPSAiUE9XRVI3IChyYXcpIiwKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19QT1dFUjcsCiAJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BPV0VSNywKLQkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSX0hQVEVfVEFCTEUgfAotCQkJTU1VX0ZUUl9UTEJJRV8yMDYsCisJCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUlNfUE9XRVI3LAogCQkuaWNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5udW1fcG1jcwkJPSA2LAogCQkucG1jX3R5cGUJCT0gUFBDX1BNQ19JQk0sCiAJCS5vcHJvZmlsZV9jcHVfdHlwZQk9ICJwcGM2NC9wb3dlcjciLAogCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfUE9XRVI0LAorCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1X3Bvd2VyNywKKwkJLmNwdV9yZXN0b3JlCQk9IF9fcmVzdG9yZV9jcHVfcG93ZXI3LAogCQkucGxhdGZvcm0JCT0gInBvd2VyNyIsCiAJfSwKIAl7CS8qIFBvd2VyNysgKi8KQEAgLTQ0NywxNCArNDUxLDE1IEBACiAJCS5jcHVfbmFtZQkJPSAiUE9XRVI3KyAocmF3KSIsCiAJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfUE9XRVI3LAogCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QT1dFUjcsCi0JCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUl9IUFRFX1RBQkxFIHwKLQkJCU1NVV9GVFJfVExCSUVfMjA2LAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJTX1BPV0VSNywKIAkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5kY2FjaGVfYnNpemUJCT0gMTI4LAogCQkubnVtX3BtY3MJCT0gNiwKIAkJLnBtY190eXBlCQk9IFBQQ19QTUNfSUJNLAogCQkub3Byb2ZpbGVfY3B1X3R5cGUJPSAicHBjNjQvcG93ZXI3IiwKIAkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX1BPV0VSNCwKKwkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV9wb3dlcjcsCisJCS5jcHVfcmVzdG9yZQkJPSBfX3Jlc3RvcmVfY3B1X3Bvd2VyNywKIAkJLnBsYXRmb3JtCQk9ICJwb3dlcjcrIiwKIAl9LAogCXsJLyogQ2VsbCBCcm9hZGJhbmQgRW5naW5lICovCkBAIC00NjUsNyArNDcwLDcgQEAKIAkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUFBDNjQgfAogCQkJUFBDX0ZFQVRVUkVfQ0VMTCB8IFBQQ19GRUFUVVJFX0hBU19BTFRJVkVDX0NPTVAgfAogCQkJUFBDX0ZFQVRVUkVfU01ULAotCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfSFBURV9UQUJMRSwKKwkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSU19DRUxMLAogCQkuaWNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5udW1fcG1jcwkJPSA0LApAQCAtNDgwLDcgKzQ4NSw3IEBACiAJCS5jcHVfbmFtZQkJPSAiUEE2VCIsCiAJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfUEE2VCwKIAkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUEE2VCwKLQkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSX0hQVEVfVEFCTEUsCisJCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUlNfUEE2VCwKIAkJLmljYWNoZV9ic2l6ZQkJPSA2NCwKIAkJLmRjYWNoZV9ic2l6ZQkJPSA2NCwKIAkJLm51bV9wbWNzCQk9IDYsCkBAIC00OTcsNyArNTAyLDcgQEAKIAkJLmNwdV9uYW1lCQk9ICJQT1dFUjQgKGNvbXBhdGlibGUpIiwKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19DT01QQVRJQkxFLAogCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QUEM2NCwKLQkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSX0hQVEVfVEFCTEUsCisJCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUlNfREVGQVVMVF9IUFRFX0FSQ0hfVjIsCiAJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAogCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLm51bV9wbWNzCQk9IDYsCkBAIC0yMDA1LDcgKzIwMTAsMjIgQEAKICNlbmRpZiAvKiBDT05GSUdfUFBDMzIgKi8KICNlbmRpZiAvKiBDT05GSUdfRTUwMCAqLwogCi0jaWZkZWYgQ09ORklHX1BQQ19CT09LM0VfNjQKKyNpZmRlZiBDT05GSUdfUFBDX0EyCisJewkvKiBTdGFuZGFyZCBBMiAoPj0gREQyKSArIEZQVSBjb3JlICovCisJCS5wdnJfbWFzawkJPSAweGZmZmYwMDAwLAorCQkucHZyX3ZhbHVlCQk9IDB4MDA0ODAwMDAsCisJCS5jcHVfbmFtZQkJPSAiQTIgKD49IEREMikiLAorCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTX0EyLAorCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QUEM2NCwKKwkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSU19BMiwKKwkJLmljYWNoZV9ic2l6ZQkJPSA2NCwKKwkJLmRjYWNoZV9ic2l6ZQkJPSA2NCwKKwkJLm51bV9wbWNzCQk9IDAsCisJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfYTIsCisJCS5jcHVfcmVzdG9yZQkJPSBfX3Jlc3RvcmVfY3B1X2EyLAorCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrX2dlbmVyaWMsCisJCS5wbGF0Zm9ybQkJPSAicHBjYTIiLAorCX0sCiAJewkvKiBUaGlzIGlzIGEgZGVmYXVsdCBlbnRyeSB0byBnZXQgZ29pbmcsIHRvIGJlIHJlcGxhY2VkIGJ5CiAJCSAqIGEgcmVhbCBvbmUgYXQgc29tZSBzdGFnZQogCQkgKi8KQEAgLTIwMjYsNyArMjA0Niw3IEBACiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwb3dlcjYiLAogCX0sCi0jZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfUFBDX0EyICovCiB9OwogCiBzdGF0aWMgc3RydWN0IGNwdV9zcGVjIHRoZV9jcHVfc3BlYzsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2guYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2guYwppbmRleCA1YjVlMWYwLi40ZTZlZTk0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaC5jCkBAIC02NCw5ICs2NCw5IEBACiAJCXJldHVybjsKIAogCWhhcmRfaXJxX2Rpc2FibGUoKTsKLQlpZiAoIWNwdV9pc3NldChjcHUsIGNwdXNfaW5fY3Jhc2gpKQorCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsICZjcHVzX2luX2NyYXNoKSkKIAkJY3Jhc2hfc2F2ZV9jcHUocmVncywgY3B1KTsKLQljcHVfc2V0KGNwdSwgY3B1c19pbl9jcmFzaCk7CisJY3B1bWFza19zZXRfY3B1KGNwdSwgJmNwdXNfaW5fY3Jhc2gpOwogCiAJLyoKIAkgKiBFbnRlcmVkIHZpYSBzb2Z0LXJlc2V0IC0gY291bGQgYmUgdGhlIGtkdW1wCkBAIC03Nyw4ICs3Nyw4IEBACiAJICogVGVsbCB0aGUga2V4ZWMgQ1BVIHRoYXQgZW50ZXJlZCB2aWEgc29mdC1yZXNldCBhbmQgcmVhZHkKIAkgKiB0byBnbyBkb3duLgogCSAqLwotCWlmIChjcHVfaXNzZXQoY3B1LCBjcHVzX2luX3NyKSkgewotCQljcHVfY2xlYXIoY3B1LCBjcHVzX2luX3NyKTsKKwlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsICZjcHVzX2luX3NyKSkgeworCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsICZjcHVzX2luX3NyKTsKIAkJYXRvbWljX2luYygmZW50ZXJfb25fc29mdF9yZXNldCk7CiAJfQogCkBAIC04Nyw3ICs4Nyw3IEBACiAJICogVGhpcyBiYXJyaWVyIGlzIG5lZWRlZCB0byBtYWtlIHN1cmUgdGhhdCBhbGwgQ1BVcyBhcmUgc3RvcHBlZC4KIAkgKiBJZiBub3QsIHNvZnQtcmVzZXQgd2lsbCBiZSBpbnZva2VkIHRvIGJyaW5nIG90aGVyIENQVXMuCiAJICovCi0Jd2hpbGUgKCFjcHVfaXNzZXQoY3Jhc2hpbmdfY3B1LCBjcHVzX2luX2NyYXNoKSkKKwl3aGlsZSAoIWNwdW1hc2tfdGVzdF9jcHUoY3Jhc2hpbmdfY3B1LCAmY3B1c19pbl9jcmFzaCkpCiAJCWNwdV9yZWxheCgpOwogCiAJaWYgKHBwY19tZC5rZXhlY19jcHVfZG93bikKQEAgLTEwOSw3ICsxMDksNyBAQAogewogCXVuc2lnbmVkIGludCBuY3B1cyA9IG51bV9vbmxpbmVfY3B1cygpIC0gMTsvKiBFeGNsdWRpbmcgdGhlIHBhbmljIGNwdSAqLwogCi0JY3B1X2NsZWFyKGNwdSwgY3B1c19pbl9zcik7CisJY3B1bWFza19jbGVhcl9jcHUoY3B1LCAmY3B1c19pbl9zcik7CiAJd2hpbGUgKGF0b21pY19yZWFkKCZlbnRlcl9vbl9zb2Z0X3Jlc2V0KSAhPSBuY3B1cykKIAkJY3B1X3JlbGF4KCk7CiB9CkBAIC0xMzIsNyArMTMyLDcgQEAKIAkgKi8KIAlwcmludGsoS0VSTl9FTUVSRyAiU2VuZGluZyBJUEkgdG8gb3RoZXIgY3B1cy4uLlxuIik7CiAJbXNlY3MgPSAxMDAwMDsKLQl3aGlsZSAoKGNwdXNfd2VpZ2h0KGNwdXNfaW5fY3Jhc2gpIDwgbmNwdXMpICYmICgtLW1zZWNzID4gMCkpIHsKKwl3aGlsZSAoKGNwdW1hc2tfd2VpZ2h0KCZjcHVzX2luX2NyYXNoKSA8IG5jcHVzKSAmJiAoLS1tc2VjcyA+IDApKSB7CiAJCWNwdV9yZWxheCgpOwogCQltZGVsYXkoMSk7CiAJfQpAQCAtMTQ0LDUyICsxNDQsMjQgQEAKIAkgKiB1c2VyIHRvIGRvIHNvZnQgcmVzZXQgc3VjaCB0aGF0IHdlIGdldCBhbGwuCiAJICogU29mdC1yZXNldCB3aWxsIGJlIHVzZWQgdW50aWwgYmV0dGVyIG1lY2hhbmlzbSBpcyBpbXBsZW1lbnRlZC4KIAkgKi8KLQlpZiAoY3B1c193ZWlnaHQoY3B1c19pbl9jcmFzaCkgPCBuY3B1cykgeworCWlmIChjcHVtYXNrX3dlaWdodCgmY3B1c19pbl9jcmFzaCkgPCBuY3B1cykgewogCQlwcmludGsoS0VSTl9FTUVSRyAiZG9uZSB3YWl0aW5nOiAlZCBjcHUocykgbm90IHJlc3BvbmRpbmdcbiIsCi0JCQluY3B1cyAtIGNwdXNfd2VpZ2h0KGNwdXNfaW5fY3Jhc2gpKTsKKwkJCW5jcHVzIC0gY3B1bWFza193ZWlnaHQoJmNwdXNfaW5fY3Jhc2gpKTsKIAkJcHJpbnRrKEtFUk5fRU1FUkcgIkFjdGl2YXRlIHNvZnQtcmVzZXQgdG8gc3RvcCBvdGhlciBjcHUocylcbiIpOwotCQljcHVzX2luX3NyID0gQ1BVX01BU0tfTk9ORTsKKwkJY3B1bWFza19jbGVhcigmY3B1c19pbl9zcik7CiAJCWF0b21pY19zZXQoJmVudGVyX29uX3NvZnRfcmVzZXQsIDApOwotCQl3aGlsZSAoY3B1c193ZWlnaHQoY3B1c19pbl9jcmFzaCkgPCBuY3B1cykKKwkJd2hpbGUgKGNwdW1hc2tfd2VpZ2h0KCZjcHVzX2luX2NyYXNoKSA8IG5jcHVzKQogCQkJY3B1X3JlbGF4KCk7CiAJfQogCS8qCiAJICogTWFrZSBzdXJlIGFsbCBDUFVzIGFyZSBlbnRlcmVkIHZpYSBzb2Z0LXJlc2V0IGlmIHRoZSBrZHVtcCBpcwogCSAqIGludm9rZWQgdXNpbmcgc29mdC1yZXNldC4KIAkgKi8KLQlpZiAoY3B1X2lzc2V0KGNwdSwgY3B1c19pbl9zcikpCisJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCAmY3B1c19pbl9zcikpCiAJCWNyYXNoX3NvZnRfcmVzZXRfY2hlY2soY3B1KTsKIAkvKiBMZWF2ZSB0aGUgSVBJIGNhbGxiYWNrIHNldCAqLwogfQogCi0vKiB3YWl0IGZvciBhbGwgdGhlIENQVXMgdG8gaGl0IHJlYWwgbW9kZSBidXQgdGltZW91dCBpZiB0aGV5IGRvbid0IGNvbWUgaW4gKi8KLSNpZmRlZiBDT05GSUdfUFBDX1NURF9NTVVfNjQKLXN0YXRpYyB2b2lkIGNyYXNoX2tleGVjX3dhaXRfcmVhbG1vZGUoaW50IGNwdSkKLXsKLQl1bnNpZ25lZCBpbnQgbXNlY3M7Ci0JaW50IGk7Ci0KLQltc2VjcyA9IDEwMDAwOwotCWZvciAoaT0wOyBpIDwgTlJfQ1BVUyAmJiBtc2VjcyA+IDA7IGkrKykgewotCQlpZiAoaSA9PSBjcHUpCi0JCQljb250aW51ZTsKLQotCQl3aGlsZSAocGFjYVtpXS5rZXhlY19zdGF0ZSA8IEtFWEVDX1NUQVRFX1JFQUxfTU9ERSkgewotCQkJYmFycmllcigpOwotCQkJaWYgKCFjcHVfcG9zc2libGUoaSkpIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmICghY3B1X29ubGluZShpKSkgewotCQkJCWJyZWFrOwotCQkJfQotCQkJbXNlY3MtLTsKLQkJCW1kZWxheSgxKTsKLQkJfQotCX0KLQltYigpOwotfQotI2VuZGlmCS8qIENPTkZJR19QUENfU1REX01NVV82NCAqLwotCiAvKgogICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBieSBzZWNvbmRhcnkgY3B1cyBvciBieSBrZXhlYyBjcHUKICAqIGlmIHNvZnQtcmVzZXQgaXMgYWN0aXZhdGVkIHRvIHN0b3Agc29tZSBDUFVzLgpAQCAtMjEwLDcgKzE4Miw3IEBACiAJCQkgKiBleGl0ZWQgdXNpbmcgJ3gnKGV4aXQgYW5kIHJlY292ZXIpIG9yCiAJCQkgKiBrZXhlY19zaG91bGRfY3Jhc2goKSBmYWlsZWQgZm9yIGFsbCBydW5uaW5nIHRhc2tzLgogCQkJICovCi0JCQljcHVfY2xlYXIoY3B1LCBjcHVzX2luX3NyKTsKKwkJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgJmNwdXNfaW5fc3IpOwogCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQkJcmV0dXJuOwogCQl9CkBAIC0yMjQsNyArMTk2LDcgQEAKIAkJICogdGhlbiBzdGFydCBrZXhlYyBib290LgogCQkgKi8KIAkJY3Jhc2hfc29mdF9yZXNldF9jaGVjayhjcHUpOwotCQljcHVfc2V0KGNyYXNoaW5nX2NwdSwgY3B1c19pbl9jcmFzaCk7CisJCWNwdW1hc2tfc2V0X2NwdShjcmFzaGluZ19jcHUsICZjcHVzX2luX2NyYXNoKTsKIAkJaWYgKHBwY19tZC5rZXhlY19jcHVfZG93bikKIAkJCXBwY19tZC5rZXhlY19jcHVfZG93bigxLCAwKTsKIAkJbWFjaGluZV9rZXhlYyhrZXhlY19jcmFzaF9pbWFnZSk7CkBAIC0yMzQsNyArMjA2LDYgQEAKIH0KIAogI2Vsc2UJLyogISBDT05GSUdfU01QICovCi1zdGF0aWMgaW5saW5lIHZvaWQgY3Jhc2hfa2V4ZWNfd2FpdF9yZWFsbW9kZShpbnQgY3B1KSB7fQogCiBzdGF0aWMgdm9pZCBjcmFzaF9rZXhlY19wcmVwYXJlX2NwdXMoaW50IGNwdSkKIHsKQEAgLTI1MywxMCArMjI0LDQwIEBACiAKIHZvaWQgY3Jhc2hfa2V4ZWNfc2Vjb25kYXJ5KHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWNwdXNfaW5fc3IgPSBDUFVfTUFTS19OT05FOworCWNwdW1hc2tfY2xlYXIoJmNwdXNfaW5fc3IpOwogfQogI2VuZGlmCS8qIENPTkZJR19TTVAgKi8KIAorLyogd2FpdCBmb3IgYWxsIHRoZSBDUFVzIHRvIGhpdCByZWFsIG1vZGUgYnV0IHRpbWVvdXQgaWYgdGhleSBkb24ndCBjb21lIGluICovCisjaWYgZGVmaW5lZChDT05GSUdfU01QKSAmJiBkZWZpbmVkKENPTkZJR19QUENfU1REX01NVV82NCkKK3N0YXRpYyB2b2lkIGNyYXNoX2tleGVjX3dhaXRfcmVhbG1vZGUoaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBpbnQgbXNlY3M7CisJaW50IGk7CisKKwltc2VjcyA9IDEwMDAwOworCWZvciAoaT0wOyBpIDwgbnJfY3B1X2lkcyAmJiBtc2VjcyA+IDA7IGkrKykgeworCQlpZiAoaSA9PSBjcHUpCisJCQljb250aW51ZTsKKworCQl3aGlsZSAocGFjYVtpXS5rZXhlY19zdGF0ZSA8IEtFWEVDX1NUQVRFX1JFQUxfTU9ERSkgeworCQkJYmFycmllcigpOworCQkJaWYgKCFjcHVfcG9zc2libGUoaSkpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmICghY3B1X29ubGluZShpKSkgeworCQkJCWJyZWFrOworCQkJfQorCQkJbXNlY3MtLTsKKwkJCW1kZWxheSgxKTsKKwkJfQorCX0KKwltYigpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcmFzaF9rZXhlY193YWl0X3JlYWxtb2RlKGludCBjcHUpIHt9CisjZW5kaWYJLyogQ09ORklHX1NNUCAmJiBDT05GSUdfUFBDX1NURF9NTVVfNjQgKi8KKwogLyoKICAqIFJlZ2lzdGVyIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uIHNodXRkb3duLiAgT25seSB1c2UgdGhpcyBpZiB5b3UKICAqIGNhbid0IHJlc2V0IHlvdXIgZGV2aWNlIGluIHRoZSBzZWNvbmQga2VybmVsLgpAQCAtMzQ1LDcgKzM0Niw3IEBACiAJY3Jhc2hpbmdfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCWNyYXNoX3NhdmVfY3B1KHJlZ3MsIGNyYXNoaW5nX2NwdSk7CiAJY3Jhc2hfa2V4ZWNfcHJlcGFyZV9jcHVzKGNyYXNoaW5nX2NwdSk7Ci0JY3B1X3NldChjcmFzaGluZ19jcHUsIGNwdXNfaW5fY3Jhc2gpOworCWNwdW1hc2tfc2V0X2NwdShjcmFzaGluZ19jcHUsICZjcHVzX2luX2NyYXNoKTsKIAljcmFzaF9rZXhlY193YWl0X3JlYWxtb2RlKGNyYXNoaW5nX2NwdSk7CiAKIAltYWNoaW5lX2tleGVjX21hc2tfaW50ZXJydXB0cygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9kYmVsbC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9kYmVsbC5jCmluZGV4IDMzMDdhNTIuLjJjYzQ1MWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZGJlbGwuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2RiZWxsLmMKQEAgLTEzLDg0ICsxMywzNSBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAKICNpbmNsdWRlIDxhc20vZGJlbGwuaD4KICNpbmNsdWRlIDxhc20vaXJxX3JlZ3MuaD4KIAogI2lmZGVmIENPTkZJR19TTVAKLXN0cnVjdCBkb29yYmVsbF9jcHVfaW5mbyB7Ci0JdW5zaWduZWQgbG9uZwltZXNzYWdlczsJLyogY3VycmVudCBtZXNzYWdlcyBiaXRzICovCi0JdW5zaWduZWQgaW50CXRhZzsJCS8qIHRhZyB2YWx1ZSAqLwotfTsKLQotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBkb29yYmVsbF9jcHVfaW5mbywgZG9vcmJlbGxfY3B1X2luZm8pOwotCiB2b2lkIGRvb3JiZWxsX3NldHVwX3RoaXNfY3B1KHZvaWQpCiB7Ci0Jc3RydWN0IGRvb3JiZWxsX2NwdV9pbmZvICppbmZvID0gJl9fZ2V0X2NwdV92YXIoZG9vcmJlbGxfY3B1X2luZm8pOworCXVuc2lnbmVkIGxvbmcgdGFnID0gbWZzcHIoU1BSTl9QSVIpICYgMHgzZmZmOwogCi0JaW5mby0+bWVzc2FnZXMgPSAwOwotCWluZm8tPnRhZyA9IG1mc3ByKFNQUk5fUElSKSAmIDB4M2ZmZjsKKwlzbXBfbXV4ZWRfaXBpX3NldF9kYXRhKHNtcF9wcm9jZXNzb3JfaWQoKSwgdGFnKTsKIH0KIAotdm9pZCBkb29yYmVsbF9tZXNzYWdlX3Bhc3MoaW50IHRhcmdldCwgaW50IG1zZykKK3ZvaWQgZG9vcmJlbGxfY2F1c2VfaXBpKGludCBjcHUsIHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQlzdHJ1Y3QgZG9vcmJlbGxfY3B1X2luZm8gKmluZm87Ci0JaW50IGk7Ci0KLQlpZiAodGFyZ2V0IDwgTlJfQ1BVUykgewotCQlpbmZvID0gJnBlcl9jcHUoZG9vcmJlbGxfY3B1X2luZm8sIHRhcmdldCk7Ci0JCXNldF9iaXQobXNnLCAmaW5mby0+bWVzc2FnZXMpOwotCQlwcGNfbXNnc25kKFBQQ19EQkVMTCwgMCwgaW5mby0+dGFnKTsKLQl9Ci0JZWxzZSBpZiAodGFyZ2V0ID09IE1TR19BTExfQlVUX1NFTEYpIHsKLQkJZm9yX2VhY2hfb25saW5lX2NwdShpKSB7Ci0JCQlpZiAoaSA9PSBzbXBfcHJvY2Vzc29yX2lkKCkpCi0JCQkJY29udGludWU7Ci0JCQlpbmZvID0gJnBlcl9jcHUoZG9vcmJlbGxfY3B1X2luZm8sIGkpOwotCQkJc2V0X2JpdChtc2csICZpbmZvLT5tZXNzYWdlcyk7Ci0JCQlwcGNfbXNnc25kKFBQQ19EQkVMTCwgMCwgaW5mby0+dGFnKTsKLQkJfQotCX0KLQllbHNlIHsgLyogdGFyZ2V0ID09IE1TR19BTEwgKi8KLQkJZm9yX2VhY2hfb25saW5lX2NwdShpKSB7Ci0JCQlpbmZvID0gJnBlcl9jcHUoZG9vcmJlbGxfY3B1X2luZm8sIGkpOwotCQkJc2V0X2JpdChtc2csICZpbmZvLT5tZXNzYWdlcyk7Ci0JCX0KLQkJcHBjX21zZ3NuZChQUENfREJFTEwsIFBQQ19EQkVMTF9NU0dfQlJEQ0FTVCwgMCk7Ci0JfQorCXBwY19tc2dzbmQoUFBDX0RCRUxMLCAwLCBkYXRhKTsKIH0KIAogdm9pZCBkb29yYmVsbF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHB0X3JlZ3MgKm9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOwotCXN0cnVjdCBkb29yYmVsbF9jcHVfaW5mbyAqaW5mbyA9ICZfX2dldF9jcHVfdmFyKGRvb3JiZWxsX2NwdV9pbmZvKTsKLQlpbnQgbXNnOwogCi0JLyogV2FybmluZzogcmVncyBjYW4gYmUgTlVMTCB3aGVuIGNhbGxlZCBmcm9tIGlycSBlbmFibGUgKi8KKwlpcnFfZW50ZXIoKTsKIAotCWlmICghaW5mby0+bWVzc2FnZXMgfHwgKG51bV9vbmxpbmVfY3B1cygpIDwgMikpCi0JCWdvdG8gb3V0OworCXNtcF9pcGlfZGVtdXgoKTsKIAotCWZvciAobXNnID0gMDsgbXNnIDwgNDsgbXNnKyspCi0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQobXNnLCAmaW5mby0+bWVzc2FnZXMpKQotCQkJc21wX21lc3NhZ2VfcmVjdihtc2cpOwotCi1vdXQ6CisJaXJxX2V4aXQoKTsKIAlzZXRfaXJxX3JlZ3Mob2xkX3JlZ3MpOwogfQotCi12b2lkIGRvb3JiZWxsX2NoZWNrX3NlbGYodm9pZCkKLXsKLQlzdHJ1Y3QgZG9vcmJlbGxfY3B1X2luZm8gKmluZm8gPSAmX19nZXRfY3B1X3Zhcihkb29yYmVsbF9jcHVfaW5mbyk7Ci0KLQlpZiAoIWluZm8tPm1lc3NhZ2VzKQotCQlyZXR1cm47Ci0KLQlwcGNfbXNnc25kKFBQQ19EQkVMTCwgMCwgaW5mby0+dGFnKTsKLX0KLQogI2Vsc2UgLyogQ09ORklHX1NNUCAqLwogdm9pZCBkb29yYmVsbF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMKaW5kZXggZDgyODc4Yy4uZDgzNDQyNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUwpAQCAtNDIxLDYgKzQyMSwxMiBAQAogCXN0ZAlyMjQsVEhSRUFEX1ZSU0FWRShyMykKIEVORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX0FMVElWRUMpCiAjZW5kaWYgLyogQ09ORklHX0FMVElWRUMgKi8KKyNpZmRlZiBDT05GSUdfUFBDNjQKK0JFR0lOX0ZUUl9TRUNUSU9OCisJbWZzcHIJcjI1LFNQUk5fRFNDUgorCXN0ZAlyMjUsVEhSRUFEX0RTQ1IocjMpCitFTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9EU0NSKQorI2VuZGlmCiAJYW5kLglyMCxyMCxyMjIKIAliZXErCTFmCiAJYW5kYwlyMjIscjIyLHIwCkBAIC00NjIsMTAgKzQ2OCwxMCBAQAogICBGVFJfU0VDVElPTl9FTFNFX05FU1RFRCg5NSkKIAljbHJyZGkJcjYscjgsNDAJLyogZ2V0IGl0cyAxVCBFU0lEICovCiAJY2xycmRpCXI5LHIxLDQwCS8qIGdldCBjdXJyZW50IHNwIDFUIEVTSUQgKi8KLSAgQUxUX0ZUUl9TRUNUSU9OX0VORF9ORVNURURfSUZDTFIoQ1BVX0ZUUl8xVF9TRUdNRU5ULCA5NSkKKyAgQUxUX01NVV9GVFJfU0VDVElPTl9FTkRfTkVTVEVEX0lGQ0xSKE1NVV9GVFJfMVRfU0VHTUVOVCwgOTUpCiBGVFJfU0VDVElPTl9FTFNFCiAJYgkyZgotQUxUX0ZUUl9TRUNUSU9OX0VORF9JRlNFVChDUFVfRlRSX1NMQikKK0FMVF9NTVVfRlRSX1NFQ1RJT05fRU5EX0lGU0VUKE1NVV9GVFJfU0xCKQogCWNscmxkaS4JcjAscjYsMgkJLyogaXMgbmV3IEVTSUQgYzAwMDAwMDAwPyAqLwogCWNtcGQJY3IxLHI2LHI5CS8qIG9yIGlzIG5ldyBFU0lEIHRoZSBzYW1lIGFzIGN1cnJlbnQgRVNJRD8gKi8KIAljcm9yCWVxLDQqY3IxK2VxLGVxCkBAIC00NzksNyArNDg1LDcgQEAKIAlsaQlyOSxNTVVfU0VHU0laRV8xVAkvKiBpbnNlcnQgQiBmaWVsZCAqLwogCW9yaXMJcjYscjYsKE1NVV9TRUdTSVpFXzFUIDw8IFNMQklFX1NTSVpFX1NISUZUKUBoCiAJcmxkaW1pCXI3LHI5LFNMQl9WU0lEX1NTSVpFX1NISUZULDAKLUVORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSXzFUX1NFR01FTlQpCitFTkRfTU1VX0ZUUl9TRUNUSU9OX0lGU0VUKE1NVV9GVFJfMVRfU0VHTUVOVCkKIAogCS8qIFVwZGF0ZSB0aGUgbGFzdCBib2x0ZWQgU0xCLiAgTm8gd3JpdGUgYmFycmllcnMgYXJlIG5lZWRlZAogCSAqIGhlcmUsIHByb3ZpZGVkIHdlIG9ubHkgdXBkYXRlIHRoZSBjdXJyZW50IENQVSdzIFNMQiBzaGFkb3cKQEAgLTQ5MSw3ICs0OTcsNyBAQAogCXN0ZAlyNyxTTEJTSEFET1dfU1RBQ0tWU0lEKHI5KSAgLyogU2F2ZSBWU0lEICovCiAJc3RkCXIwLFNMQlNIQURPV19TVEFDS0VTSUQocjkpICAvKiBTYXZlIEVTSUQgKi8KIAotCS8qIE5vIG5lZWQgdG8gY2hlY2sgZm9yIENQVV9GVFJfTk9fU0xCSUVfQiBoZXJlLCBzaW5jZSB3aGVuCisJLyogTm8gbmVlZCB0byBjaGVjayBmb3IgTU1VX0ZUUl9OT19TTEJJRV9CIGhlcmUsIHNpbmNlIHdoZW4KIAkgKiB3ZSBoYXZlIDFUQiBzZWdtZW50cywgdGhlIG9ubHkgQ1BVcyBrbm93biB0byBoYXZlIHRoZSBlcnJhdGEKIAkgKiBvbmx5IHN1cHBvcnQgbGVzcyB0aGFuIDFUQiBvZiBzeXN0ZW0gbWVtb3J5IGFuZCB3ZSdsbCBuZXZlcgogCSAqIGFjdHVhbGx5IGhpdCB0aGlzIGNvZGUgcGF0aC4KQEAgLTUyMiw2ICs1MjgsMTUgQEAKIAltdHNwcglTUFJOX1ZSU0FWRSxyMAkJLyogaWYgRzQsIHJlc3RvcmUgVlJTQVZFIHJlZyAqLwogRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfQUxUSVZFQykKICNlbmRpZiAvKiBDT05GSUdfQUxUSVZFQyAqLworI2lmZGVmIENPTkZJR19QUEM2NAorQkVHSU5fRlRSX1NFQ1RJT04KKwlsZAlyMCxUSFJFQURfRFNDUihyNCkKKwljbXBkCXIwLHIyNQorCWJlcQkxZgorCW10c3ByCVNQUk5fRFNDUixyMAorMToJCitFTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9EU0NSKQorI2VuZGlmCiAKIAkvKiByMy1yMTMgYXJlIGRlc3Ryb3llZCAtLSBDb3J0ICovCiAJUkVTVF84R1BSUygxNCwgcjEpCkBAIC04MzgsNyArODUzLDcgQEAKIAogX1NUQVRJQyhydGFzX3JldHVybl9sb2MpCiAJLyogcmVsb2NhdGlvbiBpcyBvZmYgYXQgdGhpcyBwb2ludCAqLwotCW1mc3ByCXI0LFNQUk5fU1BSR19QQUNBCS8qIEdldCBQQUNBICovCisJR0VUX1BBQ0EocjQpCiAJY2xybGRpCXI0LHI0LDIJCQkvKiBjb252ZXJ0IHRvIHJlYWxtb2RlIGFkZHJlc3MgKi8KIAogCWJjbAkyMCwzMSwkKzQKQEAgLTg2OSw3ICs4ODQsNyBAQAogCVJFU1RfOEdQUlMoMTQsIHIxKQkJLyogUmVzdG9yZSB0aGUgbm9uLXZvbGF0aWxlcyAqLwogCVJFU1RfMTBHUFJTKDIyLCByMSkJCS8qIGRpdHRvICovCiAKLQltZnNwcglyMTMsU1BSTl9TUFJHX1BBQ0EKKwlHRVRfUEFDQShyMTMpCiAKIAlsZAlyNCxfQ0NSKHIxKQogCW10Y3IJcjQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZXhjZXB0aW9ucy02NGUuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZXhjZXB0aW9ucy02NGUuUwppbmRleCA5NjUxYWNjLi5kMjRkNDQwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2V4Y2VwdGlvbnMtNjRlLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9leGNlcHRpb25zLTY0ZS5TCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CisjaW5jbHVkZSA8YXNtL3JlZ19hMi5oPgogI2luY2x1ZGUgPGFzbS9leGNlcHRpb24tNjRlLmg+CiAjaW5jbHVkZSA8YXNtL2J1Zy5oPgogI2luY2x1ZGUgPGFzbS9pcnFmbGFncy5oPgpAQCAtMjUyLDkgKzI1Myw2IEBACiAJLmJhbGlnbgkweDEwMDAKIAkuZ2xvYmwgaW50ZXJydXB0X2Jhc2VfYm9vazNlCiBpbnRlcnJ1cHRfYmFzZV9ib29rM2U6CQkJCQkvKiBmYWtlIHRyYXAgKi8KLQkvKiBOb3RlOiBJZiByZWFsIGRlYnVnIGV4Y2VwdGlvbnMgYXJlIHN1cHBvcnRlZCBieSB0aGUgSFcsIHRoZSB2ZWN0b3IKLQkgKiBiZWxvdyB3aWxsIGhhdmUgdG8gYmUgcGF0Y2hlZCB1cCB0byBwb2ludCB0byBhbiBhcHByb3ByaWF0ZSBoYW5kbGVyCi0JICovCiAJRVhDRVBUSU9OX1NUVUIoMHgwMDAsIG1hY2hpbmVfY2hlY2spCQkvKiAweDAyMDAgKi8KIAlFWENFUFRJT05fU1RVQigweDAyMCwgY3JpdGljYWxfaW5wdXQpCQkvKiAweDA1ODAgKi8KIAlFWENFUFRJT05fU1RVQigweDA0MCwgZGVidWdfY3JpdCkJCS8qIDB4MGQwMCAqLwpAQCAtMjcxLDggKzI2OSwxMyBAQAogCUVYQ0VQVElPTl9TVFVCKDB4MWEwLCB3YXRjaGRvZykJCQkvKiAweDA5ZjAgKi8KIAlFWENFUFRJT05fU1RVQigweDFjMCwgZGF0YV90bGJfbWlzcykKIAlFWENFUFRJT05fU1RVQigweDFlMCwgaW5zdHJ1Y3Rpb25fdGxiX21pc3MpCisJRVhDRVBUSU9OX1NUVUIoMHgyNjAsIHBlcmZtb24pCiAJRVhDRVBUSU9OX1NUVUIoMHgyODAsIGRvb3JiZWxsKQogCUVYQ0VQVElPTl9TVFVCKDB4MmEwLCBkb29yYmVsbF9jcml0KQorCUVYQ0VQVElPTl9TVFVCKDB4MmMwLCBndWVzdF9kb29yYmVsbCkKKwlFWENFUFRJT05fU1RVQigweDJlMCwgZ3Vlc3RfZG9vcmJlbGxfY3JpdCkKKwlFWENFUFRJT05fU1RVQigweDMwMCwgaHlwZXJjYWxsKQorCUVYQ0VQVElPTl9TVFVCKDB4MzIwLCBlaHByaXYpCiAKIAkuZ2xvYmwgaW50ZXJydXB0X2VuZF9ib29rM2UKIGludGVycnVwdF9lbmRfYm9vazNlOgpAQCAtNDU0LDYgKzQ1Nyw3MCBAQAoga2VybmVsX2RiZ19leGM6CiAJYgkuCS8qIE5ZSSAqLwogCisvKiBEZWJ1ZyBleGNlcHRpb24gYXMgYSBkZWJ1ZyBpbnRlcnJ1cHQqLworCVNUQVJUX0VYQ0VQVElPTihkZWJ1Z19kZWJ1Zyk7CisJREJHX0VYQ0VQVElPTl9QUk9MT0coMHhkMDAsIFBST0xPR19BRERJVElPTl8yUkVHUykKKworCS8qCisJICogSWYgdGhlcmUgaXMgYSBzaW5nbGUgc3RlcCBvciBicmFuY2gtdGFrZW4gZXhjZXB0aW9uIGluIGFuCisJICogZXhjZXB0aW9uIGVudHJ5IHNlcXVlbmNlLCBpdCB3YXMgcHJvYmFibHkgbWVhbnQgdG8gYXBwbHkgdG8KKwkgKiB0aGUgY29kZSB3aGVyZSB0aGUgZXhjZXB0aW9uIG9jY3VycmVkIChzaW5jZSBleGNlcHRpb24gZW50cnkKKwkgKiBkb2Vzbid0IHR1cm4gb2ZmIERFIGF1dG9tYXRpY2FsbHkpLiAgV2Ugc2ltdWxhdGUgdGhlIGVmZmVjdAorCSAqIG9mIHR1cm5pbmcgb2ZmIERFIG9uIGVudHJ5IHRvIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIGJ5IHR1cm5pbmcKKwkgKiBvZmYgREUgaW4gdGhlIERTUlIxIHZhbHVlIGFuZCBjbGVhcmluZyB0aGUgZGVidWcgc3RhdHVzLgorCSAqLworCisJbWZzcHIJcjE0LFNQUk5fREJTUgkJLyogY2hlY2sgc2luZ2xlLXN0ZXAvYnJhbmNoIHRha2VuICovCisJYW5kaXMuCXIxNSxyMTQsREJTUl9JQ0BoCisJYmVxKwkxZgorCisJTE9BRF9SRUdfSU1NRURJQVRFKHIxNCxpbnRlcnJ1cHRfYmFzZV9ib29rM2UpCisJTE9BRF9SRUdfSU1NRURJQVRFKHIxNSxpbnRlcnJ1cHRfZW5kX2Jvb2szZSkKKwljbXBsZAljcjAscjEwLHIxNAorCWNtcGxkCWNyMSxyMTAscjE1CisJYmx0KwljcjAsMWYKKwliZ2UrCWNyMSwxZgorCisJLyogaGVyZSBpdCBsb29rcyBsaWtlIHdlIGdvdCBhbiBpbmFwcHJvcHJpYXRlIGRlYnVnIGV4Y2VwdGlvbi4gKi8KKwlsaXMJcjE0LERCU1JfSUNAaAkJLyogY2xlYXIgdGhlIElDIGV2ZW50ICovCisJcmx3aW5tCXIxMSxyMTEsMCx+TVNSX0RFCS8qIGNsZWFyIERFIGluIHRoZSBEU1JSMSB2YWx1ZSAqLworCW10c3ByCVNQUk5fREJTUixyMTQKKwltdHNwcglTUFJOX0RTUlIxLHIxMQorCWx3eglyMTAsUEFDQV9FWERCRytFWF9DUihyMTMpCS8qIHJlc3RvcmUgcmVnaXN0ZXJzICovCisJbGQJcjEsUEFDQV9FWERCRytFWF9SMShyMTMpCisJbGQJcjE0LFBBQ0FfRVhEQkcrRVhfUjE0KHIxMykKKwlsZAlyMTUsUEFDQV9FWERCRytFWF9SMTUocjEzKQorCW10Y3IJcjEwCisJbGQJcjEwLFBBQ0FfRVhEQkcrRVhfUjEwKHIxMykJLyogcmVzdG9yZSByZWdpc3RlcnMgKi8KKwlsZAlyMTEsUEFDQV9FWERCRytFWF9SMTEocjEzKQorCW1mc3ByCXIxMyxTUFJOX1NQUkdfREJHX1NDUkFUQ0gKKwlyZmRpCisKKwkvKiBOb3JtYWwgZGVidWcgZXhjZXB0aW9uICovCisJLyogWFhYIFdlIG9ubHkgaGFuZGxlIGNvbWluZyBmcm9tIHVzZXJzcGFjZSBmb3Igbm93IHNpbmNlIHdlIGNhbid0CisJICogICAgIHF1aXRlIHNhdmUgcHJvcGVybHkgYW4gaW50ZXJydXB0ZWQga2VybmVsIHN0YXRlIHlldAorCSAqLworMToJYW5kaS4JcjE0LHIxMSxNU1JfUFI7CQkvKiBjaGVjayBmb3IgdXNlcnNwYWNlIGFnYWluICovCisJYmVxCWtlcm5lbF9kYmdfZXhjOwkJLyogaWYgZnJvbSBrZXJuZWwgbW9kZSAqLworCisJLyogTm93IHdlIG1hc2ggdXAgdGhpbmdzIHRvIG1ha2UgaXQgbG9vayBsaWtlIHdlIGFyZSBjb21pbmcgb24gYQorCSAqIG5vcm1hbCBleGNlcHRpb24KKwkgKi8KKwltZnNwcglyMTUsU1BSTl9TUFJHX0RCR19TQ1JBVENICisJbXRzcHIJU1BSTl9TUFJHX0dFTl9TQ1JBVENILHIxNQorCW1mc3ByCXIxNCxTUFJOX0RCU1IKKwlFWENFUFRJT05fQ09NTU9OKDB4ZDAwLCBQQUNBX0VYREJHLCBJTlRTX0RJU0FCTEVfQUxMKQorCXN0ZAlyMTQsX0RTSVNSKHIxKQorCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKKwltcglyNCxyMTQKKwlsZAlyMTQsUEFDQV9FWERCRytFWF9SMTQocjEzKQorCWxkCXIxNSxQQUNBX0VYREJHK0VYX1IxNShyMTMpCisJYmwJLnNhdmVfbnZncHJzCisJYmwJLkRlYnVnRXhjZXB0aW9uCisJYgkucmV0X2Zyb21fZXhjZXB0CisKKwlNQVNLQUJMRV9FWENFUFRJT04oMHgyNjAsIHBlcmZtb24sIC5wZXJmb3JtYW5jZV9tb25pdG9yX2V4Y2VwdGlvbiwgQUNLX05PTkUpCisKIC8qIERvb3JiZWxsIGludGVycnVwdCAqLwogCU1BU0tBQkxFX0VYQ0VQVElPTigweDIwNzAsIGRvb3JiZWxsLCAuZG9vcmJlbGxfZXhjZXB0aW9uLCBBQ0tfTk9ORSkKIApAQCAtNDY4LDYgKzUzNSwxMSBAQAogLy8JYglyZXRfZnJvbV9jcml0X2V4Y2VwdAogCWIJLgogCisJTUFTS0FCTEVfRVhDRVBUSU9OKDB4MmMwLCBndWVzdF9kb29yYmVsbCwgLnVua25vd25fZXhjZXB0aW9uLCBBQ0tfTk9ORSkKKwlNQVNLQUJMRV9FWENFUFRJT04oMHgyZTAsIGd1ZXN0X2Rvb3JiZWxsX2NyaXQsIC51bmtub3duX2V4Y2VwdGlvbiwgQUNLX05PTkUpCisJTUFTS0FCTEVfRVhDRVBUSU9OKDB4MzEwLCBoeXBlcmNhbGwsIC51bmtub3duX2V4Y2VwdGlvbiwgQUNLX05PTkUpCisJTUFTS0FCTEVfRVhDRVBUSU9OKDB4MzIwLCBlaHByaXYsIC51bmtub3duX2V4Y2VwdGlvbiwgQUNLX05PTkUpCisKIAogLyoKICAqIEFuIGludGVycnVwdCBjYW1lIGluIHdoaWxlIHNvZnQtZGlzYWJsZWQ7IGNsZWFyIEVFIGluIFNSUjEsCkBAIC01ODcsNyArNjU5LDEyIEBACiBCQURfU1RBQ0tfVFJBTVBPTElORSgweDAwMCkKIEJBRF9TVEFDS19UUkFNUE9MSU5FKDB4MTAwKQogQkFEX1NUQUNLX1RSQU1QT0xJTkUoMHgyMDApCitCQURfU1RBQ0tfVFJBTVBPTElORSgweDI2MCkKK0JBRF9TVEFDS19UUkFNUE9MSU5FKDB4MmMwKQorQkFEX1NUQUNLX1RSQU1QT0xJTkUoMHgyZTApCiBCQURfU1RBQ0tfVFJBTVBPTElORSgweDMwMCkKK0JBRF9TVEFDS19UUkFNUE9MSU5FKDB4MzEwKQorQkFEX1NUQUNLX1RSQU1QT0xJTkUoMHgzMjApCiBCQURfU1RBQ0tfVFJBTVBPTElORSgweDQwMCkKIEJBRF9TVEFDS19UUkFNUE9MSU5FKDB4NTAwKQogQkFEX1NUQUNLX1RSQU1QT0xJTkUoMHg2MDApCkBAIC04NjQsOCArOTQxLDIzIEBACiAJICogdGhhdCB3aWxsIGhhdmUgdG8gYmUgbWFkZSBkZXBlbmRlbnQgb24gd2hldGhlciB3ZSBhcmUgcnVubmluZyB1bmRlcgogCSAqIGEgaHlwZXJ2aXNvciBJIHN1cHBvc2UuCiAJICovCi0Jb3JpCXIzLHIzLE1BUzBfSEVTIHwgTUFTMF9XUV9BTExXQVlTCi0JbXRzcHIJU1BSTl9NQVMwLHIzCisKKwkvKiBCRVdBUkUsIE1BR0lDCisJICogVGhpcyBjb2RlIGlzIGNhbGxlZCBhcyBhbiBvcmRpbmFyeSBmdW5jdGlvbiBvbiB0aGUgYm9vdCBDUFUuIEJ1dCB0bworCSAqIGF2b2lkIGR1cGxpY2F0aW9uLCB0aGlzIGNvZGUgaXMgYWxzbyB1c2VkIGluIFNDT00gYnJpbmd1cCBvZgorCSAqIHNlY29uZGFyeSBDUFVzLiBXZSByZWFkIHRoZSBjb2RlIGJldHdlZW4gdGhlIGluaXRpYWxfdGxiX2NvZGVfc3RhcnQKKwkgKiBhbmQgaW5pdGlhbF90bGJfY29kZV9lbmQgbGFiZWxzIG9uZSBpbnN0cnVjdGlvbiBhdCBhIHRpbWUgYW5kIFJBTSBpdAorCSAqIGludG8gdGhlIG5ldyBjb3JlIHZpYSBTQ09NLiBUaGF0IGRvZXNuJ3QgcHJvY2VzcyBicmFuY2hlcywgc28gdGhlcmUKKwkgKiBtdXN0IGJlIG5vbmUgYmV0d2VlbiB0aG9zZSB0d28gbGFiZWxzLiBJdCBhbHNvIG1lYW5zIGlmIHRoaXMgY29kZQorCSAqIGV2ZXIgdGFrZXMgYW55IHBhcmFtZXRlcnMsIHRoZSBTQ09NIGNvZGUgbXVzdCBhbHNvIGJlIHVwZGF0ZWQgdG8KKwkgKiBwcm92aWRlIHRoZW0uCisJICovCisJLmdsb2JsIGEyX3RsYmluaXRfY29kZV9zdGFydAorYTJfdGxiaW5pdF9jb2RlX3N0YXJ0OgorCisJb3JpCXIxMSxyMyxNQVMwX1dRX0FMTFdBWVMKKwlvcmlzCXIxMSxyMTEsTUFTMF9FU0VMKDMpQGggLyogVXNlIHdheSAzOiB3b3JrYXJvdW5kIEEyIGVycmF0dW0gMzc2ICovCisJbXRzcHIJU1BSTl9NQVMwLHIxMQogCWxpcwlyMywoTUFTMV9WQUxJRCB8IE1BUzFfSVBST1QpQGgKIAlvcmkJcjMscjMsQk9PSzNFX1BBR0VTWl8xR0IgPDwgTUFTMV9UU0laRV9TSElGVAogCW10c3ByCVNQUk5fTUFTMSxyMwpAQCAtODc5LDE4ICs5NzEsODYgQEAKIAkvKiBXcml0ZSB0aGUgVExCIGVudHJ5ICovCiAJdGxid2UKIAorCS5nbG9ibCBhMl90bGJpbml0X2FmdGVyX2xpbmVhcl9tYXAKK2EyX3RsYmluaXRfYWZ0ZXJfbGluZWFyX21hcDoKKwogCS8qIE5vdyB3ZSBicmFuY2ggdGhlIG5ldyB2aXJ0dWFsIGFkZHJlc3MgbWFwcGVkIGJ5IHRoaXMgZW50cnkgKi8KIAlMT0FEX1JFR19JTU1FRElBVEUocjMsMWYpCiAJbXRjdHIJcjMKIAliY3RyCiAKIDE6CS8qIFdlIGFyZSBub3cgcnVubmluZyBhdCBQQUdFX09GRlNFVCwgY2xlYW4gdGhlIFRMQiBvZiBldmVyeXRoaW5nCi0JICogZWxzZSAoWFhYIHdlIHNob3VsZCBzY2FuIGZvciBib2x0ZWQgY3JhcCBmcm9tIHRoZSBmaXJtd2FyZSB0b28pCisJICogZWxzZSAoaW5jbHVkaW5nIElQUk9UZWQgdGhpbmdzIGxlZnQgYnkgZmlybXdhcmUpCisJICogcjQgPSBUTEJuQ0ZHCisJICogcjMgPSBjdXJyZW50IGFkZHJlc3MgKG1vcmUgb3IgbGVzcykKIAkgKi8KKworCWxpCXI1LDAKKwltdHNwcglTUFJOX01BUzYscjUKKwl0bGJzeAkwLHIzCisKKwlybHdpbm0JcjkscjQsMCxUTEJuQ0ZHX05fRU5UUlkKKwlybHdpbm0JcjEwLHI0LDgsMHhmZgorCWFkZGkJcjEwLHIxMCwtMQkvKiBHZXQgaW5uZXIgbG9vcCBtYXNrICovCisKKwlsaQlyMywxCisKKwltZnNwcglyNSxTUFJOX01BUzEKKwlybHdpbm0JcjUscjUsMCwofihNQVMxX1ZBTElEfE1BUzFfSVBST1QpKQorCisJbWZzcHIJcjYsU1BSTl9NQVMyCisJcmxkaWNyCXI2LHI2LDAsNTEJCS8qIEV4dHJhY3QgRVBOICovCisKKwltZnNwcglyNyxTUFJOX01BUzAKKwlybHdpbm0JcjcscjcsMCwweGZmZmYwZmZmCS8qIENsZWFyIEhFUyBhbmQgV1EgKi8KKworCXJsd2lubQlyOCxyNywxNiwweGZmZgkJLyogRXh0cmFjdCBFU0VMICovCisKKzI6CWFkZAlyNCxyMyxyOAorCWFuZAlyNCxyNCxyMTAKKworCXJsd2ltaQlyNyxyNCwxNixNQVMwX0VTRUxfTUFTSworCisJbXRzcHIJU1BSTl9NQVMwLHI3CisJbXRzcHIJU1BSTl9NQVMxLHI1CisJbXRzcHIJU1BSTl9NQVMyLHI2CisJdGxid2UKKworCWFkZGkJcjMscjMsMQorCWFuZC4JcjQscjMscjEwCisKKwlibmUJM2YKKwlhZGRpcwlyNixyNiwoMTw8MzApQGgKKzM6CisJY21wdwlyMyxyOQorCWJsdAkyYgorCisJLmdsb2JsICBhMl90bGJpbml0X2FmdGVyX2lwcm90X2ZsdXNoCithMl90bGJpbml0X2FmdGVyX2lwcm90X2ZsdXNoOgorCisjaWZkZWYgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19XU1AKKwkvKiBOb3cgZXN0YWJsaXNoIGVhcmx5IGRlYnVnIG1hcHBpbmdzIGlmIGFwcGxpY2FibGUgKi8KKwkvKiBSZXN0b3JlIHRoZSBNQVMwIHdlIHVzZWQgZm9yIGxpbmVhciBtYXBwaW5nIGxvYWQgKi8KKwltdHNwcglTUFJOX01BUzAscjExCisKKwlsaXMJcjMsKE1BUzFfVkFMSUQgfCBNQVMxX0lQUk9UKUBoCisJb3JpCXIzLHIzLChCT09LM0VfUEFHRVNaXzRLIDw8IE1BUzFfVFNJWkVfU0hJRlQpCisJbXRzcHIJU1BSTl9NQVMxLHIzCisJTE9BRF9SRUdfSU1NRURJQVRFKHIzLCBXU1BfVUFSVF9WSVJUIHwgTUFTMl9JIHwgTUFTMl9HKQorCW10c3ByCVNQUk5fTUFTMixyMworCUxPQURfUkVHX0lNTUVESUFURShyMywgV1NQX1VBUlRfUEhZUyB8IE1BUzNfU1IgfCBNQVMzX1NXKQorCW10c3ByCVNQUk5fTUFTN19NQVMzLHIzCisJLyogcmUtdXNlIHRoZSBNQVM4IHZhbHVlIGZyb20gdGhlIGxpbmVhciBtYXBwaW5nICovCisJdGxid2UKKyNlbmRpZiAvKiBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1dTUCAqLworCiAJUFBDX1RMQklMWCgwLDAsMCkKIAlzeW5jCiAJaXN5bmMKIAorCS5nbG9ibCBhMl90bGJpbml0X2NvZGVfZW5kCithMl90bGJpbml0X2NvZGVfZW5kOgorCiAJLyogV2UgdHJhbnNsYXRlIExSIGFuZCByZXR1cm4gKi8KIAltZmxyCXIzCiAJdG92aXJ0KHIzLHIzKQpAQCAtMTA0MCwzICsxMjAwLDMzIEBACiAJc3luYwogCiAJYmxyCisKK19HTE9CQUwoc2V0dXBfcGVyZm1vbl9pdm9yKQorCVNFVF9JVk9SKDM1LCAweDI2MCkgLyogUGVyZm9ybWFuY2UgTW9uaXRvciAqLworCWJscgorCitfR0xPQkFMKHNldHVwX2Rvb3JiZWxsX2l2b3JzKQorCVNFVF9JVk9SKDM2LCAweDI4MCkgLyogUHJvY2Vzc29yIERvb3JiZWxsICovCisJU0VUX0lWT1IoMzcsIDB4MmEwKSAvKiBQcm9jZXNzb3IgRG9vcmJlbGwgQ3JpdCAqLworCisJLyogQ2hlY2sgTU1VQ0ZHW0xQSURTSVpFXSB0byBkZXRlcm1pbmUgaWYgd2UgaGF2ZSBjYXRlZ29yeSBFLkhWICovCisJbWZzcHIJcjEwLFNQUk5fTU1VQ0ZHCisJcmx3aW5tLglyMTAscjEwLDAsTU1VQ0ZHX0xQSURTSVpFCisJYmVxbHIKKworCVNFVF9JVk9SKDM4LCAweDJjMCkgLyogR3Vlc3QgUHJvY2Vzc29yIERvb3JiZWxsICovCisJU0VUX0lWT1IoMzksIDB4MmUwKSAvKiBHdWVzdCBQcm9jZXNzb3IgRG9vcmJlbGwgQ3JpdC9NQyAqLworCWJscgorCitfR0xPQkFMKHNldHVwX2Vodl9pdm9ycykKKwkvKgorCSAqIFdlIG1heSBiZSBydW5uaW5nIGFzIGEgZ3Vlc3QgYW5kIGxhY2sgRS5IViBldmVuIG9uIGEgY2hpcAorCSAqIHRoYXQgbm9ybWFsbHkgaGFzIGl0LgorCSAqLworCW1mc3ByCXIxMCxTUFJOX01NVUNGRworCXJsd2lubS4JcjEwLHIxMCwwLE1NVUNGR19MUElEU0laRQorCWJlcWxyCisKKwlTRVRfSVZPUig0MCwgMHgzMDApIC8qIEVtYmVkZGVkIEh5cGVydmlzb3IgU3lzdGVtIENhbGwgKi8KKwlTRVRfSVZPUig0MSwgMHgzMjApIC8qIEVtYmVkZGVkIEh5cGVydmlzb3IgUHJpdmlsZWdlICovCisJYmxyCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2V4Y2VwdGlvbnMtNjRzLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2V4Y2VwdGlvbnMtNjRzLlMKaW5kZXggYWViNzM5ZS4uYTg1ZjQ4NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9leGNlcHRpb25zLTY0cy5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZXhjZXB0aW9ucy02NHMuUwpAQCAtMzcsMjMgKzM3LDUxIEBACiAJLmdsb2JsIF9fc3RhcnRfaW50ZXJydXB0cwogX19zdGFydF9pbnRlcnJ1cHRzOgogCi0JU1REX0VYQ0VQVElPTl9QU0VSSUVTKDB4MTAwLCBzeXN0ZW1fcmVzZXQpCisJLmdsb2JsIHN5c3RlbV9yZXNldF9wU2VyaWVzOworc3lzdGVtX3Jlc2V0X3BTZXJpZXM6CisJSE1UX01FRElVTTsKKwlET19LVk0JMHgxMDA7CisJU0VUX1NDUkFUQ0gwKHIxMykKKyNpZmRlZiBDT05GSUdfUFBDX1A3X05BUAorQkVHSU5fRlRSX1NFQ1RJT04KKwkvKiBSdW5uaW5nIG5hdGl2ZSBvbiBhcmNoIDIuMDYgb3IgbGF0ZXIsIGNoZWNrIGlmIHdlIGFyZQorCSAqIHdha2luZyB1cCBmcm9tIG5hcC4gV2Ugb25seSBoYW5kbGUgbm8gc3RhdGUgbG9zcyBhbmQKKwkgKiBzdXBlcnZpc29yIHN0YXRlIGxvc3MuIFdlIGRvIC1ub3QtIGhhbmRsZSBoeXBlcnZpc29yCisJICogc3RhdGUgbG9zcyBhdCB0aGlzIHRpbWUuCisJICovCisJbWZzcHIJcjEzLFNQUk5fU1JSMQorCXJsd2lubQlyMTMscjEzLDQ3LTMxLDMwLDMxCisJY21wd2kJY3IwLHIxMywxCisJYm5lCTFmCisJYgkucG93ZXI3X3dha2V1cF9ub2xvc3MKKzE6CWNtcHdpCWNyMCxyMTMsMgorCWJuZQkxZgorCWIJLnBvd2VyN193YWtldXBfbG9zcworCS8qIFRvdGFsIGxvc3Mgb2YgSFYgc3RhdGUgaXMgZmF0YWwsIHdlIGNvdWxkIHRyeSB0byB1c2UgdGhlCisJICogUElSIHRvIGxvY2F0ZSBhIFBBQ0EsIHRoZW4gdXNlIGFuIGVtZXJnZW5jeSBzdGFjayBldGMuLi4KKwkgKiBidXQgZm9yIG5vdywgbGV0J3MganVzdCBzdGF5IHN0dWNrIGhlcmUKKwkgKi8KKzE6CWNtcHdpCWNyMCxyMTMsMworCWJlcQkuCitFTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9IVk1PREVfMjA2KQorI2VuZGlmIC8qIENPTkZJR19QUENfUDdfTkFQICovCisJRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTKFBBQ0FfRVhHRU4sIHN5c3RlbV9yZXNldF9jb21tb24sIEVYQ19TVEQpCiAKIAkuID0gMHgyMDAKIF9tYWNoaW5lX2NoZWNrX3BTZXJpZXM6CiAJSE1UX01FRElVTQogCURPX0tWTQkweDIwMAotCW10c3ByCVNQUk5fU1BSR19TQ1JBVENIMCxyMTMJCS8qIHNhdmUgcjEzICovCi0JRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTKFBBQ0FfRVhNQywgbWFjaGluZV9jaGVja19jb21tb24pCisJU0VUX1NDUkFUQ0gwKHIxMykKKwlFWENFUFRJT05fUFJPTE9HX1BTRVJJRVMoUEFDQV9FWE1DLCBtYWNoaW5lX2NoZWNrX2NvbW1vbiwgRVhDX1NURCkKIAogCS4gPSAweDMwMAogCS5nbG9ibCBkYXRhX2FjY2Vzc19wU2VyaWVzCiBkYXRhX2FjY2Vzc19wU2VyaWVzOgogCUhNVF9NRURJVU0KIAlET19LVk0JMHgzMDAKLQltdHNwcglTUFJOX1NQUkdfU0NSQVRDSDAscjEzCisJU0VUX1NDUkFUQ0gwKHIxMykKIEJFR0lOX0ZUUl9TRUNUSU9OCi0JbWZzcHIJcjEzLFNQUk5fU1BSR19QQUNBCisJR0VUX1BBQ0EocjEzKQogCXN0ZAlyOSxQQUNBX0VYU0xCK0VYX1I5KHIxMykKIAlzdGQJcjEwLFBBQ0FfRVhTTEIrRVhfUjEwKHIxMykKIAltZnNwcglyMTAsU1BSTl9EQVIKQEAgLTY3LDIyICs5NSwyMiBAQAogCXN0ZAlyMTEsUEFDQV9FWEdFTitFWF9SMTEocjEzKQogCWxkCXIxMSxQQUNBX0VYU0xCK0VYX1I5KHIxMykKIAlzdGQJcjEyLFBBQ0FfRVhHRU4rRVhfUjEyKHIxMykKLQltZnNwcglyMTIsU1BSTl9TUFJHX1NDUkFUQ0gwCisJR0VUX1NDUkFUQ0gwKHIxMikKIAlzdGQJcjEwLFBBQ0FfRVhHRU4rRVhfUjEwKHIxMykKIAlzdGQJcjExLFBBQ0FfRVhHRU4rRVhfUjkocjEzKQogCXN0ZAlyMTIsUEFDQV9FWEdFTitFWF9SMTMocjEzKQotCUVYQ0VQVElPTl9QUk9MT0dfUFNFUklFU18xKGRhdGFfYWNjZXNzX2NvbW1vbikKKwlFWENFUFRJT05fUFJPTE9HX1BTRVJJRVNfMShkYXRhX2FjY2Vzc19jb21tb24sIEVYQ19TVEQpCiBGVFJfU0VDVElPTl9FTFNFCi0JRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTKFBBQ0FfRVhHRU4sIGRhdGFfYWNjZXNzX2NvbW1vbikKLUFMVF9GVFJfU0VDVElPTl9FTkRfSUZDTFIoQ1BVX0ZUUl9TTEIpCisJRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTKFBBQ0FfRVhHRU4sIGRhdGFfYWNjZXNzX2NvbW1vbiwgRVhDX1NURCkKK0FMVF9NTVVfRlRSX1NFQ1RJT05fRU5EX0lGQ0xSKE1NVV9GVFJfU0xCKQogCiAJLiA9IDB4MzgwCiAJLmdsb2JsIGRhdGFfYWNjZXNzX3NsYl9wU2VyaWVzCiBkYXRhX2FjY2Vzc19zbGJfcFNlcmllczoKIAlITVRfTUVESVVNCiAJRE9fS1ZNCTB4MzgwCi0JbXRzcHIJU1BSTl9TUFJHX1NDUkFUQ0gwLHIxMwotCW1mc3ByCXIxMyxTUFJOX1NQUkdfUEFDQQkJLyogZ2V0IHBhY2EgYWRkcmVzcyBpbnRvIHIxMyAqLworCVNFVF9TQ1JBVENIMChyMTMpCisJR0VUX1BBQ0EocjEzKQogCXN0ZAlyMyxQQUNBX0VYU0xCK0VYX1IzKHIxMykKIAltZnNwcglyMyxTUFJOX0RBUgogCXN0ZAlyOSxQQUNBX0VYU0xCK0VYX1I5KHIxMykJLyogc2F2ZSByOSAtIHIxMiAqLwpAQCAtOTUsNyArMTIzLDcgQEAKIAlzdGQJcjEwLFBBQ0FfRVhTTEIrRVhfUjEwKHIxMykKIAlzdGQJcjExLFBBQ0FfRVhTTEIrRVhfUjExKHIxMykKIAlzdGQJcjEyLFBBQ0FfRVhTTEIrRVhfUjEyKHIxMykKLQltZnNwcglyMTAsU1BSTl9TUFJHX1NDUkFUQ0gwCisJR0VUX1NDUkFUQ0gwKHIxMCkKIAlzdGQJcjEwLFBBQ0FfRVhTTEIrRVhfUjEzKHIxMykKIAltZnNwcglyMTIsU1BSTl9TUlIxCQkvKiBhbmQgU1JSMSAqLwogI2lmbmRlZiBDT05GSUdfUkVMT0NBVEFCTEUKQEAgLTExMywxNSArMTQxLDE1IEBACiAJYmN0cgogI2VuZGlmCiAKLQlTVERfRVhDRVBUSU9OX1BTRVJJRVMoMHg0MDAsIGluc3RydWN0aW9uX2FjY2VzcykKKwlTVERfRVhDRVBUSU9OX1BTRVJJRVMoMHg0MDAsIDB4NDAwLCBpbnN0cnVjdGlvbl9hY2Nlc3MpCiAKIAkuID0gMHg0ODAKIAkuZ2xvYmwgaW5zdHJ1Y3Rpb25fYWNjZXNzX3NsYl9wU2VyaWVzCiBpbnN0cnVjdGlvbl9hY2Nlc3Nfc2xiX3BTZXJpZXM6CiAJSE1UX01FRElVTQogCURPX0tWTQkweDQ4MAotCW10c3ByCVNQUk5fU1BSR19TQ1JBVENIMCxyMTMKLQltZnNwcglyMTMsU1BSTl9TUFJHX1BBQ0EJCS8qIGdldCBwYWNhIGFkZHJlc3MgaW50byByMTMgKi8KKwlTRVRfU0NSQVRDSDAocjEzKQorCUdFVF9QQUNBKHIxMykKIAlzdGQJcjMsUEFDQV9FWFNMQitFWF9SMyhyMTMpCiAJbWZzcHIJcjMsU1BSTl9TUlIwCQkvKiBTUlIwIGlzIGZhdWx0aW5nIGFkZHJlc3MgKi8KIAlzdGQJcjksUEFDQV9FWFNMQitFWF9SOShyMTMpCS8qIHNhdmUgcjkgLSByMTIgKi8KQEAgLTEzNCw3ICsxNjIsNyBAQAogCXN0ZAlyMTAsUEFDQV9FWFNMQitFWF9SMTAocjEzKQogCXN0ZAlyMTEsUEFDQV9FWFNMQitFWF9SMTEocjEzKQogCXN0ZAlyMTIsUEFDQV9FWFNMQitFWF9SMTIocjEzKQotCW1mc3ByCXIxMCxTUFJOX1NQUkdfU0NSQVRDSDAKKwlHRVRfU0NSQVRDSDAocjEwKQogCXN0ZAlyMTAsUEFDQV9FWFNMQitFWF9SMTMocjEzKQogCW1mc3ByCXIxMixTUFJOX1NSUjEJCS8qIGFuZCBTUlIxICovCiAjaWZuZGVmIENPTkZJR19SRUxPQ0FUQUJMRQpAQCAtMTQ3LDEzICsxNzUsMjkgQEAKIAliY3RyCiAjZW5kaWYKIAotCU1BU0tBQkxFX0VYQ0VQVElPTl9QU0VSSUVTKDB4NTAwLCBoYXJkd2FyZV9pbnRlcnJ1cHQpCi0JU1REX0VYQ0VQVElPTl9QU0VSSUVTKDB4NjAwLCBhbGlnbm1lbnQpCi0JU1REX0VYQ0VQVElPTl9QU0VSSUVTKDB4NzAwLCBwcm9ncmFtX2NoZWNrKQotCVNURF9FWENFUFRJT05fUFNFUklFUygweDgwMCwgZnBfdW5hdmFpbGFibGUpCi0JTUFTS0FCTEVfRVhDRVBUSU9OX1BTRVJJRVMoMHg5MDAsIGRlY3JlbWVudGVyKQotCVNURF9FWENFUFRJT05fUFNFUklFUygweGEwMCwgdHJhcF8wYSkKLQlTVERfRVhDRVBUSU9OX1BTRVJJRVMoMHhiMDAsIHRyYXBfMGIpCisJLyogV2Ugb3BlbiBjb2RlIHRoZXNlIGFzIHdlIGNhbid0IGhhdmUgYSAiLiA9IHgiIChldmVuIHdpdGgKKwkgKiB4ID0gIi4iIHdpdGhpbiBhIGZlYXR1cmUgc2VjdGlvbgorCSAqLworCS4gPSAweDUwMDsKKwkuZ2xvYmwgaGFyZHdhcmVfaW50ZXJydXB0X3BTZXJpZXM7CisJLmdsb2JsIGhhcmR3YXJlX2ludGVycnVwdF9odjsKK2hhcmR3YXJlX2ludGVycnVwdF9wU2VyaWVzOgoraGFyZHdhcmVfaW50ZXJydXB0X2h2OgorCUJFR0lOX0ZUUl9TRUNUSU9OCisJCV9NQVNLQUJMRV9FWENFUFRJT05fUFNFUklFUygweDUwMCwgaGFyZHdhcmVfaW50ZXJydXB0LCBFWENfU1REKQorCUZUUl9TRUNUSU9OX0VMU0UKKwkJX01BU0tBQkxFX0VYQ0VQVElPTl9QU0VSSUVTKDB4NTAyLCBoYXJkd2FyZV9pbnRlcnJ1cHQsIEVYQ19IVikKKwlBTFRfRlRSX1NFQ1RJT05fRU5EX0lGQ0xSKENQVV9GVFJfSFZNT0RFXzIwNikKKworCVNURF9FWENFUFRJT05fUFNFUklFUygweDYwMCwgMHg2MDAsIGFsaWdubWVudCkKKwlTVERfRVhDRVBUSU9OX1BTRVJJRVMoMHg3MDAsIDB4NzAwLCBwcm9ncmFtX2NoZWNrKQorCVNURF9FWENFUFRJT05fUFNFUklFUygweDgwMCwgMHg4MDAsIGZwX3VuYXZhaWxhYmxlKQorCisJTUFTS0FCTEVfRVhDRVBUSU9OX1BTRVJJRVMoMHg5MDAsIDB4OTAwLCBkZWNyZW1lbnRlcikKKwlNQVNLQUJMRV9FWENFUFRJT05fSFYoMHg5ODAsIDB4OTgwLCBkZWNyZW1lbnRlcikKKworCVNURF9FWENFUFRJT05fUFNFUklFUygweGEwMCwgMHhhMDAsIHRyYXBfMGEpCisJU1REX0VYQ0VQVElPTl9QU0VSSUVTKDB4YjAwLCAweGIwMCwgdHJhcF8wYikKIAogCS4gPSAweGMwMAogCS5nbG9ibAlzeXN0ZW1fY2FsbF9wU2VyaWVzCkBAIC0xNjUsMTMgKzIwOSwxMyBAQAogCWJlcS0JMWYKIEVORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX1JFQUxfTEUpCiAJbXIJcjkscjEzCi0JbWZzcHIJcjEzLFNQUk5fU1BSR19QQUNBCisJR0VUX1BBQ0EocjEzKQogCW1mc3ByCXIxMSxTUFJOX1NSUjAKLQlsZAlyMTIsUEFDQUtCQVNFKHIxMykKLQlsZAlyMTAsUEFDQUtNU1IocjEzKQotCUxPQURfSEFORExFUihyMTIsIHN5c3RlbV9jYWxsX2VudHJ5KQotCW10c3ByCVNQUk5fU1JSMCxyMTIKIAltZnNwcglyMTIsU1BSTl9TUlIxCisJbGQJcjEwLFBBQ0FLQkFTRShyMTMpCisJTE9BRF9IQU5ETEVSKHIxMCwgc3lzdGVtX2NhbGxfZW50cnkpCisJbXRzcHIJU1BSTl9TUlIwLHIxMAorCWxkCXIxMCxQQUNBS01TUihyMTMpCiAJbXRzcHIJU1BSTl9TUlIxLHIxMAogCXJmaWQKIAliCS4JLyogcHJldmVudCBzcGVjdWxhdGl2ZSBleGVjdXRpb24gKi8KQEAgLTE4Myw4ICsyMjcsMjEgQEAKIAlyZmlkCQkvKiByZXR1cm4gdG8gdXNlcnNwYWNlICovCiAJYgkuCiAKLQlTVERfRVhDRVBUSU9OX1BTRVJJRVMoMHhkMDAsIHNpbmdsZV9zdGVwKQotCVNURF9FWENFUFRJT05fUFNFUklFUygweGUwMCwgdHJhcF8wZSkKKwlTVERfRVhDRVBUSU9OX1BTRVJJRVMoMHhkMDAsIDB4ZDAwLCBzaW5nbGVfc3RlcCkKKworCS8qIEF0IDB4ZT8/PyB3ZSBoYXZlIGEgYnVuY2ggb2YgaHlwZXJ2aXNvciBleGNlcHRpb25zLCB3ZSBicmFuY2gKKwkgKiBvdXQgb2YgbGluZSB0byBoYW5kbGUgdGhlbQorCSAqLworCS4gPSAweGUwMAorCWIJaF9kYXRhX3N0b3JhZ2VfaHYKKwkuID0gMHhlMjAKKwliCWhfaW5zdHJfc3RvcmFnZV9odgorCS4gPSAweGU0MAorCWIJZW11bGF0aW9uX2Fzc2lzdF9odgorCS4gPSAweGU1MAorCWIJaG1pX2V4Y2VwdGlvbl9odgorCS4gPSAweGU2MAorCWIJaG1pX2V4Y2VwdGlvbl9odgogCiAJLyogV2UgbmVlZCB0byBkZWFsIHdpdGggdGhlIEFsdGl2ZWMgdW5hdmFpbGFibGUgZXhjZXB0aW9uCiAJICogaGVyZSB3aGljaCBpcyBhdCAweGYyMCwgdGh1cyBpbiB0aGUgbWlkZGxlIG9mIHRoZQpAQCAtMTkzLDM5ICsyNTAsNDIgQEAKIAkgKi8KIHBlcmZvcm1hbmNlX21vbml0b3JfcFNlcmllc18xOgogCS4gPSAweGYwMAotCURPX0tWTQkweGYwMAogCWIJcGVyZm9ybWFuY2VfbW9uaXRvcl9wU2VyaWVzCiAKIGFsdGl2ZWNfdW5hdmFpbGFibGVfcFNlcmllc18xOgogCS4gPSAweGYyMAotCURPX0tWTQkweGYyMAogCWIJYWx0aXZlY191bmF2YWlsYWJsZV9wU2VyaWVzCiAKIHZzeF91bmF2YWlsYWJsZV9wU2VyaWVzXzE6CiAJLiA9IDB4ZjQwCi0JRE9fS1ZNCTB4ZjQwCiAJYgl2c3hfdW5hdmFpbGFibGVfcFNlcmllcwogCiAjaWZkZWYgQ09ORklHX0NCRV9SQVMKLQlIU1REX0VYQ0VQVElPTl9QU0VSSUVTKDB4MTIwMCwgY2JlX3N5c3RlbV9lcnJvcikKKwlTVERfRVhDRVBUSU9OX0hWKDB4MTIwMCwgMHgxMjAyLCBjYmVfc3lzdGVtX2Vycm9yKQogI2VuZGlmIC8qIENPTkZJR19DQkVfUkFTICovCi0JU1REX0VYQ0VQVElPTl9QU0VSSUVTKDB4MTMwMCwgaW5zdHJ1Y3Rpb25fYnJlYWtwb2ludCkKKwlTVERfRVhDRVBUSU9OX1BTRVJJRVMoMHgxMzAwLCAweDEzMDAsIGluc3RydWN0aW9uX2JyZWFrcG9pbnQpCiAjaWZkZWYgQ09ORklHX0NCRV9SQVMKLQlIU1REX0VYQ0VQVElPTl9QU0VSSUVTKDB4MTYwMCwgY2JlX21haW50ZW5hbmNlKQorCVNURF9FWENFUFRJT05fSFYoMHgxNjAwLCAweDE2MDIsIGNiZV9tYWludGVuYW5jZSkKICNlbmRpZiAvKiBDT05GSUdfQ0JFX1JBUyAqLwotCVNURF9FWENFUFRJT05fUFNFUklFUygweDE3MDAsIGFsdGl2ZWNfYXNzaXN0KQorCVNURF9FWENFUFRJT05fUFNFUklFUygweDE3MDAsIDB4MTcwMCwgYWx0aXZlY19hc3Npc3QpCiAjaWZkZWYgQ09ORklHX0NCRV9SQVMKLQlIU1REX0VYQ0VQVElPTl9QU0VSSUVTKDB4MTgwMCwgY2JlX3RoZXJtYWwpCisJU1REX0VYQ0VQVElPTl9IVigweDE4MDAsIDB4MTgwMiwgY2JlX3RoZXJtYWwpCiAjZW5kaWYgLyogQ09ORklHX0NCRV9SQVMgKi8KIAogCS4gPSAweDMwMDAKIAotLyoqKiBwU2VyaWVzIGludGVycnVwdCBzdXBwb3J0ICoqKi8KKy8qKiogT3V0IG9mIGxpbmUgaW50ZXJydXB0cyBzdXBwb3J0ICoqKi8KKworCS8qIG1vdmVkIGZyb20gMHhlMDAgKi8KKwlTVERfRVhDRVBUSU9OX0hWKC4sIDB4ZTAwLCBoX2RhdGFfc3RvcmFnZSkKKwlTVERfRVhDRVBUSU9OX0hWKC4sIDB4ZTIwLCBoX2luc3RyX3N0b3JhZ2UpCisJU1REX0VYQ0VQVElPTl9IViguLCAweGU0MCwgZW11bGF0aW9uX2Fzc2lzdCkKKwlTVERfRVhDRVBUSU9OX0hWKC4sIDB4ZTYwLCBobWlfZXhjZXB0aW9uKSAvKiBuZWVkIHRvIGZsdXNoIGNhY2hlID8gKi8KIAogCS8qIG1vdmVkIGZyb20gMHhmMDAgKi8KLQlTVERfRVhDRVBUSU9OX1BTRVJJRVMoLiwgcGVyZm9ybWFuY2VfbW9uaXRvcikKLQlTVERfRVhDRVBUSU9OX1BTRVJJRVMoLiwgYWx0aXZlY191bmF2YWlsYWJsZSkKLQlTVERfRVhDRVBUSU9OX1BTRVJJRVMoLiwgdnN4X3VuYXZhaWxhYmxlKQorCVNURF9FWENFUFRJT05fUFNFUklFUyguLCAweGYwMCwgcGVyZm9ybWFuY2VfbW9uaXRvcikKKwlTVERfRVhDRVBUSU9OX1BTRVJJRVMoLiwgMHhmMjAsIGFsdGl2ZWNfdW5hdmFpbGFibGUpCisJU1REX0VYQ0VQVElPTl9QU0VSSUVTKC4sIDB4ZjQwLCB2c3hfdW5hdmFpbGFibGUpCiAKIC8qCiAgKiBBbiBpbnRlcnJ1cHQgY2FtZSBpbiB3aGlsZSBzb2Z0LWRpc2FibGVkOyBjbGVhciBFRSBpbiBTUlIxLApAQCAtMjQwLDE3ICszMDAsMzAgQEAKIAlyb3RsZGkJcjEwLHIxMCwxNgogCW10c3ByCVNQUk5fU1JSMSxyMTAKIAlsZAlyMTAsUEFDQV9FWEdFTitFWF9SMTAocjEzKQotCW1mc3ByCXIxMyxTUFJOX1NQUkdfU0NSQVRDSDAKKwlHRVRfU0NSQVRDSDAocjEzKQogCXJmaWQKIAliCS4KIAorbWFza2VkX0hpbnRlcnJ1cHQ6CisJc3RiCXIxMCxQQUNBSEFSRElSUUVOKHIxMykKKwltdGNyZgkweDgwLHI5CisJbGQJcjksUEFDQV9FWEdFTitFWF9SOShyMTMpCisJbWZzcHIJcjEwLFNQUk5fSFNSUjEKKwlybGRpY2wJcjEwLHIxMCw0OCwxCQkvKiBjbGVhciBNU1JfRUUgKi8KKwlyb3RsZGkJcjEwLHIxMCwxNgorCW10c3ByCVNQUk5fSFNSUjEscjEwCisJbGQJcjEwLFBBQ0FfRVhHRU4rRVhfUjEwKHIxMykKKwlHRVRfU0NSQVRDSDAocjEzKQorCWhyZmlkCisJYgkuCisKIAkuYWxpZ24JNwogZG9fc3RhYl9ib2x0ZWRfcFNlcmllczoKIAlzdGQJcjExLFBBQ0FfRVhTTEIrRVhfUjExKHIxMykKIAlzdGQJcjEyLFBBQ0FfRVhTTEIrRVhfUjEyKHIxMykKLQltZnNwcglyMTAsU1BSTl9TUFJHX1NDUkFUQ0gwCisJR0VUX1NDUkFUQ0gwKHIxMCkKIAlzdGQJcjEwLFBBQ0FfRVhTTEIrRVhfUjEzKHIxMykKLQlFWENFUFRJT05fUFJPTE9HX1BTRVJJRVNfMSguZG9fc3RhYl9ib2x0ZWQpCisJRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTXzEoLmRvX3N0YWJfYm9sdGVkLCBFWENfU1REKQogCiAjaWZkZWYgQ09ORklHX1BQQ19QU0VSSUVTCiAvKgpAQCAtMjYwLDE1ICszMzMsMTUgQEAKICAgICAgIC5hbGlnbiA3CiBzeXN0ZW1fcmVzZXRfZndubWk6CiAJSE1UX01FRElVTQotCW10c3ByCVNQUk5fU1BSR19TQ1JBVENIMCxyMTMJCS8qIHNhdmUgcjEzICovCi0JRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTKFBBQ0FfRVhHRU4sIHN5c3RlbV9yZXNldF9jb21tb24pCisJU0VUX1NDUkFUQ0gwKHIxMykJCS8qIHNhdmUgcjEzICovCisJRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTKFBBQ0FfRVhHRU4sIHN5c3RlbV9yZXNldF9jb21tb24sIEVYQ19TVEQpCiAKIAkuZ2xvYmwgbWFjaGluZV9jaGVja19md25taQogICAgICAgLmFsaWduIDcKIG1hY2hpbmVfY2hlY2tfZndubWk6CiAJSE1UX01FRElVTQotCW10c3ByCVNQUk5fU1BSR19TQ1JBVENIMCxyMTMJCS8qIHNhdmUgcjEzICovCi0JRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTKFBBQ0FfRVhNQywgbWFjaGluZV9jaGVja19jb21tb24pCisJU0VUX1NDUkFUQ0gwKHIxMykJCS8qIHNhdmUgcjEzICovCisJRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTKFBBQ0FfRVhNQywgbWFjaGluZV9jaGVja19jb21tb24sIEVYQ19TVEQpCiAKICNlbmRpZiAvKiBDT05GSUdfUFBDX1BTRVJJRVMgKi8KIApAQCAtMjgyLDcgKzM1NSw3IEBACiAJc3RkCXIxMCxQQUNBX0VYR0VOK0VYX1IxMChyMTMpCiAJc3RkCXIxMSxQQUNBX0VYR0VOK0VYX1IxMShyMTMpCiAJc3RkCXIxMixQQUNBX0VYR0VOK0VYX1IxMihyMTMpCi0JbWZzcHIJcjEwLFNQUkdfU0NSQVRDSDAKKwlHRVRfU0NSQVRDSDAocjEwKQogCWxkCXIxMSxQQUNBX0VYU0xCK0VYX1I5KHIxMykKIAlsZAlyMTIsUEFDQV9FWFNMQitFWF9SMyhyMTMpCiAJc3RkCXIxMCxQQUNBX0VYR0VOK0VYX1IxMyhyMTMpCkBAIC0zNDIsNiArNDE1LDggQEAKIAlTVERfRVhDRVBUSU9OX0NPTU1PTigweGIwMCwgdHJhcF8wYiwgLnVua25vd25fZXhjZXB0aW9uKQogCVNURF9FWENFUFRJT05fQ09NTU9OKDB4ZDAwLCBzaW5nbGVfc3RlcCwgLnNpbmdsZV9zdGVwX2V4Y2VwdGlvbikKIAlTVERfRVhDRVBUSU9OX0NPTU1PTigweGUwMCwgdHJhcF8wZSwgLnVua25vd25fZXhjZXB0aW9uKQorICAgICAgICBTVERfRVhDRVBUSU9OX0NPTU1PTigweGU0MCwgZW11bGF0aW9uX2Fzc2lzdCwgLnByb2dyYW1fY2hlY2tfZXhjZXB0aW9uKQorICAgICAgICBTVERfRVhDRVBUSU9OX0NPTU1PTigweGU2MCwgaG1pX2V4Y2VwdGlvbiwgLnVua25vd25fZXhjZXB0aW9uKQogCVNURF9FWENFUFRJT05fQ09NTU9OX0lETEUoMHhmMDAsIHBlcmZvcm1hbmNlX21vbml0b3IsIC5wZXJmb3JtYW5jZV9tb25pdG9yX2V4Y2VwdGlvbikKIAlTVERfRVhDRVBUSU9OX0NPTU1PTigweDEzMDAsIGluc3RydWN0aW9uX2JyZWFrcG9pbnQsIC5pbnN0cnVjdGlvbl9icmVha3BvaW50X2V4Y2VwdGlvbikKICNpZmRlZiBDT05GSUdfQUxUSVZFQwpAQCAtMzg2LDkgKzQ2MSwyNCBAQAogCXN0ZAlyMTIsX1hFUihyMSkKIAlTQVZFX0dQUigwLHIxKQogCVNBVkVfR1BSKDIscjEpCi0JU0FWRV80R1BSUygzLHIxKQotCVNBVkVfMkdQUlMoNyxyMSkKLQlTQVZFXzEwR1BSUygxMixyMSkKKwlsZAlyMTAsRVhfUjMocjMpCisJc3RkCXIxMCxHUFIzKHIxKQorCVNBVkVfR1BSKDQscjEpCisJU0FWRV80R1BSUyg1LHIxKQorCWxkCXI5LEVYX1I5KHIzKQorCWxkCXIxMCxFWF9SMTAocjMpCisJU0FWRV8yR1BSUyg5LHIxKQorCWxkCXI5LEVYX1IxMShyMykKKwlsZAlyMTAsRVhfUjEyKHIzKQorCWxkCXIxMSxFWF9SMTMocjMpCisJc3RkCXI5LEdQUjExKHIxKQorCXN0ZAlyMTAsR1BSMTIocjEpCisJc3RkCXIxMSxHUFIxMyhyMSkKK0JFR0lOX0ZUUl9TRUNUSU9OCisJbGQJcjEwLEVYX0NGQVIocjMpCisJc3RkCXIxMCxPUklHX0dQUjMocjEpCitFTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9DRkFSKQorCVNBVkVfOEdQUlMoMTQscjEpCiAJU0FWRV8xMEdQUlMoMjIscjEpCiAJbGh6CXIxMixQQUNBX1RSQVBfU0FWRShyMTMpCiAJc3RkCXIxMixfVFJBUChyMSkKQEAgLTM5Nyw2ICs0ODcsOSBAQAogCWxpCXIxMiwwCiAJc3RkCXIxMiwwKHIxMSkKIAlsZAlyMixQQUNBVE9DKHIxMykKKwlsZAlyMTEsZXhjZXB0aW9uX21hcmtlckB0b2MocjIpCisJc3RkCXIxMixSRVNVTFQocjEpCisJc3RkCXIxMSxTVEFDS19GUkFNRV9PVkVSSEVBRC0xNihyMSkKIDE6CWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKIAlibAkua2VybmVsX2JhZF9zdGFjawogCWIJMWIKQEAgLTQxOSw2ICs1MTIsMTkgQEAKIAlsaQlyNSwweDMwMAogCWIJLmRvX2hhc2hfcGFnZQkgCS8qIFRyeSB0byBoYW5kbGUgYXMgaHB0ZSBmYXVsdCAqLwogCisJLmFsaWduICA3CisgICAgICAgIC5nbG9ibCAgaF9kYXRhX3N0b3JhZ2VfY29tbW9uCitoX2RhdGFfc3RvcmFnZV9jb21tb246CisgICAgICAgIG1mc3ByICAgcjEwLFNQUk5fSERBUgorICAgICAgICBzdGQgICAgIHIxMCxQQUNBX0VYR0VOK0VYX0RBUihyMTMpCisgICAgICAgIG1mc3ByICAgcjEwLFNQUk5fSERTSVNSCisgICAgICAgIHN0dyAgICAgcjEwLFBBQ0FfRVhHRU4rRVhfRFNJU1IocjEzKQorICAgICAgICBFWENFUFRJT05fUFJPTE9HX0NPTU1PTigweGUwMCwgUEFDQV9FWEdFTikKKyAgICAgICAgYmwgICAgICAuc2F2ZV9udmdwcnMKKyAgICAgICAgYWRkaSAgICByMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAorICAgICAgICBibCAgICAgIC51bmtub3duX2V4Y2VwdGlvbgorICAgICAgICBiICAgICAgIC5yZXRfZnJvbV9leGNlcHQKKwogCS5hbGlnbgk3CiAJLmdsb2JsIGluc3RydWN0aW9uX2FjY2Vzc19jb21tb24KIGluc3RydWN0aW9uX2FjY2Vzc19jb21tb246CkBAIC00MjgsNiArNTM0LDggQEAKIAlsaQlyNSwweDQwMAogCWIJLmRvX2hhc2hfcGFnZQkJLyogVHJ5IHRvIGhhbmRsZSBhcyBocHRlIGZhdWx0ICovCiAKKyAgICAgICAgU1REX0VYQ0VQVElPTl9DT01NT04oMHhlMjAsIGhfaW5zdHJfc3RvcmFnZSwgLnVua25vd25fZXhjZXB0aW9uKQorCiAvKgogICogSGVyZSBpcyB0aGUgY29tbW9uIFNMQiBtaXNzIHVzZXIgdGhhdCBpcyB1c2VkIHdoZW4gZ29pbmcgdG8gdmlydHVhbAogICogbW9kZSBmb3IgU0xCIG1pc3NlcywgdGhhdCBpcyBjdXJyZW50bHkgbm90IHVzZWQKQEAgLTc1MCw3ICs4NTgsNyBAQAogQkVHSU5fRlRSX1NFQ1RJT04KIAlhbmRpcy4JcjAscjQsMHgwMDIwCQkvKiBJcyBpdCBhIHNlZ21lbnQgdGFibGUgZmF1bHQ/ICovCiAJYm5lLQlkb19zdGVfYWxsb2MJCS8qIElmIHNvIGhhbmRsZSBpdCAqLwotRU5EX0ZUUl9TRUNUSU9OX0lGQ0xSKENQVV9GVFJfU0xCKQorRU5EX01NVV9GVFJfU0VDVElPTl9JRkNMUihNTVVfRlRSX1NMQikKIAogCWNscnJkaQlyMTEscjEsVEhSRUFEX1NISUZUCiAJbHd6CXIwLFRJX1BSRUVNUFQocjExKQkvKiBJZiB3ZSdyZSBpbiBhbiAiTk1JIiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzMyLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUwppbmRleCBjNWMyNGJlLi5iYTI1MGQ1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUwpAQCAtODA1LDE5ICs4MDUsNiBAQAogCWJscgogCiAjaWZkZWYgQ09ORklHX1NNUAotI2lmZGVmIENPTkZJR19HRU1JTkkKLQkuZ2xvYmwJX19zZWNvbmRhcnlfc3RhcnRfZ2VtaW5pCi1fX3NlY29uZGFyeV9zdGFydF9nZW1pbmk6Ci0gICAgICAgIG1mc3ByICAgcjQsU1BSTl9ISUQwCi0gICAgICAgIG9yaSAgICAgcjQscjQsSElEMF9JQ0ZJCi0gICAgICAgIGxpICAgICAgcjMsMAotICAgICAgICBvcmkgICAgIHIzLHIzLEhJRDBfSUNFCi0gICAgICAgIGFuZGMgICAgcjQscjQscjMKLSAgICAgICAgbXRzcHIgICBTUFJOX0hJRDAscjQKLSAgICAgICAgc3luYwotICAgICAgICBiICAgICAgIF9fc2Vjb25kYXJ5X3N0YXJ0Ci0jZW5kaWYgLyogQ09ORklHX0dFTUlOSSAqLwotCiAJLmdsb2JsIF9fc2Vjb25kYXJ5X3N0YXJ0X21wYzg2eHgKIF9fc2Vjb25kYXJ5X3N0YXJ0X21wYzg2eHg6CiAJbWZzcHIJcjMsIFNQUk5fUElSCkBAIC04OTAsMTUgKzg3Nyw2IEBACiAJbXRzcHIJU1BSTl9TUlIxLHI0CiAJU1lOQwogCVJGSQotCi1fR0xPQkFMKHN0YXJ0X3NlY29uZGFyeV9yZXN1bWUpCi0JLyogUmVzZXQgc3RhY2sgKi8KLQlybHdpbm0JcjEscjEsMCwwLCgzMS1USFJFQURfU0hJRlQpCS8qIGN1cnJlbnRfdGhyZWFkX2luZm8oKSAqLwotCWFkZGkJcjEscjEsVEhSRUFEX1NJWkUtU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKLQlsaQlyMywwCi0Jc3RkCXIzLDAocjEpCQkvKiBaZXJvIHRoZSBzdGFjayBmcmFtZSBwb2ludGVyCSovCi0JYmwJc3RhcnRfc2Vjb25kYXJ5Ci0JYgkuCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiAjaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfSEFORExFUgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNjQuUwppbmRleCAzYTMxOWY5Li5iYTUwNDA5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNjQuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNjQuUwpAQCAtMTQ3LDYgKzE0Nyw4IEBACiAJbXRjdHIJcjQKIAltcglyMyxyMjQKIAlsaQlyNCwwCisJLyogTWFrZSBzdXJlIHRoYXQgcGF0Y2hlZCBjb2RlIGlzIHZpc2libGUgKi8KKwlpc3luYwogCWJjdHIKICNlbHNlCiAJQlVHX09QQ09ERQpAQCAtMjE2LDE5ICsyMTgsMjUgQEAKIAkgKi8KIAlMT0FEX1JFR19BRERSKHIxMywgcGFjYSkJLyogTG9hZCBwYWNhIHBvaW50ZXIJCSAqLwogCWxkCXIxMywwKHIxMykJCS8qIEdldCBiYXNlIHZhZGRyIG9mIHBhY2EgYXJyYXkJICovCisjaWZuZGVmIENPTkZJR19TTVAKKwlhZGRpCXIxMyxyMTMsUEFDQV9TSVpFCS8qIGtub3cgcjEzIGlmIHVzZWQgYWNjaWRlbnRhbGx5ICovCisJYgkua2V4ZWNfd2FpdAkJLyogd2FpdCBmb3IgbmV4dCBrZXJuZWwgaWYgIVNNUAkgKi8KKyNlbHNlCisJTE9BRF9SRUdfQUREUihyNywgbnJfY3B1X2lkcykJLyogTG9hZCBucl9jcHVfaWRzIGFkZHJlc3MgICAgICAgKi8KKwlsd3oJcjcsMChyNykJCS8qIGFsc28gdGhlIG1heCBwYWNhIGFsbG9jYXRlZCAJICovCiAJbGkJcjUsMAkJCS8qIGxvZ2ljYWwgY3B1IGlkICAgICAgICAgICAgICAgICovCiAxOglsaHoJcjYsUEFDQUhXQ1BVSUQocjEzKQkvKiBMb2FkIEhXIHByb2NpZCBmcm9tIHBhY2EgICAgICAqLwogCWNtcHcJcjYscjI0CQkJLyogQ29tcGFyZSB0byBvdXIgaWQgICAgICAgICAgICAgKi8KIAliZXEJMmYKIAlhZGRpCXIxMyxyMTMsUEFDQV9TSVpFCS8qIExvb3AgdG8gbmV4dCBQQUNBIG9uIG1pc3MgICAgICovCiAJYWRkaQlyNSxyNSwxCi0JY21wd2kJcjUsTlJfQ1BVUworCWNtcHcJcjUscjcJCQkvKiBDaGVjayBpZiBtb3JlIHBhY2FzIGV4aXN0ICAgICAqLwogCWJsdAkxYgogCiAJbXIJcjMscjI0CQkJLyogbm90IGZvdW5kLCBjb3B5IHBoeXMgdG8gcjMJICovCiAJYgkua2V4ZWNfd2FpdAkJLyogbmV4dCBrZXJuZWwgbWlnaHQgZG8gYmV0dGVyCSAqLwogCi0yOgltdHNwcglTUFJOX1NQUkdfUEFDQSxyMTMJLyogU2F2ZSB2YWRkciBvZiBwYWNhIGluIGFuIFNQUkcgKi8KKzI6CVNFVF9QQUNBKHIxMykKICNpZmRlZiBDT05GSUdfUFBDX0JPT0szRQogCWFkZGkJcjEyLHIxMyxQQUNBX0VYVExCCS8qIGFuZCBUTEIgZXhjIGZyYW1lIGluIGFub3RoZXIgICovCiAJbXRzcHIJU1BSTl9TUFJHX1RMQl9FWEZSQU1FLHIxMgpAQCAtMjM2LDM0ICsyNDQsMzkgQEAKIAogCS8qIEZyb20gbm93IG9uLCByMjQgaXMgZXhwZWN0ZWQgdG8gYmUgbG9naWNhbCBjcHVpZCAqLwogCW1yCXIyNCxyNQotMzoJSE1UX0xPVwotCWxieglyMjMsUEFDQVBST0NTVEFSVChyMTMpCS8qIFRlc3QgaWYgdGhpcyBwcm9jZXNzb3Igc2hvdWxkICovCi0JCQkJCS8qIHN0YXJ0LgkJCSAqLwotCi0jaWZuZGVmIENPTkZJR19TTVAKLQliCTNiCQkJLyogTmV2ZXIgZ28gb24gbm9uLVNNUAkJICovCi0jZWxzZQotCWNtcHdpCTAscjIzLDAKLQliZXEJM2IJCQkvKiBMb29wIHVudGlsIHRvbGQgdG8gZ28JICovCi0KLQlzeW5jCQkJCS8qIG9yZGVyIHBhY2EucnVuIGFuZCBjdXJfY3B1X3NwZWMgKi8KIAogCS8qIFNlZSBpZiB3ZSBuZWVkIHRvIGNhbGwgYSBjcHUgc3RhdGUgcmVzdG9yZSBoYW5kbGVyICovCiAJTE9BRF9SRUdfQUREUihyMjMsIGN1cl9jcHVfc3BlYykKIAlsZAlyMjMsMChyMjMpCiAJbGQJcjIzLENQVV9TUEVDX1JFU1RPUkUocjIzKQogCWNtcGRpCTAscjIzLDAKLQliZXEJNGYKKwliZXEJM2YKIAlsZAlyMjMsMChyMjMpCiAJbXRjdHIJcjIzCiAJYmN0cmwKIAotNDoJLyogQ3JlYXRlIGEgdGVtcCBrZXJuZWwgc3RhY2sgZm9yIHVzZSBiZWZvcmUgcmVsb2NhdGlvbiBpcyBvbi4JKi8KKzM6CUxPQURfUkVHX0FERFIocjMsIGJvb3RfY3B1X2NvdW50KSAvKiBEZWNyZW1lbnQgYm9vdF9jcHVfY291bnQgKi8KKwlsd2FyeAlyNCwwLHIzCisJc3ViaQlyNCxyNCwxCisJc3R3Y3guCXI0LDAscjMKKwlibmUJM2IKKwlpc3luYworCis0OglITVRfTE9XCisJbGJ6CXIyMyxQQUNBUFJPQ1NUQVJUKHIxMykJLyogVGVzdCBpZiB0aGlzIHByb2Nlc3NvciBzaG91bGQgKi8KKwkJCQkJLyogc3RhcnQuCQkJICovCisJY21wd2kJMCxyMjMsMAorCWJlcQk0YgkJCS8qIExvb3AgdW50aWwgdG9sZCB0byBnbwkgKi8KKworCXN5bmMJCQkJLyogb3JkZXIgcGFjYS5ydW4gYW5kIGN1cl9jcHVfc3BlYyAqLworCWlzeW5jCQkJCS8qIEluIGNhc2UgY29kZSBwYXRjaGluZyBoYXBwZW5lZCAqLworCisJLyogQ3JlYXRlIGEgdGVtcCBrZXJuZWwgc3RhY2sgZm9yIHVzZSBiZWZvcmUgcmVsb2NhdGlvbiBpcyBvbi4JKi8KIAlsZAlyMSxQQUNBRU1FUkdTUChyMTMpCiAJc3ViaQlyMSxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAogCiAJYglfX3NlY29uZGFyeV9zdGFydAotI2VuZGlmCisjZW5kaWYgLyogU01QICovCiAKIC8qCiAgKiBUdXJuIHRoZSBNTVUgb2ZmLgpAQCAtNTM0LDcgKzU0Nyw3IEBACiAJbGQJcjQsMChyNCkJCS8qIEdldCBiYXNlIHZhZGRyIG9mIHBhY2EgYXJyYXkJKi8KIAltdWxsaQlyMTMscjI0LFBBQ0FfU0laRQkvKiBDYWxjdWxhdGUgdmFkZHIgb2YgcmlnaHQgcGFjYSAqLwogCWFkZAlyMTMscjEzLHI0CQkvKiBmb3IgdGhpcyBwcm9jZXNzb3IuCQkqLwotCW10c3ByCVNQUk5fU1BSR19QQUNBLHIxMwkvKiBTYXZlIHZhZGRyIG9mIHBhY2EgaW4gYW4gU1BSRyovCisJU0VUX1BBQ0EocjEzKQkJCS8qIFNhdmUgdmFkZHIgb2YgcGFjYSBpbiBhbiBTUFJHKi8KIAogCS8qIE1hcmsgaW50ZXJydXB0cyBzb2Z0IGFuZCBoYXJkIGRpc2FibGVkICh0aGV5IG1pZ2h0IGJlIGVuYWJsZWQKIAkgKiBpbiB0aGUgUEFDQSB3aGVuIGRvaW5nIGhvdHBsdWcpCkBAIC02NDUsNyArNjU4LDcgQEAKIAlvcmlzCXIxMSxyMTEsMHg4MDAwCQkvKiBDTSBiaXQgc2V0LCB3ZSdsbCBzZXQgSUNNIGxhdGVyICovCiAJbXRtc3IJcjExCiAjZWxzZSAvKiBDT05GSUdfUFBDX0JPT0szRSAqLwotCWxpCXIxMiwoTVNSX1NGIHwgTVNSX0lTRilAaGlnaGVzdAorCWxpCXIxMiwoTVNSXzY0QklUIHwgTVNSX0lTRilAaGlnaGVzdAogCXNsZGkJcjEyLHIxMiw0OAogCW9yCXIxMSxyMTEscjEyCiAJbXRtc3JkCXIxMQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pZGxlX3Bvd2VyNy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pZGxlX3Bvd2VyNy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZjBiYzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lkbGVfcG93ZXI3LlMKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHBvd2VyX3NhdmUgZnVuY3Rpb24gZm9yIDk3MC1mYW1pbHkgQ1BVcy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgorI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3BwYy1vcGNvZGUuaD4KKworI3VuZGVmIERFQlVHCisKKwkudGV4dAorCitfR0xPQkFMKHBvd2VyN19pZGxlKQorCS8qIE5vdyBjaGVjayBpZiB1c2VyIG9yIGFyY2ggZW5hYmxlZCBOQVAgbW9kZSAqLworCUxPQURfUkVHX0FERFJCQVNFKHIzLHBvd2Vyc2F2ZV9uYXApCisJbHd6CXI0LEFERFJPRkYocG93ZXJzYXZlX25hcCkocjMpCisJY21wd2kJMCxyNCwwCisJYmVxbHIKKworCS8qIE5BUCBpcyBhIHN0YXRlIGxvc3MsIHdlIGNyZWF0ZSBhIHJlZ3MgZnJhbWUgb24gdGhlCisJICogc3RhY2ssIGZpbGwgaXQgdXAgd2l0aCB0aGUgc3RhdGUgd2UgY2FyZSBhYm91dCBhbmQKKwkgKiBzdGljayBhIHBvaW50ZXIgdG8gaXQgaW4gUEFDQVIxLiBXZSByZWFsbHkgb25seQorCSAqIG5lZWQgdG8gc2F2ZSBQQywgc29tZSBDUiBiaXRzIGFuZCB0aGUgTlYgR1BScywKKwkgKiBidXQgZm9yIG5vdyBhbiBpbnRlcnJ1cHQgZnJhbWUgd2lsbCBkby4KKwkgKi8KKwltZmxyCXIwCisJc3RkCXIwLDE2KHIxKQorCXN0ZHUJcjEsLUlOVF9GUkFNRV9TSVpFKHIxKQorCXN0ZAlyMCxfTElOSyhyMSkKKwlzdGQJcjAsX05JUChyMSkKKworI2lmbmRlZiBDT05GSUdfU01QCisJLyogTWFrZSBzdXJlIEZQVSwgVlNYIGV0Yy4uLiBhcmUgZmx1c2hlZCBhcyB3ZSBtYXkgbG9zZQorCSAqIHN0YXRlIHdoZW4gZ29pbmcgdG8gbmFwIG1vZGUKKwkgKi8KKwlibAkuZGlzY2FyZF9sYXp5X2NwdV9zdGF0ZQorI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworCS8qIEhhcmQgZGlzYWJsZSBpbnRlcnJ1cHRzICovCisJbWZtc3IJcjkKKwlybGRpY2wJcjkscjksNDgsMQorCXJvdGxkaQlyOSxyOSwxNgorCW10bXNyZAlyOSwxCQkJLyogaGFyZC1kaXNhYmxlIGludGVycnVwdHMgKi8KKwlsaQlyMCwwCisJc3RiCXIwLFBBQ0FTT0ZUSVJRRU4ocjEzKQkvKiB3ZSdsbCBoYXJkLWVuYWJsZSBzaG9ydGx5ICovCisJc3RiCXIwLFBBQ0FIQVJESVJRRU4ocjEzKQorCisJLyogQ29udGludWUgc2F2aW5nIHN0YXRlICovCisJU0FWRV9HUFIoMiwgcjEpCisJU0FWRV9OVkdQUlMocjEpCisJbWZjcglyMworCXN0ZAlyMyxfQ0NSKHIxKQorCXN0ZAlyOSxfTVNSKHIxKQorCXN0ZAlyMSxQQUNBUjEocjEzKQorCisJLyogTWFnaWMgTkFQIG1vZGUgZW50ZXIgc2VxdWVuY2UgKi8KKwlzdGQJcjAsMChyMSkKKwlwdGVzeW5jCisJbGQJcjAsMChyMSkKKzE6CWNtcAljcjAscjAscjAKKwlibmUJMWIKKwlQUENfTkFQCisJYgkuCisKK19HTE9CQUwocG93ZXI3X3dha2V1cF9sb3NzKQorCUdFVF9QQUNBKHIxMykKKwlsZAlyMSxQQUNBUjEocjEzKQorCVJFU1RfTlZHUFJTKHIxKQorCVJFU1RfR1BSKDIsIHIxKQorCWxkCXIzLF9DQ1IocjEpCisJbGQJcjQsX01TUihyMSkKKwlsZAlyNSxfTklQKHIxKQorCWFkZGkJcjEscjEsSU5UX0ZSQU1FX1NJWkUKKwltdGNyCXIzCisJbXRzcHIJU1BSTl9TUlIxLHI0CisJbXRzcHIJU1BSTl9TUlIwLHI1CisJcmZpZAorCitfR0xPQkFMKHBvd2VyN193YWtldXBfbm9sb3NzKQorCUdFVF9QQUNBKHIxMykKKwlsZAlyMSxQQUNBUjEocjEzKQorCWxkCXI0LF9NU1IocjEpCisJbGQJcjUsX05JUChyMSkKKwlhZGRpCXIxLHIxLElOVF9GUkFNRV9TSVpFCisJbXRzcHIJU1BSTl9TUlIxLHI0CisJbXRzcHIJU1BSTl9TUlIwLHI1CisJcmZpZApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvLXdvcmthcm91bmRzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lvLXdvcmthcm91bmRzLmMKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvLXdvcmthcm91bmRzLmMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvaW8td29ya2Fyb3VuZHMuYwppbmRleCA1YzExMThlLi5mZmFmYWVhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW8td29ya2Fyb3VuZHMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lvLXdvcmthcm91bmRzLmMKQEAgLTE3LDggKzE3LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3BwYy1wY2kuaD4KLQotI2luY2x1ZGUgImlvLXdvcmthcm91bmRzLmgiCisjaW5jbHVkZSA8YXNtL2lvLXdvcmthcm91bmRzLmg+CiAKICNkZWZpbmUgSU9XQV9NQVhfQlVTCTgKIApAQCAtMTQ1LDcgKzE0NCwxOSBAQAogCXJldHVybiByZXM7CiB9CiAKLS8qIFJlZ2lzdCBuZXcgYnVzIHRvIHN1cHBvcnQgd29ya2Fyb3VuZCAqLworLyogRW5hYmxlIElPIHdvcmthcm91bmQgKi8KK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBpb193b3JrYXJvdW5kX2luaXQodm9pZCkKK3sKKwlzdGF0aWMgaW50IGlvX3dvcmthcm91bmRfaW5pdGVkOworCisJaWYgKGlvX3dvcmthcm91bmRfaW5pdGVkKQorCQlyZXR1cm47CisJcHBjX3BjaV9pbyA9IGlvd2FfcGNpX2lvOworCXBwY19tZC5pb3JlbWFwID0gaW93YV9pb3JlbWFwOworCWlvX3dvcmthcm91bmRfaW5pdGVkID0gMTsKK30KKworLyogUmVnaXN0ZXIgbmV3IGJ1cyB0byBzdXBwb3J0IHdvcmthcm91bmQgKi8KIHZvaWQgX19kZXZpbml0IGlvd2FfcmVnaXN0ZXJfYnVzKHN0cnVjdCBwY2lfY29udHJvbGxlciAqcGhiLAogCQkJc3RydWN0IHBwY19wY2lfaW8gKm9wcywKIAkJCWludCAoKmluaXRmdW5jKShzdHJ1Y3QgaW93YV9idXMgKiwgdm9pZCAqKSwgdm9pZCAqZGF0YSkKQEAgLTE1Myw2ICsxNjQsOCBAQAogCXN0cnVjdCBpb3dhX2J1cyAqYnVzOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwaGItPmRuOwogCisJaW9fd29ya2Fyb3VuZF9pbml0KCk7CisKIAlpZiAoaW93YV9idXNfY291bnQgPj0gSU9XQV9NQVhfQlVTKSB7CiAJCXByX2VycigiSU9XQTpUb28gbWFueSBwY2kgYnJpZGdlcywgIgogCQkgICAgICAgIndvcmthcm91bmRzIGRpc2FibGVkIGZvciAlc1xuIiwgbnAtPmZ1bGxfbmFtZSk7CkBAIC0xNjIsNiArMTc1LDcgQEAKIAlidXMgPSAmaW93YV9idXNzZXNbaW93YV9idXNfY291bnRdOwogCWJ1cy0+cGhiID0gcGhiOwogCWJ1cy0+b3BzID0gb3BzOworCWJ1cy0+cHJpdmF0ZSA9IGRhdGE7CiAKIAlpZiAoaW5pdGZ1bmMpCiAJCWlmICgoKmluaXRmdW5jKShidXMsIGRhdGEpKQpAQCAtMTcyLDE0ICsxODYsMyBAQAogCXByX2RlYnVnKCJJT1dBOlslZF1BZGQgYnVzLCAlcy5cbiIsIGlvd2FfYnVzX2NvdW50LTEsIG5wLT5mdWxsX25hbWUpOwogfQogCi0vKiBlbmFibGUgSU8gd29ya2Fyb3VuZCAqLwotdm9pZCBfX2RldmluaXQgaW9fd29ya2Fyb3VuZF9pbml0KHZvaWQpCi17Ci0Jc3RhdGljIGludCBpb193b3JrYXJvdW5kX2luaXRlZDsKLQotCWlmIChpb193b3JrYXJvdW5kX2luaXRlZCkKLQkJcmV0dXJuOwotCXBwY19wY2lfaW8gPSBpb3dhX3BjaV9pbzsKLQlwcGNfbWQuaW9yZW1hcCA9IGlvd2FfaW9yZW1hcDsKLQlpb193b3JrYXJvdW5kX2luaXRlZCA9IDE7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwppbmRleCBmNjIxYjdkLi5hMjRkMzdkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKQEAgLTY2LDcgKzY2LDYgQEAKICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KICNpbmNsdWRlIDxhc20vdWRiZy5oPgotI2luY2x1ZGUgPGFzbS9kYmVsbC5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KIAogI2lmZGVmIENPTkZJR19QUEM2NApAQCAtMTYwLDcgKzE1OSw4IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19CT09LRSkgJiYgZGVmaW5lZChDT05GSUdfU01QKQogCS8qIENoZWNrIGZvciBwZW5kaW5nIGRvb3JiZWxsIGludGVycnVwdHMgYW5kIHJlc2VuZCB0byBvdXJzZWxmICovCi0JZG9vcmJlbGxfY2hlY2tfc2VsZigpOworCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9EQkVMTCkpCisJCXNtcF9tdXhlZF9pcGlfcmVzZW5kKCk7CiAjZW5kaWYKIAogCS8qCkBAIC0zOTcsMjQgKzM5NywyOCBAQAogdm9pZCBleGNfbHZsX2N0eF9pbml0KHZvaWQpCiB7CiAJc3RydWN0IHRocmVhZF9pbmZvICp0cDsKLQlpbnQgaSwgaHdfY3B1OworCWludCBpLCBjcHVfbnI7CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewotCQlod19jcHUgPSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGkpOwotCQltZW1zZXQoKHZvaWQgKiljcml0aXJxX2N0eFtod19jcHVdLCAwLCBUSFJFQURfU0laRSk7Ci0JCXRwID0gY3JpdGlycV9jdHhbaHdfY3B1XTsKLQkJdHAtPmNwdSA9IGk7CisjaWZkZWYgQ09ORklHX1BQQzY0CisJCWNwdV9uciA9IGk7CisjZWxzZQorCQljcHVfbnIgPSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGkpOworI2VuZGlmCisJCW1lbXNldCgodm9pZCAqKWNyaXRpcnFfY3R4W2NwdV9ucl0sIDAsIFRIUkVBRF9TSVpFKTsKKwkJdHAgPSBjcml0aXJxX2N0eFtjcHVfbnJdOworCQl0cC0+Y3B1ID0gY3B1X25yOwogCQl0cC0+cHJlZW1wdF9jb3VudCA9IDA7CiAKICNpZmRlZiBDT05GSUdfQk9PS0UKLQkJbWVtc2V0KCh2b2lkICopZGJnaXJxX2N0eFtod19jcHVdLCAwLCBUSFJFQURfU0laRSk7Ci0JCXRwID0gZGJnaXJxX2N0eFtod19jcHVdOwotCQl0cC0+Y3B1ID0gaTsKKwkJbWVtc2V0KCh2b2lkICopZGJnaXJxX2N0eFtjcHVfbnJdLCAwLCBUSFJFQURfU0laRSk7CisJCXRwID0gZGJnaXJxX2N0eFtjcHVfbnJdOworCQl0cC0+Y3B1ID0gY3B1X25yOwogCQl0cC0+cHJlZW1wdF9jb3VudCA9IDA7CiAKLQkJbWVtc2V0KCh2b2lkICopbWNoZWNraXJxX2N0eFtod19jcHVdLCAwLCBUSFJFQURfU0laRSk7Ci0JCXRwID0gbWNoZWNraXJxX2N0eFtod19jcHVdOwotCQl0cC0+Y3B1ID0gaTsKKwkJbWVtc2V0KCh2b2lkICopbWNoZWNraXJxX2N0eFtjcHVfbnJdLCAwLCBUSFJFQURfU0laRSk7CisJCXRwID0gbWNoZWNraXJxX2N0eFtjcHVfbnJdOworCQl0cC0+Y3B1ID0gY3B1X25yOwogCQl0cC0+cHJlZW1wdF9jb3VudCA9IEhBUkRJUlFfT0ZGU0VUOwogI2VuZGlmCiAJfQpAQCAtNDc3LDIwICs0ODEsNDEgQEAKICAqIElSUSBjb250cm9sbGVyIGFuZCB2aXJ0dWFsIGludGVycnVwdHMKICAqLwogCisvKiBUaGUgbWFpbiBpcnEgbWFwIGl0c2VsZiBpcyBhbiBhcnJheSBvZiBOUl9JUlEgZW50cmllcyBjb250YWluaW5nIHRoZQorICogYXNzb2NpYXRlIGhvc3QgYW5kIGlycSBudW1iZXIuIEFuIGVudHJ5IHdpdGggYSBob3N0IG9mIE5VTEwgaXMgZnJlZS4KKyAqIEFuIGVudHJ5IGNhbiBiZSBhbGxvY2F0ZWQgaWYgaXQncyBmcmVlLCB0aGUgYWxsb2NhdG9yIGFsd2F5cyB0aGVuIHNldHMKKyAqIGh3aXJxIGZpcnN0IHRvIHRoZSBob3N0J3MgaW52YWxpZCBpcnEgbnVtYmVyIGFuZCB0aGVuIGZpbGxzIG9wcy4KKyAqLworc3RydWN0IGlycV9tYXBfZW50cnkgeworCWlycV9od19udW1iZXJfdAlod2lycTsKKwlzdHJ1Y3QgaXJxX2hvc3QJKmhvc3Q7Cit9OworCiBzdGF0aWMgTElTVF9IRUFEKGlycV9ob3N0cyk7CiBzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhpcnFfYmlnX2xvY2spOwotc3RhdGljIHVuc2lnbmVkIGludCByZXZtYXBfdHJlZXNfYWxsb2NhdGVkOwogc3RhdGljIERFRklORV9NVVRFWChyZXZtYXBfdHJlZXNfbXV0ZXgpOwotc3RydWN0IGlycV9tYXBfZW50cnkgaXJxX21hcFtOUl9JUlFTXTsKK3N0YXRpYyBzdHJ1Y3QgaXJxX21hcF9lbnRyeSBpcnFfbWFwW05SX0lSUVNdOwogc3RhdGljIHVuc2lnbmVkIGludCBpcnFfdmlycV9jb3VudCA9IE5SX0lSUVM7CiBzdGF0aWMgc3RydWN0IGlycV9ob3N0ICppcnFfZGVmYXVsdF9ob3N0OwogCitpcnFfaHdfbnVtYmVyX3QgaXJxZF90b19od2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJcmV0dXJuIGlycV9tYXBbZC0+aXJxXS5od2lycTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlycWRfdG9faHdpcnEpOworCiBpcnFfaHdfbnVtYmVyX3QgdmlycV90b19odyh1bnNpZ25lZCBpbnQgdmlycSkKIHsKIAlyZXR1cm4gaXJxX21hcFt2aXJxXS5od2lycTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZpcnFfdG9faHcpOwogCitib29sIHZpcnFfaXNfaG9zdCh1bnNpZ25lZCBpbnQgdmlycSwgc3RydWN0IGlycV9ob3N0ICpob3N0KQoreworCXJldHVybiBpcnFfbWFwW3ZpcnFdLmhvc3QgPT0gaG9zdDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHZpcnFfaXNfaG9zdCk7CisKIHN0YXRpYyBpbnQgZGVmYXVsdF9pcnFfaG9zdF9tYXRjaChzdHJ1Y3QgaXJxX2hvc3QgKmgsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiB7CiAJcmV0dXJuIGgtPm9mX25vZGUgIT0gTlVMTCAmJiBoLT5vZl9ub2RlID09IG5wOwpAQCAtNTExLDcgKzUzNiw3IEBACiAJLyogQWxsb2NhdGUgc3RydWN0dXJlIGFuZCByZXZtYXAgdGFibGUgaWYgdXNpbmcgbGluZWFyIG1hcHBpbmcgKi8KIAlpZiAocmV2bWFwX3R5cGUgPT0gSVJRX0hPU1RfTUFQX0xJTkVBUikKIAkJc2l6ZSArPSByZXZtYXBfYXJnICogc2l6ZW9mKHVuc2lnbmVkIGludCk7Ci0JaG9zdCA9IHphbGxvY19tYXliZV9ib290bWVtKHNpemUsIEdGUF9LRVJORUwpOworCWhvc3QgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCWlmIChob3N0ID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCkBAIC01NjEsMTQgKzU4NiwxNCBAQAogCQkJaXJxX21hcFtpXS5ob3N0ID0gaG9zdDsKIAkJCXNtcF93bWIoKTsKIAotCQkJLyogQ2xlYXIgbm9yZXF1ZXN0IGZsYWdzICovCi0JCQlpcnFfY2xlYXJfc3RhdHVzX2ZsYWdzKGksIElSUV9OT1JFUVVFU1QpOwotCiAJCQkvKiBMZWdhY3kgZmxhZ3MgYXJlIGxlZnQgdG8gZGVmYXVsdCBhdCB0aGlzIHBvaW50LAogCQkJICogb25lIGNhbiB0aGVuIHVzZSBpcnFfY3JlYXRlX21hcHBpbmcoKSB0bwogCQkJICogZXhwbGljaXRseSBjaGFuZ2UgdGhlbQogCQkJICovCiAJCQlvcHMtPm1hcChob3N0LCBpLCBpKTsKKworCQkJLyogQ2xlYXIgbm9yZXF1ZXN0IGZsYWdzICovCisJCQlpcnFfY2xlYXJfc3RhdHVzX2ZsYWdzKGksIElSUV9OT1JFUVVFU1QpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgSVJRX0hPU1RfTUFQX0xJTkVBUjoKQEAgLTU3OSw2ICs2MDQsOSBAQAogCQlzbXBfd21iKCk7CiAJCWhvc3QtPnJldm1hcF9kYXRhLmxpbmVhci5yZXZtYXAgPSBybWFwOwogCQlicmVhazsKKwljYXNlIElSUV9IT1NUX01BUF9UUkVFOgorCQlJTklUX1JBRElYX1RSRUUoJmhvc3QtPnJldm1hcF9kYXRhLnRyZWUsIEdGUF9LRVJORUwpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC02MzYsOCArNjY0LDYgQEAKIAkJZ290byBlcnJvcjsKIAl9CiAKLQlpcnFfY2xlYXJfc3RhdHVzX2ZsYWdzKHZpcnEsIElSUV9OT1JFUVVFU1QpOwotCiAJLyogbWFwIGl0ICovCiAJc21wX3dtYigpOwogCWlycV9tYXBbdmlycV0uaHdpcnEgPSBod2lycTsKQEAgLTY0OCw2ICs2NzQsOCBAQAogCQlnb3RvIGVycmRlc2M7CiAJfQogCisJaXJxX2NsZWFyX3N0YXR1c19mbGFncyh2aXJxLCBJUlFfTk9SRVFVRVNUKTsKKwogCXJldHVybiAwOwogCiBlcnJkZXNjOgpAQCAtNzA0LDggKzczMiw2IEBACiAJICovCiAJdmlycSA9IGlycV9maW5kX21hcHBpbmcoaG9zdCwgaHdpcnEpOwogCWlmICh2aXJxICE9IE5PX0lSUSkgewotCQlpZiAoaG9zdC0+b3BzLT5yZW1hcCkKLQkJCWhvc3QtPm9wcy0+cmVtYXAoaG9zdCwgdmlycSwgaHdpcnEpOwogCQlwcl9kZWJ1ZygiaXJxOiAtPiBleGlzdGluZyBtYXBwaW5nIG9uIHZpcnEgJWRcbiIsIHZpcnEpOwogCQlyZXR1cm4gdmlycTsKIAl9CkBAIC03ODYsMTQgKzgxMiwxNSBAQAogCQlyZXR1cm47CiAKIAlob3N0ID0gaXJxX21hcFt2aXJxXS5ob3N0OwotCVdBUk5fT04gKGhvc3QgPT0gTlVMTCk7Ci0JaWYgKGhvc3QgPT0gTlVMTCkKKwlpZiAoV0FSTl9PTihob3N0ID09IE5VTEwpKQogCQlyZXR1cm47CiAKIAkvKiBOZXZlciB1bm1hcCBsZWdhY3kgaW50ZXJydXB0cyAqLwogCWlmIChob3N0LT5yZXZtYXBfdHlwZSA9PSBJUlFfSE9TVF9NQVBfTEVHQUNZKQogCQlyZXR1cm47CiAKKwlpcnFfc2V0X3N0YXR1c19mbGFncyh2aXJxLCBJUlFfTk9SRVFVRVNUKTsKKwogCS8qIHJlbW92ZSBjaGlwIGFuZCBoYW5kbGVyICovCiAJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKHZpcnEsIE5VTEwsIE5VTEwpOwogCkBAIC04MTMsMTMgKzg0MCw2IEBACiAJCQlob3N0LT5yZXZtYXBfZGF0YS5saW5lYXIucmV2bWFwW2h3aXJxXSA9IE5PX0lSUTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfSE9TVF9NQVBfVFJFRToKLQkJLyoKLQkJICogQ2hlY2sgaWYgcmFkaXggdHJlZSBhbGxvY2F0ZWQgeWV0LCBpZiBub3QgdGhlbiBub3RoaW5nIHRvCi0JCSAqIHJlbW92ZS4KLQkJICovCi0JCXNtcF9ybWIoKTsKLQkJaWYgKHJldm1hcF90cmVlc19hbGxvY2F0ZWQgPCAxKQotCQkJYnJlYWs7CiAJCW11dGV4X2xvY2soJnJldm1hcF90cmVlc19tdXRleCk7CiAJCXJhZGl4X3RyZWVfZGVsZXRlKCZob3N0LT5yZXZtYXBfZGF0YS50cmVlLCBod2lycSk7CiAJCW11dGV4X3VubG9jaygmcmV2bWFwX3RyZWVzX211dGV4KTsKQEAgLTgzMCw4ICs4NTAsNiBAQAogCXNtcF9tYigpOwogCWlycV9tYXBbdmlycV0uaHdpcnEgPSBob3N0LT5pbnZhbF9pcnE7CiAKLQlpcnFfc2V0X3N0YXR1c19mbGFncyh2aXJxLCBJUlFfTk9SRVFVRVNUKTsKLQogCWlycV9mcmVlX2Rlc2NzKHZpcnEsIDEpOwogCS8qIEZyZWUgaXQgKi8KIAlpcnFfZnJlZV92aXJ0KHZpcnEsIDEpOwpAQCAtODc3LDE2ICs4OTUsOSBAQAogCXN0cnVjdCBpcnFfbWFwX2VudHJ5ICpwdHI7CiAJdW5zaWduZWQgaW50IHZpcnE7CiAKLQlXQVJOX09OKGhvc3QtPnJldm1hcF90eXBlICE9IElSUV9IT1NUX01BUF9UUkVFKTsKLQotCS8qCi0JICogQ2hlY2sgaWYgdGhlIHJhZGl4IHRyZWUgZXhpc3RzIGFuZCBoYXMgYmVlIGluaXRpYWxpemVkLgotCSAqIElmIG5vdCwgd2UgZmFsbGJhY2sgdG8gc2xvdyBtb2RlCi0JICovCi0JaWYgKHJldm1hcF90cmVlc19hbGxvY2F0ZWQgPCAyKQorCWlmIChXQVJOX09OX09OQ0UoaG9zdC0+cmV2bWFwX3R5cGUgIT0gSVJRX0hPU1RfTUFQX1RSRUUpKQogCQlyZXR1cm4gaXJxX2ZpbmRfbWFwcGluZyhob3N0LCBod2lycSk7CiAKLQkvKiBOb3cgdHJ5IHRvIHJlc29sdmUgKi8KIAkvKgogCSAqIE5vIHJjdV9yZWFkX2xvY2soaW5nKSBuZWVkZWQsIHRoZSBwdHIgcmV0dXJuZWQgY2FuJ3QgZ28gdW5kZXIgdXMKIAkgKiBhcyBpdCdzIHJlZmVyZW5jaW5nIGFuIGVudHJ5IGluIHRoZSBzdGF0aWMgaXJxX21hcCB0YWJsZS4KQEAgLTkwOSwxNiArOTIwLDcgQEAKIHZvaWQgaXJxX3JhZGl4X3Jldm1hcF9pbnNlcnQoc3RydWN0IGlycV9ob3N0ICpob3N0LCB1bnNpZ25lZCBpbnQgdmlycSwKIAkJCSAgICAgaXJxX2h3X251bWJlcl90IGh3aXJxKQogewotCi0JV0FSTl9PTihob3N0LT5yZXZtYXBfdHlwZSAhPSBJUlFfSE9TVF9NQVBfVFJFRSk7Ci0KLQkvKgotCSAqIENoZWNrIGlmIHRoZSByYWRpeCB0cmVlIGV4aXN0cyB5ZXQuCi0JICogSWYgbm90LCB0aGVuIHRoZSBpcnEgd2lsbCBiZSBpbnNlcnRlZCBpbnRvIHRoZSB0cmVlIHdoZW4gaXQgZ2V0cwotCSAqIGluaXRpYWxpemVkLgotCSAqLwotCXNtcF9ybWIoKTsKLQlpZiAocmV2bWFwX3RyZWVzX2FsbG9jYXRlZCA8IDEpCisJaWYgKFdBUk5fT04oaG9zdC0+cmV2bWFwX3R5cGUgIT0gSVJRX0hPU1RfTUFQX1RSRUUpKQogCQlyZXR1cm47CiAKIAlpZiAodmlycSAhPSBOT19JUlEpIHsKQEAgLTkzNCw3ICs5MzYsOCBAQAogewogCXVuc2lnbmVkIGludCAqcmV2bWFwOwogCi0JV0FSTl9PTihob3N0LT5yZXZtYXBfdHlwZSAhPSBJUlFfSE9TVF9NQVBfTElORUFSKTsKKwlpZiAoV0FSTl9PTl9PTkNFKGhvc3QtPnJldm1hcF90eXBlICE9IElSUV9IT1NUX01BUF9MSU5FQVIpKQorCQlyZXR1cm4gaXJxX2ZpbmRfbWFwcGluZyhob3N0LCBod2lycSk7CiAKIAkvKiBDaGVjayByZXZtYXAgYm91bmRzICovCiAJaWYgKHVubGlrZWx5KGh3aXJxID49IGhvc3QtPnJldm1hcF9kYXRhLmxpbmVhci5zaXplKSkKQEAgLTEwMjgsNTMgKzEwMzEsNiBAQAogCXJldHVybiAwOwogfQogCi0vKiBXZSBuZWVkIHRvIGNyZWF0ZSB0aGUgcmFkaXggdHJlZXMgbGF0ZSAqLwotc3RhdGljIGludCBpcnFfbGF0ZV9pbml0KHZvaWQpCi17Ci0Jc3RydWN0IGlycV9ob3N0ICpoOwotCXVuc2lnbmVkIGludCBpOwotCi0JLyoKLQkgKiBObyBtdXR1YWwgZXhjbHVzaW9uIHdpdGggcmVzcGVjdCB0byBhY2Nlc3NvcnMgb2YgdGhlIHRyZWUgaXMgbmVlZGVkCi0JICogaGVyZSBhcyB0aGUgc3luY2hyb25pemF0aW9uIGlzIGRvbmUgdmlhIHRoZSBzdGF0ZSB2YXJpYWJsZQotCSAqIHJldm1hcF90cmVlc19hbGxvY2F0ZWQuCi0JICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShoLCAmaXJxX2hvc3RzLCBsaW5rKSB7Ci0JCWlmIChoLT5yZXZtYXBfdHlwZSA9PSBJUlFfSE9TVF9NQVBfVFJFRSkKLQkJCUlOSVRfUkFESVhfVFJFRSgmaC0+cmV2bWFwX2RhdGEudHJlZSwgR0ZQX0tFUk5FTCk7Ci0JfQotCi0JLyoKLQkgKiBNYWtlIHN1cmUgdGhlIHJhZGl4IHRyZWVzIGluaXRzIGFyZSB2aXNpYmxlIGJlZm9yZSBzZXR0aW5nCi0JICogdGhlIGZsYWcKLQkgKi8KLQlzbXBfd21iKCk7Ci0JcmV2bWFwX3RyZWVzX2FsbG9jYXRlZCA9IDE7Ci0KLQkvKgotCSAqIEluc2VydCB0aGUgcmV2ZXJzZSBtYXBwaW5nIGZvciB0aG9zZSBpbnRlcnJ1cHRzIGFscmVhZHkgcHJlc2VudAotCSAqIGluIGlycV9tYXBbXS4KLQkgKi8KLQltdXRleF9sb2NrKCZyZXZtYXBfdHJlZXNfbXV0ZXgpOwotCWZvciAoaSA9IDA7IGkgPCBpcnFfdmlycV9jb3VudDsgaSsrKSB7Ci0JCWlmIChpcnFfbWFwW2ldLmhvc3QgJiYKLQkJICAgIChpcnFfbWFwW2ldLmhvc3QtPnJldm1hcF90eXBlID09IElSUV9IT1NUX01BUF9UUkVFKSkKLQkJCXJhZGl4X3RyZWVfaW5zZXJ0KCZpcnFfbWFwW2ldLmhvc3QtPnJldm1hcF9kYXRhLnRyZWUsCi0JCQkJCSAgaXJxX21hcFtpXS5od2lycSwgJmlycV9tYXBbaV0pOwotCX0KLQltdXRleF91bmxvY2soJnJldm1hcF90cmVlc19tdXRleCk7Ci0KLQkvKgotCSAqIE1ha2Ugc3VyZSB0aGUgcmFkaXggdHJlZXMgaW5zZXJ0aW9ucyBhcmUgdmlzaWJsZSBiZWZvcmUgc2V0dGluZwotCSAqIHRoZSBmbGFnCi0JICovCi0Jc21wX3dtYigpOwotCXJldm1hcF90cmVlc19hbGxvY2F0ZWQgPSAyOwotCi0JcmV0dXJuIDA7Ci19Ci1hcmNoX2luaXRjYWxsKGlycV9sYXRlX2luaXQpOwotCiAjaWZkZWYgQ09ORklHX1ZJUlFfREVCVUcKIHN0YXRpYyBpbnQgdmlycV9kZWJ1Z19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcHJpdmF0ZSkKIHsKQEAgLTEwODIsMTAgKzEwMzgsMTEgQEAKIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAJY29uc3QgY2hhciAqcDsKIAlzdGF0aWMgY29uc3QgY2hhciBub25lW10gPSAibm9uZSI7CisJdm9pZCAqZGF0YTsKIAlpbnQgaTsKIAotCXNlcV9wcmludGYobSwgIiUtNXMgICUtN3MgICUtMTVzICAlc1xuIiwgInZpcnEiLCAiaHdpcnEiLAotCQkgICAgICAiY2hpcCBuYW1lIiwgImhvc3QgbmFtZSIpOworCXNlcV9wcmludGYobSwgIiUtNXMgICUtN3MgICUtMTVzICAlLTE4cyAgJXNcbiIsICJ2aXJxIiwgImh3aXJxIiwKKwkJICAgICAgImNoaXAgbmFtZSIsICJjaGlwIGRhdGEiLCAiaG9zdCBuYW1lIik7CiAKIAlmb3IgKGkgPSAxOyBpIDwgbnJfaXJxczsgaSsrKSB7CiAJCWRlc2MgPSBpcnFfdG9fZGVzYyhpKTsKQEAgLTEwOTgsNyArMTA1NSw3IEBACiAJCQlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXA7CiAKIAkJCXNlcV9wcmludGYobSwgIiU1ZCAgIiwgaSk7Ci0JCQlzZXFfcHJpbnRmKG0sICIweCUwNWx4ICAiLCB2aXJxX3RvX2h3KGkpKTsKKwkJCXNlcV9wcmludGYobSwgIjB4JTA1bHggICIsIGlycV9tYXBbaV0uaHdpcnEpOwogCiAJCQljaGlwID0gaXJxX2Rlc2NfZ2V0X2NoaXAoZGVzYyk7CiAJCQlpZiAoY2hpcCAmJiBjaGlwLT5uYW1lKQpAQCAtMTEwNyw2ICsxMDY0LDkgQEAKIAkJCQlwID0gbm9uZTsKIAkJCXNlcV9wcmludGYobSwgIiUtMTVzICAiLCBwKTsKIAorCQkJZGF0YSA9IGlycV9kZXNjX2dldF9jaGlwX2RhdGEoZGVzYyk7CisJCQlzZXFfcHJpbnRmKG0sICIweCUxNnAgICIsIGRhdGEpOworCiAJCQlpZiAoaXJxX21hcFtpXS5ob3N0ICYmIGlycV9tYXBbaV0uaG9zdC0+b2Zfbm9kZSkKIAkJCQlwID0gaXJxX21hcFtpXS5ob3N0LT5vZl9ub2RlLT5mdWxsX25hbWU7CiAJCQllbHNlCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2tnZGIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwva2dkYi5jCmluZGV4IDQyODUwZWUuLjc2YTZlNDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwva2dkYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwva2dkYi5jCkBAIC0xMDksNyArMTA5LDcgQEAKICNpZmRlZiBDT05GSUdfU01QCiB2b2lkIGtnZGJfcm91bmR1cF9jcHVzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0Jc21wX3NlbmRfZGVidWdnZXJfYnJlYWsoTVNHX0FMTF9CVVRfU0VMRik7CisJc21wX3NlbmRfZGVidWdnZXJfYnJlYWsoKTsKIH0KICNlbmRpZgogCkBAIC0xNDIsNyArMTQyLDcgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKgotCSAqIE9uIEJvb2sgRSBhbmQgcGVyaGFwcyBvdGhlciBwcm9jZXNzc29ycywgc2luZ2xlc3RlcCBpcyBoYW5kbGVkIG9uCisJICogT24gQm9vayBFIGFuZCBwZXJoYXBzIG90aGVyIHByb2Nlc3NvcnMsIHNpbmdsZXN0ZXAgaXMgaGFuZGxlZCBvbgogCSAqIHRoZSBjcml0aWNhbCBleGNlcHRpb24gc3RhY2suICBUaGlzIGNhdXNlcyBjdXJyZW50X3RocmVhZF9pbmZvKCkKIAkgKiB0byBmYWlsLCBzaW5jZSBpdCBpdCBsb2NhdGVzIHRoZSB0aHJlYWRfaW5mbyBieSBtYXNraW5nIG9mZgogCSAqIHRoZSBsb3cgYml0cyBvZiB0aGUgY3VycmVudCBzdGFjayBwb2ludGVyLiAgV2Ugd29yayBhcm91bmQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbHBhcmNmZy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMKaW5kZXggMzAxZGI2NS4uODRkYWFiZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMKQEAgLTEzMiwzNCArMTMyLDYgQEAKIC8qCiAgKiBNZXRob2RzIHVzZWQgdG8gZmV0Y2ggTFBBUiBkYXRhIHdoZW4gcnVubmluZyBvbiBhIHBTZXJpZXMgcGxhdGZvcm0uCiAgKi8KLS8qKgotICogaF9nZXRfbXBwCi0gKiBIX0dFVF9NUFAgaGNhbGwgcmV0dXJucyBpbmZvIGluIDcgcGFybXMKLSAqLwotaW50IGhfZ2V0X21wcChzdHJ1Y3QgaHZjYWxsX21wcF9kYXRhICptcHBfZGF0YSkKLXsKLQlpbnQgcmM7Ci0JdW5zaWduZWQgbG9uZyByZXRidWZbUExQQVJfSENBTEw5X0JVRlNJWkVdOwotCi0JcmMgPSBwbHBhcl9oY2FsbDkoSF9HRVRfTVBQLCByZXRidWYpOwotCi0JbXBwX2RhdGEtPmVudGl0bGVkX21lbSA9IHJldGJ1ZlswXTsKLQltcHBfZGF0YS0+bWFwcGVkX21lbSA9IHJldGJ1ZlsxXTsKLQotCW1wcF9kYXRhLT5ncm91cF9udW0gPSAocmV0YnVmWzJdID4+IDIgKiA4KSAmIDB4ZmZmZjsKLQltcHBfZGF0YS0+cG9vbF9udW0gPSByZXRidWZbMl0gJiAweGZmZmY7Ci0KLQltcHBfZGF0YS0+bWVtX3dlaWdodCA9IChyZXRidWZbM10gPj4gNyAqIDgpICYgMHhmZjsKLQltcHBfZGF0YS0+dW5hbGxvY2F0ZWRfbWVtX3dlaWdodCA9IChyZXRidWZbM10gPj4gNiAqIDgpICYgMHhmZjsKLQltcHBfZGF0YS0+dW5hbGxvY2F0ZWRfZW50aXRsZW1lbnQgPSByZXRidWZbM10gJiAweGZmZmZmZmZmZmZmZjsKLQotCW1wcF9kYXRhLT5wb29sX3NpemUgPSByZXRidWZbNF07Ci0JbXBwX2RhdGEtPmxvYW5fcmVxdWVzdCA9IHJldGJ1Zls1XTsKLQltcHBfZGF0YS0+YmFja2luZ19tZW0gPSByZXRidWZbNl07Ci0KLQlyZXR1cm4gcmM7Ci19Ci1FWFBPUlRfU1lNQk9MKGhfZ2V0X21wcCk7CiAKIHN0cnVjdCBodmNhbGxfcHBwX2RhdGEgewogCXU2NAllbnRpdGxlbWVudDsKQEAgLTM0NSw2ICszMTcsMzAgQEAKIAlzZXFfcHJpbnRmKG0sICJiYWNraW5nX21lbW9yeT0lbGQgYnl0ZXNcbiIsIG1wcF9kYXRhLmJhY2tpbmdfbWVtKTsKIH0KIAorLyoqCisgKiBwYXJzZV9tcHBfeF9kYXRhCisgKiBQYXJzZSBvdXQgZGF0YSByZXR1cm5lZCBmcm9tIGhfZ2V0X21wcF94CisgKi8KK3N0YXRpYyB2b2lkIHBhcnNlX21wcF94X2RhdGEoc3RydWN0IHNlcV9maWxlICptKQoreworCXN0cnVjdCBodmNhbGxfbXBwX3hfZGF0YSBtcHBfeF9kYXRhOworCisJaWYgKCFmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX1hDTU8pKQorCQlyZXR1cm47CisJaWYgKGhfZ2V0X21wcF94KCZtcHBfeF9kYXRhKSkKKwkJcmV0dXJuOworCisJc2VxX3ByaW50ZihtLCAiY29hbGVzY2VkX2J5dGVzPSVsZFxuIiwgbXBwX3hfZGF0YS5jb2FsZXNjZWRfYnl0ZXMpOworCisJaWYgKG1wcF94X2RhdGEucG9vbF9jb2FsZXNjZWRfYnl0ZXMpCisJCXNlcV9wcmludGYobSwgInBvb2xfY29hbGVzY2VkX2J5dGVzPSVsZFxuIiwKKwkJCSAgIG1wcF94X2RhdGEucG9vbF9jb2FsZXNjZWRfYnl0ZXMpOworCWlmIChtcHBfeF9kYXRhLnBvb2xfcHVycl9jeWNsZXMpCisJCXNlcV9wcmludGYobSwgImNvYWxlc2NlX3Bvb2xfcHVycj0lbGRcbiIsIG1wcF94X2RhdGEucG9vbF9wdXJyX2N5Y2xlcyk7CisJaWYgKG1wcF94X2RhdGEucG9vbF9zcHVycl9jeWNsZXMpCisJCXNlcV9wcmludGYobSwgImNvYWxlc2NlX3Bvb2xfc3B1cnI9JWxkXG4iLCBtcHBfeF9kYXRhLnBvb2xfc3B1cnJfY3ljbGVzKTsKK30KKwogI2RlZmluZSBTUExQQVJfQ0hBUkFDVEVSSVNUSUNTX1RPS0VOIDIwCiAjZGVmaW5lIFNQTFBBUl9NQVhMRU5HVEggMTAyNiooc2l6ZW9mKGNoYXIpKQogCkBAIC01MjAsNiArNTE2LDcgQEAKIAkJcGFyc2Vfc3lzdGVtX3BhcmFtZXRlcl9zdHJpbmcobSk7CiAJCXBhcnNlX3BwcF9kYXRhKG0pOwogCQlwYXJzZV9tcHBfZGF0YShtKTsKKwkJcGFyc2VfbXBwX3hfZGF0YShtKTsKIAkJcHNlcmllc19jbW9fZGF0YShtKTsKIAkJc3BscGFyX2Rpc3BhdGNoX2RhdGEobSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY18zMi5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjXzMyLlMKaW5kZXggMDk0YmQ5OC4uOTk4YTEwMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjXzMyLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjXzMyLlMKQEAgLTY5NCw2ICs2OTQsMTcgQEAKIAlhZGRpCXIxLHIxLDE2CiAJYmxyCiAKKyNpZmRlZiBDT05GSUdfU01QCitfR0xPQkFMKHN0YXJ0X3NlY29uZGFyeV9yZXN1bWUpCisJLyogUmVzZXQgc3RhY2sgKi8KKwlybHdpbm0JcjEscjEsMCwwLCgzMS1USFJFQURfU0hJRlQpCS8qIGN1cnJlbnRfdGhyZWFkX2luZm8oKSAqLworCWFkZGkJcjEscjEsVEhSRUFEX1NJWkUtU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKKwlsaQlyMywwCisJc3R3CXIzLDAocjEpCQkvKiBaZXJvIHRoZSBzdGFjayBmcmFtZSBwb2ludGVyCSovCisJYmwJc3RhcnRfc2Vjb25kYXJ5CisJYgkuCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCQogLyoKICAqIFRoaXMgcm91dGluZSBpcyBqdXN0IGhlcmUgdG8ga2VlcCBHQ0MgaGFwcHkgLSBzaWdoLi4uCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY182NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjXzY0LlMKaW5kZXggMjA2YTMyMS4uZTg5ZGY1OWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY182NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY182NC5TCkBAIC00NjIsNyArNDYyLDggQEAKICAqIHdhaXQgZm9yIHRoZSBmbGFnIHRvIGNoYW5nZSwgaW5kaWNhdGluZyB0aGlzIGtlcm5lbCBpcyBnb2luZyBhd2F5IGJ1dAogICogdGhlIHNsYXZlIGNvZGUgZm9yIHRoZSBuZXh0IG9uZSBpcyBhdCBhZGRyZXNzZXMgMCB0byAxMDAuCiAgKgotICogVGhpcyBpcyB1c2VkIGJ5IGFsbCBzbGF2ZXMuCisgKiBUaGlzIGlzIHVzZWQgYnkgYWxsIHNsYXZlcywgZXZlbiB0aG9zZSB0aGF0IGRpZCBub3QgZmluZCBhIG1hdGNoaW5nCisgKiBwYWNhIGluIHRoZSBzZWNvbmRhcnkgc3RhcnR1cCBjb2RlLgogICoKICAqIFBoeXNpY2FsIChoYXJkd2FyZSkgY3B1IGlkIHNob3VsZCBiZSBpbiByMy4KICAqLwpAQCAtNDcxLDEwICs0NzIsNiBAQAogMToJbWZscglyNQogCWFkZGkJcjUscjUsa2V4ZWNfZmxhZy0xYgogCi0JbGkJcjQsS0VYRUNfU1RBVEVfUkVBTF9NT0RFCi0Jc3RiCXI0LFBBQ0FLRVhFQ1NUQVRFKHIxMykKLQlTWU5DCi0KIDk5OglITVRfTE9XCiAjaWZkZWYgQ09ORklHX0tFWEVDCQkvKiB1c2Ugbm8gbWVtb3J5IHdpdGhvdXQga2V4ZWMgKi8KIAlsd3oJcjQsMChyNSkKQEAgLTQ5OSwxMSArNDk2LDE3IEBACiAgKgogICogZ2V0IHBoeXMgaWQgZnJvbSBwYWNhCiAgKiBzd2l0Y2ggdG8gcmVhbCBtb2RlCisgKiBtYXJrIHRoZSBwYWNhIGFzIG5vIGxvbmdlciB1c2VkCiAgKiBqb2luIG90aGVyIGNwdXMgaW4ga2V4ZWNfd2FpdChwaHlzX2lkKQogICovCiBfR0xPQkFMKGtleGVjX3NtcF93YWl0KQogCWxoeglyMyxQQUNBSFdDUFVJRChyMTMpCiAJYmwJcmVhbF9tb2RlCisKKwlsaQlyNCxLRVhFQ19TVEFURV9SRUFMX01PREUKKwlzdGIJcjQsUEFDQUtFWEVDU1RBVEUocjEzKQorCVNZTkMKKwogCWIJLmtleGVjX3dhaXQKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGFjYS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wYWNhLmMKaW5kZXggMTBmMGFhZC4uZWZlYjg4MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wYWNhLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wYWNhLmMKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgogCkBAIC0xNTYsMTggKzE1NiwyOSBAQAogLyogUHV0IHRoZSBwYWNhIHBvaW50ZXIgaW50byByMTMgYW5kIFNQUkdfUEFDQSAqLwogdm9pZCBzZXR1cF9wYWNhKHN0cnVjdCBwYWNhX3N0cnVjdCAqbmV3X3BhY2EpCiB7CisJLyogU2V0dXAgcjEzICovCiAJbG9jYWxfcGFjYSA9IG5ld19wYWNhOwotCW10c3ByKFNQUk5fU1BSR19QQUNBLCBsb2NhbF9wYWNhKTsKKwogI2lmZGVmIENPTkZJR19QUENfQk9PSzNFCisJLyogT24gQm9vazNFLCBpbml0aWFsaXplIHRoZSBUTEIgbWlzcyBleGNlcHRpb24gZnJhbWVzICovCiAJbXRzcHIoU1BSTl9TUFJHX1RMQl9FWEZSQU1FLCBsb2NhbF9wYWNhLT5leHRsYik7CisjZWxzZQorCS8qIEluIEhWIG1vZGUsIHdlIHNldHVwIGJvdGggSFBBQ0EgYW5kIFBBQ0EgdG8gYXZvaWQgcHJvYmxlbXMKKwkgKiBpZiB3ZSBkbyBhIEdFVF9QQUNBKCkgYmVmb3JlIHRoZSBmZWF0dXJlIGZpeHVwcyBoYXZlIGJlZW4KKwkgKiBhcHBsaWVkCisJICovCisJaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX0hWTU9ERV8yMDYpKQorCQltdHNwcihTUFJOX1NQUkdfSFBBQ0EsIGxvY2FsX3BhY2EpOwogI2VuZGlmCisJbXRzcHIoU1BSTl9TUFJHX1BBQ0EsIGxvY2FsX3BhY2EpOworCiB9CiAKIHN0YXRpYyBpbnQgX19pbml0ZGF0YSBwYWNhX3NpemU7CiAKIHZvaWQgX19pbml0IGFsbG9jYXRlX3BhY2FzKHZvaWQpCiB7Ci0JaW50IG5yX2NwdXMsIGNwdSwgbGltaXQ7CisJaW50IGNwdSwgbGltaXQ7CiAKIAkvKgogCSAqIFdlIGNhbid0IHRha2UgU0xCIG1pc3NlcyBvbiB0aGUgcGFjYSwgYW5kIHdlIHdhbnQgdG8gYWNjZXNzIHRoZW0KQEAgLTE3OSwyMyArMTkwLDE4IEBACiAJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfSVNFUklFUykpCiAJCWxpbWl0ID0gbWluKGxpbWl0LCBIdlBhZ2VzVG9NYXAgKiBIVlBBR0VTSVpFKTsKIAotCW5yX2NwdXMgPSBOUl9DUFVTOwotCS8qIE9uIGlTZXJpZXMgd2Uga25vdyB3ZSBjYW4gbmV2ZXIgaGF2ZSBtb3JlIHRoYW4gNjQgY3B1cyAqLwotCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0lTRVJJRVMpKQotCQlucl9jcHVzID0gbWluKDY0LCBucl9jcHVzKTsKLQotCXBhY2Ffc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZW9mKHN0cnVjdCBwYWNhX3N0cnVjdCkgKiBucl9jcHVzKTsKKwlwYWNhX3NpemUgPSBQQUdFX0FMSUdOKHNpemVvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QpICogbnJfY3B1X2lkcyk7CiAKIAlwYWNhID0gX192YShtZW1ibG9ja19hbGxvY19iYXNlKHBhY2Ffc2l6ZSwgUEFHRV9TSVpFLCBsaW1pdCkpOwogCW1lbXNldChwYWNhLCAwLCBwYWNhX3NpemUpOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgIkFsbG9jYXRlZCAldSBieXRlcyBmb3IgJWQgcGFjYXMgYXQgJXBcbiIsCi0JCXBhY2Ffc2l6ZSwgbnJfY3B1cywgcGFjYSk7CisJCXBhY2Ffc2l6ZSwgbnJfY3B1X2lkcywgcGFjYSk7CiAKLQlhbGxvY2F0ZV9scHBhY2FzKG5yX2NwdXMsIGxpbWl0KTsKKwlhbGxvY2F0ZV9scHBhY2FzKG5yX2NwdV9pZHMsIGxpbWl0KTsKIAogCS8qIENhbid0IHVzZSBmb3JfZWFjaF8qX2NwdSwgYXMgdGhleSBhcmVuJ3QgZnVuY3Rpb25hbCB5ZXQgKi8KLQlmb3IgKGNwdSA9IDA7IGNwdSA8IG5yX2NwdXM7IGNwdSsrKQorCWZvciAoY3B1ID0gMDsgY3B1IDwgbnJfY3B1X2lkczsgY3B1KyspCiAJCWluaXRpYWxpc2VfcGFjYSgmcGFjYVtjcHVdLCBjcHUpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV9kbi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfZG4uYwppbmRleCBkMjI1ZDk5Li42YmFhYmMxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV9kbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpX2RuLmMKQEAgLTQzLDEwICs0Myw5IEBACiAJY29uc3QgdTMyICpyZWdzOwogCXN0cnVjdCBwY2lfZG4gKnBkbjsKIAotCXBkbiA9IGFsbG9jX21heWJlX2Jvb3RtZW0oc2l6ZW9mKCpwZG4pLCBHRlBfS0VSTkVMKTsKKwlwZG4gPSB6YWxsb2NfbWF5YmVfYm9vdG1lbShzaXplb2YoKnBkbiksIEdGUF9LRVJORUwpOwogCWlmIChwZG4gPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7Ci0JbWVtc2V0KHBkbiwgMCwgc2l6ZW9mKCpwZG4pKTsKIAlkbi0+ZGF0YSA9IHBkbjsKIAlwZG4tPm5vZGUgPSBkbjsKIAlwZG4tPnBoYiA9IHBoYjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX2tzeW1zLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BwY19rc3ltcy5jCmluZGV4IGVmM2VmNTYuLjdkMjhmNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX2tzeW1zLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGNfa3N5bXMuYwpAQCAtNTQsNyArNTQsNiBAQAogZXh0ZXJuIGludCBzeXNfc2lncmV0dXJuKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIAogRVhQT1JUX1NZTUJPTChjbGVhcl9wYWdlcyk7Ci1FWFBPUlRfU1lNQk9MKGNvcHlfcGFnZSk7CiBFWFBPUlRfU1lNQk9MKElTQV9ETUFfVEhSRVNIT0xEKTsKIEVYUE9SVF9TWU1CT0woRE1BX01PREVfUkVBRCk7CiBFWFBPUlRfU1lNQk9MKERNQV9NT0RFX1dSSVRFKTsKQEAgLTg4LDkgKzg3LDcgQEAKIEVYUE9SVF9TWU1CT0woX19jbGVhcl91c2VyKTsKIEVYUE9SVF9TWU1CT0woX19zdHJuY3B5X2Zyb21fdXNlcik7CiBFWFBPUlRfU1lNQk9MKF9fc3Rybmxlbl91c2VyKTsKLSNpZmRlZiBDT05GSUdfUFBDNjQKLUVYUE9SVF9TWU1CT0woY29weV80S19wYWdlKTsKLSNlbmRpZgorRVhQT1JUX1NZTUJPTChjb3B5X3BhZ2UpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfUENJKSAmJiBkZWZpbmVkKENPTkZJR19QUEMzMikKIEVYUE9SVF9TWU1CT0woaXNhX2lvX2Jhc2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYwppbmRleCBmNzRmMzU1Li4wOTUwNDNkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYwpAQCAtNzAyLDYgKzcwMiw4IEBACiAvKgogICogQ29weSBhIHRocmVhZC4uCiAgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGRzY3JfZGVmYXVsdDsgLyogZGVmaW5lZCBpbiBhcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMgKi8KKwogaW50IGNvcHlfdGhyZWFkKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgdXNwLAogCQl1bnNpZ25lZCBsb25nIHVudXNlZCwgc3RydWN0IHRhc2tfc3RydWN0ICpwLAogCQlzdHJ1Y3QgcHRfcmVncyAqcmVncykKQEAgLTc1NSwxMSArNzU3LDExIEBACiAJCQkJX0FMSUdOX1VQKHNpemVvZihzdHJ1Y3QgdGhyZWFkX2luZm8pLCAxNik7CiAKICNpZmRlZiBDT05GSUdfUFBDX1NURF9NTVVfNjQKLQlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfU0xCKSkgeworCWlmIChtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl9TTEIpKSB7CiAJCXVuc2lnbmVkIGxvbmcgc3BfdnNpZDsKIAkJdW5zaWduZWQgbG9uZyBsbHAgPSBtbXVfcHNpemVfZGVmc1ttbXVfbGluZWFyX3BzaXplXS5zbGxwOwogCi0JCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl8xVF9TRUdNRU5UKSkKKwkJaWYgKG1tdV9oYXNfZmVhdHVyZShNTVVfRlRSXzFUX1NFR01FTlQpKQogCQkJc3BfdnNpZCA9IGdldF9rZXJuZWxfdnNpZChzcCwgTU1VX1NFR1NJWkVfMVQpCiAJCQkJPDwgU0xCX1ZTSURfU0hJRlRfMVQ7CiAJCWVsc2UKQEAgLTc2OSw2ICs3NzEsMjAgQEAKIAkJcC0+dGhyZWFkLmtzcF92c2lkID0gc3BfdnNpZDsKIAl9CiAjZW5kaWYgLyogQ09ORklHX1BQQ19TVERfTU1VXzY0ICovCisjaWZkZWYgQ09ORklHX1BQQzY0IAorCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9EU0NSKSkgeworCQlpZiAoY3VycmVudC0+dGhyZWFkLmRzY3JfaW5oZXJpdCkgeworCQkJcC0+dGhyZWFkLmRzY3JfaW5oZXJpdCA9IDE7CisJCQlwLT50aHJlYWQuZHNjciA9IGN1cnJlbnQtPnRocmVhZC5kc2NyOworCQl9IGVsc2UgaWYgKDAgIT0gZHNjcl9kZWZhdWx0KSB7CisJCQlwLT50aHJlYWQuZHNjcl9pbmhlcml0ID0gMTsKKwkJCXAtPnRocmVhZC5kc2NyID0gZHNjcl9kZWZhdWx0OworCQl9IGVsc2UgeworCQkJcC0+dGhyZWFkLmRzY3JfaW5oZXJpdCA9IDA7CisJCQlwLT50aHJlYWQuZHNjciA9IDA7CisJCX0KKwl9CisjZW5kaWYKIAogCS8qCiAJICogVGhlIFBQQzY0IEFCSSBtYWtlcyB1c2Ugb2YgYSBUT0MgdG8gY29udGFpbiBmdW5jdGlvbiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMKaW5kZXggZTc0ZmExMi4uNDhhZWI1NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMKQEAgLTY4LDYgKzY4LDcgQEAKIHVuc2lnbmVkIGxvbmcgdGNlX2FsbG9jX3N0YXJ0LCB0Y2VfYWxsb2NfZW5kOwogdTY0IHBwYzY0X3JtYV9zaXplOwogI2VuZGlmCitzdGF0aWMgcGh5c19hZGRyX3QgZmlyc3RfbWVtYmxvY2tfc2l6ZTsKIAogc3RhdGljIGludCBfX2luaXQgZWFybHlfcGFyc2VfbWVtKGNoYXIgKnApCiB7CkBAIC0xMjMsMTggKzEyNCwxOSBAQAogICovCiBzdGF0aWMgc3RydWN0IGlibV9wYV9mZWF0dXJlIHsKIAl1bnNpZ25lZCBsb25nCWNwdV9mZWF0dXJlczsJLyogQ1BVX0ZUUl94eHggYml0ICovCisJdW5zaWduZWQgbG9uZwltbXVfZmVhdHVyZXM7CS8qIE1NVV9GVFJfeHh4IGJpdCAqLwogCXVuc2lnbmVkIGludAljcHVfdXNlcl9mdHJzOwkvKiBQUENfRkVBVFVSRV94eHggYml0ICovCiAJdW5zaWduZWQgY2hhcglwYWJ5dGU7CQkvKiBieXRlIG51bWJlciBpbiBpYm0scGEtZmVhdHVyZXMgKi8KIAl1bnNpZ25lZCBjaGFyCXBhYml0OwkJLyogYml0IG51bWJlciAoYmlnLWVuZGlhbikgKi8KIAl1bnNpZ25lZCBjaGFyCWludmVydDsJCS8qIGlmIDEsIHBhIGJpdCBzZXQgPT4gY2xlYXIgZmVhdHVyZSAqLwogfSBpYm1fcGFfZmVhdHVyZXNbXSBfX2luaXRkYXRhID0gewotCXswLCBQUENfRkVBVFVSRV9IQVNfTU1VLAkwLCAwLCAwfSwKLQl7MCwgUFBDX0ZFQVRVUkVfSEFTX0ZQVSwJMCwgMSwgMH0sCi0Je0NQVV9GVFJfU0xCLCAwLAkJMCwgMiwgMH0sCi0Je0NQVV9GVFJfQ1RSTCwgMCwJCTAsIDMsIDB9LAotCXtDUFVfRlRSX05PRVhFQ1VURSwgMCwJCTAsIDYsIDB9LAotCXtDUFVfRlRSX05PRFNJU1JBTElHTiwgMCwJMSwgMSwgMX0sCi0Je0NQVV9GVFJfQ0lfTEFSR0VfUEFHRSwgMCwJMSwgMiwgMH0sCisJezAsIDAsIFBQQ19GRUFUVVJFX0hBU19NTVUsCTAsIDAsIDB9LAorCXswLCAwLCBQUENfRkVBVFVSRV9IQVNfRlBVLAkwLCAxLCAwfSwKKwl7MCwgTU1VX0ZUUl9TTEIsIDAsCQkwLCAyLCAwfSwKKwl7Q1BVX0ZUUl9DVFJMLCAwLCAwLAkJMCwgMywgMH0sCisJe0NQVV9GVFJfTk9FWEVDVVRFLCAwLCAwLAkwLCA2LCAwfSwKKwl7Q1BVX0ZUUl9OT0RTSVNSQUxJR04sIDAsIDAsCTEsIDEsIDF9LAorCXswLCBNTVVfRlRSX0NJX0xBUkdFX1BBR0UsIDAsCTEsIDIsIDB9LAogCXtDUFVfRlRSX1JFQUxfTEUsIFBQQ19GRUFUVVJFX1RSVUVfTEUsIDUsIDAsIDB9LAogfTsKIApAQCAtMTY2LDkgKzE2OCwxMSBAQAogCQlpZiAoYml0IF4gZnAtPmludmVydCkgewogCQkJY3VyX2NwdV9zcGVjLT5jcHVfZmVhdHVyZXMgfD0gZnAtPmNwdV9mZWF0dXJlczsKIAkJCWN1cl9jcHVfc3BlYy0+Y3B1X3VzZXJfZmVhdHVyZXMgfD0gZnAtPmNwdV91c2VyX2Z0cnM7CisJCQljdXJfY3B1X3NwZWMtPm1tdV9mZWF0dXJlcyB8PSBmcC0+bW11X2ZlYXR1cmVzOwogCQl9IGVsc2UgewogCQkJY3VyX2NwdV9zcGVjLT5jcHVfZmVhdHVyZXMgJj0gfmZwLT5jcHVfZmVhdHVyZXM7CiAJCQljdXJfY3B1X3NwZWMtPmNwdV91c2VyX2ZlYXR1cmVzICY9IH5mcC0+Y3B1X3VzZXJfZnRyczsKKwkJCWN1cl9jcHVfc3BlYy0+bW11X2ZlYXR1cmVzICY9IH5mcC0+bW11X2ZlYXR1cmVzOwogCQl9CiAJfQogfQpAQCAtMjY4LDEzICsyNzIsMTMgQEAKIAkJCQkJICBjb25zdCBjaGFyICp1bmFtZSwgaW50IGRlcHRoLAogCQkJCQkgIHZvaWQgKmRhdGEpCiB7Ci0Jc3RhdGljIGludCBsb2dpY2FsX2NwdWlkID0gMDsKIAljaGFyICp0eXBlID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiZGV2aWNlX3R5cGUiLCBOVUxMKTsKIAljb25zdCB1MzIgKnByb3A7CiAJY29uc3QgdTMyICppbnRzZXJ2OwogCWludCBpLCBudGhyZWFkczsKIAl1bnNpZ25lZCBsb25nIGxlbjsKLQlpbnQgZm91bmQgPSAwOworCWludCBmb3VuZCA9IC0xOworCWludCBmb3VuZF90aHJlYWQgPSAwOwogCiAJLyogV2UgYXJlIHNjYW5uaW5nICJjcHUiIG5vZGVzIG9ubHkgKi8KIAlpZiAodHlwZSA9PSBOVUxMIHx8IHN0cmNtcCh0eXBlLCAiY3B1IikgIT0gMCkKQEAgLTI5OCwxMSArMzAyLDEwIEBACiAJCSAqIHZlcnNpb24gMiBvZiB0aGUga2V4ZWMgcGFyYW0gZm9ybWF0IGFkZHMgdGhlIHBoeXMgY3B1aWQgb2YKIAkJICogYm9vdGVkIHByb2MuCiAJCSAqLwotCQlpZiAoaW5pdGlhbF9ib290X3BhcmFtcyAmJiBpbml0aWFsX2Jvb3RfcGFyYW1zLT52ZXJzaW9uID49IDIpIHsKLQkJCWlmIChpbnRzZXJ2W2ldID09Ci0JCQkJCWluaXRpYWxfYm9vdF9wYXJhbXMtPmJvb3RfY3B1aWRfcGh5cykgewotCQkJCWZvdW5kID0gMTsKLQkJCQlicmVhazsKKwkJaWYgKGluaXRpYWxfYm9vdF9wYXJhbXMtPnZlcnNpb24gPj0gMikgeworCQkJaWYgKGludHNlcnZbaV0gPT0gaW5pdGlhbF9ib290X3BhcmFtcy0+Ym9vdF9jcHVpZF9waHlzKSB7CisJCQkJZm91bmQgPSBib290X2NwdV9jb3VudDsKKwkJCQlmb3VuZF90aHJlYWQgPSBpOwogCQkJfQogCQl9IGVsc2UgewogCQkJLyoKQEAgLTMxMSwyMyArMzE0LDIwIEBACiAJCQkgKiBvZmYgc2Vjb25kYXJ5IHRocmVhZHMuCiAJCQkgKi8KIAkJCWlmIChvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsCi0JCQkJCSJsaW51eCxib290LWNwdSIsIE5VTEwpICE9IE5VTEwpIHsKLQkJCQlmb3VuZCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCQkJCSJsaW51eCxib290LWNwdSIsIE5VTEwpICE9IE5VTEwpCisJCQkJZm91bmQgPSBib290X2NwdV9jb3VudDsKIAkJfQotCiAjaWZkZWYgQ09ORklHX1NNUAogCQkvKiBsb2dpY2FsIGNwdSBpZCBpcyBhbHdheXMgMCBvbiBVUCBrZXJuZWxzICovCi0JCWxvZ2ljYWxfY3B1aWQrKzsKKwkJYm9vdF9jcHVfY291bnQrKzsKICNlbmRpZgogCX0KIAotCWlmIChmb3VuZCkgewotCQlEQkcoImJvb3QgY3B1OiBsb2dpY2FsICVkIHBoeXNpY2FsICVkXG4iLCBsb2dpY2FsX2NwdWlkLAotCQkJaW50c2VydltpXSk7Ci0JCWJvb3RfY3B1aWQgPSBsb2dpY2FsX2NwdWlkOwotCQlzZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGJvb3RfY3B1aWQsIGludHNlcnZbaV0pOworCWlmIChmb3VuZCA+PSAwKSB7CisJCURCRygiYm9vdCBjcHU6IGxvZ2ljYWwgJWQgcGh5c2ljYWwgJWRcbiIsIGZvdW5kLAorCQkJaW50c2Vydltmb3VuZF90aHJlYWRdKTsKKwkJYm9vdF9jcHVpZCA9IGZvdW5kOworCQlzZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGZvdW5kLCBpbnRzZXJ2W2ZvdW5kX3RocmVhZF0pOwogCiAJCS8qCiAJCSAqIFBBUFIgZGVmaW5lcyAibG9naWNhbCIgUFZSIHZhbHVlcyBmb3IgY3B1cyB0aGF0CkBAIC01MDksMTEgKzUwOSwxNCBAQAogCQkJc2l6ZSA9IDB4ODAwMDAwMDB1bCAtIGJhc2U7CiAJfQogI2VuZGlmCi0KLQkvKiBGaXJzdCBNRU1CTE9DSyBhZGRlZCwgZG8gc29tZSBzcGVjaWFsIGluaXRpYWxpemF0aW9ucyAqLwotCWlmIChtZW1zdGFydF9hZGRyID09IH4ocGh5c19hZGRyX3QpMCkKLQkJc2V0dXBfaW5pdGlhbF9tZW1vcnlfbGltaXQoYmFzZSwgc2l6ZSk7Ci0JbWVtc3RhcnRfYWRkciA9IG1pbigodTY0KW1lbXN0YXJ0X2FkZHIsIGJhc2UpOworCS8qIEtlZXAgdHJhY2sgb2YgdGhlIGJlZ2lubmluZyBvZiBtZW1vcnkgLWFuZC0gdGhlIHNpemUgb2YKKwkgKiB0aGUgdmVyeSBmaXJzdCBibG9jayBpbiB0aGUgZGV2aWNlLXRyZWUgYXMgaXQgcmVwcmVzZW50cworCSAqIHRoZSBSTUEgb24gcHBjNjQgc2VydmVyCisJICovCisJaWYgKGJhc2UgPCBtZW1zdGFydF9hZGRyKSB7CisJCW1lbXN0YXJ0X2FkZHIgPSBiYXNlOworCQlmaXJzdF9tZW1ibG9ja19zaXplID0gc2l6ZTsKKwl9CiAKIAkvKiBBZGQgdGhlIGNodW5rIHRvIHRoZSBNRU1CTE9DSyBsaXN0ICovCiAJbWVtYmxvY2tfYWRkKGJhc2UsIHNpemUpOwpAQCAtNjk4LDYgKzcwMSw3IEBACiAKIAlvZl9zY2FuX2ZsYXRfZHQoZWFybHlfaW5pdF9kdF9zY2FuX3Jvb3QsIE5VTEwpOwogCW9mX3NjYW5fZmxhdF9kdChlYXJseV9pbml0X2R0X3NjYW5fbWVtb3J5X3BwYywgTlVMTCk7CisJc2V0dXBfaW5pdGlhbF9tZW1vcnlfbGltaXQobWVtc3RhcnRfYWRkciwgZmlyc3RfbWVtYmxvY2tfc2l6ZSk7CiAKIAkvKiBTYXZlIGNvbW1hbmQgbGluZSBmb3IgL3Byb2MvY21kbGluZSBhbmQgdGhlbiBwYXJzZSBwYXJhbWV0ZXJzICovCiAJc3RybGNweShib290X2NvbW1hbmRfbGluZSwgY21kX2xpbmUsIENPTU1BTkRfTElORV9TSVpFKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCmluZGV4IDk0MWZmNGQuLmMwMTYwMzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYwpAQCAtMzM1LDYgKzMzNSw3IEBACiAJY29uc3QgY2hhciAqcCwgKnEsICpzOwogCXZhX2xpc3QgYXJnczsKIAl1bnNpZ25lZCBsb25nIHY7CisJbG9uZyB2czsKIAlzdHJ1Y3QgcHJvbV90ICpfcHJvbSA9ICZSRUxPQyhwcm9tKTsKIAogCXZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7CkBAIC0zNjgsMTIgKzM2OSwzNSBAQAogCQkJdiA9IHZhX2FyZyhhcmdzLCB1bnNpZ25lZCBsb25nKTsKIAkJCXByb21fcHJpbnRfaGV4KHYpOwogCQkJYnJlYWs7CisJCWNhc2UgJ2QnOgorCQkJKytxOworCQkJdnMgPSB2YV9hcmcoYXJncywgaW50KTsKKwkJCWlmICh2cyA8IDApIHsKKwkJCQlwcm9tX3ByaW50KFJFTE9DKCItIikpOworCQkJCXZzID0gLXZzOworCQkJfQorCQkJcHJvbV9wcmludF9kZWModnMpOworCQkJYnJlYWs7CiAJCWNhc2UgJ2wnOgogCQkJKytxOwotCQkJaWYgKCpxID09ICd1JykgeyAvKiAnJWx1JyAqLworCQkJaWYgKCpxID09IDApCisJCQkJYnJlYWs7CisJCQllbHNlIGlmICgqcSA9PSAneCcpIHsKKwkJCQkrK3E7CisJCQkJdiA9IHZhX2FyZyhhcmdzLCB1bnNpZ25lZCBsb25nKTsKKwkJCQlwcm9tX3ByaW50X2hleCh2KTsKKwkJCX0gZWxzZSBpZiAoKnEgPT0gJ3UnKSB7IC8qICclbHUnICovCiAJCQkJKytxOwogCQkJCXYgPSB2YV9hcmcoYXJncywgdW5zaWduZWQgbG9uZyk7CiAJCQkJcHJvbV9wcmludF9kZWModik7CisJCQl9IGVsc2UgaWYgKCpxID09ICdkJykgeyAvKiAlbGQgKi8KKwkJCQkrK3E7CisJCQkJdnMgPSB2YV9hcmcoYXJncywgbG9uZyk7CisJCQkJaWYgKHZzIDwgMCkgeworCQkJCQlwcm9tX3ByaW50KFJFTE9DKCItIikpOworCQkJCQl2cyA9IC12czsKKwkJCQl9CisJCQkJcHJvbV9wcmludF9kZWModnMpOwogCQkJfQogCQkJYnJlYWs7CiAJCX0KQEAgLTY3Niw4ICs3MDAsMTAgQEAKICNlbmRpZiAvKiBDT05GSUdfUENJX01TSSAqLwogI2lmZGVmIENPTkZJR19QUENfU01MUEFSCiAjZGVmaW5lIE9WNV9DTU8JCQkweDgwCS8qIENvb3BlcmF0aXZlIE1lbW9yeSBPdmVyY29tbWl0bWVudCAqLworI2RlZmluZSBPVjVfWENNTwkJCTB4NDAJLyogUGFnZSBDb2FsZXNjaW5nICovCiAjZWxzZQogI2RlZmluZSBPVjVfQ01PCQkJMHgwMAorI2RlZmluZSBPVjVfWENNTwkJCTB4MDAKICNlbmRpZgogI2RlZmluZSBPVjVfVFlQRTFfQUZGSU5JVFkJMHg4MAkvKiBUeXBlIDEgTlVNQSBhZmZpbml0eSAqLwogCkBAIC03MzIsNyArNzU4LDcgQEAKIAlPVjVfTFBBUiB8IE9WNV9TUExQQVIgfCBPVjVfTEFSR0VfUEFHRVMgfCBPVjVfRFJDT05GX01FTU9SWSB8CiAJT1Y1X0RPTkFURV9ERURJQ0FURV9DUFUgfCBPVjVfTVNJLAogCTAsCi0JT1Y1X0NNTywKKwlPVjVfQ01PIHwgT1Y1X1hDTU8sCiAJT1Y1X1RZUEUxX0FGRklOSVRZLAogCTAsCiAJMCwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMKaW5kZXggMjA5N2YyYi4uMjcxZmY2MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9tbXUuaD4KICNpbmNsdWRlIDxhc20vdG9wb2xvZ3kuaD4KKyNpbmNsdWRlIDxhc20vcFNlcmllc19yZWNvbmZpZy5oPgogCiBzdHJ1Y3QgcnRhc190IHJ0YXMgPSB7CiAJLmxvY2sgPSBfX0FSQ0hfU1BJTl9MT0NLX1VOTE9DS0VECkBAIC00OTQsNyArNDk1LDcgQEAKIAogCW1pZ2h0X3NsZWVwKCk7CiAJbXMgPSBydGFzX2J1c3lfZGVsYXlfdGltZShzdGF0dXMpOwotCWlmIChtcykKKwlpZiAobXMgJiYgbmVlZF9yZXNjaGVkKCkpCiAJCW1zbGVlcChtcyk7CiAKIAlyZXR1cm4gbXM7CkBAIC03MzEsNiArNzMyLDcgQEAKIAogCWF0b21pY19zZXQoJmRhdGEtPmVycm9yLCByYyk7CiAJc3RhcnRfdG9wb2xvZ3lfdXBkYXRlKCk7CisJcFNlcmllc19jb2FsZXNjZV9pbml0KCk7CiAKIAlpZiAod2FrZV93aGVuX2RvbmUpIHsKIAkJYXRvbWljX3NldCgmZGF0YS0+ZG9uZSwgMSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYwppbmRleCAyMWYzMGNiLi43OWZjYTI2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMKQEAgLTM4MSw3ICszODEsNyBAQAogCWludCBpOwogCiAJdGhyZWFkc19wZXJfY29yZSA9IHRwYzsKLQl0aHJlYWRzX2NvcmVfbWFzayA9IENQVV9NQVNLX05PTkU7CisJY3B1bWFza19jbGVhcigmdGhyZWFkc19jb3JlX21hc2spOwogCiAJLyogVGhpcyBpbXBsZW1lbnRhdGlvbiBvbmx5IHN1cHBvcnRzIHBvd2VyIG9mIDIgbnVtYmVyIG9mIHRocmVhZHMKIAkgKiBmb3Igc2ltcGxpY2l0eSBhbmQgcGVyZm9ybWFuY2UKQEAgLTM5MCw3ICszOTAsNyBAQAogCUJVR19PTih0cGMgIT0gKDEgPDwgdGhyZWFkc19zaGlmdCkpOwogCiAJZm9yIChpID0gMDsgaSA8IHRwYzsgaSsrKQotCQljcHVfc2V0KGksIHRocmVhZHNfY29yZV9tYXNrKTsKKwkJY3B1bWFza19zZXRfY3B1KGksICZ0aHJlYWRzX2NvcmVfbWFzayk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJDUFUgbWFwcyBpbml0aWFsaXplZCBmb3IgJWQgdGhyZWFkJXMgcGVyIGNvcmVcbiIsCiAJICAgICAgIHRwYywgdHBjID4gMSA/ICJzIiA6ICIiKTsKQEAgLTQwNCw3ICs0MDQsNyBAQAogICogICAgICAgICAgICAgICAgICBjcHVfcHJlc2VudF9tYXNrCiAgKgogICogSGF2aW5nIHRoZSBwb3NzaWJsZSBtYXAgc2V0IHVwIGVhcmx5IGFsbG93cyB1cyB0byByZXN0cmljdCBhbGxvY2F0aW9ucwotICogb2YgdGhpbmdzIGxpa2UgaXJxc3RhY2tzIHRvIG51bV9wb3NzaWJsZV9jcHVzKCkgcmF0aGVyIHRoYW4gTlJfQ1BVUy4KKyAqIG9mIHRoaW5ncyBsaWtlIGlycXN0YWNrcyB0byBucl9jcHVfaWRzIHJhdGhlciB0aGFuIE5SX0NQVVMuCiAgKgogICogV2UgZG8gbm90IGluaXRpYWxpemUgdGhlIG9ubGluZSBtYXAgaGVyZTsgY3B1cyBzZXQgdGhlaXIgb3duIGJpdHMgaW4KICAqIGNwdV9vbmxpbmVfbWFzayBhcyB0aGV5IGNvbWUgdXAuCkBAIC00MjQsNyArNDI0LDcgQEAKIAogCURCRygic21wX3NldHVwX2NwdV9tYXBzKClcbiIpOwogCi0Jd2hpbGUgKChkbiA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKGRuLCAiY3B1IikpICYmIGNwdSA8IE5SX0NQVVMpIHsKKwl3aGlsZSAoKGRuID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoZG4sICJjcHUiKSkgJiYgY3B1IDwgbnJfY3B1X2lkcykgewogCQljb25zdCBpbnQgKmludHNlcnY7CiAJCWludCBqLCBsZW47CiAKQEAgLTQ0Myw3ICs0NDMsNyBAQAogCQkJCWludHNlcnYgPSAmY3B1OwkvKiBhc3N1bWUgbG9naWNhbCA9PSBwaHlzICovCiAJCX0KIAotCQlmb3IgKGogPSAwOyBqIDwgbnRocmVhZHMgJiYgY3B1IDwgTlJfQ1BVUzsgaisrKSB7CisJCWZvciAoaiA9IDA7IGogPCBudGhyZWFkcyAmJiBjcHUgPCBucl9jcHVfaWRzOyBqKyspIHsKIAkJCURCRygiICAgIHRocmVhZCAlZCAtPiBjcHUgJWQgKGhhcmQgaWQgJWQpXG4iLAogCQkJICAgIGosIGNwdSwgaW50c2VydltqXSk7CiAJCQlzZXRfY3B1X3ByZXNlbnQoY3B1LCB0cnVlKTsKQEAgLTQ4MywxMiArNDgzLDEyIEBACiAJCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9TTVQpKQogCQkJbWF4Y3B1cyAqPSBudGhyZWFkczsKIAotCQlpZiAobWF4Y3B1cyA+IE5SX0NQVVMpIHsKKwkJaWYgKG1heGNwdXMgPiBucl9jcHVfaWRzKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkgICAgICAgIlBhcnRpdGlvbiBjb25maWd1cmVkIGZvciAlZCBjcHVzLCAiCiAJCQkgICAgICAgIm9wZXJhdGluZyBzeXN0ZW0gbWF4aW11bSBpcyAlZC5cbiIsCi0JCQkgICAgICAgbWF4Y3B1cywgTlJfQ1BVUyk7Ci0JCQltYXhjcHVzID0gTlJfQ1BVUzsKKwkJCSAgICAgICBtYXhjcHVzLCBucl9jcHVfaWRzKTsKKwkJCW1heGNwdXMgPSBucl9jcHVfaWRzOwogCQl9IGVsc2UKIAkJCXByaW50ayhLRVJOX0lORk8gIlBhcnRpdGlvbiBjb25maWd1cmVkIGZvciAlZCBjcHVzLlxuIiwKIAkJCSAgICAgICBtYXhjcHVzKTsKQEAgLTUxMCw3ICs1MTAsNyBAQAogCWNwdV9pbml0X3RocmVhZF9jb3JlX21hcHMobnRocmVhZHMpOwogCiAJLyogTm93IHRoYXQgcG9zc2libGUgY3B1cyBhcmUgc2V0LCBzZXQgbnJfY3B1X2lkcyBmb3IgbGF0ZXIgdXNlICovCi0JbnJfY3B1X2lkcyA9IGZpbmRfbGFzdF9iaXQoY3B1bWFza19iaXRzKGNwdV9wb3NzaWJsZV9tYXNrKSxOUl9DUFVTKSArIDE7CisJc2V0dXBfbnJfY3B1X2lkcygpOwogCiAJZnJlZV91bnVzZWRfcGFjYXMoKTsKIH0KQEAgLTYwMiw2ICs2MDIsMTAgQEAKIAkJICogbmFtZSBpbnN0ZWFkICovCiAJCWlmICghbnApCiAJCQlucCA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICI4MDQyIik7CisJCWlmIChucCkgeworCQkJb2ZfaTgwNDJfa2JkX2lycSA9IDE7CisJCQlvZl9pODA0Ml9hdXhfaXJxID0gMTI7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSBGRENfQkFTRTogLyogRkRDMSAqLwogCQlucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJmZGMiKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYwppbmRleCAxZDJmYmM5Li42MjBkNzkyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF8zMi5jCkBAIC00OCw2ICs0OCw3IEBACiAKIGludCBib290X2NwdWlkID0gLTE7CiBFWFBPUlRfU1lNQk9MX0dQTChib290X2NwdWlkKTsKK2ludCBfX2luaXRkYXRhIGJvb3RfY3B1X2NvdW50OwogaW50IGJvb3RfY3B1aWRfcGh5czsKIAogaW50IHNtcF9od19pbmRleFtOUl9DUFVTXTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYwppbmRleCA1YTA0MDFmLi5hODhiZjI3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSA8YXNtL3VkYmcuaD4KICNpbmNsdWRlIDxhc20va2V4ZWMuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vY29kZS1wYXRjaGluZy5oPgogCiAjaW5jbHVkZSAic2V0dXAuaCIKIApAQCAtNzIsNiArNzMsNyBAQAogI2VuZGlmCiAKIGludCBib290X2NwdWlkID0gMDsKK2ludCBfX2luaXRkYXRhIGJvb3RfY3B1X2NvdW50OwogdTY0IHBwYzY0X3BmdF9zaXplOwogCiAvKiBQaWNrIGRlZmF1bHRzIHNpbmNlIHdlIG1pZ2h0IHdhbnQgdG8gcGF0Y2ggaW5zdHJ1Y3Rpb25zCkBAIC0yMzMsNiArMjM1LDcgQEAKIHZvaWQgc21wX3JlbGVhc2VfY3B1cyh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgKnB0cjsKKwlpbnQgaTsKIAogCURCRygiIC0+IHNtcF9yZWxlYXNlX2NwdXMoKVxuIik7CiAKQEAgLTI0NSw3ICsyNDgsMTYgQEAKIAlwdHIgID0gKHVuc2lnbmVkIGxvbmcgKikoKHVuc2lnbmVkIGxvbmcpJl9fc2Vjb25kYXJ5X2hvbGRfc3Bpbmxvb3AKIAkJCS0gUEhZU0lDQUxfU1RBUlQpOwogCSpwdHIgPSBfX3BhKGdlbmVyaWNfc2Vjb25kYXJ5X3NtcF9pbml0KTsKLQltYigpOworCisJLyogQW5kIHdhaXQgYSBiaXQgZm9yIHRoZW0gdG8gY2F0Y2ggdXAgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspIHsKKwkJbWIoKTsKKwkJSE1UX2xvdygpOworCQlpZiAoYm9vdF9jcHVfY291bnQgPT0gMCkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMSk7CisJfQorCURCRygiYm9vdF9jcHVfY291bnQgPSAlZFxuIiwgYm9vdF9jcHVfY291bnQpOwogCiAJREJHKCIgPC0gc21wX3JlbGVhc2VfY3B1cygpXG4iKTsKIH0KQEAgLTQyMywxNyArNDM1LDMwIEBACiAJREJHKCIgPC0gc2V0dXBfc3lzdGVtKClcbiIpOwogfQogCi1zdGF0aWMgdTY0IHNsYjBfbGltaXQodm9pZCkKKy8qIFRoaXMgcmV0dXJucyB0aGUgbGltaXQgYmVsb3cgd2hpY2ggbWVtb3J5IGFjY2Vzc2VzIHRvIHRoZSBsaW5lYXIKKyAqIG1hcHBpbmcgYXJlIGd1YXJuYXRlZWQgbm90IHRvIGNhdXNlIGEgVExCIG9yIFNMQiBtaXNzLiBUaGlzIGlzCisgKiB1c2VkIHRvIGFsbG9jYXRlIGludGVycnVwdCBvciBlbWVyZ2VuY3kgc3RhY2tzIGZvciB3aGljaCBvdXIKKyAqIGV4Y2VwdGlvbiBlbnRyeSBwYXRoIGRvZXNuJ3QgZGVhbCB3aXRoIGJlaW5nIGludGVycnVwdGVkLgorICovCitzdGF0aWMgdTY0IHNhZmVfc3RhY2tfbGltaXQodm9pZCkKIHsKLQlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfMVRfU0VHTUVOVCkpIHsKKyNpZmRlZiBDT05GSUdfUFBDX0JPT0szRQorCS8qIEZyZWVzY2FsZSBCb29rRSBib2x0cyB0aGUgZW50aXJlIGxpbmVhciBtYXBwaW5nICovCisJaWYgKG1tdV9oYXNfZmVhdHVyZShNTVVfRlRSX1RZUEVfRlNMX0UpKQorCQlyZXR1cm4gbGluZWFyX21hcF90b3A7CisJLyogT3RoZXIgQm9va0UsIHdlIGFzc3VtZSB0aGUgZmlyc3QgR0IgaXMgYm9sdGVkICovCisJcmV0dXJuIDF1bCA8PCAzMDsKKyNlbHNlCisJLyogQm9va1MsIHRoZSBmaXJzdCBzZWdtZW50IGlzIGJvbHRlZCAqLworCWlmIChtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl8xVF9TRUdNRU5UKSkKIAkJcmV0dXJuIDFVTCA8PCBTSURfU0hJRlRfMVQ7Ci0JfQogCXJldHVybiAxVUwgPDwgU0lEX1NISUZUOworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBpcnFzdGFja19lYXJseV9pbml0KHZvaWQpCiB7Ci0JdTY0IGxpbWl0ID0gc2xiMF9saW1pdCgpOworCXU2NCBsaW1pdCA9IHNhZmVfc3RhY2tfbGltaXQoKTsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCS8qCkBAIC00NTMsNiArNDc4LDkgQEAKICNpZmRlZiBDT05GSUdfUFBDX0JPT0szRQogc3RhdGljIHZvaWQgX19pbml0IGV4Y19sdmxfZWFybHlfaW5pdCh2b2lkKQogeworCWV4dGVybiB1bnNpZ25lZCBpbnQgaW50ZXJydXB0X2Jhc2VfYm9vazNlOworCWV4dGVybiB1bnNpZ25lZCBpbnQgZXhjX2RlYnVnX2RlYnVnX2Jvb2szZTsKKwogCXVuc2lnbmVkIGludCBpOwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKQEAgLTQ2Myw2ICs0OTEsMTAgQEAKIAkJbWNoZWNraXJxX2N0eFtpXSA9IChzdHJ1Y3QgdGhyZWFkX2luZm8gKikKIAkJCV9fdmEobWVtYmxvY2tfYWxsb2MoVEhSRUFEX1NJWkUsIFRIUkVBRF9TSVpFKSk7CiAJfQorCisJaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX0RFQlVHX0xWTF9FWEMpKQorCQlwYXRjaF9icmFuY2goJmludGVycnVwdF9iYXNlX2Jvb2szZSArICgweDA0MCAvIDQpICsgMSwKKwkJCSAgICAgKHVuc2lnbmVkIGxvbmcpJmV4Y19kZWJ1Z19kZWJ1Z19ib29rM2UsIDApOwogfQogI2Vsc2UKICNkZWZpbmUgZXhjX2x2bF9lYXJseV9pbml0KCkKQEAgLTQ4Niw3ICs1MTgsNyBAQAogCSAqIGJyaW5ndXAsIHdlIG5lZWQgdG8gZ2V0IGF0IHRoZW0gaW4gcmVhbCBtb2RlLiBUaGlzIG1lYW5zIHRoZXkKIAkgKiBtdXN0IGFsc28gYmUgd2l0aGluIHRoZSBSTU8gcmVnaW9uLgogCSAqLwotCWxpbWl0ID0gbWluKHNsYjBfbGltaXQoKSwgcHBjNjRfcm1hX3NpemUpOworCWxpbWl0ID0gbWluKHNhZmVfc3RhY2tfbGltaXQoKSwgcHBjNjRfcm1hX3NpemUpOwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJdW5zaWduZWQgbG9uZyBzcDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF82NC5jCmluZGV4IDI3YzRhNDUuLmRhOTg5ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfNjQuYwpAQCAtMzgxLDcgKzM4MSw3IEBACiAJICAgICAgIHJlZ3MsIHVjLCAmdWMtPnVjX21jb250ZXh0KTsKICNlbmRpZgogCWlmIChzaG93X3VuaGFuZGxlZF9zaWduYWxzICYmIHByaW50a19yYXRlbGltaXQoKSkKLQkJcHJpbnRrKHJlZ3MtPm1zciAmIE1TUl9TRiA/IGZtdDY0IDogZm10MzIsCisJCXByaW50ayhyZWdzLT5tc3IgJiBNU1JfNjRCSVQgPyBmbXQ2NCA6IGZtdDMyLAogCQkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCAicnRfc2lncmV0dXJuIiwKIAkJCShsb25nKXVjLCByZWdzLT5uaXAsIHJlZ3MtPmxpbmspOwogCkBAIC00NjksNyArNDY5LDcgQEAKIAkgICAgICAgcmVncywgZnJhbWUsIG5ld3NwKTsKICNlbmRpZgogCWlmIChzaG93X3VuaGFuZGxlZF9zaWduYWxzICYmIHByaW50a19yYXRlbGltaXQoKSkKLQkJcHJpbnRrKHJlZ3MtPm1zciAmIE1TUl9TRiA/IGZtdDY0IDogZm10MzIsCisJCXByaW50ayhyZWdzLT5tc3IgJiBNU1JfNjRCSVQgPyBmbXQ2NCA6IGZtdDMyLAogCQkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCAic2V0dXBfcnRfZnJhbWUiLAogCQkJKGxvbmcpZnJhbWUsIHJlZ3MtPm5pcCwgcmVncy0+bGluayk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NtcC5jCmluZGV4IDlmOWMyMDQuLjRhNmYyZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zbXAuYwpAQCAtOTUsNyArOTUsNyBAQAogc3RhdGljIHZvaWQgKCpjcmFzaF9pcGlfZnVuY3Rpb25fcHRyKShzdHJ1Y3QgcHRfcmVncyAqKSA9IE5VTEw7CiAKICNpZmRlZiBDT05GSUdfUFBDNjQKLXZvaWQgX19kZXZpbml0IHNtcF9nZW5lcmljX2tpY2tfY3B1KGludCBucikKK2ludCBfX2RldmluaXQgc21wX2dlbmVyaWNfa2lja19jcHUoaW50IG5yKQogewogCUJVR19PTihuciA8IDAgfHwgbnIgPj0gTlJfQ1BVUyk7CiAKQEAgLTEwNiwzOCArMTA2LDExIEBACiAJICovCiAJcGFjYVtucl0uY3B1X3N0YXJ0ID0gMTsKIAlzbXBfbWIoKTsKKworCXJldHVybiAwOwogfQogI2VuZGlmCiAKLXZvaWQgc21wX21lc3NhZ2VfcmVjdihpbnQgbXNnKQotewotCXN3aXRjaChtc2cpIHsKLQljYXNlIFBQQ19NU0dfQ0FMTF9GVU5DVElPTjoKLQkJZ2VuZXJpY19zbXBfY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQoKTsKLQkJYnJlYWs7Ci0JY2FzZSBQUENfTVNHX1JFU0NIRURVTEU6Ci0JCXNjaGVkdWxlcl9pcGkoKTsKLQkJYnJlYWs7Ci0JY2FzZSBQUENfTVNHX0NBTExfRlVOQ19TSU5HTEU6Ci0JCWdlbmVyaWNfc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2ludGVycnVwdCgpOwotCQlicmVhazsKLQljYXNlIFBQQ19NU0dfREVCVUdHRVJfQlJFQUs6Ci0JCWlmIChjcmFzaF9pcGlfZnVuY3Rpb25fcHRyKSB7Ci0JCQljcmFzaF9pcGlfZnVuY3Rpb25fcHRyKGdldF9pcnFfcmVncygpKTsKLQkJCWJyZWFrOwotCQl9Ci0jaWZkZWYgQ09ORklHX0RFQlVHR0VSCi0JCWRlYnVnZ2VyX2lwaShnZXRfaXJxX3JlZ3MoKSk7Ci0JCWJyZWFrOwotI2VuZGlmIC8qIENPTkZJR19ERUJVR0dFUiAqLwotCQkvKiBGQUxMVEhST1VHSCAqLwotCWRlZmF1bHQ6Ci0JCXByaW50aygiU01QICVkOiBzbXBfbWVzc2FnZV9yZWN2KCk6IHVua25vd24gbXNnICVkXG4iLAotCQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpLCBtc2cpOwotCQlicmVhazsKLQl9Ci19Ci0KIHN0YXRpYyBpcnFyZXR1cm5fdCBjYWxsX2Z1bmN0aW9uX2FjdGlvbihpbnQgaXJxLCB2b2lkICpkYXRhKQogewogCWdlbmVyaWNfc21wX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KCk7CkBAIC0xNTYsOSArMTI5LDE3IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgZGVidWdfaXBpX2FjdGlvbihpbnQgaXJxLCB2b2lkICpkYXRhKQoraXJxcmV0dXJuX3QgZGVidWdfaXBpX2FjdGlvbihpbnQgaXJxLCB2b2lkICpkYXRhKQogewotCXNtcF9tZXNzYWdlX3JlY3YoUFBDX01TR19ERUJVR0dFUl9CUkVBSyk7CisJaWYgKGNyYXNoX2lwaV9mdW5jdGlvbl9wdHIpIHsKKwkJY3Jhc2hfaXBpX2Z1bmN0aW9uX3B0cihnZXRfaXJxX3JlZ3MoKSk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKyNpZmRlZiBDT05GSUdfREVCVUdHRVIKKwlkZWJ1Z2dlcl9pcGkoZ2V0X2lycV9yZWdzKCkpOworI2VuZGlmIC8qIENPTkZJR19ERUJVR0dFUiAqLworCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC0xOTcsNiArMTc4LDY2IEBACiAJcmV0dXJuIGVycjsKIH0KIAorI2lmZGVmIENPTkZJR19QUENfU01QX01VWEVEX0lQSQorc3RydWN0IGNwdV9tZXNzYWdlcyB7CisJaW50IG1lc3NhZ2VzOwkJCS8qIGN1cnJlbnQgbWVzc2FnZXMgKi8KKwl1bnNpZ25lZCBsb25nIGRhdGE7CQkvKiBkYXRhIGZvciBjYXVzZSBpcGkgKi8KK307CitzdGF0aWMgREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3RydWN0IGNwdV9tZXNzYWdlcywgaXBpX21lc3NhZ2UpOworCit2b2lkIHNtcF9tdXhlZF9pcGlfc2V0X2RhdGEoaW50IGNwdSwgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBjcHVfbWVzc2FnZXMgKmluZm8gPSAmcGVyX2NwdShpcGlfbWVzc2FnZSwgY3B1KTsKKworCWluZm8tPmRhdGEgPSBkYXRhOworfQorCit2b2lkIHNtcF9tdXhlZF9pcGlfbWVzc2FnZV9wYXNzKGludCBjcHUsIGludCBtc2cpCit7CisJc3RydWN0IGNwdV9tZXNzYWdlcyAqaW5mbyA9ICZwZXJfY3B1KGlwaV9tZXNzYWdlLCBjcHUpOworCWNoYXIgKm1lc3NhZ2UgPSAoY2hhciAqKSZpbmZvLT5tZXNzYWdlczsKKworCW1lc3NhZ2VbbXNnXSA9IDE7CisJbWIoKTsKKwlzbXBfb3BzLT5jYXVzZV9pcGkoY3B1LCBpbmZvLT5kYXRhKTsKK30KKwordm9pZCBzbXBfbXV4ZWRfaXBpX3Jlc2VuZCh2b2lkKQoreworCXN0cnVjdCBjcHVfbWVzc2FnZXMgKmluZm8gPSAmX19nZXRfY3B1X3ZhcihpcGlfbWVzc2FnZSk7CisKKwlpZiAoaW5mby0+bWVzc2FnZXMpCisJCXNtcF9vcHMtPmNhdXNlX2lwaShzbXBfcHJvY2Vzc29yX2lkKCksIGluZm8tPmRhdGEpOworfQorCitpcnFyZXR1cm5fdCBzbXBfaXBpX2RlbXV4KHZvaWQpCit7CisJc3RydWN0IGNwdV9tZXNzYWdlcyAqaW5mbyA9ICZfX2dldF9jcHVfdmFyKGlwaV9tZXNzYWdlKTsKKwl1bnNpZ25lZCBpbnQgYWxsOworCisJbWIoKTsJLyogb3JkZXIgYW55IGlycSBjbGVhciAqLworCisJZG8geworCQlhbGwgPSB4Y2hnX2xvY2FsKCZpbmZvLT5tZXNzYWdlcywgMCk7CisKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJaWYgKGFsbCAmICgxIDw8ICgyNCAtIDggKiBQUENfTVNHX0NBTExfRlVOQ1RJT04pKSkKKwkJCWdlbmVyaWNfc21wX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KCk7CisJCWlmIChhbGwgJiAoMSA8PCAoMjQgLSA4ICogUFBDX01TR19SRVNDSEVEVUxFKSkpCisJCQlzY2hlZHVsZXJfaXBpKCk7CisJCWlmIChhbGwgJiAoMSA8PCAoMjQgLSA4ICogUFBDX01TR19DQUxMX0ZVTkNfU0lOR0xFKSkpCisJCQlnZW5lcmljX3NtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pbnRlcnJ1cHQoKTsKKwkJaWYgKGFsbCAmICgxIDw8ICgyNCAtIDggKiBQUENfTVNHX0RFQlVHR0VSX0JSRUFLKSkpCisJCQlkZWJ1Z19pcGlfYWN0aW9uKDAsIE5VTEwpOworI2Vsc2UKKyNlcnJvciBVbnN1cHBvcnRlZCBFTkRJQU4KKyNlbmRpZgorCX0gd2hpbGUgKGluZm8tPm1lc3NhZ2VzKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKyNlbmRpZiAvKiBDT05GSUdfUFBDX1NNUF9NVVhFRF9JUEkgKi8KKwogdm9pZCBzbXBfc2VuZF9yZXNjaGVkdWxlKGludCBjcHUpCiB7CiAJaWYgKGxpa2VseShzbXBfb3BzKSkKQEAgLTIxNiwxMSArMjU3LDE4IEBACiAJCXNtcF9vcHMtPm1lc3NhZ2VfcGFzcyhjcHUsIFBQQ19NU0dfQ0FMTF9GVU5DVElPTik7CiB9CiAKLSNpZmRlZiBDT05GSUdfREVCVUdHRVIKLXZvaWQgc21wX3NlbmRfZGVidWdnZXJfYnJlYWsoaW50IGNwdSkKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR0dFUikgfHwgZGVmaW5lZChDT05GSUdfS0VYRUMpCit2b2lkIHNtcF9zZW5kX2RlYnVnZ2VyX2JyZWFrKHZvaWQpCiB7Ci0JaWYgKGxpa2VseShzbXBfb3BzKSkKLQkJc21wX29wcy0+bWVzc2FnZV9wYXNzKGNwdSwgUFBDX01TR19ERUJVR0dFUl9CUkVBSyk7CisJaW50IGNwdTsKKwlpbnQgbWUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaWYgKHVubGlrZWx5KCFzbXBfb3BzKSkKKwkJcmV0dXJuOworCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCisJCWlmIChjcHUgIT0gbWUpCisJCQlzbXBfb3BzLT5tZXNzYWdlX3Bhc3MoY3B1LCBQUENfTVNHX0RFQlVHR0VSX0JSRUFLKTsKIH0KICNlbmRpZgogCkBAIC0yMjgsOSArMjc2LDkgQEAKIHZvaWQgY3Jhc2hfc2VuZF9pcGkodm9pZCAoKmNyYXNoX2lwaV9jYWxsYmFjaykoc3RydWN0IHB0X3JlZ3MgKikpCiB7CiAJY3Jhc2hfaXBpX2Z1bmN0aW9uX3B0ciA9IGNyYXNoX2lwaV9jYWxsYmFjazsKLQlpZiAoY3Jhc2hfaXBpX2NhbGxiYWNrICYmIHNtcF9vcHMpIHsKKwlpZiAoY3Jhc2hfaXBpX2NhbGxiYWNrKSB7CiAJCW1iKCk7Ci0JCXNtcF9vcHMtPm1lc3NhZ2VfcGFzcyhNU0dfQUxMX0JVVF9TRUxGLCBQUENfTVNHX0RFQlVHR0VSX0JSRUFLKTsKKwkJc21wX3NlbmRfZGVidWdnZXJfYnJlYWsoKTsKIAl9CiB9CiAjZW5kaWYKQEAgLTQxMCw4ICs0NTgsNiBAQAogewogCWludCByYywgYzsKIAotCXNlY29uZGFyeV90aSA9IGN1cnJlbnRfc2V0W2NwdV07Ci0KIAlpZiAoc21wX29wcyA9PSBOVUxMIHx8CiAJICAgIChzbXBfb3BzLT5jcHVfYm9vdGFibGUgJiYgIXNtcF9vcHMtPmNwdV9ib290YWJsZShjcHUpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00MjEsNiArNDY3LDggQEAKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAorCXNlY29uZGFyeV90aSA9IGN1cnJlbnRfc2V0W2NwdV07CisKIAkvKiBNYWtlIHN1cmUgY2FsbGluLW1hcCBlbnRyeSBpcyAwIChjYW4gYmUgbGVmdG92ZXIgYSBDUFUKIAkgKiBob3RwbHVnCiAJICovCkBAIC00MzQsNyArNDgyLDExIEBACiAKIAkvKiB3YWtlIHVwIGNwdXMgKi8KIAlEQkcoInNtcDoga2lja2luZyBjcHUgJWRcbiIsIGNwdSk7Ci0Jc21wX29wcy0+a2lja19jcHUoY3B1KTsKKwlyYyA9IHNtcF9vcHMtPmtpY2tfY3B1KGNwdSk7CisJaWYgKHJjKSB7CisJCXByX2Vycigic21wOiBmYWlsZWQgc3RhcnRpbmcgY3B1ICVkIChyYyAlZClcbiIsIGNwdSwgcmMpOworCQlyZXR1cm4gcmM7CisJfQogCiAJLyoKIAkgKiB3YWl0IHRvIHNlZSBpZiB0aGUgY3B1IG1hZGUgYSBjYWxsaW4gKGlzIGFjdHVhbGx5IHVwKS4KQEAgLTUwNyw3ICs1NTksNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoY3B1X2ZpcnN0X3RocmVhZF9vZl9jb3JlKTsKIAotLyogTXVzdCBiZSBjYWxsZWQgd2hlbiBubyBjaGFuZ2UgY2FuIG9jY3VyIHRvIGNwdV9wcmVzZW50X21hcCwKKy8qIE11c3QgYmUgY2FsbGVkIHdoZW4gbm8gY2hhbmdlIGNhbiBvY2N1ciB0byBjcHVfcHJlc2VudF9tYXNrLAogICogaS5lLiBkdXJpbmcgY3B1IG9ubGluZSBvciBvZmZsaW5lLgogICovCiBzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpjcHVfdG9fbDJjYWNoZShpbnQgY3B1KQpAQCAtNjA4LDcgKzY2MCw3IEBACiAJICogc2Ugd2UgcGluIHVzIGRvd24gdG8gQ1BVIDAgZm9yIGEgc2hvcnQgd2hpbGUKIAkgKi8KIAlhbGxvY19jcHVtYXNrX3Zhcigmb2xkX21hc2ssIEdGUF9OT1dBSVQpOwotCWNwdW1hc2tfY29weShvbGRfbWFzaywgJmN1cnJlbnQtPmNwdXNfYWxsb3dlZCk7CisJY3B1bWFza19jb3B5KG9sZF9tYXNrLCB0c2tfY3B1c19hbGxvd2VkKGN1cnJlbnQpKTsKIAlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBjcHVtYXNrX29mKGJvb3RfY3B1aWQpKTsKIAkKIAlpZiAoc21wX29wcyAmJiBzbXBfb3BzLT5zZXR1cF9jcHUpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMKaW5kZXggYzBkOGMyMC4uZjBmMjE5OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNmcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYwpAQCAtMTgyLDYgKzE4Miw0MSBAQAogc3RhdGljIFNZU0RFVl9BVFRSKHNwdXJyLCAwNjAwLCBzaG93X3NwdXJyLCBOVUxMKTsKIHN0YXRpYyBTWVNERVZfQVRUUihkc2NyLCAwNjAwLCBzaG93X2RzY3IsIHN0b3JlX2RzY3IpOwogc3RhdGljIFNZU0RFVl9BVFRSKHB1cnIsIDA2MDAsIHNob3dfcHVyciwgc3RvcmVfcHVycik7CisKK3Vuc2lnbmVkIGxvbmcgZHNjcl9kZWZhdWx0ID0gMDsKK0VYUE9SVF9TWU1CT0woZHNjcl9kZWZhdWx0KTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19kc2NyX2RlZmF1bHQoc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MsCisJCXN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWx4XG4iLCBkc2NyX2RlZmF1bHQpOworfQorCitzdGF0aWMgc3NpemVfdCBfX3VzZWQgc3RvcmVfZHNjcl9kZWZhdWx0KHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLAorCQlzdHJ1Y3Qgc3lzZGV2X2NsYXNzX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLAorCQlzaXplX3QgY291bnQpCit7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IHJldCA9IDA7CisJCisJcmV0ID0gc3NjYW5mKGJ1ZiwgIiVseCIsICZ2YWwpOworCWlmIChyZXQgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZHNjcl9kZWZhdWx0ID0gdmFsOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgU1lTREVWX0NMQVNTX0FUVFIoZHNjcl9kZWZhdWx0LCAwNjAwLAorCQlzaG93X2RzY3JfZGVmYXVsdCwgc3RvcmVfZHNjcl9kZWZhdWx0KTsKKworc3RhdGljIHZvaWQgc3lzZnNfY3JlYXRlX2RzY3JfZGVmYXVsdCh2b2lkKQoreworCWludCBlcnIgPSAwOworCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9EU0NSKSkKKwkJZXJyID0gc3lzZnNfY3JlYXRlX2ZpbGUoJmNwdV9zeXNkZXZfY2xhc3Mua3NldC5rb2JqLAorCQkJJmF0dHJfZHNjcl9kZWZhdWx0LmF0dHIpOworfQogI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwogCiAjaWZkZWYgSEFTX1BQQ19QTUNfUEE2VApAQCAtNjE3LDYgKzY1Miw5IEBACiAJCWlmIChjcHVfb25saW5lKGNwdSkpCiAJCQlyZWdpc3Rlcl9jcHVfb25saW5lKGNwdSk7CiAJfQorI2lmZGVmIENPTkZJR19QUEM2NAorCXN5c2ZzX2NyZWF0ZV9kc2NyX2RlZmF1bHQoKTsKKyNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCmluZGV4IGQ3ODJjZDcuLmIxMzMwNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKQEAgLTE5OCw3ICsxOTgsNyBAQAogCX0gZWxzZSBpZiAoc2hvd191bmhhbmRsZWRfc2lnbmFscyAmJgogCQkgICAgdW5oYW5kbGVkX3NpZ25hbChjdXJyZW50LCBzaWducikgJiYKIAkJICAgIHByaW50a19yYXRlbGltaXQoKSkgewotCQkJcHJpbnRrKHJlZ3MtPm1zciAmIE1TUl9TRiA/IGZtdDY0IDogZm10MzIsCisJCQlwcmludGsocmVncy0+bXNyICYgTVNSXzY0QklUID8gZm10NjQgOiBmbXQzMiwKIAkJCQljdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsIHNpZ25yLAogCQkJCWFkZHIsIHJlZ3MtPm5pcCwgcmVncy0+bGluaywgY29kZSk7CiAJCX0KQEAgLTIyMCw3ICsyMjAsNyBAQAogCX0KIAogI2lmZGVmIENPTkZJR19LRVhFQwotCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVzX2luX3NyKTsKKwljcHVtYXNrX3NldF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpLCAmY3B1c19pbl9zcik7CiAjZW5kaWYKIAogCWRpZSgiU3lzdGVtIFJlc2V0IiwgcmVncywgU0lHQUJSVCk7CkBAIC05MDgsNiArOTA4LDI2IEBACiAJCXJldHVybiBlbXVsYXRlX2lzZWwocmVncywgaW5zdHdvcmQpOwogCX0KIAorI2lmZGVmIENPTkZJR19QUEM2NAorCS8qIEVtdWxhdGUgdGhlIG1mc3ByIHJELCBEU0NSLiAqLworCWlmICgoKGluc3R3b3JkICYgUFBDX0lOU1RfTUZTUFJfRFNDUl9NQVNLKSA9PSBQUENfSU5TVF9NRlNQUl9EU0NSKSAmJgorCQkJY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfRFNDUikpIHsKKwkJUFBDX1dBUk5fRU1VTEFURUQobWZkc2NyLCByZWdzKTsKKwkJcmQgPSAoaW5zdHdvcmQgPj4gMjEpICYgMHgxZjsKKwkJcmVncy0+Z3ByW3JkXSA9IG1mc3ByKFNQUk5fRFNDUik7CisJCXJldHVybiAwOworCX0KKwkvKiBFbXVsYXRlIHRoZSBtdHNwciBEU0NSLCByRC4gKi8KKwlpZiAoKChpbnN0d29yZCAmIFBQQ19JTlNUX01UU1BSX0RTQ1JfTUFTSykgPT0gUFBDX0lOU1RfTVRTUFJfRFNDUikgJiYKKwkJCWNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX0RTQ1IpKSB7CisJCVBQQ19XQVJOX0VNVUxBVEVEKG10ZHNjciwgcmVncyk7CisJCXJkID0gKGluc3R3b3JkID4+IDIxKSAmIDB4MWY7CisJCW10c3ByKFNQUk5fRFNDUiwgcmVncy0+Z3ByW3JkXSk7CisJCWN1cnJlbnQtPnRocmVhZC5kc2NyX2luaGVyaXQgPSAxOworCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYKKwogCXJldHVybiAtRUlOVkFMOwogfQogCkBAIC0xNTA1LDYgKzE1MjUsMTAgQEAKICNpZmRlZiBDT05GSUdfVlNYCiAJV0FSTl9FTVVMQVRFRF9TRVRVUCh2c3gpLAogI2VuZGlmCisjaWZkZWYgQ09ORklHX1BQQzY0CisJV0FSTl9FTVVMQVRFRF9TRVRVUChtZmRzY3IpLAorCVdBUk5fRU1VTEFURURfU0VUVVAobXRkc2NyKSwKKyNlbmRpZgogfTsKIAogdTMyIHBwY193YXJuX2VtdWxhdGVkOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC91ZGJnLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmcuYwppbmRleCBlMzljYWQ4Li4yM2Q2NWFiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmcuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmcuYwpAQCAtNjIsNiArNjIsOCBAQAogCXVkYmdfaW5pdF9jcG0oKTsKICNlbGlmIGRlZmluZWQoQ09ORklHX1BQQ19FQVJMWV9ERUJVR19VU0JHRUNLTykKIAl1ZGJnX2luaXRfdXNiZ2Vja28oKTsKKyNlbGlmIGRlZmluZWQoQ09ORklHX1BQQ19FQVJMWV9ERUJVR19XU1ApCisJdWRiZ19pbml0X3dzcCgpOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUFBDX0VBUkxZX0RFQlVHCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmdfMTY1NTAuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZ18xNjU1MC5jCmluZGV4IGJhYTMzYTcuLjY4MzdmODMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZ18xNjU1MC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZ18xNjU1MC5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vdWRiZy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9yZWdfYTIuaD4KIAogZXh0ZXJuIHU4IHJlYWxfcmVhZGIodm9sYXRpbGUgdTggX19pb21lbSAgKmFkZHIpOwogZXh0ZXJuIHZvaWQgcmVhbF93cml0ZWIodTggZGF0YSwgdm9sYXRpbGUgdTggX19pb21lbSAqYWRkcik7CkBAIC0yOTgsMyArMjk5LDUzIEBACiAJdWRiZ19nZXRjX3BvbGwgPSBOVUxMOwogfQogI2VuZGlmIC8qIENPTkZJR19QUENfRUFSTFlfREVCVUdfNDB4ICovCisKKyNpZmRlZiBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1dTUAorc3RhdGljIHZvaWQgdWRiZ193c3BfZmx1c2godm9pZCkKK3sKKwlpZiAodWRiZ19jb21wb3J0KSB7CisJCXdoaWxlICgocmVhZGIoJnVkYmdfY29tcG9ydC0+bHNyKSAmIExTUl9USFJFKSA9PSAwKQorCQkJLyogd2FpdCBmb3IgaWRsZSAqLzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVkYmdfd3NwX3B1dGMoY2hhciBjKQoreworCWlmICh1ZGJnX2NvbXBvcnQpIHsKKwkJaWYgKGMgPT0gJ1xuJykKKwkJCXVkYmdfd3NwX3B1dGMoJ1xyJyk7CisJCXVkYmdfd3NwX2ZsdXNoKCk7CisJCXdyaXRlYihjLCAmdWRiZ19jb21wb3J0LT50aHIpOyBlaWVpbygpOworCX0KK30KKworc3RhdGljIGludCB1ZGJnX3dzcF9nZXRjKHZvaWQpCit7CisJaWYgKHVkYmdfY29tcG9ydCkgeworCQl3aGlsZSAoKHJlYWRiKCZ1ZGJnX2NvbXBvcnQtPmxzcikgJiBMU1JfRFIpID09IDApCisJCQk7IC8qIHdhaXQgZm9yIGNoYXIgKi8KKwkJcmV0dXJuIHJlYWRiKCZ1ZGJnX2NvbXBvcnQtPnJicik7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCB1ZGJnX3dzcF9nZXRjX3BvbGwodm9pZCkKK3sKKwlpZiAodWRiZ19jb21wb3J0KQorCQlpZiAocmVhZGIoJnVkYmdfY29tcG9ydC0+bHNyKSAmIExTUl9EUikKKwkJCXJldHVybiByZWFkYigmdWRiZ19jb21wb3J0LT5yYnIpOworCXJldHVybiAtMTsKK30KKwordm9pZCBfX2luaXQgdWRiZ19pbml0X3dzcCh2b2lkKQoreworCXVkYmdfY29tcG9ydCA9IChzdHJ1Y3QgTlMxNjU1MCBfX2lvbWVtICopV1NQX1VBUlRfVklSVDsKKworCXVkYmdfaW5pdF91YXJ0KHVkYmdfY29tcG9ydCwgNTc2MDAsIDUwMDAwMDAwKTsKKworCXVkYmdfcHV0YyA9IHVkYmdfd3NwX3B1dGM7CisJdWRiZ19mbHVzaCA9IHVkYmdfd3NwX2ZsdXNoOworCXVkYmdfZ2V0YyA9IHVkYmdfd3NwX2dldGM7CisJdWRiZ19nZXRjX3BvbGwgPSB1ZGJnX3dzcF9nZXRjX3BvbGw7Cit9CisjZW5kaWYgLyogQ09ORklHX1BQQ19FQVJMWV9ERUJVR19XU1AgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmVjdG9yLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3ZlY3Rvci5TCmluZGV4IDlkZTZmMzkuLjRkNWEzZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmVjdG9yLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZWN0b3IuUwpAQCAtMTAyLDcgKzEwMiw3IEBACiAJTVRNU1JEKHI1KQkJCS8qIGVuYWJsZSB1c2Ugb2YgVk1YIG5vdyAqLwogCWlzeW5jCiAJUFBDX0xDTVBJCTAscjMsMAotCWJlcWxyLQkJCQkvKiBpZiBubyBwcmV2aW91cyBvd25lciwgZG9uZSAqLworCWJlcWxyCQkJCS8qIGlmIG5vIHByZXZpb3VzIG93bmVyLCBkb25lICovCiAJYWRkaQlyMyxyMyxUSFJFQUQJCS8qIHdhbnQgVEhSRUFEIG9mIHRhc2sgKi8KIAlQUENfTEwJcjUsUFRfUkVHUyhyMykKIAlQUENfTENNUEkJMCxyNSwwCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtLzQ0eC5jIGIvYXJjaC9wb3dlcnBjL2t2bS80NHguYwppbmRleCA3NGQwZTc0Li5kYTNhMTIyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtLzQ0eC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vNDR4LmMKQEAgLTEwNyw2ICsxMDcsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCBrdm1wcGNfY29yZV9nZXRfc3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncykKK3sKKwlrdm1wcGNfZ2V0X3NyZWdzX2l2b3IodmNwdSwgc3JlZ3MpOworfQorCitpbnQga3ZtcHBjX2NvcmVfc2V0X3NyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zcmVncyAqc3JlZ3MpCit7CisJcmV0dXJuIGt2bXBwY19zZXRfc3JlZ3NfaXZvcih2Y3B1LCBzcmVncyk7Cit9CisKIHN0cnVjdCBrdm1fdmNwdSAqa3ZtcHBjX2NvcmVfdmNwdV9jcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpCiB7CiAJc3RydWN0IGt2bXBwY192Y3B1XzQ0eCAqdmNwdV80NHg7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtLzQ0eF9lbXVsYXRlLmMgYi9hcmNoL3Bvd2VycGMva3ZtLzQ0eF9lbXVsYXRlLmMKaW5kZXggNjVlYTA4My4uNTQ5YmIyYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS80NHhfZW11bGF0ZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vNDR4X2VtdWxhdGUuYwpAQCAtMTU4LDcgKzE1OCw2IEBACiAJCWVtdWxhdGVkID0ga3ZtcHBjX2Jvb2tlX2VtdWxhdGVfbXRzcHIodmNwdSwgc3BybiwgcnMpOwogCX0KIAotCWt2bXBwY19zZXRfZXhpdF90eXBlKHZjcHUsIEVNVUxBVEVEX01UU1BSX0VYSVRTKTsKIAlyZXR1cm4gZW11bGF0ZWQ7CiB9CiAKQEAgLTE3OSw3ICsxNzgsNiBAQAogCQllbXVsYXRlZCA9IGt2bXBwY19ib29rZV9lbXVsYXRlX21mc3ByKHZjcHUsIHNwcm4sIHJ0KTsKIAl9CiAKLQlrdm1wcGNfc2V0X2V4aXRfdHlwZSh2Y3B1LCBFTVVMQVRFRF9NRlNQUl9FWElUUyk7CiAJcmV0dXJuIGVtdWxhdGVkOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3MuYwppbmRleCBjOTYxZGU0Li4wZjk1YjVjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzLmMKQEAgLTIzNiw3ICsyMzYsNyBAQAogCiBpbnQga3ZtcHBjX2NvcmVfcGVuZGluZ19kZWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXJldHVybiB0ZXN0X2JpdChCT09LM1NfSU5URVJSVVBUX0RFQ1JFTUVOVEVSID4+IDcsICZ2Y3B1LT5hcmNoLnBlbmRpbmdfZXhjZXB0aW9ucyk7CisJcmV0dXJuIHRlc3RfYml0KEJPT0szU19JUlFQUklPX0RFQ1JFTUVOVEVSLCAmdmNwdS0+YXJjaC5wZW5kaW5nX2V4Y2VwdGlvbnMpOwogfQogCiB2b2lkIGt2bXBwY19jb3JlX2RlcXVldWVfZGVjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3JtaGFuZGxlcnMuUyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3JtaGFuZGxlcnMuUwppbmRleCAyYjljOTA4Li4xYTFiMzQ0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19ybWhhbmRsZXJzLlMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3Nfcm1oYW5kbGVycy5TCkBAIC0zNSw5ICszNSw3IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19QUENfQk9PSzNTXzY0KQogCi0jZGVmaW5lIExPQURfU0hBRE9XX1ZDUFUocmVnKQkJCQlcCi0JbWZzcHIJcmVnLCBTUFJOX1NQUkdfUEFDQQotCisjZGVmaW5lIExPQURfU0hBRE9XX1ZDUFUocmVnKQlHRVRfUEFDQShyZWcpCQkJCQkKICNkZWZpbmUgU0hBRE9XX1ZDUFVfT0ZGCQlQQUNBX0tWTV9TVkNQVQogI2RlZmluZSBNU1JfTk9JUlEJCU1TUl9LRVJORUwgJiB+KE1TUl9JUiB8IE1TUl9EUikKICNkZWZpbmUgRlVOQyhuYW1lKSAJCUdMVUUoLixuYW1lKQpAQCAtNzIsNyArNzAsNyBAQAogLmdsb2JhbCBrdm1wcGNfdHJhbXBvbGluZV9caW50bm8KIGt2bXBwY190cmFtcG9saW5lX1xpbnRubzoKIAotCW10c3ByCVNQUk5fU1BSR19TQ1JBVENIMCwgcjEzCQkvKiBTYXZlIHIxMyAqLworCVNFVF9TQ1JBVENIMChyMTMpCQkvKiBTYXZlIHIxMyAqLwogCiAJLyoKIAkgKiBGaXJzdCB0aGluZyB0byBkbyBpcyB0byBmaW5kIG91dCBpZiB3ZSdyZSBjb21pbmcKQEAgLTkxLDcgKzg5LDcgQEAKIAlsd3oJcjEyLCAoU0hBRE9XX1ZDUFVfT0ZGICsgU1ZDUFVfU0NSQVRDSDEpKHIxMykKIAltdGNyCXIxMgogCVBQQ19MTAlyMTIsIChTSEFET1dfVkNQVV9PRkYgKyBTVkNQVV9TQ1JBVENIMCkocjEzKQotCW1mc3ByCXIxMywgU1BSTl9TUFJHX1NDUkFUQ0gwCQkvKiByMTMgPSBvcmlnaW5hbCByMTMgKi8KKwlHRVRfU0NSQVRDSDAocjEzKQkJCS8qIHIxMyA9IG9yaWdpbmFsIHIxMyAqLwogCWIJa3ZtcHBjX3Jlc3VtZV9caW50bm8JCS8qIEdldCBiYWNrIG9yaWdpbmFsIGhhbmRsZXIgKi8KIAogCS8qIE5vdyB3ZSBrbm93IHdlJ3JlIGhhbmRsaW5nIGEgS1ZNIGd1ZXN0ICovCkBAIC0xMTQsNiArMTEyLDkgQEAKIElOVEVSUlVQVF9UUkFNUE9MSU5FCUJPT0szU19JTlRFUlJVUFRfREFUQV9TVE9SQUdFCiBJTlRFUlJVUFRfVFJBTVBPTElORQlCT09LM1NfSU5URVJSVVBUX0lOU1RfU1RPUkFHRQogSU5URVJSVVBUX1RSQU1QT0xJTkUJQk9PSzNTX0lOVEVSUlVQVF9FWFRFUk5BTAorI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0CitJTlRFUlJVUFRfVFJBTVBPTElORQlCT09LM1NfSU5URVJSVVBUX0VYVEVSTkFMX0hWCisjZW5kaWYKIElOVEVSUlVQVF9UUkFNUE9MSU5FCUJPT0szU19JTlRFUlJVUFRfQUxJR05NRU5UCiBJTlRFUlJVUFRfVFJBTVBPTElORQlCT09LM1NfSU5URVJSVVBUX1BST0dSQU0KIElOVEVSUlVQVF9UUkFNUE9MSU5FCUJPT0szU19JTlRFUlJVUFRfRlBfVU5BVkFJTApAQCAtMTU4LDcgKzE1OSw3IEBACiAJbHd6CXIxMiwgKFNIQURPV19WQ1BVX09GRiArIFNWQ1BVX1NDUkFUQ0gxKShyMTMpCiAJbXRjcglyMTIKIAlQUENfTEwJcjEyLCAoU0hBRE9XX1ZDUFVfT0ZGICsgU1ZDUFVfU0NSQVRDSDApKHIxMykKLQltZnNwcglyMTMsIFNQUk5fU1BSR19TQ1JBVENIMAorCUdFVF9TQ1JBVENIMChyMTMpCiAKIAkvKiBBbmQgZ2V0IGJhY2sgaW50byB0aGUgY29kZSAqLwogCVJGSQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3Nfc2VnbWVudC5TIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3Nfc2VnbWVudC5TCmluZGV4IDdjNTJlZDAuLjQ1MTI2NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3NlZ21lbnQuUworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19zZWdtZW50LlMKQEAgLTE1NSwxNCArMTU1LDIwIEBACiAJUFBDX0xMCXIyLCAoU0hBRE9XX1ZDUFVfT0ZGICsgU1ZDUFVfSE9TVF9SMikocjEzKQogCiAJLyogU2F2ZSBndWVzdCBQQyBhbmQgTVNSICovCi0JbWZzcnIwCXIzCisJYW5kaS4JcjAscjEyLDB4MgorCWJlcQkxZgorCW1mc3ByCXIzLFNQUk5fSFNSUjAKKwltZnNwcglyNCxTUFJOX0hTUlIxCisJYW5kaS4JcjEyLHIxMiwweDNmZmQKKwliCTJmCisxOgltZnNycjAJcjMKIAltZnNycjEJcjQKLQorMjoKIAlQUENfU1RMCXIzLCAoU0hBRE9XX1ZDUFVfT0ZGICsgU1ZDUFVfUEMpKHIxMykKIAlQUENfU1RMCXI0LCAoU0hBRE9XX1ZDUFVfT0ZGICsgU1ZDUFVfU0hBRE9XX1NSUjEpKHIxMykKIAogCS8qIEdldCBzY3JhdGNoJ2VkIG9mZiByZWdpc3RlcnMgKi8KLQltZnNwcglyOSwgU1BSTl9TUFJHX1NDUkFUQ0gwCisJR0VUX1NDUkFUQ0gwKHI5KQogCVBQQ19MTAlyOCwgKFNIQURPV19WQ1BVX09GRiArIFNWQ1BVX1NDUkFUQ0gwKShyMTMpCiAJbHd6CXI3LCAoU0hBRE9XX1ZDUFVfT0ZGICsgU1ZDUFVfU0NSQVRDSDEpKHIxMykKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5jCmluZGV4IGVmNzZhY2IuLjg0NjJiM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9va2UuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlLmMKQEAgLTU2OSw2ICs1NjksNyBAQAogCWt2bXBwY19zZXRfbXNyKHZjcHUsIHJlZ3MtPm1zcik7CiAJdmNwdS0+YXJjaC5zaGFyZWQtPnNycjAgPSByZWdzLT5zcnIwOwogCXZjcHUtPmFyY2guc2hhcmVkLT5zcnIxID0gcmVncy0+c3JyMTsKKwlrdm1wcGNfc2V0X3BpZCh2Y3B1LCByZWdzLT5waWQpOwogCXZjcHUtPmFyY2guc2hhcmVkLT5zcHJnMCA9IHJlZ3MtPnNwcmcwOwogCXZjcHUtPmFyY2guc2hhcmVkLT5zcHJnMSA9IHJlZ3MtPnNwcmcxOwogCXZjcHUtPmFyY2guc2hhcmVkLT5zcHJnMiA9IHJlZ3MtPnNwcmcyOwpAQCAtNTg0LDE2ICs1ODUsMTY1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGdldF9zcmVnc19iYXNlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrdm1fc3JlZ3MgKnNyZWdzKQoreworCXU2NCB0YiA9IGdldF90YigpOworCisJc3JlZ3MtPnUuZS5mZWF0dXJlcyB8PSBLVk1fU1JFR1NfRV9CQVNFOworCisJc3JlZ3MtPnUuZS5jc3JyMCA9IHZjcHUtPmFyY2guY3NycjA7CisJc3JlZ3MtPnUuZS5jc3JyMSA9IHZjcHUtPmFyY2guY3NycjE7CisJc3JlZ3MtPnUuZS5tY3NyID0gdmNwdS0+YXJjaC5tY3NyOworCXNyZWdzLT51LmUuZXNyID0gdmNwdS0+YXJjaC5lc3I7CisJc3JlZ3MtPnUuZS5kZWFyID0gdmNwdS0+YXJjaC5zaGFyZWQtPmRhcjsKKwlzcmVncy0+dS5lLnRzciA9IHZjcHUtPmFyY2gudHNyOworCXNyZWdzLT51LmUudGNyID0gdmNwdS0+YXJjaC50Y3I7CisJc3JlZ3MtPnUuZS5kZWMgPSBrdm1wcGNfZ2V0X2RlYyh2Y3B1LCB0Yik7CisJc3JlZ3MtPnUuZS50YiA9IHRiOworCXNyZWdzLT51LmUudnJzYXZlID0gdmNwdS0+YXJjaC52cnNhdmU7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3NyZWdzX2Jhc2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncykKK3sKKwlpZiAoIShzcmVncy0+dS5lLmZlYXR1cmVzICYgS1ZNX1NSRUdTX0VfQkFTRSkpCisJCXJldHVybiAwOworCisJdmNwdS0+YXJjaC5jc3JyMCA9IHNyZWdzLT51LmUuY3NycjA7CisJdmNwdS0+YXJjaC5jc3JyMSA9IHNyZWdzLT51LmUuY3NycjE7CisJdmNwdS0+YXJjaC5tY3NyID0gc3JlZ3MtPnUuZS5tY3NyOworCXZjcHUtPmFyY2guZXNyID0gc3JlZ3MtPnUuZS5lc3I7CisJdmNwdS0+YXJjaC5zaGFyZWQtPmRhciA9IHNyZWdzLT51LmUuZGVhcjsKKwl2Y3B1LT5hcmNoLnZyc2F2ZSA9IHNyZWdzLT51LmUudnJzYXZlOworCXZjcHUtPmFyY2gudGNyID0gc3JlZ3MtPnUuZS50Y3I7CisKKwlpZiAoc3JlZ3MtPnUuZS51cGRhdGVfc3BlY2lhbCAmIEtWTV9TUkVHU19FX1VQREFURV9ERUMpCisJCXZjcHUtPmFyY2guZGVjID0gc3JlZ3MtPnUuZS5kZWM7CisKKwlrdm1wcGNfZW11bGF0ZV9kZWModmNwdSk7CisKKwlpZiAoc3JlZ3MtPnUuZS51cGRhdGVfc3BlY2lhbCAmIEtWTV9TUkVHU19FX1VQREFURV9UU1IpIHsKKwkJLyoKKwkJICogRklYTUU6IGV4aXN0aW5nIEtWTSB0aW1lciBoYW5kbGluZyBpcyBpbmNvbXBsZXRlLgorCQkgKiBUU1IgY2Fubm90IGJlIHJlYWQgYnkgdGhlIGd1ZXN0LCBhbmQgaXRzIHZhbHVlIGluCisJCSAqIHZjcHUtPmFyY2ggaXMgYWx3YXlzIHplcm8uICBGb3Igbm93LCBqdXN0IGhhbmRsZQorCQkgKiB0aGUgY2FzZSB3aGVyZSB0aGUgY2FsbGVyIGlzIHRyeWluZyB0byBpbmplY3QgYQorCQkgKiBkZWNyZW1lbnRlciBpbnRlcnJ1cHQuCisJCSAqLworCisJCWlmICgoc3JlZ3MtPnUuZS50c3IgJiBUU1JfRElTKSAmJgorCQkgICAgKHZjcHUtPmFyY2gudGNyICYgVENSX0RJRSkpCisJCQlrdm1wcGNfY29yZV9xdWV1ZV9kZWModmNwdSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9zcmVnc19hcmNoMjA2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrdm1fc3JlZ3MgKnNyZWdzKQoreworCXNyZWdzLT51LmUuZmVhdHVyZXMgfD0gS1ZNX1NSRUdTX0VfQVJDSDIwNjsKKworCXNyZWdzLT51LmUucGlyID0gMDsKKwlzcmVncy0+dS5lLm1jc3JyMCA9IHZjcHUtPmFyY2gubWNzcnIwOworCXNyZWdzLT51LmUubWNzcnIxID0gdmNwdS0+YXJjaC5tY3NycjE7CisJc3JlZ3MtPnUuZS5kZWNhciA9IHZjcHUtPmFyY2guZGVjYXI7CisJc3JlZ3MtPnUuZS5pdnByID0gdmNwdS0+YXJjaC5pdnByOworfQorCitzdGF0aWMgaW50IHNldF9zcmVnc19hcmNoMjA2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGt2bV9zcmVncyAqc3JlZ3MpCit7CisJaWYgKCEoc3JlZ3MtPnUuZS5mZWF0dXJlcyAmIEtWTV9TUkVHU19FX0FSQ0gyMDYpKQorCQlyZXR1cm4gMDsKKworCWlmIChzcmVncy0+dS5lLnBpciAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZjcHUtPmFyY2gubWNzcnIwID0gc3JlZ3MtPnUuZS5tY3NycjA7CisJdmNwdS0+YXJjaC5tY3NycjEgPSBzcmVncy0+dS5lLm1jc3JyMTsKKwl2Y3B1LT5hcmNoLmRlY2FyID0gc3JlZ3MtPnUuZS5kZWNhcjsKKwl2Y3B1LT5hcmNoLml2cHIgPSBzcmVncy0+dS5lLml2cHI7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBrdm1wcGNfZ2V0X3NyZWdzX2l2b3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncykKK3sKKwlzcmVncy0+dS5lLmZlYXR1cmVzIHw9IEtWTV9TUkVHU19FX0lWT1I7CisKKwlzcmVncy0+dS5lLml2b3JfbG93WzBdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fQ1JJVElDQUxdOworCXNyZWdzLT51LmUuaXZvcl9sb3dbMV0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19NQUNISU5FX0NIRUNLXTsKKwlzcmVncy0+dS5lLml2b3JfbG93WzJdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fREFUQV9TVE9SQUdFXTsKKwlzcmVncy0+dS5lLml2b3JfbG93WzNdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fSU5TVF9TVE9SQUdFXTsKKwlzcmVncy0+dS5lLml2b3JfbG93WzRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRVhURVJOQUxdOworCXNyZWdzLT51LmUuaXZvcl9sb3dbNV0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19BTElHTk1FTlRdOworCXNyZWdzLT51LmUuaXZvcl9sb3dbNl0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19QUk9HUkFNXTsKKwlzcmVncy0+dS5lLml2b3JfbG93WzddID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRlBfVU5BVkFJTF07CisJc3JlZ3MtPnUuZS5pdm9yX2xvd1s4XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1NZU0NBTExdOworCXNyZWdzLT51LmUuaXZvcl9sb3dbOV0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19BUF9VTkFWQUlMXTsKKwlzcmVncy0+dS5lLml2b3JfbG93WzEwXSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RFQ1JFTUVOVEVSXTsKKwlzcmVncy0+dS5lLml2b3JfbG93WzExXSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0ZJVF07CisJc3JlZ3MtPnUuZS5pdm9yX2xvd1sxMl0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19XQVRDSERPR107CisJc3JlZ3MtPnUuZS5pdm9yX2xvd1sxM10gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19EVExCX01JU1NdOworCXNyZWdzLT51LmUuaXZvcl9sb3dbMTRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fSVRMQl9NSVNTXTsKKwlzcmVncy0+dS5lLml2b3JfbG93WzE1XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RFQlVHXTsKK30KKworaW50IGt2bXBwY19zZXRfc3JlZ3NfaXZvcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fc3JlZ3MgKnNyZWdzKQoreworCWlmICghKHNyZWdzLT51LmUuZmVhdHVyZXMgJiBLVk1fU1JFR1NfRV9JVk9SKSkKKwkJcmV0dXJuIDA7CisKKwl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19DUklUSUNBTF0gPSBzcmVncy0+dS5lLml2b3JfbG93WzBdOworCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX01BQ0hJTkVfQ0hFQ0tdID0gc3JlZ3MtPnUuZS5pdm9yX2xvd1sxXTsKKwl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19EQVRBX1NUT1JBR0VdID0gc3JlZ3MtPnUuZS5pdm9yX2xvd1syXTsKKwl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19JTlNUX1NUT1JBR0VdID0gc3JlZ3MtPnUuZS5pdm9yX2xvd1szXTsKKwl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19FWFRFUk5BTF0gPSBzcmVncy0+dS5lLml2b3JfbG93WzRdOworCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0FMSUdOTUVOVF0gPSBzcmVncy0+dS5lLml2b3JfbG93WzVdOworCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1BST0dSQU1dID0gc3JlZ3MtPnUuZS5pdm9yX2xvd1s2XTsKKwl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19GUF9VTkFWQUlMXSA9IHNyZWdzLT51LmUuaXZvcl9sb3dbN107CisJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fU1lTQ0FMTF0gPSBzcmVncy0+dS5lLml2b3JfbG93WzhdOworCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0FQX1VOQVZBSUxdID0gc3JlZ3MtPnUuZS5pdm9yX2xvd1s5XTsKKwl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19ERUNSRU1FTlRFUl0gPSBzcmVncy0+dS5lLml2b3JfbG93WzEwXTsKKwl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19GSVRdID0gc3JlZ3MtPnUuZS5pdm9yX2xvd1sxMV07CisJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fV0FUQ0hET0ddID0gc3JlZ3MtPnUuZS5pdm9yX2xvd1sxMl07CisJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRFRMQl9NSVNTXSA9IHNyZWdzLT51LmUuaXZvcl9sb3dbMTNdOworCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0lUTEJfTUlTU10gPSBzcmVncy0+dS5lLml2b3JfbG93WzE0XTsKKwl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19ERUJVR10gPSBzcmVncy0+dS5lLml2b3JfbG93WzE1XTsKKworCXJldHVybiAwOworfQorCiBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfc3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrdm1fc3JlZ3MgKnNyZWdzKQogewotCXJldHVybiAtRU5PVFNVUFA7CisJc3JlZ3MtPnB2ciA9IHZjcHUtPmFyY2gucHZyOworCisJZ2V0X3NyZWdzX2Jhc2UodmNwdSwgc3JlZ3MpOworCWdldF9zcmVnc19hcmNoMjA2KHZjcHUsIHNyZWdzKTsKKwlrdm1wcGNfY29yZV9nZXRfc3JlZ3ModmNwdSwgc3JlZ3MpOworCXJldHVybiAwOwogfQogCiBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrdm1fc3JlZ3MgKnNyZWdzKQogewotCXJldHVybiAtRU5PVFNVUFA7CisJaW50IHJldDsKKworCWlmICh2Y3B1LT5hcmNoLnB2ciAhPSBzcmVncy0+cHZyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IHNldF9zcmVnc19iYXNlKHZjcHUsIHNyZWdzKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNldF9zcmVnc19hcmNoMjA2KHZjcHUsIHNyZWdzKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBrdm1wcGNfY29yZV9zZXRfc3JlZ3ModmNwdSwgc3JlZ3MpOwogfQogCiBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfZnB1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9mcHUgKmZwdSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9va2VfaW50ZXJydXB0cy5TIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9pbnRlcnJ1cHRzLlMKaW5kZXggMWNjNDcxZi4uYjU4Y2NhZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9pbnRlcnJ1cHRzLlMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9pbnRlcnJ1cHRzLlMKQEAgLTM4MCw3ICszODAsNiBAQAogCSAqIGJlY2F1c2UgaG9zdCBpbnRlcnJ1cHQgaGFuZGxlcnMgd291bGQgZ2V0IGNvbmZ1c2VkLiAqLwogCWx3eglyMSwgVkNQVV9HUFIocjEpKHI0KQogCi0JLyogWFhYIGhhbmRsZSBVU1BSRzAgKi8KIAkvKiBIb3N0IGludGVycnVwdCBoYW5kbGVycyBtYXkgaGF2ZSBjbG9iYmVyZWQgdGhlc2UgZ3Vlc3QtcmVhZGFibGUKIAkgKiBTUFJHcywgc28gd2UgbmVlZCB0byByZWxvYWQgdGhlbSBoZXJlIHdpdGggdGhlIGd1ZXN0J3MgdmFsdWVzLiAqLwogCWx3eglyMywgVkNQVV9TUFJHNChyNCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vZTUwMC5jIGIvYXJjaC9wb3dlcnBjL2t2bS9lNTAwLmMKaW5kZXggZTM3NjhlZS4uMzE4ZGJjNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9lNTAwLmMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9lNTAwLmMKQEAgLTYzLDYgKzYzLDcgQEAKIAogCS8qIFJlZ2lzdGVycyBpbml0ICovCiAJdmNwdS0+YXJjaC5wdnIgPSBtZnNwcihTUFJOX1BWUik7CisJdmNwdV9lNTAwLT5zdnIgPSBtZnNwcihTUFJOX1NWUik7CiAKIAkvKiBTaW5jZSBib29rZSBrdm0gb25seSBzdXBwb3J0IG9uZSBjb3JlLCB1cGRhdGUgYWxsIHZjcHVzJyBQSVIgdG8gMCAqLwogCXZjcHUtPnZjcHVfaWQgPSAwOwpAQCAtOTYsNiArOTcsODEgQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCBrdm1wcGNfY29yZV9nZXRfc3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncykKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwID0gdG9fZTUwMCh2Y3B1KTsKKworCXNyZWdzLT51LmUuZmVhdHVyZXMgfD0gS1ZNX1NSRUdTX0VfQVJDSDIwNl9NTVUgfCBLVk1fU1JFR1NfRV9TUEUgfAorCSAgICAgICAgICAgICAgICAgICAgICAgS1ZNX1NSRUdTX0VfUE07CisJc3JlZ3MtPnUuZS5pbXBsX2lkID0gS1ZNX1NSRUdTX0VfSU1QTF9GU0w7CisKKwlzcmVncy0+dS5lLmltcGwuZnNsLmZlYXR1cmVzID0gMDsKKwlzcmVncy0+dS5lLmltcGwuZnNsLnN2ciA9IHZjcHVfZTUwMC0+c3ZyOworCXNyZWdzLT51LmUuaW1wbC5mc2wuaGlkMCA9IHZjcHVfZTUwMC0+aGlkMDsKKwlzcmVncy0+dS5lLmltcGwuZnNsLm1jYXIgPSB2Y3B1X2U1MDAtPm1jYXI7CisKKwlzcmVncy0+dS5lLm1hczAgPSB2Y3B1X2U1MDAtPm1hczA7CisJc3JlZ3MtPnUuZS5tYXMxID0gdmNwdV9lNTAwLT5tYXMxOworCXNyZWdzLT51LmUubWFzMiA9IHZjcHVfZTUwMC0+bWFzMjsKKwlzcmVncy0+dS5lLm1hczdfMyA9ICgodTY0KXZjcHVfZTUwMC0+bWFzNyA8PCAzMikgfCB2Y3B1X2U1MDAtPm1hczM7CisJc3JlZ3MtPnUuZS5tYXM0ID0gdmNwdV9lNTAwLT5tYXM0OworCXNyZWdzLT51LmUubWFzNiA9IHZjcHVfZTUwMC0+bWFzNjsKKworCXNyZWdzLT51LmUubW11Y2ZnID0gbWZzcHIoU1BSTl9NTVVDRkcpOworCXNyZWdzLT51LmUudGxiY2ZnWzBdID0gdmNwdV9lNTAwLT50bGIwY2ZnOworCXNyZWdzLT51LmUudGxiY2ZnWzFdID0gdmNwdV9lNTAwLT50bGIxY2ZnOworCXNyZWdzLT51LmUudGxiY2ZnWzJdID0gMDsKKwlzcmVncy0+dS5lLnRsYmNmZ1szXSA9IDA7CisKKwlzcmVncy0+dS5lLml2b3JfaGlnaFswXSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1NQRV9VTkFWQUlMXTsKKwlzcmVncy0+dS5lLml2b3JfaGlnaFsxXSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1NQRV9GUF9EQVRBXTsKKwlzcmVncy0+dS5lLml2b3JfaGlnaFsyXSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1NQRV9GUF9ST1VORF07CisJc3JlZ3MtPnUuZS5pdm9yX2hpZ2hbM10gPQorCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19QRVJGT1JNQU5DRV9NT05JVE9SXTsKKworCWt2bXBwY19nZXRfc3JlZ3NfaXZvcih2Y3B1LCBzcmVncyk7Cit9CisKK2ludCBrdm1wcGNfY29yZV9zZXRfc3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncykKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwID0gdG9fZTUwMCh2Y3B1KTsKKworCWlmIChzcmVncy0+dS5lLmltcGxfaWQgPT0gS1ZNX1NSRUdTX0VfSU1QTF9GU0wpIHsKKwkJdmNwdV9lNTAwLT5zdnIgPSBzcmVncy0+dS5lLmltcGwuZnNsLnN2cjsKKwkJdmNwdV9lNTAwLT5oaWQwID0gc3JlZ3MtPnUuZS5pbXBsLmZzbC5oaWQwOworCQl2Y3B1X2U1MDAtPm1jYXIgPSBzcmVncy0+dS5lLmltcGwuZnNsLm1jYXI7CisJfQorCisJaWYgKHNyZWdzLT51LmUuZmVhdHVyZXMgJiBLVk1fU1JFR1NfRV9BUkNIMjA2X01NVSkgeworCQl2Y3B1X2U1MDAtPm1hczAgPSBzcmVncy0+dS5lLm1hczA7CisJCXZjcHVfZTUwMC0+bWFzMSA9IHNyZWdzLT51LmUubWFzMTsKKwkJdmNwdV9lNTAwLT5tYXMyID0gc3JlZ3MtPnUuZS5tYXMyOworCQl2Y3B1X2U1MDAtPm1hczcgPSBzcmVncy0+dS5lLm1hczdfMyA+PiAzMjsKKwkJdmNwdV9lNTAwLT5tYXMzID0gKHUzMilzcmVncy0+dS5lLm1hczdfMzsKKwkJdmNwdV9lNTAwLT5tYXM0ID0gc3JlZ3MtPnUuZS5tYXM0OworCQl2Y3B1X2U1MDAtPm1hczYgPSBzcmVncy0+dS5lLm1hczY7CisJfQorCisJaWYgKCEoc3JlZ3MtPnUuZS5mZWF0dXJlcyAmIEtWTV9TUkVHU19FX0lWT1IpKQorCQlyZXR1cm4gMDsKKworCWlmIChzcmVncy0+dS5lLmZlYXR1cmVzICYgS1ZNX1NSRUdTX0VfU1BFKSB7CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1NQRV9VTkFWQUlMXSA9CisJCQlzcmVncy0+dS5lLml2b3JfaGlnaFswXTsKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fU1BFX0ZQX0RBVEFdID0KKwkJCXNyZWdzLT51LmUuaXZvcl9oaWdoWzFdOworCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19TUEVfRlBfUk9VTkRdID0KKwkJCXNyZWdzLT51LmUuaXZvcl9oaWdoWzJdOworCX0KKworCWlmIChzcmVncy0+dS5lLmZlYXR1cmVzICYgS1ZNX1NSRUdTX0VfUE0pIHsKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fUEVSRk9STUFOQ0VfTU9OSVRPUl0gPQorCQkJc3JlZ3MtPnUuZS5pdm9yX2hpZ2hbM107CisJfQorCisJcmV0dXJuIGt2bXBwY19zZXRfc3JlZ3NfaXZvcih2Y3B1LCBzcmVncyk7Cit9CisKIHN0cnVjdCBrdm1fdmNwdSAqa3ZtcHBjX2NvcmVfdmNwdV9jcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgaWQpCiB7CiAJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vZTUwMF9lbXVsYXRlLmMgYi9hcmNoL3Bvd2VycGMva3ZtL2U1MDBfZW11bGF0ZS5jCmluZGV4IDhlM2VkZmIuLjY5Y2Q2NjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vZTUwMF9lbXVsYXRlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX2VtdWxhdGUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDExIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogQXV0aG9yOiBZdSBMaXUsIDx5dS5saXVAZnJlZXNjYWxlLmNvbT4KICAqCkBAIC03OCw4ICs3OCw3IEBACiAKIAlzd2l0Y2ggKHNwcm4pIHsKIAljYXNlIFNQUk5fUElEOgotCQl2Y3B1X2U1MDAtPnBpZFswXSA9IHZjcHUtPmFyY2guc2hhZG93X3BpZCA9Ci0JCQl2Y3B1LT5hcmNoLnBpZCA9IHNwcl92YWw7CisJCWt2bXBwY19zZXRfcGlkKHZjcHUsIHNwcl92YWwpOwogCQlicmVhazsKIAljYXNlIFNQUk5fUElEMToKIAkJdmNwdV9lNTAwLT5waWRbMV0gPSBzcHJfdmFsOyBicmVhazsKQEAgLTE3NSw2ICsxNzQsOCBAQAogCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBydCwgdmNwdV9lNTAwLT5oaWQwKTsgYnJlYWs7CiAJY2FzZSBTUFJOX0hJRDE6CiAJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJ0LCB2Y3B1X2U1MDAtPmhpZDEpOyBicmVhazsKKwljYXNlIFNQUk5fU1ZSOgorCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBydCwgdmNwdV9lNTAwLT5zdnIpOyBicmVhazsKIAogCWNhc2UgU1BSTl9NTVVDU1IwOgogCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBydCwgMCk7IGJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX3RsYi5jIGIvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX3RsYi5jCmluZGV4IGQ2ZDZkNDcuLmIxOGZlMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vZTUwMF90bGIuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2U1MDBfdGxiLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIEF1dGhvcjogWXUgTGl1LCB5dS5saXVAZnJlZXNjYWxlLmNvbQogICoKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICIuLi9tbS9tbXVfZGVjbC5oIgogI2luY2x1ZGUgImU1MDBfdGxiLmgiCiAjaW5jbHVkZSAidHJhY2UuaCIKKyNpbmNsdWRlICJ0aW1pbmcuaCIKIAogI2RlZmluZSB0b19odGxiMV9lc2VsKGVzZWwpICh0bGIxX2VudHJ5X251bSAtIChlc2VsKSAtIDEpCiAKQEAgLTUwNiw2ICs1MDcsNyBAQAogCQl2Y3B1X2U1MDAtPm1hczcgPSAwOwogCX0KIAorCWt2bXBwY19zZXRfZXhpdF90eXBlKHZjcHUsIEVNVUxBVEVEX1RMQlNYX0VYSVRTKTsKIAlyZXR1cm4gRU1VTEFURV9ET05FOwogfQogCkBAIC01NzEsNiArNTczLDcgQEAKIAkJd3JpdGVfaG9zdF90bGJlKHZjcHVfZTUwMCwgc3RsYnNlbCwgc2VzZWwpOwogCX0KIAorCWt2bXBwY19zZXRfZXhpdF90eXBlKHZjcHUsIEVNVUxBVEVEX1RMQldFX0VYSVRTKTsKIAlyZXR1cm4gRU1VTEFURV9ET05FOwogfQogCkBAIC02NzIsNiArNjc1LDE0IEBACiAJcmV0dXJuIC0xOwogfQogCit2b2lkIGt2bXBwY19zZXRfcGlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHBpZCkKK3sKKwlzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwID0gdG9fZTUwMCh2Y3B1KTsKKworCXZjcHVfZTUwMC0+cGlkWzBdID0gdmNwdS0+YXJjaC5zaGFkb3dfcGlkID0KKwkJdmNwdS0+YXJjaC5waWQgPSBwaWQ7Cit9CisKIHZvaWQga3ZtcHBjX2U1MDBfdGxiX3NldHVwKHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDApCiB7CiAJc3RydWN0IHRsYmUgKnRsYmU7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2VtdWxhdGUuYyBiL2FyY2gvcG93ZXJwYy9rdm0vZW11bGF0ZS5jCmluZGV4IGM2NGZkMjkuLjE0MWRjZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vZW11bGF0ZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vZW11bGF0ZS5jCkBAIC0xMTQsNiArMTE0LDEyIEBACiAJfQogfQogCit1MzIga3ZtcHBjX2dldF9kZWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdGIpCit7CisJdTY0IGpkID0gdGIgLSB2Y3B1LT5hcmNoLmRlY19qaWZmaWVzOworCXJldHVybiB2Y3B1LT5hcmNoLmRlYyAtIGpkOworfQorCiAvKiBYWFggdG8gZG86CiAgKiBsaGF4CiAgKiBsaGF1eApAQCAtMjc5LDExICsyODUsOCBAQAogCiAJCQljYXNlIFNQUk5fREVDOgogCQkJewotCQkJCXU2NCBqZCA9IGdldF90YigpIC0gdmNwdS0+YXJjaC5kZWNfamlmZmllczsKLQkJCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBydCwgdmNwdS0+YXJjaC5kZWMgLSBqZCk7Ci0JCQkJcHJfZGVidWcoIm1mREVDOiAleCAtICVsbHggPSAlbHhcbiIsCi0JCQkJCSB2Y3B1LT5hcmNoLmRlYywgamQsCi0JCQkJCSBrdm1wcGNfZ2V0X2dwcih2Y3B1LCBydCkpOworCQkJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJ0LAorCQkJCQkgICAgICAga3ZtcHBjX2dldF9kZWModmNwdSwgZ2V0X3RiKCkpKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWRlZmF1bHQ6CkBAIC0yOTQsNiArMjk3LDcgQEAKIAkJCQl9CiAJCQkJYnJlYWs7CiAJCQl9CisJCQlrdm1wcGNfc2V0X2V4aXRfdHlwZSh2Y3B1LCBFTVVMQVRFRF9NRlNQUl9FWElUUyk7CiAJCQlicmVhazsKIAogCQljYXNlIE9QXzMxX1hPUF9TVEhYOgpAQCAtMzYzLDYgKzM2Nyw3IEBACiAJCQkJCXByaW50aygibXRzcHI6IHVua25vd24gc3ByICV4XG4iLCBzcHJuKTsKIAkJCQlicmVhazsKIAkJCX0KKwkJCWt2bXBwY19zZXRfZXhpdF90eXBlKHZjcHUsIEVNVUxBVEVEX01UU1BSX0VYSVRTKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgT1BfMzFfWE9QX0RDQkk6CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jCmluZGV4IDk5NzU4NDYuLjYxNmRkNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jCkBAIC0xNzUsNyArMTc1LDExIEBACiAJaW50IHI7CiAKIAlzd2l0Y2ggKGV4dCkgeworI2lmZGVmIENPTkZJR19CT09LRQorCWNhc2UgS1ZNX0NBUF9QUENfQk9PS0VfU1JFR1M6CisjZWxzZQogCWNhc2UgS1ZNX0NBUF9QUENfU0VHU1RBVEU6CisjZW5kaWYKIAljYXNlIEtWTV9DQVBfUFBDX1BBSVJFRF9TSU5HTEVTOgogCWNhc2UgS1ZNX0NBUF9QUENfVU5TRVRfSVJROgogCWNhc2UgS1ZNX0NBUF9QUENfSVJRX0xFVkVMOgpAQCAtMjg0LDYgKzI4OCwxMCBAQAogCXRhc2tsZXRfaW5pdCgmdmNwdS0+YXJjaC50YXNrbGV0LCBrdm1wcGNfZGVjcmVtZW50ZXJfZnVuYywgKHVsb25nKXZjcHUpOwogCXZjcHUtPmFyY2guZGVjX3RpbWVyLmZ1bmN0aW9uID0ga3ZtcHBjX2RlY3JlbWVudGVyX3dha2V1cDsKIAorI2lmZGVmIENPTkZJR19LVk1fRVhJVF9USU1JTkcKKwltdXRleF9pbml0KCZ2Y3B1LT5hcmNoLmV4aXRfdGltaW5nX2xvY2spOworI2VuZGlmCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjk0LDEyICszMDIsMjUgQEAKIAogdm9pZCBrdm1fYXJjaF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQogeworI2lmZGVmIENPTkZJR19CT09LRQorCS8qCisJICogdnJzYXZlIChmb3JtZXJseSB1c3ByZzApIGlzbid0IHVzZWQgYnkgTGludXgsIGJ1dCBtYXkKKwkgKiBiZSB1c2VkIGJ5IHRoZSBndWVzdC4KKwkgKgorCSAqIE9uIG5vbi1ib29rZSB0aGlzIGlzIGFzc29jaWF0ZWQgd2l0aCBBbHRpdmVjIGFuZAorCSAqIGlzIGhhbmRsZWQgYnkgY29kZSBpbiBib29rM3MuYy4KKwkgKi8KKwltdHNwcihTUFJOX1ZSU0FWRSwgdmNwdS0+YXJjaC52cnNhdmUpOworI2VuZGlmCiAJa3ZtcHBjX2NvcmVfdmNwdV9sb2FkKHZjcHUsIGNwdSk7CiB9CiAKIHZvaWQga3ZtX2FyY2hfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCWt2bXBwY19jb3JlX3ZjcHVfcHV0KHZjcHUpOworI2lmZGVmIENPTkZJR19CT09LRQorCXZjcHUtPmFyY2gudnJzYXZlID0gbWZzcHIoU1BSTl9WUlNBVkUpOworI2VuZGlmCiB9CiAKIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9ndWVzdF9kZWJ1ZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL3RpbWluZy5jIGIvYXJjaC9wb3dlcnBjL2t2bS90aW1pbmcuYwppbmRleCBhMDIxZjU4Li4zMTkxNzdkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL3RpbWluZy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vdGltaW5nLmMKQEAgLTM0LDggKzM0LDggQEAKIHsKIAlpbnQgaTsKIAotCS8qIHBhdXNlIGd1ZXN0IGV4ZWN1dGlvbiB0byBhdm9pZCBjb25jdXJyZW50IHVwZGF0ZXMgKi8KLQltdXRleF9sb2NrKCZ2Y3B1LT5tdXRleCk7CisJLyogVGFrZSBhIGxvY2sgdG8gYXZvaWQgY29uY3VycmVudCB1cGRhdGVzICovCisJbXV0ZXhfbG9jaygmdmNwdS0+YXJjaC5leGl0X3RpbWluZ19sb2NrKTsKIAogCXZjcHUtPmFyY2gubGFzdF9leGl0X3R5cGUgPSAweERFQUQ7CiAJZm9yIChpID0gMDsgaSA8IF9fTlVNQkVSX09GX0tWTV9FWElUX1RZUEVTOyBpKyspIHsKQEAgLTQ5LDcgKzQ5LDcgQEAKIAl2Y3B1LT5hcmNoLnRpbWluZ19leGl0LnR2NjQgPSAwOwogCXZjcHUtPmFyY2gudGltaW5nX2xhc3RfZW50ZXIudHY2NCA9IDA7CiAKLQltdXRleF91bmxvY2soJnZjcHUtPm11dGV4KTsKKwltdXRleF91bmxvY2soJnZjcHUtPmFyY2guZXhpdF90aW1pbmdfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIGFkZF9leGl0X3RpbWluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkdXJhdGlvbiwgaW50IHR5cGUpCkBAIC02NSw2ICs2NSw4IEBACiAJCXJldHVybjsKIAl9CiAKKwltdXRleF9sb2NrKCZ2Y3B1LT5hcmNoLmV4aXRfdGltaW5nX2xvY2spOworCiAJdmNwdS0+YXJjaC50aW1pbmdfY291bnRfdHlwZVt0eXBlXSsrOwogCiAJLyogc3VtICovCkBAIC05Myw2ICs5NSw4IEBACiAJCXZjcHUtPmFyY2gudGltaW5nX21pbl9kdXJhdGlvblt0eXBlXSA9IGR1cmF0aW9uOwogCWlmICh1bmxpa2VseShkdXJhdGlvbiA+IHZjcHUtPmFyY2gudGltaW5nX21heF9kdXJhdGlvblt0eXBlXSkpCiAJCXZjcHUtPmFyY2gudGltaW5nX21heF9kdXJhdGlvblt0eXBlXSA9IGR1cmF0aW9uOworCisJbXV0ZXhfdW5sb2NrKCZ2Y3B1LT5hcmNoLmV4aXRfdGltaW5nX2xvY2spOwogfQogCiB2b2lkIGt2bXBwY191cGRhdGVfdGltaW5nX3N0YXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTE0NywxNyArMTUxLDMwIEBACiB7CiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gbS0+cHJpdmF0ZTsKIAlpbnQgaTsKKwl1NjQgbWluLCBtYXgsIHN1bSwgc3VtX3F1YWQ7CiAKIAlzZXFfcHJpbnRmKG0sICIlcyIsICJ0eXBlCWNvdW50CW1pbgltYXgJc3VtCXN1bV9zcXVhcmVkXG4iKTsKIAorCiAJZm9yIChpID0gMDsgaSA8IF9fTlVNQkVSX09GX0tWTV9FWElUX1RZUEVTOyBpKyspIHsKKworCQltaW4gPSB2Y3B1LT5hcmNoLnRpbWluZ19taW5fZHVyYXRpb25baV07CisJCWRvX2RpdihtaW4sIHRiX3RpY2tzX3Blcl91c2VjKTsKKwkJbWF4ID0gdmNwdS0+YXJjaC50aW1pbmdfbWF4X2R1cmF0aW9uW2ldOworCQlkb19kaXYobWF4LCB0Yl90aWNrc19wZXJfdXNlYyk7CisJCXN1bSA9IHZjcHUtPmFyY2gudGltaW5nX3N1bV9kdXJhdGlvbltpXTsKKwkJZG9fZGl2KHN1bSwgdGJfdGlja3NfcGVyX3VzZWMpOworCQlzdW1fcXVhZCA9IHZjcHUtPmFyY2gudGltaW5nX3N1bV9xdWFkX2R1cmF0aW9uW2ldOworCQlkb19kaXYoc3VtX3F1YWQsIHRiX3RpY2tzX3Blcl91c2VjKTsKKwogCQlzZXFfcHJpbnRmKG0sICIlMTJzCSUxMGQJJTEwbGxkCSUxMGxsZAklMjBsbGQJJTIwbGxkXG4iLAogCQkJa3ZtX2V4aXRfbmFtZXNbaV0sCiAJCQl2Y3B1LT5hcmNoLnRpbWluZ19jb3VudF90eXBlW2ldLAotCQkJdmNwdS0+YXJjaC50aW1pbmdfbWluX2R1cmF0aW9uW2ldLAotCQkJdmNwdS0+YXJjaC50aW1pbmdfbWF4X2R1cmF0aW9uW2ldLAotCQkJdmNwdS0+YXJjaC50aW1pbmdfc3VtX2R1cmF0aW9uW2ldLAotCQkJdmNwdS0+YXJjaC50aW1pbmdfc3VtX3F1YWRfZHVyYXRpb25baV0pOworCQkJbWluLAorCQkJbWF4LAorCQkJc3VtLAorCQkJc3VtX3F1YWQpOworCiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2xpYi9hbGxvYy5jIGIvYXJjaC9wb3dlcnBjL2xpYi9hbGxvYy5jCmluZGV4IGY1M2UwOWMuLjEzYjY3NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9saWIvYWxsb2MuYworKysgYi9hcmNoL3Bvd2VycGMvbGliL2FsbG9jLmMKQEAgLTYsMTQgKzYsNiBAQAogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCi12b2lkICogX19pbml0X3JlZm9rIGFsbG9jX21heWJlX2Jvb3RtZW0oc2l6ZV90IHNpemUsIGdmcF90IG1hc2spCi17Ci0JaWYgKG1lbV9pbml0X2RvbmUpCi0JCXJldHVybiBrbWFsbG9jKHNpemUsIG1hc2spOwotCWVsc2UKLQkJcmV0dXJuIGFsbG9jX2Jvb3RtZW0oc2l6ZSk7Ci19Ci0KIHZvaWQgKiBfX2luaXRfcmVmb2sgemFsbG9jX21heWJlX2Jvb3RtZW0oc2l6ZV90IHNpemUsIGdmcF90IG1hc2spCiB7CiAJdm9pZCAqcDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9saWIvY29weXBhZ2VfNjQuUyBiL2FyY2gvcG93ZXJwYy9saWIvY29weXBhZ2VfNjQuUwppbmRleCA0ZDRlZWI5Li41M2RjYjZiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbGliL2NvcHlwYWdlXzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2xpYi9jb3B5cGFnZV82NC5TCkBAIC02LDYgKzYsNyBAQAogICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3BwY19hc20uaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KQEAgLTE1LDkgKzE2LDkgQEAKICAgICAgICAgLnRjICAgICAgICAgICAgIHBwYzY0X2NhY2hlc1tUQ10scHBjNjRfY2FjaGVzCiAgICAgICAgIC5zZWN0aW9uICAgICAgICAiLnRleHQiCiAKLQotX0dMT0JBTChjb3B5XzRLX3BhZ2UpCi0JbGkJcjUsNDA5NgkJLyogNEsgcGFnZSBzaXplICovCitfR0xPQkFMKGNvcHlfcGFnZSkKKwlsaXMJcjUsUEFHRV9TSVpFQGgKKwlvcmkJcjUscjUsUEFHRV9TSVpFQGwKIEJFR0lOX0ZUUl9TRUNUSU9OCiAJbGQgICAgICByMTAsUFBDNjRfQ0FDSEVTQHRvYyhyMikKIAlsd3oJcjExLERDQUNIRUwxTE9HTElORVNJWkUocjEwKQkvKiBsb2cyIG9mIGNhY2hlIGxpbmUgc2l6ZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2xpYi9kZXZyZXMuYyBiL2FyY2gvcG93ZXJwYy9saWIvZGV2cmVzLmMKaW5kZXggZGVhYzRkMy4uZTkxNjE1YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2xpYi9kZXZyZXMuYworKysgYi9hcmNoL3Bvd2VycGMvbGliL2RldnJlcy5jCkBAIC05LDExICs5LDExIEBACiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4JLyogZGV2cmVzXyooKSwgZGV2bV9pb3JlbWFwX3JlbGVhc2UoKSAqLwogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+CQkvKiBpb3JlbWFwX2ZsYWdzKCkgKi8KKyNpbmNsdWRlIDxsaW51eC9pby5oPgkJLyogaW9yZW1hcF9wcm90KCkgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4JLyogRVhQT1JUX1NZTUJPTCgpICovCiAKIC8qKgotICogZGV2bV9pb3JlbWFwX3Byb3QgLSBNYW5hZ2VkIGlvcmVtYXBfZmxhZ3MoKQorICogZGV2bV9pb3JlbWFwX3Byb3QgLSBNYW5hZ2VkIGlvcmVtYXBfcHJvdCgpCiAgKiBAZGV2OiBHZW5lcmljIGRldmljZSB0byByZW1hcCBJTyBhZGRyZXNzIGZvcgogICogQG9mZnNldDogQlVTIG9mZnNldCB0byBtYXAKICAqIEBzaXplOiBTaXplIG9mIG1hcApAQCAtMzEsNyArMzEsNyBAQAogCWlmICghcHRyKQogCQlyZXR1cm4gTlVMTDsKIAotCWFkZHIgPSBpb3JlbWFwX2ZsYWdzKG9mZnNldCwgc2l6ZSwgZmxhZ3MpOworCWFkZHIgPSBpb3JlbWFwX3Byb3Qob2Zmc2V0LCBzaXplLCBmbGFncyk7CiAJaWYgKGFkZHIpIHsKIAkJKnB0ciA9IGFkZHI7CiAJCWRldnJlc19hZGQoZGV2LCBwdHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2xpYi9zc3RlcC5jIGIvYXJjaC9wb3dlcnBjL2xpYi9zc3RlcC5jCmluZGV4IGFlNTE4OWEuLjlhNTIzNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9saWIvc3N0ZXAuYworKysgYi9hcmNoL3Bvd2VycGMvbGliL3NzdGVwLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlIDxhc20vc3N0ZXAuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTQ1LDYgKzQ2LDE4IEBACiAjZW5kaWYKIAogLyoKKyAqIEVtdWxhdGUgdGhlIHRydW5jYXRpb24gb2YgNjQgYml0IHZhbHVlcyBpbiAzMi1iaXQgbW9kZS4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgdHJ1bmNhdGVfaWZfMzJiaXQodW5zaWduZWQgbG9uZyBtc3IsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworI2lmZGVmIF9fcG93ZXJwYzY0X18KKwlpZiAoKG1zciAmIE1TUl82NEJJVCkgPT0gMCkKKwkJdmFsICY9IDB4ZmZmZmZmZmZVTDsKKyNlbmRpZgorCXJldHVybiB2YWw7Cit9CisKKy8qCiAgKiBEZXRlcm1pbmUgd2hldGhlciBhIGNvbmRpdGlvbmFsIGJyYW5jaCBpbnN0cnVjdGlvbiB3b3VsZCBicmFuY2guCiAgKi8KIHN0YXRpYyBpbnQgX19rcHJvYmVzIGJyYW5jaF90YWtlbih1bnNpZ25lZCBpbnQgaW5zdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQpAQCAtOTAsMTEgKzEwMyw4IEBACiAJCWlmIChpbnN0ciAmIDB4MDQwMDAwMDApCQkvKiB1cGRhdGUgZm9ybXMgKi8KIAkJCXJlZ3MtPmdwcltyYV0gPSBlYTsKIAl9Ci0jaWZkZWYgX19wb3dlcnBjNjRfXwotCWlmICghKHJlZ3MtPm1zciAmIE1TUl9TRikpCi0JCWVhICY9IDB4ZmZmZmZmZmZVTDsKLSNlbmRpZgotCXJldHVybiBlYTsKKworCXJldHVybiB0cnVuY2F0ZV9pZl8zMmJpdChyZWdzLT5tc3IsIGVhKTsKIH0KIAogI2lmZGVmIF9fcG93ZXJwYzY0X18KQEAgLTExMyw5ICsxMjMsOCBAQAogCQlpZiAoKGluc3RyICYgMykgPT0gMSkJCS8qIHVwZGF0ZSBmb3JtcyAqLwogCQkJcmVncy0+Z3ByW3JhXSA9IGVhOwogCX0KLQlpZiAoIShyZWdzLT5tc3IgJiBNU1JfU0YpKQotCQllYSAmPSAweGZmZmZmZmZmVUw7Ci0JcmV0dXJuIGVhOworCisJcmV0dXJuIHRydW5jYXRlX2lmXzMyYml0KHJlZ3MtPm1zciwgZWEpOwogfQogI2VuZGlmIC8qIF9fcG93ZXJwYzY0ICovCiAKQEAgLTEzNiwxMSArMTQ1LDggQEAKIAkJaWYgKGRvX3VwZGF0ZSkJCS8qIHVwZGF0ZSBmb3JtcyAqLwogCQkJcmVncy0+Z3ByW3JhXSA9IGVhOwogCX0KLSNpZmRlZiBfX3Bvd2VycGM2NF9fCi0JaWYgKCEocmVncy0+bXNyICYgTVNSX1NGKSkKLQkJZWEgJj0gMHhmZmZmZmZmZlVMOwotI2VuZGlmCi0JcmV0dXJuIGVhOworCisJcmV0dXJuIHRydW5jYXRlX2lmXzMyYml0KHJlZ3MtPm1zciwgZWEpOwogfQogCiAvKgpAQCAtNDY2LDcgKzQ3Miw3IEBACiAKIAlyZWdzLT5jY3IgPSAocmVncy0+Y2NyICYgMHgwZmZmZmZmZikgfCAoKHJlZ3MtPnhlciA+PiAzKSAmIDB4MTAwMDAwMDApOwogI2lmZGVmIF9fcG93ZXJwYzY0X18KLQlpZiAoIShyZWdzLT5tc3IgJiBNU1JfU0YpKQorCWlmICghKHJlZ3MtPm1zciAmIE1TUl82NEJJVCkpCiAJCXZhbCA9IChpbnQpIHZhbDsKICNlbmRpZgogCWlmICh2YWwgPCAwKQpAQCAtNDg3LDcgKzQ5Myw3IEBACiAJCSsrdmFsOwogCXJlZ3MtPmdwcltyZF0gPSB2YWw7CiAjaWZkZWYgX19wb3dlcnBjNjRfXwotCWlmICghKHJlZ3MtPm1zciAmIE1TUl9TRikpIHsKKwlpZiAoIShyZWdzLT5tc3IgJiBNU1JfNjRCSVQpKSB7CiAJCXZhbCA9ICh1bnNpZ25lZCBpbnQpIHZhbDsKIAkJdmFsMSA9ICh1bnNpZ25lZCBpbnQpIHZhbDE7CiAJfQpAQCAtNTcwLDggKzU3Niw3IEBACiAJCWlmICgoaW5zdHIgJiAyKSA9PSAwKQogCQkJaW1tICs9IHJlZ3MtPm5pcDsKIAkJcmVncy0+bmlwICs9IDQ7Ci0JCWlmICgocmVncy0+bXNyICYgTVNSX1NGKSA9PSAwKQotCQkJcmVncy0+bmlwICY9IDB4ZmZmZmZmZmZVTDsKKwkJcmVncy0+bmlwID0gdHJ1bmNhdGVfaWZfMzJiaXQocmVncy0+bXNyLCByZWdzLT5uaXApOwogCQlpZiAoaW5zdHIgJiAxKQogCQkJcmVncy0+bGluayA9IHJlZ3MtPm5pcDsKIAkJaWYgKGJyYW5jaF90YWtlbihpbnN0ciwgcmVncykpCkBAIC02MDQsMTMgKzYwOSw5IEBACiAJCQlpbW0gLT0gMHgwNDAwMDAwMDsKIAkJaWYgKChpbnN0ciAmIDIpID09IDApCiAJCQlpbW0gKz0gcmVncy0+bmlwOwotCQlpZiAoaW5zdHIgJiAxKSB7Ci0JCQlyZWdzLT5saW5rID0gcmVncy0+bmlwICsgNDsKLQkJCWlmICgocmVncy0+bXNyICYgTVNSX1NGKSA9PSAwKQotCQkJCXJlZ3MtPmxpbmsgJj0gMHhmZmZmZmZmZlVMOwotCQl9Ci0JCWlmICgocmVncy0+bXNyICYgTVNSX1NGKSA9PSAwKQotCQkJaW1tICY9IDB4ZmZmZmZmZmZVTDsKKwkJaWYgKGluc3RyICYgMSkKKwkJCXJlZ3MtPmxpbmsgPSB0cnVuY2F0ZV9pZl8zMmJpdChyZWdzLT5tc3IsIHJlZ3MtPm5pcCArIDQpOworCQlpbW0gPSB0cnVuY2F0ZV9pZl8zMmJpdChyZWdzLT5tc3IsIGltbSk7CiAJCXJlZ3MtPm5pcCA9IGltbTsKIAkJcmV0dXJuIDE7CiAJY2FzZSAxOToKQEAgLTYxOCwxMSArNjE5LDggQEAKIAkJY2FzZSAxNjoJLyogYmNsciAqLwogCQljYXNlIDUyODoJLyogYmNjdHIgKi8KIAkJCWltbSA9IChpbnN0ciAmIDB4NDAwKT8gcmVncy0+Y3RyOiByZWdzLT5saW5rOwotCQkJcmVncy0+bmlwICs9IDQ7Ci0JCQlpZiAoKHJlZ3MtPm1zciAmIE1TUl9TRikgPT0gMCkgewotCQkJCXJlZ3MtPm5pcCAmPSAweGZmZmZmZmZmVUw7Ci0JCQkJaW1tICY9IDB4ZmZmZmZmZmZVTDsKLQkJCX0KKwkJCXJlZ3MtPm5pcCA9IHRydW5jYXRlX2lmXzMyYml0KHJlZ3MtPm1zciwgcmVncy0+bmlwICsgNCk7CisJCQlpbW0gPSB0cnVuY2F0ZV9pZl8zMmJpdChyZWdzLT5tc3IsIGltbSk7CiAJCQlpZiAoaW5zdHIgJiAxKQogCQkJCXJlZ3MtPmxpbmsgPSByZWdzLT5uaXA7CiAJCQlpZiAoYnJhbmNoX3Rha2VuKGluc3RyLCByZWdzKSkKQEAgLTE2MTYsMTEgKzE2MTQsNyBAQAogCQlyZXR1cm4gMDsJLyogaW52b2tlIERTSSBpZiAtRUZBVUxUPyAqLwogCX0KICBpbnN0cl9kb25lOgotCXJlZ3MtPm5pcCArPSA0OwotI2lmZGVmIF9fcG93ZXJwYzY0X18KLQlpZiAoKHJlZ3MtPm1zciAmIE1TUl9TRikgPT0gMCkKLQkJcmVncy0+bmlwICY9IDB4ZmZmZmZmZmZVTDsKLSNlbmRpZgorCXJlZ3MtPm5pcCA9IHRydW5jYXRlX2lmXzMyYml0KHJlZ3MtPm1zciwgcmVncy0+bmlwICsgNCk7CiAJcmV0dXJuIDE7CiAKICBsb2dpY2FsX2RvbmU6CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF9sb3dfNjQuUyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX2xvd182NC5TCmluZGV4IDViN2RkNGUuLmEyNDJiNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX2xvd182NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX2xvd182NC5TCkBAIC0xMTgsNyArMTE4LDcgQEAKIEJFR0lOX0ZUUl9TRUNUSU9OCiAJY21wZGkJcjksMAkJCS8qIGNoZWNrIHNlZ21lbnQgc2l6ZSAqLwogCWJuZQkzZgotRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfMVRfU0VHTUVOVCkKK0VORF9NTVVfRlRSX1NFQ1RJT05fSUZTRVQoTU1VX0ZUUl8xVF9TRUdNRU5UKQogCS8qIENhbGMgdmEgYW5kIHB1dCBpdCBpbiByMjkgKi8KIAlybGRpY3IJcjI5LHI1LDI4LDYzLTI4CiAJcmxkaWNsCXIzLHIzLDAsMzYKQEAgLTQwMSw3ICs0MDEsNyBAQAogQkVHSU5fRlRSX1NFQ1RJT04KIAljbXBkaQlyOSwwCQkJLyogY2hlY2sgc2VnbWVudCBzaXplICovCiAJYm5lCTNmCi1FTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl8xVF9TRUdNRU5UKQorRU5EX01NVV9GVFJfU0VDVElPTl9JRlNFVChNTVVfRlRSXzFUX1NFR01FTlQpCiAJLyogQ2FsYyB2YSBhbmQgcHV0IGl0IGluIHIyOSAqLwogCXJsZGljcglyMjkscjUsMjgsNjMtMjgJCS8qIHIyOSA9ICh2c2lkIDw8IDI4KSAqLwogCXJsZGljbAlyMyxyMywwLDM2CQkvKiByMyA9IChlYSAmIDB4MGZmZmZmZmYpICovCkBAIC03MTUsNyArNzE1LDcgQEAKIAlhbmRpLglyMCxyMzEsX1BBR0VfTk9fQ0FDSEUKIAkvKiBJZiBzbywgYmFpbCBvdXQgYW5kIHJlZmF1bHQgYXMgYSA0ayBwYWdlICovCiAJYm5lLQlodDY0X2JhaWxfb2sKLUVORF9GVFJfU0VDVElPTl9JRkNMUihDUFVfRlRSX0NJX0xBUkdFX1BBR0UpCitFTkRfTU1VX0ZUUl9TRUNUSU9OX0lGQ0xSKE1NVV9GVFJfQ0lfTEFSR0VfUEFHRSkKIAkvKiBQcmVwYXJlIG5ldyBQVEUgdmFsdWUgKHR1cm4gYWNjZXNzIFJXIGludG8gRElSVFksIHRoZW4KIAkgKiBhZGQgQlVTWSBhbmQgQUNDRVNTRUQpCiAJICovCkBAIC03MzYsNyArNzM2LDcgQEAKIEJFR0lOX0ZUUl9TRUNUSU9OCiAJY21wZGkJcjksMAkJCS8qIGNoZWNrIHNlZ21lbnQgc2l6ZSAqLwogCWJuZQkzZgotRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfMVRfU0VHTUVOVCkKK0VORF9NTVVfRlRSX1NFQ1RJT05fSUZTRVQoTU1VX0ZUUl8xVF9TRUdNRU5UKQogCS8qIENhbGMgdmEgYW5kIHB1dCBpdCBpbiByMjkgKi8KIAlybGRpY3IJcjI5LHI1LDI4LDYzLTI4CiAJcmxkaWNsCXIzLHIzLDAsMzYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX25hdGl2ZV82NC5jIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfbmF0aXZlXzY0LmMKaW5kZXggNzg0YTQwMC4uZGZkNzY0OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2hhc2hfbmF0aXZlXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfbmF0aXZlXzY0LmMKQEAgLTUwLDkgKzUwLDggQEAKIAljYXNlIE1NVV9QQUdFXzRLOgogCQl2YSAmPSB+MHhmZmZ1bDsKIAkJdmEgfD0gc3NpemUgPDwgODsKLQkJYXNtIHZvbGF0aWxlKEFTTV9NTVVfRlRSX0lGQ0xSKCJ0bGJpZSAlMCwwIiwgUFBDX1RMQklFKCUxLCUwKSwKLQkJCQkJICAgICAgICUyKQotCQkJICAgICA6IDogInIiICh2YSksICJyIigwKSwgImkiIChNTVVfRlRSX1RMQklFXzIwNikKKwkJYXNtIHZvbGF0aWxlKEFTTV9GVFJfSUZDTFIoInRsYmllICUwLDAiLCBQUENfVExCSUUoJTEsJTApLCAlMikKKwkJCSAgICAgOiA6ICJyIiAodmEpLCAiciIoMCksICJpIiAoQ1BVX0ZUUl9IVk1PREVfMjA2KQogCQkJICAgICA6ICJtZW1vcnkiKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTYxLDkgKzYwLDggQEAKIAkJdmEgfD0gcGVuYyA8PCAxMjsKIAkJdmEgfD0gc3NpemUgPDwgODsKIAkJdmEgfD0gMTsgLyogTCAqLwotCQlhc20gdm9sYXRpbGUoQVNNX01NVV9GVFJfSUZDTFIoInRsYmllICUwLDEiLCBQUENfVExCSUUoJTEsJTApLAotCQkJCQkgICAgICAgJTIpCi0JCQkgICAgIDogOiAiciIgKHZhKSwgInIiKDApLCAiaSIgKE1NVV9GVFJfVExCSUVfMjA2KQorCQlhc20gdm9sYXRpbGUoQVNNX0ZUUl9JRkNMUigidGxiaWUgJTAsMSIsIFBQQ19UTEJJRSglMSwlMCksICUyKQorCQkJICAgICA6IDogInIiICh2YSksICJyIigwKSwgImkiIChDUFVfRlRSX0hWTU9ERV8yMDYpCiAJCQkgICAgIDogIm1lbW9yeSIpOwogCQlicmVhazsKIAl9CkBAIC05OCw4ICs5Niw4IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0bGJpZSh1bnNpZ25lZCBsb25nIHZhLCBpbnQgcHNpemUsIGludCBzc2l6ZSwgaW50IGxvY2FsKQogewotCXVuc2lnbmVkIGludCB1c2VfbG9jYWwgPSBsb2NhbCAmJiBjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9UTEJJRUwpOwotCWludCBsb2NrX3RsYmllID0gIWNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX0xPQ0tMRVNTX1RMQklFKTsKKwl1bnNpZ25lZCBpbnQgdXNlX2xvY2FsID0gbG9jYWwgJiYgbW11X2hhc19mZWF0dXJlKE1NVV9GVFJfVExCSUVMKTsKKwlpbnQgbG9ja190bGJpZSA9ICFtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl9MT0NLTEVTU19UTEJJRSk7CiAKIAlpZiAodXNlX2xvY2FsKQogCQl1c2VfbG9jYWwgPSBtbXVfcHNpemVfZGVmc1twc2l6ZV0udGxiaWVsOwpAQCAtNTAzLDcgKzUwMSw3IEBACiAJCX0gcHRlX2l0ZXJhdGVfaGFzaGVkX2VuZCgpOwogCX0KIAotCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9UTEJJRUwpICYmCisJaWYgKG1tdV9oYXNfZmVhdHVyZShNTVVfRlRSX1RMQklFTCkgJiYKIAkgICAgbW11X3BzaXplX2RlZnNbcHNpemVdLnRsYmllbCAmJiBsb2NhbCkgewogCQlhc20gdm9sYXRpbGUoInB0ZXN5bmMiOjo6Im1lbW9yeSIpOwogCQlmb3IgKGkgPSAwOyBpIDwgbnVtYmVyOyBpKyspIHsKQEAgLTUxNyw3ICs1MTUsNyBAQAogCQl9CiAJCWFzbSB2b2xhdGlsZSgicHRlc3luYyI6OjoibWVtb3J5Iik7CiAJfSBlbHNlIHsKLQkJaW50IGxvY2tfdGxiaWUgPSAhY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfTE9DS0xFU1NfVExCSUUpOworCQlpbnQgbG9ja190bGJpZSA9ICFtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl9MT0NLTEVTU19UTEJJRSk7CiAKIAkJaWYgKGxvY2tfdGxiaWUpCiAJCQlyYXdfc3Bpbl9sb2NrKCZuYXRpdmVfdGxiaWVfbG9jayk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYwppbmRleCA1OGEwMjJkLi4yNmIyODcyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMKQEAgLTUzLDYgKzUzLDcgQEAKICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vc3B1Lmg+CiAjaW5jbHVkZSA8YXNtL3VkYmcuaD4KKyNpbmNsdWRlIDxhc20vY29kZS1wYXRjaGluZy5oPgogCiAjaWZkZWYgREVCVUcKICNkZWZpbmUgREJHKGZtdC4uLikgdWRiZ19wcmludGYoZm10KQpAQCAtMjU4LDExICsyNTksMTEgQEAKIAlmb3IgKDsgc2l6ZSA+PSA0OyBzaXplIC09IDQsICsrcHJvcCkgewogCQlpZiAocHJvcFswXSA9PSA0MCkgewogCQkJREJHKCIxVCBzZWdtZW50IHN1cHBvcnQgZGV0ZWN0ZWRcbiIpOwotCQkJY3VyX2NwdV9zcGVjLT5jcHVfZmVhdHVyZXMgfD0gQ1BVX0ZUUl8xVF9TRUdNRU5UOworCQkJY3VyX2NwdV9zcGVjLT5tbXVfZmVhdHVyZXMgfD0gTU1VX0ZUUl8xVF9TRUdNRU5UOwogCQkJcmV0dXJuIDE7CiAJCX0KIAl9Ci0JY3VyX2NwdV9zcGVjLT5jcHVfZmVhdHVyZXMgJj0gfkNQVV9GVFJfTk9fU0xCSUVfQjsKKwljdXJfY3B1X3NwZWMtPm1tdV9mZWF0dXJlcyAmPSB+TU1VX0ZUUl9OT19TTEJJRV9COwogCXJldHVybiAwOwogfQogCkBAIC0yODgsNyArMjg5LDcgQEAKIAlpZiAocHJvcCAhPSBOVUxMKSB7CiAJCURCRygiUGFnZSBzaXplcyBmcm9tIGRldmljZS10cmVlOlxuIik7CiAJCXNpemUgLz0gNDsKLQkJY3VyX2NwdV9zcGVjLT5jcHVfZmVhdHVyZXMgJj0gfihDUFVfRlRSXzE2TV9QQUdFKTsKKwkJY3VyX2NwdV9zcGVjLT5tbXVfZmVhdHVyZXMgJj0gfihNTVVfRlRSXzE2TV9QQUdFKTsKIAkJd2hpbGUoc2l6ZSA+IDApIHsKIAkJCXVuc2lnbmVkIGludCBzaGlmdCA9IHByb3BbMF07CiAJCQl1bnNpZ25lZCBpbnQgc2xiZW5jID0gcHJvcFsxXTsKQEAgLTMxNiw3ICszMTcsNyBAQAogCQkJCWJyZWFrOwogCQkJY2FzZSAweDE4OgogCQkJCWlkeCA9IE1NVV9QQUdFXzE2TTsKLQkJCQljdXJfY3B1X3NwZWMtPmNwdV9mZWF0dXJlcyB8PSBDUFVfRlRSXzE2TV9QQUdFOworCQkJCWN1cl9jcHVfc3BlYy0+bW11X2ZlYXR1cmVzIHw9IE1NVV9GVFJfMTZNX1BBR0U7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MjI6CiAJCQkJaWR4ID0gTU1VX1BBR0VfMTZHOwpAQCAtNDExLDcgKzQxMiw3IEBACiAJICogTm90IGluIHRoZSBkZXZpY2UtdHJlZSwgbGV0J3MgZmFsbGJhY2sgb24ga25vd24gc2l6ZQogCSAqIGxpc3QgZm9yIDE2TSBjYXBhYmxlIEdQICYgR1IKIAkgKi8KLQlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfMTZNX1BBR0UpKQorCWlmIChtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl8xNk1fUEFHRSkpCiAJCW1lbWNweShtbXVfcHNpemVfZGVmcywgbW11X3BzaXplX2RlZmF1bHRzX2dwLAogCQkgICAgICAgc2l6ZW9mKG1tdV9wc2l6ZV9kZWZhdWx0c19ncCkpOwogIGZvdW5kOgpAQCAtNDQxLDcgKzQ0Miw3IEBACiAJCW1tdV92bWFsbG9jX3BzaXplID0gTU1VX1BBR0VfNjRLOwogCQlpZiAobW11X2xpbmVhcl9wc2l6ZSA9PSBNTVVfUEFHRV80SykKIAkJCW1tdV9saW5lYXJfcHNpemUgPSBNTVVfUEFHRV82NEs7Ci0JCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9DSV9MQVJHRV9QQUdFKSkgeworCQlpZiAobW11X2hhc19mZWF0dXJlKE1NVV9GVFJfQ0lfTEFSR0VfUEFHRSkpIHsKIAkJCS8qCiAJCQkgKiBEb24ndCB1c2UgNjRrIHBhZ2VzIGZvciBpb3JlbWFwIG9uIHBTZXJpZXMsIHNpbmNlCiAJCQkgKiB0aGF0IHdvdWxkIHN0b3AgdXMgYWNjZXNzaW5nIHRoZSBIRUEgZXRoZXJuZXQuCkBAIC01NDcsMTUgKzU0OCw3IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RQTFVHICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtYWtlX2JsKHVuc2lnbmVkIGludCAqaW5zbl9hZGRyLCB2b2lkICpmdW5jKQotewotCXVuc2lnbmVkIGxvbmcgZnVuY3AgPSAqKCh1bnNpZ25lZCBsb25nICopZnVuYyk7Ci0JaW50IG9mZnNldCA9IGZ1bmNwIC0gKHVuc2lnbmVkIGxvbmcpaW5zbl9hZGRyOwotCi0JKmluc25fYWRkciA9ICh1bnNpZ25lZCBpbnQpKDB4NDgwMDAwMDEgfCAob2Zmc2V0ICYgMHgwM2ZmZmZmYykpOwotCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylpbnNuX2FkZHIsIDQrCi0JCQkgICAodW5zaWduZWQgbG9uZylpbnNuX2FkZHIpOwotfQorI2RlZmluZSBGVU5DVElPTl9URVhUKEEpCSgoKih1bnNpZ25lZCBsb25nICopKEEpKSkKIAogc3RhdGljIHZvaWQgX19pbml0IGh0YWJfZmluaXNoX2luaXQodm9pZCkKIHsKQEAgLTU3MCwxNiArNTYzLDMzIEBACiAJZXh0ZXJuIHVuc2lnbmVkIGludCAqaHQ2NF9jYWxsX2hwdGVfcmVtb3ZlOwogCWV4dGVybiB1bnNpZ25lZCBpbnQgKmh0NjRfY2FsbF9ocHRlX3VwZGF0ZXBwOwogCi0JbWFrZV9ibChodDY0X2NhbGxfaHB0ZV9pbnNlcnQxLCBwcGNfbWQuaHB0ZV9pbnNlcnQpOwotCW1ha2VfYmwoaHQ2NF9jYWxsX2hwdGVfaW5zZXJ0MiwgcHBjX21kLmhwdGVfaW5zZXJ0KTsKLQltYWtlX2JsKGh0NjRfY2FsbF9ocHRlX3JlbW92ZSwgcHBjX21kLmhwdGVfcmVtb3ZlKTsKLQltYWtlX2JsKGh0NjRfY2FsbF9ocHRlX3VwZGF0ZXBwLCBwcGNfbWQuaHB0ZV91cGRhdGVwcCk7CisJcGF0Y2hfYnJhbmNoKGh0NjRfY2FsbF9ocHRlX2luc2VydDEsCisJCUZVTkNUSU9OX1RFWFQocHBjX21kLmhwdGVfaW5zZXJ0KSwKKwkJQlJBTkNIX1NFVF9MSU5LKTsKKwlwYXRjaF9icmFuY2goaHQ2NF9jYWxsX2hwdGVfaW5zZXJ0MiwKKwkJRlVOQ1RJT05fVEVYVChwcGNfbWQuaHB0ZV9pbnNlcnQpLAorCQlCUkFOQ0hfU0VUX0xJTkspOworCXBhdGNoX2JyYW5jaChodDY0X2NhbGxfaHB0ZV9yZW1vdmUsCisJCUZVTkNUSU9OX1RFWFQocHBjX21kLmhwdGVfcmVtb3ZlKSwKKwkJQlJBTkNIX1NFVF9MSU5LKTsKKwlwYXRjaF9icmFuY2goaHQ2NF9jYWxsX2hwdGVfdXBkYXRlcHAsCisJCUZVTkNUSU9OX1RFWFQocHBjX21kLmhwdGVfdXBkYXRlcHApLAorCQlCUkFOQ0hfU0VUX0xJTkspOworCiAjZW5kaWYgLyogQ09ORklHX1BQQ19IQVNfSEFTSF82NEsgKi8KIAotCW1ha2VfYmwoaHRhYl9jYWxsX2hwdGVfaW5zZXJ0MSwgcHBjX21kLmhwdGVfaW5zZXJ0KTsKLQltYWtlX2JsKGh0YWJfY2FsbF9ocHRlX2luc2VydDIsIHBwY19tZC5ocHRlX2luc2VydCk7Ci0JbWFrZV9ibChodGFiX2NhbGxfaHB0ZV9yZW1vdmUsIHBwY19tZC5ocHRlX3JlbW92ZSk7Ci0JbWFrZV9ibChodGFiX2NhbGxfaHB0ZV91cGRhdGVwcCwgcHBjX21kLmhwdGVfdXBkYXRlcHApOworCXBhdGNoX2JyYW5jaChodGFiX2NhbGxfaHB0ZV9pbnNlcnQxLAorCQlGVU5DVElPTl9URVhUKHBwY19tZC5ocHRlX2luc2VydCksCisJCUJSQU5DSF9TRVRfTElOSyk7CisJcGF0Y2hfYnJhbmNoKGh0YWJfY2FsbF9ocHRlX2luc2VydDIsCisJCUZVTkNUSU9OX1RFWFQocHBjX21kLmhwdGVfaW5zZXJ0KSwKKwkJQlJBTkNIX1NFVF9MSU5LKTsKKwlwYXRjaF9icmFuY2goaHRhYl9jYWxsX2hwdGVfcmVtb3ZlLAorCQlGVU5DVElPTl9URVhUKHBwY19tZC5ocHRlX3JlbW92ZSksCisJCUJSQU5DSF9TRVRfTElOSyk7CisJcGF0Y2hfYnJhbmNoKGh0YWJfY2FsbF9ocHRlX3VwZGF0ZXBwLAorCQlGVU5DVElPTl9URVhUKHBwY19tZC5ocHRlX3VwZGF0ZXBwKSwKKwkJQlJBTkNIX1NFVF9MSU5LKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGh0YWJfaW5pdGlhbGl6ZSh2b2lkKQpAQCAtNTk4LDcgKzYwOCw3IEBACiAJLyogSW5pdGlhbGl6ZSBwYWdlIHNpemVzICovCiAJaHRhYl9pbml0X3BhZ2Vfc2l6ZXMoKTsKIAotCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl8xVF9TRUdNRU5UKSkgeworCWlmIChtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl8xVF9TRUdNRU5UKSkgewogCQltbXVfa2VybmVsX3NzaXplID0gTU1VX1NFR1NJWkVfMVQ7CiAJCW1tdV9oaWdodXNlcl9zc2l6ZSA9IE1NVV9TRUdTSVpFXzFUOwogCQlwcmludGsoS0VSTl9JTkZPICJVc2luZyAxVEIgc2VnbWVudHNcbiIpOwpAQCAtNzM5LDcgKzc0OSw3IEBACiAKIAkvKiBJbml0aWFsaXplIHN0YWIgLyBTTEIgbWFuYWdlbWVudCBleGNlcHQgb24gaVNlcmllcwogCSAqLwotCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9TTEIpKQorCWlmIChtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl9TTEIpKQogCQlzbGJfaW5pdGlhbGl6ZSgpOwogCWVsc2UgaWYgKCFmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0lTRVJJRVMpKQogCQlzdGFiX2luaXRpYWxpemUoZ2V0X3BhY2EoKS0+c3RhYl9yZWFsKTsKQEAgLTc1Niw3ICs3NjYsNyBAQAogCSAqIGluIHJlYWwgbW9kZSBvbiBwU2VyaWVzIGFuZCB3ZSB3YW50IGEgdmlydHVhbCBhZGRyZXNzIG9uCiAJICogaVNlcmllcyBhbnl3YXkKIAkgKi8KLQlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfU0xCKSkKKwlpZiAobW11X2hhc19mZWF0dXJlKE1NVV9GVFJfU0xCKSkKIAkJc2xiX2luaXRpYWxpemUoKTsKIAllbHNlCiAJCXN0YWJfaW5pdGlhbGl6ZShnZXRfcGFjYSgpLT5zdGFiX2FkZHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYwppbmRleCA5YmIyNDljLi4wYjlhNWMxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYwpAQCAtNTI5LDcgKzUyOSw3IEBACiB7CiAJaW50IHBzaXplOwogCi0JaWYgKCFjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl8xNk1fUEFHRSkpCisJaWYgKCFtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl8xNk1fUEFHRSkpCiAJCXJldHVybiAtRU5PREVWOwogCiAJZm9yIChwc2l6ZSA9IDA7IHBzaXplIDwgTU1VX1BBR0VfQ09VTlQ7ICsrcHNpemUpIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9oYXNoNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9oYXNoNjQuYwppbmRleCAyNTM1ODI4Li4zYmFmYzNkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfaGFzaDY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X2hhc2g2NC5jCkBAIC0yMCw5ICsyMCwyMDUgQEAKICNpbmNsdWRlIDxsaW51eC9pZHIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KIAorI2lmZGVmIENPTkZJR19QUENfSUNTV1gKKy8qCisgKiBUaGUgcHJvY2Vzc29yIGFuZCBpdHMgTDIgY2FjaGUgY2F1c2UgdGhlIGljc3d4IGluc3RydWN0aW9uIHRvCisgKiBnZW5lcmF0ZSBhIENPUF9SRVEgdHJhbnNhY3Rpb24gb24gUG93ZXJCdXMuIFRoZSB0cmFuc2FjdGlvbiBoYXMKKyAqIG5vIGFkZHJlc3MsIGFuZCB0aGUgcHJvY2Vzc29yIGRvZXMgbm90IHBlcmZvcm0gYW4gTU1VIGFjY2VzcworICogdG8gYXV0aGVudGljYXRlIHRoZSB0cmFuc2FjdGlvbi4gVGhlIGNvbW1hbmQgcG9ydGlvbiBvZiB0aGUKKyAqIFBvd2VyQnVzIENPUF9SRVEgdHJhbnNhY3Rpb24gaW5jbHVkZXMgdGhlIExQQVJfSUQgKExQSUQpIGFuZAorICogdGhlIGNvcHJvY2Vzc29yIFByb2Nlc3MgSUQgKFBJRCksIHdoaWNoIHRoZSBjb3Byb2Nlc3NvciBjb21wYXJlcworICogdG8gdGhlIGF1dGhvcml6ZWQgTFBJRCBhbmQgUElEIGhlbGQgaW4gdGhlIGNvcHJvY2Vzc29yLCB0byBkZXRlcm1pbmUKKyAqIGlmIHRoZSBwcm9jZXNzIGlzIGF1dGhvcml6ZWQgdG8gZ2VuZXJhdGUgdGhlIHRyYW5zYWN0aW9uLgorICogVGhlIGRhdGEgb2YgdGhlIENPUF9SRVEgdHJhbnNhY3Rpb24gaXMgMTI4LWJ5dGUgb3IgbGVzcyBhbmQgaXMKKyAqIHBsYWNlZCBpbiBjYWNoZWFibGUgbWVtb3J5IG9uIGEgMTI4LWJ5dGUgY2FjaGUgbGluZSBib3VuZGFyeS4KKyAqCisgKiBUaGUgdGFzayB0byB1c2UgYSBjb3Byb2Nlc3NvciBzaG91bGQgdXNlIHVzZV9jb3AoKSB0byBhbGxvY2F0ZQorICogYSBjb3Byb2Nlc3NvciBQSUQgYmVmb3JlIGV4ZWN1dGluZyBpY3N3eCBpbnN0cnVjdGlvbi4gdXNlX2NvcCgpCisgKiBhbHNvIGVuYWJsZXMgdGhlIGNvcHJvY2Vzc29yIGNvbnRleHQgc3dpdGNoaW5nLiBEcm9wX2NvcCgpIGlzCisgKiB1c2VkIHRvIGZyZWUgdGhlIGNvcHJvY2Vzc29yIFBJRC4KKyAqCisgKiBFeGFtcGxlOgorICogSG9zdCBGYWJyaWMgSW50ZXJmYWNlIChIRkkpIGlzIGEgUG93ZXJQQyBuZXR3b3JrIGNvcHJvY2Vzc29yLgorICogRWFjaCBIRkkgaGF2ZSBtdWx0aXBsZSB3aW5kb3dzLiBFYWNoIEhGSSB3aW5kb3cgc2VydmVzIGFzIGEKKyAqIG5ldHdvcmsgZGV2aWNlIHNlbmRpbmcgdG8gYW5kIHJlY2VpdmluZyBmcm9tIEhGSSBuZXR3b3JrLgorICogSEZJIGltbWVkaWF0ZSBzZW5kIGZ1bmN0aW9uIHVzZXMgaWNzd3ggaW5zdHJ1Y3Rpb24uIFRoZSBpbW1lZGlhdGUKKyAqIHNlbmQgZnVuY3Rpb24gYWxsb3dzIHNtYWxsIChzaW5nbGUgY2FjaGUtbGluZSkgcGFja2V0cyBiZSBzZW50CisgKiB3aXRob3V0IHVzaW5nIHRoZSByZWd1bGFyIEhGSSBzZW5kIEZJRk8gYW5kIGRvb3JiZWxsLCB3aGljaCBhcmUKKyAqIG11Y2ggc2xvd2VyIHRoYW4gaW1tZWRpYXRlIHNlbmQuCisgKgorICogRm9yIGVhY2ggdGFzayBpbnRlbmRpbmcgdG8gdXNlIEhGSSBpbW1lZGlhdGUgc2VuZCwgdGhlIEhGSSBkcml2ZXIKKyAqIGNhbGxzIHVzZV9jb3AoKSB0byBvYnRhaW4gYSBjb3Byb2Nlc3NvciBQSUQgZm9yIHRoZSB0YXNrLgorICogVGhlIEhGSSBkcml2ZXIgdGhlbiBhbGxvY2F0ZSBhIGZyZWUgSEZJIHdpbmRvdyBhbmQgc2F2ZSB0aGUKKyAqIGNvcHJvY2Vzc29yIFBJRCB0byB0aGUgSEZJIHdpbmRvdyB0byBhbGxvdyB0aGUgdGFzayB0byB1c2UgdGhlCisgKiBIRkkgd2luZG93LgorICoKKyAqIFRoZSBIRkkgZHJpdmVyIHJlcGVhdGVkbHkgY3JlYXRlcyBpbW1lZGlhdGUgc2VuZCBwYWNrZXRzIGFuZAorICogaXNzdWVzIGljc3d4IGluc3RydWN0aW9uIHRvIHNlbmQgZGF0YSB0aHJvdWdoIHRoZSBIRkkgd2luZG93LgorICogVGhlIEhGSSBjb21wYXJlcyB0aGUgY29wcm9jZXNzb3IgUElEIGluIHRoZSBDUFUgUElEIHJlZ2lzdGVyCisgKiB0byB0aGUgUElEIGhlbGQgaW4gdGhlIEhGSSB3aW5kb3cgdG8gZGV0ZXJtaW5lIGlmIHRoZSB0cmFuc2FjdGlvbgorICogaXMgYWxsb3dlZC4KKyAqCisgKiBXaGVuIHRoZSB0YXNrIHRvIHJlbGVhc2UgdGhlIEhGSSB3aW5kb3csIHRoZSBIRkkgZHJpdmVyIGNhbGxzCisgKiBkcm9wX2NvcCgpIHRvIHJlbGVhc2UgdGhlIGNvcHJvY2Vzc29yIFBJRC4KKyAqLworCisjZGVmaW5lIENPUF9QSURfTk9ORSAwCisjZGVmaW5lIENPUF9QSURfTUlOIChDT1BfUElEX05PTkUgKyAxKQorI2RlZmluZSBDT1BfUElEX01BWCAoMHhGRkZGKQorCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1tdV9jb250ZXh0X2Fjb3BfbG9jayk7CitzdGF0aWMgREVGSU5FX0lEQShjb3BfaWRhKTsKKwordm9pZCBzd2l0Y2hfY29wKHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQpCit7CisJbXRzcHIoU1BSTl9QSUQsIG5leHQtPmNvbnRleHQuY29wX3BpZCk7CisJbXRzcHIoU1BSTl9BQ09QLCBuZXh0LT5jb250ZXh0LmFjb3ApOworfQorCitzdGF0aWMgaW50IG5ld19jb3BfcGlkKHN0cnVjdCBpZGEgKmlkYSwgaW50IG1pbl9pZCwgaW50IG1heF9pZCwKKwkJICAgICAgIHNwaW5sb2NrX3QgKmxvY2spCit7CisJaW50IGluZGV4OworCWludCBlcnI7CisKK2FnYWluOgorCWlmICghaWRhX3ByZV9nZXQoaWRhLCBHRlBfS0VSTkVMKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2sobG9jayk7CisJZXJyID0gaWRhX2dldF9uZXdfYWJvdmUoaWRhLCBtaW5faWQsICZpbmRleCk7CisJc3Bpbl91bmxvY2sobG9jayk7CisKKwlpZiAoZXJyID09IC1FQUdBSU4pCisJCWdvdG8gYWdhaW47CisJZWxzZSBpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKGluZGV4ID4gbWF4X2lkKSB7CisJCXNwaW5fbG9jayhsb2NrKTsKKwkJaWRhX3JlbW92ZShpZGEsIGluZGV4KTsKKwkJc3Bpbl91bmxvY2sobG9jayk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldHVybiBpbmRleDsKK30KKworc3RhdGljIHZvaWQgc3luY19jb3Aodm9pZCAqYXJnKQoreworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gYXJnOworCisJaWYgKG1tID09IGN1cnJlbnQtPmFjdGl2ZV9tbSkKKwkJc3dpdGNoX2NvcChjdXJyZW50LT5hY3RpdmVfbW0pOworfQorCisvKioKKyAqIFN0YXJ0IHVzaW5nIGEgY29wcm9jZXNzb3IuCisgKiBAYWNvcDogbWFzayBvZiBjb3Byb2Nlc3NvciB0byBiZSB1c2VkLgorICogQG1tOiBUaGUgbW0gdGhlIGNvcHJvY2Vzc29yIHRvIGFzc29jaWF0ZSB3aXRoLiBNb3N0IGxpa2VseSBjdXJyZW50IG1tLgorICoKKyAqIFJldHVybiBhIHBvc2l0aXZlIFBJRCBpZiBzdWNjZXNzZnVsLiBOZWdhdGl2ZSBlcnJubyBvdGhlcndpc2UuCisgKiBUaGUgcmV0dXJuZWQgUElEIHdpbGwgYmUgZmVkIHRvIHRoZSBjb3Byb2Nlc3NvciB0byBkZXRlcm1pbmUgaWYgYW4KKyAqIGljc3d4IHRyYW5zYWN0aW9uIGlzIGF1dGhlbnRpY2F0ZWQuCisgKi8KK2ludCB1c2VfY29wKHVuc2lnbmVkIGxvbmcgYWNvcCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJaW50IHJldDsKKworCWlmICghY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfSUNTV1gpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICghbW0gfHwgIWFjb3ApCisJCXJldHVybiAtRUlOVkFMOworCisJLyogV2UgbmVlZCB0byBtYWtlIHN1cmUgbW1fdXNlcnMgZG9lc24ndCBjaGFuZ2UgKi8KKwlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJc3Bpbl9sb2NrKG1tLT5jb250ZXh0LmNvcF9sb2NrcCk7CisKKwlpZiAobW0tPmNvbnRleHQuY29wX3BpZCA9PSBDT1BfUElEX05PTkUpIHsKKwkJcmV0ID0gbmV3X2NvcF9waWQoJmNvcF9pZGEsIENPUF9QSURfTUlOLCBDT1BfUElEX01BWCwKKwkJCQkgICZtbXVfY29udGV4dF9hY29wX2xvY2spOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCisJCW1tLT5jb250ZXh0LmNvcF9waWQgPSByZXQ7CisJfQorCW1tLT5jb250ZXh0LmFjb3AgfD0gYWNvcDsKKworCXN5bmNfY29wKG1tKTsKKworCS8qCisJICogSWYgdGhpcyBpcyBhIHRocmVhZGVkIHByb2Nlc3MgdGhlbiB0aGVyZSBtaWdodCBiZSBvdGhlciB0aHJlYWRzCisJICogcnVubmluZy4gV2UgbmVlZCB0byBzZW5kIGFuIElQSSB0byBmb3JjZSB0aGVtIHRvIHBpY2sgdXAgYW55CisJICogY2hhbmdlIGluIFBJRCBhbmQgQUNPUC4KKwkgKi8KKwlpZiAoYXRvbWljX3JlYWQoJm1tLT5tbV91c2VycykgPiAxKQorCQlzbXBfY2FsbF9mdW5jdGlvbihzeW5jX2NvcCwgbW0sIDEpOworCisJcmV0ID0gbW0tPmNvbnRleHQuY29wX3BpZDsKKworb3V0OgorCXNwaW5fdW5sb2NrKG1tLT5jb250ZXh0LmNvcF9sb2NrcCk7CisJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2VfY29wKTsKKworLyoqCisgKiBTdG9wIHVzaW5nIGEgY29wcm9jZXNzb3IuCisgKiBAYWNvcDogbWFzayBvZiBjb3Byb2Nlc3NvciB0byBiZSBzdG9wcGVkLgorICogQG1tOiBUaGUgbW0gdGhlIGNvcHJvY2Vzc29yIGFzc29jaWF0ZWQgd2l0aC4KKyAqLwordm9pZCBkcm9wX2NvcCh1bnNpZ25lZCBsb25nIGFjb3AsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCWludCBmcmVlX3BpZCA9IENPUF9QSURfTk9ORTsKKworCWlmICghY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfSUNTV1gpKQorCQlyZXR1cm47CisKKwlpZiAoV0FSTl9PTl9PTkNFKCFtbSkpCisJCXJldHVybjsKKworCS8qIFdlIG5lZWQgdG8gbWFrZSBzdXJlIG1tX3VzZXJzIGRvZXNuJ3QgY2hhbmdlICovCisJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCXNwaW5fbG9jayhtbS0+Y29udGV4dC5jb3BfbG9ja3ApOworCisJbW0tPmNvbnRleHQuYWNvcCAmPSB+YWNvcDsKKworCWlmICgoIW1tLT5jb250ZXh0LmFjb3ApICYmIChtbS0+Y29udGV4dC5jb3BfcGlkICE9IENPUF9QSURfTk9ORSkpIHsKKwkJZnJlZV9waWQgPSBtbS0+Y29udGV4dC5jb3BfcGlkOworCQltbS0+Y29udGV4dC5jb3BfcGlkID0gQ09QX1BJRF9OT05FOworCX0KKworCXN5bmNfY29wKG1tKTsKKworCS8qCisJICogSWYgdGhpcyBpcyBhIHRocmVhZGVkIHByb2Nlc3MgdGhlbiB0aGVyZSBtaWdodCBiZSBvdGhlciB0aHJlYWRzCisJICogcnVubmluZy4gV2UgbmVlZCB0byBzZW5kIGFuIElQSSB0byBmb3JjZSB0aGVtIHRvIHBpY2sgdXAgYW55CisJICogY2hhbmdlIGluIFBJRCBhbmQgQUNPUC4KKwkgKi8KKwlpZiAoYXRvbWljX3JlYWQoJm1tLT5tbV91c2VycykgPiAxKQorCQlzbXBfY2FsbF9mdW5jdGlvbihzeW5jX2NvcCwgbW0sIDEpOworCisJaWYgKGZyZWVfcGlkICE9IENPUF9QSURfTk9ORSkgeworCQlzcGluX2xvY2soJm1tdV9jb250ZXh0X2Fjb3BfbG9jayk7CisJCWlkYV9yZW1vdmUoJmNvcF9pZGEsIGZyZWVfcGlkKTsKKwkJc3Bpbl91bmxvY2soJm1tdV9jb250ZXh0X2Fjb3BfbG9jayk7CisJfQorCisJc3Bpbl91bmxvY2sobW0tPmNvbnRleHQuY29wX2xvY2twKTsKKwl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZHJvcF9jb3ApOworCisjZW5kaWYgLyogQ09ORklHX1BQQ19JQ1NXWCAqLworCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1tdV9jb250ZXh0X2xvY2spOwogc3RhdGljIERFRklORV9JREEobW11X2NvbnRleHRfaWRhKTsKIApAQCAtMzEsNyArMjI3LDYgQEAKICAqIEVhY2ggc2VnbWVudCBjb250YWlucyAyXjI4IGJ5dGVzLiAgRWFjaCBjb250ZXh0IG1hcHMgMl40NCBieXRlcywKICAqIHNvIHdlIGNhbiBzdXBwb3J0IDJeMTktMSBjb250ZXh0cyAoMTkgPT0gMzUgKyAyOCAtIDQ0KS4KICAqLwotI2RlZmluZSBOT19DT05URVhUCTAKICNkZWZpbmUgTUFYX0NPTlRFWFQJKCgxVUwgPDwgMTkpIC0gMSkKIAogaW50IF9faW5pdF9uZXdfY29udGV4dCh2b2lkKQpAQCAtNzksNiArMjc0LDE2IEBACiAJCXNsaWNlX3NldF91c2VyX3BzaXplKG1tLCBtbXVfdmlydHVhbF9wc2l6ZSk7CiAJc3VicGFnZV9wcm90X2luaXRfbmV3X2NvbnRleHQobW0pOwogCW1tLT5jb250ZXh0LmlkID0gaW5kZXg7CisjaWZkZWYgQ09ORklHX1BQQ19JQ1NXWAorCW1tLT5jb250ZXh0LmNvcF9sb2NrcCA9IGttYWxsb2Moc2l6ZW9mKHNwaW5sb2NrX3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1tLT5jb250ZXh0LmNvcF9sb2NrcCkgeworCQlfX2Rlc3Ryb3lfY29udGV4dChpbmRleCk7CisJCXN1YnBhZ2VfcHJvdF9mcmVlKG1tKTsKKwkJbW0tPmNvbnRleHQuaWQgPSBNTVVfTk9fQ09OVEVYVDsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXNwaW5fbG9ja19pbml0KG1tLT5jb250ZXh0LmNvcF9sb2NrcCk7CisjZW5kaWYgLyogQ09ORklHX1BQQ19JQ1NXWCAqLwogCiAJcmV0dXJuIDA7CiB9CkBAIC05Myw3ICsyOTgsMTIgQEAKIAogdm9pZCBkZXN0cm95X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CisjaWZkZWYgQ09ORklHX1BQQ19JQ1NXWAorCWRyb3BfY29wKG1tLT5jb250ZXh0LmFjb3AsIG1tKTsKKwlrZnJlZShtbS0+Y29udGV4dC5jb3BfbG9ja3ApOworCW1tLT5jb250ZXh0LmNvcF9sb2NrcCA9IE5VTEw7CisjZW5kaWYgLyogQ09ORklHX1BQQ19JQ1NXWCAqLwogCV9fZGVzdHJveV9jb250ZXh0KG1tLT5jb250ZXh0LmlkKTsKIAlzdWJwYWdlX3Byb3RfZnJlZShtbSk7Ci0JbW0tPmNvbnRleHQuaWQgPSBOT19DT05URVhUOworCW1tLT5jb250ZXh0LmlkID0gTU1VX05PX0NPTlRFWFQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfbm9oYXNoLmMgYi9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfbm9oYXNoLmMKaW5kZXggYzBhYWI1Mi4uMzM2ODA3ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9ub2hhc2guYwpAQCAtMzM4LDEyICszMzgsMTQgQEAKIAkJcmV0dXJuIE5PVElGWV9PSzsKIAogCXN3aXRjaCAoYWN0aW9uKSB7Ci0JY2FzZSBDUFVfT05MSU5FOgotCWNhc2UgQ1BVX09OTElORV9GUk9aRU46CisJY2FzZSBDUFVfVVBfUFJFUEFSRToKKwljYXNlIENQVV9VUF9QUkVQQVJFX0ZST1pFTjoKIAkJcHJfZGV2ZWwoIk1NVTogQWxsb2NhdGluZyBzdGFsZSBjb250ZXh0IG1hcCBmb3IgQ1BVICVkXG4iLCBjcHUpOwogCQlzdGFsZV9tYXBbY3B1XSA9IGt6YWxsb2MoQ1RYX01BUF9TSVpFLCBHRlBfS0VSTkVMKTsKIAkJYnJlYWs7CiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisJY2FzZSBDUFVfVVBfQ0FOQ0VMRUQ6CisJY2FzZSBDUFVfVVBfQ0FOQ0VMRURfRlJPWkVOOgogCWNhc2UgQ1BVX0RFQUQ6CiAJY2FzZSBDUFVfREVBRF9GUk9aRU46CiAJCXByX2RldmVsKCJNTVU6IEZyZWVpbmcgc3RhbGUgY29udGV4dCBtYXAgZm9yIENQVSAlZFxuIiwgY3B1KTsKQEAgLTQwNyw3ICs0MDksMTcgQEAKIAl9IGVsc2UgaWYgKG1tdV9oYXNfZmVhdHVyZShNTVVfRlRSX1RZUEVfNDd4KSkgewogCQlmaXJzdF9jb250ZXh0ID0gMTsKIAkJbGFzdF9jb250ZXh0ID0gNjU1MzU7Ci0JfSBlbHNlIHsKKwl9IGVsc2UKKyNpZmRlZiBDT05GSUdfUFBDX0JPT0szRV9NTVUKKwlpZiAobW11X2hhc19mZWF0dXJlKE1NVV9GVFJfVFlQRV8zRSkpIHsKKwkJdTMyIG1tdWNmZyA9IG1mc3ByKFNQUk5fTU1VQ0ZHKTsKKwkJdTMyIHBpZF9iaXRzID0gKG1tdWNmZyAmIE1NVUNGR19QSURTSVpFX01BU0spCisJCQkJPj4gTU1VQ0ZHX1BJRFNJWkVfU0hJRlQ7CisJCWZpcnN0X2NvbnRleHQgPSAxOworCQlsYXN0X2NvbnRleHQgPSAoMVVMIDw8IChwaWRfYml0cyArIDEpKSAtIDE7CisJfSBlbHNlCisjZW5kaWYKKwl7CiAJCWZpcnN0X2NvbnRleHQgPSAxOwogCQlsYXN0X2NvbnRleHQgPSAyNTU7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL251bWEuYyBiL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKaW5kZXggNWVjMWRhZC4uMjE2NDAwNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL251bWEuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCkBAIC0zMTEsMTQgKzMxMSwxMyBAQAogc3RhdGljIGludCBfX2luaXQgZmluZF9taW5fY29tbW9uX2RlcHRoKHZvaWQpCiB7CiAJaW50IGRlcHRoOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcnRhc19yb290OwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hvc2VuOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcm9vdDsKIAljb25zdCBjaGFyICp2ZWM1OwogCi0JcnRhc19yb290ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9ydGFzIik7Ci0KLQlpZiAoIXJ0YXNfcm9vdCkKLQkJcmV0dXJuIC0xOworCXJvb3QgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL3J0YXMiKTsKKwlpZiAoIXJvb3QpCisJCXJvb3QgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiLyIpOwogCiAJLyoKIAkgKiBUaGlzIHByb3BlcnR5IGlzIGEgc2V0IG9mIDMyLWJpdCBpbnRlZ2VycywgZWFjaCByZXByZXNlbnRpbmcKQEAgLTMzMiw3ICszMzEsNyBAQAogCSAqIE5VTUEgYm91bmRhcnkgYW5kIHRoZSBmb2xsb3dpbmcgYXJlIHByb2dyZXNzaXZlbHkgbGVzcyBzaWduaWZpY2FudAogCSAqIGJvdW5kYXJpZXMuIFRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIGxldmVsIG9mIE5VTUEuCiAJICovCi0JZGlzdGFuY2VfcmVmX3BvaW50cyA9IG9mX2dldF9wcm9wZXJ0eShydGFzX3Jvb3QsCisJZGlzdGFuY2VfcmVmX3BvaW50cyA9IG9mX2dldF9wcm9wZXJ0eShyb290LAogCQkJCQkiaWJtLGFzc29jaWF0aXZpdHktcmVmZXJlbmNlLXBvaW50cyIsCiAJCQkJCSZkaXN0YW5jZV9yZWZfcG9pbnRzX2RlcHRoKTsKIApAQCAtMzc2LDExICszNzUsMTEgQEAKIAkJZGlzdGFuY2VfcmVmX3BvaW50c19kZXB0aCA9IE1BWF9ESVNUQU5DRV9SRUZfUE9JTlRTOwogCX0KIAotCW9mX25vZGVfcHV0KHJ0YXNfcm9vdCk7CisJb2Zfbm9kZV9wdXQocm9vdCk7CiAJcmV0dXJuIGRlcHRoOwogCiBlcnI6Ci0Jb2Zfbm9kZV9wdXQocnRhc19yb290KTsKKwlvZl9ub2RlX3B1dChyb290KTsKIAlyZXR1cm4gLTE7CiB9CiAKQEAgLTE0NTMsNyArMTQ1Miw3IEBACiAJdW5zaWduZWQgaW50IGFzc29jaWF0aXZpdHlbVlBITl9BU1NPQ19CVUZTSVpFXSA9IHswfTsKIAlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2OwogCi0JZm9yX2VhY2hfY3B1X21hc2soY3B1LCBjcHVfYXNzb2NpYXRpdml0eV9jaGFuZ2VzX21hc2spIHsKKwlmb3JfZWFjaF9jcHUoY3B1LCZjcHVfYXNzb2NpYXRpdml0eV9jaGFuZ2VzX21hc2spIHsKIAkJdnBobl9nZXRfYXNzb2NpYXRpdml0eShjcHUsIGFzc29jaWF0aXZpdHkpOwogCQluaWQgPSBhc3NvY2lhdGl2aXR5X3RvX25pZChhc3NvY2lhdGl2aXR5KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMKaW5kZXggOGRjNDFjMC4uNTFmODc5NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jCkBAIC0xMzMsNyArMTMzLDE1IEBACiBFWFBPUlRfU1lNQk9MKGlvcmVtYXApOwogCiB2b2lkIF9faW9tZW0gKgotaW9yZW1hcF9mbGFncyhwaHlzX2FkZHJfdCBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCitpb3JlbWFwX3djKHBoeXNfYWRkcl90IGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gX19pb3JlbWFwX2NhbGxlcihhZGRyLCBzaXplLCBfUEFHRV9OT19DQUNIRSwKKwkJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworfQorRVhQT1JUX1NZTUJPTChpb3JlbWFwX3djKTsKKwordm9pZCBfX2lvbWVtICoKK2lvcmVtYXBfcHJvdChwaHlzX2FkZHJfdCBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJLyogd3JpdGVhYmxlIGltcGxpZXMgZGlydHkgZm9yIGtlcm5lbCBhZGRyZXNzZXMgKi8KIAlpZiAoZmxhZ3MgJiBfUEFHRV9SVykKQEAgLTE1Miw3ICsxNjAsNyBAQAogCiAJcmV0dXJuIF9faW9yZW1hcF9jYWxsZXIoYWRkciwgc2l6ZSwgZmxhZ3MsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9Ci1FWFBPUlRfU1lNQk9MKGlvcmVtYXBfZmxhZ3MpOworRVhQT1JUX1NZTUJPTChpb3JlbWFwX3Byb3QpOwogCiB2b2lkIF9faW9tZW0gKgogX19pb3JlbWFwKHBoeXNfYWRkcl90IGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncykKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jCmluZGV4IDg4OTI3YTAuLjZlNTk1ZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYwpAQCAtMjU1LDcgKzI1NSwxNyBAQAogCXJldHVybiBfX2lvcmVtYXBfY2FsbGVyKGFkZHIsIHNpemUsIGZsYWdzLCBjYWxsZXIpOwogfQogCi12b2lkIF9faW9tZW0gKiBpb3JlbWFwX2ZsYWdzKHBoeXNfYWRkcl90IGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKK3ZvaWQgX19pb21lbSAqIGlvcmVtYXBfd2MocGh5c19hZGRyX3QgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBfUEFHRV9OT19DQUNIRTsKKwl2b2lkICpjYWxsZXIgPSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCk7CisKKwlpZiAocHBjX21kLmlvcmVtYXApCisJCXJldHVybiBwcGNfbWQuaW9yZW1hcChhZGRyLCBzaXplLCBmbGFncywgY2FsbGVyKTsKKwlyZXR1cm4gX19pb3JlbWFwX2NhbGxlcihhZGRyLCBzaXplLCBmbGFncywgY2FsbGVyKTsKK30KKwordm9pZCBfX2lvbWVtICogaW9yZW1hcF9wcm90KHBoeXNfYWRkcl90IGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAl2b2lkICpjYWxsZXIgPSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCk7CkBAIC0zMTEsNyArMzIxLDggQEAKIH0KIAogRVhQT1JUX1NZTUJPTChpb3JlbWFwKTsKLUVYUE9SVF9TWU1CT0woaW9yZW1hcF9mbGFncyk7CitFWFBPUlRfU1lNQk9MKGlvcmVtYXBfd2MpOworRVhQT1JUX1NZTUJPTChpb3JlbWFwX3Byb3QpOwogRVhQT1JUX1NZTUJPTChfX2lvcmVtYXApOwogRVhQT1JUX1NZTUJPTChfX2lvcmVtYXBfYXQpOwogRVhQT1JUX1NZTUJPTChpb3VubWFwKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9zbGIuYyBiL2FyY2gvcG93ZXJwYy9tbS9zbGIuYwppbmRleCAxZDk4ZWNjLi5lMjIyNzZjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vc2xiLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3NsYi5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vdWRiZy5oPgorI2luY2x1ZGUgPGFzbS9jb2RlLXBhdGNoaW5nLmg+CiAKIAogZXh0ZXJuIHZvaWQgc2xiX2FsbG9jYXRlX3JlYWxtb2RlKHVuc2lnbmVkIGxvbmcgZWEpOwpAQCAtMTY2LDcgKzE2Nyw3IEBACiAJaW50IGVzaWRfMXRfY291bnQ7CiAKIAkvKiBTeXN0ZW0gaXMgbm90IDFUIHNlZ21lbnQgc2l6ZSBjYXBhYmxlLiAqLwotCWlmICghY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfMVRfU0VHTUVOVCkpCisJaWYgKCFtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl8xVF9TRUdNRU5UKSkKIAkJcmV0dXJuIChHRVRfRVNJRChhZGRyMSkgPT0gR0VUX0VTSUQoYWRkcjIpKTsKIAogCWVzaWRfMXRfY291bnQgPSAoKChhZGRyMSA+PiBTSURfU0hJRlRfMVQpICE9IDApICsKQEAgLTIwMSw3ICsyMDIsNyBAQAogCSAqLwogCWhhcmRfaXJxX2Rpc2FibGUoKTsKIAlvZmZzZXQgPSBnZXRfcGFjYSgpLT5zbGJfY2FjaGVfcHRyOwotCWlmICghY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfTk9fU0xCSUVfQikgJiYKKwlpZiAoIW1tdV9oYXNfZmVhdHVyZShNTVVfRlRSX05PX1NMQklFX0IpICYmCiAJICAgIG9mZnNldCA8PSBTTEJfQ0FDSEVfRU5UUklFUykgewogCQlpbnQgaTsKIAkJYXNtIHZvbGF0aWxlKCJpc3luYyIgOiA6IDogIm1lbW9yeSIpOwpAQCAtMjQ5LDkgKzI1MCw4IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgcGF0Y2hfc2xiX2VuY29kaW5nKHVuc2lnbmVkIGludCAqaW5zbl9hZGRyLAogCQkJCSAgICAgIHVuc2lnbmVkIGludCBpbW1lZCkKIHsKLQkqaW5zbl9hZGRyID0gKCppbnNuX2FkZHIgJiAweGZmZmYwMDAwKSB8IGltbWVkOwotCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylpbnNuX2FkZHIsIDQrCi0JCQkgICAodW5zaWduZWQgbG9uZylpbnNuX2FkZHIpOworCWludCBpbnNuID0gKCppbnNuX2FkZHIgJiAweGZmZmYwMDAwKSB8IGltbWVkOworCXBhdGNoX2luc3RydWN0aW9uKGluc25fYWRkciwgaW5zbik7CiB9CiAKIHZvaWQgc2xiX3NldF9zaXplKHUxNiBzaXplKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3NsYl9sb3cuUyBiL2FyY2gvcG93ZXJwYy9tbS9zbGJfbG93LlMKaW5kZXggOTVjZTM1NS4uZWY2NTNkYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3NsYl9sb3cuUworKysgYi9hcmNoL3Bvd2VycGMvbW0vc2xiX2xvdy5TCkBAIC01OCw3ICs1OCw3IEBACiAJbGkJcjExLDAKIEJFR0lOX0ZUUl9TRUNUSU9OCiAJYglzbGJfZmluaXNoX2xvYWQKLUVORF9GVFJfU0VDVElPTl9JRkNMUihDUFVfRlRSXzFUX1NFR01FTlQpCitFTkRfTU1VX0ZUUl9TRUNUSU9OX0lGQ0xSKE1NVV9GVFJfMVRfU0VHTUVOVCkKIAliCXNsYl9maW5pc2hfbG9hZF8xVAogCiAxOgpAQCAtODcsNyArODcsNyBAQAogNjoKIEJFR0lOX0ZUUl9TRUNUSU9OCiAJYglzbGJfZmluaXNoX2xvYWQKLUVORF9GVFJfU0VDVElPTl9JRkNMUihDUFVfRlRSXzFUX1NFR01FTlQpCitFTkRfTU1VX0ZUUl9TRUNUSU9OX0lGQ0xSKE1NVV9GVFJfMVRfU0VHTUVOVCkKIAliCXNsYl9maW5pc2hfbG9hZF8xVAogCiAwOgkvKiB1c2VyIGFkZHJlc3M6IHByb3RvLVZTSUQgPSBjb250ZXh0IDw8IDE1IHwgRVNJRC4gRmlyc3QgY2hlY2sKQEAgLTEzOCwxMSArMTM4LDExIEBACiAJbGQJcjksUEFDQUNPTlRFWFRJRChyMTMpCiBCRUdJTl9GVFJfU0VDVElPTgogCWNtcGxkaQlyMTAsMHgxMDAwCi1FTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl8xVF9TRUdNRU5UKQorRU5EX01NVV9GVFJfU0VDVElPTl9JRlNFVChNTVVfRlRSXzFUX1NFR01FTlQpCiAJcmxkaW1pCXIxMCxyOSxVU0VSX0VTSURfQklUUywwCiBCRUdJTl9GVFJfU0VDVElPTgogCWJnZQlzbGJfZmluaXNoX2xvYWRfMVQKLUVORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSXzFUX1NFR01FTlQpCitFTkRfTU1VX0ZUUl9TRUNUSU9OX0lGU0VUKE1NVV9GVFJfMVRfU0VHTUVOVCkKIAliCXNsYl9maW5pc2hfbG9hZAogCiA4OgkvKiBpbnZhbGlkIEVBICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vc3RhYi5jIGIvYXJjaC9wb3dlcnBjL21tL3N0YWIuYwppbmRleCA0NDZhMDE4Li40MWUzMTY0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vc3RhYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9zdGFiLmMKQEAgLTI0Myw3ICsyNDMsNyBAQAogewogCWludCBjcHU7CiAKLQlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfU0xCKSkKKwlpZiAobW11X2hhc19mZWF0dXJlKE1NVV9GVFJfU0xCKSkKIAkJcmV0dXJuOwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaXNzNHh4LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9pc3M0eHguYwppbmRleCBhYTQ2ZTlkLi4xOTM5NWYxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9pc3M0eHguYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9pc3M0eHguYwpAQCAtODcsNyArODcsNyBAQAogCW1waWNfc2V0dXBfdGhpc19jcHUoKTsKIH0KIAotc3RhdGljIHZvaWQgX19jcHVpbml0IHNtcF9pc3M0eHhfa2lja19jcHUoaW50IGNwdSkKK3N0YXRpYyBpbnQgX19jcHVpbml0IHNtcF9pc3M0eHhfa2lja19jcHUoaW50IGNwdSkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdW5vZGUgPSBvZl9nZXRfY3B1X25vZGUoY3B1LCBOVUxMKTsKIAljb25zdCB1NjQgKnNwaW5fdGFibGVfYWRkcl9wcm9wOwpAQCAtMTA0LDcgKzEwNCw3IEBACiAJCQkJCSAgICAgICBOVUxMKTsKIAlpZiAoc3Bpbl90YWJsZV9hZGRyX3Byb3AgPT0gTlVMTCkgewogCQlwcl9lcnIoIkNQVSVkOiBDYW4ndCBzdGFydCwgbWlzc2luZyBjcHUtcmVsZWFzZS1hZGRyICFcbiIsIGNwdSk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCiAJLyogQXNzdW1lIGl0J3MgbWFwcGVkIGFzIHBhcnQgb2YgdGhlIGxpbmVhciBtYXBwaW5nLiBUaGlzIGlzIGEgYml0CkBAIC0xMTcsNiArMTE3LDggQEAKIAlzbXBfd21iKCk7CiAJc3Bpbl90YWJsZVsxXSA9IF9fcGEoc3RhcnRfc2Vjb25kYXJ5XzQ3eCk7CiAJbWIoKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IHNtcF9vcHNfdCBpc3Nfc21wX29wcyA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTIxX2Fkc19jcGxkLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9hZHNfY3BsZC5jCmluZGV4IGNmYzRiMjAuLjlmMDkzMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTIxX2Fkc19jcGxkLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMjFfYWRzX2NwbGQuYwpAQCAtNjEsNyArNjEsNyBAQAogc3RhdGljIHZvaWQKIGNwbGRfbWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewotCXVuc2lnbmVkIGludCBjcGxkX2lycSA9ICh1bnNpZ25lZCBpbnQpaXJxX21hcFtkLT5pcnFdLmh3aXJxOworCXVuc2lnbmVkIGludCBjcGxkX2lycSA9ICh1bnNpZ25lZCBpbnQpaXJxZF90b19od2lycShkKTsKIAl2b2lkIF9faW9tZW0gKnBpY19tYXNrID0gaXJxX3RvX3BpY19tYXNrKGNwbGRfaXJxKTsKIAogCW91dF84KHBpY19tYXNrLApAQCAtNzEsNyArNzEsNyBAQAogc3RhdGljIHZvaWQKIGNwbGRfdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JdW5zaWduZWQgaW50IGNwbGRfaXJxID0gKHVuc2lnbmVkIGludClpcnFfbWFwW2QtPmlycV0uaHdpcnE7CisJdW5zaWduZWQgaW50IGNwbGRfaXJxID0gKHVuc2lnbmVkIGludClpcnFkX3RvX2h3aXJxKGQpOwogCXZvaWQgX19pb21lbSAqcGljX21hc2sgPSBpcnFfdG9fcGljX21hc2soY3BsZF9pcnEpOwogCiAJb3V0XzgocGljX21hc2ssCkBAIC05Nyw3ICs5Nyw3IEBACiAJc3RhdHVzIHw9IChpZ25vcmUgfCBtYXNrKTsKIAogCWlmIChzdGF0dXMgPT0gMHhmZikKLQkJcmV0dXJuIE5PX0lSUV9JR05PUkU7CisJCXJldHVybiBOT19JUlE7CiAKIAljcGxkX2lycSA9IGZmeihzdGF0dXMpICsgb2Zmc2V0OwogCkBAIC0xMDksMTQgKzEwOSwxNCBAQAogewogCWlycSA9IGNwbGRfcGljX2dldF9pcnEoMCwgUENJX0lHTk9SRSwgJmNwbGRfcmVncy0+cGNpX3N0YXR1cywKIAkJJmNwbGRfcmVncy0+cGNpX21hc2spOwotCWlmIChpcnEgIT0gTk9fSVJRICYmIGlycSAhPSBOT19JUlFfSUdOT1JFKSB7CisJaWYgKGlycSAhPSBOT19JUlEpIHsKIAkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycSk7CiAJCXJldHVybjsKIAl9CiAKIAlpcnEgPSBjcGxkX3BpY19nZXRfaXJxKDgsIE1JU0NfSUdOT1JFLCAmY3BsZF9yZWdzLT5taXNjX3N0YXR1cywKIAkJJmNwbGRfcmVncy0+bWlzY19tYXNrKTsKLQlpZiAoaXJxICE9IE5PX0lSUSAmJiBpcnEgIT0gTk9fSVJRX0lHTk9SRSkgeworCWlmIChpcnEgIT0gTk9fSVJRKSB7CiAJCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21lZGlhNTIwMC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21lZGlhNTIwMC5jCmluZGV4IDU3YTZhMzQuLjk2Zjg1ZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tZWRpYTUyMDAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbWVkaWE1MjAwLmMKQEAgLTU2LDcgKzU2LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtZWRpYTUyMDBfaXJxLmxvY2ssIGZsYWdzKTsKIAl2YWwgPSBpbl9iZTMyKG1lZGlhNTIwMF9pcnEucmVncyArIE1FRElBNTIwMF9JUlFfRU5BQkxFKTsKLQl2YWwgfD0gMSA8PCAoTUVESUE1MjAwX0lSUV9TSElGVCArIGlycV9tYXBbZC0+aXJxXS5od2lycSk7CisJdmFsIHw9IDEgPDwgKE1FRElBNTIwMF9JUlFfU0hJRlQgKyBpcnFkX3RvX2h3aXJxKGQpKTsKIAlvdXRfYmUzMihtZWRpYTUyMDBfaXJxLnJlZ3MgKyBNRURJQTUyMDBfSVJRX0VOQUJMRSwgdmFsKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZWRpYTUyMDBfaXJxLmxvY2ssIGZsYWdzKTsKIH0KQEAgLTY4LDcgKzY4LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtZWRpYTUyMDBfaXJxLmxvY2ssIGZsYWdzKTsKIAl2YWwgPSBpbl9iZTMyKG1lZGlhNTIwMF9pcnEucmVncyArIE1FRElBNTIwMF9JUlFfRU5BQkxFKTsKLQl2YWwgJj0gfigxIDw8IChNRURJQTUyMDBfSVJRX1NISUZUICsgaXJxX21hcFtkLT5pcnFdLmh3aXJxKSk7CisJdmFsICY9IH4oMSA8PCAoTUVESUE1MjAwX0lSUV9TSElGVCArIGlycWRfdG9faHdpcnEoZCkpKTsKIAlvdXRfYmUzMihtZWRpYTUyMDBfaXJxLnJlZ3MgKyBNRURJQTUyMDBfSVJRX0VOQUJMRSwgdmFsKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZWRpYTUyMDBfaXJxLmxvY2ssIGZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X3BpYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfcGljLmMKaW5kZXggMWRkMTU0MC4uMWE5YTQ5NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfcGljLmMKQEAgLTE1Nyw0OCArMTU3LDMwIEBACiAgKi8KIHN0YXRpYyB2b2lkIG1wYzUyeHhfZXh0aXJxX21hc2soc3RydWN0IGlycV9kYXRhICpkKQogewotCWludCBpcnE7Ci0JaW50IGwyaXJxOwotCi0JaXJxID0gaXJxX21hcFtkLT5pcnFdLmh3aXJxOwotCWwyaXJxID0gaXJxICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKLQorCWludCBsMmlycSA9IGlycWRfdG9faHdpcnEoZCkgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwogCWlvX2JlX2NscmJpdCgmaW50ci0+Y3RybCwgMTEgLSBsMmlycSk7CiB9CiAKIHN0YXRpYyB2b2lkIG1wYzUyeHhfZXh0aXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JaW50IGlycTsKLQlpbnQgbDJpcnE7Ci0KLQlpcnEgPSBpcnFfbWFwW2QtPmlycV0uaHdpcnE7Ci0JbDJpcnEgPSBpcnEgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwotCisJaW50IGwyaXJxID0gaXJxZF90b19od2lycShkKSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7CiAJaW9fYmVfc2V0Yml0KCZpbnRyLT5jdHJsLCAxMSAtIGwyaXJxKTsKIH0KIAogc3RhdGljIHZvaWQgbXBjNTJ4eF9leHRpcnFfYWNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpbnQgaXJxOwotCWludCBsMmlycTsKLQotCWlycSA9IGlycV9tYXBbZC0+aXJxXS5od2lycTsKLQlsMmlycSA9IGlycSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7Ci0KKwlpbnQgbDJpcnEgPSBpcnFkX3RvX2h3aXJxKGQpICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKIAlpb19iZV9zZXRiaXQoJmludHItPmN0cmwsIDI3LWwyaXJxKTsKIH0KIAogc3RhdGljIGludCBtcGM1Mnh4X2V4dGlycV9zZXRfdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIGludCBmbG93X3R5cGUpCiB7CiAJdTMyIGN0cmxfcmVnLCB0eXBlOwotCWludCBpcnE7Ci0JaW50IGwyaXJxOworCWludCBsMmlycSA9IGlycWRfdG9faHdpcnEoZCkgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwogCXZvaWQgKmhhbmRsZXIgPSBoYW5kbGVfbGV2ZWxfaXJxOwogCi0JaXJxID0gaXJxX21hcFtkLT5pcnFdLmh3aXJxOwotCWwyaXJxID0gaXJxICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKLQotCXByX2RlYnVnKCIlczogaXJxPSV4LiBsMj0lZCBmbG93X3R5cGU9JWRcbiIsIF9fZnVuY19fLCBpcnEsIGwyaXJxLCBmbG93X3R5cGUpOworCXByX2RlYnVnKCIlczogaXJxPSV4LiBsMj0lZCBmbG93X3R5cGU9JWRcbiIsIF9fZnVuY19fLAorCQkoaW50KSBpcnFkX3RvX2h3aXJxKGQpLCBsMmlycSwgZmxvd190eXBlKTsKIAogCXN3aXRjaCAoZmxvd190eXBlKSB7CiAJY2FzZSBJUlFGX1RSSUdHRVJfSElHSDogdHlwZSA9IDA7IGJyZWFrOwpAQCAtMjM3LDIzICsyMTksMTMgQEAKIAogc3RhdGljIHZvaWQgbXBjNTJ4eF9tYWluX21hc2soc3RydWN0IGlycV9kYXRhICpkKQogewotCWludCBpcnE7Ci0JaW50IGwyaXJxOwotCi0JaXJxID0gaXJxX21hcFtkLT5pcnFdLmh3aXJxOwotCWwyaXJxID0gaXJxICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKLQorCWludCBsMmlycSA9IGlycWRfdG9faHdpcnEoZCkgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwogCWlvX2JlX3NldGJpdCgmaW50ci0+bWFpbl9tYXNrLCAxNiAtIGwyaXJxKTsKIH0KIAogc3RhdGljIHZvaWQgbXBjNTJ4eF9tYWluX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JaW50IGlycTsKLQlpbnQgbDJpcnE7Ci0KLQlpcnEgPSBpcnFfbWFwW2QtPmlycV0uaHdpcnE7Ci0JbDJpcnEgPSBpcnEgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwotCisJaW50IGwyaXJxID0gaXJxZF90b19od2lycShkKSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7CiAJaW9fYmVfY2xyYml0KCZpbnRyLT5tYWluX21hc2ssIDE2IC0gbDJpcnEpOwogfQogCkBAIC0yNzAsMjMgKzI0MiwxMyBAQAogICovCiBzdGF0aWMgdm9pZCBtcGM1Mnh4X3BlcmlwaF9tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpbnQgaXJxOwotCWludCBsMmlycTsKLQotCWlycSA9IGlycV9tYXBbZC0+aXJxXS5od2lycTsKLQlsMmlycSA9IGlycSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7Ci0KKwlpbnQgbDJpcnEgPSBpcnFkX3RvX2h3aXJxKGQpICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKIAlpb19iZV9zZXRiaXQoJmludHItPnBlcl9tYXNrLCAzMSAtIGwyaXJxKTsKIH0KIAogc3RhdGljIHZvaWQgbXBjNTJ4eF9wZXJpcGhfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpbnQgaXJxOwotCWludCBsMmlycTsKLQotCWlycSA9IGlycV9tYXBbZC0+aXJxXS5od2lycTsKLQlsMmlycSA9IGlycSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7Ci0KKwlpbnQgbDJpcnEgPSBpcnFkX3RvX2h3aXJxKGQpICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKIAlpb19iZV9jbHJiaXQoJmludHItPnBlcl9tYXNrLCAzMSAtIGwyaXJxKTsKIH0KIApAQCAtMzAzLDM0ICsyNjUsMTkgQEAKICAqLwogc3RhdGljIHZvaWQgbXBjNTJ4eF9zZG1hX21hc2soc3RydWN0IGlycV9kYXRhICpkKQogewotCWludCBpcnE7Ci0JaW50IGwyaXJxOwotCi0JaXJxID0gaXJxX21hcFtkLT5pcnFdLmh3aXJxOwotCWwyaXJxID0gaXJxICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKLQorCWludCBsMmlycSA9IGlycWRfdG9faHdpcnEoZCkgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwogCWlvX2JlX3NldGJpdCgmc2RtYS0+SW50TWFzaywgbDJpcnEpOwogfQogCiBzdGF0aWMgdm9pZCBtcGM1Mnh4X3NkbWFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpbnQgaXJxOwotCWludCBsMmlycTsKLQotCWlycSA9IGlycV9tYXBbZC0+aXJxXS5od2lycTsKLQlsMmlycSA9IGlycSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7Ci0KKwlpbnQgbDJpcnEgPSBpcnFkX3RvX2h3aXJxKGQpICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKIAlpb19iZV9jbHJiaXQoJnNkbWEtPkludE1hc2ssIGwyaXJxKTsKIH0KIAogc3RhdGljIHZvaWQgbXBjNTJ4eF9zZG1hX2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JaW50IGlycTsKLQlpbnQgbDJpcnE7Ci0KLQlpcnEgPSBpcnFfbWFwW2QtPmlycV0uaHdpcnE7Ci0JbDJpcnEgPSBpcnEgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwotCisJaW50IGwyaXJxID0gaXJxZF90b19od2lycShkKSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7CiAJb3V0X2JlMzIoJnNkbWEtPkludFBlbmQsIDEgPDwgbDJpcnEpOwogfQogCkBAIC01MzksNyArNDg2LDcgQEAKIHVuc2lnbmVkIGludCBtcGM1Mnh4X2dldF9pcnEodm9pZCkKIHsKIAl1MzIgc3RhdHVzOwotCWludCBpcnEgPSBOT19JUlFfSUdOT1JFOworCWludCBpcnE7CiAKIAlzdGF0dXMgPSBpbl9iZTMyKCZpbnRyLT5lbmNfc3RhdHVzKTsKIAlpZiAoc3RhdHVzICYgMHgwMDAwMDQwMCkgewkvKiBjcml0aWNhbCAqLwpAQCAtNTYyLDYgKzUwOSw4IEBACiAJCX0gZWxzZSB7CiAJCQlpcnEgfD0gKE1QQzUyeHhfSVJRX0wxX1BFUlAgPDwgTVBDNTJ4eF9JUlFfTDFfT0ZGU0VUKTsKIAkJfQorCX0gZWxzZSB7CisJCXJldHVybiBOT19JUlE7CiAJfQogCiAJcmV0dXJuIGlycV9saW5lYXJfcmV2bWFwKG1wYzUyeHhfaXJxaG9zdCwgaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9wcTJhZHMtcGNpLXBpYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L3BxMmFkcy1wY2ktcGljLmMKaW5kZXggNGE0ZWI2Zi4uOGNjZjllZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L3BxMmFkcy1wY2ktcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L3BxMmFkcy1wY2ktcGljLmMKQEAgLTQyLDcgKzQyLDcgQEAKIHN0YXRpYyB2b2lkIHBxMmFkc19wY2lfbWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXN0cnVjdCBwcTJhZHNfcGNpX3BpYyAqcHJpdiA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwotCWludCBpcnEgPSBOVU1fSVJRUyAtIHZpcnFfdG9faHcoZC0+aXJxKSAtIDE7CisJaW50IGlycSA9IE5VTV9JUlFTIC0gaXJxZF90b19od2lycShkKSAtIDE7CiAKIAlpZiAoaXJxICE9IC0xKSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC01OCw3ICs1OCw3IEBACiBzdGF0aWMgdm9pZCBwcTJhZHNfcGNpX3VubWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXN0cnVjdCBwcTJhZHNfcGNpX3BpYyAqcHJpdiA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwotCWludCBpcnEgPSBOVU1fSVJRUyAtIHZpcnFfdG9faHcoZC0+aXJxKSAtIDE7CisJaW50IGlycSA9IE5VTV9JUlFTIC0gaXJxZF90b19od2lycShkKSAtIDE7CiAKIAlpZiAoaXJxICE9IC0xKSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMTIsMTYgKzExMiw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHBjaV9ob3N0X3VubWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEpCi17Ci0JLyogcmVtb3ZlIGNoaXAgYW5kIGhhbmRsZXIgKi8KLQlpcnFfc2V0X2NoaXBfZGF0YSh2aXJxLCBOVUxMKTsKLQlpcnFfc2V0X2NoaXAodmlycSwgTlVMTCk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgaXJxX2hvc3Rfb3BzIHBjaV9waWNfaG9zdF9vcHMgPSB7CiAJLm1hcCA9IHBjaV9waWNfaG9zdF9tYXAsCi0JLnVubWFwID0gcGNpX2hvc3RfdW5tYXAsCiB9OwogCiBpbnQgX19pbml0IHBxMmFkc19wY2lfaW5pdF9pcnEodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zbXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zbXAuYwppbmRleCAwZDAwZmY5Li5kNmE5M2ExMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zbXAuYwpAQCAtNDEsNyArNDEsNyBAQAogI2RlZmluZSBOVU1fQk9PVF9FTlRSWQkJOAogI2RlZmluZSBTSVpFX0JPT1RfRU5UUlkJCShOVU1fQk9PVF9FTlRSWSAqIHNpemVvZih1MzIpKQogCi1zdGF0aWMgdm9pZCBfX2luaXQKK3N0YXRpYyBpbnQgX19pbml0CiBzbXBfODV4eF9raWNrX2NwdShpbnQgbnIpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTYwLDcgKzYwLDcgQEAKIAogCWlmIChjcHVfcmVsX2FkZHIgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgIk5vIGNwdS1yZWxlYXNlLWFkZHIgZm9yIGNwdSAlZFxuIiwgbnIpOwotCQlyZXR1cm47CisJCXJldHVybiAtRU5PRU5UOwogCX0KIAogCS8qCkBAIC0xMDcsNiArMTA3LDggQEAKIAkJaW91bm1hcChicHRyX3ZhZGRyKTsKIAogCXByX2RlYnVnKCJ3YWl0ZWQgJWQgbXNlY3MgZm9yIENQVSAjJWQuXG4iLCBuLCBucik7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0CkBAIC0yMzMsOCArMjM1LDEwIEBACiAJCXNtcF84NXh4X29wcy5tZXNzYWdlX3Bhc3MgPSBzbXBfbXBpY19tZXNzYWdlX3Bhc3M7CiAJfQogCi0JaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX0RCRUxMKSkKLQkJc21wXzg1eHhfb3BzLm1lc3NhZ2VfcGFzcyA9IGRvb3JiZWxsX21lc3NhZ2VfcGFzczsKKwlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfREJFTEwpKSB7CisJCXNtcF84NXh4X29wcy5tZXNzYWdlX3Bhc3MgPSBzbXBfbXV4ZWRfaXBpX21lc3NhZ2VfcGFzczsKKwkJc21wXzg1eHhfb3BzLmNhdXNlX2lwaSA9IGRvb3JiZWxsX2NhdXNlX2lwaTsKKwl9CiAKIAlCVUdfT04oIXNtcF84NXh4X29wcy5tZXNzYWdlX3Bhc3MpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc29jcmF0ZXNfZnBnYV9waWMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zb2NyYXRlc19mcGdhX3BpYy5jCmluZGV4IGRiODY0NjIuLjEyY2I5YmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zb2NyYXRlc19mcGdhX3BpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zb2NyYXRlc19mcGdhX3BpYy5jCkBAIC00OCw4ICs0OCw2IEBACiAJWzhdID0gezAsIElSUV9UWVBFX0xFVkVMX0hJR0h9LAogfTsKIAotI2RlZmluZSBzb2NyYXRlc19mcGdhX2lycV90b19odyh2aXJxKSAgICAoKHVuc2lnbmVkIGludClpcnFfbWFwW3ZpcnFdLmh3aXJxKQotCiBzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhzb2NyYXRlc19mcGdhX3BpY19sb2NrKTsKIAogc3RhdGljIHZvaWQgX19pb21lbSAqc29jcmF0ZXNfZnBnYV9waWNfaW9iYXNlOwpAQCAtMTEwLDExICsxMDgsOSBAQAogc3RhdGljIHZvaWQgc29jcmF0ZXNfZnBnYV9waWNfYWNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBod2lycSwgaXJxX2xpbmU7CisJdW5zaWduZWQgaW50IGlycV9saW5lLCBod2lycSA9IGlycWRfdG9faHdpcnEoZCk7CiAJdWludDMyX3QgbWFzazsKIAotCWh3aXJxID0gc29jcmF0ZXNfZnBnYV9pcnFfdG9faHcoZC0+aXJxKTsKLQogCWlycV9saW5lID0gZnBnYV9pcnFzW2h3aXJxXS5pcnFfbGluZTsKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKIAltYXNrID0gc29jcmF0ZXNfZnBnYV9waWNfcmVhZChGUEdBX1BJQ19JUlFNQVNLKGlycV9saW5lKSkKQEAgLTEyNywxMiArMTIzLDEwIEBACiBzdGF0aWMgdm9pZCBzb2NyYXRlc19mcGdhX3BpY19tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBod2lycTsKKwl1bnNpZ25lZCBpbnQgaHdpcnEgPSBpcnFkX3RvX2h3aXJxKGQpOwogCWludCBpcnFfbGluZTsKIAl1MzIgbWFzazsKIAotCWh3aXJxID0gc29jcmF0ZXNfZnBnYV9pcnFfdG9faHcoZC0+aXJxKTsKLQogCWlycV9saW5lID0gZnBnYV9pcnFzW2h3aXJxXS5pcnFfbGluZTsKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKIAltYXNrID0gc29jcmF0ZXNfZnBnYV9waWNfcmVhZChGUEdBX1BJQ19JUlFNQVNLKGlycV9saW5lKSkKQEAgLTE0NSwxMiArMTM5LDEwIEBACiBzdGF0aWMgdm9pZCBzb2NyYXRlc19mcGdhX3BpY19tYXNrX2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgaHdpcnE7CisJdW5zaWduZWQgaW50IGh3aXJxID0gaXJxZF90b19od2lycShkKTsKIAlpbnQgaXJxX2xpbmU7CiAJdTMyIG1hc2s7CiAKLQlod2lycSA9IHNvY3JhdGVzX2ZwZ2FfaXJxX3RvX2h3KGQtPmlycSk7Ci0KIAlpcnFfbGluZSA9IGZwZ2FfaXJxc1tod2lycV0uaXJxX2xpbmU7CiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CiAJbWFzayA9IHNvY3JhdGVzX2ZwZ2FfcGljX3JlYWQoRlBHQV9QSUNfSVJRTUFTSyhpcnFfbGluZSkpCkBAIC0xNjQsMTIgKzE1NiwxMCBAQAogc3RhdGljIHZvaWQgc29jcmF0ZXNfZnBnYV9waWNfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBod2lycTsKKwl1bnNpZ25lZCBpbnQgaHdpcnEgPSBpcnFkX3RvX2h3aXJxKGQpOwogCWludCBpcnFfbGluZTsKIAl1MzIgbWFzazsKIAotCWh3aXJxID0gc29jcmF0ZXNfZnBnYV9pcnFfdG9faHcoZC0+aXJxKTsKLQogCWlycV9saW5lID0gZnBnYV9pcnFzW2h3aXJxXS5pcnFfbGluZTsKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKIAltYXNrID0gc29jcmF0ZXNfZnBnYV9waWNfcmVhZChGUEdBX1BJQ19JUlFNQVNLKGlycV9saW5lKSkKQEAgLTE4MiwxMiArMTcyLDEwIEBACiBzdGF0aWMgdm9pZCBzb2NyYXRlc19mcGdhX3BpY19lb2koc3RydWN0IGlycV9kYXRhICpkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IGh3aXJxOworCXVuc2lnbmVkIGludCBod2lycSA9IGlycWRfdG9faHdpcnEoZCk7CiAJaW50IGlycV9saW5lOwogCXUzMiBtYXNrOwogCi0JaHdpcnEgPSBzb2NyYXRlc19mcGdhX2lycV90b19odyhkLT5pcnEpOwotCiAJaXJxX2xpbmUgPSBmcGdhX2lycXNbaHdpcnFdLmlycV9saW5lOwogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmc29jcmF0ZXNfZnBnYV9waWNfbG9jaywgZmxhZ3MpOwogCW1hc2sgPSBzb2NyYXRlc19mcGdhX3BpY19yZWFkKEZQR0FfUElDX0lSUU1BU0soaXJxX2xpbmUpKQpAQCAtMjAxLDEyICsxODksMTAgQEAKIAkJdW5zaWduZWQgaW50IGZsb3dfdHlwZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBod2lycTsKKwl1bnNpZ25lZCBpbnQgaHdpcnEgPSBpcnFkX3RvX2h3aXJxKGQpOwogCWludCBwb2xhcml0eTsKIAl1MzIgbWFzazsKIAotCWh3aXJxID0gc29jcmF0ZXNfZnBnYV9pcnFfdG9faHcoZC0+aXJxKTsKLQogCWlmIChmcGdhX2lycXNbaHdpcnFdLnR5cGUgIT0gSVJRX1RZUEVfTk9ORSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3BpYy5jCmluZGV4IDBiZWVjN2QuLjk0NTk0ZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9waWMuYwpAQCAtNDYsOCArNDYsNiBAQAogI2RlZmluZSBHRUZfUElDX0NQVTBfTUNQX01BU0sJR0VGX1BJQ19NQ1BfTUFTSygwKQogI2RlZmluZSBHRUZfUElDX0NQVTFfTUNQX01BU0sJR0VGX1BJQ19NQ1BfTUFTSygxKQogCi0jZGVmaW5lIGdlZl9pcnFfdG9faHcodmlycSkgICAgKCh1bnNpZ25lZCBpbnQpaXJxX21hcFt2aXJxXS5od2lycSkKLQogCiBzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhnZWZfcGljX2xvY2spOwogCkBAIC0xMTMsMTEgKzExMSw5IEBACiBzdGF0aWMgdm9pZCBnZWZfcGljX21hc2soc3RydWN0IGlycV9kYXRhICpkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IGh3aXJxOworCXVuc2lnbmVkIGludCBod2lycSA9IGlycWRfdG9faHdpcnEoZCk7CiAJdTMyIG1hc2s7CiAKLQlod2lycSA9IGdlZl9pcnFfdG9faHcoZC0+aXJxKTsKLQogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZ2VmX3BpY19sb2NrLCBmbGFncyk7CiAJbWFzayA9IGluX2JlMzIoZ2VmX3BpY19pcnFfcmVnX2Jhc2UgKyBHRUZfUElDX0lOVFJfTUFTSygwKSk7CiAJbWFzayAmPSB+KDEgPDwgaHdpcnEpOwpAQCAtMTM2LDExICsxMzIsOSBAQAogc3RhdGljIHZvaWQgZ2VmX3BpY191bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IGh3aXJxOworCXVuc2lnbmVkIGludCBod2lycSA9IGlycWRfdG9faHdpcnEoZCk7CiAJdTMyIG1hc2s7CiAKLQlod2lycSA9IGdlZl9pcnFfdG9faHcoZC0+aXJxKTsKLQogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZ2VmX3BpY19sb2NrLCBmbGFncyk7CiAJbWFzayA9IGluX2JlMzIoZ2VmX3BpY19pcnFfcmVnX2Jhc2UgKyBHRUZfUElDX0lOVFJfTUFTSygwKSk7CiAJbWFzayB8PSAoMSA8PCBod2lycSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODYxMF9ocGNkLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODYxMF9ocGNkLmMKaW5kZXggMDE4Y2M2Ny4uYTg5NjUxMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2MTBfaHBjZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4NjEwX2hwY2QuYwpAQCAtNjYsNyArNjYsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBtcGM4NjEwX3N3OV9pcnEsIDAsICJzdzkvd2FrZXVwIiwgTlVMTCk7CisJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBtcGM4NjEwX3N3OV9pcnEsIDAsICJzdzk6d2FrZXVwIiwgTlVMTCk7CiAJaWYgKHJldCkgewogCQlwcl9lcnIoIiVzOiBjYW4ndCByZXF1ZXN0IHBpeGlzIGV2ZW50IElSUTogJWRcbiIsCiAJCSAgICAgICBfX2Z1bmNfXywgcmV0KTsKQEAgLTEwNSw0NSArMTA1LDc3IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19GQl9GU0xfRElVKSB8fCBkZWZpbmVkKENPTkZJR19GQl9GU0xfRElVX01PRFVMRSkKIAotc3RhdGljIHUzMiBnZXRfYnVzZnJlcSh2b2lkKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKKy8qCisgKiBESVUgQXJlYSBEZXNjcmlwdG9yCisgKgorICogVGhlIE1QQzg2MTAgcmVmZXJlbmNlIG1hbnVhbCBzaG93cyB0aGUgYml0cyBvZiB0aGUgQUQgcmVnaXN0ZXIgaW4KKyAqIGxpdHRsZS1lbmRpYW4gb3JkZXIsIHdoaWNoIGNhdXNlcyB0aGUgQkxVRV9DIGZpZWxkIHRvIGJlIHNwbGl0IGludG8gdHdvCisgKiBwYXJ0cy4gVG8gc2ltcGxpZnkgdGhlIGRlZmluaXRpb24gb2YgdGhlIE1BS0VfQUQoKSBtYWNybywgd2UgZGVmaW5lIHRoZQorICogZmllbGRzIGluIGJpZy1lbmRpYW4gb3JkZXIgYW5kIGJ5dGUtc3dhcCB0aGUgcmVzdWx0LgorICoKKyAqIFNvIGV2ZW4gdGhvdWdoIHRoZSByZWdpc3RlcnMgZG9uJ3QgbG9vayBsaWtlIHRoZXkncmUgaW4gdGhlCisgKiBzYW1lIGJpdCBwb3NpdGlvbnMgYXMgdGhleSBhcmUgb24gdGhlIFAxMDIyLCB0aGUgc2FtZSB2YWx1ZSBpcyB3cml0dGVuIHRvCisgKiB0aGUgQUQgcmVnaXN0ZXIgb24gdGhlIE1QQzg2MTAgYW5kIG9uIHRoZSBQMTAyMi4KKyAqLworI2RlZmluZSBBRF9CWVRFX0YJCTB4MTAwMDAwMDAKKyNkZWZpbmUgQURfQUxQSEFfQ19NQVNLCQkweDBFMDAwMDAwCisjZGVmaW5lIEFEX0FMUEhBX0NfU0hJRlQJMjUKKyNkZWZpbmUgQURfQkxVRV9DX01BU0sJCTB4MDE4MDAwMDAKKyNkZWZpbmUgQURfQkxVRV9DX1NISUZUCQkyMworI2RlZmluZSBBRF9HUkVFTl9DX01BU0sJCTB4MDA2MDAwMDAKKyNkZWZpbmUgQURfR1JFRU5fQ19TSElGVAkyMQorI2RlZmluZSBBRF9SRURfQ19NQVNLCQkweDAwMTgwMDAwCisjZGVmaW5lIEFEX1JFRF9DX1NISUZUCQkxOQorI2RlZmluZSBBRF9QQUxFVFRFCQkweDAwMDQwMDAwCisjZGVmaW5lIEFEX1BJWEVMX1NfTUFTSwkJMHgwMDAzMDAwMAorI2RlZmluZSBBRF9QSVhFTF9TX1NISUZUCTE2CisjZGVmaW5lIEFEX0NPTVBfM19NQVNLCQkweDAwMDBGMDAwCisjZGVmaW5lIEFEX0NPTVBfM19TSElGVAkJMTIKKyNkZWZpbmUgQURfQ09NUF8yX01BU0sJCTB4MDAwMDBGMDAKKyNkZWZpbmUgQURfQ09NUF8yX1NISUZUCQk4CisjZGVmaW5lIEFEX0NPTVBfMV9NQVNLCQkweDAwMDAwMEYwCisjZGVmaW5lIEFEX0NPTVBfMV9TSElGVAkJNAorI2RlZmluZSBBRF9DT01QXzBfTUFTSwkJMHgwMDAwMDAwRgorI2RlZmluZSBBRF9DT01QXzBfU0hJRlQJCTAKIAotCXUzMiBmc19idXNmcmVxID0gMDsKLQlub2RlID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoTlVMTCwgImNwdSIpOwotCWlmIChub2RlKSB7Ci0JCXVuc2lnbmVkIGludCBzaXplOwotCQljb25zdCB1bnNpZ25lZCBpbnQgKnByb3AgPQotCQkJb2ZfZ2V0X3Byb3BlcnR5KG5vZGUsICJidXMtZnJlcXVlbmN5IiwgJnNpemUpOwotCQlpZiAocHJvcCkKLQkJCWZzX2J1c2ZyZXEgPSAqcHJvcDsKLQkJb2Zfbm9kZV9wdXQobm9kZSk7Ci0JfTsKLQlyZXR1cm4gZnNfYnVzZnJlcTsKLX0KKyNkZWZpbmUgTUFLRV9BRChhbHBoYSwgcmVkLCBibHVlLCBncmVlbiwgc2l6ZSwgYzAsIGMxLCBjMiwgYzMpIFwKKwljcHVfdG9fbGUzMihBRF9CWVRFX0YgfCAoYWxwaGEgPDwgQURfQUxQSEFfQ19TSElGVCkgfCBcCisJKGJsdWUgPDwgQURfQkxVRV9DX1NISUZUKSB8IChncmVlbiA8PCBBRF9HUkVFTl9DX1NISUZUKSB8IFwKKwkocmVkIDw8IEFEX1JFRF9DX1NISUZUKSB8IChjMyA8PCBBRF9DT01QXzNfU0hJRlQpIHwgXAorCShjMiA8PCBBRF9DT01QXzJfU0hJRlQpIHwgKGMxIDw8IEFEX0NPTVBfMV9TSElGVCkgfCBcCisJKGMwIDw8IEFEX0NPTVBfMF9TSElGVCkgfCAoc2l6ZSA8PCBBRF9QSVhFTF9TX1NISUZUKSkKIAogdW5zaWduZWQgaW50IG1wYzg2MTBocGNkX2dldF9waXhlbF9mb3JtYXQodW5zaWduZWQgaW50IGJpdHNfcGVyX3BpeGVsLAogCQkJCQkJaW50IG1vbml0b3JfcG9ydCkKIHsKIAlzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBwaXhlbGZvcm1hdFtdWzNdID0gewotCQl7MHg4ODg4MjMxNywgMHg4ODA4MzIxOCwgMHg2NTA1MjExOX0sCi0JCXsweDg4ODgzMzE2LCAweDg4MDgyMjE5LCAweDY1MDUzMTE4fSwKKwkJeworCQkJTUFLRV9BRCgzLCAwLCAyLCAxLCAzLCA4LCA4LCA4LCA4KSwKKwkJCU1BS0VfQUQoNCwgMiwgMCwgMSwgMiwgOCwgOCwgOCwgMCksCisJCQlNQUtFX0FEKDQsIDAsIDIsIDEsIDEsIDUsIDYsIDUsIDApCisJCX0sCisJCXsKKwkJCU1BS0VfQUQoMywgMiwgMCwgMSwgMywgOCwgOCwgOCwgOCksCisJCQlNQUtFX0FEKDQsIDAsIDIsIDEsIDIsIDgsIDgsIDgsIDApLAorCQkJTUFLRV9BRCg0LCAyLCAwLCAxLCAxLCA1LCA2LCA1LCAwKQorCQl9LAogCX07Ci0JdW5zaWduZWQgaW50IHBpeF9mbXQsIGFyY2hfbW9uaXRvcjsKKwl1bnNpZ25lZCBpbnQgYXJjaF9tb25pdG9yOwogCisJLyogVGhlIERWSSBwb3J0IGlzIG1pcy13aXJlZCBvbiByZXZpc2lvbiAxIG9mIHRoaXMgYm9hcmQuICovCiAJYXJjaF9tb25pdG9yID0gKCgqcGl4aXNfYXJjaCA9PSAweDAxKSAmJiAobW9uaXRvcl9wb3J0ID09IDApKT8gMCA6IDE7Ci0JCS8qIERWSSBwb3J0IGZvciBib2FyZCB2ZXJzaW9uIDB4MDEgKi8KIAotCWlmIChiaXRzX3Blcl9waXhlbCA9PSAzMikKLQkJcGl4X2ZtdCA9IHBpeGVsZm9ybWF0W2FyY2hfbW9uaXRvcl1bMF07Ci0JZWxzZSBpZiAoYml0c19wZXJfcGl4ZWwgPT0gMjQpCi0JCXBpeF9mbXQgPSBwaXhlbGZvcm1hdFthcmNoX21vbml0b3JdWzFdOwotCWVsc2UgaWYgKGJpdHNfcGVyX3BpeGVsID09IDE2KQotCQlwaXhfZm10ID0gcGl4ZWxmb3JtYXRbYXJjaF9tb25pdG9yXVsyXTsKLQllbHNlCi0JCXBpeF9mbXQgPSBwaXhlbGZvcm1hdFsxXVswXTsKLQotCXJldHVybiBwaXhfZm10OworCXN3aXRjaCAoYml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDMyOgorCQlyZXR1cm4gcGl4ZWxmb3JtYXRbYXJjaF9tb25pdG9yXVswXTsKKwljYXNlIDI0OgorCQlyZXR1cm4gcGl4ZWxmb3JtYXRbYXJjaF9tb25pdG9yXVsxXTsKKwljYXNlIDE2OgorCQlyZXR1cm4gcGl4ZWxmb3JtYXRbYXJjaF9tb25pdG9yXVsyXTsKKwlkZWZhdWx0OgorCQlwcl9lcnIoImZzbC1kaXU6IHVuc3VwcG9ydGVkIHBpeGVsIGRlcHRoICV1XG4iLCBiaXRzX3Blcl9waXhlbCk7CisJCXJldHVybiAwOworCX0KIH0KIAogdm9pZCBtcGM4NjEwaHBjZF9zZXRfZ2FtbWFfdGFibGUoaW50IG1vbml0b3JfcG9ydCwgY2hhciAqZ2FtbWFfdGFibGVfYmFzZSkKQEAgLTE5MCw4ICsyMjIsNyBAQAogCX0KIAogCS8qIFBpeGVsIENsb2NrIGNvbmZpZ3VyYXRpb24gKi8KLQlwcl9kZWJ1ZygiRElVOiBCdXMgRnJlcXVlbmN5ID0gJWRcbiIsIGdldF9idXNmcmVxKCkpOwotCXNwZWVkX2NjYiA9IGdldF9idXNmcmVxKCk7CisJc3BlZWRfY2NiID0gZnNsX2dldF9zeXNfZnJlcSgpOwogCiAJLyogQ2FsY3VsYXRlIHRoZSBwaXhlbCBjbG9jayB3aXRoIHRoZSBzbWFsbGVzdCBlcnJvciAqLwogCS8qIGNhbGN1bGF0ZSB0aGUgZm9sbG93aW5nIGluIHN0ZXBzIHRvIGF2b2lkIG92ZXJmbG93ICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODZ4eF9zbXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4Nnh4X3NtcC5jCmluZGV4IGVhY2VhMGUuLmFmMDliYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4Nnh4X3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4Nnh4X3NtcC5jCkBAIC01Niw3ICs1Niw3IEBACiB9CiAKIAotc3RhdGljIHZvaWQgX19pbml0CitzdGF0aWMgaW50IF9faW5pdAogc21wXzg2eHhfa2lja19jcHUoaW50IG5yKQogewogCXVuc2lnbmVkIGludCBzYXZlX3ZlY3RvcjsKQEAgLTY1LDcgKzY1LDcgQEAKIAl1bnNpZ25lZCBpbnQgKnZlY3RvciA9ICh1bnNpZ25lZCBpbnQgKikoS0VSTkVMQkFTRSArIDB4MTAwKTsKIAogCWlmIChuciA8IDAgfHwgbnIgPj0gTlJfQ1BVUykKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT0VOVDsKIAogCXByX2RlYnVnKCJzbXBfODZ4eF9raWNrX2NwdToga2ljayBDUFUgIyVkXG4iLCBucik7CiAKQEAgLTkyLDYgKzkyLDggQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAlwcl9kZWJ1Zygid2FpdCBDUFUgIyVkIGZvciAlZCBtc2Vjcy5cbiIsIG5yLCBuKTsKKworCXJldHVybiAwOwogfQogCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L204eHhfc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L204eHhfc2V0dXAuYwppbmRleCA5ZWNjZTk5Li4xZTEyMTA4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9tOHh4X3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvbTh4eF9zZXR1cC5jCkBAIC0xNTAsNyArMTUwLDcgQEAKIAkgKi8KIAljcHUgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAiY3B1Iik7CiAJdmlycT0gaXJxX29mX3BhcnNlX2FuZF9tYXAoY3B1LCAwKTsKLQlpcnEgPSBpcnFfbWFwW3ZpcnFdLmh3aXJxOworCWlycSA9IHZpcnFfdG9faHcodmlycSk7CiAKIAlzeXNfdG1yMiA9IGltbXJfbWFwKGltX3NpdCk7CiAJb3V0X2JlMTYoJnN5c190bXIyLT5zaXRfdGJzY3IsICgoMSA8PCAoNyAtIChpcnEvMikpKSA8PCA4KSB8CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcKaW5kZXggZjdiMDc3Mi4uZjk3MGNhMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZwpAQCAtMjAsNiArMjAsNyBAQAogc291cmNlICJhcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9LY29uZmlnIgogc291cmNlICJhcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQweC9LY29uZmlnIgogc291cmNlICJhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2FtaWdhb25lL0tjb25maWciCitzb3VyY2UgImFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvd3NwL0tjb25maWciCiAKIGNvbmZpZyBLVk1fR1VFU1QKIAlib29sICJLVk0gR3Vlc3Qgc3VwcG9ydCIKQEAgLTU2LDE2ICs1NywxOSBAQAogCWRlcGVuZHMgb24gUFBDX1JUQVMKIAlkZWZhdWx0IG4KIAorY29uZmlnIFBQQ19TTVBfTVVYRURfSVBJCisJYm9vbAorCWhlbHAKKwkgIFNlbGVjdCB0aGlzIG9wdG9uIGlmIHlvdXIgcGxhdGZvcm0gc3VwcG9ydHMgU01QIGFuZCB5b3VyCisJICBpbnRlcnJ1cHQgY29udHJvbGxlciBwcm92aWRlcyBsZXNzIHRoYW4gNCBpbnRlcnJ1cHRzIHRvIGVhY2gKKwkgIGNwdS4JVGhpcyB3aWxsIGVuYWJsZSB0aGUgZ2VuZXJpYyBjb2RlIHRvIG11bHRpcGxleCB0aGUgNAorCSAgbWVzc2FnZXMgb24gdG8gb25lIGlwaS4KKwogY29uZmlnIFBQQ19VREJHX0JFQVQKIAlib29sICJCRUFUIGJhc2VkIGRlYnVnIGNvbnNvbGUiCiAJZGVwZW5kcyBvbiBQUENfQ0VMTEVCCiAJZGVmYXVsdCBuCiAKLWNvbmZpZyBYSUNTCi0JZGVwZW5kcyBvbiBQUENfUFNFUklFUwotCWJvb2wKLQlkZWZhdWx0IHkKLQogY29uZmlnIElQSUMKIAlib29sCiAJZGVmYXVsdCBuCkBAIC0xNDcsMTQgKzE1MSwyNyBAQAogCWJvb2wKIAlkZWZhdWx0IG4KIAorY29uZmlnIFBQQ19QN19OQVAKKwlib29sCisJZGVmYXVsdCBuCisKIGNvbmZpZyBQUENfSU5ESVJFQ1RfSU8KIAlib29sCiAJc2VsZWN0IEdFTkVSSUNfSU9NQVAKLQlkZWZhdWx0IG4KKworY29uZmlnIFBQQ19JTkRJUkVDVF9QSU8KKwlib29sCisJc2VsZWN0IFBQQ19JTkRJUkVDVF9JTworCitjb25maWcgUFBDX0lORElSRUNUX01NSU8KKwlib29sCisJc2VsZWN0IFBQQ19JTkRJUkVDVF9JTworCitjb25maWcgUFBDX0lPX1dPUktBUk9VTkRTCisJYm9vbAogCiBjb25maWcgR0VORVJJQ19JT01BUAogCWJvb2wKLQlkZWZhdWx0IG4KIAogc291cmNlICJkcml2ZXJzL2NwdWZyZXEvS2NvbmZpZyIKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZQppbmRleCAxMTExMzhjLi4yMTY1YjY1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZQpAQCAtNzMsNiArNzMsNyBAQAogY29uZmlnIFBQQ19CT09LM0VfNjQKIAlib29sICJFbWJlZGRlZCBwcm9jZXNzb3JzIgogCXNlbGVjdCBQUENfRlBVICMgTWFrZSBpdCBhIGNob2ljZSA/CisJc2VsZWN0IFBQQ19TTVBfTVVYRURfSVBJCiAKIGVuZGNob2ljZQogCkBAIC0xMDcsNiArMTA4LDEwIEBACiAJZGVwZW5kcyBvbiBQUEM2NCAmJiBQUENfQk9PSzNTCiAJZGVmX2Jvb2wgeQogCitjb25maWcgUFBDX0EyCisJYm9vbAorCWRlcGVuZHMgb24gUFBDX0JPT0szRV82NAorCiBjb25maWcgVFVORV9DRUxMCiAJYm9vbCAiT3B0aW1pemUgZm9yIENlbGwgQnJvYWRiYW5kIEVuZ2luZSIKIAlkZXBlbmRzIG9uIFBQQzY0ICYmIFBQQ19CT09LM1MKQEAgLTE3NCw2ICsxNzksNyBAQAogY29uZmlnIFBQQ19GU0xfQk9PSzNFCiAJYm9vbAogCXNlbGVjdCBGU0xfRU1CX1BFUkZNT04KKwlzZWxlY3QgUFBDX1NNUF9NVVhFRF9JUEkKIAlkZWZhdWx0IHkgaWYgRlNMX0JPT0tFCiAKIGNvbmZpZyBQVEVfNjRCSVQKQEAgLTIyNiw2ICsyMzIsMjQgQEAKIAogCSAgSWYgaW4gZG91YnQsIHNheSBZIGhlcmUuCiAKK2NvbmZpZyBQUENfSUNTV1gKKwlib29sICJTdXBwb3J0IGZvciBQb3dlclBDIGljc3d4IGNvcHJvY2Vzc29yIGluc3RydWN0aW9uIgorCWRlcGVuZHMgb24gUE9XRVI0CisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIGtlcm5lbCBzdXBwb3J0IGZvciB0aGUgUG93ZXJQQyBJbml0aWF0ZQorCSAgQ29wcm9jZXNzb3IgU3RvcmUgV29yZCAoaWNzd3gpIGNvcHJvY2Vzc29yIGluc3RydWN0aW9uIG9uIFBPV0VSNworCSAgb3IgbmV3ZXIgcHJvY2Vzc29ycy4KKworCSAgVGhpcyBvcHRpb24gaXMgb25seSB1c2VmdWwgaWYgeW91IGhhdmUgYSBwcm9jZXNzb3IgdGhhdCBzdXBwb3J0cworCSAgdGhlIGljc3d4IGNvcHJvY2Vzc29yIGluc3RydWN0aW9uLiBJdCBkb2VzIG5vdCBoYXZlIGFueSBlZmZlY3QKKwkgIG9uIHByb2Nlc3NvcnMgd2l0aG91dCB0aGUgaWNzd3ggY29wcm9jZXNzb3IgaW5zdHJ1Y3Rpb24uCisKKwkgIFRoaXMgb3B0aW9uIHNsaWdodGx5IGluY3JlYXNlcyBrZXJuZWwgbWVtb3J5IHVzYWdlLgorCisJICBJZiBpbiBkb3VidCwgc2F5IE4gaGVyZS4KKwogY29uZmlnIFNQRQogCWJvb2wgIlNQRSBTdXBwb3J0IgogCWRlcGVuZHMgb24gRTIwMCB8fCAoRTUwMCAmJiAhUFBDX0U1MDBNQykKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL01ha2VmaWxlCmluZGV4IGZkYjlmMGIuLjczZTIxMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9NYWtlZmlsZQpAQCAtMjIsMyArMjIsNCBAQAogb2JqLSQoQ09ORklHX1BQQ19QUzMpCQkrPSBwczMvCiBvYmotJChDT05GSUdfRU1CRURERUQ2eHgpCSs9IGVtYmVkZGVkNnh4Lwogb2JqLSQoQ09ORklHX0FNSUdBT05FKQkJKz0gYW1pZ2FvbmUvCitvYmotJChDT05GSUdfUFBDX1dTUCkJCSs9IHdzcC8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWcKaW5kZXggODEyMzllYi4uNjdkNTAwOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWcKQEAgLTYsNyArNiw4IEBACiAJYm9vbAogCXNlbGVjdCBQUENfQ0VMTAogCXNlbGVjdCBQUENfRENSX01NSU8KLQlzZWxlY3QgUFBDX0lORElSRUNUX0lPCisJc2VsZWN0IFBQQ19JTkRJUkVDVF9QSU8KKwlzZWxlY3QgUFBDX0lORElSRUNUX01NSU8KIAlzZWxlY3QgUFBDX05BVElWRQogCXNlbGVjdCBQUENfUlRBUwogCXNlbGVjdCBJUlFfRURHRV9FT0lfSEFORExFUgpAQCAtMTUsNiArMTYsNyBAQAogCWJvb2wKIAlzZWxlY3QgUFBDX0NFTExfQ09NTU9OCiAJc2VsZWN0IE1QSUMKKwlzZWxlY3QgUFBDX0lPX1dPUktBUk9VTkRTCiAJc2VsZWN0IElCTV9ORVdfRU1BQ19FTUFDNAogCXNlbGVjdCBJQk1fTkVXX0VNQUNfUkdNSUkKIAlzZWxlY3QgSUJNX05FV19FTUFDX1pNSUkgI3Rlc3Qgb25seQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL01ha2VmaWxlCmluZGV4IDgzZmFmZTkuLmE0YTg5MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvTWFrZWZpbGUKQEAgLTEsNyArMSw3IEBACiBvYmotJChDT05GSUdfUFBDX0NFTExfQ09NTU9OKQkJKz0gY2JlX3JlZ3MubyBpbnRlcnJ1cHQubyBwZXJ2YXNpdmUubwogCiBvYmotJChDT05GSUdfUFBDX0NFTExfTkFUSVZFKQkJKz0gaW9tbXUubyBzZXR1cC5vIHNwaWRlci1waWMubyBcCi0JCQkJCSAgIHBtdS5vIGlvLXdvcmthcm91bmRzLm8gc3BpZGVyLXBjaS5vCisJCQkJCSAgIHBtdS5vIHNwaWRlci1wY2kubwogb2JqLSQoQ09ORklHX0NCRV9SQVMpCQkJKz0gcmFzLm8KIAogb2JqLSQoQ09ORklHX0NCRV9USEVSTSkJCQkrPSBjYmVfdGhlcm1hbC5vCkBAIC0zOSwxMSArMzksMTAgQEAKIAkJCQkJICAgY2VsbGViX3BjaS5vIGNlbGxlYl9zY2NfZXBjaS5vIFwKIAkJCQkJICAgY2VsbGViX3NjY19wY2lleC5vIFwKIAkJCQkJICAgY2VsbGViX3NjY191aGMubyBcCi0JCQkJCSAgIGlvLXdvcmthcm91bmRzLm8gc3BpZGVyLXBjaS5vIFwKLQkJCQkJICAgYmVhdC5vIGJlYXRfaHRhYi5vIGJlYXRfaHZDYWxsLm8gXAotCQkJCQkgICBiZWF0X2ludGVycnVwdC5vIGJlYXRfaW9tbXUubworCQkJCQkgICBzcGlkZXItcGNpLm8gYmVhdC5vIGJlYXRfaHRhYi5vIFwKKwkJCQkJICAgYmVhdF9odkNhbGwubyBiZWF0X2ludGVycnVwdC5vIFwKKwkJCQkJICAgYmVhdF9pb21tdS5vCiAKLW9iai0kKENPTkZJR19TTVApCQkJKz0gYmVhdF9zbXAubwogb2JqLSQoQ09ORklHX1BQQ19VREJHX0JFQVQpCQkrPSBiZWF0X3VkYmcubwogb2JqLSQoQ09ORklHX1NFUklBTF9UWFg5KQkJKz0gY2VsbGViX3NjY19zaW8ubwogb2JqLSQoQ09ORklHX1NQVV9CQVNFKQkJCSs9IGJlYXRfc3B1X3ByaXYxLm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9heG9uX21zaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2F4b25fbXNpLmMKaW5kZXggYmI1ZWJmOC4uYWMwNjkwMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2F4b25fbXNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2F4b25fbXNpLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCQlwcl9kZXZlbCgiYXhvbl9tc2k6IHdvZmYgJXggcm9mZiAleCBtc2kgJXhcbiIsCiAJCQkgIHdyaXRlX29mZnNldCwgbXNpYy0+cmVhZF9vZmZzZXQsIG1zaSk7CiAKLQkJaWYgKG1zaSA8IE5SX0lSUVMgJiYgaXJxX21hcFttc2ldLmhvc3QgPT0gbXNpYy0+aXJxX2hvc3QpIHsKKwkJaWYgKG1zaSA8IE5SX0lSUVMgJiYgaXJxX2dldF9jaGlwX2RhdGEobXNpKSA9PSBtc2ljKSB7CiAJCQlnZW5lcmljX2hhbmRsZV9pcnEobXNpKTsKIAkJCW1zaWMtPmZpZm9fdmlydFtpZHhdID0gY3B1X3RvX2xlMzIoMHhmZmZmZmZmZik7CiAJCX0gZWxzZSB7CkBAIC0zMjAsNiArMzIwLDcgQEAKIHN0YXRpYyBpbnQgbXNpY19ob3N0X21hcChzdHJ1Y3QgaXJxX2hvc3QgKmgsIHVuc2lnbmVkIGludCB2aXJxLAogCQkJIGlycV9od19udW1iZXJfdCBodykKIHsKKwlpcnFfc2V0X2NoaXBfZGF0YSh2aXJxLCBoLT5ob3N0X2RhdGEpOwogCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCAmbXNpY19pcnFfY2hpcCwgaGFuZGxlX3NpbXBsZV9pcnEpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYmVhdF9pbnRlcnJ1cHQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2ludGVycnVwdC5jCmluZGV4IDRjYjllMTQuLjU1MDE1ZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2ludGVycnVwdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2ludGVycnVwdC5jCkBAIC0xNDgsMTYgKzE0OCw2IEBACiB9CiAKIC8qCi0gKiBVcGRhdGUgYmluZGluZyBoYXJkd2FyZSBJUlEgbnVtYmVyIChodykgYW5kIFZpcnR1cWwKLSAqIElSUSBudW1iZXIgKHZpcnEpLiBUaGlzIGlzIGNhbGxlZCBvbmx5IG9uY2UgZm9yIGEgZ2l2ZW4gbWFwcGluZy4KLSAqLwotc3RhdGljIHZvaWQgYmVhdGljX3BpY19ob3N0X3JlbWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCi0JCQkgICAgICAgaXJxX2h3X251bWJlcl90IGh3KQotewotCWJlYXRfY29uc3RydWN0X2FuZF9jb25uZWN0X2lycV9wbHVnKHZpcnEsIGh3KTsKLX0KLQotLyoKICAqIFRyYW5zbGF0ZSBkZXZpY2UtdHJlZSBpbnRlcnJ1cHQgc3BlYyB0byBpcnFfaHdfbnVtYmVyX3Qgc3R5bGUgKHVsb25nKSwKICAqIHRvIHBhc3MgYXdheSB0byBpcnFfY3JlYXRlX21hcHBpbmcoKS4KICAqCkBAIC0xODQsNyArMTc0LDYgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfaG9zdF9vcHMgYmVhdGljX3BpY19ob3N0X29wcyA9IHsKIAkubWFwID0gYmVhdGljX3BpY19ob3N0X21hcCwKLQkucmVtYXAgPSBiZWF0aWNfcGljX2hvc3RfcmVtYXAsCiAJLnVubWFwID0gYmVhdGljX3BpY19ob3N0X3VubWFwLAogCS54bGF0ZSA9IGJlYXRpY19waWNfaG9zdF94bGF0ZSwKIAkubWF0Y2ggPSBiZWF0aWNfcGljX2hvc3RfbWF0Y2gsCkBAIC0yNTcsMjIgKzI0Niw2IEBACiAJaXJxX3NldF9kZWZhdWx0X2hvc3QoYmVhdGljX2hvc3QpOwogfQogCi0jaWZkZWYgQ09ORklHX1NNUAotCi0vKiBOdWxsaWZpZWQgdG8gY29tcGlsZSB3aXRoIFNNUCBtb2RlICovCi12b2lkIGJlYXRpY19zZXR1cF9jcHUoaW50IGNwdSkKLXsKLX0KLQotdm9pZCBiZWF0aWNfY2F1c2VfSVBJKGludCBjcHUsIGludCBtZXNnKQotewotfQotCi12b2lkIGJlYXRpY19yZXF1ZXN0X0lQSXModm9pZCkKLXsKLX0KLSNlbmRpZiAvKiBDT05GSUdfU01QICovCi0KIHZvaWQgYmVhdGljX2RlaW5pdF9JUlEodm9pZCkKIHsKIAlpbnQJaTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2ludGVycnVwdC5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfaW50ZXJydXB0LmgKaW5kZXggYjQ3MGZkMC4uYTdlNTJmOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfaW50ZXJydXB0LmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfaW50ZXJydXB0LmgKQEAgLTI0LDkgKzI0LDYgQEAKIAogZXh0ZXJuIHZvaWQgYmVhdGljX2luaXRfSVJRKHZvaWQpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBiZWF0aWNfZ2V0X2lycSh2b2lkKTsKLWV4dGVybiB2b2lkIGJlYXRpY19jYXVzZV9JUEkoaW50IGNwdSwgaW50IG1lc2cpOwotZXh0ZXJuIHZvaWQgYmVhdGljX3JlcXVlc3RfSVBJcyh2b2lkKTsKLWV4dGVybiB2b2lkIGJlYXRpY19zZXR1cF9jcHUoaW50KTsKIGV4dGVybiB2b2lkIGJlYXRpY19kZWluaXRfSVJRKHZvaWQpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X3NtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfc21wLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2ZWZjMjAuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfc21wLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotLyoKLSAqIFNNUCBzdXBwb3J0IGZvciBDZWxsZWIgcGxhdGZvcm0uIChJbmNvbXBsZXRlKQotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwNiBUT1NISUJBIENPUlBPUkFUSU9OCi0gKgotICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zbXAuYzoKLSAqIERhdmUgRW5nZWJyZXRzZW4sIFBldGVyIEJlcmduZXIsIGFuZAotICogTWlrZSBDb3JyaWdhbiB7ZW5nZWJyZXR8YmVyZ25lcnxtaWtlY31AdXMuaWJtLmNvbQotICogUGx1cyB2YXJpb3VzIGNoYW5nZXMgZnJvbSBvdGhlciBJQk0gdGVhbXMuLi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotICovCi0KLSN1bmRlZiBERUJVRwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9jcHUuaD4KLQotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vc21wLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KLSNpbmNsdWRlIDxhc20vdWRiZy5oPgotCi0jaW5jbHVkZSAiYmVhdF9pbnRlcnJ1cHQuaCIKLQotI2lmZGVmIERFQlVHCi0jZGVmaW5lIERCRyhmbXQuLi4pIHVkYmdfcHJpbnRmKGZtdCkKLSNlbHNlCi0jZGVmaW5lIERCRyhmbXQuLi4pCi0jZW5kaWYKLQotLyoKLSAqIFRoZSBwcmltYXJ5IHRocmVhZCBvZiBlYWNoIG5vbi1ib290IHByb2Nlc3NvciBpcyByZWNvcmRlZCBoZXJlIGJlZm9yZQotICogc21wIGluaXQuCi0gKi8KLS8qIHN0YXRpYyBjcHVtYXNrX3Qgb2Zfc3Bpbl9tYXA7ICovCi0KLS8qKgotICogc21wX3N0YXJ0dXBfY3B1KCkgLSBzdGFydCB0aGUgZ2l2ZW4gY3B1Ci0gKgotICogQXQgYm9vdCB0aW1lLCB0aGVyZSBpcyBub3RoaW5nIHRvIGRvIGZvciBwcmltYXJ5IHRocmVhZHMgd2hpY2ggd2VyZQotICogc3RhcnRlZCBmcm9tIE9wZW4gRmlybXdhcmUuICBGb3IgYW55dGhpbmcgZWxzZSwgY2FsbCBSVEFTIHdpdGggdGhlCi0gKiBhcHByb3ByaWF0ZSBzdGFydCBsb2NhdGlvbi4KLSAqCi0gKiBSZXR1cm5zOgotICoJMAktIGZhaWx1cmUKLSAqCTEJLSBzdWNjZXNzCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IF9fZGV2aW5pdCBzbXBfc3RhcnR1cF9jcHUodW5zaWduZWQgaW50IGxjcHUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHNtcF9iZWF0aWNfbWVzc2FnZV9wYXNzKGludCB0YXJnZXQsIGludCBtc2cpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlpZiAodGFyZ2V0IDwgTlJfQ1BVUykgewotCQliZWF0aWNfY2F1c2VfSVBJKHRhcmdldCwgbXNnKTsKLQl9IGVsc2UgewotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKLQkJCWlmICh0YXJnZXQgPT0gTVNHX0FMTF9CVVRfU0VMRgotCQkJICAgICYmIGkgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQotCQkJCWNvbnRpbnVlOwotCQkJYmVhdGljX2NhdXNlX0lQSShpLCBtc2cpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgaW50IF9faW5pdCBzbXBfYmVhdGljX3Byb2JlKHZvaWQpCi17Ci0JcmV0dXJuIGNwdXNfd2VpZ2h0KGNwdV9wb3NzaWJsZV9tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgc21wX2JlYXRpY19zZXR1cF9jcHUoaW50IGNwdSkKLXsKLQliZWF0aWNfc2V0dXBfY3B1KGNwdSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBzbXBfY2VsbGViX2tpY2tfY3B1KGludCBucikKLXsKLQlCVUdfT04obnIgPCAwIHx8IG5yID49IE5SX0NQVVMpOwotCi0JaWYgKCFzbXBfc3RhcnR1cF9jcHUobnIpKQotCQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBpbnQgc21wX2NlbGxlYl9jcHVfYm9vdGFibGUodW5zaWduZWQgaW50IG5yKQotewotCXJldHVybiAxOwotfQotc3RhdGljIHN0cnVjdCBzbXBfb3BzX3QgYnBhX2JlYXRpY19zbXBfb3BzID0gewotCS5tZXNzYWdlX3Bhc3MJPSBzbXBfYmVhdGljX21lc3NhZ2VfcGFzcywKLQkucHJvYmUJCT0gc21wX2JlYXRpY19wcm9iZSwKLQkua2lja19jcHUJPSBzbXBfY2VsbGViX2tpY2tfY3B1LAotCS5zZXR1cF9jcHUJPSBzbXBfYmVhdGljX3NldHVwX2NwdSwKLQkuY3B1X2Jvb3RhYmxlCT0gc21wX2NlbGxlYl9jcHVfYm9vdGFibGUsCi19OwotCi0vKiBUaGlzIGlzIGNhbGxlZCB2ZXJ5IGVhcmx5ICovCi12b2lkIF9faW5pdCBzbXBfaW5pdF9jZWxsZWIodm9pZCkKLXsKLQlEQkcoIiAtPiBzbXBfaW5pdF9jZWxsZWIoKVxuIik7Ci0KLQlzbXBfb3BzID0gJmJwYV9iZWF0aWNfc21wX29wczsKLQotCURCRygiIDwtIHNtcF9pbml0X2NlbGxlYigpXG4iKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9jYmVfcmVncy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2NiZV9yZWdzLmMKaW5kZXggZGJjMzM4Zi4uZjM5MTdlNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2NiZV9yZWdzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2NiZV9yZWdzLmMKQEAgLTQ1LDggKzQ1LDggQEAKIAl1bnNpZ25lZCBpbnQgY2JlX2lkOwogfSBjYmVfdGhyZWFkX21hcFtOUl9DUFVTXTsKIAotc3RhdGljIGNwdW1hc2tfdCBjYmVfbG9jYWxfbWFza1tNQVhfQ0JFXSA9IHsgWzAgLi4uIE1BWF9DQkUtMV0gPSBDUFVfTUFTS19OT05FIH07Ci1zdGF0aWMgY3B1bWFza190IGNiZV9maXJzdF9vbmxpbmVfY3B1ID0gQ1BVX01BU0tfTk9ORTsKK3N0YXRpYyBjcHVtYXNrX3QgY2JlX2xvY2FsX21hc2tbTUFYX0NCRV0gPSB7IFswIC4uLiBNQVhfQ0JFLTFdID0ge0NQVV9CSVRTX05PTkV9IH07CitzdGF0aWMgY3B1bWFza190IGNiZV9maXJzdF9vbmxpbmVfY3B1ID0geyBDUFVfQklUU19OT05FIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2JlX3JlZ3NfbWFwICpjYmVfZmluZF9tYXAoc3RydWN0IGRldmljZV9ub2RlICpucCkKIHsKQEAgLTE1OSw3ICsxNTksOCBAQAogCiB1MzIgY2JlX25vZGVfdG9fY3B1KGludCBub2RlKQogewotCXJldHVybiBmaW5kX2ZpcnN0X2JpdCggKHVuc2lnbmVkIGxvbmcgKikgJmNiZV9sb2NhbF9tYXNrW25vZGVdLCBzaXplb2YoY3B1bWFza190KSk7CisJcmV0dXJuIGNwdW1hc2tfZmlyc3QoJmNiZV9sb2NhbF9tYXNrW25vZGVdKTsKKwogfQogRVhQT1JUX1NZTUJPTF9HUEwoY2JlX25vZGVfdG9fY3B1KTsKIApAQCAtMjY4LDkgKzI2OSw5IEBACiAJCQkJdGhyZWFkLT5yZWdzID0gbWFwOwogCQkJCXRocmVhZC0+Y2JlX2lkID0gY2JlX2lkOwogCQkJCW1hcC0+YmVfbm9kZSA9IHRocmVhZC0+YmVfbm9kZTsKLQkJCQljcHVfc2V0KGksIGNiZV9sb2NhbF9tYXNrW2NiZV9pZF0pOworCQkJCWNwdW1hc2tfc2V0X2NwdShpLCAmY2JlX2xvY2FsX21hc2tbY2JlX2lkXSk7CiAJCQkJaWYodGhyZWFkLT50aHJlYWRfaWQgPT0gMCkKLQkJCQkJY3B1X3NldChpLCBjYmVfZmlyc3Rfb25saW5lX2NwdSk7CisJCQkJCWNwdW1hc2tfc2V0X2NwdShpLCAmY2JlX2ZpcnN0X29ubGluZV9jcHUpOwogCQkJfQogCQl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9jZWxsZWJfcGNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvY2VsbGViX3BjaS5jCmluZGV4IDQwNGQxZmMuLjU4MjIxNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9jZWxsZWJfcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2NlbGxlYl9wY2kuYwpAQCAtNDEsNyArNDEsNiBAQAogI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CiAjaW5jbHVkZSA8YXNtL3BwYy1wY2kuaD4KIAotI2luY2x1ZGUgImlvLXdvcmthcm91bmRzLmgiCiAjaW5jbHVkZSAiY2VsbGViX3BjaS5oIgogCiAjZGVmaW5lIE1BWF9QQ0lfREVWSUNFUyAgICAzMgpAQCAtMzIwLDcgKzMxOSw3IEBACiAKIAlzaXplID0gMjU2OwogCWNvbmZpZyA9ICZwcml2YXRlLT5mYWtlX2NvbmZpZ1tkZXZub11bZm5dOwotCSpjb25maWcgPSBhbGxvY19tYXliZV9ib290bWVtKHNpemUsIEdGUF9LRVJORUwpOworCSpjb25maWcgPSB6YWxsb2NfbWF5YmVfYm9vdG1lbShzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoKmNvbmZpZyA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiUENJOiAiCiAJCSAgICAgICAibm90IGVub3VnaCBtZW1vcnkgZm9yIGZha2UgY29uZmlndXJhdGlvbiBzcGFjZVxuIik7CkBAIC0zMzEsNyArMzMwLDcgQEAKIAogCXNpemUgPSBzaXplb2Yoc3RydWN0IGNlbGxlYl9wY2lfcmVzb3VyY2UpOwogCXJlcyA9ICZwcml2YXRlLT5yZXNbZGV2bm9dW2ZuXTsKLQkqcmVzID0gYWxsb2NfbWF5YmVfYm9vdG1lbShzaXplLCBHRlBfS0VSTkVMKTsKKwkqcmVzID0gemFsbG9jX21heWJlX2Jvb3RtZW0oc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCpyZXMgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICJQQ0k6IG5vdCBlbm91Z2ggbWVtb3J5IGZvciByZXNvdXJjZSBkYXRhIHNwYWNlXG4iKTsKQEAgLTQzMiw3ICs0MzEsNyBAQAogc3RhdGljIHZvaWQgX19pbml0IGNlbGxlYl9hbGxvY19wcml2YXRlX21lbShzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCiB7CiAJaG9zZS0+cHJpdmF0ZV9kYXRhID0KLQkJYWxsb2NfbWF5YmVfYm9vdG1lbShzaXplb2Yoc3RydWN0IGNlbGxlYl9wY2lfcHJpdmF0ZSksCisJCXphbGxvY19tYXliZV9ib290bWVtKHNpemVvZihzdHJ1Y3QgY2VsbGViX3BjaV9wcml2YXRlKSwKIAkJCUdGUF9LRVJORUwpOwogfQogCkBAIC00NjksMTggKzQ2OCw2IEBACiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGNlbGxlYl9pb193b3JrYXJvdW5kX2luaXQoc3RydWN0IHBjaV9jb250cm9sbGVyICpwaGIsCi0JCQkJCSAgICBzdHJ1Y3QgY2VsbGViX3BoYl9zcGVjICpwaGJfc3BlYykKLXsKLQlpZiAocGhiX3NwZWMtPm9wcykgewotCQlpb3dhX3JlZ2lzdGVyX2J1cyhwaGIsIHBoYl9zcGVjLT5vcHMsIHBoYl9zcGVjLT5pb3dhX2luaXQsCi0JCQkJICBwaGJfc3BlYy0+aW93YV9kYXRhKTsKLQkJaW9fd29ya2Fyb3VuZF9pbml0KCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIGludCBfX2luaXQgY2VsbGViX3NldHVwX3BoYihzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKnBoYikKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiA9IHBoYi0+ZG47CkBAIC01MDAsNyArNDg3LDExIEBACiAJaWYgKHJjKQogCQlyZXR1cm4gMTsKIAotCXJldHVybiBjZWxsZWJfaW9fd29ya2Fyb3VuZF9pbml0KHBoYiwgcGhiX3NwZWMpOworCWlmIChwaGJfc3BlYy0+b3BzKQorCQlpb3dhX3JlZ2lzdGVyX2J1cyhwaGIsIHBoYl9zcGVjLT5vcHMsCisJCQkJICBwaGJfc3BlYy0+aW93YV9pbml0LAorCQkJCSAgcGhiX3NwZWMtPmlvd2FfZGF0YSk7CisJcmV0dXJuIDA7CiB9CiAKIGludCBjZWxsZWJfcGNpX3Byb2JlX21vZGUoc3RydWN0IHBjaV9idXMgKmJ1cykKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9jZWxsZWJfcGNpLmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvY2VsbGViX3BjaS5oCmluZGV4IDRjYmExNTIuLmE4MDFmY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9jZWxsZWJfcGNpLmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2NlbGxlYl9wY2kuaApAQCAtMjYsOCArMjYsOSBAQAogI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vcHBjLXBjaS5oPgorI2luY2x1ZGUgPGFzbS9pby13b3JrYXJvdW5kcy5oPgogCi0jaW5jbHVkZSAiaW8td29ya2Fyb3VuZHMuaCIKK3N0cnVjdCBpb3dhX2J1czsKIAogc3RydWN0IGNlbGxlYl9waGJfc3BlYyB7CiAJaW50ICgqc2V0dXApKHN0cnVjdCBkZXZpY2Vfbm9kZSAqLCBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvY2VsbGViX3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvY2VsbGViX3NldHVwLmMKaW5kZXggZTUzODQ1NS4uZDU4ZDliYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2NlbGxlYl9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9jZWxsZWJfc2V0dXAuYwpAQCAtMTI4LDEwICsxMjgsNiBAQAogCXNwdV9tYW5hZ2VtZW50X29wcwk9ICZzcHVfbWFuYWdlbWVudF9vZl9vcHM7CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19TTVAKLQlzbXBfaW5pdF9jZWxsZWIoKTsKLSNlbmRpZgotCiAJY2VsbGViX3NldHVwX2FyY2hfY29tbW9uKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pbnRlcnJ1cHQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pbnRlcnJ1cHQuYwppbmRleCA0NGNmZDFiLi40NDljMDhjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW50ZXJydXB0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2ludGVycnVwdC5jCkBAIC0xOTYsOCArMTk2LDIwIEBACiB7CiAJaW50IGlwaSA9IChpbnQpKGxvbmcpZGV2X2lkOwogCi0Jc21wX21lc3NhZ2VfcmVjdihpcGkpOwotCisJc3dpdGNoKGlwaSkgeworCWNhc2UgUFBDX01TR19DQUxMX0ZVTkNUSU9OOgorCQlnZW5lcmljX3NtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdCgpOworCQlicmVhazsKKwljYXNlIFBQQ19NU0dfUkVTQ0hFRFVMRToKKwkJc2NoZWR1bGVyX2lwaSgpOworCQlicmVhazsKKwljYXNlIFBQQ19NU0dfQ0FMTF9GVU5DX1NJTkdMRToKKwkJZ2VuZXJpY19zbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaW50ZXJydXB0KCk7CisJCWJyZWFrOworCWNhc2UgUFBDX01TR19ERUJVR0dFUl9CUkVBSzoKKwkJZGVidWdfaXBpX2FjdGlvbigwLCBOVUxMKTsKKwkJYnJlYWs7CisJfQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIHN0YXRpYyB2b2lkIGlpY19yZXF1ZXN0X2lwaShpbnQgaXBpLCBjb25zdCBjaGFyICpuYW1lKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3FwYWNlX3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvcXBhY2Vfc2V0dXAuYwppbmRleCBkMzFjNTk0Li41MWUyOTAxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvcXBhY2Vfc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvcXBhY2Vfc2V0dXAuYwpAQCAtNDIsNyArNDIsNiBAQAogI2luY2x1ZGUgImludGVycnVwdC5oIgogI2luY2x1ZGUgInBlcnZhc2l2ZS5oIgogI2luY2x1ZGUgInJhcy5oIgotI2luY2x1ZGUgImlvLXdvcmthcm91bmRzLmgiCiAKIHN0YXRpYyB2b2lkIHFwYWNlX3Nob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zZXR1cC5jCmluZGV4IGZkNTdiZmUuLmM3M2NmNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zZXR1cC5jCkBAIC01MSwxMSArNTEsMTEgQEAKICNpbmNsdWRlIDxhc20vdWRiZy5oPgogI2luY2x1ZGUgPGFzbS9tcGljLmg+CiAjaW5jbHVkZSA8YXNtL2NlbGwtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9pby13b3JrYXJvdW5kcy5oPgogCiAjaW5jbHVkZSAiaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAicGVydmFzaXZlLmgiCiAjaW5jbHVkZSAicmFzLmgiCi0jaW5jbHVkZSAiaW8td29ya2Fyb3VuZHMuaCIKIAogI2lmZGVmIERFQlVHCiAjZGVmaW5lIERCRyhmbXQuLi4pIHVkYmdfcHJpbnRmKGZtdCkKQEAgLTEzNiw4ICsxMzYsNiBAQAogCiAJaW93YV9yZWdpc3Rlcl9idXMocGhiLCAmc3BpZGVycGNpX29wcywgJnNwaWRlcnBjaV9pb3dhX2luaXQsCiAJCQkJICAodm9pZCAqKVNQSURFUl9QQ0lfUkVHX0JBU0UpOwotCWlvX3dvcmthcm91bmRfaW5pdCgpOwotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zbXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zbXAuYwppbmRleCBmNzc0NTMwLi5kMTc2ZTYxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NtcC5jCkBAIC03Nyw3ICs3Nyw3IEBACiAJdW5zaWduZWQgaW50IHBjcHU7CiAJaW50IHN0YXJ0X2NwdTsKIAotCWlmIChjcHVfaXNzZXQobGNwdSwgb2Zfc3Bpbl9tYXApKQorCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGxjcHUsICZvZl9zcGluX21hcCkpCiAJCS8qIEFscmVhZHkgc3RhcnRlZCBieSBPRiBhbmQgc2l0dGluZyBpbiBzcGluIGxvb3AgKi8KIAkJcmV0dXJuIDE7CiAKQEAgLTEwMywyNyArMTAzLDExIEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyB2b2lkIHNtcF9paWNfbWVzc2FnZV9wYXNzKGludCB0YXJnZXQsIGludCBtc2cpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlpZiAodGFyZ2V0IDwgTlJfQ1BVUykgewotCQlpaWNfY2F1c2VfSVBJKHRhcmdldCwgbXNnKTsKLQl9IGVsc2UgewotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKLQkJCWlmICh0YXJnZXQgPT0gTVNHX0FMTF9CVVRfU0VMRgotCQkJICAgICYmIGkgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQotCQkJCWNvbnRpbnVlOwotCQkJaWljX2NhdXNlX0lQSShpLCBtc2cpOwotCQl9Ci0JfQotfQotCiBzdGF0aWMgaW50IF9faW5pdCBzbXBfaWljX3Byb2JlKHZvaWQpCiB7CiAJaWljX3JlcXVlc3RfSVBJcygpOwogCi0JcmV0dXJuIGNwdXNfd2VpZ2h0KGNwdV9wb3NzaWJsZV9tYXApOworCXJldHVybiBjcHVtYXNrX3dlaWdodChjcHVfcG9zc2libGVfbWFzayk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBzbXBfY2VsbF9zZXR1cF9jcHUoaW50IGNwdSkKQEAgLTEzNywxMiArMTIxLDEyIEBACiAJbXRzcHIoU1BSTl9EQUJSWCwgREFCUlhfS0VSTkVMIHwgREFCUlhfVVNFUik7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBzbXBfY2VsbF9raWNrX2NwdShpbnQgbnIpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbXBfY2VsbF9raWNrX2NwdShpbnQgbnIpCiB7CiAJQlVHX09OKG5yIDwgMCB8fCBuciA+PSBOUl9DUFVTKTsKIAogCWlmICghc21wX3N0YXJ0dXBfY3B1KG5yKSkKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT0VOVDsKIAogCS8qCiAJICogVGhlIHByb2Nlc3NvciBpcyBjdXJyZW50bHkgc3Bpbm5pbmcsIHdhaXRpbmcgZm9yIHRoZQpAQCAtMTUwLDYgKzEzNCw4IEBACiAJICogdGhlIHByb2Nlc3NvciB3aWxsIGNvbnRpbnVlIG9uIHRvIHNlY29uZGFyeV9zdGFydAogCSAqLwogCXBhY2FbbnJdLmNwdV9zdGFydCA9IDE7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzbXBfY2VsbF9jcHVfYm9vdGFibGUodW5zaWduZWQgaW50IG5yKQpAQCAtMTY2LDcgKzE1Miw3IEBACiAJcmV0dXJuIDE7CiB9CiBzdGF0aWMgc3RydWN0IHNtcF9vcHNfdCBicGFfaWljX3NtcF9vcHMgPSB7Ci0JLm1lc3NhZ2VfcGFzcwk9IHNtcF9paWNfbWVzc2FnZV9wYXNzLAorCS5tZXNzYWdlX3Bhc3MJPSBpaWNfY2F1c2VfSVBJLAogCS5wcm9iZQkJPSBzbXBfaWljX3Byb2JlLAogCS5raWNrX2NwdQk9IHNtcF9jZWxsX2tpY2tfY3B1LAogCS5zZXR1cF9jcHUJPSBzbXBfY2VsbF9zZXR1cF9jcHUsCkBAIC0xODYsMTMgKzE3MiwxMiBAQAogCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9TTVQpKSB7CiAJCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGkpIHsKIAkJCWlmIChjcHVfdGhyZWFkX2luX2NvcmUoaSkgPT0gMCkKLQkJCQljcHVfc2V0KGksIG9mX3NwaW5fbWFwKTsKKwkJCQljcHVtYXNrX3NldF9jcHUoaSwgJm9mX3NwaW5fbWFwKTsKIAkJfQotCX0gZWxzZSB7Ci0JCW9mX3NwaW5fbWFwID0gY3B1X3ByZXNlbnRfbWFwOwotCX0KKwl9IGVsc2UKKwkJY3B1bWFza19jb3B5KCZvZl9zcGluX21hcCwgY3B1X3ByZXNlbnRfbWFzayk7CiAKLQljcHVfY2xlYXIoYm9vdF9jcHVpZCwgb2Zfc3Bpbl9tYXApOworCWNwdW1hc2tfY2xlYXJfY3B1KGJvb3RfY3B1aWQsICZvZl9zcGluX21hcCk7CiAKIAkvKiBOb24tbHBhciBoYXMgYWRkaXRpb25hbCB0YWtlL2dpdmUgdGltZWJhc2UgKi8KIAlpZiAocnRhc190b2tlbigiZnJlZXplLXRpbWUtYmFzZSIpICE9IFJUQVNfVU5LTk9XTl9TRVJWSUNFKSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3BpZGVyLXBjaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwaWRlci1wY2kuYwppbmRleCBjYTc3MzFjLi5mMWY3ODc4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3BpZGVyLXBjaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcGlkZXItcGNpLmMKQEAgLTI3LDggKzI3LDcgQEAKIAogI2luY2x1ZGUgPGFzbS9wcGMtcGNpLmg+CiAjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KLQotI2luY2x1ZGUgImlvLXdvcmthcm91bmRzLmgiCisjaW5jbHVkZSA8YXNtL2lvLXdvcmthcm91bmRzLmg+CiAKICNkZWZpbmUgU1BJREVSX1BDSV9ESVNBQkxFX1BSRUZFVENICiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcGlkZXItcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3BpZGVyLXBpYy5jCmluZGV4IGM1Y2Y1MGUuLjQ0MmMyOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcGlkZXItcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwaWRlci1waWMuYwpAQCAtNjgsOSArNjgsOSBAQAogfTsKIHN0YXRpYyBzdHJ1Y3Qgc3BpZGVyX3BpYyBzcGlkZXJfcGljc1tTUElERVJfQ0hJUF9DT1VOVF07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3BpZGVyX3BpYyAqc3BpZGVyX3ZpcnFfdG9fcGljKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHN0cnVjdCBzcGlkZXJfcGljICpzcGlkZXJfaXJxX2RhdGFfdG9fcGljKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlyZXR1cm4gaXJxX21hcFt2aXJxXS5ob3N0LT5ob3N0X2RhdGE7CisJcmV0dXJuIGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogfQogCiBzdGF0aWMgdm9pZCBfX2lvbWVtICpzcGlkZXJfZ2V0X2lycV9jb25maWcoc3RydWN0IHNwaWRlcl9waWMgKnBpYywKQEAgLTgxLDI0ICs4MSwyNCBAQAogCiBzdGF0aWMgdm9pZCBzcGlkZXJfdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IHNwaWRlcl9waWMgKnBpYyA9IHNwaWRlcl92aXJxX3RvX3BpYyhkLT5pcnEpOwotCXZvaWQgX19pb21lbSAqY2ZnID0gc3BpZGVyX2dldF9pcnFfY29uZmlnKHBpYywgaXJxX21hcFtkLT5pcnFdLmh3aXJxKTsKKwlzdHJ1Y3Qgc3BpZGVyX3BpYyAqcGljID0gc3BpZGVyX2lycV9kYXRhX3RvX3BpYyhkKTsKKwl2b2lkIF9faW9tZW0gKmNmZyA9IHNwaWRlcl9nZXRfaXJxX2NvbmZpZyhwaWMsIGlycWRfdG9faHdpcnEoZCkpOwogCiAJb3V0X2JlMzIoY2ZnLCBpbl9iZTMyKGNmZykgfCAweDMwMDAwMDAwdSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNwaWRlcl9tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IHNwaWRlcl9waWMgKnBpYyA9IHNwaWRlcl92aXJxX3RvX3BpYyhkLT5pcnEpOwotCXZvaWQgX19pb21lbSAqY2ZnID0gc3BpZGVyX2dldF9pcnFfY29uZmlnKHBpYywgaXJxX21hcFtkLT5pcnFdLmh3aXJxKTsKKwlzdHJ1Y3Qgc3BpZGVyX3BpYyAqcGljID0gc3BpZGVyX2lycV9kYXRhX3RvX3BpYyhkKTsKKwl2b2lkIF9faW9tZW0gKmNmZyA9IHNwaWRlcl9nZXRfaXJxX2NvbmZpZyhwaWMsIGlycWRfdG9faHdpcnEoZCkpOwogCiAJb3V0X2JlMzIoY2ZnLCBpbl9iZTMyKGNmZykgJiB+MHgzMDAwMDAwMHUpOwogfQogCiBzdGF0aWMgdm9pZCBzcGlkZXJfYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IHNwaWRlcl9waWMgKnBpYyA9IHNwaWRlcl92aXJxX3RvX3BpYyhkLT5pcnEpOwotCXVuc2lnbmVkIGludCBzcmMgPSBpcnFfbWFwW2QtPmlycV0uaHdpcnE7CisJc3RydWN0IHNwaWRlcl9waWMgKnBpYyA9IHNwaWRlcl9pcnFfZGF0YV90b19waWMoZCk7CisJdW5zaWduZWQgaW50IHNyYyA9IGlycWRfdG9faHdpcnEoZCk7CiAKIAkvKiBSZXNldCBlZGdlIGRldGVjdGlvbiBsb2dpYyBpZiBuZWNlc3NhcnkKIAkgKi8KQEAgLTExNiw4ICsxMTYsOCBAQAogc3RhdGljIGludCBzcGlkZXJfc2V0X2lycV90eXBlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgaW50IHR5cGUpCiB7CiAJdW5zaWduZWQgaW50IHNlbnNlID0gdHlwZSAmIElSUV9UWVBFX1NFTlNFX01BU0s7Ci0Jc3RydWN0IHNwaWRlcl9waWMgKnBpYyA9IHNwaWRlcl92aXJxX3RvX3BpYyhkLT5pcnEpOwotCXVuc2lnbmVkIGludCBodyA9IGlycV9tYXBbZC0+aXJxXS5od2lycTsKKwlzdHJ1Y3Qgc3BpZGVyX3BpYyAqcGljID0gc3BpZGVyX2lycV9kYXRhX3RvX3BpYyhkKTsKKwl1bnNpZ25lZCBpbnQgaHcgPSBpcnFkX3RvX2h3aXJxKGQpOwogCXZvaWQgX19pb21lbSAqY2ZnID0gc3BpZGVyX2dldF9pcnFfY29uZmlnKHBpYywgaHcpOwogCXUzMiBvbGRfbWFzazsKIAl1MzIgaWM7CkBAIC0xNzEsNiArMTcxLDcgQEAKIHN0YXRpYyBpbnQgc3BpZGVyX2hvc3RfbWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCiAJCQlpcnFfaHdfbnVtYmVyX3QgaHcpCiB7CisJaXJxX3NldF9jaGlwX2RhdGEodmlycSwgaC0+aG9zdF9kYXRhKTsKIAlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIodmlycSwgJnNwaWRlcl9waWMsIGhhbmRsZV9sZXZlbF9pcnEpOwogCiAJLyogU2V0IGRlZmF1bHQgaXJxIHR5cGUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zY2hlZC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NjaGVkLmMKaW5kZXggNjUyMDM4NS4uMzJjYjRlNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NjaGVkLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NjaGVkLmMKQEAgLTE0MSw3ICsxNDEsNyBAQAogCSAqIHJ1bnF1ZXVlLiBUaGUgY29udGV4dCB3aWxsIGJlIHJlc2NoZWR1bGVkIG9uIHRoZSBwcm9wZXIgbm9kZQogCSAqIGlmIGl0IGlzIHRpbWVzbGljZWQgb3IgcHJlZW1wdGVkLgogCSAqLwotCWN0eC0+Y3B1c19hbGxvd2VkID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOworCWNwdW1hc2tfY29weSgmY3R4LT5jcHVzX2FsbG93ZWQsIHRza19jcHVzX2FsbG93ZWQoY3VycmVudCkpOwogCiAJLyogU2F2ZSB0aGUgY3VycmVudCBjcHUgaWQgZm9yIHNwdSBpbnRlcnJ1cHQgcm91dGluZy4gKi8KIAljdHgtPmxhc3RfcmFuID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9zbXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9zbXAuYwppbmRleCAwMmNhZmVjLi5hODAwMTIyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3NtcC5jCkBAIC0zMCwxMCArMzAsMTIgQEAKICNpbmNsdWRlIDxhc20vbXBpYy5oPgogI2luY2x1ZGUgPGFzbS9ydGFzLmg+CiAKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBzbXBfY2hycF9raWNrX2NwdShpbnQgbnIpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbXBfY2hycF9raWNrX2NwdShpbnQgbnIpCiB7CiAJKih1bnNpZ25lZCBsb25nICopS0VSTkVMQkFTRSA9IG5yOwogCWFzbSB2b2xhdGlsZSgiZGNiZiAwLCUwIjo6InIiKEtFUk5FTEJBU0UpOiJtZW1vcnkiKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgc21wX2NocnBfc2V0dXBfY3B1KGludCBjcHVfbnIpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L2ZsaXBwZXItcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L2ZsaXBwZXItcGljLmMKaW5kZXggMTJhYTYyYi4uZjYxYTJkZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9mbGlwcGVyLXBpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvZmxpcHBlci1waWMuYwpAQCAtNDgsNyArNDgsNyBAQAogCiBzdGF0aWMgdm9pZCBmbGlwcGVyX3BpY19tYXNrX2FuZF9hY2soc3RydWN0IGlycV9kYXRhICpkKQogewotCWludCBpcnEgPSB2aXJxX3RvX2h3KGQtPmlycSk7CisJaW50IGlycSA9IGlycWRfdG9faHdpcnEoZCk7CiAJdm9pZCBfX2lvbWVtICppb19iYXNlID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAJdTMyIG1hc2sgPSAxIDw8IGlycTsKIApAQCAtNTksNyArNTksNyBAQAogCiBzdGF0aWMgdm9pZCBmbGlwcGVyX3BpY19hY2soc3RydWN0IGlycV9kYXRhICpkKQogewotCWludCBpcnEgPSB2aXJxX3RvX2h3KGQtPmlycSk7CisJaW50IGlycSA9IGlycWRfdG9faHdpcnEoZCk7CiAJdm9pZCBfX2lvbWVtICppb19iYXNlID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAKIAkvKiB0aGlzIGlzIGF0IGxlYXN0IG5lZWRlZCBmb3IgUlNXICovCkBAIC02OCw3ICs2OCw3IEBACiAKIHN0YXRpYyB2b2lkIGZsaXBwZXJfcGljX21hc2soc3RydWN0IGlycV9kYXRhICpkKQogewotCWludCBpcnEgPSB2aXJxX3RvX2h3KGQtPmlycSk7CisJaW50IGlycSA9IGlycWRfdG9faHdpcnEoZCk7CiAJdm9pZCBfX2lvbWVtICppb19iYXNlID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAKIAljbHJiaXRzMzIoaW9fYmFzZSArIEZMSVBQRVJfSU1SLCAxIDw8IGlycSk7CkBAIC03Niw3ICs3Niw3IEBACiAKIHN0YXRpYyB2b2lkIGZsaXBwZXJfcGljX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JaW50IGlycSA9IHZpcnFfdG9faHcoZC0+aXJxKTsKKwlpbnQgaXJxID0gaXJxZF90b19od2lycShkKTsKIAl2b2lkIF9faW9tZW0gKmlvX2Jhc2UgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIAogCXNldGJpdHMzMihpb19iYXNlICsgRkxJUFBFUl9JTVIsIDEgPDwgaXJxKTsKQEAgLTEwNywxMiArMTA3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZmxpcHBlcl9waWNfdW5tYXAoc3RydWN0IGlycV9ob3N0ICpoLCB1bnNpZ25lZCBpbnQgaXJxKQotewotCWlycV9zZXRfY2hpcF9kYXRhKGlycSwgTlVMTCk7Ci0JaXJxX3NldF9jaGlwKGlycSwgTlVMTCk7Ci19Ci0KIHN0YXRpYyBpbnQgZmxpcHBlcl9waWNfbWF0Y2goc3RydWN0IGlycV9ob3N0ICpoLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQogewogCXJldHVybiAxOwpAQCAtMTIxLDcgKzExNSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2hvc3Rfb3BzIGZsaXBwZXJfaXJxX2hvc3Rfb3BzID0gewogCS5tYXAgPSBmbGlwcGVyX3BpY19tYXAsCi0JLnVubWFwID0gZmxpcHBlcl9waWNfdW5tYXAsCiAJLm1hdGNoID0gZmxpcHBlcl9waWNfbWF0Y2gsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L2hsd2QtcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L2hsd2QtcGljLmMKaW5kZXggMmJkZGRmYy4uZTQ5MTkxNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9obHdkLXBpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvaGx3ZC1waWMuYwpAQCAtNDMsNyArNDMsNyBAQAogCiBzdGF0aWMgdm9pZCBobHdkX3BpY19tYXNrX2FuZF9hY2soc3RydWN0IGlycV9kYXRhICpkKQogewotCWludCBpcnEgPSB2aXJxX3RvX2h3KGQtPmlycSk7CisJaW50IGlycSA9IGlycWRfdG9faHdpcnEoZCk7CiAJdm9pZCBfX2lvbWVtICppb19iYXNlID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAJdTMyIG1hc2sgPSAxIDw8IGlycTsKIApAQCAtNTMsNyArNTMsNyBAQAogCiBzdGF0aWMgdm9pZCBobHdkX3BpY19hY2soc3RydWN0IGlycV9kYXRhICpkKQogewotCWludCBpcnEgPSB2aXJxX3RvX2h3KGQtPmlycSk7CisJaW50IGlycSA9IGlycWRfdG9faHdpcnEoZCk7CiAJdm9pZCBfX2lvbWVtICppb19iYXNlID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAKIAlvdXRfYmUzMihpb19iYXNlICsgSFdfQlJPQURXQVlfSUNSLCAxIDw8IGlycSk7CkBAIC02MSw3ICs2MSw3IEBACiAKIHN0YXRpYyB2b2lkIGhsd2RfcGljX21hc2soc3RydWN0IGlycV9kYXRhICpkKQogewotCWludCBpcnEgPSB2aXJxX3RvX2h3KGQtPmlycSk7CisJaW50IGlycSA9IGlycWRfdG9faHdpcnEoZCk7CiAJdm9pZCBfX2lvbWVtICppb19iYXNlID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAKIAljbHJiaXRzMzIoaW9fYmFzZSArIEhXX0JST0FEV0FZX0lNUiwgMSA8PCBpcnEpOwpAQCAtNjksNyArNjksNyBAQAogCiBzdGF0aWMgdm9pZCBobHdkX3BpY191bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQogewotCWludCBpcnEgPSB2aXJxX3RvX2h3KGQtPmlycSk7CisJaW50IGlycSA9IGlycWRfdG9faHdpcnEoZCk7CiAJdm9pZCBfX2lvbWVtICppb19iYXNlID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAKIAlzZXRiaXRzMzIoaW9fYmFzZSArIEhXX0JST0FEV0FZX0lNUiwgMSA8PCBpcnEpOwpAQCAtMTAwLDE1ICsxMDAsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBobHdkX3BpY191bm1hcChzdHJ1Y3QgaXJxX2hvc3QgKmgsIHVuc2lnbmVkIGludCBpcnEpCi17Ci0JaXJxX3NldF9jaGlwX2RhdGEoaXJxLCBOVUxMKTsKLQlpcnFfc2V0X2NoaXAoaXJxLCBOVUxMKTsKLX0KLQogc3RhdGljIHN0cnVjdCBpcnFfaG9zdF9vcHMgaGx3ZF9pcnFfaG9zdF9vcHMgPSB7CiAJLm1hcCA9IGhsd2RfcGljX21hcCwKLQkudW5tYXAgPSBobHdkX3BpY191bm1hcCwKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgX19obHdkX3BpY19nZXRfaXJxKHN0cnVjdCBpcnFfaG9zdCAqaCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL0tjb25maWcKaW5kZXggZTViYzlmNy4uYjU3Y2RhMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL0tjb25maWcKQEAgLTEsNyArMSw5IEBACiBjb25maWcgUFBDX0lTRVJJRVMKIAlib29sICJJQk0gTGVnYWN5IGlTZXJpZXMiCiAJZGVwZW5kcyBvbiBQUEM2NCAmJiBQUENfQk9PSzNTCi0Jc2VsZWN0IFBQQ19JTkRJUkVDVF9JTworCXNlbGVjdCBQUENfU01QX01VWEVEX0lQSQorCXNlbGVjdCBQUENfSU5ESVJFQ1RfUElPCisJc2VsZWN0IFBQQ19JTkRJUkVDVF9NTUlPCiAJc2VsZWN0IFBQQ19QQ0lfQ0hPSUNFIGlmIEVYUEVSVAogCiBtZW51ICJpU2VyaWVzIGRldmljZSBkcml2ZXJzIgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2V4Y2VwdGlvbi5TIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2V4Y2VwdGlvbi5TCmluZGV4IDMyYTU2YzYuLjI5YzAyZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9leGNlcHRpb24uUworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvZXhjZXB0aW9uLlMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CisjaW5jbHVkZSA8YXNtL21tdS5oPgogCiAjaW5jbHVkZSAiZXhjZXB0aW9uLmgiCiAKQEAgLTYwLDI5ICs2MSwzMSBAQAogLyogU3BpbiBvbiBfX3NlY29uZGFyeV9ob2xkX3NwaW5sb29wIHVudGlsIGl0IGlzIHVwZGF0ZWQgYnkgdGhlIGJvb3QgY3B1LiAqLwogLyogSW4gdGhlIFVQIGNhc2Ugd2UnbGwgeWllbGQoKSBsYXRlciwgYW5kIHdlIHdpbGwgbm90IGFjY2VzcyB0aGUgcGFjYSBhbnl3YXkgKi8KICNpZmRlZiBDT05GSUdfU01QCi0xOgoraVNlcmllc19zZWNvbmRhcnlfd2FpdF9wYWNhOgogCUhNVF9MT1cKIAlMT0FEX1JFR19BRERSKHIyMywgX19zZWNvbmRhcnlfaG9sZF9zcGlubG9vcCkKIAlsZAlyMjMsMChyMjMpCi0Jc3luYwotCUxPQURfUkVHX0FERFIocjMsY3VycmVudF9zZXQpCi0Jc2xkaQlyMjgscjI0LDMJCS8qIGdldCBjdXJyZW50X3NldFtjcHUjXSAqLwotCWxkeAlyMyxyMyxyMjgKLQlhZGRpCXIxLHIzLFRIUkVBRF9TSVpFCi0Jc3ViaQlyMSxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAogCi0JY21wd2kJMCxyMjMsMAkJCS8qIEtlZXAgcG9raW5nIHRoZSBIeXBlcnZpc29yIHVudGlsICovCi0JYm5lCTJmCQkJLyogd2UncmUgcmVsZWFzZWQgKi8KLQkvKiBMZXQgdGhlIEh5cGVydmlzb3Iga25vdyB3ZSBhcmUgYWxpdmUgKi8KKwljbXBkaQkwLHIyMywwCisJYm5lCTJmCQkJLyogZ28gb24gd2hlbiB0aGUgbWFzdGVyIGlzIHJlYWR5ICovCisKKwkvKiBLZWVwIHBva2luZyB0aGUgSHlwZXJ2aXNvciB1bnRpbCB3ZSdyZSByZWxlYXNlZCAqLwogCS8qIDgwMDIgaXMgYSBjYWxsIHRvIEh2Q2FsbENmZzo6Z2V0THBzLCBhIGhhcm1sZXNzIEh5cGVydmlzb3IgZnVuY3Rpb24gKi8KIAlsaXMJcjMsMHg4MDAyCiAJcmxkaWNyCXIzLHIzLDMyLDE1CQkvKiByMCA9IChyMyA8PCAzMikgJiAweGZmZmYwMDAwMDAwMDAwMDAgKi8KIAlsaQlyMCwtMQkJCS8qIHIwPS0xIGluZGljYXRlcyBhIEh5cGVydmlzb3IgY2FsbCAqLwogCXNjCQkJCS8qIEludm9rZSB0aGUgaHlwZXJ2aXNvciB2aWEgYSBzeXN0ZW0gY2FsbCAqLwotCWIJMWIKLSNlbmRpZgorCWIJaVNlcmllc19zZWNvbmRhcnlfd2FpdF9wYWNhCiAKIDI6CisJSE1UX01FRElVTQorCXN5bmMKKworCUxPQURfUkVHX0FERFIocjMsIG5yX2NwdV9pZHMpCS8qIGdldCBudW1iZXIgb2YgcGFjYXMgYWxsb2NhdGVkICovCisJbHd6CXIzLDAocjMpCQkvKiBucl9jcHVzPSBvciBOUl9DUFVTIGNhbiBsaW1pdCAqLworCWNtcGxkCTAscjI0LHIzCQkvKiBpcyBvdXIgY3B1IG51bWJlciBhbGxvY2F0ZWQ/ICovCisJYmdlCWlTZXJpZXNfc2Vjb25kYXJ5X3lpZWxkCS8qIG5vLCB5aWVsZCBmb3JldmVyICovCisKIAkvKiBMb2FkIG91ciBwYWNhIG5vdyB0aGF0IGl0J3MgYmVlbiBhbGxvY2F0ZWQgKi8KIAlMT0FEX1JFR19BRERSKHIxMywgcGFjYSkKIAlsZAlyMTMsMChyMTMpCkBAIC05MywxMCArOTYsMjQgQEAKIAlvcmkJcjIzLHIyMyxNU1JfUkkKIAltdG1zcmQJcjIzCQkJLyogUkkgb24gKi8KIAotCUhNVF9MT1cKLSNpZmRlZiBDT05GSUdfU01QCitpU2VyaWVzX3NlY29uZGFyeV9zbXBfbG9vcDoKIAlsYnoJcjIzLFBBQ0FQUk9DU1RBUlQocjEzKQkvKiBUZXN0IGlmIHRoaXMgcHJvY2Vzc29yCiAJCQkJCSAqIHNob3VsZCBzdGFydCAqLworCWNtcHdpCTAscjIzLDAKKwlibmUJM2YJCQkvKiBnbyBvbiB3aGVuIHdlIGFyZSB0b2xkICovCisKKwlITVRfTE9XCisJLyogTGV0IHRoZSBIeXBlcnZpc29yIGtub3cgd2UgYXJlIGFsaXZlICovCisJLyogODAwMiBpcyBhIGNhbGwgdG8gSHZDYWxsQ2ZnOjpnZXRMcHMsIGEgaGFybWxlc3MgSHlwZXJ2aXNvciBmdW5jdGlvbiAqLworCWxpcwlyMywweDgwMDIKKwlybGRpY3IJcjMscjMsMzIsMTUJCS8qIHIwID0gKHIzIDw8IDMyKSAmIDB4ZmZmZjAwMDAwMDAwMDAwMCAqLworCWxpCXIwLC0xCQkJLyogcjA9LTEgaW5kaWNhdGVzIGEgSHlwZXJ2aXNvciBjYWxsICovCisJc2MJCQkJLyogSW52b2tlIHRoZSBoeXBlcnZpc29yIHZpYSBhIHN5c3RlbSBjYWxsICovCisJbWZzcHIJcjEzLFNQUk5fU1BSR19QQUNBCS8qIFB1dCByMTMgYmFjayA/Pz8/ICovCisJYglpU2VyaWVzX3NlY29uZGFyeV9zbXBfbG9vcCAvKiB3YWl0IGZvciBzaWduYWwgdG8gc3RhcnQgKi8KKworMzoKKwlITVRfTUVESVVNCiAJc3luYwogCUxPQURfUkVHX0FERFIocjMsY3VycmVudF9zZXQpCiAJc2xkaQlyMjgscjI0LDMJCS8qIGdldCBjdXJyZW50X3NldFtjcHUjXSAqLwpAQCAtMTA0LDI3ICsxMjEsMjIgQEAKIAlhZGRpCXIxLHIzLFRIUkVBRF9TSVpFCiAJc3ViaQlyMSxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAogCi0JY21wd2kJMCxyMjMsMAotCWJlcQlpU2VyaWVzX3NlY29uZGFyeV9zbXBfbG9vcAkvKiBMb29wIHVudGlsIHRvbGQgdG8gZ28gKi8KIAliCV9fc2Vjb25kYXJ5X3N0YXJ0CQkvKiBMb29wIHVudGlsIHRvbGQgdG8gZ28gKi8KLWlTZXJpZXNfc2Vjb25kYXJ5X3NtcF9sb29wOgotCS8qIExldCB0aGUgSHlwZXJ2aXNvciBrbm93IHdlIGFyZSBhbGl2ZSAqLwotCS8qIDgwMDIgaXMgYSBjYWxsIHRvIEh2Q2FsbENmZzo6Z2V0THBzLCBhIGhhcm1sZXNzIEh5cGVydmlzb3IgZnVuY3Rpb24gKi8KLQlsaXMJcjMsMHg4MDAyCi0JcmxkaWNyCXIzLHIzLDMyLDE1CQkvKiByMCA9IChyMyA8PCAzMikgJiAweGZmZmYwMDAwMDAwMDAwMDAgKi8KLSNlbHNlIC8qIENPTkZJR19TTVAgKi8KKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKK2lTZXJpZXNfc2Vjb25kYXJ5X3lpZWxkOgogCS8qIFlpZWxkIHRoZSBwcm9jZXNzb3IuICBUaGlzIGlzIHJlcXVpcmVkIGZvciBub24tU01QIGtlcm5lbHMKIAkJd2hpY2ggYXJlIHJ1bm5pbmcgb24gbXVsdGktdGhyZWFkZWQgbWFjaGluZXMuICovCisJSE1UX0xPVwogCWxpcwlyMywweDgwMDAKIAlybGRpY3IJcjMscjMsMzIsMTUJCS8qIHIzID0gKHIzIDw8IDMyKSAmIDB4ZmZmZjAwMDAwMDAwMDAwMCAqLwogCWFkZGkJcjMscjMsMTgJCS8qIHIzID0gMHg4MDAwMDAwMDAwMDAwMDEyIHdoaWNoIGlzICJ5aWVsZCIgKi8KIAlsaQlyNCwwCQkJLyogInlpZWxkIHRpbWVkIiAqLwogCWxpCXI1LC0xCQkJLyogInlpZWxkIGZvcmV2ZXIiICovCi0jZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCWxpCXIwLC0xCQkJLyogcjA9LTEgaW5kaWNhdGVzIGEgSHlwZXJ2aXNvciBjYWxsICovCiAJc2MJCQkJLyogSW52b2tlIHRoZSBoeXBlcnZpc29yIHZpYSBhIHN5c3RlbSBjYWxsICovCiAJbWZzcHIJcjEzLFNQUk5fU1BSR19QQUNBCS8qIFB1dCByMTMgYmFjayA/Pz8/ICovCi0JYgkyYgkJCS8qIElmIFNNUCBub3QgY29uZmlndXJlZCwgc2Vjb25kYXJpZXMKKwliCWlTZXJpZXNfc2Vjb25kYXJ5X3lpZWxkCS8qIElmIFNNUCBub3QgY29uZmlndXJlZCwgc2Vjb25kYXJpZXMKIAkJCQkJICogbG9vcCBmb3JldmVyICovCiAKIC8qKiogIElTZXJpZXMtTFBBUiBpbnRlcnJ1cHQgaGFuZGxlcnMgKioqLwpAQCAtMTU3LDcgKzE2OSw3IEBACiBGVFJfU0VDVElPTl9FTFNFCiAJRVhDRVBUSU9OX1BST0xPR18xKFBBQ0FfRVhHRU4pCiAJRVhDRVBUSU9OX1BST0xPR19JU0VSSUVTXzEKLUFMVF9GVFJfU0VDVElPTl9FTkRfSUZDTFIoQ1BVX0ZUUl9TTEIpCitBTFRfTU1VX0ZUUl9TRUNUSU9OX0VORF9JRkNMUihNTVVfRlRSX1NMQikKIAliCWRhdGFfYWNjZXNzX2NvbW1vbgogCiAuZG9fc3RhYl9ib2x0ZWRfaVNlcmllczoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pcnEuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pcnEuYwppbmRleCA1MmE2ODg5Li5iMjEwMzQ1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaXJxLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lycS5jCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSAiaXJxLmgiCiAjaW5jbHVkZSAicGNpLmgiCiAjaW5jbHVkZSAiY2FsbF9wY2kuaCIKLSNpbmNsdWRlICJzbXAuaCIKIAogI2lmZGVmIENPTkZJR19QQ0kKIApAQCAtMTcxLDcgKzE3MCw3IEBACiB7CiAJdTMyIGJ1cywgZGV2X2lkLCBmdW5jdGlvbiwgbWFzazsKIAljb25zdCB1MzIgc3ViX2J1cyA9IDA7Ci0JdW5zaWduZWQgaW50IHJpcnEgPSAodW5zaWduZWQgaW50KWlycV9tYXBbZC0+aXJxXS5od2lycTsKKwl1bnNpZ25lZCBpbnQgcmlycSA9ICh1bnNpZ25lZCBpbnQpaXJxZF90b19od2lycShkKTsKIAogCS8qIFRoZSBJUlEgaGFzIGFscmVhZHkgYmVlbiBsb2NrZWQgYnkgdGhlIGNhbGxlciAqLwogCWJ1cyA9IFJFQUxfSVJRX1RPX0JVUyhyaXJxKTsKQEAgLTE4OCw3ICsxODcsNyBAQAogewogCXUzMiBidXMsIGRldl9pZCwgZnVuY3Rpb24sIG1hc2s7CiAJY29uc3QgdTMyIHN1Yl9idXMgPSAwOwotCXVuc2lnbmVkIGludCByaXJxID0gKHVuc2lnbmVkIGludClpcnFfbWFwW2QtPmlycV0uaHdpcnE7CisJdW5zaWduZWQgaW50IHJpcnEgPSAodW5zaWduZWQgaW50KWlycWRfdG9faHdpcnEoZCk7CiAKIAlidXMgPSBSRUFMX0lSUV9UT19CVVMocmlycSk7CiAJZnVuY3Rpb24gPSBSRUFMX0lSUV9UT19GVU5DKHJpcnEpOwpAQCAtMjM0LDcgKzIzMyw3IEBACiB7CiAJdTMyIGJ1cywgZGV2X2lkLCBmdW5jdGlvbiwgbWFzazsKIAljb25zdCB1MzIgc3ViX2J1cyA9IDA7Ci0JdW5zaWduZWQgaW50IHJpcnEgPSAodW5zaWduZWQgaW50KWlycV9tYXBbZC0+aXJxXS5od2lycTsKKwl1bnNpZ25lZCBpbnQgcmlycSA9ICh1bnNpZ25lZCBpbnQpaXJxZF90b19od2lycShkKTsKIAogCS8qIGlycSBzaG91bGQgYmUgbG9ja2VkIGJ5IHRoZSBjYWxsZXIgKi8KIAlidXMgPSBSRUFMX0lSUV9UT19CVVMocmlycSk7CkBAIC0yNTcsNyArMjU2LDcgQEAKIHsKIAl1MzIgYnVzLCBkZXZfaWQsIGZ1bmN0aW9uLCBtYXNrOwogCWNvbnN0IHUzMiBzdWJfYnVzID0gMDsKLQl1bnNpZ25lZCBpbnQgcmlycSA9ICh1bnNpZ25lZCBpbnQpaXJxX21hcFtkLT5pcnFdLmh3aXJxOworCXVuc2lnbmVkIGludCByaXJxID0gKHVuc2lnbmVkIGludClpcnFkX3RvX2h3aXJxKGQpOwogCiAJLyogVGhlIElSUSBoYXMgYWxyZWFkeSBiZWVuIGxvY2tlZCBieSB0aGUgY2FsbGVyICovCiAJYnVzID0gUkVBTF9JUlFfVE9fQlVTKHJpcnEpOwpAQCAtMjcxLDcgKzI3MCw3IEBACiAKIHN0YXRpYyB2b2lkIGlzZXJpZXNfZW5kX0lSUShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JdW5zaWduZWQgaW50IHJpcnEgPSAodW5zaWduZWQgaW50KWlycV9tYXBbZC0+aXJxXS5od2lycTsKKwl1bnNpZ25lZCBpbnQgcmlycSA9ICh1bnNpZ25lZCBpbnQpaXJxZF90b19od2lycShkKTsKIAogCUh2Q2FsbFBjaV9lb2koUkVBTF9JUlFfVE9fQlVTKHJpcnEpLCBSRUFMX0lSUV9UT19TVUJCVVMocmlycSksCiAJCShSRUFMX0lSUV9UT19JRFNFTChyaXJxKSA8PCA0KSArIFJFQUxfSVJRX1RPX0ZVTkMocmlycSkpOwpAQCAtMzE2LDcgKzMxNSw3IEBACiAjaWZkZWYgQ09ORklHX1NNUAogCWlmIChnZXRfbHBwYWNhKCktPmludF9kd29yZC5maWVsZHMuaXBpX2NudCkgewogCQlnZXRfbHBwYWNhKCktPmludF9kd29yZC5maWVsZHMuaXBpX2NudCA9IDA7Ci0JCWlTZXJpZXNfc21wX21lc3NhZ2VfcmVjdigpOworCQlzbXBfaXBpX2RlbXV4KCk7CiAJfQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAlpZiAoaHZscGV2ZW50X2lzX3BlbmRpbmcoKSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NldHVwLmMKaW5kZXggMjk0NmFlMS4uYzI1YTA4MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NldHVwLmMKQEAgLTI0OSw3ICsyNDksNyBAQAogCXVuc2lnbmVkIGxvbmcgaTsKIAl1bnNpZ25lZCBsb25nIG1lbV9ibG9ja3MgPSAwOwogCi0JaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1NMQikpCisJaWYgKG1tdV9oYXNfZmVhdHVyZShNTVVfRlRSX1NMQikpCiAJCW1lbV9ibG9ja3MgPSBpU2VyaWVzX3Byb2Nlc3NfUmVnYXR0YV9tYWluc3RvcmVfdnBkKG1iX2FycmF5LAogCQkJCW1heF9lbnRyaWVzKTsKIAllbHNlCkBAIC02MzQsNyArNjM0LDcgQEAKIAogCWhwdGVfaW5pdF9pU2VyaWVzKCk7CiAJLyogaVNlcmllcyBkb2VzIG5vdCBzdXBwb3J0IDE2TSBwYWdlcyAqLwotCWN1cl9jcHVfc3BlYy0+Y3B1X2ZlYXR1cmVzICY9IH5DUFVfRlRSXzE2TV9QQUdFOworCWN1cl9jcHVfc3BlYy0+bW11X2ZlYXR1cmVzICY9IH5NTVVfRlRSXzE2TV9QQUdFOwogCiAJcmV0dXJuIDE7CiB9CkBAIC02ODUsNiArNjg1LDExIEBACiAJcG93ZXJwY19maXJtd2FyZV9mZWF0dXJlcyB8PSBGV19GRUFUVVJFX0lTRVJJRVM7CiAJcG93ZXJwY19maXJtd2FyZV9mZWF0dXJlcyB8PSBGV19GRUFUVVJFX0xQQVI7CiAKKyNpZmRlZiBDT05GSUdfU01QCisJLyogT24gaVNlcmllcyB3ZSBrbm93IHdlIGNhbiBuZXZlciBoYXZlIG1vcmUgdGhhbiA2NCBjcHVzICovCisJbnJfY3B1X2lkcyA9IG1heChucl9jcHVfaWRzLCA2NCk7CisjZW5kaWYKKwogCWlTZXJpZXNfZml4dXBfa2xpbWl0KCk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NtcC5jCmluZGV4IDZjNjAyOTkuLmUzMjY1YWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc21wLmMKQEAgLTQyLDU3ICs0MiwyMyBAQAogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotI2luY2x1ZGUgInNtcC5oIgotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBpU2VyaWVzX3NtcF9tZXNzYWdlW05SX0NQVVNdOwotCi12b2lkIGlTZXJpZXNfc21wX21lc3NhZ2VfcmVjdih2b2lkKQorc3RhdGljIHZvaWQgc21wX2lTZXJpZXNfY2F1c2VfaXBpKGludCBjcHUsIHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWludCBtc2c7Ci0KLQlpZiAobnVtX29ubGluZV9jcHVzKCkgPCAyKQotCQlyZXR1cm47Ci0KLQlmb3IgKG1zZyA9IDA7IG1zZyA8IDQ7IG1zZysrKQotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KG1zZywgJmlTZXJpZXNfc21wX21lc3NhZ2VbY3B1XSkpCi0JCQlzbXBfbWVzc2FnZV9yZWN2KG1zZyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzbXBfaVNlcmllc19kb19tZXNzYWdlKGludCBjcHUsIGludCBtc2cpCi17Ci0Jc2V0X2JpdChtc2csICZpU2VyaWVzX3NtcF9tZXNzYWdlW2NwdV0pOwogCUh2Q2FsbF9zZW5kSVBJKCYocGFjYVtjcHVdKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNtcF9pU2VyaWVzX21lc3NhZ2VfcGFzcyhpbnQgdGFyZ2V0LCBpbnQgbXNnKQotewotCWludCBpOwotCi0JaWYgKHRhcmdldCA8IE5SX0NQVVMpCi0JCXNtcF9pU2VyaWVzX2RvX21lc3NhZ2UodGFyZ2V0LCBtc2cpOwotCWVsc2UgewotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKLQkJCWlmICgodGFyZ2V0ID09IE1TR19BTExfQlVUX1NFTEYpICYmCi0JCQkJCShpID09IHNtcF9wcm9jZXNzb3JfaWQoKSkpCi0JCQkJY29udGludWU7Ci0JCQlzbXBfaVNlcmllc19kb19tZXNzYWdlKGksIG1zZyk7Ci0JCX0KLQl9Ci19Ci0KIHN0YXRpYyBpbnQgc21wX2lTZXJpZXNfcHJvYmUodm9pZCkKIHsKIAlyZXR1cm4gY3B1bWFza193ZWlnaHQoY3B1X3Bvc3NpYmxlX21hc2spOwogfQogCi1zdGF0aWMgdm9pZCBzbXBfaVNlcmllc19raWNrX2NwdShpbnQgbnIpCitzdGF0aWMgaW50IHNtcF9pU2VyaWVzX2tpY2tfY3B1KGludCBucikKIHsKIAlCVUdfT04oKG5yIDwgMCkgfHwgKG5yID49IE5SX0NQVVMpKTsKIAogCS8qIFZlcmlmeSB0aGF0IG91ciBwYXJ0aXRpb24gaGFzIGEgcHJvY2Vzc29yIG5yICovCiAJaWYgKGxwcGFjYV9vZihucikuZHluX3Byb2Nfc3RhdHVzID49IDIpCi0JCXJldHVybjsKKwkJcmV0dXJuIC1FTk9FTlQ7CiAKIAkvKiBUaGUgcHJvY2Vzc29yIGlzIGN1cnJlbnRseSBzcGlubmluZywgd2FpdGluZwogCSAqIGZvciB0aGUgY3B1X3N0YXJ0IGZpZWxkIHRvIGJlY29tZSBub24temVybwpAQCAtMTAwLDYgKzY2LDggQEAKIAkgKiBjb250aW51ZSBvbiB0byBzZWNvbmRhcnlfc3RhcnQgaW4gaVNlcmllc19oZWFkLlMKIAkgKi8KIAlwYWNhW25yXS5jcHVfc3RhcnQgPSAxOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBzbXBfaVNlcmllc19zZXR1cF9jcHUoaW50IG5yKQpAQCAtMTA3LDcgKzc1LDggQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzbXBfb3BzX3QgaVNlcmllc19zbXBfb3BzID0gewotCS5tZXNzYWdlX3Bhc3MgPSBzbXBfaVNlcmllc19tZXNzYWdlX3Bhc3MsCisJLm1lc3NhZ2VfcGFzcyA9IHNtcF9tdXhlZF9pcGlfbWVzc2FnZV9wYXNzLAorCS5jYXVzZV9pcGkgICAgPSBzbXBfaVNlcmllc19jYXVzZV9pcGksCiAJLnByb2JlICAgICAgICA9IHNtcF9pU2VyaWVzX3Byb2JlLAogCS5raWNrX2NwdSAgICAgPSBzbXBfaVNlcmllc19raWNrX2NwdSwKIAkuc2V0dXBfY3B1ICAgID0gc21wX2lTZXJpZXNfc2V0dXBfY3B1LApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NtcC5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NtcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTAxZjdkLi4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zbXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2lmbmRlZiBfUExBVEZPUk1TX0lTRVJJRVNfU01QX0gKLSNkZWZpbmUgX1BMQVRGT1JNU19JU0VSSUVTX1NNUF9ICi0KLWV4dGVybiB2b2lkIGlTZXJpZXNfc21wX21lc3NhZ2VfcmVjdih2b2lkKTsKLQotI2VuZGlmCS8qIF9QTEFURk9STVNfSVNFUklFU19TTVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9LY29uZmlnCmluZGV4IDFlMWEwODcuLjFhZmQxMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL0tjb25maWcKQEAgLTE4LDQgKzE4LDEzIEBACiAJc2VsZWN0IFBQQ185NzBfTkFQCiAJZGVmYXVsdCB5CiAKLQorY29uZmlnIFBQQ19QTUFDMzJfUFNVUkdFCisJYm9vbCAiU3VwcG9ydCBmb3IgcG93ZXJzdXJnZSB1cGdyYWRlIGNhcmRzIiBpZiBFWFBFUlQKKwlkZXBlbmRzIG9uIFNNUCAmJiBQUEMzMiAmJiBQUENfUE1BQworCXNlbGVjdCBQUENfU01QX01VWEVEX0lQSQorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoZSBwb3dlcnN1cmdlIGNwdSBib2FyZHMgY2FuIGJlIHVzZWQgaW4gdGhlIGdlbmVyYXRpb24KKwkgIG9mIHBvd2VybWFjcyB0aGF0IGhhdmUgYSBzb2NrZXQgZm9yIGFuIHVwZ3JhZGVhYmxlIGNwdSBjYXJkLAorCSAgaW5jbHVkaW5nIHRoZSA3NTAwLCA4NTAwLCA5NTAwLCA5NjAwLiAgU3VwcG9ydCBleGlzdHMgZm9yCisJICBib3RoIGR1YWwgYW5kIHF1YWQgc29ja2V0IHVwZ3JhZGUgY2FyZHMuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuYwppbmRleCA3YzE4YTE2Li45MDg5YjA0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMKQEAgLTg0LDcgKzg0LDcgQEAKIAogc3RhdGljIHZvaWQgcG1hY19tYXNrX2FuZF9hY2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQl1bnNpZ25lZCBpbnQgc3JjID0gaXJxX21hcFtkLT5pcnFdLmh3aXJxOworCXVuc2lnbmVkIGludCBzcmMgPSBpcnFkX3RvX2h3aXJxKGQpOwogICAgICAgICB1bnNpZ25lZCBsb25nIGJpdCA9IDFVTCA8PCAoc3JjICYgMHgxZik7CiAgICAgICAgIGludCBpID0gc3JjID4+IDU7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMDYsNyArMTA2LDcgQEAKIAogc3RhdGljIHZvaWQgcG1hY19hY2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQl1bnNpZ25lZCBpbnQgc3JjID0gaXJxX21hcFtkLT5pcnFdLmh3aXJxOworCXVuc2lnbmVkIGludCBzcmMgPSBpcnFkX3RvX2h3aXJxKGQpOwogICAgICAgICB1bnNpZ25lZCBsb25nIGJpdCA9IDFVTCA8PCAoc3JjICYgMHgxZik7CiAgICAgICAgIGludCBpID0gc3JjID4+IDU7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xNTIsNyArMTUyLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcG1hY19zdGFydHVwX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgc3JjID0gaXJxX21hcFtkLT5pcnFdLmh3aXJxOworCXVuc2lnbmVkIGludCBzcmMgPSBpcnFkX3RvX2h3aXJxKGQpOwogICAgICAgICB1bnNpZ25lZCBsb25nIGJpdCA9IDFVTCA8PCAoc3JjICYgMHgxZik7CiAgICAgICAgIGludCBpID0gc3JjID4+IDU7CiAKQEAgLTE2OSw3ICsxNjksNyBAQAogc3RhdGljIHZvaWQgcG1hY19tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgc3JjID0gaXJxX21hcFtkLT5pcnFdLmh3aXJxOworCXVuc2lnbmVkIGludCBzcmMgPSBpcnFkX3RvX2h3aXJxKGQpOwogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CiAgICAgICAgIF9fY2xlYXJfYml0KHNyYywgcHBjX2NhY2hlZF9pcnFfbWFzayk7CkBAIC0xODAsNyArMTgwLDcgQEAKIHN0YXRpYyB2b2lkIHBtYWNfdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgc3JjID0gaXJxX21hcFtkLT5pcnFdLmh3aXJxOworCXVuc2lnbmVkIGludCBzcmMgPSBpcnFkX3RvX2h3aXJxKGQpOwogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CiAJX19zZXRfYml0KHNyYywgcHBjX2NhY2hlZF9pcnFfbWFzayk7CkBAIC0xOTMsNyArMTkzLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7Ci0JX19wbWFjX3JldHJpZ2dlcihpcnFfbWFwW2QtPmlycV0uaHdpcnEpOworCV9fcG1hY19yZXRyaWdnZXIoaXJxZF90b19od2lycShkKSk7CiAJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMTsKIH0KQEAgLTIzOSwxNSArMjM5LDEyIEBACiAJdW5zaWduZWQgbG9uZyBiaXRzID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0jaWZkZWYgQ09ORklHX1NNUAotCXZvaWQgcHN1cmdlX3NtcF9tZXNzYWdlX3JlY3Yodm9pZCk7Ci0KLSAgICAgICAJLyogSVBJJ3MgYXJlIGEgaGFjayBvbiB0aGUgcG93ZXJzdXJnZSAtLSBDb3J0ICovCi0gICAgICAgCWlmICggc21wX3Byb2Nlc3Nvcl9pZCgpICE9IDAgKSB7Ci0JCXBzdXJnZV9zbXBfbWVzc2FnZV9yZWN2KCk7Ci0JCXJldHVybiBOT19JUlFfSUdOT1JFOwkvKiBpZ25vcmUsIGFscmVhZHkgaGFuZGxlZCAqLworI2lmZGVmIENPTkZJR19QUENfUE1BQzMyX1BTVVJHRQorCS8qIElQSSdzIGFyZSBhIGhhY2sgb24gdGhlIHBvd2Vyc3VyZ2UgLS0gQ29ydCAqLworCWlmIChzbXBfcHJvY2Vzc29yX2lkKCkgIT0gMCkgeworCQlyZXR1cm4gIHBzdXJnZV9zZWNvbmRhcnlfdmlycTsKICAgICAgICAgfQotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKyNlbmRpZiAvKiBDT05GSUdfUFBDX1BNQUMzMl9QU1VSR0UgKi8KIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIAlmb3IgKGlycSA9IG1heF9yZWFsX2lycXM7IChpcnEgLT0gMzIpID49IDA7ICkgewogCQlpbnQgaSA9IGlycSA+PiA1OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2MjJhODMuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLSNpZm5kZWYgX19QUENfUExBVEZPUk1TX1BNQUNfUElDX0gKLSNkZWZpbmUgX19QUENfUExBVEZPUk1TX1BNQUNfUElDX0gKLQotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotCi1leHRlcm4gc3RydWN0IGlycV9jaGlwIHBtYWNfcGljOwotCi1leHRlcm4gdm9pZCBwbWFjX3BpY19pbml0KHZvaWQpOwotZXh0ZXJuIGludCBwbWFjX2dldF9pcnEodm9pZCk7Ci0KLSNlbmRpZiAvKiBfX1BQQ19QTEFURk9STVNfUE1BQ19QSUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wbWFjLmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BtYWMuaAppbmRleCAyMDQ2OGY0Li44MzI3Y2NlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BtYWMuaAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BtYWMuaApAQCAtMzMsNiArMzMsNyBAQAogZXh0ZXJuIHZvaWQgcG1hY19jaGVja19odF9saW5rKHZvaWQpOwogCiBleHRlcm4gdm9pZCBwbWFjX3NldHVwX3NtcCh2b2lkKTsKK2V4dGVybiBpbnQgcHN1cmdlX3NlY29uZGFyeV92aXJxOwogZXh0ZXJuIHZvaWQgbG93X2NwdV9kaWUodm9pZCkgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKIAogZXh0ZXJuIGludCBwbWFjX252cmFtX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbXAuYwppbmRleCBiYzVmMGRjLi5kYjA5MmQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMKQEAgLTcwLDcgKzcwLDcgQEAKIHN0YXRpYyB1NjQgdGltZWJhc2U7CiBzdGF0aWMgaW50IHRiX3JlcTsKIAotI2lmZGVmIENPTkZJR19QUEMzMgorI2lmZGVmIENPTkZJR19QUENfUE1BQzMyX1BTVVJHRQogCiAvKgogICogUG93ZXJzdXJnZSAob2xkIHBvd2VybWFjIFNNUCkgc3VwcG9ydC4KQEAgLTEyNCw2ICsxMjQsMTAgQEAKIC8qIHdoYXQgc29ydCBvZiBwb3dlcnN1cmdlIGJvYXJkIHdlIGhhdmUgKi8KIHN0YXRpYyBpbnQgcHN1cmdlX3R5cGUgPSBQU1VSR0VfTk9ORTsKIAorLyogaXJxIGZvciBzZWNvbmRhcnkgY3B1cyB0byByZXBvcnQgKi8KK3N0YXRpYyBzdHJ1Y3QgaXJxX2hvc3QgKnBzdXJnZV9ob3N0OworaW50IHBzdXJnZV9zZWNvbmRhcnlfdmlycTsKKwogLyoKICAqIFNldCBhbmQgY2xlYXIgSVBJcyBmb3IgcG93ZXJzdXJnZS4KICAqLwpAQCAtMTU2LDUxICsxNjAsNTIgQEAKIC8qCiAgKiBPbiBwb3dlcnN1cmdlIChvbGQgU01QIHBvd2VybWFjIGFyY2hpdGVjdHVyZSkgd2UgZG9uJ3QgaGF2ZQogICogc2VwYXJhdGUgSVBJcyBmb3Igc2VwYXJhdGUgbWVzc2FnZXMgbGlrZSBvcGVucGljIGRvZXMuICBJbnN0ZWFkCi0gKiB3ZSBoYXZlIGEgYml0bWFwIGZvciBlYWNoIHByb2Nlc3Nvciwgd2hlcmUgYSAxIGJpdCBtZWFucyB0aGF0Ci0gKiB0aGUgY29ycmVzcG9uZGluZyBtZXNzYWdlIGlzIHBlbmRpbmcgZm9yIHRoYXQgcHJvY2Vzc29yLgotICogSWRlYWxseSBlYWNoIGNwdSdzIGVudHJ5IHdvdWxkIGJlIGluIGEgZGlmZmVyZW50IGNhY2hlIGxpbmUuCisgKiB1c2UgdGhlIGdlbmVyaWMgZGVtdXggaGVscGVycwogICogIC0tIHBhdWx1cy4KICAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgcHN1cmdlX3NtcF9tZXNzYWdlW05SX0NQVVNdOwotCi12b2lkIHBzdXJnZV9zbXBfbWVzc2FnZV9yZWN2KHZvaWQpCitzdGF0aWMgaXJxcmV0dXJuX3QgcHN1cmdlX2lwaV9pbnRyKGludCBpcnEsIHZvaWQgKmQpCiB7Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlpbnQgbXNnOworCXBzdXJnZV9jbHJfaXBpKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJc21wX2lwaV9kZW11eCgpOwogCi0JLyogY2xlYXIgaW50ZXJydXB0ICovCi0JcHN1cmdlX2Nscl9pcGkoY3B1KTsKLQotCWlmIChudW1fb25saW5lX2NwdXMoKSA8IDIpCi0JCXJldHVybjsKLQotCS8qIG1ha2Ugc3VyZSB0aGVyZSBpcyBhIG1lc3NhZ2UgdGhlcmUgKi8KLQlmb3IgKG1zZyA9IDA7IG1zZyA8IDQ7IG1zZysrKQotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KG1zZywgJnBzdXJnZV9zbXBfbWVzc2FnZVtjcHVdKSkKLQkJCXNtcF9tZXNzYWdlX3JlY3YobXNnKTsKLX0KLQotaXJxcmV0dXJuX3QgcHN1cmdlX3ByaW1hcnlfaW50cihpbnQgaXJxLCB2b2lkICpkKQotewotCXBzdXJnZV9zbXBfbWVzc2FnZV9yZWN2KCk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgdm9pZCBzbXBfcHN1cmdlX21lc3NhZ2VfcGFzcyhpbnQgdGFyZ2V0LCBpbnQgbXNnKQorc3RhdGljIHZvaWQgc21wX3BzdXJnZV9jYXVzZV9pcGkoaW50IGNwdSwgdW5zaWduZWQgbG9uZyBkYXRhKQogewotCWludCBpOworCXBzdXJnZV9zZXRfaXBpKGNwdSk7Cit9CiAKLQlpZiAobnVtX29ubGluZV9jcHVzKCkgPCAyKQotCQlyZXR1cm47CitzdGF0aWMgaW50IHBzdXJnZV9ob3N0X21hcChzdHJ1Y3QgaXJxX2hvc3QgKmgsIHVuc2lnbmVkIGludCB2aXJxLAorCQkJIGlycV9od19udW1iZXJfdCBodykKK3sKKwlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIodmlycSwgJmR1bW15X2lycV9jaGlwLCBoYW5kbGVfcGVyY3B1X2lycSk7CiAKLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKLQkJaWYgKHRhcmdldCA9PSBNU0dfQUxMCi0JCSAgICB8fCAodGFyZ2V0ID09IE1TR19BTExfQlVUX1NFTEYgJiYgaSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpCi0JCSAgICB8fCB0YXJnZXQgPT0gaSkgewotCQkJc2V0X2JpdChtc2csICZwc3VyZ2Vfc21wX21lc3NhZ2VbaV0pOwotCQkJcHN1cmdlX3NldF9pcGkoaSk7Ci0JCX0KLQl9CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBpcnFfaG9zdF9vcHMgcHN1cmdlX2hvc3Rfb3BzID0geworCS5tYXAJPSBwc3VyZ2VfaG9zdF9tYXAsCit9OworCitzdGF0aWMgaW50IHBzdXJnZV9zZWNvbmRhcnlfaXBpX2luaXQodm9pZCkKK3sKKwlpbnQgcmMgPSAtRU5PTUVNOworCisJcHN1cmdlX2hvc3QgPSBpcnFfYWxsb2NfaG9zdChOVUxMLCBJUlFfSE9TVF9NQVBfTk9NQVAsIDAsCisJCSZwc3VyZ2VfaG9zdF9vcHMsIDApOworCisJaWYgKHBzdXJnZV9ob3N0KQorCQlwc3VyZ2Vfc2Vjb25kYXJ5X3ZpcnEgPSBpcnFfY3JlYXRlX2RpcmVjdF9tYXBwaW5nKHBzdXJnZV9ob3N0KTsKKworCWlmIChwc3VyZ2Vfc2Vjb25kYXJ5X3ZpcnEpCisJCXJjID0gcmVxdWVzdF9pcnEocHN1cmdlX3NlY29uZGFyeV92aXJxLCBwc3VyZ2VfaXBpX2ludHIsCisJCQlJUlFGX0RJU0FCTEVEfElSUUZfUEVSQ1BVLCAiSVBJIiwgTlVMTCk7CisKKwlpZiAocmMpCisJCXByX2VycigiRmFpbGVkIHRvIHNldHVwIHNlY29uZGFyeSBjcHUgSVBJXG4iKTsKKworCXJldHVybiByYzsKIH0KIAogLyoKQEAgLTMxMSw2ICszMTYsOSBAQAogCQluY3B1cyA9IDI7CiAJfQogCisJaWYgKHBzdXJnZV9zZWNvbmRhcnlfaXBpX2luaXQoKSkKKwkJcmV0dXJuIDE7CisKIAlwc3VyZ2Vfc3RhcnQgPSBpb3JlbWFwKFBTVVJHRV9TVEFSVCwgNCk7CiAJcHN1cmdlX3ByaV9pbnRyID0gaW9yZW1hcChQU1VSR0VfUFJJX0lOVFIsIDQpOwogCkBAIC0zMjksNyArMzM3LDcgQEAKIAlyZXR1cm4gbmNwdXM7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBzbXBfcHN1cmdlX2tpY2tfY3B1KGludCBucikKK3N0YXRpYyBpbnQgX19pbml0IHNtcF9wc3VyZ2Vfa2lja19jcHUoaW50IG5yKQogewogCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBfX3BhKF9fc2Vjb25kYXJ5X3N0YXJ0X3BtYWNfMCkgKyBuciAqIDg7CiAJdW5zaWduZWQgbG9uZyBhLCBmbGFnczsKQEAgLTM5NCwxMSArNDAyLDEzIEBACiAJCXBzdXJnZV9zZXRfaXBpKDEpOwogCiAJaWYgKHBwY19tZC5wcm9ncmVzcykgcHBjX21kLnByb2dyZXNzKCJzbXBfcHN1cmdlX2tpY2tfY3B1IC0gZG9uZSIsIDB4MzU0KTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBwc3VyZ2VfaXJxYWN0aW9uID0gewotCS5oYW5kbGVyID0gcHN1cmdlX3ByaW1hcnlfaW50ciwKLQkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVELAorCS5oYW5kbGVyID0gcHN1cmdlX2lwaV9pbnRyLAorCS5mbGFncyA9IElSUUZfRElTQUJMRUR8SVJRRl9QRVJDUFUsCiAJLm5hbWUgPSAicHJpbWFyeSBJUEkiLAogfTsKIApAQCAtNDM3LDE0ICs0NDcsMTUgQEAKIAogLyogUG93ZXJTdXJnZS1zdHlsZSBNYWNzICovCiBzdHJ1Y3Qgc21wX29wc190IHBzdXJnZV9zbXBfb3BzID0gewotCS5tZXNzYWdlX3Bhc3MJPSBzbXBfcHN1cmdlX21lc3NhZ2VfcGFzcywKKwkubWVzc2FnZV9wYXNzCT0gc21wX211eGVkX2lwaV9tZXNzYWdlX3Bhc3MsCisJLmNhdXNlX2lwaQk9IHNtcF9wc3VyZ2VfY2F1c2VfaXBpLAogCS5wcm9iZQkJPSBzbXBfcHN1cmdlX3Byb2JlLAogCS5raWNrX2NwdQk9IHNtcF9wc3VyZ2Vfa2lja19jcHUsCiAJLnNldHVwX2NwdQk9IHNtcF9wc3VyZ2Vfc2V0dXBfY3B1LAogCS5naXZlX3RpbWViYXNlCT0gc21wX3BzdXJnZV9naXZlX3RpbWViYXNlLAogCS50YWtlX3RpbWViYXNlCT0gc21wX3BzdXJnZV90YWtlX3RpbWViYXNlLAogfTsKLSNlbmRpZiAvKiBDT05GSUdfUFBDMzIgLSBhY3R1YWxseSBwb3dlcnN1cmdlIHN1cHBvcnQgKi8KKyNlbmRpZiAvKiBDT05GSUdfUFBDX1BNQUMzMl9QU1VSR0UgKi8KIAogLyoKICAqIENvcmUgOTkgYW5kIGxhdGVyIHN1cHBvcnQKQEAgLTc5MSwxNCArODAyLDE0IEBACiAJcmV0dXJuIG5jcHVzOwogfQogCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgc21wX2NvcmU5OV9raWNrX2NwdShpbnQgbnIpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbXBfY29yZTk5X2tpY2tfY3B1KGludCBucikKIHsKIAl1bnNpZ25lZCBpbnQgc2F2ZV92ZWN0b3I7CiAJdW5zaWduZWQgbG9uZyB0YXJnZXQsIGZsYWdzOwogCXVuc2lnbmVkIGludCAqdmVjdG9yID0gKHVuc2lnbmVkIGludCAqKShQQUdFX09GRlNFVCsweDEwMCk7CiAKIAlpZiAobnIgPCAwIHx8IG5yID4gMykKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT0VOVDsKIAogCWlmIChwcGNfbWQucHJvZ3Jlc3MpCiAJCXBwY19tZC5wcm9ncmVzcygic21wX2NvcmU5OV9raWNrX2NwdSIsIDB4MzQ2KTsKQEAgLTgzMCw2ICs4NDEsOCBAQAogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCWlmIChwcGNfbWQucHJvZ3Jlc3MpIHBwY19tZC5wcm9ncmVzcygic21wX2NvcmU5OV9raWNrX2NwdSBkb25lIiwgMHgzNDcpOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBzbXBfY29yZTk5X3NldHVwX2NwdShpbnQgY3B1X25yKQpAQCAtMTAwMiw3ICsxMDE1LDcgQEAKIAkJb2Zfbm9kZV9wdXQobnApOwogCQlzbXBfb3BzID0gJmNvcmU5OV9zbXBfb3BzOwogCX0KLSNpZmRlZiBDT05GSUdfUFBDMzIKKyNpZmRlZiBDT05GSUdfUFBDX1BNQUMzMl9QU1VSR0UKIAllbHNlIHsKIAkJLyogV2UgaGF2ZSB0byBzZXQgYml0cyBpbiBjcHVfcG9zc2libGVfbWFzayBoZXJlIHNpbmNlIHRoZQogCQkgKiBzZWNvbmRhcnkgQ1BVKHMpIGFyZW4ndCBpbiB0aGUgZGV2aWNlIHRyZWUuIFZhcmlvdXMKQEAgLTEwMTUsNyArMTAyOCw3IEBACiAJCQlzZXRfY3B1X3Bvc3NpYmxlKGNwdSwgdHJ1ZSk7CiAJCXNtcF9vcHMgPSAmcHN1cmdlX3NtcF9vcHM7CiAJfQotI2VuZGlmIC8qIENPTkZJR19QUEMzMiAqLworI2VuZGlmIC8qIENPTkZJR19QUENfUE1BQzMyX1BTVVJHRSAqLwogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAJcHBjX21kLmNwdV9kaWUgPSBwbWFjX2NwdV9kaWU7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9pbnRlcnJ1cHQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL2ludGVycnVwdC5jCmluZGV4IGYyZjY0MTMuLjYwMGVkMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL2ludGVycnVwdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL2ludGVycnVwdC5jCkBAIC0xOTcsNyArMTk3LDcgQEAKIAlyZXN1bHQgPSBpcnFfc2V0X2NoaXBfZGF0YSgqdmlycSwgcGQpOwogCiAJaWYgKHJlc3VsdCkgewotCQlwcl9kZWJ1ZygiJXM6JWQ6IHNldF9pcnFfY2hpcF9kYXRhIGZhaWxlZFxuIiwKKwkJcHJfZGVidWcoIiVzOiVkOiBpcnFfc2V0X2NoaXBfZGF0YSBmYWlsZWRcbiIsCiAJCQlfX2Z1bmNfXywgX19MSU5FX18pOwogCQlnb3RvIGZhaWxfc2V0OwogCX0KQEAgLTY1OSwxMSArNjU5LDYgQEAKIHN0YXRpYyB2b2lkIGR1bXBfYm1wKHN0cnVjdCBwczNfcHJpdmF0ZSogcGQpIHt9OwogI2VuZGlmIC8qIGRlZmluZWQoREVCVUcpICovCiAKLXN0YXRpYyB2b2lkIHBzM19ob3N0X3VubWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEpCi17Ci0JaXJxX3NldF9jaGlwX2RhdGEodmlycSwgTlVMTCk7Ci19Ci0KIHN0YXRpYyBpbnQgcHMzX2hvc3RfbWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCiAJaXJxX2h3X251bWJlcl90IGh3aXJxKQogewpAQCAtNjgzLDcgKzY3OCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2hvc3Rfb3BzIHBzM19ob3N0X29wcyA9IHsKIAkubWFwID0gcHMzX2hvc3RfbWFwLAotCS51bm1hcCA9IHBzM19ob3N0X3VubWFwLAogCS5tYXRjaCA9IHBzM19ob3N0X21hdGNoLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc21wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zbXAuYwppbmRleCA1MWZmZGU0Li40YzQ0Nzk0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zbXAuYwpAQCAtMzksNyArMzksNyBAQAogI2RlZmluZSBNU0dfQ09VTlQgNAogc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGludCBbTVNHX0NPVU5UXSwgcHMzX2lwaV92aXJxcyk7CiAKLXN0YXRpYyB2b2lkIGRvX21lc3NhZ2VfcGFzcyhpbnQgdGFyZ2V0LCBpbnQgbXNnKQorc3RhdGljIHZvaWQgcHMzX3NtcF9tZXNzYWdlX3Bhc3MoaW50IGNwdSwgaW50IG1zZykKIHsKIAlpbnQgcmVzdWx0OwogCXVuc2lnbmVkIGludCB2aXJxOwpAQCAtNDksMjggKzQ5LDEyIEBACiAJCXJldHVybjsKIAl9CiAKLQl2aXJxID0gcGVyX2NwdShwczNfaXBpX3ZpcnFzLCB0YXJnZXQpW21zZ107CisJdmlycSA9IHBlcl9jcHUocHMzX2lwaV92aXJxcywgY3B1KVttc2ddOwogCXJlc3VsdCA9IHBzM19zZW5kX2V2ZW50X2xvY2FsbHkodmlycSk7CiAKIAlpZiAocmVzdWx0KQogCQlEQkcoIiVzOiVkOiBwczNfc2VuZF9ldmVudF9sb2NhbGx5KCVkLCAlZCkgZmFpbGVkIgotCQkJIiAoJWQpXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIHRhcmdldCwgbXNnLCByZXN1bHQpOwotfQotCi1zdGF0aWMgdm9pZCBwczNfc21wX21lc3NhZ2VfcGFzcyhpbnQgdGFyZ2V0LCBpbnQgbXNnKQotewotCWludCBjcHU7Ci0KLQlpZiAodGFyZ2V0IDwgTlJfQ1BVUykKLQkJZG9fbWVzc2FnZV9wYXNzKHRhcmdldCwgbXNnKTsKLQllbHNlIGlmICh0YXJnZXQgPT0gTVNHX0FMTF9CVVRfU0VMRikgewotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJCWlmIChjcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQotCQkJCWRvX21lc3NhZ2VfcGFzcyhjcHUsIG1zZyk7Ci0JfSBlbHNlIHsKLQkJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCi0JCQlkb19tZXNzYWdlX3Bhc3MoY3B1LCBtc2cpOwotCX0KKwkJCSIgKCVkKVxuIiwgX19mdW5jX18sIF9fTElORV9fLCBjcHUsIG1zZywgcmVzdWx0KTsKIH0KIAogc3RhdGljIGludCBwczNfc21wX3Byb2JlKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zcHUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3NwdS5jCmluZGV4IDM5YTQ3MmUuLjM3NWE5ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3NwdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3NwdS5jCkBAIC0xOTcsNyArMTk3LDcgQEAKICAqIFRoZSBjdXJyZW50IEhWIHJlcXVpcmVzIHRoZSBzcHUgc2hhZG93IHJlZ3MgdG8gYmUgbWFwcGVkIHdpdGggdGhlCiAgKiBQVEUgcGFnZSBwcm90ZWN0aW9uIGJpdHMgc2V0IGFzIHJlYWQtb25seSAoUFA9MykuICBUaGlzIGltcGxlbWVudGF0aW9uCiAgKiB1c2VzIHRoZSBsb3cgbGV2ZWwgX19pb3JlbWFwKCkgdG8gYnlwYXNzIHRoZSBwYWdlIHByb3RlY3Rpb24gc2V0dGluZ3MKLSAqIGluZm9yY2VkIGJ5IGlvcmVtYXBfZmxhZ3MoKSB0byBnZXQgdGhlIG5lZWRlZCBQVEUgYml0cyBzZXQgZm9yIHRoZQorICogaW5mb3JjZWQgYnkgaW9yZW1hcF9wcm90KCkgdG8gZ2V0IHRoZSBuZWVkZWQgUFRFIGJpdHMgc2V0IGZvciB0aGUKICAqIHNoYWRvdyByZWdzLgogICovCiAKQEAgLTIxNCw3ICsyMTQsNyBAQAogCQlnb3RvIGZhaWxfaW9yZW1hcDsKIAl9CiAKLQlzcHUtPmxvY2FsX3N0b3JlID0gKF9fZm9yY2Ugdm9pZCAqKWlvcmVtYXBfZmxhZ3Moc3B1LT5sb2NhbF9zdG9yZV9waHlzLAorCXNwdS0+bG9jYWxfc3RvcmUgPSAoX19mb3JjZSB2b2lkICopaW9yZW1hcF9wcm90KHNwdS0+bG9jYWxfc3RvcmVfcGh5cywKIAkJTFNfU0laRSwgX1BBR0VfTk9fQ0FDSEUpOwogCiAJaWYgKCFzcHUtPmxvY2FsX3N0b3JlKSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnCmluZGV4IDViM2RhNGIuLjcxYWY0YzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnCkBAIC0zLDcgKzMsMTAgQEAKIAlib29sICJJQk0gcFNlcmllcyAmIG5ldyAoUE9XRVI1LWJhc2VkKSBpU2VyaWVzIgogCXNlbGVjdCBNUElDCiAJc2VsZWN0IFBDSV9NU0kKLQlzZWxlY3QgWElDUworCXNlbGVjdCBQUENfWElDUworCXNlbGVjdCBQUENfSUNQX05BVElWRQorCXNlbGVjdCBQUENfSUNQX0hWCisJc2VsZWN0IFBQQ19JQ1NfUlRBUwogCXNlbGVjdCBQUENfSTgyNTkKIAlzZWxlY3QgUFBDX1JUQVMKIAlzZWxlY3QgUFBDX1JUQVNfREFFTU9OCkBAIC00Nyw2ICs1MCwyNCBAQAogCXRyaXN0YXRlICJTY2FubG9nIGR1bXAgaW50ZXJmYWNlIgogCWRlcGVuZHMgb24gUlRBU19QUk9DICYmIFBQQ19QU0VSSUVTCiAKK2NvbmZpZyBJT19FVkVOVF9JUlEKKwlib29sICJJTyBFdmVudCBJbnRlcnJ1cHQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBQQ19QU0VSSUVTCisJZGVmYXVsdCB5CisJaGVscAorCSAgU2VsZWN0IHRoaXMgb3B0aW9uLCBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgSU8gRXZlbnQKKwkgIGludGVycnVwdHMuIElPIGV2ZW50IGludGVycnVwdCBpcyBhIG1lY2hhbmlzbSBwcm92aWRlZCBieSBSVEFTCisJICB0byByZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgaGFyZHdhcmUgZXJyb3IgYW5kIG5vbi1lcnJvciBldmVudHMKKwkgIHdoaWNoIG1heSBuZWVkIE9TIGF0dGVudGlvbi4gUlRBUyByZXR1cm5zIGV2ZW50cyBmb3IgbXVsdGlwbGUKKwkgIGV2ZW50IHR5cGVzIGFuZCBzY29wZXMuIERldmljZSBkcml2ZXJzIGNhbiByZWdpc3RlciB0aGVpciBoYW5kbGVycworCSAgdG8gcmVjZWl2ZSBldmVudHMuCisKKwkgIFRoaXMgb3B0aW9uIHdpbGwgb25seSBlbmFibGUgdGhlIElPIGV2ZW50IHBsYXRmb3JtIGNvZGUuIFlvdQorCSAgd2lsbCBzdGlsbCBuZWVkIHRvIGVuYWJsZSBvciBjb21waWxlIHRoZSBhY3R1YWwgZHJpdmVycworCSAgdGhhdCB1c2UgdGhpcyBpbmZyYXN0cnV0dXJlIHRvIGhhbmRsZSBJTyBldmVudCBpbnRlcnJ1cHRzLgorCisJICBTYXkgWSBpZiB5b3UgYXJlIHVuc3VyZS4KKwogY29uZmlnIExQQVJDRkcKIAlib29sICJMUEFSIENvbmZpZ3VyYXRpb24gRGF0YSIKIAlkZXBlbmRzIG9uIFBQQ19QU0VSSUVTIHx8IFBQQ19JU0VSSUVTCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGUKaW5kZXggZmM1MjM3OC4uMzU1NmU0MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZQpAQCAtNSw3ICs1LDYgQEAKIAkJCSAgIHNldHVwLm8gaW9tbXUubyBldmVudF9zb3VyY2VzLm8gcmFzLm8gXAogCQkJICAgZmlybXdhcmUubyBwb3dlci5vIGRscGFyLm8gbW9iaWxpdHkubwogb2JqLSQoQ09ORklHX1NNUCkJKz0gc21wLm8KLW9iai0kKENPTkZJR19YSUNTKQkrPSB4aWNzLm8KIG9iai0kKENPTkZJR19TQ0FOTE9HKQkrPSBzY2FubG9nLm8KIG9iai0kKENPTkZJR19FRUgpCSs9IGVlaC5vIGVlaF9jYWNoZS5vIGVlaF9kcml2ZXIubyBlZWhfZXZlbnQubyBlZWhfc3lzZnMubwogb2JqLSQoQ09ORklHX0tFWEVDKQkrPSBrZXhlYy5vCkBAIC0yMiw2ICsyMSw3IEBACiBvYmotJChDT05GSUdfUEhZUF9EVU1QKQkJKz0gcGh5cF9kdW1wLm8KIG9iai0kKENPTkZJR19DTU0pCQkrPSBjbW0ubwogb2JqLSQoQ09ORklHX0RUTCkJCSs9IGR0bC5vCitvYmotJChDT05GSUdfSU9fRVZFTlRfSVJRKQkrPSBpb19ldmVudF9pcnEubwogCiBpZmVxICgkKENPTkZJR19QUENfUFNFUklFUykseSkKIG9iai0kKENPTkZJR19TVVNQRU5EKQkJKz0gc3VzcGVuZC5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZHRsLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZHRsLmMKaW5kZXggYzM3MWJjMC4uZTkxOTAwNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2R0bC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kdGwuYwpAQCAtNTIsMTAgKzUyLDEwIEBACiAKIAogLyoKLSAqIFNpemUgb2YgcGVyLWNwdSBsb2cgYnVmZmVycy4gRGVmYXVsdCBpcyBqdXN0IHVuZGVyIDE2IHBhZ2VzIHdvcnRoLgorICogU2l6ZSBvZiBwZXItY3B1IGxvZyBidWZmZXJzLiBGaXJtd2FyZSByZXF1aXJlcyB0aGF0IHRoZSBidWZmZXIgZG9lcworICogbm90IGNyb3NzIGEgNGsgYm91bmRhcnkuCiAgKi8KLXN0YXRpYyBpbnQgZHRsX2J1Zl9lbnRyaWVzID0gKDE2ICogODUpOwotCitzdGF0aWMgaW50IGR0bF9idWZfZW50cmllcyA9IE5fRElTUEFUQ0hfTE9HOwogCiAjaWZkZWYgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcKIHN0cnVjdCBkdGxfcmluZyB7CkBAIC0xNTEsNyArMTUxLDcgQEAKIAogCS8qIFJlZ2lzdGVyIG91ciBkdGwgYnVmZmVyIHdpdGggdGhlIGh5cGVydmlzb3IuIFRoZSBIViBleHBlY3RzIHRoZQogCSAqIGJ1ZmZlciBzaXplIHRvIGJlIHBhc3NlZCBpbiB0aGUgc2Vjb25kIHdvcmQgb2YgdGhlIGJ1ZmZlciAqLwotCSgodTMyICopZHRsLT5idWYpWzFdID0gZHRsLT5idWZfZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgZHRsX2VudHJ5KTsKKwkoKHUzMiAqKWR0bC0+YnVmKVsxXSA9IERJU1BBVENIX0xPR19CWVRFUzsKIAogCWh3Y3B1ID0gZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChkdGwtPmNwdSk7CiAJYWRkciA9IF9fcGEoZHRsLT5idWYpOwpAQCAtMTk2LDEzICsxOTYsMTUgQEAKIAlsb25nIGludCByYzsKIAlzdHJ1Y3QgZHRsX2VudHJ5ICpidWYgPSBOVUxMOwogCisJaWYgKCFkdGxfY2FjaGUpCisJCXJldHVybiAtRU5PTUVNOworCiAJLyogb25seSBhbGxvdyBvbmUgcmVhZGVyICovCiAJaWYgKGR0bC0+YnVmKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJbl9lbnRyaWVzID0gZHRsX2J1Zl9lbnRyaWVzOwotCWJ1ZiA9IGttYWxsb2Nfbm9kZShuX2VudHJpZXMgKiBzaXplb2Yoc3RydWN0IGR0bF9lbnRyeSksCi0JCQlHRlBfS0VSTkVMLCBjcHVfdG9fbm9kZShkdGwtPmNwdSkpOworCWJ1ZiA9IGttZW1fY2FjaGVfYWxsb2Nfbm9kZShkdGxfY2FjaGUsIEdGUF9LRVJORUwsIGNwdV90b19ub2RlKGR0bC0+Y3B1KSk7CiAJaWYgKCFidWYpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGJ1ZmZlciBhbGxvYyBmYWlsZWQgZm9yIGNwdSAlZFxuIiwKIAkJCQlfX2Z1bmNfXywgZHRsLT5jcHUpOwpAQCAtMjIzLDcgKzIyNSw3IEBACiAJc3Bpbl91bmxvY2soJmR0bC0+bG9jayk7CiAKIAlpZiAocmMpCi0JCWtmcmVlKGJ1Zik7CisJCWttZW1fY2FjaGVfZnJlZShkdGxfY2FjaGUsIGJ1Zik7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0yMzEsNyArMjMzLDcgQEAKIHsKIAlzcGluX2xvY2soJmR0bC0+bG9jayk7CiAJZHRsX3N0b3AoZHRsKTsKLQlrZnJlZShkdGwtPmJ1Zik7CisJa21lbV9jYWNoZV9mcmVlKGR0bF9jYWNoZSwgZHRsLT5idWYpOwogCWR0bC0+YnVmID0gTlVMTDsKIAlkdGwtPmJ1Zl9lbnRyaWVzID0gMDsKIAlzcGluX3VubG9jaygmZHRsLT5sb2NrKTsKQEAgLTM2NSw3ICszNjcsNyBAQAogCiAJZXZlbnRfbWFza19maWxlID0gZGVidWdmc19jcmVhdGVfeDgoImR0bF9ldmVudF9tYXNrIiwgMDYwMCwKIAkJCQlkdGxfZGlyLCAmZHRsX2V2ZW50X21hc2spOwotCWJ1Zl9lbnRyaWVzX2ZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV91MzIoImR0bF9idWZfZW50cmllcyIsIDA2MDAsCisJYnVmX2VudHJpZXNfZmlsZSA9IGRlYnVnZnNfY3JlYXRlX3UzMigiZHRsX2J1Zl9lbnRyaWVzIiwgMDQwMCwKIAkJCQlkdGxfZGlyLCAmZHRsX2J1Zl9lbnRyaWVzKTsKIAogCWlmICghZXZlbnRfbWFza19maWxlIHx8ICFidWZfZW50cmllc19maWxlKSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoLmMKaW5kZXggODk2NDkxNy4uNDZiNTVjZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWguYwpAQCAtOTMsNiArOTMsNyBAQAogc3RhdGljIGludCBpYm1fZ2V0X2NvbmZpZ19hZGRyX2luZm87CiBzdGF0aWMgaW50IGlibV9nZXRfY29uZmlnX2FkZHJfaW5mbzI7CiBzdGF0aWMgaW50IGlibV9jb25maWd1cmVfYnJpZGdlOworc3RhdGljIGludCBpYm1fY29uZmlndXJlX3BlOwogCiBpbnQgZWVoX3N1YnN5c3RlbV9lbmFibGVkOwogRVhQT1JUX1NZTUJPTChlZWhfc3Vic3lzdGVtX2VuYWJsZWQpOwpAQCAtMjYxLDYgKzI2Miw4IEBACiAJcGNpX3JlZ3NfYnVmWzBdID0gMDsKIAogCXJ0YXNfcGNpX2VuYWJsZShwZG4sIEVFSF9USEFXX01NSU8pOworCXJ0YXNfY29uZmlndXJlX2JyaWRnZShwZG4pOworCWVlaF9yZXN0b3JlX2JhcnMocGRuKTsKIAlsb2dsZW4gPSBnYXRoZXJfcGNpX2RhdGEocGRuLCBwY2lfcmVnc19idWYsIEVFSF9QQ0lfUkVHU19MT0dfTEVOKTsKIAogCXJ0YXNfc2xvdF9lcnJvcl9kZXRhaWwocGRuLCBzZXZlcml0eSwgcGNpX3JlZ3NfYnVmLCBsb2dsZW4pOwpAQCAtNDQ4LDYgKzQ1MSwzOSBAQAogCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25maXJtX2Vycm9yX2xvY2ssIGZsYWdzKTsKIH0KIAordm9pZCBfX2VlaF9zZXRfcGVfZnJlc2V0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50LCB1bnNpZ25lZCBpbnQgKmZyZXNldCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOworCisJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShwYXJlbnQsIGRuKSB7CisJCWlmIChQQ0lfRE4oZG4pKSB7CisKKwkJCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBQQ0lfRE4oZG4pLT5wY2lkZXY7CisKKwkJCWlmIChkZXYgJiYgZGV2LT5kcml2ZXIpCisJCQkJKmZyZXNldCB8PSBkZXYtPm5lZWRzX2ZyZXNldDsKKworCQkJX19lZWhfc2V0X3BlX2ZyZXNldChkbiwgZnJlc2V0KTsKKwkJfQorCX0KK30KKwordm9pZCBlZWhfc2V0X3BlX2ZyZXNldChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCB1bnNpZ25lZCBpbnQgKmZyZXNldCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCWRuID0gZmluZF9kZXZpY2VfcGUoZG4pOworCisJLyogQmFjayB1cCBvbmUsIHNpbmNlIGNvbmZpZyBhZGRycyBtaWdodCBiZSBzaGFyZWQgKi8KKwlpZiAoIXBjaWJpb3NfZmluZF9wY2lfYnVzKGRuKSAmJiBQQ0lfRE4oZG4tPnBhcmVudCkpCisJCWRuID0gZG4tPnBhcmVudDsKKworCWRldiA9IFBDSV9ETihkbiktPnBjaWRldjsKKwlpZiAoZGV2KQorCQkqZnJlc2V0IHw9IGRldi0+bmVlZHNfZnJlc2V0OworCisJX19lZWhfc2V0X3BlX2ZyZXNldChkbiwgZnJlc2V0KTsKK30KKwogLyoqCiAgKiBlZWhfZG5fY2hlY2tfZmFpbHVyZSAtIGNoZWNrIGlmIGFsbCAxJ3MgZGF0YSBpcyBkdWUgdG8gRUVIIHNsb3QgZnJlZXplCiAgKiBAZG4gZGV2aWNlIG5vZGUKQEAgLTY5MiwxNSArNzI4LDI0IEBACiAJaWYgKHBkbi0+ZWVoX3BlX2NvbmZpZ19hZGRyKQogCQljb25maWdfYWRkciA9IHBkbi0+ZWVoX3BlX2NvbmZpZ19hZGRyOwogCi0JcmMgPSBydGFzX2NhbGwoaWJtX3NldF9zbG90X3Jlc2V0LDQsMSwgTlVMTCwKKwlyYyA9IHJ0YXNfY2FsbChpYm1fc2V0X3Nsb3RfcmVzZXQsIDQsIDEsIE5VTEwsCiAJICAgICAgICAgICAgICAgY29uZmlnX2FkZHIsCiAJICAgICAgICAgICAgICAgQlVJRF9ISShwZG4tPnBoYi0+YnVpZCksCiAJICAgICAgICAgICAgICAgQlVJRF9MTyhwZG4tPnBoYi0+YnVpZCksCiAJICAgICAgICAgICAgICAgc3RhdGUpOwotCWlmIChyYykKLQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIkVFSDogVW5hYmxlIHRvIHJlc2V0IHRoZSBmYWlsZWQgc2xvdCwiCi0JCSAgICAgICAgIiAoJWQpICNSU1Q9JWQgZG49JXNcbiIsCi0JCSAgICAgICAgcmMsIHN0YXRlLCBwZG4tPm5vZGUtPmZ1bGxfbmFtZSk7CisKKwkvKiBGdW5kYW1lbnRhbC1yZXNldCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgUEUsIHRyeSBob3QtcmVzZXQgKi8KKwlpZiAocmMgPT0gLTggJiYgc3RhdGUgPT0gMykgeworCQlyYyA9IHJ0YXNfY2FsbChpYm1fc2V0X3Nsb3RfcmVzZXQsIDQsIDEsIE5VTEwsCisJCQkgICAgICAgY29uZmlnX2FkZHIsCisJCQkgICAgICAgQlVJRF9ISShwZG4tPnBoYi0+YnVpZCksCisJCQkgICAgICAgQlVJRF9MTyhwZG4tPnBoYi0+YnVpZCksIDEpOworCQlpZiAocmMpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJIkVFSDogVW5hYmxlIHRvIHJlc2V0IHRoZSBmYWlsZWQgc2xvdCwiCisJCQkJIiAjUlNUPSVkIGRuPSVzXG4iLAorCQkJCXJjLCBwZG4tPm5vZGUtPmZ1bGxfbmFtZSk7CisJfQogfQogCiAvKioKQEAgLTczNiwxOCArNzgxLDIxIEBACiAvKioKICAqIHJ0YXNfc2V0X3Nsb3RfcmVzZXQgLS0gYXNzZXJ0IHRoZSBwY2kgI1JTVCBsaW5lIGZvciAxLzQgc2Vjb25kCiAgKiBAcGRuOiBwY2kgZGV2aWNlIG5vZGUgdG8gYmUgcmVzZXQuCi0gKgotICogIFJldHVybiAwIGlmIHN1Y2Nlc3MsIGVsc2UgYSBub24temVybyB2YWx1ZS4KICAqLwogCiBzdGF0aWMgdm9pZCBfX3J0YXNfc2V0X3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kbiAqcGRuKQogewotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBwZG4tPnBjaWRldjsKKwl1bnNpZ25lZCBpbnQgZnJlc2V0ID0gMDsKIAotCS8qIERldGVybWluZSB0eXBlIG9mIEVFSCByZXNldCByZXF1aXJlZCBieSBkZXZpY2UsCi0JICogZGVmYXVsdCBob3QgcmVzZXQgb3IgZnVuZGFtZW50YWwgcmVzZXQKLQkgKi8KLQlpZiAoZGV2ICYmIGRldi0+bmVlZHNfZnJlc2V0KQorCS8qIERldGVybWluZSB0eXBlIG9mIEVFSCByZXNldCByZXF1aXJlZCBmb3IKKwkgKiBQYXJ0aXRpb25hYmxlIEVuZHBvaW50LCBhIGhvdC1yZXNldCAoMSkKKwkgKiBvciBhIGZ1bmRhbWVudGFsIHJlc2V0ICgzKS4KKwkgKiBBIGZ1bmRhbWVudGFsIHJlc2V0IHJlcXVpcmVkIGJ5IGFueSBkZXZpY2UgdW5kZXIKKwkgKiBQYXJ0aXRpb25hYmxlIEVuZHBvaW50IHRydW1wcyBob3QtcmVzZXQuCisgIAkgKi8KKwllZWhfc2V0X3BlX2ZyZXNldChwZG4tPm5vZGUsICZmcmVzZXQpOworCisJaWYgKGZyZXNldCkKIAkJcnRhc19wY2lfc2xvdF9yZXNldChwZG4sIDMpOwogCWVsc2UKIAkJcnRhc19wY2lfc2xvdF9yZXNldChwZG4sIDEpOwpAQCAtODk1LDEzICs5NDMsMjAgQEAKIHsKIAlpbnQgY29uZmlnX2FkZHI7CiAJaW50IHJjOworCWludCB0b2tlbjsKIAogCS8qIFVzZSBQRSBjb25maWd1cmF0aW9uIGFkZHJlc3MsIGlmIHByZXNlbnQgKi8KIAljb25maWdfYWRkciA9IHBkbi0+ZWVoX2NvbmZpZ19hZGRyOwogCWlmIChwZG4tPmVlaF9wZV9jb25maWdfYWRkcikKIAkJY29uZmlnX2FkZHIgPSBwZG4tPmVlaF9wZV9jb25maWdfYWRkcjsKIAotCXJjID0gcnRhc19jYWxsKGlibV9jb25maWd1cmVfYnJpZGdlLDMsMSwgTlVMTCwKKwkvKiBVc2UgbmV3IGNvbmZpZ3VyZS1wZSBmdW5jdGlvbiwgaWYgc3VwcG9ydGVkICovCisJaWYgKGlibV9jb25maWd1cmVfcGUgIT0gUlRBU19VTktOT1dOX1NFUlZJQ0UpCisJCXRva2VuID0gaWJtX2NvbmZpZ3VyZV9wZTsKKwllbHNlCisJCXRva2VuID0gaWJtX2NvbmZpZ3VyZV9icmlkZ2U7CisKKwlyYyA9IHJ0YXNfY2FsbCh0b2tlbiwgMywgMSwgTlVMTCwKIAkgICAgICAgICAgICAgICBjb25maWdfYWRkciwKIAkgICAgICAgICAgICAgICBCVUlEX0hJKHBkbi0+cGhiLT5idWlkKSwKIAkgICAgICAgICAgICAgICBCVUlEX0xPKHBkbi0+cGhiLT5idWlkKSk7CkBAIC0xMDc3LDYgKzExMzIsNyBAQAogCWlibV9nZXRfY29uZmlnX2FkZHJfaW5mbyA9IHJ0YXNfdG9rZW4oImlibSxnZXQtY29uZmlnLWFkZHItaW5mbyIpOwogCWlibV9nZXRfY29uZmlnX2FkZHJfaW5mbzIgPSBydGFzX3Rva2VuKCJpYm0sZ2V0LWNvbmZpZy1hZGRyLWluZm8yIik7CiAJaWJtX2NvbmZpZ3VyZV9icmlkZ2UgPSBydGFzX3Rva2VuICgiaWJtLGNvbmZpZ3VyZS1icmlkZ2UiKTsKKwlpYm1fY29uZmlndXJlX3BlID0gcnRhc190b2tlbigiaWJtLGNvbmZpZ3VyZS1wZSIpOwogCiAJaWYgKGlibV9zZXRfZWVoX29wdGlvbiA9PSBSVEFTX1VOS05PV05fU0VSVklDRSkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9kcml2ZXIuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMKaW5kZXggYjhkNzBmNS4uMWI2Y2IxMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9kcml2ZXIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2RyaXZlci5jCkBAIC0zMjgsNyArMzI4LDcgQEAKIAlzdHJ1Y3QgcGNpX2J1cyAqZnJvemVuX2J1czsKIAlpbnQgcmMgPSAwOwogCWVudW0gcGNpX2Vyc19yZXN1bHQgcmVzdWx0ID0gUENJX0VSU19SRVNVTFRfTk9ORTsKLQljb25zdCBjaGFyICpsb2NhdGlvbiwgKnBjaV9zdHIsICpkcnZfc3RyOworCWNvbnN0IGNoYXIgKmxvY2F0aW9uLCAqcGNpX3N0ciwgKmRydl9zdHIsICpidXNfcGNpX3N0ciwgKmJ1c19kcnZfc3RyOwogCiAJZnJvemVuX2RuID0gZmluZF9kZXZpY2VfcGUoZXZlbnQtPmRuKTsKIAlpZiAoIWZyb3plbl9kbikgewpAQCAtMzY0LDEzICszNjQsOCBAQAogCWZyb3plbl9wZG4gPSBQQ0lfRE4oZnJvemVuX2RuKTsKIAlmcm96ZW5fcGRuLT5lZWhfZnJlZXplX2NvdW50Kys7CiAKLQlpZiAoZnJvemVuX3Bkbi0+cGNpZGV2KSB7Ci0JCXBjaV9zdHIgPSBwY2lfbmFtZSAoZnJvemVuX3Bkbi0+cGNpZGV2KTsKLQkJZHJ2X3N0ciA9IHBjaWRfbmFtZSAoZnJvemVuX3Bkbi0+cGNpZGV2KTsKLQl9IGVsc2UgewotCQlwY2lfc3RyID0gZWVoX3BjaV9uYW1lKGV2ZW50LT5kZXYpOwotCQlkcnZfc3RyID0gcGNpZF9uYW1lIChldmVudC0+ZGV2KTsKLQl9CisJcGNpX3N0ciA9IGVlaF9wY2lfbmFtZShldmVudC0+ZGV2KTsKKwlkcnZfc3RyID0gcGNpZF9uYW1lKGV2ZW50LT5kZXYpOwogCQogCWlmIChmcm96ZW5fcGRuLT5lZWhfZnJlZXplX2NvdW50ID4gRUVIX01BWF9BTExPV0VEX0ZSRUVaRVMpCiAJCWdvdG8gZXhjZXNzX2ZhaWx1cmVzOwpAQCAtMzc4LDggKzM3MywxNyBAQAogCXByaW50ayhLRVJOX1dBUk5JTkcKIAkgICAiRUVIOiBUaGlzIFBDSSBkZXZpY2UgaGFzIGZhaWxlZCAlZCB0aW1lcyBpbiB0aGUgbGFzdCBob3VyOlxuIiwKIAkJZnJvemVuX3Bkbi0+ZWVoX2ZyZWV6ZV9jb3VudCk7CisKKwlpZiAoZnJvemVuX3Bkbi0+cGNpZGV2KSB7CisJCWJ1c19wY2lfc3RyID0gcGNpX25hbWUoZnJvemVuX3Bkbi0+cGNpZGV2KTsKKwkJYnVzX2Rydl9zdHIgPSBwY2lkX25hbWUoZnJvemVuX3Bkbi0+cGNpZGV2KTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJIkVFSDogQnVzIGxvY2F0aW9uPSVzIGRyaXZlcj0lcyBwY2kgYWRkcj0lc1xuIiwKKwkJCWxvY2F0aW9uLCBidXNfZHJ2X3N0ciwgYnVzX3BjaV9zdHIpOworCX0KKwogCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJIkVFSDogbG9jYXRpb249JXMgZHJpdmVyPSVzIHBjaSBhZGRyPSVzXG4iLAorCQkiRUVIOiBEZXZpY2UgbG9jYXRpb249JXMgZHJpdmVyPSVzIHBjaSBhZGRyPSVzXG4iLAogCQlsb2NhdGlvbiwgZHJ2X3N0ciwgcGNpX3N0cik7CiAKIAkvKiBXYWxrIHRoZSB2YXJpb3VzIGRldmljZSBkcml2ZXJzIGF0dGFjaGVkIHRvIHRoaXMgc2xvdCB0aHJvdWdoCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1jcHUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLWNwdS5jCmluZGV4IGVmOGM0NTQuLjQ2ZjEzYTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLWNwdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLWNwdS5jCkBAIC0xOSw2ICsxOSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtMjgsNyArMjksNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAjaW5jbHVkZSA8YXNtL3Zkc29fZGF0YXBhZ2UuaD4KICNpbmNsdWRlIDxhc20vcFNlcmllc19yZWNvbmZpZy5oPgotI2luY2x1ZGUgInhpY3MuaCIKKyNpbmNsdWRlIDxhc20veGljcy5oPgogI2luY2x1ZGUgInBscGFyX3dyYXBwZXJzLmgiCiAjaW5jbHVkZSAib2ZmbGluZV9zdGF0ZXMuaCIKIApAQCAtMjgwLDcgKzI4MSw3IEBACiAJfQogCiAJZm9yX2VhY2hfY3B1KGNwdSwgdG1wKSB7Ci0JCUJVR19PTihjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY3B1X3ByZXNlbnRfbWFzaykpOworCQlCVUdfT04oY3B1X3ByZXNlbnQoY3B1KSk7CiAJCXNldF9jcHVfcHJlc2VudChjcHUsIHRydWUpOwogCQlzZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGNwdSwgKmludHNlcnYrKyk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvX2V2ZW50X2lycS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvX2V2ZW50X2lycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MjllNjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaW9fZXZlbnRfaXJxLmMKQEAgLTAsMCArMSwyMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCAyMDExIE1hcmsgTmVsc29uIGFuZCBUc2VuZy1IdWkgKEZyYW5rKSBMaW4sIElCTSBDb3Jwb3JhdGlvbgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorCisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vcnRhcy5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaW9fZXZlbnRfaXJxLmg+CisKKyNpbmNsdWRlICJwc2VyaWVzLmgiCisKKy8qCisgKiBJTyBldmVudCBpbnRlcnJ1cHQgaXMgYSBtZWNoYW5pc20gcHJvdmlkZWQgYnkgUlRBUyB0byByZXR1cm4KKyAqIGluZm9ybWF0aW9uIGFib3V0IGhhcmR3YXJlIGVycm9yIGFuZCBub24tZXJyb3IgZXZlbnRzLiBEZXZpY2UKKyAqIGRyaXZlcnMgY2FuIHJlZ2lzdGVyIHRoZWlyIGV2ZW50IGhhbmRsZXJzIHRvIHJlY2VpdmUgZXZlbnRzLgorICogRGV2aWNlIGRyaXZlcnMgYXJlIGV4cGVjdGVkIHRvIHVzZSBhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoKQorICogYW5kIGF0b21pY19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCkgdG8gcmVnaXN0ZXIgYW5kIHVucmVnaXN0ZXIKKyAqIHRoZWlyIGV2ZW50IGhhbmRsZXJzLiBTaW5jZSBtdWx0aXBsZSBJTyBldmVudCB0eXBlcyBhbmQgc2NvcGVzCisgKiBzaGFyZSBhbiBJTyBldmVudCBpbnRlcnJ1cHQsIHRoZSBldmVudCBoYW5kbGVycyBhcmUgY2FsbGVkIG9uZQorICogYnkgb25lIHVudGlsIHRoZSBJTyBldmVudCBpcyBjbGFpbWVkIGJ5IG9uZSBvZiB0aGUgaGFuZGxlcnMuCisgKiBUaGUgZXZlbnQgaGFuZGxlcnMgYXJlIGV4cGVjdGVkIHRvIHJldHVybiBOT1RJRllfT0sgaWYgdGhlCisgKiBldmVudCBpcyBoYW5kbGVkIGJ5IHRoZSBldmVudCBoYW5kbGVyIG9yIE5PVElGWV9ET05FIGlmIHRoZQorICogZXZlbnQgZG9lcyBub3QgYmVsb25nIHRvIHRoZSBoYW5kbGVyLgorICoKKyAqIFVzYWdlOgorICoKKyAqIE5vdGlmaWVyIGZ1bmN0aW9uOgorICogI2luY2x1ZGUgPGFzbS9pb19ldmVudF9pcnEuaD4KKyAqIGludCBldmVudF9oYW5kbGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKSB7CisgKiAJcCA9IChzdHJ1Y3QgcHNlcmllc19pb19ldmVudF9zZWN0X2RhdGEgKikgZGF0YTsKKyAqIAlpZiAoISBpc19teV9ldmVudChwLT5zY29wZSwgcC0+ZXZlbnRfdHlwZSkpIHJldHVybiBOT1RJRllfRE9ORTsKKyAqIAkJOgorICogCQk6CisgKiAJcmV0dXJuIE5PVElGWV9PSzsKKyAqIH0KKyAqIHN0cnVjdCBub3RpZmllcl9ibG9jayBldmVudF9uYiA9IHsKKyAqIAkubm90aWZpZXJfY2FsbCA9IGV2ZW50X2hhbmRsZXIsCisgKiB9CisgKgorICogUmVnaXN0cmF0aW9uOgorICogYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwc2VyaWVzX2lvZWlfbm90aWZpZXJfbGlzdCwgJmV2ZW50X25iKTsKKyAqCisgKiBVbnJlZ2lzdHJhdGlvbjoKKyAqIGF0b21pY19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZwc2VyaWVzX2lvZWlfbm90aWZpZXJfbGlzdCwgJmV2ZW50X25iKTsKKyAqLworCitBVE9NSUNfTk9USUZJRVJfSEVBRChwc2VyaWVzX2lvZWlfbm90aWZpZXJfbGlzdCk7CitFWFBPUlRfU1lNQk9MX0dQTChwc2VyaWVzX2lvZWlfbm90aWZpZXJfbGlzdCk7CisKK3N0YXRpYyBpbnQgaW9laV9jaGVja19leGNlcHRpb25fdG9rZW47CisKKy8qIHBTZXJpZXMgZXZlbnQgbG9nIGZvcm1hdCAqLworCisvKiBUd28gYnl0ZXMgQVNDSUkgc2VjdGlvbiBJRHMgKi8KKyNkZWZpbmUgUFNFUklFU19FTE9HX1NFQ1RfSURfUFJJVl9IRFIJCSgoJ1AnIDw8IDgpIHwgJ0gnKQorI2RlZmluZSBQU0VSSUVTX0VMT0dfU0VDVF9JRF9VU0VSX0hEUgkJKCgnVScgPDwgOCkgfCAnSCcpCisjZGVmaW5lIFBTRVJJRVNfRUxPR19TRUNUX0lEX1BSSU1BUllfU1JDCSgoJ1AnIDw8IDgpIHwgJ1MnKQorI2RlZmluZSBQU0VSSUVTX0VMT0dfU0VDVF9JRF9FWFRFTkRFRF9VSAkoKCdFJyA8PCA4KSB8ICdIJykKKyNkZWZpbmUgUFNFUklFU19FTE9HX1NFQ1RfSURfRkFJTElOR19NVE1TCSgoJ00nIDw8IDgpIHwgJ1QnKQorI2RlZmluZSBQU0VSSUVTX0VMT0dfU0VDVF9JRF9TRUNPTkRBUllfU1JDCSgoJ1MnIDw8IDgpIHwgJ1MnKQorI2RlZmluZSBQU0VSSUVTX0VMT0dfU0VDVF9JRF9EVU1QX0xPQ0FUT1IJKCgnRCcgPDwgOCkgfCAnSCcpCisjZGVmaW5lIFBTRVJJRVNfRUxPR19TRUNUX0lEX0ZXX0VSUk9SCQkoKCdTJyA8PCA4KSB8ICdXJykKKyNkZWZpbmUgUFNFUklFU19FTE9HX1NFQ1RfSURfSU1QQUNUX1BBUlRfSUQJKCgnTCcgPDwgOCkgfCAnUCcpCisjZGVmaW5lIFBTRVJJRVNfRUxPR19TRUNUX0lEX0xPR0lDX1JFU09VUkNFX0lECSgoJ0wnIDw8IDgpIHwgJ1InKQorI2RlZmluZSBQU0VSSUVTX0VMT0dfU0VDVF9JRF9ITUNfSUQJCSgoJ0gnIDw8IDgpIHwgJ00nKQorI2RlZmluZSBQU0VSSUVTX0VMT0dfU0VDVF9JRF9FUE9XCQkoKCdFJyA8PCA4KSB8ICdQJykKKyNkZWZpbmUgUFNFUklFU19FTE9HX1NFQ1RfSURfSU9fRVZFTlQJCSgoJ0knIDw8IDgpIHwgJ0UnKQorI2RlZmluZSBQU0VSSUVTX0VMT0dfU0VDVF9JRF9NQU5VRkFDVF9JTkZPCSgoJ00nIDw8IDgpIHwgJ0knKQorI2RlZmluZSBQU0VSSUVTX0VMT0dfU0VDVF9JRF9DQUxMX0hPTUUJCSgoJ0MnIDw8IDgpIHwgJ0gnKQorI2RlZmluZSBQU0VSSUVTX0VMT0dfU0VDVF9JRF9VU0VSX0RFRgkJKCgnVScgPDwgOCkgfCAnRCcpCisKKy8qIFZlbmRvciBzcGVjaWZpYyBQbGF0Zm9ybSBFdmVudCBMb2cgRm9ybWF0LCBWZXJzaW9uIDYsIHNlY3Rpb24gaGVhZGVyICovCitzdHJ1Y3QgcHNlcmllc19lbG9nX3NlY3Rpb24geworCXVpbnQxNl90IGlkOwkJCS8qIDB4MDAgMi1ieXRlIEFTQ0lJIHNlY3Rpb24gSUQJKi8KKwl1aW50MTZfdCBsZW5ndGg7CQkvKiAweDAyIFNlY3Rpb24gbGVuZ3RoIGluIGJ5dGVzCSovCisJdWludDhfdCB2ZXJzaW9uOwkJLyogMHgwNCBTZWN0aW9uIHZlcnNpb24JCSovCisJdWludDhfdCBzdWJ0eXBlOwkJLyogMHgwNSBTZWN0aW9uIHN1YnR5cGUJCSovCisJdWludDE2X3QgY3JlYXRvcl9jb21wb25lbnQ7CS8qIDB4MDYgQ3JlYXRvciBjb21wb25lbnQgSUQJKi8KKwl1aW50OF90IGRhdGFbXTsJCQkvKiAweDA4IFN0YXJ0IG9mIHNlY3Rpb24gZGF0YQkqLworfTsKKworc3RhdGljIGNoYXIgaW9laV9ydGFzX2J1ZltSVEFTX0RBVEFfQlVGX1NJWkVdIF9fY2FjaGVsaW5lX2FsaWduZWQ7CisKKy8qKgorICogRmluZCBkYXRhIHBvcnRpb24gb2YgYSBzcGVjaWZpYyBzZWN0aW9uIGluIFJUQVMgZXh0ZW5kZWQgZXZlbnQgbG9nLgorICogQGVsb2c6IFJUQVMgZXJyb3IvZXZlbnQgbG9nLgorICogQHNlY3RfaWQ6IHNlY3Npb24gSUQuCisgKgorICogUmV0dXJuOgorICoJcG9pbnRlciB0byB0aGUgc2VjdGlvbiBkYXRhIG9mIHRoZSBzcGVjaWZpZWQgc2VjdGlvbgorICoJTlVMTCBpZiBub3QgZm91bmQKKyAqLworc3RhdGljIHN0cnVjdCBwc2VyaWVzX2Vsb2dfc2VjdGlvbiAqZmluZF94ZWxvZ19zZWN0aW9uKHN0cnVjdCBydGFzX2Vycm9yX2xvZyAqZWxvZywKKwkJCQkJCSAgICAgICB1aW50MTZfdCBzZWN0X2lkKQoreworCXN0cnVjdCBydGFzX2V4dF9ldmVudF9sb2dfdjYgKnhlbG9nID0KKwkJKHN0cnVjdCBydGFzX2V4dF9ldmVudF9sb2dfdjYgKikgZWxvZy0+YnVmZmVyOworCXN0cnVjdCBwc2VyaWVzX2Vsb2dfc2VjdGlvbiAqc2VjdDsKKwl1bnNpZ25lZCBjaGFyICpwLCAqbG9nX2VuZDsKKworCS8qIENoZWNrIHRoYXQgd2UgdW5kZXJzdGFuZCB0aGUgZm9ybWF0ICovCisJaWYgKGVsb2ctPmV4dGVuZGVkX2xvZ19sZW5ndGggPCBzaXplb2Yoc3RydWN0IHJ0YXNfZXh0X2V2ZW50X2xvZ192NikgfHwKKwkgICAgeGVsb2ctPmxvZ19mb3JtYXQgIT0gUlRBU19WNkVYVF9MT0dfRk9STUFUX0VWRU5UX0xPRyB8fAorCSAgICB4ZWxvZy0+Y29tcGFueV9pZCAhPSBSVEFTX1Y2RVhUX0NPTVBBTllfSURfSUJNKQorCQlyZXR1cm4gTlVMTDsKKworCWxvZ19lbmQgPSBlbG9nLT5idWZmZXIgKyBlbG9nLT5leHRlbmRlZF9sb2dfbGVuZ3RoOworCXAgPSB4ZWxvZy0+dmVuZG9yX2xvZzsKKwl3aGlsZSAocCA8IGxvZ19lbmQpIHsKKwkJc2VjdCA9IChzdHJ1Y3QgcHNlcmllc19lbG9nX3NlY3Rpb24gKilwOworCQlpZiAoc2VjdC0+aWQgPT0gc2VjdF9pZCkKKwkJCXJldHVybiBzZWN0OworCQlwICs9IHNlY3QtPmxlbmd0aDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogRmluZCB0aGUgZGF0YSBwb3J0aW9uIG9mIGFuIElPIEV2ZW50IHNlY3Rpb24gZnJvbSBldmVudCBsb2cuCisgKiBAZWxvZzogUlRBUyBlcnJvci9ldmVudCBsb2cuCisgKgorICogUmV0dXJuOgorICogCXBvaW50ZXIgdG8gYSB2YWxpZCBJTyBldmVudCBzZWN0aW9uIGRhdGEuIE5VTEwgaWYgbm90IGZvdW5kLgorICovCitzdGF0aWMgc3RydWN0IHBzZXJpZXNfaW9fZXZlbnQgKiBpb2VpX2ZpbmRfZXZlbnQoc3RydWN0IHJ0YXNfZXJyb3JfbG9nICplbG9nKQoreworCXN0cnVjdCBwc2VyaWVzX2Vsb2dfc2VjdGlvbiAqc2VjdDsKKworCS8qIFdlIHNob3VsZCBvbmx5IGV2ZXIgZ2V0IGNhbGxlZCBmb3IgaW8tZXZlbnQgaW50ZXJydXB0cywgYnV0IGlmCisJICogd2UgZG8gZ2V0IGNhbGxlZCBmb3IgYW5vdGhlciB0eXBlIHRoZW4gc29tZXRoaW5nIHdlbnQgd3Jvbmcgc28KKwkgKiBtYWtlIHNvbWUgbm9pc2UgYWJvdXQgaXQuCisJICogUlRBU19UWVBFX0lPIG9ubHkgZXhpc3RzIGluIGV4dGVuZGVkIGV2ZW50IGxvZyB2ZXJzaW9uIDYgb3IgbGF0ZXIuCisJICogTm8gbmVlZCB0byBjaGVjayBldmVudCBsb2cgdmVyc2lvbi4KKwkgKi8KKwlpZiAodW5saWtlbHkoZWxvZy0+dHlwZSAhPSBSVEFTX1RZUEVfSU8pKSB7CisJCXByaW50a19vbmNlKEtFUk5fV0FSTklORyAiaW9fZXZlbnRfaXJxOiBVbmV4cGVjdGVkIGV2ZW50IHR5cGUgJWQiLAorCQkJICAgIGVsb2ctPnR5cGUpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlzZWN0ID0gZmluZF94ZWxvZ19zZWN0aW9uKGVsb2csIFBTRVJJRVNfRUxPR19TRUNUX0lEX0lPX0VWRU5UKTsKKwlpZiAodW5saWtlbHkoIXNlY3QpKSB7CisJCXByaW50a19vbmNlKEtFUk5fV0FSTklORyAiaW9fZXZlbnRfaXJxOiBSVEFTIGV4dGVuZGVkIGV2ZW50ICIKKwkJCSAgICAibG9nIGRvZXMgbm90IGNvbnRhaW4gYW4gSU8gRXZlbnQgc2VjdGlvbi4gIgorCQkJICAgICJDb3VsZCBiZSBhIGJ1ZyBpbiBzeXN0ZW0gZmlybXdhcmUhXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiAoc3RydWN0IHBzZXJpZXNfaW9fZXZlbnQgKikgJnNlY3QtPmRhdGE7Cit9CisKKy8qCisgKiBQQVBSOgorICogLSBjaGVjay1leGNlcHRpb24gcmV0dXJucyB0aGUgZmlyc3QgZm91bmQgZXJyb3Igb3IgZXZlbnQgYW5kIGNsZWFyIHRoYXQKKyAqICAgZXJyb3Igb3IgZXZlbnQgc28gaXQgaXMgcmVwb3J0ZWQgb25jZS4KKyAqIC0gRWFjaCBpbnRlcnJ1cHQgcmV0dXJucyBvbmUgZXZlbnQuIElmIGEgcGxhdGVmb3JtIGNob29zZXMgdG8gcmVwb3J0CisgKiAgIG11bHRpcGxlIGV2ZW50cyB0aHJvdWdoIGEgc2luZ2xlIGludGVycnVwdCwgaXQgbXVzdCBlbnN1cmUgdGhhdCB0aGUKKyAqICAgaW50ZXJydXB0IHJlbWFpbnMgYXNzZXJ0ZWQgdW50aWwgY2hlY2stZXhjZXB0aW9uIGhhcyBiZWVuIHVzZWQgdG8KKyAqICAgcHJvY2VzcyBhbGwgb3V0LXN0YW5kaW5nIGV2ZW50cyBmb3IgdGhhdCBpbnRlcnJ1cHQuCisgKgorICogSW1wbGVtZW50YXRpb24gbm90ZXM6CisgKiAtIEV2ZW50cyBtdXN0IGJlIHByb2Nlc3NlZCBpbiB0aGUgb3JkZXIgdGhleSBhcmUgcmV0dXJuZWQuIEhlbmNlLAorICogICBzZXF1ZW50aWFsIGluIG5hdHVyZS4KKyAqIC0gVGhlIG93bmVyIG9mIGFuIGV2ZW50IGlzIGRldGVybWluZWQgYnkgY29tYmluYXRpb25zIG9mIHNjb3BlLAorICogICBldmVudCB0eXBlLCBhbmQgc3ViLXR5cGUuIFRoZXJlIGlzIG5vIGVhc3kgd2F5IHRvIHByZS1zb3J0IGNsaWVudHMKKyAqICAgYnkgc2NvcGUgb3IgZXZlbnQgdHlwZSBhbG9uZS4gRm9yIGV4YW1wbGUsIFRvcnJlbnQgSVNSIHJvdXRlIGNoYW5nZQorICogICBldmVudCBpcyByZXBvcnRlZCB3aXRoIHNjb3BlIDB4MDAgKE5vdCBBcHBsaWNhdGFibGUpIHJhdGhlciB0aGFuCisgKiAgIDB4M0IgKFRvcnJlbnQtaHViKS4gSXQgaXMgYmV0dGVyIHRvIGxldCB0aGUgY2xpZW50cyB0byBpZGVudGlmeQorICogICB3aG8gb3ducyB0aGUgdGhlIGV2ZW50LgorICovCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpb2VpX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHBzZXJpZXNfaW9fZXZlbnQgKmV2ZW50OworCWludCBydGFzX3JjOworCisJZm9yICg7OykgeworCQlydGFzX3JjID0gcnRhc19jYWxsKGlvZWlfY2hlY2tfZXhjZXB0aW9uX3Rva2VuLCA2LCAxLCBOVUxMLAorCQkJCSAgICBSVEFTX1ZFQ1RPUl9FWFRFUk5BTF9JTlRFUlJVUFQsCisJCQkJICAgIHZpcnFfdG9faHcoaXJxKSwKKwkJCQkgICAgUlRBU19JT19FVkVOVFMsIDEgLyogVGltZSBDcml0aWNhbCAqLywKKwkJCQkgICAgX19wYShpb2VpX3J0YXNfYnVmKSwKKwkJCQkgICAgUlRBU19EQVRBX0JVRl9TSVpFKTsKKwkJaWYgKHJ0YXNfcmMgIT0gMCkKKwkJCWJyZWFrOworCisJCWV2ZW50ID0gaW9laV9maW5kX2V2ZW50KChzdHJ1Y3QgcnRhc19lcnJvcl9sb2cgKilpb2VpX3J0YXNfYnVmKTsKKwkJaWYgKCFldmVudCkKKwkJCWNvbnRpbnVlOworCisJCWF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKCZwc2VyaWVzX2lvZWlfbm90aWZpZXJfbGlzdCwKKwkJCQkJICAgMCwgZXZlbnQpOworCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGlvZWlfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisKKwlpb2VpX2NoZWNrX2V4Y2VwdGlvbl90b2tlbiA9IHJ0YXNfdG9rZW4oImNoZWNrLWV4Y2VwdGlvbiIpOworCWlmIChpb2VpX2NoZWNrX2V4Y2VwdGlvbl90b2tlbiA9PSBSVEFTX1VOS05PV05fU0VSVklDRSkgeworCQlwcl93YXJuaW5nKCJJTyBFdmVudCBJUlEgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHN5c3RlbSAhXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCW5wID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9ldmVudC1zb3VyY2VzL2libSxpby1ldmVudHMiKTsKKwlpZiAobnApIHsKKwkJcmVxdWVzdF9ldmVudF9zb3VyY2VzX2lycXMobnAsIGlvZWlfaW50ZXJydXB0LCAiSU9fRVZFTlQiKTsKKwkJb2Zfbm9kZV9wdXQobnApOworCX0gZWxzZSB7CisJCXByX2VycigiaW9fZXZlbnRfaXJxOiBObyBpYm0saW8tZXZlbnRzIG9uIHN5c3RlbSEgIgorCQkgICAgICAgIklPIEV2ZW50IGludGVycnVwdCBkaXNhYmxlZC5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcmV0dXJuIDA7Cit9CittYWNoaW5lX3N1YnN5c19pbml0Y2FsbChwc2VyaWVzLCBpb2VpX2luaXQpOworCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jCmluZGV4IDZkNTQxMmEuLjAxZmFhYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jCkBAIC02NTksMTUgKzY1OSwxOCBAQAogewogCXN0cnVjdCBkeW5hbWljX2RtYV93aW5kb3dfcHJvcCAqZHdwOwogCXN0cnVjdCBwcm9wZXJ0eSAqd2luNjQ7Ci0JY29uc3QgdTMyICpkZHJfYXZhaWw7CisJY29uc3QgdTMyICpkZHdfYXZhaWw7CiAJdTY0IGxpb2JuOwogCWludCBsZW4sIHJldDsKIAotCWRkcl9hdmFpbCA9IG9mX2dldF9wcm9wZXJ0eShucCwgImlibSxkZHctYXBwbGljYWJsZSIsICZsZW4pOworCWRkd19hdmFpbCA9IG9mX2dldF9wcm9wZXJ0eShucCwgImlibSxkZHctYXBwbGljYWJsZSIsICZsZW4pOwogCXdpbjY0ID0gb2ZfZmluZF9wcm9wZXJ0eShucCwgRElSRUNUNjRfUFJPUE5BTUUsIE5VTEwpOwotCWlmICghd2luNjQgfHwgIWRkcl9hdmFpbCB8fCBsZW4gPCAzICogc2l6ZW9mKHUzMikpCisJaWYgKCF3aW42NCkKIAkJcmV0dXJuOwogCisJaWYgKCFkZHdfYXZhaWwgfHwgbGVuIDwgMyAqIHNpemVvZih1MzIpIHx8IHdpbjY0LT5sZW5ndGggPCBzaXplb2YoKmR3cCkpCisJCWdvdG8gZGVscHJvcDsKKwogCWR3cCA9IHdpbjY0LT52YWx1ZTsKIAlsaW9ibiA9ICh1NjQpYmUzMl90b19jcHUoZHdwLT5saW9ibik7CiAKQEAgLTY4MSwyOCArNjg0LDI5IEBACiAJCXByX2RlYnVnKCIlcyBzdWNjZXNzZnVsbHkgY2xlYXJlZCB0Y2VzIGluIHdpbmRvdy5cbiIsCiAJCQkgbnAtPmZ1bGxfbmFtZSk7CiAKLQlyZXQgPSBydGFzX2NhbGwoZGRyX2F2YWlsWzJdLCAxLCAxLCBOVUxMLCBsaW9ibik7CisJcmV0ID0gcnRhc19jYWxsKGRkd19hdmFpbFsyXSwgMSwgMSwgTlVMTCwgbGlvYm4pOwogCWlmIChyZXQpCiAJCXByX3dhcm5pbmcoIiVzOiBmYWlsZWQgdG8gcmVtb3ZlIGRpcmVjdCB3aW5kb3c6IHJ0YXMgcmV0dXJuZWQgIgogCQkJIiVkIHRvIGlibSxyZW1vdmUtcGUtZG1hLXdpbmRvdygleCkgJWxseFxuIiwKLQkJCW5wLT5mdWxsX25hbWUsIHJldCwgZGRyX2F2YWlsWzJdLCBsaW9ibik7CisJCQlucC0+ZnVsbF9uYW1lLCByZXQsIGRkd19hdmFpbFsyXSwgbGlvYm4pOwogCWVsc2UKIAkJcHJfZGVidWcoIiVzOiBzdWNjZXNzZnVsbHkgcmVtb3ZlZCBkaXJlY3Qgd2luZG93OiBydGFzIHJldHVybmVkICIKIAkJCSIlZCB0byBpYm0scmVtb3ZlLXBlLWRtYS13aW5kb3coJXgpICVsbHhcbiIsCi0JCQlucC0+ZnVsbF9uYW1lLCByZXQsIGRkcl9hdmFpbFsyXSwgbGlvYm4pOworCQkJbnAtPmZ1bGxfbmFtZSwgcmV0LCBkZHdfYXZhaWxbMl0sIGxpb2JuKTsKKworZGVscHJvcDoKKwlyZXQgPSBwcm9tX3JlbW92ZV9wcm9wZXJ0eShucCwgd2luNjQpOworCWlmIChyZXQpCisJCXByX3dhcm5pbmcoIiVzOiBmYWlsZWQgdG8gcmVtb3ZlIGRpcmVjdCB3aW5kb3cgcHJvcGVydHk6ICVkXG4iLAorCQkJbnAtPmZ1bGxfbmFtZSwgcmV0KTsKIH0KIAotCi1zdGF0aWMgaW50IGR1cGVfZGR3X2lmX2FscmVhZHlfY3JlYXRlZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBkbikKK3N0YXRpYyB1NjQgZmluZF9leGlzdGluZ19kZHcoc3RydWN0IGRldmljZV9ub2RlICpwZG4pCiB7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpkbjsKLQlzdHJ1Y3QgcGNpX2RuICpwY2lkbjsKIAlzdHJ1Y3QgZGlyZWN0X3dpbmRvdyAqd2luZG93OwogCWNvbnN0IHN0cnVjdCBkeW5hbWljX2RtYV93aW5kb3dfcHJvcCAqZGlyZWN0NjQ7CiAJdTY0IGRtYV9hZGRyID0gMDsKIAotCWRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7Ci0JcGNpZG4gPSBQQ0lfRE4oZG4pOwogCXNwaW5fbG9jaygmZGlyZWN0X3dpbmRvd19saXN0X2xvY2spOwogCS8qIGNoZWNrIGlmIHdlIGFscmVhZHkgY3JlYXRlZCBhIHdpbmRvdyBhbmQgZHVwZSB0aGF0IGNvbmZpZyBpZiBzbyAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkod2luZG93LCAmZGlyZWN0X3dpbmRvd19saXN0LCBsaXN0KSB7CkBAIC03MTcsMzYgKzcyMSw0MCBAQAogCXJldHVybiBkbWFfYWRkcjsKIH0KIAotc3RhdGljIHU2NCBkdXBlX2Rkd19pZl9rZXhlYyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBkbikKK3N0YXRpYyBpbnQgZmluZF9leGlzdGluZ19kZHdfd2luZG93cyh2b2lkKQogewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG47Ci0Jc3RydWN0IHBjaV9kbiAqcGNpZG47CiAJaW50IGxlbjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBkbjsKIAlzdHJ1Y3QgZGlyZWN0X3dpbmRvdyAqd2luZG93OwogCWNvbnN0IHN0cnVjdCBkeW5hbWljX2RtYV93aW5kb3dfcHJvcCAqZGlyZWN0NjQ7Ci0JdTY0IGRtYV9hZGRyID0gMDsKIAotCWRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7Ci0JcGNpZG4gPSBQQ0lfRE4oZG4pOwotCWRpcmVjdDY0ID0gb2ZfZ2V0X3Byb3BlcnR5KHBkbiwgRElSRUNUNjRfUFJPUE5BTUUsICZsZW4pOwotCWlmIChkaXJlY3Q2NCkgeworCWlmICghZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9MUEFSKSkKKwkJcmV0dXJuIDA7CisKKwlmb3JfZWFjaF9ub2RlX3dpdGhfcHJvcGVydHkocGRuLCBESVJFQ1Q2NF9QUk9QTkFNRSkgeworCQlkaXJlY3Q2NCA9IG9mX2dldF9wcm9wZXJ0eShwZG4sIERJUkVDVDY0X1BST1BOQU1FLCAmbGVuKTsKKwkJaWYgKCFkaXJlY3Q2NCkKKwkJCWNvbnRpbnVlOworCiAJCXdpbmRvdyA9IGt6YWxsb2Moc2l6ZW9mKCp3aW5kb3cpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCF3aW5kb3cpIHsKKwkJaWYgKCF3aW5kb3cgfHwgbGVuIDwgc2l6ZW9mKHN0cnVjdCBkeW5hbWljX2RtYV93aW5kb3dfcHJvcCkpIHsKKwkJCWtmcmVlKHdpbmRvdyk7CiAJCQlyZW1vdmVfZGR3KHBkbik7Ci0JCX0gZWxzZSB7Ci0JCQl3aW5kb3ctPmRldmljZSA9IHBkbjsKLQkJCXdpbmRvdy0+cHJvcCA9IGRpcmVjdDY0OwotCQkJc3Bpbl9sb2NrKCZkaXJlY3Rfd2luZG93X2xpc3RfbG9jayk7Ci0JCQlsaXN0X2FkZCgmd2luZG93LT5saXN0LCAmZGlyZWN0X3dpbmRvd19saXN0KTsKLQkJCXNwaW5fdW5sb2NrKCZkaXJlY3Rfd2luZG93X2xpc3RfbG9jayk7Ci0JCQlkbWFfYWRkciA9IGRpcmVjdDY0LT5kbWFfYmFzZTsKKwkJCWNvbnRpbnVlOwogCQl9CisKKwkJd2luZG93LT5kZXZpY2UgPSBwZG47CisJCXdpbmRvdy0+cHJvcCA9IGRpcmVjdDY0OworCQlzcGluX2xvY2soJmRpcmVjdF93aW5kb3dfbGlzdF9sb2NrKTsKKwkJbGlzdF9hZGQoJndpbmRvdy0+bGlzdCwgJmRpcmVjdF93aW5kb3dfbGlzdCk7CisJCXNwaW5fdW5sb2NrKCZkaXJlY3Rfd2luZG93X2xpc3RfbG9jayk7CiAJfQogCi0JcmV0dXJuIGRtYV9hZGRyOworCXJldHVybiAwOwogfQorbWFjaGluZV9hcmNoX2luaXRjYWxsKHBzZXJpZXMsIGZpbmRfZXhpc3RpbmdfZGR3X3dpbmRvd3MpOwogCi1zdGF0aWMgaW50IHF1ZXJ5X2RkdyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCB1MzIgKmRkcl9hdmFpbCwKK3N0YXRpYyBpbnQgcXVlcnlfZGR3KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHUzMiAqZGR3X2F2YWlsLAogCQkJc3RydWN0IGRkd19xdWVyeV9yZXNwb25zZSAqcXVlcnkpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpkbjsKQEAgLTc2NywxNSArNzc1LDE1IEBACiAJaWYgKHBjaWRuLT5lZWhfcGVfY29uZmlnX2FkZHIpCiAJCWNmZ19hZGRyID0gcGNpZG4tPmVlaF9wZV9jb25maWdfYWRkcjsKIAlidWlkID0gcGNpZG4tPnBoYi0+YnVpZDsKLQlyZXQgPSBydGFzX2NhbGwoZGRyX2F2YWlsWzBdLCAzLCA1LCAodTMyICopcXVlcnksCisJcmV0ID0gcnRhc19jYWxsKGRkd19hdmFpbFswXSwgMywgNSwgKHUzMiAqKXF1ZXJ5LAogCQkgIGNmZ19hZGRyLCBCVUlEX0hJKGJ1aWQpLCBCVUlEX0xPKGJ1aWQpKTsKIAlkZXZfaW5mbygmZGV2LT5kZXYsICJpYm0scXVlcnktcGUtZG1hLXdpbmRvd3MoJXgpICV4ICV4ICV4IgotCQkiIHJldHVybmVkICVkXG4iLCBkZHJfYXZhaWxbMF0sIGNmZ19hZGRyLCBCVUlEX0hJKGJ1aWQpLAorCQkiIHJldHVybmVkICVkXG4iLCBkZHdfYXZhaWxbMF0sIGNmZ19hZGRyLCBCVUlEX0hJKGJ1aWQpLAogCQlCVUlEX0xPKGJ1aWQpLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgY3JlYXRlX2RkdyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCB1MzIgKmRkcl9hdmFpbCwKK3N0YXRpYyBpbnQgY3JlYXRlX2RkdyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCB1MzIgKmRkd19hdmFpbCwKIAkJCXN0cnVjdCBkZHdfY3JlYXRlX3Jlc3BvbnNlICpjcmVhdGUsIGludCBwYWdlX3NoaWZ0LAogCQkJaW50IHdpbmRvd19zaGlmdCkKIHsKQEAgLTgwMCwxMiArODA4LDEyIEBACiAKIAlkbyB7CiAJCS8qIGV4dHJhIG91dHB1dHMgYXJlIExJT0JOIGFuZCBkbWEtYWRkciAoaGksIGxvKSAqLwotCQlyZXQgPSBydGFzX2NhbGwoZGRyX2F2YWlsWzFdLCA1LCA0LCAodTMyICopY3JlYXRlLCBjZmdfYWRkciwKKwkJcmV0ID0gcnRhc19jYWxsKGRkd19hdmFpbFsxXSwgNSwgNCwgKHUzMiAqKWNyZWF0ZSwgY2ZnX2FkZHIsCiAJCQkJQlVJRF9ISShidWlkKSwgQlVJRF9MTyhidWlkKSwgcGFnZV9zaGlmdCwgd2luZG93X3NoaWZ0KTsKIAl9IHdoaWxlIChydGFzX2J1c3lfZGVsYXkocmV0KSk7CiAJZGV2X2luZm8oJmRldi0+ZGV2LAogCQkiaWJtLGNyZWF0ZS1wZS1kbWEtd2luZG93KCV4KSAleCAleCAleCAleCAleCByZXR1cm5lZCAlZCAiCi0JCSIobGlvYm4gPSAweCV4IHN0YXJ0aW5nIGFkZHIgPSAleCAleClcbiIsIGRkcl9hdmFpbFsxXSwKKwkJIihsaW9ibiA9IDB4JXggc3RhcnRpbmcgYWRkciA9ICV4ICV4KVxuIiwgZGR3X2F2YWlsWzFdLAogCQkgY2ZnX2FkZHIsIEJVSURfSEkoYnVpZCksIEJVSURfTE8oYnVpZCksIHBhZ2Vfc2hpZnQsCiAJCSB3aW5kb3dfc2hpZnQsIHJldCwgY3JlYXRlLT5saW9ibiwgY3JlYXRlLT5hZGRyX2hpLCBjcmVhdGUtPmFkZHJfbG8pOwogCkBAIC04MzEsMTggKzgzOSwxNCBAQAogCWludCBwYWdlX3NoaWZ0OwogCXU2NCBkbWFfYWRkciwgbWF4X2FkZHI7CiAJc3RydWN0IGRldmljZV9ub2RlICpkbjsKLQljb25zdCB1MzIgKnVuaW5pdGlhbGl6ZWRfdmFyKGRkcl9hdmFpbCk7CisJY29uc3QgdTMyICp1bmluaXRpYWxpemVkX3ZhcihkZHdfYXZhaWwpOwogCXN0cnVjdCBkaXJlY3Rfd2luZG93ICp3aW5kb3c7Ci0Jc3RydWN0IHByb3BlcnR5ICp1bmluaXRpYWxpemVkX3Zhcih3aW42NCk7CisJc3RydWN0IHByb3BlcnR5ICp3aW42NDsKIAlzdHJ1Y3QgZHluYW1pY19kbWFfd2luZG93X3Byb3AgKmRkd3Byb3A7CiAKIAltdXRleF9sb2NrKCZkaXJlY3Rfd2luZG93X2luaXRfbXV0ZXgpOwogCi0JZG1hX2FkZHIgPSBkdXBlX2Rkd19pZl9hbHJlYWR5X2NyZWF0ZWQoZGV2LCBwZG4pOwotCWlmIChkbWFfYWRkciAhPSAwKQotCQlnb3RvIG91dF91bmxvY2s7Ci0KLQlkbWFfYWRkciA9IGR1cGVfZGR3X2lmX2tleGVjKGRldiwgcGRuKTsKKwlkbWFfYWRkciA9IGZpbmRfZXhpc3RpbmdfZGR3KHBkbik7CiAJaWYgKGRtYV9hZGRyICE9IDApCiAJCWdvdG8gb3V0X3VubG9jazsKIApAQCAtODU0LDggKzg1OCw4IEBACiAJICogZm9yIHRoZSBnaXZlbiBub2RlIGluIHRoYXQgb3JkZXIuCiAJICogdGhlIHByb3BlcnR5IGlzIGFjdHVhbGx5IGluIHRoZSBwYXJlbnQsIG5vdCB0aGUgUEUKIAkgKi8KLQlkZHJfYXZhaWwgPSBvZl9nZXRfcHJvcGVydHkocGRuLCAiaWJtLGRkdy1hcHBsaWNhYmxlIiwgJmxlbik7Ci0JaWYgKCFkZHJfYXZhaWwgfHwgbGVuIDwgMyAqIHNpemVvZih1MzIpKQorCWRkd19hdmFpbCA9IG9mX2dldF9wcm9wZXJ0eShwZG4sICJpYm0sZGR3LWFwcGxpY2FibGUiLCAmbGVuKTsKKwlpZiAoIWRkd19hdmFpbCB8fCBsZW4gPCAzICogc2l6ZW9mKHUzMikpCiAJCWdvdG8gb3V0X3VubG9jazsKIAogICAgICAgIC8qCkBAIC04NjUsNyArODY5LDcgQEAKIAkgKiBvZiBwYWdlIHNpemVzOiBzdXBwb3J0ZWQgYW5kIHN1cHBvcnRlZCBmb3IgbWlncmF0ZS1kbWEuCiAJICovCiAJZG4gPSBwY2lfZGV2aWNlX3RvX09GX25vZGUoZGV2KTsKLQlyZXQgPSBxdWVyeV9kZHcoZGV2LCBkZHJfYXZhaWwsICZxdWVyeSk7CisJcmV0ID0gcXVlcnlfZGR3KGRldiwgZGR3X2F2YWlsLCAmcXVlcnkpOwogCWlmIChyZXQgIT0gMCkKIAkJZ290byBvdXRfdW5sb2NrOwogCkBAIC05MDcsMTMgKzkxMSwxNCBAQAogCX0KIAl3aW42NC0+bmFtZSA9IGtzdHJkdXAoRElSRUNUNjRfUFJPUE5BTUUsIEdGUF9LRVJORUwpOwogCXdpbjY0LT52YWx1ZSA9IGRkd3Byb3AgPSBrbWFsbG9jKHNpemVvZigqZGR3cHJvcCksIEdGUF9LRVJORUwpOworCXdpbjY0LT5sZW5ndGggPSBzaXplb2YoKmRkd3Byb3ApOwogCWlmICghd2luNjQtPm5hbWUgfHwgIXdpbjY0LT52YWx1ZSkgewogCQlkZXZfaW5mbygmZGV2LT5kZXYsCiAJCQkiY291bGRuJ3QgYWxsb2NhdGUgcHJvcGVydHkgbmFtZSBhbmQgdmFsdWVcbiIpOwogCQlnb3RvIG91dF9mcmVlX3Byb3A7CiAJfQogCi0JcmV0ID0gY3JlYXRlX2RkdyhkZXYsIGRkcl9hdmFpbCwgJmNyZWF0ZSwgcGFnZV9zaGlmdCwgbGVuKTsKKwlyZXQgPSBjcmVhdGVfZGR3KGRldiwgZGR3X2F2YWlsLCAmY3JlYXRlLCBwYWdlX3NoaWZ0LCBsZW4pOwogCWlmIChyZXQgIT0gMCkKIAkJZ290byBvdXRfZnJlZV9wcm9wOwogCkBAIC0xMDIxLDEzICsxMDI2LDE2IEBACiAJY29uc3Qgdm9pZCAqZG1hX3dpbmRvdyA9IE5VTEw7CiAJdTY0IGRtYV9vZmZzZXQ7CiAKLQlpZiAoIWRldi0+ZG1hX21hc2sgfHwgIWRtYV9zdXBwb3J0ZWQoZGV2LCBkbWFfbWFzaykpCisJaWYgKCFkZXYtPmRtYV9tYXNrKQogCQlyZXR1cm4gLUVJTzsKIAorCWlmICghZGV2X2lzX3BjaShkZXYpKQorCQlnb3RvIGNoZWNrX21hc2s7CisKKwlwZGV2ID0gdG9fcGNpX2RldihkZXYpOworCiAJLyogb25seSBhdHRlbXB0IHRvIHVzZSBhIG5ldyB3aW5kb3cgaWYgNjQtYml0IERNQSBpcyByZXF1ZXN0ZWQgKi8KIAlpZiAoIWRpc2FibGVfZGR3ICYmIGRtYV9tYXNrID09IERNQV9CSVRfTUFTSyg2NCkpIHsKLQkJcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKLQogCQlkbiA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShwZGV2KTsKIAkJZGV2X2RiZyhkZXYsICJub2RlIGlzICVzXG4iLCBkbi0+ZnVsbF9uYW1lKTsKIApAQCAtMTA1NCwxMiArMTA2MiwxNyBAQAogCQl9CiAJfQogCi0JLyogZmFsbC10aHJvdWdoIHRvIGlvbW11IG9wcyAqLwotCWlmICghZGR3X2VuYWJsZWQpIHsKLQkJZGV2X2luZm8oZGV2LCAiVXNpbmcgMzItYml0IERNQSB2aWEgaW9tbXVcbiIpOworCS8qIGZhbGwgYmFjayBvbiBpb21tdSBvcHMsIHJlc3RvcmUgdGFibGUgcG9pbnRlciB3aXRoIG9wcyAqLworCWlmICghZGR3X2VuYWJsZWQgJiYgZ2V0X2RtYV9vcHMoZGV2KSAhPSAmZG1hX2lvbW11X29wcykgeworCQlkZXZfaW5mbyhkZXYsICJSZXN0b3JpbmcgMzItYml0IERNQSB2aWEgaW9tbXVcbiIpOwogCQlzZXRfZG1hX29wcyhkZXYsICZkbWFfaW9tbXVfb3BzKTsKKwkJcGNpX2RtYV9kZXZfc2V0dXBfcFNlcmllc0xQKHBkZXYpOwogCX0KIAorY2hlY2tfbWFzazoKKwlpZiAoIWRtYV9zdXBwb3J0ZWQoZGV2LCBkbWFfbWFzaykpCisJCXJldHVybiAtRUlPOworCiAJKmRldi0+ZG1hX21hc2sgPSBkbWFfbWFzazsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9rZXhlYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2tleGVjLmMKaW5kZXggNzdkMzhhNS4uNTRjZjNhNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2tleGVjLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2tleGVjLmMKQEAgLTcsMTUgKzcsMTggQEAKICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9rZXhlYy5oPgogI2luY2x1ZGUgPGFzbS9tcGljLmg+CisjaW5jbHVkZSA8YXNtL3hpY3MuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CiAKICNpbmNsdWRlICJwc2VyaWVzLmgiCi0jaW5jbHVkZSAieGljcy5oIgogI2luY2x1ZGUgInBscGFyX3dyYXBwZXJzLmgiCiAKIHN0YXRpYyB2b2lkIHBzZXJpZXNfa2V4ZWNfY3B1X2Rvd24oaW50IGNyYXNoX3NodXRkb3duLCBpbnQgc2Vjb25kYXJ5KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXIuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyLmMKaW5kZXggY2E1ZDU4OS4uMzllNmUwYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhci5jCkBAIC0zMjksNiArMzI5LDggQEAKIAkvKiBNYWtlIHBIeXAgaGFwcHkgKi8KIAlpZiAoKHJmbGFncyAmIF9QQUdFX05PX0NBQ0hFKSAmICEocmZsYWdzICYgX1BBR0VfV1JJVEVUSFJVKSkKIAkJaHB0ZV9yICY9IH5fUEFHRV9DT0hFUkVOVDsKKwlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9YQ01PKSAmJiAhKGhwdGVfciAmIEhQVEVfUl9OKSkKKwkJZmxhZ3MgfD0gSF9DT0FMRVNDRV9DQU5EOwogCiAJbHBhcl9yYyA9IHBscGFyX3B0ZV9lbnRlcihmbGFncywgaHB0ZV9ncm91cCwgaHB0ZV92LCBocHRlX3IsICZzbG90KTsKIAlpZiAodW5saWtlbHkobHBhcl9yYyA9PSBIX1BURUdfRlVMTCkpIHsKQEAgLTU3Myw3ICs1NzUsNyBAQAogCXVuc2lnbmVkIGxvbmcgaSwgcGl4LCByYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAlzdHJ1Y3QgcHBjNjRfdGxiX2JhdGNoICpiYXRjaCA9ICZfX2dldF9jcHVfdmFyKHBwYzY0X3RsYl9iYXRjaCk7Ci0JaW50IGxvY2tfdGxiaWUgPSAhY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfTE9DS0xFU1NfVExCSUUpOworCWludCBsb2NrX3RsYmllID0gIW1tdV9oYXNfZmVhdHVyZShNTVVfRlRSX0xPQ0tMRVNTX1RMQklFKTsKIAl1bnNpZ25lZCBsb25nIHBhcmFtWzldOwogCXVuc2lnbmVkIGxvbmcgdmE7CiAJdW5zaWduZWQgbG9uZyBoYXNoLCBpbmRleCwgc2hpZnQsIGhpZHgsIHNsb3Q7CkBAIC03NzEsMyArNzczLDQ3IEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogI2VuZGlmCisKKy8qKgorICogaF9nZXRfbXBwCisgKiBIX0dFVF9NUFAgaGNhbGwgcmV0dXJucyBpbmZvIGluIDcgcGFybXMKKyAqLworaW50IGhfZ2V0X21wcChzdHJ1Y3QgaHZjYWxsX21wcF9kYXRhICptcHBfZGF0YSkKK3sKKwlpbnQgcmM7CisJdW5zaWduZWQgbG9uZyByZXRidWZbUExQQVJfSENBTEw5X0JVRlNJWkVdOworCisJcmMgPSBwbHBhcl9oY2FsbDkoSF9HRVRfTVBQLCByZXRidWYpOworCisJbXBwX2RhdGEtPmVudGl0bGVkX21lbSA9IHJldGJ1ZlswXTsKKwltcHBfZGF0YS0+bWFwcGVkX21lbSA9IHJldGJ1ZlsxXTsKKworCW1wcF9kYXRhLT5ncm91cF9udW0gPSAocmV0YnVmWzJdID4+IDIgKiA4KSAmIDB4ZmZmZjsKKwltcHBfZGF0YS0+cG9vbF9udW0gPSByZXRidWZbMl0gJiAweGZmZmY7CisKKwltcHBfZGF0YS0+bWVtX3dlaWdodCA9IChyZXRidWZbM10gPj4gNyAqIDgpICYgMHhmZjsKKwltcHBfZGF0YS0+dW5hbGxvY2F0ZWRfbWVtX3dlaWdodCA9IChyZXRidWZbM10gPj4gNiAqIDgpICYgMHhmZjsKKwltcHBfZGF0YS0+dW5hbGxvY2F0ZWRfZW50aXRsZW1lbnQgPSByZXRidWZbM10gJiAweGZmZmZmZmZmZmZmZjsKKworCW1wcF9kYXRhLT5wb29sX3NpemUgPSByZXRidWZbNF07CisJbXBwX2RhdGEtPmxvYW5fcmVxdWVzdCA9IHJldGJ1Zls1XTsKKwltcHBfZGF0YS0+YmFja2luZ19tZW0gPSByZXRidWZbNl07CisKKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MKGhfZ2V0X21wcCk7CisKK2ludCBoX2dldF9tcHBfeChzdHJ1Y3QgaHZjYWxsX21wcF94X2RhdGEgKm1wcF94X2RhdGEpCit7CisJaW50IHJjOworCXVuc2lnbmVkIGxvbmcgcmV0YnVmW1BMUEFSX0hDQUxMOV9CVUZTSVpFXSA9IHsgMCB9OworCisJcmMgPSBwbHBhcl9oY2FsbDkoSF9HRVRfTVBQX1gsIHJldGJ1Zik7CisKKwltcHBfeF9kYXRhLT5jb2FsZXNjZWRfYnl0ZXMgPSByZXRidWZbMF07CisJbXBwX3hfZGF0YS0+cG9vbF9jb2FsZXNjZWRfYnl0ZXMgPSByZXRidWZbMV07CisJbXBwX3hfZGF0YS0+cG9vbF9wdXJyX2N5Y2xlcyA9IHJldGJ1ZlsyXTsKKwltcHBfeF9kYXRhLT5wb29sX3NwdXJyX2N5Y2xlcyA9IHJldGJ1ZlszXTsKKworCXJldHVybiByYzsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wbHBhcl93cmFwcGVycy5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BscGFyX3dyYXBwZXJzLmgKaW5kZXggZDk4MDExMS4uNGJmMjEyMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BscGFyX3dyYXBwZXJzLmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BscGFyX3dyYXBwZXJzLmgKQEAgLTI3MCwzMSArMjcwLDQgQEAKIAkJCWxidWZbMV0pOwogfQogCi1zdGF0aWMgaW5saW5lIGxvbmcgcGxwYXJfZW9pKHVuc2lnbmVkIGxvbmcgeGlycikKLXsKLQlyZXR1cm4gcGxwYXJfaGNhbGxfbm9yZXRzKEhfRU9JLCB4aXJyKTsKLX0KLQotc3RhdGljIGlubGluZSBsb25nIHBscGFyX2NwcHIodW5zaWduZWQgbG9uZyBjcHByKQotewotCXJldHVybiBwbHBhcl9oY2FsbF9ub3JldHMoSF9DUFBSLCBjcHByKTsKLX0KLQotc3RhdGljIGlubGluZSBsb25nIHBscGFyX2lwaSh1bnNpZ25lZCBsb25nIHNlcnZlcm51bSwgdW5zaWduZWQgbG9uZyBtZnJyKQotewotCXJldHVybiBwbHBhcl9oY2FsbF9ub3JldHMoSF9JUEksIHNlcnZlcm51bSwgbWZycik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgbG9uZyBwbHBhcl94aXJyKHVuc2lnbmVkIGxvbmcgKnhpcnJfcmV0LCB1bnNpZ25lZCBjaGFyIGNwcHIpCi17Ci0JbG9uZyByYzsKLQl1bnNpZ25lZCBsb25nIHJldGJ1ZltQTFBBUl9IQ0FMTF9CVUZTSVpFXTsKLQotCXJjID0gcGxwYXJfaGNhbGwoSF9YSVJSLCByZXRidWYsIGNwcHIpOwotCi0JKnhpcnJfcmV0ID0gcmV0YnVmWzBdOwotCi0JcmV0dXJuIHJjOwotfQotCiAjZW5kaWYgLyogX1BTRVJJRVNfUExQQVJfV1JBUFBFUlNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Jhcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Jhcy5jCmluZGV4IGM1NWQ3YWQuLjA4NmQyYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yYXMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcmFzLmMKQEAgLTEyMiw3ICsxMjIsNyBAQAogCiAJc3RhdHVzID0gcnRhc19jYWxsKHJhc19jaGVja19leGNlcHRpb25fdG9rZW4sIDYsIDEsIE5VTEwsCiAJCQkgICBSVEFTX1ZFQ1RPUl9FWFRFUk5BTF9JTlRFUlJVUFQsCi0JCQkgICBpcnFfbWFwW2lycV0uaHdpcnEsCisJCQkgICB2aXJxX3RvX2h3KGlycSksCiAJCQkgICBSVEFTX0VQT1dfV0FSTklORyB8IFJUQVNfUE9XRVJNR01fRVZFTlRTLAogCQkJICAgY3JpdGljYWwsIF9fcGEoJnJhc19sb2dfYnVmKSwKIAkJCQlydGFzX2dldF9lcnJvcl9sb2dfbWF4KCkpOwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAKIAlzdGF0dXMgPSBydGFzX2NhbGwocmFzX2NoZWNrX2V4Y2VwdGlvbl90b2tlbiwgNiwgMSwgTlVMTCwKIAkJCSAgIFJUQVNfVkVDVE9SX0VYVEVSTkFMX0lOVEVSUlVQVCwKLQkJCSAgIGlycV9tYXBbaXJxXS5od2lycSwKKwkJCSAgIHZpcnFfdG9faHcoaXJxKSwKIAkJCSAgIFJUQVNfSU5URVJOQUxfRVJST1IsIDEgLypUaW1lIENyaXRpY2FsICovLAogCQkJICAgX19wYSgmcmFzX2xvZ19idWYpLAogCQkJCXJ0YXNfZ2V0X2Vycm9yX2xvZ19tYXgoKSk7CkBAIC0yMjcsNyArMjI3LDcgQEAKIAlzdHJ1Y3QgcnRhc19lcnJvcl9sb2cgKmgsICplcnJoZHIgPSBOVUxMOwogCiAJaWYgKCFWQUxJRF9GV05NSV9CVUZGRVIocmVncy0+Z3ByWzNdKSkgewotCQlwcmludGsoS0VSTl9FUlIgIkZXTk1JOiBjb3JydXB0IHIzXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJGV05NSTogY29ycnVwdCByMyAweCUwMTZseFxuIiwgcmVncy0+Z3ByWzNdKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jCmluZGV4IDZjNDJjZmQuLjU5M2FjY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jCkBAIC01Myw5ICs1Myw5IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL252cmFtLmg+Ci0jaW5jbHVkZSAieGljcy5oIgogI2luY2x1ZGUgPGFzbS9wbWMuaD4KICNpbmNsdWRlIDxhc20vbXBpYy5oPgorI2luY2x1ZGUgPGFzbS94aWNzLmg+CiAjaW5jbHVkZSA8YXNtL3BwYy1wY2kuaD4KICNpbmNsdWRlIDxhc20vaTgyNTkuaD4KICNpbmNsdWRlIDxhc20vdWRiZy5oPgpAQCAtMjA1LDYgKzIwNSw5IEBACiAJCW1waWNfYXNzaWduX2lzdShtcGljLCBuLCBpc3VhZGRyKTsKIAl9CiAKKwkvKiBTZXR1cCB0b3AtbGV2ZWwgZ2V0X2lycSAqLworCXBwY19tZC5nZXRfaXJxID0gbXBpY19nZXRfaXJxOworCiAJLyogQWxsIElTVXMgYXJlIHNldHVwLCBjb21wbGV0ZSBpbml0aWFsaXphdGlvbiAqLwogCW1waWNfaW5pdChtcGljKTsKIApAQCAtMjE0LDcgKzIxNyw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBwc2VyaWVzX3hpY3NfaW5pdF9JUlEodm9pZCkKIHsKLQl4aWNzX2luaXRfSVJRKCk7CisJeGljc19pbml0KCk7CiAJcHNlcmllc19zZXR1cF9pODI1OV9jYXNjYWRlKCk7CiB9CiAKQEAgLTIzOCw3ICsyNDEsNiBAQAogCQlpZiAoc3Ryc3RyKHR5cGVwLCAib3Blbi1waWMiKSkgewogCQkJcFNlcmllc19tcGljX25vZGUgPSBvZl9ub2RlX2dldChucCk7CiAJCQlwcGNfbWQuaW5pdF9JUlEgICAgICAgPSBwc2VyaWVzX21waWNfaW5pdF9JUlE7Ci0JCQlwcGNfbWQuZ2V0X2lycSAgICAgICAgPSBtcGljX2dldF9pcnE7CiAJCQlzZXR1cF9rZXhlY19jcHVfZG93bl9tcGljKCk7CiAJCQlzbXBfaW5pdF9wc2VyaWVzX21waWMoKTsKIAkJCXJldHVybjsKQEAgLTI3Niw2ICsyNzgsOCBAQAogCS5ub3RpZmllcl9jYWxsID0gcGNpX2RuX3JlY29uZmlnX25vdGlmaWVyLAogfTsKIAorc3RydWN0IGttZW1fY2FjaGUgKmR0bF9jYWNoZTsKKwogI2lmZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCiAvKgogICogQWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBkaXNwYXRjaCB0cmFjZSBsb2cgZm9yIGFsbCBwb3NzaWJsZSBjcHVzCkBAIC0yODcsMTggKzI5MSwxMiBAQAogCWludCBjcHUsIHJldDsKIAlzdHJ1Y3QgcGFjYV9zdHJ1Y3QgKnBwOwogCXN0cnVjdCBkdGxfZW50cnkgKmR0bDsKLQlzdHJ1Y3Qga21lbV9jYWNoZSAqZHRsX2NhY2hlOwogCiAJaWYgKCFmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX1NQTFBBUikpCiAJCXJldHVybiAwOwogCi0JZHRsX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoImR0bCIsIERJU1BBVENIX0xPR19CWVRFUywKLQkJCQkJCURJU1BBVENIX0xPR19CWVRFUywgMCwgTlVMTCk7Ci0JaWYgKCFkdGxfY2FjaGUpIHsKLQkJcHJfd2FybigiRmFpbGVkIHRvIGNyZWF0ZSBkaXNwYXRjaCB0cmFjZSBsb2cgYnVmZmVyIGNhY2hlXG4iKTsKLQkJcHJfd2FybigiU3RvbGVuIHRpbWUgc3RhdGlzdGljcyB3aWxsIGJlIHVucmVsaWFibGVcbiIpOworCWlmICghZHRsX2NhY2hlKQogCQlyZXR1cm4gMDsKLQl9CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCXBwID0gJnBhY2FbY3B1XTsKQEAgLTMzMiwxMCArMzMwLDI3IEBACiAKIAlyZXR1cm4gMDsKIH0KLQotZWFybHlfaW5pdGNhbGwoYWxsb2NfZGlzcGF0Y2hfbG9ncyk7CisjZWxzZSAvKiAhQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGFsbG9jX2Rpc3BhdGNoX2xvZ3Modm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KICNlbmRpZiAvKiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORyAqLwogCitzdGF0aWMgaW50IGFsbG9jX2Rpc3BhdGNoX2xvZ19rbWVtX2NhY2hlKHZvaWQpCit7CisJZHRsX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoImR0bCIsIERJU1BBVENIX0xPR19CWVRFUywKKwkJCQkJCURJU1BBVENIX0xPR19CWVRFUywgMCwgTlVMTCk7CisJaWYgKCFkdGxfY2FjaGUpIHsKKwkJcHJfd2FybigiRmFpbGVkIHRvIGNyZWF0ZSBkaXNwYXRjaCB0cmFjZSBsb2cgYnVmZmVyIGNhY2hlXG4iKTsKKwkJcHJfd2FybigiU3RvbGVuIHRpbWUgc3RhdGlzdGljcyB3aWxsIGJlIHVucmVsaWFibGVcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gYWxsb2NfZGlzcGF0Y2hfbG9ncygpOworfQorZWFybHlfaW5pdGNhbGwoYWxsb2NfZGlzcGF0Y2hfbG9nX2ttZW1fY2FjaGUpOworCiBzdGF0aWMgdm9pZCBfX2luaXQgcFNlcmllc19zZXR1cF9hcmNoKHZvaWQpCiB7CiAJLyogRGlzY292ZXIgUElDIHR5cGUgYW5kIHNldHVwIHBwY19tZCBhY2NvcmRpbmdseSAqLwpAQCAtNDAzLDYgKzQxOCwxNiBAQAogI2RlZmluZSBDTU9fQ0hBUkFDVEVSSVNUSUNTX1RPS0VOIDQ0CiAjZGVmaW5lIENNT19NQVhMRU5HVEggMTAyNgogCit2b2lkIHBTZXJpZXNfY29hbGVzY2VfaW5pdCh2b2lkKQoreworCXN0cnVjdCBodmNhbGxfbXBwX3hfZGF0YSBtcHBfeF9kYXRhOworCisJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfQ01PKSAmJiAhaF9nZXRfbXBwX3goJm1wcF94X2RhdGEpKQorCQlwb3dlcnBjX2Zpcm13YXJlX2ZlYXR1cmVzIHw9IEZXX0ZFQVRVUkVfWENNTzsKKwllbHNlCisJCXBvd2VycGNfZmlybXdhcmVfZmVhdHVyZXMgJj0gfkZXX0ZFQVRVUkVfWENNTzsKK30KKwogLyoqCiAgKiBmd19jbW9fZmVhdHVyZV9pbml0IC0gRldfRkVBVFVSRV9DTU8gaXMgbm90IHN0b3JlZCBpbiBpYm0saHlwZXJ0YXMtZnVuY3Rpb25zLAogICogaGFuZGxlIHRoYXQgaGVyZS4gKFN0b2xlbiBmcm9tIHBhcnNlX3N5c3RlbV9wYXJhbWV0ZXJfc3RyaW5nKQpAQCAtNDcyLDYgKzQ5Nyw3IEBACiAJCXByX2RlYnVnKCJDTU8gZW5hYmxlZCwgUHJQU1A9JWQsIFNlY1BTUD0lZFxuIiwgQ01PX1ByUFNQLAogCQkgICAgICAgICBDTU9fU2VjUFNQKTsKIAkJcG93ZXJwY19maXJtd2FyZV9mZWF0dXJlcyB8PSBGV19GRUFUVVJFX0NNTzsKKwkJcFNlcmllc19jb2FsZXNjZV9pbml0KCk7CiAJfSBlbHNlCiAJCXByX2RlYnVnKCJDTU8gbm90IGVuYWJsZWQsIFByUFNQPSVkLCBTZWNQU1A9JWRcbiIsIENNT19QclBTUCwKIAkJICAgICAgICAgQ01PX1NlY1BTUCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc21wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc21wLmMKaW5kZXggYTUwOWM1Mi4uZmJmZmQ3ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYwpAQCAtNDQsMTAgKzQ0LDExIEBACiAjaW5jbHVkZSA8YXNtL21waWMuaD4KICNpbmNsdWRlIDxhc20vdmRzb19kYXRhcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9jcHV0aHJlYWRzLmg+CisjaW5jbHVkZSA8YXNtL21waWMuaD4KKyNpbmNsdWRlIDxhc20veGljcy5oPgogCiAjaW5jbHVkZSAicGxwYXJfd3JhcHBlcnMuaCIKICNpbmNsdWRlICJwc2VyaWVzLmgiCi0jaW5jbHVkZSAieGljcy5oIgogI2luY2x1ZGUgIm9mZmxpbmVfc3RhdGVzLmgiCiAKIApAQCAtMTM2LDcgKzEzNyw2IEBACiAJcmV0dXJuIDE7CiB9CiAKLSNpZmRlZiBDT05GSUdfWElDUwogc3RhdGljIHZvaWQgX19kZXZpbml0IHNtcF94aWNzX3NldHVwX2NwdShpbnQgY3B1KQogewogCWlmIChjcHUgIT0gYm9vdF9jcHVpZCkKQEAgLTE1MSwxNCArMTUxLDEzIEBACiAJc2V0X2RlZmF1bHRfb2ZmbGluZV9zdGF0ZShjcHUpOwogI2VuZGlmCiB9Ci0jZW5kaWYgLyogQ09ORklHX1hJQ1MgKi8KIAotc3RhdGljIHZvaWQgX19kZXZpbml0IHNtcF9wU2VyaWVzX2tpY2tfY3B1KGludCBucikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNtcF9wU2VyaWVzX2tpY2tfY3B1KGludCBucikKIHsKIAlCVUdfT04obnIgPCAwIHx8IG5yID49IE5SX0NQVVMpOwogCiAJaWYgKCFzbXBfc3RhcnR1cF9jcHUobnIpKQotCQlyZXR1cm47CisJCXJldHVybiAtRU5PRU5UOwogCiAJLyoKIAkgKiBUaGUgcHJvY2Vzc29yIGlzIGN1cnJlbnRseSBzcGlubmluZywgd2FpdGluZyBmb3IgdGhlCkBAIC0xODAsNiArMTc5LDggQEAKIAkJCQkJCSJSZXQ9ICVsZFxuIiwgbnIsIHJjKTsKIAl9CiAjZW5kaWYKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNtcF9wU2VyaWVzX2NwdV9ib290YWJsZSh1bnNpZ25lZCBpbnQgbnIpCkBAIC0xOTcsMjMgKzE5OCwyMiBAQAogCiAJcmV0dXJuIDE7CiB9Ci0jaWZkZWYgQ09ORklHX01QSUMKKwogc3RhdGljIHN0cnVjdCBzbXBfb3BzX3QgcFNlcmllc19tcGljX3NtcF9vcHMgPSB7CiAJLm1lc3NhZ2VfcGFzcwk9IHNtcF9tcGljX21lc3NhZ2VfcGFzcywKIAkucHJvYmUJCT0gc21wX21waWNfcHJvYmUsCiAJLmtpY2tfY3B1CT0gc21wX3BTZXJpZXNfa2lja19jcHUsCiAJLnNldHVwX2NwdQk9IHNtcF9tcGljX3NldHVwX2NwdSwKIH07Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfWElDUworCiBzdGF0aWMgc3RydWN0IHNtcF9vcHNfdCBwU2VyaWVzX3hpY3Nfc21wX29wcyA9IHsKLQkubWVzc2FnZV9wYXNzCT0gc21wX3hpY3NfbWVzc2FnZV9wYXNzLAotCS5wcm9iZQkJPSBzbXBfeGljc19wcm9iZSwKKwkubWVzc2FnZV9wYXNzCT0gc21wX211eGVkX2lwaV9tZXNzYWdlX3Bhc3MsCisJLmNhdXNlX2lwaQk9IE5VTEwsCS8qIEZpbGxlZCBhdCBydW50aW1lIGJ5IHhpY3Nfc21wX3Byb2JlKCkgKi8KKwkucHJvYmUJCT0geGljc19zbXBfcHJvYmUsCiAJLmtpY2tfY3B1CT0gc21wX3BTZXJpZXNfa2lja19jcHUsCiAJLnNldHVwX2NwdQk9IHNtcF94aWNzX3NldHVwX2NwdSwKIAkuY3B1X2Jvb3RhYmxlCT0gc21wX3BTZXJpZXNfY3B1X2Jvb3RhYmxlLAogfTsKLSNlbmRpZgogCiAvKiBUaGlzIGlzIGNhbGxlZCB2ZXJ5IGVhcmx5ICovCiBzdGF0aWMgdm9pZCBfX2luaXQgc21wX2luaXRfcHNlcmllcyh2b2lkKQpAQCAtMjQ1LDE0ICsyNDUsMTIgQEAKIAlwcl9kZWJ1ZygiIDwtIHNtcF9pbml0X3BTZXJpZXMoKVxuIik7CiB9CiAKLSNpZmRlZiBDT05GSUdfTVBJQwogdm9pZCBfX2luaXQgc21wX2luaXRfcHNlcmllc19tcGljKHZvaWQpCiB7CiAJc21wX29wcyA9ICZwU2VyaWVzX21waWNfc21wX29wczsKIAogCXNtcF9pbml0X3BzZXJpZXMoKTsKIH0KLSNlbmRpZgogCiB2b2lkIF9faW5pdCBzbXBfaW5pdF9wc2VyaWVzX3hpY3Modm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjkwMTMzLi4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NDkgKzAsMCBAQAotLyoKLSAqIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwMCBJQk0gQ29ycG9yYXRpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9yYWRpeC10cmVlLmg+Ci0jaW5jbHVkZSA8bGludXgvY3B1Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXNpLmg+Ci0jaW5jbHVkZSA8bGludXgvb2YuaD4KLSNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KLQotI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL3NtcC5oPgotI2luY2x1ZGUgPGFzbS9ydGFzLmg+Ci0jaW5jbHVkZSA8YXNtL2h2Y2FsbC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+Ci0KLSNpbmNsdWRlICJ4aWNzLmgiCi0jaW5jbHVkZSAicGxwYXJfd3JhcHBlcnMuaCIKLQotc3RhdGljIHN0cnVjdCBpcnFfaG9zdCAqeGljc19ob3N0OwotCi0jZGVmaW5lIFhJQ1NfSVBJCQkyCi0jZGVmaW5lIFhJQ1NfSVJRX1NQVVJJT1VTCTAKLQotLyogV2FudCBhIHByaW9yaXR5IG90aGVyIHRoYW4gMC4gIFZhcmlvdXMgSFcgaXNzdWVzIHJlcXVpcmUgdGhpcy4gKi8KLSNkZWZpbmUJREVGQVVMVF9QUklPUklUWQk1Ci0KLS8qCi0gKiBNYXJrIElQSXMgYXMgaGlnaGVyIHByaW9yaXR5IHNvIHdlIGNhbiB0YWtlIHRoZW0gaW5zaWRlIGludGVycnVwdHMgdGhhdAotICogYXJlbnQgbWFya2VkIElSUUZfRElTQUJMRUQKLSAqLwotI2RlZmluZSBJUElfUFJJT1JJVFkJCTQKLQotLyogVGhlIGxlYXN0IGZhdm9yZWQgcHJpb3JpdHkgKi8KLSNkZWZpbmUgTE9XRVNUX1BSSU9SSVRZCQkweEZGCi0KLS8qIFRoZSBudW1iZXIgb2YgcHJpb3JpdGllcyBkZWZpbmVkIGFib3ZlICovCi0jZGVmaW5lIE1BWF9OVU1fUFJJT1JJVElFUwkzCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVmYXVsdF9zZXJ2ZXIgPSAweEZGOwotc3RhdGljIHVuc2lnbmVkIGludCBkZWZhdWx0X2Rpc3RyaWJfc2VydmVyID0gMDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZXJydXB0X3NlcnZlcl9zaXplID0gODsKLQotLyogUlRBUyBzZXJ2aWNlIHRva2VucyAqLwotc3RhdGljIGludCBpYm1fZ2V0X3hpdmU7Ci1zdGF0aWMgaW50IGlibV9zZXRfeGl2ZTsKLXN0YXRpYyBpbnQgaWJtX2ludF9vbjsKLXN0YXRpYyBpbnQgaWJtX2ludF9vZmY7Ci0KLXN0cnVjdCB4aWNzX2NwcHIgewotCXVuc2lnbmVkIGNoYXIgc3RhY2tbTUFYX05VTV9QUklPUklUSUVTXTsKLQlpbnQgaW5kZXg7Ci19OwotCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHhpY3NfY3BwciwgeGljc19jcHByKTsKLQotLyogRGlyZWN0IGhhcmR3YXJlIGxvdyBsZXZlbCBhY2Nlc3NvcnMgKi8KLQotLyogVGhlIHBhcnQgb2YgdGhlIGludGVycnVwdCBwcmVzZW50YXRpb24gbGF5ZXIgdGhhdCB3ZSBjYXJlIGFib3V0ICovCi1zdHJ1Y3QgeGljc19pcGwgewotCXVuaW9uIHsKLQkJdTMyIHdvcmQ7Ci0JCXU4IGJ5dGVzWzRdOwotCX0geGlycl9wb2xsOwotCXVuaW9uIHsKLQkJdTMyIHdvcmQ7Ci0JCXU4IGJ5dGVzWzRdOwotCX0geGlycjsKLQl1MzIgZHVtbXk7Ci0JdW5pb24gewotCQl1MzIgd29yZDsKLQkJdTggYnl0ZXNbNF07Ci0JfSBxaXJyOwotfTsKLQotc3RhdGljIHN0cnVjdCB4aWNzX2lwbCBfX2lvbWVtICp4aWNzX3Blcl9jcHVbTlJfQ1BVU107Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRpcmVjdF94aXJyX2luZm9fZ2V0KHZvaWQpCi17Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCXJldHVybiBpbl9iZTMyKCZ4aWNzX3Blcl9jcHVbY3B1XS0+eGlyci53b3JkKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRpcmVjdF94aXJyX2luZm9fc2V0KHVuc2lnbmVkIGludCB2YWx1ZSkKLXsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0Jb3V0X2JlMzIoJnhpY3NfcGVyX2NwdVtjcHVdLT54aXJyLndvcmQsIHZhbHVlKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRpcmVjdF9jcHByX2luZm8odTggdmFsdWUpCi17Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCW91dF84KCZ4aWNzX3Blcl9jcHVbY3B1XS0+eGlyci5ieXRlc1swXSwgdmFsdWUpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZGlyZWN0X3FpcnJfaW5mbyhpbnQgbl9jcHUsIHU4IHZhbHVlKQotewotCW91dF84KCZ4aWNzX3Blcl9jcHVbbl9jcHVdLT5xaXJyLmJ5dGVzWzBdLCB2YWx1ZSk7Ci19Ci0KLQotLyogTFBBUiBsb3cgbGV2ZWwgYWNjZXNzb3JzICovCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGxwYXJfeGlycl9pbmZvX2dldCh1bnNpZ25lZCBjaGFyIGNwcHIpCi17Ci0JdW5zaWduZWQgbG9uZyBscGFyX3JjOwotCXVuc2lnbmVkIGxvbmcgcmV0dXJuX3ZhbHVlOwotCi0JbHBhcl9yYyA9IHBscGFyX3hpcnIoJnJldHVybl92YWx1ZSwgY3Bwcik7Ci0JaWYgKGxwYXJfcmMgIT0gSF9TVUNDRVNTKQotCQlwYW5pYygiIGJhZCByZXR1cm4gY29kZSB4aXJyIC0gcmMgPSAlbHhcbiIsIGxwYXJfcmMpOwotCXJldHVybiAodW5zaWduZWQgaW50KXJldHVybl92YWx1ZTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGxwYXJfeGlycl9pbmZvX3NldCh1bnNpZ25lZCBpbnQgdmFsdWUpCi17Ci0JdW5zaWduZWQgbG9uZyBscGFyX3JjOwotCi0JbHBhcl9yYyA9IHBscGFyX2VvaSh2YWx1ZSk7Ci0JaWYgKGxwYXJfcmMgIT0gSF9TVUNDRVNTKQotCQlwYW5pYygiYmFkIHJldHVybiBjb2RlIEVPSSAtIHJjID0gJWxkLCB2YWx1ZT0leFxuIiwgbHBhcl9yYywKLQkJICAgICAgdmFsdWUpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbHBhcl9jcHByX2luZm8odTggdmFsdWUpCi17Ci0JdW5zaWduZWQgbG9uZyBscGFyX3JjOwotCi0JbHBhcl9yYyA9IHBscGFyX2NwcHIodmFsdWUpOwotCWlmIChscGFyX3JjICE9IEhfU1VDQ0VTUykKLQkJcGFuaWMoImJhZCByZXR1cm4gY29kZSBjcHByIC0gcmMgPSAlbHhcbiIsIGxwYXJfcmMpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbHBhcl9xaXJyX2luZm8oaW50IG5fY3B1ICwgdTggdmFsdWUpCi17Ci0JdW5zaWduZWQgbG9uZyBscGFyX3JjOwotCi0JbHBhcl9yYyA9IHBscGFyX2lwaShnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKG5fY3B1KSwgdmFsdWUpOwotCWlmIChscGFyX3JjICE9IEhfU1VDQ0VTUykKLQkJcGFuaWMoImJhZCByZXR1cm4gY29kZSBxaXJyIC0gcmMgPSAlbHhcbiIsIGxwYXJfcmMpOwotfQotCi0KLS8qIEludGVyZmFjZSB0byBnZW5lcmljIGlycSBzdWJzeXN0ZW0gKi8KLQotI2lmZGVmIENPTkZJR19TTVAKLS8qCi0gKiBGb3IgdGhlIG1vbWVudCB3ZSBvbmx5IGltcGxlbWVudCBkZWxpdmVyeSB0byBhbGwgY3B1cyBvciBvbmUgY3B1LgotICoKLSAqIElmIHRoZSByZXF1ZXN0ZWQgYWZmaW5pdHkgaXMgY3B1X2FsbF9tYXNrLCB3ZSBzZXQgZ2xvYmFsIGFmZmluaXR5LgotICogSWYgbm90IHdlIHNldCBpdCB0byB0aGUgZmlyc3QgY3B1IGluIHRoZSBtYXNrLCBldmVuIGlmIG11bHRpcGxlIGNwdXMKLSAqIGFyZSBzZXQuIFRoaXMgaXMgc28gdGhpbmdzIGxpa2UgaXJxYmFsYW5jZSAod2hpY2ggc2V0IGNvcmUgYW5kIHBhY2thZ2UKLSAqIHdpZGUgYWZmaW5pdGllcykgZG8gdGhlIHJpZ2h0IHRoaW5nLgotICovCi1zdGF0aWMgaW50IGdldF9pcnFfc2VydmVyKHVuc2lnbmVkIGludCB2aXJxLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKLQkJCSAgdW5zaWduZWQgaW50IHN0cmljdF9jaGVjaykKLXsKLQotCWlmICghZGlzdHJpYnV0ZV9pcnFzKQotCQlyZXR1cm4gZGVmYXVsdF9zZXJ2ZXI7Ci0KLQlpZiAoIWNwdW1hc2tfc3Vic2V0KGNwdV9wb3NzaWJsZV9tYXNrLCBjcHVtYXNrKSkgewotCQlpbnQgc2VydmVyID0gY3B1bWFza19maXJzdF9hbmQoY3B1X29ubGluZV9tYXNrLCBjcHVtYXNrKTsKLQotCQlpZiAoc2VydmVyIDwgbnJfY3B1X2lkcykKLQkJCXJldHVybiBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHNlcnZlcik7Ci0KLQkJaWYgKHN0cmljdF9jaGVjaykKLQkJCXJldHVybiAtMTsKLQl9Ci0KLQkvKgotCSAqIFdvcmthcm91bmQgaXNzdWUgd2l0aCBzb21lIHZlcnNpb25zIG9mIEpTMjAgZmlybXdhcmUgdGhhdAotCSAqIGRlbGl2ZXIgaW50ZXJydXB0cyB0byBjcHVzIHdoaWNoIGhhdmVuJ3QgYmVlbiBzdGFydGVkLiBUaGlzCi0JICogaGFwcGVucyB3aGVuIHVzaW5nIHRoZSBtYXhjcHVzPSBib290IG9wdGlvbi4KLQkgKi8KLQlpZiAoY3B1bWFza19lcXVhbChjcHVfb25saW5lX21hc2ssIGNwdV9wcmVzZW50X21hc2spKQotCQlyZXR1cm4gZGVmYXVsdF9kaXN0cmliX3NlcnZlcjsKLQotCXJldHVybiBkZWZhdWx0X3NlcnZlcjsKLX0KLSNlbHNlCi0jZGVmaW5lIGdldF9pcnFfc2VydmVyKHZpcnEsIGNwdW1hc2ssIHN0cmljdF9jaGVjaykgKGRlZmF1bHRfc2VydmVyKQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIHhpY3NfdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCi17Ci0JdW5zaWduZWQgaW50IGh3aXJxOwotCWludCBjYWxsX3N0YXR1czsKLQlpbnQgc2VydmVyOwotCi0JcHJfZGV2ZWwoInhpY3M6IHVubWFzayB2aXJxICVkXG4iLCBkLT5pcnEpOwotCi0JaHdpcnEgPSAodW5zaWduZWQgaW50KWlycV9tYXBbZC0+aXJxXS5od2lycTsKLQlwcl9kZXZlbCgiIC0+IG1hcCB0byBod2lycSAweCV4XG4iLCBod2lycSk7Ci0JaWYgKGh3aXJxID09IFhJQ1NfSVBJIHx8IGh3aXJxID09IFhJQ1NfSVJRX1NQVVJJT1VTKQotCQlyZXR1cm47Ci0KLQlzZXJ2ZXIgPSBnZXRfaXJxX3NlcnZlcihkLT5pcnEsIGQtPmFmZmluaXR5LCAwKTsKLQotCWNhbGxfc3RhdHVzID0gcnRhc19jYWxsKGlibV9zZXRfeGl2ZSwgMywgMSwgTlVMTCwgaHdpcnEsIHNlcnZlciwKLQkJCQlERUZBVUxUX1BSSU9SSVRZKTsKLQlpZiAoY2FsbF9zdGF0dXMgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJCSIlczogaWJtX3NldF94aXZlIGlycSAldSBzZXJ2ZXIgJXggcmV0dXJuZWQgJWRcbiIsCi0JCQlfX2Z1bmNfXywgaHdpcnEsIHNlcnZlciwgY2FsbF9zdGF0dXMpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogTm93IHVubWFzayB0aGUgaW50ZXJydXB0IChvZnRlbiBhIG5vLW9wKSAqLwotCWNhbGxfc3RhdHVzID0gcnRhc19jYWxsKGlibV9pbnRfb24sIDEsIDEsIE5VTEwsIGh3aXJxKTsKLQlpZiAoY2FsbF9zdGF0dXMgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpYm1faW50X29uIGlycT0ldSByZXR1cm5lZCAlZFxuIiwKLQkJCV9fZnVuY19fLCBod2lycSwgY2FsbF9zdGF0dXMpOwotCQlyZXR1cm47Ci0JfQotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHhpY3Nfc3RhcnR1cChzdHJ1Y3QgaXJxX2RhdGEgKmQpCi17Ci0JLyoKLQkgKiBUaGUgZ2VuZXJpYyBNU0kgY29kZSByZXR1cm5zIHdpdGggdGhlIGludGVycnVwdCBkaXNhYmxlZCBvbiB0aGUKLQkgKiBjYXJkLCB1c2luZyB0aGUgTVNJIG1hc2sgYml0cy4gRmlybXdhcmUgZG9lc24ndCBhcHBlYXIgdG8gdW5tYXNrCi0JICogYXQgdGhhdCBsZXZlbCwgc28gd2UgZG8gaXQgaGVyZSBieSBoYW5kLgotCSAqLwotCWlmIChkLT5tc2lfZGVzYykKLQkJdW5tYXNrX21zaV9pcnEoZCk7Ci0KLQkvKiB1bm1hc2sgaXQgKi8KLQl4aWNzX3VubWFza19pcnEoZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHhpY3NfbWFza19yZWFsX2lycSh1bnNpZ25lZCBpbnQgaHdpcnEpCi17Ci0JaW50IGNhbGxfc3RhdHVzOwotCi0JaWYgKGh3aXJxID09IFhJQ1NfSVBJKQotCQlyZXR1cm47Ci0KLQljYWxsX3N0YXR1cyA9IHJ0YXNfY2FsbChpYm1faW50X29mZiwgMSwgMSwgTlVMTCwgaHdpcnEpOwotCWlmIChjYWxsX3N0YXR1cyAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGlibV9pbnRfb2ZmIGlycT0ldSByZXR1cm5lZCAlZFxuIiwKLQkJCV9fZnVuY19fLCBod2lycSwgY2FsbF9zdGF0dXMpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogSGF2ZSB0byBzZXQgWElWRSB0byAweGZmIHRvIGJlIGFibGUgdG8gcmVtb3ZlIGEgc2xvdCAqLwotCWNhbGxfc3RhdHVzID0gcnRhc19jYWxsKGlibV9zZXRfeGl2ZSwgMywgMSwgTlVMTCwgaHdpcnEsCi0JCQkJZGVmYXVsdF9zZXJ2ZXIsIDB4ZmYpOwotCWlmIChjYWxsX3N0YXR1cyAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGlibV9zZXRfeGl2ZSgweGZmKSBpcnE9JXUgcmV0dXJuZWQgJWRcbiIsCi0JCQlfX2Z1bmNfXywgaHdpcnEsIGNhbGxfc3RhdHVzKTsKLQkJcmV0dXJuOwotCX0KLX0KLQotc3RhdGljIHZvaWQgeGljc19tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCi17Ci0JdW5zaWduZWQgaW50IGh3aXJxOwotCi0JcHJfZGV2ZWwoInhpY3M6IG1hc2sgdmlycSAlZFxuIiwgZC0+aXJxKTsKLQotCWh3aXJxID0gKHVuc2lnbmVkIGludClpcnFfbWFwW2QtPmlycV0uaHdpcnE7Ci0JaWYgKGh3aXJxID09IFhJQ1NfSVBJIHx8IGh3aXJxID09IFhJQ1NfSVJRX1NQVVJJT1VTKQotCQlyZXR1cm47Ci0JeGljc19tYXNrX3JlYWxfaXJxKGh3aXJxKTsKLX0KLQotc3RhdGljIHZvaWQgeGljc19tYXNrX3Vua25vd25fdmVjKHVuc2lnbmVkIGludCB2ZWMpCi17Ci0JcHJpbnRrKEtFUk5fRVJSICJJbnRlcnJ1cHQgJXUgKHJlYWwpIGlzIGludmFsaWQsIGRpc2FibGluZyBpdC5cbiIsIHZlYyk7Ci0JeGljc19tYXNrX3JlYWxfaXJxKHZlYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHhpY3NfeGlycl92ZWN0b3IodW5zaWduZWQgaW50IHhpcnIpCi17Ci0JLyoKLQkgKiBUaGUgdG9wIGJ5dGUgaXMgdGhlIG9sZCBjcHByLCB0byBiZSByZXN0b3JlZCBvbiBFT0kuCi0JICogVGhlIHJlbWFpbmluZyAyNCBiaXRzIGFyZSB0aGUgdmVjdG9yLgotCSAqLwotCXJldHVybiB4aXJyICYgMHgwMGZmZmZmZjsKLX0KLQotc3RhdGljIHZvaWQgcHVzaF9jcHByKHVuc2lnbmVkIGludCB2ZWMpCi17Ci0Jc3RydWN0IHhpY3NfY3BwciAqb3NfY3BwciA9ICZfX2dldF9jcHVfdmFyKHhpY3NfY3Bwcik7Ci0KLQlpZiAoV0FSTl9PTihvc19jcHByLT5pbmRleCA+PSBNQVhfTlVNX1BSSU9SSVRJRVMgLSAxKSkKLQkJcmV0dXJuOwotCi0JaWYgKHZlYyA9PSBYSUNTX0lQSSkKLQkJb3NfY3Bwci0+c3RhY2tbKytvc19jcHByLT5pbmRleF0gPSBJUElfUFJJT1JJVFk7Ci0JZWxzZQotCQlvc19jcHByLT5zdGFja1srK29zX2NwcHItPmluZGV4XSA9IERFRkFVTFRfUFJJT1JJVFk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgeGljc19nZXRfaXJxX2RpcmVjdCh2b2lkKQotewotCXVuc2lnbmVkIGludCB4aXJyID0gZGlyZWN0X3hpcnJfaW5mb19nZXQoKTsKLQl1bnNpZ25lZCBpbnQgdmVjID0geGljc194aXJyX3ZlY3Rvcih4aXJyKTsKLQl1bnNpZ25lZCBpbnQgaXJxOwotCi0JaWYgKHZlYyA9PSBYSUNTX0lSUV9TUFVSSU9VUykKLQkJcmV0dXJuIE5PX0lSUTsKLQotCWlycSA9IGlycV9yYWRpeF9yZXZtYXBfbG9va3VwKHhpY3NfaG9zdCwgdmVjKTsKLQlpZiAobGlrZWx5KGlycSAhPSBOT19JUlEpKSB7Ci0JCXB1c2hfY3Bwcih2ZWMpOwotCQlyZXR1cm4gaXJxOwotCX0KLQotCS8qIFdlIGRvbid0IGhhdmUgYSBsaW51eCBtYXBwaW5nLCBzbyBoYXZlIHJ0YXMgbWFzayBpdC4gKi8KLQl4aWNzX21hc2tfdW5rbm93bl92ZWModmVjKTsKLQotCS8qIFdlIG1pZ2h0IGxlYXJuIGFib3V0IGl0IGxhdGVyLCBzbyBFT0kgaXQgKi8KLQlkaXJlY3RfeGlycl9pbmZvX3NldCh4aXJyKTsKLQlyZXR1cm4gTk9fSVJROwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHhpY3NfZ2V0X2lycV9scGFyKHZvaWQpCi17Ci0Jc3RydWN0IHhpY3NfY3BwciAqb3NfY3BwciA9ICZfX2dldF9jcHVfdmFyKHhpY3NfY3Bwcik7Ci0JdW5zaWduZWQgaW50IHhpcnIgPSBscGFyX3hpcnJfaW5mb19nZXQob3NfY3Bwci0+c3RhY2tbb3NfY3Bwci0+aW5kZXhdKTsKLQl1bnNpZ25lZCBpbnQgdmVjID0geGljc194aXJyX3ZlY3Rvcih4aXJyKTsKLQl1bnNpZ25lZCBpbnQgaXJxOwotCi0JaWYgKHZlYyA9PSBYSUNTX0lSUV9TUFVSSU9VUykKLQkJcmV0dXJuIE5PX0lSUTsKLQotCWlycSA9IGlycV9yYWRpeF9yZXZtYXBfbG9va3VwKHhpY3NfaG9zdCwgdmVjKTsKLQlpZiAobGlrZWx5KGlycSAhPSBOT19JUlEpKSB7Ci0JCXB1c2hfY3Bwcih2ZWMpOwotCQlyZXR1cm4gaXJxOwotCX0KLQotCS8qIFdlIGRvbid0IGhhdmUgYSBsaW51eCBtYXBwaW5nLCBzbyBoYXZlIFJUQVMgbWFzayBpdC4gKi8KLQl4aWNzX21hc2tfdW5rbm93bl92ZWModmVjKTsKLQotCS8qIFdlIG1pZ2h0IGxlYXJuIGFib3V0IGl0IGxhdGVyLCBzbyBFT0kgaXQgKi8KLQlscGFyX3hpcnJfaW5mb19zZXQoeGlycik7Ci0JcmV0dXJuIE5PX0lSUTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgcG9wX2NwcHIodm9pZCkKLXsKLQlzdHJ1Y3QgeGljc19jcHByICpvc19jcHByID0gJl9fZ2V0X2NwdV92YXIoeGljc19jcHByKTsKLQotCWlmIChXQVJOX09OKG9zX2NwcHItPmluZGV4IDwgMSkpCi0JCXJldHVybiBMT1dFU1RfUFJJT1JJVFk7Ci0KLQlyZXR1cm4gb3NfY3Bwci0+c3RhY2tbLS1vc19jcHByLT5pbmRleF07Ci19Ci0KLXN0YXRpYyB2b2lkIHhpY3NfZW9pX2RpcmVjdChzdHJ1Y3QgaXJxX2RhdGEgKmQpCi17Ci0JdW5zaWduZWQgaW50IGh3aXJxID0gKHVuc2lnbmVkIGludClpcnFfbWFwW2QtPmlycV0uaHdpcnE7Ci0KLQlpb3N5bmMoKTsKLQlkaXJlY3RfeGlycl9pbmZvX3NldCgocG9wX2NwcHIoKSA8PCAyNCkgfCBod2lycSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHhpY3NfZW9pX2xwYXIoc3RydWN0IGlycV9kYXRhICpkKQotewotCXVuc2lnbmVkIGludCBod2lycSA9ICh1bnNpZ25lZCBpbnQpaXJxX21hcFtkLT5pcnFdLmh3aXJxOwotCi0JaW9zeW5jKCk7Ci0JbHBhcl94aXJyX2luZm9fc2V0KChwb3BfY3BwcigpIDw8IDI0KSB8IGh3aXJxKTsKLX0KLQotc3RhdGljIGludAoteGljc19zZXRfYWZmaW5pdHkoc3RydWN0IGlycV9kYXRhICpkLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywgYm9vbCBmb3JjZSkKLXsKLQl1bnNpZ25lZCBpbnQgaHdpcnE7Ci0JaW50IHN0YXR1czsKLQlpbnQgeGljc19zdGF0dXNbMl07Ci0JaW50IGlycV9zZXJ2ZXI7Ci0KLQlod2lycSA9ICh1bnNpZ25lZCBpbnQpaXJxX21hcFtkLT5pcnFdLmh3aXJxOwotCWlmIChod2lycSA9PSBYSUNTX0lQSSB8fCBod2lycSA9PSBYSUNTX0lSUV9TUFVSSU9VUykKLQkJcmV0dXJuIC0xOwotCi0Jc3RhdHVzID0gcnRhc19jYWxsKGlibV9nZXRfeGl2ZSwgMSwgMywgeGljc19zdGF0dXMsIGh3aXJxKTsKLQotCWlmIChzdGF0dXMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogaWJtLGdldC14aXZlIGlycT0ldSByZXR1cm5zICVkXG4iLAotCQkJX19mdW5jX18sIGh3aXJxLCBzdGF0dXMpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JaXJxX3NlcnZlciA9IGdldF9pcnFfc2VydmVyKGQtPmlycSwgY3B1bWFzaywgMSk7Ci0JaWYgKGlycV9zZXJ2ZXIgPT0gLTEpIHsKLQkJY2hhciBjcHVsaXN0WzEyOF07Ci0JCWNwdW1hc2tfc2NucHJpbnRmKGNwdWxpc3QsIHNpemVvZihjcHVsaXN0KSwgY3B1bWFzayk7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSIlczogTm8gb25saW5lIGNwdXMgaW4gdGhlIG1hc2sgJXMgZm9yIGlycSAlZFxuIiwKLQkJCV9fZnVuY19fLCBjcHVsaXN0LCBkLT5pcnEpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0Jc3RhdHVzID0gcnRhc19jYWxsKGlibV9zZXRfeGl2ZSwgMywgMSwgTlVMTCwKLQkJCQlod2lycSwgaXJxX3NlcnZlciwgeGljc19zdGF0dXNbMV0pOwotCi0JaWYgKHN0YXR1cykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpYm0sc2V0LXhpdmUgaXJxPSV1IHJldHVybnMgJWRcbiIsCi0JCQlfX2Z1bmNfXywgaHdpcnEsIHN0YXR1cyk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB4aWNzX3BpY19kaXJlY3QgPSB7Ci0JLm5hbWUgPSAiWElDUyIsCi0JLmlycV9zdGFydHVwID0geGljc19zdGFydHVwLAotCS5pcnFfbWFzayA9IHhpY3NfbWFza19pcnEsCi0JLmlycV91bm1hc2sgPSB4aWNzX3VubWFza19pcnEsCi0JLmlycV9lb2kgPSB4aWNzX2VvaV9kaXJlY3QsCi0JLmlycV9zZXRfYWZmaW5pdHkgPSB4aWNzX3NldF9hZmZpbml0eQotfTsKLQotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB4aWNzX3BpY19scGFyID0gewotCS5uYW1lID0gIlhJQ1MiLAotCS5pcnFfc3RhcnR1cCA9IHhpY3Nfc3RhcnR1cCwKLQkuaXJxX21hc2sgPSB4aWNzX21hc2tfaXJxLAotCS5pcnFfdW5tYXNrID0geGljc191bm1hc2tfaXJxLAotCS5pcnFfZW9pID0geGljc19lb2lfbHBhciwKLQkuaXJxX3NldF9hZmZpbml0eSA9IHhpY3Nfc2V0X2FmZmluaXR5Ci19OwotCi0KLS8qIEludGVyZmFjZSB0byBhcmNoIGlycSBjb250cm9sbGVyIHN1YnN5c3RlbSBsYXllciAqLwotCi0vKiBQb2ludHMgdG8gdGhlIGlycV9jaGlwIHdlJ3JlIGFjdHVhbGx5IHVzaW5nICovCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwICp4aWNzX2lycV9jaGlwOwotCi1zdGF0aWMgaW50IHhpY3NfaG9zdF9tYXRjaChzdHJ1Y3QgaXJxX2hvc3QgKmgsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKLXsKLQkvKiBJQk0gbWFjaGluZXMgaGF2ZSBpbnRlcnJ1cHQgcGFyZW50cyBvZiB2YXJpb3VzIGZ1bmt5IHR5cGVzIGZvciB0aGluZ3MKLQkgKiBsaWtlIHZkZXZpY2VzLCBldmVudHMsIGV0Yy4uLiBUaGUgdHJpY2sgd2UgdXNlIGhlcmUgaXMgdG8gbWF0Y2gKLQkgKiBldmVyeXRoaW5nIGhlcmUgZXhjZXB0IHRoZSBsZWdhY3kgODI1OSB3aGljaCBpcyBjb21wYXRpYmxlICJjaHJwLGlpYyIKLQkgKi8KLQlyZXR1cm4gIW9mX2RldmljZV9pc19jb21wYXRpYmxlKG5vZGUsICJjaHJwLGlpYyIpOwotfQotCi1zdGF0aWMgaW50IHhpY3NfaG9zdF9tYXAoc3RydWN0IGlycV9ob3N0ICpoLCB1bnNpZ25lZCBpbnQgdmlycSwKLQkJCSBpcnFfaHdfbnVtYmVyX3QgaHcpCi17Ci0JcHJfZGV2ZWwoInhpY3M6IG1hcCB2aXJxICVkLCBod2lycSAweCVseFxuIiwgdmlycSwgaHcpOwotCi0JLyogSW5zZXJ0IHRoZSBpbnRlcnJ1cHQgbWFwcGluZyBpbnRvIHRoZSByYWRpeCB0cmVlIGZvciBmYXN0IGxvb2t1cCAqLwotCWlycV9yYWRpeF9yZXZtYXBfaW5zZXJ0KHhpY3NfaG9zdCwgdmlycSwgaHcpOwotCi0JaXJxX3NldF9zdGF0dXNfZmxhZ3ModmlycSwgSVJRX0xFVkVMKTsKLQlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIodmlycSwgeGljc19pcnFfY2hpcCwgaGFuZGxlX2Zhc3Rlb2lfaXJxKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB4aWNzX2hvc3RfeGxhdGUoc3RydWN0IGlycV9ob3N0ICpoLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmN0LAotCQkJICAgY29uc3QgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKLQkJCSAgIGlycV9od19udW1iZXJfdCAqb3V0X2h3aXJxLCB1bnNpZ25lZCBpbnQgKm91dF9mbGFncykKLQotewotCS8qIEN1cnJlbnQgeGljcyBpbXBsZW1lbnRhdGlvbiB0cmFuc2xhdGVzIGV2ZXJ5dGhpbmcKLQkgKiB0byBsZXZlbC4gSXQgaXMgbm90IHRlY2huaWNhbGx5IHJpZ2h0IGZvciBNU0lzIGJ1dCB0aGlzCi0JICogaXMgaXJyZWxldmFudCBhdCB0aGlzIHBvaW50LiBXZSBtaWdodCBnZXQgc21hcnRlciBpbiB0aGUgZnV0dXJlCi0JICovCi0JKm91dF9od2lycSA9IGludHNwZWNbMF07Ci0JKm91dF9mbGFncyA9IElSUV9UWVBFX0xFVkVMX0xPVzsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGlycV9ob3N0X29wcyB4aWNzX2hvc3Rfb3BzID0gewotCS5tYXRjaCA9IHhpY3NfaG9zdF9tYXRjaCwKLQkubWFwID0geGljc19ob3N0X21hcCwKLQkueGxhdGUgPSB4aWNzX2hvc3RfeGxhdGUsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgeGljc19pbml0X2hvc3Qodm9pZCkKLXsKLQlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9MUEFSKSkKLQkJeGljc19pcnFfY2hpcCA9ICZ4aWNzX3BpY19scGFyOwotCWVsc2UKLQkJeGljc19pcnFfY2hpcCA9ICZ4aWNzX3BpY19kaXJlY3Q7Ci0KLQl4aWNzX2hvc3QgPSBpcnFfYWxsb2NfaG9zdChOVUxMLCBJUlFfSE9TVF9NQVBfVFJFRSwgMCwgJnhpY3NfaG9zdF9vcHMsCi0JCQkJICAgWElDU19JUlFfU1BVUklPVVMpOwotCUJVR19PTih4aWNzX2hvc3QgPT0gTlVMTCk7Ci0JaXJxX3NldF9kZWZhdWx0X2hvc3QoeGljc19ob3N0KTsKLX0KLQotCi0vKiBJbnRlci1wcm9jZXNzb3IgaW50ZXJydXB0IHN1cHBvcnQgKi8KLQotI2lmZGVmIENPTkZJR19TTVAKLS8qCi0gKiBYSUNTIG9ubHkgaGFzIGEgc2luZ2xlIElQSSwgc28gZW5jb2RlIHRoZSBtZXNzYWdlcyBwZXIgQ1BVCi0gKi8KLXN0YXRpYyBERUZJTkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRCh1bnNpZ25lZCBsb25nLCB4aWNzX2lwaV9tZXNzYWdlKTsKLQotc3RhdGljIGlubGluZSB2b2lkIHNtcF94aWNzX2RvX21lc3NhZ2UoaW50IGNwdSwgaW50IG1zZykKLXsKLQl1bnNpZ25lZCBsb25nICp0Z3QgPSAmcGVyX2NwdSh4aWNzX2lwaV9tZXNzYWdlLCBjcHUpOwotCi0Jc2V0X2JpdChtc2csIHRndCk7Ci0JbWIoKTsKLQlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9MUEFSKSkKLQkJbHBhcl9xaXJyX2luZm8oY3B1LCBJUElfUFJJT1JJVFkpOwotCWVsc2UKLQkJZGlyZWN0X3FpcnJfaW5mbyhjcHUsIElQSV9QUklPUklUWSk7Ci19Ci0KLXZvaWQgc21wX3hpY3NfbWVzc2FnZV9wYXNzKGludCB0YXJnZXQsIGludCBtc2cpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlpZiAodGFyZ2V0IDwgTlJfQ1BVUykgewotCQlzbXBfeGljc19kb19tZXNzYWdlKHRhcmdldCwgbXNnKTsKLQl9IGVsc2UgewotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKLQkJCWlmICh0YXJnZXQgPT0gTVNHX0FMTF9CVVRfU0VMRgotCQkJICAgICYmIGkgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQotCQkJCWNvbnRpbnVlOwotCQkJc21wX3hpY3NfZG9fbWVzc2FnZShpLCBtc2cpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3QgeGljc19pcGlfZGlzcGF0Y2goaW50IGNwdSkKLXsKLQl1bnNpZ25lZCBsb25nICp0Z3QgPSAmcGVyX2NwdSh4aWNzX2lwaV9tZXNzYWdlLCBjcHUpOwotCi0JbWIoKTsJLyogb3JkZXIgbW1pbyBjbGVhcmluZyBxaXJyICovCi0Jd2hpbGUgKCp0Z3QpIHsKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX0NBTExfRlVOQ1RJT04sIHRndCkpIHsKLQkJCXNtcF9tZXNzYWdlX3JlY3YoUFBDX01TR19DQUxMX0ZVTkNUSU9OKTsKLQkJfQotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBQQ19NU0dfUkVTQ0hFRFVMRSwgdGd0KSkgewotCQkJc21wX21lc3NhZ2VfcmVjdihQUENfTVNHX1JFU0NIRURVTEUpOwotCQl9Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUFBDX01TR19DQUxMX0ZVTkNfU0lOR0xFLCB0Z3QpKSB7Ci0JCQlzbXBfbWVzc2FnZV9yZWN2KFBQQ19NU0dfQ0FMTF9GVU5DX1NJTkdMRSk7Ci0JCX0KLSNpZiBkZWZpbmVkKENPTkZJR19ERUJVR0dFUikgfHwgZGVmaW5lZChDT05GSUdfS0VYRUMpCi0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUFBDX01TR19ERUJVR0dFUl9CUkVBSywgdGd0KSkgewotCQkJc21wX21lc3NhZ2VfcmVjdihQUENfTVNHX0RFQlVHR0VSX0JSRUFLKTsKLQkJfQotI2VuZGlmCi0JfQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIGlycXJldHVybl90IHhpY3NfaXBpX2FjdGlvbl9kaXJlY3QoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlkaXJlY3RfcWlycl9pbmZvKGNwdSwgMHhmZik7Ci0KLQlyZXR1cm4geGljc19pcGlfZGlzcGF0Y2goY3B1KTsKLX0KLQotc3RhdGljIGlycXJldHVybl90IHhpY3NfaXBpX2FjdGlvbl9scGFyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JbHBhcl9xaXJyX2luZm8oY3B1LCAweGZmKTsKLQotCXJldHVybiB4aWNzX2lwaV9kaXNwYXRjaChjcHUpOwotfQotCi1zdGF0aWMgdm9pZCB4aWNzX3JlcXVlc3RfaXBpKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IGlwaTsKLQlpbnQgcmM7Ci0KLQlpcGkgPSBpcnFfY3JlYXRlX21hcHBpbmcoeGljc19ob3N0LCBYSUNTX0lQSSk7Ci0JQlVHX09OKGlwaSA9PSBOT19JUlEpOwotCi0JLyoKLQkgKiBJUElzIGFyZSBtYXJrZWQgSVJRRl9ESVNBQkxFRCBhcyB0aGV5IG11c3QgcnVuIHdpdGggaXJxcwotCSAqIGRpc2FibGVkCi0JICovCi0JaXJxX3NldF9oYW5kbGVyKGlwaSwgaGFuZGxlX3BlcmNwdV9pcnEpOwotCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQotCQlyYyA9IHJlcXVlc3RfaXJxKGlwaSwgeGljc19pcGlfYWN0aW9uX2xwYXIsCi0JCQkJSVJRRl9ESVNBQkxFRHxJUlFGX1BFUkNQVSwgIklQSSIsIE5VTEwpOwotCWVsc2UKLQkJcmMgPSByZXF1ZXN0X2lycShpcGksIHhpY3NfaXBpX2FjdGlvbl9kaXJlY3QsCi0JCQkJSVJRRl9ESVNBQkxFRHxJUlFGX1BFUkNQVSwgIklQSSIsIE5VTEwpOwotCUJVR19PTihyYyk7Ci19Ci0KLWludCBfX2luaXQgc21wX3hpY3NfcHJvYmUodm9pZCkKLXsKLQl4aWNzX3JlcXVlc3RfaXBpKCk7Ci0KLQlyZXR1cm4gY3B1bWFza193ZWlnaHQoY3B1X3Bvc3NpYmxlX21hc2spOwotfQotCi0jZW5kaWYgLyogQ09ORklHX1NNUCAqLwotCi0KLS8qIEluaXRpYWxpemF0aW9uICovCi0KLXN0YXRpYyB2b2lkIHhpY3NfdXBkYXRlX2lycV9zZXJ2ZXJzKHZvaWQpCi17Ci0JaW50IGksIGo7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKLQl1MzIgaWxlbjsKLQljb25zdCB1MzIgKmlyZWc7Ci0JdTMyIGhjcHVpZDsKLQotCS8qIEZpbmQgdGhlIHNlcnZlciBudW1iZXJzIGZvciB0aGUgYm9vdCBjcHUuICovCi0JbnAgPSBvZl9nZXRfY3B1X25vZGUoYm9vdF9jcHVpZCwgTlVMTCk7Ci0JQlVHX09OKCFucCk7Ci0KLQlpcmVnID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiaWJtLHBwYy1pbnRlcnJ1cHQtZ3NlcnZlciNzIiwgJmlsZW4pOwotCWlmICghaXJlZykgewotCQlvZl9ub2RlX3B1dChucCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpID0gaWxlbiAvIHNpemVvZihpbnQpOwotCWhjcHVpZCA9IGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoYm9vdF9jcHVpZCk7Ci0KLQkvKiBHbG9iYWwgaW50ZXJydXB0IGRpc3RyaWJ1dGlvbiBzZXJ2ZXIgaXMgc3BlY2lmaWVkIGluIHRoZSBsYXN0Ci0JICogZW50cnkgb2YgImlibSxwcGMtaW50ZXJydXB0LWdzZXJ2ZXIjcyIgcHJvcGVydHkuIEdldCB0aGUgbGFzdAotCSAqIGVudHJ5IGZvbSB0aGlzIHByb3BlcnR5IGZvciBjdXJyZW50IGJvb3QgY3B1IGlkIGFuZCB1c2UgaXQgYXMKLQkgKiBkZWZhdWx0IGRpc3RyaWJ1dGlvbiBzZXJ2ZXIKLQkgKi8KLQlmb3IgKGogPSAwOyBqIDwgaTsgaiArPSAyKSB7Ci0JCWlmIChpcmVnW2pdID09IGhjcHVpZCkgewotCQkJZGVmYXVsdF9zZXJ2ZXIgPSBoY3B1aWQ7Ci0JCQlkZWZhdWx0X2Rpc3RyaWJfc2VydmVyID0gaXJlZ1tqKzFdOwotCQl9Ci0JfQotCi0Jb2Zfbm9kZV9wdXQobnApOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgeGljc19tYXBfb25lX2NwdShpbnQgaHdfaWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQlpbnQgaTsKLQotCS8qIFRoaXMgbWF5IGxvb2sgZ3Jvc3MgYnV0IGl0J3MgZ29vZCBlbm91Z2ggZm9yIG5vdywgd2UgZG9uJ3QgcXVpdGUKLQkgKiBoYXZlIGEgaGFyZCAtPiBsaW51eCBwcm9jZXNzb3IgaWQgbWF0Y2hpbmcuCi0JICovCi0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKLQkJaWYgKCFjcHVfcHJlc2VudChpKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoaHdfaWQgPT0gZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChpKSkgewotCQkJeGljc19wZXJfY3B1W2ldID0gaW9yZW1hcChhZGRyLCBzaXplKTsKLQkJCXJldHVybjsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHhpY3NfaW5pdF9vbmVfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAotCQkJCSAgICAgIHVuc2lnbmVkIGludCAqaW5keCkKLXsKLQl1bnNpZ25lZCBpbnQgaWxlbjsKLQljb25zdCB1MzIgKmlyZWc7Ci0KLQkvKiBUaGlzIGNvZGUgZG9lcyB0aGUgdGhlb3JpY2FsbHkgYnJva2VuIGFzc3VtcHRpb24gdGhhdCB0aGUgaW50ZXJydXB0Ci0JICogc2VydmVyIG51bWJlcnMgYXJlIHRoZSBzYW1lIGFzIHRoZSBoYXJkIENQVSBudW1iZXJzLgotCSAqIFRoaXMgaGFwcGVucyB0byBiZSB0aGUgY2FzZSBzbyBmYXIgYnV0IHdlIGFyZSBwbGF5aW5nIHdpdGggZmlyZS4uLgotCSAqIHNob3VsZCBiZSBmaXhlZCBvbmUgb2YgdGhlc2UgZGF5cy4gLUJlbkguCi0JICovCi0JaXJlZyA9IG9mX2dldF9wcm9wZXJ0eShucCwgImlibSxpbnRlcnJ1cHQtc2VydmVyLXJhbmdlcyIsIE5VTEwpOwotCi0JLyogRG8gdGhhdCBldmVyIGhhcHBlbiA/IHdlJ2xsIGtub3cgc29vbiBlbm91Z2guLi4gYnV0IGV2ZW4gZ29vZCdvbGQKLQkgKiBmODAgZG9lcyBoYXZlIHRoYXQgcHJvcGVydHkgLi4KLQkgKi8KLQlXQVJOX09OKGlyZWcgPT0gTlVMTCk7Ci0JaWYgKGlyZWcpIHsKLQkJLyoKLQkJICogc2V0IG5vZGUgc3RhcnRpbmcgaW5kZXggZm9yIHRoaXMgbm9kZQotCQkgKi8KLQkJKmluZHggPSAqaXJlZzsKLQl9Ci0JaXJlZyA9IG9mX2dldF9wcm9wZXJ0eShucCwgInJlZyIsICZpbGVuKTsKLQlpZiAoIWlyZWcpCi0JCXBhbmljKCJ4aWNzX2luaXRfSVJROiBjYW4ndCBmaW5kIGludGVycnVwdCByZWcgcHJvcGVydHkiKTsKLQotCXdoaWxlIChpbGVuID49ICg0ICogc2l6ZW9mKHUzMikpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgYWRkciwgc2l6ZTsKLQotCQkvKiBYWFggVXNlIHByb3BlciBPRiBwYXJzaW5nIGNvZGUgaGVyZSAhISEgKi8KLQkJYWRkciA9ICh1bnNpZ25lZCBsb25nKSppcmVnKysgPDwgMzI7Ci0JCWlsZW4gLT0gc2l6ZW9mKHUzMik7Ci0JCWFkZHIgfD0gKmlyZWcrKzsKLQkJaWxlbiAtPSBzaXplb2YodTMyKTsKLQkJc2l6ZSA9ICh1bnNpZ25lZCBsb25nKSppcmVnKysgPDwgMzI7Ci0JCWlsZW4gLT0gc2l6ZW9mKHUzMik7Ci0JCXNpemUgfD0gKmlyZWcrKzsKLQkJaWxlbiAtPSBzaXplb2YodTMyKTsKLQkJeGljc19tYXBfb25lX2NwdSgqaW5keCwgYWRkciwgc2l6ZSk7Ci0JCSgqaW5keCkrKzsKLQl9Ci19Ci0KLXZvaWQgX19pbml0IHhpY3NfaW5pdF9JUlEodm9pZCkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCXUzMiBpbmR4ID0gMDsKLQlpbnQgZm91bmQgPSAwOwotCWNvbnN0IHUzMiAqaXNpemU7Ci0KLQlwcGM2NF9ib290X21zZygweDIwLCAiWElDUyBJbml0Iik7Ci0KLQlpYm1fZ2V0X3hpdmUgPSBydGFzX3Rva2VuKCJpYm0sZ2V0LXhpdmUiKTsKLQlpYm1fc2V0X3hpdmUgPSBydGFzX3Rva2VuKCJpYm0sc2V0LXhpdmUiKTsKLQlpYm1faW50X29uICA9IHJ0YXNfdG9rZW4oImlibSxpbnQtb24iKTsKLQlpYm1faW50X29mZiA9IHJ0YXNfdG9rZW4oImlibSxpbnQtb2ZmIik7Ci0KLQlmb3JfZWFjaF9ub2RlX2J5X3R5cGUobnAsICJQb3dlclBDLUV4dGVybmFsLUludGVycnVwdC1QcmVzZW50YXRpb24iKSB7Ci0JCWZvdW5kID0gMTsKLQkJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpIHsKLQkJCW9mX25vZGVfcHV0KG5wKTsKLQkJCWJyZWFrOwotCQkJfQotCQl4aWNzX2luaXRfb25lX25vZGUobnAsICZpbmR4KTsKLQl9Ci0JaWYgKGZvdW5kID09IDApCi0JCXJldHVybjsKLQotCS8qIGdldCB0aGUgYml0IHNpemUgb2Ygc2VydmVyIG51bWJlcnMgKi8KLQlmb3VuZCA9IDA7Ci0KLQlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsIE5VTEwsICJpYm0scHBjLXhpY3MiKSB7Ci0JCWlzaXplID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiaWJtLGludGVycnVwdC1zZXJ2ZXIjLXNpemUiLCBOVUxMKTsKLQotCQlpZiAoIWlzaXplKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCFmb3VuZCkgewotCQkJaW50ZXJydXB0X3NlcnZlcl9zaXplID0gKmlzaXplOwotCQkJZm91bmQgPSAxOwotCQl9IGVsc2UgaWYgKCppc2l6ZSAhPSBpbnRlcnJ1cHRfc2VydmVyX3NpemUpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlhJQ1M6ICIKLQkJCSAgICAgICAibWlzbWF0Y2hlZCBpYm0saW50ZXJydXB0LXNlcnZlciMtc2l6ZVxuIik7Ci0JCQlpbnRlcnJ1cHRfc2VydmVyX3NpemUgPSBtYXgoKmlzaXplLAotCQkJCQkJICAgIGludGVycnVwdF9zZXJ2ZXJfc2l6ZSk7Ci0JCX0KLQl9Ci0KLQl4aWNzX3VwZGF0ZV9pcnFfc2VydmVycygpOwotCXhpY3NfaW5pdF9ob3N0KCk7Ci0KLQlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9MUEFSKSkKLQkJcHBjX21kLmdldF9pcnEgPSB4aWNzX2dldF9pcnFfbHBhcjsKLQllbHNlCi0JCXBwY19tZC5nZXRfaXJxID0geGljc19nZXRfaXJxX2RpcmVjdDsKLQotCXhpY3Nfc2V0dXBfY3B1KCk7Ci0KLQlwcGM2NF9ib290X21zZygweDIxLCAiWElDUyBEb25lIik7Ci19Ci0KLS8qIENwdSBzdGFydHVwLCBzaHV0ZG93biwgYW5kIGhvdHBsdWcgKi8KLQotc3RhdGljIHZvaWQgeGljc19zZXRfY3B1X3ByaW9yaXR5KHVuc2lnbmVkIGNoYXIgY3BwcikKLXsKLQlzdHJ1Y3QgeGljc19jcHByICpvc19jcHByID0gJl9fZ2V0X2NwdV92YXIoeGljc19jcHByKTsKLQotCS8qCi0JICogd2Ugb25seSByZWFsbHkgd2FudCB0byBzZXQgdGhlIHByaW9yaXR5IHdoZW4gdGhlcmUncwotCSAqIGp1c3Qgb25lIGNwcHIgdmFsdWUgb24gdGhlIHN0YWNrCi0JICovCi0JV0FSTl9PTihvc19jcHByLT5pbmRleCAhPSAwKTsKLQotCW9zX2NwcHItPnN0YWNrWzBdID0gY3BwcjsKLQotCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQotCQlscGFyX2NwcHJfaW5mbyhjcHByKTsKLQllbHNlCi0JCWRpcmVjdF9jcHByX2luZm8oY3Bwcik7Ci0JaW9zeW5jKCk7Ci19Ci0KLS8qIEhhdmUgdGhlIGNhbGxpbmcgcHJvY2Vzc29yIGpvaW4gb3IgbGVhdmUgdGhlIHNwZWNpZmllZCBnbG9iYWwgcXVldWUgKi8KLXN0YXRpYyB2b2lkIHhpY3Nfc2V0X2NwdV9naXEodW5zaWduZWQgaW50IGdzZXJ2ZXIsIHVuc2lnbmVkIGludCBqb2luKQotewotCWludCBpbmRleDsKLQlpbnQgc3RhdHVzOwotCi0JaWYgKCFydGFzX2luZGljYXRvcl9wcmVzZW50KEdMT0JBTF9JTlRFUlJVUFRfUVVFVUUsIE5VTEwpKQotCQlyZXR1cm47Ci0KLQlpbmRleCA9ICgxVUwgPDwgaW50ZXJydXB0X3NlcnZlcl9zaXplKSAtIDEgLSBnc2VydmVyOwotCi0Jc3RhdHVzID0gcnRhc19zZXRfaW5kaWNhdG9yX2Zhc3QoR0xPQkFMX0lOVEVSUlVQVF9RVUVVRSwgaW5kZXgsIGpvaW4pOwotCi0JV0FSTihzdGF0dXMgPCAwLCAic2V0LWluZGljYXRvciglZCwgJWQsICV1KSByZXR1cm5lZCAlZFxuIiwKLQkgICAgIEdMT0JBTF9JTlRFUlJVUFRfUVVFVUUsIGluZGV4LCBqb2luLCBzdGF0dXMpOwotfQotCi12b2lkIHhpY3Nfc2V0dXBfY3B1KHZvaWQpCi17Ci0JeGljc19zZXRfY3B1X3ByaW9yaXR5KExPV0VTVF9QUklPUklUWSk7Ci0KLQl4aWNzX3NldF9jcHVfZ2lxKGRlZmF1bHRfZGlzdHJpYl9zZXJ2ZXIsIDEpOwotfQotCi12b2lkIHhpY3NfdGVhcmRvd25fY3B1KHZvaWQpCi17Ci0Jc3RydWN0IHhpY3NfY3BwciAqb3NfY3BwciA9ICZfX2dldF9jcHVfdmFyKHhpY3NfY3Bwcik7Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCS8qCi0JICogd2UgaGF2ZSB0byByZXNldCB0aGUgY3BwciBpbmRleCB0byAwIGJlY2F1c2Ugd2UncmUKLQkgKiBub3QgZ29pbmcgdG8gcmV0dXJuIGZyb20gdGhlIElQSQotCSAqLwotCW9zX2NwcHItPmluZGV4ID0gMDsKLQl4aWNzX3NldF9jcHVfcHJpb3JpdHkoMCk7Ci0KLQkvKiBDbGVhciBhbnkgcGVuZGluZyBJUEkgcmVxdWVzdCAqLwotCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQotCQlscGFyX3FpcnJfaW5mbyhjcHUsIDB4ZmYpOwotCWVsc2UKLQkJZGlyZWN0X3FpcnJfaW5mbyhjcHUsIDB4ZmYpOwotfQotCi12b2lkIHhpY3Nfa2V4ZWNfdGVhcmRvd25fY3B1KGludCBzZWNvbmRhcnkpCi17Ci0JeGljc190ZWFyZG93bl9jcHUoKTsKLQotCS8qCi0JICogd2UgdGFrZSB0aGUgaXBpIGlycSBidXQgYW5kIG5ldmVyIHJldHVybiBzbyB3ZQotCSAqIG5lZWQgdG8gRU9JIHRoZSBJUEksIGJ1dCB3YW50IHRvIGxlYXZlIG91ciBwcmlvcml0eSAwCi0JICoKLQkgKiBzaG91bGQgd2UgY2hlY2sgYWxsIHRoZSBvdGhlciBpbnRlcnJ1cHRzIHRvbz8KLQkgKiBzaG91bGQgd2UgYmUgZmxhZ2dpbmcgaWRsZSBsb29wIGluc3RlYWQ/Ci0JICogb3IgY3JlYXRpbmcgc29tZSB0YXNrIHRvIGJlIHNjaGVkdWxlZD8KLQkgKi8KLQotCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQotCQlscGFyX3hpcnJfaW5mb19zZXQoKDB4MDAgPDwgMjQpIHwgWElDU19JUEkpOwotCWVsc2UKLQkJZGlyZWN0X3hpcnJfaW5mb19zZXQoKDB4MDAgPDwgMjQpIHwgWElDU19JUEkpOwotCi0JLyoKLQkgKiBTb21lIG1hY2hpbmVzIG5lZWQgdG8gaGF2ZSBhdCBsZWFzdCBvbmUgY3B1IGluIHRoZSBHSVEsCi0JICogc28gbGVhdmUgdGhlIG1hc3RlciBjcHUgaW4gdGhlIGdyb3VwLgotCSAqLwotCWlmIChzZWNvbmRhcnkpCi0JCXhpY3Nfc2V0X2NwdV9naXEoZGVmYXVsdF9kaXN0cmliX3NlcnZlciwgMCk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLQotLyogSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuICovCi12b2lkIHhpY3NfbWlncmF0ZV9pcnFzX2F3YXkodm9pZCkKLXsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpLCBod19jcHUgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKLQlpbnQgdmlycTsKLQotCS8qIElmIHdlIHVzZWQgdG8gYmUgdGhlIGRlZmF1bHQgc2VydmVyLCBtb3ZlIHRvIHRoZSBuZXcgImJvb3RfY3B1aWQiICovCi0JaWYgKGh3X2NwdSA9PSBkZWZhdWx0X3NlcnZlcikKLQkJeGljc191cGRhdGVfaXJxX3NlcnZlcnMoKTsKLQotCS8qIFJlamVjdCBhbnkgaW50ZXJydXB0IHRoYXQgd2FzIHF1ZXVlZCB0byB1cy4uLiAqLwotCXhpY3Nfc2V0X2NwdV9wcmlvcml0eSgwKTsKLQotCS8qIFJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgZ2xvYmFsIGludGVycnVwdCBxdWV1ZSAqLwotCXhpY3Nfc2V0X2NwdV9naXEoZGVmYXVsdF9kaXN0cmliX3NlcnZlciwgMCk7Ci0KLQkvKiBBbGxvdyBJUElzIGFnYWluLi4uICovCi0JeGljc19zZXRfY3B1X3ByaW9yaXR5KERFRkFVTFRfUFJJT1JJVFkpOwotCi0JZm9yX2VhY2hfaXJxKHZpcnEpIHsKLQkJc3RydWN0IGlycV9kZXNjICpkZXNjOwotCQlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXA7Ci0JCXVuc2lnbmVkIGludCBod2lycTsKLQkJaW50IHhpY3Nfc3RhdHVzWzJdOwotCQlpbnQgc3RhdHVzOwotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JCS8qIFdlIGNhbid0IHNldCBhZmZpbml0eSBvbiBJU0EgaW50ZXJydXB0cyAqLwotCQlpZiAodmlycSA8IE5VTV9JU0FfSU5URVJSVVBUUykKLQkJCWNvbnRpbnVlOwotCQlpZiAoaXJxX21hcFt2aXJxXS5ob3N0ICE9IHhpY3NfaG9zdCkKLQkJCWNvbnRpbnVlOwotCQlod2lycSA9ICh1bnNpZ25lZCBpbnQpaXJxX21hcFt2aXJxXS5od2lycTsKLQkJLyogV2UgbmVlZCB0byBnZXQgSVBJcyBzdGlsbC4gKi8KLQkJaWYgKGh3aXJxID09IFhJQ1NfSVBJIHx8IGh3aXJxID09IFhJQ1NfSVJRX1NQVVJJT1VTKQotCQkJY29udGludWU7Ci0KLQkJZGVzYyA9IGlycV90b19kZXNjKHZpcnEpOwotCi0JCS8qIFdlIG9ubHkgbmVlZCB0byBtaWdyYXRlIGVuYWJsZWQgSVJRUyAqLwotCQlpZiAoZGVzYyA9PSBOVUxMIHx8IGRlc2MtPmFjdGlvbiA9PSBOVUxMKQotCQkJY29udGludWU7Ci0KLQkJY2hpcCA9IGlycV9kZXNjX2dldF9jaGlwKGRlc2MpOwotCQlpZiAoY2hpcCA9PSBOVUxMIHx8IGNoaXAtPmlycV9zZXRfYWZmaW5pdHkgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCi0JCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCi0JCXN0YXR1cyA9IHJ0YXNfY2FsbChpYm1fZ2V0X3hpdmUsIDEsIDMsIHhpY3Nfc3RhdHVzLCBod2lycSk7Ci0JCWlmIChzdGF0dXMpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlibSxnZXQteGl2ZSBpcnE9JXUgcmV0dXJucyAlZFxuIiwKLQkJCQkJX19mdW5jX18sIGh3aXJxLCBzdGF0dXMpOwotCQkJZ290byB1bmxvY2s7Ci0JCX0KLQotCQkvKgotCQkgKiBXZSBvbmx5IHN1cHBvcnQgZGVsaXZlcnkgdG8gYWxsIGNwdXMgb3IgdG8gb25lIGNwdS4KLQkJICogVGhlIGlycSBoYXMgdG8gYmUgbWlncmF0ZWQgb25seSBpbiB0aGUgc2luZ2xlIGNwdQotCQkgKiBjYXNlLgotCQkgKi8KLQkJaWYgKHhpY3Nfc3RhdHVzWzBdICE9IGh3X2NwdSkKLQkJCWdvdG8gdW5sb2NrOwotCi0JCS8qIFRoaXMgaXMgZXhwZWN0ZWQgZHVyaW5nIGNwdSBvZmZsaW5lLiAqLwotCQlpZiAoY3B1X29ubGluZShjcHUpKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSVJRICV1IGFmZmluaXR5IGJyb2tlbiBvZmYgY3B1ICV1XG4iLAotCQkJICAgICAgIHZpcnEsIGNwdSk7Ci0KLQkJLyogUmVzZXQgYWZmaW5pdHkgdG8gYWxsIGNwdXMgKi8KLQkJY3B1bWFza19zZXRhbGwoZGVzYy0+aXJxX2RhdGEuYWZmaW5pdHkpOwotCQljaGlwLT5pcnFfc2V0X2FmZmluaXR5KCZkZXNjLT5pcnFfZGF0YSwgY3B1X2FsbF9tYXNrLCB0cnVlKTsKLXVubG9jazoKLQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKLQl9Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWQ1YTgzLi4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKgotICogYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuaAotICoKLSAqIENvcHlyaWdodCAyMDAwIElCTSBDb3Jwb3JhdGlvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaWZuZGVmIF9QT1dFUlBDX0tFUk5FTF9YSUNTX0gKLSNkZWZpbmUgX1BPV0VSUENfS0VSTkVMX1hJQ1NfSAotCi1leHRlcm4gdm9pZCB4aWNzX2luaXRfSVJRKHZvaWQpOwotZXh0ZXJuIHZvaWQgeGljc19zZXR1cF9jcHUodm9pZCk7Ci1leHRlcm4gdm9pZCB4aWNzX3RlYXJkb3duX2NwdSh2b2lkKTsKLWV4dGVybiB2b2lkIHhpY3Nfa2V4ZWNfdGVhcmRvd25fY3B1KGludCBzZWNvbmRhcnkpOwotZXh0ZXJuIHZvaWQgeGljc19taWdyYXRlX2lycXNfYXdheSh2b2lkKTsKLWV4dGVybiBpbnQgc21wX3hpY3NfcHJvYmUodm9pZCk7Ci1leHRlcm4gdm9pZCBzbXBfeGljc19tZXNzYWdlX3Bhc3MoaW50IHRhcmdldCwgaW50IG1zZyk7Ci0KLSNlbmRpZiAvKiBfUE9XRVJQQ19LRVJORUxfWElDU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3dzcC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy93c3AvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2M0OGViCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy93c3AvS2NvbmZpZwpAQCAtMCwwICsxLDI4IEBACitjb25maWcgUFBDX1dTUAorCWJvb2wKKwlkZWZhdWx0IG4KKworbWVudSAiV1NQIHBsYXRmb3JtIHNlbGVjdGlvbiIKKwlkZXBlbmRzIG9uIFBQQ19CT09LM0VfNjQKKworY29uZmlnIFBQQ19QU1IyCisJYm9vbCAiUFNSLTIgcGxhdGZvcm0iCisJc2VsZWN0IFBQQ19BMgorCXNlbGVjdCBHRU5FUklDX1RCU1lOQworCXNlbGVjdCBQUENfU0NPTQorCXNlbGVjdCBFUEFQUl9CT09UCisJc2VsZWN0IFBQQ19XU1AKKwlzZWxlY3QgUFBDX1hJQ1MKKwlzZWxlY3QgUFBDX0lDUF9OQVRJVkUKKwlkZWZhdWx0IHkKKworZW5kbWVudQorCitjb25maWcgUFBDX0EyX0REMgorCWJvb2wgIlN1cHBvcnQgZm9yIEREMiBiYXNlZCBBMi9XU1Agc3lzdGVtcyIKKwlkZXBlbmRzIG9uIFBQQ19BMgorCitjb25maWcgV09SS0FST1VORF9FUlJBVFVNXzQ2MworCWRlcGVuZHMgb24gUFBDX0EyX0REMgorCWJvb2wgIldvcmthcm91bmQgZXJyYXR1bSA0NjMiCisJZGVmYXVsdCB5CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3dzcC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvd3NwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NWJlNzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3dzcC9NYWtlZmlsZQpAQCAtMCwwICsxLDYgQEAKK2NjZmxhZ3MteQkJCSs9IC1tbm8tbWluaW1hbC10b2MKKworb2JqLXkJCQkJKz0gc2V0dXAubyBpY3Mubworb2JqLSQoQ09ORklHX1BQQ19QU1IyKQkJKz0gcHNyMi5vIG9wYl9waWMubworb2JqLSQoQ09ORklHX1BQQ19XU1ApCQkrPSBzY29tX3dzcC5vCitvYmotJChDT05GSUdfU01QKQkJKz0gc21wLm8gc2NvbV9zbXAubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy93c3AvaWNzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3dzcC9pY3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTNiZDllCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy93c3AvaWNzLmMKQEAgLTAsMCArMSw3MTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOC0yMDExIElCTSBDb3Jwb3JhdGlvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21zaS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20veGljcy5oPgorCisjaW5jbHVkZSAid3NwLmgiCisjaW5jbHVkZSAiaWNzLmgiCisKKworLyogV1NQIElDUyAqLworCitzdHJ1Y3Qgd3NwX2ljcyB7CisJc3RydWN0IGljcyBpY3M7CisJc3RydWN0IGRldmljZV9ub2RlICpkbjsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJc3BpbmxvY2tfdCBsb2NrOworCXVuc2lnbmVkIGxvbmcgKmJpdG1hcDsKKwl1MzIgY2hpcF9pZDsKKwl1MzIgbHNpX2Jhc2U7CisJdTMyIGxzaV9jb3VudDsKKwl1NjQgaHdpcnFfc3RhcnQ7CisJdTY0IGNvdW50OworI2lmZGVmIENPTkZJR19TTVAKKwlpbnQgKmh3aXJxX2NwdV9tYXA7CisjZW5kaWYKK307CisKKyNkZWZpbmUgdG9fd3NwX2ljcyhpY3MpCWNvbnRhaW5lcl9vZihpY3MsIHN0cnVjdCB3c3BfaWNzLCBpY3MpCisKKyNkZWZpbmUgSU5UX1NSQ19MQVlFUl9CVUlEX1JFRyhiYXNlKQkoKGJhc2UpICsgMHgwMCkKKyNkZWZpbmUgSU9EQV9UQkxfQUREUl9SRUcoYmFzZSkJCSgoYmFzZSkgKyAweDE4KQorI2RlZmluZSBJT0RBX1RCTF9EQVRBX1JFRyhiYXNlKQkJKChiYXNlKSArIDB4MjApCisjZGVmaW5lIFhJVkVfVVBEQVRFX1JFRyhiYXNlKQkJKChiYXNlKSArIDB4MjgpCisjZGVmaW5lIElDU19JTlRfQ0FQU19SRUcoYmFzZSkJCSgoYmFzZSkgKyAweDMwKQorCisjZGVmaW5lIFRCTF9BVVRPX0lOQ1JFTUVOVAkoKDFVTCA8PCA2MykgfCAoMVVMIDw8IDE1KSkKKyNkZWZpbmUgVEJMX1NFTEVDVF9YSVNUCQkoMVVMIDw8IDQ4KQorI2RlZmluZSBUQkxfU0VMRUNUX1hJVlQJCSgxVUwgPDwgNDkpCisKKyNkZWZpbmUgSU9EQV9JUlEoaXJxKQkJKChpcnEpICYgKDB4N0ZGVUxMKSkJLyogSFJNIDUuMS4zLjQgKi8KKworI2RlZmluZSBYSVNUX1JFUVVJUkVECQkweDgKKyNkZWZpbmUgWElTVF9SRUpFQ1RFRAkJMHg0CisjZGVmaW5lIFhJU1RfUFJFU0VOVEVECQkweDIKKyNkZWZpbmUgWElTVF9QRU5ESU5HCQkweDEKKworI2RlZmluZSBYSVZFX1NFUlZFUl9TSElGVAk0MgorI2RlZmluZSBYSVZFX1NFUlZFUl9NQVNLCTB4RkZGRlVMTAorI2RlZmluZSBYSVZFX1BSSU9SSVRZX01BU0sJMHhGRlVMTAorI2RlZmluZSBYSVZFX1BSSU9SSVRZX1NISUZUCTMyCisjZGVmaW5lIFhJVkVfV1JJVEVfRU5BQkxFCSgxVUxMIDw8IDYzKQorCisvKgorICogVGhlIGRvY3MgcmVmZXIgdG8gYSA2IGJpdCBmaWVsZCBjYWxsZWQgQ2hpcElELCB3aGljaCBjb25zaXN0cyBvZiBhCisgKiAzIGJpdCBOb2RlSUQgYW5kIGEgMyBiaXQgQ2hpcElELiBPbiBXU1AgdGhlIENoaXBJRCBpcyBhbHdheXMgemVybworICogc28gd2UgaWdub3JlIGl0LCBhbmQgZXZlcnkgd2hlcmUgd2UgdXNlICJjaGlwIGlkIiBpbiB0aGlzIGNvZGUgd2UKKyAqIG1lYW4gdGhlIE5vZGVJRC4KKyAqLworI2RlZmluZSBXU1BfSUNTX0NISVBfU0hJRlQJCTE3CisKKworc3RhdGljIHN0cnVjdCB3c3BfaWNzICppY3NfbGlzdDsKK3N0YXRpYyBpbnQgbnVtX2ljczsKKworLyogSUNTIFNvdXJjZSBjb250cm9sbGVyIGFjY2Vzc29ycyAqLworCitzdGF0aWMgdTY0IHdzcF9pY3NfZ2V0X3hpdmUoc3RydWN0IHdzcF9pY3MgKmljcywgdW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU2NCB4aXZlOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmljcy0+bG9jaywgZmxhZ3MpOworCW91dF9iZTY0KElPREFfVEJMX0FERFJfUkVHKGljcy0+cmVncyksIFRCTF9TRUxFQ1RfWElWVCB8IElPREFfSVJRKGlycSkpOworCXhpdmUgPSBpbl9iZTY0KElPREFfVEJMX0RBVEFfUkVHKGljcy0+cmVncykpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmljcy0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHhpdmU7Cit9CisKK3N0YXRpYyB2b2lkIHdzcF9pY3Nfc2V0X3hpdmUoc3RydWN0IHdzcF9pY3MgKmljcywgdW5zaWduZWQgaW50IGlycSwgdTY0IHhpdmUpCit7CisJeGl2ZSAmPSB+WElWRV9BRERSX01BU0s7CisJeGl2ZSB8PSAoaXJxICYgWElWRV9BRERSX01BU0spOworCXhpdmUgfD0gWElWRV9XUklURV9FTkFCTEU7CisKKwlvdXRfYmU2NChYSVZFX1VQREFURV9SRUcoaWNzLT5yZWdzKSwgeGl2ZSk7Cit9CisKK3N0YXRpYyB1NjQgeGl2ZV9zZXRfc2VydmVyKHU2NCB4aXZlLCB1bnNpZ25lZCBpbnQgc2VydmVyKQoreworCXU2NCBtYXNrID0gfihYSVZFX1NFUlZFUl9NQVNLIDw8IFhJVkVfU0VSVkVSX1NISUZUKTsKKworCXhpdmUgJj0gbWFzazsKKwl4aXZlIHw9IChzZXJ2ZXIgJiBYSVZFX1NFUlZFUl9NQVNLKSA8PCBYSVZFX1NFUlZFUl9TSElGVDsKKworCXJldHVybiB4aXZlOworfQorCitzdGF0aWMgdTY0IHhpdmVfc2V0X3ByaW9yaXR5KHU2NCB4aXZlLCB1bnNpZ25lZCBpbnQgcHJpb3JpdHkpCit7CisJdTY0IG1hc2sgPSB+KFhJVkVfUFJJT1JJVFlfTUFTSyA8PCBYSVZFX1BSSU9SSVRZX1NISUZUKTsKKworCXhpdmUgJj0gbWFzazsKKwl4aXZlIHw9IChwcmlvcml0eSAmIFhJVkVfUFJJT1JJVFlfTUFTSykgPDwgWElWRV9QUklPUklUWV9TSElGVDsKKworCXJldHVybiB4aXZlOworfQorCisKKyNpZmRlZiBDT05GSUdfU01QCisvKiBGaW5kIGxvZ2ljYWwgQ1BVcyB3aXRoaW4gbWFzayBvbiBhIGdpdmVuIGNoaXAgYW5kIHN0b3JlIHJlc3VsdCBpbiByZXQgKi8KK3ZvaWQgY3B1c19vbl9jaGlwKGludCBjaGlwX2lkLCBjcHVtYXNrX3QgKm1hc2ssIGNwdW1hc2tfdCAqcmV0KQoreworCWludCBjcHUsIGNoaXA7CisJc3RydWN0IGRldmljZV9ub2RlICpjcHVfZG4sICpkbjsKKwljb25zdCB1MzIgKnByb3A7CisKKwljcHVtYXNrX2NsZWFyKHJldCk7CisJZm9yX2VhY2hfY3B1KGNwdSwgbWFzaykgeworCQljcHVfZG4gPSBvZl9nZXRfY3B1X25vZGUoY3B1LCBOVUxMKTsKKwkJaWYgKCFjcHVfZG4pCisJCQljb250aW51ZTsKKworCQlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KGNwdV9kbiwgImF0LW5vZGUiLCBOVUxMKTsKKwkJaWYgKCFwcm9wKSB7CisJCQlvZl9ub2RlX3B1dChjcHVfZG4pOworCQkJY29udGludWU7CisJCX0KKworCQlkbiA9IG9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlKCpwcm9wKTsKKwkJb2Zfbm9kZV9wdXQoY3B1X2RuKTsKKworCQljaGlwID0gd3NwX2dldF9jaGlwX2lkKGRuKTsKKwkJaWYgKGNoaXAgPT0gY2hpcF9pZCkKKwkJCWNwdW1hc2tfc2V0X2NwdShjcHUsIHJldCk7CisKKwkJb2Zfbm9kZV9wdXQoZG4pOworCX0KK30KKworLyogU3RvcmUgYSBzdWl0YWJsZSBDUFUgdG8gaGFuZGxlIGEgaHdpcnEgaW4gdGhlIGljcy0+aHdpcnFfY3B1X21hcCBjYWNoZSAqLworc3RhdGljIGludCBjYWNoZV9od2lycV9tYXAoc3RydWN0IHdzcF9pY3MgKmljcywgdW5zaWduZWQgaW50IGh3aXJxLAorCQkJICAgY29uc3QgY3B1bWFza190ICphZmZpbml0eSkKK3sKKwljcHVtYXNrX3Zhcl90IGF2YWlsLCBuZXdtYXNrOworCWludCByZXQgPSAtRU5PTUVNLCBjcHUsIGNwdV9yb3ZlciA9IDAsIHRhcmdldDsKKwlpbnQgaW5kZXggPSBod2lycSAtIGljcy0+aHdpcnFfc3RhcnQ7CisJdW5zaWduZWQgaW50IG5vZGVpZDsKKworCUJVR19PTihpbmRleCA8IDAgfHwgaW5kZXggPj0gaWNzLT5jb3VudCk7CisKKwlpZiAoIWljcy0+aHdpcnFfY3B1X21hcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoIWRpc3RyaWJ1dGVfaXJxcykgeworCQlpY3MtPmh3aXJxX2NwdV9tYXBbaHdpcnEgLSBpY3MtPmh3aXJxX3N0YXJ0XSA9IHhpY3NfZGVmYXVsdF9zZXJ2ZXI7CisJCXJldHVybiAwOworCX0KKworCS8qIEFsbG9jYXRlIG5lZWRlZCBDUFUgbWFza3MgKi8KKwlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZhdmFpbCwgR0ZQX0tFUk5FTCkpCisJCWdvdG8gcmV0OworCWlmICghYWxsb2NfY3B1bWFza192YXIoJm5ld21hc2ssIEdGUF9LRVJORUwpKQorCQlnb3RvIGZyZWVhdmFpbDsKKworCS8qIEZpbmQgUEJ1cyBhdHRhY2hlZCB0byB0aGUgc291cmNlIG9mIHRoaXMgSVJRICovCisJbm9kZWlkID0gKGh3aXJxID4+IFdTUF9JQ1NfQ0hJUF9TSElGVCkgJiAweDM7IC8qIDEyOjE0ICovCisKKwkvKiBGaW5kIENQVXMgdGhhdCBjb3VsZCBoYW5kbGUgdGhpcyBJUlEgKi8KKwlpZiAoYWZmaW5pdHkpCisJCWNwdW1hc2tfYW5kKGF2YWlsLCBjcHVfb25saW5lX21hc2ssIGFmZmluaXR5KTsKKwllbHNlCisJCWNwdW1hc2tfY29weShhdmFpbCwgY3B1X29ubGluZV9tYXNrKTsKKworCS8qIE5hcnJvdyBzZWxlY3Rpb24gZG93biB0byBsb2dpY2FsIENQVXMgb24gdGhlIHNhbWUgY2hpcCAqLworCWNwdXNfb25fY2hpcChub2RlaWQsIGF2YWlsLCBuZXdtYXNrKTsKKworCS8qIEVuc3VyZSB3ZSBoYXZlbid0IG5hcnJvd2VkIGl0IGRvd24gdG8gMCAqLworCWlmICh1bmxpa2VseShjcHVtYXNrX2VtcHR5KG5ld21hc2spKSkgeworCQlpZiAodW5saWtlbHkoY3B1bWFza19lbXB0eShhdmFpbCkpKSB7CisJCQlyZXQgPSAtMTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWNwdW1hc2tfY29weShuZXdtYXNrLCBhdmFpbCk7CisJfQorCisJLyogQ2hvb3NlIGEgQ1BVIG91dCBvZiB0aG9zZSB3ZSBuYXJyb3dlZCBpdCBkb3duIHRvIGluIHJvdW5kIHJvYmluICovCisJdGFyZ2V0ID0gaHdpcnEgJSBjcHVtYXNrX3dlaWdodChuZXdtYXNrKTsKKwlmb3JfZWFjaF9jcHUoY3B1LCBuZXdtYXNrKSB7CisJCWlmIChjcHVfcm92ZXIrKyA+PSB0YXJnZXQpIHsKKwkJCWljcy0+aHdpcnFfY3B1X21hcFtpbmRleF0gPSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGNwdSk7CisJCQlyZXQgPSAwOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKiBTaG91bGRuJ3QgaGFwcGVuICovCisJV0FSTl9PTigxKTsKKworb3V0OgorCWZyZWVfY3B1bWFza192YXIobmV3bWFzayk7CitmcmVlYXZhaWw6CisJZnJlZV9jcHVtYXNrX3ZhcihhdmFpbCk7CityZXQ6CisJaWYgKHJldCA8IDApIHsKKwkJaWNzLT5od2lycV9jcHVfbWFwW2luZGV4XSA9IGNwdW1hc2tfZmlyc3QoY3B1X29ubGluZV9tYXNrKTsKKwkJcHJfd2FybmluZygiRXJyb3IsIGZhbGxpbmcgaHdpcnEgMHgleCByb3V0aW5nIGJhY2sgdG8gQ1BVICVpXG4iLAorCQkJICAgaHdpcnEsIGljcy0+aHdpcnFfY3B1X21hcFtpbmRleF0pOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhbGxvY19pcnFfbWFwKHN0cnVjdCB3c3BfaWNzICppY3MpCit7CisJaW50IGk7CisKKwlpY3MtPmh3aXJxX2NwdV9tYXAgPSBrbWFsbG9jKHNpemVvZihpbnQpICogaWNzLT5jb3VudCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpY3MtPmh3aXJxX2NwdV9tYXApIHsKKwkJcHJfd2FybmluZygiQWxsb2NhdGUgaHdpcnFfY3B1X21hcCBmYWlsZWQsICIKKwkJCSAgICJJUlEgYmFsYW5jaW5nIGRpc2FibGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoaT0wOyBpIDwgaWNzLT5jb3VudDsgaSsrKQorCQlpY3MtPmh3aXJxX2NwdV9tYXBbaV0gPSB4aWNzX2RlZmF1bHRfc2VydmVyOworfQorCitzdGF0aWMgaW50IGdldF9pcnFfc2VydmVyKHN0cnVjdCB3c3BfaWNzICppY3MsIHVuc2lnbmVkIGludCBod2lycSkKK3sKKwlpbnQgaW5kZXggPSBod2lycSAtIGljcy0+aHdpcnFfc3RhcnQ7CisKKwlCVUdfT04oaW5kZXggPCAwIHx8IGluZGV4ID49IGljcy0+Y291bnQpOworCisJaWYgKCFpY3MtPmh3aXJxX2NwdV9tYXApCisJCXJldHVybiB4aWNzX2RlZmF1bHRfc2VydmVyOworCisJcmV0dXJuIGljcy0+aHdpcnFfY3B1X21hcFtpbmRleF07Cit9CisjZWxzZSAvKiAhQ09ORklHX1NNUCAqLworc3RhdGljIGludCBjYWNoZV9od2lycV9tYXAoc3RydWN0IHdzcF9pY3MgKmljcywgdW5zaWduZWQgaW50IGh3aXJxLAorCQkJICAgY29uc3QgY3B1bWFza190ICphZmZpbml0eSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfaXJxX3NlcnZlcihzdHJ1Y3Qgd3NwX2ljcyAqaWNzLCB1bnNpZ25lZCBpbnQgaHdpcnEpCit7CisJcmV0dXJuIHhpY3NfZGVmYXVsdF9zZXJ2ZXI7Cit9CisKK3N0YXRpYyB2b2lkIGFsbG9jX2lycV9tYXAoc3RydWN0IHdzcF9pY3MgKmljcykgeyB9CisjZW5kaWYKKworc3RhdGljIHZvaWQgd3NwX2NoaXBfdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJdW5zaWduZWQgaW50IGh3X2lycSA9ICh1bnNpZ25lZCBpbnQpaXJxZF90b19od2lycShkKTsKKwlzdHJ1Y3Qgd3NwX2ljcyAqaWNzOworCWludCBzZXJ2ZXI7CisJdTY0IHhpdmU7CisKKwlpZiAoaHdfaXJxID09IFhJQ1NfSVBJIHx8IGh3X2lycSA9PSBYSUNTX0lSUV9TUFVSSU9VUykKKwkJcmV0dXJuOworCisJaWNzID0gZC0+Y2hpcF9kYXRhOworCWlmIChXQVJOX09OKCFpY3MpKQorCQlyZXR1cm47CisKKwlzZXJ2ZXIgPSBnZXRfaXJxX3NlcnZlcihpY3MsIGh3X2lycSk7CisKKwl4aXZlID0gd3NwX2ljc19nZXRfeGl2ZShpY3MsIGh3X2lycSk7CisJeGl2ZSA9IHhpdmVfc2V0X3NlcnZlcih4aXZlLCBzZXJ2ZXIpOworCXhpdmUgPSB4aXZlX3NldF9wcmlvcml0eSh4aXZlLCBERUZBVUxUX1BSSU9SSVRZKTsKKwl3c3BfaWNzX3NldF94aXZlKGljcywgaHdfaXJxLCB4aXZlKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCB3c3BfY2hpcF9zdGFydHVwKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwkvKiB1bm1hc2sgaXQgKi8KKwl3c3BfY2hpcF91bm1hc2tfaXJxKGQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3c3BfbWFza19yZWFsX2lycSh1bnNpZ25lZCBpbnQgaHdfaXJxLCBzdHJ1Y3Qgd3NwX2ljcyAqaWNzKQoreworCXU2NCB4aXZlOworCisJaWYgKGh3X2lycSA9PSBYSUNTX0lQSSkKKwkJcmV0dXJuOworCisJaWYgKFdBUk5fT04oIWljcykpCisJCXJldHVybjsKKwl4aXZlID0gd3NwX2ljc19nZXRfeGl2ZShpY3MsIGh3X2lycSk7CisJeGl2ZSA9IHhpdmVfc2V0X3NlcnZlcih4aXZlLCB4aWNzX2RlZmF1bHRfc2VydmVyKTsKKwl4aXZlID0geGl2ZV9zZXRfcHJpb3JpdHkoeGl2ZSwgTE9XRVNUX1BSSU9SSVRZKTsKKwl3c3BfaWNzX3NldF94aXZlKGljcywgaHdfaXJxLCB4aXZlKTsKK30KKworc3RhdGljIHZvaWQgd3NwX2NoaXBfbWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQoreworCXVuc2lnbmVkIGludCBod19pcnEgPSAodW5zaWduZWQgaW50KWlycWRfdG9faHdpcnEoZCk7CisJc3RydWN0IHdzcF9pY3MgKmljcyA9IGQtPmNoaXBfZGF0YTsKKworCWlmIChod19pcnEgPT0gWElDU19JUEkgfHwgaHdfaXJxID09IFhJQ1NfSVJRX1NQVVJJT1VTKQorCQlyZXR1cm47CisKKwl3c3BfbWFza19yZWFsX2lycShod19pcnEsIGljcyk7Cit9CisKK3N0YXRpYyBpbnQgd3NwX2NoaXBfc2V0X2FmZmluaXR5KHN0cnVjdCBpcnFfZGF0YSAqZCwKKwkJCQkgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssIGJvb2wgZm9yY2UpCit7CisJdW5zaWduZWQgaW50IGh3X2lycSA9ICh1bnNpZ25lZCBpbnQpaXJxZF90b19od2lycShkKTsKKwlzdHJ1Y3Qgd3NwX2ljcyAqaWNzOworCWludCByZXQ7CisJdTY0IHhpdmU7CisKKwlpZiAoaHdfaXJxID09IFhJQ1NfSVBJIHx8IGh3X2lycSA9PSBYSUNTX0lSUV9TUFVSSU9VUykKKwkJcmV0dXJuIC0xOworCisJaWNzID0gZC0+Y2hpcF9kYXRhOworCWlmIChXQVJOX09OKCFpY3MpKQorCQlyZXR1cm4gLTE7CisJeGl2ZSA9IHdzcF9pY3NfZ2V0X3hpdmUoaWNzLCBod19pcnEpOworCisJLyoKKwkgKiBGb3IgdGhlIG1vbWVudCBvbmx5IGltcGxlbWVudCBkZWxpdmVyeSB0byBhbGwgY3B1cyBvciBvbmUgY3B1LgorCSAqIEdldCBjdXJyZW50IGlycV9zZXJ2ZXIgZm9yIHRoZSBnaXZlbiBpcnEKKwkgKi8KKwlyZXQgPSBjYWNoZV9od2lycV9tYXAoaWNzLCBkLT5pcnEsIGNwdW1hc2spOworCWlmIChyZXQgPT0gLTEpIHsKKwkJY2hhciBjcHVsaXN0WzEyOF07CisJCWNwdW1hc2tfc2NucHJpbnRmKGNwdWxpc3QsIHNpemVvZihjcHVsaXN0KSwgY3B1bWFzayk7CisJCXByX3dhcm5pbmcoIiVzOiBObyBvbmxpbmUgY3B1cyBpbiB0aGUgbWFzayAlcyBmb3IgaXJxICVkXG4iLAorCQkJICAgX19mdW5jX18sIGNwdWxpc3QsIGQtPmlycSk7CisJCXJldHVybiAtMTsKKwl9IGVsc2UgaWYgKHJldCA9PSAtRU5PTUVNKSB7CisJCXByX3dhcm5pbmcoIiVzOiBPdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtMTsKKwl9CisKKwl4aXZlID0geGl2ZV9zZXRfc2VydmVyKHhpdmUsIGdldF9pcnFfc2VydmVyKGljcywgaHdfaXJxKSk7CisJd3NwX2ljc19zZXRfeGl2ZShpY3MsIGh3X2lycSwgeGl2ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB3c3BfaXJxX2NoaXAgPSB7CisJLm5hbWUgPSAiV1NQIElDUyIsCisJLmlycV9zdGFydHVwCQk9IHdzcF9jaGlwX3N0YXJ0dXAsCisJLmlycV9tYXNrCQk9IHdzcF9jaGlwX21hc2tfaXJxLAorCS5pcnFfdW5tYXNrCQk9IHdzcF9jaGlwX3VubWFza19pcnEsCisJLmlycV9zZXRfYWZmaW5pdHkJPSB3c3BfY2hpcF9zZXRfYWZmaW5pdHkKK307CisKK3N0YXRpYyBpbnQgd3NwX2ljc19ob3N0X21hdGNoKHN0cnVjdCBpY3MgKmljcywgc3RydWN0IGRldmljZV9ub2RlICpkbikKK3sKKwkvKiBBbGwgSUNTcyBpbiB0aGUgc3lzdGVtIGltcGxlbWVudCBhIGdsb2JhbCBpcnEgbnVtYmVyIHNwYWNlLAorCSAqIHNvIG1hdGNoIGFnYWluc3QgdGhlbSBhbGwuICovCisJcmV0dXJuIG9mX2RldmljZV9pc19jb21wYXRpYmxlKGRuLCAiaWJtLHBwYy14aWNzIik7Cit9CisKK3N0YXRpYyBpbnQgd3NwX2ljc19tYXRjaF9od2lycShzdHJ1Y3Qgd3NwX2ljcyAqd3NwX2ljcywgdW5zaWduZWQgaW50IGh3aXJxKQoreworCWlmIChod2lycSA+PSB3c3BfaWNzLT5od2lycV9zdGFydCAmJgorCSAgICBod2lycSA8ICB3c3BfaWNzLT5od2lycV9zdGFydCArIHdzcF9pY3MtPmNvdW50KQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdzcF9pY3NfbWFwKHN0cnVjdCBpY3MgKmljcywgdW5zaWduZWQgaW50IHZpcnEpCit7CisJc3RydWN0IHdzcF9pY3MgKndzcF9pY3MgPSB0b193c3BfaWNzKGljcyk7CisJdW5zaWduZWQgaW50IGh3X2lycSA9IHZpcnFfdG9faHcodmlycSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghd3NwX2ljc19tYXRjaF9od2lycSh3c3BfaWNzLCBod19pcnEpKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCAmd3NwX2lycV9jaGlwLCBoYW5kbGVfZmFzdGVvaV9pcnEpOworCisJaXJxX3NldF9jaGlwX2RhdGEodmlycSwgd3NwX2ljcyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd3NwX2ljcy0+bG9jaywgZmxhZ3MpOworCWJpdG1hcF9hbGxvY2F0ZV9yZWdpb24od3NwX2ljcy0+Yml0bWFwLCBod19pcnEgLSB3c3BfaWNzLT5od2lycV9zdGFydCwgMCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd3NwX2ljcy0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdzcF9pY3NfbWFza191bmtub3duKHN0cnVjdCBpY3MgKmljcywgdW5zaWduZWQgbG9uZyBod19pcnEpCit7CisJc3RydWN0IHdzcF9pY3MgKndzcF9pY3MgPSB0b193c3BfaWNzKGljcyk7CisKKwlpZiAoIXdzcF9pY3NfbWF0Y2hfaHdpcnEod3NwX2ljcywgaHdfaXJxKSkKKwkJcmV0dXJuOworCisJcHJfZXJyKCIlczogSVJRICVsdSAocmVhbCkgaXMgaW52YWxpZCwgZGlzYWJsaW5nIGl0LlxuIiwgX19mdW5jX18sIGh3X2lycSk7CisJd3NwX21hc2tfcmVhbF9pcnEoaHdfaXJxLCB3c3BfaWNzKTsKK30KKworc3RhdGljIGxvbmcgd3NwX2ljc19nZXRfc2VydmVyKHN0cnVjdCBpY3MgKmljcywgdW5zaWduZWQgbG9uZyBod19pcnEpCit7CisJc3RydWN0IHdzcF9pY3MgKndzcF9pY3MgPSB0b193c3BfaWNzKGljcyk7CisKKwlpZiAoIXdzcF9pY3NfbWF0Y2hfaHdpcnEod3NwX2ljcywgaHdfaXJxKSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlyZXR1cm4gZ2V0X2lycV9zZXJ2ZXIod3NwX2ljcywgaHdfaXJxKTsKK30KKworLyogSFcgTnVtYmVyIGFsbG9jYXRpb24gQVBJICovCisKK3N0YXRpYyBzdHJ1Y3Qgd3NwX2ljcyAqd3NwX2ljc19maW5kX2RuX2ljcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqaXBhcmVudDsKKwlpbnQgaTsKKworCWlwYXJlbnQgPSBvZl9pcnFfZmluZF9wYXJlbnQoZG4pOworCWlmICghaXBhcmVudCkgeworCQlwcl9lcnIoIndzcF9pY3M6IEZhaWxlZCB0byBmaW5kIGludGVycnVwdCBwYXJlbnQhXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZm9yKGkgPSAwOyBpIDwgbnVtX2ljczsgaSsrKSB7CisJCWlmKGljc19saXN0W2ldLmRuID09IGlwYXJlbnQpCisJCQlicmVhazsKKwl9CisKKwlpZiAoaSA+PSBudW1faWNzKSB7CisJCXByX2Vycigid3NwX2ljczogVW5hYmxlIHRvIGZpbmQgcGFyZW50IGJpdG1hcCFcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gJmljc19saXN0W2ldOworfQorCitpbnQgd3NwX2ljc19hbGxvY19pcnEoc3RydWN0IGRldmljZV9ub2RlICpkbiwgaW50IG51bSkKK3sKKwlzdHJ1Y3Qgd3NwX2ljcyAqaWNzOworCWludCBvcmRlciwgb2Zmc2V0OworCisJaWNzID0gd3NwX2ljc19maW5kX2RuX2ljcyhkbik7CisJaWYgKCFpY3MpCisJCXJldHVybiAtRU5PREVWOworCisJLyogRmFzdCwgYnV0IG92ZXJseSBzdHJpY3QgaWYgbnVtIGlzbid0IGEgcG93ZXIgb2YgdHdvICovCisJb3JkZXIgPSBnZXRfY291bnRfb3JkZXIobnVtKTsKKworCXNwaW5fbG9ja19pcnEoJmljcy0+bG9jayk7CisJb2Zmc2V0ID0gYml0bWFwX2ZpbmRfZnJlZV9yZWdpb24oaWNzLT5iaXRtYXAsIGljcy0+Y291bnQsIG9yZGVyKTsKKwlzcGluX3VubG9ja19pcnEoJmljcy0+bG9jayk7CisKKwlpZiAob2Zmc2V0IDwgMCkKKwkJcmV0dXJuIG9mZnNldDsKKworCXJldHVybiBvZmZzZXQgKyBpY3MtPmh3aXJxX3N0YXJ0OworfQorCit2b2lkIHdzcF9pY3NfZnJlZV9pcnEoc3RydWN0IGRldmljZV9ub2RlICpkbiwgdW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3Qgd3NwX2ljcyAqaWNzOworCisJaWNzID0gd3NwX2ljc19maW5kX2RuX2ljcyhkbik7CisJaWYgKFdBUk5fT04oIWljcykpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnEoJmljcy0+bG9jayk7CisJYml0bWFwX3JlbGVhc2VfcmVnaW9uKGljcy0+Yml0bWFwLCBpcnEsIDApOworCXNwaW5fdW5sb2NrX2lycSgmaWNzLT5sb2NrKTsKK30KKworLyogSW5pdGlhbGlzYXRpb24gKi8KKworc3RhdGljIGludCBfX2luaXQgd3NwX2ljc19iaXRtYXBfc2V0dXAoc3RydWN0IHdzcF9pY3MgKmljcywKKwkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuKQoreworCWludCBsZW4sIGksIGosIHNpemU7CisJdTMyIHN0YXJ0LCBjb3VudDsKKwljb25zdCB1MzIgKnA7CisKKwlzaXplID0gQklUU19UT19MT05HUyhpY3MtPmNvdW50KSAqIHNpemVvZihsb25nKTsKKwlpY3MtPmJpdG1hcCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpY3MtPmJpdG1hcCkgeworCQlwcl9lcnIoIndzcF9pY3M6IEVOT01FTSBhbGxvY2F0aW5nIElSUSBiaXRtYXAhXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc3Bpbl9sb2NrX2luaXQoJmljcy0+bG9jayk7CisKKwlwID0gb2ZfZ2V0X3Byb3BlcnR5KGRuLCAiYXZhaWxhYmxlLXJhbmdlcyIsICZsZW4pOworCWlmICghcCB8fCAhbGVuKSB7CisJCS8qIEZJWE1FIHRoaXMgc2hvdWxkIGJlIGEgV0FSTigpIG9uY2UgbWFtYm8gaXMgdXBkYXRlZCAqLworCQlwcl9lcnIoIndzcF9pY3M6IE5vIGF2YWlsYWJsZS1yYW5nZXMgZGVmaW5lZCBmb3IgJXNcbiIsCisJCQlkbi0+ZnVsbF9uYW1lKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGxlbiAlICgyICogc2l6ZW9mKHUzMikpICE9IDApIHsKKwkJLyogRklYTUUgdGhpcyBzaG91bGQgYmUgYSBXQVJOKCkgb25jZSBtYW1ibyBpcyB1cGRhdGVkICovCisJCXByX2Vycigid3NwX2ljczogSW52YWxpZCBhdmFpbGFibGUtcmFuZ2VzIGZvciAlc1xuIiwKKwkJCWRuLT5mdWxsX25hbWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwliaXRtYXBfZmlsbChpY3MtPmJpdG1hcCwgaWNzLT5jb3VudCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuIC8gc2l6ZW9mKHUzMik7IGkgKz0gMikgeworCQlzdGFydCA9IG9mX3JlYWRfbnVtYmVyKHAgKyBpLCAxKTsKKwkJY291bnQgPSBvZl9yZWFkX251bWJlcihwICsgaSArIDEsIDEpOworCisJCXByX2RldmVsKCIlczogc3RhcnQ6ICVkIGNvdW50OiAlZFxuIiwgX19mdW5jX18sIHN0YXJ0LCBjb3VudCk7CisKKwkJaWYgKChzdGFydCArIGNvdW50KSA+IChpY3MtPmh3aXJxX3N0YXJ0ICsgaWNzLT5jb3VudCkgfHwKKwkJICAgICBzdGFydCA8IGljcy0+aHdpcnFfc3RhcnQpIHsKKwkJCXByX2Vycigid3NwX2ljczogSW52YWxpZCByYW5nZSEgLT4gJWQgdG8gJWRcbiIsCisJCQkJCXN0YXJ0LCBzdGFydCArIGNvdW50KTsKKwkJCWJyZWFrOworCQl9CisKKwkJZm9yIChqID0gMDsgaiA8IGNvdW50OyBqKyspCisJCQliaXRtYXBfcmVsZWFzZV9yZWdpb24oaWNzLT5iaXRtYXAsCisJCQkJKHN0YXJ0ICsgaikgLSBpY3MtPmh3aXJxX3N0YXJ0LCAwKTsKKwl9CisKKwkvKiBFbnN1cmUgTFNJcyBhcmUgbm90IGF2YWlsYWJsZSBmb3IgYWxsb2NhdGlvbiAqLworCWJpdG1hcF9hbGxvY2F0ZV9yZWdpb24oaWNzLT5iaXRtYXAsIGljcy0+bHNpX2Jhc2UsCisJCQkgICAgICAgZ2V0X2NvdW50X29yZGVyKGljcy0+bHNpX2NvdW50KSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgd3NwX2ljc19zZXR1cChzdHJ1Y3Qgd3NwX2ljcyAqaWNzLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuKQoreworCXUzMiBsc2lfYnVpZCwgbXNpX2J1aWQsIG1zaV9iYXNlLCBtc2lfY291bnQ7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCWNvbnN0IHUzMiAqcDsKKwlpbnQgcmMsIGxlbiwgaTsKKwl1NjQgY2FwcywgYnVpZDsKKworCXAgPSBvZl9nZXRfcHJvcGVydHkoZG4sICJpbnRlcnJ1cHQtcmFuZ2VzIiwgJmxlbik7CisJaWYgKCFwIHx8IGxlbiA8ICgyICogc2l6ZW9mKHUzMikpKSB7CisJCXByX2Vycigid3NwX2ljczogTm8vYmFkIGludGVycnVwdC1yYW5nZXMgZm91bmQgb24gJXNcbiIsCisJCQlkbi0+ZnVsbF9uYW1lKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJaWYgKGxlbiA+ICgyICogc2l6ZW9mKHUzMikpKSB7CisJCXByX2Vycigid3NwX2ljczogTXVsdGlwbGUgaWNzIHJhbmdlcyBub3Qgc3VwcG9ydGVkLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJlZ3MgPSBvZl9pb21hcChkbiwgMCk7CisJaWYgKCFyZWdzKSB7CisJCXByX2Vycigid3NwX2ljczogb2ZfaW9tYXAoJXMpIGZhaWxlZFxuIiwgZG4tPmZ1bGxfbmFtZSk7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJaWNzLT5od2lycV9zdGFydCA9IG9mX3JlYWRfbnVtYmVyKHAsIDEpOworCWljcy0+Y291bnQgPSBvZl9yZWFkX251bWJlcihwICsgMSwgMSk7CisJaWNzLT5yZWdzID0gcmVnczsKKworCWljcy0+Y2hpcF9pZCA9IHdzcF9nZXRfY2hpcF9pZChkbik7CisJaWYgKFdBUk5fT04oaWNzLT5jaGlwX2lkIDwgMCkpCisJCWljcy0+Y2hpcF9pZCA9IDA7CisKKwkvKiBHZXQgc29tZSBpbmZvcm1hdGlvbnMgYWJvdXQgdGhlIGNyaXR0ZXIgKi8KKwljYXBzID0gaW5fYmU2NChJQ1NfSU5UX0NBUFNfUkVHKGljcy0+cmVncykpOworCWJ1aWQgPSBpbl9iZTY0KElOVF9TUkNfTEFZRVJfQlVJRF9SRUcoaWNzLT5yZWdzKSk7CisJaWNzLT5sc2lfY291bnQgPSBjYXBzID4+IDU2OworCW1zaV9jb3VudCA9IChjYXBzID4+IDQ0KSAmIDB4N2ZmOworCisJLyogTm90ZTogTFNJIEJVSUQgaXMgOSBiaXRzLCBidXQgcmVhbGx5IG9ubHkgMyBhcmUgQlVJRCBhbmQgdGhlCisJICogcmVzdCBpcyBtaXhlZCBpbiB0aGUgaW50ZXJydXB0IG51bWJlci4gV2Ugc3RvcmUgdGhlIHdob2xlCisJICogdGhpbmcgdGhvdWdoCisJICovCisJbHNpX2J1aWQgPSAoYnVpZCA+PiA0OCkgJiAweDFmZjsKKwlpY3MtPmxzaV9iYXNlID0gKGljcy0+Y2hpcF9pZCA8PCBXU1BfSUNTX0NISVBfU0hJRlQpIHwgbHNpX2J1aWQgPDwgNTsKKwltc2lfYnVpZCA9IChidWlkID4+IDM3KSAmIDB4NzsKKwltc2lfYmFzZSA9IChpY3MtPmNoaXBfaWQgPDwgV1NQX0lDU19DSElQX1NISUZUKSB8IG1zaV9idWlkIDw8IDExOworCisJcHJfaW5mbygid3NwX2ljczogRm91bmQgJXNcbiIsIGRuLT5mdWxsX25hbWUpOworCXByX2luZm8oIndzcF9pY3M6ICAgIGlycSByYW5nZSA6IDB4JTA2bGx4Li4weCUwNmxseFxuIiwKKwkJaWNzLT5od2lycV9zdGFydCwgaWNzLT5od2lycV9zdGFydCArIGljcy0+Y291bnQgLSAxKTsKKwlwcl9pbmZvKCJ3c3BfaWNzOiAgICAlNGQgTFNJcyA6IDB4JTA2eC4uMHglMDZ4XG4iLAorCQlpY3MtPmxzaV9jb3VudCwgaWNzLT5sc2lfYmFzZSwKKwkJaWNzLT5sc2lfYmFzZSArIGljcy0+bHNpX2NvdW50IC0gMSk7CisJcHJfaW5mbygid3NwX2ljczogICAgJTRkIE1TSXMgOiAweCUwNnguLjB4JTA2eFxuIiwKKwkJbXNpX2NvdW50LCBtc2lfYmFzZSwKKwkJbXNpX2Jhc2UgKyBtc2lfY291bnQgLSAxKTsKKworCS8qIExldCdzIGNoZWNrIHRoZSBIVyBjb25maWcgaXMgc2FuZSAqLworCWlmIChpY3MtPmxzaV9iYXNlIDwgaWNzLT5od2lycV9zdGFydCB8fAorCSAgICAoaWNzLT5sc2lfYmFzZSArIGljcy0+bHNpX2NvdW50KSA+IChpY3MtPmh3aXJxX3N0YXJ0ICsgaWNzLT5jb3VudCkpCisJCXByX3dhcm5pbmcoIndzcF9pY3M6IFdBUk5JTkcgISBMU0lzIG91dCBvZiBpbnRlcnJ1cHQtcmFuZ2VzICFcbiIpOworCWlmIChtc2lfYmFzZSA8IGljcy0+aHdpcnFfc3RhcnQgfHwKKwkgICAgKG1zaV9iYXNlICsgbXNpX2NvdW50KSA+IChpY3MtPmh3aXJxX3N0YXJ0ICsgaWNzLT5jb3VudCkpCisJCXByX3dhcm5pbmcoIndzcF9pY3M6IFdBUk5JTkcgISBNU0lzIG91dCBvZiBpbnRlcnJ1cHQtcmFuZ2VzICFcbiIpOworCisJLyogV2UgZG9uJ3QgY2hlY2sgZm9yIG92ZXJsYXAgYmV0d2VlbiBMU0kgYW5kIE1TSSwgd2hpY2ggd2lsbCBoYXBwZW4KKwkgKiBpZiB3ZSB1c2UgdGhlIHNhbWUgQlVJRCwgSSdtIG5vdCBzdXJlIHlldCBob3cgbGVnaXQgdGhhdCBpcy4KKwkgKi8KKworCXJjID0gd3NwX2ljc19iaXRtYXBfc2V0dXAoaWNzLCBkbik7CisJaWYgKHJjKSB7CisJCWlvdW5tYXAocmVncyk7CisJCXJldHVybiByYzsKKwl9CisKKwlpY3MtPmRuID0gb2Zfbm9kZV9nZXQoZG4pOworCWFsbG9jX2lycV9tYXAoaWNzKTsKKworCWZvcihpID0gMDsgaSA8IGljcy0+Y291bnQ7IGkrKykKKwkJd3NwX21hc2tfcmVhbF9pcnEoaWNzLT5od2lycV9zdGFydCArIGksIGljcyk7CisKKwlpY3MtPmljcy5tYXAgPSB3c3BfaWNzX21hcDsKKwlpY3MtPmljcy5tYXNrX3Vua25vd24gPSB3c3BfaWNzX21hc2tfdW5rbm93bjsKKwlpY3MtPmljcy5nZXRfc2VydmVyID0gd3NwX2ljc19nZXRfc2VydmVyOworCWljcy0+aWNzLmhvc3RfbWF0Y2ggPSB3c3BfaWNzX2hvc3RfbWF0Y2g7CisKKwl4aWNzX3JlZ2lzdGVyX2ljcygmaWNzLT5pY3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCB3c3BfaWNzX3NldF9kZWZhdWx0X3NlcnZlcih2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJdTMyIGh3aWQ7CisKKwkvKiBGaW5kIHRoZSBzZXJ2ZXIgbnVtYmVyIGZvciB0aGUgYm9vdCBjcHUuICovCisJbnAgPSBvZl9nZXRfY3B1X25vZGUoYm9vdF9jcHVpZCwgTlVMTCk7CisJQlVHX09OKCFucCk7CisKKwlod2lkID0gZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChib290X2NwdWlkKTsKKworCXByX2luZm8oIndzcF9pY3M6IGRlZmF1bHQgc2VydmVyIGlzICUjeCwgQ1BVICVzXG4iLCBod2lkLCBucC0+ZnVsbF9uYW1lKTsKKwl4aWNzX2RlZmF1bHRfc2VydmVyID0gaHdpZDsKKworCW9mX25vZGVfcHV0KG5wKTsKK30KKworc3RhdGljIGludCBfX2luaXQgd3NwX2ljc19pbml0KHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpkbjsKKwlzdHJ1Y3Qgd3NwX2ljcyAqaWNzOworCWludCByYywgZm91bmQ7CisKKwl3c3BfaWNzX3NldF9kZWZhdWx0X3NlcnZlcigpOworCisJZm91bmQgPSAwOworCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShkbiwgTlVMTCwgImlibSxwcGMteGljcyIpCisJCWZvdW5kKys7CisKKwlpZiAoZm91bmQgPT0gMCkgeworCQlwcl9lcnIoIndzcF9pY3M6IE5vIElDUydzIGZvdW5kIVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWljc19saXN0ID0ga21hbGxvYyhzaXplb2YoKmljcykgKiBmb3VuZCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpY3NfbGlzdCkgeworCQlwcl9lcnIoIndzcF9pY3M6IE5vIG1lbW9yeSBmb3Igc3RydWN0cy5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwludW1faWNzID0gMDsKKwlpY3MgPSBpY3NfbGlzdDsKKwlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUoZG4sIE5VTEwsICJpYm0sd3NwLXhpY3MiKSB7CisJCXJjID0gd3NwX2ljc19zZXR1cChpY3MsIGRuKTsKKwkJaWYgKHJjID09IDApIHsKKwkJCWljcysrOworCQkJbnVtX2ljcysrOworCQl9CisJfQorCisJaWYgKGZvdW5kICE9IG51bV9pY3MpIHsKKwkJcHJfZXJyKCJ3c3BfaWNzOiBGYWlsZWQgc2V0dGluZyB1cCAlZCBJQ1Mnc1xuIiwKKwkJCWZvdW5kIC0gbnVtX2ljcyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBfX2luaXQgd3NwX2luaXRfaXJxKHZvaWQpCit7CisJd3NwX2ljc19pbml0KCk7CisJeGljc19pbml0KCk7CisKKwkvKiBXZSBuZWVkIHRvIHBhdGNoIG91ciBpcnEgY2hpcCdzIEVPSSB0byBwb2ludCB0byB0aGUgcmlnaHQgSUNQICovCisJd3NwX2lycV9jaGlwLmlycV9lb2kgPSBpY3Bfb3BzLT5lb2k7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3dzcC9pY3MuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvd3NwL2ljcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNGQ1MzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3dzcC9pY3MuaApAQCAtMCwwICsxLDIwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDkgSUJNIENvcnBvcmF0aW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX19JQ1NfSAorI2RlZmluZSBfX0lDU19ICisKKyNkZWZpbmUgWElWRV9BRERSX01BU0sJCTB4N0ZGVUxMCisKK2V4dGVybiB2b2lkIHdzcF9pbml0X2lycSh2b2lkKTsKKworZXh0ZXJuIGludCB3c3BfaWNzX2FsbG9jX2lycShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCBpbnQgbnVtKTsKK2V4dGVybiB2b2lkIHdzcF9pY3NfZnJlZV9pcnEoc3RydWN0IGRldmljZV9ub2RlICpkbiwgdW5zaWduZWQgaW50IGlycSk7CisKKyNlbmRpZiAvKiBfX0lDU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3dzcC9vcGJfcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3dzcC9vcGJfcGljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUwNTYzMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvd3NwL29wYl9waWMuYwpAQCAtMCwwICsxLDMzMiBAQAorLyoKKyAqIElCTSBPbmJvYXJkIFBlcmlwaGVyYWwgQnVzIEludGVycnVwdCBDb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IDIwMTAgSmFjayBNaWxsZXIsIElCTSBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKworI2luY2x1ZGUgPGFzbS9yZWdfYTIuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKyNkZWZpbmUgT1BCX05SX0lSUVMgMzIKKworI2RlZmluZSBPUEJfTUxTQVNJRVIJMHgwNCAgICAvKiBNTFMgQWNjdW11bGF0ZWQgU3RhdHVzIElFUiAqLworI2RlZmluZSBPUEJfTUxTSVIJMHg1MAkvKiBNTFMgSW50ZXJydXB0IFJlZ2lzdGVyICovCisjZGVmaW5lIE9QQl9NTFNJRVIJMHg1NAkvKiBNTFMgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBPUEJfTUxTSVBSCTB4NTgJLyogTUxTIEludGVycnVwdCBQb2xhcml0eSBSZWdpc3RlciAqLworI2RlZmluZSBPUEJfTUxTSUlSCTB4NWMJLyogTUxTIEludGVycnVwdCBJbnB1dHMgUmVnaXN0ZXIgKi8KKworc3RhdGljIGludCBvcGJfaW5kZXggPSAwOworCitzdHJ1Y3Qgb3BiX3BpYyB7CisJc3RydWN0IGlycV9ob3N0ICpob3N0OworCXZvaWQgKnJlZ3M7CisJaW50IGluZGV4OworCXNwaW5sb2NrX3QgbG9jazsKK307CisKK3N0YXRpYyB1MzIgb3BiX2luKHN0cnVjdCBvcGJfcGljICpvcGIsIGludCBvZmZzZXQpCit7CisJcmV0dXJuIGluX2JlMzIob3BiLT5yZWdzICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgb3BiX291dChzdHJ1Y3Qgb3BiX3BpYyAqb3BiLCBpbnQgb2Zmc2V0LCB1MzIgdmFsKQoreworCW91dF9iZTMyKG9wYi0+cmVncyArIG9mZnNldCwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgb3BiX3VubWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQoreworCXN0cnVjdCBvcGJfcGljICpvcGI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgaWVyLCBiaXRzZXQ7CisKKwlvcGIgPSBkLT5jaGlwX2RhdGE7CisJYml0c2V0ID0gKDEgPDwgKDMxIC0gaXJxZF90b19od2lycShkKSkpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9wYi0+bG9jaywgZmxhZ3MpOworCisJaWVyID0gb3BiX2luKG9wYiwgT1BCX01MU0lFUik7CisJb3BiX291dChvcGIsIE9QQl9NTFNJRVIsIGllciB8IGJpdHNldCk7CisJaWVyID0gb3BiX2luKG9wYiwgT1BCX01MU0lFUik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcGItPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgb3BiX21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlzdHJ1Y3Qgb3BiX3BpYyAqb3BiOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGllciwgbWFzazsKKworCW9wYiA9IGQtPmNoaXBfZGF0YTsKKwltYXNrID0gfigxIDw8ICgzMSAtIGlycWRfdG9faHdpcnEoZCkpKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZvcGItPmxvY2ssIGZsYWdzKTsKKworCWllciA9IG9wYl9pbihvcGIsIE9QQl9NTFNJRVIpOworCW9wYl9vdXQob3BiLCBPUEJfTUxTSUVSLCBpZXIgJiBtYXNrKTsKKwlpZXIgPSBvcGJfaW4ob3BiLCBPUEJfTUxTSUVSKTsgLy8gRmx1c2ggcG9zdGVkIHdyaXRlcworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3BiLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG9wYl9hY2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlzdHJ1Y3Qgb3BiX3BpYyAqb3BiOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGJpdHNldDsKKworCW9wYiA9IGQtPmNoaXBfZGF0YTsKKwliaXRzZXQgPSAoMSA8PCAoMzEgLSBpcnFkX3RvX2h3aXJxKGQpKSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb3BiLT5sb2NrLCBmbGFncyk7CisKKwlvcGJfb3V0KG9wYiwgT1BCX01MU0lSLCBiaXRzZXQpOworCW9wYl9pbihvcGIsIE9QQl9NTFNJUik7IC8vIEZsdXNoIHBvc3RlZCB3cml0ZXMKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9wYi0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBvcGJfbWFza19hY2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlzdHJ1Y3Qgb3BiX3BpYyAqb3BiOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGJpdHNldDsKKwl1MzIgaWVyLCBpcjsKKworCW9wYiA9IGQtPmNoaXBfZGF0YTsKKwliaXRzZXQgPSAoMSA8PCAoMzEgLSBpcnFkX3RvX2h3aXJxKGQpKSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb3BiLT5sb2NrLCBmbGFncyk7CisKKwlpZXIgPSBvcGJfaW4ob3BiLCBPUEJfTUxTSUVSKTsKKwlvcGJfb3V0KG9wYiwgT1BCX01MU0lFUiwgaWVyICYgfmJpdHNldCk7CisJaWVyID0gb3BiX2luKG9wYiwgT1BCX01MU0lFUik7IC8vIEZsdXNoIHBvc3RlZCB3cml0ZXMKKworCW9wYl9vdXQob3BiLCBPUEJfTUxTSVIsIGJpdHNldCk7CisJaXIgPSBvcGJfaW4ob3BiLCBPUEJfTUxTSVIpOyAvLyBGbHVzaCBwb3N0ZWQgd3JpdGVzCisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcGItPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBvcGJfc2V0X2lycV90eXBlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgaW50IGZsb3cpCit7CisJc3RydWN0IG9wYl9waWMgKm9wYjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpbnZlcnQsIGlwciwgbWFzaywgYml0OworCisJb3BiID0gZC0+Y2hpcF9kYXRhOworCisJLyogVGhlIG9ubHkgaW5mb3JtYXRpb24gd2UncmUgaW50ZXJlc3RlZCBpbiBpbiB0aGUgdHlwZSBpcyB3aGV0aGVyIGl0J3MKKwkgKiBhIGhpZ2ggb3IgbG93IHRyaWdnZXIuIEZvciBoaWdoIHRyaWdnZXJlZCBpbnRlcnJ1cHRzLCB0aGUgcG9sYXJpdHkKKwkgKiBzZXQgZm9yIGl0IGluIHRoZSBNTFMgSW50ZXJydXB0IFBvbGFyaXR5IFJlZ2lzdGVyIGlzIDAsIGZvciBsb3cKKwkgKiBpbnRlcnJ1cHRzIGl0J3MgMSBzbyB0aGF0IHRoZSBwcm9wZXIgaW5wdXQgaW4gdGhlIE1MUyBJbnRlcnJ1cHQgSW5wdXQKKwkgKiBSZWdpc3RlciBpcyBpbnRlcnJ1cHRlZCBhcyBhc3NlcnRpbmcgdGhlIGludGVycnVwdC4gKi8KKworCXN3aXRjaCAoZmxvdykgeworCQljYXNlIElSUV9UWVBFX05PTkU6CisJCQlvcGJfbWFza19pcnEoZCk7CisJCQlyZXR1cm4gMDsKKworCQljYXNlIElSUV9UWVBFX0xFVkVMX0hJR0g6CisJCQlpbnZlcnQgPSAwOworCQkJYnJlYWs7CisKKwkJY2FzZSBJUlFfVFlQRV9MRVZFTF9MT1c6CisJCQlpbnZlcnQgPSAxOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCWJpdCA9ICgxIDw8ICgzMSAtIGlycWRfdG9faHdpcnEoZCkpKTsKKwltYXNrID0gfmJpdDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZvcGItPmxvY2ssIGZsYWdzKTsKKworCWlwciA9IG9wYl9pbihvcGIsIE9QQl9NTFNJUFIpOworCWlwciA9IChpcHIgJiBtYXNrKSB8IChpbnZlcnQgPyBiaXQgOiAwKTsKKwlvcGJfb3V0KG9wYiwgT1BCX01MU0lQUiwgaXByKTsKKwlpcHIgPSBvcGJfaW4ob3BiLCBPUEJfTUxTSVBSKTsgIC8vIEZsdXNoIHBvc3RlZCB3cml0ZXMKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9wYi0+bG9jaywgZmxhZ3MpOworCisJLyogUmVjb3JkIHRoZSB0eXBlIGluIHRoZSBpbnRlcnJ1cHQgZGVzY3JpcHRvciAqLworCWlycWRfc2V0X3RyaWdnZXJfdHlwZShkLCBmbG93KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIG9wYl9pcnFfY2hpcCA9IHsKKwkubmFtZQkJPSAiT1BCIiwKKwkuaXJxX21hc2sJPSBvcGJfbWFza19pcnEsCisJLmlycV91bm1hc2sJPSBvcGJfdW5tYXNrX2lycSwKKwkuaXJxX21hc2tfYWNrCT0gb3BiX21hc2tfYWNrX2lycSwKKwkuaXJxX2Fjawk9IG9wYl9hY2tfaXJxLAorCS5pcnFfc2V0X3R5cGUJPSBvcGJfc2V0X2lycV90eXBlCit9OworCitzdGF0aWMgaW50IG9wYl9ob3N0X21hcChzdHJ1Y3QgaXJxX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCB2aXJxLAorCQlpcnFfaHdfbnVtYmVyX3QgaHdpcnEpCit7CisJc3RydWN0IG9wYl9waWMgKm9wYjsKKworCW9wYiA9IGhvc3QtPmhvc3RfZGF0YTsKKworCS8qIE1vc3Qgb2YgdGhlIGltcG9ydGFudCBzdHVmZiBpcyBoYW5kbGVkIGJ5IHRoZSBnZW5lcmljIGhvc3QgY29kZSwgbGlrZQorCSAqIHRoZSBsb29rdXAsIHNvIGp1c3QgYXR0YWNoIHNvbWUgaW5mbyB0byB0aGUgdmlydHVhbCBpcnEgKi8KKworCWlycV9zZXRfY2hpcF9kYXRhKHZpcnEsIG9wYik7CisJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKHZpcnEsICZvcGJfaXJxX2NoaXAsIGhhbmRsZV9sZXZlbF9pcnEpOworCWlycV9zZXRfaXJxX3R5cGUodmlycSwgSVJRX1RZUEVfTk9ORSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcGJfaG9zdF94bGF0ZShzdHJ1Y3QgaXJxX2hvc3QgKmhvc3QsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sCisJCWNvbnN0IHUzMiAqaW50c3BlYywgdW5zaWduZWQgaW50IGludHNpemUsCisJCWlycV9od19udW1iZXJfdCAqb3V0X2h3aXJxLCB1bnNpZ25lZCBpbnQgKm91dF90eXBlKQoreworCS8qIEludGVycnVwdCBzaXplIG11c3QgPT0gMiAqLworCUJVR19PTihpbnRzaXplICE9IDIpOworCSpvdXRfaHdpcnEgPSBpbnRzcGVjWzBdOworCSpvdXRfdHlwZSA9IGludHNwZWNbMV07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2hvc3Rfb3BzIG9wYl9ob3N0X29wcyA9IHsKKwkubWFwID0gb3BiX2hvc3RfbWFwLAorCS54bGF0ZSA9IG9wYl9ob3N0X3hsYXRlLAorfTsKKworaXJxcmV0dXJuX3Qgb3BiX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKnByaXZhdGUpCit7CisJc3RydWN0IG9wYl9waWMgKm9wYjsKKwl1MzIgaXIsIHNyYywgc3VidmlycTsKKworCW9wYiA9IChzdHJ1Y3Qgb3BiX3BpYyAqKSBwcml2YXRlOworCisJLyogUmVhZCB0aGUgT1BCIE1MUyBJbnRlcnJ1cHQgUmVnaXN0ZXIgZm9yCisJICogYXNzZXJ0ZWQgaW50ZXJydXB0cyAqLworCWlyID0gb3BiX2luKG9wYiwgT1BCX01MU0lSKTsKKwlpZiAoIWlyKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlkbyB7CisJCS8qIEdldCAxIC0gMzIgc291cmNlLCAqTk9UKiBiaXQgKi8KKwkJc3JjID0gMzIgLSBmZnMoaXIpOworCisJCS8qIFRyYW5zbGF0ZSBmcm9tIHRoZSBPUEIncyBjb25jZXB0aW9uIG9mIGludGVycnVwdCBudW1iZXIgdG8KKwkJICogTGludXgncyB2aXJ0dWFsIElSUSAqLworCisJCXN1YnZpcnEgPSBpcnFfbGluZWFyX3Jldm1hcChvcGItPmhvc3QsIHNyYyk7CisKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKHN1YnZpcnEpOworCX0gd2hpbGUgKChpciA9IG9wYl9pbihvcGIsIE9QQl9NTFNJUikpKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RydWN0IG9wYl9waWMgKm9wYl9waWNfaW5pdF9vbmUoc3RydWN0IGRldmljZV9ub2RlICpkbikKK3sKKwlzdHJ1Y3Qgb3BiX3BpYyAqb3BiOworCXN0cnVjdCByZXNvdXJjZSByZXM7CisKKwlpZiAob2ZfYWRkcmVzc190b19yZXNvdXJjZShkbiwgMCwgJnJlcykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJvcGI6IENvdWxkbid0IHRyYW5zbGF0ZSByZXNvdXJjZVxuIik7CisJCXJldHVybiAgTlVMTDsKKwl9CisKKwlvcGIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb3BiX3BpYyksIEdGUF9LRVJORUwpOworCWlmICghb3BiKSB7CisJCXByaW50ayhLRVJOX0VSUiAib3BiOiBGYWlsZWQgdG8gYWxsb2NhdGUgb3BiIHN0cnVjdCFcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBHZXQgYWNjZXNzIHRvIHRoZSBPUEIgTU1JTyByZWdpc3RlcnMgKi8KKwlvcGItPnJlZ3MgPSBpb3JlbWFwKHJlcy5zdGFydCArIDB4MTAwMDAsIDB4MTAwMCk7CisJaWYgKCFvcGItPnJlZ3MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJvcGI6IEZhaWxlZCB0byBhbGxvY2F0ZSByZWdpc3RlciBzcGFjZSFcbiIpOworCQlnb3RvIGZyZWVfb3BiOworCX0KKworCS8qIEFsbG9jYXRlIGFuIGlycSBob3N0IHNvIHRoYXQgTGludXgga25vd3MgdGhhdCBkZXNwaXRlIG9ubHkKKwkgKiBoYXZpbmcgb25lIGludGVycnVwdCB0byBpc3N1ZSwgd2UncmUgdGhlIGNvbnRyb2xsZXIgZm9yIG11bHRpcGxlCisJICogaGFyZHdhcmUgSVJRcywgc28gbGF0ZXIgd2UgY2FuIGxvb2t1cCB0aGVpciB2aXJ0dWFsIElSUXMuICovCisKKwlvcGItPmhvc3QgPSBpcnFfYWxsb2NfaG9zdChkbiwgSVJRX0hPU1RfTUFQX0xJTkVBUiwKKwkJCU9QQl9OUl9JUlFTLCAmb3BiX2hvc3Rfb3BzLCAtMSk7CisKKwlpZiAoIW9wYi0+aG9zdCkgeworCQlwcmludGsoS0VSTl9FUlIgIm9wYjogRmFpbGVkIHRvIGFsbG9jYXRlIElSUSBob3N0IVxuIik7CisJCWdvdG8gZnJlZV9yZWdzOworCX0KKworCW9wYi0+aW5kZXggPSBvcGJfaW5kZXgrKzsKKwlzcGluX2xvY2tfaW5pdCgmb3BiLT5sb2NrKTsKKwlvcGItPmhvc3QtPmhvc3RfZGF0YSA9IG9wYjsKKworCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgYnkgZGVmYXVsdCAqLworCW9wYl9vdXQob3BiLCBPUEJfTUxTQVNJRVIsIDApOworCW9wYl9vdXQob3BiLCBPUEJfTUxTSUVSLCAwKTsKKworCS8qIEFDSyBhbnkgaW50ZXJydXB0cyBsZWZ0IGJ5IEZXICovCisJb3BiX291dChvcGIsIE9QQl9NTFNJUiwgMHhGRkZGRkZGRik7CisKKwlyZXR1cm4gb3BiOworCitmcmVlX3JlZ3M6CisJaW91bm1hcChvcGItPnJlZ3MpOworZnJlZV9vcGI6CisJa2ZyZWUob3BiKTsKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBfX2luaXQgb3BiX3BpY19pbml0KHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpkbjsKKwlzdHJ1Y3Qgb3BiX3BpYyAqb3BiOworCWludCB2aXJxOworCWludCByYzsKKworCS8qIENhbGwgaW5pdF9vbmUgZm9yIGVhY2ggT1BCIGRldmljZSAqLworCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShkbiwgTlVMTCwgImlibSxvcGIiKSB7CisKKwkJLyogRmlsbCBpbiBhbiBPUEIgc3RydWN0ICovCisJCW9wYiA9IG9wYl9waWNfaW5pdF9vbmUoZG4pOworCQlpZiAoIW9wYikgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAib3BiOiBGYWlsZWQgdG8gaW5pdCBub2RlLCBza2lwcGVkIVxuIik7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIE1hcCAvIGdldCBvcGIncyBoYXJkd2FyZSB2aXJ0dWFsIGlycSAqLworCQl2aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoZG4sIDApOworCQlpZiAodmlycSA8PSAwKSB7CisJCQlwcmludGsoIm9wYjogaXJxX29wX3BhcnNlX2FuZF9tYXAgZmFpbGVkIVxuIik7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIEF0dGFjaCBvcGIgaW50ZXJydXB0IGhhbmRsZXIgdG8gbmV3IHZpcnR1YWwgSVJRICovCisJCXJjID0gcmVxdWVzdF9pcnEodmlycSwgb3BiX2lycV9oYW5kbGVyLCAwLCAiT1BCIExTIENhc2NhZGUiLCBvcGIpOworCQlpZiAocmMpIHsKKwkJCXByaW50aygib3BiOiByZXF1ZXN0X2lycSBmYWlsZWQ6ICVkXG4iLCByYyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXByaW50aygiT1BCJWQgaW5pdCB3aXRoICVkIElSUXMgYXQgJXBcbiIsIG9wYi0+aW5kZXgsCisJCQkJT1BCX05SX0lSUVMsIG9wYi0+cmVncyk7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy93c3AvcHNyMi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy93c3AvcHNyMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZjI4OTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3dzcC9wc3IyLmMKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4LTIwMTEsIElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSA8YXNtL3VkYmcuaD4KKworI2luY2x1ZGUgImljcy5oIgorI2luY2x1ZGUgIndzcC5oIgorCisKK3N0YXRpYyB2b2lkIHBzcjJfc3Bpbih2b2lkKQoreworCWhhcmRfaXJxX2Rpc2FibGUoKTsKKwlmb3IgKDs7KSA7Cit9CisKK3N0YXRpYyB2b2lkIHBzcjJfcmVzdGFydChjaGFyICpjbWQpCit7CisJcHNyMl9zcGluKCk7Cit9CisKK3N0YXRpYyBpbnQgcHNyMl9wcm9iZV9kZXZpY2VzKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKworCS8qIE91ciBSVEMgaXMgYSBkczE1MDAuIEl0IHNlZW1zIHRvIGJlIHByb2dyYW1hdGljYWxseSBjb21wYXRpYmxlCisJICogd2l0aCB0aGUgZHMxNTExIGZvciB3aGljaCB3ZSBoYXZlIGEgZHJpdmVyIHNvIGxldCdzIHVzZSB0aGF0CisJICovCisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiZGFsbGFzLGRzMTUwMCIpOworCWlmIChucCAhPSBOVUxMKSB7CisJCXN0cnVjdCByZXNvdXJjZSByZXM7CisJCWlmIChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAmcmVzKSA9PSAwKQorCQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgiZHMxNTExIiwgMCwgJnJlcywgMSk7CisJfQorCXJldHVybiAwOworfQorbWFjaGluZV9hcmNoX2luaXRjYWxsKHBzcjJfbWQsIHBzcjJfcHJvYmVfZGV2aWNlcyk7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBwc3IyX3NldHVwX2FyY2godm9pZCkKK3sKKwkvKiBpbml0IHRvIHNvbWUgfnNhbmUgdmFsdWUgdW50aWwgY2FsaWJyYXRlX2RlbGF5KCkgcnVucyAqLworCWxvb3BzX3Blcl9qaWZmeSA9IDUwMDAwMDAwOworCisJc2NvbV9pbml0X3dzcCgpOworCisJLyogU2V0dXAgU01QIGNhbGxiYWNrICovCisjaWZkZWYgQ09ORklHX1NNUAorCWEyX3NldHVwX3NtcCgpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQgX19pbml0IHBzcjJfcHJvYmUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7CisKKwlpZiAoIW9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiaWJtLHBzcjIiKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHBzcjJfaW5pdF9pcnEodm9pZCkKK3sKKwl3c3BfaW5pdF9pcnEoKTsKKwlvcGJfcGljX2luaXQoKTsKK30KKworZGVmaW5lX21hY2hpbmUocHNyMl9tZCkgeworCS5uYW1lCQkJPSAiUFNSMiBBMiIsCisJLnByb2JlCQkJPSBwc3IyX3Byb2JlLAorCS5zZXR1cF9hcmNoCQk9IHBzcjJfc2V0dXBfYXJjaCwKKwkucmVzdGFydAkJPSBwc3IyX3Jlc3RhcnQsCisJLnBvd2VyX29mZgkJPSBwc3IyX3NwaW4sCisJLmhhbHQJCQk9IHBzcjJfc3BpbiwKKwkuY2FsaWJyYXRlX2RlY3IJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKKwkuaW5pdF9JUlEJCT0gcHNyMl9pbml0X2lycSwKKwkucHJvZ3Jlc3MJCT0gdWRiZ19wcm9ncmVzcywKKwkucG93ZXJfc2F2ZQkJPSBib29rM2VfaWRsZSwKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3dzcC9zY29tX3NtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy93c3Avc2NvbV9zbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDFlNzgwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy93c3Avc2NvbV9zbXAuYwpAQCAtMCwwICsxLDQyNyBAQAorLyoKKyAqIFNDT00gc3VwcG9ydCBmb3IgQTIgcGxhdGZvcm1zCisgKgorICogQ29weXJpZ2h0IDIwMDctMjAxMSBCZW5qYW1pbiBIZXJyZW5zY2htaWR0LCBEYXZpZCBHaWJzb24sCisgKgkJICAgICAgIE1pY2hhZWwgRWxsZXJtYW4sIElCTSBDb3JwLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL2NwdXRocmVhZHMuaD4KKyNpbmNsdWRlIDxhc20vcmVnX2EyLmg+CisjaW5jbHVkZSA8YXNtL3Njb20uaD4KKyNpbmNsdWRlIDxhc20vdWRiZy5oPgorCisjaW5jbHVkZSAid3NwLmgiCisKKyNkZWZpbmUgU0NPTV9SQU1DCQkweDJhCQkvKiBSYW0gQ29tbWFuZCAqLworI2RlZmluZSBTQ09NX1JBTUNfVEdUMV9FWFQJMHg4MDAwMDAwMAorI2RlZmluZSBTQ09NX1JBTUNfU1JDMV9FWFQJMHg0MDAwMDAwMAorI2RlZmluZSBTQ09NX1JBTUNfU1JDMl9FWFQJMHgyMDAwMDAwMAorI2RlZmluZSBTQ09NX1JBTUNfU1JDM19FWFQJMHgxMDAwMDAwMAorI2RlZmluZSBTQ09NX1JBTUNfRU5BQkxFCTB4MDAwODAwMDAKKyNkZWZpbmUgU0NPTV9SQU1DX1RIUkVBRFNFTAkweDAwMDYwMDAwCisjZGVmaW5lIFNDT01fUkFNQ19FWEVDVVRFCTB4MDAwMTAwMDAKKyNkZWZpbmUgU0NPTV9SQU1DX01TUl9PVkVSUklERQkweDAwMDA4MDAwCisjZGVmaW5lIFNDT01fUkFNQ19NU1JfUFIJMHgwMDAwNDAwMAorI2RlZmluZSBTQ09NX1JBTUNfTVNSX0dTCTB4MDAwMDIwMDAKKyNkZWZpbmUgU0NPTV9SQU1DX0ZPUkNFCQkweDAwMDAxMDAwCisjZGVmaW5lIFNDT01fUkFNQ19GTFVTSAkJMHgwMDAwMDgwMAorI2RlZmluZSBTQ09NX1JBTUNfSU5URVJSVVBUCTB4MDAwMDAwMDQKKyNkZWZpbmUgU0NPTV9SQU1DX0VSUk9SCQkweDAwMDAwMDAyCisjZGVmaW5lIFNDT01fUkFNQ19ET05FCQkweDAwMDAwMDAxCisjZGVmaW5lIFNDT01fUkFNSQkJMHgyOQkJLyogUmFtIEluc3RydWN0aW9uICovCisjZGVmaW5lIFNDT01fUkFNSUMJCTB4MjgJCS8qIFJhbSBJbnN0cnVjdGlvbiBhbmQgQ29tbWFuZCAqLworI2RlZmluZSBTQ09NX1JBTUlDX0lOU04JCTB4ZmZmZmZmZmYwMDAwMDAwMAorI2RlZmluZSBTQ09NX1JBTUQJCTB4MmQJCS8qIFJhbSBEYXRhICovCisjZGVmaW5lIFNDT01fUkFNREgJCTB4MmUJCS8qIFJhbSBEYXRhIEhpZ2ggKi8KKyNkZWZpbmUgU0NPTV9SQU1ETAkJMHgyZgkJLyogUmFtIERhdGEgTG93ICovCisjZGVmaW5lIFNDT01fUENDUjAJCTB4MzMJCS8qIFBDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMCAqLworI2RlZmluZSBTQ09NX1BDQ1IwX0VOQUJMRV9ERUJVRwkweDgwMDAwMDAwCisjZGVmaW5lIFNDT01fUENDUjBfRU5BQkxFX1JBTQkweDQwMDAwMDAwCisjZGVmaW5lIFNDT01fVEhSQ1RMCQkweDMwCQkvKiBUaHJlYWQgQ29udHJvbCBhbmQgU3RhdHVzICovCisjZGVmaW5lIFNDT01fVEhSQ1RMX1QwX1NUT1AJMHg4MDAwMDAwMAorI2RlZmluZSBTQ09NX1RIUkNUTF9UMV9TVE9QCTB4NDAwMDAwMDAKKyNkZWZpbmUgU0NPTV9USFJDVExfVDJfU1RPUAkweDIwMDAwMDAwCisjZGVmaW5lIFNDT01fVEhSQ1RMX1QzX1NUT1AJMHgxMDAwMDAwMAorI2RlZmluZSBTQ09NX1RIUkNUTF9UMF9TVEVQCTB4MDgwMDAwMDAKKyNkZWZpbmUgU0NPTV9USFJDVExfVDFfU1RFUAkweDA0MDAwMDAwCisjZGVmaW5lIFNDT01fVEhSQ1RMX1QyX1NURVAJMHgwMjAwMDAwMAorI2RlZmluZSBTQ09NX1RIUkNUTF9UM19TVEVQCTB4MDEwMDAwMDAKKyNkZWZpbmUgU0NPTV9USFJDVExfVDBfUlVOCTB4MDA4MDAwMDAKKyNkZWZpbmUgU0NPTV9USFJDVExfVDFfUlVOCTB4MDA0MDAwMDAKKyNkZWZpbmUgU0NPTV9USFJDVExfVDJfUlVOCTB4MDAyMDAwMDAKKyNkZWZpbmUgU0NPTV9USFJDVExfVDNfUlVOCTB4MDAxMDAwMDAKKyNkZWZpbmUgU0NPTV9USFJDVExfVDBfUE0JMHgwMDA4MDAwMAorI2RlZmluZSBTQ09NX1RIUkNUTF9UMV9QTQkweDAwMDQwMDAwCisjZGVmaW5lIFNDT01fVEhSQ1RMX1QyX1BNCTB4MDAwMjAwMDAKKyNkZWZpbmUgU0NPTV9USFJDVExfVDNfUE0JMHgwMDAxMDAwMAorI2RlZmluZSBTQ09NX1RIUkNUTF9UMF9VREUJMHgwMDAwODAwMAorI2RlZmluZSBTQ09NX1RIUkNUTF9UMV9VREUJMHgwMDAwNDAwMAorI2RlZmluZSBTQ09NX1RIUkNUTF9UMl9VREUJMHgwMDAwMjAwMAorI2RlZmluZSBTQ09NX1RIUkNUTF9UM19VREUJMHgwMDAwMTAwMAorI2RlZmluZSBTQ09NX1RIUkNUTF9BU1lOQ19ESVMJMHgwMDAwMDgwMAorI2RlZmluZSBTQ09NX1RIUkNUTF9UQl9ESVMJMHgwMDAwMDQwMAorI2RlZmluZSBTQ09NX1RIUkNUTF9ERUNfRElTCTB4MDAwMDAyMDAKKyNkZWZpbmUgU0NPTV9USFJDVExfQU5ECQkweDMxCQkvKiBUaHJlYWQgQ29udHJvbCBhbmQgU3RhdHVzICovCisjZGVmaW5lIFNDT01fVEhSQ1RMX09SCQkweDMyCQkvKiBUaHJlYWQgQ29udHJvbCBhbmQgU3RhdHVzICovCisKKworc3RhdGljIERFRklORV9QRVJfQ1BVKHNjb21fbWFwX3QsIHNjb21fcHRycyk7CisKK3N0YXRpYyBzY29tX21hcF90IGdldF9zY29tKGludCBjcHUsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGludCAqZmlyc3RfdGhyZWFkKQoreworCXNjb21fbWFwX3Qgc2NvbSA9IHBlcl9jcHUoc2NvbV9wdHJzLCBjcHUpOworCWludCB0Y3B1OworCisJaWYgKHNjb21fbWFwX29rKHNjb20pKSB7CisJCSpmaXJzdF90aHJlYWQgPSAwOworCQlyZXR1cm4gc2NvbTsKKwl9CisKKwkqZmlyc3RfdGhyZWFkID0gMTsKKworCXNjb20gPSBzY29tX21hcF9kZXZpY2UobnAsIDApOworCisJZm9yICh0Y3B1ID0gY3B1X2ZpcnN0X3RocmVhZF9zaWJsaW5nKGNwdSk7CisJICAgICB0Y3B1IDw9IGNwdV9sYXN0X3RocmVhZF9zaWJsaW5nKGNwdSk7IHRjcHUrKykKKwkJcGVyX2NwdShzY29tX3B0cnMsIHRjcHUpID0gc2NvbTsKKworCS8qIEhhY2s6IGZvciB0aGUgYm9vdCBjb3JlLCB0aGlzIHdpbGwgYWN0dWFsbHkgZ2V0IGNhbGxlZCBvbgorCSAqIHRoZSBzZWNvbmQgdGhyZWFkIHVwLCBub3QgdGhlIGZpcnN0IHNvIG91ciB0ZXN0IGFib3ZlIHdpbGwKKwkgKiBzZXQgZmlyc3RfdGhyZWFkIGluY29ycmVjdGx5LiAqLworCWlmIChjcHVfZmlyc3RfdGhyZWFkX3NpYmxpbmcoY3B1KSA9PSAwKQorCQkqZmlyc3RfdGhyZWFkID0gMDsKKworCXJldHVybiBzY29tOworfQorCitzdGF0aWMgaW50IGEyX3Njb21fcmFtKHNjb21fbWFwX3Qgc2NvbSwgaW50IHRocmVhZCwgdTMyIGluc24sIGludCBleHRtYXNrKQoreworCXU2NCBjbWQsIG1hc2ssIHZhbDsKKwlpbnQgbiA9IDA7CisKKwljbWQgPSAoKHU2NClpbnNuIDw8IDMyKSB8ICgoKHU2NClleHRtYXNrICYgMHhmKSA8PCAyOCkKKwkJfCAoKHU2NCl0aHJlYWQgPDwgMTcpIHwgU0NPTV9SQU1DX0VOQUJMRSB8IFNDT01fUkFNQ19FWEVDVVRFOworCW1hc2sgPSBTQ09NX1JBTUNfRE9ORSB8IFNDT01fUkFNQ19JTlRFUlJVUFQgfCBTQ09NX1JBTUNfRVJST1I7CisKKwlzY29tX3dyaXRlKHNjb20sIFNDT01fUkFNSUMsIGNtZCk7CisKKwl3aGlsZSAoISgodmFsID0gc2NvbV9yZWFkKHNjb20sIFNDT01fUkFNQykpICYgbWFzaykpIHsKKwkJcHJfZGV2ZWwoIldhaXRpbmcgb24gUkFNQyA9IDB4JWxseFxuIiwgdmFsKTsKKwkJaWYgKCsrbiA9PSAzKSB7CisJCQlwcl9lcnIoIlJBTUMgdGltZW91dCBvbiBpbnN0cnVjdGlvbiAweCUwOHgsIHRocmVhZCAlZFxuIiwKKwkJCSAgICAgICBpbnNuLCB0aHJlYWQpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJaWYgKHZhbCAmIFNDT01fUkFNQ19JTlRFUlJVUFQpIHsKKwkJcHJfZXJyKCJSQU1DIGludGVycnVwdCBvbiBpbnN0cnVjdGlvbiAweCUwOHgsIHRocmVhZCAlZFxuIiwKKwkJICAgICAgIGluc24sIHRocmVhZCk7CisJCXJldHVybiAtU0NPTV9SQU1DX0lOVEVSUlVQVDsKKwl9CisKKwlpZiAodmFsICYgU0NPTV9SQU1DX0VSUk9SKSB7CisJCXByX2VycigiUkFNQyBlcnJvciBvbiBpbnN0cnVjdGlvbiAweCUwOHgsIHRocmVhZCAlZFxuIiwKKwkJICAgICAgIGluc24sIHRocmVhZCk7CisJCXJldHVybiAtU0NPTV9SQU1DX0VSUk9SOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGEyX3Njb21fZ2V0Z3ByKHNjb21fbWFwX3Qgc2NvbSwgaW50IHRocmVhZCwgaW50IGdwciwgaW50IGFsdCwKKwkJCSAgdTY0ICpvdXRfZ3ByKQoreworCWludCByYzsKKworCS8qIG9yIHJOLCByTiwgck4gKi8KKwl1MzIgaW5zbiA9IDB4N2MwMDAzNzggfCAoZ3ByIDw8IDIxKSB8IChncHIgPDwgMTYpIHwgKGdwciA8PCAxMSk7CisJcmMgPSBhMl9zY29tX3JhbShzY29tLCB0aHJlYWQsIGluc24sIGFsdCA/IDB4ZiA6IDB4MCk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwkqb3V0X2dwciA9IHNjb21fcmVhZChzY29tLCBTQ09NX1JBTUQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYTJfc2NvbV9nZXRzcHIoc2NvbV9tYXBfdCBzY29tLCBpbnQgdGhyZWFkLCBpbnQgc3ByLCB1NjQgKm91dF9zcHIpCit7CisJaW50IHJjLCBzcHJoaSwgc3BybG87CisJdTMyIGluc247CisKKwlzcHJoaSA9IHNwciA+PiA1OworCXNwcmxvID0gc3ByICYgMHgxZjsKKwlpbnNuID0gMHg3YzIwMDJhNiB8IChzcHJsbyA8PCAxNikgfCAoc3ByaGkgPDwgMTEpOyAvKiBtZnNwciByMSxzcHIgKi8KKworCWlmIChzcHIgPT0gMHgwZmYwKQorCQlpbnNuID0gMHg3YzIwMDBhNjsgLyogbWZtc3IgcjEgKi8KKworCXJjID0gYTJfc2NvbV9yYW0oc2NvbSwgdGhyZWFkLCBpbnNuLCAweGYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCXJldHVybiBhMl9zY29tX2dldGdwcihzY29tLCB0aHJlYWQsIDEsIDEsIG91dF9zcHIpOworfQorCitzdGF0aWMgaW50IGEyX3Njb21fc2V0Z3ByKHNjb21fbWFwX3Qgc2NvbSwgaW50IHRocmVhZCwgaW50IGdwciwKKwkJCSAgaW50IGFsdCwgdTY0IHZhbCkKK3sKKwl1MzIgbGlzID0gMHgzYzAwMDAwMCB8IChncHIgPDwgMjEpOworCXUzMiBsaSA9IDB4MzgwMDAwMDAgfCAoZ3ByIDw8IDIxKTsKKwl1MzIgb3JpcyA9IDB4NjQwMDAwMDAgfCAoZ3ByIDw8IDIxKSB8IChncHIgPDwgMTYpOworCXUzMiBvcmkgPSAweDYwMDAwMDAwIHwgKGdwciA8PCAyMSkgfCAoZ3ByIDw8IDE2KTsKKwl1MzIgcmxkaWNyMzIgPSAweDc4MDAwN2M2IHwgKGdwciA8PCAyMSkgfCAoZ3ByIDw8IDE2KTsKKwl1MzIgaGlnaGVzdCA9IHZhbCA+PiA0ODsKKwl1MzIgaGlnaGVyID0gKHZhbCA+PiAzMikgJiAweGZmZmY7CisJdTMyIGhpZ2ggPSAodmFsID4+IDE2KSAmIDB4ZmZmZjsKKwl1MzIgbG93ID0gdmFsICYgMHhmZmZmOworCWludCBsZXh0ID0gYWx0ID8gMHg4IDogMHgwOworCWludCBvZXh0ID0gYWx0ID8gMHhmIDogMHgwOworCWludCByYyA9IDA7CisKKwlpZiAoaGlnaGVzdCkKKwkJcmMgfD0gYTJfc2NvbV9yYW0oc2NvbSwgdGhyZWFkLCBsaXMgfCBoaWdoZXN0LCBsZXh0KTsKKworCWlmIChoaWdoZXIpIHsKKwkJaWYgKGhpZ2hlc3QpCisJCQlyYyB8PSBhMl9zY29tX3JhbShzY29tLCB0aHJlYWQsIG9yaXMgfCBoaWdoZXIsIG9leHQpOworCQllbHNlCisJCQlyYyB8PSBhMl9zY29tX3JhbShzY29tLCB0aHJlYWQsIGxpIHwgaGlnaGVyLCBsZXh0KTsKKwl9CisKKwlpZiAoaGlnaGVzdCB8fCBoaWdoZXIpCisJCXJjIHw9IGEyX3Njb21fcmFtKHNjb20sIHRocmVhZCwgcmxkaWNyMzIsIG9leHQpOworCisJaWYgKGhpZ2gpIHsKKwkJaWYgKGhpZ2hlc3QgfHwgaGlnaGVyKQorCQkJcmMgfD0gYTJfc2NvbV9yYW0oc2NvbSwgdGhyZWFkLCBvcmlzIHwgaGlnaCwgb2V4dCk7CisJCWVsc2UKKwkJCXJjIHw9IGEyX3Njb21fcmFtKHNjb20sIHRocmVhZCwgbGlzIHwgaGlnaCwgbGV4dCk7CisJfQorCisJaWYgKGhpZ2hlc3QgfHwgaGlnaGVyIHx8IGhpZ2gpCisJCXJjIHw9IGEyX3Njb21fcmFtKHNjb20sIHRocmVhZCwgb3JpIHwgbG93LCBvZXh0KTsKKwllbHNlCisJCXJjIHw9IGEyX3Njb21fcmFtKHNjb20sIHRocmVhZCwgbGkgfCBsb3csIGxleHQpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGEyX3Njb21fc2V0c3ByKHNjb21fbWFwX3Qgc2NvbSwgaW50IHRocmVhZCwgaW50IHNwciwgdTY0IHZhbCkKK3sKKwlpbnQgc3ByaGkgPSBzcHIgPj4gNTsKKwlpbnQgc3BybG8gPSBzcHIgJiAweDFmOworCS8qIG10c3ByIHNwciwgcjEgKi8KKwl1MzIgaW5zbiA9IDB4N2MyMDAzYTYgfCAoc3BybG8gPDwgMTYpIHwgKHNwcmhpIDw8IDExKTsKKworCWlmIChzcHIgPT0gMHgwZmYwKQorCQlpbnNuID0gMHg3YzIwMDEyNDsgLyogbXRtc3IgcjEgKi8KKworCWlmIChhMl9zY29tX3NldGdwcihzY29tLCB0aHJlYWQsIDEsIDEsIHZhbCkpCisJCXJldHVybiAtMTsKKworCXJldHVybiBhMl9zY29tX3JhbShzY29tLCB0aHJlYWQsIGluc24sIDB4Zik7Cit9CisKK3N0YXRpYyBpbnQgYTJfc2NvbV9pbml0aWFsX3RsYihzY29tX21hcF90IHNjb20sIGludCB0aHJlYWQpCit7CisJZXh0ZXJuIHUzMiBhMl90bGJpbml0X2NvZGVfc3RhcnRbXSwgYTJfdGxiaW5pdF9jb2RlX2VuZFtdOworCWV4dGVybiB1MzIgYTJfdGxiaW5pdF9hZnRlcl9pcHJvdF9mbHVzaFtdOworCWV4dGVybiB1MzIgYTJfdGxiaW5pdF9hZnRlcl9saW5lYXJfbWFwW107CisJdTMyIGFzc29jLCBlbnRyaWVzLCBpOworCXU2NCBlcG4sIHRsYmNmZzsKKwl1MzIgKnA7CisJaW50IHJjOworCisJLyogSW52YWxpZGF0ZSBhbGwgZW50cmllcyAoaW5jbHVkaW5nIGlwcm90KSAqLworCisJcmMgPSBhMl9zY29tX2dldHNwcihzY29tLCB0aHJlYWQsIFNQUk5fVExCMENGRywgJnRsYmNmZyk7CisJaWYgKHJjKQorCQlnb3RvIHNjb21fZmFpbDsKKwllbnRyaWVzID0gdGxiY2ZnICYgVExCbkNGR19OX0VOVFJZOworCWFzc29jID0gKHRsYmNmZyAmIFRMQm5DRkdfQVNTT0MpID4+IDI0OworCWVwbiA9IDA7CisKKwkvKiBTZXQgTU1VQ1IyIHRvIGVuYWJsZSA0SywgNjRLLCAxTSwgMTZNIGFuZCAxRyBwYWdlcyAqLworCWEyX3Njb21fc2V0c3ByKHNjb20sIHRocmVhZCwgU1BSTl9NTVVDUjIsIDB4MDAwYTc1MzEpOworCS8qIFNldCBNTVVDUjMgdG8gd3JpdGUgYWxsIHRoaWRzIGJpdCB0byB0aGUgVExCICovCisJYTJfc2NvbV9zZXRzcHIoc2NvbSwgdGhyZWFkLCBTUFJOX01NVUNSMywgMHgwMDAwMDAwZik7CisKKwkvKiBTZXQgTUFTMSBmb3IgMUcgcGFnZSBzaXplLCBhbmQgTUFTMiB0byBvdXIgaW5pdGlhbCBFUE4gKi8KKwlhMl9zY29tX3NldHNwcihzY29tLCB0aHJlYWQsIFNQUk5fTUFTMSwgTUFTMV9UU0laRShCT09LM0VfUEFHRVNaXzFHQikpOworCWEyX3Njb21fc2V0c3ByKHNjb20sIHRocmVhZCwgU1BSTl9NQVMyLCBlcG4pOworCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzOyBpKyspIHsKKworCQlhMl9zY29tX3NldHNwcihzY29tLCB0aHJlYWQsIFNQUk5fTUFTMCwgTUFTMF9FU0VMKGkgJSBhc3NvYykpOworCisJCS8qIHRsYndlICovCisJCXJjID0gYTJfc2NvbV9yYW0oc2NvbSwgdGhyZWFkLCAweDdjMDAwN2E0LCAwKTsKKwkJaWYgKHJjKQorCQkJZ290byBzY29tX2ZhaWw7CisKKwkJLyogTmV4dCBlbnRyeSBpcyBuZXcgYWRkcmVzcz8gKi8KKwkJaWYoKGkgKyAxKSAlIGFzc29jID09IDApIHsKKwkJCWVwbiArPSAoMSA8PCAzMCk7CisJCQlhMl9zY29tX3NldHNwcihzY29tLCB0aHJlYWQsIFNQUk5fTUFTMiwgZXBuKTsKKwkJfQorCX0KKworCS8qIFNldHVwIGFyZ3MgZm9yIGxpbmVhciBtYXBwaW5nICovCisJcmMgPSBhMl9zY29tX3NldGdwcihzY29tLCB0aHJlYWQsIDMsIDAsIE1BUzBfVExCU0VMKDApKTsKKwlpZiAocmMpCisJCWdvdG8gc2NvbV9mYWlsOworCisJLyogTGluZWFyIG1hcHBpbmcgKi8KKwlmb3IgKHAgPSBhMl90bGJpbml0X2NvZGVfc3RhcnQ7IHAgPCBhMl90bGJpbml0X2FmdGVyX2xpbmVhcl9tYXA7IHArKykgeworCQlyYyA9IGEyX3Njb21fcmFtKHNjb20sIHRocmVhZCwgKnAsIDApOworCQlpZiAocmMpCisJCQlnb3RvIHNjb21fZmFpbDsKKwl9CisKKwkvKgorCSAqIEZvciB0aGUgYm9vdCB0aHJlYWQsIGJldHdlZW4gdGhlIGxpbmVhciBtYXBwaW5nIGFuZCB0aGUgZGVidWcKKwkgKiBtYXBwaW5ncyB0aGVyZSBpcyBhIGxvb3AgdG8gZmx1c2ggaXByb3QgbWFwcGluZ3MuIFJhbW1pbmcgZG9lc24ndCBkbworCSAqIGJyYW5jaGVzLCBidXQgdGhlIHNlY29uZGFyeSB0aHJlYWRzIGRvbid0IG5lZWQgdG8gYmUgbmVhcmx5IGFzIHNtYXJ0CisJICogKGkuZS4gd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBpbnZhbGlkYXRpbmcgdGhlIG1hcHBpbmcgd2UncmUKKwkgKiBzdGFuZGluZyBvbikuCisJICovCisKKwkvKiBEZWJ1ZyBtYXBwaW5ncy4gRXhwZWN0cyByMTEgPSBNQVMwIGZyb20gbGluZWFyIG1hcCAoc2V0IGFib3ZlKSAqLworCWZvciAocCA9IGEyX3RsYmluaXRfYWZ0ZXJfaXByb3RfZmx1c2g7IHAgPCBhMl90bGJpbml0X2NvZGVfZW5kOyBwKyspIHsKKwkJcmMgPSBhMl9zY29tX3JhbShzY29tLCB0aHJlYWQsICpwLCAwKTsKKwkJaWYgKHJjKQorCQkJZ290byBzY29tX2ZhaWw7CisJfQorCitzY29tX2ZhaWw6CisJaWYgKHJjKQorCQlwcl9lcnIoIlNldHRpbmcgdXAgaW5pdGlhbCBUTEIgZmFpbGVkLCBlcnIgJWRcbiIsIHJjKTsKKworCWlmIChyYyA9PSAtU0NPTV9SQU1DX0lOVEVSUlVQVCkgeworCQkvKiBJbnRlcnJ1cHQsIGR1bXAgc29tZSBzdGF0dXMgKi8KKwkJaW50IHJjWzEwXTsKKwkJdTY0IGlhciwgc3JyMCwgc3JyMSwgZXNyLCBtYXMwLCBtYXMxLCBtYXMyLCBtYXM3XzMsIG1hczgsIGNjcjI7CisJCXJjWzBdID0gYTJfc2NvbV9nZXRzcHIoc2NvbSwgdGhyZWFkLCBTUFJOX0lBUiwgJmlhcik7CisJCXJjWzFdID0gYTJfc2NvbV9nZXRzcHIoc2NvbSwgdGhyZWFkLCBTUFJOX1NSUjAsICZzcnIwKTsKKwkJcmNbMl0gPSBhMl9zY29tX2dldHNwcihzY29tLCB0aHJlYWQsIFNQUk5fU1JSMSwgJnNycjEpOworCQlyY1szXSA9IGEyX3Njb21fZ2V0c3ByKHNjb20sIHRocmVhZCwgU1BSTl9FU1IsICZlc3IpOworCQlyY1s0XSA9IGEyX3Njb21fZ2V0c3ByKHNjb20sIHRocmVhZCwgU1BSTl9NQVMwLCAmbWFzMCk7CisJCXJjWzVdID0gYTJfc2NvbV9nZXRzcHIoc2NvbSwgdGhyZWFkLCBTUFJOX01BUzEsICZtYXMxKTsKKwkJcmNbNl0gPSBhMl9zY29tX2dldHNwcihzY29tLCB0aHJlYWQsIFNQUk5fTUFTMiwgJm1hczIpOworCQlyY1s3XSA9IGEyX3Njb21fZ2V0c3ByKHNjb20sIHRocmVhZCwgU1BSTl9NQVM3X01BUzMsICZtYXM3XzMpOworCQlyY1s4XSA9IGEyX3Njb21fZ2V0c3ByKHNjb20sIHRocmVhZCwgU1BSTl9NQVM4LCAmbWFzOCk7CisJCXJjWzldID0gYTJfc2NvbV9nZXRzcHIoc2NvbSwgdGhyZWFkLCBTUFJOX0EyX0NDUjIsICZjY3IyKTsKKwkJcHJfZXJyKCIgLT4gcmV0cmVpdmVkIElBUiA9MHglbGx4IChlcnIgJWQpXG4iLCBpYXIsIHJjWzBdKTsKKwkJcHJfZXJyKCIgICAgcmV0cmVpdmVkIFNSUjA9MHglbGx4IChlcnIgJWQpXG4iLCBzcnIwLCByY1sxXSk7CisJCXByX2VycigiICAgIHJldHJlaXZlZCBTUlIxPTB4JWxseCAoZXJyICVkKVxuIiwgc3JyMSwgcmNbMl0pOworCQlwcl9lcnIoIiAgICByZXRyZWl2ZWQgRVNSID0weCVsbHggKGVyciAlZClcbiIsIGVzciwgcmNbM10pOworCQlwcl9lcnIoIiAgICByZXRyZWl2ZWQgTUFTMD0weCVsbHggKGVyciAlZClcbiIsIG1hczAsIHJjWzRdKTsKKwkJcHJfZXJyKCIgICAgcmV0cmVpdmVkIE1BUzE9MHglbGx4IChlcnIgJWQpXG4iLCBtYXMxLCByY1s1XSk7CisJCXByX2VycigiICAgIHJldHJlaXZlZCBNQVMyPTB4JWxseCAoZXJyICVkKVxuIiwgbWFzMiwgcmNbNl0pOworCQlwcl9lcnIoIiAgICByZXRyZWl2ZWQgTVM3Mz0weCVsbHggKGVyciAlZClcbiIsIG1hczdfMywgcmNbN10pOworCQlwcl9lcnIoIiAgICByZXRyZWl2ZWQgTUFTOD0weCVsbHggKGVyciAlZClcbiIsIG1hczgsIHJjWzhdKTsKKwkJcHJfZXJyKCIgICAgcmV0cmVpdmVkIENDUjI9MHglbGx4IChlcnIgJWQpXG4iLCBjY3IyLCByY1s5XSk7CisJfQorCisJcmV0dXJuIHJjOworfQorCitpbnQgX19kZXZpbml0IGEyX3Njb21fc3RhcnR1cF9jcHUodW5zaWduZWQgaW50IGxjcHUsIGludCB0aHJfaWR4LAorCQkJCSAgc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwl1NjQgaW5pdF9pYXIsIGluaXRfbXNyLCBpbml0X2NjcjI7CisJdW5zaWduZWQgbG9uZyBzdGFydF9oZXJlOworCWludCByYywgY29yZV9zZXR1cDsKKwlzY29tX21hcF90IHNjb207CisJdTY0IHBjY3IwOworCisJc2NvbSA9IGdldF9zY29tKGxjcHUsIG5wLCAmY29yZV9zZXR1cCk7CisJaWYgKCFzY29tKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgbWFwIFNDT00gZm9yIENQVSVkXG4iLCBsY3B1KTsKKwkJcmV0dXJuIC0xOworCX0KKworCXByX2RldmVsKCJCcmluZ2luZyB1cCBDUFUlZCB1c2luZyBTQ09NLi4uXG4iLCBsY3B1KTsKKworCXBjY3IwID0gc2NvbV9yZWFkKHNjb20sIFNDT01fUENDUjApOworCXNjb21fd3JpdGUoc2NvbSwgU0NPTV9QQ0NSMCwgcGNjcjAgfCBTQ09NX1BDQ1IwX0VOQUJMRV9ERUJVRyB8CisJCQkJICAgICBTQ09NX1BDQ1IwX0VOQUJMRV9SQU0pOworCisJLyogU3RvcCB0aGUgdGhlYWQgd2l0aCBUSFJDVEwuIElmIHdlIGFyZSBzZXR0aW5nIHVwIHRoZSBUTEIgd2Ugc3RvcCBhbGwKKwkgKiB0aHJlYWRzLiBXZSBhbHNvIGRpc2FibGUgYXN5bmNocm9ub3VzIGludGVycnVwdHMgd2hpbGUgUkFNaW5nLgorCSAqLworCWlmIChjb3JlX3NldHVwKQorCQlzY29tX3dyaXRlKHNjb20sIFNDT01fVEhSQ1RMX09SLAorCQkJICAgICAgU0NPTV9USFJDVExfVDBfU1RPUCB8CisJCQkgICAgICBTQ09NX1RIUkNUTF9UMV9TVE9QIHwKKwkJCSAgICAgIFNDT01fVEhSQ1RMX1QyX1NUT1AgfAorCQkJICAgICAgU0NPTV9USFJDVExfVDNfU1RPUCB8CisJCQkgICAgICBTQ09NX1RIUkNUTF9BU1lOQ19ESVMpOworCWVsc2UKKwkJc2NvbV93cml0ZShzY29tLCBTQ09NX1RIUkNUTF9PUiwgU0NPTV9USFJDVExfVDBfU1RPUCA+PiB0aHJfaWR4KTsKKworCS8qIEZsdXNoIGl0cyBwaXBlbGluZSBqdXN0IGluIGNhc2UgKi8KKwlzY29tX3dyaXRlKHNjb20sIFNDT01fUkFNQywgKCh1NjQpdGhyX2lkeCA8PCAxNykgfAorCQkgICAgICBTQ09NX1JBTUNfRkxVU0ggfCBTQ09NX1JBTUNfRU5BQkxFKTsKKworCWEyX3Njb21fZ2V0c3ByKHNjb20sIHRocl9pZHgsIFNQUk5fSUFSLCAmaW5pdF9pYXIpOworCWEyX3Njb21fZ2V0c3ByKHNjb20sIHRocl9pZHgsIDB4MGZmMCwgJmluaXRfbXNyKTsKKwlhMl9zY29tX2dldHNwcihzY29tLCB0aHJfaWR4LCBTUFJOX0EyX0NDUjIsICZpbml0X2NjcjIpOworCisJLyogU2V0IE1TUiB0byBNU1JfQ00gKDB4MGZmMCBpcyBtYWdpYyB2YWx1ZSBmb3IgTVNSX0NNKSAqLworCXJjID0gYTJfc2NvbV9zZXRzcHIoc2NvbSwgdGhyX2lkeCwgMHgwZmYwLCBNU1JfQ00pOworCWlmIChyYykgeworCQlwcl9lcnIoIkZhaWxlZCB0byBzZXQgTVNSICEgZXJyICVkXG4iLCByYyk7CisJCXJldHVybiByYzsKKwl9CisKKwkvKiBSQU0gaW4gYW4gc3luYy9pc3luYyBmb3IgdGhlIHNha2Ugb2YgaXQgKi8KKwlhMl9zY29tX3JhbShzY29tLCB0aHJfaWR4LCAweDdjMDAwNGFjLCAwKTsKKwlhMl9zY29tX3JhbShzY29tLCB0aHJfaWR4LCAweDRjMDAwMTJjLCAwKTsKKworCWlmIChjb3JlX3NldHVwKSB7CisJCXByX2RldmVsKCJDUFUlZCBpcyBmaXJzdCB0aHJlYWQgaW4gY29yZSwgaW5pdGlhbGl6aW5nIFRMQi4uLlxuIiwKKwkJCSBsY3B1KTsKKwkJcmMgPSBhMl9zY29tX2luaXRpYWxfdGxiKHNjb20sIHRocl9pZHgpOworCQlpZiAocmMpCisJCQlnb3RvIGZhaWw7CisJfQorCisJc3RhcnRfaGVyZSA9ICoodW5zaWduZWQgbG9uZyAqKShjb3JlX3NldHVwID8gZ2VuZXJpY19zZWNvbmRhcnlfc21wX2luaXQKKwkJCQkJOiBnZW5lcmljX3NlY29uZGFyeV90aHJlYWRfaW5pdCk7CisJcHJfZGV2ZWwoIkNQVSVkIGVudHJ5IHBvaW50IGF0IDB4JWx4Li4uXG4iLCBsY3B1LCBzdGFydF9oZXJlKTsKKworCXJjIHw9IGEyX3Njb21fc2V0c3ByKHNjb20sIHRocl9pZHgsIFNQUk5fSUFSLCBzdGFydF9oZXJlKTsKKwlyYyB8PSBhMl9zY29tX3NldGdwcihzY29tLCB0aHJfaWR4LCAzLCAwLAorCQkJICAgICBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGxjcHUpKTsKKwkvKgorCSAqIFRlbGwgYm9vazNlX3NlY29uZGFyeV9jb3JlX2luaXQgbm90IHRvIHNldCB1cCB0aGUgVExCLCB3ZSd2ZQorCSAqIGFscmVhZHkgZG9uZSB0aGF0LgorCSAqLworCXJjIHw9IGEyX3Njb21fc2V0Z3ByKHNjb20sIHRocl9pZHgsIDQsIDAsIDEpOworCisJcmMgfD0gYTJfc2NvbV9zZXRzcHIoc2NvbSwgdGhyX2lkeCwgU1BSTl9URU5TLCAweDEgPDwgdGhyX2lkeCk7CisKKwlzY29tX3dyaXRlKHNjb20sIFNDT01fUkFNQywgMCk7CisJc2NvbV93cml0ZShzY29tLCBTQ09NX1RIUkNUTF9BTkQsIH4oU0NPTV9USFJDVExfVDBfU1RPUCA+PiB0aHJfaWR4KSk7CisJc2NvbV93cml0ZShzY29tLCBTQ09NX1BDQ1IwLCBwY2NyMCk7CitmYWlsOgorCXByX2RldmVsKCIgIFNDT00gaW5pdGlhbGl6YXRpb24gJXNcbiIsIHJjID8gImZhaWxlZCIgOiAic3VjY2VlZGVkIik7CisJaWYgKHJjKSB7CisJCXByX2VycigiT2xkIElBUj0weCUwOGxseCBNU1I9MHglMDhsbHggQ0NSMj0weCUwOGxseFxuIiwKKwkJICAgICAgIGluaXRfaWFyLCBpbml0X21zciwgaW5pdF9jY3IyKTsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3dzcC9zY29tX3dzcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy93c3Avc2NvbV93c3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDUyZTIyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy93c3Avc2NvbV93c3AuYwpAQCAtMCwwICsxLDc3IEBACisvKgorICogIFNDT00gYmFja2VuZCBmb3IgV1NQCisgKgorICogIENvcHlyaWdodCAyMDEwIEJlbmphbWluIEhlcnJlbnNjaG1pZHQsIElCTSBDb3JwLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9jcHV0aHJlYWRzLmg+CisjaW5jbHVkZSA8YXNtL3JlZ19hMi5oPgorI2luY2x1ZGUgPGFzbS9zY29tLmg+CisjaW5jbHVkZSA8YXNtL3VkYmcuaD4KKworI2luY2x1ZGUgIndzcC5oIgorCisKK3N0YXRpYyBzY29tX21hcF90IHdzcF9zY29tX21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwgdTY0IHJlZywgdTY0IGNvdW50KQoreworCXN0cnVjdCByZXNvdXJjZSByOworCXU2NCB4c2NvbV9hZGRyOworCisJaWYgKCFvZl9nZXRfcHJvcGVydHkoZGV2LCAic2NvbS1jb250cm9sbGVyIiwgTlVMTCkpIHsKKwkJcHJfZXJyKCIlczogZGV2aWNlICVzIGlzIG5vdCBhIFNDT00gY29udHJvbGxlclxuIiwKKwkJCV9fZnVuY19fLCBkZXYtPmZ1bGxfbmFtZSk7CisJCXJldHVybiBTQ09NX01BUF9JTlZBTElEOworCX0KKworCWlmIChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKGRldiwgMCwgJnIpKSB7CisJCXByX2RlYnVnKCJGYWlsZWQgdG8gZmluZCBTQ09NIGNvbnRyb2xsZXIgYWRkcmVzc1xuIik7CisJCXJldHVybiAwOworCX0KKworCS8qIFRyYW5zZm9ybSB0aGUgU0NPTSBhZGRyZXNzIGludG8gYW4gWFNDT00gb2Zmc2V0ICovCisJeHNjb21fYWRkciA9ICgocmVnICYgMHg3ZjAwMDAwMCkgPj4gMSkgfCAoKHJlZyAmIDB4ZmZmZmYpIDw8IDMpOworCisJcmV0dXJuIChzY29tX21hcF90KWlvcmVtYXAoci5zdGFydCArIHhzY29tX2FkZHIsIGNvdW50IDw8IDMpOworfQorCitzdGF0aWMgdm9pZCB3c3Bfc2NvbV91bm1hcChzY29tX21hcF90IG1hcCkKK3sKKwlpb3VubWFwKCh2b2lkICopbWFwKTsKK30KKworc3RhdGljIHU2NCB3c3Bfc2NvbV9yZWFkKHNjb21fbWFwX3QgbWFwLCB1MzIgcmVnKQoreworCXU2NCBfX2lvbWVtICphZGRyID0gKHU2NCBfX2lvbWVtICopbWFwOworCisJcmV0dXJuIGluX2JlNjQoYWRkciArIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIHdzcF9zY29tX3dyaXRlKHNjb21fbWFwX3QgbWFwLCB1MzIgcmVnLCB1NjQgdmFsdWUpCit7CisJdTY0IF9faW9tZW0gKmFkZHIgPSAodTY0IF9faW9tZW0gKiltYXA7CisKKwlyZXR1cm4gb3V0X2JlNjQoYWRkciArIHJlZywgdmFsdWUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNjb21fY29udHJvbGxlciB3c3Bfc2NvbV9jb250cm9sbGVyID0geworCS5tYXAJPSB3c3Bfc2NvbV9tYXAsCisJLnVubWFwCT0gd3NwX3Njb21fdW5tYXAsCisJLnJlYWQJPSB3c3Bfc2NvbV9yZWFkLAorCS53cml0ZQk9IHdzcF9zY29tX3dyaXRlCit9OworCit2b2lkIHNjb21faW5pdF93c3Aodm9pZCkKK3sKKwlzY29tX2luaXQoJndzcF9zY29tX2NvbnRyb2xsZXIpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy93c3Avc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvd3NwL3NldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFhYzJmMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvd3NwL3NldHVwLmMKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIE1pY2hhZWwgRWxsZXJtYW4sIElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisKKyNpbmNsdWRlICJ3c3AuaCIKKworLyoKKyAqIEZpbmQgY2hpcC1pZCBieSB3YWxraW5nIHVwIGRldmljZSB0cmVlIGxvb2tpbmcgZm9yIGlibSx3c3AtY2hpcC1pZCBwcm9wZXJ0eS4KKyAqIFdvbid0IHdvcmsgZm9yIG5vZGVzIHRoYXQgYXJlIG5vdCBhIGRlc2NlbmRhbnQgb2YgYSB3c3Agbm9kZS4KKyAqLworaW50IHdzcF9nZXRfY2hpcF9pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuKQoreworCWNvbnN0IHUzMiAqcDsKKwlpbnQgcmM7CisKKwkvKiBTdGFydCBsb29raW5nIGF0IHRoZSBzcGVjaWZpZWQgbm9kZSwgbm90IGl0cyBwYXJlbnQgKi8KKwlkbiA9IG9mX25vZGVfZ2V0KGRuKTsKKwl3aGlsZSAoZG4gJiYgIShwID0gb2ZfZ2V0X3Byb3BlcnR5KGRuLCAiaWJtLHdzcC1jaGlwLWlkIiwgTlVMTCkpKQorCQlkbiA9IG9mX2dldF9uZXh0X3BhcmVudChkbik7CisKKwlpZiAoIWRuKQorCQlyZXR1cm4gLTE7CisKKwlyYyA9ICpwOworCW9mX25vZGVfcHV0KGRuKTsKKworCXJldHVybiByYzsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvd3NwL3NtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy93c3Avc21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQyMGZhOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvd3NwL3NtcC5jCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiAgU01QIFN1cHBvcnQgZm9yIEEyIHBsYXRmb3JtcworICoKKyAqICBDb3B5cmlnaHQgMjAwNyBCZW5qYW1pbiBIZXJyZW5zY2htaWR0LCBJQk0gQ29ycC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKworI2luY2x1ZGUgPGFzbS9kYmVsbC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL3hpY3MuaD4KKworI2luY2x1ZGUgImljcy5oIgorI2luY2x1ZGUgIndzcC5oIgorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgc21wX2EyX3NldHVwX2NwdShpbnQgY3B1KQoreworCWRvb3JiZWxsX3NldHVwX3RoaXNfY3B1KCk7CisKKwlpZiAoY3B1ICE9IGJvb3RfY3B1aWQpCisJCXhpY3Nfc2V0dXBfY3B1KCk7Cit9CisKK2ludCBfX2RldmluaXQgc21wX2EyX2tpY2tfY3B1KGludCBucikKK3sKKwljb25zdCBjaGFyICplbmFibGVfbWV0aG9kOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJaW50IHRocl9pZHg7CisKKwlpZiAobnIgPCAwIHx8IG5yID49IE5SX0NQVVMpCisJCXJldHVybiAtRU5PRU5UOworCisJbnAgPSBvZl9nZXRfY3B1X25vZGUobnIsICZ0aHJfaWR4KTsKKwlpZiAoIW5wKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWVuYWJsZV9tZXRob2QgPSBvZl9nZXRfcHJvcGVydHkobnAsICJlbmFibGUtbWV0aG9kIiwgTlVMTCk7CisJcHJfZGV2ZWwoIkNQVSVkIGhhcyBlbmFibGUtbWV0aG9kOiBcIiVzXCJcbiIsIG5yLCBlbmFibGVfbWV0aG9kKTsKKworCWlmICghZW5hYmxlX21ldGhvZCkgeworICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiQ1BVJWQgaGFzIG5vIGVuYWJsZS1tZXRob2RcbiIsIG5yKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfSBlbHNlIGlmIChzdHJjbXAoZW5hYmxlX21ldGhvZCwgImlibSxhMi1zY29tIikgPT0gMCkgeworCQlpZiAoYTJfc2NvbV9zdGFydHVwX2NwdShuciwgdGhyX2lkeCwgbnApKQorCQkJcmV0dXJuIC0xOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ1BVJWQ6IERvbid0IHVuZGVyc3RhbmQgZW5hYmxlLW1ldGhvZCBcIiVzXCJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG5yLCBlbmFibGVfbWV0aG9kKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBUaGUgcHJvY2Vzc29yIGlzIGN1cnJlbnRseSBzcGlubmluZywgd2FpdGluZyBmb3IgdGhlCisJICogY3B1X3N0YXJ0IGZpZWxkIHRvIGJlY29tZSBub24temVybyBBZnRlciB3ZSBzZXQgY3B1X3N0YXJ0LAorCSAqIHRoZSBwcm9jZXNzb3Igd2lsbCBjb250aW51ZSBvbiB0byBzZWNvbmRhcnlfc3RhcnQKKwkgKi8KKwlwYWNhW25yXS5jcHVfc3RhcnQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNtcF9hMl9wcm9iZSh2b2lkKQoreworCXJldHVybiBjcHVzX3dlaWdodChjcHVfcG9zc2libGVfbWFwKTsKK30KKworc3RhdGljIHN0cnVjdCBzbXBfb3BzX3QgYTJfc21wX29wcyA9IHsKKwkubWVzc2FnZV9wYXNzCT0gc21wX211eGVkX2lwaV9tZXNzYWdlX3Bhc3MsCisJLmNhdXNlX2lwaQk9IGRvb3JiZWxsX2NhdXNlX2lwaSwKKwkucHJvYmUJCT0gc21wX2EyX3Byb2JlLAorCS5raWNrX2NwdQk9IHNtcF9hMl9raWNrX2NwdSwKKwkuc2V0dXBfY3B1CT0gc21wX2EyX3NldHVwX2NwdSwKK307CisKK3ZvaWQgX19pbml0IGEyX3NldHVwX3NtcCh2b2lkKQoreworCXNtcF9vcHMgPSAmYTJfc21wX29wczsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvd3NwL3dzcC5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy93c3Avd3NwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MzZTA4NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvd3NwL3dzcC5oCkBAIC0wLDAgKzEsMTcgQEAKKyNpZm5kZWYgX19XU1BfSAorI2RlZmluZSBfX1dTUF9ICisKKyNpbmNsdWRlIDxhc20vd3NwLmg+CisKK2V4dGVybiB2b2lkIHdzcF9zZXR1cF9wY2kodm9pZCk7CitleHRlcm4gdm9pZCBzY29tX2luaXRfd3NwKHZvaWQpOworCitleHRlcm4gdm9pZCBhMl9zZXR1cF9zbXAodm9pZCk7CitleHRlcm4gaW50IGEyX3Njb21fc3RhcnR1cF9jcHUodW5zaWduZWQgaW50IGxjcHUsIGludCB0aHJfaWR4LAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApOworaW50IHNtcF9hMl9jcHVfYm9vdGFibGUodW5zaWduZWQgaW50IG5yKTsKK2ludCBfX2RldmluaXQgc21wX2EyX2tpY2tfY3B1KGludCBucik7CisKK3ZvaWQgb3BiX3BpY19pbml0KHZvaWQpOworCisjZW5kaWYgLyogIF9fV1NQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvS2NvbmZpZwppbmRleCAzOTY1ODI4Li5kNzc1ZmQxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9LY29uZmlnCkBAIC0xMiwzICsxMiwxMyBAQAogCWRlcGVuZHMgb24gUENJX01TSQogCWRlZmF1bHQgeSBpZiBNUElDCiAJZGVmYXVsdCB5IGlmIEZTTF9QQ0kKKworc291cmNlICJhcmNoL3Bvd2VycGMvc3lzZGV2L3hpY3MvS2NvbmZpZyIKKworY29uZmlnIFBQQ19TQ09NCisJYm9vbAorCitjb25maWcgU0NPTV9ERUJVR0ZTCisJYm9vbCAiRXhwb3NlIFNDT00gY29udHJvbGxlcnMgdmlhIGRlYnVnZnMiCisJZGVwZW5kcyBvbiBQUENfU0NPTQorCWRlZmF1bHQgbgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvTWFrZWZpbGUKaW5kZXggMWUwYzkzMy4uNjA3NmUwMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L01ha2VmaWxlCkBAIC01NywzICs1Nyw5IEBACiBpZmVxICgkKENPTkZJR19TVVNQRU5EKSx5KQogb2JqLSQoQ09ORklHXzZ4eCkJCSs9IDZ4eC1zdXNwZW5kLm8KIGVuZGlmCisKK29iai0kKENPTkZJR19QUENfU0NPTSkJCSs9IHNjb20ubworCitzdWJkaXItY2NmbGFncy0kKENPTkZJR19QUENfV0VSUk9SKSA6PSAtV2Vycm9yCisKK29iai0kKENPTkZJR19QUENfWElDUykJCSs9IHhpY3MvCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2F4b25yYW0uYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvYXhvbnJhbS5jCmluZGV4IDE2MzZkZDguLmJkMGQ1NDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvYXhvbnJhbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvYXhvbnJhbS5jCkBAIC0yMTYsNyArMjE2LDcgQEAKIAkJCUFYT05fUkFNX0RFVklDRV9OQU1FLCBheG9uX3JhbV9iYW5rX2lkLCBiYW5rLT5zaXplID4+IDIwKTsKIAogCWJhbmstPnBoX2FkZHIgPSByZXNvdXJjZS5zdGFydDsKLQliYW5rLT5pb19hZGRyID0gKHVuc2lnbmVkIGxvbmcpIGlvcmVtYXBfZmxhZ3MoCisJYmFuay0+aW9fYWRkciA9ICh1bnNpZ25lZCBsb25nKSBpb3JlbWFwX3Byb3QoCiAJCQliYW5rLT5waF9hZGRyLCBiYW5rLT5zaXplLCBfUEFHRV9OT19DQUNIRSk7CiAJaWYgKGJhbmstPmlvX2FkZHIgPT0gMCkgewogCQlkZXZfZXJyKCZkZXZpY2UtPmRldiwgImlvcmVtYXAoKSBmYWlsZWRcbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0xLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTEuYwppbmRleCBlMGJjOTQ0Li4zNTA3ODdjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTEuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTEuYwpAQCAtNTgsMjEgKzU4LDIxIEBACiAKIHN0YXRpYyB2b2lkIGNwbV9tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JdW5zaWduZWQgaW50IGNwbV92ZWMgPSAodW5zaWduZWQgaW50KWlycV9tYXBbZC0+aXJxXS5od2lycTsKKwl1bnNpZ25lZCBpbnQgY3BtX3ZlYyA9ICh1bnNpZ25lZCBpbnQpaXJxZF90b19od2lycShkKTsKIAogCWNscmJpdHMzMigmY3BpY19yZWctPmNwaWNfY2ltciwgKDEgPDwgY3BtX3ZlYykpOwogfQogCiBzdGF0aWMgdm9pZCBjcG1fdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JdW5zaWduZWQgaW50IGNwbV92ZWMgPSAodW5zaWduZWQgaW50KWlycV9tYXBbZC0+aXJxXS5od2lycTsKKwl1bnNpZ25lZCBpbnQgY3BtX3ZlYyA9ICh1bnNpZ25lZCBpbnQpaXJxZF90b19od2lycShkKTsKIAogCXNldGJpdHMzMigmY3BpY19yZWctPmNwaWNfY2ltciwgKDEgPDwgY3BtX3ZlYykpOwogfQogCiBzdGF0aWMgdm9pZCBjcG1fZW5kX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JdW5zaWduZWQgaW50IGNwbV92ZWMgPSAodW5zaWduZWQgaW50KWlycV9tYXBbZC0+aXJxXS5od2lycTsKKwl1bnNpZ25lZCBpbnQgY3BtX3ZlYyA9ICh1bnNpZ25lZCBpbnQpaXJxZF90b19od2lycShkKTsKIAogCW91dF9iZTMyKCZjcGljX3JlZy0+Y3BpY19jaXNyLCAoMSA8PCBjcG1fdmVjKSk7CiB9CkBAIC0xNTcsNyArMTU3LDcgQEAKIAkJZ290byBlbmQ7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBDUE0gaW50ZXJydXB0IGNvbnRyb2xsZXIuICovCi0JaHdpcnEgPSAodW5zaWduZWQgaW50KWlycV9tYXBbc2lycV0uaHdpcnE7CisJaHdpcnEgPSAodW5zaWduZWQgaW50KXZpcnFfdG9faHcoc2lycSk7CiAJb3V0X2JlMzIoJmNwaWNfcmVnLT5jcGljX2NpY3IsCiAJICAgIChDSUNSX1NDRF9TQ0M0IHwgQ0lDUl9TQ0NfU0NDMyB8IENJQ1JfU0NCX1NDQzIgfCBDSUNSX1NDQV9TQ0MxKSB8CiAJCSgoaHdpcnEvMikgPDwgMTMpIHwgQ0lDUl9IUF9NQVNLKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMl9waWMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMl9waWMuYwppbmRleCA1NDk1YzFiLi5iY2FiNTBlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTJfcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0yX3BpYy5jCkBAIC04MSw3ICs4MSw3IEBACiBzdGF0aWMgdm9pZCBjcG0yX21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlpbnQJYml0LCB3b3JkOwotCXVuc2lnbmVkIGludCBpcnFfbnIgPSB2aXJxX3RvX2h3KGQtPmlycSk7CisJdW5zaWduZWQgaW50IGlycV9uciA9IGlycWRfdG9faHdpcnEoZCk7CiAKIAliaXQgPSBpcnFfdG9fc2l1Yml0W2lycV9ucl07CiAJd29yZCA9IGlycV90b19zaXVyZWdbaXJxX25yXTsKQEAgLTkzLDcgKzkzLDcgQEAKIHN0YXRpYyB2b2lkIGNwbTJfdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJaW50CWJpdCwgd29yZDsKLQl1bnNpZ25lZCBpbnQgaXJxX25yID0gdmlycV90b19odyhkLT5pcnEpOworCXVuc2lnbmVkIGludCBpcnFfbnIgPSBpcnFkX3RvX2h3aXJxKGQpOwogCiAJYml0ID0gaXJxX3RvX3NpdWJpdFtpcnFfbnJdOwogCXdvcmQgPSBpcnFfdG9fc2l1cmVnW2lycV9ucl07CkBAIC0xMDUsNyArMTA1LDcgQEAKIHN0YXRpYyB2b2lkIGNwbTJfYWNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlpbnQJYml0LCB3b3JkOwotCXVuc2lnbmVkIGludCBpcnFfbnIgPSB2aXJxX3RvX2h3KGQtPmlycSk7CisJdW5zaWduZWQgaW50IGlycV9uciA9IGlycWRfdG9faHdpcnEoZCk7CiAKIAliaXQgPSBpcnFfdG9fc2l1Yml0W2lycV9ucl07CiAJd29yZCA9IGlycV90b19zaXVyZWdbaXJxX25yXTsKQEAgLTExNiw3ICsxMTYsNyBAQAogc3RhdGljIHZvaWQgY3BtMl9lbmRfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlpbnQJYml0LCB3b3JkOwotCXVuc2lnbmVkIGludCBpcnFfbnIgPSB2aXJxX3RvX2h3KGQtPmlycSk7CisJdW5zaWduZWQgaW50IGlycV9uciA9IGlycWRfdG9faHdpcnEoZCk7CiAKIAliaXQgPSBpcnFfdG9fc2l1Yml0W2lycV9ucl07CiAJd29yZCA9IGlycV90b19zaXVyZWdbaXJxX25yXTsKQEAgLTEzMyw3ICsxMzMsNyBAQAogCiBzdGF0aWMgaW50IGNwbTJfc2V0X2lycV90eXBlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgaW50IGZsb3dfdHlwZSkKIHsKLQl1bnNpZ25lZCBpbnQgc3JjID0gdmlycV90b19odyhkLT5pcnEpOworCXVuc2lnbmVkIGludCBzcmMgPSBpcnFkX3RvX2h3aXJxKGQpOwogCXVuc2lnbmVkIGludCB2b2xkLCB2bmV3LCBlZGliaXQ7CiAKIAkvKiBQb3J0IEMgaW50ZXJydXB0cyBhcmUgZWl0aGVyIElSUV9UWVBFX0VER0VfRkFMTElORyBvcgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfODV4eF9jYWNoZV9zcmFtLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF84NXh4X2NhY2hlX3NyYW0uYwppbmRleCA1NGZiMTkyLi4xMTY0MTU4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF84NXh4X2NhY2hlX3NyYW0uYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF84NXh4X2NhY2hlX3NyYW0uYwpAQCAtMTA2LDEwICsxMDYsMTAgQEAKIAkJZ290byBvdXRfZnJlZTsKIAl9CiAKLQljYWNoZV9zcmFtLT5iYXNlX3ZpcnQgPSBpb3JlbWFwX2ZsYWdzKGNhY2hlX3NyYW0tPmJhc2VfcGh5cywKKwljYWNoZV9zcmFtLT5iYXNlX3ZpcnQgPSBpb3JlbWFwX3Byb3QoY2FjaGVfc3JhbS0+YmFzZV9waHlzLAogCQkJCWNhY2hlX3NyYW0tPnNpemUsIF9QQUdFX0NPSEVSRU5UIHwgUEFHRV9LRVJORUwpOwogCWlmICghY2FjaGVfc3JhbS0+YmFzZV92aXJ0KSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiJXM6IGlvcmVtYXBfZmxhZ3MgZmFpbGVkXG4iLAorCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBpb3JlbWFwX3Byb3QgZmFpbGVkXG4iLAogCQkJCWRldi0+ZGV2Lm9mX25vZGUtPmZ1bGxfbmFtZSk7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X3JlbGVhc2U7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9tc2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCmluZGV4IDAxY2QyZjAuLjkyZTc4MzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCkBAIC0xMTAsNyArMTEwLDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmcGRldi0+bXNpX2xpc3QsIGxpc3QpIHsKIAkJaWYgKGVudHJ5LT5pcnEgPT0gTk9fSVJRKQogCQkJY29udGludWU7Ci0JCW1zaV9kYXRhID0gaXJxX2dldF9oYW5kbGVyX2RhdGEoZW50cnktPmlycSk7CisJCW1zaV9kYXRhID0gaXJxX2dldF9jaGlwX2RhdGEoZW50cnktPmlycSk7CiAJCWlycV9zZXRfbXNpX2Rlc2MoZW50cnktPmlycSwgTlVMTCk7CiAJCW1zaV9iaXRtYXBfZnJlZV9od2lycXMoJm1zaV9kYXRhLT5iaXRtYXAsCiAJCQkJICAgICAgIHZpcnFfdG9faHcoZW50cnktPmlycSksIDEpOwpAQCAtMTY4LDcgKzE2OCw3IEBACiAJCQlyYyA9IC1FTk9TUEM7CiAJCQlnb3RvIG91dF9mcmVlOwogCQl9Ci0JCWlycV9zZXRfaGFuZGxlcl9kYXRhKHZpcnEsIG1zaV9kYXRhKTsKKwkJLyogY2hpcF9kYXRhIGlzIG1zaV9kYXRhIHZpYSBob3N0LT5ob3N0ZGF0YSBpbiBob3N0LT5tYXAoKSAqLwogCQlpcnFfc2V0X21zaV9kZXNjKHZpcnEsIGVudHJ5KTsKIAogCQlmc2xfY29tcG9zZV9tc2lfbXNnKHBkZXYsIGh3aXJxLCAmbXNnLCBtc2lfZGF0YSk7CkBAIC0xOTMsNyArMTkzLDcgQEAKIAl1MzIgaGF2ZV9zaGlmdCA9IDA7CiAJc3RydWN0IGZzbF9tc2lfY2FzY2FkZV9kYXRhICpjYXNjYWRlX2RhdGE7CiAKLQljYXNjYWRlX2RhdGEgPSAoc3RydWN0IGZzbF9tc2lfY2FzY2FkZV9kYXRhICopaXJxX2dldF9oYW5kbGVyX2RhdGEoaXJxKTsKKwljYXNjYWRlX2RhdGEgPSBpcnFfZ2V0X2hhbmRsZXJfZGF0YShpcnEpOwogCW1zaV9kYXRhID0gY2FzY2FkZV9kYXRhLT5tc2lfZGF0YTsKIAogCXJhd19zcGluX2xvY2soJmRlc2MtPmxvY2spOwpAQCAtMjUzLDcgKzI1Myw3IEBACiAKIHN0YXRpYyBpbnQgZnNsX29mX21zaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpCiB7Ci0Jc3RydWN0IGZzbF9tc2kgKm1zaSA9IG9mZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgZnNsX21zaSAqbXNpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEob2ZkZXYpOwogCWludCB2aXJxLCBpOwogCXN0cnVjdCBmc2xfbXNpX2Nhc2NhZGVfZGF0YSAqY2FzY2FkZV9kYXRhOwogCkBAIC0zMzAsNyArMzMwLDcgQEAKIAkJZGV2X2VycigmZGV2LT5kZXYsICJObyBtZW1vcnkgZm9yIE1TSSBzdHJ1Y3R1cmVcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IG1zaTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIG1zaSk7CiAKIAltc2ktPmlycWhvc3QgPSBpcnFfYWxsb2NfaG9zdChkZXYtPmRldi5vZl9ub2RlLCBJUlFfSE9TVF9NQVBfTElORUFSLAogCQkJCSAgICAgIE5SX01TSV9JUlFTLCAmZnNsX21zaV9ob3N0X29wcywgMCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2k4MjU5LmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2k4MjU5LmMKaW5kZXggMTQyNzcwYy4uZDE4YmIyNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9pODI1OS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvaTgyNTkuYwpAQCAtMTg1LDE4ICsxODUsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpODI1OV9ob3N0X3VubWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEpCi17Ci0JLyogTWFrZSBzdXJlIGlycSBpcyBtYXNrZWQgaW4gaGFyZHdhcmUgKi8KLQlpODI1OV9tYXNrX2lycShpcnFfZ2V0X2lycV9kYXRhKHZpcnEpKTsKLQotCS8qIHJlbW92ZSBjaGlwIGFuZCBoYW5kbGVyICovCi0JaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKHZpcnEsIE5VTEwsIE5VTEwpOwotCi0JLyogTWFrZSBzdXJlIGl0J3MgY29tcGxldGVkICovCi0Jc3luY2hyb25pemVfaXJxKHZpcnEpOwotfQotCiBzdGF0aWMgaW50IGk4MjU5X2hvc3RfeGxhdGUoc3RydWN0IGlycV9ob3N0ICpoLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmN0LAogCQkJICAgIGNvbnN0IHUzMiAqaW50c3BlYywgdW5zaWduZWQgaW50IGludHNpemUsCiAJCQkgICAgaXJxX2h3X251bWJlcl90ICpvdXRfaHdpcnEsIHVuc2lnbmVkIGludCAqb3V0X2ZsYWdzKQpAQCAtMjIwLDcgKzIwOCw2IEBACiBzdGF0aWMgc3RydWN0IGlycV9ob3N0X29wcyBpODI1OV9ob3N0X29wcyA9IHsKIAkubWF0Y2ggPSBpODI1OV9ob3N0X21hdGNoLAogCS5tYXAgPSBpODI1OV9ob3N0X21hcCwKLQkudW5tYXAgPSBpODI1OV9ob3N0X3VubWFwLAogCS54bGF0ZSA9IGk4MjU5X2hvc3RfeGxhdGUsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvaXBpYy5jCmluZGV4IDU5NjU1NGEuLjczNjdkMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvaXBpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvaXBpYy5jCkBAIC01MjEsMTIgKzUyMSwxMCBAQAogCXJldHVybiBwcmltYXJ5X2lwaWM7CiB9CiAKLSNkZWZpbmUgaXBpY19pcnFfdG9faHcodmlycSkJKCh1bnNpZ25lZCBpbnQpaXJxX21hcFt2aXJxXS5od2lycSkKLQogc3RhdGljIHZvaWQgaXBpY191bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlzdHJ1Y3QgaXBpYyAqaXBpYyA9IGlwaWNfZnJvbV9pcnEoZC0+aXJxKTsKLQl1bnNpZ25lZCBpbnQgc3JjID0gaXBpY19pcnFfdG9faHcoZC0+aXJxKTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gaXJxZF90b19od2lycShkKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB0ZW1wOwogCkBAIC01NDIsNyArNTQwLDcgQEAKIHN0YXRpYyB2b2lkIGlwaWNfbWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXN0cnVjdCBpcGljICppcGljID0gaXBpY19mcm9tX2lycShkLT5pcnEpOwotCXVuc2lnbmVkIGludCBzcmMgPSBpcGljX2lycV90b19odyhkLT5pcnEpOworCXVuc2lnbmVkIGludCBzcmMgPSBpcnFkX3RvX2h3aXJxKGQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHRlbXA7CiAKQEAgLTU2Miw3ICs1NjAsNyBAQAogc3RhdGljIHZvaWQgaXBpY19hY2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlzdHJ1Y3QgaXBpYyAqaXBpYyA9IGlwaWNfZnJvbV9pcnEoZC0+aXJxKTsKLQl1bnNpZ25lZCBpbnQgc3JjID0gaXBpY19pcnFfdG9faHcoZC0+aXJxKTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gaXJxZF90b19od2lycShkKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB0ZW1wOwogCkBAIC01ODEsNyArNTc5LDcgQEAKIHN0YXRpYyB2b2lkIGlwaWNfbWFza19pcnFfYW5kX2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3RydWN0IGlwaWMgKmlwaWMgPSBpcGljX2Zyb21faXJxKGQtPmlycSk7Ci0JdW5zaWduZWQgaW50IHNyYyA9IGlwaWNfaXJxX3RvX2h3KGQtPmlycSk7CisJdW5zaWduZWQgaW50IHNyYyA9IGlycWRfdG9faHdpcnEoZCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgdGVtcDsKIApAQCAtNjA0LDcgKzYwMiw3IEBACiBzdGF0aWMgaW50IGlwaWNfc2V0X2lycV90eXBlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgaW50IGZsb3dfdHlwZSkKIHsKIAlzdHJ1Y3QgaXBpYyAqaXBpYyA9IGlwaWNfZnJvbV9pcnEoZC0+aXJxKTsKLQl1bnNpZ25lZCBpbnQgc3JjID0gaXBpY19pcnFfdG9faHcoZC0+aXJxKTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gaXJxZF90b19od2lycShkKTsKIAl1bnNpZ25lZCBpbnQgdm9sZCwgdm5ldywgZWRpYml0OwogCiAJaWYgKGZsb3dfdHlwZSA9PSBJUlFfVFlQRV9OT05FKQpAQCAtNzkzLDcgKzc5MSw3IEBACiBpbnQgaXBpY19zZXRfcHJpb3JpdHkodW5zaWduZWQgaW50IHZpcnEsIHVuc2lnbmVkIGludCBwcmlvcml0eSkKIHsKIAlzdHJ1Y3QgaXBpYyAqaXBpYyA9IGlwaWNfZnJvbV9pcnEodmlycSk7Ci0JdW5zaWduZWQgaW50IHNyYyA9IGlwaWNfaXJxX3RvX2h3KHZpcnEpOworCXVuc2lnbmVkIGludCBzcmMgPSB2aXJxX3RvX2h3KHZpcnEpOwogCXUzMiB0ZW1wOwogCiAJaWYgKHByaW9yaXR5ID4gNykKQEAgLTgyMSw3ICs4MTksNyBAQAogdm9pZCBpcGljX3NldF9oaWdoZXN0X3ByaW9yaXR5KHVuc2lnbmVkIGludCB2aXJxKQogewogCXN0cnVjdCBpcGljICppcGljID0gaXBpY19mcm9tX2lycSh2aXJxKTsKLQl1bnNpZ25lZCBpbnQgc3JjID0gaXBpY19pcnFfdG9faHcodmlycSk7CisJdW5zaWduZWQgaW50IHNyYyA9IHZpcnFfdG9faHcodmlycSk7CiAJdTMyIHRlbXA7CiAKIAl0ZW1wID0gaXBpY19yZWFkKGlwaWMtPnJlZ3MsIElQSUNfU0lDRlIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tbWlvX252cmFtLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21taW9fbnZyYW0uYwppbmRleCAyMDczMjQyLi5kZGM4NzdhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21taW9fbnZyYW0uYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21taW9fbnZyYW0uYwpAQCAtMTE1LDYgKzExNSw4IEBACiAJaW50IHJldDsKIAogCW52cmFtX25vZGUgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAibnZyYW0iKTsKKwlpZiAoIW52cmFtX25vZGUpCisJCW52cmFtX25vZGUgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAibnZyYW0iKTsKIAlpZiAoIW52cmFtX25vZGUpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAibnZyYW06IG5vIG5vZGUgZm91bmQgaW4gZGV2aWNlLXRyZWVcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBjOHh4X3BpYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGM4eHhfcGljLmMKaW5kZXggYTg4ODAwZi4uMjA5MjRmMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGM4eHhfcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGM4eHhfcGljLmMKQEAgLTI4LDcgKzI4LDcgQEAKIHN0YXRpYyB2b2lkIG1wYzh4eF91bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlpbnQJYml0LCB3b3JkOwotCXVuc2lnbmVkIGludCBpcnFfbnIgPSAodW5zaWduZWQgaW50KWlycV9tYXBbZC0+aXJxXS5od2lycTsKKwl1bnNpZ25lZCBpbnQgaXJxX25yID0gKHVuc2lnbmVkIGludClpcnFkX3RvX2h3aXJxKGQpOwogCiAJYml0ID0gaXJxX25yICYgMHgxZjsKIAl3b3JkID0gaXJxX25yID4+IDU7CkBAIC00MCw3ICs0MCw3IEBACiBzdGF0aWMgdm9pZCBtcGM4eHhfbWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCWludAliaXQsIHdvcmQ7Ci0JdW5zaWduZWQgaW50IGlycV9uciA9ICh1bnNpZ25lZCBpbnQpaXJxX21hcFtkLT5pcnFdLmh3aXJxOworCXVuc2lnbmVkIGludCBpcnFfbnIgPSAodW5zaWduZWQgaW50KWlycWRfdG9faHdpcnEoZCk7CiAKIAliaXQgPSBpcnFfbnIgJiAweDFmOwogCXdvcmQgPSBpcnFfbnIgPj4gNTsKQEAgLTUyLDcgKzUyLDcgQEAKIHN0YXRpYyB2b2lkIG1wYzh4eF9hY2soc3RydWN0IGlycV9kYXRhICpkKQogewogCWludAliaXQ7Ci0JdW5zaWduZWQgaW50IGlycV9uciA9ICh1bnNpZ25lZCBpbnQpaXJxX21hcFtkLT5pcnFdLmh3aXJxOworCXVuc2lnbmVkIGludCBpcnFfbnIgPSAodW5zaWduZWQgaW50KWlycWRfdG9faHdpcnEoZCk7CiAKIAliaXQgPSBpcnFfbnIgJiAweDFmOwogCW91dF9iZTMyKCZzaXVfcmVnLT5zY19zaXBlbmQsIDEgPDwgKDMxLWJpdCkpOwpAQCAtNjEsNyArNjEsNyBAQAogc3RhdGljIHZvaWQgbXBjOHh4X2VuZF9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCWludCBiaXQsIHdvcmQ7Ci0JdW5zaWduZWQgaW50IGlycV9uciA9ICh1bnNpZ25lZCBpbnQpaXJxX21hcFtkLT5pcnFdLmh3aXJxOworCXVuc2lnbmVkIGludCBpcnFfbnIgPSAodW5zaWduZWQgaW50KWlycWRfdG9faHdpcnEoZCk7CiAKIAliaXQgPSBpcnFfbnIgJiAweDFmOwogCXdvcmQgPSBpcnFfbnIgPj4gNTsKQEAgLTczLDcgKzczLDcgQEAKIHN0YXRpYyBpbnQgbXBjOHh4X3NldF9pcnFfdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIGludCBmbG93X3R5cGUpCiB7CiAJaWYgKGZsb3dfdHlwZSAmIElSUV9UWVBFX0VER0VfRkFMTElORykgewotCQlpcnFfaHdfbnVtYmVyX3QgaHcgPSAodW5zaWduZWQgaW50KWlycV9tYXBbZC0+aXJxXS5od2lycTsKKwkJaXJxX2h3X251bWJlcl90IGh3ID0gKHVuc2lnbmVkIGludClpcnFkX3RvX2h3aXJxKGQpOwogCQl1bnNpZ25lZCBpbnQgc2llbCA9IGluX2JlMzIoJnNpdV9yZWctPnNjX3NpZWwpOwogCiAJCS8qIG9ubHkgZXh0ZXJuYWwgSVJRIHNlbnNlcyBhcmUgcHJvZ3JhbW1hYmxlICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21wYzh4eHhfZ3Bpby5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGM4eHh4X2dwaW8uYwppbmRleCAwODkyYTI4Li5mYjQ5NjNhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21wYzh4eHhfZ3Bpby5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBjOHh4eF9ncGlvLmMKQEAgLTE2Myw3ICsxNjMsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm1wYzh4eHhfZ2MtPmxvY2ssIGZsYWdzKTsKIAotCXNldGJpdHMzMihtbS0+cmVncyArIEdQSU9fSU1SLCBtcGM4eHh4X2dwaW8ybWFzayh2aXJxX3RvX2h3KGQtPmlycSkpKTsKKwlzZXRiaXRzMzIobW0tPnJlZ3MgKyBHUElPX0lNUiwgbXBjOHh4eF9ncGlvMm1hc2soaXJxZF90b19od2lycShkKSkpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBjOHh4eF9nYy0+bG9jaywgZmxhZ3MpOwogfQpAQCAtMTc2LDcgKzE3Niw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbXBjOHh4eF9nYy0+bG9jaywgZmxhZ3MpOwogCi0JY2xyYml0czMyKG1tLT5yZWdzICsgR1BJT19JTVIsIG1wYzh4eHhfZ3BpbzJtYXNrKHZpcnFfdG9faHcoZC0+aXJxKSkpOworCWNscmJpdHMzMihtbS0+cmVncyArIEdQSU9fSU1SLCBtcGM4eHh4X2dwaW8ybWFzayhpcnFkX3RvX2h3aXJxKGQpKSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcGM4eHh4X2djLT5sb2NrLCBmbGFncyk7CiB9CkBAIC0xODYsNyArMTg2LDcgQEAKIAlzdHJ1Y3QgbXBjOHh4eF9ncGlvX2NoaXAgKm1wYzh4eHhfZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIAlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbSA9ICZtcGM4eHh4X2djLT5tbV9nYzsKIAotCW91dF9iZTMyKG1tLT5yZWdzICsgR1BJT19JRVIsIG1wYzh4eHhfZ3BpbzJtYXNrKHZpcnFfdG9faHcoZC0+aXJxKSkpOworCW91dF9iZTMyKG1tLT5yZWdzICsgR1BJT19JRVIsIG1wYzh4eHhfZ3BpbzJtYXNrKGlycWRfdG9faHdpcnEoZCkpKTsKIH0KIAogc3RhdGljIGludCBtcGM4eHh4X2lycV9zZXRfdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIGludCBmbG93X3R5cGUpCkBAIC0xOTksMTQgKzE5OSwxNCBAQAogCWNhc2UgSVJRX1RZUEVfRURHRV9GQUxMSU5HOgogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbXBjOHh4eF9nYy0+bG9jaywgZmxhZ3MpOwogCQlzZXRiaXRzMzIobW0tPnJlZ3MgKyBHUElPX0lDUiwKLQkJCSAgbXBjOHh4eF9ncGlvMm1hc2sodmlycV90b19odyhkLT5pcnEpKSk7CisJCQkgIG1wYzh4eHhfZ3BpbzJtYXNrKGlycWRfdG9faHdpcnEoZCkpKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBjOHh4eF9nYy0+bG9jaywgZmxhZ3MpOwogCQlicmVhazsKIAogCWNhc2UgSVJRX1RZUEVfRURHRV9CT1RIOgogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbXBjOHh4eF9nYy0+bG9jaywgZmxhZ3MpOwogCQljbHJiaXRzMzIobW0tPnJlZ3MgKyBHUElPX0lDUiwKLQkJCSAgbXBjOHh4eF9ncGlvMm1hc2sodmlycV90b19odyhkLT5pcnEpKSk7CisJCQkgIG1wYzh4eHhfZ3BpbzJtYXNrKGlycWRfdG9faHdpcnEoZCkpKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBjOHh4eF9nYy0+bG9jaywgZmxhZ3MpOwogCQlicmVhazsKIApAQCAtMjIxLDcgKzIyMSw3IEBACiB7CiAJc3RydWN0IG1wYzh4eHhfZ3Bpb19jaGlwICptcGM4eHh4X2djID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAJc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW0gPSAmbXBjOHh4eF9nYy0+bW1fZ2M7Ci0JdW5zaWduZWQgbG9uZyBncGlvID0gdmlycV90b19odyhkLT5pcnEpOworCXVuc2lnbmVkIGxvbmcgZ3BpbyA9IGlycWRfdG9faHdpcnEoZCk7CiAJdm9pZCBfX2lvbWVtICpyZWc7CiAJdW5zaWduZWQgaW50IHNoaWZ0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jCmluZGV4IDdlNWRjOGYuLjNhOGRlNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jCkBAIC02LDYgKzYsNyBAQAogICogIHdpdGggdmFyaW91cyBicm9rZW4gaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgSFcuCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNCBCZW5qYW1pbiBIZXJyZW5zY2htaWR0LCBJQk0gQ29ycC4KKyAqICBDb3B5cmlnaHQgMjAxMC0yMDExIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCiAgKgogICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiAgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTIxOSw2ICsyMjAsMjggQEAKIAlfbXBpY193cml0ZShtcGljLT5yZWdfdHlwZSwgJm1waWMtPmdyZWdzLCBvZmZzZXQsIHZhbHVlKTsKIH0KIAorc3RhdGljIGlubGluZSB1MzIgX21waWNfdG1fcmVhZChzdHJ1Y3QgbXBpYyAqbXBpYywgdW5zaWduZWQgaW50IHRtKQoreworCXVuc2lnbmVkIGludCBvZmZzZXQgPSBNUElDX0lORk8oVElNRVJfVkVDVE9SX1BSSSkgKworCQkJICAgICAgKCh0bSAmIDMpICogTVBJQ19JTkZPKFRJTUVSX1NUUklERSkpOworCisJaWYgKHRtID49IDQpCisJCW9mZnNldCArPSAweDEwMDAgLyA0OworCisJcmV0dXJuIF9tcGljX3JlYWQobXBpYy0+cmVnX3R5cGUsICZtcGljLT50bXJlZ3MsIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfbXBpY190bV93cml0ZShzdHJ1Y3QgbXBpYyAqbXBpYywgdW5zaWduZWQgaW50IHRtLCB1MzIgdmFsdWUpCit7CisJdW5zaWduZWQgaW50IG9mZnNldCA9IE1QSUNfSU5GTyhUSU1FUl9WRUNUT1JfUFJJKSArCisJCQkgICAgICAoKHRtICYgMykgKiBNUElDX0lORk8oVElNRVJfU1RSSURFKSk7CisKKwlpZiAodG0gPj0gNCkKKwkJb2Zmc2V0ICs9IDB4MTAwMCAvIDQ7CisKKwlfbXBpY193cml0ZShtcGljLT5yZWdfdHlwZSwgJm1waWMtPnRtcmVncywgb2Zmc2V0LCB2YWx1ZSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdTMyIF9tcGljX2NwdV9yZWFkKHN0cnVjdCBtcGljICptcGljLCB1bnNpZ25lZCBpbnQgcmVnKQogewogCXVuc2lnbmVkIGludCBjcHUgPSBtcGljX3Byb2Nlc3Nvcl9pZChtcGljKTsKQEAgLTI2OSw2ICsyOTIsOCBAQAogI2RlZmluZSBtcGljX3dyaXRlKGIscix2KQlfbXBpY193cml0ZShtcGljLT5yZWdfdHlwZSwmKGIpLChyKSwodikpCiAjZGVmaW5lIG1waWNfaXBpX3JlYWQoaSkJX21waWNfaXBpX3JlYWQobXBpYywoaSkpCiAjZGVmaW5lIG1waWNfaXBpX3dyaXRlKGksdikJX21waWNfaXBpX3dyaXRlKG1waWMsKGkpLCh2KSkKKyNkZWZpbmUgbXBpY190bV9yZWFkKGkpCQlfbXBpY190bV9yZWFkKG1waWMsKGkpKQorI2RlZmluZSBtcGljX3RtX3dyaXRlKGksdikJX21waWNfdG1fd3JpdGUobXBpYywoaSksKHYpKQogI2RlZmluZSBtcGljX2NwdV9yZWFkKGkpCV9tcGljX2NwdV9yZWFkKG1waWMsKGkpKQogI2RlZmluZSBtcGljX2NwdV93cml0ZShpLHYpCV9tcGljX2NwdV93cml0ZShtcGljLChpKSwodikpCiAjZGVmaW5lIG1waWNfaXJxX3JlYWQocyxyKQlfbXBpY19pcnFfcmVhZChtcGljLChzKSwocikpCkBAIC02MDgsOCArNjMzLDYgQEAKIH0KICNlbmRpZgogCi0jZGVmaW5lIG1waWNfaXJxX3RvX2h3KHZpcnEpCSgodW5zaWduZWQgaW50KWlycV9tYXBbdmlycV0uaHdpcnEpCi0KIC8qIEZpbmQgYW4gbXBpYyBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBsaW51eCBpbnRlcnJ1cHQgKi8KIHN0YXRpYyBzdHJ1Y3QgbXBpYyAqbXBpY19maW5kKHVuc2lnbmVkIGludCBpcnEpCiB7CkBAIC02MjIsMTEgKzY0NSwxOCBAQAogLyogRGV0ZXJtaW5lIGlmIHRoZSBsaW51eCBpcnEgaXMgYW4gSVBJICovCiBzdGF0aWMgdW5zaWduZWQgaW50IG1waWNfaXNfaXBpKHN0cnVjdCBtcGljICptcGljLCB1bnNpZ25lZCBpbnQgaXJxKQogewotCXVuc2lnbmVkIGludCBzcmMgPSBtcGljX2lycV90b19odyhpcnEpOworCXVuc2lnbmVkIGludCBzcmMgPSB2aXJxX3RvX2h3KGlycSk7CiAKIAlyZXR1cm4gKHNyYyA+PSBtcGljLT5pcGlfdmVjc1swXSAmJiBzcmMgPD0gbXBpYy0+aXBpX3ZlY3NbM10pOwogfQogCisvKiBEZXRlcm1pbmUgaWYgdGhlIGxpbnV4IGlycSBpcyBhIHRpbWVyICovCitzdGF0aWMgdW5zaWduZWQgaW50IG1waWNfaXNfdG0oc3RydWN0IG1waWMgKm1waWMsIHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgaW50IHNyYyA9IHZpcnFfdG9faHcoaXJxKTsKKworCXJldHVybiAoc3JjID49IG1waWMtPnRpbWVyX3ZlY3NbMF0gJiYgc3JjIDw9IG1waWMtPnRpbWVyX3ZlY3NbN10pOworfQogCiAvKiBDb252ZXJ0IGEgY3B1IG1hc2sgZnJvbSBsb2dpY2FsIHRvIHBoeXNpY2FsIGNwdSBudW1iZXJzLiAqLwogc3RhdGljIGlubGluZSB1MzIgbXBpY19waHlzbWFzayh1MzIgY3B1bWFzaykKQEAgLTYzNCw3ICs2NjQsNyBAQAogCWludCBpOwogCXUzMiBtYXNrID0gMDsKIAotCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyArK2ksIGNwdW1hc2sgPj49IDEpCisJZm9yIChpID0gMDsgaSA8IG1pbigzMiwgTlJfQ1BVUyk7ICsraSwgY3B1bWFzayA+Pj0gMSkKIAkJbWFzayB8PSAoY3B1bWFzayAmIDEpIDw8IGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoaSk7CiAJcmV0dXJuIG1hc2s7CiB9CkBAIC02NzUsNyArNzA1LDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgbG9vcHMgPSAxMDAwMDA7CiAJc3RydWN0IG1waWMgKm1waWMgPSBtcGljX2Zyb21faXJxX2RhdGEoZCk7Ci0JdW5zaWduZWQgaW50IHNyYyA9IG1waWNfaXJxX3RvX2h3KGQtPmlycSk7CisJdW5zaWduZWQgaW50IHNyYyA9IGlycWRfdG9faHdpcnEoZCk7CiAKIAlEQkcoIiVwOiAlczogZW5hYmxlX2lycTogJWQgKHNyYyAlZClcbiIsIG1waWMsIG1waWMtPm5hbWUsIGQtPmlycSwgc3JjKTsKIApAQCAtNjk2LDcgKzcyNiw3IEBACiB7CiAJdW5zaWduZWQgaW50IGxvb3BzID0gMTAwMDAwOwogCXN0cnVjdCBtcGljICptcGljID0gbXBpY19mcm9tX2lycV9kYXRhKGQpOwotCXVuc2lnbmVkIGludCBzcmMgPSBtcGljX2lycV90b19odyhkLT5pcnEpOworCXVuc2lnbmVkIGludCBzcmMgPSBpcnFkX3RvX2h3aXJxKGQpOwogCiAJREJHKCIlczogZGlzYWJsZV9pcnE6ICVkIChzcmMgJWQpXG4iLCBtcGljLT5uYW1lLCBkLT5pcnEsIHNyYyk7CiAKQEAgLTczNCw3ICs3NjQsNyBAQAogc3RhdGljIHZvaWQgbXBpY191bm1hc2tfaHRfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlzdHJ1Y3QgbXBpYyAqbXBpYyA9IG1waWNfZnJvbV9pcnFfZGF0YShkKTsKLQl1bnNpZ25lZCBpbnQgc3JjID0gbXBpY19pcnFfdG9faHcoZC0+aXJxKTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gaXJxZF90b19od2lycShkKTsKIAogCW1waWNfdW5tYXNrX2lycShkKTsKIApAQCAtNzQ1LDcgKzc3NSw3IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IG1waWNfc3RhcnR1cF9odF9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXN0cnVjdCBtcGljICptcGljID0gbXBpY19mcm9tX2lycV9kYXRhKGQpOwotCXVuc2lnbmVkIGludCBzcmMgPSBtcGljX2lycV90b19odyhkLT5pcnEpOworCXVuc2lnbmVkIGludCBzcmMgPSBpcnFkX3RvX2h3aXJxKGQpOwogCiAJbXBpY191bm1hc2tfaXJxKGQpOwogCW1waWNfc3RhcnR1cF9odF9pbnRlcnJ1cHQobXBpYywgc3JjLCBpcnFkX2lzX2xldmVsX3R5cGUoZCkpOwpAQCAtNzU2LDcgKzc4Niw3IEBACiBzdGF0aWMgdm9pZCBtcGljX3NodXRkb3duX2h0X2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3RydWN0IG1waWMgKm1waWMgPSBtcGljX2Zyb21faXJxX2RhdGEoZCk7Ci0JdW5zaWduZWQgaW50IHNyYyA9IG1waWNfaXJxX3RvX2h3KGQtPmlycSk7CisJdW5zaWduZWQgaW50IHNyYyA9IGlycWRfdG9faHdpcnEoZCk7CiAKIAltcGljX3NodXRkb3duX2h0X2ludGVycnVwdChtcGljLCBzcmMpOwogCW1waWNfbWFza19pcnEoZCk7CkBAIC03NjUsNyArNzk1LDcgQEAKIHN0YXRpYyB2b2lkIG1waWNfZW5kX2h0X2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3RydWN0IG1waWMgKm1waWMgPSBtcGljX2Zyb21faXJxX2RhdGEoZCk7Ci0JdW5zaWduZWQgaW50IHNyYyA9IG1waWNfaXJxX3RvX2h3KGQtPmlycSk7CisJdW5zaWduZWQgaW50IHNyYyA9IGlycWRfdG9faHdpcnEoZCk7CiAKICNpZmRlZiBERUJVR19JUlEKIAlEQkcoIiVzOiBlbmRfaXJxOiAlZFxuIiwgbXBpYy0+bmFtZSwgZC0+aXJxKTsKQEAgLTc4Niw3ICs4MTYsNyBAQAogc3RhdGljIHZvaWQgbXBpY191bm1hc2tfaXBpKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlzdHJ1Y3QgbXBpYyAqbXBpYyA9IG1waWNfZnJvbV9pcGkoZCk7Ci0JdW5zaWduZWQgaW50IHNyYyA9IG1waWNfaXJxX3RvX2h3KGQtPmlycSkgLSBtcGljLT5pcGlfdmVjc1swXTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gdmlycV90b19odyhkLT5pcnEpIC0gbXBpYy0+aXBpX3ZlY3NbMF07CiAKIAlEQkcoIiVzOiBlbmFibGVfaXBpOiAlZCAoaXBpICVkKVxuIiwgbXBpYy0+bmFtZSwgZC0+aXJxLCBzcmMpOwogCW1waWNfaXBpX3dyaXRlKHNyYywgbXBpY19pcGlfcmVhZChzcmMpICYgfk1QSUNfVkVDUFJJX01BU0spOwpAQCAtODEzLDI3ICs4NDMsNDIgQEAKIAogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAorc3RhdGljIHZvaWQgbXBpY191bm1hc2tfdG0oc3RydWN0IGlycV9kYXRhICpkKQoreworCXN0cnVjdCBtcGljICptcGljID0gbXBpY19mcm9tX2lycV9kYXRhKGQpOworCXVuc2lnbmVkIGludCBzcmMgPSB2aXJxX3RvX2h3KGQtPmlycSkgLSBtcGljLT50aW1lcl92ZWNzWzBdOworCisJREJHKCIlczogZW5hYmxlX3RtOiAlZCAodG0gJWQpXG4iLCBtcGljLT5uYW1lLCBpcnEsIHNyYyk7CisJbXBpY190bV93cml0ZShzcmMsIG1waWNfdG1fcmVhZChzcmMpICYgfk1QSUNfVkVDUFJJX01BU0spOworCW1waWNfdG1fcmVhZChzcmMpOworfQorCitzdGF0aWMgdm9pZCBtcGljX21hc2tfdG0oc3RydWN0IGlycV9kYXRhICpkKQoreworCXN0cnVjdCBtcGljICptcGljID0gbXBpY19mcm9tX2lycV9kYXRhKGQpOworCXVuc2lnbmVkIGludCBzcmMgPSB2aXJxX3RvX2h3KGQtPmlycSkgLSBtcGljLT50aW1lcl92ZWNzWzBdOworCisJbXBpY190bV93cml0ZShzcmMsIG1waWNfdG1fcmVhZChzcmMpIHwgTVBJQ19WRUNQUklfTUFTSyk7CisJbXBpY190bV9yZWFkKHNyYyk7Cit9CisKIGludCBtcGljX3NldF9hZmZpbml0eShzdHJ1Y3QgaXJxX2RhdGEgKmQsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLAogCQkgICAgICBib29sIGZvcmNlKQogewogCXN0cnVjdCBtcGljICptcGljID0gbXBpY19mcm9tX2lycV9kYXRhKGQpOwotCXVuc2lnbmVkIGludCBzcmMgPSBtcGljX2lycV90b19odyhkLT5pcnEpOworCXVuc2lnbmVkIGludCBzcmMgPSBpcnFkX3RvX2h3aXJxKGQpOwogCiAJaWYgKG1waWMtPmZsYWdzICYgTVBJQ19TSU5HTEVfREVTVF9DUFUpIHsKIAkJaW50IGNwdWlkID0gaXJxX2Nob29zZV9jcHUoY3B1bWFzayk7CiAKIAkJbXBpY19pcnFfd3JpdGUoc3JjLCBNUElDX0lORk8oSVJRX0RFU1RJTkFUSU9OKSwgMSA8PCBjcHVpZCk7CiAJfSBlbHNlIHsKLQkJY3B1bWFza192YXJfdCB0bXA7CisJCXUzMiBtYXNrID0gY3B1bWFza19iaXRzKGNwdW1hc2spWzBdOwogCi0JCWFsbG9jX2NwdW1hc2tfdmFyKCZ0bXAsIEdGUF9LRVJORUwpOwotCi0JCWNwdW1hc2tfYW5kKHRtcCwgY3B1bWFzaywgY3B1X29ubGluZV9tYXNrKTsKKwkJbWFzayAmPSBjcHVtYXNrX2JpdHMoY3B1X29ubGluZV9tYXNrKVswXTsKIAogCQltcGljX2lycV93cml0ZShzcmMsIE1QSUNfSU5GTyhJUlFfREVTVElOQVRJT04pLAotCQkJICAgICAgIG1waWNfcGh5c21hc2soY3B1bWFza19iaXRzKHRtcClbMF0pKTsKLQotCQlmcmVlX2NwdW1hc2tfdmFyKHRtcCk7CisJCQkgICAgICAgbXBpY19waHlzbWFzayhtYXNrKSk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC04NjMsNyArOTA4LDcgQEAKIGludCBtcGljX3NldF9pcnFfdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIGludCBmbG93X3R5cGUpCiB7CiAJc3RydWN0IG1waWMgKm1waWMgPSBtcGljX2Zyb21faXJxX2RhdGEoZCk7Ci0JdW5zaWduZWQgaW50IHNyYyA9IG1waWNfaXJxX3RvX2h3KGQtPmlycSk7CisJdW5zaWduZWQgaW50IHNyYyA9IGlycWRfdG9faHdpcnEoZCk7CiAJdW5zaWduZWQgaW50IHZlY3ByaSwgdm9sZCwgdm5ldzsKIAogCURCRygibXBpYzogc2V0X2lycV90eXBlKG1waWM6QCVwLHZpcnE6JWQsc3JjOjB4JXgsdHlwZToweCV4KVxuIiwKQEAgLTg5OSw3ICs5NDQsNyBAQAogdm9pZCBtcGljX3NldF92ZWN0b3IodW5zaWduZWQgaW50IHZpcnEsIHVuc2lnbmVkIGludCB2ZWN0b3IpCiB7CiAJc3RydWN0IG1waWMgKm1waWMgPSBtcGljX2Zyb21faXJxKHZpcnEpOwotCXVuc2lnbmVkIGludCBzcmMgPSBtcGljX2lycV90b19odyh2aXJxKTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gdmlycV90b19odyh2aXJxKTsKIAl1bnNpZ25lZCBpbnQgdmVjcHJpOwogCiAJREJHKCJtcGljOiBzZXRfdmVjdG9yKG1waWM6QCVwLHZpcnE6JWQsc3JjOiVkLHZlY3RvcjoweCV4KVxuIiwKQEAgLTkxNyw3ICs5NjIsNyBAQAogdm9pZCBtcGljX3NldF9kZXN0aW5hdGlvbih1bnNpZ25lZCBpbnQgdmlycSwgdW5zaWduZWQgaW50IGNwdWlkKQogewogCXN0cnVjdCBtcGljICptcGljID0gbXBpY19mcm9tX2lycSh2aXJxKTsKLQl1bnNpZ25lZCBpbnQgc3JjID0gbXBpY19pcnFfdG9faHcodmlycSk7CisJdW5zaWduZWQgaW50IHNyYyA9IHZpcnFfdG9faHcodmlycSk7CiAKIAlEQkcoIm1waWM6IHNldF9kZXN0aW5hdGlvbihtcGljOkAlcCx2aXJxOiVkLHNyYzolZCxjcHVpZDoweCV4KVxuIiwKIAkgICAgbXBpYywgdmlycSwgc3JjLCBjcHVpZCk7CkBAIC05NDMsNiArOTg4LDEyIEBACiB9OwogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAorc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtcGljX3RtX2NoaXAgPSB7CisJLmlycV9tYXNrCT0gbXBpY19tYXNrX3RtLAorCS5pcnFfdW5tYXNrCT0gbXBpY191bm1hc2tfdG0sCisJLmlycV9lb2kJPSBtcGljX2VuZF9pcnEsCit9OworCiAjaWZkZWYgQ09ORklHX01QSUNfVTNfSFRfSVJRUwogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtcGljX2lycV9odF9jaGlwID0gewogCS5pcnFfc3RhcnR1cAk9IG1waWNfc3RhcnR1cF9odF9pcnEsCkBAIC05ODYsNiArMTAzNywxNiBAQAogCX0KICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKKwlpZiAoaHcgPj0gbXBpYy0+dGltZXJfdmVjc1swXSAmJiBodyA8PSBtcGljLT50aW1lcl92ZWNzWzddKSB7CisJCVdBUk5fT04oIShtcGljLT5mbGFncyAmIE1QSUNfUFJJTUFSWSkpOworCisJCURCRygibXBpYzogbWFwcGluZyBhcyB0aW1lclxuIik7CisJCWlycV9zZXRfY2hpcF9kYXRhKHZpcnEsIG1waWMpOworCQlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIodmlycSwgJm1waWMtPmhjX3RtLAorCQkJCQkgaGFuZGxlX2Zhc3Rlb2lfaXJxKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJaWYgKGh3ID49IG1waWMtPmlycV9jb3VudCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTEwMjYsNiArMTA4Nyw3IEBACiAJCQkgICBpcnFfaHdfbnVtYmVyX3QgKm91dF9od2lycSwgdW5zaWduZWQgaW50ICpvdXRfZmxhZ3MpCiAKIHsKKwlzdHJ1Y3QgbXBpYyAqbXBpYyA9IGgtPmhvc3RfZGF0YTsKIAlzdGF0aWMgdW5zaWduZWQgY2hhciBtYXBfbXBpY19zZW5zZXNbNF0gPSB7CiAJCUlSUV9UWVBFX0VER0VfUklTSU5HLAogCQlJUlFfVFlQRV9MRVZFTF9MT1csCkBAIC0xMDM0LDcgKzEwOTYsMzggQEAKIAl9OwogCiAJKm91dF9od2lycSA9IGludHNwZWNbMF07Ci0JaWYgKGludHNpemUgPiAxKSB7CisJaWYgKGludHNpemUgPj0gNCAmJiAobXBpYy0+ZmxhZ3MgJiBNUElDX0ZTTCkpIHsKKwkJLyoKKwkJICogRnJlZXNjYWxlIE1QSUMgd2l0aCBleHRlbmRlZCBpbnRzcGVjOgorCQkgKiBGaXJzdCB0d28gY2VsbHMgYXJlIGFzIHVzdWFsLiAgVGhpcmQgc3BlY2lmaWVzCisJCSAqIGFuICJpbnRlcnJ1cHQgdHlwZSIuICBGb3VydGggaXMgdHlwZS1zcGVjaWZpYyBkYXRhLgorCQkgKgorCQkgKiBTZWUgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL21waWMudHh0CisJCSAqLworCQlzd2l0Y2ggKGludHNwZWNbMl0pIHsKKwkJY2FzZSAwOgorCQljYXNlIDE6IC8qIG5vIEVJU1IvRUlNUiBzdXBwb3J0IGZvciBub3csIHRyZWF0IGFzIHNoYXJlZCBJUlEgKi8KKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlpZiAoaW50c3BlY1swXSA+PSBBUlJBWV9TSVpFKG1waWMtPmlwaV92ZWNzKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJKm91dF9od2lycSA9IG1waWMtPmlwaV92ZWNzW2ludHNwZWNbMF1dOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCWlmIChpbnRzcGVjWzBdID49IEFSUkFZX1NJWkUobXBpYy0+dGltZXJfdmVjcykpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCSpvdXRfaHdpcnEgPSBtcGljLT50aW1lcl92ZWNzW2ludHNwZWNbMF1dOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcl9kZWJ1ZygiJXM6IHVua25vd24gaXJxIHR5cGUgJXVcbiIsCisJCQkJIF9fZnVuY19fLCBpbnRzcGVjWzJdKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJKm91dF9mbGFncyA9IG1hcF9tcGljX3NlbnNlc1tpbnRzcGVjWzFdICYgM107CisJfSBlbHNlIGlmIChpbnRzaXplID4gMSkgewogCQl1MzIgbWFzayA9IDB4MzsKIAogCQkvKiBBcHBsZSBpbnZlbnRlZCBhIG5ldyByYWNlIG9mIGVuY29kaW5nIG9uIG1hY2hpbmVzIHdpdGgKQEAgLTExMTAsNiArMTIwMyw5IEBACiAJbXBpYy0+aGNfaXBpLm5hbWUgPSBuYW1lOwogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAorCW1waWMtPmhjX3RtID0gbXBpY190bV9jaGlwOworCW1waWMtPmhjX3RtLm5hbWUgPSBuYW1lOworCiAJbXBpYy0+ZmxhZ3MgPSBmbGFnczsKIAltcGljLT5pc3Vfc2l6ZSA9IGlzdV9zaXplOwogCW1waWMtPmlycV9jb3VudCA9IGlycV9jb3VudDsKQEAgLTExMjAsMTAgKzEyMTYsMTQgQEAKIAllbHNlCiAJCWludHZlY190b3AgPSAyNTU7CiAKLQltcGljLT50aW1lcl92ZWNzWzBdID0gaW50dmVjX3RvcCAtIDg7Ci0JbXBpYy0+dGltZXJfdmVjc1sxXSA9IGludHZlY190b3AgLSA3OwotCW1waWMtPnRpbWVyX3ZlY3NbMl0gPSBpbnR2ZWNfdG9wIC0gNjsKLQltcGljLT50aW1lcl92ZWNzWzNdID0gaW50dmVjX3RvcCAtIDU7CisJbXBpYy0+dGltZXJfdmVjc1swXSA9IGludHZlY190b3AgLSAxMjsKKwltcGljLT50aW1lcl92ZWNzWzFdID0gaW50dmVjX3RvcCAtIDExOworCW1waWMtPnRpbWVyX3ZlY3NbMl0gPSBpbnR2ZWNfdG9wIC0gMTA7CisJbXBpYy0+dGltZXJfdmVjc1szXSA9IGludHZlY190b3AgLSA5OworCW1waWMtPnRpbWVyX3ZlY3NbNF0gPSBpbnR2ZWNfdG9wIC0gODsKKwltcGljLT50aW1lcl92ZWNzWzVdID0gaW50dmVjX3RvcCAtIDc7CisJbXBpYy0+dGltZXJfdmVjc1s2XSA9IGludHZlY190b3AgLSA2OworCW1waWMtPnRpbWVyX3ZlY3NbN10gPSBpbnR2ZWNfdG9wIC0gNTsKIAltcGljLT5pcGlfdmVjc1swXSAgID0gaW50dmVjX3RvcCAtIDQ7CiAJbXBpYy0+aXBpX3ZlY3NbMV0gICA9IGludHZlY190b3AgLSAzOwogCW1waWMtPmlwaV92ZWNzWzJdICAgPSBpbnR2ZWNfdG9wIC0gMjsKQEAgLTExMzMsNiArMTIzMyw4IEBACiAJLyogQ2hlY2sgZm9yICJiaWctZW5kaWFuIiBpbiBkZXZpY2UtdHJlZSAqLwogCWlmIChub2RlICYmIG9mX2dldF9wcm9wZXJ0eShub2RlLCAiYmlnLWVuZGlhbiIsIE5VTEwpICE9IE5VTEwpCiAJCW1waWMtPmZsYWdzIHw9IE1QSUNfQklHX0VORElBTjsKKwlpZiAobm9kZSAmJiBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShub2RlLCAiZnNsLG1waWMiKSkKKwkJbXBpYy0+ZmxhZ3MgfD0gTVBJQ19GU0w7CiAKIAkvKiBMb29rIGZvciBwcm90ZWN0ZWQgc291cmNlcyAqLwogCWlmIChub2RlKSB7CkBAIC0xMzI0LDE1ICsxNDI2LDE3IEBACiAJLyogU2V0IGN1cnJlbnQgcHJvY2Vzc29yIHByaW9yaXR5IHRvIG1heCAqLwogCW1waWNfY3B1X3dyaXRlKE1QSUNfSU5GTyhDUFVfQ1VSUkVOVF9UQVNLX1BSSSksIDB4Zik7CiAKLQkvKiBJbml0aWFsaXplIHRpbWVyczoganVzdCBkaXNhYmxlIHRoZW0gYWxsICovCisJLyogSW5pdGlhbGl6ZSB0aW1lcnMgdG8gb3VyIHJlc2VydmVkIHZlY3RvcnMgYW5kIG1hc2sgdGhlbSBmb3Igbm93ICovCiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogCQltcGljX3dyaXRlKG1waWMtPnRtcmVncywKIAkJCSAgIGkgKiBNUElDX0lORk8oVElNRVJfU1RSSURFKSArCi0JCQkgICBNUElDX0lORk8oVElNRVJfREVTVElOQVRJT04pLCAwKTsKKwkJCSAgIE1QSUNfSU5GTyhUSU1FUl9ERVNUSU5BVElPTiksCisJCQkgICAxIDw8IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAkJbXBpY193cml0ZShtcGljLT50bXJlZ3MsCiAJCQkgICBpICogTVBJQ19JTkZPKFRJTUVSX1NUUklERSkgKwogCQkJICAgTVBJQ19JTkZPKFRJTUVSX1ZFQ1RPUl9QUkkpLAogCQkJICAgTVBJQ19WRUNQUklfTUFTSyB8CisJCQkgICAoOSA8PCBNUElDX1ZFQ1BSSV9QUklPUklUWV9TSElGVCkgfAogCQkJICAgKG1waWMtPnRpbWVyX3ZlY3NbMF0gKyBpKSk7CiAJfQogCkBAIC0xNDI4LDcgKzE1MzIsNyBAQAogdm9pZCBtcGljX2lycV9zZXRfcHJpb3JpdHkodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHByaSkKIHsKIAlzdHJ1Y3QgbXBpYyAqbXBpYyA9IG1waWNfZmluZChpcnEpOwotCXVuc2lnbmVkIGludCBzcmMgPSBtcGljX2lycV90b19odyhpcnEpOworCXVuc2lnbmVkIGludCBzcmMgPSB2aXJxX3RvX2h3KGlycSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgcmVnOwogCkBAIC0xNDQxLDYgKzE1NDUsMTEgQEAKIAkJCX5NUElDX1ZFQ1BSSV9QUklPUklUWV9NQVNLOwogCQltcGljX2lwaV93cml0ZShzcmMgLSBtcGljLT5pcGlfdmVjc1swXSwKIAkJCSAgICAgICByZWcgfCAocHJpIDw8IE1QSUNfVkVDUFJJX1BSSU9SSVRZX1NISUZUKSk7CisJfSBlbHNlIGlmIChtcGljX2lzX3RtKG1waWMsIGlycSkpIHsKKwkJcmVnID0gbXBpY190bV9yZWFkKHNyYyAtIG1waWMtPnRpbWVyX3ZlY3NbMF0pICYKKwkJCX5NUElDX1ZFQ1BSSV9QUklPUklUWV9NQVNLOworCQltcGljX3RtX3dyaXRlKHNyYyAtIG1waWMtPnRpbWVyX3ZlY3NbMF0sCisJCQkgICAgICByZWcgfCAocHJpIDw8IE1QSUNfVkVDUFJJX1BSSU9SSVRZX1NISUZUKSk7CiAJfSBlbHNlIHsKIAkJcmVnID0gbXBpY19pcnFfcmVhZChzcmMsIE1QSUNfSU5GTyhJUlFfVkVDVE9SX1BSSSkpCiAJCQkmIH5NUElDX1ZFQ1BSSV9QUklPUklUWV9NQVNLOwpAQCAtMTYyMCw0NiArMTcyOSwyOCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgbXBpY19zZW5kX2lwaSh1bnNpZ25lZCBpbnQgaXBpX25vLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X21hc2spCit2b2lkIHNtcF9tcGljX21lc3NhZ2VfcGFzcyhpbnQgY3B1LCBpbnQgbXNnKQogewogCXN0cnVjdCBtcGljICptcGljID0gbXBpY19wcmltYXJ5OworCXUzMiBwaHlzbWFzazsKIAogCUJVR19PTihtcGljID09IE5VTEwpOwogCi0jaWZkZWYgREVCVUdfSVBJCi0JREJHKCIlczogc2VuZF9pcGkoaXBpX25vOiAlZClcbiIsIG1waWMtPm5hbWUsIGlwaV9ubyk7Ci0jZW5kaWYKLQotCW1waWNfY3B1X3dyaXRlKE1QSUNfSU5GTyhDUFVfSVBJX0RJU1BBVENIXzApICsKLQkJICAgICAgIGlwaV9ubyAqIE1QSUNfSU5GTyhDUFVfSVBJX0RJU1BBVENIX1NUUklERSksCi0JCSAgICAgICBtcGljX3BoeXNtYXNrKGNwdW1hc2tfYml0cyhjcHVfbWFzaylbMF0pKTsKLX0KLQotdm9pZCBzbXBfbXBpY19tZXNzYWdlX3Bhc3MoaW50IHRhcmdldCwgaW50IG1zZykKLXsKLQljcHVtYXNrX3Zhcl90IHRtcDsKLQogCS8qIG1ha2Ugc3VyZSB3ZSdyZSBzZW5kaW5nIHNvbWV0aGluZyB0aGF0IHRyYW5zbGF0ZXMgdG8gYW4gSVBJICovCiAJaWYgKCh1bnNpZ25lZCBpbnQpbXNnID4gMykgewogCQlwcmludGsoIlNNUCAlZDogc21wX21lc3NhZ2VfcGFzczogdW5rbm93biBtc2cgJWRcbiIsCiAJCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCksIG1zZyk7CiAJCXJldHVybjsKIAl9Ci0Jc3dpdGNoICh0YXJnZXQpIHsKLQljYXNlIE1TR19BTEw6Ci0JCW1waWNfc2VuZF9pcGkobXNnLCBjcHVfb25saW5lX21hc2spOwotCQlicmVhazsKLQljYXNlIE1TR19BTExfQlVUX1NFTEY6Ci0JCWFsbG9jX2NwdW1hc2tfdmFyKCZ0bXAsIEdGUF9OT1dBSVQpOwotCQljcHVtYXNrX2FuZG5vdCh0bXAsIGNwdV9vbmxpbmVfbWFzaywKLQkJCSAgICAgICBjcHVtYXNrX29mKHNtcF9wcm9jZXNzb3JfaWQoKSkpOwotCQltcGljX3NlbmRfaXBpKG1zZywgdG1wKTsKLQkJZnJlZV9jcHVtYXNrX3Zhcih0bXApOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQltcGljX3NlbmRfaXBpKG1zZywgY3B1bWFza19vZih0YXJnZXQpKTsKLQkJYnJlYWs7Ci0JfQorCisjaWZkZWYgREVCVUdfSVBJCisJREJHKCIlczogc2VuZF9pcGkoaXBpX25vOiAlZClcbiIsIG1waWMtPm5hbWUsIG1zZyk7CisjZW5kaWYKKworCXBoeXNtYXNrID0gMSA8PCBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGNwdSk7CisKKwltcGljX2NwdV93cml0ZShNUElDX0lORk8oQ1BVX0lQSV9ESVNQQVRDSF8wKSArCisJCSAgICAgICBtc2cgKiBNUElDX0lORk8oQ1BVX0lQSV9ESVNQQVRDSF9TVFJJREUpLCBwaHlzbWFzayk7CiB9CiAKIGludCBfX2luaXQgc21wX21waWNfcHJvYmUodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXY2NHg2MF9waWMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXY2NHg2MF9waWMuYwppbmRleCBlOWM2MzNjLi4xNGQxMzAyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L212NjR4NjBfcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tdjY0eDYwX3BpYy5jCkBAIC03OCw3ICs3OCw3IEBACiAKIHN0YXRpYyB2b2lkIG12NjR4NjBfbWFza19sb3coc3RydWN0IGlycV9kYXRhICpkKQogewotCWludCBsZXZlbDIgPSBpcnFfbWFwW2QtPmlycV0uaHdpcnEgJiBNVjY0eDYwX0xFVkVMMl9NQVNLOworCWludCBsZXZlbDIgPSBpcnFkX3RvX2h3aXJxKGQpICYgTVY2NHg2MF9MRVZFTDJfTUFTSzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm12NjR4NjBfbG9jaywgZmxhZ3MpOwpAQCAtOTEsNyArOTEsNyBAQAogCiBzdGF0aWMgdm9pZCBtdjY0eDYwX3VubWFza19sb3coc3RydWN0IGlycV9kYXRhICpkKQogewotCWludCBsZXZlbDIgPSBpcnFfbWFwW2QtPmlycV0uaHdpcnEgJiBNVjY0eDYwX0xFVkVMMl9NQVNLOworCWludCBsZXZlbDIgPSBpcnFkX3RvX2h3aXJxKGQpICYgTVY2NHg2MF9MRVZFTDJfTUFTSzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm12NjR4NjBfbG9jaywgZmxhZ3MpOwpAQCAtMTE1LDcgKzExNSw3IEBACiAKIHN0YXRpYyB2b2lkIG12NjR4NjBfbWFza19oaWdoKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpbnQgbGV2ZWwyID0gaXJxX21hcFtkLT5pcnFdLmh3aXJxICYgTVY2NHg2MF9MRVZFTDJfTUFTSzsKKwlpbnQgbGV2ZWwyID0gaXJxZF90b19od2lycShkKSAmIE1WNjR4NjBfTEVWRUwyX01BU0s7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtdjY0eDYwX2xvY2ssIGZsYWdzKTsKQEAgLTEyOCw3ICsxMjgsNyBAQAogCiBzdGF0aWMgdm9pZCBtdjY0eDYwX3VubWFza19oaWdoKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpbnQgbGV2ZWwyID0gaXJxX21hcFtkLT5pcnFdLmh3aXJxICYgTVY2NHg2MF9MRVZFTDJfTUFTSzsKKwlpbnQgbGV2ZWwyID0gaXJxZF90b19od2lycShkKSAmIE1WNjR4NjBfTEVWRUwyX01BU0s7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtdjY0eDYwX2xvY2ssIGZsYWdzKTsKQEAgLTE1Miw3ICsxNTIsNyBAQAogCiBzdGF0aWMgdm9pZCBtdjY0eDYwX21hc2tfZ3BwKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpbnQgbGV2ZWwyID0gaXJxX21hcFtkLT5pcnFdLmh3aXJxICYgTVY2NHg2MF9MRVZFTDJfTUFTSzsKKwlpbnQgbGV2ZWwyID0gaXJxZF90b19od2lycShkKSAmIE1WNjR4NjBfTEVWRUwyX01BU0s7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtdjY0eDYwX2xvY2ssIGZsYWdzKTsKQEAgLTE2NSw3ICsxNjUsNyBAQAogCiBzdGF0aWMgdm9pZCBtdjY0eDYwX21hc2tfYWNrX2dwcChzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JaW50IGxldmVsMiA9IGlycV9tYXBbZC0+aXJxXS5od2lycSAmIE1WNjR4NjBfTEVWRUwyX01BU0s7CisJaW50IGxldmVsMiA9IGlycWRfdG9faHdpcnEoZCkgJiBNVjY0eDYwX0xFVkVMMl9NQVNLOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbXY2NHg2MF9sb2NrLCBmbGFncyk7CkBAIC0xODAsNyArMTgwLDcgQEAKIAogc3RhdGljIHZvaWQgbXY2NHg2MF91bm1hc2tfZ3BwKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpbnQgbGV2ZWwyID0gaXJxX21hcFtkLT5pcnFdLmh3aXJxICYgTVY2NHg2MF9MRVZFTDJfTUFTSzsKKwlpbnQgbGV2ZWwyID0gaXJxZF90b19od2lycShkKSAmIE1WNjR4NjBfTEVWRUwyX01BU0s7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtdjY0eDYwX2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlX2ljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZV9pYy5jCmluZGV4IDgzMmQ2OTIuLmIyYWNkYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlX2ljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWVfaWMuYwpAQCAtMTk3LDEyICsxOTcsMTAgQEAKIAlyZXR1cm4gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiB9CiAKLSNkZWZpbmUgdmlycV90b19odyh2aXJxKQkoKHVuc2lnbmVkIGludClpcnFfbWFwW3ZpcnFdLmh3aXJxKQotCiBzdGF0aWMgdm9pZCBxZV9pY191bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlzdHJ1Y3QgcWVfaWMgKnFlX2ljID0gcWVfaWNfZnJvbV9pcnFfZGF0YShkKTsKLQl1bnNpZ25lZCBpbnQgc3JjID0gdmlycV90b19odyhkLT5pcnEpOworCXVuc2lnbmVkIGludCBzcmMgPSBpcnFkX3RvX2h3aXJxKGQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHRlbXA7CiAKQEAgLTIxOCw3ICsyMTYsNyBAQAogc3RhdGljIHZvaWQgcWVfaWNfbWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXN0cnVjdCBxZV9pYyAqcWVfaWMgPSBxZV9pY19mcm9tX2lycV9kYXRhKGQpOwotCXVuc2lnbmVkIGludCBzcmMgPSB2aXJxX3RvX2h3KGQtPmlycSk7CisJdW5zaWduZWQgaW50IHNyYyA9IGlycWRfdG9faHdpcnEoZCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgdGVtcDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9zY29tLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3Njb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjU5M2NlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9zY29tLmMKQEAgLTAsMCArMSwxOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBCZW5qYW1pbiBIZXJyZW5zY2htaWR0LCBJQk0gQ29ycAorICogICAgICAgICAgICAgICAgPGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZz4KKyAqICAgICBhbmQgICAgICAgIERhdmlkIEdpYnNvbiwgSUJNIENvcnBvcmF0aW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7ICB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyAgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZQorICogICB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyAgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL3Njb20uaD4KKworY29uc3Qgc3RydWN0IHNjb21fY29udHJvbGxlciAqc2NvbV9jb250cm9sbGVyOworRVhQT1JUX1NZTUJPTF9HUEwoc2NvbV9jb250cm9sbGVyKTsKKworc3RydWN0IGRldmljZV9ub2RlICpzY29tX2ZpbmRfcGFyZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhciwgKnRtcDsKKwljb25zdCB1MzIgKnA7CisKKwlmb3IgKHBhciA9IG9mX25vZGVfZ2V0KG5vZGUpOyBwYXI7KSB7CisJCWlmIChvZl9nZXRfcHJvcGVydHkocGFyLCAic2NvbS1jb250cm9sbGVyIiwgTlVMTCkpCisJCQlicmVhazsKKwkJcCA9IG9mX2dldF9wcm9wZXJ0eShwYXIsICJzY29tLXBhcmVudCIsIE5VTEwpOworCQl0bXAgPSBwYXI7CisJCWlmIChwID09IE5VTEwpCisJCQlwYXIgPSBvZl9nZXRfcGFyZW50KHBhcik7CisJCWVsc2UKKwkJCXBhciA9IG9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlKCpwKTsKKwkJb2Zfbm9kZV9wdXQodG1wKTsKKwl9CisJcmV0dXJuIHBhcjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNjb21fZmluZF9wYXJlbnQpOworCitzY29tX21hcF90IHNjb21fbWFwX2RldmljZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwgaW50IGluZGV4KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50OworCXVuc2lnbmVkIGludCBjZWxscywgc2l6ZTsKKwljb25zdCB1MzIgKnByb3A7CisJdTY0IHJlZywgY250OworCXNjb21fbWFwX3QgcmV0OworCisJcGFyZW50ID0gc2NvbV9maW5kX3BhcmVudChkZXYpOworCisJaWYgKHBhcmVudCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXByb3AgPSBvZl9nZXRfcHJvcGVydHkocGFyZW50LCAiI3Njb20tY2VsbHMiLCBOVUxMKTsKKwljZWxscyA9IHByb3AgPyAqcHJvcCA6IDE7CisKKwlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KGRldiwgInNjb20tcmVnIiwgJnNpemUpOworCWlmICghcHJvcCkKKwkJcmV0dXJuIDA7CisJc2l6ZSA+Pj0gMjsKKworCWlmIChpbmRleCA+PSAoc2l6ZSAvICgyKmNlbGxzKSkpCisJCXJldHVybiAwOworCisJcmVnID0gb2ZfcmVhZF9udW1iZXIoJnByb3BbaW5kZXggKiBjZWxscyAqIDJdLCBjZWxscyk7CisJY250ID0gb2ZfcmVhZF9udW1iZXIoJnByb3BbaW5kZXggKiBjZWxscyAqIDIgKyBjZWxsc10sIGNlbGxzKTsKKworCXJldCA9IHNjb21fbWFwKHBhcmVudCwgcmVnLCBjbnQpOworCW9mX25vZGVfcHV0KHBhcmVudCk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoc2NvbV9tYXBfZGV2aWNlKTsKKworI2lmZGVmIENPTkZJR19TQ09NX0RFQlVHRlMKK3N0cnVjdCBzY29tX2RlYnVnX2VudHJ5IHsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwlzY29tX21hcF90IG1hcDsKKwlzcGlubG9ja190IGxvY2s7CisJY2hhciBuYW1lWzhdOworCXN0cnVjdCBkZWJ1Z2ZzX2Jsb2Jfd3JhcHBlciBibG9iOworfTsKKworc3RhdGljIGludCBzY29tX2FkZHJfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCit7CisJc3RydWN0IHNjb21fZGVidWdfZW50cnkgKmVudCA9IGRhdGE7CisKKwllbnQtPmFkZHIgPSAwOworCXNjb21fdW5tYXAoZW50LT5tYXApOworCisJZW50LT5tYXAgPSBzY29tX21hcChlbnQtPmRuLCB2YWwsIDEpOworCWlmIChzY29tX21hcF9vayhlbnQtPm1hcCkpCisJCWVudC0+YWRkciA9IHZhbDsKKwllbHNlCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2NvbV9hZGRyX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2NvbV9kZWJ1Z19lbnRyeSAqZW50ID0gZGF0YTsKKwkqdmFsID0gZW50LT5hZGRyOworCXJldHVybiAwOworfQorREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUoc2NvbV9hZGRyX2ZvcHMsIHNjb21fYWRkcl9nZXQsIHNjb21fYWRkcl9zZXQsCisJCQkiMHglbGx4XG4iKTsKKworc3RhdGljIGludCBzY29tX3ZhbF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKK3sKKwlzdHJ1Y3Qgc2NvbV9kZWJ1Z19lbnRyeSAqZW50ID0gZGF0YTsKKworCWlmICghc2NvbV9tYXBfb2soZW50LT5tYXApKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXNjb21fd3JpdGUoZW50LT5tYXAsIDAsIHZhbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzY29tX3ZhbF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpCit7CisJc3RydWN0IHNjb21fZGVidWdfZW50cnkgKmVudCA9IGRhdGE7CisKKwlpZiAoIXNjb21fbWFwX29rKGVudC0+bWFwKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkqdmFsID0gc2NvbV9yZWFkKGVudC0+bWFwLCAwKTsKKwlyZXR1cm4gMDsKK30KK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKHNjb21fdmFsX2ZvcHMsIHNjb21fdmFsX2dldCwgc2NvbV92YWxfc2V0LAorCQkJIjB4JWxseFxuIik7CisKK3N0YXRpYyBpbnQgc2NvbV9kZWJ1Z19pbml0X29uZShzdHJ1Y3QgZGVudHJ5ICpyb290LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLAorCQkJICAgICAgIGludCBpKQoreworCXN0cnVjdCBzY29tX2RlYnVnX2VudHJ5ICplbnQ7CisJc3RydWN0IGRlbnRyeSAqZGlyOworCisJZW50ID0ga3phbGxvYyhzaXplb2YoKmVudCksIEdGUF9LRVJORUwpOworCWlmICghZW50KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVudC0+ZG4gPSBvZl9ub2RlX2dldChkbik7CisJZW50LT5tYXAgPSBTQ09NX01BUF9JTlZBTElEOworCXNwaW5fbG9ja19pbml0KCZlbnQtPmxvY2spOworCXNucHJpbnRmKGVudC0+bmFtZSwgOCwgInNjb20lZCIsIGkpOworCWVudC0+YmxvYi5kYXRhID0gZG4tPmZ1bGxfbmFtZTsKKwllbnQtPmJsb2Iuc2l6ZSA9IHN0cmxlbihkbi0+ZnVsbF9uYW1lKTsKKworCWRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihlbnQtPm5hbWUsIHJvb3QpOworCWlmICghZGlyKSB7CisJCW9mX25vZGVfcHV0KGRuKTsKKwkJa2ZyZWUoZW50KTsKKwkJcmV0dXJuIC0xOworCX0KKworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImFkZHIiLCAwNjAwLCBkaXIsIGVudCwgJnNjb21fYWRkcl9mb3BzKTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ2YWx1ZSIsIDA2MDAsIGRpciwgZW50LCAmc2NvbV92YWxfZm9wcyk7CisJZGVidWdmc19jcmVhdGVfYmxvYigicGF0aCIsIDA0MDAsIGRpciwgJmVudC0+YmxvYik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzY29tX2RlYnVnX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOworCXN0cnVjdCBkZW50cnkgKnJvb3Q7CisJaW50IGksIHJjOworCisJcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2Rpcigic2NvbSIsIHBvd2VycGNfZGVidWdmc19yb290KTsKKwlpZiAoIXJvb3QpCisJCXJldHVybiAtMTsKKworCWkgPSByYyA9IDA7CisJZm9yX2VhY2hfbm9kZV93aXRoX3Byb3BlcnR5KGRuLCAic2NvbS1jb250cm9sbGVyIikKKwkJcmMgfD0gc2NvbV9kZWJ1Z19pbml0X29uZShyb290LCBkbiwgaSsrKTsKKworCXJldHVybiByYzsKK30KK2RldmljZV9pbml0Y2FsbChzY29tX2RlYnVnX2luaXQpOworI2VuZGlmIC8qIENPTkZJR19TQ09NX0RFQlVHRlMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvdWljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3VpYy5jCmluZGV4IDVkOTEzODUuLjk4NGNkMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvdWljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi91aWMuYwpAQCAtNDEsOCArNDEsNiBAQAogI2RlZmluZSBVSUNfVlIJCTB4NwogI2RlZmluZSBVSUNfVkNSCQkweDgKIAotI2RlZmluZSB1aWNfaXJxX3RvX2h3KHZpcnEpCShpcnFfbWFwW3ZpcnFdLmh3aXJxKQotCiBzdHJ1Y3QgdWljICpwcmltYXJ5X3VpYzsKIAogc3RydWN0IHVpYyB7CkBAIC01OCw3ICs1Niw3IEBACiBzdGF0aWMgdm9pZCB1aWNfdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3RydWN0IHVpYyAqdWljID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7Ci0JdW5zaWduZWQgaW50IHNyYyA9IHVpY19pcnFfdG9faHcoZC0+aXJxKTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gaXJxZF90b19od2lycShkKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBlciwgc3I7CiAKQEAgLTc2LDcgKzc0LDcgQEAKIHN0YXRpYyB2b2lkIHVpY19tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3RydWN0IHVpYyAqdWljID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7Ci0JdW5zaWduZWQgaW50IHNyYyA9IHVpY19pcnFfdG9faHcoZC0+aXJxKTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gaXJxZF90b19od2lycShkKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBlcjsKIApAQCAtOTAsNyArODgsNyBAQAogc3RhdGljIHZvaWQgdWljX2Fja19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXN0cnVjdCB1aWMgKnVpYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwotCXVuc2lnbmVkIGludCBzcmMgPSB1aWNfaXJxX3RvX2h3KGQtPmlycSk7CisJdW5zaWduZWQgaW50IHNyYyA9IGlycWRfdG9faHdpcnEoZCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ1aWMtPmxvY2ssIGZsYWdzKTsKQEAgLTEwMSw3ICs5OSw3IEBACiBzdGF0aWMgdm9pZCB1aWNfbWFza19hY2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlzdHJ1Y3QgdWljICp1aWMgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKLQl1bnNpZ25lZCBpbnQgc3JjID0gdWljX2lycV90b19odyhkLT5pcnEpOworCXVuc2lnbmVkIGludCBzcmMgPSBpcnFkX3RvX2h3aXJxKGQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIGVyLCBzcjsKIApAQCAtMTI2LDcgKzEyNCw3IEBACiBzdGF0aWMgaW50IHVpY19zZXRfaXJxX3R5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQogewogCXN0cnVjdCB1aWMgKnVpYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwotCXVuc2lnbmVkIGludCBzcmMgPSB1aWNfaXJxX3RvX2h3KGQtPmlycSk7CisJdW5zaWduZWQgaW50IHNyYyA9IGlycWRfdG9faHdpcnEoZCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgdHJpZ2dlciwgcG9sYXJpdHk7CiAJdTMyIHRyLCBwciwgbWFzazsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYveGljcy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi94aWNzL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAzMWVkYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYveGljcy9LY29uZmlnCkBAIC0wLDAgKzEsMTMgQEAKK2NvbmZpZyBQUENfWElDUworICAgICAgIGRlZl9ib29sIG4KKyAgICAgICBzZWxlY3QgUFBDX1NNUF9NVVhFRF9JUEkKKworY29uZmlnIFBQQ19JQ1BfTkFUSVZFCisgICAgICAgZGVmX2Jvb2wgbgorCitjb25maWcgUFBDX0lDUF9IVgorICAgICAgIGRlZl9ib29sIG4KKworY29uZmlnIFBQQ19JQ1NfUlRBUworICAgICAgIGRlZl9ib29sIG4KKwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi94aWNzL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi94aWNzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NWE2MDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3hpY3MvTWFrZWZpbGUKQEAgLTAsMCArMSw2IEBACitzdWJkaXItY2NmbGFncy0kKENPTkZJR19QUENfV0VSUk9SKSA6PSAtV2Vycm9yCisKK29iai15CQkJCSs9IHhpY3MtY29tbW9uLm8KK29iai0kKENPTkZJR19QUENfSUNQX05BVElWRSkJKz0gaWNwLW5hdGl2ZS5vCitvYmotJChDT05GSUdfUFBDX0lDUF9IVikJKz0gaWNwLWh2Lm8KK29iai0kKENPTkZJR19QUENfSUNTX1JUQVMpCSs9IGljcy1ydGFzLm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYveGljcy9pY3AtaHYuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYveGljcy9pY3AtaHYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTE4ZDM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi94aWNzL2ljcC1odi5jCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTEgSUJNIENvcnBvcmF0aW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisKKyNpbmNsdWRlIDxhc20vc21wLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS94aWNzLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2h2Y2FsbC5oPgorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpY3BfaHZfZ2V0X3hpcnIodW5zaWduZWQgY2hhciBjcHByKQoreworCXVuc2lnbmVkIGxvbmcgcmV0YnVmW1BMUEFSX0hDQUxMX0JVRlNJWkVdOworCWxvbmcgcmM7CisKKwlyYyA9IHBscGFyX2hjYWxsKEhfWElSUiwgcmV0YnVmLCBjcHByKTsKKwlpZiAocmMgIT0gSF9TVUNDRVNTKQorCQlwYW5pYygiIGJhZCByZXR1cm4gY29kZSB4aXJyIC0gcmMgPSAlbHhcbiIsIHJjKTsKKwlyZXR1cm4gKHVuc2lnbmVkIGludClyZXRidWZbMF07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpY3BfaHZfc2V0X3hpcnIodW5zaWduZWQgaW50IHZhbHVlKQoreworCWxvbmcgcmMgPSBwbHBhcl9oY2FsbF9ub3JldHMoSF9FT0ksIHZhbHVlKTsKKwlpZiAocmMgIT0gSF9TVUNDRVNTKQorCQlwYW5pYygiYmFkIHJldHVybiBjb2RlIEVPSSAtIHJjID0gJWxkLCB2YWx1ZT0leFxuIiwgcmMsIHZhbHVlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGljcF9odl9zZXRfY3Bwcih1OCB2YWx1ZSkKK3sKKwlsb25nIHJjID0gcGxwYXJfaGNhbGxfbm9yZXRzKEhfQ1BQUiwgdmFsdWUpOworCWlmIChyYyAhPSBIX1NVQ0NFU1MpCisJCXBhbmljKCJiYWQgcmV0dXJuIGNvZGUgY3BwciAtIHJjID0gJWx4XG4iLCByYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpY3BfaHZfc2V0X3FpcnIoaW50IG5fY3B1ICwgdTggdmFsdWUpCit7CisJbG9uZyByYyA9IHBscGFyX2hjYWxsX25vcmV0cyhIX0lQSSwgZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChuX2NwdSksCisJCQkJICAgICB2YWx1ZSk7CisJaWYgKHJjICE9IEhfU1VDQ0VTUykKKwkJcGFuaWMoImJhZCByZXR1cm4gY29kZSBxaXJyIC0gcmMgPSAlbHhcbiIsIHJjKTsKK30KKworc3RhdGljIHZvaWQgaWNwX2h2X2VvaShzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJdW5zaWduZWQgaW50IGh3X2lycSA9ICh1bnNpZ25lZCBpbnQpaXJxZF90b19od2lycShkKTsKKworCWlvc3luYygpOworCWljcF9odl9zZXRfeGlycigoeGljc19wb3BfY3BwcigpIDw8IDI0KSB8IGh3X2lycSk7Cit9CisKK3N0YXRpYyB2b2lkIGljcF9odl90ZWFyZG93bl9jcHUodm9pZCkKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJLyogQ2xlYXIgYW55IHBlbmRpbmcgSVBJICovCisJaWNwX2h2X3NldF9xaXJyKGNwdSwgMHhmZik7Cit9CisKK3N0YXRpYyB2b2lkIGljcF9odl9mbHVzaF9pcGkodm9pZCkKK3sKKwkvKiBXZSB0YWtlIHRoZSBpcGkgaXJxIGJ1dCBhbmQgbmV2ZXIgcmV0dXJuIHNvIHdlCisJICogbmVlZCB0byBFT0kgdGhlIElQSSwgYnV0IHdhbnQgdG8gbGVhdmUgb3VyIHByaW9yaXR5IDAKKwkgKgorCSAqIHNob3VsZCB3ZSBjaGVjayBhbGwgdGhlIG90aGVyIGludGVycnVwdHMgdG9vPworCSAqIHNob3VsZCB3ZSBiZSBmbGFnZ2luZyBpZGxlIGxvb3AgaW5zdGVhZD8KKwkgKiBvciBjcmVhdGluZyBzb21lIHRhc2sgdG8gYmUgc2NoZWR1bGVkPworCSAqLworCisJaWNwX2h2X3NldF94aXJyKCgweDAwIDw8IDI0KSB8IFhJQ1NfSVBJKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBpY3BfaHZfZ2V0X2lycSh2b2lkKQoreworCXVuc2lnbmVkIGludCB4aXJyID0gaWNwX2h2X2dldF94aXJyKHhpY3NfY3Bwcl90b3AoKSk7CisJdW5zaWduZWQgaW50IHZlYyA9IHhpcnIgJiAweDAwZmZmZmZmOworCXVuc2lnbmVkIGludCBpcnE7CisKKwlpZiAodmVjID09IFhJQ1NfSVJRX1NQVVJJT1VTKQorCQlyZXR1cm4gTk9fSVJROworCisJaXJxID0gaXJxX3JhZGl4X3Jldm1hcF9sb29rdXAoeGljc19ob3N0LCB2ZWMpOworCWlmIChsaWtlbHkoaXJxICE9IE5PX0lSUSkpIHsKKwkJeGljc19wdXNoX2NwcHIodmVjKTsKKwkJcmV0dXJuIGlycTsKKwl9CisKKwkvKiBXZSBkb24ndCBoYXZlIGEgbGludXggbWFwcGluZywgc28gaGF2ZSBydGFzIG1hc2sgaXQuICovCisJeGljc19tYXNrX3Vua25vd25fdmVjKHZlYyk7CisKKwkvKiBXZSBtaWdodCBsZWFybiBhYm91dCBpdCBsYXRlciwgc28gRU9JIGl0ICovCisJaWNwX2h2X3NldF94aXJyKHhpcnIpOworCisJcmV0dXJuIE5PX0lSUTsKK30KKworc3RhdGljIHZvaWQgaWNwX2h2X3NldF9jcHVfcHJpb3JpdHkodW5zaWduZWQgY2hhciBjcHByKQoreworCXhpY3Nfc2V0X2Jhc2VfY3BwcihjcHByKTsKKwlpY3BfaHZfc2V0X2NwcHIoY3Bwcik7CisJaW9zeW5jKCk7Cit9CisKKyNpZmRlZiBDT05GSUdfU01QCisKK3N0YXRpYyB2b2lkIGljcF9odl9jYXVzZV9pcGkoaW50IGNwdSwgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCWljcF9odl9zZXRfcWlycihjcHUsIElQSV9QUklPUklUWSk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpY3BfaHZfaXBpX2FjdGlvbihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCWljcF9odl9zZXRfcWlycihjcHUsIDB4ZmYpOworCisJcmV0dXJuIHNtcF9pcGlfZGVtdXgoKTsKK30KKworI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpY3Bfb3BzIGljcF9odl9vcHMgPSB7CisJLmdldF9pcnEJPSBpY3BfaHZfZ2V0X2lycSwKKwkuZW9pCQk9IGljcF9odl9lb2ksCisJLnNldF9wcmlvcml0eQk9IGljcF9odl9zZXRfY3B1X3ByaW9yaXR5LAorCS50ZWFyZG93bl9jcHUJPSBpY3BfaHZfdGVhcmRvd25fY3B1LAorCS5mbHVzaF9pcGkJPSBpY3BfaHZfZmx1c2hfaXBpLAorI2lmZGVmIENPTkZJR19TTVAKKwkuaXBpX2FjdGlvbgk9IGljcF9odl9pcGlfYWN0aW9uLAorCS5jYXVzZV9pcGkJPSBpY3BfaHZfY2F1c2VfaXBpLAorI2VuZGlmCit9OworCitpbnQgaWNwX2h2X2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiaWJtLHBwYy14aWNwIik7CisJaWYgKCFucCkKKwkJbnAgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLAorCQkJCSAgICAiUG93ZXJQQy1FeHRlcm5hbC1JbnRlcnJ1cHQtUHJlc2VudGF0aW9uIik7CisJaWYgKCFucCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpY3Bfb3BzID0gJmljcF9odl9vcHM7CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi94aWNzL2ljcC1uYXRpdmUuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYveGljcy9pY3AtbmF0aXZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYxNWFkNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYveGljcy9pY3AtbmF0aXZlLmMKQEAgLTAsMCArMSwyOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMSBJQk0gQ29ycG9yYXRpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL3hpY3MuaD4KKworc3RydWN0IGljcF9pcGwgeworCXVuaW9uIHsKKwkJdTMyIHdvcmQ7CisJCXU4IGJ5dGVzWzRdOworCX0geGlycl9wb2xsOworCXVuaW9uIHsKKwkJdTMyIHdvcmQ7CisJCXU4IGJ5dGVzWzRdOworCX0geGlycjsKKwl1MzIgZHVtbXk7CisJdW5pb24geworCQl1MzIgd29yZDsKKwkJdTggYnl0ZXNbNF07CisJfSBxaXJyOworCXUzMiBsaW5rX2E7CisJdTMyIGxpbmtfYjsKKwl1MzIgbGlua19jOworfTsKKworc3RhdGljIHN0cnVjdCBpY3BfaXBsIF9faW9tZW0gKmljcF9uYXRpdmVfcmVnc1tOUl9DUFVTXTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaWNwX25hdGl2ZV9nZXRfeGlycih2b2lkKQoreworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlyZXR1cm4gaW5fYmUzMigmaWNwX25hdGl2ZV9yZWdzW2NwdV0tPnhpcnIud29yZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpY3BfbmF0aXZlX3NldF94aXJyKHVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJb3V0X2JlMzIoJmljcF9uYXRpdmVfcmVnc1tjcHVdLT54aXJyLndvcmQsIHZhbHVlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGljcF9uYXRpdmVfc2V0X2NwcHIodTggdmFsdWUpCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCW91dF84KCZpY3BfbmF0aXZlX3JlZ3NbY3B1XS0+eGlyci5ieXRlc1swXSwgdmFsdWUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaWNwX25hdGl2ZV9zZXRfcWlycihpbnQgbl9jcHUsIHU4IHZhbHVlKQoreworCW91dF84KCZpY3BfbmF0aXZlX3JlZ3Nbbl9jcHVdLT5xaXJyLmJ5dGVzWzBdLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGljcF9uYXRpdmVfc2V0X2NwdV9wcmlvcml0eSh1bnNpZ25lZCBjaGFyIGNwcHIpCit7CisJeGljc19zZXRfYmFzZV9jcHByKGNwcHIpOworCWljcF9uYXRpdmVfc2V0X2NwcHIoY3Bwcik7CisJaW9zeW5jKCk7Cit9CisKK3N0YXRpYyB2b2lkIGljcF9uYXRpdmVfZW9pKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwl1bnNpZ25lZCBpbnQgaHdfaXJxID0gKHVuc2lnbmVkIGludClpcnFkX3RvX2h3aXJxKGQpOworCisJaW9zeW5jKCk7CisJaWNwX25hdGl2ZV9zZXRfeGlycigoeGljc19wb3BfY3BwcigpIDw8IDI0KSB8IGh3X2lycSk7Cit9CisKK3N0YXRpYyB2b2lkIGljcF9uYXRpdmVfdGVhcmRvd25fY3B1KHZvaWQpCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCS8qIENsZWFyIGFueSBwZW5kaW5nIElQSSAqLworCWljcF9uYXRpdmVfc2V0X3FpcnIoY3B1LCAweGZmKTsKK30KKworc3RhdGljIHZvaWQgaWNwX25hdGl2ZV9mbHVzaF9pcGkodm9pZCkKK3sKKwkvKiBXZSB0YWtlIHRoZSBpcGkgaXJxIGJ1dCBhbmQgbmV2ZXIgcmV0dXJuIHNvIHdlCisJICogbmVlZCB0byBFT0kgdGhlIElQSSwgYnV0IHdhbnQgdG8gbGVhdmUgb3VyIHByaW9yaXR5IDAKKwkgKgorCSAqIHNob3VsZCB3ZSBjaGVjayBhbGwgdGhlIG90aGVyIGludGVycnVwdHMgdG9vPworCSAqIHNob3VsZCB3ZSBiZSBmbGFnZ2luZyBpZGxlIGxvb3AgaW5zdGVhZD8KKwkgKiBvciBjcmVhdGluZyBzb21lIHRhc2sgdG8gYmUgc2NoZWR1bGVkPworCSAqLworCisJaWNwX25hdGl2ZV9zZXRfeGlycigoMHgwMCA8PCAyNCkgfCBYSUNTX0lQSSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaWNwX25hdGl2ZV9nZXRfaXJxKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHhpcnIgPSBpY3BfbmF0aXZlX2dldF94aXJyKCk7CisJdW5zaWduZWQgaW50IHZlYyA9IHhpcnIgJiAweDAwZmZmZmZmOworCXVuc2lnbmVkIGludCBpcnE7CisKKwlpZiAodmVjID09IFhJQ1NfSVJRX1NQVVJJT1VTKQorCQlyZXR1cm4gTk9fSVJROworCisJaXJxID0gaXJxX3JhZGl4X3Jldm1hcF9sb29rdXAoeGljc19ob3N0LCB2ZWMpOworCWlmIChsaWtlbHkoaXJxICE9IE5PX0lSUSkpIHsKKwkJeGljc19wdXNoX2NwcHIodmVjKTsKKwkJcmV0dXJuIGlycTsKKwl9CisKKwkvKiBXZSBkb24ndCBoYXZlIGEgbGludXggbWFwcGluZywgc28gaGF2ZSBydGFzIG1hc2sgaXQuICovCisJeGljc19tYXNrX3Vua25vd25fdmVjKHZlYyk7CisKKwkvKiBXZSBtaWdodCBsZWFybiBhYm91dCBpdCBsYXRlciwgc28gRU9JIGl0ICovCisJaWNwX25hdGl2ZV9zZXRfeGlycih4aXJyKTsKKworCXJldHVybiBOT19JUlE7Cit9CisKKyNpZmRlZiBDT05GSUdfU01QCisKK3N0YXRpYyB2b2lkIGljcF9uYXRpdmVfY2F1c2VfaXBpKGludCBjcHUsIHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlpY3BfbmF0aXZlX3NldF9xaXJyKGNwdSwgSVBJX1BSSU9SSVRZKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGljcF9uYXRpdmVfaXBpX2FjdGlvbihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCWljcF9uYXRpdmVfc2V0X3FpcnIoY3B1LCAweGZmKTsKKworCXJldHVybiBzbXBfaXBpX2RlbXV4KCk7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKK3N0YXRpYyBpbnQgX19pbml0IGljcF9uYXRpdmVfbWFwX29uZV9jcHUoaW50IGh3X2lkLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJCSB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJY2hhciAqcm5hbWU7CisJaW50IGksIGNwdSA9IC0xOworCisJLyogVGhpcyBtYXkgbG9vayBncm9zcyBidXQgaXQncyBnb29kIGVub3VnaCBmb3Igbm93LCB3ZSBkb24ndCBxdWl0ZQorCSAqIGhhdmUgYSBoYXJkIC0+IGxpbnV4IHByb2Nlc3NvciBpZCBtYXRjaGluZy4KKwkgKi8KKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgeworCQlpZiAoIWNwdV9wcmVzZW50KGkpKQorCQkJY29udGludWU7CisJCWlmIChod19pZCA9PSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGkpKSB7CisJCQljcHUgPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBGYWlsLCBza2lwIHRoYXQgQ1BVLiBEb24ndCBwcmludCwgaXQncyBub3JtYWwsIHNvbWUgWElDUyBjb21lIHVwCisJICogd2l0aCB3YXkgbW9yZSBlbnRyaWVzIGluIHRoZXJlIHRoYW4geW91IGhhdmUgQ1BVcworCSAqLworCWlmIChjcHUgPT0gLTEpCisJCXJldHVybiAwOworCisJcm5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgIkNQVSAlZCBbMHgleF0gSW50ZXJydXB0IFByZXNlbnRhdGlvbiIsCisJCQkgIGNwdSwgaHdfaWQpOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oYWRkciwgc2l6ZSwgcm5hbWUpKSB7CisJCXByX3dhcm5pbmcoImljcF9uYXRpdmU6IENvdWxkIG5vdCByZXNlcnZlIElDUCBNTUlPIgorCQkJICAgIiBmb3IgQ1BVICVkLCBpbnRlcnJ1cHQgc2VydmVyICMweCV4XG4iLAorCQkJICAgY3B1LCBod19pZCk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWNwX25hdGl2ZV9yZWdzW2NwdV0gPSBpb3JlbWFwKGFkZHIsIHNpemUpOworCWlmICghaWNwX25hdGl2ZV9yZWdzW2NwdV0pIHsKKwkJcHJfd2FybmluZygiaWNwX25hdGl2ZTogRmFpbGVkIGlvcmVtYXAgZm9yIENQVSAlZCwgIgorCQkJICAgImludGVycnVwdCBzZXJ2ZXIgIzB4JXgsIGFkZHIgJSNseFxuIiwKKwkJCSAgIGNwdSwgaHdfaWQsIGFkZHIpOworCQlyZWxlYXNlX21lbV9yZWdpb24oYWRkciwgc2l6ZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgaWNwX25hdGl2ZV9pbml0X29uZV9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkJCSAgIHVuc2lnbmVkIGludCAqaW5keCkKK3sKKwl1bnNpZ25lZCBpbnQgaWxlbjsKKwljb25zdCB1MzIgKmlyZWc7CisJaW50IGk7CisJaW50IHJlZ190dXBsZV9zaXplOworCWludCBudW1fc2VydmVycyA9IDA7CisKKwkvKiBUaGlzIGNvZGUgZG9lcyB0aGUgdGhlb3JpY2FsbHkgYnJva2VuIGFzc3VtcHRpb24gdGhhdCB0aGUgaW50ZXJydXB0CisJICogc2VydmVyIG51bWJlcnMgYXJlIHRoZSBzYW1lIGFzIHRoZSBoYXJkIENQVSBudW1iZXJzLgorCSAqIFRoaXMgaGFwcGVucyB0byBiZSB0aGUgY2FzZSBzbyBmYXIgYnV0IHdlIGFyZSBwbGF5aW5nIHdpdGggZmlyZS4uLgorCSAqIHNob3VsZCBiZSBmaXhlZCBvbmUgb2YgdGhlc2UgZGF5cy4gLUJlbkguCisJICovCisJaXJlZyA9IG9mX2dldF9wcm9wZXJ0eShucCwgImlibSxpbnRlcnJ1cHQtc2VydmVyLXJhbmdlcyIsICZpbGVuKTsKKworCS8qIERvIHRoYXQgZXZlciBoYXBwZW4gPyB3ZSdsbCBrbm93IHNvb24gZW5vdWdoLi4uIGJ1dCBldmVuIGdvb2Qnb2xkCisJICogZjgwIGRvZXMgaGF2ZSB0aGF0IHByb3BlcnR5IC4uCisJICovCisJV0FSTl9PTigoaXJlZyA9PSBOVUxMKSB8fCAoaWxlbiAhPSAyKnNpemVvZih1MzIpKSk7CisKKwlpZiAoaXJlZykgeworCQkqaW5keCA9IG9mX3JlYWRfbnVtYmVyKGlyZWcsIDEpOworCQlpZiAoaWxlbiA+PSAyKnNpemVvZih1MzIpKQorCQkJbnVtX3NlcnZlcnMgPSBvZl9yZWFkX251bWJlcihpcmVnICsgMSwgMSk7CisJfQorCisJaXJlZyA9IG9mX2dldF9wcm9wZXJ0eShucCwgInJlZyIsICZpbGVuKTsKKwlpZiAoIWlyZWcpIHsKKwkJcHJfZXJyKCJpY3BfbmF0aXZlOiBDYW4ndCBmaW5kIGludGVycnVwdCByZWcgcHJvcGVydHkiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJlZ190dXBsZV9zaXplID0gKG9mX25fYWRkcl9jZWxscyhucCkgKyBvZl9uX3NpemVfY2VsbHMobnApKSAqIDQ7CisJaWYgKCgoaWxlbiAlIHJlZ190dXBsZV9zaXplKSAhPSAwKQorCSAgICB8fCAobnVtX3NlcnZlcnMgJiYgKG51bV9zZXJ2ZXJzICE9IChpbGVuIC8gcmVnX3R1cGxlX3NpemUpKSkpIHsKKwkJcHJfZXJyKCJpY3BfbmF0aXZlOiBJQ1AgcmVnIGxlbiAoJWQpICE9IG51bSBzZXJ2ZXJzICglZCkiLAorCQkgICAgICAgaWxlbiAvIHJlZ190dXBsZV9zaXplLCBudW1fc2VydmVycyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgKGlsZW4gLyByZWdfdHVwbGVfc2l6ZSk7IGkrKykgeworCQlzdHJ1Y3QgcmVzb3VyY2UgcjsKKwkJaW50IGVycjsKKworCQllcnIgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCBpLCAmcik7CisJCWlmIChlcnIpIHsKKwkJCXByX2VycigiaWNwX25hdGl2ZTogQ291bGQgbm90IHRyYW5zbGF0ZSBJQ1AgTU1JTyIKKwkJCSAgICAgICAiIGZvciBpbnRlcnJ1cHQgc2VydmVyIDB4JXggKCVkKVxuIiwgKmluZHgsIGVycik7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAoaWNwX25hdGl2ZV9tYXBfb25lX2NwdSgqaW5keCwgci5zdGFydCwgci5lbmQgLSByLnN0YXJ0KSkKKwkJCXJldHVybiAtMTsKKworCQkoKmluZHgpKys7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGljcF9vcHMgaWNwX25hdGl2ZV9vcHMgPSB7CisJLmdldF9pcnEJPSBpY3BfbmF0aXZlX2dldF9pcnEsCisJLmVvaQkJPSBpY3BfbmF0aXZlX2VvaSwKKwkuc2V0X3ByaW9yaXR5CT0gaWNwX25hdGl2ZV9zZXRfY3B1X3ByaW9yaXR5LAorCS50ZWFyZG93bl9jcHUJPSBpY3BfbmF0aXZlX3RlYXJkb3duX2NwdSwKKwkuZmx1c2hfaXBpCT0gaWNwX25hdGl2ZV9mbHVzaF9pcGksCisjaWZkZWYgQ09ORklHX1NNUAorCS5pcGlfYWN0aW9uCT0gaWNwX25hdGl2ZV9pcGlfYWN0aW9uLAorCS5jYXVzZV9pcGkJPSBpY3BfbmF0aXZlX2NhdXNlX2lwaSwKKyNlbmRpZgorfTsKKworaW50IGljcF9uYXRpdmVfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJdTMyIGluZHggPSAwOworCWludCBmb3VuZCA9IDA7CisKKwlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsIE5VTEwsICJpYm0scHBjLXhpY3AiKQorCQlpZiAoaWNwX25hdGl2ZV9pbml0X29uZV9ub2RlKG5wLCAmaW5keCkgPT0gMCkKKwkJCWZvdW5kID0gMTsKKwlpZiAoIWZvdW5kKSB7CisJCWZvcl9lYWNoX25vZGVfYnlfdHlwZShucCwKKwkJCSJQb3dlclBDLUV4dGVybmFsLUludGVycnVwdC1QcmVzZW50YXRpb24iKSB7CisJCQkJaWYgKGljcF9uYXRpdmVfaW5pdF9vbmVfbm9kZShucCwgJmluZHgpID09IDApCisJCQkJCWZvdW5kID0gMTsKKwkJfQorCX0KKworCWlmIChmb3VuZCA9PSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWljcF9vcHMgPSAmaWNwX25hdGl2ZV9vcHM7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYveGljcy9pY3MtcnRhcy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi94aWNzL2ljcy1ydGFzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc4MmY4NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYveGljcy9pY3MtcnRhcy5jCkBAIC0wLDAgKzEsMjQwIEBACisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L21zaS5oPgorCisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL3hpY3MuaD4KKyNpbmNsdWRlIDxhc20vcnRhcy5oPgorCisvKiBSVEFTIHNlcnZpY2UgdG9rZW5zICovCitzdGF0aWMgaW50IGlibV9nZXRfeGl2ZTsKK3N0YXRpYyBpbnQgaWJtX3NldF94aXZlOworc3RhdGljIGludCBpYm1faW50X29uOworc3RhdGljIGludCBpYm1faW50X29mZjsKKworc3RhdGljIGludCBpY3NfcnRhc19tYXAoc3RydWN0IGljcyAqaWNzLCB1bnNpZ25lZCBpbnQgdmlycSk7CitzdGF0aWMgdm9pZCBpY3NfcnRhc19tYXNrX3Vua25vd24oc3RydWN0IGljcyAqaWNzLCB1bnNpZ25lZCBsb25nIHZlYyk7CitzdGF0aWMgbG9uZyBpY3NfcnRhc19nZXRfc2VydmVyKHN0cnVjdCBpY3MgKmljcywgdW5zaWduZWQgbG9uZyB2ZWMpOworc3RhdGljIGludCBpY3NfcnRhc19ob3N0X21hdGNoKHN0cnVjdCBpY3MgKmljcywgc3RydWN0IGRldmljZV9ub2RlICpub2RlKTsKKworLyogT25seSBvbmUgZ2xvYmFsICYgc3RhdGUgc3RydWN0IGljcyAqLworc3RhdGljIHN0cnVjdCBpY3MgaWNzX3J0YXMgPSB7CisJLm1hcAkJPSBpY3NfcnRhc19tYXAsCisJLm1hc2tfdW5rbm93bgk9IGljc19ydGFzX21hc2tfdW5rbm93biwKKwkuZ2V0X3NlcnZlcgk9IGljc19ydGFzX2dldF9zZXJ2ZXIsCisJLmhvc3RfbWF0Y2gJPSBpY3NfcnRhc19ob3N0X21hdGNoLAorfTsKKworc3RhdGljIHZvaWQgaWNzX3J0YXNfdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJdW5zaWduZWQgaW50IGh3X2lycSA9ICh1bnNpZ25lZCBpbnQpaXJxZF90b19od2lycShkKTsKKwlpbnQgY2FsbF9zdGF0dXM7CisJaW50IHNlcnZlcjsKKworCXByX2RldmVsKCJ4aWNzOiB1bm1hc2sgdmlycSAlZCBbaHcgMHgleF1cbiIsIGQtPmlycSwgaHdfaXJxKTsKKworCWlmIChod19pcnEgPT0gWElDU19JUEkgfHwgaHdfaXJxID09IFhJQ1NfSVJRX1NQVVJJT1VTKQorCQlyZXR1cm47CisKKwlzZXJ2ZXIgPSB4aWNzX2dldF9pcnFfc2VydmVyKGQtPmlycSwgZC0+YWZmaW5pdHksIDApOworCisJY2FsbF9zdGF0dXMgPSBydGFzX2NhbGwoaWJtX3NldF94aXZlLCAzLCAxLCBOVUxMLCBod19pcnEsIHNlcnZlciwKKwkJCQlERUZBVUxUX1BSSU9SSVRZKTsKKwlpZiAoY2FsbF9zdGF0dXMgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSIlczogaWJtX3NldF94aXZlIGlycSAldSBzZXJ2ZXIgJXggcmV0dXJuZWQgJWRcbiIsCisJCQlfX2Z1bmNfXywgaHdfaXJxLCBzZXJ2ZXIsIGNhbGxfc3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCS8qIE5vdyB1bm1hc2sgdGhlIGludGVycnVwdCAob2Z0ZW4gYSBuby1vcCkgKi8KKwljYWxsX3N0YXR1cyA9IHJ0YXNfY2FsbChpYm1faW50X29uLCAxLCAxLCBOVUxMLCBod19pcnEpOworCWlmIChjYWxsX3N0YXR1cyAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlibV9pbnRfb24gaXJxPSV1IHJldHVybmVkICVkXG4iLAorCQkJX19mdW5jX18sIGh3X2lycSwgY2FsbF9zdGF0dXMpOworCQlyZXR1cm47CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGljc19ydGFzX3N0YXJ0dXAoc3RydWN0IGlycV9kYXRhICpkKQoreworI2lmZGVmIENPTkZJR19QQ0lfTVNJCisJLyoKKwkgKiBUaGUgZ2VuZXJpYyBNU0kgY29kZSByZXR1cm5zIHdpdGggdGhlIGludGVycnVwdCBkaXNhYmxlZCBvbiB0aGUKKwkgKiBjYXJkLCB1c2luZyB0aGUgTVNJIG1hc2sgYml0cy4gRmlybXdhcmUgZG9lc24ndCBhcHBlYXIgdG8gdW5tYXNrCisJICogYXQgdGhhdCBsZXZlbCwgc28gd2UgZG8gaXQgaGVyZSBieSBoYW5kLgorCSAqLworCWlmIChkLT5tc2lfZGVzYykKKwkJdW5tYXNrX21zaV9pcnEoZCk7CisjZW5kaWYKKwkvKiB1bm1hc2sgaXQgKi8KKwlpY3NfcnRhc191bm1hc2tfaXJxKGQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpY3NfcnRhc19tYXNrX3JlYWxfaXJxKHVuc2lnbmVkIGludCBod19pcnEpCit7CisJaW50IGNhbGxfc3RhdHVzOworCisJaWYgKGh3X2lycSA9PSBYSUNTX0lQSSkKKwkJcmV0dXJuOworCisJY2FsbF9zdGF0dXMgPSBydGFzX2NhbGwoaWJtX2ludF9vZmYsIDEsIDEsIE5VTEwsIGh3X2lycSk7CisJaWYgKGNhbGxfc3RhdHVzICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaWJtX2ludF9vZmYgaXJxPSV1IHJldHVybmVkICVkXG4iLAorCQkJX19mdW5jX18sIGh3X2lycSwgY2FsbF9zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJLyogSGF2ZSB0byBzZXQgWElWRSB0byAweGZmIHRvIGJlIGFibGUgdG8gcmVtb3ZlIGEgc2xvdCAqLworCWNhbGxfc3RhdHVzID0gcnRhc19jYWxsKGlibV9zZXRfeGl2ZSwgMywgMSwgTlVMTCwgaHdfaXJxLAorCQkJCXhpY3NfZGVmYXVsdF9zZXJ2ZXIsIDB4ZmYpOworCWlmIChjYWxsX3N0YXR1cyAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlibV9zZXRfeGl2ZSgweGZmKSBpcnE9JXUgcmV0dXJuZWQgJWRcbiIsCisJCQlfX2Z1bmNfXywgaHdfaXJxLCBjYWxsX3N0YXR1cyk7CisJCXJldHVybjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGljc19ydGFzX21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwl1bnNpZ25lZCBpbnQgaHdfaXJxID0gKHVuc2lnbmVkIGludClpcnFkX3RvX2h3aXJxKGQpOworCisJcHJfZGV2ZWwoInhpY3M6IG1hc2sgdmlycSAlZCBbaHcgMHgleF1cbiIsIGQtPmlycSwgaHdfaXJxKTsKKworCWlmIChod19pcnEgPT0gWElDU19JUEkgfHwgaHdfaXJxID09IFhJQ1NfSVJRX1NQVVJJT1VTKQorCQlyZXR1cm47CisJaWNzX3J0YXNfbWFza19yZWFsX2lycShod19pcnEpOworfQorCitzdGF0aWMgaW50IGljc19ydGFzX3NldF9hZmZpbml0eShzdHJ1Y3QgaXJxX2RhdGEgKmQsCisJCQkJIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLAorCQkJCSBib29sIGZvcmNlKQoreworCXVuc2lnbmVkIGludCBod19pcnEgPSAodW5zaWduZWQgaW50KWlycWRfdG9faHdpcnEoZCk7CisJaW50IHN0YXR1czsKKwlpbnQgeGljc19zdGF0dXNbMl07CisJaW50IGlycV9zZXJ2ZXI7CisKKwlpZiAoaHdfaXJxID09IFhJQ1NfSVBJIHx8IGh3X2lycSA9PSBYSUNTX0lSUV9TUFVSSU9VUykKKwkJcmV0dXJuIC0xOworCisJc3RhdHVzID0gcnRhc19jYWxsKGlibV9nZXRfeGl2ZSwgMSwgMywgeGljc19zdGF0dXMsIGh3X2lycSk7CisKKwlpZiAoc3RhdHVzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlibSxnZXQteGl2ZSBpcnE9JXUgcmV0dXJucyAlZFxuIiwKKwkJCV9fZnVuY19fLCBod19pcnEsIHN0YXR1cyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpcnFfc2VydmVyID0geGljc19nZXRfaXJxX3NlcnZlcihkLT5pcnEsIGNwdW1hc2ssIDEpOworCWlmIChpcnFfc2VydmVyID09IC0xKSB7CisJCWNoYXIgY3B1bGlzdFsxMjhdOworCQljcHVtYXNrX3NjbnByaW50ZihjcHVsaXN0LCBzaXplb2YoY3B1bGlzdCksIGNwdW1hc2spOworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiJXM6IE5vIG9ubGluZSBjcHVzIGluIHRoZSBtYXNrICVzIGZvciBpcnEgJWRcbiIsCisJCQlfX2Z1bmNfXywgY3B1bGlzdCwgZC0+aXJxKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXN0YXR1cyA9IHJ0YXNfY2FsbChpYm1fc2V0X3hpdmUsIDMsIDEsIE5VTEwsCisJCQkgICBod19pcnEsIGlycV9zZXJ2ZXIsIHhpY3Nfc3RhdHVzWzFdKTsKKworCWlmIChzdGF0dXMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaWJtLHNldC14aXZlIGlycT0ldSByZXR1cm5zICVkXG4iLAorCQkJX19mdW5jX18sIGh3X2lycSwgc3RhdHVzKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiBJUlFfU0VUX01BU0tfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaWNzX3J0YXNfaXJxX2NoaXAgPSB7CisJLm5hbWUgPSAiWElDUyIsCisJLmlycV9zdGFydHVwID0gaWNzX3J0YXNfc3RhcnR1cCwKKwkuaXJxX21hc2sgPSBpY3NfcnRhc19tYXNrX2lycSwKKwkuaXJxX3VubWFzayA9IGljc19ydGFzX3VubWFza19pcnEsCisJLmlycV9lb2kgPSBOVUxMLCAvKiBQYXRjaGVkIGF0IGluaXQgdGltZSAqLworCS5pcnFfc2V0X2FmZmluaXR5ID0gaWNzX3J0YXNfc2V0X2FmZmluaXR5Cit9OworCitzdGF0aWMgaW50IGljc19ydGFzX21hcChzdHJ1Y3QgaWNzICppY3MsIHVuc2lnbmVkIGludCB2aXJxKQoreworCXVuc2lnbmVkIGludCBod19pcnEgPSAodW5zaWduZWQgaW50KXZpcnFfdG9faHcodmlycSk7CisJaW50IHN0YXR1c1syXTsKKwlpbnQgcmM7CisKKwlpZiAoV0FSTl9PTihod19pcnEgPT0gWElDU19JUEkgfHwgaHdfaXJxID09IFhJQ1NfSVJRX1NQVVJJT1VTKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBDaGVjayBpZiBSVEFTIGtub3dzIGFib3V0IHRoaXMgaW50ZXJydXB0ICovCisJcmMgPSBydGFzX2NhbGwoaWJtX2dldF94aXZlLCAxLCAzLCBzdGF0dXMsIGh3X2lycSk7CisJaWYgKHJjKQorCQlyZXR1cm4gLUVOWElPOworCisJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKHZpcnEsICZpY3NfcnRhc19pcnFfY2hpcCwgaGFuZGxlX2Zhc3Rlb2lfaXJxKTsKKwlpcnFfc2V0X2NoaXBfZGF0YSh2aXJxLCAmaWNzX3J0YXMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGljc19ydGFzX21hc2tfdW5rbm93bihzdHJ1Y3QgaWNzICppY3MsIHVuc2lnbmVkIGxvbmcgdmVjKQoreworCWljc19ydGFzX21hc2tfcmVhbF9pcnEodmVjKTsKK30KKworc3RhdGljIGxvbmcgaWNzX3J0YXNfZ2V0X3NlcnZlcihzdHJ1Y3QgaWNzICppY3MsIHVuc2lnbmVkIGxvbmcgdmVjKQoreworCWludCByYywgc3RhdHVzWzJdOworCisJcmMgPSBydGFzX2NhbGwoaWJtX2dldF94aXZlLCAxLCAzLCBzdGF0dXMsIHZlYyk7CisJaWYgKHJjKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIHN0YXR1c1swXTsKK30KKworc3RhdGljIGludCBpY3NfcnRhc19ob3N0X21hdGNoKHN0cnVjdCBpY3MgKmljcywgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQoreworCS8qIElCTSBtYWNoaW5lcyBoYXZlIGludGVycnVwdCBwYXJlbnRzIG9mIHZhcmlvdXMgZnVua3kgdHlwZXMgZm9yIHRoaW5ncworCSAqIGxpa2UgdmRldmljZXMsIGV2ZW50cywgZXRjLi4uIFRoZSB0cmljayB3ZSB1c2UgaGVyZSBpcyB0byBtYXRjaAorCSAqIGV2ZXJ5dGhpbmcgaGVyZSBleGNlcHQgdGhlIGxlZ2FjeSA4MjU5IHdoaWNoIGlzIGNvbXBhdGlibGUgImNocnAsaWljIgorCSAqLworCXJldHVybiAhb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobm9kZSwgImNocnAsaWljIik7Cit9CisKK2ludCBpY3NfcnRhc19pbml0KHZvaWQpCit7CisJaWJtX2dldF94aXZlID0gcnRhc190b2tlbigiaWJtLGdldC14aXZlIik7CisJaWJtX3NldF94aXZlID0gcnRhc190b2tlbigiaWJtLHNldC14aXZlIik7CisJaWJtX2ludF9vbiAgPSBydGFzX3Rva2VuKCJpYm0saW50LW9uIik7CisJaWJtX2ludF9vZmYgPSBydGFzX3Rva2VuKCJpYm0saW50LW9mZiIpOworCisJLyogV2UgZW5hYmxlIHRoZSBSVEFTICJJQ1MiIGlmIFJUQVMgaXMgcHJlc2VudCB3aXRoIHRoZQorCSAqIGFwcHJvcHJpYXRlIHRva2VucworCSAqLworCWlmIChpYm1fZ2V0X3hpdmUgPT0gUlRBU19VTktOT1dOX1NFUlZJQ0UgfHwKKwkgICAgaWJtX3NldF94aXZlID09IFJUQVNfVU5LTk9XTl9TRVJWSUNFKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIFdlIG5lZWQgdG8gcGF0Y2ggb3VyIGlycSBjaGlwJ3MgRU9JIHRvIHBvaW50IHRvIHRoZQorCSAqIHJpZ2h0IElDUAorCSAqLworCWljc19ydGFzX2lycV9jaGlwLmlycV9lb2kgPSBpY3Bfb3BzLT5lb2k7CisKKwkvKiBSZWdpc3RlciBvdXJzZWx2ZXMgKi8KKwl4aWNzX3JlZ2lzdGVyX2ljcygmaWNzX3J0YXMpOworCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYveGljcy94aWNzLWNvbW1vbi5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi94aWNzL3hpY3MtY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ1YzVhMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYveGljcy94aWNzLWNvbW1vbi5jCkBAIC0wLDAgKzEsNDQzIEBACisvKgorICogQ29weXJpZ2h0IDIwMTEgSUJNIENvcnBvcmF0aW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL3J0YXMuaD4KKyNpbmNsdWRlIDxhc20veGljcy5oPgorI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgorCisvKiBHbG9iYWxzIGNvbW1vbiB0byBhbGwgSUNQL0lDUyBpbXBsZW1lbnRhdGlvbnMgKi8KK2NvbnN0IHN0cnVjdCBpY3Bfb3BzCSppY3Bfb3BzOworCit1bnNpZ25lZCBpbnQgeGljc19kZWZhdWx0X3NlcnZlcgkJPSAweGZmOwordW5zaWduZWQgaW50IHhpY3NfZGVmYXVsdF9kaXN0cmliX3NlcnZlcgk9IDA7Cit1bnNpZ25lZCBpbnQgeGljc19pbnRlcnJ1cHRfc2VydmVyX3NpemUJCT0gODsKKworREVGSU5FX1BFUl9DUFUoc3RydWN0IHhpY3NfY3BwciwgeGljc19jcHByKTsKKworc3RydWN0IGlycV9ob3N0ICp4aWNzX2hvc3Q7CisKK3N0YXRpYyBMSVNUX0hFQUQoaWNzX2xpc3QpOworCit2b2lkIHhpY3NfdXBkYXRlX2lycV9zZXJ2ZXJzKHZvaWQpCit7CisJaW50IGksIGo7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwl1MzIgaWxlbjsKKwljb25zdCB1MzIgKmlyZWc7CisJdTMyIGhjcHVpZDsKKworCS8qIEZpbmQgdGhlIHNlcnZlciBudW1iZXJzIGZvciB0aGUgYm9vdCBjcHUuICovCisJbnAgPSBvZl9nZXRfY3B1X25vZGUoYm9vdF9jcHVpZCwgTlVMTCk7CisJQlVHX09OKCFucCk7CisKKwloY3B1aWQgPSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGJvb3RfY3B1aWQpOworCXhpY3NfZGVmYXVsdF9zZXJ2ZXIgPSB4aWNzX2RlZmF1bHRfZGlzdHJpYl9zZXJ2ZXIgPSBoY3B1aWQ7CisKKwlwcl9kZXZlbCgieGljczogeGljc19kZWZhdWx0X3NlcnZlciA9IDB4JXhcbiIsIHhpY3NfZGVmYXVsdF9zZXJ2ZXIpOworCisJaXJlZyA9IG9mX2dldF9wcm9wZXJ0eShucCwgImlibSxwcGMtaW50ZXJydXB0LWdzZXJ2ZXIjcyIsICZpbGVuKTsKKwlpZiAoIWlyZWcpIHsKKwkJb2Zfbm9kZV9wdXQobnApOworCQlyZXR1cm47CisJfQorCisJaSA9IGlsZW4gLyBzaXplb2YoaW50KTsKKworCS8qIEdsb2JhbCBpbnRlcnJ1cHQgZGlzdHJpYnV0aW9uIHNlcnZlciBpcyBzcGVjaWZpZWQgaW4gdGhlIGxhc3QKKwkgKiBlbnRyeSBvZiAiaWJtLHBwYy1pbnRlcnJ1cHQtZ3NlcnZlciNzIiBwcm9wZXJ0eS4gR2V0IHRoZSBsYXN0CisJICogZW50cnkgZm9tIHRoaXMgcHJvcGVydHkgZm9yIGN1cnJlbnQgYm9vdCBjcHUgaWQgYW5kIHVzZSBpdCBhcworCSAqIGRlZmF1bHQgZGlzdHJpYnV0aW9uIHNlcnZlcgorCSAqLworCWZvciAoaiA9IDA7IGogPCBpOyBqICs9IDIpIHsKKwkJaWYgKGlyZWdbal0gPT0gaGNwdWlkKSB7CisJCQl4aWNzX2RlZmF1bHRfZGlzdHJpYl9zZXJ2ZXIgPSBpcmVnW2orMV07CisJCQlicmVhazsKKwkJfQorCX0KKwlwcl9kZXZlbCgieGljczogeGljc19kZWZhdWx0X2Rpc3RyaWJfc2VydmVyID0gMHgleFxuIiwKKwkJIHhpY3NfZGVmYXVsdF9kaXN0cmliX3NlcnZlcik7CisJb2Zfbm9kZV9wdXQobnApOworfQorCisvKiBHSVEgc3R1ZmYsIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRlZCBvbiBSVEFTIHNldHVwcywgd2lsbCBoYXZlCisgKiB0byBiZSBzb3J0ZWQgcHJvcGVybHkgZm9yIGJhcmUgbWV0YWwKKyAqLwordm9pZCB4aWNzX3NldF9jcHVfZ2lxKHVuc2lnbmVkIGludCBnc2VydmVyLCB1bnNpZ25lZCBpbnQgam9pbikKK3sKKyNpZmRlZiBDT05GSUdfUFBDX1JUQVMKKwlpbnQgaW5kZXg7CisJaW50IHN0YXR1czsKKworCWlmICghcnRhc19pbmRpY2F0b3JfcHJlc2VudChHTE9CQUxfSU5URVJSVVBUX1FVRVVFLCBOVUxMKSkKKwkJcmV0dXJuOworCisJaW5kZXggPSAoMVVMIDw8IHhpY3NfaW50ZXJydXB0X3NlcnZlcl9zaXplKSAtIDEgLSBnc2VydmVyOworCisJc3RhdHVzID0gcnRhc19zZXRfaW5kaWNhdG9yX2Zhc3QoR0xPQkFMX0lOVEVSUlVQVF9RVUVVRSwgaW5kZXgsIGpvaW4pOworCisJV0FSTihzdGF0dXMgPCAwLCAic2V0LWluZGljYXRvciglZCwgJWQsICV1KSByZXR1cm5lZCAlZFxuIiwKKwkgICAgIEdMT0JBTF9JTlRFUlJVUFRfUVVFVUUsIGluZGV4LCBqb2luLCBzdGF0dXMpOworI2VuZGlmCit9CisKK3ZvaWQgeGljc19zZXR1cF9jcHUodm9pZCkKK3sKKwlpY3Bfb3BzLT5zZXRfcHJpb3JpdHkoTE9XRVNUX1BSSU9SSVRZKTsKKworCXhpY3Nfc2V0X2NwdV9naXEoeGljc19kZWZhdWx0X2Rpc3RyaWJfc2VydmVyLCAxKTsKK30KKwordm9pZCB4aWNzX21hc2tfdW5rbm93bl92ZWModW5zaWduZWQgaW50IHZlYykKK3sKKwlzdHJ1Y3QgaWNzICppY3M7CisKKwlwcl9lcnIoIkludGVycnVwdCAweCV4IChyZWFsKSBpcyBpbnZhbGlkLCBkaXNhYmxpbmcgaXQuXG4iLCB2ZWMpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpY3MsICZpY3NfbGlzdCwgbGluaykKKwkJaWNzLT5tYXNrX3Vua25vd24oaWNzLCB2ZWMpOworfQorCisKKyNpZmRlZiBDT05GSUdfU01QCisKK3N0YXRpYyB2b2lkIHhpY3NfcmVxdWVzdF9pcGkodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaXBpOworCisJaXBpID0gaXJxX2NyZWF0ZV9tYXBwaW5nKHhpY3NfaG9zdCwgWElDU19JUEkpOworCUJVR19PTihpcGkgPT0gTk9fSVJRKTsKKworCS8qCisJICogSVBJcyBhcmUgbWFya2VkIElSUUZfRElTQUJMRUQgYXMgdGhleSBtdXN0IHJ1biB3aXRoIGlycXMKKwkgKiBkaXNhYmxlZCwgYW5kIFBFUkNQVS4gIFRoZSBoYW5kbGVyIHdhcyBzZXQgaW4gbWFwLgorCSAqLworCUJVR19PTihyZXF1ZXN0X2lycShpcGksIGljcF9vcHMtPmlwaV9hY3Rpb24sCisJCQkgICBJUlFGX0RJU0FCTEVEfElSUUZfUEVSQ1BVLCAiSVBJIiwgTlVMTCkpOworfQorCitpbnQgX19pbml0IHhpY3Nfc21wX3Byb2JlKHZvaWQpCit7CisJLyogU2V0dXAgY2F1c2VfaXBpIGNhbGxiYWNrICBiYXNlZCBvbiB3aGljaCBJQ1AgaXMgdXNlZCAqLworCXNtcF9vcHMtPmNhdXNlX2lwaSA9IGljcF9vcHMtPmNhdXNlX2lwaTsKKworCS8qIFJlZ2lzdGVyIGFsbCB0aGUgSVBJcyAqLworCXhpY3NfcmVxdWVzdF9pcGkoKTsKKworCXJldHVybiBjcHVtYXNrX3dlaWdodChjcHVfcG9zc2libGVfbWFzayk7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKK3ZvaWQgeGljc190ZWFyZG93bl9jcHUodm9pZCkKK3sKKwlzdHJ1Y3QgeGljc19jcHByICpvc19jcHByID0gJl9fZ2V0X2NwdV92YXIoeGljc19jcHByKTsKKworCS8qCisJICogd2UgaGF2ZSB0byByZXNldCB0aGUgY3BwciBpbmRleCB0byAwIGJlY2F1c2Ugd2UncmUKKwkgKiBub3QgZ29pbmcgdG8gcmV0dXJuIGZyb20gdGhlIElQSQorCSAqLworCW9zX2NwcHItPmluZGV4ID0gMDsKKwlpY3Bfb3BzLT5zZXRfcHJpb3JpdHkoMCk7CisJaWNwX29wcy0+dGVhcmRvd25fY3B1KCk7Cit9CisKK3ZvaWQgeGljc19rZXhlY190ZWFyZG93bl9jcHUoaW50IHNlY29uZGFyeSkKK3sKKwl4aWNzX3RlYXJkb3duX2NwdSgpOworCisJaWNwX29wcy0+Zmx1c2hfaXBpKCk7CisKKwkvKgorCSAqIFNvbWUgbWFjaGluZXMgbmVlZCB0byBoYXZlIGF0IGxlYXN0IG9uZSBjcHUgaW4gdGhlIEdJUSwKKwkgKiBzbyBsZWF2ZSB0aGUgbWFzdGVyIGNwdSBpbiB0aGUgZ3JvdXAuCisJICovCisJaWYgKHNlY29uZGFyeSkKKwkJeGljc19zZXRfY3B1X2dpcSh4aWNzX2RlZmF1bHRfZGlzdHJpYl9zZXJ2ZXIsIDApOworfQorCisKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKworLyogSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuICovCit2b2lkIHhpY3NfbWlncmF0ZV9pcnFzX2F3YXkodm9pZCkKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpLCBod19jcHUgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKKwl1bnNpZ25lZCBpbnQgaXJxLCB2aXJxOworCisJLyogSWYgd2UgdXNlZCB0byBiZSB0aGUgZGVmYXVsdCBzZXJ2ZXIsIG1vdmUgdG8gdGhlIG5ldyAiYm9vdF9jcHVpZCIgKi8KKwlpZiAoaHdfY3B1ID09IHhpY3NfZGVmYXVsdF9zZXJ2ZXIpCisJCXhpY3NfdXBkYXRlX2lycV9zZXJ2ZXJzKCk7CisKKwkvKiBSZWplY3QgYW55IGludGVycnVwdCB0aGF0IHdhcyBxdWV1ZWQgdG8gdXMuLi4gKi8KKwlpY3Bfb3BzLT5zZXRfcHJpb3JpdHkoMCk7CisKKwkvKiBSZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIGdsb2JhbCBpbnRlcnJ1cHQgcXVldWUgKi8KKwl4aWNzX3NldF9jcHVfZ2lxKHhpY3NfZGVmYXVsdF9kaXN0cmliX3NlcnZlciwgMCk7CisKKwkvKiBBbGxvdyBJUElzIGFnYWluLi4uICovCisJaWNwX29wcy0+c2V0X3ByaW9yaXR5KERFRkFVTFRfUFJJT1JJVFkpOworCisJZm9yX2VhY2hfaXJxKHZpcnEpIHsKKwkJc3RydWN0IGlycV9kZXNjICpkZXNjOworCQlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXA7CisJCWxvbmcgc2VydmVyOworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQlzdHJ1Y3QgaWNzICppY3M7CisKKwkJLyogV2UgY2FuJ3Qgc2V0IGFmZmluaXR5IG9uIElTQSBpbnRlcnJ1cHRzICovCisJCWlmICh2aXJxIDwgTlVNX0lTQV9JTlRFUlJVUFRTKQorCQkJY29udGludWU7CisJCWlmICghdmlycV9pc19ob3N0KHZpcnEsIHhpY3NfaG9zdCkpCisJCQljb250aW51ZTsKKwkJaXJxID0gKHVuc2lnbmVkIGludCl2aXJxX3RvX2h3KHZpcnEpOworCQkvKiBXZSBuZWVkIHRvIGdldCBJUElzIHN0aWxsLiAqLworCQlpZiAoaXJxID09IFhJQ1NfSVBJIHx8IGlycSA9PSBYSUNTX0lSUV9TUFVSSU9VUykKKwkJCWNvbnRpbnVlOworCQlkZXNjID0gaXJxX3RvX2Rlc2ModmlycSk7CisJCS8qIFdlIG9ubHkgbmVlZCB0byBtaWdyYXRlIGVuYWJsZWQgSVJRUyAqLworCQlpZiAoIWRlc2MgfHwgIWRlc2MtPmFjdGlvbikKKwkJCWNvbnRpbnVlOworCQljaGlwID0gaXJxX2Rlc2NfZ2V0X2NoaXAoZGVzYyk7CisJCWlmICghY2hpcCB8fCAhY2hpcC0+aXJxX3NldF9hZmZpbml0eSkKKwkJCWNvbnRpbnVlOworCisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCisJCS8qIExvY2F0ZSBpbnRlcnJ1cHQgc2VydmVyICovCisJCXNlcnZlciA9IC0xOworCQlpY3MgPSBpcnFfZ2V0X2NoaXBfZGF0YSh2aXJxKTsKKwkJaWYgKGljcykKKwkJCXNlcnZlciA9IGljcy0+Z2V0X3NlcnZlcihpY3MsIGlycSk7CisJCWlmIChzZXJ2ZXIgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW4ndCBmaW5kIHNlcnZlciBmb3IgaXJxICVkXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBpcnEpOworCQkJZ290byB1bmxvY2s7CisJCX0KKworCQkvKiBXZSBvbmx5IHN1cHBvcnQgZGVsaXZlcnkgdG8gYWxsIGNwdXMgb3IgdG8gb25lIGNwdS4KKwkJICogVGhlIGlycSBoYXMgdG8gYmUgbWlncmF0ZWQgb25seSBpbiB0aGUgc2luZ2xlIGNwdQorCQkgKiBjYXNlLgorCQkgKi8KKwkJaWYgKHNlcnZlciAhPSBod19jcHUpCisJCQlnb3RvIHVubG9jazsKKworCQkvKiBUaGlzIGlzIGV4cGVjdGVkIGR1cmluZyBjcHUgb2ZmbGluZS4gKi8KKwkJaWYgKGNwdV9vbmxpbmUoY3B1KSkKKwkJCXByX3dhcm5pbmcoIklSUSAldSBhZmZpbml0eSBicm9rZW4gb2ZmIGNwdSAldVxuIiwKKwkJCSAgICAgICB2aXJxLCBjcHUpOworCisJCS8qIFJlc2V0IGFmZmluaXR5IHRvIGFsbCBjcHVzICovCisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJCWlycV9zZXRfYWZmaW5pdHkodmlycSwgY3B1X2FsbF9tYXNrKTsKKwkJY29udGludWU7Cit1bmxvY2s6CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJfQorfQorI2VuZGlmIC8qIENPTkZJR19IT1RQTFVHX0NQVSAqLworCisjaWZkZWYgQ09ORklHX1NNUAorLyoKKyAqIEZvciB0aGUgbW9tZW50IHdlIG9ubHkgaW1wbGVtZW50IGRlbGl2ZXJ5IHRvIGFsbCBjcHVzIG9yIG9uZSBjcHUuCisgKgorICogSWYgdGhlIHJlcXVlc3RlZCBhZmZpbml0eSBpcyBjcHVfYWxsX21hc2ssIHdlIHNldCBnbG9iYWwgYWZmaW5pdHkuCisgKiBJZiBub3Qgd2Ugc2V0IGl0IHRvIHRoZSBmaXJzdCBjcHUgaW4gdGhlIG1hc2ssIGV2ZW4gaWYgbXVsdGlwbGUgY3B1cworICogYXJlIHNldC4gVGhpcyBpcyBzbyB0aGluZ3MgbGlrZSBpcnFiYWxhbmNlICh3aGljaCBzZXQgY29yZSBhbmQgcGFja2FnZQorICogd2lkZSBhZmZpbml0aWVzKSBkbyB0aGUgcmlnaHQgdGhpbmcuCisgKgorICogV2UgbmVlZCB0byBmaXggdGhpcyB0byBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgdGhlIGxpbmtzCisgKi8KK2ludCB4aWNzX2dldF9pcnFfc2VydmVyKHVuc2lnbmVkIGludCB2aXJxLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKKwkJCXVuc2lnbmVkIGludCBzdHJpY3RfY2hlY2spCit7CisKKwlpZiAoIWRpc3RyaWJ1dGVfaXJxcykKKwkJcmV0dXJuIHhpY3NfZGVmYXVsdF9zZXJ2ZXI7CisKKwlpZiAoIWNwdW1hc2tfc3Vic2V0KGNwdV9wb3NzaWJsZV9tYXNrLCBjcHVtYXNrKSkgeworCQlpbnQgc2VydmVyID0gY3B1bWFza19maXJzdF9hbmQoY3B1X29ubGluZV9tYXNrLCBjcHVtYXNrKTsKKworCQlpZiAoc2VydmVyIDwgbnJfY3B1X2lkcykKKwkJCXJldHVybiBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHNlcnZlcik7CisKKwkJaWYgKHN0cmljdF9jaGVjaykKKwkJCXJldHVybiAtMTsKKwl9CisKKwkvKgorCSAqIFdvcmthcm91bmQgaXNzdWUgd2l0aCBzb21lIHZlcnNpb25zIG9mIEpTMjAgZmlybXdhcmUgdGhhdAorCSAqIGRlbGl2ZXIgaW50ZXJydXB0cyB0byBjcHVzIHdoaWNoIGhhdmVuJ3QgYmVlbiBzdGFydGVkLiBUaGlzCisJICogaGFwcGVucyB3aGVuIHVzaW5nIHRoZSBtYXhjcHVzPSBib290IG9wdGlvbi4KKwkgKi8KKwlpZiAoY3B1bWFza19lcXVhbChjcHVfb25saW5lX21hc2ssIGNwdV9wcmVzZW50X21hc2spKQorCQlyZXR1cm4geGljc19kZWZhdWx0X2Rpc3RyaWJfc2VydmVyOworCisJcmV0dXJuIHhpY3NfZGVmYXVsdF9zZXJ2ZXI7Cit9CisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCitzdGF0aWMgaW50IHhpY3NfaG9zdF9tYXRjaChzdHJ1Y3QgaXJxX2hvc3QgKmgsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKK3sKKwlzdHJ1Y3QgaWNzICppY3M7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGljcywgJmljc19saXN0LCBsaW5rKQorCQlpZiAoaWNzLT5ob3N0X21hdGNoKGljcywgbm9kZSkpCisJCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCisvKiBEdW1taWVzICovCitzdGF0aWMgdm9pZCB4aWNzX2lwaV91bm1hc2soc3RydWN0IGlycV9kYXRhICpkKSB7IH0KK3N0YXRpYyB2b2lkIHhpY3NfaXBpX21hc2soc3RydWN0IGlycV9kYXRhICpkKSB7IH0KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB4aWNzX2lwaV9jaGlwID0geworCS5uYW1lID0gIlhJQ1MiLAorCS5pcnFfZW9pID0gTlVMTCwgLyogUGF0Y2hlZCBhdCBpbml0IHRpbWUgKi8KKwkuaXJxX21hc2sgPSB4aWNzX2lwaV9tYXNrLAorCS5pcnFfdW5tYXNrID0geGljc19pcGlfdW5tYXNrLAorfTsKKworc3RhdGljIGludCB4aWNzX2hvc3RfbWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCisJCQkgaXJxX2h3X251bWJlcl90IGh3KQoreworCXN0cnVjdCBpY3MgKmljczsKKworCXByX2RldmVsKCJ4aWNzOiBtYXAgdmlycSAlZCwgaHdpcnEgMHglbHhcbiIsIHZpcnEsIGh3KTsKKworCS8qIEluc2VydCB0aGUgaW50ZXJydXB0IG1hcHBpbmcgaW50byB0aGUgcmFkaXggdHJlZSBmb3IgZmFzdCBsb29rdXAgKi8KKwlpcnFfcmFkaXhfcmV2bWFwX2luc2VydCh4aWNzX2hvc3QsIHZpcnEsIGh3KTsKKworCS8qIFRoZXkgYXJlbid0IGFsbCBsZXZlbCBzZW5zaXRpdmUgYnV0IHdlIGp1c3QgZG9uJ3QgcmVhbGx5IGtub3cgKi8KKwlpcnFfc2V0X3N0YXR1c19mbGFncyh2aXJxLCBJUlFfTEVWRUwpOworCisJLyogRG9uJ3QgY2FsbCBpbnRvIElDUyBmb3IgSVBJcyAqLworCWlmIChodyA9PSBYSUNTX0lQSSkgeworCQlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIodmlycSwgJnhpY3NfaXBpX2NoaXAsCisJCQkJCSBoYW5kbGVfcGVyY3B1X2lycSk7CisJCXJldHVybiAwOworCX0KKworCS8qIExldCB0aGUgSUNTIHNldHVwIHRoZSBjaGlwIGRhdGEgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGljcywgJmljc19saXN0LCBsaW5rKQorCQlpZiAoaWNzLT5tYXAoaWNzLCB2aXJxKSA9PSAwKQorCQkJcmV0dXJuIDA7CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB4aWNzX2hvc3RfeGxhdGUoc3RydWN0IGlycV9ob3N0ICpoLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmN0LAorCQkJICAgY29uc3QgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKKwkJCSAgIGlycV9od19udW1iZXJfdCAqb3V0X2h3aXJxLCB1bnNpZ25lZCBpbnQgKm91dF9mbGFncykKKworeworCS8qIEN1cnJlbnQgeGljcyBpbXBsZW1lbnRhdGlvbiB0cmFuc2xhdGVzIGV2ZXJ5dGhpbmcKKwkgKiB0byBsZXZlbC4gSXQgaXMgbm90IHRlY2huaWNhbGx5IHJpZ2h0IGZvciBNU0lzIGJ1dCB0aGlzCisJICogaXMgaXJyZWxldmFudCBhdCB0aGlzIHBvaW50LiBXZSBtaWdodCBnZXQgc21hcnRlciBpbiB0aGUgZnV0dXJlCisJICovCisJKm91dF9od2lycSA9IGludHNwZWNbMF07CisJKm91dF9mbGFncyA9IElSUV9UWVBFX0xFVkVMX0xPVzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGlycV9ob3N0X29wcyB4aWNzX2hvc3Rfb3BzID0geworCS5tYXRjaCA9IHhpY3NfaG9zdF9tYXRjaCwKKwkubWFwID0geGljc19ob3N0X21hcCwKKwkueGxhdGUgPSB4aWNzX2hvc3RfeGxhdGUsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgeGljc19pbml0X2hvc3Qodm9pZCkKK3sKKwl4aWNzX2hvc3QgPSBpcnFfYWxsb2NfaG9zdChOVUxMLCBJUlFfSE9TVF9NQVBfVFJFRSwgMCwgJnhpY3NfaG9zdF9vcHMsCisJCQkJICAgWElDU19JUlFfU1BVUklPVVMpOworCUJVR19PTih4aWNzX2hvc3QgPT0gTlVMTCk7CisJaXJxX3NldF9kZWZhdWx0X2hvc3QoeGljc19ob3N0KTsKK30KKwordm9pZCBfX2luaXQgeGljc19yZWdpc3Rlcl9pY3Moc3RydWN0IGljcyAqaWNzKQoreworCWxpc3RfYWRkKCZpY3MtPmxpbmssICZpY3NfbGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCB4aWNzX2dldF9zZXJ2ZXJfc2l6ZSh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJY29uc3QgdTMyICppc2l6ZTsKKworCS8qIFdlIGZldGNoIHRoZSBpbnRlcnJ1cHQgc2VydmVyIHNpemUgZnJvbSB0aGUgZmlyc3QgSUNTIG5vZGUKKwkgKiB3ZSBmaW5kIGlmIGFueQorCSAqLworCW5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImlibSxwcGMteGljcyIpOworCWlmICghbnApCisJCXJldHVybjsKKwlpc2l6ZSA9IG9mX2dldF9wcm9wZXJ0eShucCwgImlibSxpbnRlcnJ1cHQtc2VydmVyIy1zaXplIiwgTlVMTCk7CisJaWYgKCFpc2l6ZSkKKwkJcmV0dXJuOworCXhpY3NfaW50ZXJydXB0X3NlcnZlcl9zaXplID0gKmlzaXplOworCW9mX25vZGVfcHV0KG5wKTsKK30KKwordm9pZCBfX2luaXQgeGljc19pbml0KHZvaWQpCit7CisJaW50IHJjID0gLTE7CisKKwkvKiBGaXN0IGxvY2F0ZSBJQ1AgKi8KKyNpZmRlZiBDT05GSUdfUFBDX0lDUF9IVgorCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQorCQlyYyA9IGljcF9odl9pbml0KCk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUFBDX0lDUF9OQVRJVkUKKwlpZiAocmMgPCAwKQorCQlyYyA9IGljcF9uYXRpdmVfaW5pdCgpOworI2VuZGlmCisJaWYgKHJjIDwgMCkgeworCQlwcl93YXJuaW5nKCJYSUNTOiBDYW5ub3QgZmluZCBhIFByZXNlbnRhdGlvbiBDb250cm9sbGVyICFcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogQ29weSBnZXRfaXJxIGNhbGxiYWNrIG92ZXIgdG8gcHBjX21kICovCisJcHBjX21kLmdldF9pcnEgPSBpY3Bfb3BzLT5nZXRfaXJxOworCisJLyogUGF0Y2ggdXAgSVBJIGNoaXAgRU9JICovCisJeGljc19pcGlfY2hpcC5pcnFfZW9pID0gaWNwX29wcy0+ZW9pOworCisJLyogTm93IGxvY2F0ZSBJQ1MgKi8KKyNpZmRlZiBDT05GSUdfUFBDX0lDU19SVEFTCisJcmMgPSBpY3NfcnRhc19pbml0KCk7CisjZW5kaWYKKwlpZiAocmMgPCAwKQorCQlwcl93YXJuaW5nKCJYSUNTOiBDYW5ub3QgZmluZCBhIFNvdXJjZSBDb250cm9sbGVyICFcbiIpOworCisJLyogSW5pdGlhbGl6ZSBjb21tb24gYml0cyAqLworCXhpY3NfZ2V0X3NlcnZlcl9zaXplKCk7CisJeGljc191cGRhdGVfaXJxX3NlcnZlcnMoKTsKKwl4aWNzX2luaXRfaG9zdCgpOworCXhpY3Nfc2V0dXBfY3B1KCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3hpbGlueF9pbnRjLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3hpbGlueF9pbnRjLmMKaW5kZXggMGExM2ZjMS4uNjE4Mzc5OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi94aWxpbnhfaW50Yy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYveGlsaW54X2ludGMuYwpAQCAtNzEsNyArNzEsNyBAQAogICovCiBzdGF0aWMgdm9pZCB4aWxpbnhfaW50Y19tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpbnQgaXJxID0gdmlycV90b19odyhkLT5pcnEpOworCWludCBpcnEgPSBpcnFkX3RvX2h3aXJxKGQpOwogCXZvaWQgKiByZWdzID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAJcHJfZGVidWcoIm1hc2s6ICVkXG4iLCBpcnEpOwogCW91dF9iZTMyKHJlZ3MgKyBYSU5UQ19DSUUsIDEgPDwgaXJxKTsKQEAgLTg3LDcgKzg3LDcgQEAKICAqLwogc3RhdGljIHZvaWQgeGlsaW54X2ludGNfbGV2ZWxfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpbnQgaXJxID0gdmlycV90b19odyhkLT5pcnEpOworCWludCBpcnEgPSBpcnFkX3RvX2h3aXJxKGQpOwogCXZvaWQgKiByZWdzID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAJcHJfZGVidWcoInVubWFzazogJWRcbiIsIGlycSk7CiAJb3V0X2JlMzIocmVncyArIFhJTlRDX1NJRSwgMSA8PCBpcnEpOwpAQCAtMTEyLDcgKzExMiw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHhpbGlueF9pbnRjX2VkZ2VfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpbnQgaXJxID0gdmlycV90b19odyhkLT5pcnEpOworCWludCBpcnEgPSBpcnFkX3RvX2h3aXJxKGQpOwogCXZvaWQgKnJlZ3MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIAlwcl9kZWJ1ZygidW5tYXNrOiAlZFxuIiwgaXJxKTsKIAlvdXRfYmUzMihyZWdzICsgWElOVENfU0lFLCAxIDw8IGlycSk7CkBAIC0xMjAsNyArMTIwLDcgQEAKIAogc3RhdGljIHZvaWQgeGlsaW54X2ludGNfZWRnZV9hY2soc3RydWN0IGlycV9kYXRhICpkKQogewotCWludCBpcnEgPSB2aXJxX3RvX2h3KGQtPmlycSk7CisJaW50IGlycSA9IGlycWRfdG9faHdpcnEoZCk7CiAJdm9pZCAqIHJlZ3MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIAlwcl9kZWJ1ZygiYWNrOiAlZFxuIiwgaXJxKTsKIAlvdXRfYmUzMihyZWdzICsgWElOVENfSUFSLCAxIDw8IGlycSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMgYi9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMKaW5kZXggMzM3OTRjMS4uNDI1NDFiYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYwpAQCAtMzM0LDcgKzMzNCw3IEBACiAKIGludCBjcHVzX2FyZV9pbl94bW9uKHZvaWQpCiB7Ci0JcmV0dXJuICFjcHVzX2VtcHR5KGNwdXNfaW5feG1vbik7CisJcmV0dXJuICFjcHVtYXNrX2VtcHR5KCZjcHVzX2luX3htb24pOwogfQogI2VuZGlmCiAKQEAgLTM3Myw3ICszNzMsNyBAQAogCiAjaWZkZWYgQ09ORklHX1NNUAogCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlpZiAoY3B1X2lzc2V0KGNwdSwgY3B1c19pbl94bW9uKSkgeworCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgJmNwdXNfaW5feG1vbikpIHsKIAkJZ2V0X291dHB1dF9sb2NrKCk7CiAJCWV4Y3ByaW50KHJlZ3MpOwogCQlwcmludGYoImNwdSAweCV4OiBFeGNlcHRpb24gJWx4ICVzIGluIHhtb24sICIKQEAgLTM5NiwxMCArMzk2LDEwIEBACiAJfQogCiAJeG1vbl9mYXVsdF9qbXBbY3B1XSA9IHJlY3Vyc2Vfam1wOwotCWNwdV9zZXQoY3B1LCBjcHVzX2luX3htb24pOworCWNwdW1hc2tfc2V0X2NwdShjcHUsICZjcHVzX2luX3htb24pOwogCiAJYnAgPSBOVUxMOwotCWlmICgocmVncy0+bXNyICYgKE1TUl9JUnxNU1JfUFJ8TVNSX1NGKSkgPT0gKE1TUl9JUnxNU1JfU0YpKQorCWlmICgocmVncy0+bXNyICYgKE1TUl9JUnxNU1JfUFJ8TVNSXzY0QklUKSkgPT0gKE1TUl9JUnxNU1JfNjRCSVQpKQogCQlicCA9IGF0X2JyZWFrcG9pbnQocmVncy0+bmlwKTsKIAlpZiAoYnAgfHwgdW5yZWNvdmVyYWJsZV9leGNwKHJlZ3MpKQogCQlmcm9taXBpID0gMDsKQEAgLTQzNywxMCArNDM3LDEwIEBACiAJCXhtb25fb3duZXIgPSBjcHU7CiAJCW1iKCk7CiAJCWlmIChuY3B1cyA+IDEpIHsKLQkJCXNtcF9zZW5kX2RlYnVnZ2VyX2JyZWFrKE1TR19BTExfQlVUX1NFTEYpOworCQkJc21wX3NlbmRfZGVidWdnZXJfYnJlYWsoKTsKIAkJCS8qIHdhaXQgZm9yIG90aGVyIGNwdXMgdG8gY29tZSBpbiAqLwogCQkJZm9yICh0aW1lb3V0ID0gMTAwMDAwMDAwOyB0aW1lb3V0ICE9IDA7IC0tdGltZW91dCkgewotCQkJCWlmIChjcHVzX3dlaWdodChjcHVzX2luX3htb24pID49IG5jcHVzKQorCQkJCWlmIChjcHVtYXNrX3dlaWdodCgmY3B1c19pbl94bW9uKSA+PSBuY3B1cykKIAkJCQkJYnJlYWs7CiAJCQkJYmFycmllcigpOwogCQkJfQpAQCAtNDg0LDcgKzQ4NCw3IEBACiAJCX0KIAl9CiAgbGVhdmU6Ci0JY3B1X2NsZWFyKGNwdSwgY3B1c19pbl94bW9uKTsKKwljcHVtYXNrX2NsZWFyX2NwdShjcHUsICZjcHVzX2luX3htb24pOwogCXhtb25fZmF1bHRfam1wW2NwdV0gPSBOVUxMOwogI2Vsc2UKIAkvKiBVUCBpcyBzaW1wbGUuLi4gKi8KQEAgLTUyOSw3ICs1MjksNyBAQAogCQl9CiAJfQogI2Vsc2UKLQlpZiAoKHJlZ3MtPm1zciAmIChNU1JfSVJ8TVNSX1BSfE1TUl9TRikpID09IChNU1JfSVJ8TVNSX1NGKSkgeworCWlmICgocmVncy0+bXNyICYgKE1TUl9JUnxNU1JfUFJ8TVNSXzY0QklUKSkgPT0gKE1TUl9JUnxNU1JfNjRCSVQpKSB7CiAJCWJwID0gYXRfYnJlYWtwb2ludChyZWdzLT5uaXApOwogCQlpZiAoYnAgIT0gTlVMTCkgewogCQkJaW50IHN0ZXBwZWQgPSBlbXVsYXRlX3N0ZXAocmVncywgYnAtPmluc3RyWzBdKTsKQEAgLTU3OCw3ICs1NzgsNyBAQAogCXN0cnVjdCBicHQgKmJwOwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogCi0JaWYgKChyZWdzLT5tc3IgJiAoTVNSX0lSfE1TUl9QUnxNU1JfU0YpKSAhPSAoTVNSX0lSfE1TUl9TRikpCisJaWYgKChyZWdzLT5tc3IgJiAoTVNSX0lSfE1TUl9QUnxNU1JfNjRCSVQpKSAhPSAoTVNSX0lSfE1TUl82NEJJVCkpCiAJCXJldHVybiAwOwogCiAJLyogQXJlIHdlIGF0IHRoZSB0cmFwIGF0IGJwLT5pbnN0clsxXSBmb3Igc29tZSBicD8gKi8KQEAgLTYwOSw3ICs2MDksNyBAQAogCiBzdGF0aWMgaW50IHhtb25fZGFicl9tYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlpZiAoKHJlZ3MtPm1zciAmIChNU1JfSVJ8TVNSX1BSfE1TUl9TRikpICE9IChNU1JfSVJ8TVNSX1NGKSkKKwlpZiAoKHJlZ3MtPm1zciAmIChNU1JfSVJ8TVNSX1BSfE1TUl82NEJJVCkpICE9IChNU1JfSVJ8TVNSXzY0QklUKSkKIAkJcmV0dXJuIDA7CiAJaWYgKGRhYnIuZW5hYmxlZCA9PSAwKQogCQlyZXR1cm4gMDsKQEAgLTYxOSw3ICs2MTksNyBAQAogCiBzdGF0aWMgaW50IHhtb25faWFicl9tYXRjaChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlpZiAoKHJlZ3MtPm1zciAmIChNU1JfSVJ8TVNSX1BSfE1TUl9TRikpICE9IChNU1JfSVJ8TVNSX1NGKSkKKwlpZiAoKHJlZ3MtPm1zciAmIChNU1JfSVJ8TVNSX1BSfE1TUl82NEJJVCkpICE9IChNU1JfSVJ8TVNSXzY0QklUKSkKIAkJcmV0dXJuIDA7CiAJaWYgKGlhYnIgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CkBAIC02MzAsNyArNjMwLDcgQEAKIHN0YXRpYyBpbnQgeG1vbl9pcGkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAjaWZkZWYgQ09ORklHX1NNUAotCWlmIChpbl94bW9uICYmICFjcHVfaXNzZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVzX2luX3htb24pKQorCWlmIChpbl94bW9uICYmICFjcHVtYXNrX3Rlc3RfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwgJmNwdXNfaW5feG1vbikpCiAJCXhtb25fY29yZShyZWdzLCAxKTsKICNlbmRpZgogCXJldHVybiAwOwpAQCAtNjQ0LDcgKzY0NCw3IEBACiAJaWYgKGluX3htb24gJiYgY2F0Y2hfbWVtb3J5X2Vycm9ycykKIAkJaGFuZGxlX2ZhdWx0KHJlZ3MpOwkvKiBkb2Vzbid0IHJldHVybiAqLwogCi0JaWYgKChyZWdzLT5tc3IgJiAoTVNSX0lSfE1TUl9QUnxNU1JfU0YpKSA9PSAoTVNSX0lSfE1TUl9TRikpIHsKKwlpZiAoKHJlZ3MtPm1zciAmIChNU1JfSVJ8TVNSX1BSfE1TUl82NEJJVCkpID09IChNU1JfSVJ8TVNSXzY0QklUKSkgewogCQlicCA9IGluX2JyZWFrcG9pbnRfdGFibGUocmVncy0+bmlwLCAmb2Zmc2V0KTsKIAkJaWYgKGJwICE9IE5VTEwpIHsKIAkJCXJlZ3MtPm5pcCA9IGJwLT5hZGRyZXNzICsgb2Zmc2V0OwpAQCAtOTI5LDcgKzkyOSw3IEBACiAJaW50IHN0ZXBwZWQ7CiAKIAkvKiBjaGVjayB3ZSBhcmUgaW4gNjQtYml0IGtlcm5lbCBtb2RlLCB0cmFuc2xhdGlvbiBlbmFibGVkICovCi0JaWYgKChyZWdzLT5tc3IgJiAoTVNSX1NGfE1TUl9QUnxNU1JfSVIpKSA9PSAoTVNSX1NGfE1TUl9JUikpIHsKKwlpZiAoKHJlZ3MtPm1zciAmIChNU1JfNjRCSVR8TVNSX1BSfE1TUl9JUikpID09IChNU1JfNjRCSVR8TVNSX0lSKSkgewogCQlpZiAobXJlYWQocmVncy0+bmlwLCAmaW5zdHIsIDQpID09IDQpIHsKIAkJCXN0ZXBwZWQgPSBlbXVsYXRlX3N0ZXAocmVncywgaW5zdHIpOwogCQkJaWYgKHN0ZXBwZWQgPCAwKSB7CkBAIC05NzYsNyArOTc2LDcgQEAKIAkJcHJpbnRmKCJjcHVzIHN0b3BwZWQ6Iik7CiAJCWNvdW50ID0gMDsKIAkJZm9yIChjcHUgPSAwOyBjcHUgPCBOUl9DUFVTOyArK2NwdSkgewotCQkJaWYgKGNwdV9pc3NldChjcHUsIGNwdXNfaW5feG1vbikpIHsKKwkJCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgJmNwdXNfaW5feG1vbikpIHsKIAkJCQlpZiAoY291bnQgPT0gMCkKIAkJCQkJcHJpbnRmKCIgJXgiLCBjcHUpOwogCQkJCSsrY291bnQ7CkBAIC05OTIsNyArOTkyLDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCS8qIHRyeSB0byBzd2l0Y2ggdG8gY3B1IHNwZWNpZmllZCAqLwotCWlmICghY3B1X2lzc2V0KGNwdSwgY3B1c19pbl94bW9uKSkgeworCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsICZjcHVzX2luX3htb24pKSB7CiAJCXByaW50ZigiY3B1IDB4JXggaXNuJ3QgaW4geG1vblxuIiwgY3B1KTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTQ5Nyw2ICsxNDk3LDEwIEBACiAjZW5kaWYKIAlwcmludGYoInBjICA9ICIpOwogCXhtb25fcHJpbnRfc3ltYm9sKGZwLT5uaXAsICIgIiwgIlxuIik7CisJaWYgKFRSQVAoZnApICE9IDB4YzAwICYmIGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX0NGQVIpKSB7CisJCXByaW50ZigiY2Zhcj0gIik7CisJCXhtb25fcHJpbnRfc3ltYm9sKGZwLT5vcmlnX2dwcjMsICIgIiwgIlxuIik7CisJfQogCXByaW50ZigibHIgID0gIik7CiAJeG1vbl9wcmludF9zeW1ib2woZnAtPmxpbmssICIgIiwgIlxuIik7CiAJcHJpbnRmKCJtc3IgPSAiUkVHIiAgIGNyICA9ICUuOGx4XG4iLCBmcC0+bXNyLCBmcC0+Y2NyKTsKQEAgLTI2NjMsNyArMjY2Nyw3IEBACiAKIHZvaWQgZHVtcF9zZWdtZW50cyh2b2lkKQogewotCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9TTEIpKQorCWlmIChtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl9TTEIpKQogCQlkdW1wX3NsYigpOwogCWVsc2UKIAkJZHVtcF9zdGFiKCk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL01ha2VmaWxlIGIvYXJjaC9zMzkwL2NyeXB0by9NYWtlZmlsZQppbmRleCAxY2Y4MWQ3Li43ZjBiN2NkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY3J5cHRvL01ha2VmaWxlCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vTWFrZWZpbGUKQEAgLTgsMyArOCw0IEBACiBvYmotJChDT05GSUdfQ1JZUFRPX0RFU19TMzkwKSArPSBkZXNfczM5MC5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0FFU19TMzkwKSArPSBhZXNfczM5MC5vCiBvYmotJChDT05GSUdfUzM5MF9QUk5HKSArPSBwcm5nLm8KK29iai0kKENPTkZJR19DUllQVE9fR0hBU0hfUzM5MCkgKz0gZ2hhc2hfczM5MC5vCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL2Flc19zMzkwLmMgYi9hcmNoL3MzOTAvY3J5cHRvL2Flc19zMzkwLmMKaW5kZXggNThmNDY3My4uYTljZTEzNSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2NyeXB0by9hZXNfczM5MC5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vYWVzX3MzOTAuYwpAQCAtMzEsNyArMzEsOCBAQAogI2RlZmluZSBBRVNfS0VZTEVOXzE5MgkJMgogI2RlZmluZSBBRVNfS0VZTEVOXzI1NgkJNAogCi1zdGF0aWMgY2hhciBrZXlsZW5fZmxhZyA9IDA7CitzdGF0aWMgdTggKmN0cmJsazsKK3N0YXRpYyBjaGFyIGtleWxlbl9mbGFnOwogCiBzdHJ1Y3QgczM5MF9hZXNfY3R4IHsKIAl1OCBpdltBRVNfQkxPQ0tfU0laRV07CkBAIC00NSw2ICs0NiwyNCBAQAogCX0gZmFsbGJhY2s7CiB9OwogCitzdHJ1Y3QgcGNjX3BhcmFtIHsKKwl1OCBrZXlbMzJdOworCXU4IHR3ZWFrWzE2XTsKKwl1OCBibG9ja1sxNl07CisJdTggYml0WzE2XTsKKwl1OCB4dHNbMTZdOworfTsKKworc3RydWN0IHMzOTBfeHRzX2N0eCB7CisJdTgga2V5WzMyXTsKKwl1OCB4dHNfcGFyYW1bMTZdOworCXN0cnVjdCBwY2NfcGFyYW0gcGNjOworCWxvbmcgZW5jOworCWxvbmcgZGVjOworCWludCBrZXlfbGVuOworCXN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICpmYWxsYmFjazsKK307CisKIC8qCiAgKiBDaGVjayBpZiB0aGUga2V5X2xlbiBpcyBzdXBwb3J0ZWQgYnkgdGhlIEhXLgogICogUmV0dXJucyAwIGlmIGl0IGlzLCBhIHBvc2l0aXZlIG51bWJlciBpZiBpdCBpcyBub3QgYW5kIHNvZnR3YXJlIGZhbGxiYWNrIGlzCkBAIC01MDQsMTUgKzUyMywzMzcgQEAKIAl9CiB9OwogCitzdGF0aWMgaW50IHh0c19mYWxsYmFja19zZXRrZXkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmtleSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgbGVuKQoreworCXN0cnVjdCBzMzkwX3h0c19jdHggKnh0c19jdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXVuc2lnbmVkIGludCByZXQ7CisKKwl4dHNfY3R4LT5mYWxsYmFjay0+YmFzZS5jcnRfZmxhZ3MgJj0gfkNSWVBUT19URk1fUkVRX01BU0s7CisJeHRzX2N0eC0+ZmFsbGJhY2stPmJhc2UuY3J0X2ZsYWdzIHw9ICh0Zm0tPmNydF9mbGFncyAmCisJCQlDUllQVE9fVEZNX1JFUV9NQVNLKTsKKworCXJldCA9IGNyeXB0b19ibGtjaXBoZXJfc2V0a2V5KHh0c19jdHgtPmZhbGxiYWNrLCBrZXksIGxlbik7CisJaWYgKHJldCkgeworCQl0Zm0tPmNydF9mbGFncyAmPSB+Q1JZUFRPX1RGTV9SRVNfTUFTSzsKKwkJdGZtLT5jcnRfZmxhZ3MgfD0gKHh0c19jdHgtPmZhbGxiYWNrLT5iYXNlLmNydF9mbGFncyAmCisJCQkJQ1JZUFRPX1RGTV9SRVNfTUFTSyk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgeHRzX2ZhbGxiYWNrX2RlY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCXVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJc3RydWN0IHMzOTBfeHRzX2N0eCAqeHRzX2N0eCA9IGNyeXB0b19ibGtjaXBoZXJfY3R4KGRlc2MtPnRmbSk7CisJc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbTsKKwl1bnNpZ25lZCBpbnQgcmV0OworCisJdGZtID0gZGVzYy0+dGZtOworCWRlc2MtPnRmbSA9IHh0c19jdHgtPmZhbGxiYWNrOworCisJcmV0ID0gY3J5cHRvX2Jsa2NpcGhlcl9kZWNyeXB0X2l2KGRlc2MsIGRzdCwgc3JjLCBuYnl0ZXMpOworCisJZGVzYy0+dGZtID0gdGZtOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgeHRzX2ZhbGxiYWNrX2VuY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCXVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJc3RydWN0IHMzOTBfeHRzX2N0eCAqeHRzX2N0eCA9IGNyeXB0b19ibGtjaXBoZXJfY3R4KGRlc2MtPnRmbSk7CisJc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbTsKKwl1bnNpZ25lZCBpbnQgcmV0OworCisJdGZtID0gZGVzYy0+dGZtOworCWRlc2MtPnRmbSA9IHh0c19jdHgtPmZhbGxiYWNrOworCisJcmV0ID0gY3J5cHRvX2Jsa2NpcGhlcl9lbmNyeXB0X2l2KGRlc2MsIGRzdCwgc3JjLCBuYnl0ZXMpOworCisJZGVzYy0+dGZtID0gdGZtOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgeHRzX2Flc19zZXRfa2V5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICppbl9rZXksCisJCQkgICB1bnNpZ25lZCBpbnQga2V5X2xlbikKK3sKKwlzdHJ1Y3QgczM5MF94dHNfY3R4ICp4dHNfY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwl1MzIgKmZsYWdzID0gJnRmbS0+Y3J0X2ZsYWdzOworCisJc3dpdGNoIChrZXlfbGVuKSB7CisJY2FzZSAzMjoKKwkJeHRzX2N0eC0+ZW5jID0gS01fWFRTXzEyOF9FTkNSWVBUOworCQl4dHNfY3R4LT5kZWMgPSBLTV9YVFNfMTI4X0RFQ1JZUFQ7CisJCW1lbWNweSh4dHNfY3R4LT5rZXkgKyAxNiwgaW5fa2V5LCAxNik7CisJCW1lbWNweSh4dHNfY3R4LT5wY2Mua2V5ICsgMTYsIGluX2tleSArIDE2LCAxNik7CisJCWJyZWFrOworCWNhc2UgNDg6CisJCXh0c19jdHgtPmVuYyA9IDA7CisJCXh0c19jdHgtPmRlYyA9IDA7CisJCXh0c19mYWxsYmFja19zZXRrZXkodGZtLCBpbl9rZXksIGtleV9sZW4pOworCQlicmVhazsKKwljYXNlIDY0OgorCQl4dHNfY3R4LT5lbmMgPSBLTV9YVFNfMjU2X0VOQ1JZUFQ7CisJCXh0c19jdHgtPmRlYyA9IEtNX1hUU18yNTZfREVDUllQVDsKKwkJbWVtY3B5KHh0c19jdHgtPmtleSwgaW5fa2V5LCAzMik7CisJCW1lbWNweSh4dHNfY3R4LT5wY2Mua2V5LCBpbl9rZXkgKyAzMiwgMzIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkqZmxhZ3MgfD0gQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU47CisJCXJldHVybiAtRUlOVkFMOworCX0KKwl4dHNfY3R4LT5rZXlfbGVuID0ga2V5X2xlbjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB4dHNfYWVzX2NyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywgbG9uZyBmdW5jLAorCQkJIHN0cnVjdCBzMzkwX3h0c19jdHggKnh0c19jdHgsCisJCQkgc3RydWN0IGJsa2NpcGhlcl93YWxrICp3YWxrKQoreworCXVuc2lnbmVkIGludCBvZmZzZXQgPSAoeHRzX2N0eC0+a2V5X2xlbiA+PiAxKSAmIDB4MTA7CisJaW50IHJldCA9IGJsa2NpcGhlcl93YWxrX3ZpcnQoZGVzYywgd2Fsayk7CisJdW5zaWduZWQgaW50IG5ieXRlcyA9IHdhbGstPm5ieXRlczsKKwl1bnNpZ25lZCBpbnQgbjsKKwl1OCAqaW4sICpvdXQ7CisJdm9pZCAqcGFyYW07CisKKwlpZiAoIW5ieXRlcykKKwkJZ290byBvdXQ7CisKKwltZW1zZXQoeHRzX2N0eC0+cGNjLmJsb2NrLCAwLCBzaXplb2YoeHRzX2N0eC0+cGNjLmJsb2NrKSk7CisJbWVtc2V0KHh0c19jdHgtPnBjYy5iaXQsIDAsIHNpemVvZih4dHNfY3R4LT5wY2MuYml0KSk7CisJbWVtc2V0KHh0c19jdHgtPnBjYy54dHMsIDAsIHNpemVvZih4dHNfY3R4LT5wY2MueHRzKSk7CisJbWVtY3B5KHh0c19jdHgtPnBjYy50d2Vhaywgd2Fsay0+aXYsIHNpemVvZih4dHNfY3R4LT5wY2MudHdlYWspKTsKKwlwYXJhbSA9IHh0c19jdHgtPnBjYy5rZXkgKyBvZmZzZXQ7CisJcmV0ID0gY3J5cHRfczM5MF9wY2MoZnVuYywgcGFyYW0pOworCUJVR19PTihyZXQgPCAwKTsKKworCW1lbWNweSh4dHNfY3R4LT54dHNfcGFyYW0sIHh0c19jdHgtPnBjYy54dHMsIDE2KTsKKwlwYXJhbSA9IHh0c19jdHgtPmtleSArIG9mZnNldDsKKwlkbyB7CisJCS8qIG9ubHkgdXNlIGNvbXBsZXRlIGJsb2NrcyAqLworCQluID0gbmJ5dGVzICYgfihBRVNfQkxPQ0tfU0laRSAtIDEpOworCQlvdXQgPSB3YWxrLT5kc3QudmlydC5hZGRyOworCQlpbiA9IHdhbGstPnNyYy52aXJ0LmFkZHI7CisKKwkJcmV0ID0gY3J5cHRfczM5MF9rbShmdW5jLCBwYXJhbSwgb3V0LCBpbiwgbik7CisJCUJVR19PTihyZXQgPCAwIHx8IHJldCAhPSBuKTsKKworCQluYnl0ZXMgJj0gQUVTX0JMT0NLX1NJWkUgLSAxOworCQlyZXQgPSBibGtjaXBoZXJfd2Fsa19kb25lKGRlc2MsIHdhbGssIG5ieXRlcyk7CisJfSB3aGlsZSAoKG5ieXRlcyA9IHdhbGstPm5ieXRlcykpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgeHRzX2Flc19lbmNyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKwkJCSAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJc3RydWN0IHMzOTBfeHRzX2N0eCAqeHRzX2N0eCA9IGNyeXB0b19ibGtjaXBoZXJfY3R4KGRlc2MtPnRmbSk7CisJc3RydWN0IGJsa2NpcGhlcl93YWxrIHdhbGs7CisKKwlpZiAodW5saWtlbHkoeHRzX2N0eC0+a2V5X2xlbiA9PSA0OCkpCisJCXJldHVybiB4dHNfZmFsbGJhY2tfZW5jcnlwdChkZXNjLCBkc3QsIHNyYywgbmJ5dGVzKTsKKworCWJsa2NpcGhlcl93YWxrX2luaXQoJndhbGssIGRzdCwgc3JjLCBuYnl0ZXMpOworCXJldHVybiB4dHNfYWVzX2NyeXB0KGRlc2MsIHh0c19jdHgtPmVuYywgeHRzX2N0eCwgJndhbGspOworfQorCitzdGF0aWMgaW50IHh0c19hZXNfZGVjcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCisJCQkgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCQkgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQoreworCXN0cnVjdCBzMzkwX3h0c19jdHggKnh0c19jdHggPSBjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pOworCXN0cnVjdCBibGtjaXBoZXJfd2FsayB3YWxrOworCisJaWYgKHVubGlrZWx5KHh0c19jdHgtPmtleV9sZW4gPT0gNDgpKQorCQlyZXR1cm4geHRzX2ZhbGxiYWNrX2RlY3J5cHQoZGVzYywgZHN0LCBzcmMsIG5ieXRlcyk7CisKKwlibGtjaXBoZXJfd2Fsa19pbml0KCZ3YWxrLCBkc3QsIHNyYywgbmJ5dGVzKTsKKwlyZXR1cm4geHRzX2Flc19jcnlwdChkZXNjLCB4dHNfY3R4LT5kZWMsIHh0c19jdHgsICZ3YWxrKTsKK30KKworc3RhdGljIGludCB4dHNfZmFsbGJhY2tfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCWNvbnN0IGNoYXIgKm5hbWUgPSB0Zm0tPl9fY3J0X2FsZy0+Y3JhX25hbWU7CisJc3RydWN0IHMzOTBfeHRzX2N0eCAqeHRzX2N0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisKKwl4dHNfY3R4LT5mYWxsYmFjayA9IGNyeXB0b19hbGxvY19ibGtjaXBoZXIobmFtZSwgMCwKKwkJCUNSWVBUT19BTEdfQVNZTkMgfCBDUllQVE9fQUxHX05FRURfRkFMTEJBQ0spOworCisJaWYgKElTX0VSUih4dHNfY3R4LT5mYWxsYmFjaykpIHsKKwkJcHJfZXJyKCJBbGxvY2F0aW5nIFhUUyBmYWxsYmFjayBhbGdvcml0aG0gJXMgZmFpbGVkXG4iLAorCQkgICAgICAgbmFtZSk7CisJCXJldHVybiBQVFJfRVJSKHh0c19jdHgtPmZhbGxiYWNrKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHh0c19mYWxsYmFja19leGl0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJc3RydWN0IHMzOTBfeHRzX2N0eCAqeHRzX2N0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisKKwljcnlwdG9fZnJlZV9ibGtjaXBoZXIoeHRzX2N0eC0+ZmFsbGJhY2spOworCXh0c19jdHgtPmZhbGxiYWNrID0gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIHh0c19hZXNfYWxnID0geworCS5jcmFfbmFtZQkJPQkieHRzKGFlcykiLAorCS5jcmFfZHJpdmVyX25hbWUJPQkieHRzLWFlcy1zMzkwIiwKKwkuY3JhX3ByaW9yaXR5CQk9CUNSWVBUX1MzOTBfQ09NUE9TSVRFX1BSSU9SSVRZLAorCS5jcmFfZmxhZ3MJCT0JQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUiB8CisJCQkJCUNSWVBUT19BTEdfTkVFRF9GQUxMQkFDSywKKwkuY3JhX2Jsb2Nrc2l6ZQkJPQlBRVNfQkxPQ0tfU0laRSwKKwkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mKHN0cnVjdCBzMzkwX3h0c19jdHgpLAorCS5jcmFfdHlwZQkJPQkmY3J5cHRvX2Jsa2NpcGhlcl90eXBlLAorCS5jcmFfbW9kdWxlCQk9CVRISVNfTU9EVUxFLAorCS5jcmFfbGlzdAkJPQlMSVNUX0hFQURfSU5JVCh4dHNfYWVzX2FsZy5jcmFfbGlzdCksCisJLmNyYV9pbml0CQk9CXh0c19mYWxsYmFja19pbml0LAorCS5jcmFfZXhpdAkJPQl4dHNfZmFsbGJhY2tfZXhpdCwKKwkuY3JhX3UJCQk9CXsKKwkJLmJsa2NpcGhlciA9IHsKKwkJCS5taW5fa2V5c2l6ZQkJPQkyICogQUVTX01JTl9LRVlfU0laRSwKKwkJCS5tYXhfa2V5c2l6ZQkJPQkyICogQUVTX01BWF9LRVlfU0laRSwKKwkJCS5pdnNpemUJCQk9CUFFU19CTE9DS19TSVpFLAorCQkJLnNldGtleQkJCT0JeHRzX2Flc19zZXRfa2V5LAorCQkJLmVuY3J5cHQJCT0JeHRzX2Flc19lbmNyeXB0LAorCQkJLmRlY3J5cHQJCT0JeHRzX2Flc19kZWNyeXB0LAorCQl9CisJfQorfTsKKworc3RhdGljIGludCBjdHJfYWVzX3NldF9rZXkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmluX2tleSwKKwkJCSAgIHVuc2lnbmVkIGludCBrZXlfbGVuKQoreworCXN0cnVjdCBzMzkwX2Flc19jdHggKnNjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCisJc3dpdGNoIChrZXlfbGVuKSB7CisJY2FzZSAxNjoKKwkJc2N0eC0+ZW5jID0gS01DVFJfQUVTXzEyOF9FTkNSWVBUOworCQlzY3R4LT5kZWMgPSBLTUNUUl9BRVNfMTI4X0RFQ1JZUFQ7CisJCWJyZWFrOworCWNhc2UgMjQ6CisJCXNjdHgtPmVuYyA9IEtNQ1RSX0FFU18xOTJfRU5DUllQVDsKKwkJc2N0eC0+ZGVjID0gS01DVFJfQUVTXzE5Ml9ERUNSWVBUOworCQlicmVhazsKKwljYXNlIDMyOgorCQlzY3R4LT5lbmMgPSBLTUNUUl9BRVNfMjU2X0VOQ1JZUFQ7CisJCXNjdHgtPmRlYyA9IEtNQ1RSX0FFU18yNTZfREVDUllQVDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGFlc19zZXRfa2V5KHRmbSwgaW5fa2V5LCBrZXlfbGVuKTsKK30KKworc3RhdGljIGludCBjdHJfYWVzX2NyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywgbG9uZyBmdW5jLAorCQkJIHN0cnVjdCBzMzkwX2Flc19jdHggKnNjdHgsIHN0cnVjdCBibGtjaXBoZXJfd2FsayAqd2FsaykKK3sKKwlpbnQgcmV0ID0gYmxrY2lwaGVyX3dhbGtfdmlydF9ibG9jayhkZXNjLCB3YWxrLCBBRVNfQkxPQ0tfU0laRSk7CisJdW5zaWduZWQgaW50IGksIG4sIG5ieXRlczsKKwl1OCBidWZbQUVTX0JMT0NLX1NJWkVdOworCXU4ICpvdXQsICppbjsKKworCWlmICghd2Fsay0+bmJ5dGVzKQorCQlyZXR1cm4gcmV0OworCisJbWVtY3B5KGN0cmJsaywgd2Fsay0+aXYsIEFFU19CTE9DS19TSVpFKTsKKwl3aGlsZSAoKG5ieXRlcyA9IHdhbGstPm5ieXRlcykgPj0gQUVTX0JMT0NLX1NJWkUpIHsKKwkJb3V0ID0gd2Fsay0+ZHN0LnZpcnQuYWRkcjsKKwkJaW4gPSB3YWxrLT5zcmMudmlydC5hZGRyOworCQl3aGlsZSAobmJ5dGVzID49IEFFU19CTE9DS19TSVpFKSB7CisJCQkvKiBvbmx5IHVzZSBjb21wbGV0ZSBibG9ja3MsIG1heC4gUEFHRV9TSVpFICovCisJCQluID0gKG5ieXRlcyA+IFBBR0VfU0laRSkgPyBQQUdFX1NJWkUgOgorCQkJCQkJIG5ieXRlcyAmIH4oQUVTX0JMT0NLX1NJWkUgLSAxKTsKKwkJCWZvciAoaSA9IEFFU19CTE9DS19TSVpFOyBpIDwgbjsgaSArPSBBRVNfQkxPQ0tfU0laRSkgeworCQkJCW1lbWNweShjdHJibGsgKyBpLCBjdHJibGsgKyBpIC0gQUVTX0JMT0NLX1NJWkUsCisJCQkJICAgICAgIEFFU19CTE9DS19TSVpFKTsKKwkJCQljcnlwdG9faW5jKGN0cmJsayArIGksIEFFU19CTE9DS19TSVpFKTsKKwkJCX0KKwkJCXJldCA9IGNyeXB0X3MzOTBfa21jdHIoZnVuYywgc2N0eC0+a2V5LCBvdXQsIGluLCBuLCBjdHJibGspOworCQkJQlVHX09OKHJldCA8IDAgfHwgcmV0ICE9IG4pOworCQkJaWYgKG4gPiBBRVNfQkxPQ0tfU0laRSkKKwkJCQltZW1jcHkoY3RyYmxrLCBjdHJibGsgKyBuIC0gQUVTX0JMT0NLX1NJWkUsCisJCQkJICAgICAgIEFFU19CTE9DS19TSVpFKTsKKwkJCWNyeXB0b19pbmMoY3RyYmxrLCBBRVNfQkxPQ0tfU0laRSk7CisJCQlvdXQgKz0gbjsKKwkJCWluICs9IG47CisJCQluYnl0ZXMgLT0gbjsKKwkJfQorCQlyZXQgPSBibGtjaXBoZXJfd2Fsa19kb25lKGRlc2MsIHdhbGssIG5ieXRlcyk7CisJfQorCS8qCisJICogZmluYWwgYmxvY2sgbWF5IGJlIDwgQUVTX0JMT0NLX1NJWkUsIGNvcHkgb25seSBuYnl0ZXMKKwkgKi8KKwlpZiAobmJ5dGVzKSB7CisJCW91dCA9IHdhbGstPmRzdC52aXJ0LmFkZHI7CisJCWluID0gd2Fsay0+c3JjLnZpcnQuYWRkcjsKKwkJcmV0ID0gY3J5cHRfczM5MF9rbWN0cihmdW5jLCBzY3R4LT5rZXksIGJ1ZiwgaW4sCisJCQkJICAgICAgIEFFU19CTE9DS19TSVpFLCBjdHJibGspOworCQlCVUdfT04ocmV0IDwgMCB8fCByZXQgIT0gQUVTX0JMT0NLX1NJWkUpOworCQltZW1jcHkob3V0LCBidWYsIG5ieXRlcyk7CisJCWNyeXB0b19pbmMoY3RyYmxrLCBBRVNfQkxPQ0tfU0laRSk7CisJCXJldCA9IGJsa2NpcGhlcl93YWxrX2RvbmUoZGVzYywgd2FsaywgMCk7CisJfQorCW1lbWNweSh3YWxrLT5pdiwgY3RyYmxrLCBBRVNfQkxPQ0tfU0laRSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjdHJfYWVzX2VuY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkJICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkJICAgdW5zaWduZWQgaW50IG5ieXRlcykKK3sKKwlzdHJ1Y3QgczM5MF9hZXNfY3R4ICpzY3R4ID0gY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKTsKKwlzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgd2FsazsKKworCWJsa2NpcGhlcl93YWxrX2luaXQoJndhbGssIGRzdCwgc3JjLCBuYnl0ZXMpOworCXJldHVybiBjdHJfYWVzX2NyeXB0KGRlc2MsIHNjdHgtPmVuYywgc2N0eCwgJndhbGspOworfQorCitzdGF0aWMgaW50IGN0cl9hZXNfZGVjcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCisJCQkgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCQkgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQoreworCXN0cnVjdCBzMzkwX2Flc19jdHggKnNjdHggPSBjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pOworCXN0cnVjdCBibGtjaXBoZXJfd2FsayB3YWxrOworCisJYmxrY2lwaGVyX3dhbGtfaW5pdCgmd2FsaywgZHN0LCBzcmMsIG5ieXRlcyk7CisJcmV0dXJuIGN0cl9hZXNfY3J5cHQoZGVzYywgc2N0eC0+ZGVjLCBzY3R4LCAmd2Fsayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBjdHJfYWVzX2FsZyA9IHsKKwkuY3JhX25hbWUJCT0JImN0cihhZXMpIiwKKwkuY3JhX2RyaXZlcl9uYW1lCT0JImN0ci1hZXMtczM5MCIsCisJLmNyYV9wcmlvcml0eQkJPQlDUllQVF9TMzkwX0NPTVBPU0lURV9QUklPUklUWSwKKwkuY3JhX2ZsYWdzCQk9CUNSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVIsCisJLmNyYV9ibG9ja3NpemUJCT0JMSwKKwkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mKHN0cnVjdCBzMzkwX2Flc19jdHgpLAorCS5jcmFfdHlwZQkJPQkmY3J5cHRvX2Jsa2NpcGhlcl90eXBlLAorCS5jcmFfbW9kdWxlCQk9CVRISVNfTU9EVUxFLAorCS5jcmFfbGlzdAkJPQlMSVNUX0hFQURfSU5JVChjdHJfYWVzX2FsZy5jcmFfbGlzdCksCisJLmNyYV91CQkJPQl7CisJCS5ibGtjaXBoZXIgPSB7CisJCQkubWluX2tleXNpemUJCT0JQUVTX01JTl9LRVlfU0laRSwKKwkJCS5tYXhfa2V5c2l6ZQkJPQlBRVNfTUFYX0tFWV9TSVpFLAorCQkJLml2c2l6ZQkJCT0JQUVTX0JMT0NLX1NJWkUsCisJCQkuc2V0a2V5CQkJPQljdHJfYWVzX3NldF9rZXksCisJCQkuZW5jcnlwdAkJPQljdHJfYWVzX2VuY3J5cHQsCisJCQkuZGVjcnlwdAkJPQljdHJfYWVzX2RlY3J5cHQsCisJCX0KKwl9Cit9OworCiBzdGF0aWMgaW50IF9faW5pdCBhZXNfczM5MF9pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKIAotCWlmIChjcnlwdF9zMzkwX2Z1bmNfYXZhaWxhYmxlKEtNX0FFU18xMjhfRU5DUllQVCkpCisJaWYgKGNyeXB0X3MzOTBfZnVuY19hdmFpbGFibGUoS01fQUVTXzEyOF9FTkNSWVBULCBDUllQVF9TMzkwX01TQSkpCiAJCWtleWxlbl9mbGFnIHw9IEFFU19LRVlMRU5fMTI4OwotCWlmIChjcnlwdF9zMzkwX2Z1bmNfYXZhaWxhYmxlKEtNX0FFU18xOTJfRU5DUllQVCkpCisJaWYgKGNyeXB0X3MzOTBfZnVuY19hdmFpbGFibGUoS01fQUVTXzE5Ml9FTkNSWVBULCBDUllQVF9TMzkwX01TQSkpCiAJCWtleWxlbl9mbGFnIHw9IEFFU19LRVlMRU5fMTkyOwotCWlmIChjcnlwdF9zMzkwX2Z1bmNfYXZhaWxhYmxlKEtNX0FFU18yNTZfRU5DUllQVCkpCisJaWYgKGNyeXB0X3MzOTBfZnVuY19hdmFpbGFibGUoS01fQUVTXzI1Nl9FTkNSWVBULCBDUllQVF9TMzkwX01TQSkpCiAJCWtleWxlbl9mbGFnIHw9IEFFU19LRVlMRU5fMjU2OwogCiAJaWYgKCFrZXlsZW5fZmxhZykKQEAgLTUzNSw5ICs4NzYsNDAgQEAKIAlpZiAocmV0KQogCQlnb3RvIGNiY19hZXNfZXJyOwogCisJaWYgKGNyeXB0X3MzOTBfZnVuY19hdmFpbGFibGUoS01fWFRTXzEyOF9FTkNSWVBULAorCQkJQ1JZUFRfUzM5MF9NU0EgfCBDUllQVF9TMzkwX01TQTQpICYmCisJICAgIGNyeXB0X3MzOTBfZnVuY19hdmFpbGFibGUoS01fWFRTXzI1Nl9FTkNSWVBULAorCQkJQ1JZUFRfUzM5MF9NU0EgfCBDUllQVF9TMzkwX01TQTQpKSB7CisJCXJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJnh0c19hZXNfYWxnKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8geHRzX2Flc19lcnI7CisJfQorCisJaWYgKGNyeXB0X3MzOTBfZnVuY19hdmFpbGFibGUoS01DVFJfQUVTXzEyOF9FTkNSWVBULAorCQkJCUNSWVBUX1MzOTBfTVNBIHwgQ1JZUFRfUzM5MF9NU0E0KSAmJgorCSAgICBjcnlwdF9zMzkwX2Z1bmNfYXZhaWxhYmxlKEtNQ1RSX0FFU18xOTJfRU5DUllQVCwKKwkJCQlDUllQVF9TMzkwX01TQSB8IENSWVBUX1MzOTBfTVNBNCkgJiYKKwkgICAgY3J5cHRfczM5MF9mdW5jX2F2YWlsYWJsZShLTUNUUl9BRVNfMjU2X0VOQ1JZUFQsCisJCQkJQ1JZUFRfUzM5MF9NU0EgfCBDUllQVF9TMzkwX01TQTQpKSB7CisJCWN0cmJsayA9ICh1OCAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCWlmICghY3RyYmxrKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBjdHJfYWVzX2VycjsKKwkJfQorCQlyZXQgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZjdHJfYWVzX2FsZyk7CisJCWlmIChyZXQpIHsKKwkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgY3RyYmxrKTsKKwkJCWdvdG8gY3RyX2Flc19lcnI7CisJCX0KKwl9CisKIG91dDoKIAlyZXR1cm4gcmV0OwogCitjdHJfYWVzX2VycjoKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJnh0c19hZXNfYWxnKTsKK3h0c19hZXNfZXJyOgorCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmY2JjX2Flc19hbGcpOwogY2JjX2Flc19lcnI6CiAJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZlY2JfYWVzX2FsZyk7CiBlY2JfYWVzX2VycjoKQEAgLTU0OCw2ICs5MjAsOSBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWVzX3MzOTBfZmluaSh2b2lkKQogeworCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmY3RyX2Flc19hbGcpOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgY3RyYmxrKTsKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJnh0c19hZXNfYWxnKTsKIAljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmNiY19hZXNfYWxnKTsKIAljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmVjYl9hZXNfYWxnKTsKIAljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFlc19hbGcpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2NyeXB0by9jcnlwdF9zMzkwLmggYi9hcmNoL3MzOTAvY3J5cHRvL2NyeXB0X3MzOTAuaAppbmRleCA3ZWU5YTFiLi40OTY3Njc3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY3J5cHRvL2NyeXB0X3MzOTAuaAorKysgYi9hcmNoL3MzOTAvY3J5cHRvL2NyeXB0X3MzOTAuaApAQCAtMjQsMTMgKzI0LDE4IEBACiAjZGVmaW5lIENSWVBUX1MzOTBfUFJJT1JJVFkgMzAwCiAjZGVmaW5lIENSWVBUX1MzOTBfQ09NUE9TSVRFX1BSSU9SSVRZIDQwMAogCisjZGVmaW5lIENSWVBUX1MzOTBfTVNBCTB4MQorI2RlZmluZSBDUllQVF9TMzkwX01TQTMJMHgyCisjZGVmaW5lIENSWVBUX1MzOTBfTVNBNAkweDQKKwogLyogczM5MCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbnMgKi8KIGVudW0gY3J5cHRfczM5MF9vcGVyYXRpb25zIHsKIAlDUllQVF9TMzkwX0tNICAgPSAweDAxMDAsCiAJQ1JZUFRfUzM5MF9LTUMgID0gMHgwMjAwLAogCUNSWVBUX1MzOTBfS0lNRCA9IDB4MDMwMCwKIAlDUllQVF9TMzkwX0tMTUQgPSAweDA0MDAsCi0JQ1JZUFRfUzM5MF9LTUFDID0gMHgwNTAwCisJQ1JZUFRfUzM5MF9LTUFDID0gMHgwNTAwLAorCUNSWVBUX1MzOTBfS01DVFIgPSAweDA2MDAKIH07CiAKIC8qCkBAIC01MSw2ICs1NiwxMCBAQAogCUtNX0FFU18xOTJfREVDUllQVCAgPSBDUllQVF9TMzkwX0tNIHwgMHgxMyB8IDB4ODAsCiAJS01fQUVTXzI1Nl9FTkNSWVBUICA9IENSWVBUX1MzOTBfS00gfCAweDE0LAogCUtNX0FFU18yNTZfREVDUllQVCAgPSBDUllQVF9TMzkwX0tNIHwgMHgxNCB8IDB4ODAsCisJS01fWFRTXzEyOF9FTkNSWVBUICA9IENSWVBUX1MzOTBfS00gfCAweDMyLAorCUtNX1hUU18xMjhfREVDUllQVCAgPSBDUllQVF9TMzkwX0tNIHwgMHgzMiB8IDB4ODAsCisJS01fWFRTXzI1Nl9FTkNSWVBUICA9IENSWVBUX1MzOTBfS00gfCAweDM0LAorCUtNX1hUU18yNTZfREVDUllQVCAgPSBDUllQVF9TMzkwX0tNIHwgMHgzNCB8IDB4ODAsCiB9OwogCiAvKgpAQCAtNzUsNiArODQsMjYgQEAKIH07CiAKIC8qCisgKiBmdW5jdGlvbiBjb2RlcyBmb3IgS01DVFIgKENJUEhFUiBNRVNTQUdFIFdJVEggQ09VTlRFUikKKyAqIGluc3RydWN0aW9uCisgKi8KK2VudW0gY3J5cHRfczM5MF9rbWN0cl9mdW5jIHsKKwlLTUNUUl9RVUVSWSAgICAgICAgICAgID0gQ1JZUFRfUzM5MF9LTUNUUiB8IDB4MCwKKwlLTUNUUl9ERUFfRU5DUllQVCAgICAgID0gQ1JZUFRfUzM5MF9LTUNUUiB8IDB4MSwKKwlLTUNUUl9ERUFfREVDUllQVCAgICAgID0gQ1JZUFRfUzM5MF9LTUNUUiB8IDB4MSB8IDB4ODAsCisJS01DVFJfVERFQV8xMjhfRU5DUllQVCA9IENSWVBUX1MzOTBfS01DVFIgfCAweDIsCisJS01DVFJfVERFQV8xMjhfREVDUllQVCA9IENSWVBUX1MzOTBfS01DVFIgfCAweDIgfCAweDgwLAorCUtNQ1RSX1RERUFfMTkyX0VOQ1JZUFQgPSBDUllQVF9TMzkwX0tNQ1RSIHwgMHgzLAorCUtNQ1RSX1RERUFfMTkyX0RFQ1JZUFQgPSBDUllQVF9TMzkwX0tNQ1RSIHwgMHgzIHwgMHg4MCwKKwlLTUNUUl9BRVNfMTI4X0VOQ1JZUFQgID0gQ1JZUFRfUzM5MF9LTUNUUiB8IDB4MTIsCisJS01DVFJfQUVTXzEyOF9ERUNSWVBUICA9IENSWVBUX1MzOTBfS01DVFIgfCAweDEyIHwgMHg4MCwKKwlLTUNUUl9BRVNfMTkyX0VOQ1JZUFQgID0gQ1JZUFRfUzM5MF9LTUNUUiB8IDB4MTMsCisJS01DVFJfQUVTXzE5Ml9ERUNSWVBUICA9IENSWVBUX1MzOTBfS01DVFIgfCAweDEzIHwgMHg4MCwKKwlLTUNUUl9BRVNfMjU2X0VOQ1JZUFQgID0gQ1JZUFRfUzM5MF9LTUNUUiB8IDB4MTQsCisJS01DVFJfQUVTXzI1Nl9ERUNSWVBUICA9IENSWVBUX1MzOTBfS01DVFIgfCAweDE0IHwgMHg4MCwKK307CisKKy8qCiAgKiBmdW5jdGlvbiBjb2RlcyBmb3IgS0lNRCAoQ09NUFVURSBJTlRFUk1FRElBVEUgTUVTU0FHRSBESUdFU1QpCiAgKiBpbnN0cnVjdGlvbgogICovCkBAIC04Myw2ICsxMTIsNyBAQAogCUtJTURfU0hBXzEgICA9IENSWVBUX1MzOTBfS0lNRCB8IDEsCiAJS0lNRF9TSEFfMjU2ID0gQ1JZUFRfUzM5MF9LSU1EIHwgMiwKIAlLSU1EX1NIQV81MTIgPSBDUllQVF9TMzkwX0tJTUQgfCAzLAorCUtJTURfR0hBU0ggICA9IENSWVBUX1MzOTBfS0lNRCB8IDY1LAogfTsKIAogLyoKQEAgLTI4NCw2ICszMTQsNDUgQEAKIH0KIAogLyoqCisgKiBjcnlwdF9zMzkwX2ttY3RyOgorICogQGZ1bmM6IHRoZSBmdW5jdGlvbiBjb2RlIHBhc3NlZCB0byBLTUNUUjsgc2VlIGNyeXB0X3MzOTBfa21jdHJfZnVuYworICogQHBhcmFtOiBhZGRyZXNzIG9mIHBhcmFtZXRlciBibG9jazsgc2VlIFBPUCBmb3IgZGV0YWlscyBvbiBlYWNoIGZ1bmMKKyAqIEBkZXN0OiBhZGRyZXNzIG9mIGRlc3RpbmF0aW9uIG1lbW9yeSBhcmVhCisgKiBAc3JjOiBhZGRyZXNzIG9mIHNvdXJjZSBtZW1vcnkgYXJlYQorICogQHNyY19sZW46IGxlbmd0aCBvZiBzcmMgb3BlcmFuZCBpbiBieXRlcworICogQGNvdW50ZXI6IGFkZHJlc3Mgb2YgY291bnRlciB2YWx1ZQorICoKKyAqIEV4ZWN1dGVzIHRoZSBLTUNUUiAoQ0lQSEVSIE1FU1NBR0UgV0lUSCBDT1VOVEVSKSBvcGVyYXRpb24gb2YgdGhlIENQVS4KKyAqCisgKiBSZXR1cm5zIC0xIGZvciBmYWlsdXJlLCAwIGZvciB0aGUgcXVlcnkgZnVuYywgbnVtYmVyIG9mIHByb2Nlc3NlZAorICogYnl0ZXMgZm9yIGVuY3J5cHRpb24vZGVjcnlwdGlvbiBmdW5jcworICovCitzdGF0aWMgaW5saW5lIGludCBjcnlwdF9zMzkwX2ttY3RyKGxvbmcgZnVuYywgdm9pZCAqcGFyYW0sIHU4ICpkZXN0LAorCQkJCSBjb25zdCB1OCAqc3JjLCBsb25nIHNyY19sZW4sIHU4ICpjb3VudGVyKQoreworCXJlZ2lzdGVyIGxvbmcgX19mdW5jIGFzbSgiMCIpID0gZnVuYyAmIENSWVBUX1MzOTBfRlVOQ19NQVNLOworCXJlZ2lzdGVyIHZvaWQgKl9fcGFyYW0gYXNtKCIxIikgPSBwYXJhbTsKKwlyZWdpc3RlciBjb25zdCB1OCAqX19zcmMgYXNtKCIyIikgPSBzcmM7CisJcmVnaXN0ZXIgbG9uZyBfX3NyY19sZW4gYXNtKCIzIikgPSBzcmNfbGVuOworCXJlZ2lzdGVyIHU4ICpfX2Rlc3QgYXNtKCI0IikgPSBkZXN0OworCXJlZ2lzdGVyIHU4ICpfX2N0ciBhc20oIjYiKSA9IGNvdW50ZXI7CisJaW50IHJldCA9IC0xOworCisJYXNtIHZvbGF0aWxlKAorCQkiMDoJLmluc24JcnJmLDB4YjkyZDAwMDAsJTMsJTEsJTQsMCBcbiIgLyogS01DVFIgb3Bjb2RlICovCisJCSIxOglicmMJMSwwYiBcbiIgLyogaGFuZGxlIHBhcnRpYWwgY29tcGxldGlvbiAqLworCQkiCWxhCSUwLDBcbiIKKwkJIjI6XG4iCisJCUVYX1RBQkxFKDBiLDJiKSBFWF9UQUJMRSgxYiwyYikKKwkJOiAiK2QiIChyZXQpLCAiK2EiIChfX3NyYyksICIrZCIgKF9fc3JjX2xlbiksICIrYSIgKF9fZGVzdCksCisJCSAgIithIiAoX19jdHIpCisJCTogImQiIChfX2Z1bmMpLCAiYSIgKF9fcGFyYW0pIDogImNjIiwgIm1lbW9yeSIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiAoZnVuYyAmIENSWVBUX1MzOTBfRlVOQ19NQVNLKSA/IHNyY19sZW4gLSBfX3NyY19sZW4gOiBfX3NyY19sZW47Cit9CisKKy8qKgogICogY3J5cHRfczM5MF9mdW5jX2F2YWlsYWJsZToKICAqIEBmdW5jOiB0aGUgZnVuY3Rpb24gY29kZSBvZiB0aGUgc3BlY2lmaWMgZnVuY3Rpb247IDAgaWYgb3AgaW4gZ2VuZXJhbAogICoKQEAgLTI5MSwxMyArMzYwLDE3IEBACiAgKgogICogUmV0dXJucyAxIGlmIGZ1bmMgYXZhaWxhYmxlOyAwIGlmIGZ1bmMgb3Igb3AgaW4gZ2VuZXJhbCBub3QgYXZhaWxhYmxlCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGNyeXB0X3MzOTBfZnVuY19hdmFpbGFibGUoaW50IGZ1bmMpCitzdGF0aWMgaW5saW5lIGludCBjcnlwdF9zMzkwX2Z1bmNfYXZhaWxhYmxlKGludCBmdW5jLAorCQkJCQkgICAgdW5zaWduZWQgaW50IGZhY2lsaXR5X21hc2spCiB7CiAJdW5zaWduZWQgY2hhciBzdGF0dXNbMTZdOwogCWludCByZXQ7CiAKLQkvKiBjaGVjayBpZiBDUEFDRiBmYWNpbGl0eSAoYml0IDE3KSBpcyBhdmFpbGFibGUgKi8KLQlpZiAoIXRlc3RfZmFjaWxpdHkoMTcpKQorCWlmIChmYWNpbGl0eV9tYXNrICYgQ1JZUFRfUzM5MF9NU0EgJiYgIXRlc3RfZmFjaWxpdHkoMTcpKQorCQlyZXR1cm4gMDsKKwlpZiAoZmFjaWxpdHlfbWFzayAmIENSWVBUX1MzOTBfTVNBMyAmJiAhdGVzdF9mYWNpbGl0eSg3NikpCisJCXJldHVybiAwOworCWlmIChmYWNpbGl0eV9tYXNrICYgQ1JZUFRfUzM5MF9NU0E0ICYmICF0ZXN0X2ZhY2lsaXR5KDc3KSkKIAkJcmV0dXJuIDA7CiAKIAlzd2l0Y2ggKGZ1bmMgJiBDUllQVF9TMzkwX09QX01BU0spIHsKQEAgLTMxNiw2ICszODksMTAgQEAKIAljYXNlIENSWVBUX1MzOTBfS01BQzoKIAkJcmV0ID0gY3J5cHRfczM5MF9rbWFjKEtNQUNfUVVFUlksICZzdGF0dXMsIE5VTEwsIDApOwogCQlicmVhazsKKwljYXNlIENSWVBUX1MzOTBfS01DVFI6CisJCXJldCA9IGNyeXB0X3MzOTBfa21jdHIoS01DVFJfUVVFUlksICZzdGF0dXMsIE5VTEwsIE5VTEwsIDAsCisJCQkJICAgICAgIE5VTEwpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gMDsKIAl9CkBAIC0zMjYsNCArNDAzLDMxIEBACiAJcmV0dXJuIChzdGF0dXNbZnVuYyA+PiAzXSAmICgweDgwID4+IChmdW5jICYgNykpKSAhPSAwOwogfQogCisvKioKKyAqIGNyeXB0X3MzOTBfcGNjOgorICogQGZ1bmM6IHRoZSBmdW5jdGlvbiBjb2RlIHBhc3NlZCB0byBLTTsgc2VlIGNyeXB0X3MzOTBfa21fZnVuYworICogQHBhcmFtOiBhZGRyZXNzIG9mIHBhcmFtZXRlciBibG9jazsgc2VlIFBPUCBmb3IgZGV0YWlscyBvbiBlYWNoIGZ1bmMKKyAqCisgKiBFeGVjdXRlcyB0aGUgUENDIChQRVJGT1JNIENSWVBUT0dSQVBISUMgQ09NUFVUQVRJT04pIG9wZXJhdGlvbiBvZiB0aGUgQ1BVLgorICoKKyAqIFJldHVybnMgLTEgZm9yIGZhaWx1cmUsIDAgZm9yIHN1Y2Nlc3MuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0X3MzOTBfcGNjKGxvbmcgZnVuYywgdm9pZCAqcGFyYW0pCit7CisJcmVnaXN0ZXIgbG9uZyBfX2Z1bmMgYXNtKCIwIikgPSBmdW5jICYgMHg3ZjsgLyogZW5jcnlwdCBvciBkZWNyeXB0ICovCisJcmVnaXN0ZXIgdm9pZCAqX19wYXJhbSBhc20oIjEiKSA9IHBhcmFtOworCWludCByZXQgPSAtMTsKKworCWFzbSB2b2xhdGlsZSgKKwkJIjA6CS5pbnNuCXJyZSwweGI5MmMwMDAwLDAsMCBcbiIgLyogUENDIG9wY29kZSAqLworCQkiMToJYnJjCTEsMGIgXG4iIC8qIGhhbmRsZSBwYXJ0aWFsIGNvbXBsZXRpb24gKi8KKwkJIglsYQklMCwwXG4iCisJCSIyOlxuIgorCQlFWF9UQUJMRSgwYiwyYikgRVhfVEFCTEUoMWIsMmIpCisJCTogIitkIiAocmV0KQorCQk6ICJkIiAoX19mdW5jKSwgImEiIChfX3BhcmFtKSA6ICJjYyIsICJtZW1vcnkiKTsKKwlyZXR1cm4gcmV0OworfQorCisKICNlbmRpZgkvKiBfQ1JZUFRPX0FSQ0hfUzM5MF9DUllQVF9TMzkwX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9jcnlwdG8vZGVzX2NoZWNrX2tleS5jIGIvYXJjaC9zMzkwL2NyeXB0by9kZXNfY2hlY2tfa2V5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MDZhZjIuLjAwMDAwMDAKLS0tIGEvYXJjaC9zMzkwL2NyeXB0by9kZXNfY2hlY2tfa2V5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLyoKLSAqIENyeXB0b2dyYXBoaWMgQVBJLgotICoKLSAqIEZ1bmN0aW9uIGZvciBjaGVja2luZyBrZXlzIGZvciB0aGUgREVTIGFuZCBUcmlwcGxlIERFUyBFbmNyeXB0aW9uCi0gKiBhbGdvcml0aG1zLgotICoKLSAqIE9yaWdpbmFsbHkgcmVsZWFzZWQgYXMgZGVzY29yZSBieSBEYW5hIEwuIEhvdyA8aG93QGlzbC5zdGFuZm9yZC5lZHU+LgotICogTW9kaWZpZWQgYnkgUmFpbWFyIEZhbGtlIDxyZjEzQGluZi50dS1kcmVzZGVuLmRlPiBmb3IgdGhlIExpbnV4LUtlcm5lbC4KLSAqIERlcml2ZWQgZnJvbSBDcnlwdG9hcGkgYW5kIE5ldHRsZSBpbXBsZW1lbnRhdGlvbnMsIGFkYXB0ZWQgZm9yIGluLXBsYWNlCi0gKiBzY2F0dGVybGlzdCBpbnRlcmZhY2UuICBDaGFuZ2VkIExHUEwgdG8gR1BMIHBlciBzZWN0aW9uIDMgb2YgdGhlIExHUEwuCi0gKgotICogczM5MCBWZXJzaW9uOgotICogICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDMKLSAqICAgQXV0aG9yKHMpOiBUaG9tYXMgU3BhdHppZXIKLSAqCQlKYW4gR2xhdWJlciAoamFuLmdsYXViZXJAZGUuaWJtLmNvbSkKLSAqCi0gKiBEZXJpdmVkIGZyb20gImNyeXB0by9kZXMuYyIKLSAqICAgQ29weXJpZ2h0IChjKSAxOTkyIERhbmEgTC4gSG93LgotICogICBDb3B5cmlnaHQgKGMpIFJhaW1hciBGYWxrZSA8cmYxM0BpbmYudHUtZHJlc2Rlbi5kZT4KLSAqICAgQ29weXJpZ2h0IChjKSBHaXNsZSBTZmxlbnNtaW5kZSA8Z2lzbGVAaWkudWliLm5vPgotICogICBDb3B5cmlnaHQgKEMpIDIwMDEgTmllbHMgTXZsbGVyLgotICogICBDb3B5cmlnaHQgKGMpIDIwMDIgSmFtZXMgTW9ycmlzIDxqbW9ycmlzQGludGVyY29kZS5jb20uYXU+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KLSNpbmNsdWRlICJjcnlwdG9fZGVzLmgiCi0KLSNkZWZpbmUgUk9SKGQsYyxvKQkoKGQpID0gKGQpID4+IChjKSB8IChkKSA8PCAobykpCi0KLXN0YXRpYyBjb25zdCB1OCBwYXJpdHlbXSA9IHsKLQk4LDEsMCw4LDAsOCw4LDAsMCw4LDgsMCw4LDAsMiw4LDAsOCw4LDAsOCwwLDAsOCw4LDAsMCw4LDAsOCw4LDMsCi0JMCw4LDgsMCw4LDAsMCw4LDgsMCwwLDgsMCw4LDgsMCw4LDAsMCw4LDAsOCw4LDAsMCw4LDgsMCw4LDAsMCw4LAotCTAsOCw4LDAsOCwwLDAsOCw4LDAsMCw4LDAsOCw4LDAsOCwwLDAsOCwwLDgsOCwwLDAsOCw4LDAsOCwwLDAsOCwKLQk4LDAsMCw4LDAsOCw4LDAsMCw4LDgsMCw4LDAsMCw4LDAsOCw4LDAsOCwwLDAsOCw4LDAsMCw4LDAsOCw4LDAsCi0JMCw4LDgsMCw4LDAsMCw4LDgsMCwwLDgsMCw4LDgsMCw4LDAsMCw4LDAsOCw4LDAsMCw4LDgsMCw4LDAsMCw4LAotCTgsMCwwLDgsMCw4LDgsMCwwLDgsOCwwLDgsMCwwLDgsMCw4LDgsMCw4LDAsMCw4LDgsMCwwLDgsMCw4LDgsMCwKLQk4LDAsMCw4LDAsOCw4LDAsMCw4LDgsMCw4LDAsMCw4LDAsOCw4LDAsOCwwLDAsOCw4LDAsMCw4LDAsOCw4LDAsCi0JNCw4LDgsMCw4LDAsMCw4LDgsMCwwLDgsMCw4LDgsMCw4LDUsMCw4LDAsOCw4LDAsMCw4LDgsMCw4LDAsNiw4LAotfTsKLQotLyoKLSAqIFJGQzI0NTE6IFdlYWsga2V5IGNoZWNrcyBTSE9VTEQgYmUgcGVyZm9ybWVkLgotICovCi1pbnQKLWNyeXB0b19kZXNfY2hlY2tfa2V5KGNvbnN0IHU4ICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4sIHUzMiAqZmxhZ3MpCi17Ci0JdTMyIG4sIHc7Ci0KLQluICA9IHBhcml0eVtrZXlbMF1dOyBuIDw8PSA0OwotCW4gfD0gcGFyaXR5W2tleVsxXV07IG4gPDw9IDQ7Ci0JbiB8PSBwYXJpdHlba2V5WzJdXTsgbiA8PD0gNDsKLQluIHw9IHBhcml0eVtrZXlbM11dOyBuIDw8PSA0OwotCW4gfD0gcGFyaXR5W2tleVs0XV07IG4gPDw9IDQ7Ci0JbiB8PSBwYXJpdHlba2V5WzVdXTsgbiA8PD0gNDsKLQluIHw9IHBhcml0eVtrZXlbNl1dOyBuIDw8PSA0OwotCW4gfD0gcGFyaXR5W2tleVs3XV07Ci0JdyA9IDB4ODg4ODg4ODhMOwotCi0JaWYgKCgqZmxhZ3MgJiBDUllQVE9fVEZNX1JFUV9XRUFLX0tFWSkKLQkgICAgJiYgISgobiAtICh3ID4+IDMpKSAmIHcpKSB7ICAvKiAxIGluIDEwXjEwIGtleXMgcGFzc2VzIHRoaXMgdGVzdCAqLwotCQlpZiAobiA8IDB4NDE0MTUxNTEpIHsKLQkJCWlmIChuIDwgMHgzMTMxMjEyMSkgewotCQkJCWlmIChuIDwgMHgxNDE0MTUxNSkgewotCQkJCQkvKiAwMSAwMSAwMSAwMSAwMSAwMSAwMSAwMSAqLwotCQkJCQlpZiAobiA9PSAweDExMTExMTExKSBnb3RvIHdlYWs7Ci0JCQkJCS8qIDAxIDFGIDAxIDFGIDAxIDBFIDAxIDBFICovCi0JCQkJCWlmIChuID09IDB4MTMxMzEyMTIpIGdvdG8gd2VhazsKLQkJCQl9IGVsc2UgewotCQkJCQkvKiAwMSBFMCAwMSBFMCAwMSBGMSAwMSBGMSAqLwotCQkJCQlpZiAobiA9PSAweDE0MTQxNTE1KSBnb3RvIHdlYWs7Ci0JCQkJCS8qIDAxIEZFIDAxIEZFIDAxIEZFIDAxIEZFICovCi0JCQkJCWlmIChuID09IDB4MTYxNjE2MTYpIGdvdG8gd2VhazsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCWlmIChuIDwgMHgzNDM0MjUyNSkgewotCQkJCQkvKiAxRiAwMSAxRiAwMSAwRSAwMSAwRSAwMSAqLwotCQkJCQlpZiAobiA9PSAweDMxMzEyMTIxKSBnb3RvIHdlYWs7Ci0JCQkJCS8qIDFGIDFGIDFGIDFGIDBFIDBFIDBFIDBFICg/KSAqLwotCQkJCQlpZiAobiA9PSAweDMzMzMyMjIyKSBnb3RvIHdlYWs7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJLyogMUYgRTAgMUYgRTAgMEUgRjEgMEUgRjEgKi8KLQkJCQkJaWYgKG4gPT0gMHgzNDM0MjUyNSkgZ290byB3ZWFrOwotCQkJCQkvKiAxRiBGRSAxRiBGRSAwRSBGRSAwRSBGRSAqLwotCQkJCQlpZiAobiA9PSAweDM2MzYyNjI2KSBnb3RvIHdlYWs7Ci0JCQkJfQotCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKG4gPCAweDYxNjE2MTYxKSB7Ci0JCQkJaWYgKG4gPCAweDQ0NDQ1NTU1KSB7Ci0JCQkJCS8qIEUwIDAxIEUwIDAxIEYxIDAxIEYxIDAxICovCi0JCQkJCWlmIChuID09IDB4NDE0MTUxNTEpIGdvdG8gd2VhazsKLQkJCQkJLyogRTAgMUYgRTAgMUYgRjEgMEUgRjEgMEUgKi8KLQkJCQkJaWYgKG4gPT0gMHg0MzQzNTI1MikgZ290byB3ZWFrOwotCQkJCX0gZWxzZSB7Ci0JCQkJCS8qIEUwIEUwIEUwIEUwIEYxIEYxIEYxIEYxICg/KSAqLwotCQkJCQlpZiAobiA9PSAweDQ0NDQ1NTU1KSBnb3RvIHdlYWs7Ci0JCQkJCS8qIEUwIEZFIEUwIEZFIEYxIEZFIEYxIEZFICovCi0JCQkJCWlmIChuID09IDB4NDY0NjU2NTYpIGdvdG8gd2VhazsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCWlmIChuIDwgMHg2NDY0NjU2NSkgewotCQkJCQkvKiBGRSAwMSBGRSAwMSBGRSAwMSBGRSAwMSAqLwotCQkJCQlpZiAobiA9PSAweDYxNjE2MTYxKSBnb3RvIHdlYWs7Ci0JCQkJCS8qIEZFIDFGIEZFIDFGIEZFIDBFIEZFIDBFICovCi0JCQkJCWlmIChuID09IDB4NjM2MzYyNjIpIGdvdG8gd2VhazsKLQkJCQl9IGVsc2UgewotCQkJCQkvKiBGRSBFMCBGRSBFMCBGRSBGMSBGRSBGMSAqLwotCQkJCQlpZiAobiA9PSAweDY0NjQ2NTY1KSBnb3RvIHdlYWs7Ci0JCQkJCS8qIEZFIEZFIEZFIEZFIEZFIEZFIEZFIEZFICovCi0JCQkJCWlmIChuID09IDB4NjY2NjY2NjYpIGdvdG8gd2VhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci13ZWFrOgotCSpmbGFncyB8PSBDUllQVE9fVEZNX1JFU19XRUFLX0tFWTsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotRVhQT1JUX1NZTUJPTChjcnlwdG9fZGVzX2NoZWNrX2tleSk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiS2V5IENoZWNrIGZ1bmN0aW9uIGZvciBERVMgJiAgREVTMyBDaXBoZXIgQWxnb3JpdGhtcyIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2NyeXB0by9kZXNfczM5MC5jIGIvYXJjaC9zMzkwL2NyeXB0by9kZXNfczM5MC5jCmluZGV4IGNjNTQyMDEuLmE1MmJmZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vZGVzX3MzOTAuYworKysgYi9hcmNoL3MzOTAvY3J5cHRvL2Rlc19zMzkwLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogczM5MCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgREVTIENpcGhlciBBbGdvcml0aG0uCiAgKgotICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAzLDIwMDcKKyAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMywyMDExCiAgKiBBdXRob3Iocyk6IFRob21hcyBTcGF0emllcgogICoJICAgICAgSmFuIEdsYXViZXIgKGphbi5nbGF1YmVyQGRlLmlibS5jb20pCiAgKgpAQCAtMjIsMjIgKzIyLDE5IEBACiAKICNpbmNsdWRlICJjcnlwdF9zMzkwLmgiCiAKLSNkZWZpbmUgREVTM18xOTJfS0VZX1NJWkUJKDMgKiBERVNfS0VZX1NJWkUpCisjZGVmaW5lIERFUzNfS0VZX1NJWkUJKDMgKiBERVNfS0VZX1NJWkUpCiAKLXN0cnVjdCBjcnlwdF9zMzkwX2Rlc19jdHggewotCXU4IGl2W0RFU19CTE9DS19TSVpFXTsKLQl1OCBrZXlbREVTX0tFWV9TSVpFXTsKLX07CitzdGF0aWMgdTggKmN0cmJsazsKIAotc3RydWN0IGNyeXB0X3MzOTBfZGVzM18xOTJfY3R4IHsKK3N0cnVjdCBzMzkwX2Rlc19jdHggewogCXU4IGl2W0RFU19CTE9DS19TSVpFXTsKLQl1OCBrZXlbREVTM18xOTJfS0VZX1NJWkVdOworCXU4IGtleVtERVMzX0tFWV9TSVpFXTsKIH07CiAKIHN0YXRpYyBpbnQgZGVzX3NldGtleShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqa2V5LAotCQkgICAgICB1bnNpZ25lZCBpbnQga2V5bGVuKQorCQkgICAgICB1bnNpZ25lZCBpbnQga2V5X2xlbikKIHsKLQlzdHJ1Y3QgY3J5cHRfczM5MF9kZXNfY3R4ICpkY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlzdHJ1Y3QgczM5MF9kZXNfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwogCXUzMiAqZmxhZ3MgPSAmdGZtLT5jcnRfZmxhZ3M7CiAJdTMyIHRtcFtERVNfRVhQS0VZX1dPUkRTXTsKIApAQCAtNDcsMjIgKzQ0LDIyIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCW1lbWNweShkY3R4LT5rZXksIGtleSwga2V5bGVuKTsKKwltZW1jcHkoY3R4LT5rZXksIGtleSwga2V5X2xlbik7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGRlc19lbmNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpvdXQsIGNvbnN0IHU4ICppbikKIHsKLQlzdHJ1Y3QgY3J5cHRfczM5MF9kZXNfY3R4ICpkY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlzdHJ1Y3QgczM5MF9kZXNfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwogCi0JY3J5cHRfczM5MF9rbShLTV9ERUFfRU5DUllQVCwgZGN0eC0+a2V5LCBvdXQsIGluLCBERVNfQkxPQ0tfU0laRSk7CisJY3J5cHRfczM5MF9rbShLTV9ERUFfRU5DUllQVCwgY3R4LT5rZXksIG91dCwgaW4sIERFU19CTE9DS19TSVpFKTsKIH0KIAogc3RhdGljIHZvaWQgZGVzX2RlY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKm91dCwgY29uc3QgdTggKmluKQogewotCXN0cnVjdCBjcnlwdF9zMzkwX2Rlc19jdHggKmRjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXN0cnVjdCBzMzkwX2Rlc19jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CiAKLQljcnlwdF9zMzkwX2ttKEtNX0RFQV9ERUNSWVBULCBkY3R4LT5rZXksIG91dCwgaW4sIERFU19CTE9DS19TSVpFKTsKKwljcnlwdF9zMzkwX2ttKEtNX0RFQV9ERUNSWVBULCBjdHgtPmtleSwgb3V0LCBpbiwgREVTX0JMT0NLX1NJWkUpOwogfQogCiBzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgZGVzX2FsZyA9IHsKQEAgLTcxLDcgKzY4LDcgQEAKIAkuY3JhX3ByaW9yaXR5CQk9CUNSWVBUX1MzOTBfUFJJT1JJVFksCiAJLmNyYV9mbGFncwkJPQlDUllQVE9fQUxHX1RZUEVfQ0lQSEVSLAogCS5jcmFfYmxvY2tzaXplCQk9CURFU19CTE9DS19TSVpFLAotCS5jcmFfY3R4c2l6ZQkJPQlzaXplb2Yoc3RydWN0IGNyeXB0X3MzOTBfZGVzX2N0eCksCisJLmNyYV9jdHhzaXplCQk9CXNpemVvZihzdHJ1Y3QgczM5MF9kZXNfY3R4KSwKIAkuY3JhX21vZHVsZQkJPQlUSElTX01PRFVMRSwKIAkuY3JhX2xpc3QJCT0JTElTVF9IRUFEX0lOSVQoZGVzX2FsZy5jcmFfbGlzdCksCiAJLmNyYV91CQkJPQl7CkBAIC04Niw3ICs4Myw3IEBACiB9OwogCiBzdGF0aWMgaW50IGVjYl9kZXNhbGxfY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLCBsb25nIGZ1bmMsCi0JCQkgICAgdm9pZCAqcGFyYW0sIHN0cnVjdCBibGtjaXBoZXJfd2FsayAqd2FsaykKKwkJCSAgICB1OCAqa2V5LCBzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgKndhbGspCiB7CiAJaW50IHJldCA9IGJsa2NpcGhlcl93YWxrX3ZpcnQoZGVzYywgd2Fsayk7CiAJdW5zaWduZWQgaW50IG5ieXRlczsKQEAgLTk3LDcgKzk0LDcgQEAKIAkJdTggKm91dCA9IHdhbGstPmRzdC52aXJ0LmFkZHI7CiAJCXU4ICppbiA9IHdhbGstPnNyYy52aXJ0LmFkZHI7CiAKLQkJcmV0ID0gY3J5cHRfczM5MF9rbShmdW5jLCBwYXJhbSwgb3V0LCBpbiwgbik7CisJCXJldCA9IGNyeXB0X3MzOTBfa20oZnVuYywga2V5LCBvdXQsIGluLCBuKTsKIAkJQlVHX09OKChyZXQgPCAwKSB8fCAocmV0ICE9IG4pKTsKIAogCQluYnl0ZXMgJj0gREVTX0JMT0NLX1NJWkUgLSAxOwpAQCAtMTA4LDcgKzEwNSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgY2JjX2Rlc2FsbF9jcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsIGxvbmcgZnVuYywKLQkJCSAgICB2b2lkICpwYXJhbSwgc3RydWN0IGJsa2NpcGhlcl93YWxrICp3YWxrKQorCQkJICAgIHU4ICppdiwgc3RydWN0IGJsa2NpcGhlcl93YWxrICp3YWxrKQogewogCWludCByZXQgPSBibGtjaXBoZXJfd2Fsa192aXJ0KGRlc2MsIHdhbGspOwogCXVuc2lnbmVkIGludCBuYnl0ZXMgPSB3YWxrLT5uYnl0ZXM7CkBAIC0xMTYsMjAgKzExMywyMCBAQAogCWlmICghbmJ5dGVzKQogCQlnb3RvIG91dDsKIAotCW1lbWNweShwYXJhbSwgd2Fsay0+aXYsIERFU19CTE9DS19TSVpFKTsKKwltZW1jcHkoaXYsIHdhbGstPml2LCBERVNfQkxPQ0tfU0laRSk7CiAJZG8gewogCQkvKiBvbmx5IHVzZSBjb21wbGV0ZSBibG9ja3MgKi8KIAkJdW5zaWduZWQgaW50IG4gPSBuYnl0ZXMgJiB+KERFU19CTE9DS19TSVpFIC0gMSk7CiAJCXU4ICpvdXQgPSB3YWxrLT5kc3QudmlydC5hZGRyOwogCQl1OCAqaW4gPSB3YWxrLT5zcmMudmlydC5hZGRyOwogCi0JCXJldCA9IGNyeXB0X3MzOTBfa21jKGZ1bmMsIHBhcmFtLCBvdXQsIGluLCBuKTsKKwkJcmV0ID0gY3J5cHRfczM5MF9rbWMoZnVuYywgaXYsIG91dCwgaW4sIG4pOwogCQlCVUdfT04oKHJldCA8IDApIHx8IChyZXQgIT0gbikpOwogCiAJCW5ieXRlcyAmPSBERVNfQkxPQ0tfU0laRSAtIDE7CiAJCXJldCA9IGJsa2NpcGhlcl93YWxrX2RvbmUoZGVzYywgd2FsaywgbmJ5dGVzKTsKIAl9IHdoaWxlICgobmJ5dGVzID0gd2Fsay0+bmJ5dGVzKSk7Ci0JbWVtY3B5KHdhbGstPml2LCBwYXJhbSwgREVTX0JMT0NLX1NJWkUpOworCW1lbWNweSh3YWxrLT5pdiwgaXYsIERFU19CTE9DS19TSVpFKTsKIAogb3V0OgogCXJldHVybiByZXQ7CkBAIC0xMzksMjIgKzEzNiwyMiBAQAogCQkJICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAogCQkJICAgdW5zaWduZWQgaW50IG5ieXRlcykKIHsKLQlzdHJ1Y3QgY3J5cHRfczM5MF9kZXNfY3R4ICpzY3R4ID0gY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKTsKKwlzdHJ1Y3QgczM5MF9kZXNfY3R4ICpjdHggPSBjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pOwogCXN0cnVjdCBibGtjaXBoZXJfd2FsayB3YWxrOwogCiAJYmxrY2lwaGVyX3dhbGtfaW5pdCgmd2FsaywgZHN0LCBzcmMsIG5ieXRlcyk7Ci0JcmV0dXJuIGVjYl9kZXNhbGxfY3J5cHQoZGVzYywgS01fREVBX0VOQ1JZUFQsIHNjdHgtPmtleSwgJndhbGspOworCXJldHVybiBlY2JfZGVzYWxsX2NyeXB0KGRlc2MsIEtNX0RFQV9FTkNSWVBULCBjdHgtPmtleSwgJndhbGspOwogfQogCiBzdGF0aWMgaW50IGVjYl9kZXNfZGVjcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCiAJCQkgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCiAJCQkgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQogewotCXN0cnVjdCBjcnlwdF9zMzkwX2Rlc19jdHggKnNjdHggPSBjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pOworCXN0cnVjdCBzMzkwX2Rlc19jdHggKmN0eCA9IGNyeXB0b19ibGtjaXBoZXJfY3R4KGRlc2MtPnRmbSk7CiAJc3RydWN0IGJsa2NpcGhlcl93YWxrIHdhbGs7CiAKIAlibGtjaXBoZXJfd2Fsa19pbml0KCZ3YWxrLCBkc3QsIHNyYywgbmJ5dGVzKTsKLQlyZXR1cm4gZWNiX2Rlc2FsbF9jcnlwdChkZXNjLCBLTV9ERUFfREVDUllQVCwgc2N0eC0+a2V5LCAmd2Fsayk7CisJcmV0dXJuIGVjYl9kZXNhbGxfY3J5cHQoZGVzYywgS01fREVBX0RFQ1JZUFQsIGN0eC0+a2V5LCAmd2Fsayk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBlY2JfZGVzX2FsZyA9IHsKQEAgLTE2Myw3ICsxNjAsNyBAQAogCS5jcmFfcHJpb3JpdHkJCT0JQ1JZUFRfUzM5MF9DT01QT1NJVEVfUFJJT1JJVFksCiAJLmNyYV9mbGFncwkJPQlDUllQVE9fQUxHX1RZUEVfQkxLQ0lQSEVSLAogCS5jcmFfYmxvY2tzaXplCQk9CURFU19CTE9DS19TSVpFLAotCS5jcmFfY3R4c2l6ZQkJPQlzaXplb2Yoc3RydWN0IGNyeXB0X3MzOTBfZGVzX2N0eCksCisJLmNyYV9jdHhzaXplCQk9CXNpemVvZihzdHJ1Y3QgczM5MF9kZXNfY3R4KSwKIAkuY3JhX3R5cGUJCT0JJmNyeXB0b19ibGtjaXBoZXJfdHlwZSwKIAkuY3JhX21vZHVsZQkJPQlUSElTX01PRFVMRSwKIAkuY3JhX2xpc3QJCT0JTElTVF9IRUFEX0lOSVQoZWNiX2Rlc19hbGcuY3JhX2xpc3QpLApAQCAtMTgyLDIyICsxNzksMjIgQEAKIAkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKIAkJCSAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCiB7Ci0Jc3RydWN0IGNyeXB0X3MzOTBfZGVzX2N0eCAqc2N0eCA9IGNyeXB0b19ibGtjaXBoZXJfY3R4KGRlc2MtPnRmbSk7CisJc3RydWN0IHMzOTBfZGVzX2N0eCAqY3R4ID0gY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKTsKIAlzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgd2FsazsKIAogCWJsa2NpcGhlcl93YWxrX2luaXQoJndhbGssIGRzdCwgc3JjLCBuYnl0ZXMpOwotCXJldHVybiBjYmNfZGVzYWxsX2NyeXB0KGRlc2MsIEtNQ19ERUFfRU5DUllQVCwgc2N0eC0+aXYsICZ3YWxrKTsKKwlyZXR1cm4gY2JjX2Rlc2FsbF9jcnlwdChkZXNjLCBLTUNfREVBX0VOQ1JZUFQsIGN0eC0+aXYsICZ3YWxrKTsKIH0KIAogc3RhdGljIGludCBjYmNfZGVzX2RlY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAogCQkJICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAogCQkJICAgdW5zaWduZWQgaW50IG5ieXRlcykKIHsKLQlzdHJ1Y3QgY3J5cHRfczM5MF9kZXNfY3R4ICpzY3R4ID0gY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKTsKKwlzdHJ1Y3QgczM5MF9kZXNfY3R4ICpjdHggPSBjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pOwogCXN0cnVjdCBibGtjaXBoZXJfd2FsayB3YWxrOwogCiAJYmxrY2lwaGVyX3dhbGtfaW5pdCgmd2FsaywgZHN0LCBzcmMsIG5ieXRlcyk7Ci0JcmV0dXJuIGNiY19kZXNhbGxfY3J5cHQoZGVzYywgS01DX0RFQV9ERUNSWVBULCBzY3R4LT5pdiwgJndhbGspOworCXJldHVybiBjYmNfZGVzYWxsX2NyeXB0KGRlc2MsIEtNQ19ERUFfREVDUllQVCwgY3R4LT5pdiwgJndhbGspOwogfQogCiBzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgY2JjX2Rlc19hbGcgPSB7CkBAIC0yMDYsNyArMjAzLDcgQEAKIAkuY3JhX3ByaW9yaXR5CQk9CUNSWVBUX1MzOTBfQ09NUE9TSVRFX1BSSU9SSVRZLAogCS5jcmFfZmxhZ3MJCT0JQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUiwKIAkuY3JhX2Jsb2Nrc2l6ZQkJPQlERVNfQkxPQ0tfU0laRSwKLQkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mKHN0cnVjdCBjcnlwdF9zMzkwX2Rlc19jdHgpLAorCS5jcmFfY3R4c2l6ZQkJPQlzaXplb2Yoc3RydWN0IHMzOTBfZGVzX2N0eCksCiAJLmNyYV90eXBlCQk9CSZjcnlwdG9fYmxrY2lwaGVyX3R5cGUsCiAJLmNyYV9tb2R1bGUJCT0JVEhJU19NT0RVTEUsCiAJLmNyYV9saXN0CQk9CUxJU1RfSEVBRF9JTklUKGNiY19kZXNfYWxnLmNyYV9saXN0KSwKQEAgLTIzNSwxMCArMjMyLDEwIEBACiAgKiAgIHByb3BlcnR5LgogICoKICAqLwotc3RhdGljIGludCBkZXMzXzE5Ml9zZXRrZXkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmtleSwKLQkJCSAgIHVuc2lnbmVkIGludCBrZXlsZW4pCitzdGF0aWMgaW50IGRlczNfc2V0a2V5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICprZXksCisJCSAgICAgICB1bnNpZ25lZCBpbnQga2V5X2xlbikKIHsKLQlzdHJ1Y3QgY3J5cHRfczM5MF9kZXMzXzE5Ml9jdHggKmRjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXN0cnVjdCBzMzkwX2Rlc19jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CiAJdTMyICpmbGFncyA9ICZ0Zm0tPmNydF9mbGFnczsKIAogCWlmICghKG1lbWNtcChrZXksICZrZXlbREVTX0tFWV9TSVpFXSwgREVTX0tFWV9TSVpFKSAmJgpAQCAtMjQ4LDE0MSArMjQ1LDI3NiBAQAogCQkqZmxhZ3MgfD0gQ1JZUFRPX1RGTV9SRVNfV0VBS19LRVk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQltZW1jcHkoZGN0eC0+a2V5LCBrZXksIGtleWxlbik7CisJbWVtY3B5KGN0eC0+a2V5LCBrZXksIGtleV9sZW4pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBkZXMzXzE5Ml9lbmNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCitzdGF0aWMgdm9pZCBkZXMzX2VuY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKmRzdCwgY29uc3QgdTggKnNyYykKIHsKLQlzdHJ1Y3QgY3J5cHRfczM5MF9kZXMzXzE5Ml9jdHggKmRjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXN0cnVjdCBzMzkwX2Rlc19jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CiAKLQljcnlwdF9zMzkwX2ttKEtNX1RERUFfMTkyX0VOQ1JZUFQsIGRjdHgtPmtleSwgZHN0LCAodm9pZCopc3JjLAotCQkgICAgICBERVNfQkxPQ0tfU0laRSk7CisJY3J5cHRfczM5MF9rbShLTV9UREVBXzE5Ml9FTkNSWVBULCBjdHgtPmtleSwgZHN0LCBzcmMsIERFU19CTE9DS19TSVpFKTsKIH0KIAotc3RhdGljIHZvaWQgZGVzM18xOTJfZGVjcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKQorc3RhdGljIHZvaWQgZGVzM19kZWNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCiB7Ci0Jc3RydWN0IGNyeXB0X3MzOTBfZGVzM18xOTJfY3R4ICpkY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlzdHJ1Y3QgczM5MF9kZXNfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwogCi0JY3J5cHRfczM5MF9rbShLTV9UREVBXzE5Ml9ERUNSWVBULCBkY3R4LT5rZXksIGRzdCwgKHZvaWQqKXNyYywKLQkJICAgICAgREVTX0JMT0NLX1NJWkUpOworCWNyeXB0X3MzOTBfa20oS01fVERFQV8xOTJfREVDUllQVCwgY3R4LT5rZXksIGRzdCwgc3JjLCBERVNfQkxPQ0tfU0laRSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBkZXMzXzE5Ml9hbGcgPSB7CitzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgZGVzM19hbGcgPSB7CiAJLmNyYV9uYW1lCQk9CSJkZXMzX2VkZSIsCiAJLmNyYV9kcml2ZXJfbmFtZQk9CSJkZXMzX2VkZS1zMzkwIiwKIAkuY3JhX3ByaW9yaXR5CQk9CUNSWVBUX1MzOTBfUFJJT1JJVFksCiAJLmNyYV9mbGFncwkJPQlDUllQVE9fQUxHX1RZUEVfQ0lQSEVSLAogCS5jcmFfYmxvY2tzaXplCQk9CURFU19CTE9DS19TSVpFLAotCS5jcmFfY3R4c2l6ZQkJPQlzaXplb2Yoc3RydWN0IGNyeXB0X3MzOTBfZGVzM18xOTJfY3R4KSwKKwkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mKHN0cnVjdCBzMzkwX2Rlc19jdHgpLAogCS5jcmFfbW9kdWxlCQk9CVRISVNfTU9EVUxFLAotCS5jcmFfbGlzdAkJPQlMSVNUX0hFQURfSU5JVChkZXMzXzE5Ml9hbGcuY3JhX2xpc3QpLAorCS5jcmFfbGlzdAkJPQlMSVNUX0hFQURfSU5JVChkZXMzX2FsZy5jcmFfbGlzdCksCiAJLmNyYV91CQkJPQl7CiAJCS5jaXBoZXIgPSB7Ci0JCQkuY2lhX21pbl9rZXlzaXplCT0JREVTM18xOTJfS0VZX1NJWkUsCi0JCQkuY2lhX21heF9rZXlzaXplCT0JREVTM18xOTJfS0VZX1NJWkUsCi0JCQkuY2lhX3NldGtleQkJPQlkZXMzXzE5Ml9zZXRrZXksCi0JCQkuY2lhX2VuY3J5cHQJCT0JZGVzM18xOTJfZW5jcnlwdCwKLQkJCS5jaWFfZGVjcnlwdAkJPQlkZXMzXzE5Ml9kZWNyeXB0LAorCQkJLmNpYV9taW5fa2V5c2l6ZQk9CURFUzNfS0VZX1NJWkUsCisJCQkuY2lhX21heF9rZXlzaXplCT0JREVTM19LRVlfU0laRSwKKwkJCS5jaWFfc2V0a2V5CQk9CWRlczNfc2V0a2V5LAorCQkJLmNpYV9lbmNyeXB0CQk9CWRlczNfZW5jcnlwdCwKKwkJCS5jaWFfZGVjcnlwdAkJPQlkZXMzX2RlY3J5cHQsCiAJCX0KIAl9CiB9OwogCi1zdGF0aWMgaW50IGVjYl9kZXMzXzE5Ml9lbmNyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKLQkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwKLQkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywgdW5zaWduZWQgaW50IG5ieXRlcykKK3N0YXRpYyBpbnQgZWNiX2RlczNfZW5jcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCisJCQkgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkJICAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCiB7Ci0Jc3RydWN0IGNyeXB0X3MzOTBfZGVzM18xOTJfY3R4ICpzY3R4ID0gY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKTsKKwlzdHJ1Y3QgczM5MF9kZXNfY3R4ICpjdHggPSBjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pOwogCXN0cnVjdCBibGtjaXBoZXJfd2FsayB3YWxrOwogCiAJYmxrY2lwaGVyX3dhbGtfaW5pdCgmd2FsaywgZHN0LCBzcmMsIG5ieXRlcyk7Ci0JcmV0dXJuIGVjYl9kZXNhbGxfY3J5cHQoZGVzYywgS01fVERFQV8xOTJfRU5DUllQVCwgc2N0eC0+a2V5LCAmd2Fsayk7CisJcmV0dXJuIGVjYl9kZXNhbGxfY3J5cHQoZGVzYywgS01fVERFQV8xOTJfRU5DUllQVCwgY3R4LT5rZXksICZ3YWxrKTsKIH0KIAotc3RhdGljIGludCBlY2JfZGVzM18xOTJfZGVjcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCi0JCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCi0JCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsIHVuc2lnbmVkIGludCBuYnl0ZXMpCitzdGF0aWMgaW50IGVjYl9kZXMzX2RlY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkJICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKwkJCSAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQogewotCXN0cnVjdCBjcnlwdF9zMzkwX2RlczNfMTkyX2N0eCAqc2N0eCA9IGNyeXB0b19ibGtjaXBoZXJfY3R4KGRlc2MtPnRmbSk7CisJc3RydWN0IHMzOTBfZGVzX2N0eCAqY3R4ID0gY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKTsKIAlzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgd2FsazsKIAogCWJsa2NpcGhlcl93YWxrX2luaXQoJndhbGssIGRzdCwgc3JjLCBuYnl0ZXMpOwotCXJldHVybiBlY2JfZGVzYWxsX2NyeXB0KGRlc2MsIEtNX1RERUFfMTkyX0RFQ1JZUFQsIHNjdHgtPmtleSwgJndhbGspOworCXJldHVybiBlY2JfZGVzYWxsX2NyeXB0KGRlc2MsIEtNX1RERUFfMTkyX0RFQ1JZUFQsIGN0eC0+a2V5LCAmd2Fsayk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBlY2JfZGVzM18xOTJfYWxnID0geworc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGVjYl9kZXMzX2FsZyA9IHsKIAkuY3JhX25hbWUJCT0JImVjYihkZXMzX2VkZSkiLAogCS5jcmFfZHJpdmVyX25hbWUJPQkiZWNiLWRlczNfZWRlLXMzOTAiLAogCS5jcmFfcHJpb3JpdHkJCT0JQ1JZUFRfUzM5MF9DT01QT1NJVEVfUFJJT1JJVFksCiAJLmNyYV9mbGFncwkJPQlDUllQVE9fQUxHX1RZUEVfQkxLQ0lQSEVSLAogCS5jcmFfYmxvY2tzaXplCQk9CURFU19CTE9DS19TSVpFLAotCS5jcmFfY3R4c2l6ZQkJPQlzaXplb2Yoc3RydWN0IGNyeXB0X3MzOTBfZGVzM18xOTJfY3R4KSwKKwkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mKHN0cnVjdCBzMzkwX2Rlc19jdHgpLAogCS5jcmFfdHlwZQkJPQkmY3J5cHRvX2Jsa2NpcGhlcl90eXBlLAogCS5jcmFfbW9kdWxlCQk9CVRISVNfTU9EVUxFLAogCS5jcmFfbGlzdAkJPQlMSVNUX0hFQURfSU5JVCgKLQkJCQkJCWVjYl9kZXMzXzE5Ml9hbGcuY3JhX2xpc3QpLAorCQkJCQkJZWNiX2RlczNfYWxnLmNyYV9saXN0KSwKIAkuY3JhX3UJCQk9CXsKIAkJLmJsa2NpcGhlciA9IHsKLQkJCS5taW5fa2V5c2l6ZQkJPQlERVMzXzE5Ml9LRVlfU0laRSwKLQkJCS5tYXhfa2V5c2l6ZQkJPQlERVMzXzE5Ml9LRVlfU0laRSwKLQkJCS5zZXRrZXkJCQk9CWRlczNfMTkyX3NldGtleSwKLQkJCS5lbmNyeXB0CQk9CWVjYl9kZXMzXzE5Ml9lbmNyeXB0LAotCQkJLmRlY3J5cHQJCT0JZWNiX2RlczNfMTkyX2RlY3J5cHQsCisJCQkubWluX2tleXNpemUJCT0JREVTM19LRVlfU0laRSwKKwkJCS5tYXhfa2V5c2l6ZQkJPQlERVMzX0tFWV9TSVpFLAorCQkJLnNldGtleQkJCT0JZGVzM19zZXRrZXksCisJCQkuZW5jcnlwdAkJPQllY2JfZGVzM19lbmNyeXB0LAorCQkJLmRlY3J5cHQJCT0JZWNiX2RlczNfZGVjcnlwdCwKIAkJfQogCX0KIH07CiAKLXN0YXRpYyBpbnQgY2JjX2RlczNfMTkyX2VuY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAotCQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LAotCQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKQorc3RhdGljIGludCBjYmNfZGVzM19lbmNyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJCSAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCQkgICAgdW5zaWduZWQgaW50IG5ieXRlcykKIHsKLQlzdHJ1Y3QgY3J5cHRfczM5MF9kZXMzXzE5Ml9jdHggKnNjdHggPSBjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pOworCXN0cnVjdCBzMzkwX2Rlc19jdHggKmN0eCA9IGNyeXB0b19ibGtjaXBoZXJfY3R4KGRlc2MtPnRmbSk7CiAJc3RydWN0IGJsa2NpcGhlcl93YWxrIHdhbGs7CiAKIAlibGtjaXBoZXJfd2Fsa19pbml0KCZ3YWxrLCBkc3QsIHNyYywgbmJ5dGVzKTsKLQlyZXR1cm4gY2JjX2Rlc2FsbF9jcnlwdChkZXNjLCBLTUNfVERFQV8xOTJfRU5DUllQVCwgc2N0eC0+aXYsICZ3YWxrKTsKKwlyZXR1cm4gY2JjX2Rlc2FsbF9jcnlwdChkZXNjLCBLTUNfVERFQV8xOTJfRU5DUllQVCwgY3R4LT5pdiwgJndhbGspOwogfQogCi1zdGF0aWMgaW50IGNiY19kZXMzXzE5Ml9kZWNyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKLQkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwKLQkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywgdW5zaWduZWQgaW50IG5ieXRlcykKK3N0YXRpYyBpbnQgY2JjX2RlczNfZGVjcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCisJCQkgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkJICAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCiB7Ci0Jc3RydWN0IGNyeXB0X3MzOTBfZGVzM18xOTJfY3R4ICpzY3R4ID0gY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKTsKKwlzdHJ1Y3QgczM5MF9kZXNfY3R4ICpjdHggPSBjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pOwogCXN0cnVjdCBibGtjaXBoZXJfd2FsayB3YWxrOwogCiAJYmxrY2lwaGVyX3dhbGtfaW5pdCgmd2FsaywgZHN0LCBzcmMsIG5ieXRlcyk7Ci0JcmV0dXJuIGNiY19kZXNhbGxfY3J5cHQoZGVzYywgS01DX1RERUFfMTkyX0RFQ1JZUFQsIHNjdHgtPml2LCAmd2Fsayk7CisJcmV0dXJuIGNiY19kZXNhbGxfY3J5cHQoZGVzYywgS01DX1RERUFfMTkyX0RFQ1JZUFQsIGN0eC0+aXYsICZ3YWxrKTsKIH0KIAotc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGNiY19kZXMzXzE5Ml9hbGcgPSB7CitzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgY2JjX2RlczNfYWxnID0gewogCS5jcmFfbmFtZQkJPQkiY2JjKGRlczNfZWRlKSIsCiAJLmNyYV9kcml2ZXJfbmFtZQk9CSJjYmMtZGVzM19lZGUtczM5MCIsCiAJLmNyYV9wcmlvcml0eQkJPQlDUllQVF9TMzkwX0NPTVBPU0lURV9QUklPUklUWSwKIAkuY3JhX2ZsYWdzCQk9CUNSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVIsCiAJLmNyYV9ibG9ja3NpemUJCT0JREVTX0JMT0NLX1NJWkUsCi0JLmNyYV9jdHhzaXplCQk9CXNpemVvZihzdHJ1Y3QgY3J5cHRfczM5MF9kZXMzXzE5Ml9jdHgpLAorCS5jcmFfY3R4c2l6ZQkJPQlzaXplb2Yoc3RydWN0IHMzOTBfZGVzX2N0eCksCiAJLmNyYV90eXBlCQk9CSZjcnlwdG9fYmxrY2lwaGVyX3R5cGUsCiAJLmNyYV9tb2R1bGUJCT0JVEhJU19NT0RVTEUsCiAJLmNyYV9saXN0CQk9CUxJU1RfSEVBRF9JTklUKAotCQkJCQkJY2JjX2RlczNfMTkyX2FsZy5jcmFfbGlzdCksCisJCQkJCQljYmNfZGVzM19hbGcuY3JhX2xpc3QpLAogCS5jcmFfdQkJCT0JewogCQkuYmxrY2lwaGVyID0gewotCQkJLm1pbl9rZXlzaXplCQk9CURFUzNfMTkyX0tFWV9TSVpFLAotCQkJLm1heF9rZXlzaXplCQk9CURFUzNfMTkyX0tFWV9TSVpFLAorCQkJLm1pbl9rZXlzaXplCQk9CURFUzNfS0VZX1NJWkUsCisJCQkubWF4X2tleXNpemUJCT0JREVTM19LRVlfU0laRSwKIAkJCS5pdnNpemUJCQk9CURFU19CTE9DS19TSVpFLAotCQkJLnNldGtleQkJCT0JZGVzM18xOTJfc2V0a2V5LAotCQkJLmVuY3J5cHQJCT0JY2JjX2RlczNfMTkyX2VuY3J5cHQsCi0JCQkuZGVjcnlwdAkJPQljYmNfZGVzM18xOTJfZGVjcnlwdCwKKwkJCS5zZXRrZXkJCQk9CWRlczNfc2V0a2V5LAorCQkJLmVuY3J5cHQJCT0JY2JjX2RlczNfZW5jcnlwdCwKKwkJCS5kZWNyeXB0CQk9CWNiY19kZXMzX2RlY3J5cHQsCiAJCX0KIAl9CiB9OwogCi1zdGF0aWMgaW50IGRlc19zMzkwX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgY3RyX2Rlc2FsbF9jcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsIGxvbmcgZnVuYywKKwkJCSAgICBzdHJ1Y3QgczM5MF9kZXNfY3R4ICpjdHgsIHN0cnVjdCBibGtjaXBoZXJfd2FsayAqd2FsaykKK3sKKwlpbnQgcmV0ID0gYmxrY2lwaGVyX3dhbGtfdmlydF9ibG9jayhkZXNjLCB3YWxrLCBERVNfQkxPQ0tfU0laRSk7CisJdW5zaWduZWQgaW50IGksIG4sIG5ieXRlczsKKwl1OCBidWZbREVTX0JMT0NLX1NJWkVdOworCXU4ICpvdXQsICppbjsKKworCW1lbWNweShjdHJibGssIHdhbGstPml2LCBERVNfQkxPQ0tfU0laRSk7CisJd2hpbGUgKChuYnl0ZXMgPSB3YWxrLT5uYnl0ZXMpID49IERFU19CTE9DS19TSVpFKSB7CisJCW91dCA9IHdhbGstPmRzdC52aXJ0LmFkZHI7CisJCWluID0gd2Fsay0+c3JjLnZpcnQuYWRkcjsKKwkJd2hpbGUgKG5ieXRlcyA+PSBERVNfQkxPQ0tfU0laRSkgeworCQkJLyogYWxpZ24gdG8gYmxvY2sgc2l6ZSwgbWF4LiBQQUdFX1NJWkUgKi8KKwkJCW4gPSAobmJ5dGVzID4gUEFHRV9TSVpFKSA/IFBBR0VfU0laRSA6CisJCQkJbmJ5dGVzICYgfihERVNfQkxPQ0tfU0laRSAtIDEpOworCQkJZm9yIChpID0gREVTX0JMT0NLX1NJWkU7IGkgPCBuOyBpICs9IERFU19CTE9DS19TSVpFKSB7CisJCQkJbWVtY3B5KGN0cmJsayArIGksIGN0cmJsayArIGkgLSBERVNfQkxPQ0tfU0laRSwKKwkJCQkgICAgICAgREVTX0JMT0NLX1NJWkUpOworCQkJCWNyeXB0b19pbmMoY3RyYmxrICsgaSwgREVTX0JMT0NLX1NJWkUpOworCQkJfQorCQkJcmV0ID0gY3J5cHRfczM5MF9rbWN0cihmdW5jLCBjdHgtPmtleSwgb3V0LCBpbiwgbiwgY3RyYmxrKTsKKwkJCUJVR19PTigocmV0IDwgMCkgfHwgKHJldCAhPSBuKSk7CisJCQlpZiAobiA+IERFU19CTE9DS19TSVpFKQorCQkJCW1lbWNweShjdHJibGssIGN0cmJsayArIG4gLSBERVNfQkxPQ0tfU0laRSwKKwkJCQkgICAgICAgREVTX0JMT0NLX1NJWkUpOworCQkJY3J5cHRvX2luYyhjdHJibGssIERFU19CTE9DS19TSVpFKTsKKwkJCW91dCArPSBuOworCQkJaW4gKz0gbjsKKwkJCW5ieXRlcyAtPSBuOworCQl9CisJCXJldCA9IGJsa2NpcGhlcl93YWxrX2RvbmUoZGVzYywgd2FsaywgbmJ5dGVzKTsKKwl9CisKKwkvKiBmaW5hbCBibG9jayBtYXkgYmUgPCBERVNfQkxPQ0tfU0laRSwgY29weSBvbmx5IG5ieXRlcyAqLworCWlmIChuYnl0ZXMpIHsKKwkJb3V0ID0gd2Fsay0+ZHN0LnZpcnQuYWRkcjsKKwkJaW4gPSB3YWxrLT5zcmMudmlydC5hZGRyOworCQlyZXQgPSBjcnlwdF9zMzkwX2ttY3RyKGZ1bmMsIGN0eC0+a2V5LCBidWYsIGluLAorCQkJCSAgICAgICBERVNfQkxPQ0tfU0laRSwgY3RyYmxrKTsKKwkJQlVHX09OKHJldCA8IDAgfHwgcmV0ICE9IERFU19CTE9DS19TSVpFKTsKKwkJbWVtY3B5KG91dCwgYnVmLCBuYnl0ZXMpOworCQljcnlwdG9faW5jKGN0cmJsaywgREVTX0JMT0NLX1NJWkUpOworCQlyZXQgPSBibGtjaXBoZXJfd2Fsa19kb25lKGRlc2MsIHdhbGssIDApOworCX0KKwltZW1jcHkod2Fsay0+aXYsIGN0cmJsaywgREVTX0JMT0NLX1NJWkUpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY3RyX2Rlc19lbmNyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKwkJCSAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJc3RydWN0IHMzOTBfZGVzX2N0eCAqY3R4ID0gY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKTsKKwlzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgd2FsazsKKworCWJsa2NpcGhlcl93YWxrX2luaXQoJndhbGssIGRzdCwgc3JjLCBuYnl0ZXMpOworCXJldHVybiBjdHJfZGVzYWxsX2NyeXB0KGRlc2MsIEtNQ1RSX0RFQV9FTkNSWVBULCBjdHgsICZ3YWxrKTsKK30KKworc3RhdGljIGludCBjdHJfZGVzX2RlY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkJICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkJICAgdW5zaWduZWQgaW50IG5ieXRlcykKK3sKKwlzdHJ1Y3QgczM5MF9kZXNfY3R4ICpjdHggPSBjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pOworCXN0cnVjdCBibGtjaXBoZXJfd2FsayB3YWxrOworCisJYmxrY2lwaGVyX3dhbGtfaW5pdCgmd2FsaywgZHN0LCBzcmMsIG5ieXRlcyk7CisJcmV0dXJuIGN0cl9kZXNhbGxfY3J5cHQoZGVzYywgS01DVFJfREVBX0RFQ1JZUFQsIGN0eCwgJndhbGspOworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgY3RyX2Rlc19hbGcgPSB7CisJLmNyYV9uYW1lCQk9CSJjdHIoZGVzKSIsCisJLmNyYV9kcml2ZXJfbmFtZQk9CSJjdHItZGVzLXMzOTAiLAorCS5jcmFfcHJpb3JpdHkJCT0JQ1JZUFRfUzM5MF9DT01QT1NJVEVfUFJJT1JJVFksCisJLmNyYV9mbGFncwkJPQlDUllQVE9fQUxHX1RZUEVfQkxLQ0lQSEVSLAorCS5jcmFfYmxvY2tzaXplCQk9CTEsCisJLmNyYV9jdHhzaXplCQk9CXNpemVvZihzdHJ1Y3QgczM5MF9kZXNfY3R4KSwKKwkuY3JhX3R5cGUJCT0JJmNyeXB0b19ibGtjaXBoZXJfdHlwZSwKKwkuY3JhX21vZHVsZQkJPQlUSElTX01PRFVMRSwKKwkuY3JhX2xpc3QJCT0JTElTVF9IRUFEX0lOSVQoY3RyX2Rlc19hbGcuY3JhX2xpc3QpLAorCS5jcmFfdQkJCT0JeworCQkuYmxrY2lwaGVyID0geworCQkJLm1pbl9rZXlzaXplCQk9CURFU19LRVlfU0laRSwKKwkJCS5tYXhfa2V5c2l6ZQkJPQlERVNfS0VZX1NJWkUsCisJCQkuaXZzaXplCQkJPQlERVNfQkxPQ0tfU0laRSwKKwkJCS5zZXRrZXkJCQk9CWRlc19zZXRrZXksCisJCQkuZW5jcnlwdAkJPQljdHJfZGVzX2VuY3J5cHQsCisJCQkuZGVjcnlwdAkJPQljdHJfZGVzX2RlY3J5cHQsCisJCX0KKwl9Cit9OworCitzdGF0aWMgaW50IGN0cl9kZXMzX2VuY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkJICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKwkJCSAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQoreworCXN0cnVjdCBzMzkwX2Rlc19jdHggKmN0eCA9IGNyeXB0b19ibGtjaXBoZXJfY3R4KGRlc2MtPnRmbSk7CisJc3RydWN0IGJsa2NpcGhlcl93YWxrIHdhbGs7CisKKwlibGtjaXBoZXJfd2Fsa19pbml0KCZ3YWxrLCBkc3QsIHNyYywgbmJ5dGVzKTsKKwlyZXR1cm4gY3RyX2Rlc2FsbF9jcnlwdChkZXNjLCBLTUNUUl9UREVBXzE5Ml9FTkNSWVBULCBjdHgsICZ3YWxrKTsKK30KKworc3RhdGljIGludCBjdHJfZGVzM19kZWNyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJCSAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCQkgICAgdW5zaWduZWQgaW50IG5ieXRlcykKK3sKKwlzdHJ1Y3QgczM5MF9kZXNfY3R4ICpjdHggPSBjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pOworCXN0cnVjdCBibGtjaXBoZXJfd2FsayB3YWxrOworCisJYmxrY2lwaGVyX3dhbGtfaW5pdCgmd2FsaywgZHN0LCBzcmMsIG5ieXRlcyk7CisJcmV0dXJuIGN0cl9kZXNhbGxfY3J5cHQoZGVzYywgS01DVFJfVERFQV8xOTJfREVDUllQVCwgY3R4LCAmd2Fsayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBjdHJfZGVzM19hbGcgPSB7CisJLmNyYV9uYW1lCQk9CSJjdHIoZGVzM19lZGUpIiwKKwkuY3JhX2RyaXZlcl9uYW1lCT0JImN0ci1kZXMzX2VkZS1zMzkwIiwKKwkuY3JhX3ByaW9yaXR5CQk9CUNSWVBUX1MzOTBfQ09NUE9TSVRFX1BSSU9SSVRZLAorCS5jcmFfZmxhZ3MJCT0JQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUiwKKwkuY3JhX2Jsb2Nrc2l6ZQkJPQkxLAorCS5jcmFfY3R4c2l6ZQkJPQlzaXplb2Yoc3RydWN0IHMzOTBfZGVzX2N0eCksCisJLmNyYV90eXBlCQk9CSZjcnlwdG9fYmxrY2lwaGVyX3R5cGUsCisJLmNyYV9tb2R1bGUJCT0JVEhJU19NT0RVTEUsCisJLmNyYV9saXN0CQk9CUxJU1RfSEVBRF9JTklUKGN0cl9kZXMzX2FsZy5jcmFfbGlzdCksCisJLmNyYV91CQkJPQl7CisJCS5ibGtjaXBoZXIgPSB7CisJCQkubWluX2tleXNpemUJCT0JREVTM19LRVlfU0laRSwKKwkJCS5tYXhfa2V5c2l6ZQkJPQlERVMzX0tFWV9TSVpFLAorCQkJLml2c2l6ZQkJCT0JREVTX0JMT0NLX1NJWkUsCisJCQkuc2V0a2V5CQkJPQlkZXMzX3NldGtleSwKKwkJCS5lbmNyeXB0CQk9CWN0cl9kZXMzX2VuY3J5cHQsCisJCQkuZGVjcnlwdAkJPQljdHJfZGVzM19kZWNyeXB0LAorCQl9CisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgZGVzX3MzOTBfaW5pdCh2b2lkKQogewogCWludCByZXQ7CiAKLQlpZiAoIWNyeXB0X3MzOTBfZnVuY19hdmFpbGFibGUoS01fREVBX0VOQ1JZUFQpIHx8Ci0JICAgICFjcnlwdF9zMzkwX2Z1bmNfYXZhaWxhYmxlKEtNX1RERUFfMTkyX0VOQ1JZUFQpKQorCWlmICghY3J5cHRfczM5MF9mdW5jX2F2YWlsYWJsZShLTV9ERUFfRU5DUllQVCwgQ1JZUFRfUzM5MF9NU0EpIHx8CisJICAgICFjcnlwdF9zMzkwX2Z1bmNfYXZhaWxhYmxlKEtNX1RERUFfMTkyX0VOQ1JZUFQsIENSWVBUX1MzOTBfTVNBKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJcmV0ID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmZGVzX2FsZyk7CkBAIC0zOTQsMjMgKzUyNiw0NiBAQAogCXJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmNiY19kZXNfYWxnKTsKIAlpZiAocmV0KQogCQlnb3RvIGNiY19kZXNfZXJyOwotCXJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmRlczNfMTkyX2FsZyk7CisJcmV0ID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmZGVzM19hbGcpOwogCWlmIChyZXQpCi0JCWdvdG8gZGVzM18xOTJfZXJyOwotCXJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmVjYl9kZXMzXzE5Ml9hbGcpOworCQlnb3RvIGRlczNfZXJyOworCXJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmVjYl9kZXMzX2FsZyk7CiAJaWYgKHJldCkKLQkJZ290byBlY2JfZGVzM18xOTJfZXJyOwotCXJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmNiY19kZXMzXzE5Ml9hbGcpOworCQlnb3RvIGVjYl9kZXMzX2VycjsKKwlyZXQgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZjYmNfZGVzM19hbGcpOwogCWlmIChyZXQpCi0JCWdvdG8gY2JjX2RlczNfMTkyX2VycjsKKwkJZ290byBjYmNfZGVzM19lcnI7CisKKwlpZiAoY3J5cHRfczM5MF9mdW5jX2F2YWlsYWJsZShLTUNUUl9ERUFfRU5DUllQVCwKKwkJCUNSWVBUX1MzOTBfTVNBIHwgQ1JZUFRfUzM5MF9NU0E0KSAmJgorCSAgICBjcnlwdF9zMzkwX2Z1bmNfYXZhaWxhYmxlKEtNQ1RSX1RERUFfMTkyX0VOQ1JZUFQsCisJCQlDUllQVF9TMzkwX01TQSB8IENSWVBUX1MzOTBfTVNBNCkpIHsKKwkJcmV0ID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmY3RyX2Rlc19hbGcpOworCQlpZiAocmV0KQorCQkJZ290byBjdHJfZGVzX2VycjsKKwkJcmV0ID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmY3RyX2RlczNfYWxnKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gY3RyX2RlczNfZXJyOworCQljdHJibGsgPSAodTggKikgX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOworCQlpZiAoIWN0cmJsaykgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gY3RyX21lbV9lcnI7CisJCX0KKwl9CiBvdXQ6CiAJcmV0dXJuIHJldDsKIAotY2JjX2RlczNfMTkyX2VycjoKLQljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmVjYl9kZXMzXzE5Ml9hbGcpOwotZWNiX2RlczNfMTkyX2VycjoKLQljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmRlczNfMTkyX2FsZyk7Ci1kZXMzXzE5Ml9lcnI6CitjdHJfbWVtX2VycjoKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmN0cl9kZXMzX2FsZyk7CitjdHJfZGVzM19lcnI6CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZjdHJfZGVzX2FsZyk7CitjdHJfZGVzX2VycjoKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmNiY19kZXMzX2FsZyk7CitjYmNfZGVzM19lcnI6CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZlY2JfZGVzM19hbGcpOworZWNiX2RlczNfZXJyOgorCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmZGVzM19hbGcpOworZGVzM19lcnI6CiAJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZjYmNfZGVzX2FsZyk7CiBjYmNfZGVzX2VycjoKIAljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmVjYl9kZXNfYWxnKTsKQEAgLTQyMiw5ICs1NzcsMTQgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGRlc19zMzkwX2V4aXQodm9pZCkKIHsKLQljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmNiY19kZXMzXzE5Ml9hbGcpOwotCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmZWNiX2RlczNfMTkyX2FsZyk7Ci0JY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZkZXMzXzE5Ml9hbGcpOworCWlmIChjdHJibGspIHsKKwkJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZjdHJfZGVzX2FsZyk7CisJCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmY3RyX2RlczNfYWxnKTsKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBjdHJibGspOworCX0KKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmNiY19kZXMzX2FsZyk7CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZlY2JfZGVzM19hbGcpOworCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmZGVzM19hbGcpOwogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmY2JjX2Rlc19hbGcpOwogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmZWNiX2Rlc19hbGcpOwogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmZGVzX2FsZyk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL2doYXNoX3MzOTAuYyBiL2FyY2gvczM5MC9jcnlwdG8vZ2hhc2hfczM5MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYmQxNzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3MzOTAvY3J5cHRvL2doYXNoX3MzOTAuYwpAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIENyeXB0b2dyYXBoaWMgQVBJLgorICoKKyAqIHMzOTAgaW1wbGVtZW50YXRpb24gb2YgdGhlIEdIQVNIIGFsZ29yaXRobSBmb3IgR0NNIChHYWxvaXMvQ291bnRlciBNb2RlKS4KKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMTEKKyAqIEF1dGhvcihzKTogR2VyYWxkIFNjaGFlZmVyIDxnZXJhbGQuc2NoYWVmZXJAZGUuaWJtLmNvbT4KKyAqLworCisjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2hhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgImNyeXB0X3MzOTAuaCIKKworI2RlZmluZSBHSEFTSF9CTE9DS19TSVpFCTE2CisjZGVmaW5lIEdIQVNIX0RJR0VTVF9TSVpFCTE2CisKK3N0cnVjdCBnaGFzaF9jdHggeworCXU4IGljdlsxNl07CisJdTgga2V5WzE2XTsKK307CisKK3N0cnVjdCBnaGFzaF9kZXNjX2N0eCB7CisJdTggYnVmZmVyW0dIQVNIX0JMT0NLX1NJWkVdOworCXUzMiBieXRlczsKK307CisKK3N0YXRpYyBpbnQgZ2hhc2hfaW5pdChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3QgZ2hhc2hfZGVzY19jdHggKmRjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKworCW1lbXNldChkY3R4LCAwLCBzaXplb2YoKmRjdHgpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdoYXNoX3NldGtleShzdHJ1Y3QgY3J5cHRvX3NoYXNoICp0Zm0sCisJCQljb25zdCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKQoreworCXN0cnVjdCBnaGFzaF9jdHggKmN0eCA9IGNyeXB0b19zaGFzaF9jdHgodGZtKTsKKworCWlmIChrZXlsZW4gIT0gR0hBU0hfQkxPQ0tfU0laRSkgeworCQljcnlwdG9fc2hhc2hfc2V0X2ZsYWdzKHRmbSwgQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU4pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltZW1jcHkoY3R4LT5rZXksIGtleSwgR0hBU0hfQkxPQ0tfU0laRSk7CisJbWVtc2V0KGN0eC0+aWN2LCAwLCBHSEFTSF9CTE9DS19TSVpFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdoYXNoX3VwZGF0ZShzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywKKwkJCSBjb25zdCB1OCAqc3JjLCB1bnNpZ25lZCBpbnQgc3JjbGVuKQoreworCXN0cnVjdCBnaGFzaF9kZXNjX2N0eCAqZGN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworCXN0cnVjdCBnaGFzaF9jdHggKmN0eCA9IGNyeXB0b19zaGFzaF9jdHgoZGVzYy0+dGZtKTsKKwl1bnNpZ25lZCBpbnQgbjsKKwl1OCAqYnVmID0gZGN0eC0+YnVmZmVyOworCWludCByZXQ7CisKKwlpZiAoZGN0eC0+Ynl0ZXMpIHsKKwkJdTggKnBvcyA9IGJ1ZiArIChHSEFTSF9CTE9DS19TSVpFIC0gZGN0eC0+Ynl0ZXMpOworCisJCW4gPSBtaW4oc3JjbGVuLCBkY3R4LT5ieXRlcyk7CisJCWRjdHgtPmJ5dGVzIC09IG47CisJCXNyY2xlbiAtPSBuOworCisJCW1lbWNweShwb3MsIHNyYywgbik7CisJCXNyYyArPSBuOworCisJCWlmICghZGN0eC0+Ynl0ZXMpIHsKKwkJCXJldCA9IGNyeXB0X3MzOTBfa2ltZChLSU1EX0dIQVNILCBjdHgsIGJ1ZiwKKwkJCQkJICAgICAgR0hBU0hfQkxPQ0tfU0laRSk7CisJCQlCVUdfT04ocmV0ICE9IEdIQVNIX0JMT0NLX1NJWkUpOworCQl9CisJfQorCisJbiA9IHNyY2xlbiAmIH4oR0hBU0hfQkxPQ0tfU0laRSAtIDEpOworCWlmIChuKSB7CisJCXJldCA9IGNyeXB0X3MzOTBfa2ltZChLSU1EX0dIQVNILCBjdHgsIHNyYywgbik7CisJCUJVR19PTihyZXQgIT0gbik7CisJCXNyYyArPSBuOworCQlzcmNsZW4gLT0gbjsKKwl9CisKKwlpZiAoc3JjbGVuKSB7CisJCWRjdHgtPmJ5dGVzID0gR0hBU0hfQkxPQ0tfU0laRSAtIHNyY2xlbjsKKwkJbWVtY3B5KGJ1Ziwgc3JjLCBzcmNsZW4pOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBnaGFzaF9mbHVzaChzdHJ1Y3QgZ2hhc2hfY3R4ICpjdHgsIHN0cnVjdCBnaGFzaF9kZXNjX2N0eCAqZGN0eCkKK3sKKwl1OCAqYnVmID0gZGN0eC0+YnVmZmVyOworCWludCByZXQ7CisKKwlpZiAoZGN0eC0+Ynl0ZXMpIHsKKwkJdTggKnBvcyA9IGJ1ZiArIChHSEFTSF9CTE9DS19TSVpFIC0gZGN0eC0+Ynl0ZXMpOworCisJCW1lbXNldChwb3MsIDAsIGRjdHgtPmJ5dGVzKTsKKworCQlyZXQgPSBjcnlwdF9zMzkwX2tpbWQoS0lNRF9HSEFTSCwgY3R4LCBidWYsIEdIQVNIX0JMT0NLX1NJWkUpOworCQlCVUdfT04ocmV0ICE9IEdIQVNIX0JMT0NLX1NJWkUpOworCX0KKworCWRjdHgtPmJ5dGVzID0gMDsKK30KKworc3RhdGljIGludCBnaGFzaF9maW5hbChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgdTggKmRzdCkKK3sKKwlzdHJ1Y3QgZ2hhc2hfZGVzY19jdHggKmRjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKwlzdHJ1Y3QgZ2hhc2hfY3R4ICpjdHggPSBjcnlwdG9fc2hhc2hfY3R4KGRlc2MtPnRmbSk7CisKKwlnaGFzaF9mbHVzaChjdHgsIGRjdHgpOworCW1lbWNweShkc3QsIGN0eC0+aWN2LCBHSEFTSF9CTE9DS19TSVpFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNoYXNoX2FsZyBnaGFzaF9hbGcgPSB7CisJLmRpZ2VzdHNpemUJPSBHSEFTSF9ESUdFU1RfU0laRSwKKwkuaW5pdAkJPSBnaGFzaF9pbml0LAorCS51cGRhdGUJCT0gZ2hhc2hfdXBkYXRlLAorCS5maW5hbAkJPSBnaGFzaF9maW5hbCwKKwkuc2V0a2V5CQk9IGdoYXNoX3NldGtleSwKKwkuZGVzY3NpemUJPSBzaXplb2Yoc3RydWN0IGdoYXNoX2Rlc2NfY3R4KSwKKwkuYmFzZQkJPSB7CisJCS5jcmFfbmFtZQkJPSAiZ2hhc2giLAorCQkuY3JhX2RyaXZlcl9uYW1lCT0gImdoYXNoLXMzOTAiLAorCQkuY3JhX3ByaW9yaXR5CQk9IENSWVBUX1MzOTBfUFJJT1JJVFksCisJCS5jcmFfZmxhZ3MJCT0gQ1JZUFRPX0FMR19UWVBFX1NIQVNILAorCQkuY3JhX2Jsb2Nrc2l6ZQkJPSBHSEFTSF9CTE9DS19TSVpFLAorCQkuY3JhX2N0eHNpemUJCT0gc2l6ZW9mKHN0cnVjdCBnaGFzaF9jdHgpLAorCQkuY3JhX21vZHVsZQkJPSBUSElTX01PRFVMRSwKKwkJLmNyYV9saXN0CQk9IExJU1RfSEVBRF9JTklUKGdoYXNoX2FsZy5iYXNlLmNyYV9saXN0KSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgZ2hhc2hfbW9kX2luaXQodm9pZCkKK3sKKwlpZiAoIWNyeXB0X3MzOTBfZnVuY19hdmFpbGFibGUoS0lNRF9HSEFTSCwKKwkJCQkgICAgICAgQ1JZUFRfUzM5MF9NU0EgfCBDUllQVF9TMzkwX01TQTQpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlyZXR1cm4gY3J5cHRvX3JlZ2lzdGVyX3NoYXNoKCZnaGFzaF9hbGcpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZ2hhc2hfbW9kX2V4aXQodm9pZCkKK3sKKwljcnlwdG9fdW5yZWdpc3Rlcl9zaGFzaCgmZ2hhc2hfYWxnKTsKK30KKworbW9kdWxlX2luaXQoZ2hhc2hfbW9kX2luaXQpOworbW9kdWxlX2V4aXQoZ2hhc2hfbW9kX2V4aXQpOworCitNT0RVTEVfQUxJQVMoImdoYXNoIik7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiR0hBU0ggTWVzc2FnZSBEaWdlc3QgQWxnb3JpdGhtLCBzMzkwIGltcGxlbWVudGF0aW9uIik7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL3BybmcuYyBiL2FyY2gvczM5MC9jcnlwdG8vcHJuZy5jCmluZGV4IDhiMTZjNDcuLjA4MDhmYmYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vcHJuZy5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vcHJuZy5jCkBAIC0xNjYsNyArMTY2LDcgQEAKIAlpbnQgcmV0OwogCiAJLyogY2hlY2sgaWYgdGhlIENQVSBoYXMgYSBQUk5HICovCi0JaWYgKCFjcnlwdF9zMzkwX2Z1bmNfYXZhaWxhYmxlKEtNQ19QUk5HKSkKKwlpZiAoIWNyeXB0X3MzOTBfZnVuY19hdmFpbGFibGUoS01DX1BSTkcsIENSWVBUX1MzOTBfTVNBKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaWYgKHBybmdfY2h1bmtfc2l6ZSA8IDgpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL3NoYTFfczM5MC5jIGIvYXJjaC9zMzkwL2NyeXB0by9zaGExX3MzOTAuYwppbmRleCBmNmRlNzgyLi5lOTg2OGM2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY3J5cHRvL3NoYTFfczM5MC5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhMV9zMzkwLmMKQEAgLTkwLDcgKzkwLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgc2hhMV9zMzkwX2luaXQodm9pZCkKIHsKLQlpZiAoIWNyeXB0X3MzOTBfZnVuY19hdmFpbGFibGUoS0lNRF9TSEFfMSkpCisJaWYgKCFjcnlwdF9zMzkwX2Z1bmNfYXZhaWxhYmxlKEtJTURfU0hBXzEsIENSWVBUX1MzOTBfTVNBKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfc2hhc2goJmFsZyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL3NoYTI1Nl9zMzkwLmMgYi9hcmNoL3MzOTAvY3J5cHRvL3NoYTI1Nl9zMzkwLmMKaW5kZXggNjFhN2RiMy4uNWVkOGQ2NCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2NyeXB0by9zaGEyNTZfczM5MC5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhMjU2X3MzOTAuYwpAQCAtODYsNyArODYsNyBAQAogCiBzdGF0aWMgaW50IHNoYTI1Nl9zMzkwX2luaXQodm9pZCkKIHsKLQlpZiAoIWNyeXB0X3MzOTBfZnVuY19hdmFpbGFibGUoS0lNRF9TSEFfMjU2KSkKKwlpZiAoIWNyeXB0X3MzOTBfZnVuY19hdmFpbGFibGUoS0lNRF9TSEFfMjU2LCBDUllQVF9TMzkwX01TQSkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfc2hhc2goJmFsZyk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL3NoYTUxMl9zMzkwLmMgYi9hcmNoL3MzOTAvY3J5cHRvL3NoYTUxMl9zMzkwLmMKaW5kZXggNGJmNzNkMC4uMzJhODEzOCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2NyeXB0by9zaGE1MTJfczM5MC5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhNTEyX3MzOTAuYwpAQCAtMTMyLDcgKzEzMiw3IEBACiB7CiAJaW50IHJldDsKIAotCWlmICghY3J5cHRfczM5MF9mdW5jX2F2YWlsYWJsZShLSU1EX1NIQV81MTIpKQorCWlmICghY3J5cHRfczM5MF9mdW5jX2F2YWlsYWJsZShLSU1EX1NIQV81MTIsIENSWVBUX1MzOTBfTVNBKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCWlmICgocmV0ID0gY3J5cHRvX3JlZ2lzdGVyX3NoYXNoKCZzaGE1MTJfYWxnKSkgPCAwKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9oeXBmcy9oeXBmcy5oIGIvYXJjaC9zMzkwL2h5cGZzL2h5cGZzLmgKaW5kZXggODBjMTUyNi4uZDlkZjVhMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2h5cGZzL2h5cGZzLmgKKysrIGIvYXJjaC9zMzkwL2h5cGZzL2h5cGZzLmgKQEAgLTQ3LDcgKzQ3LDcgQEAKIAl2b2lkCQkJKmJ1ZjsKIAl2b2lkCQkJKmJ1Zl9mcmVlX3B0cjsKIAlzaXplX3QJCQlzaXplOwotCXN0cnVjdCBoeXBmc19kYmZzX2ZpbGUJKmRiZnNfZmlsZTs7CisJc3RydWN0IGh5cGZzX2RiZnNfZmlsZQkqZGJmc19maWxlOwogCXN0cnVjdCBrcmVmCQlrcmVmOwogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zcS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zcS5jCmluZGV4IDE0NzI2ZWUuLmYwOTA3OTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc3EuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NxLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGNwdS9zcS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9LY29uZmlnIGIvYXJjaC9zcGFyYy9LY29uZmlnCmluZGV4IGU1NjBkMTAuLjYzYTAyN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvS2NvbmZpZworKysgYi9hcmNoL3NwYXJjL0tjb25maWcKQEAgLTI1LDYgKzI1LDEwIEBACiAJc2VsZWN0IEhBVkVfRE1BX0FUVFJTCiAJc2VsZWN0IEhBVkVfRE1BX0FQSV9ERUJVRwogCXNlbGVjdCBIQVZFX0FSQ0hfSlVNUF9MQUJFTAorCXNlbGVjdCBIQVZFX0dFTkVSSUNfSEFSRElSUVMKKwlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19ERVBSRUNBVEVECisJc2VsZWN0IEdFTkVSSUNfSVJRX1NIT1cKKwlzZWxlY3QgVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMgaWYgU01QCiAKIGNvbmZpZyBTUEFSQzMyCiAJZGVmX2Jvb2wgITY0QklUCkBAIC00MywxNSArNDcsMTIgQEAKIAlzZWxlY3QgSEFWRV9EWU5BTUlDX0ZUUkFDRQogCXNlbGVjdCBIQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JECiAJc2VsZWN0IEhBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUwotCXNlbGVjdCBVU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpZiBTTVAKIAlzZWxlY3QgUlRDX0RSVl9DTU9TCiAJc2VsZWN0IFJUQ19EUlZfQlE0ODAyCiAJc2VsZWN0IFJUQ19EUlZfU1VONFYKIAlzZWxlY3QgUlRDX0RSVl9TVEFSRklSRQogCXNlbGVjdCBIQVZFX1BFUkZfRVZFTlRTCiAJc2VsZWN0IFBFUkZfVVNFX1ZNQUxMT0MKLQlzZWxlY3QgSEFWRV9HRU5FUklDX0hBUkRJUlFTCi0Jc2VsZWN0IEdFTkVSSUNfSVJRX1NIT1cKIAlzZWxlY3QgSVJRX1BSRUZMT1dfRkFTVEVPSQogCiBjb25maWcgQVJDSF9ERUZDT05GSUcKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vY3B1ZGF0YV8zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9jcHVkYXRhXzMyLmgKaW5kZXggMzFkNDhhMC4uYTRjNWE5MyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9jcHVkYXRhXzMyLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9jcHVkYXRhXzMyLmgKQEAgLTE2LDYgKzE2LDEwIEBACiAJdW5zaWduZWQgbG9uZyBjbG9ja190aWNrOwogCXVuc2lnbmVkIGludCBtdWx0aXBsaWVyOwogCXVuc2lnbmVkIGludCBjb3VudGVyOworI2lmZGVmIENPTkZJR19TTVAKKwl1bnNpZ25lZCBpbnQgaXJxX3Jlc2NoZWRfY291bnQ7CisJdW5zaWduZWQgaW50IGlycV9jYWxsX2NvdW50OworI2VuZGlmCiAJaW50IHByb21fbm9kZTsKIAlpbnQgbWlkOwogCWludCBuZXh0OwpAQCAtMjMsNSArMjcsNiBAQAogCiBERUNMQVJFX1BFUl9DUFUoY3B1aW5mb19zcGFyYywgX19jcHVfZGF0YSk7CiAjZGVmaW5lIGNwdV9kYXRhKF9fY3B1KSBwZXJfY3B1KF9fY3B1X2RhdGEsIChfX2NwdSkpCisjZGVmaW5lIGxvY2FsX2NwdV9kYXRhKCkgX19nZXRfY3B1X3ZhcihfX2NwdV9kYXRhKQogCiAjZW5kaWYgLyogX1NQQVJDX0NQVURBVEFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9mbG9wcHlfMzIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZmxvcHB5XzMyLmgKaW5kZXggODY2NjZmNy4uNDgyYzc5ZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9mbG9wcHlfMzIuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2Zsb3BweV8zMi5oCkBAIC0yODEsMjggKzI4MSwyNyBAQAogCXBkbWFfYXJlYXNpemUgPSBwZG1hX3NpemU7CiB9CiAKLS8qIE91ciBsb3ctbGV2ZWwgZW50cnkgcG9pbnQgaW4gYXJjaC9zcGFyYy9rZXJuZWwvZW50cnkuUyAqLwotZXh0ZXJuIGludCBzcGFyY19mbG9wcHlfcmVxdWVzdF9pcnEoaW50IGlycSwgdW5zaWduZWQgbG9uZyBmbGFncywKLQkJCQkgICAgaXJxX2hhbmRsZXJfdCBpcnFfaGFuZGxlcik7CitleHRlcm4gaW50IHNwYXJjX2Zsb3BweV9yZXF1ZXN0X2lycSh1bnNpZ25lZCBpbnQgaXJxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXJxX2hhbmRsZXJfdCBpcnFfaGFuZGxlcik7CiAKIHN0YXRpYyBpbnQgc3VuX2ZkX3JlcXVlc3RfaXJxKHZvaWQpCiB7CiAJc3RhdGljIGludCBvbmNlID0gMDsKLQlpbnQgZXJyb3I7CiAKLQlpZighb25jZSkgeworCWlmICghb25jZSkgewogCQlvbmNlID0gMTsKLQkJZXJyb3IgPSBzcGFyY19mbG9wcHlfcmVxdWVzdF9pcnEoRkxPUFBZX0lSUSwKLQkJCQkJCSBJUlFGX0RJU0FCTEVELAotCQkJCQkJIGZsb3BweV9pbnRlcnJ1cHQpOwotCQlyZXR1cm4gKChlcnJvciA9PSAwKSA/IDAgOiAtMSk7Ci0JfSBlbHNlIHJldHVybiAwOworCQlyZXR1cm4gc3BhcmNfZmxvcHB5X3JlcXVlc3RfaXJxKEZMT1BQWV9JUlEsIGZsb3BweV9pbnRlcnJ1cHQpOworCX0gZWxzZSB7CisJCXJldHVybiAwOworCX0KIH0KIAogc3RhdGljIHN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyBmZF9yZWdzWzJdOwogCiBzdGF0aWMgaW50IHN1bl9mbG9wcHlfaW5pdCh2b2lkKQogeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHA7CiAJY2hhciBzdGF0ZVsxMjhdOwogCXBoYW5kbGUgdG5vZGUsIGZkX25vZGU7CiAJaW50IG51bV9yZWdzOwpAQCAtMzEwLDcgKzMwOSw2IEBACiAKIAl1c2VfdmlydHVhbF9kbWEgPSAxOwogCi0JRkxPUFBZX0lSUSA9IDExOwogCS8qIEZvcmdldCBpdCBpZiB3ZSBhcmVuJ3Qgb24gYSBtYWNoaW5lIHRoYXQgY291bGQgcG9zc2libHkKIAkgKiBldmVyIGhhdmUgYSBmbG9wcHkgZHJpdmUuCiAJICovCkBAIC0zNDksNiArMzQ3LDI2IEBACiAJc3VuX2ZkYyA9IChzdHJ1Y3Qgc3VuX2ZscHlfY29udHJvbGxlciAqKQogCSAgICBvZl9pb3JlbWFwKCZyLCAwLCBmZF9yZWdzWzBdLnJlZ19zaXplLCAiZmxvcHB5Iik7CiAKKwkvKiBMb29rIHVwIGlycSBpbiBwbGF0Zm9ybV9kZXZpY2UuCisJICogV2UgdHJ5ICJTVU5XLGZkdHdvIiBhbmQgImZkIgorCSAqLworCWZvcl9lYWNoX25vZGVfYnlfbmFtZShkcCwgIlNVTlcsZmR0d28iKSB7CisJCW9wID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShkcCk7CisJCWlmIChvcCkKKwkJCWJyZWFrOworCX0KKwlpZiAoIW9wKSB7CisJCWZvcl9lYWNoX25vZGVfYnlfbmFtZShkcCwgImZkIikgeworCQkJb3AgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKGRwKTsKKwkJCWlmIChvcCkKKwkJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoIW9wKQorCQlnb3RvIG5vX3N1bl9mZGM7CisKKwlGTE9QUFlfSVJRID0gb3AtPmFyY2hkYXRhLmlycXNbMF07CisKIAkvKiBMYXN0IG1pbnV0ZSBzYW5pdHkgY2hlY2suLi4gKi8KIAlpZihzdW5fZmRjLT5zdGF0dXNfODIwNzIgPT0gMHhmZikgewogCQlzdW5fZmRjID0gTlVMTDsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaW8uaAppbmRleCBhMzRiMjk5Li5mNjkwMmNmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9pby5oCkBAIC01LDQgKzUsMTcgQEAKICNlbHNlCiAjaW5jbHVkZSA8YXNtL2lvXzMyLmg+CiAjZW5kaWYKKworLyoKKyAqIERlZmluZXMgdXNlZCBmb3IgYm90aCBTUEFSQzMyIGFuZCBTUEFSQzY0CisgKi8KKworLyogQmlnIGVuZGlhbiB2ZXJzaW9ucyBvZiBtZW1vcnkgcmVhZC93cml0ZSByb3V0aW5lcyAqLworI2RlZmluZSByZWFkYl9iZShfX2FkZHIpCV9fcmF3X3JlYWRiKF9fYWRkcikKKyNkZWZpbmUgcmVhZHdfYmUoX19hZGRyKQlfX3Jhd19yZWFkdyhfX2FkZHIpCisjZGVmaW5lIHJlYWRsX2JlKF9fYWRkcikJX19yYXdfcmVhZGwoX19hZGRyKQorI2RlZmluZSB3cml0ZWJfYmUoX19iLCBfX2FkZHIpCV9fcmF3X3dyaXRlYihfX2IsIF9fYWRkcikKKyNkZWZpbmUgd3JpdGVsX2JlKF9fdywgX19hZGRyKQlfX3Jhd193cml0ZWwoX193LCBfX2FkZHIpCisjZGVmaW5lIHdyaXRld19iZShfX2wsIF9fYWRkcikJX19yYXdfd3JpdGV3KF9fbCwgX19hZGRyKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaXJxXzMyLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2lycV8zMi5oCmluZGV4IGVjZWQzZTMuLjJhZTNhY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaXJxXzMyLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9pcnFfMzIuaApAQCAtNiw3ICs2LDExIEBACiAjaWZuZGVmIF9TUEFSQ19JUlFfSAogI2RlZmluZSBfU1BBUkNfSVJRX0gKIAotI2RlZmluZSBOUl9JUlFTICAgIDE2CisvKiBBbGxvY2F0ZWQgbnVtYmVyIG9mIGxvZ2ljYWwgaXJxIG51bWJlcnMuCisgKiBzdW40ZCBib3hlcyAoc3MyMDAwZSkgc2hvdWxkIGJlIE9LIHdpdGggfjMyLgorICogQmUgb24gdGhlIHNhZmUgc2lkZSBhbmQgbWFrZSByb29tIGZvciA2NAorICovCisjZGVmaW5lIE5SX0lSUVMgICAgNjQKIAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2xlb24uaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbGVvbi5oCmluZGV4IGMwNGY5NmYuLjZiZGFmMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbGVvbi5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbGVvbi5oCkBAIC01MiwyOSArNTIsNiBAQAogI2RlZmluZSBMRU9OX0RJQUdGX1ZBTElECTB4MjAwMAogI2RlZmluZSBMRU9OX0RJQUdGX1ZBTElEX1NISUZUCTEzCiAKLS8qCi0gKiAgSW50ZXJydXB0IFNvdXJjZXMKLSAqCi0gKiAgVGhlIGludGVycnVwdCBzb3VyY2UgbnVtYmVycyBkaXJlY3RseSBtYXAgdG8gdGhlIHRyYXAgdHlwZSBhbmQgdG8KLSAqICB0aGUgYml0cyB1c2VkIGluIHRoZSBJbnRlcnJ1cHQgQ2xlYXIsIEludGVycnVwdCBGb3JjZSwgSW50ZXJydXB0IE1hc2ssCi0gKiAgYW5kIHRoZSBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3RlcnMuCi0gKi8KLSNkZWZpbmUgTEVPTl9JTlRFUlJVUFRfQ09SUkVDVEFCTEVfTUVNT1JZX0VSUk9SCTEKLSNkZWZpbmUgTEVPTl9JTlRFUlJVUFRfVUFSVF8xX1JYX1RYCQkyCi0jZGVmaW5lIExFT05fSU5URVJSVVBUX1VBUlRfMF9SWF9UWAkJMwotI2RlZmluZSBMRU9OX0lOVEVSUlVQVF9FWFRFUk5BTF8wCQk0Ci0jZGVmaW5lIExFT05fSU5URVJSVVBUX0VYVEVSTkFMXzEJCTUKLSNkZWZpbmUgTEVPTl9JTlRFUlJVUFRfRVhURVJOQUxfMgkJNgotI2RlZmluZSBMRU9OX0lOVEVSUlVQVF9FWFRFUk5BTF8zCQk3Ci0jZGVmaW5lIExFT05fSU5URVJSVVBUX1RJTUVSMQkJCTgKLSNkZWZpbmUgTEVPTl9JTlRFUlJVUFRfVElNRVIyCQkJOQotI2RlZmluZSBMRU9OX0lOVEVSUlVQVF9FTVBUWTEJCQkxMAotI2RlZmluZSBMRU9OX0lOVEVSUlVQVF9FTVBUWTIJCQkxMQotI2RlZmluZSBMRU9OX0lOVEVSUlVQVF9PUEVOX0VUSAkJCTEyCi0jZGVmaW5lIExFT05fSU5URVJSVVBUX0VNUFRZNAkJCTEzCi0jZGVmaW5lIExFT05fSU5URVJSVVBUX0VNUFRZNQkJCTE0Ci0jZGVmaW5lIExFT05fSU5URVJSVVBUX0VNUFRZNgkJCTE1Ci0KIC8qIGlycSBtYXNrcyAqLwogI2RlZmluZSBMRU9OX0hBUkRfSU5UKHgpCSgxIDw8ICh4KSkJLyogaXJxIDAtMTUgKi8KICNkZWZpbmUgTEVPTl9JUlFNQVNLX1IJCTB4MDAwMGZmZmUJLyogYml0IDE1LSAxIG9mIGxyZWdzLmlycW1hc2sgKi8KQEAgLTE4Myw3ICsxNjAsNiBAQAogLyogbWFjcm8gYWNjZXNzIGZvciBsZW9uX3JlYWRub2J1ZmZlcl9yZWcoKSAqLwogI2RlZmluZSBMRU9OX0JZUEFTU0NBQ0hFX0xPQURfVkEoeCkgbGVvbl9yZWFkbm9idWZmZXJfcmVnKCh1bnNpZ25lZCBsb25nKSh4KSkKIAotZXh0ZXJuIHZvaWQgc3BhcmNfbGVvbl9laXJxX3JlZ2lzdGVyKGludCBlaXJxKTsKIGV4dGVybiB2b2lkIGxlb25faW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIGxlb25fc3dpdGNoX21tKHZvaWQpOwogZXh0ZXJuIHZvaWQgbGVvbl9pbml0X0lSUSh2b2lkKTsKQEAgLTIzOSw4ICsyMTUsOCBAQAogI2VuZGlmIC8qIV9fQVNTRU1CTFlfXyovCiAKICNpZmRlZiBDT05GSUdfU01QCi0jIGRlZmluZSBMRU9OM19JUlFfUkVTQ0hFRFVMRQkJMTMKLSMgZGVmaW5lIExFT04zX0lSUV9USUNLRVIJCShsZW9uX3BlcmNwdV90aW1lcl9kZXZbMF0uaXJxKQorIyBkZWZpbmUgTEVPTjNfSVJRX0lQSV9ERUZBVUxUCQkxMworIyBkZWZpbmUgTEVPTjNfSVJRX1RJQ0tFUgkJKGxlb24zX3RpY2tlcl9pcnEpCiAjIGRlZmluZSBMRU9OM19JUlFfQ1JPU1NfQ0FMTAkJMTUKICNlbmRpZgogCkBAIC0zMzksOSArMzE1LDkgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogc3RydWN0IGRldmljZV9ub2RlOwotZXh0ZXJuIGludCBzcGFyY19sZW9uX2VpcnFfZ2V0KGludCBlaXJxLCBpbnQgY3B1KTsKLWV4dGVybiBpcnFyZXR1cm5fdCBzcGFyY19sZW9uX2VpcnFfaXNyKGludCBkdW1teSwgdm9pZCAqZGV2X2lkKTsKLWV4dGVybiB2b2lkIHNwYXJjX2xlb25fZWlycV9yZWdpc3RlcihpbnQgZWlycSk7CitleHRlcm4gdW5zaWduZWQgaW50IGxlb25fYnVpbGRfZGV2aWNlX2lycSh1bnNpZ25lZCBpbnQgcmVhbF9pcnEsCisJCQkJCSAgIGlycV9mbG93X2hhbmRsZXJfdCBmbG93X2hhbmRsZXIsCisJCQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBkb19hY2spOwogZXh0ZXJuIHZvaWQgbGVvbl9jbGVhcl9jbG9ja19pcnEodm9pZCk7CiBleHRlcm4gdm9pZCBsZW9uX2xvYWRfcHJvZmlsZV9pcnEoaW50IGNwdSwgdW5zaWduZWQgaW50IGxpbWl0KTsKIGV4dGVybiB2b2lkIGxlb25faW5pdF90aW1lcnMoaXJxX2hhbmRsZXJfdCBjb3VudGVyX2ZuKTsKQEAgLTM1OCw2ICszMzQsNyBAQAogZXh0ZXJuIGludCBsZW9uX2ZsdXNoX25lZWRlZCh2b2lkKTsKIGV4dGVybiB2b2lkIGxlb25fc3dpdGNoX21tKHZvaWQpOwogZXh0ZXJuIGludCBzcm1tdV9zd3Byb2JlX3RyYWNlOworZXh0ZXJuIGludCBsZW9uM190aWNrZXJfaXJxOwogCiAjaWZkZWYgQ09ORklHX1NNUAogZXh0ZXJuIGludCBsZW9uX3NtcF9ucmNwdXModm9pZCk7CkBAIC0zNjYsMTcgKzM0MywxOSBAQAogZXh0ZXJuIHZvaWQgbGVvbl9ib290X2NwdXModm9pZCk7CiBleHRlcm4gaW50IGxlb25fYm9vdF9vbmVfY3B1KGludCBpKTsKIHZvaWQgbGVvbl9pbml0X3NtcCh2b2lkKTsKLWV4dGVybiB2b2lkIGNwdV9wcm9iZSh2b2lkKTsKIGV4dGVybiB2b2lkIGNwdV9pZGxlKHZvaWQpOwogZXh0ZXJuIHZvaWQgaW5pdF9JUlEodm9pZCk7CiBleHRlcm4gdm9pZCBjcHVfcGFuaWModm9pZCk7CiBleHRlcm4gaW50IF9fbGVvbl9wcm9jZXNzb3JfaWQodm9pZCk7CiB2b2lkIGxlb25fZW5hYmxlX2lycV9jcHUodW5zaWduZWQgaW50IGlycV9uciwgdW5zaWduZWQgaW50IGNwdSk7CitleHRlcm4gaXJxcmV0dXJuX3QgbGVvbl9wZXJjcHVfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKnVudXNlZCk7CiAKLWV4dGVybiB1bnNpZ25lZCBpbnQgcmVhbF9pcnFfZW50cnlbXSwgc21wbGVvbl90aWNrZXJbXTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgcmVhbF9pcnFfZW50cnlbXTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgc21wbGVvbl9pcGlbXTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgcGF0Y2htZV9tYXliZV9zbXBfbXNnW107CiBleHRlcm4gdW5zaWduZWQgaW50IHRfbm1pW10sIGxpbnV4X3RyYXBfaXBpMTVfbGVvbltdOwogZXh0ZXJuIHVuc2lnbmVkIGludCBsaW51eF90cmFwX2lwaTE1X3N1bjRtW107CitleHRlcm4gaW50IGxlb25faXBpX2lycTsKIAogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wY2ljLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BjaWMuaAppbmRleCBmMjBlZjU2Li43ZWI1ZDc4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BjaWMuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BjaWMuaApAQCAtMjksMTEgKzI5LDE3IEBACiAJaW50CQkJcGNpY19pbWRpbTsKIH07CiAKLWV4dGVybiBpbnQgcGNpY19wcm9iZSh2b2lkKTsKLS8qIEVybS4uLiBNSiByZWRlZmluZWQgcGNpYmlvc19wcmVzZW50KCkgc28gdGhhdCBpdCBkb2VzIG5vdCB3b3JrIGVhcmx5LiAqLworI2lmZGVmIENPTkZJR19QQ0kKIGV4dGVybiBpbnQgcGNpY19wcmVzZW50KHZvaWQpOworZXh0ZXJuIGludCBwY2ljX3Byb2JlKHZvaWQpOworZXh0ZXJuIHZvaWQgcGNpX3RpbWVfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHN1bjRtX3BjaV9pbml0X0lSUSh2b2lkKTsKLQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IHBjaWNfcHJlc2VudCh2b2lkKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBwY2ljX3Byb2JlKHZvaWQpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfdGltZV9pbml0KHZvaWQpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgc3VuNG1fcGNpX2luaXRfSVJRKHZvaWQpIHt9CisjZW5kaWYKICNlbmRpZgogCiAvKiBTaXplIG9mIFBDSSBJL08gc3BhY2Ugd2hpY2ggd2UgcmVsb2NhdGUuICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCmluZGV4IDMwM2JkNGQuLjViMzFhOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCkBAIC04LDYgKzgsOCBAQAogICogIENvcHlyaWdodCAoQykgMTk5OCBKYWt1YiBKZWxpbmVrIChqakBzdW5zaXRlLm1mZi5jdW5pLmN6KQogICovCiAKKyNpbmNsdWRlIDxsaW51eC9jb25zdC5oPgorCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogI2luY2x1ZGUgPGFzbS1nZW5lcmljLzRsZXZlbC1maXh1cC5oPgogCkBAIC00NTYsOSArNDU4LDkgQEAKIAogI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLwogCi0jZGVmaW5lIFZNQUxMT0NfU1RBUlQgICAgICAgICAgIDB4ZmU2MDAwMDAKKyNkZWZpbmUgVk1BTExPQ19TVEFSVCAgICAgICAgICAgX0FDKDB4ZmU2MDAwMDAsVUwpCiAvKiBYWFggQWx0ZXIgdGhpcyB3aGVuIEkgZ2V0IGFyb3VuZCB0byBmaXhpbmcgc3VuNGMgLSBBbnRvbiAqLwotI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAgICAgICAweGZmYzAwMDAwCisjZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgICAgICAgIF9BQygweGZmYzAwMDAwLFVMKQogCiAKIC8qIFdlIHByb3ZpZGUgb3VyIG93biBnZXRfdW5tYXBwZWRfYXJlYSB0byBjb3BlIHdpdGggVkEgaG9sZXMgZm9yIHVzZXJsYW5kICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oCmluZGV4IGY4ZGRkYjcuLmI3NzEyOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oCkBAIC02OTksNiArNjk5LDkgQEAKIGV4dGVybiB2b2lkIHBhZ2luZ19pbml0KHZvaWQpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZmluZF9lY2FjaGVfZmx1c2hfc3Bhbih1bnNpZ25lZCBsb25nIHNpemUpOwogCitzdHJ1Y3Qgc2VxX2ZpbGU7CitleHRlcm4gdm9pZCBtbXVfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKik7CisKIC8qIFRoZXNlIGRvIG5vdGhpbmcgd2l0aCB0aGUgd2F5IEkgaGF2ZSB0aGluZ3Mgc2V0dXAuICovCiAjZGVmaW5lIG1tdV9sb2NrYXJlYSh2YWRkciwgbGVuKQkJKHZhZGRyKQogI2RlZmluZSBtbXVfdW5sb2NrYXJlYSh2YWRkciwgbGVuKQkJZG8geyB9IHdoaWxlKDApCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NldHVwLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NldHVwLmgKaW5kZXggMjY0M2M2Mi4uNjQ3MThiYSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zZXR1cC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc2V0dXAuaApAQCAtMTEsNCArMTEsMTYgQEAKICMgZGVmaW5lIENPTU1BTkRfTElORV9TSVpFIDI1NgogI2VuZGlmCiAKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpZmRlZiBDT05GSUdfU1BBUkMzMgorLyogVGhlIENQVSB0aGF0IHdhcyB1c2VkIGZvciBib290aW5nCisgKiBPbmx5IHN1bjRkICsgbGVvbiBtYXkgaGF2ZSBib290X2NwdV9pZCAhPSAwCisgKi8KK2V4dGVybiB1bnNpZ25lZCBjaGFyIGJvb3RfY3B1X2lkOworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgYm9vdF9jcHVfaWQ0OworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKICNlbmRpZiAvKiBfU1BBUkNfU0VUVVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zbXBfMzIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc21wXzMyLmgKaW5kZXggZDgyZDdmNC4uMDkzZjEwOCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zbXBfMzIuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NtcF8zMi5oCkBAIC01MCw0MiArNTAsMzggQEAKIHZvaWQgc21wX2Jvb3RfY3B1cyh2b2lkKTsKIHZvaWQgc21wX3N0b3JlX2NwdV9pbmZvKGludCk7CiAKK3ZvaWQgc21wX3Jlc2NoZWRfaW50ZXJydXB0KHZvaWQpOwordm9pZCBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaW50ZXJydXB0KHZvaWQpOwordm9pZCBzbXBfY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQodm9pZCk7CisKIHN0cnVjdCBzZXFfZmlsZTsKIHZvaWQgc21wX2JvZ28oc3RydWN0IHNlcV9maWxlICopOwogdm9pZCBzbXBfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKik7CiAKIEJURklYVVBERUZfQ0FMTCh2b2lkLCBzbXBfY3Jvc3NfY2FsbCwgc21wZnVuY190LCBjcHVtYXNrX3QsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCiBCVEZJWFVQREVGX0NBTEwoaW50LCBfX2hhcmRfc21wX3Byb2Nlc3Nvcl9pZCwgdm9pZCkKK0JURklYVVBERUZfQ0FMTCh2b2lkLCBzbXBfaXBpX3Jlc2NoZWQsIGludCk7CitCVEZJWFVQREVGX0NBTEwodm9pZCwgc21wX2lwaV9zaW5nbGUsIGludCk7CitCVEZJWFVQREVGX0NBTEwodm9pZCwgc21wX2lwaV9tYXNrX29uZSwgaW50KTsKIEJURklYVVBERUZfQkxBQ0tCT1goaGFyZF9zbXBfcHJvY2Vzc29yX2lkKQogQlRGSVhVUERFRl9CTEFDS0JPWChsb2FkX2N1cnJlbnQpCiAKICNkZWZpbmUgc21wX2Nyb3NzX2NhbGwoZnVuYyxtYXNrLGFyZzEsYXJnMixhcmczLGFyZzQpIEJURklYVVBfQ0FMTChzbXBfY3Jvc3NfY2FsbCkoZnVuYyxtYXNrLGFyZzEsYXJnMixhcmczLGFyZzQpCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB4YzAoc21wZnVuY190IGZ1bmMpIHsgc21wX2Nyb3NzX2NhbGwoZnVuYywgY3B1X29ubGluZV9tYXAsIDAsIDAsIDAsIDApOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgeGMwKHNtcGZ1bmNfdCBmdW5jKSB7IHNtcF9jcm9zc19jYWxsKGZ1bmMsICpjcHVfb25saW5lX21hc2ssIDAsIDAsIDAsIDApOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgeGMxKHNtcGZ1bmNfdCBmdW5jLCB1bnNpZ25lZCBsb25nIGFyZzEpCi17IHNtcF9jcm9zc19jYWxsKGZ1bmMsIGNwdV9vbmxpbmVfbWFwLCBhcmcxLCAwLCAwLCAwKTsgfQoreyBzbXBfY3Jvc3NfY2FsbChmdW5jLCAqY3B1X29ubGluZV9tYXNrLCBhcmcxLCAwLCAwLCAwKTsgfQogc3RhdGljIGlubGluZSB2b2lkIHhjMihzbXBmdW5jX3QgZnVuYywgdW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIpCi17IHNtcF9jcm9zc19jYWxsKGZ1bmMsIGNwdV9vbmxpbmVfbWFwLCBhcmcxLCBhcmcyLCAwLCAwKTsgfQoreyBzbXBfY3Jvc3NfY2FsbChmdW5jLCAqY3B1X29ubGluZV9tYXNrLCBhcmcxLCBhcmcyLCAwLCAwKTsgfQogc3RhdGljIGlubGluZSB2b2lkIHhjMyhzbXBmdW5jX3QgZnVuYywgdW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIsCiAJCQkgICB1bnNpZ25lZCBsb25nIGFyZzMpCi17IHNtcF9jcm9zc19jYWxsKGZ1bmMsIGNwdV9vbmxpbmVfbWFwLCBhcmcxLCBhcmcyLCBhcmczLCAwKTsgfQoreyBzbXBfY3Jvc3NfY2FsbChmdW5jLCAqY3B1X29ubGluZV9tYXNrLCBhcmcxLCBhcmcyLCBhcmczLCAwKTsgfQogc3RhdGljIGlubGluZSB2b2lkIHhjNChzbXBmdW5jX3QgZnVuYywgdW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIsCiAJCQkgICB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNCkKLXsgc21wX2Nyb3NzX2NhbGwoZnVuYywgY3B1X29ubGluZV9tYXAsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpOyB9Cit7IHNtcF9jcm9zc19jYWxsKGZ1bmMsICpjcHVfb25saW5lX21hc2ssIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpOyB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNtcF9jYWxsX2Z1bmN0aW9uKHZvaWQgKCpmdW5jKSh2b2lkICppbmZvKSwgdm9pZCAqaW5mbywgaW50IHdhaXQpCi17Ci0JeGMxKChzbXBmdW5jX3QpZnVuYywgKHVuc2lnbmVkIGxvbmcpaW5mbyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShpbnQgY3B1aWQsIHZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyksCi0JCQkJCSAgIHZvaWQgKmluZm8sIGludCB3YWl0KQotewotCXNtcF9jcm9zc19jYWxsKChzbXBmdW5jX3QpZnVuYywgY3B1bWFza19vZl9jcHUoY3B1aWQpLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpIGluZm8sIDAsIDAsIDApOwotCXJldHVybiAwOwotfQorZXh0ZXJuIHZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2lwaShpbnQgY3B1KTsKK2V4dGVybiB2b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKTsKIAogc3RhdGljIGlubGluZSBpbnQgY3B1X2xvZ2ljYWxfbWFwKGludCBjcHUpCiB7CkBAIC0xMzUsNiArMTMxLDExIEBACiAJCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZGEgWyVnMF0gQVNJX01fVklLSU5HX1RNUDEsICUwXG5cdCIKIAkJCQkgICAgICJub3A7IG5vcCIgOgogCQkJCSAgICAgIj0mciIgKGNwdWlkKSk7CisJCSAgICAgLSBsZW9uCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAkicmQgJWFzcjE3LCAlMFxuXHQiCisJCQkJCSJzcmwgJTAsIDB4MWMsICUwXG5cdCIKKwkJCQkJIm5vcFxuXHQiIDoKKwkJCQkJIj0mciIgKGNwdWlkKSk7CiAJICAgU2VlIGJ0Zml4dXAuaCBhbmQgYnRmaXh1cHByZXAuYyB0byB1bmRlcnN0YW5kIGhvdyBhIGJsYWNrYm94IHdvcmtzLgogCSAqLwogCV9fYXNtX18gX192b2xhdGlsZV9fKCJzZXRoaSAlJWhpKF9fX2JfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKSwgJTBcblx0IgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zbXBfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc21wXzY0LmgKaW5kZXggZjQ5ZTExYy4uMjBiY2E4OSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zbXBfNjQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NtcF82NC5oCkBAIC00OSw2ICs0OSwxMCBAQAogCiBleHRlcm4gdm9pZCBzbXBfZmV0Y2hfZ2xvYmFsX3JlZ3Modm9pZCk7CiAKK3N0cnVjdCBzZXFfZmlsZTsKK3ZvaWQgc21wX2JvZ28oc3RydWN0IHNlcV9maWxlICopOwordm9pZCBzbXBfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKik7CisKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIGV4dGVybiBpbnQgX19jcHVfZGlzYWJsZSh2b2lkKTsKIGV4dGVybiB2b2lkIF9fY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3BpbmxvY2tfMzIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3BpbmxvY2tfMzIuaAppbmRleCA3ZjliOWRiLi41ZjViOGJmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NwaW5sb2NrXzMyLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zcGlubG9ja18zMi5oCkBAIC05LDYgKzksNyBAQAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogI2luY2x1ZGUgPGFzbS9wc3IuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+IC8qIGZvciBjcHVfcmVsYXggKi8KIAogI2RlZmluZSBhcmNoX3NwaW5faXNfbG9ja2VkKGxvY2spICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKGxvY2spKSAhPSAwKQogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV8zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fMzIuaAppbmRleCA4OTAwMzZiLi40N2E3ZTg2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV8zMi5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzMyLmgKQEAgLTE1LDExICsxNSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwcm9iZV9pcnFfbWFzayh1bnNpZ25lZCBsb25nIHZhbCkKLXsKLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIFNwYXJjIChnZW5lcmFsKSBDUFUgdHlwZXMKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmgKaW5kZXggZTNiNjVkOC4uM2M5NmQzYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oCkBAIC0yOSwxMCArMjksNiBAQAogLyogVGhpcyBjYW5ub3QgZXZlciBiZSBhIHN1bjRjIDopIFRoYXQncyBqdXN0IGhpc3RvcnkuICovCiAjZGVmaW5lIEFSQ0hfU1VONEMgMAogCi1leHRlcm4gY29uc3QgY2hhciAqc3BhcmNfY3B1X3R5cGU7Ci1leHRlcm4gY29uc3QgY2hhciAqc3BhcmNfZnB1X3R5cGU7Ci1leHRlcm4gY29uc3QgY2hhciAqc3BhcmNfcG11X3R5cGU7Ci0KIGV4dGVybiBjaGFyIHJlYm9vdF9jb21tYW5kW107CiAKIC8qIFRoZXNlIGFyZSBoZXJlIGluIGFuIGVmZm9ydCB0byBtb3JlIGZ1bGx5IHdvcmsgYXJvdW5kIFNwaXRmaXJlIEVycmF0YQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggOWQ4OTdiNi4uYzUzODdlZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC00MDQsOCArNDA0LDkgQEAKICNkZWZpbmUgX19OUl9vcGVuX2J5X2hhbmRsZV9hdAkzMzMKICNkZWZpbmUgX19OUl9jbG9ja19hZGp0aW1lCTMzNAogI2RlZmluZSBfX05SX3N5bmNmcwkJMzM1CisjZGVmaW5lIF9fTlJfc2VuZG1tc2cJCTMzNgogCi0jZGVmaW5lIE5SX3N5c2NhbGxzCQkzMzYKKyNkZWZpbmUgTlJfc3lzY2FsbHMJCTMzNwogCiAjaWZkZWYgX18zMmJpdF9zeXNjYWxsX251bWJlcnNfXwogLyogU3BhcmMgMzItYml0IG9ubHkgaGFzIHRoZSAic2V0cmVzdWlkMzIiLCAiZ2V0cmVzdWlkMzIiIHZhcmlhbnRzLApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS93aW5tYWNyby5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS93aW5tYWNyby5oCmluZGV4IDViMGEwNmQuLmE5YmUwNGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vd2lubWFjcm8uaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3dpbm1hY3JvLmgKQEAgLTEwMyw2ICsxMDMsNyBAQAogICAgICAgICBzdCAgICAgICAlc2NyYXRjaCwgWyVjdXJfcmVnICsgVElfV19TQVZFRF07CiAKICNpZmRlZiBDT05GSUdfU01QCisvKiBSZXN1bHRzIG9mIExPQURfQ1VSUkVOVCgpIGFmdGVyIEJURklYVVAgZm9yIFNVTjRNLCBTVU40RCAmIExFT04gKGNvbW1lbnRzKSAqLwogI2RlZmluZSBMT0FEX0NVUlJFTlQ0TShkZXN0X3JlZywgaWRyZWcpIFwKICAgICAgICAgcmQgICAgICAgJXRiciwgJWlkcmVnOyBcCiAJc2V0aGkgICAgJWhpKGN1cnJlbnRfc2V0KSwgJWRlc3RfcmVnOyBcCkBAIC0xMTgsNiArMTE5LDE0IEBACiAJb3IJJWRlc3RfcmVnLCAlbG8oQ19MQUJFTChjdXJyZW50X3NldCkpLCAlZGVzdF9yZWc7IFwKIAlsZAlbJWlkcmVnICsgJWRlc3RfcmVnXSwgJWRlc3RfcmVnOwogCisjZGVmaW5lIExPQURfQ1VSUkVOVF9MRU9OKGRlc3RfcmVnLCBpZHJlZykJCQlcCisJcmQJJWFzcjE3LCAlaWRyZWc7CQkJCQlcCisJc2V0aGkJJWhpKGN1cnJlbnRfc2V0KSwgJWRlc3RfcmVnOwkJCVwKKwlzcmwJJWlkcmVnLCAweDFjLCAlaWRyZWc7CQkJCVwKKwlvcgklZGVzdF9yZWcsICVsbyhjdXJyZW50X3NldCksICVkZXN0X3JlZzsJCVwKKwlzbGwJJWlkcmVnLCAweDIsICVpZHJlZzsJCQkJXAorCWxkCVslaWRyZWcgKyAlZGVzdF9yZWddLCAlZGVzdF9yZWc7CisKIC8qIEJsYWNrYm94IC0gdGFrZSBjYXJlIHdpdGggdGhpcy4uLiAtIGNoZWNrIHNtcDRtIGFuZCBzbXA0ZCBiZWZvcmUgY2hhbmdpbmcgdGhpcy4gKi8KICNkZWZpbmUgTE9BRF9DVVJSRU5UKGRlc3RfcmVnLCBpZHJlZykgCQkJCQlcCiAJc2V0aGkJICVoaShfX19iX2xvYWRfY3VycmVudCksICVpZHJlZzsJCQlcCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvc3BhcmMva2VybmVsL01ha2VmaWxlCmluZGV4IDk5YWE0ZGIuLjljZmYyNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL01ha2VmaWxlCkBAIC03MSwxMCArNzEsNiBAQAogb2JqLSQoQ09ORklHX1NQQVJDNjQpCSs9IG5taS5vCiBvYmotJChDT05GSUdfU1BBUkM2NF9TTVApICs9IGNwdW1hcC5vCiAKLSMgc3BhcmMzMiBkbyBub3QgdXNlIEdFTkVSSUNfSEFSRElSUVMgYnV0IHVzZXMgdGhlIGdlbmVyaWMgZGV2cmVzIGltcGxlbWVudGF0aW9uCi1vYmotJChDT05GSUdfU1BBUkMzMikgICAgICs9IGRldnJlcy5vCi1kZXZyZXMteSAgICAgICAgICAgICAgICAgIDo9IC4uLy4uLy4uL2tlcm5lbC9pcnEvZGV2cmVzLm8KLQogb2JqLXkgICAgICAgICAgICAgICAgICAgICArPSBkbWEubwogCiBvYmotJChDT05GSUdfU1BBUkMzMl9QQ0kpICs9IHBjaWMubwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvY3B1LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9jcHUuYwppbmRleCA3OTI1YzU0Li4xMzhkYmJjIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9jcHUuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9jcHUuYwpAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMTEsNyArMTIsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KIAogI2luY2x1ZGUgPGFzbS9zcGl0ZmlyZS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL29wbGliLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vaGVhZC5oPgogI2luY2x1ZGUgPGFzbS9wc3IuaD4KQEAgLTIzLDYgKzI2LDkgQEAKIERFRklORV9QRVJfQ1BVKGNwdWluZm9fc3BhcmMsIF9fY3B1X2RhdGEpID0geyAwIH07CiBFWFBPUlRfUEVSX0NQVV9TWU1CT0woX19jcHVfZGF0YSk7CiAKK2ludCBuY3B1c19wcm9iZWQ7Cit1bnNpZ25lZCBpbnQgZnNyX3N0b3JhZ2U7CisKIHN0cnVjdCBjcHVfaW5mbyB7CiAJaW50IHBzcl92ZXJzOwogCWNvbnN0IGNoYXIgKm5hbWU7CkBAIC0yNDcsMTMgKzI1MywxMiBAQAogICogbWFjaGluZSB0eXBlIHZhbHVlIGludG8gY29uc2lkZXJhdGlvbiB0b28uICBJIHdpbGwgZml4IHRoaXMuCiAgKi8KIAotY29uc3QgY2hhciAqc3BhcmNfY3B1X3R5cGU7Ci1jb25zdCBjaGFyICpzcGFyY19mcHVfdHlwZTsKK3N0YXRpYyBjb25zdCBjaGFyICpzcGFyY19jcHVfdHlwZTsKK3N0YXRpYyBjb25zdCBjaGFyICpzcGFyY19mcHVfdHlwZTsKIGNvbnN0IGNoYXIgKnNwYXJjX3BtdV90eXBlOwogCi11bnNpZ25lZCBpbnQgZnNyX3N0b3JhZ2U7CiAKLXN0YXRpYyB2b2lkIHNldF9jcHVfYW5kX2ZwdShpbnQgcHNyX2ltcGwsIGludCBwc3JfdmVycywgaW50IGZwdV92ZXJzKQorc3RhdGljIHZvaWQgX19pbml0IHNldF9jcHVfYW5kX2ZwdShpbnQgcHNyX2ltcGwsIGludCBwc3JfdmVycywgaW50IGZwdV92ZXJzKQogewogCWNvbnN0IHN0cnVjdCBtYW51ZmFjdHVyZXJfaW5mbyAqbWFudWY7CiAJaW50IGk7CkBAIC0zMTMsNyArMzE4LDEyMyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1NQQVJDMzIKLXZvaWQgX19jcHVpbml0IGNwdV9wcm9iZSh2b2lkKQorc3RhdGljIGludCBzaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpfX3VudXNlZCkKK3sKKwlzZXFfcHJpbnRmKG0sCisJCSAgICJjcHVcdFx0OiAlc1xuIgorCQkgICAiZnB1XHRcdDogJXNcbiIKKwkJICAgInByb21saWJcdFx0OiBWZXJzaW9uICVkIFJldmlzaW9uICVkXG4iCisJCSAgICJwcm9tXHRcdDogJWQuJWRcbiIKKwkJICAgInR5cGVcdFx0OiAlc1xuIgorCQkgICAibmNwdXMgcHJvYmVkXHQ6ICVkXG4iCisJCSAgICJuY3B1cyBhY3RpdmVcdDogJWRcbiIKKyNpZm5kZWYgQ09ORklHX1NNUAorCQkgICAiQ1BVMEJvZ29cdDogJWx1LiUwMmx1XG4iCisJCSAgICJDUFUwQ2xrVGNrXHQ6ICVsZFxuIgorI2VuZGlmCisJCSAgICwKKwkJICAgc3BhcmNfY3B1X3R5cGUsCisJCSAgIHNwYXJjX2ZwdV90eXBlICwKKwkJICAgcm9tdmVjLT5wdl9yb212ZXJzLAorCQkgICBwcm9tX3JldiwKKwkJICAgcm9tdmVjLT5wdl9wcmludHJldiA+PiAxNiwKKwkJICAgcm9tdmVjLT5wdl9wcmludHJldiAmIDB4ZmZmZiwKKwkJICAgJmNwdXR5cHZhbFswXSwKKwkJICAgbmNwdXNfcHJvYmVkLAorCQkgICBudW1fb25saW5lX2NwdXMoKQorI2lmbmRlZiBDT05GSUdfU01QCisJCSAgICwgY3B1X2RhdGEoMCkudWRlbGF5X3ZhbC8oNTAwMDAwL0haKSwKKwkJICAgKGNwdV9kYXRhKDApLnVkZWxheV92YWwvKDUwMDAvSFopKSAlIDEwMCwKKwkJICAgY3B1X2RhdGEoMCkuY2xvY2tfdGljaworI2VuZGlmCisJCSk7CisKKyNpZmRlZiBDT05GSUdfU01QCisJc21wX2JvZ28obSk7CisjZW5kaWYKKwltbXVfaW5mbyhtKTsKKyNpZmRlZiBDT05GSUdfU01QCisJc21wX2luZm8obSk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfU1BBUkMzMiAqLworCisjaWZkZWYgQ09ORklHX1NQQVJDNjQKK3Vuc2lnbmVkIGludCBkY2FjaGVfcGFyaXR5X3RsMV9vY2N1cnJlZDsKK3Vuc2lnbmVkIGludCBpY2FjaGVfcGFyaXR5X3RsMV9vY2N1cnJlZDsKKworCitzdGF0aWMgaW50IHNob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKl9fdW51c2VkKQoreworCXNlcV9wcmludGYobSwKKwkJICAgImNwdVx0XHQ6ICVzXG4iCisJCSAgICJmcHVcdFx0OiAlc1xuIgorCQkgICAicG11XHRcdDogJXNcbiIKKwkJICAgInByb21cdFx0OiAlc1xuIgorCQkgICAidHlwZVx0XHQ6ICVzXG4iCisJCSAgICJuY3B1cyBwcm9iZWRcdDogJWRcbiIKKwkJICAgIm5jcHVzIGFjdGl2ZVx0OiAlZFxuIgorCQkgICAiRCQgcGFyaXR5IHRsMVx0OiAldVxuIgorCQkgICAiSSQgcGFyaXR5IHRsMVx0OiAldVxuIgorI2lmbmRlZiBDT05GSUdfU01QCisJCSAgICJDcHUwQ2xrVGNrXHQ6ICUwMTZseFxuIgorI2VuZGlmCisJCSAgICwKKwkJICAgc3BhcmNfY3B1X3R5cGUsCisJCSAgIHNwYXJjX2ZwdV90eXBlLAorCQkgICBzcGFyY19wbXVfdHlwZSwKKwkJICAgcHJvbV92ZXJzaW9uLAorCQkgICAoKHRsYl90eXBlID09IGh5cGVydmlzb3IpID8KKwkJICAgICJzdW40diIgOgorCQkgICAgInN1bjR1IiksCisJCSAgIG5jcHVzX3Byb2JlZCwKKwkJICAgbnVtX29ubGluZV9jcHVzKCksCisJCSAgIGRjYWNoZV9wYXJpdHlfdGwxX29jY3VycmVkLAorCQkgICBpY2FjaGVfcGFyaXR5X3RsMV9vY2N1cnJlZAorI2lmbmRlZiBDT05GSUdfU01QCisJCSAgICwgY3B1X2RhdGEoMCkuY2xvY2tfdGljaworI2VuZGlmCisJCSk7CisjaWZkZWYgQ09ORklHX1NNUAorCXNtcF9ib2dvKG0pOworI2VuZGlmCisJbW11X2luZm8obSk7CisjaWZkZWYgQ09ORklHX1NNUAorCXNtcF9pbmZvKG0pOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX1NQQVJDNjQgKi8KKworc3RhdGljIHZvaWQgKmNfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKK3sKKwkvKiBUaGUgcG9pbnRlciB3ZSBhcmUgcmV0dXJuaW5nIGlzIGFyYml0cmFyeSwKKwkgKiBpdCBqdXN0IGhhcyB0byBiZSBub24tTlVMTCBhbmQgbm90IElTX0VSUgorCSAqIGluIHRoZSBzdWNjZXNzIGNhc2UuCisJICovCisJcmV0dXJuICpwb3MgPT0gMCA/ICZjX3N0YXJ0IDogTlVMTDsKK30KKworc3RhdGljIHZvaWQgKmNfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQoreworCSsrKnBvczsKKwlyZXR1cm4gY19zdGFydChtLCBwb3MpOworfQorCitzdGF0aWMgdm9pZCBjX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworfQorCitjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgY3B1aW5mb19vcCA9IHsKKwkuc3RhcnQgPWNfc3RhcnQsCisJLm5leHQgPQljX25leHQsCisJLnN0b3AgPQljX3N0b3AsCisJLnNob3cgPQlzaG93X2NwdWluZm8sCit9OworCisjaWZkZWYgQ09ORklHX1NQQVJDMzIKK3N0YXRpYyBpbnQgX19pbml0IGNwdV90eXBlX3Byb2JlKHZvaWQpCiB7CiAJaW50IHBzcl9pbXBsLCBwc3JfdmVycywgZnB1X3ZlcnM7CiAJaW50IHBzcjsKQEAgLTMzMiw4ICs0NTMsMTIgQEAKIAlwdXRfcHNyKHBzcik7CiAKIAlzZXRfY3B1X2FuZF9mcHUocHNyX2ltcGwsIHBzcl92ZXJzLCBmcHVfdmVycyk7CisKKwlyZXR1cm4gMDsKIH0KLSNlbHNlCisjZW5kaWYgLyogQ09ORklHX1NQQVJDMzIgKi8KKworI2lmZGVmIENPTkZJR19TUEFSQzY0CiBzdGF0aWMgdm9pZCBfX2luaXQgc3VuNHZfY3B1X3Byb2JlKHZvaWQpCiB7CiAJc3dpdGNoIChzdW40dl9jaGlwX3R5cGUpIHsKQEAgLTM3NCw2ICs0OTksNiBAQAogCX0KIAlyZXR1cm4gMDsKIH0KKyNlbmRpZiAvKiBDT05GSUdfU1BBUkM2NCAqLwogCiBlYXJseV9pbml0Y2FsbChjcHVfdHlwZV9wcm9iZSk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2NwdW1hcC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvY3B1bWFwLmMKaW5kZXggOGRlNjRjOC4uZDkxZmQ3OCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvY3B1bWFwLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvY3B1bWFwLmMKQEAgLTIwMiw3ICsyMDIsNyBAQAogCW5ld190cmVlLT50b3RhbF9ub2RlcyA9IG47CiAJbWVtY3B5KCZuZXdfdHJlZS0+bGV2ZWwsIHRtcF9sZXZlbCwgc2l6ZW9mKHRtcF9sZXZlbCkpOwogCi0JcHJldl9jcHUgPSBjcHUgPSBmaXJzdF9jcHUoY3B1X29ubGluZV9tYXApOworCXByZXZfY3B1ID0gY3B1ID0gY3B1bWFza19maXJzdChjcHVfb25saW5lX21hc2spOwogCiAJLyogSW5pdGlhbGl6ZSBhbGwgbGV2ZWxzIGluIHRoZSB0cmVlIHdpdGggdGhlIGZpcnN0IENQVSAqLwogCWZvciAobGV2ZWwgPSBDUFVJTkZPX0xWTF9QUk9DOyBsZXZlbCA+PSBDUFVJTkZPX0xWTF9ST09UOyBsZXZlbC0tKSB7CkBAIC0zODEsNyArMzgxLDcgQEAKIAl9CiAKIAkvKiBJbXBvc3NpYmxlLCBzaW5jZSBudW1fb25saW5lX2NwdXMoKSA8PSBudW1fcG9zc2libGVfY3B1cygpICovCi0JcmV0dXJuIGZpcnN0X2NwdShjcHVfb25saW5lX21hcCk7CisJcmV0dXJuIGNwdW1hc2tfZmlyc3QoY3B1X29ubGluZV9tYXNrKTsKIH0KIAogc3RhdGljIGludCBfbWFwX3RvX2NwdSh1bnNpZ25lZCBpbnQgaW5kZXgpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9kZXZpY2VzLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9kZXZpY2VzLmMKaW5kZXggZDJlZGRkNi4uMTEzYzA1MiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvZGV2aWNlcy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2RldmljZXMuYwpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vY3B1ZGF0YS5oPgogCi1leHRlcm4gdm9pZCBjcHVfcHJvYmUodm9pZCk7CiBleHRlcm4gdm9pZCBjbG9ja19zdG9wX3Byb2JlKHZvaWQpOyAvKiB0YWRwb2xlLmMgKi8KIGV4dGVybiB2b2lkIHN1bjRjX3Byb2JlX21lbWVycl9yZWcodm9pZCk7CiAKQEAgLTExNSw3ICsxMTQsNyBAQAogCiB2b2lkIF9faW5pdCBkZXZpY2Vfc2Nhbih2b2lkKQogewotCXByb21fcHJpbnRmKCJCb290aW5nIExpbnV4Li4uXG4iKTsKKwlwcmludGsoS0VSTl9OT1RJQ0UgIkJvb3RpbmcgTGludXguLi5cbiIpOwogCiAjaWZuZGVmIENPTkZJR19TTVAKIAl7CkBAIC0xMzMsNyArMTMyLDYgQEAKIAl9CiAjZW5kaWYgLyogIUNPTkZJR19TTVAgKi8KIAotCWNwdV9wcm9iZSgpOwogCXsKIAkJZXh0ZXJuIHZvaWQgYXV4aW9fcHJvYmUodm9pZCk7CiAJCWV4dGVybiB2b2lkIGF1eGlvX3Bvd2VyX3Byb2JlKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvZHMuYyBiL2FyY2gvc3BhcmMva2VybmVsL2RzLmMKaW5kZXggM2FkZDRkZS4uZGQxMzQyYyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvZHMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9kcy5jCkBAIC00OTcsNyArNDk3LDcgQEAKIAl0YWctPm51bV9yZWNvcmRzID0gbmNwdXM7CiAKIAlpID0gMDsKLQlmb3JfZWFjaF9jcHVfbWFzayhjcHUsICptYXNrKSB7CisJZm9yX2VhY2hfY3B1KGNwdSwgbWFzaykgewogCQllbnRbaV0uY3B1ID0gY3B1OwogCQllbnRbaV0ucmVzdWx0ID0gRFJfQ1BVX1JFU19PSzsKIAkJZW50W2ldLnN0YXQgPSBkZWZhdWx0X3N0YXQ7CkBAIC01MzQsNyArNTM0LDcgQEAKIAlpbnQgcmVzcF9sZW4sIG5jcHVzLCBjcHU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCW5jcHVzID0gY3B1c193ZWlnaHQoKm1hc2spOworCW5jcHVzID0gY3B1bWFza193ZWlnaHQobWFzayk7CiAJcmVzcF9sZW4gPSBkcl9jcHVfc2l6ZV9yZXNwb25zZShuY3B1cyk7CiAJcmVzcCA9IGt6YWxsb2MocmVzcF9sZW4sIEdGUF9LRVJORUwpOwogCWlmICghcmVzcCkKQEAgLTU0Nyw3ICs1NDcsNyBAQAogCW1kZXNjX3BvcHVsYXRlX3ByZXNlbnRfbWFzayhtYXNrKTsKIAltZGVzY19maWxsX2luX2NwdV9kYXRhKG1hc2spOwogCi0JZm9yX2VhY2hfY3B1X21hc2soY3B1LCAqbWFzaykgeworCWZvcl9lYWNoX2NwdShjcHUsIG1hc2spIHsKIAkJaW50IGVycjsKIAogCQlwcmludGsoS0VSTl9JTkZPICJkcy0lbGx1OiBTdGFydGluZyBjcHUgJWQuLi5cbiIsCkBAIC01OTMsNyArNTkzLDcgQEAKIAlpbnQgcmVzcF9sZW4sIG5jcHVzLCBjcHU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCW5jcHVzID0gY3B1c193ZWlnaHQoKm1hc2spOworCW5jcHVzID0gY3B1bWFza193ZWlnaHQobWFzayk7CiAJcmVzcF9sZW4gPSBkcl9jcHVfc2l6ZV9yZXNwb25zZShuY3B1cyk7CiAJcmVzcCA9IGt6YWxsb2MocmVzcF9sZW4sIEdGUF9LRVJORUwpOwogCWlmICghcmVzcCkKQEAgLTYwMyw3ICs2MDMsNyBAQAogCQkJICAgICByZXNwX2xlbiwgbmNwdXMsIG1hc2ssCiAJCQkgICAgIERSX0NQVV9TVEFUX1VOQ09ORklHVVJFRCk7CiAKLQlmb3JfZWFjaF9jcHVfbWFzayhjcHUsICptYXNrKSB7CisJZm9yX2VhY2hfY3B1KGNwdSwgbWFzaykgewogCQlpbnQgZXJyOwogCiAJCXByaW50ayhLRVJOX0lORk8gImRzLSVsbHU6IFNodXR0aW5nIGRvd24gY3B1ICVkLi4uXG4iLApAQCAtNjQ5LDEzICs2NDksMTMgQEAKIAogCXB1cmdlX2R1cHMoY3B1X2xpc3QsIHRhZy0+bnVtX3JlY29yZHMpOwogCi0JY3B1c19jbGVhcihtYXNrKTsKKwljcHVtYXNrX2NsZWFyKCZtYXNrKTsKIAlmb3IgKGkgPSAwOyBpIDwgdGFnLT5udW1fcmVjb3JkczsgaSsrKSB7CiAJCWlmIChjcHVfbGlzdFtpXSA9PSBDUFVfU0VOVElORUwpCiAJCQljb250aW51ZTsKIAogCQlpZiAoY3B1X2xpc3RbaV0gPCBucl9jcHVfaWRzKQotCQkJY3B1X3NldChjcHVfbGlzdFtpXSwgbWFzayk7CisJCQljcHVtYXNrX3NldF9jcHUoY3B1X2xpc3RbaV0sICZtYXNrKTsKIAl9CiAKIAlpZiAodGFnLT50eXBlID09IERSX0NQVV9DT05GSUdVUkUpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvZW50cnkuUwppbmRleCA2ZGE3ODRhLi44MzQxOTYzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2VudHJ5LlMKQEAgLTI2OSwxOSArMjY5LDIyIEBACiAJLyogSGVyZSBpcyB3aGVyZSB3ZSBjaGVjayBmb3IgcG9zc2libGUgU01QIElQSSBwYXNzZWQgdG8gdXMKIAkgKiBvbiBzb21lIGxldmVsIG90aGVyIHRoYW4gMTUgd2hpY2ggaXMgdGhlIE5NSSBhbmQgb25seSB1c2VkCiAJICogZm9yIGNyb3NzIGNhbGxzLiAgVGhhdCBoYXMgYSBzZXBhcmF0ZSBlbnRyeSBwb2ludCBiZWxvdy4KKwkgKgorCSAqIElQSXMgYXJlIHNlbnQgb24gTGV2ZWwgMTIsIDEzIGFuZCAxNC4gU2VlIElSUV9JUElfKi4KIAkgKi8KIG1heWJlX3NtcDRtX21zZzoKIAlHRVRfUFJPQ0VTU09SNE1fSUQobzMpCiAJc2V0aGkJJWhpKHN1bjRtX2lycV9wZXJjcHUpLCAlbDUKIAlzbGwJJW8zLCAyLCAlbzMKIAlvcgklbDUsICVsbyhzdW40bV9pcnFfcGVyY3B1KSwgJW81Ci0Jc2V0aGkJJWhpKDB4NDAwMDAwMDApLCAlbzIKKwlzZXRoaQklaGkoMHg3MDAwMDAwMCksICVvMgkhIENoZWNrIGFsbCBzb2Z0LUlSUXMKIAlsZAlbJW81ICsgJW8zXSwgJW8xCiAJbGQJWyVvMSArIDB4MDBdLCAlbzMJISBzdW40bV9pcnFfcGVyY3B1W2NwdV0tPnBlbmRpbmcKIAlhbmRjYwklbzMsICVvMiwgJWcwCiAJYmUsYQlzbXA0bV90aWNrZXIKIAkgY21wCSVsNywgMTQKLQlzdAklbzIsIFslbzEgKyAweDA0XQkhIHN1bjRtX2lycV9wZXJjcHVbY3B1XS0+Y2xlYXI9MHg0MDAwMDAwMAorCS8qIFNvZnQtSVJRIElQSSAqLworCXN0CSVvMiwgWyVvMSArIDB4MDRdCSEgc3VuNG1faXJxX3BlcmNwdVtjcHVdLT5jbGVhcj0weDcwMDAwMDAwCiAJV1JJVEVfUEFVU0UKIAlsZAlbJW8xICsgMHgwMF0sICVnMAkhIHN1bjRtX2lycV9wZXJjcHVbY3B1XS0+cGVuZGluZwogCVdSSVRFX1BBVVNFCkBAIC0yOTAsOSArMjkzLDI3IEBACiAJV1JJVEVfUEFVU0UKIAl3cgklbDQsIFBTUl9FVCwgJXBzcgogCVdSSVRFX1BBVVNFCi0JY2FsbAlzbXBfcmVzY2hlZHVsZV9pcnEKKwlzbGwJJW8yLCAyOCwgJW8yCQkhIHNoaWZ0IGZvciBzaW1wbGVyIGNoZWNrcyBiZWxvdworbWF5YmVfc21wNG1fbXNnX2NoZWNrX3NpbmdsZToKKwlhbmRjYwklbzIsIDB4MSwgJWcwCisJYmVxLGEJbWF5YmVfc21wNG1fbXNnX2NoZWNrX21hc2sKKwkgYW5kY2MJJW8yLCAweDIsICVnMAorCWNhbGwJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2ludGVycnVwdAogCSBub3AKLQorCWFuZGNjCSVvMiwgMHgyLCAlZzAKK21heWJlX3NtcDRtX21zZ19jaGVja19tYXNrOgorCWJlcSxhCW1heWJlX3NtcDRtX21zZ19jaGVja19yZXNjaGVkCisJIGFuZGNjCSVvMiwgMHg0LCAlZzAKKwljYWxsCXNtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdAorCSBub3AKKwlhbmRjYwklbzIsIDB4NCwgJWcwCittYXliZV9zbXA0bV9tc2dfY2hlY2tfcmVzY2hlZDoKKwkvKiByZXNjaGVkdWxpbmcgaXMgZG9uZSBpbiBSRVNUT1JFX0FMTCByZWdhcmRsZXNzLCBidXQgaW5jciBzdGF0cyAqLworCWJlcSxhCW1heWJlX3NtcDRtX21zZ19vdXQKKwkgbm9wCisJY2FsbAlzbXBfcmVzY2hlZF9pbnRlcnJ1cHQKKwkgbm9wCittYXliZV9zbXA0bV9tc2dfb3V0OgogCVJFU1RPUkVfQUxMCiAKIAkuYWxpZ24JNApAQCAtNDAxLDE4ICs0MjIsMTggQEAKIDE6CWIsYQkxYgogCiAjaWZkZWYgQ09ORklHX1NQQVJDX0xFT04KLQotCS5nbG9ibAlzbXBsZW9uX3RpY2tlcgotCS8qIFNNUCBwZXItY3B1IHRpY2tlciBpbnRlcnJ1cHRzIGFyZSBoYW5kbGVkIHNwZWNpYWxseS4gKi8KLXNtcGxlb25fdGlja2VyOgorCS5nbG9ibAlzbXBsZW9uX2lwaQorCS5leHRlcm4gbGVvbl9pcGlfaW50ZXJydXB0CisJLyogU01QIHBlci1jcHUgSVBJIGludGVycnVwdHMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5LiAqLworc21wbGVvbl9pcGk6CiAgICAgICAgIFNBVkVfQUxMCiAJb3IJJWwwLCBQU1JfUElMLCAlZzIKIAl3cgklZzIsIDB4MCwgJXBzcgogCVdSSVRFX1BBVVNFCiAJd3IJJWcyLCBQU1JfRVQsICVwc3IKIAlXUklURV9QQVVTRQotCWNhbGwJbGVvbl9wZXJjcHVfdGltZXJfaW50ZXJydXB0Ci0JIGFkZAklc3AsIFNUQUNLRlJBTUVfU1osICVvMAorCWNhbGwJbGVvbnNtcF9pcGlfaW50ZXJydXB0CisJIGFkZAklc3AsIFNUQUNLRlJBTUVfU1osICVvMSAhIHB0X3JlZ3MKIAl3cgklbDAsIFBTUl9FVCwgJXBzcgogCVdSSVRFX1BBVVNFCiAJUkVTVE9SRV9BTEwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2hlYWRfMzIuUyBiL2FyY2gvc3BhcmMva2VybmVsL2hlYWRfMzIuUwppbmRleCA1OTQyMzQ5Li41ODc3ODU3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9oZWFkXzMyLlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvaGVhZF8zMi5TCkBAIC04MTAsMzAgKzgxMCwyNCBAQAogZ290X3Byb3A6CiAjaWZkZWYgQ09ORklHX1NQQVJDX0xFT04KIAkgICAgICAgIC8qIG5vIGNwdS10eXBlIGNoZWNrIGlzIG5lZWRlZCwgaXQgaXMgYSBTUEFSQy1MRU9OICovCisKKwkJc2V0aGkJJWhpKGJvb3RfY3B1X2lkKSwgJWcyCSEgYm9vdC1jcHUgaW5kZXgKKwogI2lmZGVmIENPTkZJR19TTVAKLQkJYmEgbGVvbl9zbXBfaW5pdAotCQkgbm9wCi0KLQkJLmdsb2JhbCBsZW9uX3NtcF9pbml0Ci1sZW9uX3NtcF9pbml0OgotCQlzZXRoaQklaGkoYm9vdF9jcHVfaWQpLCAlZzEgICAgISBtYXN0ZXIgYWx3YXlzIDAKLQkJc3RiCSVnMCwgWyVnMSArICVsbyhib290X2NwdV9pZCldCi0JCXNldGhpCSVoaShib290X2NwdV9pZDQpLCAlZzEgICAhIG1hc3RlciBhbHdheXMgMAotCQlzdGIJJWcwLCBbJWcxICsgJWxvKGJvb3RfY3B1X2lkNCldCi0KLQkJcmQgICAgICVhc3IxNywlZzEKLQkJc3JsICAgICVnMSwyOCwlZzEKLQotCQljbXAgJWcwLCVnMQotCQkgYmVxIHN1bjRjX2NvbnRpbnVlX2Jvb3QgICAgICAgICAhY29udGludWUgd2l0aCBtYXN0ZXIKLQkJbm9wCi0KLQkJYmEgbGVvbl9zbXBfY3B1X3N0YXJ0dXAKLQkJIG5vcAotI2Vsc2UKLQkJYmEgc3VuNGNfY29udGludWVfYm9vdAorCQlsZHViCVslZzIgKyAlbG8oYm9vdF9jcHVfaWQpXSwgJWcxCisJCWNtcAklZzEsIDB4ZmYJCSEgdW5zZXQgbWVhbnMgZmlyc3QgQ1BVCisJCWJuZQlsZW9uX3NtcF9jcHVfc3RhcnR1cAkhIGNvbnRpbnVlIG9ubHkgd2l0aCBtYXN0ZXIKIAkJIG5vcAogI2VuZGlmCisJCS8qIEdldCBDUFUtSUQgZnJvbSBtb3N0IHNpZ25pZmljYW50IDQtYml0IG9mIEFTUjE3ICovCisJCXJkICAgICAlYXNyMTcsICVnMQorCQlzcmwgICAgJWcxLCAyOCwgJWcxCisKKwkJLyogVXBkYXRlIGJvb3RfY3B1X2lkIG9ubHkgb24gYm9vdCBjcHUgKi8KKwkJc3R1YgklZzEsIFslZzIgKyAlbG8oYm9vdF9jcHVfaWQpXQorCisJCWJhIHN1bjRjX2NvbnRpbnVlX2Jvb3QKKwkJIG5vcAogI2VuZGlmCiAJCXNldAljcHV0eXB2YWwsICVvMgogCQlsZHViCVslbzIgKyAweDRdLCAlbDEKQEAgLTg5Myw5ICs4ODcsNiBAQAogCXN0YSAgICAgJWc0LCBbJWcwXSBBU0lfTV9WSUtJTkdfVE1QMQogCXNldGhpCSVoaShib290X2NwdV9pZCksICVnNQogCXN0YgklZzQsIFslZzUgKyAlbG8oYm9vdF9jcHVfaWQpXQotCXNsbAklZzQsIDIsICVnNAotCXNldGhpCSVoaShib290X2NwdV9pZDQpLCAlZzUKLQlzdGIJJWc0LCBbJWc1ICsgJWxvKGJvb3RfY3B1X2lkNCldCiAjZW5kaWYKIAogCS8qIEZhbGwgdGhyb3VnaCB0byBzdW40bV9pbml0ICovCkBAIC0xMDI0LDE0ICsxMDE1LDI4IEBACiAJCWJsCTFiCiAJCSBhZGQJJW8wLCAweDEsICVvMAogCisJCS8qIElmIGJvb3RfY3B1X2lkIGhhcyBub3QgYmVlbiBzZXR1cCBieSBtYWNoaW5lIHNwZWNpZmljCisJCSAqIGluaXQtY29kZSBhYm92ZSB3ZSBkZWZhdWx0IGl0IHRvIHplcm8uCisJCSAqLworCQlzZXRoaQklaGkoYm9vdF9jcHVfaWQpLCAlZzIKKwkJbGR1YglbJWcyICsgJWxvKGJvb3RfY3B1X2lkKV0sICVnMworCQljbXAJJWczLCAweGZmCisJCWJuZQkxZgorCQkgbm9wCisJCW1vdgklZzAsICVnMworCQlzdHViCSVnMywgWyVnMiArICVsbyhib290X2NwdV9pZCldCisKKzE6CQkvKiBib290X2NwdV9pZCBzZXQuIGNhbGN1bGF0ZSBib290X2NwdV9pZDQgPSBib290X2NwdV9pZCo0ICovCisJCXNsbAklZzMsIDIsICVnMworCQlzZXRoaQklaGkoYm9vdF9jcHVfaWQ0KSwgJWcyCisJCXN0dWIJJWczLCBbJWcyICsgJWxvKGJvb3RfY3B1X2lkNCldCisKIAkJLyogSW5pdGlhbGl6ZSB0aGUgdXdpbm1hc2sgdmFsdWUgZm9yIGluaXQgdGFzayBqdXN0IGluIGNhc2UuCiAJCSAqIEJ1dCBmaXJzdCBtYWtlIGN1cnJlbnRfc2V0W2Jvb3RfY3B1X2lkXSBwb2ludCB0byBzb21ldGhpbmcgdXNlZnVsLgogCQkgKi8KIAkJc2V0CWluaXRfdGhyZWFkX3VuaW9uLCAlZzYKIAkJc2V0CWN1cnJlbnRfc2V0LCAlZzIKICNpZmRlZiBDT05GSUdfU01QCi0JCXNldGhpCSVoaShib290X2NwdV9pZDQpLCAlZzMKLQkJbGR1YglbJWczICsgJWxvKGJvb3RfY3B1X2lkNCldLCAlZzMKIAkJc3QJJWc2LCBbJWcyXQogCQlhZGQJJWcyLCAlZzMsICVnMgogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9pb3BvcnQuYyBiL2FyY2gvc3BhcmMva2VybmVsL2lvcG9ydC5jCmluZGV4IGM2Y2U5YTYuLjFjOWM4MGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2lvcG9ydC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2lvcG9ydC5jCkBAIC01MCwxMCArNTAsMTUgQEAKICNpbmNsdWRlIDxhc20vaW8tdW5pdC5oPgogI2luY2x1ZGUgPGFzbS9sZW9uLmg+CiAKKy8qIFRoaXMgZnVuY3Rpb24gbXVzdCBtYWtlIHN1cmUgdGhhdCBjYWNoZXMgYW5kIG1lbW9yeSBhcmUgY29oZXJlbnQgYWZ0ZXIgRE1BCisgKiBPbiBMRU9OIHN5c3RlbXMgd2l0aG91dCBjYWNoZSBzbm9vcGluZyBpdCBmbHVzaGVzIHRoZSBlbnRpcmUgRC1DQUNIRS4KKyAqLwogI2lmbmRlZiBDT05GSUdfU1BBUkNfTEVPTgotI2RlZmluZSBtbXVfaW52YWxfZG1hX2FyZWEocCwgbCkJLyogQW50b24gcHVsbGVkIGl0IG91dCBmb3IgMi40LjAteHggKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfbWFrZV9jb2hlcmVudCh1bnNpZ25lZCBsb25nIHBhLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKK30KICNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgbW11X2ludmFsX2RtYV9hcmVhKHZvaWQgKnZhLCB1bnNpZ25lZCBsb25nIGxlbikKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfbWFrZV9jb2hlcmVudCh1bnNpZ25lZCBsb25nIHBhLCB1bnNpZ25lZCBsb25nIGxlbikKIHsKIAlpZiAoIXNwYXJjX2xlb24zX3Nub29waW5nX2VuYWJsZWQoKSkKIAkJbGVvbl9mbHVzaF9kY2FjaGVfYWxsKCk7CkBAIC0yODQsNyArMjg5LDYgQEAKIAkJcHJpbnRrKCJzYnVzX2FsbG9jX2NvbnNpc3RlbnQ6IGNhbm5vdCBvY2N1cHkgMHglbHgiLCBsZW5fdG90YWwpOwogCQlnb3RvIGVycl9ub3ZhOwogCX0KLQltbXVfaW52YWxfZG1hX2FyZWEoKHZvaWQgKil2YSwgbGVuX3RvdGFsKTsKIAogCS8vIFhYWCBUaGUgbW11X21hcF9kbWFfYXJlYSBkb2VzIHRoaXMgZm9yIHVzIGJlbG93LCBzZWUgY29tbWVudHMuCiAJLy8gc3BhcmNfbWFwaW9yYW5nZSgwLCB2aXJ0X3RvX3BoeXModmEpLCByZXMtPnN0YXJ0LCBsZW5fdG90YWwpOwpAQCAtMzM2LDcgKzM0MCw2IEBACiAJcmVsZWFzZV9yZXNvdXJjZShyZXMpOwogCWtmcmVlKHJlcyk7CiAKLQkvKiBtbXVfaW52YWxfZG1hX2FyZWEodmEsIG4pOyAqLyAvKiBpdCdzIGNvbnNpc3RlbnQsIGlzbid0IGl0ICovCiAJcGd2ID0gdmlydF90b19wYWdlKHApOwogCW1tdV91bm1hcF9kbWFfYXJlYShkZXYsIGJhLCBuKTsKIApAQCAtNDYzLDcgKzQ2Niw2IEBACiAJCXByaW50aygicGNpX2FsbG9jX2NvbnNpc3RlbnQ6IGNhbm5vdCBvY2N1cHkgMHglbHgiLCBsZW5fdG90YWwpOwogCQlnb3RvIGVycl9ub3ZhOwogCX0KLQltbXVfaW52YWxfZG1hX2FyZWEodmEsIGxlbl90b3RhbCk7CiAJc3BhcmNfbWFwaW9yYW5nZSgwLCB2aXJ0X3RvX3BoeXModmEpLCByZXMtPnN0YXJ0LCBsZW5fdG90YWwpOwogCiAJKnBiYSA9IHZpcnRfdG9fcGh5cyh2YSk7IC8qIGVxdWFscyB2aXJ0X3RvX2J1cyAoUi5JLlAuKSBmb3IgdXMuICovCkBAIC00ODksNyArNDkxLDYgQEAKIAkJCQlkbWFfYWRkcl90IGJhKQogewogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCXZvaWQgKnBncDsKIAogCWlmICgocmVzID0gX3NwYXJjX2ZpbmRfcmVzb3VyY2UoJl9zcGFyY19kdm1hLAogCSAgICAodW5zaWduZWQgbG9uZylwKSkgPT0gTlVMTCkgewpAQCAtNTA5LDE0ICs1MTAsMTIgQEAKIAkJcmV0dXJuOwogCX0KIAotCXBncCA9IHBoeXNfdG9fdmlydChiYSk7CS8qIGJ1c190b192aXJ0IGFjdHVhbGx5ICovCi0JbW11X2ludmFsX2RtYV9hcmVhKHBncCwgbik7CisJZG1hX21ha2VfY29oZXJlbnQoYmEsIG4pOwogCXNwYXJjX3VubWFwaW9yYW5nZSgodW5zaWduZWQgbG9uZylwLCBuKTsKIAogCXJlbGVhc2VfcmVzb3VyY2UocmVzKTsKIAlrZnJlZShyZXMpOwotCi0JZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylwZ3AsIGdldF9vcmRlcihuKSk7CisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQoYmEpLCBnZXRfb3JkZXIobikpOwogfQogCiAvKgpAQCAtNTM1LDcgKzUzNCw3IEBACiAJCQkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJaWYgKGRpciAhPSBQQ0lfRE1BX1RPREVWSUNFKQotCQltbXVfaW52YWxfZG1hX2FyZWEocGh5c190b192aXJ0KGJhKSwgUEFHRV9BTElHTihzaXplKSk7CisJCWRtYV9tYWtlX2NvaGVyZW50KGJhLCBQQUdFX0FMSUdOKHNpemUpKTsKIH0KIAogLyogTWFwIGEgc2V0IG9mIGJ1ZmZlcnMgZGVzY3JpYmVkIGJ5IHNjYXR0ZXJsaXN0IGluIHN0cmVhbWluZwpAQCAtNTYyLDggKzU2MSw3IEBACiAKIAkvKiBJSWVwIGlzIHdyaXRlLXRocm91Z2gsIG5vdCBmbHVzaGluZy4gKi8KIAlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBuZW50cywgbikgewotCQlCVUdfT04ocGFnZV9hZGRyZXNzKHNnX3BhZ2Uoc2cpKSA9PSBOVUxMKTsKLQkJc2ctPmRtYV9hZGRyZXNzID0gdmlydF90b19waHlzKHNnX3ZpcnQoc2cpKTsKKwkJc2ctPmRtYV9hZGRyZXNzID0gc2dfcGh5cyhzZyk7CiAJCXNnLT5kbWFfbGVuZ3RoID0gc2ctPmxlbmd0aDsKIAl9CiAJcmV0dXJuIG5lbnRzOwpAQCAtNTgyLDkgKzU4MCw3IEBACiAKIAlpZiAoZGlyICE9IFBDSV9ETUFfVE9ERVZJQ0UpIHsKIAkJZm9yX2VhY2hfc2coc2dsLCBzZywgbmVudHMsIG4pIHsKLQkJCUJVR19PTihwYWdlX2FkZHJlc3Moc2dfcGFnZShzZykpID09IE5VTEwpOwotCQkJbW11X2ludmFsX2RtYV9hcmVhKHBhZ2VfYWRkcmVzcyhzZ19wYWdlKHNnKSksCi0JCQkJCSAgIFBBR0VfQUxJR04oc2ctPmxlbmd0aCkpOworCQkJZG1hX21ha2VfY29oZXJlbnQoc2dfcGh5cyhzZyksIFBBR0VfQUxJR04oc2ctPmxlbmd0aCkpOwogCQl9CiAJfQogfQpAQCAtNjAzLDggKzU5OSw3IEBACiAJCQkJICAgICAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKIAlpZiAoZGlyICE9IFBDSV9ETUFfVE9ERVZJQ0UpIHsKLQkJbW11X2ludmFsX2RtYV9hcmVhKHBoeXNfdG9fdmlydChiYSksCi0JCQkJICAgUEFHRV9BTElHTihzaXplKSk7CisJCWRtYV9tYWtlX2NvaGVyZW50KGJhLCBQQUdFX0FMSUdOKHNpemUpKTsKIAl9CiB9CiAKQEAgLTYxMiw4ICs2MDcsNyBAQAogCQkJCQkgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKIAlpZiAoZGlyICE9IFBDSV9ETUFfVE9ERVZJQ0UpIHsKLQkJbW11X2ludmFsX2RtYV9hcmVhKHBoeXNfdG9fdmlydChiYSksCi0JCQkJICAgUEFHRV9BTElHTihzaXplKSk7CisJCWRtYV9tYWtlX2NvaGVyZW50KGJhLCBQQUdFX0FMSUdOKHNpemUpKTsKIAl9CiB9CiAKQEAgLTYzMSw5ICs2MjUsNyBAQAogCiAJaWYgKGRpciAhPSBQQ0lfRE1BX1RPREVWSUNFKSB7CiAJCWZvcl9lYWNoX3NnKHNnbCwgc2csIG5lbnRzLCBuKSB7Ci0JCQlCVUdfT04ocGFnZV9hZGRyZXNzKHNnX3BhZ2Uoc2cpKSA9PSBOVUxMKTsKLQkJCW1tdV9pbnZhbF9kbWFfYXJlYShwYWdlX2FkZHJlc3Moc2dfcGFnZShzZykpLAotCQkJCQkgICBQQUdFX0FMSUdOKHNnLT5sZW5ndGgpKTsKKwkJCWRtYV9tYWtlX2NvaGVyZW50KHNnX3BoeXMoc2cpLCBQQUdFX0FMSUdOKHNnLT5sZW5ndGgpKTsKIAkJfQogCX0KIH0KQEAgLTY0Niw5ICs2MzgsNyBAQAogCiAJaWYgKGRpciAhPSBQQ0lfRE1BX1RPREVWSUNFKSB7CiAJCWZvcl9lYWNoX3NnKHNnbCwgc2csIG5lbnRzLCBuKSB7Ci0JCQlCVUdfT04ocGFnZV9hZGRyZXNzKHNnX3BhZ2Uoc2cpKSA9PSBOVUxMKTsKLQkJCW1tdV9pbnZhbF9kbWFfYXJlYShwYWdlX2FkZHJlc3Moc2dfcGFnZShzZykpLAotCQkJCQkgICBQQUdFX0FMSUdOKHNnLT5sZW5ndGgpKTsKKwkJCWRtYV9tYWtlX2NvaGVyZW50KHNnX3BoeXMoc2cpLCBQQUdFX0FMSUdOKHNnLT5sZW5ndGgpKTsKIAkJfQogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2lycS5oIGIvYXJjaC9zcGFyYy9rZXJuZWwvaXJxLmgKaW5kZXggMDA4NDUzYi4uMTAwYjljMiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvaXJxLmgKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvaXJxLmgKQEAgLTIsNiArMiwyMyBAQAogCiAjaW5jbHVkZSA8YXNtL2J0Zml4dXAuaD4KIAorc3RydWN0IGlycV9idWNrZXQgeworICAgICAgICBzdHJ1Y3QgaXJxX2J1Y2tldCAqbmV4dDsKKyAgICAgICAgdW5zaWduZWQgaW50IHJlYWxfaXJxOworICAgICAgICB1bnNpZ25lZCBpbnQgaXJxOworICAgICAgICB1bnNpZ25lZCBpbnQgcGlsOworfTsKKworI2RlZmluZSBTVU40RF9NQVhfQk9BUkQgMTAKKyNkZWZpbmUgU1VONERfTUFYX0lSUSAoKFNVTjREX01BWF9CT0FSRCArIDIpIDw8IDUpCisKKy8qIE1hcCBiZXR3ZWVuIHRoZSBpcnEgaWRlbnRpZmllciB1c2VkIGluIGh3IHRvIHRoZQorICogaXJxX2J1Y2tldC4gVGhlIG1hcCBpcyBzdWZmaWNpZW50IGxhcmdlIHRvIGhvbGQKKyAqIHRoZSBzdW40ZCBodyBpZGVudGlmaWVycy4KKyAqLworZXh0ZXJuIHN0cnVjdCBpcnFfYnVja2V0ICppcnFfbWFwW1NVTjREX01BWF9JUlFdOworCisKIC8qIHN1bjRtIHNwZWNpZmljIHR5cGUgZGVmaW5pdGlvbnMgKi8KIAogLyogVGhpcyBtYXBzIGRpcmVjdCB0byBDUFUgc3BlY2lmaWMgaW50ZXJydXB0IHJlZ2lzdGVycyAqLwpAQCAtMzUsNiArNTIsMTAgQEAKIH07CiBleHRlcm4gc3RydWN0IHNwYXJjX2lycV9jb25maWcgc3BhcmNfaXJxX2NvbmZpZzsKIAordW5zaWduZWQgaW50IGlycV9hbGxvYyh1bnNpZ25lZCBpbnQgcmVhbF9pcnEsIHVuc2lnbmVkIGludCBwaWwpOwordm9pZCBpcnFfbGluayh1bnNpZ25lZCBpbnQgaXJxKTsKK3ZvaWQgaXJxX3VubGluayh1bnNpZ25lZCBpbnQgaXJxKTsKK3ZvaWQgaGFuZGxlcl9pcnEodW5zaWduZWQgaW50IHBpbCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogCiAvKiBEYXZlIFJlZG1hbiAoZGpockB0YWRwb2xlLmNvLnVrKQogICogY2hhbmdlZCB0aGVzZSB0byBmdW5jdGlvbiBwb2ludGVycy4uIGl0IHNhdmVzIGN5Y2xlcyBhbmQgd2lsbCBhbGxvdwpAQCAtNDQsMzMgKzY1LDkgQEAKICAqIENoYW5nZWQgdGhlc2UgdG8gYnRmaXh1cCBlbnRpdGllcy4uLiBJdCBzYXZlcyBjeWNsZXMgOikKICAqLwogCi1CVEZJWFVQREVGX0NBTEwodm9pZCwgZGlzYWJsZV9pcnEsIHVuc2lnbmVkIGludCkKLUJURklYVVBERUZfQ0FMTCh2b2lkLCBlbmFibGVfaXJxLCB1bnNpZ25lZCBpbnQpCi1CVEZJWFVQREVGX0NBTEwodm9pZCwgZGlzYWJsZV9waWxfaXJxLCB1bnNpZ25lZCBpbnQpCi1CVEZJWFVQREVGX0NBTEwodm9pZCwgZW5hYmxlX3BpbF9pcnEsIHVuc2lnbmVkIGludCkKIEJURklYVVBERUZfQ0FMTCh2b2lkLCBjbGVhcl9jbG9ja19pcnEsIHZvaWQpCiBCVEZJWFVQREVGX0NBTEwodm9pZCwgbG9hZF9wcm9maWxlX2lycSwgaW50LCB1bnNpZ25lZCBpbnQpCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JQlRGSVhVUF9DQUxMKGRpc2FibGVfaXJxKShpcnEpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19lbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JQlRGSVhVUF9DQUxMKGVuYWJsZV9pcnEpKGlycSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX3BpbF9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlCVEZJWFVQX0NBTEwoZGlzYWJsZV9waWxfaXJxKShpcnEpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX3BpbF9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlCVEZJWFVQX0NBTEwoZW5hYmxlX3BpbF9pcnEpKGlycSk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9jbG9ja19pcnEodm9pZCkKIHsKIAlCVEZJWFVQX0NBTEwoY2xlYXJfY2xvY2tfaXJxKSgpOwpAQCAtODksNCArODYsMTAgQEAKICNkZWZpbmUgc2V0X2NwdV9pbnQoY3B1LGxldmVsKSBCVEZJWFVQX0NBTEwoc2V0X2NwdV9pbnQpKGNwdSxsZXZlbCkKICNkZWZpbmUgY2xlYXJfY3B1X2ludChjcHUsbGV2ZWwpIEJURklYVVBfQ0FMTChjbGVhcl9jcHVfaW50KShjcHUsbGV2ZWwpCiAjZGVmaW5lIHNldF9pcnFfdWR0KGNwdSkgQlRGSVhVUF9DQUxMKHNldF9pcnFfdWR0KShjcHUpCisKKy8qIEFsbCBTVU40RCBJUElzIGFyZSBzZW50IG9uIHRoaXMgSVJRLCBtYXkgYmUgc2hhcmVkIHdpdGggaGFyZCBJUlFzICovCisjZGVmaW5lIFNVTjREX0lQSV9JUlEgMTQKKworZXh0ZXJuIHZvaWQgc3VuNGRfaXBpX2ludGVycnVwdCh2b2lkKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9pcnFfMzIuYyBiL2FyY2gvc3BhcmMva2VybmVsL2lycV8zMi5jCmluZGV4IDdjOTNkZjQuLjliODlkODQyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9pcnFfMzIuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9pcnFfMzIuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9jcHVkYXRhLmg+CiAjaW5jbHVkZSA8YXNtL3BjaWMuaD4KICNpbmNsdWRlIDxhc20vbGVvbi5oPgogCkBAIC0xMDEsMjg0ICsxMDIsMTczIEBACiAgKiBkaXJlY3RlZCBDUFUgaW50ZXJydXB0cyB1c2luZyB0aGUgZXhpc3RpbmcgZW5hYmxlL2Rpc2FibGUgaXJxIGNvZGUKICAqIHdpdGggdHdlYWtzLgogICoKKyAqIFN1bjRkIGNvbXBsaWNhdGVzIHRoaW5ncyBldmVuIGZ1cnRoZXIuICBJUlEgbnVtYmVycyBhcmUgYXJiaXRyYXJ5CisgKiAzMi1iaXQgdmFsdWVzIGluIHRoYXQgY2FzZS4gIFNpbmNlIHRoaXMgaXMgc2ltaWxhciB0byBzcGFyYzY0LAorICogd2UgYWRvcHQgYSB2aXJ0dWFsIElSUSBudW1iZXJpbmcgc2NoZW1lIGFzIGlzIGRvbmUgdGhlcmUuCisgKiBWaXJ1dGFsIGludGVycnVwdCBudW1iZXJzIGFyZSBhbGxvY2F0ZWQgYnkgYnVpbGRfaXJxKCkuICBTbyBOUl9JUlFTCisgKiBqdXN0IGJlY29tZXMgYSBsaW1pdCBvZiBob3cgbWFueSBpbnRlcnJ1cHQgc291cmNlcyB3ZSBjYW4gaGFuZGxlIGluCisgKiBhIHNpbmdsZSBzeXN0ZW0uICBFdmVuIGZ1bGx5IGxvYWRlZCBTUzIwMDAgbWFjaGluZXMgdG9wIG9mZiBhdAorICogYWJvdXQgMzIgaW50ZXJydXB0IHNvdXJjZXMgb3Igc28sIHRoZXJlZm9yZSBhIE5SX0lSUVMgdmFsdWUgb2YgNjQKKyAqIGlzIG1vcmUgdGhhbiBlbm91Z2guCisgICoKKyAqIFdlIGtlZXAgYSBtYXAgb2YgcGVyLVBJTCBlbmFibGUgaW50ZXJydXB0cy4gIFRoZXNlIGdldCB3aXJlZAorICogdXAgdmlhIHRoZSBpcnFfY2hpcC0+c3RhcnR1cCgpIG1ldGhvZCB3aGljaCBnZXRzIGludm9rZWQgYnkKKyAqIHRoZSBnZW5lcmljIElSUSBsYXllciBkdXJpbmcgcmVxdWVzdF9pcnEoKS4KICAqLwogCiAKKy8qIFRhYmxlIG9mIGFsbG9jYXRlZCBpcnFzLiBVbnVzZWQgZW50cmllcyBoYXMgaXJxID09IDAgKi8KK3N0YXRpYyBzdHJ1Y3QgaXJxX2J1Y2tldCBpcnFfdGFibGVbTlJfSVJRU107CisvKiBQcm90ZWN0IGFjY2VzcyB0byBpcnFfdGFibGUgKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soaXJxX3RhYmxlX2xvY2spOwogCi0vKgotICogRGF2ZSBSZWRtYW4gKGRqaHJAdGFkcG9sZS5jby51aykKLSAqCi0gKiBUaGVyZSB1c2VkIHRvIGJlIGV4dGVybiBjYWxscyBhbmQgaGFyZCBjb2RlZCB2YWx1ZXMgaGVyZS4uIHZlcnkgc3Vja3khCi0gKiBpbnN0ZWFkLCBiZWNhdXNlIHNvbWUgb2YgdGhlIGRldmljZXMgYXR0YWNoIHZlcnkgZWFybHksIEkgZG8gc29tZXRoaW5nCi0gKiBlcXVhbGx5IHN1Y2t5IGJ1dCBhdCBsZWFzdCB3ZSdsbCBuZXZlciB0cnkgdG8gZnJlZSBzdGF0aWNhbGx5IGFsbG9jYXRlZAotICogc3BhY2Ugb3IgY2FsbCBrbWFsbG9jIGJlZm9yZSBrbWFsbG9jX2luaXQgOiguCi0gKgotICogSW4gZmFjdCBpdCdzIHRoZSB0aW1lcjEwIHRoYXQgYXR0YWNoZXMgZmlyc3QuLiB0aGVuIHRpbWVyMTQKLSAqIHRoZW4ga21hbGxvY19pbml0IGlzIGNhbGxlZC4uIHRoZW4gdGhlIHR0eSBpbnRlcnJ1cHRzIGF0dGFjaC4KLSAqIGhtbW0uLi4uCi0gKgotICovCi0jZGVmaW5lIE1BWF9TVEFUSUNfQUxMT0MJNAotc3RydWN0IGlycWFjdGlvbiBzdGF0aWNfaXJxYWN0aW9uW01BWF9TVEFUSUNfQUxMT0NdOwotaW50IHN0YXRpY19pcnFfY291bnQ7CisvKiBNYXAgYmV0d2VlbiB0aGUgaXJxIGlkZW50aWZpZXIgdXNlZCBpbiBodyB0byB0aGUgaXJxX2J1Y2tldC4gKi8KK3N0cnVjdCBpcnFfYnVja2V0ICppcnFfbWFwW1NVTjREX01BWF9JUlFdOworLyogUHJvdGVjdCBhY2Nlc3MgdG8gaXJxX21hcCAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhpcnFfbWFwX2xvY2spOwogCi1zdGF0aWMgc3RydWN0IHsKLQlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247Ci0JaW50IGZsYWdzOwotfSBzcGFyY19pcnFbTlJfSVJRU107Ci0jZGVmaW5lIFNQQVJDX0lSUV9JTlBST0dSRVNTIDEKLQotLyogVXNlZCB0byBwcm90ZWN0IHRoZSBJUlEgYWN0aW9uIGxpc3RzICovCi1ERUZJTkVfU1BJTkxPQ0soaXJxX2FjdGlvbl9sb2NrKTsKLQotaW50IHNob3dfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYpCisvKiBBbGxvY2F0ZSBhIG5ldyBpcnEgZnJvbSB0aGUgaXJxX3RhYmxlICovCit1bnNpZ25lZCBpbnQgaXJxX2FsbG9jKHVuc2lnbmVkIGludCByZWFsX2lycSwgdW5zaWduZWQgaW50IHBpbCkKIHsKLQlpbnQgaSA9ICoobG9mZl90ICopdjsKLQlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLSNpZmRlZiBDT05GSUdfU01QCi0JaW50IGo7Ci0jZW5kaWYKKwl1bnNpZ25lZCBpbnQgaTsKIAotCWlmIChzcGFyY19jcHVfbW9kZWwgPT0gc3VuNGQpCi0JCXJldHVybiBzaG93X3N1bjRkX2ludGVycnVwdHMocCwgdik7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2FjdGlvbl9sb2NrLCBmbGFncyk7Ci0JaWYgKGkgPCBOUl9JUlFTKSB7Ci0JCWFjdGlvbiA9IHNwYXJjX2lycVtpXS5hY3Rpb247Ci0JCWlmICghYWN0aW9uKQotCQkJZ290byBvdXRfdW5sb2NrOwotCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsIGkpOwotI2lmbmRlZiBDT05GSUdfU01QCi0JCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7Ci0jZWxzZQotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopIHsKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwKLQkJCQkgICAga3N0YXRfY3B1KGopLmlycXNbaV0pOwotCQl9Ci0jZW5kaWYKLQkJc2VxX3ByaW50ZihwLCAiICVjICVzIiwKLQkJCShhY3Rpb24tPmZsYWdzICYgSVJRRl9ESVNBQkxFRCkgPyAnKycgOiAnICcsCi0JCQlhY3Rpb24tPm5hbWUpOwotCQlmb3IgKGFjdGlvbiA9IGFjdGlvbi0+bmV4dDsgYWN0aW9uOyBhY3Rpb24gPSBhY3Rpb24tPm5leHQpIHsKLQkJCXNlcV9wcmludGYocCwgIiwlcyAlcyIsCi0JCQkJKGFjdGlvbi0+ZmxhZ3MgJiBJUlFGX0RJU0FCTEVEKSA/ICIgKyIgOiAiIiwKLQkJCQlhY3Rpb24tPm5hbWUpOwotCQl9Ci0JCXNlcV9wdXRjKHAsICdcbicpOworCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfdGFibGVfbG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDE7IGkgPCBOUl9JUlFTOyBpKyspIHsKKwkJaWYgKGlycV90YWJsZVtpXS5yZWFsX2lycSA9PSByZWFsX2lycSAmJiBpcnFfdGFibGVbaV0ucGlsID09IHBpbCkKKwkJCWdvdG8gZm91bmQ7CiAJfQotb3V0X3VubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYWN0aW9uX2xvY2ssIGZsYWdzKTsKKworCWZvciAoaSA9IDE7IGkgPCBOUl9JUlFTOyBpKyspIHsKKwkJaWYgKCFpcnFfdGFibGVbaV0uaXJxKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPCBOUl9JUlFTKSB7CisJCWlycV90YWJsZVtpXS5yZWFsX2lycSA9IHJlYWxfaXJxOworCQlpcnFfdGFibGVbaV0uaXJxID0gaTsKKwkJaXJxX3RhYmxlW2ldLnBpbCA9IHBpbDsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIklSUTogT3V0IG9mIHZpcnR1YWwgSVJRcy5cbiIpOworCQlpID0gMDsKKwl9Citmb3VuZDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfdGFibGVfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGk7Cit9CisKKy8qIEJhc2VkIG9uIGEgc2luZ2xlIHBpbCBoYW5kbGVyX2lycSBtYXkgbmVlZCB0byBjYWxsIHNldmVyYWwKKyAqIGludGVycnVwdCBoYW5kbGVycy4gVXNlIGlycV9tYXAgYXMgZW50cnkgdG8gaXJxX3RhYmxlLAorICogYW5kIGxldCBlYWNoIGVudHJ5IGluIGlycV90YWJsZSBwb2ludCB0byB0aGUgbmV4dCBlbnRyeS4KKyAqLwordm9pZCBpcnFfbGluayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBpcnFfYnVja2V0ICpwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHBpbDsKKworCUJVR19PTihpcnEgPj0gTlJfSVJRUyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX21hcF9sb2NrLCBmbGFncyk7CisKKwlwID0gJmlycV90YWJsZVtpcnFdOworCXBpbCA9IHAtPnBpbDsKKwlCVUdfT04ocGlsID4gU1VONERfTUFYX0lSUSk7CisJcC0+bmV4dCA9IGlycV9tYXBbcGlsXTsKKwlpcnFfbWFwW3BpbF0gPSBwOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX21hcF9sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgaXJxX3VubGluayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBpcnFfYnVja2V0ICpwLCAqKnBuZXh0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlCVUdfT04oaXJxID49IE5SX0lSUVMpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9tYXBfbG9jaywgZmxhZ3MpOworCisJcCA9ICZpcnFfdGFibGVbaXJxXTsKKwlCVUdfT04ocC0+cGlsID4gU1VONERfTUFYX0lSUSk7CisJcG5leHQgPSAmaXJxX21hcFtwLT5waWxdOworCXdoaWxlICgqcG5leHQgIT0gcCkKKwkJcG5leHQgPSAmKCpwbmV4dCktPm5leHQ7CisJKnBuZXh0ID0gcC0+bmV4dDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9tYXBfbG9jaywgZmxhZ3MpOworfQorCisKKy8qIC9wcm9jL2ludGVycnVwdHMgcHJpbnRpbmcgKi8KK2ludCBhcmNoX3Nob3dfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIGludCBwcmVjKQoreworCWludCBqOworCisjaWZkZWYgQ09ORklHX1NNUAorCXNlcV9wcmludGYocCwgIlJFUzogIik7CisJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGNwdV9kYXRhKGopLmlycV9yZXNjaGVkX2NvdW50KTsKKwlzZXFfcHJpbnRmKHAsICIgICAgIElQSSByZXNjaGVkdWxpbmcgaW50ZXJydXB0c1xuIik7CisJc2VxX3ByaW50ZihwLCAiQ0FMOiAiKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgY3B1X2RhdGEoaikuaXJxX2NhbGxfY291bnQpOworCXNlcV9wcmludGYocCwgIiAgICAgSVBJIGZ1bmN0aW9uIGNhbGwgaW50ZXJydXB0c1xuIik7CisjZW5kaWYKKwlzZXFfcHJpbnRmKHAsICJOTUk6ICIpOworCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBjcHVfZGF0YShqKS5jb3VudGVyKTsKKwlzZXFfcHJpbnRmKHAsICIgICAgIE5vbi1tYXNrYWJsZSBpbnRlcnJ1cHRzXG4iKTsKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBmcmVlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0Jc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOwotCXN0cnVjdCBpcnFhY3Rpb24gKiphY3Rpb25wOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IGNwdV9pcnE7Ci0KLQlpZiAoc3BhcmNfY3B1X21vZGVsID09IHN1bjRkKSB7Ci0JCXN1bjRkX2ZyZWVfaXJxKGlycSwgZGV2X2lkKTsKLQkJcmV0dXJuOwotCX0KLQljcHVfaXJxID0gaXJxICYgKE5SX0lSUVMgLSAxKTsKLQlpZiAoY3B1X2lycSA+IDE0KSB7ICAvKiAxNCBpcnEgbGV2ZWxzIG9uIHRoZSBzcGFyYyAqLwotCQlwcmludGsoS0VSTl9FUlIgIlRyeWluZyB0byBmcmVlIGJvZ3VzIElSUSAlZFxuIiwgaXJxKTsKLQkJcmV0dXJuOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfYWN0aW9uX2xvY2ssIGZsYWdzKTsKLQotCWFjdGlvbnAgPSAmc3BhcmNfaXJxW2NwdV9pcnFdLmFjdGlvbjsKLQlhY3Rpb24gPSAqYWN0aW9ucDsKLQotCWlmICghYWN0aW9uLT5oYW5kbGVyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVHJ5aW5nIHRvIGZyZWUgZnJlZSBJUlElZFxuIiwgaXJxKTsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQlpZiAoZGV2X2lkKSB7Ci0JCWZvciAoOyBhY3Rpb247IGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkgewotCQkJaWYgKGFjdGlvbi0+ZGV2X2lkID09IGRldl9pZCkKLQkJCQlicmVhazsKLQkJCWFjdGlvbnAgPSAmYWN0aW9uLT5uZXh0OwotCQl9Ci0JCWlmICghYWN0aW9uKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIlRyeWluZyB0byBmcmVlIGZyZWUgc2hhcmVkIElSUSVkXG4iLAotCQkJICAgICAgIGlycSk7Ci0JCQlnb3RvIG91dF91bmxvY2s7Ci0JCX0KLQl9IGVsc2UgaWYgKGFjdGlvbi0+ZmxhZ3MgJiBJUlFGX1NIQVJFRCkgewotCQlwcmludGsoS0VSTl9FUlIgIlRyeWluZyB0byBmcmVlIHNoYXJlZCBJUlElZCB3aXRoIE5VTEwgZGV2aWNlIElEXG4iLAotCQkgICAgICAgaXJxKTsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQlpZiAoYWN0aW9uLT5mbGFncyAmIFNBX1NUQVRJQ19BTExPQykgewotCQkvKgotCQkgKiBUaGlzIGludGVycnVwdCBpcyBtYXJrZWQgYXMgc3BlY2lhbGx5IGFsbG9jYXRlZAotCQkgKiBzbyBpdCBpcyBhIGJhZCBpZGVhIHRvIGZyZWUgaXQuCi0JCSAqLwotCQlwcmludGsoS0VSTl9FUlIgIkF0dGVtcHQgdG8gZnJlZSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBJUlElZCAoJXMpXG4iLAotCQkgICAgICAgaXJxLCBhY3Rpb24tPm5hbWUpOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0JKmFjdGlvbnAgPSBhY3Rpb24tPm5leHQ7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYWN0aW9uX2xvY2ssIGZsYWdzKTsKLQotCXN5bmNocm9uaXplX2lycShpcnEpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9hY3Rpb25fbG9jaywgZmxhZ3MpOwotCi0Ja2ZyZWUoYWN0aW9uKTsKLQotCWlmICghc3BhcmNfaXJxW2NwdV9pcnFdLmFjdGlvbikKLQkJX19kaXNhYmxlX2lycShpcnEpOwotCi1vdXRfdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9hY3Rpb25fbG9jaywgZmxhZ3MpOwotfQotRVhQT1JUX1NZTUJPTChmcmVlX2lycSk7Ci0KLS8qCi0gKiBUaGlzIGlzIGNhbGxlZCB3aGVuIHdlIHdhbnQgdG8gc3luY2hyb25pemUgd2l0aAotICogaW50ZXJydXB0cy4gV2UgbWF5IGZvciBleGFtcGxlIHRlbGwgYSBkZXZpY2UgdG8KLSAqIHN0b3Agc2VuZGluZyBpbnRlcnJ1cHRzOiBidXQgdG8gbWFrZSBzdXJlIHRoZXJlCi0gKiBhcmUgbm8gaW50ZXJydXB0cyB0aGF0IGFyZSBleGVjdXRpbmcgb24gYW5vdGhlcgotICogQ1BVIHdlIG5lZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLgotICovCi0jaWZkZWYgQ09ORklHX1NNUAotdm9pZCBzeW5jaHJvbml6ZV9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl1bnNpZ25lZCBpbnQgY3B1X2lycTsKLQotCWNwdV9pcnEgPSBpcnEgJiAoTlJfSVJRUyAtIDEpOwotCXdoaWxlIChzcGFyY19pcnFbY3B1X2lycV0uZmxhZ3MgJiBTUEFSQ19JUlFfSU5QUk9HUkVTUykKLQkJY3B1X3JlbGF4KCk7Ci19Ci1FWFBPUlRfU1lNQk9MKHN5bmNocm9uaXplX2lycSk7Ci0jZW5kaWYgLyogU01QICovCi0KLXZvaWQgdW5leHBlY3RlZF9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlpbnQgaTsKLQlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247Ci0JdW5zaWduZWQgaW50IGNwdV9pcnE7Ci0KLQljcHVfaXJxID0gaXJxICYgKE5SX0lSUVMgLSAxKTsKLQlhY3Rpb24gPSBzcGFyY19pcnFbY3B1X2lycV0uYWN0aW9uOwotCi0JcHJpbnRrKEtFUk5fRVJSICJJTyBkZXZpY2UgaW50ZXJydXB0LCBpcnEgPSAlZFxuIiwgaXJxKTsKLQlwcmludGsoS0VSTl9FUlIgIlBDID0gJTA4bHggTlBDID0gJTA4bHggRlA9JTA4bHhcbiIsIHJlZ3MtPnBjLAotCQkgICAgcmVncy0+bnBjLCByZWdzLT51X3JlZ3NbMTRdKTsKLQlpZiAoYWN0aW9uKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRXhwZWN0aW5nOiAiKTsKLQkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCi0JCQlpZiAoYWN0aW9uLT5oYW5kbGVyKQotCQkJCXByaW50ayhLRVJOX0NPTlQgIlslczolZDoweCV4XSAiLCBhY3Rpb24tPm5hbWUsCi0JCQkJICAgICAgIGksICh1bnNpZ25lZCBpbnQpYWN0aW9uLT5oYW5kbGVyKTsKLQl9Ci0JcHJpbnRrKEtFUk5fRVJSICJBSUVFRVxuIik7Ci0JcGFuaWMoImJvZ3VzIGludGVycnVwdCByZWNlaXZlZCIpOwotfQotCi12b2lkIGhhbmRsZXJfaXJxKGludCBwaWwsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQordm9pZCBoYW5kbGVyX2lycSh1bnNpZ25lZCBpbnQgcGlsLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgcHRfcmVncyAqb2xkX3JlZ3M7Ci0Jc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOwotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJc3RydWN0IGlycV9idWNrZXQgKnA7CiAKKwlCVUdfT04ocGlsID4gMTUpOwogCW9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOwogCWlycV9lbnRlcigpOwotCWRpc2FibGVfcGlsX2lycShwaWwpOwotI2lmZGVmIENPTkZJR19TTVAKLQkvKiBPbmx5IHJvdGF0ZSBvbiBsb3dlciBwcmlvcml0eSBJUlFzIChzY3NpLCBldGhlcm5ldCwgZXRjLikuICovCi0JaWYgKChzcGFyY19jcHVfbW9kZWw9PXN1bjRtKSAmJiAocGlsIDwgMTApKQotCQlzbXA0bV9pcnFfcm90YXRlKGNwdSk7Ci0jZW5kaWYKLQlhY3Rpb24gPSBzcGFyY19pcnFbcGlsXS5hY3Rpb247Ci0Jc3BhcmNfaXJxW3BpbF0uZmxhZ3MgfD0gU1BBUkNfSVJRX0lOUFJPR1JFU1M7Ci0Ja3N0YXRfY3B1KGNwdSkuaXJxc1twaWxdKys7Ci0JZG8gewotCQlpZiAoIWFjdGlvbiB8fCAhYWN0aW9uLT5oYW5kbGVyKQotCQkJdW5leHBlY3RlZF9pcnEocGlsLCBOVUxMLCByZWdzKTsKLQkJYWN0aW9uLT5oYW5kbGVyKHBpbCwgYWN0aW9uLT5kZXZfaWQpOwotCQlhY3Rpb24gPSBhY3Rpb24tPm5leHQ7Ci0JfSB3aGlsZSAoYWN0aW9uKTsKLQlzcGFyY19pcnFbcGlsXS5mbGFncyAmPSB+U1BBUkNfSVJRX0lOUFJPR1JFU1M7Ci0JZW5hYmxlX3BpbF9pcnEocGlsKTsKKworCXAgPSBpcnFfbWFwW3BpbF07CisJd2hpbGUgKHApIHsKKwkJc3RydWN0IGlycV9idWNrZXQgKm5leHQgPSBwLT5uZXh0OworCisJCWdlbmVyaWNfaGFuZGxlX2lycShwLT5pcnEpOworCQlwID0gbmV4dDsKKwl9CiAJaXJxX2V4aXQoKTsKIAlzZXRfaXJxX3JlZ3Mob2xkX3JlZ3MpOwogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9GRCkgfHwgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9GRF9NT0RVTEUpCitzdGF0aWMgdW5zaWduZWQgaW50IGZsb3BweV9pcnE7CiAKLS8qCi0gKiBGYXN0IElSUXMgb24gdGhlIFNwYXJjIGNhbiBvbmx5IGhhdmUgb25lIHJvdXRpbmUgYXR0YWNoZWQgdG8gdGhlbSwKLSAqIHRodXMgbm8gc2hhcmluZyBwb3NzaWJsZS4KLSAqLwotc3RhdGljIGludCByZXF1ZXN0X2Zhc3RfaXJxKHVuc2lnbmVkIGludCBpcnEsCi0JCQkgICAgdm9pZCAoKmhhbmRsZXIpKHZvaWQpLAotCQkJICAgIHVuc2lnbmVkIGxvbmcgaXJxZmxhZ3MsIGNvbnN0IGNoYXIgKmRldm5hbWUpCitpbnQgc3BhcmNfZmxvcHB5X3JlcXVlc3RfaXJxKHVuc2lnbmVkIGludCBpcnEsIGlycV9oYW5kbGVyX3QgaXJxX2hhbmRsZXIpCiB7Ci0Jc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGNwdV9pcnE7Ci0JaW50IHJldDsKKwlpbnQgZXJyOworCiAjaWYgZGVmaW5lZCBDT05GSUdfU01QICYmICFkZWZpbmVkIENPTkZJR19TUEFSQ19MRU9OCiAJc3RydWN0IHR0X2VudHJ5ICp0cmFwX3RhYmxlOwogI2VuZGlmCi0JY3B1X2lycSA9IGlycSAmIChOUl9JUlFTIC0gMSk7Ci0JaWYgKGNwdV9pcnEgPiAxNCkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0JaWYgKCFoYW5kbGVyKSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfYWN0aW9uX2xvY2ssIGZsYWdzKTsKKwllcnIgPSByZXF1ZXN0X2lycShpcnEsIGlycV9oYW5kbGVyLCAwLCAiZmxvcHB5IiwgTlVMTCk7CisJaWYgKGVycikKKwkJcmV0dXJuIC0xOwogCi0JYWN0aW9uID0gc3BhcmNfaXJxW2NwdV9pcnFdLmFjdGlvbjsKLQlpZiAoYWN0aW9uKSB7Ci0JCWlmIChhY3Rpb24tPmZsYWdzICYgSVJRRl9TSEFSRUQpCi0JCQlwYW5pYygiVHJ5aW5nIHRvIHJlZ2lzdGVyIGZhc3QgaXJxIHdoZW4gYWxyZWFkeSBzaGFyZWQuXG4iKTsKLQkJaWYgKGlycWZsYWdzICYgSVJRRl9TSEFSRUQpCi0JCQlwYW5pYygiVHJ5aW5nIHRvIHJlZ2lzdGVyIGZhc3QgaXJxIGFzIHNoYXJlZC5cbiIpOworCS8qIFNhdmUgZm9yIGxhdGVyIHVzZSBpbiBmbG9wcHkgaW50ZXJydXB0IGhhbmRsZXIgKi8KKwlmbG9wcHlfaXJxID0gaXJxOwogCi0JCS8qIEFueXdheSwgc29tZW9uZSBhbHJlYWR5IG93bnMgaXQgc28gY2Fubm90IGJlIG1hZGUgZmFzdC4gKi8KLQkJcHJpbnRrKEtFUk5fRVJSICJyZXF1ZXN0X2Zhc3RfaXJxOiBUcnlpbmcgdG8gcmVnaXN0ZXIgeWV0IGFscmVhZHkgb3duZWQuXG4iKTsKLQkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0JLyoKLQkgKiBJZiB0aGlzIGlzIGZsYWdnZWQgYXMgc3RhdGljYWxseSBhbGxvY2F0ZWQgdGhlbiB3ZSB1c2Ugb3VyCi0JICogcHJpdmF0ZSBzdHJ1Y3Qgd2hpY2ggaXMgbmV2ZXIgZnJlZWQuCi0JICovCi0JaWYgKGlycWZsYWdzICYgU0FfU1RBVElDX0FMTE9DKSB7Ci0JCWlmIChzdGF0aWNfaXJxX2NvdW50IDwgTUFYX1NUQVRJQ19BTExPQykKLQkJCWFjdGlvbiA9ICZzdGF0aWNfaXJxYWN0aW9uW3N0YXRpY19pcnFfY291bnQrK107Ci0JCWVsc2UKLQkJCXByaW50ayhLRVJOX0VSUiAiRmFzdCBJUlElZCAoJXMpIFNBX1NUQVRJQ19BTExPQyBmYWlsZWQgdXNpbmcga21hbGxvY1xuIiwKLQkJCSAgICAgICBpcnEsIGRldm5hbWUpOwotCX0KLQotCWlmIChhY3Rpb24gPT0gTlVMTCkKLQkJYWN0aW9uID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlycWFjdGlvbiksIEdGUF9BVE9NSUMpOwotCWlmICghYWN0aW9uKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9CisJY3B1X2lycSA9IChpcnEgJiAoTlJfSVJRUyAtIDEpKTsKIAogCS8qIERvcmsgd2l0aCB0cmFwIHRhYmxlIGlmIHdlIGdldCB0aGlzIGZhci4gKi8KICNkZWZpbmUgSU5TVEFOVElBVEUodGFibGUpIFwKIAl0YWJsZVtTUF9UUkFQX0lSUTErKGNwdV9pcnEtMSldLmluc3Rfb25lID0gU1BBUkNfUkRfUFNSX0wwOyBcCiAJdGFibGVbU1BfVFJBUF9JUlExKyhjcHVfaXJxLTEpXS5pbnN0X3R3byA9IFwKLQkJU1BBUkNfQlJBTkNIKCh1bnNpZ25lZCBsb25nKSBoYW5kbGVyLCBcCisJCVNQQVJDX0JSQU5DSCgodW5zaWduZWQgbG9uZykgZmxvcHB5X2hhcmRpbnQsIFwKIAkJCSAgICAgKHVuc2lnbmVkIGxvbmcpICZ0YWJsZVtTUF9UUkFQX0lSUTErKGNwdV9pcnEtMSldLmluc3RfdHdvKTtcCiAJdGFibGVbU1BfVFJBUF9JUlExKyhjcHVfaXJxLTEpXS5pbnN0X3RocmVlID0gU1BBUkNfUkRfV0lNX0wzOyBcCiAJdGFibGVbU1BfVFJBUF9JUlExKyhjcHVfaXJxLTEpXS5pbnN0X2ZvdXIgPSBTUEFSQ19OT1A7CkBAIC0zOTksMjIgKzI4OSw5IEBACiAJICogd3JpdGluZyB3ZSBoYXZlIG5vIENQVS1uZXV0cmFsIGludGVyZmFjZSB0byBmaW5lLWdyYWluZWQgZmx1c2hlcy4KIAkgKi8KIAlmbHVzaF9jYWNoZV9hbGwoKTsKLQotCWFjdGlvbi0+ZmxhZ3MgPSBpcnFmbGFnczsKLQlhY3Rpb24tPm5hbWUgPSBkZXZuYW1lOwotCWFjdGlvbi0+ZGV2X2lkID0gTlVMTDsKLQlhY3Rpb24tPm5leHQgPSBOVUxMOwotCi0Jc3BhcmNfaXJxW2NwdV9pcnFdLmFjdGlvbiA9IGFjdGlvbjsKLQotCV9fZW5hYmxlX2lycShpcnEpOwotCi0JcmV0ID0gMDsKLW91dF91bmxvY2s6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2FjdGlvbl9sb2NrLCBmbGFncyk7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woc3BhcmNfZmxvcHB5X3JlcXVlc3RfaXJxKTsKIAogLyoKICAqIFRoZXNlIHZhcmlhYmxlcyBhcmUgdXNlZCB0byBhY2Nlc3Mgc3RhdGUgZnJvbSB0aGUgYXNzZW1ibGVyCkBAIC00NDAsMTU0ICszMTcsMjMgQEAKIHVuc2lnbmVkIGxvbmcgcGRtYV9hcmVhc2l6ZTsKIEVYUE9SVF9TWU1CT0wocGRtYV9hcmVhc2l6ZSk7CiAKLXN0YXRpYyBpcnFfaGFuZGxlcl90IGZsb3BweV9pcnFfaGFuZGxlcjsKLQorLyogVXNlIHRoZSBnZW5lcmljIGlycSBzdXBwb3J0IHRvIGNhbGwgZmxvcHB5X2ludGVycnVwdAorICogd2hpY2ggd2FzIHNldHVwIHVzaW5nIHJlcXVlc3RfaXJxKCkgaW4gc3BhcmNfZmxvcHB5X3JlcXVlc3RfaXJxKCkuCisgKiBXZSBvbmx5IGhhdmUgb25lIGZsb3BweSBpbnRlcnJ1cHQgc28gd2UgZG8gbm90IG5lZWQgdG8gY2hlY2sKKyAqIGZvciBhZGRpdGlvbmFsIGhhbmRsZXJzIGJlaW5nIHdpcmVkIHVwIGJ5IGlycV9saW5rKCkKKyAqLwogdm9pZCBzcGFyY19mbG9wcHlfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHB0X3JlZ3MgKm9sZF9yZWdzOwotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAlvbGRfcmVncyA9IHNldF9pcnFfcmVncyhyZWdzKTsKLQlkaXNhYmxlX3BpbF9pcnEoaXJxKTsKIAlpcnFfZW50ZXIoKTsKLQlrc3RhdF9jcHUoY3B1KS5pcnFzW2lycV0rKzsKLQlmbG9wcHlfaXJxX2hhbmRsZXIoaXJxLCBkZXZfaWQpOworCWdlbmVyaWNfaGFuZGxlX2lycShmbG9wcHlfaXJxKTsKIAlpcnFfZXhpdCgpOwotCWVuYWJsZV9waWxfaXJxKGlycSk7CiAJc2V0X2lycV9yZWdzKG9sZF9yZWdzKTsKLQkvKgotCSAqIFhYWCBFZWssIGl0J3MgdG90YWxseSBjaGFuZ2VkIHdpdGggcHJlZW1wdF9jb3VudCgpIGFuZCBzdWNoCi0JICogaWYgKHNvZnRpcnFfcGVuZGluZyhjcHUpKQotCSAqCWRvX3NvZnRpcnEoKTsKLQkgKi8KIH0KLQotaW50IHNwYXJjX2Zsb3BweV9yZXF1ZXN0X2lycShpbnQgaXJxLCB1bnNpZ25lZCBsb25nIGZsYWdzLAotCQkJICAgICBpcnFfaGFuZGxlcl90IGlycV9oYW5kbGVyKQotewotCWZsb3BweV9pcnFfaGFuZGxlciA9IGlycV9oYW5kbGVyOwotCXJldHVybiByZXF1ZXN0X2Zhc3RfaXJxKGlycSwgZmxvcHB5X2hhcmRpbnQsIGZsYWdzLCAiZmxvcHB5Iik7Ci19Ci1FWFBPUlRfU1lNQk9MKHNwYXJjX2Zsb3BweV9yZXF1ZXN0X2lycSk7Ci0KICNlbmRpZgogCi1pbnQgcmVxdWVzdF9pcnEodW5zaWduZWQgaW50IGlycSwKLQkJaXJxX2hhbmRsZXJfdCBoYW5kbGVyLAotCQl1bnNpZ25lZCBsb25nIGlycWZsYWdzLCBjb25zdCBjaGFyICpkZXZuYW1lLCB2b2lkICpkZXZfaWQpCi17Ci0Jc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uLCAqKmFjdGlvbnA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgY3B1X2lycTsKLQlpbnQgcmV0OwotCi0JaWYgKHNwYXJjX2NwdV9tb2RlbCA9PSBzdW40ZCkKLQkJcmV0dXJuIHN1bjRkX3JlcXVlc3RfaXJxKGlycSwgaGFuZGxlciwgaXJxZmxhZ3MsIGRldm5hbWUsIGRldl9pZCk7Ci0KLQljcHVfaXJxID0gaXJxICYgKE5SX0lSUVMgLSAxKTsKLQlpZiAoY3B1X2lycSA+IDE0KSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQlpZiAoIWhhbmRsZXIpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9hY3Rpb25fbG9jaywgZmxhZ3MpOwotCi0JYWN0aW9ucCA9ICZzcGFyY19pcnFbY3B1X2lycV0uYWN0aW9uOwotCWFjdGlvbiA9ICphY3Rpb25wOwotCWlmIChhY3Rpb24pIHsKLQkJaWYgKCEoYWN0aW9uLT5mbGFncyAmIElSUUZfU0hBUkVEKSB8fCAhKGlycWZsYWdzICYgSVJRRl9TSEFSRUQpKSB7Ci0JCQlyZXQgPSAtRUJVU1k7Ci0JCQlnb3RvIG91dF91bmxvY2s7Ci0JCX0KLQkJaWYgKChhY3Rpb24tPmZsYWdzICYgSVJRRl9ESVNBQkxFRCkgIT0gKGlycWZsYWdzICYgSVJRRl9ESVNBQkxFRCkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiQXR0ZW1wdCB0byBtaXggZmFzdCBhbmQgc2xvdyBpbnRlcnJ1cHRzIG9uIElSUSVkIGRlbmllZFxuIiwKLQkJCSAgICAgICBpcnEpOwotCQkJcmV0ID0gLUVCVVNZOwotCQkJZ290byBvdXRfdW5sb2NrOwotCQl9Ci0JCWZvciAoIDsgYWN0aW9uOyBhY3Rpb24gPSAqYWN0aW9ucCkKLQkJCWFjdGlvbnAgPSAmYWN0aW9uLT5uZXh0OwotCX0KLQotCS8qIElmIHRoaXMgaXMgZmxhZ2dlZCBhcyBzdGF0aWNhbGx5IGFsbG9jYXRlZCB0aGVuIHdlIHVzZSBvdXIKLQkgKiBwcml2YXRlIHN0cnVjdCB3aGljaCBpcyBuZXZlciBmcmVlZC4KLQkgKi8KLQlpZiAoaXJxZmxhZ3MgJiBTQV9TVEFUSUNfQUxMT0MpIHsKLQkJaWYgKHN0YXRpY19pcnFfY291bnQgPCBNQVhfU1RBVElDX0FMTE9DKQotCQkJYWN0aW9uID0gJnN0YXRpY19pcnFhY3Rpb25bc3RhdGljX2lycV9jb3VudCsrXTsKLQkJZWxzZQotCQkJcHJpbnRrKEtFUk5fRVJSICJSZXF1ZXN0IGZvciBJUlElZCAoJXMpIFNBX1NUQVRJQ19BTExPQyBmYWlsZWQgdXNpbmcga21hbGxvY1xuIiwKLQkJCSAgICAgICBpcnEsIGRldm5hbWUpOwotCX0KLQlpZiAoYWN0aW9uID09IE5VTEwpCi0JCWFjdGlvbiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcnFhY3Rpb24pLCBHRlBfQVRPTUlDKTsKLQlpZiAoIWFjdGlvbikgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0JYWN0aW9uLT5oYW5kbGVyID0gaGFuZGxlcjsKLQlhY3Rpb24tPmZsYWdzID0gaXJxZmxhZ3M7Ci0JYWN0aW9uLT5uYW1lID0gZGV2bmFtZTsKLQlhY3Rpb24tPm5leHQgPSBOVUxMOwotCWFjdGlvbi0+ZGV2X2lkID0gZGV2X2lkOwotCi0JKmFjdGlvbnAgPSBhY3Rpb247Ci0KLQlfX2VuYWJsZV9pcnEoaXJxKTsKLQotCXJldCA9IDA7Ci1vdXRfdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9hY3Rpb25fbG9jaywgZmxhZ3MpOwotb3V0OgotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKHJlcXVlc3RfaXJxKTsKLQotdm9pZCBkaXNhYmxlX2lycV9ub3N5bmModW5zaWduZWQgaW50IGlycSkKLXsKLQlfX2Rpc2FibGVfaXJxKGlycSk7Ci19Ci1FWFBPUlRfU1lNQk9MKGRpc2FibGVfaXJxX25vc3luYyk7Ci0KLXZvaWQgZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlfX2Rpc2FibGVfaXJxKGlycSk7Ci19Ci1FWFBPUlRfU1lNQk9MKGRpc2FibGVfaXJxKTsKLQotdm9pZCBlbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JX19lbmFibGVfaXJxKGlycSk7Ci19Ci1FWFBPUlRfU1lNQk9MKGVuYWJsZV9pcnEpOwotCi0vKgotICogV2UgcmVhbGx5IGRvbid0IG5lZWQgdGhlc2UgYXQgYWxsIG9uIHRoZSBTcGFyYy4gIFdlIG9ubHkgaGF2ZQotICogc3R1YnMgaGVyZSBiZWNhdXNlIHRoZXkgYXJlIGV4cG9ydGVkIHRvIG1vZHVsZXMuCi0gKi8KLXVuc2lnbmVkIGxvbmcgcHJvYmVfaXJxX29uKHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKHByb2JlX2lycV9vbik7Ci0KLWludCBwcm9iZV9pcnFfb2ZmKHVuc2lnbmVkIGxvbmcgbWFzaykKLXsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0wocHJvYmVfaXJxX29mZik7Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYnVpbGRfZGV2aWNlX2lycShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVhbF9pcnEpCi17Ci0JcmV0dXJuIHJlYWxfaXJxOwotfQotCiAvKiBkamhyCiAgKiBUaGlzIGNvdWxkIHByb2JhYmx5IGJlIG1hZGUgaW5kaXJlY3QgdG9vIGFuZCBhc3NpZ25lZCBpbiB0aGUgQ1BVCiAgKiBiaXRzIG9mIHRoZSBjb2RlLiBUaGF0IHdvdWxkIGJlIG11Y2ggbmljZXIgSSB0aGluayBhbmQgd291bGQgYWxzbwpAQCAtNTk4LDggKzM0NCw2IEBACiAKIHZvaWQgX19pbml0IGluaXRfSVJRKHZvaWQpCiB7Ci0Jc3BhcmNfaXJxX2NvbmZpZy5idWlsZF9kZXZpY2VfaXJxID0gYnVpbGRfZGV2aWNlX2lycTsKLQogCXN3aXRjaCAoc3BhcmNfY3B1X21vZGVsKSB7CiAJY2FzZSBzdW40YzoKIAljYXNlIHN1bjQ6CkBAIC02MDcsMTQgKzM1MSwxMSBAQAogCQlicmVhazsKIAogCWNhc2Ugc3VuNG06Ci0jaWZkZWYgQ09ORklHX1BDSQogCQlwY2ljX3Byb2JlKCk7Ci0JCWlmIChwY2ljX3ByZXNlbnQoKSkgeworCQlpZiAocGNpY19wcmVzZW50KCkpCiAJCQlzdW40bV9wY2lfaW5pdF9JUlEoKTsKLQkJCWJyZWFrOwotCQl9Ci0jZW5kaWYKLQkJc3VuNG1faW5pdF9JUlEoKTsKKwkJZWxzZQorCQkJc3VuNG1faW5pdF9JUlEoKTsKIAkJYnJlYWs7CiAKIAljYXNlIHN1bjRkOgpAQCAtNjMyLDkgKzM3MywzIEBACiAJYnRmaXh1cCgpOwogfQogCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLXZvaWQgaW5pdF9pcnFfcHJvYyh2b2lkKQotewotCS8qIEZvciBub3csIG5vdGhpbmcuLi4gKi8KLX0KLSNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvaXJxXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9pcnFfNjQuYwppbmRleCBiMWQyNzVjLi40ZTc4ODYyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9pcnFfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9pcnFfNjQuYwpAQCAtMjI0LDEzICsyMjQsMTMgQEAKIAlpbnQgY3B1aWQ7CiAKIAljcHVtYXNrX2NvcHkoJm1hc2ssIGFmZmluaXR5KTsKLQlpZiAoY3B1c19lcXVhbChtYXNrLCBjcHVfb25saW5lX21hcCkpIHsKKwlpZiAoY3B1bWFza19lcXVhbCgmbWFzaywgY3B1X29ubGluZV9tYXNrKSkgewogCQljcHVpZCA9IG1hcF90b19jcHUoaXJxKTsKIAl9IGVsc2UgewogCQljcHVtYXNrX3QgdG1wOwogCi0JCWNwdXNfYW5kKHRtcCwgY3B1X29ubGluZV9tYXAsIG1hc2spOwotCQljcHVpZCA9IGNwdXNfZW1wdHkodG1wKSA/IG1hcF90b19jcHUoaXJxKSA6IGZpcnN0X2NwdSh0bXApOworCQljcHVtYXNrX2FuZCgmdG1wLCBjcHVfb25saW5lX21hc2ssICZtYXNrKTsKKwkJY3B1aWQgPSBjcHVtYXNrX2VtcHR5KCZ0bXApID8gbWFwX3RvX2NwdShpcnEpIDogY3B1bWFza19maXJzdCgmdG1wKTsKIAl9CiAKIAlyZXR1cm4gY3B1aWQ7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9rZXJuZWwuaCBiL2FyY2gvc3BhcmMva2VybmVsL2tlcm5lbC5oCmluZGV4IDI0YWQ0NDkuLjZmNjU0NGMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2tlcm5lbC5oCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2tlcm5lbC5oCkBAIC02LDExICs2LDkgQEAKICNpbmNsdWRlIDxhc20vdHJhcHMuaD4KIAogLyogY3B1LmMgKi8KLWV4dGVybiBjb25zdCBjaGFyICpzcGFyY19jcHVfdHlwZTsKIGV4dGVybiBjb25zdCBjaGFyICpzcGFyY19wbXVfdHlwZTsKLWV4dGVybiBjb25zdCBjaGFyICpzcGFyY19mcHVfdHlwZTsKLQogZXh0ZXJuIHVuc2lnbmVkIGludCBmc3Jfc3RvcmFnZTsKK2V4dGVybiBpbnQgbmNwdXNfcHJvYmVkOwogCiAjaWZkZWYgQ09ORklHX1NQQVJDMzIKIC8qIGNwdS5jICovCkBAIC0zNyw2ICszNSw3IEBACiBleHRlcm4gdW5zaWduZWQgaW50IGx2bDE0X3Jlc29sdXRpb247CiAKIGV4dGVybiB2b2lkIHN1bjRtX2luaXRfSVJRKHZvaWQpOworZXh0ZXJuIHZvaWQgc3VuNG1fdW5tYXNrX3Byb2ZpbGVfaXJxKHZvaWQpOwogZXh0ZXJuIHZvaWQgc3VuNG1fY2xlYXJfcHJvZmlsZV9pcnEoaW50IGNwdSk7CiAKIC8qIHN1bjRkX2lycS5jICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9sZW9uX2tlcm5lbC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvbGVvbl9rZXJuZWwuYwppbmRleCAyOTY5Zjc3Li4yZjUzOGFjIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9sZW9uX2tlcm5lbC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2xlb25fa2VybmVsLmMKQEAgLTE5LDUzICsxOSw3MCBAQAogI2luY2x1ZGUgPGFzbS9sZW9uX2FtYmEuaD4KICNpbmNsdWRlIDxhc20vdHJhcHMuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KIAogI2luY2x1ZGUgInByb20uaCIKICNpbmNsdWRlICJpcnEuaCIKIAogc3RydWN0IGxlb24zX2lycWN0cmxfcmVnc19tYXAgKmxlb24zX2lycWN0cmxfcmVnczsgLyogaW50ZXJydXB0IGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovCiBzdHJ1Y3QgbGVvbjNfZ3B0aW1lcl9yZWdzX21hcCAqbGVvbjNfZ3B0aW1lcl9yZWdzOyAvKiB0aW1lciBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLwotc3RydWN0IGFtYmFfYXBiX2RldmljZSBsZW9uX3BlcmNwdV90aW1lcl9kZXZbMTZdOwogCiBpbnQgbGVvbmRlYnVnX2lycV9kaXNhYmxlOwogaW50IGxlb25fZGVidWdfaXJxb3V0Owogc3RhdGljIGludCBkdW1teV9tYXN0ZXJfbDEwX2NvdW50ZXI7CiB1bnNpZ25lZCBsb25nIGFtYmFfc3lzdGVtX2lkOworc3RhdGljIERFRklORV9TUElOTE9DSyhsZW9uX2lycV9sb2NrKTsKIAogdW5zaWduZWQgbG9uZyBsZW9uM19ncHRpbWVyX2lycTsgLyogaW50ZXJydXB0IGNvbnRyb2xsZXIgaXJxIG51bWJlciAqLwogdW5zaWduZWQgbG9uZyBsZW9uM19ncHRpbWVyX2lkeDsgLyogVGltZXIgSW5kZXggKDAuLjYpIHdpdGhpbiBUaW1lciBDb3JlICovCitpbnQgbGVvbjNfdGlja2VyX2lycTsgLyogVGltZXIgdGlja2VyIElSUSAqLwogdW5zaWduZWQgaW50IHNwYXJjX2xlb25fZWlycTsKLSNkZWZpbmUgTEVPTl9JTUFTSyAoKCZsZW9uM19pcnFjdHJsX3JlZ3MtPm1hc2tbMF0pKQorI2RlZmluZSBMRU9OX0lNQVNLKGNwdSkgKCZsZW9uM19pcnFjdHJsX3JlZ3MtPm1hc2tbY3B1XSkKKyNkZWZpbmUgTEVPTl9JQUNLICgmbGVvbjNfaXJxY3RybF9yZWdzLT5pY2xlYXIpCisjZGVmaW5lIExFT05fRE9fQUNLX0hXIDEKIAotLyogUmV0dXJuIHRoZSBJUlEgb2YgdGhlIHBlbmRpbmcgSVJRIG9uIHRoZSBleHRlbmRlZCBJUlEgY29udHJvbGxlciAqLwotaW50IHNwYXJjX2xlb25fZWlycV9nZXQoaW50IGVpcnEsIGludCBjcHUpCisvKiBSZXR1cm4gdGhlIGxhc3QgQUNLZWQgSVJRIGJ5IHRoZSBFeHRlbmRlZCBJUlEgY29udHJvbGxlci4gSXQgaGFzIGFscmVhZHkKKyAqIGJlZW4gKGF1dG9tYXRpY2FsbHkpIEFDS2VkIHdoZW4gdGhlIENQVSB0YWtlcyB0aGUgdHJhcC4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbGVvbl9laXJxX2dldChpbnQgY3B1KQogewogCXJldHVybiBMRU9OM19CWVBBU1NfTE9BRF9QQSgmbGVvbjNfaXJxY3RybF9yZWdzLT5pbnRpZFtjcHVdKSAmIDB4MWY7CiB9CiAKLWlycXJldHVybl90IHNwYXJjX2xlb25fZWlycV9pc3IoaW50IGR1bW15LCB2b2lkICpkZXZfaWQpCisvKiBIYW5kbGUgb25lIG9yIG11bHRpcGxlIElSUXMgZnJvbSB0aGUgZXh0ZW5kZWQgaW50ZXJydXB0IGNvbnRyb2xsZXIgKi8KK3N0YXRpYyB2b2lkIGxlb25faGFuZGxlX2V4dF9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewotCXByaW50ayhLRVJOX0VSUiAic3BhcmNfbGVvbl9laXJxX2lzcjogRVJST1IgRVhURU5ERUQgSVJRXG4iKTsKLQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJdW5zaWduZWQgaW50IGVpcnE7CisJaW50IGNwdSA9IHNwYXJjX2xlb24zX2NwdWlkKCk7CisKKwllaXJxID0gbGVvbl9laXJxX2dldChjcHUpOworCWlmICgoZWlycSAmIDB4MTApICYmIGlycV9tYXBbZWlycV0tPmlycSkgLyogYml0NCB0ZWxscyBpZiBJUlEgaGFwcGVuZWQgKi8KKwkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycV9tYXBbZWlycV0tPmlycSk7CiB9CiAKIC8qIFRoZSBleHRlbmRlZCBJUlEgY29udHJvbGxlciBoYXMgYmVlbiBmb3VuZCwgdGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgaXQgKi8KLXZvaWQgc3BhcmNfbGVvbl9laXJxX3JlZ2lzdGVyKGludCBlaXJxKQordm9pZCBsZW9uX2VpcnFfc2V0dXAodW5zaWduZWQgaW50IGVpcnEpCiB7Ci0JaW50IGlycTsKKwl1bnNpZ25lZCBsb25nIG1hc2ssIG9sZG1hc2s7CisJdW5zaWduZWQgaW50IHZlaXJxOwogCi0JLyogUmVnaXN0ZXIgYSAiQkFEIiBoYW5kbGVyIGZvciB0aGlzIGludGVycnVwdCwgaXQgc2hvdWxkIG5ldmVyIGhhcHBlbiAqLwotCWlycSA9IHJlcXVlc3RfaXJxKGVpcnEsIHNwYXJjX2xlb25fZWlycV9pc3IsCi0JCQkgIChJUlFGX0RJU0FCTEVEIHwgU0FfU1RBVElDX0FMTE9DKSwgImV4dGlycSIsIE5VTEwpOwotCi0JaWYgKGlycSkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJzcGFyY19sZW9uX2VpcnFfcmVnaXN0ZXI6IHVuYWJsZSB0byBhdHRhY2ggSVJRJWRcbiIsCi0JCSAgICAgICBlaXJxKTsKLQl9IGVsc2UgewotCQlzcGFyY19sZW9uX2VpcnEgPSBlaXJxOworCWlmIChlaXJxIDwgMSB8fCBlaXJxID4gMHhmKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTEVPTiBFWFQgSVJRIE5VTUJFUiBCQUQ6ICVkXG4iLCBlaXJxKTsKKwkJcmV0dXJuOwogCX0KIAorCXZlaXJxID0gbGVvbl9idWlsZF9kZXZpY2VfaXJxKGVpcnEsIGxlb25faGFuZGxlX2V4dF9pcnEsICJleHRpcnEiLCAwKTsKKworCS8qCisJICogVW5tYXNrIHRoZSBFeHRlbmRlZCBJUlEsIHRoZSBJUlFzIHJvdXRlZCB0aHJvdWdoIHRoZSBFeHQtSVJRCisJICogY29udHJvbGxlciBoYXZlIGEgbWFzay1iaXQgb2YgdGhlaXIgb3duLCBzbyB0aGlzIGlzIHNhZmUuCisJICovCisJaXJxX2xpbmsodmVpcnEpOworCW1hc2sgPSAxIDw8IGVpcnE7CisJb2xkbWFzayA9IExFT04zX0JZUEFTU19MT0FEX1BBKExFT05fSU1BU0soYm9vdF9jcHVfaWQpKTsKKwlMRU9OM19CWVBBU1NfU1RPUkVfUEEoTEVPTl9JTUFTSyhib290X2NwdV9pZCksIChvbGRtYXNrIHwgbWFzaykpOworCXNwYXJjX2xlb25fZWlycSA9IGVpcnE7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfaXJxbWFzayh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtODMsMzUgKzEwMCwxNTEgQEAKIAlyZXR1cm4gbWFzazsKIH0KIAotc3RhdGljIHZvaWQgbGVvbl9lbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnFfbnIpCisjaWZkZWYgQ09ORklHX1NNUAorc3RhdGljIGludCBpcnFfY2hvb3NlX2NwdShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqYWZmaW5pdHkpCiB7Ci0JdW5zaWduZWQgbG9uZyBtYXNrLCBmbGFnczsKLQltYXNrID0gZ2V0X2lycW1hc2soaXJxX25yKTsKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JTEVPTjNfQllQQVNTX1NUT1JFX1BBKExFT05fSU1BU0ssCi0JCQkgICAgICAoTEVPTjNfQllQQVNTX0xPQURfUEEoTEVPTl9JTUFTSykgfCAobWFzaykpKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJY3B1bWFza190IG1hc2s7CisKKwljcHVzX2FuZChtYXNrLCBjcHVfb25saW5lX21hcCwgKmFmZmluaXR5KTsKKwlpZiAoY3B1c19lcXVhbChtYXNrLCBjcHVfb25saW5lX21hcCkgfHwgY3B1c19lbXB0eShtYXNrKSkKKwkJcmV0dXJuIGJvb3RfY3B1X2lkOworCWVsc2UKKwkJcmV0dXJuIGZpcnN0X2NwdShtYXNrKTsKK30KKyNlbHNlCisjZGVmaW5lIGlycV9jaG9vc2VfY3B1KGFmZmluaXR5KSBib290X2NwdV9pZAorI2VuZGlmCisKK3N0YXRpYyBpbnQgbGVvbl9zZXRfYWZmaW5pdHkoc3RydWN0IGlycV9kYXRhICpkYXRhLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqZGVzdCwKKwkJCSAgICAgYm9vbCBmb3JjZSkKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2ssIG9sZG1hc2ssIGZsYWdzOworCWludCBvbGRjcHUsIG5ld2NwdTsKKworCW1hc2sgPSAodW5zaWduZWQgbG9uZylkYXRhLT5jaGlwX2RhdGE7CisJb2xkY3B1ID0gaXJxX2Nob29zZV9jcHUoZGF0YS0+YWZmaW5pdHkpOworCW5ld2NwdSA9IGlycV9jaG9vc2VfY3B1KGRlc3QpOworCisJaWYgKG9sZGNwdSA9PSBuZXdjcHUpCisJCWdvdG8gb3V0OworCisJLyogdW5tYXNrIG9uIG9sZCBDUFUgZmlyc3QgYmVmb3JlIGVuYWJsaW5nIG9uIHRoZSBzZWxlY3RlZCBDUFUgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGVvbl9pcnFfbG9jaywgZmxhZ3MpOworCW9sZG1hc2sgPSBMRU9OM19CWVBBU1NfTE9BRF9QQShMRU9OX0lNQVNLKG9sZGNwdSkpOworCUxFT04zX0JZUEFTU19TVE9SRV9QQShMRU9OX0lNQVNLKG9sZGNwdSksIChvbGRtYXNrICYgfm1hc2spKTsKKwlvbGRtYXNrID0gTEVPTjNfQllQQVNTX0xPQURfUEEoTEVPTl9JTUFTSyhuZXdjcHUpKTsKKwlMRU9OM19CWVBBU1NfU1RPUkVfUEEoTEVPTl9JTUFTSyhuZXdjcHUpLCAob2xkbWFzayB8IG1hc2spKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsZW9uX2lycV9sb2NrLCBmbGFncyk7CitvdXQ6CisJcmV0dXJuIElSUV9TRVRfTUFTS19PSzsKIH0KIAotc3RhdGljIHZvaWQgbGVvbl9kaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxX25yKQorc3RhdGljIHZvaWQgbGVvbl91bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKIHsKLQl1bnNpZ25lZCBsb25nIG1hc2ssIGZsYWdzOwotCW1hc2sgPSBnZXRfaXJxbWFzayhpcnFfbnIpOwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlMRU9OM19CWVBBU1NfU1RPUkVfUEEoTEVPTl9JTUFTSywKLQkJCSAgICAgIChMRU9OM19CWVBBU1NfTE9BRF9QQShMRU9OX0lNQVNLKSAmIH4obWFzaykpKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJdW5zaWduZWQgbG9uZyBtYXNrLCBvbGRtYXNrLCBmbGFnczsKKwlpbnQgY3B1OwogCisJbWFzayA9ICh1bnNpZ25lZCBsb25nKWRhdGEtPmNoaXBfZGF0YTsKKwljcHUgPSBpcnFfY2hvb3NlX2NwdShkYXRhLT5hZmZpbml0eSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmxlb25faXJxX2xvY2ssIGZsYWdzKTsKKwlvbGRtYXNrID0gTEVPTjNfQllQQVNTX0xPQURfUEEoTEVPTl9JTUFTSyhjcHUpKTsKKwlMRU9OM19CWVBBU1NfU1RPUkVfUEEoTEVPTl9JTUFTSyhjcHUpLCAob2xkbWFzayB8IG1hc2spKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsZW9uX2lycV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGxlb25fbWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgbWFzaywgb2xkbWFzaywgZmxhZ3M7CisJaW50IGNwdTsKKworCW1hc2sgPSAodW5zaWduZWQgbG9uZylkYXRhLT5jaGlwX2RhdGE7CisJY3B1ID0gaXJxX2Nob29zZV9jcHUoZGF0YS0+YWZmaW5pdHkpOworCXNwaW5fbG9ja19pcnFzYXZlKCZsZW9uX2lycV9sb2NrLCBmbGFncyk7CisJb2xkbWFzayA9IExFT04zX0JZUEFTU19MT0FEX1BBKExFT05fSU1BU0soY3B1KSk7CisJTEVPTjNfQllQQVNTX1NUT1JFX1BBKExFT05fSU1BU0soY3B1KSwgKG9sZG1hc2sgJiB+bWFzaykpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxlb25faXJxX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBsZW9uX3N0YXJ0dXBfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKK3sKKwlpcnFfbGluayhkYXRhLT5pcnEpOworCWxlb25fdW5tYXNrX2lycShkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbGVvbl9zaHV0ZG93bl9pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQoreworCWxlb25fbWFza19pcnEoZGF0YSk7CisJaXJxX3VubGluayhkYXRhLT5pcnEpOworfQorCisvKiBVc2VkIGJ5IGV4dGVybmFsIGxldmVsIHNlbnNpdGl2ZSBJUlEgaGFuZGxlcnMgb24gdGhlIExFT046IEFDSyBJUlEgY3RybCAqLworc3RhdGljIHZvaWQgbGVvbl9lb2lfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSAodW5zaWduZWQgbG9uZylkYXRhLT5jaGlwX2RhdGE7CisKKwlpZiAobWFzayAmIExFT05fRE9fQUNLX0hXKQorCQlMRU9OM19CWVBBU1NfU1RPUkVfUEEoTEVPTl9JQUNLLCBtYXNrICYgfkxFT05fRE9fQUNLX0hXKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBsZW9uX2lycSA9IHsKKwkubmFtZQkJCT0gImxlb24iLAorCS5pcnFfc3RhcnR1cAkJPSBsZW9uX3N0YXJ0dXBfaXJxLAorCS5pcnFfc2h1dGRvd24JCT0gbGVvbl9zaHV0ZG93bl9pcnEsCisJLmlycV9tYXNrCQk9IGxlb25fbWFza19pcnEsCisJLmlycV91bm1hc2sJCT0gbGVvbl91bm1hc2tfaXJxLAorCS5pcnFfZW9pCQk9IGxlb25fZW9pX2lycSwKKwkuaXJxX3NldF9hZmZpbml0eQk9IGxlb25fc2V0X2FmZmluaXR5LAorfTsKKworLyoKKyAqIEJ1aWxkIGEgTEVPTiBJUlEgZm9yIHRoZSBlZGdlIHRyaWdnZXJlZCBMRU9OIElSUSBjb250cm9sbGVyOgorICogIEVkZ2UgKG5vcm1hbCkgSVJRICAgICAgICAgICAtIGhhbmRsZV9zaW1wbGVfaXJxLCBhY2s9RE9OVC1DQVJFLCBuZXZlciBhY2sKKyAqICBMZXZlbCBJUlEgKFBDSXxMZXZlbC1HUElPKSAgLSBoYW5kbGVfZmFzdGVvaV9pcnEsIGFjaz0xLCBhY2sgYWZ0ZXIgSVNSCisgKiAgUGVyLUNQVSBFZGdlICAgICAgICAgICAgICAgIC0gaGFuZGxlX3BlcmNwdV9pcnEsIGFjaz0wCisgKi8KK3Vuc2lnbmVkIGludCBsZW9uX2J1aWxkX2RldmljZV9pcnEodW5zaWduZWQgaW50IHJlYWxfaXJxLAorCQkJCSAgICBpcnFfZmxvd19oYW5kbGVyX3QgZmxvd19oYW5kbGVyLAorCQkJCSAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgZG9fYWNrKQoreworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgbG9uZyBtYXNrOworCisJaXJxID0gMDsKKwltYXNrID0gZ2V0X2lycW1hc2socmVhbF9pcnEpOworCWlmIChtYXNrID09IDApCisJCWdvdG8gb3V0OworCisJaXJxID0gaXJxX2FsbG9jKHJlYWxfaXJxLCByZWFsX2lycSk7CisJaWYgKGlycSA9PSAwKQorCQlnb3RvIG91dDsKKworCWlmIChkb19hY2spCisJCW1hc2sgfD0gTEVPTl9ET19BQ0tfSFc7CisKKwlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZsZW9uX2lycSwKKwkJCQkgICAgICBmbG93X2hhbmRsZXIsIG5hbWUpOworCWlycV9zZXRfY2hpcF9kYXRhKGlycSwgKHZvaWQgKiltYXNrKTsKKworb3V0OgorCXJldHVybiBpcnE7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX2xlb25fYnVpbGRfZGV2aWNlX2lycShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCwKKwkJCQkJICAgdW5zaWduZWQgaW50IHJlYWxfaXJxKQoreworCXJldHVybiBsZW9uX2J1aWxkX2RldmljZV9pcnEocmVhbF9pcnEsIGhhbmRsZV9zaW1wbGVfaXJxLCAiZWRnZSIsIDApOwogfQogCiB2b2lkIF9faW5pdCBsZW9uX2luaXRfdGltZXJzKGlycV9oYW5kbGVyX3QgY291bnRlcl9mbikKIHsKLQlpbnQgaXJxOworCWludCBpcnEsIGVpcnE7CiAJc3RydWN0IGRldmljZV9ub2RlICpyb290bnAsICpucCwgKm5ucDsKIAlzdHJ1Y3QgcHJvcGVydHkgKnBwOwogCWludCBsZW47Ci0JaW50IGNwdSwgaWNzZWw7CisJaW50IGljc2VsOwogCWludCBhbXBvcHRzOworCWludCBlcnI7CiAKIAlsZW9uZGVidWdfaXJxX2Rpc2FibGUgPSAwOwogCWxlb25fZGVidWdfaXJxb3V0ID0gMDsKQEAgLTE3Myw5OCArMzA2LDg1IEBACiAJCQlsZW9uM19ncHRpbWVyX2lycSA9ICoodW5zaWduZWQgaW50ICopcHAtPnZhbHVlOwogCX0gd2hpbGUgKDApOwogCi0JaWYgKGxlb24zX2dwdGltZXJfcmVncyAmJiBsZW9uM19pcnFjdHJsX3JlZ3MgJiYgbGVvbjNfZ3B0aW1lcl9pcnEpIHsKLQkJTEVPTjNfQllQQVNTX1NUT1JFX1BBKAotCQkJJmxlb24zX2dwdGltZXJfcmVncy0+ZVtsZW9uM19ncHRpbWVyX2lkeF0udmFsLCAwKTsKLQkJTEVPTjNfQllQQVNTX1NUT1JFX1BBKAotCQkJJmxlb24zX2dwdGltZXJfcmVncy0+ZVtsZW9uM19ncHRpbWVyX2lkeF0ucmxkLAotCQkJKCgoMTAwMDAwMCAvIEhaKSAtIDEpKSk7Ci0JCUxFT04zX0JZUEFTU19TVE9SRV9QQSgKKwlpZiAoIShsZW9uM19ncHRpbWVyX3JlZ3MgJiYgbGVvbjNfaXJxY3RybF9yZWdzICYmIGxlb24zX2dwdGltZXJfaXJxKSkKKwkJZ290byBiYWQ7CisKKwlMRU9OM19CWVBBU1NfU1RPUkVfUEEoJmxlb24zX2dwdGltZXJfcmVncy0+ZVtsZW9uM19ncHRpbWVyX2lkeF0udmFsLCAwKTsKKwlMRU9OM19CWVBBU1NfU1RPUkVfUEEoJmxlb24zX2dwdGltZXJfcmVncy0+ZVtsZW9uM19ncHRpbWVyX2lkeF0ucmxkLAorCQkJCSgoKDEwMDAwMDAgLyBIWikgLSAxKSkpOworCUxFT04zX0JZUEFTU19TVE9SRV9QQSgKIAkJCSZsZW9uM19ncHRpbWVyX3JlZ3MtPmVbbGVvbjNfZ3B0aW1lcl9pZHhdLmN0cmwsIDApOwogCiAjaWZkZWYgQ09ORklHX1NNUAotCQlsZW9uX3BlcmNwdV90aW1lcl9kZXZbMF0uc3RhcnQgPSAoaW50KWxlb24zX2dwdGltZXJfcmVnczsKLQkJbGVvbl9wZXJjcHVfdGltZXJfZGV2WzBdLmlycSA9IGxlb24zX2dwdGltZXJfaXJxICsgMSArCi0JCQkJCSAgICAgICBsZW9uM19ncHRpbWVyX2lkeDsKKwlsZW9uM190aWNrZXJfaXJxID0gbGVvbjNfZ3B0aW1lcl9pcnEgKyAxICsgbGVvbjNfZ3B0aW1lcl9pZHg7CiAKLQkJaWYgKCEoTEVPTjNfQllQQVNTX0xPQURfUEEoJmxlb24zX2dwdGltZXJfcmVncy0+Y29uZmlnKSAmCi0JCSAgICAgICgxPDxMRU9OM19HUFRJTUVSX1NFUElSUSkpKSB7Ci0JCQlwcm9tX3ByaW50ZigiaXJxIHRpbWVyIG5vdCBjb25maWd1cmVkIHdpdGggc2VwYXJhdGUgaXJxc1xuIik7Ci0JCQlCVUcoKTsKLQkJfQotCi0JCUxFT04zX0JZUEFTU19TVE9SRV9QQSgKLQkJCSZsZW9uM19ncHRpbWVyX3JlZ3MtPmVbbGVvbjNfZ3B0aW1lcl9pZHgrMV0udmFsLCAwKTsKLQkJTEVPTjNfQllQQVNTX1NUT1JFX1BBKAotCQkJJmxlb24zX2dwdGltZXJfcmVncy0+ZVtsZW9uM19ncHRpbWVyX2lkeCsxXS5ybGQsCi0JCQkoKCgxMDAwMDAwL0haKSAtIDEpKSk7Ci0JCUxFT04zX0JZUEFTU19TVE9SRV9QQSgKLQkJCSZsZW9uM19ncHRpbWVyX3JlZ3MtPmVbbGVvbjNfZ3B0aW1lcl9pZHgrMV0uY3RybCwgMCk7Ci0jIGVuZGlmCi0KLQkJLyoKLQkJICogVGhlIElSUSBjb250cm9sbGVyIG1heSAoaWYgaW1wbGVtZW50ZWQpIGNvbnNpc3Qgb2YgbXVsdGlwbGUKLQkJICogSVJRIGNvbnRyb2xsZXJzLCBlYWNoIG1hcHBlZCBvbiBhIDRLYiBib3VuZGFyeS4KLQkJICogRWFjaCBDUFUgbWF5IGJlIHJvdXRlZCB0byBkaWZmZXJlbnQgSVJRQ1RSTHMsIGhvd2V2ZXIKLQkJICogd2UgYXNzdW1lIHRoYXQgYWxsIENQVXMgKGluIFNNUCBzeXN0ZW0pIGlzIHJvdXRlZCB0byB0aGUKLQkJICogc2FtZSBJUlEgQ29udHJvbGxlciwgYW5kIGZvciBub24tU01QIG9ubHkgb25lIElSUUNUUkwgaXMKLQkJICogYWNjZXNzZWQgYW55d2F5LgotCQkgKiBJbiBBTVAgc3lzdGVtcywgTGludXggbXVzdCBydW4gb24gQ1BVMCBmb3IgdGhlIHRpbWUgYmVpbmcuCi0JCSAqLwotCQljcHUgPSBzcGFyY19sZW9uM19jcHVpZCgpOwotCQlpY3NlbCA9IExFT04zX0JZUEFTU19MT0FEX1BBKCZsZW9uM19pcnFjdHJsX3JlZ3MtPmljc2VsW2NwdS84XSk7Ci0JCWljc2VsID0gKGljc2VsID4+ICgoNyAtIChjcHUmMHg3KSkgKiA0KSkgJiAweGY7Ci0JCWxlb24zX2lycWN0cmxfcmVncyArPSBpY3NlbDsKLQl9IGVsc2UgewotCQlnb3RvIGJhZDsKKwlpZiAoIShMRU9OM19CWVBBU1NfTE9BRF9QQSgmbGVvbjNfZ3B0aW1lcl9yZWdzLT5jb25maWcpICYKKwkgICAgICAoMTw8TEVPTjNfR1BUSU1FUl9TRVBJUlEpKSkgeworCQlwcmludGsoS0VSTl9FUlIgInRpbWVyIG5vdCBjb25maWd1cmVkIHdpdGggc2VwYXJhdGUgaXJxc1xuIik7CisJCUJVRygpOwogCX0KIAotCWlycSA9IHJlcXVlc3RfaXJxKGxlb24zX2dwdGltZXJfaXJxK2xlb24zX2dwdGltZXJfaWR4LAotCQkJICBjb3VudGVyX2ZuLAotCQkJICAoSVJRRl9ESVNBQkxFRCB8IFNBX1NUQVRJQ19BTExPQyksICJ0aW1lciIsIE5VTEwpOworCUxFT04zX0JZUEFTU19TVE9SRV9QQSgmbGVvbjNfZ3B0aW1lcl9yZWdzLT5lW2xlb24zX2dwdGltZXJfaWR4KzFdLnZhbCwKKwkJCQkwKTsKKwlMRU9OM19CWVBBU1NfU1RPUkVfUEEoJmxlb24zX2dwdGltZXJfcmVncy0+ZVtsZW9uM19ncHRpbWVyX2lkeCsxXS5ybGQsCisJCQkJKCgoMTAwMDAwMC9IWikgLSAxKSkpOworCUxFT04zX0JZUEFTU19TVE9SRV9QQSgmbGVvbjNfZ3B0aW1lcl9yZWdzLT5lW2xlb24zX2dwdGltZXJfaWR4KzFdLmN0cmwsCisJCQkJMCk7CisjZW5kaWYKIAotCWlmIChpcnEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJsZW9uX3RpbWVfaW5pdDogdW5hYmxlIHRvIGF0dGFjaCBJUlElZFxuIiwKLQkJICAgICAgIExFT05fSU5URVJSVVBUX1RJTUVSMSk7CisJLyoKKwkgKiBUaGUgSVJRIGNvbnRyb2xsZXIgbWF5IChpZiBpbXBsZW1lbnRlZCkgY29uc2lzdCBvZiBtdWx0aXBsZQorCSAqIElSUSBjb250cm9sbGVycywgZWFjaCBtYXBwZWQgb24gYSA0S2IgYm91bmRhcnkuCisJICogRWFjaCBDUFUgbWF5IGJlIHJvdXRlZCB0byBkaWZmZXJlbnQgSVJRQ1RSTHMsIGhvd2V2ZXIKKwkgKiB3ZSBhc3N1bWUgdGhhdCBhbGwgQ1BVcyAoaW4gU01QIHN5c3RlbSkgaXMgcm91dGVkIHRvIHRoZQorCSAqIHNhbWUgSVJRIENvbnRyb2xsZXIsIGFuZCBmb3Igbm9uLVNNUCBvbmx5IG9uZSBJUlFDVFJMIGlzCisJICogYWNjZXNzZWQgYW55d2F5LgorCSAqIEluIEFNUCBzeXN0ZW1zLCBMaW51eCBtdXN0IHJ1biBvbiBDUFUwIGZvciB0aGUgdGltZSBiZWluZy4KKwkgKi8KKwlpY3NlbCA9IExFT04zX0JZUEFTU19MT0FEX1BBKCZsZW9uM19pcnFjdHJsX3JlZ3MtPmljc2VsW2Jvb3RfY3B1X2lkLzhdKTsKKwlpY3NlbCA9IChpY3NlbCA+PiAoKDcgLSAoYm9vdF9jcHVfaWQmMHg3KSkgKiA0KSkgJiAweGY7CisJbGVvbjNfaXJxY3RybF9yZWdzICs9IGljc2VsOworCisJLyogTWFzayBhbGwgSVJRcyBvbiBib290LWNwdSBJUlEgY29udHJvbGxlciAqLworCUxFT04zX0JZUEFTU19TVE9SRV9QQSgmbGVvbjNfaXJxY3RybF9yZWdzLT5tYXNrW2Jvb3RfY3B1X2lkXSwgMCk7CisKKwkvKiBQcm9iZSBleHRlbmRlZCBJUlEgY29udHJvbGxlciAqLworCWVpcnEgPSAoTEVPTjNfQllQQVNTX0xPQURfUEEoJmxlb24zX2lycWN0cmxfcmVncy0+bXBzdGF0dXMpCisJCT4+IDE2KSAmIDB4ZjsKKwlpZiAoZWlycSAhPSAwKQorCQlsZW9uX2VpcnFfc2V0dXAoZWlycSk7CisKKwlpcnEgPSBfbGVvbl9idWlsZF9kZXZpY2VfaXJxKE5VTEwsIGxlb24zX2dwdGltZXJfaXJxK2xlb24zX2dwdGltZXJfaWR4KTsKKwllcnIgPSByZXF1ZXN0X2lycShpcnEsIGNvdW50ZXJfZm4sIElSUUZfVElNRVIsICJ0aW1lciIsIE5VTEwpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gYXR0YWNoIHRpbWVyIElSUSVkXG4iLCBpcnEpOwogCQlwcm9tX2hhbHQoKTsKIAl9CiAKLSMgaWZkZWYgQ09ORklHX1NNUAotCXsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJc3RydWN0IHR0X2VudHJ5ICp0cmFwX3RhYmxlID0gJnNwYXJjX3R0YWJsZVtTUF9UUkFQX0lSUTEgKyAobGVvbl9wZXJjcHVfdGltZXJfZGV2WzBdLmlycSAtIDEpXTsKLQotCQkvKiBGb3IgU01QIHdlIHVzZSB0aGUgbGV2ZWwgMTQgdGlja2VyLCBob3dldmVyIHRoZSBib290dXAgY29kZQotCQkgKiBoYXMgY29waWVkIHRoZSBmaXJtd2FyZXMgbGV2ZWwgMTQgdmVjdG9yIGludG8gYm9vdCBjcHUncwotCQkgKiB0cmFwIHRhYmxlLCB3ZSBtdXN0IGZpeCB0aGlzIG5vdyBvciB3ZSBnZXQgc3F1YXNoZWQuCi0JCSAqLwotCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQkJcGF0Y2htZV9tYXliZV9zbXBfbXNnWzBdID0gMHgwMTAwMDAwMDsgLyogTk9QIG91dCB0aGUgYnJhbmNoICovCi0KLQkJLyogQWRqdXN0IHNvIHRoYXQgd2UganVtcCBkaXJlY3RseSB0byBzbXBsZW9uX3RpY2tlciAqLwotCQl0cmFwX3RhYmxlLT5pbnN0X3RocmVlICs9IHNtcGxlb25fdGlja2VyIC0gcmVhbF9pcnFfZW50cnk7Ci0KLQkJbG9jYWxfZmx1c2hfY2FjaGVfYWxsKCk7Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQl9Ci0jIGVuZGlmCi0KLQlpZiAobGVvbjNfZ3B0aW1lcl9yZWdzKSB7Ci0JCUxFT04zX0JZUEFTU19TVE9SRV9QQSgmbGVvbjNfZ3B0aW1lcl9yZWdzLT5lW2xlb24zX2dwdGltZXJfaWR4XS5jdHJsLAotCQkJCSAgICAgIExFT04zX0dQVElNRVJfRU4gfAotCQkJCSAgICAgIExFT04zX0dQVElNRVJfUkwgfAotCQkJCSAgICAgIExFT04zX0dQVElNRVJfTEQgfCBMRU9OM19HUFRJTUVSX0lSUUVOKTsKKwlMRU9OM19CWVBBU1NfU1RPUkVfUEEoJmxlb24zX2dwdGltZXJfcmVncy0+ZVtsZW9uM19ncHRpbWVyX2lkeF0uY3RybCwKKwkJCSAgICAgIExFT04zX0dQVElNRVJfRU4gfAorCQkJICAgICAgTEVPTjNfR1BUSU1FUl9STCB8CisJCQkgICAgICBMRU9OM19HUFRJTUVSX0xEIHwKKwkJCSAgICAgIExFT04zX0dQVElNRVJfSVJRRU4pOwogCiAjaWZkZWYgQ09ORklHX1NNUAotCQlMRU9OM19CWVBBU1NfU1RPUkVfUEEoJmxlb24zX2dwdGltZXJfcmVncy0+ZVtsZW9uM19ncHRpbWVyX2lkeCsxXS5jdHJsLAotCQkJCSAgICAgIExFT04zX0dQVElNRVJfRU4gfAotCQkJCSAgICAgIExFT04zX0dQVElNRVJfUkwgfAotCQkJCSAgICAgIExFT04zX0dQVElNRVJfTEQgfAotCQkJCSAgICAgIExFT04zX0dQVElNRVJfSVJRRU4pOwotI2VuZGlmCi0KKwkvKiBJbnN0YWxsIHBlci1jcHUgSVJRIGhhbmRsZXIgZm9yIGJyb2FkY2FzdGVkIHRpY2tlciAqLworCWlycSA9IGxlb25fYnVpbGRfZGV2aWNlX2lycShsZW9uM190aWNrZXJfaXJxLCBoYW5kbGVfcGVyY3B1X2lycSwKKwkJCQkgICAgInBlci1jcHUiLCAwKTsKKwllcnIgPSByZXF1ZXN0X2lycShpcnEsIGxlb25fcGVyY3B1X3RpbWVyX2ludGVycnVwdCwKKwkJCSAgSVJRRl9QRVJDUFUgfCBJUlFGX1RJTUVSLCAidGlja2VyIiwKKwkJCSAgTlVMTCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBhdHRhY2ggdGlja2VyIElSUSVkXG4iLCBpcnEpOworCQlwcm9tX2hhbHQoKTsKIAl9CisKKwlMRU9OM19CWVBBU1NfU1RPUkVfUEEoJmxlb24zX2dwdGltZXJfcmVncy0+ZVtsZW9uM19ncHRpbWVyX2lkeCsxXS5jdHJsLAorCQkJICAgICAgTEVPTjNfR1BUSU1FUl9FTiB8CisJCQkgICAgICBMRU9OM19HUFRJTUVSX1JMIHwKKwkJCSAgICAgIExFT04zX0dQVElNRVJfTEQgfAorCQkJICAgICAgTEVPTjNfR1BUSU1FUl9JUlFFTik7CisjZW5kaWYKIAlyZXR1cm47CiBiYWQ6CiAJcHJpbnRrKEtFUk5fRVJSICJObyBUaW1lci9pcnFjdHJsIGZvdW5kXG4iKTsKQEAgLTI4MSw5ICs0MDEsNiBAQAogCUJVRygpOwogfQogCi0KLQotCiB2b2lkIF9faW5pdCBsZW9uX3RyYW5zX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpkcCkKIHsKIAlpZiAoc3RyY21wKGRwLT50eXBlLCAiY3B1IikgPT0gMCAmJiBzdHJjbXAoZHAtPm5hbWUsICI8TlVMTD4iKSA9PSAwKSB7CkBAIC0zMzcsMjIgKzQ1NCwxOCBAQAogewogCXVuc2lnbmVkIGxvbmcgbWFzaywgZmxhZ3MsICphZGRyOwogCW1hc2sgPSBnZXRfaXJxbWFzayhpcnFfbnIpOwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlhZGRyID0gKHVuc2lnbmVkIGxvbmcgKikmKGxlb24zX2lycWN0cmxfcmVncy0+bWFza1tjcHVdKTsKLQlMRU9OM19CWVBBU1NfU1RPUkVfUEEoYWRkciwgKExFT04zX0JZUEFTU19MT0FEX1BBKGFkZHIpIHwgKG1hc2spKSk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZsZW9uX2lycV9sb2NrLCBmbGFncyk7CisJYWRkciA9ICh1bnNpZ25lZCBsb25nICopTEVPTl9JTUFTSyhjcHUpOworCUxFT04zX0JZUEFTU19TVE9SRV9QQShhZGRyLCAoTEVPTjNfQllQQVNTX0xPQURfUEEoYWRkcikgfCBtYXNrKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGVvbl9pcnFfbG9jaywgZmxhZ3MpOwogfQogCiAjZW5kaWYKIAogdm9pZCBfX2luaXQgbGVvbl9pbml0X0lSUSh2b2lkKQogewotCXNwYXJjX2lycV9jb25maWcuaW5pdF90aW1lcnMgPSBsZW9uX2luaXRfdGltZXJzOwotCi0JQlRGSVhVUFNFVF9DQUxMKGVuYWJsZV9pcnEsIGxlb25fZW5hYmxlX2lycSwgQlRGSVhVUENBTExfTk9STSk7Ci0JQlRGSVhVUFNFVF9DQUxMKGRpc2FibGVfaXJxLCBsZW9uX2Rpc2FibGVfaXJxLCBCVEZJWFVQQ0FMTF9OT1JNKTsKLQlCVEZJWFVQU0VUX0NBTEwoZW5hYmxlX3BpbF9pcnEsIGxlb25fZW5hYmxlX2lycSwgQlRGSVhVUENBTExfTk9STSk7Ci0JQlRGSVhVUFNFVF9DQUxMKGRpc2FibGVfcGlsX2lycSwgbGVvbl9kaXNhYmxlX2lycSwgQlRGSVhVUENBTExfTk9STSk7CisJc3BhcmNfaXJxX2NvbmZpZy5pbml0X3RpbWVycyAgICAgID0gbGVvbl9pbml0X3RpbWVyczsKKwlzcGFyY19pcnFfY29uZmlnLmJ1aWxkX2RldmljZV9pcnEgPSBfbGVvbl9idWlsZF9kZXZpY2VfaXJxOwogCiAJQlRGSVhVUFNFVF9DQUxMKGNsZWFyX2Nsb2NrX2lycSwgbGVvbl9jbGVhcl9jbG9ja19pcnEsCiAJCQlCVEZJWFVQQ0FMTF9OT1JNKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2xlb25fc21wLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9sZW9uX3NtcC5jCmluZGV4IDhmNWRlNGEuLmZlOGZiNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2xlb25fc21wLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvbGVvbl9zbXAuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpAQCAtMjksNiArMzAsNyBAQAogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL2lycV9yZWdzLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CiAKICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CkBAIC01MCw5ICs1MiwxMiBAQAogZXh0ZXJuIGN0eGRfdCAqc3JtbXVfY3R4X3RhYmxlX3BoeXM7CiBzdGF0aWMgaW50IHNtcF9wcm9jZXNzb3JzX3JlYWR5OwogZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgY3B1X2NhbGxpbl9tYXBbTlJfQ1BVU107Ci1leHRlcm4gdW5zaWduZWQgY2hhciBib290X2NwdV9pZDsKIGV4dGVybiBjcHVtYXNrX3Qgc21wX2NvbW1lbmNlZF9tYXNrOwogdm9pZCBfX2luaXQgbGVvbl9jb25maWd1cmVfY2FjaGVfc21wKHZvaWQpOworc3RhdGljIHZvaWQgbGVvbl9pcGlfaW5pdCh2b2lkKTsKKworLyogSVJRIG51bWJlciBvZiBMRU9OIElQSXMgKi8KK2ludCBsZW9uX2lwaV9pcnEgPSBMRU9OM19JUlFfSVBJX0RFRkFVTFQ7CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkb19zd2FwKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnB0ciwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyB2YWwpCkBAIC05NCw4ICs5OSw2IEBACiAJbG9jYWxfZmx1c2hfY2FjaGVfYWxsKCk7CiAJbG9jYWxfZmx1c2hfdGxiX2FsbCgpOwogCi0JY3B1X3Byb2JlKCk7Ci0KIAkvKiBGaXggaWRsZSB0aHJlYWQgZmllbGRzLiAqLwogCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZCBbJTBdLCAlJWc2XG5cdCIgOiA6ICJyIigmY3VycmVudF9zZXRbY3B1aWRdKQogCQkJICAgICA6ICJtZW1vcnkiIC8qIHBhcmFub2lkICovKTsKQEAgLTEwNCwxMSArMTA3LDExIEBACiAJYXRvbWljX2luYygmaW5pdF9tbS5tbV9jb3VudCk7CiAJY3VycmVudC0+YWN0aXZlX21tID0gJmluaXRfbW07CiAKLQl3aGlsZSAoIWNwdV9pc3NldChjcHVpZCwgc21wX2NvbW1lbmNlZF9tYXNrKSkKKwl3aGlsZSAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1aWQsICZzbXBfY29tbWVuY2VkX21hc2spKQogCQltYigpOwogCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwotCWNwdV9zZXQoY3B1aWQsIGNwdV9vbmxpbmVfbWFwKTsKKwlzZXRfY3B1X29ubGluZShjcHVpZCwgdHJ1ZSk7CiB9CiAKIC8qCkBAIC0xNzksMTMgKzE4MiwxNiBAQAogCWludCBucmNwdSA9IGxlb25fc21wX25yY3B1cygpOwogCWludCBtZSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAorCS8qIFNldHVwIElQSSAqLworCWxlb25faXBpX2luaXQoKTsKKwogCXByaW50ayhLRVJOX0lORk8gIiVkOiglZDolZCkgY3B1cyBtcGlycSBhdCAweCV4XG4iLCAodW5zaWduZWQgaW50KW1lLAogCSAgICAgICAodW5zaWduZWQgaW50KW5yY3B1LCAodW5zaWduZWQgaW50KU5SX0NQVVMsCiAJICAgICAgICh1bnNpZ25lZCBpbnQpJihsZW9uM19pcnFjdHJsX3JlZ3MtPm1wc3RhdHVzKSk7CiAKIAlsZW9uX2VuYWJsZV9pcnFfY3B1KExFT04zX0lSUV9DUk9TU19DQUxMLCBtZSk7CiAJbGVvbl9lbmFibGVfaXJxX2NwdShMRU9OM19JUlFfVElDS0VSLCBtZSk7Ci0JbGVvbl9lbmFibGVfaXJxX2NwdShMRU9OM19JUlFfUkVTQ0hFRFVMRSwgbWUpOworCWxlb25fZW5hYmxlX2lycV9jcHUobGVvbl9pcGlfaXJxLCBtZSk7CiAKIAlsZW9uX3NtcF9zZXRicm9hZGNhc3QoMSA8PCBMRU9OM19JUlFfVElDS0VSKTsKIApAQCAtMjIwLDYgKzIyNiwxMCBAQAogCSAgICAgICAodW5zaWduZWQgaW50KSZsZW9uM19pcnFjdHJsX3JlZ3MtPm1wc3RhdHVzKTsKIAlsb2NhbF9mbHVzaF9jYWNoZV9hbGwoKTsKIAorCS8qIE1ha2Ugc3VyZSBhbGwgSVJRcyBhcmUgb2YgZnJvbSB0aGUgc3RhcnQgZm9yIHRoaXMgbmV3IENQVSAqLworCUxFT05fQllQQVNTX1NUT1JFX1BBKCZsZW9uM19pcnFjdHJsX3JlZ3MtPm1hc2tbaV0sIDApOworCisJLyogV2FrZSBvbmUgQ1BVICovCiAJTEVPTl9CWVBBU1NfU1RPUkVfUEEoJihsZW9uM19pcnFjdHJsX3JlZ3MtPm1wc3RhdHVzKSwgMSA8PCBpKTsKIAogCS8qIHdoZWVlLi4uIGl0J3MgZ29pbmcuLi4gKi8KQEAgLTIzNiw3ICsyNDYsNyBAQAogCX0gZWxzZSB7CiAJCWxlb25fZW5hYmxlX2lycV9jcHUoTEVPTjNfSVJRX0NST1NTX0NBTEwsIGkpOwogCQlsZW9uX2VuYWJsZV9pcnFfY3B1KExFT04zX0lSUV9USUNLRVIsIGkpOwotCQlsZW9uX2VuYWJsZV9pcnFfY3B1KExFT04zX0lSUV9SRVNDSEVEVUxFLCBpKTsKKwkJbGVvbl9lbmFibGVfaXJxX2NwdShsZW9uX2lwaV9pcnEsIGkpOwogCX0KIAogCWxvY2FsX2ZsdXNoX2NhY2hlX2FsbCgpOwpAQCAtMjYyLDIxICsyNzIsMjEgQEAKIAlsb2NhbF9mbHVzaF9jYWNoZV9hbGwoKTsKIAogCS8qIEZyZWUgdW5uZWVkZWQgdHJhcCB0YWJsZXMgKi8KLQlpZiAoIWNwdV9pc3NldCgxLCBjcHVfcHJlc2VudF9tYXApKSB7CisJaWYgKCFjcHVfcHJlc2VudCgxKSkgewogCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UoJnRyYXBiYXNlX2NwdTEpKTsKIAkJaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZSgmdHJhcGJhc2VfY3B1MSkpOwogCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpJnRyYXBiYXNlX2NwdTEpOwogCQl0b3RhbHJhbV9wYWdlcysrOwogCQludW1fcGh5c3BhZ2VzKys7CiAJfQotCWlmICghY3B1X2lzc2V0KDIsIGNwdV9wcmVzZW50X21hcCkpIHsKKwlpZiAoIWNwdV9wcmVzZW50KDIpKSB7CiAJCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZSgmdHJhcGJhc2VfY3B1MikpOwogCQlpbml0X3BhZ2VfY291bnQodmlydF90b19wYWdlKCZ0cmFwYmFzZV9jcHUyKSk7CiAJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykmdHJhcGJhc2VfY3B1Mik7CiAJCXRvdGFscmFtX3BhZ2VzKys7CiAJCW51bV9waHlzcGFnZXMrKzsKIAl9Ci0JaWYgKCFjcHVfaXNzZXQoMywgY3B1X3ByZXNlbnRfbWFwKSkgeworCWlmICghY3B1X3ByZXNlbnQoMykpIHsKIAkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKCZ0cmFwYmFzZV9jcHUzKSk7CiAJCWluaXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2UoJnRyYXBiYXNlX2NwdTMpKTsKIAkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSZ0cmFwYmFzZV9jcHUzKTsKQEAgLTI5Miw2ICszMDIsOTkgQEAKIHsKIH0KIAorc3RydWN0IGxlb25faXBpX3dvcmsgeworCWludCBzaW5nbGU7CisJaW50IG1zazsKKwlpbnQgcmVzY2hlZDsKK307CisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRChzdHJ1Y3QgbGVvbl9pcGlfd29yaywgbGVvbl9pcGlfd29yayk7CisKKy8qIEluaXRpYWxpemUgSVBJcyBvbiB0aGUgTEVPTiwgaW4gb3JkZXIgdG8gc2F2ZSBJUlEgcmVzb3VyY2VzIG9ubHkgb25lIElSUQorICogaXMgdXNlZCBmb3IgYWxsIHRocmVlIHR5cGVzIG9mIElQSXMuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBsZW9uX2lwaV9pbml0KHZvaWQpCit7CisJaW50IGNwdSwgbGVuOworCXN0cnVjdCBsZW9uX2lwaV93b3JrICp3b3JrOworCXN0cnVjdCBwcm9wZXJ0eSAqcHA7CisJc3RydWN0IGRldmljZV9ub2RlICpyb290bnA7CisJc3RydWN0IHR0X2VudHJ5ICp0cmFwX3RhYmxlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBGaW5kIElQSSBJUlEgb3Igc3RpY2sgd2l0aCBkZWZhdWx0IHZhbHVlICovCisJcm9vdG5wID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9hbWJhcHAwIik7CisJaWYgKHJvb3RucCkgeworCQlwcCA9IG9mX2ZpbmRfcHJvcGVydHkocm9vdG5wLCAiaXBpX251bSIsICZsZW4pOworCQlpZiAocHAgJiYgKCooaW50ICopcHAtPnZhbHVlKSkKKwkJCWxlb25faXBpX2lycSA9ICooaW50ICopcHAtPnZhbHVlOworCX0KKwlwcmludGsoS0VSTl9JTkZPICJsZW9uOiBTTVAgSVBJcyBhdCBJUlEgJWRcbiIsIGxlb25faXBpX2lycSk7CisKKwkvKiBBZGp1c3Qgc28gdGhhdCB3ZSBqdW1wIGRpcmVjdGx5IHRvIHNtcGxlb25faXBpICovCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXRyYXBfdGFibGUgPSAmc3BhcmNfdHRhYmxlW1NQX1RSQVBfSVJRMSArIChsZW9uX2lwaV9pcnEgLSAxKV07CisJdHJhcF90YWJsZS0+aW5zdF90aHJlZSArPSBzbXBsZW9uX2lwaSAtIHJlYWxfaXJxX2VudHJ5OworCWxvY2FsX2ZsdXNoX2NhY2hlX2FsbCgpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJd29yayA9ICZwZXJfY3B1KGxlb25faXBpX3dvcmssIGNwdSk7CisJCXdvcmstPnNpbmdsZSA9IHdvcmstPm1zayA9IHdvcmstPnJlc2NoZWQgPSAwOworCX0KK30KKworc3RhdGljIHZvaWQgbGVvbl9pcGlfc2luZ2xlKGludCBjcHUpCit7CisJc3RydWN0IGxlb25faXBpX3dvcmsgKndvcmsgPSAmcGVyX2NwdShsZW9uX2lwaV93b3JrLCBjcHUpOworCisJLyogTWFyayB3b3JrICovCisJd29yay0+c2luZ2xlID0gMTsKKworCS8qIEdlbmVyYXRlIElSUSBvbiB0aGUgQ1BVICovCisJc2V0X2NwdV9pbnQoY3B1LCBsZW9uX2lwaV9pcnEpOworfQorCitzdGF0aWMgdm9pZCBsZW9uX2lwaV9tYXNrX29uZShpbnQgY3B1KQoreworCXN0cnVjdCBsZW9uX2lwaV93b3JrICp3b3JrID0gJnBlcl9jcHUobGVvbl9pcGlfd29yaywgY3B1KTsKKworCS8qIE1hcmsgd29yayAqLworCXdvcmstPm1zayA9IDE7CisKKwkvKiBHZW5lcmF0ZSBJUlEgb24gdGhlIENQVSAqLworCXNldF9jcHVfaW50KGNwdSwgbGVvbl9pcGlfaXJxKTsKK30KKworc3RhdGljIHZvaWQgbGVvbl9pcGlfcmVzY2hlZChpbnQgY3B1KQoreworCXN0cnVjdCBsZW9uX2lwaV93b3JrICp3b3JrID0gJnBlcl9jcHUobGVvbl9pcGlfd29yaywgY3B1KTsKKworCS8qIE1hcmsgd29yayAqLworCXdvcmstPnJlc2NoZWQgPSAxOworCisJLyogR2VuZXJhdGUgSVJRIG9uIHRoZSBDUFUgKGFueSBJUlEgd2lsbCBjYXVzZSByZXNjaGVkKSAqLworCXNldF9jcHVfaW50KGNwdSwgbGVvbl9pcGlfaXJxKTsKK30KKwordm9pZCBsZW9uc21wX2lwaV9pbnRlcnJ1cHQodm9pZCkKK3sKKwlzdHJ1Y3QgbGVvbl9pcGlfd29yayAqd29yayA9ICZfX2dldF9jcHVfdmFyKGxlb25faXBpX3dvcmspOworCisJaWYgKHdvcmstPnNpbmdsZSkgeworCQl3b3JrLT5zaW5nbGUgPSAwOworCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaW50ZXJydXB0KCk7CisJfQorCWlmICh3b3JrLT5tc2spIHsKKwkJd29yay0+bXNrID0gMDsKKwkJc21wX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KCk7CisJfQorCWlmICh3b3JrLT5yZXNjaGVkKSB7CisJCXdvcmstPnJlc2NoZWQgPSAwOworCQlzbXBfcmVzY2hlZF9pbnRlcnJ1cHQoKTsKKwl9Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc21wX2Z1bmNhbGwgewogCXNtcGZ1bmNfdCBmdW5jOwogCXVuc2lnbmVkIGxvbmcgYXJnMTsKQEAgLTMzNywxMCArNDQwLDEwIEBACiAJCXsKIAkJCXJlZ2lzdGVyIGludCBpOwogCi0JCQljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBtYXNrKTsKLQkJCWNwdXNfYW5kKG1hc2ssIGNwdV9vbmxpbmVfbWFwLCBtYXNrKTsKKwkJCWNwdW1hc2tfY2xlYXJfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwgJm1hc2spOworCQkJY3B1bWFza19hbmQoJm1hc2ssIGNwdV9vbmxpbmVfbWFzaywgJm1hc2spOwogCQkJZm9yIChpID0gMDsgaSA8PSBoaWdoOyBpKyspIHsKLQkJCQlpZiAoY3B1X2lzc2V0KGksIG1hc2spKSB7CisJCQkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoaSwgJm1hc2spKSB7CiAJCQkJCWNjYWxsX2luZm8ucHJvY2Vzc29yc19pbltpXSA9IDA7CiAJCQkJCWNjYWxsX2luZm8ucHJvY2Vzc29yc19vdXRbaV0gPSAwOwogCQkJCQlzZXRfY3B1X2ludChpLCBMRU9OM19JUlFfQ1JPU1NfQ0FMTCk7CkBAIC0zNTQsNyArNDU3LDcgQEAKIAogCQkJaSA9IDA7CiAJCQlkbyB7Ci0JCQkJaWYgKCFjcHVfaXNzZXQoaSwgbWFzaykpCisJCQkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGksICZtYXNrKSkKIAkJCQkJY29udGludWU7CiAKIAkJCQl3aGlsZSAoIWNjYWxsX2luZm8ucHJvY2Vzc29yc19pbltpXSkKQEAgLTM2Myw3ICs0NjYsNyBAQAogCiAJCQlpID0gMDsKIAkJCWRvIHsKLQkJCQlpZiAoIWNwdV9pc3NldChpLCBtYXNrKSkKKwkJCQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoaSwgJm1hc2spKQogCQkJCQljb250aW51ZTsKIAogCQkJCXdoaWxlICghY2NhbGxfaW5mby5wcm9jZXNzb3JzX291dFtpXSkKQEAgLTM4NiwyNyArNDg5LDIzIEBACiAJY2NhbGxfaW5mby5wcm9jZXNzb3JzX291dFtpXSA9IDE7CiB9CiAKLXZvaWQgbGVvbl9wZXJjcHVfdGltZXJfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQoraXJxcmV0dXJuX3QgbGVvbl9wZXJjcHVfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKnVudXNlZCkKIHsKLQlzdHJ1Y3QgcHRfcmVncyAqb2xkX3JlZ3M7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAotCW9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOwotCiAJbGVvbl9jbGVhcl9wcm9maWxlX2lycShjcHUpOwogCiAJcHJvZmlsZV90aWNrKENQVV9QUk9GSUxJTkcpOwogCiAJaWYgKCEtLXByb2ZfY291bnRlcihjcHUpKSB7Ci0JCWludCB1c2VyID0gdXNlcl9tb2RlKHJlZ3MpOworCQlpbnQgdXNlciA9IHVzZXJfbW9kZShnZXRfaXJxX3JlZ3MoKSk7CiAKLQkJaXJxX2VudGVyKCk7CiAJCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXIpOwotCQlpcnFfZXhpdCgpOwogCiAJCXByb2ZfY291bnRlcihjcHUpID0gcHJvZl9tdWx0aXBsaWVyKGNwdSk7CiAJfQotCXNldF9pcnFfcmVncyhvbGRfcmVncyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzbXBfc2V0dXBfcGVyY3B1X3RpbWVyKHZvaWQpCkBAIC00NDksNiArNTQ4LDkgQEAKIAlCVEZJWFVQU0VUX0NBTEwoc21wX2Nyb3NzX2NhbGwsIGxlb25fY3Jvc3NfY2FsbCwgQlRGSVhVUENBTExfTk9STSk7CiAJQlRGSVhVUFNFVF9DQUxMKF9faGFyZF9zbXBfcHJvY2Vzc29yX2lkLCBfX2xlb25fcHJvY2Vzc29yX2lkLAogCQkJQlRGSVhVUENBTExfTk9STSk7CisJQlRGSVhVUFNFVF9DQUxMKHNtcF9pcGlfcmVzY2hlZCwgbGVvbl9pcGlfcmVzY2hlZCwgQlRGSVhVUENBTExfTk9STSk7CisJQlRGSVhVUFNFVF9DQUxMKHNtcF9pcGlfc2luZ2xlLCBsZW9uX2lwaV9zaW5nbGUsIEJURklYVVBDQUxMX05PUk0pOworCUJURklYVVBTRVRfQ0FMTChzbXBfaXBpX21hc2tfb25lLCBsZW9uX2lwaV9tYXNrX29uZSwgQlRGSVhVUENBTExfTk9STSk7CiB9CiAKICNlbmRpZiAvKiBDT05GSUdfU1BBUkNfTEVPTiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvbWRlc2MuYyBiL2FyY2gvc3BhcmMva2VybmVsL21kZXNjLmMKaW5kZXggNTZkYjA2NC4uNDJmMjhjNyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvbWRlc2MuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9tZGVzYy5jCkBAIC03NjgsNyArNzY4LDcgQEAKIAkJCSAgICAgICBjcHVpZCwgTlJfQ1BVUyk7CiAJCQljb250aW51ZTsKIAkJfQotCQlpZiAoIWNwdV9pc3NldChjcHVpZCwgKm1hc2spKQorCQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1aWQsIG1hc2spKQogCQkJY29udGludWU7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9vZl9kZXZpY2VfNjQuYwppbmRleCA1YzE0OTY4Li4zYmIyZWFjIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9vZl9kZXZpY2VfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9vZl9kZXZpY2VfNjQuYwpAQCAtNjIyLDggKzYyMiw5IEBACiBvdXQ6CiAJbmlkID0gb2Zfbm9kZV90b19uaWQoZHApOwogCWlmIChuaWQgIT0gLTEpIHsKLQkJY3B1bWFza190IG51bWFfbWFzayA9ICpjcHVtYXNrX29mX25vZGUobmlkKTsKKwkJY3B1bWFza190IG51bWFfbWFzazsKIAorCQljcHVtYXNrX2NvcHkoJm51bWFfbWFzaywgY3B1bWFza19vZl9ub2RlKG5pZCkpOwogCQlpcnFfc2V0X2FmZmluaXR5KGlycSwgJm51bWFfbWFzayk7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfbXNpLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfbXNpLmMKaW5kZXggMzA5ODJlOS4uNTgwNjUxYSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX21zaS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaV9tc2kuYwpAQCAtMjg0LDggKzI4NCw5IEBACiAKIAluaWQgPSBwYm0tPm51bWFfbm9kZTsKIAlpZiAobmlkICE9IC0xKSB7Ci0JCWNwdW1hc2tfdCBudW1hX21hc2sgPSAqY3B1bWFza19vZl9ub2RlKG5pZCk7CisJCWNwdW1hc2tfdCBudW1hX21hc2s7CiAKKwkJY3B1bWFza19jb3B5KCZudW1hX21hc2ssIGNwdW1hc2tfb2Zfbm9kZShuaWQpKTsKIAkJaXJxX3NldF9hZmZpbml0eShpcnEsICZudW1hX21hc2spOwogCX0KIAllcnIgPSByZXF1ZXN0X2lycShpcnEsIHNwYXJjNjRfbXNpcV9pbnRlcnJ1cHQsIDAsCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2ljLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2ljLmMKaW5kZXggMmNkYzEzMS4uOTQ4NjAxYSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpYy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaWMuYwpAQCAtMTY0LDYgKzE2NCw5IEBACiB2b2xhdGlsZSBpbnQgcGNpY19zcGVjdWxhdGl2ZTsKIHZvbGF0aWxlIGludCBwY2ljX3RyYXBwZWQ7CiAKKy8qIGZvcndhcmQgKi8KK3Vuc2lnbmVkIGludCBwY2ljX2J1aWxkX2RldmljZV9pcnEoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCByZWFsX2lycSk7CiAKICNkZWZpbmUgQ09ORklHX0NNRChidXMsIGRldmljZV9mbiwgd2hlcmUpICgweDgwMDAwMDAwIHwgKCgodW5zaWduZWQgaW50KWJ1cykgPDwgMTYpIHwgKCgodW5zaWduZWQgaW50KWRldmljZV9mbikgPDwgOCkgfCAod2hlcmUgJiB+MykpCiAKQEAgLTUyMyw2ICs1MjYsNyBAQAogcGNpY19maWxsX2lycShzdHJ1Y3QgbGludXhfcGNpYyAqcGNpYywgc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG5vZGUpCiB7CiAJc3RydWN0IHBjaWNfY2EyaXJxICpwOworCXVuc2lnbmVkIGludCByZWFsX2lycTsKIAlpbnQgaSwgaXZlYzsKIAljaGFyIG5hbWVidWZbNjRdOwogCkBAIC01NTEsMjYgKzU1NSwyNSBAQAogCWkgPSBwLT5waW47CiAJaWYgKGkgPj0gMCAmJiBpIDwgNCkgewogCQlpdmVjID0gcmVhZHcocGNpYy0+cGNpY19yZWdzK1BDSV9JTlRfU0VMRUNUX0xPKTsKLQkJZGV2LT5pcnEgPSBpdmVjID4+IChpIDw8IDIpICYgMHhGOworCQlyZWFsX2lycSA9IGl2ZWMgPj4gKGkgPDwgMikgJiAweEY7CiAJfSBlbHNlIGlmIChpID49IDQgJiYgaSA8IDgpIHsKIAkJaXZlYyA9IHJlYWR3KHBjaWMtPnBjaWNfcmVncytQQ0lfSU5UX1NFTEVDVF9ISSk7Ci0JCWRldi0+aXJxID0gaXZlYyA+PiAoKGktNCkgPDwgMikgJiAweEY7CisJCXJlYWxfaXJxID0gaXZlYyA+PiAoKGktNCkgPDwgMikgJiAweEY7CiAJfSBlbHNlIHsJCQkJCS8qIENvcnJ1cHRlZCBtYXAgKi8KIAkJcHJpbnRrKCJQQ0lDOiBCQUQgUElOICVkXG4iLCBpKTsgZm9yICg7Oykge30KIAl9CiAvKiBQMyAqLyAvKiBwcmludGsoIlBDSUM6IGRldmljZSAlcyBwaW4gJWQgaXZlYyAweCV4IGlycSAleFxuIiwgbmFtZWJ1ZiwgaSwgaXZlYywgZGV2LT5pcnEpOyAqLwogCi0JLyoKLQkgKiBkZXYtPmlycT0wIG1lYW5zIFBST00gZGlkIG5vdCBib3RoZXIgdG8gcHJvZ3JhbSB0aGUgdXBwZXIKKwkvKiByZWFsX2lycSBtZWFucyBQUk9NIGRpZCBub3QgYm90aGVyIHRvIHByb2dyYW0gdGhlIHVwcGVyCiAJICogaGFsZiBvZiBQQ0lDLiBUaGlzIGhhcHBlbnMgb24gSlMtRSB3aXRoIFBST00gMy4xMSwgZm9yIGluc3RhbmNlLgogCSAqLwotCWlmIChkZXYtPmlycSA9PSAwIHx8IHAtPmZvcmNlKSB7CisJaWYgKHJlYWxfaXJxID09IDAgfHwgcC0+Zm9yY2UpIHsKIAkJaWYgKHAtPmlycSA9PSAwIHx8IHAtPmlycSA+PSAxNSkgewkvKiBDb3JydXB0ZWQgbWFwICovCiAJCQlwcmludGsoIlBDSUM6IEJBRCBJUlEgJWRcbiIsIHAtPmlycSk7IGZvciAoOzspIHt9CiAJCX0KIAkJcHJpbnRrKCJQQ0lDOiBzZXR0aW5nIGlycSAlZCBhdCBwaW4gJWQgZm9yIGRldmljZSAlMDJ4OiUwMnhcbiIsCiAJCSAgICBwLT5pcnEsIHAtPnBpbiwgZGV2LT5idXMtPm51bWJlciwgZGV2LT5kZXZmbik7Ci0JCWRldi0+aXJxID0gcC0+aXJxOworCQlyZWFsX2lycSA9IHAtPmlycTsKIAogCQlpID0gcC0+cGluOwogCQlpZiAoaSA+PSA0KSB7CkBAIC01ODQsNyArNTg3LDggQEAKIAkJCWl2ZWMgfD0gcC0+aXJxIDw8IChpIDw8IDIpOwogCQkJd3JpdGV3KGl2ZWMsIHBjaWMtPnBjaWNfcmVncytQQ0lfSU5UX1NFTEVDVF9MTyk7CiAJCX0KLSAJfQorCX0KKwlkZXYtPmlycSA9IHBjaWNfYnVpbGRfZGV2aWNlX2lycShOVUxMLCByZWFsX2lycSk7CiB9CiAKIC8qCkBAIC03MjksNiArNzMzLDcgQEAKIAlzdHJ1Y3QgbGludXhfcGNpYyAqcGNpYyA9ICZwY2ljMDsKIAl1bnNpZ25lZCBsb25nIHY7CiAJaW50IHRpbWVyX2lycSwgaXJxOworCWludCBlcnI7CiAKIAlkb19hcmNoX2dldHRpbWVvZmZzZXQgPSBwY2lfZ2V0dGltZW9mZnNldDsKIApAQCAtNzQwLDkgKzc0NSwxMCBAQAogCXRpbWVyX2lycSA9IFBDSV9DT1VOVEVSX0lSUV9TWVModik7CiAJd3JpdGVsIChQQ0lfQ09VTlRFUl9JUlFfU0VUKHRpbWVyX2lycSwgMCksCiAJCXBjaWMtPnBjaWNfcmVncytQQ0lfQ09VTlRFUl9JUlEpOwotCWlycSA9IHJlcXVlc3RfaXJxKHRpbWVyX2lycSwgcGNpY190aW1lcl9oYW5kbGVyLAotCQkJICAoSVJRRl9ESVNBQkxFRCB8IFNBX1NUQVRJQ19BTExPQyksICJ0aW1lciIsIE5VTEwpOwotCWlmIChpcnEpIHsKKwlpcnEgPSBwY2ljX2J1aWxkX2RldmljZV9pcnEoTlVMTCwgdGltZXJfaXJxKTsKKwllcnIgPSByZXF1ZXN0X2lycShpcnEsIHBjaWNfdGltZXJfaGFuZGxlciwKKwkJCSAgSVJRRl9USU1FUiwgInRpbWVyIiwgTlVMTCk7CisJaWYgKGVycikgewogCQlwcm9tX3ByaW50ZigidGltZV9pbml0OiB1bmFibGUgdG8gYXR0YWNoIElSUSVkXG4iLCB0aW1lcl9pcnEpOwogCQlwcm9tX2hhbHQoKTsKIAl9CkBAIC04MDMsNTAgKzgwOSw3MyBAQAogCXJldHVybiAxIDw8IGlycV9ucjsKIH0KIAotc3RhdGljIHZvaWQgcGNpY19kaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxX25yKQorc3RhdGljIHZvaWQgcGNpY19tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7CiAJdW5zaWduZWQgbG9uZyBtYXNrLCBmbGFnczsKIAotCW1hc2sgPSBnZXRfaXJxbWFzayhpcnFfbnIpOworCW1hc2sgPSAodW5zaWduZWQgbG9uZylkYXRhLT5jaGlwX2RhdGE7CiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCXdyaXRlbChtYXNrLCBwY2ljMC5wY2ljX3JlZ3MrUENJX1NZU19JTlRfVEFSR0VUX01BU0tfU0VUKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIHBjaWNfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxX25yKQorc3RhdGljIHZvaWQgcGNpY191bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKIHsKIAl1bnNpZ25lZCBsb25nIG1hc2ssIGZsYWdzOwogCi0JbWFzayA9IGdldF9pcnFtYXNrKGlycV9ucik7CisJbWFzayA9ICh1bnNpZ25lZCBsb25nKWRhdGEtPmNoaXBfZGF0YTsKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJd3JpdGVsKG1hc2ssIHBjaWMwLnBjaWNfcmVncytQQ0lfU1lTX0lOVF9UQVJHRVRfTUFTS19DTEVBUik7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCitzdGF0aWMgdW5zaWduZWQgaW50IHBjaWNfc3RhcnR1cF9pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQoreworCWlycV9saW5rKGRhdGEtPmlycSk7CisJcGNpY191bm1hc2tfaXJxKGRhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHBjaWNfaXJxID0geworCS5uYW1lCQk9ICJwY2ljIiwKKwkuaXJxX3N0YXJ0dXAJPSBwY2ljX3N0YXJ0dXBfaXJxLAorCS5pcnFfbWFzawk9IHBjaWNfbWFza19pcnEsCisJLmlycV91bm1hc2sJPSBwY2ljX3VubWFza19pcnEsCit9OworCit1bnNpZ25lZCBpbnQgcGNpY19idWlsZF9kZXZpY2VfaXJxKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVhbF9pcnEpCit7CisJdW5zaWduZWQgaW50IGlycTsKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisKKwlpcnEgPSAwOworCW1hc2sgPSBnZXRfaXJxbWFzayhyZWFsX2lycSk7CisJaWYgKG1hc2sgPT0gMCkKKwkJZ290byBvdXQ7CisKKwlpcnEgPSBpcnFfYWxsb2MocmVhbF9pcnEsIHJlYWxfaXJxKTsKKwlpZiAoaXJxID09IDApCisJCWdvdG8gb3V0OworCisJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmcGNpY19pcnEsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlX2xldmVsX2lycSwgIlBDSUMiKTsKKwlpcnFfc2V0X2NoaXBfZGF0YShpcnEsICh2b2lkICopbWFzayk7CisKK291dDoKKwlyZXR1cm4gaXJxOworfQorCisKIHN0YXRpYyB2b2lkIHBjaWNfbG9hZF9wcm9maWxlX2lycShpbnQgY3B1LCB1bnNpZ25lZCBpbnQgbGltaXQpCiB7CiAJcHJpbnRrKCJQQ0lDOiB1bmltcGxlbWVudGVkIGNvZGU6IEZJTEU9JXMgTElORT0lZCIsIF9fRklMRV9fLCBfX0xJTkVfXyk7CiB9CiAKLS8qIFdlIGFzc3VtZSB0aGUgY2FsbGVyIGhhcyBkaXNhYmxlZCBsb2NhbCBpbnRlcnJ1cHRzIHdoZW4gdGhlc2UgYXJlIGNhbGxlZCwKLSAqIG9yIGVsc2UgdmVyeSBiaXphcnJlIGJlaGF2aW9yIHdpbGwgcmVzdWx0LgotICovCi1zdGF0aWMgdm9pZCBwY2ljX2Rpc2FibGVfcGlsX2lycSh1bnNpZ25lZCBpbnQgcGlsKQotewotCXdyaXRlbChnZXRfaXJxbWFzayhwaWwpLCBwY2ljMC5wY2ljX3JlZ3MrUENJX1NZU19JTlRfVEFSR0VUX01BU0tfU0VUKTsKLX0KLQotc3RhdGljIHZvaWQgcGNpY19lbmFibGVfcGlsX2lycSh1bnNpZ25lZCBpbnQgcGlsKQotewotCXdyaXRlbChnZXRfaXJxbWFzayhwaWwpLCBwY2ljMC5wY2ljX3JlZ3MrUENJX1NZU19JTlRfVEFSR0VUX01BU0tfQ0xFQVIpOwotfQotCiB2b2lkIF9faW5pdCBzdW40bV9wY2lfaW5pdF9JUlEodm9pZCkKIHsKLQlCVEZJWFVQU0VUX0NBTEwoZW5hYmxlX2lycSwgcGNpY19lbmFibGVfaXJxLCBCVEZJWFVQQ0FMTF9OT1JNKTsKLQlCVEZJWFVQU0VUX0NBTEwoZGlzYWJsZV9pcnEsIHBjaWNfZGlzYWJsZV9pcnEsIEJURklYVVBDQUxMX05PUk0pOwotCUJURklYVVBTRVRfQ0FMTChlbmFibGVfcGlsX2lycSwgcGNpY19lbmFibGVfcGlsX2lycSwgQlRGSVhVUENBTExfTk9STSk7Ci0JQlRGSVhVUFNFVF9DQUxMKGRpc2FibGVfcGlsX2lycSwgcGNpY19kaXNhYmxlX3BpbF9pcnEsIEJURklYVVBDQUxMX05PUk0pOworCXNwYXJjX2lycV9jb25maWcuYnVpbGRfZGV2aWNlX2lycSA9IHBjaWNfYnVpbGRfZGV2aWNlX2lycTsKKwogCUJURklYVVBTRVRfQ0FMTChjbGVhcl9jbG9ja19pcnEsIHBjaWNfY2xlYXJfY2xvY2tfaXJxLCBCVEZJWFVQQ0FMTF9OT1JNKTsKIAlCVEZJWFVQU0VUX0NBTEwobG9hZF9wcm9maWxlX2lycSwgcGNpY19sb2FkX3Byb2ZpbGVfaXJxLCBCVEZJWFVQQ0FMTF9OT1JNKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfZXZlbnQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfZXZlbnQuYwppbmRleCBlZTg0MjZlLi4yY2IwZTFjIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8YXNtL25taS5oPgogI2luY2x1ZGUgPGFzbS9wY3IuaD4KIAorI2luY2x1ZGUgImtlcm5lbC5oIgogI2luY2x1ZGUgImtzdGFjay5oIgogCiAvKiBTcGFyYzY0IGNoaXBzIGhhdmUgdHdvIHBlcmZvcm1hbmNlIGNvdW50ZXJzLCAzMi1iaXRzIGVhY2gsIHdpdGgKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3NfMzIuYyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3NfMzIuYwppbmRleCAxNzUyOTI5Li5jOGNjNDYxIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzMyLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc18zMi5jCkBAIC0xMjgsOCArMTI4LDE2IEBACiAgICAgICAgIHNldF90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOwogCS8qIGVuZGxlc3MgaWRsZSBsb29wIHdpdGggbm8gcHJpb3JpdHkgYXQgYWxsICovCiAJd2hpbGUoMSkgewotCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKQotCQkJY3B1X3JlbGF4KCk7CisjaWZkZWYgQ09ORklHX1NQQVJDX0xFT04KKwkJaWYgKHBtX2lkbGUpIHsKKwkJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpCisJCQkJKCpwbV9pZGxlKSgpOworCQl9IGVsc2UKKyNlbmRpZgorCQl7CisJCQl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKQorCQkJCWNwdV9yZWxheCgpOworCQl9CiAJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIAkJc2NoZWR1bGUoKTsKIAkJcHJlZW1wdF9kaXNhYmxlKCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tXzMyLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tXzMyLmMKaW5kZXggMDVmYjI1My4uNWNlM2QxNSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV8zMi5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb21fMzIuYwpAQCAtMzI2LDcgKzMyNiw2IEBACiAJCQlvZl9jb25zb2xlX29wdGlvbnMgPSBOVUxMOwogCX0KIAotCXByb21fcHJpbnRmKG1zZywgb2ZfY29uc29sZV9wYXRoKTsKIAlwcmludGsobXNnLCBvZl9jb25zb2xlX3BhdGgpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cF8zMi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXBfMzIuYwppbmRleCA3YjhiNzZjLi4zNjA5YmRlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cF8zMi5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NldHVwXzMyLmMKQEAgLTEwMywxNiArMTAzLDIwIEBACiAvKiBFeHBvcnRlZCBmb3IgbW0vaW5pdC5jOnBhZ2luZ19pbml0LiAqLwogdW5zaWduZWQgbG9uZyBjbWRsaW5lX21lbW9yeV9zaXplIF9faW5pdGRhdGEgPSAwOwogCisvKiB3aGljaCBDUFUgYm9vdGVkIHVzICgweGZmID0gbm90IHNldCkgKi8KK3Vuc2lnbmVkIGNoYXIgYm9vdF9jcHVfaWQgPSAweGZmOyAvKiAweGZmIHdpbGwgbWFrZSBpdCBpbnRvIERBVEEgc2VjdGlvbi4uLiAqLwordW5zaWduZWQgY2hhciBib290X2NwdV9pZDQ7IC8qIGJvb3RfY3B1X2lkIDw8IDIgKi8KKwogc3RhdGljIHZvaWQKIHByb21fY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY29uLCBjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBuKQogewogCXByb21fd3JpdGUocywgbik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY29uc29sZSBwcm9tX2RlYnVnX2NvbnNvbGUgPSB7Ci0JLm5hbWUgPQkJImRlYnVnIiwKK3N0YXRpYyBzdHJ1Y3QgY29uc29sZSBwcm9tX2Vhcmx5X2NvbnNvbGUgPSB7CisJLm5hbWUgPQkJImVhcmx5cHJvbSIsCiAJLndyaXRlID0JcHJvbV9jb25zb2xlX3dyaXRlLAotCS5mbGFncyA9CUNPTl9QUklOVEJVRkZFUiwKKwkuZmxhZ3MgPQlDT05fUFJJTlRCVUZGRVIgfCBDT05fQk9PVCwKIAkuaW5kZXggPQktMSwKIH07CiAKQEAgLTEzMyw4ICsxMzcsNyBAQAogCQlwcm9tX2hhbHQoKTsKIAkJYnJlYWs7CiAJY2FzZSAncCc6Ci0JCS8qIFVzZSBQUk9NIGRlYnVnIGNvbnNvbGUuICovCi0JCXJlZ2lzdGVyX2NvbnNvbGUoJnByb21fZGVidWdfY29uc29sZSk7CisJCS8qIEp1c3QgaWdub3JlLCB0aGlzIGJlaGF2aW9yIGlzIG5vdyB0aGUgZGVmYXVsdC4gICovCiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50aygiVW5rbm93biBib290IHN3aXRjaCAoLSVjKVxuIiwgYyk7CkBAIC0yMTUsNiArMjE4LDEwIEBACiAJc3RyY3B5KGJvb3RfY29tbWFuZF9saW5lLCAqY21kbGluZV9wKTsKIAlwYXJzZV9lYXJseV9wYXJhbSgpOwogCisJYm9vdF9mbGFnc19pbml0KCpjbWRsaW5lX3ApOworCisJcmVnaXN0ZXJfY29uc29sZSgmcHJvbV9lYXJseV9jb25zb2xlKTsKKwogCS8qIFNldCBzcGFyY19jcHVfbW9kZWwgKi8KIAlzcGFyY19jcHVfbW9kZWwgPSBzdW5fdW5rbm93bjsKIAlpZiAoIXN0cmNtcCgmY3B1dHlwdmFsWzBdLCAic3VuNCAiKSkKQEAgLTI2NSw3ICsyNzIsNiBAQAogI2lmZGVmIENPTkZJR19EVU1NWV9DT05TT0xFCiAJY29uc3dpdGNocCA9ICZkdW1teV9jb247CiAjZW5kaWYKLQlib290X2ZsYWdzX2luaXQoKmNtZGxpbmVfcCk7CiAKIAlpZHByb21faW5pdCgpOwogCWlmIChBUkNIX1NVTjRDKQpAQCAtMzExLDc1ICszMTcsNiBAQAogCXNtcF9zZXR1cF9jcHVfcG9zc2libGVfbWFwKCk7CiB9CiAKLXN0YXRpYyBpbnQgbmNwdXNfcHJvYmVkOwotCi1zdGF0aWMgaW50IHNob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKl9fdW51c2VkKQotewotCXNlcV9wcmludGYobSwKLQkJICAgImNwdVx0XHQ6ICVzXG4iCi0JCSAgICJmcHVcdFx0OiAlc1xuIgotCQkgICAicHJvbWxpYlx0XHQ6IFZlcnNpb24gJWQgUmV2aXNpb24gJWRcbiIKLQkJICAgInByb21cdFx0OiAlZC4lZFxuIgotCQkgICAidHlwZVx0XHQ6ICVzXG4iCi0JCSAgICJuY3B1cyBwcm9iZWRcdDogJWRcbiIKLQkJICAgIm5jcHVzIGFjdGl2ZVx0OiAlZFxuIgotI2lmbmRlZiBDT05GSUdfU01QCi0JCSAgICJDUFUwQm9nb1x0OiAlbHUuJTAybHVcbiIKLQkJICAgIkNQVTBDbGtUY2tcdDogJWxkXG4iCi0jZW5kaWYKLQkJICAgLAotCQkgICBzcGFyY19jcHVfdHlwZSwKLQkJICAgc3BhcmNfZnB1X3R5cGUgLAotCQkgICByb212ZWMtPnB2X3JvbXZlcnMsCi0JCSAgIHByb21fcmV2LAotCQkgICByb212ZWMtPnB2X3ByaW50cmV2ID4+IDE2LAotCQkgICByb212ZWMtPnB2X3ByaW50cmV2ICYgMHhmZmZmLAotCQkgICAmY3B1dHlwdmFsWzBdLAotCQkgICBuY3B1c19wcm9iZWQsCi0JCSAgIG51bV9vbmxpbmVfY3B1cygpCi0jaWZuZGVmIENPTkZJR19TTVAKLQkJICAgLCBjcHVfZGF0YSgwKS51ZGVsYXlfdmFsLyg1MDAwMDAvSFopLAotCQkgICAoY3B1X2RhdGEoMCkudWRlbGF5X3ZhbC8oNTAwMC9IWikpICUgMTAwLAotCQkgICBjcHVfZGF0YSgwKS5jbG9ja190aWNrCi0jZW5kaWYKLQkJKTsKLQotI2lmZGVmIENPTkZJR19TTVAKLQlzbXBfYm9nbyhtKTsKLSNlbmRpZgotCW1tdV9pbmZvKG0pOwotI2lmZGVmIENPTkZJR19TTVAKLQlzbXBfaW5mbyhtKTsKLSNlbmRpZgotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCAqY19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQotewotCS8qIFRoZSBwb2ludGVyIHdlIGFyZSByZXR1cm5pbmcgaXMgYXJiaXRyYXJ5LAotCSAqIGl0IGp1c3QgaGFzIHRvIGJlIG5vbi1OVUxMIGFuZCBub3QgSVNfRVJSCi0JICogaW4gdGhlIHN1Y2Nlc3MgY2FzZS4KLQkgKi8KLQlyZXR1cm4gKnBvcyA9PSAwID8gJmNfc3RhcnQgOiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCAqY19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCi17Ci0JKysqcG9zOwotCXJldHVybiBjX3N0YXJ0KG0sIHBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCi17Ci19Ci0KLWNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBjcHVpbmZvX29wID0gewotCS5zdGFydCA9Y19zdGFydCwKLQkubmV4dCA9CWNfbmV4dCwKLQkuc3RvcCA9CWNfc3RvcCwKLQkuc2hvdyA9CXNob3dfY3B1aW5mbywKLX07Ci0KIGV4dGVybiBpbnQgc3RvcF9hX2VuYWJsZWQ7CiAKIHZvaWQgc3VuX2RvX2JyZWFrKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cF82NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXBfNjQuYwppbmRleCAyOWJhZmUwLi5mM2I2ODUwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cF82NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NldHVwXzY0LmMKQEAgLTMzOSw4NCArMzM5LDYgQEAKIAlwYWdpbmdfaW5pdCgpOwogfQogCi0vKiBCVUZGRVIgaXMgUEFHRV9TSVpFIGJ5dGVzIGxvbmcuICovCi0KLWV4dGVybiB2b2lkIHNtcF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqKTsKLWV4dGVybiB2b2lkIHNtcF9ib2dvKHN0cnVjdCBzZXFfZmlsZSAqKTsKLWV4dGVybiB2b2lkIG1tdV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqKTsKLQotdW5zaWduZWQgaW50IGRjYWNoZV9wYXJpdHlfdGwxX29jY3VycmVkOwotdW5zaWduZWQgaW50IGljYWNoZV9wYXJpdHlfdGwxX29jY3VycmVkOwotCi1pbnQgbmNwdXNfcHJvYmVkOwotCi1zdGF0aWMgaW50IHNob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKl9fdW51c2VkKQotewotCXNlcV9wcmludGYobSwgCi0JCSAgICJjcHVcdFx0OiAlc1xuIgotCQkgICAiZnB1XHRcdDogJXNcbiIKLQkJICAgInBtdVx0XHQ6ICVzXG4iCi0JCSAgICJwcm9tXHRcdDogJXNcbiIKLQkJICAgInR5cGVcdFx0OiAlc1xuIgotCQkgICAibmNwdXMgcHJvYmVkXHQ6ICVkXG4iCi0JCSAgICJuY3B1cyBhY3RpdmVcdDogJWRcbiIKLQkJICAgIkQkIHBhcml0eSB0bDFcdDogJXVcbiIKLQkJICAgIkkkIHBhcml0eSB0bDFcdDogJXVcbiIKLSNpZm5kZWYgQ09ORklHX1NNUAotCQkgICAiQ3B1MENsa1Rja1x0OiAlMDE2bHhcbiIKLSNlbmRpZgotCQkgICAsCi0JCSAgIHNwYXJjX2NwdV90eXBlLAotCQkgICBzcGFyY19mcHVfdHlwZSwKLQkJICAgc3BhcmNfcG11X3R5cGUsCi0JCSAgIHByb21fdmVyc2lvbiwKLQkJICAgKCh0bGJfdHlwZSA9PSBoeXBlcnZpc29yKSA/Ci0JCSAgICAic3VuNHYiIDoKLQkJICAgICJzdW40dSIpLAotCQkgICBuY3B1c19wcm9iZWQsCi0JCSAgIG51bV9vbmxpbmVfY3B1cygpLAotCQkgICBkY2FjaGVfcGFyaXR5X3RsMV9vY2N1cnJlZCwKLQkJICAgaWNhY2hlX3Bhcml0eV90bDFfb2NjdXJyZWQKLSNpZm5kZWYgQ09ORklHX1NNUAotCQkgICAsIGNwdV9kYXRhKDApLmNsb2NrX3RpY2sKLSNlbmRpZgotCQkpOwotI2lmZGVmIENPTkZJR19TTVAKLQlzbXBfYm9nbyhtKTsKLSNlbmRpZgotCW1tdV9pbmZvKG0pOwotI2lmZGVmIENPTkZJR19TTVAKLQlzbXBfaW5mbyhtKTsKLSNlbmRpZgotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCAqY19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQotewotCS8qIFRoZSBwb2ludGVyIHdlIGFyZSByZXR1cm5pbmcgaXMgYXJiaXRyYXJ5LAotCSAqIGl0IGp1c3QgaGFzIHRvIGJlIG5vbi1OVUxMIGFuZCBub3QgSVNfRVJSCi0JICogaW4gdGhlIHN1Y2Nlc3MgY2FzZS4KLQkgKi8KLQlyZXR1cm4gKnBvcyA9PSAwID8gJmNfc3RhcnQgOiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCAqY19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCi17Ci0JKysqcG9zOwotCXJldHVybiBjX3N0YXJ0KG0sIHBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCi17Ci19Ci0KLWNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBjcHVpbmZvX29wID0gewotCS5zdGFydCA9Y19zdGFydCwKLQkubmV4dCA9CWNfbmV4dCwKLQkuc3RvcCA9CWNfc3RvcCwKLQkuc2hvdyA9CXNob3dfY3B1aW5mbywKLX07Ci0KIGV4dGVybiBpbnQgc3RvcF9hX2VuYWJsZWQ7CiAKIHZvaWQgc3VuX2RvX2JyZWFrKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfMzIuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NtcF8zMi5jCmluZGV4IDQ0MjI4NmQuLmQ1YjM5NTggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3NtcF8zMi5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NtcF8zMi5jCkBAIC0zNyw4ICszNyw2IEBACiAjaW5jbHVkZSAiaXJxLmgiCiAKIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgY3B1X2NhbGxpbl9tYXBbTlJfQ1BVU10gX19jcHVpbml0ZGF0YSA9IHswLH07Ci11bnNpZ25lZCBjaGFyIGJvb3RfY3B1X2lkID0gMDsKLXVuc2lnbmVkIGNoYXIgYm9vdF9jcHVfaWQ0ID0gMDsgLyogYm9vdF9jcHVfaWQgPDwgMiAqLwogCiBjcHVtYXNrX3Qgc21wX2NvbW1lbmNlZF9tYXNrID0gQ1BVX01BU0tfTk9ORTsKIApAQCAtMTMwLDE0ICsxMjgsNTcgQEAKIHZvaWQgc21wX3NlbmRfcmVzY2hlZHVsZShpbnQgY3B1KQogewogCS8qCi0JICogWFhYIG1pc3NpbmcgcmVzY2hlZHVsZSBJUEksIHNlZSBzY2hlZHVsZXJfaXBpKCkKKwkgKiBDUFUgbW9kZWwgZGVwZW5kZW50IHdheSBvZiBpbXBsZW1lbnRpbmcgSVBJIGdlbmVyYXRpb24gdGFyZ2V0aW5nCisJICogYSBzaW5nbGUgQ1BVLiBUaGUgdHJhcCBoYW5kbGVyIG5lZWRzIG9ubHkgdG8gZG8gdHJhcCBlbnRyeS9yZXR1cm4KKwkgKiB0byBjYWxsIHNjaGVkdWxlLgogCSAqLworCUJURklYVVBfQ0FMTChzbXBfaXBpX3Jlc2NoZWQpKGNwdSk7CiB9CiAKIHZvaWQgc21wX3NlbmRfc3RvcCh2b2lkKQogewogfQogCit2b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pcGkoaW50IGNwdSkKK3sKKwkvKiB0cmlnZ2VyIG9uZSBJUEkgc2luZ2xlIGNhbGwgb24gb25lIENQVSAqLworCUJURklYVVBfQ0FMTChzbXBfaXBpX3NpbmdsZSkoY3B1KTsKK30KKwordm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGlfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKK3sKKwlpbnQgY3B1OworCisJLyogdHJpZ2dlciBJUEkgbWFzayBjYWxsIG9uIGVhY2ggQ1BVICovCisJZm9yX2VhY2hfY3B1KGNwdSwgbWFzaykKKwkJQlRGSVhVUF9DQUxMKHNtcF9pcGlfbWFza19vbmUpKGNwdSk7Cit9CisKK3ZvaWQgc21wX3Jlc2NoZWRfaW50ZXJydXB0KHZvaWQpCit7CisJaXJxX2VudGVyKCk7CisJc2NoZWR1bGVyX2lwaSgpOworCWxvY2FsX2NwdV9kYXRhKCkuaXJxX3Jlc2NoZWRfY291bnQrKzsKKwlpcnFfZXhpdCgpOworCS8qIHJlLXNjaGVkdWxlIHJvdXRpbmUgY2FsbGVkIGJ5IGludGVycnVwdCByZXR1cm4gY29kZS4gKi8KK30KKwordm9pZCBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaW50ZXJydXB0KHZvaWQpCit7CisJaXJxX2VudGVyKCk7CisJZ2VuZXJpY19zbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaW50ZXJydXB0KCk7CisJbG9jYWxfY3B1X2RhdGEoKS5pcnFfY2FsbF9jb3VudCsrOworCWlycV9leGl0KCk7Cit9CisKK3ZvaWQgc21wX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KHZvaWQpCit7CisJaXJxX2VudGVyKCk7CisJZ2VuZXJpY19zbXBfY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQoKTsKKwlsb2NhbF9jcHVfZGF0YSgpLmlycV9jYWxsX2NvdW50Kys7CisJaXJxX2V4aXQoKTsKK30KKwogdm9pZCBzbXBfZmx1c2hfY2FjaGVfYWxsKHZvaWQpCiB7CiAJeGMwKChzbXBmdW5jX3QpIEJURklYVVBfQ0FMTChsb2NhbF9mbHVzaF9jYWNoZV9hbGwpKTsKQEAgLTE1Myw5ICsxOTQsMTAgQEAKIHZvaWQgc21wX2ZsdXNoX2NhY2hlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewogCWlmKG1tLT5jb250ZXh0ICE9IE5PX0NPTlRFWFQpIHsKLQkJY3B1bWFza190IGNwdV9tYXNrID0gKm1tX2NwdW1hc2sobW0pOwotCQljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfbWFzayk7Ci0JCWlmICghY3B1c19lbXB0eShjcHVfbWFzaykpCisJCWNwdW1hc2tfdCBjcHVfbWFzazsKKwkJY3B1bWFza19jb3B5KCZjcHVfbWFzaywgbW1fY3B1bWFzayhtbSkpOworCQljcHVtYXNrX2NsZWFyX2NwdShzbXBfcHJvY2Vzc29yX2lkKCksICZjcHVfbWFzayk7CisJCWlmICghY3B1bWFza19lbXB0eSgmY3B1X21hc2spKQogCQkJeGMxKChzbXBmdW5jX3QpIEJURklYVVBfQ0FMTChsb2NhbF9mbHVzaF9jYWNoZV9tbSksICh1bnNpZ25lZCBsb25nKSBtbSk7CiAJCWxvY2FsX2ZsdXNoX2NhY2hlX21tKG1tKTsKIAl9CkBAIC0xNjQsOSArMjA2LDEwIEBACiB2b2lkIHNtcF9mbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiAJaWYobW0tPmNvbnRleHQgIT0gTk9fQ09OVEVYVCkgewotCQljcHVtYXNrX3QgY3B1X21hc2sgPSAqbW1fY3B1bWFzayhtbSk7Ci0JCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9tYXNrKTsKLQkJaWYgKCFjcHVzX2VtcHR5KGNwdV9tYXNrKSkgeworCQljcHVtYXNrX3QgY3B1X21hc2s7CisJCWNwdW1hc2tfY29weSgmY3B1X21hc2ssIG1tX2NwdW1hc2sobW0pKTsKKwkJY3B1bWFza19jbGVhcl9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpLCAmY3B1X21hc2spOworCQlpZiAoIWNwdW1hc2tfZW1wdHkoJmNwdV9tYXNrKSkgewogCQkJeGMxKChzbXBmdW5jX3QpIEJURklYVVBfQ0FMTChsb2NhbF9mbHVzaF90bGJfbW0pLCAodW5zaWduZWQgbG9uZykgbW0pOwogCQkJaWYoYXRvbWljX3JlYWQoJm1tLT5tbV91c2VycykgPT0gMSAmJiBjdXJyZW50LT5hY3RpdmVfbW0gPT0gbW0pCiAJCQkJY3B1bWFza19jb3B5KG1tX2NwdW1hc2sobW0pLApAQCAtMTgyLDkgKzIyNSwxMCBAQAogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKIAogCWlmIChtbS0+Y29udGV4dCAhPSBOT19DT05URVhUKSB7Ci0JCWNwdW1hc2tfdCBjcHVfbWFzayA9ICptbV9jcHVtYXNrKG1tKTsKLQkJY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X21hc2spOwotCQlpZiAoIWNwdXNfZW1wdHkoY3B1X21hc2spKQorCQljcHVtYXNrX3QgY3B1X21hc2s7CisJCWNwdW1hc2tfY29weSgmY3B1X21hc2ssIG1tX2NwdW1hc2sobW0pKTsKKwkJY3B1bWFza19jbGVhcl9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpLCAmY3B1X21hc2spOworCQlpZiAoIWNwdW1hc2tfZW1wdHkoJmNwdV9tYXNrKSkKIAkJCXhjMygoc21wZnVuY190KSBCVEZJWFVQX0NBTEwobG9jYWxfZmx1c2hfY2FjaGVfcmFuZ2UpLCAodW5zaWduZWQgbG9uZykgdm1hLCBzdGFydCwgZW5kKTsKIAkJbG9jYWxfZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKTsKIAl9CkBAIC0xOTYsOSArMjQwLDEwIEBACiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOwogCiAJaWYgKG1tLT5jb250ZXh0ICE9IE5PX0NPTlRFWFQpIHsKLQkJY3B1bWFza190IGNwdV9tYXNrID0gKm1tX2NwdW1hc2sobW0pOwotCQljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfbWFzayk7Ci0JCWlmICghY3B1c19lbXB0eShjcHVfbWFzaykpCisJCWNwdW1hc2tfdCBjcHVfbWFzazsKKwkJY3B1bWFza19jb3B5KCZjcHVfbWFzaywgbW1fY3B1bWFzayhtbSkpOworCQljcHVtYXNrX2NsZWFyX2NwdShzbXBfcHJvY2Vzc29yX2lkKCksICZjcHVfbWFzayk7CisJCWlmICghY3B1bWFza19lbXB0eSgmY3B1X21hc2spKQogCQkJeGMzKChzbXBmdW5jX3QpIEJURklYVVBfQ0FMTChsb2NhbF9mbHVzaF90bGJfcmFuZ2UpLCAodW5zaWduZWQgbG9uZykgdm1hLCBzdGFydCwgZW5kKTsKIAkJbG9jYWxfZmx1c2hfdGxiX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCk7CiAJfQpAQCAtMjA5LDkgKzI1NCwxMCBAQAogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKIAogCWlmKG1tLT5jb250ZXh0ICE9IE5PX0NPTlRFWFQpIHsKLQkJY3B1bWFza190IGNwdV9tYXNrID0gKm1tX2NwdW1hc2sobW0pOwotCQljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfbWFzayk7Ci0JCWlmICghY3B1c19lbXB0eShjcHVfbWFzaykpCisJCWNwdW1hc2tfdCBjcHVfbWFzazsKKwkJY3B1bWFza19jb3B5KCZjcHVfbWFzaywgbW1fY3B1bWFzayhtbSkpOworCQljcHVtYXNrX2NsZWFyX2NwdShzbXBfcHJvY2Vzc29yX2lkKCksICZjcHVfbWFzayk7CisJCWlmICghY3B1bWFza19lbXB0eSgmY3B1X21hc2spKQogCQkJeGMyKChzbXBmdW5jX3QpIEJURklYVVBfQ0FMTChsb2NhbF9mbHVzaF9jYWNoZV9wYWdlKSwgKHVuc2lnbmVkIGxvbmcpIHZtYSwgcGFnZSk7CiAJCWxvY2FsX2ZsdXNoX2NhY2hlX3BhZ2Uodm1hLCBwYWdlKTsKIAl9CkBAIC0yMjIsMTkgKzI2OCwxNSBAQAogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKIAogCWlmKG1tLT5jb250ZXh0ICE9IE5PX0NPTlRFWFQpIHsKLQkJY3B1bWFza190IGNwdV9tYXNrID0gKm1tX2NwdW1hc2sobW0pOwotCQljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfbWFzayk7Ci0JCWlmICghY3B1c19lbXB0eShjcHVfbWFzaykpCisJCWNwdW1hc2tfdCBjcHVfbWFzazsKKwkJY3B1bWFza19jb3B5KCZjcHVfbWFzaywgbW1fY3B1bWFzayhtbSkpOworCQljcHVtYXNrX2NsZWFyX2NwdShzbXBfcHJvY2Vzc29yX2lkKCksICZjcHVfbWFzayk7CisJCWlmICghY3B1bWFza19lbXB0eSgmY3B1X21hc2spKQogCQkJeGMyKChzbXBmdW5jX3QpIEJURklYVVBfQ0FMTChsb2NhbF9mbHVzaF90bGJfcGFnZSksICh1bnNpZ25lZCBsb25nKSB2bWEsIHBhZ2UpOwogCQlsb2NhbF9mbHVzaF90bGJfcGFnZSh2bWEsIHBhZ2UpOwogCX0KIH0KIAotdm9pZCBzbXBfcmVzY2hlZHVsZV9pcnEodm9pZCkKLXsKLQlzZXRfbmVlZF9yZXNjaGVkKCk7Ci19Ci0KIHZvaWQgc21wX2ZsdXNoX3BhZ2VfdG9fcmFtKHVuc2lnbmVkIGxvbmcgcGFnZSkKIHsKIAkvKiBDdXJyZW50IHRoZW9yeSBpcyB0aGF0IHRob3NlIHdobyBjYWxsIHRoaXMgYXJlIHRoZSBvbmUncwpAQCAtMjUxLDkgKzI5MywxMCBAQAogCiB2b2lkIHNtcF9mbHVzaF9zaWdfaW5zbnMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgaW5zbl9hZGRyKQogewotCWNwdW1hc2tfdCBjcHVfbWFzayA9ICptbV9jcHVtYXNrKG1tKTsKLQljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfbWFzayk7Ci0JaWYgKCFjcHVzX2VtcHR5KGNwdV9tYXNrKSkKKwljcHVtYXNrX3QgY3B1X21hc2s7CisJY3B1bWFza19jb3B5KCZjcHVfbWFzaywgbW1fY3B1bWFzayhtbSkpOworCWNwdW1hc2tfY2xlYXJfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwgJmNwdV9tYXNrKTsKKwlpZiAoIWNwdW1hc2tfZW1wdHkoJmNwdV9tYXNrKSkKIAkJeGMyKChzbXBmdW5jX3QpIEJURklYVVBfQ0FMTChsb2NhbF9mbHVzaF9zaWdfaW5zbnMpLCAodW5zaWduZWQgbG9uZykgbW0sIGluc25fYWRkcik7CiAJbG9jYWxfZmx1c2hfc2lnX2luc25zKG1tLCBpbnNuX2FkZHIpOwogfQpAQCAtNDA3LDcgKzQ1MCw3IEBACiAJfTsKIAogCWlmICghcmV0KSB7Ci0JCWNwdV9zZXQoY3B1LCBzbXBfY29tbWVuY2VkX21hc2spOworCQljcHVtYXNrX3NldF9jcHUoY3B1LCAmc21wX2NvbW1lbmNlZF9tYXNrKTsKIAkJd2hpbGUgKCFjcHVfb25saW5lKGNwdSkpCiAJCQltYigpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3NtcF82NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMKaW5kZXggOTQ3OGRhNy4uOTljYjE3MiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMKQEAgLTEyMSwxMSArMTIxLDExIEBACiAJLyogaW5mb3JtIHRoZSBub3RpZmllcnMgYWJvdXQgdGhlIG5ldyBjcHUgKi8KIAlub3RpZnlfY3B1X3N0YXJ0aW5nKGNwdWlkKTsKIAotCXdoaWxlICghY3B1X2lzc2V0KGNwdWlkLCBzbXBfY29tbWVuY2VkX21hc2spKQorCXdoaWxlICghY3B1bWFza190ZXN0X2NwdShjcHVpZCwgJnNtcF9jb21tZW5jZWRfbWFzaykpCiAJCXJtYigpOwogCiAJaXBpX2NhbGxfbG9ja19pcnEoKTsKLQljcHVfc2V0KGNwdWlkLCBjcHVfb25saW5lX21hcCk7CisJc2V0X2NwdV9vbmxpbmUoY3B1aWQsIHRydWUpOwogCWlwaV9jYWxsX3VubG9ja19pcnEoKTsKIAogCS8qIGlkbGUgdGhyZWFkIGlzIGV4cGVjdGVkIHRvIGhhdmUgcHJlZW1wdCBkaXNhYmxlZCAqLwpAQCAtNzg1LDcgKzc4NSw3IEBACiAKIC8qIFNlbmQgY3Jvc3MgY2FsbCB0byBhbGwgcHJvY2Vzc29ycyBtZW50aW9uZWQgaW4gTUFTS19QCiAgKiBleGNlcHQgc2VsZi4gIFJlYWxseSwgdGhlcmUgYXJlIG9ubHkgdHdvIGNhc2VzIGN1cnJlbnRseSwKLSAqICImY3B1X29ubGluZV9tYXAiIGFuZCAiJm1tLT5jcHVfdm1fbWFzayIuCisgKiAiY3B1X29ubGluZV9tYXNrIiBhbmQgIm1tX2NwdW1hc2sobW0pIi4KICAqLwogc3RhdGljIHZvaWQgc21wX2Nyb3NzX2NhbGxfbWFza2VkKHVuc2lnbmVkIGxvbmcgKmZ1bmMsIHUzMiBjdHgsIHU2NCBkYXRhMSwgdTY0IGRhdGEyLCBjb25zdCBjcHVtYXNrX3QgKm1hc2spCiB7CkBAIC03OTcsNyArNzk3LDcgQEAKIC8qIFNlbmQgY3Jvc3MgY2FsbCB0byBhbGwgcHJvY2Vzc29ycyBleGNlcHQgc2VsZi4gKi8KIHN0YXRpYyB2b2lkIHNtcF9jcm9zc19jYWxsKHVuc2lnbmVkIGxvbmcgKmZ1bmMsIHUzMiBjdHgsIHU2NCBkYXRhMSwgdTY0IGRhdGEyKQogewotCXNtcF9jcm9zc19jYWxsX21hc2tlZChmdW5jLCBjdHgsIGRhdGExLCBkYXRhMiwgJmNwdV9vbmxpbmVfbWFwKTsKKwlzbXBfY3Jvc3NfY2FsbF9tYXNrZWQoZnVuYywgY3R4LCBkYXRhMSwgZGF0YTIsIGNwdV9vbmxpbmVfbWFzayk7CiB9CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHhjYWxsX3N5bmNfdGljazsKQEAgLTgwNSw3ICs4MDUsNyBAQAogc3RhdGljIHZvaWQgc21wX3N0YXJ0X3N5bmNfdGlja19jbGllbnQoaW50IGNwdSkKIHsKIAl4Y2FsbF9kZWxpdmVyKCh1NjQpICZ4Y2FsbF9zeW5jX3RpY2ssIDAsIDAsCi0JCSAgICAgICZjcHVtYXNrX29mX2NwdShjcHUpKTsKKwkJICAgICAgY3B1bWFza19vZihjcHUpKTsKIH0KIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgeGNhbGxfY2FsbF9mdW5jdGlvbjsKQEAgLTgyMCw3ICs4MjAsNyBAQAogdm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaXBpKGludCBjcHUpCiB7CiAJeGNhbGxfZGVsaXZlcigodTY0KSAmeGNhbGxfY2FsbF9mdW5jdGlvbl9zaW5nbGUsIDAsIDAsCi0JCSAgICAgICZjcHVtYXNrX29mX2NwdShjcHUpKTsKKwkJICAgICAgY3B1bWFza19vZihjcHUpKTsKIH0KIAogdm9pZCBfX2lycV9lbnRyeSBzbXBfY2FsbF9mdW5jdGlvbl9jbGllbnQoaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCkBAIC05MTgsNyArOTE4LDcgQEAKIAkJfQogCQlpZiAoZGF0YTApIHsKIAkJCXhjYWxsX2RlbGl2ZXIoZGF0YTAsIF9fcGEocGdfYWRkciksCi0JCQkJICAgICAgKHU2NCkgcGdfYWRkciwgJmNwdW1hc2tfb2ZfY3B1KGNwdSkpOworCQkJCSAgICAgICh1NjQpIHBnX2FkZHIsIGNwdW1hc2tfb2YoY3B1KSk7CiAjaWZkZWYgQ09ORklHX0RFQlVHX0RDRkxVU0gKIAkJCWF0b21pY19pbmMoJmRjcGFnZV9mbHVzaGVzX3hjYWxsKTsKICNlbmRpZgpAQCAtOTU0LDcgKzk1NCw3IEBACiAJfQogCWlmIChkYXRhMCkgewogCQl4Y2FsbF9kZWxpdmVyKGRhdGEwLCBfX3BhKHBnX2FkZHIpLAotCQkJICAgICAgKHU2NCkgcGdfYWRkciwgJmNwdV9vbmxpbmVfbWFwKTsKKwkJCSAgICAgICh1NjQpIHBnX2FkZHIsIGNwdV9vbmxpbmVfbWFzayk7CiAjaWZkZWYgQ09ORklHX0RFQlVHX0RDRkxVU0gKIAkJYXRvbWljX2luYygmZGNwYWdlX2ZsdXNoZXNfeGNhbGwpOwogI2VuZGlmCkBAIC0xMTk3LDMyICsxMTk3LDMyIEBACiAJZm9yX2VhY2hfcHJlc2VudF9jcHUoaSkgewogCQl1bnNpZ25lZCBpbnQgajsKIAotCQljcHVzX2NsZWFyKGNwdV9jb3JlX21hcFtpXSk7CisJCWNwdW1hc2tfY2xlYXIoJmNwdV9jb3JlX21hcFtpXSk7CiAJCWlmIChjcHVfZGF0YShpKS5jb3JlX2lkID09IDApIHsKLQkJCWNwdV9zZXQoaSwgY3B1X2NvcmVfbWFwW2ldKTsKKwkJCWNwdW1hc2tfc2V0X2NwdShpLCAmY3B1X2NvcmVfbWFwW2ldKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJZm9yX2VhY2hfcHJlc2VudF9jcHUoaikgewogCQkJaWYgKGNwdV9kYXRhKGkpLmNvcmVfaWQgPT0KIAkJCSAgICBjcHVfZGF0YShqKS5jb3JlX2lkKQotCQkJCWNwdV9zZXQoaiwgY3B1X2NvcmVfbWFwW2ldKTsKKwkJCQljcHVtYXNrX3NldF9jcHUoaiwgJmNwdV9jb3JlX21hcFtpXSk7CiAJCX0KIAl9CiAKIAlmb3JfZWFjaF9wcmVzZW50X2NwdShpKSB7CiAJCXVuc2lnbmVkIGludCBqOwogCi0JCWNwdXNfY2xlYXIocGVyX2NwdShjcHVfc2libGluZ19tYXAsIGkpKTsKKwkJY3B1bWFza19jbGVhcigmcGVyX2NwdShjcHVfc2libGluZ19tYXAsIGkpKTsKIAkJaWYgKGNwdV9kYXRhKGkpLnByb2NfaWQgPT0gLTEpIHsKLQkJCWNwdV9zZXQoaSwgcGVyX2NwdShjcHVfc2libGluZ19tYXAsIGkpKTsKKwkJCWNwdW1hc2tfc2V0X2NwdShpLCAmcGVyX2NwdShjcHVfc2libGluZ19tYXAsIGkpKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJZm9yX2VhY2hfcHJlc2VudF9jcHUoaikgewogCQkJaWYgKGNwdV9kYXRhKGkpLnByb2NfaWQgPT0KIAkJCSAgICBjcHVfZGF0YShqKS5wcm9jX2lkKQotCQkJCWNwdV9zZXQoaiwgcGVyX2NwdShjcHVfc2libGluZ19tYXAsIGkpKTsKKwkJCQljcHVtYXNrX3NldF9jcHUoaiwgJnBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBpKSk7CiAJCX0KIAl9CiB9CkBAIC0xMjMyLDEwICsxMjMyLDEwIEBACiAJaW50IHJldCA9IHNtcF9ib290X29uZV9jcHUoY3B1KTsKIAogCWlmICghcmV0KSB7Ci0JCWNwdV9zZXQoY3B1LCBzbXBfY29tbWVuY2VkX21hc2spOwotCQl3aGlsZSAoIWNwdV9pc3NldChjcHUsIGNwdV9vbmxpbmVfbWFwKSkKKwkJY3B1bWFza19zZXRfY3B1KGNwdSwgJnNtcF9jb21tZW5jZWRfbWFzayk7CisJCXdoaWxlICghY3B1X29ubGluZShjcHUpKQogCQkJbWIoKTsKLQkJaWYgKCFjcHVfaXNzZXQoY3B1LCBjcHVfb25saW5lX21hcCkpIHsKKwkJaWYgKCFjcHVfb25saW5lKGNwdSkpIHsKIAkJCXJldCA9IC1FTk9ERVY7CiAJCX0gZWxzZSB7CiAJCQkvKiBPbiBTVU40Viwgd3JpdGVzIHRvICV0aWNrIGFuZCAlc3RpY2sgYXJlCkBAIC0xMjY5LDcgKzEyNjksNyBAQAogCQkJCXRiLT5ub25yZXN1bV9tb25kb19wYSwgMCk7CiAJfQogCi0JY3B1X2NsZWFyKGNwdSwgc21wX2NvbW1lbmNlZF9tYXNrKTsKKwljcHVtYXNrX2NsZWFyX2NwdShjcHUsICZzbXBfY29tbWVuY2VkX21hc2spOwogCW1lbWJhcl9zYWZlKCIjU3luYyIpOwogCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKQEAgLTEyOTAsMTMgKzEyOTAsMTMgQEAKIAljcHVpbmZvX3NwYXJjICpjOwogCWludCBpOwogCi0JZm9yX2VhY2hfY3B1X21hc2soaSwgY3B1X2NvcmVfbWFwW2NwdV0pCi0JCWNwdV9jbGVhcihjcHUsIGNwdV9jb3JlX21hcFtpXSk7Ci0JY3B1c19jbGVhcihjcHVfY29yZV9tYXBbY3B1XSk7CisJZm9yX2VhY2hfY3B1KGksICZjcHVfY29yZV9tYXBbY3B1XSkKKwkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCAmY3B1X2NvcmVfbWFwW2ldKTsKKwljcHVtYXNrX2NsZWFyKCZjcHVfY29yZV9tYXBbY3B1XSk7CiAKLQlmb3JfZWFjaF9jcHVfbWFzayhpLCBwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgY3B1KSkKLQkJY3B1X2NsZWFyKGNwdSwgcGVyX2NwdShjcHVfc2libGluZ19tYXAsIGkpKTsKLQljcHVzX2NsZWFyKHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBjcHUpKTsKKwlmb3JfZWFjaF9jcHUoaSwgJnBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBjcHUpKQorCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsICZwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgaSkpOworCWNwdW1hc2tfY2xlYXIoJnBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBjcHUpKTsKIAogCWMgPSAmY3B1X2RhdGEoY3B1KTsKIApAQCAtMTMxMyw3ICsxMzEzLDcgQEAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCiAJaXBpX2NhbGxfbG9jaygpOwotCWNwdV9jbGVhcihjcHUsIGNwdV9vbmxpbmVfbWFwKTsKKwlzZXRfY3B1X29ubGluZShjcHUsIGZhbHNlKTsKIAlpcGlfY2FsbF91bmxvY2soKTsKIAogCWNwdV9tYXBfcmVidWlsZCgpOwpAQCAtMTMyNywxMSArMTMyNywxMSBAQAogCiAJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7CiAJCXNtcF9ybWIoKTsKLQkJaWYgKCFjcHVfaXNzZXQoY3B1LCBzbXBfY29tbWVuY2VkX21hc2spKQorCQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCAmc21wX2NvbW1lbmNlZF9tYXNrKSkKIAkJCWJyZWFrOwogCQltc2xlZXAoMTAwKTsKIAl9Ci0JaWYgKGNwdV9pc3NldChjcHUsIHNtcF9jb21tZW5jZWRfbWFzaykpIHsKKwlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsICZzbXBfY29tbWVuY2VkX21hc2spKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiQ1BVICV1IGRpZG4ndCBkaWUuLi5cbiIsIGNwdSk7CiAJfSBlbHNlIHsKICNpZiBkZWZpbmVkKENPTkZJR19TVU5fTERPTVMpCkBAIC0xMzQxLDcgKzEzNDEsNyBAQAogCQlkbyB7CiAJCQlodl9lcnIgPSBzdW40dl9jcHVfc3RvcChjcHUpOwogCQkJaWYgKGh2X2VyciA9PSBIVl9FT0spIHsKLQkJCQljcHVfY2xlYXIoY3B1LCBjcHVfcHJlc2VudF9tYXApOworCQkJCXNldF9jcHVfcHJlc2VudChjcHUsIGZhbHNlKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfSB3aGlsZSAoLS1saW1pdCA+IDApOwpAQCAtMTM2Miw3ICsxMzYyLDcgQEAKIHZvaWQgc21wX3NlbmRfcmVzY2hlZHVsZShpbnQgY3B1KQogewogCXhjYWxsX2RlbGl2ZXIoKHU2NCkgJnhjYWxsX3JlY2VpdmVfc2lnbmFsLCAwLCAwLAotCQkgICAgICAmY3B1bWFza19vZl9jcHUoY3B1KSk7CisJCSAgICAgIGNwdW1hc2tfb2YoY3B1KSk7CiB9CiAKIHZvaWQgX19pcnFfZW50cnkgc21wX3JlY2VpdmVfc2lnbmFsX2NsaWVudChpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N1bjRjX2lycS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGNfaXJxLmMKaW5kZXggOTBlZWEzOC4uZjZiZjI1YSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGNfaXJxLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGNfaXJxLmMKQEAgLTY1LDYyICs2NSw5NCBAQAogICovCiB1bnNpZ25lZCBjaGFyIF9faW9tZW0gKmludGVycnVwdF9lbmFibGU7CiAKLXN0YXRpYyB2b2lkIHN1bjRjX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnFfbnIpCitzdGF0aWMgdm9pZCBzdW40Y19tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBjaGFyIGN1cnJlbnRfbWFzaywgbmV3X21hc2s7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gKHVuc2lnbmVkIGxvbmcpZGF0YS0+Y2hpcF9kYXRhOwogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWlycV9uciAmPSAoTlJfSVJRUyAtIDEpOwotCWN1cnJlbnRfbWFzayA9IHNidXNfcmVhZGIoaW50ZXJydXB0X2VuYWJsZSk7Ci0Jc3dpdGNoIChpcnFfbnIpIHsKLQljYXNlIDE6Ci0JCW5ld19tYXNrID0gKChjdXJyZW50X21hc2spICYgKH4oU1VONENfSU5UX0UxKSkpOwotCQlicmVhazsKLQljYXNlIDg6Ci0JCW5ld19tYXNrID0gKChjdXJyZW50X21hc2spICYgKH4oU1VONENfSU5UX0U4KSkpOwotCQlicmVhazsKLQljYXNlIDEwOgotCQluZXdfbWFzayA9ICgoY3VycmVudF9tYXNrKSAmICh+KFNVTjRDX0lOVF9FMTApKSk7Ci0JCWJyZWFrOwotCWNhc2UgMTQ6Ci0JCW5ld19tYXNrID0gKChjdXJyZW50X21hc2spICYgKH4oU1VONENfSU5UX0UxNCkpKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKKwlpZiAobWFzaykgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJbWFzayA9IHNidXNfcmVhZGIoaW50ZXJydXB0X2VuYWJsZSkgJiB+bWFzazsKKwkJc2J1c193cml0ZWIobWFzaywgaW50ZXJydXB0X2VuYWJsZSk7CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJcmV0dXJuOwogCX0KLQlzYnVzX3dyaXRlYihuZXdfbWFzaywgaW50ZXJydXB0X2VuYWJsZSk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBzdW40Y19lbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnFfbnIpCitzdGF0aWMgdm9pZCBzdW40Y191bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGNoYXIgY3VycmVudF9tYXNrLCBuZXdfbWFzazsKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSAodW5zaWduZWQgbG9uZylkYXRhLT5jaGlwX2RhdGE7CiAKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JaXJxX25yICY9IChOUl9JUlFTIC0gMSk7Ci0JY3VycmVudF9tYXNrID0gc2J1c19yZWFkYihpbnRlcnJ1cHRfZW5hYmxlKTsKLQlzd2l0Y2ggKGlycV9ucikgewotCWNhc2UgMToKLQkJbmV3X21hc2sgPSAoKGN1cnJlbnRfbWFzaykgfCBTVU40Q19JTlRfRTEpOwotCQlicmVhazsKLQljYXNlIDg6Ci0JCW5ld19tYXNrID0gKChjdXJyZW50X21hc2spIHwgU1VONENfSU5UX0U4KTsKLQkJYnJlYWs7Ci0JY2FzZSAxMDoKLQkJbmV3X21hc2sgPSAoKGN1cnJlbnRfbWFzaykgfCBTVU40Q19JTlRfRTEwKTsKLQkJYnJlYWs7Ci0JY2FzZSAxNDoKLQkJbmV3X21hc2sgPSAoKGN1cnJlbnRfbWFzaykgfCBTVU40Q19JTlRfRTE0KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKKwlpZiAobWFzaykgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJbWFzayA9IHNidXNfcmVhZGIoaW50ZXJydXB0X2VuYWJsZSkgfCBtYXNrOworCQlzYnVzX3dyaXRlYihtYXNrLCBpbnRlcnJ1cHRfZW5hYmxlKTsKIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCQlyZXR1cm47CiAJfQotCXNidXNfd3JpdGViKG5ld19tYXNrLCBpbnRlcnJ1cHRfZW5hYmxlKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3VuNGNfc3RhcnR1cF9pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQoreworCWlycV9saW5rKGRhdGEtPmlycSk7CisJc3VuNGNfdW5tYXNrX2lycShkYXRhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzdW40Y19zaHV0ZG93bl9pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQoreworCXN1bjRjX21hc2tfaXJxKGRhdGEpOworCWlycV91bmxpbmsoZGF0YS0+aXJxKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzdW40Y19pcnEgPSB7CisJLm5hbWUJCT0gInN1bjRjIiwKKwkuaXJxX3N0YXJ0dXAJPSBzdW40Y19zdGFydHVwX2lycSwKKwkuaXJxX3NodXRkb3duCT0gc3VuNGNfc2h1dGRvd25faXJxLAorCS5pcnFfbWFzawk9IHN1bjRjX21hc2tfaXJxLAorCS5pcnFfdW5tYXNrCT0gc3VuNGNfdW5tYXNrX2lycSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3VuNGNfYnVpbGRfZGV2aWNlX2lycShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCwKKwkJCQkJICAgdW5zaWduZWQgaW50IHJlYWxfaXJxKQoreworCSB1bnNpZ25lZCBpbnQgaXJxOworCisJaWYgKHJlYWxfaXJxID49IDE2KSB7CisJCXByb21fcHJpbnRmKCJCb2d1cyBzdW40YyBJUlEgJXVcbiIsIHJlYWxfaXJxKTsKKwkJcHJvbV9oYWx0KCk7CisJfQorCisJaXJxID0gaXJxX2FsbG9jKHJlYWxfaXJxLCByZWFsX2lycSk7CisJaWYgKGlycSkgeworCQl1bnNpZ25lZCBsb25nIG1hc2sgPSAwVUw7CisKKwkJc3dpdGNoIChyZWFsX2lycSkgeworCQljYXNlIDE6CisJCQltYXNrID0gU1VONENfSU5UX0UxOworCQkJYnJlYWs7CisJCWNhc2UgODoKKwkJCW1hc2sgPSBTVU40Q19JTlRfRTg7CisJCQlicmVhazsKKwkJY2FzZSAxMDoKKwkJCW1hc2sgPSBTVU40Q19JTlRfRTEwOworCQkJYnJlYWs7CisJCWNhc2UgMTQ6CisJCQltYXNrID0gU1VONENfSU5UX0UxNDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJLyogQWxsIHRoZSByZXN0IGFyZSBlaXRoZXIgYWx3YXlzIGVuYWJsZWQsCisJCQkgKiBvciBhcmUgZm9yIHNpZ25hbGxpbmcgc29mdHdhcmUgaW50ZXJydXB0cy4KKwkJCSAqLworCQkJYnJlYWs7CisJCX0KKwkJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmc3VuNGNfaXJxLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVfbGV2ZWxfaXJxLCAibGV2ZWwiKTsKKwkJaXJxX3NldF9jaGlwX2RhdGEoaXJxLCAodm9pZCAqKW1hc2spOworCX0KKwlyZXR1cm4gaXJxOwogfQogCiBzdHJ1Y3Qgc3VuNGNfdGltZXJfaW5mbyB7CkBAIC0xNDQsOCArMTc2LDkgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHN1bjRjX2luaXRfdGltZXJzKGlycV9oYW5kbGVyX3QgY291bnRlcl9mbikKIHsKLQljb25zdCBzdHJ1Y3QgbGludXhfcHJvbV9pcnFzICppcnE7CisJY29uc3Qgc3RydWN0IGxpbnV4X3Byb21faXJxcyAqcHJvbV9pcnFzOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHA7CisJdW5zaWduZWQgaW50IGlycTsKIAljb25zdCB1MzIgKmFkZHI7CiAJaW50IGVycjsKIApAQCAtMTYzLDkgKzE5Niw5IEBACiAKIAlzdW40Y190aW1lcnMgPSAodm9pZCBfX2lvbWVtICopICh1bnNpZ25lZCBsb25nKSBhZGRyWzBdOwogCi0JaXJxID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAiaW50ciIsIE5VTEwpOworCXByb21faXJxcyA9IG9mX2dldF9wcm9wZXJ0eShkcCwgImludHIiLCBOVUxMKTsKIAlvZl9ub2RlX3B1dChkcCk7Ci0JaWYgKCFpcnEpIHsKKwlpZiAoIXByb21faXJxcykgewogCQlwcm9tX3ByaW50Zigic3VuNGNfaW5pdF90aW1lcnM6IE5vIGludHIgcHJvcGVydHlcbiIpOwogCQlwcm9tX2hhbHQoKTsKIAl9CkBAIC0xNzgsMTUgKzIxMSwxNSBAQAogCiAJbWFzdGVyX2wxMF9jb3VudGVyID0gJnN1bjRjX3RpbWVycy0+bDEwX2NvdW50OwogCi0JZXJyID0gcmVxdWVzdF9pcnEoaXJxWzBdLnByaSwgY291bnRlcl9mbiwKLQkJCSAgKElSUUZfRElTQUJMRUQgfCBTQV9TVEFUSUNfQUxMT0MpLAotCQkJICAidGltZXIiLCBOVUxMKTsKKwlpcnEgPSBzdW40Y19idWlsZF9kZXZpY2VfaXJxKE5VTEwsIHByb21faXJxc1swXS5wcmkpOworCWVyciA9IHJlcXVlc3RfaXJxKGlycSwgY291bnRlcl9mbiwgSVJRRl9USU1FUiwgInRpbWVyIiwgTlVMTCk7CiAJaWYgKGVycikgewogCQlwcm9tX3ByaW50Zigic3VuNGNfaW5pdF90aW1lcnM6IHJlcXVlc3RfaXJxKCkgZmFpbHMgd2l0aCAlZFxuIiwgZXJyKTsKIAkJcHJvbV9oYWx0KCk7CiAJfQogCi0Jc3VuNGNfZGlzYWJsZV9pcnEoaXJxWzFdLnByaSk7CisJLyogZGlzYWJsZSB0aW1lciBpbnRlcnJ1cHQgKi8KKwlzdW40Y19tYXNrX2lycShpcnFfZ2V0X2lycV9kYXRhKGlycSkpOwogfQogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtMjE1LDE0ICsyNDgsMTEgQEAKIAogCWludGVycnVwdF9lbmFibGUgPSAodm9pZCBfX2lvbWVtICopICh1bnNpZ25lZCBsb25nKSBhZGRyWzBdOwogCi0JQlRGSVhVUFNFVF9DQUxMKGVuYWJsZV9pcnEsIHN1bjRjX2VuYWJsZV9pcnEsIEJURklYVVBDQUxMX05PUk0pOwotCUJURklYVVBTRVRfQ0FMTChkaXNhYmxlX2lycSwgc3VuNGNfZGlzYWJsZV9pcnEsIEJURklYVVBDQUxMX05PUk0pOwotCUJURklYVVBTRVRfQ0FMTChlbmFibGVfcGlsX2lycSwgc3VuNGNfZW5hYmxlX2lycSwgQlRGSVhVUENBTExfTk9STSk7Ci0JQlRGSVhVUFNFVF9DQUxMKGRpc2FibGVfcGlsX2lycSwgc3VuNGNfZGlzYWJsZV9pcnEsIEJURklYVVBDQUxMX05PUk0pOwogCUJURklYVVBTRVRfQ0FMTChjbGVhcl9jbG9ja19pcnEsIHN1bjRjX2NsZWFyX2Nsb2NrX2lycSwgQlRGSVhVUENBTExfTk9STSk7CiAJQlRGSVhVUFNFVF9DQUxMKGxvYWRfcHJvZmlsZV9pcnEsIHN1bjRjX2xvYWRfcHJvZmlsZV9pcnEsIEJURklYVVBDQUxMX05PUCk7CiAKLQlzcGFyY19pcnFfY29uZmlnLmluaXRfdGltZXJzID0gc3VuNGNfaW5pdF90aW1lcnM7CisJc3BhcmNfaXJxX2NvbmZpZy5pbml0X3RpbWVycyAgICAgID0gc3VuNGNfaW5pdF90aW1lcnM7CisJc3BhcmNfaXJxX2NvbmZpZy5idWlsZF9kZXZpY2VfaXJxID0gc3VuNGNfYnVpbGRfZGV2aWNlX2lycTsKIAogI2lmZGVmIENPTkZJR19TTVAKIAlCVEZJWFVQU0VUX0NBTEwoc2V0X2NwdV9pbnQsIHN1bjRjX25vcCwgQlRGSVhVUENBTExfTk9QKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N1bjRkX2lycS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGRfaXJxLmMKaW5kZXggNzdiNGE4OS4uYTllYTYwZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGRfaXJxLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGRfaXJxLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc2JpLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KIAogI2luY2x1ZGUgImtlcm5lbC5oIgogI2luY2x1ZGUgImlycS5oIgpAQCAtMjIsMjIgKzIzLDIwIEBACiAgKiBjcHUgbG9jYWwuICBDUFUgbG9jYWwgaW50ZXJydXB0cyBjb3ZlciB0aGUgdGltZXIgaW50ZXJydXB0cwogICogYW5kIHdoYXRub3QsIGFuZCB3ZSBlbmNvZGUgdGhvc2UgYXMgbm9ybWFsIFBJTHMgYmV0d2VlbgogICogMCBhbmQgMTUuCi0gKgotICogU0JVUyBpbnRlcnJ1cHRzIGFyZSBlbmNvZGVkIGludGVnZXJzIGluY2x1ZGluZyB0aGUgYm9hcmQgbnVtYmVyCi0gKiAocGx1cyBvbmUpLCB0aGUgU0JVUyBsZXZlbCwgYW5kIHRoZSBTQlVTIHNsb3QgbnVtYmVyLiAgU3VuNEQKLSAqIElSUSBkaXNwYXRjaCBpcyBkb25lIGJ5OgotICoKLSAqIDEpIFJlYWRpbmcgdGhlIEJXIGxvY2FsIGludGVycnVwdCB0YWJsZSBpbiBvcmRlciB0byBnZXQgdGhlIGJ1cwotICogICAgaW50ZXJydXB0IG1hc2suCi0gKgotICogICAgVGhpcyB0YWJsZSBpcyBpbmRleGVkIGJ5IFNCVVMgaW50ZXJydXB0IGxldmVsIHdoaWNoIGNhbiBiZQotICogICAgZGVyaXZlZCBmcm9tIHRoZSBQSUwgd2UgZ290IGludGVycnVwdGVkIG9uLgotICoKLSAqIDIpIEZvciBlYWNoIGJ1cyBzaG93aW5nIGludGVycnVwdCBwZW5kaW5nIGZyb20gIzEsIHJlYWQgdGhlCi0gKiAgICBTQkkgaW50ZXJydXB0IHN0YXRlIHJlZ2lzdGVyLiAgVGhpcyB3aWxsIGluZGljYXRlIHdoaWNoIHNsb3RzCi0gKiAgICBoYXZlIGludGVycnVwdHMgcGVuZGluZyBmb3IgdGhhdCBTQlVTIGludGVycnVwdCBsZXZlbC4KKyAqIFNCVVMgaW50ZXJydXB0cyBhcmUgZW5jb2RlcyBhcyBhIGNvbWJpbmF0aW9uIG9mIGJvYXJkLCBsZXZlbCBhbmQgc2xvdC4KICAqLwogCitzdHJ1Y3Qgc3VuNGRfaGFuZGxlcl9kYXRhIHsKKwl1bnNpZ25lZCBpbnQgY3B1aWQ7ICAgIC8qIHRhcmdldCBjcHUgKi8KKwl1bnNpZ25lZCBpbnQgcmVhbF9pcnE7IC8qIGludGVycnVwdCBsZXZlbCAqLworfTsKKworCitzdGF0aWMgdW5zaWduZWQgaW50IHN1bjRkX2VuY29kZV9pcnEoaW50IGJvYXJkLCBpbnQgbHZsLCBpbnQgc2xvdCkKK3sKKwlyZXR1cm4gKGJvYXJkICsgMSkgPDwgNSB8IChsdmwgPDwgMikgfCBzbG90OworfQorCiBzdHJ1Y3Qgc3VuNGRfdGltZXJfcmVncyB7CiAJdTMyCWwxMF90aW1lcl9saW1pdDsKIAl1MzIJbDEwX2N1cl9jb3VudHg7CkBAIC00OCwxNyArNDcsMTIgQEAKIAogc3RhdGljIHN0cnVjdCBzdW40ZF90aW1lcl9yZWdzIF9faW9tZW0gKnN1bjRkX3RpbWVyczsKIAotI2RlZmluZSBUSU1FUl9JUlEJMTAKKyNkZWZpbmUgU1VONERfVElNRVJfSVJRICAgICAgICAxMAogCi0jZGVmaW5lIE1BWF9TVEFUSUNfQUxMT0MJNAotc3RhdGljIHVuc2lnbmVkIGNoYXIgc2J1c190aWRbMzJdOwotCi1zdGF0aWMgc3RydWN0IGlycWFjdGlvbiAqaXJxX2FjdGlvbltOUl9JUlFTXTsKLQotc3RhdGljIHN0cnVjdCBzYnVzX2FjdGlvbiB7Ci0Jc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOwotCS8qIEZvciBTTVAgdGhpcyBuZWVkcyB0byBiZSBleHRlbmRlZCAqLwotfSAqc2J1c19hY3Rpb25zOworLyogU3BlY2lmeSB3aGljaCBjcHUgaGFuZGxlIGludGVycnVwdHMgZnJvbSB3aGljaCBib2FyZC4KKyAqIEluZGV4IGlzIGJvYXJkIC0gdmFsdWUgaXMgY3B1LgorICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBib2FyZF90b19jcHVbMzJdOwogCiBzdGF0aWMgaW50IHBpbF90b19zYnVzW10gPSB7CiAJMCwKQEAgLTc5LDE1MiArNzMsODEgQEAKIAkwLAogfTsKIAotc3RhdGljIGludCBzYnVzX3RvX3BpbFtdID0gewotCTAsCi0JMiwKLQkzLAotCTUsCi0JNywKLQk5LAotCTExLAotCTEzLAotfTsKLQotc3RhdGljIGludCBuc2JpOwotCiAvKiBFeHBvcnRlZCBmb3Igc3VuNGRfc21wLmMgKi8KIERFRklORV9TUElOTE9DSyhzdW40ZF9pbXNrX2xvY2spOwogCi1pbnQgc2hvd19zdW40ZF9pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKKy8qIFNCVVMgaW50ZXJydXB0cyBhcmUgZW5jb2RlZCBpbnRlZ2VycyBpbmNsdWRpbmcgdGhlIGJvYXJkIG51bWJlcgorICogKHBsdXMgb25lKSwgdGhlIFNCVVMgbGV2ZWwsIGFuZCB0aGUgU0JVUyBzbG90IG51bWJlci4gIFN1bjRECisgKiBJUlEgZGlzcGF0Y2ggaXMgZG9uZSBieToKKyAqCisgKiAxKSBSZWFkaW5nIHRoZSBCVyBsb2NhbCBpbnRlcnJ1cHQgdGFibGUgaW4gb3JkZXIgdG8gZ2V0IHRoZSBidXMKKyAqICAgIGludGVycnVwdCBtYXNrLgorICoKKyAqICAgIFRoaXMgdGFibGUgaXMgaW5kZXhlZCBieSBTQlVTIGludGVycnVwdCBsZXZlbCB3aGljaCBjYW4gYmUKKyAqICAgIGRlcml2ZWQgZnJvbSB0aGUgUElMIHdlIGdvdCBpbnRlcnJ1cHRlZCBvbi4KKyAqCisgKiAyKSBGb3IgZWFjaCBidXMgc2hvd2luZyBpbnRlcnJ1cHQgcGVuZGluZyBmcm9tICMxLCByZWFkIHRoZQorICogICAgU0JJIGludGVycnVwdCBzdGF0ZSByZWdpc3Rlci4gIFRoaXMgd2lsbCBpbmRpY2F0ZSB3aGljaCBzbG90cworICogICAgaGF2ZSBpbnRlcnJ1cHRzIHBlbmRpbmcgZm9yIHRoYXQgU0JVUyBpbnRlcnJ1cHQgbGV2ZWwuCisgKgorICogMykgQ2FsbCB0aGUgZ2VucmVyaWMgSVJRIHN1cHBvcnQuCisgKi8KK3N0YXRpYyB2b2lkIHN1bjRkX3NidXNfaGFuZGxlcl9pcnEoaW50IHNidXNsKQogewotCWludCBpID0gKihsb2ZmX3QgKikgdiwgaiA9IDAsIGsgPSAwLCBzYnVzbDsKLQlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLSNpZmRlZiBDT05GSUdfU01QCi0JaW50IHg7Ci0jZW5kaWYKKwl1bnNpZ25lZCBpbnQgYnVzX21hc2s7CisJdW5zaWduZWQgaW50IHNiaW5vLCBzbG90OworCXVuc2lnbmVkIGludCBzYmlsOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9hY3Rpb25fbG9jaywgZmxhZ3MpOwotCWlmIChpIDwgTlJfSVJRUykgewotCQlzYnVzbCA9IHBpbF90b19zYnVzW2ldOwotCQlpZiAoIXNidXNsKSB7Ci0JCQlhY3Rpb24gPSAqKGkgKyBpcnFfYWN0aW9uKTsKLQkJCWlmICghYWN0aW9uKQotCQkJCWdvdG8gb3V0X3VubG9jazsKLQkJfSBlbHNlIHsKLQkJCWZvciAoaiA9IDA7IGogPCBuc2JpOyBqKyspIHsKLQkJCQlmb3IgKGsgPSAwOyBrIDwgNDsgaysrKQotCQkJCQlhY3Rpb24gPSBzYnVzX2FjdGlvbnNbKGogPDwgNSkgKyAoc2J1c2wgPDwgMikgKyBrXS5hY3Rpb247Ci0JCQkJCWlmIChhY3Rpb24pCi0JCQkJCQlnb3RvIGZvdW5kX2l0OwotCQkJfQotCQkJZ290byBvdXRfdW5sb2NrOwotCQl9Ci1mb3VuZF9pdDoJc2VxX3ByaW50ZihwLCAiJTNkOiAiLCBpKTsKLSNpZm5kZWYgQ09ORklHX1NNUAotCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwotI2Vsc2UKLQkJZm9yX2VhY2hfb25saW5lX2NwdSh4KQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLAotCQkJICAgICAgIGtzdGF0X2NwdShjcHVfbG9naWNhbF9tYXAoeCkpLmlycXNbaV0pOwotI2VuZGlmCi0JCXNlcV9wcmludGYocCwgIiVjICVzIiwKLQkJCShhY3Rpb24tPmZsYWdzICYgSVJRRl9ESVNBQkxFRCkgPyAnKycgOiAnICcsCi0JCQlhY3Rpb24tPm5hbWUpOwotCQlhY3Rpb24gPSBhY3Rpb24tPm5leHQ7Ci0JCWZvciAoOzspIHsKLQkJCWZvciAoOyBhY3Rpb247IGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkgewotCQkJCXNlcV9wcmludGYocCwgIiwlcyAlcyIsCi0JCQkJCShhY3Rpb24tPmZsYWdzICYgSVJRRl9ESVNBQkxFRCkgPyAiICsiIDogIiIsCi0JCQkJCWFjdGlvbi0+bmFtZSk7Ci0JCQl9Ci0JCQlpZiAoIXNidXNsKQotCQkJCWJyZWFrOwotCQkJaysrOwotCQkJaWYgKGsgPCA0KSB7Ci0JCQkJYWN0aW9uID0gc2J1c19hY3Rpb25zWyhqIDw8IDUpICsgKHNidXNsIDw8IDIpICsga10uYWN0aW9uOwotCQkJfSBlbHNlIHsKLQkJCQlqKys7Ci0JCQkJaWYgKGogPT0gbnNiaSkKLQkJCQkJYnJlYWs7Ci0JCQkJayA9IDA7Ci0JCQkJYWN0aW9uID0gc2J1c19hY3Rpb25zWyhqIDw8IDUpICsgKHNidXNsIDw8IDIpXS5hY3Rpb247Ci0JCQl9Ci0JCX0KLQkJc2VxX3B1dGMocCwgJ1xuJyk7Ci0JfQotb3V0X3VubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYWN0aW9uX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KKwlidXNfbWFzayA9IGJ3X2dldF9pbnRyX21hc2soc2J1c2wpICYgMHgzZmZmZjsKKwlid19jbGVhcl9pbnRyX21hc2soc2J1c2wsIGJ1c19tYXNrKTsKIAotdm9pZCBzdW40ZF9mcmVlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0Jc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uLCAqKmFjdGlvbnA7Ci0Jc3RydWN0IGlycWFjdGlvbiAqdG1wID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNiaWwgPSAoc2J1c2wgPDwgMik7CisJLyogTG9vcCBmb3IgZWFjaCBwZW5kaW5nIFNCSSAqLworCWZvciAoc2Jpbm8gPSAwOyBidXNfbWFzazsgc2Jpbm8rKykgeworCQl1bnNpZ25lZCBpbnQgaWR4LCBtYXNrOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9hY3Rpb25fbG9jaywgZmxhZ3MpOwotCWlmIChpcnEgPCAxNSkKLQkJYWN0aW9ucCA9IGlycSArIGlycV9hY3Rpb247Ci0JZWxzZQotCQlhY3Rpb25wID0gJihzYnVzX2FjdGlvbnNbaXJxIC0gKDEgPDwgNSldLmFjdGlvbik7Ci0JYWN0aW9uID0gKmFjdGlvbnA7Ci0JaWYgKCFhY3Rpb24pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJUcnlpbmcgdG8gZnJlZSBmcmVlIElSUSVkXG4iLCBpcnEpOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCWlmIChkZXZfaWQpIHsKLQkJZm9yICg7IGFjdGlvbjsgYWN0aW9uID0gYWN0aW9uLT5uZXh0KSB7Ci0JCQlpZiAoYWN0aW9uLT5kZXZfaWQgPT0gZGV2X2lkKQotCQkJCWJyZWFrOwotCQkJdG1wID0gYWN0aW9uOwotCQl9Ci0JCWlmICghYWN0aW9uKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIlRyeWluZyB0byBmcmVlIGZyZWUgc2hhcmVkIElSUSVkXG4iLAotCQkJICAgICAgIGlycSk7Ci0JCQlnb3RvIG91dF91bmxvY2s7Ci0JCX0KLQl9IGVsc2UgaWYgKGFjdGlvbi0+ZmxhZ3MgJiBJUlFGX1NIQVJFRCkgewotCQlwcmludGsoS0VSTl9FUlIgIlRyeWluZyB0byBmcmVlIHNoYXJlZCBJUlElZCB3aXRoIE5VTEwgZGV2aWNlIElEXG4iLAotCQkgICAgICAgaXJxKTsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQlpZiAoYWN0aW9uLT5mbGFncyAmIFNBX1NUQVRJQ19BTExPQykgewotCQkvKgotCQkgKiBUaGlzIGludGVycnVwdCBpcyBtYXJrZWQgYXMgc3BlY2lhbGx5IGFsbG9jYXRlZAotCQkgKiBzbyBpdCBpcyBhIGJhZCBpZGVhIHRvIGZyZWUgaXQuCisJCWJ1c19tYXNrID4+PSAxOworCQlpZiAoIShidXNfbWFzayAmIDEpKQorCQkJY29udGludWU7CisJCS8qIFhYWCBUaGlzIHNlZW1zIHRvIEFDSyB0aGUgaXJxIHR3aWNlLiAgYWNxdWlyZV9zYmkoKQorCQkgKiBYWFggdXNlcyBzd2FwLCB0aGVyZWZvcmUgdGhpcyB3cml0ZXMgMHhmIDw8IHNiaWwsCisJCSAqIFhYWCB0aGVuIGxhdGVyIHJlbGVhc2Vfc2JpKCkgd2lsbCB3cml0ZSB0aGUgaW5kaXZpZHVhbAorCQkgKiBYWFggYml0cyB3aGljaCB3ZXJlIHNldCBhZ2Fpbi4KIAkJICovCi0JCXByaW50ayhLRVJOX0VSUiAiQXR0ZW1wdCB0byBmcmVlIHN0YXRpY2FsbHkgYWxsb2NhdGVkIElSUSVkICglcylcbiIsCi0JCSAgICAgICBpcnEsIGFjdGlvbi0+bmFtZSk7Ci0JCWdvdG8gb3V0X3VubG9jazsKKwkJbWFzayA9IGFjcXVpcmVfc2JpKFNCSTJERVZJRChzYmlubyksIDB4ZiA8PCBzYmlsKTsKKwkJbWFzayAmPSAoMHhmIDw8IHNiaWwpOworCisJCS8qIExvb3AgZm9yIGVhY2ggcGVuZGluZyBTQkkgc2xvdCAqLworCQlpZHggPSAwOworCQlzbG90ID0gKDEgPDwgc2JpbCk7CisJCXdoaWxlIChtYXNrICE9IDApIHsKKwkJCXVuc2lnbmVkIGludCBwaWw7CisJCQlzdHJ1Y3QgaXJxX2J1Y2tldCAqcDsKKworCQkJaWR4Kys7CisJCQlzbG90IDw8PSAxOworCQkJaWYgKCEobWFzayAmIHNsb3QpKQorCQkJCWNvbnRpbnVlOworCisJCQltYXNrICY9IH5zbG90OworCQkJcGlsID0gc3VuNGRfZW5jb2RlX2lycShzYmlubywgc2JpbCwgaWR4KTsKKworCQkJcCA9IGlycV9tYXBbcGlsXTsKKwkJCXdoaWxlIChwKSB7CisJCQkJc3RydWN0IGlycV9idWNrZXQgKm5leHQ7CisKKwkJCQluZXh0ID0gcC0+bmV4dDsKKwkJCQlnZW5lcmljX2hhbmRsZV9pcnEocC0+aXJxKTsKKwkJCQlwID0gbmV4dDsKKwkJCX0KKwkJCXJlbGVhc2Vfc2JpKFNCSTJERVZJRChzYmlubyksIHNsb3QpOworCQl9CiAJfQotCi0JaWYgKHRtcCkKLQkJdG1wLT5uZXh0ID0gYWN0aW9uLT5uZXh0OwotCWVsc2UKLQkJKmFjdGlvbnAgPSBhY3Rpb24tPm5leHQ7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYWN0aW9uX2xvY2ssIGZsYWdzKTsKLQotCXN5bmNocm9uaXplX2lycShpcnEpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9hY3Rpb25fbG9jaywgZmxhZ3MpOwotCi0Ja2ZyZWUoYWN0aW9uKTsKLQotCWlmICghKCphY3Rpb25wKSkKLQkJX19kaXNhYmxlX2lycShpcnEpOwotCi1vdXRfdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9hY3Rpb25fbG9jaywgZmxhZ3MpOwogfQogCiB2b2lkIHN1bjRkX2hhbmRsZXJfaXJxKGludCBwaWwsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBwdF9yZWdzICpvbGRfcmVnczsKLQlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAkvKiBTQlVTIElSUSBsZXZlbCAoMSAtIDcpICovCiAJaW50IHNidXNsID0gcGlsX3RvX3NidXNbcGlsXTsKIApAQCAtMjMzLDE2MCArMTU2LDk2IEBACiAKIAljY19zZXRfaWNscigxIDw8IHBpbCk7CiAKKyNpZmRlZiBDT05GSUdfU01QCisJLyoKKwkgKiBDaGVjayBJUEkgZGF0YSBzdHJ1Y3R1cmVzIGFmdGVyIElSUSBoYXMgYmVlbiBjbGVhcmVkLiBIYXJkIGFuZCBTb2Z0CisJICogSVJRIGNhbiBoYXBwZW4gYXQgdGhlIHNhbWUgdGltZSwgc28gYm90aCBjYXNlcyBhcmUgYWx3YXlzIGhhbmRsZWQuCisJICovCisJaWYgKHBpbCA9PSBTVU40RF9JUElfSVJRKQorCQlzdW40ZF9pcGlfaW50ZXJydXB0KCk7CisjZW5kaWYKKwogCW9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOwogCWlycV9lbnRlcigpOwotCWtzdGF0X2NwdShjcHUpLmlycXNbcGlsXSsrOwotCWlmICghc2J1c2wpIHsKLQkJYWN0aW9uID0gKihwaWwgKyBpcnFfYWN0aW9uKTsKLQkJaWYgKCFhY3Rpb24pCi0JCQl1bmV4cGVjdGVkX2lycShwaWwsIE5VTEwsIHJlZ3MpOwotCQlkbyB7Ci0JCQlhY3Rpb24tPmhhbmRsZXIocGlsLCBhY3Rpb24tPmRldl9pZCk7Ci0JCQlhY3Rpb24gPSBhY3Rpb24tPm5leHQ7Ci0JCX0gd2hpbGUgKGFjdGlvbik7CisJaWYgKHNidXNsID09IDApIHsKKwkJLyogY3B1IGludGVycnVwdCAqLworCQlzdHJ1Y3QgaXJxX2J1Y2tldCAqcDsKKworCQlwID0gaXJxX21hcFtwaWxdOworCQl3aGlsZSAocCkgeworCQkJc3RydWN0IGlycV9idWNrZXQgKm5leHQ7CisKKwkJCW5leHQgPSBwLT5uZXh0OworCQkJZ2VuZXJpY19oYW5kbGVfaXJxKHAtPmlycSk7CisJCQlwID0gbmV4dDsKKwkJfQogCX0gZWxzZSB7Ci0JCWludCBidXNfbWFzayA9IGJ3X2dldF9pbnRyX21hc2soc2J1c2wpICYgMHgzZmZmZjsKLQkJaW50IHNiaW5vOwotCQlzdHJ1Y3Qgc2J1c19hY3Rpb24gKmFjdGlvbnA7Ci0JCXVuc2lnbmVkIG1hc2ssIHNsb3Q7Ci0JCWludCBzYmlsID0gKHNidXNsIDw8IDIpOwotCi0JCWJ3X2NsZWFyX2ludHJfbWFzayhzYnVzbCwgYnVzX21hc2spOwotCi0JCS8qIExvb3AgZm9yIGVhY2ggcGVuZGluZyBTQkkgKi8KLQkJZm9yIChzYmlubyA9IDA7IGJ1c19tYXNrOyBzYmlubysrLCBidXNfbWFzayA+Pj0gMSkKLQkJCWlmIChidXNfbWFzayAmIDEpIHsKLQkJCQltYXNrID0gYWNxdWlyZV9zYmkoU0JJMkRFVklEKHNiaW5vKSwgMHhmIDw8IHNiaWwpOwotCQkJCW1hc2sgJj0gKDB4ZiA8PCBzYmlsKTsKLQkJCQlhY3Rpb25wID0gc2J1c19hY3Rpb25zICsgKHNiaW5vIDw8IDUpICsgKHNiaWwpOwotCQkJCS8qIExvb3AgZm9yIGVhY2ggcGVuZGluZyBTQkkgc2xvdCAqLwotCQkJCWZvciAoc2xvdCA9ICgxIDw8IHNiaWwpOyBtYXNrOyBzbG90IDw8PSAxLCBhY3Rpb25wKyspCi0JCQkJCWlmIChtYXNrICYgc2xvdCkgewotCQkJCQkJbWFzayAmPSB+c2xvdDsKLQkJCQkJCWFjdGlvbiA9IGFjdGlvbnAtPmFjdGlvbjsKLQotCQkJCQkJaWYgKCFhY3Rpb24pCi0JCQkJCQkJdW5leHBlY3RlZF9pcnEocGlsLCBOVUxMLCByZWdzKTsKLQkJCQkJCWRvIHsKLQkJCQkJCQlhY3Rpb24tPmhhbmRsZXIocGlsLCBhY3Rpb24tPmRldl9pZCk7Ci0JCQkJCQkJYWN0aW9uID0gYWN0aW9uLT5uZXh0OwotCQkJCQkJfSB3aGlsZSAoYWN0aW9uKTsKLQkJCQkJCXJlbGVhc2Vfc2JpKFNCSTJERVZJRChzYmlubyksIHNsb3QpOwotCQkJCQl9Ci0JCQl9CisJCS8qIFNCVVMgaW50ZXJydXB0ICovCisJCXN1bjRkX3NidXNfaGFuZGxlcl9pcnEoc2J1c2wpOwogCX0KIAlpcnFfZXhpdCgpOwogCXNldF9pcnFfcmVncyhvbGRfcmVncyk7CiB9CiAKLWludCBzdW40ZF9yZXF1ZXN0X2lycSh1bnNpZ25lZCBpbnQgaXJxLAotCQlpcnFfaGFuZGxlcl90IGhhbmRsZXIsCi0JCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3MsIGNvbnN0IGNoYXIgKmRldm5hbWUsIHZvaWQgKmRldl9pZCkKKworc3RhdGljIHZvaWQgc3VuNGRfbWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQogewotCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbiwgKnRtcCA9IE5VTEwsICoqYWN0aW9ucDsKKwlzdHJ1Y3Qgc3VuNGRfaGFuZGxlcl9kYXRhICpoYW5kbGVyX2RhdGEgPSBkYXRhLT5oYW5kbGVyX2RhdGE7CisJdW5zaWduZWQgaW50IHJlYWxfaXJxOworI2lmZGVmIENPTkZJR19TTVAKKwlpbnQgY3B1aWQgPSBoYW5kbGVyX2RhdGEtPmNwdWlkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldDsKLQotCWlmIChpcnEgPiAxNCAmJiBpcnEgPCAoMSA8PCA1KSkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoIWhhbmRsZXIpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9hY3Rpb25fbG9jaywgZmxhZ3MpOwotCi0JaWYgKGlycSA+PSAoMSA8PCA1KSkKLQkJYWN0aW9ucCA9ICYoc2J1c19hY3Rpb25zW2lycSAtICgxIDw8IDUpXS5hY3Rpb24pOwotCWVsc2UKLQkJYWN0aW9ucCA9IGlycSArIGlycV9hY3Rpb247Ci0JYWN0aW9uID0gKmFjdGlvbnA7Ci0KLQlpZiAoYWN0aW9uKSB7Ci0JCWlmICgoYWN0aW9uLT5mbGFncyAmIElSUUZfU0hBUkVEKSAmJiAoaXJxZmxhZ3MgJiBJUlFGX1NIQVJFRCkpIHsKLQkJCWZvciAodG1wID0gYWN0aW9uOyB0bXAtPm5leHQ7IHRtcCA9IHRtcC0+bmV4dCkKLQkJCQkvKiBmaW5kIGxhc3QgZW50cnkgLSB0bXAgdXNlZCBiZWxvdyAqLzsKLQkJfSBlbHNlIHsKLQkJCXJldCA9IC1FQlVTWTsKLQkJCWdvdG8gb3V0X3VubG9jazsKLQkJfQotCQlpZiAoKGFjdGlvbi0+ZmxhZ3MgJiBJUlFGX0RJU0FCTEVEKSBeIChpcnFmbGFncyAmIElSUUZfRElTQUJMRUQpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkF0dGVtcHQgdG8gbWl4IGZhc3QgYW5kIHNsb3cgaW50ZXJydXB0cyBvbiBJUlElZCBkZW5pZWRcbiIsCi0JCQkgICAgICAgaXJxKTsKLQkJCXJldCA9IC1FQlVTWTsKLQkJCWdvdG8gb3V0X3VubG9jazsKLQkJfQotCQlhY3Rpb24gPSBOVUxMOwkJLyogT3IgZWxzZSEgKi8KLQl9Ci0KLQkvKiBJZiB0aGlzIGlzIGZsYWdnZWQgYXMgc3RhdGljYWxseSBhbGxvY2F0ZWQgdGhlbiB3ZSB1c2Ugb3VyCi0JICogcHJpdmF0ZSBzdHJ1Y3Qgd2hpY2ggaXMgbmV2ZXIgZnJlZWQuCi0JICovCi0JaWYgKGlycWZsYWdzICYgU0FfU1RBVElDX0FMTE9DKSB7Ci0JCWlmIChzdGF0aWNfaXJxX2NvdW50IDwgTUFYX1NUQVRJQ19BTExPQykKLQkJCWFjdGlvbiA9ICZzdGF0aWNfaXJxYWN0aW9uW3N0YXRpY19pcnFfY291bnQrK107Ci0JCWVsc2UKLQkJCXByaW50ayhLRVJOX0VSUiAiUmVxdWVzdCBmb3IgSVJRJWQgKCVzKSBTQV9TVEFUSUNfQUxMT0MgZmFpbGVkIHVzaW5nIGttYWxsb2NcbiIsCi0JCQkgICAgICAgaXJxLCBkZXZuYW1lKTsKLQl9Ci0KLQlpZiAoYWN0aW9uID09IE5VTEwpCi0JCWFjdGlvbiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcnFhY3Rpb24pLCBHRlBfQVRPTUlDKTsKLQotCWlmICghYWN0aW9uKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLQlhY3Rpb24tPmhhbmRsZXIgPSBoYW5kbGVyOwotCWFjdGlvbi0+ZmxhZ3MgPSBpcnFmbGFnczsKLQlhY3Rpb24tPm5hbWUgPSBkZXZuYW1lOwotCWFjdGlvbi0+bmV4dCA9IE5VTEw7Ci0JYWN0aW9uLT5kZXZfaWQgPSBkZXZfaWQ7Ci0KLQlpZiAodG1wKQotCQl0bXAtPm5leHQgPSBhY3Rpb247Ci0JZWxzZQotCQkqYWN0aW9ucCA9IGFjdGlvbjsKLQotCV9fZW5hYmxlX2lycShpcnEpOwotCi0JcmV0ID0gMDsKLW91dF91bmxvY2s6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2FjdGlvbl9sb2NrLCBmbGFncyk7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgc3VuNGRfZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlpbnQgdGlkID0gc2J1c190aWRbKGlycSA+PiA1KSAtIDFdOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoaXJxIDwgTlJfSVJRUykKLQkJcmV0dXJuOwotCisjZW5kaWYKKwlyZWFsX2lycSA9IGhhbmRsZXJfZGF0YS0+cmVhbF9pcnE7CisjaWZkZWYgQ09ORklHX1NNUAogCXNwaW5fbG9ja19pcnFzYXZlKCZzdW40ZF9pbXNrX2xvY2ssIGZsYWdzKTsKLQljY19zZXRfaW1za19vdGhlcih0aWQsIGNjX2dldF9pbXNrX290aGVyKHRpZCkgfCAoMSA8PCBzYnVzX3RvX3BpbFsoaXJxID4+IDIpICYgN10pKTsKKwljY19zZXRfaW1za19vdGhlcihjcHVpZCwgY2NfZ2V0X2ltc2tfb3RoZXIoY3B1aWQpIHwgKDEgPDwgcmVhbF9pcnEpKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdW40ZF9pbXNrX2xvY2ssIGZsYWdzKTsKKyNlbHNlCisJY2Nfc2V0X2ltc2soY2NfZ2V0X2ltc2soKSB8ICgxIDw8IHJlYWxfaXJxKSk7CisjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgc3VuNGRfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgc3VuNGRfdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7Ci0JaW50IHRpZCA9IHNidXNfdGlkWyhpcnEgPj4gNSkgLSAxXTsKKwlzdHJ1Y3Qgc3VuNGRfaGFuZGxlcl9kYXRhICpoYW5kbGVyX2RhdGEgPSBkYXRhLT5oYW5kbGVyX2RhdGE7CisJdW5zaWduZWQgaW50IHJlYWxfaXJxOworI2lmZGVmIENPTkZJR19TTVAKKwlpbnQgY3B1aWQgPSBoYW5kbGVyX2RhdGEtPmNwdWlkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisjZW5kaWYKKwlyZWFsX2lycSA9IGhhbmRsZXJfZGF0YS0+cmVhbF9pcnE7CiAKLQlpZiAoaXJxIDwgTlJfSVJRUykKLQkJcmV0dXJuOwotCisjaWZkZWYgQ09ORklHX1NNUAogCXNwaW5fbG9ja19pcnFzYXZlKCZzdW40ZF9pbXNrX2xvY2ssIGZsYWdzKTsKLQljY19zZXRfaW1za19vdGhlcih0aWQsIGNjX2dldF9pbXNrX290aGVyKHRpZCkgJiB+KDEgPDwgc2J1c190b19waWxbKGlycSA+PiAyKSAmIDddKSk7CisJY2Nfc2V0X2ltc2tfb3RoZXIoY3B1aWQsIGNjX2dldF9pbXNrX290aGVyKGNwdWlkKSB8IH4oMSA8PCByZWFsX2lycSkpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1bjRkX2ltc2tfbG9jaywgZmxhZ3MpOworI2Vsc2UKKwljY19zZXRfaW1zayhjY19nZXRfaW1zaygpIHwgfigxIDw8IHJlYWxfaXJxKSk7CisjZW5kaWYKIH0KIAorc3RhdGljIHVuc2lnbmVkIGludCBzdW40ZF9zdGFydHVwX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCit7CisJaXJxX2xpbmsoZGF0YS0+aXJxKTsKKwlzdW40ZF91bm1hc2tfaXJxKGRhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzdW40ZF9zaHV0ZG93bl9pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQoreworCXN1bjRkX21hc2tfaXJxKGRhdGEpOworCWlycV91bmxpbmsoZGF0YS0+aXJxKTsKK30KKworc3RydWN0IGlycV9jaGlwIHN1bjRkX2lycSA9IHsKKwkubmFtZQkJPSAic3VuNGQiLAorCS5pcnFfc3RhcnR1cAk9IHN1bjRkX3N0YXJ0dXBfaXJxLAorCS5pcnFfc2h1dGRvd24JPSBzdW40ZF9zaHV0ZG93bl9pcnEsCisJLmlycV91bm1hc2sJPSBzdW40ZF91bm1hc2tfaXJxLAorCS5pcnFfbWFzawk9IHN1bjRkX21hc2tfaXJxLAorfTsKKwogI2lmZGVmIENPTkZJR19TTVAKIHN0YXRpYyB2b2lkIHN1bjRkX3NldF9jcHVfaW50KGludCBjcHUsIGludCBsZXZlbCkKIHsKQEAgLTQxMyw3ICsyNzIsNyBAQAogCWZvcl9lYWNoX25vZGVfYnlfbmFtZShkcCwgInNiaSIpIHsKIAkJaW50IGRldmlkID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAiZGV2aWNlLWlkIiwgMCk7CiAJCWludCBib2FyZCA9IG9mX2dldGludHByb3BfZGVmYXVsdChkcCwgImJvYXJkIyIsIDApOwotCQlzYnVzX3RpZFtib2FyZF0gPSBjcHVpZDsKKwkJYm9hcmRfdG9fY3B1W2JvYXJkXSA9IGNwdWlkOwogCQlzZXRfc2JpX3RpZChkZXZpZCwgY3B1aWQgPDwgMyk7CiAJfQogCXByaW50ayhLRVJOX0VSUiAiQWxsIHNidXMgSVJRcyBkaXJlY3RlZCB0byBDUFUlZFxuIiwgY3B1aWQpOwpAQCAtNDQzLDE1ICszMDIsMTYgQEAKIHVuc2lnbmVkIGludCBzdW40ZF9idWlsZF9kZXZpY2VfaXJxKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHJlYWxfaXJxKQogewotCXN0YXRpYyBpbnQgcGlsX3RvX3NidXNbXSA9IHsKLQkJMCwgMCwgMSwgMiwgMCwgMywgMCwgNCwgMCwgNSwgMCwgNiwgMCwgNywgMCwgMCwKLQl9OwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAgPSBvcC0+ZGV2Lm9mX25vZGU7CiAJc3RydWN0IGRldmljZV9ub2RlICppb191bml0LCAqc2JpID0gZHAtPnBhcmVudDsKIAljb25zdCBzdHJ1Y3QgbGludXhfcHJvbV9yZWdpc3RlcnMgKnJlZ3M7CisJc3RydWN0IHN1bjRkX2hhbmRsZXJfZGF0YSAqaGFuZGxlcl9kYXRhOworCXVuc2lnbmVkIGludCBwaWw7CisJdW5zaWduZWQgaW50IGlycTsKIAlpbnQgYm9hcmQsIHNsb3Q7CiAJaW50IHNidXNsOwogCisJaXJxID0gMDsKIAl3aGlsZSAoc2JpKSB7CiAJCWlmICghc3RyY21wKHNiaS0+bmFtZSwgInNiaSIpKQogCQkJYnJlYWs7CkBAIC00ODQsNyArMzQ0LDI4IEBACiAKIAlzYnVzbCA9IHBpbF90b19zYnVzW3JlYWxfaXJxXTsKIAlpZiAoc2J1c2wpCi0JCXJldHVybiAoKChib2FyZCArIDEpIDw8IDUpICsgKHNidXNsIDw8IDIpICsgc2xvdCk7CisJCXBpbCA9IHN1bjRkX2VuY29kZV9pcnEoYm9hcmQsIHNidXNsLCBzbG90KTsKKwllbHNlCisJCXBpbCA9IHJlYWxfaXJxOworCisJaXJxID0gaXJxX2FsbG9jKHJlYWxfaXJxLCBwaWwpOworCWlmIChpcnEgPT0gMCkKKwkJZ290byBlcnJfb3V0OworCisJaGFuZGxlcl9kYXRhID0gaXJxX2dldF9oYW5kbGVyX2RhdGEoaXJxKTsKKwlpZiAodW5saWtlbHkoaGFuZGxlcl9kYXRhKSkKKwkJZ290byBlcnJfb3V0OworCisJaGFuZGxlcl9kYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN1bjRkX2hhbmRsZXJfZGF0YSksIEdGUF9BVE9NSUMpOworCWlmICh1bmxpa2VseSghaGFuZGxlcl9kYXRhKSkgeworCQlwcm9tX3ByaW50ZigiSVJROiBremFsbG9jKHN1bjRkX2hhbmRsZXJfZGF0YSkgZmFpbGVkLlxuIik7CisJCXByb21faGFsdCgpOworCX0KKwloYW5kbGVyX2RhdGEtPmNwdWlkICAgID0gYm9hcmRfdG9fY3B1W2JvYXJkXTsKKwloYW5kbGVyX2RhdGEtPnJlYWxfaXJxID0gcmVhbF9pcnE7CisJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmc3VuNGRfaXJxLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZV9sZXZlbF9pcnEsICJsZXZlbCIpOworCWlycV9zZXRfaGFuZGxlcl9kYXRhKGlycSwgaGFuZGxlcl9kYXRhKTsKIAogZXJyX291dDoKIAlyZXR1cm4gcmVhbF9pcnE7CkBAIC01MTgsNiArMzk5LDcgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwOwogCXN0cnVjdCByZXNvdXJjZSByZXM7CisJdW5zaWduZWQgaW50IGlycTsKIAljb25zdCB1MzIgKnJlZzsKIAlpbnQgZXJyOwogCkBAIC01NTIsOSArNDM0LDggQEAKIAogCW1hc3Rlcl9sMTBfY291bnRlciA9ICZzdW40ZF90aW1lcnMtPmwxMF9jdXJfY291bnQ7CiAKLQllcnIgPSByZXF1ZXN0X2lycShUSU1FUl9JUlEsIGNvdW50ZXJfZm4sCi0JCQkgIChJUlFGX0RJU0FCTEVEIHwgU0FfU1RBVElDX0FMTE9DKSwKLQkJCSAgInRpbWVyIiwgTlVMTCk7CisJaXJxID0gc3VuNGRfYnVpbGRfZGV2aWNlX2lycShOVUxMLCBTVU40RF9USU1FUl9JUlEpOworCWVyciA9IHJlcXVlc3RfaXJxKGlycSwgY291bnRlcl9mbiwgSVJRRl9USU1FUiwgInRpbWVyIiwgTlVMTCk7CiAJaWYgKGVycikgewogCQlwcm9tX3ByaW50Zigic3VuNGRfaW5pdF90aW1lcnM6IHJlcXVlc3RfaXJxKCkgZmFpbGVkIHdpdGggJWRcbiIsCiAJCSAgICAgICAgICAgICBlcnIpOwpAQCAtNTY3LDI3ICs0NDgsMTYgQEAKIHZvaWQgX19pbml0IHN1bjRkX2luaXRfc2JpX2lycSh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHA7Ci0JaW50IHRhcmdldF9jcHUgPSAwOworCWludCB0YXJnZXRfY3B1OwogCi0jaWZkZWYgQ09ORklHX1NNUAogCXRhcmdldF9jcHUgPSBib290X2NwdV9pZDsKLSNlbmRpZgotCi0JbnNiaSA9IDA7Ci0JZm9yX2VhY2hfbm9kZV9ieV9uYW1lKGRwLCAic2JpIikKLQkJbnNiaSsrOwotCXNidXNfYWN0aW9ucyA9IGt6YWxsb2MobnNiaSAqIDggKiA0ICogc2l6ZW9mKHN0cnVjdCBzYnVzX2FjdGlvbiksIEdGUF9BVE9NSUMpOwotCWlmICghc2J1c19hY3Rpb25zKSB7Ci0JCXByb21fcHJpbnRmKCJTVU40RDogQ2Fubm90IGFsbG9jYXRlIHNidXNfYWN0aW9ucywgaGFsdGluZy5cbiIpOwotCQlwcm9tX2hhbHQoKTsKLQl9CiAJZm9yX2VhY2hfbm9kZV9ieV9uYW1lKGRwLCAic2JpIikgewogCQlpbnQgZGV2aWQgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJkZXZpY2UtaWQiLCAwKTsKIAkJaW50IGJvYXJkID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAiYm9hcmQjIiwgMCk7CiAJCXVuc2lnbmVkIGludCBtYXNrOwogCiAJCXNldF9zYmlfdGlkKGRldmlkLCB0YXJnZXRfY3B1IDw8IDMpOwotCQlzYnVzX3RpZFtib2FyZF0gPSB0YXJnZXRfY3B1OworCQlib2FyZF90b19jcHVbYm9hcmRdID0gdGFyZ2V0X2NwdTsKIAogCQkvKiBHZXQgcmlkIG9mIHBlbmRpbmcgaXJxcyBmcm9tIFBST00gKi8KIAkJbWFzayA9IGFjcXVpcmVfc2JpKGRldmlkLCAweGZmZmZmZmZmKTsKQEAgLTYwMywxMiArNDczLDEwIEBACiB7CiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAotCUJURklYVVBTRVRfQ0FMTChlbmFibGVfaXJxLCBzdW40ZF9lbmFibGVfaXJxLCBCVEZJWFVQQ0FMTF9OT1JNKTsKLQlCVEZJWFVQU0VUX0NBTEwoZGlzYWJsZV9pcnEsIHN1bjRkX2Rpc2FibGVfaXJxLCBCVEZJWFVQQ0FMTF9OT1JNKTsKIAlCVEZJWFVQU0VUX0NBTEwoY2xlYXJfY2xvY2tfaXJxLCBzdW40ZF9jbGVhcl9jbG9ja19pcnEsIEJURklYVVBDQUxMX05PUk0pOwogCUJURklYVVBTRVRfQ0FMTChsb2FkX3Byb2ZpbGVfaXJxLCBzdW40ZF9sb2FkX3Byb2ZpbGVfaXJxLCBCVEZJWFVQQ0FMTF9OT1JNKTsKIAotCXNwYXJjX2lycV9jb25maWcuaW5pdF90aW1lcnMgPSBzdW40ZF9pbml0X3RpbWVyczsKKwlzcGFyY19pcnFfY29uZmlnLmluaXRfdGltZXJzICAgICAgPSBzdW40ZF9pbml0X3RpbWVyczsKIAlzcGFyY19pcnFfY29uZmlnLmJ1aWxkX2RldmljZV9pcnEgPSBzdW40ZF9idWlsZF9kZXZpY2VfaXJxOwogCiAjaWZkZWYgQ09ORklHX1NNUApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGRfc21wLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9zbXAuYwppbmRleCA0NzVkNTBiLi4xMzMzODc5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9zbXAuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9zbXAuYwpAQCAtMzIsNiArMzIsNyBAQAogCXJldHVybiB2YWw7CiB9CiAKK3N0YXRpYyB2b2lkIHNtcDRkX2lwaV9pbml0KHZvaWQpOwogc3RhdGljIHZvaWQgc21wX3NldHVwX3BlcmNwdV90aW1lcih2b2lkKTsKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgY3B1X2xlZHNbMzJdOwpAQCAtODAsOCArODEsNiBAQAogCWxvY2FsX2ZsdXNoX2NhY2hlX2FsbCgpOwogCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKIAotCWNwdV9wcm9iZSgpOwotCiAJd2hpbGUgKCh1bnNpZ25lZCBsb25nKWN1cnJlbnRfc2V0W2NwdWlkXSA8IFBBR0VfT0ZGU0VUKQogCQliYXJyaWVyKCk7CiAKQEAgLTEwNSw3ICsxMDQsNyBAQAogCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwkvKiBXZSBkb24ndCBhbGxvdyBQSUwgMTQgeWV0ICovCiAKLQl3aGlsZSAoIWNwdV9pc3NldChjcHVpZCwgc21wX2NvbW1lbmNlZF9tYXNrKSkKKwl3aGlsZSAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1aWQsICZzbXBfY29tbWVuY2VkX21hc2spKQogCQliYXJyaWVyKCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc3VuNGRfaW1za19sb2NrLCBmbGFncyk7CkBAIC0xMjAsNiArMTE5LDcgQEAKICAqLwogdm9pZCBfX2luaXQgc21wNGRfYm9vdF9jcHVzKHZvaWQpCiB7CisJc21wNGRfaXBpX2luaXQoKTsKIAlpZiAoYm9vdF9jcHVfaWQpCiAJCWN1cnJlbnRfc2V0WzBdID0gTlVMTDsKIAlzbXBfc2V0dXBfcGVyY3B1X3RpbWVyKCk7CkBAIC0xOTEsNiArMTkxLDgwIEBACiAJc3VuNGRfZGlzdHJpYnV0ZV9pcnFzKCk7CiB9CiAKKy8qIE1lbW9yeSBzdHJ1Y3R1cmUgZ2l2aW5nIGludGVycnVwdCBoYW5kbGVyIGluZm9ybWF0aW9uIGFib3V0IElQSSBnZW5lcmF0ZWQgKi8KK3N0cnVjdCBzdW40ZF9pcGlfd29yayB7CisJaW50IHNpbmdsZTsKKwlpbnQgbXNrOworCWludCByZXNjaGVkOworfTsKKworc3RhdGljIERFRklORV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKHN0cnVjdCBzdW40ZF9pcGlfd29yaywgc3VuNGRfaXBpX3dvcmspOworCisvKiBJbml0aWFsaXplIElQSXMgb24gdGhlIFNVTjREIFNNUCBtYWNoaW5lICovCitzdGF0aWMgdm9pZCBfX2luaXQgc21wNGRfaXBpX2luaXQodm9pZCkKK3sKKwlpbnQgY3B1OworCXN0cnVjdCBzdW40ZF9pcGlfd29yayAqd29yazsKKworCXByaW50ayhLRVJOX0lORk8gInNtcDRkOiBzZXR1cCBJUEkgYXQgSVJRICVkXG4iLCBTVU40RF9JUElfSVJRKTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJd29yayA9ICZwZXJfY3B1KHN1bjRkX2lwaV93b3JrLCBjcHUpOworCQl3b3JrLT5zaW5nbGUgPSB3b3JrLT5tc2sgPSB3b3JrLT5yZXNjaGVkID0gMDsKKwl9Cit9CisKK3ZvaWQgc3VuNGRfaXBpX2ludGVycnVwdCh2b2lkKQoreworCXN0cnVjdCBzdW40ZF9pcGlfd29yayAqd29yayA9ICZfX2dldF9jcHVfdmFyKHN1bjRkX2lwaV93b3JrKTsKKworCWlmICh3b3JrLT5zaW5nbGUpIHsKKwkJd29yay0+c2luZ2xlID0gMDsKKwkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2ludGVycnVwdCgpOworCX0KKwlpZiAod29yay0+bXNrKSB7CisJCXdvcmstPm1zayA9IDA7CisJCXNtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdCgpOworCX0KKwlpZiAod29yay0+cmVzY2hlZCkgeworCQl3b3JrLT5yZXNjaGVkID0gMDsKKwkJc21wX3Jlc2NoZWRfaW50ZXJydXB0KCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzbXA0ZF9pcGlfc2luZ2xlKGludCBjcHUpCit7CisJc3RydWN0IHN1bjRkX2lwaV93b3JrICp3b3JrID0gJnBlcl9jcHUoc3VuNGRfaXBpX3dvcmssIGNwdSk7CisKKwkvKiBNYXJrIHdvcmsgKi8KKwl3b3JrLT5zaW5nbGUgPSAxOworCisJLyogR2VuZXJhdGUgSVJRIG9uIHRoZSBDUFUgKi8KKwlzdW40ZF9zZW5kX2lwaShjcHUsIFNVTjREX0lQSV9JUlEpOworfQorCitzdGF0aWMgdm9pZCBzbXA0ZF9pcGlfbWFza19vbmUoaW50IGNwdSkKK3sKKwlzdHJ1Y3Qgc3VuNGRfaXBpX3dvcmsgKndvcmsgPSAmcGVyX2NwdShzdW40ZF9pcGlfd29yaywgY3B1KTsKKworCS8qIE1hcmsgd29yayAqLworCXdvcmstPm1zayA9IDE7CisKKwkvKiBHZW5lcmF0ZSBJUlEgb24gdGhlIENQVSAqLworCXN1bjRkX3NlbmRfaXBpKGNwdSwgU1VONERfSVBJX0lSUSk7Cit9CisKK3N0YXRpYyB2b2lkIHNtcDRkX2lwaV9yZXNjaGVkKGludCBjcHUpCit7CisJc3RydWN0IHN1bjRkX2lwaV93b3JrICp3b3JrID0gJnBlcl9jcHUoc3VuNGRfaXBpX3dvcmssIGNwdSk7CisKKwkvKiBNYXJrIHdvcmsgKi8KKwl3b3JrLT5yZXNjaGVkID0gMTsKKworCS8qIEdlbmVyYXRlIElSUSBvbiB0aGUgQ1BVIChhbnkgSVJRIHdpbGwgY2F1c2UgcmVzY2hlZCkgKi8KKwlzdW40ZF9zZW5kX2lwaShjcHUsIFNVTjREX0lQSV9JUlEpOworfQorCiBzdGF0aWMgc3RydWN0IHNtcF9mdW5jYWxsIHsKIAlzbXBmdW5jX3QgZnVuYzsKIAl1bnNpZ25lZCBsb25nIGFyZzE7CkBAIC0yMzksMTAgKzMxMywxMCBAQAogCQl7CiAJCQlyZWdpc3RlciBpbnQgaTsKIAotCQkJY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgbWFzayk7Ci0JCQljcHVzX2FuZChtYXNrLCBjcHVfb25saW5lX21hcCwgbWFzayk7CisJCQljcHVtYXNrX2NsZWFyX2NwdShzbXBfcHJvY2Vzc29yX2lkKCksICZtYXNrKTsKKwkJCWNwdW1hc2tfYW5kKCZtYXNrLCBjcHVfb25saW5lX21hc2ssICZtYXNrKTsKIAkJCWZvciAoaSA9IDA7IGkgPD0gaGlnaDsgaSsrKSB7Ci0JCQkJaWYgKGNwdV9pc3NldChpLCBtYXNrKSkgeworCQkJCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGksICZtYXNrKSkgewogCQkJCQljY2FsbF9pbmZvLnByb2Nlc3NvcnNfaW5baV0gPSAwOwogCQkJCQljY2FsbF9pbmZvLnByb2Nlc3NvcnNfb3V0W2ldID0gMDsKIAkJCQkJc3VuNGRfc2VuZF9pcGkoaSwgSVJRX0NST1NTX0NBTEwpOwpAQCAtMjU1LDcgKzMyOSw3IEBACiAKIAkJCWkgPSAwOwogCQkJZG8gewotCQkJCWlmICghY3B1X2lzc2V0KGksIG1hc2spKQorCQkJCWlmICghY3B1bWFza190ZXN0X2NwdShpLCAmbWFzaykpCiAJCQkJCWNvbnRpbnVlOwogCQkJCXdoaWxlICghY2NhbGxfaW5mby5wcm9jZXNzb3JzX2luW2ldKQogCQkJCQliYXJyaWVyKCk7CkBAIC0yNjMsNyArMzM3LDcgQEAKIAogCQkJaSA9IDA7CiAJCQlkbyB7Ci0JCQkJaWYgKCFjcHVfaXNzZXQoaSwgbWFzaykpCisJCQkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGksICZtYXNrKSkKIAkJCQkJY29udGludWU7CiAJCQkJd2hpbGUgKCFjY2FsbF9pbmZvLnByb2Nlc3NvcnNfb3V0W2ldKQogCQkJCQliYXJyaWVyKCk7CkBAIC0zNTYsNiArNDMwLDkgQEAKIAlCVEZJWFVQU0VUX0JMQUNLQk9YKGxvYWRfY3VycmVudCwgc21wNGRfYmxhY2tib3hfY3VycmVudCk7CiAJQlRGSVhVUFNFVF9DQUxMKHNtcF9jcm9zc19jYWxsLCBzbXA0ZF9jcm9zc19jYWxsLCBCVEZJWFVQQ0FMTF9OT1JNKTsKIAlCVEZJWFVQU0VUX0NBTEwoX19oYXJkX3NtcF9wcm9jZXNzb3JfaWQsIF9fc21wNGRfcHJvY2Vzc29yX2lkLCBCVEZJWFVQQ0FMTF9OT1JNKTsKKwlCVEZJWFVQU0VUX0NBTEwoc21wX2lwaV9yZXNjaGVkLCBzbXA0ZF9pcGlfcmVzY2hlZCwgQlRGSVhVUENBTExfTk9STSk7CisJQlRGSVhVUFNFVF9DQUxMKHNtcF9pcGlfc2luZ2xlLCBzbXA0ZF9pcGlfc2luZ2xlLCBCVEZJWFVQQ0FMTF9OT1JNKTsKKwlCVEZJWFVQU0VUX0NBTEwoc21wX2lwaV9tYXNrX29uZSwgc21wNGRfaXBpX21hc2tfb25lLCBCVEZJWFVQQ0FMTF9OT1JNKTsKIAogCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsKIAkJY2NhbGxfaW5mby5wcm9jZXNzb3JzX2luW2ldID0gMTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N1bjRtX2lycS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNG1faXJxLmMKaW5kZXggNjlkZjYyNS4uNDIyYzE2ZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNG1faXJxLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNG1faXJxLmMKQEAgLTEwMCw2ICsxMDAsMTEgQEAKIHN0cnVjdCBzdW40bV9pcnFfcGVyY3B1IF9faW9tZW0gKnN1bjRtX2lycV9wZXJjcHVbU1VONE1fTkNQVVNdOwogc3RydWN0IHN1bjRtX2lycV9nbG9iYWwgX19pb21lbSAqc3VuNG1faXJxX2dsb2JhbDsKIAorc3RydWN0IHN1bjRtX2hhbmRsZXJfZGF0YSB7CisJYm9vbCAgICBwZXJjcHU7CisJbG9uZyAgICBtYXNrOworfTsKKwogLyogRGF2ZSBSZWRtYW4gKGRqaHJAdGFkcG9sZS5jby51aykKICAqIFRoZSBzdW40bSBpbnRlcnJ1cHQgcmVnaXN0ZXJzLgogICovCkBAIC0xNDIsOSArMTQ3LDkgQEAKICNkZWZpbmUJT0JQX0lOVF9MRVZFTF9WTUUJMHg0MAogCiAjZGVmaW5lIFNVTjRNX1RJTUVSX0lSUSAgICAgICAgIChPQlBfSU5UX0xFVkVMX09OQk9BUkQgfCAxMCkKLSNkZWZpbmUgU1VNNE1fUFJPRklMRV9JUlEgICAgICAgKE9CUF9JTlRfTEVWRUxfT05CT0FSRCB8IDE0KQorI2RlZmluZSBTVU40TV9QUk9GSUxFX0lSUSAgICAgICAoT0JQX0lOVF9MRVZFTF9PTkJPQVJEIHwgMTQpCiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGlycV9tYXNrWzB4NTBdID0geworc3RhdGljIHVuc2lnbmVkIGxvbmcgc3VuNG1faW1hc2tbMHg1MF0gPSB7CiAJLyogMHgwMCAtIFNNUCAqLwogCTAsICBTVU40TV9TT0ZUX0lOVCgxKSwKIAlTVU40TV9TT0ZUX0lOVCgyKSwgIFNVTjRNX1NPRlRfSU5UKDMpLApAQCAtMTY5LDcgKzE3NCw3IEBACiAJU1VONE1fSU5UX1ZJREVPLCBTVU40TV9JTlRfTU9EVUxFLAogCVNVTjRNX0lOVF9SRUFMVElNRSwgU1VONE1fSU5UX0ZMT1BQWSwKIAkoU1VONE1fSU5UX1NFUklBTCB8IFNVTjRNX0lOVF9LQkRNUyksCi0JU1VONE1fSU5UX0FVRElPLCAwLCBTVU40TV9JTlRfTU9EVUxFX0VSUiwKKwlTVU40TV9JTlRfQVVESU8sIFNVTjRNX0lOVF9FMTQsIFNVTjRNX0lOVF9NT0RVTEVfRVJSLAogCS8qIDB4MzAgLSBzYnVzICovCiAJMCwgMCwgU1VONE1fSU5UX1NCVVMoMCksIFNVTjRNX0lOVF9TQlVTKDEpLAogCTAsIFNVTjRNX0lOVF9TQlVTKDIpLCAwLCBTVU40TV9JTlRfU0JVUygzKSwKQEAgLTE4MiwxMDUgKzE4NywxMTAgQEAKIAkwLCBTVU40TV9JTlRfVk1FKDYpLCAwLCAwCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzdW40bV9nZXRfaXJxbWFzayh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgc3VuNG1fbWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQogewotCXVuc2lnbmVkIGxvbmcgbWFzazsKLQotCWlmIChpcnEgPCAweDUwKQotCQltYXNrID0gaXJxX21hc2tbaXJxXTsKLQllbHNlCi0JCW1hc2sgPSAwOwotCi0JaWYgKCFtYXNrKQotCQlwcmludGsoS0VSTl9FUlIgInN1bjRtX2dldF9pcnFtYXNrOiBJUlElZCBoYXMgbm8gdmFsaWQgbWFzayFcbiIsCi0JCSAgICAgICBpcnEpOwotCi0JcmV0dXJuIG1hc2s7Ci19Ci0KLXN0YXRpYyB2b2lkIHN1bjRtX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnFfbnIpCi17Ci0JdW5zaWduZWQgbG9uZyBtYXNrLCBmbGFnczsKKwlzdHJ1Y3Qgc3VuNG1faGFuZGxlcl9kYXRhICpoYW5kbGVyX2RhdGEgPSBkYXRhLT5oYW5kbGVyX2RhdGE7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAotCW1hc2sgPSBzdW40bV9nZXRfaXJxbWFzayhpcnFfbnIpOwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlpZiAoaXJxX25yID4gMTUpCi0JCXNidXNfd3JpdGVsKG1hc2ssICZzdW40bV9pcnFfZ2xvYmFsLT5tYXNrX3NldCk7Ci0JZWxzZQotCQlzYnVzX3dyaXRlbChtYXNrLCAmc3VuNG1faXJxX3BlcmNwdVtjcHVdLT5zZXQpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KKwlpZiAoaGFuZGxlcl9kYXRhLT5tYXNrKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLXN0YXRpYyB2b2lkIHN1bjRtX2VuYWJsZV9pcnEodW5zaWduZWQgaW50IGlycV9ucikKLXsKLQl1bnNpZ25lZCBsb25nIG1hc2ssIGZsYWdzOwotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQkvKiBEcmVhZGZ1bCBmbG9wcHkgaGFjay4gV2hlbiB3ZSB1c2UgMHgyYiBpbnN0ZWFkIG9mCi0JICogMHgwYiB0aGUgc3lzdGVtIGJsb3dzIChpdCBzdGFydHMgdG8gd2hpc3RsZSEpLgotCSAqIFNvIHdlIGNvbnRpbnVlIHRvIHVzZSAweDBiLiBGaXhtZSBBU0FQLiAtLVAzCi0JICovCi0JaWYgKGlycV9uciAhPSAweDBiKSB7Ci0JCW1hc2sgPSBzdW40bV9nZXRfaXJxbWFzayhpcnFfbnIpOwogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCWlmIChpcnFfbnIgPiAxNSkKLQkJCXNidXNfd3JpdGVsKG1hc2ssICZzdW40bV9pcnFfZ2xvYmFsLT5tYXNrX2NsZWFyKTsKLQkJZWxzZQotCQkJc2J1c193cml0ZWwobWFzaywgJnN1bjRtX2lycV9wZXJjcHVbY3B1XS0+Y2xlYXIpOwotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JfSBlbHNlIHsKLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQlzYnVzX3dyaXRlbChTVU40TV9JTlRfRkxPUFBZLCAmc3VuNG1faXJxX2dsb2JhbC0+bWFza19jbGVhcik7CisJCWlmIChoYW5kbGVyX2RhdGEtPnBlcmNwdSkgeworCQkJc2J1c193cml0ZWwoaGFuZGxlcl9kYXRhLT5tYXNrLCAmc3VuNG1faXJxX3BlcmNwdVtjcHVdLT5zZXQpOworCQl9IGVsc2UgeworCQkJc2J1c193cml0ZWwoaGFuZGxlcl9kYXRhLT5tYXNrLCAmc3VuNG1faXJxX2dsb2JhbC0+bWFza19zZXQpOworCQl9CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAl9CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNwdV9waWxfdG9faW1hc2tbMTZdID0gewotLyowKi8JMHgwMDAwMDAwMCwKLS8qMSovCTB4MDAwMDAwMDAsCi0vKjIqLwlTVU40TV9JTlRfU0JVUygwKSB8IFNVTjRNX0lOVF9WTUUoMCksCi0vKjMqLwlTVU40TV9JTlRfU0JVUygxKSB8IFNVTjRNX0lOVF9WTUUoMSksCi0vKjQqLwlTVU40TV9JTlRfU0NTSSwKLS8qNSovCVNVTjRNX0lOVF9TQlVTKDIpIHwgU1VONE1fSU5UX1ZNRSgyKSwKLS8qNiovCVNVTjRNX0lOVF9FVEhFUk5FVCwKLS8qNyovCVNVTjRNX0lOVF9TQlVTKDMpIHwgU1VONE1fSU5UX1ZNRSgzKSwKLS8qOCovCVNVTjRNX0lOVF9WSURFTywKLS8qOSovCVNVTjRNX0lOVF9TQlVTKDQpIHwgU1VONE1fSU5UX1ZNRSg0KSB8IFNVTjRNX0lOVF9NT0RVTEVfRVJSLAotLyoxMCovCVNVTjRNX0lOVF9SRUFMVElNRSwKLS8qMTEqLwlTVU40TV9JTlRfU0JVUyg1KSB8IFNVTjRNX0lOVF9WTUUoNSkgfCBTVU40TV9JTlRfRkxPUFBZLAotLyoxMiovCVNVTjRNX0lOVF9TRVJJQUwgIHwgU1VONE1fSU5UX0tCRE1TLAotLyoxMyovCVNVTjRNX0lOVF9TQlVTKDYpIHwgU1VONE1fSU5UX1ZNRSg2KSB8IFNVTjRNX0lOVF9BVURJTywKLS8qMTQqLwlTVU40TV9JTlRfRTE0LAotLyoxNSovCVNVTjRNX0lOVF9FUlJPUiwKLX07Ci0KLS8qIFdlIGFzc3VtZSB0aGUgY2FsbGVyIGhhcyBkaXNhYmxlZCBsb2NhbCBpbnRlcnJ1cHRzIHdoZW4gdGhlc2UgYXJlIGNhbGxlZCwKLSAqIG9yIGVsc2UgdmVyeSBiaXphcnJlIGJlaGF2aW9yIHdpbGwgcmVzdWx0LgotICovCi1zdGF0aWMgdm9pZCBzdW40bV9kaXNhYmxlX3BpbF9pcnEodW5zaWduZWQgaW50IHBpbCkKK3N0YXRpYyB2b2lkIHN1bjRtX3VubWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQogewotCXNidXNfd3JpdGVsKGNwdV9waWxfdG9faW1hc2tbcGlsXSwgJnN1bjRtX2lycV9nbG9iYWwtPm1hc2tfc2V0KTsKKwlzdHJ1Y3Qgc3VuNG1faGFuZGxlcl9kYXRhICpoYW5kbGVyX2RhdGEgPSBkYXRhLT5oYW5kbGVyX2RhdGE7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCWlmIChoYW5kbGVyX2RhdGEtPm1hc2spIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCWlmIChoYW5kbGVyX2RhdGEtPnBlcmNwdSkgeworCQkJc2J1c193cml0ZWwoaGFuZGxlcl9kYXRhLT5tYXNrLCAmc3VuNG1faXJxX3BlcmNwdVtjcHVdLT5jbGVhcik7CisJCX0gZWxzZSB7CisJCQlzYnVzX3dyaXRlbChoYW5kbGVyX2RhdGEtPm1hc2ssICZzdW40bV9pcnFfZ2xvYmFsLT5tYXNrX2NsZWFyKTsKKwkJfQorCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJfQogfQogCi1zdGF0aWMgdm9pZCBzdW40bV9lbmFibGVfcGlsX2lycSh1bnNpZ25lZCBpbnQgcGlsKQorc3RhdGljIHVuc2lnbmVkIGludCBzdW40bV9zdGFydHVwX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7Ci0Jc2J1c193cml0ZWwoY3B1X3BpbF90b19pbWFza1twaWxdLCAmc3VuNG1faXJxX2dsb2JhbC0+bWFza19jbGVhcik7CisJaXJxX2xpbmsoZGF0YS0+aXJxKTsKKwlzdW40bV91bm1hc2tfaXJxKGRhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzdW40bV9zaHV0ZG93bl9pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQoreworCXN1bjRtX21hc2tfaXJxKGRhdGEpOworCWlycV91bmxpbmsoZGF0YS0+aXJxKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzdW40bV9pcnEgPSB7CisJLm5hbWUJCT0gInN1bjRtIiwKKwkuaXJxX3N0YXJ0dXAJPSBzdW40bV9zdGFydHVwX2lycSwKKwkuaXJxX3NodXRkb3duCT0gc3VuNG1fc2h1dGRvd25faXJxLAorCS5pcnFfbWFzawk9IHN1bjRtX21hc2tfaXJxLAorCS5pcnFfdW5tYXNrCT0gc3VuNG1fdW5tYXNrX2lycSwKK307CisKKworc3RhdGljIHVuc2lnbmVkIGludCBzdW40bV9idWlsZF9kZXZpY2VfaXJxKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgcmVhbF9pcnEpCit7CisJc3RydWN0IHN1bjRtX2hhbmRsZXJfZGF0YSAqaGFuZGxlcl9kYXRhOworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgaW50IHBpbDsKKworCWlmIChyZWFsX2lycSA+PSBPQlBfSU5UX0xFVkVMX1ZNRSkgeworCQlwcm9tX3ByaW50ZigiQm9ndXMgc3VuNG0gSVJRICV1XG4iLCByZWFsX2lycSk7CisJCXByb21faGFsdCgpOworCX0KKwlwaWwgPSAocmVhbF9pcnEgJiAweGYpOworCWlycSA9IGlycV9hbGxvYyhyZWFsX2lycSwgcGlsKTsKKworCWlmIChpcnEgPT0gMCkKKwkJZ290byBvdXQ7CisKKwloYW5kbGVyX2RhdGEgPSBpcnFfZ2V0X2hhbmRsZXJfZGF0YShpcnEpOworCWlmICh1bmxpa2VseShoYW5kbGVyX2RhdGEpKQorCQlnb3RvIG91dDsKKworCWhhbmRsZXJfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzdW40bV9oYW5kbGVyX2RhdGEpLCBHRlBfQVRPTUlDKTsKKwlpZiAodW5saWtlbHkoIWhhbmRsZXJfZGF0YSkpIHsKKwkJcHJvbV9wcmludGYoIklSUToga3phbGxvYyhzdW40bV9oYW5kbGVyX2RhdGEpIGZhaWxlZC5cbiIpOworCQlwcm9tX2hhbHQoKTsKKwl9CisKKwloYW5kbGVyX2RhdGEtPm1hc2sgPSBzdW40bV9pbWFza1tyZWFsX2lycV07CisJaGFuZGxlcl9kYXRhLT5wZXJjcHUgPSByZWFsX2lycSA8IE9CUF9JTlRfTEVWRUxfT05CT0FSRDsKKwlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZzdW40bV9pcnEsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlX2xldmVsX2lycSwgImxldmVsIik7CisJaXJxX3NldF9oYW5kbGVyX2RhdGEoaXJxLCBoYW5kbGVyX2RhdGEpOworCitvdXQ6CisJcmV0dXJuIGlycTsKIH0KIAogI2lmZGVmIENPTkZJR19TTVAKIHN0YXRpYyB2b2lkIHN1bjRtX3NlbmRfaXBpKGludCBjcHUsIGludCBsZXZlbCkKIHsKLQl1bnNpZ25lZCBsb25nIG1hc2sgPSBzdW40bV9nZXRfaXJxbWFzayhsZXZlbCk7Ci0KLQlzYnVzX3dyaXRlbChtYXNrLCAmc3VuNG1faXJxX3BlcmNwdVtjcHVdLT5zZXQpOworCXNidXNfd3JpdGVsKFNVTjRNX1NPRlRfSU5UKGxldmVsKSwgJnN1bjRtX2lycV9wZXJjcHVbY3B1XS0+c2V0KTsKIH0KIAogc3RhdGljIHZvaWQgc3VuNG1fY2xlYXJfaXBpKGludCBjcHUsIGludCBsZXZlbCkKIHsKLQl1bnNpZ25lZCBsb25nIG1hc2sgPSBzdW40bV9nZXRfaXJxbWFzayhsZXZlbCk7Ci0KLQlzYnVzX3dyaXRlbChtYXNrLCAmc3VuNG1faXJxX3BlcmNwdVtjcHVdLT5jbGVhcik7CisJc2J1c193cml0ZWwoU1VONE1fU09GVF9JTlQobGV2ZWwpLCAmc3VuNG1faXJxX3BlcmNwdVtjcHVdLT5jbGVhcik7CiB9CiAKIHN0YXRpYyB2b2lkIHN1bjRtX3NldF91ZHQoaW50IGNwdSkKQEAgLTM0Myw3ICszNTMsMTUgQEAKIAlwcm9tX2hhbHQoKTsKIH0KIAotLyogRXhwb3J0ZWQgZm9yIHN1bjRtX3NtcC5jICovCit2b2lkIHN1bjRtX3VubWFza19wcm9maWxlX2lycSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJc2J1c193cml0ZWwoc3VuNG1faW1hc2tbU1VONE1fUFJPRklMRV9JUlFdLCAmc3VuNG1faXJxX2dsb2JhbC0+bWFza19jbGVhcik7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCiB2b2lkIHN1bjRtX2NsZWFyX3Byb2ZpbGVfaXJxKGludCBjcHUpCiB7CiAJc2J1c19yZWFkbCgmdGltZXJzX3BlcmNwdVtjcHVdLT5sMTRfbGltaXQpOwpAQCAtMzU4LDYgKzM3Niw3IEBACiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpkcCA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJjb3VudGVyIik7CiAJaW50IGksIGVyciwgbGVuLCBudW1fY3B1X3RpbWVyczsKKwl1bnNpZ25lZCBpbnQgaXJxOwogCWNvbnN0IHUzMiAqYWRkcjsKIAogCWlmICghZHApIHsKQEAgLTM4NCw4ICs0MDMsOSBAQAogCiAJbWFzdGVyX2wxMF9jb3VudGVyID0gJnRpbWVyc19nbG9iYWwtPmwxMF9jb3VudDsKIAotCWVyciA9IHJlcXVlc3RfaXJxKFNVTjRNX1RJTUVSX0lSUSwgY291bnRlcl9mbiwKLQkJCSAgKElSUUZfRElTQUJMRUQgfCBTQV9TVEFUSUNfQUxMT0MpLCAidGltZXIiLCBOVUxMKTsKKwlpcnEgPSBzdW40bV9idWlsZF9kZXZpY2VfaXJxKE5VTEwsIFNVTjRNX1RJTUVSX0lSUSk7CisKKwllcnIgPSByZXF1ZXN0X2lycShpcnEsIGNvdW50ZXJfZm4sIElSUUZfVElNRVIsICJ0aW1lciIsIE5VTEwpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJzdW40bV9pbml0X3RpbWVyczogUmVnaXN0ZXIgSVJRIGVycm9yICVkLlxuIiwKIAkJCWVycik7CkBAIC00NTIsMTQgKzQ3MiwxMSBAQAogCWlmIChudW1fY3B1X2lyZWdzID09IDQpCiAJCXNidXNfd3JpdGVsKDAsICZzdW40bV9pcnFfZ2xvYmFsLT5pbnRlcnJ1cHRfdGFyZ2V0KTsKIAotCUJURklYVVBTRVRfQ0FMTChlbmFibGVfaXJxLCBzdW40bV9lbmFibGVfaXJxLCBCVEZJWFVQQ0FMTF9OT1JNKTsKLQlCVEZJWFVQU0VUX0NBTEwoZGlzYWJsZV9pcnEsIHN1bjRtX2Rpc2FibGVfaXJxLCBCVEZJWFVQQ0FMTF9OT1JNKTsKLQlCVEZJWFVQU0VUX0NBTEwoZW5hYmxlX3BpbF9pcnEsIHN1bjRtX2VuYWJsZV9waWxfaXJxLCBCVEZJWFVQQ0FMTF9OT1JNKTsKLQlCVEZJWFVQU0VUX0NBTEwoZGlzYWJsZV9waWxfaXJxLCBzdW40bV9kaXNhYmxlX3BpbF9pcnEsIEJURklYVVBDQUxMX05PUk0pOwogCUJURklYVVBTRVRfQ0FMTChjbGVhcl9jbG9ja19pcnEsIHN1bjRtX2NsZWFyX2Nsb2NrX2lycSwgQlRGSVhVUENBTExfTk9STSk7CiAJQlRGSVhVUFNFVF9DQUxMKGxvYWRfcHJvZmlsZV9pcnEsIHN1bjRtX2xvYWRfcHJvZmlsZV9pcnEsIEJURklYVVBDQUxMX05PUk0pOwogCiAJc3BhcmNfaXJxX2NvbmZpZy5pbml0X3RpbWVycyA9IHN1bjRtX2luaXRfdGltZXJzOworCXNwYXJjX2lycV9jb25maWcuYnVpbGRfZGV2aWNlX2lycSA9IHN1bjRtX2J1aWxkX2RldmljZV9pcnE7CiAKICNpZmRlZiBDT05GSUdfU01QCiAJQlRGSVhVUFNFVF9DQUxMKHNldF9jcHVfaW50LCBzdW40bV9zZW5kX2lwaSwgQlRGSVhVUENBTExfTk9STSk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zdW40bV9zbXAuYyBiL2FyY2gvc3BhcmMva2VybmVsL3N1bjRtX3NtcC5jCmluZGV4IDVjYzdkYzUuLjU5NDc2ODYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N1bjRtX3NtcC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N1bjRtX3NtcC5jCkBAIC0xNSw2ICsxNSw5IEBACiAjaW5jbHVkZSAiaXJxLmgiCiAjaW5jbHVkZSAia2VybmVsLmgiCiAKKyNkZWZpbmUgSVJRX0lQSV9TSU5HTEUJCTEyCisjZGVmaW5lIElSUV9JUElfTUFTSwkJMTMKKyNkZWZpbmUgSVJRX0lQSV9SRVNDSEVECQkxNAogI2RlZmluZSBJUlFfQ1JPU1NfQ0FMTAkJMTUKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCkBAIC0yNiw2ICsyOSw3IEBACiAJcmV0dXJuIHZhbDsKIH0KIAorc3RhdGljIHZvaWQgc21wNG1faXBpX2luaXQodm9pZCk7CiBzdGF0aWMgdm9pZCBzbXBfc2V0dXBfcGVyY3B1X3RpbWVyKHZvaWQpOwogCiB2b2lkIF9fY3B1aW5pdCBzbXA0bV9jYWxsaW4odm9pZCkKQEAgLTU5LDggKzYzLDYgQEAKIAlsb2NhbF9mbHVzaF9jYWNoZV9hbGwoKTsKIAlsb2NhbF9mbHVzaF90bGJfYWxsKCk7CiAKLQljcHVfcHJvYmUoKTsKLQogCS8qIEZpeCBpZGxlIHRocmVhZCBmaWVsZHMuICovCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkIFslMF0sICUlZzZcblx0IgogCQkJICAgICA6IDogInIiICgmY3VycmVudF9zZXRbY3B1aWRdKQpAQCAtNzAsNyArNzIsNyBAQAogCWF0b21pY19pbmMoJmluaXRfbW0ubW1fY291bnQpOwogCWN1cnJlbnQtPmFjdGl2ZV9tbSA9ICZpbml0X21tOwogCi0Jd2hpbGUgKCFjcHVfaXNzZXQoY3B1aWQsIHNtcF9jb21tZW5jZWRfbWFzaykpCisJd2hpbGUgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdWlkLCAmc21wX2NvbW1lbmNlZF9tYXNrKSkKIAkJbWIoKTsKIAogCWxvY2FsX2lycV9lbmFibGUoKTsKQEAgLTgzLDYgKzg1LDcgQEAKICAqLwogdm9pZCBfX2luaXQgc21wNG1fYm9vdF9jcHVzKHZvaWQpCiB7CisJc21wNG1faXBpX2luaXQoKTsKIAlzbXBfc2V0dXBfcGVyY3B1X3RpbWVyKCk7CiAJbG9jYWxfZmx1c2hfY2FjaGVfYWxsKCk7CiB9CkBAIC0xNTAsMTggKzE1MywyNSBAQAogCS8qIE9rLCB0aGV5IGFyZSBzcGlubmluZyBhbmQgcmVhZHkgdG8gZ28uICovCiB9CiAKLS8qIEF0IGVhY2ggaGFyZHdhcmUgSVJRLCB3ZSBnZXQgdGhpcyBjYWxsZWQgdG8gZm9yd2FyZCBJUlEgcmVjZXB0aW9uCi0gKiB0byB0aGUgbmV4dCBwcm9jZXNzb3IuICBUaGUgY2FsbGVyIG11c3QgZGlzYWJsZSB0aGUgSVJRIGxldmVsIGJlaW5nCi0gKiBzZXJ2aWNlZCBnbG9iYWxseSBzbyB0aGF0IHRoZXJlIGFyZSBubyBkb3VibGUgaW50ZXJydXB0cyByZWNlaXZlZC4KLSAqCi0gKiBYWFggU2VlIHNwYXJjNjQgaXJxLmMuCi0gKi8KLXZvaWQgc21wNG1faXJxX3JvdGF0ZShpbnQgY3B1KQotewotCWludCBuZXh0ID0gY3B1X2RhdGEoY3B1KS5uZXh0OwogCi0JaWYgKG5leHQgIT0gY3B1KQotCQlzZXRfaXJxX3VkdChuZXh0KTsKKy8qIEluaXRpYWxpemUgSVBJcyBvbiB0aGUgU1VONE0gU01QIG1hY2hpbmUgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBzbXA0bV9pcGlfaW5pdCh2b2lkKQoreworfQorCitzdGF0aWMgdm9pZCBzbXA0bV9pcGlfcmVzY2hlZChpbnQgY3B1KQoreworCXNldF9jcHVfaW50KGNwdSwgSVJRX0lQSV9SRVNDSEVEKTsKK30KKworc3RhdGljIHZvaWQgc21wNG1faXBpX3NpbmdsZShpbnQgY3B1KQoreworCXNldF9jcHVfaW50KGNwdSwgSVJRX0lQSV9TSU5HTEUpOworfQorCitzdGF0aWMgdm9pZCBzbXA0bV9pcGlfbWFza19vbmUoaW50IGNwdSkKK3sKKwlzZXRfY3B1X2ludChjcHUsIElSUV9JUElfTUFTSyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc21wX2Z1bmNhbGwgewpAQCAtMTk5LDEwICsyMDksMTAgQEAKIAkJewogCQkJcmVnaXN0ZXIgaW50IGk7CiAKLQkJCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIG1hc2spOwotCQkJY3B1c19hbmQobWFzaywgY3B1X29ubGluZV9tYXAsIG1hc2spOworCQkJY3B1bWFza19jbGVhcl9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpLCAmbWFzayk7CisJCQljcHVtYXNrX2FuZCgmbWFzaywgY3B1X29ubGluZV9tYXNrLCAmbWFzayk7CiAJCQlmb3IgKGkgPSAwOyBpIDwgbmNwdXM7IGkrKykgewotCQkJCWlmIChjcHVfaXNzZXQoaSwgbWFzaykpIHsKKwkJCQlpZiAoY3B1bWFza190ZXN0X2NwdShpLCAmbWFzaykpIHsKIAkJCQkJY2NhbGxfaW5mby5wcm9jZXNzb3JzX2luW2ldID0gMDsKIAkJCQkJY2NhbGxfaW5mby5wcm9jZXNzb3JzX291dFtpXSA9IDA7CiAJCQkJCXNldF9jcHVfaW50KGksIElSUV9DUk9TU19DQUxMKTsKQEAgLTIxOCw3ICsyMjgsNyBAQAogCiAJCQlpID0gMDsKIAkJCWRvIHsKLQkJCQlpZiAoIWNwdV9pc3NldChpLCBtYXNrKSkKKwkJCQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoaSwgJm1hc2spKQogCQkJCQljb250aW51ZTsKIAkJCQl3aGlsZSAoIWNjYWxsX2luZm8ucHJvY2Vzc29yc19pbltpXSkKIAkJCQkJYmFycmllcigpOwpAQCAtMjI2LDcgKzIzNiw3IEBACiAKIAkJCWkgPSAwOwogCQkJZG8gewotCQkJCWlmICghY3B1X2lzc2V0KGksIG1hc2spKQorCQkJCWlmICghY3B1bWFza190ZXN0X2NwdShpLCAmbWFzaykpCiAJCQkJCWNvbnRpbnVlOwogCQkJCXdoaWxlICghY2NhbGxfaW5mby5wcm9jZXNzb3JzX291dFtpXSkKIAkJCQkJYmFycmllcigpOwpAQCAtMjc3LDcgKzI4Nyw3IEBACiAJbG9hZF9wcm9maWxlX2lycShjcHUsIGx2bDE0X3Jlc29sdXRpb24pOwogCiAJaWYgKGNwdSA9PSBib290X2NwdV9pZCkKLQkJZW5hYmxlX3BpbF9pcnEoMTQpOworCQlzdW40bV91bm1hc2tfcHJvZmlsZV9pcnEoKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHNtcDRtX2JsYWNrYm94X2lkKHVuc2lnbmVkICphZGRyKQpAQCAtMzA2LDQgKzMxNiw3IEBACiAJQlRGSVhVUFNFVF9CTEFDS0JPWChsb2FkX2N1cnJlbnQsIHNtcDRtX2JsYWNrYm94X2N1cnJlbnQpOwogCUJURklYVVBTRVRfQ0FMTChzbXBfY3Jvc3NfY2FsbCwgc21wNG1fY3Jvc3NfY2FsbCwgQlRGSVhVUENBTExfTk9STSk7CiAJQlRGSVhVUFNFVF9DQUxMKF9faGFyZF9zbXBfcHJvY2Vzc29yX2lkLCBfX3NtcDRtX3Byb2Nlc3Nvcl9pZCwgQlRGSVhVUENBTExfTk9STSk7CisJQlRGSVhVUFNFVF9DQUxMKHNtcF9pcGlfcmVzY2hlZCwgc21wNG1faXBpX3Jlc2NoZWQsIEJURklYVVBDQUxMX05PUk0pOworCUJURklYVVBTRVRfQ0FMTChzbXBfaXBpX3NpbmdsZSwgc21wNG1faXBpX3NpbmdsZSwgQlRGSVhVUENBTExfTk9STSk7CisJQlRGSVhVUFNFVF9DQUxMKHNtcF9pcGlfbWFza19vbmUsIHNtcDRtX2lwaV9tYXNrX29uZSwgQlRGSVhVUENBTExfTk9STSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXNmcy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzZnMuYwppbmRleCAxZWI4YjAwLi43NDA4MjAxIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXNmcy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c2ZzLmMKQEAgLTEwMyw5ICsxMDMsMTAgQEAKIAkJCSAgICAgICAgdW5zaWduZWQgbG9uZyAoKmZ1bmMpKHVuc2lnbmVkIGxvbmcpLAogCQkJCXVuc2lnbmVkIGxvbmcgYXJnKQogewotCWNwdW1hc2tfdCBvbGRfYWZmaW5pdHkgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7CisJY3B1bWFza190IG9sZF9hZmZpbml0eTsKIAl1bnNpZ25lZCBsb25nIHJldDsKIAorCWNwdW1hc2tfY29weSgmb2xkX2FmZmluaXR5LCB0c2tfY3B1c19hbGxvd2VkKGN1cnJlbnQpKTsKIAkvKiBzaG91bGQgcmV0dXJuIC1FSU5WQUwgdG8gdXNlcnNwYWNlICovCiAJaWYgKHNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsIGNwdW1hc2tfb2YoY3B1KSkpCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJsc18zMi5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJsc18zMi5TCmluZGV4IDQ3YWM3M2MuLjMzMmM4M2YgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfMzIuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzXzMyLlMKQEAgLTg0LDQgKzg0LDQgQEAKIC8qMzIwKi8JLmxvbmcgc3lzX2R1cDMsIHN5c19waXBlMiwgc3lzX2lub3RpZnlfaW5pdDEsIHN5c19hY2NlcHQ0LCBzeXNfcHJlYWR2CiAvKjMyNSovCS5sb25nIHN5c19wd3JpdGV2LCBzeXNfcnRfdGdzaWdxdWV1ZWluZm8sIHN5c19wZXJmX2V2ZW50X29wZW4sIHN5c19yZWN2bW1zZywgc3lzX2Zhbm90aWZ5X2luaXQKIC8qMzMwKi8JLmxvbmcgc3lzX2Zhbm90aWZ5X21hcmssIHN5c19wcmxpbWl0NjQsIHN5c19uYW1lX3RvX2hhbmRsZV9hdCwgc3lzX29wZW5fYnlfaGFuZGxlX2F0LCBzeXNfY2xvY2tfYWRqdGltZQotLyozMzUqLwkubG9uZyBzeXNfc3luY2ZzCisvKjMzNSovCS5sb25nIHN5c19zeW5jZnMsIHN5c19zZW5kbW1zZwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJsc182NC5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJsc182NC5TCmluZGV4IDRmMzE3MGMuLjQzODg3Y2EgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfNjQuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzXzY0LlMKQEAgLTg1LDcgKzg1LDcgQEAKIC8qMzIwKi8JLndvcmQgc3lzX2R1cDMsIHN5c19waXBlMiwgc3lzX2lub3RpZnlfaW5pdDEsIHN5c19hY2NlcHQ0LCBjb21wYXRfc3lzX3ByZWFkdgogCS53b3JkIGNvbXBhdF9zeXNfcHdyaXRldiwgY29tcGF0X3N5c19ydF90Z3NpZ3F1ZXVlaW5mbywgc3lzX3BlcmZfZXZlbnRfb3BlbiwgY29tcGF0X3N5c19yZWN2bW1zZywgc3lzX2Zhbm90aWZ5X2luaXQKIC8qMzMwKi8JLndvcmQgc3lzMzJfZmFub3RpZnlfbWFyaywgc3lzX3BybGltaXQ2NCwgc3lzX25hbWVfdG9faGFuZGxlX2F0LCBjb21wYXRfc3lzX29wZW5fYnlfaGFuZGxlX2F0LCBjb21wYXRfc3lzX2Nsb2NrX2FkanRpbWUKLQkud29yZCBzeXNfc3luY2ZzCisJLndvcmQgc3lzX3N5bmNmcywgY29tcGF0X3N5c19zZW5kbW1zZwogCiAjZW5kaWYgLyogQ09ORklHX0NPTVBBVCAqLwogCkBAIC0xNjIsNCArMTYyLDQgQEAKIC8qMzIwKi8JLndvcmQgc3lzX2R1cDMsIHN5c19waXBlMiwgc3lzX2lub3RpZnlfaW5pdDEsIHN5c19hY2NlcHQ0LCBzeXNfcHJlYWR2CiAJLndvcmQgc3lzX3B3cml0ZXYsIHN5c19ydF90Z3NpZ3F1ZXVlaW5mbywgc3lzX3BlcmZfZXZlbnRfb3Blbiwgc3lzX3JlY3ZtbXNnLCBzeXNfZmFub3RpZnlfaW5pdAogLyozMzAqLwkud29yZCBzeXNfZmFub3RpZnlfbWFyaywgc3lzX3BybGltaXQ2NCwgc3lzX25hbWVfdG9faGFuZGxlX2F0LCBzeXNfb3Blbl9ieV9oYW5kbGVfYXQsIHN5c19jbG9ja19hZGp0aW1lCi0JLndvcmQgc3lzX3N5bmNmcworCS53b3JkIHN5c19zeW5jZnMsIHN5c19zZW5kbW1zZwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvdGltZV8zMi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvdGltZV8zMi5jCmluZGV4IDk2MDQ2YTQuLjEwNjBlMDYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3RpbWVfMzIuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC90aW1lXzMyLmMKQEAgLTIyOCwxNCArMjI4LDEwIEBACiAKIHZvaWQgX19pbml0IHRpbWVfaW5pdCh2b2lkKQogewotI2lmZGVmIENPTkZJR19QQ0kKLQlleHRlcm4gdm9pZCBwY2lfdGltZV9pbml0KHZvaWQpOwotCWlmIChwY2ljX3ByZXNlbnQoKSkgeworCWlmIChwY2ljX3ByZXNlbnQoKSkKIAkJcGNpX3RpbWVfaW5pdCgpOwotCQlyZXR1cm47Ci0JfQotI2VuZGlmCi0Jc2J1c190aW1lX2luaXQoKTsKKwllbHNlCisJCXNidXNfdGltZV9pbml0KCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvdXMyZV9jcHVmcmVxLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC91czJlX2NwdWZyZXEuYwppbmRleCA4Zjk4MmI3Li41MzFkNTRmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC91czJlX2NwdWZyZXEuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC91czJlX2NwdWZyZXEuYwpAQCAtMjM3LDcgKzIzNyw3IEBACiAJaWYgKCFjcHVfb25saW5lKGNwdSkpCiAJCXJldHVybiAwOwogCi0JY3B1c19hbGxvd2VkID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOworCWNwdW1hc2tfY29weSgmY3B1c19hbGxvd2VkLCB0c2tfY3B1c19hbGxvd2VkKGN1cnJlbnQpKTsKIAlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBjcHVtYXNrX29mKGNwdSkpOwogCiAJY2xvY2tfdGljayA9IHNwYXJjNjRfZ2V0X2Nsb2NrX3RpY2soY3B1KSAvIDEwMDA7CkBAIC0yNTgsNyArMjU4LDcgQEAKIAlpZiAoIWNwdV9vbmxpbmUoY3B1KSkKIAkJcmV0dXJuOwogCi0JY3B1c19hbGxvd2VkID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOworCWNwdW1hc2tfY29weSgmY3B1c19hbGxvd2VkLCB0c2tfY3B1c19hbGxvd2VkKGN1cnJlbnQpKTsKIAlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBjcHVtYXNrX29mKGNwdSkpOwogCiAJbmV3X2ZyZXEgPSBjbG9ja190aWNrID0gc3BhcmM2NF9nZXRfY2xvY2tfdGljayhjcHUpIC8gMTAwMDsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3VzM19jcHVmcmVxLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC91czNfY3B1ZnJlcS5jCmluZGV4IGYzNWQxZTcuLjlhOGNlYjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3VzM19jcHVmcmVxLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvdXMzX2NwdWZyZXEuYwpAQCAtODUsNyArODUsNyBAQAogCWlmICghY3B1X29ubGluZShjcHUpKQogCQlyZXR1cm4gMDsKIAotCWNwdXNfYWxsb3dlZCA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKKwljcHVtYXNrX2NvcHkoJmNwdXNfYWxsb3dlZCwgdHNrX2NwdXNfYWxsb3dlZChjdXJyZW50KSk7CiAJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgY3B1bWFza19vZihjcHUpKTsKIAogCXJlZyA9IHJlYWRfc2FmYXJpX2NmZygpOwpAQCAtMTA1LDcgKzEwNSw3IEBACiAJaWYgKCFjcHVfb25saW5lKGNwdSkpCiAJCXJldHVybjsKIAotCWNwdXNfYWxsb3dlZCA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKKwljcHVtYXNrX2NvcHkoJmNwdXNfYWxsb3dlZCwgdHNrX2NwdXNfYWxsb3dlZChjdXJyZW50KSk7CiAJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgY3B1bWFza19vZihjcHUpKTsKIAogCW5ld19mcmVxID0gc3BhcmM2NF9nZXRfY2xvY2tfdGljayhjcHUpIC8gMTAwMDsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbGliL01ha2VmaWxlIGIvYXJjaC9zcGFyYy9saWIvTWFrZWZpbGUKaW5kZXggODQ2ZDFjNC4uN2YwMWI4ZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC9zcGFyYy9saWIvTWFrZWZpbGUKQEAgLTE1LDcgKzE1LDYgQEAKIGxpYi0kKENPTkZJR19TUEFSQzMyKSArPSBjb3B5X3VzZXIubyBsb2Nrcy5vCiBsaWIteSAgICAgICAgICAgICAgICAgKz0gYXRvbWljXyQoQklUUykubwogbGliLSQoQ09ORklHX1NQQVJDMzIpICs9IGxzaHJkaTMubyBhc2hsZGkzLm8KLWxpYi0kKENPTkZJR19TUEFSQzMyKSArPSByd3NlbV8zMi5vCiBsaWItJChDT05GSUdfU1BBUkMzMikgKz0gbXVsZGkzLm8gYml0ZXh0Lm8gY21wZGkyLm8KIAogbGliLSQoQ09ORklHX1NQQVJDNjQpICs9IGNvcHlfcGFnZS5vIGNsZWFyX3BhZ2UubyBiemVyby5vCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2xpYi9yd3NlbV8zMi5TIGIvYXJjaC9zcGFyYy9saWIvcndzZW1fMzIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY3NTI2OC4uMDAwMDAwMAotLS0gYS9hcmNoL3NwYXJjL2xpYi9yd3NlbV8zMi5TCisrKyAvZGV2L251bGwKQEAgLTEsMjA0ICswLDAgQEAKLS8qCi0gKiBBc3NlbWJseSBwYXJ0IG9mIHJ3IHNlbWFwaG9yZXMuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5IEpha3ViIEplbGluZWsgKGpha3ViQHJlZGhhdC5jb20pCi0gKi8KLQotI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KLSNpbmNsdWRlIDxhc20vcHNyLmg+Ci0KLQkuc2VjdGlvbiAuc2NoZWQudGV4dCwgImF4IgotCS5hbGlnbgk0Ci0KLQkuZ2xvYmwJCV9fX2Rvd25fcmVhZAotX19fZG93bl9yZWFkOgotCXJkCQklcHNyLCAlZzMKLQlub3AKLQlub3AKLQlub3AKLQlvcgkJJWczLCBQU1JfUElMLCAlZzcKLQl3cgkJJWc3LCAwLCAlcHNyCi0Jbm9wCi0Jbm9wCi0Jbm9wCi0jaWZkZWYgQ09ORklHX1NNUAotMToJbGRzdHViCQlbJWcxICsgNF0sICVnNwotCXRzdAkJJWc3Ci0JYm5lCQkxYgotCSBsZAkJWyVnMV0sICVnNwotCXN1YgkJJWc3LCAxLCAlZzcKLQlzdAkJJWc3LCBbJWcxXQotCXN0YgkJJWcwLCBbJWcxICsgNF0KLSNlbHNlCi0JbGQJCVslZzFdLCAlZzcKLQlzdWIJCSVnNywgMSwgJWc3Ci0Jc3QJCSVnNywgWyVnMV0KLSNlbmRpZgotCXdyCQklZzMsIDAsICVwc3IKLQlhZGQJCSVnNywgMSwgJWc3Ci0Jbm9wCi0Jbm9wCi0Jc3ViY2MJCSVnNywgMSwgJWc3Ci0JYm5lZwkJM2YKLQkgbm9wCi0yOglqbXBsCQklbzcsICVnMAotCSBtb3YJCSVnNCwgJW83Ci0zOglzYXZlCQklc3AsIC02NCwgJXNwCi0JbW92CQklZzEsICVsMQotCW1vdgkJJWc0LCAlbDQKLQliY3MJCTRmCi0JIG1vdgkJJWc1LCAlbDUKLQljYWxsCQlkb3duX3JlYWRfZmFpbGVkCi0JIG1vdgkJJWwxLCAlbzAKLQltb3YJCSVsMSwgJWcxCi0JbW92CQklbDQsICVnNAotCWJhCQlfX19kb3duX3JlYWQKLQkgcmVzdG9yZQklbDUsICVnMCwgJWc1Ci00OgljYWxsCQlkb3duX3JlYWRfZmFpbGVkX2JpYXNlZAotCSBtb3YJCSVsMSwgJW8wCi0JbW92CQklbDEsICVnMQotCW1vdgkJJWw0LCAlZzQKLQliYQkJMmIKLQkgcmVzdG9yZQklbDUsICVnMCwgJWc1Ci0KLQkuZ2xvYmwJCV9fX2Rvd25fd3JpdGUKLV9fX2Rvd25fd3JpdGU6Ci0JcmQJCSVwc3IsICVnMwotCW5vcAotCW5vcAotCW5vcAotCW9yCQklZzMsIFBTUl9QSUwsICVnNwotCXdyCQklZzcsIDAsICVwc3IKLQlzZXRoaQkJJWhpKDB4MDEwMDAwMDApLCAlZzIKLQlub3AKLQlub3AKLSNpZmRlZiBDT05GSUdfU01QCi0xOglsZHN0dWIJCVslZzEgKyA0XSwgJWc3Ci0JdHN0CQklZzcKLQlibmUJCTFiCi0JIGxkCQlbJWcxXSwgJWc3Ci0Jc3ViCQklZzcsICVnMiwgJWc3Ci0Jc3QJCSVnNywgWyVnMV0KLQlzdGIJCSVnMCwgWyVnMSArIDRdCi0jZWxzZQotCWxkCQlbJWcxXSwgJWc3Ci0Jc3ViCQklZzcsICVnMiwgJWc3Ci0Jc3QJCSVnNywgWyVnMV0KLSNlbmRpZgotCXdyCQklZzMsIDAsICVwc3IKLQlhZGQJCSVnNywgJWcyLCAlZzcKLQlub3AKLQlub3AKLQlzdWJjYwkJJWc3LCAlZzIsICVnNwotCWJuZQkJM2YKLQkgbm9wCi0yOglqbXBsCQklbzcsICVnMAotCSBtb3YJCSVnNCwgJW83Ci0zOglzYXZlCQklc3AsIC02NCwgJXNwCi0JbW92CQklZzEsICVsMQotCW1vdgkJJWc0LCAlbDQKLQliY3MJCTRmCi0JIG1vdgkJJWc1LCAlbDUKLQljYWxsCQlkb3duX3dyaXRlX2ZhaWxlZAotCSBtb3YJCSVsMSwgJW8wCi0JbW92CQklbDEsICVnMQotCW1vdgkJJWw0LCAlZzQKLQliYQkJX19fZG93bl93cml0ZQotCSByZXN0b3JlCSVsNSwgJWcwLCAlZzUKLTQ6CWNhbGwJCWRvd25fd3JpdGVfZmFpbGVkX2JpYXNlZAotCSBtb3YJCSVsMSwgJW8wCi0JbW92CQklbDEsICVnMQotCW1vdgkJJWw0LCAlZzQKLQliYQkJMmIKLQkgcmVzdG9yZQklbDUsICVnMCwgJWc1Ci0KLQkudGV4dAotCS5nbG9ibAkJX19fdXBfcmVhZAotX19fdXBfcmVhZDoKLQlyZAkJJXBzciwgJWczCi0Jbm9wCi0Jbm9wCi0Jbm9wCi0Jb3IJCSVnMywgUFNSX1BJTCwgJWc3Ci0Jd3IJCSVnNywgMCwgJXBzcgotCW5vcAotCW5vcAotCW5vcAotI2lmZGVmIENPTkZJR19TTVAKLTE6CWxkc3R1YgkJWyVnMSArIDRdLCAlZzcKLQl0c3QJCSVnNwotCWJuZQkJMWIKLQkgbGQJCVslZzFdLCAlZzcKLQlhZGQJCSVnNywgMSwgJWc3Ci0Jc3QJCSVnNywgWyVnMV0KLQlzdGIJCSVnMCwgWyVnMSArIDRdCi0jZWxzZQotCWxkCQlbJWcxXSwgJWc3Ci0JYWRkCQklZzcsIDEsICVnNwotCXN0CQklZzcsIFslZzFdCi0jZW5kaWYKLQl3cgkJJWczLCAwLCAlcHNyCi0Jbm9wCi0Jbm9wCi0Jbm9wCi0JY21wCQklZzcsIDAKLQliZQkJM2YKLQkgbm9wCi0yOglqbXBsCQklbzcsICVnMAotCSBtb3YJCSVnNCwgJW83Ci0zOglzYXZlCQklc3AsIC02NCwgJXNwCi0JbW92CQklZzEsICVsMQotCW1vdgkJJWc0LCAlbDQKLQltb3YJCSVnNSwgJWw1Ci0JY2xyCQklbzEKLQljYWxsCQlfX3J3c2VtX3dha2UKLQkgbW92CQklbDEsICVvMAotCW1vdgkJJWwxLCAlZzEKLQltb3YJCSVsNCwgJWc0Ci0JYmEJCTJiCi0JIHJlc3RvcmUJJWw1LCAlZzAsICVnNQotCi0JLmdsb2JsCQlfX191cF93cml0ZQotX19fdXBfd3JpdGU6Ci0JcmQJCSVwc3IsICVnMwotCW5vcAotCW5vcAotCW5vcAotCW9yCQklZzMsIFBTUl9QSUwsICVnNwotCXdyCQklZzcsIDAsICVwc3IKLQlzZXRoaQkJJWhpKDB4MDEwMDAwMDApLCAlZzIKLQlub3AKLQlub3AKLSNpZmRlZiBDT05GSUdfU01QCi0xOglsZHN0dWIJCVslZzEgKyA0XSwgJWc3Ci0JdHN0CQklZzcKLQlibmUJCTFiCi0JIGxkCQlbJWcxXSwgJWc3Ci0JYWRkCQklZzcsICVnMiwgJWc3Ci0Jc3QJCSVnNywgWyVnMV0KLQlzdGIJCSVnMCwgWyVnMSArIDRdCi0jZWxzZQotCWxkCQlbJWcxXSwgJWc3Ci0JYWRkCQklZzcsICVnMiwgJWc3Ci0Jc3QJCSVnNywgWyVnMV0KLSNlbmRpZgotCXdyCQklZzMsIDAsICVwc3IKLQlzdWIJCSVnNywgJWcyLCAlZzcKLQlub3AKLQlub3AKLQlhZGRjYwkJJWc3LCAlZzIsICVnNwotCWJjcwkJM2YKLQkgbm9wCi0yOglqbXBsCQklbzcsICVnMAotCSBtb3YJCSVnNCwgJW83Ci0zOglzYXZlCQklc3AsIC02NCwgJXNwCi0JbW92CQklZzEsICVsMQotCW1vdgkJJWc0LCAlbDQKLQltb3YJCSVnNSwgJWw1Ci0JbW92CQklZzcsICVvMQotCWNhbGwJCV9fcndzZW1fd2FrZQotCSBtb3YJCSVsMSwgJW8wCi0JbW92CQklbDEsICVnMQotCW1vdgkJJWw0LCAlZzQKLQliYQkJMmIKLQkgcmVzdG9yZQklbDUsICVnMCwgJWc1CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL2luaXRfNjQuYyBiL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5jCmluZGV4IDJmNmFlMWQuLmUxMGNkMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5jCisrKyBiL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5jCkBAIC04NjIsNyArODYyLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKQogCQludW1hX2NwdV9sb29rdXBfdGFibGVbaV0gPSAwOwogCi0JbnVtYV9jcHVtYXNrX2xvb2t1cF90YWJsZVswXSA9IENQVV9NQVNLX0FMTDsKKwljcHVtYXNrX3NldGFsbCgmbnVtYV9jcHVtYXNrX2xvb2t1cF90YWJsZVswXSk7CiB9CiAKICNpZmRlZiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUwpAQCAtMTA4MCw3ICsxMDgwLDcgQEAKIHsKIAl1NjQgYXJjOwogCi0JY3B1c19jbGVhcigqbWFzayk7CisJY3B1bWFza19jbGVhcihtYXNrKTsKIAogCW1kZXNjX2Zvcl9lYWNoX2FyYyhhcmMsIG1kLCBncnAsIE1ERVNDX0FSQ19UWVBFX0JBQ0spIHsKIAkJdTY0IHRhcmdldCA9IG1kZXNjX2FyY190YXJnZXQobWQsIGFyYyk7CkBAIC0xMDkxLDcgKzEwOTEsNyBAQAogCQkJY29udGludWU7CiAJCWlkID0gbWRlc2NfZ2V0X3Byb3BlcnR5KG1kLCB0YXJnZXQsICJpZCIsIE5VTEwpOwogCQlpZiAoKmlkIDwgbnJfY3B1X2lkcykKLQkJCWNwdV9zZXQoKmlkLCAqbWFzayk7CisJCQljcHVtYXNrX3NldF9jcHUoKmlkLCBtYXNrKTsKIAl9CiB9CiAKQEAgLTExNTMsMTMgKzExNTMsMTMgQEAKIAogCW51bWFfcGFyc2VfbWRlc2NfZ3JvdXBfY3B1cyhtZCwgZ3JwLCAmbWFzayk7CiAKLQlmb3JfZWFjaF9jcHVfbWFzayhjcHUsIG1hc2spCisJZm9yX2VhY2hfY3B1KGNwdSwgJm1hc2spCiAJCW51bWFfY3B1X2xvb2t1cF90YWJsZVtjcHVdID0gaW5kZXg7Ci0JbnVtYV9jcHVtYXNrX2xvb2t1cF90YWJsZVtpbmRleF0gPSBtYXNrOworCWNwdW1hc2tfY29weSgmbnVtYV9jcHVtYXNrX2xvb2t1cF90YWJsZVtpbmRleF0sICZtYXNrKTsKIAogCWlmIChudW1hX2RlYnVnKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIk5VTUEgR1JPVVBbJWRdOiBjcHVzIFsgIiwgaW5kZXgpOwotCQlmb3JfZWFjaF9jcHVfbWFzayhjcHUsIG1hc2spCisJCWZvcl9lYWNoX2NwdShjcHUsICZtYXNrKQogCQkJcHJpbnRrKCIlZCAiLCBjcHUpOwogCQlwcmludGsoIl1cbiIpOwogCX0KQEAgLTEyMTgsNyArMTIxOCw3IEBACiAJaW5kZXggPSAwOwogCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGNwdSkgewogCQludW1hX2NwdV9sb29rdXBfdGFibGVbY3B1XSA9IGluZGV4OwotCQludW1hX2NwdW1hc2tfbG9va3VwX3RhYmxlW2luZGV4XSA9IGNwdW1hc2tfb2ZfY3B1KGNwdSk7CisJCWNwdW1hc2tfY29weSgmbnVtYV9jcHVtYXNrX2xvb2t1cF90YWJsZVtpbmRleF0sIGNwdW1hc2tfb2YoY3B1KSk7CiAJCW5vZGVfbWFza3NbaW5kZXhdLm1hc2sgPSB+KCgxVUwgPDwgMzZVTCkgLSAxVUwpOwogCQlub2RlX21hc2tzW2luZGV4XS52YWwgPSBjcHUgPDwgMzZVTDsKIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL21tYXBwZXJfa2Vybi5jIGIvYXJjaC91bS9kcml2ZXJzL21tYXBwZXJfa2Vybi5jCmluZGV4IDdlMDYxOWMuLmMwZWY4MDMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9tbWFwcGVyX2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvbW1hcHBlcl9rZXJuLmMKQEAgLTExNiw3ICsxMTYsNyBAQAogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJtbWFwcGVyIC0gbWlzY19yZWdpc3RlciBmYWlsZWQsIGVyciA9ICVkXG4iLAogCQkgICAgICAgZXJyKTsKLQkJcmV0dXJuIGVycjs7CisJCXJldHVybiBlcnI7CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2J1aWxkIGIvYXJjaC94ODYvS2J1aWxkCmluZGV4IDBlMTAzMjMuLjBlOWRlYzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tidWlsZAorKysgYi9hcmNoL3g4Ni9LYnVpbGQKQEAgLTE1LDMgKzE1LDQgQEAKIG9iai0kKENPTkZJR19JQTMyX0VNVUxBVElPTikgKz0gaWEzMi8KIAogb2JqLXkgKz0gcGxhdGZvcm0vCitvYmoteSArPSBuZXQvCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZwppbmRleCA0MTY4ZTVkLi44ODBmY2I2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnCisrKyBiL2FyY2gveDg2L0tjb25maWcKQEAgLTcyLDYgKzcyLDcgQEAKIAlzZWxlY3QgR0VORVJJQ19JUlFfU0hPVwogCXNlbGVjdCBJUlFfRk9SQ0VEX1RIUkVBRElORwogCXNlbGVjdCBVU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpZiBTTVAKKwlzZWxlY3QgSEFWRV9CUEZfSklUIGlmIChYODZfNjQgJiYgTkVUKQogCiBjb25maWcgSU5TVFJVQ1RJT05fREVDT0RFUgogCWRlZl9ib29sIChLUFJPQkVTIHx8IFBFUkZfRVZFTlRTKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlIGIvYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlCmluZGV4IDFhNThhZDguLmMwNGYxYjcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2NyeXB0by9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGUKQEAgLTIsOCArMiw2IEBACiAjIEFyY2gtc3BlY2lmaWMgQ3J5cHRvQVBJIG1vZHVsZXMuCiAjCiAKLW9iai0kKENPTkZJR19DUllQVE9fRlBVKSArPSBmcHUubwotCiBvYmotJChDT05GSUdfQ1JZUFRPX0FFU181ODYpICs9IGFlcy1pNTg2Lm8KIG9iai0kKENPTkZJR19DUllQVE9fVFdPRklTSF81ODYpICs9IHR3b2Zpc2gtaTU4Ni5vCiBvYmotJChDT05GSUdfQ1JZUFRPX1NBTFNBMjBfNTg2KSArPSBzYWxzYTIwLWk1ODYubwpAQCAtMjQsNiArMjIsNiBAQAogdHdvZmlzaC14ODZfNjQteSA6PSB0d29maXNoLXg4Nl82NC1hc21fNjQubyB0d29maXNoX2dsdWUubwogc2Fsc2EyMC14ODZfNjQteSA6PSBzYWxzYTIwLXg4Nl82NC1hc21fNjQubyBzYWxzYTIwX2dsdWUubwogCi1hZXNuaS1pbnRlbC15IDo9IGFlc25pLWludGVsX2FzbS5vIGFlc25pLWludGVsX2dsdWUubworYWVzbmktaW50ZWwteSA6PSBhZXNuaS1pbnRlbF9hc20ubyBhZXNuaS1pbnRlbF9nbHVlLm8gZnB1Lm8KIAogZ2hhc2gtY2xtdWxuaS1pbnRlbC15IDo9IGdoYXNoLWNsbXVsbmktaW50ZWxfYXNtLm8gZ2hhc2gtY2xtdWxuaS1pbnRlbF9nbHVlLm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NyeXB0by9hZXNuaS1pbnRlbF9nbHVlLmMgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfZ2x1ZS5jCmluZGV4IDI1Nzc2MTMuLmZlZWU4ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2NyeXB0by9hZXNuaS1pbnRlbF9nbHVlLmMKKysrIGIvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2dsdWUuYwpAQCAtOTQsNiArOTQsMTAgQEAKIAkJCSAgICAgIGNvbnN0IHU4ICppbiwgdW5zaWduZWQgaW50IGxlbiwgdTggKml2KTsKIGFzbWxpbmthZ2Ugdm9pZCBhZXNuaV9jYmNfZGVjKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqb3V0LAogCQkJICAgICAgY29uc3QgdTggKmluLCB1bnNpZ25lZCBpbnQgbGVuLCB1OCAqaXYpOworCitpbnQgY3J5cHRvX2ZwdV9pbml0KHZvaWQpOwordm9pZCBjcnlwdG9fZnB1X2V4aXQodm9pZCk7CisKICNpZmRlZiBDT05GSUdfWDg2XzY0CiBhc21saW5rYWdlIHZvaWQgYWVzbmlfY3RyX2VuYyhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKm91dCwKIAkJCSAgICAgIGNvbnN0IHU4ICppbiwgdW5zaWduZWQgaW50IGxlbiwgdTggKml2KTsKQEAgLTEyNTcsNiArMTI2MSw4IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAorCWlmICgoZXJyID0gY3J5cHRvX2ZwdV9pbml0KCkpKQorCQlnb3RvIGZwdV9lcnI7CiAJaWYgKChlcnIgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZhZXNuaV9hbGcpKSkKIAkJZ290byBhZXNfZXJyOwogCWlmICgoZXJyID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmX19hZXNuaV9hbGcpKSkKQEAgLTEzMzQsNiArMTM0MCw3IEBACiBfX2Flc19lcnI6CiAJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhZXNuaV9hbGcpOwogYWVzX2VycjoKK2ZwdV9lcnI6CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTM2Myw2ICsxMzcwLDggQEAKIAljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmJsa19lY2JfYWxnKTsKIAljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJl9fYWVzbmlfYWxnKTsKIAljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFlc25pX2FsZyk7CisKKwljcnlwdG9fZnB1X2V4aXQoKTsKIH0KIAogbW9kdWxlX2luaXQoYWVzbmlfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jcnlwdG8vZnB1LmMgYi9hcmNoL3g4Ni9jcnlwdG8vZnB1LmMKaW5kZXggMWE4Zjg2NC4uOThkN2ExOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvY3J5cHRvL2ZwdS5jCisrKyBiL2FyY2gveDg2L2NyeXB0by9mcHUuYwpAQCAtMTUwLDE4ICsxNTAsMTIgQEAKIAkubW9kdWxlID0gVEhJU19NT0RVTEUsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBjcnlwdG9fZnB1X21vZHVsZV9pbml0KHZvaWQpCitpbnQgX19pbml0IGNyeXB0b19mcHVfaW5pdCh2b2lkKQogewogCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfdGVtcGxhdGUoJmNyeXB0b19mcHVfdG1wbCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBjcnlwdG9fZnB1X21vZHVsZV9leGl0KHZvaWQpCit2b2lkIF9fZXhpdCBjcnlwdG9fZnB1X2V4aXQodm9pZCkKIHsKIAljcnlwdG9fdW5yZWdpc3Rlcl90ZW1wbGF0ZSgmY3J5cHRvX2ZwdV90bXBsKTsKIH0KLQotbW9kdWxlX2luaXQoY3J5cHRvX2ZwdV9tb2R1bGVfaW5pdCk7Ci1tb2R1bGVfZXhpdChjcnlwdG9fZnB1X21vZHVsZV9leGl0KTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJGUFUgYmxvY2sgY2lwaGVyIHdyYXBwZXIiKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMgYi9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TCmluZGV4IDg0OWE5ZDIuLjk1ZjU4MjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMKKysrIGIvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUwpAQCAtODQ4LDQgKzg0OCw1IEBACiAJLnF1YWQgY29tcGF0X3N5c19vcGVuX2J5X2hhbmRsZV9hdAogCS5xdWFkIGNvbXBhdF9zeXNfY2xvY2tfYWRqdGltZQogCS5xdWFkIHN5c19zeW5jZnMKKwkucXVhZCBjb21wYXRfc3lzX3NlbmRtbXNnCS8qIDM0NSAqLwogaWEzMl9zeXNjYWxsX2VuZDoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oCmluZGV4IDBmNTIxMzUuLjAwNDkyMTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaApAQCAtMTQsNiArMTQsOCBAQAogI2luY2x1ZGUgPGFzbS9kZXNjX2RlZnMuaD4KIAogc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQ7CitlbnVtIHg4Nl9pbnRlcmNlcHQ7CitlbnVtIHg4Nl9pbnRlcmNlcHRfc3RhZ2U7CiAKIHN0cnVjdCB4ODZfZXhjZXB0aW9uIHsKIAl1OCB2ZWN0b3I7CkBAIC0yNCw2ICsyNiwyNCBAQAogfTsKIAogLyoKKyAqIFRoaXMgc3RydWN0IGlzIHVzZWQgdG8gY2FycnkgZW5vdWdoIGluZm9ybWF0aW9uIGZyb20gdGhlIGluc3RydWN0aW9uCisgKiBkZWNvZGVyIHRvIG1haW4gS1ZNIHNvIHRoYXQgYSBkZWNpc2lvbiBjYW4gYmUgbWFkZSB3aGV0aGVyIHRoZQorICogaW5zdHJ1Y3Rpb24gbmVlZHMgdG8gYmUgaW50ZXJjZXB0ZWQgb3Igbm90LgorICovCitzdHJ1Y3QgeDg2X2luc3RydWN0aW9uX2luZm8geworCXU4ICBpbnRlcmNlcHQ7ICAgICAgICAgIC8qIHdoaWNoIGludGVyY2VwdCAgICAgICAgICAgICAgICAgICAgICAqLworCXU4ICByZXBfcHJlZml4OyAgICAgICAgIC8qIHJlcCBwcmVmaXg/ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXU4ICBtb2RybV9tb2Q7CQkvKiBtb2QgcGFydCBvZiBtb2RybQkJCSovCisJdTggIG1vZHJtX3JlZzsgICAgICAgICAgLyogaW5kZXggb2YgcmVnaXN0ZXIgdXNlZCAgICAgICAgICAgICAgICovCisJdTggIG1vZHJtX3JtOwkJLyogcm0gcGFydCBvZiBtb2RybQkJCSovCisJdTY0IHNyY192YWw7ICAgICAgICAgICAgLyogdmFsdWUgb2Ygc291cmNlIG9wZXJhbmQgICAgICAgICAgICAgICovCisJdTggIHNyY19ieXRlczsgICAgICAgICAgLyogc2l6ZSBvZiBzb3VyY2Ugb3BlcmFuZCAgICAgICAgICAgICAgICovCisJdTggIGRzdF9ieXRlczsgICAgICAgICAgLyogc2l6ZSBvZiBkZXN0aW5hdGlvbiBvcGVyYW5kICAgICAgICAgICovCisJdTggIGFkX2J5dGVzOyAgICAgICAgICAgLyogc2l6ZSBvZiBzcmMvZHN0IGFkZHJlc3MgICAgICAgICAgICAgICovCisJdTY0IG5leHRfcmlwOyAgICAgICAgICAgLyogcmlwIGZvbGxvd2luZyB0aGUgaW5zdHJ1Y3Rpb24gICAgICAgICovCit9OworCisvKgogICogeDg2X2VtdWxhdGVfb3BzOgogICoKICAqIFRoZXNlIG9wZXJhdGlvbnMgcmVwcmVzZW50IHRoZSBpbnN0cnVjdGlvbiBlbXVsYXRvcidzIGludGVyZmFjZSB0byBtZW1vcnkuCkBAIC02Miw2ICs4Miw3IEBACiAjZGVmaW5lIFg4NkVNVUxfUkVUUllfSU5TVFIgICAgIDMgLyogcmV0cnkgdGhlIGluc3RydWN0aW9uIGZvciBzb21lIHJlYXNvbiAqLwogI2RlZmluZSBYODZFTVVMX0NNUFhDSEdfRkFJTEVEICA0IC8qIGNtcHhjaGcgZGlkIG5vdCBzZWUgZXhwZWN0ZWQgdmFsdWUgKi8KICNkZWZpbmUgWDg2RU1VTF9JT19ORUVERUQgICAgICAgNSAvKiBJTyBpcyBuZWVkZWQgdG8gY29tcGxldGUgZW11bGF0aW9uICovCisjZGVmaW5lIFg4NkVNVUxfSU5URVJDRVBURUQgICAgIDYgLyogSW50ZXJjZXB0ZWQgYnkgbmVzdGVkIFZNQ0IvVk1DUyAqLwogCiBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIHsKIAkvKgpAQCAtNzEsOCArOTIsOSBAQAogCSAqICBAdmFsOiAgIFtPVVRdIFZhbHVlIHJlYWQgZnJvbSBtZW1vcnksIHplcm8tZXh0ZW5kZWQgdG8gJ3VfbG9uZycuCiAJICogIEBieXRlczogW0lOIF0gTnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQgZnJvbSBtZW1vcnkuCiAJICovCi0JaW50ICgqcmVhZF9zdGQpKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqdmFsLAotCQkJdW5zaWduZWQgaW50IGJ5dGVzLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJaW50ICgqcmVhZF9zdGQpKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAorCQkJdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICp2YWwsCisJCQl1bnNpZ25lZCBpbnQgYnl0ZXMsCiAJCQlzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiAqZmF1bHQpOwogCiAJLyoKQEAgLTgyLDggKzEwNCw4IEBACiAJICogIEB2YWw6ICAgW09VVF0gVmFsdWUgd3JpdGUgdG8gbWVtb3J5LCB6ZXJvLWV4dGVuZGVkIHRvICd1X2xvbmcnLgogCSAqICBAYnl0ZXM6IFtJTiBdIE51bWJlciBvZiBieXRlcyB0byB3cml0ZSB0byBtZW1vcnkuCiAJICovCi0JaW50ICgqd3JpdGVfc3RkKSh1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKnZhbCwKLQkJCSB1bnNpZ25lZCBpbnQgYnl0ZXMsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwlpbnQgKCp3cml0ZV9zdGQpKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAorCQkJIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqdmFsLCB1bnNpZ25lZCBpbnQgYnl0ZXMsCiAJCQkgc3RydWN0IHg4Nl9leGNlcHRpb24gKmZhdWx0KTsKIAkvKgogCSAqIGZldGNoOiBSZWFkIGJ5dGVzIG9mIHN0YW5kYXJkIChub24tZW11bGF0ZWQvc3BlY2lhbCkgbWVtb3J5LgpAQCAtOTIsOCArMTE0LDggQEAKIAkgKiAgQHZhbDogICBbT1VUXSBWYWx1ZSByZWFkIGZyb20gbWVtb3J5LCB6ZXJvLWV4dGVuZGVkIHRvICd1X2xvbmcnLgogCSAqICBAYnl0ZXM6IFtJTiBdIE51bWJlciBvZiBieXRlcyB0byByZWFkIGZyb20gbWVtb3J5LgogCSAqLwotCWludCAoKmZldGNoKSh1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKnZhbCwKLQkJICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwlpbnQgKCpmZXRjaCkoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCisJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICp2YWwsIHVuc2lnbmVkIGludCBieXRlcywKIAkJICAgICBzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiAqZmF1bHQpOwogCiAJLyoKQEAgLTEwMiwxMSArMTI0LDkgQEAKIAkgKiAgQHZhbDogICBbT1VUXSBWYWx1ZSByZWFkIGZyb20gbWVtb3J5LCB6ZXJvLWV4dGVuZGVkIHRvICd1X2xvbmcnLgogCSAqICBAYnl0ZXM6IFtJTiBdIE51bWJlciBvZiBieXRlcyB0byByZWFkIGZyb20gbWVtb3J5LgogCSAqLwotCWludCAoKnJlYWRfZW11bGF0ZWQpKHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgICAgdm9pZCAqdmFsLAotCQkJICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsCi0JCQkgICAgIHN0cnVjdCB4ODZfZXhjZXB0aW9uICpmYXVsdCwKLQkJCSAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKKwlpbnQgKCpyZWFkX2VtdWxhdGVkKShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICp2YWwsIHVuc2lnbmVkIGludCBieXRlcywKKwkJCSAgICAgc3RydWN0IHg4Nl9leGNlcHRpb24gKmZhdWx0KTsKIAogCS8qCiAJICogd3JpdGVfZW11bGF0ZWQ6IFdyaXRlIGJ5dGVzIHRvIGVtdWxhdGVkL3NwZWNpYWwgbWVtb3J5IGFyZWEuCkBAIC0xMTUsMTEgKzEzNSwxMCBAQAogCSAqICAgICAgICAgICAgICAgIHJlcXVpcmVkKS4KIAkgKiAgQGJ5dGVzOiBbSU4gXSBOdW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUgdG8gbWVtb3J5LgogCSAqLwotCWludCAoKndyaXRlX2VtdWxhdGVkKSh1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICAgICBjb25zdCB2b2lkICp2YWwsCisJaW50ICgqd3JpdGVfZW11bGF0ZWQpKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICp2YWwsCiAJCQkgICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsCi0JCQkgICAgICBzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiAqZmF1bHQsCi0JCQkgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCQkJICAgICAgc3RydWN0IHg4Nl9leGNlcHRpb24gKmZhdWx0KTsKIAogCS8qCiAJICogY21weGNoZ19lbXVsYXRlZDogRW11bGF0ZSBhbiBhdG9taWMgKExPQ0tlZCkgQ01QWENIRyBvcGVyYXRpb24gb24gYW4KQEAgLTEyOSw0MCArMTQ4LDU0IEBACiAJICogIEBuZXc6ICAgW0lOIF0gVmFsdWUgdG8gd3JpdGUgdG8gQGFkZHIuCiAJICogIEBieXRlczogW0lOIF0gTnVtYmVyIG9mIGJ5dGVzIHRvIGFjY2VzcyB1c2luZyBDTVBYQ0hHLgogCSAqLwotCWludCAoKmNtcHhjaGdfZW11bGF0ZWQpKHVuc2lnbmVkIGxvbmcgYWRkciwKKwlpbnQgKCpjbXB4Y2hnX2VtdWxhdGVkKShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKKwkJCQl1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkJY29uc3Qgdm9pZCAqb2xkLAogCQkJCWNvbnN0IHZvaWQgKm5ldywKIAkJCQl1bnNpZ25lZCBpbnQgYnl0ZXMsCi0JCQkJc3RydWN0IHg4Nl9leGNlcHRpb24gKmZhdWx0LAotCQkJCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisJCQkJc3RydWN0IHg4Nl9leGNlcHRpb24gKmZhdWx0KTsKKwl2b2lkICgqaW52bHBnKShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgdWxvbmcgYWRkcik7CiAKLQlpbnQgKCpwaW9faW5fZW11bGF0ZWQpKGludCBzaXplLCB1bnNpZ25lZCBzaG9ydCBwb3J0LCB2b2lkICp2YWwsCi0JCQkgICAgICAgdW5zaWduZWQgaW50IGNvdW50LCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCWludCAoKnBpb19pbl9lbXVsYXRlZCkoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCisJCQkgICAgICAgaW50IHNpemUsIHVuc2lnbmVkIHNob3J0IHBvcnQsIHZvaWQgKnZhbCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgY291bnQpOwogCi0JaW50ICgqcGlvX291dF9lbXVsYXRlZCkoaW50IHNpemUsIHVuc2lnbmVkIHNob3J0IHBvcnQsIGNvbnN0IHZvaWQgKnZhbCwKLQkJCQl1bnNpZ25lZCBpbnQgY291bnQsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisJaW50ICgqcGlvX291dF9lbXVsYXRlZCkoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCisJCQkJaW50IHNpemUsIHVuc2lnbmVkIHNob3J0IHBvcnQsIGNvbnN0IHZvaWQgKnZhbCwKKwkJCQl1bnNpZ25lZCBpbnQgY291bnQpOwogCi0JYm9vbCAoKmdldF9jYWNoZWRfZGVzY3JpcHRvcikoc3RydWN0IGRlc2Nfc3RydWN0ICpkZXNjLCB1MzIgKmJhc2UzLAotCQkJCSAgICAgIGludCBzZWcsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci0Jdm9pZCAoKnNldF9jYWNoZWRfZGVzY3JpcHRvcikoc3RydWN0IGRlc2Nfc3RydWN0ICpkZXNjLCB1MzIgYmFzZTMsCi0JCQkJICAgICAgaW50IHNlZywgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLQl1MTYgKCpnZXRfc2VnbWVudF9zZWxlY3RvcikoaW50IHNlZywgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLQl2b2lkICgqc2V0X3NlZ21lbnRfc2VsZWN0b3IpKHUxNiBzZWwsIGludCBzZWcsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci0JdW5zaWduZWQgbG9uZyAoKmdldF9jYWNoZWRfc2VnbWVudF9iYXNlKShpbnQgc2VnLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotCXZvaWQgKCpnZXRfZ2R0KShzdHJ1Y3QgZGVzY19wdHIgKmR0LCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotCXZvaWQgKCpnZXRfaWR0KShzdHJ1Y3QgZGVzY19wdHIgKmR0LCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotCXVsb25nICgqZ2V0X2NyKShpbnQgY3IsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci0JaW50ICgqc2V0X2NyKShpbnQgY3IsIHVsb25nIHZhbCwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLQlpbnQgKCpjcGwpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci0JaW50ICgqZ2V0X2RyKShpbnQgZHIsIHVuc2lnbmVkIGxvbmcgKmRlc3QsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci0JaW50ICgqc2V0X2RyKShpbnQgZHIsIHVuc2lnbmVkIGxvbmcgdmFsdWUsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci0JaW50ICgqc2V0X21zcikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyX2luZGV4LCB1NjQgZGF0YSk7Ci0JaW50ICgqZ2V0X21zcikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyX2luZGV4LCB1NjQgKnBkYXRhKTsKKwlib29sICgqZ2V0X3NlZ21lbnQpKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCB1MTYgKnNlbGVjdG9yLAorCQkJICAgIHN0cnVjdCBkZXNjX3N0cnVjdCAqZGVzYywgdTMyICpiYXNlMywgaW50IHNlZyk7CisJdm9pZCAoKnNldF9zZWdtZW50KShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgdTE2IHNlbGVjdG9yLAorCQkJICAgIHN0cnVjdCBkZXNjX3N0cnVjdCAqZGVzYywgdTMyIGJhc2UzLCBpbnQgc2VnKTsKKwl1bnNpZ25lZCBsb25nICgqZ2V0X2NhY2hlZF9zZWdtZW50X2Jhc2UpKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAorCQkJCQkJIGludCBzZWcpOworCXZvaWQgKCpnZXRfZ2R0KShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgc3RydWN0IGRlc2NfcHRyICpkdCk7CisJdm9pZCAoKmdldF9pZHQpKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBzdHJ1Y3QgZGVzY19wdHIgKmR0KTsKKwl2b2lkICgqc2V0X2dkdCkoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIHN0cnVjdCBkZXNjX3B0ciAqZHQpOworCXZvaWQgKCpzZXRfaWR0KShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgc3RydWN0IGRlc2NfcHRyICpkdCk7CisJdWxvbmcgKCpnZXRfY3IpKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBpbnQgY3IpOworCWludCAoKnNldF9jcikoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGludCBjciwgdWxvbmcgdmFsKTsKKwlpbnQgKCpjcGwpKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KTsKKwlpbnQgKCpnZXRfZHIpKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBpbnQgZHIsIHVsb25nICpkZXN0KTsKKwlpbnQgKCpzZXRfZHIpKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBpbnQgZHIsIHVsb25nIHZhbHVlKTsKKwlpbnQgKCpzZXRfbXNyKShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgdTMyIG1zcl9pbmRleCwgdTY0IGRhdGEpOworCWludCAoKmdldF9tc3IpKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCB1MzIgbXNyX2luZGV4LCB1NjQgKnBkYXRhKTsKKwl2b2lkICgqaGFsdCkoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpOworCXZvaWQgKCp3YmludmQpKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KTsKKwlpbnQgKCpmaXhfaHlwZXJjYWxsKShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCk7CisJdm9pZCAoKmdldF9mcHUpKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KTsgLyogZGlzYWJsZXMgcHJlZW1wdCAqLworCXZvaWQgKCpwdXRfZnB1KShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCk7IC8qIHJlZW5hYmxlcyBwcmVlbXB0ICovCisJaW50ICgqaW50ZXJjZXB0KShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKKwkJCSBzdHJ1Y3QgeDg2X2luc3RydWN0aW9uX2luZm8gKmluZm8sCisJCQkgZW51bSB4ODZfaW50ZXJjZXB0X3N0YWdlIHN0YWdlKTsKIH07CiAKK3R5cGVkZWYgdTMyIF9fYXR0cmlidXRlX18oKHZlY3Rvcl9zaXplKDE2KSkpIHNzZTEyOF90OworCiAvKiBUeXBlLCBhZGRyZXNzLW9mLCBhbmQgdmFsdWUgb2YgYW4gaW5zdHJ1Y3Rpb24ncyBvcGVyYW5kLiAqLwogc3RydWN0IG9wZXJhbmQgewotCWVudW0geyBPUF9SRUcsIE9QX01FTSwgT1BfSU1NLCBPUF9OT05FIH0gdHlwZTsKKwllbnVtIHsgT1BfUkVHLCBPUF9NRU0sIE9QX0lNTSwgT1BfWE1NLCBPUF9OT05FIH0gdHlwZTsKIAl1bnNpZ25lZCBpbnQgYnl0ZXM7CiAJdW5pb24gewogCQl1bnNpZ25lZCBsb25nIG9yaWdfdmFsOwpAQCAtMTc0LDExICsyMDcsMTMgQEAKIAkJCXVsb25nIGVhOwogCQkJdW5zaWduZWQgc2VnOwogCQl9IG1lbTsKKwkJdW5zaWduZWQgeG1tOwogCX0gYWRkcjsKIAl1bmlvbiB7CiAJCXVuc2lnbmVkIGxvbmcgdmFsOwogCQl1NjQgdmFsNjQ7CiAJCWNoYXIgdmFscHRyW3NpemVvZih1bnNpZ25lZCBsb25nKSArIDJdOworCQlzc2UxMjhfdCB2ZWNfdmFsOwogCX07CiB9OwogCkBAIC0xOTcsNiArMjMyLDcgQEAKIHN0cnVjdCBkZWNvZGVfY2FjaGUgewogCXU4IHR3b2J5dGU7CiAJdTggYjsKKwl1OCBpbnRlcmNlcHQ7CiAJdTggbG9ja19wcmVmaXg7CiAJdTggcmVwX3ByZWZpeDsKIAl1OCBvcF9ieXRlczsKQEAgLTIwOSw2ICsyNDUsNyBAQAogCXU4IHNlZ19vdmVycmlkZTsKIAl1bnNpZ25lZCBpbnQgZDsKIAlpbnQgKCpleGVjdXRlKShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCk7CisJaW50ICgqY2hlY2tfcGVybSkoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpOwogCXVuc2lnbmVkIGxvbmcgcmVnc1tOUl9WQ1BVX1JFR1NdOwogCXVuc2lnbmVkIGxvbmcgZWlwOwogCS8qIG1vZHJtICovCkBAIC0yMjcsMTcgKzI2NCwxNSBAQAogCXN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wczsKIAogCS8qIFJlZ2lzdGVyIHN0YXRlIGJlZm9yZS9hZnRlciBlbXVsYXRpb24uICovCi0Jc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwotCiAJdW5zaWduZWQgbG9uZyBlZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBlaXA7IC8qIGVpcCBiZWZvcmUgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uICovCiAJLyogRW11bGF0ZWQgZXhlY3V0aW9uIG1vZGUsIHJlcHJlc2VudGVkIGJ5IGFuIFg4NkVNVUxfTU9ERSB2YWx1ZS4gKi8KIAlpbnQgbW9kZTsKLQl1MzIgY3NfYmFzZTsKIAogCS8qIGludGVycnVwdGliaWxpdHkgc3RhdGUsIGFzIGEgcmVzdWx0IG9mIGV4ZWN1dGlvbiBvZiBTVEkgb3IgTU9WIFNTICovCiAJaW50IGludGVycnVwdGliaWxpdHk7CiAKKwlib29sIGd1ZXN0X21vZGU7IC8qIGd1ZXN0IHJ1bm5pbmcgYSBuZXN0ZWQgZ3Vlc3QgKi8KIAlib29sIHBlcm1fb2s7IC8qIGRvIG5vdCBjaGVjayBwZXJtaXNzaW9ucyBpZiB0cnVlICovCiAJYm9vbCBvbmx5X3ZlbmRvcl9zcGVjaWZpY19pbnNuOwogCkBAIC0yNDksOCArMjg0LDggQEAKIH07CiAKIC8qIFJlcGVhdCBTdHJpbmcgT3BlcmF0aW9uIFByZWZpeCAqLwotI2RlZmluZSBSRVBFX1BSRUZJWAkxCi0jZGVmaW5lIFJFUE5FX1BSRUZJWAkyCisjZGVmaW5lIFJFUEVfUFJFRklYCTB4ZjMKKyNkZWZpbmUgUkVQTkVfUFJFRklYCTB4ZjIKIAogLyogRXhlY3V0aW9uIG1vZGUsIHBhc3NlZCB0byB0aGUgZW11bGF0b3IuICovCiAjZGVmaW5lIFg4NkVNVUxfTU9ERV9SRUFMICAgICAwCS8qIFJlYWwgbW9kZS4gICAgICAgICAgICAgKi8KQEAgLTI1OSw2ICsyOTQsNjkgQEAKICNkZWZpbmUgWDg2RU1VTF9NT0RFX1BST1QzMiAgIDQJLyogMzItYml0IHByb3RlY3RlZCBtb2RlLiAqLwogI2RlZmluZSBYODZFTVVMX01PREVfUFJPVDY0ICAgOAkvKiA2NC1iaXQgKGxvbmcpIG1vZGUuICAgICovCiAKKy8qIGFueSBwcm90ZWN0ZWQgbW9kZSAgICovCisjZGVmaW5lIFg4NkVNVUxfTU9ERV9QUk9UICAgICAoWDg2RU1VTF9NT0RFX1BST1QxNnxYODZFTVVMX01PREVfUFJPVDMyfCBcCisJCQkgICAgICAgWDg2RU1VTF9NT0RFX1BST1Q2NCkKKworZW51bSB4ODZfaW50ZXJjZXB0X3N0YWdlIHsKKwlYODZfSUNUUF9OT05FID0gMCwgICAvKiBBbGxvdyB6ZXJvLWluaXQgdG8gbm90IG1hdGNoIGFueXRoaW5nICovCisJWDg2X0lDUFRfUFJFX0VYQ0VQVCwKKwlYODZfSUNQVF9QT1NUX0VYQ0VQVCwKKwlYODZfSUNQVF9QT1NUX01FTUFDQ0VTUywKK307CisKK2VudW0geDg2X2ludGVyY2VwdCB7CisJeDg2X2ludGVyY2VwdF9ub25lLAorCXg4Nl9pbnRlcmNlcHRfY3JfcmVhZCwKKwl4ODZfaW50ZXJjZXB0X2NyX3dyaXRlLAorCXg4Nl9pbnRlcmNlcHRfY2x0cywKKwl4ODZfaW50ZXJjZXB0X2xtc3csCisJeDg2X2ludGVyY2VwdF9zbXN3LAorCXg4Nl9pbnRlcmNlcHRfZHJfcmVhZCwKKwl4ODZfaW50ZXJjZXB0X2RyX3dyaXRlLAorCXg4Nl9pbnRlcmNlcHRfbGlkdCwKKwl4ODZfaW50ZXJjZXB0X3NpZHQsCisJeDg2X2ludGVyY2VwdF9sZ2R0LAorCXg4Nl9pbnRlcmNlcHRfc2dkdCwKKwl4ODZfaW50ZXJjZXB0X2xsZHQsCisJeDg2X2ludGVyY2VwdF9zbGR0LAorCXg4Nl9pbnRlcmNlcHRfbHRyLAorCXg4Nl9pbnRlcmNlcHRfc3RyLAorCXg4Nl9pbnRlcmNlcHRfcmR0c2MsCisJeDg2X2ludGVyY2VwdF9yZHBtYywKKwl4ODZfaW50ZXJjZXB0X3B1c2hmLAorCXg4Nl9pbnRlcmNlcHRfcG9wZiwKKwl4ODZfaW50ZXJjZXB0X2NwdWlkLAorCXg4Nl9pbnRlcmNlcHRfcnNtLAorCXg4Nl9pbnRlcmNlcHRfaXJldCwKKwl4ODZfaW50ZXJjZXB0X2ludG4sCisJeDg2X2ludGVyY2VwdF9pbnZkLAorCXg4Nl9pbnRlcmNlcHRfcGF1c2UsCisJeDg2X2ludGVyY2VwdF9obHQsCisJeDg2X2ludGVyY2VwdF9pbnZscGcsCisJeDg2X2ludGVyY2VwdF9pbnZscGdhLAorCXg4Nl9pbnRlcmNlcHRfdm1ydW4sCisJeDg2X2ludGVyY2VwdF92bWxvYWQsCisJeDg2X2ludGVyY2VwdF92bXNhdmUsCisJeDg2X2ludGVyY2VwdF92bW1jYWxsLAorCXg4Nl9pbnRlcmNlcHRfc3RnaSwKKwl4ODZfaW50ZXJjZXB0X2NsZ2ksCisJeDg2X2ludGVyY2VwdF9za2luaXQsCisJeDg2X2ludGVyY2VwdF9yZHRzY3AsCisJeDg2X2ludGVyY2VwdF9pY2VicCwKKwl4ODZfaW50ZXJjZXB0X3diaW52ZCwKKwl4ODZfaW50ZXJjZXB0X21vbml0b3IsCisJeDg2X2ludGVyY2VwdF9td2FpdCwKKwl4ODZfaW50ZXJjZXB0X3JkbXNyLAorCXg4Nl9pbnRlcmNlcHRfd3Jtc3IsCisJeDg2X2ludGVyY2VwdF9pbiwKKwl4ODZfaW50ZXJjZXB0X2lucywKKwl4ODZfaW50ZXJjZXB0X291dCwKKwl4ODZfaW50ZXJjZXB0X291dHMsCisKKwlucl94ODZfaW50ZXJjZXB0cworfTsKKwogLyogSG9zdCBleGVjdXRpb24gbW9kZS4gKi8KICNpZiBkZWZpbmVkKENPTkZJR19YODZfMzIpCiAjZGVmaW5lIFg4NkVNVUxfTU9ERV9IT1NUIFg4NkVNVUxfTU9ERV9QUk9UMzIKQEAgLTI3MCw2ICszNjgsNyBAQAogI2RlZmluZSBFTVVMQVRJT05fRkFJTEVEIC0xCiAjZGVmaW5lIEVNVUxBVElPTl9PSyAwCiAjZGVmaW5lIEVNVUxBVElPTl9SRVNUQVJUIDEKKyNkZWZpbmUgRU1VTEFUSU9OX0lOVEVSQ0VQVEVEIDIKIGludCB4ODZfZW11bGF0ZV9pbnNuKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KTsKIGludCBlbXVsYXRvcl90YXNrX3N3aXRjaChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKIAkJCSB1MTYgdHNzX3NlbGVjdG9yLCBpbnQgcmVhc29uLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggYzhhZjA5OS4uZDJhYzhlMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC0zMCwxNCArMzAsMzAgQEAKICNkZWZpbmUgS1ZNX01FTU9SWV9TTE9UUyAzMgogLyogbWVtb3J5IHNsb3RzIHRoYXQgZG9lcyBub3QgZXhwb3NlZCB0byB1c2Vyc3BhY2UgKi8KICNkZWZpbmUgS1ZNX1BSSVZBVEVfTUVNX1NMT1RTIDQKKyNkZWZpbmUgS1ZNX01NSU9fU0laRSAxNgogCiAjZGVmaW5lIEtWTV9QSU9fUEFHRV9PRkZTRVQgMQogI2RlZmluZSBLVk1fQ09BTEVTQ0VEX01NSU9fUEFHRV9PRkZTRVQgMgogCisjZGVmaW5lIENSMF9SRVNFUlZFRF9CSVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJKH4odW5zaWduZWQgbG9uZykoWDg2X0NSMF9QRSB8IFg4Nl9DUjBfTVAgfCBYODZfQ1IwX0VNIHwgWDg2X0NSMF9UUyBcCisJCQkgIHwgWDg2X0NSMF9FVCB8IFg4Nl9DUjBfTkUgfCBYODZfQ1IwX1dQIHwgWDg2X0NSMF9BTSBcCisJCQkgIHwgWDg2X0NSMF9OVyB8IFg4Nl9DUjBfQ0QgfCBYODZfQ1IwX1BHKSkKKwogI2RlZmluZSBDUjNfUEFFX1JFU0VSVkVEX0JJVFMgKChYODZfQ1IzX1BXVCB8IFg4Nl9DUjNfUENEKSAtIDEpCiAjZGVmaW5lIENSM19OT05QQUVfUkVTRVJWRURfQklUUyAoKFBBR0VfU0laRS0xKSAmIH4oWDg2X0NSM19QV1QgfCBYODZfQ1IzX1BDRCkpCiAjZGVmaW5lIENSM19MX01PREVfUkVTRVJWRURfQklUUyAoQ1IzX05PTlBBRV9SRVNFUlZFRF9CSVRTIHwJXAogCQkJCSAgMHhGRkZGRkYwMDAwMDAwMDAwVUxMKQorI2RlZmluZSBDUjRfUkVTRVJWRURfQklUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSh+KHVuc2lnbmVkIGxvbmcpKFg4Nl9DUjRfVk1FIHwgWDg2X0NSNF9QVkkgfCBYODZfQ1I0X1RTRCB8IFg4Nl9DUjRfREVcCisJCQkgIHwgWDg2X0NSNF9QU0UgfCBYODZfQ1I0X1BBRSB8IFg4Nl9DUjRfTUNFICAgICBcCisJCQkgIHwgWDg2X0NSNF9QR0UgfCBYODZfQ1I0X1BDRSB8IFg4Nl9DUjRfT1NGWFNSICBcCisJCQkgIHwgWDg2X0NSNF9PU1hTQVZFIFwKKwkJCSAgfCBYODZfQ1I0X09TWE1NRVhDUFQgfCBYODZfQ1I0X1ZNWEUpKQorCisjZGVmaW5lIENSOF9SRVNFUlZFRF9CSVRTICh+KHVuc2lnbmVkIGxvbmcpWDg2X0NSOF9UUFIpCisKKwogCiAjZGVmaW5lIElOVkFMSURfUEFHRSAofihocGFfdCkwKQogI2RlZmluZSBWQUxJRF9QQUdFKHgpICgoeCkgIT0gSU5WQUxJRF9QQUdFKQpAQCAtMTE4LDYgKzEzNCw5IEBACiBlbnVtIGt2bV9yZWdfZXggewogCVZDUFVfRVhSRUdfUERQVFIgPSBOUl9WQ1BVX1JFR1MsCiAJVkNQVV9FWFJFR19DUjMsCisJVkNQVV9FWFJFR19SRkxBR1MsCisJVkNQVV9FWFJFR19DUEwsCisJVkNQVV9FWFJFR19TRUdNRU5UUywKIH07CiAKIGVudW0gewpAQCAtMjU2LDcgKzI3NSw3IEBACiAJCQkgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApOwogCXZvaWQgKCppbnZscGcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhKTsKIAl2b2lkICgqdXBkYXRlX3B0ZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCwKLQkJCXU2NCAqc3B0ZSwgY29uc3Qgdm9pZCAqcHRlLCB1bnNpZ25lZCBsb25nIG1tdV9zZXEpOworCQkJICAgdTY0ICpzcHRlLCBjb25zdCB2b2lkICpwdGUpOwogCWhwYV90IHJvb3RfaHBhOwogCWludCByb290X2xldmVsOwogCWludCBzaGFkb3dfcm9vdF9sZXZlbDsKQEAgLTM0MCw3ICszNTksNiBAQAogCXN0cnVjdCBmcHUgZ3Vlc3RfZnB1OwogCXU2NCB4Y3IwOwogCi0JZ3ZhX3QgbW1pb19mYXVsdF9jcjI7CiAJc3RydWN0IGt2bV9waW9fcmVxdWVzdCBwaW87CiAJdm9pZCAqcGlvX2RhdGE7CiAKQEAgLTM2NywxOCArMzg1LDIyIEBACiAJLyogZW11bGF0ZSBjb250ZXh0ICovCiAKIAlzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCBlbXVsYXRlX2N0eHQ7CisJYm9vbCBlbXVsYXRlX3JlZ3NfbmVlZF9zeW5jX3RvX3ZjcHU7CisJYm9vbCBlbXVsYXRlX3JlZ3NfbmVlZF9zeW5jX2Zyb21fdmNwdTsKIAogCWdwYV90IHRpbWU7CiAJc3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gaHZfY2xvY2s7CiAJdW5zaWduZWQgaW50IGh3X3RzY19raHo7CiAJdW5zaWduZWQgaW50IHRpbWVfb2Zmc2V0OwogCXN0cnVjdCBwYWdlICp0aW1lX3BhZ2U7Ci0JdTY0IGxhc3RfaG9zdF90c2M7CiAJdTY0IGxhc3RfZ3Vlc3RfdHNjOwogCXU2NCBsYXN0X2tlcm5lbF9uczsKIAl1NjQgbGFzdF90c2NfbnNlYzsKIAl1NjQgbGFzdF90c2Nfd3JpdGU7CisJdTMyIHZpcnR1YWxfdHNjX2toejsKIAlib29sIHRzY19jYXRjaHVwOworCXUzMiAgdHNjX2NhdGNodXBfbXVsdDsKKwlzOCAgIHRzY19jYXRjaHVwX3NoaWZ0OwogCiAJYm9vbCBubWlfcGVuZGluZzsKIAlib29sIG5taV9pbmplY3RlZDsKQEAgLTQ0OCw5ICs0NzAsNiBAQAogCXU2NCBsYXN0X3RzY19uc2VjOwogCXU2NCBsYXN0X3RzY19vZmZzZXQ7CiAJdTY0IGxhc3RfdHNjX3dyaXRlOwotCXUzMiB2aXJ0dWFsX3RzY19raHo7Ci0JdTMyIHZpcnR1YWxfdHNjX211bHQ7Ci0JczggdmlydHVhbF90c2Nfc2hpZnQ7CiAKIAlzdHJ1Y3Qga3ZtX3hlbl9odm1fY29uZmlnIHhlbl9odm1fY29uZmlnOwogCkBAIC01MDIsNiArNTIxLDggQEAKIAl1MzIgbm1pX2luamVjdGlvbnM7CiB9OwogCitzdHJ1Y3QgeDg2X2luc3RydWN0aW9uX2luZm87CisKIHN0cnVjdCBrdm1feDg2X29wcyB7CiAJaW50ICgqY3B1X2hhc19rdm1fc3VwcG9ydCkodm9pZCk7ICAgICAgICAgIC8qIF9faW5pdCAqLwogCWludCAoKmRpc2FibGVkX2J5X2Jpb3MpKHZvaWQpOyAgICAgICAgICAgICAvKiBfX2luaXQgKi8KQEAgLTU4Niw5ICs2MDcsMTcgQEAKIAogCWJvb2wgKCpoYXNfd2JpbnZkX2V4aXQpKHZvaWQpOwogCisJdm9pZCAoKnNldF90c2Nfa2h6KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB1c2VyX3RzY19raHopOwogCXZvaWQgKCp3cml0ZV90c2Nfb2Zmc2V0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBvZmZzZXQpOwogCisJdTY0ICgqY29tcHV0ZV90c2Nfb2Zmc2V0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB0YXJnZXRfdHNjKTsKKwogCXZvaWQgKCpnZXRfZXhpdF9pbmZvKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqaW5mbzEsIHU2NCAqaW5mbzIpOworCisJaW50ICgqY2hlY2tfaW50ZXJjZXB0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkgICAgICAgc3RydWN0IHg4Nl9pbnN0cnVjdGlvbl9pbmZvICppbmZvLAorCQkJICAgICAgIGVudW0geDg2X2ludGVyY2VwdF9zdGFnZSBzdGFnZSk7CisKIAljb25zdCBzdHJ1Y3QgdHJhY2VfcHJpbnRfZmxhZ3MgKmV4aXRfcmVhc29uc19zdHI7CiB9OwogCkBAIC02MjcsNiArNjU2LDEzIEBACiAKIGV4dGVybiBib29sIHRkcF9lbmFibGVkOwogCisvKiBjb250cm9sIG9mIGd1ZXN0IHRzYyByYXRlIHN1cHBvcnRlZD8gKi8KK2V4dGVybiBib29sIGt2bV9oYXNfdHNjX2NvbnRyb2w7CisvKiBtaW5pbXVtIHN1cHBvcnRlZCB0c2Nfa2h6IGZvciBndWVzdHMgKi8KK2V4dGVybiB1MzIgIGt2bV9taW5fZ3Vlc3RfdHNjX2toejsKKy8qIG1heGltdW0gc3VwcG9ydGVkIHRzY19raHogZm9yIGd1ZXN0cyAqLworZXh0ZXJuIHUzMiAga3ZtX21heF9ndWVzdF90c2Nfa2h6OworCiBlbnVtIGVtdWxhdGlvbl9yZXN1bHQgewogCUVNVUxBVEVfRE9ORSwgICAgICAgLyogbm8gZnVydGhlciBwcm9jZXNzaW5nICovCiAJRU1VTEFURV9ET19NTUlPLCAgICAgIC8qIGt2bV9ydW4gZmlsbGVkIHdpdGggbW1pbyByZXF1ZXN0ICovCkBAIC02NDUsOSArNjgxLDYgQEAKIAlyZXR1cm4geDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgMCwgZW11bGF0aW9uX3R5cGUsIE5VTEwsIDApOwogfQogCi12b2lkIHJlYWxtb2RlX2xnZHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgc2l6ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKLXZvaWQgcmVhbG1vZGVfbGlkdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBzaXplLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwotCiB2b2lkIGt2bV9lbmFibGVfZWZlcl9iaXRzKHU2NCk7CiBpbnQga3ZtX2dldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyX2luZGV4LCB1NjQgKmRhdGEpOwogaW50IGt2bV9zZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcl9pbmRleCwgdTY0IGRhdGEpOwpAQCAtNjU3LDggKzY5MCw2IEBACiBpbnQga3ZtX2Zhc3RfcGlvX291dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzaXplLCB1bnNpZ25lZCBzaG9ydCBwb3J0KTsKIHZvaWQga3ZtX2VtdWxhdGVfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGludCBrdm1fZW11bGF0ZV9oYWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci1pbnQgZW11bGF0ZV9pbnZscGcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBhZGRyZXNzKTsKLWludCBlbXVsYXRlX2NsdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGludCBrdm1fZW11bGF0ZV93YmludmQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogdm9pZCBrdm1fZ2V0X3NlZ21lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NlZ21lbnQgKnZhciwgaW50IHNlZyk7CkBAIC03MjEsOCArNzUyLDYgQEAKIAogaW50IGt2bV9lbXVsYXRlX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCi1pbnQga3ZtX2ZpeF9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLQogaW50IGt2bV9tbXVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdTMyIGVycm9yX2NvZGUsCiAJCSAgICAgICB2b2lkICppbnNuLCBpbnQgaW5zbl9sZW4pOwogdm9pZCBrdm1fbW11X2ludmxwZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCmluZGV4IDNjY2U3MTQuLjQ4NWI0ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCkBAIC0xMTgsNiArMTE4LDcgQEAKICAgIGNvbXBsZXRlIGxpc3QuICovCiAKICNkZWZpbmUgTVNSX0FNRDY0X1BBVENIX0xFVkVMCQkweDAwMDAwMDhiCisjZGVmaW5lIE1TUl9BTUQ2NF9UU0NfUkFUSU8JCTB4YzAwMDAxMDQKICNkZWZpbmUgTVNSX0FNRDY0X05CX0NGRwkJMHhjMDAxMDAxZgogI2RlZmluZSBNU1JfQU1ENjRfUEFUQ0hfTE9BREVSCQkweGMwMDEwMDIwCiAjZGVmaW5lIE1TUl9BTUQ2NF9PU1ZXX0lEX0xFTkdUSAkweGMwMDEwMTQwCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgKaW5kZXggOTlmMGFkNy4uOTlkZGQxNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApAQCAtNiw3ICs2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KLSNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGFzbS9hc20uaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc18zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc18zMi5oCmluZGV4IDA4OGQwOWYuLjU2NmU4MDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfMzIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzMyLmgKQEAgLTYsNyArNiw2IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxhc20vYXNtLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaAppbmRleCAzMTY3MDhkLi4xYzY2ZDMwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oCkBAIC02LDcgKzYsNiBAQAogICovCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSA8bGludXgvbG9ja2RlcC5oPgogI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS5oPgogI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmlzdGRfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF8zMi5oCmluZGV4IGE3NTVlZjUuLmZiNmE2MjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF8zMi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF8zMi5oCkBAIC0zNTAsMTAgKzM1MCwxMSBAQAogI2RlZmluZSBfX05SX29wZW5fYnlfaGFuZGxlX2F0ICAzNDIKICNkZWZpbmUgX19OUl9jbG9ja19hZGp0aW1lCTM0MwogI2RlZmluZSBfX05SX3N5bmNmcyAgICAgICAgICAgICAzNDQKKyNkZWZpbmUgX19OUl9zZW5kbW1zZwkJMzQ1CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNkZWZpbmUgTlJfc3lzY2FsbHMgMzQ1CisjZGVmaW5lIE5SX3N5c2NhbGxzIDM0NgogCiAjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmlzdGRfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oCmluZGV4IDE2MGZhNzYuLjc5ZjkwZWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oCkBAIC02NzcsNiArNjc3LDggQEAKIF9fU1lTQ0FMTChfX05SX2Nsb2NrX2FkanRpbWUsIHN5c19jbG9ja19hZGp0aW1lKQogI2RlZmluZSBfX05SX3N5bmNmcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzA2CiBfX1NZU0NBTEwoX19OUl9zeW5jZnMsIHN5c19zeW5jZnMpCisjZGVmaW5lIF9fTlJfc2VuZG1tc2cJCQkJMzA3CitfX1NZU0NBTEwoX19OUl9zZW5kbW1zZywgc3lzX3NlbmRtbXNnKQogCiAjaWZuZGVmIF9fTk9fU1RVQlMKICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYwppbmRleCA4NzNlN2UxLi5jZDhjYmViIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jCkBAIC0xNTM4LDEzICsxNTM4LDExIEBACiB7CiAJc3RydWN0IGlvbW11X2Rldl9kYXRhICpkZXZfZGF0YTsKIAlzdHJ1Y3QgYW1kX2lvbW11ICppb21tdTsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKIAl1MTYgZGV2aWQ7CiAKIAlkZXZpZCAgICA9IGdldF9kZXZpY2VfaWQoZGV2KTsKIAlpb21tdSAgICA9IGFtZF9pb21tdV9ybG9va3VwX3RhYmxlW2RldmlkXTsKIAlkZXZfZGF0YSA9IGdldF9kZXZfZGF0YShkZXYpOwotCXBkZXYgICAgID0gdG9fcGNpX2RldihkZXYpOwogCiAJLyogZGVjcmVhc2UgcmVmZXJlbmNlIGNvdW50ZXJzICovCiAJZGV2X2RhdGEtPmRvbWFpbi0+ZGV2X2lvbW11W2lvbW11LT5pbmRleF0gLT0gMTsKQEAgLTE3MDMsMTAgKzE3MDEsOSBAQAogCXN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqZG9tOwogCXN0cnVjdCBpb21tdV9kZXZfZGF0YSAqZGV2X2RhdGEsICphbGlhc19kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTE2IGRldmlkLCBhbGlhczsKKwl1MTYgZGV2aWQ7CiAKIAlkZXZpZCAgICAgID0gZ2V0X2RldmljZV9pZChkZXYpOwotCWFsaWFzICAgICAgPSBhbWRfaW9tbXVfYWxpYXNfdGFibGVbZGV2aWRdOwogCWRldl9kYXRhICAgPSBnZXRfZGV2X2RhdGEoZGV2KTsKIAlhbGlhc19kYXRhID0gZ2V0X2Rldl9kYXRhKGRldl9kYXRhLT5hbGlhcyk7CiAJaWYgKCFhbGlhc19kYXRhKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvaHdfbm1pLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9od19ubWkuYwppbmRleCA1MjYwZmU5Li5kNWU1N2RiMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvaHdfbm1pLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvaHdfbm1pLmMKQEAgLTE5LDkgKzE5LDkgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjaWZkZWYgQ09ORklHX0hBUkRMT0NLVVBfREVURUNUT1IKLXU2NCBod19ubWlfZ2V0X3NhbXBsZV9wZXJpb2Qodm9pZCkKK3U2NCBod19ubWlfZ2V0X3NhbXBsZV9wZXJpb2QoaW50IHdhdGNoZG9nX3RocmVzaCkKIHsKLQlyZXR1cm4gKHU2NCkoY3B1X2toeikgKiAxMDAwICogNjA7CisJcmV0dXJuICh1NjQpKGNwdV9raHopICogMTAwMCAqIHdhdGNoZG9nX3RocmVzaDsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYwppbmRleCA2ZjlkMWY2Li44ZjVjYWJiMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCkBAIC02MjksMTAgKzYyOSwxMyBAQAogCQkgKiBGaXhlczogaHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzAxMgogCQkgKi8KIAkJdTY0IG1hc2s7CisJCWludCBlcnI7CiAKLQkJcmRtc3JsKE1TUl9BTUQ2NF9NQ3hfTUFTSyg0KSwgbWFzayk7Ci0JCW1hc2sgfD0gKDEgPDwgMTApOwotCQl3cm1zcmwoTVNSX0FNRDY0X01DeF9NQVNLKDQpLCBtYXNrKTsKKwkJZXJyID0gcmRtc3JsX3NhZmUoTVNSX0FNRDY0X01DeF9NQVNLKDQpLCAmbWFzayk7CisJCWlmIChlcnIgPT0gMCkgeworCQkJbWFzayB8PSAoMSA8PCAxMCk7CisJCQljaGVja2luZ193cm1zcmwoTVNSX0FNRDY0X01DeF9NQVNLKDQpLCBtYXNrKTsKKwkJfQogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKaW5kZXggY2JjNzBhMi4uYzhiNDE2MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCkBAIC0yNTQsNyArMjU0LDcgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IGRpc2FibGVfc21lcCBfX2luaXRkYXRhOworc3RhdGljIGludCBkaXNhYmxlX3NtZXAgX19jcHVpbml0ZGF0YTsKIHN0YXRpYyBfX2luaXQgaW50IHNldHVwX2Rpc2FibGVfc21lcChjaGFyICphcmcpCiB7CiAJZGlzYWJsZV9zbWVwID0gMTsKQEAgLTI2Miw3ICsyNjIsNyBAQAogfQogX19zZXR1cCgibm9zbWVwIiwgc2V0dXBfZGlzYWJsZV9zbWVwKTsKIAotc3RhdGljIF9faW5pdCB2b2lkIHNldHVwX3NtZXAoc3RydWN0IGNwdWluZm9feDg2ICpjKQorc3RhdGljIF9fY3B1aW5pdCB2b2lkIHNldHVwX3NtZXAoc3RydWN0IGNwdWluZm9feDg2ICpjKQogewogCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX1NNRVApKSB7CiAJCWlmICh1bmxpa2VseShkaXNhYmxlX3NtZXApKSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2lnbmFsLmMKaW5kZXggNGZkMTczYy4uNDBhMjQ5MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zaWduYWwuYwpAQCAtNjAxLDEwICs2MDEsNyBAQAogCQlnb3RvIGJhZGZyYW1lOwogCiAJc2lnZGVsc2V0bWFzaygmc2V0LCB+X0JMT0NLQUJMRSk7Ci0Jc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JY3VycmVudC0+YmxvY2tlZCA9IHNldDsKLQlyZWNhbGNfc2lncGVuZGluZygpOwotCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CisJc2V0X2N1cnJlbnRfYmxvY2tlZCgmc2V0KTsKIAogCWlmIChyZXN0b3JlX3NpZ2NvbnRleHQocmVncywgJmZyYW1lLT51Yy51Y19tY29udGV4dCwgJmF4KSkKIAkJZ290byBiYWRmcmFtZTsKQEAgLTY4Miw2ICs2NzksNyBAQAogaGFuZGxlX3NpZ25hbCh1bnNpZ25lZCBsb25nIHNpZywgc2lnaW5mb190ICppbmZvLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLAogCSAgICAgIHNpZ3NldF90ICpvbGRzZXQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogeworCXNpZ3NldF90IGJsb2NrZWQ7CiAJaW50IHJldDsKIAogCS8qIEFyZSB3ZSBmcm9tIGEgc3lzdGVtIGNhbGw/ICovCkBAIC03NDEsMTIgKzczOSwxMCBAQAogCSAqLwogCXJlZ3MtPmZsYWdzICY9IH5YODZfRUZMQUdTX1RGOwogCi0Jc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0Jc2lnb3JzZXRzKCZjdXJyZW50LT5ibG9ja2VkLCAmY3VycmVudC0+YmxvY2tlZCwgJmthLT5zYS5zYV9tYXNrKTsKKwlzaWdvcnNldHMoJmJsb2NrZWQsICZjdXJyZW50LT5ibG9ja2VkLCAma2EtPnNhLnNhX21hc2spOwogCWlmICghKGthLT5zYS5zYV9mbGFncyAmIFNBX05PREVGRVIpKQotCQlzaWdhZGRzZXQoJmN1cnJlbnQtPmJsb2NrZWQsIHNpZyk7Ci0JcmVjYWxjX3NpZ3BlbmRpbmcoKTsKLQlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOworCQlzaWdhZGRzZXQoJmJsb2NrZWQsIHNpZyk7CisJc2V0X2N1cnJlbnRfYmxvY2tlZCgmYmxvY2tlZCk7CiAKIAl0cmFjZWhvb2tfc2lnbmFsX2hhbmRsZXIoc2lnLCBpbmZvLCBrYSwgcmVncywKIAkJCQkgdGVzdF90aHJlYWRfZmxhZyhUSUZfU0lOR0xFU1RFUCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3N5c2NhbGxfdGFibGVfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9zeXNjYWxsX3RhYmxlXzMyLlMKaW5kZXggYWJjZTM0ZC4uMzJjYmZmYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3N5c2NhbGxfdGFibGVfMzIuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZV8zMi5TCkBAIC0zNDQsMyArMzQ0LDQgQEAKIAkubG9uZyBzeXNfb3Blbl9ieV9oYW5kbGVfYXQKIAkubG9uZyBzeXNfY2xvY2tfYWRqdGltZQogCS5sb25nIHN5c19zeW5jZnMKKwkubG9uZyBzeXNfc2VuZG1tc2cJCS8qIDM0NSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Rlc3RfbnguYyBiL2FyY2gveDg2L2tlcm5lbC90ZXN0X254LmMKaW5kZXggNzg3YTVlNC4uM2Y5MmNlMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Rlc3RfbnguYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdGVzdF9ueC5jCkBAIC0xNjEsNyArMTYxLDcgQEAKIAl9CiAKICNlbmRpZgotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHRlc3RfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuYyBiL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMKaW5kZXggMGFkNDdiOC4uZDZlMjQ3NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuYworKysgYi9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jCkBAIC03Myw5ICs3MywxNCBAQAogI2RlZmluZSBNZW1BYnMgICAgICAoMTw8MTEpICAgICAgLyogTWVtb3J5IG9wZXJhbmQgaXMgYWJzb2x1dGUgZGlzcGxhY2VtZW50ICovCiAjZGVmaW5lIFN0cmluZyAgICAgICgxPDwxMikgICAgIC8qIFN0cmluZyBpbnN0cnVjdGlvbiAocmVwIGNhcGFibGUpICovCiAjZGVmaW5lIFN0YWNrICAgICAgICgxPDwxMykgICAgIC8qIFN0YWNrIGluc3RydWN0aW9uIChwdXNoL3BvcCkgKi8KKyNkZWZpbmUgR3JvdXBNYXNrICAgKDc8PDE0KSAgICAgLyogT3Bjb2RlIHVzZXMgb25lIG9mIHRoZSBncm91cCBtZWNoYW5pc21zICovCiAjZGVmaW5lIEdyb3VwICAgICAgICgxPDwxNCkgICAgIC8qIEJpdHMgMzo1IG9mIG1vZHJtIGJ5dGUgZXh0ZW5kIG9wY29kZSAqLwotI2RlZmluZSBHcm91cER1YWwgICAoMTw8MTUpICAgICAvKiBBbHRlcm5hdGUgZGVjb2Rpbmcgb2YgbW9kID09IDMgKi8KKyNkZWZpbmUgR3JvdXBEdWFsICAgKDI8PDE0KSAgICAgLyogQWx0ZXJuYXRlIGRlY29kaW5nIG9mIG1vZCA9PSAzICovCisjZGVmaW5lIFByZWZpeCAgICAgICgzPDwxNCkgICAgIC8qIEluc3RydWN0aW9uIHZhcmllcyB3aXRoIDY2L2YyL2YzIHByZWZpeCAqLworI2RlZmluZSBSTUV4dCAgICAgICAoNDw8MTQpICAgICAvKiBPcGNvZGUgZXh0ZW5zaW9uIGluIE1vZFJNIHIvbSBpZiBtb2QgPT0gMyAqLworI2RlZmluZSBTc2UgICAgICAgICAoMTw8MTcpICAgICAvKiBTU0UgVmVjdG9yIGluc3RydWN0aW9uICovCiAvKiBNaXNjIGZsYWdzICovCisjZGVmaW5lIFByb3QgICAgICAgICgxPDwyMSkgLyogaW5zdHJ1Y3Rpb24gZ2VuZXJhdGVzICNVRCBpZiBub3QgaW4gcHJvdC1tb2RlICovCiAjZGVmaW5lIFZlbmRvclNwZWNpZmljICgxPDwyMikgLyogVmVuZG9yIHNwZWNpZmljIGluc3RydWN0aW9uICovCiAjZGVmaW5lIE5vQWNjZXNzICAgICgxPDwyMykgLyogRG9uJ3QgYWNjZXNzIG1lbW9yeSAobGVhL2ludmxwZy92ZXJyIGV0YykgKi8KICNkZWZpbmUgT3AzMjY0ICAgICAgKDE8PDI0KSAvKiBPcGVyYW5kIGlzIDY0YiBpbiBsb25nIG1vZGUsIDMyYiBvdGhlcndpc2UgKi8KQEAgLTEwMiwxMSArMTA3LDE0IEBACiAKIHN0cnVjdCBvcGNvZGUgewogCXUzMiBmbGFnczsKKwl1OCBpbnRlcmNlcHQ7CiAJdW5pb24gewogCQlpbnQgKCpleGVjdXRlKShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCk7CiAJCXN0cnVjdCBvcGNvZGUgKmdyb3VwOwogCQlzdHJ1Y3QgZ3JvdXBfZHVhbCAqZ2R1YWw7CisJCXN0cnVjdCBncHJlZml4ICpncHJlZml4OwogCX0gdTsKKwlpbnQgKCpjaGVja19wZXJtKShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCk7CiB9OwogCiBzdHJ1Y3QgZ3JvdXBfZHVhbCB7CkBAIC0xMTQsNiArMTIyLDEzIEBACiAJc3RydWN0IG9wY29kZSBtb2QzWzhdOwogfTsKIAorc3RydWN0IGdwcmVmaXggeworCXN0cnVjdCBvcGNvZGUgcGZ4X25vOworCXN0cnVjdCBvcGNvZGUgcGZ4XzY2OworCXN0cnVjdCBvcGNvZGUgcGZ4X2YyOworCXN0cnVjdCBvcGNvZGUgcGZ4X2YzOworfTsKKwogLyogRUZMQUdTIGJpdCBkZWZpbml0aW9ucy4gKi8KICNkZWZpbmUgRUZMR19JRCAoMTw8MjEpCiAjZGVmaW5lIEVGTEdfVklQICgxPDwyMCkKQEAgLTI0OCw0MiArMjYzLDQyIEBACiAJCQkgICAgICJ3IiwgInIiLCBfTE8zMiwgInIiLCAiIiwgInIiKQogCiAvKiBJbnN0cnVjdGlvbiBoYXMgdGhyZWUgb3BlcmFuZHMgYW5kIG9uZSBvcGVyYW5kIGlzIHN0b3JlZCBpbiBFQ1ggcmVnaXN0ZXIgKi8KLSNkZWZpbmUgX19lbXVsYXRlXzJvcF9jbChfb3AsIF9jbCwgX3NyYywgX2RzdCwgX2VmbGFncywgX3N1ZmZpeCwgX3R5cGUpIAlcCi0JZG8gewkJCQkJCQkJCVwKLQkJdW5zaWduZWQgbG9uZyBfdG1wOwkJCQkJCVwKLQkJX3R5cGUgX2NsdiAgPSAoX2NsKS52YWw7ICAJCQkJCVwKLQkJX3R5cGUgX3NyY3YgPSAoX3NyYykudmFsOyAgICAJCQkJCVwKLQkJX3R5cGUgX2RzdHYgPSAoX2RzdCkudmFsOwkJCQkJXAotCQkJCQkJCQkJCVwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCVwKLQkJCV9QUkVfRUZMQUdTKCIwIiwgIjUiLCAiMiIpCQkJCVwKLQkJCV9vcCBfc3VmZml4ICIgJTQsJTEgXG4iCQkJCQlcCi0JCQlfUE9TVF9FRkxBR1MoIjAiLCAiNSIsICIyIikJCQkJXAotCQkJOiAiPW0iIChfZWZsYWdzKSwgIityIiAoX2RzdHYpLCAiPSZyIiAoX3RtcCkJCVwKLQkJCTogImMiIChfY2x2KSAsICJyIiAoX3NyY3YpLCAiaSIgKEVGTEFHU19NQVNLKQkJXAotCQkJKTsgCQkJCQkJCVwKLQkJCQkJCQkJCQlcCi0JCShfY2wpLnZhbCAgPSAodW5zaWduZWQgbG9uZykgX2NsdjsJCQkJXAotCQkoX3NyYykudmFsID0gKHVuc2lnbmVkIGxvbmcpIF9zcmN2OwkJCQlcCi0JCShfZHN0KS52YWwgPSAodW5zaWduZWQgbG9uZykgX2RzdHY7CQkJCVwKKyNkZWZpbmUgX19lbXVsYXRlXzJvcF9jbChfb3AsIF9jbCwgX3NyYywgX2RzdCwgX2VmbGFncywgX3N1ZmZpeCwgX3R5cGUpCVwKKwlkbyB7CQkJCQkJCQlcCisJCXVuc2lnbmVkIGxvbmcgX3RtcDsJCQkJCVwKKwkJX3R5cGUgX2NsdiAgPSAoX2NsKS52YWw7CQkJCVwKKwkJX3R5cGUgX3NyY3YgPSAoX3NyYykudmFsOwkJCQlcCisJCV90eXBlIF9kc3R2ID0gKF9kc3QpLnZhbDsJCQkJXAorCQkJCQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQlcCisJCQlfUFJFX0VGTEFHUygiMCIsICI1IiwgIjIiKQkJCVwKKwkJCV9vcCBfc3VmZml4ICIgJTQsJTEgXG4iCQkJCVwKKwkJCV9QT1NUX0VGTEFHUygiMCIsICI1IiwgIjIiKQkJCVwKKwkJCTogIj1tIiAoX2VmbGFncyksICIrciIgKF9kc3R2KSwgIj0mciIgKF90bXApCVwKKwkJCTogImMiIChfY2x2KSAsICJyIiAoX3NyY3YpLCAiaSIgKEVGTEFHU19NQVNLKQlcCisJCQkpOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwkJKF9jbCkudmFsICA9ICh1bnNpZ25lZCBsb25nKSBfY2x2OwkJCVwKKwkJKF9zcmMpLnZhbCA9ICh1bnNpZ25lZCBsb25nKSBfc3JjdjsJCQlcCisJCShfZHN0KS52YWwgPSAodW5zaWduZWQgbG9uZykgX2RzdHY7CQkJXAogCX0gd2hpbGUgKDApCiAKLSNkZWZpbmUgZW11bGF0ZV8yb3BfY2woX29wLCBfY2wsIF9zcmMsIF9kc3QsIF9lZmxhZ3MpCQkJCVwKLQlkbyB7CQkJCQkJCQkJXAotCQlzd2l0Y2ggKChfZHN0KS5ieXRlcykgewkJCQkJCVwKLQkJY2FzZSAyOgkJCQkJCQkJXAotCQkJX19lbXVsYXRlXzJvcF9jbChfb3AsIF9jbCwgX3NyYywgX2RzdCwgX2VmbGFncywgIAlcCi0JCQkJCQkidyIsIHVuc2lnbmVkIHNob3J0KTsgICAgICAgICAJXAotCQkJYnJlYWs7CQkJCQkJCVwKLQkJY2FzZSA0OiAJCQkJCQkJXAotCQkJX19lbXVsYXRlXzJvcF9jbChfb3AsIF9jbCwgX3NyYywgX2RzdCwgX2VmbGFncywgIAlcCi0JCQkJCQkibCIsIHVuc2lnbmVkIGludCk7ICAgICAgICAgICAJXAotCQkJYnJlYWs7CQkJCQkJCVwKLQkJY2FzZSA4OgkJCQkJCQkJXAotCQkJT042NChfX2VtdWxhdGVfMm9wX2NsKF9vcCwgX2NsLCBfc3JjLCBfZHN0LCBfZWZsYWdzLAlcCi0JCQkJCQkicSIsIHVuc2lnbmVkIGxvbmcpKTsgIAkJXAotCQkJYnJlYWs7CQkJCQkJCVwKLQkJfQkJCQkJCQkJXAorI2RlZmluZSBlbXVsYXRlXzJvcF9jbChfb3AsIF9jbCwgX3NyYywgX2RzdCwgX2VmbGFncykJCQlcCisJZG8gewkJCQkJCQkJXAorCQlzd2l0Y2ggKChfZHN0KS5ieXRlcykgewkJCQkJXAorCQljYXNlIDI6CQkJCQkJCVwKKwkJCV9fZW11bGF0ZV8yb3BfY2woX29wLCBfY2wsIF9zcmMsIF9kc3QsIF9lZmxhZ3MsCVwKKwkJCQkJICJ3IiwgdW5zaWduZWQgc2hvcnQpOyAgICAgICAgIAlcCisJCQlicmVhazsJCQkJCQlcCisJCWNhc2UgNDoJCQkJCQkJXAorCQkJX19lbXVsYXRlXzJvcF9jbChfb3AsIF9jbCwgX3NyYywgX2RzdCwgX2VmbGFncywJXAorCQkJCQkgImwiLCB1bnNpZ25lZCBpbnQpOyAgICAgICAgICAgCVwKKwkJCWJyZWFrOwkJCQkJCVwKKwkJY2FzZSA4OgkJCQkJCQlcCisJCQlPTjY0KF9fZW11bGF0ZV8yb3BfY2woX29wLCBfY2wsIF9zcmMsIF9kc3QsIF9lZmxhZ3MsIFwKKwkJCQkJICAgICAgInEiLCB1bnNpZ25lZCBsb25nKSk7CVwKKwkJCWJyZWFrOwkJCQkJCVwKKwkJfQkJCQkJCQlcCiAJfSB3aGlsZSAoMCkKIAogI2RlZmluZSBfX2VtdWxhdGVfMW9wKF9vcCwgX2RzdCwgX2VmbGFncywgX3N1ZmZpeCkJCQlcCkBAIC0zNDYsMTMgKzM2MSwyNSBAQAogCX0gd2hpbGUgKDApCiAKIC8qIGluc3RydWN0aW9uIGhhcyBvbmx5IG9uZSBzb3VyY2Ugb3BlcmFuZCwgZGVzdGluYXRpb24gaXMgaW1wbGljaXQgKGUuZy4gbXVsLCBkaXYsIGltdWwsIGlkaXYpICovCi0jZGVmaW5lIGVtdWxhdGVfMW9wX3JheF9yZHgoX29wLCBfc3JjLCBfcmF4LCBfcmR4LCBfZWZsYWdzKQkJCVwKLQlkbyB7CQkJCQkJCQkJXAotCQlzd2l0Y2goKF9zcmMpLmJ5dGVzKSB7CQkJCQkJXAotCQljYXNlIDE6IF9fZW11bGF0ZV8xb3BfcmF4X3JkeChfb3AsIF9zcmMsIF9yYXgsIF9yZHgsIF9lZmxhZ3MsICJiIik7IGJyZWFrOyBcCi0JCWNhc2UgMjogX19lbXVsYXRlXzFvcF9yYXhfcmR4KF9vcCwgX3NyYywgX3JheCwgX3JkeCwgIF9lZmxhZ3MsICJ3Iik7IGJyZWFrOyBcCi0JCWNhc2UgNDogX19lbXVsYXRlXzFvcF9yYXhfcmR4KF9vcCwgX3NyYywgX3JheCwgX3JkeCwgX2VmbGFncywgImwiKTsgYnJlYWs7IFwKLQkJY2FzZSA4OiBPTjY0KF9fZW11bGF0ZV8xb3BfcmF4X3JkeChfb3AsIF9zcmMsIF9yYXgsIF9yZHgsIF9lZmxhZ3MsICJxIikpOyBicmVhazsgXAorI2RlZmluZSBlbXVsYXRlXzFvcF9yYXhfcmR4KF9vcCwgX3NyYywgX3JheCwgX3JkeCwgX2VmbGFncykJCVwKKwlkbyB7CQkJCQkJCQlcCisJCXN3aXRjaCgoX3NyYykuYnl0ZXMpIHsJCQkJCVwKKwkJY2FzZSAxOgkJCQkJCQlcCisJCQlfX2VtdWxhdGVfMW9wX3JheF9yZHgoX29wLCBfc3JjLCBfcmF4LCBfcmR4LAlcCisJCQkJCSAgICAgIF9lZmxhZ3MsICJiIik7CQlcCisJCQlicmVhazsJCQkJCQlcCisJCWNhc2UgMjoJCQkJCQkJXAorCQkJX19lbXVsYXRlXzFvcF9yYXhfcmR4KF9vcCwgX3NyYywgX3JheCwgX3JkeCwJXAorCQkJCQkgICAgICBfZWZsYWdzLCAidyIpOwkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQljYXNlIDQ6CQkJCQkJCVwKKwkJCV9fZW11bGF0ZV8xb3BfcmF4X3JkeChfb3AsIF9zcmMsIF9yYXgsIF9yZHgsCVwKKwkJCQkJICAgICAgX2VmbGFncywgImwiKTsJCVwKKwkJCWJyZWFrOwkJCQkJCVwKKwkJY2FzZSA4OgkJCQkJCQlcCisJCQlPTjY0KF9fZW11bGF0ZV8xb3BfcmF4X3JkeChfb3AsIF9zcmMsIF9yYXgsIF9yZHgsIFwKKwkJCQkJCSAgIF9lZmxhZ3MsICJxIikpOwlcCisJCQlicmVhazsJCQkJCQlcCiAJCX0JCQkJCQkJXAogCX0gd2hpbGUgKDApCiAKQEAgLTM4OCwxMyArNDE1LDMzIEBACiAJKF90eXBlKV94OwkJCQkJCQlcCiB9KQogCi0jZGVmaW5lIGluc25fZmV0Y2hfYXJyKF9hcnIsIF9zaXplLCBfZWlwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBpbnNuX2ZldGNoX2FycihfYXJyLCBfc2l6ZSwgX2VpcCkJCQkJXAogKHsJcmMgPSBkb19pbnNuX2ZldGNoKGN0eHQsIG9wcywgKF9laXApLCBfYXJyLCAoX3NpemUpKTsJCVwKIAlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkJCQkJCVwKIAkJZ290byBkb25lOwkJCQkJCVwKIAkoX2VpcCkgKz0gKF9zaXplKTsJCQkJCQlcCiB9KQogCitzdGF0aWMgaW50IGVtdWxhdG9yX2NoZWNrX2ludGVyY2VwdChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKKwkJCQkgICAgZW51bSB4ODZfaW50ZXJjZXB0IGludGVyY2VwdCwKKwkJCQkgICAgZW51bSB4ODZfaW50ZXJjZXB0X3N0YWdlIHN0YWdlKQoreworCXN0cnVjdCB4ODZfaW5zdHJ1Y3Rpb25faW5mbyBpbmZvID0geworCQkuaW50ZXJjZXB0ICA9IGludGVyY2VwdCwKKwkJLnJlcF9wcmVmaXggPSBjdHh0LT5kZWNvZGUucmVwX3ByZWZpeCwKKwkJLm1vZHJtX21vZCAgPSBjdHh0LT5kZWNvZGUubW9kcm1fbW9kLAorCQkubW9kcm1fcmVnICA9IGN0eHQtPmRlY29kZS5tb2RybV9yZWcsCisJCS5tb2RybV9ybSAgID0gY3R4dC0+ZGVjb2RlLm1vZHJtX3JtLAorCQkuc3JjX3ZhbCAgICA9IGN0eHQtPmRlY29kZS5zcmMudmFsNjQsCisJCS5zcmNfYnl0ZXMgID0gY3R4dC0+ZGVjb2RlLnNyYy5ieXRlcywKKwkJLmRzdF9ieXRlcyAgPSBjdHh0LT5kZWNvZGUuZHN0LmJ5dGVzLAorCQkuYWRfYnl0ZXMgICA9IGN0eHQtPmRlY29kZS5hZF9ieXRlcywKKwkJLm5leHRfcmlwICAgPSBjdHh0LT5laXAsCisJfTsKKworCXJldHVybiBjdHh0LT5vcHMtPmludGVyY2VwdChjdHh0LCAmaW5mbywgc3RhZ2UpOworfQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYWRfbWFzayhzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjKQogewogCXJldHVybiAoMVVMIDw8IChjLT5hZF9ieXRlcyA8PCAzKSkgLSAxOwpAQCAtNDMwLDYgKzQ3NywxMyBAQAogCXJlZ2lzdGVyX2FkZHJlc3NfaW5jcmVtZW50KGMsICZjLT5laXAsIHJlbCk7CiB9CiAKK3N0YXRpYyB1MzIgZGVzY19saW1pdF9zY2FsZWQoc3RydWN0IGRlc2Nfc3RydWN0ICpkZXNjKQoreworCXUzMiBsaW1pdCA9IGdldF9kZXNjX2xpbWl0KGRlc2MpOworCisJcmV0dXJuIGRlc2MtPmcgPyAobGltaXQgPDwgMTIpIHwgMHhmZmYgOiBsaW1pdDsKK30KKwogc3RhdGljIHZvaWQgc2V0X3NlZ19vdmVycmlkZShzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjLCBpbnQgc2VnKQogewogCWMtPmhhc19zZWdfb3ZlcnJpZGUgPSB0cnVlOwpAQCAtNDQyLDExICs0OTYsMTAgQEAKIAlpZiAoY3R4dC0+bW9kZSA9PSBYODZFTVVMX01PREVfUFJPVDY0ICYmIHNlZyA8IFZDUFVfU1JFR19GUykKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gb3BzLT5nZXRfY2FjaGVkX3NlZ21lbnRfYmFzZShzZWcsIGN0eHQtPnZjcHUpOworCXJldHVybiBvcHMtPmdldF9jYWNoZWRfc2VnbWVudF9iYXNlKGN0eHQsIHNlZyk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBzZWdfb3ZlcnJpZGUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCi0JCQkgICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcywKIAkJCSAgICAgc3RydWN0IGRlY29kZV9jYWNoZSAqYykKIHsKIAlpZiAoIWMtPmhhc19zZWdfb3ZlcnJpZGUpCkBAIC00NTUsMTggKzUwOCw2IEBACiAJcmV0dXJuIGMtPnNlZ19vdmVycmlkZTsKIH0KIAotc3RhdGljIHVsb25nIGxpbmVhcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKLQkJICAgIHN0cnVjdCBzZWdtZW50ZWRfYWRkcmVzcyBhZGRyKQotewotCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOwotCXVsb25nIGxhOwotCi0JbGEgPSBzZWdfYmFzZShjdHh0LCBjdHh0LT5vcHMsIGFkZHIuc2VnKSArIGFkZHIuZWE7Ci0JaWYgKGMtPmFkX2J5dGVzICE9IDgpCi0JCWxhICY9ICh1MzIpLTE7Ci0JcmV0dXJuIGxhOwotfQotCiBzdGF0aWMgaW50IGVtdWxhdGVfZXhjZXB0aW9uKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBpbnQgdmVjLAogCQkJICAgICB1MzIgZXJyb3IsIGJvb2wgdmFsaWQpCiB7CkBAIC00NzYsMTEgKzUxNywyMSBAQAogCXJldHVybiBYODZFTVVMX1BST1BBR0FURV9GQVVMVDsKIH0KIAorc3RhdGljIGludCBlbXVsYXRlX2RiKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworCXJldHVybiBlbXVsYXRlX2V4Y2VwdGlvbihjdHh0LCBEQl9WRUNUT1IsIDAsIGZhbHNlKTsKK30KKwogc3RhdGljIGludCBlbXVsYXRlX2dwKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBpbnQgZXJyKQogewogCXJldHVybiBlbXVsYXRlX2V4Y2VwdGlvbihjdHh0LCBHUF9WRUNUT1IsIGVyciwgdHJ1ZSk7CiB9CiAKK3N0YXRpYyBpbnQgZW11bGF0ZV9zcyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgaW50IGVycikKK3sKKwlyZXR1cm4gZW11bGF0ZV9leGNlcHRpb24oY3R4dCwgU1NfVkVDVE9SLCBlcnIsIHRydWUpOworfQorCiBzdGF0aWMgaW50IGVtdWxhdGVfdWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCiB7CiAJcmV0dXJuIGVtdWxhdGVfZXhjZXB0aW9uKGN0eHQsIFVEX1ZFQ1RPUiwgMCwgZmFsc2UpOwpAQCAtNDk2LDYgKzU0NywxMjggQEAKIAlyZXR1cm4gZW11bGF0ZV9leGNlcHRpb24oY3R4dCwgREVfVkVDVE9SLCAwLCBmYWxzZSk7CiB9CiAKK3N0YXRpYyBpbnQgZW11bGF0ZV9ubShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKwlyZXR1cm4gZW11bGF0ZV9leGNlcHRpb24oY3R4dCwgTk1fVkVDVE9SLCAwLCBmYWxzZSk7Cit9CisKK3N0YXRpYyB1MTYgZ2V0X3NlZ21lbnRfc2VsZWN0b3Ioc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIHVuc2lnbmVkIHNlZykKK3sKKwl1MTYgc2VsZWN0b3I7CisJc3RydWN0IGRlc2Nfc3RydWN0IGRlc2M7CisKKwljdHh0LT5vcHMtPmdldF9zZWdtZW50KGN0eHQsICZzZWxlY3RvciwgJmRlc2MsIE5VTEwsIHNlZyk7CisJcmV0dXJuIHNlbGVjdG9yOworfQorCitzdGF0aWMgdm9pZCBzZXRfc2VnbWVudF9zZWxlY3RvcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgdTE2IHNlbGVjdG9yLAorCQkJCSB1bnNpZ25lZCBzZWcpCit7CisJdTE2IGR1bW15OworCXUzMiBiYXNlMzsKKwlzdHJ1Y3QgZGVzY19zdHJ1Y3QgZGVzYzsKKworCWN0eHQtPm9wcy0+Z2V0X3NlZ21lbnQoY3R4dCwgJmR1bW15LCAmZGVzYywgJmJhc2UzLCBzZWcpOworCWN0eHQtPm9wcy0+c2V0X3NlZ21lbnQoY3R4dCwgc2VsZWN0b3IsICZkZXNjLCBiYXNlMywgc2VnKTsKK30KKworc3RhdGljIGludCBfX2xpbmVhcml6ZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKKwkJICAgICBzdHJ1Y3Qgc2VnbWVudGVkX2FkZHJlc3MgYWRkciwKKwkJICAgICB1bnNpZ25lZCBzaXplLCBib29sIHdyaXRlLCBib29sIGZldGNoLAorCQkgICAgIHVsb25nICpsaW5lYXIpCit7CisJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CisJc3RydWN0IGRlc2Nfc3RydWN0IGRlc2M7CisJYm9vbCB1c2FibGU7CisJdWxvbmcgbGE7CisJdTMyIGxpbTsKKwl1MTYgc2VsOworCXVuc2lnbmVkIGNwbCwgcnBsOworCisJbGEgPSBzZWdfYmFzZShjdHh0LCBjdHh0LT5vcHMsIGFkZHIuc2VnKSArIGFkZHIuZWE7CisJc3dpdGNoIChjdHh0LT5tb2RlKSB7CisJY2FzZSBYODZFTVVMX01PREVfUkVBTDoKKwkJYnJlYWs7CisJY2FzZSBYODZFTVVMX01PREVfUFJPVDY0OgorCQlpZiAoKChzaWduZWQgbG9uZylsYSA8PCAxNikgPj4gMTYgIT0gbGEpCisJCQlyZXR1cm4gZW11bGF0ZV9ncChjdHh0LCAwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdXNhYmxlID0gY3R4dC0+b3BzLT5nZXRfc2VnbWVudChjdHh0LCAmc2VsLCAmZGVzYywgTlVMTCwKKwkJCQkJCWFkZHIuc2VnKTsKKwkJaWYgKCF1c2FibGUpCisJCQlnb3RvIGJhZDsKKwkJLyogY29kZSBzZWdtZW50IG9yIHJlYWQtb25seSBkYXRhIHNlZ21lbnQgKi8KKwkJaWYgKCgoZGVzYy50eXBlICYgOCkgfHwgIShkZXNjLnR5cGUgJiAyKSkgJiYgd3JpdGUpCisJCQlnb3RvIGJhZDsKKwkJLyogdW5yZWFkYWJsZSBjb2RlIHNlZ21lbnQgKi8KKwkJaWYgKCFmZXRjaCAmJiAoZGVzYy50eXBlICYgOCkgJiYgIShkZXNjLnR5cGUgJiAyKSkKKwkJCWdvdG8gYmFkOworCQlsaW0gPSBkZXNjX2xpbWl0X3NjYWxlZCgmZGVzYyk7CisJCWlmICgoZGVzYy50eXBlICYgOCkgfHwgIShkZXNjLnR5cGUgJiA0KSkgeworCQkJLyogZXhwYW5kLXVwIHNlZ21lbnQgKi8KKwkJCWlmIChhZGRyLmVhID4gbGltIHx8ICh1MzIpKGFkZHIuZWEgKyBzaXplIC0gMSkgPiBsaW0pCisJCQkJZ290byBiYWQ7CisJCX0gZWxzZSB7CisJCQkvKiBleGFwYW5kLWRvd24gc2VnbWVudCAqLworCQkJaWYgKGFkZHIuZWEgPD0gbGltIHx8ICh1MzIpKGFkZHIuZWEgKyBzaXplIC0gMSkgPD0gbGltKQorCQkJCWdvdG8gYmFkOworCQkJbGltID0gZGVzYy5kID8gMHhmZmZmZmZmZiA6IDB4ZmZmZjsKKwkJCWlmIChhZGRyLmVhID4gbGltIHx8ICh1MzIpKGFkZHIuZWEgKyBzaXplIC0gMSkgPiBsaW0pCisJCQkJZ290byBiYWQ7CisJCX0KKwkJY3BsID0gY3R4dC0+b3BzLT5jcGwoY3R4dCk7CisJCXJwbCA9IHNlbCAmIDM7CisJCWNwbCA9IG1heChjcGwsIHJwbCk7CisJCWlmICghKGRlc2MudHlwZSAmIDgpKSB7CisJCQkvKiBkYXRhIHNlZ21lbnQgKi8KKwkJCWlmIChjcGwgPiBkZXNjLmRwbCkKKwkJCQlnb3RvIGJhZDsKKwkJfSBlbHNlIGlmICgoZGVzYy50eXBlICYgOCkgJiYgIShkZXNjLnR5cGUgJiA0KSkgeworCQkJLyogbm9uY29uZm9ybWluZyBjb2RlIHNlZ21lbnQgKi8KKwkJCWlmIChjcGwgIT0gZGVzYy5kcGwpCisJCQkJZ290byBiYWQ7CisJCX0gZWxzZSBpZiAoKGRlc2MudHlwZSAmIDgpICYmIChkZXNjLnR5cGUgJiA0KSkgeworCQkJLyogY29uZm9ybWluZyBjb2RlIHNlZ21lbnQgKi8KKwkJCWlmIChjcGwgPCBkZXNjLmRwbCkKKwkJCQlnb3RvIGJhZDsKKwkJfQorCQlicmVhazsKKwl9CisJaWYgKGZldGNoID8gY3R4dC0+bW9kZSAhPSBYODZFTVVMX01PREVfUFJPVDY0IDogYy0+YWRfYnl0ZXMgIT0gOCkKKwkJbGEgJj0gKHUzMiktMTsKKwkqbGluZWFyID0gbGE7CisJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7CitiYWQ6CisJaWYgKGFkZHIuc2VnID09IFZDUFVfU1JFR19TUykKKwkJcmV0dXJuIGVtdWxhdGVfc3MoY3R4dCwgYWRkci5zZWcpOworCWVsc2UKKwkJcmV0dXJuIGVtdWxhdGVfZ3AoY3R4dCwgYWRkci5zZWcpOworfQorCitzdGF0aWMgaW50IGxpbmVhcml6ZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKKwkJICAgICBzdHJ1Y3Qgc2VnbWVudGVkX2FkZHJlc3MgYWRkciwKKwkJICAgICB1bnNpZ25lZCBzaXplLCBib29sIHdyaXRlLAorCQkgICAgIHVsb25nICpsaW5lYXIpCit7CisJcmV0dXJuIF9fbGluZWFyaXplKGN0eHQsIGFkZHIsIHNpemUsIHdyaXRlLCBmYWxzZSwgbGluZWFyKTsKK30KKworCitzdGF0aWMgaW50IHNlZ21lbnRlZF9yZWFkX3N0ZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKKwkJCSAgICAgIHN0cnVjdCBzZWdtZW50ZWRfYWRkcmVzcyBhZGRyLAorCQkJICAgICAgdm9pZCAqZGF0YSwKKwkJCSAgICAgIHVuc2lnbmVkIHNpemUpCit7CisJaW50IHJjOworCXVsb25nIGxpbmVhcjsKKworCXJjID0gbGluZWFyaXplKGN0eHQsIGFkZHIsIHNpemUsIGZhbHNlLCAmbGluZWFyKTsKKwlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkKKwkJcmV0dXJuIHJjOworCXJldHVybiBjdHh0LT5vcHMtPnJlYWRfc3RkKGN0eHQsIGxpbmVhciwgZGF0YSwgc2l6ZSwgJmN0eHQtPmV4Y2VwdGlvbik7Cit9CisKIHN0YXRpYyBpbnQgZG9fZmV0Y2hfaW5zbl9ieXRlKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAogCQkJICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzLAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBlaXAsIHU4ICpkZXN0KQpAQCAtNTA1LDEwICs2NzgsMTUgQEAKIAlpbnQgc2l6ZSwgY3VyX3NpemU7CiAKIAlpZiAoZWlwID09IGZjLT5lbmQpIHsKKwkJdW5zaWduZWQgbG9uZyBsaW5lYXI7CisJCXN0cnVjdCBzZWdtZW50ZWRfYWRkcmVzcyBhZGRyID0geyAuc2VnPVZDUFVfU1JFR19DUywgLmVhPWVpcH07CiAJCWN1cl9zaXplID0gZmMtPmVuZCAtIGZjLT5zdGFydDsKIAkJc2l6ZSA9IG1pbigxNVVMIC0gY3VyX3NpemUsIFBBR0VfU0laRSAtIG9mZnNldF9pbl9wYWdlKGVpcCkpOwotCQlyYyA9IG9wcy0+ZmV0Y2goY3R4dC0+Y3NfYmFzZSArIGVpcCwgZmMtPmRhdGEgKyBjdXJfc2l6ZSwKLQkJCQlzaXplLCBjdHh0LT52Y3B1LCAmY3R4dC0+ZXhjZXB0aW9uKTsKKwkJcmMgPSBfX2xpbmVhcml6ZShjdHh0LCBhZGRyLCBzaXplLCBmYWxzZSwgdHJ1ZSwgJmxpbmVhcik7CisJCWlmIChyYyAhPSBYODZFTVVMX0NPTlRJTlVFKQorCQkJcmV0dXJuIHJjOworCQlyYyA9IG9wcy0+ZmV0Y2goY3R4dCwgbGluZWFyLCBmYy0+ZGF0YSArIGN1cl9zaXplLAorCQkJCXNpemUsICZjdHh0LT5leGNlcHRpb24pOwogCQlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJCXJldHVybiByYzsKIAkJZmMtPmVuZCArPSBzaXplOwpAQCAtNTUxLDcgKzcyOSw2IEBACiB9CiAKIHN0YXRpYyBpbnQgcmVhZF9kZXNjcmlwdG9yKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAotCQkJICAgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzLAogCQkJICAgc3RydWN0IHNlZ21lbnRlZF9hZGRyZXNzIGFkZHIsCiAJCQkgICB1MTYgKnNpemUsIHVuc2lnbmVkIGxvbmcgKmFkZHJlc3MsIGludCBvcF9ieXRlcykKIHsKQEAgLTU2MCwxMyArNzM3LDExIEBACiAJaWYgKG9wX2J5dGVzID09IDIpCiAJCW9wX2J5dGVzID0gMzsKIAkqYWRkcmVzcyA9IDA7Ci0JcmMgPSBvcHMtPnJlYWRfc3RkKGxpbmVhcihjdHh0LCBhZGRyKSwgKHVuc2lnbmVkIGxvbmcgKilzaXplLCAyLAotCQkJICAgY3R4dC0+dmNwdSwgJmN0eHQtPmV4Y2VwdGlvbik7CisJcmMgPSBzZWdtZW50ZWRfcmVhZF9zdGQoY3R4dCwgYWRkciwgc2l6ZSwgMik7CiAJaWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCXJldHVybiByYzsKIAlhZGRyLmVhICs9IDI7Ci0JcmMgPSBvcHMtPnJlYWRfc3RkKGxpbmVhcihjdHh0LCBhZGRyKSwgYWRkcmVzcywgb3BfYnl0ZXMsCi0JCQkgICBjdHh0LT52Y3B1LCAmY3R4dC0+ZXhjZXB0aW9uKTsKKwlyYyA9IHNlZ21lbnRlZF9yZWFkX3N0ZChjdHh0LCBhZGRyLCBhZGRyZXNzLCBvcF9ieXRlcyk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC02MjMsNyArNzk4LDYzIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBkZWNvZGVfcmVnaXN0ZXJfb3BlcmFuZChzdHJ1Y3Qgb3BlcmFuZCAqb3AsCitzdGF0aWMgdm9pZCByZWFkX3NzZV9yZWcoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIHNzZTEyOF90ICpkYXRhLCBpbnQgcmVnKQoreworCWN0eHQtPm9wcy0+Z2V0X2ZwdShjdHh0KTsKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgMDogYXNtKCJtb3ZkcXUgJSV4bW0wLCAlMCIgOiAiPW0iKCpkYXRhKSk7IGJyZWFrOworCWNhc2UgMTogYXNtKCJtb3ZkcXUgJSV4bW0xLCAlMCIgOiAiPW0iKCpkYXRhKSk7IGJyZWFrOworCWNhc2UgMjogYXNtKCJtb3ZkcXUgJSV4bW0yLCAlMCIgOiAiPW0iKCpkYXRhKSk7IGJyZWFrOworCWNhc2UgMzogYXNtKCJtb3ZkcXUgJSV4bW0zLCAlMCIgOiAiPW0iKCpkYXRhKSk7IGJyZWFrOworCWNhc2UgNDogYXNtKCJtb3ZkcXUgJSV4bW00LCAlMCIgOiAiPW0iKCpkYXRhKSk7IGJyZWFrOworCWNhc2UgNTogYXNtKCJtb3ZkcXUgJSV4bW01LCAlMCIgOiAiPW0iKCpkYXRhKSk7IGJyZWFrOworCWNhc2UgNjogYXNtKCJtb3ZkcXUgJSV4bW02LCAlMCIgOiAiPW0iKCpkYXRhKSk7IGJyZWFrOworCWNhc2UgNzogYXNtKCJtb3ZkcXUgJSV4bW03LCAlMCIgOiAiPW0iKCpkYXRhKSk7IGJyZWFrOworI2lmZGVmIENPTkZJR19YODZfNjQKKwljYXNlIDg6IGFzbSgibW92ZHF1ICUleG1tOCwgJTAiIDogIj1tIigqZGF0YSkpOyBicmVhazsKKwljYXNlIDk6IGFzbSgibW92ZHF1ICUleG1tOSwgJTAiIDogIj1tIigqZGF0YSkpOyBicmVhazsKKwljYXNlIDEwOiBhc20oIm1vdmRxdSAlJXhtbTEwLCAlMCIgOiAiPW0iKCpkYXRhKSk7IGJyZWFrOworCWNhc2UgMTE6IGFzbSgibW92ZHF1ICUleG1tMTEsICUwIiA6ICI9bSIoKmRhdGEpKTsgYnJlYWs7CisJY2FzZSAxMjogYXNtKCJtb3ZkcXUgJSV4bW0xMiwgJTAiIDogIj1tIigqZGF0YSkpOyBicmVhazsKKwljYXNlIDEzOiBhc20oIm1vdmRxdSAlJXhtbTEzLCAlMCIgOiAiPW0iKCpkYXRhKSk7IGJyZWFrOworCWNhc2UgMTQ6IGFzbSgibW92ZHF1ICUleG1tMTQsICUwIiA6ICI9bSIoKmRhdGEpKTsgYnJlYWs7CisJY2FzZSAxNTogYXNtKCJtb3ZkcXUgJSV4bW0xNSwgJTAiIDogIj1tIigqZGF0YSkpOyBicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6IEJVRygpOworCX0KKwljdHh0LT5vcHMtPnB1dF9mcHUoY3R4dCk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX3NzZV9yZWcoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIHNzZTEyOF90ICpkYXRhLAorCQkJICBpbnQgcmVnKQoreworCWN0eHQtPm9wcy0+Z2V0X2ZwdShjdHh0KTsKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgMDogYXNtKCJtb3ZkcXUgJTAsICUleG1tMCIgOiA6ICJtIigqZGF0YSkpOyBicmVhazsKKwljYXNlIDE6IGFzbSgibW92ZHF1ICUwLCAlJXhtbTEiIDogOiAibSIoKmRhdGEpKTsgYnJlYWs7CisJY2FzZSAyOiBhc20oIm1vdmRxdSAlMCwgJSV4bW0yIiA6IDogIm0iKCpkYXRhKSk7IGJyZWFrOworCWNhc2UgMzogYXNtKCJtb3ZkcXUgJTAsICUleG1tMyIgOiA6ICJtIigqZGF0YSkpOyBicmVhazsKKwljYXNlIDQ6IGFzbSgibW92ZHF1ICUwLCAlJXhtbTQiIDogOiAibSIoKmRhdGEpKTsgYnJlYWs7CisJY2FzZSA1OiBhc20oIm1vdmRxdSAlMCwgJSV4bW01IiA6IDogIm0iKCpkYXRhKSk7IGJyZWFrOworCWNhc2UgNjogYXNtKCJtb3ZkcXUgJTAsICUleG1tNiIgOiA6ICJtIigqZGF0YSkpOyBicmVhazsKKwljYXNlIDc6IGFzbSgibW92ZHF1ICUwLCAlJXhtbTciIDogOiAibSIoKmRhdGEpKTsgYnJlYWs7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWNhc2UgODogYXNtKCJtb3ZkcXUgJTAsICUleG1tOCIgOiA6ICJtIigqZGF0YSkpOyBicmVhazsKKwljYXNlIDk6IGFzbSgibW92ZHF1ICUwLCAlJXhtbTkiIDogOiAibSIoKmRhdGEpKTsgYnJlYWs7CisJY2FzZSAxMDogYXNtKCJtb3ZkcXUgJTAsICUleG1tMTAiIDogOiAibSIoKmRhdGEpKTsgYnJlYWs7CisJY2FzZSAxMTogYXNtKCJtb3ZkcXUgJTAsICUleG1tMTEiIDogOiAibSIoKmRhdGEpKTsgYnJlYWs7CisJY2FzZSAxMjogYXNtKCJtb3ZkcXUgJTAsICUleG1tMTIiIDogOiAibSIoKmRhdGEpKTsgYnJlYWs7CisJY2FzZSAxMzogYXNtKCJtb3ZkcXUgJTAsICUleG1tMTMiIDogOiAibSIoKmRhdGEpKTsgYnJlYWs7CisJY2FzZSAxNDogYXNtKCJtb3ZkcXUgJTAsICUleG1tMTQiIDogOiAibSIoKmRhdGEpKTsgYnJlYWs7CisJY2FzZSAxNTogYXNtKCJtb3ZkcXUgJTAsICUleG1tMTUiIDogOiAibSIoKmRhdGEpKTsgYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OiBCVUcoKTsKKwl9CisJY3R4dC0+b3BzLT5wdXRfZnB1KGN0eHQpOworfQorCitzdGF0aWMgdm9pZCBkZWNvZGVfcmVnaXN0ZXJfb3BlcmFuZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKKwkJCQkgICAgc3RydWN0IG9wZXJhbmQgKm9wLAogCQkJCSAgICBzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjLAogCQkJCSAgICBpbnQgaW5oaWJpdF9ieXRlcmVnKQogewpAQCAtNjMyLDYgKzg2MywxNSBAQAogCiAJaWYgKCEoYy0+ZCAmIE1vZFJNKSkKIAkJcmVnID0gKGMtPmIgJiA3KSB8ICgoYy0+cmV4X3ByZWZpeCAmIDEpIDw8IDMpOworCisJaWYgKGMtPmQgJiBTc2UpIHsKKwkJb3AtPnR5cGUgPSBPUF9YTU07CisJCW9wLT5ieXRlcyA9IDE2OworCQlvcC0+YWRkci54bW0gPSByZWc7CisJCXJlYWRfc3NlX3JlZyhjdHh0LCAmb3AtPnZlY192YWwsIHJlZyk7CisJCXJldHVybjsKKwl9CisKIAlvcC0+dHlwZSA9IE9QX1JFRzsKIAlpZiAoKGMtPmQgJiBCeXRlT3ApICYmICFpbmhpYml0X2J5dGVyZWcpIHsKIAkJb3AtPmFkZHIucmVnID0gZGVjb2RlX3JlZ2lzdGVyKHJlZywgYy0+cmVncywgaGlnaGJ5dGVfcmVncyk7CkBAIC02NzEsNiArOTExLDEzIEBACiAJCW9wLT5ieXRlcyA9IChjLT5kICYgQnl0ZU9wKSA/IDEgOiBjLT5vcF9ieXRlczsKIAkJb3AtPmFkZHIucmVnID0gZGVjb2RlX3JlZ2lzdGVyKGMtPm1vZHJtX3JtLAogCQkJCQkgICAgICAgYy0+cmVncywgYy0+ZCAmIEJ5dGVPcCk7CisJCWlmIChjLT5kICYgU3NlKSB7CisJCQlvcC0+dHlwZSA9IE9QX1hNTTsKKwkJCW9wLT5ieXRlcyA9IDE2OworCQkJb3AtPmFkZHIueG1tID0gYy0+bW9kcm1fcm07CisJCQlyZWFkX3NzZV9yZWcoY3R4dCwgJm9wLT52ZWNfdmFsLCBjLT5tb2RybV9ybSk7CisJCQlyZXR1cm4gcmM7CisJCX0KIAkJZmV0Y2hfcmVnaXN0ZXJfb3BlcmFuZChvcCk7CiAJCXJldHVybiByYzsKIAl9CkBAIC04MTksOCArMTA2Niw4IEBACiAJCWlmIChtYy0+cG9zIDwgbWMtPmVuZCkKIAkJCWdvdG8gcmVhZF9jYWNoZWQ7CiAKLQkJcmMgPSBvcHMtPnJlYWRfZW11bGF0ZWQoYWRkciwgbWMtPmRhdGEgKyBtYy0+ZW5kLCBuLAotCQkJCQkmY3R4dC0+ZXhjZXB0aW9uLCBjdHh0LT52Y3B1KTsKKwkJcmMgPSBvcHMtPnJlYWRfZW11bGF0ZWQoY3R4dCwgYWRkciwgbWMtPmRhdGEgKyBtYy0+ZW5kLCBuLAorCQkJCQkmY3R4dC0+ZXhjZXB0aW9uKTsKIAkJaWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCQlyZXR1cm4gcmM7CiAJCW1jLT5lbmQgKz0gbjsKQEAgLTgzNCw2ICsxMDgxLDUwIEBACiAJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7CiB9CiAKK3N0YXRpYyBpbnQgc2VnbWVudGVkX3JlYWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCisJCQkgIHN0cnVjdCBzZWdtZW50ZWRfYWRkcmVzcyBhZGRyLAorCQkJICB2b2lkICpkYXRhLAorCQkJICB1bnNpZ25lZCBzaXplKQoreworCWludCByYzsKKwl1bG9uZyBsaW5lYXI7CisKKwlyYyA9IGxpbmVhcml6ZShjdHh0LCBhZGRyLCBzaXplLCBmYWxzZSwgJmxpbmVhcik7CisJaWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpCisJCXJldHVybiByYzsKKwlyZXR1cm4gcmVhZF9lbXVsYXRlZChjdHh0LCBjdHh0LT5vcHMsIGxpbmVhciwgZGF0YSwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgc2VnbWVudGVkX3dyaXRlKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAorCQkJICAgc3RydWN0IHNlZ21lbnRlZF9hZGRyZXNzIGFkZHIsCisJCQkgICBjb25zdCB2b2lkICpkYXRhLAorCQkJICAgdW5zaWduZWQgc2l6ZSkKK3sKKwlpbnQgcmM7CisJdWxvbmcgbGluZWFyOworCisJcmMgPSBsaW5lYXJpemUoY3R4dCwgYWRkciwgc2l6ZSwgdHJ1ZSwgJmxpbmVhcik7CisJaWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpCisJCXJldHVybiByYzsKKwlyZXR1cm4gY3R4dC0+b3BzLT53cml0ZV9lbXVsYXRlZChjdHh0LCBsaW5lYXIsIGRhdGEsIHNpemUsCisJCQkJCSAmY3R4dC0+ZXhjZXB0aW9uKTsKK30KKworc3RhdGljIGludCBzZWdtZW50ZWRfY21weGNoZyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKKwkJCSAgICAgc3RydWN0IHNlZ21lbnRlZF9hZGRyZXNzIGFkZHIsCisJCQkgICAgIGNvbnN0IHZvaWQgKm9yaWdfZGF0YSwgY29uc3Qgdm9pZCAqZGF0YSwKKwkJCSAgICAgdW5zaWduZWQgc2l6ZSkKK3sKKwlpbnQgcmM7CisJdWxvbmcgbGluZWFyOworCisJcmMgPSBsaW5lYXJpemUoY3R4dCwgYWRkciwgc2l6ZSwgdHJ1ZSwgJmxpbmVhcik7CisJaWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpCisJCXJldHVybiByYzsKKwlyZXR1cm4gY3R4dC0+b3BzLT5jbXB4Y2hnX2VtdWxhdGVkKGN0eHQsIGxpbmVhciwgb3JpZ19kYXRhLCBkYXRhLAorCQkJCQkgICBzaXplLCAmY3R4dC0+ZXhjZXB0aW9uKTsKK30KKwogc3RhdGljIGludCBwaW9faW5fZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCiAJCQkgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMsCiAJCQkgICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgc2hvcnQgcG9ydCwKQEAgLTg1NCw3ICsxMTQ1LDcgQEAKIAkJaWYgKG4gPT0gMCkKIAkJCW4gPSAxOwogCQlyYy0+cG9zID0gcmMtPmVuZCA9IDA7Ci0JCWlmICghb3BzLT5waW9faW5fZW11bGF0ZWQoc2l6ZSwgcG9ydCwgcmMtPmRhdGEsIG4sIGN0eHQtPnZjcHUpKQorCQlpZiAoIW9wcy0+cGlvX2luX2VtdWxhdGVkKGN0eHQsIHNpemUsIHBvcnQsIHJjLT5kYXRhLCBuKSkKIAkJCXJldHVybiAwOwogCQlyYy0+ZW5kID0gbiAqIHNpemU7CiAJfQpAQCAtODY0LDI4ICsxMTU1LDIyIEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyB1MzIgZGVzY19saW1pdF9zY2FsZWQoc3RydWN0IGRlc2Nfc3RydWN0ICpkZXNjKQotewotCXUzMiBsaW1pdCA9IGdldF9kZXNjX2xpbWl0KGRlc2MpOwotCi0JcmV0dXJuIGRlc2MtPmcgPyAobGltaXQgPDwgMTIpIHwgMHhmZmYgOiBsaW1pdDsKLX0KLQogc3RhdGljIHZvaWQgZ2V0X2Rlc2NyaXB0b3JfdGFibGVfcHRyKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAogCQkJCSAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzLAogCQkJCSAgICAgdTE2IHNlbGVjdG9yLCBzdHJ1Y3QgZGVzY19wdHIgKmR0KQogewogCWlmIChzZWxlY3RvciAmIDEgPDwgMikgewogCQlzdHJ1Y3QgZGVzY19zdHJ1Y3QgZGVzYzsKKwkJdTE2IHNlbDsKKwogCQltZW1zZXQgKGR0LCAwLCBzaXplb2YgKmR0KTsKLQkJaWYgKCFvcHMtPmdldF9jYWNoZWRfZGVzY3JpcHRvcigmZGVzYywgTlVMTCwgVkNQVV9TUkVHX0xEVFIsCi0JCQkJCQljdHh0LT52Y3B1KSkKKwkJaWYgKCFvcHMtPmdldF9zZWdtZW50KGN0eHQsICZzZWwsICZkZXNjLCBOVUxMLCBWQ1BVX1NSRUdfTERUUikpCiAJCQlyZXR1cm47CiAKIAkJZHQtPnNpemUgPSBkZXNjX2xpbWl0X3NjYWxlZCgmZGVzYyk7IC8qIHdoYXQgaWYgbGltaXQgPiA2NTUzNT8gKi8KIAkJZHQtPmFkZHJlc3MgPSBnZXRfZGVzY19iYXNlKCZkZXNjKTsKIAl9IGVsc2UKLQkJb3BzLT5nZXRfZ2R0KGR0LCBjdHh0LT52Y3B1KTsKKwkJb3BzLT5nZXRfZ2R0KGN0eHQsIGR0KTsKIH0KIAogLyogYWxsb3dlZCBqdXN0IGZvciA4IGJ5dGVzIHNlZ21lbnRzICovCkBAIC05MDMsOCArMTE4OCw3IEBACiAJaWYgKGR0LnNpemUgPCBpbmRleCAqIDggKyA3KQogCQlyZXR1cm4gZW11bGF0ZV9ncChjdHh0LCBzZWxlY3RvciAmIDB4ZmZmYyk7CiAJYWRkciA9IGR0LmFkZHJlc3MgKyBpbmRleCAqIDg7Ci0JcmV0ID0gb3BzLT5yZWFkX3N0ZChhZGRyLCBkZXNjLCBzaXplb2YgKmRlc2MsIGN0eHQtPnZjcHUsCi0JCQkgICAgJmN0eHQtPmV4Y2VwdGlvbik7CisJcmV0ID0gb3BzLT5yZWFkX3N0ZChjdHh0LCBhZGRyLCBkZXNjLCBzaXplb2YgKmRlc2MsICZjdHh0LT5leGNlcHRpb24pOwogCiAgICAgICAgcmV0dXJuIHJldDsKIH0KQEAgLTkyNSw4ICsxMjA5LDcgQEAKIAkJcmV0dXJuIGVtdWxhdGVfZ3AoY3R4dCwgc2VsZWN0b3IgJiAweGZmZmMpOwogCiAJYWRkciA9IGR0LmFkZHJlc3MgKyBpbmRleCAqIDg7Ci0JcmV0ID0gb3BzLT53cml0ZV9zdGQoYWRkciwgZGVzYywgc2l6ZW9mICpkZXNjLCBjdHh0LT52Y3B1LAotCQkJICAgICAmY3R4dC0+ZXhjZXB0aW9uKTsKKwlyZXQgPSBvcHMtPndyaXRlX3N0ZChjdHh0LCBhZGRyLCBkZXNjLCBzaXplb2YgKmRlc2MsICZjdHh0LT5leGNlcHRpb24pOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTk4Niw3ICsxMjY5LDcgQEAKIAogCXJwbCA9IHNlbGVjdG9yICYgMzsKIAlkcGwgPSBzZWdfZGVzYy5kcGw7Ci0JY3BsID0gb3BzLT5jcGwoY3R4dC0+dmNwdSk7CisJY3BsID0gb3BzLT5jcGwoY3R4dCk7CiAKIAlzd2l0Y2ggKHNlZykgewogCWNhc2UgVkNQVV9TUkVHX1NTOgpAQCAtMTA0Miw4ICsxMzI1LDcgQEAKIAkJCXJldHVybiByZXQ7CiAJfQogbG9hZDoKLQlvcHMtPnNldF9zZWdtZW50X3NlbGVjdG9yKHNlbGVjdG9yLCBzZWcsIGN0eHQtPnZjcHUpOwotCW9wcy0+c2V0X2NhY2hlZF9kZXNjcmlwdG9yKCZzZWdfZGVzYywgMCwgc2VnLCBjdHh0LT52Y3B1KTsKKwlvcHMtPnNldF9zZWdtZW50KGN0eHQsIHNlbGVjdG9yLCAmc2VnX2Rlc2MsIDAsIHNlZyk7CiAJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7CiBleGNlcHRpb246CiAJZW11bGF0ZV9leGNlcHRpb24oY3R4dCwgZXJyX3ZlYywgZXJyX2NvZGUsIHRydWUpOwpAQCAtMTA2OSw4ICsxMzUxLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHdyaXRlYmFjayhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKLQkJCSAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMpCitzdGF0aWMgaW50IHdyaXRlYmFjayhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKIHsKIAlpbnQgcmM7CiAJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CkBAIC0xMDgxLDIzICsxMzYyLDIyIEBACiAJCWJyZWFrOwogCWNhc2UgT1BfTUVNOgogCQlpZiAoYy0+bG9ja19wcmVmaXgpCi0JCQlyYyA9IG9wcy0+Y21weGNoZ19lbXVsYXRlZCgKLQkJCQkJbGluZWFyKGN0eHQsIGMtPmRzdC5hZGRyLm1lbSksCi0JCQkJCSZjLT5kc3Qub3JpZ192YWwsCi0JCQkJCSZjLT5kc3QudmFsLAotCQkJCQljLT5kc3QuYnl0ZXMsCi0JCQkJCSZjdHh0LT5leGNlcHRpb24sCi0JCQkJCWN0eHQtPnZjcHUpOworCQkJcmMgPSBzZWdtZW50ZWRfY21weGNoZyhjdHh0LAorCQkJCQkgICAgICAgYy0+ZHN0LmFkZHIubWVtLAorCQkJCQkgICAgICAgJmMtPmRzdC5vcmlnX3ZhbCwKKwkJCQkJICAgICAgICZjLT5kc3QudmFsLAorCQkJCQkgICAgICAgYy0+ZHN0LmJ5dGVzKTsKIAkJZWxzZQotCQkJcmMgPSBvcHMtPndyaXRlX2VtdWxhdGVkKAotCQkJCQlsaW5lYXIoY3R4dCwgYy0+ZHN0LmFkZHIubWVtKSwKLQkJCQkJJmMtPmRzdC52YWwsCi0JCQkJCWMtPmRzdC5ieXRlcywKLQkJCQkJJmN0eHQtPmV4Y2VwdGlvbiwKLQkJCQkJY3R4dC0+dmNwdSk7CisJCQlyYyA9IHNlZ21lbnRlZF93cml0ZShjdHh0LAorCQkJCQkgICAgIGMtPmRzdC5hZGRyLm1lbSwKKwkJCQkJICAgICAmYy0+ZHN0LnZhbCwKKwkJCQkJICAgICBjLT5kc3QuYnl0ZXMpOwogCQlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJCXJldHVybiByYzsKIAkJYnJlYWs7CisJY2FzZSBPUF9YTU06CisJCXdyaXRlX3NzZV9yZWcoY3R4dCwgJmMtPmRzdC52ZWNfdmFsLCBjLT5kc3QuYWRkci54bW0pOworCQlicmVhazsKIAljYXNlIE9QX05PTkU6CiAJCS8qIG5vIHdyaXRlYmFjayAqLwogCQlicmVhazsKQEAgLTExMDcsMjEgKzEzODcsMjEgQEAKIAlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGVtdWxhdGVfcHVzaChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKLQkJCQlzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMpCitzdGF0aWMgaW50IGVtX3B1c2goc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCiB7CiAJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CisJc3RydWN0IHNlZ21lbnRlZF9hZGRyZXNzIGFkZHI7CiAKLQljLT5kc3QudHlwZSAgPSBPUF9NRU07Ci0JYy0+ZHN0LmJ5dGVzID0gYy0+b3BfYnl0ZXM7Ci0JYy0+ZHN0LnZhbCA9IGMtPnNyYy52YWw7CiAJcmVnaXN0ZXJfYWRkcmVzc19pbmNyZW1lbnQoYywgJmMtPnJlZ3NbVkNQVV9SRUdTX1JTUF0sIC1jLT5vcF9ieXRlcyk7Ci0JYy0+ZHN0LmFkZHIubWVtLmVhID0gcmVnaXN0ZXJfYWRkcmVzcyhjLCBjLT5yZWdzW1ZDUFVfUkVHU19SU1BdKTsKLQljLT5kc3QuYWRkci5tZW0uc2VnID0gVkNQVV9TUkVHX1NTOworCWFkZHIuZWEgPSByZWdpc3Rlcl9hZGRyZXNzKGMsIGMtPnJlZ3NbVkNQVV9SRUdTX1JTUF0pOworCWFkZHIuc2VnID0gVkNQVV9TUkVHX1NTOworCisJLyogRGlzYWJsZSB3cml0ZWJhY2suICovCisJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOworCXJldHVybiBzZWdtZW50ZWRfd3JpdGUoY3R4dCwgYWRkciwgJmMtPnNyYy52YWwsIGMtPm9wX2J5dGVzKTsKIH0KIAogc3RhdGljIGludCBlbXVsYXRlX3BvcChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKLQkJICAgICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcywKIAkJICAgICAgIHZvaWQgKmRlc3QsIGludCBsZW4pCiB7CiAJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CkBAIC0xMTMwLDcgKzE0MTAsNyBAQAogCiAJYWRkci5lYSA9IHJlZ2lzdGVyX2FkZHJlc3MoYywgYy0+cmVnc1tWQ1BVX1JFR1NfUlNQXSk7CiAJYWRkci5zZWcgPSBWQ1BVX1NSRUdfU1M7Ci0JcmMgPSByZWFkX2VtdWxhdGVkKGN0eHQsIG9wcywgbGluZWFyKGN0eHQsIGFkZHIpLCBkZXN0LCBsZW4pOworCXJjID0gc2VnbWVudGVkX3JlYWQoY3R4dCwgYWRkciwgZGVzdCwgbGVuKTsKIAlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJcmV0dXJuIHJjOwogCkBAIC0xMTM4LDYgKzE0MTgsMTMgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBpbnQgZW1fcG9wKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOworCisJcmV0dXJuIGVtdWxhdGVfcG9wKGN0eHQsICZjLT5kc3QudmFsLCBjLT5vcF9ieXRlcyk7Cit9CisKIHN0YXRpYyBpbnQgZW11bGF0ZV9wb3BmKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAogCQkgICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzLAogCQkgICAgICAgdm9pZCAqZGVzdCwgaW50IGxlbikKQEAgLTExNDUsOSArMTQzMiw5IEBACiAJaW50IHJjOwogCXVuc2lnbmVkIGxvbmcgdmFsLCBjaGFuZ2VfbWFzazsKIAlpbnQgaW9wbCA9IChjdHh0LT5lZmxhZ3MgJiBYODZfRUZMQUdTX0lPUEwpID4+IElPUExfU0hJRlQ7Ci0JaW50IGNwbCA9IG9wcy0+Y3BsKGN0eHQtPnZjcHUpOworCWludCBjcGwgPSBvcHMtPmNwbChjdHh0KTsKIAotCXJjID0gZW11bGF0ZV9wb3AoY3R4dCwgb3BzLCAmdmFsLCBsZW4pOworCXJjID0gZW11bGF0ZV9wb3AoY3R4dCwgJnZhbCwgbGVuKTsKIAlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJcmV0dXJuIHJjOwogCkBAIC0xMTc5LDE0ICsxNDY2LDI0IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgdm9pZCBlbXVsYXRlX3B1c2hfc3JlZyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKLQkJCSAgICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcywgaW50IHNlZykKK3N0YXRpYyBpbnQgZW1fcG9wZihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKIHsKIAlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKIAotCWMtPnNyYy52YWwgPSBvcHMtPmdldF9zZWdtZW50X3NlbGVjdG9yKHNlZywgY3R4dC0+dmNwdSk7CisJYy0+ZHN0LnR5cGUgPSBPUF9SRUc7CisJYy0+ZHN0LmFkZHIucmVnID0gJmN0eHQtPmVmbGFnczsKKwljLT5kc3QuYnl0ZXMgPSBjLT5vcF9ieXRlczsKKwlyZXR1cm4gZW11bGF0ZV9wb3BmKGN0eHQsIGN0eHQtPm9wcywgJmMtPmRzdC52YWwsIGMtPm9wX2J5dGVzKTsKK30KIAotCWVtdWxhdGVfcHVzaChjdHh0LCBvcHMpOworc3RhdGljIGludCBlbXVsYXRlX3B1c2hfc3JlZyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKKwkJCSAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzLCBpbnQgc2VnKQoreworCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOworCisJYy0+c3JjLnZhbCA9IGdldF9zZWdtZW50X3NlbGVjdG9yKGN0eHQsIHNlZyk7CisKKwlyZXR1cm4gZW1fcHVzaChjdHh0KTsKIH0KIAogc3RhdGljIGludCBlbXVsYXRlX3BvcF9zcmVnKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LApAQCAtMTE5Niw3ICsxNDkzLDcgQEAKIAl1bnNpZ25lZCBsb25nIHNlbGVjdG9yOwogCWludCByYzsKIAotCXJjID0gZW11bGF0ZV9wb3AoY3R4dCwgb3BzLCAmc2VsZWN0b3IsIGMtPm9wX2J5dGVzKTsKKwlyYyA9IGVtdWxhdGVfcG9wKGN0eHQsICZzZWxlY3RvciwgYy0+b3BfYnl0ZXMpOwogCWlmIChyYyAhPSBYODZFTVVMX0NPTlRJTlVFKQogCQlyZXR1cm4gcmM7CiAKQEAgLTEyMDQsOCArMTUwMSw3IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IGVtdWxhdGVfcHVzaGEoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCi0JCQkgIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcykKK3N0YXRpYyBpbnQgZW1fcHVzaGEoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCiB7CiAJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CiAJdW5zaWduZWQgbG9uZyBvbGRfZXNwID0gYy0+cmVnc1tWQ1BVX1JFR1NfUlNQXTsKQEAgLTEyMTYsMjMgKzE1MTIsMjUgQEAKIAkJKHJlZyA9PSBWQ1BVX1JFR1NfUlNQKSA/CiAJCShjLT5zcmMudmFsID0gb2xkX2VzcCkgOiAoYy0+c3JjLnZhbCA9IGMtPnJlZ3NbcmVnXSk7CiAKLQkJZW11bGF0ZV9wdXNoKGN0eHQsIG9wcyk7Ci0KLQkJcmMgPSB3cml0ZWJhY2soY3R4dCwgb3BzKTsKKwkJcmMgPSBlbV9wdXNoKGN0eHQpOwogCQlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJCXJldHVybiByYzsKIAogCQkrK3JlZzsKIAl9CiAKLQkvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi8KLQljLT5kc3QudHlwZSA9IE9QX05PTkU7Ci0KIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgZW11bGF0ZV9wb3BhKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAotCQkJc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzKQorc3RhdGljIGludCBlbV9wdXNoZihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKwlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKKworCWMtPnNyYy52YWwgPSAgKHVuc2lnbmVkIGxvbmcpY3R4dC0+ZWZsYWdzOworCXJldHVybiBlbV9wdXNoKGN0eHQpOworfQorCitzdGF0aWMgaW50IGVtX3BvcGEoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCiB7CiAJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CiAJaW50IHJjID0gWDg2RU1VTF9DT05USU5VRTsKQEAgLTEyNDUsNyArMTU0Myw3IEBACiAJCQktLXJlZzsKIAkJfQogCi0JCXJjID0gZW11bGF0ZV9wb3AoY3R4dCwgb3BzLCAmYy0+cmVnc1tyZWddLCBjLT5vcF9ieXRlcyk7CisJCXJjID0gZW11bGF0ZV9wb3AoY3R4dCwgJmMtPnJlZ3NbcmVnXSwgYy0+b3BfYnl0ZXMpOwogCQlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJCWJyZWFrOwogCQktLXJlZzsKQEAgLTEyNjUsMzcgKzE1NjMsMzIgQEAKIAogCS8qIFRPRE86IEFkZCBsaW1pdCBjaGVja3MgKi8KIAljLT5zcmMudmFsID0gY3R4dC0+ZWZsYWdzOwotCWVtdWxhdGVfcHVzaChjdHh0LCBvcHMpOwotCXJjID0gd3JpdGViYWNrKGN0eHQsIG9wcyk7CisJcmMgPSBlbV9wdXNoKGN0eHQpOwogCWlmIChyYyAhPSBYODZFTVVMX0NPTlRJTlVFKQogCQlyZXR1cm4gcmM7CiAKIAljdHh0LT5lZmxhZ3MgJj0gfihFRkxHX0lGIHwgRUZMR19URiB8IEVGTEdfQUMpOwogCi0JYy0+c3JjLnZhbCA9IG9wcy0+Z2V0X3NlZ21lbnRfc2VsZWN0b3IoVkNQVV9TUkVHX0NTLCBjdHh0LT52Y3B1KTsKLQllbXVsYXRlX3B1c2goY3R4dCwgb3BzKTsKLQlyYyA9IHdyaXRlYmFjayhjdHh0LCBvcHMpOworCWMtPnNyYy52YWwgPSBnZXRfc2VnbWVudF9zZWxlY3RvcihjdHh0LCBWQ1BVX1NSRUdfQ1MpOworCXJjID0gZW1fcHVzaChjdHh0KTsKIAlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJcmV0dXJuIHJjOwogCiAJYy0+c3JjLnZhbCA9IGMtPmVpcDsKLQllbXVsYXRlX3B1c2goY3R4dCwgb3BzKTsKLQlyYyA9IHdyaXRlYmFjayhjdHh0LCBvcHMpOworCXJjID0gZW1fcHVzaChjdHh0KTsKIAlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJcmV0dXJuIHJjOwogCi0JYy0+ZHN0LnR5cGUgPSBPUF9OT05FOwotCi0Jb3BzLT5nZXRfaWR0KCZkdCwgY3R4dC0+dmNwdSk7CisJb3BzLT5nZXRfaWR0KGN0eHQsICZkdCk7CiAKIAllaXBfYWRkciA9IGR0LmFkZHJlc3MgKyAoaXJxIDw8IDIpOwogCWNzX2FkZHIgPSBkdC5hZGRyZXNzICsgKGlycSA8PCAyKSArIDI7CiAKLQlyYyA9IG9wcy0+cmVhZF9zdGQoY3NfYWRkciwgJmNzLCAyLCBjdHh0LT52Y3B1LCAmY3R4dC0+ZXhjZXB0aW9uKTsKKwlyYyA9IG9wcy0+cmVhZF9zdGQoY3R4dCwgY3NfYWRkciwgJmNzLCAyLCAmY3R4dC0+ZXhjZXB0aW9uKTsKIAlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJcmV0dXJuIHJjOwogCi0JcmMgPSBvcHMtPnJlYWRfc3RkKGVpcF9hZGRyLCAmZWlwLCAyLCBjdHh0LT52Y3B1LCAmY3R4dC0+ZXhjZXB0aW9uKTsKKwlyYyA9IG9wcy0+cmVhZF9zdGQoY3R4dCwgZWlwX2FkZHIsICZlaXAsIDIsICZjdHh0LT5leGNlcHRpb24pOwogCWlmIChyYyAhPSBYODZFTVVMX0NPTlRJTlVFKQogCQlyZXR1cm4gcmM7CiAKQEAgLTEzMzksNyArMTYzMiw3IEBACiAKIAkvKiBUT0RPOiBBZGQgc3RhY2sgbGltaXQgY2hlY2sgKi8KIAotCXJjID0gZW11bGF0ZV9wb3AoY3R4dCwgb3BzLCAmdGVtcF9laXAsIGMtPm9wX2J5dGVzKTsKKwlyYyA9IGVtdWxhdGVfcG9wKGN0eHQsICZ0ZW1wX2VpcCwgYy0+b3BfYnl0ZXMpOwogCiAJaWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCXJldHVybiByYzsKQEAgLTEzNDcsMTIgKzE2NDAsMTIgQEAKIAlpZiAodGVtcF9laXAgJiB+MHhmZmZmKQogCQlyZXR1cm4gZW11bGF0ZV9ncChjdHh0LCAwKTsKIAotCXJjID0gZW11bGF0ZV9wb3AoY3R4dCwgb3BzLCAmY3MsIGMtPm9wX2J5dGVzKTsKKwlyYyA9IGVtdWxhdGVfcG9wKGN0eHQsICZjcywgYy0+b3BfYnl0ZXMpOwogCiAJaWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCXJldHVybiByYzsKIAotCXJjID0gZW11bGF0ZV9wb3AoY3R4dCwgb3BzLCAmdGVtcF9lZmxhZ3MsIGMtPm9wX2J5dGVzKTsKKwlyYyA9IGVtdWxhdGVfcG9wKGN0eHQsICZ0ZW1wX2VmbGFncywgYy0+b3BfYnl0ZXMpOwogCiAJaWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCXJldHVybiByYzsKQEAgLTEzOTQsMTUgKzE2ODcsMzEgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGVtdWxhdGVfZ3JwMWEoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCi0JCQkJc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzKQorc3RhdGljIGludCBlbV9qbXBfZmFyKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOworCWludCByYzsKKwl1bnNpZ25lZCBzaG9ydCBzZWw7CisKKwltZW1jcHkoJnNlbCwgYy0+c3JjLnZhbHB0ciArIGMtPm9wX2J5dGVzLCAyKTsKKworCXJjID0gbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IoY3R4dCwgY3R4dC0+b3BzLCBzZWwsIFZDUFVfU1JFR19DUyk7CisJaWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpCisJCXJldHVybiByYzsKKworCWMtPmVpcCA9IDA7CisJbWVtY3B5KCZjLT5laXAsIGMtPnNyYy52YWxwdHIsIGMtPm9wX2J5dGVzKTsKKwlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKK30KKworc3RhdGljIGludCBlbV9ncnAxYShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKIHsKIAlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKIAotCXJldHVybiBlbXVsYXRlX3BvcChjdHh0LCBvcHMsICZjLT5kc3QudmFsLCBjLT5kc3QuYnl0ZXMpOworCXJldHVybiBlbXVsYXRlX3BvcChjdHh0LCAmYy0+ZHN0LnZhbCwgYy0+ZHN0LmJ5dGVzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGVtdWxhdGVfZ3JwMihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3N0YXRpYyBpbnQgZW1fZ3JwMihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKIHsKIAlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKIAlzd2l0Y2ggKGMtPm1vZHJtX3JlZykgewpAQCAtMTQyOSwxMCArMTczOCwxMCBAQAogCQllbXVsYXRlXzJvcF9TcmNCKCJzYXIiLCBjLT5zcmMsIGMtPmRzdCwgY3R4dC0+ZWZsYWdzKTsKIAkJYnJlYWs7CiAJfQorCXJldHVybiBYODZFTVVMX0NPTlRJTlVFOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBlbXVsYXRlX2dycDMoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCi0JCQkgICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzKQorc3RhdGljIGludCBlbV9ncnAzKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQogewogCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOwogCXVuc2lnbmVkIGxvbmcgKnJheCA9ICZjLT5yZWdzW1ZDUFVfUkVHU19SQVhdOwpAQCAtMTQ3MSwxMCArMTc4MCwxMCBAQAogCXJldHVybiBYODZFTVVMX0NPTlRJTlVFOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBlbXVsYXRlX2dycDQ1KHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAotCQkJICAgICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcykKK3N0YXRpYyBpbnQgZW1fZ3JwNDUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCiB7CiAJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CisJaW50IHJjID0gWDg2RU1VTF9DT05USU5VRTsKIAogCXN3aXRjaCAoYy0+bW9kcm1fcmVnKSB7CiAJY2FzZSAwOgkvKiBpbmMgKi8KQEAgLTE0ODgsMjEgKzE3OTcsMjMgQEAKIAkJb2xkX2VpcCA9IGMtPmVpcDsKIAkJYy0+ZWlwID0gYy0+c3JjLnZhbDsKIAkJYy0+c3JjLnZhbCA9IG9sZF9laXA7Ci0JCWVtdWxhdGVfcHVzaChjdHh0LCBvcHMpOworCQlyYyA9IGVtX3B1c2goY3R4dCk7CiAJCWJyZWFrOwogCX0KIAljYXNlIDQ6IC8qIGptcCBhYnMgKi8KIAkJYy0+ZWlwID0gYy0+c3JjLnZhbDsKIAkJYnJlYWs7CisJY2FzZSA1OiAvKiBqbXAgZmFyICovCisJCXJjID0gZW1fam1wX2ZhcihjdHh0KTsKKwkJYnJlYWs7CiAJY2FzZSA2OgkvKiBwdXNoICovCi0JCWVtdWxhdGVfcHVzaChjdHh0LCBvcHMpOworCQlyYyA9IGVtX3B1c2goY3R4dCk7CiAJCWJyZWFrOwogCX0KLQlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKKwlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGVtdWxhdGVfZ3JwOShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKLQkJCSAgICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMpCitzdGF0aWMgaW50IGVtX2dycDkoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCiB7CiAJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CiAJdTY0IG9sZCA9IGMtPmRzdC5vcmlnX3ZhbDY0OwpAQCAtMTUyOCwxMiArMTgzOSwxMiBAQAogCWludCByYzsKIAl1bnNpZ25lZCBsb25nIGNzOwogCi0JcmMgPSBlbXVsYXRlX3BvcChjdHh0LCBvcHMsICZjLT5laXAsIGMtPm9wX2J5dGVzKTsKKwlyYyA9IGVtdWxhdGVfcG9wKGN0eHQsICZjLT5laXAsIGMtPm9wX2J5dGVzKTsKIAlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJcmV0dXJuIHJjOwogCWlmIChjLT5vcF9ieXRlcyA9PSA0KQogCQljLT5laXAgPSAodTMyKWMtPmVpcDsKLQlyYyA9IGVtdWxhdGVfcG9wKGN0eHQsIG9wcywgJmNzLCBjLT5vcF9ieXRlcyk7CisJcmMgPSBlbXVsYXRlX3BvcChjdHh0LCAmY3MsIGMtPm9wX2J5dGVzKTsKIAlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJcmV0dXJuIHJjOwogCXJjID0gbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IoY3R4dCwgb3BzLCAodTE2KWNzLCBWQ1BVX1NSRUdfQ1MpOwpAQCAtMTU2Miw4ICsxODczLDEwIEBACiAJCQlzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMsIHN0cnVjdCBkZXNjX3N0cnVjdCAqY3MsCiAJCQlzdHJ1Y3QgZGVzY19zdHJ1Y3QgKnNzKQogeworCXUxNiBzZWxlY3RvcjsKKwogCW1lbXNldChjcywgMCwgc2l6ZW9mKHN0cnVjdCBkZXNjX3N0cnVjdCkpOwotCW9wcy0+Z2V0X2NhY2hlZF9kZXNjcmlwdG9yKGNzLCBOVUxMLCBWQ1BVX1NSRUdfQ1MsIGN0eHQtPnZjcHUpOworCW9wcy0+Z2V0X3NlZ21lbnQoY3R4dCwgJnNlbGVjdG9yLCBjcywgTlVMTCwgVkNQVV9TUkVHX0NTKTsKIAltZW1zZXQoc3MsIDAsIHNpemVvZihzdHJ1Y3QgZGVzY19zdHJ1Y3QpKTsKIAogCWNzLT5sID0gMDsJCS8qIHdpbGwgYmUgYWRqdXN0ZWQgbGF0ZXIgKi8KQEAgLTE1OTMsNDQgKzE5MDYsNDQgQEAKIAlzdHJ1Y3QgZGVzY19zdHJ1Y3QgY3MsIHNzOwogCXU2NCBtc3JfZGF0YTsKIAl1MTYgY3Nfc2VsLCBzc19zZWw7CisJdTY0IGVmZXIgPSAwOwogCiAJLyogc3lzY2FsbCBpcyBub3QgYXZhaWxhYmxlIGluIHJlYWwgbW9kZSAqLwogCWlmIChjdHh0LT5tb2RlID09IFg4NkVNVUxfTU9ERV9SRUFMIHx8CiAJICAgIGN0eHQtPm1vZGUgPT0gWDg2RU1VTF9NT0RFX1ZNODYpCiAJCXJldHVybiBlbXVsYXRlX3VkKGN0eHQpOwogCisJb3BzLT5nZXRfbXNyKGN0eHQsIE1TUl9FRkVSLCAmZWZlcik7CiAJc2V0dXBfc3lzY2FsbHNfc2VnbWVudHMoY3R4dCwgb3BzLCAmY3MsICZzcyk7CiAKLQlvcHMtPmdldF9tc3IoY3R4dC0+dmNwdSwgTVNSX1NUQVIsICZtc3JfZGF0YSk7CisJb3BzLT5nZXRfbXNyKGN0eHQsIE1TUl9TVEFSLCAmbXNyX2RhdGEpOwogCW1zcl9kYXRhID4+PSAzMjsKIAljc19zZWwgPSAodTE2KShtc3JfZGF0YSAmIDB4ZmZmYyk7CiAJc3Nfc2VsID0gKHUxNikobXNyX2RhdGEgKyA4KTsKIAotCWlmIChpc19sb25nX21vZGUoY3R4dC0+dmNwdSkpIHsKKwlpZiAoZWZlciAmIEVGRVJfTE1BKSB7CiAJCWNzLmQgPSAwOwogCQljcy5sID0gMTsKIAl9Ci0Jb3BzLT5zZXRfY2FjaGVkX2Rlc2NyaXB0b3IoJmNzLCAwLCBWQ1BVX1NSRUdfQ1MsIGN0eHQtPnZjcHUpOwotCW9wcy0+c2V0X3NlZ21lbnRfc2VsZWN0b3IoY3Nfc2VsLCBWQ1BVX1NSRUdfQ1MsIGN0eHQtPnZjcHUpOwotCW9wcy0+c2V0X2NhY2hlZF9kZXNjcmlwdG9yKCZzcywgMCwgVkNQVV9TUkVHX1NTLCBjdHh0LT52Y3B1KTsKLQlvcHMtPnNldF9zZWdtZW50X3NlbGVjdG9yKHNzX3NlbCwgVkNQVV9TUkVHX1NTLCBjdHh0LT52Y3B1KTsKKwlvcHMtPnNldF9zZWdtZW50KGN0eHQsIGNzX3NlbCwgJmNzLCAwLCBWQ1BVX1NSRUdfQ1MpOworCW9wcy0+c2V0X3NlZ21lbnQoY3R4dCwgc3Nfc2VsLCAmc3MsIDAsIFZDUFVfU1JFR19TUyk7CiAKIAljLT5yZWdzW1ZDUFVfUkVHU19SQ1hdID0gYy0+ZWlwOwotCWlmIChpc19sb25nX21vZGUoY3R4dC0+dmNwdSkpIHsKKwlpZiAoZWZlciAmIEVGRVJfTE1BKSB7CiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCQljLT5yZWdzW1ZDUFVfUkVHU19SMTFdID0gY3R4dC0+ZWZsYWdzICYgfkVGTEdfUkY7CiAKLQkJb3BzLT5nZXRfbXNyKGN0eHQtPnZjcHUsCisJCW9wcy0+Z2V0X21zcihjdHh0LAogCQkJICAgICBjdHh0LT5tb2RlID09IFg4NkVNVUxfTU9ERV9QUk9UNjQgPwogCQkJICAgICBNU1JfTFNUQVIgOiBNU1JfQ1NUQVIsICZtc3JfZGF0YSk7CiAJCWMtPmVpcCA9IG1zcl9kYXRhOwogCi0JCW9wcy0+Z2V0X21zcihjdHh0LT52Y3B1LCBNU1JfU1lTQ0FMTF9NQVNLLCAmbXNyX2RhdGEpOworCQlvcHMtPmdldF9tc3IoY3R4dCwgTVNSX1NZU0NBTExfTUFTSywgJm1zcl9kYXRhKTsKIAkJY3R4dC0+ZWZsYWdzICY9IH4obXNyX2RhdGEgfCBFRkxHX1JGKTsKICNlbmRpZgogCX0gZWxzZSB7CiAJCS8qIGxlZ2FjeSBtb2RlICovCi0JCW9wcy0+Z2V0X21zcihjdHh0LT52Y3B1LCBNU1JfU1RBUiwgJm1zcl9kYXRhKTsKKwkJb3BzLT5nZXRfbXNyKGN0eHQsIE1TUl9TVEFSLCAmbXNyX2RhdGEpOwogCQljLT5laXAgPSAodTMyKW1zcl9kYXRhOwogCiAJCWN0eHQtPmVmbGFncyAmPSB+KEVGTEdfVk0gfCBFRkxHX0lGIHwgRUZMR19SRik7CkBAIC0xNjQ2LDcgKzE5NTksOSBAQAogCXN0cnVjdCBkZXNjX3N0cnVjdCBjcywgc3M7CiAJdTY0IG1zcl9kYXRhOwogCXUxNiBjc19zZWwsIHNzX3NlbDsKKwl1NjQgZWZlciA9IDA7CiAKKwljdHh0LT5vcHMtPmdldF9tc3IoY3R4dCwgTVNSX0VGRVIsICZlZmVyKTsKIAkvKiBpbmplY3QgI0dQIGlmIGluIHJlYWwgbW9kZSAqLwogCWlmIChjdHh0LT5tb2RlID09IFg4NkVNVUxfTU9ERV9SRUFMKQogCQlyZXR1cm4gZW11bGF0ZV9ncChjdHh0LCAwKTsKQEAgLTE2NTksNyArMTk3NCw3IEBACiAKIAlzZXR1cF9zeXNjYWxsc19zZWdtZW50cyhjdHh0LCBvcHMsICZjcywgJnNzKTsKIAotCW9wcy0+Z2V0X21zcihjdHh0LT52Y3B1LCBNU1JfSUEzMl9TWVNFTlRFUl9DUywgJm1zcl9kYXRhKTsKKwlvcHMtPmdldF9tc3IoY3R4dCwgTVNSX0lBMzJfU1lTRU5URVJfQ1MsICZtc3JfZGF0YSk7CiAJc3dpdGNoIChjdHh0LT5tb2RlKSB7CiAJY2FzZSBYODZFTVVMX01PREVfUFJPVDMyOgogCQlpZiAoKG1zcl9kYXRhICYgMHhmZmZjKSA9PSAweDApCkBAIC0xNjc2LDIxICsxOTkxLDE4IEBACiAJY3Nfc2VsICY9IH5TRUxFQ1RPUl9SUExfTUFTSzsKIAlzc19zZWwgPSBjc19zZWwgKyA4OwogCXNzX3NlbCAmPSB+U0VMRUNUT1JfUlBMX01BU0s7Ci0JaWYgKGN0eHQtPm1vZGUgPT0gWDg2RU1VTF9NT0RFX1BST1Q2NAotCQl8fCBpc19sb25nX21vZGUoY3R4dC0+dmNwdSkpIHsKKwlpZiAoY3R4dC0+bW9kZSA9PSBYODZFTVVMX01PREVfUFJPVDY0IHx8IChlZmVyICYgRUZFUl9MTUEpKSB7CiAJCWNzLmQgPSAwOwogCQljcy5sID0gMTsKIAl9CiAKLQlvcHMtPnNldF9jYWNoZWRfZGVzY3JpcHRvcigmY3MsIDAsIFZDUFVfU1JFR19DUywgY3R4dC0+dmNwdSk7Ci0Jb3BzLT5zZXRfc2VnbWVudF9zZWxlY3Rvcihjc19zZWwsIFZDUFVfU1JFR19DUywgY3R4dC0+dmNwdSk7Ci0Jb3BzLT5zZXRfY2FjaGVkX2Rlc2NyaXB0b3IoJnNzLCAwLCBWQ1BVX1NSRUdfU1MsIGN0eHQtPnZjcHUpOwotCW9wcy0+c2V0X3NlZ21lbnRfc2VsZWN0b3Ioc3Nfc2VsLCBWQ1BVX1NSRUdfU1MsIGN0eHQtPnZjcHUpOworCW9wcy0+c2V0X3NlZ21lbnQoY3R4dCwgY3Nfc2VsLCAmY3MsIDAsIFZDUFVfU1JFR19DUyk7CisJb3BzLT5zZXRfc2VnbWVudChjdHh0LCBzc19zZWwsICZzcywgMCwgVkNQVV9TUkVHX1NTKTsKIAotCW9wcy0+Z2V0X21zcihjdHh0LT52Y3B1LCBNU1JfSUEzMl9TWVNFTlRFUl9FSVAsICZtc3JfZGF0YSk7CisJb3BzLT5nZXRfbXNyKGN0eHQsIE1TUl9JQTMyX1NZU0VOVEVSX0VJUCwgJm1zcl9kYXRhKTsKIAljLT5laXAgPSBtc3JfZGF0YTsKIAotCW9wcy0+Z2V0X21zcihjdHh0LT52Y3B1LCBNU1JfSUEzMl9TWVNFTlRFUl9FU1AsICZtc3JfZGF0YSk7CisJb3BzLT5nZXRfbXNyKGN0eHQsIE1TUl9JQTMyX1NZU0VOVEVSX0VTUCwgJm1zcl9kYXRhKTsKIAljLT5yZWdzW1ZDUFVfUkVHU19SU1BdID0gbXNyX2RhdGE7CiAKIAlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKQEAgLTE3MTksNyArMjAzMSw3IEBACiAKIAljcy5kcGwgPSAzOwogCXNzLmRwbCA9IDM7Ci0Jb3BzLT5nZXRfbXNyKGN0eHQtPnZjcHUsIE1TUl9JQTMyX1NZU0VOVEVSX0NTLCAmbXNyX2RhdGEpOworCW9wcy0+Z2V0X21zcihjdHh0LCBNU1JfSUEzMl9TWVNFTlRFUl9DUywgJm1zcl9kYXRhKTsKIAlzd2l0Y2ggKHVzZXJtb2RlKSB7CiAJY2FzZSBYODZFTVVMX01PREVfUFJPVDMyOgogCQljc19zZWwgPSAodTE2KShtc3JfZGF0YSArIDE2KTsKQEAgLTE3MzksMTAgKzIwNTEsOCBAQAogCWNzX3NlbCB8PSBTRUxFQ1RPUl9SUExfTUFTSzsKIAlzc19zZWwgfD0gU0VMRUNUT1JfUlBMX01BU0s7CiAKLQlvcHMtPnNldF9jYWNoZWRfZGVzY3JpcHRvcigmY3MsIDAsIFZDUFVfU1JFR19DUywgY3R4dC0+dmNwdSk7Ci0Jb3BzLT5zZXRfc2VnbWVudF9zZWxlY3Rvcihjc19zZWwsIFZDUFVfU1JFR19DUywgY3R4dC0+dmNwdSk7Ci0Jb3BzLT5zZXRfY2FjaGVkX2Rlc2NyaXB0b3IoJnNzLCAwLCBWQ1BVX1NSRUdfU1MsIGN0eHQtPnZjcHUpOwotCW9wcy0+c2V0X3NlZ21lbnRfc2VsZWN0b3Ioc3Nfc2VsLCBWQ1BVX1NSRUdfU1MsIGN0eHQtPnZjcHUpOworCW9wcy0+c2V0X3NlZ21lbnQoY3R4dCwgY3Nfc2VsLCAmY3MsIDAsIFZDUFVfU1JFR19DUyk7CisJb3BzLT5zZXRfc2VnbWVudChjdHh0LCBzc19zZWwsICZzcywgMCwgVkNQVV9TUkVHX1NTKTsKIAogCWMtPmVpcCA9IGMtPnJlZ3NbVkNQVV9SRUdTX1JEWF07CiAJYy0+cmVnc1tWQ1BVX1JFR1NfUlNQXSA9IGMtPnJlZ3NbVkNQVV9SRUdTX1JDWF07CkBAIC0xNzU5LDcgKzIwNjksNyBAQAogCWlmIChjdHh0LT5tb2RlID09IFg4NkVNVUxfTU9ERV9WTTg2KQogCQlyZXR1cm4gdHJ1ZTsKIAlpb3BsID0gKGN0eHQtPmVmbGFncyAmIFg4Nl9FRkxBR1NfSU9QTCkgPj4gSU9QTF9TSElGVDsKLQlyZXR1cm4gb3BzLT5jcGwoY3R4dC0+dmNwdSkgPiBpb3BsOworCXJldHVybiBvcHMtPmNwbChjdHh0KSA+IGlvcGw7CiB9CiAKIHN0YXRpYyBib29sIGVtdWxhdG9yX2lvX3BvcnRfYWNjZXNzX2FsbG93ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCkBAIC0xNzY5LDExICsyMDc5LDExIEBACiAJc3RydWN0IGRlc2Nfc3RydWN0IHRyX3NlZzsKIAl1MzIgYmFzZTM7CiAJaW50IHI7Ci0JdTE2IGlvX2JpdG1hcF9wdHIsIHBlcm0sIGJpdF9pZHggPSBwb3J0ICYgMHg3OworCXUxNiB0ciwgaW9fYml0bWFwX3B0ciwgcGVybSwgYml0X2lkeCA9IHBvcnQgJiAweDc7CiAJdW5zaWduZWQgbWFzayA9ICgxIDw8IGxlbikgLSAxOwogCXVuc2lnbmVkIGxvbmcgYmFzZTsKIAotCW9wcy0+Z2V0X2NhY2hlZF9kZXNjcmlwdG9yKCZ0cl9zZWcsICZiYXNlMywgVkNQVV9TUkVHX1RSLCBjdHh0LT52Y3B1KTsKKwlvcHMtPmdldF9zZWdtZW50KGN0eHQsICZ0ciwgJnRyX3NlZywgJmJhc2UzLCBWQ1BVX1NSRUdfVFIpOwogCWlmICghdHJfc2VnLnApCiAJCXJldHVybiBmYWxzZTsKIAlpZiAoZGVzY19saW1pdF9zY2FsZWQoJnRyX3NlZykgPCAxMDMpCkBAIC0xNzgyLDEzICsyMDkyLDEyIEBACiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCWJhc2UgfD0gKCh1NjQpYmFzZTMpIDw8IDMyOwogI2VuZGlmCi0JciA9IG9wcy0+cmVhZF9zdGQoYmFzZSArIDEwMiwgJmlvX2JpdG1hcF9wdHIsIDIsIGN0eHQtPnZjcHUsIE5VTEwpOworCXIgPSBvcHMtPnJlYWRfc3RkKGN0eHQsIGJhc2UgKyAxMDIsICZpb19iaXRtYXBfcHRyLCAyLCBOVUxMKTsKIAlpZiAociAhPSBYODZFTVVMX0NPTlRJTlVFKQogCQlyZXR1cm4gZmFsc2U7CiAJaWYgKGlvX2JpdG1hcF9wdHIgKyBwb3J0LzggPiBkZXNjX2xpbWl0X3NjYWxlZCgmdHJfc2VnKSkKIAkJcmV0dXJuIGZhbHNlOwotCXIgPSBvcHMtPnJlYWRfc3RkKGJhc2UgKyBpb19iaXRtYXBfcHRyICsgcG9ydC84LCAmcGVybSwgMiwgY3R4dC0+dmNwdSwKLQkJCSAgTlVMTCk7CisJciA9IG9wcy0+cmVhZF9zdGQoY3R4dCwgYmFzZSArIGlvX2JpdG1hcF9wdHIgKyBwb3J0LzgsICZwZXJtLCAyLCBOVUxMKTsKIAlpZiAociAhPSBYODZFTVVMX0NPTlRJTlVFKQogCQlyZXR1cm4gZmFsc2U7CiAJaWYgKChwZXJtID4+IGJpdF9pZHgpICYgbWFzaykKQEAgLTE4MjksMTEgKzIxMzgsMTEgQEAKIAl0c3MtPnNpID0gYy0+cmVnc1tWQ1BVX1JFR1NfUlNJXTsKIAl0c3MtPmRpID0gYy0+cmVnc1tWQ1BVX1JFR1NfUkRJXTsKIAotCXRzcy0+ZXMgPSBvcHMtPmdldF9zZWdtZW50X3NlbGVjdG9yKFZDUFVfU1JFR19FUywgY3R4dC0+dmNwdSk7Ci0JdHNzLT5jcyA9IG9wcy0+Z2V0X3NlZ21lbnRfc2VsZWN0b3IoVkNQVV9TUkVHX0NTLCBjdHh0LT52Y3B1KTsKLQl0c3MtPnNzID0gb3BzLT5nZXRfc2VnbWVudF9zZWxlY3RvcihWQ1BVX1NSRUdfU1MsIGN0eHQtPnZjcHUpOwotCXRzcy0+ZHMgPSBvcHMtPmdldF9zZWdtZW50X3NlbGVjdG9yKFZDUFVfU1JFR19EUywgY3R4dC0+dmNwdSk7Ci0JdHNzLT5sZHQgPSBvcHMtPmdldF9zZWdtZW50X3NlbGVjdG9yKFZDUFVfU1JFR19MRFRSLCBjdHh0LT52Y3B1KTsKKwl0c3MtPmVzID0gZ2V0X3NlZ21lbnRfc2VsZWN0b3IoY3R4dCwgVkNQVV9TUkVHX0VTKTsKKwl0c3MtPmNzID0gZ2V0X3NlZ21lbnRfc2VsZWN0b3IoY3R4dCwgVkNQVV9TUkVHX0NTKTsKKwl0c3MtPnNzID0gZ2V0X3NlZ21lbnRfc2VsZWN0b3IoY3R4dCwgVkNQVV9TUkVHX1NTKTsKKwl0c3MtPmRzID0gZ2V0X3NlZ21lbnRfc2VsZWN0b3IoY3R4dCwgVkNQVV9TUkVHX0RTKTsKKwl0c3MtPmxkdCA9IGdldF9zZWdtZW50X3NlbGVjdG9yKGN0eHQsIFZDUFVfU1JFR19MRFRSKTsKIH0KIAogc3RhdGljIGludCBsb2FkX3N0YXRlX2Zyb21fdHNzMTYoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCkBAIC0xODU4LDExICsyMTY3LDExIEBACiAJICogU0RNIHNheXMgdGhhdCBzZWdtZW50IHNlbGVjdG9ycyBhcmUgbG9hZGVkIGJlZm9yZSBzZWdtZW50CiAJICogZGVzY3JpcHRvcnMKIAkgKi8KLQlvcHMtPnNldF9zZWdtZW50X3NlbGVjdG9yKHRzcy0+bGR0LCBWQ1BVX1NSRUdfTERUUiwgY3R4dC0+dmNwdSk7Ci0Jb3BzLT5zZXRfc2VnbWVudF9zZWxlY3Rvcih0c3MtPmVzLCBWQ1BVX1NSRUdfRVMsIGN0eHQtPnZjcHUpOwotCW9wcy0+c2V0X3NlZ21lbnRfc2VsZWN0b3IodHNzLT5jcywgVkNQVV9TUkVHX0NTLCBjdHh0LT52Y3B1KTsKLQlvcHMtPnNldF9zZWdtZW50X3NlbGVjdG9yKHRzcy0+c3MsIFZDUFVfU1JFR19TUywgY3R4dC0+dmNwdSk7Ci0Jb3BzLT5zZXRfc2VnbWVudF9zZWxlY3Rvcih0c3MtPmRzLCBWQ1BVX1NSRUdfRFMsIGN0eHQtPnZjcHUpOworCXNldF9zZWdtZW50X3NlbGVjdG9yKGN0eHQsIHRzcy0+bGR0LCBWQ1BVX1NSRUdfTERUUik7CisJc2V0X3NlZ21lbnRfc2VsZWN0b3IoY3R4dCwgdHNzLT5lcywgVkNQVV9TUkVHX0VTKTsKKwlzZXRfc2VnbWVudF9zZWxlY3RvcihjdHh0LCB0c3MtPmNzLCBWQ1BVX1NSRUdfQ1MpOworCXNldF9zZWdtZW50X3NlbGVjdG9yKGN0eHQsIHRzcy0+c3MsIFZDUFVfU1JFR19TUyk7CisJc2V0X3NlZ21lbnRfc2VsZWN0b3IoY3R4dCwgdHNzLT5kcywgVkNQVV9TUkVHX0RTKTsKIAogCS8qCiAJICogTm93IGxvYWQgc2VnbWVudCBkZXNjcmlwdG9ycy4gSWYgZmF1bHQgaGFwcGVuZXMgYXQgdGhpcyBzdGFnZQpAQCAtMTg5Niw3ICsyMjA1LDcgQEAKIAlpbnQgcmV0OwogCXUzMiBuZXdfdHNzX2Jhc2UgPSBnZXRfZGVzY19iYXNlKG5ld19kZXNjKTsKIAotCXJldCA9IG9wcy0+cmVhZF9zdGQob2xkX3Rzc19iYXNlLCAmdHNzX3NlZywgc2l6ZW9mIHRzc19zZWcsIGN0eHQtPnZjcHUsCisJcmV0ID0gb3BzLT5yZWFkX3N0ZChjdHh0LCBvbGRfdHNzX2Jhc2UsICZ0c3Nfc2VnLCBzaXplb2YgdHNzX3NlZywKIAkJCSAgICAmY3R4dC0+ZXhjZXB0aW9uKTsKIAlpZiAocmV0ICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCS8qIEZJWE1FOiBuZWVkIHRvIHByb3ZpZGUgcHJlY2lzZSBmYXVsdCBhZGRyZXNzICovCkBAIC0xOTA0LDEzICsyMjEzLDEzIEBACiAKIAlzYXZlX3N0YXRlX3RvX3RzczE2KGN0eHQsIG9wcywgJnRzc19zZWcpOwogCi0JcmV0ID0gb3BzLT53cml0ZV9zdGQob2xkX3Rzc19iYXNlLCAmdHNzX3NlZywgc2l6ZW9mIHRzc19zZWcsIGN0eHQtPnZjcHUsCisJcmV0ID0gb3BzLT53cml0ZV9zdGQoY3R4dCwgb2xkX3Rzc19iYXNlLCAmdHNzX3NlZywgc2l6ZW9mIHRzc19zZWcsCiAJCQkgICAgICZjdHh0LT5leGNlcHRpb24pOwogCWlmIChyZXQgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJLyogRklYTUU6IG5lZWQgdG8gcHJvdmlkZSBwcmVjaXNlIGZhdWx0IGFkZHJlc3MgKi8KIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IG9wcy0+cmVhZF9zdGQobmV3X3Rzc19iYXNlLCAmdHNzX3NlZywgc2l6ZW9mIHRzc19zZWcsIGN0eHQtPnZjcHUsCisJcmV0ID0gb3BzLT5yZWFkX3N0ZChjdHh0LCBuZXdfdHNzX2Jhc2UsICZ0c3Nfc2VnLCBzaXplb2YgdHNzX3NlZywKIAkJCSAgICAmY3R4dC0+ZXhjZXB0aW9uKTsKIAlpZiAocmV0ICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCS8qIEZJWE1FOiBuZWVkIHRvIHByb3ZpZGUgcHJlY2lzZSBmYXVsdCBhZGRyZXNzICovCkBAIC0xOTE5LDEwICsyMjI4LDEwIEBACiAJaWYgKG9sZF90c3Nfc2VsICE9IDB4ZmZmZikgewogCQl0c3Nfc2VnLnByZXZfdGFza19saW5rID0gb2xkX3Rzc19zZWw7CiAKLQkJcmV0ID0gb3BzLT53cml0ZV9zdGQobmV3X3Rzc19iYXNlLAorCQlyZXQgPSBvcHMtPndyaXRlX3N0ZChjdHh0LCBuZXdfdHNzX2Jhc2UsCiAJCQkJICAgICAmdHNzX3NlZy5wcmV2X3Rhc2tfbGluaywKIAkJCQkgICAgIHNpemVvZiB0c3Nfc2VnLnByZXZfdGFza19saW5rLAotCQkJCSAgICAgY3R4dC0+dmNwdSwgJmN0eHQtPmV4Y2VwdGlvbik7CisJCQkJICAgICAmY3R4dC0+ZXhjZXB0aW9uKTsKIAkJaWYgKHJldCAhPSBYODZFTVVMX0NPTlRJTlVFKQogCQkJLyogRklYTUU6IG5lZWQgdG8gcHJvdmlkZSBwcmVjaXNlIGZhdWx0IGFkZHJlc3MgKi8KIAkJCXJldHVybiByZXQ7CkBAIC0xOTM3LDcgKzIyNDYsNyBAQAogewogCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOwogCi0JdHNzLT5jcjMgPSBvcHMtPmdldF9jcigzLCBjdHh0LT52Y3B1KTsKKwl0c3MtPmNyMyA9IG9wcy0+Z2V0X2NyKGN0eHQsIDMpOwogCXRzcy0+ZWlwID0gYy0+ZWlwOwogCXRzcy0+ZWZsYWdzID0gY3R4dC0+ZWZsYWdzOwogCXRzcy0+ZWF4ID0gYy0+cmVnc1tWQ1BVX1JFR1NfUkFYXTsKQEAgLTE5NDksMTMgKzIyNTgsMTMgQEAKIAl0c3MtPmVzaSA9IGMtPnJlZ3NbVkNQVV9SRUdTX1JTSV07CiAJdHNzLT5lZGkgPSBjLT5yZWdzW1ZDUFVfUkVHU19SREldOwogCi0JdHNzLT5lcyA9IG9wcy0+Z2V0X3NlZ21lbnRfc2VsZWN0b3IoVkNQVV9TUkVHX0VTLCBjdHh0LT52Y3B1KTsKLQl0c3MtPmNzID0gb3BzLT5nZXRfc2VnbWVudF9zZWxlY3RvcihWQ1BVX1NSRUdfQ1MsIGN0eHQtPnZjcHUpOwotCXRzcy0+c3MgPSBvcHMtPmdldF9zZWdtZW50X3NlbGVjdG9yKFZDUFVfU1JFR19TUywgY3R4dC0+dmNwdSk7Ci0JdHNzLT5kcyA9IG9wcy0+Z2V0X3NlZ21lbnRfc2VsZWN0b3IoVkNQVV9TUkVHX0RTLCBjdHh0LT52Y3B1KTsKLQl0c3MtPmZzID0gb3BzLT5nZXRfc2VnbWVudF9zZWxlY3RvcihWQ1BVX1NSRUdfRlMsIGN0eHQtPnZjcHUpOwotCXRzcy0+Z3MgPSBvcHMtPmdldF9zZWdtZW50X3NlbGVjdG9yKFZDUFVfU1JFR19HUywgY3R4dC0+dmNwdSk7Ci0JdHNzLT5sZHRfc2VsZWN0b3IgPSBvcHMtPmdldF9zZWdtZW50X3NlbGVjdG9yKFZDUFVfU1JFR19MRFRSLCBjdHh0LT52Y3B1KTsKKwl0c3MtPmVzID0gZ2V0X3NlZ21lbnRfc2VsZWN0b3IoY3R4dCwgVkNQVV9TUkVHX0VTKTsKKwl0c3MtPmNzID0gZ2V0X3NlZ21lbnRfc2VsZWN0b3IoY3R4dCwgVkNQVV9TUkVHX0NTKTsKKwl0c3MtPnNzID0gZ2V0X3NlZ21lbnRfc2VsZWN0b3IoY3R4dCwgVkNQVV9TUkVHX1NTKTsKKwl0c3MtPmRzID0gZ2V0X3NlZ21lbnRfc2VsZWN0b3IoY3R4dCwgVkNQVV9TUkVHX0RTKTsKKwl0c3MtPmZzID0gZ2V0X3NlZ21lbnRfc2VsZWN0b3IoY3R4dCwgVkNQVV9TUkVHX0ZTKTsKKwl0c3MtPmdzID0gZ2V0X3NlZ21lbnRfc2VsZWN0b3IoY3R4dCwgVkNQVV9TUkVHX0dTKTsKKwl0c3MtPmxkdF9zZWxlY3RvciA9IGdldF9zZWdtZW50X3NlbGVjdG9yKGN0eHQsIFZDUFVfU1JFR19MRFRSKTsKIH0KIAogc3RhdGljIGludCBsb2FkX3N0YXRlX2Zyb21fdHNzMzIoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCkBAIC0xOTY1LDcgKzIyNzQsNyBAQAogCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOwogCWludCByZXQ7CiAKLQlpZiAob3BzLT5zZXRfY3IoMywgdHNzLT5jcjMsIGN0eHQtPnZjcHUpKQorCWlmIChvcHMtPnNldF9jcihjdHh0LCAzLCB0c3MtPmNyMykpCiAJCXJldHVybiBlbXVsYXRlX2dwKGN0eHQsIDApOwogCWMtPmVpcCA9IHRzcy0+ZWlwOwogCWN0eHQtPmVmbGFncyA9IHRzcy0+ZWZsYWdzIHwgMjsKQEAgLTE5ODIsMTMgKzIyOTEsMTMgQEAKIAkgKiBTRE0gc2F5cyB0aGF0IHNlZ21lbnQgc2VsZWN0b3JzIGFyZSBsb2FkZWQgYmVmb3JlIHNlZ21lbnQKIAkgKiBkZXNjcmlwdG9ycwogCSAqLwotCW9wcy0+c2V0X3NlZ21lbnRfc2VsZWN0b3IodHNzLT5sZHRfc2VsZWN0b3IsIFZDUFVfU1JFR19MRFRSLCBjdHh0LT52Y3B1KTsKLQlvcHMtPnNldF9zZWdtZW50X3NlbGVjdG9yKHRzcy0+ZXMsIFZDUFVfU1JFR19FUywgY3R4dC0+dmNwdSk7Ci0Jb3BzLT5zZXRfc2VnbWVudF9zZWxlY3Rvcih0c3MtPmNzLCBWQ1BVX1NSRUdfQ1MsIGN0eHQtPnZjcHUpOwotCW9wcy0+c2V0X3NlZ21lbnRfc2VsZWN0b3IodHNzLT5zcywgVkNQVV9TUkVHX1NTLCBjdHh0LT52Y3B1KTsKLQlvcHMtPnNldF9zZWdtZW50X3NlbGVjdG9yKHRzcy0+ZHMsIFZDUFVfU1JFR19EUywgY3R4dC0+dmNwdSk7Ci0Jb3BzLT5zZXRfc2VnbWVudF9zZWxlY3Rvcih0c3MtPmZzLCBWQ1BVX1NSRUdfRlMsIGN0eHQtPnZjcHUpOwotCW9wcy0+c2V0X3NlZ21lbnRfc2VsZWN0b3IodHNzLT5ncywgVkNQVV9TUkVHX0dTLCBjdHh0LT52Y3B1KTsKKwlzZXRfc2VnbWVudF9zZWxlY3RvcihjdHh0LCB0c3MtPmxkdF9zZWxlY3RvciwgVkNQVV9TUkVHX0xEVFIpOworCXNldF9zZWdtZW50X3NlbGVjdG9yKGN0eHQsIHRzcy0+ZXMsIFZDUFVfU1JFR19FUyk7CisJc2V0X3NlZ21lbnRfc2VsZWN0b3IoY3R4dCwgdHNzLT5jcywgVkNQVV9TUkVHX0NTKTsKKwlzZXRfc2VnbWVudF9zZWxlY3RvcihjdHh0LCB0c3MtPnNzLCBWQ1BVX1NSRUdfU1MpOworCXNldF9zZWdtZW50X3NlbGVjdG9yKGN0eHQsIHRzcy0+ZHMsIFZDUFVfU1JFR19EUyk7CisJc2V0X3NlZ21lbnRfc2VsZWN0b3IoY3R4dCwgdHNzLT5mcywgVkNQVV9TUkVHX0ZTKTsKKwlzZXRfc2VnbWVudF9zZWxlY3RvcihjdHh0LCB0c3MtPmdzLCBWQ1BVX1NSRUdfR1MpOwogCiAJLyoKIAkgKiBOb3cgbG9hZCBzZWdtZW50IGRlc2NyaXB0b3JzLiBJZiBmYXVsdCBoYXBwZW5lcyBhdCB0aGlzIHN0YWdlCkBAIC0yMDI4LDcgKzIzMzcsNyBAQAogCWludCByZXQ7CiAJdTMyIG5ld190c3NfYmFzZSA9IGdldF9kZXNjX2Jhc2UobmV3X2Rlc2MpOwogCi0JcmV0ID0gb3BzLT5yZWFkX3N0ZChvbGRfdHNzX2Jhc2UsICZ0c3Nfc2VnLCBzaXplb2YgdHNzX3NlZywgY3R4dC0+dmNwdSwKKwlyZXQgPSBvcHMtPnJlYWRfc3RkKGN0eHQsIG9sZF90c3NfYmFzZSwgJnRzc19zZWcsIHNpemVvZiB0c3Nfc2VnLAogCQkJICAgICZjdHh0LT5leGNlcHRpb24pOwogCWlmIChyZXQgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJLyogRklYTUU6IG5lZWQgdG8gcHJvdmlkZSBwcmVjaXNlIGZhdWx0IGFkZHJlc3MgKi8KQEAgLTIwMzYsMTMgKzIzNDUsMTMgQEAKIAogCXNhdmVfc3RhdGVfdG9fdHNzMzIoY3R4dCwgb3BzLCAmdHNzX3NlZyk7CiAKLQlyZXQgPSBvcHMtPndyaXRlX3N0ZChvbGRfdHNzX2Jhc2UsICZ0c3Nfc2VnLCBzaXplb2YgdHNzX3NlZywgY3R4dC0+dmNwdSwKKwlyZXQgPSBvcHMtPndyaXRlX3N0ZChjdHh0LCBvbGRfdHNzX2Jhc2UsICZ0c3Nfc2VnLCBzaXplb2YgdHNzX3NlZywKIAkJCSAgICAgJmN0eHQtPmV4Y2VwdGlvbik7CiAJaWYgKHJldCAhPSBYODZFTVVMX0NPTlRJTlVFKQogCQkvKiBGSVhNRTogbmVlZCB0byBwcm92aWRlIHByZWNpc2UgZmF1bHQgYWRkcmVzcyAqLwogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gb3BzLT5yZWFkX3N0ZChuZXdfdHNzX2Jhc2UsICZ0c3Nfc2VnLCBzaXplb2YgdHNzX3NlZywgY3R4dC0+dmNwdSwKKwlyZXQgPSBvcHMtPnJlYWRfc3RkKGN0eHQsIG5ld190c3NfYmFzZSwgJnRzc19zZWcsIHNpemVvZiB0c3Nfc2VnLAogCQkJICAgICZjdHh0LT5leGNlcHRpb24pOwogCWlmIChyZXQgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJLyogRklYTUU6IG5lZWQgdG8gcHJvdmlkZSBwcmVjaXNlIGZhdWx0IGFkZHJlc3MgKi8KQEAgLTIwNTEsMTAgKzIzNjAsMTAgQEAKIAlpZiAob2xkX3Rzc19zZWwgIT0gMHhmZmZmKSB7CiAJCXRzc19zZWcucHJldl90YXNrX2xpbmsgPSBvbGRfdHNzX3NlbDsKIAotCQlyZXQgPSBvcHMtPndyaXRlX3N0ZChuZXdfdHNzX2Jhc2UsCisJCXJldCA9IG9wcy0+d3JpdGVfc3RkKGN0eHQsIG5ld190c3NfYmFzZSwKIAkJCQkgICAgICZ0c3Nfc2VnLnByZXZfdGFza19saW5rLAogCQkJCSAgICAgc2l6ZW9mIHRzc19zZWcucHJldl90YXNrX2xpbmssCi0JCQkJICAgICBjdHh0LT52Y3B1LCAmY3R4dC0+ZXhjZXB0aW9uKTsKKwkJCQkgICAgICZjdHh0LT5leGNlcHRpb24pOwogCQlpZiAocmV0ICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCQkvKiBGSVhNRTogbmVlZCB0byBwcm92aWRlIHByZWNpc2UgZmF1bHQgYWRkcmVzcyAqLwogCQkJcmV0dXJuIHJldDsKQEAgLTIwNzAsOSArMjM3OSw5IEBACiB7CiAJc3RydWN0IGRlc2Nfc3RydWN0IGN1cnJfdHNzX2Rlc2MsIG5leHRfdHNzX2Rlc2M7CiAJaW50IHJldDsKLQl1MTYgb2xkX3Rzc19zZWwgPSBvcHMtPmdldF9zZWdtZW50X3NlbGVjdG9yKFZDUFVfU1JFR19UUiwgY3R4dC0+dmNwdSk7CisJdTE2IG9sZF90c3Nfc2VsID0gZ2V0X3NlZ21lbnRfc2VsZWN0b3IoY3R4dCwgVkNQVV9TUkVHX1RSKTsKIAl1bG9uZyBvbGRfdHNzX2Jhc2UgPQotCQlvcHMtPmdldF9jYWNoZWRfc2VnbWVudF9iYXNlKFZDUFVfU1JFR19UUiwgY3R4dC0+dmNwdSk7CisJCW9wcy0+Z2V0X2NhY2hlZF9zZWdtZW50X2Jhc2UoY3R4dCwgVkNQVV9TUkVHX1RSKTsKIAl1MzIgZGVzY19saW1pdDsKIAogCS8qIEZJWE1FOiBvbGRfdHNzX2Jhc2UgPT0gfjAgPyAqLwpAQCAtMjA4OCw3ICsyMzk3LDcgQEAKIAogCWlmIChyZWFzb24gIT0gVEFTS19TV0lUQ0hfSVJFVCkgewogCQlpZiAoKHRzc19zZWxlY3RvciAmIDMpID4gbmV4dF90c3NfZGVzYy5kcGwgfHwKLQkJICAgIG9wcy0+Y3BsKGN0eHQtPnZjcHUpID4gbmV4dF90c3NfZGVzYy5kcGwpCisJCSAgICBvcHMtPmNwbChjdHh0KSA+IG5leHRfdHNzX2Rlc2MuZHBsKQogCQkJcmV0dXJuIGVtdWxhdGVfZ3AoY3R4dCwgMCk7CiAJfQogCkBAIC0yMTMyLDkgKzI0NDEsOCBAQAogCQkJCQkgJm5leHRfdHNzX2Rlc2MpOwogCX0KIAotCW9wcy0+c2V0X2NyKDAsICBvcHMtPmdldF9jcigwLCBjdHh0LT52Y3B1KSB8IFg4Nl9DUjBfVFMsIGN0eHQtPnZjcHUpOwotCW9wcy0+c2V0X2NhY2hlZF9kZXNjcmlwdG9yKCZuZXh0X3Rzc19kZXNjLCAwLCBWQ1BVX1NSRUdfVFIsIGN0eHQtPnZjcHUpOwotCW9wcy0+c2V0X3NlZ21lbnRfc2VsZWN0b3IodHNzX3NlbGVjdG9yLCBWQ1BVX1NSRUdfVFIsIGN0eHQtPnZjcHUpOworCW9wcy0+c2V0X2NyKGN0eHQsIDAsICBvcHMtPmdldF9jcihjdHh0LCAwKSB8IFg4Nl9DUjBfVFMpOworCW9wcy0+c2V0X3NlZ21lbnQoY3R4dCwgdHNzX3NlbGVjdG9yLCAmbmV4dF90c3NfZGVzYywgMCwgVkNQVV9TUkVHX1RSKTsKIAogCWlmIChoYXNfZXJyb3JfY29kZSkgewogCQlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKQEAgLTIxNDIsNyArMjQ1MCw3IEBACiAJCWMtPm9wX2J5dGVzID0gYy0+YWRfYnl0ZXMgPSAobmV4dF90c3NfZGVzYy50eXBlICYgOCkgPyA0IDogMjsKIAkJYy0+bG9ja19wcmVmaXggPSAwOwogCQljLT5zcmMudmFsID0gKHVuc2lnbmVkIGxvbmcpIGVycm9yX2NvZGU7Ci0JCWVtdWxhdGVfcHVzaChjdHh0LCBvcHMpOworCQlyZXQgPSBlbV9wdXNoKGN0eHQpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0yMTYyLDEzICsyNDcwLDEwIEBACiAJcmMgPSBlbXVsYXRvcl9kb190YXNrX3N3aXRjaChjdHh0LCBvcHMsIHRzc19zZWxlY3RvciwgcmVhc29uLAogCQkJCSAgICAgaGFzX2Vycm9yX2NvZGUsIGVycm9yX2NvZGUpOwogCi0JaWYgKHJjID09IFg4NkVNVUxfQ09OVElOVUUpIHsKLQkJcmMgPSB3cml0ZWJhY2soY3R4dCwgb3BzKTsKLQkJaWYgKHJjID09IFg4NkVNVUxfQ09OVElOVUUpCi0JCQljdHh0LT5laXAgPSBjLT5laXA7Ci0JfQorCWlmIChyYyA9PSBYODZFTVVMX0NPTlRJTlVFKQorCQljdHh0LT5laXAgPSBjLT5laXA7CiAKLQlyZXR1cm4gKHJjID09IFg4NkVNVUxfVU5IQU5ETEVBQkxFKSA/IC0xIDogMDsKKwlyZXR1cm4gKHJjID09IFg4NkVNVUxfVU5IQU5ETEVBQkxFKSA/IEVNVUxBVElPTl9GQUlMRUQgOiBFTVVMQVRJT05fT0s7CiB9CiAKIHN0YXRpYyB2b2lkIHN0cmluZ19hZGRyX2luYyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgdW5zaWduZWQgc2VnLApAQCAtMjE4MiwxMiArMjQ4Nyw2IEBACiAJb3AtPmFkZHIubWVtLnNlZyA9IHNlZzsKIH0KIAotc3RhdGljIGludCBlbV9wdXNoKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQotewotCWVtdWxhdGVfcHVzaChjdHh0LCBjdHh0LT5vcHMpOwotCXJldHVybiBYODZFTVVMX0NPTlRJTlVFOwotfQotCiBzdGF0aWMgaW50IGVtX2RhcyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKIHsKIAlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKQEAgLTIyMzQsNyArMjUzMyw3IEBACiAJdWxvbmcgb2xkX2VpcDsKIAlpbnQgcmM7CiAKLQlvbGRfY3MgPSBjdHh0LT5vcHMtPmdldF9zZWdtZW50X3NlbGVjdG9yKFZDUFVfU1JFR19DUywgY3R4dC0+dmNwdSk7CisJb2xkX2NzID0gZ2V0X3NlZ21lbnRfc2VsZWN0b3IoY3R4dCwgVkNQVV9TUkVHX0NTKTsKIAlvbGRfZWlwID0gYy0+ZWlwOwogCiAJbWVtY3B5KCZzZWwsIGMtPnNyYy52YWxwdHIgKyBjLT5vcF9ieXRlcywgMik7CkBAIC0yMjQ1LDIwICsyNTQ0LDEyIEBACiAJbWVtY3B5KCZjLT5laXAsIGMtPnNyYy52YWxwdHIsIGMtPm9wX2J5dGVzKTsKIAogCWMtPnNyYy52YWwgPSBvbGRfY3M7Ci0JZW11bGF0ZV9wdXNoKGN0eHQsIGN0eHQtPm9wcyk7Ci0JcmMgPSB3cml0ZWJhY2soY3R4dCwgY3R4dC0+b3BzKTsKKwlyYyA9IGVtX3B1c2goY3R4dCk7CiAJaWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCXJldHVybiByYzsKIAogCWMtPnNyYy52YWwgPSBvbGRfZWlwOwotCWVtdWxhdGVfcHVzaChjdHh0LCBjdHh0LT5vcHMpOwotCXJjID0gd3JpdGViYWNrKGN0eHQsIGN0eHQtPm9wcyk7Ci0JaWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpCi0JCXJldHVybiByYzsKLQotCWMtPmRzdC50eXBlID0gT1BfTk9ORTsKLQotCXJldHVybiBYODZFTVVMX0NPTlRJTlVFOworCXJldHVybiBlbV9wdXNoKGN0eHQpOwogfQogCiBzdGF0aWMgaW50IGVtX3JldF9uZWFyX2ltbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKQEAgLTIyNjksMTMgKzI1NjAsNzkgQEAKIAljLT5kc3QudHlwZSA9IE9QX1JFRzsKIAljLT5kc3QuYWRkci5yZWcgPSAmYy0+ZWlwOwogCWMtPmRzdC5ieXRlcyA9IGMtPm9wX2J5dGVzOwotCXJjID0gZW11bGF0ZV9wb3AoY3R4dCwgY3R4dC0+b3BzLCAmYy0+ZHN0LnZhbCwgYy0+b3BfYnl0ZXMpOworCXJjID0gZW11bGF0ZV9wb3AoY3R4dCwgJmMtPmRzdC52YWwsIGMtPm9wX2J5dGVzKTsKIAlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJcmV0dXJuIHJjOwogCXJlZ2lzdGVyX2FkZHJlc3NfaW5jcmVtZW50KGMsICZjLT5yZWdzW1ZDUFVfUkVHU19SU1BdLCBjLT5zcmMudmFsKTsKIAlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKIH0KIAorc3RhdGljIGludCBlbV9hZGQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CisKKwllbXVsYXRlXzJvcF9TcmNWKCJhZGQiLCBjLT5zcmMsIGMtPmRzdCwgY3R4dC0+ZWZsYWdzKTsKKwlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKK30KKworc3RhdGljIGludCBlbV9vcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKwlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKKworCWVtdWxhdGVfMm9wX1NyY1YoIm9yIiwgYy0+c3JjLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7CisJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7Cit9CisKK3N0YXRpYyBpbnQgZW1fYWRjKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOworCisJZW11bGF0ZV8yb3BfU3JjVigiYWRjIiwgYy0+c3JjLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7CisJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7Cit9CisKK3N0YXRpYyBpbnQgZW1fc2JiKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOworCisJZW11bGF0ZV8yb3BfU3JjVigic2JiIiwgYy0+c3JjLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7CisJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7Cit9CisKK3N0YXRpYyBpbnQgZW1fYW5kKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOworCisJZW11bGF0ZV8yb3BfU3JjVigiYW5kIiwgYy0+c3JjLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7CisJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7Cit9CisKK3N0YXRpYyBpbnQgZW1fc3ViKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOworCisJZW11bGF0ZV8yb3BfU3JjVigic3ViIiwgYy0+c3JjLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7CisJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7Cit9CisKK3N0YXRpYyBpbnQgZW1feG9yKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOworCisJZW11bGF0ZV8yb3BfU3JjVigieG9yIiwgYy0+c3JjLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7CisJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7Cit9CisKK3N0YXRpYyBpbnQgZW1fY21wKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOworCisJZW11bGF0ZV8yb3BfU3JjVigiY21wIiwgYy0+c3JjLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7CisJLyogRGlzYWJsZSB3cml0ZWJhY2suICovCisJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOworCXJldHVybiBYODZFTVVMX0NPTlRJTlVFOworfQorCiBzdGF0aWMgaW50IGVtX2ltdWwoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCiB7CiAJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CkBAIC0yMzA2LDEzICsyNjYzLDEwIEBACiAKIHN0YXRpYyBpbnQgZW1fcmR0c2Moc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCiB7Ci0JdW5zaWduZWQgY3BsID0gY3R4dC0+b3BzLT5jcGwoY3R4dC0+dmNwdSk7CiAJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CiAJdTY0IHRzYyA9IDA7CiAKLQlpZiAoY3BsID4gMCAmJiAoY3R4dC0+b3BzLT5nZXRfY3IoNCwgY3R4dC0+dmNwdSkgJiBYODZfQ1I0X1RTRCkpCi0JCXJldHVybiBlbXVsYXRlX2dwKGN0eHQsIDApOwotCWN0eHQtPm9wcy0+Z2V0X21zcihjdHh0LT52Y3B1LCBNU1JfSUEzMl9UU0MsICZ0c2MpOworCWN0eHQtPm9wcy0+Z2V0X21zcihjdHh0LCBNU1JfSUEzMl9UU0MsICZ0c2MpOwogCWMtPnJlZ3NbVkNQVV9SRUdTX1JBWF0gPSAodTMyKXRzYzsKIAljLT5yZWdzW1ZDUFVfUkVHU19SRFhdID0gdHNjID4+IDMyOwogCXJldHVybiBYODZFTVVMX0NPTlRJTlVFOwpAQCAtMjMyNSwyMiArMjY3OSwzNzUgQEAKIAlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKIH0KIAorc3RhdGljIGludCBlbV9tb3ZkcXUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CisJbWVtY3B5KCZjLT5kc3QudmVjX3ZhbCwgJmMtPnNyYy52ZWNfdmFsLCBjLT5vcF9ieXRlcyk7CisJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7Cit9CisKK3N0YXRpYyBpbnQgZW1faW52bHBnKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOworCWludCByYzsKKwl1bG9uZyBsaW5lYXI7CisKKwlyYyA9IGxpbmVhcml6ZShjdHh0LCBjLT5zcmMuYWRkci5tZW0sIDEsIGZhbHNlLCAmbGluZWFyKTsKKwlpZiAocmMgPT0gWDg2RU1VTF9DT05USU5VRSkKKwkJY3R4dC0+b3BzLT5pbnZscGcoY3R4dCwgbGluZWFyKTsKKwkvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi8KKwljLT5kc3QudHlwZSA9IE9QX05PTkU7CisJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7Cit9CisKK3N0YXRpYyBpbnQgZW1fY2x0cyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKwl1bG9uZyBjcjA7CisKKwljcjAgPSBjdHh0LT5vcHMtPmdldF9jcihjdHh0LCAwKTsKKwljcjAgJj0gflg4Nl9DUjBfVFM7CisJY3R4dC0+b3BzLT5zZXRfY3IoY3R4dCwgMCwgY3IwKTsKKwlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKK30KKworc3RhdGljIGludCBlbV92bWNhbGwoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CisJaW50IHJjOworCisJaWYgKGMtPm1vZHJtX21vZCAhPSAzIHx8IGMtPm1vZHJtX3JtICE9IDEpCisJCXJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKKworCXJjID0gY3R4dC0+b3BzLT5maXhfaHlwZXJjYWxsKGN0eHQpOworCWlmIChyYyAhPSBYODZFTVVMX0NPTlRJTlVFKQorCQlyZXR1cm4gcmM7CisKKwkvKiBMZXQgdGhlIHByb2Nlc3NvciByZS1leGVjdXRlIHRoZSBmaXhlZCBoeXBlcmNhbGwgKi8KKwljLT5laXAgPSBjdHh0LT5laXA7CisJLyogRGlzYWJsZSB3cml0ZWJhY2suICovCisJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOworCXJldHVybiBYODZFTVVMX0NPTlRJTlVFOworfQorCitzdGF0aWMgaW50IGVtX2xnZHQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CisJc3RydWN0IGRlc2NfcHRyIGRlc2NfcHRyOworCWludCByYzsKKworCXJjID0gcmVhZF9kZXNjcmlwdG9yKGN0eHQsIGMtPnNyYy5hZGRyLm1lbSwKKwkJCSAgICAgJmRlc2NfcHRyLnNpemUsICZkZXNjX3B0ci5hZGRyZXNzLAorCQkJICAgICBjLT5vcF9ieXRlcyk7CisJaWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpCisJCXJldHVybiByYzsKKwljdHh0LT5vcHMtPnNldF9nZHQoY3R4dCwgJmRlc2NfcHRyKTsKKwkvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi8KKwljLT5kc3QudHlwZSA9IE9QX05PTkU7CisJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7Cit9CisKK3N0YXRpYyBpbnQgZW1fdm1tY2FsbChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKwlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKKwlpbnQgcmM7CisKKwlyYyA9IGN0eHQtPm9wcy0+Zml4X2h5cGVyY2FsbChjdHh0KTsKKworCS8qIERpc2FibGUgd3JpdGViYWNrLiAqLworCWMtPmRzdC50eXBlID0gT1BfTk9ORTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgZW1fbGlkdChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKwlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKKwlzdHJ1Y3QgZGVzY19wdHIgZGVzY19wdHI7CisJaW50IHJjOworCisJcmMgPSByZWFkX2Rlc2NyaXB0b3IoY3R4dCwgYy0+c3JjLmFkZHIubWVtLAorCQkJICAgICAmZGVzY19wdHIuc2l6ZSwgJmRlc2NfcHRyLmFkZHJlc3MsCisJCQkgICAgIGMtPm9wX2J5dGVzKTsKKwlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkKKwkJcmV0dXJuIHJjOworCWN0eHQtPm9wcy0+c2V0X2lkdChjdHh0LCAmZGVzY19wdHIpOworCS8qIERpc2FibGUgd3JpdGViYWNrLiAqLworCWMtPmRzdC50eXBlID0gT1BfTk9ORTsKKwlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKK30KKworc3RhdGljIGludCBlbV9zbXN3KHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOworCisJYy0+ZHN0LmJ5dGVzID0gMjsKKwljLT5kc3QudmFsID0gY3R4dC0+b3BzLT5nZXRfY3IoY3R4dCwgMCk7CisJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7Cit9CisKK3N0YXRpYyBpbnQgZW1fbG1zdyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKwlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKKwljdHh0LT5vcHMtPnNldF9jcihjdHh0LCAwLCAoY3R4dC0+b3BzLT5nZXRfY3IoY3R4dCwgMCkgJiB+MHgwZXVsKQorCQkJICB8IChjLT5zcmMudmFsICYgMHgwZikpOworCWMtPmRzdC50eXBlID0gT1BfTk9ORTsKKwlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKK30KKworc3RhdGljIGJvb2wgdmFsaWRfY3IoaW50IG5yKQoreworCXN3aXRjaCAobnIpIHsKKwljYXNlIDA6CisJY2FzZSAyIC4uLiA0OgorCWNhc2UgODoKKwkJcmV0dXJuIHRydWU7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworc3RhdGljIGludCBjaGVja19jcl9yZWFkKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOworCisJaWYgKCF2YWxpZF9jcihjLT5tb2RybV9yZWcpKQorCQlyZXR1cm4gZW11bGF0ZV91ZChjdHh0KTsKKworCXJldHVybiBYODZFTVVMX0NPTlRJTlVFOworfQorCitzdGF0aWMgaW50IGNoZWNrX2NyX3dyaXRlKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOworCXU2NCBuZXdfdmFsID0gYy0+c3JjLnZhbDY0OworCWludCBjciA9IGMtPm1vZHJtX3JlZzsKKwl1NjQgZWZlciA9IDA7CisKKwlzdGF0aWMgdTY0IGNyX3Jlc2VydmVkX2JpdHNbXSA9IHsKKwkJMHhmZmZmZmZmZjAwMDAwMDAwVUxMLAorCQkwLCAwLCAwLCAvKiBDUjMgY2hlY2tlZCBsYXRlciAqLworCQlDUjRfUkVTRVJWRURfQklUUywKKwkJMCwgMCwgMCwKKwkJQ1I4X1JFU0VSVkVEX0JJVFMsCisJfTsKKworCWlmICghdmFsaWRfY3IoY3IpKQorCQlyZXR1cm4gZW11bGF0ZV91ZChjdHh0KTsKKworCWlmIChuZXdfdmFsICYgY3JfcmVzZXJ2ZWRfYml0c1tjcl0pCisJCXJldHVybiBlbXVsYXRlX2dwKGN0eHQsIDApOworCisJc3dpdGNoIChjcikgeworCWNhc2UgMDogeworCQl1NjQgY3I0OworCQlpZiAoKChuZXdfdmFsICYgWDg2X0NSMF9QRykgJiYgIShuZXdfdmFsICYgWDg2X0NSMF9QRSkpIHx8CisJCSAgICAoKG5ld192YWwgJiBYODZfQ1IwX05XKSAmJiAhKG5ld192YWwgJiBYODZfQ1IwX0NEKSkpCisJCQlyZXR1cm4gZW11bGF0ZV9ncChjdHh0LCAwKTsKKworCQljcjQgPSBjdHh0LT5vcHMtPmdldF9jcihjdHh0LCA0KTsKKwkJY3R4dC0+b3BzLT5nZXRfbXNyKGN0eHQsIE1TUl9FRkVSLCAmZWZlcik7CisKKwkJaWYgKChuZXdfdmFsICYgWDg2X0NSMF9QRykgJiYgKGVmZXIgJiBFRkVSX0xNRSkgJiYKKwkJICAgICEoY3I0ICYgWDg2X0NSNF9QQUUpKQorCQkJcmV0dXJuIGVtdWxhdGVfZ3AoY3R4dCwgMCk7CisKKwkJYnJlYWs7CisJCX0KKwljYXNlIDM6IHsKKwkJdTY0IHJzdmQgPSAwOworCisJCWN0eHQtPm9wcy0+Z2V0X21zcihjdHh0LCBNU1JfRUZFUiwgJmVmZXIpOworCQlpZiAoZWZlciAmIEVGRVJfTE1BKQorCQkJcnN2ZCA9IENSM19MX01PREVfUkVTRVJWRURfQklUUzsKKwkJZWxzZSBpZiAoY3R4dC0+b3BzLT5nZXRfY3IoY3R4dCwgNCkgJiBYODZfQ1I0X1BBRSkKKwkJCXJzdmQgPSBDUjNfUEFFX1JFU0VSVkVEX0JJVFM7CisJCWVsc2UgaWYgKGN0eHQtPm9wcy0+Z2V0X2NyKGN0eHQsIDApICYgWDg2X0NSMF9QRykKKwkJCXJzdmQgPSBDUjNfTk9OUEFFX1JFU0VSVkVEX0JJVFM7CisKKwkJaWYgKG5ld192YWwgJiByc3ZkKQorCQkJcmV0dXJuIGVtdWxhdGVfZ3AoY3R4dCwgMCk7CisKKwkJYnJlYWs7CisJCX0KKwljYXNlIDQ6IHsKKwkJdTY0IGNyNDsKKworCQljcjQgPSBjdHh0LT5vcHMtPmdldF9jcihjdHh0LCA0KTsKKwkJY3R4dC0+b3BzLT5nZXRfbXNyKGN0eHQsIE1TUl9FRkVSLCAmZWZlcik7CisKKwkJaWYgKChlZmVyICYgRUZFUl9MTUEpICYmICEobmV3X3ZhbCAmIFg4Nl9DUjRfUEFFKSkKKwkJCXJldHVybiBlbXVsYXRlX2dwKGN0eHQsIDApOworCisJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfZHI3X2dkKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworCXVuc2lnbmVkIGxvbmcgZHI3OworCisJY3R4dC0+b3BzLT5nZXRfZHIoY3R4dCwgNywgJmRyNyk7CisKKwkvKiBDaGVjayBpZiBEUjcuR2xvYmFsX0VuYWJsZSBpcyBzZXQgKi8KKwlyZXR1cm4gZHI3ICYgKDEgPDwgMTMpOworfQorCitzdGF0aWMgaW50IGNoZWNrX2RyX3JlYWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CisJaW50IGRyID0gYy0+bW9kcm1fcmVnOworCXU2NCBjcjQ7CisKKwlpZiAoZHIgPiA3KQorCQlyZXR1cm4gZW11bGF0ZV91ZChjdHh0KTsKKworCWNyNCA9IGN0eHQtPm9wcy0+Z2V0X2NyKGN0eHQsIDQpOworCWlmICgoY3I0ICYgWDg2X0NSNF9ERSkgJiYgKGRyID09IDQgfHwgZHIgPT0gNSkpCisJCXJldHVybiBlbXVsYXRlX3VkKGN0eHQpOworCisJaWYgKGNoZWNrX2RyN19nZChjdHh0KSkKKwkJcmV0dXJuIGVtdWxhdGVfZGIoY3R4dCk7CisKKwlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKK30KKworc3RhdGljIGludCBjaGVja19kcl93cml0ZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKwlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKKwl1NjQgbmV3X3ZhbCA9IGMtPnNyYy52YWw2NDsKKwlpbnQgZHIgPSBjLT5tb2RybV9yZWc7CisKKwlpZiAoKGRyID09IDYgfHwgZHIgPT0gNykgJiYgKG5ld192YWwgJiAweGZmZmZmZmZmMDAwMDAwMDBVTEwpKQorCQlyZXR1cm4gZW11bGF0ZV9ncChjdHh0LCAwKTsKKworCXJldHVybiBjaGVja19kcl9yZWFkKGN0eHQpOworfQorCitzdGF0aWMgaW50IGNoZWNrX3N2bWUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisJdTY0IGVmZXI7CisKKwljdHh0LT5vcHMtPmdldF9tc3IoY3R4dCwgTVNSX0VGRVIsICZlZmVyKTsKKworCWlmICghKGVmZXIgJiBFRkVSX1NWTUUpKQorCQlyZXR1cm4gZW11bGF0ZV91ZChjdHh0KTsKKworCXJldHVybiBYODZFTVVMX0NPTlRJTlVFOworfQorCitzdGF0aWMgaW50IGNoZWNrX3N2bWVfcGEoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisJdTY0IHJheCA9IGN0eHQtPmRlY29kZS5yZWdzW1ZDUFVfUkVHU19SQVhdOworCisJLyogVmFsaWQgcGh5c2ljYWwgYWRkcmVzcz8gKi8KKwlpZiAocmF4ICYgMHhmZmZmMDAwMDAwMDAwMDAwVUxMKQorCQlyZXR1cm4gZW11bGF0ZV9ncChjdHh0LCAwKTsKKworCXJldHVybiBjaGVja19zdm1lKGN0eHQpOworfQorCitzdGF0aWMgaW50IGNoZWNrX3JkdHNjKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworCXU2NCBjcjQgPSBjdHh0LT5vcHMtPmdldF9jcihjdHh0LCA0KTsKKworCWlmIChjcjQgJiBYODZfQ1I0X1RTRCAmJiBjdHh0LT5vcHMtPmNwbChjdHh0KSkKKwkJcmV0dXJuIGVtdWxhdGVfdWQoY3R4dCk7CisKKwlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKK30KKworc3RhdGljIGludCBjaGVja19yZHBtYyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKwl1NjQgY3I0ID0gY3R4dC0+b3BzLT5nZXRfY3IoY3R4dCwgNCk7CisJdTY0IHJjeCA9IGN0eHQtPmRlY29kZS5yZWdzW1ZDUFVfUkVHU19SQ1hdOworCisJaWYgKCghKGNyNCAmIFg4Nl9DUjRfUENFKSAmJiBjdHh0LT5vcHMtPmNwbChjdHh0KSkgfHwKKwkgICAgKHJjeCA+IDMpKQorCQlyZXR1cm4gZW11bGF0ZV9ncChjdHh0LCAwKTsKKworCXJldHVybiBYODZFTVVMX0NPTlRJTlVFOworfQorCitzdGF0aWMgaW50IGNoZWNrX3Blcm1faW4oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CisKKwljLT5kc3QuYnl0ZXMgPSBtaW4oYy0+ZHN0LmJ5dGVzLCA0dSk7CisJaWYgKCFlbXVsYXRvcl9pb19wZXJtaXRlZChjdHh0LCBjdHh0LT5vcHMsIGMtPnNyYy52YWwsIGMtPmRzdC5ieXRlcykpCisJCXJldHVybiBlbXVsYXRlX2dwKGN0eHQsIDApOworCisJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfcGVybV9vdXQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CisKKwljLT5zcmMuYnl0ZXMgPSBtaW4oYy0+c3JjLmJ5dGVzLCA0dSk7CisJaWYgKCFlbXVsYXRvcl9pb19wZXJtaXRlZChjdHh0LCBjdHh0LT5vcHMsIGMtPmRzdC52YWwsIGMtPnNyYy5ieXRlcykpCisJCXJldHVybiBlbXVsYXRlX2dwKGN0eHQsIDApOworCisJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7Cit9CisKICNkZWZpbmUgRChfeSkgeyAuZmxhZ3MgPSAoX3kpIH0KKyNkZWZpbmUgREkoX3ksIF9pKSB7IC5mbGFncyA9IChfeSksIC5pbnRlcmNlcHQgPSB4ODZfaW50ZXJjZXB0XyMjX2kgfQorI2RlZmluZSBESVAoX3ksIF9pLCBfcCkgeyAuZmxhZ3MgPSAoX3kpLCAuaW50ZXJjZXB0ID0geDg2X2ludGVyY2VwdF8jI19pLCBcCisJCSAgICAgIC5jaGVja19wZXJtID0gKF9wKSB9CiAjZGVmaW5lIE4gICAgRCgwKQorI2RlZmluZSBFWFQoX2YsIF9lKSB7IC5mbGFncyA9ICgoX2YpIHwgUk1FeHQpLCAudS5ncm91cCA9IChfZSkgfQogI2RlZmluZSBHKF9mLCBfZykgeyAuZmxhZ3MgPSAoKF9mKSB8IEdyb3VwKSwgLnUuZ3JvdXAgPSAoX2cpIH0KLSNkZWZpbmUgR0QoX2YsIF9nKSB7IC5mbGFncyA9ICgoX2YpIHwgR3JvdXAgfCBHcm91cER1YWwpLCAudS5nZHVhbCA9IChfZykgfQorI2RlZmluZSBHRChfZiwgX2cpIHsgLmZsYWdzID0gKChfZikgfCBHcm91cER1YWwpLCAudS5nZHVhbCA9IChfZykgfQogI2RlZmluZSBJKF9mLCBfZSkgeyAuZmxhZ3MgPSAoX2YpLCAudS5leGVjdXRlID0gKF9lKSB9CisjZGVmaW5lIElJKF9mLCBfZSwgX2kpIFwKKwl7IC5mbGFncyA9IChfZiksIC51LmV4ZWN1dGUgPSAoX2UpLCAuaW50ZXJjZXB0ID0geDg2X2ludGVyY2VwdF8jI19pIH0KKyNkZWZpbmUgSUlQKF9mLCBfZSwgX2ksIF9wKSBcCisJeyAuZmxhZ3MgPSAoX2YpLCAudS5leGVjdXRlID0gKF9lKSwgLmludGVyY2VwdCA9IHg4Nl9pbnRlcmNlcHRfIyNfaSwgXAorCSAgLmNoZWNrX3Blcm0gPSAoX3ApIH0KKyNkZWZpbmUgR1AoX2YsIF9nKSB7IC5mbGFncyA9ICgoX2YpIHwgUHJlZml4KSwgLnUuZ3ByZWZpeCA9IChfZykgfQogCiAjZGVmaW5lIEQyYnYoX2YpICAgICAgRCgoX2YpIHwgQnl0ZU9wKSwgRChfZikKKyNkZWZpbmUgRDJidklQKF9mLCBfaSwgX3ApIERJUCgoX2YpIHwgQnl0ZU9wLCBfaSwgX3ApLCBESVAoX2YsIF9pLCBfcCkKICNkZWZpbmUgSTJidihfZiwgX2UpICBJKChfZikgfCBCeXRlT3AsIF9lKSwgSShfZiwgX2UpCiAKLSNkZWZpbmUgRDZBTFUoX2YpIEQyYnYoKF9mKSB8IERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNKSwJCQlcCi0JCUQyYnYoKChfZikgfCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSkgJiB+TG9jayksCQlcCi0JCUQyYnYoKChfZikgJiB+TG9jaykgfCBEc3RBY2MgfCBTcmNJbW0pCisjZGVmaW5lIEk2QUxVKF9mLCBfZSkgSTJidigoX2YpIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sIF9lKSwJCVwKKwkJSTJidigoKF9mKSB8IERzdFJlZyB8IFNyY01lbSB8IE1vZFJNKSAmIH5Mb2NrLCBfZSksCVwKKwkJSTJidigoKF9mKSAmIH5Mb2NrKSB8IERzdEFjYyB8IFNyY0ltbSwgX2UpCiAKK3N0YXRpYyBzdHJ1Y3Qgb3Bjb2RlIGdyb3VwN19ybTFbXSA9IHsKKwlESShTcmNOb25lIHwgTW9kUk0gfCBQcml2LCBtb25pdG9yKSwKKwlESShTcmNOb25lIHwgTW9kUk0gfCBQcml2LCBtd2FpdCksCisJTiwgTiwgTiwgTiwgTiwgTiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb3Bjb2RlIGdyb3VwN19ybTNbXSA9IHsKKwlESVAoU3JjTm9uZSB8IE1vZFJNIHwgUHJvdCB8IFByaXYsIHZtcnVuLCAgIGNoZWNrX3N2bWVfcGEpLAorCUlJKFNyY05vbmUgfCBNb2RSTSB8IFByb3QgfCBWZW5kb3JTcGVjaWZpYywgZW1fdm1tY2FsbCwgdm1tY2FsbCksCisJRElQKFNyY05vbmUgfCBNb2RSTSB8IFByb3QgfCBQcml2LCB2bWxvYWQsICBjaGVja19zdm1lX3BhKSwKKwlESVAoU3JjTm9uZSB8IE1vZFJNIHwgUHJvdCB8IFByaXYsIHZtc2F2ZSwgIGNoZWNrX3N2bWVfcGEpLAorCURJUChTcmNOb25lIHwgTW9kUk0gfCBQcm90IHwgUHJpdiwgc3RnaSwgICAgY2hlY2tfc3ZtZSksCisJRElQKFNyY05vbmUgfCBNb2RSTSB8IFByb3QgfCBQcml2LCBjbGdpLCAgICBjaGVja19zdm1lKSwKKwlESVAoU3JjTm9uZSB8IE1vZFJNIHwgUHJvdCB8IFByaXYsIHNraW5pdCwgIGNoZWNrX3N2bWUpLAorCURJUChTcmNOb25lIHwgTW9kUk0gfCBQcm90IHwgUHJpdiwgaW52bHBnYSwgY2hlY2tfc3ZtZSksCit9OworCitzdGF0aWMgc3RydWN0IG9wY29kZSBncm91cDdfcm03W10gPSB7CisJTiwKKwlESVAoU3JjTm9uZSB8IE1vZFJNLCByZHRzY3AsIGNoZWNrX3JkdHNjKSwKKwlOLCBOLCBOLCBOLCBOLCBOLAorfTsKIAogc3RhdGljIHN0cnVjdCBvcGNvZGUgZ3JvdXAxW10gPSB7Ci0JWDcoRChMb2NrKSksIE4KKwlJKExvY2ssIGVtX2FkZCksCisJSShMb2NrLCBlbV9vciksCisJSShMb2NrLCBlbV9hZGMpLAorCUkoTG9jaywgZW1fc2JiKSwKKwlJKExvY2ssIGVtX2FuZCksCisJSShMb2NrLCBlbV9zdWIpLAorCUkoTG9jaywgZW1feG9yKSwKKwlJKDAsIGVtX2NtcCksCiB9OwogCiBzdGF0aWMgc3RydWN0IG9wY29kZSBncm91cDFBW10gPSB7CkBAIC0yMzY2LDE2ICszMDczLDI4IEBACiAJRChTcmNNZW0gfCBNb2RSTSB8IFN0YWNrKSwgTiwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgb3Bjb2RlIGdyb3VwNltdID0geworCURJKE1vZFJNIHwgUHJvdCwgICAgICAgIHNsZHQpLAorCURJKE1vZFJNIHwgUHJvdCwgICAgICAgIHN0ciksCisJREkoTW9kUk0gfCBQcm90IHwgUHJpdiwgbGxkdCksCisJREkoTW9kUk0gfCBQcm90IHwgUHJpdiwgbHRyKSwKKwlOLCBOLCBOLCBOLAorfTsKKwogc3RhdGljIHN0cnVjdCBncm91cF9kdWFsIGdyb3VwNyA9IHsgewotCU4sIE4sIEQoTW9kUk0gfCBTcmNNZW0gfCBQcml2KSwgRChNb2RSTSB8IFNyY01lbSB8IFByaXYpLAotCUQoU3JjTm9uZSB8IE1vZFJNIHwgRHN0TWVtIHwgTW92KSwgTiwKLQlEKFNyY01lbTE2IHwgTW9kUk0gfCBNb3YgfCBQcml2KSwKLQlEKFNyY01lbSB8IE1vZFJNIHwgQnl0ZU9wIHwgUHJpdiB8IE5vQWNjZXNzKSwKKwlESShNb2RSTSB8IE1vdiB8IERzdE1lbSB8IFByaXYsIHNnZHQpLAorCURJKE1vZFJNIHwgTW92IHwgRHN0TWVtIHwgUHJpdiwgc2lkdCksCisJSUkoTW9kUk0gfCBTcmNNZW0gfCBQcml2LCBlbV9sZ2R0LCBsZ2R0KSwKKwlJSShNb2RSTSB8IFNyY01lbSB8IFByaXYsIGVtX2xpZHQsIGxpZHQpLAorCUlJKFNyY05vbmUgfCBNb2RSTSB8IERzdE1lbSB8IE1vdiwgZW1fc21zdywgc21zdyksIE4sCisJSUkoU3JjTWVtMTYgfCBNb2RSTSB8IE1vdiB8IFByaXYsIGVtX2xtc3csIGxtc3cpLAorCUlJKFNyY01lbSB8IE1vZFJNIHwgQnl0ZU9wIHwgUHJpdiB8IE5vQWNjZXNzLCBlbV9pbnZscGcsIGludmxwZyksCiB9LCB7Ci0JRChTcmNOb25lIHwgTW9kUk0gfCBQcml2IHwgVmVuZG9yU3BlY2lmaWMpLCBOLAotCU4sIEQoU3JjTm9uZSB8IE1vZFJNIHwgUHJpdiB8IFZlbmRvclNwZWNpZmljKSwKLQlEKFNyY05vbmUgfCBNb2RSTSB8IERzdE1lbSB8IE1vdiksIE4sCi0JRChTcmNNZW0xNiB8IE1vZFJNIHwgTW92IHwgUHJpdiksIE4sCisJSShTcmNOb25lIHwgTW9kUk0gfCBQcml2IHwgVmVuZG9yU3BlY2lmaWMsIGVtX3ZtY2FsbCksCisJRVhUKDAsIGdyb3VwN19ybTEpLAorCU4sIEVYVCgwLCBncm91cDdfcm0zKSwKKwlJSShTcmNOb25lIHwgTW9kUk0gfCBEc3RNZW0gfCBNb3YsIGVtX3Ntc3csIHNtc3cpLCBOLAorCUlJKFNyY01lbTE2IHwgTW9kUk0gfCBNb3YgfCBQcml2LCBlbV9sbXN3LCBsbXN3KSwgRVhUKDAsIGdyb3VwN19ybTcpLAogfSB9OwogCiBzdGF0aWMgc3RydWN0IG9wY29kZSBncm91cDhbXSA9IHsKQEAgLTIzOTQsMzUgKzMxMTMsNDAgQEAKIAlJKERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNIHwgTW92LCBlbV9tb3YpLCBYNyhEKFVuZGVmaW5lZCkpLAogfTsKIAorc3RhdGljIHN0cnVjdCBncHJlZml4IHBmeF8wZl82Zl8wZl83ZiA9IHsKKwlOLCBOLCBOLCBJKFNzZSwgZW1fbW92ZHF1KSwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgb3Bjb2RlIG9wY29kZV90YWJsZVsyNTZdID0gewogCS8qIDB4MDAgLSAweDA3ICovCi0JRDZBTFUoTG9jayksCisJSTZBTFUoTG9jaywgZW1fYWRkKSwKIAlEKEltcGxpY2l0T3BzIHwgU3RhY2sgfCBObzY0KSwgRChJbXBsaWNpdE9wcyB8IFN0YWNrIHwgTm82NCksCiAJLyogMHgwOCAtIDB4MEYgKi8KLQlENkFMVShMb2NrKSwKKwlJNkFMVShMb2NrLCBlbV9vciksCiAJRChJbXBsaWNpdE9wcyB8IFN0YWNrIHwgTm82NCksIE4sCiAJLyogMHgxMCAtIDB4MTcgKi8KLQlENkFMVShMb2NrKSwKKwlJNkFMVShMb2NrLCBlbV9hZGMpLAogCUQoSW1wbGljaXRPcHMgfCBTdGFjayB8IE5vNjQpLCBEKEltcGxpY2l0T3BzIHwgU3RhY2sgfCBObzY0KSwKIAkvKiAweDE4IC0gMHgxRiAqLwotCUQ2QUxVKExvY2spLAorCUk2QUxVKExvY2ssIGVtX3NiYiksCiAJRChJbXBsaWNpdE9wcyB8IFN0YWNrIHwgTm82NCksIEQoSW1wbGljaXRPcHMgfCBTdGFjayB8IE5vNjQpLAogCS8qIDB4MjAgLSAweDI3ICovCi0JRDZBTFUoTG9jayksIE4sIE4sCisJSTZBTFUoTG9jaywgZW1fYW5kKSwgTiwgTiwKIAkvKiAweDI4IC0gMHgyRiAqLwotCUQ2QUxVKExvY2spLCBOLCBJKEJ5dGVPcCB8IERzdEFjYyB8IE5vNjQsIGVtX2RhcyksCisJSTZBTFUoTG9jaywgZW1fc3ViKSwgTiwgSShCeXRlT3AgfCBEc3RBY2MgfCBObzY0LCBlbV9kYXMpLAogCS8qIDB4MzAgLSAweDM3ICovCi0JRDZBTFUoTG9jayksIE4sIE4sCisJSTZBTFUoTG9jaywgZW1feG9yKSwgTiwgTiwKIAkvKiAweDM4IC0gMHgzRiAqLwotCUQ2QUxVKDApLCBOLCBOLAorCUk2QUxVKDAsIGVtX2NtcCksIE4sIE4sCiAJLyogMHg0MCAtIDB4NEYgKi8KIAlYMTYoRChEc3RSZWcpKSwKIAkvKiAweDUwIC0gMHg1NyAqLwogCVg4KEkoU3JjUmVnIHwgU3RhY2ssIGVtX3B1c2gpKSwKIAkvKiAweDU4IC0gMHg1RiAqLwotCVg4KEQoRHN0UmVnIHwgU3RhY2spKSwKKwlYOChJKERzdFJlZyB8IFN0YWNrLCBlbV9wb3ApKSwKIAkvKiAweDYwIC0gMHg2NyAqLwotCUQoSW1wbGljaXRPcHMgfCBTdGFjayB8IE5vNjQpLCBEKEltcGxpY2l0T3BzIHwgU3RhY2sgfCBObzY0KSwKKwlJKEltcGxpY2l0T3BzIHwgU3RhY2sgfCBObzY0LCBlbV9wdXNoYSksCisJSShJbXBsaWNpdE9wcyB8IFN0YWNrIHwgTm82NCwgZW1fcG9wYSksCiAJTiwgRChEc3RSZWcgfCBTcmNNZW0zMiB8IE1vZFJNIHwgTW92KSAvKiBtb3ZzeGQgKHg4Ni82NCkgKi8gLAogCU4sIE4sIE4sIE4sCiAJLyogMHg2OCAtIDB4NkYgKi8KQEAgLTI0MzAsOCArMzE1NCw4IEBACiAJSShEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSB8IFNyYzJJbW0sIGVtX2ltdWxfM29wKSwKIAlJKFNyY0ltbUJ5dGUgfCBNb3YgfCBTdGFjaywgZW1fcHVzaCksCiAJSShEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSB8IFNyYzJJbW1CeXRlLCBlbV9pbXVsXzNvcCksCi0JRDJidihEc3RESSB8IE1vdiB8IFN0cmluZyksIC8qIGluc2IsIGluc3cvaW5zZCAqLwotCUQyYnYoU3JjU0kgfCBJbXBsaWNpdE9wcyB8IFN0cmluZyksIC8qIG91dHNiLCBvdXRzdy9vdXRzZCAqLworCUQyYnZJUChEc3RESSB8IE1vdiB8IFN0cmluZywgaW5zLCBjaGVja19wZXJtX2luKSwgLyogaW5zYiwgaW5zdy9pbnNkICovCisJRDJidklQKFNyY1NJIHwgSW1wbGljaXRPcHMgfCBTdHJpbmcsIG91dHMsIGNoZWNrX3Blcm1fb3V0KSwgLyogb3V0c2IsIG91dHN3L291dHNkICovCiAJLyogMHg3MCAtIDB4N0YgKi8KIAlYMTYoRChTcmNJbW1CeXRlKSksCiAJLyogMHg4MCAtIDB4ODcgKi8KQEAgLTI0NDYsMjEgKzMxNzAsMjIgQEAKIAlEKERzdE1lbSB8IFNyY05vbmUgfCBNb2RSTSB8IE1vdiksIEQoTW9kUk0gfCBTcmNNZW0gfCBOb0FjY2VzcyB8IERzdFJlZyksCiAJRChJbXBsaWNpdE9wcyB8IFNyY01lbTE2IHwgTW9kUk0pLCBHKDAsIGdyb3VwMUEpLAogCS8qIDB4OTAgLSAweDk3ICovCi0JWDgoRChTcmNBY2MgfCBEc3RSZWcpKSwKKwlESShTcmNBY2MgfCBEc3RSZWcsIHBhdXNlKSwgWDcoRChTcmNBY2MgfCBEc3RSZWcpKSwKIAkvKiAweDk4IC0gMHg5RiAqLwogCUQoRHN0QWNjIHwgU3JjTm9uZSksIEkoSW1wbGljaXRPcHMgfCBTcmNBY2MsIGVtX2N3ZCksCiAJSShTcmNJbW1GQWRkciB8IE5vNjQsIGVtX2NhbGxfZmFyKSwgTiwKLQlEKEltcGxpY2l0T3BzIHwgU3RhY2spLCBEKEltcGxpY2l0T3BzIHwgU3RhY2spLCBOLCBOLAorCUlJKEltcGxpY2l0T3BzIHwgU3RhY2ssIGVtX3B1c2hmLCBwdXNoZiksCisJSUkoSW1wbGljaXRPcHMgfCBTdGFjaywgZW1fcG9wZiwgcG9wZiksIE4sIE4sCiAJLyogMHhBMCAtIDB4QTcgKi8KIAlJMmJ2KERzdEFjYyB8IFNyY01lbSB8IE1vdiB8IE1lbUFicywgZW1fbW92KSwKIAlJMmJ2KERzdE1lbSB8IFNyY0FjYyB8IE1vdiB8IE1lbUFicywgZW1fbW92KSwKIAlJMmJ2KFNyY1NJIHwgRHN0REkgfCBNb3YgfCBTdHJpbmcsIGVtX21vdiksCi0JRDJidihTcmNTSSB8IERzdERJIHwgU3RyaW5nKSwKKwlJMmJ2KFNyY1NJIHwgRHN0REkgfCBTdHJpbmcsIGVtX2NtcCksCiAJLyogMHhBOCAtIDB4QUYgKi8KIAlEMmJ2KERzdEFjYyB8IFNyY0ltbSksCiAJSTJidihTcmNBY2MgfCBEc3RESSB8IE1vdiB8IFN0cmluZywgZW1fbW92KSwKIAlJMmJ2KFNyY1NJIHwgRHN0QWNjIHwgTW92IHwgU3RyaW5nLCBlbV9tb3YpLAotCUQyYnYoU3JjQWNjIHwgRHN0REkgfCBTdHJpbmcpLAorCUkyYnYoU3JjQWNjIHwgRHN0REkgfCBTdHJpbmcsIGVtX2NtcCksCiAJLyogMHhCMCAtIDB4QjcgKi8KIAlYOChJKEJ5dGVPcCB8IERzdFJlZyB8IFNyY0ltbSB8IE1vdiwgZW1fbW92KSksCiAJLyogMHhCOCAtIDB4QkYgKi8KQEAgLTI0NzMsNyArMzE5OCw4IEBACiAJRyhCeXRlT3AsIGdyb3VwMTEpLCBHKDAsIGdyb3VwMTEpLAogCS8qIDB4QzggLSAweENGICovCiAJTiwgTiwgTiwgRChJbXBsaWNpdE9wcyB8IFN0YWNrKSwKLQlEKEltcGxpY2l0T3BzKSwgRChTcmNJbW1CeXRlKSwgRChJbXBsaWNpdE9wcyB8IE5vNjQpLCBEKEltcGxpY2l0T3BzKSwKKwlEKEltcGxpY2l0T3BzKSwgREkoU3JjSW1tQnl0ZSwgaW50biksCisJRChJbXBsaWNpdE9wcyB8IE5vNjQpLCBESShJbXBsaWNpdE9wcywgaXJldCksCiAJLyogMHhEMCAtIDB4RDcgKi8KIAlEMmJ2KERzdE1lbSB8IFNyY09uZSB8IE1vZFJNKSwgRDJidihEc3RNZW0gfCBNb2RSTSksCiAJTiwgTiwgTiwgTiwKQEAgLTI0ODEsMTQgKzMyMDcsMTcgQEAKIAlOLCBOLCBOLCBOLCBOLCBOLCBOLCBOLAogCS8qIDB4RTAgLSAweEU3ICovCiAJWDQoRChTcmNJbW1CeXRlKSksCi0JRDJidihTcmNJbW1VQnl0ZSB8IERzdEFjYyksIEQyYnYoU3JjQWNjIHwgRHN0SW1tVUJ5dGUpLAorCUQyYnZJUChTcmNJbW1VQnl0ZSB8IERzdEFjYywgaW4sICBjaGVja19wZXJtX2luKSwKKwlEMmJ2SVAoU3JjQWNjIHwgRHN0SW1tVUJ5dGUsIG91dCwgY2hlY2tfcGVybV9vdXQpLAogCS8qIDB4RTggLSAweEVGICovCiAJRChTcmNJbW0gfCBTdGFjayksIEQoU3JjSW1tIHwgSW1wbGljaXRPcHMpLAogCUQoU3JjSW1tRkFkZHIgfCBObzY0KSwgRChTcmNJbW1CeXRlIHwgSW1wbGljaXRPcHMpLAotCUQyYnYoU3JjTm9uZSB8IERzdEFjYyksCUQyYnYoU3JjQWNjIHwgSW1wbGljaXRPcHMpLAorCUQyYnZJUChTcmNOb25lIHwgRHN0QWNjLCAgICAgaW4sICBjaGVja19wZXJtX2luKSwKKwlEMmJ2SVAoU3JjQWNjIHwgSW1wbGljaXRPcHMsIG91dCwgY2hlY2tfcGVybV9vdXQpLAogCS8qIDB4RjAgLSAweEY3ICovCi0JTiwgTiwgTiwgTiwKLQlEKEltcGxpY2l0T3BzIHwgUHJpdiksIEQoSW1wbGljaXRPcHMpLCBHKEJ5dGVPcCwgZ3JvdXAzKSwgRygwLCBncm91cDMpLAorCU4sIERJKEltcGxpY2l0T3BzLCBpY2VicCksIE4sIE4sCisJREkoSW1wbGljaXRPcHMgfCBQcml2LCBobHQpLCBEKEltcGxpY2l0T3BzKSwKKwlHKEJ5dGVPcCwgZ3JvdXAzKSwgRygwLCBncm91cDMpLAogCS8qIDB4RjggLSAweEZGICovCiAJRChJbXBsaWNpdE9wcyksIEQoSW1wbGljaXRPcHMpLCBEKEltcGxpY2l0T3BzKSwgRChJbXBsaWNpdE9wcyksCiAJRChJbXBsaWNpdE9wcyksIEQoSW1wbGljaXRPcHMpLCBHKDAsIGdyb3VwNCksIEcoMCwgZ3JvdXA1KSwKQEAgLTI0OTYsMjAgKzMyMjUsMjQgQEAKIAogc3RhdGljIHN0cnVjdCBvcGNvZGUgdHdvYnl0ZV90YWJsZVsyNTZdID0gewogCS8qIDB4MDAgLSAweDBGICovCi0JTiwgR0QoMCwgJmdyb3VwNyksIE4sIE4sCi0JTiwgRChJbXBsaWNpdE9wcyB8IFZlbmRvclNwZWNpZmljKSwgRChJbXBsaWNpdE9wcyB8IFByaXYpLCBOLAotCUQoSW1wbGljaXRPcHMgfCBQcml2KSwgRChJbXBsaWNpdE9wcyB8IFByaXYpLCBOLCBOLAorCUcoMCwgZ3JvdXA2KSwgR0QoMCwgJmdyb3VwNyksIE4sIE4sCisJTiwgRChJbXBsaWNpdE9wcyB8IFZlbmRvclNwZWNpZmljKSwgREkoSW1wbGljaXRPcHMgfCBQcml2LCBjbHRzKSwgTiwKKwlESShJbXBsaWNpdE9wcyB8IFByaXYsIGludmQpLCBESShJbXBsaWNpdE9wcyB8IFByaXYsIHdiaW52ZCksIE4sIE4sCiAJTiwgRChJbXBsaWNpdE9wcyB8IE1vZFJNKSwgTiwgTiwKIAkvKiAweDEwIC0gMHgxRiAqLwogCU4sIE4sIE4sIE4sIE4sIE4sIE4sIE4sIEQoSW1wbGljaXRPcHMgfCBNb2RSTSksIE4sIE4sIE4sIE4sIE4sIE4sIE4sCiAJLyogMHgyMCAtIDB4MkYgKi8KLQlEKE1vZFJNIHwgRHN0TWVtIHwgUHJpdiB8IE9wMzI2NCksIEQoTW9kUk0gfCBEc3RNZW0gfCBQcml2IHwgT3AzMjY0KSwKLQlEKE1vZFJNIHwgU3JjTWVtIHwgUHJpdiB8IE9wMzI2NCksIEQoTW9kUk0gfCBTcmNNZW0gfCBQcml2IHwgT3AzMjY0KSwKKwlESVAoTW9kUk0gfCBEc3RNZW0gfCBQcml2IHwgT3AzMjY0LCBjcl9yZWFkLCBjaGVja19jcl9yZWFkKSwKKwlESVAoTW9kUk0gfCBEc3RNZW0gfCBQcml2IHwgT3AzMjY0LCBkcl9yZWFkLCBjaGVja19kcl9yZWFkKSwKKwlESVAoTW9kUk0gfCBTcmNNZW0gfCBQcml2IHwgT3AzMjY0LCBjcl93cml0ZSwgY2hlY2tfY3Jfd3JpdGUpLAorCURJUChNb2RSTSB8IFNyY01lbSB8IFByaXYgfCBPcDMyNjQsIGRyX3dyaXRlLCBjaGVja19kcl93cml0ZSksCiAJTiwgTiwgTiwgTiwKIAlOLCBOLCBOLCBOLCBOLCBOLCBOLCBOLAogCS8qIDB4MzAgLSAweDNGICovCi0JRChJbXBsaWNpdE9wcyB8IFByaXYpLCBJKEltcGxpY2l0T3BzLCBlbV9yZHRzYyksCi0JRChJbXBsaWNpdE9wcyB8IFByaXYpLCBOLAorCURJKEltcGxpY2l0T3BzIHwgUHJpdiwgd3Jtc3IpLAorCUlJUChJbXBsaWNpdE9wcywgZW1fcmR0c2MsIHJkdHNjLCBjaGVja19yZHRzYyksCisJREkoSW1wbGljaXRPcHMgfCBQcml2LCByZG1zciksCisJRElQKEltcGxpY2l0T3BzIHwgUHJpdiwgcmRwbWMsIGNoZWNrX3JkcG1jKSwKIAlEKEltcGxpY2l0T3BzIHwgVmVuZG9yU3BlY2lmaWMpLCBEKEltcGxpY2l0T3BzIHwgUHJpdiB8IFZlbmRvclNwZWNpZmljKSwKIAlOLCBOLAogCU4sIE4sIE4sIE4sIE4sIE4sIE4sIE4sCkBAIC0yNTE4LDIxICszMjUxLDI3IEBACiAJLyogMHg1MCAtIDB4NUYgKi8KIAlOLCBOLCBOLCBOLCBOLCBOLCBOLCBOLCBOLCBOLCBOLCBOLCBOLCBOLCBOLCBOLAogCS8qIDB4NjAgLSAweDZGICovCi0JTiwgTiwgTiwgTiwgTiwgTiwgTiwgTiwgTiwgTiwgTiwgTiwgTiwgTiwgTiwgTiwKKwlOLCBOLCBOLCBOLAorCU4sIE4sIE4sIE4sCisJTiwgTiwgTiwgTiwKKwlOLCBOLCBOLCBHUChTcmNNZW0gfCBEc3RSZWcgfCBNb2RSTSB8IE1vdiwgJnBmeF8wZl82Zl8wZl83ZiksCiAJLyogMHg3MCAtIDB4N0YgKi8KLQlOLCBOLCBOLCBOLCBOLCBOLCBOLCBOLCBOLCBOLCBOLCBOLCBOLCBOLCBOLCBOLAorCU4sIE4sIE4sIE4sCisJTiwgTiwgTiwgTiwKKwlOLCBOLCBOLCBOLAorCU4sIE4sIE4sIEdQKFNyY1JlZyB8IERzdE1lbSB8IE1vZFJNIHwgTW92LCAmcGZ4XzBmXzZmXzBmXzdmKSwKIAkvKiAweDgwIC0gMHg4RiAqLwogCVgxNihEKFNyY0ltbSkpLAogCS8qIDB4OTAgLSAweDlGICovCiAJWDE2KEQoQnl0ZU9wIHwgRHN0TWVtIHwgU3JjTm9uZSB8IE1vZFJNfCBNb3YpKSwKIAkvKiAweEEwIC0gMHhBNyAqLwogCUQoSW1wbGljaXRPcHMgfCBTdGFjayksIEQoSW1wbGljaXRPcHMgfCBTdGFjayksCi0JTiwgRChEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSB8IEJpdE9wKSwKKwlESShJbXBsaWNpdE9wcywgY3B1aWQpLCBEKERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNIHwgQml0T3ApLAogCUQoRHN0TWVtIHwgU3JjUmVnIHwgU3JjMkltbUJ5dGUgfCBNb2RSTSksCiAJRChEc3RNZW0gfCBTcmNSZWcgfCBTcmMyQ0wgfCBNb2RSTSksIE4sIE4sCiAJLyogMHhBOCAtIDB4QUYgKi8KIAlEKEltcGxpY2l0T3BzIHwgU3RhY2spLCBEKEltcGxpY2l0T3BzIHwgU3RhY2spLAotCU4sIEQoRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0gfCBCaXRPcCB8IExvY2spLAorCURJKEltcGxpY2l0T3BzLCByc20pLCBEKERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNIHwgQml0T3AgfCBMb2NrKSwKIAlEKERzdE1lbSB8IFNyY1JlZyB8IFNyYzJJbW1CeXRlIHwgTW9kUk0pLAogCUQoRHN0TWVtIHwgU3JjUmVnIHwgU3JjMkNMIHwgTW9kUk0pLAogCUQoTW9kUk0pLCBJKERzdFJlZyB8IFNyY01lbSB8IE1vZFJNLCBlbV9pbXVsKSwKQEAgLTI1NjQsMTAgKzMzMDMsMTMgQEAKICN1bmRlZiBHCiAjdW5kZWYgR0QKICN1bmRlZiBJCisjdW5kZWYgR1AKKyN1bmRlZiBFWFQKIAogI3VuZGVmIEQyYnYKKyN1bmRlZiBEMmJ2SVAKICN1bmRlZiBJMmJ2Ci0jdW5kZWYgRDZBTFUKKyN1bmRlZiBJNkFMVQogCiBzdGF0aWMgdW5zaWduZWQgaW1tX3NpemUoc3RydWN0IGRlY29kZV9jYWNoZSAqYykKIHsKQEAgLTI2MjUsOCArMzM2Nyw5IEBACiAJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CiAJaW50IHJjID0gWDg2RU1VTF9DT05USU5VRTsKIAlpbnQgbW9kZSA9IGN0eHQtPm1vZGU7Ci0JaW50IGRlZl9vcF9ieXRlcywgZGVmX2FkX2J5dGVzLCBkdWFsLCBnb2Zmc2V0OwotCXN0cnVjdCBvcGNvZGUgb3Bjb2RlLCAqZ19tb2QwMTIsICpnX21vZDM7CisJaW50IGRlZl9vcF9ieXRlcywgZGVmX2FkX2J5dGVzLCBnb2Zmc2V0LCBzaW1kX3ByZWZpeDsKKwlib29sIG9wX3ByZWZpeCA9IGZhbHNlOworCXN0cnVjdCBvcGNvZGUgb3Bjb2RlOwogCXN0cnVjdCBvcGVyYW5kIG1lbW9wID0geyAudHlwZSA9IE9QX05PTkUgfTsKIAogCWMtPmVpcCA9IGN0eHQtPmVpcDsKQEAgLTI2MzQsNyArMzM3Nyw2IEBACiAJYy0+ZmV0Y2guZW5kID0gYy0+ZmV0Y2guc3RhcnQgKyBpbnNuX2xlbjsKIAlpZiAoaW5zbl9sZW4gPiAwKQogCQltZW1jcHkoYy0+ZmV0Y2guZGF0YSwgaW5zbiwgaW5zbl9sZW4pOwotCWN0eHQtPmNzX2Jhc2UgPSBzZWdfYmFzZShjdHh0LCBvcHMsIFZDUFVfU1JFR19DUyk7CiAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIFg4NkVNVUxfTU9ERV9SRUFMOgpAQCAtMjY2Miw2ICszNDA0LDcgQEAKIAlmb3IgKDs7KSB7CiAJCXN3aXRjaCAoYy0+YiA9IGluc25fZmV0Y2godTgsIDEsIGMtPmVpcCkpIHsKIAkJY2FzZSAweDY2OgkvKiBvcGVyYW5kLXNpemUgb3ZlcnJpZGUgKi8KKwkJCW9wX3ByZWZpeCA9IHRydWU7CiAJCQkvKiBzd2l0Y2ggYmV0d2VlbiAyLzQgYnl0ZXMgKi8KIAkJCWMtPm9wX2J5dGVzID0gZGVmX29wX2J5dGVzIF4gNjsKIAkJCWJyZWFrOwpAQCAtMjY5MiwxMCArMzQzNSw4IEBACiAJCQljLT5sb2NrX3ByZWZpeCA9IDE7CiAJCQlicmVhazsKIAkJY2FzZSAweGYyOgkvKiBSRVBORS9SRVBOWiAqLwotCQkJYy0+cmVwX3ByZWZpeCA9IFJFUE5FX1BSRUZJWDsKLQkJCWJyZWFrOwogCQljYXNlIDB4ZjM6CS8qIFJFUC9SRVBFL1JFUFogKi8KLQkJCWMtPnJlcF9wcmVmaXggPSBSRVBFX1BSRUZJWDsKKwkJCWMtPnJlcF9wcmVmaXggPSBjLT5iOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlnb3RvIGRvbmVfcHJlZml4ZXM7CkBAIC0yNzIyLDI5ICszNDYzLDQ5IEBACiAJfQogCWMtPmQgPSBvcGNvZGUuZmxhZ3M7CiAKLQlpZiAoYy0+ZCAmIEdyb3VwKSB7Ci0JCWR1YWwgPSBjLT5kICYgR3JvdXBEdWFsOwotCQljLT5tb2RybSA9IGluc25fZmV0Y2godTgsIDEsIGMtPmVpcCk7Ci0JCS0tYy0+ZWlwOworCXdoaWxlIChjLT5kICYgR3JvdXBNYXNrKSB7CisJCXN3aXRjaCAoYy0+ZCAmIEdyb3VwTWFzaykgeworCQljYXNlIEdyb3VwOgorCQkJYy0+bW9kcm0gPSBpbnNuX2ZldGNoKHU4LCAxLCBjLT5laXApOworCQkJLS1jLT5laXA7CisJCQlnb2Zmc2V0ID0gKGMtPm1vZHJtID4+IDMpICYgNzsKKwkJCW9wY29kZSA9IG9wY29kZS51Lmdyb3VwW2dvZmZzZXRdOworCQkJYnJlYWs7CisJCWNhc2UgR3JvdXBEdWFsOgorCQkJYy0+bW9kcm0gPSBpbnNuX2ZldGNoKHU4LCAxLCBjLT5laXApOworCQkJLS1jLT5laXA7CisJCQlnb2Zmc2V0ID0gKGMtPm1vZHJtID4+IDMpICYgNzsKKwkJCWlmICgoYy0+bW9kcm0gPj4gNikgPT0gMykKKwkJCQlvcGNvZGUgPSBvcGNvZGUudS5nZHVhbC0+bW9kM1tnb2Zmc2V0XTsKKwkJCWVsc2UKKwkJCQlvcGNvZGUgPSBvcGNvZGUudS5nZHVhbC0+bW9kMDEyW2dvZmZzZXRdOworCQkJYnJlYWs7CisJCWNhc2UgUk1FeHQ6CisJCQlnb2Zmc2V0ID0gYy0+bW9kcm0gJiA3OworCQkJb3Bjb2RlID0gb3Bjb2RlLnUuZ3JvdXBbZ29mZnNldF07CisJCQlicmVhazsKKwkJY2FzZSBQcmVmaXg6CisJCQlpZiAoYy0+cmVwX3ByZWZpeCAmJiBvcF9wcmVmaXgpCisJCQkJcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOworCQkJc2ltZF9wcmVmaXggPSBvcF9wcmVmaXggPyAweDY2IDogYy0+cmVwX3ByZWZpeDsKKwkJCXN3aXRjaCAoc2ltZF9wcmVmaXgpIHsKKwkJCWNhc2UgMHgwMDogb3Bjb2RlID0gb3Bjb2RlLnUuZ3ByZWZpeC0+cGZ4X25vOyBicmVhazsKKwkJCWNhc2UgMHg2Njogb3Bjb2RlID0gb3Bjb2RlLnUuZ3ByZWZpeC0+cGZ4XzY2OyBicmVhazsKKwkJCWNhc2UgMHhmMjogb3Bjb2RlID0gb3Bjb2RlLnUuZ3ByZWZpeC0+cGZ4X2YyOyBicmVhazsKKwkJCWNhc2UgMHhmMzogb3Bjb2RlID0gb3Bjb2RlLnUuZ3ByZWZpeC0+cGZ4X2YzOyBicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOworCQl9CiAKLQkJaWYgKGMtPmQgJiBHcm91cER1YWwpIHsKLQkJCWdfbW9kMDEyID0gb3Bjb2RlLnUuZ2R1YWwtPm1vZDAxMjsKLQkJCWdfbW9kMyA9IG9wY29kZS51LmdkdWFsLT5tb2QzOwotCQl9IGVsc2UKLQkJCWdfbW9kMDEyID0gZ19tb2QzID0gb3Bjb2RlLnUuZ3JvdXA7Ci0KLQkJYy0+ZCAmPSB+KEdyb3VwIHwgR3JvdXBEdWFsKTsKLQotCQlnb2Zmc2V0ID0gKGMtPm1vZHJtID4+IDMpICYgNzsKLQotCQlpZiAoKGMtPm1vZHJtID4+IDYpID09IDMpCi0JCQlvcGNvZGUgPSBnX21vZDNbZ29mZnNldF07Ci0JCWVsc2UKLQkJCW9wY29kZSA9IGdfbW9kMDEyW2dvZmZzZXRdOworCQljLT5kICY9IH5Hcm91cE1hc2s7CiAJCWMtPmQgfD0gb3Bjb2RlLmZsYWdzOwogCX0KIAogCWMtPmV4ZWN1dGUgPSBvcGNvZGUudS5leGVjdXRlOworCWMtPmNoZWNrX3Blcm0gPSBvcGNvZGUuY2hlY2tfcGVybTsKKwljLT5pbnRlcmNlcHQgPSBvcGNvZGUuaW50ZXJjZXB0OwogCiAJLyogVW5yZWNvZ25pc2VkPyAqLwogCWlmIChjLT5kID09IDAgfHwgKGMtPmQgJiBVbmRlZmluZWQpKQpAQCAtMjc2Myw2ICszNTI0LDkgQEAKIAkJCWMtPm9wX2J5dGVzID0gNDsKIAl9CiAKKwlpZiAoYy0+ZCAmIFNzZSkKKwkJYy0+b3BfYnl0ZXMgPSAxNjsKKwogCS8qIE1vZFJNIGFuZCBTSUIgYnl0ZXMuICovCiAJaWYgKGMtPmQgJiBNb2RSTSkgewogCQlyYyA9IGRlY29kZV9tb2RybShjdHh0LCBvcHMsICZtZW1vcCk7CkBAIC0yNzc2LDcgKzM1NDAsNyBAQAogCWlmICghYy0+aGFzX3NlZ19vdmVycmlkZSkKIAkJc2V0X3NlZ19vdmVycmlkZShjLCBWQ1BVX1NSRUdfRFMpOwogCi0JbWVtb3AuYWRkci5tZW0uc2VnID0gc2VnX292ZXJyaWRlKGN0eHQsIG9wcywgYyk7CisJbWVtb3AuYWRkci5tZW0uc2VnID0gc2VnX292ZXJyaWRlKGN0eHQsIGMpOwogCiAJaWYgKG1lbW9wLnR5cGUgPT0gT1BfTUVNICYmIGMtPmFkX2J5dGVzICE9IDgpCiAJCW1lbW9wLmFkZHIubWVtLmVhID0gKHUzMiltZW1vcC5hZGRyLm1lbS5lYTsKQEAgLTI3OTIsNyArMzU1Niw3IEBACiAJY2FzZSBTcmNOb25lOgogCQlicmVhazsKIAljYXNlIFNyY1JlZzoKLQkJZGVjb2RlX3JlZ2lzdGVyX29wZXJhbmQoJmMtPnNyYywgYywgMCk7CisJCWRlY29kZV9yZWdpc3Rlcl9vcGVyYW5kKGN0eHQsICZjLT5zcmMsIGMsIDApOwogCQlicmVhazsKIAljYXNlIFNyY01lbTE2OgogCQltZW1vcC5ieXRlcyA9IDI7CkBAIC0yODM2LDcgKzM2MDAsNyBAQAogCQljLT5zcmMuYnl0ZXMgPSAoYy0+ZCAmIEJ5dGVPcCkgPyAxIDogYy0+b3BfYnl0ZXM7CiAJCWMtPnNyYy5hZGRyLm1lbS5lYSA9CiAJCQlyZWdpc3Rlcl9hZGRyZXNzKGMsIGMtPnJlZ3NbVkNQVV9SRUdTX1JTSV0pOwotCQljLT5zcmMuYWRkci5tZW0uc2VnID0gc2VnX292ZXJyaWRlKGN0eHQsIG9wcywgYyksCisJCWMtPnNyYy5hZGRyLm1lbS5zZWcgPSBzZWdfb3ZlcnJpZGUoY3R4dCwgYyk7CiAJCWMtPnNyYy52YWwgPSAwOwogCQlicmVhazsKIAljYXNlIFNyY0ltbUZBZGRyOgpAQCAtMjg4Myw3ICszNjQ3LDcgQEAKIAkvKiBEZWNvZGUgYW5kIGZldGNoIHRoZSBkZXN0aW5hdGlvbiBvcGVyYW5kOiByZWdpc3RlciBvciBtZW1vcnkuICovCiAJc3dpdGNoIChjLT5kICYgRHN0TWFzaykgewogCWNhc2UgRHN0UmVnOgotCQlkZWNvZGVfcmVnaXN0ZXJfb3BlcmFuZCgmYy0+ZHN0LCBjLAorCQlkZWNvZGVfcmVnaXN0ZXJfb3BlcmFuZChjdHh0LCAmYy0+ZHN0LCBjLAogCQkJIGMtPnR3b2J5dGUgJiYgKGMtPmIgPT0gMHhiNiB8fCBjLT5iID09IDB4YjcpKTsKIAkJYnJlYWs7CiAJY2FzZSBEc3RJbW1VQnl0ZToKQEAgLTI5MjYsNyArMzY5MCw3IEBACiAJfQogCiBkb25lOgotCXJldHVybiAocmMgPT0gWDg2RU1VTF9VTkhBTkRMRUFCTEUpID8gLTEgOiAwOworCXJldHVybiAocmMgPT0gWDg2RU1VTF9VTkhBTkRMRUFCTEUpID8gRU1VTEFUSU9OX0ZBSUxFRCA6IEVNVUxBVElPTl9PSzsKIH0KIAogc3RhdGljIGJvb2wgc3RyaW5nX2luc25fY29tcGxldGVkKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQpAQCAtMjk3OSwxMiArMzc0Myw1MSBAQAogCQlnb3RvIGRvbmU7CiAJfQogCisJaWYgKChjLT5kICYgU3NlKQorCSAgICAmJiAoKG9wcy0+Z2V0X2NyKGN0eHQsIDApICYgWDg2X0NSMF9FTSkKKwkJfHwgIShvcHMtPmdldF9jcihjdHh0LCA0KSAmIFg4Nl9DUjRfT1NGWFNSKSkpIHsKKwkJcmMgPSBlbXVsYXRlX3VkKGN0eHQpOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKChjLT5kICYgU3NlKSAmJiAob3BzLT5nZXRfY3IoY3R4dCwgMCkgJiBYODZfQ1IwX1RTKSkgeworCQlyYyA9IGVtdWxhdGVfbm0oY3R4dCk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAodW5saWtlbHkoY3R4dC0+Z3Vlc3RfbW9kZSkgJiYgYy0+aW50ZXJjZXB0KSB7CisJCXJjID0gZW11bGF0b3JfY2hlY2tfaW50ZXJjZXB0KGN0eHQsIGMtPmludGVyY2VwdCwKKwkJCQkJICAgICAgWDg2X0lDUFRfUFJFX0VYQ0VQVCk7CisJCWlmIChyYyAhPSBYODZFTVVMX0NPTlRJTlVFKQorCQkJZ290byBkb25lOworCX0KKwogCS8qIFByaXZpbGVnZWQgaW5zdHJ1Y3Rpb24gY2FuIGJlIGV4ZWN1dGVkIG9ubHkgaW4gQ1BMPTAgKi8KLQlpZiAoKGMtPmQgJiBQcml2KSAmJiBvcHMtPmNwbChjdHh0LT52Y3B1KSkgeworCWlmICgoYy0+ZCAmIFByaXYpICYmIG9wcy0+Y3BsKGN0eHQpKSB7CiAJCXJjID0gZW11bGF0ZV9ncChjdHh0LCAwKTsKIAkJZ290byBkb25lOwogCX0KIAorCS8qIEluc3RydWN0aW9uIGNhbiBvbmx5IGJlIGV4ZWN1dGVkIGluIHByb3RlY3RlZCBtb2RlICovCisJaWYgKChjLT5kICYgUHJvdCkgJiYgIShjdHh0LT5tb2RlICYgWDg2RU1VTF9NT0RFX1BST1QpKSB7CisJCXJjID0gZW11bGF0ZV91ZChjdHh0KTsKKwkJZ290byBkb25lOworCX0KKworCS8qIERvIGluc3RydWN0aW9uIHNwZWNpZmljIHBlcm1pc3Npb24gY2hlY2tzICovCisJaWYgKGMtPmNoZWNrX3Blcm0pIHsKKwkJcmMgPSBjLT5jaGVja19wZXJtKGN0eHQpOworCQlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkKKwkJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAodW5saWtlbHkoY3R4dC0+Z3Vlc3RfbW9kZSkgJiYgYy0+aW50ZXJjZXB0KSB7CisJCXJjID0gZW11bGF0b3JfY2hlY2tfaW50ZXJjZXB0KGN0eHQsIGMtPmludGVyY2VwdCwKKwkJCQkJICAgICAgWDg2X0lDUFRfUE9TVF9FWENFUFQpOworCQlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkKKwkJCWdvdG8gZG9uZTsKKwl9CisKIAlpZiAoYy0+cmVwX3ByZWZpeCAmJiAoYy0+ZCAmIFN0cmluZykpIHsKIAkJLyogQWxsIFJFUCBwcmVmaXhlcyBoYXZlIHRoZSBzYW1lIGZpcnN0IHRlcm1pbmF0aW9uIGNvbmRpdGlvbiAqLwogCQlpZiAoYWRkcmVzc19tYXNrKGMsIGMtPnJlZ3NbVkNQVV9SRUdTX1JDWF0pID09IDApIHsKQEAgLTI5OTQsMTYgKzM3OTcsMTYgQEAKIAl9CiAKIAlpZiAoKGMtPnNyYy50eXBlID09IE9QX01FTSkgJiYgIShjLT5kICYgTm9BY2Nlc3MpKSB7Ci0JCXJjID0gcmVhZF9lbXVsYXRlZChjdHh0LCBvcHMsIGxpbmVhcihjdHh0LCBjLT5zcmMuYWRkci5tZW0pLAotCQkJCQljLT5zcmMudmFscHRyLCBjLT5zcmMuYnl0ZXMpOworCQlyYyA9IHNlZ21lbnRlZF9yZWFkKGN0eHQsIGMtPnNyYy5hZGRyLm1lbSwKKwkJCQkgICAgYy0+c3JjLnZhbHB0ciwgYy0+c3JjLmJ5dGVzKTsKIAkJaWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCQlnb3RvIGRvbmU7CiAJCWMtPnNyYy5vcmlnX3ZhbDY0ID0gYy0+c3JjLnZhbDY0OwogCX0KIAogCWlmIChjLT5zcmMyLnR5cGUgPT0gT1BfTUVNKSB7Ci0JCXJjID0gcmVhZF9lbXVsYXRlZChjdHh0LCBvcHMsIGxpbmVhcihjdHh0LCBjLT5zcmMyLmFkZHIubWVtKSwKLQkJCQkJJmMtPnNyYzIudmFsLCBjLT5zcmMyLmJ5dGVzKTsKKwkJcmMgPSBzZWdtZW50ZWRfcmVhZChjdHh0LCBjLT5zcmMyLmFkZHIubWVtLAorCQkJCSAgICAmYy0+c3JjMi52YWwsIGMtPnNyYzIuYnl0ZXMpOwogCQlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJCWdvdG8gZG9uZTsKIAl9CkBAIC0zMDE0LDcgKzM4MTcsNyBAQAogCiAJaWYgKChjLT5kc3QudHlwZSA9PSBPUF9NRU0pICYmICEoYy0+ZCAmIE1vdikpIHsKIAkJLyogb3B0aW1pc2F0aW9uIC0gYXZvaWQgc2xvdyBlbXVsYXRlZCByZWFkIGlmIE1vdiAqLwotCQlyYyA9IHJlYWRfZW11bGF0ZWQoY3R4dCwgb3BzLCBsaW5lYXIoY3R4dCwgYy0+ZHN0LmFkZHIubWVtKSwKKwkJcmMgPSBzZWdtZW50ZWRfcmVhZChjdHh0LCBjLT5kc3QuYWRkci5tZW0sCiAJCQkJICAgJmMtPmRzdC52YWwsIGMtPmRzdC5ieXRlcyk7CiAJCWlmIChyYyAhPSBYODZFTVVMX0NPTlRJTlVFKQogCQkJZ290byBkb25lOwpAQCAtMzAyMyw2ICszODI2LDEzIEBACiAKIHNwZWNpYWxfaW5zbjoKIAorCWlmICh1bmxpa2VseShjdHh0LT5ndWVzdF9tb2RlKSAmJiBjLT5pbnRlcmNlcHQpIHsKKwkJcmMgPSBlbXVsYXRvcl9jaGVja19pbnRlcmNlcHQoY3R4dCwgYy0+aW50ZXJjZXB0LAorCQkJCQkgICAgICBYODZfSUNQVF9QT1NUX01FTUFDQ0VTUyk7CisJCWlmIChyYyAhPSBYODZFTVVMX0NPTlRJTlVFKQorCQkJZ290byBkb25lOworCX0KKwogCWlmIChjLT5leGVjdXRlKSB7CiAJCXJjID0gYy0+ZXhlY3V0ZShjdHh0KTsKIAkJaWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpCkBAIC0zMDM0LDc1ICszODQ0LDMzIEBACiAJCWdvdG8gdHdvYnl0ZV9pbnNuOwogCiAJc3dpdGNoIChjLT5iKSB7Ci0JY2FzZSAweDAwIC4uLiAweDA1OgotCSAgICAgIGFkZDoJCS8qIGFkZCAqLwotCQllbXVsYXRlXzJvcF9TcmNWKCJhZGQiLCBjLT5zcmMsIGMtPmRzdCwgY3R4dC0+ZWZsYWdzKTsKLQkJYnJlYWs7CiAJY2FzZSAweDA2OgkJLyogcHVzaCBlcyAqLwotCQllbXVsYXRlX3B1c2hfc3JlZyhjdHh0LCBvcHMsIFZDUFVfU1JFR19FUyk7CisJCXJjID0gZW11bGF0ZV9wdXNoX3NyZWcoY3R4dCwgb3BzLCBWQ1BVX1NSRUdfRVMpOwogCQlicmVhazsKIAljYXNlIDB4MDc6CQkvKiBwb3AgZXMgKi8KIAkJcmMgPSBlbXVsYXRlX3BvcF9zcmVnKGN0eHQsIG9wcywgVkNQVV9TUkVHX0VTKTsKIAkJYnJlYWs7Ci0JY2FzZSAweDA4IC4uLiAweDBkOgotCSAgICAgIG9yOgkJLyogb3IgKi8KLQkJZW11bGF0ZV8yb3BfU3JjVigib3IiLCBjLT5zcmMsIGMtPmRzdCwgY3R4dC0+ZWZsYWdzKTsKLQkJYnJlYWs7CiAJY2FzZSAweDBlOgkJLyogcHVzaCBjcyAqLwotCQllbXVsYXRlX3B1c2hfc3JlZyhjdHh0LCBvcHMsIFZDUFVfU1JFR19DUyk7Ci0JCWJyZWFrOwotCWNhc2UgMHgxMCAuLi4gMHgxNToKLQkgICAgICBhZGM6CQkvKiBhZGMgKi8KLQkJZW11bGF0ZV8yb3BfU3JjVigiYWRjIiwgYy0+c3JjLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7CisJCXJjID0gZW11bGF0ZV9wdXNoX3NyZWcoY3R4dCwgb3BzLCBWQ1BVX1NSRUdfQ1MpOwogCQlicmVhazsKIAljYXNlIDB4MTY6CQkvKiBwdXNoIHNzICovCi0JCWVtdWxhdGVfcHVzaF9zcmVnKGN0eHQsIG9wcywgVkNQVV9TUkVHX1NTKTsKKwkJcmMgPSBlbXVsYXRlX3B1c2hfc3JlZyhjdHh0LCBvcHMsIFZDUFVfU1JFR19TUyk7CiAJCWJyZWFrOwogCWNhc2UgMHgxNzoJCS8qIHBvcCBzcyAqLwogCQlyYyA9IGVtdWxhdGVfcG9wX3NyZWcoY3R4dCwgb3BzLCBWQ1BVX1NSRUdfU1MpOwogCQlicmVhazsKLQljYXNlIDB4MTggLi4uIDB4MWQ6Ci0JICAgICAgc2JiOgkJLyogc2JiICovCi0JCWVtdWxhdGVfMm9wX1NyY1YoInNiYiIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOwotCQlicmVhazsKIAljYXNlIDB4MWU6CQkvKiBwdXNoIGRzICovCi0JCWVtdWxhdGVfcHVzaF9zcmVnKGN0eHQsIG9wcywgVkNQVV9TUkVHX0RTKTsKKwkJcmMgPSBlbXVsYXRlX3B1c2hfc3JlZyhjdHh0LCBvcHMsIFZDUFVfU1JFR19EUyk7CiAJCWJyZWFrOwogCWNhc2UgMHgxZjoJCS8qIHBvcCBkcyAqLwogCQlyYyA9IGVtdWxhdGVfcG9wX3NyZWcoY3R4dCwgb3BzLCBWQ1BVX1NSRUdfRFMpOwogCQlicmVhazsKLQljYXNlIDB4MjAgLi4uIDB4MjU6Ci0JICAgICAgYW5kOgkJLyogYW5kICovCi0JCWVtdWxhdGVfMm9wX1NyY1YoImFuZCIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOwotCQlicmVhazsKLQljYXNlIDB4MjggLi4uIDB4MmQ6Ci0JICAgICAgc3ViOgkJLyogc3ViICovCi0JCWVtdWxhdGVfMm9wX1NyY1YoInN1YiIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOwotCQlicmVhazsKLQljYXNlIDB4MzAgLi4uIDB4MzU6Ci0JICAgICAgeG9yOgkJLyogeG9yICovCi0JCWVtdWxhdGVfMm9wX1NyY1YoInhvciIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOwotCQlicmVhazsKLQljYXNlIDB4MzggLi4uIDB4M2Q6Ci0JICAgICAgY21wOgkJLyogY21wICovCi0JCWVtdWxhdGVfMm9wX1NyY1YoImNtcCIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOwotCQlicmVhazsKIAljYXNlIDB4NDAgLi4uIDB4NDc6IC8qIGluYyByMTYvcjMyICovCiAJCWVtdWxhdGVfMW9wKCJpbmMiLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7CiAJCWJyZWFrOwogCWNhc2UgMHg0OCAuLi4gMHg0ZjogLyogZGVjIHIxNi9yMzIgKi8KIAkJZW11bGF0ZV8xb3AoImRlYyIsIGMtPmRzdCwgY3R4dC0+ZWZsYWdzKTsKIAkJYnJlYWs7Ci0JY2FzZSAweDU4IC4uLiAweDVmOiAvKiBwb3AgcmVnICovCi0JcG9wX2luc3RydWN0aW9uOgotCQlyYyA9IGVtdWxhdGVfcG9wKGN0eHQsIG9wcywgJmMtPmRzdC52YWwsIGMtPm9wX2J5dGVzKTsKLQkJYnJlYWs7Ci0JY2FzZSAweDYwOgkvKiBwdXNoYSAqLwotCQlyYyA9IGVtdWxhdGVfcHVzaGEoY3R4dCwgb3BzKTsKLQkJYnJlYWs7Ci0JY2FzZSAweDYxOgkvKiBwb3BhICovCi0JCXJjID0gZW11bGF0ZV9wb3BhKGN0eHQsIG9wcyk7Ci0JCWJyZWFrOwogCWNhc2UgMHg2MzoJCS8qIG1vdnN4ZCAqLwogCQlpZiAoY3R4dC0+bW9kZSAhPSBYODZFTVVMX01PREVfUFJPVDY0KQogCQkJZ290byBjYW5ub3RfZW11bGF0ZTsKQEAgLTMxMjEsMjYgKzM4ODksNiBAQAogCQlpZiAodGVzdF9jYyhjLT5iLCBjdHh0LT5lZmxhZ3MpKQogCQkJam1wX3JlbChjLCBjLT5zcmMudmFsKTsKIAkJYnJlYWs7Ci0JY2FzZSAweDgwIC4uLiAweDgzOgkvKiBHcnAxICovCi0JCXN3aXRjaCAoYy0+bW9kcm1fcmVnKSB7Ci0JCWNhc2UgMDoKLQkJCWdvdG8gYWRkOwotCQljYXNlIDE6Ci0JCQlnb3RvIG9yOwotCQljYXNlIDI6Ci0JCQlnb3RvIGFkYzsKLQkJY2FzZSAzOgotCQkJZ290byBzYmI7Ci0JCWNhc2UgNDoKLQkJCWdvdG8gYW5kOwotCQljYXNlIDU6Ci0JCQlnb3RvIHN1YjsKLQkJY2FzZSA2OgotCQkJZ290byB4b3I7Ci0JCWNhc2UgNzoKLQkJCWdvdG8gY21wOwotCQl9Ci0JCWJyZWFrOwogCWNhc2UgMHg4NCAuLi4gMHg4NToKIAl0ZXN0OgogCQllbXVsYXRlXzJvcF9TcmNWKCJ0ZXN0IiwgYy0+c3JjLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7CkBAIC0zMTYyLDcgKzM5MTAsNyBAQAogCQkJcmMgPSBlbXVsYXRlX3VkKGN0eHQpOwogCQkJZ290byBkb25lOwogCQl9Ci0JCWMtPmRzdC52YWwgPSBvcHMtPmdldF9zZWdtZW50X3NlbGVjdG9yKGMtPm1vZHJtX3JlZywgY3R4dC0+dmNwdSk7CisJCWMtPmRzdC52YWwgPSBnZXRfc2VnbWVudF9zZWxlY3RvcihjdHh0LCBjLT5tb2RybV9yZWcpOwogCQlicmVhazsKIAljYXNlIDB4OGQ6IC8qIGxlYSByMTYvcjMyLCBtICovCiAJCWMtPmRzdC52YWwgPSBjLT5zcmMuYWRkci5tZW0uZWE7CkBAIC0zMTg3LDcgKzM5MzUsNyBAQAogCQlicmVhazsKIAl9CiAJY2FzZSAweDhmOgkJLyogcG9wIChzb2xlIG1lbWJlciBvZiBHcnAxYSkgKi8KLQkJcmMgPSBlbXVsYXRlX2dycDFhKGN0eHQsIG9wcyk7CisJCXJjID0gZW1fZ3JwMWEoY3R4dCk7CiAJCWJyZWFrOwogCWNhc2UgMHg5MCAuLi4gMHg5NzogLyogbm9wIC8geGNoZyByZWcsIHJheCAqLwogCQlpZiAoYy0+ZHN0LmFkZHIucmVnID09ICZjLT5yZWdzW1ZDUFVfUkVHU19SQVhdKQpAQCAtMzIwMCwzMSArMzk0OCwxNyBAQAogCQljYXNlIDg6IGMtPmRzdC52YWwgPSAoczMyKWMtPmRzdC52YWw7IGJyZWFrOwogCQl9CiAJCWJyZWFrOwotCWNhc2UgMHg5YzogLyogcHVzaGYgKi8KLQkJYy0+c3JjLnZhbCA9ICAodW5zaWduZWQgbG9uZykgY3R4dC0+ZWZsYWdzOwotCQllbXVsYXRlX3B1c2goY3R4dCwgb3BzKTsKLQkJYnJlYWs7Ci0JY2FzZSAweDlkOiAvKiBwb3BmICovCi0JCWMtPmRzdC50eXBlID0gT1BfUkVHOwotCQljLT5kc3QuYWRkci5yZWcgPSAmY3R4dC0+ZWZsYWdzOwotCQljLT5kc3QuYnl0ZXMgPSBjLT5vcF9ieXRlczsKLQkJcmMgPSBlbXVsYXRlX3BvcGYoY3R4dCwgb3BzLCAmYy0+ZHN0LnZhbCwgYy0+b3BfYnl0ZXMpOwotCQlicmVhazsKLQljYXNlIDB4YTYgLi4uIDB4YTc6CS8qIGNtcHMgKi8KLQkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOyAvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi8KLQkJZ290byBjbXA7CiAJY2FzZSAweGE4IC4uLiAweGE5OgkvKiB0ZXN0IGF4LCBpbW0gKi8KIAkJZ290byB0ZXN0OwotCWNhc2UgMHhhZSAuLi4gMHhhZjoJLyogc2NhcyAqLwotCQlnb3RvIGNtcDsKIAljYXNlIDB4YzAgLi4uIDB4YzE6Ci0JCWVtdWxhdGVfZ3JwMihjdHh0KTsKKwkJcmMgPSBlbV9ncnAyKGN0eHQpOwogCQlicmVhazsKIAljYXNlIDB4YzM6IC8qIHJldCAqLwogCQljLT5kc3QudHlwZSA9IE9QX1JFRzsKIAkJYy0+ZHN0LmFkZHIucmVnID0gJmMtPmVpcDsKIAkJYy0+ZHN0LmJ5dGVzID0gYy0+b3BfYnl0ZXM7Ci0JCWdvdG8gcG9wX2luc3RydWN0aW9uOworCQlyYyA9IGVtX3BvcChjdHh0KTsKKwkJYnJlYWs7CiAJY2FzZSAweGM0OgkJLyogbGVzICovCiAJCXJjID0gZW11bGF0ZV9sb2FkX3NlZ21lbnQoY3R4dCwgb3BzLCBWQ1BVX1NSRUdfRVMpOwogCQlicmVhazsKQEAgLTMyNTIsMTEgKzM5ODYsMTEgQEAKIAkJcmMgPSBlbXVsYXRlX2lyZXQoY3R4dCwgb3BzKTsKIAkJYnJlYWs7CiAJY2FzZSAweGQwIC4uLiAweGQxOgkvKiBHcnAyICovCi0JCWVtdWxhdGVfZ3JwMihjdHh0KTsKKwkJcmMgPSBlbV9ncnAyKGN0eHQpOwogCQlicmVhazsKIAljYXNlIDB4ZDIgLi4uIDB4ZDM6CS8qIEdycDIgKi8KIAkJYy0+c3JjLnZhbCA9IGMtPnJlZ3NbVkNQVV9SRUdTX1JDWF07Ci0JCWVtdWxhdGVfZ3JwMihjdHh0KTsKKwkJcmMgPSBlbV9ncnAyKGN0eHQpOwogCQlicmVhazsKIAljYXNlIDB4ZTAgLi4uIDB4ZTI6CS8qIGxvb3AvbG9vcHovbG9vcG56ICovCiAJCXJlZ2lzdGVyX2FkZHJlc3NfaW5jcmVtZW50KGMsICZjLT5yZWdzW1ZDUFVfUkVHU19SQ1hdLCAtMSk7CkBAIC0zMjc4LDIzICs0MDEyLDE0IEBACiAJCWxvbmcgaW50IHJlbCA9IGMtPnNyYy52YWw7CiAJCWMtPnNyYy52YWwgPSAodW5zaWduZWQgbG9uZykgYy0+ZWlwOwogCQlqbXBfcmVsKGMsIHJlbCk7Ci0JCWVtdWxhdGVfcHVzaChjdHh0LCBvcHMpOworCQlyYyA9IGVtX3B1c2goY3R4dCk7CiAJCWJyZWFrOwogCX0KIAljYXNlIDB4ZTk6IC8qIGptcCByZWwgKi8KIAkJZ290byBqbXA7Ci0JY2FzZSAweGVhOiB7IC8qIGptcCBmYXIgKi8KLQkJdW5zaWduZWQgc2hvcnQgc2VsOwotCWp1bXBfZmFyOgotCQltZW1jcHkoJnNlbCwgYy0+c3JjLnZhbHB0ciArIGMtPm9wX2J5dGVzLCAyKTsKLQotCQlpZiAobG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IoY3R4dCwgb3BzLCBzZWwsIFZDUFVfU1JFR19DUykpCi0JCQlnb3RvIGRvbmU7Ci0KLQkJYy0+ZWlwID0gMDsKLQkJbWVtY3B5KCZjLT5laXAsIGMtPnNyYy52YWxwdHIsIGMtPm9wX2J5dGVzKTsKKwljYXNlIDB4ZWE6IC8qIGptcCBmYXIgKi8KKwkJcmMgPSBlbV9qbXBfZmFyKGN0eHQpOwogCQlicmVhazsKLQl9CiAJY2FzZSAweGViOgogCSAgICAgIGptcDoJCS8qIGptcCByZWwgc2hvcnQgKi8KIAkJam1wX3JlbChjLCBjLT5zcmMudmFsKTsKQEAgLTMzMDQsMTEgKzQwMjksNiBAQAogCWNhc2UgMHhlZDogLyogaW4gKGUvcilheCxkeCAqLwogCQljLT5zcmMudmFsID0gYy0+cmVnc1tWQ1BVX1JFR1NfUkRYXTsKIAlkb19pb19pbjoKLQkJYy0+ZHN0LmJ5dGVzID0gbWluKGMtPmRzdC5ieXRlcywgNHUpOwotCQlpZiAoIWVtdWxhdG9yX2lvX3Blcm1pdGVkKGN0eHQsIG9wcywgYy0+c3JjLnZhbCwgYy0+ZHN0LmJ5dGVzKSkgewotCQkJcmMgPSBlbXVsYXRlX2dwKGN0eHQsIDApOwotCQkJZ290byBkb25lOwotCQl9CiAJCWlmICghcGlvX2luX2VtdWxhdGVkKGN0eHQsIG9wcywgYy0+ZHN0LmJ5dGVzLCBjLT5zcmMudmFsLAogCQkJCSAgICAgJmMtPmRzdC52YWwpKQogCQkJZ290byBkb25lOyAvKiBJTyBpcyBuZWVkZWQgKi8KQEAgLTMzMTcsMjUgKzQwMzcsMTkgQEAKIAljYXNlIDB4ZWY6IC8qIG91dCBkeCwoZS9yKWF4ICovCiAJCWMtPmRzdC52YWwgPSBjLT5yZWdzW1ZDUFVfUkVHU19SRFhdOwogCWRvX2lvX291dDoKLQkJYy0+c3JjLmJ5dGVzID0gbWluKGMtPnNyYy5ieXRlcywgNHUpOwotCQlpZiAoIWVtdWxhdG9yX2lvX3Blcm1pdGVkKGN0eHQsIG9wcywgYy0+ZHN0LnZhbCwKLQkJCQkJICBjLT5zcmMuYnl0ZXMpKSB7Ci0JCQlyYyA9IGVtdWxhdGVfZ3AoY3R4dCwgMCk7Ci0JCQlnb3RvIGRvbmU7Ci0JCX0KLQkJb3BzLT5waW9fb3V0X2VtdWxhdGVkKGMtPnNyYy5ieXRlcywgYy0+ZHN0LnZhbCwKLQkJCQkgICAgICAmYy0+c3JjLnZhbCwgMSwgY3R4dC0+dmNwdSk7CisJCW9wcy0+cGlvX291dF9lbXVsYXRlZChjdHh0LCBjLT5zcmMuYnl0ZXMsIGMtPmRzdC52YWwsCisJCQkJICAgICAgJmMtPnNyYy52YWwsIDEpOwogCQljLT5kc3QudHlwZSA9IE9QX05PTkU7CS8qIERpc2FibGUgd3JpdGViYWNrLiAqLwogCQlicmVhazsKIAljYXNlIDB4ZjQ6ICAgICAgICAgICAgICAvKiBobHQgKi8KLQkJY3R4dC0+dmNwdS0+YXJjaC5oYWx0X3JlcXVlc3QgPSAxOworCQljdHh0LT5vcHMtPmhhbHQoY3R4dCk7CiAJCWJyZWFrOwogCWNhc2UgMHhmNToJLyogY21jICovCiAJCS8qIGNvbXBsZW1lbnQgY2FycnkgZmxhZyBmcm9tIGVmbGFncyByZWcgKi8KIAkJY3R4dC0+ZWZsYWdzIF49IEVGTEdfQ0Y7CiAJCWJyZWFrOwogCWNhc2UgMHhmNiAuLi4gMHhmNzoJLyogR3JwMyAqLwotCQlyYyA9IGVtdWxhdGVfZ3JwMyhjdHh0LCBvcHMpOworCQlyYyA9IGVtX2dycDMoY3R4dCk7CiAJCWJyZWFrOwogCWNhc2UgMHhmODogLyogY2xjICovCiAJCWN0eHQtPmVmbGFncyAmPSB+RUZMR19DRjsKQEAgLTMzNjYsMTMgKzQwODAsMTEgQEAKIAkJY3R4dC0+ZWZsYWdzIHw9IEVGTEdfREY7CiAJCWJyZWFrOwogCWNhc2UgMHhmZTogLyogR3JwNCAqLwotCWdycDQ1OgotCQlyYyA9IGVtdWxhdGVfZ3JwNDUoY3R4dCwgb3BzKTsKKwkJcmMgPSBlbV9ncnA0NShjdHh0KTsKIAkJYnJlYWs7CiAJY2FzZSAweGZmOiAvKiBHcnA1ICovCi0JCWlmIChjLT5tb2RybV9yZWcgPT0gNSkKLQkJCWdvdG8ganVtcF9mYXI7Ci0JCWdvdG8gZ3JwNDU7CisJCXJjID0gZW1fZ3JwNDUoY3R4dCk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWdvdG8gY2Fubm90X2VtdWxhdGU7CiAJfQpAQCAtMzM4MSw3ICs0MDkzLDcgQEAKIAkJZ290byBkb25lOwogCiB3cml0ZWJhY2s6Ci0JcmMgPSB3cml0ZWJhY2soY3R4dCwgb3BzKTsKKwlyYyA9IHdyaXRlYmFjayhjdHh0KTsKIAlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJZ290byBkb25lOwogCkBAIC0zMzkyLDcgKzQxMDQsNyBAQAogCWMtPmRzdC50eXBlID0gc2F2ZWRfZHN0X3R5cGU7CiAKIAlpZiAoKGMtPmQgJiBTcmNNYXNrKSA9PSBTcmNTSSkKLQkJc3RyaW5nX2FkZHJfaW5jKGN0eHQsIHNlZ19vdmVycmlkZShjdHh0LCBvcHMsIGMpLAorCQlzdHJpbmdfYWRkcl9pbmMoY3R4dCwgc2VnX292ZXJyaWRlKGN0eHQsIGMpLAogCQkJCVZDUFVfUkVHU19SU0ksICZjLT5zcmMpOwogCiAJaWYgKChjLT5kICYgRHN0TWFzaykgPT0gRHN0REkpCkBAIC0zNDI3LDExNSArNDEzOSwzNCBAQAogZG9uZToKIAlpZiAocmMgPT0gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQpCiAJCWN0eHQtPmhhdmVfZXhjZXB0aW9uID0gdHJ1ZTsKKwlpZiAocmMgPT0gWDg2RU1VTF9JTlRFUkNFUFRFRCkKKwkJcmV0dXJuIEVNVUxBVElPTl9JTlRFUkNFUFRFRDsKKwogCXJldHVybiAocmMgPT0gWDg2RU1VTF9VTkhBTkRMRUFCTEUpID8gRU1VTEFUSU9OX0ZBSUxFRCA6IEVNVUxBVElPTl9PSzsKIAogdHdvYnl0ZV9pbnNuOgogCXN3aXRjaCAoYy0+YikgewotCWNhc2UgMHgwMTogLyogbGdkdCwgbGlkdCwgbG1zdyAqLwotCQlzd2l0Y2ggKGMtPm1vZHJtX3JlZykgewotCQkJdTE2IHNpemU7Ci0JCQl1bnNpZ25lZCBsb25nIGFkZHJlc3M7Ci0KLQkJY2FzZSAwOiAvKiB2bWNhbGwgKi8KLQkJCWlmIChjLT5tb2RybV9tb2QgIT0gMyB8fCBjLT5tb2RybV9ybSAhPSAxKQotCQkJCWdvdG8gY2Fubm90X2VtdWxhdGU7Ci0KLQkJCXJjID0ga3ZtX2ZpeF9oeXBlcmNhbGwoY3R4dC0+dmNwdSk7Ci0JCQlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkKLQkJCQlnb3RvIGRvbmU7Ci0KLQkJCS8qIExldCB0aGUgcHJvY2Vzc29yIHJlLWV4ZWN1dGUgdGhlIGZpeGVkIGh5cGVyY2FsbCAqLwotCQkJYy0+ZWlwID0gY3R4dC0+ZWlwOwotCQkJLyogRGlzYWJsZSB3cml0ZWJhY2suICovCi0JCQljLT5kc3QudHlwZSA9IE9QX05PTkU7Ci0JCQlicmVhazsKLQkJY2FzZSAyOiAvKiBsZ2R0ICovCi0JCQlyYyA9IHJlYWRfZGVzY3JpcHRvcihjdHh0LCBvcHMsIGMtPnNyYy5hZGRyLm1lbSwKLQkJCQkJICAgICAmc2l6ZSwgJmFkZHJlc3MsIGMtPm9wX2J5dGVzKTsKLQkJCWlmIChyYyAhPSBYODZFTVVMX0NPTlRJTlVFKQotCQkJCWdvdG8gZG9uZTsKLQkJCXJlYWxtb2RlX2xnZHQoY3R4dC0+dmNwdSwgc2l6ZSwgYWRkcmVzcyk7Ci0JCQkvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi8KLQkJCWMtPmRzdC50eXBlID0gT1BfTk9ORTsKLQkJCWJyZWFrOwotCQljYXNlIDM6IC8qIGxpZHQvdm1tY2FsbCAqLwotCQkJaWYgKGMtPm1vZHJtX21vZCA9PSAzKSB7Ci0JCQkJc3dpdGNoIChjLT5tb2RybV9ybSkgewotCQkJCWNhc2UgMToKLQkJCQkJcmMgPSBrdm1fZml4X2h5cGVyY2FsbChjdHh0LT52Y3B1KTsKLQkJCQkJYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJZ290byBjYW5ub3RfZW11bGF0ZTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXJjID0gcmVhZF9kZXNjcmlwdG9yKGN0eHQsIG9wcywgYy0+c3JjLmFkZHIubWVtLAotCQkJCQkJICAgICAmc2l6ZSwgJmFkZHJlc3MsCi0JCQkJCQkgICAgIGMtPm9wX2J5dGVzKTsKLQkJCQlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkKLQkJCQkJZ290byBkb25lOwotCQkJCXJlYWxtb2RlX2xpZHQoY3R4dC0+dmNwdSwgc2l6ZSwgYWRkcmVzcyk7Ci0JCQl9Ci0JCQkvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi8KLQkJCWMtPmRzdC50eXBlID0gT1BfTk9ORTsKLQkJCWJyZWFrOwotCQljYXNlIDQ6IC8qIHNtc3cgKi8KLQkJCWMtPmRzdC5ieXRlcyA9IDI7Ci0JCQljLT5kc3QudmFsID0gb3BzLT5nZXRfY3IoMCwgY3R4dC0+dmNwdSk7Ci0JCQlicmVhazsKLQkJY2FzZSA2OiAvKiBsbXN3ICovCi0JCQlvcHMtPnNldF9jcigwLCAob3BzLT5nZXRfY3IoMCwgY3R4dC0+dmNwdSkgJiB+MHgwZXVsKSB8Ci0JCQkJICAgIChjLT5zcmMudmFsICYgMHgwZiksIGN0eHQtPnZjcHUpOwotCQkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOwotCQkJYnJlYWs7Ci0JCWNhc2UgNTogLyogbm90IGRlZmluZWQgKi8KLQkJCWVtdWxhdGVfdWQoY3R4dCk7Ci0JCQlyYyA9IFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOwotCQkJZ290byBkb25lOwotCQljYXNlIDc6IC8qIGludmxwZyovCi0JCQllbXVsYXRlX2ludmxwZyhjdHh0LT52Y3B1LAotCQkJCSAgICAgICBsaW5lYXIoY3R4dCwgYy0+c3JjLmFkZHIubWVtKSk7Ci0JCQkvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi8KLQkJCWMtPmRzdC50eXBlID0gT1BfTk9ORTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZ290byBjYW5ub3RfZW11bGF0ZTsKLQkJfQotCQlicmVhazsKIAljYXNlIDB4MDU6IAkJLyogc3lzY2FsbCAqLwogCQlyYyA9IGVtdWxhdGVfc3lzY2FsbChjdHh0LCBvcHMpOwogCQlicmVhazsKIAljYXNlIDB4MDY6Ci0JCWVtdWxhdGVfY2x0cyhjdHh0LT52Y3B1KTsKKwkJcmMgPSBlbV9jbHRzKGN0eHQpOwogCQlicmVhazsKIAljYXNlIDB4MDk6CQkvKiB3YmludmQgKi8KLQkJa3ZtX2VtdWxhdGVfd2JpbnZkKGN0eHQtPnZjcHUpOworCQkoY3R4dC0+b3BzLT53YmludmQpKGN0eHQpOwogCQlicmVhazsKIAljYXNlIDB4MDg6CQkvKiBpbnZkICovCiAJY2FzZSAweDBkOgkJLyogR3JwUCAocHJlZmV0Y2gpICovCiAJY2FzZSAweDE4OgkJLyogR3JwMTYgKHByZWZldGNoL25vcCkgKi8KIAkJYnJlYWs7CiAJY2FzZSAweDIwOiAvKiBtb3YgY3IsIHJlZyAqLwotCQlzd2l0Y2ggKGMtPm1vZHJtX3JlZykgewotCQljYXNlIDE6Ci0JCWNhc2UgNSAuLi4gNzoKLQkJY2FzZSA5IC4uLiAxNToKLQkJCWVtdWxhdGVfdWQoY3R4dCk7Ci0JCQlyYyA9IFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOwotCQkJZ290byBkb25lOwotCQl9Ci0JCWMtPmRzdC52YWwgPSBvcHMtPmdldF9jcihjLT5tb2RybV9yZWcsIGN0eHQtPnZjcHUpOworCQljLT5kc3QudmFsID0gb3BzLT5nZXRfY3IoY3R4dCwgYy0+bW9kcm1fcmVnKTsKIAkJYnJlYWs7CiAJY2FzZSAweDIxOiAvKiBtb3YgZnJvbSBkciB0byByZWcgKi8KLQkJaWYgKChvcHMtPmdldF9jcig0LCBjdHh0LT52Y3B1KSAmIFg4Nl9DUjRfREUpICYmCi0JCSAgICAoYy0+bW9kcm1fcmVnID09IDQgfHwgYy0+bW9kcm1fcmVnID09IDUpKSB7Ci0JCQllbXVsYXRlX3VkKGN0eHQpOwotCQkJcmMgPSBYODZFTVVMX1BST1BBR0FURV9GQVVMVDsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCQlvcHMtPmdldF9kcihjLT5tb2RybV9yZWcsICZjLT5kc3QudmFsLCBjdHh0LT52Y3B1KTsKKwkJb3BzLT5nZXRfZHIoY3R4dCwgYy0+bW9kcm1fcmVnLCAmYy0+ZHN0LnZhbCk7CiAJCWJyZWFrOwogCWNhc2UgMHgyMjogLyogbW92IHJlZywgY3IgKi8KLQkJaWYgKG9wcy0+c2V0X2NyKGMtPm1vZHJtX3JlZywgYy0+c3JjLnZhbCwgY3R4dC0+dmNwdSkpIHsKKwkJaWYgKG9wcy0+c2V0X2NyKGN0eHQsIGMtPm1vZHJtX3JlZywgYy0+c3JjLnZhbCkpIHsKIAkJCWVtdWxhdGVfZ3AoY3R4dCwgMCk7CiAJCQlyYyA9IFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOwogCQkJZ290byBkb25lOwpAQCAtMzU0MywxNiArNDE3NCw5IEBACiAJCWMtPmRzdC50eXBlID0gT1BfTk9ORTsKIAkJYnJlYWs7CiAJY2FzZSAweDIzOiAvKiBtb3YgZnJvbSByZWcgdG8gZHIgKi8KLQkJaWYgKChvcHMtPmdldF9jcig0LCBjdHh0LT52Y3B1KSAmIFg4Nl9DUjRfREUpICYmCi0JCSAgICAoYy0+bW9kcm1fcmVnID09IDQgfHwgYy0+bW9kcm1fcmVnID09IDUpKSB7Ci0JCQllbXVsYXRlX3VkKGN0eHQpOwotCQkJcmMgPSBYODZFTVVMX1BST1BBR0FURV9GQVVMVDsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCi0JCWlmIChvcHMtPnNldF9kcihjLT5tb2RybV9yZWcsIGMtPnNyYy52YWwgJgorCQlpZiAob3BzLT5zZXRfZHIoY3R4dCwgYy0+bW9kcm1fcmVnLCBjLT5zcmMudmFsICYKIAkJCQkoKGN0eHQtPm1vZGUgPT0gWDg2RU1VTF9NT0RFX1BST1Q2NCkgPwotCQkJCSB+MFVMTCA6IH4wVSksIGN0eHQtPnZjcHUpIDwgMCkgeworCQkJCSB+MFVMTCA6IH4wVSkpIDwgMCkgewogCQkJLyogI1VEIGNvbmRpdGlvbiBpcyBhbHJlYWR5IGhhbmRsZWQgYnkgdGhlIGNvZGUgYWJvdmUgKi8KIAkJCWVtdWxhdGVfZ3AoY3R4dCwgMCk7CiAJCQlyYyA9IFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOwpAQCAtMzU2NSw3ICs0MTg5LDcgQEAKIAkJLyogd3Jtc3IgKi8KIAkJbXNyX2RhdGEgPSAodTMyKWMtPnJlZ3NbVkNQVV9SRUdTX1JBWF0KIAkJCXwgKCh1NjQpYy0+cmVnc1tWQ1BVX1JFR1NfUkRYXSA8PCAzMik7Ci0JCWlmIChvcHMtPnNldF9tc3IoY3R4dC0+dmNwdSwgYy0+cmVnc1tWQ1BVX1JFR1NfUkNYXSwgbXNyX2RhdGEpKSB7CisJCWlmIChvcHMtPnNldF9tc3IoY3R4dCwgYy0+cmVnc1tWQ1BVX1JFR1NfUkNYXSwgbXNyX2RhdGEpKSB7CiAJCQllbXVsYXRlX2dwKGN0eHQsIDApOwogCQkJcmMgPSBYODZFTVVMX1BST1BBR0FURV9GQVVMVDsKIAkJCWdvdG8gZG9uZTsKQEAgLTM1NzQsNyArNDE5OCw3IEBACiAJCWJyZWFrOwogCWNhc2UgMHgzMjoKIAkJLyogcmRtc3IgKi8KLQkJaWYgKG9wcy0+Z2V0X21zcihjdHh0LT52Y3B1LCBjLT5yZWdzW1ZDUFVfUkVHU19SQ1hdLCAmbXNyX2RhdGEpKSB7CisJCWlmIChvcHMtPmdldF9tc3IoY3R4dCwgYy0+cmVnc1tWQ1BVX1JFR1NfUkNYXSwgJm1zcl9kYXRhKSkgewogCQkJZW11bGF0ZV9ncChjdHh0LCAwKTsKIAkJCXJjID0gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7CiAJCQlnb3RvIGRvbmU7CkBAIC0zNjAzLDcgKzQyMjcsNyBAQAogCQljLT5kc3QudmFsID0gdGVzdF9jYyhjLT5iLCBjdHh0LT5lZmxhZ3MpOwogCQlicmVhazsKIAljYXNlIDB4YTA6CSAgLyogcHVzaCBmcyAqLwotCQllbXVsYXRlX3B1c2hfc3JlZyhjdHh0LCBvcHMsIFZDUFVfU1JFR19GUyk7CisJCXJjID0gZW11bGF0ZV9wdXNoX3NyZWcoY3R4dCwgb3BzLCBWQ1BVX1NSRUdfRlMpOwogCQlicmVhazsKIAljYXNlIDB4YTE6CSAvKiBwb3AgZnMgKi8KIAkJcmMgPSBlbXVsYXRlX3BvcF9zcmVnKGN0eHQsIG9wcywgVkNQVV9TUkVHX0ZTKTsKQEAgLTM2MjAsNyArNDI0NCw3IEBACiAJCWVtdWxhdGVfMm9wX2NsKCJzaGxkIiwgYy0+c3JjMiwgYy0+c3JjLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7CiAJCWJyZWFrOwogCWNhc2UgMHhhODoJLyogcHVzaCBncyAqLwotCQllbXVsYXRlX3B1c2hfc3JlZyhjdHh0LCBvcHMsIFZDUFVfU1JFR19HUyk7CisJCXJjID0gZW11bGF0ZV9wdXNoX3NyZWcoY3R4dCwgb3BzLCBWQ1BVX1NSRUdfR1MpOwogCQlicmVhazsKIAljYXNlIDB4YTk6CS8qIHBvcCBncyAqLwogCQlyYyA9IGVtdWxhdGVfcG9wX3NyZWcoY3R4dCwgb3BzLCBWQ1BVX1NSRUdfR1MpOwpAQCAtMzcyNyw3ICs0MzUxLDcgQEAKIAkJCQkJCQkodTY0KSBjLT5zcmMudmFsOwogCQlicmVhazsKIAljYXNlIDB4Yzc6CQkvKiBHcnA5IChjbXB4Y2hnOGIpICovCi0JCXJjID0gZW11bGF0ZV9ncnA5KGN0eHQsIG9wcyk7CisJCXJjID0gZW1fZ3JwOShjdHh0KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZ290byBjYW5ub3RfZW11bGF0ZTsKQEAgLTM3MzksNSArNDM2Myw1IEBACiAJZ290byB3cml0ZWJhY2s7CiAKIGNhbm5vdF9lbXVsYXRlOgotCXJldHVybiAtMTsKKwlyZXR1cm4gRU1VTEFUSU9OX0ZBSUxFRDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9pODI1NC5oIGIvYXJjaC94ODYva3ZtL2k4MjU0LmgKaW5kZXggNDZkMDhjYS4uNTFhOTc0MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2k4MjU0LmgKKysrIGIvYXJjaC94ODYva3ZtL2k4MjU0LmgKQEAgLTMzLDcgKzMzLDYgQEAKIH07CiAKIHN0cnVjdCBrdm1fcGl0IHsKLQl1bnNpZ25lZCBsb25nIGJhc2VfYWRkcmVzc3M7CiAJc3RydWN0IGt2bV9pb19kZXZpY2UgZGV2OwogCXN0cnVjdCBrdm1faW9fZGV2aWNlIHNwZWFrZXJfZGV2OwogCXN0cnVjdCBrdm0gKmt2bTsKQEAgLTUxLDcgKzUwLDYgQEAKICNkZWZpbmUgS1ZNX01BWF9QSVRfSU5UUl9JTlRFUlZBTCAgIEhaIC8gMTAwCiAjZGVmaW5lIEtWTV9QSVRfQ0hBTk5FTF9NQVNLCSAgICAweDMKIAotdm9pZCBrdm1faW5qZWN0X3BpdF90aW1lcl9pcnFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIGt2bV9waXRfbG9hZF9jb3VudChzdHJ1Y3Qga3ZtICprdm0sIGludCBjaGFubmVsLCB1MzIgdmFsLCBpbnQgaHBldF9sZWdhY3lfc3RhcnQpOwogc3RydWN0IGt2bV9waXQgKmt2bV9jcmVhdGVfcGl0KHN0cnVjdCBrdm0gKmt2bSwgdTMyIGZsYWdzKTsKIHZvaWQga3ZtX2ZyZWVfcGl0KHN0cnVjdCBrdm0gKmt2bSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaXJxLmggYi9hcmNoL3g4Ni9rdm0vaXJxLmgKaW5kZXggYmE5MTBkMS4uNTNlMmQwOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2lycS5oCisrKyBiL2FyY2gveDg2L2t2bS9pcnEuaApAQCAtNzUsNyArNzUsNiBAQAogdm9pZCBrdm1fZGVzdHJveV9waWMoc3RydWN0IGt2bSAqa3ZtKTsKIGludCBrdm1fcGljX3JlYWRfaXJxKHN0cnVjdCBrdm0gKmt2bSk7CiB2b2lkIGt2bV9waWNfdXBkYXRlX2lycShzdHJ1Y3Qga3ZtX3BpYyAqcyk7Ci12b2lkIGt2bV9waWNfY2xlYXJfaXNyX2FjayhzdHJ1Y3Qga3ZtICprdm0pOwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fcGljICpwaWNfaXJxY2hpcChzdHJ1Y3Qga3ZtICprdm0pCiB7CkBAIC0xMDAsNyArOTksNiBAQAogdm9pZCBfX2t2bV9taWdyYXRlX3BpdF90aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBfX2t2bV9taWdyYXRlX3RpbWVycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCi1pbnQgcGl0X2hhc19wZW5kaW5nX3RpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBpbnQgYXBpY19oYXNfcGVuZGluZ190aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUuYwppbmRleCAyMmZhZTc1Li4yODQxODA1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11LmMKKysrIGIvYXJjaC94ODYva3ZtL21tdS5jCkBAIC0xMjA2LDcgKzEyMDYsNyBAQAogCiBzdGF0aWMgdm9pZCBub25wYWdpbmdfdXBkYXRlX3B0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkJIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwLCB1NjQgKnNwdGUsCi0JCQkJIGNvbnN0IHZvaWQgKnB0ZSwgdW5zaWduZWQgbG9uZyBtbXVfc2VxKQorCQkJCSBjb25zdCB2b2lkICpwdGUpCiB7CiAJV0FSTl9PTigxKTsKIH0KQEAgLTMxNjMsOSArMzE2Myw4IEBACiB9CiAKIHN0YXRpYyB2b2lkIG1tdV9wdGVfd3JpdGVfbmV3X3B0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQkJICBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCwKLQkJCQkgIHU2NCAqc3B0ZSwKLQkJCQkgIGNvbnN0IHZvaWQgKm5ldywgdW5zaWduZWQgbG9uZyBtbXVfc2VxKQorCQkJCSAgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsIHU2NCAqc3B0ZSwKKwkJCQkgIGNvbnN0IHZvaWQgKm5ldykKIHsKIAlpZiAoc3AtPnJvbGUubGV2ZWwgIT0gUFRfUEFHRV9UQUJMRV9MRVZFTCkgewogCQkrK3ZjcHUtPmt2bS0+c3RhdC5tbXVfcGRlX3phcHBlZDsKQEAgLTMxNzMsNyArMzE3Miw3IEBACiAgICAgICAgIH0KIAogCSsrdmNwdS0+a3ZtLT5zdGF0Lm1tdV9wdGVfdXBkYXRlZDsKLQl2Y3B1LT5hcmNoLm1tdS51cGRhdGVfcHRlKHZjcHUsIHNwLCBzcHRlLCBuZXcsIG1tdV9zZXEpOworCXZjcHUtPmFyY2gubW11LnVwZGF0ZV9wdGUodmNwdSwgc3AsIHNwdGUsIG5ldyk7CiB9CiAKIHN0YXRpYyBib29sIG5lZWRfcmVtb3RlX2ZsdXNoKHU2NCBvbGQsIHU2NCBuZXcpCkBAIC0zMjI5LDcgKzMyMjgsNiBAQAogCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwOwogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwogCUxJU1RfSEVBRChpbnZhbGlkX2xpc3QpOwotCXVuc2lnbmVkIGxvbmcgbW11X3NlcTsKIAl1NjQgZW50cnksIGdlbnRyeSwgKnNwdGU7CiAJdW5zaWduZWQgcHRlX3NpemUsIHBhZ2Vfb2Zmc2V0LCBtaXNhbGlnbmVkLCBxdWFkcmFudCwgb2Zmc2V0OwogCWludCBsZXZlbCwgbnB0ZSwgaW52bHBnX2NvdW50ZXIsIHIsIGZsb29kZWQgPSAwOwpAQCAtMzI3MSw5ICszMjY5LDYgQEAKIAkJYnJlYWs7CiAJfQogCi0JbW11X3NlcSA9IHZjcHUtPmt2bS0+bW11X25vdGlmaWVyX3NlcTsKLQlzbXBfcm1iKCk7Ci0KIAlzcGluX2xvY2soJnZjcHUtPmt2bS0+bW11X2xvY2spOwogCWlmIChhdG9taWNfcmVhZCgmdmNwdS0+a3ZtLT5hcmNoLmludmxwZ19jb3VudGVyKSAhPSBpbnZscGdfY291bnRlcikKIAkJZ2VudHJ5ID0gMDsKQEAgLTMzNDUsOCArMzM0MCw3IEBACiAJCQlpZiAoZ2VudHJ5ICYmCiAJCQkgICAgICAhKChzcC0+cm9sZS53b3JkIF4gdmNwdS0+YXJjaC5tbXUuYmFzZV9yb2xlLndvcmQpCiAJCQkgICAgICAmIG1hc2sud29yZCkpCi0JCQkJbW11X3B0ZV93cml0ZV9uZXdfcHRlKHZjcHUsIHNwLCBzcHRlLCAmZ2VudHJ5LAotCQkJCQkJICAgICAgbW11X3NlcSk7CisJCQkJbW11X3B0ZV93cml0ZV9uZXdfcHRlKHZjcHUsIHNwLCBzcHRlLCAmZ2VudHJ5KTsKIAkJCWlmICghcmVtb3RlX2ZsdXNoICYmIG5lZWRfcmVtb3RlX2ZsdXNoKGVudHJ5LCAqc3B0ZSkpCiAJCQkJcmVtb3RlX2ZsdXNoID0gdHJ1ZTsKIAkJCSsrc3B0ZTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oIGIvYXJjaC94ODYva3ZtL3BhZ2luZ190bXBsLmgKaW5kZXggYzYzOTc3OS4uNmM0ZGMwMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3BhZ2luZ190bXBsLmgKKysrIGIvYXJjaC94ODYva3ZtL3BhZ2luZ190bXBsLmgKQEAgLTc4LDE1ICs3OCwxOSBAQAogCXJldHVybiAoZ3B0ZSAmIFBUX0xWTF9BRERSX01BU0sobHZsKSkgPj4gUEFHRV9TSElGVDsKIH0KIAotc3RhdGljIGJvb2wgRk5BTUUoY21weGNoZ19ncHRlKShzdHJ1Y3Qga3ZtICprdm0sCi0JCQkgZ2ZuX3QgdGFibGVfZ2ZuLCB1bnNpZ25lZCBpbmRleCwKLQkJCSBwdF9lbGVtZW50X3Qgb3JpZ19wdGUsIHB0X2VsZW1lbnRfdCBuZXdfcHRlKQorc3RhdGljIGludCBGTkFNRShjbXB4Y2hnX2dwdGUpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXUgKm1tdSwKKwkJCSAgICAgICBwdF9lbGVtZW50X3QgX191c2VyICpwdGVwX3VzZXIsIHVuc2lnbmVkIGluZGV4LAorCQkJICAgICAgIHB0X2VsZW1lbnRfdCBvcmlnX3B0ZSwgcHRfZWxlbWVudF90IG5ld19wdGUpCiB7CisJaW50IG5wYWdlczsKIAlwdF9lbGVtZW50X3QgcmV0OwogCXB0X2VsZW1lbnRfdCAqdGFibGU7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKLQlwYWdlID0gZ2ZuX3RvX3BhZ2Uoa3ZtLCB0YWJsZV9nZm4pOworCW5wYWdlcyA9IGdldF91c2VyX3BhZ2VzX2Zhc3QoKHVuc2lnbmVkIGxvbmcpcHRlcF91c2VyLCAxLCAxLCAmcGFnZSk7CisJLyogQ2hlY2sgaWYgdGhlIHVzZXIgaXMgZG9pbmcgc29tZXRoaW5nIG1lYW5pbmdsZXNzLiAqLworCWlmICh1bmxpa2VseShucGFnZXMgIT0gMSkpCisJCXJldHVybiAtRUZBVUxUOwogCiAJdGFibGUgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CiAJcmV0ID0gQ01QWENIRygmdGFibGVbaW5kZXhdLCBvcmlnX3B0ZSwgbmV3X3B0ZSk7CkBAIC0xMTcsNiArMTIxLDcgQEAKIAkJCQkgICAgZ3ZhX3QgYWRkciwgdTMyIGFjY2VzcykKIHsKIAlwdF9lbGVtZW50X3QgcHRlOworCXB0X2VsZW1lbnRfdCBfX3VzZXIgKnB0ZXBfdXNlcjsKIAlnZm5fdCB0YWJsZV9nZm47CiAJdW5zaWduZWQgaW5kZXgsIHB0X2FjY2VzcywgdW5pbml0aWFsaXplZF92YXIocHRlX2FjY2Vzcyk7CiAJZ3BhX3QgcHRlX2dwYTsKQEAgLTE1Miw2ICsxNTcsOSBAQAogCXB0X2FjY2VzcyA9IEFDQ19BTEw7CiAKIAlmb3IgKDs7KSB7CisJCWdmbl90IHJlYWxfZ2ZuOworCQl1bnNpZ25lZCBsb25nIGhvc3RfYWRkcjsKKwogCQlpbmRleCA9IFBUX0lOREVYKGFkZHIsIHdhbGtlci0+bGV2ZWwpOwogCiAJCXRhYmxlX2dmbiA9IGdwdGVfdG9fZ2ZuKHB0ZSk7CkBAIC0xNjAsNDMgKzE2OCw2NCBAQAogCQl3YWxrZXItPnRhYmxlX2dmblt3YWxrZXItPmxldmVsIC0gMV0gPSB0YWJsZV9nZm47CiAJCXdhbGtlci0+cHRlX2dwYVt3YWxrZXItPmxldmVsIC0gMV0gPSBwdGVfZ3BhOwogCi0JCWlmIChrdm1fcmVhZF9ndWVzdF9wYWdlX21tdSh2Y3B1LCBtbXUsIHRhYmxlX2dmbiwgJnB0ZSwKLQkJCQkJICAgIG9mZnNldCwgc2l6ZW9mKHB0ZSksCi0JCQkJCSAgICBQRkVSUl9VU0VSX01BU0t8UEZFUlJfV1JJVEVfTUFTSykpIHsKKwkJcmVhbF9nZm4gPSBtbXUtPnRyYW5zbGF0ZV9ncGEodmNwdSwgZ2ZuX3RvX2dwYSh0YWJsZV9nZm4pLAorCQkJCQkgICAgICBQRkVSUl9VU0VSX01BU0t8UEZFUlJfV1JJVEVfTUFTSyk7CisJCWlmICh1bmxpa2VseShyZWFsX2dmbiA9PSBVTk1BUFBFRF9HVkEpKSB7CisJCQlwcmVzZW50ID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCQlyZWFsX2dmbiA9IGdwYV90b19nZm4ocmVhbF9nZm4pOworCisJCWhvc3RfYWRkciA9IGdmbl90b19odmEodmNwdS0+a3ZtLCByZWFsX2dmbik7CisJCWlmICh1bmxpa2VseShrdm1faXNfZXJyb3JfaHZhKGhvc3RfYWRkcikpKSB7CisJCQlwcmVzZW50ID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCisJCXB0ZXBfdXNlciA9IChwdF9lbGVtZW50X3QgX191c2VyICopKCh2b2lkICopaG9zdF9hZGRyICsgb2Zmc2V0KTsKKwkJaWYgKHVubGlrZWx5KF9fY29weV9mcm9tX3VzZXIoJnB0ZSwgcHRlcF91c2VyLCBzaXplb2YocHRlKSkpKSB7CiAJCQlwcmVzZW50ID0gZmFsc2U7CiAJCQlicmVhazsKIAkJfQogCiAJCXRyYWNlX2t2bV9tbXVfcGFnaW5nX2VsZW1lbnQocHRlLCB3YWxrZXItPmxldmVsKTsKIAotCQlpZiAoIWlzX3ByZXNlbnRfZ3B0ZShwdGUpKSB7CisJCWlmICh1bmxpa2VseSghaXNfcHJlc2VudF9ncHRlKHB0ZSkpKSB7CiAJCQlwcmVzZW50ID0gZmFsc2U7CiAJCQlicmVhazsKIAkJfQogCi0JCWlmIChpc19yc3ZkX2JpdHNfc2V0KCZ2Y3B1LT5hcmNoLm1tdSwgcHRlLCB3YWxrZXItPmxldmVsKSkgeworCQlpZiAodW5saWtlbHkoaXNfcnN2ZF9iaXRzX3NldCgmdmNwdS0+YXJjaC5tbXUsIHB0ZSwKKwkJCQkJICAgICAgd2Fsa2VyLT5sZXZlbCkpKSB7CiAJCQlyc3ZkX2ZhdWx0ID0gdHJ1ZTsKIAkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKHdyaXRlX2ZhdWx0ICYmICFpc193cml0YWJsZV9wdGUocHRlKSkKLQkJCWlmICh1c2VyX2ZhdWx0IHx8IGlzX3dyaXRlX3Byb3RlY3Rpb24odmNwdSkpCi0JCQkJZXBlcm0gPSB0cnVlOworCQlpZiAodW5saWtlbHkod3JpdGVfZmF1bHQgJiYgIWlzX3dyaXRhYmxlX3B0ZShwdGUpCisJCQkgICAgICYmICh1c2VyX2ZhdWx0IHx8IGlzX3dyaXRlX3Byb3RlY3Rpb24odmNwdSkpKSkKKwkJCWVwZXJtID0gdHJ1ZTsKIAotCQlpZiAodXNlcl9mYXVsdCAmJiAhKHB0ZSAmIFBUX1VTRVJfTUFTSykpCisJCWlmICh1bmxpa2VseSh1c2VyX2ZhdWx0ICYmICEocHRlICYgUFRfVVNFUl9NQVNLKSkpCiAJCQllcGVybSA9IHRydWU7CiAKICNpZiBQVFRZUEUgPT0gNjQKLQkJaWYgKGZldGNoX2ZhdWx0ICYmIChwdGUgJiBQVDY0X05YX01BU0spKQorCQlpZiAodW5saWtlbHkoZmV0Y2hfZmF1bHQgJiYgKHB0ZSAmIFBUNjRfTlhfTUFTSykpKQogCQkJZXBlcm0gPSB0cnVlOwogI2VuZGlmCiAKLQkJaWYgKCFlcGVybSAmJiAhcnN2ZF9mYXVsdCAmJiAhKHB0ZSAmIFBUX0FDQ0VTU0VEX01BU0spKSB7CisJCWlmICghZXBlcm0gJiYgIXJzdmRfZmF1bHQKKwkJICAgICYmIHVubGlrZWx5KCEocHRlICYgUFRfQUNDRVNTRURfTUFTSykpKSB7CisJCQlpbnQgcmV0OwogCQkJdHJhY2Vfa3ZtX21tdV9zZXRfYWNjZXNzZWRfYml0KHRhYmxlX2dmbiwgaW5kZXgsCiAJCQkJCQkgICAgICAgc2l6ZW9mKHB0ZSkpOwotCQkJaWYgKEZOQU1FKGNtcHhjaGdfZ3B0ZSkodmNwdS0+a3ZtLCB0YWJsZV9nZm4sCi0JCQkgICAgaW5kZXgsIHB0ZSwgcHRlfFBUX0FDQ0VTU0VEX01BU0spKQorCQkJcmV0ID0gRk5BTUUoY21weGNoZ19ncHRlKSh2Y3B1LCBtbXUsIHB0ZXBfdXNlciwgaW5kZXgsCisJCQkJCQkgIHB0ZSwgcHRlfFBUX0FDQ0VTU0VEX01BU0spOworCQkJaWYgKHVubGlrZWx5KHJldCA8IDApKSB7CisJCQkJcHJlc2VudCA9IGZhbHNlOworCQkJCWJyZWFrOworCQkJfSBlbHNlIGlmIChyZXQpCiAJCQkJZ290byB3YWxrOworCiAJCQltYXJrX3BhZ2VfZGlydHkodmNwdS0+a3ZtLCB0YWJsZV9nZm4pOwogCQkJcHRlIHw9IFBUX0FDQ0VTU0VEX01BU0s7CiAJCX0KQEAgLTI0MSwxNyArMjcwLDIxIEBACiAJCS0td2Fsa2VyLT5sZXZlbDsKIAl9CiAKLQlpZiAoIXByZXNlbnQgfHwgZXBlcm0gfHwgcnN2ZF9mYXVsdCkKKwlpZiAodW5saWtlbHkoIXByZXNlbnQgfHwgZXBlcm0gfHwgcnN2ZF9mYXVsdCkpCiAJCWdvdG8gZXJyb3I7CiAKLQlpZiAod3JpdGVfZmF1bHQgJiYgIWlzX2RpcnR5X2dwdGUocHRlKSkgewotCQlib29sIHJldDsKKwlpZiAod3JpdGVfZmF1bHQgJiYgdW5saWtlbHkoIWlzX2RpcnR5X2dwdGUocHRlKSkpIHsKKwkJaW50IHJldDsKIAogCQl0cmFjZV9rdm1fbW11X3NldF9kaXJ0eV9iaXQodGFibGVfZ2ZuLCBpbmRleCwgc2l6ZW9mKHB0ZSkpOwotCQlyZXQgPSBGTkFNRShjbXB4Y2hnX2dwdGUpKHZjcHUtPmt2bSwgdGFibGVfZ2ZuLCBpbmRleCwgcHRlLAotCQkJICAgIHB0ZXxQVF9ESVJUWV9NQVNLKTsKLQkJaWYgKHJldCkKKwkJcmV0ID0gRk5BTUUoY21weGNoZ19ncHRlKSh2Y3B1LCBtbXUsIHB0ZXBfdXNlciwgaW5kZXgsCisJCQkJCSAgcHRlLCBwdGV8UFRfRElSVFlfTUFTSyk7CisJCWlmICh1bmxpa2VseShyZXQgPCAwKSkgeworCQkJcHJlc2VudCA9IGZhbHNlOworCQkJZ290byBlcnJvcjsKKwkJfSBlbHNlIGlmIChyZXQpCiAJCQlnb3RvIHdhbGs7CisKIAkJbWFya19wYWdlX2RpcnR5KHZjcHUtPmt2bSwgdGFibGVfZ2ZuKTsKIAkJcHRlIHw9IFBUX0RJUlRZX01BU0s7CiAJCXdhbGtlci0+cHRlc1t3YWxrZXItPmxldmVsIC0gMV0gPSBwdGU7CkBAIC0zMjUsNyArMzU4LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgRk5BTUUodXBkYXRlX3B0ZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCwKLQkJCSAgICAgIHU2NCAqc3B0ZSwgY29uc3Qgdm9pZCAqcHRlLCB1bnNpZ25lZCBsb25nIG1tdV9zZXEpCisJCQkgICAgICB1NjQgKnNwdGUsIGNvbnN0IHZvaWQgKnB0ZSkKIHsKIAlwdF9lbGVtZW50X3QgZ3B0ZTsKIAl1bnNpZ25lZCBwdGVfYWNjZXNzOwpAQCAtMzQyLDggKzM3NSw2IEBACiAJCWt2bV9yZWxlYXNlX3Bmbl9jbGVhbihwZm4pOwogCQlyZXR1cm47CiAJfQotCWlmIChtbXVfbm90aWZpZXJfcmV0cnkodmNwdSwgbW11X3NlcSkpCi0JCXJldHVybjsKIAogCS8qCiAJICogd2UgY2FsbCBtbXVfc2V0X3NwdGUoKSB3aXRoIGhvc3Rfd3JpdGFibGUgPSB0cnVlIGJlY2F1c2UgdGhhdApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS5jCmluZGV4IDZiYjE1ZDUuLjUwNmU0ZmUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0uYworKysgYi9hcmNoL3g4Ni9rdm0vc3ZtLmMKQEAgLTYzLDYgKzYzLDEwIEBACiAKICNkZWZpbmUgREVCVUdDVExfUkVTRVJWRURfQklUUyAofigweDNmVUxMKSkKIAorI2RlZmluZSBUU0NfUkFUSU9fUlNWRCAgICAgICAgICAweGZmZmZmZjAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgVFNDX1JBVElPX01JTgkJMHgwMDAwMDAwMDAwMDAwMDAxVUxMCisjZGVmaW5lIFRTQ19SQVRJT19NQVgJCTB4MDAwMDAwZmZmZmZmZmZmZlVMTAorCiBzdGF0aWMgYm9vbCBlcnJhdHVtXzM4M19mb3VuZCBfX3JlYWRfbW9zdGx5OwogCiBzdGF0aWMgY29uc3QgdTMyIGhvc3Rfc2F2ZV91c2VyX21zcnNbXSA9IHsKQEAgLTkzLDE0ICs5Nyw2IEBACiAJLyogQSBWTUVYSVQgaXMgcmVxdWlyZWQgYnV0IG5vdCB5ZXQgZW11bGF0ZWQgKi8KIAlib29sIGV4aXRfcmVxdWlyZWQ7CiAKLQkvKgotCSAqIElmIHdlIHZtZXhpdCBkdXJpbmcgYW4gaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIHdlIG5lZWQgdGhpcyB0byByZXN0b3JlCi0JICogdGhlIGwxIGd1ZXN0IHJpcCBhZnRlciB0aGUgZW11bGF0aW9uCi0JICovCi0JdW5zaWduZWQgbG9uZyB2bWV4aXRfcmlwOwotCXVuc2lnbmVkIGxvbmcgdm1leGl0X3JzcDsKLQl1bnNpZ25lZCBsb25nIHZtZXhpdF9yYXg7Ci0KIAkvKiBjYWNoZSBmb3IgaW50ZXJjZXB0cyBvZiB0aGUgZ3Vlc3QgKi8KIAl1MzIgaW50ZXJjZXB0X2NyOwogCXUzMiBpbnRlcmNlcHRfZHI7CkBAIC0xNDQsOCArMTQwLDEzIEBACiAJdW5zaWduZWQgaW50M19pbmplY3RlZDsKIAl1bnNpZ25lZCBsb25nIGludDNfcmlwOwogCXUzMiBhcGZfcmVhc29uOworCisJdTY0ICB0c2NfcmF0aW87CiB9OwogCitzdGF0aWMgREVGSU5FX1BFUl9DUFUodTY0LCBjdXJyZW50X3RzY19yYXRpbyk7CisjZGVmaW5lIFRTQ19SQVRJT19ERUZBVUxUCTB4MDEwMDAwMDAwMFVMTAorCiAjZGVmaW5lIE1TUl9JTlZBTElECQkJMHhmZmZmZmZmZlUKIAogc3RhdGljIHN0cnVjdCBzdm1fZGlyZWN0X2FjY2Vzc19tc3JzIHsKQEAgLTE5MCw2ICsxOTEsNyBAQAogc3RhdGljIGludCBuZXN0ZWRfc3ZtX3ZtZXhpdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7CiBzdGF0aWMgaW50IG5lc3RlZF9zdm1fY2hlY2tfZXhjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB1bnNpZ25lZCBuciwKIAkJCQkgICAgICBib29sIGhhc19lcnJvcl9jb2RlLCB1MzIgZXJyb3JfY29kZSk7CitzdGF0aWMgdTY0IF9fc2NhbGVfdHNjKHU2NCByYXRpbywgdTY0IHRzYyk7CiAKIGVudW0gewogCVZNQ0JfSU5URVJDRVBUUywgLyogSW50ZXJjZXB0IHZlY3RvcnMsIFRTQyBvZmZzZXQsCkBAIC0zNzYsNyArMzc4LDYgQEAKIH07CiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc3ZtX2NwdV9kYXRhICosIHN2bV9kYXRhKTsKLXN0YXRpYyB1aW50MzJfdCBzdm1fZmVhdHVyZXM7CiAKIHN0cnVjdCBzdm1faW5pdF9kYXRhIHsKIAlpbnQgY3B1OwpAQCAtNTY5LDYgKzU3MCwxMCBAQAogCiBzdGF0aWMgdm9pZCBzdm1faGFyZHdhcmVfZGlzYWJsZSh2b2lkICpnYXJiYWdlKQogeworCS8qIE1ha2Ugc3VyZSB3ZSBjbGVhbiB1cCBiZWhpbmQgdXMgKi8KKwlpZiAoc3RhdGljX2NwdV9oYXMoWDg2X0ZFQVRVUkVfVFNDUkFURU1TUikpCisJCXdybXNybChNU1JfQU1ENjRfVFNDX1JBVElPLCBUU0NfUkFUSU9fREVGQVVMVCk7CisKIAljcHVfc3ZtX2Rpc2FibGUoKTsKIH0KIApAQCAtNjEwLDYgKzYxNSwxMSBAQAogCiAJd3Jtc3JsKE1TUl9WTV9IU0FWRV9QQSwgcGFnZV90b19wZm4oc2QtPnNhdmVfYXJlYSkgPDwgUEFHRV9TSElGVCk7CiAKKwlpZiAoc3RhdGljX2NwdV9oYXMoWDg2X0ZFQVRVUkVfVFNDUkFURU1TUikpIHsKKwkJd3Jtc3JsKE1TUl9BTUQ2NF9UU0NfUkFUSU8sIFRTQ19SQVRJT19ERUZBVUxUKTsKKwkJX19nZXRfY3B1X3ZhcihjdXJyZW50X3RzY19yYXRpbykgPSBUU0NfUkFUSU9fREVGQVVMVDsKKwl9CisKIAlzdm1faW5pdF9lcnJhdHVtXzM4MygpOwogCiAJcmV0dXJuIDA7CkBAIC03OTEsNiArODAxLDIzIEBACiAJaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9GWFNSX09QVCkpCiAJCWt2bV9lbmFibGVfZWZlcl9iaXRzKEVGRVJfRkZYU1IpOwogCisJaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9UU0NSQVRFTVNSKSkgeworCQl1NjQgbWF4OworCisJCWt2bV9oYXNfdHNjX2NvbnRyb2wgPSB0cnVlOworCisJCS8qCisJCSAqIE1ha2Ugc3VyZSB0aGUgdXNlciBjYW4gb25seSBjb25maWd1cmUgdHNjX2toeiB2YWx1ZXMgdGhhdAorCQkgKiBmaXQgaW50byBhIHNpZ25lZCBpbnRlZ2VyLgorCQkgKiBBIG1pbiB2YWx1ZSBpcyBub3QgY2FsY3VsYXRlZCBuZWVkZWQgYmVjYXVzZSBpdCB3aWxsIGFsd2F5cworCQkgKiBiZSAxIG9uIGFsbCBtYWNoaW5lcyBhbmQgYSB2YWx1ZSBvZiAwIGlzIHVzZWQgdG8gZGlzYWJsZQorCQkgKiB0c2Mtc2NhbGluZyBmb3IgdGhlIHZjcHUuCisJCSAqLworCQltYXggPSBtaW4oMHg3ZmZmZmZmZlVMTCwgX19zY2FsZV90c2ModHNjX2toeiwgVFNDX1JBVElPX01BWCkpOworCisJCWt2bV9tYXhfZ3Vlc3RfdHNjX2toeiA9IG1heDsKKwl9CisKIAlpZiAobmVzdGVkKSB7CiAJCXByaW50ayhLRVJOX0lORk8gImt2bTogTmVzdGVkIFZpcnR1YWxpemF0aW9uIGVuYWJsZWRcbiIpOwogCQlrdm1fZW5hYmxlX2VmZXJfYml0cyhFRkVSX1NWTUUgfCBFRkVSX0xNU0xFKTsKQEAgLTgwMiw4ICs4MjksNiBAQAogCQkJZ290byBlcnI7CiAJfQogCi0Jc3ZtX2ZlYXR1cmVzID0gY3B1aWRfZWR4KFNWTV9DUFVJRF9GVU5DKTsKLQogCWlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX05QVCkpCiAJCW5wdF9lbmFibGVkID0gZmFsc2U7CiAKQEAgLTg1NCw2ICs4NzksNjQgQEAKIAlzZWctPmJhc2UgPSAwOwogfQogCitzdGF0aWMgdTY0IF9fc2NhbGVfdHNjKHU2NCByYXRpbywgdTY0IHRzYykKK3sKKwl1NjQgbXVsdCwgZnJhYywgX3RzYzsKKworCW11bHQgID0gcmF0aW8gPj4gMzI7CisJZnJhYyAgPSByYXRpbyAmICgoMVVMTCA8PCAzMikgLSAxKTsKKworCV90c2MgID0gdHNjOworCV90c2MgKj0gbXVsdDsKKwlfdHNjICs9ICh0c2MgPj4gMzIpICogZnJhYzsKKwlfdHNjICs9ICgodHNjICYgKCgxVUxMIDw8IDMyKSAtIDEpKSAqIGZyYWMpID4+IDMyOworCisJcmV0dXJuIF90c2M7Cit9CisKK3N0YXRpYyB1NjQgc3ZtX3NjYWxlX3RzYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB0c2MpCit7CisJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CisJdTY0IF90c2MgPSB0c2M7CisKKwlpZiAoc3ZtLT50c2NfcmF0aW8gIT0gVFNDX1JBVElPX0RFRkFVTFQpCisJCV90c2MgPSBfX3NjYWxlX3RzYyhzdm0tPnRzY19yYXRpbywgdHNjKTsKKworCXJldHVybiBfdHNjOworfQorCitzdGF0aWMgdm9pZCBzdm1fc2V0X3RzY19raHooc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdXNlcl90c2Nfa2h6KQoreworCXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOworCXU2NCByYXRpbzsKKwl1NjQga2h6OworCisJLyogVFNDIHNjYWxpbmcgc3VwcG9ydGVkPyAqLworCWlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1RTQ1JBVEVNU1IpKQorCQlyZXR1cm47CisKKwkvKiBUU0MtU2NhbGluZyBkaXNhYmxlZCBvciBndWVzdCBUU0Mgc2FtZSBmcmVxdWVuY3kgYXMgaG9zdCBUU0M/ICovCisJaWYgKHVzZXJfdHNjX2toeiA9PSAwKSB7CisJCXZjcHUtPmFyY2gudmlydHVhbF90c2Nfa2h6ID0gMDsKKwkJc3ZtLT50c2NfcmF0aW8gPSBUU0NfUkFUSU9fREVGQVVMVDsKKwkJcmV0dXJuOworCX0KKworCWtoeiA9IHVzZXJfdHNjX2toejsKKworCS8qIFRTQyBzY2FsaW5nIHJlcXVpcmVkICAtIGNhbGN1bGF0ZSByYXRpbyAqLworCXJhdGlvID0ga2h6IDw8IDMyOworCWRvX2RpdihyYXRpbywgdHNjX2toeik7CisKKwlpZiAocmF0aW8gPT0gMCB8fCByYXRpbyAmIFRTQ19SQVRJT19SU1ZEKSB7CisJCVdBUk5fT05DRSgxLCAiSW52YWxpZCBUU0MgcmF0aW8gLSB2aXJ0dWFsLXRzYy1raHo9JXVcbiIsCisJCQkJdXNlcl90c2Nfa2h6KTsKKwkJcmV0dXJuOworCX0KKwl2Y3B1LT5hcmNoLnZpcnR1YWxfdHNjX2toeiA9IHVzZXJfdHNjX2toejsKKwlzdm0tPnRzY19yYXRpbyAgICAgICAgICAgICA9IHJhdGlvOworfQorCiBzdGF0aWMgdm9pZCBzdm1fd3JpdGVfdHNjX29mZnNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBvZmZzZXQpCiB7CiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CkBAIC04ODAsNiArOTYzLDE1IEBACiAJbWFya19kaXJ0eShzdm0tPnZtY2IsIFZNQ0JfSU5URVJDRVBUUyk7CiB9CiAKK3N0YXRpYyB1NjQgc3ZtX2NvbXB1dGVfdHNjX29mZnNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB0YXJnZXRfdHNjKQoreworCXU2NCB0c2M7CisKKwl0c2MgPSBzdm1fc2NhbGVfdHNjKHZjcHUsIG5hdGl2ZV9yZWFkX3RzYygpKTsKKworCXJldHVybiB0YXJnZXRfdHNjIC0gdHNjOworfQorCiBzdGF0aWMgdm9pZCBpbml0X3ZtY2Ioc3RydWN0IHZjcHVfc3ZtICpzdm0pCiB7CiAJc3RydWN0IHZtY2JfY29udHJvbF9hcmVhICpjb250cm9sID0gJnN2bS0+dm1jYi0+Y29udHJvbDsKQEAgLTk3NSw3ICsxMDY3LDcgQEAKIAlzdm1fc2V0X2VmZXIoJnN2bS0+dmNwdSwgMCk7CiAJc2F2ZS0+ZHI2ID0gMHhmZmZmMGZmMDsKIAlzYXZlLT5kcjcgPSAweDQwMDsKLQlzYXZlLT5yZmxhZ3MgPSAyOworCWt2bV9zZXRfcmZsYWdzKCZzdm0tPnZjcHUsIDIpOwogCXNhdmUtPnJpcCA9IDB4MDAwMGZmZjA7CiAJc3ZtLT52Y3B1LmFyY2gucmVnc1tWQ1BVX1JFR1NfUklQXSA9IHNhdmUtPnJpcDsKIApAQCAtMTA0OCw2ICsxMTQwLDggQEAKIAkJZ290byBvdXQ7CiAJfQogCisJc3ZtLT50c2NfcmF0aW8gPSBUU0NfUkFUSU9fREVGQVVMVDsKKwogCWVyciA9IGt2bV92Y3B1X2luaXQoJnN2bS0+dmNwdSwga3ZtLCBpZCk7CiAJaWYgKGVycikKIAkJZ290byBmcmVlX3N2bTsKQEAgLTExNDEsNiArMTIzNSwxMiBAQAogCiAJZm9yIChpID0gMDsgaSA8IE5SX0hPU1RfU0FWRV9VU0VSX01TUlM7IGkrKykKIAkJcmRtc3JsKGhvc3Rfc2F2ZV91c2VyX21zcnNbaV0sIHN2bS0+aG9zdF91c2VyX21zcnNbaV0pOworCisJaWYgKHN0YXRpY19jcHVfaGFzKFg4Nl9GRUFUVVJFX1RTQ1JBVEVNU1IpICYmCisJICAgIHN2bS0+dHNjX3JhdGlvICE9IF9fZ2V0X2NwdV92YXIoY3VycmVudF90c2NfcmF0aW8pKSB7CisJCV9fZ2V0X2NwdV92YXIoY3VycmVudF90c2NfcmF0aW8pID0gc3ZtLT50c2NfcmF0aW87CisJCXdybXNybChNU1JfQU1ENjRfVFNDX1JBVElPLCBzdm0tPnRzY19yYXRpbyk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBzdm1fdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMTM2NSwzMSArMTQ2NSw2IEBACiB7CiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CiAKLQlpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSkgewotCQkvKgotCQkgKiBXZSBhcmUgaGVyZSBiZWNhdXNlIHdlIHJ1biBpbiBuZXN0ZWQgbW9kZSwgdGhlIGhvc3Qga3ZtCi0JCSAqIGludGVyY2VwdHMgY3IwIHdyaXRlcyBidXQgdGhlIGwxIGh5cGVydmlzb3IgZG9lcyBub3QuCi0JCSAqIEJ1dCB0aGUgTDEgaHlwZXJ2aXNvciBtYXkgaW50ZXJjZXB0IHNlbGVjdGl2ZSBjcjAgd3JpdGVzLgotCQkgKiBUaGlzIG5lZWRzIHRvIGJlIGNoZWNrZWQgaGVyZS4KLQkJICovCi0JCXVuc2lnbmVkIGxvbmcgb2xkLCBuZXc7Ci0KLQkJLyogUmVtb3ZlIGJpdHMgdGhhdCB3b3VsZCB0cmlnZ2VyIGEgcmVhbCBjcjAgd3JpdGUgaW50ZXJjZXB0ICovCi0JCW9sZCA9IHZjcHUtPmFyY2guY3IwICYgU1ZNX0NSMF9TRUxFQ1RJVkVfTUFTSzsKLQkJbmV3ID0gY3IwICYgU1ZNX0NSMF9TRUxFQ1RJVkVfTUFTSzsKLQotCQlpZiAob2xkID09IG5ldykgewotCQkJLyogY3IwIHdyaXRlIHdpdGggdHMgYW5kIG1wIHVuY2hhbmdlZCAqLwotCQkJc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfY29kZSA9IFNWTV9FWElUX0NSMF9TRUxfV1JJVEU7Ci0JCQlpZiAobmVzdGVkX3N2bV9leGl0X2hhbmRsZWQoc3ZtKSA9PSBORVNURURfRVhJVF9ET05FKSB7Ci0JCQkJc3ZtLT5uZXN0ZWQudm1leGl0X3JpcCA9IGt2bV9yaXBfcmVhZCh2Y3B1KTsKLQkJCQlzdm0tPm5lc3RlZC52bWV4aXRfcnNwID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JTUCk7Ci0JCQkJc3ZtLT5uZXN0ZWQudm1leGl0X3JheCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQVgpOwotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCX0KLQogI2lmZGVmIENPTkZJR19YODZfNjQKIAlpZiAodmNwdS0+YXJjaC5lZmVyICYgRUZFUl9MTUUpIHsKIAkJaWYgKCFpc19wYWdpbmcodmNwdSkgJiYgKGNyMCAmIFg4Nl9DUjBfUEcpKSB7CkBAIC0yMTI3LDcgKzIyMDIsNyBAQAogCW5lc3RlZF92bWNiLT5zYXZlLmNyMyAgICA9IGt2bV9yZWFkX2NyMygmc3ZtLT52Y3B1KTsKIAluZXN0ZWRfdm1jYi0+c2F2ZS5jcjIgICAgPSB2bWNiLT5zYXZlLmNyMjsKIAluZXN0ZWRfdm1jYi0+c2F2ZS5jcjQgICAgPSBzdm0tPnZjcHUuYXJjaC5jcjQ7Ci0JbmVzdGVkX3ZtY2ItPnNhdmUucmZsYWdzID0gdm1jYi0+c2F2ZS5yZmxhZ3M7CisJbmVzdGVkX3ZtY2ItPnNhdmUucmZsYWdzID0ga3ZtX2dldF9yZmxhZ3MoJnN2bS0+dmNwdSk7CiAJbmVzdGVkX3ZtY2ItPnNhdmUucmlwICAgID0gdm1jYi0+c2F2ZS5yaXA7CiAJbmVzdGVkX3ZtY2ItPnNhdmUucnNwICAgID0gdm1jYi0+c2F2ZS5yc3A7CiAJbmVzdGVkX3ZtY2ItPnNhdmUucmF4ICAgID0gdm1jYi0+c2F2ZS5yYXg7CkBAIC0yMTg0LDcgKzIyNTksNyBAQAogCXN2bS0+dm1jYi0+c2F2ZS5kcyA9IGhzYXZlLT5zYXZlLmRzOwogCXN2bS0+dm1jYi0+c2F2ZS5nZHRyID0gaHNhdmUtPnNhdmUuZ2R0cjsKIAlzdm0tPnZtY2ItPnNhdmUuaWR0ciA9IGhzYXZlLT5zYXZlLmlkdHI7Ci0Jc3ZtLT52bWNiLT5zYXZlLnJmbGFncyA9IGhzYXZlLT5zYXZlLnJmbGFnczsKKwlrdm1fc2V0X3JmbGFncygmc3ZtLT52Y3B1LCBoc2F2ZS0+c2F2ZS5yZmxhZ3MpOwogCXN2bV9zZXRfZWZlcigmc3ZtLT52Y3B1LCBoc2F2ZS0+c2F2ZS5lZmVyKTsKIAlzdm1fc2V0X2NyMCgmc3ZtLT52Y3B1LCBoc2F2ZS0+c2F2ZS5jcjAgfCBYODZfQ1IwX1BFKTsKIAlzdm1fc2V0X2NyNCgmc3ZtLT52Y3B1LCBoc2F2ZS0+c2F2ZS5jcjQpOwpAQCAtMjMxMiw3ICsyMzg3LDcgQEAKIAloc2F2ZS0+c2F2ZS5lZmVyICAgPSBzdm0tPnZjcHUuYXJjaC5lZmVyOwogCWhzYXZlLT5zYXZlLmNyMCAgICA9IGt2bV9yZWFkX2NyMCgmc3ZtLT52Y3B1KTsKIAloc2F2ZS0+c2F2ZS5jcjQgICAgPSBzdm0tPnZjcHUuYXJjaC5jcjQ7Ci0JaHNhdmUtPnNhdmUucmZsYWdzID0gdm1jYi0+c2F2ZS5yZmxhZ3M7CisJaHNhdmUtPnNhdmUucmZsYWdzID0ga3ZtX2dldF9yZmxhZ3MoJnN2bS0+dmNwdSk7CiAJaHNhdmUtPnNhdmUucmlwICAgID0ga3ZtX3JpcF9yZWFkKCZzdm0tPnZjcHUpOwogCWhzYXZlLT5zYXZlLnJzcCAgICA9IHZtY2ItPnNhdmUucnNwOwogCWhzYXZlLT5zYXZlLnJheCAgICA9IHZtY2ItPnNhdmUucmF4OwpAQCAtMjMyMyw3ICsyMzk4LDcgQEAKIAogCWNvcHlfdm1jYl9jb250cm9sX2FyZWEoaHNhdmUsIHZtY2IpOwogCi0JaWYgKHN2bS0+dm1jYi0+c2F2ZS5yZmxhZ3MgJiBYODZfRUZMQUdTX0lGKQorCWlmIChrdm1fZ2V0X3JmbGFncygmc3ZtLT52Y3B1KSAmIFg4Nl9FRkxBR1NfSUYpCiAJCXN2bS0+dmNwdS5hcmNoLmhmbGFncyB8PSBIRl9ISUZfTUFTSzsKIAllbHNlCiAJCXN2bS0+dmNwdS5hcmNoLmhmbGFncyAmPSB+SEZfSElGX01BU0s7CkBAIC0yMzQxLDcgKzI0MTYsNyBAQAogCXN2bS0+dm1jYi0+c2F2ZS5kcyA9IG5lc3RlZF92bWNiLT5zYXZlLmRzOwogCXN2bS0+dm1jYi0+c2F2ZS5nZHRyID0gbmVzdGVkX3ZtY2ItPnNhdmUuZ2R0cjsKIAlzdm0tPnZtY2ItPnNhdmUuaWR0ciA9IG5lc3RlZF92bWNiLT5zYXZlLmlkdHI7Ci0Jc3ZtLT52bWNiLT5zYXZlLnJmbGFncyA9IG5lc3RlZF92bWNiLT5zYXZlLnJmbGFnczsKKwlrdm1fc2V0X3JmbGFncygmc3ZtLT52Y3B1LCBuZXN0ZWRfdm1jYi0+c2F2ZS5yZmxhZ3MpOwogCXN2bV9zZXRfZWZlcigmc3ZtLT52Y3B1LCBuZXN0ZWRfdm1jYi0+c2F2ZS5lZmVyKTsKIAlzdm1fc2V0X2NyMCgmc3ZtLT52Y3B1LCBuZXN0ZWRfdm1jYi0+c2F2ZS5jcjApOwogCXN2bV9zZXRfY3I0KCZzdm0tPnZjcHUsIG5lc3RlZF92bWNiLT5zYXZlLmNyNCk7CkBAIC0yNDQzLDEzICsyNTE4LDEzIEBACiAJaWYgKG5lc3RlZF9zdm1fY2hlY2tfcGVybWlzc2lvbnMoc3ZtKSkKIAkJcmV0dXJuIDE7CiAKLQlzdm0tPm5leHRfcmlwID0ga3ZtX3JpcF9yZWFkKCZzdm0tPnZjcHUpICsgMzsKLQlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKCZzdm0tPnZjcHUpOwotCiAJbmVzdGVkX3ZtY2IgPSBuZXN0ZWRfc3ZtX21hcChzdm0sIHN2bS0+dm1jYi0+c2F2ZS5yYXgsICZwYWdlKTsKIAlpZiAoIW5lc3RlZF92bWNiKQogCQlyZXR1cm4gMTsKIAorCXN2bS0+bmV4dF9yaXAgPSBrdm1fcmlwX3JlYWQoJnN2bS0+dmNwdSkgKyAzOworCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oJnN2bS0+dmNwdSk7CisKIAluZXN0ZWRfc3ZtX3ZtbG9hZHNhdmUobmVzdGVkX3ZtY2IsIHN2bS0+dm1jYik7CiAJbmVzdGVkX3N2bV91bm1hcChwYWdlKTsKIApAQCAtMjQ2NCwxMyArMjUzOSwxMyBAQAogCWlmIChuZXN0ZWRfc3ZtX2NoZWNrX3Blcm1pc3Npb25zKHN2bSkpCiAJCXJldHVybiAxOwogCi0Jc3ZtLT5uZXh0X3JpcCA9IGt2bV9yaXBfcmVhZCgmc3ZtLT52Y3B1KSArIDM7Ci0Jc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbigmc3ZtLT52Y3B1KTsKLQogCW5lc3RlZF92bWNiID0gbmVzdGVkX3N2bV9tYXAoc3ZtLCBzdm0tPnZtY2ItPnNhdmUucmF4LCAmcGFnZSk7CiAJaWYgKCFuZXN0ZWRfdm1jYikKIAkJcmV0dXJuIDE7CiAKKwlzdm0tPm5leHRfcmlwID0ga3ZtX3JpcF9yZWFkKCZzdm0tPnZjcHUpICsgMzsKKwlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKCZzdm0tPnZjcHUpOworCiAJbmVzdGVkX3N2bV92bWxvYWRzYXZlKHN2bS0+dm1jYiwgbmVzdGVkX3ZtY2IpOwogCW5lc3RlZF9zdm1fdW5tYXAocGFnZSk7CiAKQEAgLTI2NzYsNiArMjc1MSwyOSBAQAogCXJldHVybiBlbXVsYXRlX2luc3RydWN0aW9uKCZzdm0tPnZjcHUsIDApID09IEVNVUxBVEVfRE9ORTsKIH0KIAorYm9vbCBjaGVja19zZWxlY3RpdmVfY3IwX2ludGVyY2VwdGVkKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIGNyMCA9IHN2bS0+dmNwdS5hcmNoLmNyMDsKKwlib29sIHJldCA9IGZhbHNlOworCXU2NCBpbnRlcmNlcHQ7CisKKwlpbnRlcmNlcHQgPSBzdm0tPm5lc3RlZC5pbnRlcmNlcHQ7CisKKwlpZiAoIWlzX2d1ZXN0X21vZGUoJnN2bS0+dmNwdSkgfHwKKwkgICAgKCEoaW50ZXJjZXB0ICYgKDFVTEwgPDwgSU5URVJDRVBUX1NFTEVDVElWRV9DUjApKSkpCisJCXJldHVybiBmYWxzZTsKKworCWNyMCAmPSB+U1ZNX0NSMF9TRUxFQ1RJVkVfTUFTSzsKKwl2YWwgJj0gflNWTV9DUjBfU0VMRUNUSVZFX01BU0s7CisKKwlpZiAoY3IwIF4gdmFsKSB7CisJCXN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2NvZGUgPSBTVk1fRVhJVF9DUjBfU0VMX1dSSVRFOworCQlyZXQgPSAobmVzdGVkX3N2bV9leGl0X2hhbmRsZWQoc3ZtKSA9PSBORVNURURfRVhJVF9ET05FKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCiAjZGVmaW5lIENSX1ZBTElEICgxVUxMIDw8IDYzKQogCiBzdGF0aWMgaW50IGNyX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKQEAgLTI2OTksNyArMjc5NywxMSBAQAogCQl2YWwgPSBrdm1fcmVnaXN0ZXJfcmVhZCgmc3ZtLT52Y3B1LCByZWcpOwogCQlzd2l0Y2ggKGNyKSB7CiAJCWNhc2UgMDoKLQkJCWVyciA9IGt2bV9zZXRfY3IwKCZzdm0tPnZjcHUsIHZhbCk7CisJCQlpZiAoIWNoZWNrX3NlbGVjdGl2ZV9jcjBfaW50ZXJjZXB0ZWQoc3ZtLCB2YWwpKQorCQkJCWVyciA9IGt2bV9zZXRfY3IwKCZzdm0tPnZjcHUsIHZhbCk7CisJCQllbHNlCisJCQkJcmV0dXJuIDE7CisKIAkJCWJyZWFrOwogCQljYXNlIDM6CiAJCQllcnIgPSBrdm1fc2V0X2NyMygmc3ZtLT52Y3B1LCB2YWwpOwpAQCAtMjc0NCwyMyArMjg0Niw2IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgY3IwX3dyaXRlX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKLXsKLQlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSAmc3ZtLT52Y3B1OwotCWludCByOwotCi0JciA9IGNyX2ludGVyY2VwdGlvbihzdm0pOwotCi0JaWYgKHN2bS0+bmVzdGVkLnZtZXhpdF9yaXApIHsKLQkJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SSVAsIHN2bS0+bmVzdGVkLnZtZXhpdF9yaXApOwotCQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JTUCwgc3ZtLT5uZXN0ZWQudm1leGl0X3JzcCk7Ci0JCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkFYLCBzdm0tPm5lc3RlZC52bWV4aXRfcmF4KTsKLQkJc3ZtLT5uZXN0ZWQudm1leGl0X3JpcCA9IDA7Ci0JfQotCi0JcmV0dXJuIHI7Ci19Ci0KIHN0YXRpYyBpbnQgZHJfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQogewogCWludCByZWcsIGRyOwpAQCAtMjgxMyw3ICsyODk4LDkgQEAKIAljYXNlIE1TUl9JQTMyX1RTQzogewogCQlzdHJ1Y3Qgdm1jYiAqdm1jYiA9IGdldF9ob3N0X3ZtY2Ioc3ZtKTsKIAotCQkqZGF0YSA9IHZtY2ItPmNvbnRyb2wudHNjX29mZnNldCArIG5hdGl2ZV9yZWFkX3RzYygpOworCQkqZGF0YSA9IHZtY2ItPmNvbnRyb2wudHNjX29mZnNldCArCisJCQlzdm1fc2NhbGVfdHNjKHZjcHUsIG5hdGl2ZV9yZWFkX3RzYygpKTsKKwogCQlicmVhazsKIAl9CiAJY2FzZSBNU1JfU1RBUjoKQEAgLTMwNDgsNyArMzEzNSw3IEBACiAJW1NWTV9FWElUX1JFQURfQ1I0XQkJCT0gY3JfaW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9SRUFEX0NSOF0JCQk9IGNyX2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfQ1IwX1NFTF9XUklURV0JCT0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCi0JW1NWTV9FWElUX1dSSVRFX0NSMF0JCQk9IGNyMF93cml0ZV9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX1dSSVRFX0NSMF0JCQk9IGNyX2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfV1JJVEVfQ1IzXQkJCT0gY3JfaW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9XUklURV9DUjRdCQkJPSBjcl9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX1dSSVRFX0NSOF0JCQk9IGNyOF93cml0ZV9pbnRlcmNlcHRpb24sCkBAIC0zMTA0LDk3ICszMTkxLDEwOSBAQAogCVtTVk1fRVhJVF9OUEZdCQkJCT0gcGZfaW50ZXJjZXB0aW9uLAogfTsKIAotdm9pZCBkdW1wX3ZtY2Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQorc3RhdGljIHZvaWQgZHVtcF92bWNiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKIAlzdHJ1Y3Qgdm1jYl9jb250cm9sX2FyZWEgKmNvbnRyb2wgPSAmc3ZtLT52bWNiLT5jb250cm9sOwogCXN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqc2F2ZSA9ICZzdm0tPnZtY2ItPnNhdmU7CiAKIAlwcl9lcnIoIlZNQ0IgQ29udHJvbCBBcmVhOlxuIik7Ci0JcHJfZXJyKCJjcl9yZWFkOiAgICAgICAgICAgICUwNHhcbiIsIGNvbnRyb2wtPmludGVyY2VwdF9jciAmIDB4ZmZmZik7Ci0JcHJfZXJyKCJjcl93cml0ZTogICAgICAgICAgICUwNHhcbiIsIGNvbnRyb2wtPmludGVyY2VwdF9jciA+PiAxNik7Ci0JcHJfZXJyKCJkcl9yZWFkOiAgICAgICAgICAgICUwNHhcbiIsIGNvbnRyb2wtPmludGVyY2VwdF9kciAmIDB4ZmZmZik7Ci0JcHJfZXJyKCJkcl93cml0ZTogICAgICAgICAgICUwNHhcbiIsIGNvbnRyb2wtPmludGVyY2VwdF9kciA+PiAxNik7Ci0JcHJfZXJyKCJleGNlcHRpb25zOiAgICAgICAgICUwOHhcbiIsIGNvbnRyb2wtPmludGVyY2VwdF9leGNlcHRpb25zKTsKLQlwcl9lcnIoImludGVyY2VwdHM6ICAgICAgICAgJTAxNmxseFxuIiwgY29udHJvbC0+aW50ZXJjZXB0KTsKLQlwcl9lcnIoInBhdXNlIGZpbHRlciBjb3VudDogJWRcbiIsIGNvbnRyb2wtPnBhdXNlX2ZpbHRlcl9jb3VudCk7Ci0JcHJfZXJyKCJpb3BtX2Jhc2VfcGE6ICAgICAgICUwMTZsbHhcbiIsIGNvbnRyb2wtPmlvcG1fYmFzZV9wYSk7Ci0JcHJfZXJyKCJtc3JwbV9iYXNlX3BhOiAgICAgICUwMTZsbHhcbiIsIGNvbnRyb2wtPm1zcnBtX2Jhc2VfcGEpOwotCXByX2VycigidHNjX29mZnNldDogICAgICAgICAlMDE2bGx4XG4iLCBjb250cm9sLT50c2Nfb2Zmc2V0KTsKLQlwcl9lcnIoImFzaWQ6ICAgICAgICAgICAgICAgJWRcbiIsIGNvbnRyb2wtPmFzaWQpOwotCXByX2VycigidGxiX2N0bDogICAgICAgICAgICAlZFxuIiwgY29udHJvbC0+dGxiX2N0bCk7Ci0JcHJfZXJyKCJpbnRfY3RsOiAgICAgICAgICAgICUwOHhcbiIsIGNvbnRyb2wtPmludF9jdGwpOwotCXByX2VycigiaW50X3ZlY3RvcjogICAgICAgICAlMDh4XG4iLCBjb250cm9sLT5pbnRfdmVjdG9yKTsKLQlwcl9lcnIoImludF9zdGF0ZTogICAgICAgICAgJTA4eFxuIiwgY29udHJvbC0+aW50X3N0YXRlKTsKLQlwcl9lcnIoImV4aXRfY29kZTogICAgICAgICAgJTA4eFxuIiwgY29udHJvbC0+ZXhpdF9jb2RlKTsKLQlwcl9lcnIoImV4aXRfaW5mbzE6ICAgICAgICAgJTAxNmxseFxuIiwgY29udHJvbC0+ZXhpdF9pbmZvXzEpOwotCXByX2VycigiZXhpdF9pbmZvMjogICAgICAgICAlMDE2bGx4XG4iLCBjb250cm9sLT5leGl0X2luZm9fMik7Ci0JcHJfZXJyKCJleGl0X2ludF9pbmZvOiAgICAgICUwOHhcbiIsIGNvbnRyb2wtPmV4aXRfaW50X2luZm8pOwotCXByX2VycigiZXhpdF9pbnRfaW5mb19lcnI6ICAlMDh4XG4iLCBjb250cm9sLT5leGl0X2ludF9pbmZvX2Vycik7Ci0JcHJfZXJyKCJuZXN0ZWRfY3RsOiAgICAgICAgICVsbGRcbiIsIGNvbnRyb2wtPm5lc3RlZF9jdGwpOwotCXByX2VycigibmVzdGVkX2NyMzogICAgICAgICAlMDE2bGx4XG4iLCBjb250cm9sLT5uZXN0ZWRfY3IzKTsKLQlwcl9lcnIoImV2ZW50X2luajogICAgICAgICAgJTA4eFxuIiwgY29udHJvbC0+ZXZlbnRfaW5qKTsKLQlwcl9lcnIoImV2ZW50X2lual9lcnI6ICAgICAgJTA4eFxuIiwgY29udHJvbC0+ZXZlbnRfaW5qX2Vycik7Ci0JcHJfZXJyKCJsYnJfY3RsOiAgICAgICAgICAgICVsbGRcbiIsIGNvbnRyb2wtPmxicl9jdGwpOwotCXByX2VycigibmV4dF9yaXA6ICAgICAgICAgICAlMDE2bGx4XG4iLCBjb250cm9sLT5uZXh0X3JpcCk7CisJcHJfZXJyKCIlLTIwcyUwNHhcbiIsICJjcl9yZWFkOiIsIGNvbnRyb2wtPmludGVyY2VwdF9jciAmIDB4ZmZmZik7CisJcHJfZXJyKCIlLTIwcyUwNHhcbiIsICJjcl93cml0ZToiLCBjb250cm9sLT5pbnRlcmNlcHRfY3IgPj4gMTYpOworCXByX2VycigiJS0yMHMlMDR4XG4iLCAiZHJfcmVhZDoiLCBjb250cm9sLT5pbnRlcmNlcHRfZHIgJiAweGZmZmYpOworCXByX2VycigiJS0yMHMlMDR4XG4iLCAiZHJfd3JpdGU6IiwgY29udHJvbC0+aW50ZXJjZXB0X2RyID4+IDE2KTsKKwlwcl9lcnIoIiUtMjBzJTA4eFxuIiwgImV4Y2VwdGlvbnM6IiwgY29udHJvbC0+aW50ZXJjZXB0X2V4Y2VwdGlvbnMpOworCXByX2VycigiJS0yMHMlMDE2bGx4XG4iLCAiaW50ZXJjZXB0czoiLCBjb250cm9sLT5pbnRlcmNlcHQpOworCXByX2VycigiJS0yMHMlZFxuIiwgInBhdXNlIGZpbHRlciBjb3VudDoiLCBjb250cm9sLT5wYXVzZV9maWx0ZXJfY291bnQpOworCXByX2VycigiJS0yMHMlMDE2bGx4XG4iLCAiaW9wbV9iYXNlX3BhOiIsIGNvbnRyb2wtPmlvcG1fYmFzZV9wYSk7CisJcHJfZXJyKCIlLTIwcyUwMTZsbHhcbiIsICJtc3JwbV9iYXNlX3BhOiIsIGNvbnRyb2wtPm1zcnBtX2Jhc2VfcGEpOworCXByX2VycigiJS0yMHMlMDE2bGx4XG4iLCAidHNjX29mZnNldDoiLCBjb250cm9sLT50c2Nfb2Zmc2V0KTsKKwlwcl9lcnIoIiUtMjBzJWRcbiIsICJhc2lkOiIsIGNvbnRyb2wtPmFzaWQpOworCXByX2VycigiJS0yMHMlZFxuIiwgInRsYl9jdGw6IiwgY29udHJvbC0+dGxiX2N0bCk7CisJcHJfZXJyKCIlLTIwcyUwOHhcbiIsICJpbnRfY3RsOiIsIGNvbnRyb2wtPmludF9jdGwpOworCXByX2VycigiJS0yMHMlMDh4XG4iLCAiaW50X3ZlY3RvcjoiLCBjb250cm9sLT5pbnRfdmVjdG9yKTsKKwlwcl9lcnIoIiUtMjBzJTA4eFxuIiwgImludF9zdGF0ZToiLCBjb250cm9sLT5pbnRfc3RhdGUpOworCXByX2VycigiJS0yMHMlMDh4XG4iLCAiZXhpdF9jb2RlOiIsIGNvbnRyb2wtPmV4aXRfY29kZSk7CisJcHJfZXJyKCIlLTIwcyUwMTZsbHhcbiIsICJleGl0X2luZm8xOiIsIGNvbnRyb2wtPmV4aXRfaW5mb18xKTsKKwlwcl9lcnIoIiUtMjBzJTAxNmxseFxuIiwgImV4aXRfaW5mbzI6IiwgY29udHJvbC0+ZXhpdF9pbmZvXzIpOworCXByX2VycigiJS0yMHMlMDh4XG4iLCAiZXhpdF9pbnRfaW5mbzoiLCBjb250cm9sLT5leGl0X2ludF9pbmZvKTsKKwlwcl9lcnIoIiUtMjBzJTA4eFxuIiwgImV4aXRfaW50X2luZm9fZXJyOiIsIGNvbnRyb2wtPmV4aXRfaW50X2luZm9fZXJyKTsKKwlwcl9lcnIoIiUtMjBzJWxsZFxuIiwgIm5lc3RlZF9jdGw6IiwgY29udHJvbC0+bmVzdGVkX2N0bCk7CisJcHJfZXJyKCIlLTIwcyUwMTZsbHhcbiIsICJuZXN0ZWRfY3IzOiIsIGNvbnRyb2wtPm5lc3RlZF9jcjMpOworCXByX2VycigiJS0yMHMlMDh4XG4iLCAiZXZlbnRfaW5qOiIsIGNvbnRyb2wtPmV2ZW50X2luaik7CisJcHJfZXJyKCIlLTIwcyUwOHhcbiIsICJldmVudF9pbmpfZXJyOiIsIGNvbnRyb2wtPmV2ZW50X2lual9lcnIpOworCXByX2VycigiJS0yMHMlbGxkXG4iLCAibGJyX2N0bDoiLCBjb250cm9sLT5sYnJfY3RsKTsKKwlwcl9lcnIoIiUtMjBzJTAxNmxseFxuIiwgIm5leHRfcmlwOiIsIGNvbnRyb2wtPm5leHRfcmlwKTsKIAlwcl9lcnIoIlZNQ0IgU3RhdGUgU2F2ZSBBcmVhOlxuIik7Ci0JcHJfZXJyKCJlczogICBzOiAlMDR4IGE6ICUwNHggbDogJTA4eCBiOiAlMDE2bGx4XG4iLAotCQlzYXZlLT5lcy5zZWxlY3Rvciwgc2F2ZS0+ZXMuYXR0cmliLAotCQlzYXZlLT5lcy5saW1pdCwgc2F2ZS0+ZXMuYmFzZSk7Ci0JcHJfZXJyKCJjczogICBzOiAlMDR4IGE6ICUwNHggbDogJTA4eCBiOiAlMDE2bGx4XG4iLAotCQlzYXZlLT5jcy5zZWxlY3Rvciwgc2F2ZS0+Y3MuYXR0cmliLAotCQlzYXZlLT5jcy5saW1pdCwgc2F2ZS0+Y3MuYmFzZSk7Ci0JcHJfZXJyKCJzczogICBzOiAlMDR4IGE6ICUwNHggbDogJTA4eCBiOiAlMDE2bGx4XG4iLAotCQlzYXZlLT5zcy5zZWxlY3Rvciwgc2F2ZS0+c3MuYXR0cmliLAotCQlzYXZlLT5zcy5saW1pdCwgc2F2ZS0+c3MuYmFzZSk7Ci0JcHJfZXJyKCJkczogICBzOiAlMDR4IGE6ICUwNHggbDogJTA4eCBiOiAlMDE2bGx4XG4iLAotCQlzYXZlLT5kcy5zZWxlY3Rvciwgc2F2ZS0+ZHMuYXR0cmliLAotCQlzYXZlLT5kcy5saW1pdCwgc2F2ZS0+ZHMuYmFzZSk7Ci0JcHJfZXJyKCJmczogICBzOiAlMDR4IGE6ICUwNHggbDogJTA4eCBiOiAlMDE2bGx4XG4iLAotCQlzYXZlLT5mcy5zZWxlY3Rvciwgc2F2ZS0+ZnMuYXR0cmliLAotCQlzYXZlLT5mcy5saW1pdCwgc2F2ZS0+ZnMuYmFzZSk7Ci0JcHJfZXJyKCJnczogICBzOiAlMDR4IGE6ICUwNHggbDogJTA4eCBiOiAlMDE2bGx4XG4iLAotCQlzYXZlLT5ncy5zZWxlY3Rvciwgc2F2ZS0+Z3MuYXR0cmliLAotCQlzYXZlLT5ncy5saW1pdCwgc2F2ZS0+Z3MuYmFzZSk7Ci0JcHJfZXJyKCJnZHRyOiBzOiAlMDR4IGE6ICUwNHggbDogJTA4eCBiOiAlMDE2bGx4XG4iLAotCQlzYXZlLT5nZHRyLnNlbGVjdG9yLCBzYXZlLT5nZHRyLmF0dHJpYiwKLQkJc2F2ZS0+Z2R0ci5saW1pdCwgc2F2ZS0+Z2R0ci5iYXNlKTsKLQlwcl9lcnIoImxkdHI6IHM6ICUwNHggYTogJTA0eCBsOiAlMDh4IGI6ICUwMTZsbHhcbiIsCi0JCXNhdmUtPmxkdHIuc2VsZWN0b3IsIHNhdmUtPmxkdHIuYXR0cmliLAotCQlzYXZlLT5sZHRyLmxpbWl0LCBzYXZlLT5sZHRyLmJhc2UpOwotCXByX2VycigiaWR0cjogczogJTA0eCBhOiAlMDR4IGw6ICUwOHggYjogJTAxNmxseFxuIiwKLQkJc2F2ZS0+aWR0ci5zZWxlY3Rvciwgc2F2ZS0+aWR0ci5hdHRyaWIsCi0JCXNhdmUtPmlkdHIubGltaXQsIHNhdmUtPmlkdHIuYmFzZSk7Ci0JcHJfZXJyKCJ0cjogICBzOiAlMDR4IGE6ICUwNHggbDogJTA4eCBiOiAlMDE2bGx4XG4iLAotCQlzYXZlLT50ci5zZWxlY3Rvciwgc2F2ZS0+dHIuYXR0cmliLAotCQlzYXZlLT50ci5saW1pdCwgc2F2ZS0+dHIuYmFzZSk7CisJcHJfZXJyKCIlLTVzIHM6ICUwNHggYTogJTA0eCBsOiAlMDh4IGI6ICUwMTZsbHhcbiIsCisJICAgICAgICJlczoiLAorCSAgICAgICBzYXZlLT5lcy5zZWxlY3Rvciwgc2F2ZS0+ZXMuYXR0cmliLAorCSAgICAgICBzYXZlLT5lcy5saW1pdCwgc2F2ZS0+ZXMuYmFzZSk7CisJcHJfZXJyKCIlLTVzIHM6ICUwNHggYTogJTA0eCBsOiAlMDh4IGI6ICUwMTZsbHhcbiIsCisJICAgICAgICJjczoiLAorCSAgICAgICBzYXZlLT5jcy5zZWxlY3Rvciwgc2F2ZS0+Y3MuYXR0cmliLAorCSAgICAgICBzYXZlLT5jcy5saW1pdCwgc2F2ZS0+Y3MuYmFzZSk7CisJcHJfZXJyKCIlLTVzIHM6ICUwNHggYTogJTA0eCBsOiAlMDh4IGI6ICUwMTZsbHhcbiIsCisJICAgICAgICJzczoiLAorCSAgICAgICBzYXZlLT5zcy5zZWxlY3Rvciwgc2F2ZS0+c3MuYXR0cmliLAorCSAgICAgICBzYXZlLT5zcy5saW1pdCwgc2F2ZS0+c3MuYmFzZSk7CisJcHJfZXJyKCIlLTVzIHM6ICUwNHggYTogJTA0eCBsOiAlMDh4IGI6ICUwMTZsbHhcbiIsCisJICAgICAgICJkczoiLAorCSAgICAgICBzYXZlLT5kcy5zZWxlY3Rvciwgc2F2ZS0+ZHMuYXR0cmliLAorCSAgICAgICBzYXZlLT5kcy5saW1pdCwgc2F2ZS0+ZHMuYmFzZSk7CisJcHJfZXJyKCIlLTVzIHM6ICUwNHggYTogJTA0eCBsOiAlMDh4IGI6ICUwMTZsbHhcbiIsCisJICAgICAgICJmczoiLAorCSAgICAgICBzYXZlLT5mcy5zZWxlY3Rvciwgc2F2ZS0+ZnMuYXR0cmliLAorCSAgICAgICBzYXZlLT5mcy5saW1pdCwgc2F2ZS0+ZnMuYmFzZSk7CisJcHJfZXJyKCIlLTVzIHM6ICUwNHggYTogJTA0eCBsOiAlMDh4IGI6ICUwMTZsbHhcbiIsCisJICAgICAgICJnczoiLAorCSAgICAgICBzYXZlLT5ncy5zZWxlY3Rvciwgc2F2ZS0+Z3MuYXR0cmliLAorCSAgICAgICBzYXZlLT5ncy5saW1pdCwgc2F2ZS0+Z3MuYmFzZSk7CisJcHJfZXJyKCIlLTVzIHM6ICUwNHggYTogJTA0eCBsOiAlMDh4IGI6ICUwMTZsbHhcbiIsCisJICAgICAgICJnZHRyOiIsCisJICAgICAgIHNhdmUtPmdkdHIuc2VsZWN0b3IsIHNhdmUtPmdkdHIuYXR0cmliLAorCSAgICAgICBzYXZlLT5nZHRyLmxpbWl0LCBzYXZlLT5nZHRyLmJhc2UpOworCXByX2VycigiJS01cyBzOiAlMDR4IGE6ICUwNHggbDogJTA4eCBiOiAlMDE2bGx4XG4iLAorCSAgICAgICAibGR0cjoiLAorCSAgICAgICBzYXZlLT5sZHRyLnNlbGVjdG9yLCBzYXZlLT5sZHRyLmF0dHJpYiwKKwkgICAgICAgc2F2ZS0+bGR0ci5saW1pdCwgc2F2ZS0+bGR0ci5iYXNlKTsKKwlwcl9lcnIoIiUtNXMgczogJTA0eCBhOiAlMDR4IGw6ICUwOHggYjogJTAxNmxseFxuIiwKKwkgICAgICAgImlkdHI6IiwKKwkgICAgICAgc2F2ZS0+aWR0ci5zZWxlY3Rvciwgc2F2ZS0+aWR0ci5hdHRyaWIsCisJICAgICAgIHNhdmUtPmlkdHIubGltaXQsIHNhdmUtPmlkdHIuYmFzZSk7CisJcHJfZXJyKCIlLTVzIHM6ICUwNHggYTogJTA0eCBsOiAlMDh4IGI6ICUwMTZsbHhcbiIsCisJICAgICAgICJ0cjoiLAorCSAgICAgICBzYXZlLT50ci5zZWxlY3Rvciwgc2F2ZS0+dHIuYXR0cmliLAorCSAgICAgICBzYXZlLT50ci5saW1pdCwgc2F2ZS0+dHIuYmFzZSk7CiAJcHJfZXJyKCJjcGw6ICAgICAgICAgICAgJWQgICAgICAgICAgICAgICAgZWZlcjogICAgICAgICAlMDE2bGx4XG4iLAogCQlzYXZlLT5jcGwsIHNhdmUtPmVmZXIpOwotCXByX2VycigiY3IwOiAgICAgICAgICAgICUwMTZsbHggY3IyOiAgICAgICAgICAlMDE2bGx4XG4iLAotCQlzYXZlLT5jcjAsIHNhdmUtPmNyMik7Ci0JcHJfZXJyKCJjcjM6ICAgICAgICAgICAgJTAxNmxseCBjcjQ6ICAgICAgICAgICUwMTZsbHhcbiIsCi0JCXNhdmUtPmNyMywgc2F2ZS0+Y3I0KTsKLQlwcl9lcnIoImRyNjogICAgICAgICAgICAlMDE2bGx4IGRyNzogICAgICAgICAgJTAxNmxseFxuIiwKLQkJc2F2ZS0+ZHI2LCBzYXZlLT5kcjcpOwotCXByX2VycigicmlwOiAgICAgICAgICAgICUwMTZsbHggcmZsYWdzOiAgICAgICAlMDE2bGx4XG4iLAotCQlzYXZlLT5yaXAsIHNhdmUtPnJmbGFncyk7Ci0JcHJfZXJyKCJyc3A6ICAgICAgICAgICAgJTAxNmxseCByYXg6ICAgICAgICAgICUwMTZsbHhcbiIsCi0JCXNhdmUtPnJzcCwgc2F2ZS0+cmF4KTsKLQlwcl9lcnIoInN0YXI6ICAgICAgICAgICAlMDE2bGx4IGxzdGFyOiAgICAgICAgJTAxNmxseFxuIiwKLQkJc2F2ZS0+c3Rhciwgc2F2ZS0+bHN0YXIpOwotCXByX2VycigiY3N0YXI6ICAgICAgICAgICUwMTZsbHggc2ZtYXNrOiAgICAgICAlMDE2bGx4XG4iLAotCQlzYXZlLT5jc3Rhciwgc2F2ZS0+c2ZtYXNrKTsKLQlwcl9lcnIoImtlcm5lbF9nc19iYXNlOiAlMDE2bGx4IHN5c2VudGVyX2NzOiAgJTAxNmxseFxuIiwKLQkJc2F2ZS0+a2VybmVsX2dzX2Jhc2UsIHNhdmUtPnN5c2VudGVyX2NzKTsKLQlwcl9lcnIoInN5c2VudGVyX2VzcDogICAlMDE2bGx4IHN5c2VudGVyX2VpcDogJTAxNmxseFxuIiwKLQkJc2F2ZS0+c3lzZW50ZXJfZXNwLCBzYXZlLT5zeXNlbnRlcl9laXApOwotCXByX2VycigiZ3BhdDogICAgICAgICAgICUwMTZsbHggZGJnY3RsOiAgICAgICAlMDE2bGx4XG4iLAotCQlzYXZlLT5nX3BhdCwgc2F2ZS0+ZGJnY3RsKTsKLQlwcl9lcnIoImJyX2Zyb206ICAgICAgICAlMDE2bGx4IGJyX3RvOiAgICAgICAgJTAxNmxseFxuIiwKLQkJc2F2ZS0+YnJfZnJvbSwgc2F2ZS0+YnJfdG8pOwotCXByX2VycigiZXhjcF9mcm9tOiAgICAgICUwMTZsbHggZXhjcF90bzogICAgICAlMDE2bGx4XG4iLAotCQlzYXZlLT5sYXN0X2V4Y3BfZnJvbSwgc2F2ZS0+bGFzdF9leGNwX3RvKTsKLQorCXByX2VycigiJS0xNXMgJTAxNmxseCAlLTEzcyAlMDE2bGx4XG4iLAorCSAgICAgICAiY3IwOiIsIHNhdmUtPmNyMCwgImNyMjoiLCBzYXZlLT5jcjIpOworCXByX2VycigiJS0xNXMgJTAxNmxseCAlLTEzcyAlMDE2bGx4XG4iLAorCSAgICAgICAiY3IzOiIsIHNhdmUtPmNyMywgImNyNDoiLCBzYXZlLT5jcjQpOworCXByX2VycigiJS0xNXMgJTAxNmxseCAlLTEzcyAlMDE2bGx4XG4iLAorCSAgICAgICAiZHI2OiIsIHNhdmUtPmRyNiwgImRyNzoiLCBzYXZlLT5kcjcpOworCXByX2VycigiJS0xNXMgJTAxNmxseCAlLTEzcyAlMDE2bGx4XG4iLAorCSAgICAgICAicmlwOiIsIHNhdmUtPnJpcCwgInJmbGFnczoiLCBzYXZlLT5yZmxhZ3MpOworCXByX2VycigiJS0xNXMgJTAxNmxseCAlLTEzcyAlMDE2bGx4XG4iLAorCSAgICAgICAicnNwOiIsIHNhdmUtPnJzcCwgInJheDoiLCBzYXZlLT5yYXgpOworCXByX2VycigiJS0xNXMgJTAxNmxseCAlLTEzcyAlMDE2bGx4XG4iLAorCSAgICAgICAic3RhcjoiLCBzYXZlLT5zdGFyLCAibHN0YXI6Iiwgc2F2ZS0+bHN0YXIpOworCXByX2VycigiJS0xNXMgJTAxNmxseCAlLTEzcyAlMDE2bGx4XG4iLAorCSAgICAgICAiY3N0YXI6Iiwgc2F2ZS0+Y3N0YXIsICJzZm1hc2s6Iiwgc2F2ZS0+c2ZtYXNrKTsKKwlwcl9lcnIoIiUtMTVzICUwMTZsbHggJS0xM3MgJTAxNmxseFxuIiwKKwkgICAgICAgImtlcm5lbF9nc19iYXNlOiIsIHNhdmUtPmtlcm5lbF9nc19iYXNlLAorCSAgICAgICAic3lzZW50ZXJfY3M6Iiwgc2F2ZS0+c3lzZW50ZXJfY3MpOworCXByX2VycigiJS0xNXMgJTAxNmxseCAlLTEzcyAlMDE2bGx4XG4iLAorCSAgICAgICAic3lzZW50ZXJfZXNwOiIsIHNhdmUtPnN5c2VudGVyX2VzcCwKKwkgICAgICAgInN5c2VudGVyX2VpcDoiLCBzYXZlLT5zeXNlbnRlcl9laXApOworCXByX2VycigiJS0xNXMgJTAxNmxseCAlLTEzcyAlMDE2bGx4XG4iLAorCSAgICAgICAiZ3BhdDoiLCBzYXZlLT5nX3BhdCwgImRiZ2N0bDoiLCBzYXZlLT5kYmdjdGwpOworCXByX2VycigiJS0xNXMgJTAxNmxseCAlLTEzcyAlMDE2bGx4XG4iLAorCSAgICAgICAiYnJfZnJvbToiLCBzYXZlLT5icl9mcm9tLCAiYnJfdG86Iiwgc2F2ZS0+YnJfdG8pOworCXByX2VycigiJS0xNXMgJTAxNmxseCAlLTEzcyAlMDE2bGx4XG4iLAorCSAgICAgICAiZXhjcF9mcm9tOiIsIHNhdmUtPmxhc3RfZXhjcF9mcm9tLAorCSAgICAgICAiZXhjcF90bzoiLCBzYXZlLT5sYXN0X2V4Y3BfdG8pOwogfQogCiBzdGF0aWMgdm9pZCBzdm1fZ2V0X2V4aXRfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqaW5mbzEsIHU2NCAqaW5mbzIpCkBAIC0zMzg0LDcgKzM0ODMsNyBAQAogCSAgICAgKHZtY2ItPmNvbnRyb2wuaW50X3N0YXRlICYgU1ZNX0lOVEVSUlVQVF9TSEFET1dfTUFTSykpCiAJCXJldHVybiAwOwogCi0JcmV0ID0gISEodm1jYi0+c2F2ZS5yZmxhZ3MgJiBYODZfRUZMQUdTX0lGKTsKKwlyZXQgPSAhIShrdm1fZ2V0X3JmbGFncyh2Y3B1KSAmIFg4Nl9FRkxBR1NfSUYpOwogCiAJaWYgKGlzX2d1ZXN0X21vZGUodmNwdSkpCiAJCXJldHVybiByZXQgJiYgIShzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgJiBIRl9WSU5UUl9NQVNLKTsKQEAgLTM4NzEsNiArMzk3MCwxODYgQEAKIAl1cGRhdGVfY3IwX2ludGVyY2VwdChzdm0pOwogfQogCisjZGVmaW5lIFBSRV9FWChleGl0KSAgeyAuZXhpdF9jb2RlID0gKGV4aXQpLCBcCisJCQkuc3RhZ2UgPSBYODZfSUNQVF9QUkVfRVhDRVBULCB9CisjZGVmaW5lIFBPU1RfRVgoZXhpdCkgeyAuZXhpdF9jb2RlID0gKGV4aXQpLCBcCisJCQkuc3RhZ2UgPSBYODZfSUNQVF9QT1NUX0VYQ0VQVCwgfQorI2RlZmluZSBQT1NUX01FTShleGl0KSB7IC5leGl0X2NvZGUgPSAoZXhpdCksIFwKKwkJCS5zdGFnZSA9IFg4Nl9JQ1BUX1BPU1RfTUVNQUNDRVNTLCB9CisKK3N0YXRpYyBzdHJ1Y3QgX194ODZfaW50ZXJjZXB0IHsKKwl1MzIgZXhpdF9jb2RlOworCWVudW0geDg2X2ludGVyY2VwdF9zdGFnZSBzdGFnZTsKK30geDg2X2ludGVyY2VwdF9tYXBbXSA9IHsKKwlbeDg2X2ludGVyY2VwdF9jcl9yZWFkXQkJPSBQT1NUX0VYKFNWTV9FWElUX1JFQURfQ1IwKSwKKwlbeDg2X2ludGVyY2VwdF9jcl93cml0ZV0JPSBQT1NUX0VYKFNWTV9FWElUX1dSSVRFX0NSMCksCisJW3g4Nl9pbnRlcmNlcHRfY2x0c10JCT0gUE9TVF9FWChTVk1fRVhJVF9XUklURV9DUjApLAorCVt4ODZfaW50ZXJjZXB0X2xtc3ddCQk9IFBPU1RfRVgoU1ZNX0VYSVRfV1JJVEVfQ1IwKSwKKwlbeDg2X2ludGVyY2VwdF9zbXN3XQkJPSBQT1NUX0VYKFNWTV9FWElUX1JFQURfQ1IwKSwKKwlbeDg2X2ludGVyY2VwdF9kcl9yZWFkXQkJPSBQT1NUX0VYKFNWTV9FWElUX1JFQURfRFIwKSwKKwlbeDg2X2ludGVyY2VwdF9kcl93cml0ZV0JPSBQT1NUX0VYKFNWTV9FWElUX1dSSVRFX0RSMCksCisJW3g4Nl9pbnRlcmNlcHRfc2xkdF0JCT0gUE9TVF9FWChTVk1fRVhJVF9MRFRSX1JFQUQpLAorCVt4ODZfaW50ZXJjZXB0X3N0cl0JCT0gUE9TVF9FWChTVk1fRVhJVF9UUl9SRUFEKSwKKwlbeDg2X2ludGVyY2VwdF9sbGR0XQkJPSBQT1NUX0VYKFNWTV9FWElUX0xEVFJfV1JJVEUpLAorCVt4ODZfaW50ZXJjZXB0X2x0cl0JCT0gUE9TVF9FWChTVk1fRVhJVF9UUl9XUklURSksCisJW3g4Nl9pbnRlcmNlcHRfc2dkdF0JCT0gUE9TVF9FWChTVk1fRVhJVF9HRFRSX1JFQUQpLAorCVt4ODZfaW50ZXJjZXB0X3NpZHRdCQk9IFBPU1RfRVgoU1ZNX0VYSVRfSURUUl9SRUFEKSwKKwlbeDg2X2ludGVyY2VwdF9sZ2R0XQkJPSBQT1NUX0VYKFNWTV9FWElUX0dEVFJfV1JJVEUpLAorCVt4ODZfaW50ZXJjZXB0X2xpZHRdCQk9IFBPU1RfRVgoU1ZNX0VYSVRfSURUUl9XUklURSksCisJW3g4Nl9pbnRlcmNlcHRfdm1ydW5dCQk9IFBPU1RfRVgoU1ZNX0VYSVRfVk1SVU4pLAorCVt4ODZfaW50ZXJjZXB0X3ZtbWNhbGxdCQk9IFBPU1RfRVgoU1ZNX0VYSVRfVk1NQ0FMTCksCisJW3g4Nl9pbnRlcmNlcHRfdm1sb2FkXQkJPSBQT1NUX0VYKFNWTV9FWElUX1ZNTE9BRCksCisJW3g4Nl9pbnRlcmNlcHRfdm1zYXZlXQkJPSBQT1NUX0VYKFNWTV9FWElUX1ZNU0FWRSksCisJW3g4Nl9pbnRlcmNlcHRfc3RnaV0JCT0gUE9TVF9FWChTVk1fRVhJVF9TVEdJKSwKKwlbeDg2X2ludGVyY2VwdF9jbGdpXQkJPSBQT1NUX0VYKFNWTV9FWElUX0NMR0kpLAorCVt4ODZfaW50ZXJjZXB0X3NraW5pdF0JCT0gUE9TVF9FWChTVk1fRVhJVF9TS0lOSVQpLAorCVt4ODZfaW50ZXJjZXB0X2ludmxwZ2FdCQk9IFBPU1RfRVgoU1ZNX0VYSVRfSU5WTFBHQSksCisJW3g4Nl9pbnRlcmNlcHRfcmR0c2NwXQkJPSBQT1NUX0VYKFNWTV9FWElUX1JEVFNDUCksCisJW3g4Nl9pbnRlcmNlcHRfbW9uaXRvcl0JCT0gUE9TVF9NRU0oU1ZNX0VYSVRfTU9OSVRPUiksCisJW3g4Nl9pbnRlcmNlcHRfbXdhaXRdCQk9IFBPU1RfRVgoU1ZNX0VYSVRfTVdBSVQpLAorCVt4ODZfaW50ZXJjZXB0X2ludmxwZ10JCT0gUE9TVF9FWChTVk1fRVhJVF9JTlZMUEcpLAorCVt4ODZfaW50ZXJjZXB0X2ludmRdCQk9IFBPU1RfRVgoU1ZNX0VYSVRfSU5WRCksCisJW3g4Nl9pbnRlcmNlcHRfd2JpbnZkXQkJPSBQT1NUX0VYKFNWTV9FWElUX1dCSU5WRCksCisJW3g4Nl9pbnRlcmNlcHRfd3Jtc3JdCQk9IFBPU1RfRVgoU1ZNX0VYSVRfTVNSKSwKKwlbeDg2X2ludGVyY2VwdF9yZHRzY10JCT0gUE9TVF9FWChTVk1fRVhJVF9SRFRTQyksCisJW3g4Nl9pbnRlcmNlcHRfcmRtc3JdCQk9IFBPU1RfRVgoU1ZNX0VYSVRfTVNSKSwKKwlbeDg2X2ludGVyY2VwdF9yZHBtY10JCT0gUE9TVF9FWChTVk1fRVhJVF9SRFBNQyksCisJW3g4Nl9pbnRlcmNlcHRfY3B1aWRdCQk9IFBSRV9FWChTVk1fRVhJVF9DUFVJRCksCisJW3g4Nl9pbnRlcmNlcHRfcnNtXQkJPSBQUkVfRVgoU1ZNX0VYSVRfUlNNKSwKKwlbeDg2X2ludGVyY2VwdF9wYXVzZV0JCT0gUFJFX0VYKFNWTV9FWElUX1BBVVNFKSwKKwlbeDg2X2ludGVyY2VwdF9wdXNoZl0JCT0gUFJFX0VYKFNWTV9FWElUX1BVU0hGKSwKKwlbeDg2X2ludGVyY2VwdF9wb3BmXQkJPSBQUkVfRVgoU1ZNX0VYSVRfUE9QRiksCisJW3g4Nl9pbnRlcmNlcHRfaW50bl0JCT0gUFJFX0VYKFNWTV9FWElUX1NXSU5UKSwKKwlbeDg2X2ludGVyY2VwdF9pcmV0XQkJPSBQUkVfRVgoU1ZNX0VYSVRfSVJFVCksCisJW3g4Nl9pbnRlcmNlcHRfaWNlYnBdCQk9IFBSRV9FWChTVk1fRVhJVF9JQ0VCUCksCisJW3g4Nl9pbnRlcmNlcHRfaGx0XQkJPSBQT1NUX0VYKFNWTV9FWElUX0hMVCksCisJW3g4Nl9pbnRlcmNlcHRfaW5dCQk9IFBPU1RfRVgoU1ZNX0VYSVRfSU9JTyksCisJW3g4Nl9pbnRlcmNlcHRfaW5zXQkJPSBQT1NUX0VYKFNWTV9FWElUX0lPSU8pLAorCVt4ODZfaW50ZXJjZXB0X291dF0JCT0gUE9TVF9FWChTVk1fRVhJVF9JT0lPKSwKKwlbeDg2X2ludGVyY2VwdF9vdXRzXQkJPSBQT1NUX0VYKFNWTV9FWElUX0lPSU8pLAorfTsKKworI3VuZGVmIFBSRV9FWAorI3VuZGVmIFBPU1RfRVgKKyN1bmRlZiBQT1NUX01FTQorCitzdGF0aWMgaW50IHN2bV9jaGVja19pbnRlcmNlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJICAgICAgIHN0cnVjdCB4ODZfaW5zdHJ1Y3Rpb25faW5mbyAqaW5mbywKKwkJCSAgICAgICBlbnVtIHg4Nl9pbnRlcmNlcHRfc3RhZ2Ugc3RhZ2UpCit7CisJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CisJaW50IHZtZXhpdCwgcmV0ID0gWDg2RU1VTF9DT05USU5VRTsKKwlzdHJ1Y3QgX194ODZfaW50ZXJjZXB0IGljcHRfaW5mbzsKKwlzdHJ1Y3Qgdm1jYiAqdm1jYiA9IHN2bS0+dm1jYjsKKworCWlmIChpbmZvLT5pbnRlcmNlcHQgPj0gQVJSQVlfU0laRSh4ODZfaW50ZXJjZXB0X21hcCkpCisJCWdvdG8gb3V0OworCisJaWNwdF9pbmZvID0geDg2X2ludGVyY2VwdF9tYXBbaW5mby0+aW50ZXJjZXB0XTsKKworCWlmIChzdGFnZSAhPSBpY3B0X2luZm8uc3RhZ2UpCisJCWdvdG8gb3V0OworCisJc3dpdGNoIChpY3B0X2luZm8uZXhpdF9jb2RlKSB7CisJY2FzZSBTVk1fRVhJVF9SRUFEX0NSMDoKKwkJaWYgKGluZm8tPmludGVyY2VwdCA9PSB4ODZfaW50ZXJjZXB0X2NyX3JlYWQpCisJCQlpY3B0X2luZm8uZXhpdF9jb2RlICs9IGluZm8tPm1vZHJtX3JlZzsKKwkJYnJlYWs7CisJY2FzZSBTVk1fRVhJVF9XUklURV9DUjA6IHsKKwkJdW5zaWduZWQgbG9uZyBjcjAsIHZhbDsKKwkJdTY0IGludGVyY2VwdDsKKworCQlpZiAoaW5mby0+aW50ZXJjZXB0ID09IHg4Nl9pbnRlcmNlcHRfY3Jfd3JpdGUpCisJCQlpY3B0X2luZm8uZXhpdF9jb2RlICs9IGluZm8tPm1vZHJtX3JlZzsKKworCQlpZiAoaWNwdF9pbmZvLmV4aXRfY29kZSAhPSBTVk1fRVhJVF9XUklURV9DUjApCisJCQlicmVhazsKKworCQlpbnRlcmNlcHQgPSBzdm0tPm5lc3RlZC5pbnRlcmNlcHQ7CisKKwkJaWYgKCEoaW50ZXJjZXB0ICYgKDFVTEwgPDwgSU5URVJDRVBUX1NFTEVDVElWRV9DUjApKSkKKwkJCWJyZWFrOworCisJCWNyMCA9IHZjcHUtPmFyY2guY3IwICYgflNWTV9DUjBfU0VMRUNUSVZFX01BU0s7CisJCXZhbCA9IGluZm8tPnNyY192YWwgICYgflNWTV9DUjBfU0VMRUNUSVZFX01BU0s7CisKKwkJaWYgKGluZm8tPmludGVyY2VwdCA9PSB4ODZfaW50ZXJjZXB0X2xtc3cpIHsKKwkJCWNyMCAmPSAweGZVTDsKKwkJCXZhbCAmPSAweGZVTDsKKwkJCS8qIGxtc3cgY2FuJ3QgY2xlYXIgUEUgLSBjYXRjaCB0aGlzIGhlcmUgKi8KKwkJCWlmIChjcjAgJiBYODZfQ1IwX1BFKQorCQkJCXZhbCB8PSBYODZfQ1IwX1BFOworCQl9CisKKwkJaWYgKGNyMCBeIHZhbCkKKwkJCWljcHRfaW5mby5leGl0X2NvZGUgPSBTVk1fRVhJVF9DUjBfU0VMX1dSSVRFOworCisJCWJyZWFrOworCX0KKwljYXNlIFNWTV9FWElUX1JFQURfRFIwOgorCWNhc2UgU1ZNX0VYSVRfV1JJVEVfRFIwOgorCQlpY3B0X2luZm8uZXhpdF9jb2RlICs9IGluZm8tPm1vZHJtX3JlZzsKKwkJYnJlYWs7CisJY2FzZSBTVk1fRVhJVF9NU1I6CisJCWlmIChpbmZvLT5pbnRlcmNlcHQgPT0geDg2X2ludGVyY2VwdF93cm1zcikKKwkJCXZtY2ItPmNvbnRyb2wuZXhpdF9pbmZvXzEgPSAxOworCQllbHNlCisJCQl2bWNiLT5jb250cm9sLmV4aXRfaW5mb18xID0gMDsKKwkJYnJlYWs7CisJY2FzZSBTVk1fRVhJVF9QQVVTRToKKwkJLyoKKwkJICogV2UgZ2V0IHRoaXMgZm9yIE5PUCBvbmx5LCBidXQgcGF1c2UKKwkJICogaXMgcmVwIG5vdCwgY2hlY2sgdGhpcyBoZXJlCisJCSAqLworCQlpZiAoaW5mby0+cmVwX3ByZWZpeCAhPSBSRVBFX1BSRUZJWCkKKwkJCWdvdG8gb3V0OworCWNhc2UgU1ZNX0VYSVRfSU9JTzogeworCQl1NjQgZXhpdF9pbmZvOworCQl1MzIgYnl0ZXM7CisKKwkJZXhpdF9pbmZvID0gKHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkRYXSAmIDB4ZmZmZikgPDwgMTY7CisKKwkJaWYgKGluZm8tPmludGVyY2VwdCA9PSB4ODZfaW50ZXJjZXB0X2luIHx8CisJCSAgICBpbmZvLT5pbnRlcmNlcHQgPT0geDg2X2ludGVyY2VwdF9pbnMpIHsKKwkJCWV4aXRfaW5mbyB8PSBTVk1fSU9JT19UWVBFX01BU0s7CisJCQlieXRlcyA9IGluZm8tPnNyY19ieXRlczsKKwkJfSBlbHNlIHsKKwkJCWJ5dGVzID0gaW5mby0+ZHN0X2J5dGVzOworCQl9CisKKwkJaWYgKGluZm8tPmludGVyY2VwdCA9PSB4ODZfaW50ZXJjZXB0X291dHMgfHwKKwkJICAgIGluZm8tPmludGVyY2VwdCA9PSB4ODZfaW50ZXJjZXB0X2lucykKKwkJCWV4aXRfaW5mbyB8PSBTVk1fSU9JT19TVFJfTUFTSzsKKworCQlpZiAoaW5mby0+cmVwX3ByZWZpeCkKKwkJCWV4aXRfaW5mbyB8PSBTVk1fSU9JT19SRVBfTUFTSzsKKworCQlieXRlcyA9IG1pbihieXRlcywgNHUpOworCisJCWV4aXRfaW5mbyB8PSBieXRlcyA8PCBTVk1fSU9JT19TSVpFX1NISUZUOworCisJCWV4aXRfaW5mbyB8PSAodTMyKWluZm8tPmFkX2J5dGVzIDw8IChTVk1fSU9JT19BU0laRV9TSElGVCAtIDEpOworCisJCXZtY2ItPmNvbnRyb2wuZXhpdF9pbmZvXzEgPSBleGl0X2luZm87CisJCXZtY2ItPmNvbnRyb2wuZXhpdF9pbmZvXzIgPSBpbmZvLT5uZXh0X3JpcDsKKworCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJdm1jYi0+Y29udHJvbC5uZXh0X3JpcCAgPSBpbmZvLT5uZXh0X3JpcDsKKwl2bWNiLT5jb250cm9sLmV4aXRfY29kZSA9IGljcHRfaW5mby5leGl0X2NvZGU7CisJdm1leGl0ID0gbmVzdGVkX3N2bV9leGl0X2hhbmRsZWQoc3ZtKTsKKworCXJldCA9ICh2bWV4aXQgPT0gTkVTVEVEX0VYSVRfRE9ORSkgPyBYODZFTVVMX0lOVEVSQ0VQVEVECisJCQkJCSAgIDogWDg2RU1VTF9DT05USU5VRTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgPSB7CiAJLmNwdV9oYXNfa3ZtX3N1cHBvcnQgPSBoYXNfc3ZtLAogCS5kaXNhYmxlZF9ieV9iaW9zID0gaXNfZGlzYWJsZWQsCkBAIC0zOTUyLDEwICs0MjMxLDE0IEBACiAKIAkuaGFzX3diaW52ZF9leGl0ID0gc3ZtX2hhc193YmludmRfZXhpdCwKIAorCS5zZXRfdHNjX2toeiA9IHN2bV9zZXRfdHNjX2toeiwKIAkud3JpdGVfdHNjX29mZnNldCA9IHN2bV93cml0ZV90c2Nfb2Zmc2V0LAogCS5hZGp1c3RfdHNjX29mZnNldCA9IHN2bV9hZGp1c3RfdHNjX29mZnNldCwKKwkuY29tcHV0ZV90c2Nfb2Zmc2V0ID0gc3ZtX2NvbXB1dGVfdHNjX29mZnNldCwKIAogCS5zZXRfdGRwX2NyMyA9IHNldF90ZHBfY3IzLAorCisJLmNoZWNrX2ludGVyY2VwdCA9IHN2bV9jaGVja19pbnRlcmNlcHQsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzdm1faW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC5jCmluZGV4IDViNGNkY2IuLjRjM2ZhMGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXguYworKysgYi9hcmNoL3g4Ni9rdm0vdm14LmMKQEAgLTEyOCw4ICsxMjgsMTEgQEAKIAl1bnNpZ25lZCBsb25nICAgICAgICAgaG9zdF9yc3A7CiAJaW50ICAgICAgICAgICAgICAgICAgIGxhdW5jaGVkOwogCXU4ICAgICAgICAgICAgICAgICAgICBmYWlsOworCXU4ICAgICAgICAgICAgICAgICAgICBjcGw7CisJYm9vbCAgICAgICAgICAgICAgICAgIG5taV9rbm93bl91bm1hc2tlZDsKIAl1MzIgICAgICAgICAgICAgICAgICAgZXhpdF9pbnRyX2luZm87CiAJdTMyICAgICAgICAgICAgICAgICAgIGlkdF92ZWN0b3JpbmdfaW5mbzsKKwl1bG9uZyAgICAgICAgICAgICAgICAgcmZsYWdzOwogCXN0cnVjdCBzaGFyZWRfbXNyX2VudHJ5ICpndWVzdF9tc3JzOwogCWludCAgICAgICAgICAgICAgICAgICBubXNyczsKIAlpbnQgICAgICAgICAgICAgICAgICAgc2F2ZV9ubXNyczsKQEAgLTE1OSw2ICsxNjIsMTAgQEAKIAkJCXUzMiBhcjsKIAkJfSB0ciwgZXMsIGRzLCBmcywgZ3M7CiAJfSBybW9kZTsKKwlzdHJ1Y3QgeworCQl1MzIgYml0bWFzazsgLyogNCBiaXRzIHBlciBzZWdtZW50ICgxIGJpdCBwZXIgZmllbGQpICovCisJCXN0cnVjdCBrdm1fc2F2ZV9zZWdtZW50IHNlZ1s4XTsKKwl9IHNlZ21lbnRfY2FjaGU7CiAJaW50IHZwaWQ7CiAJYm9vbCBlbXVsYXRpb25fcmVxdWlyZWQ7CiAKQEAgLTE3MSw2ICsxNzgsMTUgQEAKIAlib29sIHJkdHNjcF9lbmFibGVkOwogfTsKIAorZW51bSBzZWdtZW50X2NhY2hlX2ZpZWxkIHsKKwlTRUdfRklFTERfU0VMID0gMCwKKwlTRUdfRklFTERfQkFTRSA9IDEsCisJU0VHX0ZJRUxEX0xJTUlUID0gMiwKKwlTRUdfRklFTERfQVIgPSAzLAorCisJU0VHX0ZJRUxEX05SID0gNAorfTsKKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgdmNwdV92bXggKnRvX3ZteChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJcmV0dXJuIGNvbnRhaW5lcl9vZih2Y3B1LCBzdHJ1Y3QgdmNwdV92bXgsIHZjcHUpOwpAQCAtNjQzLDYgKzY1OSw2MiBAQAogCXZtY3Nfd3JpdGVsKGZpZWxkLCB2bWNzX3JlYWRsKGZpZWxkKSB8IG1hc2spOwogfQogCitzdGF0aWMgdm9pZCB2bXhfc2VnbWVudF9jYWNoZV9jbGVhcihzdHJ1Y3QgdmNwdV92bXggKnZteCkKK3sKKwl2bXgtPnNlZ21lbnRfY2FjaGUuYml0bWFzayA9IDA7Cit9CisKK3N0YXRpYyBib29sIHZteF9zZWdtZW50X2NhY2hlX3Rlc3Rfc2V0KHN0cnVjdCB2Y3B1X3ZteCAqdm14LCB1bnNpZ25lZCBzZWcsCisJCQkJICAgICAgIHVuc2lnbmVkIGZpZWxkKQoreworCWJvb2wgcmV0OworCXUzMiBtYXNrID0gMSA8PCAoc2VnICogU0VHX0ZJRUxEX05SICsgZmllbGQpOworCisJaWYgKCEodm14LT52Y3B1LmFyY2gucmVnc19hdmFpbCAmICgxIDw8IFZDUFVfRVhSRUdfU0VHTUVOVFMpKSkgeworCQl2bXgtPnZjcHUuYXJjaC5yZWdzX2F2YWlsIHw9ICgxIDw8IFZDUFVfRVhSRUdfU0VHTUVOVFMpOworCQl2bXgtPnNlZ21lbnRfY2FjaGUuYml0bWFzayA9IDA7CisJfQorCXJldCA9IHZteC0+c2VnbWVudF9jYWNoZS5iaXRtYXNrICYgbWFzazsKKwl2bXgtPnNlZ21lbnRfY2FjaGUuYml0bWFzayB8PSBtYXNrOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1MTYgdm14X3JlYWRfZ3Vlc3Rfc2VnX3NlbGVjdG9yKHN0cnVjdCB2Y3B1X3ZteCAqdm14LCB1bnNpZ25lZCBzZWcpCit7CisJdTE2ICpwID0gJnZteC0+c2VnbWVudF9jYWNoZS5zZWdbc2VnXS5zZWxlY3RvcjsKKworCWlmICghdm14X3NlZ21lbnRfY2FjaGVfdGVzdF9zZXQodm14LCBzZWcsIFNFR19GSUVMRF9TRUwpKQorCQkqcCA9IHZtY3NfcmVhZDE2KGt2bV92bXhfc2VnbWVudF9maWVsZHNbc2VnXS5zZWxlY3Rvcik7CisJcmV0dXJuICpwOworfQorCitzdGF0aWMgdWxvbmcgdm14X3JlYWRfZ3Vlc3Rfc2VnX2Jhc2Uoc3RydWN0IHZjcHVfdm14ICp2bXgsIHVuc2lnbmVkIHNlZykKK3sKKwl1bG9uZyAqcCA9ICZ2bXgtPnNlZ21lbnRfY2FjaGUuc2VnW3NlZ10uYmFzZTsKKworCWlmICghdm14X3NlZ21lbnRfY2FjaGVfdGVzdF9zZXQodm14LCBzZWcsIFNFR19GSUVMRF9CQVNFKSkKKwkJKnAgPSB2bWNzX3JlYWRsKGt2bV92bXhfc2VnbWVudF9maWVsZHNbc2VnXS5iYXNlKTsKKwlyZXR1cm4gKnA7Cit9CisKK3N0YXRpYyB1MzIgdm14X3JlYWRfZ3Vlc3Rfc2VnX2xpbWl0KHN0cnVjdCB2Y3B1X3ZteCAqdm14LCB1bnNpZ25lZCBzZWcpCit7CisJdTMyICpwID0gJnZteC0+c2VnbWVudF9jYWNoZS5zZWdbc2VnXS5saW1pdDsKKworCWlmICghdm14X3NlZ21lbnRfY2FjaGVfdGVzdF9zZXQodm14LCBzZWcsIFNFR19GSUVMRF9MSU1JVCkpCisJCSpwID0gdm1jc19yZWFkMzIoa3ZtX3ZteF9zZWdtZW50X2ZpZWxkc1tzZWddLmxpbWl0KTsKKwlyZXR1cm4gKnA7Cit9CisKK3N0YXRpYyB1MzIgdm14X3JlYWRfZ3Vlc3Rfc2VnX2FyKHN0cnVjdCB2Y3B1X3ZteCAqdm14LCB1bnNpZ25lZCBzZWcpCit7CisJdTMyICpwID0gJnZteC0+c2VnbWVudF9jYWNoZS5zZWdbc2VnXS5hcjsKKworCWlmICghdm14X3NlZ21lbnRfY2FjaGVfdGVzdF9zZXQodm14LCBzZWcsIFNFR19GSUVMRF9BUikpCisJCSpwID0gdm1jc19yZWFkMzIoa3ZtX3ZteF9zZWdtZW50X2ZpZWxkc1tzZWddLmFyX2J5dGVzKTsKKwlyZXR1cm4gKnA7Cit9CisKIHN0YXRpYyB2b2lkIHVwZGF0ZV9leGNlcHRpb25fYml0bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl1MzIgZWI7CkBAIC05NzAsMTcgKzEwNDIsMjQgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHJmbGFncywgc2F2ZV9yZmxhZ3M7CiAKLQlyZmxhZ3MgPSB2bWNzX3JlYWRsKEdVRVNUX1JGTEFHUyk7Ci0JaWYgKHRvX3ZteCh2Y3B1KS0+cm1vZGUudm04Nl9hY3RpdmUpIHsKLQkJcmZsYWdzICY9IFJNT0RFX0dVRVNUX09XTkVEX0VGTEFHU19CSVRTOwotCQlzYXZlX3JmbGFncyA9IHRvX3ZteCh2Y3B1KS0+cm1vZGUuc2F2ZV9yZmxhZ3M7Ci0JCXJmbGFncyB8PSBzYXZlX3JmbGFncyAmIH5STU9ERV9HVUVTVF9PV05FRF9FRkxBR1NfQklUUzsKKwlpZiAoIXRlc3RfYml0KFZDUFVfRVhSRUdfUkZMQUdTLCAodWxvbmcgKikmdmNwdS0+YXJjaC5yZWdzX2F2YWlsKSkgeworCQlfX3NldF9iaXQoVkNQVV9FWFJFR19SRkxBR1MsICh1bG9uZyAqKSZ2Y3B1LT5hcmNoLnJlZ3NfYXZhaWwpOworCQlyZmxhZ3MgPSB2bWNzX3JlYWRsKEdVRVNUX1JGTEFHUyk7CisJCWlmICh0b192bXgodmNwdSktPnJtb2RlLnZtODZfYWN0aXZlKSB7CisJCQlyZmxhZ3MgJj0gUk1PREVfR1VFU1RfT1dORURfRUZMQUdTX0JJVFM7CisJCQlzYXZlX3JmbGFncyA9IHRvX3ZteCh2Y3B1KS0+cm1vZGUuc2F2ZV9yZmxhZ3M7CisJCQlyZmxhZ3MgfD0gc2F2ZV9yZmxhZ3MgJiB+Uk1PREVfR1VFU1RfT1dORURfRUZMQUdTX0JJVFM7CisJCX0KKwkJdG9fdm14KHZjcHUpLT5yZmxhZ3MgPSByZmxhZ3M7CiAJfQotCXJldHVybiByZmxhZ3M7CisJcmV0dXJuIHRvX3ZteCh2Y3B1KS0+cmZsYWdzOwogfQogCiBzdGF0aWMgdm9pZCB2bXhfc2V0X3JmbGFncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgcmZsYWdzKQogeworCV9fc2V0X2JpdChWQ1BVX0VYUkVHX1JGTEFHUywgKHVsb25nICopJnZjcHUtPmFyY2gucmVnc19hdmFpbCk7CisJX19jbGVhcl9iaXQoVkNQVV9FWFJFR19DUEwsICh1bG9uZyAqKSZ2Y3B1LT5hcmNoLnJlZ3NfYXZhaWwpOworCXRvX3ZteCh2Y3B1KS0+cmZsYWdzID0gcmZsYWdzOwogCWlmICh0b192bXgodmNwdSktPnJtb2RlLnZtODZfYWN0aXZlKSB7CiAJCXRvX3ZteCh2Y3B1KS0+cm1vZGUuc2F2ZV9yZmxhZ3MgPSByZmxhZ3M7CiAJCXJmbGFncyB8PSBYODZfRUZMQUdTX0lPUEwgfCBYODZfRUZMQUdTX1ZNOwpAQCAtMTA1Myw3ICsxMTMyLDEwIEBACiAJfQogCiAJaWYgKHZteC0+cm1vZGUudm04Nl9hY3RpdmUpIHsKLQkJaWYgKGt2bV9pbmplY3RfcmVhbG1vZGVfaW50ZXJydXB0KHZjcHUsIG5yKSAhPSBFTVVMQVRFX0RPTkUpCisJCWludCBpbmNfZWlwID0gMDsKKwkJaWYgKGt2bV9leGNlcHRpb25faXNfc29mdChucikpCisJCQlpbmNfZWlwID0gdmNwdS0+YXJjaC5ldmVudF9leGl0X2luc3RfbGVuOworCQlpZiAoa3ZtX2luamVjdF9yZWFsbW9kZV9pbnRlcnJ1cHQodmNwdSwgbnIsIGluY19laXApICE9IEVNVUxBVEVfRE9ORSkKIAkJCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UUklQTEVfRkFVTFQsIHZjcHUpOwogCQlyZXR1cm47CiAJfQpAQCAtMTE1MSw2ICsxMjMzLDE2IEBACiB9CiAKIC8qCisgKiBFbXB0eSBjYWxsLWJhY2suIE5lZWRzIHRvIGJlIGltcGxlbWVudGVkIHdoZW4gVk1YIGVuYWJsZXMgdGhlIFNFVF9UU0NfS0haCisgKiBpb2N0bC4gSW4gdGhpcyBjYXNlIHRoZSBjYWxsLWJhY2sgc2hvdWxkIHVwZGF0ZSBpbnRlcm5hbCB2bXggc3RhdGUgdG8gbWFrZQorICogdGhlIGNoYW5nZXMgZWZmZWN0aXZlLgorICovCitzdGF0aWMgdm9pZCB2bXhfc2V0X3RzY19raHooc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdXNlcl90c2Nfa2h6KQoreworCS8qIE5vdGhpbmcgdG8gZG8gaGVyZSAqLworfQorCisvKgogICogd3JpdGVzICdvZmZzZXQnIGludG8gZ3Vlc3QncyB0aW1lc3RhbXAgY291bnRlciBvZmZzZXQgcmVnaXN0ZXIKICAqLwogc3RhdGljIHZvaWQgdm14X3dyaXRlX3RzY19vZmZzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgb2Zmc2V0KQpAQCAtMTE2NCw2ICsxMjU2LDExIEBACiAJdm1jc193cml0ZTY0KFRTQ19PRkZTRVQsIG9mZnNldCArIGFkanVzdG1lbnQpOwogfQogCitzdGF0aWMgdTY0IHZteF9jb21wdXRlX3RzY19vZmZzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdGFyZ2V0X3RzYykKK3sKKwlyZXR1cm4gdGFyZ2V0X3RzYyAtIG5hdGl2ZV9yZWFkX3RzYygpOworfQorCiAvKgogICogUmVhZHMgYW4gbXNyIHZhbHVlIChvZiAnbXNyX2luZGV4JykgaW50byAncGRhdGEnLgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5vbi0wIG90aGVyd2lzZS4KQEAgLTEyNDMsOSArMTM0MCwxMSBAQAogCQlicmVhazsKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJY2FzZSBNU1JfRlNfQkFTRToKKwkJdm14X3NlZ21lbnRfY2FjaGVfY2xlYXIodm14KTsKIAkJdm1jc193cml0ZWwoR1VFU1RfRlNfQkFTRSwgZGF0YSk7CiAJCWJyZWFrOwogCWNhc2UgTVNSX0dTX0JBU0U6CisJCXZteF9zZWdtZW50X2NhY2hlX2NsZWFyKHZteCk7CiAJCXZtY3Nfd3JpdGVsKEdVRVNUX0dTX0JBU0UsIGRhdGEpOwogCQlicmVhazsKIAljYXNlIE1TUl9LRVJORUxfR1NfQkFTRToKQEAgLTE2ODksNiArMTc4OCw4IEBACiAJdm14LT5lbXVsYXRpb25fcmVxdWlyZWQgPSAxOwogCXZteC0+cm1vZGUudm04Nl9hY3RpdmUgPSAwOwogCisJdm14X3NlZ21lbnRfY2FjaGVfY2xlYXIodm14KTsKKwogCXZtY3Nfd3JpdGUxNihHVUVTVF9UUl9TRUxFQ1RPUiwgdm14LT5ybW9kZS50ci5zZWxlY3Rvcik7CiAJdm1jc193cml0ZWwoR1VFU1RfVFJfQkFTRSwgdm14LT5ybW9kZS50ci5iYXNlKTsKIAl2bWNzX3dyaXRlMzIoR1VFU1RfVFJfTElNSVQsIHZteC0+cm1vZGUudHIubGltaXQpOwpAQCAtMTcxMiw2ICsxODEzLDggQEAKIAlmaXhfcG1vZGVfZGF0YXNlZyhWQ1BVX1NSRUdfR1MsICZ2bXgtPnJtb2RlLmdzKTsKIAlmaXhfcG1vZGVfZGF0YXNlZyhWQ1BVX1NSRUdfRlMsICZ2bXgtPnJtb2RlLmZzKTsKIAorCXZteF9zZWdtZW50X2NhY2hlX2NsZWFyKHZteCk7CisKIAl2bWNzX3dyaXRlMTYoR1VFU1RfU1NfU0VMRUNUT1IsIDApOwogCXZtY3Nfd3JpdGUzMihHVUVTVF9TU19BUl9CWVRFUywgMHg5Myk7CiAKQEAgLTE3NzUsNiArMTg3OCw4IEBACiAJCXZjcHUtPnNyY3VfaWR4ID0gc3JjdV9yZWFkX2xvY2soJnZjcHUtPmt2bS0+c3JjdSk7CiAJfQogCisJdm14X3NlZ21lbnRfY2FjaGVfY2xlYXIodm14KTsKKwogCXZteC0+cm1vZGUudHIuc2VsZWN0b3IgPSB2bWNzX3JlYWQxNihHVUVTVF9UUl9TRUxFQ1RPUik7CiAJdm14LT5ybW9kZS50ci5iYXNlID0gdm1jc19yZWFkbChHVUVTVF9UUl9CQVNFKTsKIAl2bWNzX3dyaXRlbChHVUVTVF9UUl9CQVNFLCBybW9kZV90c3NfYmFzZSh2Y3B1LT5rdm0pKTsKQEAgLTE4NTEsNiArMTk1Niw4IEBACiB7CiAJdTMyIGd1ZXN0X3RyX2FyOwogCisJdm14X3NlZ21lbnRfY2FjaGVfY2xlYXIodG9fdm14KHZjcHUpKTsKKwogCWd1ZXN0X3RyX2FyID0gdm1jc19yZWFkMzIoR1VFU1RfVFJfQVJfQllURVMpOwogCWlmICgoZ3Vlc3RfdHJfYXIgJiBBUl9UWVBFX01BU0spICE9IEFSX1RZUEVfQlVTWV82NF9UU1MpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0c3MgZml4dXAgZm9yIGxvbmcgbW9kZS4gXG4iLApAQCAtMTk5OCw2ICsyMTA1LDcgQEAKIAl2bWNzX3dyaXRlbChDUjBfUkVBRF9TSEFET1csIGNyMCk7CiAJdm1jc193cml0ZWwoR1VFU1RfQ1IwLCBod19jcjApOwogCXZjcHUtPmFyY2guY3IwID0gY3IwOworCV9fY2xlYXJfYml0KFZDUFVfRVhSRUdfQ1BMLCAodWxvbmcgKikmdmNwdS0+YXJjaC5yZWdzX2F2YWlsKTsKIH0KIAogc3RhdGljIHU2NCBjb25zdHJ1Y3RfZXB0cCh1bnNpZ25lZCBsb25nIHJvb3RfaHBhKQpAQCAtMjA1Myw3ICsyMTYxLDYgQEAKIAkJCSAgICBzdHJ1Y3Qga3ZtX3NlZ21lbnQgKnZhciwgaW50IHNlZykKIHsKIAlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKLQlzdHJ1Y3Qga3ZtX3ZteF9zZWdtZW50X2ZpZWxkICpzZiA9ICZrdm1fdm14X3NlZ21lbnRfZmllbGRzW3NlZ107CiAJc3RydWN0IGt2bV9zYXZlX3NlZ21lbnQgKnNhdmU7CiAJdTMyIGFyOwogCkBAIC0yMDc1LDEzICsyMTgyLDEzIEBACiAJCXZhci0+bGltaXQgPSBzYXZlLT5saW1pdDsKIAkJYXIgPSBzYXZlLT5hcjsKIAkJaWYgKHNlZyA9PSBWQ1BVX1NSRUdfVFIKLQkJICAgIHx8IHZhci0+c2VsZWN0b3IgPT0gdm1jc19yZWFkMTYoc2YtPnNlbGVjdG9yKSkKKwkJICAgIHx8IHZhci0+c2VsZWN0b3IgPT0gdm14X3JlYWRfZ3Vlc3Rfc2VnX3NlbGVjdG9yKHZteCwgc2VnKSkKIAkJCWdvdG8gdXNlX3NhdmVkX3Jtb2RlX3NlZzsKIAl9Ci0JdmFyLT5iYXNlID0gdm1jc19yZWFkbChzZi0+YmFzZSk7Ci0JdmFyLT5saW1pdCA9IHZtY3NfcmVhZDMyKHNmLT5saW1pdCk7Ci0JdmFyLT5zZWxlY3RvciA9IHZtY3NfcmVhZDE2KHNmLT5zZWxlY3Rvcik7Ci0JYXIgPSB2bWNzX3JlYWQzMihzZi0+YXJfYnl0ZXMpOworCXZhci0+YmFzZSA9IHZteF9yZWFkX2d1ZXN0X3NlZ19iYXNlKHZteCwgc2VnKTsKKwl2YXItPmxpbWl0ID0gdm14X3JlYWRfZ3Vlc3Rfc2VnX2xpbWl0KHZteCwgc2VnKTsKKwl2YXItPnNlbGVjdG9yID0gdm14X3JlYWRfZ3Vlc3Rfc2VnX3NlbGVjdG9yKHZteCwgc2VnKTsKKwlhciA9IHZteF9yZWFkX2d1ZXN0X3NlZ19hcih2bXgsIHNlZyk7CiB1c2Vfc2F2ZWRfcm1vZGVfc2VnOgogCWlmICgoYXIgJiBBUl9VTlVTQUJMRV9NQVNLKSAmJiAhZW11bGF0ZV9pbnZhbGlkX2d1ZXN0X3N0YXRlKQogCQlhciA9IDA7CkBAIC0yMDk4LDI3ICsyMjA1LDM3IEBACiAKIHN0YXRpYyB1NjQgdm14X2dldF9zZWdtZW50X2Jhc2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc2VnKQogewotCXN0cnVjdCBrdm1fdm14X3NlZ21lbnRfZmllbGQgKnNmID0gJmt2bV92bXhfc2VnbWVudF9maWVsZHNbc2VnXTsKIAlzdHJ1Y3Qga3ZtX3NlZ21lbnQgczsKIAogCWlmICh0b192bXgodmNwdSktPnJtb2RlLnZtODZfYWN0aXZlKSB7CiAJCXZteF9nZXRfc2VnbWVudCh2Y3B1LCAmcywgc2VnKTsKIAkJcmV0dXJuIHMuYmFzZTsKIAl9Ci0JcmV0dXJuIHZtY3NfcmVhZGwoc2YtPmJhc2UpOworCXJldHVybiB2bXhfcmVhZF9ndWVzdF9zZWdfYmFzZSh0b192bXgodmNwdSksIHNlZyk7CiB9CiAKLXN0YXRpYyBpbnQgdm14X2dldF9jcGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQorc3RhdGljIGludCBfX3ZteF9nZXRfY3BsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlpZiAoIWlzX3Byb3Rtb2RlKHZjcHUpKQogCQlyZXR1cm4gMDsKIAotCWlmICh2bXhfZ2V0X3JmbGFncyh2Y3B1KSAmIFg4Nl9FRkxBR1NfVk0pIC8qIGlmIHZpcnR1YWwgODA4NiAqLworCWlmICghaXNfbG9uZ19tb2RlKHZjcHUpCisJICAgICYmIChrdm1fZ2V0X3JmbGFncyh2Y3B1KSAmIFg4Nl9FRkxBR1NfVk0pKSAvKiBpZiB2aXJ0dWFsIDgwODYgKi8KIAkJcmV0dXJuIDM7CiAKLQlyZXR1cm4gdm1jc19yZWFkMTYoR1VFU1RfQ1NfU0VMRUNUT1IpICYgMzsKKwlyZXR1cm4gdm14X3JlYWRfZ3Vlc3Rfc2VnX3NlbGVjdG9yKHRvX3ZteCh2Y3B1KSwgVkNQVV9TUkVHX0NTKSAmIDM7CiB9CiAKK3N0YXRpYyBpbnQgdm14X2dldF9jcGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWlmICghdGVzdF9iaXQoVkNQVV9FWFJFR19DUEwsICh1bG9uZyAqKSZ2Y3B1LT5hcmNoLnJlZ3NfYXZhaWwpKSB7CisJCV9fc2V0X2JpdChWQ1BVX0VYUkVHX0NQTCwgKHVsb25nICopJnZjcHUtPmFyY2gucmVnc19hdmFpbCk7CisJCXRvX3ZteCh2Y3B1KS0+Y3BsID0gX192bXhfZ2V0X2NwbCh2Y3B1KTsKKwl9CisJcmV0dXJuIHRvX3ZteCh2Y3B1KS0+Y3BsOworfQorCisKIHN0YXRpYyB1MzIgdm14X3NlZ21lbnRfYWNjZXNzX3JpZ2h0cyhzdHJ1Y3Qga3ZtX3NlZ21lbnQgKnZhcikKIHsKIAl1MzIgYXI7CkBAIC0yMTQ4LDYgKzIyNjUsOCBAQAogCXN0cnVjdCBrdm1fdm14X3NlZ21lbnRfZmllbGQgKnNmID0gJmt2bV92bXhfc2VnbWVudF9maWVsZHNbc2VnXTsKIAl1MzIgYXI7CiAKKwl2bXhfc2VnbWVudF9jYWNoZV9jbGVhcih2bXgpOworCiAJaWYgKHZteC0+cm1vZGUudm04Nl9hY3RpdmUgJiYgc2VnID09IFZDUFVfU1JFR19UUikgewogCQl2bWNzX3dyaXRlMTYoc2YtPnNlbGVjdG9yLCB2YXItPnNlbGVjdG9yKTsKIAkJdm14LT5ybW9kZS50ci5zZWxlY3RvciA9IHZhci0+c2VsZWN0b3I7CkBAIC0yMTg0LDExICsyMzAzLDEyIEBACiAJCWFyIHw9IDB4MTsgLyogQWNjZXNzZWQgKi8KIAogCXZtY3Nfd3JpdGUzMihzZi0+YXJfYnl0ZXMsIGFyKTsKKwlfX2NsZWFyX2JpdChWQ1BVX0VYUkVHX0NQTCwgKHVsb25nICopJnZjcHUtPmFyY2gucmVnc19hdmFpbCk7CiB9CiAKIHN0YXRpYyB2b2lkIHZteF9nZXRfY3NfZGJfbF9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50ICpkYiwgaW50ICpsKQogewotCXUzMiBhciA9IHZtY3NfcmVhZDMyKEdVRVNUX0NTX0FSX0JZVEVTKTsKKwl1MzIgYXIgPSB2bXhfcmVhZF9ndWVzdF9zZWdfYXIodG9fdm14KHZjcHUpLCBWQ1BVX1NSRUdfQ1MpOwogCiAJKmRiID0gKGFyID4+IDE0KSAmIDE7CiAJKmwgPSAoYXIgPj4gMTMpICYgMTsKQEAgLTI3NzUsNiArMjg5NSw4IEBACiAJaWYgKHJldCAhPSAwKQogCQlnb3RvIG91dDsKIAorCXZteF9zZWdtZW50X2NhY2hlX2NsZWFyKHZteCk7CisKIAlzZWdfc2V0dXAoVkNQVV9TUkVHX0NTKTsKIAkvKgogCSAqIEdVRVNUX0NTX0JBU0Ugc2hvdWxkIHJlYWxseSBiZSAweGZmZmYwMDAwLCBidXQgVlQgdm04NiBtb2RlCkBAIC0yOTA0LDcgKzMwMjYsMTAgQEAKIAogCSsrdmNwdS0+c3RhdC5pcnFfaW5qZWN0aW9uczsKIAlpZiAodm14LT5ybW9kZS52bTg2X2FjdGl2ZSkgewotCQlpZiAoa3ZtX2luamVjdF9yZWFsbW9kZV9pbnRlcnJ1cHQodmNwdSwgaXJxKSAhPSBFTVVMQVRFX0RPTkUpCisJCWludCBpbmNfZWlwID0gMDsKKwkJaWYgKHZjcHUtPmFyY2guaW50ZXJydXB0LnNvZnQpCisJCQlpbmNfZWlwID0gdmNwdS0+YXJjaC5ldmVudF9leGl0X2luc3RfbGVuOworCQlpZiAoa3ZtX2luamVjdF9yZWFsbW9kZV9pbnRlcnJ1cHQodmNwdSwgaXJxLCBpbmNfZWlwKSAhPSBFTVVMQVRFX0RPTkUpCiAJCQlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVFJJUExFX0ZBVUxULCB2Y3B1KTsKIAkJcmV0dXJuOwogCX0KQEAgLTI5MzcsOCArMzA2Miw5IEBACiAJfQogCiAJKyt2Y3B1LT5zdGF0Lm5taV9pbmplY3Rpb25zOworCXZteC0+bm1pX2tub3duX3VubWFza2VkID0gZmFsc2U7CiAJaWYgKHZteC0+cm1vZGUudm04Nl9hY3RpdmUpIHsKLQkJaWYgKGt2bV9pbmplY3RfcmVhbG1vZGVfaW50ZXJydXB0KHZjcHUsIE5NSV9WRUNUT1IpICE9IEVNVUxBVEVfRE9ORSkKKwkJaWYgKGt2bV9pbmplY3RfcmVhbG1vZGVfaW50ZXJydXB0KHZjcHUsIE5NSV9WRUNUT1IsIDApICE9IEVNVUxBVEVfRE9ORSkKIAkJCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UUklQTEVfRkFVTFQsIHZjcHUpOwogCQlyZXR1cm47CiAJfQpAQCAtMjk2MSw2ICszMDg3LDggQEAKIHsKIAlpZiAoIWNwdV9oYXNfdmlydHVhbF9ubWlzKCkpCiAJCXJldHVybiB0b192bXgodmNwdSktPnNvZnRfdm5taV9ibG9ja2VkOworCWlmICh0b192bXgodmNwdSktPm5taV9rbm93bl91bm1hc2tlZCkKKwkJcmV0dXJuIGZhbHNlOwogCXJldHVybiB2bWNzX3JlYWQzMihHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8pCSYgR1VFU1RfSU5UUl9TVEFURV9OTUk7CiB9CiAKQEAgLTI5NzQsNiArMzEwMiw3IEBACiAJCQl2bXgtPnZubWlfYmxvY2tlZF90aW1lID0gMDsKIAkJfQogCX0gZWxzZSB7CisJCXZteC0+bm1pX2tub3duX3VubWFza2VkID0gIW1hc2tlZDsKIAkJaWYgKG1hc2tlZCkKIAkJCXZtY3Nfc2V0X2JpdHMoR1VFU1RfSU5URVJSVVBUSUJJTElUWV9JTkZPLAogCQkJCSAgICAgIEdVRVNUX0lOVFJfU1RBVEVfTk1JKTsKQEAgLTMwOTEsNyArMzIyMCw3IEBACiAJZW51bSBlbXVsYXRpb25fcmVzdWx0IGVyOwogCiAJdmVjdF9pbmZvID0gdm14LT5pZHRfdmVjdG9yaW5nX2luZm87Ci0JaW50cl9pbmZvID0gdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0lORk8pOworCWludHJfaW5mbyA9IHZteC0+ZXhpdF9pbnRyX2luZm87CiAKIAlpZiAoaXNfbWFjaGluZV9jaGVjayhpbnRyX2luZm8pKQogCQlyZXR1cm4gaGFuZGxlX21hY2hpbmVfY2hlY2sodmNwdSk7CkBAIC0zMTIyLDcgKzMyNTEsNiBAQAogCX0KIAogCWVycm9yX2NvZGUgPSAwOwotCXJpcCA9IGt2bV9yaXBfcmVhZCh2Y3B1KTsKIAlpZiAoaW50cl9pbmZvICYgSU5UUl9JTkZPX0RFTElWRVJfQ09ERV9NQVNLKQogCQllcnJvcl9jb2RlID0gdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0VSUk9SX0NPREUpOwogCWlmIChpc19wYWdlX2ZhdWx0KGludHJfaW5mbykpIHsKQEAgLTMxNjksNiArMzI5Nyw3IEBACiAJCXZteC0+dmNwdS5hcmNoLmV2ZW50X2V4aXRfaW5zdF9sZW4gPQogCQkJdm1jc19yZWFkMzIoVk1fRVhJVF9JTlNUUlVDVElPTl9MRU4pOwogCQlrdm1fcnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0RFQlVHOworCQlyaXAgPSBrdm1fcmlwX3JlYWQodmNwdSk7CiAJCWt2bV9ydW4tPmRlYnVnLmFyY2gucGMgPSB2bWNzX3JlYWRsKEdVRVNUX0NTX0JBU0UpICsgcmlwOwogCQlrdm1fcnVuLT5kZWJ1Zy5hcmNoLmV4Y2VwdGlvbiA9IGV4X25vOwogCQlicmVhazsKQEAgLTM1MDUsOSArMzYzNCw3IEBACiAJCXN3aXRjaCAodHlwZSkgewogCQljYXNlIElOVFJfVFlQRV9OTUlfSU5UUjoKIAkJCXZjcHUtPmFyY2gubm1pX2luamVjdGVkID0gZmFsc2U7Ci0JCQlpZiAoY3B1X2hhc192aXJ0dWFsX25taXMoKSkKLQkJCQl2bWNzX3NldF9iaXRzKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTywKLQkJCQkJICAgICAgR1VFU1RfSU5UUl9TVEFURV9OTUkpOworCQkJdm14X3NldF9ubWlfbWFzayh2Y3B1LCB0cnVlKTsKIAkJCWJyZWFrOwogCQljYXNlIElOVFJfVFlQRV9FWFRfSU5UUjoKIAkJY2FzZSBJTlRSX1RZUEVfU09GVF9JTlRSOgpAQCAtMzg2NywxMiArMzk5NCwxNyBAQAogCiBzdGF0aWMgdm9pZCB2bXhfY29tcGxldGVfYXRvbWljX2V4aXQoc3RydWN0IHZjcHVfdm14ICp2bXgpCiB7Ci0JdTMyIGV4aXRfaW50cl9pbmZvID0gdm14LT5leGl0X2ludHJfaW5mbzsKKwl1MzIgZXhpdF9pbnRyX2luZm87CisKKwlpZiAoISh2bXgtPmV4aXRfcmVhc29uID09IEVYSVRfUkVBU09OX01DRV9EVVJJTkdfVk1FTlRSWQorCSAgICAgIHx8IHZteC0+ZXhpdF9yZWFzb24gPT0gRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSSkpCisJCXJldHVybjsKKworCXZteC0+ZXhpdF9pbnRyX2luZm8gPSB2bWNzX3JlYWQzMihWTV9FWElUX0lOVFJfSU5GTyk7CisJZXhpdF9pbnRyX2luZm8gPSB2bXgtPmV4aXRfaW50cl9pbmZvOwogCiAJLyogSGFuZGxlIG1hY2hpbmUgY2hlY2tzIGJlZm9yZSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovCi0JaWYgKCh2bXgtPmV4aXRfcmVhc29uID09IEVYSVRfUkVBU09OX01DRV9EVVJJTkdfVk1FTlRSWSkKLQkgICAgfHwgKHZteC0+ZXhpdF9yZWFzb24gPT0gRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSQotCQkmJiBpc19tYWNoaW5lX2NoZWNrKGV4aXRfaW50cl9pbmZvKSkpCisJaWYgKGlzX21hY2hpbmVfY2hlY2soZXhpdF9pbnRyX2luZm8pKQogCQlrdm1fbWFjaGluZV9jaGVjaygpOwogCiAJLyogV2UgbmVlZCB0byBoYW5kbGUgTk1JcyBiZWZvcmUgaW50ZXJydXB0cyBhcmUgZW5hYmxlZCAqLwpAQCAtMzg4Niw3ICs0MDE4LDcgQEAKIAogc3RhdGljIHZvaWQgdm14X3JlY292ZXJfbm1pX2Jsb2NraW5nKHN0cnVjdCB2Y3B1X3ZteCAqdm14KQogewotCXUzMiBleGl0X2ludHJfaW5mbyA9IHZteC0+ZXhpdF9pbnRyX2luZm87CisJdTMyIGV4aXRfaW50cl9pbmZvOwogCWJvb2wgdW5ibG9ja19ubWk7CiAJdTggdmVjdG9yOwogCWJvb2wgaWR0dl9pbmZvX3ZhbGlkOwpAQCAtMzg5NCw2ICs0MDI2LDEzIEBACiAJaWR0dl9pbmZvX3ZhbGlkID0gdm14LT5pZHRfdmVjdG9yaW5nX2luZm8gJiBWRUNUT1JJTkdfSU5GT19WQUxJRF9NQVNLOwogCiAJaWYgKGNwdV9oYXNfdmlydHVhbF9ubWlzKCkpIHsKKwkJaWYgKHZteC0+bm1pX2tub3duX3VubWFza2VkKQorCQkJcmV0dXJuOworCQkvKgorCQkgKiBDYW4ndCB1c2Ugdm14LT5leGl0X2ludHJfaW5mbyBzaW5jZSB3ZSdyZSBub3Qgc3VyZSB3aGF0CisJCSAqIHRoZSBleGl0IHJlYXNvbiBpcy4KKwkJICovCisJCWV4aXRfaW50cl9pbmZvID0gdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0lORk8pOwogCQl1bmJsb2NrX25taSA9IChleGl0X2ludHJfaW5mbyAmIElOVFJfSU5GT19VTkJMT0NLX05NSSkgIT0gMDsKIAkJdmVjdG9yID0gZXhpdF9pbnRyX2luZm8gJiBJTlRSX0lORk9fVkVDVE9SX01BU0s7CiAJCS8qCkBAIC0zOTEwLDYgKzQwNDksMTAgQEAKIAkJICAgIHZlY3RvciAhPSBERl9WRUNUT1IgJiYgIWlkdHZfaW5mb192YWxpZCkKIAkJCXZtY3Nfc2V0X2JpdHMoR1VFU1RfSU5URVJSVVBUSUJJTElUWV9JTkZPLAogCQkJCSAgICAgIEdVRVNUX0lOVFJfU1RBVEVfTk1JKTsKKwkJZWxzZQorCQkJdm14LT5ubWlfa25vd25fdW5tYXNrZWQgPQorCQkJCSEodm1jc19yZWFkMzIoR1VFU1RfSU5URVJSVVBUSUJJTElUWV9JTkZPKQorCQkJCSAgJiBHVUVTVF9JTlRSX1NUQVRFX05NSSk7CiAJfSBlbHNlIGlmICh1bmxpa2VseSh2bXgtPnNvZnRfdm5taV9ibG9ja2VkKSkKIAkJdm14LT52bm1pX2Jsb2NrZWRfdGltZSArPQogCQkJa3RpbWVfdG9fbnMoa3RpbWVfc3ViKGt0aW1lX2dldCgpLCB2bXgtPmVudHJ5X3RpbWUpKTsKQEAgLTM5NDYsOCArNDA4OSw3IEBACiAJCSAqIENsZWFyIGJpdCAiYmxvY2sgYnkgTk1JIiBiZWZvcmUgVk0gZW50cnkgaWYgYSBOTUkKIAkJICogZGVsaXZlcnkgZmF1bHRlZC4KIAkJICovCi0JCXZtY3NfY2xlYXJfYml0cyhHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8sCi0JCQkJR1VFU1RfSU5UUl9TVEFURV9OTUkpOworCQl2bXhfc2V0X25taV9tYXNrKCZ2bXgtPnZjcHUsIGZhbHNlKTsKIAkJYnJlYWs7CiAJY2FzZSBJTlRSX1RZUEVfU09GVF9FWENFUFRJT046CiAJCXZteC0+dmNwdS5hcmNoLmV2ZW50X2V4aXRfaW5zdF9sZW4gPQpAQCAtNDEyNCw3ICs0MjY2LDEwIEBACiAJICAgICAgKTsKIAogCXZjcHUtPmFyY2gucmVnc19hdmFpbCA9IH4oKDEgPDwgVkNQVV9SRUdTX1JJUCkgfCAoMSA8PCBWQ1BVX1JFR1NfUlNQKQorCQkJCSAgfCAoMSA8PCBWQ1BVX0VYUkVHX1JGTEFHUykKKwkJCQkgIHwgKDEgPDwgVkNQVV9FWFJFR19DUEwpCiAJCQkJICB8ICgxIDw8IFZDUFVfRVhSRUdfUERQVFIpCisJCQkJICB8ICgxIDw8IFZDUFVfRVhSRUdfU0VHTUVOVFMpCiAJCQkJICB8ICgxIDw8IFZDUFVfRVhSRUdfQ1IzKSk7CiAJdmNwdS0+YXJjaC5yZWdzX2RpcnR5ID0gMDsKIApAQCAtNDEzNCw3ICs0Mjc5LDYgQEAKIAl2bXgtPmxhdW5jaGVkID0gMTsKIAogCXZteC0+ZXhpdF9yZWFzb24gPSB2bWNzX3JlYWQzMihWTV9FWElUX1JFQVNPTik7Ci0Jdm14LT5leGl0X2ludHJfaW5mbyA9IHZtY3NfcmVhZDMyKFZNX0VYSVRfSU5UUl9JTkZPKTsKIAogCXZteF9jb21wbGV0ZV9hdG9taWNfZXhpdCh2bXgpOwogCXZteF9yZWNvdmVyX25taV9ibG9ja2luZyh2bXgpOwpAQCAtNDE5NSw4ICs0MzM5LDggQEAKIAkJZ290byBmcmVlX3ZjcHU7CiAKIAl2bXgtPmd1ZXN0X21zcnMgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJZXJyID0gLUVOT01FTTsKIAlpZiAoIXZteC0+Z3Vlc3RfbXNycykgewotCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIHVuaW5pdF92Y3B1OwogCX0KIApAQCAtNDIxNSw3ICs0MzU5LDggQEAKIAlpZiAoZXJyKQogCQlnb3RvIGZyZWVfdm1jczsKIAlpZiAodm1fbmVlZF92aXJ0dWFsaXplX2FwaWNfYWNjZXNzZXMoa3ZtKSkKLQkJaWYgKGFsbG9jX2FwaWNfYWNjZXNzX3BhZ2Uoa3ZtKSAhPSAwKQorCQllcnIgPSBhbGxvY19hcGljX2FjY2Vzc19wYWdlKGt2bSk7CisJCWlmIChlcnIpCiAJCQlnb3RvIGZyZWVfdm1jczsKIAogCWlmIChlbmFibGVfZXB0KSB7CkBAIC00MzY4LDYgKzQ1MTMsMTMgQEAKIHsKIH0KIAorc3RhdGljIGludCB2bXhfY2hlY2tfaW50ZXJjZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCSAgICAgICBzdHJ1Y3QgeDg2X2luc3RydWN0aW9uX2luZm8gKmluZm8sCisJCQkgICAgICAgZW51bSB4ODZfaW50ZXJjZXB0X3N0YWdlIHN0YWdlKQoreworCXJldHVybiBYODZFTVVMX0NPTlRJTlVFOworfQorCiBzdGF0aWMgc3RydWN0IGt2bV94ODZfb3BzIHZteF94ODZfb3BzID0gewogCS5jcHVfaGFzX2t2bV9zdXBwb3J0ID0gY3B1X2hhc19rdm1fc3VwcG9ydCwKIAkuZGlzYWJsZWRfYnlfYmlvcyA9IHZteF9kaXNhYmxlZF9ieV9iaW9zLApAQCAtNDQ0OSwxMCArNDYwMSwxNCBAQAogCiAJLmhhc193YmludmRfZXhpdCA9IGNwdV9oYXNfdm14X3diaW52ZF9leGl0LAogCisJLnNldF90c2Nfa2h6ID0gdm14X3NldF90c2Nfa2h6LAogCS53cml0ZV90c2Nfb2Zmc2V0ID0gdm14X3dyaXRlX3RzY19vZmZzZXQsCiAJLmFkanVzdF90c2Nfb2Zmc2V0ID0gdm14X2FkanVzdF90c2Nfb2Zmc2V0LAorCS5jb21wdXRlX3RzY19vZmZzZXQgPSB2bXhfY29tcHV0ZV90c2Nfb2Zmc2V0LAogCiAJLnNldF90ZHBfY3IzID0gdm14X3NldF9jcjMsCisKKwkuY2hlY2tfaW50ZXJjZXB0ID0gdm14X2NoZWNrX2ludGVyY2VwdCwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHZteF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmMKaW5kZXggOTM0YjRjNi4uNzdjOWQ4NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jCisrKyBiL2FyY2gveDg2L2t2bS94ODYuYwpAQCAtNjAsMjIgKzYwLDEyIEBACiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAKICNkZWZpbmUgTUFYX0lPX01TUlMgMjU2Ci0jZGVmaW5lIENSMF9SRVNFUlZFRF9CSVRTCQkJCQkJXAotCSh+KHVuc2lnbmVkIGxvbmcpKFg4Nl9DUjBfUEUgfCBYODZfQ1IwX01QIHwgWDg2X0NSMF9FTSB8IFg4Nl9DUjBfVFMgXAotCQkJICB8IFg4Nl9DUjBfRVQgfCBYODZfQ1IwX05FIHwgWDg2X0NSMF9XUCB8IFg4Nl9DUjBfQU0gXAotCQkJICB8IFg4Nl9DUjBfTlcgfCBYODZfQ1IwX0NEIHwgWDg2X0NSMF9QRykpCi0jZGVmaW5lIENSNF9SRVNFUlZFRF9CSVRTCQkJCQkJXAotCSh+KHVuc2lnbmVkIGxvbmcpKFg4Nl9DUjRfVk1FIHwgWDg2X0NSNF9QVkkgfCBYODZfQ1I0X1RTRCB8IFg4Nl9DUjRfREVcCi0JCQkgIHwgWDg2X0NSNF9QU0UgfCBYODZfQ1I0X1BBRSB8IFg4Nl9DUjRfTUNFCVwKLQkJCSAgfCBYODZfQ1I0X1BHRSB8IFg4Nl9DUjRfUENFIHwgWDg2X0NSNF9PU0ZYU1IJXAotCQkJICB8IFg4Nl9DUjRfT1NYU0FWRSBcCi0JCQkgIHwgWDg2X0NSNF9PU1hNTUVYQ1BUIHwgWDg2X0NSNF9WTVhFKSkKLQotI2RlZmluZSBDUjhfUkVTRVJWRURfQklUUyAofih1bnNpZ25lZCBsb25nKVg4Nl9DUjhfVFBSKQotCiAjZGVmaW5lIEtWTV9NQVhfTUNFX0JBTktTIDMyCiAjZGVmaW5lIEtWTV9NQ0VfQ0FQX1NVUFBPUlRFRCAoTUNHX0NUTF9QIHwgTUNHX1NFUl9QKQogCisjZGVmaW5lIGVtdWxfdG9fdmNwdShjdHh0KSBcCisJY29udGFpbmVyX29mKGN0eHQsIHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5lbXVsYXRlX2N0eHQpCisKIC8qIEVGRVIgZGVmYXVsdHM6CiAgKiAtIGVuYWJsZSBzeXNjYWxsIHBlciBkZWZhdWx0IGJlY2F1c2UgaXRzIGVtdWxhdGVkIGJ5IEtWTQogICogLSBlbmFibGUgTE1FIGFuZCBMTUEgcGVyIGRlZmF1bHQgb24gNjQgYml0IEtWTQpAQCAtMTAwLDYgKzkwLDExIEBACiBpbnQgaWdub3JlX21zcnMgPSAwOwogbW9kdWxlX3BhcmFtX25hbWVkKGlnbm9yZV9tc3JzLCBpZ25vcmVfbXNycywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOwogCitib29sIGt2bV9oYXNfdHNjX2NvbnRyb2w7CitFWFBPUlRfU1lNQk9MX0dQTChrdm1faGFzX3RzY19jb250cm9sKTsKK3UzMiAga3ZtX21heF9ndWVzdF90c2Nfa2h6OworRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX21heF9ndWVzdF90c2Nfa2h6KTsKKwogI2RlZmluZSBLVk1fTlJfU0hBUkVEX01TUlMgMTYKIAogc3RydWN0IGt2bV9zaGFyZWRfbXNyc19nbG9iYWwgewpAQCAtMTU3LDYgKzE1Miw4IEBACiAKIHU2NCBfX3JlYWRfbW9zdGx5IGhvc3RfeGNyMDsKIAoraW50IGVtdWxhdG9yX2ZpeF9oeXBlcmNhbGwoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpOworCiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2FzeW5jX3BmX2hhc2hfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCWludCBpOwpAQCAtMzYxLDggKzM1OCw4IEBACiAKIHZvaWQga3ZtX2luamVjdF9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9OTUksIHZjcHUpOwogCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9FVkVOVCwgdmNwdSk7CisJdmNwdS0+YXJjaC5ubWlfcGVuZGluZyA9IDE7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1faW5qZWN0X25taSk7CiAKQEAgLTk4Miw3ICs5NzksMTUgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW5saW5lIHU2NCBuc2VjX3RvX2N5Y2xlcyh1NjQgbnNlYykKK3N0YXRpYyB1NjQgdmNwdV90c2Nfa2h6KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlpZiAodmNwdS0+YXJjaC52aXJ0dWFsX3RzY19raHopCisJCXJldHVybiB2Y3B1LT5hcmNoLnZpcnR1YWxfdHNjX2toejsKKwllbHNlCisJCXJldHVybiBfX3RoaXNfY3B1X3JlYWQoY3B1X3RzY19raHopOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBuc2VjX3RvX2N5Y2xlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBuc2VjKQogewogCXU2NCByZXQ7CiAKQEAgLTk5MCwyNSArOTk1LDI0IEBACiAJaWYgKGt2bV90c2NfY2hhbmdlc19mcmVxKCkpCiAJCXByaW50a19vbmNlKEtFUk5fV0FSTklORwogCQkgImt2bTogdW5yZWxpYWJsZSBjeWNsZSBjb252ZXJzaW9uIG9uIGFkanVzdGFibGUgcmF0ZSBUU0NcbiIpOwotCXJldCA9IG5zZWMgKiBfX3RoaXNfY3B1X3JlYWQoY3B1X3RzY19raHopOworCXJldCA9IG5zZWMgKiB2Y3B1X3RzY19raHoodmNwdSk7CiAJZG9fZGl2KHJldCwgVVNFQ19QRVJfU0VDKTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBrdm1fYXJjaF9zZXRfdHNjX2toeihzdHJ1Y3Qga3ZtICprdm0sIHUzMiB0aGlzX3RzY19raHopCitzdGF0aWMgdm9pZCBrdm1faW5pdF90c2NfY2F0Y2h1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB0aGlzX3RzY19raHopCiB7CiAJLyogQ29tcHV0ZSBhIHNjYWxlIHRvIGNvbnZlcnQgbmFub3NlY29uZHMgaW4gVFNDIGN5Y2xlcyAqLwogCWt2bV9nZXRfdGltZV9zY2FsZSh0aGlzX3RzY19raHosIE5TRUNfUEVSX1NFQyAvIDEwMDAsCi0JCQkgICAma3ZtLT5hcmNoLnZpcnR1YWxfdHNjX3NoaWZ0LAotCQkJICAgJmt2bS0+YXJjaC52aXJ0dWFsX3RzY19tdWx0KTsKLQlrdm0tPmFyY2gudmlydHVhbF90c2Nfa2h6ID0gdGhpc190c2Nfa2h6OworCQkJICAgJnZjcHUtPmFyY2gudHNjX2NhdGNodXBfc2hpZnQsCisJCQkgICAmdmNwdS0+YXJjaC50c2NfY2F0Y2h1cF9tdWx0KTsKIH0KIAogc3RhdGljIHU2NCBjb21wdXRlX2d1ZXN0X3RzYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHM2NCBrZXJuZWxfbnMpCiB7CiAJdTY0IHRzYyA9IHB2Y2xvY2tfc2NhbGVfZGVsdGEoa2VybmVsX25zLXZjcHUtPmFyY2gubGFzdF90c2NfbnNlYywKLQkJCQkgICAgICB2Y3B1LT5rdm0tPmFyY2gudmlydHVhbF90c2NfbXVsdCwKLQkJCQkgICAgICB2Y3B1LT5rdm0tPmFyY2gudmlydHVhbF90c2Nfc2hpZnQpOworCQkJCSAgICAgIHZjcHUtPmFyY2gudHNjX2NhdGNodXBfbXVsdCwKKwkJCQkgICAgICB2Y3B1LT5hcmNoLnRzY19jYXRjaHVwX3NoaWZ0KTsKIAl0c2MgKz0gdmNwdS0+YXJjaC5sYXN0X3RzY193cml0ZTsKIAlyZXR1cm4gdHNjOwogfQpAQCAtMTAyMSw3ICsxMDI1LDcgQEAKIAlzNjQgc2RpZmY7CiAKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmt2bS0+YXJjaC50c2Nfd3JpdGVfbG9jaywgZmxhZ3MpOwotCW9mZnNldCA9IGRhdGEgLSBuYXRpdmVfcmVhZF90c2MoKTsKKwlvZmZzZXQgPSBrdm1feDg2X29wcy0+Y29tcHV0ZV90c2Nfb2Zmc2V0KHZjcHUsIGRhdGEpOwogCW5zID0gZ2V0X2tlcm5lbF9ucygpOwogCWVsYXBzZWQgPSBucyAtIGt2bS0+YXJjaC5sYXN0X3RzY19uc2VjOwogCXNkaWZmID0gZGF0YSAtIGt2bS0+YXJjaC5sYXN0X3RzY193cml0ZTsKQEAgLTEwMzcsMTMgKzEwNDEsMTMgQEAKIAkgKiBJbiB0aGF0IGNhc2UsIGZvciBhIHJlbGlhYmxlIFRTQywgd2UgY2FuIG1hdGNoIFRTQyBvZmZzZXRzLAogCSAqIG9yIG1ha2UgYSBiZXN0IGd1ZXN0IHVzaW5nIGVsYXBzZWQgdmFsdWUuCiAJICovCi0JaWYgKHNkaWZmIDwgbnNlY190b19jeWNsZXMoNVVMTCAqIE5TRUNfUEVSX1NFQykgJiYKKwlpZiAoc2RpZmYgPCBuc2VjX3RvX2N5Y2xlcyh2Y3B1LCA1VUxMICogTlNFQ19QRVJfU0VDKSAmJgogCSAgICBlbGFwc2VkIDwgNVVMTCAqIE5TRUNfUEVSX1NFQykgewogCQlpZiAoIWNoZWNrX3RzY191bnN0YWJsZSgpKSB7CiAJCQlvZmZzZXQgPSBrdm0tPmFyY2gubGFzdF90c2Nfb2Zmc2V0OwogCQkJcHJfZGVidWcoImt2bTogbWF0Y2hlZCB0c2Mgb2Zmc2V0IGZvciAlbGx1XG4iLCBkYXRhKTsKIAkJfSBlbHNlIHsKLQkJCXU2NCBkZWx0YSA9IG5zZWNfdG9fY3ljbGVzKGVsYXBzZWQpOworCQkJdTY0IGRlbHRhID0gbnNlY190b19jeWNsZXModmNwdSwgZWxhcHNlZCk7CiAJCQlvZmZzZXQgKz0gZGVsdGE7CiAJCQlwcl9kZWJ1Zygia3ZtOiBhZGp1c3RlZCB0c2Mgb2Zmc2V0IGJ5ICVsbHVcbiIsIGRlbHRhKTsKIAkJfQpAQCAtMTA3NSw4ICsxMDc5LDcgQEAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJa3ZtX2dldF9tc3IodiwgTVNSX0lBMzJfVFNDLCAmdHNjX3RpbWVzdGFtcCk7CiAJa2VybmVsX25zID0gZ2V0X2tlcm5lbF9ucygpOwotCXRoaXNfdHNjX2toeiA9IF9fdGhpc19jcHVfcmVhZChjcHVfdHNjX2toeik7Ci0KKwl0aGlzX3RzY19raHogPSB2Y3B1X3RzY19raHoodik7CiAJaWYgKHVubGlrZWx5KHRoaXNfdHNjX2toeiA9PSAwKSkgewogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9DTE9DS19VUERBVEUsIHYpOwpAQCAtMTk5Myw2ICsxOTk2LDcgQEAKIAljYXNlIEtWTV9DQVBfWDg2X1JPQlVTVF9TSU5HTEVTVEVQOgogCWNhc2UgS1ZNX0NBUF9YU0FWRToKIAljYXNlIEtWTV9DQVBfQVNZTkNfUEY6CisJY2FzZSBLVk1fQ0FQX0dFVF9UU0NfS0haOgogCQlyID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBLVk1fQ0FQX0NPQUxFU0NFRF9NTUlPOgpAQCAtMjAxOSw2ICsyMDIzLDkgQEAKIAljYXNlIEtWTV9DQVBfWENSUzoKIAkJciA9IGNwdV9oYXNfeHNhdmU7CiAJCWJyZWFrOworCWNhc2UgS1ZNX0NBUF9UU0NfQ09OVFJPTDoKKwkJciA9IGt2bV9oYXNfdHNjX2NvbnRyb2w7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXIgPSAwOwogCQlicmVhazsKQEAgLTIxMjAsOCArMjEyNywxMyBAQAogCWt2bV94ODZfb3BzLT52Y3B1X2xvYWQodmNwdSwgY3B1KTsKIAlpZiAodW5saWtlbHkodmNwdS0+Y3B1ICE9IGNwdSkgfHwgY2hlY2tfdHNjX3Vuc3RhYmxlKCkpIHsKIAkJLyogTWFrZSBzdXJlIFRTQyBkb2Vzbid0IGdvIGJhY2t3YXJkcyAqLwotCQlzNjQgdHNjX2RlbHRhID0gIXZjcHUtPmFyY2gubGFzdF9ob3N0X3RzYyA/IDAgOgotCQkJCW5hdGl2ZV9yZWFkX3RzYygpIC0gdmNwdS0+YXJjaC5sYXN0X2hvc3RfdHNjOworCQlzNjQgdHNjX2RlbHRhOworCQl1NjQgdHNjOworCisJCWt2bV9nZXRfbXNyKHZjcHUsIE1TUl9JQTMyX1RTQywgJnRzYyk7CisJCXRzY19kZWx0YSA9ICF2Y3B1LT5hcmNoLmxhc3RfZ3Vlc3RfdHNjID8gMCA6CisJCQkgICAgIHRzYyAtIHZjcHUtPmFyY2gubGFzdF9ndWVzdF90c2M7CisKIAkJaWYgKHRzY19kZWx0YSA8IDApCiAJCQltYXJrX3RzY191bnN0YWJsZSgiS1ZNIGRpc2NvdmVyZWQgYmFja3dhcmRzIFRTQyIpOwogCQlpZiAoY2hlY2tfdHNjX3Vuc3RhYmxlKCkpIHsKQEAgLTIxMzksNyArMjE1MSw3IEBACiB7CiAJa3ZtX3g4Nl9vcHMtPnZjcHVfcHV0KHZjcHUpOwogCWt2bV9wdXRfZ3Vlc3RfZnB1KHZjcHUpOwotCXZjcHUtPmFyY2gubGFzdF9ob3N0X3RzYyA9IG5hdGl2ZV9yZWFkX3RzYygpOworCWt2bV9nZXRfbXNyKHZjcHUsIE1TUl9JQTMyX1RTQywgJnZjcHUtPmFyY2gubGFzdF9ndWVzdF90c2MpOwogfQogCiBzdGF0aWMgaW50IGlzX2VmZXJfbngodm9pZCkKQEAgLTIzMjQsNiArMjMzNiwxMiBAQAogCQlGKDNETk9XUFJFRkVUQ0gpIHwgMCAvKiBPU1ZXICovIHwgMCAvKiBJQlMgKi8gfCBGKFhPUCkgfAogCQkwIC8qIFNLSU5JVCwgV0RULCBMV1AgKi8gfCBGKEZNQTQpIHwgRihUQk0pOwogCisJLyogY3B1aWQgMHhDMDAwMDAwMS5lZHggKi8KKwljb25zdCB1MzIga3ZtX3N1cHBvcnRlZF93b3JkNV94ODZfZmVhdHVyZXMgPQorCQlGKFhTVE9SRSkgfCBGKFhTVE9SRV9FTikgfCBGKFhDUllQVCkgfCBGKFhDUllQVF9FTikgfAorCQlGKEFDRTIpIHwgRihBQ0UyX0VOKSB8IEYoUEhFKSB8IEYoUEhFX0VOKSB8CisJCUYoUE1NKSB8IEYoUE1NX0VOKTsKKwogCS8qIGFsbCBjYWxscyB0byBjcHVpZF9jb3VudCgpIHNob3VsZCBiZSBtYWRlIG9uIHRoZSBzYW1lIGNwdSAqLwogCWdldF9jcHUoKTsKIAlkb19jcHVpZF8xX2VudChlbnRyeSwgZnVuY3Rpb24sIGluZGV4KTsKQEAgLTI0MTgsNiArMjQzNiw3IEBACiAJCWVudHJ5LT5lYXggPSAoMSA8PCBLVk1fRkVBVFVSRV9DTE9DS1NPVVJDRSkgfAogCQkJICAgICAoMSA8PCBLVk1fRkVBVFVSRV9OT1BfSU9fREVMQVkpIHwKIAkJCSAgICAgKDEgPDwgS1ZNX0ZFQVRVUkVfQ0xPQ0tTT1VSQ0UyKSB8CisJCQkgICAgICgxIDw8IEtWTV9GRUFUVVJFX0FTWU5DX1BGKSB8CiAJCQkgICAgICgxIDw8IEtWTV9GRUFUVVJFX0NMT0NLU09VUkNFX1NUQUJMRV9CSVQpOwogCQllbnRyeS0+ZWJ4ID0gMDsKIAkJZW50cnktPmVjeCA9IDA7CkBAIC0yNDMyLDYgKzI0NTEsMjAgQEAKIAkJZW50cnktPmVjeCAmPSBrdm1fc3VwcG9ydGVkX3dvcmQ2X3g4Nl9mZWF0dXJlczsKIAkJY3B1aWRfbWFzaygmZW50cnktPmVjeCwgNik7CiAJCWJyZWFrOworCS8qQWRkIHN1cHBvcnQgZm9yIENlbnRhdXIncyBDUFVJRCBpbnN0cnVjdGlvbiovCisJY2FzZSAweEMwMDAwMDAwOgorCQkvKkp1c3Qgc3VwcG9ydCB1cCB0byAweEMwMDAwMDA0IG5vdyovCisJCWVudHJ5LT5lYXggPSBtaW4oZW50cnktPmVheCwgMHhDMDAwMDAwNCk7CisJCWJyZWFrOworCWNhc2UgMHhDMDAwMDAwMToKKwkJZW50cnktPmVkeCAmPSBrdm1fc3VwcG9ydGVkX3dvcmQ1X3g4Nl9mZWF0dXJlczsKKwkJY3B1aWRfbWFzaygmZW50cnktPmVkeCwgNSk7CisJCWJyZWFrOworCWNhc2UgMHhDMDAwMDAwMjoKKwljYXNlIDB4QzAwMDAwMDM6CisJY2FzZSAweEMwMDAwMDA0OgorCQkvKk5vdyBub3RoaW5nIHRvIGRvLCByZXNlcnZlZCBmb3IgdGhlIGZ1dHVyZSovCisJCWJyZWFrOwogCX0KIAogCWt2bV94ODZfb3BzLT5zZXRfc3VwcG9ydGVkX2NwdWlkKGZ1bmN0aW9uLCBlbnRyeSk7CkBAIC0yNDc4LDYgKzI1MTEsMjYgQEAKIAlpZiAobmVudCA+PSBjcHVpZC0+bmVudCkKIAkJZ290byBvdXRfZnJlZTsKIAorCS8qIEFkZCBzdXBwb3J0IGZvciBDZW50YXVyJ3MgQ1BVSUQgaW5zdHJ1Y3Rpb24uICovCisJaWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0NFTlRBVVIpIHsKKwkJZG9fY3B1aWRfZW50KCZjcHVpZF9lbnRyaWVzW25lbnRdLCAweEMwMDAwMDAwLCAwLAorCQkJCSZuZW50LCBjcHVpZC0+bmVudCk7CisKKwkJciA9IC1FMkJJRzsKKwkJaWYgKG5lbnQgPj0gY3B1aWQtPm5lbnQpCisJCQlnb3RvIG91dF9mcmVlOworCisJCWxpbWl0ID0gY3B1aWRfZW50cmllc1tuZW50IC0gMV0uZWF4OworCQlmb3IgKGZ1bmMgPSAweEMwMDAwMDAxOworCQkJZnVuYyA8PSBsaW1pdCAmJiBuZW50IDwgY3B1aWQtPm5lbnQ7ICsrZnVuYykKKwkJCWRvX2NwdWlkX2VudCgmY3B1aWRfZW50cmllc1tuZW50XSwgZnVuYywgMCwKKwkJCQkJJm5lbnQsIGNwdWlkLT5uZW50KTsKKworCQlyID0gLUUyQklHOworCQlpZiAobmVudCA+PSBjcHVpZC0+bmVudCkKKwkJCWdvdG8gb3V0X2ZyZWU7CisJfQorCiAJZG9fY3B1aWRfZW50KCZjcHVpZF9lbnRyaWVzW25lbnRdLCBLVk1fQ1BVSURfU0lHTkFUVVJFLCAwLCAmbmVudCwKIAkJICAgICBjcHVpZC0+bmVudCk7CiAKQEAgLTMwNDYsNiArMzA5OSwzMiBAQAogCQlyID0ga3ZtX3ZjcHVfaW9jdGxfeDg2X3NldF94Y3JzKHZjcHUsIHUueGNycyk7CiAJCWJyZWFrOwogCX0KKwljYXNlIEtWTV9TRVRfVFNDX0tIWjogeworCQl1MzIgdXNlcl90c2Nfa2h6OworCisJCXIgPSAtRUlOVkFMOworCQlpZiAoIWt2bV9oYXNfdHNjX2NvbnRyb2wpCisJCQlicmVhazsKKworCQl1c2VyX3RzY19raHogPSAodTMyKWFyZzsKKworCQlpZiAodXNlcl90c2Nfa2h6ID49IGt2bV9tYXhfZ3Vlc3RfdHNjX2toeikKKwkJCWdvdG8gb3V0OworCisJCWt2bV94ODZfb3BzLT5zZXRfdHNjX2toeih2Y3B1LCB1c2VyX3RzY19raHopOworCisJCXIgPSAwOworCQlnb3RvIG91dDsKKwl9CisJY2FzZSBLVk1fR0VUX1RTQ19LSFo6IHsKKwkJciA9IC1FSU87CisJCWlmIChjaGVja190c2NfdW5zdGFibGUoKSkKKwkJCWdvdG8gb3V0OworCisJCXIgPSB2Y3B1X3RzY19raHoodmNwdSk7CisKKwkJZ290byBvdXQ7CisJfQogCWRlZmF1bHQ6CiAJCXIgPSAtRUlOVkFMOwogCX0KQEAgLTM1OTUsMjAgKzM2NzQsNDMgQEAKIHN0YXRpYyBpbnQgdmNwdV9tbWlvX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgYWRkciwgaW50IGxlbiwKIAkJCSAgIGNvbnN0IHZvaWQgKnYpCiB7Ci0JaWYgKHZjcHUtPmFyY2guYXBpYyAmJgotCSAgICAha3ZtX2lvZGV2aWNlX3dyaXRlKCZ2Y3B1LT5hcmNoLmFwaWMtPmRldiwgYWRkciwgbGVuLCB2KSkKLQkJcmV0dXJuIDA7CisJaW50IGhhbmRsZWQgPSAwOworCWludCBuOwogCi0JcmV0dXJuIGt2bV9pb19idXNfd3JpdGUodmNwdS0+a3ZtLCBLVk1fTU1JT19CVVMsIGFkZHIsIGxlbiwgdik7CisJZG8geworCQluID0gbWluKGxlbiwgOCk7CisJCWlmICghKHZjcHUtPmFyY2guYXBpYyAmJgorCQkgICAgICAha3ZtX2lvZGV2aWNlX3dyaXRlKCZ2Y3B1LT5hcmNoLmFwaWMtPmRldiwgYWRkciwgbiwgdikpCisJCSAgICAmJiBrdm1faW9fYnVzX3dyaXRlKHZjcHUtPmt2bSwgS1ZNX01NSU9fQlVTLCBhZGRyLCBuLCB2KSkKKwkJCWJyZWFrOworCQloYW5kbGVkICs9IG47CisJCWFkZHIgKz0gbjsKKwkJbGVuIC09IG47CisJCXYgKz0gbjsKKwl9IHdoaWxlIChsZW4pOworCisJcmV0dXJuIGhhbmRsZWQ7CiB9CiAKIHN0YXRpYyBpbnQgdmNwdV9tbWlvX3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBhZGRyLCBpbnQgbGVuLCB2b2lkICp2KQogewotCWlmICh2Y3B1LT5hcmNoLmFwaWMgJiYKLQkgICAgIWt2bV9pb2RldmljZV9yZWFkKCZ2Y3B1LT5hcmNoLmFwaWMtPmRldiwgYWRkciwgbGVuLCB2KSkKLQkJcmV0dXJuIDA7CisJaW50IGhhbmRsZWQgPSAwOworCWludCBuOwogCi0JcmV0dXJuIGt2bV9pb19idXNfcmVhZCh2Y3B1LT5rdm0sIEtWTV9NTUlPX0JVUywgYWRkciwgbGVuLCB2KTsKKwlkbyB7CisJCW4gPSBtaW4obGVuLCA4KTsKKwkJaWYgKCEodmNwdS0+YXJjaC5hcGljICYmCisJCSAgICAgICFrdm1faW9kZXZpY2VfcmVhZCgmdmNwdS0+YXJjaC5hcGljLT5kZXYsIGFkZHIsIG4sIHYpKQorCQkgICAgJiYga3ZtX2lvX2J1c19yZWFkKHZjcHUtPmt2bSwgS1ZNX01NSU9fQlVTLCBhZGRyLCBuLCB2KSkKKwkJCWJyZWFrOworCQl0cmFjZV9rdm1fbW1pbyhLVk1fVFJBQ0VfTU1JT19SRUFELCBuLCBhZGRyLCAqKHU2NCAqKXYpOworCQloYW5kbGVkICs9IG47CisJCWFkZHIgKz0gbjsKKwkJbGVuIC09IG47CisJCXYgKz0gbjsKKwl9IHdoaWxlIChsZW4pOworCisJcmV0dXJuIGhhbmRsZWQ7CiB9CiAKIHN0YXRpYyB2b2lkIGt2bV9zZXRfc2VnbWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCkBAIC0zNzAzLDM3ICszODA1LDQzIEBACiB9CiAKIC8qIHVzZWQgZm9yIGluc3RydWN0aW9uIGZldGNoaW5nICovCi1zdGF0aWMgaW50IGt2bV9mZXRjaF9ndWVzdF92aXJ0KGd2YV90IGFkZHIsIHZvaWQgKnZhbCwgdW5zaWduZWQgaW50IGJ5dGVzLAotCQkJCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKK3N0YXRpYyBpbnQga3ZtX2ZldGNoX2d1ZXN0X3ZpcnQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCisJCQkJZ3ZhX3QgYWRkciwgdm9pZCAqdmFsLCB1bnNpZ25lZCBpbnQgYnl0ZXMsCiAJCQkJc3RydWN0IHg4Nl9leGNlcHRpb24gKmV4Y2VwdGlvbikKIHsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBlbXVsX3RvX3ZjcHUoY3R4dCk7CiAJdTMyIGFjY2VzcyA9IChrdm1feDg2X29wcy0+Z2V0X2NwbCh2Y3B1KSA9PSAzKSA/IFBGRVJSX1VTRVJfTUFTSyA6IDA7CisKIAlyZXR1cm4ga3ZtX3JlYWRfZ3Vlc3RfdmlydF9oZWxwZXIoYWRkciwgdmFsLCBieXRlcywgdmNwdSwKIAkJCQkJICBhY2Nlc3MgfCBQRkVSUl9GRVRDSF9NQVNLLAogCQkJCQkgIGV4Y2VwdGlvbik7CiB9CiAKLXN0YXRpYyBpbnQga3ZtX3JlYWRfZ3Vlc3RfdmlydChndmFfdCBhZGRyLCB2b2lkICp2YWwsIHVuc2lnbmVkIGludCBieXRlcywKLQkJCSAgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCitzdGF0aWMgaW50IGt2bV9yZWFkX2d1ZXN0X3ZpcnQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCisJCQkgICAgICAgZ3ZhX3QgYWRkciwgdm9pZCAqdmFsLCB1bnNpZ25lZCBpbnQgYnl0ZXMsCiAJCQkgICAgICAgc3RydWN0IHg4Nl9leGNlcHRpb24gKmV4Y2VwdGlvbikKIHsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBlbXVsX3RvX3ZjcHUoY3R4dCk7CiAJdTMyIGFjY2VzcyA9IChrdm1feDg2X29wcy0+Z2V0X2NwbCh2Y3B1KSA9PSAzKSA/IFBGRVJSX1VTRVJfTUFTSyA6IDA7CisKIAlyZXR1cm4ga3ZtX3JlYWRfZ3Vlc3RfdmlydF9oZWxwZXIoYWRkciwgdmFsLCBieXRlcywgdmNwdSwgYWNjZXNzLAogCQkJCQkgIGV4Y2VwdGlvbik7CiB9CiAKLXN0YXRpYyBpbnQga3ZtX3JlYWRfZ3Vlc3RfdmlydF9zeXN0ZW0oZ3ZhX3QgYWRkciwgdm9pZCAqdmFsLCB1bnNpZ25lZCBpbnQgYnl0ZXMsCi0JCQkJICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorc3RhdGljIGludCBrdm1fcmVhZF9ndWVzdF92aXJ0X3N5c3RlbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKKwkJCQkgICAgICBndmFfdCBhZGRyLCB2b2lkICp2YWwsIHVuc2lnbmVkIGludCBieXRlcywKIAkJCQkgICAgICBzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiAqZXhjZXB0aW9uKQogeworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGVtdWxfdG9fdmNwdShjdHh0KTsKIAlyZXR1cm4ga3ZtX3JlYWRfZ3Vlc3RfdmlydF9oZWxwZXIoYWRkciwgdmFsLCBieXRlcywgdmNwdSwgMCwgZXhjZXB0aW9uKTsKIH0KIAotc3RhdGljIGludCBrdm1fd3JpdGVfZ3Vlc3RfdmlydF9zeXN0ZW0oZ3ZhX3QgYWRkciwgdm9pZCAqdmFsLAorc3RhdGljIGludCBrdm1fd3JpdGVfZ3Vlc3RfdmlydF9zeXN0ZW0oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCisJCQkJICAgICAgIGd2YV90IGFkZHIsIHZvaWQgKnZhbCwKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IGJ5dGVzLAotCQkJCSAgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkJICAgICAgIHN0cnVjdCB4ODZfZXhjZXB0aW9uICpleGNlcHRpb24pCiB7CisJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gZW11bF90b192Y3B1KGN0eHQpOwogCXZvaWQgKmRhdGEgPSB2YWw7CiAJaW50IHIgPSBYODZFTVVMX0NPTlRJTlVFOwogCkBAIC0zNzYxLDEzICszODY5LDE1IEBACiAJcmV0dXJuIHI7CiB9CiAKLXN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF9lbXVsYXRlZCh1bnNpZ25lZCBsb25nIGFkZHIsCitzdGF0aWMgaW50IGVtdWxhdG9yX3JlYWRfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCisJCQkJICB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkJICB2b2lkICp2YWwsCiAJCQkJICB1bnNpZ25lZCBpbnQgYnl0ZXMsCi0JCQkJICBzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiAqZXhjZXB0aW9uLAotCQkJCSAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQorCQkJCSAgc3RydWN0IHg4Nl9leGNlcHRpb24gKmV4Y2VwdGlvbikKIHsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBlbXVsX3RvX3ZjcHUoY3R4dCk7CiAJZ3BhX3QgICAgICAgICAgICAgICAgIGdwYTsKKwlpbnQgaGFuZGxlZDsKIAogCWlmICh2Y3B1LT5tbWlvX3JlYWRfY29tcGxldGVkKSB7CiAJCW1lbWNweSh2YWwsIHZjcHUtPm1taW9fZGF0YSwgYnl0ZXMpOwpAQCAtMzc4Niw3ICszODk2LDcgQEAKIAlpZiAoKGdwYSAmIFBBR0VfTUFTSykgPT0gQVBJQ19ERUZBVUxUX1BIWVNfQkFTRSkKIAkJZ290byBtbWlvOwogCi0JaWYgKGt2bV9yZWFkX2d1ZXN0X3ZpcnQoYWRkciwgdmFsLCBieXRlcywgdmNwdSwgZXhjZXB0aW9uKQorCWlmIChrdm1fcmVhZF9ndWVzdF92aXJ0KGN0eHQsIGFkZHIsIHZhbCwgYnl0ZXMsIGV4Y2VwdGlvbikKIAkgICAgPT0gWDg2RU1VTF9DT05USU5VRSkKIAkJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7CiAKQEAgLTM3OTQsMTggKzM5MDQsMjQgQEAKIAkvKgogCSAqIElzIHRoaXMgTU1JTyBoYW5kbGVkIGxvY2FsbHk/CiAJICovCi0JaWYgKCF2Y3B1X21taW9fcmVhZCh2Y3B1LCBncGEsIGJ5dGVzLCB2YWwpKSB7Ci0JCXRyYWNlX2t2bV9tbWlvKEtWTV9UUkFDRV9NTUlPX1JFQUQsIGJ5dGVzLCBncGEsICoodTY0ICopdmFsKTsKKwloYW5kbGVkID0gdmNwdV9tbWlvX3JlYWQodmNwdSwgZ3BhLCBieXRlcywgdmFsKTsKKworCWlmIChoYW5kbGVkID09IGJ5dGVzKQogCQlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKLQl9CisKKwlncGEgKz0gaGFuZGxlZDsKKwlieXRlcyAtPSBoYW5kbGVkOworCXZhbCArPSBoYW5kbGVkOwogCiAJdHJhY2Vfa3ZtX21taW8oS1ZNX1RSQUNFX01NSU9fUkVBRF9VTlNBVElTRklFRCwgYnl0ZXMsIGdwYSwgMCk7CiAKIAl2Y3B1LT5tbWlvX25lZWRlZCA9IDE7CiAJdmNwdS0+cnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX01NSU87CiAJdmNwdS0+cnVuLT5tbWlvLnBoeXNfYWRkciA9IHZjcHUtPm1taW9fcGh5c19hZGRyID0gZ3BhOwotCXZjcHUtPnJ1bi0+bW1pby5sZW4gPSB2Y3B1LT5tbWlvX3NpemUgPSBieXRlczsKKwl2Y3B1LT5tbWlvX3NpemUgPSBieXRlczsKKwl2Y3B1LT5ydW4tPm1taW8ubGVuID0gbWluKHZjcHUtPm1taW9fc2l6ZSwgOCk7CiAJdmNwdS0+cnVuLT5tbWlvLmlzX3dyaXRlID0gdmNwdS0+bW1pb19pc193cml0ZSA9IDA7CisJdmNwdS0+bW1pb19pbmRleCA9IDA7CiAKIAlyZXR1cm4gWDg2RU1VTF9JT19ORUVERUQ7CiB9CkBAIC0zODI5LDYgKzM5NDUsNyBAQAogCQkJCQkgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJZ3BhX3QgICAgICAgICAgICAgICAgIGdwYTsKKwlpbnQgaGFuZGxlZDsKIAogCWdwYSA9IGt2bV9tbXVfZ3ZhX3RvX2dwYV93cml0ZSh2Y3B1LCBhZGRyLCBleGNlcHRpb24pOwogCkBAIC0zODQ3LDI1ICszOTY0LDM1IEBACiAJLyoKIAkgKiBJcyB0aGlzIE1NSU8gaGFuZGxlZCBsb2NhbGx5PwogCSAqLwotCWlmICghdmNwdV9tbWlvX3dyaXRlKHZjcHUsIGdwYSwgYnl0ZXMsIHZhbCkpCisJaGFuZGxlZCA9IHZjcHVfbW1pb193cml0ZSh2Y3B1LCBncGEsIGJ5dGVzLCB2YWwpOworCWlmIChoYW5kbGVkID09IGJ5dGVzKQogCQlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKIAorCWdwYSArPSBoYW5kbGVkOworCWJ5dGVzIC09IGhhbmRsZWQ7CisJdmFsICs9IGhhbmRsZWQ7CisKIAl2Y3B1LT5tbWlvX25lZWRlZCA9IDE7CisJbWVtY3B5KHZjcHUtPm1taW9fZGF0YSwgdmFsLCBieXRlcyk7CiAJdmNwdS0+cnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX01NSU87CiAJdmNwdS0+cnVuLT5tbWlvLnBoeXNfYWRkciA9IHZjcHUtPm1taW9fcGh5c19hZGRyID0gZ3BhOwotCXZjcHUtPnJ1bi0+bW1pby5sZW4gPSB2Y3B1LT5tbWlvX3NpemUgPSBieXRlczsKKwl2Y3B1LT5tbWlvX3NpemUgPSBieXRlczsKKwl2Y3B1LT5ydW4tPm1taW8ubGVuID0gbWluKHZjcHUtPm1taW9fc2l6ZSwgOCk7CiAJdmNwdS0+cnVuLT5tbWlvLmlzX3dyaXRlID0gdmNwdS0+bW1pb19pc193cml0ZSA9IDE7Ci0JbWVtY3B5KHZjcHUtPnJ1bi0+bW1pby5kYXRhLCB2YWwsIGJ5dGVzKTsKKwltZW1jcHkodmNwdS0+cnVuLT5tbWlvLmRhdGEsIHZjcHUtPm1taW9fZGF0YSwgOCk7CisJdmNwdS0+bW1pb19pbmRleCA9IDA7CiAKIAlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKIH0KIAotaW50IGVtdWxhdG9yX3dyaXRlX2VtdWxhdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwKK2ludCBlbXVsYXRvcl93cml0ZV9lbXVsYXRlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKKwkJCSAgICB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkgICAgY29uc3Qgdm9pZCAqdmFsLAogCQkJICAgIHVuc2lnbmVkIGludCBieXRlcywKLQkJCSAgICBzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiAqZXhjZXB0aW9uLAotCQkJICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKKwkJCSAgICBzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiAqZXhjZXB0aW9uKQogeworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGVtdWxfdG9fdmNwdShjdHh0KTsKKwogCS8qIENyb3NzaW5nIGEgcGFnZSBib3VuZGFyeT8gKi8KIAlpZiAoKChhZGRyICsgYnl0ZXMgLSAxKSBeIGFkZHIpICYgUEFHRV9NQVNLKSB7CiAJCWludCByYywgbm93OwpAQCAtMzg5MywxMyArNDAyMCwxNCBAQAogCShjbXB4Y2hnNjQoKHU2NCAqKShwdHIpLCAqKHU2NCAqKShvbGQpLCAqKHU2NCAqKShuZXcpKSA9PSAqKHU2NCAqKShvbGQpKQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZCh1bnNpZ25lZCBsb25nIGFkZHIsCitzdGF0aWMgaW50IGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkJICAgICBjb25zdCB2b2lkICpvbGQsCiAJCQkJICAgICBjb25zdCB2b2lkICpuZXcsCiAJCQkJICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsCi0JCQkJICAgICBzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiAqZXhjZXB0aW9uLAotCQkJCSAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQorCQkJCSAgICAgc3RydWN0IHg4Nl9leGNlcHRpb24gKmV4Y2VwdGlvbikKIHsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBlbXVsX3RvX3ZjcHUoY3R4dCk7CiAJZ3BhX3QgZ3BhOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCWNoYXIgKmthZGRyOwpAQCAtMzk1NSw3ICs0MDgzLDcgQEAKIGVtdWxfd3JpdGU6CiAJcHJpbnRrX29uY2UoS0VSTl9XQVJOSU5HICJrdm06IGVtdWxhdGluZyBleGNoYW5nZSBhcyB3cml0ZVxuIik7CiAKLQlyZXR1cm4gZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQoYWRkciwgbmV3LCBieXRlcywgZXhjZXB0aW9uLCB2Y3B1KTsKKwlyZXR1cm4gZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQoY3R4dCwgYWRkciwgbmV3LCBieXRlcywgZXhjZXB0aW9uKTsKIH0KIAogc3RhdGljIGludCBrZXJuZWxfcGlvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCAqcGQpCkBAIC0zOTc0LDkgKzQxMDIsMTIgQEAKIH0KIAogCi1zdGF0aWMgaW50IGVtdWxhdG9yX3Bpb19pbl9lbXVsYXRlZChpbnQgc2l6ZSwgdW5zaWduZWQgc2hvcnQgcG9ydCwgdm9pZCAqdmFsLAotCQkJICAgICB1bnNpZ25lZCBpbnQgY291bnQsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3N0YXRpYyBpbnQgZW11bGF0b3JfcGlvX2luX2VtdWxhdGVkKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAorCQkJCSAgICBpbnQgc2l6ZSwgdW5zaWduZWQgc2hvcnQgcG9ydCwgdm9pZCAqdmFsLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgY291bnQpCiB7CisJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gZW11bF90b192Y3B1KGN0eHQpOworCiAJaWYgKHZjcHUtPmFyY2gucGlvLmNvdW50KQogCQlnb3RvIGRhdGFfYXZhaWw7CiAKQEAgLTQwMDQsMTAgKzQxMzUsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBlbXVsYXRvcl9waW9fb3V0X2VtdWxhdGVkKGludCBzaXplLCB1bnNpZ25lZCBzaG9ydCBwb3J0LAotCQkJICAgICAgY29uc3Qgdm9pZCAqdmFsLCB1bnNpZ25lZCBpbnQgY291bnQsCi0JCQkgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCitzdGF0aWMgaW50IGVtdWxhdG9yX3Bpb19vdXRfZW11bGF0ZWQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCisJCQkJICAgICBpbnQgc2l6ZSwgdW5zaWduZWQgc2hvcnQgcG9ydCwKKwkJCQkgICAgIGNvbnN0IHZvaWQgKnZhbCwgdW5zaWduZWQgaW50IGNvdW50KQogeworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGVtdWxfdG9fdmNwdShjdHh0KTsKKwogCXRyYWNlX2t2bV9waW8oMSwgcG9ydCwgc2l6ZSwgY291bnQpOwogCiAJdmNwdS0+YXJjaC5waW8ucG9ydCA9IHBvcnQ7CkBAIC00MDM3LDEwICs0MTcwLDkgQEAKIAlyZXR1cm4ga3ZtX3g4Nl9vcHMtPmdldF9zZWdtZW50X2Jhc2UodmNwdSwgc2VnKTsKIH0KIAotaW50IGVtdWxhdGVfaW52bHBnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgYWRkcmVzcykKK3N0YXRpYyB2b2lkIGVtdWxhdG9yX2ludmxwZyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgdWxvbmcgYWRkcmVzcykKIHsKLQlrdm1fbW11X2ludmxwZyh2Y3B1LCBhZGRyZXNzKTsKLQlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKKwlrdm1fbW11X2ludmxwZyhlbXVsX3RvX3ZjcHUoY3R4dCksIGFkZHJlc3MpOwogfQogCiBpbnQga3ZtX2VtdWxhdGVfd2JpbnZkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTQwNjIsMjIgKzQxOTQsMjAgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9lbXVsYXRlX3diaW52ZCk7CiAKLWludCBlbXVsYXRlX2NsdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQorc3RhdGljIHZvaWQgZW11bGF0b3Jfd2JpbnZkKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQogewotCWt2bV94ODZfb3BzLT5zZXRfY3IwKHZjcHUsIGt2bV9yZWFkX2NyMF9iaXRzKHZjcHUsIH5YODZfQ1IwX1RTKSk7Ci0Ja3ZtX3g4Nl9vcHMtPmZwdV9hY3RpdmF0ZSh2Y3B1KTsKLQlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKKwlrdm1fZW11bGF0ZV93YmludmQoZW11bF90b192Y3B1KGN0eHQpKTsKIH0KIAotaW50IGVtdWxhdG9yX2dldF9kcihpbnQgZHIsIHVuc2lnbmVkIGxvbmcgKmRlc3QsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK2ludCBlbXVsYXRvcl9nZXRfZHIoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGludCBkciwgdW5zaWduZWQgbG9uZyAqZGVzdCkKIHsKLQlyZXR1cm4gX2t2bV9nZXRfZHIodmNwdSwgZHIsIGRlc3QpOworCXJldHVybiBfa3ZtX2dldF9kcihlbXVsX3RvX3ZjcHUoY3R4dCksIGRyLCBkZXN0KTsKIH0KIAotaW50IGVtdWxhdG9yX3NldF9kcihpbnQgZHIsIHVuc2lnbmVkIGxvbmcgdmFsdWUsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK2ludCBlbXVsYXRvcl9zZXRfZHIoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGludCBkciwgdW5zaWduZWQgbG9uZyB2YWx1ZSkKIHsKIAotCXJldHVybiBfX2t2bV9zZXRfZHIodmNwdSwgZHIsIHZhbHVlKTsKKwlyZXR1cm4gX19rdm1fc2V0X2RyKGVtdWxfdG9fdmNwdShjdHh0KSwgZHIsIHZhbHVlKTsKIH0KIAogc3RhdGljIHU2NCBta19jcl82NCh1NjQgY3Vycl9jciwgdTMyIG5ld192YWwpCkBAIC00MDg1LDggKzQyMTUsOSBAQAogCXJldHVybiAoY3Vycl9jciAmIH4oKDFVTEwgPDwgMzIpIC0gMSkpIHwgbmV3X3ZhbDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgZW11bGF0b3JfZ2V0X2NyKGludCBjciwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQorc3RhdGljIHVuc2lnbmVkIGxvbmcgZW11bGF0b3JfZ2V0X2NyKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBpbnQgY3IpCiB7CisJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gZW11bF90b192Y3B1KGN0eHQpOwogCXVuc2lnbmVkIGxvbmcgdmFsdWU7CiAKIAlzd2l0Y2ggKGNyKSB7CkBAIC00MTEzLDggKzQyNDQsOSBAQAogCXJldHVybiB2YWx1ZTsKIH0KIAotc3RhdGljIGludCBlbXVsYXRvcl9zZXRfY3IoaW50IGNyLCB1bnNpZ25lZCBsb25nIHZhbCwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQorc3RhdGljIGludCBlbXVsYXRvcl9zZXRfY3Ioc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGludCBjciwgdWxvbmcgdmFsKQogeworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGVtdWxfdG9fdmNwdShjdHh0KTsKIAlpbnQgcmVzID0gMDsKIAogCXN3aXRjaCAoY3IpIHsKQEAgLTQxNDEsMzMgKzQyNzMsNDUgQEAKIAlyZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgaW50IGVtdWxhdG9yX2dldF9jcGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQorc3RhdGljIGludCBlbXVsYXRvcl9nZXRfY3BsKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQogewotCXJldHVybiBrdm1feDg2X29wcy0+Z2V0X2NwbCh2Y3B1KTsKKwlyZXR1cm4ga3ZtX3g4Nl9vcHMtPmdldF9jcGwoZW11bF90b192Y3B1KGN0eHQpKTsKIH0KIAotc3RhdGljIHZvaWQgZW11bGF0b3JfZ2V0X2dkdChzdHJ1Y3QgZGVzY19wdHIgKmR0LCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCitzdGF0aWMgdm9pZCBlbXVsYXRvcl9nZXRfZ2R0KHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBzdHJ1Y3QgZGVzY19wdHIgKmR0KQogewotCWt2bV94ODZfb3BzLT5nZXRfZ2R0KHZjcHUsIGR0KTsKKwlrdm1feDg2X29wcy0+Z2V0X2dkdChlbXVsX3RvX3ZjcHUoY3R4dCksIGR0KTsKIH0KIAotc3RhdGljIHZvaWQgZW11bGF0b3JfZ2V0X2lkdChzdHJ1Y3QgZGVzY19wdHIgKmR0LCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCitzdGF0aWMgdm9pZCBlbXVsYXRvcl9nZXRfaWR0KHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBzdHJ1Y3QgZGVzY19wdHIgKmR0KQogewotCWt2bV94ODZfb3BzLT5nZXRfaWR0KHZjcHUsIGR0KTsKKwlrdm1feDg2X29wcy0+Z2V0X2lkdChlbXVsX3RvX3ZjcHUoY3R4dCksIGR0KTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgZW11bGF0b3JfZ2V0X2NhY2hlZF9zZWdtZW50X2Jhc2UoaW50IHNlZywKLQkJCQkJCSAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3N0YXRpYyB2b2lkIGVtdWxhdG9yX3NldF9nZHQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIHN0cnVjdCBkZXNjX3B0ciAqZHQpCiB7Ci0JcmV0dXJuIGdldF9zZWdtZW50X2Jhc2UodmNwdSwgc2VnKTsKKwlrdm1feDg2X29wcy0+c2V0X2dkdChlbXVsX3RvX3ZjcHUoY3R4dCksIGR0KTsKIH0KIAotc3RhdGljIGJvb2wgZW11bGF0b3JfZ2V0X2NhY2hlZF9kZXNjcmlwdG9yKHN0cnVjdCBkZXNjX3N0cnVjdCAqZGVzYywgdTMyICpiYXNlMywKLQkJCQkJICAgaW50IHNlZywgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQorc3RhdGljIHZvaWQgZW11bGF0b3Jfc2V0X2lkdChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgc3RydWN0IGRlc2NfcHRyICpkdCkKK3sKKwlrdm1feDg2X29wcy0+c2V0X2lkdChlbXVsX3RvX3ZjcHUoY3R4dCksIGR0KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZW11bGF0b3JfZ2V0X2NhY2hlZF9zZWdtZW50X2Jhc2UoCisJc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIGludCBzZWcpCit7CisJcmV0dXJuIGdldF9zZWdtZW50X2Jhc2UoZW11bF90b192Y3B1KGN0eHQpLCBzZWcpOworfQorCitzdGF0aWMgYm9vbCBlbXVsYXRvcl9nZXRfc2VnbWVudChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgdTE2ICpzZWxlY3RvciwKKwkJCQkgc3RydWN0IGRlc2Nfc3RydWN0ICpkZXNjLCB1MzIgKmJhc2UzLAorCQkJCSBpbnQgc2VnKQogewogCXN0cnVjdCBrdm1fc2VnbWVudCB2YXI7CiAKLQlrdm1fZ2V0X3NlZ21lbnQodmNwdSwgJnZhciwgc2VnKTsKKwlrdm1fZ2V0X3NlZ21lbnQoZW11bF90b192Y3B1KGN0eHQpLCAmdmFyLCBzZWcpOworCSpzZWxlY3RvciA9IHZhci5zZWxlY3RvcjsKIAogCWlmICh2YXIudW51c2FibGUpCiAJCXJldHVybiBmYWxzZTsKQEAgLTQxOTIsMTQgKzQzMzYsMTQgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgZW11bGF0b3Jfc2V0X2NhY2hlZF9kZXNjcmlwdG9yKHN0cnVjdCBkZXNjX3N0cnVjdCAqZGVzYywgdTMyIGJhc2UzLAotCQkJCQkgICBpbnQgc2VnLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCitzdGF0aWMgdm9pZCBlbXVsYXRvcl9zZXRfc2VnbWVudChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgdTE2IHNlbGVjdG9yLAorCQkJCSBzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmRlc2MsIHUzMiBiYXNlMywKKwkJCQkgaW50IHNlZykKIHsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBlbXVsX3RvX3ZjcHUoY3R4dCk7CiAJc3RydWN0IGt2bV9zZWdtZW50IHZhcjsKIAotCS8qIG5lZWRlZCB0byBwcmVzZXJ2ZSBzZWxlY3RvciAqLwotCWt2bV9nZXRfc2VnbWVudCh2Y3B1LCAmdmFyLCBzZWcpOwotCisJdmFyLnNlbGVjdG9yID0gc2VsZWN0b3I7CiAJdmFyLmJhc2UgPSBnZXRfZGVzY19iYXNlKGRlc2MpOwogI2lmZGVmIENPTkZJR19YODZfNjQKIAl2YXIuYmFzZSB8PSAoKHU2NCliYXNlMykgPDwgMzI7CkBAIC00MjIzLDIyICs0MzY3LDQ0IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdTE2IGVtdWxhdG9yX2dldF9zZWdtZW50X3NlbGVjdG9yKGludCBzZWcsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3N0YXRpYyBpbnQgZW11bGF0b3JfZ2V0X21zcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKKwkJCSAgICB1MzIgbXNyX2luZGV4LCB1NjQgKnBkYXRhKQogewotCXN0cnVjdCBrdm1fc2VnbWVudCBrdm1fc2VnOwotCi0Ja3ZtX2dldF9zZWdtZW50KHZjcHUsICZrdm1fc2VnLCBzZWcpOwotCXJldHVybiBrdm1fc2VnLnNlbGVjdG9yOworCXJldHVybiBrdm1fZ2V0X21zcihlbXVsX3RvX3ZjcHUoY3R4dCksIG1zcl9pbmRleCwgcGRhdGEpOwogfQogCi1zdGF0aWMgdm9pZCBlbXVsYXRvcl9zZXRfc2VnbWVudF9zZWxlY3Rvcih1MTYgc2VsLCBpbnQgc2VnLAotCQkJCQkgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3N0YXRpYyBpbnQgZW11bGF0b3Jfc2V0X21zcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKKwkJCSAgICB1MzIgbXNyX2luZGV4LCB1NjQgZGF0YSkKIHsKLQlzdHJ1Y3Qga3ZtX3NlZ21lbnQga3ZtX3NlZzsKKwlyZXR1cm4ga3ZtX3NldF9tc3IoZW11bF90b192Y3B1KGN0eHQpLCBtc3JfaW5kZXgsIGRhdGEpOworfQogCi0Ja3ZtX2dldF9zZWdtZW50KHZjcHUsICZrdm1fc2VnLCBzZWcpOwotCWt2bV9zZWcuc2VsZWN0b3IgPSBzZWw7Ci0Ja3ZtX3NldF9zZWdtZW50KHZjcHUsICZrdm1fc2VnLCBzZWcpOworc3RhdGljIHZvaWQgZW11bGF0b3JfaGFsdChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKwllbXVsX3RvX3ZjcHUoY3R4dCktPmFyY2guaGFsdF9yZXF1ZXN0ID0gMTsKK30KKworc3RhdGljIHZvaWQgZW11bGF0b3JfZ2V0X2ZwdShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlrdm1fbG9hZF9ndWVzdF9mcHUoZW11bF90b192Y3B1KGN0eHQpKTsKKwkvKgorCSAqIENSMC5UUyBtYXkgcmVmZXJlbmNlIHRoZSBob3N0IGZwdSBzdGF0ZSwgbm90IHRoZSBndWVzdCBmcHUgc3RhdGUsCisJICogc28gaXQgbWF5IGJlIGNsZWFyIGF0IHRoaXMgcG9pbnQuCisJICovCisJY2x0cygpOworfQorCitzdGF0aWMgdm9pZCBlbXVsYXRvcl9wdXRfZnB1KHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworCXByZWVtcHRfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyBpbnQgZW11bGF0b3JfaW50ZXJjZXB0KHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAorCQkJICAgICAgc3RydWN0IHg4Nl9pbnN0cnVjdGlvbl9pbmZvICppbmZvLAorCQkJICAgICAgZW51bSB4ODZfaW50ZXJjZXB0X3N0YWdlIHN0YWdlKQoreworCXJldHVybiBrdm1feDg2X29wcy0+Y2hlY2tfaW50ZXJjZXB0KGVtdWxfdG9fdmNwdShjdHh0KSwgaW5mbywgc3RhZ2UpOwogfQogCiBzdGF0aWMgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyBlbXVsYXRlX29wcyA9IHsKQEAgLTQyNDgsMjIgKzQ0MTQsMjkgQEAKIAkucmVhZF9lbXVsYXRlZCAgICAgICA9IGVtdWxhdG9yX3JlYWRfZW11bGF0ZWQsCiAJLndyaXRlX2VtdWxhdGVkICAgICAgPSBlbXVsYXRvcl93cml0ZV9lbXVsYXRlZCwKIAkuY21weGNoZ19lbXVsYXRlZCAgICA9IGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQsCisJLmludmxwZyAgICAgICAgICAgICAgPSBlbXVsYXRvcl9pbnZscGcsCiAJLnBpb19pbl9lbXVsYXRlZCAgICAgPSBlbXVsYXRvcl9waW9faW5fZW11bGF0ZWQsCiAJLnBpb19vdXRfZW11bGF0ZWQgICAgPSBlbXVsYXRvcl9waW9fb3V0X2VtdWxhdGVkLAotCS5nZXRfY2FjaGVkX2Rlc2NyaXB0b3IgPSBlbXVsYXRvcl9nZXRfY2FjaGVkX2Rlc2NyaXB0b3IsCi0JLnNldF9jYWNoZWRfZGVzY3JpcHRvciA9IGVtdWxhdG9yX3NldF9jYWNoZWRfZGVzY3JpcHRvciwKLQkuZ2V0X3NlZ21lbnRfc2VsZWN0b3IgPSBlbXVsYXRvcl9nZXRfc2VnbWVudF9zZWxlY3RvciwKLQkuc2V0X3NlZ21lbnRfc2VsZWN0b3IgPSBlbXVsYXRvcl9zZXRfc2VnbWVudF9zZWxlY3RvciwKKwkuZ2V0X3NlZ21lbnQgICAgICAgICA9IGVtdWxhdG9yX2dldF9zZWdtZW50LAorCS5zZXRfc2VnbWVudCAgICAgICAgID0gZW11bGF0b3Jfc2V0X3NlZ21lbnQsCiAJLmdldF9jYWNoZWRfc2VnbWVudF9iYXNlID0gZW11bGF0b3JfZ2V0X2NhY2hlZF9zZWdtZW50X2Jhc2UsCiAJLmdldF9nZHQgICAgICAgICAgICAgPSBlbXVsYXRvcl9nZXRfZ2R0LAogCS5nZXRfaWR0CSAgICAgPSBlbXVsYXRvcl9nZXRfaWR0LAorCS5zZXRfZ2R0ICAgICAgICAgICAgID0gZW11bGF0b3Jfc2V0X2dkdCwKKwkuc2V0X2lkdAkgICAgID0gZW11bGF0b3Jfc2V0X2lkdCwKIAkuZ2V0X2NyICAgICAgICAgICAgICA9IGVtdWxhdG9yX2dldF9jciwKIAkuc2V0X2NyICAgICAgICAgICAgICA9IGVtdWxhdG9yX3NldF9jciwKIAkuY3BsICAgICAgICAgICAgICAgICA9IGVtdWxhdG9yX2dldF9jcGwsCiAJLmdldF9kciAgICAgICAgICAgICAgPSBlbXVsYXRvcl9nZXRfZHIsCiAJLnNldF9kciAgICAgICAgICAgICAgPSBlbXVsYXRvcl9zZXRfZHIsCi0JLnNldF9tc3IgICAgICAgICAgICAgPSBrdm1fc2V0X21zciwKLQkuZ2V0X21zciAgICAgICAgICAgICA9IGt2bV9nZXRfbXNyLAorCS5zZXRfbXNyICAgICAgICAgICAgID0gZW11bGF0b3Jfc2V0X21zciwKKwkuZ2V0X21zciAgICAgICAgICAgICA9IGVtdWxhdG9yX2dldF9tc3IsCisJLmhhbHQgICAgICAgICAgICAgICAgPSBlbXVsYXRvcl9oYWx0LAorCS53YmludmQgICAgICAgICAgICAgID0gZW11bGF0b3Jfd2JpbnZkLAorCS5maXhfaHlwZXJjYWxsICAgICAgID0gZW11bGF0b3JfZml4X2h5cGVyY2FsbCwKKwkuZ2V0X2ZwdSAgICAgICAgICAgICA9IGVtdWxhdG9yX2dldF9mcHUsCisJLnB1dF9mcHUgICAgICAgICAgICAgPSBlbXVsYXRvcl9wdXRfZnB1LAorCS5pbnRlcmNlcHQgICAgICAgICAgID0gZW11bGF0b3JfaW50ZXJjZXB0LAogfTsKIAogc3RhdGljIHZvaWQgY2FjaGVfYWxsX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtNDMwNSwxMiArNDQ3OCwxNyBAQAogCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmdmNwdS0+YXJjaC5lbXVsYXRlX2N0eHQuZGVjb2RlOwogCWludCBjc19kYiwgY3NfbDsKIAorCS8qCisJICogVE9ETzogZml4IGVtdWxhdGUuYyB0byB1c2UgZ3Vlc3RfcmVhZC93cml0ZV9yZWdpc3RlcgorCSAqIGluc3RlYWQgb2YgZGlyZWN0IC0+cmVncyBhY2Nlc3NlcywgY2FuIHNhdmUgaHVuZHJlZCBjeWNsZXMKKwkgKiBvbiBJbnRlbCBmb3IgaW5zdHJ1Y3Rpb25zIHRoYXQgZG9uJ3QgcmVhZC9jaGFuZ2UgUlNQLCBmb3IKKwkgKiBmb3IgZXhhbXBsZS4KKwkgKi8KIAljYWNoZV9hbGxfcmVncyh2Y3B1KTsKIAogCWt2bV94ODZfb3BzLT5nZXRfY3NfZGJfbF9iaXRzKHZjcHUsICZjc19kYiwgJmNzX2wpOwogCi0JdmNwdS0+YXJjaC5lbXVsYXRlX2N0eHQudmNwdSA9IHZjcHU7Ci0JdmNwdS0+YXJjaC5lbXVsYXRlX2N0eHQuZWZsYWdzID0ga3ZtX3g4Nl9vcHMtPmdldF9yZmxhZ3ModmNwdSk7CisJdmNwdS0+YXJjaC5lbXVsYXRlX2N0eHQuZWZsYWdzID0ga3ZtX2dldF9yZmxhZ3ModmNwdSk7CiAJdmNwdS0+YXJjaC5lbXVsYXRlX2N0eHQuZWlwID0ga3ZtX3JpcF9yZWFkKHZjcHUpOwogCXZjcHUtPmFyY2guZW11bGF0ZV9jdHh0Lm1vZGUgPQogCQkoIWlzX3Byb3Rtb2RlKHZjcHUpKSA/IFg4NkVNVUxfTU9ERV9SRUFMIDoKQEAgLTQzMTgsMTEgKzQ0OTYsMTMgQEAKIAkJPyBYODZFTVVMX01PREVfVk04NiA6IGNzX2wKIAkJPyBYODZFTVVMX01PREVfUFJPVDY0IDoJY3NfZGIKIAkJPyBYODZFTVVMX01PREVfUFJPVDMyIDogWDg2RU1VTF9NT0RFX1BST1QxNjsKKwl2Y3B1LT5hcmNoLmVtdWxhdGVfY3R4dC5ndWVzdF9tb2RlID0gaXNfZ3Vlc3RfbW9kZSh2Y3B1KTsKIAltZW1zZXQoYywgMCwgc2l6ZW9mKHN0cnVjdCBkZWNvZGVfY2FjaGUpKTsKIAltZW1jcHkoYy0+cmVncywgdmNwdS0+YXJjaC5yZWdzLCBzaXplb2YgYy0+cmVncyk7CisJdmNwdS0+YXJjaC5lbXVsYXRlX3JlZ3NfbmVlZF9zeW5jX2Zyb21fdmNwdSA9IGZhbHNlOwogfQogCi1pbnQga3ZtX2luamVjdF9yZWFsbW9kZV9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgaXJxKQoraW50IGt2bV9pbmplY3RfcmVhbG1vZGVfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGlycSwgaW50IGluY19laXApCiB7CiAJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZ2Y3B1LT5hcmNoLmVtdWxhdGVfY3R4dC5kZWNvZGU7CiAJaW50IHJldDsKQEAgLTQzMzEsNyArNDUxMSw4IEBACiAKIAl2Y3B1LT5hcmNoLmVtdWxhdGVfY3R4dC5kZWNvZGUub3BfYnl0ZXMgPSAyOwogCXZjcHUtPmFyY2guZW11bGF0ZV9jdHh0LmRlY29kZS5hZF9ieXRlcyA9IDI7Ci0JdmNwdS0+YXJjaC5lbXVsYXRlX2N0eHQuZGVjb2RlLmVpcCA9IHZjcHUtPmFyY2guZW11bGF0ZV9jdHh0LmVpcDsKKwl2Y3B1LT5hcmNoLmVtdWxhdGVfY3R4dC5kZWNvZGUuZWlwID0gdmNwdS0+YXJjaC5lbXVsYXRlX2N0eHQuZWlwICsKKwkJCQkJCQkJIGluY19laXA7CiAJcmV0ID0gZW11bGF0ZV9pbnRfcmVhbCgmdmNwdS0+YXJjaC5lbXVsYXRlX2N0eHQsICZlbXVsYXRlX29wcywgaXJxKTsKIAogCWlmIChyZXQgIT0gWDg2RU1VTF9DT05USU5VRSkKQEAgLTQzNDAsNyArNDUyMSw3IEBACiAJdmNwdS0+YXJjaC5lbXVsYXRlX2N0eHQuZWlwID0gYy0+ZWlwOwogCW1lbWNweSh2Y3B1LT5hcmNoLnJlZ3MsIGMtPnJlZ3MsIHNpemVvZiBjLT5yZWdzKTsKIAlrdm1fcmlwX3dyaXRlKHZjcHUsIHZjcHUtPmFyY2guZW11bGF0ZV9jdHh0LmVpcCk7Ci0Ja3ZtX3g4Nl9vcHMtPnNldF9yZmxhZ3ModmNwdSwgdmNwdS0+YXJjaC5lbXVsYXRlX2N0eHQuZWZsYWdzKTsKKwlrdm1fc2V0X3JmbGFncyh2Y3B1LCB2Y3B1LT5hcmNoLmVtdWxhdGVfY3R4dC5lZmxhZ3MpOwogCiAJaWYgKGlycSA9PSBOTUlfVkVDVE9SKQogCQl2Y3B1LT5hcmNoLm5taV9wZW5kaW5nID0gZmFsc2U7CkBAIC00NDAyLDE2ICs0NTgzLDkgQEAKIHsKIAlpbnQgcjsKIAlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJnZjcHUtPmFyY2guZW11bGF0ZV9jdHh0LmRlY29kZTsKKwlib29sIHdyaXRlYmFjayA9IHRydWU7CiAKIAlrdm1fY2xlYXJfZXhjZXB0aW9uX3F1ZXVlKHZjcHUpOwotCXZjcHUtPmFyY2gubW1pb19mYXVsdF9jcjIgPSBjcjI7Ci0JLyoKLQkgKiBUT0RPOiBmaXggZW11bGF0ZS5jIHRvIHVzZSBndWVzdF9yZWFkL3dyaXRlX3JlZ2lzdGVyCi0JICogaW5zdGVhZCBvZiBkaXJlY3QgLT5yZWdzIGFjY2Vzc2VzLCBjYW4gc2F2ZSBodW5kcmVkIGN5Y2xlcwotCSAqIG9uIEludGVsIGZvciBpbnN0cnVjdGlvbnMgdGhhdCBkb24ndCByZWFkL2NoYW5nZSBSU1AsIGZvcgotCSAqIGZvciBleGFtcGxlLgotCSAqLwotCWNhY2hlX2FsbF9yZWdzKHZjcHUpOwogCiAJaWYgKCEoZW11bGF0aW9uX3R5cGUgJiBFTVVMVFlQRV9OT19ERUNPREUpKSB7CiAJCWluaXRfZW11bGF0ZV9jdHh0KHZjcHUpOwpAQCAtNDQ0MiwxMyArNDYxNiwxOSBAQAogCQlyZXR1cm4gRU1VTEFURV9ET05FOwogCX0KIAotCS8qIHRoaXMgaXMgbmVlZGVkIGZvciB2bXdhcmUgYmFja2RvciBpbnRlcmZhY2UgdG8gd29yayBzaW5jZSBpdAorCS8qIHRoaXMgaXMgbmVlZGVkIGZvciB2bXdhcmUgYmFja2Rvb3IgaW50ZXJmYWNlIHRvIHdvcmsgc2luY2UgaXQKIAkgICBjaGFuZ2VzIHJlZ2lzdGVycyB2YWx1ZXMgIGR1cmluZyBJTyBvcGVyYXRpb24gKi8KLQltZW1jcHkoYy0+cmVncywgdmNwdS0+YXJjaC5yZWdzLCBzaXplb2YgYy0+cmVncyk7CisJaWYgKHZjcHUtPmFyY2guZW11bGF0ZV9yZWdzX25lZWRfc3luY19mcm9tX3ZjcHUpIHsKKwkJdmNwdS0+YXJjaC5lbXVsYXRlX3JlZ3NfbmVlZF9zeW5jX2Zyb21fdmNwdSA9IGZhbHNlOworCQltZW1jcHkoYy0+cmVncywgdmNwdS0+YXJjaC5yZWdzLCBzaXplb2YgYy0+cmVncyk7CisJfQogCiByZXN0YXJ0OgogCXIgPSB4ODZfZW11bGF0ZV9pbnNuKCZ2Y3B1LT5hcmNoLmVtdWxhdGVfY3R4dCk7CiAKKwlpZiAociA9PSBFTVVMQVRJT05fSU5URVJDRVBURUQpCisJCXJldHVybiBFTVVMQVRFX0RPTkU7CisKIAlpZiAociA9PSBFTVVMQVRJT05fRkFJTEVEKSB7CiAJCWlmIChyZWV4ZWN1dGVfaW5zdHJ1Y3Rpb24odmNwdSwgY3IyKSkKIAkJCXJldHVybiBFTVVMQVRFX0RPTkU7CkBAIC00NDYyLDIxICs0NjQyLDI4IEBACiAJfSBlbHNlIGlmICh2Y3B1LT5hcmNoLnBpby5jb3VudCkgewogCQlpZiAoIXZjcHUtPmFyY2gucGlvLmluKQogCQkJdmNwdS0+YXJjaC5waW8uY291bnQgPSAwOworCQllbHNlCisJCQl3cml0ZWJhY2sgPSBmYWxzZTsKIAkJciA9IEVNVUxBVEVfRE9fTU1JTzsKIAl9IGVsc2UgaWYgKHZjcHUtPm1taW9fbmVlZGVkKSB7Ci0JCWlmICh2Y3B1LT5tbWlvX2lzX3dyaXRlKQotCQkJdmNwdS0+bW1pb19uZWVkZWQgPSAwOworCQlpZiAoIXZjcHUtPm1taW9faXNfd3JpdGUpCisJCQl3cml0ZWJhY2sgPSBmYWxzZTsKIAkJciA9IEVNVUxBVEVfRE9fTU1JTzsKIAl9IGVsc2UgaWYgKHIgPT0gRU1VTEFUSU9OX1JFU1RBUlQpCiAJCWdvdG8gcmVzdGFydDsKIAllbHNlCiAJCXIgPSBFTVVMQVRFX0RPTkU7CiAKLQl0b2dnbGVfaW50ZXJydXB0aWJpbGl0eSh2Y3B1LCB2Y3B1LT5hcmNoLmVtdWxhdGVfY3R4dC5pbnRlcnJ1cHRpYmlsaXR5KTsKLQlrdm1feDg2X29wcy0+c2V0X3JmbGFncyh2Y3B1LCB2Y3B1LT5hcmNoLmVtdWxhdGVfY3R4dC5lZmxhZ3MpOwotCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9FVkVOVCwgdmNwdSk7Ci0JbWVtY3B5KHZjcHUtPmFyY2gucmVncywgYy0+cmVncywgc2l6ZW9mIGMtPnJlZ3MpOwotCWt2bV9yaXBfd3JpdGUodmNwdSwgdmNwdS0+YXJjaC5lbXVsYXRlX2N0eHQuZWlwKTsKKwlpZiAod3JpdGViYWNrKSB7CisJCXRvZ2dsZV9pbnRlcnJ1cHRpYmlsaXR5KHZjcHUsCisJCQkJdmNwdS0+YXJjaC5lbXVsYXRlX2N0eHQuaW50ZXJydXB0aWJpbGl0eSk7CisJCWt2bV9zZXRfcmZsYWdzKHZjcHUsIHZjcHUtPmFyY2guZW11bGF0ZV9jdHh0LmVmbGFncyk7CisJCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9FVkVOVCwgdmNwdSk7CisJCW1lbWNweSh2Y3B1LT5hcmNoLnJlZ3MsIGMtPnJlZ3MsIHNpemVvZiBjLT5yZWdzKTsKKwkJdmNwdS0+YXJjaC5lbXVsYXRlX3JlZ3NfbmVlZF9zeW5jX3RvX3ZjcHUgPSBmYWxzZTsKKwkJa3ZtX3JpcF93cml0ZSh2Y3B1LCB2Y3B1LT5hcmNoLmVtdWxhdGVfY3R4dC5laXApOworCX0gZWxzZQorCQl2Y3B1LT5hcmNoLmVtdWxhdGVfcmVnc19uZWVkX3N5bmNfdG9fdmNwdSA9IHRydWU7CiAKIAlyZXR1cm4gcjsKIH0KQEAgLTQ0ODUsNyArNDY3Miw4IEBACiBpbnQga3ZtX2Zhc3RfcGlvX291dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzaXplLCB1bnNpZ25lZCBzaG9ydCBwb3J0KQogewogCXVuc2lnbmVkIGxvbmcgdmFsID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JBWCk7Ci0JaW50IHJldCA9IGVtdWxhdG9yX3Bpb19vdXRfZW11bGF0ZWQoc2l6ZSwgcG9ydCwgJnZhbCwgMSwgdmNwdSk7CisJaW50IHJldCA9IGVtdWxhdG9yX3Bpb19vdXRfZW11bGF0ZWQoJnZjcHUtPmFyY2guZW11bGF0ZV9jdHh0LAorCQkJCQkgICAgc2l6ZSwgcG9ydCwgJnZhbCwgMSk7CiAJLyogZG8gbm90IHJldHVybiB0byBlbXVsYXRvciBhZnRlciByZXR1cm4gZnJvbSB1c2Vyc3BhY2UgKi8KIAl2Y3B1LT5hcmNoLnBpby5jb3VudCA9IDA7CiAJcmV0dXJuIHJldDsKQEAgLTQ4NzksOCArNTA2Nyw5IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fZW11bGF0ZV9oeXBlcmNhbGwpOwogCi1pbnQga3ZtX2ZpeF9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoraW50IGVtdWxhdG9yX2ZpeF9oeXBlcmNhbGwoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCiB7CisJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gZW11bF90b192Y3B1KGN0eHQpOwogCWNoYXIgaW5zdHJ1Y3Rpb25bM107CiAJdW5zaWduZWQgbG9uZyByaXAgPSBrdm1fcmlwX3JlYWQodmNwdSk7CiAKQEAgLTQ4OTMsMjEgKzUwODIsOCBAQAogCiAJa3ZtX3g4Nl9vcHMtPnBhdGNoX2h5cGVyY2FsbCh2Y3B1LCBpbnN0cnVjdGlvbik7CiAKLQlyZXR1cm4gZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQocmlwLCBpbnN0cnVjdGlvbiwgMywgTlVMTCwgdmNwdSk7Ci19Ci0KLXZvaWQgcmVhbG1vZGVfbGdkdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBsaW1pdCwgdW5zaWduZWQgbG9uZyBiYXNlKQotewotCXN0cnVjdCBkZXNjX3B0ciBkdCA9IHsgbGltaXQsIGJhc2UgfTsKLQotCWt2bV94ODZfb3BzLT5zZXRfZ2R0KHZjcHUsICZkdCk7Ci19Ci0KLXZvaWQgcmVhbG1vZGVfbGlkdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBsaW1pdCwgdW5zaWduZWQgbG9uZyBiYXNlKQotewotCXN0cnVjdCBkZXNjX3B0ciBkdCA9IHsgbGltaXQsIGJhc2UgfTsKLQotCWt2bV94ODZfb3BzLT5zZXRfaWR0KHZjcHUsICZkdCk7CisJcmV0dXJuIGVtdWxhdG9yX3dyaXRlX2VtdWxhdGVkKCZ2Y3B1LT5hcmNoLmVtdWxhdGVfY3R4dCwKKwkJCQkgICAgICAgcmlwLCBpbnN0cnVjdGlvbiwgMywgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbnQgbW92ZV90b19uZXh0X3N0YXRlZnVsX2NwdWlkX2VudHJ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGkpCkBAIC01MTcwLDYgKzUzNDYsNyBAQAogc3RhdGljIGludCB2Y3B1X2VudGVyX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlpbnQgcjsKKwlib29sIG5taV9wZW5kaW5nOwogCWJvb2wgcmVxX2ludF93aW4gPSAhaXJxY2hpcF9pbl9rZXJuZWwodmNwdS0+a3ZtKSAmJgogCQl2Y3B1LT5ydW4tPnJlcXVlc3RfaW50ZXJydXB0X3dpbmRvdzsKIApAQCAtNTIwNywxOSArNTM4NCwyNSBAQAogCQkJciA9IDE7CiAJCQlnb3RvIG91dDsKIAkJfQotCQlpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9OTUksIHZjcHUpKQotCQkJdmNwdS0+YXJjaC5ubWlfcGVuZGluZyA9IHRydWU7CiAJfQogCiAJciA9IGt2bV9tbXVfcmVsb2FkKHZjcHUpOwogCWlmICh1bmxpa2VseShyKSkKIAkJZ290byBvdXQ7CiAKKwkvKgorCSAqIEFuIE5NSSBjYW4gYmUgaW5qZWN0ZWQgYmV0d2VlbiBsb2NhbCBubWlfcGVuZGluZyByZWFkIGFuZAorCSAqIHZjcHUtPmFyY2gubm1pX3BlbmRpbmcgcmVhZCBpbnNpZGUgaW5qZWN0X3BlbmRpbmdfZXZlbnQoKS4KKwkgKiBCdXQgaW4gdGhhdCBjYXNlLCBLVk1fUkVRX0VWRU5UIHdpbGwgYmUgc2V0LCB3aGljaCBtYWtlcworCSAqIHRoZSByYWNlIGRlc2NyaWJlZCBhYm92ZSBiZW5pZ24uCisJICovCisJbm1pX3BlbmRpbmcgPSBBQ0NFU1NfT05DRSh2Y3B1LT5hcmNoLm5taV9wZW5kaW5nKTsKKwogCWlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX0VWRU5ULCB2Y3B1KSB8fCByZXFfaW50X3dpbikgewogCQlpbmplY3RfcGVuZGluZ19ldmVudCh2Y3B1KTsKIAogCQkvKiBlbmFibGUgTk1JL0lSUSB3aW5kb3cgb3BlbiBleGl0cyBpZiBuZWVkZWQgKi8KLQkJaWYgKHZjcHUtPmFyY2gubm1pX3BlbmRpbmcpCisJCWlmIChubWlfcGVuZGluZykKIAkJCWt2bV94ODZfb3BzLT5lbmFibGVfbm1pX3dpbmRvdyh2Y3B1KTsKIAkJZWxzZSBpZiAoa3ZtX2NwdV9oYXNfaW50ZXJydXB0KHZjcHUpIHx8IHJlcV9pbnRfd2luKQogCQkJa3ZtX3g4Nl9vcHMtPmVuYWJsZV9pcnFfd2luZG93KHZjcHUpOwpAQCAtNTM5OSw2ICs1NTgyLDQxIEBACiAJcmV0dXJuIHI7CiB9CiAKK3N0YXRpYyBpbnQgY29tcGxldGVfbW1pbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IGt2bV9ydW4gKnJ1biA9IHZjcHUtPnJ1bjsKKwlpbnQgcjsKKworCWlmICghKHZjcHUtPmFyY2gucGlvLmNvdW50IHx8IHZjcHUtPm1taW9fbmVlZGVkKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAodmNwdS0+bW1pb19uZWVkZWQpIHsKKwkJdmNwdS0+bW1pb19uZWVkZWQgPSAwOworCQlpZiAoIXZjcHUtPm1taW9faXNfd3JpdGUpCisJCQltZW1jcHkodmNwdS0+bW1pb19kYXRhICsgdmNwdS0+bW1pb19pbmRleCwKKwkJCSAgICAgICBydW4tPm1taW8uZGF0YSwgOCk7CisJCXZjcHUtPm1taW9faW5kZXggKz0gODsKKwkJaWYgKHZjcHUtPm1taW9faW5kZXggPCB2Y3B1LT5tbWlvX3NpemUpIHsKKwkJCXJ1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9NTUlPOworCQkJcnVuLT5tbWlvLnBoeXNfYWRkciA9IHZjcHUtPm1taW9fcGh5c19hZGRyICsgdmNwdS0+bW1pb19pbmRleDsKKwkJCW1lbWNweShydW4tPm1taW8uZGF0YSwgdmNwdS0+bW1pb19kYXRhICsgdmNwdS0+bW1pb19pbmRleCwgOCk7CisJCQlydW4tPm1taW8ubGVuID0gbWluKHZjcHUtPm1taW9fc2l6ZSAtIHZjcHUtPm1taW9faW5kZXgsIDgpOworCQkJcnVuLT5tbWlvLmlzX3dyaXRlID0gdmNwdS0+bW1pb19pc193cml0ZTsKKwkJCXZjcHUtPm1taW9fbmVlZGVkID0gMTsKKwkJCXJldHVybiAwOworCQl9CisJCWlmICh2Y3B1LT5tbWlvX2lzX3dyaXRlKQorCQkJcmV0dXJuIDE7CisJCXZjcHUtPm1taW9fcmVhZF9jb21wbGV0ZWQgPSAxOworCX0KKwl2Y3B1LT5zcmN1X2lkeCA9IHNyY3VfcmVhZF9sb2NrKCZ2Y3B1LT5rdm0tPnNyY3UpOworCXIgPSBlbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIEVNVUxUWVBFX05PX0RFQ09ERSk7CisJc3JjdV9yZWFkX3VubG9jaygmdmNwdS0+a3ZtLT5zcmN1LCB2Y3B1LT5zcmN1X2lkeCk7CisJaWYgKHIgIT0gRU1VTEFURV9ET05FKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKwogaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7CiAJaW50IHI7CkBAIC01NDI1LDIwICs1NjQzLDEwIEBACiAJCX0KIAl9CiAKLQlpZiAodmNwdS0+YXJjaC5waW8uY291bnQgfHwgdmNwdS0+bW1pb19uZWVkZWQpIHsKLQkJaWYgKHZjcHUtPm1taW9fbmVlZGVkKSB7Ci0JCQltZW1jcHkodmNwdS0+bW1pb19kYXRhLCBrdm1fcnVuLT5tbWlvLmRhdGEsIDgpOwotCQkJdmNwdS0+bW1pb19yZWFkX2NvbXBsZXRlZCA9IDE7Ci0JCQl2Y3B1LT5tbWlvX25lZWRlZCA9IDA7Ci0JCX0KLQkJdmNwdS0+c3JjdV9pZHggPSBzcmN1X3JlYWRfbG9jaygmdmNwdS0+a3ZtLT5zcmN1KTsKLQkJciA9IGVtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgRU1VTFRZUEVfTk9fREVDT0RFKTsKLQkJc3JjdV9yZWFkX3VubG9jaygmdmNwdS0+a3ZtLT5zcmN1LCB2Y3B1LT5zcmN1X2lkeCk7Ci0JCWlmIChyICE9IEVNVUxBVEVfRE9ORSkgewotCQkJciA9IDA7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KKwlyID0gY29tcGxldGVfbW1pbyh2Y3B1KTsKKwlpZiAociA8PSAwKQorCQlnb3RvIG91dDsKKwogCWlmIChrdm1fcnVuLT5leGl0X3JlYXNvbiA9PSBLVk1fRVhJVF9IWVBFUkNBTEwpCiAJCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkFYLAogCQkJCSAgICAga3ZtX3J1bi0+aHlwZXJjYWxsLnJldCk7CkBAIC01NDU1LDYgKzU2NjMsMTggQEAKIAogaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3JlZ3MgKnJlZ3MpCiB7CisJaWYgKHZjcHUtPmFyY2guZW11bGF0ZV9yZWdzX25lZWRfc3luY190b192Y3B1KSB7CisJCS8qCisJCSAqIFdlIGFyZSBoZXJlIGlmIHVzZXJzcGFjZSBjYWxscyBnZXRfcmVncygpIGluIHRoZSBtaWRkbGUgb2YKKwkJICogaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLiBSZWdpc3RlcnMgc3RhdGUgbmVlZHMgdG8gYmUgY29waWVkCisJCSAqIGJhY2sgZnJvbSBlbXVsYXRpb24gY29udGV4dCB0byB2Y3B1LiBVc3JhcGFjZSBzaG91bGRuJ3QgZG8KKwkJICogdGhhdCB1c3VhbGx5LCBidXQgc29tZSBiYWQgZGVzaWduZWQgUFYgZGV2aWNlcyAodm13YXJlCisJCSAqIGJhY2tkb29yIGludGVyZmFjZSkgbmVlZCB0aGlzIHRvIHdvcmsKKwkJICovCisJCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmdmNwdS0+YXJjaC5lbXVsYXRlX2N0eHQuZGVjb2RlOworCQltZW1jcHkodmNwdS0+YXJjaC5yZWdzLCBjLT5yZWdzLCBzaXplb2YgYy0+cmVncyk7CisJCXZjcHUtPmFyY2guZW11bGF0ZV9yZWdzX25lZWRfc3luY190b192Y3B1ID0gZmFsc2U7CisJfQogCXJlZ3MtPnJheCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQVgpOwogCXJlZ3MtPnJieCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQlgpOwogCXJlZ3MtPnJjeCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQ1gpOwpAQCAtNTQ4Miw2ICs1NzAyLDkgQEAKIAogaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3JlZ3MgKnJlZ3MpCiB7CisJdmNwdS0+YXJjaC5lbXVsYXRlX3JlZ3NfbmVlZF9zeW5jX2Zyb21fdmNwdSA9IHRydWU7CisJdmNwdS0+YXJjaC5lbXVsYXRlX3JlZ3NfbmVlZF9zeW5jX3RvX3ZjcHUgPSBmYWxzZTsKKwogCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkFYLCByZWdzLT5yYXgpOwogCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkJYLCByZWdzLT5yYngpOwogCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkNYLCByZWdzLT5yY3gpOwpAQCAtNTU5Miw3ICs1ODE1LDcgQEAKIAogCW1lbWNweSh2Y3B1LT5hcmNoLnJlZ3MsIGMtPnJlZ3MsIHNpemVvZiBjLT5yZWdzKTsKIAlrdm1fcmlwX3dyaXRlKHZjcHUsIHZjcHUtPmFyY2guZW11bGF0ZV9jdHh0LmVpcCk7Ci0Ja3ZtX3g4Nl9vcHMtPnNldF9yZmxhZ3ModmNwdSwgdmNwdS0+YXJjaC5lbXVsYXRlX2N0eHQuZWZsYWdzKTsKKwlrdm1fc2V0X3JmbGFncyh2Y3B1LCB2Y3B1LT5hcmNoLmVtdWxhdGVfY3R4dC5lZmxhZ3MpOwogCWt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9FVkVOVCwgdmNwdSk7CiAJcmV0dXJuIEVNVUxBVEVfRE9ORTsKIH0KQEAgLTU5NzQsOCArNjE5Nyw3IEBACiAJfQogCXZjcHUtPmFyY2gucGlvX2RhdGEgPSBwYWdlX2FkZHJlc3MocGFnZSk7CiAKLQlpZiAoIWt2bS0+YXJjaC52aXJ0dWFsX3RzY19raHopCi0JCWt2bV9hcmNoX3NldF90c2Nfa2h6KGt2bSwgbWF4X3RzY19raHopOworCWt2bV9pbml0X3RzY19jYXRjaHVwKHZjcHUsIG1heF90c2Nfa2h6KTsKIAogCXIgPSBrdm1fbW11X2NyZWF0ZSh2Y3B1KTsKIAlpZiAociA8IDApCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmggYi9hcmNoL3g4Ni9rdm0veDg2LmgKaW5kZXggYzYwMGRhOC4uZTQwN2VkMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oCisrKyBiL2FyY2gveDg2L2t2bS94ODYuaApAQCAtNzcsNyArNzcsNyBAQAogCiB2b2lkIGt2bV9iZWZvcmVfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBrdm1fYWZ0ZXJfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotaW50IGt2bV9pbmplY3RfcmVhbG1vZGVfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGlycSk7CitpbnQga3ZtX2luamVjdF9yZWFsbW9kZV9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgaXJxLCBpbnQgaW5jX2VpcCk7CiAKIHZvaWQga3ZtX3dyaXRlX3RzYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vZmF1bHQuYyBiL2FyY2gveDg2L21tL2ZhdWx0LmMKaW5kZXggMjBlM2Y4Ny4uYmNiMzk0ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vZmF1bHQuYworKysgYi9hcmNoL3g4Ni9tbS9mYXVsdC5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvbW1pb3RyYWNlLmg+CQkvKiBrbW1pb19oYW5kbGVyLCAuLi4JCSovCiAjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgkJLyogcGVyZl9zd19ldmVudAkJKi8KICNpbmNsdWRlIDxsaW51eC9odWdldGxiLmg+CQkvKiBoc3RhdGVfaW5kZXhfdG9fc2hpZnQJKi8KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgkJLyogcHJlZmV0Y2h3CQkJKi8KIAogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgkJCS8qIGRvdHJhcGxpbmthZ2UsIC4uLgkJKi8KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgkJLyogcGdkXyooKSwgLi4uCQkJKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BmX2luLmMgYi9hcmNoL3g4Ni9tbS9wZl9pbi5jCmluZGV4IDM4ZTZkMTcuLjlmMDYxNGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3BmX2luLmMKKysrIGIvYXJjaC94ODYvbW0vcGZfaW4uYwpAQCAtNDE0LDIyICs0MTQsMTcgQEAKIAl1bnNpZ25lZCBjaGFyICpwOwogCXN0cnVjdCBwcmVmaXhfYml0cyBwcmY7CiAJaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBydjsKIAogCXAgPSAodW5zaWduZWQgY2hhciAqKWluc19hZGRyOwogCXAgKz0gc2tpcF9wcmVmaXgocCwgJnByZik7CiAJcCArPSBnZXRfb3Bjb2RlKHAsICZvcGNvZGUpOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlZ19yb3ApOyBpKyspCi0JCWlmIChyZWdfcm9wW2ldID09IG9wY29kZSkgewotCQkJcnYgPSBSRUdfUkVBRDsKKwkJaWYgKHJlZ19yb3BbaV0gPT0gb3Bjb2RlKQogCQkJZ290byBkb193b3JrOwotCQl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWdfd29wKTsgaSsrKQotCQlpZiAocmVnX3dvcFtpXSA9PSBvcGNvZGUpIHsKLQkJCXJ2ID0gUkVHX1dSSVRFOworCQlpZiAocmVnX3dvcFtpXSA9PSBvcGNvZGUpCiAJCQlnb3RvIGRvX3dvcms7Ci0JCX0KIAogCXByaW50ayhLRVJOX0VSUiAibW1pb3RyYWNlOiBOb3QgYSByZWdpc3RlciBpbnN0cnVjdGlvbiwgb3Bjb2RlICIKIAkJCQkJCQkiMHglMDJ4XG4iLCBvcGNvZGUpOwpAQCAtNDc0LDE2ICs0NjksMTMgQEAKIAl1bnNpZ25lZCBjaGFyICpwOwogCXN0cnVjdCBwcmVmaXhfYml0cyBwcmY7CiAJaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBydjsKIAogCXAgPSAodW5zaWduZWQgY2hhciAqKWluc19hZGRyOwogCXAgKz0gc2tpcF9wcmVmaXgocCwgJnByZik7CiAJcCArPSBnZXRfb3Bjb2RlKHAsICZvcGNvZGUpOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGltbV93b3ApOyBpKyspCi0JCWlmIChpbW1fd29wW2ldID09IG9wY29kZSkgewotCQkJcnYgPSBJTU1fV1JJVEU7CisJCWlmIChpbW1fd29wW2ldID09IG9wY29kZSkKIAkJCWdvdG8gZG9fd29yazsKLQkJfQogCiAJcHJpbnRrKEtFUk5fRVJSICJtbWlvdHJhY2U6IE5vdCBhbiBpbW1lZGlhdGUgaW5zdHJ1Y3Rpb24sIG9wY29kZSAiCiAJCQkJCQkJIjB4JTAyeFxuIiwgb3Bjb2RlKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9NYWtlZmlsZSBiL2FyY2gveDg2L25ldC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDU2OGMzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvbmV0L01ha2VmaWxlCkBAIC0wLDAgKzEsNCBAQAorIworIyBBcmNoLXNwZWNpZmljIG5ldHdvcmsgbW9kdWxlcworIworb2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IGJwZl9qaXQubyBicGZfaml0X2NvbXAubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXQuUyBiL2FyY2gveDg2L25ldC9icGZfaml0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY4NzAyMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L25ldC9icGZfaml0LlMKQEAgLTAsMCArMSwxNDAgQEAKKy8qIGJwZl9qaXQuUyA6IEJQRiBKSVQgaGVscGVyIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljIER1bWF6ZXQgKGVyaWMuZHVtYXpldEBnbWFpbC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLgorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9kd2FyZjIuaD4KKworLyoKKyAqIENhbGxpbmcgY29udmVudGlvbiA6CisgKiByZGkgOiBza2IgcG9pbnRlcgorICogZXNpIDogb2Zmc2V0IG9mIGJ5dGUocykgdG8gZmV0Y2ggaW4gc2tiIChjYW4gYmUgc2NyYXRjaGVkKQorICogcjggIDogY29weSBvZiBza2ItPmRhdGEKKyAqIHI5ZCA6IGhsZW4gPSBza2ItPmxlbiAtIHNrYi0+ZGF0YV9sZW4KKyAqLworI2RlZmluZSBTS0JEQVRBCSVyOAorCitza19sb2FkX3dvcmRfaW5kOgorCS5nbG9ibAlza19sb2FkX3dvcmRfaW5kCisKKwlhZGQJJWVieCwlZXNpCS8qIG9mZnNldCArPSBYICovCisjCXRlc3QgICAgJWVzaSwlZXNpCS8qIGlmIChvZmZzZXQgPCAwKSBnb3RvIGJwZl9lcnJvcjsgKi8KKwlqcwlicGZfZXJyb3IKKworc2tfbG9hZF93b3JkOgorCS5nbG9ibAlza19sb2FkX3dvcmQKKworCW1vdgklcjlkLCVlYXgJCSMgaGxlbgorCXN1YgklZXNpLCVlYXgJCSMgaGxlbiAtIG9mZnNldAorCWNtcAkkMywlZWF4CisJamxlCWJwZl9zbG93X3BhdGhfd29yZAorCW1vdiAgICAgKFNLQkRBVEEsJXJzaSksJWVheAorCWJzd2FwICAgJWVheCAgCQkJLyogbnRvaGwoKSAqLworCXJldAorCisKK3NrX2xvYWRfaGFsZl9pbmQ6CisJLmdsb2JsIHNrX2xvYWRfaGFsZl9pbmQKKworCWFkZAklZWJ4LCVlc2kJLyogb2Zmc2V0ICs9IFggKi8KKwlqcwlicGZfZXJyb3IKKworc2tfbG9hZF9oYWxmOgorCS5nbG9ibAlza19sb2FkX2hhbGYKKworCW1vdgklcjlkLCVlYXgKKwlzdWIJJWVzaSwlZWF4CQkjCWhsZW4gLSBvZmZzZXQKKwljbXAJJDEsJWVheAorCWpsZQlicGZfc2xvd19wYXRoX2hhbGYKKwltb3Z6d2wJKFNLQkRBVEEsJXJzaSksJWVheAorCXJvbAkkOCwlYXgJCQkjIG50b2hzKCkKKwlyZXQKKworc2tfbG9hZF9ieXRlX2luZDoKKwkuZ2xvYmwgc2tfbG9hZF9ieXRlX2luZAorCWFkZAklZWJ4LCVlc2kJLyogb2Zmc2V0ICs9IFggKi8KKwlqcwlicGZfZXJyb3IKKworc2tfbG9hZF9ieXRlOgorCS5nbG9ibAlza19sb2FkX2J5dGUKKworCWNtcAklZXNpLCVyOWQgICAvKiBpZiAob2Zmc2V0ID49IGhsZW4pIGdvdG8gYnBmX3Nsb3dfcGF0aF9ieXRlICovCisJamxlCWJwZl9zbG93X3BhdGhfYnl0ZQorCW1vdnpibAkoU0tCREFUQSwlcnNpKSwlZWF4CisJcmV0CisKKy8qKgorICogc2tfbG9hZF9ieXRlX21zaCAtIEJQRl9TX0xEWF9CX01TSCBoZWxwZXIKKyAqCisgKiBJbXBsZW1lbnRzIEJQRl9TX0xEWF9CX01TSCA6IGxkeGIgIDQqKFtvZmZzZXRdJjB4ZikKKyAqIE11c3QgcHJlc2VydmUgQSBhY2N1bXVsYXRvciAoJWVheCkKKyAqIElucHV0cyA6ICVlc2kgaXMgdGhlIG9mZnNldCB2YWx1ZSwgYWxyZWFkeSBrbm93biBwb3NpdGl2ZQorICovCitFTlRSWShza19sb2FkX2J5dGVfbXNoKQorCUNGSV9TVEFSVFBST0MKKwljbXAJJWVzaSwlcjlkICAgICAgLyogaWYgKG9mZnNldCA+PSBobGVuKSBnb3RvIGJwZl9zbG93X3BhdGhfYnl0ZV9tc2ggKi8KKwlqbGUJYnBmX3Nsb3dfcGF0aF9ieXRlX21zaAorCW1vdnpibAkoU0tCREFUQSwlcnNpKSwlZWJ4CisJYW5kCSQxNSwlYmwKKwlzaGwJJDIsJWJsCisJcmV0CisJQ0ZJX0VORFBST0MKK0VORFBST0Moc2tfbG9hZF9ieXRlX21zaCkKKworYnBmX2Vycm9yOgorIyBmb3JjZSBhIHJldHVybiAwIGZyb20gaml0IGhhbmRsZXIKKwl4b3IJCSVlYXgsJWVheAorCW1vdgkJLTgoJXJicCksJXJieAorCWxlYXZlcQorCXJldAorCisvKiByc2kgY29udGFpbnMgb2Zmc2V0IGFuZCBjYW4gYmUgc2NyYXRjaGVkICovCisjZGVmaW5lIGJwZl9zbG93X3BhdGhfY29tbW9uKExFTikJCVwKKwlwdXNoCSVyZGk7ICAgIC8qIHNhdmUgc2tiICovCQlcCisJcHVzaAklcjk7CQkJCVwKKwlwdXNoCVNLQkRBVEE7CQkJXAorLyogcnNpIGFscmVhZHkgaGFzIG9mZnNldCAqLwkJCVwKKwltb3YJJExFTiwlZWN4OwkvKiBsZW4gKi8JXAorCWxlYQktMTIoJXJicCksJXJkeDsJCQlcCisJY2FsbAlza2JfY29weV9iaXRzOwkJCVwKKwl0ZXN0ICAgICVlYXgsJWVheDsJCQlcCisJcG9wCVNLQkRBVEE7CQkJXAorCXBvcAklcjk7CQkJCVwKKwlwb3AJJXJkaQorCisKK2JwZl9zbG93X3BhdGhfd29yZDoKKwlicGZfc2xvd19wYXRoX2NvbW1vbig0KQorCWpzCWJwZl9lcnJvcgorCW1vdgktMTIoJXJicCksJWVheAorCWJzd2FwCSVlYXgKKwlyZXQKKworYnBmX3Nsb3dfcGF0aF9oYWxmOgorCWJwZl9zbG93X3BhdGhfY29tbW9uKDIpCisJanMJYnBmX2Vycm9yCisJbW92CS0xMiglcmJwKSwlYXgKKwlyb2wJJDgsJWF4CisJbW92endsCSVheCwlZWF4CisJcmV0CisKK2JwZl9zbG93X3BhdGhfYnl0ZToKKwlicGZfc2xvd19wYXRoX2NvbW1vbigxKQorCWpzCWJwZl9lcnJvcgorCW1vdnpibAktMTIoJXJicCksJWVheAorCXJldAorCiticGZfc2xvd19wYXRoX2J5dGVfbXNoOgorCXhjaGcJJWVheCwlZWJ4IC8qIGRvbnQgbG9zZSBBICwgWCBpcyBhYm91dCB0byBiZSBzY3JhdGNoZWQgKi8KKwlicGZfc2xvd19wYXRoX2NvbW1vbigxKQorCWpzCWJwZl9lcnJvcgorCW1vdnpibAktMTIoJXJicCksJWVheAorCWFuZAkkMTUsJWFsCisJc2hsCSQyLCVhbAorCXhjaGcJJWVheCwlZWJ4CisJcmV0CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZhYjNmYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwpAQCAtMCwwICsxLDY1NCBAQAorLyogYnBmX2ppdF9jb21wLmMgOiBCUEYgSklUIGNvbXBpbGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWMgRHVtYXpldCAoZXJpYy5kdW1hemV0QGdtYWlsLmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVsb2FkZXIuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbHRlci5oPgorCisvKgorICogQ29udmVudGlvbnMgOgorICogIEVBWCA6IEJQRiBBIGFjY3VtdWxhdG9yCisgKiAgRUJYIDogQlBGIFggYWNjdW11bGF0b3IKKyAqICBSREkgOiBwb2ludGVyIHRvIHNrYiAgIChmaXJzdCBhcmd1bWVudCBnaXZlbiB0byBKSVQgZnVuY3Rpb24pCisgKiAgUkJQIDogZnJhbWUgcG9pbnRlciAoZXZlbiBpZiBDT05GSUdfRlJBTUVfUE9JTlRFUj1uKQorICogIEVDWCxFRFgsRVNJIDogc2NyYXRjaCByZWdpc3RlcnMKKyAqICByOWQgOiBza2ItPmxlbiAtIHNrYi0+ZGF0YV9sZW4gKGhlYWRsZW4pCisgKiAgcjggIDogc2tiLT5kYXRhCisgKiAtOChSQlApIDogc2F2ZWQgUkJYIHZhbHVlCisgKiAtMTYoUkJQKS4uLTgwKFJCUCkgOiBCUEZfTUVNV09SRFMgdmFsdWVzCisgKi8KK2ludCBicGZfaml0X2VuYWJsZSBfX3JlYWRfbW9zdGx5OworCisvKgorICogYXNzZW1ibHkgY29kZSBpbiBhcmNoL3g4Ni9uZXQvYnBmX2ppdC5TCisgKi8KK2V4dGVybiB1OCBza19sb2FkX3dvcmRbXSwgc2tfbG9hZF9oYWxmW10sIHNrX2xvYWRfYnl0ZVtdLCBza19sb2FkX2J5dGVfbXNoW107CitleHRlcm4gdTggc2tfbG9hZF93b3JkX2luZFtdLCBza19sb2FkX2hhbGZfaW5kW10sIHNrX2xvYWRfYnl0ZV9pbmRbXTsKKworc3RhdGljIGlubGluZSB1OCAqZW1pdF9jb2RlKHU4ICpwdHIsIHUzMiBieXRlcywgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpZiAobGVuID09IDEpCisJCSpwdHIgPSBieXRlczsKKwllbHNlIGlmIChsZW4gPT0gMikKKwkJKih1MTYgKilwdHIgPSBieXRlczsKKwllbHNlIHsKKwkJKih1MzIgKilwdHIgPSBieXRlczsKKwkJYmFycmllcigpOworCX0KKwlyZXR1cm4gcHRyICsgbGVuOworfQorCisjZGVmaW5lIEVNSVQoYnl0ZXMsIGxlbikJZG8geyBwcm9nID0gZW1pdF9jb2RlKHByb2csIGJ5dGVzLCBsZW4pOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIEVNSVQxKGIxKQkJRU1JVChiMSwgMSkKKyNkZWZpbmUgRU1JVDIoYjEsIGIyKQkJRU1JVCgoYjEpICsgKChiMikgPDwgOCksIDIpCisjZGVmaW5lIEVNSVQzKGIxLCBiMiwgYjMpCUVNSVQoKGIxKSArICgoYjIpIDw8IDgpICsgKChiMykgPDwgMTYpLCAzKQorI2RlZmluZSBFTUlUNChiMSwgYjIsIGIzLCBiNCkgICBFTUlUKChiMSkgKyAoKGIyKSA8PCA4KSArICgoYjMpIDw8IDE2KSArICgoYjQpIDw8IDI0KSwgNCkKKyNkZWZpbmUgRU1JVDFfb2ZmMzIoYjEsIG9mZikJZG8geyBFTUlUMShiMSk7IEVNSVQob2ZmLCA0KTt9IHdoaWxlICgwKQorCisjZGVmaW5lIENMRUFSX0EoKSBFTUlUMigweDMxLCAweGMwKSAvKiB4b3IgJWVheCwlZWF4ICovCisjZGVmaW5lIENMRUFSX1goKSBFTUlUMigweDMxLCAweGRiKSAvKiB4b3IgJWVieCwlZWJ4ICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19pbW04KGludCB2YWx1ZSkKK3sKKwlyZXR1cm4gdmFsdWUgPD0gMTI3ICYmIHZhbHVlID49IC0xMjg7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19uZWFyKGludCBvZmZzZXQpCit7CisJcmV0dXJuIG9mZnNldCA8PSAxMjcgJiYgb2Zmc2V0ID49IC0xMjg7Cit9CisKKyNkZWZpbmUgRU1JVF9KTVAob2Zmc2V0KQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKG9mZnNldCkgewkJCQkJCQlcCisJCWlmIChpc19uZWFyKG9mZnNldCkpCQkJCQlcCisJCQlFTUlUMigweGViLCBvZmZzZXQpOyAvKiBqbXAgLitvZmY4ICovCQlcCisJCWVsc2UJCQkJCQkJXAorCQkJRU1JVDFfb2ZmMzIoMHhlOSwgb2Zmc2V0KTsgLyogam1wIC4rb2ZmMzIgKi8JXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKy8qIGxpc3Qgb2YgeDg2IGNvbmQganVtcHMgb3Bjb2RlcyAoLiArIHM4KQorICogQWRkIDB4MTAgKGFuZCBhbiBleHRyYSAweDBmKSB0byBnZW5lcmF0ZSBmYXIganVtcHMgKC4gKyBzMzIpCisgKi8KKyNkZWZpbmUgWDg2X0pCICAweDcyCisjZGVmaW5lIFg4Nl9KQUUgMHg3MworI2RlZmluZSBYODZfSkUgIDB4NzQKKyNkZWZpbmUgWDg2X0pORSAweDc1CisjZGVmaW5lIFg4Nl9KQkUgMHg3NgorI2RlZmluZSBYODZfSkEgIDB4NzcKKworI2RlZmluZSBFTUlUX0NPTkRfSk1QKG9wLCBvZmZzZXQpCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlpZiAoaXNfbmVhcihvZmZzZXQpKQkJCQkJXAorCQlFTUlUMihvcCwgb2Zmc2V0KTsgLyoganh4IC4rb2ZmOCAqLwkJXAorCWVsc2UgewkJCQkJCQlcCisJCUVNSVQyKDB4MGYsIG9wICsgMHgxMCk7CQkJCVwKKwkJRU1JVChvZmZzZXQsIDQpOyAvKiBqeHggLitvZmYzMiAqLwkJXAorCX0JCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBDT05EX1NFTChDT0RFLCBUT1AsIEZPUCkJXAorCWNhc2UgQ09ERToJCQlcCisJCXRfb3AgPSBUT1A7CQlcCisJCWZfb3AgPSBGT1A7CQlcCisJCWdvdG8gY29uZF9icmFuY2gKKworCisjZGVmaW5lIFNFRU5fREFUQVJFRiAxIC8qIG1pZ2h0IGNhbGwgZXh0ZXJuYWwgaGVscGVycyAqLworI2RlZmluZSBTRUVOX1hSRUcgICAgMiAvKiBlYnggaXMgdXNlZCAqLworI2RlZmluZSBTRUVOX01FTSAgICAgNCAvKiB1c2UgbWVtW10gZm9yIHRlbXBvcmFyeSBzdG9yYWdlICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBicGZfZmx1c2hfaWNhY2hlKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQpCit7CisJbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOworCisJc2V0X2ZzKEtFUk5FTF9EUyk7CisJc21wX3dtYigpOworCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylzdGFydCwgKHVuc2lnbmVkIGxvbmcpZW5kKTsKKwlzZXRfZnMob2xkX2ZzKTsKK30KKworCit2b2lkIGJwZl9qaXRfY29tcGlsZShzdHJ1Y3Qgc2tfZmlsdGVyICpmcCkKK3sKKwl1OCB0ZW1wWzY0XTsKKwl1OCAqcHJvZzsKKwl1bnNpZ25lZCBpbnQgcHJvZ2xlbiwgb2xkcHJvZ2xlbiA9IDA7CisJaW50IGlsZW4sIGk7CisJaW50IHRfb2Zmc2V0LCBmX29mZnNldDsKKwl1OCB0X29wLCBmX29wLCBzZWVuID0gMCwgcGFzczsKKwl1OCAqaW1hZ2UgPSBOVUxMOworCXU4ICpmdW5jOworCWludCBwY19yZXQwID0gLTE7IC8qIGJwZiBpbmRleCBvZiBmaXJzdCBSRVQgIzAgaW5zdHJ1Y3Rpb24gKGlmIGFueSkgKi8KKwl1bnNpZ25lZCBpbnQgY2xlYW51cF9hZGRyOyAvKiBlcGlsb2d1ZSBjb2RlIG9mZnNldCAqLworCXVuc2lnbmVkIGludCAqYWRkcnM7CisJY29uc3Qgc3RydWN0IHNvY2tfZmlsdGVyICpmaWx0ZXIgPSBmcC0+aW5zbnM7CisJaW50IGZsZW4gPSBmcC0+bGVuOworCisJaWYgKCFicGZfaml0X2VuYWJsZSkKKwkJcmV0dXJuOworCisJYWRkcnMgPSBrbWFsbG9jKGZsZW4gKiBzaXplb2YoKmFkZHJzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGFkZHJzID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIEJlZm9yZSBmaXJzdCBwYXNzLCBtYWtlIGEgcm91Z2ggZXN0aW1hdGlvbiBvZiBhZGRyc1tdCisJICogZWFjaCBicGYgaW5zdHJ1Y3Rpb24gaXMgdHJhbnNsYXRlZCB0byBsZXNzIHRoYW4gNjQgYnl0ZXMKKwkgKi8KKwlmb3IgKHByb2dsZW4gPSAwLCBpID0gMDsgaSA8IGZsZW47IGkrKykgeworCQlwcm9nbGVuICs9IDY0OworCQlhZGRyc1tpXSA9IHByb2dsZW47CisJfQorCWNsZWFudXBfYWRkciA9IHByb2dsZW47IC8qIGVwaWxvZ3VlIGFkZHJlc3MgKi8KKworCWZvciAocGFzcyA9IDA7IHBhc3MgPCAxMDsgcGFzcysrKSB7CisJCS8qIG5vIHByb2xvZ3VlL2VwaWxvZ3VlIGZvciB0cml2aWFsIGZpbHRlcnMgKFJFVCBzb21ldGhpbmcpICovCisJCXByb2dsZW4gPSAwOworCQlwcm9nID0gdGVtcDsKKworCQlpZiAoc2VlbikgeworCQkJRU1JVDQoMHg1NSwgMHg0OCwgMHg4OSwgMHhlNSk7IC8qIHB1c2ggJXJicDsgbW92ICVyc3AsJXJicCAqLworCQkJRU1JVDQoMHg0OCwgMHg4MywgMHhlYywgOTYpOwkvKiBzdWJxICAkOTYsJXJzcAkqLworCQkJLyogbm90ZSA6IG11c3Qgc2F2ZSAlcmJ4IGluIGNhc2UgYnBmX2Vycm9yIGlzIGhpdCAqLworCQkJaWYgKHNlZW4gJiAoU0VFTl9YUkVHIHwgU0VFTl9EQVRBUkVGKSkKKwkJCQlFTUlUNCgweDQ4LCAweDg5LCAweDVkLCAweGY4KTsgLyogbW92ICVyYngsIC04KCVyYnApICovCisJCQlpZiAoc2VlbiAmIFNFRU5fWFJFRykKKwkJCQlDTEVBUl9YKCk7IC8qIG1ha2Ugc3VyZSB3ZSBkb250IGxlZWsga2VybmVsIG1lbW9yeSAqLworCisJCQkvKgorCQkJICogSWYgdGhpcyBmaWx0ZXIgbmVlZHMgdG8gYWNjZXNzIHNrYiBkYXRhLAorCQkJICogbG9hZHMgcjkgYW5kIHI4IHdpdGggOgorCQkJICogIHI5ID0gc2tiLT5sZW4gLSBza2ItPmRhdGFfbGVuCisJCQkgKiAgcjggPSBza2ItPmRhdGEKKwkJCSAqLworCQkJaWYgKHNlZW4gJiBTRUVOX0RBVEFSRUYpIHsKKwkJCQlpZiAob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIGxlbikgPD0gMTI3KQorCQkJCQkvKiBtb3YgICAgb2ZmOCglcmRpKSwlcjlkICovCisJCQkJCUVNSVQ0KDB4NDQsIDB4OGIsIDB4NGYsIG9mZnNldG9mKHN0cnVjdCBza19idWZmLCBsZW4pKTsKKwkJCQllbHNlIHsKKwkJCQkJLyogbW92ICAgIG9mZjMyKCVyZGkpLCVyOWQgKi8KKwkJCQkJRU1JVDMoMHg0NCwgMHg4YiwgMHg4Zik7CisJCQkJCUVNSVQob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIGxlbiksIDQpOworCQkJCX0KKwkJCQlpZiAoaXNfaW1tOChvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgZGF0YV9sZW4pKSkKKwkJCQkJLyogc3ViICAgIG9mZjgoJXJkaSksJXI5ZCAqLworCQkJCQlFTUlUNCgweDQ0LCAweDJiLCAweDRmLCBvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgZGF0YV9sZW4pKTsKKwkJCQllbHNlIHsKKwkJCQkJRU1JVDMoMHg0NCwgMHgyYiwgMHg4Zik7CisJCQkJCUVNSVQob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIGRhdGFfbGVuKSwgNCk7CisJCQkJfQorCisJCQkJaWYgKGlzX2ltbTgob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIGRhdGEpKSkKKwkJCQkJLyogbW92IG9mZjgoJXJkaSksJXI4ICovCisJCQkJCUVNSVQ0KDB4NGMsIDB4OGIsIDB4NDcsIG9mZnNldG9mKHN0cnVjdCBza19idWZmLCBkYXRhKSk7CisJCQkJZWxzZSB7CisJCQkJCS8qIG1vdiBvZmYzMiglcmRpKSwlcjggKi8KKwkJCQkJRU1JVDMoMHg0YywgMHg4YiwgMHg4Nyk7CisJCQkJCUVNSVQob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIGRhdGEpLCA0KTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlzd2l0Y2ggKGZpbHRlclswXS5jb2RlKSB7CisJCWNhc2UgQlBGX1NfUkVUX0s6CisJCWNhc2UgQlBGX1NfTERfV19MRU46CisJCWNhc2UgQlBGX1NfQU5DX1BST1RPQ09MOgorCQljYXNlIEJQRl9TX0FOQ19JRklOREVYOgorCQljYXNlIEJQRl9TX0FOQ19NQVJLOgorCQljYXNlIEJQRl9TX0FOQ19SWEhBU0g6CisJCWNhc2UgQlBGX1NfQU5DX0NQVToKKwkJY2FzZSBCUEZfU19BTkNfUVVFVUU6CisJCWNhc2UgQlBGX1NfTERfV19BQlM6CisJCWNhc2UgQlBGX1NfTERfSF9BQlM6CisJCWNhc2UgQlBGX1NfTERfQl9BQlM6CisJCQkvKiBmaXJzdCBpbnN0cnVjdGlvbiBzZXRzIEEgcmVnaXN0ZXIgKG9yIGlzIFJFVCAnY29uc3RhbnQnKSAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBtYWtlIHN1cmUgd2UgZG9udCBsZWFrIGtlcm5lbCBpbmZvcm1hdGlvbiB0byB1c2VyICovCisJCQlDTEVBUl9BKCk7IC8qIEEgPSAwICovCisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgZmxlbjsgaSsrKSB7CisJCQl1bnNpZ25lZCBpbnQgSyA9IGZpbHRlcltpXS5rOworCisJCQlzd2l0Y2ggKGZpbHRlcltpXS5jb2RlKSB7CisJCQljYXNlIEJQRl9TX0FMVV9BRERfWDogLyogQSArPSBYOyAqLworCQkJCXNlZW4gfD0gU0VFTl9YUkVHOworCQkJCUVNSVQyKDB4MDEsIDB4ZDgpOwkJLyogYWRkICVlYngsJWVheCAqLworCQkJCWJyZWFrOworCQkJY2FzZSBCUEZfU19BTFVfQUREX0s6IC8qIEEgKz0gSzsgKi8KKwkJCQlpZiAoIUspCisJCQkJCWJyZWFrOworCQkJCWlmIChpc19pbW04KEspKQorCQkJCQlFTUlUMygweDgzLCAweGMwLCBLKTsJLyogYWRkIGltbTgsJWVheCAqLworCQkJCWVsc2UKKwkJCQkJRU1JVDFfb2ZmMzIoMHgwNSwgSyk7CS8qIGFkZCBpbW0zMiwlZWF4ICovCisJCQkJYnJlYWs7CisJCQljYXNlIEJQRl9TX0FMVV9TVUJfWDogLyogQSAtPSBYOyAqLworCQkJCXNlZW4gfD0gU0VFTl9YUkVHOworCQkJCUVNSVQyKDB4MjksIDB4ZDgpOwkJLyogc3ViICAgICVlYngsJWVheCAqLworCQkJCWJyZWFrOworCQkJY2FzZSBCUEZfU19BTFVfU1VCX0s6IC8qIEEgLT0gSyAqLworCQkJCWlmICghSykKKwkJCQkJYnJlYWs7CisJCQkJaWYgKGlzX2ltbTgoSykpCisJCQkJCUVNSVQzKDB4ODMsIDB4ZTgsIEspOyAvKiBzdWIgaW1tOCwlZWF4ICovCisJCQkJZWxzZQorCQkJCQlFTUlUMV9vZmYzMigweDJkLCBLKTsgLyogc3ViIGltbTMyLCVlYXggKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgQlBGX1NfQUxVX01VTF9YOiAvKiBBICo9IFg7ICovCisJCQkJc2VlbiB8PSBTRUVOX1hSRUc7CisJCQkJRU1JVDMoMHgwZiwgMHhhZiwgMHhjMyk7CS8qIGltdWwgJWVieCwlZWF4ICovCisJCQkJYnJlYWs7CisJCQljYXNlIEJQRl9TX0FMVV9NVUxfSzogLyogQSAqPSBLICovCisJCQkJaWYgKGlzX2ltbTgoSykpCisJCQkJCUVNSVQzKDB4NmIsIDB4YzAsIEspOyAvKiBpbXVsIGltbTgsJWVheCwlZWF4ICovCisJCQkJZWxzZSB7CisJCQkJCUVNSVQyKDB4NjksIDB4YzApOwkJLyogaW11bCBpbW0zMiwlZWF4ICovCisJCQkJCUVNSVQoSywgNCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBCUEZfU19BTFVfRElWX1g6IC8qIEEgLz0gWDsgKi8KKwkJCQlzZWVuIHw9IFNFRU5fWFJFRzsKKwkJCQlFTUlUMigweDg1LCAweGRiKTsJLyogdGVzdCAlZWJ4LCVlYnggKi8KKwkJCQlpZiAocGNfcmV0MCAhPSAtMSkKKwkJCQkJRU1JVF9DT05EX0pNUChYODZfSkUsIGFkZHJzW3BjX3JldDBdIC0gKGFkZHJzW2ldIC0gNCkpOworCQkJCWVsc2UgeworCQkJCQlFTUlUX0NPTkRfSk1QKFg4Nl9KTkUsIDIgKyA1KTsKKwkJCQkJQ0xFQVJfQSgpOworCQkJCQlFTUlUMV9vZmYzMigweGU5LCBjbGVhbnVwX2FkZHIgLSAoYWRkcnNbaV0gLSA0KSk7IC8qIGptcCAuK29mZjMyICovCisJCQkJfQorCQkJCUVNSVQ0KDB4MzEsIDB4ZDIsIDB4ZjcsIDB4ZjMpOyAvKiB4b3IgJWVkeCwlZWR4OyBkaXYgJWVieCAqLworCQkJCWJyZWFrOworCQkJY2FzZSBCUEZfU19BTFVfRElWX0s6IC8qIEEgPSByZWNpcHJvY2FsX2RpdmlkZShBLCBLKTsgKi8KKwkJCQlFTUlUMygweDQ4LCAweDY5LCAweGMwKTsgLyogaW11bCBpbW0zMiwlcmF4LCVyYXggKi8KKwkJCQlFTUlUKEssIDQpOworCQkJCUVNSVQ0KDB4NDgsIDB4YzEsIDB4ZTgsIDB4MjApOyAvKiBzaHIgJDB4MjAsJXJheCAqLworCQkJCWJyZWFrOworCQkJY2FzZSBCUEZfU19BTFVfQU5EX1g6CisJCQkJc2VlbiB8PSBTRUVOX1hSRUc7CisJCQkJRU1JVDIoMHgyMSwgMHhkOCk7CQkvKiBhbmQgJWVieCwlZWF4ICovCisJCQkJYnJlYWs7CisJCQljYXNlIEJQRl9TX0FMVV9BTkRfSzoKKwkJCQlpZiAoSyA+PSAweEZGRkZGRjAwKSB7CisJCQkJCUVNSVQyKDB4MjQsIEsgJiAweEZGKTsgLyogYW5kIGltbTgsJWFsICovCisJCQkJfSBlbHNlIGlmIChLID49IDB4RkZGRjAwMDApIHsKKwkJCQkJRU1JVDIoMHg2NiwgMHgyNSk7CS8qIGFuZCBpbW0xNiwlYXggKi8KKwkJCQkJRU1JVDIoSywgMik7CisJCQkJfSBlbHNlIHsKKwkJCQkJRU1JVDFfb2ZmMzIoMHgyNSwgSyk7CS8qIGFuZCBpbW0zMiwlZWF4ICovCisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBCUEZfU19BTFVfT1JfWDoKKwkJCQlzZWVuIHw9IFNFRU5fWFJFRzsKKwkJCQlFTUlUMigweDA5LCAweGQ4KTsJCS8qIG9yICVlYngsJWVheCAqLworCQkJCWJyZWFrOworCQkJY2FzZSBCUEZfU19BTFVfT1JfSzoKKwkJCQlpZiAoaXNfaW1tOChLKSkKKwkJCQkJRU1JVDMoMHg4MywgMHhjOCwgSyk7IC8qIG9yIGltbTgsJWVheCAqLworCQkJCWVsc2UKKwkJCQkJRU1JVDFfb2ZmMzIoMHgwZCwgSyk7CS8qIG9yIGltbTMyLCVlYXggKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgQlBGX1NfQUxVX0xTSF9YOiAvKiBBIDw8PSBYOyAqLworCQkJCXNlZW4gfD0gU0VFTl9YUkVHOworCQkJCUVNSVQ0KDB4ODksIDB4ZDksIDB4ZDMsIDB4ZTApOwkvKiBtb3YgJWVieCwlZWN4OyBzaGwgJWNsLCVlYXggKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgQlBGX1NfQUxVX0xTSF9LOgorCQkJCWlmIChLID09IDApCisJCQkJCWJyZWFrOworCQkJCWVsc2UgaWYgKEsgPT0gMSkKKwkJCQkJRU1JVDIoMHhkMSwgMHhlMCk7IC8qIHNobCAlZWF4ICovCisJCQkJZWxzZQorCQkJCQlFTUlUMygweGMxLCAweGUwLCBLKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQlBGX1NfQUxVX1JTSF9YOiAvKiBBID4+PSBYOyAqLworCQkJCXNlZW4gfD0gU0VFTl9YUkVHOworCQkJCUVNSVQ0KDB4ODksIDB4ZDksIDB4ZDMsIDB4ZTgpOwkvKiBtb3YgJWVieCwlZWN4OyBzaHIgJWNsLCVlYXggKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgQlBGX1NfQUxVX1JTSF9LOiAvKiBBID4+PSBLOyAqLworCQkJCWlmIChLID09IDApCisJCQkJCWJyZWFrOworCQkJCWVsc2UgaWYgKEsgPT0gMSkKKwkJCQkJRU1JVDIoMHhkMSwgMHhlOCk7IC8qIHNociAlZWF4ICovCisJCQkJZWxzZQorCQkJCQlFTUlUMygweGMxLCAweGU4LCBLKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQlBGX1NfQUxVX05FRzoKKwkJCQlFTUlUMigweGY3LCAweGQ4KTsJCS8qIG5lZyAlZWF4ICovCisJCQkJYnJlYWs7CisJCQljYXNlIEJQRl9TX1JFVF9LOgorCQkJCWlmICghSykgeworCQkJCQlpZiAocGNfcmV0MCA9PSAtMSkKKwkJCQkJCXBjX3JldDAgPSBpOworCQkJCQlDTEVBUl9BKCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJRU1JVDFfb2ZmMzIoMHhiOCwgSyk7CS8qIG1vdiAkaW1tMzIsJWVheCAqLworCQkJCX0KKwkJCQkvKiBmYWxsaW50byAqLworCQkJY2FzZSBCUEZfU19SRVRfQToKKwkJCQlpZiAoc2VlbikgeworCQkJCQlpZiAoaSAhPSBmbGVuIC0gMSkgeworCQkJCQkJRU1JVF9KTVAoY2xlYW51cF9hZGRyIC0gYWRkcnNbaV0pOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJaWYgKHNlZW4gJiBTRUVOX1hSRUcpCisJCQkJCQlFTUlUNCgweDQ4LCAweDhiLCAweDVkLCAweGY4KTsgIC8qIG1vdiAgLTgoJXJicCksJXJieCAqLworCQkJCQlFTUlUMSgweGM5KTsJCS8qIGxlYXZlcSAqLworCQkJCX0KKwkJCQlFTUlUMSgweGMzKTsJCS8qIHJldCAqLworCQkJCWJyZWFrOworCQkJY2FzZSBCUEZfU19NSVNDX1RBWDogLyogWCA9IEEgKi8KKwkJCQlzZWVuIHw9IFNFRU5fWFJFRzsKKwkJCQlFTUlUMigweDg5LCAweGMzKTsJLyogbW92ICAgICVlYXgsJWVieCAqLworCQkJCWJyZWFrOworCQkJY2FzZSBCUEZfU19NSVNDX1RYQTogLyogQSA9IFggKi8KKwkJCQlzZWVuIHw9IFNFRU5fWFJFRzsKKwkJCQlFTUlUMigweDg5LCAweGQ4KTsJLyogbW92ICAgICVlYngsJWVheCAqLworCQkJCWJyZWFrOworCQkJY2FzZSBCUEZfU19MRF9JTU06IC8qIEEgPSBLICovCisJCQkJaWYgKCFLKQorCQkJCQlDTEVBUl9BKCk7CisJCQkJZWxzZQorCQkJCQlFTUlUMV9vZmYzMigweGI4LCBLKTsgLyogbW92ICRpbW0zMiwlZWF4ICovCisJCQkJYnJlYWs7CisJCQljYXNlIEJQRl9TX0xEWF9JTU06IC8qIFggPSBLICovCisJCQkJc2VlbiB8PSBTRUVOX1hSRUc7CisJCQkJaWYgKCFLKQorCQkJCQlDTEVBUl9YKCk7CisJCQkJZWxzZQorCQkJCQlFTUlUMV9vZmYzMigweGJiLCBLKTsgLyogbW92ICRpbW0zMiwlZWJ4ICovCisJCQkJYnJlYWs7CisJCQljYXNlIEJQRl9TX0xEX01FTTogLyogQSA9IG1lbVtLXSA6IG1vdiBvZmY4KCVyYnApLCVlYXggKi8KKwkJCQlzZWVuIHw9IFNFRU5fTUVNOworCQkJCUVNSVQzKDB4OGIsIDB4NDUsIDB4ZjAgLSBLKjQpOworCQkJCWJyZWFrOworCQkJY2FzZSBCUEZfU19MRFhfTUVNOiAvKiBYID0gbWVtW0tdIDogbW92IG9mZjgoJXJicCksJWVieCAqLworCQkJCXNlZW4gfD0gU0VFTl9YUkVHIHwgU0VFTl9NRU07CisJCQkJRU1JVDMoMHg4YiwgMHg1ZCwgMHhmMCAtIEsqNCk7CisJCQkJYnJlYWs7CisJCQljYXNlIEJQRl9TX1NUOiAvKiBtZW1bS10gPSBBIDogbW92ICVlYXgsb2ZmOCglcmJwKSAqLworCQkJCXNlZW4gfD0gU0VFTl9NRU07CisJCQkJRU1JVDMoMHg4OSwgMHg0NSwgMHhmMCAtIEsqNCk7CisJCQkJYnJlYWs7CisJCQljYXNlIEJQRl9TX1NUWDogLyogbWVtW0tdID0gWCA6IG1vdiAlZWJ4LG9mZjgoJXJicCkgKi8KKwkJCQlzZWVuIHw9IFNFRU5fWFJFRyB8IFNFRU5fTUVNOworCQkJCUVNSVQzKDB4ODksIDB4NWQsIDB4ZjAgLSBLKjQpOworCQkJCWJyZWFrOworCQkJY2FzZSBCUEZfU19MRF9XX0xFTjogLyoJQSA9IHNrYi0+bGVuOyAqLworCQkJCUJVSUxEX0JVR19PTihGSUVMRF9TSVpFT0Yoc3RydWN0IHNrX2J1ZmYsIGxlbikgIT0gNCk7CisJCQkJaWYgKGlzX2ltbTgob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIGxlbikpKQorCQkJCQkvKiBtb3YgICAgb2ZmOCglcmRpKSwlZWF4ICovCisJCQkJCUVNSVQzKDB4OGIsIDB4NDcsIG9mZnNldG9mKHN0cnVjdCBza19idWZmLCBsZW4pKTsKKwkJCQllbHNlIHsKKwkJCQkJRU1JVDIoMHg4YiwgMHg4Nyk7CisJCQkJCUVNSVQob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIGxlbiksIDQpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgQlBGX1NfTERYX1dfTEVOOiAvKiBYID0gc2tiLT5sZW47ICovCisJCQkJc2VlbiB8PSBTRUVOX1hSRUc7CisJCQkJaWYgKGlzX2ltbTgob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIGxlbikpKQorCQkJCQkvKiBtb3Ygb2ZmOCglcmRpKSwlZWJ4ICovCisJCQkJCUVNSVQzKDB4OGIsIDB4NWYsIG9mZnNldG9mKHN0cnVjdCBza19idWZmLCBsZW4pKTsKKwkJCQllbHNlIHsKKwkJCQkJRU1JVDIoMHg4YiwgMHg5Zik7CisJCQkJCUVNSVQob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIGxlbiksIDQpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgQlBGX1NfQU5DX1BST1RPQ09MOiAvKiBBID0gbnRvaHMoc2tiLT5wcm90b2NvbCk7ICovCisJCQkJQlVJTERfQlVHX09OKEZJRUxEX1NJWkVPRihzdHJ1Y3Qgc2tfYnVmZiwgcHJvdG9jb2wpICE9IDIpOworCQkJCWlmIChpc19pbW04KG9mZnNldG9mKHN0cnVjdCBza19idWZmLCBwcm90b2NvbCkpKSB7CisJCQkJCS8qIG1vdnp3bCBvZmY4KCVyZGkpLCVlYXggKi8KKwkJCQkJRU1JVDQoMHgwZiwgMHhiNywgMHg0Nywgb2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIHByb3RvY29sKSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJRU1JVDMoMHgwZiwgMHhiNywgMHg4Nyk7IC8qIG1vdnp3bCBvZmYzMiglcmRpKSwlZWF4ICovCisJCQkJCUVNSVQob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIHByb3RvY29sKSwgNCk7CisJCQkJfQorCQkJCUVNSVQyKDB4ODYsIDB4YzQpOyAvKiBudG9ocygpIDogeGNoZyAgICVhbCwlYWggKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgQlBGX1NfQU5DX0lGSU5ERVg6CisJCQkJaWYgKGlzX2ltbTgob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIGRldikpKSB7CisJCQkJCS8qIG1vdnEgb2ZmOCglcmRpKSwlcmF4ICovCisJCQkJCUVNSVQ0KDB4NDgsIDB4OGIsIDB4NDcsIG9mZnNldG9mKHN0cnVjdCBza19idWZmLCBkZXYpKTsKKwkJCQl9IGVsc2UgeworCQkJCQlFTUlUMygweDQ4LCAweDhiLCAweDg3KTsgLyogbW92cSBvZmYzMiglcmRpKSwlcmF4ICovCisJCQkJCUVNSVQob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIGRldiksIDQpOworCQkJCX0KKwkJCQlFTUlUMygweDQ4LCAweDg1LCAweGMwKTsJLyogdGVzdCAlcmF4LCVyYXggKi8KKwkJCQlFTUlUX0NPTkRfSk1QKFg4Nl9KRSwgY2xlYW51cF9hZGRyIC0gKGFkZHJzW2ldIC0gNikpOworCQkJCUJVSUxEX0JVR19PTihGSUVMRF9TSVpFT0Yoc3RydWN0IG5ldF9kZXZpY2UsIGlmaW5kZXgpICE9IDQpOworCQkJCUVNSVQyKDB4OGIsIDB4ODApOwkvKiBtb3Ygb2ZmMzIoJXJheCksJWVheCAqLworCQkJCUVNSVQob2Zmc2V0b2Yoc3RydWN0IG5ldF9kZXZpY2UsIGlmaW5kZXgpLCA0KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQlBGX1NfQU5DX01BUks6CisJCQkJQlVJTERfQlVHX09OKEZJRUxEX1NJWkVPRihzdHJ1Y3Qgc2tfYnVmZiwgbWFyaykgIT0gNCk7CisJCQkJaWYgKGlzX2ltbTgob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIG1hcmspKSkgeworCQkJCQkvKiBtb3Ygb2ZmOCglcmRpKSwlZWF4ICovCisJCQkJCUVNSVQzKDB4OGIsIDB4NDcsIG9mZnNldG9mKHN0cnVjdCBza19idWZmLCBtYXJrKSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJRU1JVDIoMHg4YiwgMHg4Nyk7CisJCQkJCUVNSVQob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIG1hcmspLCA0KTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIEJQRl9TX0FOQ19SWEhBU0g6CisJCQkJQlVJTERfQlVHX09OKEZJRUxEX1NJWkVPRihzdHJ1Y3Qgc2tfYnVmZiwgcnhoYXNoKSAhPSA0KTsKKwkJCQlpZiAoaXNfaW1tOChvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgcnhoYXNoKSkpIHsKKwkJCQkJLyogbW92IG9mZjgoJXJkaSksJWVheCAqLworCQkJCQlFTUlUMygweDhiLCAweDQ3LCBvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgcnhoYXNoKSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJRU1JVDIoMHg4YiwgMHg4Nyk7CisJCQkJCUVNSVQob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIHJ4aGFzaCksIDQpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgQlBGX1NfQU5DX1FVRVVFOgorCQkJCUJVSUxEX0JVR19PTihGSUVMRF9TSVpFT0Yoc3RydWN0IHNrX2J1ZmYsIHF1ZXVlX21hcHBpbmcpICE9IDIpOworCQkJCWlmIChpc19pbW04KG9mZnNldG9mKHN0cnVjdCBza19idWZmLCBxdWV1ZV9tYXBwaW5nKSkpIHsKKwkJCQkJLyogbW92endsIG9mZjgoJXJkaSksJWVheCAqLworCQkJCQlFTUlUNCgweDBmLCAweGI3LCAweDQ3LCBvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgcXVldWVfbWFwcGluZykpOworCQkJCX0gZWxzZSB7CisJCQkJCUVNSVQzKDB4MGYsIDB4YjcsIDB4ODcpOyAvKiBtb3Z6d2wgb2ZmMzIoJXJkaSksJWVheCAqLworCQkJCQlFTUlUKG9mZnNldG9mKHN0cnVjdCBza19idWZmLCBxdWV1ZV9tYXBwaW5nKSwgNCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBCUEZfU19BTkNfQ1BVOgorI2lmZGVmIENPTkZJR19TTVAKKwkJCQlFTUlUNCgweDY1LCAweDhiLCAweDA0LCAweDI1KTsgLyogbW92ICVnczpvZmYzMiwlZWF4ICovCisJCQkJRU1JVCgodTMyKSh1bnNpZ25lZCBsb25nKSZjcHVfbnVtYmVyLCA0KTsgLyogQSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsgKi8KKyNlbHNlCisJCQkJQ0xFQVJfQSgpOworI2VuZGlmCisJCQkJYnJlYWs7CisJCQljYXNlIEJQRl9TX0xEX1dfQUJTOgorCQkJCWZ1bmMgPSBza19sb2FkX3dvcmQ7Citjb21tb25fbG9hZDoJCQlzZWVuIHw9IFNFRU5fREFUQVJFRjsKKwkJCQlpZiAoKGludClLIDwgMCkKKwkJCQkJZ290byBvdXQ7CisJCQkJdF9vZmZzZXQgPSBmdW5jIC0gKGltYWdlICsgYWRkcnNbaV0pOworCQkJCUVNSVQxX29mZjMyKDB4YmUsIEspOyAvKiBtb3YgaW1tMzIsJWVzaSAqLworCQkJCUVNSVQxX29mZjMyKDB4ZTgsIHRfb2Zmc2V0KTsgLyogY2FsbCAqLworCQkJCWJyZWFrOworCQkJY2FzZSBCUEZfU19MRF9IX0FCUzoKKwkJCQlmdW5jID0gc2tfbG9hZF9oYWxmOworCQkJCWdvdG8gY29tbW9uX2xvYWQ7CisJCQljYXNlIEJQRl9TX0xEX0JfQUJTOgorCQkJCWZ1bmMgPSBza19sb2FkX2J5dGU7CisJCQkJZ290byBjb21tb25fbG9hZDsKKwkJCWNhc2UgQlBGX1NfTERYX0JfTVNIOgorCQkJCWlmICgoaW50KUsgPCAwKSB7CisJCQkJCWlmIChwY19yZXQwICE9IC0xKSB7CisJCQkJCQlFTUlUX0pNUChhZGRyc1twY19yZXQwXSAtIGFkZHJzW2ldKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCUNMRUFSX0EoKTsKKwkJCQkJRU1JVF9KTVAoY2xlYW51cF9hZGRyIC0gYWRkcnNbaV0pOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJc2VlbiB8PSBTRUVOX0RBVEFSRUYgfCBTRUVOX1hSRUc7CisJCQkJdF9vZmZzZXQgPSBza19sb2FkX2J5dGVfbXNoIC0gKGltYWdlICsgYWRkcnNbaV0pOworCQkJCUVNSVQxX29mZjMyKDB4YmUsIEspOwkvKiBtb3YgaW1tMzIsJWVzaSAqLworCQkJCUVNSVQxX29mZjMyKDB4ZTgsIHRfb2Zmc2V0KTsgLyogY2FsbCBza19sb2FkX2J5dGVfbXNoICovCisJCQkJYnJlYWs7CisJCQljYXNlIEJQRl9TX0xEX1dfSU5EOgorCQkJCWZ1bmMgPSBza19sb2FkX3dvcmRfaW5kOworY29tbW9uX2xvYWRfaW5kOgkJc2VlbiB8PSBTRUVOX0RBVEFSRUYgfCBTRUVOX1hSRUc7CisJCQkJdF9vZmZzZXQgPSBmdW5jIC0gKGltYWdlICsgYWRkcnNbaV0pOworCQkJCUVNSVQxX29mZjMyKDB4YmUsIEspOwkvKiBtb3YgaW1tMzIsJWVzaSAgICovCisJCQkJRU1JVDFfb2ZmMzIoMHhlOCwgdF9vZmZzZXQpOwkvKiBjYWxsIHNrX2xvYWRfeHh4X2luZCAqLworCQkJCWJyZWFrOworCQkJY2FzZSBCUEZfU19MRF9IX0lORDoKKwkJCQlmdW5jID0gc2tfbG9hZF9oYWxmX2luZDsKKwkJCQlnb3RvIGNvbW1vbl9sb2FkX2luZDsKKwkJCWNhc2UgQlBGX1NfTERfQl9JTkQ6CisJCQkJZnVuYyA9IHNrX2xvYWRfYnl0ZV9pbmQ7CisJCQkJZ290byBjb21tb25fbG9hZF9pbmQ7CisJCQljYXNlIEJQRl9TX0pNUF9KQToKKwkJCQl0X29mZnNldCA9IGFkZHJzW2kgKyBLXSAtIGFkZHJzW2ldOworCQkJCUVNSVRfSk1QKHRfb2Zmc2V0KTsKKwkJCQlicmVhazsKKwkJCUNPTkRfU0VMKEJQRl9TX0pNUF9KR1RfSywgWDg2X0pBLCBYODZfSkJFKTsKKwkJCUNPTkRfU0VMKEJQRl9TX0pNUF9KR0VfSywgWDg2X0pBRSwgWDg2X0pCKTsKKwkJCUNPTkRfU0VMKEJQRl9TX0pNUF9KRVFfSywgWDg2X0pFLCBYODZfSk5FKTsKKwkJCUNPTkRfU0VMKEJQRl9TX0pNUF9KU0VUX0ssWDg2X0pORSwgWDg2X0pFKTsKKwkJCUNPTkRfU0VMKEJQRl9TX0pNUF9KR1RfWCwgWDg2X0pBLCBYODZfSkJFKTsKKwkJCUNPTkRfU0VMKEJQRl9TX0pNUF9KR0VfWCwgWDg2X0pBRSwgWDg2X0pCKTsKKwkJCUNPTkRfU0VMKEJQRl9TX0pNUF9KRVFfWCwgWDg2X0pFLCBYODZfSk5FKTsKKwkJCUNPTkRfU0VMKEJQRl9TX0pNUF9KU0VUX1gsWDg2X0pORSwgWDg2X0pFKTsKKworY29uZF9icmFuY2g6CQkJZl9vZmZzZXQgPSBhZGRyc1tpICsgZmlsdGVyW2ldLmpmXSAtIGFkZHJzW2ldOworCQkJCXRfb2Zmc2V0ID0gYWRkcnNbaSArIGZpbHRlcltpXS5qdF0gLSBhZGRyc1tpXTsKKworCQkJCS8qIHNhbWUgdGFyZ2V0cywgY2FuIGF2b2lkIGRvaW5nIHRoZSB0ZXN0IDopICovCisJCQkJaWYgKGZpbHRlcltpXS5qdCA9PSBmaWx0ZXJbaV0uamYpIHsKKwkJCQkJRU1JVF9KTVAodF9vZmZzZXQpOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlzd2l0Y2ggKGZpbHRlcltpXS5jb2RlKSB7CisJCQkJY2FzZSBCUEZfU19KTVBfSkdUX1g6CisJCQkJY2FzZSBCUEZfU19KTVBfSkdFX1g6CisJCQkJY2FzZSBCUEZfU19KTVBfSkVRX1g6CisJCQkJCXNlZW4gfD0gU0VFTl9YUkVHOworCQkJCQlFTUlUMigweDM5LCAweGQ4KTsgLyogY21wICVlYngsJWVheCAqLworCQkJCQlicmVhazsKKwkJCQljYXNlIEJQRl9TX0pNUF9KU0VUX1g6CisJCQkJCXNlZW4gfD0gU0VFTl9YUkVHOworCQkJCQlFTUlUMigweDg1LCAweGQ4KTsgLyogdGVzdCAlZWJ4LCVlYXggKi8KKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBCUEZfU19KTVBfSkVRX0s6CisJCQkJCWlmIChLID09IDApIHsKKwkJCQkJCUVNSVQyKDB4ODUsIDB4YzApOyAvKiB0ZXN0ICAgJWVheCwlZWF4ICovCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCWNhc2UgQlBGX1NfSk1QX0pHVF9LOgorCQkJCWNhc2UgQlBGX1NfSk1QX0pHRV9LOgorCQkJCQlpZiAoSyA8PSAxMjcpCisJCQkJCQlFTUlUMygweDgzLCAweGY4LCBLKTsgLyogY21wIGltbTgsJWVheCAqLworCQkJCQllbHNlCisJCQkJCQlFTUlUMV9vZmYzMigweDNkLCBLKTsgLyogY21wIGltbTMyLCVlYXggKi8KKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBCUEZfU19KTVBfSlNFVF9LOgorCQkJCQlpZiAoSyA8PSAweEZGKQorCQkJCQkJRU1JVDIoMHhhOCwgSyk7IC8qIHRlc3QgaW1tOCwlYWwgKi8KKwkJCQkJZWxzZSBpZiAoIShLICYgMHhGRkZGMDBGRikpCisJCQkJCQlFTUlUMygweGY2LCAweGM0LCBLID4+IDgpOyAvKiB0ZXN0IGltbTgsJWFoICovCisJCQkJCWVsc2UgaWYgKEsgPD0gMHhGRkZGKSB7CisJCQkJCQlFTUlUMigweDY2LCAweGE5KTsgLyogdGVzdCBpbW0xNiwlYXggKi8KKwkJCQkJCUVNSVQoSywgMik7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlFTUlUMV9vZmYzMigweGE5LCBLKTsgLyogdGVzdCBpbW0zMiwlZWF4ICovCisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmIChmaWx0ZXJbaV0uanQgIT0gMCkgeworCQkJCQlpZiAoZmlsdGVyW2ldLmpmKQorCQkJCQkJdF9vZmZzZXQgKz0gaXNfbmVhcihmX29mZnNldCkgPyAyIDogNjsKKwkJCQkJRU1JVF9DT05EX0pNUCh0X29wLCB0X29mZnNldCk7CisJCQkJCWlmIChmaWx0ZXJbaV0uamYpCisJCQkJCQlFTUlUX0pNUChmX29mZnNldCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlFTUlUX0NPTkRfSk1QKGZfb3AsIGZfb2Zmc2V0KTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJLyogaG1tLCB0b28gY29tcGxleCBmaWx0ZXIsIGdpdmUgdXAgd2l0aCBqaXQgY29tcGlsZXIgKi8KKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCWlsZW4gPSBwcm9nIC0gdGVtcDsKKwkJCWlmIChpbWFnZSkgeworCQkJCWlmICh1bmxpa2VseShwcm9nbGVuICsgaWxlbiA+IG9sZHByb2dsZW4pKSB7CisJCQkJCXByX2VycigiYnBiX2ppdF9jb21waWxlIGZhdGFsIGVycm9yXG4iKTsKKwkJCQkJa2ZyZWUoYWRkcnMpOworCQkJCQltb2R1bGVfZnJlZShOVUxMLCBpbWFnZSk7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQkJbWVtY3B5KGltYWdlICsgcHJvZ2xlbiwgdGVtcCwgaWxlbik7CisJCQl9CisJCQlwcm9nbGVuICs9IGlsZW47CisJCQlhZGRyc1tpXSA9IHByb2dsZW47CisJCQlwcm9nID0gdGVtcDsKKwkJfQorCQkvKiBsYXN0IGJwZiBpbnN0cnVjdGlvbiBpcyBhbHdheXMgYSBSRVQgOgorCQkgKiB1c2UgaXQgdG8gZ2l2ZSB0aGUgY2xlYW51cCBpbnN0cnVjdGlvbihzKSBhZGRyCisJCSAqLworCQljbGVhbnVwX2FkZHIgPSBwcm9nbGVuIC0gMTsgLyogcmV0ICovCisJCWlmIChzZWVuKQorCQkJY2xlYW51cF9hZGRyIC09IDE7IC8qIGxlYXZlcSAqLworCQlpZiAoc2VlbiAmIFNFRU5fWFJFRykKKwkJCWNsZWFudXBfYWRkciAtPSA0OyAvKiBtb3YgIC04KCVyYnApLCVyYnggKi8KKworCQlpZiAoaW1hZ2UpIHsKKwkJCVdBUk5fT04ocHJvZ2xlbiAhPSBvbGRwcm9nbGVuKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChwcm9nbGVuID09IG9sZHByb2dsZW4pIHsKKwkJCWltYWdlID0gbW9kdWxlX2FsbG9jKG1heF90KHVuc2lnbmVkIGludCwKKwkJCQkJCSAgIHByb2dsZW4sCisJCQkJCQkgICBzaXplb2Yoc3RydWN0IHdvcmtfc3RydWN0KSkpOworCQkJaWYgKCFpbWFnZSkKKwkJCQlnb3RvIG91dDsKKwkJfQorCQlvbGRwcm9nbGVuID0gcHJvZ2xlbjsKKwl9CisJaWYgKGJwZl9qaXRfZW5hYmxlID4gMSkKKwkJcHJfZXJyKCJmbGVuPSVkIHByb2dsZW49JXUgcGFzcz0lZCBpbWFnZT0lcFxuIiwKKwkJICAgICAgIGZsZW4sIHByb2dsZW4sIHBhc3MsIGltYWdlKTsKKworCWlmIChpbWFnZSkgeworCQlpZiAoYnBmX2ppdF9lbmFibGUgPiAxKQorCQkJcHJpbnRfaGV4X2R1bXAoS0VSTl9FUlIsICJKSVQgY29kZTogIiwgRFVNUF9QUkVGSVhfQUREUkVTUywKKwkJCQkgICAgICAgMTYsIDEsIGltYWdlLCBwcm9nbGVuLCBmYWxzZSk7CisKKwkJYnBmX2ZsdXNoX2ljYWNoZShpbWFnZSwgaW1hZ2UgKyBwcm9nbGVuKTsKKworCQlmcC0+YnBmX2Z1bmMgPSAodm9pZCAqKWltYWdlOworCX0KK291dDoKKwlrZnJlZShhZGRycyk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBqaXRfZnJlZV9kZWZlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmFyZykKK3sKKwltb2R1bGVfZnJlZShOVUxMLCBhcmcpOworfQorCisvKiBydW4gZnJvbSBzb2Z0aXJxLCB3ZSBtdXN0IHVzZSBhIHdvcmtfc3RydWN0IHRvIGNhbGwKKyAqIG1vZHVsZV9mcmVlKCkgZnJvbSBwcm9jZXNzIGNvbnRleHQKKyAqLwordm9pZCBicGZfaml0X2ZyZWUoc3RydWN0IHNrX2ZpbHRlciAqZnApCit7CisJaWYgKGZwLT5icGZfZnVuYyAhPSBza19ydW5fZmlsdGVyKSB7CisJCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayA9IChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKilmcC0+YnBmX2Z1bmM7CisKKwkJSU5JVF9XT1JLKHdvcmssIGppdF9mcmVlX2RlZmVyKTsKKwkJc2NoZWR1bGVfd29yayh3b3JrKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vcGNpLXN3aW90bGIteGVuLmMgYi9hcmNoL3g4Ni94ZW4vcGNpLXN3aW90bGIteGVuLmMKaW5kZXggYmZkMDYzMi4uYjQ4MGQ0MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL3BjaS1zd2lvdGxiLXhlbi5jCisrKyBiL2FyY2gveDg2L3hlbi9wY2ktc3dpb3RsYi14ZW4uYwpAQCAtMzYsNyArMzYsNyBAQAogCiAJLyogSWYgcnVubmluZyBhcyBQViBndWVzdCwgZWl0aGVyIGlvbW11PXNvZnQsIG9yIHN3aW90bGI9Zm9yY2Ugd2lsbAogCSAqIGFjdGl2YXRlIHRoaXMgSU9NTVUuIElmIHJ1bm5pbmcgYXMgUFYgcHJpdmlsZWdlZCwgYWN0aXZhdGUgaXQKLQkgKiBpcnJlZ2FyZGxlc3NzLgorCSAqIGlycmVnYXJkbGVzcy4KIAkgKi8KIAlpZiAoKHhlbl9pbml0aWFsX2RvbWFpbigpIHx8IHN3aW90bGIgfHwgc3dpb3RsYl9mb3JjZSkgJiYKIAkgICAgKHhlbl9wdl9kb21haW4oKSkpCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9jb25maWdzL3M2MTA1X2RlZmNvbmZpZyBiL2FyY2gveHRlbnNhL2NvbmZpZ3MvczYxMDVfZGVmY29uZmlnCmluZGV4IDQyYjdmZWIuLjQ4OTFhYmIgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2NvbmZpZ3MvczYxMDVfZGVmY29uZmlnCisrKyBiL2FyY2gveHRlbnNhL2NvbmZpZ3MvczYxMDVfZGVmY29uZmlnCkBAIC0yMyw3ICsyMyw2IEBACiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQpkaWZmIC0tZ2l0IGEvY3J5cHRvL0tjb25maWcgYi9jcnlwdG8vS2NvbmZpZwppbmRleCA0YjdjYjBlLi44N2IyMmNhIDEwMDY0NAotLS0gYS9jcnlwdG8vS2NvbmZpZworKysgYi9jcnlwdG8vS2NvbmZpZwpAQCAtMjY0LDExICsyNjQsNiBAQAogCSAga2V5IHNpemUgMjU2LCAzODQgb3IgNTEyIGJpdHMuIFRoaXMgaW1wbGVtZW50YXRpb24gY3VycmVudGx5CiAJICBjYW4ndCBoYW5kbGUgYSBzZWN0b3JzaXplIHdoaWNoIGlzIG5vdCBhIG11bHRpcGxlIG9mIDE2IGJ5dGVzLgogCi1jb25maWcgQ1JZUFRPX0ZQVQotCXRyaXN0YXRlCi0Jc2VsZWN0IENSWVBUT19CTEtDSVBIRVIKLQlzZWxlY3QgQ1JZUFRPX01BTkFHRVIKLQogY29tbWVudCAiSGFzaCBtb2RlcyIKIAogY29uZmlnIENSWVBUT19ITUFDCkBAIC01NDMsNyArNTM4LDYgQEAKIAlzZWxlY3QgQ1JZUFRPX0FFU181ODYgaWYgITY0QklUCiAJc2VsZWN0IENSWVBUT19DUllQVEQKIAlzZWxlY3QgQ1JZUFRPX0FMR0FQSQotCXNlbGVjdCBDUllQVE9fRlBVCiAJaGVscAogCSAgVXNlIEludGVsIEFFUy1OSSBpbnN0cnVjdGlvbnMgZm9yIEFFUyBhbGdvcml0aG0uCiAKZGlmZiAtLWdpdCBhL2NyeXB0by90Y3J5cHQuYyBiL2NyeXB0by90Y3J5cHQuYwppbmRleCBlOTEyZWE1Li4yMjIyNjE3IDEwMDY0NAotLS0gYS9jcnlwdG8vdGNyeXB0LmMKKysrIGIvY3J5cHRvL3RjcnlwdC5jCkBAIC0xMDA5LDYgKzEwMDksMTAgQEAKIAkJCQlzcGVlZF90ZW1wbGF0ZV8zMl80OF82NCk7CiAJCXRlc3RfY2lwaGVyX3NwZWVkKCJ4dHMoYWVzKSIsIERFQ1JZUFQsIHNlYywgTlVMTCwgMCwKIAkJCQlzcGVlZF90ZW1wbGF0ZV8zMl80OF82NCk7CisJCXRlc3RfY2lwaGVyX3NwZWVkKCJjdHIoYWVzKSIsIEVOQ1JZUFQsIHNlYywgTlVMTCwgMCwKKwkJCQlzcGVlZF90ZW1wbGF0ZV8xNl8yNF8zMik7CisJCXRlc3RfY2lwaGVyX3NwZWVkKCJjdHIoYWVzKSIsIERFQ1JZUFQsIHNlYywgTlVMTCwgMCwKKwkJCQlzcGVlZF90ZW1wbGF0ZV8xNl8yNF8zMik7CiAJCWJyZWFrOwogCiAJY2FzZSAyMDE6CmRpZmYgLS1naXQgYS9jcnlwdG8vdGVzdG1nci5jIGIvY3J5cHRvL3Rlc3RtZ3IuYwppbmRleCAyODU0ODY1Li5iNmI5M2Q0IDEwMDY0NAotLS0gYS9jcnlwdG8vdGVzdG1nci5jCisrKyBiL2NyeXB0by90ZXN0bWdyLmMKQEAgLTIyMTksNiArMjIxOSwyMiBAQAogCQkJfQogCQl9CiAJfSwgeworCQkuYWxnID0gIm9mYihhZXMpIiwKKwkJLnRlc3QgPSBhbGdfdGVzdF9za2NpcGhlciwKKwkJLmZpcHNfYWxsb3dlZCA9IDEsCisJCS5zdWl0ZSA9IHsKKwkJCS5jaXBoZXIgPSB7CisJCQkJLmVuYyA9IHsKKwkJCQkJLnZlY3MgPSBhZXNfb2ZiX2VuY190dl90ZW1wbGF0ZSwKKwkJCQkJLmNvdW50ID0gQUVTX09GQl9FTkNfVEVTVF9WRUNUT1JTCisJCQkJfSwKKwkJCQkuZGVjID0geworCQkJCQkudmVjcyA9IGFlc19vZmJfZGVjX3R2X3RlbXBsYXRlLAorCQkJCQkuY291bnQgPSBBRVNfT0ZCX0RFQ19URVNUX1ZFQ1RPUlMKKwkJCQl9CisJCQl9CisJCX0KKwl9LCB7CiAJCS5hbGcgPSAicGNiYyhmY3J5cHQpIiwKIAkJLnRlc3QgPSBhbGdfdGVzdF9za2NpcGhlciwKIAkJLnN1aXRlID0gewpkaWZmIC0tZ2l0IGEvY3J5cHRvL3Rlc3RtZ3IuaCBiL2NyeXB0by90ZXN0bWdyLmgKaW5kZXggYWE2ZGFjMC4uMjdlNjA2MSAxMDA2NDQKLS0tIGEvY3J5cHRvL3Rlc3RtZ3IuaAorKysgYi9jcnlwdG8vdGVzdG1nci5oCkBAIC0yOTgwLDYgKzI5ODAsOCBAQAogI2RlZmluZSBBRVNfWFRTX0RFQ19URVNUX1ZFQ1RPUlMgNAogI2RlZmluZSBBRVNfQ1RSX0VOQ19URVNUX1ZFQ1RPUlMgMwogI2RlZmluZSBBRVNfQ1RSX0RFQ19URVNUX1ZFQ1RPUlMgMworI2RlZmluZSBBRVNfT0ZCX0VOQ19URVNUX1ZFQ1RPUlMgMQorI2RlZmluZSBBRVNfT0ZCX0RFQ19URVNUX1ZFQ1RPUlMgMQogI2RlZmluZSBBRVNfQ1RSXzM2ODZfRU5DX1RFU1RfVkVDVE9SUyA3CiAjZGVmaW5lIEFFU19DVFJfMzY4Nl9ERUNfVEVTVF9WRUNUT1JTIDYKICNkZWZpbmUgQUVTX0dDTV9FTkNfVEVTVF9WRUNUT1JTIDkKQEAgLTU1MDYsNiArNTUwOCw2NCBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IGNpcGhlcl90ZXN0dmVjIGFlc19vZmJfZW5jX3R2X3RlbXBsYXRlW10gPSB7CisJIC8qIEZyb20gTklTVCBTcGVjaWFsIFB1YmxpY2F0aW9uIDgwMC0zOEEsIEFwcGVuZGl4IEYuNSAqLworCXsKKwkJLmtleQk9ICJceDJiXHg3ZVx4MTVceDE2XHgyOFx4YWVceGQyXHhhNiIKKwkJCSAgIlx4YWJceGY3XHgxNVx4ODhceDA5XHhjZlx4NGZceDNjIiwKKwkJLmtsZW4JPSAxNiwKKwkJLml2CT0gIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOCIKKwkJCSAgIlx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiLAorCQkuaW5wdXQgPSAiXHg2Ylx4YzFceGJlXHhlMlx4MmVceDQwXHg5Zlx4OTYiCisJCQkgICJceGU5XHgzZFx4N2VceDExXHg3M1x4OTNceDE3XHgyYSIKKwkJCSAgIlx4YWVceDJkXHg4YVx4NTdceDFlXHgwM1x4YWNceDljIgorCQkJICAiXHg5ZVx4YjdceDZmXHhhY1x4NDVceGFmXHg4ZVx4NTEiCisJCQkgICJceDMwXHhjOFx4MWNceDQ2XHhhM1x4NWNceGU0XHgxMSIKKwkJCSAgIlx4ZTVceGZiXHhjMVx4MTlceDFhXHgwYVx4NTJceGVmIgorCQkJICAiXHhmNlx4OWZceDI0XHg0NVx4ZGZceDRmXHg5Ylx4MTciCisJCQkgICJceGFkXHgyYlx4NDFceDdiXHhlNlx4NmNceDM3XHgxMCIsCisJCS5pbGVuCT0gNjQsCisJCS5yZXN1bHQgPSAiXHgzYlx4M2ZceGQ5XHgyZVx4YjdceDJkXHhhZFx4MjAiCisJCQkgICJceDMzXHgzNFx4NDlceGY4XHhlOFx4M2NceGZiXHg0YSIKKwkJCSAgIlx4NzdceDg5XHg1MFx4OGRceDE2XHg5MVx4OGZceDAzXHhmNSIKKwkJCSAgIlx4M2NceDUyXHhkYVx4YzVceDRlXHhkOFx4MjUiCisJCQkgICJceDk3XHg0MFx4MDVceDFlXHg5Y1x4NWZceGVjXHhmNlx4NDMiCisJCQkgICJceDQ0XHhmN1x4YThceDIyXHg2MFx4ZWRceGNjIgorCQkJICAiXHgzMFx4NGNceDY1XHgyOFx4ZjZceDU5XHhjN1x4NzgiCisJCQkgICJceDY2XHhhNVx4MTBceGQ5XHhjMVx4ZDZceGFlXHg1ZSIsCisJCS5ybGVuCT0gNjQsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBjaXBoZXJfdGVzdHZlYyBhZXNfb2ZiX2RlY190dl90ZW1wbGF0ZVtdID0geworCSAvKiBGcm9tIE5JU1QgU3BlY2lhbCBQdWJsaWNhdGlvbiA4MDAtMzhBLCBBcHBlbmRpeCBGLjUgKi8KKwl7CisJCS5rZXkJPSAiXHgyYlx4N2VceDE1XHgxNlx4MjhceGFlXHhkMlx4YTYiCisJCQkgICJceGFiXHhmN1x4MTVceDg4XHgwOVx4Y2ZceDRmXHgzYyIsCisJCS5rbGVuCT0gMTYsCisJCS5pdgk9ICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDgiCisJCQkgICJceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmIiwKKwkJLmlucHV0ID0gIlx4M2JceDNmXHhkOVx4MmVceGI3XHgyZFx4YWRceDIwIgorCQkJICAiXHgzM1x4MzRceDQ5XHhmOFx4ZThceDNjXHhmYlx4NGEiCisJCQkgICJceDc3XHg4OVx4NTBceDhkXHgxNlx4OTFceDhmXHgwM1x4ZjUiCisJCQkgICJceDNjXHg1Mlx4ZGFceGM1XHg0ZVx4ZDhceDI1IgorCQkJICAiXHg5N1x4NDBceDA1XHgxZVx4OWNceDVmXHhlY1x4ZjZceDQzIgorCQkJICAiXHg0NFx4ZjdceGE4XHgyMlx4NjBceGVkXHhjYyIKKwkJCSAgIlx4MzBceDRjXHg2NVx4MjhceGY2XHg1OVx4YzdceDc4IgorCQkJICAiXHg2Nlx4YTVceDEwXHhkOVx4YzFceGQ2XHhhZVx4NWUiLAorCQkuaWxlbgk9IDY0LAorCQkucmVzdWx0ID0gIlx4NmJceGMxXHhiZVx4ZTJceDJlXHg0MFx4OWZceDk2IgorCQkJICAiXHhlOVx4M2RceDdlXHgxMVx4NzNceDkzXHgxN1x4MmEiCisJCQkgICJceGFlXHgyZFx4OGFceDU3XHgxZVx4MDNceGFjXHg5YyIKKwkJCSAgIlx4OWVceGI3XHg2Zlx4YWNceDQ1XHhhZlx4OGVceDUxIgorCQkJICAiXHgzMFx4YzhceDFjXHg0Nlx4YTNceDVjXHhlNFx4MTEiCisJCQkgICJceGU1XHhmYlx4YzFceDE5XHgxYVx4MGFceDUyXHhlZiIKKwkJCSAgIlx4ZjZceDlmXHgyNFx4NDVceGRmXHg0Zlx4OWJceDE3IgorCQkJICAiXHhhZFx4MmJceDQxXHg3Ylx4ZTZceDZjXHgzN1x4MTAiLAorCQkucmxlbgk9IDY0LAorCX0KK307CisKIHN0YXRpYyBzdHJ1Y3QgYWVhZF90ZXN0dmVjIGFlc19nY21fZW5jX3R2X3RlbXBsYXRlW10gPSB7CiAJeyAvKiBGcm9tIE1jR3JldyAmIFZpZWdhIC0gaHR0cDovL2NpdGVzZWVyLmlzdC5wc3UuZWR1LzY1Njk4OS5odG1sICovCiAJCS5rZXkgICAgPSB6ZXJvZWRfc3RyaW5nLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9LY29uZmlnIGIvZHJpdmVycy9LY29uZmlnCmluZGV4IDU1N2E0NjkuLjYxNjMxZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvS2NvbmZpZworKysgYi9kcml2ZXJzL0tjb25maWcKQEAgLTY4LDYgKzY4LDggQEAKIAogc291cmNlICJkcml2ZXJzL3NzYi9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvYmNtYS9LY29uZmlnIgorCiBzb3VyY2UgImRyaXZlcnMvbWZkL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvTWFrZWZpbGUgYi9kcml2ZXJzL01ha2VmaWxlCmluZGV4IDNmMTM1YjYuLjE0NWFlYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9NYWtlZmlsZQpAQCAtNjQsMTEgKzY0LDEwIEBACiBvYmotJChDT05GSUdfUEFSSURFKSAJCSs9IGJsb2NrL3BhcmlkZS8KIG9iai0kKENPTkZJR19UQykJCSs9IHRjLwogb2JqLSQoQ09ORklHX1VXQikJCSs9IHV3Yi8KLW9iai0kKENPTkZJR19VU0JfT1RHX1VUSUxTKQkrPSB1c2Ivb3RnLworb2JqLSQoQ09ORklHX1VTQl9PVEdfVVRJTFMpCSs9IHVzYi8KIG9iai0kKENPTkZJR19VU0IpCQkrPSB1c2IvCi1vYmotJChDT05GSUdfVVNCX01VU0JfSERSQykJKz0gdXNiL211c2IvCiBvYmotJChDT05GSUdfUENJKQkJKz0gdXNiLwotb2JqLSQoQ09ORklHX1VTQl9HQURHRVQpCSs9IHVzYi9nYWRnZXQvCitvYmotJChDT05GSUdfVVNCX0dBREdFVCkJKz0gdXNiLwogb2JqLSQoQ09ORklHX1NFUklPKQkJKz0gaW5wdXQvc2VyaW8vCiBvYmotJChDT05GSUdfR0FNRVBPUlQpCQkrPSBpbnB1dC9nYW1lcG9ydC8KIG9iai0kKENPTkZJR19JTlBVVCkJCSs9IGlucHV0LwpAQCAtMTEwLDYgKzEwOSw3IEBACiBvYmotJChDT05GSUdfUFBDX1BTMykJCSs9IHBzMy8KIG9iai0kKENPTkZJR19PRikJCSs9IG9mLwogb2JqLSQoQ09ORklHX1NTQikJCSs9IHNzYi8KK29iai0kKENPTkZJR19CQ01BKQkJKz0gYmNtYS8KIG9iai0kKENPTkZJR19WSE9TVF9ORVQpCQkrPSB2aG9zdC8KIG9iai0kKENPTkZJR19WTFlOUSkJCSs9IHZseW5xLwogb2JqLSQoQ09ORklHX1NUQUdJTkcpCQkrPSBzdGFnaW5nLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dHJlc3JjLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0cmVzcmMuYwppbmRleCA4NGUwNTE4Li42ZmZkM2E4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0cmVzcmMuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0cmVzcmMuYwpAQCAtNTAsNyArNTAsNyBAQAogI2lmIGRlZmluZWQoQUNQSV9ESVNBU1NFTUJMRVIpIHx8IGRlZmluZWQgKEFDUElfREVCVUdHRVIpCiAvKgogICogU3RyaW5ncyB1c2VkIHRvIGRlY29kZSByZXNvdXJjZSBkZXNjcmlwdG9ycy4KLSAqIFVzZWQgYnkgYm90aCB0aGUgZGlzYXNzc2VtYmxlciBhbmQgdGhlIGRlYnVnZ2VyIHJlc291cmNlIGR1bXAgcm91dGluZXMKKyAqIFVzZWQgYnkgYm90aCB0aGUgZGlzYXNzZW1ibGVyIGFuZCB0aGUgZGVidWdnZXIgcmVzb3VyY2UgZHVtcCByb3V0aW5lcwogICovCiBjb25zdCBjaGFyICphY3BpX2dibF9ibV9kZWNvZGVbXSA9IHsKIAkiTm90QnVzTWFzdGVyIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hcGVpL0tjb25maWcgYi9kcml2ZXJzL2FjcGkvYXBlaS9LY29uZmlnCmluZGV4IDY2YTAzY2EuLmY3MzlhNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hcGVpL0tjb25maWcKKysrIGIvZHJpdmVycy9hY3BpL2FwZWkvS2NvbmZpZwpAQCAtMSw1ICsxLDYgQEAKIGNvbmZpZyBBQ1BJX0FQRUkKIAlib29sICJBQ1BJIFBsYXRmb3JtIEVycm9yIEludGVyZmFjZSAoQVBFSSkiCisJc2VsZWN0IE1JU0NfRklMRVNZU1RFTVMKIAlzZWxlY3QgUFNUT1JFCiAJZGVwZW5kcyBvbiBYODYKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYXBlaS9lcnN0LmMgYi9kcml2ZXJzL2FjcGkvYXBlaS9lcnN0LmMKaW5kZXggZDZjYjBmZi4uZTZjZWY4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FwZWkvZXJzdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hcGVpL2Vyc3QuYwpAQCAtOTI5LDEzICs5MjksMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHNpemVfdCBlcnN0X3JlYWRlcih1NjQgKmlkLCBlbnVtIHBzdG9yZV90eXBlX2lkICp0eXBlLAorc3RhdGljIGludCBlcnN0X29wZW5fcHN0b3JlKHN0cnVjdCBwc3RvcmVfaW5mbyAqcHNpKTsKK3N0YXRpYyBpbnQgZXJzdF9jbG9zZV9wc3RvcmUoc3RydWN0IHBzdG9yZV9pbmZvICpwc2kpOworc3RhdGljIHNzaXplX3QgZXJzdF9yZWFkZXIodTY0ICppZCwgZW51bSBwc3RvcmVfdHlwZV9pZCAqdHlwZSwKIAkJICAgICAgIHN0cnVjdCB0aW1lc3BlYyAqdGltZSk7CiBzdGF0aWMgdTY0IGVyc3Rfd3JpdGVyKGVudW0gcHN0b3JlX3R5cGVfaWQgdHlwZSwgc2l6ZV90IHNpemUpOwogCiBzdGF0aWMgc3RydWN0IHBzdG9yZV9pbmZvIGVyc3RfaW5mbyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImVyc3QiLAorCS5vcGVuCQk9IGVyc3Rfb3Blbl9wc3RvcmUsCisJLmNsb3NlCQk9IGVyc3RfY2xvc2VfcHN0b3JlLAogCS5yZWFkCQk9IGVyc3RfcmVhZGVyLAogCS53cml0ZQkJPSBlcnN0X3dyaXRlciwKIAkuZXJhc2UJCT0gZXJzdF9jbGVhcgpAQCAtOTU3LDEyICs5NjEsMzIgQEAKIAljaGFyIGRhdGFbXTsKIH0gX19wYWNrZWQ7CiAKLXN0YXRpYyBzaXplX3QgZXJzdF9yZWFkZXIodTY0ICppZCwgZW51bSBwc3RvcmVfdHlwZV9pZCAqdHlwZSwKK3N0YXRpYyBpbnQgcmVhZGVyX3BvczsKKworc3RhdGljIGludCBlcnN0X29wZW5fcHN0b3JlKHN0cnVjdCBwc3RvcmVfaW5mbyAqcHNpKQoreworCWludCByYzsKKworCWlmIChlcnN0X2Rpc2FibGUpCisJCXJldHVybiAtRU5PREVWOworCisJcmMgPSBlcnN0X2dldF9yZWNvcmRfaWRfYmVnaW4oJnJlYWRlcl9wb3MpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGVyc3RfY2xvc2VfcHN0b3JlKHN0cnVjdCBwc3RvcmVfaW5mbyAqcHNpKQoreworCWVyc3RfZ2V0X3JlY29yZF9pZF9lbmQoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBlcnN0X3JlYWRlcih1NjQgKmlkLCBlbnVtIHBzdG9yZV90eXBlX2lkICp0eXBlLAogCQkgICAgICAgc3RydWN0IHRpbWVzcGVjICp0aW1lKQogewogCWludCByYzsKLQlzc2l6ZV90IGxlbjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNzaXplX3QgbGVuID0gMDsKIAl1NjQgcmVjb3JkX2lkOwogCXN0cnVjdCBjcGVyX3BzdG9yZV9yZWNvcmQgKnJjZCA9IChzdHJ1Y3QgY3Blcl9wc3RvcmVfcmVjb3JkICopCiAJCQkJCShlcnN0X2luZm8uYnVmIC0gc2l6ZW9mKCpyY2QpKTsKQEAgLTk3MCwyNCArOTk0LDI4IEBACiAJaWYgKGVyc3RfZGlzYWJsZSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmVyc3RfbG9jaywgZmxhZ3MpOwogc2tpcDoKLQlyYyA9IF9fZXJzdF9nZXRfbmV4dF9yZWNvcmRfaWQoJnJlY29yZF9pZCk7Ci0JaWYgKHJjKSB7Ci0JCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcnN0X2xvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIHJjOwotCX0KKwlyYyA9IGVyc3RfZ2V0X3JlY29yZF9pZF9uZXh0KCZyZWFkZXJfcG9zLCAmcmVjb3JkX2lkKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0OworCiAJLyogbm8gbW9yZSByZWNvcmQgKi8KIAlpZiAocmVjb3JkX2lkID09IEFQRUlfRVJTVF9JTlZBTElEX1JFQ09SRF9JRCkgewotCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXJzdF9sb2NrLCBmbGFncyk7Ci0JCXJldHVybiAwOworCQlyYyA9IC0xOworCQlnb3RvIG91dDsKIAl9CiAKLQlsZW4gPSBfX2Vyc3RfcmVhZChyZWNvcmRfaWQsICZyY2QtPmhkciwgc2l6ZW9mKCpyY2QpICsKLQkJCSAgZXJzdF9lcmFuZ2Uuc2l6ZSk7CisJbGVuID0gZXJzdF9yZWFkKHJlY29yZF9pZCwgJnJjZC0+aGRyLCBzaXplb2YoKnJjZCkgKworCQkJZXJzdF9pbmZvLmJ1ZnNpemUpOworCS8qIFRoZSByZWNvcmQgbWF5IGJlIGNsZWFyZWQgYnkgb3RoZXJzLCB0cnkgcmVhZCBuZXh0IHJlY29yZCAqLworCWlmIChsZW4gPT0gLUVOT0VOVCkKKwkJZ290byBza2lwOworCWVsc2UgaWYgKGxlbiA8IDApIHsKKwkJcmMgPSAtMTsKKwkJZ290byBvdXQ7CisJfQogCWlmICh1dWlkX2xlX2NtcChyY2QtPmhkci5jcmVhdG9yX2lkLCBDUEVSX0NSRUFUT1JfUFNUT1JFKSAhPSAwKQogCQlnb3RvIHNraXA7Ci0JcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVyc3RfbG9jaywgZmxhZ3MpOwogCiAJKmlkID0gcmVjb3JkX2lkOwogCWlmICh1dWlkX2xlX2NtcChyY2QtPnNlY19oZHIuc2VjdGlvbl90eXBlLApAQCAtMTAwNSw3ICsxMDMzLDggQEAKIAkJdGltZS0+dHZfc2VjID0gMDsKIAl0aW1lLT50dl9uc2VjID0gMDsKIAotCXJldHVybiBsZW4gLSBzaXplb2YoKnJjZCk7CitvdXQ6CisJcmV0dXJuIChyYyA8IDApID8gcmMgOiAobGVuIC0gc2l6ZW9mKCpyY2QpKTsKIH0KIAogc3RhdGljIHU2NCBlcnN0X3dyaXRlcihlbnVtIHBzdG9yZV90eXBlX2lkIHR5cGUsIHNpemVfdCBzaXplKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3ZpZGVvLmMgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwppbmRleCBlYzU3NGZjLi5kYjM5ZTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdmlkZW8uYworKysgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwpAQCAtMTUyMSw3ICsxNTIxLDcgQEAKIAkJYWNwaV9idXNfZ2VuZXJhdGVfcHJvY19ldmVudChkZXZpY2UsIGV2ZW50LCAwKTsKIAkJa2V5Y29kZSA9IEtFWV9CUklHSFRORVNTRE9XTjsKIAkJYnJlYWs7Ci0JY2FzZSBBQ1BJX1ZJREVPX05PVElGWV9aRVJPX0JSSUdIVE5FU1M6CS8qIHplcm8gYnJpZ2h0bmVzc3MgKi8KKwljYXNlIEFDUElfVklERU9fTk9USUZZX1pFUk9fQlJJR0hUTkVTUzoJLyogemVybyBicmlnaHRuZXNzICovCiAJCWlmIChicmlnaHRuZXNzX3N3aXRjaF9lbmFibGVkKQogCQkJYWNwaV92aWRlb19zd2l0Y2hfYnJpZ2h0bmVzcyh2aWRlb19kZXZpY2UsIGV2ZW50KTsKIAkJYWNwaV9idXNfZ2VuZXJhdGVfcHJvY19ldmVudChkZXZpY2UsIGV2ZW50LCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2FjYXJkLWFoY2kuYyBiL2RyaXZlcnMvYXRhL2FjYXJkLWFoY2kuYwppbmRleCAzMzljMjEwLi5hZTIyYmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9hY2FyZC1haGNpLmMKKysrIGIvZHJpdmVycy9hdGEvYWNhcmQtYWhjaS5jCkBAIC00MTcsNyArNDE3LDcgQEAKIAogCVZQUklOVEsoIkVOVEVSXG4iKTsKIAotCVdBUk5fT04oQVRBX01BWF9RVUVVRSA+IEFIQ0lfTUFYX0NNRFMpOworCVdBUk5fT04oKGludClBVEFfTUFYX1FVRVVFID4gQUhDSV9NQVhfQ01EUyk7CiAKIAlpZiAoIXByaW50ZWRfdmVyc2lvbisrKQogCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsICJ2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jIGIvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYwppbmRleCA3NmMzYzE1Li43MzZiZWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKQEAgLTM2MTksOCArMzYxOSwxNCBAQAogCQlzY29udHJvbCB8PSAoMHgyIDw8IDgpOwogCQlicmVhazsKIAljYXNlIEFUQV9MUE1fTUlOX1BPV0VSOgotCQkvKiBubyByZXN0cmljdGlvbnMgb24gTFBNIHRyYW5zaXRpb25zICovCi0JCXNjb250cm9sICY9IH4oMHgzIDw8IDgpOworCQlpZiAoYXRhX2xpbmtfbnJfZW5hYmxlZChsaW5rKSA+IDApCisJCQkvKiBubyByZXN0cmljdGlvbnMgb24gTFBNIHRyYW5zaXRpb25zICovCisJCQlzY29udHJvbCAmPSB+KDB4MyA8PCA4KTsKKwkJZWxzZSB7CisJCQkvKiBlbXB0eSBwb3J0LCBwb3dlciBvZmYgKi8KKwkJCXNjb250cm9sICY9IH4weGY7CisJCQlzY29udHJvbCB8PSAoMHgxIDw8IDIpOworCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCVdBUk5fT04oMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtZWguYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCmluZGV4IGRhZDlmZDYuLmRmYjZlOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCkBAIC0zNDIzLDcgKzM0MjMsNyBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBhdGFfbGlua19ucl9lbmFibGVkKHN0cnVjdCBhdGFfbGluayAqbGluaykKK2ludCBhdGFfbGlua19ucl9lbmFibGVkKHN0cnVjdCBhdGFfbGluayAqbGluaykKIHsKIAlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2OwogCWludCBjbnQgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLXBtcC5jIGIvZHJpdmVycy9hdGEvbGliYXRhLXBtcC5jCmluZGV4IDMxMjA1OTYuLmYwNmI3ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1wbXAuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtcG1wLmMKQEAgLTQ0OSw2ICs0NDksMTYgQEAKIAkJICogb3RoZXJ3aXNlLiAgRG9uJ3QgdHJ5IGhhcmQgdG8gcmVjb3ZlciBpdC4KIAkJICovCiAJCWFwLT5wbXBfbGlua1thcC0+bnJfcG1wX2xpbmtzIC0gMV0uZmxhZ3MgfD0gQVRBX0xGTEFHX05PX1JFVFJZOworCX0gZWxzZSBpZiAodmVuZG9yID09IDB4MTk3YiAmJiBkZXZpZCA9PSAweDIzNTIpIHsKKwkJLyogY2hpcCBmb3VuZCBpbiBUaGVybWFsdGFrZSBCbGFja1ggRHVldCwgam1pY3JvbiBKTUIzNTA/ICovCisJCWF0YV9mb3JfZWFjaF9saW5rKGxpbmssIGFwLCBFREdFKSB7CisJCQkvKiBTUlNUIGJyZWFrcyBkZXRlY3Rpb24gYW5kIGRpc2tzIGdldCBtaXNjbGFzc2lmaWVkCisJCQkgKiBMUE0gZGlzYWJsZWQgdG8gYXZvaWQgcG90ZW50aWFsIHByb2JsZW1zCisJCQkgKi8KKwkJCWxpbmstPmZsYWdzIHw9IEFUQV9MRkxBR19OT19MUE0gfAorCQkJCSAgICAgICBBVEFfTEZMQUdfTk9fU1JTVCB8CisJCQkJICAgICAgIEFUQV9MRkxBR19BU1NVTUVfQVRBOworCQl9CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jIGIvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYwppbmRleCBlMmY1N2U5ZS4uMzBlYTk1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCkBAIC0yMTM4LDcgKzIxMzgsNyBAQAogCSAqIHdpdGggdGhlIHVubWFwIGJpdCBzZXQuCiAJICovCiAJaWYgKGF0YV9pZF9oYXNfdHJpbShhcmdzLT5pZCkpIHsKLQkJcHV0X3VuYWxpZ25lZF9iZTMyKDY1NTM1ICogNTEyIC8gOCwgJnJidWZbMjBdKTsKKwkJcHV0X3VuYWxpZ25lZF9iZTY0KDY1NTM1ICogNTEyIC8gOCwgJnJidWZbMzZdKTsKIAkJcHV0X3VuYWxpZ25lZF9iZTMyKDEsICZyYnVmWzI4XSk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMKaW5kZXggZjgzODBjZS4uYjFiOTI2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYwpAQCAtMjQ0NywxMyArMjQ0NywxOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWlmICghbGVnYWN5X21vZGUgJiYgcGRldi0+aXJxKSB7CisJCWludCBpOworCiAJCXJjID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIHBkZXYtPmlycSwgaXJxX2hhbmRsZXIsCiAJCQkJICAgICAgSVJRRl9TSEFSRUQsIGRydl9uYW1lLCBob3N0KTsKIAkJaWYgKHJjKQogCQkJZ290byBvdXQ7CiAKLQkJYXRhX3BvcnRfZGVzYyhob3N0LT5wb3J0c1swXSwgImlycSAlZCIsIHBkZXYtPmlycSk7Ci0JCWF0YV9wb3J0X2Rlc2MoaG9zdC0+cG9ydHNbMV0sICJpcnEgJWQiLCBwZGV2LT5pcnEpOworCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCQlpZiAoYXRhX3BvcnRfaXNfZHVtbXkoaG9zdC0+cG9ydHNbaV0pKQorCQkJCWNvbnRpbnVlOworCQkJYXRhX3BvcnRfZGVzYyhob3N0LT5wb3J0c1tpXSwgImlycSAlZCIsIHBkZXYtPmlycSk7CisJCX0KIAl9IGVsc2UgaWYgKGxlZ2FjeV9tb2RlKSB7CiAJCWlmICghYXRhX3BvcnRfaXNfZHVtbXkoaG9zdC0+cG9ydHNbMF0pKSB7CiAJCQlyYyA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBBVEFfUFJJTUFSWV9JUlEocGRldiksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2F0OTEuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYXQ5MS5jCmluZGV4IGE1ZmRiZGMuLjk2MGM3MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYXQ5MS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYXQ5MS5jCkBAIC0zLDYgKzMsNyBAQAogICogd2l0aCBDb21wYWN0Rmxhc2ggaW50ZXJmYWNlIGluIFRydWUgSURFIG1vZGUKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF0eXVrZXZpY2ggU2VyZ2V5CisgKiAgICAgICAgICAgICAgIDIwMTEgSWdvciBQbHlhdG92CiAgKgogICogQmFzZWQgb246CiAgKiAgICAgICogZ2VuZXJpYyBwbGF0Zm9ybSBkcml2ZXIgYnkgUGF1bCBNdW5kdDogZHJpdmVycy9hdGEvcGF0YV9wbGF0Zm9ybS5jCkBAIC0zMSwzOCArMzIsMTUwIEBACiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogCisjZGVmaW5lIERSVl9OQU1FCQkicGF0YV9hdDkxIgorI2RlZmluZSBEUlZfVkVSU0lPTgkJIjAuMyIKIAotI2RlZmluZSBEUlZfTkFNRSAicGF0YV9hdDkxIgotI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4yIgotCi0jZGVmaW5lIENGX0lERV9PRkZTRVQJICAgIDB4MDBjMDAwMDAKLSNkZWZpbmUgQ0ZfQUxUX0lERV9PRkZTRVQgICAweDAwZTAwMDAwCi0jZGVmaW5lIENGX0lERV9SRVNfU0laRSAgICAgMHgwOAotI2RlZmluZSBOQ1NfUkRfUFVMU0VfTElNSVQgIDB4M2YgLyogbWF4aW1hbCB2YWx1ZSBmb3IgcHVsc2UgYml0ZmllbGRzICovCisjZGVmaW5lIENGX0lERV9PRkZTRVQJCTB4MDBjMDAwMDAKKyNkZWZpbmUgQ0ZfQUxUX0lERV9PRkZTRVQJMHgwMGUwMDAwMAorI2RlZmluZSBDRl9JREVfUkVTX1NJWkUJCTB4MDgKKyNkZWZpbmUgQ1NfUFVMU0VfTUFYSU1VTQkzMTkKKyNkZWZpbmUgRVJfU01DX0NBTEMJCTEKKyNkZWZpbmUgRVJfU01DX1JFQ0FMQwkJMgogCiBzdHJ1Y3QgYXQ5MV9pZGVfaW5mbyB7CiAJdW5zaWduZWQgbG9uZyBtb2RlOwogCXVuc2lnbmVkIGludCBjczsKLQogCXN0cnVjdCBjbGsgKm1jazsKLQogCXZvaWQgX19pb21lbSAqaWRlX2FkZHI7CiAJdm9pZCBfX2lvbWVtICphbHRfYWRkcjsKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3RpbWluZyBpbml0aWFsX3RpbWluZyA9IHsKLQkubW9kZQkJPSBYRkVSX1BJT18wLAotCS5zZXR1cAkJPSA3MCwKLQkuYWN0OGIJCT0gMjkwLAotCS5yZWM4YgkJPSAyNDAsCi0JLmN5YzhiCQk9IDYwMCwKLQkuYWN0aXZlCQk9IDE2NSwKLQkucmVjb3Zlcgk9IDE1MCwKLQkuZG1hY2tfaG9sZAk9IDAsCi0JLmN5Y2xlCQk9IDYwMCwKLQkudWRtYQkJPSAwCisvKioKKyAqIHN0cnVjdCBzbWNfcmFuZ2UgLSByYW5nZSBvZiB2YWxpZCB2YWx1ZXMgZm9yIFNNQyByZWdpc3Rlci4KKyAqLworc3RydWN0IHNtY19yYW5nZSB7CisJaW50IG1pbjsKKwlpbnQgbWF4OwogfTsKIAorLyoqCisgKiBhZGp1c3Rfc21jX3ZhbHVlIC0gYWRqdXN0IHZhbHVlIGZvciBvbmUgb2YgU01DIHJlZ2lzdGVycy4KKyAqIEB2YWx1ZTogYWRqdXN0ZWQgdmFsdWUKKyAqIEByYW5nZTogYXJyYXkgb2YgU01DIHJhbmdlcyB3aXRoIHZhbGlkIHZhbHVlcworICogQHNpemU6IFNNQyByYW5nZXMgYXJyYXkgc2l6ZQorICoKKyAqIFRoaXMgcmV0dXJucyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGlucHV0IGFuZCBvdXRwdXQgdmFsdWUgb3IgbmVnYXRpdmUKKyAqIGluIGNhc2Ugb2YgaW52YWxpZCBpbnB1dCB2YWx1ZS4KKyAqIElmIG5lZ2F0aXZlIHJldHVybmVkLCB0aGVuIG91dHB1dCB2YWx1ZSA9IG1heGltYWwgcG9zc2libGUgZnJvbSByYW5nZXMuCisgKi8KK3N0YXRpYyBpbnQgYWRqdXN0X3NtY192YWx1ZShpbnQgKnZhbHVlLCBzdHJ1Y3Qgc21jX3JhbmdlICpyYW5nZSwgaW50IHNpemUpCit7CisJaW50IG1heGltdW0gPSAocmFuZ2UgKyBzaXplIC0gMSktPm1heDsKKwlpbnQgcmVtYWluZGVyOworCisJZG8geworCQlpZiAoKnZhbHVlIDwgcmFuZ2UtPm1pbikgeworCQkJcmVtYWluZGVyID0gcmFuZ2UtPm1pbiAtICp2YWx1ZTsKKwkJCSp2YWx1ZSA9IHJhbmdlLT5taW47IC8qIG5lYXJlc3QgdmFsaWQgdmFsdWUgKi8KKwkJCXJldHVybiByZW1haW5kZXI7CisJCX0gZWxzZSBpZiAoKHJhbmdlLT5taW4gPD0gKnZhbHVlKSAmJiAoKnZhbHVlIDw9IHJhbmdlLT5tYXgpKQorCQkJcmV0dXJuIDA7CisKKwkJcmFuZ2UrKzsKKwl9IHdoaWxlICgtLXNpemUpOworCSp2YWx1ZSA9IG1heGltdW07CisKKwlyZXR1cm4gLTE7IC8qIGludmFsaWQgdmFsdWUgKi8KK30KKworLyoqCisgKiBjYWxjX3NtY192YWxzIC0gY2FsY3VsYXRlIFNNQyByZWdpc3RlciB2YWx1ZXMKKyAqIEBkZXY6IEFUQSBkZXZpY2UKKyAqIEBzZXR1cDogU01DX1NFVFVQIHJlZ2lzdGVyIHZhbHVlCisgKiBAcHVsc2U6IFNNQ19QVUxTRSByZWdpc3RlciB2YWx1ZQorICogQGN5Y2xlOiBTTUNfQ1lDTEUgcmVnaXN0ZXIgdmFsdWUKKyAqCisgKiBUaGlzIHJldHVybnMgbmVnYXRpdmUgaW4gY2FzZSBvZiBpbnZhbGlkIHZhbHVlcyBmb3IgU01DIHJlZ2lzdGVyczoKKyAqIC1FUl9TTUNfUkVDQUxDIC0gcmVjYWxjdWxhdGlvbiByZXF1aXJlZCBmb3IgU01DIHZhbHVlcywKKyAqIC1FUl9TTUNfQ0FMQyAtIGNhbGN1bGF0aW9uIGZhaWxlZCAoaW52YWxpZCBpbnB1dCB2YWx1ZXMpLgorICoKKyAqIFNNQyB1c2Ugc3BlY2lhbCBjb2Rpbmcgc2NoZW1lLCBzZWUgIkNvZGluZyBhbmQgUmFuZ2Ugb2YgVGltaW5nCisgKiBQYXJhbWV0ZXJzIiB0YWJsZSBmcm9tIEFUOTFTQU05IGRhdGFzaGVldHMuCisgKgorICoJU01DX1NFVFVQID0gMTI4KnNldHVwWzVdICsgc2V0dXBbNDowXQorICoJU01DX1BVTFNFID0gMjU2KnB1bHNlWzZdICsgcHVsc2VbNTowXQorICoJU01DX0NZQ0xFID0gMjU2KmN5Y2xlWzg6N10gKyBjeWNsZVs2OjBdCisgKi8KK3N0YXRpYyBpbnQgY2FsY19zbWNfdmFscyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCWludCAqc2V0dXAsIGludCAqcHVsc2UsIGludCAqY3ljbGUsIGludCAqY3NfcHVsc2UpCit7CisJaW50IHJldF92YWw7CisJaW50IGVyciA9IDA7CisJc3RydWN0IHNtY19yYW5nZSByYW5nZV9zZXR1cFtdID0gewkvKiBTTUNfU0VUVVAgdmFsaWQgdmFsdWVzICovCisJCXsubWluID0gMCwJLm1heCA9IDMxfSwJLyogZmlyc3QgIHJhbmdlICovCisJCXsubWluID0gMTI4LAkubWF4ID0gMTU5fQkvKiBzZWNvbmQgcmFuZ2UgKi8KKwl9OworCXN0cnVjdCBzbWNfcmFuZ2UgcmFuZ2VfcHVsc2VbXSA9IHsJLyogU01DX1BVTFNFIHZhbGlkIHZhbHVlcyAqLworCQl7Lm1pbiA9IDAsCS5tYXggPSA2M30sCS8qIGZpcnN0ICByYW5nZSAqLworCQl7Lm1pbiA9IDI1NiwJLm1heCA9IDMxOX0JLyogc2Vjb25kIHJhbmdlICovCisJfTsKKwlzdHJ1Y3Qgc21jX3JhbmdlIHJhbmdlX2N5Y2xlW10gPSB7CS8qIFNNQ19DWUNMRSB2YWxpZCB2YWx1ZXMgKi8KKwkJey5taW4gPSAwLAkubWF4ID0gMTI3fSwJLyogZmlyc3QgIHJhbmdlICovCisJCXsubWluID0gMjU2LAkubWF4ID0gMzgzfSwJLyogc2Vjb25kIHJhbmdlICovCisJCXsubWluID0gNTEyLAkubWF4ID0gNjM5fSwJLyogdGhpcmQgIHJhbmdlICovCisJCXsubWluID0gNzY4LAkubWF4ID0gODk1fQkvKiBmb3VydGggcmFuZ2UgKi8KKwl9OworCisJcmV0X3ZhbCA9IGFkanVzdF9zbWNfdmFsdWUoc2V0dXAsIHJhbmdlX3NldHVwLCBBUlJBWV9TSVpFKHJhbmdlX3NldHVwKSk7CisJaWYgKHJldF92YWwgPCAwKQorCQlkZXZfd2FybihkZXYsICJtYXhpbWFsIFNNQyBTZXR1cCB2YWx1ZVxuIik7CisJZWxzZQorCQkqY3ljbGUgKz0gcmV0X3ZhbDsKKworCXJldF92YWwgPSBhZGp1c3Rfc21jX3ZhbHVlKHB1bHNlLCByYW5nZV9wdWxzZSwgQVJSQVlfU0laRShyYW5nZV9wdWxzZSkpOworCWlmIChyZXRfdmFsIDwgMCkKKwkJZGV2X3dhcm4oZGV2LCAibWF4aW1hbCBTTUMgUHVsc2UgdmFsdWVcbiIpOworCWVsc2UKKwkJKmN5Y2xlICs9IHJldF92YWw7CisKKwlyZXRfdmFsID0gYWRqdXN0X3NtY192YWx1ZShjeWNsZSwgcmFuZ2VfY3ljbGUsIEFSUkFZX1NJWkUocmFuZ2VfY3ljbGUpKTsKKwlpZiAocmV0X3ZhbCA8IDApCisJCWRldl93YXJuKGRldiwgIm1heGltYWwgU01DIEN5Y2xlIHZhbHVlXG4iKTsKKworCSpjc19wdWxzZSA9ICpjeWNsZTsKKwlpZiAoKmNzX3B1bHNlID4gQ1NfUFVMU0VfTUFYSU1VTSkgeworCQlkZXZfZXJyKGRldiwgInVuYWJsZSB0byBjYWxjdWxhdGUgdmFsaWQgU01DIHNldHRpbmdzXG4iKTsKKwkJcmV0dXJuIC1FUl9TTUNfQ0FMQzsKKwl9CisKKwlyZXRfdmFsID0gYWRqdXN0X3NtY192YWx1ZShjc19wdWxzZSwgcmFuZ2VfcHVsc2UsCisJCQkJCUFSUkFZX1NJWkUocmFuZ2VfcHVsc2UpKTsKKwlpZiAocmV0X3ZhbCA8IDApIHsKKwkJZGV2X3dhcm4oZGV2LCAibWF4aW1hbCBTTUMgQ1MgUHVsc2UgdmFsdWVcbiIpOworCX0gZWxzZSBpZiAocmV0X3ZhbCAhPSAwKSB7CisJCSpjeWNsZSA9ICpjc19wdWxzZTsKKwkJZGV2X3dhcm4oZGV2LCAiU01DIEN5Y2xlIGV4dGVuZGVkXG4iKTsKKwkJZXJyID0gLUVSX1NNQ19SRUNBTEM7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiB0b19zbWNfZm9ybWF0IC0gY29udmVydCB2YWx1ZXMgaW50byBTTUMgZm9ybWF0CisgKiBAc2V0dXA6IFNFVFVQIHZhbHVlIG9mIFNNQyBTZXR1cCBSZWdpc3RlcgorICogQHB1bHNlOiBQVUxTRSB2YWx1ZSBvZiBTTUMgUHVsc2UgUmVnaXN0ZXIKKyAqIEBjeWNsZTogQ1lDTEUgdmFsdWUgb2YgU01DIEN5Y2xlIFJlZ2lzdGVyCisgKiBAY3NfcHVsc2U6IE5DU19QVUxTRSB2YWx1ZSBvZiBTTUMgUHVsc2UgUmVnaXN0ZXIKKyAqLworc3RhdGljIHZvaWQgdG9fc21jX2Zvcm1hdChpbnQgKnNldHVwLCBpbnQgKnB1bHNlLCBpbnQgKmN5Y2xlLCBpbnQgKmNzX3B1bHNlKQoreworCSpzZXR1cCA9ICgqc2V0dXAgJiAweDFmKSB8ICgoKnNldHVwICYgMHg4MCkgPj4gMik7CisJKnB1bHNlID0gKCpwdWxzZSAmIDB4M2YpIHwgKCgqcHVsc2UgJiAweDEwMCkgPj4gMik7CisJKmN5Y2xlID0gKCpjeWNsZSAmIDB4N2YpIHwgKCgqY3ljbGUgJiAweDMwMCkgPj4gMSk7CisJKmNzX3B1bHNlID0gKCpjc19wdWxzZSAmIDB4M2YpIHwgKCgqY3NfcHVsc2UgJiAweDEwMCkgPj4gMik7Cit9CisKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNhbGNfbWNrX2N5Y2xlcyh1bnNpZ25lZCBsb25nIG5zLCB1bnNpZ25lZCBsb25nIG1ja19oeikKIHsKIAl1bnNpZ25lZCBsb25nIG11bDsKQEAgLTgwLDg1ICsxOTMsNzcgQEAKIAlyZXR1cm4gKG5zICogbXVsICsgNjU1MzYpID4+IDE2OyAgICAvKiByb3VuZGluZyAqLwogfQogCi1zdGF0aWMgdm9pZCBzZXRfc21jX21vZGUoc3RydWN0IGF0OTFfaWRlX2luZm8gKmluZm8pCi17Ci0JYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TTUNfTU9ERShpbmZvLT5jcyksIGluZm8tPm1vZGUpOwotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgc2V0X3NtY190aW1pbmcoc3RydWN0IGRldmljZSAqZGV2LAorLyoqCisgKiBzZXRfc21jX3RpbWluZyAtIFNNQyB0aW1pbmdzIHNldHVwLgorICogQGRldjogZGV2aWNlCisgKiBAaW5mbzogQVQ5MSBJREUgaW5mbworICogQGF0YTogQVRBIHRpbWluZ3MKKyAqCisgKiBJdHMgYXNzdW1lZCB0aGF0IHdyaXRlIHRpbWluZ3MgYXJlIHNhbWUgYXMgcmVhZCB0aW1pbmdzLAorICogY3Nfc2V0dXAgPSAwIGFuZCBjc19wdWxzZSA9IGN5Y2xlLgorICovCitzdGF0aWMgdm9pZCBzZXRfc21jX3RpbWluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2LAogCQlzdHJ1Y3QgYXQ5MV9pZGVfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGF0YV90aW1pbmcgKmF0YSkKIHsKLQl1bnNpZ25lZCBsb25nIHJlYWRfY3ljbGUsIHdyaXRlX2N5Y2xlLCBhY3RpdmUsIHJlY292ZXI7Ci0JdW5zaWduZWQgbG9uZyBucmRfc2V0dXAsIG5yZF9wdWxzZSwgbnJkX3JlY292ZXI7Ci0JdW5zaWduZWQgbG9uZyBud2Vfc2V0dXAsIG53ZV9wdWxzZTsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgdXNlX2lvcmR5OworCXVuc2lnbmVkIGludCB0Nno7ICAgICAgICAgLyogZGF0YSB0cmlzdGF0ZSB0aW1lIGluIG5zICovCisJdW5zaWduZWQgaW50IGN5Y2xlOyAgICAgICAvKiBTTUMgQ3ljbGUgd2lkdGggaW4gTUNLIHRpY2tzICovCisJdW5zaWduZWQgaW50IHNldHVwOyAgICAgICAvKiBTTUMgU2V0dXAgd2lkdGggaW4gTUNLIHRpY2tzICovCisJdW5zaWduZWQgaW50IHB1bHNlOyAgICAgICAvKiBDRklPUiBhbmQgQ0ZJT1cgcHVsc2Ugd2lkdGggaW4gTUNLIHRpY2tzICovCisJdW5zaWduZWQgaW50IGNzX3NldHVwID0gMDsvKiBDUzQgb3IgQ1M1IHNldHVwIHdpZHRoIGluIE1DSyB0aWNrcyAqLworCXVuc2lnbmVkIGludCBjc19wdWxzZTsgICAgLyogQ1M0IG9yIENTNSBwdWxzZSB3aWR0aCBpbiBNQ0sgdGlja3MqLworCXVuc2lnbmVkIGludCB0ZGZfY3ljbGVzOyAgLyogU01DIFRERiBNQ0sgdGlja3MgKi8KKwl1bnNpZ25lZCBsb25nIG1ja19oejsgICAgIC8qIE1DSyBmcmVxdWVuY3kgaW4gSHogKi8KIAotCXVuc2lnbmVkIGxvbmcgbmNzX3dyaXRlX3NldHVwLCBuY3Nfd3JpdGVfcHVsc2U7Ci0JdW5zaWduZWQgbG9uZyBuY3NfcmVhZF9zZXR1cCwgbmNzX3JlYWRfcHVsc2U7Ci0KLQl1bnNpZ25lZCBsb25nIG1ja19oejsKLQotCXJlYWRfY3ljbGUgID0gYXRhLT5jeWM4YjsKLQlucmRfc2V0dXAgICA9IGF0YS0+c2V0dXA7Ci0JbnJkX3B1bHNlICAgPSBhdGEtPmFjdDhiOwotCW5yZF9yZWNvdmVyID0gYXRhLT5yZWM4YjsKLQorCXQ2eiA9IChhdGEtPm1vZGUgPCBYRkVSX1BJT181KSA/IDMwIDogMjA7CiAJbWNrX2h6ID0gY2xrX2dldF9yYXRlKGluZm8tPm1jayk7CisJY3ljbGUgPSBjYWxjX21ja19jeWNsZXMoYXRhLT5jeWM4YiwgbWNrX2h6KTsKKwlzZXR1cCA9IGNhbGNfbWNrX2N5Y2xlcyhhdGEtPnNldHVwLCBtY2tfaHopOworCXB1bHNlID0gY2FsY19tY2tfY3ljbGVzKGF0YS0+YWN0OGIsIG1ja19oeik7CisJdGRmX2N5Y2xlcyA9IGNhbGNfbWNrX2N5Y2xlcyh0NnosIG1ja19oeik7CiAKLQlyZWFkX2N5Y2xlICA9IGNhbGNfbWNrX2N5Y2xlcyhyZWFkX2N5Y2xlLCBtY2tfaHopOwotCW5yZF9zZXR1cCAgID0gY2FsY19tY2tfY3ljbGVzKG5yZF9zZXR1cCwgbWNrX2h6KTsKLQlucmRfcHVsc2UgICA9IGNhbGNfbWNrX2N5Y2xlcyhucmRfcHVsc2UsIG1ja19oeik7Ci0JbnJkX3JlY292ZXIgPSBjYWxjX21ja19jeWNsZXMobnJkX3JlY292ZXIsIG1ja19oeik7CisJZG8geworCQlyZXQgPSBjYWxjX3NtY192YWxzKGRldiwgJnNldHVwLCAmcHVsc2UsICZjeWNsZSwgJmNzX3B1bHNlKTsKKwl9IHdoaWxlIChyZXQgPT0gLUVSX1NNQ19SRUNBTEMpOwogCi0JYWN0aXZlICA9IG5yZF9zZXR1cCArIG5yZF9wdWxzZTsKLQlyZWNvdmVyID0gcmVhZF9jeWNsZSAtIGFjdGl2ZTsKKwlpZiAocmV0ID09IC1FUl9TTUNfQ0FMQykKKwkJZGV2X2VycihkZXYsICJJbnRlcmZhY2UgbWF5IG5vdCBvcGVyYXRlIGNvcnJlY3RseVxuIik7CiAKLQkvKiBOZWVkIGF0IGxlYXN0IHR3byBjeWNsZXMgcmVjb3ZlcnkgKi8KLQlpZiAocmVjb3ZlciA8IDIpCi0JCXJlYWRfY3ljbGUgPSBhY3RpdmUgKyAyOworCWRldl9kYmcoZGV2LCAiU01DIFNldHVwPSV1LCBQdWxzZT0ldSwgQ3ljbGU9JXUsIENTIFB1bHNlPSV1XG4iLAorCQlzZXR1cCwgcHVsc2UsIGN5Y2xlLCBjc19wdWxzZSk7CisJdG9fc21jX2Zvcm1hdCgmc2V0dXAsICZwdWxzZSwgJmN5Y2xlLCAmY3NfcHVsc2UpOworCS8qIGRpc2FibGUgb3IgZW5hYmxlIHdhaXRpbmcgZm9yIElPUkRZIHNpZ25hbCAqLworCXVzZV9pb3JkeSA9IGF0YV9waW9fbmVlZF9pb3JkeShhZGV2KTsKKwlpZiAodXNlX2lvcmR5KQorCQlpbmZvLT5tb2RlIHw9IEFUOTFfU01DX0VYTldNT0RFX1JFQURZOwogCi0JLyogKENTMCwgQ1MxLCBESVIsIE9FKSA8PSAoQ0ZDRTEsIENGQ0UyLCBDRlJOVywgTkNTWCkgdGltaW5ncyAqLwotCW5jc19yZWFkX3NldHVwID0gMTsKLQluY3NfcmVhZF9wdWxzZSA9IHJlYWRfY3ljbGUgLSAyOwotCWlmIChuY3NfcmVhZF9wdWxzZSA+IE5DU19SRF9QVUxTRV9MSU1JVCkgewotCQluY3NfcmVhZF9wdWxzZSA9IE5DU19SRF9QVUxTRV9MSU1JVDsKLQkJZGV2X3dhcm4oZGV2LCAibmNzX3JlYWRfcHVsc2UgbGltaXRlZCB0byBtYXhpbWFsIHZhbHVlICVsdVxuIiwKLQkJCW5jc19yZWFkX3B1bHNlKTsKKwlpZiAodGRmX2N5Y2xlcyA+IDE1KSB7CisJCXRkZl9jeWNsZXMgPSAxNTsKKwkJZGV2X3dhcm4oZGV2LCAibWF4aW1hbCBTTUMgVERGIEN5Y2xlcyB2YWx1ZVxuIik7CiAJfQogCi0JLyogV3JpdGUgdGltaW5ncyBzYW1lIGFzIHJlYWQgdGltaW5ncyAqLwotCXdyaXRlX2N5Y2xlID0gcmVhZF9jeWNsZTsKLQlud2Vfc2V0dXAgPSBucmRfc2V0dXA7Ci0JbndlX3B1bHNlID0gbnJkX3B1bHNlOwotCW5jc193cml0ZV9zZXR1cCA9IG5jc19yZWFkX3NldHVwOwotCW5jc193cml0ZV9wdWxzZSA9IG5jc19yZWFkX3B1bHNlOworCWRldl9kYmcoZGV2LCAiVXNlIElPUkRZPSV1LCBUREYgQ3ljbGVzPSV1XG4iLCB1c2VfaW9yZHksIHRkZl9jeWNsZXMpOworCWluZm8tPm1vZGUgfD0gQVQ5MV9TTUNfVERGXyh0ZGZfY3ljbGVzKTsKIAotCWRldl9kYmcoZGV2LCAiQVRBIHRpbWluZ3M6IG5yZF9zZXR1cCA9ICVsdSBucmRfcHVsc2UgPSAlbHUgbnJkX2N5Y2xlID0gJWx1XG4iLAotCQkJbnJkX3NldHVwLCBucmRfcHVsc2UsIHJlYWRfY3ljbGUpOwotCWRldl9kYmcoZGV2LCAiQVRBIHRpbWluZ3M6IG53ZV9zZXR1cCA9ICVsdSBud2VfcHVsc2UgPSAlbHUgbndlX2N5Y2xlID0gJWx1XG4iLAotCQkJbndlX3NldHVwLCBud2VfcHVsc2UsIHdyaXRlX2N5Y2xlKTsKLQlkZXZfZGJnKGRldiwgIkFUQSB0aW1pbmdzOiBuY3NfcmVhZF9zZXR1cCA9ICVsdSBuY3NfcmVhZF9wdWxzZSA9ICVsdVxuIiwKLQkJCW5jc19yZWFkX3NldHVwLCBuY3NfcmVhZF9wdWxzZSk7Ci0JZGV2X2RiZyhkZXYsICJBVEEgdGltaW5nczogbmNzX3dyaXRlX3NldHVwID0gJWx1IG5jc193cml0ZV9wdWxzZSA9ICVsdVxuIiwKLQkJCW5jc193cml0ZV9zZXR1cCwgbmNzX3dyaXRlX3B1bHNlKTsKLQorCS8qIHdyaXRlIFNNQyBTZXR1cCBSZWdpc3RlciAqLwogCWF0OTFfc3lzX3dyaXRlKEFUOTFfU01DX1NFVFVQKGluZm8tPmNzKSwKLQkJCUFUOTFfU01DX05XRVNFVFVQXyhud2Vfc2V0dXApIHwKLQkJCUFUOTFfU01DX05SRFNFVFVQXyhucmRfc2V0dXApIHwKLQkJCUFUOTFfU01DX05DU19XUlNFVFVQXyhuY3Nfd3JpdGVfc2V0dXApIHwKLQkJCUFUOTFfU01DX05DU19SRFNFVFVQXyhuY3NfcmVhZF9zZXR1cCkpOwotCisJCQlBVDkxX1NNQ19OV0VTRVRVUF8oc2V0dXApIHwKKwkJCUFUOTFfU01DX05SRFNFVFVQXyhzZXR1cCkgfAorCQkJQVQ5MV9TTUNfTkNTX1dSU0VUVVBfKGNzX3NldHVwKSB8CisJCQlBVDkxX1NNQ19OQ1NfUkRTRVRVUF8oY3Nfc2V0dXApKTsKKwkvKiB3cml0ZSBTTUMgUHVsc2UgUmVnaXN0ZXIgKi8KIAlhdDkxX3N5c193cml0ZShBVDkxX1NNQ19QVUxTRShpbmZvLT5jcyksCi0JCQlBVDkxX1NNQ19OV0VQVUxTRV8obndlX3B1bHNlKSB8Ci0JCQlBVDkxX1NNQ19OUkRQVUxTRV8obnJkX3B1bHNlKSB8Ci0JCQlBVDkxX1NNQ19OQ1NfV1JQVUxTRV8obmNzX3dyaXRlX3B1bHNlKSB8Ci0JCQlBVDkxX1NNQ19OQ1NfUkRQVUxTRV8obmNzX3JlYWRfcHVsc2UpKTsKLQorCQkJQVQ5MV9TTUNfTldFUFVMU0VfKHB1bHNlKSB8CisJCQlBVDkxX1NNQ19OUkRQVUxTRV8ocHVsc2UpIHwKKwkJCUFUOTFfU01DX05DU19XUlBVTFNFXyhjc19wdWxzZSkgfAorCQkJQVQ5MV9TTUNfTkNTX1JEUFVMU0VfKGNzX3B1bHNlKSk7CisJLyogd3JpdGUgU01DIEN5Y2xlIFJlZ2lzdGVyICovCiAJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TTUNfQ1lDTEUoaW5mby0+Y3MpLAotCQkJQVQ5MV9TTUNfTldFQ1lDTEVfKHdyaXRlX2N5Y2xlKSB8Ci0JCQlBVDkxX1NNQ19OUkRDWUNMRV8ocmVhZF9jeWNsZSkpOwotCi0JcmV0dXJuOworCQkJQVQ5MV9TTUNfTldFQ1lDTEVfKGN5Y2xlKSB8CisJCQlBVDkxX1NNQ19OUkRDWUNMRV8oY3ljbGUpKTsKKwkvKiB3cml0ZSBTTUMgTW9kZSBSZWdpc3RlciovCisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TTUNfTU9ERShpbmZvLT5jcyksIGluZm8tPm1vZGUpOwogfQogCiBzdGF0aWMgdm9pZCBwYXRhX2F0OTFfc2V0X3Bpb21vZGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYpCkBAIC0xNzIsMTUgKzI3Nyw5IEBACiAJaWYgKHJldCkgewogCQlkZXZfd2FybihhcC0+ZGV2LCAiRmFpbGVkIHRvIGNvbXB1dGUgQVRBIHRpbWluZyAlZCwgIgogCQkJICJzZXQgUElPXzAgdGltaW5nXG4iLCByZXQpOwotCQlzZXRfc21jX3RpbWluZyhhcC0+ZGV2LCBpbmZvLCAmaW5pdGlhbF90aW1pbmcpOwotCX0gZWxzZSB7Ci0JCXNldF9zbWNfdGltaW5nKGFwLT5kZXYsIGluZm8sICZ0aW1pbmcpOworCQl0aW1pbmcgPSAqYXRhX3RpbWluZ19maW5kX21vZGUoWEZFUl9QSU9fMCk7CiAJfQotCi0JLyogU2V0dXAgU01DIG1vZGUgKi8KLQlzZXRfc21jX21vZGUoaW5mbyk7Ci0KLQlyZXR1cm47CisJc2V0X3NtY190aW1pbmcoYXAtPmRldiwgYWRldiwgaW5mbywgJnRpbWluZyk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcGF0YV9hdDkxX2RhdGFfeGZlcl9ub2lycShzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LApAQCAtMzQ2LDcgKzQ0NSw3IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwYXRhX2F0OTFfZHJpdmVyID0gewogCS5wcm9iZQkJPSBwYXRhX2F0OTFfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChwYXRhX2F0OTFfcmVtb3ZlKSwKLQkuZHJpdmVyIAk9IHsKKwkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJCT0gRFJWX05BTUUsCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NHguYyBiL2RyaXZlcnMvYXRhL3BhdGFfY21kNjR4LmMKaW5kZXggOTA1ZmY3Ni4uN2JhZmMxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NHguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0eC5jCkBAIC00MSw2ICs0MSw5IEBACiBlbnVtIHsKIAlDRlIgCQk9IDB4NTAsCiAJCUNGUl9JTlRSX0NIMCAgPSAweDA0LAorCUNOVFJMCQk9IDB4NTEsCisJCUNOVFJMX0NIMCAgICAgPSAweDA0LAorCQlDTlRSTF9DSDEgICAgID0gMHgwOCwKIAlDTURUSU0gCQk9IDB4NTIsCiAJQVJUVElNMCAJPSAweDUzLAogCURSV1RJTTAgCT0gMHg1NCwKQEAgLTMyOCw5ICszMzEsMTkgQEAKIAkJCS5wb3J0X29wcyA9ICZjbWQ2NDhfcG9ydF9vcHMKIAkJfQogCX07Ci0JY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmY21kX2luZm9baWQtPmRyaXZlcl9kYXRhXSwgTlVMTCB9OwotCXU4IG1yZG1vZGU7CisJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAKKwkJJmNtZF9pbmZvW2lkLT5kcml2ZXJfZGF0YV0sCisJCSZjbWRfaW5mb1tpZC0+ZHJpdmVyX2RhdGFdLAorCQlOVUxMCisJfTsKKwl1OCBtcmRtb2RlLCByZWc7CiAJaW50IHJjOworCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2UgPSBwZGV2LT5idXMtPnNlbGY7CisJLyogbW9iaWxpdHkgc3BsaXQgYnJpZGdlcyBkb24ndCByZXBvcnQgZW5hYmxlZCBwb3J0cyBjb3JyZWN0bHkgKi8KKwlpbnQgcG9ydF9vayA9ICEoYnJpZGdlICYmIGJyaWRnZS0+dmVuZG9yID09CisJCQlQQ0lfVkVORE9SX0lEX01PQklMSVRZX0VMRUNUUk9OSUNTKTsKKwkvKiBhbGwgKHdpdGggZXhjZXB0aW9ucyBiZWxvdykgYXBhcnQgZnJvbSA2NDMgaGF2ZSBDTlRSTF9DSDAgYml0ICovCisJaW50IGNudHJsX2NoMF9vayA9IChpZC0+ZHJpdmVyX2RhdGEgIT0gMCk7CiAKIAlyYyA9IHBjaW1fZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAocmMpCkBAIC0zNDEsMTEgKzM1NCwxOCBAQAogCiAJaWYgKHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0NNRF82NDYpIHsKIAkJLyogRG9lcyBVRE1BIHdvcmsgPyAqLwotCQlpZiAocGRldi0+cmV2aXNpb24gPiA0KQorCQlpZiAocGRldi0+cmV2aXNpb24gPiA0KSB7CiAJCQlwcGlbMF0gPSAmY21kX2luZm9bMl07CisJCQlwcGlbMV0gPSAmY21kX2luZm9bMl07CisJCX0KIAkJLyogRWFybHkgcmV2IHdpdGggb3RoZXIgcHJvYmxlbXMgPyAqLwotCQllbHNlIGlmIChwZGV2LT5yZXZpc2lvbiA9PSAxKQorCQllbHNlIGlmIChwZGV2LT5yZXZpc2lvbiA9PSAxKSB7CiAJCQlwcGlbMF0gPSAmY21kX2luZm9bM107CisJCQlwcGlbMV0gPSAmY21kX2luZm9bM107CisJCX0KKwkJLyogcmV2cyAxLDIgaGF2ZSBubyBDTlRSTF9DSDAgKi8KKwkJaWYgKHBkZXYtPnJldmlzaW9uIDwgMykKKwkJCWNudHJsX2NoMF9vayA9IDA7CiAJfQogCiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCA2NCk7CkBAIC0zNTQsNiArMzc0LDIwIEBACiAJbXJkbW9kZSB8PSAweDAyOwkvKiBNZW1vcnkgcmVhZCBsaW5lIGVuYWJsZSAqLwogCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBNUkRNT0RFLCBtcmRtb2RlKTsKIAorCS8qIGNoZWNrIGZvciBlbmFibGVkIHBvcnRzICovCisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgQ05UUkwsICZyZWcpOworCWlmICghcG9ydF9vaykKKwkJZGV2X3ByaW50ayhLRVJOX05PVElDRSwgJnBkZXYtPmRldiwgIk1vYmlsaXR5IEJyaWRnZSBkZXRlY3RlZCwgaWdub3JpbmcgQ05UUkwgcG9ydCBlbmFibGUvZGlzYWJsZVxuIik7CisJaWYgKHBvcnRfb2sgJiYgY250cmxfY2gwX29rICYmICEocmVnICYgQ05UUkxfQ0gwKSkgeworCQlkZXZfcHJpbnRrKEtFUk5fTk9USUNFLCAmcGRldi0+ZGV2LCAiUHJpbWFyeSBwb3J0IGlzIGRpc2FibGVkXG4iKTsKKwkJcHBpWzBdID0gJmF0YV9kdW1teV9wb3J0X2luZm87CisJCQorCX0KKwlpZiAocG9ydF9vayAmJiAhKHJlZyAmIENOVFJMX0NIMSkpIHsKKwkJZGV2X3ByaW50ayhLRVJOX05PVElDRSwgJnBkZXYtPmRldiwgIlNlY29uZGFyeSBwb3J0IGlzIGRpc2FibGVkXG4iKTsKKwkJcHBpWzFdID0gJmF0YV9kdW1teV9wb3J0X2luZm87CisJfQorCiAJLyogRm9yY2UgUElPIDAgaGVyZS4uICovCiAKIAkvKiBQUEMgc3BlY2lmaWMgZml4dXAgY29waWVkIGZyb20gb2xkIGRyaXZlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV90cmlmbGV4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX3RyaWZsZXguYwppbmRleCAwM2I2ZDY5Li5iM2UwYzk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3RyaWZsZXguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3RyaWZsZXguYwpAQCAtMjEwLDEzICsyMTAsMzQgQEAKIAl7IH0sCiB9OwogCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHRyaWZsZXhfYXRhX3BjaV9kZXZpY2Vfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IG1lc2cpCit7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCWludCByYyA9IDA7CisKKwlyYyA9IGF0YV9ob3N0X3N1c3BlbmQoaG9zdCwgbWVzZyk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwkvKgorCSAqIFdlIG11c3Qgbm90IGRpc2FibGUgb3IgcG93ZXJkb3duIHRoZSBkZXZpY2UuCisJICogQVBNIGJpb3MgcmVmdXNlcyB0byBzdXNwZW5kIGlmIElERSBpcyBub3QgYWNjZXNzaWJsZS4KKwkgKi8KKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKworCXJldHVybiAwOworfQorCisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHRyaWZsZXhfcGNpX2RyaXZlciA9IHsKIAkubmFtZSAJCT0gRFJWX05BTUUsCiAJLmlkX3RhYmxlCT0gdHJpZmxleCwKIAkucHJvYmUgCQk9IHRyaWZsZXhfaW5pdF9vbmUsCiAJLnJlbW92ZQkJPSBhdGFfcGNpX3JlbW92ZV9vbmUsCiAjaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQJPSBhdGFfcGNpX2RldmljZV9zdXNwZW5kLAorCS5zdXNwZW5kCT0gdHJpZmxleF9hdGFfcGNpX2RldmljZV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gYXRhX3BjaV9kZXZpY2VfcmVzdW1lLAogI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vZW5pLmMgYi9kcml2ZXJzL2F0bS9lbmkuYwppbmRleCBjNDk1ZmFlLi4zMjMwZWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9lbmkuYworKysgYi9kcml2ZXJzL2F0bS9lbmkuYwpAQCAtMTQ2OSwxMCArMTQ2OSw3IEBACiAKIHN0YXRpYyB2b2lkIGJ1Z19pbnQoc3RydWN0IGF0bV9kZXYgKmRldix1bnNpZ25lZCBsb25nIHJlYXNvbikKIHsKLQlzdHJ1Y3QgZW5pX2RldiAqZW5pX2RldjsKLQogCURQUklOVEsoIj5idWdfaW50XG4iKTsKLQllbmlfZGV2ID0gRU5JX0RFVihkZXYpOwogCWlmIChyZWFzb24gJiBNSURfRE1BX0VSUl9BQ0spCiAJCXByaW50ayhLRVJOX0NSSVQgREVWX0xBQkVMICIoaXRmICVkKTogZHJpdmVyIGVycm9yIC0gRE1BICIKIAkJICAgICJlcnJvclxuIixkZXYtPm51bWJlcik7CkBAIC0xOTAwLDcgKzE4OTcsNiBAQAogCiBzdGF0aWMgaW50IGVuaV9vcGVuKHN0cnVjdCBhdG1fdmNjICp2Y2MpCiB7Ci0Jc3RydWN0IGVuaV9kZXYgKmVuaV9kZXY7CiAJc3RydWN0IGVuaV92Y2MgKmVuaV92Y2M7CiAJaW50IGVycm9yOwogCXNob3J0IHZwaSA9IHZjYy0+dnBpOwpAQCAtMTkxMCw3ICsxOTA2LDYgQEAKIAlFVkVOVCgiZW5pX29wZW5cbiIsMCwwKTsKIAlpZiAoIXRlc3RfYml0KEFUTV9WRl9QQVJUSUFMLCZ2Y2MtPmZsYWdzKSkKIAkJdmNjLT5kZXZfZGF0YSA9IE5VTEw7Ci0JZW5pX2RldiA9IEVOSV9ERVYodmNjLT5kZXYpOwogCWlmICh2Y2kgIT0gQVRNX1ZQSV9VTlNQRUMgJiYgdnBpICE9IEFUTV9WQ0lfVU5TUEVDKQogCQlzZXRfYml0KEFUTV9WRl9BRERSLCZ2Y2MtPmZsYWdzKTsKIAlpZiAodmNjLT5xb3MuYWFsICE9IEFUTV9BQUwwICYmIHZjYy0+cW9zLmFhbCAhPSBBVE1fQUFMNSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2hlLmMgYi9kcml2ZXJzL2F0bS9oZS5jCmluZGV4IDZjZjU5YmYuLjlhNTFkZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2hlLmMKKysrIGIvZHJpdmVycy9hdG0vaGUuYwpAQCAtMTgwMSw3ICsxODAxLDcgQEAKIG5leHRfcmJycV9lbnRyeToKIAkJaGVfZGV2LT5yYnJxX2hlYWQgPSAoc3RydWN0IGhlX3JicnEgKikKIAkJCQkoKHVuc2lnbmVkIGxvbmcpIGhlX2Rldi0+cmJycV9iYXNlIHwKLQkJCQkJUkJSUV9NQVNLKCsraGVfZGV2LT5yYnJxX2hlYWQpKTsKKwkJCQkJUkJSUV9NQVNLKGhlX2Rldi0+cmJycV9oZWFkICsgMSkpOwogCiAJfQogCXJlYWRfdW5sb2NrKCZ2Y2Nfc2tsaXN0X2xvY2spOwpAQCAtMTg4NCw3ICsxODg0LDcgQEAKIAkJCXBjaV9wb29sX2ZyZWUoaGVfZGV2LT50cGRfcG9vbCwgdHBkLCBUUERfQUREUih0cGQtPnN0YXR1cykpOwogCQloZV9kZXYtPnRicnFfaGVhZCA9IChzdHJ1Y3QgaGVfdGJycSAqKQogCQkJCSgodW5zaWduZWQgbG9uZykgaGVfZGV2LT50YnJxX2Jhc2UgfAotCQkJCQlUQlJRX01BU0soKytoZV9kZXYtPnRicnFfaGVhZCkpOworCQkJCQlUQlJRX01BU0soaGVfZGV2LT50YnJxX2hlYWQgKyAxKSk7CiAJfQogCiAJaWYgKHVwZGF0ZWQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2lkdDc3MjUyLmMgYi9kcml2ZXJzL2F0bS9pZHQ3NzI1Mi5jCmluZGV4IDA0OGY5OWYuLjFmOGQ3MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2lkdDc3MjUyLmMKKysrIGIvZHJpdmVycy9hdG0vaWR0NzcyNTIuYwpAQCAtMTI2MSwxNCArMTI2MSwxMyBAQAogCQkJCSAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCiAJd2hpbGUgKGhlYWQgIT0gdGFpbCkgewotCQl1bnNpZ25lZCBpbnQgdnBpLCB2Y2ksIHB0aTsKKwkJdW5zaWduZWQgaW50IHZwaSwgdmNpOwogCQl1MzIgaGVhZGVyOwogCiAJCWhlYWRlciA9IGxlMzJfdG9fY3B1KCoodTMyICopICZxdWV1ZS0+ZGF0YVswXSk7CiAKIAkJdnBpID0gKGhlYWRlciAmIEFUTV9IRFJfVlBJX01BU0spID4+IEFUTV9IRFJfVlBJX1NISUZUOwogCQl2Y2kgPSAoaGVhZGVyICYgQVRNX0hEUl9WQ0lfTUFTSykgPj4gQVRNX0hEUl9WQ0lfU0hJRlQ7Ci0JCXB0aSA9IChoZWFkZXIgJiBBVE1fSERSX1BUSV9NQVNLKSA+PiBBVE1fSERSX1BUSV9TSElGVDsKIAogI2lmZGVmIENPTkZJR19BVE1fSURUNzcyNTJfREVCVUcKIAkJaWYgKGRlYnVnICYgREJHX1JBV19DRUxMKSB7CkBAIC0yNzA5LDUzICsyNzA4LDEwIEBACiBzdGF0aWMgdm9pZAogaWR0NzcyNTJfY29sbGVjdF9zdGF0KHN0cnVjdCBpZHQ3NzI1Ml9kZXYgKmNhcmQpCiB7Ci0JdTMyIGNkYywgdnBlYywgaWNjOworCSh2b2lkKSByZWFkbChTQVJfUkVHX0NEQyk7CisJKHZvaWQpIHJlYWRsKFNBUl9SRUdfVlBFQyk7CisJKHZvaWQpIHJlYWRsKFNBUl9SRUdfSUNDKTsKIAotCWNkYyA9IHJlYWRsKFNBUl9SRUdfQ0RDKTsKLQl2cGVjID0gcmVhZGwoU0FSX1JFR19WUEVDKTsKLQlpY2MgPSByZWFkbChTQVJfUkVHX0lDQyk7Ci0KLSNpZmRlZglOT1RERUYKLQlwcmludGsoIiVzOiIsIGNhcmQtPm5hbWUpOwotCi0JaWYgKGNkYyAmIDB4N2YwMDAwKSB7Ci0JCWNoYXIgKnMgPSAiIjsKLQotCQlwcmludGsoIiBbIik7Ci0JCWlmIChjZGMgJiAoMSA8PCAyMikpIHsKLQkJCXByaW50aygiJXNSTSBJRCIsIHMpOwotCQkJcyA9ICIgfCAiOwotCQl9Ci0JCWlmIChjZGMgJiAoMSA8PCAyMSkpIHsKLQkJCXByaW50aygiJXNDT04gVEFCIiwgcyk7Ci0JCQlzID0gIiB8ICI7Ci0JCX0KLQkJaWYgKGNkYyAmICgxIDw8IDIwKSkgewotCQkJcHJpbnRrKCIlc05PIEZCIiwgcyk7Ci0JCQlzID0gIiB8ICI7Ci0JCX0KLQkJaWYgKGNkYyAmICgxIDw8IDE5KSkgewotCQkJcHJpbnRrKCIlc09BTSBDUkMiLCBzKTsKLQkJCXMgPSAiIHwgIjsKLQkJfQotCQlpZiAoY2RjICYgKDEgPDwgMTgpKSB7Ci0JCQlwcmludGsoIiVzUk0gQ1JDIiwgcyk7Ci0JCQlzID0gIiB8ICI7Ci0JCX0KLQkJaWYgKGNkYyAmICgxIDw8IDE3KSkgewotCQkJcHJpbnRrKCIlc1JNIEZJRk8iLCBzKTsKLQkJCXMgPSAiIHwgIjsKLQkJfQotCQlpZiAoY2RjICYgKDEgPDwgMTYpKSB7Ci0JCQlwcmludGsoIiVzUlggRklGTyIsIHMpOwotCQkJcyA9ICIgfCAiOwotCQl9Ci0JCXByaW50aygiXSIpOwotCX0KLQotCXByaW50aygiIENEQyAlMDR4LCBWUEVDICUwNHgsIElDQzogJTA0eFxuIiwKLQkgICAgICAgY2RjICYgMHhmZmZmLCB2cGVjICYgMHhmZmZmLCBpY2MgJiAweGZmZmYpOwotI2VuZGlmCiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vaXBoYXNlLmMgYi9kcml2ZXJzL2F0bS9pcGhhc2UuYwppbmRleCAxYzY3NGE5Li5kZWU0ZjAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9pcGhhc2UuYworKysgYi9kcml2ZXJzL2F0bS9pcGhhc2UuYwpAQCAtNjEzLDcgKzYxMyw2IEBACiAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogICAgaW50IG51bV9kZXNjOwogICAgc3RydWN0IGF0bV92Y2MgKnZjYzsKLSAgIHN0cnVjdCBpYV92Y2MgKmlhdmNjOwogICAgbnVtX2Rlc2MgPSBpYV9hdmFpbF9kZXNjcyhpYWRldik7CiAKICAgIHdoaWxlIChudW1fZGVzYyAmJiAoc2tiID0gc2tiX2RlcXVldWUoJmlhZGV2LT50eF9iYWNrbG9nKSkpIHsKQEAgLTYyNyw3ICs2MjYsNiBAQAogICAgICAgICAgcHJpbnRrKCJGcmVlIHRoZSBTS0Igb24gY2xvc2VkIHZjaSAlZCBcbiIsIHZjYy0+dmNpKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgfQotICAgICAgaWF2Y2MgPSBJTlBIX0lBX1ZDQyh2Y2MpOwogICAgICAgaWYgKGlhX3BrdF90eCAodmNjLCBza2IpKSB7CiAgICAgICAgICBza2JfcXVldWVfaGVhZCgmaWFkZXYtPnR4X2JhY2tsb2csIHNrYik7CiAgICAgICB9CkBAIC04MjMsOCArODIxLDYgQEAKICAgdm9sYXRpbGUgSUFfU1VOSSAqc3VuaTsKICAgdm9sYXRpbGUgaWFfbWIyNV90ICptYjI1OwogICB2b2xhdGlsZSBzdW5pX3BtNzM0NV90ICpzdW5pX3BtNzM0NTsKLSAgdTMyIGludHJfc3RhdHVzOwotICB1X2ludCBmcm1yX2ludHI7CiAKICAgaWYoaWFkZXYtPnBoeV90eXBlICYgRkVfMjVNQklUX1BIWSkgewogICAgICBtYjI1ID0gKGlhX21iMjVfdCopaWFkZXYtPnBoeTsKQEAgLTgzMiwxOCArODI4LDE4IEBACiAgIH0gZWxzZSBpZiAoaWFkZXYtPnBoeV90eXBlICYgRkVfRFMzX1BIWSkgewogICAgICBzdW5pX3BtNzM0NSA9IChzdW5pX3BtNzM0NV90ICopaWFkZXYtPnBoeTsKICAgICAgLyogY2xlYXIgRlJNUiBpbnRlcnJ1cHRzICovCi0gICAgIGZybXJfaW50ciAgID0gc3VuaV9wbTczNDUtPnN1bmlfZHMzX2ZybV9pbnRyX3N0YXQ7IAorICAgICAodm9pZCkgc3VuaV9wbTczNDUtPnN1bmlfZHMzX2ZybV9pbnRyX3N0YXQ7IAogICAgICBpYWRldi0+Y2Fycmllcl9kZXRlY3QgPSAgCiAgICAgICAgICAgIEJvb2xlYW4oIShzdW5pX3BtNzM0NS0+c3VuaV9kczNfZnJtX3N0YXQgJiBTVU5JX0RTM19MT1NWKSk7CiAgIH0gZWxzZSBpZiAoaWFkZXYtPnBoeV90eXBlICYgRkVfRTNfUEhZICkgewogICAgICBzdW5pX3BtNzM0NSA9IChzdW5pX3BtNzM0NV90ICopaWFkZXYtPnBoeTsKLSAgICAgZnJtcl9pbnRyICAgPSBzdW5pX3BtNzM0NS0+c3VuaV9lM19mcm1fbWFpbnRfaW50cl9pbmQ7CisgICAgICh2b2lkKSBzdW5pX3BtNzM0NS0+c3VuaV9lM19mcm1fbWFpbnRfaW50cl9pbmQ7CiAgICAgIGlhZGV2LT5jYXJyaWVyX2RldGVjdCA9CiAgICAgICAgICAgIEJvb2xlYW4oIShzdW5pX3BtNzM0NS0+c3VuaV9lM19mcm1fZnJhbV9pbnRyX2luZF9zdGF0JlNVTklfRTNfTE9TKSk7CiAgIH0KICAgZWxzZSB7IAogICAgICBzdW5pID0gKElBX1NVTkkgKilpYWRldi0+cGh5OwotICAgICBpbnRyX3N0YXR1cyA9IHN1bmktPnN1bmlfcnNvcF9zdGF0dXMgJiAweGZmOworICAgICAodm9pZCkgc3VuaS0+c3VuaV9yc29wX3N0YXR1czsKICAgICAgaWFkZXYtPmNhcnJpZXJfZGV0ZWN0ID0gQm9vbGVhbighKHN1bmktPnN1bmlfcnNvcF9zdGF0dXMgJiBTVU5JX0xPU1YpKTsKICAgfQogICBpZiAoaWFkZXYtPmNhcnJpZXJfZGV0ZWN0KQpAQCAtMjY2MCw3ICsyNjU2LDYgQEAKICAgCiBzdGF0aWMgaW50IGlhX29wZW4oc3RydWN0IGF0bV92Y2MgKnZjYykKIHsgIAotCUlBREVWICppYWRldjsgIAogCXN0cnVjdCBpYV92Y2MgKmlhX3ZjYzsgIAogCWludCBlcnJvcjsgIAogCWlmICghdGVzdF9iaXQoQVRNX1ZGX1BBUlRJQUwsJnZjYy0+ZmxhZ3MpKSAgCkBAIC0yNjY4LDcgKzI2NjMsNiBAQAogCQlJRl9FVkVOVChwcmludGsoImlhOiBub3QgcGFydGlhbGx5IGFsbG9jYXRlZCByZXNvdXJjZXNcbiIpOykgIAogCQl2Y2MtPmRldl9kYXRhID0gTlVMTDsKIAl9ICAKLQlpYWRldiA9IElOUEhfSUFfREVWKHZjYy0+ZGV2KTsgIAogCWlmICh2Y2MtPnZjaSAhPSBBVE1fVlBJX1VOU1BFQyAmJiB2Y2MtPnZwaSAhPSBBVE1fVkNJX1VOU1BFQykgIAogCXsgIAogCQlJRl9FVkVOVChwcmludGsoImlwaGFzZSBvcGVuOiB1bnNwZWMgcGFydFxuIik7KSAgCkBAIC0zMDUyLDExICszMDQ2LDkgQEAKIHN0YXRpYyBpbnQgaWFfc2VuZChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogICAgICAgICBJQURFViAqaWFkZXY7IAotICAgICAgICBzdHJ1Y3QgaWFfdmNjICppYXZjYzsKICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKIAogICAgICAgICBpYWRldiA9IElOUEhfSUFfREVWKHZjYy0+ZGV2KTsKLSAgICAgICAgaWF2Y2MgPSBJTlBIX0lBX1ZDQyh2Y2MpOyAKICAgICAgICAgaWYgKCghc2tiKXx8KHNrYi0+bGVuPihpYWRldi0+dHhfYnVmX3N6LXNpemVvZihzdHJ1Y3QgY3Bjc190cmFpbGVyKSkpKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIXNrYikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL3NvbG9zLXBjaS5jIGIvZHJpdmVycy9hdG0vc29sb3MtcGNpLmMKaW5kZXggY2QwZmY2Ni4uNWQxZDA3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vc29sb3MtcGNpLmMKKysrIGIvZHJpdmVycy9hdG0vc29sb3MtcGNpLmMKQEAgLTUyNyw3ICs1MjcsNiBAQAogewogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CiAJY29uc3QgY2hhciAqZndfbmFtZTsKLQl1aW50MzJfdCBkYXRhMzIgPSAwOwogCWludCBibG9ja3NpemUgPSAwOwogCWludCBudW1ibG9ja3MgPSAwOwogCWludCBvZmZzZXQ7CkBAIC01NzYsNyArNTc1LDcgQEAKIAkKIAlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJDaGFuZ2luZyBGUEdBIHRvIFVwZGF0ZSBtb2RlXG4iKTsKIAlpb3dyaXRlMzIoMSwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBGUEdBX01PREUpOwotCWRhdGEzMiA9IGlvcmVhZDMyKGNhcmQtPmNvbmZpZ19yZWdzICsgRlBHQV9NT0RFKTsgCisJKHZvaWQpIGlvcmVhZDMyKGNhcmQtPmNvbmZpZ19yZWdzICsgRlBHQV9NT0RFKTsgCiAKIAkvKiBTZXQgbW9kZSB0byBDaGlwIEVyYXNlICovCiAJaWYoY2hpcCA9PSAwIHx8IGNoaXAgPT0gMikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuYyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuYwppbmRleCAwYTEzNGE0Li45ZjliMjM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMKKysrIGIvZHJpdmVycy9iYXNlL21lbW9yeS5jCkBAIC0zODksMTUgKzM4OSwxNCBAQAogCQlyZXQgPSBhZGRfbWVtb3J5KG5pZCwgcGh5c19hZGRyLAogCQkJCSBQQUdFU19QRVJfU0VDVElPTiA8PCBQQUdFX1NISUZUKTsKIAkJaWYgKHJldCkKLQkJCWJyZWFrOworCQkJZ290byBvdXQ7CiAKIAkJcGh5c19hZGRyICs9IE1JTl9NRU1PUllfQkxPQ0tfU0laRTsKIAl9CiAKLQlpZiAocmV0KQotCQljb3VudCA9IHJldDsKLQotCXJldHVybiBjb3VudDsKKwlyZXQgPSBjb3VudDsKK291dDoKKwlyZXR1cm4gcmV0OwogfQogc3RhdGljIENMQVNTX0FUVFIocHJvYmUsIFNfSVdVU1IsIE5VTEwsIG1lbW9yeV9wcm9iZV9zdG9yZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmNtYS9LY29uZmlnIGIvZHJpdmVycy9iY21hL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUzNzgxYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYmNtYS9LY29uZmlnCkBAIC0wLDAgKzEsMzMgQEAKK2NvbmZpZyBCQ01BX1BPU1NJQkxFCisJYm9vbAorCWRlcGVuZHMgb24gSEFTX0lPTUVNICYmIEhBU19ETUEKKwlkZWZhdWx0IHkKKworbWVudSAiQnJvYWRjb20gc3BlY2lmaWMgQU1CQSIKKwlkZXBlbmRzIG9uIEJDTUFfUE9TU0lCTEUKKworY29uZmlnIEJDTUEKKwl0cmlzdGF0ZSAiQkNNQSBzdXBwb3J0IgorCWRlcGVuZHMgb24gQkNNQV9QT1NTSUJMRQorCWhlbHAKKwkgIEJ1cyBkcml2ZXIgZm9yIEJyb2FkY29tIHNwZWNpZmljIEFkdmFuY2VkIE1pY3JvY29udHJvbGxlciBCdXMKKwkgIEFyY2hpdGVjdHVyZS4KKworY29uZmlnIEJDTUFfSE9TVF9QQ0lfUE9TU0lCTEUKKwlib29sCisJZGVwZW5kcyBvbiBCQ01BICYmIFBDSSA9IHkKKwlkZWZhdWx0IHkKKworY29uZmlnIEJDTUFfSE9TVF9QQ0kKKwlib29sICJTdXBwb3J0IGZvciBCQ01BIG9uIFBDSS1ob3N0IGJ1cyIKKwlkZXBlbmRzIG9uIEJDTUFfSE9TVF9QQ0lfUE9TU0lCTEUKKworY29uZmlnIEJDTUFfREVCVUcKKwlib29sICJCQ01BIGRlYnVnZ2luZyIKKwlkZXBlbmRzIG9uIEJDTUEKKwloZWxwCisJICBUaGlzIHR1cm5zIG9uIGFkZGl0aW9uYWwgZGVidWdnaW5nIG1lc3NhZ2VzLgorCisJICBJZiB1bnN1cmUsIHNheSBOCisKK2VuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmNtYS9NYWtlZmlsZSBiL2RyaXZlcnMvYmNtYS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDU2MjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9iY21hL01ha2VmaWxlCkBAIC0wLDAgKzEsNyBAQAorYmNtYS15CQkJCQkrPSBtYWluLm8gc2Nhbi5vIGNvcmUubworYmNtYS15CQkJCQkrPSBkcml2ZXJfY2hpcGNvbW1vbi5vIGRyaXZlcl9jaGlwY29tbW9uX3BtdS5vCitiY21hLXkJCQkJCSs9IGRyaXZlcl9wY2kubworYmNtYS0kKENPTkZJR19CQ01BX0hPU1RfUENJKQkJKz0gaG9zdF9wY2kubworb2JqLSQoQ09ORklHX0JDTUEpCQkJKz0gYmNtYS5vCisKK2NjZmxhZ3MtJChDT05GSUdfQkNNQV9ERUJVRykJCTo9IC1EREVCVUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmNtYS9SRUFETUUgYi9kcml2ZXJzL2JjbWEvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZTdjZTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2JjbWEvUkVBRE1FCkBAIC0wLDAgKzEsMTkgQEAKK0Jyb2FkY29tIGludHJvZHVjZWQgbmV3IGJ1cyBhcyByZXBsYWNlbWVudCBmb3Igb2xkZXIgU1NCLiBJdCBpcyBiYXNlZCBvbiBBTUJBLAoraG93ZXZlciBmcm9tIHByb2dyYW1taW5nIHBvaW50IG9mIHZpZXcgdGhlcmUgaXMgbm90aGluZyBBTUJBIHNwZWNpZmljIHdlIHVzZS4KKworU3RhbmRhcmQgQU1CQSBkcml2ZXJzIGFyZSBwbGF0Zm9ybSBzcGVjaWZpYywgaGF2ZSBoYXJkY29kZWQgYWRkcmVzc2VzIGFuZCB1c2UKK0FNQkEgc3RhbmRhcmQgZmllbGRzIGxpa2UgQ0lEIGFuZCBQSUQuCisKK0luIGNhc2Ugb2YgQnJvYWRjb20ncyBjYXJkcyBldmVyeSBkZXZpY2UgY29uc2lzdHMgb2Y6CisxKSBCcm9hZGNvbSBzcGVjaWZpYyBBTUJBIGRldmljZS4gSXQgaXMgcHV0IG9uIEFNQkEgYnVzLCBidXQgY2FuIG5vdCBiZSB0cmVhdGVkCisgICBhcyBzdGFuZGFyZCBBTUJBIGRldmljZS4gUmVhZGluZyBpdCdzIENJRCBvciBQSUQgY2FuIGNhdXNlIG1hY2hpbmUgbG9ja3VwLgorMikgQU1CQSBzdGFuZGFyZCBkZXZpY2VzIGNhbGxlZCBwb3J0cyBvciB3cmFwcGVycy4gVGhleSBoYXZlIENJRHMgKEFNQkFfQ0lEKQorICAgYW5kIFBJRHMgKDB4MTAzQkIzNjkpLCBidXQgd2UgZG8gbm90IHVzZSB0aGF0IGluZm8gZm9yIGFueXRoaW5nLiBPbmUgb2YgdGhhdAorICAgZGV2aWNlcyBpcyB1c2VkIGZvciBtYW5hZ2luZyBCcm9hZGNvbSBzcGVjaWZpYyBjb3JlLgorCitBZGRyZXNzZXMgb2YgQU1CQSBkZXZpY2VzIGFyZSBub3QgaGFyZGNvZGVkIGluIGRyaXZlciBhbmQgaGF2ZSB0byBiZSByZWFkIGZyb20KK0VQUk9NLgorCitJbiB0aGlzIHNpdHVhdGlvbiB3ZSBkZWNpZGVkIHRvIGludHJvZHVjZSBzZXBhcmF0ZWQgYnVzLiBJdCBjYW4gY29udGFpbiB1cCB0bworMTYgZGV2aWNlcyBpZGVudGlmaWVkIGJ5IEJyb2FkY29tIHNwZWNpZmljIGZpZWxkczogbWFudWZhY3R1cmVyLCBpZCwgcmV2aXNpb24KK2FuZCBjbGFzcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmNtYS9UT0RPIGIvZHJpdmVycy9iY21hL1RPRE8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE3YWE5OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYmNtYS9UT0RPCkBAIC0wLDAgKzEsMyBAQAorLSBJbnRlcnJ1cHRzCistIERlZmluZXMgZm9yIFBDSSBjb3JlIGRyaXZlcgorLSBDcmVhdGUga2VybmVsIERvY3VtZW50YXRpb24gKHVzZSBpbmZvIGZyb20gUkVBRE1FKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iY21hL2JjbWFfcHJpdmF0ZS5oIGIvZHJpdmVycy9iY21hL2JjbWFfcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNzJlOWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2JjbWEvYmNtYV9wcml2YXRlLmgKQEAgLTAsMCArMSwyOCBAQAorI2lmbmRlZiBMSU5VWF9CQ01BX1BSSVZBVEVfSF8KKyNkZWZpbmUgTElOVVhfQkNNQV9QUklWQVRFX0hfCisKKyNpZm5kZWYgcHJfZm10CisjZGVmaW5lIHByX2ZtdChmbXQpCQlLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9iY21hL2JjbWEuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjZGVmaW5lIEJDTUFfQ09SRV9TSVpFCQkweDEwMDAKKworc3RydWN0IGJjbWFfYnVzOworCisvKiBtYWluLmMgKi8KK2V4dGVybiBpbnQgYmNtYV9idXNfcmVnaXN0ZXIoc3RydWN0IGJjbWFfYnVzICpidXMpOworZXh0ZXJuIHZvaWQgYmNtYV9idXNfdW5yZWdpc3RlcihzdHJ1Y3QgYmNtYV9idXMgKmJ1cyk7CisKKy8qIHNjYW4uYyAqLworaW50IGJjbWFfYnVzX3NjYW4oc3RydWN0IGJjbWFfYnVzICpidXMpOworCisjaWZkZWYgQ09ORklHX0JDTUFfSE9TVF9QQ0kKKy8qIGhvc3RfcGNpLmMgKi8KK2V4dGVybiBpbnQgX19pbml0IGJjbWFfaG9zdF9wY2lfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIF9fZXhpdCBiY21hX2hvc3RfcGNpX2V4aXQodm9pZCk7CisjZW5kaWYgLyogQ09ORklHX0JDTUFfSE9TVF9QQ0kgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JjbWEvY29yZS5jIGIvZHJpdmVycy9iY21hL2NvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWQzNzlmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9iY21hL2NvcmUuYwpAQCAtMCwwICsxLDUxIEBACisvKgorICogQnJvYWRjb20gc3BlY2lmaWMgQU1CQQorICogQ29yZSBvcHMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR05VL0dQTC4gU2VlIENPUFlJTkcgZm9yIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgImJjbWFfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPGxpbnV4L2JjbWEvYmNtYS5oPgorCitib29sIGJjbWFfY29yZV9pc19lbmFibGVkKHN0cnVjdCBiY21hX2RldmljZSAqY29yZSkKK3sKKwlpZiAoKGJjbWFfYXJlYWQzMihjb3JlLCBCQ01BX0lPQ1RMKSAmIChCQ01BX0lPQ1RMX0NMSyB8IEJDTUFfSU9DVExfRkdDKSkKKwkgICAgIT0gQkNNQV9JT0NUTF9DTEspCisJCXJldHVybiBmYWxzZTsKKwlpZiAoYmNtYV9hcmVhZDMyKGNvcmUsIEJDTUFfUkVTRVRfQ1RMKSAmIEJDTUFfUkVTRVRfQ1RMX1JFU0VUKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHRydWU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChiY21hX2NvcmVfaXNfZW5hYmxlZCk7CisKK3N0YXRpYyB2b2lkIGJjbWFfY29yZV9kaXNhYmxlKHN0cnVjdCBiY21hX2RldmljZSAqY29yZSwgdTMyIGZsYWdzKQoreworCWlmIChiY21hX2FyZWFkMzIoY29yZSwgQkNNQV9SRVNFVF9DVEwpICYgQkNNQV9SRVNFVF9DVExfUkVTRVQpCisJCXJldHVybjsKKworCWJjbWFfYXdyaXRlMzIoY29yZSwgQkNNQV9JT0NUTCwgZmxhZ3MpOworCWJjbWFfYXJlYWQzMihjb3JlLCBCQ01BX0lPQ1RMKTsKKwl1ZGVsYXkoMTApOworCisJYmNtYV9hd3JpdGUzMihjb3JlLCBCQ01BX1JFU0VUX0NUTCwgQkNNQV9SRVNFVF9DVExfUkVTRVQpOworCXVkZWxheSgxKTsKK30KKworaW50IGJjbWFfY29yZV9lbmFibGUoc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlLCB1MzIgZmxhZ3MpCit7CisJYmNtYV9jb3JlX2Rpc2FibGUoY29yZSwgZmxhZ3MpOworCisJYmNtYV9hd3JpdGUzMihjb3JlLCBCQ01BX0lPQ1RMLCAoQkNNQV9JT0NUTF9DTEsgfCBCQ01BX0lPQ1RMX0ZHQyB8IGZsYWdzKSk7CisJYmNtYV9hcmVhZDMyKGNvcmUsIEJDTUFfSU9DVEwpOworCisJYmNtYV9hd3JpdGUzMihjb3JlLCBCQ01BX1JFU0VUX0NUTCwgMCk7CisJdWRlbGF5KDEpOworCisJYmNtYV9hd3JpdGUzMihjb3JlLCBCQ01BX0lPQ1RMLCAoQkNNQV9JT0NUTF9DTEsgfCBmbGFncykpOworCWJjbWFfYXJlYWQzMihjb3JlLCBCQ01BX0lPQ1RMKTsKKwl1ZGVsYXkoMSk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJjbWFfY29yZV9lbmFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iY21hL2RyaXZlcl9jaGlwY29tbW9uLmMgYi9kcml2ZXJzL2JjbWEvZHJpdmVyX2NoaXBjb21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDYxMDIyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9iY21hL2RyaXZlcl9jaGlwY29tbW9uLmMKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIEJyb2FkY29tIHNwZWNpZmljIEFNQkEKKyAqIENoaXBDb21tb24gY29yZSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwNSwgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAyMDA2LCAyMDA3LCBNaWNoYWVsIEJ1ZXNjaCA8bWJAYnUzc2NoLmRlPgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHTlUvR1BMLiBTZWUgQ09QWUlORyBmb3IgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSAiYmNtYV9wcml2YXRlLmgiCisjaW5jbHVkZSA8bGludXgvYmNtYS9iY21hLmg+CisKK3N0YXRpYyBpbmxpbmUgdTMyIGJjbWFfY2Nfd3JpdGUzMl9tYXNrZWQoc3RydWN0IGJjbWFfZHJ2X2NjICpjYywgdTE2IG9mZnNldCwKKwkJCQkJIHUzMiBtYXNrLCB1MzIgdmFsdWUpCit7CisJdmFsdWUgJj0gbWFzazsKKwl2YWx1ZSB8PSBiY21hX2NjX3JlYWQzMihjYywgb2Zmc2V0KSAmIH5tYXNrOworCWJjbWFfY2Nfd3JpdGUzMihjYywgb2Zmc2V0LCB2YWx1ZSk7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3ZvaWQgYmNtYV9jb3JlX2NoaXBjb21tb25faW5pdChzdHJ1Y3QgYmNtYV9kcnZfY2MgKmNjKQoreworCWlmIChjYy0+Y29yZS0+aWQucmV2ID49IDExKQorCQljYy0+c3RhdHVzID0gYmNtYV9jY19yZWFkMzIoY2MsIEJDTUFfQ0NfQ0hJUFNUQVQpOworCWNjLT5jYXBhYmlsaXRpZXMgPSBiY21hX2NjX3JlYWQzMihjYywgQkNNQV9DQ19DQVApOworCWlmIChjYy0+Y29yZS0+aWQucmV2ID49IDM1KQorCQljYy0+Y2FwYWJpbGl0aWVzX2V4dCA9IGJjbWFfY2NfcmVhZDMyKGNjLCBCQ01BX0NDX0NBUF9FWFQpOworCisJaWYgKGNjLT5jb3JlLT5pZC5yZXYgPj0gMjApIHsKKwkJYmNtYV9jY193cml0ZTMyKGNjLCBCQ01BX0NDX0dQSU9QVUxMVVAsIDApOworCQliY21hX2NjX3dyaXRlMzIoY2MsIEJDTUFfQ0NfR1BJT1BVTExET1dOLCAwKTsKKwl9CisKKwlpZiAoY2MtPmNhcGFiaWxpdGllcyAmIEJDTUFfQ0NfQ0FQX1BNVSkKKwkJYmNtYV9wbXVfaW5pdChjYyk7CisJaWYgKGNjLT5jYXBhYmlsaXRpZXMgJiBCQ01BX0NDX0NBUF9QQ1RMKQorCQlwcl9lcnIoIlBvd2VyIGNvbnRyb2wgbm90IGltcGxlbWVudGVkIVxuIik7Cit9CisKKy8qIFNldCBjaGlwIHdhdGNoZG9nIHJlc2V0IHRpbWVyIHRvIGZpcmUgaW4gJ3RpY2tzJyBiYWNrcGxhbmUgY3ljbGVzICovCit2b2lkIGJjbWFfY2hpcGNvX3dhdGNoZG9nX3RpbWVyX3NldChzdHJ1Y3QgYmNtYV9kcnZfY2MgKmNjLCB1MzIgdGlja3MpCit7CisJLyogaW5zdGFudCBOTUkgKi8KKwliY21hX2NjX3dyaXRlMzIoY2MsIEJDTUFfQ0NfV0FUQ0hET0csIHRpY2tzKTsKK30KKwordm9pZCBiY21hX2NoaXBjb19pcnFfbWFzayhzdHJ1Y3QgYmNtYV9kcnZfY2MgKmNjLCB1MzIgbWFzaywgdTMyIHZhbHVlKQoreworCWJjbWFfY2Nfd3JpdGUzMl9tYXNrZWQoY2MsIEJDTUFfQ0NfSVJRTUFTSywgbWFzaywgdmFsdWUpOworfQorCit1MzIgYmNtYV9jaGlwY29faXJxX3N0YXR1cyhzdHJ1Y3QgYmNtYV9kcnZfY2MgKmNjLCB1MzIgbWFzaykKK3sKKwlyZXR1cm4gYmNtYV9jY19yZWFkMzIoY2MsIEJDTUFfQ0NfSVJRU1RBVCkgJiBtYXNrOworfQorCit1MzIgYmNtYV9jaGlwY29fZ3Bpb19pbihzdHJ1Y3QgYmNtYV9kcnZfY2MgKmNjLCB1MzIgbWFzaykKK3sKKwlyZXR1cm4gYmNtYV9jY19yZWFkMzIoY2MsIEJDTUFfQ0NfR1BJT0lOKSAmIG1hc2s7Cit9CisKK3UzMiBiY21hX2NoaXBjb19ncGlvX291dChzdHJ1Y3QgYmNtYV9kcnZfY2MgKmNjLCB1MzIgbWFzaywgdTMyIHZhbHVlKQoreworCXJldHVybiBiY21hX2NjX3dyaXRlMzJfbWFza2VkKGNjLCBCQ01BX0NDX0dQSU9PVVQsIG1hc2ssIHZhbHVlKTsKK30KKwordTMyIGJjbWFfY2hpcGNvX2dwaW9fb3V0ZW4oc3RydWN0IGJjbWFfZHJ2X2NjICpjYywgdTMyIG1hc2ssIHUzMiB2YWx1ZSkKK3sKKwlyZXR1cm4gYmNtYV9jY193cml0ZTMyX21hc2tlZChjYywgQkNNQV9DQ19HUElPT1VURU4sIG1hc2ssIHZhbHVlKTsKK30KKwordTMyIGJjbWFfY2hpcGNvX2dwaW9fY29udHJvbChzdHJ1Y3QgYmNtYV9kcnZfY2MgKmNjLCB1MzIgbWFzaywgdTMyIHZhbHVlKQoreworCXJldHVybiBiY21hX2NjX3dyaXRlMzJfbWFza2VkKGNjLCBCQ01BX0NDX0dQSU9DVEwsIG1hc2ssIHZhbHVlKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJjbWFfY2hpcGNvX2dwaW9fY29udHJvbCk7CisKK3UzMiBiY21hX2NoaXBjb19ncGlvX2ludG1hc2soc3RydWN0IGJjbWFfZHJ2X2NjICpjYywgdTMyIG1hc2ssIHUzMiB2YWx1ZSkKK3sKKwlyZXR1cm4gYmNtYV9jY193cml0ZTMyX21hc2tlZChjYywgQkNNQV9DQ19HUElPSVJRLCBtYXNrLCB2YWx1ZSk7Cit9CisKK3UzMiBiY21hX2NoaXBjb19ncGlvX3BvbGFyaXR5KHN0cnVjdCBiY21hX2Rydl9jYyAqY2MsIHUzMiBtYXNrLCB1MzIgdmFsdWUpCit7CisJcmV0dXJuIGJjbWFfY2Nfd3JpdGUzMl9tYXNrZWQoY2MsIEJDTUFfQ0NfR1BJT1BPTCwgbWFzaywgdmFsdWUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iY21hL2RyaXZlcl9jaGlwY29tbW9uX3BtdS5jIGIvZHJpdmVycy9iY21hL2RyaXZlcl9jaGlwY29tbW9uX3BtdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NDE3N2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2JjbWEvZHJpdmVyX2NoaXBjb21tb25fcG11LmMKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBCcm9hZGNvbSBzcGVjaWZpYyBBTUJBCisgKiBDaGlwQ29tbW9uIFBvd2VyIE1hbmFnZW1lbnQgVW5pdCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSwgTWljaGFlbCBCdWVzY2ggPG1iQGJ1M3NjaC5kZT4KKyAqIENvcHlyaWdodCAyMDA3LCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHTlUvR1BMLiBTZWUgQ09QWUlORyBmb3IgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSAiYmNtYV9wcml2YXRlLmgiCisjaW5jbHVkZSA8bGludXgvYmNtYS9iY21hLmg+CisKK3N0YXRpYyB2b2lkIGJjbWFfY2hpcGNvX2NoaXBjdGxfbWFza3NldChzdHJ1Y3QgYmNtYV9kcnZfY2MgKmNjLAorCQkJCQl1MzIgb2Zmc2V0LCB1MzIgbWFzaywgdTMyIHNldCkKK3sKKwl1MzIgdmFsdWU7CisKKwliY21hX2NjX3JlYWQzMihjYywgQkNNQV9DQ19DSElQQ1RMX0FERFIpOworCWJjbWFfY2Nfd3JpdGUzMihjYywgQkNNQV9DQ19DSElQQ1RMX0FERFIsIG9mZnNldCk7CisJYmNtYV9jY19yZWFkMzIoY2MsIEJDTUFfQ0NfQ0hJUENUTF9BRERSKTsKKwl2YWx1ZSA9IGJjbWFfY2NfcmVhZDMyKGNjLCBCQ01BX0NDX0NISVBDVExfREFUQSk7CisJdmFsdWUgJj0gbWFzazsKKwl2YWx1ZSB8PSBzZXQ7CisJYmNtYV9jY193cml0ZTMyKGNjLCBCQ01BX0NDX0NISVBDVExfREFUQSwgdmFsdWUpOworCWJjbWFfY2NfcmVhZDMyKGNjLCBCQ01BX0NDX0NISVBDVExfREFUQSk7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFfcG11X3BsbF9pbml0KHN0cnVjdCBiY21hX2Rydl9jYyAqY2MpCit7CisJc3RydWN0IGJjbWFfYnVzICpidXMgPSBjYy0+Y29yZS0+YnVzOworCisJc3dpdGNoIChidXMtPmNoaXBpbmZvLmlkKSB7CisJY2FzZSAweDQzMTM6CisJY2FzZSAweDQzMzE6CisJY2FzZSA0MzIyNDoKKwljYXNlIDQzMjI1OgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9lcnIoIlBMTCBpbml0IHVua25vd24gZm9yIGRldmljZSAweCUwNFhcbiIsCisJCQlidXMtPmNoaXBpbmZvLmlkKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFfcG11X3Jlc291cmNlc19pbml0KHN0cnVjdCBiY21hX2Rydl9jYyAqY2MpCit7CisJc3RydWN0IGJjbWFfYnVzICpidXMgPSBjYy0+Y29yZS0+YnVzOworCXUzMiBtaW5fbXNrID0gMCwgbWF4X21zayA9IDA7CisKKwlzd2l0Y2ggKGJ1cy0+Y2hpcGluZm8uaWQpIHsKKwljYXNlIDB4NDMxMzoKKwkJbWluX21zayA9IDB4MjAwRDsKKwkJbWF4X21zayA9IDB4RkZGRjsKKwkJYnJlYWs7CisJY2FzZSA0MzIyNDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfZXJyKCJQTVUgcmVzb3VyY2UgY29uZmlnIHVua25vd24gZm9yIGRldmljZSAweCUwNFhcbiIsCisJCQlidXMtPmNoaXBpbmZvLmlkKTsKKwl9CisKKwkvKiBTZXQgdGhlIHJlc291cmNlIG1hc2tzLiAqLworCWlmIChtaW5fbXNrKQorCQliY21hX2NjX3dyaXRlMzIoY2MsIEJDTUFfQ0NfUE1VX01JTlJFU19NU0ssIG1pbl9tc2spOworCWlmIChtYXhfbXNrKQorCQliY21hX2NjX3dyaXRlMzIoY2MsIEJDTUFfQ0NfUE1VX01BWFJFU19NU0ssIG1heF9tc2spOworfQorCit2b2lkIGJjbWFfcG11X3N3cmVnX2luaXQoc3RydWN0IGJjbWFfZHJ2X2NjICpjYykKK3sKKwlzdHJ1Y3QgYmNtYV9idXMgKmJ1cyA9IGNjLT5jb3JlLT5idXM7CisKKwlzd2l0Y2ggKGJ1cy0+Y2hpcGluZm8uaWQpIHsKKwljYXNlIDB4NDMxMzoKKwljYXNlIDB4NDMzMToKKwljYXNlIDQzMjI0OgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9lcnIoIlBNVSBzd2l0Y2gvcmVndWxhdG9ycyBpbml0IHVua25vd24gZm9yIGRldmljZSAiCisJCQkiMHglMDRYXG4iLCBidXMtPmNoaXBpbmZvLmlkKTsKKwl9Cit9CisKK3ZvaWQgYmNtYV9wbXVfd29ya2Fyb3VuZHMoc3RydWN0IGJjbWFfZHJ2X2NjICpjYykKK3sKKwlzdHJ1Y3QgYmNtYV9idXMgKmJ1cyA9IGNjLT5jb3JlLT5idXM7CisKKwlzd2l0Y2ggKGJ1cy0+Y2hpcGluZm8uaWQpIHsKKwljYXNlIDB4NDMxMzoKKwkJYmNtYV9jaGlwY29fY2hpcGN0bF9tYXNrc2V0KGNjLCAwLCB+MCwgMHg3KTsKKwkJYnJlYWs7CisJY2FzZSAweDQzMzE6CisJCXByX2VycigiRW5hYmxpbmcgRXh0IFBBIGxpbmVzIG5vdCBpbXBsZW1lbnRlZFxuIik7CisJCWJyZWFrOworCWNhc2UgNDMyMjQ6CisJCWlmIChidXMtPmNoaXBpbmZvLnJldiA9PSAwKSB7CisJCQlwcl9lcnIoIldvcmthcm91bmRzIGZvciA0MzIyNCByZXYgMCBub3QgZnVsbHkgIgorCQkJCSJpbXBsZW1lbnRlZFxuIik7CisJCQliY21hX2NoaXBjb19jaGlwY3RsX21hc2tzZXQoY2MsIDAsIH4wLCAweEYwKTsKKwkJfSBlbHNlIHsKKwkJCWJjbWFfY2hpcGNvX2NoaXBjdGxfbWFza3NldChjYywgMCwgfjAsIDB4RjApOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2VycigiV29ya2Fyb3VuZHMgdW5rbm93biBmb3IgZGV2aWNlIDB4JTA0WFxuIiwKKwkJCWJ1cy0+Y2hpcGluZm8uaWQpOworCX0KK30KKwordm9pZCBiY21hX3BtdV9pbml0KHN0cnVjdCBiY21hX2Rydl9jYyAqY2MpCit7CisJdTMyIHBtdWNhcDsKKworCXBtdWNhcCA9IGJjbWFfY2NfcmVhZDMyKGNjLCBCQ01BX0NDX1BNVV9DQVApOworCWNjLT5wbXUucmV2ID0gKHBtdWNhcCAmIEJDTUFfQ0NfUE1VX0NBUF9SRVZJU0lPTik7CisKKwlwcl9kZWJ1ZygiRm91bmQgcmV2ICV1IFBNVSAoY2FwYWJpbGl0aWVzIDB4JTA4WClcbiIsIGNjLT5wbXUucmV2LAorCQkgcG11Y2FwKTsKKworCWlmIChjYy0+cG11LnJldiA9PSAxKQorCQliY21hX2NjX21hc2szMihjYywgQkNNQV9DQ19QTVVfQ1RMLAorCQkJICAgICAgfkJDTUFfQ0NfUE1VX0NUTF9OT0lMUE9OVyk7CisJZWxzZQorCQliY21hX2NjX3NldDMyKGNjLCBCQ01BX0NDX1BNVV9DVEwsCisJCQkgICAgIEJDTUFfQ0NfUE1VX0NUTF9OT0lMUE9OVyk7CisKKwlpZiAoY2MtPmNvcmUtPmlkLmlkID09IDB4NDMyOSAmJiBjYy0+Y29yZS0+aWQucmV2ID09IDIpCisJCXByX2VycigiRml4IGZvciA0MzI5YjAgYmFkIExQT00gc3RhdGUgbm90IGltcGxlbWVudGVkIVxuIik7CisKKwliY21hX3BtdV9wbGxfaW5pdChjYyk7CisJYmNtYV9wbXVfcmVzb3VyY2VzX2luaXQoY2MpOworCWJjbWFfcG11X3N3cmVnX2luaXQoY2MpOworCWJjbWFfcG11X3dvcmthcm91bmRzKGNjKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmNtYS9kcml2ZXJfcGNpLmMgYi9kcml2ZXJzL2JjbWEvZHJpdmVyX3BjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NTdlNGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2JjbWEvZHJpdmVyX3BjaS5jCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogQnJvYWRjb20gc3BlY2lmaWMgQU1CQQorICogUENJIENvcmUKKyAqCisgKiBDb3B5cmlnaHQgMjAwNSwgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAyMDA2LCAyMDA3LCBNaWNoYWVsIEJ1ZXNjaCA8bWJAYnUzc2NoLmRlPgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHTlUvR1BMLiBTZWUgQ09QWUlORyBmb3IgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSAiYmNtYV9wcml2YXRlLmgiCisjaW5jbHVkZSA8bGludXgvYmNtYS9iY21hLmg+CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUi9XIG9wcy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHUzMiBiY21hX3BjaWVfcmVhZChzdHJ1Y3QgYmNtYV9kcnZfcGNpICpwYywgdTMyIGFkZHJlc3MpCit7CisJcGNpY29yZV93cml0ZTMyKHBjLCAweDEzMCwgYWRkcmVzcyk7CisJcGNpY29yZV9yZWFkMzIocGMsIDB4MTMwKTsKKwlyZXR1cm4gcGNpY29yZV9yZWFkMzIocGMsIDB4MTM0KTsKK30KKworI2lmIDAKK3N0YXRpYyB2b2lkIGJjbWFfcGNpZV93cml0ZShzdHJ1Y3QgYmNtYV9kcnZfcGNpICpwYywgdTMyIGFkZHJlc3MsIHUzMiBkYXRhKQoreworCXBjaWNvcmVfd3JpdGUzMihwYywgMHgxMzAsIGFkZHJlc3MpOworCXBjaWNvcmVfcmVhZDMyKHBjLCAweDEzMCk7CisJcGNpY29yZV93cml0ZTMyKHBjLCAweDEzNCwgZGF0YSk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgYmNtYV9wY2llX21kaW9fc2V0X3BoeShzdHJ1Y3QgYmNtYV9kcnZfcGNpICpwYywgdTggcGh5KQoreworCWNvbnN0IHUxNiBtZGlvX2NvbnRyb2wgPSAweDEyODsKKwljb25zdCB1MTYgbWRpb19kYXRhID0gMHgxMkM7CisJdTMyIHY7CisJaW50IGk7CisKKwl2ID0gKDEgPDwgMzApOyAvKiBTdGFydCBvZiBUcmFuc2FjdGlvbiAqLworCXYgfD0gKDEgPDwgMjgpOyAvKiBXcml0ZSBUcmFuc2FjdGlvbiAqLworCXYgfD0gKDEgPDwgMTcpOyAvKiBUdXJuYXJvdW5kICovCisJdiB8PSAoMHgxRiA8PCAxOCk7CisJdiB8PSAocGh5IDw8IDQpOworCXBjaWNvcmVfd3JpdGUzMihwYywgbWRpb19kYXRhLCB2KTsKKworCXVkZWxheSgxMCk7CisJZm9yIChpID0gMDsgaSA8IDIwMDsgaSsrKSB7CisJCXYgPSBwY2ljb3JlX3JlYWQzMihwYywgbWRpb19jb250cm9sKTsKKwkJaWYgKHYgJiAweDEwMCAvKiBUcmFucyBjb21wbGV0ZSAqLykKKwkJCWJyZWFrOworCQltc2xlZXAoMSk7CisJfQorfQorCitzdGF0aWMgdTE2IGJjbWFfcGNpZV9tZGlvX3JlYWQoc3RydWN0IGJjbWFfZHJ2X3BjaSAqcGMsIHU4IGRldmljZSwgdTggYWRkcmVzcykKK3sKKwljb25zdCB1MTYgbWRpb19jb250cm9sID0gMHgxMjg7CisJY29uc3QgdTE2IG1kaW9fZGF0YSA9IDB4MTJDOworCWludCBtYXhfcmV0cmllcyA9IDEwOworCXUxNiByZXQgPSAwOworCXUzMiB2OworCWludCBpOworCisJdiA9IDB4ODA7IC8qIEVuYWJsZSBQcmVhbWJsZSBTZXF1ZW5jZSAqLworCXYgfD0gMHgyOyAvKiBNRElPIENsb2NrIERpdmlzb3IgKi8KKwlwY2ljb3JlX3dyaXRlMzIocGMsIG1kaW9fY29udHJvbCwgdik7CisKKwlpZiAocGMtPmNvcmUtPmlkLnJldiA+PSAxMCkgeworCQltYXhfcmV0cmllcyA9IDIwMDsKKwkJYmNtYV9wY2llX21kaW9fc2V0X3BoeShwYywgZGV2aWNlKTsKKwl9CisKKwl2ID0gKDEgPDwgMzApOyAvKiBTdGFydCBvZiBUcmFuc2FjdGlvbiAqLworCXYgfD0gKDEgPDwgMjkpOyAvKiBSZWFkIFRyYW5zYWN0aW9uICovCisJdiB8PSAoMSA8PCAxNyk7IC8qIFR1cm5hcm91bmQgKi8KKwlpZiAocGMtPmNvcmUtPmlkLnJldiA8IDEwKQorCQl2IHw9ICh1MzIpZGV2aWNlIDw8IDIyOworCXYgfD0gKHUzMilhZGRyZXNzIDw8IDE4OworCXBjaWNvcmVfd3JpdGUzMihwYywgbWRpb19kYXRhLCB2KTsKKwkvKiBXYWl0IGZvciB0aGUgZGV2aWNlIHRvIGNvbXBsZXRlIHRoZSB0cmFuc2FjdGlvbiAqLworCXVkZWxheSgxMCk7CisJZm9yIChpID0gMDsgaSA8IG1heF9yZXRyaWVzOyBpKyspIHsKKwkJdiA9IHBjaWNvcmVfcmVhZDMyKHBjLCBtZGlvX2NvbnRyb2wpOworCQlpZiAodiAmIDB4MTAwIC8qIFRyYW5zIGNvbXBsZXRlICovKSB7CisJCQl1ZGVsYXkoMTApOworCQkJcmV0ID0gcGNpY29yZV9yZWFkMzIocGMsIG1kaW9fZGF0YSk7CisJCQlicmVhazsKKwkJfQorCQltc2xlZXAoMSk7CisJfQorCXBjaWNvcmVfd3JpdGUzMihwYywgbWRpb19jb250cm9sLCAwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBiY21hX3BjaWVfbWRpb193cml0ZShzdHJ1Y3QgYmNtYV9kcnZfcGNpICpwYywgdTggZGV2aWNlLAorCQkJCXU4IGFkZHJlc3MsIHUxNiBkYXRhKQoreworCWNvbnN0IHUxNiBtZGlvX2NvbnRyb2wgPSAweDEyODsKKwljb25zdCB1MTYgbWRpb19kYXRhID0gMHgxMkM7CisJaW50IG1heF9yZXRyaWVzID0gMTA7CisJdTMyIHY7CisJaW50IGk7CisKKwl2ID0gMHg4MDsgLyogRW5hYmxlIFByZWFtYmxlIFNlcXVlbmNlICovCisJdiB8PSAweDI7IC8qIE1ESU8gQ2xvY2sgRGl2aXNvciAqLworCXBjaWNvcmVfd3JpdGUzMihwYywgbWRpb19jb250cm9sLCB2KTsKKworCWlmIChwYy0+Y29yZS0+aWQucmV2ID49IDEwKSB7CisJCW1heF9yZXRyaWVzID0gMjAwOworCQliY21hX3BjaWVfbWRpb19zZXRfcGh5KHBjLCBkZXZpY2UpOworCX0KKworCXYgPSAoMSA8PCAzMCk7IC8qIFN0YXJ0IG9mIFRyYW5zYWN0aW9uICovCisJdiB8PSAoMSA8PCAyOCk7IC8qIFdyaXRlIFRyYW5zYWN0aW9uICovCisJdiB8PSAoMSA8PCAxNyk7IC8qIFR1cm5hcm91bmQgKi8KKwlpZiAocGMtPmNvcmUtPmlkLnJldiA8IDEwKQorCQl2IHw9ICh1MzIpZGV2aWNlIDw8IDIyOworCXYgfD0gKHUzMilhZGRyZXNzIDw8IDE4OworCXYgfD0gZGF0YTsKKwlwY2ljb3JlX3dyaXRlMzIocGMsIG1kaW9fZGF0YSwgdik7CisJLyogV2FpdCBmb3IgdGhlIGRldmljZSB0byBjb21wbGV0ZSB0aGUgdHJhbnNhY3Rpb24gKi8KKwl1ZGVsYXkoMTApOworCWZvciAoaSA9IDA7IGkgPCBtYXhfcmV0cmllczsgaSsrKSB7CisJCXYgPSBwY2ljb3JlX3JlYWQzMihwYywgbWRpb19jb250cm9sKTsKKwkJaWYgKHYgJiAweDEwMCAvKiBUcmFucyBjb21wbGV0ZSAqLykKKwkJCWJyZWFrOworCQltc2xlZXAoMSk7CisJfQorCXBjaWNvcmVfd3JpdGUzMihwYywgbWRpb19jb250cm9sLCAwKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBXb3JrYXJvdW5kcy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHU4IGJjbWFfcGNpY29yZV9wb2xhcml0eV93b3JrYXJvdW5kKHN0cnVjdCBiY21hX2Rydl9wY2kgKnBjKQoreworCXJldHVybiAoYmNtYV9wY2llX3JlYWQocGMsIDB4MjA0KSAmIDB4MTApID8gMHhDMCA6IDB4ODA7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFfcGNpY29yZV9zZXJkZXNfd29ya2Fyb3VuZChzdHJ1Y3QgYmNtYV9kcnZfcGNpICpwYykKK3sKKwljb25zdCB1OCBzZXJkZXNfcGxsX2RldmljZSA9IDB4MUQ7CisJY29uc3QgdTggc2VyZGVzX3J4X2RldmljZSA9IDB4MUY7CisJdTE2IHRtcDsKKworCWJjbWFfcGNpZV9tZGlvX3dyaXRlKHBjLCBzZXJkZXNfcnhfZGV2aWNlLCAxIC8qIENvbnRyb2wgKi8sCisJCQkgICAgICBiY21hX3BjaWNvcmVfcG9sYXJpdHlfd29ya2Fyb3VuZChwYykpOworCXRtcCA9IGJjbWFfcGNpZV9tZGlvX3JlYWQocGMsIHNlcmRlc19wbGxfZGV2aWNlLCAxIC8qIENvbnRyb2wgKi8pOworCWlmICh0bXAgJiAweDQwMDApCisJCWJjbWFfcGNpZV9tZGlvX3dyaXRlKHBjLCBzZXJkZXNfcGxsX2RldmljZSwgMSwgdG1wICYgfjB4NDAwMCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSW5pdC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZCBiY21hX2NvcmVfcGNpX2luaXQoc3RydWN0IGJjbWFfZHJ2X3BjaSAqcGMpCit7CisJYmNtYV9wY2ljb3JlX3NlcmRlc193b3JrYXJvdW5kKHBjKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmNtYS9ob3N0X3BjaS5jIGIvZHJpdmVycy9iY21hL2hvc3RfcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlkZDM2ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYmNtYS9ob3N0X3BjaS5jCkBAIC0wLDAgKzEsMTk2IEBACisvKgorICogQnJvYWRjb20gc3BlY2lmaWMgQU1CQQorICogUENJIEhvc3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR05VL0dQTC4gU2VlIENPUFlJTkcgZm9yIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgImJjbWFfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPGxpbnV4L2JjbWEvYmNtYS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorCitzdGF0aWMgdm9pZCBiY21hX2hvc3RfcGNpX3N3aXRjaF9jb3JlKHN0cnVjdCBiY21hX2RldmljZSAqY29yZSkKK3sKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGNvcmUtPmJ1cy0+aG9zdF9wY2ksIEJDTUFfUENJX0JBUjBfV0lOLAorCQkJICAgICAgIGNvcmUtPmFkZHIpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoY29yZS0+YnVzLT5ob3N0X3BjaSwgQkNNQV9QQ0lfQkFSMF9XSU4yLAorCQkJICAgICAgIGNvcmUtPndyYXApOworCWNvcmUtPmJ1cy0+bWFwcGVkX2NvcmUgPSBjb3JlOworCXByX2RlYnVnKCJTd2l0Y2hlZCB0byBjb3JlOiAweCVYXG4iLCBjb3JlLT5pZC5pZCk7Cit9CisKK3N0YXRpYyB1OCBiY21hX2hvc3RfcGNpX3JlYWQ4KHN0cnVjdCBiY21hX2RldmljZSAqY29yZSwgdTE2IG9mZnNldCkKK3sKKwlpZiAoY29yZS0+YnVzLT5tYXBwZWRfY29yZSAhPSBjb3JlKQorCQliY21hX2hvc3RfcGNpX3N3aXRjaF9jb3JlKGNvcmUpOworCXJldHVybiBpb3JlYWQ4KGNvcmUtPmJ1cy0+bW1pbyArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB1MTYgYmNtYV9ob3N0X3BjaV9yZWFkMTYoc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlLCB1MTYgb2Zmc2V0KQoreworCWlmIChjb3JlLT5idXMtPm1hcHBlZF9jb3JlICE9IGNvcmUpCisJCWJjbWFfaG9zdF9wY2lfc3dpdGNoX2NvcmUoY29yZSk7CisJcmV0dXJuIGlvcmVhZDE2KGNvcmUtPmJ1cy0+bW1pbyArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB1MzIgYmNtYV9ob3N0X3BjaV9yZWFkMzIoc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlLCB1MTYgb2Zmc2V0KQoreworCWlmIChjb3JlLT5idXMtPm1hcHBlZF9jb3JlICE9IGNvcmUpCisJCWJjbWFfaG9zdF9wY2lfc3dpdGNoX2NvcmUoY29yZSk7CisJcmV0dXJuIGlvcmVhZDMyKGNvcmUtPmJ1cy0+bW1pbyArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFfaG9zdF9wY2lfd3JpdGU4KHN0cnVjdCBiY21hX2RldmljZSAqY29yZSwgdTE2IG9mZnNldCwKKwkJCQkgdTggdmFsdWUpCit7CisJaWYgKGNvcmUtPmJ1cy0+bWFwcGVkX2NvcmUgIT0gY29yZSkKKwkJYmNtYV9ob3N0X3BjaV9zd2l0Y2hfY29yZShjb3JlKTsKKwlpb3dyaXRlOCh2YWx1ZSwgY29yZS0+YnVzLT5tbWlvICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgYmNtYV9ob3N0X3BjaV93cml0ZTE2KHN0cnVjdCBiY21hX2RldmljZSAqY29yZSwgdTE2IG9mZnNldCwKKwkJCQkgdTE2IHZhbHVlKQoreworCWlmIChjb3JlLT5idXMtPm1hcHBlZF9jb3JlICE9IGNvcmUpCisJCWJjbWFfaG9zdF9wY2lfc3dpdGNoX2NvcmUoY29yZSk7CisJaW93cml0ZTE2KHZhbHVlLCBjb3JlLT5idXMtPm1taW8gKyBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBiY21hX2hvc3RfcGNpX3dyaXRlMzIoc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlLCB1MTYgb2Zmc2V0LAorCQkJCSB1MzIgdmFsdWUpCit7CisJaWYgKGNvcmUtPmJ1cy0+bWFwcGVkX2NvcmUgIT0gY29yZSkKKwkJYmNtYV9ob3N0X3BjaV9zd2l0Y2hfY29yZShjb3JlKTsKKwlpb3dyaXRlMzIodmFsdWUsIGNvcmUtPmJ1cy0+bW1pbyArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB1MzIgYmNtYV9ob3N0X3BjaV9hcmVhZDMyKHN0cnVjdCBiY21hX2RldmljZSAqY29yZSwgdTE2IG9mZnNldCkKK3sKKwlpZiAoY29yZS0+YnVzLT5tYXBwZWRfY29yZSAhPSBjb3JlKQorCQliY21hX2hvc3RfcGNpX3N3aXRjaF9jb3JlKGNvcmUpOworCXJldHVybiBpb3JlYWQzMihjb3JlLT5idXMtPm1taW8gKyAoMSAqIEJDTUFfQ09SRV9TSVpFKSArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFfaG9zdF9wY2lfYXdyaXRlMzIoc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlLCB1MTYgb2Zmc2V0LAorCQkJCSAgdTMyIHZhbHVlKQoreworCWlmIChjb3JlLT5idXMtPm1hcHBlZF9jb3JlICE9IGNvcmUpCisJCWJjbWFfaG9zdF9wY2lfc3dpdGNoX2NvcmUoY29yZSk7CisJaW93cml0ZTMyKHZhbHVlLCBjb3JlLT5idXMtPm1taW8gKyAoMSAqIEJDTUFfQ09SRV9TSVpFKSArIG9mZnNldCk7Cit9CisKK2NvbnN0IHN0cnVjdCBiY21hX2hvc3Rfb3BzIGJjbWFfaG9zdF9wY2lfb3BzID0geworCS5yZWFkOAkJPSBiY21hX2hvc3RfcGNpX3JlYWQ4LAorCS5yZWFkMTYJCT0gYmNtYV9ob3N0X3BjaV9yZWFkMTYsCisJLnJlYWQzMgkJPSBiY21hX2hvc3RfcGNpX3JlYWQzMiwKKwkud3JpdGU4CQk9IGJjbWFfaG9zdF9wY2lfd3JpdGU4LAorCS53cml0ZTE2CT0gYmNtYV9ob3N0X3BjaV93cml0ZTE2LAorCS53cml0ZTMyCT0gYmNtYV9ob3N0X3BjaV93cml0ZTMyLAorCS5hcmVhZDMyCT0gYmNtYV9ob3N0X3BjaV9hcmVhZDMyLAorCS5hd3JpdGUzMgk9IGJjbWFfaG9zdF9wY2lfYXdyaXRlMzIsCit9OworCitzdGF0aWMgaW50IGJjbWFfaG9zdF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCSAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBiY21hX2J1cyAqYnVzOworCWludCBlcnIgPSAtRU5PTUVNOworCWNvbnN0IGNoYXIgKm5hbWU7CisJdTMyIHZhbDsKKworCS8qIEFsbG9jICovCisJYnVzID0ga3phbGxvYyhzaXplb2YoKmJ1cyksIEdGUF9LRVJORUwpOworCWlmICghYnVzKQorCQlnb3RvIG91dDsKKworCS8qIEJhc2ljIFBDSSBjb25maWd1cmF0aW9uICovCisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9rZnJlZV9idXM7CisKKwluYW1lID0gZGV2X25hbWUoJmRldi0+ZGV2KTsKKwlpZiAoZGV2LT5kcml2ZXIgJiYgZGV2LT5kcml2ZXItPm5hbWUpCisJCW5hbWUgPSBkZXYtPmRyaXZlci0+bmFtZTsKKwllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKGRldiwgbmFtZSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfcGNpX2Rpc2FibGU7CisJcGNpX3NldF9tYXN0ZXIoZGV2KTsKKworCS8qIERpc2FibGUgdGhlIFJFVFJZX1RJTUVPVVQgcmVnaXN0ZXIgKDB4NDEpIHRvIGtlZXAKKwkgKiBQQ0kgVHggcmV0cmllcyBmcm9tIGludGVyZmVyaW5nIHdpdGggQzMgQ1BVIHN0YXRlICovCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHg0MCwgJnZhbCk7CisJaWYgKCh2YWwgJiAweDAwMDBmZjAwKSAhPSAwKQorCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHg0MCwgdmFsICYgMHhmZmZmMDBmZik7CisKKwkvKiBTU0IgbmVlZGVkIGFkZGl0aW9uYWwgcG93ZXJpbmcgdXAsIGRvIHdlIGhhdmUgYW55IEFNQkEgUENJIGNhcmRzPyAqLworCWlmICghcGNpX2lzX3BjaWUoZGV2KSkKKwkJcHJfZXJyKCJQQ0kgY2FyZCBkZXRlY3RlZCwgcmVwb3J0IHByb2JsZW1zLlxuIik7CisKKwkvKiBNYXAgTU1JTyAqLworCWVyciA9IC1FTk9NRU07CisJYnVzLT5tbWlvID0gcGNpX2lvbWFwKGRldiwgMCwgfjBVTCk7CisJaWYgKCFidXMtPm1taW8pCisJCWdvdG8gZXJyX3BjaV9yZWxlYXNlX3JlZ2lvbnM7CisKKwkvKiBIb3N0IHNwZWNpZmljICovCisJYnVzLT5ob3N0X3BjaSA9IGRldjsKKwlidXMtPmhvc3R0eXBlID0gQkNNQV9IT1NUVFlQRV9QQ0k7CisJYnVzLT5vcHMgPSAmYmNtYV9ob3N0X3BjaV9vcHM7CisKKwkvKiBSZWdpc3RlciAqLworCWVyciA9IGJjbWFfYnVzX3JlZ2lzdGVyKGJ1cyk7CisJaWYgKGVycikKKwkJZ290byBlcnJfcGNpX3VubWFwX21taW87CisKKwlwY2lfc2V0X2RydmRhdGEoZGV2LCBidXMpOworCitvdXQ6CisJcmV0dXJuIGVycjsKKworZXJyX3BjaV91bm1hcF9tbWlvOgorCXBjaV9pb3VubWFwKGRldiwgYnVzLT5tbWlvKTsKK2Vycl9wY2lfcmVsZWFzZV9yZWdpb25zOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKK2Vycl9wY2lfZGlzYWJsZToKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKK2Vycl9rZnJlZV9idXM6CisJa2ZyZWUoYnVzKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBiY21hX2hvc3RfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBiY21hX2J1cyAqYnVzID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisKKwliY21hX2J1c191bnJlZ2lzdGVyKGJ1cyk7CisJcGNpX2lvdW5tYXAoZGV2LCBidXMtPm1taW8pOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKKwlrZnJlZShidXMpOworCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworfQorCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoYmNtYV9wY2lfYnJpZGdlX3RibCkgPSB7CisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMzMSkgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzUzKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQ3MjcpIH0sCisJeyAwLCB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBiY21hX3BjaV9icmlkZ2VfdGJsKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGJjbWFfcGNpX2JyaWRnZV9kcml2ZXIgPSB7CisJLm5hbWUgPSAiYmNtYS1wY2ktYnJpZGdlIiwKKwkuaWRfdGFibGUgPSBiY21hX3BjaV9icmlkZ2VfdGJsLAorCS5wcm9iZSA9IGJjbWFfaG9zdF9wY2lfcHJvYmUsCisJLnJlbW92ZSA9IGJjbWFfaG9zdF9wY2lfcmVtb3ZlLAorfTsKKworaW50IF9faW5pdCBiY21hX2hvc3RfcGNpX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYmNtYV9wY2lfYnJpZGdlX2RyaXZlcik7Cit9CisKK3ZvaWQgX19leGl0IGJjbWFfaG9zdF9wY2lfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYmNtYV9wY2lfYnJpZGdlX2RyaXZlcik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JjbWEvbWFpbi5jIGIvZHJpdmVycy9iY21hL21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTUyMzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9iY21hL21haW4uYwpAQCAtMCwwICsxLDI0NyBAQAorLyoKKyAqIEJyb2FkY29tIHNwZWNpZmljIEFNQkEKKyAqIEJ1cyBzdWJzeXN0ZW0KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR05VL0dQTC4gU2VlIENPUFlJTkcgZm9yIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgImJjbWFfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPGxpbnV4L2JjbWEvYmNtYS5oPgorCitNT0RVTEVfREVTQ1JJUFRJT04oIkJyb2FkY29tJ3Mgc3BlY2lmaWMgQU1CQSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGludCBiY21hX2J1c19tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpOworc3RhdGljIGludCBiY21hX2RldmljZV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworc3RhdGljIGludCBiY21hX2RldmljZV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KTsKKworc3RhdGljIHNzaXplX3QgbWFudWZfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGJjbWFfZGV2aWNlLCBkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTAzWFxuIiwgY29yZS0+aWQubWFudWYpOworfQorc3RhdGljIHNzaXplX3QgaWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGJjbWFfZGV2aWNlLCBkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTAzWFxuIiwgY29yZS0+aWQuaWQpOworfQorc3RhdGljIHNzaXplX3QgcmV2X3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBiY21hX2RldmljZSAqY29yZSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBiY21hX2RldmljZSwgZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwMlhcbiIsIGNvcmUtPmlkLnJldik7Cit9CitzdGF0aWMgc3NpemVfdCBjbGFzc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmUgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgYmNtYV9kZXZpY2UsIGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglWFxuIiwgY29yZS0+aWQuY2xhc3MpOworfQorc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGJjbWFfZGV2aWNlX2F0dHJzW10gPSB7CisJX19BVFRSX1JPKG1hbnVmKSwKKwlfX0FUVFJfUk8oaWQpLAorCV9fQVRUUl9STyhyZXYpLAorCV9fQVRUUl9STyhjbGFzcyksCisJX19BVFRSX05VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGJ1c190eXBlIGJjbWFfYnVzX3R5cGUgPSB7CisJLm5hbWUJCT0gImJjbWEiLAorCS5tYXRjaAkJPSBiY21hX2J1c19tYXRjaCwKKwkucHJvYmUJCT0gYmNtYV9kZXZpY2VfcHJvYmUsCisJLnJlbW92ZQkJPSBiY21hX2RldmljZV9yZW1vdmUsCisJLmRldl9hdHRycwk9IGJjbWFfZGV2aWNlX2F0dHJzLAorfTsKKworc3RhdGljIHN0cnVjdCBiY21hX2RldmljZSAqYmNtYV9maW5kX2NvcmUoc3RydWN0IGJjbWFfYnVzICpidXMsIHUxNiBjb3JlaWQpCit7CisJc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb3JlLCAmYnVzLT5jb3JlcywgbGlzdCkgeworCQlpZiAoY29yZS0+aWQuaWQgPT0gY29yZWlkKQorCQkJcmV0dXJuIGNvcmU7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBiY21hX3JlbGVhc2VfY29yZV9kZXYoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBiY21hX2RldmljZSAqY29yZSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBiY21hX2RldmljZSwgZGV2KTsKKwlrZnJlZShjb3JlKTsKK30KKworc3RhdGljIGludCBiY21hX3JlZ2lzdGVyX2NvcmVzKHN0cnVjdCBiY21hX2J1cyAqYnVzKQoreworCXN0cnVjdCBiY21hX2RldmljZSAqY29yZTsKKwlpbnQgZXJyLCBkZXZfaWQgPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb3JlLCAmYnVzLT5jb3JlcywgbGlzdCkgeworCQkvKiBXZSBzdXBwb3J0IHRoYXQgY29yZXMgb3Vyc2VsZiAqLworCQlzd2l0Y2ggKGNvcmUtPmlkLmlkKSB7CisJCWNhc2UgQkNNQV9DT1JFX0NISVBDT01NT046CisJCWNhc2UgQkNNQV9DT1JFX1BDSToKKwkJY2FzZSBCQ01BX0NPUkVfUENJRToKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJY29yZS0+ZGV2LnJlbGVhc2UgPSBiY21hX3JlbGVhc2VfY29yZV9kZXY7CisJCWNvcmUtPmRldi5idXMgPSAmYmNtYV9idXNfdHlwZTsKKwkJZGV2X3NldF9uYW1lKCZjb3JlLT5kZXYsICJiY21hJWQ6JWQiLCAwLypidXMtPm51bSovLCBkZXZfaWQpOworCisJCXN3aXRjaCAoYnVzLT5ob3N0dHlwZSkgeworCQljYXNlIEJDTUFfSE9TVFRZUEVfUENJOgorCQkJY29yZS0+ZGV2LnBhcmVudCA9ICZidXMtPmhvc3RfcGNpLT5kZXY7CisJCQlicmVhazsKKwkJY2FzZSBCQ01BX0hPU1RUWVBFX05PTkU6CisJCWNhc2UgQkNNQV9IT1NUVFlQRV9TRElPOgorCQkJYnJlYWs7CisJCX0KKworCQllcnIgPSBkZXZpY2VfcmVnaXN0ZXIoJmNvcmUtPmRldik7CisJCWlmIChlcnIpIHsKKwkJCXByX2VycigiQ291bGQgbm90IHJlZ2lzdGVyIGRldiBmb3IgY29yZSAweCUwM1hcbiIsCisJCQkgICAgICAgY29yZS0+aWQuaWQpOworCQkJY29udGludWU7CisJCX0KKwkJY29yZS0+ZGV2X3JlZ2lzdGVyZWQgPSB0cnVlOworCQlkZXZfaWQrKzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYmNtYV91bnJlZ2lzdGVyX2NvcmVzKHN0cnVjdCBiY21hX2J1cyAqYnVzKQoreworCXN0cnVjdCBiY21hX2RldmljZSAqY29yZTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29yZSwgJmJ1cy0+Y29yZXMsIGxpc3QpIHsKKwkJaWYgKGNvcmUtPmRldl9yZWdpc3RlcmVkKQorCQkJZGV2aWNlX3VucmVnaXN0ZXIoJmNvcmUtPmRldik7CisJfQorfQorCitpbnQgYmNtYV9idXNfcmVnaXN0ZXIoc3RydWN0IGJjbWFfYnVzICpidXMpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmU7CisKKwkvKiBTY2FuIGZvciBkZXZpY2VzIChjb3JlcykgKi8KKwllcnIgPSBiY21hX2J1c19zY2FuKGJ1cyk7CisJaWYgKGVycikgeworCQlwcl9lcnIoIkZhaWxlZCB0byBzY2FuOiAlZFxuIiwgZXJyKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIEluaXQgQ0MgY29yZSAqLworCWNvcmUgPSBiY21hX2ZpbmRfY29yZShidXMsIEJDTUFfQ09SRV9DSElQQ09NTU9OKTsKKwlpZiAoY29yZSkgeworCQlidXMtPmRydl9jYy5jb3JlID0gY29yZTsKKwkJYmNtYV9jb3JlX2NoaXBjb21tb25faW5pdCgmYnVzLT5kcnZfY2MpOworCX0KKworCS8qIEluaXQgUENJRSBjb3JlICovCisJY29yZSA9IGJjbWFfZmluZF9jb3JlKGJ1cywgQkNNQV9DT1JFX1BDSUUpOworCWlmIChjb3JlKSB7CisJCWJ1cy0+ZHJ2X3BjaS5jb3JlID0gY29yZTsKKwkJYmNtYV9jb3JlX3BjaV9pbml0KCZidXMtPmRydl9wY2kpOworCX0KKworCS8qIFJlZ2lzdGVyIGZvdW5kIGNvcmVzICovCisJYmNtYV9yZWdpc3Rlcl9jb3JlcyhidXMpOworCisJcHJfaW5mbygiQnVzIHJlZ2lzdGVyZWRcbiIpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChiY21hX2J1c19yZWdpc3Rlcik7CisKK3ZvaWQgYmNtYV9idXNfdW5yZWdpc3RlcihzdHJ1Y3QgYmNtYV9idXMgKmJ1cykKK3sKKwliY21hX3VucmVnaXN0ZXJfY29yZXMoYnVzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJjbWFfYnVzX3VucmVnaXN0ZXIpOworCitpbnQgX19iY21hX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgYmNtYV9kcml2ZXIgKmRydiwgc3RydWN0IG1vZHVsZSAqb3duZXIpCit7CisJZHJ2LT5kcnYubmFtZSA9IGRydi0+bmFtZTsKKwlkcnYtPmRydi5idXMgPSAmYmNtYV9idXNfdHlwZTsKKwlkcnYtPmRydi5vd25lciA9IG93bmVyOworCisJcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmZHJ2LT5kcnYpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoX19iY21hX2RyaXZlcl9yZWdpc3Rlcik7CisKK3ZvaWQgYmNtYV9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgYmNtYV9kcml2ZXIgKmRydikKK3sKKwlkcml2ZXJfdW5yZWdpc3RlcigmZHJ2LT5kcnYpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYmNtYV9kcml2ZXJfdW5yZWdpc3Rlcik7CisKK3N0YXRpYyBpbnQgYmNtYV9idXNfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQoreworCXN0cnVjdCBiY21hX2RldmljZSAqY29yZSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBiY21hX2RldmljZSwgZGV2KTsKKwlzdHJ1Y3QgYmNtYV9kcml2ZXIgKmFkcnYgPSBjb250YWluZXJfb2YoZHJ2LCBzdHJ1Y3QgYmNtYV9kcml2ZXIsIGRydik7CisJY29uc3Qgc3RydWN0IGJjbWFfZGV2aWNlX2lkICpjaWQgPSAmY29yZS0+aWQ7CisJY29uc3Qgc3RydWN0IGJjbWFfZGV2aWNlX2lkICpkaWQ7CisKKwlmb3IgKGRpZCA9IGFkcnYtPmlkX3RhYmxlOyBkaWQtPm1hbnVmIHx8IGRpZC0+aWQgfHwgZGlkLT5yZXY7IGRpZCsrKSB7CisJICAgIGlmICgoZGlkLT5tYW51ZiA9PSBjaWQtPm1hbnVmIHx8IGRpZC0+bWFudWYgPT0gQkNNQV9BTllfTUFOVUYpICYmCisJCShkaWQtPmlkID09IGNpZC0+aWQgfHwgZGlkLT5pZCA9PSBCQ01BX0FOWV9JRCkgJiYKKwkJKGRpZC0+cmV2ID09IGNpZC0+cmV2IHx8IGRpZC0+cmV2ID09IEJDTUFfQU5ZX1JFVikgJiYKKwkJKGRpZC0+Y2xhc3MgPT0gY2lkLT5jbGFzcyB8fCBkaWQtPmNsYXNzID09IEJDTUFfQU5ZX0NMQVNTKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiY21hX2RldmljZV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGJjbWFfZGV2aWNlLCBkZXYpOworCXN0cnVjdCBiY21hX2RyaXZlciAqYWRydiA9IGNvbnRhaW5lcl9vZihkZXYtPmRyaXZlciwgc3RydWN0IGJjbWFfZHJpdmVyLAorCQkJCQkgICAgICAgZHJ2KTsKKwlpbnQgZXJyID0gMDsKKworCWlmIChhZHJ2LT5wcm9iZSkKKwkJZXJyID0gYWRydi0+cHJvYmUoY29yZSk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGJjbWFfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGJjbWFfZGV2aWNlLCBkZXYpOworCXN0cnVjdCBiY21hX2RyaXZlciAqYWRydiA9IGNvbnRhaW5lcl9vZihkZXYtPmRyaXZlciwgc3RydWN0IGJjbWFfZHJpdmVyLAorCQkJCQkgICAgICAgZHJ2KTsKKworCWlmIChhZHJ2LT5yZW1vdmUpCisJCWFkcnYtPnJlbW92ZShjb3JlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBiY21hX21vZGluaXQodm9pZCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gYnVzX3JlZ2lzdGVyKCZiY21hX2J1c190eXBlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisjaWZkZWYgQ09ORklHX0JDTUFfSE9TVF9QQ0kKKwllcnIgPSBiY21hX2hvc3RfcGNpX2luaXQoKTsKKwlpZiAoZXJyKSB7CisJCXByX2VycigiUENJIGhvc3QgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKKwkJZXJyID0gMDsKKwl9CisjZW5kaWYKKworCXJldHVybiBlcnI7Cit9Citmc19pbml0Y2FsbChiY21hX21vZGluaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgYmNtYV9tb2RleGl0KHZvaWQpCit7CisjaWZkZWYgQ09ORklHX0JDTUFfSE9TVF9QQ0kKKwliY21hX2hvc3RfcGNpX2V4aXQoKTsKKyNlbmRpZgorCWJ1c191bnJlZ2lzdGVyKCZiY21hX2J1c190eXBlKTsKK30KK21vZHVsZV9leGl0KGJjbWFfbW9kZXhpdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmNtYS9zY2FuLmMgYi9kcml2ZXJzL2JjbWEvc2Nhbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZDdkY2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2JjbWEvc2Nhbi5jCkBAIC0wLDAgKzEsMzYwIEBACisvKgorICogQnJvYWRjb20gc3BlY2lmaWMgQU1CQQorICogQnVzIHNjYW5uaW5nCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdOVS9HUEwuIFNlZSBDT1BZSU5HIGZvciBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlICJzY2FuLmgiCisjaW5jbHVkZSAiYmNtYV9wcml2YXRlLmgiCisKKyNpbmNsdWRlIDxsaW51eC9iY21hL2JjbWEuaD4KKyNpbmNsdWRlIDxsaW51eC9iY21hL2JjbWFfcmVncy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKK3N0cnVjdCBiY21hX2RldmljZV9pZF9uYW1lIHsKKwl1MTYgaWQ7CisJY29uc3QgY2hhciAqbmFtZTsKK307CitzdHJ1Y3QgYmNtYV9kZXZpY2VfaWRfbmFtZSBiY21hX2RldmljZV9uYW1lc1tdID0geworCXsgQkNNQV9DT1JFX09PQl9ST1VURVIsICJPT0IgUm91dGVyIiB9LAorCXsgQkNNQV9DT1JFX0lOVkFMSUQsICJJbnZhbGlkIiB9LAorCXsgQkNNQV9DT1JFX0NISVBDT01NT04sICJDaGlwQ29tbW9uIiB9LAorCXsgQkNNQV9DT1JFX0lMSU5FMjAsICJJTGluZSAyMCIgfSwKKwl7IEJDTUFfQ09SRV9TUkFNLCAiU1JBTSIgfSwKKwl7IEJDTUFfQ09SRV9TRFJBTSwgIlNEUkFNIiB9LAorCXsgQkNNQV9DT1JFX1BDSSwgIlBDSSIgfSwKKwl7IEJDTUFfQ09SRV9NSVBTLCAiTUlQUyIgfSwKKwl7IEJDTUFfQ09SRV9FVEhFUk5FVCwgIkZhc3QgRXRoZXJuZXQiIH0sCisJeyBCQ01BX0NPUkVfVjkwLCAiVjkwIiB9LAorCXsgQkNNQV9DT1JFX1VTQjExX0hPU1RERVYsICJVU0IgMS4xIEhvc3RkZXYiIH0sCisJeyBCQ01BX0NPUkVfQURTTCwgIkFEU0wiIH0sCisJeyBCQ01BX0NPUkVfSUxJTkUxMDAsICJJTGluZSAxMDAiIH0sCisJeyBCQ01BX0NPUkVfSVBTRUMsICJJUFNFQyIgfSwKKwl7IEJDTUFfQ09SRV9VVE9QSUEsICJVVE9QSUEiIH0sCisJeyBCQ01BX0NPUkVfUENNQ0lBLCAiUENNQ0lBIiB9LAorCXsgQkNNQV9DT1JFX0lOVEVSTkFMX01FTSwgIkludGVybmFsIE1lbW9yeSIgfSwKKwl7IEJDTUFfQ09SRV9NRU1DX1NEUkFNLCAiTUVNQyBTRFJBTSIgfSwKKwl7IEJDTUFfQ09SRV9PRkRNLCAiT0ZETSIgfSwKKwl7IEJDTUFfQ09SRV9FWFRJRiwgIkVYVElGIiB9LAorCXsgQkNNQV9DT1JFXzgwMjExLCAiSUVFRSA4MDIuMTEiIH0sCisJeyBCQ01BX0NPUkVfUEhZX0EsICJQSFkgQSIgfSwKKwl7IEJDTUFfQ09SRV9QSFlfQiwgIlBIWSBCIiB9LAorCXsgQkNNQV9DT1JFX1BIWV9HLCAiUEhZIEciIH0sCisJeyBCQ01BX0NPUkVfTUlQU18zMzAyLCAiTUlQUyAzMzAyIiB9LAorCXsgQkNNQV9DT1JFX1VTQjExX0hPU1QsICJVU0IgMS4xIEhvc3QiIH0sCisJeyBCQ01BX0NPUkVfVVNCMTFfREVWLCAiVVNCIDEuMSBEZXZpY2UiIH0sCisJeyBCQ01BX0NPUkVfVVNCMjBfSE9TVCwgIlVTQiAyLjAgSG9zdCIgfSwKKwl7IEJDTUFfQ09SRV9VU0IyMF9ERVYsICJVU0IgMi4wIERldmljZSIgfSwKKwl7IEJDTUFfQ09SRV9TRElPX0hPU1QsICJTRElPIEhvc3QiIH0sCisJeyBCQ01BX0NPUkVfUk9CT1NXSVRDSCwgIlJvYm9zd2l0Y2giIH0sCisJeyBCQ01BX0NPUkVfUEFSQV9BVEEsICJQQVRBIiB9LAorCXsgQkNNQV9DT1JFX1NBVEFfWE9SRE1BLCAiU0FUQSBYT1ItRE1BIiB9LAorCXsgQkNNQV9DT1JFX0VUSEVSTkVUX0dCSVQsICJHQml0IEV0aGVybmV0IiB9LAorCXsgQkNNQV9DT1JFX1BDSUUsICJQQ0llIiB9LAorCXsgQkNNQV9DT1JFX1BIWV9OLCAiUEhZIE4iIH0sCisJeyBCQ01BX0NPUkVfU1JBTV9DVEwsICJTUkFNIENvbnRyb2xsZXIiIH0sCisJeyBCQ01BX0NPUkVfTUlOSV9NQUNQSFksICJNaW5pIE1BQ1BIWSIgfSwKKwl7IEJDTUFfQ09SRV9BUk1fMTE3NiwgIkFSTSAxMTc2IiB9LAorCXsgQkNNQV9DT1JFX0FSTV83VERNSSwgIkFSTSA3VERNSSIgfSwKKwl7IEJDTUFfQ09SRV9QSFlfTFAsICJQSFkgTFAiIH0sCisJeyBCQ01BX0NPUkVfUE1VLCAiUE1VIiB9LAorCXsgQkNNQV9DT1JFX1BIWV9TU04sICJQSFkgU1NOIiB9LAorCXsgQkNNQV9DT1JFX1NESU9fREVWLCAiU0RJTyBEZXZpY2UiIH0sCisJeyBCQ01BX0NPUkVfQVJNX0NNMywgIkFSTSBDTTMiIH0sCisJeyBCQ01BX0NPUkVfUEhZX0hULCAiUEhZIEhUIiB9LAorCXsgQkNNQV9DT1JFX01JUFNfNzRLLCAiTUlQUyA3NEsiIH0sCisJeyBCQ01BX0NPUkVfTUFDX0dCSVQsICJHQml0IE1BQyIgfSwKKwl7IEJDTUFfQ09SRV9ERFIxMl9NRU1fQ1RMLCAiRERSMS9ERFIyIE1lbW9yeSBDb250cm9sbGVyIiB9LAorCXsgQkNNQV9DT1JFX1BDSUVfUkMsICJQQ0llIFJvb3QgQ29tcGxleCIgfSwKKwl7IEJDTUFfQ09SRV9PQ1BfT0NQX0JSSURHRSwgIk9DUCB0byBPQ1AgQnJpZGdlIiB9LAorCXsgQkNNQV9DT1JFX1NIQVJFRF9DT01NT04sICJDb21tb24gU2hhcmVkIiB9LAorCXsgQkNNQV9DT1JFX09DUF9BSEJfQlJJREdFLCAiT0NQIHRvIEFIQiBCcmlkZ2UiIH0sCisJeyBCQ01BX0NPUkVfU1BJX0hPU1QsICJTUEkgSG9zdCIgfSwKKwl7IEJDTUFfQ09SRV9JMlMsICJJMlMiIH0sCisJeyBCQ01BX0NPUkVfU0RSX0REUjFfTUVNX0NUTCwgIlNEUi9ERFIxIE1lbW9yeSBDb250cm9sbGVyIiB9LAorCXsgQkNNQV9DT1JFX1NISU0sICJTSElNIiB9LAorCXsgQkNNQV9DT1JFX0RFRkFVTFQsICJEZWZhdWx0IiB9LAorfTsKK2NvbnN0IGNoYXIgKmJjbWFfZGV2aWNlX25hbWUoc3RydWN0IGJjbWFfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgaTsKKworCWlmIChpZC0+bWFudWYgPT0gQkNNQV9NQU5VRl9CQ00pIHsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYmNtYV9kZXZpY2VfbmFtZXMpOyBpKyspIHsKKwkJCWlmIChiY21hX2RldmljZV9uYW1lc1tpXS5pZCA9PSBpZC0+aWQpCisJCQkJcmV0dXJuIGJjbWFfZGV2aWNlX25hbWVzW2ldLm5hbWU7CisJCX0KKwl9CisJcmV0dXJuICJVTktOT1dOIjsKK30KKworc3RhdGljIHUzMiBiY21hX3NjYW5fcmVhZDMyKHN0cnVjdCBiY21hX2J1cyAqYnVzLCB1OCBjdXJyZW50X2NvcmVpZHgsCisJCSAgICAgICB1MTYgb2Zmc2V0KQoreworCXJldHVybiByZWFkbChidXMtPm1taW8gKyBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBiY21hX3NjYW5fc3dpdGNoX2NvcmUoc3RydWN0IGJjbWFfYnVzICpidXMsIHUzMiBhZGRyKQoreworCWlmIChidXMtPmhvc3R0eXBlID09IEJDTUFfSE9TVFRZUEVfUENJKQorCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJ1cy0+aG9zdF9wY2ksIEJDTUFfUENJX0JBUjBfV0lOLAorCQkJCSAgICAgICBhZGRyKTsKK30KKworc3RhdGljIHUzMiBiY21hX2Vyb21fZ2V0X2VudChzdHJ1Y3QgYmNtYV9idXMgKmJ1cywgdTMyICoqZXJvbXB0cikKK3sKKwl1MzIgZW50ID0gcmVhZGwoKmVyb21wdHIpOworCSgqZXJvbXB0cikrKzsKKwlyZXR1cm4gZW50OworfQorCitzdGF0aWMgdm9pZCBiY21hX2Vyb21fcHVzaF9lbnQodTMyICoqZXJvbXB0cikKK3sKKwkoKmVyb21wdHIpLS07Cit9CisKK3N0YXRpYyBzMzIgYmNtYV9lcm9tX2dldF9jaShzdHJ1Y3QgYmNtYV9idXMgKmJ1cywgdTMyICoqZXJvbXB0cikKK3sKKwl1MzIgZW50ID0gYmNtYV9lcm9tX2dldF9lbnQoYnVzLCBlcm9tcHRyKTsKKwlpZiAoIShlbnQgJiBTQ0FOX0VSX1ZBTElEKSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisJaWYgKChlbnQgJiBTQ0FOX0VSX1RBRykgIT0gU0NBTl9FUl9UQUdfQ0kpCisJCXJldHVybiAtRU5PRU5UOworCXJldHVybiBlbnQ7Cit9CisKK3N0YXRpYyBib29sIGJjbWFfZXJvbV9pc19lbmQoc3RydWN0IGJjbWFfYnVzICpidXMsIHUzMiAqKmVyb21wdHIpCit7CisJdTMyIGVudCA9IGJjbWFfZXJvbV9nZXRfZW50KGJ1cywgZXJvbXB0cik7CisJYmNtYV9lcm9tX3B1c2hfZW50KGVyb21wdHIpOworCXJldHVybiAoZW50ID09IChTQ0FOX0VSX1RBR19FTkQgfCBTQ0FOX0VSX1ZBTElEKSk7Cit9CisKK3N0YXRpYyBib29sIGJjbWFfZXJvbV9pc19icmlkZ2Uoc3RydWN0IGJjbWFfYnVzICpidXMsIHUzMiAqKmVyb21wdHIpCit7CisJdTMyIGVudCA9IGJjbWFfZXJvbV9nZXRfZW50KGJ1cywgZXJvbXB0cik7CisJYmNtYV9lcm9tX3B1c2hfZW50KGVyb21wdHIpOworCXJldHVybiAoKChlbnQgJiBTQ0FOX0VSX1ZBTElEKSkgJiYKKwkJKChlbnQgJiBTQ0FOX0VSX1RBR1gpID09IFNDQU5fRVJfVEFHX0FERFIpICYmCisJCSgoZW50ICYgU0NBTl9BRERSX1RZUEUpID09IFNDQU5fQUREUl9UWVBFX0JSSURHRSkpOworfQorCitzdGF0aWMgdm9pZCBiY21hX2Vyb21fc2tpcF9jb21wb25lbnQoc3RydWN0IGJjbWFfYnVzICpidXMsIHUzMiAqKmVyb21wdHIpCit7CisJdTMyIGVudDsKKwl3aGlsZSAoMSkgeworCQllbnQgPSBiY21hX2Vyb21fZ2V0X2VudChidXMsIGVyb21wdHIpOworCQlpZiAoKGVudCAmIFNDQU5fRVJfVkFMSUQpICYmCisJCSAgICAoKGVudCAmIFNDQU5fRVJfVEFHKSA9PSBTQ0FOX0VSX1RBR19DSSkpCisJCQlicmVhazsKKwkJaWYgKGVudCA9PSAoU0NBTl9FUl9UQUdfRU5EIHwgU0NBTl9FUl9WQUxJRCkpCisJCQlicmVhazsKKwl9CisJYmNtYV9lcm9tX3B1c2hfZW50KGVyb21wdHIpOworfQorCitzdGF0aWMgczMyIGJjbWFfZXJvbV9nZXRfbXN0X3BvcnQoc3RydWN0IGJjbWFfYnVzICpidXMsIHUzMiAqKmVyb21wdHIpCit7CisJdTMyIGVudCA9IGJjbWFfZXJvbV9nZXRfZW50KGJ1cywgZXJvbXB0cik7CisJaWYgKCEoZW50ICYgU0NBTl9FUl9WQUxJRCkpCisJCXJldHVybiAtRU5PRU5UOworCWlmICgoZW50ICYgU0NBTl9FUl9UQUcpICE9IFNDQU5fRVJfVEFHX01QKQorCQlyZXR1cm4gLUVOT0VOVDsKKwlyZXR1cm4gZW50OworfQorCitzdGF0aWMgczMyIGJjbWFfZXJvbV9nZXRfYWRkcl9kZXNjKHN0cnVjdCBiY21hX2J1cyAqYnVzLCB1MzIgKiplcm9tcHRyLAorCQkJCSAgdTMyIHR5cGUsIHU4IHBvcnQpCit7CisJdTMyIGFkZHJsLCBhZGRyaCwgc2l6ZWwsIHNpemVoID0gMDsKKwl1MzIgc2l6ZTsKKworCXUzMiBlbnQgPSBiY21hX2Vyb21fZ2V0X2VudChidXMsIGVyb21wdHIpOworCWlmICgoIShlbnQgJiBTQ0FOX0VSX1ZBTElEKSkgfHwKKwkgICAgKChlbnQgJiBTQ0FOX0VSX1RBR1gpICE9IFNDQU5fRVJfVEFHX0FERFIpIHx8CisJICAgICgoZW50ICYgU0NBTl9BRERSX1RZUEUpICE9IHR5cGUpIHx8CisJICAgICgoKGVudCAmIFNDQU5fQUREUl9QT1JUKSA+PiBTQ0FOX0FERFJfUE9SVF9TSElGVCkgIT0gcG9ydCkpIHsKKwkJYmNtYV9lcm9tX3B1c2hfZW50KGVyb21wdHIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlhZGRybCA9IGVudCAmIFNDQU5fQUREUl9BRERSOworCWlmIChlbnQgJiBTQ0FOX0FERFJfQUczMikKKwkJYWRkcmggPSBiY21hX2Vyb21fZ2V0X2VudChidXMsIGVyb21wdHIpOworCWVsc2UKKwkJYWRkcmggPSAwOworCisJaWYgKChlbnQgJiBTQ0FOX0FERFJfU1opID09IFNDQU5fQUREUl9TWl9TWkQpIHsKKwkJc2l6ZSA9IGJjbWFfZXJvbV9nZXRfZW50KGJ1cywgZXJvbXB0cik7CisJCXNpemVsID0gc2l6ZSAmIFNDQU5fU0laRV9TWjsKKwkJaWYgKHNpemUgJiBTQ0FOX1NJWkVfU0czMikKKwkJCXNpemVoID0gYmNtYV9lcm9tX2dldF9lbnQoYnVzLCBlcm9tcHRyKTsKKwl9IGVsc2UKKwkJc2l6ZWwgPSBTQ0FOX0FERFJfU1pfQkFTRSA8PAorCQkJCSgoZW50ICYgU0NBTl9BRERSX1NaKSA+PiBTQ0FOX0FERFJfU1pfU0hJRlQpOworCisJcmV0dXJuIGFkZHJsOworfQorCitpbnQgYmNtYV9idXNfc2NhbihzdHJ1Y3QgYmNtYV9idXMgKmJ1cykKK3sKKwl1MzIgZXJvbWJhc2U7CisJdTMyIF9faW9tZW0gKmVyb21wdHIsICplcm9tZW5kOworCisJczMyIGNpYSwgY2liOworCXU4IHBvcnRzWzJdLCB3cmFwcGVyc1syXTsKKworCXMzMiB0bXA7CisJdTggaSwgajsKKworCWludCBlcnI7CisKKwlJTklUX0xJU1RfSEVBRCgmYnVzLT5jb3Jlcyk7CisJYnVzLT5ucl9jb3JlcyA9IDA7CisKKwliY21hX3NjYW5fc3dpdGNoX2NvcmUoYnVzLCBCQ01BX0FERFJfQkFTRSk7CisKKwl0bXAgPSBiY21hX3NjYW5fcmVhZDMyKGJ1cywgMCwgQkNNQV9DQ19JRCk7CisJYnVzLT5jaGlwaW5mby5pZCA9ICh0bXAgJiBCQ01BX0NDX0lEX0lEKSA+PiBCQ01BX0NDX0lEX0lEX1NISUZUOworCWJ1cy0+Y2hpcGluZm8ucmV2ID0gKHRtcCAmIEJDTUFfQ0NfSURfUkVWKSA+PiBCQ01BX0NDX0lEX1JFVl9TSElGVDsKKwlidXMtPmNoaXBpbmZvLnBrZyA9ICh0bXAgJiBCQ01BX0NDX0lEX1BLRykgPj4gQkNNQV9DQ19JRF9QS0dfU0hJRlQ7CisKKwllcm9tYmFzZSA9IGJjbWFfc2Nhbl9yZWFkMzIoYnVzLCAwLCBCQ01BX0NDX0VST00pOworCWVyb21wdHIgPSBidXMtPm1taW87CisJZXJvbWVuZCA9IGVyb21wdHIgKyBCQ01BX0NPUkVfU0laRSAvIHNpemVvZih1MzIpOworCisJYmNtYV9zY2FuX3N3aXRjaF9jb3JlKGJ1cywgZXJvbWJhc2UpOworCisJd2hpbGUgKGVyb21wdHIgPCBlcm9tZW5kKSB7CisJCXN0cnVjdCBiY21hX2RldmljZSAqY29yZSA9IGt6YWxsb2Moc2l6ZW9mKCpjb3JlKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghY29yZSkKKwkJCXJldHVybiAtRU5PTUVNOworCQlJTklUX0xJU1RfSEVBRCgmY29yZS0+bGlzdCk7CisJCWNvcmUtPmJ1cyA9IGJ1czsKKworCQkvKiBnZXQgQ0lzICovCisJCWNpYSA9IGJjbWFfZXJvbV9nZXRfY2koYnVzLCAmZXJvbXB0cik7CisJCWlmIChjaWEgPCAwKSB7CisJCQliY21hX2Vyb21fcHVzaF9lbnQoJmVyb21wdHIpOworCQkJaWYgKGJjbWFfZXJvbV9pc19lbmQoYnVzLCAmZXJvbXB0cikpCisJCQkJYnJlYWs7CisJCQllcnI9IC1FSUxTRVE7CisJCQlnb3RvIG91dDsKKwkJfQorCQljaWIgPSBiY21hX2Vyb21fZ2V0X2NpKGJ1cywgJmVyb21wdHIpOworCQlpZiAoY2liIDwgMCkgeworCQkJZXJyPSAtRUlMU0VROworCQkJZ290byBvdXQ7CisJCX0KKworCQkvKiBwYXJzZSBDSXMgKi8KKwkJY29yZS0+aWQuY2xhc3MgPSAoY2lhICYgU0NBTl9DSUFfQ0xBU1MpID4+IFNDQU5fQ0lBX0NMQVNTX1NISUZUOworCQljb3JlLT5pZC5pZCA9IChjaWEgJiBTQ0FOX0NJQV9JRCkgPj4gU0NBTl9DSUFfSURfU0hJRlQ7CisJCWNvcmUtPmlkLm1hbnVmID0gKGNpYSAmIFNDQU5fQ0lBX01BTlVGKSA+PiBTQ0FOX0NJQV9NQU5VRl9TSElGVDsKKwkJcG9ydHNbMF0gPSAoY2liICYgU0NBTl9DSUJfTk1QKSA+PiBTQ0FOX0NJQl9OTVBfU0hJRlQ7CisJCXBvcnRzWzFdID0gKGNpYiAmIFNDQU5fQ0lCX05TUCkgPj4gU0NBTl9DSUJfTlNQX1NISUZUOworCQl3cmFwcGVyc1swXSA9IChjaWIgJiBTQ0FOX0NJQl9OTVcpID4+IFNDQU5fQ0lCX05NV19TSElGVDsKKwkJd3JhcHBlcnNbMV0gPSAoY2liICYgU0NBTl9DSUJfTlNXKSA+PiBTQ0FOX0NJQl9OU1dfU0hJRlQ7CisJCWNvcmUtPmlkLnJldiA9IChjaWIgJiBTQ0FOX0NJQl9SRVYpID4+IFNDQU5fQ0lCX1JFVl9TSElGVDsKKworCQlpZiAoKChjb3JlLT5pZC5tYW51ZiA9PSBCQ01BX01BTlVGX0FSTSkgJiYKKwkJICAgICAoY29yZS0+aWQuaWQgPT0gMHhGRkYpKSB8fAorCQkgICAgKHBvcnRzWzFdID09IDApKSB7CisJCQliY21hX2Vyb21fc2tpcF9jb21wb25lbnQoYnVzLCAmZXJvbXB0cik7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIGNoZWNrIGlmIGNvbXBvbmVudCBpcyBhIGNvcmUgYXQgYWxsICovCisJCWlmICh3cmFwcGVyc1swXSArIHdyYXBwZXJzWzFdID09IDApIHsKKwkJCS8qIHdlIGNvdWxkIHNhdmUgYWRkcmwgb2YgdGhlIHJvdXRlcgorCQkJaWYgKGNpZCA9PSBCQ01BX0NPUkVfT09CX1JPVVRFUikKKwkJCSAqLworCQkJYmNtYV9lcm9tX3NraXBfY29tcG9uZW50KGJ1cywgJmVyb21wdHIpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoYmNtYV9lcm9tX2lzX2JyaWRnZShidXMsICZlcm9tcHRyKSkgeworCQkJYmNtYV9lcm9tX3NraXBfY29tcG9uZW50KGJ1cywgJmVyb21wdHIpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBnZXQgJiBwYXJzZSBtYXN0ZXIgcG9ydHMgKi8KKwkJZm9yIChpID0gMDsgaSA8IHBvcnRzWzBdOyBpKyspIHsKKwkJCXUzMiBtc3RfcG9ydF9kID0gYmNtYV9lcm9tX2dldF9tc3RfcG9ydChidXMsICZlcm9tcHRyKTsKKwkJCWlmIChtc3RfcG9ydF9kIDwgMCkgeworCQkJCWVycj0gLUVJTFNFUTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCisJCS8qIGdldCAmIHBhcnNlIHNsYXZlIHBvcnRzICovCisJCWZvciAoaSA9IDA7IGkgPCBwb3J0c1sxXTsgaSsrKSB7CisJCQlmb3IgKGogPSAwOyA7IGorKykgeworCQkJCXRtcCA9IGJjbWFfZXJvbV9nZXRfYWRkcl9kZXNjKGJ1cywgJmVyb21wdHIsCisJCQkJCVNDQU5fQUREUl9UWVBFX1NMQVZFLCBpKTsKKwkJCQlpZiAodG1wIDwgMCkgeworCQkJCQkvKiBubyBtb3JlIGVudHJpZXMgZm9yIHBvcnQgX2lfICovCisJCQkJCS8qIHByX2RlYnVnKCJlcm9tOiBzbGF2ZSBwb3J0ICVkICIKKwkJCQkJICogImhhcyAlZCBkZXNjcmlwdG9yc1xuIiwgaSwgaik7ICovCisJCQkJCWJyZWFrOworCQkJCX0gZWxzZSB7CisJCQkJCWlmIChpID09IDAgJiYgaiA9PSAwKQorCQkJCQkJY29yZS0+YWRkciA9IHRtcDsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBnZXQgJiBwYXJzZSBtYXN0ZXIgd3JhcHBlcnMgKi8KKwkJZm9yIChpID0gMDsgaSA8IHdyYXBwZXJzWzBdOyBpKyspIHsKKwkJCWZvciAoaiA9IDA7IDsgaisrKSB7CisJCQkJdG1wID0gYmNtYV9lcm9tX2dldF9hZGRyX2Rlc2MoYnVzLCAmZXJvbXB0ciwKKwkJCQkJU0NBTl9BRERSX1RZUEVfTVdSQVAsIGkpOworCQkJCWlmICh0bXAgPCAwKSB7CisJCQkJCS8qIG5vIG1vcmUgZW50cmllcyBmb3IgcG9ydCBfaV8gKi8KKwkJCQkJLyogcHJfZGVidWcoImVyb206IG1hc3RlciB3cmFwcGVyICVkICIKKwkJCQkJICogImhhcyAlZCBkZXNjcmlwdG9yc1xuIiwgaSwgaik7ICovCisJCQkJCWJyZWFrOworCQkJCX0gZWxzZSB7CisJCQkJCWlmIChpID09IDAgJiYgaiA9PSAwKQorCQkJCQkJY29yZS0+d3JhcCA9IHRtcDsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBnZXQgJiBwYXJzZSBzbGF2ZSB3cmFwcGVycyAqLworCQlmb3IgKGkgPSAwOyBpIDwgd3JhcHBlcnNbMV07IGkrKykgeworCQkJdTggaGFjayA9IChwb3J0c1sxXSA9PSAxKSA/IDAgOiAxOworCQkJZm9yIChqID0gMDsgOyBqKyspIHsKKwkJCQl0bXAgPSBiY21hX2Vyb21fZ2V0X2FkZHJfZGVzYyhidXMsICZlcm9tcHRyLAorCQkJCQlTQ0FOX0FERFJfVFlQRV9TV1JBUCwgaSArIGhhY2spOworCQkJCWlmICh0bXAgPCAwKSB7CisJCQkJCS8qIG5vIG1vcmUgZW50cmllcyBmb3IgcG9ydCBfaV8gKi8KKwkJCQkJLyogcHJfZGVidWcoImVyb206IG1hc3RlciB3cmFwcGVyICVkICIKKwkJCQkJICogaGFzICVkIGRlc2NyaXB0b3JzXG4iLCBpLCBqKTsgKi8KKwkJCQkJYnJlYWs7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKHdyYXBwZXJzWzBdID09IDAgJiYgIWkgJiYgIWopCisJCQkJCQljb3JlLT53cmFwID0gdG1wOworCQkJCX0KKwkJCX0KKwkJfQorCisJCXByX2luZm8oIkNvcmUgJWQgZm91bmQ6ICVzICIKKwkJCSIobWFudWYgMHglMDNYLCBpZCAweCUwM1gsIHJldiAweCUwMlgsIGNsYXNzIDB4JVgpXG4iLAorCQkJYnVzLT5ucl9jb3JlcywgYmNtYV9kZXZpY2VfbmFtZSgmY29yZS0+aWQpLAorCQkJY29yZS0+aWQubWFudWYsIGNvcmUtPmlkLmlkLCBjb3JlLT5pZC5yZXYsCisJCQljb3JlLT5pZC5jbGFzcyk7CisKKwkJY29yZS0+Y29yZV9pbmRleCA9IGJ1cy0+bnJfY29yZXMrKzsKKwkJbGlzdF9hZGQoJmNvcmUtPmxpc3QsICZidXMtPmNvcmVzKTsKKwkJY29udGludWU7CitvdXQ6CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JjbWEvc2Nhbi5oIGIvZHJpdmVycy9iY21hL3NjYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTNlNmE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9iY21hL3NjYW4uaApAQCAtMCwwICsxLDU2IEBACisjaWZuZGVmIEJDTUFfU0NBTl9IXworI2RlZmluZSBCQ01BX1NDQU5fSF8KKworI2RlZmluZSBCQ01BX0FERFJfQkFTRQkJMHgxODAwMDAwMAorI2RlZmluZSBCQ01BX1dSQVBfQkFTRQkJMHgxODEwMDAwMAorCisjZGVmaW5lIFNDQU5fRVJfVkFMSUQJCTB4MDAwMDAwMDEKKyNkZWZpbmUgU0NBTl9FUl9UQUdYCQkweDAwMDAwMDA2IC8qIHdlIGhhdmUgdG8gaWdub3JlIDB4OCBiaXQgd2hlbiBjaGVja2luZyB0YWcgZm9yIFNDQU5fRVJfVEFHX0FERFIgKi8KKyNkZWZpbmUgU0NBTl9FUl9UQUcJCTB4MDAwMDAwMEUKKyNkZWZpbmUgIFNDQU5fRVJfVEFHX0NJCQkweDAwMDAwMDAwCisjZGVmaW5lICBTQ0FOX0VSX1RBR19NUAkJMHgwMDAwMDAwMgorI2RlZmluZSAgU0NBTl9FUl9UQUdfQUREUgkweDAwMDAwMDA0CisjZGVmaW5lICBTQ0FOX0VSX1RBR19FTkQJMHgwMDAwMDAwRQorI2RlZmluZSBTQ0FOX0VSX0JBRAkJMHhGRkZGRkZGRgorCisjZGVmaW5lIFNDQU5fQ0lBX0NMQVNTCQkweDAwMDAwMEYwCisjZGVmaW5lIFNDQU5fQ0lBX0NMQVNTX1NISUZUCTQKKyNkZWZpbmUgU0NBTl9DSUFfSUQJCTB4MDAwRkZGMDAKKyNkZWZpbmUgU0NBTl9DSUFfSURfU0hJRlQJOAorI2RlZmluZSBTQ0FOX0NJQV9NQU5VRgkJMHhGRkYwMDAwMAorI2RlZmluZSBTQ0FOX0NJQV9NQU5VRl9TSElGVAkyMAorCisjZGVmaW5lIFNDQU5fQ0lCX05NUAkJMHgwMDAwMDFGMAorI2RlZmluZSBTQ0FOX0NJQl9OTVBfU0hJRlQJNAorI2RlZmluZSBTQ0FOX0NJQl9OU1AJCTB4MDAwMDNFMDAKKyNkZWZpbmUgU0NBTl9DSUJfTlNQX1NISUZUCTkKKyNkZWZpbmUgU0NBTl9DSUJfTk1XCQkweDAwMDdDMDAwCisjZGVmaW5lIFNDQU5fQ0lCX05NV19TSElGVAkxNAorI2RlZmluZSBTQ0FOX0NJQl9OU1cJCTB4MDBGODAwMDAKKyNkZWZpbmUgU0NBTl9DSUJfTlNXX1NISUZUCTE3CisjZGVmaW5lIFNDQU5fQ0lCX1JFVgkJMHhGRjAwMDAwMAorI2RlZmluZSBTQ0FOX0NJQl9SRVZfU0hJRlQJMjQKKworI2RlZmluZSBTQ0FOX0FERFJfQUczMgkJMHgwMDAwMDAwOAorI2RlZmluZSBTQ0FOX0FERFJfU1oJCTB4MDAwMDAwMzAKKyNkZWZpbmUgU0NBTl9BRERSX1NaX1NISUZUCTQKKyNkZWZpbmUgIFNDQU5fQUREUl9TWl80SwkweDAwMDAwMDAwCisjZGVmaW5lICBTQ0FOX0FERFJfU1pfOEsJMHgwMDAwMDAxMAorI2RlZmluZSAgU0NBTl9BRERSX1NaXzE2SwkweDAwMDAwMDIwCisjZGVmaW5lICBTQ0FOX0FERFJfU1pfU1pECTB4MDAwMDAwMzAKKyNkZWZpbmUgU0NBTl9BRERSX1RZUEUJCTB4MDAwMDAwQzAKKyNkZWZpbmUgIFNDQU5fQUREUl9UWVBFX1NMQVZFCTB4MDAwMDAwMDAKKyNkZWZpbmUgIFNDQU5fQUREUl9UWVBFX0JSSURHRQkweDAwMDAwMDQwCisjZGVmaW5lICBTQ0FOX0FERFJfVFlQRV9TV1JBUAkweDAwMDAwMDgwCisjZGVmaW5lICBTQ0FOX0FERFJfVFlQRV9NV1JBUAkweDAwMDAwMEMwCisjZGVmaW5lIFNDQU5fQUREUl9QT1JUCQkweDAwMDAwRjAwCisjZGVmaW5lIFNDQU5fQUREUl9QT1JUX1NISUZUCTgKKyNkZWZpbmUgU0NBTl9BRERSX0FERFIJCTB4RkZGRkYwMDAKKworI2RlZmluZSBTQ0FOX0FERFJfU1pfQkFTRQkweDAwMDAxMDAwCS8qIDRLQiAqLworCisjZGVmaW5lIFNDQU5fU0laRV9TWl9BTElHTgkweDAwMDAwRkZGCisjZGVmaW5lIFNDQU5fU0laRV9TWgkJMHhGRkZGRjAwMAorI2RlZmluZSBTQ0FOX1NJWkVfU0czMgkJMHgwMDAwMDAwOAorCisjZW5kaWYgLyogQkNNQV9TQ0FOX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9pbnQuaCBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX2ludC5oCmluZGV4IGIyNjk5YmIuLmQ4NzFiMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX2ludC5oCisrKyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX2ludC5oCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8bGludXgvZ2VuaGQuaD4KICNpbmNsdWRlIDxuZXQvdGNwLmg+CiAjaW5jbHVkZSA8bGludXgvbHJ1X2NhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2lmZGVmIF9fQ0hFQ0tFUl9fCiAjIGRlZmluZSBfX3Byb3RlY3RlZF9ieSh4KSAgICAgICBfX2F0dHJpYnV0ZV9fKChyZXF1aXJlX2NvbnRleHQoeCwxLDk5OSwicmR3ciIpKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWcgYi9kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnCmluZGV4IDhlMGRlOWEuLjExYjQxZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWcKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZwpAQCAtMTg4LDcgKzE4OCw3IEBACiAJICBUaGUgY29yZSBkcml2ZXIgdG8gc3VwcG9ydCBNYXJ2ZWxsIEJsdWV0b290aCBkZXZpY2VzLgogCiAJICBUaGlzIGRyaXZlciBpcyByZXF1aXJlZCBpZiB5b3Ugd2FudCB0byBzdXBwb3J0Ci0JICBNYXJ2ZWxsIEJsdWV0b290aCBkZXZpY2VzLCBzdWNoIGFzIDg2ODguCisJICBNYXJ2ZWxsIEJsdWV0b290aCBkZXZpY2VzLCBzdWNoIGFzIDg2ODgvODc4Ny4KIAogCSAgU2F5IFkgaGVyZSB0byBjb21waWxlIE1hcnZlbGwgQmx1ZXRvb3RoIGRyaXZlcgogCSAgaW50byB0aGUga2VybmVsIG9yIHNheSBNIHRvIGNvbXBpbGUgaXQgYXMgbW9kdWxlLgpAQCAtMjAxLDcgKzIwMSw3IEBACiAJICBUaGUgZHJpdmVyIGZvciBNYXJ2ZWxsIEJsdWV0b290aCBjaGlwc2V0cyB3aXRoIFNESU8gaW50ZXJmYWNlLgogCiAJICBUaGlzIGRyaXZlciBpcyByZXF1aXJlZCBpZiB5b3Ugd2FudCB0byB1c2UgTWFydmVsbCBCbHVldG9vdGgKLQkgIGRldmljZXMgd2l0aCBTRElPIGludGVyZmFjZS4gQ3VycmVudGx5IG9ubHkgU0Q4Njg4IGNoaXBzZXQgaXMKKwkgIGRldmljZXMgd2l0aCBTRElPIGludGVyZmFjZS4gQ3VycmVudGx5IFNEODY4OC9TRDg3ODcgY2hpcHNldHMgYXJlCiAJICBzdXBwb3J0ZWQuCiAKIAkgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBzdXBwb3J0IGZvciBNYXJ2ZWxsIEJULW92ZXItU0RJTyBkcml2ZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2F0aDNrLmMgYi9kcml2ZXJzL2JsdWV0b290aC9hdGgzay5jCmluZGV4IDU1NzdlZDYuLjZiYWNlZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2F0aDNrLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYXRoM2suYwpAQCAtNjIsNiArNjIsNyBAQAogCiAJLyogQXRoZXJvcyBBUjMwMTEgd2l0aCBzZmxhc2ggZmlybXdhcmUqLwogCXsgVVNCX0RFVklDRSgweDBDRjMsIDB4MzAwMikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDMzMDQpIH0sCiAKIAkvKiBBdGhlcm9zIEFSOTI4NSBNYWxiZWMgd2l0aCBzZmxhc2ggZmlybXdhcmUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDMxMUQpIH0sCkBAIC0xMzgsOSArMTM5LDYgQEAKIAkJY291bnQgLT0gc2l6ZTsKIAl9CiAKLQlrZnJlZShzZW5kX2J1Zik7Ci0JcmV0dXJuIDA7Ci0KIGVycm9yOgogCWtmcmVlKHNlbmRfYnVmKTsKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX3NkaW8uYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9zZGlvLmMKaW5kZXggZGNjMmE2ZS4uN2Y1MjFkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX3NkaW8uYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfc2Rpby5jCkBAIC00OSwxNSArNDksNTkgQEAKIHN0YXRpYyB1OCB1c2VyX3JtbW9kOwogc3RhdGljIHU4IHNkaW9faXJlZzsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBidG1ydmxfc2Rpb19jYXJkX3JlZyBidG1ydmxfcmVnXzg2ODggPSB7CisJLmNmZyA9IDB4MDMsCisJLmhvc3RfaW50X21hc2sgPSAweDA0LAorCS5ob3N0X2ludHN0YXR1cyA9IDB4MDUsCisJLmNhcmRfc3RhdHVzID0gMHgyMCwKKwkuc3FfcmVhZF9iYXNlX2FkZHJfYTAgPSAweDEwLAorCS5zcV9yZWFkX2Jhc2VfYWRkcl9hMSA9IDB4MTEsCisJLmNhcmRfZndfc3RhdHVzMCA9IDB4NDAsCisJLmNhcmRfZndfc3RhdHVzMSA9IDB4NDEsCisJLmNhcmRfcnhfbGVuID0gMHg0MiwKKwkuY2FyZF9yeF91bml0ID0gMHg0MywKKwkuaW9fcG9ydF8wID0gMHgwMCwKKwkuaW9fcG9ydF8xID0gMHgwMSwKKwkuaW9fcG9ydF8yID0gMHgwMiwKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGJ0bXJ2bF9zZGlvX2NhcmRfcmVnIGJ0bXJ2bF9yZWdfODc4NyA9IHsKKwkuY2ZnID0gMHgwMCwKKwkuaG9zdF9pbnRfbWFzayA9IDB4MDIsCisJLmhvc3RfaW50c3RhdHVzID0gMHgwMywKKwkuY2FyZF9zdGF0dXMgPSAweDMwLAorCS5zcV9yZWFkX2Jhc2VfYWRkcl9hMCA9IDB4NDAsCisJLnNxX3JlYWRfYmFzZV9hZGRyX2ExID0gMHg0MSwKKwkuY2FyZF9yZXZpc2lvbiA9IDB4NWMsCisJLmNhcmRfZndfc3RhdHVzMCA9IDB4NjAsCisJLmNhcmRfZndfc3RhdHVzMSA9IDB4NjEsCisJLmNhcmRfcnhfbGVuID0gMHg2MiwKKwkuY2FyZF9yeF91bml0ID0gMHg2MywKKwkuaW9fcG9ydF8wID0gMHg3OCwKKwkuaW9fcG9ydF8xID0gMHg3OSwKKwkuaW9fcG9ydF8yID0gMHg3YSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRtcnZsX3NkaW9fZGV2aWNlIGJ0bXJ2bF9zZGlvX3NkNjg4OCA9IHsKIAkuaGVscGVyCQk9ICJzZDg2ODhfaGVscGVyLmJpbiIsCiAJLmZpcm13YXJlCT0gInNkODY4OC5iaW4iLAorCS5yZWcJCT0gJmJ0bXJ2bF9yZWdfODY4OCwKKwkuc2RfYmxrc3pfZndfZGwJPSA2NCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRtcnZsX3NkaW9fZGV2aWNlIGJ0bXJ2bF9zZGlvX3NkODc4NyA9IHsKKwkuaGVscGVyCQk9IE5VTEwsCisJLmZpcm13YXJlCT0gIm1ydmwvc2Q4Nzg3X3VhcHN0YS5iaW4iLAorCS5yZWcJCT0gJmJ0bXJ2bF9yZWdfODc4NywKKwkuc2RfYmxrc3pfZndfZGwJPSAyNTYsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNkaW9fZGV2aWNlX2lkIGJ0bXJ2bF9zZGlvX2lkc1tdID0gewogCS8qIE1hcnZlbGwgU0Q4Njg4IEJsdWV0b290aCBkZXZpY2UgKi8KIAl7IFNESU9fREVWSUNFKFNESU9fVkVORE9SX0lEX01BUlZFTEwsIDB4OTEwNSksCiAJCQkuZHJpdmVyX2RhdGEgPSAodW5zaWduZWQgbG9uZykgJmJ0bXJ2bF9zZGlvX3NkNjg4OCB9LAorCS8qIE1hcnZlbGwgU0Q4Nzg3IEJsdWV0b290aCBkZXZpY2UgKi8KKwl7IFNESU9fREVWSUNFKFNESU9fVkVORE9SX0lEX01BUlZFTEwsIDB4OTExQSksCisJCQkuZHJpdmVyX2RhdGEgPSAodW5zaWduZWQgbG9uZykgJmJ0bXJ2bF9zZGlvX3NkODc4NyB9LAogCiAJeyB9CS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwpAQCAtNjksNyArMTEzLDcgQEAKIAl1OCByZWc7CiAJaW50IHJldDsKIAotCXJlZyA9IHNkaW9fcmVhZGIoY2FyZC0+ZnVuYywgQ0FSRF9SWF9VTklUX1JFRywgJnJldCk7CisJcmVnID0gc2Rpb19yZWFkYihjYXJkLT5mdW5jLCBjYXJkLT5yZWctPmNhcmRfcnhfdW5pdCwgJnJldCk7CiAJaWYgKCFyZXQpCiAJCWNhcmQtPnJ4X3VuaXQgPSByZWc7CiAKQEAgLTgzLDExICsxMjcsMTEgQEAKIAogCSpkYXQgPSAwOwogCi0JZndzMCA9IHNkaW9fcmVhZGIoY2FyZC0+ZnVuYywgQ0FSRF9GV19TVEFUVVMwX1JFRywgJnJldCk7CisJZndzMCA9IHNkaW9fcmVhZGIoY2FyZC0+ZnVuYywgY2FyZC0+cmVnLT5jYXJkX2Z3X3N0YXR1czAsICZyZXQpOwogCWlmIChyZXQpCiAJCXJldHVybiAtRUlPOwogCi0JZndzMSA9IHNkaW9fcmVhZGIoY2FyZC0+ZnVuYywgQ0FSRF9GV19TVEFUVVMxX1JFRywgJnJldCk7CisJZndzMSA9IHNkaW9fcmVhZGIoY2FyZC0+ZnVuYywgY2FyZC0+cmVnLT5jYXJkX2Z3X3N0YXR1czEsICZyZXQpOwogCWlmIChyZXQpCiAJCXJldHVybiAtRUlPOwogCkBAIC0xMDEsNyArMTQ1LDcgQEAKIAl1OCByZWc7CiAJaW50IHJldDsKIAotCXJlZyA9IHNkaW9fcmVhZGIoY2FyZC0+ZnVuYywgQ0FSRF9SWF9MRU5fUkVHLCAmcmV0KTsKKwlyZWcgPSBzZGlvX3JlYWRiKGNhcmQtPmZ1bmMsIGNhcmQtPnJlZy0+Y2FyZF9yeF9sZW4sICZyZXQpOwogCWlmICghcmV0KQogCQkqZGF0ID0gKHUxNikgcmVnIDw8IGNhcmQtPnJ4X3VuaXQ7CiAKQEAgLTExMyw3ICsxNTcsNyBAQAogewogCWludCByZXQ7CiAKLQlzZGlvX3dyaXRlYihjYXJkLT5mdW5jLCBtYXNrLCBIT1NUX0lOVF9NQVNLX1JFRywgJnJldCk7CisJc2Rpb193cml0ZWIoY2FyZC0+ZnVuYywgbWFzaywgY2FyZC0+cmVnLT5ob3N0X2ludF9tYXNrLCAmcmV0KTsKIAlpZiAocmV0KSB7CiAJCUJUX0VSUigiVW5hYmxlIHRvIGVuYWJsZSB0aGUgaG9zdCBpbnRlcnJ1cHQhIik7CiAJCXJldCA9IC1FSU87CkBAIC0xMjgsMTMgKzE3MiwxMyBAQAogCXU4IGhvc3RfaW50X21hc2s7CiAJaW50IHJldDsKIAotCWhvc3RfaW50X21hc2sgPSBzZGlvX3JlYWRiKGNhcmQtPmZ1bmMsIEhPU1RfSU5UX01BU0tfUkVHLCAmcmV0KTsKKwlob3N0X2ludF9tYXNrID0gc2Rpb19yZWFkYihjYXJkLT5mdW5jLCBjYXJkLT5yZWctPmhvc3RfaW50X21hc2ssICZyZXQpOwogCWlmIChyZXQpCiAJCXJldHVybiAtRUlPOwogCiAJaG9zdF9pbnRfbWFzayAmPSB+bWFzazsKIAotCXNkaW9fd3JpdGViKGNhcmQtPmZ1bmMsIGhvc3RfaW50X21hc2ssIEhPU1RfSU5UX01BU0tfUkVHLCAmcmV0KTsKKwlzZGlvX3dyaXRlYihjYXJkLT5mdW5jLCBob3N0X2ludF9tYXNrLCBjYXJkLT5yZWctPmhvc3RfaW50X21hc2ssICZyZXQpOwogCWlmIChyZXQgPCAwKSB7CiAJCUJUX0VSUigiVW5hYmxlIHRvIGRpc2FibGUgdGhlIGhvc3QgaW50ZXJydXB0ISIpOwogCQlyZXR1cm4gLUVJTzsKQEAgLTE1MCw3ICsxOTQsNyBAQAogCWludCByZXQ7CiAKIAlmb3IgKHRyaWVzID0gMDsgdHJpZXMgPCBNQVhfUE9MTF9UUklFUyAqIDEwMDA7IHRyaWVzKyspIHsKLQkJc3RhdHVzID0gc2Rpb19yZWFkYihjYXJkLT5mdW5jLCBDQVJEX1NUQVRVU19SRUcsICZyZXQpOworCQlzdGF0dXMgPSBzZGlvX3JlYWRiKGNhcmQtPmZ1bmMsIGNhcmQtPnJlZy0+Y2FyZF9zdGF0dXMsCSZyZXQpOwogCQlpZiAocmV0KQogCQkJZ290byBmYWlsZWQ7CiAJCWlmICgoc3RhdHVzICYgYml0cykgPT0gYml0cykKQEAgLTI5OSw3ICszNDMsNyBAQAogCXU4IGJhc2UwLCBiYXNlMTsKIAl2b2lkICp0bXBmd2J1ZiA9IE5VTEw7CiAJdTggKmZ3YnVmOwotCXUxNiBsZW47CisJdTE2IGxlbiwgYmxrc3pfZGwgPSBjYXJkLT5zZF9ibGtzel9md19kbDsKIAlpbnQgdHhsZW4gPSAwLCB0eF9ibG9ja3MgPSAwLCBjb3VudCA9IDA7CiAKIAlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmd19maXJtd2FyZSwgY2FyZC0+ZmlybXdhcmUsCkBAIC0zNDUsNyArMzg5LDcgQEAKIAogCQlmb3IgKHRyaWVzID0gMDsgdHJpZXMgPCBNQVhfUE9MTF9UUklFUzsgdHJpZXMrKykgewogCQkJYmFzZTAgPSBzZGlvX3JlYWRiKGNhcmQtPmZ1bmMsCi0JCQkJCVNRX1JFQURfQkFTRV9BRERSRVNTX0EwX1JFRywgJnJldCk7CisJCQkJCWNhcmQtPnJlZy0+c3FfcmVhZF9iYXNlX2FkZHJfYTAsICZyZXQpOwogCQkJaWYgKHJldCkgewogCQkJCUJUX0VSUigiQkFTRTAgcmVnaXN0ZXIgcmVhZCBmYWlsZWQ6IgogCQkJCQkiIGJhc2UwID0gMHglMDRYKCVkKS4iCkBAIC0zNTUsNyArMzk5LDcgQEAKIAkJCQlnb3RvIGRvbmU7CiAJCQl9CiAJCQliYXNlMSA9IHNkaW9fcmVhZGIoY2FyZC0+ZnVuYywKLQkJCQkJU1FfUkVBRF9CQVNFX0FERFJFU1NfQTFfUkVHLCAmcmV0KTsKKwkJCQkJY2FyZC0+cmVnLT5zcV9yZWFkX2Jhc2VfYWRkcl9hMSwgJnJldCk7CiAJCQlpZiAocmV0KSB7CiAJCQkJQlRfRVJSKCJCQVNFMSByZWdpc3RlciByZWFkIGZhaWxlZDoiCiAJCQkJCSIgYmFzZTEgPSAweCUwNFgoJWQpLiIKQEAgLTQwMywyMCArNDQ3LDE5IEBACiAJCQlpZiAoZmlybXdhcmVsZW4gLSBvZmZzZXQgPCB0eGxlbikKIAkJCQl0eGxlbiA9IGZpcm13YXJlbGVuIC0gb2Zmc2V0OwogCi0JCQl0eF9ibG9ja3MgPQotCQkJICAgICh0eGxlbiArIFNESU9fQkxPQ0tfU0laRSAtIDEpIC8gU0RJT19CTE9DS19TSVpFOworCQkJdHhfYmxvY2tzID0gKHR4bGVuICsgYmxrc3pfZGwgLSAxKSAvIGJsa3N6X2RsOwogCiAJCQltZW1jcHkoZndidWYsICZmaXJtd2FyZVtvZmZzZXRdLCB0eGxlbik7CiAJCX0KIAogCQlyZXQgPSBzZGlvX3dyaXRlc2IoY2FyZC0+ZnVuYywgY2FyZC0+aW9wb3J0LCBmd2J1ZiwKLQkJCQkJdHhfYmxvY2tzICogU0RJT19CTE9DS19TSVpFKTsKKwkJCQkJCXR4X2Jsb2NrcyAqIGJsa3N6X2RsKTsKIAogCQlpZiAocmV0IDwgMCkgewogCQkJQlRfRVJSKCJGVyBkb3dubG9hZCwgd3JpdGVzYiglZCkgZmFpbGVkIEAlZCIsCiAJCQkJCQkJY291bnQsIG9mZnNldCk7Ci0JCQlzZGlvX3dyaXRlYihjYXJkLT5mdW5jLCBIT1NUX0NNRDUzX0ZJTiwgQ09ORklHX1JFRywKLQkJCQkJCQkJCSZyZXQpOworCQkJc2Rpb193cml0ZWIoY2FyZC0+ZnVuYywgSE9TVF9DTUQ1M19GSU4sCisJCQkJCQljYXJkLT5yZWctPmNmZywgJnJldCk7CiAJCQlpZiAocmV0KQogCQkJCUJUX0VSUigid3JpdGViIGZhaWxlZCAoQ0ZHKSIpOwogCQl9CkBAIC01OTcsNyArNjQwLDcgQEAKIAogCXByaXYgPSBjYXJkLT5wcml2OwogCi0JaXJlZyA9IHNkaW9fcmVhZGIoY2FyZC0+ZnVuYywgSE9TVF9JTlRTVEFUVVNfUkVHLCAmcmV0KTsKKwlpcmVnID0gc2Rpb19yZWFkYihjYXJkLT5mdW5jLCBjYXJkLT5yZWctPmhvc3RfaW50c3RhdHVzLCAmcmV0KTsKIAlpZiAocmV0KSB7CiAJCUJUX0VSUigic2Rpb19yZWFkYjogcmVhZCBpbnQgc3RhdHVzIHJlZ2lzdGVyIGZhaWxlZCIpOwogCQlyZXR1cm47CkBAIC02MTMsNyArNjU2LDcgQEAKIAogCQlzZGlvX3dyaXRlYihjYXJkLT5mdW5jLCB+KGlyZWcpICYgKEROX0xEX0hPU1RfSU5UX1NUQVRVUyB8CiAJCQkJCVVQX0xEX0hPU1RfSU5UX1NUQVRVUyksCi0JCQkJSE9TVF9JTlRTVEFUVVNfUkVHLCAmcmV0KTsKKwkJCQljYXJkLT5yZWctPmhvc3RfaW50c3RhdHVzLCAmcmV0KTsKIAkJaWYgKHJldCkgewogCQkJQlRfRVJSKCJzZGlvX3dyaXRlYjogY2xlYXIgaW50IHN0YXR1cyByZWdpc3RlciBmYWlsZWQiKTsKIAkJCXJldHVybjsKQEAgLTY2NCw3ICs3MDcsNyBAQAogCQlnb3RvIHJlbGVhc2VfaXJxOwogCX0KIAotCXJlZyA9IHNkaW9fcmVhZGIoZnVuYywgSU9fUE9SVF8wX1JFRywgJnJldCk7CisJcmVnID0gc2Rpb19yZWFkYihmdW5jLCBjYXJkLT5yZWctPmlvX3BvcnRfMCwgJnJldCk7CiAJaWYgKHJldCA8IDApIHsKIAkJcmV0ID0gLUVJTzsKIAkJZ290byByZWxlYXNlX2lycTsKQEAgLTY3Miw3ICs3MTUsNyBAQAogCiAJY2FyZC0+aW9wb3J0ID0gcmVnOwogCi0JcmVnID0gc2Rpb19yZWFkYihmdW5jLCBJT19QT1JUXzFfUkVHLCAmcmV0KTsKKwlyZWcgPSBzZGlvX3JlYWRiKGZ1bmMsIGNhcmQtPnJlZy0+aW9fcG9ydF8xLCAmcmV0KTsKIAlpZiAocmV0IDwgMCkgewogCQlyZXQgPSAtRUlPOwogCQlnb3RvIHJlbGVhc2VfaXJxOwpAQCAtNjgwLDcgKzcyMyw3IEBACiAKIAljYXJkLT5pb3BvcnQgfD0gKHJlZyA8PCA4KTsKIAotCXJlZyA9IHNkaW9fcmVhZGIoZnVuYywgSU9fUE9SVF8yX1JFRywgJnJldCk7CisJcmVnID0gc2Rpb19yZWFkYihmdW5jLCBjYXJkLT5yZWctPmlvX3BvcnRfMiwgJnJldCk7CiAJaWYgKHJldCA8IDApIHsKIAkJcmV0ID0gLUVJTzsKIAkJZ290byByZWxlYXNlX2lycTsKQEAgLTgxNSw2ICs4NTgsOCBAQAogc3RhdGljIGludCBidG1ydmxfc2Rpb19kb3dubG9hZF9mdyhzdHJ1Y3QgYnRtcnZsX3NkaW9fY2FyZCAqY2FyZCkKIHsKIAlpbnQgcmV0ID0gMDsKKwl1OCBmd3MwOworCWludCBwb2xsbnVtID0gTUFYX1BPTExfVFJJRVM7CiAKIAlpZiAoIWNhcmQgfHwgIWNhcmQtPmZ1bmMpIHsKIAkJQlRfRVJSKCJjYXJkIG9yIGZ1bmN0aW9uIGlzIE5VTEwhIik7CkBAIC04MjcsMjAgKzg3MiwzNiBAQAogCQlnb3RvIGRvbmU7CiAJfQogCi0JcmV0ID0gYnRtcnZsX3NkaW9fZG93bmxvYWRfaGVscGVyKGNhcmQpOworCS8qIENoZWNrIGlmIG90aGVyIGZ1bmN0aW9uIGRyaXZlciBpcyBkb3dubG9hZGluZyB0aGUgZmlybXdhcmUgKi8KKwlmd3MwID0gc2Rpb19yZWFkYihjYXJkLT5mdW5jLCBjYXJkLT5yZWctPmNhcmRfZndfc3RhdHVzMCwgJnJldCk7CiAJaWYgKHJldCkgewotCQlCVF9FUlIoIkZhaWxlZCB0byBkb3dubG9hZCBoZWxwZXIhIik7CisJCUJUX0VSUigiRmFpbGVkIHRvIHJlYWQgRlcgZG93bmxvYWRpbmcgc3RhdHVzISIpOwogCQlyZXQgPSAtRUlPOwogCQlnb3RvIGRvbmU7CiAJfQorCWlmIChmd3MwKSB7CisJCUJUX0RCRygiQlQgbm90IHRoZSB3aW5uZXIgKCUjeCkuIFNraXAgRlcgZG93bmxvYWRpbmciLCBmd3MwKTsKIAotCWlmIChidG1ydmxfc2Rpb19kb3dubG9hZF9md193X2hlbHBlcihjYXJkKSkgewotCQlCVF9FUlIoIkZhaWxlZCB0byBkb3dubG9hZCBmaXJtd2FyZSEiKTsKLQkJcmV0ID0gLUVJTzsKLQkJZ290byBkb25lOworCQkvKiBHaXZlIG90aGVyIGZ1bmN0aW9uIG1vcmUgdGltZSB0byBkb3dubG9hZCB0aGUgZmlybXdhcmUgKi8KKwkJcG9sbG51bSAqPSAxMDsKKwl9IGVsc2UgeworCQlpZiAoY2FyZC0+aGVscGVyKSB7CisJCQlyZXQgPSBidG1ydmxfc2Rpb19kb3dubG9hZF9oZWxwZXIoY2FyZCk7CisJCQlpZiAocmV0KSB7CisJCQkJQlRfRVJSKCJGYWlsZWQgdG8gZG93bmxvYWQgaGVscGVyISIpOworCQkJCXJldCA9IC1FSU87CisJCQkJZ290byBkb25lOworCQkJfQorCQl9CisKKwkJaWYgKGJ0bXJ2bF9zZGlvX2Rvd25sb2FkX2Z3X3dfaGVscGVyKGNhcmQpKSB7CisJCQlCVF9FUlIoIkZhaWxlZCB0byBkb3dubG9hZCBmaXJtd2FyZSEiKTsKKwkJCXJldCA9IC1FSU87CisJCQlnb3RvIGRvbmU7CisJCX0KIAl9CiAKLQlpZiAoYnRtcnZsX3NkaW9fdmVyaWZ5X2Z3X2Rvd25sb2FkKGNhcmQsIE1BWF9QT0xMX1RSSUVTKSkgeworCWlmIChidG1ydmxfc2Rpb192ZXJpZnlfZndfZG93bmxvYWQoY2FyZCwgcG9sbG51bSkpIHsKIAkJQlRfRVJSKCJGVyBmYWlsZWQgdG8gYmUgYWN0aXZlIGluIHRpbWUhIik7CiAJCXJldCA9IC1FVElNRURPVVQ7CiAJCWdvdG8gZG9uZTsKQEAgLTg2NCw3ICs5MjUsNyBAQAogCiAJc2Rpb19jbGFpbV9ob3N0KGNhcmQtPmZ1bmMpOwogCi0Jc2Rpb193cml0ZWIoY2FyZC0+ZnVuYywgSE9TVF9QT1dFUl9VUCwgQ09ORklHX1JFRywgJnJldCk7CisJc2Rpb193cml0ZWIoY2FyZC0+ZnVuYywgSE9TVF9QT1dFUl9VUCwgY2FyZC0+cmVnLT5jZmcsICZyZXQpOwogCiAJc2Rpb19yZWxlYXNlX2hvc3QoY2FyZC0+ZnVuYyk7CiAKQEAgLTg5Myw4ICs5NTQsMTAgQEAKIAogCWlmIChpZC0+ZHJpdmVyX2RhdGEpIHsKIAkJc3RydWN0IGJ0bXJ2bF9zZGlvX2RldmljZSAqZGF0YSA9ICh2b2lkICopIGlkLT5kcml2ZXJfZGF0YTsKLQkJY2FyZC0+aGVscGVyICAgPSBkYXRhLT5oZWxwZXI7CisJCWNhcmQtPmhlbHBlciA9IGRhdGEtPmhlbHBlcjsKIAkJY2FyZC0+ZmlybXdhcmUgPSBkYXRhLT5maXJtd2FyZTsKKwkJY2FyZC0+cmVnID0gZGF0YS0+cmVnOworCQljYXJkLT5zZF9ibGtzel9md19kbCA9IGRhdGEtPnNkX2Jsa3N6X2Z3X2RsOwogCX0KIAogCWlmIChidG1ydmxfc2Rpb19yZWdpc3Rlcl9kZXYoY2FyZCkgPCAwKSB7CkBAIC0xMDExLDMgKzEwNzQsNCBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwogTU9EVUxFX0ZJUk1XQVJFKCJzZDg2ODhfaGVscGVyLmJpbiIpOwogTU9EVUxFX0ZJUk1XQVJFKCJzZDg2ODguYmluIik7CitNT0RVTEVfRklSTVdBUkUoIm1ydmwvc2Q4Nzg3X3VhcHN0YS5iaW4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9zZGlvLmggYi9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfc2Rpby5oCmluZGV4IDI3MzI5ZjEuLjQzZDM1YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9zZGlvLmgKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX3NkaW8uaApAQCAtNDcsNDQgKzQ3LDQ2IEBACiAvKiBNYXggcmV0cnkgbnVtYmVyIG9mIENNRDUzIHdyaXRlICovCiAjZGVmaW5lIE1BWF9XUklURV9JT01FTV9SRVRSWQkJMgogCi0vKiBIb3N0IENvbnRyb2wgUmVnaXN0ZXJzICovCi0jZGVmaW5lIElPX1BPUlRfMF9SRUcJCQkweDAwCi0jZGVmaW5lIElPX1BPUlRfMV9SRUcJCQkweDAxCi0jZGVmaW5lIElPX1BPUlRfMl9SRUcJCQkweDAyCisvKiByZWdpc3RlciBiaXRtYXNrcyAqLworI2RlZmluZSBIT1NUX1BPV0VSX1VQCQkJCUJJVCgxKQorI2RlZmluZSBIT1NUX0NNRDUzX0ZJTgkJCQlCSVQoMikKIAotI2RlZmluZSBDT05GSUdfUkVHCQkJMHgwMwotI2RlZmluZSBIT1NUX1BPV0VSX1VQCQkJQklUKDEpCi0jZGVmaW5lIEhPU1RfQ01ENTNfRklOCQkJQklUKDIpCisjZGVmaW5lIEhJTV9ESVNBQkxFCQkJCTB4ZmYKKyNkZWZpbmUgSElNX0VOQUJMRQkJCQkoQklUKDApIHwgQklUKDEpKQogCi0jZGVmaW5lIEhPU1RfSU5UX01BU0tfUkVHCQkweDA0Ci0jZGVmaW5lIEhJTV9ESVNBQkxFCQkJMHhmZgotI2RlZmluZSBISU1fRU5BQkxFCQkJKEJJVCgwKSB8IEJJVCgxKSkKKyNkZWZpbmUgVVBfTERfSE9TVF9JTlRfU1RBVFVTCQkJQklUKDApCisjZGVmaW5lIEROX0xEX0hPU1RfSU5UX1NUQVRVUwkJCUJJVCgxKQogCi0jZGVmaW5lIEhPU1RfSU5UU1RBVFVTX1JFRwkJMHgwNQotI2RlZmluZSBVUF9MRF9IT1NUX0lOVF9TVEFUVVMJCUJJVCgwKQotI2RlZmluZSBETl9MRF9IT1NUX0lOVF9TVEFUVVMJCUJJVCgxKQorI2RlZmluZSBETl9MRF9DQVJEX1JEWQkJCQlCSVQoMCkKKyNkZWZpbmUgQ0FSRF9JT19SRUFEWQkJCQlCSVQoMykKIAotLyogQ2FyZCBDb250cm9sIFJlZ2lzdGVycyAqLwotI2RlZmluZSBTUV9SRUFEX0JBU0VfQUREUkVTU19BMF9SRUcgIAkweDEwCi0jZGVmaW5lIFNRX1JFQURfQkFTRV9BRERSRVNTX0ExX1JFRyAgCTB4MTEKKyNkZWZpbmUgRklSTVdBUkVfUkVBRFkJCQkJMHhmZWRjCiAKLSNkZWZpbmUgQ0FSRF9TVEFUVVNfUkVHICAgICAgICAgICAgICAJMHgyMAotI2RlZmluZSBETl9MRF9DQVJEX1JEWSAgICAgICAgICAgICAgIAlCSVQoMCkKLSNkZWZpbmUgQ0FSRF9JT19SRUFEWSAgICAgICAgICAgICAgCUJJVCgzKQogCi0jZGVmaW5lIENBUkRfRldfU1RBVFVTMF9SRUcJCTB4NDAKLSNkZWZpbmUgQ0FSRF9GV19TVEFUVVMxX1JFRwkJMHg0MQotI2RlZmluZSBGSVJNV0FSRV9SRUFEWQkJCTB4ZmVkYwotCi0jZGVmaW5lIENBUkRfUlhfTEVOX1JFRwkJCTB4NDIKLSNkZWZpbmUgQ0FSRF9SWF9VTklUX1JFRwkJMHg0MwotCitzdHJ1Y3QgYnRtcnZsX3NkaW9fY2FyZF9yZWcgeworCXU4IGNmZzsKKwl1OCBob3N0X2ludF9tYXNrOworCXU4IGhvc3RfaW50c3RhdHVzOworCXU4IGNhcmRfc3RhdHVzOworCXU4IHNxX3JlYWRfYmFzZV9hZGRyX2EwOworCXU4IHNxX3JlYWRfYmFzZV9hZGRyX2ExOworCXU4IGNhcmRfcmV2aXNpb247CisJdTggY2FyZF9md19zdGF0dXMwOworCXU4IGNhcmRfZndfc3RhdHVzMTsKKwl1OCBjYXJkX3J4X2xlbjsKKwl1OCBjYXJkX3J4X3VuaXQ7CisJdTggaW9fcG9ydF8wOworCXU4IGlvX3BvcnRfMTsKKwl1OCBpb19wb3J0XzI7Cit9OwogCiBzdHJ1Y3QgYnRtcnZsX3NkaW9fY2FyZCB7CiAJc3RydWN0IHNkaW9fZnVuYyAqZnVuYzsKIAl1MzIgaW9wb3J0OwogCWNvbnN0IGNoYXIgKmhlbHBlcjsKIAljb25zdCBjaGFyICpmaXJtd2FyZTsKKwljb25zdCBzdHJ1Y3QgYnRtcnZsX3NkaW9fY2FyZF9yZWcgKnJlZzsKKwl1MTYgc2RfYmxrc3pfZndfZGw7CiAJdTggcnhfdW5pdDsKIAlzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXY7CiB9OwpAQCAtOTIsNiArOTQsOCBAQAogc3RydWN0IGJ0bXJ2bF9zZGlvX2RldmljZSB7CiAJY29uc3QgY2hhciAqaGVscGVyOwogCWNvbnN0IGNoYXIgKmZpcm13YXJlOworCWNvbnN0IHN0cnVjdCBidG1ydmxfc2Rpb19jYXJkX3JlZyAqcmVnOworCXUxNiBzZF9ibGtzel9md19kbDsKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMKaW5kZXggNzYyYTUxMC4uYzJkZTg5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jCkBAIC0xMDQsNiArMTA0LDcgQEAKIAogCS8qIEF0aGVyb3MgMzAxMSB3aXRoIHNmbGFzaCBmaXJtd2FyZSAqLwogCXsgVVNCX0RFVklDRSgweDBjZjMsIDB4MzAwMiksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0lHTk9SRSB9LAorCXsgVVNCX0RFVklDRSgweDEzZDMsIDB4MzMwNCksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0lHTk9SRSB9LAogCiAJLyogQXRoZXJvcyBBUjkyODUgTWFsYmVjIHdpdGggc2ZsYXNoIGZpcm13YXJlICovCiAJeyBVU0JfREVWSUNFKDB4MDNmMCwgMHgzMTFkKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfSUdOT1JFIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfYXRoLmMgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfYXRoLmMKaW5kZXggYmQzNDQwNi4uNDA5MzkzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2F0aC5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9hdGguYwpAQCAtMjAxLDggKzIwMSwxMyBAQAogLyogUmVjdiBkYXRhICovCiBzdGF0aWMgaW50IGF0aF9yZWN2KHN0cnVjdCBoY2lfdWFydCAqaHUsIHZvaWQgKmRhdGEsIGludCBjb3VudCkKIHsKLQlpZiAoaGNpX3JlY3Zfc3RyZWFtX2ZyYWdtZW50KGh1LT5oZGV2LCBkYXRhLCBjb3VudCkgPCAwKQorCWludCByZXQ7CisKKwlyZXQgPSBoY2lfcmVjdl9zdHJlYW1fZnJhZ21lbnQoaHUtPmhkZXYsIGRhdGEsIGNvdW50KTsKKwlpZiAocmV0IDwgMCkgewogCQlCVF9FUlIoIkZyYW1lIFJlYXNzZW1ibHkgRmFpbGVkIik7CisJCXJldHVybiByZXQ7CisJfQogCiAJcmV0dXJuIGNvdW50OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2g0LmMgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDQuYwppbmRleCA3YjhhZDkzLi4yZmNkOGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDQuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDQuYwpAQCAtMTUxLDggKzE1MSwxMyBAQAogLyogUmVjdiBkYXRhICovCiBzdGF0aWMgaW50IGg0X3JlY3Yoc3RydWN0IGhjaV91YXJ0ICpodSwgdm9pZCAqZGF0YSwgaW50IGNvdW50KQogewotCWlmIChoY2lfcmVjdl9zdHJlYW1fZnJhZ21lbnQoaHUtPmhkZXYsIGRhdGEsIGNvdW50KSA8IDApCisJaW50IHJldDsKKworCXJldCA9IGhjaV9yZWN2X3N0cmVhbV9mcmFnbWVudChodS0+aGRldiwgZGF0YSwgY291bnQpOworCWlmIChyZXQgPCAwKSB7CiAJCUJUX0VSUigiRnJhbWUgUmVhc3NlbWJseSBGYWlsZWQiKTsKKwkJcmV0dXJuIHJldDsKKwl9CiAKIAlyZXR1cm4gY291bnQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jCmluZGV4IDQ4YWQyYTcuLmIzZjAxOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jCkBAIC0zNTUsMjQgKzM1NSwyOSBAQAogICogICAgICAgICAgICAgZmxhZ3MgICAgICAgIHBvaW50ZXIgdG8gZmxhZ3MgZm9yIGRhdGEKICAqICAgICAgICAgICAgIGNvdW50ICAgICAgICBjb3VudCBvZiByZWNlaXZlZCBkYXRhIGluIGJ5dGVzCiAgKiAgICAgCi0gKiBSZXR1cm4gVmFsdWU6ICAgIE5vbmUKKyAqIFJldHVybiBWYWx1ZTogICAgTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkCiAgKi8KLXN0YXRpYyB2b2lkIGhjaV91YXJ0X3R0eV9yZWNlaXZlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHU4ICpkYXRhLCBjaGFyICpmbGFncywgaW50IGNvdW50KQorc3RhdGljIHVuc2lnbmVkIGludCBoY2lfdWFydF90dHlfcmVjZWl2ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQljb25zdCB1OCAqZGF0YSwgY2hhciAqZmxhZ3MsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3QgaGNpX3VhcnQgKmh1ID0gKHZvaWQgKil0dHktPmRpc2NfZGF0YTsKKwlpbnQgcmVjZWl2ZWQ7CiAKIAlpZiAoIWh1IHx8IHR0eSAhPSBodS0+dHR5KQotCQlyZXR1cm47CisJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKCF0ZXN0X2JpdChIQ0lfVUFSVF9QUk9UT19TRVQsICZodS0+ZmxhZ3MpKQotCQlyZXR1cm47CisJCXJldHVybiAtRUlOVkFMOwogCiAJc3Bpbl9sb2NrKCZodS0+cnhfbG9jayk7Ci0JaHUtPnByb3RvLT5yZWN2KGh1LCAodm9pZCAqKSBkYXRhLCBjb3VudCk7Ci0JaHUtPmhkZXYtPnN0YXQuYnl0ZV9yeCArPSBjb3VudDsKKwlyZWNlaXZlZCA9IGh1LT5wcm90by0+cmVjdihodSwgKHZvaWQgKikgZGF0YSwgY291bnQpOworCWlmIChyZWNlaXZlZCA+IDApCisJCWh1LT5oZGV2LT5zdGF0LmJ5dGVfcnggKz0gcmVjZWl2ZWQ7CiAJc3Bpbl91bmxvY2soJmh1LT5yeF9sb2NrKTsKIAogCXR0eV91bnRocm90dGxlKHR0eSk7CisKKwlyZXR1cm4gcmVjZWl2ZWQ7CiB9CiAKIHN0YXRpYyBpbnQgaGNpX3VhcnRfcmVnaXN0ZXJfZGV2KHN0cnVjdCBoY2lfdWFydCAqaHUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYXBtLWVtdWxhdGlvbi5jIGIvZHJpdmVycy9jaGFyL2FwbS1lbXVsYXRpb24uYwppbmRleCA0NWI5ODdjLi41NDg3MDhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYXBtLWVtdWxhdGlvbi5jCisrKyBiL2RyaXZlcnMvY2hhci9hcG0tZW11bGF0aW9uLmMKQEAgLTEyNiw3ICsxMjYsNiBAQAogLyoKICAqIExvY2FsIHZhcmlhYmxlcwogICovCi1zdGF0aWMgREVGSU5FX01VVEVYKGFwbV9tdXRleCk7CiBzdGF0aWMgYXRvbWljX3Qgc3VzcGVuZF9hY2tzX3BlbmRpbmcgPSBBVE9NSUNfSU5JVCgwKTsKIHN0YXRpYyBhdG9taWNfdCB1c2Vyc3BhY2Vfbm90aWZpY2F0aW9uX2luaGliaXQgPSBBVE9NSUNfSU5JVCgwKTsKIHN0YXRpYyBpbnQgYXBtX2Rpc2FibGVkOwpAQCAtMjc1LDcgKzI3NCw2IEBACiAJaWYgKCFhcy0+c3VzZXIgfHwgIWFzLT53cml0ZXIpCiAJCXJldHVybiAtRVBFUk07CiAKLQltdXRleF9sb2NrKCZhcG1fbXV0ZXgpOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBBUE1fSU9DX1NVU1BFTkQ6CiAJCW11dGV4X2xvY2soJnN0YXRlX2xvY2spOwpAQCAtMzM2LDcgKzMzNCw2IEBACiAJCW11dGV4X3VubG9jaygmc3RhdGVfbG9jayk7CiAJCWJyZWFrOwogCX0KLQltdXRleF91bmxvY2soJmFwbV9tdXRleCk7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtMzcxLDcgKzM2OCw2IEBACiB7CiAJc3RydWN0IGFwbV91c2VyICphczsKIAotCW11dGV4X2xvY2soJmFwbV9tdXRleCk7CiAJYXMgPSBremFsbG9jKHNpemVvZigqYXMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoYXMpIHsKIAkJLyoKQEAgLTM5MSw3ICszODcsNiBAQAogCiAJCWZpbHAtPnByaXZhdGVfZGF0YSA9IGFzOwogCX0KLQltdXRleF91bmxvY2soJmFwbV9tdXRleCk7CiAKIAlyZXR1cm4gYXMgPyAwIDogLUVOT01FTTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9ic3IuYyBiL2RyaXZlcnMvY2hhci9ic3IuYwppbmRleCBhNGE2YzJmLi5jZjM5YmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYnNyLmMKKysrIGIvZHJpdmVycy9jaGFyL2Jzci5jCkBAIC0yOTUsNyArMjk1LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IGJzcl9pbml0KHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKLQlkZXZfdCBic3JfZGV2ID0gTUtERVYoYnNyX21ham9yLCAwKTsKKwlkZXZfdCBic3JfZGV2OwogCWludCByZXQgPSAtRU5PREVWOwogCWludCByZXN1bHQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vS2NvbmZpZwppbmRleCBiZWVjZDFjLi5hNjAwNDNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL0tjb25maWcKKysrIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9LY29uZmlnCkBAIC00OSw3ICs0OSw3IEBACiAKIGNvbmZpZyBIV19SQU5ET01fQU1ECiAJdHJpc3RhdGUgIkFNRCBIVyBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciBzdXBwb3J0IgotCWRlcGVuZHMgb24gSFdfUkFORE9NICYmIFg4NiAmJiBQQ0kKKwlkZXBlbmRzIG9uIEhXX1JBTkRPTSAmJiAoWDg2IHx8IFBQQ19NQVBMRSkgJiYgUENJCiAJZGVmYXVsdCBIV19SQU5ET00KIAktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBwcm92aWRlcyBrZXJuZWwtc2lkZSBzdXBwb3J0IGZvciB0aGUgUmFuZG9tIE51bWJlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9hbWQtcm5nLmMgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2FtZC1ybmcuYwppbmRleCAwZDhjNTc4Li5jNmFmMDM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2FtZC1ybmcuYworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2FtZC1ybmcuYwpAQCAtMTMzLDYgKzEzMywxMiBAQAogCXBtYmFzZSAmPSAweDAwMDBGRjAwOwogCWlmIChwbWJhc2UgPT0gMCkKIAkJZ290byBvdXQ7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihwbWJhc2UgKyAweEYwLCA4LCAiQU1EIEhXUk5HIikpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQU1EIEhXUk5HIHJlZ2lvbiAweCV4IGFscmVhZHkgaW4gdXNlIVxuIiwKKwkJCXBtYmFzZSArIDB4RjApOworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KIAlhbWRfcm5nLnByaXYgPSAodW5zaWduZWQgbG9uZylwbWJhc2U7CiAJYW1kX3BkZXYgPSBwZGV2OwogCkBAIC0xNDEsNiArMTQ3LDcgQEAKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIlJORyByZWdpc3RlcmluZyBmYWlsZWQgKCVkKVxuIiwKIAkJICAgICAgIGVycik7CisJCXJlbGVhc2VfcmVnaW9uKHBtYmFzZSArIDB4RjAsIDgpOwogCQlnb3RvIG91dDsKIAl9CiBvdXQ6CkBAIC0xNDksNiArMTU2LDggQEAKIAogc3RhdGljIHZvaWQgX19leGl0IG1vZF9leGl0KHZvaWQpCiB7CisJdTMyIHBtYmFzZSA9ICh1bnNpZ25lZCBsb25nKWFtZF9ybmcucHJpdjsKKwlyZWxlYXNlX3JlZ2lvbihwbWJhc2UgKyAweEYwLCA4KTsKIAlod3JuZ191bnJlZ2lzdGVyKCZhbWRfcm5nKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vS2NvbmZpZyBiL2RyaXZlcnMvY3J5cHRvL0tjb25maWcKaW5kZXggZTU0MTg1Mi4uYzY0YzM4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vS2NvbmZpZworKysgYi9kcml2ZXJzL2NyeXB0by9LY29uZmlnCkBAIC05MSw2ICs5MSw4IEBACiAJICBUaGlzIGlzIHRoZSBzMzkwIGhhcmR3YXJlIGFjY2VsZXJhdGVkIGltcGxlbWVudGF0aW9uIG9mIHRoZQogCSAgU0hBLTEgc2VjdXJlIGhhc2ggc3RhbmRhcmQgKEZJUFMgMTgwLTEvREZJUFMgMTgwLTIpLgogCisJICBJdCBpcyBhdmFpbGFibGUgYXMgb2Ygejk5MC4KKwogY29uZmlnIENSWVBUT19TSEEyNTZfUzM5MAogCXRyaXN0YXRlICJTSEEyNTYgZGlnZXN0IGFsZ29yaXRobSIKIAlkZXBlbmRzIG9uIFMzOTAKQEAgLTk5LDggKzEwMSw3IEBACiAJICBUaGlzIGlzIHRoZSBzMzkwIGhhcmR3YXJlIGFjY2VsZXJhdGVkIGltcGxlbWVudGF0aW9uIG9mIHRoZQogCSAgU0hBMjU2IHNlY3VyZSBoYXNoIHN0YW5kYXJkIChERklQUyAxODAtMikuCiAKLQkgIFRoaXMgdmVyc2lvbiBvZiBTSEEgaW1wbGVtZW50cyBhIDI1NiBiaXQgaGFzaCB3aXRoIDEyOCBiaXRzIG9mCi0JICBzZWN1cml0eSBhZ2FpbnN0IGNvbGxpc2lvbiBhdHRhY2tzLgorCSAgSXQgaXMgYXZhaWxhYmxlIGFzIG9mIHo5LgogCiBjb25maWcgQ1JZUFRPX1NIQTUxMl9TMzkwCiAJdHJpc3RhdGUgIlNIQTM4NCBhbmQgU0hBNTEyIGRpZ2VzdCBhbGdvcml0aG0iCkBAIC0xMTAsMTAgKzExMSw3IEBACiAJICBUaGlzIGlzIHRoZSBzMzkwIGhhcmR3YXJlIGFjY2VsZXJhdGVkIGltcGxlbWVudGF0aW9uIG9mIHRoZQogCSAgU0hBNTEyIHNlY3VyZSBoYXNoIHN0YW5kYXJkLgogCi0JICBUaGlzIHZlcnNpb24gb2YgU0hBIGltcGxlbWVudHMgYSA1MTIgYml0IGhhc2ggd2l0aCAyNTYgYml0cyBvZgotCSAgc2VjdXJpdHkgYWdhaW5zdCBjb2xsaXNpb24gYXR0YWNrcy4gVGhlIGNvZGUgYWxzbyBpbmNsdWRlcyBTSEEtMzg0LAotCSAgYSAzODQgYml0IGhhc2ggd2l0aCAxOTIgYml0cyBvZiBzZWN1cml0eSBhZ2FpbnN0IGNvbGxpc2lvbiBhdHRhY2tzLgotCisJICBJdCBpcyBhdmFpbGFibGUgYXMgb2YgejEwLgogCiBjb25maWcgQ1JZUFRPX0RFU19TMzkwCiAJdHJpc3RhdGUgIkRFUyBhbmQgVHJpcGxlIERFUyBjaXBoZXIgYWxnb3JpdGhtcyIKQEAgLTEyMSw5ICsxMTksMTIgQEAKIAlzZWxlY3QgQ1JZUFRPX0FMR0FQSQogCXNlbGVjdCBDUllQVE9fQkxLQ0lQSEVSCiAJaGVscAotCSAgVGhpcyB1cyB0aGUgczM5MCBoYXJkd2FyZSBhY2NlbGVyYXRlZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKKwkgIFRoaXMgaXMgdGhlIHMzOTAgaGFyZHdhcmUgYWNjZWxlcmF0ZWQgaW1wbGVtZW50YXRpb24gb2YgdGhlCiAJICBERVMgY2lwaGVyIGFsZ29yaXRobSAoRklQUyA0Ni0yKSwgYW5kIFRyaXBsZSBERVMgRURFIChGSVBTIDQ2LTMpLgogCisJICBBcyBvZiB6OTkwIHRoZSBFQ0IgYW5kIENCQyBtb2RlIGFyZSBoYXJkd2FyZSBhY2NlbGVyYXRlZC4KKwkgIEFzIG9mIHoxOTYgdGhlIENUUiBtb2RlIGlzIGhhcmR3YXJlIGFjY2VsZXJhdGVkLgorCiBjb25maWcgQ1JZUFRPX0FFU19TMzkwCiAJdHJpc3RhdGUgIkFFUyBjaXBoZXIgYWxnb3JpdGhtcyIKIAlkZXBlbmRzIG9uIFMzOTAKQEAgLTEzMSwyMCArMTMyLDE1IEBACiAJc2VsZWN0IENSWVBUT19CTEtDSVBIRVIKIAloZWxwCiAJICBUaGlzIGlzIHRoZSBzMzkwIGhhcmR3YXJlIGFjY2VsZXJhdGVkIGltcGxlbWVudGF0aW9uIG9mIHRoZQotCSAgQUVTIGNpcGhlciBhbGdvcml0aG1zIChGSVBTLTE5NykuIEFFUyB1c2VzIHRoZSBSaWpuZGFlbAotCSAgYWxnb3JpdGhtLgorCSAgQUVTIGNpcGhlciBhbGdvcml0aG1zIChGSVBTLTE5NykuCiAKLQkgIFJpam5kYWVsIGFwcGVhcnMgdG8gYmUgY29uc2lzdGVudGx5IGEgdmVyeSBnb29kIHBlcmZvcm1lciBpbgotCSAgYm90aCBoYXJkd2FyZSBhbmQgc29mdHdhcmUgYWNyb3NzIGEgd2lkZSByYW5nZSBvZiBjb21wdXRpbmcKLQkgIGVudmlyb25tZW50cyByZWdhcmRsZXNzIG9mIGl0cyB1c2UgaW4gZmVlZGJhY2sgb3Igbm9uLWZlZWRiYWNrCi0JICBtb2Rlcy4gSXRzIGtleSBzZXR1cCB0aW1lIGlzIGV4Y2VsbGVudCwgYW5kIGl0cyBrZXkgYWdpbGl0eSBpcwotCSAgZ29vZC4gUmlqbmRhZWwncyB2ZXJ5IGxvdyBtZW1vcnkgcmVxdWlyZW1lbnRzIG1ha2UgaXQgdmVyeSB3ZWxsCi0JICBzdWl0ZWQgZm9yIHJlc3RyaWN0ZWQtc3BhY2UgZW52aXJvbm1lbnRzLCBpbiB3aGljaCBpdCBhbHNvCi0JICBkZW1vbnN0cmF0ZXMgZXhjZWxsZW50IHBlcmZvcm1hbmNlLiBSaWpuZGFlbCdzIG9wZXJhdGlvbnMgYXJlCi0JICBhbW9uZyB0aGUgZWFzaWVzdCB0byBkZWZlbmQgYWdhaW5zdCBwb3dlciBhbmQgdGltaW5nIGF0dGFja3MuCi0KLQkgIE9uIHMzOTAgdGhlIFN5c3RlbSB6OS0xMDkgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgdGhlIGtleSBzaXplCi0JICBvZiAxMjggYml0LgorCSAgQXMgb2YgejkgdGhlIEVDQiBhbmQgQ0JDIG1vZGVzIGFyZSBoYXJkd2FyZSBhY2NlbGVyYXRlZAorCSAgZm9yIDEyOCBiaXQga2V5cy4KKwkgIEFzIG9mIHoxMCB0aGUgRUNCIGFuZCBDQkMgbW9kZXMgYXJlIGhhcmR3YXJlIGFjY2VsZXJhdGVkCisJICBmb3IgYWxsIEFFUyBrZXkgc2l6ZXMuCisJICBBcyBvZiB6MTk2IHRoZSBDVFIgbW9kZSBpcyBoYXJkd2FyZSBhY2NlbGVyYXRlZCBmb3IgYWxsIEFFUworCSAga2V5IHNpemVzIGFuZCBYVFMgbW9kZSBpcyBoYXJkd2FyZSBhY2NlbGVyYXRlZCBmb3IgMjU2IGFuZAorCSAgNTEyIGJpdCBrZXlzLgogCiBjb25maWcgUzM5MF9QUk5HCiAJdHJpc3RhdGUgIlBzZXVkbyByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBkZXZpY2UgZHJpdmVyIgpAQCAtMTU0LDggKzE1MCwyMCBAQAogCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgczM5MCBwc2V1ZG8gcmFuZG9tIG51bWJlcgogCSAgZ2VuZXJhdG9yLiBUaGUgUFJORyBpcyBwYXJ0IG9mIHRoZSBjcnlwdG9ncmFwaGljIHByb2Nlc3NvciBmdW5jdGlvbnMKIAkgIGFuZCB1c2VzIHRyaXBsZS1ERVMgdG8gZ2VuZXJhdGUgc2VjdXJlIHJhbmRvbSBudW1iZXJzIGxpa2UgdGhlCi0JICBBTlNJIFg5LjE3IHN0YW5kYXJkLiBUaGUgUFJORyBpcyB1c2FibGUgdmlhIHRoZSBjaGFyIGRldmljZQotCSAgL2Rldi9wcmFuZG9tLgorCSAgQU5TSSBYOS4xNyBzdGFuZGFyZC4gVXNlci1zcGFjZSBwcm9ncmFtcyBhY2Nlc3MgdGhlCisJICBwc2V1ZG8tcmFuZG9tLW51bWJlciBkZXZpY2UgdGhyb3VnaCB0aGUgY2hhciBkZXZpY2UgL2Rldi9wcmFuZG9tLgorCisJICBJdCBpcyBhdmFpbGFibGUgYXMgb2YgejkuCisKK2NvbmZpZyBDUllQVE9fR0hBU0hfUzM5MAorCXRyaXN0YXRlICJHSEFTSCBkaWdlc3QgYWxnb3JpdGhtIgorCWRlcGVuZHMgb24gUzM5MAorCXNlbGVjdCBDUllQVE9fSEFTSAorCWhlbHAKKwkgIFRoaXMgaXMgdGhlIHMzOTAgaGFyZHdhcmUgYWNjZWxlcmF0ZWQgaW1wbGVtZW50YXRpb24gb2YgdGhlCisJICBHSEFTSCBtZXNzYWdlIGRpZ2VzdCBhbGdvcml0aG0gZm9yIEdDTSAoR2Fsb2lzL0NvdW50ZXIgTW9kZSkuCisKKwkgIEl0IGlzIGF2YWlsYWJsZSBhcyBvZiB6MTk2LgogCiBjb25maWcgQ1JZUFRPX0RFVl9NVl9DRVNBCiAJdHJpc3RhdGUgIk1hcnZlbGwncyBDcnlwdG9ncmFwaGljIEVuZ2luZSIKQEAgLTIwMCw2ICsyMDgsOCBAQAogCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIGVuYWJsZSB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKIAkgIG9uIHRoZSBISUZOIDc5NXggY3J5cHRvIGFkYXB0ZXJzLgogCitzb3VyY2UgZHJpdmVycy9jcnlwdG8vY2FhbS9LY29uZmlnCisKIGNvbmZpZyBDUllQVE9fREVWX1RBTElUT1MKIAl0cmlzdGF0ZSAiVGFsaXRvcyBGcmVlc2NhbGUgU2VjdXJpdHkgRW5naW5lIChTRUMpIgogCXNlbGVjdCBDUllQVE9fQUxHQVBJCkBAIC0yNjksNCArMjc5LDE1IEBACiAKIAkgIFNheWluZyBtIGhlcmUgd2lsbCBidWlsZCBhIG1vZHVsZSBuYW1lZCBwaXBjb3hjZWxsX2NyeXB0by4KIAorY29uZmlnIENSWVBUT19ERVZfUzVQCisJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIFNhbXN1bmcgUzVQVjIxMCBjcnlwdG8gYWNjZWxlcmF0b3IiCisJZGVwZW5kcyBvbiBBUkNIX1M1UFYyMTAKKwlzZWxlY3QgQ1JZUFRPX0FFUworCXNlbGVjdCBDUllQVE9fQUxHQVBJCisJc2VsZWN0IENSWVBUT19CTEtDSVBIRVIKKwloZWxwCisJICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGhhdmUgc3VwcG9ydCBmb3IgUzVQIGNyeXB0byBhY2NlbGVyYXRpb24uCisJICBTZWxlY3QgdGhpcyB0byBvZmZsb2FkIFNhbXN1bmcgUzVQVjIxMCBvciBTNVBDMTEwIGZyb20gQUVTCisJICBhbGdvcml0aG1zIGV4ZWN1dGlvbi4KKwogZW5kaWYgIyBDUllQVE9fSFcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL01ha2VmaWxlIGIvZHJpdmVycy9jcnlwdG8vTWFrZWZpbGUKaW5kZXggNTIwM2UzNC4uNTNlYTUwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9jcnlwdG8vTWFrZWZpbGUKQEAgLTYsOCArNiwxMCBAQAogb2JqLSQoQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYKSArPSBoaWZuXzc5NXgubwogb2JqLSQoQ09ORklHX0NSWVBUT19ERVZfTVZfQ0VTQSkgKz0gbXZfY2VzYS5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0RFVl9UQUxJVE9TKSArPSB0YWxpdG9zLm8KK29iai0kKENPTkZJR19DUllQVE9fREVWX0ZTTF9DQUFNKSArPSBjYWFtLwogb2JqLSQoQ09ORklHX0NSWVBUT19ERVZfSVhQNFhYKSArPSBpeHA0eHhfY3J5cHRvLm8KIG9iai0kKENPTkZJR19DUllQVE9fREVWX1BQQzRYWCkgKz0gYW1jYy8KIG9iai0kKENPTkZJR19DUllQVE9fREVWX09NQVBfU0hBTSkgKz0gb21hcC1zaGFtLm8KIG9iai0kKENPTkZJR19DUllQVE9fREVWX09NQVBfQUVTKSArPSBvbWFwLWFlcy5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0RFVl9QSUNPWENFTEwpICs9IHBpY294Y2VsbF9jcnlwdG8ubworb2JqLSQoQ09ORklHX0NSWVBUT19ERVZfUzVQKSArPSBzNXAtc3NzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2NhYW0vS2NvbmZpZyBiL2RyaXZlcnMvY3J5cHRvL2NhYW0vS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDg3NmJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jcnlwdG8vY2FhbS9LY29uZmlnCkBAIC0wLDAgKzEsNzIgQEAKK2NvbmZpZyBDUllQVE9fREVWX0ZTTF9DQUFNCisJdHJpc3RhdGUgIkZyZWVzY2FsZSBDQUFNLU11bHRpY29yZSBkcml2ZXIgYmFja2VuZCIKKwlkZXBlbmRzIG9uIEZTTF9TT0MKKwloZWxwCisJICBFbmFibGVzIHRoZSBkcml2ZXIgbW9kdWxlIGZvciBGcmVlc2NhbGUncyBDcnlwdG9ncmFwaGljIEFjY2VsZXJhdG9yCisJICBhbmQgQXNzdXJhbmNlIE1vZHVsZSAoQ0FBTSksIGFsc28ga25vd24gYXMgdGhlIFNFQyB2ZXJzaW9uIDQgKFNFQzQpLgorCSAgVGhpcyBtb2R1bGUgYWRkcyBhIGpvYiByaW5nIG9wZXJhdGlvbiBpbnRlcmZhY2UsIGFuZCBjb25maWd1cmVzIGgvdworCSAgdG8gb3BlcmF0ZSBhcyBhIERQQUEgY29tcG9uZW50IGF1dG9tYXRpY2FsbHksIGRlcGVuZGluZworCSAgb24gaC93IGZlYXR1cmUgYXZhaWxhYmlsaXR5LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBjYWFtLgorCitjb25maWcgQ1JZUFRPX0RFVl9GU0xfQ0FBTV9SSU5HU0laRQorCWludCAiSm9iIFJpbmcgc2l6ZSIKKwlkZXBlbmRzIG9uIENSWVBUT19ERVZfRlNMX0NBQU0KKwlyYW5nZSAyIDkKKwlkZWZhdWx0ICI5IgorCWhlbHAKKwkgIFNlbGVjdCBzaXplIG9mIEpvYiBSaW5ncyBhcyBhIHBvd2VyIG9mIDIsIHdpdGhpbiB0aGUKKwkgIHJhbmdlIDItOSAocmluZyBzaXplIDQtNTEyKS4KKwkgIEV4YW1wbGVzOgorCQkyID0+IDQKKwkJMyA9PiA4CisJCTQgPT4gMTYKKwkJNSA9PiAzMgorCQk2ID0+IDY0CisJCTcgPT4gMTI4CisJCTggPT4gMjU2CisJCTkgPT4gNTEyCisKK2NvbmZpZyBDUllQVE9fREVWX0ZTTF9DQUFNX0lOVEMKKwlib29sICJKb2IgUmluZyBpbnRlcnJ1cHQgY29hbGVzY2luZyIKKwlkZXBlbmRzIG9uIENSWVBUT19ERVZfRlNMX0NBQU0KKwlkZWZhdWx0IHkKKwloZWxwCisJICBFbmFibGUgdGhlIEpvYiBSaW5nJ3MgaW50ZXJydXB0IGNvYWxlc2NpbmcgZmVhdHVyZS4KKworY29uZmlnIENSWVBUT19ERVZfRlNMX0NBQU1fSU5UQ19DT1VOVF9USExECisJaW50ICJKb2IgUmluZyBpbnRlcnJ1cHQgY29hbGVzY2luZyBjb3VudCB0aHJlc2hvbGQiCisJZGVwZW5kcyBvbiBDUllQVE9fREVWX0ZTTF9DQUFNX0lOVEMKKwlyYW5nZSAxIDI1NQorCWRlZmF1bHQgMjU1CisJaGVscAorCSAgU2VsZWN0IG51bWJlciBvZiBkZXNjcmlwdG9yIGNvbXBsZXRpb25zIHRvIHF1ZXVlIGJlZm9yZQorCSAgcmFpc2luZyBhbiBpbnRlcnJ1cHQsIGluIHRoZSByYW5nZSAxLTI1NS4gTm90ZSB0aGF0IGEgc2VsZWN0aW9uCisJICBvZiAxIGZ1bmN0aW9uYWxseSBkZWZlYXRzIHRoZSBjb2FsZXNjaW5nIGZlYXR1cmUsIGFuZCBhIHNlbGVjdGlvbgorCSAgZXF1YWwgb3IgZ3JlYXRlciB0aGFuIHRoZSBqb2IgcmluZyBzaXplIHdpbGwgZm9yY2UgdGltZW91dHMuCisKK2NvbmZpZyBDUllQVE9fREVWX0ZTTF9DQUFNX0lOVENfVElNRV9USExECisJaW50ICJKb2IgUmluZyBpbnRlcnJ1cHQgY29hbGVzY2luZyB0aW1lciB0aHJlc2hvbGQiCisJZGVwZW5kcyBvbiBDUllQVE9fREVWX0ZTTF9DQUFNX0lOVEMKKwlyYW5nZSAxIDY1NTM1CisJZGVmYXVsdCAyMDQ4CisJaGVscAorCSAgU2VsZWN0IG51bWJlciBvZiBidXMgY2xvY2tzLzY0IHRvIHRpbWVvdXQgaW4gdGhlIGNhc2UgdGhhdCBvbmUgb3IKKwkgIG1vcmUgZGVzY3JpcHRvciBjb21wbGV0aW9ucyBhcmUgcXVldWVkIHdpdGhvdXQgcmVhY2hpbmcgdGhlIGNvdW50CisJICB0aHJlc2hvbGQuIFJhbmdlIGlzIDEtNjU1MzUuCisKK2NvbmZpZyBDUllQVE9fREVWX0ZTTF9DQUFNX0NSWVBUT19BUEkKKwl0cmlzdGF0ZSAiUmVnaXN0ZXIgYWxnb3JpdGhtIGltcGxlbWVudGF0aW9ucyB3aXRoIHRoZSBDcnlwdG8gQVBJIgorCWRlcGVuZHMgb24gQ1JZUFRPX0RFVl9GU0xfQ0FBTQorCWRlZmF1bHQgeQorCXNlbGVjdCBDUllQVE9fQUxHQVBJCisJc2VsZWN0IENSWVBUT19BVVRIRU5DCisJaGVscAorCSAgU2VsZWN0aW5nIHRoaXMgd2lsbCBvZmZsb2FkIGNyeXB0byBmb3IgdXNlcnMgb2YgdGhlCisJICBzY2F0dGVybGlzdCBjcnlwdG8gQVBJIChzdWNoIGFzIHRoZSBsaW51eCBuYXRpdmUgSVBTZWMKKwkgIHN0YWNrKSB0byB0aGUgU0VDNCB2aWEgam9iIHJpbmcuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgY2FhbWFsZy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2NhYW0vTWFrZWZpbGUgYi9kcml2ZXJzL2NyeXB0by9jYWFtL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMzkwMTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NyeXB0by9jYWFtL01ha2VmaWxlCkBAIC0wLDAgKzEsOCBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIENBQU0gYmFja2VuZCBhbmQgZGVwZW5kZW50IGNvbXBvbmVudHMKKyMKKworb2JqLSQoQ09ORklHX0NSWVBUT19ERVZfRlNMX0NBQU0pICs9IGNhYW0ubworb2JqLSQoQ09ORklHX0NSWVBUT19ERVZfRlNMX0NBQU1fQ1JZUFRPX0FQSSkgKz0gY2FhbWFsZy5vCisKK2NhYW0tb2JqcyA6PSBjdHJsLm8ganIubyBlcnJvci5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9jYWFtL2NhYW1hbGcuYyBiL2RyaXZlcnMvY3J5cHRvL2NhYW0vY2FhbWFsZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZTY1ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NyeXB0by9jYWFtL2NhYW1hbGcuYwpAQCAtMCwwICsxLDEyNjggQEAKKy8qCisgKiBjYWFtIC0gRnJlZXNjYWxlIEZTTCBDQUFNIHN1cHBvcnQgZm9yIGNyeXB0byBBUEkKKyAqCisgKiBDb3B5cmlnaHQgMjAwOC0yMDExIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogQmFzZWQgb24gdGFsaXRvcyBjcnlwdG8gQVBJIGRyaXZlci4KKyAqCisgKiByZWxhdGlvbnNoaXAgb2Ygam9iIGRlc2NyaXB0b3JzIHRvIHNoYXJlZCBkZXNjcmlwdG9ycyAoU3RldmVDIERlYyAxMCAyMDA4KToKKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0KKyAqIHwgSm9iRGVzYyAjMSAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tPnwgIFNoYXJlRGVzYyAgfAorICogfCAqKHBhY2tldCAxKSB8ICAgICAgICAgICAgICAgICAgICAgfCAgIChQREIpICAgICB8CisgKiAtLS0tLS0tLS0tLS0tLS0gICAgICB8LS0tLS0tLS0tLS0tLT58ICAoaGFzaEtleSkgIHwKKyAqICAgICAgIC4gICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgKGNpcGhlcktleSkgfAorICogICAgICAgLiAgICAgICAgICAgICAgfCAgICB8LS0tLS0tLS0+fCAob3BlcmF0aW9uKSB8CisgKiAtLS0tLS0tLS0tLS0tLS0gICAgICB8ICAgIHwgICAgICAgICAtLS0tLS0tLS0tLS0tLS0KKyAqIHwgSm9iRGVzYyAjMiAgfC0tLS0tLXwgICAgfAorICogfCAqKHBhY2tldCAyKSB8ICAgICAgICAgICB8CisgKiAtLS0tLS0tLS0tLS0tLS0gICAgICAgICAgIHwKKyAqICAgICAgIC4gICAgICAgICAgICAgICAgICAgfAorICogICAgICAgLiAgICAgICAgICAgICAgICAgICB8CisgKiAtLS0tLS0tLS0tLS0tLS0gICAgICAgICAgIHwKKyAqIHwgSm9iRGVzYyAjMyAgfC0tLS0tLS0tLS0tLQorICogfCAqKHBhY2tldCAzKSB8CisgKiAtLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBUaGUgU2hhcmVkRGVzYyBuZXZlciBjaGFuZ2VzIGZvciBhIGNvbm5lY3Rpb24gdW5sZXNzIHJla2V5ZWQsIGJ1dAorICogZWFjaCBwYWNrZXQgd2lsbCBsaWtlbHkgYmUgaW4gYSBkaWZmZXJlbnQgcGxhY2UuIFNvIGFsbCB3ZSBuZWVkCisgKiB0byBrbm93IHRvIHByb2Nlc3MgdGhlIHBhY2tldCBpcyB3aGVyZSB0aGUgaW5wdXQgaXMsIHdoZXJlIHRoZQorICogb3V0cHV0IGdvZXMsIGFuZCB3aGF0IGNvbnRleHQgd2Ugd2FudCB0byBwcm9jZXNzIHdpdGguIENvbnRleHQgaXMKKyAqIGluIHRoZSBTaGFyZWREZXNjLCBwYWNrZXQgcmVmZXJlbmNlcyBpbiB0aGUgSm9iRGVzYy4KKyAqCisgKiBTbywgYSBqb2IgZGVzYyBsb29rcyBsaWtlOgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogfCBIZWFkZXIgICAgICAgICAgICB8CisgKiB8IFNoYXJlRGVzYyBQb2ludGVyIHwKKyAqIHwgU0VRX09VVF9QVFIgICAgICAgfAorICogfCAob3V0cHV0IGJ1ZmZlcikgICB8CisgKiB8IFNFUV9JTl9QVFIgICAgICAgIHwKKyAqIHwgKGlucHV0IGJ1ZmZlcikgICAgfAorICogfCBMT0FEICh0byBERUNPKSAgICB8CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAiY29tcGF0LmgiCisKKyNpbmNsdWRlICJyZWdzLmgiCisjaW5jbHVkZSAiaW50ZXJuLmgiCisjaW5jbHVkZSAiZGVzY19jb25zdHIuaCIKKyNpbmNsdWRlICJqci5oIgorI2luY2x1ZGUgImVycm9yLmgiCisKKy8qCisgKiBjcnlwdG8gYWxnCisgKi8KKyNkZWZpbmUgQ0FBTV9DUkFfUFJJT1JJVFkJCTMwMDAKKy8qIG1heCBrZXkgaXMgc3VtIG9mIEFFU19NQVhfS0VZX1NJWkUsIG1heCBzcGxpdCBrZXkgc2l6ZSAqLworI2RlZmluZSBDQUFNX01BWF9LRVlfU0laRQkJKEFFU19NQVhfS0VZX1NJWkUgKyBcCisJCQkJCSBTSEE1MTJfRElHRVNUX1NJWkUgKiAyKQorLyogbWF4IElWIGlzIG1heCBvZiBBRVNfQkxPQ0tfU0laRSwgREVTM19FREVfQkxPQ0tfU0laRSAqLworI2RlZmluZSBDQUFNX01BWF9JVl9MRU5HVEgJCTE2CisKKy8qIGxlbmd0aCBvZiBkZXNjcmlwdG9ycyB0ZXh0ICovCisjZGVmaW5lIERFU0NfQUVBRF9TSEFSRURfVEVYVF9MRU4JNAorI2RlZmluZSBERVNDX0FFQURfRU5DUllQVF9URVhUX0xFTiAJMjEKKyNkZWZpbmUgREVTQ19BRUFEX0RFQ1JZUFRfVEVYVF9MRU4gCTI0CisjZGVmaW5lIERFU0NfQUVBRF9HSVZFTkNSWVBUX1RFWFRfTEVOIAkyNworCisjaWZkZWYgREVCVUcKKy8qIGZvciBwcmludF9oZXhfZHVtcHMgd2l0aCBsaW5lIHJlZmVyZW5jZXMgKi8KKyNkZWZpbmUgeHN0cihzKSBzdHIocykKKyNkZWZpbmUgc3RyKHMpICNzCisjZGVmaW5lIGRlYnVnKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoZm9ybWF0LCBhcmcpCisjZWxzZQorI2RlZmluZSBkZWJ1Zyhmb3JtYXQsIGFyZy4uLikKKyNlbmRpZgorCisvKgorICogcGVyLXNlc3Npb24gY29udGV4dAorICovCitzdHJ1Y3QgY2FhbV9jdHggeworCXN0cnVjdCBkZXZpY2UgKmpyZGV2OworCXUzMiAqc2hfZGVzYzsKKwlkbWFfYWRkcl90IHNoYXJlZF9kZXNjX3BoeXM7CisJdTMyIGNsYXNzMV9hbGdfdHlwZTsKKwl1MzIgY2xhc3MyX2FsZ190eXBlOworCXUzMiBhbGdfb3A7CisJdTggKmtleTsKKwlkbWFfYWRkcl90IGtleV9waHlzOworCXVuc2lnbmVkIGludCBlbmNrZXlsZW47CisJdW5zaWduZWQgaW50IHNwbGl0X2tleV9sZW47CisJdW5zaWduZWQgaW50IHNwbGl0X2tleV9wYWRfbGVuOworCXVuc2lnbmVkIGludCBhdXRoc2l6ZTsKK307CisKK3N0YXRpYyBpbnQgYWVhZF9hdXRoZW5jX3NldGF1dGhzaXplKHN0cnVjdCBjcnlwdG9fYWVhZCAqYXV0aGVuYywKKwkJCQkgICAgdW5zaWduZWQgaW50IGF1dGhzaXplKQoreworCXN0cnVjdCBjYWFtX2N0eCAqY3R4ID0gY3J5cHRvX2FlYWRfY3R4KGF1dGhlbmMpOworCisJY3R4LT5hdXRoc2l6ZSA9IGF1dGhzaXplOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBzcGxpdF9rZXlfcmVzdWx0IHsKKwlzdHJ1Y3QgY29tcGxldGlvbiBjb21wbGV0aW9uOworCWludCBlcnI7Cit9OworCitzdGF0aWMgdm9pZCBzcGxpdF9rZXlfZG9uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiAqZGVzYywgdTMyIGVyciwKKwkJCSAgIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IHNwbGl0X2tleV9yZXN1bHQgKnJlcyA9IGNvbnRleHQ7CisKKyNpZmRlZiBERUJVRworCWRldl9lcnIoZGV2LCAiJXMgJWQ6IGVyciAweCV4XG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIGVycik7CisjZW5kaWYKKwlpZiAoZXJyKSB7CisJCWNoYXIgdG1wW0NBQU1fRVJST1JfU1RSX01BWF07CisKKwkJZGV2X2VycihkZXYsICIlMDh4OiAlc1xuIiwgZXJyLCBjYWFtX2pyX3N0cnN0YXR1cyh0bXAsIGVycikpOworCX0KKworCXJlcy0+ZXJyID0gZXJyOworCisJY29tcGxldGUoJnJlcy0+Y29tcGxldGlvbik7Cit9CisKKy8qCitnZXQgYSBzcGxpdCBpcGFkL29wYWQga2V5CisKK1NwbGl0IGtleSBnZW5lcmF0aW9uLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWzAwXSAweGIwODEwMDA4ICAgIGpvYmRlc2M6IHN0aWR4PTEgc2hhcmU9bmV2ZXIgbGVuPTgKK1swMV0gMHgwNDAwMDAxNCAgICAgICAga2V5OiBjbGFzczItPmtleXJlZyBsZW49MjAKKwkJCUAweGZmZTAxMDAwCitbMDNdIDB4ODQ0MTAwMTQgIG9wZXJhdGlvbjogY2xzMi1vcCBzaGExIGhtYWMgaW5pdCBkZWMKK1swNF0gMHgyNDk0MDAwMCAgICAgZmlmb2xkOiBjbGFzczIgbXNnZGF0YS1sYXN0MiBsZW49MCBpbW0KK1swNV0gMHhhNDAwMDAwMSAgICAgICBqdW1wOiBjbGFzczIgbG9jYWwgYWxsIC0+MSBbMDZdCitbMDZdIDB4NjQyNjAwMjggICAgZmlmb3N0cjogY2xhc3MyIG1kc3BsaXQtamRrIGxlbj00MAorCQkJQDB4ZmZlMDQwMDAKKyovCitzdGF0aWMgdTMyIGdlbl9zcGxpdF9rZXkoc3RydWN0IGNhYW1fY3R4ICpjdHgsIGNvbnN0IHU4ICprZXlfaW4sIHUzMiBhdXRoa2V5bGVuKQoreworCXN0cnVjdCBkZXZpY2UgKmpyZGV2ID0gY3R4LT5qcmRldjsKKwl1MzIgKmRlc2M7CisJc3RydWN0IHNwbGl0X2tleV9yZXN1bHQgcmVzdWx0OworCWRtYV9hZGRyX3QgZG1hX2FkZHJfaW4sIGRtYV9hZGRyX291dDsKKwlpbnQgcmV0ID0gMDsKKworCWRlc2MgPSBrbWFsbG9jKENBQU1fQ01EX1NaICogNiArIENBQU1fUFRSX1NaICogMiwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOworCisJaW5pdF9qb2JfZGVzYyhkZXNjLCAwKTsKKworCWRtYV9hZGRyX2luID0gZG1hX21hcF9zaW5nbGUoanJkZXYsICh2b2lkICopa2V5X2luLCBhdXRoa2V5bGVuLAorCQkJCSAgICAgRE1BX1RPX0RFVklDRSk7CisJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGpyZGV2LCBkbWFfYWRkcl9pbikpIHsKKwkJZGV2X2VycihqcmRldiwgInVuYWJsZSB0byBtYXAga2V5IGlucHV0IG1lbW9yeVxuIik7CisJCWtmcmVlKGRlc2MpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJYXBwZW5kX2tleShkZXNjLCBkbWFfYWRkcl9pbiwgYXV0aGtleWxlbiwgQ0xBU1NfMiB8CisJCSAgICAgICBLRVlfREVTVF9DTEFTU19SRUcpOworCisJLyogU2V0cyBNREhBIHVwIGludG8gYW4gSE1BQy1JTklUICovCisJYXBwZW5kX29wZXJhdGlvbihkZXNjLCBjdHgtPmFsZ19vcCB8IE9QX0FMR19ERUNSWVBUIHwKKwkJCSAgICAgT1BfQUxHX0FTX0lOSVQpOworCisJLyoKKwkgKiBkbyBhIEZJRk9fTE9BRCBvZiB6ZXJvLCB0aGlzIHdpbGwgdHJpZ2dlciB0aGUgaW50ZXJuYWwga2V5IGV4cGFuc2lvbgorCSAgIGludG8gYm90aCBwYWRzIGluc2lkZSBNREhBCisJICovCisJYXBwZW5kX2ZpZm9fbG9hZF9hc19pbW0oZGVzYywgTlVMTCwgMCwgTERTVF9DTEFTU18yX0NDQiB8CisJCQkJRklGT0xEX1RZUEVfTVNHIHwgRklGT0xEX1RZUEVfTEFTVDIpOworCisJLyoKKwkgKiBGSUZPX1NUT1JFIHdpdGggdGhlIGV4cGxpY2l0IHNwbGl0LWtleSBjb250ZW50IHN0b3JlCisJICogKDB4MjYgb3V0cHV0IHR5cGUpCisJICovCisJZG1hX2FkZHJfb3V0ID0gZG1hX21hcF9zaW5nbGUoanJkZXYsIGN0eC0+a2V5LCBjdHgtPnNwbGl0X2tleV9wYWRfbGVuLAorCQkJCSAgICAgIERNQV9GUk9NX0RFVklDRSk7CisJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGpyZGV2LCBkbWFfYWRkcl9vdXQpKSB7CisJCWRldl9lcnIoanJkZXYsICJ1bmFibGUgdG8gbWFwIGtleSBvdXRwdXQgbWVtb3J5XG4iKTsKKwkJa2ZyZWUoZGVzYyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlhcHBlbmRfZmlmb19zdG9yZShkZXNjLCBkbWFfYWRkcl9vdXQsIGN0eC0+c3BsaXRfa2V5X2xlbiwKKwkJCSAgTERTVF9DTEFTU18yX0NDQiB8IEZJRk9TVF9UWVBFX1NQTElUX0tFSyk7CisKKyNpZmRlZiBERUJVRworCXByaW50X2hleF9kdW1wKEtFUk5fRVJSLCAiY3R4LmtleUAieHN0cihfX0xJTkVfXykiOiAiLAorCQkgICAgICAgRFVNUF9QUkVGSVhfQUREUkVTUywgMTYsIDQsIGtleV9pbiwgYXV0aGtleWxlbiwgMSk7CisJcHJpbnRfaGV4X2R1bXAoS0VSTl9FUlIsICJqb2JkZXNjQCJ4c3RyKF9fTElORV9fKSI6ICIsCisJCSAgICAgICBEVU1QX1BSRUZJWF9BRERSRVNTLCAxNiwgNCwgZGVzYywgZGVzY19ieXRlcyhkZXNjKSwgMSk7CisjZW5kaWYKKworCXJlc3VsdC5lcnIgPSAwOworCWluaXRfY29tcGxldGlvbigmcmVzdWx0LmNvbXBsZXRpb24pOworCisJcmV0ID0gY2FhbV9qcl9lbnF1ZXVlKGpyZGV2LCBkZXNjLCBzcGxpdF9rZXlfZG9uZSwgJnJlc3VsdCk7CisJaWYgKCFyZXQpIHsKKwkJLyogaW4gcHJvZ3Jlc3MgKi8KKwkJd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZyZXN1bHQuY29tcGxldGlvbik7CisJCXJldCA9IHJlc3VsdC5lcnI7CisjaWZkZWYgREVCVUcKKwkJcHJpbnRfaGV4X2R1bXAoS0VSTl9FUlIsICJjdHgua2V5QCJ4c3RyKF9fTElORV9fKSI6ICIsCisJCQkgICAgICAgRFVNUF9QUkVGSVhfQUREUkVTUywgMTYsIDQsIGN0eC0+a2V5LAorCQkJICAgICAgIGN0eC0+c3BsaXRfa2V5X3BhZF9sZW4sIDEpOworI2VuZGlmCisJfQorCisJZG1hX3VubWFwX3NpbmdsZShqcmRldiwgZG1hX2FkZHJfb3V0LCBjdHgtPnNwbGl0X2tleV9wYWRfbGVuLAorCQkJIERNQV9GUk9NX0RFVklDRSk7CisJZG1hX3VubWFwX3NpbmdsZShqcmRldiwgZG1hX2FkZHJfaW4sIGF1dGhrZXlsZW4sIERNQV9UT19ERVZJQ0UpOworCisJa2ZyZWUoZGVzYyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGJ1aWxkX3NoX2Rlc2NfaXBzZWMoc3RydWN0IGNhYW1fY3R4ICpjdHgpCit7CisJc3RydWN0IGRldmljZSAqanJkZXYgPSBjdHgtPmpyZGV2OworCXUzMiAqc2hfZGVzYzsKKwl1MzIgKmp1bXBfY21kOworCWJvb2wga2V5c19maXRfaW5saW5lID0gMDsKKworCS8qCisJICogbGFyZ2VzdCBKb2IgRGVzY3JpcHRvciBhbmQgaXRzIFNoYXJlZCBEZXNjcmlwdG9yCisJICogbXVzdCBib3RoIGZpdCBpbnRvIHRoZSA2NC13b3JkIERlc2NyaXB0b3IgaC93IEJ1ZmZlcgorCSAqLworCWlmICgoREVTQ19BRUFEX0dJVkVOQ1JZUFRfVEVYVF9MRU4gKworCSAgICAgREVTQ19BRUFEX1NIQVJFRF9URVhUX0xFTikgKiBDQUFNX0NNRF9TWiArCisJICAgIGN0eC0+c3BsaXRfa2V5X3BhZF9sZW4gKyBjdHgtPmVuY2tleWxlbiA8PSBDQUFNX0RFU0NfQllURVNfTUFYKQorCQlrZXlzX2ZpdF9pbmxpbmUgPSAxOworCisJLyogYnVpbGQgc2hhcmVkIGRlc2NyaXB0b3IgZm9yIHRoaXMgc2Vzc2lvbiAqLworCXNoX2Rlc2MgPSBrbWFsbG9jKENBQU1fQ01EX1NaICogREVTQ19BRUFEX1NIQVJFRF9URVhUX0xFTiArCisJCQkgIGtleXNfZml0X2lubGluZSA/CisJCQkgIGN0eC0+c3BsaXRfa2V5X3BhZF9sZW4gKyBjdHgtPmVuY2tleWxlbiA6CisJCQkgIENBQU1fUFRSX1NaICogMiwgR0ZQX0RNQSB8IEdGUF9LRVJORUwpOworCWlmICghc2hfZGVzYykgeworCQlkZXZfZXJyKGpyZGV2LCAiY291bGQgbm90IGFsbG9jYXRlIHNoYXJlZCBkZXNjcmlwdG9yXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaW5pdF9zaF9kZXNjKHNoX2Rlc2MsIEhEUl9TQVZFQ1RYIHwgSERSX1NIQVJFX1NFUklBTCk7CisKKwlqdW1wX2NtZCA9IGFwcGVuZF9qdW1wKHNoX2Rlc2MsIENMQVNTX0JPVEggfCBKVU1QX1RFU1RfQUxMIHwKKwkJCSAgICAgICBKVU1QX0NPTkRfU0hSRCB8IEpVTVBfQ09ORF9TRUxGKTsKKworCS8qCisJICogcHJvY2VzcyBrZXlzLCBzdGFydGluZyB3aXRoIGNsYXNzIDIvYXV0aGVudGljYXRpb24uCisJICovCisJaWYgKGtleXNfZml0X2lubGluZSkgeworCQlhcHBlbmRfa2V5X2FzX2ltbShzaF9kZXNjLCBjdHgtPmtleSwgY3R4LT5zcGxpdF9rZXlfcGFkX2xlbiwKKwkJCQkgIGN0eC0+c3BsaXRfa2V5X2xlbiwKKwkJCQkgIENMQVNTXzIgfCBLRVlfREVTVF9NREhBX1NQTElUIHwgS0VZX0VOQyk7CisKKwkJYXBwZW5kX2tleV9hc19pbW0oc2hfZGVzYywgKHZvaWQgKiljdHgtPmtleSArCisJCQkJICBjdHgtPnNwbGl0X2tleV9wYWRfbGVuLCBjdHgtPmVuY2tleWxlbiwKKwkJCQkgIGN0eC0+ZW5ja2V5bGVuLCBDTEFTU18xIHwgS0VZX0RFU1RfQ0xBU1NfUkVHKTsKKwl9IGVsc2UgeworCQlhcHBlbmRfa2V5KHNoX2Rlc2MsIGN0eC0+a2V5X3BoeXMsIGN0eC0+c3BsaXRfa2V5X2xlbiwgQ0xBU1NfMiB8CisJCQkgICBLRVlfREVTVF9NREhBX1NQTElUIHwgS0VZX0VOQyk7CisJCWFwcGVuZF9rZXkoc2hfZGVzYywgY3R4LT5rZXlfcGh5cyArIGN0eC0+c3BsaXRfa2V5X3BhZF9sZW4sCisJCQkgICBjdHgtPmVuY2tleWxlbiwgQ0xBU1NfMSB8IEtFWV9ERVNUX0NMQVNTX1JFRyk7CisJfQorCisJLyogdXBkYXRlIGp1bXAgY21kIG5vdyB0aGF0IHdlIGFyZSBhdCB0aGUganVtcCB0YXJnZXQgKi8KKwlzZXRfanVtcF90Z3RfaGVyZShzaF9kZXNjLCBqdW1wX2NtZCk7CisKKwljdHgtPnNoYXJlZF9kZXNjX3BoeXMgPSBkbWFfbWFwX3NpbmdsZShqcmRldiwgc2hfZGVzYywKKwkJCQkJICAgICAgIGRlc2NfYnl0ZXMoc2hfZGVzYyksCisJCQkJCSAgICAgICBETUFfVE9fREVWSUNFKTsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoanJkZXYsIGN0eC0+c2hhcmVkX2Rlc2NfcGh5cykpIHsKKwkJZGV2X2VycihqcmRldiwgInVuYWJsZSB0byBtYXAgc2hhcmVkIGRlc2NyaXB0b3JcbiIpOworCQlrZnJlZShzaF9kZXNjKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJY3R4LT5zaF9kZXNjID0gc2hfZGVzYzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFlYWRfYXV0aGVuY19zZXRrZXkoc3RydWN0IGNyeXB0b19hZWFkICphZWFkLAorCQkJICAgICAgIGNvbnN0IHU4ICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4pCit7CisJLyogU2l6ZXMgZm9yIE1ESEEgcGFkcyAoKm5vdCoga2V5cyk6IE1ENSwgU0hBMSwgMjI0LCAyNTYsIDM4NCwgNTEyICovCisJc3RhdGljIGNvbnN0IHU4IG1kcGFkbGVuW10gPSB7IDE2LCAyMCwgMzIsIDMyLCA2NCwgNjQgfTsKKwlzdHJ1Y3QgY2FhbV9jdHggKmN0eCA9IGNyeXB0b19hZWFkX2N0eChhZWFkKTsKKwlzdHJ1Y3QgZGV2aWNlICpqcmRldiA9IGN0eC0+anJkZXY7CisJc3RydWN0IHJ0YXR0ciAqcnRhID0gKHZvaWQgKilrZXk7CisJc3RydWN0IGNyeXB0b19hdXRoZW5jX2tleV9wYXJhbSAqcGFyYW07CisJdW5zaWduZWQgaW50IGF1dGhrZXlsZW47CisJdW5zaWduZWQgaW50IGVuY2tleWxlbjsKKwlpbnQgcmV0ID0gMDsKKworCXBhcmFtID0gUlRBX0RBVEEocnRhKTsKKwllbmNrZXlsZW4gPSBiZTMyX3RvX2NwdShwYXJhbS0+ZW5ja2V5bGVuKTsKKworCWtleSArPSBSVEFfQUxJR04ocnRhLT5ydGFfbGVuKTsKKwlrZXlsZW4gLT0gUlRBX0FMSUdOKHJ0YS0+cnRhX2xlbik7CisKKwlpZiAoa2V5bGVuIDwgZW5ja2V5bGVuKQorCQlnb3RvIGJhZGtleTsKKworCWF1dGhrZXlsZW4gPSBrZXlsZW4gLSBlbmNrZXlsZW47CisKKwlpZiAoa2V5bGVuID4gQ0FBTV9NQVhfS0VZX1NJWkUpCisJCWdvdG8gYmFka2V5OworCisJLyogUGljayBjbGFzcyAyIGtleSBsZW5ndGggZnJvbSBhbGdvcml0aG0gc3VibWFzayAqLworCWN0eC0+c3BsaXRfa2V5X2xlbiA9IG1kcGFkbGVuWyhjdHgtPmFsZ19vcCAmIE9QX0FMR19BTEdTRUxfU1VCTUFTSykgPj4KKwkJCQkgICAgICBPUF9BTEdfQUxHU0VMX1NISUZUXSAqIDI7CisJY3R4LT5zcGxpdF9rZXlfcGFkX2xlbiA9IEFMSUdOKGN0eC0+c3BsaXRfa2V5X2xlbiwgMTYpOworCisjaWZkZWYgREVCVUcKKwlwcmludGsoS0VSTl9FUlIgImtleWxlbiAlZCBlbmNrZXlsZW4gJWQgYXV0aGtleWxlbiAlZFxuIiwKKwkgICAgICAga2V5bGVuLCBlbmNrZXlsZW4sIGF1dGhrZXlsZW4pOworCXByaW50ayhLRVJOX0VSUiAic3BsaXRfa2V5X2xlbiAlZCBzcGxpdF9rZXlfcGFkX2xlbiAlZFxuIiwKKwkgICAgICAgY3R4LT5zcGxpdF9rZXlfbGVuLCBjdHgtPnNwbGl0X2tleV9wYWRfbGVuKTsKKwlwcmludF9oZXhfZHVtcChLRVJOX0VSUiwgImtleSBpbiBAInhzdHIoX19MSU5FX18pIjogIiwKKwkJICAgICAgIERVTVBfUFJFRklYX0FERFJFU1MsIDE2LCA0LCBrZXksIGtleWxlbiwgMSk7CisjZW5kaWYKKwljdHgtPmtleSA9IGttYWxsb2MoY3R4LT5zcGxpdF9rZXlfcGFkX2xlbiArIGVuY2tleWxlbiwKKwkJCSAgIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwlpZiAoIWN0eC0+a2V5KSB7CisJCWRldl9lcnIoanJkZXYsICJjb3VsZCBub3QgYWxsb2NhdGUga2V5IG91dHB1dCBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXQgPSBnZW5fc3BsaXRfa2V5KGN0eCwga2V5LCBhdXRoa2V5bGVuKTsKKwlpZiAocmV0KSB7CisJCWtmcmVlKGN0eC0+a2V5KTsKKwkJZ290byBiYWRrZXk7CisJfQorCisJLyogcG9zdHBlbmQgZW5jcnlwdGlvbiBrZXkgdG8gYXV0aCBzcGxpdCBrZXkgKi8KKwltZW1jcHkoY3R4LT5rZXkgKyBjdHgtPnNwbGl0X2tleV9wYWRfbGVuLCBrZXkgKyBhdXRoa2V5bGVuLCBlbmNrZXlsZW4pOworCisJY3R4LT5rZXlfcGh5cyA9IGRtYV9tYXBfc2luZ2xlKGpyZGV2LCBjdHgtPmtleSwgY3R4LT5zcGxpdF9rZXlfcGFkX2xlbiArCisJCQkJICAgICAgIGVuY2tleWxlbiwgRE1BX1RPX0RFVklDRSk7CisJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGpyZGV2LCBjdHgtPmtleV9waHlzKSkgeworCQlkZXZfZXJyKGpyZGV2LCAidW5hYmxlIHRvIG1hcCBrZXkgaS9vIG1lbW9yeVxuIik7CisJCWtmcmVlKGN0eC0+a2V5KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorI2lmZGVmIERFQlVHCisJcHJpbnRfaGV4X2R1bXAoS0VSTl9FUlIsICJjdHgua2V5QCJ4c3RyKF9fTElORV9fKSI6ICIsCisJCSAgICAgICBEVU1QX1BSRUZJWF9BRERSRVNTLCAxNiwgNCwgY3R4LT5rZXksCisJCSAgICAgICBjdHgtPnNwbGl0X2tleV9wYWRfbGVuICsgZW5ja2V5bGVuLCAxKTsKKyNlbmRpZgorCisJY3R4LT5lbmNrZXlsZW4gPSBlbmNrZXlsZW47CisKKwlyZXQgPSBidWlsZF9zaF9kZXNjX2lwc2VjKGN0eCk7CisJaWYgKHJldCkgeworCQlkbWFfdW5tYXBfc2luZ2xlKGpyZGV2LCBjdHgtPmtleV9waHlzLCBjdHgtPnNwbGl0X2tleV9wYWRfbGVuICsKKwkJCQkgZW5ja2V5bGVuLCBETUFfVE9fREVWSUNFKTsKKwkJa2ZyZWUoY3R4LT5rZXkpOworCX0KKworCXJldHVybiByZXQ7CitiYWRrZXk6CisJY3J5cHRvX2FlYWRfc2V0X2ZsYWdzKGFlYWQsIENSWVBUT19URk1fUkVTX0JBRF9LRVlfTEVOKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RydWN0IGxpbmtfdGJsX2VudHJ5IHsKKwl1NjQgcHRyOworCXUzMiBsZW47CisJdTggcmVzZXJ2ZWQ7CisJdTggYnVmX3Bvb2xfaWQ7CisJdTE2IG9mZnNldDsKK307CisKKy8qCisgKiBpcHNlY19lc3BfZWRlc2MgLSBzL3ctZXh0ZW5kZWQgaXBzZWNfZXNwIGRlc2NyaXB0b3IKKyAqIEBzcmNfbmVudHM6IG51bWJlciBvZiBzZWdtZW50cyBpbiBpbnB1dCBzY2F0dGVybGlzdAorICogQGRzdF9uZW50czogbnVtYmVyIG9mIHNlZ21lbnRzIGluIG91dHB1dCBzY2F0dGVybGlzdAorICogQGFzc29jX25lbnRzOiBudW1iZXIgb2Ygc2VnbWVudHMgaW4gYXNzb2NpYXRlZCBkYXRhIChTUEkrU2VxKSBzY2F0dGVybGlzdAorICogQGRlc2M6IGgvdyBkZXNjcmlwdG9yICh2YXJpYWJsZSBsZW5ndGg7IG11c3Qgbm90IGV4Y2VlZCBNQVhfQ0FBTV9ERVNDU0laRSkKKyAqIEBsaW5rX3RibF9ieXRlczogbGVuZ3RoIG9mIGRtYSBtYXBwZWQgbGlua190Ymwgc3BhY2UKKyAqIEBsaW5rX3RibF9kbWE6IGJ1cyBwaHlzaWNhbCBtYXBwZWQgYWRkcmVzcyBvZiBoL3cgbGluayB0YWJsZQorICogQGh3X2Rlc2M6IHRoZSBoL3cgam9iIGRlc2NyaXB0b3IgZm9sbG93ZWQgYnkgYW55IHJlZmVyZW5jZWQgbGluayB0YWJsZXMKKyAqLworc3RydWN0IGlwc2VjX2VzcF9lZGVzYyB7CisJaW50IGFzc29jX25lbnRzOworCWludCBzcmNfbmVudHM7CisJaW50IGRzdF9uZW50czsKKwlpbnQgbGlua190YmxfYnl0ZXM7CisJZG1hX2FkZHJfdCBsaW5rX3RibF9kbWE7CisJc3RydWN0IGxpbmtfdGJsX2VudHJ5ICpsaW5rX3RibDsKKwl1MzIgaHdfZGVzY1swXTsKK307CisKK3N0YXRpYyB2b2lkIGlwc2VjX2VzcF91bm1hcChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGlwc2VjX2VzcF9lZGVzYyAqZWRlc2MsCisJCQkgICAgc3RydWN0IGFlYWRfcmVxdWVzdCAqYXJlcSkKK3sKKwlkbWFfdW5tYXBfc2coZGV2LCBhcmVxLT5hc3NvYywgZWRlc2MtPmFzc29jX25lbnRzLCBETUFfVE9fREVWSUNFKTsKKworCWlmICh1bmxpa2VseShhcmVxLT5kc3QgIT0gYXJlcS0+c3JjKSkgeworCQlkbWFfdW5tYXBfc2coZGV2LCBhcmVxLT5zcmMsIGVkZXNjLT5zcmNfbmVudHMsCisJCQkgICAgIERNQV9UT19ERVZJQ0UpOworCQlkbWFfdW5tYXBfc2coZGV2LCBhcmVxLT5kc3QsIGVkZXNjLT5kc3RfbmVudHMsCisJCQkgICAgIERNQV9GUk9NX0RFVklDRSk7CisJfSBlbHNlIHsKKwkJZG1hX3VubWFwX3NnKGRldiwgYXJlcS0+c3JjLCBlZGVzYy0+c3JjX25lbnRzLAorCQkJICAgICBETUFfQklESVJFQ1RJT05BTCk7CisJfQorCisJaWYgKGVkZXNjLT5saW5rX3RibF9ieXRlcykKKwkJZG1hX3VubWFwX3NpbmdsZShkZXYsIGVkZXNjLT5saW5rX3RibF9kbWEsCisJCQkJIGVkZXNjLT5saW5rX3RibF9ieXRlcywKKwkJCQkgRE1BX1RPX0RFVklDRSk7Cit9CisKKy8qCisgKiBpcHNlY19lc3AgZGVzY3JpcHRvciBjYWxsYmFja3MKKyAqLworc3RhdGljIHZvaWQgaXBzZWNfZXNwX2VuY3J5cHRfZG9uZShzdHJ1Y3QgZGV2aWNlICpqcmRldiwgdTMyICpkZXNjLCB1MzIgZXJyLAorCQkJCSAgIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IGFlYWRfcmVxdWVzdCAqYXJlcSA9IGNvbnRleHQ7CisJc3RydWN0IGlwc2VjX2VzcF9lZGVzYyAqZWRlc2M7CisjaWZkZWYgREVCVUcKKwlzdHJ1Y3QgY3J5cHRvX2FlYWQgKmFlYWQgPSBjcnlwdG9fYWVhZF9yZXF0Zm0oYXJlcSk7CisJaW50IGl2c2l6ZSA9IGNyeXB0b19hZWFkX2l2c2l6ZShhZWFkKTsKKwlzdHJ1Y3QgY2FhbV9jdHggKmN0eCA9IGNyeXB0b19hZWFkX2N0eChhZWFkKTsKKworCWRldl9lcnIoanJkZXYsICIlcyAlZDogZXJyIDB4JXhcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgZXJyKTsKKyNlbmRpZgorCWVkZXNjID0gKHN0cnVjdCBpcHNlY19lc3BfZWRlc2MgKikoKGNoYXIgKilkZXNjIC0KKwkJIG9mZnNldG9mKHN0cnVjdCBpcHNlY19lc3BfZWRlc2MsIGh3X2Rlc2MpKTsKKworCWlmIChlcnIpIHsKKwkJY2hhciB0bXBbQ0FBTV9FUlJPUl9TVFJfTUFYXTsKKworCQlkZXZfZXJyKGpyZGV2LCAiJTA4eDogJXNcbiIsIGVyciwgY2FhbV9qcl9zdHJzdGF0dXModG1wLCBlcnIpKTsKKwl9CisKKwlpcHNlY19lc3BfdW5tYXAoanJkZXYsIGVkZXNjLCBhcmVxKTsKKworI2lmZGVmIERFQlVHCisJcHJpbnRfaGV4X2R1bXAoS0VSTl9FUlIsICJhc3NvYyAgQCJ4c3RyKF9fTElORV9fKSI6ICIsCisJCSAgICAgICBEVU1QX1BSRUZJWF9BRERSRVNTLCAxNiwgNCwgc2dfdmlydChhcmVxLT5hc3NvYyksCisJCSAgICAgICBhcmVxLT5hc3NvY2xlbiAsIDEpOworCXByaW50X2hleF9kdW1wKEtFUk5fRVJSLCAiZHN0aXYgIEAieHN0cihfX0xJTkVfXykiOiAiLAorCQkgICAgICAgRFVNUF9QUkVGSVhfQUREUkVTUywgMTYsIDQsIHNnX3ZpcnQoYXJlcS0+c3JjKSAtIGl2c2l6ZSwKKwkJICAgICAgIGVkZXNjLT5zcmNfbmVudHMgPyAxMDAgOiBpdnNpemUsIDEpOworCXByaW50X2hleF9kdW1wKEtFUk5fRVJSLCAiZHN0ICAgIEAieHN0cihfX0xJTkVfXykiOiAiLAorCQkgICAgICAgRFVNUF9QUkVGSVhfQUREUkVTUywgMTYsIDQsIHNnX3ZpcnQoYXJlcS0+c3JjKSwKKwkJICAgICAgIGVkZXNjLT5zcmNfbmVudHMgPyAxMDAgOiBhcmVxLT5jcnlwdGxlbiArCisJCSAgICAgICBjdHgtPmF1dGhzaXplICsgNCwgMSk7CisjZW5kaWYKKworCWtmcmVlKGVkZXNjKTsKKworCWFlYWRfcmVxdWVzdF9jb21wbGV0ZShhcmVxLCBlcnIpOworfQorCitzdGF0aWMgdm9pZCBpcHNlY19lc3BfZGVjcnlwdF9kb25lKHN0cnVjdCBkZXZpY2UgKmpyZGV2LCB1MzIgKmRlc2MsIHUzMiBlcnIsCisJCQkJICAgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICphcmVxID0gY29udGV4dDsKKwlzdHJ1Y3QgaXBzZWNfZXNwX2VkZXNjICplZGVzYzsKKyNpZmRlZiBERUJVRworCXN0cnVjdCBjcnlwdG9fYWVhZCAqYWVhZCA9IGNyeXB0b19hZWFkX3JlcXRmbShhcmVxKTsKKwlzdHJ1Y3QgY2FhbV9jdHggKmN0eCA9IGNyeXB0b19hZWFkX2N0eChhZWFkKTsKKworCWRldl9lcnIoanJkZXYsICIlcyAlZDogZXJyIDB4JXhcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgZXJyKTsKKyNlbmRpZgorCWVkZXNjID0gKHN0cnVjdCBpcHNlY19lc3BfZWRlc2MgKikoKGNoYXIgKilkZXNjIC0KKwkJIG9mZnNldG9mKHN0cnVjdCBpcHNlY19lc3BfZWRlc2MsIGh3X2Rlc2MpKTsKKworCWlmIChlcnIpIHsKKwkJY2hhciB0bXBbQ0FBTV9FUlJPUl9TVFJfTUFYXTsKKworCQlkZXZfZXJyKGpyZGV2LCAiJTA4eDogJXNcbiIsIGVyciwgY2FhbV9qcl9zdHJzdGF0dXModG1wLCBlcnIpKTsKKwl9CisKKwlpcHNlY19lc3BfdW5tYXAoanJkZXYsIGVkZXNjLCBhcmVxKTsKKworCS8qCisJICogdmVyaWZ5IGh3IGF1dGggY2hlY2sgcGFzc2VkIGVsc2UgcmV0dXJuIC1FQkFETVNHCisJICovCisJaWYgKChlcnIgJiBKUlNUQV9DQ0JFUlJfRVJSSURfTUFTSykgPT0gSlJTVEFfQ0NCRVJSX0VSUklEX0lDVkNISykKKwkJZXJyID0gLUVCQURNU0c7CisKKyNpZmRlZiBERUJVRworCXByaW50X2hleF9kdW1wKEtFUk5fRVJSLCAiaXBoZHJvdXRAInhzdHIoX19MSU5FX18pIjogIiwKKwkJICAgICAgIERVTVBfUFJFRklYX0FERFJFU1MsIDE2LCA0LAorCQkgICAgICAgKChjaGFyICopc2dfdmlydChhcmVxLT5hc3NvYykgLSBzaXplb2Yoc3RydWN0IGlwaGRyKSksCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGlwaGRyKSArIGFyZXEtPmFzc29jbGVuICsKKwkJICAgICAgICgoYXJlcS0+Y3J5cHRsZW4gPiAxNTAwKSA/IDE1MDAgOiBhcmVxLT5jcnlwdGxlbikgKworCQkgICAgICAgY3R4LT5hdXRoc2l6ZSArIDM2LCAxKTsKKwlpZiAoIWVyciAmJiBlZGVzYy0+bGlua190YmxfYnl0ZXMpIHsKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IHNnX2xhc3QoYXJlcS0+c3JjLCBlZGVzYy0+c3JjX25lbnRzKTsKKwkJcHJpbnRfaGV4X2R1bXAoS0VSTl9FUlIsICJzZ2xhc3RvdXRAInhzdHIoX19MSU5FX18pIjogIiwKKwkJCSAgICAgICBEVU1QX1BSRUZJWF9BRERSRVNTLCAxNiwgNCwgc2dfdmlydChzZyksCisJCQlzZy0+bGVuZ3RoICsgY3R4LT5hdXRoc2l6ZSArIDE2LCAxKTsKKwl9CisjZW5kaWYKKwlrZnJlZShlZGVzYyk7CisKKwlhZWFkX3JlcXVlc3RfY29tcGxldGUoYXJlcSwgZXJyKTsKK30KKworLyoKKyAqIGNvbnZlcnQgc2NhdHRlcmxpc3QgdG8gaC93IGxpbmsgdGFibGUgZm9ybWF0CisgKiBzY2F0dGVybGlzdCBtdXN0IGhhdmUgYmVlbiBwcmV2aW91c2x5IGRtYSBtYXBwZWQKKyAqLworc3RhdGljIHZvaWQgc2dfdG9fbGlua190Ymwoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IHNnX2NvdW50LAorCQkJICAgc3RydWN0IGxpbmtfdGJsX2VudHJ5ICpsaW5rX3RibF9wdHIsIHUzMiBvZmZzZXQpCit7CisJd2hpbGUgKHNnX2NvdW50KSB7CisJCWxpbmtfdGJsX3B0ci0+cHRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOworCQlsaW5rX3RibF9wdHItPmxlbiA9IHNnX2RtYV9sZW4oc2cpOworCQlsaW5rX3RibF9wdHItPnJlc2VydmVkID0gMDsKKwkJbGlua190YmxfcHRyLT5idWZfcG9vbF9pZCA9IDA7CisJCWxpbmtfdGJsX3B0ci0+b2Zmc2V0ID0gb2Zmc2V0OworCQlsaW5rX3RibF9wdHIrKzsKKwkJc2cgPSBzZ19uZXh0KHNnKTsKKwkJc2dfY291bnQtLTsKKwl9CisKKwkvKiBzZXQgRmluYWwgYml0IChtYXJrcyBlbmQgb2YgbGluayB0YWJsZSkgKi8KKwlsaW5rX3RibF9wdHItLTsKKwlsaW5rX3RibF9wdHItPmxlbiB8PSAweDQwMDAwMDAwOworfQorCisvKgorICogZmlsbCBpbiBhbmQgc3VibWl0IGlwc2VjX2VzcCBqb2IgZGVzY3JpcHRvcgorICovCitzdGF0aWMgaW50IGlwc2VjX2VzcChzdHJ1Y3QgaXBzZWNfZXNwX2VkZXNjICplZGVzYywgc3RydWN0IGFlYWRfcmVxdWVzdCAqYXJlcSwKKwkJICAgICB1MzIgZW5jcnlwdCwKKwkJICAgICB2b2lkICgqY2FsbGJhY2spIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiAqZGVzYywKKwkJCQkgICAgICAgdTMyIGVyciwgdm9pZCAqY29udGV4dCkpCit7CisJc3RydWN0IGNyeXB0b19hZWFkICphZWFkID0gY3J5cHRvX2FlYWRfcmVxdGZtKGFyZXEpOworCXN0cnVjdCBjYWFtX2N0eCAqY3R4ID0gY3J5cHRvX2FlYWRfY3R4KGFlYWQpOworCXN0cnVjdCBkZXZpY2UgKmpyZGV2ID0gY3R4LT5qcmRldjsKKwl1MzIgKmRlc2MgPSBlZGVzYy0+aHdfZGVzYywgb3B0aW9uczsKKwlpbnQgcmV0LCBzZ19jb3VudCwgYXNzb2Nfc2dfY291bnQ7CisJaW50IGl2c2l6ZSA9IGNyeXB0b19hZWFkX2l2c2l6ZShhZWFkKTsKKwlpbnQgYXV0aHNpemUgPSBjdHgtPmF1dGhzaXplOworCWRtYV9hZGRyX3QgcHRyLCBkc3RfZG1hLCBzcmNfZG1hOworI2lmZGVmIERFQlVHCisJdTMyICpzaF9kZXNjID0gY3R4LT5zaF9kZXNjOworCisJZGVidWcoImFzc29jbGVuICVkIGNyeXB0bGVuICVkIGF1dGhzaXplICVkXG4iLAorCSAgICAgIGFyZXEtPmFzc29jbGVuLCBhcmVxLT5jcnlwdGxlbiwgYXV0aHNpemUpOworCXByaW50X2hleF9kdW1wKEtFUk5fRVJSLCAiYXNzb2MgIEAieHN0cihfX0xJTkVfXykiOiAiLAorCQkgICAgICAgRFVNUF9QUkVGSVhfQUREUkVTUywgMTYsIDQsIHNnX3ZpcnQoYXJlcS0+YXNzb2MpLAorCQkgICAgICAgYXJlcS0+YXNzb2NsZW4gLCAxKTsKKwlwcmludF9oZXhfZHVtcChLRVJOX0VSUiwgInByZXNjaXZAInhzdHIoX19MSU5FX18pIjogIiwKKwkJICAgICAgIERVTVBfUFJFRklYX0FERFJFU1MsIDE2LCA0LCBzZ192aXJ0KGFyZXEtPnNyYykgLSBpdnNpemUsCisJCSAgICAgICBlZGVzYy0+c3JjX25lbnRzID8gMTAwIDogaXZzaXplLCAxKTsKKwlwcmludF9oZXhfZHVtcChLRVJOX0VSUiwgInNyYyAgICBAInhzdHIoX19MSU5FX18pIjogIiwKKwkJICAgICAgIERVTVBfUFJFRklYX0FERFJFU1MsIDE2LCA0LCBzZ192aXJ0KGFyZXEtPnNyYyksCisJCQllZGVzYy0+c3JjX25lbnRzID8gMTAwIDogYXJlcS0+Y3J5cHRsZW4gKyBhdXRoc2l6ZSwgMSk7CisJcHJpbnRfaGV4X2R1bXAoS0VSTl9FUlIsICJzaHJkZXNjQCJ4c3RyKF9fTElORV9fKSI6ICIsCisJCSAgICAgICBEVU1QX1BSRUZJWF9BRERSRVNTLCAxNiwgNCwgc2hfZGVzYywKKwkJICAgICAgIGRlc2NfYnl0ZXMoc2hfZGVzYyksIDEpOworI2VuZGlmCisJYXNzb2Nfc2dfY291bnQgPSBkbWFfbWFwX3NnKGpyZGV2LCBhcmVxLT5hc3NvYywgZWRlc2MtPmFzc29jX25lbnRzID86IDEsCisJCQkJICAgIERNQV9UT19ERVZJQ0UpOworCWlmIChhcmVxLT5zcmMgPT0gYXJlcS0+ZHN0KQorCQlzZ19jb3VudCA9IGRtYV9tYXBfc2coanJkZXYsIGFyZXEtPnNyYywgZWRlc2MtPnNyY19uZW50cyA/IDogMSwKKwkJCQkgICAgICBETUFfQklESVJFQ1RJT05BTCk7CisJZWxzZQorCQlzZ19jb3VudCA9IGRtYV9tYXBfc2coanJkZXYsIGFyZXEtPnNyYywgZWRlc2MtPnNyY19uZW50cyA/IDogMSwKKwkJCQkgICAgICBETUFfVE9fREVWSUNFKTsKKworCS8qIHN0YXJ0IGF1dGggb3BlcmF0aW9uICovCisJYXBwZW5kX29wZXJhdGlvbihkZXNjLCBjdHgtPmNsYXNzMl9hbGdfdHlwZSB8IE9QX0FMR19BU19JTklURklOQUwgfAorCQkJIChlbmNyeXB0ID8gOiBPUF9BTEdfSUNWX09OKSk7CisKKwkvKiBMb2FkIEZJRk8gd2l0aCBkYXRhIGZvciBDbGFzcyAyIENIQSAqLworCW9wdGlvbnMgPSBGSUZPTERfQ0xBU1NfQ0xBU1MyIHwgRklGT0xEX1RZUEVfTVNHOworCWlmICghZWRlc2MtPmFzc29jX25lbnRzKSB7CisJCXB0ciA9IHNnX2RtYV9hZGRyZXNzKGFyZXEtPmFzc29jKTsKKwl9IGVsc2UgeworCQlzZ190b19saW5rX3RibChhcmVxLT5hc3NvYywgZWRlc2MtPmFzc29jX25lbnRzLAorCQkJICAgICAgIGVkZXNjLT5saW5rX3RibCwgMCk7CisJCXB0ciA9IGVkZXNjLT5saW5rX3RibF9kbWE7CisJCW9wdGlvbnMgfD0gTERTVF9TR0Y7CisJfQorCWFwcGVuZF9maWZvX2xvYWQoZGVzYywgcHRyLCBhcmVxLT5hc3NvY2xlbiwgb3B0aW9ucyk7CisKKwkvKiBjb3B5IGl2IGZyb20gY2lwaGVyL2NsYXNzMSBpbnB1dCBjb250ZXh0IHRvIGNsYXNzMiBpbmZpZm8gKi8KKwlhcHBlbmRfbW92ZShkZXNjLCBNT1ZFX1NSQ19DTEFTUzFDVFggfCBNT1ZFX0RFU1RfQ0xBU1MySU5GSUZPIHwgaXZzaXplKTsKKworCWlmICghZW5jcnlwdCkgeworCQl1MzIgKmp1bXBfY21kLCAqdW5jb25kX2p1bXBfY21kOworCisJCS8qIEpVTVAgaWYgc2hhcmVkICovCisJCWp1bXBfY21kID0gYXBwZW5kX2p1bXAoZGVzYywgSlVNUF9URVNUX0FMTCB8IEpVTVBfQ09ORF9TSFJEKTsKKworCQkvKiBzdGFydCBjbGFzcyAxIChjaXBoZXIpIG9wZXJhdGlvbiwgbm9uLXNoYXJlZCB2ZXJzaW9uICovCisJCWFwcGVuZF9vcGVyYXRpb24oZGVzYywgY3R4LT5jbGFzczFfYWxnX3R5cGUgfAorCQkJCSBPUF9BTEdfQVNfSU5JVEZJTkFMKTsKKworCQl1bmNvbmRfanVtcF9jbWQgPSBhcHBlbmRfanVtcChkZXNjLCAwKTsKKworCQlzZXRfanVtcF90Z3RfaGVyZShkZXNjLCBqdW1wX2NtZCk7CisKKwkJLyogc3RhcnQgY2xhc3MgMSAoY2lwaGVyKSBvcGVyYXRpb24sIHNoYXJlZCB2ZXJzaW9uICovCisJCWFwcGVuZF9vcGVyYXRpb24oZGVzYywgY3R4LT5jbGFzczFfYWxnX3R5cGUgfAorCQkJCSBPUF9BTEdfQVNfSU5JVEZJTkFMIHwgT1BfQUxHX0FBSV9ESyk7CisJCXNldF9qdW1wX3RndF9oZXJlKGRlc2MsIHVuY29uZF9qdW1wX2NtZCk7CisJfSBlbHNlCisJCWFwcGVuZF9vcGVyYXRpb24oZGVzYywgY3R4LT5jbGFzczFfYWxnX3R5cGUgfAorCQkJCSBPUF9BTEdfQVNfSU5JVEZJTkFMIHwgZW5jcnlwdCk7CisKKwkvKiBsb2FkIHBheWxvYWQgJiBpbnN0cnVjdCB0byBjbGFzczIgdG8gc25vb3AgY2xhc3MgMSBpZiBlbmNyeXB0aW5nICovCisJb3B0aW9ucyA9IDA7CisJaWYgKCFlZGVzYy0+c3JjX25lbnRzKSB7CisJCXNyY19kbWEgPSBzZ19kbWFfYWRkcmVzcyhhcmVxLT5zcmMpOworCX0gZWxzZSB7CisJCXNnX3RvX2xpbmtfdGJsKGFyZXEtPnNyYywgZWRlc2MtPnNyY19uZW50cywgZWRlc2MtPmxpbmtfdGJsICsKKwkJCSAgICAgICBlZGVzYy0+YXNzb2NfbmVudHMsIDApOworCQlzcmNfZG1hID0gZWRlc2MtPmxpbmtfdGJsX2RtYSArIGVkZXNjLT5hc3NvY19uZW50cyAqCisJCQkgIHNpemVvZihzdHJ1Y3QgbGlua190YmxfZW50cnkpOworCQlvcHRpb25zIHw9IExEU1RfU0dGOworCX0KKwlhcHBlbmRfc2VxX2luX3B0cihkZXNjLCBzcmNfZG1hLCBhcmVxLT5jcnlwdGxlbiArIGF1dGhzaXplLCBvcHRpb25zKTsKKwlhcHBlbmRfc2VxX2ZpZm9fbG9hZChkZXNjLCBhcmVxLT5jcnlwdGxlbiwgRklGT0xEX0NMQVNTX0JPVEggfAorCQkJICAgICBGSUZPTERfVFlQRV9MQVNUQk9USCB8CisJCQkgICAgIChlbmNyeXB0ID8gRklGT0xEX1RZUEVfTVNHMU9VVDIKKwkJCQkgICAgICA6IEZJRk9MRF9UWVBFX01TRykpOworCisJLyogc3BlY2lmeSBkZXN0aW5hdGlvbiAqLworCWlmIChhcmVxLT5zcmMgPT0gYXJlcS0+ZHN0KSB7CisJCWRzdF9kbWEgPSBzcmNfZG1hOworCX0gZWxzZSB7CisJCXNnX2NvdW50ID0gZG1hX21hcF9zZyhqcmRldiwgYXJlcS0+ZHN0LCBlZGVzYy0+ZHN0X25lbnRzID8gOiAxLAorCQkJCSAgICAgIERNQV9GUk9NX0RFVklDRSk7CisJCWlmICghZWRlc2MtPmRzdF9uZW50cykgeworCQkJZHN0X2RtYSA9IHNnX2RtYV9hZGRyZXNzKGFyZXEtPmRzdCk7CisJCQlvcHRpb25zID0gMDsKKwkJfSBlbHNlIHsKKwkJCXNnX3RvX2xpbmtfdGJsKGFyZXEtPmRzdCwgZWRlc2MtPmRzdF9uZW50cywKKwkJCQkgICAgICAgZWRlc2MtPmxpbmtfdGJsICsgZWRlc2MtPmFzc29jX25lbnRzICsKKwkJCQkgICAgICAgZWRlc2MtPnNyY19uZW50cywgMCk7CisJCQlkc3RfZG1hID0gZWRlc2MtPmxpbmtfdGJsX2RtYSArIChlZGVzYy0+YXNzb2NfbmVudHMgKworCQkJCSAgZWRlc2MtPnNyY19uZW50cykgKgorCQkJCSAgc2l6ZW9mKHN0cnVjdCBsaW5rX3RibF9lbnRyeSk7CisJCQlvcHRpb25zID0gTERTVF9TR0Y7CisJCX0KKwl9CisJYXBwZW5kX3NlcV9vdXRfcHRyKGRlc2MsIGRzdF9kbWEsIGFyZXEtPmNyeXB0bGVuICsgYXV0aHNpemUsIG9wdGlvbnMpOworCWFwcGVuZF9zZXFfZmlmb19zdG9yZShkZXNjLCBhcmVxLT5jcnlwdGxlbiwgRklGT1NUX1RZUEVfTUVTU0FHRV9EQVRBKTsKKworCS8qIElDViAqLworCWlmIChlbmNyeXB0KQorCQlhcHBlbmRfc2VxX3N0b3JlKGRlc2MsIGF1dGhzaXplLCBMRFNUX0NMQVNTXzJfQ0NCIHwKKwkJCQkgTERTVF9TUkNEU1RfQllURV9DT05URVhUKTsKKwllbHNlCisJCWFwcGVuZF9zZXFfZmlmb19sb2FkKGRlc2MsIGF1dGhzaXplLCBGSUZPTERfQ0xBU1NfQ0xBU1MyIHwKKwkJCQkgICAgIEZJRk9MRF9UWVBFX0xBU1QyIHwgRklGT0xEX1RZUEVfSUNWKTsKKworI2lmZGVmIERFQlVHCisJZGVidWcoImpvYl9kZXNjX2xlbiAlZFxuIiwgZGVzY19sZW4oZGVzYykpOworCXByaW50X2hleF9kdW1wKEtFUk5fRVJSLCAiam9iZGVzY0AieHN0cihfX0xJTkVfXykiOiAiLAorCQkgICAgICAgRFVNUF9QUkVGSVhfQUREUkVTUywgMTYsIDQsIGRlc2MsIGRlc2NfYnl0ZXMoZGVzYykgLCAxKTsKKwlwcmludF9oZXhfZHVtcChLRVJOX0VSUiwgImpkbGlua3RAInhzdHIoX19MSU5FX18pIjogIiwKKwkJICAgICAgIERVTVBfUFJFRklYX0FERFJFU1MsIDE2LCA0LCBlZGVzYy0+bGlua190YmwsCisJCQllZGVzYy0+bGlua190YmxfYnl0ZXMsIDEpOworI2VuZGlmCisKKwlyZXQgPSBjYWFtX2pyX2VucXVldWUoanJkZXYsIGRlc2MsIGNhbGxiYWNrLCBhcmVxKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gLUVJTlBST0dSRVNTOworCWVsc2UgeworCQlpcHNlY19lc3BfdW5tYXAoanJkZXYsIGVkZXNjLCBhcmVxKTsKKwkJa2ZyZWUoZWRlc2MpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBkZXJpdmUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHNjYXR0ZXJsaXN0CisgKi8KK3N0YXRpYyBpbnQgc2dfY291bnQoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19saXN0LCBpbnQgbmJ5dGVzLCBpbnQgKmNoYWluZWQpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IHNnX2xpc3Q7CisJaW50IHNnX25lbnRzID0gMDsKKworCSpjaGFpbmVkID0gMDsKKwl3aGlsZSAobmJ5dGVzID4gMCkgeworCQlzZ19uZW50cysrOworCQluYnl0ZXMgLT0gc2ctPmxlbmd0aDsKKwkJaWYgKCFzZ19pc19sYXN0KHNnKSAmJiAoc2cgKyAxKS0+bGVuZ3RoID09IDApCisJCQkqY2hhaW5lZCA9IDE7CisJCXNnID0gc2NhdHRlcndhbGtfc2dfbmV4dChzZyk7CisJfQorCisJcmV0dXJuIHNnX25lbnRzOworfQorCisvKgorICogYWxsb2NhdGUgYW5kIG1hcCB0aGUgaXBzZWNfZXNwIGV4dGVuZGVkIGRlc2NyaXB0b3IKKyAqLworc3RhdGljIHN0cnVjdCBpcHNlY19lc3BfZWRlc2MgKmlwc2VjX2VzcF9lZGVzY19hbGxvYyhzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICphcmVxLAorCQkJCQkJICAgICBpbnQgZGVzY19ieXRlcykKK3sKKwlzdHJ1Y3QgY3J5cHRvX2FlYWQgKmFlYWQgPSBjcnlwdG9fYWVhZF9yZXF0Zm0oYXJlcSk7CisJc3RydWN0IGNhYW1fY3R4ICpjdHggPSBjcnlwdG9fYWVhZF9jdHgoYWVhZCk7CisJc3RydWN0IGRldmljZSAqanJkZXYgPSBjdHgtPmpyZGV2OworCWdmcF90IGZsYWdzID0gYXJlcS0+YmFzZS5mbGFncyAmIENSWVBUT19URk1fUkVRX01BWV9TTEVFUCA/IEdGUF9LRVJORUwgOgorCQkgICAgICBHRlBfQVRPTUlDOworCWludCBhc3NvY19uZW50cywgc3JjX25lbnRzLCBkc3RfbmVudHMgPSAwLCBjaGFpbmVkLCBsaW5rX3RibF9ieXRlczsKKwlzdHJ1Y3QgaXBzZWNfZXNwX2VkZXNjICplZGVzYzsKKworCWFzc29jX25lbnRzID0gc2dfY291bnQoYXJlcS0+YXNzb2MsIGFyZXEtPmFzc29jbGVuLCAmY2hhaW5lZCk7CisJQlVHX09OKGNoYWluZWQpOworCWlmIChsaWtlbHkoYXNzb2NfbmVudHMgPT0gMSkpCisJCWFzc29jX25lbnRzID0gMDsKKworCXNyY19uZW50cyA9IHNnX2NvdW50KGFyZXEtPnNyYywgYXJlcS0+Y3J5cHRsZW4gKyBjdHgtPmF1dGhzaXplLAorCQkJICAgICAmY2hhaW5lZCk7CisJQlVHX09OKGNoYWluZWQpOworCWlmIChzcmNfbmVudHMgPT0gMSkKKwkJc3JjX25lbnRzID0gMDsKKworCWlmICh1bmxpa2VseShhcmVxLT5kc3QgIT0gYXJlcS0+c3JjKSkgeworCQlkc3RfbmVudHMgPSBzZ19jb3VudChhcmVxLT5kc3QsIGFyZXEtPmNyeXB0bGVuICsgY3R4LT5hdXRoc2l6ZSwKKwkJCQkgICAgICZjaGFpbmVkKTsKKwkJQlVHX09OKGNoYWluZWQpOworCQlpZiAoZHN0X25lbnRzID09IDEpCisJCQlkc3RfbmVudHMgPSAwOworCX0KKworCWxpbmtfdGJsX2J5dGVzID0gKGFzc29jX25lbnRzICsgc3JjX25lbnRzICsgZHN0X25lbnRzKSAqCisJCQkgc2l6ZW9mKHN0cnVjdCBsaW5rX3RibF9lbnRyeSk7CisJZGVidWcoImxpbmtfdGJsX2J5dGVzICVkXG4iLCBsaW5rX3RibF9ieXRlcyk7CisKKwkvKiBhbGxvY2F0ZSBzcGFjZSBmb3IgYmFzZSBlZGVzYyBhbmQgaHcgZGVzYyBjb21tYW5kcywgbGluayB0YWJsZXMgKi8KKwllZGVzYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcHNlY19lc3BfZWRlc2MpICsgZGVzY19ieXRlcyArCisJCQlsaW5rX3RibF9ieXRlcywgR0ZQX0RNQSB8IGZsYWdzKTsKKwlpZiAoIWVkZXNjKSB7CisJCWRldl9lcnIoanJkZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgZXh0ZW5kZWQgZGVzY3JpcHRvclxuIik7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KKworCWVkZXNjLT5hc3NvY19uZW50cyA9IGFzc29jX25lbnRzOworCWVkZXNjLT5zcmNfbmVudHMgPSBzcmNfbmVudHM7CisJZWRlc2MtPmRzdF9uZW50cyA9IGRzdF9uZW50czsKKwllZGVzYy0+bGlua190YmwgPSAodm9pZCAqKWVkZXNjICsgc2l6ZW9mKHN0cnVjdCBpcHNlY19lc3BfZWRlc2MpICsKKwkJCSAgZGVzY19ieXRlczsKKwllZGVzYy0+bGlua190YmxfZG1hID0gZG1hX21hcF9zaW5nbGUoanJkZXYsIGVkZXNjLT5saW5rX3RibCwKKwkJCQkJICAgICBsaW5rX3RibF9ieXRlcywgRE1BX1RPX0RFVklDRSk7CisJZWRlc2MtPmxpbmtfdGJsX2J5dGVzID0gbGlua190YmxfYnl0ZXM7CisKKwlyZXR1cm4gZWRlc2M7Cit9CisKK3N0YXRpYyBpbnQgYWVhZF9hdXRoZW5jX2VuY3J5cHQoc3RydWN0IGFlYWRfcmVxdWVzdCAqYXJlcSkKK3sKKwlzdHJ1Y3QgaXBzZWNfZXNwX2VkZXNjICplZGVzYzsKKwlzdHJ1Y3QgY3J5cHRvX2FlYWQgKmFlYWQgPSBjcnlwdG9fYWVhZF9yZXF0Zm0oYXJlcSk7CisJc3RydWN0IGNhYW1fY3R4ICpjdHggPSBjcnlwdG9fYWVhZF9jdHgoYWVhZCk7CisJc3RydWN0IGRldmljZSAqanJkZXYgPSBjdHgtPmpyZGV2OworCWludCBpdnNpemUgPSBjcnlwdG9fYWVhZF9pdnNpemUoYWVhZCk7CisJdTMyICpkZXNjOworCWRtYV9hZGRyX3QgaXZfZG1hOworCisJLyogYWxsb2NhdGUgZXh0ZW5kZWQgZGVzY3JpcHRvciAqLworCWVkZXNjID0gaXBzZWNfZXNwX2VkZXNjX2FsbG9jKGFyZXEsIERFU0NfQUVBRF9FTkNSWVBUX1RFWFRfTEVOICoKKwkJCQkgICAgICBDQUFNX0NNRF9TWik7CisJaWYgKElTX0VSUihlZGVzYykpCisJCXJldHVybiBQVFJfRVJSKGVkZXNjKTsKKworCWRlc2MgPSBlZGVzYy0+aHdfZGVzYzsKKworCS8qIGluc2VydCBzaGFyZWQgZGVzY3JpcHRvciBwb2ludGVyICovCisJaW5pdF9qb2JfZGVzY19zaGFyZWQoZGVzYywgY3R4LT5zaGFyZWRfZGVzY19waHlzLAorCQkJICAgICBkZXNjX2xlbihjdHgtPnNoX2Rlc2MpLCBIRFJfU0hBUkVfREVGRVIpOworCisJaXZfZG1hID0gZG1hX21hcF9zaW5nbGUoanJkZXYsIGFyZXEtPml2LCBpdnNpemUsIERNQV9UT19ERVZJQ0UpOworCS8qIGNoZWNrIGRtYSBlcnJvciAqLworCisJYXBwZW5kX2xvYWQoZGVzYywgaXZfZG1hLCBpdnNpemUsCisJCSAgICBMRFNUX0NMQVNTXzFfQ0NCIHwgTERTVF9TUkNEU1RfQllURV9DT05URVhUKTsKKworCXJldHVybiBpcHNlY19lc3AoZWRlc2MsIGFyZXEsIE9QX0FMR19FTkNSWVBULCBpcHNlY19lc3BfZW5jcnlwdF9kb25lKTsKK30KKworc3RhdGljIGludCBhZWFkX2F1dGhlbmNfZGVjcnlwdChzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGNyeXB0b19hZWFkICphZWFkID0gY3J5cHRvX2FlYWRfcmVxdGZtKHJlcSk7CisJaW50IGl2c2l6ZSA9IGNyeXB0b19hZWFkX2l2c2l6ZShhZWFkKTsKKwlzdHJ1Y3QgY2FhbV9jdHggKmN0eCA9IGNyeXB0b19hZWFkX2N0eChhZWFkKTsKKwlzdHJ1Y3QgZGV2aWNlICpqcmRldiA9IGN0eC0+anJkZXY7CisJc3RydWN0IGlwc2VjX2VzcF9lZGVzYyAqZWRlc2M7CisJdTMyICpkZXNjOworCWRtYV9hZGRyX3QgaXZfZG1hOworCisJcmVxLT5jcnlwdGxlbiAtPSBjdHgtPmF1dGhzaXplOworCisJLyogYWxsb2NhdGUgZXh0ZW5kZWQgZGVzY3JpcHRvciAqLworCWVkZXNjID0gaXBzZWNfZXNwX2VkZXNjX2FsbG9jKHJlcSwgREVTQ19BRUFEX0RFQ1JZUFRfVEVYVF9MRU4gKgorCQkJCSAgICAgIENBQU1fQ01EX1NaKTsKKwlpZiAoSVNfRVJSKGVkZXNjKSkKKwkJcmV0dXJuIFBUUl9FUlIoZWRlc2MpOworCisJZGVzYyA9IGVkZXNjLT5od19kZXNjOworCisJLyogaW5zZXJ0IHNoYXJlZCBkZXNjcmlwdG9yIHBvaW50ZXIgKi8KKwlpbml0X2pvYl9kZXNjX3NoYXJlZChkZXNjLCBjdHgtPnNoYXJlZF9kZXNjX3BoeXMsCisJCQkgICAgIGRlc2NfbGVuKGN0eC0+c2hfZGVzYyksIEhEUl9TSEFSRV9ERUZFUik7CisKKwlpdl9kbWEgPSBkbWFfbWFwX3NpbmdsZShqcmRldiwgcmVxLT5pdiwgaXZzaXplLCBETUFfVE9fREVWSUNFKTsKKwkvKiBjaGVjayBkbWEgZXJyb3IgKi8KKworCWFwcGVuZF9sb2FkKGRlc2MsIGl2X2RtYSwgaXZzaXplLAorCQkgICAgTERTVF9DTEFTU18xX0NDQiB8IExEU1RfU1JDRFNUX0JZVEVfQ09OVEVYVCk7CisKKwlyZXR1cm4gaXBzZWNfZXNwKGVkZXNjLCByZXEsICFPUF9BTEdfRU5DUllQVCwgaXBzZWNfZXNwX2RlY3J5cHRfZG9uZSk7Cit9CisKK3N0YXRpYyBpbnQgYWVhZF9hdXRoZW5jX2dpdmVuY3J5cHQoc3RydWN0IGFlYWRfZ2l2Y3J5cHRfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBhZWFkX3JlcXVlc3QgKmFyZXEgPSAmcmVxLT5hcmVxOworCXN0cnVjdCBpcHNlY19lc3BfZWRlc2MgKmVkZXNjOworCXN0cnVjdCBjcnlwdG9fYWVhZCAqYWVhZCA9IGNyeXB0b19hZWFkX3JlcXRmbShhcmVxKTsKKwlzdHJ1Y3QgY2FhbV9jdHggKmN0eCA9IGNyeXB0b19hZWFkX2N0eChhZWFkKTsKKwlzdHJ1Y3QgZGV2aWNlICpqcmRldiA9IGN0eC0+anJkZXY7CisJaW50IGl2c2l6ZSA9IGNyeXB0b19hZWFkX2l2c2l6ZShhZWFkKTsKKwlkbWFfYWRkcl90IGl2X2RtYTsKKwl1MzIgKmRlc2M7CisKKwlpdl9kbWEgPSBkbWFfbWFwX3NpbmdsZShqcmRldiwgcmVxLT5naXYsIGl2c2l6ZSwgRE1BX0ZST01fREVWSUNFKTsKKworCWRlYnVnKCIlczogZ2l2ICVwXG4iLCBfX2Z1bmNfXywgcmVxLT5naXYpOworCisJLyogYWxsb2NhdGUgZXh0ZW5kZWQgZGVzY3JpcHRvciAqLworCWVkZXNjID0gaXBzZWNfZXNwX2VkZXNjX2FsbG9jKGFyZXEsIERFU0NfQUVBRF9HSVZFTkNSWVBUX1RFWFRfTEVOICoKKwkJCQkgICAgICBDQUFNX0NNRF9TWik7CisJaWYgKElTX0VSUihlZGVzYykpCisJCXJldHVybiBQVFJfRVJSKGVkZXNjKTsKKworCWRlc2MgPSBlZGVzYy0+aHdfZGVzYzsKKworCS8qIGluc2VydCBzaGFyZWQgZGVzY3JpcHRvciBwb2ludGVyICovCisJaW5pdF9qb2JfZGVzY19zaGFyZWQoZGVzYywgY3R4LT5zaGFyZWRfZGVzY19waHlzLAorCQkJICAgICBkZXNjX2xlbihjdHgtPnNoX2Rlc2MpLCBIRFJfU0hBUkVfREVGRVIpOworCisJLyoKKwkgKiBMT0FEIElNTSBJbmZvIEZJRk8KKwkgKiB0byBERUNPLCBMYXN0LCBQYWRkaW5nLCBSYW5kb20sIE1lc3NhZ2UsIDE2IGJ5dGVzCisJICovCisJYXBwZW5kX2xvYWRfaW1tX3UzMihkZXNjLCBORklGT0VOVFJZX0RFU1RfREVDTyB8IE5GSUZPRU5UUllfTEMxIHwKKwkJCSAgICBORklGT0VOVFJZX1NUWVBFX1BBRCB8IE5GSUZPRU5UUllfRFRZUEVfTVNHIHwKKwkJCSAgICBORklGT0VOVFJZX1BUWVBFX1JORCB8IGl2c2l6ZSwKKwkJCSAgICBMRFNUX1NSQ0RTVF9XT1JEX0lORk9fRklGTyk7CisKKwkvKgorCSAqIGRpc2FibGUgaW5mbyBmaWZvIGVudHJpZXMgc2luY2UgdGhlIGFib3ZlIHNlcnZlcyBhcyB0aGUgZW50cnkKKwkgKiB0aGlzIHdheSwgdGhlIE1PVkUgY29tbWFuZCB3b24ndCBnZW5lcmF0ZSBhbiBlbnRyeS4KKwkgKiBOb3RlIHRoYXQgdGhpcyBpc24ndCByZXF1aXJlZCBpbiBtb3JlIHJlY2VudCB2ZXJzaW9ucyBvZgorCSAqIFNFQyBhcyBhIE1PVkUgdGhhdCBkb2Vzbid0IGRvIGluZm8gRklGTyBlbnRyaWVzIGlzIGF2YWlsYWJsZS4KKwkgKi8KKwlhcHBlbmRfY21kKGRlc2MsIENNRF9MT0FEIHwgRElTQUJMRV9BVVRPX0lORk9fRklGTyk7CisKKwkvKiBNT1ZFIERFQ08gQWxpZ25tZW50IC0+IEMxIENvbnRleHQgMTYgYnl0ZXMgKi8KKwlhcHBlbmRfbW92ZShkZXNjLCBNT1ZFX1NSQ19JTkZJRk8gfCBNT1ZFX0RFU1RfQ0xBU1MxQ1RYIHwgaXZzaXplKTsKKworCS8qIHJlLWVuYWJsZSBpbmZvIGZpZm8gZW50cmllcyAqLworCWFwcGVuZF9jbWQoZGVzYywgQ01EX0xPQUQgfCBFTkFCTEVfQVVUT19JTkZPX0ZJRk8pOworCisJLyogTU9WRSBDMSBDb250ZXh0IC0+IE9GSUZPIDE2IGJ5dGVzICovCisJYXBwZW5kX21vdmUoZGVzYywgTU9WRV9TUkNfQ0xBU1MxQ1RYIHwgTU9WRV9ERVNUX09VVEZJRk8gfCBpdnNpemUpOworCisJYXBwZW5kX2ZpZm9fc3RvcmUoZGVzYywgaXZfZG1hLCBpdnNpemUsIEZJRk9TVF9UWVBFX01FU1NBR0VfREFUQSk7CisKKwlyZXR1cm4gaXBzZWNfZXNwKGVkZXNjLCBhcmVxLCBPUF9BTEdfRU5DUllQVCwgaXBzZWNfZXNwX2VuY3J5cHRfZG9uZSk7Cit9CisKK3N0cnVjdCBjYWFtX2FsZ190ZW1wbGF0ZSB7CisJY2hhciBuYW1lW0NSWVBUT19NQVhfQUxHX05BTUVdOworCWNoYXIgZHJpdmVyX25hbWVbQ1JZUFRPX01BWF9BTEdfTkFNRV07CisJdW5zaWduZWQgaW50IGJsb2Nrc2l6ZTsKKwlzdHJ1Y3QgYWVhZF9hbGcgYWVhZDsKKwl1MzIgY2xhc3MxX2FsZ190eXBlOworCXUzMiBjbGFzczJfYWxnX3R5cGU7CisJdTMyIGFsZ19vcDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2FhbV9hbGdfdGVtcGxhdGUgZHJpdmVyX2FsZ3NbXSA9IHsKKwkvKiBzaW5nbGUtcGFzcyBpcHNlY19lc3AgZGVzY3JpcHRvciAqLworCXsKKwkJLm5hbWUgPSAiYXV0aGVuYyhobWFjKHNoYTEpLGNiYyhhZXMpKSIsCisJCS5kcml2ZXJfbmFtZSA9ICJhdXRoZW5jLWhtYWMtc2hhMS1jYmMtYWVzLWNhYW0iLAorCQkuYmxvY2tzaXplID0gQUVTX0JMT0NLX1NJWkUsCisJCS5hZWFkID0geworCQkJLnNldGtleSA9IGFlYWRfYXV0aGVuY19zZXRrZXksCisJCQkuc2V0YXV0aHNpemUgPSBhZWFkX2F1dGhlbmNfc2V0YXV0aHNpemUsCisJCQkuZW5jcnlwdCA9IGFlYWRfYXV0aGVuY19lbmNyeXB0LAorCQkJLmRlY3J5cHQgPSBhZWFkX2F1dGhlbmNfZGVjcnlwdCwKKwkJCS5naXZlbmNyeXB0ID0gYWVhZF9hdXRoZW5jX2dpdmVuY3J5cHQsCisJCQkuZ2VuaXYgPSAiPGJ1aWx0LWluPiIsCisJCQkuaXZzaXplID0gQUVTX0JMT0NLX1NJWkUsCisJCQkubWF4YXV0aHNpemUgPSBTSEExX0RJR0VTVF9TSVpFLAorCQkJfSwKKwkJLmNsYXNzMV9hbGdfdHlwZSA9IE9QX0FMR19BTEdTRUxfQUVTIHwgT1BfQUxHX0FBSV9DQkMsCisJCS5jbGFzczJfYWxnX3R5cGUgPSBPUF9BTEdfQUxHU0VMX1NIQTEgfCBPUF9BTEdfQUFJX0hNQUNfUFJFQ09NUCwKKwkJLmFsZ19vcCA9IE9QX0FMR19BTEdTRUxfU0hBMSB8IE9QX0FMR19BQUlfSE1BQywKKwl9LAorCXsKKwkJLm5hbWUgPSAiYXV0aGVuYyhobWFjKHNoYTI1NiksY2JjKGFlcykpIiwKKwkJLmRyaXZlcl9uYW1lID0gImF1dGhlbmMtaG1hYy1zaGEyNTYtY2JjLWFlcy1jYWFtIiwKKwkJLmJsb2Nrc2l6ZSA9IEFFU19CTE9DS19TSVpFLAorCQkuYWVhZCA9IHsKKwkJCS5zZXRrZXkgPSBhZWFkX2F1dGhlbmNfc2V0a2V5LAorCQkJLnNldGF1dGhzaXplID0gYWVhZF9hdXRoZW5jX3NldGF1dGhzaXplLAorCQkJLmVuY3J5cHQgPSBhZWFkX2F1dGhlbmNfZW5jcnlwdCwKKwkJCS5kZWNyeXB0ID0gYWVhZF9hdXRoZW5jX2RlY3J5cHQsCisJCQkuZ2l2ZW5jcnlwdCA9IGFlYWRfYXV0aGVuY19naXZlbmNyeXB0LAorCQkJLmdlbml2ID0gIjxidWlsdC1pbj4iLAorCQkJLml2c2l6ZSA9IEFFU19CTE9DS19TSVpFLAorCQkJLm1heGF1dGhzaXplID0gU0hBMjU2X0RJR0VTVF9TSVpFLAorCQkJfSwKKwkJLmNsYXNzMV9hbGdfdHlwZSA9IE9QX0FMR19BTEdTRUxfQUVTIHwgT1BfQUxHX0FBSV9DQkMsCisJCS5jbGFzczJfYWxnX3R5cGUgPSBPUF9BTEdfQUxHU0VMX1NIQTI1NiB8CisJCQkJICAgT1BfQUxHX0FBSV9ITUFDX1BSRUNPTVAsCisJCS5hbGdfb3AgPSBPUF9BTEdfQUxHU0VMX1NIQTI1NiB8IE9QX0FMR19BQUlfSE1BQywKKwl9LAorCXsKKwkJLm5hbWUgPSAiYXV0aGVuYyhobWFjKHNoYTUxMiksY2JjKGFlcykpIiwKKwkJLmRyaXZlcl9uYW1lID0gImF1dGhlbmMtaG1hYy1zaGE1MTItY2JjLWFlcy1jYWFtIiwKKwkJLmJsb2Nrc2l6ZSA9IEFFU19CTE9DS19TSVpFLAorCQkuYWVhZCA9IHsKKwkJCS5zZXRrZXkgPSBhZWFkX2F1dGhlbmNfc2V0a2V5LAorCQkJLnNldGF1dGhzaXplID0gYWVhZF9hdXRoZW5jX3NldGF1dGhzaXplLAorCQkJLmVuY3J5cHQgPSBhZWFkX2F1dGhlbmNfZW5jcnlwdCwKKwkJCS5kZWNyeXB0ID0gYWVhZF9hdXRoZW5jX2RlY3J5cHQsCisJCQkuZ2l2ZW5jcnlwdCA9IGFlYWRfYXV0aGVuY19naXZlbmNyeXB0LAorCQkJLmdlbml2ID0gIjxidWlsdC1pbj4iLAorCQkJLml2c2l6ZSA9IEFFU19CTE9DS19TSVpFLAorCQkJLm1heGF1dGhzaXplID0gU0hBNTEyX0RJR0VTVF9TSVpFLAorCQkJfSwKKwkJLmNsYXNzMV9hbGdfdHlwZSA9IE9QX0FMR19BTEdTRUxfQUVTIHwgT1BfQUxHX0FBSV9DQkMsCisJCS5jbGFzczJfYWxnX3R5cGUgPSBPUF9BTEdfQUxHU0VMX1NIQTUxMiB8CisJCQkJICAgT1BfQUxHX0FBSV9ITUFDX1BSRUNPTVAsCisJCS5hbGdfb3AgPSBPUF9BTEdfQUxHU0VMX1NIQTUxMiB8IE9QX0FMR19BQUlfSE1BQywKKwl9LAorCXsKKwkJLm5hbWUgPSAiYXV0aGVuYyhobWFjKHNoYTEpLGNiYyhkZXMzX2VkZSkpIiwKKwkJLmRyaXZlcl9uYW1lID0gImF1dGhlbmMtaG1hYy1zaGExLWNiYy1kZXMzX2VkZS1jYWFtIiwKKwkJLmJsb2Nrc2l6ZSA9IERFUzNfRURFX0JMT0NLX1NJWkUsCisJCS5hZWFkID0geworCQkJLnNldGtleSA9IGFlYWRfYXV0aGVuY19zZXRrZXksCisJCQkuc2V0YXV0aHNpemUgPSBhZWFkX2F1dGhlbmNfc2V0YXV0aHNpemUsCisJCQkuZW5jcnlwdCA9IGFlYWRfYXV0aGVuY19lbmNyeXB0LAorCQkJLmRlY3J5cHQgPSBhZWFkX2F1dGhlbmNfZGVjcnlwdCwKKwkJCS5naXZlbmNyeXB0ID0gYWVhZF9hdXRoZW5jX2dpdmVuY3J5cHQsCisJCQkuZ2VuaXYgPSAiPGJ1aWx0LWluPiIsCisJCQkuaXZzaXplID0gREVTM19FREVfQkxPQ0tfU0laRSwKKwkJCS5tYXhhdXRoc2l6ZSA9IFNIQTFfRElHRVNUX1NJWkUsCisJCQl9LAorCQkuY2xhc3MxX2FsZ190eXBlID0gT1BfQUxHX0FMR1NFTF8zREVTIHwgT1BfQUxHX0FBSV9DQkMsCisJCS5jbGFzczJfYWxnX3R5cGUgPSBPUF9BTEdfQUxHU0VMX1NIQTEgfCBPUF9BTEdfQUFJX0hNQUNfUFJFQ09NUCwKKwkJLmFsZ19vcCA9IE9QX0FMR19BTEdTRUxfU0hBMSB8IE9QX0FMR19BQUlfSE1BQywKKwl9LAorCXsKKwkJLm5hbWUgPSAiYXV0aGVuYyhobWFjKHNoYTI1NiksY2JjKGRlczNfZWRlKSkiLAorCQkuZHJpdmVyX25hbWUgPSAiYXV0aGVuYy1obWFjLXNoYTI1Ni1jYmMtZGVzM19lZGUtY2FhbSIsCisJCS5ibG9ja3NpemUgPSBERVMzX0VERV9CTE9DS19TSVpFLAorCQkuYWVhZCA9IHsKKwkJCS5zZXRrZXkgPSBhZWFkX2F1dGhlbmNfc2V0a2V5LAorCQkJLnNldGF1dGhzaXplID0gYWVhZF9hdXRoZW5jX3NldGF1dGhzaXplLAorCQkJLmVuY3J5cHQgPSBhZWFkX2F1dGhlbmNfZW5jcnlwdCwKKwkJCS5kZWNyeXB0ID0gYWVhZF9hdXRoZW5jX2RlY3J5cHQsCisJCQkuZ2l2ZW5jcnlwdCA9IGFlYWRfYXV0aGVuY19naXZlbmNyeXB0LAorCQkJLmdlbml2ID0gIjxidWlsdC1pbj4iLAorCQkJLml2c2l6ZSA9IERFUzNfRURFX0JMT0NLX1NJWkUsCisJCQkubWF4YXV0aHNpemUgPSBTSEEyNTZfRElHRVNUX1NJWkUsCisJCQl9LAorCQkuY2xhc3MxX2FsZ190eXBlID0gT1BfQUxHX0FMR1NFTF8zREVTIHwgT1BfQUxHX0FBSV9DQkMsCisJCS5jbGFzczJfYWxnX3R5cGUgPSBPUF9BTEdfQUxHU0VMX1NIQTI1NiB8CisJCQkJICAgT1BfQUxHX0FBSV9ITUFDX1BSRUNPTVAsCisJCS5hbGdfb3AgPSBPUF9BTEdfQUxHU0VMX1NIQTI1NiB8IE9QX0FMR19BQUlfSE1BQywKKwl9LAorCXsKKwkJLm5hbWUgPSAiYXV0aGVuYyhobWFjKHNoYTUxMiksY2JjKGRlczNfZWRlKSkiLAorCQkuZHJpdmVyX25hbWUgPSAiYXV0aGVuYy1obWFjLXNoYTUxMi1jYmMtZGVzM19lZGUtY2FhbSIsCisJCS5ibG9ja3NpemUgPSBERVMzX0VERV9CTE9DS19TSVpFLAorCQkuYWVhZCA9IHsKKwkJCS5zZXRrZXkgPSBhZWFkX2F1dGhlbmNfc2V0a2V5LAorCQkJLnNldGF1dGhzaXplID0gYWVhZF9hdXRoZW5jX3NldGF1dGhzaXplLAorCQkJLmVuY3J5cHQgPSBhZWFkX2F1dGhlbmNfZW5jcnlwdCwKKwkJCS5kZWNyeXB0ID0gYWVhZF9hdXRoZW5jX2RlY3J5cHQsCisJCQkuZ2l2ZW5jcnlwdCA9IGFlYWRfYXV0aGVuY19naXZlbmNyeXB0LAorCQkJLmdlbml2ID0gIjxidWlsdC1pbj4iLAorCQkJLml2c2l6ZSA9IERFUzNfRURFX0JMT0NLX1NJWkUsCisJCQkubWF4YXV0aHNpemUgPSBTSEE1MTJfRElHRVNUX1NJWkUsCisJCQl9LAorCQkuY2xhc3MxX2FsZ190eXBlID0gT1BfQUxHX0FMR1NFTF8zREVTIHwgT1BfQUxHX0FBSV9DQkMsCisJCS5jbGFzczJfYWxnX3R5cGUgPSBPUF9BTEdfQUxHU0VMX1NIQTUxMiB8CisJCQkJICAgT1BfQUxHX0FBSV9ITUFDX1BSRUNPTVAsCisJCS5hbGdfb3AgPSBPUF9BTEdfQUxHU0VMX1NIQTUxMiB8IE9QX0FMR19BQUlfSE1BQywKKwl9LAorCXsKKwkJLm5hbWUgPSAiYXV0aGVuYyhobWFjKHNoYTEpLGNiYyhkZXMpKSIsCisJCS5kcml2ZXJfbmFtZSA9ICJhdXRoZW5jLWhtYWMtc2hhMS1jYmMtZGVzLWNhYW0iLAorCQkuYmxvY2tzaXplID0gREVTX0JMT0NLX1NJWkUsCisJCS5hZWFkID0geworCQkJLnNldGtleSA9IGFlYWRfYXV0aGVuY19zZXRrZXksCisJCQkuc2V0YXV0aHNpemUgPSBhZWFkX2F1dGhlbmNfc2V0YXV0aHNpemUsCisJCQkuZW5jcnlwdCA9IGFlYWRfYXV0aGVuY19lbmNyeXB0LAorCQkJLmRlY3J5cHQgPSBhZWFkX2F1dGhlbmNfZGVjcnlwdCwKKwkJCS5naXZlbmNyeXB0ID0gYWVhZF9hdXRoZW5jX2dpdmVuY3J5cHQsCisJCQkuZ2VuaXYgPSAiPGJ1aWx0LWluPiIsCisJCQkuaXZzaXplID0gREVTX0JMT0NLX1NJWkUsCisJCQkubWF4YXV0aHNpemUgPSBTSEExX0RJR0VTVF9TSVpFLAorCQkJfSwKKwkJLmNsYXNzMV9hbGdfdHlwZSA9IE9QX0FMR19BTEdTRUxfREVTIHwgT1BfQUxHX0FBSV9DQkMsCisJCS5jbGFzczJfYWxnX3R5cGUgPSBPUF9BTEdfQUxHU0VMX1NIQTEgfCBPUF9BTEdfQUFJX0hNQUNfUFJFQ09NUCwKKwkJLmFsZ19vcCA9IE9QX0FMR19BTEdTRUxfU0hBMSB8IE9QX0FMR19BQUlfSE1BQywKKwl9LAorCXsKKwkJLm5hbWUgPSAiYXV0aGVuYyhobWFjKHNoYTI1NiksY2JjKGRlcykpIiwKKwkJLmRyaXZlcl9uYW1lID0gImF1dGhlbmMtaG1hYy1zaGEyNTYtY2JjLWRlcy1jYWFtIiwKKwkJLmJsb2Nrc2l6ZSA9IERFU19CTE9DS19TSVpFLAorCQkuYWVhZCA9IHsKKwkJCS5zZXRrZXkgPSBhZWFkX2F1dGhlbmNfc2V0a2V5LAorCQkJLnNldGF1dGhzaXplID0gYWVhZF9hdXRoZW5jX3NldGF1dGhzaXplLAorCQkJLmVuY3J5cHQgPSBhZWFkX2F1dGhlbmNfZW5jcnlwdCwKKwkJCS5kZWNyeXB0ID0gYWVhZF9hdXRoZW5jX2RlY3J5cHQsCisJCQkuZ2l2ZW5jcnlwdCA9IGFlYWRfYXV0aGVuY19naXZlbmNyeXB0LAorCQkJLmdlbml2ID0gIjxidWlsdC1pbj4iLAorCQkJLml2c2l6ZSA9IERFU19CTE9DS19TSVpFLAorCQkJLm1heGF1dGhzaXplID0gU0hBMjU2X0RJR0VTVF9TSVpFLAorCQkJfSwKKwkJLmNsYXNzMV9hbGdfdHlwZSA9IE9QX0FMR19BTEdTRUxfREVTIHwgT1BfQUxHX0FBSV9DQkMsCisJCS5jbGFzczJfYWxnX3R5cGUgPSBPUF9BTEdfQUxHU0VMX1NIQTI1NiB8CisJCQkJICAgT1BfQUxHX0FBSV9ITUFDX1BSRUNPTVAsCisJCS5hbGdfb3AgPSBPUF9BTEdfQUxHU0VMX1NIQTI1NiB8IE9QX0FMR19BQUlfSE1BQywKKwl9LAorCXsKKwkJLm5hbWUgPSAiYXV0aGVuYyhobWFjKHNoYTUxMiksY2JjKGRlcykpIiwKKwkJLmRyaXZlcl9uYW1lID0gImF1dGhlbmMtaG1hYy1zaGE1MTItY2JjLWRlcy1jYWFtIiwKKwkJLmJsb2Nrc2l6ZSA9IERFU19CTE9DS19TSVpFLAorCQkuYWVhZCA9IHsKKwkJCS5zZXRrZXkgPSBhZWFkX2F1dGhlbmNfc2V0a2V5LAorCQkJLnNldGF1dGhzaXplID0gYWVhZF9hdXRoZW5jX3NldGF1dGhzaXplLAorCQkJLmVuY3J5cHQgPSBhZWFkX2F1dGhlbmNfZW5jcnlwdCwKKwkJCS5kZWNyeXB0ID0gYWVhZF9hdXRoZW5jX2RlY3J5cHQsCisJCQkuZ2l2ZW5jcnlwdCA9IGFlYWRfYXV0aGVuY19naXZlbmNyeXB0LAorCQkJLmdlbml2ID0gIjxidWlsdC1pbj4iLAorCQkJLml2c2l6ZSA9IERFU19CTE9DS19TSVpFLAorCQkJLm1heGF1dGhzaXplID0gU0hBNTEyX0RJR0VTVF9TSVpFLAorCQkJfSwKKwkJLmNsYXNzMV9hbGdfdHlwZSA9IE9QX0FMR19BTEdTRUxfREVTIHwgT1BfQUxHX0FBSV9DQkMsCisJCS5jbGFzczJfYWxnX3R5cGUgPSBPUF9BTEdfQUxHU0VMX1NIQTUxMiB8CisJCQkJICAgT1BfQUxHX0FBSV9ITUFDX1BSRUNPTVAsCisJCS5hbGdfb3AgPSBPUF9BTEdfQUxHU0VMX1NIQTUxMiB8IE9QX0FMR19BQUlfSE1BQywKKwl9LAorfTsKKworc3RydWN0IGNhYW1fY3J5cHRvX2FsZyB7CisJc3RydWN0IGxpc3RfaGVhZCBlbnRyeTsKKwlzdHJ1Y3QgZGV2aWNlICpjdHJsZGV2OworCWludCBjbGFzczFfYWxnX3R5cGU7CisJaW50IGNsYXNzMl9hbGdfdHlwZTsKKwlpbnQgYWxnX29wOworCXN0cnVjdCBjcnlwdG9fYWxnIGNyeXB0b19hbGc7Cit9OworCitzdGF0aWMgaW50IGNhYW1fY3JhX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnID0gdGZtLT5fX2NydF9hbGc7CisJc3RydWN0IGNhYW1fY3J5cHRvX2FsZyAqY2FhbV9hbGcgPQorCQkgY29udGFpbmVyX29mKGFsZywgc3RydWN0IGNhYW1fY3J5cHRvX2FsZywgY3J5cHRvX2FsZyk7CisJc3RydWN0IGNhYW1fY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXN0cnVjdCBjYWFtX2Rydl9wcml2YXRlICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGNhYW1fYWxnLT5jdHJsZGV2KTsKKwlpbnQgdGd0X2pyID0gYXRvbWljX2luY19yZXR1cm4oJnByaXYtPnRmbV9jb3VudCk7CisKKwkvKgorCSAqIGRpc3RyaWJ1dGUgdGZtcyBhY3Jvc3Mgam9iIHJpbmdzIHRvIGVuc3VyZSBpbi1vcmRlcgorCSAqIGNyeXB0byByZXF1ZXN0IHByb2Nlc3NpbmcgcGVyIHRmbQorCSAqLworCWN0eC0+anJkZXYgPSBwcml2LT5hbGdhcGlfanJbKHRndF9qciAvIDIpICUgcHJpdi0+bnVtX2pyc19mb3JfYWxnYXBpXTsKKworCS8qIGNvcHkgZGVzY3JpcHRvciBoZWFkZXIgdGVtcGxhdGUgdmFsdWUgKi8KKwljdHgtPmNsYXNzMV9hbGdfdHlwZSA9IE9QX1RZUEVfQ0xBU1MxX0FMRyB8IGNhYW1fYWxnLT5jbGFzczFfYWxnX3R5cGU7CisJY3R4LT5jbGFzczJfYWxnX3R5cGUgPSBPUF9UWVBFX0NMQVNTMl9BTEcgfCBjYWFtX2FsZy0+Y2xhc3MyX2FsZ190eXBlOworCWN0eC0+YWxnX29wID0gT1BfVFlQRV9DTEFTUzJfQUxHIHwgY2FhbV9hbGctPmFsZ19vcDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjYWFtX2NyYV9leGl0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJc3RydWN0IGNhYW1fY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCisJaWYgKCFkbWFfbWFwcGluZ19lcnJvcihjdHgtPmpyZGV2LCBjdHgtPnNoYXJlZF9kZXNjX3BoeXMpKQorCQlkbWFfdW5tYXBfc2luZ2xlKGN0eC0+anJkZXYsIGN0eC0+c2hhcmVkX2Rlc2NfcGh5cywKKwkJCQkgZGVzY19ieXRlcyhjdHgtPnNoX2Rlc2MpLCBETUFfVE9fREVWSUNFKTsKKwlrZnJlZShjdHgtPnNoX2Rlc2MpOworCisJaWYgKCFkbWFfbWFwcGluZ19lcnJvcihjdHgtPmpyZGV2LCBjdHgtPmtleV9waHlzKSkKKwkJZG1hX3VubWFwX3NpbmdsZShjdHgtPmpyZGV2LCBjdHgtPmtleV9waHlzLAorCQkJCSBjdHgtPnNwbGl0X2tleV9wYWRfbGVuICsgY3R4LT5lbmNrZXlsZW4sCisJCQkJIERNQV9UT19ERVZJQ0UpOworCWtmcmVlKGN0eC0+a2V5KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGNhYW1fYWxnYXBpX2V4aXQodm9pZCkKK3sKKworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2X25vZGU7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgZGV2aWNlICpjdHJsZGV2OworCXN0cnVjdCBjYWFtX2Rydl9wcml2YXRlICpwcml2OworCXN0cnVjdCBjYWFtX2NyeXB0b19hbGcgKnRfYWxnLCAqbjsKKwlpbnQgaSwgZXJyOworCisJZGV2X25vZGUgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiZnNsLHNlYy12NC4wIik7CisJaWYgKCFkZXZfbm9kZSkKKwkJcmV0dXJuOworCisJcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUoZGV2X25vZGUpOworCWlmICghcGRldikKKwkJcmV0dXJuOworCisJY3RybGRldiA9ICZwZGV2LT5kZXY7CisJb2Zfbm9kZV9wdXQoZGV2X25vZGUpOworCXByaXYgPSBkZXZfZ2V0X2RydmRhdGEoY3RybGRldik7CisKKwlpZiAoIXByaXYtPmFsZ19saXN0Lm5leHQpCisJCXJldHVybjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0X2FsZywgbiwgJnByaXYtPmFsZ19saXN0LCBlbnRyeSkgeworCQljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJnRfYWxnLT5jcnlwdG9fYWxnKTsKKwkJbGlzdF9kZWwoJnRfYWxnLT5lbnRyeSk7CisJCWtmcmVlKHRfYWxnKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+dG90YWxfam9icnM7IGkrKykgeworCQllcnIgPSBjYWFtX2pyX2RlcmVnaXN0ZXIocHJpdi0+YWxnYXBpX2pyW2ldKTsKKwkJaWYgKGVyciA8IDApCisJCQlicmVhazsKKwl9CisJa2ZyZWUocHJpdi0+YWxnYXBpX2pyKTsKK30KKworc3RhdGljIHN0cnVjdCBjYWFtX2NyeXB0b19hbGcgKmNhYW1fYWxnX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmN0cmxkZXYsCisJCQkJCSAgICAgIHN0cnVjdCBjYWFtX2FsZ190ZW1wbGF0ZQorCQkJCQkgICAgICAqdGVtcGxhdGUpCit7CisJc3RydWN0IGNhYW1fY3J5cHRvX2FsZyAqdF9hbGc7CisJc3RydWN0IGNyeXB0b19hbGcgKmFsZzsKKworCXRfYWxnID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNhYW1fY3J5cHRvX2FsZyksIEdGUF9LRVJORUwpOworCWlmICghdF9hbGcpIHsKKwkJZGV2X2VycihjdHJsZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIHRfYWxnXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCisJYWxnID0gJnRfYWxnLT5jcnlwdG9fYWxnOworCisJc25wcmludGYoYWxnLT5jcmFfbmFtZSwgQ1JZUFRPX01BWF9BTEdfTkFNRSwgIiVzIiwgdGVtcGxhdGUtPm5hbWUpOworCXNucHJpbnRmKGFsZy0+Y3JhX2RyaXZlcl9uYW1lLCBDUllQVE9fTUFYX0FMR19OQU1FLCAiJXMiLAorCQkgdGVtcGxhdGUtPmRyaXZlcl9uYW1lKTsKKwlhbGctPmNyYV9tb2R1bGUgPSBUSElTX01PRFVMRTsKKwlhbGctPmNyYV9pbml0ID0gY2FhbV9jcmFfaW5pdDsKKwlhbGctPmNyYV9leGl0ID0gY2FhbV9jcmFfZXhpdDsKKwlhbGctPmNyYV9wcmlvcml0eSA9IENBQU1fQ1JBX1BSSU9SSVRZOworCWFsZy0+Y3JhX2ZsYWdzID0gQ1JZUFRPX0FMR19UWVBFX0FFQUQgfCBDUllQVE9fQUxHX0FTWU5DOworCWFsZy0+Y3JhX2Jsb2Nrc2l6ZSA9IHRlbXBsYXRlLT5ibG9ja3NpemU7CisJYWxnLT5jcmFfYWxpZ25tYXNrID0gMDsKKwlhbGctPmNyYV90eXBlID0gJmNyeXB0b19hZWFkX3R5cGU7CisJYWxnLT5jcmFfY3R4c2l6ZSA9IHNpemVvZihzdHJ1Y3QgY2FhbV9jdHgpOworCWFsZy0+Y3JhX3UuYWVhZCA9IHRlbXBsYXRlLT5hZWFkOworCisJdF9hbGctPmNsYXNzMV9hbGdfdHlwZSA9IHRlbXBsYXRlLT5jbGFzczFfYWxnX3R5cGU7CisJdF9hbGctPmNsYXNzMl9hbGdfdHlwZSA9IHRlbXBsYXRlLT5jbGFzczJfYWxnX3R5cGU7CisJdF9hbGctPmFsZ19vcCA9IHRlbXBsYXRlLT5hbGdfb3A7CisJdF9hbGctPmN0cmxkZXYgPSBjdHJsZGV2OworCisJcmV0dXJuIHRfYWxnOworfQorCitzdGF0aWMgaW50IF9faW5pdCBjYWFtX2FsZ2FwaV9pbml0KHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpkZXZfbm9kZTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBkZXZpY2UgKmN0cmxkZXYsICoqanJkZXY7CisJc3RydWN0IGNhYW1fZHJ2X3ByaXZhdGUgKnByaXY7CisJaW50IGkgPSAwLCBlcnIgPSAwOworCisJZGV2X25vZGUgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiZnNsLHNlYy12NC4wIik7CisJaWYgKCFkZXZfbm9kZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShkZXZfbm9kZSk7CisJaWYgKCFwZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWN0cmxkZXYgPSAmcGRldi0+ZGV2OworCXByaXYgPSBkZXZfZ2V0X2RydmRhdGEoY3RybGRldik7CisJb2Zfbm9kZV9wdXQoZGV2X25vZGUpOworCisJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmFsZ19saXN0KTsKKworCWpyZGV2ID0ga21hbGxvYyhzaXplb2YoKmpyZGV2KSAqIHByaXYtPnRvdGFsX2pvYnJzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWpyZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCBwcml2LT50b3RhbF9qb2JyczsgaSsrKSB7CisJCWVyciA9IGNhYW1fanJfcmVnaXN0ZXIoY3RybGRldiwgJmpyZGV2W2ldKTsKKwkJaWYgKGVyciA8IDApCisJCQlicmVhazsKKwl9CisJaWYgKGVyciA8IDAgJiYgaSA9PSAwKSB7CisJCWRldl9lcnIoY3RybGRldiwgImFsZ2FwaSBlcnJvciBpbiBqb2IgcmluZyByZWdpc3RyYXRpb246ICVkXG4iLAorCQkJZXJyKTsKKwkJa2ZyZWUoanJkZXYpOworCQlyZXR1cm4gZXJyOworCX0KKworCXByaXYtPm51bV9qcnNfZm9yX2FsZ2FwaSA9IGk7CisJcHJpdi0+YWxnYXBpX2pyID0ganJkZXY7CisJYXRvbWljX3NldCgmcHJpdi0+dGZtX2NvdW50LCAtMSk7CisKKwkvKiByZWdpc3RlciBjcnlwdG8gYWxnb3JpdGhtcyB0aGUgZGV2aWNlIHN1cHBvcnRzICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHJpdmVyX2FsZ3MpOyBpKyspIHsKKwkJLyogVE9ETzogY2hlY2sgaWYgaC93IHN1cHBvcnRzIGFsZyAqLworCQlzdHJ1Y3QgY2FhbV9jcnlwdG9fYWxnICp0X2FsZzsKKworCQl0X2FsZyA9IGNhYW1fYWxnX2FsbG9jKGN0cmxkZXYsICZkcml2ZXJfYWxnc1tpXSk7CisJCWlmIChJU19FUlIodF9hbGcpKSB7CisJCQllcnIgPSBQVFJfRVJSKHRfYWxnKTsKKwkJCWRldl93YXJuKGN0cmxkZXYsICIlcyBhbGcgYWxsb2NhdGlvbiBmYWlsZWRcbiIsCisJCQkJIGRyaXZlcl9hbGdzW2ldLmRyaXZlcl9uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZXJyID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmdF9hbGctPmNyeXB0b19hbGcpOworCQlpZiAoZXJyKSB7CisJCQlkZXZfd2FybihjdHJsZGV2LCAiJXMgYWxnIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIsCisJCQkJdF9hbGctPmNyeXB0b19hbGcuY3JhX2RyaXZlcl9uYW1lKTsKKwkJCWtmcmVlKHRfYWxnKTsKKwkJfSBlbHNlIHsKKwkJCWxpc3RfYWRkX3RhaWwoJnRfYWxnLT5lbnRyeSwgJnByaXYtPmFsZ19saXN0KTsKKwkJCWRldl9pbmZvKGN0cmxkZXYsICIlc1xuIiwKKwkJCQkgdF9hbGctPmNyeXB0b19hbGcuY3JhX2RyaXZlcl9uYW1lKTsKKwkJfQorCX0KKworCXJldHVybiBlcnI7Cit9CisKK21vZHVsZV9pbml0KGNhYW1fYWxnYXBpX2luaXQpOworbW9kdWxlX2V4aXQoY2FhbV9hbGdhcGlfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiRlNMIENBQU0gc3VwcG9ydCBmb3IgY3J5cHRvIEFQSSIpOworTU9EVUxFX0FVVEhPUigiRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgLSBOTUcvU1RDIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9jYWFtL2NvbXBhdC5oIGIvZHJpdmVycy9jcnlwdG8vY2FhbS9jb21wYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTA0NTAzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jcnlwdG8vY2FhbS9jb21wYXQuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDgtMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICovCisKKyNpZm5kZWYgQ0FBTV9DT01QQVRfSAorI2RlZmluZSBDQUFNX0NPTVBBVF9ICisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9od19yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NpcmNfYnVmLmg+CisjaW5jbHVkZSA8bmV0L3hmcm0uaD4KKworI2luY2x1ZGUgPGNyeXB0by9hbGdhcGkuaD4KKyNpbmNsdWRlIDxjcnlwdG8vYWVzLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2Rlcy5oPgorI2luY2x1ZGUgPGNyeXB0by9zaGEuaD4KKyNpbmNsdWRlIDxjcnlwdG8vYWVhZC5oPgorI2luY2x1ZGUgPGNyeXB0by9hdXRoZW5jLmg+CisjaW5jbHVkZSA8Y3J5cHRvL3NjYXR0ZXJ3YWxrLmg+CisKKyNlbmRpZiAvKiAhZGVmaW5lZChDQUFNX0NPTVBBVF9IKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vY2FhbS9jdHJsLmMgYi9kcml2ZXJzL2NyeXB0by9jYWFtL2N0cmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDA5NzEzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jcnlwdG8vY2FhbS9jdHJsLmMKQEAgLTAsMCArMSwyNjkgQEAKKy8qCisgKiBDQUFNIGNvbnRyb2wtcGxhbmUgZHJpdmVyIGJhY2tlbmQKKyAqIENvbnRyb2xsZXItbGV2ZWwgZHJpdmVyLCBrZXJuZWwgcHJvcGVydHkgZGV0ZWN0aW9uLCBpbml0aWFsaXphdGlvbgorICoKKyAqIENvcHlyaWdodCAyMDA4LTIwMTEgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqLworCisjaW5jbHVkZSAiY29tcGF0LmgiCisjaW5jbHVkZSAicmVncy5oIgorI2luY2x1ZGUgImludGVybi5oIgorI2luY2x1ZGUgImpyLmgiCisKK3N0YXRpYyBpbnQgY2FhbV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpjdHJsZGV2OworCXN0cnVjdCBjYWFtX2Rydl9wcml2YXRlICpjdHJscHJpdjsKKwlzdHJ1Y3QgY2FhbV9kcnZfcHJpdmF0ZV9qciAqanJwcml2OworCXN0cnVjdCBjYWFtX2Z1bGwgX19pb21lbSAqdG9wcmVnczsKKwlpbnQgcmluZywgcmV0ID0gMDsKKworCWN0cmxkZXYgPSAmcGRldi0+ZGV2OworCWN0cmxwcml2ID0gZGV2X2dldF9kcnZkYXRhKGN0cmxkZXYpOworCXRvcHJlZ3MgPSAoc3RydWN0IGNhYW1fZnVsbCBfX2lvbWVtICopY3RybHByaXYtPmN0cmw7CisKKwkvKiBzaHV0IGRvd24gSm9iUnMgKi8KKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgY3RybHByaXYtPnRvdGFsX2pvYnJzOyByaW5nKyspIHsKKwkJcmV0IHw9IGNhYW1fanJfc2h1dGRvd24oY3RybHByaXYtPmpyZGV2W3JpbmddKTsKKwkJanJwcml2ID0gZGV2X2dldF9kcnZkYXRhKGN0cmxwcml2LT5qcmRldltyaW5nXSk7CisJCWlycV9kaXNwb3NlX21hcHBpbmcoanJwcml2LT5pcnEpOworCX0KKworCS8qIFNodXQgZG93biBkZWJ1ZyB2aWV3cyAqLworI2lmZGVmIENPTkZJR19ERUJVR19GUworCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShjdHJscHJpdi0+ZGZzX3Jvb3QpOworI2VuZGlmCisKKwkvKiBVbm1hcCBjb250cm9sbGVyIHJlZ2lvbiAqLworCWlvdW5tYXAoJnRvcHJlZ3MtPmN0cmwpOworCisJa2ZyZWUoY3RybHByaXYtPmpyZGV2KTsKKwlrZnJlZShjdHJscHJpdik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBQcm9iZSByb3V0aW5lIGZvciBDQUFNIHRvcCAoY29udHJvbGxlcikgbGV2ZWwgKi8KK3N0YXRpYyBpbnQgY2FhbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCBkLCByaW5nLCByc3BlYzsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpucHJvcCwgKm5wOworCXN0cnVjdCBjYWFtX2N0cmwgX19pb21lbSAqY3RybDsKKwlzdHJ1Y3QgY2FhbV9mdWxsIF9faW9tZW0gKnRvcHJlZ3M7CisJc3RydWN0IGNhYW1fZHJ2X3ByaXZhdGUgKmN0cmxwcml2OworCXN0cnVjdCBjYWFtX3BlcmZtb24gKnBlcmZtb247CisJc3RydWN0IGNhYW1fZGVjbyAqKmRlY287CisJdTMyIGRlY29udW07CisKKwljdHJscHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjYWFtX2Rydl9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjdHJscHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkZXYgPSAmcGRldi0+ZGV2OworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGN0cmxwcml2KTsKKwljdHJscHJpdi0+cGRldiA9IHBkZXY7CisJbnByb3AgPSBwZGV2LT5kZXYub2Zfbm9kZTsKKworCS8qIEdldCBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZnJvbSBkZXZpY2UgdHJlZSAqLworCS8qIEZpcnN0LCBnZXQgcmVnaXN0ZXIgcGFnZSAqLworCWN0cmwgPSBvZl9pb21hcChucHJvcCwgMCk7CisJaWYgKGN0cmwgPT0gTlVMTCkgeworCQlkZXZfZXJyKGRldiwgImNhYW06IG9mX2lvbWFwKCkgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWN0cmxwcml2LT5jdHJsID0gKHN0cnVjdCBjYWFtX2N0cmwgX19mb3JjZSAqKWN0cmw7CisKKwkvKiB0b3ByZWdzIHVzZWQgdG8gZGVyaXZlIHBvaW50ZXJzIHRvIENBQU0gc3ViLWJsb2NrcyBvbmx5ICovCisJdG9wcmVncyA9IChzdHJ1Y3QgY2FhbV9mdWxsIF9faW9tZW0gKiljdHJsOworCisJLyogR2V0IHRoZSBJUlEgb2YgdGhlIGNvbnRyb2xsZXIgKGZvciBzZWN1cml0eSB2aW9sYXRpb25zIG9ubHkpICovCisJY3RybHByaXYtPnNlY3Zpb19pcnEgPSBvZl9pcnFfdG9fcmVzb3VyY2UobnByb3AsIDAsIE5VTEwpOworCisJLyoKKwkgKiBFbmFibGUgREVDTyB3YXRjaGRvZ3MgYW5kLCBpZiB0aGlzIGlzIGEgUEhZU19BRERSX1RfNjRCSVQga2VybmVsLAorCSAqIDM2LWJpdCBwb2ludGVycyBpbiBtYXN0ZXIgY29uZmlndXJhdGlvbiByZWdpc3RlcgorCSAqLworCXNldGJpdHMzMigmdG9wcmVncy0+Y3RybC5tY3IsIE1DRkdSX1dERU5BQkxFIHwKKwkJICAoc2l6ZW9mKGRtYV9hZGRyX3QpID09IHNpemVvZih1NjQpID8gTUNGR1JfTE9OR19QVFIgOiAwKSk7CisKKwlpZiAoc2l6ZW9mKGRtYV9hZGRyX3QpID09IHNpemVvZih1NjQpKQorCQlkbWFfc2V0X21hc2soZGV2LCBETUFfQklUX01BU0soMzYpKTsKKworCS8qIEZpbmQgb3V0IGhvdyBtYW55IERFQ09zIGFyZSBwcmVzZW50ICovCisJZGVjb251bSA9IChyZF9yZWc2NCgmdG9wcmVncy0+Y3RybC5wZXJmbW9uLmNoYV9udW0pICYKKwkJICAgQ0hBX05VTV9ERUNPTlVNX01BU0spID4+IENIQV9OVU1fREVDT05VTV9TSElGVDsKKworCWN0cmxwcml2LT5kZWNvID0ga21hbGxvYyhkZWNvbnVtICogc2l6ZW9mKHN0cnVjdCBjYWFtX2RlY28gKiksCisJCQkJIEdGUF9LRVJORUwpOworCisJZGVjbyA9IChzdHJ1Y3QgY2FhbV9kZWNvIF9fZm9yY2UgKiopJnRvcHJlZ3MtPmRlY287CisJZm9yIChkID0gMDsgZCA8IGRlY29udW07IGQrKykKKwkJY3RybHByaXYtPmRlY29bZF0gPSBkZWNvW2RdOworCisJLyoKKwkgKiBEZXRlY3QgYW5kIGVuYWJsZSBKb2JScworCSAqIEZpcnN0LCBmaW5kIG91dCBob3cgbWFueSByaW5nIHNwZWMnZWQsIGFsbG9jYXRlIHJlZmVyZW5jZXMKKwkgKiBmb3IgYWxsLCB0aGVuIGdvIHByb2JlIGVhY2ggb25lLgorCSAqLworCXJzcGVjID0gMDsKKwlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsIE5VTEwsICJmc2wsc2VjLXY0LjAtam9iLXJpbmciKQorCQlyc3BlYysrOworCWN0cmxwcml2LT5qcmRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkZXZpY2UgKikgKiByc3BlYywgR0ZQX0tFUk5FTCk7CisJaWYgKGN0cmxwcml2LT5qcmRldiA9PSBOVUxMKSB7CisJCWlvdW5tYXAoJnRvcHJlZ3MtPmN0cmwpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyaW5nID0gMDsKKwljdHJscHJpdi0+dG90YWxfam9icnMgPSAwOworCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgTlVMTCwgImZzbCxzZWMtdjQuMC1qb2ItcmluZyIpIHsKKwkJY2FhbV9qcl9wcm9iZShwZGV2LCBucCwgcmluZyk7CisJCWN0cmxwcml2LT50b3RhbF9qb2JycysrOworCQlyaW5nKys7CisJfQorCisJLyogQ2hlY2sgdG8gc2VlIGlmIFFJIHByZXNlbnQuIElmIHNvLCBlbmFibGUgKi8KKwljdHJscHJpdi0+cWlfcHJlc2VudCA9ICEhKHJkX3JlZzY0KCZ0b3ByZWdzLT5jdHJsLnBlcmZtb24uY29tcF9wYXJtcykgJgorCQkJCSAgQ1RQUl9RSV9NQVNLKTsKKwlpZiAoY3RybHByaXYtPnFpX3ByZXNlbnQpIHsKKwkJY3RybHByaXYtPnFpID0gKHN0cnVjdCBjYWFtX3F1ZXVlX2lmIF9fZm9yY2UgKikmdG9wcmVncy0+cWk7CisJCS8qIFRoaXMgaXMgYWxsIHRoYXQncyByZXF1aXJlZCB0byBwaHlzaWNhbGx5IGVuYWJsZSBRSSAqLworCQl3cl9yZWczMigmdG9wcmVncy0+cWkucWlfY29udHJvbF9sbywgUUlDVExfRFFFTik7CisJfQorCisJLyogSWYgbm8gUUkgYW5kIG5vIHJpbmdzIHNwZWNpZmllZCwgcXVpdCBhbmQgZ28gaG9tZSAqLworCWlmICgoIWN0cmxwcml2LT5xaV9wcmVzZW50KSAmJiAoIWN0cmxwcml2LT50b3RhbF9qb2JycykpIHsKKwkJZGV2X2VycihkZXYsICJubyBxdWV1ZXMgY29uZmlndXJlZCwgdGVybWluYXRpbmdcbiIpOworCQljYWFtX3JlbW92ZShwZGV2KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogTk9URTogUlRJQyBkZXRlY3Rpb24gb3VnaHQgdG8gZ28gaGVyZSwgYXJvdW5kIFNpIHRpbWUgKi8KKworCS8qIEluaXRpYWxpemUgcXVldWUgYWxsb2NhdG9yIGxvY2sgKi8KKwlzcGluX2xvY2tfaW5pdCgmY3RybHByaXYtPmpyX2FsbG9jX2xvY2spOworCisJLyogUmVwb3J0ICJhbGl2ZSIgZm9yIGRldmVsb3BlciB0byBzZWUgKi8KKwlkZXZfaW5mbyhkZXYsICJkZXZpY2UgSUQgPSAweCUwMTZsbHhcbiIsCisJCSByZF9yZWc2NCgmdG9wcmVncy0+Y3RybC5wZXJmbW9uLmNhYW1faWQpKTsKKwlkZXZfaW5mbyhkZXYsICJqb2IgcmluZ3MgPSAlZCwgcWkgPSAlZFxuIiwKKwkJIGN0cmxwcml2LT50b3RhbF9qb2JycywgY3RybHByaXYtPnFpX3ByZXNlbnQpOworCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisJLyoKKwkgKiBGSVhNRTogbmVlZHMgYmV0dGVyIG5hbWluZyBkaXN0aW5jdGlvbiwgYXMgc29tZSBhbWFsZ2FtYXRpb24gb2YKKwkgKiAiY2FhbSIgYW5kIG5wcm9wLT5mdWxsX25hbWUuIFRoZSBPRiBuYW1lIGlzbid0IGRpc3RpbmN0aXZlLAorCSAqIGJ1dCBkb2VzIHNlcGFyYXRlIGluc3RhbmNlcworCSAqLworCXBlcmZtb24gPSAoc3RydWN0IGNhYW1fcGVyZm1vbiBfX2ZvcmNlICopJmN0cmwtPnBlcmZtb247CisKKwljdHJscHJpdi0+ZGZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImNhYW0iLCBOVUxMKTsKKwljdHJscHJpdi0+Y3RsID0gZGVidWdmc19jcmVhdGVfZGlyKCJjdGwiLCBjdHJscHJpdi0+ZGZzX3Jvb3QpOworCisJLyogQ29udHJvbGxlci1sZXZlbCAtIHBlcmZvcm1hbmNlIG1vbml0b3IgY291bnRlcnMgKi8KKwljdHJscHJpdi0+Y3RsX3JxX2RlcXVldWVkID0KKwkJZGVidWdmc19jcmVhdGVfdTY0KCJycV9kZXF1ZXVlZCIsCisJCQkJICAgU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lSR1JQIHwgU19JUk9USCwKKwkJCQkgICBjdHJscHJpdi0+Y3RsLCAmcGVyZm1vbi0+cmVxX2RlcXVldWVkKTsKKwljdHJscHJpdi0+Y3RsX29iX2VuY19yZXEgPQorCQlkZWJ1Z2ZzX2NyZWF0ZV91NjQoIm9iX3JxX2VuY3J5cHRlZCIsCisJCQkJICAgU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lSR1JQIHwgU19JUk9USCwKKwkJCQkgICBjdHJscHJpdi0+Y3RsLCAmcGVyZm1vbi0+b2JfZW5jX3JlcSk7CisJY3RybHByaXYtPmN0bF9pYl9kZWNfcmVxID0KKwkJZGVidWdmc19jcmVhdGVfdTY0KCJpYl9ycV9kZWNyeXB0ZWQiLAorCQkJCSAgIFNfSUZDSFIgfCBTX0lSVVNSIHwgU19JUkdSUCB8IFNfSVJPVEgsCisJCQkJICAgY3RybHByaXYtPmN0bCwgJnBlcmZtb24tPmliX2RlY19yZXEpOworCWN0cmxwcml2LT5jdGxfb2JfZW5jX2J5dGVzID0KKwkJZGVidWdmc19jcmVhdGVfdTY0KCJvYl9ieXRlc19lbmNyeXB0ZWQiLAorCQkJCSAgIFNfSUZDSFIgfCBTX0lSVVNSIHwgU19JUkdSUCB8IFNfSVJPVEgsCisJCQkJICAgY3RybHByaXYtPmN0bCwgJnBlcmZtb24tPm9iX2VuY19ieXRlcyk7CisJY3RybHByaXYtPmN0bF9vYl9wcm90X2J5dGVzID0KKwkJZGVidWdmc19jcmVhdGVfdTY0KCJvYl9ieXRlc19wcm90ZWN0ZWQiLAorCQkJCSAgIFNfSUZDSFIgfCBTX0lSVVNSIHwgU19JUkdSUCB8IFNfSVJPVEgsCisJCQkJICAgY3RybHByaXYtPmN0bCwgJnBlcmZtb24tPm9iX3Byb3RfYnl0ZXMpOworCWN0cmxwcml2LT5jdGxfaWJfZGVjX2J5dGVzID0KKwkJZGVidWdmc19jcmVhdGVfdTY0KCJpYl9ieXRlc19kZWNyeXB0ZWQiLAorCQkJCSAgIFNfSUZDSFIgfCBTX0lSVVNSIHwgU19JUkdSUCB8IFNfSVJPVEgsCisJCQkJICAgY3RybHByaXYtPmN0bCwgJnBlcmZtb24tPmliX2RlY19ieXRlcyk7CisJY3RybHByaXYtPmN0bF9pYl92YWxpZF9ieXRlcyA9CisJCWRlYnVnZnNfY3JlYXRlX3U2NCgiaWJfYnl0ZXNfdmFsaWRhdGVkIiwKKwkJCQkgICBTX0lGQ0hSIHwgU19JUlVTUiB8IFNfSVJHUlAgfCBTX0lST1RILAorCQkJCSAgIGN0cmxwcml2LT5jdGwsICZwZXJmbW9uLT5pYl92YWxpZF9ieXRlcyk7CisKKwkvKiBDb250cm9sbGVyIGxldmVsIC0gZ2xvYmFsIHN0YXR1cyB2YWx1ZXMgKi8KKwljdHJscHJpdi0+Y3RsX2ZhdWx0YWRkciA9CisJCWRlYnVnZnNfY3JlYXRlX3U2NCgiZmF1bHRfYWRkciIsCisJCQkJICAgU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lSR1JQIHwgU19JUk9USCwKKwkJCQkgICBjdHJscHJpdi0+Y3RsLCAmcGVyZm1vbi0+ZmF1bHRhZGRyKTsKKwljdHJscHJpdi0+Y3RsX2ZhdWx0ZGV0YWlsID0KKwkJZGVidWdmc19jcmVhdGVfdTMyKCJmYXVsdF9kZXRhaWwiLAorCQkJCSAgIFNfSUZDSFIgfCBTX0lSVVNSIHwgU19JUkdSUCB8IFNfSVJPVEgsCisJCQkJICAgY3RybHByaXYtPmN0bCwgJnBlcmZtb24tPmZhdWx0ZGV0YWlsKTsKKwljdHJscHJpdi0+Y3RsX2ZhdWx0c3RhdHVzID0KKwkJZGVidWdmc19jcmVhdGVfdTMyKCJmYXVsdF9zdGF0dXMiLAorCQkJCSAgIFNfSUZDSFIgfCBTX0lSVVNSIHwgU19JUkdSUCB8IFNfSVJPVEgsCisJCQkJICAgY3RybHByaXYtPmN0bCwgJnBlcmZtb24tPnN0YXR1cyk7CisKKwkvKiBJbnRlcm5hbCBjb3ZlcmluZyBrZXlzICh1c2VmdWwgaW4gbm9uLXNlY3VyZSBtb2RlIG9ubHkpICovCisJY3RybHByaXYtPmN0bF9rZWtfd3JhcC5kYXRhID0gJmN0cmxwcml2LT5jdHJsLT5rZWtbMF07CisJY3RybHByaXYtPmN0bF9rZWtfd3JhcC5zaXplID0gS0VLX0tFWV9TSVpFICogc2l6ZW9mKHUzMik7CisJY3RybHByaXYtPmN0bF9rZWsgPSBkZWJ1Z2ZzX2NyZWF0ZV9ibG9iKCJrZWsiLAorCQkJCQkJU19JRkNIUiB8IFNfSVJVU1IgfAorCQkJCQkJU19JUkdSUCB8IFNfSVJPVEgsCisJCQkJCQljdHJscHJpdi0+Y3RsLAorCQkJCQkJJmN0cmxwcml2LT5jdGxfa2VrX3dyYXApOworCisJY3RybHByaXYtPmN0bF90a2VrX3dyYXAuZGF0YSA9ICZjdHJscHJpdi0+Y3RybC0+dGtla1swXTsKKwljdHJscHJpdi0+Y3RsX3RrZWtfd3JhcC5zaXplID0gS0VLX0tFWV9TSVpFICogc2l6ZW9mKHUzMik7CisJY3RybHByaXYtPmN0bF90a2VrID0gZGVidWdmc19jcmVhdGVfYmxvYigidGtlayIsCisJCQkJCQkgU19JRkNIUiB8IFNfSVJVU1IgfAorCQkJCQkJIFNfSVJHUlAgfCBTX0lST1RILAorCQkJCQkJIGN0cmxwcml2LT5jdGwsCisJCQkJCQkgJmN0cmxwcml2LT5jdGxfdGtla193cmFwKTsKKworCWN0cmxwcml2LT5jdGxfdGRza193cmFwLmRhdGEgPSAmY3RybHByaXYtPmN0cmwtPnRkc2tbMF07CisJY3RybHByaXYtPmN0bF90ZHNrX3dyYXAuc2l6ZSA9IEtFS19LRVlfU0laRSAqIHNpemVvZih1MzIpOworCWN0cmxwcml2LT5jdGxfdGRzayA9IGRlYnVnZnNfY3JlYXRlX2Jsb2IoInRkc2siLAorCQkJCQkJIFNfSUZDSFIgfCBTX0lSVVNSIHwKKwkJCQkJCSBTX0lSR1JQIHwgU19JUk9USCwKKwkJCQkJCSBjdHJscHJpdi0+Y3RsLAorCQkJCQkJICZjdHJscHJpdi0+Y3RsX3Rkc2tfd3JhcCk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgY2FhbV9tYXRjaFtdID0geworCXsKKwkJLmNvbXBhdGlibGUgPSAiZnNsLHNlYy12NC4wIiwKKwl9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGNhYW1fbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBjYWFtX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJjYWFtIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZSA9IGNhYW1fbWF0Y2gsCisJfSwKKwkucHJvYmUgICAgICAgPSBjYWFtX3Byb2JlLAorCS5yZW1vdmUgICAgICA9IF9fZGV2ZXhpdF9wKGNhYW1fcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGNhYW1fYmFzZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmY2FhbV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY2FhbV9iYXNlX2V4aXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmNhYW1fZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoY2FhbV9iYXNlX2luaXQpOworbW9kdWxlX2V4aXQoY2FhbV9iYXNlX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkZTTCBDQUFNIHJlcXVlc3QgYmFja2VuZCIpOworTU9EVUxFX0FVVEhPUigiRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgLSBOTUcvU1RDIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9jYWFtL2Rlc2MuaCBiL2RyaXZlcnMvY3J5cHRvL2NhYW0vZGVzYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NGE3NTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NyeXB0by9jYWFtL2Rlc2MuaApAQCAtMCwwICsxLDE2MDUgQEAKKy8qCisgKiBDQUFNIGRlc2NyaXB0b3IgY29tcG9zaXRpb24gaGVhZGVyCisgKiBEZWZpbml0aW9ucyB0byBzdXBwb3J0IENBQU0gZGVzY3JpcHRvciBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uCisgKgorICogQ29weXJpZ2h0IDIwMDgtMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICovCisKKyNpZm5kZWYgREVTQ19ICisjZGVmaW5lIERFU0NfSAorCisvKiBNYXggc2l6ZSBvZiBhbnkgQ0FBTSBkZXNjcmlwdG9yIGluIDMyLWJpdCB3b3JkcywgaW5jbHVzaXZlIG9mIGhlYWRlciAqLworI2RlZmluZSBNQVhfQ0FBTV9ERVNDU0laRSAgICAgICA2NAorCisvKiBCbG9jayBzaXplIG9mIGFueSBlbnRpdHkgY292ZXJlZC91bmNvdmVyZWQgd2l0aCBhIEtFSy9US0VLICovCisjZGVmaW5lIEtFS19CTE9DS1NJWkUJCTE2CisKKy8qCisgKiBTdXBwb3J0ZWQgZGVzY3JpcHRvciBjb21tYW5kIHR5cGVzIGFzIHRoZXkgc2hvdyB1cAorICogaW5zaWRlIGEgZGVzY3JpcHRvciBjb21tYW5kIHdvcmQuCisgKi8KKyNkZWZpbmUgQ01EX1NISUZUICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgQ01EX01BU0sgICAgICAgICAgICAgICAgMHhmODAwMDAwMAorCisjZGVmaW5lIENNRF9LRVkgICAgICAgICAgICAgICAgICgweDAwIDw8IENNRF9TSElGVCkKKyNkZWZpbmUgQ01EX1NFUV9LRVkgICAgICAgICAgICAgKDB4MDEgPDwgQ01EX1NISUZUKQorI2RlZmluZSBDTURfTE9BRCAgICAgICAgICAgICAgICAoMHgwMiA8PCBDTURfU0hJRlQpCisjZGVmaW5lIENNRF9TRVFfTE9BRCAgICAgICAgICAgICgweDAzIDw8IENNRF9TSElGVCkKKyNkZWZpbmUgQ01EX0ZJRk9fTE9BRCAgICAgICAgICAgKDB4MDQgPDwgQ01EX1NISUZUKQorI2RlZmluZSBDTURfU0VRX0ZJRk9fTE9BRCAgICAgICAoMHgwNSA8PCBDTURfU0hJRlQpCisjZGVmaW5lIENNRF9TVE9SRSAgICAgICAgICAgICAgICgweDBhIDw8IENNRF9TSElGVCkKKyNkZWZpbmUgQ01EX1NFUV9TVE9SRSAgICAgICAgICAgKDB4MGIgPDwgQ01EX1NISUZUKQorI2RlZmluZSBDTURfRklGT19TVE9SRSAgICAgICAgICAoMHgwYyA8PCBDTURfU0hJRlQpCisjZGVmaW5lIENNRF9TRVFfRklGT19TVE9SRSAgICAgICgweDBkIDw8IENNRF9TSElGVCkKKyNkZWZpbmUgQ01EX01PVkVfTEVOICAgICAgICAgICAgKDB4MGUgPDwgQ01EX1NISUZUKQorI2RlZmluZSBDTURfTU9WRSAgICAgICAgICAgICAgICAoMHgwZiA8PCBDTURfU0hJRlQpCisjZGVmaW5lIENNRF9PUEVSQVRJT04gICAgICAgICAgICgweDEwIDw8IENNRF9TSElGVCkKKyNkZWZpbmUgQ01EX1NJR05BVFVSRSAgICAgICAgICAgKDB4MTIgPDwgQ01EX1NISUZUKQorI2RlZmluZSBDTURfSlVNUCAgICAgICAgICAgICAgICAoMHgxNCA8PCBDTURfU0hJRlQpCisjZGVmaW5lIENNRF9NQVRIICAgICAgICAgICAgICAgICgweDE1IDw8IENNRF9TSElGVCkKKyNkZWZpbmUgQ01EX0RFU0NfSERSICAgICAgICAgICAgKDB4MTYgPDwgQ01EX1NISUZUKQorI2RlZmluZSBDTURfU0hBUkVEX0RFU0NfSERSICAgICAoMHgxNyA8PCBDTURfU0hJRlQpCisjZGVmaW5lIENNRF9TRVFfSU5fUFRSICAgICAgICAgICgweDFlIDw8IENNRF9TSElGVCkKKyNkZWZpbmUgQ01EX1NFUV9PVVRfUFRSICAgICAgICAgKDB4MWYgPDwgQ01EX1NISUZUKQorCisvKiBHZW5lcmFsLXB1cnBvc2UgY2xhc3Mgc2VsZWN0b3IgZm9yIGFsbCBjb21tYW5kcyAqLworI2RlZmluZSBDTEFTU19TSElGVCAgICAgICAgICAgICAyNQorI2RlZmluZSBDTEFTU19NQVNLICAgICAgICAgICAgICAoMHgwMyA8PCBDTEFTU19TSElGVCkKKworI2RlZmluZSBDTEFTU19OT05FICAgICAgICAgICAgICAoMHgwMCA8PCBDTEFTU19TSElGVCkKKyNkZWZpbmUgQ0xBU1NfMSAgICAgICAgICAgICAgICAgKDB4MDEgPDwgQ0xBU1NfU0hJRlQpCisjZGVmaW5lIENMQVNTXzIgICAgICAgICAgICAgICAgICgweDAyIDw8IENMQVNTX1NISUZUKQorI2RlZmluZSBDTEFTU19CT1RIICAgICAgICAgICAgICAoMHgwMyA8PCBDTEFTU19TSElGVCkKKworLyoKKyAqIERlc2NyaXB0b3IgaGVhZGVyIGNvbW1hbmQgY29uc3RydWN0cworICogQ292ZXJzIHNoYXJlZCwgam9iLCBhbmQgdHJ1c3RlZCBkZXNjcmlwdG9yIGhlYWRlcnMKKyAqLworCisvKgorICogRG8gTm90IFJ1biAtIG1hcmtzIGEgZGVzY3JpcHRvciBpbmV4ZWN1dGFibGUgaWYgdGhlcmUgd2FzCisgKiBhIHByZWNlZGluZyBlcnJvciBzb21ld2hlcmUKKyAqLworI2RlZmluZSBIRFJfRE5SICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisKKy8qCisgKiBPTkUgLSBzaG91bGQgYWx3YXlzIGJlIHNldC4gQ29tYmluYXRpb24gb2YgT05FIChhbHdheXMKKyAqIHNldCkgYW5kIFpSTyAoYWx3YXlzIGNsZWFyKSBmb3JtcyBhbiBlbmRpYW5uZXNzIHNhbml0eSBjaGVjaworICovCisjZGVmaW5lIEhEUl9PTkUgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgSERSX1pSTyAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorCisvKiBTdGFydCBJbmRleCBvciBTaGFyZWREZXNjIExlbmd0aCAqLworI2RlZmluZSBIRFJfU1RBUlRfSURYX01BU0sgICAgICAweDNmCisjZGVmaW5lIEhEUl9TVEFSVF9JRFhfU0hJRlQgICAgIDE2CisKKy8qIElmIHNoYXJlZCBkZXNjcmlwdG9yIGhlYWRlciwgNi1iaXQgbGVuZ3RoICovCisjZGVmaW5lIEhEUl9ERVNDTEVOX1NIUl9NQVNLICAweDNmCisKKy8qIElmIG5vbi1zaGFyZWQgaGVhZGVyLCA3LWJpdCBsZW5ndGggKi8KKyNkZWZpbmUgSERSX0RFU0NMRU5fTUFTSyAgICAgIDB4N2YKKworLyogVGhpcyBpcyBhIFRydXN0ZWREZXNjIChpZiBub3QgU2hhcmVkRGVzYykgKi8KKyNkZWZpbmUgSERSX1RSVVNURUQgICAgICAgICAgICAgMHgwMDAwNDAwMAorCisvKiBNYWtlIGludG8gVHJ1c3RlZERlc2MgKGlmIG5vdCBTaGFyZWREZXNjKSAqLworI2RlZmluZSBIRFJfTUFLRV9UUlVTVEVEICAgICAgICAweDAwMDAyMDAwCisKKy8qIFNhdmUgY29udGV4dCBpZiBzZWxmLXNoYXJlZCAoaWYgU2hhcmVkRGVzYykgKi8KKyNkZWZpbmUgSERSX1NBVkVDVFggICAgICAgICAgICAgMHgwMDAwMTAwMAorCisvKiBOZXh0IGl0ZW0gcG9pbnRzIHRvIFNoYXJlZERlc2MgKi8KKyNkZWZpbmUgSERSX1NIQVJFRCAgICAgICAgICAgICAgMHgwMDAwMTAwMAorCisvKgorICogUmV2ZXJzZSBFeGVjdXRpb24gT3JkZXIgLSBleGVjdXRlIEpvYkRlc2MgZmlyc3QsIHRoZW4KKyAqIGV4ZWN1dGUgU2hhcmVkRGVzYyAobm9ybWFsbHkgU2hhcmVkRGVzYyBnb2VzIGZpcnN0KS4KKyAqLworI2RlZmluZSBIRFJfUkVWRVJTRSAgICAgICAgICAgICAweDAwMDAwODAwCisKKy8qIFByb3BvZ2F0ZSBETlIgcHJvcGVydHkgdG8gU2hhcmVkRGVzYyAqLworI2RlZmluZSBIRFJfUFJPUF9ETlIgICAgICAgICAgICAweDAwMDAwODAwCisKKy8qIEpvYkRlc2MvU2hhcmVkRGVzYyBzaGFyZSBwcm9wZXJ0eSAqLworI2RlZmluZSBIRFJfU0RfU0hBUkVfTUFTSyAgICAgICAweDAzCisjZGVmaW5lIEhEUl9TRF9TSEFSRV9TSElGVCAgICAgIDgKKyNkZWZpbmUgSERSX0pEX1NIQVJFX01BU0sgICAgICAgMHgwNworI2RlZmluZSBIRFJfSkRfU0hBUkVfU0hJRlQgICAgICA4CisKKyNkZWZpbmUgSERSX1NIQVJFX05FVkVSICAgICAgICAgKDB4MDAgPDwgSERSX1NEX1NIQVJFX1NISUZUKQorI2RlZmluZSBIRFJfU0hBUkVfV0FJVCAgICAgICAgICAoMHgwMSA8PCBIRFJfU0RfU0hBUkVfU0hJRlQpCisjZGVmaW5lIEhEUl9TSEFSRV9TRVJJQUwgICAgICAgICgweDAyIDw8IEhEUl9TRF9TSEFSRV9TSElGVCkKKyNkZWZpbmUgSERSX1NIQVJFX0FMV0FZUyAgICAgICAgKDB4MDMgPDwgSERSX1NEX1NIQVJFX1NISUZUKQorI2RlZmluZSBIRFJfU0hBUkVfREVGRVIgICAgICAgICAoMHgwNCA8PCBIRFJfU0RfU0hBUkVfU0hJRlQpCisKKy8qIEpvYkRlc2MvU2hhcmVkRGVzYyBkZXNjcmlwdG9yIGxlbmd0aCAqLworI2RlZmluZSBIRFJfSkRfTEVOR1RIX01BU0sgICAgICAweDdmCisjZGVmaW5lIEhEUl9TRF9MRU5HVEhfTUFTSyAgICAgIDB4M2YKKworLyoKKyAqIEtFWS9TRVFfS0VZIENvbW1hbmQgQ29uc3RydWN0cworICovCisKKy8qIEtleSBEZXN0aW5hdGlvbiBDbGFzczogMDEgPSBDbGFzcyAxLCAwMiAtIENsYXNzIDIgICovCisjZGVmaW5lIEtFWV9ERVNUX0NMQVNTX1NISUZUICAgIDI1ICAvKiB1c2UgQ0xBU1NfMSBvciBDTEFTU18yICovCisjZGVmaW5lIEtFWV9ERVNUX0NMQVNTX01BU0sgICAgICgweDAzIDw8IEtFWV9ERVNUX0NMQVNTX1NISUZUKQorCisvKiBTY2F0dGVyLUdhdGhlciBUYWJsZS9WYXJpYWJsZSBMZW5ndGggRmllbGQgKi8KKyNkZWZpbmUgS0VZX1NHRiAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBLRVlfVkxGICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisKKy8qIEltbWVkaWF0ZSAtIEtleSBmb2xsb3dzIGNvbW1hbmQgaW4gdGhlIGRlc2NyaXB0b3IgKi8KKyNkZWZpbmUgS0VZX0lNTSAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorCisvKgorICogRW5jcnlwdGVkIC0gS2V5IGlzIGVuY3J5cHRlZCBlaXRoZXIgd2l0aCB0aGUgS0VLLCBvcgorICogd2l0aCB0aGUgVERLRUsgaWYgVEsgaXMgc2V0CisgKi8KKyNkZWZpbmUgS0VZX0VOQyAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorCisvKgorICogTm8gV3JpdGUgQmFjayAtIERvIG5vdCBhbGxvdyBrZXkgdG8gYmUgRklGTyBTVE9SRWQKKyAqLworI2RlZmluZSBLRVlfTldCCQkJMHgwMDIwMDAwMAorCisvKgorICogRW5oYW5jZWQgRW5jcnlwdGlvbiBvZiBLZXkKKyAqLworI2RlZmluZSBLRVlfRUtUCQkJMHgwMDEwMDAwMAorCisvKgorICogRW5jcnlwdGVkIHdpdGggVHJ1c3RlZCBLZXkKKyAqLworI2RlZmluZSBLRVlfVEsJCQkweDAwMDA4MDAwCisKKy8qCisgKiBLREVTVCAtIEtleSBEZXN0aW5hdGlvbjogMCAtIGNsYXNzIGtleSByZWdpc3RlciwKKyAqIDEgLSBQS0hBICdlJywgMiAtIEFGSEEgU2JveCwgMyAtIE1ESEEgc3BsaXQta2V5CisgKi8KKyNkZWZpbmUgS0VZX0RFU1RfU0hJRlQgICAgICAgICAgMTYKKyNkZWZpbmUgS0VZX0RFU1RfTUFTSyAgICAgICAgICAgKDB4MDMgPDwgS0VZX0RFU1RfU0hJRlQpCisKKyNkZWZpbmUgS0VZX0RFU1RfQ0xBU1NfUkVHICAgICAgKDB4MDAgPDwgS0VZX0RFU1RfU0hJRlQpCisjZGVmaW5lIEtFWV9ERVNUX1BLSEFfRSAgICAgICAgICgweDAxIDw8IEtFWV9ERVNUX1NISUZUKQorI2RlZmluZSBLRVlfREVTVF9BRkhBX1NCT1ggICAgICAoMHgwMiA8PCBLRVlfREVTVF9TSElGVCkKKyNkZWZpbmUgS0VZX0RFU1RfTURIQV9TUExJVCAgICAgKDB4MDMgPDwgS0VZX0RFU1RfU0hJRlQpCisKKy8qIExlbmd0aCBpbiBieXRlcyAqLworI2RlZmluZSBLRVlfTEVOR1RIX01BU0sgICAgICAgICAweDAwMDAwM2ZmCisKKy8qCisgKiBMT0FEL1NFUV9MT0FEL1NUT1JFL1NFUV9TVE9SRSBDb21tYW5kIENvbnN0cnVjdHMKKyAqLworCisvKgorICogTG9hZC9TdG9yZSBEZXN0aW5hdGlvbjogMCA9IGNsYXNzIGluZGVwZW5kZW50IENDQiwKKyAqIDEgPSBjbGFzcyAxIENDQiwgMiA9IGNsYXNzIDIgQ0NCLCAzID0gREVDTworICovCisjZGVmaW5lIExEU1RfQ0xBU1NfU0hJRlQgICAgICAgIDI1CisjZGVmaW5lIExEU1RfQ0xBU1NfTUFTSyAgICAgICAgICgweDAzIDw8IExEU1RfQ0xBU1NfU0hJRlQpCisjZGVmaW5lIExEU1RfQ0xBU1NfSU5EX0NDQiAgICAgICgweDAwIDw8IExEU1RfQ0xBU1NfU0hJRlQpCisjZGVmaW5lIExEU1RfQ0xBU1NfMV9DQ0IgICAgICAgICgweDAxIDw8IExEU1RfQ0xBU1NfU0hJRlQpCisjZGVmaW5lIExEU1RfQ0xBU1NfMl9DQ0IgICAgICAgICgweDAyIDw8IExEU1RfQ0xBU1NfU0hJRlQpCisjZGVmaW5lIExEU1RfQ0xBU1NfREVDTyAgICAgICAgICgweDAzIDw8IExEU1RfQ0xBU1NfU0hJRlQpCisKKy8qIFNjYXR0ZXItR2F0aGVyIFRhYmxlL1ZhcmlhYmxlIExlbmd0aCBGaWVsZCAqLworI2RlZmluZSBMRFNUX1NHRiAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIExEU1RfVkxGCQlMRFNUX1NHRgorCisvKiBJbW1lZGlhdGUgLSBLZXkgZm9sbG93cyB0aGlzIGNvbW1hbmQgaW4gZGVzY3JpcHRvciAgICAqLworI2RlZmluZSBMRFNUX0lNTV9NQVNLICAgICAgICAgICAxCisjZGVmaW5lIExEU1RfSU1NX1NISUZUICAgICAgICAgIDIzCisjZGVmaW5lIExEU1RfSU1NICAgICAgICAgICAgICAgIChMRFNUX0lNTV9NQVNLIDw8IExEU1RfSU1NX1NISUZUKQorCisvKiBTUkMvRFNUIC0gRGVzdGluYXRpb24gZm9yIExPQUQsIFNvdXJjZSBmb3IgU1RPUkUgICAqLworI2RlZmluZSBMRFNUX1NSQ0RTVF9TSElGVCAgICAgICAxNgorI2RlZmluZSBMRFNUX1NSQ0RTVF9NQVNLICAgICAgICAoMHg3ZiA8PCBMRFNUX1NSQ0RTVF9TSElGVCkKKworI2RlZmluZSBMRFNUX1NSQ0RTVF9CWVRFX0NPTlRFWFQJKDB4MjAgPDwgTERTVF9TUkNEU1RfU0hJRlQpCisjZGVmaW5lIExEU1RfU1JDRFNUX0JZVEVfS0VZCQkoMHg0MCA8PCBMRFNUX1NSQ0RTVF9TSElGVCkKKyNkZWZpbmUgTERTVF9TUkNEU1RfQllURV9JTkZJRk8JCSgweDdjIDw8IExEU1RfU1JDRFNUX1NISUZUKQorI2RlZmluZSBMRFNUX1NSQ0RTVF9CWVRFX09VVEZJRk8JKDB4N2UgPDwgTERTVF9TUkNEU1RfU0hJRlQpCisKKyNkZWZpbmUgTERTVF9TUkNEU1RfV09SRF9NT0RFX1JFRwkoMHgwMCA8PCBMRFNUX1NSQ0RTVF9TSElGVCkKKyNkZWZpbmUgTERTVF9TUkNEU1RfV09SRF9LRVlTWl9SRUcJKDB4MDEgPDwgTERTVF9TUkNEU1RfU0hJRlQpCisjZGVmaW5lIExEU1RfU1JDRFNUX1dPUkRfREFUQVNaX1JFRwkoMHgwMiA8PCBMRFNUX1NSQ0RTVF9TSElGVCkKKyNkZWZpbmUgTERTVF9TUkNEU1RfV09SRF9JQ1ZTWl9SRUcJKDB4MDMgPDwgTERTVF9TUkNEU1RfU0hJRlQpCisjZGVmaW5lIExEU1RfU1JDRFNUX1dPUkRfQ0hBQ1RSTAkoMHgwNiA8PCBMRFNUX1NSQ0RTVF9TSElGVCkKKyNkZWZpbmUgTERTVF9TUkNEU1RfV09SRF9ERUNPQ1RSTCAgICAgICAoMHgwNiA8PCBMRFNUX1NSQ0RTVF9TSElGVCkKKyNkZWZpbmUgTERTVF9TUkNEU1RfV09SRF9JUlFDVFJMCSgweDA3IDw8IExEU1RfU1JDRFNUX1NISUZUKQorI2RlZmluZSBMRFNUX1NSQ0RTVF9XT1JEX0RFQ09fUENMT1ZSRCAgICgweDA3IDw8IExEU1RfU1JDRFNUX1NISUZUKQorI2RlZmluZSBMRFNUX1NSQ0RTVF9XT1JEX0NMUlcJCSgweDA4IDw8IExEU1RfU1JDRFNUX1NISUZUKQorI2RlZmluZSBMRFNUX1NSQ0RTVF9XT1JEX0RFQ09fTUFUSDAgICAgICgweDA4IDw8IExEU1RfU1JDRFNUX1NISUZUKQorI2RlZmluZSBMRFNUX1NSQ0RTVF9XT1JEX1NUQVQJCSgweDA5IDw8IExEU1RfU1JDRFNUX1NISUZUKQorI2RlZmluZSBMRFNUX1NSQ0RTVF9XT1JEX0RFQ09fTUFUSDEgICAgICgweDA5IDw8IExEU1RfU1JDRFNUX1NISUZUKQorI2RlZmluZSBMRFNUX1NSQ0RTVF9XT1JEX0RFQ09fTUFUSDIgICAgICgweDBhIDw8IExEU1RfU1JDRFNUX1NISUZUKQorI2RlZmluZSBMRFNUX1NSQ0RTVF9XT1JEX0RFQ09fQUFEX1NaICAgICgweDBiIDw8IExEU1RfU1JDRFNUX1NISUZUKQorI2RlZmluZSBMRFNUX1NSQ0RTVF9XT1JEX0RFQ09fTUFUSDMgICAgICgweDBiIDw8IExEU1RfU1JDRFNUX1NISUZUKQorI2RlZmluZSBMRFNUX1NSQ0RTVF9XT1JEX0NMQVNTMV9JQ1ZfU1ogICgweDBjIDw8IExEU1RfU1JDRFNUX1NISUZUKQorI2RlZmluZSBMRFNUX1NSQ0RTVF9XT1JEX0FMVERTX0NMQVNTMSAgICgweDBmIDw8IExEU1RfU1JDRFNUX1NISUZUKQorI2RlZmluZSBMRFNUX1NSQ0RTVF9XT1JEX1BLSEFfQV9TWiAgICAgICgweDEwIDw8IExEU1RfU1JDRFNUX1NISUZUKQorI2RlZmluZSBMRFNUX1NSQ0RTVF9XT1JEX1BLSEFfQl9TWiAgICAgICgweDExIDw8IExEU1RfU1JDRFNUX1NISUZUKQorI2RlZmluZSBMRFNUX1NSQ0RTVF9XT1JEX1BLSEFfTl9TWiAgICAgICgweDEyIDw8IExEU1RfU1JDRFNUX1NISUZUKQorI2RlZmluZSBMRFNUX1NSQ0RTVF9XT1JEX1BLSEFfRV9TWiAgICAgICgweDEzIDw8IExEU1RfU1JDRFNUX1NISUZUKQorI2RlZmluZSBMRFNUX1NSQ0RTVF9XT1JEX0RFU0NCVUYgICAgICAgICgweDQwIDw8IExEU1RfU1JDRFNUX1NISUZUKQorI2RlZmluZSBMRFNUX1NSQ0RTVF9XT1JEX0lORk9fRklGTyAgICAgICgweDdhIDw8IExEU1RfU1JDRFNUX1NISUZUKQorCisvKiBPZmZzZXQgaW4gc291cmNlL2Rlc3RpbmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTERTVF9PRkZTRVRfU0hJRlQgICAgICAgOAorI2RlZmluZSBMRFNUX09GRlNFVF9NQVNLICAgICAgICAoMHhmZiA8PCBMRFNUX09GRlNFVF9TSElGVCkKKworLyogTERPRkYgZGVmaW5pdGlvbnMgdXNlZCB3aGVuIERTVCA9IExEU1RfU1JDRFNUX1dPUkRfREVDT0NUUkwgKi8KKy8qIFRoZXNlIGNvdWxkIGFsc28gYmUgc2hpZnRlZCBieSBMRFNUX09GRlNFVF9TSElGVCAtIHRoaXMgcmVhZHMgYmV0dGVyICovCisjZGVmaW5lIExET0ZGX0NIR19TSEFSRV9TSElGVCAgICAgICAgMAorI2RlZmluZSBMRE9GRl9DSEdfU0hBUkVfTUFTSyAgICAgICAgICgweDMgPDwgTERPRkZfQ0hHX1NIQVJFX1NISUZUKQorI2RlZmluZSBMRE9GRl9DSEdfU0hBUkVfTkVWRVIgICAgICAgICgweDEgPDwgTERPRkZfQ0hHX1NIQVJFX1NISUZUKQorI2RlZmluZSBMRE9GRl9DSEdfU0hBUkVfT0tfTk9fUFJPUCAgICgweDIgPDwgTERPRkZfQ0hHX1NIQVJFX1NISUZUKQorI2RlZmluZSBMRE9GRl9DSEdfU0hBUkVfT0tfUFJPUCAgICAgICgweDMgPDwgTERPRkZfQ0hHX1NIQVJFX1NISUZUKQorCisjZGVmaW5lIExET0ZGX0VOQUJMRV9BVVRPX05GSUZPICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgTERPRkZfRElTQUJMRV9BVVRPX05GSUZPICAgICAgICAoMSA8PCAzKQorCisjZGVmaW5lIExET0ZGX0NIR19OT05TRVFMSU9ETl9TSElGVCAgICAgNAorI2RlZmluZSBMRE9GRl9DSEdfTk9OU0VRTElPRE5fTUFTSyAgICAgICgweDMgPDwgTERPRkZfQ0hHX05PTlNFUUxJT0ROX1NISUZUKQorI2RlZmluZSBMRE9GRl9DSEdfTk9OU0VRTElPRE5fU0VRICAgICAgICgweDEgPDwgTERPRkZfQ0hHX05PTlNFUUxJT0ROX1NISUZUKQorI2RlZmluZSBMRE9GRl9DSEdfTk9OU0VRTElPRE5fTk9OX1NFUSAgICgweDIgPDwgTERPRkZfQ0hHX05PTlNFUUxJT0ROX1NISUZUKQorI2RlZmluZSBMRE9GRl9DSEdfTk9OU0VRTElPRE5fVFJVU1RFRCAgICgweDMgPDwgTERPRkZfQ0hHX05PTlNFUUxJT0ROX1NISUZUKQorCisjZGVmaW5lIExET0ZGX0NIR19TRVFMSU9ETl9TSElGVCAgICAgNgorI2RlZmluZSBMRE9GRl9DSEdfU0VRTElPRE5fTUFTSyAgICAgICgweDMgPDwgTERPRkZfQ0hHX1NFUUxJT0ROX1NISUZUKQorI2RlZmluZSBMRE9GRl9DSEdfU0VRTElPRE5fU0VRICAgICAgICgweDEgPDwgTERPRkZfQ0hHX1NFUUxJT0ROX1NISUZUKQorI2RlZmluZSBMRE9GRl9DSEdfU0VRTElPRE5fTk9OX1NFUSAgICgweDIgPDwgTERPRkZfQ0hHX1NFUUxJT0ROX1NISUZUKQorI2RlZmluZSBMRE9GRl9DSEdfU0VRTElPRE5fVFJVU1RFRCAgICgweDMgPDwgTERPRkZfQ0hHX1NFUUxJT0ROX1NISUZUKQorCisvKiBEYXRhIGxlbmd0aCBpbiBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExEU1RfTEVOX1NISUZUICAgICAgICAgIDAKKyNkZWZpbmUgTERTVF9MRU5fTUFTSyAgICAgICAgICAgKDB4ZmYgPDwgTERTVF9MRU5fU0hJRlQpCisKKy8qIFNwZWNpYWwgTGVuZ3RoIGRlZmluaXRpb25zIHdoZW4gZHN0PWRlY28tY3RybCAqLworI2RlZmluZSBMRExFTl9FTkFCTEVfT1NMX0NPVU5UICAgICAgKDEgPDwgNykKKyNkZWZpbmUgTERMRU5fUlNUX0NIQV9PRklGT19QVFIgICAgICgxIDw8IDYpCisjZGVmaW5lIExETEVOX1JTVF9PRklGTyAgICAgICAgICAgICAoMSA8PCA1KQorI2RlZmluZSBMRExFTl9TRVRfT0ZJRk9fT0ZGX1ZBTElEICAgKDEgPDwgNCkKKyNkZWZpbmUgTERMRU5fU0VUX09GSUZPX09GRl9SU1ZEICAgICgxIDw8IDMpCisjZGVmaW5lIExETEVOX1NFVF9PRklGT19PRkZTRVRfU0hJRlQgMAorI2RlZmluZSBMRExFTl9TRVRfT0ZJRk9fT0ZGU0VUX01BU0sgKDMgPDwgTERMRU5fU0VUX09GSUZPX09GRlNFVF9TSElGVCkKKworLyoKKyAqIEZJRk9fTE9BRC9GSUZPX1NUT1JFL1NFUV9GSUZPX0xPQUQvU0VRX0ZJRk9fU1RPUkUKKyAqIENvbW1hbmQgQ29uc3RydWN0cworICovCisKKy8qCisgKiBMb2FkIERlc3RpbmF0aW9uOiAwID0gc2tpcCAoU0VRX0ZJRk9fTE9BRCBvbmx5KSwKKyAqIDEgPSBMb2FkIGZvciBDbGFzczEsIDIgPSBMb2FkIGZvciBDbGFzczIsIDMgPSBMb2FkIGJvdGgKKyAqIFN0b3JlIFNvdXJjZTogMCA9IG5vcm1hbCwgMSA9IENsYXNzMWtleSwgMiA9IENsYXNzMmtleQorICovCisjZGVmaW5lIEZJRk9MRF9DTEFTU19TSElGVCAgICAgIDI1CisjZGVmaW5lIEZJRk9MRF9DTEFTU19NQVNLICAgICAgICgweDAzIDw8IEZJRk9MRF9DTEFTU19TSElGVCkKKyNkZWZpbmUgRklGT0xEX0NMQVNTX1NLSVAgICAgICAgKDB4MDAgPDwgRklGT0xEX0NMQVNTX1NISUZUKQorI2RlZmluZSBGSUZPTERfQ0xBU1NfQ0xBU1MxICAgICAoMHgwMSA8PCBGSUZPTERfQ0xBU1NfU0hJRlQpCisjZGVmaW5lIEZJRk9MRF9DTEFTU19DTEFTUzIgICAgICgweDAyIDw8IEZJRk9MRF9DTEFTU19TSElGVCkKKyNkZWZpbmUgRklGT0xEX0NMQVNTX0JPVEggICAgICAgKDB4MDMgPDwgRklGT0xEX0NMQVNTX1NISUZUKQorCisjZGVmaW5lIEZJRk9TVF9DTEFTU19TSElGVCAgICAgIDI1CisjZGVmaW5lIEZJRk9TVF9DTEFTU19NQVNLICAgICAgICgweDAzIDw8IEZJRk9TVF9DTEFTU19TSElGVCkKKyNkZWZpbmUgRklGT1NUX0NMQVNTX05PUk1BTCAgICAgKDB4MDAgPDwgRklGT1NUX0NMQVNTX1NISUZUKQorI2RlZmluZSBGSUZPU1RfQ0xBU1NfQ0xBU1MxS0VZICAoMHgwMSA8PCBGSUZPU1RfQ0xBU1NfU0hJRlQpCisjZGVmaW5lIEZJRk9TVF9DTEFTU19DTEFTUzJLRVkgICgweDAyIDw8IEZJRk9TVF9DTEFTU19TSElGVCkKKworLyoKKyAqIFNjYXR0ZXItR2F0aGVyIFRhYmxlL1ZhcmlhYmxlIExlbmd0aCBGaWVsZAorICogSWYgc2V0IGZvciBGSUZPX0xPQUQsIHJlZmVycyB0byBhIFNHIHRhYmxlLiBXaXRoaW4KKyAqIFNFUV9GSUZPX0xPQUQsIGlzIHZhcmlhYmxlIGlucHV0IHNlcXVlbmNlCisgKi8KKyNkZWZpbmUgRklGT0xEU1RfU0dGX1NISUZUICAgICAgMjQKKyNkZWZpbmUgRklGT0xEU1RfU0dGX01BU0sgICAgICAgKDEgPDwgRklGT0xEU1RfU0dGX1NISUZUKQorI2RlZmluZSBGSUZPTERTVF9WTEZfTUFTSyAgICAgICAoMSA8PCBGSUZPTERTVF9TR0ZfU0hJRlQpCisjZGVmaW5lIEZJRk9MRFNUX1NHRiAgICAgICAgICAgICgxIDw8IEZJRk9MRFNUX1NHRl9TSElGVCkKKyNkZWZpbmUgRklGT0xEU1RfVkxGICAgICAgICAgICAgKDEgPDwgRklGT0xEU1RfU0dGX1NISUZUKQorCisvKiBJbW1lZGlhdGUgLSBEYXRhIGZvbGxvd3MgY29tbWFuZCBpbiBkZXNjcmlwdG9yICovCisjZGVmaW5lIEZJRk9MRF9JTU1fU0hJRlQgICAgICAyMworI2RlZmluZSBGSUZPTERfSU1NX01BU0sgICAgICAgKDEgPDwgRklGT0xEX0lNTV9TSElGVCkKKyNkZWZpbmUgRklGT0xEX0lNTSAgICAgICAgICAgICgxIDw8IEZJRk9MRF9JTU1fU0hJRlQpCisKKy8qIENvbnRpbnVlIC0gTm90IHRoZSBsYXN0IEZJRk8gc3RvcmUgdG8gY29tZSAqLworI2RlZmluZSBGSUZPU1RfQ09OVF9TSElGVCAgICAgMjMKKyNkZWZpbmUgRklGT1NUX0NPTlRfTUFTSyAgICAgICgxIDw8IEZJRk9TVF9DT05UX1NISUZUKQorI2RlZmluZSBGSUZPU1RfQ09OVF9NQVNLICAgICAgKDEgPDwgRklGT1NUX0NPTlRfU0hJRlQpCisKKy8qCisgKiBFeHRlbmRlZCBMZW5ndGggLSB1c2UgMzItYml0IGV4dGVuZGVkIGxlbmd0aCB0aGF0CisgKiBmb2xsb3dzIHRoZSBwb2ludGVyIGZpZWxkLiBJbGxlZ2FsIHdpdGggSU1NIHNldAorICovCisjZGVmaW5lIEZJRk9MRFNUX0VYVF9TSElGVCAgICAgIDIyCisjZGVmaW5lIEZJRk9MRFNUX0VYVF9NQVNLICAgICAgICgxIDw8IEZJRk9MRFNUX0VYVF9TSElGVCkKKyNkZWZpbmUgRklGT0xEU1RfRVhUICAgICAgICAgICAgKDEgPDwgRklGT0xEU1RfRVhUX1NISUZUKQorCisvKiBJbnB1dCBkYXRhIHR5cGUuKi8KKyNkZWZpbmUgRklGT0xEX1RZUEVfU0hJRlQgICAgICAgMTYKKyNkZWZpbmUgRklGT0xEX0NPTlRfVFlQRV9TSElGVCAgMTkgLyogc2hpZnQgcGFzdCBsYXN0LWZsdXNoIGJpdHMgKi8KKyNkZWZpbmUgRklGT0xEX1RZUEVfTUFTSyAgICAgICAgKDB4M2YgPDwgRklGT0xEX1RZUEVfU0hJRlQpCisKKy8qIFBLIHR5cGVzICovCisjZGVmaW5lIEZJRk9MRF9UWVBFX1BLICAgICAgICAgICgweDAwIDw8IEZJRk9MRF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPTERfVFlQRV9QS19NQVNLICAgICAoMHgzMCA8PCBGSUZPTERfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT0xEX1RZUEVfUEtfVFlQRU1BU0sgKDB4MGYgPDwgRklGT0xEX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9MRF9UWVBFX1BLX0EwICAgICAgICgweDAwIDw8IEZJRk9MRF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPTERfVFlQRV9QS19BMSAgICAgICAoMHgwMSA8PCBGSUZPTERfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT0xEX1RZUEVfUEtfQTIgICAgICAgKDB4MDIgPDwgRklGT0xEX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9MRF9UWVBFX1BLX0EzICAgICAgICgweDAzIDw8IEZJRk9MRF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPTERfVFlQRV9QS19CMCAgICAgICAoMHgwNCA8PCBGSUZPTERfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT0xEX1RZUEVfUEtfQjEgICAgICAgKDB4MDUgPDwgRklGT0xEX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9MRF9UWVBFX1BLX0IyICAgICAgICgweDA2IDw8IEZJRk9MRF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPTERfVFlQRV9QS19CMyAgICAgICAoMHgwNyA8PCBGSUZPTERfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT0xEX1RZUEVfUEtfTiAgICAgICAgKDB4MDggPDwgRklGT0xEX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9MRF9UWVBFX1BLX0EgICAgICAgICgweDBjIDw8IEZJRk9MRF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPTERfVFlQRV9QS19CICAgICAgICAoMHgwZCA8PCBGSUZPTERfVFlQRV9TSElGVCkKKworLyogT3RoZXIgdHlwZXMuIE5lZWQgdG8gT1IgaW4gbGFzdC9mbHVzaCBiaXRzIGFzIGRlc2lyZWQgKi8KKyNkZWZpbmUgRklGT0xEX1RZUEVfTVNHX01BU0sgICAgKDB4MzggPDwgRklGT0xEX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9MRF9UWVBFX01TRyAgICAgICAgICgweDEwIDw8IEZJRk9MRF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPTERfVFlQRV9NU0cxT1VUMiAgICAoMHgxOCA8PCBGSUZPTERfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT0xEX1RZUEVfSVYgICAgICAgICAgKDB4MjAgPDwgRklGT0xEX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9MRF9UWVBFX0JJVERBVEEgICAgICgweDI4IDw8IEZJRk9MRF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPTERfVFlQRV9BQUQgICAgICAgICAoMHgzMCA8PCBGSUZPTERfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT0xEX1RZUEVfSUNWICAgICAgICAgKDB4MzggPDwgRklGT0xEX1RZUEVfU0hJRlQpCisKKy8qIExhc3QvRmx1c2ggYml0cyBmb3IgdXNlIHdpdGggIm90aGVyIiB0eXBlcyBhYm92ZSAqLworI2RlZmluZSBGSUZPTERfVFlQRV9BQ1RfTUFTSyAgICAoMHgwNyA8PCBGSUZPTERfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT0xEX1RZUEVfTk9BQ1RJT04gICAgKDB4MDAgPDwgRklGT0xEX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9MRF9UWVBFX0ZMVVNIMSAgICAgICgweDAxIDw8IEZJRk9MRF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPTERfVFlQRV9MQVNUMSAgICAgICAoMHgwMiA8PCBGSUZPTERfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT0xEX1RZUEVfTEFTVDJGTFVTSCAgKDB4MDMgPDwgRklGT0xEX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9MRF9UWVBFX0xBU1QyICAgICAgICgweDA0IDw8IEZJRk9MRF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPTERfVFlQRV9MQVNUMkZMVVNIMSAoMHgwNSA8PCBGSUZPTERfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT0xEX1RZUEVfTEFTVEJPVEggICAgKDB4MDYgPDwgRklGT0xEX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9MRF9UWVBFX0xBU1RCT1RIRkwgICgweDA3IDw8IEZJRk9MRF9UWVBFX1NISUZUKQorCisjZGVmaW5lIEZJRk9MRFNUX0xFTl9NQVNLICAgICAgIDB4ZmZmZgorI2RlZmluZSBGSUZPTERTVF9FWFRfTEVOX01BU0sgICAweGZmZmZmZmZmCisKKy8qIE91dHB1dCBkYXRhIHR5cGVzICovCisjZGVmaW5lIEZJRk9TVF9UWVBFX1NISUZUICAgICAgIDE2CisjZGVmaW5lIEZJRk9TVF9UWVBFX01BU0sgICAgICAgICgweDNmIDw8IEZJRk9TVF9UWVBFX1NISUZUKQorCisjZGVmaW5lIEZJRk9TVF9UWVBFX1BLSEFfQTAgICAgICAoMHgwMCA8PCBGSUZPU1RfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT1NUX1RZUEVfUEtIQV9BMSAgICAgICgweDAxIDw8IEZJRk9TVF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPU1RfVFlQRV9QS0hBX0EyICAgICAgKDB4MDIgPDwgRklGT1NUX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9TVF9UWVBFX1BLSEFfQTMgICAgICAoMHgwMyA8PCBGSUZPU1RfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT1NUX1RZUEVfUEtIQV9CMCAgICAgICgweDA0IDw8IEZJRk9TVF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPU1RfVFlQRV9QS0hBX0IxICAgICAgKDB4MDUgPDwgRklGT1NUX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9TVF9UWVBFX1BLSEFfQjIgICAgICAoMHgwNiA8PCBGSUZPU1RfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT1NUX1RZUEVfUEtIQV9CMyAgICAgICgweDA3IDw8IEZJRk9TVF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPU1RfVFlQRV9QS0hBX04gICAgICAgKDB4MDggPDwgRklGT1NUX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9TVF9UWVBFX1BLSEFfQSAgICAgICAoMHgwYyA8PCBGSUZPU1RfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT1NUX1RZUEVfUEtIQV9CICAgICAgICgweDBkIDw8IEZJRk9TVF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPU1RfVFlQRV9BRl9TQk9YX0pLRUsgKDB4MTAgPDwgRklGT1NUX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9TVF9UWVBFX0FGX1NCT1hfVEtFSyAoMHgyMSA8PCBGSUZPU1RfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT1NUX1RZUEVfUEtIQV9FX0pLRUsgICgweDIyIDw8IEZJRk9TVF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPU1RfVFlQRV9QS0hBX0VfVEtFSyAgKDB4MjMgPDwgRklGT1NUX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9TVF9UWVBFX0tFWV9LRUsgICAgICAoMHgyNCA8PCBGSUZPU1RfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT1NUX1RZUEVfS0VZX1RLRUsgICAgICgweDI1IDw8IEZJRk9TVF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPU1RfVFlQRV9TUExJVF9LRUsgICAgKDB4MjYgPDwgRklGT1NUX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9TVF9UWVBFX1NQTElUX1RLRUsgICAoMHgyNyA8PCBGSUZPU1RfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT1NUX1RZUEVfT1VURklGT19LRUsgICgweDI4IDw8IEZJRk9TVF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPU1RfVFlQRV9PVVRGSUZPX1RLRUsgKDB4MjkgPDwgRklGT1NUX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9TVF9UWVBFX01FU1NBR0VfREFUQSAoMHgzMCA8PCBGSUZPU1RfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT1NUX1RZUEVfUk5HU1RPUkUgICAgICgweDM0IDw8IEZJRk9TVF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPU1RfVFlQRV9STkdGSUZPICAgICAgKDB4MzUgPDwgRklGT1NUX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9TVF9UWVBFX1NLSVAgICAgICAgICAoMHgzZiA8PCBGSUZPU1RfVFlQRV9TSElGVCkKKworLyoKKyAqIE9QRVJBVElPTiBDb21tYW5kIENvbnN0cnVjdHMKKyAqLworCisvKiBPcGVyYXRpb24gdHlwZSBzZWxlY3RvcnMgLSBPUCBUWVBFICovCisjZGVmaW5lIE9QX1RZUEVfU0hJRlQgICAgICAgICAgIDI0CisjZGVmaW5lIE9QX1RZUEVfTUFTSyAgICAgICAgICAgICgweDA3IDw8IE9QX1RZUEVfU0hJRlQpCisKKyNkZWZpbmUgT1BfVFlQRV9VTklfUFJPVE9DT0wgICAgKDB4MDAgPDwgT1BfVFlQRV9TSElGVCkKKyNkZWZpbmUgT1BfVFlQRV9QSyAgICAgICAgICAgICAgKDB4MDEgPDwgT1BfVFlQRV9TSElGVCkKKyNkZWZpbmUgT1BfVFlQRV9DTEFTUzFfQUxHICAgICAgKDB4MDIgPDwgT1BfVFlQRV9TSElGVCkKKyNkZWZpbmUgT1BfVFlQRV9DTEFTUzJfQUxHICAgICAgKDB4MDQgPDwgT1BfVFlQRV9TSElGVCkKKyNkZWZpbmUgT1BfVFlQRV9ERUNBUF9QUk9UT0NPTCAgKDB4MDYgPDwgT1BfVFlQRV9TSElGVCkKKyNkZWZpbmUgT1BfVFlQRV9FTkNBUF9QUk9UT0NPTCAgKDB4MDcgPDwgT1BfVFlQRV9TSElGVCkKKworLyogUHJvdG9jb2xJRCBzZWxlY3RvcnMgLSBQUk9USUQgKi8KKyNkZWZpbmUgT1BfUENMSURfU0hJRlQgICAgICAgICAgMTYKKyNkZWZpbmUgT1BfUENMSURfTUFTSyAgICAgICAgICAgKDB4ZmYgPDwgMTYpCisKKy8qIEFzc3VtaW5nIE9QX1RZUEUgPSBPUF9UWVBFX1VOSV9QUk9UT0NPTCAqLworI2RlZmluZSBPUF9QQ0xJRF9JS0VWMV9QUkYgICAgICAoMHgwMSA8PCBPUF9QQ0xJRF9TSElGVCkKKyNkZWZpbmUgT1BfUENMSURfSUtFVjJfUFJGICAgICAgKDB4MDIgPDwgT1BfUENMSURfU0hJRlQpCisjZGVmaW5lIE9QX1BDTElEX1NTTDMwX1BSRiAgICAgICgweDA4IDw8IE9QX1BDTElEX1NISUZUKQorI2RlZmluZSBPUF9QQ0xJRF9UTFMxMF9QUkYgICAgICAoMHgwOSA8PCBPUF9QQ0xJRF9TSElGVCkKKyNkZWZpbmUgT1BfUENMSURfVExTMTFfUFJGICAgICAgKDB4MGEgPDwgT1BfUENMSURfU0hJRlQpCisjZGVmaW5lIE9QX1BDTElEX0RUTFMxMF9QUkYgICAgICgweDBjIDw8IE9QX1BDTElEX1NISUZUKQorI2RlZmluZSBPUF9QQ0xJRF9QUkYgICAgICAgICAgICAoMHgwNiA8PCBPUF9QQ0xJRF9TSElGVCkKKyNkZWZpbmUgT1BfUENMSURfQkxPQiAgICAgICAgICAgKDB4MGQgPDwgT1BfUENMSURfU0hJRlQpCisjZGVmaW5lIE9QX1BDTElEX1NFQ1JFVEtFWSAgICAgICgweDExIDw8IE9QX1BDTElEX1NISUZUKQorI2RlZmluZSBPUF9QQ0xJRF9QVUJMSUNLRVlQQUlSICAoMHgxNCA8PCBPUF9QQ0xJRF9TSElGVCkKKyNkZWZpbmUgT1BfUENMSURfRFNBU0lHTiAgICAgICAgKDB4MTUgPDwgT1BfUENMSURfU0hJRlQpCisjZGVmaW5lIE9QX1BDTElEX0RTQVZFUklGWSAgICAgICgweDE2IDw8IE9QX1BDTElEX1NISUZUKQorCisvKiBBc3N1bWluZyBPUF9UWVBFID0gT1BfVFlQRV9ERUNBUF9QUk9UT0NPTC9FTkNBUF9QUk9UT0NPTCAqLworI2RlZmluZSBPUF9QQ0xJRF9JUFNFQyAgICAgICAgICAoMHgwMSA8PCBPUF9QQ0xJRF9TSElGVCkKKyNkZWZpbmUgT1BfUENMSURfU1JUUCAgICAgICAgICAgKDB4MDIgPDwgT1BfUENMSURfU0hJRlQpCisjZGVmaW5lIE9QX1BDTElEX01BQ1NFQyAgICAgICAgICgweDAzIDw8IE9QX1BDTElEX1NISUZUKQorI2RlZmluZSBPUF9QQ0xJRF9XSUZJICAgICAgICAgICAoMHgwNCA8PCBPUF9QQ0xJRF9TSElGVCkKKyNkZWZpbmUgT1BfUENMSURfV0lNQVggICAgICAgICAgKDB4MDUgPDwgT1BfUENMSURfU0hJRlQpCisjZGVmaW5lIE9QX1BDTElEX1NTTDMwICAgICAgICAgICgweDA4IDw8IE9QX1BDTElEX1NISUZUKQorI2RlZmluZSBPUF9QQ0xJRF9UTFMxMCAgICAgICAgICAoMHgwOSA8PCBPUF9QQ0xJRF9TSElGVCkKKyNkZWZpbmUgT1BfUENMSURfVExTMTEgICAgICAgICAgKDB4MGEgPDwgT1BfUENMSURfU0hJRlQpCisjZGVmaW5lIE9QX1BDTElEX1RMUzEyICAgICAgICAgICgweDBiIDw8IE9QX1BDTElEX1NISUZUKQorI2RlZmluZSBPUF9QQ0xJRF9EVExTICAgICAgICAgICAoMHgwYyA8PCBPUF9QQ0xJRF9TSElGVCkKKworLyoKKyAqIFByb3RvY29sSW5mbyBzZWxlY3RvcnMKKyAqLworI2RlZmluZSBPUF9QQ0xJTkZPX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZgorCisvKiBmb3IgT1BfUENMSURfSVBTRUMgKi8KKyNkZWZpbmUgT1BfUENMX0lQU0VDX0NJUEhFUl9NQVNLICAgICAgICAgICAgICAgICAweGZmMDAKKyNkZWZpbmUgT1BfUENMX0lQU0VDX0FVVEhfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwZmYKKworI2RlZmluZSBPUF9QQ0xfSVBTRUNfREVTX0lWNjQgICAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBPUF9QQ0xfSVBTRUNfREVTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBPUF9QQ0xfSVBTRUNfM0RFUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMwMAorI2RlZmluZSBPUF9QQ0xfSVBTRUNfQUVTX0NCQyAgICAgICAgICAgICAgICAgICAgIDB4MGMwMAorI2RlZmluZSBPUF9QQ0xfSVBTRUNfQUVTX0NUUiAgICAgICAgICAgICAgICAgICAgIDB4MGQwMAorI2RlZmluZSBPUF9QQ0xfSVBTRUNfQUVTX1hUUyAgICAgICAgICAgICAgICAgICAgIDB4MTYwMAorI2RlZmluZSBPUF9QQ0xfSVBTRUNfQUVTX0NDTTggICAgICAgICAgICAgICAgICAgIDB4MGUwMAorI2RlZmluZSBPUF9QQ0xfSVBTRUNfQUVTX0NDTTEyICAgICAgICAgICAgICAgICAgIDB4MGYwMAorI2RlZmluZSBPUF9QQ0xfSVBTRUNfQUVTX0NDTTE2ICAgICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBPUF9QQ0xfSVBTRUNfQUVTX0dDTTggICAgICAgICAgICAgICAgICAgIDB4MTIwMAorI2RlZmluZSBPUF9QQ0xfSVBTRUNfQUVTX0dDTTEyICAgICAgICAgICAgICAgICAgIDB4MTMwMAorI2RlZmluZSBPUF9QQ0xfSVBTRUNfQUVTX0dDTTE2ICAgICAgICAgICAgICAgICAgIDB4MTQwMAorCisjZGVmaW5lIE9QX1BDTF9JUFNFQ19ITUFDX05VTEwgICAgICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIE9QX1BDTF9JUFNFQ19ITUFDX01ENV85NiAgICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIE9QX1BDTF9JUFNFQ19ITUFDX1NIQTFfOTYgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIE9QX1BDTF9JUFNFQ19BRVNfWENCQ19NQUNfOTYgICAgICAgICAgICAgMHgwMDA1CisjZGVmaW5lIE9QX1BDTF9JUFNFQ19ITUFDX01ENV8xMjggICAgICAgICAgICAgICAgMHgwMDA2CisjZGVmaW5lIE9QX1BDTF9JUFNFQ19ITUFDX1NIQTFfMTYwICAgICAgICAgICAgICAgMHgwMDA3CisjZGVmaW5lIE9QX1BDTF9JUFNFQ19ITUFDX1NIQTJfMjU2XzEyOCAgICAgICAgICAgMHgwMDBjCisjZGVmaW5lIE9QX1BDTF9JUFNFQ19ITUFDX1NIQTJfMzg0XzE5MiAgICAgICAgICAgMHgwMDBkCisjZGVmaW5lIE9QX1BDTF9JUFNFQ19ITUFDX1NIQTJfNTEyXzI1NiAgICAgICAgICAgMHgwMDBlCisKKy8qIEZvciBTUlRQIC0gT1BfUENMSURfU1JUUCAqLworI2RlZmluZSBPUF9QQ0xfU1JUUF9DSVBIRVJfTUFTSyAgICAgICAgICAgICAgICAgIDB4ZmYwMAorI2RlZmluZSBPUF9QQ0xfU1JUUF9BVVRIX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDBmZgorCisjZGVmaW5lIE9QX1BDTF9TUlRQX0FFU19DVFIgICAgICAgICAgICAgICAgICAgICAgMHgwZDAwCisKKyNkZWZpbmUgT1BfUENMX1NSVFBfSE1BQ19TSEExXzE2MCAgICAgICAgICAgICAgICAweDAwMDcKKworLyogRm9yIFNTTCAzLjAgLSBPUF9QQ0xJRF9TU0wzMCAqLworI2RlZmluZSBPUF9QQ0xfU1NMMzBfQUVTXzEyOF9DQkNfU0hBICAgICAgICAgICAgIDB4MDAyZgorI2RlZmluZSBPUF9QQ0xfU1NMMzBfQUVTXzEyOF9DQkNfU0hBXzIgICAgICAgICAgIDB4MDAzMAorI2RlZmluZSBPUF9QQ0xfU1NMMzBfQUVTXzEyOF9DQkNfU0hBXzMgICAgICAgICAgIDB4MDAzMQorI2RlZmluZSBPUF9QQ0xfU1NMMzBfQUVTXzEyOF9DQkNfU0hBXzQgICAgICAgICAgIDB4MDAzMgorI2RlZmluZSBPUF9QQ0xfU1NMMzBfQUVTXzEyOF9DQkNfU0hBXzUgICAgICAgICAgIDB4MDAzMworI2RlZmluZSBPUF9QQ0xfU1NMMzBfQUVTXzEyOF9DQkNfU0hBXzYgICAgICAgICAgIDB4MDAzNAorI2RlZmluZSBPUF9QQ0xfU1NMMzBfQUVTXzEyOF9DQkNfU0hBXzcgICAgICAgICAgIDB4MDA4YworI2RlZmluZSBPUF9QQ0xfU1NMMzBfQUVTXzEyOF9DQkNfU0hBXzggICAgICAgICAgIDB4MDA5MAorI2RlZmluZSBPUF9QQ0xfU1NMMzBfQUVTXzEyOF9DQkNfU0hBXzkgICAgICAgICAgIDB4MDA5NAorI2RlZmluZSBPUF9QQ0xfU1NMMzBfQUVTXzEyOF9DQkNfU0hBXzEwICAgICAgICAgIDB4YzAwNAorI2RlZmluZSBPUF9QQ0xfU1NMMzBfQUVTXzEyOF9DQkNfU0hBXzExICAgICAgICAgIDB4YzAwOQorI2RlZmluZSBPUF9QQ0xfU1NMMzBfQUVTXzEyOF9DQkNfU0hBXzEyICAgICAgICAgIDB4YzAwZQorI2RlZmluZSBPUF9QQ0xfU1NMMzBfQUVTXzEyOF9DQkNfU0hBXzEzICAgICAgICAgIDB4YzAxMworI2RlZmluZSBPUF9QQ0xfU1NMMzBfQUVTXzEyOF9DQkNfU0hBXzE0ICAgICAgICAgIDB4YzAxOAorI2RlZmluZSBPUF9QQ0xfU1NMMzBfQUVTXzEyOF9DQkNfU0hBXzE1ICAgICAgICAgIDB4YzAxZAorI2RlZmluZSBPUF9QQ0xfU1NMMzBfQUVTXzEyOF9DQkNfU0hBXzE2ICAgICAgICAgIDB4YzAxZQorI2RlZmluZSBPUF9QQ0xfU1NMMzBfQUVTXzEyOF9DQkNfU0hBXzE3ICAgICAgICAgIDB4YzAxZgorCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMjU2X0NCQ19TSEEgICAgICAgICAgICAgMHgwMDM1CisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMjU2X0NCQ19TSEFfMiAgICAgICAgICAgMHgwMDM2CisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMjU2X0NCQ19TSEFfMyAgICAgICAgICAgMHgwMDM3CisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMjU2X0NCQ19TSEFfNCAgICAgICAgICAgMHgwMDM4CisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMjU2X0NCQ19TSEFfNSAgICAgICAgICAgMHgwMDM5CisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMjU2X0NCQ19TSEFfNiAgICAgICAgICAgMHgwMDNhCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMjU2X0NCQ19TSEFfNyAgICAgICAgICAgMHgwMDhkCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMjU2X0NCQ19TSEFfOCAgICAgICAgICAgMHgwMDkxCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMjU2X0NCQ19TSEFfOSAgICAgICAgICAgMHgwMDk1CisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMjU2X0NCQ19TSEFfMTAgICAgICAgICAgMHhjMDA1CisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMjU2X0NCQ19TSEFfMTEgICAgICAgICAgMHhjMDBhCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMjU2X0NCQ19TSEFfMTIgICAgICAgICAgMHhjMDBmCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMjU2X0NCQ19TSEFfMTMgICAgICAgICAgMHhjMDE0CisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMjU2X0NCQ19TSEFfMTQgICAgICAgICAgMHhjMDE5CisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMjU2X0NCQ19TSEFfMTUgICAgICAgICAgMHhjMDIwCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMjU2X0NCQ19TSEFfMTYgICAgICAgICAgMHhjMDIxCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMjU2X0NCQ19TSEFfMTcgICAgICAgICAgMHhjMDIyCisKKyNkZWZpbmUgT1BfUENMX1NTTDMwXzNERVNfRURFX0NCQ19NRDUgICAgICAgICAgICAweDAwMjMKKworI2RlZmluZSBPUF9QQ0xfU1NMMzBfM0RFU19FREVfQ0JDX1NIQSAgICAgICAgICAgIDB4MDAxZgorI2RlZmluZSBPUF9QQ0xfU1NMMzBfM0RFU19FREVfQ0JDX1NIQV8yICAgICAgICAgIDB4MDA4YgorI2RlZmluZSBPUF9QQ0xfU1NMMzBfM0RFU19FREVfQ0JDX1NIQV8zICAgICAgICAgIDB4MDA4ZgorI2RlZmluZSBPUF9QQ0xfU1NMMzBfM0RFU19FREVfQ0JDX1NIQV80ICAgICAgICAgIDB4MDA5MworI2RlZmluZSBPUF9QQ0xfU1NMMzBfM0RFU19FREVfQ0JDX1NIQV81ICAgICAgICAgIDB4MDAwYQorI2RlZmluZSBPUF9QQ0xfU1NMMzBfM0RFU19FREVfQ0JDX1NIQV82ICAgICAgICAgIDB4MDAwZAorI2RlZmluZSBPUF9QQ0xfU1NMMzBfM0RFU19FREVfQ0JDX1NIQV83ICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBPUF9QQ0xfU1NMMzBfM0RFU19FREVfQ0JDX1NIQV84ICAgICAgICAgIDB4MDAxMworI2RlZmluZSBPUF9QQ0xfU1NMMzBfM0RFU19FREVfQ0JDX1NIQV85ICAgICAgICAgIDB4MDAxNgorI2RlZmluZSBPUF9QQ0xfU1NMMzBfM0RFU19FREVfQ0JDX1NIQV8xMCAgICAgICAgIDB4MDAxYgorI2RlZmluZSBPUF9QQ0xfU1NMMzBfM0RFU19FREVfQ0JDX1NIQV8xMSAgICAgICAgIDB4YzAwMworI2RlZmluZSBPUF9QQ0xfU1NMMzBfM0RFU19FREVfQ0JDX1NIQV8xMiAgICAgICAgIDB4YzAwOAorI2RlZmluZSBPUF9QQ0xfU1NMMzBfM0RFU19FREVfQ0JDX1NIQV8xMyAgICAgICAgIDB4YzAwZAorI2RlZmluZSBPUF9QQ0xfU1NMMzBfM0RFU19FREVfQ0JDX1NIQV8xNCAgICAgICAgIDB4YzAxMgorI2RlZmluZSBPUF9QQ0xfU1NMMzBfM0RFU19FREVfQ0JDX1NIQV8xNSAgICAgICAgIDB4YzAxNworI2RlZmluZSBPUF9QQ0xfU1NMMzBfM0RFU19FREVfQ0JDX1NIQV8xNiAgICAgICAgIDB4YzAxYQorI2RlZmluZSBPUF9QQ0xfU1NMMzBfM0RFU19FREVfQ0JDX1NIQV8xNyAgICAgICAgIDB4YzAxYgorI2RlZmluZSBPUF9QQ0xfU1NMMzBfM0RFU19FREVfQ0JDX1NIQV8xOCAgICAgICAgIDB4YzAxYworCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9ERVM0MF9DQkNfTUQ1ICAgICAgICAgICAgICAgMHgwMDI5CisKKyNkZWZpbmUgT1BfUENMX1NTTDMwX0RFU19DQkNfTUQ1ICAgICAgICAgICAgICAgICAweDAwMjIKKworI2RlZmluZSBPUF9QQ0xfU1NMMzBfREVTNDBfQ0JDX1NIQSAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBPUF9QQ0xfU1NMMzBfREVTNDBfQ0JDX1NIQV8yICAgICAgICAgICAgIDB4MDAwYgorI2RlZmluZSBPUF9QQ0xfU1NMMzBfREVTNDBfQ0JDX1NIQV8zICAgICAgICAgICAgIDB4MDAwZQorI2RlZmluZSBPUF9QQ0xfU1NMMzBfREVTNDBfQ0JDX1NIQV80ICAgICAgICAgICAgIDB4MDAxMQorI2RlZmluZSBPUF9QQ0xfU1NMMzBfREVTNDBfQ0JDX1NIQV81ICAgICAgICAgICAgIDB4MDAxNAorI2RlZmluZSBPUF9QQ0xfU1NMMzBfREVTNDBfQ0JDX1NIQV82ICAgICAgICAgICAgIDB4MDAxOQorI2RlZmluZSBPUF9QQ0xfU1NMMzBfREVTNDBfQ0JDX1NIQV83ICAgICAgICAgICAgIDB4MDAyNgorCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9ERVNfQ0JDX1NIQSAgICAgICAgICAgICAgICAgMHgwMDFlCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9ERVNfQ0JDX1NIQV8yICAgICAgICAgICAgICAgMHgwMDA5CisjZGVmaW5lIE9QX1BDTF9TU0wzMF9ERVNfQ0JDX1NIQV8zICAgICAgICAgICAgICAgMHgwMDBjCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9ERVNfQ0JDX1NIQV80ICAgICAgICAgICAgICAgMHgwMDBmCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9ERVNfQ0JDX1NIQV81ICAgICAgICAgICAgICAgMHgwMDEyCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9ERVNfQ0JDX1NIQV82ICAgICAgICAgICAgICAgMHgwMDE1CisjZGVmaW5lIE9QX1BDTF9TU0wzMF9ERVNfQ0JDX1NIQV83ICAgICAgICAgICAgICAgMHgwMDFhCisKKyNkZWZpbmUgT1BfUENMX1NTTDMwX1JDNF8xMjhfTUQ1ICAgICAgICAgICAgICAgICAweDAwMjQKKyNkZWZpbmUgT1BfUENMX1NTTDMwX1JDNF8xMjhfTUQ1XzIgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgT1BfUENMX1NTTDMwX1JDNF8xMjhfTUQ1XzMgICAgICAgICAgICAgICAweDAwMTgKKworI2RlZmluZSBPUF9QQ0xfU1NMMzBfUkM0XzQwX01ENSAgICAgICAgICAgICAgICAgIDB4MDAyYgorI2RlZmluZSBPUF9QQ0xfU1NMMzBfUkM0XzQwX01ENV8yICAgICAgICAgICAgICAgIDB4MDAwMworI2RlZmluZSBPUF9QQ0xfU1NMMzBfUkM0XzQwX01ENV8zICAgICAgICAgICAgICAgIDB4MDAxNworCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9SQzRfMTI4X1NIQSAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9SQzRfMTI4X1NIQV8yICAgICAgICAgICAgICAgMHgwMDhhCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9SQzRfMTI4X1NIQV8zICAgICAgICAgICAgICAgMHgwMDhlCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9SQzRfMTI4X1NIQV80ICAgICAgICAgICAgICAgMHgwMDkyCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9SQzRfMTI4X1NIQV81ICAgICAgICAgICAgICAgMHgwMDA1CisjZGVmaW5lIE9QX1BDTF9TU0wzMF9SQzRfMTI4X1NIQV82ICAgICAgICAgICAgICAgMHhjMDAyCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9SQzRfMTI4X1NIQV83ICAgICAgICAgICAgICAgMHhjMDA3CisjZGVmaW5lIE9QX1BDTF9TU0wzMF9SQzRfMTI4X1NIQV84ICAgICAgICAgICAgICAgMHhjMDBjCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9SQzRfMTI4X1NIQV85ICAgICAgICAgICAgICAgMHhjMDExCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9SQzRfMTI4X1NIQV8xMCAgICAgICAgICAgICAgMHhjMDE2CisKKyNkZWZpbmUgT1BfUENMX1NTTDMwX1JDNF80MF9TSEEgICAgICAgICAgICAgICAgICAweDAwMjgKKworCisvKiBGb3IgVExTIDEuMCAtIE9QX1BDTElEX1RMUzEwICovCisjZGVmaW5lIE9QX1BDTF9UTFMxMF9BRVNfMTI4X0NCQ19TSEEgICAgICAgICAgICAgMHgwMDJmCisjZGVmaW5lIE9QX1BDTF9UTFMxMF9BRVNfMTI4X0NCQ19TSEFfMiAgICAgICAgICAgMHgwMDMwCisjZGVmaW5lIE9QX1BDTF9UTFMxMF9BRVNfMTI4X0NCQ19TSEFfMyAgICAgICAgICAgMHgwMDMxCisjZGVmaW5lIE9QX1BDTF9UTFMxMF9BRVNfMTI4X0NCQ19TSEFfNCAgICAgICAgICAgMHgwMDMyCisjZGVmaW5lIE9QX1BDTF9UTFMxMF9BRVNfMTI4X0NCQ19TSEFfNSAgICAgICAgICAgMHgwMDMzCisjZGVmaW5lIE9QX1BDTF9UTFMxMF9BRVNfMTI4X0NCQ19TSEFfNiAgICAgICAgICAgMHgwMDM0CisjZGVmaW5lIE9QX1BDTF9UTFMxMF9BRVNfMTI4X0NCQ19TSEFfNyAgICAgICAgICAgMHgwMDhjCisjZGVmaW5lIE9QX1BDTF9UTFMxMF9BRVNfMTI4X0NCQ19TSEFfOCAgICAgICAgICAgMHgwMDkwCisjZGVmaW5lIE9QX1BDTF9UTFMxMF9BRVNfMTI4X0NCQ19TSEFfOSAgICAgICAgICAgMHgwMDk0CisjZGVmaW5lIE9QX1BDTF9UTFMxMF9BRVNfMTI4X0NCQ19TSEFfMTAgICAgICAgICAgMHhjMDA0CisjZGVmaW5lIE9QX1BDTF9UTFMxMF9BRVNfMTI4X0NCQ19TSEFfMTEgICAgICAgICAgMHhjMDA5CisjZGVmaW5lIE9QX1BDTF9UTFMxMF9BRVNfMTI4X0NCQ19TSEFfMTIgICAgICAgICAgMHhjMDBlCisjZGVmaW5lIE9QX1BDTF9UTFMxMF9BRVNfMTI4X0NCQ19TSEFfMTMgICAgICAgICAgMHhjMDEzCisjZGVmaW5lIE9QX1BDTF9UTFMxMF9BRVNfMTI4X0NCQ19TSEFfMTQgICAgICAgICAgMHhjMDE4CisjZGVmaW5lIE9QX1BDTF9UTFMxMF9BRVNfMTI4X0NCQ19TSEFfMTUgICAgICAgICAgMHhjMDFkCisjZGVmaW5lIE9QX1BDTF9UTFMxMF9BRVNfMTI4X0NCQ19TSEFfMTYgICAgICAgICAgMHhjMDFlCisjZGVmaW5lIE9QX1BDTF9UTFMxMF9BRVNfMTI4X0NCQ19TSEFfMTcgICAgICAgICAgMHhjMDFmCisKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18yNTZfQ0JDX1NIQSAgICAgICAgICAgICAweDAwMzUKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18yNTZfQ0JDX1NIQV8yICAgICAgICAgICAweDAwMzYKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18yNTZfQ0JDX1NIQV8zICAgICAgICAgICAweDAwMzcKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18yNTZfQ0JDX1NIQV80ICAgICAgICAgICAweDAwMzgKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18yNTZfQ0JDX1NIQV81ICAgICAgICAgICAweDAwMzkKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18yNTZfQ0JDX1NIQV82ICAgICAgICAgICAweDAwM2EKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18yNTZfQ0JDX1NIQV83ICAgICAgICAgICAweDAwOGQKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18yNTZfQ0JDX1NIQV84ICAgICAgICAgICAweDAwOTEKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18yNTZfQ0JDX1NIQV85ICAgICAgICAgICAweDAwOTUKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18yNTZfQ0JDX1NIQV8xMCAgICAgICAgICAweGMwMDUKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18yNTZfQ0JDX1NIQV8xMSAgICAgICAgICAweGMwMGEKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18yNTZfQ0JDX1NIQV8xMiAgICAgICAgICAweGMwMGYKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18yNTZfQ0JDX1NIQV8xMyAgICAgICAgICAweGMwMTQKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18yNTZfQ0JDX1NIQV8xNCAgICAgICAgICAweGMwMTkKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18yNTZfQ0JDX1NIQV8xNSAgICAgICAgICAweGMwMjAKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18yNTZfQ0JDX1NIQV8xNiAgICAgICAgICAweGMwMjEKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18yNTZfQ0JDX1NIQV8xNyAgICAgICAgICAweGMwMjIKKworLyogI2RlZmluZSBPUF9QQ0xfVExTMTBfM0RFU19FREVfQ0JDX01ENSAgICAgICAgICAgIDB4MDAyMyAqLworCisjZGVmaW5lIE9QX1BDTF9UTFMxMF8zREVTX0VERV9DQkNfU0hBICAgICAgICAgICAgMHgwMDFmCisjZGVmaW5lIE9QX1BDTF9UTFMxMF8zREVTX0VERV9DQkNfU0hBXzIgICAgICAgICAgMHgwMDhiCisjZGVmaW5lIE9QX1BDTF9UTFMxMF8zREVTX0VERV9DQkNfU0hBXzMgICAgICAgICAgMHgwMDhmCisjZGVmaW5lIE9QX1BDTF9UTFMxMF8zREVTX0VERV9DQkNfU0hBXzQgICAgICAgICAgMHgwMDkzCisjZGVmaW5lIE9QX1BDTF9UTFMxMF8zREVTX0VERV9DQkNfU0hBXzUgICAgICAgICAgMHgwMDBhCisjZGVmaW5lIE9QX1BDTF9UTFMxMF8zREVTX0VERV9DQkNfU0hBXzYgICAgICAgICAgMHgwMDBkCisjZGVmaW5lIE9QX1BDTF9UTFMxMF8zREVTX0VERV9DQkNfU0hBXzcgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIE9QX1BDTF9UTFMxMF8zREVTX0VERV9DQkNfU0hBXzggICAgICAgICAgMHgwMDEzCisjZGVmaW5lIE9QX1BDTF9UTFMxMF8zREVTX0VERV9DQkNfU0hBXzkgICAgICAgICAgMHgwMDE2CisjZGVmaW5lIE9QX1BDTF9UTFMxMF8zREVTX0VERV9DQkNfU0hBXzEwICAgICAgICAgMHgwMDFiCisjZGVmaW5lIE9QX1BDTF9UTFMxMF8zREVTX0VERV9DQkNfU0hBXzExICAgICAgICAgMHhjMDAzCisjZGVmaW5lIE9QX1BDTF9UTFMxMF8zREVTX0VERV9DQkNfU0hBXzEyICAgICAgICAgMHhjMDA4CisjZGVmaW5lIE9QX1BDTF9UTFMxMF8zREVTX0VERV9DQkNfU0hBXzEzICAgICAgICAgMHhjMDBkCisjZGVmaW5lIE9QX1BDTF9UTFMxMF8zREVTX0VERV9DQkNfU0hBXzE0ICAgICAgICAgMHhjMDEyCisjZGVmaW5lIE9QX1BDTF9UTFMxMF8zREVTX0VERV9DQkNfU0hBXzE1ICAgICAgICAgMHhjMDE3CisjZGVmaW5lIE9QX1BDTF9UTFMxMF8zREVTX0VERV9DQkNfU0hBXzE2ICAgICAgICAgMHhjMDFhCisjZGVmaW5lIE9QX1BDTF9UTFMxMF8zREVTX0VERV9DQkNfU0hBXzE3ICAgICAgICAgMHhjMDFiCisjZGVmaW5lIE9QX1BDTF9UTFMxMF8zREVTX0VERV9DQkNfU0hBXzE4ICAgICAgICAgMHhjMDFjCisKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0RFUzQwX0NCQ19NRDUgICAgICAgICAgICAgICAweDAwMjkKKworI2RlZmluZSBPUF9QQ0xfVExTMTBfREVTX0NCQ19NRDUgICAgICAgICAgICAgICAgIDB4MDAyMgorCisjZGVmaW5lIE9QX1BDTF9UTFMxMF9ERVM0MF9DQkNfU0hBICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIE9QX1BDTF9UTFMxMF9ERVM0MF9DQkNfU0hBXzIgICAgICAgICAgICAgMHgwMDBiCisjZGVmaW5lIE9QX1BDTF9UTFMxMF9ERVM0MF9DQkNfU0hBXzMgICAgICAgICAgICAgMHgwMDBlCisjZGVmaW5lIE9QX1BDTF9UTFMxMF9ERVM0MF9DQkNfU0hBXzQgICAgICAgICAgICAgMHgwMDExCisjZGVmaW5lIE9QX1BDTF9UTFMxMF9ERVM0MF9DQkNfU0hBXzUgICAgICAgICAgICAgMHgwMDE0CisjZGVmaW5lIE9QX1BDTF9UTFMxMF9ERVM0MF9DQkNfU0hBXzYgICAgICAgICAgICAgMHgwMDE5CisjZGVmaW5lIE9QX1BDTF9UTFMxMF9ERVM0MF9DQkNfU0hBXzcgICAgICAgICAgICAgMHgwMDI2CisKKworI2RlZmluZSBPUF9QQ0xfVExTMTBfREVTX0NCQ19TSEEgICAgICAgICAgICAgICAgIDB4MDAxZQorI2RlZmluZSBPUF9QQ0xfVExTMTBfREVTX0NCQ19TSEFfMiAgICAgICAgICAgICAgIDB4MDAwOQorI2RlZmluZSBPUF9QQ0xfVExTMTBfREVTX0NCQ19TSEFfMyAgICAgICAgICAgICAgIDB4MDAwYworI2RlZmluZSBPUF9QQ0xfVExTMTBfREVTX0NCQ19TSEFfNCAgICAgICAgICAgICAgIDB4MDAwZgorI2RlZmluZSBPUF9QQ0xfVExTMTBfREVTX0NCQ19TSEFfNSAgICAgICAgICAgICAgIDB4MDAxMgorI2RlZmluZSBPUF9QQ0xfVExTMTBfREVTX0NCQ19TSEFfNiAgICAgICAgICAgICAgIDB4MDAxNQorI2RlZmluZSBPUF9QQ0xfVExTMTBfREVTX0NCQ19TSEFfNyAgICAgICAgICAgICAgIDB4MDAxYQorCisjZGVmaW5lIE9QX1BDTF9UTFMxMF9SQzRfMTI4X01ENSAgICAgICAgICAgICAgICAgMHgwMDI0CisjZGVmaW5lIE9QX1BDTF9UTFMxMF9SQzRfMTI4X01ENV8yICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIE9QX1BDTF9UTFMxMF9SQzRfMTI4X01ENV8zICAgICAgICAgICAgICAgMHgwMDE4CisKKyNkZWZpbmUgT1BfUENMX1RMUzEwX1JDNF80MF9NRDUgICAgICAgICAgICAgICAgICAweDAwMmIKKyNkZWZpbmUgT1BfUENMX1RMUzEwX1JDNF80MF9NRDVfMiAgICAgICAgICAgICAgICAweDAwMDMKKyNkZWZpbmUgT1BfUENMX1RMUzEwX1JDNF80MF9NRDVfMyAgICAgICAgICAgICAgICAweDAwMTcKKworI2RlZmluZSBPUF9QQ0xfVExTMTBfUkM0XzEyOF9TSEEgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBPUF9QQ0xfVExTMTBfUkM0XzEyOF9TSEFfMiAgICAgICAgICAgICAgIDB4MDA4YQorI2RlZmluZSBPUF9QQ0xfVExTMTBfUkM0XzEyOF9TSEFfMyAgICAgICAgICAgICAgIDB4MDA4ZQorI2RlZmluZSBPUF9QQ0xfVExTMTBfUkM0XzEyOF9TSEFfNCAgICAgICAgICAgICAgIDB4MDA5MgorI2RlZmluZSBPUF9QQ0xfVExTMTBfUkM0XzEyOF9TSEFfNSAgICAgICAgICAgICAgIDB4MDAwNQorI2RlZmluZSBPUF9QQ0xfVExTMTBfUkM0XzEyOF9TSEFfNiAgICAgICAgICAgICAgIDB4YzAwMgorI2RlZmluZSBPUF9QQ0xfVExTMTBfUkM0XzEyOF9TSEFfNyAgICAgICAgICAgICAgIDB4YzAwNworI2RlZmluZSBPUF9QQ0xfVExTMTBfUkM0XzEyOF9TSEFfOCAgICAgICAgICAgICAgIDB4YzAwYworI2RlZmluZSBPUF9QQ0xfVExTMTBfUkM0XzEyOF9TSEFfOSAgICAgICAgICAgICAgIDB4YzAxMQorI2RlZmluZSBPUF9QQ0xfVExTMTBfUkM0XzEyOF9TSEFfMTAgICAgICAgICAgICAgIDB4YzAxNgorCisjZGVmaW5lIE9QX1BDTF9UTFMxMF9SQzRfNDBfU0hBICAgICAgICAgICAgICAgICAgMHgwMDI4CisKKyNkZWZpbmUgT1BfUENMX1RMUzEwXzNERVNfRURFX0NCQ19NRDUgICAgICAgICAgICAweGZmMjMKKyNkZWZpbmUgT1BfUENMX1RMUzEwXzNERVNfRURFX0NCQ19TSEExNjAgICAgICAgICAweGZmMzAKKyNkZWZpbmUgT1BfUENMX1RMUzEwXzNERVNfRURFX0NCQ19TSEEyMjQgICAgICAgICAweGZmMzQKKyNkZWZpbmUgT1BfUENMX1RMUzEwXzNERVNfRURFX0NCQ19TSEEyNTYgICAgICAgICAweGZmMzYKKyNkZWZpbmUgT1BfUENMX1RMUzEwXzNERVNfRURFX0NCQ19TSEEzODQgICAgICAgICAweGZmMzMKKyNkZWZpbmUgT1BfUENMX1RMUzEwXzNERVNfRURFX0NCQ19TSEE1MTIgICAgICAgICAweGZmMzUKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18xMjhfQ0JDX1NIQTE2MCAgICAgICAgICAweGZmODAKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18xMjhfQ0JDX1NIQTIyNCAgICAgICAgICAweGZmODQKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18xMjhfQ0JDX1NIQTI1NiAgICAgICAgICAweGZmODYKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18xMjhfQ0JDX1NIQTM4NCAgICAgICAgICAweGZmODMKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18xMjhfQ0JDX1NIQTUxMiAgICAgICAgICAweGZmODUKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18xOTJfQ0JDX1NIQTE2MCAgICAgICAgICAweGZmMjAKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18xOTJfQ0JDX1NIQTIyNCAgICAgICAgICAweGZmMjQKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18xOTJfQ0JDX1NIQTI1NiAgICAgICAgICAweGZmMjYKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18xOTJfQ0JDX1NIQTM4NCAgICAgICAgICAweGZmMjMKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18xOTJfQ0JDX1NIQTUxMiAgICAgICAgICAweGZmMjUKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18yNTZfQ0JDX1NIQTE2MCAgICAgICAgICAweGZmNjAKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18yNTZfQ0JDX1NIQTIyNCAgICAgICAgICAweGZmNjQKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18yNTZfQ0JDX1NIQTI1NiAgICAgICAgICAweGZmNjYKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18yNTZfQ0JDX1NIQTM4NCAgICAgICAgICAweGZmNjMKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18yNTZfQ0JDX1NIQTUxMiAgICAgICAgICAweGZmNjUKKworCisKKy8qIEZvciBUTFMgMS4xIC0gT1BfUENMSURfVExTMTEgKi8KKyNkZWZpbmUgT1BfUENMX1RMUzExX0FFU18xMjhfQ0JDX1NIQSAgICAgICAgICAgICAweDAwMmYKKyNkZWZpbmUgT1BfUENMX1RMUzExX0FFU18xMjhfQ0JDX1NIQV8yICAgICAgICAgICAweDAwMzAKKyNkZWZpbmUgT1BfUENMX1RMUzExX0FFU18xMjhfQ0JDX1NIQV8zICAgICAgICAgICAweDAwMzEKKyNkZWZpbmUgT1BfUENMX1RMUzExX0FFU18xMjhfQ0JDX1NIQV80ICAgICAgICAgICAweDAwMzIKKyNkZWZpbmUgT1BfUENMX1RMUzExX0FFU18xMjhfQ0JDX1NIQV81ICAgICAgICAgICAweDAwMzMKKyNkZWZpbmUgT1BfUENMX1RMUzExX0FFU18xMjhfQ0JDX1NIQV82ICAgICAgICAgICAweDAwMzQKKyNkZWZpbmUgT1BfUENMX1RMUzExX0FFU18xMjhfQ0JDX1NIQV83ICAgICAgICAgICAweDAwOGMKKyNkZWZpbmUgT1BfUENMX1RMUzExX0FFU18xMjhfQ0JDX1NIQV84ICAgICAgICAgICAweDAwOTAKKyNkZWZpbmUgT1BfUENMX1RMUzExX0FFU18xMjhfQ0JDX1NIQV85ICAgICAgICAgICAweDAwOTQKKyNkZWZpbmUgT1BfUENMX1RMUzExX0FFU18xMjhfQ0JDX1NIQV8xMCAgICAgICAgICAweGMwMDQKKyNkZWZpbmUgT1BfUENMX1RMUzExX0FFU18xMjhfQ0JDX1NIQV8xMSAgICAgICAgICAweGMwMDkKKyNkZWZpbmUgT1BfUENMX1RMUzExX0FFU18xMjhfQ0JDX1NIQV8xMiAgICAgICAgICAweGMwMGUKKyNkZWZpbmUgT1BfUENMX1RMUzExX0FFU18xMjhfQ0JDX1NIQV8xMyAgICAgICAgICAweGMwMTMKKyNkZWZpbmUgT1BfUENMX1RMUzExX0FFU18xMjhfQ0JDX1NIQV8xNCAgICAgICAgICAweGMwMTgKKyNkZWZpbmUgT1BfUENMX1RMUzExX0FFU18xMjhfQ0JDX1NIQV8xNSAgICAgICAgICAweGMwMWQKKyNkZWZpbmUgT1BfUENMX1RMUzExX0FFU18xMjhfQ0JDX1NIQV8xNiAgICAgICAgICAweGMwMWUKKyNkZWZpbmUgT1BfUENMX1RMUzExX0FFU18xMjhfQ0JDX1NIQV8xNyAgICAgICAgICAweGMwMWYKKworI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzI1Nl9DQkNfU0hBICAgICAgICAgICAgIDB4MDAzNQorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzI1Nl9DQkNfU0hBXzIgICAgICAgICAgIDB4MDAzNgorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzI1Nl9DQkNfU0hBXzMgICAgICAgICAgIDB4MDAzNworI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzI1Nl9DQkNfU0hBXzQgICAgICAgICAgIDB4MDAzOAorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzI1Nl9DQkNfU0hBXzUgICAgICAgICAgIDB4MDAzOQorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzI1Nl9DQkNfU0hBXzYgICAgICAgICAgIDB4MDAzYQorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzI1Nl9DQkNfU0hBXzcgICAgICAgICAgIDB4MDA4ZAorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzI1Nl9DQkNfU0hBXzggICAgICAgICAgIDB4MDA5MQorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzI1Nl9DQkNfU0hBXzkgICAgICAgICAgIDB4MDA5NQorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzI1Nl9DQkNfU0hBXzEwICAgICAgICAgIDB4YzAwNQorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzI1Nl9DQkNfU0hBXzExICAgICAgICAgIDB4YzAwYQorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzI1Nl9DQkNfU0hBXzEyICAgICAgICAgIDB4YzAwZgorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzI1Nl9DQkNfU0hBXzEzICAgICAgICAgIDB4YzAxNAorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzI1Nl9DQkNfU0hBXzE0ICAgICAgICAgIDB4YzAxOQorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzI1Nl9DQkNfU0hBXzE1ICAgICAgICAgIDB4YzAyMAorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzI1Nl9DQkNfU0hBXzE2ICAgICAgICAgIDB4YzAyMQorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzI1Nl9DQkNfU0hBXzE3ICAgICAgICAgIDB4YzAyMgorCisvKiAjZGVmaW5lIE9QX1BDTF9UTFMxMV8zREVTX0VERV9DQkNfTUQ1ICAgICAgICAgICAgMHgwMDIzICovCisKKyNkZWZpbmUgT1BfUENMX1RMUzExXzNERVNfRURFX0NCQ19TSEEgICAgICAgICAgICAweDAwMWYKKyNkZWZpbmUgT1BfUENMX1RMUzExXzNERVNfRURFX0NCQ19TSEFfMiAgICAgICAgICAweDAwOGIKKyNkZWZpbmUgT1BfUENMX1RMUzExXzNERVNfRURFX0NCQ19TSEFfMyAgICAgICAgICAweDAwOGYKKyNkZWZpbmUgT1BfUENMX1RMUzExXzNERVNfRURFX0NCQ19TSEFfNCAgICAgICAgICAweDAwOTMKKyNkZWZpbmUgT1BfUENMX1RMUzExXzNERVNfRURFX0NCQ19TSEFfNSAgICAgICAgICAweDAwMGEKKyNkZWZpbmUgT1BfUENMX1RMUzExXzNERVNfRURFX0NCQ19TSEFfNiAgICAgICAgICAweDAwMGQKKyNkZWZpbmUgT1BfUENMX1RMUzExXzNERVNfRURFX0NCQ19TSEFfNyAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgT1BfUENMX1RMUzExXzNERVNfRURFX0NCQ19TSEFfOCAgICAgICAgICAweDAwMTMKKyNkZWZpbmUgT1BfUENMX1RMUzExXzNERVNfRURFX0NCQ19TSEFfOSAgICAgICAgICAweDAwMTYKKyNkZWZpbmUgT1BfUENMX1RMUzExXzNERVNfRURFX0NCQ19TSEFfMTAgICAgICAgICAweDAwMWIKKyNkZWZpbmUgT1BfUENMX1RMUzExXzNERVNfRURFX0NCQ19TSEFfMTEgICAgICAgICAweGMwMDMKKyNkZWZpbmUgT1BfUENMX1RMUzExXzNERVNfRURFX0NCQ19TSEFfMTIgICAgICAgICAweGMwMDgKKyNkZWZpbmUgT1BfUENMX1RMUzExXzNERVNfRURFX0NCQ19TSEFfMTMgICAgICAgICAweGMwMGQKKyNkZWZpbmUgT1BfUENMX1RMUzExXzNERVNfRURFX0NCQ19TSEFfMTQgICAgICAgICAweGMwMTIKKyNkZWZpbmUgT1BfUENMX1RMUzExXzNERVNfRURFX0NCQ19TSEFfMTUgICAgICAgICAweGMwMTcKKyNkZWZpbmUgT1BfUENMX1RMUzExXzNERVNfRURFX0NCQ19TSEFfMTYgICAgICAgICAweGMwMWEKKyNkZWZpbmUgT1BfUENMX1RMUzExXzNERVNfRURFX0NCQ19TSEFfMTcgICAgICAgICAweGMwMWIKKyNkZWZpbmUgT1BfUENMX1RMUzExXzNERVNfRURFX0NCQ19TSEFfMTggICAgICAgICAweGMwMWMKKworI2RlZmluZSBPUF9QQ0xfVExTMTFfREVTNDBfQ0JDX01ENSAgICAgICAgICAgICAgIDB4MDAyOQorCisjZGVmaW5lIE9QX1BDTF9UTFMxMV9ERVNfQ0JDX01ENSAgICAgICAgICAgICAgICAgMHgwMDIyCisKKyNkZWZpbmUgT1BfUENMX1RMUzExX0RFUzQwX0NCQ19TSEEgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgT1BfUENMX1RMUzExX0RFUzQwX0NCQ19TSEFfMiAgICAgICAgICAgICAweDAwMGIKKyNkZWZpbmUgT1BfUENMX1RMUzExX0RFUzQwX0NCQ19TSEFfMyAgICAgICAgICAgICAweDAwMGUKKyNkZWZpbmUgT1BfUENMX1RMUzExX0RFUzQwX0NCQ19TSEFfNCAgICAgICAgICAgICAweDAwMTEKKyNkZWZpbmUgT1BfUENMX1RMUzExX0RFUzQwX0NCQ19TSEFfNSAgICAgICAgICAgICAweDAwMTQKKyNkZWZpbmUgT1BfUENMX1RMUzExX0RFUzQwX0NCQ19TSEFfNiAgICAgICAgICAgICAweDAwMTkKKyNkZWZpbmUgT1BfUENMX1RMUzExX0RFUzQwX0NCQ19TSEFfNyAgICAgICAgICAgICAweDAwMjYKKworI2RlZmluZSBPUF9QQ0xfVExTMTFfREVTX0NCQ19TSEEgICAgICAgICAgICAgICAgIDB4MDAxZQorI2RlZmluZSBPUF9QQ0xfVExTMTFfREVTX0NCQ19TSEFfMiAgICAgICAgICAgICAgIDB4MDAwOQorI2RlZmluZSBPUF9QQ0xfVExTMTFfREVTX0NCQ19TSEFfMyAgICAgICAgICAgICAgIDB4MDAwYworI2RlZmluZSBPUF9QQ0xfVExTMTFfREVTX0NCQ19TSEFfNCAgICAgICAgICAgICAgIDB4MDAwZgorI2RlZmluZSBPUF9QQ0xfVExTMTFfREVTX0NCQ19TSEFfNSAgICAgICAgICAgICAgIDB4MDAxMgorI2RlZmluZSBPUF9QQ0xfVExTMTFfREVTX0NCQ19TSEFfNiAgICAgICAgICAgICAgIDB4MDAxNQorI2RlZmluZSBPUF9QQ0xfVExTMTFfREVTX0NCQ19TSEFfNyAgICAgICAgICAgICAgIDB4MDAxYQorCisjZGVmaW5lIE9QX1BDTF9UTFMxMV9SQzRfMTI4X01ENSAgICAgICAgICAgICAgICAgMHgwMDI0CisjZGVmaW5lIE9QX1BDTF9UTFMxMV9SQzRfMTI4X01ENV8yICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIE9QX1BDTF9UTFMxMV9SQzRfMTI4X01ENV8zICAgICAgICAgICAgICAgMHgwMDE4CisKKyNkZWZpbmUgT1BfUENMX1RMUzExX1JDNF80MF9NRDUgICAgICAgICAgICAgICAgICAweDAwMmIKKyNkZWZpbmUgT1BfUENMX1RMUzExX1JDNF80MF9NRDVfMiAgICAgICAgICAgICAgICAweDAwMDMKKyNkZWZpbmUgT1BfUENMX1RMUzExX1JDNF80MF9NRDVfMyAgICAgICAgICAgICAgICAweDAwMTcKKworI2RlZmluZSBPUF9QQ0xfVExTMTFfUkM0XzEyOF9TSEEgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBPUF9QQ0xfVExTMTFfUkM0XzEyOF9TSEFfMiAgICAgICAgICAgICAgIDB4MDA4YQorI2RlZmluZSBPUF9QQ0xfVExTMTFfUkM0XzEyOF9TSEFfMyAgICAgICAgICAgICAgIDB4MDA4ZQorI2RlZmluZSBPUF9QQ0xfVExTMTFfUkM0XzEyOF9TSEFfNCAgICAgICAgICAgICAgIDB4MDA5MgorI2RlZmluZSBPUF9QQ0xfVExTMTFfUkM0XzEyOF9TSEFfNSAgICAgICAgICAgICAgIDB4MDAwNQorI2RlZmluZSBPUF9QQ0xfVExTMTFfUkM0XzEyOF9TSEFfNiAgICAgICAgICAgICAgIDB4YzAwMgorI2RlZmluZSBPUF9QQ0xfVExTMTFfUkM0XzEyOF9TSEFfNyAgICAgICAgICAgICAgIDB4YzAwNworI2RlZmluZSBPUF9QQ0xfVExTMTFfUkM0XzEyOF9TSEFfOCAgICAgICAgICAgICAgIDB4YzAwYworI2RlZmluZSBPUF9QQ0xfVExTMTFfUkM0XzEyOF9TSEFfOSAgICAgICAgICAgICAgIDB4YzAxMQorI2RlZmluZSBPUF9QQ0xfVExTMTFfUkM0XzEyOF9TSEFfMTAgICAgICAgICAgICAgIDB4YzAxNgorCisjZGVmaW5lIE9QX1BDTF9UTFMxMV9SQzRfNDBfU0hBICAgICAgICAgICAgICAgICAgMHgwMDI4CisKKyNkZWZpbmUgT1BfUENMX1RMUzExXzNERVNfRURFX0NCQ19NRDUgICAgICAgICAgICAweGZmMjMKKyNkZWZpbmUgT1BfUENMX1RMUzExXzNERVNfRURFX0NCQ19TSEExNjAgICAgICAgICAweGZmMzAKKyNkZWZpbmUgT1BfUENMX1RMUzExXzNERVNfRURFX0NCQ19TSEEyMjQgICAgICAgICAweGZmMzQKKyNkZWZpbmUgT1BfUENMX1RMUzExXzNERVNfRURFX0NCQ19TSEEyNTYgICAgICAgICAweGZmMzYKKyNkZWZpbmUgT1BfUENMX1RMUzExXzNERVNfRURFX0NCQ19TSEEzODQgICAgICAgICAweGZmMzMKKyNkZWZpbmUgT1BfUENMX1RMUzExXzNERVNfRURFX0NCQ19TSEE1MTIgICAgICAgICAweGZmMzUKKyNkZWZpbmUgT1BfUENMX1RMUzExX0FFU18xMjhfQ0JDX1NIQTE2MCAgICAgICAgICAweGZmODAKKyNkZWZpbmUgT1BfUENMX1RMUzExX0FFU18xMjhfQ0JDX1NIQTIyNCAgICAgICAgICAweGZmODQKKyNkZWZpbmUgT1BfUENMX1RMUzExX0FFU18xMjhfQ0JDX1NIQTI1NiAgICAgICAgICAweGZmODYKKyNkZWZpbmUgT1BfUENMX1RMUzExX0FFU18xMjhfQ0JDX1NIQTM4NCAgICAgICAgICAweGZmODMKKyNkZWZpbmUgT1BfUENMX1RMUzExX0FFU18xMjhfQ0JDX1NIQTUxMiAgICAgICAgICAweGZmODUKKyNkZWZpbmUgT1BfUENMX1RMUzExX0FFU18xOTJfQ0JDX1NIQTE2MCAgICAgICAgICAweGZmMjAKKyNkZWZpbmUgT1BfUENMX1RMUzExX0FFU18xOTJfQ0JDX1NIQTIyNCAgICAgICAgICAweGZmMjQKKyNkZWZpbmUgT1BfUENMX1RMUzExX0FFU18xOTJfQ0JDX1NIQTI1NiAgICAgICAgICAweGZmMjYKKyNkZWZpbmUgT1BfUENMX1RMUzExX0FFU18xOTJfQ0JDX1NIQTM4NCAgICAgICAgICAweGZmMjMKKyNkZWZpbmUgT1BfUENMX1RMUzExX0FFU18xOTJfQ0JDX1NIQTUxMiAgICAgICAgICAweGZmMjUKKyNkZWZpbmUgT1BfUENMX1RMUzExX0FFU18yNTZfQ0JDX1NIQTE2MCAgICAgICAgICAweGZmNjAKKyNkZWZpbmUgT1BfUENMX1RMUzExX0FFU18yNTZfQ0JDX1NIQTIyNCAgICAgICAgICAweGZmNjQKKyNkZWZpbmUgT1BfUENMX1RMUzExX0FFU18yNTZfQ0JDX1NIQTI1NiAgICAgICAgICAweGZmNjYKKyNkZWZpbmUgT1BfUENMX1RMUzExX0FFU18yNTZfQ0JDX1NIQTM4NCAgICAgICAgICAweGZmNjMKKyNkZWZpbmUgT1BfUENMX1RMUzExX0FFU18yNTZfQ0JDX1NIQTUxMiAgICAgICAgICAweGZmNjUKKworCisvKiBGb3IgVExTIDEuMiAtIE9QX1BDTElEX1RMUzEyICovCisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTI4X0NCQ19TSEEgICAgICAgICAgICAgMHgwMDJmCisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTI4X0NCQ19TSEFfMiAgICAgICAgICAgMHgwMDMwCisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTI4X0NCQ19TSEFfMyAgICAgICAgICAgMHgwMDMxCisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTI4X0NCQ19TSEFfNCAgICAgICAgICAgMHgwMDMyCisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTI4X0NCQ19TSEFfNSAgICAgICAgICAgMHgwMDMzCisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTI4X0NCQ19TSEFfNiAgICAgICAgICAgMHgwMDM0CisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTI4X0NCQ19TSEFfNyAgICAgICAgICAgMHgwMDhjCisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTI4X0NCQ19TSEFfOCAgICAgICAgICAgMHgwMDkwCisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTI4X0NCQ19TSEFfOSAgICAgICAgICAgMHgwMDk0CisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTI4X0NCQ19TSEFfMTAgICAgICAgICAgMHhjMDA0CisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTI4X0NCQ19TSEFfMTEgICAgICAgICAgMHhjMDA5CisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTI4X0NCQ19TSEFfMTIgICAgICAgICAgMHhjMDBlCisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTI4X0NCQ19TSEFfMTMgICAgICAgICAgMHhjMDEzCisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTI4X0NCQ19TSEFfMTQgICAgICAgICAgMHhjMDE4CisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTI4X0NCQ19TSEFfMTUgICAgICAgICAgMHhjMDFkCisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTI4X0NCQ19TSEFfMTYgICAgICAgICAgMHhjMDFlCisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTI4X0NCQ19TSEFfMTcgICAgICAgICAgMHhjMDFmCisKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18yNTZfQ0JDX1NIQSAgICAgICAgICAgICAweDAwMzUKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18yNTZfQ0JDX1NIQV8yICAgICAgICAgICAweDAwMzYKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18yNTZfQ0JDX1NIQV8zICAgICAgICAgICAweDAwMzcKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18yNTZfQ0JDX1NIQV80ICAgICAgICAgICAweDAwMzgKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18yNTZfQ0JDX1NIQV81ICAgICAgICAgICAweDAwMzkKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18yNTZfQ0JDX1NIQV82ICAgICAgICAgICAweDAwM2EKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18yNTZfQ0JDX1NIQV83ICAgICAgICAgICAweDAwOGQKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18yNTZfQ0JDX1NIQV84ICAgICAgICAgICAweDAwOTEKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18yNTZfQ0JDX1NIQV85ICAgICAgICAgICAweDAwOTUKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18yNTZfQ0JDX1NIQV8xMCAgICAgICAgICAweGMwMDUKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18yNTZfQ0JDX1NIQV8xMSAgICAgICAgICAweGMwMGEKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18yNTZfQ0JDX1NIQV8xMiAgICAgICAgICAweGMwMGYKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18yNTZfQ0JDX1NIQV8xMyAgICAgICAgICAweGMwMTQKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18yNTZfQ0JDX1NIQV8xNCAgICAgICAgICAweGMwMTkKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18yNTZfQ0JDX1NIQV8xNSAgICAgICAgICAweGMwMjAKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18yNTZfQ0JDX1NIQV8xNiAgICAgICAgICAweGMwMjEKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18yNTZfQ0JDX1NIQV8xNyAgICAgICAgICAweGMwMjIKKworLyogI2RlZmluZSBPUF9QQ0xfVExTMTJfM0RFU19FREVfQ0JDX01ENSAgICAgICAgICAgIDB4MDAyMyAqLworCisjZGVmaW5lIE9QX1BDTF9UTFMxMl8zREVTX0VERV9DQkNfU0hBICAgICAgICAgICAgMHgwMDFmCisjZGVmaW5lIE9QX1BDTF9UTFMxMl8zREVTX0VERV9DQkNfU0hBXzIgICAgICAgICAgMHgwMDhiCisjZGVmaW5lIE9QX1BDTF9UTFMxMl8zREVTX0VERV9DQkNfU0hBXzMgICAgICAgICAgMHgwMDhmCisjZGVmaW5lIE9QX1BDTF9UTFMxMl8zREVTX0VERV9DQkNfU0hBXzQgICAgICAgICAgMHgwMDkzCisjZGVmaW5lIE9QX1BDTF9UTFMxMl8zREVTX0VERV9DQkNfU0hBXzUgICAgICAgICAgMHgwMDBhCisjZGVmaW5lIE9QX1BDTF9UTFMxMl8zREVTX0VERV9DQkNfU0hBXzYgICAgICAgICAgMHgwMDBkCisjZGVmaW5lIE9QX1BDTF9UTFMxMl8zREVTX0VERV9DQkNfU0hBXzcgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIE9QX1BDTF9UTFMxMl8zREVTX0VERV9DQkNfU0hBXzggICAgICAgICAgMHgwMDEzCisjZGVmaW5lIE9QX1BDTF9UTFMxMl8zREVTX0VERV9DQkNfU0hBXzkgICAgICAgICAgMHgwMDE2CisjZGVmaW5lIE9QX1BDTF9UTFMxMl8zREVTX0VERV9DQkNfU0hBXzEwICAgICAgICAgMHgwMDFiCisjZGVmaW5lIE9QX1BDTF9UTFMxMl8zREVTX0VERV9DQkNfU0hBXzExICAgICAgICAgMHhjMDAzCisjZGVmaW5lIE9QX1BDTF9UTFMxMl8zREVTX0VERV9DQkNfU0hBXzEyICAgICAgICAgMHhjMDA4CisjZGVmaW5lIE9QX1BDTF9UTFMxMl8zREVTX0VERV9DQkNfU0hBXzEzICAgICAgICAgMHhjMDBkCisjZGVmaW5lIE9QX1BDTF9UTFMxMl8zREVTX0VERV9DQkNfU0hBXzE0ICAgICAgICAgMHhjMDEyCisjZGVmaW5lIE9QX1BDTF9UTFMxMl8zREVTX0VERV9DQkNfU0hBXzE1ICAgICAgICAgMHhjMDE3CisjZGVmaW5lIE9QX1BDTF9UTFMxMl8zREVTX0VERV9DQkNfU0hBXzE2ICAgICAgICAgMHhjMDFhCisjZGVmaW5lIE9QX1BDTF9UTFMxMl8zREVTX0VERV9DQkNfU0hBXzE3ICAgICAgICAgMHhjMDFiCisjZGVmaW5lIE9QX1BDTF9UTFMxMl8zREVTX0VERV9DQkNfU0hBXzE4ICAgICAgICAgMHhjMDFjCisKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0RFUzQwX0NCQ19NRDUgICAgICAgICAgICAgICAweDAwMjkKKworI2RlZmluZSBPUF9QQ0xfVExTMTJfREVTX0NCQ19NRDUgICAgICAgICAgICAgICAgIDB4MDAyMgorCisjZGVmaW5lIE9QX1BDTF9UTFMxMl9ERVM0MF9DQkNfU0hBICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIE9QX1BDTF9UTFMxMl9ERVM0MF9DQkNfU0hBXzIgICAgICAgICAgICAgMHgwMDBiCisjZGVmaW5lIE9QX1BDTF9UTFMxMl9ERVM0MF9DQkNfU0hBXzMgICAgICAgICAgICAgMHgwMDBlCisjZGVmaW5lIE9QX1BDTF9UTFMxMl9ERVM0MF9DQkNfU0hBXzQgICAgICAgICAgICAgMHgwMDExCisjZGVmaW5lIE9QX1BDTF9UTFMxMl9ERVM0MF9DQkNfU0hBXzUgICAgICAgICAgICAgMHgwMDE0CisjZGVmaW5lIE9QX1BDTF9UTFMxMl9ERVM0MF9DQkNfU0hBXzYgICAgICAgICAgICAgMHgwMDE5CisjZGVmaW5lIE9QX1BDTF9UTFMxMl9ERVM0MF9DQkNfU0hBXzcgICAgICAgICAgICAgMHgwMDI2CisKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0RFU19DQkNfU0hBICAgICAgICAgICAgICAgICAweDAwMWUKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0RFU19DQkNfU0hBXzIgICAgICAgICAgICAgICAweDAwMDkKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0RFU19DQkNfU0hBXzMgICAgICAgICAgICAgICAweDAwMGMKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0RFU19DQkNfU0hBXzQgICAgICAgICAgICAgICAweDAwMGYKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0RFU19DQkNfU0hBXzUgICAgICAgICAgICAgICAweDAwMTIKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0RFU19DQkNfU0hBXzYgICAgICAgICAgICAgICAweDAwMTUKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0RFU19DQkNfU0hBXzcgICAgICAgICAgICAgICAweDAwMWEKKworI2RlZmluZSBPUF9QQ0xfVExTMTJfUkM0XzEyOF9NRDUgICAgICAgICAgICAgICAgIDB4MDAyNAorI2RlZmluZSBPUF9QQ0xfVExTMTJfUkM0XzEyOF9NRDVfMiAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBPUF9QQ0xfVExTMTJfUkM0XzEyOF9NRDVfMyAgICAgICAgICAgICAgIDB4MDAxOAorCisjZGVmaW5lIE9QX1BDTF9UTFMxMl9SQzRfNDBfTUQ1ICAgICAgICAgICAgICAgICAgMHgwMDJiCisjZGVmaW5lIE9QX1BDTF9UTFMxMl9SQzRfNDBfTUQ1XzIgICAgICAgICAgICAgICAgMHgwMDAzCisjZGVmaW5lIE9QX1BDTF9UTFMxMl9SQzRfNDBfTUQ1XzMgICAgICAgICAgICAgICAgMHgwMDE3CisKKyNkZWZpbmUgT1BfUENMX1RMUzEyX1JDNF8xMjhfU0hBICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgT1BfUENMX1RMUzEyX1JDNF8xMjhfU0hBXzIgICAgICAgICAgICAgICAweDAwOGEKKyNkZWZpbmUgT1BfUENMX1RMUzEyX1JDNF8xMjhfU0hBXzMgICAgICAgICAgICAgICAweDAwOGUKKyNkZWZpbmUgT1BfUENMX1RMUzEyX1JDNF8xMjhfU0hBXzQgICAgICAgICAgICAgICAweDAwOTIKKyNkZWZpbmUgT1BfUENMX1RMUzEyX1JDNF8xMjhfU0hBXzUgICAgICAgICAgICAgICAweDAwMDUKKyNkZWZpbmUgT1BfUENMX1RMUzEyX1JDNF8xMjhfU0hBXzYgICAgICAgICAgICAgICAweGMwMDIKKyNkZWZpbmUgT1BfUENMX1RMUzEyX1JDNF8xMjhfU0hBXzcgICAgICAgICAgICAgICAweGMwMDcKKyNkZWZpbmUgT1BfUENMX1RMUzEyX1JDNF8xMjhfU0hBXzggICAgICAgICAgICAgICAweGMwMGMKKyNkZWZpbmUgT1BfUENMX1RMUzEyX1JDNF8xMjhfU0hBXzkgICAgICAgICAgICAgICAweGMwMTEKKyNkZWZpbmUgT1BfUENMX1RMUzEyX1JDNF8xMjhfU0hBXzEwICAgICAgICAgICAgICAweGMwMTYKKworI2RlZmluZSBPUF9QQ0xfVExTMTJfUkM0XzQwX1NIQSAgICAgICAgICAgICAgICAgIDB4MDAyOAorCisvKiAjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTI4X0NCQ19TSEEyNTYgICAgICAgICAgMHgwMDNjICovCisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTI4X0NCQ19TSEEyNTZfMiAgICAgICAgMHgwMDNlCisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTI4X0NCQ19TSEEyNTZfMyAgICAgICAgMHgwMDNmCisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTI4X0NCQ19TSEEyNTZfNCAgICAgICAgMHgwMDQwCisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTI4X0NCQ19TSEEyNTZfNSAgICAgICAgMHgwMDY3CisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTI4X0NCQ19TSEEyNTZfNiAgICAgICAgMHgwMDZjCisKKy8qICNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18yNTZfQ0JDX1NIQTI1NiAgICAgICAgICAweDAwM2QgKi8KKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18yNTZfQ0JDX1NIQTI1Nl8yICAgICAgICAweDAwNjgKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18yNTZfQ0JDX1NIQTI1Nl8zICAgICAgICAweDAwNjkKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18yNTZfQ0JDX1NIQTI1Nl80ICAgICAgICAweDAwNmEKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18yNTZfQ0JDX1NIQTI1Nl81ICAgICAgICAweDAwNmIKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18yNTZfQ0JDX1NIQTI1Nl82ICAgICAgICAweDAwNmQKKworLyogQUVBRF9BRVNfeHh4X0NDTS9HQ00gcmVtYWluIHRvIGJlIGRlZmluZWQuLi4gKi8KKworI2RlZmluZSBPUF9QQ0xfVExTMTJfM0RFU19FREVfQ0JDX01ENSAgICAgICAgICAgIDB4ZmYyMworI2RlZmluZSBPUF9QQ0xfVExTMTJfM0RFU19FREVfQ0JDX1NIQTE2MCAgICAgICAgIDB4ZmYzMAorI2RlZmluZSBPUF9QQ0xfVExTMTJfM0RFU19FREVfQ0JDX1NIQTIyNCAgICAgICAgIDB4ZmYzNAorI2RlZmluZSBPUF9QQ0xfVExTMTJfM0RFU19FREVfQ0JDX1NIQTI1NiAgICAgICAgIDB4ZmYzNgorI2RlZmluZSBPUF9QQ0xfVExTMTJfM0RFU19FREVfQ0JDX1NIQTM4NCAgICAgICAgIDB4ZmYzMworI2RlZmluZSBPUF9QQ0xfVExTMTJfM0RFU19FREVfQ0JDX1NIQTUxMiAgICAgICAgIDB4ZmYzNQorI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzEyOF9DQkNfU0hBMTYwICAgICAgICAgIDB4ZmY4MAorI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzEyOF9DQkNfU0hBMjI0ICAgICAgICAgIDB4ZmY4NAorI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzEyOF9DQkNfU0hBMjU2ICAgICAgICAgIDB4ZmY4NgorI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzEyOF9DQkNfU0hBMzg0ICAgICAgICAgIDB4ZmY4MworI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzEyOF9DQkNfU0hBNTEyICAgICAgICAgIDB4ZmY4NQorI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzE5Ml9DQkNfU0hBMTYwICAgICAgICAgIDB4ZmYyMAorI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzE5Ml9DQkNfU0hBMjI0ICAgICAgICAgIDB4ZmYyNAorI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzE5Ml9DQkNfU0hBMjU2ICAgICAgICAgIDB4ZmYyNgorI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzE5Ml9DQkNfU0hBMzg0ICAgICAgICAgIDB4ZmYyMworI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzE5Ml9DQkNfU0hBNTEyICAgICAgICAgIDB4ZmYyNQorI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzI1Nl9DQkNfU0hBMTYwICAgICAgICAgIDB4ZmY2MAorI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzI1Nl9DQkNfU0hBMjI0ICAgICAgICAgIDB4ZmY2NAorI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzI1Nl9DQkNfU0hBMjU2ICAgICAgICAgIDB4ZmY2NgorI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzI1Nl9DQkNfU0hBMzg0ICAgICAgICAgIDB4ZmY2MworI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzI1Nl9DQkNfU0hBNTEyICAgICAgICAgIDB4ZmY2NQorCisvKiBGb3IgRFRMUyAtIE9QX1BDTElEX0RUTFMgKi8KKworI2RlZmluZSBPUF9QQ0xfRFRMU19BRVNfMTI4X0NCQ19TSEEgICAgICAgICAgICAgIDB4MDAyZgorI2RlZmluZSBPUF9QQ0xfRFRMU19BRVNfMTI4X0NCQ19TSEFfMiAgICAgICAgICAgIDB4MDAzMAorI2RlZmluZSBPUF9QQ0xfRFRMU19BRVNfMTI4X0NCQ19TSEFfMyAgICAgICAgICAgIDB4MDAzMQorI2RlZmluZSBPUF9QQ0xfRFRMU19BRVNfMTI4X0NCQ19TSEFfNCAgICAgICAgICAgIDB4MDAzMgorI2RlZmluZSBPUF9QQ0xfRFRMU19BRVNfMTI4X0NCQ19TSEFfNSAgICAgICAgICAgIDB4MDAzMworI2RlZmluZSBPUF9QQ0xfRFRMU19BRVNfMTI4X0NCQ19TSEFfNiAgICAgICAgICAgIDB4MDAzNAorI2RlZmluZSBPUF9QQ0xfRFRMU19BRVNfMTI4X0NCQ19TSEFfNyAgICAgICAgICAgIDB4MDA4YworI2RlZmluZSBPUF9QQ0xfRFRMU19BRVNfMTI4X0NCQ19TSEFfOCAgICAgICAgICAgIDB4MDA5MAorI2RlZmluZSBPUF9QQ0xfRFRMU19BRVNfMTI4X0NCQ19TSEFfOSAgICAgICAgICAgIDB4MDA5NAorI2RlZmluZSBPUF9QQ0xfRFRMU19BRVNfMTI4X0NCQ19TSEFfMTAgICAgICAgICAgIDB4YzAwNAorI2RlZmluZSBPUF9QQ0xfRFRMU19BRVNfMTI4X0NCQ19TSEFfMTEgICAgICAgICAgIDB4YzAwOQorI2RlZmluZSBPUF9QQ0xfRFRMU19BRVNfMTI4X0NCQ19TSEFfMTIgICAgICAgICAgIDB4YzAwZQorI2RlZmluZSBPUF9QQ0xfRFRMU19BRVNfMTI4X0NCQ19TSEFfMTMgICAgICAgICAgIDB4YzAxMworI2RlZmluZSBPUF9QQ0xfRFRMU19BRVNfMTI4X0NCQ19TSEFfMTQgICAgICAgICAgIDB4YzAxOAorI2RlZmluZSBPUF9QQ0xfRFRMU19BRVNfMTI4X0NCQ19TSEFfMTUgICAgICAgICAgIDB4YzAxZAorI2RlZmluZSBPUF9QQ0xfRFRMU19BRVNfMTI4X0NCQ19TSEFfMTYgICAgICAgICAgIDB4YzAxZQorI2RlZmluZSBPUF9QQ0xfRFRMU19BRVNfMTI4X0NCQ19TSEFfMTcgICAgICAgICAgIDB4YzAxZgorCisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18yNTZfQ0JDX1NIQSAgICAgICAgICAgICAgMHgwMDM1CisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18yNTZfQ0JDX1NIQV8yICAgICAgICAgICAgMHgwMDM2CisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18yNTZfQ0JDX1NIQV8zICAgICAgICAgICAgMHgwMDM3CisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18yNTZfQ0JDX1NIQV80ICAgICAgICAgICAgMHgwMDM4CisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18yNTZfQ0JDX1NIQV81ICAgICAgICAgICAgMHgwMDM5CisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18yNTZfQ0JDX1NIQV82ICAgICAgICAgICAgMHgwMDNhCisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18yNTZfQ0JDX1NIQV83ICAgICAgICAgICAgMHgwMDhkCisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18yNTZfQ0JDX1NIQV84ICAgICAgICAgICAgMHgwMDkxCisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18yNTZfQ0JDX1NIQV85ICAgICAgICAgICAgMHgwMDk1CisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18yNTZfQ0JDX1NIQV8xMCAgICAgICAgICAgMHhjMDA1CisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18yNTZfQ0JDX1NIQV8xMSAgICAgICAgICAgMHhjMDBhCisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18yNTZfQ0JDX1NIQV8xMiAgICAgICAgICAgMHhjMDBmCisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18yNTZfQ0JDX1NIQV8xMyAgICAgICAgICAgMHhjMDE0CisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18yNTZfQ0JDX1NIQV8xNCAgICAgICAgICAgMHhjMDE5CisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18yNTZfQ0JDX1NIQV8xNSAgICAgICAgICAgMHhjMDIwCisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18yNTZfQ0JDX1NIQV8xNiAgICAgICAgICAgMHhjMDIxCisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18yNTZfQ0JDX1NIQV8xNyAgICAgICAgICAgMHhjMDIyCisKKy8qICNkZWZpbmUgT1BfUENMX0RUTFNfM0RFU19FREVfQ0JDX01ENSAgICAgICAgICAgICAweDAwMjMgKi8KKworI2RlZmluZSBPUF9QQ0xfRFRMU18zREVTX0VERV9DQkNfU0hBICAgICAgICAgICAgIDB4MDAxZgorI2RlZmluZSBPUF9QQ0xfRFRMU18zREVTX0VERV9DQkNfU0hBXzIgICAgICAgICAgIDB4MDA4YgorI2RlZmluZSBPUF9QQ0xfRFRMU18zREVTX0VERV9DQkNfU0hBXzMgICAgICAgICAgIDB4MDA4ZgorI2RlZmluZSBPUF9QQ0xfRFRMU18zREVTX0VERV9DQkNfU0hBXzQgICAgICAgICAgIDB4MDA5MworI2RlZmluZSBPUF9QQ0xfRFRMU18zREVTX0VERV9DQkNfU0hBXzUgICAgICAgICAgIDB4MDAwYQorI2RlZmluZSBPUF9QQ0xfRFRMU18zREVTX0VERV9DQkNfU0hBXzYgICAgICAgICAgIDB4MDAwZAorI2RlZmluZSBPUF9QQ0xfRFRMU18zREVTX0VERV9DQkNfU0hBXzcgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBPUF9QQ0xfRFRMU18zREVTX0VERV9DQkNfU0hBXzggICAgICAgICAgIDB4MDAxMworI2RlZmluZSBPUF9QQ0xfRFRMU18zREVTX0VERV9DQkNfU0hBXzkgICAgICAgICAgIDB4MDAxNgorI2RlZmluZSBPUF9QQ0xfRFRMU18zREVTX0VERV9DQkNfU0hBXzEwICAgICAgICAgIDB4MDAxYgorI2RlZmluZSBPUF9QQ0xfRFRMU18zREVTX0VERV9DQkNfU0hBXzExICAgICAgICAgIDB4YzAwMworI2RlZmluZSBPUF9QQ0xfRFRMU18zREVTX0VERV9DQkNfU0hBXzEyICAgICAgICAgIDB4YzAwOAorI2RlZmluZSBPUF9QQ0xfRFRMU18zREVTX0VERV9DQkNfU0hBXzEzICAgICAgICAgIDB4YzAwZAorI2RlZmluZSBPUF9QQ0xfRFRMU18zREVTX0VERV9DQkNfU0hBXzE0ICAgICAgICAgIDB4YzAxMgorI2RlZmluZSBPUF9QQ0xfRFRMU18zREVTX0VERV9DQkNfU0hBXzE1ICAgICAgICAgIDB4YzAxNworI2RlZmluZSBPUF9QQ0xfRFRMU18zREVTX0VERV9DQkNfU0hBXzE2ICAgICAgICAgIDB4YzAxYQorI2RlZmluZSBPUF9QQ0xfRFRMU18zREVTX0VERV9DQkNfU0hBXzE3ICAgICAgICAgIDB4YzAxYgorI2RlZmluZSBPUF9QQ0xfRFRMU18zREVTX0VERV9DQkNfU0hBXzE4ICAgICAgICAgIDB4YzAxYworCisjZGVmaW5lIE9QX1BDTF9EVExTX0RFUzQwX0NCQ19NRDUgICAgICAgICAgICAgICAgMHgwMDI5CisKKyNkZWZpbmUgT1BfUENMX0RUTFNfREVTX0NCQ19NRDUgICAgICAgICAgICAgICAgICAweDAwMjIKKworI2RlZmluZSBPUF9QQ0xfRFRMU19ERVM0MF9DQkNfU0hBICAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBPUF9QQ0xfRFRMU19ERVM0MF9DQkNfU0hBXzIgICAgICAgICAgICAgIDB4MDAwYgorI2RlZmluZSBPUF9QQ0xfRFRMU19ERVM0MF9DQkNfU0hBXzMgICAgICAgICAgICAgIDB4MDAwZQorI2RlZmluZSBPUF9QQ0xfRFRMU19ERVM0MF9DQkNfU0hBXzQgICAgICAgICAgICAgIDB4MDAxMQorI2RlZmluZSBPUF9QQ0xfRFRMU19ERVM0MF9DQkNfU0hBXzUgICAgICAgICAgICAgIDB4MDAxNAorI2RlZmluZSBPUF9QQ0xfRFRMU19ERVM0MF9DQkNfU0hBXzYgICAgICAgICAgICAgIDB4MDAxOQorI2RlZmluZSBPUF9QQ0xfRFRMU19ERVM0MF9DQkNfU0hBXzcgICAgICAgICAgICAgIDB4MDAyNgorCisKKyNkZWZpbmUgT1BfUENMX0RUTFNfREVTX0NCQ19TSEEgICAgICAgICAgICAgICAgICAweDAwMWUKKyNkZWZpbmUgT1BfUENMX0RUTFNfREVTX0NCQ19TSEFfMiAgICAgICAgICAgICAgICAweDAwMDkKKyNkZWZpbmUgT1BfUENMX0RUTFNfREVTX0NCQ19TSEFfMyAgICAgICAgICAgICAgICAweDAwMGMKKyNkZWZpbmUgT1BfUENMX0RUTFNfREVTX0NCQ19TSEFfNCAgICAgICAgICAgICAgICAweDAwMGYKKyNkZWZpbmUgT1BfUENMX0RUTFNfREVTX0NCQ19TSEFfNSAgICAgICAgICAgICAgICAweDAwMTIKKyNkZWZpbmUgT1BfUENMX0RUTFNfREVTX0NCQ19TSEFfNiAgICAgICAgICAgICAgICAweDAwMTUKKyNkZWZpbmUgT1BfUENMX0RUTFNfREVTX0NCQ19TSEFfNyAgICAgICAgICAgICAgICAweDAwMWEKKworCisjZGVmaW5lIE9QX1BDTF9EVExTXzNERVNfRURFX0NCQ19NRDUgICAgICAgICAgICAgMHhmZjIzCisjZGVmaW5lIE9QX1BDTF9EVExTXzNERVNfRURFX0NCQ19TSEExNjAgICAgICAgICAgMHhmZjMwCisjZGVmaW5lIE9QX1BDTF9EVExTXzNERVNfRURFX0NCQ19TSEEyMjQgICAgICAgICAgMHhmZjM0CisjZGVmaW5lIE9QX1BDTF9EVExTXzNERVNfRURFX0NCQ19TSEEyNTYgICAgICAgICAgMHhmZjM2CisjZGVmaW5lIE9QX1BDTF9EVExTXzNERVNfRURFX0NCQ19TSEEzODQgICAgICAgICAgMHhmZjMzCisjZGVmaW5lIE9QX1BDTF9EVExTXzNERVNfRURFX0NCQ19TSEE1MTIgICAgICAgICAgMHhmZjM1CisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18xMjhfQ0JDX1NIQTE2MCAgICAgICAgICAgMHhmZjgwCisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18xMjhfQ0JDX1NIQTIyNCAgICAgICAgICAgMHhmZjg0CisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18xMjhfQ0JDX1NIQTI1NiAgICAgICAgICAgMHhmZjg2CisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18xMjhfQ0JDX1NIQTM4NCAgICAgICAgICAgMHhmZjgzCisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18xMjhfQ0JDX1NIQTUxMiAgICAgICAgICAgMHhmZjg1CisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18xOTJfQ0JDX1NIQTE2MCAgICAgICAgICAgMHhmZjIwCisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18xOTJfQ0JDX1NIQTIyNCAgICAgICAgICAgMHhmZjI0CisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18xOTJfQ0JDX1NIQTI1NiAgICAgICAgICAgMHhmZjI2CisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18xOTJfQ0JDX1NIQTM4NCAgICAgICAgICAgMHhmZjIzCisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18xOTJfQ0JDX1NIQTUxMiAgICAgICAgICAgMHhmZjI1CisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18yNTZfQ0JDX1NIQTE2MCAgICAgICAgICAgMHhmZjYwCisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18yNTZfQ0JDX1NIQTIyNCAgICAgICAgICAgMHhmZjY0CisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18yNTZfQ0JDX1NIQTI1NiAgICAgICAgICAgMHhmZjY2CisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18yNTZfQ0JDX1NIQTM4NCAgICAgICAgICAgMHhmZjYzCisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18yNTZfQ0JDX1NIQTUxMiAgICAgICAgICAgMHhmZjY1CisKKy8qIDgwMi4xNiBXaU1BWCBwcm90aW5mb3MgKi8KKyNkZWZpbmUgT1BfUENMX1dJTUFYX09GRE0gICAgICAgICAgICAgICAgICAgICAgICAweDAyMDEKKyNkZWZpbmUgT1BfUENMX1dJTUFYX09GRE1BICAgICAgICAgICAgICAgICAgICAgICAweDAyMzEKKworLyogODAyLjExIFdpRmkgcHJvdGluZm9zICovCisjZGVmaW5lIE9QX1BDTF9XSUZJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhhYzA0CisKKy8qIE1hY1NlYyBwcm90aW5mb3MgKi8KKyNkZWZpbmUgT1BfUENMX01BQ1NFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKworLyogUEtJIHVuaWRpcmVjdGlvbmFsIHByb3RvY29sIHByb3RpbmZvIGJpdHMgKi8KKyNkZWZpbmUgT1BfUENMX1BLUFJPVF9URVNUICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgT1BfUENMX1BLUFJPVF9ERUNSWVBUICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgT1BfUENMX1BLUFJPVF9FQ0MgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgT1BfUENMX1BLUFJPVF9GMk0gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKworLyogRm9yIG5vbi1wcm90b2NvbC9hbGctb25seSBvcCBjb21tYW5kcyAqLworI2RlZmluZSBPUF9BTEdfVFlQRV9TSElGVAkyNAorI2RlZmluZSBPUF9BTEdfVFlQRV9NQVNLCSgweDcgPDwgT1BfQUxHX1RZUEVfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19UWVBFX0NMQVNTMQkyCisjZGVmaW5lIE9QX0FMR19UWVBFX0NMQVNTMgk0CisKKyNkZWZpbmUgT1BfQUxHX0FMR1NFTF9TSElGVAkxNgorI2RlZmluZSBPUF9BTEdfQUxHU0VMX01BU0sJKDB4ZmYgPDwgT1BfQUxHX0FMR1NFTF9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FMR1NFTF9TVUJNQVNLCSgweDBmIDw8IE9QX0FMR19BTEdTRUxfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BTEdTRUxfQUVTCSgweDEwIDw8IE9QX0FMR19BTEdTRUxfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BTEdTRUxfREVTCSgweDIwIDw8IE9QX0FMR19BTEdTRUxfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BTEdTRUxfM0RFUwkoMHgyMSA8PCBPUF9BTEdfQUxHU0VMX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUxHU0VMX0FSQzQJKDB4MzAgPDwgT1BfQUxHX0FMR1NFTF9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FMR1NFTF9NRDUJKDB4NDAgPDwgT1BfQUxHX0FMR1NFTF9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FMR1NFTF9TSEExCSgweDQxIDw8IE9QX0FMR19BTEdTRUxfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BTEdTRUxfU0hBMjI0CSgweDQyIDw8IE9QX0FMR19BTEdTRUxfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BTEdTRUxfU0hBMjU2CSgweDQzIDw8IE9QX0FMR19BTEdTRUxfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BTEdTRUxfU0hBMzg0CSgweDQ0IDw8IE9QX0FMR19BTEdTRUxfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BTEdTRUxfU0hBNTEyCSgweDQ1IDw8IE9QX0FMR19BTEdTRUxfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BTEdTRUxfUk5HCSgweDUwIDw8IE9QX0FMR19BTEdTRUxfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BTEdTRUxfU05PVwkoMHg2MCA8PCBPUF9BTEdfQUxHU0VMX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUxHU0VMX1NOT1dfRjgJKDB4NjAgPDwgT1BfQUxHX0FMR1NFTF9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FMR1NFTF9LQVNVTUkJKDB4NzAgPDwgT1BfQUxHX0FMR1NFTF9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FMR1NFTF9DUkMJKDB4OTAgPDwgT1BfQUxHX0FMR1NFTF9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FMR1NFTF9TTk9XX0Y5CSgweEEwIDw8IE9QX0FMR19BTEdTRUxfU0hJRlQpCisKKyNkZWZpbmUgT1BfQUxHX0FBSV9TSElGVAk0CisjZGVmaW5lIE9QX0FMR19BQUlfTUFTSwkJKDB4MWZmIDw8IE9QX0FMR19BQUlfU0hJRlQpCisKKy8qIGJsb2NrY2lwaGVyIEFBSSBzZXQgKi8KKyNkZWZpbmUgT1BfQUxHX0FBSV9DVFJfTU9EMTI4CSgweDAwIDw8IE9QX0FMR19BQUlfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BQUlfQ1RSX01PRDgJKDB4MDEgPDwgT1BfQUxHX0FBSV9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FBSV9DVFJfTU9EMTYJKDB4MDIgPDwgT1BfQUxHX0FBSV9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FBSV9DVFJfTU9EMjQJKDB4MDMgPDwgT1BfQUxHX0FBSV9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FBSV9DVFJfTU9EMzIJKDB4MDQgPDwgT1BfQUxHX0FBSV9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FBSV9DVFJfTU9ENDAJKDB4MDUgPDwgT1BfQUxHX0FBSV9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FBSV9DVFJfTU9ENDgJKDB4MDYgPDwgT1BfQUxHX0FBSV9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FBSV9DVFJfTU9ENTYJKDB4MDcgPDwgT1BfQUxHX0FBSV9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FBSV9DVFJfTU9ENjQJKDB4MDggPDwgT1BfQUxHX0FBSV9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FBSV9DVFJfTU9ENzIJKDB4MDkgPDwgT1BfQUxHX0FBSV9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FBSV9DVFJfTU9EODAJKDB4MGEgPDwgT1BfQUxHX0FBSV9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FBSV9DVFJfTU9EODgJKDB4MGIgPDwgT1BfQUxHX0FBSV9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FBSV9DVFJfTU9EOTYJKDB4MGMgPDwgT1BfQUxHX0FBSV9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FBSV9DVFJfTU9EMTA0CSgweDBkIDw8IE9QX0FMR19BQUlfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BQUlfQ1RSX01PRDExMgkoMHgwZSA8PCBPUF9BTEdfQUFJX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUFJX0NUUl9NT0QxMjAJKDB4MGYgPDwgT1BfQUxHX0FBSV9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FBSV9DQkMJCSgweDEwIDw8IE9QX0FMR19BQUlfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BQUlfRUNCCQkoMHgyMCA8PCBPUF9BTEdfQUFJX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUFJX0NGQgkJKDB4MzAgPDwgT1BfQUxHX0FBSV9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FBSV9PRkIJCSgweDQwIDw8IE9QX0FMR19BQUlfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BQUlfWFRTCQkoMHg1MCA8PCBPUF9BTEdfQUFJX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUFJX0NNQUMJCSgweDYwIDw8IE9QX0FMR19BQUlfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BQUlfWENCQ19NQUMJKDB4NzAgPDwgT1BfQUxHX0FBSV9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FBSV9DQ00JCSgweDgwIDw8IE9QX0FMR19BQUlfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BQUlfR0NNCQkoMHg5MCA8PCBPUF9BTEdfQUFJX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUFJX0NCQ19YQ0JDTUFDCSgweGEwIDw8IE9QX0FMR19BQUlfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BQUlfQ1RSX1hDQkNNQUMJKDB4YjAgPDwgT1BfQUxHX0FBSV9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FBSV9DSEVDS09ERAkoMHg4MCA8PCBPUF9BTEdfQUFJX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUFJX0RLCQkoMHgxMDAgPDwgT1BfQUxHX0FBSV9TSElGVCkKKworLyogcmFuZG9taXplciBBQUkgc2V0ICovCisjZGVmaW5lIE9QX0FMR19BQUlfUk5HCQkoMHgwMCA8PCBPUF9BTEdfQUFJX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUFJX1JOR19OT1pFUk8JKDB4MTAgPDwgT1BfQUxHX0FBSV9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FBSV9STkdfT0RECSgweDIwIDw8IE9QX0FMR19BQUlfU0hJRlQpCisKKy8qIGhtYWMvc21hYyBBQUkgc2V0ICovCisjZGVmaW5lIE9QX0FMR19BQUlfSEFTSAkJKDB4MDAgPDwgT1BfQUxHX0FBSV9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FBSV9ITUFDCQkoMHgwMSA8PCBPUF9BTEdfQUFJX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUFJX1NNQUMJCSgweDAyIDw8IE9QX0FMR19BQUlfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BQUlfSE1BQ19QUkVDT01QCSgweDA0IDw8IE9QX0FMR19BQUlfU0hJRlQpCisKKy8qIENSQyBBQUkgc2V0Ki8KKyNkZWZpbmUgT1BfQUxHX0FBSV84MDIJCSgweDAxIDw8IE9QX0FMR19BQUlfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BQUlfMzM4NQkJKDB4MDIgPDwgT1BfQUxHX0FBSV9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FBSV9DVVNUX1BPTFkJKDB4MDQgPDwgT1BfQUxHX0FBSV9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FBSV9ESVMJCSgweDEwIDw8IE9QX0FMR19BQUlfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BQUlfRE9TCQkoMHgyMCA8PCBPUF9BTEdfQUFJX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUFJX0RPQwkJKDB4NDAgPDwgT1BfQUxHX0FBSV9TSElGVCkKKworLyogS2FzdW1pL1NOT1cgQUFJIHNldCAqLworI2RlZmluZSBPUF9BTEdfQUFJX0Y4CQkoMHhjMCA8PCBPUF9BTEdfQUFJX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUFJX0Y5CQkoMHhjOCA8PCBPUF9BTEdfQUFJX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUFJX0dTTQkJKDB4MTAgPDwgT1BfQUxHX0FBSV9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FBSV9FREdFCQkoMHgyMCA8PCBPUF9BTEdfQUFJX1NISUZUKQorCisKKyNkZWZpbmUgT1BfQUxHX0FTX1NISUZUCQkyCisjZGVmaW5lIE9QX0FMR19BU19NQVNLCQkoMHgzIDw8IE9QX0FMR19BU19TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FTX1VQREFURQkoMCA8PCBPUF9BTEdfQVNfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BU19JTklUCQkoMSA8PCBPUF9BTEdfQVNfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BU19GSU5BTElaRQkoMiA8PCBPUF9BTEdfQVNfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BU19JTklURklOQUwJKDMgPDwgT1BfQUxHX0FTX1NISUZUKQorCisjZGVmaW5lIE9QX0FMR19JQ1ZfU0hJRlQJMQorI2RlZmluZSBPUF9BTEdfSUNWX01BU0sJCSgxIDw8IE9QX0FMR19JQ1ZfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19JQ1ZfT0ZGCQkoMCA8PCBPUF9BTEdfSUNWX1NISUZUKQorI2RlZmluZSBPUF9BTEdfSUNWX09OCQkoMSA8PCBPUF9BTEdfSUNWX1NISUZUKQorCisjZGVmaW5lIE9QX0FMR19ESVJfU0hJRlQJMAorI2RlZmluZSBPUF9BTEdfRElSX01BU0sJCTEKKyNkZWZpbmUgT1BfQUxHX0RFQ1JZUFQJCTAKKyNkZWZpbmUgT1BfQUxHX0VOQ1JZUFQJCTEKKworLyogUEtIQSBhbGdvcml0aG0gdHlwZSBzZXQgKi8KKyNkZWZpbmUgT1BfQUxHX1BLICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIE9QX0FMR19QS19GVU5fTUFTSyAgICAgICAgICAgMHgzZiAvKiBjbHJtZW0sIG1vZG1hdGgsIG9yIGNweW1lbSAqLworCisvKiBQS0hBIG1vZGUgY2xlYXIgbWVtb3J5IGZ1bmN0aW9ucyAqLworI2RlZmluZSBPUF9BTEdfUEtNT0RFX0FfUkFNICAgICAgICAgIDB4ODAwMDAKKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9CX1JBTSAgICAgICAgICAweDQwMDAwCisjZGVmaW5lIE9QX0FMR19QS01PREVfRV9SQU0gICAgICAgICAgMHgyMDAwMAorI2RlZmluZSBPUF9BTEdfUEtNT0RFX05fUkFNICAgICAgICAgIDB4MTAwMDAKKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9DTEVBUk1FTSAgICAgICAweDAwMDAxCisKKy8qIFBLSEEgbW9kZSBtb2R1bGFyLWFyaXRobWV0aWMgZnVuY3Rpb25zICovCisjZGVmaW5lIE9QX0FMR19QS01PREVfTU9EX0lOX01PTlRZICAgMHg4MDAwMAorI2RlZmluZSBPUF9BTEdfUEtNT0RFX01PRF9PVVRfTU9OVFkgIDB4NDAwMDAKKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9NT0RfRjJNICAgICAgICAweDIwMDAwCisjZGVmaW5lIE9QX0FMR19QS01PREVfTU9EX1IyX0lOICAgICAgMHgxMDAwMAorI2RlZmluZSBPUF9BTEdfUEtNT0RFX1BSSkVDVFYgICAgICAgIDB4MDA4MDAKKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9USU1FX0VRICAgICAgICAweDQwMAorI2RlZmluZSBPUF9BTEdfUEtNT0RFX09VVF9CICAgICAgICAgIDB4MDAwCisjZGVmaW5lIE9QX0FMR19QS01PREVfT1VUX0EgICAgICAgICAgMHgxMDAKKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9NT0RfQUREICAgICAgICAweDAwMgorI2RlZmluZSBPUF9BTEdfUEtNT0RFX01PRF9TVUJfQUIgICAgIDB4MDAzCisjZGVmaW5lIE9QX0FMR19QS01PREVfTU9EX1NVQl9CQSAgICAgMHgwMDQKKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9NT0RfTVVMVCAgICAgICAweDAwNQorI2RlZmluZSBPUF9BTEdfUEtNT0RFX01PRF9FWFBPICAgICAgIDB4MDA2CisjZGVmaW5lIE9QX0FMR19QS01PREVfTU9EX1JFRFVDVCAgICAgMHgwMDcKKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9NT0RfSU5WICAgICAgICAweDAwOAorI2RlZmluZSBPUF9BTEdfUEtNT0RFX01PRF9FQ0NfQUREICAgIDB4MDA5CisjZGVmaW5lIE9QX0FMR19QS01PREVfTU9EX0VDQ19EQkwgICAgMHgwMGEKKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9NT0RfRUNDX01VTFQgICAweDAwYgorI2RlZmluZSBPUF9BTEdfUEtNT0RFX01PRF9NT05UX0NOU1QgIDB4MDBjCisjZGVmaW5lIE9QX0FMR19QS01PREVfTU9EX0NSVF9DTlNUICAgMHgwMGQKKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9NT0RfR0NEICAgICAgICAweDAwZQorI2RlZmluZSBPUF9BTEdfUEtNT0RFX01PRF9QUklNQUxJVFkgIDB4MDBmCisKKy8qIFBLSEEgbW9kZSBjb3B5LW1lbW9yeSBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9TUkNfUkVHX1NISUZUICAxMworI2RlZmluZSBPUF9BTEdfUEtNT0RFX1NSQ19SRUdfTUFTSyAgICg3IDw8IE9QX0FMR19QS01PREVfU1JDX1JFR19TSElGVCkKKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9EU1RfUkVHX1NISUZUICAxMAorI2RlZmluZSBPUF9BTEdfUEtNT0RFX0RTVF9SRUdfTUFTSyAgICg3IDw8IE9QX0FMR19QS01PREVfRFNUX1JFR19TSElGVCkKKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9TUkNfU0VHX1NISUZUICA4CisjZGVmaW5lIE9QX0FMR19QS01PREVfU1JDX1NFR19NQVNLICAgKDMgPDwgT1BfQUxHX1BLTU9ERV9TUkNfU0VHX1NISUZUKQorI2RlZmluZSBPUF9BTEdfUEtNT0RFX0RTVF9TRUdfU0hJRlQgIDYKKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9EU1RfU0VHX01BU0sgICAoMyA8PCBPUF9BTEdfUEtNT0RFX0RTVF9TRUdfU0hJRlQpCisKKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9TUkNfUkVHX0EgICAgICAoMCA8PCBPUF9BTEdfUEtNT0RFX1NSQ19SRUdfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19QS01PREVfU1JDX1JFR19CICAgICAgKDEgPDwgT1BfQUxHX1BLTU9ERV9TUkNfUkVHX1NISUZUKQorI2RlZmluZSBPUF9BTEdfUEtNT0RFX1NSQ19SRUdfTiAgICAgICgzIDw8IE9QX0FMR19QS01PREVfU1JDX1JFR19TSElGVCkKKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9EU1RfUkVHX0EgICAgICAoMCA8PCBPUF9BTEdfUEtNT0RFX0RTVF9SRUdfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19QS01PREVfRFNUX1JFR19CICAgICAgKDEgPDwgT1BfQUxHX1BLTU9ERV9EU1RfUkVHX1NISUZUKQorI2RlZmluZSBPUF9BTEdfUEtNT0RFX0RTVF9SRUdfRSAgICAgICgyIDw8IE9QX0FMR19QS01PREVfRFNUX1JFR19TSElGVCkKKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9EU1RfUkVHX04gICAgICAoMyA8PCBPUF9BTEdfUEtNT0RFX0RTVF9SRUdfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19QS01PREVfU1JDX1NFR18wICAgICAgKDAgPDwgT1BfQUxHX1BLTU9ERV9TUkNfU0VHX1NISUZUKQorI2RlZmluZSBPUF9BTEdfUEtNT0RFX1NSQ19TRUdfMSAgICAgICgxIDw8IE9QX0FMR19QS01PREVfU1JDX1NFR19TSElGVCkKKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9TUkNfU0VHXzIgICAgICAoMiA8PCBPUF9BTEdfUEtNT0RFX1NSQ19TRUdfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19QS01PREVfU1JDX1NFR18zICAgICAgKDMgPDwgT1BfQUxHX1BLTU9ERV9TUkNfU0VHX1NISUZUKQorI2RlZmluZSBPUF9BTEdfUEtNT0RFX0RTVF9TRUdfMCAgICAgICgwIDw8IE9QX0FMR19QS01PREVfRFNUX1NFR19TSElGVCkKKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9EU1RfU0VHXzEgICAgICAoMSA8PCBPUF9BTEdfUEtNT0RFX0RTVF9TRUdfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19QS01PREVfRFNUX1NFR18yICAgICAgKDIgPDwgT1BfQUxHX1BLTU9ERV9EU1RfU0VHX1NISUZUKQorI2RlZmluZSBPUF9BTEdfUEtNT0RFX0RTVF9TRUdfMyAgICAgICgzIDw8IE9QX0FMR19QS01PREVfRFNUX1NFR19TSElGVCkKKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9DUFlNRU1fTl9TWiAgICAweDgwCisjZGVmaW5lIE9QX0FMR19QS01PREVfQ1BZTUVNX1NSQ19TWiAgMHg4MQorCisvKgorICogU0VRX0lOX1BUUiBDb21tYW5kIENvbnN0cnVjdHMKKyAqLworCisvKiBSZWxlYXNlIEJ1ZmZlcnMgKi8KKyNkZWZpbmUgU1FJTl9SQlMgICAgICAgICAgICAgICAweDA0MDAwMDAwCisKKy8qIFNlcXVlbmNlIHBvaW50ZXIgaXMgcmVhbGx5IGEgZGVzY3JpcHRvciAqLworI2RlZmluZSBTUUlOX0lOTCAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKworLyogU2VxdWVuY2UgcG9pbnRlciBpcyBhIHNjYXR0ZXItZ2F0aGVyIHRhYmxlICovCisjZGVmaW5lIFNRSU5fU0dGICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorCisvKiBBcHBlbmRzIHRvIGEgcHJldmlvdXMgcG9pbnRlciAqLworI2RlZmluZSBTUUlOX1BSRSAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKworLyogVXNlIGV4dGVuZGVkIGxlbmd0aCBmb2xsb3dpbmcgcG9pbnRlciAqLworI2RlZmluZSBTUUlOX0VYVCAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKworLyogUmVzdG9yZSBzZXF1ZW5jZSB3aXRoIHBvaW50ZXIvbGVuZ3RoICovCisjZGVmaW5lIFNRSU5fUlRPICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorCisvKiBSZXBsYWNlIGpvYiBkZXNjcmlwdG9yICovCisjZGVmaW5lIFNRSU5fUkpEICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorCisjZGVmaW5lIFNRSU5fTEVOX1NISUZUICAgICAgICAgICAwCisjZGVmaW5lIFNRSU5fTEVOX01BU0sgICAgICAgICAgICgweGZmZmYgPDwgU1FJTl9MRU5fU0hJRlQpCisKKy8qCisgKiBTRVFfT1VUX1BUUiBDb21tYW5kIENvbnN0cnVjdHMKKyAqLworCisvKiBTZXF1ZW5jZSBwb2ludGVyIGlzIGEgc2NhdHRlci1nYXRoZXIgdGFibGUgKi8KKyNkZWZpbmUgU1FPVVRfU0dGICAgICAgICAgICAgICAweDAxMDAwMDAwCisKKy8qIEFwcGVuZHMgdG8gYSBwcmV2aW91cyBwb2ludGVyICovCisjZGVmaW5lIFNRT1VUX1BSRSAgICAgICAgICAgICAgMHgwMDgwMDAwMAorCisvKiBSZXN0b3JlIHNlcXVlbmNlIHdpdGggcG9pbnRlci9sZW5ndGggKi8KKyNkZWZpbmUgU1FPVVRfUlRPICAgICAgICAgICAgICAweDAwMjAwMDAwCisKKy8qIFVzZSBleHRlbmRlZCBsZW5ndGggZm9sbG93aW5nIHBvaW50ZXIgKi8KKyNkZWZpbmUgU1FPVVRfRVhUICAgICAgICAgICAgICAweDAwNDAwMDAwCisKKyNkZWZpbmUgU1FPVVRfTEVOX1NISUZUICAgICAgICAgICAwCisjZGVmaW5lIFNRT1VUX0xFTl9NQVNLICAgICAgICAgICAoMHhmZmZmIDw8IFNRT1VUX0xFTl9TSElGVCkKKworCisvKgorICogU0lHTkFUVVJFIENvbW1hbmQgQ29uc3RydWN0cworICovCisKKy8qIFRZUEUgZmllbGQgaXMgYWxsIHRoYXQncyByZWxldmFudCAqLworI2RlZmluZSBTSUdOX1RZUEVfU0hJRlQgICAgICAgICAxNgorI2RlZmluZSBTSUdOX1RZUEVfTUFTSyAgICAgICAgICAoMHgwZiA8PCBTSUdOX1RZUEVfU0hJRlQpCisKKyNkZWZpbmUgU0lHTl9UWVBFX0ZJTkFMICAgICAgICAgKDB4MDAgPDwgU0lHTl9UWVBFX1NISUZUKQorI2RlZmluZSBTSUdOX1RZUEVfRklOQUxfUkVTVE9SRSAoMHgwMSA8PCBTSUdOX1RZUEVfU0hJRlQpCisjZGVmaW5lIFNJR05fVFlQRV9GSU5BTF9OT05aRVJPICgweDAyIDw8IFNJR05fVFlQRV9TSElGVCkKKyNkZWZpbmUgU0lHTl9UWVBFX0lNTV8yICAgICAgICAgKDB4MGEgPDwgU0lHTl9UWVBFX1NISUZUKQorI2RlZmluZSBTSUdOX1RZUEVfSU1NXzMgICAgICAgICAoMHgwYiA8PCBTSUdOX1RZUEVfU0hJRlQpCisjZGVmaW5lIFNJR05fVFlQRV9JTU1fNCAgICAgICAgICgweDBjIDw8IFNJR05fVFlQRV9TSElGVCkKKworLyoKKyAqIE1PVkUgQ29tbWFuZCBDb25zdHJ1Y3RzCisgKi8KKworI2RlZmluZSBNT1ZFX0FVWF9TSElGVCAgICAgICAgICAyNQorI2RlZmluZSBNT1ZFX0FVWF9NQVNLICAgICAgICAgICAoMyA8PCBNT1ZFX0FVWF9TSElGVCkKKyNkZWZpbmUgTU9WRV9BVVhfTVMgICAgICAgICAgICAgKDIgPDwgTU9WRV9BVVhfU0hJRlQpCisjZGVmaW5lIE1PVkVfQVVYX0xTICAgICAgICAgICAgICgxIDw8IE1PVkVfQVVYX1NISUZUKQorCisjZGVmaW5lIE1PVkVfV0FJVENPTVBfU0hJRlQgICAgIDI0CisjZGVmaW5lIE1PVkVfV0FJVENPTVBfTUFTSyAgICAgICgxIDw8IE1PVkVfV0FJVENPTVBfU0hJRlQpCisjZGVmaW5lIE1PVkVfV0FJVENPTVAgICAgICAgICAgICgxIDw8IE1PVkVfV0FJVENPTVBfU0hJRlQpCisKKyNkZWZpbmUgTU9WRV9TUkNfU0hJRlQgICAgICAgICAgMjAKKyNkZWZpbmUgTU9WRV9TUkNfTUFTSyAgICAgICAgICAgKDB4MGYgPDwgTU9WRV9TUkNfU0hJRlQpCisjZGVmaW5lIE1PVkVfU1JDX0NMQVNTMUNUWCAgICAgICgweDAwIDw8IE1PVkVfU1JDX1NISUZUKQorI2RlZmluZSBNT1ZFX1NSQ19DTEFTUzJDVFggICAgICAoMHgwMSA8PCBNT1ZFX1NSQ19TSElGVCkKKyNkZWZpbmUgTU9WRV9TUkNfT1VURklGTyAgICAgICAgKDB4MDIgPDwgTU9WRV9TUkNfU0hJRlQpCisjZGVmaW5lIE1PVkVfU1JDX0RFU0NCVUYgICAgICAgICgweDAzIDw8IE1PVkVfU1JDX1NISUZUKQorI2RlZmluZSBNT1ZFX1NSQ19NQVRIMCAgICAgICAgICAoMHgwNCA8PCBNT1ZFX1NSQ19TSElGVCkKKyNkZWZpbmUgTU9WRV9TUkNfTUFUSDEgICAgICAgICAgKDB4MDUgPDwgTU9WRV9TUkNfU0hJRlQpCisjZGVmaW5lIE1PVkVfU1JDX01BVEgyICAgICAgICAgICgweDA2IDw8IE1PVkVfU1JDX1NISUZUKQorI2RlZmluZSBNT1ZFX1NSQ19NQVRIMyAgICAgICAgICAoMHgwNyA8PCBNT1ZFX1NSQ19TSElGVCkKKyNkZWZpbmUgTU9WRV9TUkNfSU5GSUZPICAgICAgICAgKDB4MDggPDwgTU9WRV9TUkNfU0hJRlQpCisjZGVmaW5lIE1PVkVfU1JDX0lORklGT19DTCAgICAgICgweDA5IDw8IE1PVkVfU1JDX1NISUZUKQorCisjZGVmaW5lIE1PVkVfREVTVF9TSElGVCAgICAgICAgIDE2CisjZGVmaW5lIE1PVkVfREVTVF9NQVNLICAgICAgICAgICgweDBmIDw8IE1PVkVfREVTVF9TSElGVCkKKyNkZWZpbmUgTU9WRV9ERVNUX0NMQVNTMUNUWCAgICAgKDB4MDAgPDwgTU9WRV9ERVNUX1NISUZUKQorI2RlZmluZSBNT1ZFX0RFU1RfQ0xBU1MyQ1RYICAgICAoMHgwMSA8PCBNT1ZFX0RFU1RfU0hJRlQpCisjZGVmaW5lIE1PVkVfREVTVF9PVVRGSUZPICAgICAgICgweDAyIDw8IE1PVkVfREVTVF9TSElGVCkKKyNkZWZpbmUgTU9WRV9ERVNUX0RFU0NCVUYgICAgICAgKDB4MDMgPDwgTU9WRV9ERVNUX1NISUZUKQorI2RlZmluZSBNT1ZFX0RFU1RfTUFUSDAgICAgICAgICAoMHgwNCA8PCBNT1ZFX0RFU1RfU0hJRlQpCisjZGVmaW5lIE1PVkVfREVTVF9NQVRIMSAgICAgICAgICgweDA1IDw8IE1PVkVfREVTVF9TSElGVCkKKyNkZWZpbmUgTU9WRV9ERVNUX01BVEgyICAgICAgICAgKDB4MDYgPDwgTU9WRV9ERVNUX1NISUZUKQorI2RlZmluZSBNT1ZFX0RFU1RfTUFUSDMgICAgICAgICAoMHgwNyA8PCBNT1ZFX0RFU1RfU0hJRlQpCisjZGVmaW5lIE1PVkVfREVTVF9DTEFTUzFJTkZJRk8gICgweDA4IDw8IE1PVkVfREVTVF9TSElGVCkKKyNkZWZpbmUgTU9WRV9ERVNUX0NMQVNTMklORklGTyAgKDB4MDkgPDwgTU9WRV9ERVNUX1NISUZUKQorI2RlZmluZSBNT1ZFX0RFU1RfUEtfQSAgICAgICAgICAoMHgwYyA8PCBNT1ZFX0RFU1RfU0hJRlQpCisjZGVmaW5lIE1PVkVfREVTVF9DTEFTUzFLRVkgICAgICgweDBkIDw8IE1PVkVfREVTVF9TSElGVCkKKyNkZWZpbmUgTU9WRV9ERVNUX0NMQVNTMktFWSAgICAgKDB4MGUgPDwgTU9WRV9ERVNUX1NISUZUKQorCisjZGVmaW5lIE1PVkVfT0ZGU0VUX1NISUZUICAgICAgIDgKKyNkZWZpbmUgTU9WRV9PRkZTRVRfTUFTSyAgICAgICAgKDB4ZmYgPDwgTU9WRV9PRkZTRVRfU0hJRlQpCisKKyNkZWZpbmUgTU9WRV9MRU5fU0hJRlQgICAgICAgICAgMAorI2RlZmluZSBNT1ZFX0xFTl9NQVNLICAgICAgICAgICAoMHhmZiA8PCBNT1ZFX0xFTl9TSElGVCkKKworI2RlZmluZSBNT1ZFTEVOX01SU0VMX1NISUZUICAgICAwCisjZGVmaW5lIE1PVkVMRU5fTVJTRUxfTUFTSyAgICAgICgweDMgPDwgTU9WRV9MRU5fU0hJRlQpCisKKy8qCisgKiBNQVRIIENvbW1hbmQgQ29uc3RydWN0cworICovCisKKyNkZWZpbmUgTUFUSF9JRkJfU0hJRlQgICAgICAgICAgMjYKKyNkZWZpbmUgTUFUSF9JRkJfTUFTSyAgICAgICAgICAgKDEgPDwgTUFUSF9JRkJfU0hJRlQpCisjZGVmaW5lIE1BVEhfSUZCICAgICAgICAgICAgICAgICgxIDw8IE1BVEhfSUZCX1NISUZUKQorCisjZGVmaW5lIE1BVEhfTkZVX1NISUZUICAgICAgICAgIDI1CisjZGVmaW5lIE1BVEhfTkZVX01BU0sgICAgICAgICAgICgxIDw8IE1BVEhfTkZVX1NISUZUKQorI2RlZmluZSBNQVRIX05GVSAgICAgICAgICAgICAgICAoMSA8PCBNQVRIX05GVV9TSElGVCkKKworI2RlZmluZSBNQVRIX1NUTF9TSElGVCAgICAgICAgICAyNAorI2RlZmluZSBNQVRIX1NUTF9NQVNLICAgICAgICAgICAoMSA8PCBNQVRIX1NUTF9TSElGVCkKKyNkZWZpbmUgTUFUSF9TVEwgICAgICAgICAgICAgICAgKDEgPDwgTUFUSF9TVExfU0hJRlQpCisKKy8qIEZ1bmN0aW9uIHNlbGVjdG9ycyAqLworI2RlZmluZSBNQVRIX0ZVTl9TSElGVCAgICAgICAgICAyMAorI2RlZmluZSBNQVRIX0ZVTl9NQVNLICAgICAgICAgICAoMHgwZiA8PCBNQVRIX0ZVTl9TSElGVCkKKyNkZWZpbmUgTUFUSF9GVU5fQUREICAgICAgICAgICAgKDB4MDAgPDwgTUFUSF9GVU5fU0hJRlQpCisjZGVmaW5lIE1BVEhfRlVOX0FEREMgICAgICAgICAgICgweDAxIDw8IE1BVEhfRlVOX1NISUZUKQorI2RlZmluZSBNQVRIX0ZVTl9TVUIgICAgICAgICAgICAoMHgwMiA8PCBNQVRIX0ZVTl9TSElGVCkKKyNkZWZpbmUgTUFUSF9GVU5fU1VCQiAgICAgICAgICAgKDB4MDMgPDwgTUFUSF9GVU5fU0hJRlQpCisjZGVmaW5lIE1BVEhfRlVOX09SICAgICAgICAgICAgICgweDA0IDw8IE1BVEhfRlVOX1NISUZUKQorI2RlZmluZSBNQVRIX0ZVTl9BTkQgICAgICAgICAgICAoMHgwNSA8PCBNQVRIX0ZVTl9TSElGVCkKKyNkZWZpbmUgTUFUSF9GVU5fWE9SICAgICAgICAgICAgKDB4MDYgPDwgTUFUSF9GVU5fU0hJRlQpCisjZGVmaW5lIE1BVEhfRlVOX0xTSElGVCAgICAgICAgICgweDA3IDw8IE1BVEhfRlVOX1NISUZUKQorI2RlZmluZSBNQVRIX0ZVTl9SU0hJRlQgICAgICAgICAoMHgwOCA8PCBNQVRIX0ZVTl9TSElGVCkKKyNkZWZpbmUgTUFUSF9GVU5fU0hMRCAgICAgICAgICAgKDB4MDkgPDwgTUFUSF9GVU5fU0hJRlQpCisjZGVmaW5lIE1BVEhfRlVOX1pCWVQgICAgICAgICAgICgweDBhIDw8IE1BVEhfRlVOX1NISUZUKQorCisvKiBTb3VyY2UgMCBzZWxlY3RvcnMgKi8KKyNkZWZpbmUgTUFUSF9TUkMwX1NISUZUICAgICAgICAgMTYKKyNkZWZpbmUgTUFUSF9TUkMwX01BU0sgICAgICAgICAgKDB4MGYgPDwgTUFUSF9TUkMwX1NISUZUKQorI2RlZmluZSBNQVRIX1NSQzBfUkVHMCAgICAgICAgICAoMHgwMCA8PCBNQVRIX1NSQzBfU0hJRlQpCisjZGVmaW5lIE1BVEhfU1JDMF9SRUcxICAgICAgICAgICgweDAxIDw8IE1BVEhfU1JDMF9TSElGVCkKKyNkZWZpbmUgTUFUSF9TUkMwX1JFRzIgICAgICAgICAgKDB4MDIgPDwgTUFUSF9TUkMwX1NISUZUKQorI2RlZmluZSBNQVRIX1NSQzBfUkVHMyAgICAgICAgICAoMHgwMyA8PCBNQVRIX1NSQzBfU0hJRlQpCisjZGVmaW5lIE1BVEhfU1JDMF9JTU0gICAgICAgICAgICgweDA0IDw8IE1BVEhfU1JDMF9TSElGVCkKKyNkZWZpbmUgTUFUSF9TUkMwX1NFUUlOTEVOICAgICAgKDB4MDggPDwgTUFUSF9TUkMwX1NISUZUKQorI2RlZmluZSBNQVRIX1NSQzBfU0VRT1VUTEVOICAgICAoMHgwOSA8PCBNQVRIX1NSQzBfU0hJRlQpCisjZGVmaW5lIE1BVEhfU1JDMF9WQVJTRVFJTkxFTiAgICgweDBhIDw8IE1BVEhfU1JDMF9TSElGVCkKKyNkZWZpbmUgTUFUSF9TUkMwX1ZBUlNFUU9VVExFTiAgKDB4MGIgPDwgTUFUSF9TUkMwX1NISUZUKQorI2RlZmluZSBNQVRIX1NSQzBfWkVSTyAgICAgICAgICAoMHgwYyA8PCBNQVRIX1NSQzBfU0hJRlQpCisKKy8qIFNvdXJjZSAxIHNlbGVjdG9ycyAqLworI2RlZmluZSBNQVRIX1NSQzFfU0hJRlQgICAgICAgICAxMgorI2RlZmluZSBNQVRIX1NSQzFfTUFTSyAgICAgICAgICAoMHgwZiA8PCBNQVRIX1NSQzFfU0hJRlQpCisjZGVmaW5lIE1BVEhfU1JDMV9SRUcwICAgICAgICAgICgweDAwIDw8IE1BVEhfU1JDMV9TSElGVCkKKyNkZWZpbmUgTUFUSF9TUkMxX1JFRzEgICAgICAgICAgKDB4MDEgPDwgTUFUSF9TUkMxX1NISUZUKQorI2RlZmluZSBNQVRIX1NSQzFfUkVHMiAgICAgICAgICAoMHgwMiA8PCBNQVRIX1NSQzFfU0hJRlQpCisjZGVmaW5lIE1BVEhfU1JDMV9SRUczICAgICAgICAgICgweDAzIDw8IE1BVEhfU1JDMV9TSElGVCkKKyNkZWZpbmUgTUFUSF9TUkMxX0lNTSAgICAgICAgICAgKDB4MDQgPDwgTUFUSF9TUkMxX1NISUZUKQorI2RlZmluZSBNQVRIX1NSQzFfSU5GSUZPICAgICAgICAoMHgwYSA8PCBNQVRIX1NSQzFfU0hJRlQpCisjZGVmaW5lIE1BVEhfU1JDMV9PVVRGSUZPICAgICAgICgweDBiIDw8IE1BVEhfU1JDMV9TSElGVCkKKyNkZWZpbmUgTUFUSF9TUkMxX09ORSAgICAgICAgICAgKDB4MGMgPDwgTUFUSF9TUkMxX1NISUZUKQorCisvKiBEZXN0aW5hdGlvbiBzZWxlY3RvcnMgKi8KKyNkZWZpbmUgTUFUSF9ERVNUX1NISUZUICAgICAgICAgOAorI2RlZmluZSBNQVRIX0RFU1RfTUFTSyAgICAgICAgICAoMHgwZiA8PCBNQVRIX0RFU1RfU0hJRlQpCisjZGVmaW5lIE1BVEhfREVTVF9SRUcwICAgICAgICAgICgweDAwIDw8IE1BVEhfREVTVF9TSElGVCkKKyNkZWZpbmUgTUFUSF9ERVNUX1JFRzEgICAgICAgICAgKDB4MDEgPDwgTUFUSF9ERVNUX1NISUZUKQorI2RlZmluZSBNQVRIX0RFU1RfUkVHMiAgICAgICAgICAoMHgwMiA8PCBNQVRIX0RFU1RfU0hJRlQpCisjZGVmaW5lIE1BVEhfREVTVF9SRUczICAgICAgICAgICgweDAzIDw8IE1BVEhfREVTVF9TSElGVCkKKyNkZWZpbmUgTUFUSF9ERVNUX1NFUUlOTEVOICAgICAgKDB4MDggPDwgTUFUSF9ERVNUX1NISUZUKQorI2RlZmluZSBNQVRIX0RFU1RfU0VRT1VUTEVOICAgICAoMHgwOSA8PCBNQVRIX0RFU1RfU0hJRlQpCisjZGVmaW5lIE1BVEhfREVTVF9WQVJTRVFJTkxFTiAgICgweDBhIDw8IE1BVEhfREVTVF9TSElGVCkKKyNkZWZpbmUgTUFUSF9ERVNUX1ZBUlNFUU9VVExFTiAgKDB4MGIgPDwgTUFUSF9ERVNUX1NISUZUKQorI2RlZmluZSBNQVRIX0RFU1RfTk9ORSAgICAgICAgICAoMHgwZiA8PCBNQVRIX0RFU1RfU0hJRlQpCisKKy8qIExlbmd0aCBzZWxlY3RvcnMgKi8KKyNkZWZpbmUgTUFUSF9MRU5fU0hJRlQgICAgICAgICAgMAorI2RlZmluZSBNQVRIX0xFTl9NQVNLICAgICAgICAgICAoMHgwZiA8PCBNQVRIX0xFTl9TSElGVCkKKyNkZWZpbmUgTUFUSF9MRU5fMUJZVEUgICAgICAgICAgMHgwMQorI2RlZmluZSBNQVRIX0xFTl8yQllURSAgICAgICAgICAweDAyCisjZGVmaW5lIE1BVEhfTEVOXzRCWVRFICAgICAgICAgIDB4MDQKKyNkZWZpbmUgTUFUSF9MRU5fOEJZVEUgICAgICAgICAgMHgwOAorCisvKgorICogSlVNUCBDb21tYW5kIENvbnN0cnVjdHMKKyAqLworCisjZGVmaW5lIEpVTVBfQ0xBU1NfU0hJRlQgICAgICAgIDI1CisjZGVmaW5lIEpVTVBfQ0xBU1NfTUFTSwkJKDMgPDwgSlVNUF9DTEFTU19TSElGVCkKKyNkZWZpbmUgSlVNUF9DTEFTU19OT05FCQkwCisjZGVmaW5lIEpVTVBfQ0xBU1NfQ0xBU1MxCSgxIDw8IEpVTVBfQ0xBU1NfU0hJRlQpCisjZGVmaW5lIEpVTVBfQ0xBU1NfQ0xBU1MyCSgyIDw8IEpVTVBfQ0xBU1NfU0hJRlQpCisjZGVmaW5lIEpVTVBfQ0xBU1NfQk9USAkJKDMgPDwgSlVNUF9DTEFTU19TSElGVCkKKworI2RlZmluZSBKVU1QX0pTTF9TSElGVCAgICAgICAgICAyNAorI2RlZmluZSBKVU1QX0pTTF9NQVNLICAgICAgICAgICAoMSA8PCBKVU1QX0pTTF9TSElGVCkKKyNkZWZpbmUgSlVNUF9KU0wgICAgICAgICAgICAgICAgKDEgPDwgSlVNUF9KU0xfU0hJRlQpCisKKyNkZWZpbmUgSlVNUF9UWVBFX1NISUZUICAgICAgICAgMjIKKyNkZWZpbmUgSlVNUF9UWVBFX01BU0sgICAgICAgICAgKDB4MDMgPDwgSlVNUF9UWVBFX1NISUZUKQorI2RlZmluZSBKVU1QX1RZUEVfTE9DQUwgICAgICAgICAoMHgwMCA8PCBKVU1QX1RZUEVfU0hJRlQpCisjZGVmaW5lIEpVTVBfVFlQRV9OT05MT0NBTCAgICAgICgweDAxIDw8IEpVTVBfVFlQRV9TSElGVCkKKyNkZWZpbmUgSlVNUF9UWVBFX0hBTFQgICAgICAgICAgKDB4MDIgPDwgSlVNUF9UWVBFX1NISUZUKQorI2RlZmluZSBKVU1QX1RZUEVfSEFMVF9VU0VSICAgICAoMHgwMyA8PCBKVU1QX1RZUEVfU0hJRlQpCisKKyNkZWZpbmUgSlVNUF9URVNUX1NISUZUICAgICAgICAgMTYKKyNkZWZpbmUgSlVNUF9URVNUX01BU0sgICAgICAgICAgKDB4MDMgPDwgSlVNUF9URVNUX1NISUZUKQorI2RlZmluZSBKVU1QX1RFU1RfQUxMICAgICAgICAgICAoMHgwMCA8PCBKVU1QX1RFU1RfU0hJRlQpCisjZGVmaW5lIEpVTVBfVEVTVF9JTlZBTEwgICAgICAgICgweDAxIDw8IEpVTVBfVEVTVF9TSElGVCkKKyNkZWZpbmUgSlVNUF9URVNUX0FOWSAgICAgICAgICAgKDB4MDIgPDwgSlVNUF9URVNUX1NISUZUKQorI2RlZmluZSBKVU1QX1RFU1RfSU5WQU5ZICAgICAgICAoMHgwMyA8PCBKVU1QX1RFU1RfU0hJRlQpCisKKy8qIENvbmRpdGlvbiBjb2Rlcy4gSlNMIGJpdCBpcyBmYWN0b3JlZCBpbiAqLworI2RlZmluZSBKVU1QX0NPTkRfU0hJRlQgICAgICAgICA4CisjZGVmaW5lIEpVTVBfQ09ORF9NQVNLICAgICAgICAgICgweDEwMGZmIDw8IEpVTVBfQ09ORF9TSElGVCkKKyNkZWZpbmUgSlVNUF9DT05EX1BLXzAgICAgICAgICAgKDB4ODAgPDwgSlVNUF9DT05EX1NISUZUKQorI2RlZmluZSBKVU1QX0NPTkRfUEtfR0NEXzEgICAgICAoMHg0MCA8PCBKVU1QX0NPTkRfU0hJRlQpCisjZGVmaW5lIEpVTVBfQ09ORF9QS19QUklNRSAgICAgICgweDIwIDw8IEpVTVBfQ09ORF9TSElGVCkKKyNkZWZpbmUgSlVNUF9DT05EX01BVEhfTiAgICAgICAgKDB4MDggPDwgSlVNUF9DT05EX1NISUZUKQorI2RlZmluZSBKVU1QX0NPTkRfTUFUSF9aICAgICAgICAoMHgwNCA8PCBKVU1QX0NPTkRfU0hJRlQpCisjZGVmaW5lIEpVTVBfQ09ORF9NQVRIX0MgICAgICAgICgweDAyIDw8IEpVTVBfQ09ORF9TSElGVCkKKyNkZWZpbmUgSlVNUF9DT05EX01BVEhfTlYgICAgICAgKDB4MDEgPDwgSlVNUF9DT05EX1NISUZUKQorCisjZGVmaW5lIEpVTVBfQ09ORF9KUlAgICAgICAgICAgICgoMHg4MCA8PCBKVU1QX0NPTkRfU0hJRlQpIHwgSlVNUF9KU0wpCisjZGVmaW5lIEpVTVBfQ09ORF9TSFJEICAgICAgICAgICgoMHg0MCA8PCBKVU1QX0NPTkRfU0hJRlQpIHwgSlVNUF9KU0wpCisjZGVmaW5lIEpVTVBfQ09ORF9TRUxGICAgICAgICAgICgoMHgyMCA8PCBKVU1QX0NPTkRfU0hJRlQpIHwgSlVNUF9KU0wpCisjZGVmaW5lIEpVTVBfQ09ORF9DQUxNICAgICAgICAgICgoMHgxMCA8PCBKVU1QX0NPTkRfU0hJRlQpIHwgSlVNUF9KU0wpCisjZGVmaW5lIEpVTVBfQ09ORF9OSVAgICAgICAgICAgICgoMHgwOCA8PCBKVU1QX0NPTkRfU0hJRlQpIHwgSlVNUF9KU0wpCisjZGVmaW5lIEpVTVBfQ09ORF9OSUZQICAgICAgICAgICgoMHgwNCA8PCBKVU1QX0NPTkRfU0hJRlQpIHwgSlVNUF9KU0wpCisjZGVmaW5lIEpVTVBfQ09ORF9OT1AgICAgICAgICAgICgoMHgwMiA8PCBKVU1QX0NPTkRfU0hJRlQpIHwgSlVNUF9KU0wpCisjZGVmaW5lIEpVTVBfQ09ORF9OQ1AgICAgICAgICAgICgoMHgwMSA8PCBKVU1QX0NPTkRfU0hJRlQpIHwgSlVNUF9KU0wpCisKKyNkZWZpbmUgSlVNUF9PRkZTRVRfU0hJRlQgICAgICAgMAorI2RlZmluZSBKVU1QX09GRlNFVF9NQVNLICAgICAgICAoMHhmZiA8PCBKVU1QX09GRlNFVF9TSElGVCkKKworLyoKKyAqIE5GSUZPIEVOVFJZCisgKiBEYXRhIENvbnN0cnVjdHMKKyAqCisgKi8KKyNkZWZpbmUgTkZJRk9FTlRSWV9ERVNUX1NISUZUCTMwCisjZGVmaW5lIE5GSUZPRU5UUllfREVTVF9NQVNLCSgzIDw8IE5GSUZPRU5UUllfREVTVF9TSElGVCkKKyNkZWZpbmUgTkZJRk9FTlRSWV9ERVNUX0RFQ08JKDAgPDwgTkZJRk9FTlRSWV9ERVNUX1NISUZUKQorI2RlZmluZSBORklGT0VOVFJZX0RFU1RfQ0xBU1MxCSgxIDw8IE5GSUZPRU5UUllfREVTVF9TSElGVCkKKyNkZWZpbmUgTkZJRk9FTlRSWV9ERVNUX0NMQVNTMgkoMiA8PCBORklGT0VOVFJZX0RFU1RfU0hJRlQpCisjZGVmaW5lIE5GSUZPRU5UUllfREVTVF9CT1RICSgzIDw8IE5GSUZPRU5UUllfREVTVF9TSElGVCkKKworI2RlZmluZSBORklGT0VOVFJZX0xDMl9TSElGVAkyOQorI2RlZmluZSBORklGT0VOVFJZX0xDMl9NQVNLCQkoMSA8PCBORklGT0VOVFJZX0xDMl9TSElGVCkKKyNkZWZpbmUgTkZJRk9FTlRSWV9MQzIJCQkoMSA8PCBORklGT0VOVFJZX0xDMl9TSElGVCkKKworI2RlZmluZSBORklGT0VOVFJZX0xDMV9TSElGVAkyOAorI2RlZmluZSBORklGT0VOVFJZX0xDMV9NQVNLCQkoMSA8PCBORklGT0VOVFJZX0xDMV9TSElGVCkKKyNkZWZpbmUgTkZJRk9FTlRSWV9MQzEJCQkoMSA8PCBORklGT0VOVFJZX0xDMV9TSElGVCkKKworI2RlZmluZSBORklGT0VOVFJZX0ZDMl9TSElGVAkyNworI2RlZmluZSBORklGT0VOVFJZX0ZDMl9NQVNLCQkoMSA8PCBORklGT0VOVFJZX0ZDMl9TSElGVCkKKyNkZWZpbmUgTkZJRk9FTlRSWV9GQzIJCQkoMSA8PCBORklGT0VOVFJZX0ZDMl9TSElGVCkKKworI2RlZmluZSBORklGT0VOVFJZX0ZDMV9TSElGVAkyNgorI2RlZmluZSBORklGT0VOVFJZX0ZDMV9NQVNLCQkoMSA8PCBORklGT0VOVFJZX0ZDMV9TSElGVCkKKyNkZWZpbmUgTkZJRk9FTlRSWV9GQzEJCQkoMSA8PCBORklGT0VOVFJZX0ZDMV9TSElGVCkKKworI2RlZmluZSBORklGT0VOVFJZX1NUWVBFX1NISUZUCTI0CisjZGVmaW5lIE5GSUZPRU5UUllfU1RZUEVfTUFTSwkoMyA8PCBORklGT0VOVFJZX1NUWVBFX1NISUZUKQorI2RlZmluZSBORklGT0VOVFJZX1NUWVBFX0RGSUZPCSgwIDw8IE5GSUZPRU5UUllfU1RZUEVfU0hJRlQpCisjZGVmaW5lIE5GSUZPRU5UUllfU1RZUEVfT0ZJRk8JKDEgPDwgTkZJRk9FTlRSWV9TVFlQRV9TSElGVCkKKyNkZWZpbmUgTkZJRk9FTlRSWV9TVFlQRV9QQUQJKDIgPDwgTkZJRk9FTlRSWV9TVFlQRV9TSElGVCkKKyNkZWZpbmUgTkZJRk9FTlRSWV9TVFlQRV9TTk9PUAkoMyA8PCBORklGT0VOVFJZX1NUWVBFX1NISUZUKQorCisjZGVmaW5lIE5GSUZPRU5UUllfRFRZUEVfU0hJRlQJMjAKKyNkZWZpbmUgTkZJRk9FTlRSWV9EVFlQRV9NQVNLCSgweEYgPDwgTkZJRk9FTlRSWV9EVFlQRV9TSElGVCkKKworI2RlZmluZSBORklGT0VOVFJZX0RUWVBFX1NCT1ggICAgICAoMHgwICA8PCBORklGT0VOVFJZX0RUWVBFX1NISUZUKQorI2RlZmluZSBORklGT0VOVFJZX0RUWVBFX0FBRCAgICAgICAoMHgxICA8PCBORklGT0VOVFJZX0RUWVBFX1NISUZUKQorI2RlZmluZSBORklGT0VOVFJZX0RUWVBFX0lWICAgICAgICAoMHgyICA8PCBORklGT0VOVFJZX0RUWVBFX1NISUZUKQorI2RlZmluZSBORklGT0VOVFJZX0RUWVBFX1NBRCAgICAgICAoMHgzICA8PCBORklGT0VOVFJZX0RUWVBFX1NISUZUKQorI2RlZmluZSBORklGT0VOVFJZX0RUWVBFX0lDViAgICAgICAoMHhBICA8PCBORklGT0VOVFJZX0RUWVBFX1NISUZUKQorI2RlZmluZSBORklGT0VOVFJZX0RUWVBFX1NLSVAgICAgICAoMHhFICA8PCBORklGT0VOVFJZX0RUWVBFX1NISUZUKQorI2RlZmluZSBORklGT0VOVFJZX0RUWVBFX01TRyAgICAgICAoMHhGICA8PCBORklGT0VOVFJZX0RUWVBFX1NISUZUKQorCisjZGVmaW5lIE5GSUZPRU5UUllfRFRZUEVfUEtfQTAgICAgICgweDAgIDw8IE5GSUZPRU5UUllfRFRZUEVfU0hJRlQpCisjZGVmaW5lIE5GSUZPRU5UUllfRFRZUEVfUEtfQTEgICAgICgweDEgIDw8IE5GSUZPRU5UUllfRFRZUEVfU0hJRlQpCisjZGVmaW5lIE5GSUZPRU5UUllfRFRZUEVfUEtfQTIgICAgICgweDIgIDw8IE5GSUZPRU5UUllfRFRZUEVfU0hJRlQpCisjZGVmaW5lIE5GSUZPRU5UUllfRFRZUEVfUEtfQTMgICAgICgweDMgIDw8IE5GSUZPRU5UUllfRFRZUEVfU0hJRlQpCisjZGVmaW5lIE5GSUZPRU5UUllfRFRZUEVfUEtfQjAgICAgICgweDQgIDw8IE5GSUZPRU5UUllfRFRZUEVfU0hJRlQpCisjZGVmaW5lIE5GSUZPRU5UUllfRFRZUEVfUEtfQjEgICAgICgweDUgIDw8IE5GSUZPRU5UUllfRFRZUEVfU0hJRlQpCisjZGVmaW5lIE5GSUZPRU5UUllfRFRZUEVfUEtfQjIgICAgICgweDYgIDw8IE5GSUZPRU5UUllfRFRZUEVfU0hJRlQpCisjZGVmaW5lIE5GSUZPRU5UUllfRFRZUEVfUEtfQjMgICAgICgweDcgIDw8IE5GSUZPRU5UUllfRFRZUEVfU0hJRlQpCisjZGVmaW5lIE5GSUZPRU5UUllfRFRZUEVfUEtfTiAgICAgICgweDggIDw8IE5GSUZPRU5UUllfRFRZUEVfU0hJRlQpCisjZGVmaW5lIE5GSUZPRU5UUllfRFRZUEVfUEtfRSAgICAgICgweDkgIDw8IE5GSUZPRU5UUllfRFRZUEVfU0hJRlQpCisjZGVmaW5lIE5GSUZPRU5UUllfRFRZUEVfUEtfQSAgICAgICgweEMgIDw8IE5GSUZPRU5UUllfRFRZUEVfU0hJRlQpCisjZGVmaW5lIE5GSUZPRU5UUllfRFRZUEVfUEtfQiAgICAgICgweEQgIDw8IE5GSUZPRU5UUllfRFRZUEVfU0hJRlQpCisKKworI2RlZmluZSBORklGT0VOVFJZX0JORF9TSElGVAkxOQorI2RlZmluZSBORklGT0VOVFJZX0JORF9NQVNLCQkoMSA8PCBORklGT0VOVFJZX0JORF9TSElGVCkKKyNkZWZpbmUgTkZJRk9FTlRSWV9CTkQJCQkoMSA8PCBORklGT0VOVFJZX0JORF9TSElGVCkKKworI2RlZmluZSBORklGT0VOVFJZX1BUWVBFX1NISUZUCTE2CisjZGVmaW5lIE5GSUZPRU5UUllfUFRZUEVfTUFTSwkoMHg3IDw8IE5GSUZPRU5UUllfUFRZUEVfU0hJRlQpCisKKyNkZWZpbmUgTkZJRk9FTlRSWV9QVFlQRV9aRVJPUyAgICAgICAgICgweDAgIDw8IE5GSUZPRU5UUllfUFRZUEVfU0hJRlQpCisjZGVmaW5lIE5GSUZPRU5UUllfUFRZUEVfUk5EX05PWkVST1MgICAoMHgxICA8PCBORklGT0VOVFJZX1BUWVBFX1NISUZUKQorI2RlZmluZSBORklGT0VOVFJZX1BUWVBFX0lOQ1JFTUVOVCAgICAgKDB4MiAgPDwgTkZJRk9FTlRSWV9QVFlQRV9TSElGVCkKKyNkZWZpbmUgTkZJRk9FTlRSWV9QVFlQRV9STkQgICAgICAgICAgICgweDMgIDw8IE5GSUZPRU5UUllfUFRZUEVfU0hJRlQpCisjZGVmaW5lIE5GSUZPRU5UUllfUFRZUEVfWkVST1NfTlogICAgICAoMHg0ICA8PCBORklGT0VOVFJZX1BUWVBFX1NISUZUKQorI2RlZmluZSBORklGT0VOVFJZX1BUWVBFX1JORF9OWl9MWiAgICAgKDB4NSAgPDwgTkZJRk9FTlRSWV9QVFlQRV9TSElGVCkKKyNkZWZpbmUgTkZJRk9FTlRSWV9QVFlQRV9OICAgICAgICAgICAgICgweDYgIDw8IE5GSUZPRU5UUllfUFRZUEVfU0hJRlQpCisjZGVmaW5lIE5GSUZPRU5UUllfUFRZUEVfUk5EX05aX04gICAgICAoMHg3ICA8PCBORklGT0VOVFJZX1BUWVBFX1NISUZUKQorCisjZGVmaW5lIE5GSUZPRU5UUllfT0NfU0hJRlQJCTE1CisjZGVmaW5lIE5GSUZPRU5UUllfT0NfTUFTSwkJKDEgPDwgTkZJRk9FTlRSWV9PQ19TSElGVCkKKyNkZWZpbmUgTkZJRk9FTlRSWV9PQwkJCSgxIDw8IE5GSUZPRU5UUllfT0NfU0hJRlQpCisKKyNkZWZpbmUgTkZJRk9FTlRSWV9BU1RfU0hJRlQJMTQKKyNkZWZpbmUgTkZJRk9FTlRSWV9BU1RfTUFTSwkJKDEgPDwgTkZJRk9FTlRSWV9PQ19TSElGVCkKKyNkZWZpbmUgTkZJRk9FTlRSWV9BU1QJCQkoMSA8PCBORklGT0VOVFJZX09DX1NISUZUKQorCisjZGVmaW5lIE5GSUZPRU5UUllfQk1fU0hJRlQJCTExCisjZGVmaW5lIE5GSUZPRU5UUllfQk1fTUFTSwkJKDEgPDwgTkZJRk9FTlRSWV9CTV9TSElGVCkKKyNkZWZpbmUgTkZJRk9FTlRSWV9CTQkJCSgxIDw8IE5GSUZPRU5UUllfQk1fU0hJRlQpCisKKyNkZWZpbmUgTkZJRk9FTlRSWV9QU19TSElGVAkJMTAKKyNkZWZpbmUgTkZJRk9FTlRSWV9QU19NQVNLCQkoMSA8PCBORklGT0VOVFJZX1BTX1NISUZUKQorI2RlZmluZSBORklGT0VOVFJZX1BTCQkJKDEgPDwgTkZJRk9FTlRSWV9QU19TSElGVCkKKworCisjZGVmaW5lIE5GSUZPRU5UUllfRExFTl9TSElGVAkwCisjZGVmaW5lIE5GSUZPRU5UUllfRExFTl9NQVNLCSgweEZGRiA8PCBORklGT0VOVFJZX0RMRU5fU0hJRlQpCisKKyNkZWZpbmUgTkZJRk9FTlRSWV9QTEVOX1NISUZUCTAKKyNkZWZpbmUgTkZJRk9FTlRSWV9QTEVOX01BU0sJKDB4RkYgPDwgTkZJRk9FTlRSWV9QTEVOX1NISUZUKQorCisvKgorICogUERCIGludGVybmFsIGRlZmluaXRpb25zCisgKi8KKworLyogSVBTZWMgRVNQIENCQyBFbmNhcC9EZWNhcCBPcHRpb25zICovCisjZGVmaW5lIFBEQk9QVFNfRVNQQ0JDX0FSU05PTkUgIDB4MDAgICAvKiBubyBhbnRpcmVwbGF5IHdpbmRvdyAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUERCT1BUU19FU1BDQkNfQVJTMzIgICAgMHg0MCAgIC8qIDMyLWVudHJ5IGFudGlyZXBsYXkgd2luZG93ICAgICAgICAqLworI2RlZmluZSBQREJPUFRTX0VTUENCQ19BUlM2NCAgICAweGMwICAgLyogNjQtZW50cnkgYW50aXJlcGxheSB3aW5kb3cgICAgICAgICovCisjZGVmaW5lIFBEQk9QVFNfRVNQQ0JDX0lWU1JDICAgIDB4MjAgICAvKiBJViBjb21lcyBmcm9tIGludGVybmFsIHJhbmRvbSBnZW4gKi8KKyNkZWZpbmUgUERCT1BUU19FU1BDQkNfRVNOICAgICAgMHgxMCAgIC8qIGV4dGVuZGVkIHNlcXVlbmNlIGluY2x1ZGVkICAgICAgICAqLworI2RlZmluZSBQREJPUFRTX0VTUENCQ19PVVRGTVQgICAweDA4ICAgLyogb3V0cHV0IG9ubHkgZGVjYXBzdWxhdGlvbiAoZGVjYXApICovCisjZGVmaW5lIFBEQk9QVFNfRVNQQ0JDX0lQSERSU1JDIDB4MDggICAvKiBJUCBoZWFkZXIgY29tZXMgZnJvbSBQREIgKGVuY2FwKSAgKi8KKyNkZWZpbmUgUERCT1BUU19FU1BDQkNfSU5DSVBIRFIgMHgwNCAgIC8qIFByZXBlbmQgSVAgaGVhZGVyIHRvIG91dHB1dCBmcmFtZSAqLworI2RlZmluZSBQREJPUFRTX0VTUENCQ19JUFZTTiAgICAweDAyICAgLyogcHJvY2VzcyBJUHY2IGhlYWRlciAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBEQk9QVFNfRVNQQ0JDX1RVTk5FTCAgIDB4MDEgICAvKiB0dW5uZWwgbW9kZSBuZXh0LWhlYWRlciBieXRlICAgICAgKi8KKworI2VuZGlmIC8qIERFU0NfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vY2FhbS9kZXNjX2NvbnN0ci5oIGIvZHJpdmVycy9jcnlwdG8vY2FhbS9kZXNjX2NvbnN0ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2OTE1ODAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NyeXB0by9jYWFtL2Rlc2NfY29uc3RyLmgKQEAgLTAsMCArMSwyMDUgQEAKKy8qCisgKiBjYWFtIGRlc2NyaXB0b3IgY29uc3RydWN0aW9uIGhlbHBlciBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOC0yMDExIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKi8KKworI2luY2x1ZGUgImRlc2MuaCIKKworI2RlZmluZSBJTU1FRElBVEUgKDEgPDwgMjMpCisjZGVmaW5lIENBQU1fQ01EX1NaIHNpemVvZih1MzIpCisjZGVmaW5lIENBQU1fUFRSX1NaIHNpemVvZihkbWFfYWRkcl90KQorI2RlZmluZSBDQUFNX0RFU0NfQllURVNfTUFYIChDQUFNX0NNRF9TWiAqIDY0KQorCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgUFJJTlRfUE9TIGRvIHsgcHJpbnRrKEtFUk5fREVCVUcgIiUwMmQ6ICVzXG4iLCBkZXNjX2xlbihkZXNjKSxcCisJCQkgICAgICAmX19mdW5jX19bc2l6ZW9mKCJhcHBlbmQiKV0pOyB9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgUFJJTlRfUE9TCisjZW5kaWYKKworI2RlZmluZSBESVNBQkxFX0FVVE9fSU5GT19GSUZPIChJTU1FRElBVEUgfCBMRFNUX0NMQVNTX0RFQ08gfCBcCisJCQkJTERTVF9TUkNEU1RfV09SRF9ERUNPQ1RSTCB8IFwKKwkJCQkoTERPRkZfRElTQUJMRV9BVVRPX05GSUZPIDw8IExEU1RfT0ZGU0VUX1NISUZUKSkKKyNkZWZpbmUgRU5BQkxFX0FVVE9fSU5GT19GSUZPIChJTU1FRElBVEUgfCBMRFNUX0NMQVNTX0RFQ08gfCBcCisJCQkgICAgICAgTERTVF9TUkNEU1RfV09SRF9ERUNPQ1RSTCB8IFwKKwkJCSAgICAgICAoTERPRkZfRU5BQkxFX0FVVE9fTkZJRk8gPDwgTERTVF9PRkZTRVRfU0hJRlQpKQorCitzdGF0aWMgaW5saW5lIGludCBkZXNjX2xlbih1MzIgKmRlc2MpCit7CisJcmV0dXJuICpkZXNjICYgSERSX0RFU0NMRU5fTUFTSzsKK30KKworc3RhdGljIGlubGluZSBpbnQgZGVzY19ieXRlcyh2b2lkICpkZXNjKQoreworCXJldHVybiBkZXNjX2xlbihkZXNjKSAqIENBQU1fQ01EX1NaOworfQorCitzdGF0aWMgaW5saW5lIHUzMiAqZGVzY19lbmQodTMyICpkZXNjKQoreworCXJldHVybiBkZXNjICsgZGVzY19sZW4oZGVzYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqc2hfZGVzY19wZGIodTMyICpkZXNjKQoreworCXJldHVybiBkZXNjICsgMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfZGVzYyh1MzIgKmRlc2MsIHUzMiBvcHRpb25zKQoreworCSpkZXNjID0gb3B0aW9ucyB8IEhEUl9PTkUgfCAxOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zaF9kZXNjKHUzMiAqZGVzYywgdTMyIG9wdGlvbnMpCit7CisJUFJJTlRfUE9TOworCWluaXRfZGVzYyhkZXNjLCBDTURfU0hBUkVEX0RFU0NfSERSIHwgb3B0aW9ucyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NoX2Rlc2NfcGRiKHUzMiAqZGVzYywgdTMyIG9wdGlvbnMsIHNpemVfdCBwZGJfYnl0ZXMpCit7CisJdTMyIHBkYl9sZW4gPSBwZGJfYnl0ZXMgLyBDQUFNX0NNRF9TWiArIDE7CisKKwlpbml0X3NoX2Rlc2MoZGVzYywgKChwZGJfbGVuIDw8IEhEUl9TVEFSVF9JRFhfU0hJRlQpICsgcGRiX2xlbikgfAorCQkgICAgIG9wdGlvbnMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9qb2JfZGVzYyh1MzIgKmRlc2MsIHUzMiBvcHRpb25zKQoreworCWluaXRfZGVzYyhkZXNjLCBDTURfREVTQ19IRFIgfCBvcHRpb25zKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZF9wdHIodTMyICpkZXNjLCBkbWFfYWRkcl90IHB0cikKK3sKKwlkbWFfYWRkcl90ICpvZmZzZXQgPSAoZG1hX2FkZHJfdCAqKWRlc2NfZW5kKGRlc2MpOworCisJKm9mZnNldCA9IHB0cjsKKworCSgqZGVzYykgKz0gQ0FBTV9QVFJfU1ogLyBDQUFNX0NNRF9TWjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfam9iX2Rlc2Nfc2hhcmVkKHUzMiAqZGVzYywgZG1hX2FkZHJfdCBwdHIsIGludCBsZW4sCisJCQkJCXUzMiBvcHRpb25zKQoreworCVBSSU5UX1BPUzsKKwlpbml0X2pvYl9kZXNjKGRlc2MsIEhEUl9TSEFSRUQgfCBvcHRpb25zIHwKKwkJICAgICAgKGxlbiA8PCBIRFJfU1RBUlRfSURYX1NISUZUKSk7CisJYXBwZW5kX3B0cihkZXNjLCBwdHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kX2RhdGEodTMyICpkZXNjLCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCXUzMiAqb2Zmc2V0ID0gZGVzY19lbmQoZGVzYyk7CisKKwlpZiAobGVuKSAvKiBhdm9pZCBzcGFyc2Ugd2FybmluZzogbWVtY3B5IHdpdGggYnl0ZSBjb3VudCBvZiAwICovCisJCW1lbWNweShvZmZzZXQsIGRhdGEsIGxlbik7CisKKwkoKmRlc2MpICs9IChsZW4gKyBDQUFNX0NNRF9TWiAtIDEpIC8gQ0FBTV9DTURfU1o7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRfY21kKHUzMiAqZGVzYywgdTMyIGNvbW1hbmQpCit7CisJdTMyICpjbWQgPSBkZXNjX2VuZChkZXNjKTsKKworCSpjbWQgPSBjb21tYW5kOworCisJKCpkZXNjKSsrOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kX2NtZF9wdHIodTMyICpkZXNjLCBkbWFfYWRkcl90IHB0ciwgaW50IGxlbiwKKwkJCQkgIHUzMiBjb21tYW5kKQoreworCWFwcGVuZF9jbWQoZGVzYywgY29tbWFuZCB8IGxlbik7CisJYXBwZW5kX3B0cihkZXNjLCBwdHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kX2NtZF9kYXRhKHUzMiAqZGVzYywgdm9pZCAqZGF0YSwgaW50IGxlbiwKKwkJCQkgICB1MzIgY29tbWFuZCkKK3sKKwlhcHBlbmRfY21kKGRlc2MsIGNvbW1hbmQgfCBJTU1FRElBVEUgfCBsZW4pOworCWFwcGVuZF9kYXRhKGRlc2MsIGRhdGEsIGxlbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyICphcHBlbmRfanVtcCh1MzIgKmRlc2MsIHUzMiBvcHRpb25zKQoreworCXUzMiAqY21kID0gZGVzY19lbmQoZGVzYyk7CisKKwlQUklOVF9QT1M7CisJYXBwZW5kX2NtZChkZXNjLCBDTURfSlVNUCB8IG9wdGlvbnMpOworCisJcmV0dXJuIGNtZDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9qdW1wX3RndF9oZXJlKHUzMiAqZGVzYywgdTMyICpqdW1wX2NtZCkKK3sKKwkqanVtcF9jbWQgPSAqanVtcF9jbWQgfCAoZGVzY19sZW4oZGVzYykgLSAoanVtcF9jbWQgLSBkZXNjKSk7Cit9CisKKyNkZWZpbmUgQVBQRU5EX0NNRChjbWQsIG9wKSBcCitzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kXyMjY21kKHUzMiAqZGVzYywgdTMyIG9wdGlvbnMpIFwKK3sgXAorCVBSSU5UX1BPUzsgXAorCWFwcGVuZF9jbWQoZGVzYywgQ01EXyMjb3AgfCBvcHRpb25zKTsgXAorfQorQVBQRU5EX0NNRChvcGVyYXRpb24sIE9QRVJBVElPTikKK0FQUEVORF9DTUQobW92ZSwgTU9WRSkKKworI2RlZmluZSBBUFBFTkRfQ01EX0xFTihjbWQsIG9wKSBcCitzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kXyMjY21kKHUzMiAqZGVzYywgdW5zaWduZWQgaW50IGxlbiwgdTMyIG9wdGlvbnMpIFwKK3sgXAorCVBSSU5UX1BPUzsgXAorCWFwcGVuZF9jbWQoZGVzYywgQ01EXyMjb3AgfCBsZW4gfCBvcHRpb25zKTsgXAorfQorQVBQRU5EX0NNRF9MRU4oc2VxX3N0b3JlLCBTRVFfU1RPUkUpCitBUFBFTkRfQ01EX0xFTihzZXFfZmlmb19sb2FkLCBTRVFfRklGT19MT0FEKQorQVBQRU5EX0NNRF9MRU4oc2VxX2ZpZm9fc3RvcmUsIFNFUV9GSUZPX1NUT1JFKQorCisjZGVmaW5lIEFQUEVORF9DTURfUFRSKGNtZCwgb3ApIFwKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRfIyNjbWQodTMyICpkZXNjLCBkbWFfYWRkcl90IHB0ciwgdW5zaWduZWQgaW50IGxlbiwgXAorCQkJCXUzMiBvcHRpb25zKSBcCit7IFwKKwlQUklOVF9QT1M7IFwKKwlhcHBlbmRfY21kX3B0cihkZXNjLCBwdHIsIGxlbiwgQ01EXyMjb3AgfCBvcHRpb25zKTsgXAorfQorQVBQRU5EX0NNRF9QVFIoa2V5LCBLRVkpCitBUFBFTkRfQ01EX1BUUihzZXFfaW5fcHRyLCBTRVFfSU5fUFRSKQorQVBQRU5EX0NNRF9QVFIoc2VxX291dF9wdHIsIFNFUV9PVVRfUFRSKQorQVBQRU5EX0NNRF9QVFIobG9hZCwgTE9BRCkKK0FQUEVORF9DTURfUFRSKHN0b3JlLCBTVE9SRSkKK0FQUEVORF9DTURfUFRSKGZpZm9fbG9hZCwgRklGT19MT0FEKQorQVBQRU5EX0NNRF9QVFIoZmlmb19zdG9yZSwgRklGT19TVE9SRSkKKworI2RlZmluZSBBUFBFTkRfQ01EX1BUUl9UT19JTU0oY21kLCBvcCkgXAorc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZF8jI2NtZCMjX2FzX2ltbSh1MzIgKmRlc2MsIHZvaWQgKmRhdGEsIFwKKwkJCQkJIHVuc2lnbmVkIGludCBsZW4sIHUzMiBvcHRpb25zKSBcCit7IFwKKwlQUklOVF9QT1M7IFwKKwlhcHBlbmRfY21kX2RhdGEoZGVzYywgZGF0YSwgbGVuLCBDTURfIyNvcCB8IG9wdGlvbnMpOyBcCit9CitBUFBFTkRfQ01EX1BUUl9UT19JTU0obG9hZCwgTE9BRCk7CitBUFBFTkRfQ01EX1BUUl9UT19JTU0oZmlmb19sb2FkLCBGSUZPX0xPQUQpOworCisvKgorICogMm5kIHZhcmlhbnQgZm9yIGNvbW1hbmRzIHdob3NlIHNwZWNpZmllZCBpbW1lZGlhdGUgbGVuZ3RoIGRpZmZlcnMKKyAqIGZyb20gbGVuZ3RoIG9mIGltbWVkaWF0ZSBkYXRhIHByb3ZpZGVkLCBlLmcuLCBzcGxpdCBrZXlzCisgKi8KKyNkZWZpbmUgQVBQRU5EX0NNRF9QVFJfVE9fSU1NMihjbWQsIG9wKSBcCitzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kXyMjY21kIyNfYXNfaW1tKHUzMiAqZGVzYywgdm9pZCAqZGF0YSwgXAorCQkJCQkgdW5zaWduZWQgaW50IGRhdGFfbGVuLCBcCisJCQkJCSB1bnNpZ25lZCBpbnQgbGVuLCB1MzIgb3B0aW9ucykgXAoreyBcCisJUFJJTlRfUE9TOyBcCisJYXBwZW5kX2NtZChkZXNjLCBDTURfIyNvcCB8IElNTUVESUFURSB8IGxlbiB8IG9wdGlvbnMpOyBcCisJYXBwZW5kX2RhdGEoZGVzYywgZGF0YSwgZGF0YV9sZW4pOyBcCit9CitBUFBFTkRfQ01EX1BUUl9UT19JTU0yKGtleSwgS0VZKTsKKworI2RlZmluZSBBUFBFTkRfQ01EX1JBV19JTU0oY21kLCBvcCwgdHlwZSkgXAorc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZF8jI2NtZCMjX2ltbV8jI3R5cGUodTMyICpkZXNjLCB0eXBlIGltbWVkaWF0ZSwgXAorCQkJCQkgICAgIHUzMiBvcHRpb25zKSBcCit7IFwKKwlQUklOVF9QT1M7IFwKKwlhcHBlbmRfY21kKGRlc2MsIENNRF8jI29wIHwgSU1NRURJQVRFIHwgb3B0aW9ucyB8IHNpemVvZih0eXBlKSk7IFwKKwlhcHBlbmRfY21kKGRlc2MsIGltbWVkaWF0ZSk7IFwKK30KK0FQUEVORF9DTURfUkFXX0lNTShsb2FkLCBMT0FELCB1MzIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vY2FhbS9lcnJvci5jIGIvZHJpdmVycy9jcnlwdG8vY2FhbS9lcnJvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMmQ1NGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NyeXB0by9jYWFtL2Vycm9yLmMKQEAgLTAsMCArMSwyNDggQEAKKy8qCisgKiBDQUFNIEVycm9yIFJlcG9ydGluZworICoKKyAqIENvcHlyaWdodCAyMDA5LTIwMTEgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqLworCisjaW5jbHVkZSAiY29tcGF0LmgiCisjaW5jbHVkZSAicmVncy5oIgorI2luY2x1ZGUgImludGVybi5oIgorI2luY2x1ZGUgImRlc2MuaCIKKyNpbmNsdWRlICJqci5oIgorI2luY2x1ZGUgImVycm9yLmgiCisKKyNkZWZpbmUgU1BSSU5URkNBVChzdHIsIGZvcm1hdCwgcGFyYW0sIG1heF9hbGxvYykJCVwKK3sJCQkJCQkJCVwKKwljaGFyICp0bXA7CQkJCQkJXAorCQkJCQkJCQlcCisJdG1wID0ga21hbGxvYyhzaXplb2YoZm9ybWF0KSArIG1heF9hbGxvYywgR0ZQX0FUT01JQyk7CVwKKwlzcHJpbnRmKHRtcCwgZm9ybWF0LCBwYXJhbSk7CQkJCVwKKwlzdHJjYXQoc3RyLCB0bXApOwkJCQkJXAorCWtmcmVlKHRtcCk7CQkJCQkJXAorfQorCitzdGF0aWMgdm9pZCByZXBvcnRfanVtcF9pZHgodTMyIHN0YXR1cywgY2hhciAqb3V0c3RyKQoreworCXU4IGlkeCA9IChzdGF0dXMgJiBKUlNUQV9ERUNPRVJSX0lOREVYX01BU0spID4+CisJCSAgSlJTVEFfREVDT0VSUl9JTkRFWF9TSElGVDsKKworCWlmIChzdGF0dXMgJiBKUlNUQV9ERUNPRVJSX0pVTVApCisJCXN0cmNhdChvdXRzdHIsICJqdW1wIHRndCBkZXNjIGlkeCAiKTsKKwllbHNlCisJCXN0cmNhdChvdXRzdHIsICJkZXNjIGlkeCAiKTsKKworCVNQUklOVEZDQVQob3V0c3RyLCAiJWQ6ICIsIGlkeCwgc2l6ZW9mKCIyNTUiKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlcG9ydF9jY2Jfc3RhdHVzKHUzMiBzdGF0dXMsIGNoYXIgKm91dHN0cikKK3sKKwljaGFyICpjaGFfaWRfbGlzdFtdID0geworCQkiIiwKKwkJIkFFUyIsCisJCSJERVMsIDNERVMiLAorCQkiQVJDNCIsCisJCSJNRDUsIFNIQS0xLCBTSC0yMjQsIFNIQS0yNTYsIFNIQS0zODQsIFNIQS01MTIiLAorCQkiUk5HIiwKKwkJIlNOT1cgZjgiLAorCQkiS2FzdW1pIGY4LCBmOSIsCisJCSJBbGwgUHVibGljIEtleSBBbGdvcml0aG1zIiwKKwkJIkNSQyIsCisJCSJTTk9XIGY5IiwKKwl9OworCWNoYXIgKmVycl9pZF9saXN0W10gPSB7CisJCSJOb25lLiBObyBlcnJvci4iLAorCQkiTW9kZSBlcnJvci4iLAorCQkiRGF0YSBzaXplIGVycm9yLiIsCisJCSJLZXkgc2l6ZSBlcnJvci4iLAorCQkiUEtIQSBBIG1lbW9yeSBzaXplIGVycm9yLiIsCisJCSJQS0hBIEIgbWVtb3J5IHNpemUgZXJyb3IuIiwKKwkJIkRhdGEgYXJyaXZlZCBvdXQgb2Ygc2VxdWVuY2UgZXJyb3IuIiwKKwkJIlBLSEEgZGl2aWRlLWJ5LXplcm8gZXJyb3IuIiwKKwkJIlBLSEEgbW9kdWx1cyBldmVuIGVycm9yLiIsCisJCSJERVMga2V5IHBhcml0eSBlcnJvci4iLAorCQkiSUNWIGNoZWNrIGZhaWxlZC4iLAorCQkiSGFyZHdhcmUgZXJyb3IuIiwKKwkJIlVuc3VwcG9ydGVkIENDTSBBQUQgc2l6ZS4iLAorCQkiQ2xhc3MgMSBDSEEgaXMgbm90IHJlc2V0IiwKKwkJIkludmFsaWQgQ0hBIGNvbWJpbmF0aW9uIHdhcyBzZWxlY3RlZCIsCisJCSJJbnZhbGlkIENIQSBzZWxlY3RlZC4iLAorCX07CisJdTggY2hhX2lkID0gKHN0YXR1cyAmIEpSU1RBX0NDQkVSUl9DSEFJRF9NQVNLKSA+PgorCQkgICAgSlJTVEFfQ0NCRVJSX0NIQUlEX1NISUZUOworCXU4IGVycl9pZCA9IHN0YXR1cyAmIEpSU1RBX0NDQkVSUl9FUlJJRF9NQVNLOworCisJcmVwb3J0X2p1bXBfaWR4KHN0YXR1cywgb3V0c3RyKTsKKworCWlmIChjaGFfaWQgPCBBUlJBWV9TSVpFKGNoYV9pZF9saXN0KSkgeworCQlTUFJJTlRGQ0FUKG91dHN0ciwgIiVzOiAiLCBjaGFfaWRfbGlzdFtjaGFfaWRdLAorCQkJICAgc3RybGVuKGNoYV9pZF9saXN0W2NoYV9pZF0pKTsKKwl9IGVsc2UgeworCQlTUFJJTlRGQ0FUKG91dHN0ciwgInVuaWRlbnRpZmllZCBjaGFfaWQgdmFsdWUgMHglMDJ4OiAiLAorCQkJICAgY2hhX2lkLCBzaXplb2YoImZmIikpOworCX0KKworCWlmIChlcnJfaWQgPCBBUlJBWV9TSVpFKGVycl9pZF9saXN0KSkgeworCQlTUFJJTlRGQ0FUKG91dHN0ciwgIiVzIiwgZXJyX2lkX2xpc3RbZXJyX2lkXSwKKwkJCSAgIHN0cmxlbihlcnJfaWRfbGlzdFtlcnJfaWRdKSk7CisJfSBlbHNlIHsKKwkJU1BSSU5URkNBVChvdXRzdHIsICJ1bmlkZW50aWZpZWQgZXJyX2lkIHZhbHVlIDB4JTAyeCIsCisJCQkgICBlcnJfaWQsIHNpemVvZigiZmYiKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCByZXBvcnRfanVtcF9zdGF0dXModTMyIHN0YXR1cywgY2hhciAqb3V0c3RyKQoreworCVNQUklOVEZDQVQob3V0c3RyLCAiJXMoKSBub3QgaW1wbGVtZW50ZWQiLCBfX2Z1bmNfXywgc2l6ZW9mKF9fZnVuY19fKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlcG9ydF9kZWNvX3N0YXR1cyh1MzIgc3RhdHVzLCBjaGFyICpvdXRzdHIpCit7CisJY29uc3Qgc3RydWN0IHsKKwkJdTggdmFsdWU7CisJCWNoYXIgKmVycm9yX3RleHQ7CisJfSBkZXNjX2Vycm9yX2xpc3RbXSA9IHsKKwkJeyAweDAwLCAiTm9uZS4gTm8gZXJyb3IuIiB9LAorCQl7IDB4MDEsICJTR1QgTGVuZ3RoIEVycm9yLiBUaGUgZGVzY3JpcHRvciBpcyB0cnlpbmcgdG8gcmVhZCAiCisJCQkibW9yZSBkYXRhIHRoYW4gaXMgY29udGFpbmVkIGluIHRoZSBTR1QgdGFibGUuIiB9LAorCQl7IDB4MDIsICJSZXNlcnZlZC4iIH0sCisJCXsgMHgwMywgIkpvYiBSaW5nIENvbnRyb2wgRXJyb3IuIFRoZXJlIGlzIGEgYmFkIHZhbHVlIGluIHRoZSAiCisJCQkiSm9iIFJpbmcgQ29udHJvbCByZWdpc3Rlci4iIH0sCisJCXsgMHgwNCwgIkludmFsaWQgRGVzY3JpcHRvciBDb21tYW5kLiBUaGUgRGVzY3JpcHRvciBDb21tYW5kICIKKwkJCSJmaWVsZCBpcyBpbnZhbGlkLiIgfSwKKwkJeyAweDA1LCAiUmVzZXJ2ZWQuIiB9LAorCQl7IDB4MDYsICJJbnZhbGlkIEtFWSBDb21tYW5kIiB9LAorCQl7IDB4MDcsICJJbnZhbGlkIExPQUQgQ29tbWFuZCIgfSwKKwkJeyAweDA4LCAiSW52YWxpZCBTVE9SRSBDb21tYW5kIiB9LAorCQl7IDB4MDksICJJbnZhbGlkIE9QRVJBVElPTiBDb21tYW5kIiB9LAorCQl7IDB4MEEsICJJbnZhbGlkIEZJRk8gTE9BRCBDb21tYW5kIiB9LAorCQl7IDB4MEIsICJJbnZhbGlkIEZJRk8gU1RPUkUgQ29tbWFuZCIgfSwKKwkJeyAweDBDLCAiSW52YWxpZCBNT1ZFIENvbW1hbmQiIH0sCisJCXsgMHgwRCwgIkludmFsaWQgSlVNUCBDb21tYW5kLiBBIG5vbmxvY2FsIEpVTVAgQ29tbWFuZCBpcyAiCisJCQkiaW52YWxpZCBiZWNhdXNlIHRoZSB0YXJnZXQgaXMgbm90IGEgSm9iIEhlYWRlciAiCisJCQkiQ29tbWFuZCwgb3IgdGhlIGp1bXAgaXMgZnJvbSBhIFRydXN0ZWQgRGVzY3JpcHRvciB0byAiCisJCQkiYSBKb2IgRGVzY3JpcHRvciwgb3IgYmVjYXVzZSB0aGUgdGFyZ2V0IERlc2NyaXB0b3IgIgorCQkJImNvbnRhaW5zIGEgU2hhcmVkIERlc2NyaXB0b3IuIiB9LAorCQl7IDB4MEUsICJJbnZhbGlkIE1BVEggQ29tbWFuZCIgfSwKKwkJeyAweDBGLCAiSW52YWxpZCBTSUdOQVRVUkUgQ29tbWFuZCIgfSwKKwkJeyAweDEwLCAiSW52YWxpZCBTZXF1ZW5jZSBDb21tYW5kLiBBIFNFUSBJTiBQVFIgT1IgU0VRIE9VVCBQVFIgIgorCQkJIkNvbW1hbmQgaXMgaW52YWxpZCBvciBhIFNFUSBLRVksIFNFUSBMT0FELCBTRVEgRklGTyAiCisJCQkiTE9BRCwgb3IgU0VRIEZJRk8gU1RPUkUgZGVjcmVtZW50ZWQgdGhlIGlucHV0IG9yICIKKwkJCSJvdXRwdXQgc2VxdWVuY2UgbGVuZ3RoIGJlbG93IDAuIFRoaXMgZXJyb3IgbWF5IHJlc3VsdCAiCisJCQkiaWYgYSBidWlsdC1pbiBQUk9UT0NPTCBDb21tYW5kIGhhcyBlbmNvdW50ZXJlZCBhICIKKwkJCSJtYWxmb3JtZWQgUERVLiIgfSwKKwkJeyAweDExLCAiU2tpcCBkYXRhIHR5cGUgaW52YWxpZC4gVGhlIHR5cGUgbXVzdCBiZSAweEUgb3IgMHhGLiJ9LAorCQl7IDB4MTIsICJTaGFyZWQgRGVzY3JpcHRvciBIZWFkZXIgRXJyb3IiIH0sCisJCXsgMHgxMywgIkhlYWRlciBFcnJvci4gSW52YWxpZCBsZW5ndGggb3IgcGFyaXR5LCBvciBjZXJ0YWluICIKKwkJCSJvdGhlciBwcm9ibGVtcy4iIH0sCisJCXsgMHgxNCwgIkJ1cnN0ZXIgRXJyb3IuIEJ1cnN0ZXIgaGFzIGdvdHRlbiB0byBhbiBpbGxlZ2FsICIKKwkJCSJzdGF0ZSIgfSwKKwkJeyAweDE1LCAiQ29udGV4dCBSZWdpc3RlciBMZW5ndGggRXJyb3IuIFRoZSBkZXNjcmlwdG9yIGlzICIKKwkJCSJ0cnlpbmcgdG8gcmVhZCBvciB3cml0ZSBwYXN0IHRoZSBlbmQgb2YgdGhlIENvbnRleHQgIgorCQkJIlJlZ2lzdGVyLiBBIFNFUSBMT0FEIG9yIFNFUSBTVE9SRSB3aXRoIHRoZSBWTEYgYml0ICIKKwkJCSJzZXQgd2FzIGV4ZWN1dGVkIHdpdGggdG9vIGxhcmdlIGEgbGVuZ3RoIGluIHRoZSAiCisJCQkidmFyaWFibGUgbGVuZ3RoIHJlZ2lzdGVyIChWU09MIGZvciBTRVEgU1RPUkUgb3IgVlNJTCAiCisJCQkiZm9yIFNFUSBMT0FEKS4iIH0sCisJCXsgMHgxNiwgIkRNQSBFcnJvciIgfSwKKwkJeyAweDE3LCAiUmVzZXJ2ZWQuIiB9LAorCQl7IDB4MUEsICJKb2IgZmFpbGVkIGR1ZSB0byBKUiByZXNldCIgfSwKKwkJeyAweDFCLCAiSm9iIGZhaWxlZCBkdWUgdG8gRmFpbCBNb2RlIiB9LAorCQl7IDB4MUMsICJERUNPIFdhdGNoZG9nIHRpbWVyIHRpbWVvdXQgZXJyb3IiIH0sCisJCXsgMHgxRCwgIkRFQ08gdHJpZWQgdG8gY29weSBhIGtleSBmcm9tIGFub3RoZXIgREVDTyBidXQgdGhlICIKKwkJCSJvdGhlciBERUNPJ3MgS2V5IFJlZ2lzdGVycyB3ZXJlIGxvY2tlZCIgfSwKKwkJeyAweDFFLCAiREVDTyBhdHRlbXB0ZWQgdG8gY29weSBkYXRhIGZyb20gYSBERUNPIHRoYXQgaGFkIGFuICIKKwkJCSJ1bm1hc2tlZCBEZXNjcmlwdG9yIGVycm9yIiB9LAorCQl7IDB4MUYsICJMSU9ETiBlcnJvci4gREVDTyB3YXMgdHJ5aW5nIHRvIHNoYXJlIGZyb20gaXRzZWxmIG9yICIKKwkJCSJmcm9tIGFub3RoZXIgREVDTyBidXQgdGhlIHR3byBOb24tU0VRIExJT0ROIHZhbHVlcyAiCisJCQkiZGlkbid0IG1hdGNoIG9yIHRoZSAnc2hhcmVkIGZyb20nIERFQ08ncyBEZXNjcmlwdG9yICIKKwkJCSJyZXF1aXJlZCB0aGF0IHRoZSBTRVEgTElPRE5zIGJlIHRoZSBzYW1lIGFuZCB0aGV5ICIKKwkJCSJhcmVuJ3QuIiB9LAorCQl7IDB4MjAsICJERUNPIGhhcyBjb21wbGV0ZWQgYSByZXNldCBpbml0aWF0ZWQgdmlhIHRoZSBEUlIgIgorCQkJInJlZ2lzdGVyIiB9LAorCQl7IDB4MjEsICJOb25jZSBlcnJvci4gV2hlbiB1c2luZyBFS1QgKENDTSkga2V5IGVuY3J5cHRpb24gIgorCQkJIm9wdGlvbiBpbiB0aGUgRklGTyBTVE9SRSBDb21tYW5kLCB0aGUgTm9uY2UgY291bnRlciAiCisJCQkicmVhY2hlZCBpdHMgbWF4aW11bSB2YWx1ZSBhbmQgdGhpcyBlbmNyeXB0aW9uIG1vZGUgIgorCQkJImNhbiBubyBsb25nZXIgYmUgdXNlZC4iIH0sCisJCXsgMHgyMiwgIk1ldGEgZGF0YSBpcyB0b28gbGFyZ2UgKD4gNTExIGJ5dGVzKSBmb3IgVExTIGRlY2FwICIKKwkJCSIoaW5wdXQgZnJhbWU7IGJsb2NrIGNpcGhlcnMpIGFuZCBJUHNlYyBkZWNhcCAob3V0cHV0ICIKKwkJCSJmcmFtZSwgd2hlbiBkb2luZyB0aGUgbmV4dCBoZWFkZXIgYnl0ZSB1cGRhdGUpIGFuZCAiCisJCQkiRENSQyAob3V0cHV0IGZyYW1lKS4iIH0sCisJCXsgMHg4MCwgIkROUiAoZG8gbm90IHJ1bikgZXJyb3IiIH0sCisJCXsgMHg4MSwgInVuZGVmaW5lZCBwcm90b2NvbCBjb21tYW5kIiB9LAorCQl7IDB4ODIsICJpbnZhbGlkIHNldHRpbmcgaW4gUERCIiB9LAorCQl7IDB4ODMsICJBbnRpLXJlcGxheSBMQVRFIGVycm9yIiB9LAorCQl7IDB4ODQsICJBbnRpLXJlcGxheSBSRVBMQVkgZXJyb3IiIH0sCisJCXsgMHg4NSwgIlNlcXVlbmNlIG51bWJlciBvdmVyZmxvdyIgfSwKKwkJeyAweDg2LCAiU2lndmVyIGludmFsaWQgc2lnbmF0dXJlIiB9LAorCQl7IDB4ODcsICJEU0EgU2lnbiBJbGxlZ2FsIHRlc3QgZGVzY3JpcHRvciIgfSwKKwkJeyAweDg4LCAiUHJvdG9jb2wgRm9ybWF0IEVycm9yIC0gQSBwcm90b2NvbCBoYXMgc2VlbiBhbiBlcnJvciAiCisJCQkiaW4gdGhlIGZvcm1hdCBvZiBkYXRhIHJlY2VpdmVkLiBXaGVuIHJ1bm5pbmcgUlNBLCAiCisJCQkidGhpcyBtZWFucyB0aGF0IGZvcm1hdHRpbmcgd2l0aCByYW5kb20gcGFkZGluZyB3YXMgIgorCQkJInVzZWQsIGFuZCBkaWQgbm90IGZvbGxvdyB0aGUgZm9ybTogMHgwMCwgMHgwMiwgOC10by1OICIKKwkJCSJieXRlcyBvZiBub24temVybyBwYWQsIDB4MDAsIEYgZGF0YS4iIH0sCisJCXsgMHg4OSwgIlByb3RvY29sIFNpemUgRXJyb3IgLSBBIHByb3RvY29sIGhhcyBzZWVuIGFuIGVycm9yIGluICIKKwkJCSJzaXplLiBXaGVuIHJ1bm5pbmcgUlNBLCBwZGIgc2l6ZSBOIDwgKHNpemUgb2YgRikgd2hlbiAiCisJCQkibm8gZm9ybWF0dGluZyBpcyB1c2VkOyBvciBwZGIgc2l6ZSBOIDwgKEYgKyAxMSkgd2hlbiAiCisJCQkiZm9ybWF0dGluZyBpcyB1c2VkLiIgfSwKKwkJeyAweEMxLCAiQmxvYiBDb21tYW5kIGVycm9yOiBVbmRlZmluZWQgbW9kZSIgfSwKKwkJeyAweEMyLCAiQmxvYiBDb21tYW5kIGVycm9yOiBTZWN1cmUgTWVtb3J5IEJsb2IgbW9kZSBlcnJvciIgfSwKKwkJeyAweEM0LCAiQmxvYiBDb21tYW5kIGVycm9yOiBCbGFjayBCbG9iIGtleSBvciBpbnB1dCBzaXplICIKKwkJCSJlcnJvciIgfSwKKwkJeyAweEM1LCAiQmxvYiBDb21tYW5kIGVycm9yOiBJbnZhbGlkIGtleSBkZXN0aW5hdGlvbiIgfSwKKwkJeyAweEM4LCAiQmxvYiBDb21tYW5kIGVycm9yOiBUcnVzdGVkL1NlY3VyZSBtb2RlIGVycm9yIiB9LAorCQl7IDB4RjAsICJJUHNlYyBUVEwgb3IgaG9wIGxpbWl0IGZpZWxkIGVpdGhlciBjYW1lIGluIGFzIDAsICIKKwkJCSJvciB3YXMgZGVjcmVtZW50ZWQgdG8gMCIgfSwKKwkJeyAweEYxLCAiM0dQUCBIRk4gbWF0Y2hlcyBvciBleGNlZWRzIHRoZSBUaHJlc2hvbGQiIH0sCisJfTsKKwl1OCBkZXNjX2Vycm9yID0gc3RhdHVzICYgSlJTVEFfREVDT0VSUl9FUlJPUl9NQVNLOworCWludCBpOworCisJcmVwb3J0X2p1bXBfaWR4KHN0YXR1cywgb3V0c3RyKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRlc2NfZXJyb3JfbGlzdCk7IGkrKykKKwkJaWYgKGRlc2NfZXJyb3JfbGlzdFtpXS52YWx1ZSA9PSBkZXNjX2Vycm9yKQorCQkJYnJlYWs7CisKKwlpZiAoaSAhPSBBUlJBWV9TSVpFKGRlc2NfZXJyb3JfbGlzdCkgJiYgZGVzY19lcnJvcl9saXN0W2ldLmVycm9yX3RleHQpIHsKKwkJU1BSSU5URkNBVChvdXRzdHIsICIlcyIsIGRlc2NfZXJyb3JfbGlzdFtpXS5lcnJvcl90ZXh0LAorCQkJICAgc3RybGVuKGRlc2NfZXJyb3JfbGlzdFtpXS5lcnJvcl90ZXh0KSk7CisJfSBlbHNlIHsKKwkJU1BSSU5URkNBVChvdXRzdHIsICJ1bmlkZW50aWZpZWQgZXJyb3IgdmFsdWUgMHglMDJ4IiwKKwkJCSAgIGRlc2NfZXJyb3IsIHNpemVvZigiZmYiKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCByZXBvcnRfanJfc3RhdHVzKHUzMiBzdGF0dXMsIGNoYXIgKm91dHN0cikKK3sKKwlTUFJJTlRGQ0FUKG91dHN0ciwgIiVzKCkgbm90IGltcGxlbWVudGVkIiwgX19mdW5jX18sIHNpemVvZihfX2Z1bmNfXykpOworfQorCitzdGF0aWMgdm9pZCByZXBvcnRfY29uZF9jb2RlX3N0YXR1cyh1MzIgc3RhdHVzLCBjaGFyICpvdXRzdHIpCit7CisJU1BSSU5URkNBVChvdXRzdHIsICIlcygpIG5vdCBpbXBsZW1lbnRlZCIsIF9fZnVuY19fLCBzaXplb2YoX19mdW5jX18pKTsKK30KKworY2hhciAqY2FhbV9qcl9zdHJzdGF0dXMoY2hhciAqb3V0c3RyLCB1MzIgc3RhdHVzKQoreworCXN0cnVjdCBzdGF0X3NyYyB7CisJCXZvaWQgKCpyZXBvcnRfc3NlZCkodTMyIHN0YXR1cywgY2hhciAqb3V0c3RyKTsKKwkJY2hhciAqZXJyb3I7CisJfSBzdGF0dXNfc3JjW10gPSB7CisJCXsgTlVMTCwgIk5vIGVycm9yIiB9LAorCQl7IE5VTEwsIE5VTEwgfSwKKwkJeyByZXBvcnRfY2NiX3N0YXR1cywgIkNDQiIgfSwKKwkJeyByZXBvcnRfanVtcF9zdGF0dXMsICJKdW1wIiB9LAorCQl7IHJlcG9ydF9kZWNvX3N0YXR1cywgIkRFQ08iIH0sCisJCXsgTlVMTCwgTlVMTCB9LAorCQl7IHJlcG9ydF9qcl9zdGF0dXMsICJKb2IgUmluZyIgfSwKKwkJeyByZXBvcnRfY29uZF9jb2RlX3N0YXR1cywgIkNvbmRpdGlvbiBDb2RlIiB9LAorCX07CisJdTMyIHNzcmMgPSBzdGF0dXMgPj4gSlJTVEFfU1NSQ19TSElGVDsKKworCXNwcmludGYob3V0c3RyLCAiJXM6ICIsIHN0YXR1c19zcmNbc3NyY10uZXJyb3IpOworCisJaWYgKHN0YXR1c19zcmNbc3NyY10ucmVwb3J0X3NzZWQpCisJCXN0YXR1c19zcmNbc3NyY10ucmVwb3J0X3NzZWQoc3RhdHVzLCBvdXRzdHIpOworCisJcmV0dXJuIG91dHN0cjsKK30KK0VYUE9SVF9TWU1CT0woY2FhbV9qcl9zdHJzdGF0dXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vY2FhbS9lcnJvci5oIGIvZHJpdmVycy9jcnlwdG8vY2FhbS9lcnJvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYzdiYWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NyeXB0by9jYWFtL2Vycm9yLmgKQEAgLTAsMCArMSwxMSBAQAorLyoKKyAqIENBQU0gRXJyb3IgUmVwb3J0aW5nIGNvZGUgaGVhZGVyCisgKgorICogQ29weXJpZ2h0IDIwMDktMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICovCisKKyNpZm5kZWYgQ0FBTV9FUlJPUl9ICisjZGVmaW5lIENBQU1fRVJST1JfSAorI2RlZmluZSBDQUFNX0VSUk9SX1NUUl9NQVggMzAyCitleHRlcm4gY2hhciAqY2FhbV9qcl9zdHJzdGF0dXMoY2hhciAqb3V0c3RyLCB1MzIgc3RhdHVzKTsKKyNlbmRpZiAvKiBDQUFNX0VSUk9SX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2NhYW0vaW50ZXJuLmggYi9kcml2ZXJzL2NyeXB0by9jYWFtL2ludGVybi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNGJlMDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NyeXB0by9jYWFtL2ludGVybi5oCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ0FBTS9TRUMgNC54IGRyaXZlciBiYWNrZW5kCisgKiBQcml2YXRlL2ludGVybmFsIGRlZmluaXRpb25zIGJldHdlZW4gbW9kdWxlcworICoKKyAqIENvcHlyaWdodCAyMDA4LTIwMTEgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKi8KKworI2lmbmRlZiBJTlRFUk5fSAorI2RlZmluZSBJTlRFUk5fSAorCisjZGVmaW5lIEpPQlJfVU5BU1NJR05FRCAwCisjZGVmaW5lIEpPQlJfQVNTSUdORUQgMQorCisvKiBDdXJyZW50bHkgY29tZXMgZnJvbSBLY29uZmlnIHBhcmFtIGFzIGEgXjIgKGRyaXZlci1yZXF1aXJlZCkgKi8KKyNkZWZpbmUgSk9CUl9ERVBUSCAoMSA8PCBDT05GSUdfQ1JZUFRPX0RFVl9GU0xfQ0FBTV9SSU5HU0laRSkKKworLyogS2NvbmZpZyBwYXJhbXMgZm9yIGludGVycnVwdCBjb2FsZXNjaW5nIGlmIHNlbGVjdGVkIChlbHNlIHplcm8pICovCisjaWZkZWYgQ09ORklHX0NSWVBUT19ERVZfRlNMX0NBQU1fSU5UQworI2RlZmluZSBKT0JSX0lOVEMgSlJDRkdfSUNFTgorI2RlZmluZSBKT0JSX0lOVENfVElNRV9USExEIENPTkZJR19DUllQVE9fREVWX0ZTTF9DQUFNX0lOVENfVElNRV9USExECisjZGVmaW5lIEpPQlJfSU5UQ19DT1VOVF9USExEIENPTkZJR19DUllQVE9fREVWX0ZTTF9DQUFNX0lOVENfQ09VTlRfVEhMRAorI2Vsc2UKKyNkZWZpbmUgSk9CUl9JTlRDIDAKKyNkZWZpbmUgSk9CUl9JTlRDX1RJTUVfVEhMRCAwCisjZGVmaW5lIEpPQlJfSU5UQ19DT1VOVF9USExEIDAKKyNlbmRpZgorCisvKgorICogU3RvcmFnZSBmb3IgdHJhY2tpbmcgZWFjaCBpbi1wcm9jZXNzIGVudHJ5IG1vdmluZyBhY3Jvc3MgYSByaW5nCisgKiBFYWNoIGVudHJ5IG9uIGFuIG91dHB1dCByaW5nIG5lZWRzIG9uZSBvZiB0aGVzZQorICovCitzdHJ1Y3QgY2FhbV9qcmVudHJ5X2luZm8geworCXZvaWQgKCpjYWxsYmspKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyICpkZXNjLCB1MzIgc3RhdHVzLCB2b2lkICphcmcpOworCXZvaWQgKmNia2FyZzsJLyogQXJndW1lbnQgcGVyIHJpbmcgZW50cnkgKi8KKwl1MzIgKmRlc2NfYWRkcl92aXJ0OwkvKiBTdG9yZWQgdmlydCBhZGRyIGZvciBwb3N0cHJvY2Vzc2luZyAqLworCWRtYV9hZGRyX3QgZGVzY19hZGRyX2RtYTsJLyogU3RvcmVkIGJ1cyBhZGRyIGZvciBkb25lIG1hdGNoaW5nICovCisJdTMyIGRlc2Nfc2l6ZTsJLyogU3RvcmVkIHNpemUgZm9yIHBvc3Rwcm9jZXNzaW5nLCBoZWFkZXIgZGVyaXZlZCAqLworfTsKKworLyogUHJpdmF0ZSBzdWItc3RvcmFnZSBmb3IgYSBzaW5nbGUgSm9iUiAqLworc3RydWN0IGNhYW1fZHJ2X3ByaXZhdGVfanIgeworCXN0cnVjdCBkZXZpY2UgKnBhcmVudGRldjsJLyogcG9pbnRzIGJhY2sgdG8gY29udHJvbGxlciBkZXYgKi8KKwlpbnQgcmlkeDsKKwlzdHJ1Y3QgY2FhbV9qb2JfcmluZyBfX2lvbWVtICpycmVnczsJLyogSm9iUidzIHJlZ2lzdGVyIHNwYWNlICovCisJc3RydWN0IHRhc2tsZXRfc3RydWN0IGlycXRhc2tbTlJfQ1BVU107CisJaW50IGlycTsJCQkvKiBPbmUgcGVyIHF1ZXVlICovCisJaW50IGFzc2lnbjsJCQkvKiBidXN5L2ZyZWUgKi8KKworCS8qIEpvYiByaW5nIGluZm8gKi8KKwlpbnQgcmluZ3NpemU7CS8qIFNpemUgb2YgcmluZ3MgKGFzc3VtZSBpbnB1dCA9IG91dHB1dCkgKi8KKwlzdHJ1Y3QgY2FhbV9qcmVudHJ5X2luZm8gKmVudGluZm87CS8qIEFsbG9jJ2VkIDEgcGVyIHJpbmcgZW50cnkgKi8KKwlzcGlubG9ja190IGlucGxvY2sgX19fX2NhY2hlbGluZV9hbGlnbmVkOyAvKiBJbnB1dCByaW5nIGluZGV4IGxvY2sgKi8KKwlpbnQgaW5wX3Jpbmdfd3JpdGVfaW5kZXg7CS8qIElucHV0IGluZGV4ICJ0YWlsIiAqLworCWludCBoZWFkOwkJCS8qIGVudGluZm8gKHMvdyByaW5nKSBoZWFkIGluZGV4ICovCisJZG1hX2FkZHJfdCAqaW5wcmluZzsJLyogQmFzZSBvZiBpbnB1dCByaW5nLCBhbGxvYyBETUEtc2FmZSAqLworCXNwaW5sb2NrX3Qgb3V0bG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWQ7IC8qIE91dHB1dCByaW5nIGluZGV4IGxvY2sgKi8KKwlpbnQgb3V0X3JpbmdfcmVhZF9pbmRleDsJLyogT3V0cHV0IGluZGV4ICJ0YWlsIiAqLworCWludCB0YWlsOwkJCS8qIGVudGluZm8gKHMvdyByaW5nKSB0YWlsIGluZGV4ICovCisJc3RydWN0IGpyX291dGVudHJ5ICpvdXRyaW5nOwkvKiBCYXNlIG9mIG91dHB1dCByaW5nLCBETUEtc2FmZSAqLworfTsKKworLyoKKyAqIERyaXZlci1wcml2YXRlIHN0b3JhZ2UgZm9yIGEgc2luZ2xlIENBQU0gYmxvY2sgaW5zdGFuY2UKKyAqLworc3RydWN0IGNhYW1fZHJ2X3ByaXZhdGUgeworCisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBkZXZpY2UgKipqcmRldjsgLyogQWxsb2MnZWQgYXJyYXkgcGVyIHN1Yi1kZXZpY2UgKi8KKwlzcGlubG9ja190IGpyX2FsbG9jX2xvY2s7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKworCS8qIFBoeXNpY2FsLXByZXNlbmNlIHNlY3Rpb24gKi8KKwlzdHJ1Y3QgY2FhbV9jdHJsICpjdHJsOyAvKiBjb250cm9sbGVyIHJlZ2lvbiAqLworCXN0cnVjdCBjYWFtX2RlY28gKipkZWNvOyAvKiBERUNPL0NDQiB2aWV3cyAqLworCXN0cnVjdCBjYWFtX2Fzc3VyYW5jZSAqYWM7CisJc3RydWN0IGNhYW1fcXVldWVfaWYgKnFpOyAvKiBRSSBjb250cm9sIHJlZ2lvbiAqLworCisJLyoKKwkgKiBEZXRlY3RlZCBnZW9tZXRyeSBibG9jay4gRmlsbGVkIGluIGZyb20gZGV2aWNlIHRyZWUgaWYgcG93ZXJwYywKKwkgKiBvciBmcm9tIHJlZ2lzdGVyLWJhc2VkIHZlcnNpb24gZGV0ZWN0aW9uIGNvZGUKKwkgKi8KKwl1OCB0b3RhbF9qb2JyczsJCS8qIFRvdGFsIEpvYiBSaW5ncyBpbiBkZXZpY2UgKi8KKwl1OCBxaV9wcmVzZW50OwkJLyogTm9uemVybyBpZiBRSSBwcmVzZW50IGluIGRldmljZSAqLworCWludCBzZWN2aW9faXJxOwkJLyogU2VjdXJpdHkgdmlvbGF0aW9uIGludGVycnVwdCBudW1iZXIgKi8KKworCS8qIHdoaWNoIGpyIGFsbG9jYXRlZCB0byBzY2F0dGVybGlzdCBjcnlwdG8gKi8KKwlhdG9taWNfdCB0Zm1fY291bnQgX19fX2NhY2hlbGluZV9hbGlnbmVkOworCWludCBudW1fanJzX2Zvcl9hbGdhcGk7CisJc3RydWN0IGRldmljZSAqKmFsZ2FwaV9qcjsKKwkvKiBsaXN0IG9mIHJlZ2lzdGVyZWQgY3J5cHRvIGFsZ29yaXRobXMgKG1rIGdlbmVyaWMgY29udGV4dCBoYW5kbGU/KSAqLworCXN0cnVjdCBsaXN0X2hlYWQgYWxnX2xpc3Q7CisKKwkvKgorCSAqIGRlYnVnZnMgZW50cmllcyBmb3IgZGV2ZWxvcGVyIHZpZXcgaW50byBkcml2ZXIvZGV2aWNlCisJICogdmFyaWFibGVzIGF0IHJ1bnRpbWUuCisJICovCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisJc3RydWN0IGRlbnRyeSAqZGZzX3Jvb3Q7CisJc3RydWN0IGRlbnRyeSAqY3RsOyAvKiBjb250cm9sbGVyIGRpciAqLworCXN0cnVjdCBkZW50cnkgKmN0bF9ycV9kZXF1ZXVlZCwgKmN0bF9vYl9lbmNfcmVxLCAqY3RsX2liX2RlY19yZXE7CisJc3RydWN0IGRlbnRyeSAqY3RsX29iX2VuY19ieXRlcywgKmN0bF9vYl9wcm90X2J5dGVzOworCXN0cnVjdCBkZW50cnkgKmN0bF9pYl9kZWNfYnl0ZXMsICpjdGxfaWJfdmFsaWRfYnl0ZXM7CisJc3RydWN0IGRlbnRyeSAqY3RsX2ZhdWx0YWRkciwgKmN0bF9mYXVsdGRldGFpbCwgKmN0bF9mYXVsdHN0YXR1czsKKworCXN0cnVjdCBkZWJ1Z2ZzX2Jsb2Jfd3JhcHBlciBjdGxfa2VrX3dyYXAsIGN0bF90a2VrX3dyYXAsIGN0bF90ZHNrX3dyYXA7CisJc3RydWN0IGRlbnRyeSAqY3RsX2tlaywgKmN0bF90a2VrLCAqY3RsX3Rkc2s7CisjZW5kaWYKK307CisKK3ZvaWQgY2FhbV9qcl9hbGdhcGlfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpOwordm9pZCBjYWFtX2pyX2FsZ2FwaV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KTsKKyNlbmRpZiAvKiBJTlRFUk5fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vY2FhbS9qci5jIGIvZHJpdmVycy9jcnlwdG8vY2FhbS9qci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MGZhMzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NyeXB0by9jYWFtL2pyLmMKQEAgLTAsMCArMSw1MTcgQEAKKy8qCisgKiBDQUFNL1NFQyA0LnggdHJhbnNwb3J0L2JhY2tlbmQgZHJpdmVyCisgKiBKb2JSIGJhY2tlbmQgZnVuY3Rpb25hbGl0eQorICoKKyAqIENvcHlyaWdodCAyMDA4LTIwMTEgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqLworCisjaW5jbHVkZSAiY29tcGF0LmgiCisjaW5jbHVkZSAicmVncy5oIgorI2luY2x1ZGUgImpyLmgiCisjaW5jbHVkZSAiZGVzYy5oIgorI2luY2x1ZGUgImludGVybi5oIgorCisvKiBNYWluIHBlci1yaW5nIGludGVycnVwdCBoYW5kbGVyICovCitzdGF0aWMgaXJxcmV0dXJuX3QgY2FhbV9qcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqc3RfZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHN0X2RldjsKKwlzdHJ1Y3QgY2FhbV9kcnZfcHJpdmF0ZV9qciAqanJwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdTMyIGlycXN0YXRlOworCisJLyoKKwkgKiBDaGVjayB0aGUgb3V0cHV0IHJpbmcgZm9yIHJlYWR5IHJlc3BvbnNlcywga2ljaworCSAqIHRhc2tsZXQgaWYgam9icyBkb25lLgorCSAqLworCWlycXN0YXRlID0gcmRfcmVnMzIoJmpycC0+cnJlZ3MtPmpyaW50c3RhdHVzKTsKKwlpZiAoIWlycXN0YXRlKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwkvKgorCSAqIElmIEpvYlIgZXJyb3IsIHdlIGdvdCBtb3JlIGRldmVsb3BtZW50IHdvcmsgdG8gZG8KKwkgKiBGbGFnIGEgYnVnIG5vdywgYnV0IHdlIHJlYWxseSBuZWVkIHRvIHNodXQgZG93biBhbmQKKwkgKiByZXN0YXJ0IHRoZSBxdWV1ZSAoYW5kIGZpeCBjb2RlKS4KKwkgKi8KKwlpZiAoaXJxc3RhdGUgJiBKUklOVF9KUl9FUlJPUikgeworCQlkZXZfZXJyKGRldiwgImpvYiByaW5nIGVycm9yOiBpcnFzdGF0ZTogJTA4eFxuIiwgaXJxc3RhdGUpOworCQlCVUcoKTsKKwl9CisKKwkvKiBtYXNrIHZhbGlkIGludGVycnVwdHMgKi8KKwlzZXRiaXRzMzIoJmpycC0+cnJlZ3MtPnJjb25maWdfbG8sIEpSQ0ZHX0lNU0spOworCisJLyogSGF2ZSB2YWxpZCBpbnRlcnJ1cHQgYXQgdGhpcyBwb2ludCwganVzdCBBQ0sgYW5kIHRyaWdnZXIgKi8KKwl3cl9yZWczMigmanJwLT5ycmVncy0+anJpbnRzdGF0dXMsIGlycXN0YXRlKTsKKworCXByZWVtcHRfZGlzYWJsZSgpOworCXRhc2tsZXRfc2NoZWR1bGUoJmpycC0+aXJxdGFza1tzbXBfcHJvY2Vzc29yX2lkKCldKTsKKwlwcmVlbXB0X2VuYWJsZSgpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKiBEZWZlcnJlZCBzZXJ2aWNlIGhhbmRsZXIsIHJ1biBhcyBpbnRlcnJ1cHQtZmlyZWQgdGFza2xldCAqLworc3RhdGljIHZvaWQgY2FhbV9qcl9kZXF1ZXVlKHVuc2lnbmVkIGxvbmcgZGV2YXJnKQoreworCWludCBod19pZHgsIHN3X2lkeCwgaSwgaGVhZCwgdGFpbDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAoc3RydWN0IGRldmljZSAqKWRldmFyZzsKKwlzdHJ1Y3QgY2FhbV9kcnZfcHJpdmF0ZV9qciAqanJwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdm9pZCAoKnVzZXJjYWxsKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiAqZGVzYywgdTMyIHN0YXR1cywgdm9pZCAqYXJnKTsKKwl1MzIgKnVzZXJkZXNjLCB1c2Vyc3RhdHVzOworCXZvaWQgKnVzZXJhcmc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZqcnAtPm91dGxvY2ssIGZsYWdzKTsKKworCWhlYWQgPSBBQ0NFU1NfT05DRShqcnAtPmhlYWQpOworCXN3X2lkeCA9IHRhaWwgPSBqcnAtPnRhaWw7CisKKwl3aGlsZSAoQ0lSQ19DTlQoaGVhZCwgdGFpbCwgSk9CUl9ERVBUSCkgPj0gMSAmJgorCSAgICAgICByZF9yZWczMigmanJwLT5ycmVncy0+b3V0cmluZ191c2VkKSkgeworCisJCWh3X2lkeCA9IGpycC0+b3V0X3JpbmdfcmVhZF9pbmRleDsKKwkJZm9yIChpID0gMDsgQ0lSQ19DTlQoaGVhZCwgdGFpbCArIGksIEpPQlJfREVQVEgpID49IDE7IGkrKykgeworCQkJc3dfaWR4ID0gKHRhaWwgKyBpKSAmIChKT0JSX0RFUFRIIC0gMSk7CisKKwkJCXNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpOworCisJCQlpZiAoanJwLT5vdXRyaW5nW2h3X2lkeF0uZGVzYyA9PQorCQkJICAgIGpycC0+ZW50aW5mb1tzd19pZHhdLmRlc2NfYWRkcl9kbWEpCisJCQkJYnJlYWs7IC8qIGZvdW5kICovCisJCX0KKwkJLyogd2Ugc2hvdWxkIG5ldmVyIGZhaWwgdG8gZmluZCBhIG1hdGNoaW5nIGRlc2NyaXB0b3IgKi8KKwkJQlVHX09OKENJUkNfQ05UKGhlYWQsIHRhaWwgKyBpLCBKT0JSX0RFUFRIKSA8PSAwKTsKKworCQkvKiBVbm1hcCBqdXN0LXJ1biBkZXNjcmlwdG9yIHNvIHdlIGNhbiBwb3N0LXByb2Nlc3MgKi8KKwkJZG1hX3VubWFwX3NpbmdsZShkZXYsIGpycC0+b3V0cmluZ1tod19pZHhdLmRlc2MsCisJCQkJIGpycC0+ZW50aW5mb1tzd19pZHhdLmRlc2Nfc2l6ZSwKKwkJCQkgRE1BX1RPX0RFVklDRSk7CisKKwkJLyogbWFyayBjb21wbGV0ZWQsIGF2b2lkIG1hdGNoaW5nIG9uIGEgcmVjeWNsZWQgZGVzYyBhZGRyICovCisJCWpycC0+ZW50aW5mb1tzd19pZHhdLmRlc2NfYWRkcl9kbWEgPSAwOworCisJCS8qIFN0YXNoIGNhbGxiYWNrIHBhcmFtcyBmb3IgdXNlIG91dHNpZGUgb2YgbG9jayAqLworCQl1c2VyY2FsbCA9IGpycC0+ZW50aW5mb1tzd19pZHhdLmNhbGxiazsKKwkJdXNlcmFyZyA9IGpycC0+ZW50aW5mb1tzd19pZHhdLmNia2FyZzsKKwkJdXNlcmRlc2MgPSBqcnAtPmVudGluZm9bc3dfaWR4XS5kZXNjX2FkZHJfdmlydDsKKwkJdXNlcnN0YXR1cyA9IGpycC0+b3V0cmluZ1tod19pZHhdLmpyc3RhdHVzOworCisJCXNtcF9tYigpOworCisJCWpycC0+b3V0X3JpbmdfcmVhZF9pbmRleCA9IChqcnAtPm91dF9yaW5nX3JlYWRfaW5kZXggKyAxKSAmCisJCQkJCSAgIChKT0JSX0RFUFRIIC0gMSk7CisKKwkJLyoKKwkJICogaWYgdGhpcyBqb2IgY29tcGxldGVkIG91dC1vZi1vcmRlciwgZG8gbm90IGluY3JlbWVudAorCQkgKiB0aGUgdGFpbC4gIE90aGVyd2lzZSwgaW5jcmVtZW50IHRhaWwgYnkgMSBwbHVzIHRoZQorCQkgKiBudW1iZXIgb2Ygc3Vic2VxdWVudCBqb2JzIGFscmVhZHkgY29tcGxldGVkIG91dC1vZi1vcmRlcgorCQkgKi8KKwkJaWYgKHN3X2lkeCA9PSB0YWlsKSB7CisJCQlkbyB7CisJCQkJdGFpbCA9ICh0YWlsICsgMSkgJiAoSk9CUl9ERVBUSCAtIDEpOworCQkJCXNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpOworCQkJfSB3aGlsZSAoQ0lSQ19DTlQoaGVhZCwgdGFpbCwgSk9CUl9ERVBUSCkgPj0gMSAmJgorCQkJCSBqcnAtPmVudGluZm9bdGFpbF0uZGVzY19hZGRyX2RtYSA9PSAwKTsKKworCQkJanJwLT50YWlsID0gdGFpbDsKKwkJfQorCisJCS8qIHNldCBkb25lICovCisJCXdyX3JlZzMyKCZqcnAtPnJyZWdzLT5vdXRyaW5nX3JtdmQsIDEpOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmpycC0+b3V0bG9jaywgZmxhZ3MpOworCisJCS8qIEZpbmFsbHksIGV4ZWN1dGUgdXNlcidzIGNhbGxiYWNrICovCisJCXVzZXJjYWxsKGRldiwgdXNlcmRlc2MsIHVzZXJzdGF0dXMsIHVzZXJhcmcpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZqcnAtPm91dGxvY2ssIGZsYWdzKTsKKworCQloZWFkID0gQUNDRVNTX09OQ0UoanJwLT5oZWFkKTsKKwkJc3dfaWR4ID0gdGFpbCA9IGpycC0+dGFpbDsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZqcnAtPm91dGxvY2ssIGZsYWdzKTsKKworCS8qIHJlZW5hYmxlIC8gdW5tYXNrIElSUXMgKi8KKwljbHJiaXRzMzIoJmpycC0+cnJlZ3MtPnJjb25maWdfbG8sIEpSQ0ZHX0lNU0spOworfQorCisvKioKKyAqIGNhYW1fanJfcmVnaXN0ZXIoKSAtIEFsbG9jIGEgcmluZyBmb3Igc29tZW9uZSB0byB1c2UgYXMgbmVlZGVkLiBSZXR1cm5zCisgKiBhbiBvcmRpbmFsIG9mIHRoZSByaW5ncyBhbGxvY2F0ZWQsIGVsc2UgcmV0dXJucyAtRU5PREVWIGlmIG5vIHJpbmdzCisgKiBhcmUgYXZhaWxhYmxlLgorICogQGN0cmxkZXY6IHBvaW50cyB0byB0aGUgY29udHJvbGxlciBsZXZlbCBkZXYgKHBhcmVudCkgdGhhdAorICogICAgICAgICAgIG93bnMgcmluZ3MgYXZhaWxhYmxlIGZvciB1c2UuCisgKiBAZGV2OiAgICAgcG9pbnRzIHRvIHdoZXJlIGEgcG9pbnRlciB0byB0aGUgbmV3bHkgYWxsb2NhdGVkIHF1ZXVlJ3MKKyAqICAgICAgICAgICBkZXYgY2FuIGJlIHdyaXR0ZW4gdG8gaWYgc3VjY2Vzc2Z1bC4KKyAqKi8KK2ludCBjYWFtX2pyX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmN0cmxkZXYsIHN0cnVjdCBkZXZpY2UgKipyZGV2KQoreworCXN0cnVjdCBjYWFtX2Rydl9wcml2YXRlICpjdHJscHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShjdHJsZGV2KTsKKwlzdHJ1Y3QgY2FhbV9kcnZfcHJpdmF0ZV9qciAqanJwcml2ID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByaW5nOworCisJLyogTG9jaywgaWYgZnJlZSByaW5nIC0gYXNzaWduLCB1bmxvY2sgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3RybHByaXYtPmpyX2FsbG9jX2xvY2ssIGZsYWdzKTsKKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgY3RybHByaXYtPnRvdGFsX2pvYnJzOyByaW5nKyspIHsKKwkJanJwcml2ID0gZGV2X2dldF9kcnZkYXRhKGN0cmxwcml2LT5qcmRldltyaW5nXSk7CisJCWlmIChqcnByaXYtPmFzc2lnbiA9PSBKT0JSX1VOQVNTSUdORUQpIHsKKwkJCWpycHJpdi0+YXNzaWduID0gSk9CUl9BU1NJR05FRDsKKwkJCSpyZGV2ID0gY3RybHByaXYtPmpyZGV2W3JpbmddOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3RybHByaXYtPmpyX2FsbG9jX2xvY2ssIGZsYWdzKTsKKwkJCXJldHVybiByaW5nOworCQl9CisJfQorCisJLyogSWYgYXNzaWduZWQsIHdyaXRlIGRldiB3aGVyZSBjYWxsZXIgbmVlZHMgaXQgKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHJscHJpdi0+anJfYWxsb2NfbG9jaywgZmxhZ3MpOworCSpyZGV2ID0gTlVMTDsKKworCXJldHVybiAtRU5PREVWOworfQorRVhQT1JUX1NZTUJPTChjYWFtX2pyX3JlZ2lzdGVyKTsKKworLyoqCisgKiBjYWFtX2pyX2RlcmVnaXN0ZXIoKSAtIERlcmVnaXN0ZXIgYW4gQVBJIGFuZCByZWxlYXNlIHRoZSBxdWV1ZS4KKyAqIFJldHVybnMgMCBpZiBPSywgLUVCVVNZIGlmIHF1ZXVlIHN0aWxsIGNvbnRhaW5zIHBlbmRpbmcgZW50cmllcworICogb3IgdW5wcm9jZXNzZWQgcmVzdWx0cyBhdCB0aGUgdGltZSBvZiB0aGUgY2FsbAorICogQGRldiAgICAgLSBwb2ludHMgdG8gdGhlIGRldiB0aGF0IGlkZW50aWZpZXMgdGhlIHF1ZXVlIHRvCisgKiAgICAgICAgICAgIGJlIHJlbGVhc2VkLgorICoqLworaW50IGNhYW1fanJfZGVyZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpyZGV2KQoreworCXN0cnVjdCBjYWFtX2Rydl9wcml2YXRlX2pyICpqcnByaXYgPSBkZXZfZ2V0X2RydmRhdGEocmRldik7CisJc3RydWN0IGNhYW1fZHJ2X3ByaXZhdGUgKmN0cmxwcml2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBHZXQgdGhlIG93bmluZyBjb250cm9sbGVyJ3MgcHJpdmF0ZSBzcGFjZSAqLworCWN0cmxwcml2ID0gZGV2X2dldF9kcnZkYXRhKGpycHJpdi0+cGFyZW50ZGV2KTsKKworCS8qCisJICogTWFrZSBzdXJlIHJpbmcgZW1wdHkgYmVmb3JlIHJlbGVhc2UKKwkgKi8KKwlpZiAocmRfcmVnMzIoJmpycHJpdi0+cnJlZ3MtPm91dHJpbmdfdXNlZCkgfHwKKwkgICAgKHJkX3JlZzMyKCZqcnByaXYtPnJyZWdzLT5pbnByaW5nX2F2YWlsKSAhPSBKT0JSX0RFUFRIKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIFJlbGVhc2UgcmluZyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZjdHJscHJpdi0+anJfYWxsb2NfbG9jaywgZmxhZ3MpOworCWpycHJpdi0+YXNzaWduID0gSk9CUl9VTkFTU0lHTkVEOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0cmxwcml2LT5qcl9hbGxvY19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woY2FhbV9qcl9kZXJlZ2lzdGVyKTsKKworLyoqCisgKiBjYWFtX2pyX2VucXVldWUoKSAtIEVucXVldWUgYSBqb2IgZGVzY3JpcHRvciBoZWFkLiBSZXR1cm5zIDAgaWYgT0ssCisgKiAtRUJVU1kgaWYgdGhlIHF1ZXVlIGlzIGZ1bGwsIC1FSU8gaWYgaXQgY2Fubm90IG1hcCB0aGUgY2FsbGVyJ3MKKyAqIGRlc2NyaXB0b3IuCisgKiBAZGV2OiAgZGV2aWNlIG9mIHRoZSBqb2IgcmluZyB0byBiZSB1c2VkLiBUaGlzIGRldmljZSBzaG91bGQgaGF2ZQorICogICAgICAgIGJlZW4gYXNzaWduZWQgcHJpb3IgYnkgY2FhbV9qcl9yZWdpc3RlcigpLgorICogQGRlc2M6IHBvaW50cyB0byBhIGpvYiBkZXNjcmlwdG9yIHRoYXQgZXhlY3V0ZSBvdXIgcmVxdWVzdC4gQWxsCisgKiAgICAgICAgZGVzY3JpcHRvcnMgKGFuZCBhbGwgcmVmZXJlbmNlZCBkYXRhKSBtdXN0IGJlIGluIGEgRE1BYWJsZQorICogICAgICAgIHJlZ2lvbiwgYW5kIGFsbCBkYXRhIHJlZmVyZW5jZXMgbXVzdCBiZSBwaHlzaWNhbCBhZGRyZXNzZXMKKyAqICAgICAgICBhY2Nlc3NpYmxlIHRvIENBQU0gKGkuZS4gd2l0aGluIGEgUEFNVSB3aW5kb3cgZ3JhbnRlZAorICogICAgICAgIHRvIGl0KS4KKyAqIEBjYms6ICBwb2ludGVyIHRvIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgaW52b2tlZCB1cG9uIGNvbXBsZXRpb24KKyAqICAgICAgICBvZiB0aGlzIHJlcXVlc3QuIFRoaXMgaGFzIHRoZSBmb3JtOgorICogICAgICAgIGNhbGxiYWNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyICpkZXNjLCB1MzIgc3RhdCwgdm9pZCAqYXJnKQorICogICAgICAgIHdoZXJlOgorICogICAgICAgIEBkZXY6ICAgIGNvbnRhaW5zIHRoZSBqb2IgcmluZyBkZXZpY2UgdGhhdCBwcm9jZXNzZWQgdGhpcworICogICAgICAgICAgICAgICAgIHJlc3BvbnNlLgorICogICAgICAgIEBkZXNjOiAgIGRlc2NyaXB0b3IgdGhhdCBpbml0aWF0ZWQgdGhlIHJlcXVlc3QsIHNhbWUgYXMKKyAqICAgICAgICAgICAgICAgICAiZGVzYyIgYmVpbmcgYXJndWVkIHRvIGNhYW1fanJfZW5xdWV1ZSgpLgorICogICAgICAgIEBzdGF0dXM6IHVudHJhbnNsYXRlZCBzdGF0dXMgcmVjZWl2ZWQgZnJvbSBDQUFNLiBTZWUgdGhlCisgKiAgICAgICAgICAgICAgICAgcmVmZXJlbmNlIG1hbnVhbCBmb3IgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZgorICogICAgICAgICAgICAgICAgIGVycm9yIG1lYW5pbmcsIG9yIHNlZSB0aGUgSlJTVEEgZGVmaW5pdGlvbnMgaW4gdGhlCisgKiAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgaGVhZGVyIGZpbGUKKyAqICAgICAgICBAYXJlcTogICBvcHRpb25hbCBwb2ludGVyIHRvIGFuIGFyZ3VtZW50IHBhc3NlZCB3aXRoIHRoZQorICogICAgICAgICAgICAgICAgIG9yaWdpbmFsIHJlcXVlc3QKKyAqIEBhcmVxOiBvcHRpb25hbCBwb2ludGVyIHRvIGEgdXNlciBhcmd1bWVudCBmb3IgdXNlIGF0IGNhbGxiYWNrCisgKiAgICAgICAgdGltZS4KKyAqKi8KK2ludCBjYWFtX2pyX2VucXVldWUoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgKmRlc2MsCisJCSAgICB2b2lkICgqY2JrKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiAqZGVzYywKKwkJCQl1MzIgc3RhdHVzLCB2b2lkICphcmVxKSwKKwkJICAgIHZvaWQgKmFyZXEpCit7CisJc3RydWN0IGNhYW1fZHJ2X3ByaXZhdGVfanIgKmpycCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBjYWFtX2pyZW50cnlfaW5mbyAqaGVhZF9lbnRyeTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBoZWFkLCB0YWlsLCBkZXNjX3NpemU7CisJZG1hX2FkZHJfdCBkZXNjX2RtYTsKKworCWRlc2Nfc2l6ZSA9ICgqZGVzYyAmIEhEUl9KRF9MRU5HVEhfTUFTSykgKiBzaXplb2YodTMyKTsKKwlkZXNjX2RtYSA9IGRtYV9tYXBfc2luZ2xlKGRldiwgZGVzYywgZGVzY19zaXplLCBETUFfVE9fREVWSUNFKTsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGV2LCBkZXNjX2RtYSkpIHsKKwkJZGV2X2VycihkZXYsICJjYWFtX2pyX2VucXVldWUoKTogY2FuJ3QgbWFwIGpvYmRlc2NcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmanJwLT5pbnBsb2NrLCBmbGFncyk7CisKKwloZWFkID0ganJwLT5oZWFkOworCXRhaWwgPSBBQ0NFU1NfT05DRShqcnAtPnRhaWwpOworCisJaWYgKCFyZF9yZWczMigmanJwLT5ycmVncy0+aW5wcmluZ19hdmFpbCkgfHwKKwkgICAgQ0lSQ19TUEFDRShoZWFkLCB0YWlsLCBKT0JSX0RFUFRIKSA8PSAwKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmpycC0+aW5wbG9jaywgZmxhZ3MpOworCQlkbWFfdW5tYXBfc2luZ2xlKGRldiwgZGVzY19kbWEsIGRlc2Nfc2l6ZSwgRE1BX1RPX0RFVklDRSk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaGVhZF9lbnRyeSA9ICZqcnAtPmVudGluZm9baGVhZF07CisJaGVhZF9lbnRyeS0+ZGVzY19hZGRyX3ZpcnQgPSBkZXNjOworCWhlYWRfZW50cnktPmRlc2Nfc2l6ZSA9IGRlc2Nfc2l6ZTsKKwloZWFkX2VudHJ5LT5jYWxsYmsgPSAodm9pZCAqKWNiazsKKwloZWFkX2VudHJ5LT5jYmthcmcgPSBhcmVxOworCWhlYWRfZW50cnktPmRlc2NfYWRkcl9kbWEgPSBkZXNjX2RtYTsKKworCWpycC0+aW5wcmluZ1tqcnAtPmlucF9yaW5nX3dyaXRlX2luZGV4XSA9IGRlc2NfZG1hOworCisJc21wX3dtYigpOworCisJanJwLT5pbnBfcmluZ193cml0ZV9pbmRleCA9IChqcnAtPmlucF9yaW5nX3dyaXRlX2luZGV4ICsgMSkgJgorCQkJCSAgICAoSk9CUl9ERVBUSCAtIDEpOworCWpycC0+aGVhZCA9IChoZWFkICsgMSkgJiAoSk9CUl9ERVBUSCAtIDEpOworCisJd21iKCk7CisKKwl3cl9yZWczMigmanJwLT5ycmVncy0+aW5wcmluZ19qb2JhZGQsIDEpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmanJwLT5pbnBsb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woY2FhbV9qcl9lbnF1ZXVlKTsKKworc3RhdGljIGludCBjYWFtX3Jlc2V0X2h3X2pyKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgY2FhbV9kcnZfcHJpdmF0ZV9qciAqanJwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgaW50IHRpbWVvdXQgPSAxMDAwMDA7CisKKwkvKgorCSAqIG1hc2sgaW50ZXJydXB0cyBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8gcG9sbAorCSAqIGZvciByZXNldCBjb21wbGV0aW9uIHN0YXR1cworCSAqLworCXNldGJpdHMzMigmanJwLT5ycmVncy0+cmNvbmZpZ19sbywgSlJDRkdfSU1TSyk7CisKKwkvKiBpbml0aWF0ZSBmbHVzaCAocmVxdWlyZWQgcHJpb3IgdG8gcmVzZXQpICovCisJd3JfcmVnMzIoJmpycC0+cnJlZ3MtPmpyY29tbWFuZCwgSlJDUl9SRVNFVCk7CisJd2hpbGUgKCgocmRfcmVnMzIoJmpycC0+cnJlZ3MtPmpyaW50c3RhdHVzKSAmIEpSSU5UX0VSUl9IQUxUX01BU0spID09CisJCUpSSU5UX0VSUl9IQUxUX0lOUFJPR1JFU1MpICYmIC0tdGltZW91dCkKKwkJY3B1X3JlbGF4KCk7CisKKwlpZiAoKHJkX3JlZzMyKCZqcnAtPnJyZWdzLT5qcmludHN0YXR1cykgJiBKUklOVF9FUlJfSEFMVF9NQVNLKSAhPQorCSAgICBKUklOVF9FUlJfSEFMVF9DT01QTEVURSB8fCB0aW1lb3V0ID09IDApIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZmx1c2ggam9iIHJpbmcgJWRcbiIsIGpycC0+cmlkeCk7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIGluaXRpYXRlIHJlc2V0ICovCisJdGltZW91dCA9IDEwMDAwMDsKKwl3cl9yZWczMigmanJwLT5ycmVncy0+anJjb21tYW5kLCBKUkNSX1JFU0VUKTsKKwl3aGlsZSAoKHJkX3JlZzMyKCZqcnAtPnJyZWdzLT5qcmNvbW1hbmQpICYgSlJDUl9SRVNFVCkgJiYgLS10aW1lb3V0KQorCQljcHVfcmVsYXgoKTsKKworCWlmICh0aW1lb3V0ID09IDApIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVzZXQgam9iIHJpbmcgJWRcbiIsIGpycC0+cmlkeCk7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIHVubWFzayBpbnRlcnJ1cHRzICovCisJY2xyYml0czMyKCZqcnAtPnJyZWdzLT5yY29uZmlnX2xvLCBKUkNGR19JTVNLKTsKKworCXJldHVybiAwOworfQorCisvKgorICogSW5pdCBKb2JSIGluZGVwZW5kZW50IG9mIHBsYXRmb3JtIHByb3BlcnR5IGRldGVjdGlvbgorICovCitzdGF0aWMgaW50IGNhYW1fanJfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGNhYW1fZHJ2X3ByaXZhdGVfanIgKmpycDsKKwlkbWFfYWRkcl90IGlucGJ1c2FkZHIsIG91dGJ1c2FkZHI7CisJaW50IGksIGVycm9yOworCisJanJwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwkvKiBDb25uZWN0IGpvYiByaW5nIGludGVycnVwdCBoYW5kbGVyLiAqLworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQorCQl0YXNrbGV0X2luaXQoJmpycC0+aXJxdGFza1tpXSwgY2FhbV9qcl9kZXF1ZXVlLAorCQkJICAgICAodW5zaWduZWQgbG9uZylkZXYpOworCisJZXJyb3IgPSByZXF1ZXN0X2lycShqcnAtPmlycSwgY2FhbV9qcl9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAorCQkJICAgICJjYWFtLWpvYnIiLCBkZXYpOworCWlmIChlcnJvcikgeworCQlkZXZfZXJyKGRldiwgImNhbid0IGNvbm5lY3QgSm9iUiAlZCBpbnRlcnJ1cHQgKCVkKVxuIiwKKwkJCWpycC0+cmlkeCwganJwLT5pcnEpOworCQlpcnFfZGlzcG9zZV9tYXBwaW5nKGpycC0+aXJxKTsKKwkJanJwLT5pcnEgPSAwOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwllcnJvciA9IGNhYW1fcmVzZXRfaHdfanIoZGV2KTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCWpycC0+aW5wcmluZyA9IGt6YWxsb2Moc2l6ZW9mKGRtYV9hZGRyX3QpICogSk9CUl9ERVBUSCwKKwkJCSAgICAgICBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisJanJwLT5vdXRyaW5nID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGpyX291dGVudHJ5KSAqCisJCQkgICAgICAgSk9CUl9ERVBUSCwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOworCisJanJwLT5lbnRpbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNhYW1fanJlbnRyeV9pbmZvKSAqIEpPQlJfREVQVEgsCisJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisKKwlpZiAoKGpycC0+aW5wcmluZyA9PSBOVUxMKSB8fCAoanJwLT5vdXRyaW5nID09IE5VTEwpIHx8CisJICAgIChqcnAtPmVudGluZm8gPT0gTlVMTCkpIHsKKwkJZGV2X2VycihkZXYsICJjYW4ndCBhbGxvY2F0ZSBqb2IgcmluZ3MgZm9yICVkXG4iLAorCQkJanJwLT5yaWR4KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZm9yIChpID0gMDsgaSA8IEpPQlJfREVQVEg7IGkrKykKKwkJanJwLT5lbnRpbmZvW2ldLmRlc2NfYWRkcl9kbWEgPSAhMDsKKworCS8qIFNldHVwIHJpbmdzICovCisJaW5wYnVzYWRkciA9IGRtYV9tYXBfc2luZ2xlKGRldiwganJwLT5pbnByaW5nLAorCQkJCSAgICBzaXplb2YodTMyICopICogSk9CUl9ERVBUSCwKKwkJCQkgICAgRE1BX0JJRElSRUNUSU9OQUwpOworCWlmIChkbWFfbWFwcGluZ19lcnJvcihkZXYsIGlucGJ1c2FkZHIpKSB7CisJCWRldl9lcnIoZGV2LCAiY2FhbV9qcl9pbml0KCk6IGNhbid0IG1hcCBpbnB1dCByaW5nXG4iKTsKKwkJa2ZyZWUoanJwLT5pbnByaW5nKTsKKwkJa2ZyZWUoanJwLT5vdXRyaW5nKTsKKwkJa2ZyZWUoanJwLT5lbnRpbmZvKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJb3V0YnVzYWRkciA9IGRtYV9tYXBfc2luZ2xlKGRldiwganJwLT5vdXRyaW5nLAorCQkJCSAgICBzaXplb2Yoc3RydWN0IGpyX291dGVudHJ5KSAqIEpPQlJfREVQVEgsCisJCQkJICAgIERNQV9CSURJUkVDVElPTkFMKTsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGV2LCBvdXRidXNhZGRyKSkgeworCQlkZXZfZXJyKGRldiwgImNhYW1fanJfaW5pdCgpOiBjYW4ndCBtYXAgb3V0cHV0IHJpbmdcbiIpOworCQkJZG1hX3VubWFwX3NpbmdsZShkZXYsIGlucGJ1c2FkZHIsCisJCQkJCSBzaXplb2YodTMyICopICogSk9CUl9ERVBUSCwKKwkJCQkJIERNQV9CSURJUkVDVElPTkFMKTsKKwkJa2ZyZWUoanJwLT5pbnByaW5nKTsKKwkJa2ZyZWUoanJwLT5vdXRyaW5nKTsKKwkJa2ZyZWUoanJwLT5lbnRpbmZvKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJanJwLT5pbnBfcmluZ193cml0ZV9pbmRleCA9IDA7CisJanJwLT5vdXRfcmluZ19yZWFkX2luZGV4ID0gMDsKKwlqcnAtPmhlYWQgPSAwOworCWpycC0+dGFpbCA9IDA7CisKKwl3cl9yZWc2NCgmanJwLT5ycmVncy0+aW5wcmluZ19iYXNlLCBpbnBidXNhZGRyKTsKKwl3cl9yZWc2NCgmanJwLT5ycmVncy0+b3V0cmluZ19iYXNlLCBvdXRidXNhZGRyKTsKKwl3cl9yZWczMigmanJwLT5ycmVncy0+aW5wcmluZ19zaXplLCBKT0JSX0RFUFRIKTsKKwl3cl9yZWczMigmanJwLT5ycmVncy0+b3V0cmluZ19zaXplLCBKT0JSX0RFUFRIKTsKKworCWpycC0+cmluZ3NpemUgPSBKT0JSX0RFUFRIOworCisJc3Bpbl9sb2NrX2luaXQoJmpycC0+aW5wbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmpycC0+b3V0bG9jayk7CisKKwkvKiBTZWxlY3QgaW50ZXJydXB0IGNvYWxlc2NpbmcgcGFyYW1ldGVycyAqLworCXNldGJpdHMzMigmanJwLT5ycmVncy0+cmNvbmZpZ19sbywgSk9CUl9JTlRDIHwKKwkJICAoSk9CUl9JTlRDX0NPVU5UX1RITEQgPDwgSlJDRkdfSUNEQ1RfU0hJRlQpIHwKKwkJICAoSk9CUl9JTlRDX1RJTUVfVEhMRCA8PCBKUkNGR19JQ1RUX1NISUZUKSk7CisKKwlqcnAtPmFzc2lnbiA9IEpPQlJfVU5BU1NJR05FRDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNodXRkb3duIEpvYlIgaW5kZXBlbmRlbnQgb2YgcGxhdGZvcm0gcHJvcGVydHkgY29kZQorICovCitpbnQgY2FhbV9qcl9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGNhYW1fZHJ2X3ByaXZhdGVfanIgKmpycCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWRtYV9hZGRyX3QgaW5wYnVzYWRkciwgb3V0YnVzYWRkcjsKKwlpbnQgcmV0LCBpOworCisJcmV0ID0gY2FhbV9yZXNldF9od19qcihkZXYpOworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCisJCXRhc2tsZXRfa2lsbCgmanJwLT5pcnF0YXNrW2ldKTsKKworCS8qIFJlbGVhc2UgaW50ZXJydXB0ICovCisJZnJlZV9pcnEoanJwLT5pcnEsIGRldik7CisKKwkvKiBGcmVlIHJpbmdzICovCisJaW5wYnVzYWRkciA9IHJkX3JlZzY0KCZqcnAtPnJyZWdzLT5pbnByaW5nX2Jhc2UpOworCW91dGJ1c2FkZHIgPSByZF9yZWc2NCgmanJwLT5ycmVncy0+b3V0cmluZ19iYXNlKTsKKwlkbWFfdW5tYXBfc2luZ2xlKGRldiwgb3V0YnVzYWRkciwKKwkJCSBzaXplb2Yoc3RydWN0IGpyX291dGVudHJ5KSAqIEpPQlJfREVQVEgsCisJCQkgRE1BX0JJRElSRUNUSU9OQUwpOworCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBpbnBidXNhZGRyLCBzaXplb2YodTMyICopICogSk9CUl9ERVBUSCwKKwkJCSBETUFfQklESVJFQ1RJT05BTCk7CisJa2ZyZWUoanJwLT5vdXRyaW5nKTsKKwlrZnJlZShqcnAtPmlucHJpbmcpOworCWtmcmVlKGpycC0+ZW50aW5mbyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUHJvYmUgcm91dGluZSBmb3IgZWFjaCBkZXRlY3RlZCBKb2JSIHN1YnN5c3RlbS4gSXQgYXNzdW1lcyB0aGF0CisgKiBwcm9wZXJ0eSBkZXRlY3Rpb24gd2FzIHBpY2tlZCB1cCBleHRlcm5hbGx5LgorICovCitpbnQgY2FhbV9qcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkgIGludCByaW5nKQoreworCXN0cnVjdCBkZXZpY2UgKmN0cmxkZXYsICpqcmRldjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpqcl9wZGV2OworCXN0cnVjdCBjYWFtX2Rydl9wcml2YXRlICpjdHJscHJpdjsKKwlzdHJ1Y3QgY2FhbV9kcnZfcHJpdmF0ZV9qciAqanJwcml2OworCXUzMiAqanJvZmZzZXQ7CisJaW50IGVycm9yOworCisJY3RybGRldiA9ICZwZGV2LT5kZXY7CisJY3RybHByaXYgPSBkZXZfZ2V0X2RydmRhdGEoY3RybGRldik7CisKKwlqcnByaXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2FhbV9kcnZfcHJpdmF0ZV9qciksCisJCQkgR0ZQX0tFUk5FTCk7CisJaWYgKGpycHJpdiA9PSBOVUxMKSB7CisJCWRldl9lcnIoY3RybGRldiwgImNhbid0IGFsbG9jIHByaXZhdGUgbWVtIGZvciBqb2IgcmluZyAlZFxuIiwKKwkJCXJpbmcpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJanJwcml2LT5wYXJlbnRkZXYgPSBjdHJsZGV2OyAvKiBwb2ludCBiYWNrIHRvIHBhcmVudCAqLworCWpycHJpdi0+cmlkeCA9IHJpbmc7IC8qIHNhdmUgcmluZyBpZGVudGl0eSByZWxhdGl2ZSB0byBkZXRlY3Rpb24gKi8KKworCS8qCisJICogRGVyaXZlIGEgcG9pbnRlciB0byB0aGUgZGV0ZWN0ZWQgSm9iUnMgcmVncworCSAqIERyaXZlciBoYXMgYWxyZWFkeSBpb21hcHBlZCB0aGUgZW50aXJlIHNwYWNlLCB3ZSBqdXN0CisJICogbmVlZCB0byBhZGQgaW4gdGhlIG9mZnNldCB0byB0aGlzIEpvYlIuIERvbid0IGtub3cgaWYgSQorCSAqIGxpa2UgdGhpcyBsb25nLXRlcm0sIGJ1dCBpdCdsbCBydW4KKwkgKi8KKwlqcm9mZnNldCA9ICh1MzIgKilvZl9nZXRfcHJvcGVydHkobnAsICJyZWciLCBOVUxMKTsKKwlqcnByaXYtPnJyZWdzID0gKHN0cnVjdCBjYWFtX2pvYl9yaW5nIF9faW9tZW0gKikoKHZvaWQgKiljdHJscHJpdi0+Y3RybAorCQkJCQkJCSArICpqcm9mZnNldCk7CisKKwkvKiBCdWlsZCBhIGxvY2FsIGRldiBmb3IgZWFjaCBkZXRlY3RlZCBxdWV1ZSAqLworCWpyX3BkZXYgPSBvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlKG5wLCBOVUxMLCBjdHJsZGV2KTsKKwlpZiAoanJfcGRldiA9PSBOVUxMKSB7CisJCWtmcmVlKGpycHJpdik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlqcmRldiA9ICZqcl9wZGV2LT5kZXY7CisJZGV2X3NldF9kcnZkYXRhKGpyZGV2LCBqcnByaXYpOworCWN0cmxwcml2LT5qcmRldltyaW5nXSA9IGpyZGV2OworCisJLyogSWRlbnRpZnkgdGhlIGludGVycnVwdCAqLworCWpycHJpdi0+aXJxID0gb2ZfaXJxX3RvX3Jlc291cmNlKG5wLCAwLCBOVUxMKTsKKworCS8qIE5vdyBkbyB0aGUgcGxhdGZvcm0gaW5kZXBlbmRlbnQgcGFydCAqLworCWVycm9yID0gY2FhbV9qcl9pbml0KGpyZGV2KTsgLyogbm93IHR1cm4gb24gaGFyZHdhcmUgKi8KKwlpZiAoZXJyb3IpIHsKKwkJa2ZyZWUoanJwcml2KTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCXJldHVybiBlcnJvcjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2NhYW0vanIuaCBiL2RyaXZlcnMvY3J5cHRvL2NhYW0vanIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjNkZjM5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jcnlwdG8vY2FhbS9qci5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDQUFNIHB1YmxpYy1sZXZlbCBpbmNsdWRlIGRlZmluaXRpb25zIGZvciB0aGUgSm9iUiBiYWNrZW5kCisgKgorICogQ29weXJpZ2h0IDIwMDgtMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICovCisKKyNpZm5kZWYgSlJfSAorI2RlZmluZSBKUl9ICisKKy8qIFByb3RvdHlwZXMgZm9yIGJhY2tlbmQtbGV2ZWwgc2VydmljZXMgZXhwb3NlZCB0byBBUElzICovCitpbnQgY2FhbV9qcl9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpjdHJsZGV2LCBzdHJ1Y3QgZGV2aWNlICoqcmRldik7CitpbnQgY2FhbV9qcl9kZXJlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKnJkZXYpOworaW50IGNhYW1fanJfZW5xdWV1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiAqZGVzYywKKwkJICAgIHZvaWQgKCpjYmspKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyICpkZXNjLCB1MzIgc3RhdHVzLAorCQkJCXZvaWQgKmFyZXEpLAorCQkgICAgdm9pZCAqYXJlcSk7CisKK2V4dGVybiBpbnQgY2FhbV9qcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJIGludCByaW5nKTsKK2V4dGVybiBpbnQgY2FhbV9qcl9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpOworI2VuZGlmIC8qIEpSX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2NhYW0vcmVncy5oIGIvZHJpdmVycy9jcnlwdG8vY2FhbS9yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVlMzk0ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY3J5cHRvL2NhYW0vcmVncy5oCkBAIC0wLDAgKzEsNjYzIEBACisvKgorICogQ0FBTSBoYXJkd2FyZSByZWdpc3Rlci1sZXZlbCB2aWV3CisgKgorICogQ29weXJpZ2h0IDIwMDgtMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICovCisKKyNpZm5kZWYgUkVHU19ICisjZGVmaW5lIFJFR1NfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisvKgorICogQXJjaGl0ZWN0dXJlLXNwZWNpZmljIHJlZ2lzdGVyIGFjY2VzcyBtZXRob2RzCisgKgorICogQ0FBTSdzIGJ1cy1hZGRyZXNzYWJsZSByZWdpc3RlcnMgYXJlIDY0IGJpdHMgaW50ZXJuYWxseS4KKyAqIFRoZXkgaGF2ZSBiZWVuIHdpcmVkIHRvIGJlIHNhZmVseSBhY2Nlc3NpYmxlIG9uIDMyLWJpdAorICogYXJjaGl0ZWN0dXJlcywgaG93ZXZlci4gUmVnaXN0ZXJzIHdlcmUgb3JnYW5pemVkIHN1Y2gKKyAqIHRoYXQgKGEpIHRoZXkgY2FuIGJlIGNvbnRhaW5lZCBpbiAzMiBiaXRzLCAoYikgaWYgbm90LCB0aGVuIHRoZXkKKyAqIGNhbiBiZSB0cmVhdGVkIGFzIHR3byAzMi1iaXQgZW50aXRpZXMsIG9yIGZpbmFsbHkgKGMpIGlmIHRoZXkKKyAqIG11c3QgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZSA2NC1iaXQgdmFsdWUsIHRoZW4gdGhpcyBjYW4gc2FmZWx5CisgKiBiZSBkb25lIHdpdGggdHdvIDMyLWJpdCBjeWNsZXMuCisgKgorICogRm9yIDMyLWJpdCBvcGVyYXRpb25zIG9uIDY0LWJpdCB2YWx1ZXMsIENBQU0gZm9sbG93cyB0aGUgc2FtZQorICogNjQtYml0IHJlZ2lzdGVyIGFjY2VzcyBjb252ZW50aW9ucyBhcyBpdCdzIHByZWRlY2Vzc29ycywgaW4gdGhhdAorICogd3JpdGVzIGFyZSAidHJpZ2dlcmVkIiBieSBhIHdyaXRlIHRvIHRoZSByZWdpc3RlciBhdCB0aGUgbnVtZXJpY2FsbHkKKyAqIGhpZ2hlciBhZGRyZXNzLCB0aHVzLCBhIGZ1bGwgNjQtYml0IHdyaXRlIGN5Y2xlIHJlcXVpcmVzIGEgd3JpdGUKKyAqIHRvIHRoZSBsb3dlciBhZGRyZXNzLCBmb2xsb3dlZCBieSBhIHdyaXRlIHRvIHRoZSBoaWdoZXIgYWRkcmVzcywKKyAqIHdoaWNoIHdpbGwgbGF0Y2gvZXhlY3V0ZSB0aGUgd3JpdGUgY3ljbGUuCisgKgorICogRm9yIGV4YW1wbGUsIGxldCdzIGFzc3VtZSBhIFNXIHJlc2V0IG9mIENBQU0gdGhyb3VnaCB0aGUgbWFzdGVyCisgKiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgorICogLSBTV1JTVCBpcyBpbiBiaXQgMzEgb2YgTUNGRy4KKyAqIC0gTUNGRyBiZWdpbnMgYXQgYmFzZSsweDAwMDAuCisgKiAtIEJpdHMgNjMtMzIgYXJlIGEgMzItYml0IHdvcmQgYXQgYmFzZSsweDAwMDAgKG51bWVyaWNhbGx5LWxvd2VyKQorICogLSBCaXRzIDMxLTAgYXJlIGEgMzItYml0IHdvcmQgYXQgYmFzZSsweDAwMDQgKG51bWVyaWNhbGx5LWhpZ2hlcikKKyAqCisgKiAoYW5kIG9uIFBvd2VyLCB0aGUgY29udmVudGlvbiBpcyAwLTMxLCAzMi02MywgSSBrbm93Li4uKQorICoKKyAqIEFzc3VtaW5nIGEgNjQtYml0IHdyaXRlIHRvIHRoaXMgTUNGRyB0byBwZXJmb3JtIGEgc29mdHdhcmUgcmVzZXQKKyAqIHdvdWxkIHRoZW4gcmVxdWlyZSBhIHdyaXRlIG9mIDAgdG8gYmFzZSsweDAwMDAsIGZvbGxvd2VkIGJ5IGEKKyAqIHdyaXRlIG9mIDB4ODAwMDAwMDAgdG8gYmFzZSsweDAwMDQsIHdoaWNoIHdvdWxkICJleGVjdXRlIiB0aGUKKyAqIHJlc2V0LgorICoKKyAqIE9mIGNvdXJzZSwgc2luY2UgTUNGRyA2My0zMiBpcyBhbGwgemVybywgd2UgY291bGQgY2hlYXQgYW5kIHNpbXBseQorICogd3JpdGUgMHg4MDAwMDAwIHRvIGJhc2UrMHgwMDA0LCBhbmQgdGhlIHJlc2V0IHdvdWxkIHdvcmsgZmluZS4KKyAqIEhvd2V2ZXIsIHNpbmNlIENBQU0gZG9lcyBjb250YWluIHNvbWUgd3JpdGUtYW5kLXJlYWQtaW50ZW5kZWQKKyAqIDY0LWJpdCByZWdpc3RlcnMsIHRoaXMgY29kZSBkZWZpbmVzIDY0LWJpdCBhY2Nlc3MgbWV0aG9kcyBmb3IKKyAqIHRoZSBzYWtlIG9mIGludGVybmFsIGNvbnNpc3RlbmN5IGFuZCBzaW1wbGljaXR5LCBhbmQgc28gdGhhdCBhCisgKiBjbGVhbiB0cmFuc2l0aW9uIHRvIDY0LWJpdCBpcyBwb3NzaWJsZSB3aGVuIGl0IGJlY29tZXMgbmVjZXNzYXJ5LgorICoKKyAqIFRoZXJlIGFyZSBsaW1pdGF0aW9ucyB0byB0aGlzIHRoYXQgdGhlIGRldmVsb3BlciBtdXN0IHJlY29nbml6ZS4KKyAqIDMyLWJpdCBhcmNoaXRlY3R1cmVzIGNhbm5vdCBlbmZvcmNlIGFuIGF0b21pYy02NCBvcGVyYXRpb24sCisgKiBUaGVyZWZvcmU6CisgKgorICogLSBPbiB3cml0ZXMsIHNpbmNlIHRoZSBIVyBpcyBhc3N1bWVkIHRvIGxhdGNoIHRoZSBjeWNsZSBvbiB0aGUKKyAqICAgd3JpdGUgb2YgdGhlIGhpZ2hlci1udW1lcmljLWFkZHJlc3Mgd29yZCwgdGhlbiBvcmRlcmVkCisgKiAgIHdyaXRlcyB3b3JrIE9LLgorICoKKyAqIC0gRm9yIHJlYWRzLCB3aGVyZSBhIHJlZ2lzdGVyIGNvbnRhaW5zIGEgcmVsZXZhbnQgdmFsdWUgb2YgbW9yZQorICogICB0aGF0IDMyIGJpdHMsIHRoZSBoYXJkd2FyZSBlbXBsb3lzIGxvZ2ljIHRvIGxhdGNoIHRoZSBvdGhlcgorICogICAiaGFsZiIgb2YgdGhlIGRhdGEgdW50aWwgcmVhZCwgZW5zdXJpbmcgYW4gYWNjdXJhdGUgdmFsdWUuCisgKiAgIFRoaXMgaXMgb2YgcGFydGljdWxhciByZWxldmFuY2Ugd2hlbiBkZWFsaW5nIHdpdGggQ0FBTSdzCisgKiAgIHBlcmZvcm1hbmNlIGNvdW50ZXJzLgorICoKKyAqLworCisjaWZkZWYgX19CSUdfRU5ESUFOCisjZGVmaW5lIHdyX3JlZzMyKHJlZywgZGF0YSkgb3V0X2JlMzIocmVnLCBkYXRhKQorI2RlZmluZSByZF9yZWczMihyZWcpIGluX2JlMzIocmVnKQorI2lmZGVmIENPTkZJR182NEJJVAorI2RlZmluZSB3cl9yZWc2NChyZWcsIGRhdGEpIG91dF9iZTY0KHJlZywgZGF0YSkKKyNkZWZpbmUgcmRfcmVnNjQocmVnKSBpbl9iZTY0KHJlZykKKyNlbmRpZgorI2Vsc2UKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KKyNkZWZpbmUgd3JfcmVnMzIocmVnLCBkYXRhKSBfX3Jhd193cml0ZWwocmVnLCBkYXRhKQorI2RlZmluZSByZF9yZWczMihyZWcpIF9fcmF3X3JlYWRsKHJlZykKKyNpZmRlZiBDT05GSUdfNjRCSVQKKyNkZWZpbmUgd3JfcmVnNjQocmVnLCBkYXRhKSBfX3Jhd193cml0ZXEocmVnLCBkYXRhKQorI2RlZmluZSByZF9yZWc2NChyZWcpIF9fcmF3X3JlYWRxKHJlZykKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfNjRCSVQKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cl9yZWc2NCh1NjQgX19pb21lbSAqcmVnLCB1NjQgZGF0YSkKK3sKKwl3cl9yZWczMigodTMyIF9faW9tZW0gKilyZWcsIChkYXRhICYgMHhmZmZmZmZmZjAwMDAwMDAwdWxsKSA+PiAzMik7CisJd3JfcmVnMzIoKHUzMiBfX2lvbWVtICopcmVnICsgMSwgZGF0YSAmIDB4MDAwMDAwMDBmZmZmZmZmZnVsbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IHJkX3JlZzY0KHU2NCBfX2lvbWVtICpyZWcpCit7CisJcmV0dXJuICgoKHU2NClyZF9yZWczMigodTMyIF9faW9tZW0gKilyZWcpKSA8PCAzMikgfAorCQkoKHU2NClyZF9yZWczMigodTMyIF9faW9tZW0gKilyZWcgKyAxKSk7Cit9CisjZW5kaWYKKworLyoKKyAqIGpyX291dGVudHJ5CisgKiBSZXByZXNlbnRzIGVhY2ggZW50cnkgaW4gYSBKb2JSIG91dHB1dCByaW5nCisgKi8KK3N0cnVjdCBqcl9vdXRlbnRyeSB7CisJZG1hX2FkZHJfdCBkZXNjOy8qIFBvaW50ZXIgdG8gY29tcGxldGVkIGRlc2NyaXB0b3IgKi8KKwl1MzIganJzdGF0dXM7CS8qIFN0YXR1cyBmb3IgY29tcGxldGVkIGRlc2NyaXB0b3IgKi8KK30gX19wYWNrZWQ7CisKKy8qCisgKiBjYWFtX3BlcmZtb24gLSBQZXJmb3JtYW5jZSBNb25pdG9yL1NlY3VyZSBNZW1vcnkgU3RhdHVzLworICogICAgICAgICAgICAgICAgQ0FBTSBHbG9iYWwgU3RhdHVzL0NvbXBvbmVudCBWZXJzaW9uIElEcworICoKKyAqIFNwYW5zIGYwMC1mZmYgd2hlcmV2ZXIgaW5zdGFudGlhdGVkCisgKi8KKworLyogTnVtYmVyIG9mIERFQ09zICovCisjZGVmaW5lIENIQV9OVU1fREVDT05VTV9TSElGVAk1NgorI2RlZmluZSBDSEFfTlVNX0RFQ09OVU1fTUFTSwkoMHhmdWxsIDw8IENIQV9OVU1fREVDT05VTV9TSElGVCkKKworc3RydWN0IGNhYW1fcGVyZm1vbiB7CisJLyogUGVyZm9ybWFuY2UgTW9uaXRvciBSZWdpc3RlcnMJCQlmMDAtZjlmICovCisJdTY0IHJlcV9kZXF1ZXVlZDsJLyogUENfUkVRX0RFUSAtIERlcXVldWVkIFJlcXVlc3RzCSAgICAgKi8KKwl1NjQgb2JfZW5jX3JlcTsJLyogUENfT0JfRU5DX1JFUSAtIE91dGJvdW5kIEVuY3J5cHQgUmVxdWVzdHMgKi8KKwl1NjQgaWJfZGVjX3JlcTsJLyogUENfSUJfREVDX1JFUSAtIEluYm91bmQgRGVjcnlwdCBSZXF1ZXN0cyAgKi8KKwl1NjQgb2JfZW5jX2J5dGVzOwkvKiBQQ19PQl9FTkNSWVBUIC0gT3V0Ym91bmQgQnl0ZXMgRW5jcnlwdGVkICAqLworCXU2NCBvYl9wcm90X2J5dGVzOwkvKiBQQ19PQl9QUk9URUNUIC0gT3V0Ym91bmQgQnl0ZXMgUHJvdGVjdGVkICAqLworCXU2NCBpYl9kZWNfYnl0ZXM7CS8qIFBDX0lCX0RFQ1JZUFQgLSBJbmJvdW5kIEJ5dGVzIERlY3J5cHRlZCAgICovCisJdTY0IGliX3ZhbGlkX2J5dGVzOwkvKiBQQ19JQl9WQUxJREFURUQgSW5ib3VuZCBCeXRlcyBWYWxpZGF0ZWQgICAqLworCXU2NCByc3ZkWzEzXTsKKworCS8qIENBQU0gSGFyZHdhcmUgSW5zdGFudGlhdGlvbiBQYXJhbWV0ZXJzCQlmYTAtZmJmICovCisJdTY0IGNoYV9yZXY7CQkvKiBDUk5SIC0gQ0hBIFJldmlzaW9uIE51bWJlcgkJKi8KKyNkZWZpbmUgQ1RQUl9RSV9TSElGVAkJNTcKKyNkZWZpbmUgQ1RQUl9RSV9NQVNLCQkoMHgxdWxsIDw8IENUUFJfUUlfU0hJRlQpCisJdTY0IGNvbXBfcGFybXM7CS8qIENUUFIgLSBDb21waWxlIFBhcmFtZXRlcnMgUmVnaXN0ZXIJKi8KKwl1NjQgcnN2ZDFbMl07CisKKwkvKiBDQUFNIEdsb2JhbCBTdGF0dXMJCQkJCWZjMC1mZGYgKi8KKwl1NjQgZmF1bHRhZGRyOwkvKiBGQVIgIC0gRmF1bHQgQWRkcmVzcwkJKi8KKwl1MzIgZmF1bHRsaW9kbjsJLyogRkFMUiAtIEZhdWx0IEFkZHJlc3MgTElPRE4JKi8KKwl1MzIgZmF1bHRkZXRhaWw7CS8qIEZBRFIgLSBGYXVsdCBBZGRyIERldGFpbAkqLworCXUzMiByc3ZkMjsKKwl1MzIgc3RhdHVzOwkJLyogQ1NUQSAtIENBQU0gU3RhdHVzICovCisJdTY0IHJzdmQzOworCisJLyogQ29tcG9uZW50IEluc3RhbnRpYXRpb24gUGFyYW1ldGVycwkJCWZlMC1mZmYgKi8KKwl1MzIgcnRpY19pZDsJCS8qIFJWSUQgLSBSVElDIFZlcnNpb24gSUQJKi8KKwl1MzIgY2NiX2lkOwkJLyogQ0NCVklEIC0gQ0NCIFZlcnNpb24gSUQJKi8KKwl1NjQgY2hhX2lkOwkJLyogQ0hBVklEIC0gQ0hBIFZlcnNpb24gSUQJKi8KKwl1NjQgY2hhX251bTsJCS8qIENIQU5VTSAtIENIQSBOdW1iZXIJCSovCisJdTY0IGNhYW1faWQ7CQkvKiBDQUFNVklEIC0gQ0FBTSBWZXJzaW9uIElECSovCit9OworCisvKiBMSU9ETiBwcm9ncmFtbWluZyBmb3IgRE1BIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgTVNUUklEX0xPQ0tfTElPRE4JMHg4MDAwMDAwMAorI2RlZmluZSBNU1RSSURfTE9DS19NQUtFVFJVU1RFRAkweDAwMDEwMDAwCS8qIG9ubHkgZm9yIEpSIG1hc3RlcmlkICovCisKKyNkZWZpbmUgTVNUUklEX0xJT0ROX01BU0sJMHgwZmZmCitzdHJ1Y3QgbWFzdGVyaWQgeworCXUzMiBsaW9kbl9tczsJLyogbG9jayBhbmQgbWFrZS10cnVzdGVkIGNvbnRyb2wgYml0cyAqLworCXUzMiBsaW9kbl9sczsJLyogTElPRE4gZm9yIG5vbi1zZXF1ZW5jZSBhbmQgc2VxIGFjY2VzcyAqLworfTsKKworLyogUGFydGl0aW9uIElEIGZvciBETUEgY29uZmlndXJhdGlvbiAqLworc3RydWN0IHBhcnRpZCB7CisJdTMyIHJzdmQxOworCXUzMiBwaWRyOwkvKiBwYXJ0aXRpb24gSUQsIERFQ08gKi8KK307CisKKy8qIFJORyB0ZXN0IG1vZGUgKHJlcGxpY2F0ZWQgdHdpY2UgaW4gc29tZSBjb25maWd1cmF0aW9ucykgKi8KKy8qIFBhZGRlZCBvdXQgdG8gMHgxMDAgKi8KK3N0cnVjdCBybmd0c3QgeworCXUzMiBtb2RlOwkJLyogUlRTVE1PREV4IC0gVGVzdCBtb2RlICovCisJdTMyIHJzdmQxWzNdOworCXUzMiByZXNldDsJCS8qIFJUU1RSRVNFVHggLSBUZXN0IHJlc2V0IGNvbnRyb2wgKi8KKwl1MzIgcnN2ZDJbM107CisJdTMyIHN0YXR1czsJCS8qIFJUU1RTU1RBVFVTeCAtIFRlc3Qgc3RhdHVzICovCisJdTMyIHJzdmQzOworCXUzMiBlcnJzdGF0OwkJLyogUlRTVEVSUlNUQVR4IC0gVGVzdCBlcnJvciBzdGF0dXMgKi8KKwl1MzIgcnN2ZDQ7CisJdTMyIGVycmN0bDsJCS8qIFJUU1RFUlJDVEx4IC0gVGVzdCBlcnJvciBjb250cm9sICovCisJdTMyIHJzdmQ1OworCXUzMiBlbnRyb3B5OwkJLyogUlRTVEVOVFJPUFl4IC0gVGVzdCBlbnRyb3B5ICovCisJdTMyIHJzdmQ2WzE1XTsKKwl1MzIgdmVyaWZjdGw7CS8qIFJUU1RWRVJJRkNUTHggLSBUZXN0IHZlcmlmaWNhdGlvbiBjb250cm9sICovCisJdTMyIHJzdmQ3OworCXUzMiB2ZXJpZnN0YXQ7CS8qIFJUU1RWRVJJRlNUQVR4IC0gVGVzdCB2ZXJpZmljYXRpb24gc3RhdHVzICovCisJdTMyIHJzdmQ4OworCXUzMiB2ZXJpZmRhdGE7CS8qIFJUU1RWRVJJRkR4IC0gVGVzdCB2ZXJpZmljYXRpb24gZGF0YSAqLworCXUzMiByc3ZkOTsKKwl1MzIgeGtleTsJCS8qIFJUU1RYS0VZeCAtIFRlc3QgWEtFWSAqLworCXUzMiByc3ZkMTA7CisJdTMyIG9zY2N0Y3RsOwkvKiBSVFNUT1NDQ1RDVEx4IC0gVGVzdCBvc2MuIGNvdW50ZXIgY29udHJvbCAqLworCXUzMiByc3ZkMTE7CisJdTMyIG9zY2N0OwkJLyogUlRTVE9TQ0NUeCAtIFRlc3Qgb3NjaWxsYXRvciBjb3VudGVyICovCisJdTMyIHJzdmQxMjsKKwl1MzIgb3NjY3RzdGF0OwkvKiBSVFNUT0RDQ1RTVEFUeCAtIFRlc3Qgb3NjIGNvdW50ZXIgc3RhdHVzICovCisJdTMyIHJzdmQxM1syXTsKKwl1MzIgb2ZpZm9bNF07CS8qIFJUU1RPRklGT3ggLSBUZXN0IG91dHB1dCBGSUZPICovCisJdTMyIHJzdmQxNFsxNV07Cit9OworCisvKgorICogY2FhbV9jdHJsIC0gYmFzaWMgY29yZSBjb25maWd1cmF0aW9uCisgKiBzdGFydHMgYmFzZSArIDB4MDAwMCBwYWRkZWQgb3V0IHRvIDB4MTAwMAorICovCisKKyNkZWZpbmUgS0VLX0tFWV9TSVpFCQk4CisjZGVmaW5lIFRLRUtfS0VZX1NJWkUJCTgKKyNkZWZpbmUgVERTS19LRVlfU0laRQkJOAorCisjZGVmaW5lIERFQ09fUkVTRVQJMQkvKiBVc2Ugd2l0aCBERUNPIHJlc2V0L2F2YWlsYWJpbGl0eSByZWdzICovCisjZGVmaW5lIERFQ09fUkVTRVRfMAkoREVDT19SRVNFVCA8PCAwKQorI2RlZmluZSBERUNPX1JFU0VUXzEJKERFQ09fUkVTRVQgPDwgMSkKKyNkZWZpbmUgREVDT19SRVNFVF8yCShERUNPX1JFU0VUIDw8IDIpCisjZGVmaW5lIERFQ09fUkVTRVRfMwkoREVDT19SRVNFVCA8PCAzKQorI2RlZmluZSBERUNPX1JFU0VUXzQJKERFQ09fUkVTRVQgPDwgNCkKKworc3RydWN0IGNhYW1fY3RybCB7CisJLyogQmFzaWMgQ29uZmlndXJhdGlvbiBTZWN0aW9uCQkJCTAwMC0wMWYgKi8KKwkvKiBSZWFkL1dyaXRhYmxlCQkJCQkgICAgICAgICovCisJdTMyIHJzdmQxOworCXUzMiBtY3I7CQkvKiBNQ0ZHICAgICAgTWFzdGVyIENvbmZpZyBSZWdpc3RlciAgKi8KKwl1MzIgcnN2ZDJbMl07CisKKwkvKiBCdXMgQWNjZXNzIENvbmZpZ3VyYXRpb24gU2VjdGlvbgkJCTAxMC0xMWYgKi8KKwkvKiBSZWFkL1dyaXRhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlzdHJ1Y3QgbWFzdGVyaWQganJfbWlkWzRdOwkvKiBKUnhMSU9ETlIgLSBKb2JSIExJT0ROIHNldHVwICovCisJdTMyIHJzdmQzWzEyXTsKKwlzdHJ1Y3QgbWFzdGVyaWQgcnRpY19taWRbNF07CS8qIFJUSUN4TElPRE5SIC0gUlRJQyBMSU9ETiBzZXR1cCAqLworCXUzMiByc3ZkNFs3XTsKKwl1MzIgZGVjb19ycTsJCQkvKiBERUNPUlIgLSBERUNPIFJlcXVlc3QgKi8KKwlzdHJ1Y3QgcGFydGlkIGRlY29fbWlkWzVdOwkvKiBERUNPeExJT0ROUiAtIDEgcGVyIERFQ08gKi8KKwl1MzIgcnN2ZDVbMjJdOworCisJLyogREVDTyBBdmFpbGFiaWxpdHkvUmVzZXQgU2VjdGlvbgkJCTEyMC0zZmYgKi8KKwl1MzIgZGVjb19hdmFpbDsJCS8qIERBUiAtIERFQ08gYXZhaWxhYmlsaXR5ICovCisJdTMyIGRlY29fcmVzZXQ7CQkvKiBEUlIgLSBERUNPIHJlc2V0ICovCisJdTMyIHJzdmQ2WzE4Ml07CisKKwkvKiBLZXkgRW5jcnlwdGlvbi9EZWNyeXB0aW9uIENvbmZpZ3VyYXRpb24gICAgICAgICAgICAgIDQwMC01ZmYgKi8KKwkvKiBSZWFkL1dyaXRhYmxlIG9ubHkgd2hpbGUgaW4gTm9uLXNlY3VyZSBtb2RlICAgICAgICAgICAgICAgICAgKi8KKwl1MzIga2VrW0tFS19LRVlfU0laRV07CS8qIEpES0VLUiAtIEtleSBFbmNyeXB0aW9uIEtleSAqLworCXUzMiB0a2VrW1RLRUtfS0VZX1NJWkVdOwkvKiBUREtFS1IgLSBUcnVzdGVkIERlc2MgS0VLICovCisJdTMyIHRkc2tbVERTS19LRVlfU0laRV07CS8qIFREU0tSIC0gVHJ1c3RlZCBEZXNjIFNpZ25pbmcgS2V5ICovCisJdTMyIHJzdmQ3WzMyXTsKKwl1NjQgc2tub25jZTsJCQkvKiBTS05SIC0gU2VjdXJlIEtleSBOb25jZSAqLworCXUzMiByc3ZkOFs3MF07CisKKwkvKiBSTkcgVGVzdC9WZXJpZmljYXRpb24vRGVidWcgQWNjZXNzICAgICAgICAgICAgICAgICAgIDYwMC03ZmYgKi8KKwkvKiAoVXNlZnVsIGluIFRlc3QvRGVidWcgbW9kZXMgb25seS4uLikgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlzdHJ1Y3Qgcm5ndHN0IHJ0c3RbMl07CisKKwl1MzIgcnN2ZDlbNDQ4XTsKKworCS8qIFBlcmZvcm1hbmNlIE1vbml0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZjAwLWZmZiAqLworCXN0cnVjdCBjYWFtX3BlcmZtb24gcGVyZm1vbjsKK307CisKKy8qCisgKiBDb250cm9sbGVyIG1hc3RlciBjb25maWcgcmVnaXN0ZXIgZGVmcworICovCisjZGVmaW5lIE1DRkdSX1NXUkVTRVQJCTB4ODAwMDAwMDAgLyogc29mdHdhcmUgcmVzZXQgKi8KKyNkZWZpbmUgTUNGR1JfV0RFTkFCTEUJCTB4NDAwMDAwMDAgLyogREVDTyB3YXRjaGRvZyBlbmFibGUgKi8KKyNkZWZpbmUgTUNGR1JfV0RGQUlMCQkweDIwMDAwMDAwIC8qIERFQ08gd2F0Y2hkb2cgZm9yY2UtZmFpbCAqLworI2RlZmluZSBNQ0ZHUl9ETUFfUkVTRVQJCTB4MTAwMDAwMDAKKyNkZWZpbmUgTUNGR1JfTE9OR19QVFIJCTB4MDAwMTAwMDAgLyogVXNlID4zMi1iaXQgZGVzYyBhZGRyZXNzaW5nICovCisKKy8qIEFYSSByZWFkIGNhY2hlIGNvbnRyb2wgKi8KKyNkZWZpbmUgTUNGR1JfQVJDQUNIRV9TSElGVAkxMgorI2RlZmluZSBNQ0ZHUl9BUkNBQ0hFX01BU0sJKDB4ZiA8PCBNQ0ZHUl9BUkNBQ0hFX1NISUZUKQorCisvKiBBWEkgd3JpdGUgY2FjaGUgY29udHJvbCAqLworI2RlZmluZSBNQ0ZHUl9BV0NBQ0hFX1NISUZUCTgKKyNkZWZpbmUgTUNGR1JfQVdDQUNIRV9NQVNLCSgweGYgPDwgTUNGR1JfQVdDQUNIRV9TSElGVCkKKworLyogQVhJIHBpcGVsaW5lIGRlcHRoICovCisjZGVmaW5lIE1DRkdSX0FYSVBJUEVfU0hJRlQJNAorI2RlZmluZSBNQ0ZHUl9BWElQSVBFX01BU0sJKDB4ZiA8PCBNQ0ZHUl9BWElQSVBFX1NISUZUKQorCisjZGVmaW5lIE1DRkdSX0FYSVBSSQkJMHgwMDAwMDAwOCAvKiBBc3NlcnQgQVhJIHByaW9yaXR5IHNpZGViYW5kICovCisjZGVmaW5lIE1DRkdSX0JVUlNUXzY0CQkweDAwMDAwMDAxIC8qIE1heCBidXJzdCBzaXplICovCisKKy8qCisgKiBjYWFtX2pvYl9yaW5nIC0gZGlyZWN0IGpvYiByaW5nIHNldHVwCisgKiAxLTQgcG9zc2libGUgcGVyIGluc3RhbnRpYXRpb24sIGJhc2UgKyAxMDAwLzIwMDAvMzAwMC80MDAwCisgKiBQYWRkZWQgb3V0IHRvIDB4MTAwMAorICovCitzdHJ1Y3QgY2FhbV9qb2JfcmluZyB7CisJLyogSW5wdXQgcmluZyAqLworCXU2NCBpbnByaW5nX2Jhc2U7CS8qIElSQkF4IC0gIElucHV0IGRlc2MgcmluZyBiYXNlYWRkciAqLworCXUzMiByc3ZkMTsKKwl1MzIgaW5wcmluZ19zaXplOwkvKiBJUlN4IC0gSW5wdXQgcmluZyBzaXplICovCisJdTMyIHJzdmQyOworCXUzMiBpbnByaW5nX2F2YWlsOwkvKiBJUlNBeCAtIElucHV0IHJpbmcgcm9vbSByZW1haW5pbmcgKi8KKwl1MzIgcnN2ZDM7CisJdTMyIGlucHJpbmdfam9iYWRkOwkvKiBJUkpBeCAtIElucHV0IHJpbmcgam9icyBhZGRlZCAqLworCisJLyogT3V0cHV0IFJpbmcgKi8KKwl1NjQgb3V0cmluZ19iYXNlOwkvKiBPUkJBeCAtIE91dHB1dCBzdGF0dXMgcmluZyBiYXNlIGFkZHIgKi8KKwl1MzIgcnN2ZDQ7CisJdTMyIG91dHJpbmdfc2l6ZTsJLyogT1JTeCAtIE91dHB1dCByaW5nIHNpemUgKi8KKwl1MzIgcnN2ZDU7CisJdTMyIG91dHJpbmdfcm12ZDsJLyogT1JKUnggLSBPdXRwdXQgcmluZyBqb2JzIHJlbW92ZWQgKi8KKwl1MzIgcnN2ZDY7CisJdTMyIG91dHJpbmdfdXNlZDsJLyogT1JTRnggLSBPdXRwdXQgcmluZyBzbG90cyBmdWxsICovCisKKwkvKiBTdGF0dXMvQ29uZmlndXJhdGlvbiAqLworCXUzMiByc3ZkNzsKKwl1MzIganJvdXRzdGF0dXM7CS8qIEpSU1RBeCAtIEpvYlIgb3V0cHV0IHN0YXR1cyAqLworCXUzMiByc3ZkODsKKwl1MzIganJpbnRzdGF0dXM7CS8qIEpSSU5UeCAtIEpvYlIgaW50ZXJydXB0IHN0YXR1cyAqLworCXUzMiByY29uZmlnX2hpOwkvKiBKUnhDRkcgLSBSaW5nIGNvbmZpZ3VyYXRpb24gKi8KKwl1MzIgcmNvbmZpZ19sbzsKKworCS8qIEluZGljZXMuIENBQU0gbWFpbnRhaW5zIGFzICJoZWFkcyIgb2YgZWFjaCBxdWV1ZSAqLworCXUzMiByc3ZkOTsKKwl1MzIgaW5wX3JkaWR4OwkvKiBJUlJJeCAtIElucHV0IHJpbmcgcmVhZCBpbmRleCAqLworCXUzMiByc3ZkMTA7CisJdTMyIG91dF93dGlkeDsJLyogT1JXSXggLSBPdXRwdXQgcmluZyB3cml0ZSBpbmRleCAqLworCisJLyogQ29tbWFuZC9jb250cm9sICovCisJdTMyIHJzdmQxMTsKKwl1MzIganJjb21tYW5kOwkvKiBKUkNSeCAtIEpvYlIgY29tbWFuZCAqLworCisJdTMyIHJzdmQxMls5MzJdOworCisJLyogUGVyZm9ybWFuY2UgTW9uaXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmMDAtZmZmICovCisJc3RydWN0IGNhYW1fcGVyZm1vbiBwZXJmbW9uOworfTsKKworI2RlZmluZSBKUl9SSU5HU0laRV9NQVNLCTB4MDNmZgorLyoKKyAqIGpyc3RhdHVzIC0gSm9iIFJpbmcgT3V0cHV0IFN0YXR1cworICogQWxsIHZhbHVlcyBpbiBsbyB3b3JkCisgKiBBbHNvIG5vdGUsIHNhbWUgdmFsdWVzIHdyaXR0ZW4gb3V0IGFzIHN0YXR1cyB0aHJvdWdoIFFJCisgKiBpbiB0aGUgY29tbWFuZC9zdGF0dXMgZmllbGQgb2YgYSBmcmFtZSBkZXNjcmlwdG9yCisgKi8KKyNkZWZpbmUgSlJTVEFfU1NSQ19TSElGVCAgICAgICAgICAgIDI4CisjZGVmaW5lIEpSU1RBX1NTUkNfTUFTSyAgICAgICAgICAgICAweGYwMDAwMDAwCisKKyNkZWZpbmUgSlJTVEFfU1NSQ19OT05FICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSlJTVEFfU1NSQ19DQ0JfRVJST1IgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSlJTVEFfU1NSQ19KVU1QX0hBTFRfVVNFUiAgIDB4MzAwMDAwMDAKKyNkZWZpbmUgSlJTVEFfU1NSQ19ERUNPICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSlJTVEFfU1NSQ19KUkVSUk9SICAgICAgICAgIDB4NjAwMDAwMDAKKyNkZWZpbmUgSlJTVEFfU1NSQ19KVU1QX0hBTFRfQ0MgICAgIDB4NzAwMDAwMDAKKworI2RlZmluZSBKUlNUQV9ERUNPRVJSX0pVTVAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBKUlNUQV9ERUNPRVJSX0lOREVYX1NISUZUICAgOAorI2RlZmluZSBKUlNUQV9ERUNPRVJSX0lOREVYX01BU0sgICAgMHhmZjAwCisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfRVJST1JfTUFTSyAgICAweDAwZmYKKworI2RlZmluZSBKUlNUQV9ERUNPRVJSX05PTkUgICAgICAgICAgMHgwMAorI2RlZmluZSBKUlNUQV9ERUNPRVJSX0xJTktMRU4gICAgICAgMHgwMQorI2RlZmluZSBKUlNUQV9ERUNPRVJSX0xJTktQVFIgICAgICAgMHgwMgorI2RlZmluZSBKUlNUQV9ERUNPRVJSX0pSQ1RSTCAgICAgICAgMHgwMworI2RlZmluZSBKUlNUQV9ERUNPRVJSX0RFU0NDTUQgICAgICAgMHgwNAorI2RlZmluZSBKUlNUQV9ERUNPRVJSX09SREVSICAgICAgICAgMHgwNQorI2RlZmluZSBKUlNUQV9ERUNPRVJSX0tFWUNNRCAgICAgICAgMHgwNgorI2RlZmluZSBKUlNUQV9ERUNPRVJSX0xPQURDTUQgICAgICAgMHgwNworI2RlZmluZSBKUlNUQV9ERUNPRVJSX1NUT1JFQ01EICAgICAgMHgwOAorI2RlZmluZSBKUlNUQV9ERUNPRVJSX09QQ01EICAgICAgICAgMHgwOQorI2RlZmluZSBKUlNUQV9ERUNPRVJSX0ZJRk9MRENNRCAgICAgMHgwYQorI2RlZmluZSBKUlNUQV9ERUNPRVJSX0ZJRk9TVENNRCAgICAgMHgwYgorI2RlZmluZSBKUlNUQV9ERUNPRVJSX01PVkVDTUQgICAgICAgMHgwYworI2RlZmluZSBKUlNUQV9ERUNPRVJSX0pVTVBDTUQgICAgICAgMHgwZAorI2RlZmluZSBKUlNUQV9ERUNPRVJSX01BVEhDTUQgICAgICAgMHgwZQorI2RlZmluZSBKUlNUQV9ERUNPRVJSX1NIQVNIQ01EICAgICAgMHgwZgorI2RlZmluZSBKUlNUQV9ERUNPRVJSX1NFUUNNRCAgICAgICAgMHgxMAorI2RlZmluZSBKUlNUQV9ERUNPRVJSX0RFQ09JTlRFUk5BTCAgMHgxMQorI2RlZmluZSBKUlNUQV9ERUNPRVJSX1NIREVTQ0hEUiAgICAgMHgxMgorI2RlZmluZSBKUlNUQV9ERUNPRVJSX0hEUkxFTiAgICAgICAgMHgxMworI2RlZmluZSBKUlNUQV9ERUNPRVJSX0JVUlNURVIgICAgICAgMHgxNAorI2RlZmluZSBKUlNUQV9ERUNPRVJSX0RFU0NTSUdOQVRVUkUgMHgxNQorI2RlZmluZSBKUlNUQV9ERUNPRVJSX0RNQSAgICAgICAgICAgMHgxNgorI2RlZmluZSBKUlNUQV9ERUNPRVJSX0JVUlNURklGTyAgICAgMHgxNworI2RlZmluZSBKUlNUQV9ERUNPRVJSX0pSUkVTRVQgICAgICAgMHgxYQorI2RlZmluZSBKUlNUQV9ERUNPRVJSX0pPQkZBSUwgICAgICAgMHgxYgorI2RlZmluZSBKUlNUQV9ERUNPRVJSX0ROUkVSUiAgICAgICAgMHg4MAorI2RlZmluZSBKUlNUQV9ERUNPRVJSX1VOREVGUENMICAgICAgMHg4MQorI2RlZmluZSBKUlNUQV9ERUNPRVJSX1BEQkVSUiAgICAgICAgMHg4MgorI2RlZmluZSBKUlNUQV9ERUNPRVJSX0FOUlBMWV9MQVRFICAgMHg4MworI2RlZmluZSBKUlNUQV9ERUNPRVJSX0FOUlBMWV9SRVBMQVkgMHg4NAorI2RlZmluZSBKUlNUQV9ERUNPRVJSX1NFUU9WRiAgICAgICAgMHg4NQorI2RlZmluZSBKUlNUQV9ERUNPRVJSX0lOVlNJR04gICAgICAgMHg4NgorI2RlZmluZSBKUlNUQV9ERUNPRVJSX0RTQVNJR04gICAgICAgMHg4NworCisjZGVmaW5lIEpSU1RBX0NDQkVSUl9KVU1QICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIEpSU1RBX0NDQkVSUl9JTkRFWF9NQVNLICAgICAweGZmMDAKKyNkZWZpbmUgSlJTVEFfQ0NCRVJSX0lOREVYX1NISUZUICAgIDgKKyNkZWZpbmUgSlJTVEFfQ0NCRVJSX0NIQUlEX01BU0sgICAgIDB4MDBmMAorI2RlZmluZSBKUlNUQV9DQ0JFUlJfQ0hBSURfU0hJRlQgICAgNAorI2RlZmluZSBKUlNUQV9DQ0JFUlJfRVJSSURfTUFTSyAgICAgMHgwMDBmCisKKyNkZWZpbmUgSlJTVEFfQ0NCRVJSX0NIQUlEX0FFUyAgICAgICgweDAxIDw8IEpSU1RBX0NDQkVSUl9DSEFJRF9TSElGVCkKKyNkZWZpbmUgSlJTVEFfQ0NCRVJSX0NIQUlEX0RFUyAgICAgICgweDAyIDw8IEpSU1RBX0NDQkVSUl9DSEFJRF9TSElGVCkKKyNkZWZpbmUgSlJTVEFfQ0NCRVJSX0NIQUlEX0FSQzQgICAgICgweDAzIDw8IEpSU1RBX0NDQkVSUl9DSEFJRF9TSElGVCkKKyNkZWZpbmUgSlJTVEFfQ0NCRVJSX0NIQUlEX01EICAgICAgICgweDA0IDw8IEpSU1RBX0NDQkVSUl9DSEFJRF9TSElGVCkKKyNkZWZpbmUgSlJTVEFfQ0NCRVJSX0NIQUlEX1JORyAgICAgICgweDA1IDw8IEpSU1RBX0NDQkVSUl9DSEFJRF9TSElGVCkKKyNkZWZpbmUgSlJTVEFfQ0NCRVJSX0NIQUlEX1NOT1cgICAgICgweDA2IDw8IEpSU1RBX0NDQkVSUl9DSEFJRF9TSElGVCkKKyNkZWZpbmUgSlJTVEFfQ0NCRVJSX0NIQUlEX0tBU1VNSSAgICgweDA3IDw8IEpSU1RBX0NDQkVSUl9DSEFJRF9TSElGVCkKKyNkZWZpbmUgSlJTVEFfQ0NCRVJSX0NIQUlEX1BLICAgICAgICgweDA4IDw8IEpSU1RBX0NDQkVSUl9DSEFJRF9TSElGVCkKKyNkZWZpbmUgSlJTVEFfQ0NCRVJSX0NIQUlEX0NSQyAgICAgICgweDA5IDw8IEpSU1RBX0NDQkVSUl9DSEFJRF9TSElGVCkKKworI2RlZmluZSBKUlNUQV9DQ0JFUlJfRVJSSURfTk9ORSAgICAgMHgwMAorI2RlZmluZSBKUlNUQV9DQ0JFUlJfRVJSSURfTU9ERSAgICAgMHgwMQorI2RlZmluZSBKUlNUQV9DQ0JFUlJfRVJSSURfREFUQVNJWiAgMHgwMgorI2RlZmluZSBKUlNUQV9DQ0JFUlJfRVJSSURfS0VZU0laICAgMHgwMworI2RlZmluZSBKUlNUQV9DQ0JFUlJfRVJSSURfUEtBTUVNU1ogMHgwNAorI2RlZmluZSBKUlNUQV9DQ0JFUlJfRVJSSURfUEtCTUVNU1ogMHgwNQorI2RlZmluZSBKUlNUQV9DQ0JFUlJfRVJSSURfU0VRVUVOQ0UgMHgwNgorI2RlZmluZSBKUlNUQV9DQ0JFUlJfRVJSSURfUEtESVZaUk8gMHgwNworI2RlZmluZSBKUlNUQV9DQ0JFUlJfRVJSSURfUEtNT0RFVk4gMHgwOAorI2RlZmluZSBKUlNUQV9DQ0JFUlJfRVJSSURfS0VZUEFSSVQgMHgwOQorI2RlZmluZSBKUlNUQV9DQ0JFUlJfRVJSSURfSUNWQ0hLICAgMHgwYQorI2RlZmluZSBKUlNUQV9DQ0JFUlJfRVJSSURfSEFSRFdBUkUgMHgwYgorI2RlZmluZSBKUlNUQV9DQ0JFUlJfRVJSSURfQ0NNQUFEICAgMHgwYworI2RlZmluZSBKUlNUQV9DQ0JFUlJfRVJSSURfSU5WQ0hBICAgMHgwZgorCisjZGVmaW5lIEpSSU5UX0VSUl9JTkRFWF9NQVNLICAgICAgICAweDNmZmYwMDAwCisjZGVmaW5lIEpSSU5UX0VSUl9JTkRFWF9TSElGVCAgICAgICAxNgorI2RlZmluZSBKUklOVF9FUlJfVFlQRV9NQVNLICAgICAgICAgMHhmMDAKKyNkZWZpbmUgSlJJTlRfRVJSX1RZUEVfU0hJRlQgICAgICAgIDgKKyNkZWZpbmUgSlJJTlRfRVJSX0hBTFRfTUFTSyAgICAgICAgIDB4YworI2RlZmluZSBKUklOVF9FUlJfSEFMVF9TSElGVCAgICAgICAgMgorI2RlZmluZSBKUklOVF9FUlJfSEFMVF9JTlBST0dSRVNTICAgMHg0CisjZGVmaW5lIEpSSU5UX0VSUl9IQUxUX0NPTVBMRVRFICAgICAweDgKKyNkZWZpbmUgSlJJTlRfSlJfRVJST1IgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgSlJJTlRfSlJfSU5UICAgICAgICAgICAgICAgIDB4MDEKKworI2RlZmluZSBKUklOVF9FUlJfVFlQRV9XUklURSAgICAgICAgMQorI2RlZmluZSBKUklOVF9FUlJfVFlQRV9CQURfSU5QQUREUiAgMworI2RlZmluZSBKUklOVF9FUlJfVFlQRV9CQURfT1VUQUREUiAgNAorI2RlZmluZSBKUklOVF9FUlJfVFlQRV9JTlZfSU5QV1JUICAgNQorI2RlZmluZSBKUklOVF9FUlJfVFlQRV9JTlZfT1VUV1JUICAgNgorI2RlZmluZSBKUklOVF9FUlJfVFlQRV9SRVNFVCAgICAgICAgNworI2RlZmluZSBKUklOVF9FUlJfVFlQRV9SRU1PVkVfT0ZMICAgOAorI2RlZmluZSBKUklOVF9FUlJfVFlQRV9BRERfT0ZMICAgICAgOQorCisjZGVmaW5lIEpSQ0ZHX1NPRQkJMHgwNAorI2RlZmluZSBKUkNGR19JQ0VOCQkweDAyCisjZGVmaW5lIEpSQ0ZHX0lNU0sJCTB4MDEKKyNkZWZpbmUgSlJDRkdfSUNEQ1RfU0hJRlQJOAorI2RlZmluZSBKUkNGR19JQ1RUX1NISUZUCTE2CisKKyNkZWZpbmUgSlJDUl9SRVNFVCAgICAgICAgICAgICAgICAgIDB4MDEKKworLyoKKyAqIGNhYW1fYXNzdXJhbmNlIC0gQXNzdXJhbmNlIENvbnRyb2xsZXIgVmlldworICogYmFzZSArIDB4NjAwMCBwYWRkZWQgb3V0IHRvIDB4MTAwMAorICovCisKK3N0cnVjdCBydGljX2VsZW1lbnQgeworCXU2NCBhZGRyZXNzOworCXUzMiByc3ZkOworCXUzMiBsZW5ndGg7Cit9OworCitzdHJ1Y3QgcnRpY19ibG9jayB7CisJc3RydWN0IHJ0aWNfZWxlbWVudCBlbGVtZW50WzJdOworfTsKKworc3RydWN0IHJ0aWNfbWVtaGFzaCB7CisJdTMyIG1lbWhhc2hfYmVbMzJdOworCXUzMiBtZW1oYXNoX2xlWzMyXTsKK307CisKK3N0cnVjdCBjYWFtX2Fzc3VyYW5jZSB7CisgICAgLyogU3RhdHVzL0NvbW1hbmQvV2F0Y2hkb2cgKi8KKwl1MzIgcnN2ZDE7CisJdTMyIHN0YXR1czsJCS8qIFJTVEEgLSBTdGF0dXMgKi8KKwl1MzIgcnN2ZDI7CisJdTMyIGNtZDsJCS8qIFJDTUQgLSBDb21tYW5kICovCisJdTMyIHJzdmQzOworCXUzMiBjdHJsOwkJLyogUkNUTCAtIENvbnRyb2wgKi8KKwl1MzIgcnN2ZDQ7CisJdTMyIHRocm90dGxlOwkvKiBSVEhSIC0gVGhyb3R0bGUgKi8KKwl1MzIgcnN2ZDVbMl07CisJdTY0IHdhdGNoZG9nOwkvKiBSV0RPRyAtIFdhdGNoZG9nIFRpbWVyICovCisJdTMyIHJzdmQ2OworCXUzMiByZW5kOwkJLyogUkVORCAtIEVuZGlhbiBjb3JyZWN0aW9ucyAqLworCXUzMiByc3ZkN1s1MF07CisKKwkvKiBCbG9jayBhY2Nlc3MvY29uZmlndXJhdGlvbiBAIDEwMC8xMTAvMTIwLzEzMCAqLworCXN0cnVjdCBydGljX2Jsb2NrIG1lbWJsa1s0XTsJLyogTWVtb3J5IEJsb2NrcyBBLUQgKi8KKwl1MzIgcnN2ZDhbMzJdOworCisJLyogQmxvY2sgaGFzaGVzIEAgMjAwLzMwMC80MDAvNTAwICovCisJc3RydWN0IHJ0aWNfbWVtaGFzaCBoYXNoWzRdOwkvKiBCbG9jayBoYXNoIHZhbHVlcyBBLUQgKi8KKwl1MzIgcnN2ZF8zWzY0MF07Cit9OworCisvKgorICogY2FhbV9xdWV1ZV9pZiAtIFFJIGNvbmZpZ3VyYXRpb24gYW5kIGNvbnRyb2wKKyAqIHN0YXJ0cyBiYXNlICsgMHg3MDAwLCBwYWRkZWQgb3V0IHRvIDB4MTAwMCBsb25nCisgKi8KKworc3RydWN0IGNhYW1fcXVldWVfaWYgeworCXUzMiBxaV9jb250cm9sX2hpOwkvKiBRSUNUTCAgLSBRSSBDb250cm9sICovCisJdTMyIHFpX2NvbnRyb2xfbG87CisJdTMyIHJzdmQxOworCXUzMiBxaV9zdGF0dXM7CS8qIFFJU1RBICAtIFFJIFN0YXR1cyAqLworCXUzMiBxaV9kZXFfY2ZnX2hpOwkvKiBRSURRQyAgLSBRSSBEZXF1ZXVlIENvbmZpZ3VyYXRpb24gKi8KKwl1MzIgcWlfZGVxX2NmZ19sbzsKKwl1MzIgcWlfZW5xX2NmZ19oaTsJLyogUUlTRVFDIC0gUUkgRW5xdWV1ZSBDb21tYW5kICAgICAqLworCXUzMiBxaV9lbnFfY2ZnX2xvOworCXUzMiByc3ZkMlsxMDE2XTsKK307CisKKy8qIFFJIGNvbnRyb2wgYml0cyAtIGxvdyB3b3JkICovCisjZGVmaW5lIFFJQ1RMX0RRRU4gICAgICAweDAxICAgICAgICAgICAgICAvKiBFbmFibGUgZnJhbWUgcG9wICAgICAgICAgICovCisjZGVmaW5lIFFJQ1RMX1NUT1AgICAgICAweDAyICAgICAgICAgICAgICAvKiBTdG9wIGRlcXVldWUvZW5xdWV1ZSAgICAgICovCisjZGVmaW5lIFFJQ1RMX1NPRSAgICAgICAweDA0ICAgICAgICAgICAgICAvKiBTdG9wIG9uIGVycm9yICAgICAgICAgICAgICovCisKKy8qIFFJIGNvbnRyb2wgYml0cyAtIGhpZ2ggd29yZCAqLworI2RlZmluZSBRSUNUTF9NQlNJCTB4MDEKKyNkZWZpbmUgUUlDVExfTUhXU0kJMHgwMgorI2RlZmluZSBRSUNUTF9NV1NJCTB4MDQKKyNkZWZpbmUgUUlDVExfTURXU0kJMHgwOAorI2RlZmluZSBRSUNUTF9DQlNJCTB4MTAJCS8qIEN0cmxEYXRhQnl0ZVN3YXBJbnB1dCAgICAgKi8KKyNkZWZpbmUgUUlDVExfQ0hXU0kJMHgyMAkJLyogQ3RybERhdGFIYWxmU3dhcElucHV0ICAgICAqLworI2RlZmluZSBRSUNUTF9DV1NJCTB4NDAJCS8qIEN0cmxEYXRhV29yZFN3YXBJbnB1dCAgICAgKi8KKyNkZWZpbmUgUUlDVExfQ0RXU0kJMHg4MAkJLyogQ3RybERhdGFEV29yZFN3YXBJbnB1dCAgICAqLworI2RlZmluZSBRSUNUTF9NQlNPCTB4MDEwMAorI2RlZmluZSBRSUNUTF9NSFdTTwkweDAyMDAKKyNkZWZpbmUgUUlDVExfTVdTTwkweDA0MDAKKyNkZWZpbmUgUUlDVExfTURXU08JMHgwODAwCisjZGVmaW5lIFFJQ1RMX0NCU08JMHgxMDAwCQkvKiBDdHJsRGF0YUJ5dGVTd2FwT3V0cHV0ICAgICovCisjZGVmaW5lIFFJQ1RMX0NIV1NPCTB4MjAwMAkJLyogQ3RybERhdGFIYWxmU3dhcE91dHB1dCAgICAqLworI2RlZmluZSBRSUNUTF9DV1NPCTB4NDAwMAkJLyogQ3RybERhdGFXb3JkU3dhcE91dHB1dCAgICAqLworI2RlZmluZSBRSUNUTF9DRFdTTyAgICAgMHg4MDAwCQkvKiBDdHJsRGF0YURXb3JkU3dhcE91dHB1dCAgICovCisjZGVmaW5lIFFJQ1RMX0RNQlMJMHgwMTAwMDAKKyNkZWZpbmUgUUlDVExfRVBPCTB4MDIwMDAwCisKKy8qIFFJIHN0YXR1cyBiaXRzICovCisjZGVmaW5lIFFJU1RBX1BIUkRFUlIgICAweDAxICAgICAgICAgICAgICAvKiBQcmVIZWFkZXIgUmVhZCBFcnJvciAgICAgICovCisjZGVmaW5lIFFJU1RBX0NGUkRFUlIgICAweDAyICAgICAgICAgICAgICAvKiBDb21wb3VuZCBGcmFtZSBSZWFkIEVycm9yICovCisjZGVmaW5lIFFJU1RBX09GV1JFUlIgICAweDA0ICAgICAgICAgICAgICAvKiBPdXRwdXQgRnJhbWUgUmVhZCBFcnJvciAgICovCisjZGVmaW5lIFFJU1RBX0JQREVSUiAgICAweDA4ICAgICAgICAgICAgICAvKiBCdWZmZXIgUG9vbCBEZXBsZXRlZCAgICAgICovCisjZGVmaW5lIFFJU1RBX0JUU0VSUiAgICAweDEwICAgICAgICAgICAgICAvKiBCdWZmZXIgVW5kZXJzaXplICAgICAgICAgICovCisjZGVmaW5lIFFJU1RBX0NGV1JFUlIgICAweDIwICAgICAgICAgICAgICAvKiBDb21wb3VuZCBGcmFtZSBXcml0ZSBFcnIgICovCisjZGVmaW5lIFFJU1RBX1NUT1BEICAgICAweDgwMDAwMDAwICAgICAgICAvKiBRSSBTdG9wcGVkIChzZWUgUUlDVEwpICAgICovCisKKy8qIGRlY29fc2dfdGFibGUgLSBERUNPIHZpZXcgb2Ygc2NhdHRlci9nYXRoZXIgdGFibGUgKi8KK3N0cnVjdCBkZWNvX3NnX3RhYmxlIHsKKwl1NjQgYWRkcjsJCS8qIFNlZ21lbnQgQWRkcmVzcyAqLworCXUzMiBlbGVuOwkJLyogRSwgRiBiaXRzICsgMzAtYml0IGxlbmd0aCAqLworCXUzMiBicGlkX29mZnNldDsJLyogQnVmZmVyIFBvb2wgSUQgKyAxNi1iaXQgbGVuZ3RoICovCit9OworCisvKgorICogY2FhbV9kZWNvIC0gZGVzY3JpcHRvciBjb250cm9sbGVyIC0gQ0hBIGNsdXN0ZXIgYmxvY2sKKyAqCisgKiBPbmx5IGFjY2Vzc2libGUgd2hlbiBkaXJlY3QgREVDTyBhY2Nlc3MgaXMgdHVybmVkIG9uCisgKiAoZG9uZSBpbiBERUNPUlIsIHZpYSBNSUQgcHJvZ3JhbW1lZCBpbiBERUNPeE1JRAorICoKKyAqIDUgdHlwaWNhbCwgYmFzZSArIDB4ODAwMC85MDAwL2EwMDAvYjAwMAorICogUGFkZGVkIG91dCB0byAweDEwMDAgbG9uZworICovCitzdHJ1Y3QgY2FhbV9kZWNvIHsKKwl1MzIgcnN2ZDE7CisJdTMyIGNsczFfbW9kZTsJLyogQ3hDMU1SIC0gIENsYXNzIDEgTW9kZSAqLworCXUzMiByc3ZkMjsKKwl1MzIgY2xzMV9rZXlzaXplOwkvKiBDeEMxS1NSIC0gQ2xhc3MgMSBLZXkgU2l6ZSAqLworCXUzMiBjbHMxX2RhdGFzaXplX2hpOwkvKiBDeEMxRFNSIC0gQ2xhc3MgMSBEYXRhIFNpemUgKi8KKwl1MzIgY2xzMV9kYXRhc2l6ZV9sbzsKKwl1MzIgcnN2ZDM7CisJdTMyIGNsczFfaWN2c2l6ZTsJLyogQ3hDMUlDVlNSIC0gQ2xhc3MgMSBJQ1Ygc2l6ZSAqLworCXUzMiByc3ZkNFs1XTsKKwl1MzIgY2hhX2N0cmw7CS8qIENDVExSIC0gQ0hBIGNvbnRyb2wgKi8KKwl1MzIgcnN2ZDU7CisJdTMyIGlycV9jcnRsOwkvKiBDeENJUlEgLSBDQ0IgaW50ZXJydXB0IGRvbmUvZXJyb3IvY2xlYXIgKi8KKwl1MzIgcnN2ZDY7CisJdTMyIGNscl93cml0dGVuOwkvKiBDeENXUiAtIENsZWFyLVdyaXR0ZW4gKi8KKwl1MzIgY2NiX3N0YXR1c19oaTsJLyogQ3hDU1RBIC0gQ0NCIFN0YXR1cy9FcnJvciAqLworCXUzMiBjY2Jfc3RhdHVzX2xvOworCXUzMiByc3ZkN1szXTsKKwl1MzIgYWFkX3NpemU7CS8qIEN4QUFEU1pSIC0gQ3VycmVudCBBQUQgU2l6ZSAqLworCXUzMiByc3ZkODsKKwl1MzIgY2xzMV9pdl9zaXplOwkvKiBDeEMxSVZTWlIgLSBDdXJyZW50IENsYXNzIDEgSVYgU2l6ZSAqLworCXUzMiByc3ZkOVs3XTsKKwl1MzIgcGtoYV9hX3NpemU7CS8qIFBLQVNaUnggLSBTaXplIG9mIFBLSEEgQSAqLworCXUzMiByc3ZkMTA7CisJdTMyIHBraGFfYl9zaXplOwkvKiBQS0JTWlJ4IC0gU2l6ZSBvZiBQS0hBIEIgKi8KKwl1MzIgcnN2ZDExOworCXUzMiBwa2hhX25fc2l6ZTsJLyogUEtOU1pSeCAtIFNpemUgb2YgUEtIQSBOICovCisJdTMyIHJzdmQxMjsKKwl1MzIgcGtoYV9lX3NpemU7CS8qIFBLRVNaUnggLSBTaXplIG9mIFBLSEEgRSAqLworCXUzMiByc3ZkMTNbMjRdOworCXUzMiBjbHMxX2N0eFsxNl07CS8qIEN4QzFDVFhSIC0gQ2xhc3MgMSBDb250ZXh0IEAxMDAgKi8KKwl1MzIgcnN2ZDE0WzQ4XTsKKwl1MzIgY2xzMV9rZXlbOF07CS8qIEN4QzFLRVlSIC0gQ2xhc3MgMSBLZXkgQDIwMCAqLworCXUzMiByc3ZkMTVbMTIxXTsKKwl1MzIgY2xzMl9tb2RlOwkvKiBDeEMyTVIgLSBDbGFzcyAyIE1vZGUgKi8KKwl1MzIgcnN2ZDE2OworCXUzMiBjbHMyX2tleXNpemU7CS8qIEN4WDJLU1IgLSBDbGFzcyAyIEtleSBTaXplICovCisJdTMyIGNsczJfZGF0YXNpemVfaGk7CS8qIEN4QzJEU1IgLSBDbGFzcyAyIERhdGEgU2l6ZSAqLworCXUzMiBjbHMyX2RhdGFzaXplX2xvOworCXUzMiByc3ZkMTc7CisJdTMyIGNsczJfaWN2c2l6ZTsJLyogQ3hDMklDVlNaUiAtIENsYXNzIDIgSUNWIFNpemUgKi8KKwl1MzIgcnN2ZDE4WzU2XTsKKwl1MzIgY2xzMl9jdHhbMThdOwkvKiBDeEMyQ1RYUiAtIENsYXNzIDIgQ29udGV4dCBANTAwICovCisJdTMyIHJzdmQxOVs0Nl07CisJdTMyIGNsczJfa2V5WzMyXTsJLyogQ3hDMktFWVIgLSBDbGFzczIgS2V5IEA2MDAgKi8KKwl1MzIgcnN2ZDIwWzg0XTsKKwl1MzIgaW5wX2luZm9maWZvX2hpOwkvKiBDeElGSUZPIC0gSW5wdXQgSW5mbyBGSUZPIEA3ZDAgKi8KKwl1MzIgaW5wX2luZm9maWZvX2xvOworCXUzMiByc3ZkMjFbMl07CisJdTY0IGlucF9kYXRhZmlmbzsJLyogQ3hERklGTyAtIElucHV0IERhdGEgRklGTyAqLworCXUzMiByc3ZkMjJbMl07CisJdTY0IG91dF9kYXRhZmlmbzsJLyogQ3hPRklGTyAtIE91dHB1dCBEYXRhIEZJRk8gKi8KKwl1MzIgcnN2ZDIzWzJdOworCXUzMiBqcl9jdGxfaGk7CS8qIEN4SlJSIC0gSm9iUiBDb250cm9sIFJlZ2lzdGVyICAgICAgQDgwMCAqLworCXUzMiBqcl9jdGxfbG87CisJdTY0IGpyX2Rlc2NhZGRyOwkvKiBDeERBRFIgLSBKb2JSIERlc2NyaXB0b3IgQWRkcmVzcyAqLworCXUzMiBvcF9zdGF0dXNfaGk7CS8qIER4T1BTVEEgLSBERUNPIE9wZXJhdGlvbiBTdGF0dXMgKi8KKwl1MzIgb3Bfc3RhdHVzX2xvOworCXUzMiByc3ZkMjRbMl07CisJdTMyIGxpb2RuOwkJLyogRHhMU1IgLSBERUNPIExJT0ROIFN0YXR1cyAtIG5vbi1zZXEgKi8KKwl1MzIgdGRfbGlvZG47CS8qIER4TFNSIC0gREVDTyBMSU9ETiBTdGF0dXMgLSB0cnVzdGRlc2MgKi8KKwl1MzIgcnN2ZDI2WzZdOworCXU2NCBtYXRoWzRdOwkJLyogRHhNVEggLSBNYXRoIHJlZ2lzdGVyICovCisJdTMyIHJzdmQyN1s4XTsKKwlzdHJ1Y3QgZGVjb19zZ190YWJsZSBndGhyX3RibFs0XTsJLyogRHhHVFIgLSBHYXRoZXIgVGFibGVzICovCisJdTMyIHJzdmQyOFsxNl07CisJc3RydWN0IGRlY29fc2dfdGFibGUgc2N0cl90YmxbNF07CS8qIER4U1RSIC0gU2NhdHRlciBUYWJsZXMgKi8KKwl1MzIgcnN2ZDI5WzQ4XTsKKwl1MzIgZGVzY2J1Zls2NF07CS8qIER4REVTQiAtIERlc2NyaXB0b3IgYnVmZmVyICovCisJdTMyIHJzdmQzMFszMjBdOworfTsKKworLyoKKyAqIEN1cnJlbnQgdG9wLWxldmVsIHZpZXcgb2YgbWVtb3J5IG1hcCBpczoKKyAqCisgKiAweDAwMDAgLSAweDBmZmYgLSBDQUFNIFRvcC1MZXZlbCBDb250cm9sCisgKiAweDEwMDAgLSAweDFmZmYgLSBKb2IgUmluZyAwCisgKiAweDIwMDAgLSAweDJmZmYgLSBKb2IgUmluZyAxCisgKiAweDMwMDAgLSAweDNmZmYgLSBKb2IgUmluZyAyCisgKiAweDQwMDAgLSAweDRmZmYgLSBKb2IgUmluZyAzCisgKiAweDUwMDAgLSAweDVmZmYgLSAodW51c2VkKQorICogMHg2MDAwIC0gMHg2ZmZmIC0gQXNzdXJhbmNlIENvbnRyb2xsZXIKKyAqIDB4NzAwMCAtIDB4N2ZmZiAtIFF1ZXVlIEludGVyZmFjZQorICogMHg4MDAwIC0gMHg4ZmZmIC0gREVDTy1DQ0IgMAorICogMHg5MDAwIC0gMHg5ZmZmIC0gREVDTy1DQ0IgMQorICogMHhhMDAwIC0gMHhhZmZmIC0gREVDTy1DQ0IgMgorICogMHhiMDAwIC0gMHhiZmZmIC0gREVDTy1DQ0IgMworICogMHhjMDAwIC0gMHhjZmZmIC0gREVDTy1DQ0IgNAorICoKKyAqIGNhYW1fZnVsbCBkZXNjcmliZXMgdGhlIGZ1bGwgcmVnaXN0ZXIgdmlldyBvZiBDQUFNIGlmIHVzZWZ1bCwKKyAqIGFsdGhvdWdoIG1hbnkgY29uZmlndXJhdGlvbnMgbWF5IGNob29zZSB0byBpbXBsZW1lbnQgcGFydHMgb2YKKyAqIHRoZSByZWdpc3RlciBtYXAgc2VwYXJhdGVseSwgaW4gZGlmZmVyaW5nIHByaXZpbGVnZSByZWdpb25zCisgKi8KK3N0cnVjdCBjYWFtX2Z1bGwgeworCXN0cnVjdCBjYWFtX2N0cmwgX19pb21lbSBjdHJsOworCXN0cnVjdCBjYWFtX2pvYl9yaW5nIGpyWzRdOworCXU2NCByc3ZkWzUxMl07CisJc3RydWN0IGNhYW1fYXNzdXJhbmNlIGFzc3VyZTsKKwlzdHJ1Y3QgY2FhbV9xdWV1ZV9pZiBxaTsKKwlzdHJ1Y3QgY2FhbV9kZWNvICpkZWNvOworfTsKKworI2VuZGlmIC8qIFJFR1NfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vbXZfY2VzYS5jIGIvZHJpdmVycy9jcnlwdG8vbXZfY2VzYS5jCmluZGV4IGM5OTMwNWEuLjNjZjMwM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL212X2Nlc2EuYworKysgYi9kcml2ZXJzL2NyeXB0by9tdl9jZXNhLmMKQEAgLTEzMyw3ICsxMzMsNiBAQAogCWludCBleHRyYV9ieXRlczsJLyogdW5wcm9jZXNzZWQgYnl0ZXMgaW4gYnVmZmVyICovCiAJZW51bSBoYXNoX29wIG9wOwogCWludCBjb3VudF9hZGQ7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0IGR1bW15c2c7CiB9OwogCiBzdGF0aWMgdm9pZCBjb21wdXRlX2Flc19kZWNfa2V5KHN0cnVjdCBtdl9jdHggKmN0eCkKQEAgLTE4Nyw5ICsxODYsOSBAQAogewogCWludCByZXQ7CiAJdm9pZCAqc2J1ZjsKLQlpbnQgY29waWVkID0gMDsKKwlpbnQgY29weV9sZW47CiAKLQl3aGlsZSAoMSkgeworCXdoaWxlIChsZW4pIHsKIAkJaWYgKCFwLT5zZ19zcmNfbGVmdCkgewogCQkJcmV0ID0gc2dfbWl0ZXJfbmV4dCgmcC0+c3JjX3NnX2l0KTsKIAkJCUJVR19PTighcmV0KTsKQEAgLTE5OSwxOSArMTk4LDE0IEBACiAKIAkJc2J1ZiA9IHAtPnNyY19zZ19pdC5hZGRyICsgcC0+c3JjX3N0YXJ0OwogCi0JCWlmIChwLT5zZ19zcmNfbGVmdCA8PSBsZW4gLSBjb3BpZWQpIHsKLQkJCW1lbWNweShkYnVmICsgY29waWVkLCBzYnVmLCBwLT5zZ19zcmNfbGVmdCk7Ci0JCQljb3BpZWQgKz0gcC0+c2dfc3JjX2xlZnQ7Ci0JCQlwLT5zZ19zcmNfbGVmdCA9IDA7Ci0JCQlpZiAoY29waWVkID49IGxlbikKLQkJCQlicmVhazsKLQkJfSBlbHNlIHsKLQkJCWludCBjb3B5X2xlbiA9IGxlbiAtIGNvcGllZDsKLQkJCW1lbWNweShkYnVmICsgY29waWVkLCBzYnVmLCBjb3B5X2xlbik7Ci0JCQlwLT5zcmNfc3RhcnQgKz0gY29weV9sZW47Ci0JCQlwLT5zZ19zcmNfbGVmdCAtPSBjb3B5X2xlbjsKLQkJCWJyZWFrOwotCQl9CisJCWNvcHlfbGVuID0gbWluKHAtPnNnX3NyY19sZWZ0LCBsZW4pOworCQltZW1jcHkoZGJ1Ziwgc2J1ZiwgY29weV9sZW4pOworCisJCXAtPnNyY19zdGFydCArPSBjb3B5X2xlbjsKKwkJcC0+c2dfc3JjX2xlZnQgLT0gY29weV9sZW47CisKKwkJbGVuIC09IGNvcHlfbGVuOworCQlkYnVmICs9IGNvcHlfbGVuOwogCX0KIH0KIApAQCAtMjc1LDcgKzI2OSw2IEBACiAJbWVtY3B5KGNwZy0+c3JhbSArIFNSQU1fQ09ORklHLCAmb3AsCiAJCQlzaXplb2Yoc3RydWN0IHNlY19hY2NlbF9jb25maWcpKTsKIAotCXdyaXRlbChTUkFNX0NPTkZJRywgY3BnLT5yZWcgKyBTRUNfQUNDRUxfREVTQ19QMCk7CiAJLyogR08gKi8KIAl3cml0ZWwoU0VDX0NNRF9FTl9TRUNfQUNDTDAsIGNwZy0+cmVnICsgU0VDX0FDQ0VMX0NNRCk7CiAKQEAgLTMwMiw2ICsyOTUsNyBAQAogc3RhdGljIHZvaWQgbXZfcHJvY2Vzc19oYXNoX2N1cnJlbnQoaW50IGZpcnN0X2Jsb2NrKQogewogCXN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEgPSBhaGFzaF9yZXF1ZXN0X2Nhc3QoY3BnLT5jdXJfcmVxKTsKKwljb25zdCBzdHJ1Y3QgbXZfdGZtX2hhc2hfY3R4ICp0Zm1fY3R4ID0gY3J5cHRvX3RmbV9jdHgocmVxLT5iYXNlLnRmbSk7CiAJc3RydWN0IG12X3JlcV9oYXNoX2N0eCAqcmVxX2N0eCA9IGFoYXNoX3JlcXVlc3RfY3R4KHJlcSk7CiAJc3RydWN0IHJlcV9wcm9ncmVzcyAqcCA9ICZjcGctPnA7CiAJc3RydWN0IHNlY19hY2NlbF9jb25maWcgb3AgPSB7IDAgfTsKQEAgLTMxNCw2ICszMDgsOCBAQAogCQlicmVhazsKIAljYXNlIENPUF9ITUFDX1NIQTE6CiAJCW9wLmNvbmZpZyA9IENGR19PUF9NQUNfT05MWSB8IENGR19NQUNNX0hNQUNfU0hBMTsKKwkJbWVtY3B5KGNwZy0+c3JhbSArIFNSQU1fSE1BQ19JVl9JTiwKKwkJCQl0Zm1fY3R4LT5pdnMsIHNpemVvZih0Zm1fY3R4LT5pdnMpKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0zNDUsMTEgKzM0MSwxNiBAQAogCQkJb3AuY29uZmlnIHw9IENGR19MQVNUX0ZSQUc7CiAJCWVsc2UKIAkJCW9wLmNvbmZpZyB8PSBDRkdfTUlEX0ZSQUc7CisKKwkJd3JpdGVsKHJlcV9jdHgtPnN0YXRlWzBdLCBjcGctPnJlZyArIERJR0VTVF9JTklUSUFMX1ZBTF9BKTsKKwkJd3JpdGVsKHJlcV9jdHgtPnN0YXRlWzFdLCBjcGctPnJlZyArIERJR0VTVF9JTklUSUFMX1ZBTF9CKTsKKwkJd3JpdGVsKHJlcV9jdHgtPnN0YXRlWzJdLCBjcGctPnJlZyArIERJR0VTVF9JTklUSUFMX1ZBTF9DKTsKKwkJd3JpdGVsKHJlcV9jdHgtPnN0YXRlWzNdLCBjcGctPnJlZyArIERJR0VTVF9JTklUSUFMX1ZBTF9EKTsKKwkJd3JpdGVsKHJlcV9jdHgtPnN0YXRlWzRdLCBjcGctPnJlZyArIERJR0VTVF9JTklUSUFMX1ZBTF9FKTsKIAl9CiAKIAltZW1jcHkoY3BnLT5zcmFtICsgU1JBTV9DT05GSUcsICZvcCwgc2l6ZW9mKHN0cnVjdCBzZWNfYWNjZWxfY29uZmlnKSk7CiAKLQl3cml0ZWwoU1JBTV9DT05GSUcsIGNwZy0+cmVnICsgU0VDX0FDQ0VMX0RFU0NfUDApOwogCS8qIEdPICovCiAJd3JpdGVsKFNFQ19DTURfRU5fU0VDX0FDQ0wwLCBjcGctPnJlZyArIFNFQ19BQ0NFTF9DTUQpOwogCkBAIC00MDksMTIgKzQxMCw2IEBACiAJCWNvcHlfc3JjX3RvX2J1ZigmY3BnLT5wLCBjdHgtPmJ1ZmZlciwgY3R4LT5leHRyYV9ieXRlcyk7CiAJc2dfbWl0ZXJfc3RvcCgmY3BnLT5wLnNyY19zZ19pdCk7CiAKLQljdHgtPnN0YXRlWzBdID0gcmVhZGwoY3BnLT5yZWcgKyBESUdFU1RfSU5JVElBTF9WQUxfQSk7Ci0JY3R4LT5zdGF0ZVsxXSA9IHJlYWRsKGNwZy0+cmVnICsgRElHRVNUX0lOSVRJQUxfVkFMX0IpOwotCWN0eC0+c3RhdGVbMl0gPSByZWFkbChjcGctPnJlZyArIERJR0VTVF9JTklUSUFMX1ZBTF9DKTsKLQljdHgtPnN0YXRlWzNdID0gcmVhZGwoY3BnLT5yZWcgKyBESUdFU1RfSU5JVElBTF9WQUxfRCk7Ci0JY3R4LT5zdGF0ZVs0XSA9IHJlYWRsKGNwZy0+cmVnICsgRElHRVNUX0lOSVRJQUxfVkFMX0UpOwotCiAJaWYgKGxpa2VseShjdHgtPmxhc3RfY2h1bmspKSB7CiAJCWlmIChsaWtlbHkoY3R4LT5jb3VudCA8PSBNQVhfSFdfSEFTSF9TSVpFKSkgewogCQkJbWVtY3B5KHJlcS0+cmVzdWx0LCBjcGctPnNyYW0gKyBTUkFNX0RJR0VTVF9CVUYsCkBAIC00MjIsNiArNDE3LDEyIEBACiAJCQkJCQkgICAgICAgKHJlcSkpKTsKIAkJfSBlbHNlCiAJCQltdl9oYXNoX2ZpbmFsX2ZhbGxiYWNrKHJlcSk7CisJfSBlbHNlIHsKKwkJY3R4LT5zdGF0ZVswXSA9IHJlYWRsKGNwZy0+cmVnICsgRElHRVNUX0lOSVRJQUxfVkFMX0EpOworCQljdHgtPnN0YXRlWzFdID0gcmVhZGwoY3BnLT5yZWcgKyBESUdFU1RfSU5JVElBTF9WQUxfQik7CisJCWN0eC0+c3RhdGVbMl0gPSByZWFkbChjcGctPnJlZyArIERJR0VTVF9JTklUSUFMX1ZBTF9DKTsKKwkJY3R4LT5zdGF0ZVszXSA9IHJlYWRsKGNwZy0+cmVnICsgRElHRVNUX0lOSVRJQUxfVkFMX0QpOworCQljdHgtPnN0YXRlWzRdID0gcmVhZGwoY3BnLT5yZWcgKyBESUdFU1RfSU5JVElBTF9WQUxfRSk7CiAJfQogfQogCkBAIC00ODAsNyArNDgxLDcgQEAKIAlpbnQgaSA9IDA7CiAJc2l6ZV90IGN1cl9sZW47CiAKLQl3aGlsZSAoMSkgeworCXdoaWxlIChzbCkgewogCQljdXJfbGVuID0gc2xbaV0ubGVuZ3RoOwogCQkrK2k7CiAJCWlmICh0b3RhbF9ieXRlcyA+IGN1cl9sZW4pCkBAIC01MTcsMjkgKzUxOCwxMiBAQAogewogCXN0cnVjdCByZXFfcHJvZ3Jlc3MgKnAgPSAmY3BnLT5wOwogCXN0cnVjdCBtdl9yZXFfaGFzaF9jdHggKmN0eCA9IGFoYXNoX3JlcXVlc3RfY3R4KHJlcSk7Ci0JY29uc3Qgc3RydWN0IG12X3RmbV9oYXNoX2N0eCAqdGZtX2N0eCA9IGNyeXB0b190Zm1fY3R4KHJlcS0+YmFzZS50Zm0pOwogCWludCBudW1fc2dzLCBod19ieXRlcywgb2xkX2V4dHJhX2J5dGVzLCByYzsKIAljcGctPmN1cl9yZXEgPSAmcmVxLT5iYXNlOwogCW1lbXNldChwLCAwLCBzaXplb2Yoc3RydWN0IHJlcV9wcm9ncmVzcykpOwogCWh3X2J5dGVzID0gcmVxLT5uYnl0ZXMgKyBjdHgtPmV4dHJhX2J5dGVzOwogCW9sZF9leHRyYV9ieXRlcyA9IGN0eC0+ZXh0cmFfYnl0ZXM7CiAKLQlpZiAodW5saWtlbHkoY3R4LT5leHRyYV9ieXRlcykpIHsKLQkJbWVtY3B5KGNwZy0+c3JhbSArIFNSQU1fREFUQV9JTl9TVEFSVCwgY3R4LT5idWZmZXIsCi0JCSAgICAgICBjdHgtPmV4dHJhX2J5dGVzKTsKLQkJcC0+Y3J5cHRfbGVuID0gY3R4LT5leHRyYV9ieXRlczsKLQl9Ci0KLQltZW1jcHkoY3BnLT5zcmFtICsgU1JBTV9ITUFDX0lWX0lOLCB0Zm1fY3R4LT5pdnMsIHNpemVvZih0Zm1fY3R4LT5pdnMpKTsKLQotCWlmICh1bmxpa2VseSghY3R4LT5maXJzdF9oYXNoKSkgewotCQl3cml0ZWwoY3R4LT5zdGF0ZVswXSwgY3BnLT5yZWcgKyBESUdFU1RfSU5JVElBTF9WQUxfQSk7Ci0JCXdyaXRlbChjdHgtPnN0YXRlWzFdLCBjcGctPnJlZyArIERJR0VTVF9JTklUSUFMX1ZBTF9CKTsKLQkJd3JpdGVsKGN0eC0+c3RhdGVbMl0sIGNwZy0+cmVnICsgRElHRVNUX0lOSVRJQUxfVkFMX0MpOwotCQl3cml0ZWwoY3R4LT5zdGF0ZVszXSwgY3BnLT5yZWcgKyBESUdFU1RfSU5JVElBTF9WQUxfRCk7Ci0JCXdyaXRlbChjdHgtPnN0YXRlWzRdLCBjcGctPnJlZyArIERJR0VTVF9JTklUSUFMX1ZBTF9FKTsKLQl9Ci0KIAljdHgtPmV4dHJhX2J5dGVzID0gaHdfYnl0ZXMgJSBTSEExX0JMT0NLX1NJWkU7CiAJaWYgKGN0eC0+ZXh0cmFfYnl0ZXMgIT0gMAogCSAgICAmJiAoIWN0eC0+bGFzdF9jaHVuayB8fCBjdHgtPmNvdW50ID4gTUFYX0hXX0hBU0hfU0laRSkpCkBAIC01NTUsNiArNTM5LDEyIEBACiAJCXAtPmNvbXBsZXRlID0gbXZfaGFzaF9hbGdvX2NvbXBsZXRpb247CiAJCXAtPnByb2Nlc3MgPSBtdl9wcm9jZXNzX2hhc2hfY3VycmVudDsKIAorCQlpZiAodW5saWtlbHkob2xkX2V4dHJhX2J5dGVzKSkgeworCQkJbWVtY3B5KGNwZy0+c3JhbSArIFNSQU1fREFUQV9JTl9TVEFSVCwgY3R4LT5idWZmZXIsCisJCQkgICAgICAgb2xkX2V4dHJhX2J5dGVzKTsKKwkJCXAtPmNyeXB0X2xlbiA9IG9sZF9leHRyYV9ieXRlczsKKwkJfQorCiAJCW12X3Byb2Nlc3NfaGFzaF9jdXJyZW50KDEpOwogCX0gZWxzZSB7CiAJCWNvcHlfc3JjX3RvX2J1ZihwLCBjdHgtPmJ1ZmZlciArIG9sZF9leHRyYV9ieXRlcywKQEAgLTYwMyw5ICs1OTMsNyBAQAogCQkJaWYgKGFzeW5jX3JlcS0+dGZtLT5fX2NydF9hbGctPmNyYV90eXBlICE9CiAJCQkgICAgJmNyeXB0b19haGFzaF90eXBlKSB7CiAJCQkJc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxID0KLQkJCQkgICAgY29udGFpbmVyX29mKGFzeW5jX3JlcSwKLQkJCQkJCSBzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0LAotCQkJCQkJIGJhc2UpOworCQkJCSAgICBhYmxrY2lwaGVyX3JlcXVlc3RfY2FzdChhc3luY19yZXEpOwogCQkJCW12X3N0YXJ0X25ld19jcnlwdF9yZXEocmVxKTsKIAkJCX0gZWxzZSB7CiAJCQkJc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSA9CkBAIC03MjIsMTkgKzcxMCwxMyBAQAogc3RhdGljIGludCBtdl9oYXNoX2ZpbmFsKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpCiB7CiAJc3RydWN0IG12X3JlcV9oYXNoX2N0eCAqY3R4ID0gYWhhc2hfcmVxdWVzdF9jdHgocmVxKTsKLQkvKiBkdW1teSBidWZmZXIgb2YgNCBieXRlcyAqLwotCXNnX2luaXRfb25lKCZjdHgtPmR1bW15c2csIGN0eC0+YnVmZmVyLCA0KTsKLQkvKiBJIHRoaW5rIEknbSBhbGxvd2VkIHRvIGRvIHRoYXQuLi4gKi8KLQlhaGFzaF9yZXF1ZXN0X3NldF9jcnlwdChyZXEsICZjdHgtPmR1bW15c2csIHJlcS0+cmVzdWx0LCAwKTsKKwogCW12X3VwZGF0ZV9oYXNoX3JlcV9jdHgoY3R4LCAxLCAwKTsKIAlyZXR1cm4gbXZfaGFuZGxlX3JlcSgmcmVxLT5iYXNlKTsKIH0KIAogc3RhdGljIGludCBtdl9oYXNoX2ZpbnVwKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpCiB7Ci0JaWYgKCFyZXEtPm5ieXRlcykKLQkJcmV0dXJuIG12X2hhc2hfZmluYWwocmVxKTsKLQogCW12X3VwZGF0ZV9oYXNoX3JlcV9jdHgoYWhhc2hfcmVxdWVzdF9jdHgocmVxKSwgMSwgcmVxLT5uYnl0ZXMpOwogCXJldHVybiBtdl9oYW5kbGVfcmVxKCZyZXEtPmJhc2UpOwogfQpAQCAtMTA2NSwxNCArMTA0NywyMSBAQAogCiAJd3JpdGVsKFNFQ19JTlRfQUNDRUwwX0RPTkUsIGNwZy0+cmVnICsgU0VDX0FDQ0VMX0lOVF9NQVNLKTsKIAl3cml0ZWwoU0VDX0NGR19TVE9QX0RJR19FUlIsIGNwZy0+cmVnICsgU0VDX0FDQ0VMX0NGRyk7CisJd3JpdGVsKFNSQU1fQ09ORklHLCBjcGctPnJlZyArIFNFQ19BQ0NFTF9ERVNDX1AwKTsKIAogCXJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJm12X2Flc19hbGdfZWNiKTsKLQlpZiAocmV0KQorCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBNVl9DRVNBCisJCSAgICAgICAiQ291bGQgbm90IHJlZ2lzdGVyIGFlcy1lY2IgZHJpdmVyXG4iKTsKIAkJZ290byBlcnJfaXJxOworCX0KIAogCXJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJm12X2Flc19hbGdfY2JjKTsKLQlpZiAocmV0KQorCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBNVl9DRVNBCisJCSAgICAgICAiQ291bGQgbm90IHJlZ2lzdGVyIGFlcy1jYmMgZHJpdmVyXG4iKTsKIAkJZ290byBlcnJfdW5yZWdfZWNiOworCX0KIAogCXJldCA9IGNyeXB0b19yZWdpc3Rlcl9haGFzaCgmbXZfc2hhMV9hbGcpOwogCWlmIChyZXQgPT0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL29tYXAtc2hhbS5jIGIvZHJpdmVycy9jcnlwdG8vb21hcC1zaGFtLmMKaW5kZXggNDY1Y2RlMy4uYmE4ZjFlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vb21hcC1zaGFtLmMKKysrIGIvZHJpdmVycy9jcnlwdG8vb21hcC1zaGFtLmMKQEAgLTc4LDcgKzc4LDYgQEAKICNkZWZpbmUgRkxBR1NfU0hBMQkJMHgwMDEwCiAjZGVmaW5lIEZMQUdTX0RNQV9BQ1RJVkUJMHgwMDIwCiAjZGVmaW5lIEZMQUdTX09VVFBVVF9SRUFEWQkweDAwNDAKLSNkZWZpbmUgRkxBR1NfQ0xFQU4JCTB4MDA4MAogI2RlZmluZSBGTEFHU19JTklUCQkweDAxMDAKICNkZWZpbmUgRkxBR1NfQ1BVCQkweDAyMDAKICNkZWZpbmUgRkxBR1NfSE1BQwkJMHgwNDAwCkBAIC01MTEsMjYgKzUxMCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIG9tYXBfc2hhbV9jbGVhbnVwKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpCi17Ci0Jc3RydWN0IG9tYXBfc2hhbV9yZXFjdHggKmN0eCA9IGFoYXNoX3JlcXVlc3RfY3R4KHJlcSk7Ci0Jc3RydWN0IG9tYXBfc2hhbV9kZXYgKmRkID0gY3R4LT5kZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRkLT5sb2NrLCBmbGFncyk7Ci0JaWYgKGN0eC0+ZmxhZ3MgJiBGTEFHU19DTEVBTikgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZC0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQotCWN0eC0+ZmxhZ3MgfD0gRkxBR1NfQ0xFQU47Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGQtPmxvY2ssIGZsYWdzKTsKLQotCWlmIChjdHgtPmRpZ2NudCkKLQkJb21hcF9zaGFtX2NvcHlfcmVhZHlfaGFzaChyZXEpOwotCi0JZGV2X2RiZyhkZC0+ZGV2LCAiZGlnY250OiAlZCwgYnVmY250OiAlZFxuIiwgY3R4LT5kaWdjbnQsIGN0eC0+YnVmY250KTsKLX0KLQogc3RhdGljIGludCBvbWFwX3NoYW1faW5pdChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKQogewogCXN0cnVjdCBjcnlwdG9fYWhhc2ggKnRmbSA9IGNyeXB0b19haGFzaF9yZXF0Zm0ocmVxKTsKQEAgLTYxOCw5ICs1OTcsOCBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgb21hcF9zaGFtX2ZpbmlzaF9yZXFfaG1hYyhzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKQorc3RhdGljIGludCBvbWFwX3NoYW1fZmluaXNoX2htYWMoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSkKIHsKLQlzdHJ1Y3Qgb21hcF9zaGFtX3JlcWN0eCAqY3R4ID0gYWhhc2hfcmVxdWVzdF9jdHgocmVxKTsKIAlzdHJ1Y3Qgb21hcF9zaGFtX2N0eCAqdGN0eCA9IGNyeXB0b190Zm1fY3R4KHJlcS0+YmFzZS50Zm0pOwogCXN0cnVjdCBvbWFwX3NoYW1faG1hY19jdHggKmJjdHggPSB0Y3R4LT5iYXNlOwogCWludCBicyA9IGNyeXB0b19zaGFzaF9ibG9ja3NpemUoYmN0eC0+c2hhc2gpOwpAQCAtNjM1LDcgKzYxMywyNCBAQAogCiAJcmV0dXJuIGNyeXB0b19zaGFzaF9pbml0KCZkZXNjLnNoYXNoKSA/OgogCSAgICAgICBjcnlwdG9fc2hhc2hfdXBkYXRlKCZkZXNjLnNoYXNoLCBiY3R4LT5vcGFkLCBicykgPzoKLQkgICAgICAgY3J5cHRvX3NoYXNoX2ZpbnVwKCZkZXNjLnNoYXNoLCBjdHgtPmRpZ2VzdCwgZHMsIGN0eC0+ZGlnZXN0KTsKKwkgICAgICAgY3J5cHRvX3NoYXNoX2ZpbnVwKCZkZXNjLnNoYXNoLCByZXEtPnJlc3VsdCwgZHMsIHJlcS0+cmVzdWx0KTsKK30KKworc3RhdGljIGludCBvbWFwX3NoYW1fZmluaXNoKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IG9tYXBfc2hhbV9yZXFjdHggKmN0eCA9IGFoYXNoX3JlcXVlc3RfY3R4KHJlcSk7CisJc3RydWN0IG9tYXBfc2hhbV9kZXYgKmRkID0gY3R4LT5kZDsKKwlpbnQgZXJyID0gMDsKKworCWlmIChjdHgtPmRpZ2NudCkgeworCQlvbWFwX3NoYW1fY29weV9yZWFkeV9oYXNoKHJlcSk7CisJCWlmIChjdHgtPmZsYWdzICYgRkxBR1NfSE1BQykKKwkJCWVyciA9IG9tYXBfc2hhbV9maW5pc2hfaG1hYyhyZXEpOworCX0KKworCWRldl9kYmcoZGQtPmRldiwgImRpZ2NudDogJWQsIGJ1ZmNudDogJWRcbiIsIGN0eC0+ZGlnY250LCBjdHgtPmJ1ZmNudCk7CisKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBvbWFwX3NoYW1fZmluaXNoX3JlcShzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxLCBpbnQgZXJyKQpAQCAtNjQ1LDE1ICs2NDAsMTIgQEAKIAogCWlmICghZXJyKSB7CiAJCW9tYXBfc2hhbV9jb3B5X2hhc2goY3R4LT5kZC0+cmVxLCAxKTsKLQkJaWYgKGN0eC0+ZmxhZ3MgJiBGTEFHU19ITUFDKQotCQkJZXJyID0gb21hcF9zaGFtX2ZpbmlzaF9yZXFfaG1hYyhyZXEpOworCQlpZiAoY3R4LT5mbGFncyAmIEZMQUdTX0ZJTkFMKQorCQkJZXJyID0gb21hcF9zaGFtX2ZpbmlzaChyZXEpOwogCX0gZWxzZSB7CiAJCWN0eC0+ZmxhZ3MgfD0gRkxBR1NfRVJST1I7CiAJfQogCi0JaWYgKChjdHgtPmZsYWdzICYgRkxBR1NfRklOQUwpIHx8IGVycikKLQkJb21hcF9zaGFtX2NsZWFudXAocmVxKTsKLQogCWNsa19kaXNhYmxlKGRkLT5pY2xrKTsKIAlkZC0+ZmxhZ3MgJj0gfkZMQUdTX0JVU1k7CiAKQEAgLTgwOSwyMiArODAxLDIxIEBACiBzdGF0aWMgaW50IG9tYXBfc2hhbV9maW5hbChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKQogewogCXN0cnVjdCBvbWFwX3NoYW1fcmVxY3R4ICpjdHggPSBhaGFzaF9yZXF1ZXN0X2N0eChyZXEpOwotCWludCBlcnIgPSAwOwogCiAJY3R4LT5mbGFncyB8PSBGTEFHU19GSU5VUDsKIAotCWlmICghKGN0eC0+ZmxhZ3MgJiBGTEFHU19FUlJPUikpIHsKLQkJLyogT01BUCBIVyBhY2NlbCB3b3JrcyBvbmx5IHdpdGggYnVmZmVycyA+PSA5ICovCi0JCS8qIEhNQUMgaXMgYWx3YXlzID49IDkgYmVjYXVzZSBvZiBpcGFkICovCi0JCWlmICgoY3R4LT5kaWdjbnQgKyBjdHgtPmJ1ZmNudCkgPCA5KQotCQkJZXJyID0gb21hcF9zaGFtX2ZpbmFsX3NoYXNoKHJlcSk7Ci0JCWVsc2UgaWYgKGN0eC0+YnVmY250KQotCQkJcmV0dXJuIG9tYXBfc2hhbV9lbnF1ZXVlKHJlcSwgT1BfRklOQUwpOwotCX0KKwlpZiAoY3R4LT5mbGFncyAmIEZMQUdTX0VSUk9SKQorCQlyZXR1cm4gMDsgLyogdW5jb21wbGV0ZWQgaGFzaCBpcyBub3QgbmVlZGVkICovCiAKLQlvbWFwX3NoYW1fY2xlYW51cChyZXEpOworCS8qIE9NQVAgSFcgYWNjZWwgd29ya3Mgb25seSB3aXRoIGJ1ZmZlcnMgPj0gOSAqLworCS8qIEhNQUMgaXMgYWx3YXlzID49IDkgYmVjYXVzZSBpcGFkID09IGJsb2NrIHNpemUgKi8KKwlpZiAoKGN0eC0+ZGlnY250ICsgY3R4LT5idWZjbnQpIDwgOSkKKwkJcmV0dXJuIG9tYXBfc2hhbV9maW5hbF9zaGFzaChyZXEpOworCWVsc2UgaWYgKGN0eC0+YnVmY250KQorCQlyZXR1cm4gb21hcF9zaGFtX2VucXVldWUocmVxLCBPUF9GSU5BTCk7CiAKLQlyZXR1cm4gZXJyOworCS8qIGNvcHkgcmVhZHkgaGFzaCAoKyBmaW5hbGl6ZSBobWFjKSAqLworCXJldHVybiBvbWFwX3NoYW1fZmluaXNoKHJlcSk7CiB9CiAKIHN0YXRpYyBpbnQgb21hcF9zaGFtX2ZpbnVwKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpCkBAIC04MzUsNyArODI2LDcgQEAKIAljdHgtPmZsYWdzIHw9IEZMQUdTX0ZJTlVQOwogCiAJZXJyMSA9IG9tYXBfc2hhbV91cGRhdGUocmVxKTsKLQlpZiAoZXJyMSA9PSAtRUlOUFJPR1JFU1MpCisJaWYgKGVycjEgPT0gLUVJTlBST0dSRVNTIHx8IGVycjEgPT0gLUVCVVNZKQogCQlyZXR1cm4gZXJyMTsKIAkvKgogCSAqIGZpbmFsKCkgaGFzIHRvIGJlIGFsd2F5cyBjYWxsZWQgdG8gY2xlYW51cCByZXNvdXJjZXMKQEAgLTg5MCw4ICs4ODEsNiBAQAogCXN0cnVjdCBvbWFwX3NoYW1fY3R4ICp0Y3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKIAljb25zdCBjaGFyICphbGdfbmFtZSA9IGNyeXB0b190Zm1fYWxnX25hbWUodGZtKTsKIAotCXByX2luZm8oImVudGVyXG4iKTsKLQogCS8qIEFsbG9jYXRlIGEgZmFsbGJhY2sgYW5kIGFib3J0IGlmIGl0IGZhaWxlZC4gKi8KIAl0Y3R4LT5mYWxsYmFjayA9IGNyeXB0b19hbGxvY19zaGFzaChhbGdfbmFtZSwgMCwKIAkJCQkJICAgIENSWVBUT19BTEdfTkVFRF9GQUxMQkFDSyk7CkBAIC0xMjk3LDcgKzEyODYsOCBAQAogCXByX2luZm8oImxvYWRpbmcgJXMgZHJpdmVyXG4iLCAib21hcC1zaGFtIik7CiAKIAlpZiAoIWNwdV9jbGFzc19pc19vbWFwMigpIHx8Ci0JCW9tYXBfdHlwZSgpICE9IE9NQVAyX0RFVklDRV9UWVBFX1NFQykgeworCQkob21hcF90eXBlKCkgIT0gT01BUDJfREVWSUNFX1RZUEVfU0VDICYmCisJCQlvbWFwX3R5cGUoKSAhPSBPTUFQMl9ERVZJQ0VfVFlQRV9FTVUpKSB7CiAJCXByX2VycigiVW5zdXBwb3J0ZWQgY3B1XG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1zaGEuYyBiL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2stc2hhLmMKaW5kZXggYWRmMDc1Yi4uMDZiZGI0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1zaGEuYworKysgYi9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLXNoYS5jCkBAIC0yODgsOSArMjg4LDI1MCBAQAogCX0KIH07CiAKKy8qIEFkZCB0d28gc2hhc2hfYWxnIGluc3RhbmNlIGZvciBoYXJkd2FyZS1pbXBsZW1lbnRlZCAqCisqIG11bHRpcGxlLXBhcnRzIGhhc2ggc3VwcG9ydGVkIGJ5IFZJQSBOYW5vIFByb2Nlc3Nvci4qLworc3RhdGljIGludCBwYWRsb2NrX3NoYTFfaW5pdF9uYW5vKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjKQoreworCXN0cnVjdCBzaGExX3N0YXRlICpzY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisKKwkqc2N0eCA9IChzdHJ1Y3Qgc2hhMV9zdGF0ZSl7CisJCS5zdGF0ZSA9IHsgU0hBMV9IMCwgU0hBMV9IMSwgU0hBMV9IMiwgU0hBMV9IMywgU0hBMV9INCB9LAorCX07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYWRsb2NrX3NoYTFfdXBkYXRlX25hbm8oc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsCisJCQljb25zdCB1OCAqZGF0YSwJdW5zaWduZWQgaW50IGxlbikKK3sKKwlzdHJ1Y3Qgc2hhMV9zdGF0ZSAqc2N0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworCXVuc2lnbmVkIGludCBwYXJ0aWFsLCBkb25lOworCWNvbnN0IHU4ICpzcmM7CisJLypUaGUgUEhFIHJlcXVpcmUgdGhlIG91dCBidWZmZXIgbXVzdCAxMjggYnl0ZXMgYW5kIDE2LWJ5dGVzIGFsaWduZWQqLworCXU4IGJ1ZlsxMjggKyBQQURMT0NLX0FMSUdOTUVOVCAtIFNUQUNLX0FMSUdOXSBfX2F0dHJpYnV0ZV9fCisJCSgoYWxpZ25lZChTVEFDS19BTElHTikpKTsKKwl1OCAqZHN0ID0gUFRSX0FMSUdOKCZidWZbMF0sIFBBRExPQ0tfQUxJR05NRU5UKTsKKwlpbnQgdHNfc3RhdGU7CisKKwlwYXJ0aWFsID0gc2N0eC0+Y291bnQgJiAweDNmOworCXNjdHgtPmNvdW50ICs9IGxlbjsKKwlkb25lID0gMDsKKwlzcmMgPSBkYXRhOworCW1lbWNweShkc3QsICh1OCAqKShzY3R4LT5zdGF0ZSksIFNIQTFfRElHRVNUX1NJWkUpOworCisJaWYgKChwYXJ0aWFsICsgbGVuKSA+PSBTSEExX0JMT0NLX1NJWkUpIHsKKworCQkvKiBBcHBlbmQgdGhlIGJ5dGVzIGluIHN0YXRlJ3MgYnVmZmVyIHRvIGEgYmxvY2sgdG8gaGFuZGxlICovCisJCWlmIChwYXJ0aWFsKSB7CisJCQlkb25lID0gLXBhcnRpYWw7CisJCQltZW1jcHkoc2N0eC0+YnVmZmVyICsgcGFydGlhbCwgZGF0YSwKKwkJCQlkb25lICsgU0hBMV9CTE9DS19TSVpFKTsKKwkJCXNyYyA9IHNjdHgtPmJ1ZmZlcjsKKwkJCXRzX3N0YXRlID0gaXJxX3RzX3NhdmUoKTsKKwkJCWFzbSB2b2xhdGlsZSAoIi5ieXRlIDB4ZjMsMHgwZiwweGE2LDB4YzgiCisJCQk6ICIrUyIoc3JjKSwgIitEIihkc3QpIFwKKwkJCTogImEiKChsb25nKS0xKSwgImMiKCh1bnNpZ25lZCBsb25nKTEpKTsKKwkJCWlycV90c19yZXN0b3JlKHRzX3N0YXRlKTsKKwkJCWRvbmUgKz0gU0hBMV9CTE9DS19TSVpFOworCQkJc3JjID0gZGF0YSArIGRvbmU7CisJCX0KKworCQkvKiBQcm9jZXNzIHRoZSBsZWZ0IGJ5dGVzIGZyb20gdGhlIGlucHV0IGRhdGEgKi8KKwkJaWYgKGxlbiAtIGRvbmUgPj0gU0hBMV9CTE9DS19TSVpFKSB7CisJCQl0c19zdGF0ZSA9IGlycV90c19zYXZlKCk7CisJCQlhc20gdm9sYXRpbGUgKCIuYnl0ZSAweGYzLDB4MGYsMHhhNiwweGM4IgorCQkJOiAiK1MiKHNyYyksICIrRCIoZHN0KQorCQkJOiAiYSIoKGxvbmcpLTEpLAorCQkJImMiKCh1bnNpZ25lZCBsb25nKSgobGVuIC0gZG9uZSkgLyBTSEExX0JMT0NLX1NJWkUpKSk7CisJCQlpcnFfdHNfcmVzdG9yZSh0c19zdGF0ZSk7CisJCQlkb25lICs9ICgobGVuIC0gZG9uZSkgLSAobGVuIC0gZG9uZSkgJSBTSEExX0JMT0NLX1NJWkUpOworCQkJc3JjID0gZGF0YSArIGRvbmU7CisJCX0KKwkJcGFydGlhbCA9IDA7CisJfQorCW1lbWNweSgodTggKikoc2N0eC0+c3RhdGUpLCBkc3QsIFNIQTFfRElHRVNUX1NJWkUpOworCW1lbWNweShzY3R4LT5idWZmZXIgKyBwYXJ0aWFsLCBzcmMsIGxlbiAtIGRvbmUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFkbG9ja19zaGExX2ZpbmFsX25hbm8oc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIHU4ICpvdXQpCit7CisJc3RydWN0IHNoYTFfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBzaGExX3N0YXRlICopc2hhc2hfZGVzY19jdHgoZGVzYyk7CisJdW5zaWduZWQgaW50IHBhcnRpYWwsIHBhZGxlbjsKKwlfX2JlNjQgYml0czsKKwlzdGF0aWMgY29uc3QgdTggcGFkZGluZ1s2NF0gPSB7IDB4ODAsIH07CisKKwliaXRzID0gY3B1X3RvX2JlNjQoc3RhdGUtPmNvdW50IDw8IDMpOworCisJLyogUGFkIG91dCB0byA1NiBtb2QgNjQgKi8KKwlwYXJ0aWFsID0gc3RhdGUtPmNvdW50ICYgMHgzZjsKKwlwYWRsZW4gPSAocGFydGlhbCA8IDU2KSA/ICg1NiAtIHBhcnRpYWwpIDogKCg2NCs1NikgLSBwYXJ0aWFsKTsKKwlwYWRsb2NrX3NoYTFfdXBkYXRlX25hbm8oZGVzYywgcGFkZGluZywgcGFkbGVuKTsKKworCS8qIEFwcGVuZCBsZW5ndGggZmllbGQgYnl0ZXMgKi8KKwlwYWRsb2NrX3NoYTFfdXBkYXRlX25hbm8oZGVzYywgKGNvbnN0IHU4ICopJmJpdHMsIHNpemVvZihiaXRzKSk7CisKKwkvKiBTd2FwIHRvIG91dHB1dCAqLworCXBhZGxvY2tfb3V0cHV0X2Jsb2NrKCh1aW50MzJfdCAqKShzdGF0ZS0+c3RhdGUpLCAodWludDMyX3QgKilvdXQsIDUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFkbG9ja19zaGEyNTZfaW5pdF9uYW5vKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjKQoreworCXN0cnVjdCBzaGEyNTZfc3RhdGUgKnNjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKworCSpzY3R4ID0gKHN0cnVjdCBzaGEyNTZfc3RhdGUpeworCQkuc3RhdGUgPSB7IFNIQTI1Nl9IMCwgU0hBMjU2X0gxLCBTSEEyNTZfSDIsIFNIQTI1Nl9IMywgXAorCQkJCVNIQTI1Nl9INCwgU0hBMjU2X0g1LCBTSEEyNTZfSDYsIFNIQTI1Nl9IN30sCisJfTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhZGxvY2tfc2hhMjU2X3VwZGF0ZV9uYW5vKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCBjb25zdCB1OCAqZGF0YSwKKwkJCSAgdW5zaWduZWQgaW50IGxlbikKK3sKKwlzdHJ1Y3Qgc2hhMjU2X3N0YXRlICpzY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisJdW5zaWduZWQgaW50IHBhcnRpYWwsIGRvbmU7CisJY29uc3QgdTggKnNyYzsKKwkvKlRoZSBQSEUgcmVxdWlyZSB0aGUgb3V0IGJ1ZmZlciBtdXN0IDEyOCBieXRlcyBhbmQgMTYtYnl0ZXMgYWxpZ25lZCovCisJdTggYnVmWzEyOCArIFBBRExPQ0tfQUxJR05NRU5UIC0gU1RBQ0tfQUxJR05dIF9fYXR0cmlidXRlX18KKwkJKChhbGlnbmVkKFNUQUNLX0FMSUdOKSkpOworCXU4ICpkc3QgPSBQVFJfQUxJR04oJmJ1ZlswXSwgUEFETE9DS19BTElHTk1FTlQpOworCWludCB0c19zdGF0ZTsKKworCXBhcnRpYWwgPSBzY3R4LT5jb3VudCAmIDB4M2Y7CisJc2N0eC0+Y291bnQgKz0gbGVuOworCWRvbmUgPSAwOworCXNyYyA9IGRhdGE7CisJbWVtY3B5KGRzdCwgKHU4ICopKHNjdHgtPnN0YXRlKSwgU0hBMjU2X0RJR0VTVF9TSVpFKTsKKworCWlmICgocGFydGlhbCArIGxlbikgPj0gU0hBMjU2X0JMT0NLX1NJWkUpIHsKKworCQkvKiBBcHBlbmQgdGhlIGJ5dGVzIGluIHN0YXRlJ3MgYnVmZmVyIHRvIGEgYmxvY2sgdG8gaGFuZGxlICovCisJCWlmIChwYXJ0aWFsKSB7CisJCQlkb25lID0gLXBhcnRpYWw7CisJCQltZW1jcHkoc2N0eC0+YnVmICsgcGFydGlhbCwgZGF0YSwKKwkJCQlkb25lICsgU0hBMjU2X0JMT0NLX1NJWkUpOworCQkJc3JjID0gc2N0eC0+YnVmOworCQkJdHNfc3RhdGUgPSBpcnFfdHNfc2F2ZSgpOworCQkJYXNtIHZvbGF0aWxlICgiLmJ5dGUgMHhmMywweDBmLDB4YTYsMHhkMCIKKwkJCTogIitTIihzcmMpLCAiK0QiKGRzdCkKKwkJCTogImEiKChsb25nKS0xKSwgImMiKCh1bnNpZ25lZCBsb25nKTEpKTsKKwkJCWlycV90c19yZXN0b3JlKHRzX3N0YXRlKTsKKwkJCWRvbmUgKz0gU0hBMjU2X0JMT0NLX1NJWkU7CisJCQlzcmMgPSBkYXRhICsgZG9uZTsKKwkJfQorCisJCS8qIFByb2Nlc3MgdGhlIGxlZnQgYnl0ZXMgZnJvbSBpbnB1dCBkYXRhKi8KKwkJaWYgKGxlbiAtIGRvbmUgPj0gU0hBMjU2X0JMT0NLX1NJWkUpIHsKKwkJCXRzX3N0YXRlID0gaXJxX3RzX3NhdmUoKTsKKwkJCWFzbSB2b2xhdGlsZSAoIi5ieXRlIDB4ZjMsMHgwZiwweGE2LDB4ZDAiCisJCQk6ICIrUyIoc3JjKSwgIitEIihkc3QpCisJCQk6ICJhIigobG9uZyktMSksCisJCQkiYyIoKHVuc2lnbmVkIGxvbmcpKChsZW4gLSBkb25lKSAvIDY0KSkpOworCQkJaXJxX3RzX3Jlc3RvcmUodHNfc3RhdGUpOworCQkJZG9uZSArPSAoKGxlbiAtIGRvbmUpIC0gKGxlbiAtIGRvbmUpICUgNjQpOworCQkJc3JjID0gZGF0YSArIGRvbmU7CisJCX0KKwkJcGFydGlhbCA9IDA7CisJfQorCW1lbWNweSgodTggKikoc2N0eC0+c3RhdGUpLCBkc3QsIFNIQTI1Nl9ESUdFU1RfU0laRSk7CisJbWVtY3B5KHNjdHgtPmJ1ZiArIHBhcnRpYWwsIHNyYywgbGVuIC0gZG9uZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYWRsb2NrX3NoYTI1Nl9maW5hbF9uYW5vKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCB1OCAqb3V0KQoreworCXN0cnVjdCBzaGEyNTZfc3RhdGUgKnN0YXRlID0KKwkJKHN0cnVjdCBzaGEyNTZfc3RhdGUgKilzaGFzaF9kZXNjX2N0eChkZXNjKTsKKwl1bnNpZ25lZCBpbnQgcGFydGlhbCwgcGFkbGVuOworCV9fYmU2NCBiaXRzOworCXN0YXRpYyBjb25zdCB1OCBwYWRkaW5nWzY0XSA9IHsgMHg4MCwgfTsKKworCWJpdHMgPSBjcHVfdG9fYmU2NChzdGF0ZS0+Y291bnQgPDwgMyk7CisKKwkvKiBQYWQgb3V0IHRvIDU2IG1vZCA2NCAqLworCXBhcnRpYWwgPSBzdGF0ZS0+Y291bnQgJiAweDNmOworCXBhZGxlbiA9IChwYXJ0aWFsIDwgNTYpID8gKDU2IC0gcGFydGlhbCkgOiAoKDY0KzU2KSAtIHBhcnRpYWwpOworCXBhZGxvY2tfc2hhMjU2X3VwZGF0ZV9uYW5vKGRlc2MsIHBhZGRpbmcsIHBhZGxlbik7CisKKwkvKiBBcHBlbmQgbGVuZ3RoIGZpZWxkIGJ5dGVzICovCisJcGFkbG9ja19zaGEyNTZfdXBkYXRlX25hbm8oZGVzYywgKGNvbnN0IHU4ICopJmJpdHMsIHNpemVvZihiaXRzKSk7CisKKwkvKiBTd2FwIHRvIG91dHB1dCAqLworCXBhZGxvY2tfb3V0cHV0X2Jsb2NrKCh1aW50MzJfdCAqKShzdGF0ZS0+c3RhdGUpLCAodWludDMyX3QgKilvdXQsIDgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFkbG9ja19zaGFfZXhwb3J0X25hbm8oc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsCisJCQkJdm9pZCAqb3V0KQoreworCWludCBzdGF0ZXNpemUgPSBjcnlwdG9fc2hhc2hfc3RhdGVzaXplKGRlc2MtPnRmbSk7CisJdm9pZCAqc2N0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworCisJbWVtY3B5KG91dCwgc2N0eCwgc3RhdGVzaXplKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYWRsb2NrX3NoYV9pbXBvcnRfbmFubyhzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywKKwkJCQljb25zdCB2b2lkICppbikKK3sKKwlpbnQgc3RhdGVzaXplID0gY3J5cHRvX3NoYXNoX3N0YXRlc2l6ZShkZXNjLT50Zm0pOworCXZvaWQgKnNjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKworCW1lbWNweShzY3R4LCBpbiwgc3RhdGVzaXplKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzaGFzaF9hbGcgc2hhMV9hbGdfbmFubyA9IHsKKwkuZGlnZXN0c2l6ZQk9CVNIQTFfRElHRVNUX1NJWkUsCisJLmluaXQJCT0JcGFkbG9ja19zaGExX2luaXRfbmFubywKKwkudXBkYXRlCQk9CXBhZGxvY2tfc2hhMV91cGRhdGVfbmFubywKKwkuZmluYWwJCT0JcGFkbG9ja19zaGExX2ZpbmFsX25hbm8sCisJLmV4cG9ydAkJPQlwYWRsb2NrX3NoYV9leHBvcnRfbmFubywKKwkuaW1wb3J0CQk9CXBhZGxvY2tfc2hhX2ltcG9ydF9uYW5vLAorCS5kZXNjc2l6ZQk9CXNpemVvZihzdHJ1Y3Qgc2hhMV9zdGF0ZSksCisJLnN0YXRlc2l6ZQk9CXNpemVvZihzdHJ1Y3Qgc2hhMV9zdGF0ZSksCisJLmJhc2UJCT0JeworCQkuY3JhX25hbWUJCT0JInNoYTEiLAorCQkuY3JhX2RyaXZlcl9uYW1lCT0JInNoYTEtcGFkbG9jay1uYW5vIiwKKwkJLmNyYV9wcmlvcml0eQkJPQlQQURMT0NLX0NSQV9QUklPUklUWSwKKwkJLmNyYV9mbGFncwkJPQlDUllQVE9fQUxHX1RZUEVfU0hBU0gsCisJCS5jcmFfYmxvY2tzaXplCQk9CVNIQTFfQkxPQ0tfU0laRSwKKwkJLmNyYV9tb2R1bGUJCT0JVEhJU19NT0RVTEUsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBzaGFzaF9hbGcgc2hhMjU2X2FsZ19uYW5vID0geworCS5kaWdlc3RzaXplCT0JU0hBMjU2X0RJR0VTVF9TSVpFLAorCS5pbml0CQk9CXBhZGxvY2tfc2hhMjU2X2luaXRfbmFubywKKwkudXBkYXRlCQk9CXBhZGxvY2tfc2hhMjU2X3VwZGF0ZV9uYW5vLAorCS5maW5hbAkJPQlwYWRsb2NrX3NoYTI1Nl9maW5hbF9uYW5vLAorCS5leHBvcnQJCT0JcGFkbG9ja19zaGFfZXhwb3J0X25hbm8sCisJLmltcG9ydAkJPQlwYWRsb2NrX3NoYV9pbXBvcnRfbmFubywKKwkuZGVzY3NpemUJPQlzaXplb2Yoc3RydWN0IHNoYTI1Nl9zdGF0ZSksCisJLnN0YXRlc2l6ZQk9CXNpemVvZihzdHJ1Y3Qgc2hhMjU2X3N0YXRlKSwKKwkuYmFzZQkJPQl7CisJCS5jcmFfbmFtZQkJPQkic2hhMjU2IiwKKwkJLmNyYV9kcml2ZXJfbmFtZQk9CSJzaGEyNTYtcGFkbG9jay1uYW5vIiwKKwkJLmNyYV9wcmlvcml0eQkJPQlQQURMT0NLX0NSQV9QUklPUklUWSwKKwkJLmNyYV9mbGFncwkJPQlDUllQVE9fQUxHX1RZUEVfU0hBU0gsCisJCS5jcmFfYmxvY2tzaXplCQk9CVNIQTI1Nl9CTE9DS19TSVpFLAorCQkuY3JhX21vZHVsZQkJPQlUSElTX01PRFVMRSwKKwl9Cit9OworCiBzdGF0aWMgaW50IF9faW5pdCBwYWRsb2NrX2luaXQodm9pZCkKIHsKIAlpbnQgcmMgPSAtRU5PREVWOworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YSgwKTsKKwlzdHJ1Y3Qgc2hhc2hfYWxnICpzaGExOworCXN0cnVjdCBzaGFzaF9hbGcgKnNoYTI1NjsKIAogCWlmICghY3B1X2hhc19waGUpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFIFBGWCAiVklBIFBhZExvY2sgSGFzaCBFbmdpbmUgbm90IGRldGVjdGVkLlxuIik7CkBAIC0zMDIsMTEgKzU0MywyMSBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlyYyA9IGNyeXB0b19yZWdpc3Rlcl9zaGFzaCgmc2hhMV9hbGcpOworCS8qIFJlZ2lzdGVyIHRoZSBuZXdseSBhZGRlZCBhbGdvcml0aG0gbW9kdWxlIGlmIG9uICoKKwkqIFZJQSBOYW5vIHByb2Nlc3Nvciwgb3IgZWxzZSBqdXN0IGRvIGFzIGJlZm9yZSAqLworCWlmIChjLT54ODZfbW9kZWwgPCAweDBmKSB7CisJCXNoYTEgPSAmc2hhMV9hbGc7CisJCXNoYTI1NiA9ICZzaGEyNTZfYWxnOworCX0gZWxzZSB7CisJCXNoYTEgPSAmc2hhMV9hbGdfbmFubzsKKwkJc2hhMjU2ID0gJnNoYTI1Nl9hbGdfbmFubzsKKwl9CisKKwlyYyA9IGNyeXB0b19yZWdpc3Rlcl9zaGFzaChzaGExKTsKIAlpZiAocmMpCiAJCWdvdG8gb3V0OwogCi0JcmMgPSBjcnlwdG9fcmVnaXN0ZXJfc2hhc2goJnNoYTI1Nl9hbGcpOworCXJjID0gY3J5cHRvX3JlZ2lzdGVyX3NoYXNoKHNoYTI1Nik7CiAJaWYgKHJjKQogCQlnb3RvIG91dF91bnJlZzE7CiAKQEAgLTMxNSw3ICs1NjYsOCBAQAogCXJldHVybiAwOwogCiBvdXRfdW5yZWcxOgotCWNyeXB0b191bnJlZ2lzdGVyX3NoYXNoKCZzaGExX2FsZyk7CisJY3J5cHRvX3VucmVnaXN0ZXJfc2hhc2goc2hhMSk7CisKIG91dDoKIAlwcmludGsoS0VSTl9FUlIgUEZYICJWSUEgUGFkTG9jayBTSEExL1NIQTI1NiBpbml0aWFsaXphdGlvbiBmYWlsZWQuXG4iKTsKIAlyZXR1cm4gcmM7CkBAIC0zMjMsOCArNTc1LDE1IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBwYWRsb2NrX2Zpbmkodm9pZCkKIHsKLQljcnlwdG9fdW5yZWdpc3Rlcl9zaGFzaCgmc2hhMV9hbGcpOwotCWNyeXB0b191bnJlZ2lzdGVyX3NoYXNoKCZzaGEyNTZfYWxnKTsKKwlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoMCk7CisKKwlpZiAoYy0+eDg2X21vZGVsID49IDB4MGYpIHsKKwkJY3J5cHRvX3VucmVnaXN0ZXJfc2hhc2goJnNoYTFfYWxnX25hbm8pOworCQljcnlwdG9fdW5yZWdpc3Rlcl9zaGFzaCgmc2hhMjU2X2FsZ19uYW5vKTsKKwl9IGVsc2UgeworCQljcnlwdG9fdW5yZWdpc3Rlcl9zaGFzaCgmc2hhMV9hbGcpOworCQljcnlwdG9fdW5yZWdpc3Rlcl9zaGFzaCgmc2hhMjU2X2FsZyk7CisJfQogfQogCiBtb2R1bGVfaW5pdChwYWRsb2NrX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vcGljb3hjZWxsX2NyeXB0by5jIGIvZHJpdmVycy9jcnlwdG8vcGljb3hjZWxsX2NyeXB0by5jCmluZGV4IGIwOTJkMGEuLjIzMGI1YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL3BpY294Y2VsbF9jcnlwdG8uYworKysgYi9kcml2ZXJzL2NyeXB0by9waWNveGNlbGxfY3J5cHRvLmMKQEAgLTE3Niw2ICsxNzYsOCBAQAogCXU4CQkJCXNhbHRbQUVTX0JMT0NLX1NJWkVdOwogfTsKIAorc3RhdGljIGludCBzcGFjY19hYmxrX3N1Ym1pdChzdHJ1Y3Qgc3BhY2NfcmVxICpyZXEpOworCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzcGFjY19hbGcgKnRvX3NwYWNjX2FsZyhzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKQogewogCXJldHVybiBhbGcgPyBjb250YWluZXJfb2YoYWxnLCBzdHJ1Y3Qgc3BhY2NfYWxnLCBhbGcpIDogTlVMTDsKQEAgLTY2Niw2ICs2NjgsMjQgQEAKIAlyZXR1cm4gLUVJTlBST0dSRVNTOwogfQogCitzdGF0aWMgaW50IHNwYWNjX3JlcV9zdWJtaXQoc3RydWN0IHNwYWNjX3JlcSAqcmVxKTsKKworc3RhdGljIHZvaWQgc3BhY2NfcHVzaChzdHJ1Y3Qgc3BhY2NfZW5naW5lICplbmdpbmUpCit7CisJc3RydWN0IHNwYWNjX3JlcSAqcmVxOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZlbmdpbmUtPnBlbmRpbmcpICYmCisJICAgICAgIGVuZ2luZS0+aW5fZmxpZ2h0ICsgMSA8PSBlbmdpbmUtPmZpZm9fc3opIHsKKworCQkrK2VuZ2luZS0+aW5fZmxpZ2h0OworCQlyZXEgPSBsaXN0X2ZpcnN0X2VudHJ5KCZlbmdpbmUtPnBlbmRpbmcsIHN0cnVjdCBzcGFjY19yZXEsCisJCQkJICAgICAgIGxpc3QpOworCQlsaXN0X21vdmVfdGFpbCgmcmVxLT5saXN0LCAmZW5naW5lLT5pbl9wcm9ncmVzcyk7CisKKwkJcmVxLT5yZXN1bHQgPSBzcGFjY19yZXFfc3VibWl0KHJlcSk7CisJfQorfQorCiAvKgogICogU2V0dXAgYW4gQUVBRCByZXF1ZXN0IGZvciBwcm9jZXNzaW5nLiBUaGlzIHdpbGwgY29uZmlndXJlIHRoZSBlbmdpbmUsIGxvYWQKICAqIHRoZSBjb250ZXh0IGFuZCB0aGVuIHN0YXJ0IHRoZSBwYWNrZXQgcHJvY2Vzc2luZy4KQEAgLTY5OCw3ICs3MTgsOCBAQAogCiAJZXJyID0gLUVJTlBST0dSRVNTOwogCXNwaW5fbG9ja19pcnFzYXZlKCZlbmdpbmUtPmh3X2xvY2ssIGZsYWdzKTsKLQlpZiAodW5saWtlbHkoc3BhY2NfZmlmb19jbWRfZnVsbChlbmdpbmUpKSkgeworCWlmICh1bmxpa2VseShzcGFjY19maWZvX2NtZF9mdWxsKGVuZ2luZSkpIHx8CisJICAgIGVuZ2luZS0+aW5fZmxpZ2h0ICsgMSA+IGVuZ2luZS0+Zmlmb19zeikgewogCQlpZiAoIShyZXEtPmJhc2UuZmxhZ3MgJiBDUllQVE9fVEZNX1JFUV9NQVlfQkFDS0xPRykpIHsKIAkJCWVyciA9IC1FQlVTWTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZ2luZS0+aHdfbG9jaywgZmxhZ3MpOwpAQCAtNzA2LDkgKzcyNyw4IEBACiAJCX0KIAkJbGlzdF9hZGRfdGFpbCgmZGV2X3JlcS0+bGlzdCwgJmVuZ2luZS0+cGVuZGluZyk7CiAJfSBlbHNlIHsKLQkJKytlbmdpbmUtPmluX2ZsaWdodDsKLQkJbGlzdF9hZGRfdGFpbCgmZGV2X3JlcS0+bGlzdCwgJmVuZ2luZS0+aW5fcHJvZ3Jlc3MpOwotCQlzcGFjY19hZWFkX3N1Ym1pdChkZXZfcmVxKTsKKwkJbGlzdF9hZGRfdGFpbCgmZGV2X3JlcS0+bGlzdCwgJmVuZ2luZS0+cGVuZGluZyk7CisJCXNwYWNjX3B1c2goZW5naW5lKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW5naW5lLT5od19sb2NrLCBmbGFncyk7CiAKQEAgLTEwNDEsNyArMTA2MSw4IEBACiAJICogd2UgZWl0aGVyIHN0aWNrIGl0IG9uIHRoZSBlbmQgb2YgYSBwZW5kaW5nIGxpc3QgaWYgd2UgY2FuIGJhY2tsb2csCiAJICogb3IgYmFpbG91dCB3aXRoIGFuIGVycm9yIGlmIG5vdC4KIAkgKi8KLQlpZiAodW5saWtlbHkoc3BhY2NfZmlmb19jbWRfZnVsbChlbmdpbmUpKSkgeworCWlmICh1bmxpa2VseShzcGFjY19maWZvX2NtZF9mdWxsKGVuZ2luZSkpIHx8CisJICAgIGVuZ2luZS0+aW5fZmxpZ2h0ICsgMSA+IGVuZ2luZS0+Zmlmb19zeikgewogCQlpZiAoIShyZXEtPmJhc2UuZmxhZ3MgJiBDUllQVE9fVEZNX1JFUV9NQVlfQkFDS0xPRykpIHsKIAkJCWVyciA9IC1FQlVTWTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZ2luZS0+aHdfbG9jaywgZmxhZ3MpOwpAQCAtMTA0OSw5ICsxMDcwLDggQEAKIAkJfQogCQlsaXN0X2FkZF90YWlsKCZkZXZfcmVxLT5saXN0LCAmZW5naW5lLT5wZW5kaW5nKTsKIAl9IGVsc2UgewotCQkrK2VuZ2luZS0+aW5fZmxpZ2h0OwotCQlsaXN0X2FkZF90YWlsKCZkZXZfcmVxLT5saXN0LCAmZW5naW5lLT5pbl9wcm9ncmVzcyk7Ci0JCXNwYWNjX2FibGtfc3VibWl0KGRldl9yZXEpOworCQlsaXN0X2FkZF90YWlsKCZkZXZfcmVxLT5saXN0LCAmZW5naW5lLT5wZW5kaW5nKTsKKwkJc3BhY2NfcHVzaChlbmdpbmUpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlbmdpbmUtPmh3X2xvY2ssIGZsYWdzKTsKIApAQCAtMTEzOSw2ICsxMTU5LDcgQEAKIAkJcmVxID0gbGlzdF9maXJzdF9lbnRyeSgmZW5naW5lLT5pbl9wcm9ncmVzcywgc3RydWN0IHNwYWNjX3JlcSwKIAkJCQkgICAgICAgbGlzdCk7CiAJCWxpc3RfbW92ZV90YWlsKCZyZXEtPmxpc3QsICZlbmdpbmUtPmNvbXBsZXRlZCk7CisJCS0tZW5naW5lLT5pbl9mbGlnaHQ7CiAKIAkJLyogUE9QIHRoZSBzdGF0dXMgcmVnaXN0ZXIuICovCiAJCXdyaXRlbCh+MCwgZW5naW5lLT5yZWdzICsgU1BBX1NUQVRfUE9QX1JFR19PRkZTRVQpOwpAQCAtMTIwOCwzNiArMTIyOSwyMSBAQAogCXN0cnVjdCBzcGFjY19lbmdpbmUgKmVuZ2luZSA9IChzdHJ1Y3Qgc3BhY2NfZW5naW5lICopZGF0YTsKIAlzdHJ1Y3Qgc3BhY2NfcmVxICpyZXEsICp0bXA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgbnVtX3JlbW92ZWQgPSAwOwogCUxJU1RfSEVBRChjb21wbGV0ZWQpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmVuZ2luZS0+aHdfbG9jaywgZmxhZ3MpOworCiAJbGlzdF9zcGxpY2VfaW5pdCgmZW5naW5lLT5jb21wbGV0ZWQsICZjb21wbGV0ZWQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZ2luZS0+aHdfbG9jaywgZmxhZ3MpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcSwgdG1wLCAmY29tcGxldGVkLCBsaXN0KSB7Ci0JCSsrbnVtX3JlbW92ZWQ7Ci0JCXJlcS0+Y29tcGxldGUocmVxKTsKLQl9Ci0KLQkvKiBUcnkgYW5kIGZpbGwgdGhlIGVuZ2luZSBiYWNrIHVwIGFnYWluLiAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZlbmdpbmUtPmh3X2xvY2ssIGZsYWdzKTsKLQotCWVuZ2luZS0+aW5fZmxpZ2h0IC09IG51bV9yZW1vdmVkOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcSwgdG1wLCAmZW5naW5lLT5wZW5kaW5nLCBsaXN0KSB7Ci0JCWlmIChzcGFjY19maWZvX2NtZF9mdWxsKGVuZ2luZSkpCi0JCQlicmVhazsKLQotCQlsaXN0X21vdmVfdGFpbCgmcmVxLT5saXN0LCAmZW5naW5lLT5pbl9wcm9ncmVzcyk7Ci0JCSsrZW5naW5lLT5pbl9mbGlnaHQ7Ci0JCXJlcS0+cmVzdWx0ID0gc3BhY2NfcmVxX3N1Ym1pdChyZXEpOwotCX0KLQorCXNwYWNjX3B1c2goZW5naW5lKTsKIAlpZiAoZW5naW5lLT5pbl9mbGlnaHQpCiAJCW1vZF90aW1lcigmZW5naW5lLT5wYWNrZXRfdGltZW91dCwgamlmZmllcyArIFBBQ0tFVF9USU1FT1VUKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZ2luZS0+aHdfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcSwgdG1wLCAmY29tcGxldGVkLCBsaXN0KSB7CisJCXJlcS0+Y29tcGxldGUocmVxKTsKKwkJbGlzdF9kZWwoJnJlcS0+bGlzdCk7CisJfQogfQogCiAjaWZkZWYgQ09ORklHX1BNCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9zNXAtc3NzLmMgYi9kcml2ZXJzL2NyeXB0by9zNXAtc3NzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODExNTQxNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY3J5cHRvL3M1cC1zc3MuYwpAQCAtMCwwICsxLDcwMSBAQAorLyoKKyAqIENyeXB0b2dyYXBoaWMgQVBJLgorICoKKyAqIFN1cHBvcnQgZm9yIFNhbXN1bmcgUzVQVjIxMCBIVyBhY2NlbGVyYXRpb24uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5ldFVQIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2luY2x1ZGUgPGNyeXB0by9hbGdhcGkuaD4KKyNpbmNsdWRlIDxjcnlwdG8vYWVzLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2N0ci5oPgorCisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2RtYS5oPgorCisjZGVmaW5lIF9TQkYocywgdikgICAgICAgICAgICAgICAgICAgICAgKCh2KSA8PCAocykpCisjZGVmaW5lIF9CSVQoYikgICAgICAgICAgICAgICAgICAgICAgICAgX1NCRihiLCAxKQorCisvKiBGZWVkIGNvbnRyb2wgcmVnaXN0ZXJzICovCisjZGVmaW5lIFNTU19SRUdfRkNJTlRTVEFUICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIFNTU19GQ0lOVFNUQVRfQlJETUFJTlQgICAgICAgICAgX0JJVCgzKQorI2RlZmluZSBTU1NfRkNJTlRTVEFUX0JURE1BSU5UICAgICAgICAgIF9CSVQoMikKKyNkZWZpbmUgU1NTX0ZDSU5UU1RBVF9IUkRNQUlOVCAgICAgICAgICBfQklUKDEpCisjZGVmaW5lIFNTU19GQ0lOVFNUQVRfUEtETUFJTlQgICAgICAgICAgX0JJVCgwKQorCisjZGVmaW5lIFNTU19SRUdfRkNJTlRFTlNFVCAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFNTU19GQ0lOVEVOU0VUX0JSRE1BSU5URU5TRVQgICAgX0JJVCgzKQorI2RlZmluZSBTU1NfRkNJTlRFTlNFVF9CVERNQUlOVEVOU0VUICAgIF9CSVQoMikKKyNkZWZpbmUgU1NTX0ZDSU5URU5TRVRfSFJETUFJTlRFTlNFVCAgICBfQklUKDEpCisjZGVmaW5lIFNTU19GQ0lOVEVOU0VUX1BLRE1BSU5URU5TRVQgICAgX0JJVCgwKQorCisjZGVmaW5lIFNTU19SRUdfRkNJTlRFTkNMUiAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFNTU19GQ0lOVEVOQ0xSX0JSRE1BSU5URU5DTFIgICAgX0JJVCgzKQorI2RlZmluZSBTU1NfRkNJTlRFTkNMUl9CVERNQUlOVEVOQ0xSICAgIF9CSVQoMikKKyNkZWZpbmUgU1NTX0ZDSU5URU5DTFJfSFJETUFJTlRFTkNMUiAgICBfQklUKDEpCisjZGVmaW5lIFNTU19GQ0lOVEVOQ0xSX1BLRE1BSU5URU5DTFIgICAgX0JJVCgwKQorCisjZGVmaW5lIFNTU19SRUdfRkNJTlRQRU5EICAgICAgICAgICAgICAgMHgwMDBDCisjZGVmaW5lIFNTU19GQ0lOVFBFTkRfQlJETUFJTlRQICAgICAgICAgX0JJVCgzKQorI2RlZmluZSBTU1NfRkNJTlRQRU5EX0JURE1BSU5UUCAgICAgICAgIF9CSVQoMikKKyNkZWZpbmUgU1NTX0ZDSU5UUEVORF9IUkRNQUlOVFAgICAgICAgICBfQklUKDEpCisjZGVmaW5lIFNTU19GQ0lOVFBFTkRfUEtETUFJTlRQICAgICAgICAgX0JJVCgwKQorCisjZGVmaW5lIFNTU19SRUdfRkNGSUZPU1RBVCAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFNTU19GQ0ZJRk9TVEFUX0JSRklGT0ZVTCAgICAgICAgX0JJVCg3KQorI2RlZmluZSBTU1NfRkNGSUZPU1RBVF9CUkZJRk9FTVAgICAgICAgIF9CSVQoNikKKyNkZWZpbmUgU1NTX0ZDRklGT1NUQVRfQlRGSUZPRlVMICAgICAgICBfQklUKDUpCisjZGVmaW5lIFNTU19GQ0ZJRk9TVEFUX0JURklGT0VNUCAgICAgICAgX0JJVCg0KQorI2RlZmluZSBTU1NfRkNGSUZPU1RBVF9IUkZJRk9GVUwgICAgICAgIF9CSVQoMykKKyNkZWZpbmUgU1NTX0ZDRklGT1NUQVRfSFJGSUZPRU1QICAgICAgICBfQklUKDIpCisjZGVmaW5lIFNTU19GQ0ZJRk9TVEFUX1BLRklGT0ZVTCAgICAgICAgX0JJVCgxKQorI2RlZmluZSBTU1NfRkNGSUZPU1RBVF9QS0ZJRk9FTVAgICAgICAgIF9CSVQoMCkKKworI2RlZmluZSBTU1NfUkVHX0ZDRklGT0NUUkwgICAgICAgICAgICAgIDB4MDAxNAorI2RlZmluZSBTU1NfRkNGSUZPQ1RSTF9ERVNTRUwgICAgICAgICAgIF9CSVQoMikKKyNkZWZpbmUgU1NTX0hBU0hJTl9JTkRFUEVOREVOVCAgICAgICAgICBfU0JGKDAsIDB4MDApCisjZGVmaW5lIFNTU19IQVNISU5fQ0lQSEVSX0lOUFVUICAgICAgICAgX1NCRigwLCAweDAxKQorI2RlZmluZSBTU1NfSEFTSElOX0NJUEhFUl9PVVRQVVQgICAgICAgIF9TQkYoMCwgMHgwMikKKworI2RlZmluZSBTU1NfUkVHX0ZDQlJETUFTICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBTU1NfUkVHX0ZDQlJETUFMICAgICAgICAgICAgICAgIDB4MDAyNAorI2RlZmluZSBTU1NfUkVHX0ZDQlJETUFDICAgICAgICAgICAgICAgIDB4MDAyOAorI2RlZmluZSBTU1NfRkNCUkRNQUNfQllURVNXQVAgICAgICAgICAgIF9CSVQoMSkKKyNkZWZpbmUgU1NTX0ZDQlJETUFDX0ZMVVNIICAgICAgICAgICAgICBfQklUKDApCisKKyNkZWZpbmUgU1NTX1JFR19GQ0JURE1BUyAgICAgICAgICAgICAgICAweDAwMzAKKyNkZWZpbmUgU1NTX1JFR19GQ0JURE1BTCAgICAgICAgICAgICAgICAweDAwMzQKKyNkZWZpbmUgU1NTX1JFR19GQ0JURE1BQyAgICAgICAgICAgICAgICAweDAwMzgKKyNkZWZpbmUgU1NTX0ZDQlRETUFDX0JZVEVTV0FQICAgICAgICAgICBfQklUKDEpCisjZGVmaW5lIFNTU19GQ0JURE1BQ19GTFVTSCAgICAgICAgICAgICAgX0JJVCgwKQorCisjZGVmaW5lIFNTU19SRUdfRkNIUkRNQVMgICAgICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIFNTU19SRUdfRkNIUkRNQUwgICAgICAgICAgICAgICAgMHgwMDQ0CisjZGVmaW5lIFNTU19SRUdfRkNIUkRNQUMgICAgICAgICAgICAgICAgMHgwMDQ4CisjZGVmaW5lIFNTU19GQ0hSRE1BQ19CWVRFU1dBUCAgICAgICAgICAgX0JJVCgxKQorI2RlZmluZSBTU1NfRkNIUkRNQUNfRkxVU0ggICAgICAgICAgICAgIF9CSVQoMCkKKworI2RlZmluZSBTU1NfUkVHX0ZDUEtETUFTICAgICAgICAgICAgICAgIDB4MDA1MAorI2RlZmluZSBTU1NfUkVHX0ZDUEtETUFMICAgICAgICAgICAgICAgIDB4MDA1NAorI2RlZmluZSBTU1NfUkVHX0ZDUEtETUFDICAgICAgICAgICAgICAgIDB4MDA1OAorI2RlZmluZSBTU1NfRkNQS0RNQUNfQllURVNXQVAgICAgICAgICAgIF9CSVQoMykKKyNkZWZpbmUgU1NTX0ZDUEtETUFDX0RFU0NFTkQgICAgICAgICAgICBfQklUKDIpCisjZGVmaW5lIFNTU19GQ1BLRE1BQ19UUkFOU01JVCAgICAgICAgICAgX0JJVCgxKQorI2RlZmluZSBTU1NfRkNQS0RNQUNfRkxVU0ggICAgICAgICAgICAgIF9CSVQoMCkKKworI2RlZmluZSBTU1NfUkVHX0ZDUEtETUFPICAgICAgICAgICAgICAgIDB4MDA1QworCisvKiBBRVMgcmVnaXN0ZXJzICovCisjZGVmaW5lIFNTU19SRUdfQUVTX0NPTlRST0wgICAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIFNTU19BRVNfQllURVNXQVBfREkgICAgICAgICAgICAgX0JJVCgxMSkKKyNkZWZpbmUgU1NTX0FFU19CWVRFU1dBUF9ETyAgICAgICAgICAgICBfQklUKDEwKQorI2RlZmluZSBTU1NfQUVTX0JZVEVTV0FQX0lWICAgICAgICAgICAgIF9CSVQoOSkKKyNkZWZpbmUgU1NTX0FFU19CWVRFU1dBUF9DTlQgICAgICAgICAgICBfQklUKDgpCisjZGVmaW5lIFNTU19BRVNfQllURVNXQVBfS0VZICAgICAgICAgICAgX0JJVCg3KQorI2RlZmluZSBTU1NfQUVTX0tFWV9DSEFOR0VfTU9ERSAgICAgICAgIF9CSVQoNikKKyNkZWZpbmUgU1NTX0FFU19LRVlfU0laRV8xMjggICAgICAgICAgICBfU0JGKDQsIDB4MDApCisjZGVmaW5lIFNTU19BRVNfS0VZX1NJWkVfMTkyICAgICAgICAgICAgX1NCRig0LCAweDAxKQorI2RlZmluZSBTU1NfQUVTX0tFWV9TSVpFXzI1NiAgICAgICAgICAgIF9TQkYoNCwgMHgwMikKKyNkZWZpbmUgU1NTX0FFU19GSUZPX01PREUgICAgICAgICAgICAgICBfQklUKDMpCisjZGVmaW5lIFNTU19BRVNfQ0hBSU5fTU9ERV9FQ0IgICAgICAgICAgX1NCRigxLCAweDAwKQorI2RlZmluZSBTU1NfQUVTX0NIQUlOX01PREVfQ0JDICAgICAgICAgIF9TQkYoMSwgMHgwMSkKKyNkZWZpbmUgU1NTX0FFU19DSEFJTl9NT0RFX0NUUiAgICAgICAgICBfU0JGKDEsIDB4MDIpCisjZGVmaW5lIFNTU19BRVNfTU9ERV9ERUNSWVBUICAgICAgICAgICAgX0JJVCgwKQorCisjZGVmaW5lIFNTU19SRUdfQUVTX1NUQVRVUyAgICAgICAgICAgICAgMHg0MDA0CisjZGVmaW5lIFNTU19BRVNfQlVTWSAgICAgICAgICAgICAgICAgICAgX0JJVCgyKQorI2RlZmluZSBTU1NfQUVTX0lOUFVUX1JFQURZICAgICAgICAgICAgIF9CSVQoMSkKKyNkZWZpbmUgU1NTX0FFU19PVVRQVVRfUkVBRFkgICAgICAgICAgICBfQklUKDApCisKKyNkZWZpbmUgU1NTX1JFR19BRVNfSU5fREFUQShzKSAgICAgICAgICAoMHg0MDEwICsgKHMgPDwgMikpCisjZGVmaW5lIFNTU19SRUdfQUVTX09VVF9EQVRBKHMpICAgICAgICAgKDB4NDAyMCArIChzIDw8IDIpKQorI2RlZmluZSBTU1NfUkVHX0FFU19JVl9EQVRBKHMpICAgICAgICAgICgweDQwMzAgKyAocyA8PCAyKSkKKyNkZWZpbmUgU1NTX1JFR19BRVNfQ05UX0RBVEEocykgICAgICAgICAoMHg0MDQwICsgKHMgPDwgMikpCisjZGVmaW5lIFNTU19SRUdfQUVTX0tFWV9EQVRBKHMpICAgICAgICAgKDB4NDA4MCArIChzIDw8IDIpKQorCisjZGVmaW5lIFNTU19SRUcoZGV2LCByZWcpICAgICAgICAgICAgICAgKChkZXYpLT5pb2FkZHIgKyAoU1NTX1JFR18jI3JlZykpCisjZGVmaW5lIFNTU19SRUFEKGRldiwgcmVnKSAgICAgICAgICAgICAgX19yYXdfcmVhZGwoU1NTX1JFRyhkZXYsIHJlZykpCisjZGVmaW5lIFNTU19XUklURShkZXYsIHJlZywgdmFsKSAgICAgICAgX19yYXdfd3JpdGVsKCh2YWwpLCBTU1NfUkVHKGRldiwgcmVnKSkKKworLyogSFcgZW5naW5lIG1vZGVzICovCisjZGVmaW5lIEZMQUdTX0FFU19ERUNSWVBUICAgICAgICAgICAgICAgX0JJVCgwKQorI2RlZmluZSBGTEFHU19BRVNfTU9ERV9NQVNLICAgICAgICAgICAgIF9TQkYoMSwgMHgwMykKKyNkZWZpbmUgRkxBR1NfQUVTX0NCQyAgICAgICAgICAgICAgICAgICBfU0JGKDEsIDB4MDEpCisjZGVmaW5lIEZMQUdTX0FFU19DVFIgICAgICAgICAgICAgICAgICAgX1NCRigxLCAweDAyKQorCisjZGVmaW5lIEFFU19LRVlfTEVOICAgICAgICAgMTYKKyNkZWZpbmUgQ1JZUFRPX1FVRVVFX0xFTiAgICAxCisKK3N0cnVjdCBzNXBfYWVzX3JlcWN0eCB7CisJdW5zaWduZWQgbG9uZyBtb2RlOworfTsKKworc3RydWN0IHM1cF9hZXNfY3R4IHsKKwlzdHJ1Y3QgczVwX2Flc19kZXYgICAgICAgICAqZGV2OworCisJdWludDhfdCAgICAgICAgICAgICAgICAgICAgIGFlc19rZXlbQUVTX01BWF9LRVlfU0laRV07CisJdWludDhfdCAgICAgICAgICAgICAgICAgICAgIG5vbmNlW0NUUl9SRkMzNjg2X05PTkNFX1NJWkVdOworCWludCAgICAgICAgICAgICAgICAgICAgICAgICBrZXlsZW47Cit9OworCitzdHJ1Y3QgczVwX2Flc19kZXYgeworCXN0cnVjdCBkZXZpY2UgICAgICAgICAgICAgICpkZXY7CisJc3RydWN0IGNsayAgICAgICAgICAgICAgICAgKmNsazsKKwl2b2lkIF9faW9tZW0gICAgICAgICAgICAgICAqaW9hZGRyOworCWludCAgICAgICAgICAgICAgICAgICAgICAgICBpcnFfaGFzaDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgaXJxX2ZjOworCisJc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAgKnJlcTsKKwlzdHJ1Y3QgczVwX2Flc19jdHggICAgICAgICAqY3R4OworCXN0cnVjdCBzY2F0dGVybGlzdCAgICAgICAgICpzZ19zcmM7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICAgICAgICAgKnNnX2RzdDsKKworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCAgICAgICB0YXNrbGV0OworCXN0cnVjdCBjcnlwdG9fcXVldWUgICAgICAgICBxdWV1ZTsKKwlib29sICAgICAgICAgICAgICAgICAgICAgICAgYnVzeTsKKwlzcGlubG9ja190ICAgICAgICAgICAgICAgICAgbG9jazsKK307CisKK3N0YXRpYyBzdHJ1Y3QgczVwX2Flc19kZXYgKnM1cF9kZXY7CisKK3N0YXRpYyB2b2lkIHM1cF9zZXRfZG1hX2luZGF0YShzdHJ1Y3QgczVwX2Flc19kZXYgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZykKK3sKKwlTU1NfV1JJVEUoZGV2LCBGQ0JSRE1BUywgc2dfZG1hX2FkZHJlc3Moc2cpKTsKKwlTU1NfV1JJVEUoZGV2LCBGQ0JSRE1BTCwgc2dfZG1hX2xlbihzZykpOworfQorCitzdGF0aWMgdm9pZCBzNXBfc2V0X2RtYV9vdXRkYXRhKHN0cnVjdCBzNXBfYWVzX2RldiAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnKQoreworCVNTU19XUklURShkZXYsIEZDQlRETUFTLCBzZ19kbWFfYWRkcmVzcyhzZykpOworCVNTU19XUklURShkZXYsIEZDQlRETUFMLCBzZ19kbWFfbGVuKHNnKSk7Cit9CisKK3N0YXRpYyB2b2lkIHM1cF9hZXNfY29tcGxldGUoc3RydWN0IHM1cF9hZXNfZGV2ICpkZXYsIGludCBlcnIpCit7CisJLyogaG9sZGluZyBhIGxvY2sgb3V0c2lkZSAqLworCWRldi0+cmVxLT5iYXNlLmNvbXBsZXRlKCZkZXYtPnJlcS0+YmFzZSwgZXJyKTsKKwlkZXYtPmJ1c3kgPSBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgczVwX3Vuc2V0X291dGRhdGEoc3RydWN0IHM1cF9hZXNfZGV2ICpkZXYpCit7CisJZG1hX3VubWFwX3NnKGRldi0+ZGV2LCBkZXYtPnNnX2RzdCwgMSwgRE1BX0ZST01fREVWSUNFKTsKK30KKworc3RhdGljIHZvaWQgczVwX3Vuc2V0X2luZGF0YShzdHJ1Y3QgczVwX2Flc19kZXYgKmRldikKK3sKKwlkbWFfdW5tYXBfc2coZGV2LT5kZXYsIGRldi0+c2dfc3JjLCAxLCBETUFfVE9fREVWSUNFKTsKK30KKworc3RhdGljIGludCBzNXBfc2V0X291dGRhdGEoc3RydWN0IHM1cF9hZXNfZGV2ICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2cpCit7CisJaW50IGVycjsKKworCWlmICghSVNfQUxJR05FRChzZ19kbWFfbGVuKHNnKSwgQUVTX0JMT0NLX1NJWkUpKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXhpdDsKKwl9CisJaWYgKCFzZ19kbWFfbGVuKHNnKSkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCisJZXJyID0gZG1hX21hcF9zZyhkZXYtPmRldiwgc2csIDEsIERNQV9GUk9NX0RFVklDRSk7CisJaWYgKCFlcnIpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBleGl0OworCX0KKworCWRldi0+c2dfZHN0ID0gc2c7CisJZXJyID0gMDsKKworIGV4aXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBzNXBfc2V0X2luZGF0YShzdHJ1Y3QgczVwX2Flc19kZXYgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZykKK3sKKwlpbnQgZXJyOworCisJaWYgKCFJU19BTElHTkVEKHNnX2RtYV9sZW4oc2cpLCBBRVNfQkxPQ0tfU0laRSkpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKwlpZiAoIXNnX2RtYV9sZW4oc2cpKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXhpdDsKKwl9CisKKwllcnIgPSBkbWFfbWFwX3NnKGRldi0+ZGV2LCBzZywgMSwgRE1BX1RPX0RFVklDRSk7CisJaWYgKCFlcnIpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBleGl0OworCX0KKworCWRldi0+c2dfc3JjID0gc2c7CisJZXJyID0gMDsKKworIGV4aXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgczVwX2Flc190eChzdHJ1Y3QgczVwX2Flc19kZXYgKmRldikKK3sKKwlpbnQgZXJyID0gMDsKKworCXM1cF91bnNldF9vdXRkYXRhKGRldik7CisKKwlpZiAoIXNnX2lzX2xhc3QoZGV2LT5zZ19kc3QpKSB7CisJCWVyciA9IHM1cF9zZXRfb3V0ZGF0YShkZXYsIHNnX25leHQoZGV2LT5zZ19kc3QpKTsKKwkJaWYgKGVycikgeworCQkJczVwX2Flc19jb21wbGV0ZShkZXYsIGVycik7CisJCQlyZXR1cm47CisJCX0KKworCQlzNXBfc2V0X2RtYV9vdXRkYXRhKGRldiwgZGV2LT5zZ19kc3QpOworCX0gZWxzZQorCQlzNXBfYWVzX2NvbXBsZXRlKGRldiwgZXJyKTsKK30KKworc3RhdGljIHZvaWQgczVwX2Flc19yeChzdHJ1Y3QgczVwX2Flc19kZXYgKmRldikKK3sKKwlpbnQgZXJyOworCisJczVwX3Vuc2V0X2luZGF0YShkZXYpOworCisJaWYgKCFzZ19pc19sYXN0KGRldi0+c2dfc3JjKSkgeworCQllcnIgPSBzNXBfc2V0X2luZGF0YShkZXYsIHNnX25leHQoZGV2LT5zZ19zcmMpKTsKKwkJaWYgKGVycikgeworCQkJczVwX2Flc19jb21wbGV0ZShkZXYsIGVycik7CisJCQlyZXR1cm47CisJCX0KKworCQlzNXBfc2V0X2RtYV9pbmRhdGEoZGV2LCBkZXYtPnNnX3NyYyk7CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgczVwX2Flc19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBkZXZfaWQ7CisJc3RydWN0IHM1cF9hZXNfZGV2ICAgICAqZGV2ICA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXVpbnQzMl90ICAgICAgICAgICAgICAgIHN0YXR1czsKKwl1bnNpZ25lZCBsb25nICAgICAgICAgICBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCWlmIChpcnEgPT0gZGV2LT5pcnFfZmMpIHsKKwkJc3RhdHVzID0gU1NTX1JFQUQoZGV2LCBGQ0lOVFNUQVQpOworCQlpZiAoc3RhdHVzICYgU1NTX0ZDSU5UU1RBVF9CUkRNQUlOVCkKKwkJCXM1cF9hZXNfcngoZGV2KTsKKwkJaWYgKHN0YXR1cyAmIFNTU19GQ0lOVFNUQVRfQlRETUFJTlQpCisJCQlzNXBfYWVzX3R4KGRldik7CisKKwkJU1NTX1dSSVRFKGRldiwgRkNJTlRQRU5ELCBzdGF0dXMpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBzNXBfc2V0X2FlcyhzdHJ1Y3QgczVwX2Flc19kZXYgKmRldiwKKwkJCXVpbnQ4X3QgKmtleSwgdWludDhfdCAqaXYsIHVuc2lnbmVkIGludCBrZXlsZW4pCit7CisJdm9pZCBfX2lvbWVtICprZXlzdGFydDsKKworCW1lbWNweShkZXYtPmlvYWRkciArIFNTU19SRUdfQUVTX0lWX0RBVEEoMCksIGl2LCAweDEwKTsKKworCWlmIChrZXlsZW4gPT0gQUVTX0tFWVNJWkVfMjU2KQorCQlrZXlzdGFydCA9IGRldi0+aW9hZGRyICsgU1NTX1JFR19BRVNfS0VZX0RBVEEoMCk7CisJZWxzZSBpZiAoa2V5bGVuID09IEFFU19LRVlTSVpFXzE5MikKKwkJa2V5c3RhcnQgPSBkZXYtPmlvYWRkciArIFNTU19SRUdfQUVTX0tFWV9EQVRBKDIpOworCWVsc2UKKwkJa2V5c3RhcnQgPSBkZXYtPmlvYWRkciArIFNTU19SRUdfQUVTX0tFWV9EQVRBKDQpOworCisJbWVtY3B5KGtleXN0YXJ0LCBrZXksIGtleWxlbik7Cit9CisKK3N0YXRpYyB2b2lkIHM1cF9hZXNfY3J5cHRfc3RhcnQoc3RydWN0IHM1cF9hZXNfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgbW9kZSkKK3sKKwlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICAqcmVxID0gZGV2LT5yZXE7CisKKwl1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgYWVzX2NvbnRyb2w7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGVycjsKKwl1bnNpZ25lZCBsb25nICAgICAgICAgICAgICAgZmxhZ3M7CisKKwlhZXNfY29udHJvbCA9IFNTU19BRVNfS0VZX0NIQU5HRV9NT0RFOworCWlmIChtb2RlICYgRkxBR1NfQUVTX0RFQ1JZUFQpCisJCWFlc19jb250cm9sIHw9IFNTU19BRVNfTU9ERV9ERUNSWVBUOworCisJaWYgKChtb2RlICYgRkxBR1NfQUVTX01PREVfTUFTSykgPT0gRkxBR1NfQUVTX0NCQykKKwkJYWVzX2NvbnRyb2wgfD0gU1NTX0FFU19DSEFJTl9NT0RFX0NCQzsKKwllbHNlIGlmICgobW9kZSAmIEZMQUdTX0FFU19NT0RFX01BU0spID09IEZMQUdTX0FFU19DVFIpCisJCWFlc19jb250cm9sIHw9IFNTU19BRVNfQ0hBSU5fTU9ERV9DVFI7CisKKwlpZiAoZGV2LT5jdHgtPmtleWxlbiA9PSBBRVNfS0VZU0laRV8xOTIpCisJCWFlc19jb250cm9sIHw9IFNTU19BRVNfS0VZX1NJWkVfMTkyOworCWVsc2UgaWYgKGRldi0+Y3R4LT5rZXlsZW4gPT0gQUVTX0tFWVNJWkVfMjU2KQorCQlhZXNfY29udHJvbCB8PSBTU1NfQUVTX0tFWV9TSVpFXzI1NjsKKworCWFlc19jb250cm9sIHw9IFNTU19BRVNfRklGT19NT0RFOworCisJLyogYXMgYSB2YXJpYW50IGl0IGlzIHBvc3NpYmxlIHRvIHVzZSBieXRlIHN3YXBwaW5nIG9uIERNQSBzaWRlICovCisJYWVzX2NvbnRyb2wgfD0gU1NTX0FFU19CWVRFU1dBUF9ESQorCQkgICAgfCAgU1NTX0FFU19CWVRFU1dBUF9ETworCQkgICAgfCAgU1NTX0FFU19CWVRFU1dBUF9JVgorCQkgICAgfCAgU1NTX0FFU19CWVRFU1dBUF9LRVkKKwkJICAgIHwgIFNTU19BRVNfQllURVNXQVBfQ05UOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bG9jaywgZmxhZ3MpOworCisJU1NTX1dSSVRFKGRldiwgRkNJTlRFTkNMUiwKKwkJICBTU1NfRkNJTlRFTkNMUl9CVERNQUlOVEVOQ0xSIHwgU1NTX0ZDSU5URU5DTFJfQlJETUFJTlRFTkNMUik7CisJU1NTX1dSSVRFKGRldiwgRkNGSUZPQ1RSTCwgMHgwMCk7CisKKwllcnIgPSBzNXBfc2V0X2luZGF0YShkZXYsIHJlcS0+c3JjKTsKKwlpZiAoZXJyKQorCQlnb3RvIGluZGF0YV9lcnJvcjsKKworCWVyciA9IHM1cF9zZXRfb3V0ZGF0YShkZXYsIHJlcS0+ZHN0KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dGRhdGFfZXJyb3I7CisKKwlTU1NfV1JJVEUoZGV2LCBBRVNfQ09OVFJPTCwgYWVzX2NvbnRyb2wpOworCXM1cF9zZXRfYWVzKGRldiwgZGV2LT5jdHgtPmFlc19rZXksIHJlcS0+aW5mbywgZGV2LT5jdHgtPmtleWxlbik7CisKKwlzNXBfc2V0X2RtYV9pbmRhdGEoZGV2LCAgcmVxLT5zcmMpOworCXM1cF9zZXRfZG1hX291dGRhdGEoZGV2LCByZXEtPmRzdCk7CisKKwlTU1NfV1JJVEUoZGV2LCBGQ0lOVEVOU0VULAorCQkgIFNTU19GQ0lOVEVOU0VUX0JURE1BSU5URU5TRVQgfCBTU1NfRkNJTlRFTlNFVF9CUkRNQUlOVEVOU0VUKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuOworCisgb3V0ZGF0YV9lcnJvcjoKKwlzNXBfdW5zZXRfaW5kYXRhKGRldik7CisKKyBpbmRhdGFfZXJyb3I6CisJczVwX2Flc19jb21wbGV0ZShkZXYsIGVycik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHM1cF90YXNrbGV0X2NiKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgczVwX2Flc19kZXYgKmRldiA9IChzdHJ1Y3QgczVwX2Flc19kZXYgKilkYXRhOworCXN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqYXN5bmNfcmVxLCAqYmFja2xvZzsKKwlzdHJ1Y3QgczVwX2Flc19yZXFjdHggKnJlcWN0eDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bG9jaywgZmxhZ3MpOworCWJhY2tsb2cgICA9IGNyeXB0b19nZXRfYmFja2xvZygmZGV2LT5xdWV1ZSk7CisJYXN5bmNfcmVxID0gY3J5cHRvX2RlcXVldWVfcmVxdWVzdCgmZGV2LT5xdWV1ZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwlpZiAoIWFzeW5jX3JlcSkKKwkJcmV0dXJuOworCisJaWYgKGJhY2tsb2cpCisJCWJhY2tsb2ctPmNvbXBsZXRlKGJhY2tsb2csIC1FSU5QUk9HUkVTUyk7CisKKwlkZXYtPnJlcSA9IGFibGtjaXBoZXJfcmVxdWVzdF9jYXN0KGFzeW5jX3JlcSk7CisJZGV2LT5jdHggPSBjcnlwdG9fdGZtX2N0eChkZXYtPnJlcS0+YmFzZS50Zm0pOworCXJlcWN0eCAgID0gYWJsa2NpcGhlcl9yZXF1ZXN0X2N0eChkZXYtPnJlcSk7CisKKwlzNXBfYWVzX2NyeXB0X3N0YXJ0KGRldiwgcmVxY3R4LT5tb2RlKTsKK30KKworc3RhdGljIGludCBzNXBfYWVzX2hhbmRsZV9yZXEoc3RydWN0IHM1cF9hZXNfZGV2ICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bG9jaywgZmxhZ3MpOworCWlmIChkZXYtPmJ1c3kpIHsKKwkJZXJyID0gLUVBR0FJTjsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CisJCWdvdG8gZXhpdDsKKwl9CisJZGV2LT5idXN5ID0gdHJ1ZTsKKworCWVyciA9IGFibGtjaXBoZXJfZW5xdWV1ZV9yZXF1ZXN0KCZkZXYtPnF1ZXVlLCByZXEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOworCisJdGFza2xldF9zY2hlZHVsZSgmZGV2LT50YXNrbGV0KTsKKworIGV4aXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBzNXBfYWVzX2NyeXB0KHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSwgdW5zaWduZWQgbG9uZyBtb2RlKQoreworCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAgICp0Zm0gICAgPSBjcnlwdG9fYWJsa2NpcGhlcl9yZXF0Zm0ocmVxKTsKKwlzdHJ1Y3QgczVwX2Flc19jdHggICAgICAgICAqY3R4ICAgID0gY3J5cHRvX2FibGtjaXBoZXJfY3R4KHRmbSk7CisJc3RydWN0IHM1cF9hZXNfcmVxY3R4ICAgICAgKnJlcWN0eCA9IGFibGtjaXBoZXJfcmVxdWVzdF9jdHgocmVxKTsKKwlzdHJ1Y3QgczVwX2Flc19kZXYgICAgICAgICAqZGV2ICAgID0gY3R4LT5kZXY7CisKKwlpZiAoIUlTX0FMSUdORUQocmVxLT5uYnl0ZXMsIEFFU19CTE9DS19TSVpFKSkgeworCQlwcl9lcnIoInJlcXVlc3Qgc2l6ZSBpcyBub3QgZXhhY3QgYW1vdW50IG9mIEFFUyBibG9ja3NcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXFjdHgtPm1vZGUgPSBtb2RlOworCisJcmV0dXJuIHM1cF9hZXNfaGFuZGxlX3JlcShkZXYsIHJlcSk7Cit9CisKK3N0YXRpYyBpbnQgczVwX2Flc19zZXRrZXkoc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICpjaXBoZXIsCisJCQkgIGNvbnN0IHVpbnQ4X3QgKmtleSwgdW5zaWduZWQgaW50IGtleWxlbikKK3sKKwlzdHJ1Y3QgY3J5cHRvX3RmbSAgKnRmbSA9IGNyeXB0b19hYmxrY2lwaGVyX3RmbShjaXBoZXIpOworCXN0cnVjdCBzNXBfYWVzX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKworCWlmIChrZXlsZW4gIT0gQUVTX0tFWVNJWkVfMTI4ICYmCisJICAgIGtleWxlbiAhPSBBRVNfS0VZU0laRV8xOTIgJiYKKwkgICAga2V5bGVuICE9IEFFU19LRVlTSVpFXzI1NikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1jcHkoY3R4LT5hZXNfa2V5LCBrZXksIGtleWxlbik7CisJY3R4LT5rZXlsZW4gPSBrZXlsZW47CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzNXBfYWVzX2VjYl9lbmNyeXB0KHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSkKK3sKKwlyZXR1cm4gczVwX2Flc19jcnlwdChyZXEsIDApOworfQorCitzdGF0aWMgaW50IHM1cF9hZXNfZWNiX2RlY3J5cHQoc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxKQoreworCXJldHVybiBzNXBfYWVzX2NyeXB0KHJlcSwgRkxBR1NfQUVTX0RFQ1JZUFQpOworfQorCitzdGF0aWMgaW50IHM1cF9hZXNfY2JjX2VuY3J5cHQoc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxKQoreworCXJldHVybiBzNXBfYWVzX2NyeXB0KHJlcSwgRkxBR1NfQUVTX0NCQyk7Cit9CisKK3N0YXRpYyBpbnQgczVwX2Flc19jYmNfZGVjcnlwdChzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEpCit7CisJcmV0dXJuIHM1cF9hZXNfY3J5cHQocmVxLCBGTEFHU19BRVNfREVDUllQVCB8IEZMQUdTX0FFU19DQkMpOworfQorCitzdGF0aWMgaW50IHM1cF9hZXNfY3JhX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlzdHJ1Y3QgczVwX2Flc19jdHggICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCisJY3R4LT5kZXYgPSBzNXBfZGV2OworCXRmbS0+Y3J0X2FibGtjaXBoZXIucmVxc2l6ZSA9IHNpemVvZihzdHJ1Y3QgczVwX2Flc19yZXFjdHgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBhbGdzW10gPSB7CisJeworCQkuY3JhX25hbWUJCT0gImVjYihhZXMpIiwKKwkJLmNyYV9kcml2ZXJfbmFtZQk9ICJlY2ItYWVzLXM1cCIsCisJCS5jcmFfcHJpb3JpdHkJCT0gMTAwLAorCQkuY3JhX2ZsYWdzCQk9IENSWVBUT19BTEdfVFlQRV9BQkxLQ0lQSEVSIHwKKwkJCQkJICBDUllQVE9fQUxHX0FTWU5DLAorCQkuY3JhX2Jsb2Nrc2l6ZQkJPSBBRVNfQkxPQ0tfU0laRSwKKwkJLmNyYV9jdHhzaXplCQk9IHNpemVvZihzdHJ1Y3QgczVwX2Flc19jdHgpLAorCQkuY3JhX2FsaWdubWFzawkJPSAweDBmLAorCQkuY3JhX3R5cGUJCT0gJmNyeXB0b19hYmxrY2lwaGVyX3R5cGUsCisJCS5jcmFfbW9kdWxlCQk9IFRISVNfTU9EVUxFLAorCQkuY3JhX2luaXQJCT0gczVwX2Flc19jcmFfaW5pdCwKKwkJLmNyYV91LmFibGtjaXBoZXIgPSB7CisJCQkubWluX2tleXNpemUJPSBBRVNfTUlOX0tFWV9TSVpFLAorCQkJLm1heF9rZXlzaXplCT0gQUVTX01BWF9LRVlfU0laRSwKKwkJCS5zZXRrZXkJCT0gczVwX2Flc19zZXRrZXksCisJCQkuZW5jcnlwdAk9IHM1cF9hZXNfZWNiX2VuY3J5cHQsCisJCQkuZGVjcnlwdAk9IHM1cF9hZXNfZWNiX2RlY3J5cHQsCisJCX0KKwl9LAorCXsKKwkJLmNyYV9uYW1lCQk9ICJjYmMoYWVzKSIsCisJCS5jcmFfZHJpdmVyX25hbWUJPSAiY2JjLWFlcy1zNXAiLAorCQkuY3JhX3ByaW9yaXR5CQk9IDEwMCwKKwkJLmNyYV9mbGFncwkJPSBDUllQVE9fQUxHX1RZUEVfQUJMS0NJUEhFUiB8CisJCQkJCSAgQ1JZUFRPX0FMR19BU1lOQywKKwkJLmNyYV9ibG9ja3NpemUJCT0gQUVTX0JMT0NLX1NJWkUsCisJCS5jcmFfY3R4c2l6ZQkJPSBzaXplb2Yoc3RydWN0IHM1cF9hZXNfY3R4KSwKKwkJLmNyYV9hbGlnbm1hc2sJCT0gMHgwZiwKKwkJLmNyYV90eXBlCQk9ICZjcnlwdG9fYWJsa2NpcGhlcl90eXBlLAorCQkuY3JhX21vZHVsZQkJPSBUSElTX01PRFVMRSwKKwkJLmNyYV9pbml0CQk9IHM1cF9hZXNfY3JhX2luaXQsCisJCS5jcmFfdS5hYmxrY2lwaGVyID0geworCQkJLm1pbl9rZXlzaXplCT0gQUVTX01JTl9LRVlfU0laRSwKKwkJCS5tYXhfa2V5c2l6ZQk9IEFFU19NQVhfS0VZX1NJWkUsCisJCQkuaXZzaXplCQk9IEFFU19CTE9DS19TSVpFLAorCQkJLnNldGtleQkJPSBzNXBfYWVzX3NldGtleSwKKwkJCS5lbmNyeXB0CT0gczVwX2Flc19jYmNfZW5jcnlwdCwKKwkJCS5kZWNyeXB0CT0gczVwX2Flc19jYmNfZGVjcnlwdCwKKwkJfQorCX0sCit9OworCitzdGF0aWMgaW50IHM1cF9hZXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgICAgICAgICAgICAgICAgIGksIGosIGVyciA9IC1FTk9ERVY7CisJc3RydWN0IHM1cF9hZXNfZGV2ICpwZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICAgICAgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IHJlc291cmNlICAgICpyZXM7CisKKwlpZiAoczVwX2RldikKKwkJcmV0dXJuIC1FRVhJU1Q7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXBkYXRhID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghcGRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKCFkZXZtX3JlcXVlc3RfbWVtX3JlZ2lvbihkZXYsIHJlcy0+c3RhcnQsCisJCQkJICAgICByZXNvdXJjZV9zaXplKHJlcyksIHBkZXYtPm5hbWUpKQorCQlyZXR1cm4gLUVCVVNZOworCisJcGRhdGEtPmNsayA9IGNsa19nZXQoZGV2LCAic2Vjc3MiKTsKKwlpZiAoSVNfRVJSKHBkYXRhLT5jbGspKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGZpbmQgc2Vjc3MgY2xvY2sgc291cmNlXG4iKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJY2xrX2VuYWJsZShwZGF0YS0+Y2xrKTsKKworCXNwaW5fbG9ja19pbml0KCZwZGF0YS0+bG9jayk7CisJcGRhdGEtPmlvYWRkciA9IGRldm1faW9yZW1hcChkZXYsIHJlcy0+c3RhcnQsCisJCQkJICAgICByZXNvdXJjZV9zaXplKHJlcykpOworCisJcGRhdGEtPmlycV9oYXNoID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgImhhc2giKTsKKwlpZiAocGRhdGEtPmlycV9oYXNoIDwgMCkgeworCQllcnIgPSBwZGF0YS0+aXJxX2hhc2g7CisJCWRldl93YXJuKGRldiwgImhhc2ggaW50ZXJydXB0IGlzIG5vdCBhdmFpbGFibGUuXG4iKTsKKwkJZ290byBlcnJfaXJxOworCX0KKwllcnIgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgcGRhdGEtPmlycV9oYXNoLCBzNXBfYWVzX2ludGVycnVwdCwKKwkJCSAgICAgICBJUlFGX1NIQVJFRCwgcGRldi0+bmFtZSwgcGRldik7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X3dhcm4oZGV2LCAiaGFzaCBpbnRlcnJ1cHQgaXMgbm90IGF2YWlsYWJsZS5cbiIpOworCQlnb3RvIGVycl9pcnE7CisJfQorCisJcGRhdGEtPmlycV9mYyA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJmZWVkIGNvbnRyb2wiKTsKKwlpZiAocGRhdGEtPmlycV9mYyA8IDApIHsKKwkJZXJyID0gcGRhdGEtPmlycV9mYzsKKwkJZGV2X3dhcm4oZGV2LCAiZmVlZCBjb250cm9sIGludGVycnVwdCBpcyBub3QgYXZhaWxhYmxlLlxuIik7CisJCWdvdG8gZXJyX2lycTsKKwl9CisJZXJyID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIHBkYXRhLT5pcnFfZmMsIHM1cF9hZXNfaW50ZXJydXB0LAorCQkJICAgICAgIElSUUZfU0hBUkVELCBwZGV2LT5uYW1lLCBwZGV2KTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfd2FybihkZXYsICJmZWVkIGNvbnRyb2wgaW50ZXJydXB0IGlzIG5vdCBhdmFpbGFibGUuXG4iKTsKKwkJZ290byBlcnJfaXJxOworCX0KKworCXBkYXRhLT5kZXYgPSBkZXY7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcGRhdGEpOworCXM1cF9kZXYgPSBwZGF0YTsKKworCXRhc2tsZXRfaW5pdCgmcGRhdGEtPnRhc2tsZXQsIHM1cF90YXNrbGV0X2NiLCAodW5zaWduZWQgbG9uZylwZGF0YSk7CisJY3J5cHRvX2luaXRfcXVldWUoJnBkYXRhLT5xdWV1ZSwgQ1JZUFRPX1FVRVVFX0xFTik7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbGdzKTsgaSsrKSB7CisJCUlOSVRfTElTVF9IRUFEKCZhbGdzW2ldLmNyYV9saXN0KTsKKwkJZXJyID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmYWxnc1tpXSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9hbGdzOworCX0KKworCXByX2luZm8oInM1cC1zc3MgZHJpdmVyIHJlZ2lzdGVyZWRcbiIpOworCisJcmV0dXJuIDA7CisKKyBlcnJfYWxnczoKKwlkZXZfZXJyKGRldiwgImNhbid0IHJlZ2lzdGVyICclcyc6ICVkXG4iLCBhbGdzW2ldLmNyYV9uYW1lLCBlcnIpOworCisJZm9yIChqID0gMDsgaiA8IGk7IGorKykKKwkJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhbGdzW2pdKTsKKworCXRhc2tsZXRfa2lsbCgmcGRhdGEtPnRhc2tsZXQpOworCisgZXJyX2lycToKKwljbGtfZGlzYWJsZShwZGF0YS0+Y2xrKTsKKwljbGtfcHV0KHBkYXRhLT5jbGspOworCisJczVwX2RldiA9IE5VTEw7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHM1cF9hZXNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHM1cF9hZXNfZGV2ICpwZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBpOworCisJaWYgKCFwZGF0YSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbGdzKTsgaSsrKQorCQljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFsZ3NbaV0pOworCisJdGFza2xldF9raWxsKCZwZGF0YS0+dGFza2xldCk7CisKKwljbGtfZGlzYWJsZShwZGF0YS0+Y2xrKTsKKwljbGtfcHV0KHBkYXRhLT5jbGspOworCisJczVwX2RldiA9IE5VTEw7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczVwX2Flc19jcnlwdG8gPSB7CisJLnByb2JlCT0gczVwX2Flc19wcm9iZSwKKwkucmVtb3ZlCT0gczVwX2Flc19yZW1vdmUsCisJLmRyaXZlcgk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gInM1cC1zZWNzcyIsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHM1cF9hZXNfbW9kX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmczVwX2Flc19jcnlwdG8pOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgczVwX2Flc19tb2RfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzNXBfYWVzX2NyeXB0byk7Cit9CisKK21vZHVsZV9pbml0KHM1cF9hZXNfbW9kX2luaXQpOworbW9kdWxlX2V4aXQoczVwX2Flc19tb2RfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiUzVQVjIxMCBBRVMgaHcgYWNjZWxlcmF0aW9uIHN1cHBvcnQuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfQVVUSE9SKCJWbGFkaW1pciBaYXBvbHNraXkgPHZ6YXBvbHNraXlAZ21haWwuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZG1hdGVzdC5jIGIvZHJpdmVycy9kbWEvZG1hdGVzdC5jCmluZGV4IGUwODg4Y2IuLmI0ZjVjMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2RtYXRlc3QuYworKysgYi9kcml2ZXJzL2RtYS9kbWF0ZXN0LmMKQEAgLTU2LDggKzU2LDggQEAKIAogc3RhdGljIGludCB0aW1lb3V0ID0gMzAwMDsKIG1vZHVsZV9wYXJhbSh0aW1lb3V0LCB1aW50LCBTX0lSVUdPKTsKLU1PRFVMRV9QQVJNX0RFU0ModGltZW91dCwgIlRyYW5zZmVyIFRpbWVvdXQgaW4gbXNlYyAoZGVmYXVsdDogMzAwMCksIFwKLQkJUGFzcyAtMSBmb3IgaW5maW5pdGUgdGltZW91dCIpOworTU9EVUxFX1BBUk1fREVTQyh0aW1lb3V0LCAiVHJhbnNmZXIgVGltZW91dCBpbiBtc2VjIChkZWZhdWx0OiAzMDAwKSwgIgorCQkgIlBhc3MgLTEgZm9yIGluZmluaXRlIHRpbWVvdXQiKTsKIAogLyoKICAqIEluaXRpYWxpemF0aW9uIHBhdHRlcm5zLiBBbGwgYnl0ZXMgaW4gdGhlIHNvdXJjZSBidWZmZXIgaGFzIGJpdCA3CkBAIC02MzQsNSArNjM0LDUgQEAKIH0KIG1vZHVsZV9leGl0KGRtYXRlc3RfZXhpdCk7CiAKLU1PRFVMRV9BVVRIT1IoIkhhYXZhcmQgU2tpbm5lbW9lbiA8aHNraW5uZW1vZW5AYXRtZWwuY29tPiIpOworTU9EVUxFX0FVVEhPUigiSGFhdmFyZCBTa2lubmVtb2VuIChBdG1lbCkiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2R3X2RtYWMuYyBiL2RyaXZlcnMvZG1hL2R3X2RtYWMuYwppbmRleCA5YzI1YzdkLi4yYTJlMmZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9kd19kbWFjLmMKKysrIGIvZHJpdmVycy9kbWEvZHdfZG1hYy5jCkBAIC0xNDg2LDQgKzE0ODYsNCBAQAogCiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlN5bm9wc3lzIERlc2lnbldhcmUgRE1BIENvbnRyb2xsZXIgZHJpdmVyIik7Ci1NT0RVTEVfQVVUSE9SKCJIYWF2YXJkIFNraW5uZW1vZW4gPGhhYXZhcmQuc2tpbm5lbW9lbkBhdG1lbC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJIYWF2YXJkIFNraW5uZW1vZW4gKEF0bWVsKSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW9hdC9kbWEuYyBiL2RyaXZlcnMvZG1hL2lvYXQvZG1hLmMKaW5kZXggYzkyMTNlYS4uYTRkNmNiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW9hdC9kbWEuYworKysgYi9kcml2ZXJzL2RtYS9pb2F0L2RtYS5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSA8bGludXgvaTczMDBfaWRsZS5oPgogI2luY2x1ZGUgImRtYS5oIgogI2luY2x1ZGUgInJlZ2lzdGVycy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW9hdC9kbWFfdjIuYyBiL2RyaXZlcnMvZG1hL2lvYXQvZG1hX3YyLmMKaW5kZXggZWZmZDE0MC4uZjRhNTFkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW9hdC9kbWFfdjIuYworKysgYi9kcml2ZXJzL2RtYS9pb2F0L2RtYV92Mi5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSA8bGludXgvaTczMDBfaWRsZS5oPgogI2luY2x1ZGUgImRtYS5oIgogI2luY2x1ZGUgImRtYV92Mi5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW9hdC9kbWFfdjMuYyBiL2RyaXZlcnMvZG1hL2lvYXQvZG1hX3YzLmMKaW5kZXggZDBmNDk5MC4uZDg0NWRjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW9hdC9kbWFfdjMuYworKysgYi9kcml2ZXJzL2RtYS9pb2F0L2RtYV92My5jCkBAIC02MCw2ICs2MCw3IEBACiAjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2luY2x1ZGUgInJlZ2lzdGVycy5oIgogI2luY2x1ZGUgImh3LmgiCiAjaW5jbHVkZSAiZG1hLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2FyZC5jIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLWNhcmQuYwppbmRleCAzYzQ0ZmJjLi4yOWQyNDIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2FyZC5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1jYXJkLmMKQEAgLTIyOCw4ICsyMjgsOCBAQAogCiAJLyogVXNlIGFuIGFyYml0cmFyeSBzaG9ydCBkZWxheSB0byBjb21iaW5lIG11bHRpcGxlIHJlc2V0IHJlcXVlc3RzLiAqLwogCWZ3X2NhcmRfZ2V0KGNhcmQpOwotCWlmICghc2NoZWR1bGVfZGVsYXllZF93b3JrKCZjYXJkLT5icl93b3JrLAotCQkJCSAgIGRlbGF5ZWQgPyBESVZfUk9VTkRfVVAoSFosIDEwMCkgOiAwKSkKKwlpZiAoIXF1ZXVlX2RlbGF5ZWRfd29yayhmd193b3JrcXVldWUsICZjYXJkLT5icl93b3JrLAorCQkJCWRlbGF5ZWQgPyBESVZfUk9VTkRfVVAoSFosIDEwMCkgOiAwKSkKIAkJZndfY2FyZF9wdXQoY2FyZCk7CiB9CiBFWFBPUlRfU1lNQk9MKGZ3X3NjaGVkdWxlX2J1c19yZXNldCk7CkBAIC0yNDEsNyArMjQxLDcgQEAKIAkvKiBEZWxheSBmb3IgMnMgYWZ0ZXIgbGFzdCByZXNldCBwZXIgSUVFRSAxMzk0IGNsYXVzZSA4LjIuMS4gKi8KIAlpZiAoY2FyZC0+cmVzZXRfamlmZmllcyAhPSAwICYmCiAJICAgIHRpbWVfYmVmb3JlNjQoZ2V0X2ppZmZpZXNfNjQoKSwgY2FyZC0+cmVzZXRfamlmZmllcyArIDIgKiBIWikpIHsKLQkJaWYgKCFzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmNhcmQtPmJyX3dvcmssIDIgKiBIWikpCisJCWlmICghcXVldWVfZGVsYXllZF93b3JrKGZ3X3dvcmtxdWV1ZSwgJmNhcmQtPmJyX3dvcmssIDIgKiBIWikpCiAJCQlmd19jYXJkX3B1dChjYXJkKTsKIAkJcmV0dXJuOwogCX0KQEAgLTI1OCw4ICsyNTgsNyBAQAogCiAJaWYgKCFjYXJkLT5icm9hZGNhc3RfY2hhbm5lbF9hbGxvY2F0ZWQpIHsKIAkJZndfaXNvX3Jlc291cmNlX21hbmFnZShjYXJkLCBnZW5lcmF0aW9uLCAxVUxMIDw8IDMxLAotCQkJCSAgICAgICAmY2hhbm5lbCwgJmJhbmR3aWR0aCwgdHJ1ZSwKLQkJCQkgICAgICAgY2FyZC0+Ym1fdHJhbnNhY3Rpb25fZGF0YSk7CisJCQkJICAgICAgICZjaGFubmVsLCAmYmFuZHdpZHRoLCB0cnVlKTsKIAkJaWYgKGNoYW5uZWwgIT0gMzEpIHsKIAkJCWZ3X25vdGlmeSgiZmFpbGVkIHRvIGFsbG9jYXRlIGJyb2FkY2FzdCBjaGFubmVsXG4iKTsKIAkJCXJldHVybjsKQEAgLTI5NCw2ICsyOTMsNyBAQAogCWJvb2wgcm9vdF9kZXZpY2VfaXNfY21jOwogCWJvb2wgaXJtX2lzXzEzOTRfMTk5NV9vbmx5OwogCWJvb2wga2VlcF90aGlzX2lybTsKKwlfX2JlMzIgdHJhbnNhY3Rpb25fZGF0YVsyXTsKIAogCXNwaW5fbG9ja19pcnEoJmNhcmQtPmxvY2spOwogCkBAIC0zNTUsMjEgKzM1NSwyMSBAQAogCQkJZ290byBwaWNrX21lOwogCQl9CiAKLQkJY2FyZC0+Ym1fdHJhbnNhY3Rpb25fZGF0YVswXSA9IGNwdV90b19iZTMyKDB4M2YpOwotCQljYXJkLT5ibV90cmFuc2FjdGlvbl9kYXRhWzFdID0gY3B1X3RvX2JlMzIobG9jYWxfaWQpOworCQl0cmFuc2FjdGlvbl9kYXRhWzBdID0gY3B1X3RvX2JlMzIoMHgzZik7CisJCXRyYW5zYWN0aW9uX2RhdGFbMV0gPSBjcHVfdG9fYmUzMihsb2NhbF9pZCk7CiAKIAkJc3Bpbl91bmxvY2tfaXJxKCZjYXJkLT5sb2NrKTsKIAogCQlyY29kZSA9IGZ3X3J1bl90cmFuc2FjdGlvbihjYXJkLCBUQ09ERV9MT0NLX0NPTVBBUkVfU1dBUCwKIAkJCQlpcm1faWQsIGdlbmVyYXRpb24sIFNDT0RFXzEwMCwKIAkJCQlDU1JfUkVHSVNURVJfQkFTRSArIENTUl9CVVNfTUFOQUdFUl9JRCwKLQkJCQljYXJkLT5ibV90cmFuc2FjdGlvbl9kYXRhLCA4KTsKKwkJCQl0cmFuc2FjdGlvbl9kYXRhLCA4KTsKIAogCQlpZiAocmNvZGUgPT0gUkNPREVfR0VORVJBVElPTikKIAkJCS8qIEFub3RoZXIgYnVzIHJlc2V0LCBCTSB3b3JrIGhhcyBiZWVuIHJlc2NoZWR1bGVkLiAqLwogCQkJZ290byBvdXQ7CiAKLQkJYm1faWQgPSBiZTMyX3RvX2NwdShjYXJkLT5ibV90cmFuc2FjdGlvbl9kYXRhWzBdKTsKKwkJYm1faWQgPSBiZTMyX3RvX2NwdSh0cmFuc2FjdGlvbl9kYXRhWzBdKTsKIAogCQlzcGluX2xvY2tfaXJxKCZjYXJkLT5sb2NrKTsKIAkJaWYgKHJjb2RlID09IFJDT0RFX0NPTVBMRVRFICYmIGdlbmVyYXRpb24gPT0gY2FyZC0+Z2VuZXJhdGlvbikKQEAgLTQ5MCwxMSArNDkwLDExIEBACiAJCS8qCiAJCSAqIE1ha2Ugc3VyZSB0aGF0IHRoZSBjeWNsZSBtYXN0ZXIgc2VuZHMgY3ljbGUgc3RhcnQgcGFja2V0cy4KIAkJICovCi0JCWNhcmQtPmJtX3RyYW5zYWN0aW9uX2RhdGFbMF0gPSBjcHVfdG9fYmUzMihDU1JfU1RBVEVfQklUX0NNU1RSKTsKKwkJdHJhbnNhY3Rpb25fZGF0YVswXSA9IGNwdV90b19iZTMyKENTUl9TVEFURV9CSVRfQ01TVFIpOwogCQlyY29kZSA9IGZ3X3J1bl90cmFuc2FjdGlvbihjYXJkLCBUQ09ERV9XUklURV9RVUFETEVUX1JFUVVFU1QsCiAJCQkJcm9vdF9pZCwgZ2VuZXJhdGlvbiwgU0NPREVfMTAwLAogCQkJCUNTUl9SRUdJU1RFUl9CQVNFICsgQ1NSX1NUQVRFX1NFVCwKLQkJCQljYXJkLT5ibV90cmFuc2FjdGlvbl9kYXRhLCA0KTsKKwkJCQl0cmFuc2FjdGlvbl9kYXRhLCA0KTsKIAkJaWYgKHJjb2RlID09IFJDT0RFX0dFTkVSQVRJT04pCiAJCQlnb3RvIG91dDsKIAl9CkBAIC02MzAsNiArNjMwLDEwIEBACiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKK3N0YXRpYyB2b2lkIGR1bW15X2ZsdXNoX3F1ZXVlX2lzbyhzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCkKK3sKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBmd19jYXJkX2RyaXZlciBkdW1teV9kcml2ZXJfdGVtcGxhdGUgPSB7CiAJLnJlYWRfcGh5X3JlZwkJPSBkdW1teV9yZWFkX3BoeV9yZWcsCiAJLnVwZGF0ZV9waHlfcmVnCQk9IGR1bW15X3VwZGF0ZV9waHlfcmVnLApAQCAtNjQxLDYgKzY0NSw3IEBACiAJLnN0YXJ0X2lzbwkJPSBkdW1teV9zdGFydF9pc28sCiAJLnNldF9pc29fY2hhbm5lbHMJPSBkdW1teV9zZXRfaXNvX2NoYW5uZWxzLAogCS5xdWV1ZV9pc28JCT0gZHVtbXlfcXVldWVfaXNvLAorCS5mbHVzaF9xdWV1ZV9pc28JPSBkdW1teV9mbHVzaF9xdWV1ZV9pc28sCiB9OwogCiB2b2lkIGZ3X2NhcmRfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1jZGV2LmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2Rldi5jCmluZGV4IDYyYWMxMTEuLmIxYzExNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1jZGV2LmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLWNkZXYuYwpAQCAtMTQxLDcgKzE0MSw2IEBACiAJaW50IGdlbmVyYXRpb247CiAJdTY0IGNoYW5uZWxzOwogCXMzMiBiYW5kd2lkdGg7Ci0JX19iZTMyIHRyYW5zYWN0aW9uX2RhdGFbMl07CiAJc3RydWN0IGlzb19yZXNvdXJjZV9ldmVudCAqZV9hbGxvYywgKmVfZGVhbGxvYzsKIH07CiAKQEAgLTE1MCw3ICsxNDksNyBAQAogc3RhdGljIHZvaWQgc2NoZWR1bGVfaXNvX3Jlc291cmNlKHN0cnVjdCBpc29fcmVzb3VyY2UgKnIsIHVuc2lnbmVkIGxvbmcgZGVsYXkpCiB7CiAJY2xpZW50X2dldChyLT5jbGllbnQpOwotCWlmICghc2NoZWR1bGVfZGVsYXllZF93b3JrKCZyLT53b3JrLCBkZWxheSkpCisJaWYgKCFxdWV1ZV9kZWxheWVkX3dvcmsoZndfd29ya3F1ZXVlLCAmci0+d29yaywgZGVsYXkpKQogCQljbGllbnRfcHV0KHItPmNsaWVudCk7CiB9CiAKQEAgLTExMDgsNiArMTEwNyw3IEBACiAJCXBheWxvYWQgKz0gdS5wYWNrZXQucGF5bG9hZF9sZW5ndGg7CiAJCWNvdW50Kys7CiAJfQorCWZ3X2lzb19jb250ZXh0X3F1ZXVlX2ZsdXNoKGN0eCk7CiAKIAlhLT5zaXplICAgIC09IHVwdHJfdG9fdTY0KHApIC0gYS0+cGFja2V0czsKIAlhLT5wYWNrZXRzICA9IHVwdHJfdG9fdTY0KHApOwpAQCAtMTIyOSw4ICsxMjI5LDcgQEAKIAkJCXItPmNoYW5uZWxzLCAmY2hhbm5lbCwgJmJhbmR3aWR0aCwKIAkJCXRvZG8gPT0gSVNPX1JFU19BTExPQyB8fAogCQkJdG9kbyA9PSBJU09fUkVTX1JFQUxMT0MgfHwKLQkJCXRvZG8gPT0gSVNPX1JFU19BTExPQ19PTkNFLAotCQkJci0+dHJhbnNhY3Rpb25fZGF0YSk7CisJCQl0b2RvID09IElTT19SRVNfQUxMT0NfT05DRSk7CiAJLyoKIAkgKiBJcyB0aGlzIGdlbmVyYXRpb24gb3V0ZGF0ZWQgYWxyZWFkeT8gIEFzIGxvbmcgYXMgdGhpcyByZXNvdXJjZSBzdGlja3MKIAkgKiBpbiB0aGUgaWRyLCBpdCB3aWxsIGJlIHNjaGVkdWxlZCBhZ2FpbiBmb3IgYSBuZXdlciBnZW5lcmF0aW9uIG9yIGF0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtZGV2aWNlLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtZGV2aWNlLmMKaW5kZXggOWEyNjI0My4uOTVhNDcxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9jb3JlLWRldmljZS5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1kZXZpY2UuYwpAQCAtNzI1LDYgKzcyNSwxNSBAQAogCXJldHVybiBkZXZpY2U7CiB9CiAKK3N0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpmd193b3JrcXVldWU7CitFWFBPUlRfU1lNQk9MKGZ3X3dvcmtxdWV1ZSk7CisKK3N0YXRpYyB2b2lkIGZ3X3NjaGVkdWxlX2RldmljZV93b3JrKHN0cnVjdCBmd19kZXZpY2UgKmRldmljZSwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBkZWxheSkKK3sKKwlxdWV1ZV9kZWxheWVkX3dvcmsoZndfd29ya3F1ZXVlLCAmZGV2aWNlLT53b3JrLCBkZWxheSk7Cit9CisKIC8qCiAgKiBUaGVzZSBkZWZpbmVzIGNvbnRyb2wgdGhlIHJldHJ5IGJlaGF2aW9yIGZvciByZWFkaW5nIHRoZSBjb25maWcKICAqIHJvbS4gIEl0IHNob3VsZG4ndCBiZSBuZWNlc3NhcnkgdG8gdHdlYWsgdGhlc2U7IGlmIHRoZSBkZXZpY2UKQEAgLTc1MCw3ICs3NTksNyBAQAogCWlmICh0aW1lX2JlZm9yZTY0KGdldF9qaWZmaWVzXzY0KCksCiAJCQkgIGRldmljZS0+Y2FyZC0+cmVzZXRfamlmZmllcyArIFNIVVRET1dOX0RFTEFZKQogCSAgICAmJiAhbGlzdF9lbXB0eSgmZGV2aWNlLT5jYXJkLT5saW5rKSkgewotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldmljZS0+d29yaywgU0hVVERPV05fREVMQVkpOworCQlmd19zY2hlZHVsZV9kZXZpY2Vfd29yayhkZXZpY2UsIFNIVVRET1dOX0RFTEFZKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtODYyLDcgKzg3MSw3IEBACiAJCWZ3X25vdGlmeSgicmVkaXNjb3ZlcmVkIGRldmljZSAlc1xuIiwgZGV2X25hbWUoZGV2KSk7CiAKIAkJUFJFUEFSRV9ERUxBWUVEX1dPUksoJm9sZC0+d29yaywgZndfZGV2aWNlX3VwZGF0ZSk7Ci0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmb2xkLT53b3JrLCAwKTsKKwkJZndfc2NoZWR1bGVfZGV2aWNlX3dvcmsob2xkLCAwKTsKIAogCQlpZiAoY3VycmVudF9ub2RlID09IGNhcmQtPnJvb3Rfbm9kZSkKIAkJCWZ3X3NjaGVkdWxlX2JtX3dvcmsoY2FyZCwgMCk7CkBAIC05NTMsNyArOTYyLDcgQEAKIAkJaWYgKGRldmljZS0+Y29uZmlnX3JvbV9yZXRyaWVzIDwgTUFYX1JFVFJJRVMgJiYKIAkJICAgIGF0b21pY19yZWFkKCZkZXZpY2UtPnN0YXRlKSA9PSBGV19ERVZJQ0VfSU5JVElBTElaSU5HKSB7CiAJCQlkZXZpY2UtPmNvbmZpZ19yb21fcmV0cmllcysrOwotCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXZpY2UtPndvcmssIFJFVFJZX0RFTEFZKTsKKwkJCWZ3X3NjaGVkdWxlX2RldmljZV93b3JrKGRldmljZSwgUkVUUllfREVMQVkpOwogCQl9IGVsc2UgewogCQkJaWYgKGRldmljZS0+bm9kZS0+bGlua19vbikKIAkJCQlmd19ub3RpZnkoImdpdmluZyB1cCBvbiBjb25maWcgcm9tIGZvciBub2RlIGlkICV4XG4iLApAQCAtMTAxOSw3ICsxMDI4LDcgQEAKIAkJCSAgIEZXX0RFVklDRV9JTklUSUFMSVpJTkcsCiAJCQkgICBGV19ERVZJQ0VfUlVOTklORykgPT0gRldfREVWSUNFX0dPTkUpIHsKIAkJUFJFUEFSRV9ERUxBWUVEX1dPUksoJmRldmljZS0+d29yaywgZndfZGV2aWNlX3NodXRkb3duKTsKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXZpY2UtPndvcmssIFNIVVRET1dOX0RFTEFZKTsKKwkJZndfc2NoZWR1bGVfZGV2aWNlX3dvcmsoZGV2aWNlLCBTSFVURE9XTl9ERUxBWSk7CiAJfSBlbHNlIHsKIAkJaWYgKGRldmljZS0+Y29uZmlnX3JvbV9yZXRyaWVzKQogCQkJZndfbm90aWZ5KCJjcmVhdGVkIGRldmljZSAlczogR1VJRCAlMDh4JTA4eCwgUyVkMDAsICIKQEAgLTEwOTgsNyArMTEwNyw3IEBACiAJCWlmIChkZXZpY2UtPmNvbmZpZ19yb21fcmV0cmllcyA8IE1BWF9SRVRSSUVTIC8gMiAmJgogCQkgICAgYXRvbWljX3JlYWQoJmRldmljZS0+c3RhdGUpID09IEZXX0RFVklDRV9JTklUSUFMSVpJTkcpIHsKIAkJCWRldmljZS0+Y29uZmlnX3JvbV9yZXRyaWVzKys7Ci0JCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldmljZS0+d29yaywgUkVUUllfREVMQVkgLyAyKTsKKwkJCWZ3X3NjaGVkdWxlX2RldmljZV93b3JrKGRldmljZSwgUkVUUllfREVMQVkgLyAyKTsKIAogCQkJcmV0dXJuOwogCQl9CkBAIC0xMTMxLDcgKzExNDAsNyBAQAogCQlpZiAoZGV2aWNlLT5jb25maWdfcm9tX3JldHJpZXMgPCBNQVhfUkVUUklFUyAmJgogCQkgICAgYXRvbWljX3JlYWQoJmRldmljZS0+c3RhdGUpID09IEZXX0RFVklDRV9JTklUSUFMSVpJTkcpIHsKIAkJCWRldmljZS0+Y29uZmlnX3JvbV9yZXRyaWVzKys7Ci0JCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldmljZS0+d29yaywgUkVUUllfREVMQVkpOworCQkJZndfc2NoZWR1bGVfZGV2aWNlX3dvcmsoZGV2aWNlLCBSRVRSWV9ERUxBWSk7CiAKIAkJCXJldHVybjsKIAkJfQpAQCAtMTE1OCw3ICsxMTY3LDcgQEAKICBnb25lOgogCWF0b21pY19zZXQoJmRldmljZS0+c3RhdGUsIEZXX0RFVklDRV9HT05FKTsKIAlQUkVQQVJFX0RFTEFZRURfV09SSygmZGV2aWNlLT53b3JrLCBmd19kZXZpY2Vfc2h1dGRvd24pOwotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGV2aWNlLT53b3JrLCBTSFVURE9XTl9ERUxBWSk7CisJZndfc2NoZWR1bGVfZGV2aWNlX3dvcmsoZGV2aWNlLCBTSFVURE9XTl9ERUxBWSk7CiAgb3V0OgogCWlmIChub2RlX2lkID09IGNhcmQtPnJvb3Rfbm9kZS0+bm9kZV9pZCkKIAkJZndfc2NoZWR1bGVfYm1fd29yayhjYXJkLCAwKTsKQEAgLTEyMTQsNyArMTIyMyw3IEBACiAJCSAqIGZpcnN0IGNvbmZpZyByb20gc2NhbiBoYWxmIGEgc2Vjb25kIGFmdGVyIGJ1cyByZXNldC4KIAkJICovCiAJCUlOSVRfREVMQVlFRF9XT1JLKCZkZXZpY2UtPndvcmssIGZ3X2RldmljZV9pbml0KTsKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXZpY2UtPndvcmssIElOSVRJQUxfREVMQVkpOworCQlmd19zY2hlZHVsZV9kZXZpY2Vfd29yayhkZXZpY2UsIElOSVRJQUxfREVMQVkpOwogCQlicmVhazsKIAogCWNhc2UgRldfTk9ERV9JTklUSUFURURfUkVTRVQ6CkBAIC0xMjMwLDcgKzEyMzksNyBAQAogCQkJICAgIEZXX0RFVklDRV9SVU5OSU5HLAogCQkJICAgIEZXX0RFVklDRV9JTklUSUFMSVpJTkcpID09IEZXX0RFVklDRV9SVU5OSU5HKSB7CiAJCQlQUkVQQVJFX0RFTEFZRURfV09SSygmZGV2aWNlLT53b3JrLCBmd19kZXZpY2VfcmVmcmVzaCk7Ci0JCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldmljZS0+d29yaywKKwkJCWZ3X3NjaGVkdWxlX2RldmljZV93b3JrKGRldmljZSwKIAkJCQlkZXZpY2UtPmlzX2xvY2FsID8gMCA6IElOSVRJQUxfREVMQVkpOwogCQl9CiAJCWJyZWFrOwpAQCAtMTI0NSw3ICsxMjU0LDcgQEAKIAkJZGV2aWNlLT5nZW5lcmF0aW9uID0gY2FyZC0+Z2VuZXJhdGlvbjsKIAkJaWYgKGF0b21pY19yZWFkKCZkZXZpY2UtPnN0YXRlKSA9PSBGV19ERVZJQ0VfUlVOTklORykgewogCQkJUFJFUEFSRV9ERUxBWUVEX1dPUksoJmRldmljZS0+d29yaywgZndfZGV2aWNlX3VwZGF0ZSk7Ci0JCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldmljZS0+d29yaywgMCk7CisJCQlmd19zY2hlZHVsZV9kZXZpY2Vfd29yayhkZXZpY2UsIDApOwogCQl9CiAJCWJyZWFrOwogCkBAIC0xMjcwLDcgKzEyNzksNyBAQAogCQlpZiAoYXRvbWljX3hjaGcoJmRldmljZS0+c3RhdGUsCiAJCQkJRldfREVWSUNFX0dPTkUpID09IEZXX0RFVklDRV9SVU5OSU5HKSB7CiAJCQlQUkVQQVJFX0RFTEFZRURfV09SSygmZGV2aWNlLT53b3JrLCBmd19kZXZpY2Vfc2h1dGRvd24pOwotCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXZpY2UtPndvcmssCisJCQlmd19zY2hlZHVsZV9kZXZpY2Vfd29yayhkZXZpY2UsCiAJCQkJbGlzdF9lbXB0eSgmY2FyZC0+bGluaykgPyAwIDogU0hVVERPV05fREVMQVkpOwogCQl9CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jCmluZGV4IDQ4MTA1NmQuLjU3YzM5NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmMKQEAgLTE4NSw2ICsxODUsMTIgQEAKIH0KIEVYUE9SVF9TWU1CT0woZndfaXNvX2NvbnRleHRfcXVldWUpOwogCit2b2lkIGZ3X2lzb19jb250ZXh0X3F1ZXVlX2ZsdXNoKHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4KQoreworCWN0eC0+Y2FyZC0+ZHJpdmVyLT5mbHVzaF9xdWV1ZV9pc28oY3R4KTsKK30KK0VYUE9SVF9TWU1CT0woZndfaXNvX2NvbnRleHRfcXVldWVfZmx1c2gpOworCiBpbnQgZndfaXNvX2NvbnRleHRfc3RvcChzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCkKIHsKIAlyZXR1cm4gY3R4LT5jYXJkLT5kcml2ZXItPnN0b3BfaXNvKGN0eCk7CkBAIC0xOTYsOSArMjAyLDEwIEBACiAgKi8KIAogc3RhdGljIGludCBtYW5hZ2VfYmFuZHdpZHRoKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgaXJtX2lkLCBpbnQgZ2VuZXJhdGlvbiwKLQkJCSAgICBpbnQgYmFuZHdpZHRoLCBib29sIGFsbG9jYXRlLCBfX2JlMzIgZGF0YVsyXSkKKwkJCSAgICBpbnQgYmFuZHdpZHRoLCBib29sIGFsbG9jYXRlKQogewogCWludCB0cnksIG5ldywgb2xkID0gYWxsb2NhdGUgPyBCQU5EV0lEVEhfQVZBSUxBQkxFX0lOSVRJQUwgOiAwOworCV9fYmUzMiBkYXRhWzJdOwogCiAJLyoKIAkgKiBPbiBhIDEzOTRhIElSTSB3aXRoIGxvdyBjb250ZW50aW9uLCB0cnkgPCAxIGlzIGVub3VnaC4KQEAgLTIzMyw5ICsyNDAsMTAgQEAKIH0KIAogc3RhdGljIGludCBtYW5hZ2VfY2hhbm5lbChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IGlybV9pZCwgaW50IGdlbmVyYXRpb24sCi0JCXUzMiBjaGFubmVsc19tYXNrLCB1NjQgb2Zmc2V0LCBib29sIGFsbG9jYXRlLCBfX2JlMzIgZGF0YVsyXSkKKwkJdTMyIGNoYW5uZWxzX21hc2ssIHU2NCBvZmZzZXQsIGJvb2wgYWxsb2NhdGUpCiB7CiAJX19iZTMyIGJpdCwgYWxsLCBvbGQ7CisJX19iZTMyIGRhdGFbMl07CiAJaW50IGNoYW5uZWwsIHJldCA9IC1FSU8sIHJldHJ5ID0gNTsKIAogCW9sZCA9IGFsbCA9IGFsbG9jYXRlID8gY3B1X3RvX2JlMzIofjApIDogMDsKQEAgLTI4NCw3ICsyOTIsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlX2NoYW5uZWwoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBpcm1faWQsCi0JCQkgICAgICAgaW50IGdlbmVyYXRpb24sIGludCBjaGFubmVsLCBfX2JlMzIgYnVmZmVyWzJdKQorCQkJICAgICAgIGludCBnZW5lcmF0aW9uLCBpbnQgY2hhbm5lbCkKIHsKIAl1MzIgbWFzazsKIAl1NjQgb2Zmc2V0OwpAQCAtMjkzLDcgKzMwMSw3IEBACiAJb2Zmc2V0ID0gY2hhbm5lbCA8IDMyID8gQ1NSX1JFR0lTVEVSX0JBU0UgKyBDU1JfQ0hBTk5FTFNfQVZBSUxBQkxFX0hJIDoKIAkJCQlDU1JfUkVHSVNURVJfQkFTRSArIENTUl9DSEFOTkVMU19BVkFJTEFCTEVfTE87CiAKLQltYW5hZ2VfY2hhbm5lbChjYXJkLCBpcm1faWQsIGdlbmVyYXRpb24sIG1hc2ssIG9mZnNldCwgZmFsc2UsIGJ1ZmZlcik7CisJbWFuYWdlX2NoYW5uZWwoY2FyZCwgaXJtX2lkLCBnZW5lcmF0aW9uLCBtYXNrLCBvZmZzZXQsIGZhbHNlKTsKIH0KIAogLyoqCkBAIC0zMjIsNyArMzMwLDcgQEAKICAqLwogdm9pZCBmd19pc29fcmVzb3VyY2VfbWFuYWdlKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgZ2VuZXJhdGlvbiwKIAkJCSAgICB1NjQgY2hhbm5lbHNfbWFzaywgaW50ICpjaGFubmVsLCBpbnQgKmJhbmR3aWR0aCwKLQkJCSAgICBib29sIGFsbG9jYXRlLCBfX2JlMzIgYnVmZmVyWzJdKQorCQkJICAgIGJvb2wgYWxsb2NhdGUpCiB7CiAJdTMyIGNoYW5uZWxzX2hpID0gY2hhbm5lbHNfbWFzazsJLyogY2hhbm5lbHMgMzEuLi4wICovCiAJdTMyIGNoYW5uZWxzX2xvID0gY2hhbm5lbHNfbWFzayA+PiAzMjsJLyogY2hhbm5lbHMgNjMuLi4zMiAqLwpAQCAtMzM1LDExICszNDMsMTEgQEAKIAlpZiAoY2hhbm5lbHNfaGkpCiAJCWMgPSBtYW5hZ2VfY2hhbm5lbChjYXJkLCBpcm1faWQsIGdlbmVyYXRpb24sIGNoYW5uZWxzX2hpLAogCQkJCUNTUl9SRUdJU1RFUl9CQVNFICsgQ1NSX0NIQU5ORUxTX0FWQUlMQUJMRV9ISSwKLQkJCQlhbGxvY2F0ZSwgYnVmZmVyKTsKKwkJCQlhbGxvY2F0ZSk7CiAJaWYgKGNoYW5uZWxzX2xvICYmIGMgPCAwKSB7CiAJCWMgPSBtYW5hZ2VfY2hhbm5lbChjYXJkLCBpcm1faWQsIGdlbmVyYXRpb24sIGNoYW5uZWxzX2xvLAogCQkJCUNTUl9SRUdJU1RFUl9CQVNFICsgQ1NSX0NIQU5ORUxTX0FWQUlMQUJMRV9MTywKLQkJCQlhbGxvY2F0ZSwgYnVmZmVyKTsKKwkJCQlhbGxvY2F0ZSk7CiAJCWlmIChjID49IDApCiAJCQljICs9IDMyOwogCX0KQEAgLTM1MSwxNCArMzU5LDEzIEBACiAJaWYgKCpiYW5kd2lkdGggPT0gMCkKIAkJcmV0dXJuOwogCi0JcmV0ID0gbWFuYWdlX2JhbmR3aWR0aChjYXJkLCBpcm1faWQsIGdlbmVyYXRpb24sICpiYW5kd2lkdGgsCi0JCQkgICAgICAgYWxsb2NhdGUsIGJ1ZmZlcik7CisJcmV0ID0gbWFuYWdlX2JhbmR3aWR0aChjYXJkLCBpcm1faWQsIGdlbmVyYXRpb24sICpiYW5kd2lkdGgsIGFsbG9jYXRlKTsKIAlpZiAocmV0IDwgMCkKIAkJKmJhbmR3aWR0aCA9IDA7CiAKIAlpZiAoYWxsb2NhdGUgJiYgcmV0IDwgMCkgewogCQlpZiAoYyA+PSAwKQotCQkJZGVhbGxvY2F0ZV9jaGFubmVsKGNhcmQsIGlybV9pZCwgZ2VuZXJhdGlvbiwgYywgYnVmZmVyKTsKKwkJCWRlYWxsb2NhdGVfY2hhbm5lbChjYXJkLCBpcm1faWQsIGdlbmVyYXRpb24sIGMpOwogCQkqY2hhbm5lbCA9IHJldDsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtdHJhbnNhY3Rpb24uYyBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS10cmFuc2FjdGlvbi5jCmluZGV4IGQwMGY4Y2UuLjMzNGI4MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS10cmFuc2FjdGlvbi5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS10cmFuc2FjdGlvbi5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCkBAIC0zMjYsOCArMzI3LDggQEAKICAqIEl0IHdpbGwgY29udGFpbiB0YWcsIGNoYW5uZWwsIGFuZCBzeSBkYXRhIGluc3RlYWQgb2YgYSBub2RlIElEIHRoZW4uCiAgKgogICogVGhlIHBheWxvYWQgYnVmZmVyIGF0IEBkYXRhIGlzIGdvaW5nIHRvIGJlIERNQS1tYXBwZWQgZXhjZXB0IGluIGNhc2Ugb2YKLSAqIHF1YWRsZXQtc2l6ZWQgcGF5bG9hZCBvciBvZiBsb2NhbCAobG9vcGJhY2spIHJlcXVlc3RzLiAgSGVuY2UgbWFrZSBzdXJlIHRoYXQKLSAqIHRoZSBidWZmZXIgY29tcGxpZXMgd2l0aCB0aGUgcmVzdHJpY3Rpb25zIGZvciBETUEtbWFwcGVkIG1lbW9yeS4gIFRoZQorICogQGxlbmd0aCA8PSA4IG9yIG9mIGxvY2FsIChsb29wYmFjaykgcmVxdWVzdHMuICBIZW5jZSBtYWtlIHN1cmUgdGhhdCB0aGUKKyAqIGJ1ZmZlciBjb21wbGllcyB3aXRoIHRoZSByZXN0cmljdGlvbnMgb2YgdGhlIHN0cmVhbWluZyBETUEgbWFwcGluZyBBUEkuCiAgKiBAcGF5bG9hZCBtdXN0IG5vdCBiZSBmcmVlZCBiZWZvcmUgdGhlIEBjYWxsYmFjayBpcyBjYWxsZWQuCiAgKgogICogSW4gY2FzZSBvZiByZXF1ZXN0IHR5cGVzIHdpdGhvdXQgcGF5bG9hZCwgQGRhdGEgaXMgTlVMTCBhbmQgQGxlbmd0aCBpcyAwLgpAQCAtNDExLDcgKzQxMiw4IEBACiAgKgogICogUmV0dXJucyB0aGUgUkNPREUuICBTZWUgZndfc2VuZF9yZXF1ZXN0KCkgZm9yIHBhcmFtZXRlciBkb2N1bWVudGF0aW9uLgogICogVW5saWtlIGZ3X3NlbmRfcmVxdWVzdCgpLCBAZGF0YSBwb2ludHMgdG8gdGhlIHBheWxvYWQgb2YgdGhlIHJlcXVlc3Qgb3IvYW5kCi0gKiB0byB0aGUgcGF5bG9hZCBvZiB0aGUgcmVzcG9uc2UuCisgKiB0byB0aGUgcGF5bG9hZCBvZiB0aGUgcmVzcG9uc2UuICBETUEgbWFwcGluZyByZXN0cmljdGlvbnMgYXBwbHkgdG8gb3V0Ym91bmQKKyAqIHJlcXVlc3QgcGF5bG9hZHMgb2YgPj0gOCBieXRlcyBidXQgbm90IHRvIGluYm91bmQgcmVzcG9uc2UgcGF5bG9hZHMuCiAgKi8KIGludCBmd19ydW5fdHJhbnNhY3Rpb24oc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCB0Y29kZSwgaW50IGRlc3RpbmF0aW9uX2lkLAogCQkgICAgICAgaW50IGdlbmVyYXRpb24sIGludCBzcGVlZCwgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwKQEAgLTEyMTIsMTMgKzEyMTQsMjEgQEAKIHsKIAlpbnQgcmV0OwogCisJZndfd29ya3F1ZXVlID0gYWxsb2Nfd29ya3F1ZXVlKCJmaXJld2lyZSIsCisJCQkJICAgICAgIFdRX05PTl9SRUVOVFJBTlQgfCBXUV9NRU1fUkVDTEFJTSwgMCk7CisJaWYgKCFmd193b3JrcXVldWUpCisJCXJldHVybiAtRU5PTUVNOworCiAJcmV0ID0gYnVzX3JlZ2lzdGVyKCZmd19idXNfdHlwZSk7Ci0JaWYgKHJldCA8IDApCisJaWYgKHJldCA8IDApIHsKKwkJZGVzdHJveV93b3JrcXVldWUoZndfd29ya3F1ZXVlKTsKIAkJcmV0dXJuIHJldDsKKwl9CiAKIAlmd19jZGV2X21ham9yID0gcmVnaXN0ZXJfY2hyZGV2KDAsICJmaXJld2lyZSIsICZmd19kZXZpY2Vfb3BzKTsKIAlpZiAoZndfY2Rldl9tYWpvciA8IDApIHsKIAkJYnVzX3VucmVnaXN0ZXIoJmZ3X2J1c190eXBlKTsKKwkJZGVzdHJveV93b3JrcXVldWUoZndfd29ya3F1ZXVlKTsKIAkJcmV0dXJuIGZ3X2NkZXZfbWFqb3I7CiAJfQogCkBAIC0xMjM0LDYgKzEyNDQsNyBAQAogewogCXVucmVnaXN0ZXJfY2hyZGV2KGZ3X2NkZXZfbWFqb3IsICJmaXJld2lyZSIpOwogCWJ1c191bnJlZ2lzdGVyKCZmd19idXNfdHlwZSk7CisJZGVzdHJveV93b3JrcXVldWUoZndfd29ya3F1ZXVlKTsKIAlpZHJfZGVzdHJveSgmZndfZGV2aWNlX2lkcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS5oIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLmgKaW5kZXggMjVlNzI5Yy4uMGZlNGU0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9jb3JlLmgKKysrIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLmgKQEAgLTk3LDYgKzk3LDggQEAKIAkJCSBzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLAogCQkJIHVuc2lnbmVkIGxvbmcgcGF5bG9hZCk7CiAKKwl2b2lkICgqZmx1c2hfcXVldWVfaXNvKShzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCk7CisKIAlpbnQgKCpzdG9wX2lzbykoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHgpOwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9uZXQuYyBiL2RyaXZlcnMvZmlyZXdpcmUvbmV0LmMKaW5kZXggM2YwNGRkMy4uYjk3NjJkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9uZXQuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL25ldC5jCkBAIC04ODEsNyArODgxLDkgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOwogCi0JaWYgKHJldHZhbCA8IDApCisJaWYgKHJldHZhbCA+PSAwKQorCQlmd19pc29fY29udGV4dF9xdWV1ZV9mbHVzaChkZXYtPmJyb2FkY2FzdF9yY3ZfY29udGV4dCk7CisJZWxzZQogCQlmd19lcnJvcigicmVxdWV1ZSBmYWlsZWRcbiIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYyBiL2RyaXZlcnMvZmlyZXdpcmUvb2hjaS5jCmluZGV4IDIzZDE0NjguLjQzOGU2YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvb2hjaS5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvb2hjaS5jCkBAIC0xMDA2LDEzICsxMDA2LDEyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgZGVzY3JpcHRvciAqZmluZF9icmFuY2hfZGVzY3JpcHRvcihzdHJ1Y3QgZGVzY3JpcHRvciAqZCwgaW50IHopCiB7Ci0JaW50IGIsIGtleTsKKwlfX2xlMTYgYnJhbmNoOwogCi0JYiAgID0gKGxlMTZfdG9fY3B1KGQtPmNvbnRyb2wpICYgREVTQ1JJUFRPUl9CUkFOQ0hfQUxXQVlTKSA+PiAyOwotCWtleSA9IChsZTE2X3RvX2NwdShkLT5jb250cm9sKSAmIERFU0NSSVBUT1JfS0VZX0lNTUVESUFURSkgPj4gODsKKwlicmFuY2ggPSBkLT5jb250cm9sICYgY3B1X3RvX2xlMTYoREVTQ1JJUFRPUl9CUkFOQ0hfQUxXQVlTKTsKIAogCS8qIGZpZ3VyZSBvdXQgd2hpY2ggZGVzY3JpcHRvciB0aGUgYnJhbmNoIGFkZHJlc3MgZ29lcyBpbiAqLwotCWlmICh6ID09IDIgJiYgKGIgPT0gMyB8fCBrZXkgPT0gMikpCisJaWYgKHogPT0gMiAmJiBicmFuY2ggPT0gY3B1X3RvX2xlMTYoREVTQ1JJUFRPUl9CUkFOQ0hfQUxXQVlTKSkKIAkJcmV0dXJuIGQ7CiAJZWxzZQogCQlyZXR1cm4gZCArIHogLSAxOwpAQCAtMTE5Myw5ICsxMTkyLDYgQEAKIAl3bWIoKTsgLyogZmluaXNoIGluaXQgb2YgbmV3IGRlc2NyaXB0b3JzIGJlZm9yZSBicmFuY2hfYWRkcmVzcyB1cGRhdGUgKi8KIAljdHgtPnByZXYtPmJyYW5jaF9hZGRyZXNzID0gY3B1X3RvX2xlMzIoZF9idXMgfCB6KTsKIAljdHgtPnByZXYgPSBmaW5kX2JyYW5jaF9kZXNjcmlwdG9yKGQsIHopOwotCi0JcmVnX3dyaXRlKGN0eC0+b2hjaSwgQ09OVFJPTF9TRVQoY3R4LT5yZWdzKSwgQ09OVEVYVF9XQUtFKTsKLQlmbHVzaF93cml0ZXMoY3R4LT5vaGNpKTsKIH0KIAogc3RhdGljIHZvaWQgY29udGV4dF9zdG9wKHN0cnVjdCBjb250ZXh0ICpjdHgpCkBAIC0xMjE4LDYgKzEyMTQsNyBAQAogfQogCiBzdHJ1Y3QgZHJpdmVyX2RhdGEgeworCXU4IGlubGluZV9kYXRhWzhdOwogCXN0cnVjdCBmd19wYWNrZXQgKnBhY2tldDsKIH07CiAKQEAgLTEzMDEsMjAgKzEyOTgsMjggQEAKIAkJcmV0dXJuIC0xOwogCX0KIAorCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGRyaXZlcl9kYXRhKSA+IHNpemVvZihzdHJ1Y3QgZGVzY3JpcHRvcikpOwogCWRyaXZlcl9kYXRhID0gKHN0cnVjdCBkcml2ZXJfZGF0YSAqKSAmZFszXTsKIAlkcml2ZXJfZGF0YS0+cGFja2V0ID0gcGFja2V0OwogCXBhY2tldC0+ZHJpdmVyX2RhdGEgPSBkcml2ZXJfZGF0YTsKIAogCWlmIChwYWNrZXQtPnBheWxvYWRfbGVuZ3RoID4gMCkgewotCQlwYXlsb2FkX2J1cyA9Ci0JCQlkbWFfbWFwX3NpbmdsZShvaGNpLT5jYXJkLmRldmljZSwgcGFja2V0LT5wYXlsb2FkLAotCQkJCSAgICAgICBwYWNrZXQtPnBheWxvYWRfbGVuZ3RoLCBETUFfVE9fREVWSUNFKTsKLQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKG9oY2ktPmNhcmQuZGV2aWNlLCBwYXlsb2FkX2J1cykpIHsKLQkJCXBhY2tldC0+YWNrID0gUkNPREVfU0VORF9FUlJPUjsKLQkJCXJldHVybiAtMTsKKwkJaWYgKHBhY2tldC0+cGF5bG9hZF9sZW5ndGggPiBzaXplb2YoZHJpdmVyX2RhdGEtPmlubGluZV9kYXRhKSkgeworCQkJcGF5bG9hZF9idXMgPSBkbWFfbWFwX3NpbmdsZShvaGNpLT5jYXJkLmRldmljZSwKKwkJCQkJCSAgICAgcGFja2V0LT5wYXlsb2FkLAorCQkJCQkJICAgICBwYWNrZXQtPnBheWxvYWRfbGVuZ3RoLAorCQkJCQkJICAgICBETUFfVE9fREVWSUNFKTsKKwkJCWlmIChkbWFfbWFwcGluZ19lcnJvcihvaGNpLT5jYXJkLmRldmljZSwgcGF5bG9hZF9idXMpKSB7CisJCQkJcGFja2V0LT5hY2sgPSBSQ09ERV9TRU5EX0VSUk9SOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCXBhY2tldC0+cGF5bG9hZF9idXMJPSBwYXlsb2FkX2J1czsKKwkJCXBhY2tldC0+cGF5bG9hZF9tYXBwZWQJPSB0cnVlOworCQl9IGVsc2UgeworCQkJbWVtY3B5KGRyaXZlcl9kYXRhLT5pbmxpbmVfZGF0YSwgcGFja2V0LT5wYXlsb2FkLAorCQkJICAgICAgIHBhY2tldC0+cGF5bG9hZF9sZW5ndGgpOworCQkJcGF5bG9hZF9idXMgPSBkX2J1cyArIDMgKiBzaXplb2YoKmQpOwogCQl9Ci0JCXBhY2tldC0+cGF5bG9hZF9idXMJPSBwYXlsb2FkX2J1czsKLQkJcGFja2V0LT5wYXlsb2FkX21hcHBlZAk9IHRydWU7CiAKIAkJZFsyXS5yZXFfY291bnQgICAgPSBjcHVfdG9fbGUxNihwYWNrZXQtPnBheWxvYWRfbGVuZ3RoKTsKIAkJZFsyXS5kYXRhX2FkZHJlc3MgPSBjcHVfdG9fbGUzMihwYXlsb2FkX2J1cyk7CkBAIC0xMzQwLDggKzEzNDUsMTIgQEAKIAogCWNvbnRleHRfYXBwZW5kKGN0eCwgZCwgeiwgNCAtIHopOwogCi0JaWYgKCFjdHgtPnJ1bm5pbmcpCisJaWYgKGN0eC0+cnVubmluZykgeworCQlyZWdfd3JpdGUob2hjaSwgQ09OVFJPTF9TRVQoY3R4LT5yZWdzKSwgQ09OVEVYVF9XQUtFKTsKKwkJZmx1c2hfd3JpdGVzKG9oY2kpOworCX0gZWxzZSB7CiAJCWNvbnRleHRfcnVuKGN0eCwgMCk7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMDY2LDggKzIwNzUsNiBAQAogCiAJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X1NlbGZJREJ1ZmZlciwgb2hjaS0+c2VsZl9pZF9idXMpOwogCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9MaW5rQ29udHJvbFNldCwKLQkJICBPSENJMTM5NF9MaW5rQ29udHJvbF9yY3ZTZWxmSUQgfAotCQkgIE9IQ0kxMzk0X0xpbmtDb250cm9sX3JjdlBoeVBrdCB8CiAJCSAgT0hDSTEzOTRfTGlua0NvbnRyb2xfY3ljbGVUaW1lckVuYWJsZSB8CiAJCSAgT0hDSTEzOTRfTGlua0NvbnRyb2xfY3ljbGVNYXN0ZXIpOwogCkBAIC0yMDk0LDkgKzIxMDEsNiBAQAogCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9GYWlybmVzc0NvbnRyb2wsIDApOwogCWNhcmQtPnByaW9yaXR5X2J1ZGdldF9pbXBsZW1lbnRlZCA9IG9oY2ktPnByaV9yZXFfbWF4ICE9IDA7CiAKLQlhcl9jb250ZXh0X3J1bigmb2hjaS0+YXJfcmVxdWVzdF9jdHgpOwotCWFyX2NvbnRleHRfcnVuKCZvaGNpLT5hcl9yZXNwb25zZV9jdHgpOwotCiAJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X1BoeVVwcGVyQm91bmQsIDB4MDAwMTAwMDApOwogCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9JbnRFdmVudENsZWFyLCB+MCk7CiAJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0ludE1hc2tDbGVhciwgfjApOwpAQCAtMjE4Niw3ICsyMTkwLDEzIEBACiAJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0hDQ29udHJvbFNldCwKIAkJICBPSENJMTM5NF9IQ0NvbnRyb2xfbGlua0VuYWJsZSB8CiAJCSAgT0hDSTEzOTRfSENDb250cm9sX0JJQmltYWdlVmFsaWQpOwotCWZsdXNoX3dyaXRlcyhvaGNpKTsKKworCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9MaW5rQ29udHJvbFNldCwKKwkJICBPSENJMTM5NF9MaW5rQ29udHJvbF9yY3ZTZWxmSUQgfAorCQkgIE9IQ0kxMzk0X0xpbmtDb250cm9sX3JjdlBoeVBrdCk7CisKKwlhcl9jb250ZXh0X3J1bigmb2hjaS0+YXJfcmVxdWVzdF9jdHgpOworCWFyX2NvbnRleHRfcnVuKCZvaGNpLT5hcl9yZXNwb25zZV9jdHgpOyAvKiBhbHNvIGZsdXNoZXMgd3JpdGVzICovCiAKIAkvKiBXZSBhcmUgcmVhZHkgdG8gZ28sIHJlc2V0IGJ1cyB0byBmaW5pc2ggaW5pdGlhbGl6YXRpb24uICovCiAJZndfc2NoZWR1bGVfYnVzX3Jlc2V0KCZvaGNpLT5jYXJkLCBmYWxzZSwgdHJ1ZSk7CkBAIC0zMTEyLDYgKzMxMjIsMTUgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBvaGNpX2ZsdXNoX3F1ZXVlX2lzbyhzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmJhc2UpCit7CisJc3RydWN0IGNvbnRleHQgKmN0eCA9CisJCQkmY29udGFpbmVyX29mKGJhc2UsIHN0cnVjdCBpc29fY29udGV4dCwgYmFzZSktPmNvbnRleHQ7CisKKwlyZWdfd3JpdGUoY3R4LT5vaGNpLCBDT05UUk9MX1NFVChjdHgtPnJlZ3MpLCBDT05URVhUX1dBS0UpOworCWZsdXNoX3dyaXRlcyhjdHgtPm9oY2kpOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZ3X2NhcmRfZHJpdmVyIG9oY2lfZHJpdmVyID0gewogCS5lbmFibGUJCQk9IG9oY2lfZW5hYmxlLAogCS5yZWFkX3BoeV9yZWcJCT0gb2hjaV9yZWFkX3BoeV9yZWcsCkBAIC0zMTI4LDYgKzMxNDcsNyBAQAogCS5mcmVlX2lzb19jb250ZXh0CT0gb2hjaV9mcmVlX2lzb19jb250ZXh0LAogCS5zZXRfaXNvX2NoYW5uZWxzCT0gb2hjaV9zZXRfaXNvX2NoYW5uZWxzLAogCS5xdWV1ZV9pc28JCT0gb2hjaV9xdWV1ZV9pc28sCisJLmZsdXNoX3F1ZXVlX2lzbwk9IG9oY2lfZmx1c2hfcXVldWVfaXNvLAogCS5zdGFydF9pc28JCT0gb2hjaV9zdGFydF9pc28sCiAJLnN0b3BfaXNvCQk9IG9oY2lfc3RvcF9pc28sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9zYnAyLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL3NicDIuYwppbmRleCA3N2VkNTg5Li40MTg0MWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL3NicDIuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL3NicDIuYwpAQCAtMTI1LDkgKzEyNSw2IEBACiAJIiwgb3ZlcnJpZGUgaW50ZXJuYWwgYmxhY2tsaXN0ID0gIiBfX3N0cmluZ2lmeShTQlAyX1dPUktBUk9VTkRfT1ZFUlJJREUpCiAJIiwgb3IgYSBjb21iaW5hdGlvbikiKTsKIAotLyogSSBkb24ndCBrbm93IHdoeSB0aGUgU0NTSSBzdGFjayBkb2Vzbid0IGRlZmluZSBzb21ldGhpbmcgbGlrZSB0aGlzLi4uICovCi10eXBlZGVmIHZvaWQgKCpzY3NpX2RvbmVfZm5fdCkoc3RydWN0IHNjc2lfY21uZCAqKTsKLQogc3RhdGljIGNvbnN0IGNoYXIgc2JwMl9kcml2ZXJfbmFtZVtdID0gInNicDIiOwogCiAvKgpAQCAtMjYxLDcgKzI1OCw2IEBACiAJc3RydWN0IGtyZWYga3JlZjsKIAlkbWFfYWRkcl90IHJlcXVlc3RfYnVzOwogCWludCByY29kZTsKLQlzdHJ1Y3Qgc2JwMl9wb2ludGVyIHBvaW50ZXI7CiAJdm9pZCAoKmNhbGxiYWNrKShzdHJ1Y3Qgc2JwMl9vcmIgKiBvcmIsIHN0cnVjdCBzYnAyX3N0YXR1cyAqIHN0YXR1cyk7CiAJc3RydWN0IGxpc3RfaGVhZCBsaW5rOwogfTsKQEAgLTMxNCw3ICszMTAsNiBAQAogCQl1OCBjb21tYW5kX2Jsb2NrW1NCUDJfTUFYX0NEQl9TSVpFXTsKIAl9IHJlcXVlc3Q7CiAJc3RydWN0IHNjc2lfY21uZCAqY21kOwotCXNjc2lfZG9uZV9mbl90IGRvbmU7CiAJc3RydWN0IHNicDJfbG9naWNhbF91bml0ICpsdTsKIAogCXN0cnVjdCBzYnAyX3BvaW50ZXIgcGFnZV90YWJsZVtTR19BTExdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKQEAgLTQ5NCwxMCArNDg5LDExIEBACiAJCQkgIGludCBub2RlX2lkLCBpbnQgZ2VuZXJhdGlvbiwgdTY0IG9mZnNldCkKIHsKIAlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UgPSB0YXJnZXRfZGV2aWNlKGx1LT50Z3QpOworCXN0cnVjdCBzYnAyX3BvaW50ZXIgb3JiX3BvaW50ZXI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCW9yYi0+cG9pbnRlci5oaWdoID0gMDsKLQlvcmItPnBvaW50ZXIubG93ID0gY3B1X3RvX2JlMzIob3JiLT5yZXF1ZXN0X2J1cyk7CisJb3JiX3BvaW50ZXIuaGlnaCA9IDA7CisJb3JiX3BvaW50ZXIubG93ID0gY3B1X3RvX2JlMzIob3JiLT5yZXF1ZXN0X2J1cyk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2aWNlLT5jYXJkLT5sb2NrLCBmbGFncyk7CiAJbGlzdF9hZGRfdGFpbCgmb3JiLT5saW5rLCAmbHUtPm9yYl9saXN0KTsKQEAgLTUwOCw3ICs1MDQsNyBAQAogCiAJZndfc2VuZF9yZXF1ZXN0KGRldmljZS0+Y2FyZCwgJm9yYi0+dCwgVENPREVfV1JJVEVfQkxPQ0tfUkVRVUVTVCwKIAkJCW5vZGVfaWQsIGdlbmVyYXRpb24sIGRldmljZS0+bWF4X3NwZWVkLCBvZmZzZXQsCi0JCQkmb3JiLT5wb2ludGVyLCA4LCBjb21wbGV0ZV90cmFuc2FjdGlvbiwgb3JiKTsKKwkJCSZvcmJfcG9pbnRlciwgOCwgY29tcGxldGVfdHJhbnNhY3Rpb24sIG9yYik7CiB9CiAKIHN0YXRpYyBpbnQgc2JwMl9jYW5jZWxfb3JicyhzdHJ1Y3Qgc2JwMl9sb2dpY2FsX3VuaXQgKmx1KQpAQCAtODMwLDggKzgyNiw2IEBACiAJa3JlZl9wdXQoJnRndC0+a3JlZiwgc2JwMl9yZWxlYXNlX3RhcmdldCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqc2JwMl93cTsKLQogLyoKICAqIEFsd2F5cyBnZXQgdGhlIHRhcmdldCdzIGtyZWYgd2hlbiBzY2hlZHVsaW5nIHdvcmsgb24gb25lIGl0cyB1bml0cy4KICAqIEVhY2ggd29ya3F1ZXVlIGpvYiBpcyByZXNwb25zaWJsZSB0byBjYWxsIHNicDJfdGFyZ2V0X3B1dCgpIHVwb24gcmV0dXJuLgpAQCAtODM5LDcgKzgzMyw3IEBACiBzdGF0aWMgdm9pZCBzYnAyX3F1ZXVlX3dvcmsoc3RydWN0IHNicDJfbG9naWNhbF91bml0ICpsdSwgdW5zaWduZWQgbG9uZyBkZWxheSkKIHsKIAlzYnAyX3RhcmdldF9nZXQobHUtPnRndCk7Ci0JaWYgKCFxdWV1ZV9kZWxheWVkX3dvcmsoc2JwMl93cSwgJmx1LT53b3JrLCBkZWxheSkpCisJaWYgKCFxdWV1ZV9kZWxheWVkX3dvcmsoZndfd29ya3F1ZXVlLCAmbHUtPndvcmssIGRlbGF5KSkKIAkJc2JwMl90YXJnZXRfcHV0KGx1LT50Z3QpOwogfQogCkBAIC0xMzk4LDcgKzEzOTIsNyBAQAogCXNicDJfdW5tYXBfc2NhdHRlcmxpc3QoZGV2aWNlLT5jYXJkLT5kZXZpY2UsIG9yYik7CiAKIAlvcmItPmNtZC0+cmVzdWx0ID0gcmVzdWx0OwotCW9yYi0+ZG9uZShvcmItPmNtZCk7CisJb3JiLT5jbWQtPnNjc2lfZG9uZShvcmItPmNtZCk7CiB9CiAKIHN0YXRpYyBpbnQgc2JwMl9tYXBfc2NhdHRlcmxpc3Qoc3RydWN0IHNicDJfY29tbWFuZF9vcmIgKm9yYiwKQEAgLTE0NjMsNyArMTQ1Nyw4IEBACiAKIC8qIFNDU0kgc3RhY2sgaW50ZWdyYXRpb24gKi8KIAotc3RhdGljIGludCBzYnAyX3Njc2lfcXVldWVjb21tYW5kX2xjayhzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHNjc2lfZG9uZV9mbl90IGRvbmUpCitzdGF0aWMgaW50IHNicDJfc2NzaV9xdWV1ZWNvbW1hbmQoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsCisJCQkJICBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CiAJc3RydWN0IHNicDJfbG9naWNhbF91bml0ICpsdSA9IGNtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKIAlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UgPSB0YXJnZXRfZGV2aWNlKGx1LT50Z3QpOwpAQCAtMTQ3Nyw3ICsxNDcyLDcgQEAKIAlpZiAoY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfQklESVJFQ1RJT05BTCkgewogCQlmd19lcnJvcigiQ2FuJ3QgaGFuZGxlIERNQV9CSURJUkVDVElPTkFMLCByZWplY3RpbmcgY29tbWFuZFxuIik7CiAJCWNtZC0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OwotCQlkb25lKGNtZCk7CisJCWNtZC0+c2NzaV9kb25lKGNtZCk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTQ5MCwxMSArMTQ4NSw4IEBACiAJLyogSW5pdGlhbGl6ZSByY29kZSB0byBzb21ldGhpbmcgbm90IFJDT0RFX0NPTVBMRVRFLiAqLwogCW9yYi0+YmFzZS5yY29kZSA9IC0xOwogCWtyZWZfaW5pdCgmb3JiLT5iYXNlLmtyZWYpOwotCi0Jb3JiLT5sdSAgID0gbHU7Ci0Jb3JiLT5kb25lID0gZG9uZTsKLQlvcmItPmNtZCAgPSBjbWQ7Ci0KKwlvcmItPmx1ID0gbHU7CisJb3JiLT5jbWQgPSBjbWQ7CiAJb3JiLT5yZXF1ZXN0Lm5leHQuaGlnaCA9IGNwdV90b19iZTMyKFNCUDJfT1JCX05VTEwpOwogCW9yYi0+cmVxdWVzdC5taXNjID0gY3B1X3RvX2JlMzIoCiAJCUNPTU1BTkRfT1JCX01BWF9QQVlMT0FEKGx1LT50Z3QtPm1heF9wYXlsb2FkKSB8CkBAIC0xNTI5LDggKzE1MjEsNiBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBERUZfU0NTSV9RQ01EKHNicDJfc2NzaV9xdWV1ZWNvbW1hbmQpCi0KIHN0YXRpYyBpbnQgc2JwMl9zY3NpX3NsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKIAlzdHJ1Y3Qgc2JwMl9sb2dpY2FsX3VuaXQgKmx1ID0gc2Rldi0+aG9zdGRhdGE7CkBAIC0xNjUzLDE3ICsxNjQzLDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHNicDJfaW5pdCh2b2lkKQogewotCXNicDJfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShLQlVJTERfTU9ETkFNRSk7Ci0JaWYgKCFzYnAyX3dxKQotCQlyZXR1cm4gLUVOT01FTTsKLQogCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnNicDJfZHJpdmVyLmRyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzYnAyX2NsZWFudXAodm9pZCkKIHsKIAlkcml2ZXJfdW5yZWdpc3Rlcigmc2JwMl9kcml2ZXIuZHJpdmVyKTsKLQlkZXN0cm95X3dvcmtxdWV1ZShzYnAyX3dxKTsKIH0KIAogbW9kdWxlX2luaXQoc2JwMl9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpdmFycy5jIGIvZHJpdmVycy9maXJtd2FyZS9lZml2YXJzLmMKaW5kZXggYTJkMmYxZi4uNWYyOWFhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZml2YXJzLmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZml2YXJzLmMKQEAgLTMyMSw3ICszMjEsNyBAQAogCiAvKgogICogR2VuZXJpYyByZWFkL3dyaXRlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBvZgotICogdGhlIGF0dHRyaWJ1dGVzLi4uCisgKiB0aGUgYXR0cmlidXRlcy4uLgogICovCiBzdGF0aWMgc3NpemVfdCBlZml2YXJfYXR0cl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAogCQkJCWNoYXIgKmJ1ZikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdC5jIGIvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0LmMKaW5kZXggNjE0OGExYy4uY2UzM2Y0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0LmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0LmMKQEAgLTg3LDggKzg3LDggQEAKICNkZWZpbmUgSUJGVF9JU0NTSV9WRVJTSU9OICIwLjUuMCIKICNkZWZpbmUgSUJGVF9JU0NTSV9EQVRFICIyMDEwLUZlYi0yNSIKIAotTU9EVUxFX0FVVEhPUigiUGV0ZXIgSm9uZXMgPHBqb25lc0ByZWRoYXQuY29tPiBhbmQgXAotS29ucmFkIFJ6ZXN6dXRlayA8a2V0dXpzZXpyQGRhcm5vay5vcmc+Iik7CitNT0RVTEVfQVVUSE9SKCJQZXRlciBKb25lcyA8cGpvbmVzQHJlZGhhdC5jb20+IGFuZCAiCisJICAgICAgIktvbnJhZCBSemVzenV0ZWsgPGtldHV6c2V6ckBkYXJub2sub3JnPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJzeXNmcyBpbnRlcmZhY2UgdG8gQklPUyBpQkZUIGluZm9ybWF0aW9uIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfVkVSU0lPTihJQkZUX0lTQ1NJX1ZFUlNJT04pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2FiODUwMC1ncGlvLmMgYi9kcml2ZXJzL2dwaW8vYWI4NTAwLWdwaW8uYwppbmRleCBlN2I4MzRkMC4uOTcwMDUzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2FiODUwMC1ncGlvLmMKKysrIGIvZHJpdmVycy9ncGlvL2FiODUwMC1ncGlvLmMKQEAgLTQ4Miw4ICs0ODIsOCBAQAogCiAJcmV0ID0gZ3Bpb2NoaXBfcmVtb3ZlKCZhYjg1MDBfZ3Bpby0+Y2hpcCk7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycihhYjg1MDBfZ3Bpby0+ZGV2LCAidW5hYmxlIHRvIHJlbW92ZSBncGlvY2hpcDpcCi0JCQkJJWRcbiIsIHJldCk7CisJCWRldl9lcnIoYWI4NTAwX2dwaW8tPmRldiwgInVuYWJsZSB0byByZW1vdmUgZ3Bpb2NoaXA6ICVkXG4iLAorCQkJcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTUxNiw3ICs1MTYsNiBAQAogbW9kdWxlX2V4aXQoYWI4NTAwX2dwaW9fZXhpdCk7CiAKIE1PRFVMRV9BVVRIT1IoIkJJQkVLIEJBU1UgPGJpYmVrLmJhc3VAc3Rlcmljc3Nvbi5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBhbGxvd3MgdG8gdXNlIEFCODUwMCB1bnVzZWQgcGluc1wKLQkJCXRvIGJlIHVzZWQgYXMgR1BJTyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgYWxsb3dzIHRvIHVzZSBBQjg1MDAgdW51c2VkIHBpbnMgdG8gYmUgdXNlZCBhcyBHUElPIik7CiBNT0RVTEVfQUxJQVMoIkFCODUwMCBHUElPIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2xhbmd3ZWxsX2dwaW8uYyBiL2RyaXZlcnMvZ3Bpby9sYW5nd2VsbF9ncGlvLmMKaW5kZXggNTYwYWI2NC4uMWIwNmY2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2xhbmd3ZWxsX2dwaW8uYworKysgYi9kcml2ZXJzL2dwaW8vbGFuZ3dlbGxfZ3Bpby5jCkBAIC0xMjIsNyArMTIyLDcgQEAKIAlsbndfZ3Bpb19zZXQoY2hpcCwgb2Zmc2V0LCB2YWx1ZSk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxudy0+bG9jaywgZmxhZ3MpOwogCXZhbHVlID0gcmVhZGwoZ3Bkcik7Ci0JdmFsdWUgfD0gQklUKG9mZnNldCAlIDMyKTs7CisJdmFsdWUgfD0gQklUKG9mZnNldCAlIDMyKTsKIAl3cml0ZWwodmFsdWUsIGdwZHIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxudy0+bG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmVuY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZlbmNlLmMKaW5kZXggYmJjZDFkZC4uMWY4MjI5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmVuY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mZW5jZS5jCkBAIC0zMjIsNyArMzIyLDcgQEAKIAogCSpmZW5jZSA9IE5VTEw7CiAJaWYgKHRtcCkgewotCQlrcmVmX3B1dCgmdG1wLT5rcmVmLCAmcmFkZW9uX2ZlbmNlX2Rlc3Ryb3kpOworCQlrcmVmX3B1dCgmdG1wLT5rcmVmLCByYWRlb25fZmVuY2VfZGVzdHJveSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yaW5nLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yaW5nLmMKaW5kZXggYzY3NzZlNC4uMDhjMDIzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmluZy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JpbmcuYwpAQCAtMTk0LDcgKzE5NCw3IEBACiAJciA9IHJhZGVvbl9ib19rbWFwKHJkZXYtPmliX3Bvb2wucm9iaiwgJnB0cik7CiAJcmFkZW9uX2JvX3VucmVzZXJ2ZShyZGV2LT5pYl9wb29sLnJvYmopOwogCWlmIChyKSB7Ci0JCURSTV9FUlJPUigicmFkZW9uOiBmYWlsZWQgdG8gbWFwIGliIHBvbGwgKCVkKS5cbiIsIHIpOworCQlEUk1fRVJST1IoInJhZGVvbjogZmFpbGVkIHRvIG1hcCBpYiBwb29sICglZCkuXG4iLCByKTsKIAkJcmV0dXJuIHI7CiAJfQogCWZvciAoaSA9IDA7IGkgPCBSQURFT05fSUJfUE9PTF9TSVpFOyBpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX29iamVjdC5jIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fb2JqZWN0LmMKaW5kZXggNzVlOWQ2Zi4uZWJkZGQ0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fb2JqZWN0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fb2JqZWN0LmMKQEAgLTIwNiw3ICsyMDYsNyBAQAogCSAqLwogCiAJd3JpdGVfbG9jaygmdGRldi0+b2JqZWN0X2xvY2spOwotCSh2b2lkKWtyZWZfcHV0KCZiYXNlLT5yZWZjb3VudCwgJnR0bV9yZWxlYXNlX2Jhc2UpOworCWtyZWZfcHV0KCZiYXNlLT5yZWZjb3VudCwgdHRtX3JlbGVhc2VfYmFzZSk7CiAJd3JpdGVfdW5sb2NrKCZ0ZGV2LT5vYmplY3RfbG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MKHR0bV9iYXNlX29iamVjdF91bnJlZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9LY29uZmlnIGIvZHJpdmVycy9oaWQvS2NvbmZpZwppbmRleCA5ZGU5ZTk3Li42N2QyYTc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaGlkL0tjb25maWcKQEAgLTU1LDEyICs1NSw2IEBACiBtZW51ICJTcGVjaWFsIEhJRCBkcml2ZXJzIgogCWRlcGVuZHMgb24gSElECiAKLWNvbmZpZyBISURfM01fUENUCi0JdHJpc3RhdGUgIjNNIFBDVCB0b3VjaHNjcmVlbiIKLQlkZXBlbmRzIG9uIFVTQl9ISUQKLQktLS1oZWxwLS0tCi0JU3VwcG9ydCBmb3IgM00gUENUIHRvdWNoIHNjcmVlbnMuCi0KIGNvbmZpZyBISURfQTRURUNICiAJdHJpc3RhdGUgIkE0IHRlY2ggbWljZSIgaWYgRVhQRVJUCiAJZGVwZW5kcyBvbiBVU0JfSElECkBAIC0xMDAsMTIgKzk0LDYgQEAKIAktLS1oZWxwLS0tCiAJU3VwcG9ydCBmb3IgQmVsa2luIEZsaXAgS1ZNIGFuZCBXaXJlbGVzcyBrZXlib2FyZC4KIAotY29uZmlnIEhJRF9DQU5ETwotCXRyaXN0YXRlICJDYW5kbyBkdWFsIHRvdWNoIHBhbmVsIgotCWRlcGVuZHMgb24gVVNCX0hJRAotCS0tLWhlbHAtLS0KLQlTdXBwb3J0IGZvciBDYW5kbyBkdWFsIHRvdWNoIHBhbmVsLgotCiBjb25maWcgSElEX0NIRVJSWQogCXRyaXN0YXRlICJDaGVycnkgQ3ltb3Rpb24ga2V5Ym9hcmQiIGlmIEVYUEVSVAogCWRlcGVuZHMgb24gVVNCX0hJRApAQCAtMzAwLDEyICsyODgsNiBAQAogCS0tLWhlbHAtLS0KIAlTdXBwb3J0IGZvciBNaWNyb3NvZnQgZGV2aWNlcyB0aGF0IGFyZSBub3QgZnVsbHkgY29tcGxpYW50IHdpdGggSElEIHN0YW5kYXJkLgogCi1jb25maWcgSElEX01PU0FSVAotCXRyaXN0YXRlICJNb3NBcnQgZHVhbC10b3VjaCBwYW5lbHMiCi0JZGVwZW5kcyBvbiBVU0JfSElECi0JLS0taGVscC0tLQotCVN1cHBvcnQgZm9yIE1vc0FydCBkdWFsLXRvdWNoIHBhbmVscy4KLQogY29uZmlnIEhJRF9NT05URVJFWQogCXRyaXN0YXRlICJNb250ZXJleSBHZW5pdXMgS0IyOUUga2V5Ym9hcmQiIGlmIEVYUEVSVAogCWRlcGVuZHMgb24gVVNCX0hJRApAQCAtMzIwLDEzICszMDIsMjUgQEAKIAkgIEdlbmVyaWMgc3VwcG9ydCBmb3IgSElEIG11bHRpdG91Y2ggcGFuZWxzLgogCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGRldmljZXM6CisJICAtIDNNIFBDVCB0b3VjaCBzY3JlZW5zCisJICAtIEFjdGlvblN0YXIgZHVhbCB0b3VjaCBwYW5lbHMKKwkgIC0gQ2FuZG8gZHVhbCB0b3VjaCBwYW5lbHMKKwkgIC0gQ1ZUb3VjaCBwYW5lbHMKIAkgIC0gQ3lwcmVzcyBUcnVlVG91Y2ggcGFuZWxzCisJICAtIEVsbyBUb3VjaFN5c3RlbXMgSW50ZWxsaVRvdWNoIFBsdXMgcGFuZWxzCisJICAtIEdlbmVyYWxUb3VjaCAnU2Vuc2luZyBXaW43LVR3b0ZpbmdlcicgcGFuZWxzCisJICAtIEdvb2RUb3VjaCBwYW5lbHMKIAkgIC0gSGFudm9uIGR1YWwgdG91Y2ggcGFuZWxzCisJICAtIElsaXRlayBkdWFsIHRvdWNoIHBhbmVscwogCSAgLSBJclRvdWNoIEluZnJhcmVkIFVTQiBwYW5lbHMKKwkgIC0gTHVtaW8gQ3J5c3RhbFRvdWNoIHBhbmVscworCSAgLSBNb3NBcnQgZHVhbC10b3VjaCBwYW5lbHMKKwkgIC0gUGVuTW91bnQgZHVhbCB0b3VjaCBwYW5lbHMKIAkgIC0gUGl4Y2lyIGR1YWwgdG91Y2ggcGFuZWxzCi0JICAtICdTZW5zaW5nIFdpbjctVHdvRmluZ2VyJyBwYW5lbCBieSBHZW5lcmFsVG91Y2gKLSAgICAgICAgICAtIGVHYWxheCBkdWFsLXRvdWNoIHBhbmVscywgaW5jbHVkaW5nIHRoZQotCSAgICBKb29qb28gYW5kIFdldGFiIHRhYmxldHMKKwkgIC0gZUdhbGF4IGR1YWwtdG91Y2ggcGFuZWxzLCBpbmNsdWRpbmcgdGhlIEpvb2pvbyBhbmQgV2V0YWIgdGFibGV0cworCSAgLSBTdGFudHVtIG11bHRpdG91Y2ggcGFuZWxzCisJICAtIFRvdWNoIEludGVybmF0aW9uYWwgUGFuZWxzCisJICAtIFVuaXRlYyBQYW5lbHMKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIApAQCAtNTAwLDEyICs0OTQsNiBAQAogCS0tLWhlbHAtLS0KIAlTdXBwb3J0IGZvciBTb255IFBTMyBjb250cm9sbGVyLgogCi1jb25maWcgSElEX1NUQU5UVU0KLQl0cmlzdGF0ZSAiU3RhbnR1bSBtdWx0aXRvdWNoIHBhbmVsIgotCWRlcGVuZHMgb24gVVNCX0hJRAotCS0tLWhlbHAtLS0KLQlTdXBwb3J0IGZvciBTdGFudHVtIG11bHRpdG91Y2ggcGFuZWwuCi0KIGNvbmZpZyBISURfU1VOUExVUwogCXRyaXN0YXRlICJTdW5wbHVzIHdpcmVsZXNzIGRlc2t0b3AiCiAJZGVwZW5kcyBvbiBVU0JfSElECmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9NYWtlZmlsZSBiL2RyaXZlcnMvaGlkL01ha2VmaWxlCmluZGV4IDA2YzY4YWUuLmY4Y2M0ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaGlkL01ha2VmaWxlCkBAIC0yNSwxMiArMjUsMTAgQEAKIAloaWQtbG9naXRlY2gteQkrPSBoaWQtbGc0ZmYubwogZW5kaWYKIAotb2JqLSQoQ09ORklHX0hJRF8zTV9QQ1QpCSs9IGhpZC0zbS1wY3Qubwogb2JqLSQoQ09ORklHX0hJRF9BNFRFQ0gpCSs9IGhpZC1hNHRlY2gubwogb2JqLSQoQ09ORklHX0hJRF9BQ1JVWCkJCSs9IGhpZC1heGZmLm8KIG9iai0kKENPTkZJR19ISURfQVBQTEUpCQkrPSBoaWQtYXBwbGUubwogb2JqLSQoQ09ORklHX0hJRF9CRUxLSU4pCSs9IGhpZC1iZWxraW4ubwotb2JqLSQoQ09ORklHX0hJRF9DQU5ETykJCSs9IGhpZC1jYW5kby5vCiBvYmotJChDT05GSUdfSElEX0NIRVJSWSkJKz0gaGlkLWNoZXJyeS5vCiBvYmotJChDT05GSUdfSElEX0NISUNPTlkpCSs9IGhpZC1jaGljb255Lm8KIG9iai0kKENPTkZJR19ISURfQ1lQUkVTUykJKz0gaGlkLWN5cHJlc3MubwpAQCAtNDcsNyArNDUsNiBAQAogb2JqLSQoQ09ORklHX0hJRF9NQUdJQ01PVVNFKSAgICArPSBoaWQtbWFnaWNtb3VzZS5vCiBvYmotJChDT05GSUdfSElEX01JQ1JPU09GVCkJKz0gaGlkLW1pY3Jvc29mdC5vCiBvYmotJChDT05GSUdfSElEX01PTlRFUkVZKQkrPSBoaWQtbW9udGVyZXkubwotb2JqLSQoQ09ORklHX0hJRF9NT1NBUlQpCSs9IGhpZC1tb3NhcnQubwogb2JqLSQoQ09ORklHX0hJRF9NVUxUSVRPVUNIKQkrPSBoaWQtbXVsdGl0b3VjaC5vCiBvYmotJChDT05GSUdfSElEX05UUklHKQkJKz0gaGlkLW50cmlnLm8KIG9iai0kKENPTkZJR19ISURfT1JURUspCQkrPSBoaWQtb3J0ZWsubwpAQCAtNjYsNyArNjMsNiBAQAogb2JqLSQoQ09ORklHX0hJRF9TQU1TVU5HKQkrPSBoaWQtc2Ftc3VuZy5vCiBvYmotJChDT05GSUdfSElEX1NNQVJUSk9ZUExVUykJKz0gaGlkLXNqb3kubwogb2JqLSQoQ09ORklHX0hJRF9TT05ZKQkJKz0gaGlkLXNvbnkubwotb2JqLSQoQ09ORklHX0hJRF9TVEFOVFVNKQkrPSBoaWQtc3RhbnR1bS5vCiBvYmotJChDT05GSUdfSElEX1NVTlBMVVMpCSs9IGhpZC1zdW5wbHVzLm8KIG9iai0kKENPTkZJR19ISURfR1JFRU5BU0lBKQkrPSBoaWQtZ2FmZi5vCiBvYmotJChDT05GSUdfSElEX1RIUlVTVE1BU1RFUikJKz0gaGlkLXRtZmYubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLTNtLXBjdC5jIGIvZHJpdmVycy9oaWQvaGlkLTNtLXBjdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjQzYWUyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvaGlkL2hpZC0zbS1wY3QuYworKysgL2Rldi9udWxsCkBAIC0xLDMwNSArMCwwIEBACi0vKgotICogIEhJRCBkcml2ZXIgZm9yIDNNIFBDVCBtdWx0aXRvdWNoIHBhbmVscwotICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCBTdGVwaGFuZSBDaGF0dHkgPGNoYXR0eUBlbmFjLmZyPgotICogIENvcHlyaWdodCAoYykgMjAxMCAgICAgIEhlbnJpayBSeWRiZXJnIDxyeWRiZXJnQGV1cm9tYWlsLnNlPgotICogIENvcHlyaWdodCAoYykgMjAxMCAgICAgIENhbm9uaWNhbCwgTHRkLgotICoKLSAqLwotCi0vKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaGlkLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotI2luY2x1ZGUgPGxpbnV4L2lucHV0L210Lmg+Ci0KLU1PRFVMRV9BVVRIT1IoIlN0ZXBoYW5lIENoYXR0eSA8Y2hhdHR5QGVuYWMuZnI+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIjNNIFBDVCBtdWx0aXRvdWNoIHBhbmVscyIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0jaW5jbHVkZSAiaGlkLWlkcy5oIgotCi0jZGVmaW5lIE1BWF9TTE9UUwkJNjAKLQotLyogZXN0aW1hdGVkIHNpZ25hbC10by1ub2lzZSByYXRpb3MgKi8KLSNkZWZpbmUgU05fTU9WRQkJCTIwNDgKLSNkZWZpbmUgU05fV0lEVEgJCTEyOAotCi1zdHJ1Y3QgbW1tX2ZpbmdlciB7Ci0JX19zMzIgeCwgeSwgdywgaDsKLQlib29sIHRvdWNoLCB2YWxpZDsKLX07Ci0KLXN0cnVjdCBtbW1fZGF0YSB7Ci0Jc3RydWN0IG1tbV9maW5nZXIgZltNQVhfU0xPVFNdOwotCV9fdTggY3VyaWQ7Ci0JX191OCBuZXhwLCBucmVhbDsKLQlib29sIHRvdWNoLCB2YWxpZDsKLX07Ci0KLXN0YXRpYyBpbnQgbW1tX2lucHV0X21hcHBpbmcoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfaW5wdXQgKmhpLAotCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsCi0JCXVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQotewotCWludCBmMSA9IGZpZWxkLT5sb2dpY2FsX21pbmltdW07Ci0JaW50IGYyID0gZmllbGQtPmxvZ2ljYWxfbWF4aW11bTsKLQlpbnQgZGYgPSBmMiAtIGYxOwotCi0Jc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpIHsKLQotCWNhc2UgSElEX1VQX0JVVFRPTjoKLQkJcmV0dXJuIC0xOwotCi0JY2FzZSBISURfVVBfR0VOREVTSzoKLQkJc3dpdGNoICh1c2FnZS0+aGlkKSB7Ci0JCWNhc2UgSElEX0dEX1g6Ci0JCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCi0JCQkJCUVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1gpOwotCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaGktPmlucHV0LCBBQlNfTVRfUE9TSVRJT05fWCwKLQkJCQkJICAgICBmMSwgZjIsIGRmIC8gU05fTU9WRSwgMCk7Ci0JCQkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KLQkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGhpLT5pbnB1dCwgQUJTX1gsCi0JCQkJCSAgICAgZjEsIGYyLCBkZiAvIFNOX01PVkUsIDApOwotCQkJcmV0dXJuIDE7Ci0JCWNhc2UgSElEX0dEX1k6Ci0JCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCi0JCQkJCUVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1kpOwotCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaGktPmlucHV0LCBBQlNfTVRfUE9TSVRJT05fWSwKLQkJCQkJICAgICBmMSwgZjIsIGRmIC8gU05fTU9WRSwgMCk7Ci0JCQkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KLQkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGhpLT5pbnB1dCwgQUJTX1ksCi0JCQkJCSAgICAgZjEsIGYyLCBkZiAvIFNOX01PVkUsIDApOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0KLQljYXNlIEhJRF9VUF9ESUdJVElaRVI6Ci0JCXN3aXRjaCAodXNhZ2UtPmhpZCkgewotCQkvKiB3ZSBkbyBub3Qgd2FudCB0byBtYXAgdGhlc2U6IG5vIGlucHV0LW9yaWVudGVkIG1lYW5pbmcgKi8KLQkJY2FzZSAweDE0OgotCQljYXNlIDB4MjM6Ci0JCWNhc2UgSElEX0RHX0lOUFVUTU9ERToKLQkJY2FzZSBISURfREdfREVWSUNFSU5ERVg6Ci0JCWNhc2UgSElEX0RHX0NPTlRBQ1RDT1VOVDoKLQkJY2FzZSBISURfREdfQ09OVEFDVE1BWDoKLQkJY2FzZSBISURfREdfSU5SQU5HRToKLQkJY2FzZSBISURfREdfQ09ORklERU5DRToKLQkJCXJldHVybiAtMTsKLQkJY2FzZSBISURfREdfVElQU1dJVENIOgotCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCi0JCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsIEVWX0tFWSwgQlROX1RPVUNIKTsKLQkJCWlucHV0X3NldF9jYXBhYmlsaXR5KGhpLT5pbnB1dCwgRVZfS0VZLCBCVE5fVE9VQ0gpOwotCQkJcmV0dXJuIDE7Ci0JCWNhc2UgSElEX0RHX1dJRFRIOgotCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAotCQkJCQlFVl9BQlMsIEFCU19NVF9UT1VDSF9NQUpPUik7Ci0JCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhoaS0+aW5wdXQsIEFCU19NVF9UT1VDSF9NQUpPUiwKLQkJCQkJICAgICBmMSwgZjIsIGRmIC8gU05fV0lEVEgsIDApOwotCQkJcmV0dXJuIDE7Ci0JCWNhc2UgSElEX0RHX0hFSUdIVDoKLQkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKLQkJCQkJRVZfQUJTLCBBQlNfTVRfVE9VQ0hfTUlOT1IpOwotCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaGktPmlucHV0LCBBQlNfTVRfVE9VQ0hfTUlOT1IsCi0JCQkJCSAgICAgZjEsIGYyLCBkZiAvIFNOX1dJRFRILCAwKTsKLQkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGhpLT5pbnB1dCwgQUJTX01UX09SSUVOVEFUSU9OLAotCQkJCQkwLCAxLCAwLCAwKTsKLQkJCXJldHVybiAxOwotCQljYXNlIEhJRF9ER19DT05UQUNUSUQ6Ci0JCQlpbnB1dF9tdF9pbml0X3Nsb3RzKGhpLT5pbnB1dCwgTUFYX1NMT1RTKTsKLQkJCXJldHVybiAxOwotCQl9Ci0JCS8qIGxldCBoaWQtaW5wdXQgZGVjaWRlIGZvciB0aGUgb3RoZXJzICovCi0JCXJldHVybiAwOwotCi0JY2FzZSAweGZmMDAwMDAwOgotCQkvKiB3ZSBkbyBub3Qgd2FudCB0byBtYXAgdGhlc2U6IG5vIGlucHV0LW9yaWVudGVkIG1lYW5pbmcgKi8KLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG1tbV9pbnB1dF9tYXBwZWQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfaW5wdXQgKmhpLAotCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsCi0JCXVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQotewotCS8qIHRlbGwgaGlkLWlucHV0IHRvIHNraXAgc2V0dXAgb2YgdGhlc2UgZXZlbnQgdHlwZXMgKi8KLQlpZiAodXNhZ2UtPnR5cGUgPT0gRVZfS0VZIHx8IHVzYWdlLT50eXBlID09IEVWX0FCUykKLQkJc2V0X2JpdCh1c2FnZS0+dHlwZSwgaGktPmlucHV0LT5ldmJpdCk7Ci0JcmV0dXJuIC0xOwotfQotCi0vKgotICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIHdob2xlIHBhY2tldCBoYXMgYmVlbiByZWNlaXZlZCBhbmQgcHJvY2Vzc2VkLAotICogc28gdGhhdCBpdCBjYW4gZGVjaWRlIHdoYXQgdG8gc2VuZCB0byB0aGUgaW5wdXQgbGF5ZXIuCi0gKi8KLXN0YXRpYyB2b2lkIG1tbV9maWx0ZXJfZXZlbnQoc3RydWN0IG1tbV9kYXRhICptZCwgc3RydWN0IGlucHV0X2RldiAqaW5wdXQpCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IE1BWF9TTE9UUzsgKytpKSB7Ci0JCXN0cnVjdCBtbW1fZmluZ2VyICpmID0gJm1kLT5mW2ldOwotCQlpZiAoIWYtPnZhbGlkKSB7Ci0JCQkvKiB0aGlzIGZpbmdlciBpcyBqdXN0IHBsYWNlaG9sZGVyIGRhdGEsIGlnbm9yZSAqLwotCQkJY29udGludWU7Ci0JCX0KLQkJaW5wdXRfbXRfc2xvdChpbnB1dCwgaSk7Ci0JCWlucHV0X210X3JlcG9ydF9zbG90X3N0YXRlKGlucHV0LCBNVF9UT09MX0ZJTkdFUiwgZi0+dG91Y2gpOwotCQlpZiAoZi0+dG91Y2gpIHsKLQkJCS8qIHRoaXMgZmluZ2VyIGlzIG9uIHRoZSBzY3JlZW4gKi8KLQkJCWludCB3aWRlID0gKGYtPncgPiBmLT5oKTsKLQkJCS8qIGRpdmlkZWQgYnkgdHdvIHRvIG1hdGNoIHZpc3VhbCBzY2FsZSBvZiB0b3VjaCAqLwotCQkJaW50IG1ham9yID0gbWF4KGYtPncsIGYtPmgpID4+IDE7Ci0JCQlpbnQgbWlub3IgPSBtaW4oZi0+dywgZi0+aCkgPj4gMTsKLQotCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1gsIGYtPngpOwotCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1ksIGYtPnkpOwotCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX09SSUVOVEFUSU9OLCB3aWRlKTsKLQkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9UT1VDSF9NQUpPUiwgbWFqb3IpOwotCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1RPVUNIX01JTk9SLCBtaW5vcik7Ci0JCX0KLQkJZi0+dmFsaWQgPSAwOwotCX0KLQotCWlucHV0X210X3JlcG9ydF9wb2ludGVyX2VtdWxhdGlvbihpbnB1dCwgdHJ1ZSk7Ci0JaW5wdXRfc3luYyhpbnB1dCk7Ci19Ci0KLS8qCi0gKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB1cG9uIGFsbCByZXBvcnRzCi0gKiBzbyB0aGF0IHdlIGNhbiBhY2N1bXVsYXRlIGNvbnRhY3QgcG9pbnQgaW5mb3JtYXRpb24sCi0gKiBhbmQgY2FsbCBpbnB1dF9tdF9zeW5jIGFmdGVyIGVhY2ggcG9pbnQuCi0gKi8KLXN0YXRpYyBpbnQgbW1tX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLAotCQkJCXN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBfX3MzMiB2YWx1ZSkKLXsKLQlzdHJ1Y3QgbW1tX2RhdGEgKm1kID0gaGlkX2dldF9kcnZkYXRhKGhpZCk7Ci0JLyoKLQkgKiBzdHJhbmdlbHksIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBiZWZvcmUKLQkgKiBmaWVsZC0+aGlkaW5wdXQgaXMgaW5pdGlhbGl6ZWQhCi0JICovCi0JaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0lOUFVUKSB7Ci0JCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gZmllbGQtPmhpZGlucHV0LT5pbnB1dDsKLQkJc3dpdGNoICh1c2FnZS0+aGlkKSB7Ci0JCWNhc2UgSElEX0RHX1RJUFNXSVRDSDoKLQkJCW1kLT50b3VjaCA9IHZhbHVlOwotCQkJYnJlYWs7Ci0JCWNhc2UgSElEX0RHX0NPTkZJREVOQ0U6Ci0JCQltZC0+dmFsaWQgPSB2YWx1ZTsKLQkJCWJyZWFrOwotCQljYXNlIEhJRF9ER19XSURUSDoKLQkJCWlmIChtZC0+dmFsaWQpCi0JCQkJbWQtPmZbbWQtPmN1cmlkXS53ID0gdmFsdWU7Ci0JCQlicmVhazsKLQkJY2FzZSBISURfREdfSEVJR0hUOgotCQkJaWYgKG1kLT52YWxpZCkKLQkJCQltZC0+ZlttZC0+Y3VyaWRdLmggPSB2YWx1ZTsKLQkJCWJyZWFrOwotCQljYXNlIEhJRF9ER19DT05UQUNUSUQ6Ci0JCQl2YWx1ZSA9IGNsYW1wX3ZhbCh2YWx1ZSwgMCwgTUFYX1NMT1RTIC0gMSk7Ci0JCQlpZiAobWQtPnZhbGlkKSB7Ci0JCQkJbWQtPmN1cmlkID0gdmFsdWU7Ci0JCQkJbWQtPmZbdmFsdWVdLnRvdWNoID0gbWQtPnRvdWNoOwotCQkJCW1kLT5mW3ZhbHVlXS52YWxpZCA9IDE7Ci0JCQkJbWQtPm5yZWFsKys7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBISURfR0RfWDoKLQkJCWlmIChtZC0+dmFsaWQpCi0JCQkJbWQtPmZbbWQtPmN1cmlkXS54ID0gdmFsdWU7Ci0JCQlicmVhazsKLQkJY2FzZSBISURfR0RfWToKLQkJCWlmIChtZC0+dmFsaWQpCi0JCQkJbWQtPmZbbWQtPmN1cmlkXS55ID0gdmFsdWU7Ci0JCQlicmVhazsKLQkJY2FzZSBISURfREdfQ09OVEFDVENPVU5UOgotCQkJaWYgKHZhbHVlKQotCQkJCW1kLT5uZXhwID0gdmFsdWU7Ci0JCQlpZiAobWQtPm5yZWFsID49IG1kLT5uZXhwKSB7Ci0JCQkJbW1tX2ZpbHRlcl9ldmVudChtZCwgaW5wdXQpOwotCQkJCW1kLT5ucmVhbCA9IDA7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCS8qIHdlIGhhdmUgaGFuZGxlZCB0aGUgaGlkaW5wdXQgcGFydCwgbm93IHJlbWFpbnMgaGlkZGV2ICovCi0JaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0hJRERFViAmJiBoaWQtPmhpZGRldl9oaWRfZXZlbnQpCi0JCWhpZC0+aGlkZGV2X2hpZF9ldmVudChoaWQsIGZpZWxkLCB1c2FnZSwgdmFsdWUpOwotCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQgbW1tX3Byb2JlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCAqaWQpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgbW1tX2RhdGEgKm1kOwotCi0JaGRldi0+cXVpcmtzIHw9IEhJRF9RVUlSS19OT19JTlBVVF9TWU5DOwotCi0JbWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbW1tX2RhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW1kKSB7Ci0JCWhpZF9lcnIoaGRldiwgImNhbm5vdCBhbGxvY2F0ZSAzTSBkYXRhXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCWhpZF9zZXRfZHJ2ZGF0YShoZGV2LCBtZCk7Ci0KLQlyZXQgPSBoaWRfcGFyc2UoaGRldik7Ci0JaWYgKCFyZXQpCi0JCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBISURfQ09OTkVDVF9ERUZBVUxUKTsKLQotCWlmIChyZXQpCi0JCWtmcmVlKG1kKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBtbW1fcmVtb3ZlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQotewotCWhpZF9od19zdG9wKGhkZXYpOwotCWtmcmVlKGhpZF9nZXRfZHJ2ZGF0YShoZGV2KSk7Ci0JaGlkX3NldF9kcnZkYXRhKGhkZXYsIE5VTEwpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgbW1tX2RldmljZXNbXSA9IHsKLQl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfM00sIFVTQl9ERVZJQ0VfSURfM00xOTY4KSB9LAotCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF8zTSwgVVNCX0RFVklDRV9JRF8zTTIyNTYpIH0sCi0JeyB9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIG1tbV9kZXZpY2VzKTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfdXNhZ2VfaWQgbW1tX2dyYWJiZWRfdXNhZ2VzW10gPSB7Ci0JeyBISURfQU5ZX0lELCBISURfQU5ZX0lELCBISURfQU5ZX0lEIH0sCi0JeyBISURfQU5ZX0lEIC0gMSwgSElEX0FOWV9JRCAtIDEsIEhJRF9BTllfSUQgLSAxfQotfTsKLQotc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIG1tbV9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiM20tcGN0IiwKLQkuaWRfdGFibGUgPSBtbW1fZGV2aWNlcywKLQkucHJvYmUgPSBtbW1fcHJvYmUsCi0JLnJlbW92ZSA9IG1tbV9yZW1vdmUsCi0JLmlucHV0X21hcHBpbmcgPSBtbW1faW5wdXRfbWFwcGluZywKLQkuaW5wdXRfbWFwcGVkID0gbW1tX2lucHV0X21hcHBlZCwKLQkudXNhZ2VfdGFibGUgPSBtbW1fZ3JhYmJlZF91c2FnZXMsCi0JLmV2ZW50ID0gbW1tX2V2ZW50LAotfTsKLQotc3RhdGljIGludCBfX2luaXQgbW1tX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmbW1tX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBtbW1fZXhpdCh2b2lkKQotewotCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmbW1tX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KG1tbV9pbml0KTsKLW1vZHVsZV9leGl0KG1tbV9leGl0KTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWNhbmRvLmMgYi9kcml2ZXJzL2hpZC9oaWQtY2FuZG8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVhMDY2Yy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtY2FuZG8uYworKysgL2Rldi9udWxsCkBAIC0xLDI3NiArMCwwIEBACi0vKgotICogIEhJRCBkcml2ZXIgZm9yIENhbmRvIGR1YWwtdG91Y2ggcGFuZWxzCi0gKgotICogIENvcHlyaWdodCAoYykgMjAxMCBTdGVwaGFuZSBDaGF0dHkgPGNoYXR0eUBlbmFjLmZyPgotICoKLSAqLwotCi0vKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaGlkLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi1NT0RVTEVfQVVUSE9SKCJTdGVwaGFuZSBDaGF0dHkgPGNoYXR0eUBlbmFjLmZyPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJDYW5kbyBkdWFsLXRvdWNoIHBhbmVsIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLSNpbmNsdWRlICJoaWQtaWRzLmgiCi0KLXN0cnVjdCBjYW5kb19kYXRhIHsKLQlfX3UxNiB4LCB5OwotCV9fdTggaWQ7Ci0JX19zOCBvbGRlc3Q7CQkvKiBpZCBvZiB0aGUgb2xkZXN0IGZpbmdlciBpbiBwcmV2aW91cyBmcmFtZSAqLwotCWJvb2wgdmFsaWQ7CQkvKiB2YWxpZCBmaW5nZXIgZGF0YSwgb3IganVzdCBwbGFjZWhvbGRlcj8gKi8KLQlib29sIGZpcnN0OwkJLyogaXMgdGhpcyB0aGUgZmlyc3QgZmluZ2VyIGluIHRoaXMgZnJhbWU/ICovCi0JX19zOCBmaXJzdGlkOwkJLyogaWQgb2YgdGhlIGZpcnN0IGZpbmdlciBpbiB0aGUgZnJhbWUgKi8KLQlfX3UxNiBmaXJzdHgsIGZpcnN0eTsJLyogKHgsIHkpIG9mIHRoZSBmaXJzdCBmaW5nZXIgaW4gdGhlIGZyYW1lICovCi19OwotCi1zdGF0aWMgaW50IGNhbmRvX2lucHV0X21hcHBpbmcoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfaW5wdXQgKmhpLAotCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsCi0JCXVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQotewotCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV9QQUdFKSB7Ci0KLQljYXNlIEhJRF9VUF9HRU5ERVNLOgotCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKLQkJY2FzZSBISURfR0RfWDoKLQkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKLQkJCQkJRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWCk7Ci0JCQkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KLQkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGhpLT5pbnB1dCwgQUJTX1gsCi0JCQkJCQlmaWVsZC0+bG9naWNhbF9taW5pbXVtLAotCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWF4aW11bSwgMCwgMCk7Ci0JCQlyZXR1cm4gMTsKLQkJY2FzZSBISURfR0RfWToKLQkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKLQkJCQkJRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWSk7Ci0JCQkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KLQkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGhpLT5pbnB1dCwgQUJTX1ksCi0JCQkJCQlmaWVsZC0+bG9naWNhbF9taW5pbXVtLAotCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWF4aW11bSwgMCwgMCk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQlyZXR1cm4gMDsKLQotCWNhc2UgSElEX1VQX0RJR0lUSVpFUjoKLQkJc3dpdGNoICh1c2FnZS0+aGlkKSB7Ci0JCWNhc2UgSElEX0RHX1RJUFNXSVRDSDoKLQkJY2FzZSBISURfREdfQ09OVEFDVE1BWDoKLQkJCXJldHVybiAtMTsKLQkJY2FzZSBISURfREdfSU5SQU5HRToKLQkJCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLwotCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LCBFVl9LRVksIEJUTl9UT1VDSCk7Ci0JCQlyZXR1cm4gMTsKLQkJY2FzZSBISURfREdfQ09OVEFDVElEOgotCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAotCQkJCQlFVl9BQlMsIEFCU19NVF9UUkFDS0lOR19JRCk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBjYW5kb19pbnB1dF9tYXBwZWQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfaW5wdXQgKmhpLAotCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsCi0JCXVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQotewotCWlmICh1c2FnZS0+dHlwZSA9PSBFVl9LRVkgfHwgdXNhZ2UtPnR5cGUgPT0gRVZfQUJTKQotCQljbGVhcl9iaXQodXNhZ2UtPmNvZGUsICpiaXQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgd2hvbGUgZmluZ2VyIGhhcyBiZWVuIHBhcnNlZCwKLSAqIHNvIHRoYXQgaXQgY2FuIGRlY2lkZSB3aGF0IHRvIHNlbmQgdG8gdGhlIGlucHV0IGxheWVyLgotICovCi1zdGF0aWMgdm9pZCBjYW5kb19maWx0ZXJfZXZlbnQoc3RydWN0IGNhbmRvX2RhdGEgKnRkLCBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKLXsKLQl0ZC0+Zmlyc3QgPSAhdGQtPmZpcnN0OyAvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KLQotCWlmICghdGQtPnZhbGlkKSB7Ci0JCS8qCi0JCSAqIHRvdWNoc2NyZWVuIGVtdWxhdGlvbjogaWYgdGhpcyBpcyB0aGUgc2Vjb25kIGZpbmdlciBhbmQKLQkJICogdGhlIGZpcnN0IHdhcyB2YWxpZCwgdGhlIGZpcnN0IHdhcyB0aGUgb2xkZXN0OyBpZiB0aGUKLQkJICogZmlyc3Qgd2FzIG5vdCB2YWxpZCBhbmQgdGhlcmUgd2FzIGEgdmFsaWQgZmluZ2VyIGluIHRoZQotCQkgKiBwcmV2aW91cyBmcmFtZSwgdGhpcyBpcyBhIHJlbGVhc2UuCi0JCSAqLwotCQlpZiAodGQtPmZpcnN0KSB7Ci0JCQl0ZC0+Zmlyc3RpZCA9IC0xOwotCQl9IGVsc2UgaWYgKHRkLT5maXJzdGlkID49IDApIHsKLQkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19YLCB0ZC0+Zmlyc3R4KTsKLQkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19ZLCB0ZC0+Zmlyc3R5KTsKLQkJCXRkLT5vbGRlc3QgPSB0ZC0+Zmlyc3RpZDsKLQkJfSBlbHNlIGlmICh0ZC0+b2xkZXN0ID49IDApIHsKLQkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9LRVksIEJUTl9UT1VDSCwgMCk7Ci0JCQl0ZC0+b2xkZXN0ID0gLTE7Ci0JCX0KLQotCQlyZXR1cm47Ci0JfQotCQotCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9UUkFDS0lOR19JRCwgdGQtPmlkKTsKLQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWCwgdGQtPngpOwotCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9ZLCB0ZC0+eSk7Ci0KLQlpbnB1dF9tdF9zeW5jKGlucHV0KTsKLQotCS8qCi0JICogdG91Y2hzY3JlZW4gZW11bGF0aW9uOiBpZiB0aGVyZSB3YXMgbm8gdG91Y2hpbmcgZmluZ2VyIHByZXZpb3VzbHksCi0JICogZW1pdCB0b3VjaCBldmVudAotCSAqLwotCWlmICh0ZC0+b2xkZXN0IDwgMCkgewotCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfS0VZLCBCVE5fVE9VQ0gsIDEpOwotCQl0ZC0+b2xkZXN0ID0gdGQtPmlkOwotCX0KLQotCS8qCi0JICogdG91Y2hzY3JlZW4gZW11bGF0aW9uOiBpZiB0aGlzIGlzIHRoZSBmaXJzdCBmaW5nZXIsIHdhaXQgZm9yIHRoZQotCSAqIHNlY29uZDsgdGhlIG9sZGVzdCBpcyB0aGVuIHRoZSBzZWNvbmQgaWYgaXQgd2FzIHRoZSBvbGRlc3QgYWxyZWFkeQotCSAqIG9yIGlmIHRoZXJlIHdhcyBubyBmaXJzdCwgdGhlIGZpcnN0IG90aGVyd2lzZS4KLQkgKi8KLQlpZiAodGQtPmZpcnN0KSB7Ci0JCXRkLT5maXJzdHggPSB0ZC0+eDsKLQkJdGQtPmZpcnN0eSA9IHRkLT55OwotCQl0ZC0+Zmlyc3RpZCA9IHRkLT5pZDsKLQl9IGVsc2UgewotCQlpbnQgeCwgeSwgb2xkZXN0OwotCQlpZiAodGQtPmlkID09IHRkLT5vbGRlc3QgfHwgdGQtPmZpcnN0aWQgPCAwKSB7Ci0JCQl4ID0gdGQtPng7Ci0JCQl5ID0gdGQtPnk7Ci0JCQlvbGRlc3QgPSB0ZC0+aWQ7Ci0JCX0gZWxzZSB7Ci0JCQl4ID0gdGQtPmZpcnN0eDsKLQkJCXkgPSB0ZC0+Zmlyc3R5OwotCQkJb2xkZXN0ID0gdGQtPmZpcnN0aWQ7Ci0JCX0KLQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1gsIHgpOwotCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfWSwgeSk7Ci0JCXRkLT5vbGRlc3QgPSBvbGRlc3Q7Ci0JfQotfQotCi0KLXN0YXRpYyBpbnQgY2FuZG9fZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9maWVsZCAqZmllbGQsCi0JCQkJc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlKQotewotCXN0cnVjdCBjYW5kb19kYXRhICp0ZCA9IGhpZF9nZXRfZHJ2ZGF0YShoaWQpOwotCi0JaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0lOUFVUKSB7Ci0JCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gZmllbGQtPmhpZGlucHV0LT5pbnB1dDsKLQotCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKLQkJY2FzZSBISURfREdfSU5SQU5HRToKLQkJCXRkLT52YWxpZCA9IHZhbHVlOwotCQkJYnJlYWs7Ci0JCWNhc2UgSElEX0RHX0NPTlRBQ1RJRDoKLQkJCXRkLT5pZCA9IHZhbHVlOwotCQkJYnJlYWs7Ci0JCWNhc2UgSElEX0dEX1g6Ci0JCQl0ZC0+eCA9IHZhbHVlOwotCQkJYnJlYWs7Ci0JCWNhc2UgSElEX0dEX1k6Ci0JCQl0ZC0+eSA9IHZhbHVlOwotCQkJY2FuZG9fZmlsdGVyX2V2ZW50KHRkLCBpbnB1dCk7Ci0JCQlicmVhazsKLQkJY2FzZSBISURfREdfVElQU1dJVENIOgotCQkJLyogYXZvaWQgaW50ZXJmZXJlbmNlIGZyb20gZ2VuZXJpYyBoaWRpbnB1dCBoYW5kbGluZyAqLwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCS8qIGZhbGxiYWNrIHRvIHRoZSBnZW5lcmljIGhpZGlucHV0IGhhbmRsaW5nICovCi0JCQlyZXR1cm4gMDsKLQkJfQotCX0KLQotCS8qIHdlIGhhdmUgaGFuZGxlZCB0aGUgaGlkaW5wdXQgcGFydCwgbm93IHJlbWFpbnMgaGlkZGV2ICovCi0JaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0hJRERFViAmJiBoaWQtPmhpZGRldl9oaWRfZXZlbnQpCi0JCWhpZC0+aGlkZGV2X2hpZF9ldmVudChoaWQsIGZpZWxkLCB1c2FnZSwgdmFsdWUpOwotCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQgY2FuZG9fcHJvYmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBjYW5kb19kYXRhICp0ZDsKLQotCXRkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNhbmRvX2RhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRkKSB7Ci0JCWhpZF9lcnIoaGRldiwgImNhbm5vdCBhbGxvY2F0ZSBDYW5kbyBUb3VjaCBkYXRhXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCWhpZF9zZXRfZHJ2ZGF0YShoZGV2LCB0ZCk7Ci0JdGQtPmZpcnN0ID0gZmFsc2U7Ci0JdGQtPm9sZGVzdCA9IC0xOwotCXRkLT52YWxpZCA9IGZhbHNlOwotCi0JcmV0ID0gaGlkX3BhcnNlKGhkZXYpOwotCWlmICghcmV0KQotCQlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgSElEX0NPTk5FQ1RfREVGQVVMVCk7Ci0KLQlpZiAocmV0KQotCQlrZnJlZSh0ZCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBjYW5kb19yZW1vdmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCi17Ci0JaGlkX2h3X3N0b3AoaGRldik7Ci0Ja2ZyZWUoaGlkX2dldF9kcnZkYXRhKGhkZXYpKTsKLQloaWRfc2V0X2RydmRhdGEoaGRldiwgTlVMTCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBjYW5kb19kZXZpY2VzW10gPSB7Ci0JeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NBTkRPLAotCQkJVVNCX0RFVklDRV9JRF9DQU5ET19NVUxUSV9UT1VDSCkgfSwKLQl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQ0FORE8sCi0JCQlVU0JfREVWSUNFX0lEX0NBTkRPX01VTFRJX1RPVUNIXzEwXzEpIH0sCi0JeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NBTkRPLAotCQkJVVNCX0RFVklDRV9JRF9DQU5ET19NVUxUSV9UT1VDSF8xMV82KSB9LAotCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DQU5ETywKLQkJVVNCX0RFVklDRV9JRF9DQU5ET19NVUxUSV9UT1VDSF8xNV82KSB9LAotCXsgfQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBjYW5kb19kZXZpY2VzKTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfdXNhZ2VfaWQgY2FuZG9fZ3JhYmJlZF91c2FnZXNbXSA9IHsKLQl7IEhJRF9BTllfSUQsIEhJRF9BTllfSUQsIEhJRF9BTllfSUQgfSwKLQl7IEhJRF9BTllfSUQgLSAxLCBISURfQU5ZX0lEIC0gMSwgSElEX0FOWV9JRCAtIDF9Ci19OwotCi1zdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIgY2FuZG9fZHJpdmVyID0gewotCS5uYW1lID0gImNhbmRvLXRvdWNoIiwKLQkuaWRfdGFibGUgPSBjYW5kb19kZXZpY2VzLAotCS5wcm9iZSA9IGNhbmRvX3Byb2JlLAotCS5yZW1vdmUgPSBjYW5kb19yZW1vdmUsCi0JLmlucHV0X21hcHBpbmcgPSBjYW5kb19pbnB1dF9tYXBwaW5nLAotCS5pbnB1dF9tYXBwZWQgPSBjYW5kb19pbnB1dF9tYXBwZWQsCi0JLnVzYWdlX3RhYmxlID0gY2FuZG9fZ3JhYmJlZF91c2FnZXMsCi0JLmV2ZW50ID0gY2FuZG9fZXZlbnQsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBjYW5kb19pbml0KHZvaWQpCi17Ci0JcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJmNhbmRvX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBjYW5kb19leGl0KHZvaWQpCi17Ci0JaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZjYW5kb19kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChjYW5kb19pbml0KTsKLW1vZHVsZV9leGl0KGNhbmRvX2V4aXQpOwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtY29yZS5jIGIvZHJpdmVycy9oaWQvaGlkLWNvcmUuYwppbmRleCA0MDhjNGJlLi5jOTU3YzRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKQEAgLTEwNDUsNiArMTA0NSw5IEBACiAKIAlyc2l6ZSA9ICgocmVwb3J0LT5zaXplIC0gMSkgPj4gMykgKyAxOwogCisJaWYgKHJzaXplID4gSElEX01BWF9CVUZGRVJfU0laRSkKKwkJcnNpemUgPSBISURfTUFYX0JVRkZFUl9TSVpFOworCiAJaWYgKGNzaXplIDwgcnNpemUpIHsKIAkJZGJnX2hpZCgicmVwb3J0ICVkIGlzIHRvbyBzaG9ydCwgKCVkIDwgJWQpXG4iLCByZXBvcnQtPmlkLAogCQkJCWNzaXplLCByc2l6ZSk7CkBAIC0xMjkwLDYgKzEyOTMsNyBAQAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BNFRFQ0gsIFVTQl9ERVZJQ0VfSURfQTRURUNIX1g1XzAwNUQpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0E0VEVDSCwgVVNCX0RFVklDRV9JRF9BNFRFQ0hfUlBfNjQ5KSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BQ1JVWCwgMHgwODAyKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BQ1RJT05TVEFSLCBVU0JfREVWSUNFX0lEX0FDVElPTlNUQVJfMTAxMSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQVRWX0lSQ09OVFJPTCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfSVJDT05UUk9MNCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfTUlHSFRZTU9VU0UpIH0sCkBAIC0xMzU2LDYgKzEzNjAsNyBAQAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DSElDT05ZLCBVU0JfREVWSUNFX0lEX0NISUNPTllfVEFDVElDQUxfUEFEKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DSElDT05ZLCBVU0JfREVWSUNFX0lEX0NISUNPTllfV0lSRUxFU1MpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NSRUFUSVZFTEFCUywgVVNCX0RFVklDRV9JRF9QUk9ESUtFWVNfUENNSURJKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DVlRPVUNILCBVU0JfREVWSUNFX0lEX0NWVE9VQ0hfU0NSRUVOKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DWVBSRVNTLCBVU0JfREVWSUNFX0lEX0NZUFJFU1NfQkFSQ09ERV8xKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DWVBSRVNTLCBVU0JfREVWSUNFX0lEX0NZUFJFU1NfQkFSQ09ERV8yKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DWVBSRVNTLCBVU0JfREVWSUNFX0lEX0NZUFJFU1NfQkFSQ09ERV8zKSB9LApAQCAtMTM2OSwxNyArMTM3NCwyMCBAQAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9EV0FWLCBVU0JfREVWSUNFX0lEX0RXQVZfRUdBTEFYX01VTFRJVE9VQ0gzKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9EV0FWLCBVU0JfREVWSUNFX0lEX0RXQVZfRUdBTEFYX01VTFRJVE9VQ0g0KSB9LAogCXsgSElEX0JMVUVUT09USF9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9FTEVDT00sIFVTQl9ERVZJQ0VfSURfRUxFQ09NX0JNMDg0KSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9FTE8sIFVTQl9ERVZJQ0VfSURfRUxPX1RTMjUxNSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfRU1TLCBVU0JfREVWSUNFX0lEX0VNU19UUklPX0xJTktFUl9QTFVTX0lJKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9FWktFWSwgVVNCX0RFVklDRV9JRF9CVENfODE5MykgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR0FNRVJPTiwgVVNCX0RFVklDRV9JRF9HQU1FUk9OX0RVQUxfUFNYX0FEQVBUT1IpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dBTUVST04sIFVTQl9ERVZJQ0VfSURfR0FNRVJPTl9EVUFMX1BDU19BREFQVE9SKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HRU5FUkFMX1RPVUNILCBVU0JfREVWSUNFX0lEX0dFTkVSQUxfVE9VQ0hfV0lON19UV09GSU5HRVJTKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HT09EVE9VQ0gsIFVTQl9ERVZJQ0VfSURfR09PRFRPVUNIXzAwMGYpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dSRUVOQVNJQSwgMHgwMDAzKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HUkVFTkFTSUEsIDB4MDAxMikgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR1lSQVRJT04sIFVTQl9ERVZJQ0VfSURfR1lSQVRJT05fUkVNT1RFKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HWVJBVElPTiwgVVNCX0RFVklDRV9JRF9HWVJBVElPTl9SRU1PVEVfMikgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR1lSQVRJT04sIFVTQl9ERVZJQ0VfSURfR1lSQVRJT05fUkVNT1RFXzMpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0hBTlZPTiwgVVNCX0RFVklDRV9JRF9IQU5WT05fTVVMVElUT1VDSCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSUxJVEVLLCBVU0JfREVWSUNFX0lEX0lMSVRFS19NVUxUSVRPVUNIKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JUlRPVUNIU1lTVEVNUywgVVNCX0RFVklDRV9JRF9JUlRPVUNIX0lORlJBUkVEX1VTQikgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfS0VOU0lOR1RPTiwgVVNCX0RFVklDRV9JRF9LU19TTElNQkxBREUpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0tFWVRPVUNILCBVU0JfREVWSUNFX0lEX0tFWVRPVUNIX0lFQykgfSwKQEAgLTE0MDgsMTAgKzE0MTYsMTIgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfTU9NT19XSEVFTDIpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0RGUF9XSEVFTCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfRzI1X1dIRUVMKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9HMjdfV0hFRUwpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1dJSV9XSEVFTCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfUlVNQkxFUEFEMikgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfU1BBQ0VUUkFWRUxMRVIpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX1NQQUNFTkFWSUdBVE9SKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MVU1JTywgVVNCX0RFVklDRV9JRF9DUllTVEFMVE9VQ0gpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01JQ1JPQ0hJUCwgVVNCX0RFVklDRV9JRF9QSUNPTENEKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9NSUNST0NISVAsIFVTQl9ERVZJQ0VfSURfUElDT0xDRF9CT09UTE9BREVSKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9NSUNST1NPRlQsIFVTQl9ERVZJQ0VfSURfU0lERVdJTkRFUl9HVikgfSwKQEAgLTE0NDEsNiArMTQ1MSw3IEBACiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX05UUklHLCBVU0JfREVWSUNFX0lEX05UUklHX1RPVUNIX1NDUkVFTl8xOCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfT1JURUssIFVTQl9ERVZJQ0VfSURfT1JURUtfUEtCMTcwMCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfT1JURUssIFVTQl9ERVZJQ0VfSURfT1JURUtfV0tCMjAwMCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUEVOTU9VTlQsIFVTQl9ERVZJQ0VfSURfUEVOTU9VTlRfUENJKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9QRVRBTFlOWCwgVVNCX0RFVklDRV9JRF9QRVRBTFlOWF9NQVhURVJfUkVNT1RFKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9RVUFOVEEsIFVTQl9ERVZJQ0VfSURfUVVBTlRBX09QVElDQUxfVE9VQ0gpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1FVQU5UQSwgVVNCX0RFVklDRV9JRF9QSVhBUlRfSU1BR0lOR19JTkNfT1BUSUNBTF9UT1VDSF9TQ1JFRU4pIH0sCkBAIC0xNDU0LDYgKzE0NjUsNyBAQAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TQU1TVU5HLCBVU0JfREVWSUNFX0lEX1NBTVNVTkdfV0lSRUxFU1NfS0JEX01PVVNFKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TS1lDQUJMRSwgVVNCX0RFVklDRV9JRF9TS1lDQUJMRV9XSVJFTEVTU19QUkVTRU5URVIpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NPTlksIFVTQl9ERVZJQ0VfSURfU09OWV9QUzNfQ09OVFJPTExFUikgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfU09OWSwgVVNCX0RFVklDRV9JRF9TT05ZX05BVklHQVRJT05fQ09OVFJPTExFUikgfSwKIAl7IEhJRF9CTFVFVE9PVEhfREVWSUNFKFVTQl9WRU5ET1JfSURfU09OWSwgVVNCX0RFVklDRV9JRF9TT05ZX1BTM19DT05UUk9MTEVSKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TT05ZLCBVU0JfREVWSUNFX0lEX1NPTllfVkFJT19WR1hfTU9VU0UpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NUQU5UVU0sIFVTQl9ERVZJQ0VfSURfTVRQKSB9LApAQCAtMTQ3MCwxMiArMTQ4MiwxNSBAQAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9USFJVU1RNQVNURVIsIDB4YjY1YSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVE9QU0VFRCwgVVNCX0RFVklDRV9JRF9UT1BTRUVEX0NZQkVSTElOSykgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVE9QU0VFRDIsIFVTQl9ERVZJQ0VfSURfVE9QU0VFRDJfUkZfQ09NQk8pIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RPVUNIX0lOVEwsIFVTQl9ERVZJQ0VfSURfVE9VQ0hfSU5UTF9NVUxUSV9UT1VDSCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVFdJTkhBTiwgVVNCX0RFVklDRV9JRF9UV0lOSEFOX0lSX1JFTU9URSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVFVSQk9YLCBVU0JfREVWSUNFX0lEX1RVUkJPWF9UT1VDSFNDUkVFTl9NT1NBUlQpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1VDTE9HSUMsIFVTQl9ERVZJQ0VfSURfVUNMT0dJQ19UQUJMRVRfUEYxMjA5KSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9VQ0xPR0lDLCBVU0JfREVWSUNFX0lEX1VDTE9HSUNfVEFCTEVUX1dQNDAzMFUpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1VDTE9HSUMsIFVTQl9ERVZJQ0VfSURfVUNMT0dJQ19UQUJMRVRfV1A1NTQwVSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVUNMT0dJQywgVVNCX0RFVklDRV9JRF9VQ0xPR0lDX1RBQkxFVF9XUDgwNjBVKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9VTklURUMsIFVTQl9ERVZJQ0VfSURfVU5JVEVDX1VTQl9UT1VDSF8wNzA5KSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9VTklURUMsIFVTQl9ERVZJQ0VfSURfVU5JVEVDX1VTQl9UT1VDSF8wQTE5KSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XSVNFR1JPVVAsIFVTQl9ERVZJQ0VfSURfU01BUlRKT1lfUExVUykgfSwKIAl7IEhJRF9CTFVFVE9PVEhfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fR1JBUEhJUkVfQkxVRVRPT1RIKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUxUT1AsIFVTQl9ERVZJQ0VfSURfV0FMVE9QX1NMSU1fVEFCTEVUXzVfOF9JTkNIKSB9LApAQCAtMTc2MCwxOSArMTc3NSwzNyBAQAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9LWUUsIFVTQl9ERVZJQ0VfSURfS1lFX0dQRU5fNTYwKSB9LAogCXsgSElEX0JMVUVUT09USF9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9LWUUsIDB4MDA1OCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfQ0FTU1kpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX0NBU1NZMikgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfUE9DS0VUQ0FTU1kpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX1BPQ0tFVENBU1NZMikgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfTU9CSUxFQ0FTU1kpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX01PQklMRUNBU1NZMikgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfTUlDUk9DQVNTWVZPTFRBR0UpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX01JQ1JPQ0FTU1lDVVJSRU5UKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9NSUNST0NBU1NZVElNRSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfTUlDUk9DQVNTWVRFTVBFUkFUVVJFKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9NSUNST0NBU1NZUEgpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX0pXTSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfRE1NUCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfVU1JUCkgfSwKLQl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfWFJBWTEpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX1VNSUMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX1VNSUIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX1hSQVkpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX1hSQVkyKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9WSURFT0NPTSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfTU9UT1IpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX0NPTTNMQUIpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX1RFTEVQT1JUKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9ORVRXT1JLQU5BTFlTRVIpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX1BPV0VSQ09OVFJPTCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfTUFDSElORVRFU1QpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX01PU1RBTkFMWVNFUikgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfTU9TVEFOQUxZU0VSMikgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfQUJTRVNQKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9BVVRPREFUQUJVUykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfTUNUKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9IWUJSSUQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX0hFQVRDT05UUk9MKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9NQ0MsIFVTQl9ERVZJQ0VfSURfTUNDX1BNRDEwMjRMUykgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTUNDLCBVU0JfREVWSUNFX0lEX01DQ19QTUQxMjA4TFMpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01JQ1JPQ0hJUCwgVVNCX0RFVklDRV9JRF9QSUNLSVQxKSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWlkcy5oIGIvZHJpdmVycy9oaWQvaGlkLWlkcy5oCmluZGV4IDAwYTk0YjUuLjBiMzc0YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1pZHMuaAorKysgYi9kcml2ZXJzL2hpZC9oaWQtaWRzLmgKQEAgLTM3LDYgKzM3LDkgQEAKIAogI2RlZmluZSBVU0JfVkVORE9SX0lEX0FDUlVYCQkweDFhMzQKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX0FDVElPTlNUQVIJMHgyMTAxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQUNUSU9OU1RBUl8xMDExCTB4MTAxMQorCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfQURTX1RFQ0ggCQkweDA2ZTEKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BRFNfVEVDSF9SQURJT19TSTQ3MFgJMHhhMTU1CiAKQEAgLTE4Miw2ICsxODUsOSBAQAogI2RlZmluZSBVU0JfVkVORE9SX0lEX0NSRUFUSVZFTEFCUwkweDA0MWUKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9QUk9ESUtFWVNfUENNSURJCTB4MjgwMQogCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQ1ZUT1VDSAkJMHgxZmY3CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ1ZUT1VDSF9TQ1JFRU4JMHgwMDEzCisKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9DWUdOQUwJCTB4MTBjNAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0NZR05BTF9SQURJT19TSTQ3MFgJMHg4MThhCiAKQEAgLTIyMCw2ICsyMjYsNyBAQAogI2RlZmluZSBVU0JfVkVORE9SX0lEX0RSRUFNX0NIRUVLWQkweDFkMzQKIAogI2RlZmluZSBVU0JfVkVORE9SX0lEX0VMTwkJMHgwNEU3CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfRUxPX1RTMjUxNQkweDAwMjIKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9FTE9fVFMyNzAwCTB4MDAyMAogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfRU1TCQkweDIwMDYKQEAgLTI1NSw2ICsyNjIsOSBAQAogI2RlZmluZSBVU0JfREVWSUNFX0lEXzBfOF84X0lGX0tJVAkweDAwNTMKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9QSElER0VUX01PVE9SQ09OVFJPTAkweDAwNTgKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX0dPT0RUT1VDSAkJMHgxYWFkCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR09PRFRPVUNIXzAwMGYJMHgwMDBmCisKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9HT1RPUAkJMHgwOGYyCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU1VQRVJfUTIJCTB4MDA3ZgogI2RlZmluZSBVU0JfREVWSUNFX0lEX0dPR09QRU4JCTB4MDBjZQpAQCAtMzM0LDYgKzM0NCw5IEBACiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVUdDSV9GTFlJTkcJMHgwMDIwCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVUdDSV9GSUdIVElORwkweDAwMzAKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX0lMSVRFSwkJMHgyMjJhCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfSUxJVEVLX01VTFRJVE9VQ0gJMHgwMDAxCisKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9JTUFUSU9OCQkweDA3MTgKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9ESVNDX1NUQUtLQQkweGQwMDAKIApAQCAtMzY3LDE5ICszODAsMzggQEAKIAogI2RlZmluZSBVU0JfVkVORE9SX0lEX0xECQkweDBmMTEKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9DQVNTWQkJMHgxMDAwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfQ0FTU1kyCQkweDEwMDEKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9QT0NLRVRDQVNTWQkweDEwMTAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9QT0NLRVRDQVNTWTIJMHgxMDExCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfTU9CSUxFQ0FTU1kJMHgxMDIwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfTU9CSUxFQ0FTU1kyCTB4MTAyMQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX01JQ1JPQ0FTU1lWT0xUQUdFCTB4MTAzMQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX01JQ1JPQ0FTU1lDVVJSRU5UCTB4MTAzMgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX01JQ1JPQ0FTU1lUSU1FCQkweDEwMzMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9NSUNST0NBU1NZVEVNUEVSQVRVUkUJMHgxMDM1CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfTUlDUk9DQVNTWVBICQkweDEwMzgKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9KV00JCTB4MTA4MAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX0RNTVAJCTB4MTA4MQogI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX1VNSVAJCTB4MTA5MAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX1hSQVkxCQkweDExMDAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9VTUlDCQkweDEwQTAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9VTUlCCQkweDEwQjAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9YUkFZCQkweDExMDAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9YUkFZMgkJMHgxMTAxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfWFJBWUNUCQkweDExMTAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9WSURFT0NPTQkweDEyMDAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9NT1RPUgkJMHgxMjEwCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfQ09NM0xBQgkweDIwMDAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9URUxFUE9SVAkweDIwMTAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9ORVRXT1JLQU5BTFlTRVIgMHgyMDIwCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfUE9XRVJDT05UUk9MCTB4MjAzMAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX01BQ0hJTkVURVNUCTB4MjA0MAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX01PU1RBTkFMWVNFUgkweDIwNTAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9NT1NUQU5BTFlTRVIyCTB4MjA1MQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX0FCU0VTUAkJMHgyMDYwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfQVVUT0RBVEFCVVMJMHgyMDcwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfTUNUCQkweDIwODAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9IWUJSSUQJCTB4MjA5MAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX0hFQVRDT05UUk9MCTB4MjBBMAogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gJCTB4MDQ2ZAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1JFQ0VJVkVSCTB4YzEwMQpAQCAtMzk4LDYgKzQzMCw3IEBACiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfTU9NT19XSEVFTAkweGMyOTUKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9ERlBfV0hFRUwJMHhjMjk4CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfRzI1X1dIRUVMCTB4YzI5OQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0cyN19XSEVFTAkweGMyOWIKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9XSUlfV0hFRUwJMHhjMjljCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfRUxJVEVfS0JECTB4YzMwYQogI2RlZmluZSBVU0JfREVWSUNFX0lEX1M1MTBfUkVDRUlWRVIJMHhjNTBjCkBAIC00MTEsNiArNDQ0LDkgQEAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9ESU5PVk9fTUlOSQkweGM3MWYKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9NT01PX1dIRUVMMgkweGNhMDMKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX0xVTUlPCQkweDIwMmUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9DUllTVEFMVE9VQ0gJMHgwMDA2CisKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9NQ0MJCTB4MDlkYgogI2RlZmluZSBVU0JfREVWSUNFX0lEX01DQ19QTUQxMDI0TFMJMHgwMDc2CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTUNDX1BNRDEyMDhMUwkweDAwN2EKQEAgLTQ4OCw2ICs1MjQsOSBAQAogI2RlZmluZSBVU0JfVkVORE9SX0lEX1BBTlRIRVJMT1JECTB4MDgxMAogI2RlZmluZSBVU0JfREVWSUNFX0lEX1BBTlRIRVJMT1JEX1RXSU5fVVNCX0pPWVNUSUNLCTB4MDAwMQogCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfUEVOTU9VTlQJCTB4MTRlMQorI2RlZmluZSBVU0JfREVWSUNFX0lEX1BFTk1PVU5UX1BDSQkweDM1MDAKKwogI2RlZmluZSBVU0JfVkVORE9SX0lEX1BFVEFMWU5YCQkweDE4YjEKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9QRVRBTFlOWF9NQVhURVJfUkVNT1RFCTB4MDAzNwogCkBAIC01MzEsNiArNTcwLDcgQEAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9TT05ZCQkJMHgwNTRjCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU09OWV9WQUlPX1ZHWF9NT1VTRQkweDAyNGIKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9TT05ZX1BTM19DT05UUk9MTEVSCTB4MDI2OAorI2RlZmluZSBVU0JfREVWSUNFX0lEX1NPTllfTkFWSUdBVElPTl9DT05UUk9MTEVSCTB4MDQyZgogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfU09VTkRHUkFQSAkweDE1YzIKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9TT1VOREdSQVBIX0lNT05fRklSU1QJMHgwMDM0CkBAIC01NTEsNiArNTkxLDEwIEBACiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfU1VOUExVUwkJMHgwNGZjCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU1VOUExVU19XREVTS1RPUAkweDA1ZDgKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX1NZTUJPTAkJMHgwNWUwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU1lNQk9MX1NDQU5ORVJfMQkweDA4MDAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9TWU1CT0xfU0NBTk5FUl8yCTB4MTMwMAorCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfVEhSVVNUTUFTVEVSCTB4MDQ0ZgogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfVE9QU0VFRAkJMHgwNzY2CkBAIC01NjIsNiArNjA2LDkgQEAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9UT1BNQVgJCTB4MDY2MwogI2RlZmluZSBVU0JfREVWSUNFX0lEX1RPUE1BWF9DT0JSQVBBRAkweDAxMDMKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX1RPVUNIX0lOVEwJMHgxZTVlCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVE9VQ0hfSU5UTF9NVUxUSV9UT1VDSAkweDAzMTMKKwogI2RlZmluZSBVU0JfVkVORE9SX0lEX1RPVUNIUEFDSwkJMHgxYmZkCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVE9VQ0hQQUNLX1JUUwkweDE2ODgKIApAQCAtNTc5LDYgKzYyNiwxMCBAQAogI2RlZmluZSBVU0JfREVWSUNFX0lEX1VDTE9HSUNfVEFCTEVUX1dQNTU0MFUJMHgwMDA0CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVUNMT0dJQ19UQUJMRVRfV1A4MDYwVQkweDAwMDUKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX1VOSVRFQwkweDIyN2QKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9VTklURUNfVVNCX1RPVUNIXzA3MDkJMHgwNzA5CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVU5JVEVDX1VTQl9UT1VDSF8wQTE5CTB4MGExOQorCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfVkVSTklFUgkJMHgwOGY3CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9MQUJQUk8JMHgwMDAxCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9HT1RFTVAJMHgwMDAyCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYyBiL2RyaXZlcnMvaGlkL2hpZC1pbnB1dC5jCmluZGV4IDMzZGRlODcuLjY1NTllMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1pbnB1dC5jCkBAIC00NCwxMSArNDQsMTEgQEAKIAkgNzIsIDczLCA4MiwgODMsIDg2LDEyNywxMTYsMTE3LDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsCiAJMTkxLDE5MiwxOTMsMTk0LDEzNCwxMzgsMTMwLDEzMiwxMjgsMTI5LDEzMSwxMzcsMTMzLDEzNSwxMzYsMTEzLAogCTExNSwxMTQsdW5rLHVuayx1bmssMTIxLHVuaywgODksIDkzLDEyNCwgOTIsIDk0LCA5NSx1bmssdW5rLHVuaywKLQkxMjIsMTIzLCA5MCwgOTEsIDg1LHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssCisJMTIyLDEyMywgOTAsIDkxLCA4NSx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssMTExLHVuayx1bmssdW5rLAogCXVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuaywKIAl1bmssdW5rLHVuayx1bmssdW5rLHVuaywxNzksMTgwLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssCiAJdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLAotCXVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuaywKKwl1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLDExMSx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssCiAJIDI5LCA0MiwgNTYsMTI1LCA5NywgNTQsMTAwLDEyNiwxNjQsMTY2LDE2NSwxNjMsMTYxLDExNSwxMTQsMTEzLAogCTE1MCwxNTgsMTU5LDEyOCwxMzYsMTc3LDE3OCwxNzYsMTQyLDE1MiwxNzMsMTQwLHVuayx1bmssdW5rLHVuawogfTsKQEAgLTM1Nyw2ICszNTcsMTggQEAKIAkJCWNhc2UgMHgxOiBtYXBfa2V5X2NsZWFyKEtFWV9QT1dFUik7ICBicmVhazsKIAkJCWNhc2UgMHgyOiBtYXBfa2V5X2NsZWFyKEtFWV9TTEVFUCk7ICBicmVhazsKIAkJCWNhc2UgMHgzOiBtYXBfa2V5X2NsZWFyKEtFWV9XQUtFVVApOyBicmVhazsKKwkJCWNhc2UgMHg0OiBtYXBfa2V5X2NsZWFyKEtFWV9DT05URVhUX01FTlUpOyBicmVhazsKKwkJCWNhc2UgMHg1OiBtYXBfa2V5X2NsZWFyKEtFWV9NRU5VKTsgYnJlYWs7CisJCQljYXNlIDB4NjogbWFwX2tleV9jbGVhcihLRVlfUFJPRzEpOyBicmVhazsKKwkJCWNhc2UgMHg3OiBtYXBfa2V5X2NsZWFyKEtFWV9IRUxQKTsgYnJlYWs7CisJCQljYXNlIDB4ODogbWFwX2tleV9jbGVhcihLRVlfRVhJVCk7IGJyZWFrOworCQkJY2FzZSAweDk6IG1hcF9rZXlfY2xlYXIoS0VZX1NFTEVDVCk7IGJyZWFrOworCQkJY2FzZSAweGE6IG1hcF9rZXlfY2xlYXIoS0VZX1JJR0hUKTsgYnJlYWs7CisJCQljYXNlIDB4YjogbWFwX2tleV9jbGVhcihLRVlfTEVGVCk7IGJyZWFrOworCQkJY2FzZSAweGM6IG1hcF9rZXlfY2xlYXIoS0VZX1VQKTsgYnJlYWs7CisJCQljYXNlIDB4ZDogbWFwX2tleV9jbGVhcihLRVlfRE9XTik7IGJyZWFrOworCQkJY2FzZSAweGU6IG1hcF9rZXlfY2xlYXIoS0VZX1BPV0VSMik7IGJyZWFrOworCQkJY2FzZSAweGY6IG1hcF9rZXlfY2xlYXIoS0VZX1JFU1RBUlQpOyBicmVhazsKIAkJCWRlZmF1bHQ6IGdvdG8gdW5rbm93bjsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtNDY2LDE2ICs0NzgsMzkgQEAKIAkJfQogCQlicmVhazsKIAotCWNhc2UgSElEX1VQX0NPTlNVTUVSOgkvKiBVU0IgSFVUIHYxLjEsIHBhZ2VzIDU2LTYyICovCisJY2FzZSBISURfVVBfQ09OU1VNRVI6CS8qIFVTQiBIVVQgdjEuMTIsIHBhZ2VzIDc1LTg0ICovCiAJCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgewogCQljYXNlIDB4MDAwOiBnb3RvIGlnbm9yZTsKKwkJY2FzZSAweDAzMDogbWFwX2tleV9jbGVhcihLRVlfUE9XRVIpOwkJYnJlYWs7CisJCWNhc2UgMHgwMzE6IG1hcF9rZXlfY2xlYXIoS0VZX1JFU1RBUlQpOwkJYnJlYWs7CisJCWNhc2UgMHgwMzI6IG1hcF9rZXlfY2xlYXIoS0VZX1NMRUVQKTsJCWJyZWFrOwogCQljYXNlIDB4MDM0OiBtYXBfa2V5X2NsZWFyKEtFWV9TTEVFUCk7CQlicmVhazsKKwkJY2FzZSAweDAzNTogbWFwX2tleV9jbGVhcihLRVlfS0JESUxMVU1UT0dHTEUpOwlicmVhazsKIAkJY2FzZSAweDAzNjogbWFwX2tleV9jbGVhcihCVE5fTUlTQyk7CQlicmVhazsKIAotCQljYXNlIDB4MDQwOiBtYXBfa2V5X2NsZWFyKEtFWV9NRU5VKTsJCWJyZWFrOwotCQljYXNlIDB4MDQ1OiBtYXBfa2V5X2NsZWFyKEtFWV9SQURJTyk7CQlicmVhazsKKwkJY2FzZSAweDA0MDogbWFwX2tleV9jbGVhcihLRVlfTUVOVSk7CQlicmVhazsgLyogTWVudSAqLworCQljYXNlIDB4MDQxOiBtYXBfa2V5X2NsZWFyKEtFWV9TRUxFQ1QpOwkJYnJlYWs7IC8qIE1lbnUgUGljayAqLworCQljYXNlIDB4MDQyOiBtYXBfa2V5X2NsZWFyKEtFWV9VUCk7CQlicmVhazsgLyogTWVudSBVcCAqLworCQljYXNlIDB4MDQzOiBtYXBfa2V5X2NsZWFyKEtFWV9ET1dOKTsJCWJyZWFrOyAvKiBNZW51IERvd24gKi8KKwkJY2FzZSAweDA0NDogbWFwX2tleV9jbGVhcihLRVlfTEVGVCk7CQlicmVhazsgLyogTWVudSBMZWZ0ICovCisJCWNhc2UgMHgwNDU6IG1hcF9rZXlfY2xlYXIoS0VZX1JJR0hUKTsJCWJyZWFrOyAvKiBNZW51IFJpZ2h0ICovCisJCWNhc2UgMHgwNDY6IG1hcF9rZXlfY2xlYXIoS0VZX0VTQyk7CQlicmVhazsgLyogTWVudSBFc2NhcGUgKi8KKwkJY2FzZSAweDA0NzogbWFwX2tleV9jbGVhcihLRVlfS1BQTFVTKTsJCWJyZWFrOyAvKiBNZW51IFZhbHVlIEluY3JlYXNlICovCisJCWNhc2UgMHgwNDg6IG1hcF9rZXlfY2xlYXIoS0VZX0tQTUlOVVMpOwkJYnJlYWs7IC8qIE1lbnUgVmFsdWUgRGVjcmVhc2UgKi8KIAorCQljYXNlIDB4MDYwOiBtYXBfa2V5X2NsZWFyKEtFWV9JTkZPKTsJCWJyZWFrOyAvKiBEYXRhIE9uIFNjcmVlbiAqLworCQljYXNlIDB4MDYxOiBtYXBfa2V5X2NsZWFyKEtFWV9TVUJUSVRMRSk7CWJyZWFrOyAvKiBDbG9zZWQgQ2FwdGlvbiAqLworCQljYXNlIDB4MDYzOiBtYXBfa2V5X2NsZWFyKEtFWV9WQ1IpOwkJYnJlYWs7IC8qIFZDUi9UViAqLworCQljYXNlIDB4MDY1OiBtYXBfa2V5X2NsZWFyKEtFWV9DQU1FUkEpOwkJYnJlYWs7IC8qIFNuYXBzaG90ICovCisJCWNhc2UgMHgwNjk6IG1hcF9rZXlfY2xlYXIoS0VZX1JFRCk7CQlicmVhazsKKwkJY2FzZSAweDA2YTogbWFwX2tleV9jbGVhcihLRVlfR1JFRU4pOwkJYnJlYWs7CisJCWNhc2UgMHgwNmI6IG1hcF9rZXlfY2xlYXIoS0VZX0JMVUUpOwkJYnJlYWs7CisJCWNhc2UgMHgwNmM6IG1hcF9rZXlfY2xlYXIoS0VZX1lFTExPVyk7CQlicmVhazsKKwkJY2FzZSAweDA2ZDogbWFwX2tleV9jbGVhcihLRVlfWk9PTSk7CQlicmVhazsKKworCQljYXNlIDB4MDgyOiBtYXBfa2V5X2NsZWFyKEtFWV9WSURFT19ORVhUKTsJYnJlYWs7CiAJCWNhc2UgMHgwODM6IG1hcF9rZXlfY2xlYXIoS0VZX0xBU1QpOwkJYnJlYWs7CisJCWNhc2UgMHgwODQ6IG1hcF9rZXlfY2xlYXIoS0VZX0VOVEVSKTsJCWJyZWFrOwogCQljYXNlIDB4MDg4OiBtYXBfa2V5X2NsZWFyKEtFWV9QQyk7CQlicmVhazsKIAkJY2FzZSAweDA4OTogbWFwX2tleV9jbGVhcihLRVlfVFYpOwkJYnJlYWs7CiAJCWNhc2UgMHgwOGE6IG1hcF9rZXlfY2xlYXIoS0VZX1dXVyk7CQlicmVhazsKQEAgLTUwOSw2ICs1NDQsOCBAQAogCQljYXNlIDB4MGI3OiBtYXBfa2V5X2NsZWFyKEtFWV9TVE9QQ0QpOwkJYnJlYWs7CiAJCWNhc2UgMHgwYjg6IG1hcF9rZXlfY2xlYXIoS0VZX0VKRUNUQ0QpOwkJYnJlYWs7CiAJCWNhc2UgMHgwYmM6IG1hcF9rZXlfY2xlYXIoS0VZX01FRElBX1JFUEVBVCk7CWJyZWFrOworCQljYXNlIDB4MGI5OiBtYXBfa2V5X2NsZWFyKEtFWV9TSFVGRkxFKTsJCWJyZWFrOworCQljYXNlIDB4MGJmOiBtYXBfa2V5X2NsZWFyKEtFWV9TTE9XKTsJCWJyZWFrOwogCiAJCWNhc2UgMHgwY2Q6IG1hcF9rZXlfY2xlYXIoS0VZX1BMQVlQQVVTRSk7CWJyZWFrOwogCQljYXNlIDB4MGUwOiBtYXBfYWJzX2NsZWFyKEFCU19WT0xVTUUpOwkJYnJlYWs7CkBAIC01MTYsNiArNTUzLDcgQEAKIAkJY2FzZSAweDBlNTogbWFwX2tleV9jbGVhcihLRVlfQkFTU0JPT1NUKTsJYnJlYWs7CiAJCWNhc2UgMHgwZTk6IG1hcF9rZXlfY2xlYXIoS0VZX1ZPTFVNRVVQKTsJYnJlYWs7CiAJCWNhc2UgMHgwZWE6IG1hcF9rZXlfY2xlYXIoS0VZX1ZPTFVNRURPV04pOwlicmVhazsKKwkJY2FzZSAweDBmNTogbWFwX2tleV9jbGVhcihLRVlfU0xPVyk7CQlicmVhazsKIAogCQljYXNlIDB4MTgyOiBtYXBfa2V5X2NsZWFyKEtFWV9CT09LTUFSS1MpOwlicmVhazsKIAkJY2FzZSAweDE4MzogbWFwX2tleV9jbGVhcihLRVlfQ09ORklHKTsJCWJyZWFrOwpAQCAtNTMyLDYgKzU3MCw3IEBACiAJCWNhc2UgMHgxOGU6IG1hcF9rZXlfY2xlYXIoS0VZX0NBTEVOREFSKTsJYnJlYWs7CiAJCWNhc2UgMHgxOTE6IG1hcF9rZXlfY2xlYXIoS0VZX0ZJTkFOQ0UpOwkJYnJlYWs7CiAJCWNhc2UgMHgxOTI6IG1hcF9rZXlfY2xlYXIoS0VZX0NBTEMpOwkJYnJlYWs7CisJCWNhc2UgMHgxOTM6IG1hcF9rZXlfY2xlYXIoS0VZX1BMQVlFUik7CQlicmVhazsKIAkJY2FzZSAweDE5NDogbWFwX2tleV9jbGVhcihLRVlfRklMRSk7CQlicmVhazsKIAkJY2FzZSAweDE5NjogbWFwX2tleV9jbGVhcihLRVlfV1dXKTsJCWJyZWFrOwogCQljYXNlIDB4MTk5OiBtYXBfa2V5X2NsZWFyKEtFWV9DSEFUKTsJCWJyZWFrOwpAQCAtNTQwLDggKzU3OSwxMCBAQAogCQljYXNlIDB4MWE2OiBtYXBfa2V5X2NsZWFyKEtFWV9IRUxQKTsJCWJyZWFrOwogCQljYXNlIDB4MWE3OiBtYXBfa2V5X2NsZWFyKEtFWV9ET0NVTUVOVFMpOwlicmVhazsKIAkJY2FzZSAweDFhYjogbWFwX2tleV9jbGVhcihLRVlfU1BFTExDSEVDSyk7CWJyZWFrOwotCQljYXNlIDB4MWI2OiBtYXBfa2V5X2NsZWFyKEtFWV9NRURJQSk7CQlicmVhazsKLQkJY2FzZSAweDFiNzogbWFwX2tleV9jbGVhcihLRVlfU09VTkQpOwkJYnJlYWs7CisJCWNhc2UgMHgxYWU6IG1hcF9rZXlfY2xlYXIoS0VZX0tFWUJPQVJEKTsJYnJlYWs7CisJCWNhc2UgMHgxYjY6IG1hcF9rZXlfY2xlYXIoS0VZX0lNQUdFUyk7CQlicmVhazsKKwkJY2FzZSAweDFiNzogbWFwX2tleV9jbGVhcihLRVlfQVVESU8pOwkJYnJlYWs7CisJCWNhc2UgMHgxYjg6IG1hcF9rZXlfY2xlYXIoS0VZX1ZJREVPKTsJCWJyZWFrOwogCQljYXNlIDB4MWJjOiBtYXBfa2V5X2NsZWFyKEtFWV9NRVNTRU5HRVIpOwlicmVhazsKIAkJY2FzZSAweDFiZDogbWFwX2tleV9jbGVhcihLRVlfSU5GTyk7CQlicmVhazsKIAkJY2FzZSAweDIwMTogbWFwX2tleV9jbGVhcihLRVlfTkVXKTsJCWJyZWFrOwpAQCAtNTcwLDcgKzYxMSwxMCBAQAogCQljYXNlIDB4MjMzOiBtYXBfa2V5X2NsZWFyKEtFWV9TQ1JPTExVUCk7CWJyZWFrOwogCQljYXNlIDB4MjM0OiBtYXBfa2V5X2NsZWFyKEtFWV9TQ1JPTExET1dOKTsJYnJlYWs7CiAJCWNhc2UgMHgyMzg6IG1hcF9yZWwoUkVMX0hXSEVFTCk7CQlicmVhazsKKwkJY2FzZSAweDIzZDogbWFwX2tleV9jbGVhcihLRVlfRURJVCk7CQlicmVhazsKIAkJY2FzZSAweDI1ZjogbWFwX2tleV9jbGVhcihLRVlfQ0FOQ0VMKTsJCWJyZWFrOworCQljYXNlIDB4MjY5OiBtYXBfa2V5X2NsZWFyKEtFWV9JTlNFUlQpOwkJYnJlYWs7CisJCWNhc2UgMHgyNmE6IG1hcF9rZXlfY2xlYXIoS0VZX0RFTEVURSk7CQlicmVhazsKIAkJY2FzZSAweDI3OTogbWFwX2tleV9jbGVhcihLRVlfUkVETyk7CQlicmVhazsKIAogCQljYXNlIDB4Mjg5OiBtYXBfa2V5X2NsZWFyKEtFWV9SRVBMWSk7CQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1sZy5jIGIvZHJpdmVycy9oaWQvaGlkLWxnLmMKaW5kZXggM2RhOTA0MC4uMjFmMjA1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWxnLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWxnLmMKQEAgLTM3Nyw2ICszNzcsOCBAQAogCQkuZHJpdmVyX2RhdGEgPSBMR19GRiB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9HMjVfV0hFRUwpLAogCQkuZHJpdmVyX2RhdGEgPSBMR19GRiB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9HMjdfV0hFRUwpLAorCQkuZHJpdmVyX2RhdGEgPSBMR19GRiB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9ERlBfV0hFRUwpLAogCQkuZHJpdmVyX2RhdGEgPSBMR19GRiB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9XSUlfV0hFRUwpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWxnZmYuYyBiL2RyaXZlcnMvaGlkL2hpZC1sZ2ZmLmMKaW5kZXggZjA5OTA3OS4uMDg4Zjg1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWxnZmYuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtbGdmZi5jCkBAIC03Miw2ICs3Miw5IEBACiAJeyAweDA0NmQsIDB4YzI4NywgZmZfam95c3RpY2tfYWMgfSwKIAl7IDB4MDQ2ZCwgMHhjMjkzLCBmZl9qb3lzdGljayB9LAogCXsgMHgwNDZkLCAweGMyOTQsIGZmX3doZWVsIH0sCisJeyAweDA0NmQsIDB4YzI5OCwgZmZfd2hlZWwgfSwKKwl7IDB4MDQ2ZCwgMHhjMjk5LCBmZl93aGVlbCB9LAorCXsgMHgwNDZkLCAweGMyOWIsIGZmX3doZWVsIH0sCiAJeyAweDA0NmQsIDB4YzI5NSwgZmZfam95c3RpY2sgfSwKIAl7IDB4MDQ2ZCwgMHhjMjk4LCBmZl93aGVlbCB9LAogCXsgMHgwNDZkLCAweGMyOTksIGZmX3doZWVsIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbWFnaWNtb3VzZS5jIGIvZHJpdmVycy9oaWQvaGlkLW1hZ2ljbW91c2UuYwppbmRleCAwZWM5MWMxLi5hNWVkYTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtbWFnaWNtb3VzZS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1tYWdpY21vdXNlLmMKQEAgLTUwMSw5ICs1MDEsMTcgQEAKIAl9CiAJcmVwb3J0LT5zaXplID0gNjsKIAorCS8qCisJICogVGhlIGRldmljZSByZXBvbmRzIHdpdGggJ2ludmFsaWQgcmVwb3J0IGlkJyB3aGVuIGZlYXR1cmUKKwkgKiByZXBvcnQgc3dpdGNoaW5nIGl0IGludG8gbXVsdGl0b3VjaCBtb2RlIGlzIHNlbnQgdG8gaXQuCisJICoKKwkgKiBUaGlzIHJlc3VsdHMgaW4gLUVJTyBmcm9tIHRoZSBfcmF3IGxvdy1sZXZlbCB0cmFuc3BvcnQgY2FsbGJhY2ssCisJICogYnV0IHRoZXJlIHNlZW1zIHRvIGJlIG5vIG90aGVyIHdheSBvZiBzd2l0Y2hpbmcgdGhlIG1vZGUuCisJICogVGh1cyB0aGUgc3VwZXItdWdseSBoYWNreSBzdWNjZXNzIGNoZWNrIGJlbG93LgorCSAqLwogCXJldCA9IGhkZXYtPmhpZF9vdXRwdXRfcmF3X3JlcG9ydChoZGV2LCBmZWF0dXJlLCBzaXplb2YoZmVhdHVyZSksCiAJCQlISURfRkVBVFVSRV9SRVBPUlQpOwotCWlmIChyZXQgIT0gc2l6ZW9mKGZlYXR1cmUpKSB7CisJaWYgKHJldCAhPSAtRUlPKSB7CiAJCWhpZF9lcnIoaGRldiwgInVuYWJsZSB0byByZXF1ZXN0IHRvdWNoIGRhdGEgKCVkKVxuIiwgcmV0KTsKIAkJZ290byBlcnJfc3RvcF9odzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbW9zYXJ0LmMgYi9kcml2ZXJzL2hpZC9oaWQtbW9zYXJ0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlZDdmZmUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9oaWQvaGlkLW1vc2FydC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjk2ICswLDAgQEAKLS8qCi0gKiAgSElEIGRyaXZlciBmb3IgdGhlIG11bHRpdG91Y2ggcGFuZWwgb24gdGhlIEFTVVMgRWVlUEMgVDkxTVQKLSAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgU3RlcGhhbmUgQ2hhdHR5IDxjaGF0dHlAZW5hYy5mcj4KLSAqICBDb3B5cmlnaHQgKGMpIDIwMTAgVGVlbXUgVHVvbWluZW4gPHRlZW11LnR1b21pbmVuQGN5YmVyY29tLmNvbT4KLSAqCi0gKi8KLQotLyoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQotICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLSNpbmNsdWRlICJ1c2JoaWQvdXNiaGlkLmgiCi0KLU1PRFVMRV9BVVRIT1IoIlN0ZXBoYW5lIENoYXR0eSA8Y2hhdHR5QGVuYWMuZnI+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIk1vc0FydCBkdWFsLXRvdWNoIHBhbmVsIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLSNpbmNsdWRlICJoaWQtaWRzLmgiCi0KLXN0cnVjdCBtb3NhcnRfZGF0YSB7Ci0JX191MTYgeCwgeTsKLQlfX3U4IGlkOwotCWJvb2wgdmFsaWQ7CQkvKiB2YWxpZCBmaW5nZXIgZGF0YSwgb3IganVzdCBwbGFjZWhvbGRlcj8gKi8KLQlib29sIGZpcnN0OwkJLyogaXMgdGhpcyB0aGUgZmlyc3QgZmluZ2VyIGluIHRoaXMgZnJhbWU/ICovCi0JYm9vbCBhY3Rpdml0eV9ub3c7CS8qIGF0IGxlYXN0IG9uZSBhY3RpdmUgZmluZ2VyIGluIHRoaXMgZnJhbWU/ICovCi0JYm9vbCBhY3Rpdml0eTsJCS8qIGF0IGxlYXN0IG9uZSBhY3RpdmUgZmluZ2VyIHByZXZpb3VzbHk/ICovCi19OwotCi1zdGF0aWMgaW50IG1vc2FydF9pbnB1dF9tYXBwaW5nKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKLQkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAotCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKLXsKLQlzd2l0Y2ggKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgewotCi0JY2FzZSBISURfVVBfR0VOREVTSzoKLQkJc3dpdGNoICh1c2FnZS0+aGlkKSB7Ci0JCWNhc2UgSElEX0dEX1g6Ci0JCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCi0JCQkJCUVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1gpOwotCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCi0JCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhoaS0+aW5wdXQsIEFCU19YLAotCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWluaW11bSwKLQkJCQkJCWZpZWxkLT5sb2dpY2FsX21heGltdW0sIDAsIDApOwotCQkJcmV0dXJuIDE7Ci0JCWNhc2UgSElEX0dEX1k6Ci0JCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCi0JCQkJCUVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1kpOwotCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCi0JCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhoaS0+aW5wdXQsIEFCU19ZLAotCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWluaW11bSwKLQkJCQkJCWZpZWxkLT5sb2dpY2FsX21heGltdW0sIDAsIDApOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0KLQljYXNlIEhJRF9VUF9ESUdJVElaRVI6Ci0JCXN3aXRjaCAodXNhZ2UtPmhpZCkgewotCQljYXNlIEhJRF9ER19DT05GSURFTkNFOgotCQljYXNlIEhJRF9ER19USVBTV0lUQ0g6Ci0JCWNhc2UgSElEX0RHX0lOUFVUTU9ERToKLQkJY2FzZSBISURfREdfREVWSUNFSU5ERVg6Ci0JCWNhc2UgSElEX0RHX0NPTlRBQ1RDT1VOVDoKLQkJY2FzZSBISURfREdfQ09OVEFDVE1BWDoKLQkJY2FzZSBISURfREdfVElQUFJFU1NVUkU6Ci0JCWNhc2UgSElEX0RHX1dJRFRIOgotCQljYXNlIEhJRF9ER19IRUlHSFQ6Ci0JCQlyZXR1cm4gLTE7Ci0JCWNhc2UgSElEX0RHX0lOUkFOR0U6Ci0JCQkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KLQkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwgRVZfS0VZLCBCVE5fVE9VQ0gpOwotCQkJcmV0dXJuIDE7Ci0KLQkJY2FzZSBISURfREdfQ09OVEFDVElEOgotCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAotCQkJCQlFVl9BQlMsIEFCU19NVF9UUkFDS0lOR19JRCk7Ci0JCQlyZXR1cm4gMTsKLQotCQl9Ci0JCXJldHVybiAwOwotCi0JY2FzZSAweGZmMDAwMDAwOgotCQkvKiBpZ25vcmUgSElEIGZlYXR1cmVzICovCi0JCXJldHVybiAtMTsKLQotCWNhc2UgSElEX1VQX0JVVFRPTjoKLQkJLyogaWdub3JlIGJ1dHRvbnMgKi8KLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG1vc2FydF9pbnB1dF9tYXBwZWQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfaW5wdXQgKmhpLAotCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsCi0JCXVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQotewotCWlmICh1c2FnZS0+dHlwZSA9PSBFVl9LRVkgfHwgdXNhZ2UtPnR5cGUgPT0gRVZfQUJTKQotCQljbGVhcl9iaXQodXNhZ2UtPmNvZGUsICpiaXQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgd2hvbGUgZmluZ2VyIGhhcyBiZWVuIHBhcnNlZCwKLSAqIHNvIHRoYXQgaXQgY2FuIGRlY2lkZSB3aGF0IHRvIHNlbmQgdG8gdGhlIGlucHV0IGxheWVyLgotICovCi1zdGF0aWMgdm9pZCBtb3NhcnRfZmlsdGVyX2V2ZW50KHN0cnVjdCBtb3NhcnRfZGF0YSAqdGQsIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0KQotewotCXRkLT5maXJzdCA9ICF0ZC0+Zmlyc3Q7IC8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLwotCi0JaWYgKCF0ZC0+dmFsaWQpIHsKLQkJLyoKLQkJICogdG91Y2hzY3JlZW4gZW11bGF0aW9uOiBpZiBubyBmaW5nZXIgaW4gdGhpcyBmcmFtZSBpcyB2YWxpZAotCQkgKiBhbmQgdGhlcmUgcHJldmlvdXNseSB3YXMgZmluZ2VyIGFjdGl2aXR5LCB0aGlzIGlzIGEgcmVsZWFzZQotCQkgKi8gCi0JCWlmICghdGQtPmZpcnN0ICYmICF0ZC0+YWN0aXZpdHlfbm93ICYmIHRkLT5hY3Rpdml0eSkgewotCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0tFWSwgQlROX1RPVUNILCAwKTsKLQkJCXRkLT5hY3Rpdml0eSA9IGZhbHNlOwotCQl9Ci0JCXJldHVybjsKLQl9Ci0KLQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfVFJBQ0tJTkdfSUQsIHRkLT5pZCk7Ci0JaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1gsIHRkLT54KTsKLQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWSwgdGQtPnkpOwotCi0JaW5wdXRfbXRfc3luYyhpbnB1dCk7Ci0JdGQtPnZhbGlkID0gZmFsc2U7Ci0KLQkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb246IGlmIGZpcnN0IGFjdGl2ZSBmaW5nZXIgaW4gdGhpcyBmcmFtZS4uLiAqLwotCWlmICghdGQtPmFjdGl2aXR5X25vdykgewotCQkvKiBpZiB0aGVyZSB3YXMgbm8gcHJldmlvdXMgYWN0aXZpdHksIGVtaXQgdG91Y2ggZXZlbnQgKi8KLQkJaWYgKCF0ZC0+YWN0aXZpdHkpIHsKLQkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9LRVksIEJUTl9UT1VDSCwgMSk7Ci0JCQl0ZC0+YWN0aXZpdHkgPSB0cnVlOwotCQl9Ci0JCXRkLT5hY3Rpdml0eV9ub3cgPSB0cnVlOwotCQkvKiBhbmQgaW4gYW55IGNhc2UgdGhpcyBpcyBvdXIgcHJlZmVycmVkIGZpbmdlciAqLwotCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfWCwgdGQtPngpOwotCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfWSwgdGQtPnkpOwotCX0KLX0KLQotCi1zdGF0aWMgaW50IG1vc2FydF9ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwKLQkJCQlzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUpCi17Ci0Jc3RydWN0IG1vc2FydF9kYXRhICp0ZCA9IGhpZF9nZXRfZHJ2ZGF0YShoaWQpOwotCi0JaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0lOUFVUKSB7Ci0JCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gZmllbGQtPmhpZGlucHV0LT5pbnB1dDsKLQkJc3dpdGNoICh1c2FnZS0+aGlkKSB7Ci0JCWNhc2UgSElEX0RHX0lOUkFOR0U6Ci0JCQl0ZC0+dmFsaWQgPSAhIXZhbHVlOwotCQkJYnJlYWs7Ci0JCWNhc2UgSElEX0dEX1g6Ci0JCQl0ZC0+eCA9IHZhbHVlOwotCQkJYnJlYWs7Ci0JCWNhc2UgSElEX0dEX1k6Ci0JCQl0ZC0+eSA9IHZhbHVlOwotCQkJbW9zYXJ0X2ZpbHRlcl9ldmVudCh0ZCwgaW5wdXQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSElEX0RHX0NPTlRBQ1RJRDoKLQkJCXRkLT5pZCA9IHZhbHVlOwotCQkJYnJlYWs7Ci0JCWNhc2UgSElEX0RHX0NPTlRBQ1RDT1VOVDoKLQkJCS8qIHRvdWNoIGVtdWxhdGlvbjogdGhpcyBpcyB0aGUgbGFzdCBmaWVsZCBpbiBhIGZyYW1lICovCi0JCQl0ZC0+Zmlyc3QgPSBmYWxzZTsKLQkJCXRkLT5hY3Rpdml0eV9ub3cgPSBmYWxzZTsKLQkJCWJyZWFrOwotCQljYXNlIEhJRF9ER19DT05GSURFTkNFOgotCQljYXNlIEhJRF9ER19USVBTV0lUQ0g6Ci0JCQkvKiBhdm9pZCBpbnRlcmZlcmVuY2UgZnJvbSBnZW5lcmljIGhpZGlucHV0IGhhbmRsaW5nICovCi0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJLyogZmFsbGJhY2sgdG8gdGhlIGdlbmVyaWMgaGlkaW5wdXQgaGFuZGxpbmcgKi8KLQkJCXJldHVybiAwOwotCQl9Ci0JfQotCi0JLyogd2UgaGF2ZSBoYW5kbGVkIHRoZSBoaWRpbnB1dCBwYXJ0LCBub3cgcmVtYWlucyBoaWRkZXYgKi8KLQlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSElEREVWICYmIGhpZC0+aGlkZGV2X2hpZF9ldmVudCkKLQkJaGlkLT5oaWRkZXZfaGlkX2V2ZW50KGhpZCwgZmllbGQsIHVzYWdlLCB2YWx1ZSk7Ci0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBtb3NhcnRfcHJvYmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBtb3NhcnRfZGF0YSAqdGQ7Ci0KLQotCXRkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1vc2FydF9kYXRhKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0ZCkgewotCQloaWRfZXJyKGhkZXYsICJjYW5ub3QgYWxsb2NhdGUgTW9zQXJ0IGRhdGFcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JdGQtPnZhbGlkID0gZmFsc2U7Ci0JdGQtPmFjdGl2aXR5ID0gZmFsc2U7Ci0JdGQtPmFjdGl2aXR5X25vdyA9IGZhbHNlOwotCXRkLT5maXJzdCA9IGZhbHNlOwotCWhpZF9zZXRfZHJ2ZGF0YShoZGV2LCB0ZCk7Ci0KLQkvKiBjdXJyZW50bHksIGl0J3MgYmV0dGVyIHRvIGhhdmUgb25lIGV2ZGV2IGRldmljZSBvbmx5ICovCi0jaWYgMAotCWhkZXYtPnF1aXJrcyB8PSBISURfUVVJUktfTVVMVElfSU5QVVQ7Ci0jZW5kaWYKLQotCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKLQlpZiAocmV0ID09IDApCi0JCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBISURfQ09OTkVDVF9ERUZBVUxUKTsKLQotCWlmIChyZXQgPT0gMCkgewotCQlzdHJ1Y3QgaGlkX3JlcG9ydF9lbnVtICpyZSA9IGhkZXYtPnJlcG9ydF9lbnVtCi0JCQkJCQkrIEhJRF9GRUFUVVJFX1JFUE9SVDsKLQkJc3RydWN0IGhpZF9yZXBvcnQgKnIgPSByZS0+cmVwb3J0X2lkX2hhc2hbN107Ci0KLQkJci0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHgwMjsKLQkJdXNiaGlkX3N1Ym1pdF9yZXBvcnQoaGRldiwgciwgVVNCX0RJUl9PVVQpOwotCX0gZWxzZSAKLQkJa2ZyZWUodGQpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBtb3NhcnRfcmVzZXRfcmVzdW1lKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQotewotCXN0cnVjdCBoaWRfcmVwb3J0X2VudW0gKnJlID0gaGRldi0+cmVwb3J0X2VudW0KLQkJCQkJCSsgSElEX0ZFQVRVUkVfUkVQT1JUOwotCXN0cnVjdCBoaWRfcmVwb3J0ICpyID0gcmUtPnJlcG9ydF9pZF9oYXNoWzddOwotCi0Jci0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHgwMjsKLQl1c2JoaWRfc3VibWl0X3JlcG9ydChoZGV2LCByLCBVU0JfRElSX09VVCk7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgbW9zYXJ0X3JlbW92ZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKLXsKLQloaWRfaHdfc3RvcChoZGV2KTsKLQlrZnJlZShoaWRfZ2V0X2RydmRhdGEoaGRldikpOwotCWhpZF9zZXRfZHJ2ZGF0YShoZGV2LCBOVUxMKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIG1vc2FydF9kZXZpY2VzW10gPSB7Ci0JeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FTVVMsIFVTQl9ERVZJQ0VfSURfQVNVU19UOTFNVCkgfSwKLQl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVNVUywgVVNCX0RFVklDRV9JRF9BU1VTVEVLX01VTFRJVE9VQ0hfWUZPKSB9LAotCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9UVVJCT1gsIFVTQl9ERVZJQ0VfSURfVFVSQk9YX1RPVUNIU0NSRUVOX01PU0FSVCkgfSwKLQl7IH0KLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgbW9zYXJ0X2RldmljZXMpOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGhpZF91c2FnZV9pZCBtb3NhcnRfZ3JhYmJlZF91c2FnZXNbXSA9IHsKLQl7IEhJRF9BTllfSUQsIEhJRF9BTllfSUQsIEhJRF9BTllfSUQgfSwKLQl7IEhJRF9BTllfSUQgLSAxLCBISURfQU5ZX0lEIC0gMSwgSElEX0FOWV9JRCAtIDF9Ci19OwotCi1zdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIgbW9zYXJ0X2RyaXZlciA9IHsKLQkubmFtZSA9ICJtb3NhcnQiLAotCS5pZF90YWJsZSA9IG1vc2FydF9kZXZpY2VzLAotCS5wcm9iZSA9IG1vc2FydF9wcm9iZSwKLQkucmVtb3ZlID0gbW9zYXJ0X3JlbW92ZSwKLQkuaW5wdXRfbWFwcGluZyA9IG1vc2FydF9pbnB1dF9tYXBwaW5nLAotCS5pbnB1dF9tYXBwZWQgPSBtb3NhcnRfaW5wdXRfbWFwcGVkLAotCS51c2FnZV90YWJsZSA9IG1vc2FydF9ncmFiYmVkX3VzYWdlcywKLQkuZXZlbnQgPSBtb3NhcnRfZXZlbnQsCi0jaWZkZWYgQ09ORklHX1BNCi0JLnJlc2V0X3Jlc3VtZSA9IG1vc2FydF9yZXNldF9yZXN1bWUsCi0jZW5kaWYKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IG1vc2FydF9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJm1vc2FydF9kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgbW9zYXJ0X2V4aXQodm9pZCkKLXsKLQloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJm1vc2FydF9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChtb3NhcnRfaW5pdCk7Ci1tb2R1bGVfZXhpdChtb3NhcnRfZXhpdCk7Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1tdWx0aXRvdWNoLmMgYi9kcml2ZXJzL2hpZC9oaWQtbXVsdGl0b3VjaC5jCmluZGV4IGVlMDFlNjUuLmVjZDRkMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1tdWx0aXRvdWNoLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLW11bHRpdG91Y2guYwpAQCAtMTEsNiArMTEsMTIgQEAKICAqICBDb3B5cmlnaHQgKGMpIDIwMTAgSGVucmlrIFJ5ZGJlcmcgPHJ5ZGJlcmdAZXVyb21haWwuc2U+CiAgKiAgQ29weXJpZ2h0IChjKSAyMDEwIENhbm9uaWNhbCwgTHRkLgogICoKKyAqICBUaGlzIGNvZGUgaXMgcGFydGx5IGJhc2VkIG9uIGhpZC0zbS1wY3QuYzoKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgU3RlcGhhbmUgQ2hhdHR5IDxjaGF0dHlAZW5hYy5mcj4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMTAgICAgICBIZW5yaWsgUnlkYmVyZyA8cnlkYmVyZ0BldXJvbWFpbC5zZT4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMTAgICAgICBDYW5vbmljYWwsIEx0ZC4KKyAqCiAgKi8KIAogLyoKQEAgLTQ0LDYgKzUwLDcgQEAKICNkZWZpbmUgTVRfUVVJUktfVkFMSURfSVNfSU5SQU5HRQkoMSA8PCA0KQogI2RlZmluZSBNVF9RVUlSS19WQUxJRF9JU19DT05GSURFTkNFCSgxIDw8IDUpCiAjZGVmaW5lIE1UX1FVSVJLX0VHQUxBWF9YWVpfRklYVVAJKDEgPDwgNikKKyNkZWZpbmUgTVRfUVVJUktfU0xPVF9JU19DT05UQUNUSURfTUlOVVNfT05FCSgxIDw8IDcpCiAKIHN0cnVjdCBtdF9zbG90IHsKIAlfX3MzMiB4LCB5LCBwLCB3LCBoOwpAQCAtNjAsMjQgKzY3LDM2IEBACiAJX19zOCBpbnB1dG1vZGU7CQkvKiBJbnB1dE1vZGUgSElEIGZlYXR1cmUsIC0xIGlmIG5vbi1leGlzdGVudCAqLwogCV9fdTggbnVtX3JlY2VpdmVkOwkvKiBob3cgbWFueSBjb250YWN0cyB3ZSByZWNlaXZlZCAqLwogCV9fdTggbnVtX2V4cGVjdGVkOwkvKiBleHBlY3RlZCBsYXN0IGNvbnRhY3QgaW5kZXggKi8KKwlfX3U4IG1heGNvbnRhY3RzOwogCWJvb2wgY3VydmFsaWQ7CQkvKiBpcyB0aGUgY3VycmVudCBjb250YWN0IHZhbGlkPyAqLwotCXN0cnVjdCBtdF9zbG90IHNsb3RzWzBdOwkvKiBmaXJzdCBzbG90ICovCisJc3RydWN0IG10X3Nsb3QgKnNsb3RzOwogfTsKIAogc3RydWN0IG10X2NsYXNzIHsKIAlfX3MzMiBuYW1lOwkvKiBNVF9DTFMgKi8KIAlfX3MzMiBxdWlya3M7CiAJX19zMzIgc25fbW92ZTsJLyogU2lnbmFsL25vaXNlIHJhdGlvIGZvciBtb3ZlIGV2ZW50cyAqLworCV9fczMyIHNuX3dpZHRoOwkvKiBTaWduYWwvbm9pc2UgcmF0aW8gZm9yIHdpZHRoIGV2ZW50cyAqLworCV9fczMyIHNuX2hlaWdodDsJLyogU2lnbmFsL25vaXNlIHJhdGlvIGZvciBoZWlnaHQgZXZlbnRzICovCiAJX19zMzIgc25fcHJlc3N1cmU7CS8qIFNpZ25hbC9ub2lzZSByYXRpbyBmb3IgcHJlc3N1cmUgZXZlbnRzICovCiAJX191OCBtYXhjb250YWN0czsKIH07CiAKIC8qIGNsYXNzZXMgb2YgZGV2aWNlIGJlaGF2aW9yICovCi0jZGVmaW5lIE1UX0NMU19ERUZBVUxUCQkJCTEKLSNkZWZpbmUgTVRfQ0xTX0RVQUxfSU5SQU5HRV9DT05UQUNUSUQJCTIKLSNkZWZpbmUgTVRfQ0xTX0RVQUxfSU5SQU5HRV9DT05UQUNUTlVNQkVSCTMKLSNkZWZpbmUgTVRfQ0xTX0NZUFJFU1MJCQkJNAotI2RlZmluZSBNVF9DTFNfRUdBTEFYCQkJCTUKKyNkZWZpbmUgTVRfQ0xTX0RFRkFVTFQJCQkJMHgwMDAxCisKKyNkZWZpbmUgTVRfQ0xTX0NPTkZJREVOQ0UJCQkweDAwMDIKKyNkZWZpbmUgTVRfQ0xTX0NPTkZJREVOQ0VfTUlOVVNfT05FCQkweDAwMDMKKyNkZWZpbmUgTVRfQ0xTX0RVQUxfSU5SQU5HRV9DT05UQUNUSUQJCTB4MDAwNAorI2RlZmluZSBNVF9DTFNfRFVBTF9JTlJBTkdFX0NPTlRBQ1ROVU1CRVIJMHgwMDA1CisjZGVmaW5lIE1UX0NMU19EVUFMX05TTVVfQ09OVEFDVElECQkweDAwMDYKKworLyogdmVuZG9yIHNwZWNpZmljIGNsYXNzZXMgKi8KKyNkZWZpbmUgTVRfQ0xTXzNNCQkJCTB4MDEwMQorI2RlZmluZSBNVF9DTFNfQ1lQUkVTUwkJCQkweDAxMDIKKyNkZWZpbmUgTVRfQ0xTX0VHQUxBWAkJCQkweDAxMDMKKworI2RlZmluZSBNVF9ERUZBVUxUX01BWENPTlRBQ1QJMTAKIAogLyoKICAqIHRoZXNlIGRldmljZS1kZXBlbmRlbnQgZnVuY3Rpb25zIGRldGVybWluZSB3aGF0IHNsb3QgY29ycmVzcG9uZHMKQEAgLTk1LDEyICsxMTQsMTIgQEAKIHN0YXRpYyBpbnQgZmluZF9zbG90X2Zyb21fY29udGFjdGlkKHN0cnVjdCBtdF9kZXZpY2UgKnRkKQogewogCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCB0ZC0+bXRjbGFzcy0+bWF4Y29udGFjdHM7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCB0ZC0+bWF4Y29udGFjdHM7ICsraSkgewogCQlpZiAodGQtPnNsb3RzW2ldLmNvbnRhY3RpZCA9PSB0ZC0+Y3VyZGF0YS5jb250YWN0aWQgJiYKIAkJCXRkLT5zbG90c1tpXS50b3VjaF9zdGF0ZSkKIAkJCXJldHVybiBpOwogCX0KLQlmb3IgKGkgPSAwOyBpIDwgdGQtPm10Y2xhc3MtPm1heGNvbnRhY3RzOyArK2kpIHsKKwlmb3IgKGkgPSAwOyBpIDwgdGQtPm1heGNvbnRhY3RzOyArK2kpIHsKIAkJaWYgKCF0ZC0+c2xvdHNbaV0uc2Vlbl9pbl90aGlzX2ZyYW1lICYmCiAJCQkhdGQtPnNsb3RzW2ldLnRvdWNoX3N0YXRlKQogCQkJcmV0dXJuIGk7CkBAIC0xMTMsOCArMTMyLDEyIEBACiAKIHN0cnVjdCBtdF9jbGFzcyBtdF9jbGFzc2VzW10gPSB7CiAJeyAubmFtZSA9IE1UX0NMU19ERUZBVUxULAotCQkucXVpcmtzID0gTVRfUVVJUktfTk9UX1NFRU5fTUVBTlNfVVAsCi0JCS5tYXhjb250YWN0cyA9IDEwIH0sCisJCS5xdWlya3MgPSBNVF9RVUlSS19OT1RfU0VFTl9NRUFOU19VUCB9LAorCXsgLm5hbWUgPSBNVF9DTFNfQ09ORklERU5DRSwKKwkJLnF1aXJrcyA9IE1UX1FVSVJLX1ZBTElEX0lTX0NPTkZJREVOQ0UgfSwKKwl7IC5uYW1lID0gTVRfQ0xTX0NPTkZJREVOQ0VfTUlOVVNfT05FLAorCQkucXVpcmtzID0gTVRfUVVJUktfVkFMSURfSVNfQ09ORklERU5DRSB8CisJCQlNVF9RVUlSS19TTE9UX0lTX0NPTlRBQ1RJRF9NSU5VU19PTkUgfSwKIAl7IC5uYW1lID0gTVRfQ0xTX0RVQUxfSU5SQU5HRV9DT05UQUNUSUQsCiAJCS5xdWlya3MgPSBNVF9RVUlSS19WQUxJRF9JU19JTlJBTkdFIHwKIAkJCU1UX1FVSVJLX1NMT1RfSVNfQ09OVEFDVElELApAQCAtMTIzLDExICsxNDYsMjQgQEAKIAkJLnF1aXJrcyA9IE1UX1FVSVJLX1ZBTElEX0lTX0lOUkFOR0UgfAogCQkJTVRfUVVJUktfU0xPVF9JU19DT05UQUNUTlVNQkVSLAogCQkubWF4Y29udGFjdHMgPSAyIH0sCisJeyAubmFtZSA9IE1UX0NMU19EVUFMX05TTVVfQ09OVEFDVElELAorCQkucXVpcmtzID0gTVRfUVVJUktfTk9UX1NFRU5fTUVBTlNfVVAgfAorCQkJTVRfUVVJUktfU0xPVF9JU19DT05UQUNUSUQsCisJCS5tYXhjb250YWN0cyA9IDIgfSwKKworCS8qCisJICogdmVuZG9yIHNwZWNpZmljIGNsYXNzZXMKKwkgKi8KKwl7IC5uYW1lID0gTVRfQ0xTXzNNLAorCQkucXVpcmtzID0gTVRfUVVJUktfVkFMSURfSVNfQ09ORklERU5DRSB8CisJCQlNVF9RVUlSS19TTE9UX0lTX0NPTlRBQ1RJRCwKKwkJLnNuX21vdmUgPSAyMDQ4LAorCQkuc25fd2lkdGggPSAxMjgsCisJCS5zbl9oZWlnaHQgPSAxMjggfSwKIAl7IC5uYW1lID0gTVRfQ0xTX0NZUFJFU1MsCiAJCS5xdWlya3MgPSBNVF9RVUlSS19OT1RfU0VFTl9NRUFOU19VUCB8CiAJCQlNVF9RVUlSS19DWVBSRVNTLAogCQkubWF4Y29udGFjdHMgPSAxMCB9LAotCiAJeyAubmFtZSA9IE1UX0NMU19FR0FMQVgsCiAJCS5xdWlya3MgPSAgTVRfUVVJUktfU0xPVF9JU19DT05UQUNUSUQgfAogCQkJTVRfUVVJUktfVkFMSURfSVNfSU5SQU5HRSB8CkBAIC0xMzYsMTUgKzE3MiwyNiBAQAogCQkuc25fbW92ZSA9IDQwOTYsCiAJCS5zbl9wcmVzc3VyZSA9IDMyLAogCX0sCisKIAl7IH0KIH07CiAKIHN0YXRpYyB2b2lkIG10X2ZlYXR1cmVfbWFwcGluZyhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwKIAkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlKQogewotCWlmICh1c2FnZS0+aGlkID09IEhJRF9ER19JTlBVVE1PREUpIHsKLQkJc3RydWN0IG10X2RldmljZSAqdGQgPSBoaWRfZ2V0X2RydmRhdGEoaGRldik7CisJc3RydWN0IG10X2RldmljZSAqdGQgPSBoaWRfZ2V0X2RydmRhdGEoaGRldik7CisKKwlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKKwljYXNlIEhJRF9ER19JTlBVVE1PREU6CiAJCXRkLT5pbnB1dG1vZGUgPSBmaWVsZC0+cmVwb3J0LT5pZDsKKwkJYnJlYWs7CisJY2FzZSBISURfREdfQ09OVEFDVE1BWDoKKwkJdGQtPm1heGNvbnRhY3RzID0gZmllbGQtPnZhbHVlWzBdOworCQlpZiAodGQtPm10Y2xhc3MtPm1heGNvbnRhY3RzKQorCQkJLyogY2hlY2sgaWYgdGhlIG1heGNvbnRhY3RzIGlzIGdpdmVuIGJ5IHRoZSBjbGFzcyAqLworCQkJdGQtPm1heGNvbnRhY3RzID0gdGQtPm10Y2xhc3MtPm1heGNvbnRhY3RzOworCisJCWJyZWFrOwogCX0KIH0KIApAQCAtMTc5LDYgKzIyNiw3IEBACiAJCQkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KIAkJCXNldF9hYnMoaGktPmlucHV0LCBBQlNfWCwgZmllbGQsIGNscy0+c25fbW92ZSk7CiAJCQl0ZC0+bGFzdF9zbG90X2ZpZWxkID0gdXNhZ2UtPmhpZDsKKwkJCXRkLT5sYXN0X2ZpZWxkX2luZGV4ID0gZmllbGQtPmluZGV4OwogCQkJcmV0dXJuIDE7CiAJCWNhc2UgSElEX0dEX1k6CiAJCQlpZiAocXVpcmtzICYgTVRfUVVJUktfRUdBTEFYX1hZWl9GSVhVUCkKQEAgLTE5MCw2ICsyMzgsNyBAQAogCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCiAJCQlzZXRfYWJzKGhpLT5pbnB1dCwgQUJTX1ksIGZpZWxkLCBjbHMtPnNuX21vdmUpOwogCQkJdGQtPmxhc3Rfc2xvdF9maWVsZCA9IHVzYWdlLT5oaWQ7CisJCQl0ZC0+bGFzdF9maWVsZF9pbmRleCA9IGZpZWxkLT5pbmRleDsKIAkJCXJldHVybiAxOwogCQl9CiAJCXJldHVybiAwOwpAQCAtMTk4LDMyICsyNDcsNDAgQEAKIAkJc3dpdGNoICh1c2FnZS0+aGlkKSB7CiAJCWNhc2UgSElEX0RHX0lOUkFOR0U6CiAJCQl0ZC0+bGFzdF9zbG90X2ZpZWxkID0gdXNhZ2UtPmhpZDsKKwkJCXRkLT5sYXN0X2ZpZWxkX2luZGV4ID0gZmllbGQtPmluZGV4OwogCQkJcmV0dXJuIDE7CiAJCWNhc2UgSElEX0RHX0NPTkZJREVOQ0U6CiAJCQl0ZC0+bGFzdF9zbG90X2ZpZWxkID0gdXNhZ2UtPmhpZDsKKwkJCXRkLT5sYXN0X2ZpZWxkX2luZGV4ID0gZmllbGQtPmluZGV4OwogCQkJcmV0dXJuIDE7CiAJCWNhc2UgSElEX0RHX1RJUFNXSVRDSDoKIAkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwgRVZfS0VZLCBCVE5fVE9VQ0gpOwogCQkJaW5wdXRfc2V0X2NhcGFiaWxpdHkoaGktPmlucHV0LCBFVl9LRVksIEJUTl9UT1VDSCk7CiAJCQl0ZC0+bGFzdF9zbG90X2ZpZWxkID0gdXNhZ2UtPmhpZDsKKwkJCXRkLT5sYXN0X2ZpZWxkX2luZGV4ID0gZmllbGQtPmluZGV4OwogCQkJcmV0dXJuIDE7CiAJCWNhc2UgSElEX0RHX0NPTlRBQ1RJRDoKLQkJCWlucHV0X210X2luaXRfc2xvdHMoaGktPmlucHV0LAotCQkJCQl0ZC0+bXRjbGFzcy0+bWF4Y29udGFjdHMpOworCQkJaW5wdXRfbXRfaW5pdF9zbG90cyhoaS0+aW5wdXQsIHRkLT5tYXhjb250YWN0cyk7CiAJCQl0ZC0+bGFzdF9zbG90X2ZpZWxkID0gdXNhZ2UtPmhpZDsKKwkJCXRkLT5sYXN0X2ZpZWxkX2luZGV4ID0gZmllbGQtPmluZGV4OwogCQkJcmV0dXJuIDE7CiAJCWNhc2UgSElEX0RHX1dJRFRIOgogCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAogCQkJCQlFVl9BQlMsIEFCU19NVF9UT1VDSF9NQUpPUik7CisJCQlzZXRfYWJzKGhpLT5pbnB1dCwgQUJTX01UX1RPVUNIX01BSk9SLCBmaWVsZCwKKwkJCQljbHMtPnNuX3dpZHRoKTsKIAkJCXRkLT5sYXN0X3Nsb3RfZmllbGQgPSB1c2FnZS0+aGlkOworCQkJdGQtPmxhc3RfZmllbGRfaW5kZXggPSBmaWVsZC0+aW5kZXg7CiAJCQlyZXR1cm4gMTsKIAkJY2FzZSBISURfREdfSEVJR0hUOgogCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAogCQkJCQlFVl9BQlMsIEFCU19NVF9UT1VDSF9NSU5PUik7Ci0JCQlmaWVsZC0+bG9naWNhbF9tYXhpbXVtID0gMTsKLQkJCWZpZWxkLT5sb2dpY2FsX21pbmltdW0gPSAwOwotCQkJc2V0X2FicyhoaS0+aW5wdXQsIEFCU19NVF9PUklFTlRBVElPTiwgZmllbGQsIDApOworCQkJc2V0X2FicyhoaS0+aW5wdXQsIEFCU19NVF9UT1VDSF9NSU5PUiwgZmllbGQsCisJCQkJY2xzLT5zbl9oZWlnaHQpOworCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaGktPmlucHV0LAorCQkJCQlBQlNfTVRfT1JJRU5UQVRJT04sIDAsIDEsIDAsIDApOwogCQkJdGQtPmxhc3Rfc2xvdF9maWVsZCA9IHVzYWdlLT5oaWQ7CisJCQl0ZC0+bGFzdF9maWVsZF9pbmRleCA9IGZpZWxkLT5pbmRleDsKIAkJCXJldHVybiAxOwogCQljYXNlIEhJRF9ER19USVBQUkVTU1VSRToKIAkJCWlmIChxdWlya3MgJiBNVF9RVUlSS19FR0FMQVhfWFlaX0ZJWFVQKQpAQCAtMjM2LDEzICsyOTMsMTUgQEAKIAkJCXNldF9hYnMoaGktPmlucHV0LCBBQlNfUFJFU1NVUkUsIGZpZWxkLAogCQkJCWNscy0+c25fcHJlc3N1cmUpOwogCQkJdGQtPmxhc3Rfc2xvdF9maWVsZCA9IHVzYWdlLT5oaWQ7CisJCQl0ZC0+bGFzdF9maWVsZF9pbmRleCA9IGZpZWxkLT5pbmRleDsKIAkJCXJldHVybiAxOwogCQljYXNlIEhJRF9ER19DT05UQUNUQ09VTlQ6Ci0JCQl0ZC0+bGFzdF9maWVsZF9pbmRleCA9IGZpZWxkLT5yZXBvcnQtPm1heGZpZWxkIC0gMTsKKwkJCXRkLT5sYXN0X2ZpZWxkX2luZGV4ID0gZmllbGQtPmluZGV4OwogCQkJcmV0dXJuIDE7CiAJCWNhc2UgSElEX0RHX0NPTlRBQ1RNQVg6CiAJCQkvKiB3ZSBkb24ndCBzZXQgdGQtPmxhc3Rfc2xvdF9maWVsZCBhcyBjb250YWN0Y291bnQgYW5kCiAJCQkgKiBjb250YWN0IG1heCBhcmUgZ2xvYmFsIHRvIHRoZSByZXBvcnQgKi8KKwkJCXRkLT5sYXN0X2ZpZWxkX2luZGV4ID0gZmllbGQtPmluZGV4OwogCQkJcmV0dXJuIC0xOwogCQl9CiAJCS8qIGxldCBoaWQtaW5wdXQgZGVjaWRlIGZvciB0aGUgb3RoZXJzICovCkBAIC0yNzksNiArMzM4LDkgQEAKIAlpZiAocXVpcmtzICYgTVRfUVVJUktfU0xPVF9JU19DT05UQUNUTlVNQkVSKQogCQlyZXR1cm4gdGQtPm51bV9yZWNlaXZlZDsKIAorCWlmIChxdWlya3MgJiBNVF9RVUlSS19TTE9UX0lTX0NPTlRBQ1RJRF9NSU5VU19PTkUpCisJCXJldHVybiB0ZC0+Y3VyZGF0YS5jb250YWN0aWQgLSAxOworCiAJcmV0dXJuIGZpbmRfc2xvdF9mcm9tX2NvbnRhY3RpZCh0ZCk7CiB9CiAKQEAgLTI5Miw3ICszNTQsNyBAQAogCWlmICh0ZC0+Y3VydmFsaWQpIHsKIAkJaW50IHNsb3RudW0gPSBtdF9jb21wdXRlX3Nsb3QodGQpOwogCi0JCWlmIChzbG90bnVtID49IDAgJiYgc2xvdG51bSA8IHRkLT5tdGNsYXNzLT5tYXhjb250YWN0cykKKwkJaWYgKHNsb3RudW0gPj0gMCAmJiBzbG90bnVtIDwgdGQtPm1heGNvbnRhY3RzKQogCQkJdGQtPnNsb3RzW3Nsb3RudW1dID0gdGQtPmN1cmRhdGE7CiAJfQogCXRkLT5udW1fcmVjZWl2ZWQrKzsKQEAgLTMwNyw3ICszNjksNyBAQAogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IHRkLT5tdGNsYXNzLT5tYXhjb250YWN0czsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IHRkLT5tYXhjb250YWN0czsgKytpKSB7CiAJCXN0cnVjdCBtdF9zbG90ICpzID0gJih0ZC0+c2xvdHNbaV0pOwogCQlpZiAoKHRkLT5tdGNsYXNzLT5xdWlya3MgJiBNVF9RVUlSS19OT1RfU0VFTl9NRUFOU19VUCkgJiYKIAkJCSFzLT5zZWVuX2luX3RoaXNfZnJhbWUpIHsKQEAgLTMxOCwxMSArMzgwLDE4IEBACiAJCWlucHV0X210X3JlcG9ydF9zbG90X3N0YXRlKGlucHV0LCBNVF9UT09MX0ZJTkdFUiwKIAkJCXMtPnRvdWNoX3N0YXRlKTsKIAkJaWYgKHMtPnRvdWNoX3N0YXRlKSB7CisJCQkvKiB0aGlzIGZpbmdlciBpcyBvbiB0aGUgc2NyZWVuICovCisJCQlpbnQgd2lkZSA9IChzLT53ID4gcy0+aCk7CisJCQkvKiBkaXZpZGVkIGJ5IHR3byB0byBtYXRjaCB2aXN1YWwgc2NhbGUgb2YgdG91Y2ggKi8KKwkJCWludCBtYWpvciA9IG1heChzLT53LCBzLT5oKSA+PiAxOworCQkJaW50IG1pbm9yID0gbWluKHMtPncsIHMtPmgpID4+IDE7CisKIAkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9YLCBzLT54KTsKIAkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9ZLCBzLT55KTsKKwkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9PUklFTlRBVElPTiwgd2lkZSk7CiAJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfUFJFU1NVUkUsIHMtPnApOwotCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1RPVUNIX01BSk9SLCBzLT53KTsKLQkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9UT1VDSF9NSU5PUiwgcy0+aCk7CisJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfVE9VQ0hfTUFKT1IsIG1ham9yKTsKKwkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9UT1VDSF9NSU5PUiwgbWlub3IpOwogCQl9CiAJCXMtPnNlZW5faW5fdGhpc19mcmFtZSA9IGZhbHNlOwogCkBAIC0zNDEsNyArNDEwLDcgQEAKIAlzdHJ1Y3QgbXRfZGV2aWNlICp0ZCA9IGhpZF9nZXRfZHJ2ZGF0YShoaWQpOwogCV9fczMyIHF1aXJrcyA9IHRkLT5tdGNsYXNzLT5xdWlya3M7CiAKLQlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpIHsKKwlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQgJiYgdGQtPnNsb3RzKSB7CiAJCXN3aXRjaCAodXNhZ2UtPmhpZCkgewogCQljYXNlIEhJRF9ER19JTlJBTkdFOgogCQkJaWYgKHF1aXJrcyAmIE1UX1FVSVJLX1ZBTElEX0lTX0lOUkFOR0UpCkBAIC0zOTAsOCArNDU5LDYgQEAKIAogCQlpZiAodXNhZ2UtPmhpZCA9PSB0ZC0+bGFzdF9zbG90X2ZpZWxkKSB7CiAJCQltdF9jb21wbGV0ZV9zbG90KHRkKTsKLQkJCWlmICghdGQtPmxhc3RfZmllbGRfaW5kZXgpCi0JCQkJbXRfZW1pdF9ldmVudCh0ZCwgZmllbGQtPmhpZGlucHV0LT5pbnB1dCk7CiAJCX0KIAogCQlpZiAoZmllbGQtPmluZGV4ID09IHRkLT5sYXN0X2ZpZWxkX2luZGV4CkBAIC00NDIsOSArNTA5LDcgQEAKIAkgKi8KIAloZGV2LT5xdWlya3MgfD0gSElEX1FVSVJLX05PX0lOUFVUX1NZTkM7CiAKLQl0ZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtdF9kZXZpY2UpICsKLQkJCQltdGNsYXNzLT5tYXhjb250YWN0cyAqIHNpemVvZihzdHJ1Y3QgbXRfc2xvdCksCi0JCQkJR0ZQX0tFUk5FTCk7CisJdGQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXRfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0ZCkgewogCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJjYW5ub3QgYWxsb2NhdGUgbXVsdGl0b3VjaCBkYXRhXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC00NjEsNiArNTI2LDE4IEBACiAJaWYgKHJldCkKIAkJZ290byBmYWlsOwogCisJaWYgKCF0ZC0+bWF4Y29udGFjdHMpCisJCXRkLT5tYXhjb250YWN0cyA9IE1UX0RFRkFVTFRfTUFYQ09OVEFDVDsKKworCXRkLT5zbG90cyA9IGt6YWxsb2ModGQtPm1heGNvbnRhY3RzICogc2l6ZW9mKHN0cnVjdCBtdF9zbG90KSwKKwkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIXRkLT5zbG90cykgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJjYW5ub3QgYWxsb2NhdGUgbXVsdGl0b3VjaCBzbG90c1xuIik7CisJCWhpZF9od19zdG9wKGhkZXYpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCiAJbXRfc2V0X2lucHV0X21vZGUoaGRldik7CiAKIAlyZXR1cm4gMDsKQEAgLTQ4MiwzNiArNTU5LDUxIEBACiB7CiAJc3RydWN0IG10X2RldmljZSAqdGQgPSBoaWRfZ2V0X2RydmRhdGEoaGRldik7CiAJaGlkX2h3X3N0b3AoaGRldik7CisJa2ZyZWUodGQtPnNsb3RzKTsKIAlrZnJlZSh0ZCk7CiAJaGlkX3NldF9kcnZkYXRhKGhkZXYsIE5VTEwpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgbXRfZGV2aWNlc1tdID0gewogCisJLyogM00gcGFuZWxzICovCisJeyAuZHJpdmVyX2RhdGEgPSBNVF9DTFNfM00sCisJCUhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfM00sCisJCQlVU0JfREVWSUNFX0lEXzNNMTk2OCkgfSwKKwl7IC5kcml2ZXJfZGF0YSA9IE1UX0NMU18zTSwKKwkJSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF8zTSwKKwkJCVVTQl9ERVZJQ0VfSURfM00yMjU2KSB9LAorCisJLyogQWN0aW9uU3RhciBwYW5lbHMgKi8KKwl7IC5kcml2ZXJfZGF0YSA9IE1UX0NMU19ERUZBVUxULAorCQlISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FDVElPTlNUQVIsCisJCQlVU0JfREVWSUNFX0lEX0FDVElPTlNUQVJfMTAxMSkgfSwKKworCS8qIENhbmRvIHBhbmVscyAqLworCXsgLmRyaXZlcl9kYXRhID0gTVRfQ0xTX0RVQUxfSU5SQU5HRV9DT05UQUNUTlVNQkVSLAorCQlISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NBTkRPLAorCQkJVVNCX0RFVklDRV9JRF9DQU5ET19NVUxUSV9UT1VDSCkgfSwKKwl7IC5kcml2ZXJfZGF0YSA9IE1UX0NMU19EVUFMX0lOUkFOR0VfQ09OVEFDVE5VTUJFUiwKKwkJSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DQU5ETywKKwkJCVVTQl9ERVZJQ0VfSURfQ0FORE9fTVVMVElfVE9VQ0hfMTBfMSkgfSwKKwl7IC5kcml2ZXJfZGF0YSA9IE1UX0NMU19EVUFMX0lOUkFOR0VfQ09OVEFDVE5VTUJFUiwKKwkJSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DQU5ETywKKwkJCVVTQl9ERVZJQ0VfSURfQ0FORE9fTVVMVElfVE9VQ0hfMTFfNikgfSwKKwl7IC5kcml2ZXJfZGF0YSA9IE1UX0NMU19EVUFMX0lOUkFOR0VfQ09OVEFDVE5VTUJFUiwKKwkJSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DQU5ETywKKwkJCVVTQl9ERVZJQ0VfSURfQ0FORE9fTVVMVElfVE9VQ0hfMTVfNikgfSwKKworCS8qIENWVG91Y2ggcGFuZWxzICovCisJeyAuZHJpdmVyX2RhdGEgPSBNVF9DTFNfREVGQVVMVCwKKwkJSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DVlRPVUNILAorCQkJVVNCX0RFVklDRV9JRF9DVlRPVUNIX1NDUkVFTikgfSwKKwogCS8qIEN5cHJlc3MgcGFuZWwgKi8KIAl7IC5kcml2ZXJfZGF0YSA9IE1UX0NMU19DWVBSRVNTLAogCQlISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NZUFJFU1MsCiAJCQlVU0JfREVWSUNFX0lEX0NZUFJFU1NfVFJVRVRPVUNIKSB9LAogCi0JLyogR2VuZXJhbFRvdWNoIHBhbmVsICovCi0JeyAuZHJpdmVyX2RhdGEgPSBNVF9DTFNfRFVBTF9JTlJBTkdFX0NPTlRBQ1ROVU1CRVIsCi0JCUhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR0VORVJBTF9UT1VDSCwKLQkJCVVTQl9ERVZJQ0VfSURfR0VORVJBTF9UT1VDSF9XSU43X1RXT0ZJTkdFUlMpIH0sCi0KLQkvKiBJUlRPVUNIIHBhbmVscyAqLwotCXsgLmRyaXZlcl9kYXRhID0gTVRfQ0xTX0RVQUxfSU5SQU5HRV9DT05UQUNUSUQsCi0JCUhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSVJUT1VDSFNZU1RFTVMsCi0JCQlVU0JfREVWSUNFX0lEX0lSVE9VQ0hfSU5GUkFSRURfVVNCKSB9LAotCi0JLyogUGl4Q2lyLWJhc2VkIHBhbmVscyAqLwotCXsgLmRyaXZlcl9kYXRhID0gTVRfQ0xTX0RVQUxfSU5SQU5HRV9DT05UQUNUSUQsCi0JCUhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSEFOVk9OLAotCQkJVVNCX0RFVklDRV9JRF9IQU5WT05fTVVMVElUT1VDSCkgfSwKLQl7IC5kcml2ZXJfZGF0YSA9IE1UX0NMU19EVUFMX0lOUkFOR0VfQ09OVEFDVElELAotCQlISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NBTkRPLAotCQkJVVNCX0RFVklDRV9JRF9DQU5ET19QSVhDSVJfTVVMVElfVE9VQ0gpIH0sCi0KLQkvKiBSZXNpc3RpdmUgZUdhbGF4IGRldmljZXMgKi8KKwkvKiBlR2FsYXggZGV2aWNlcyAocmVzaXN0aXZlKSAqLwogCXsgIC5kcml2ZXJfZGF0YSA9IE1UX0NMU19FR0FMQVgsCiAJCUhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfRFdBViwKIAkJCVVTQl9ERVZJQ0VfSURfRFdBVl9FR0FMQVhfTVVMVElUT1VDSCkgfSwKQEAgLTUxOSw3ICs2MTEsNyBAQAogCQlISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0RXQVYsCiAJCQlVU0JfREVWSUNFX0lEX0RXQVZfRUdBTEFYX01VTFRJVE9VQ0gzKSB9LAogCi0JLyogQ2FwYWNpdGl2ZSBlR2FsYXggZGV2aWNlcyAqLworCS8qIGVHYWxheCBkZXZpY2VzIChjYXBhY2l0aXZlKSAqLwogCXsgIC5kcml2ZXJfZGF0YSA9IE1UX0NMU19FR0FMQVgsCiAJCUhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfRFdBViwKIAkJCVVTQl9ERVZJQ0VfSURfRFdBVl9FR0FMQVhfTVVMVElUT1VDSDEpIH0sCkBAIC01MzAsNiArNjIyLDg0IEBACiAJCUhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfRFdBViwKIAkJCVVTQl9ERVZJQ0VfSURfRFdBVl9FR0FMQVhfTVVMVElUT1VDSDQpIH0sCiAKKwkvKiBFbG8gVG91Y2hTeXN0ZW1zIEludGVsbGlUb3VjaCBQbHVzIHBhbmVsICovCisJeyAuZHJpdmVyX2RhdGEgPSBNVF9DTFNfRFVBTF9OU01VX0NPTlRBQ1RJRCwKKwkJSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9FTE8sCisJCQlVU0JfREVWSUNFX0lEX0VMT19UUzI1MTUpIH0sCisKKwkvKiBHZW5lcmFsVG91Y2ggcGFuZWwgKi8KKwl7IC5kcml2ZXJfZGF0YSA9IE1UX0NMU19EVUFMX0lOUkFOR0VfQ09OVEFDVE5VTUJFUiwKKwkJSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HRU5FUkFMX1RPVUNILAorCQkJVVNCX0RFVklDRV9JRF9HRU5FUkFMX1RPVUNIX1dJTjdfVFdPRklOR0VSUykgfSwKKworCS8qIEdvb2RUb3VjaCBwYW5lbHMgKi8KKwl7IC5kcml2ZXJfZGF0YSA9IE1UX0NMU19ERUZBVUxULAorCQlISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dPT0RUT1VDSCwKKwkJCVVTQl9ERVZJQ0VfSURfR09PRFRPVUNIXzAwMGYpIH0sCisKKwkvKiBJbGl0ZWsgZHVhbCB0b3VjaCBwYW5lbCAqLworCXsgIC5kcml2ZXJfZGF0YSA9IE1UX0NMU19ERUZBVUxULAorCQlISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lMSVRFSywKKwkJCVVTQl9ERVZJQ0VfSURfSUxJVEVLX01VTFRJVE9VQ0gpIH0sCisKKwkvKiBJUlRPVUNIIHBhbmVscyAqLworCXsgLmRyaXZlcl9kYXRhID0gTVRfQ0xTX0RVQUxfSU5SQU5HRV9DT05UQUNUSUQsCisJCUhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSVJUT1VDSFNZU1RFTVMsCisJCQlVU0JfREVWSUNFX0lEX0lSVE9VQ0hfSU5GUkFSRURfVVNCKSB9LAorCisJLyogTHVtaW8gcGFuZWxzICovCisJeyAuZHJpdmVyX2RhdGEgPSBNVF9DTFNfQ09ORklERU5DRV9NSU5VU19PTkUsCisJCUhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTFVNSU8sCisJCQlVU0JfREVWSUNFX0lEX0NSWVNUQUxUT1VDSCkgfSwKKworCS8qIE1vc0FydCBwYW5lbHMgKi8KKwl7IC5kcml2ZXJfZGF0YSA9IE1UX0NMU19DT05GSURFTkNFX01JTlVTX09ORSwKKwkJSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BU1VTLAorCQkJVVNCX0RFVklDRV9JRF9BU1VTX1Q5MU1UKX0sCisJeyAuZHJpdmVyX2RhdGEgPSBNVF9DTFNfQ09ORklERU5DRV9NSU5VU19PTkUsCisJCUhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVNVUywKKwkJCVVTQl9ERVZJQ0VfSURfQVNVU1RFS19NVUxUSVRPVUNIX1lGTykgfSwKKwl7IC5kcml2ZXJfZGF0YSA9IE1UX0NMU19DT05GSURFTkNFX01JTlVTX09ORSwKKwkJSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9UVVJCT1gsCisJCQlVU0JfREVWSUNFX0lEX1RVUkJPWF9UT1VDSFNDUkVFTl9NT1NBUlQpIH0sCisKKwkvKiBQZW5Nb3VudCBwYW5lbHMgKi8KKwl7IC5kcml2ZXJfZGF0YSA9IE1UX0NMU19DT05GSURFTkNFLAorCQlISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1BFTk1PVU5ULAorCQkJVVNCX0RFVklDRV9JRF9QRU5NT1VOVF9QQ0kpIH0sCisKKwkvKiBQaXhDaXItYmFzZWQgcGFuZWxzICovCisJeyAuZHJpdmVyX2RhdGEgPSBNVF9DTFNfRFVBTF9JTlJBTkdFX0NPTlRBQ1RJRCwKKwkJSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9IQU5WT04sCisJCQlVU0JfREVWSUNFX0lEX0hBTlZPTl9NVUxUSVRPVUNIKSB9LAorCXsgLmRyaXZlcl9kYXRhID0gTVRfQ0xTX0RVQUxfSU5SQU5HRV9DT05UQUNUSUQsCisJCUhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQ0FORE8sCisJCQlVU0JfREVWSUNFX0lEX0NBTkRPX1BJWENJUl9NVUxUSV9UT1VDSCkgfSwKKworCS8qIFN0YW50dW0gcGFuZWxzICovCisJeyAuZHJpdmVyX2RhdGEgPSBNVF9DTFNfQ09ORklERU5DRSwKKwkJSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TVEFOVFVNLAorCQkJVVNCX0RFVklDRV9JRF9NVFApfSwKKwl7IC5kcml2ZXJfZGF0YSA9IE1UX0NMU19DT05GSURFTkNFLAorCQlISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NUQU5UVU0sCisJCQlVU0JfREVWSUNFX0lEX01UUF9TVE0pfSwKKwl7IC5kcml2ZXJfZGF0YSA9IE1UX0NMU19DT05GSURFTkNFLAorCQlISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NUQU5UVU0sCisJCQlVU0JfREVWSUNFX0lEX01UUF9TSVRST05JWCl9LAorCisJLyogVG91Y2ggSW50ZXJuYXRpb25hbCBwYW5lbHMgKi8KKwl7IC5kcml2ZXJfZGF0YSA9IE1UX0NMU19ERUZBVUxULAorCQlISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RPVUNIX0lOVEwsCisJCQlVU0JfREVWSUNFX0lEX1RPVUNIX0lOVExfTVVMVElfVE9VQ0gpIH0sCisKKwkvKiBVbml0ZWMgcGFuZWxzICovCisJeyAuZHJpdmVyX2RhdGEgPSBNVF9DTFNfREVGQVVMVCwKKwkJSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9VTklURUMsCisJCQlVU0JfREVWSUNFX0lEX1VOSVRFQ19VU0JfVE9VQ0hfMDcwOSkgfSwKKwl7IC5kcml2ZXJfZGF0YSA9IE1UX0NMU19ERUZBVUxULAorCQlISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1VOSVRFQywKKwkJCVVTQl9ERVZJQ0VfSURfVU5JVEVDX1VTQl9UT1VDSF8wQTE5KSB9LAorCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIG10X2RldmljZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXBpY29sY2QuYyBiL2RyaXZlcnMvaGlkL2hpZC1waWNvbGNkLmMKaW5kZXggYjJmNTZhMS4uOWQ4NzEwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXBpY29sY2QuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtcGljb2xjZC5jCkBAIC0xNTg1LDExICsxNTg1LDExIEBACiAJbWVtc2V0KHJhd19kYXRhLCAwLCBzaXplb2YocmF3X2RhdGEpKTsKIAlyYXdfZGF0YVswXSA9ICpvZmYgJiAweGZmOwogCXJhd19kYXRhWzFdID0gKCpvZmYgPj4gOCkgJiAweGZmOwotCXJhd19kYXRhWzJdID0gcyA8IDIwID8gcyA6IDIwOworCXJhd19kYXRhWzJdID0gbWluKChzaXplX3QpMjAsIHMpOwogCWlmICgqb2ZmICsgcmF3X2RhdGFbMl0gPiAweGZmKQogCQlyYXdfZGF0YVsyXSA9IDB4MTAwIC0gKm9mZjsKIAotCWlmIChjb3B5X2Zyb21fdXNlcihyYXdfZGF0YSszLCB1LCByYXdfZGF0YVsyXSkpCisJaWYgKGNvcHlfZnJvbV91c2VyKHJhd19kYXRhKzMsIHUsIG1pbigodTgpMjAsIHJhd19kYXRhWzJdKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCXJlc3AgPSBwaWNvbGNkX3NlbmRfYW5kX3dhaXQoZGF0YS0+aGRldiwgUkVQT1JUX0VFX1dSSVRFLCByYXdfZGF0YSwKIAkJCXNpemVvZihyYXdfZGF0YSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jIGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jCmluZGV4IDMzZWVjNzQuLjViNjQwYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmMKQEAgLTE2NywyOCArMTY3LDI4IEBACiB9CiAKIC8qIHJldHZhbCBpcyAwLTQgb24gc3VjY2VzcywgPCAwIG9uIGVycm9yICovCi1zdGF0aWMgaW50IGtvbmVwbHVzX2dldF9zdGFydHVwX3Byb2ZpbGUoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYpCitzdGF0aWMgaW50IGtvbmVwbHVzX2dldF9hY3R1YWxfcHJvZmlsZShzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldikKIHsKLQlzdHJ1Y3Qga29uZXBsdXNfc3RhcnR1cF9wcm9maWxlIGJ1ZjsKKwlzdHJ1Y3Qga29uZXBsdXNfYWN0dWFsX3Byb2ZpbGUgYnVmOwogCWludCByZXR2YWw7CiAKLQlyZXR2YWwgPSByb2NjYXRfY29tbW9uX3JlY2VpdmUodXNiX2RldiwgS09ORVBMVVNfVVNCX0NPTU1BTkRfU1RBUlRVUF9QUk9GSUxFLAotCQkJJmJ1Ziwgc2l6ZW9mKHN0cnVjdCBrb25lcGx1c19zdGFydHVwX3Byb2ZpbGUpKTsKKwlyZXR2YWwgPSByb2NjYXRfY29tbW9uX3JlY2VpdmUodXNiX2RldiwgS09ORVBMVVNfVVNCX0NPTU1BTkRfQUNUVUFMX1BST0ZJTEUsCisJCQkmYnVmLCBzaXplb2Yoc3RydWN0IGtvbmVwbHVzX2FjdHVhbF9wcm9maWxlKSk7CiAKLQlyZXR1cm4gcmV0dmFsID8gcmV0dmFsIDogYnVmLnN0YXJ0dXBfcHJvZmlsZTsKKwlyZXR1cm4gcmV0dmFsID8gcmV0dmFsIDogYnVmLmFjdHVhbF9wcm9maWxlOwogfQogCi1zdGF0aWMgaW50IGtvbmVwbHVzX3NldF9zdGFydHVwX3Byb2ZpbGUoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsCi0JCWludCBzdGFydHVwX3Byb2ZpbGUpCitzdGF0aWMgaW50IGtvbmVwbHVzX3NldF9hY3R1YWxfcHJvZmlsZShzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwKKwkJaW50IG5ld19wcm9maWxlKQogewotCXN0cnVjdCBrb25lcGx1c19zdGFydHVwX3Byb2ZpbGUgYnVmOworCXN0cnVjdCBrb25lcGx1c19hY3R1YWxfcHJvZmlsZSBidWY7CiAKLQlidWYuY29tbWFuZCA9IEtPTkVQTFVTX0NPTU1BTkRfU1RBUlRVUF9QUk9GSUxFOwotCWJ1Zi5zaXplID0gc2l6ZW9mKHN0cnVjdCBrb25lcGx1c19zdGFydHVwX3Byb2ZpbGUpOwotCWJ1Zi5zdGFydHVwX3Byb2ZpbGUgPSBzdGFydHVwX3Byb2ZpbGU7CisJYnVmLmNvbW1hbmQgPSBLT05FUExVU19DT01NQU5EX0FDVFVBTF9QUk9GSUxFOworCWJ1Zi5zaXplID0gc2l6ZW9mKHN0cnVjdCBrb25lcGx1c19hY3R1YWxfcHJvZmlsZSk7CisJYnVmLmFjdHVhbF9wcm9maWxlID0gbmV3X3Byb2ZpbGU7CiAKLQlyZXR1cm4ga29uZXBsdXNfc2VuZCh1c2JfZGV2LCBLT05FUExVU19VU0JfQ09NTUFORF9TVEFSVFVQX1BST0ZJTEUsCi0JCQkmYnVmLCBzaXplb2Yoc3RydWN0IGtvbmVwbHVzX3Byb2ZpbGVfYnV0dG9ucykpOworCXJldHVybiBrb25lcGx1c19zZW5kKHVzYl9kZXYsIEtPTkVQTFVTX1VTQl9DT01NQU5EX0FDVFVBTF9QUk9GSUxFLAorCQkJJmJ1Ziwgc2l6ZW9mKHN0cnVjdCBrb25lcGx1c19hY3R1YWxfcHJvZmlsZSkpOwogfQogCiBzdGF0aWMgc3NpemVfdCBrb25lcGx1c19zeXNmc19yZWFkKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGtvYmplY3QgKmtvYmosCkBAIC0zOTgsMjEgKzM5OCwyMiBAQAogCXJldHVybiBzaXplb2Yoc3RydWN0IGtvbmVwbHVzX3Byb2ZpbGVfYnV0dG9ucyk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGtvbmVwbHVzX3N5c2ZzX3Nob3dfc3RhcnR1cF9wcm9maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwKK3N0YXRpYyBzc2l6ZV90IGtvbmVwbHVzX3N5c2ZzX3Nob3dfYWN0dWFsX3Byb2ZpbGUoc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBrb25lcGx1c19kZXZpY2UgKmtvbmVwbHVzID0KIAkJCWhpZF9nZXRfZHJ2ZGF0YShkZXZfZ2V0X2RydmRhdGEoZGV2LT5wYXJlbnQtPnBhcmVudCkpOwotCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBrb25lcGx1cy0+c3RhcnR1cF9wcm9maWxlKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwga29uZXBsdXMtPmFjdHVhbF9wcm9maWxlKTsKIH0KIAotc3RhdGljIHNzaXplX3Qga29uZXBsdXNfc3lzZnNfc2V0X3N0YXJ0dXBfcHJvZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCitzdGF0aWMgc3NpemVfdCBrb25lcGx1c19zeXNmc19zZXRfYWN0dWFsX3Byb2ZpbGUoc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciBjb25zdCAqYnVmLCBzaXplX3Qgc2l6ZSkKIHsKIAlzdHJ1Y3Qga29uZXBsdXNfZGV2aWNlICprb25lcGx1czsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldjsKIAl1bnNpZ25lZCBsb25nIHByb2ZpbGU7CiAJaW50IHJldHZhbDsKKwlzdHJ1Y3Qga29uZXBsdXNfcm9jY2F0X3JlcG9ydCByb2NjYXRfcmVwb3J0OwogCiAJZGV2ID0gZGV2LT5wYXJlbnQtPnBhcmVudDsKIAlrb25lcGx1cyA9IGhpZF9nZXRfZHJ2ZGF0YShkZXZfZ2V0X2RydmRhdGEoZGV2KSk7CkBAIC00MjMsMjIgKzQyNCwyNyBAQAogCQlyZXR1cm4gcmV0dmFsOwogCiAJbXV0ZXhfbG9jaygma29uZXBsdXMtPmtvbmVwbHVzX2xvY2spOwotCXJldHZhbCA9IGtvbmVwbHVzX3NldF9zdGFydHVwX3Byb2ZpbGUodXNiX2RldiwgcHJvZmlsZSk7Ci0JbXV0ZXhfdW5sb2NrKCZrb25lcGx1cy0+a29uZXBsdXNfbG9jayk7Ci0JaWYgKHJldHZhbCkKKworCXJldHZhbCA9IGtvbmVwbHVzX3NldF9hY3R1YWxfcHJvZmlsZSh1c2JfZGV2LCBwcm9maWxlKTsKKwlpZiAocmV0dmFsKSB7CisJCW11dGV4X3VubG9jaygma29uZXBsdXMtPmtvbmVwbHVzX2xvY2spOwogCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWtvbmVwbHVzLT5hY3R1YWxfcHJvZmlsZSA9IHByb2ZpbGU7CisKKwlyb2NjYXRfcmVwb3J0LnR5cGUgPSBLT05FUExVU19NT1VTRV9SRVBPUlRfQlVUVE9OX1RZUEVfUFJPRklMRTsKKwlyb2NjYXRfcmVwb3J0LmRhdGExID0gcHJvZmlsZSArIDE7CisJcm9jY2F0X3JlcG9ydC5kYXRhMiA9IDA7CisJcm9jY2F0X3JlcG9ydC5wcm9maWxlID0gcHJvZmlsZSArIDE7CisJcm9jY2F0X3JlcG9ydF9ldmVudChrb25lcGx1cy0+Y2hyZGV2X21pbm9yLAorCQkJKHVpbnQ4X3QgY29uc3QgKikmcm9jY2F0X3JlcG9ydCk7CisKKwltdXRleF91bmxvY2soJmtvbmVwbHVzLT5rb25lcGx1c19sb2NrKTsKIAogCXJldHVybiBzaXplOwogfQogCi1zdGF0aWMgc3NpemVfdCBrb25lcGx1c19zeXNmc19zaG93X2FjdHVhbF9wcm9maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3Qga29uZXBsdXNfZGV2aWNlICprb25lcGx1cyA9Ci0JCQloaWRfZ2V0X2RydmRhdGEoZGV2X2dldF9kcnZkYXRhKGRldi0+cGFyZW50LT5wYXJlbnQpKTsKLQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwga29uZXBsdXMtPmFjdHVhbF9wcm9maWxlKTsKLX0KLQogc3RhdGljIHNzaXplX3Qga29uZXBsdXNfc3lzZnNfc2hvd19maXJtd2FyZV92ZXJzaW9uKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTQ0OCwxMSArNDU0LDEyIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBrb25lcGx1c19hdHRyaWJ1dGVzW10gPSB7CisJX19BVFRSKGFjdHVhbF9wcm9maWxlLCAwNjYwLAorCQkJa29uZXBsdXNfc3lzZnNfc2hvd19hY3R1YWxfcHJvZmlsZSwKKwkJCWtvbmVwbHVzX3N5c2ZzX3NldF9hY3R1YWxfcHJvZmlsZSksCiAJX19BVFRSKHN0YXJ0dXBfcHJvZmlsZSwgMDY2MCwKLQkJCWtvbmVwbHVzX3N5c2ZzX3Nob3dfc3RhcnR1cF9wcm9maWxlLAotCQkJa29uZXBsdXNfc3lzZnNfc2V0X3N0YXJ0dXBfcHJvZmlsZSksCi0JX19BVFRSKGFjdHVhbF9wcm9maWxlLCAwNDQwLAotCQkJa29uZXBsdXNfc3lzZnNfc2hvd19hY3R1YWxfcHJvZmlsZSwgTlVMTCksCisJCQlrb25lcGx1c19zeXNmc19zaG93X2FjdHVhbF9wcm9maWxlLAorCQkJa29uZXBsdXNfc3lzZnNfc2V0X2FjdHVhbF9wcm9maWxlKSwKIAlfX0FUVFIoZmlybXdhcmVfdmVyc2lvbiwgMDQ0MCwKIAkJCWtvbmVwbHVzX3N5c2ZzX3Nob3dfZmlybXdhcmVfdmVyc2lvbiwgTlVMTCksCiAJX19BVFRSX05VTEwKQEAgLTU1NywxNSArNTY0LDEwIEBACiAJCXN0cnVjdCBrb25lcGx1c19kZXZpY2UgKmtvbmVwbHVzKQogewogCWludCByZXR2YWwsIGk7Ci0Jc3RhdGljIHVpbnQgd2FpdCA9IDEwMDsgLyogZGV2aWNlIHdpbGwgZnJlZXplIHdpdGgganVzdCA2MCAqLworCXN0YXRpYyB1aW50IHdhaXQgPSAyMDA7CiAKIAltdXRleF9pbml0KCZrb25lcGx1cy0+a29uZXBsdXNfbG9jayk7CiAKLQlrb25lcGx1cy0+c3RhcnR1cF9wcm9maWxlID0ga29uZXBsdXNfZ2V0X3N0YXJ0dXBfcHJvZmlsZSh1c2JfZGV2KTsKLQlpZiAoa29uZXBsdXMtPnN0YXJ0dXBfcHJvZmlsZSA8IDApCi0JCXJldHVybiBrb25lcGx1cy0+c3RhcnR1cF9wcm9maWxlOwotCi0JbXNsZWVwKHdhaXQpOwogCXJldHZhbCA9IGtvbmVwbHVzX2dldF9pbmZvKHVzYl9kZXYsICZrb25lcGx1cy0+aW5mbyk7CiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKQEAgLTU4NCw3ICs1ODYsMTEgQEAKIAkJCXJldHVybiByZXR2YWw7CiAJfQogCi0Ja29uZXBsdXNfcHJvZmlsZV9hY3RpdmF0ZWQoa29uZXBsdXMsIGtvbmVwbHVzLT5zdGFydHVwX3Byb2ZpbGUpOworCW1zbGVlcCh3YWl0KTsKKwlyZXR2YWwgPSBrb25lcGx1c19nZXRfYWN0dWFsX3Byb2ZpbGUodXNiX2Rldik7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisJa29uZXBsdXNfcHJvZmlsZV9hY3RpdmF0ZWQoa29uZXBsdXMsIHJldHZhbCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuaCBiL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuaAppbmRleCA1N2E1YzFhLi5jNTdhMzc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmgKKysrIGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5oCkBAIC00MCwxMCArNDAsMTAgQEAKIAlLT05FUExVU19DT05UUk9MX1JFUVVFU1RfU1RBVFVTX1dBSVQgPSAzLAogfTsKIAotc3RydWN0IGtvbmVwbHVzX3N0YXJ0dXBfcHJvZmlsZSB7Ci0JdWludDhfdCBjb21tYW5kOyAvKiBLT05FUExVU19DT01NQU5EX1NUQVJUVVBfUFJPRklMRSAqLworc3RydWN0IGtvbmVwbHVzX2FjdHVhbF9wcm9maWxlIHsKKwl1aW50OF90IGNvbW1hbmQ7IC8qIEtPTkVQTFVTX0NPTU1BTkRfQUNUVUFMX1BST0ZJTEUgKi8KIAl1aW50OF90IHNpemU7IC8qIGFsd2F5cyAzICovCi0JdWludDhfdCBzdGFydHVwX3Byb2ZpbGU7IC8qIFJhbmdlIDAtNCEgKi8KKwl1aW50OF90IGFjdHVhbF9wcm9maWxlOyAvKiBSYW5nZSAwLTQhICovCiB9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CiAKIHN0cnVjdCBrb25lcGx1c19wcm9maWxlX3NldHRpbmdzIHsKQEAgLTEzMiw3ICsxMzIsNyBAQAogCiBlbnVtIGtvbmVwbHVzX2NvbW1hbmRzIHsKIAlLT05FUExVU19DT01NQU5EX0NPTlRST0wgPSAweDQsCi0JS09ORVBMVVNfQ09NTUFORF9TVEFSVFVQX1BST0ZJTEUgPSAweDUsCisJS09ORVBMVVNfQ09NTUFORF9BQ1RVQUxfUFJPRklMRSA9IDB4NSwKIAlLT05FUExVU19DT01NQU5EX1BST0ZJTEVfU0VUVElOR1MgPSAweDYsCiAJS09ORVBMVVNfQ09NTUFORF9QUk9GSUxFX0JVVFRPTlMgPSAweDcsCiAJS09ORVBMVVNfQ09NTUFORF9NQUNSTyA9IDB4OCwKQEAgLTE0NSw3ICsxNDUsNyBAQAogCiBlbnVtIGtvbmVwbHVzX3VzYl9jb21tYW5kcyB7CiAJS09ORVBMVVNfVVNCX0NPTU1BTkRfQ09OVFJPTCA9IDB4MzA0LAotCUtPTkVQTFVTX1VTQl9DT01NQU5EX1NUQVJUVVBfUFJPRklMRSA9IDB4MzA1LAorCUtPTkVQTFVTX1VTQl9DT01NQU5EX0FDVFVBTF9QUk9GSUxFID0gMHgzMDUsCiAJS09ORVBMVVNfVVNCX0NPTU1BTkRfUFJPRklMRV9TRVRUSU5HUyA9IDB4MzA2LAogCUtPTkVQTFVTX1VTQl9DT01NQU5EX1BST0ZJTEVfQlVUVE9OUyA9IDB4MzA3LAogCUtPTkVQTFVTX1VTQl9DT01NQU5EX01BQ1JPID0gMHgzMDgsCkBAIC0yMTUsNyArMjE1LDYgQEAKIAogCXN0cnVjdCBtdXRleCBrb25lcGx1c19sb2NrOwogCi0JaW50IHN0YXJ0dXBfcHJvZmlsZTsKIAlzdHJ1Y3Qga29uZXBsdXNfaW5mbyBpbmZvOwogCXN0cnVjdCBrb25lcGx1c19wcm9maWxlX3NldHRpbmdzIHByb2ZpbGVfc2V0dGluZ3NbNV07CiAJc3RydWN0IGtvbmVwbHVzX3Byb2ZpbGVfYnV0dG9ucyBwcm9maWxlX2J1dHRvbnNbNV07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtc29ueS5jIGIvZHJpdmVycy9oaWQvaGlkLXNvbnkuYwppbmRleCA5MzgxOWEwLi45MzZjOTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtc29ueS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1zb255LmMKQEAgLTE3OCw2ICsxNzgsOCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIHNvbnlfZGV2aWNlc1tdID0gewogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TT05ZLCBVU0JfREVWSUNFX0lEX1NPTllfUFMzX0NPTlRST0xMRVIpLAogCQkuZHJpdmVyX2RhdGEgPSBTSVhBWElTX0NPTlRST0xMRVJfVVNCIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NPTlksIFVTQl9ERVZJQ0VfSURfU09OWV9OQVZJR0FUSU9OX0NPTlRST0xMRVIpLAorCQkuZHJpdmVyX2RhdGEgPSBTSVhBWElTX0NPTlRST0xMRVJfVVNCIH0sCiAJeyBISURfQkxVRVRPT1RIX0RFVklDRShVU0JfVkVORE9SX0lEX1NPTlksIFVTQl9ERVZJQ0VfSURfU09OWV9QUzNfQ09OVFJPTExFUiksCiAJCS5kcml2ZXJfZGF0YSA9IFNJWEFYSVNfQ09OVFJPTExFUl9CVCB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TT05ZLCBVU0JfREVWSUNFX0lEX1NPTllfVkFJT19WR1hfTU9VU0UpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXN0YW50dW0uYyBiL2RyaXZlcnMvaGlkL2hpZC1zdGFudHVtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyYmUxZDEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXN0YW50dW0uYworKysgL2Rldi9udWxsCkBAIC0xLDI4NiArMCwwIEBACi0vKgotICogIEhJRCBkcml2ZXIgZm9yIFN0YW50dW0gbXVsdGl0b3VjaCBwYW5lbHMKLSAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDA5IFN0ZXBoYW5lIENoYXR0eSA8Y2hhdHR5QGVuYWMuZnI+Ci0gKgotICovCi0KLS8qCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLSAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9oaWQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0KLU1PRFVMRV9BVVRIT1IoIlN0ZXBoYW5lIENoYXR0eSA8Y2hhdHR5QGVuYWMuZnI+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlN0YW50dW0gSElEIG11bHRpdG91Y2ggcGFuZWxzIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLSNpbmNsdWRlICJoaWQtaWRzLmgiCi0KLXN0cnVjdCBzdGFudHVtX2RhdGEgewotCV9fczMyIHgsIHksIHosIHcsIGg7CS8qIHgsIHksIHByZXNzdXJlLCB3aWR0aCwgaGVpZ2h0ICovCi0JX191MTYgaWQ7CQkvKiB0b3VjaCBpZCAqLwotCWJvb2wgdmFsaWQ7CQkvKiB2YWxpZCBmaW5nZXIgZGF0YSwgb3IganVzdCBwbGFjZWhvbGRlcj8gKi8KLQlib29sIGZpcnN0OwkJLyogZmlyc3QgZmluZ2VyIGluIHRoZSBISUQgcGFja2V0PyAqLwotCWJvb2wgYWN0aXZpdHk7CQkvKiBhdCBsZWFzdCBvbmUgYWN0aXZlIGZpbmdlciBzbyBmYXI/ICovCi19OwotCi1zdGF0aWMgaW50IHN0YW50dW1faW5wdXRfbWFwcGluZyhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9pbnB1dCAqaGksCi0JCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKLQkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCi17Ci0Jc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpIHsKLQotCWNhc2UgSElEX1VQX0dFTkRFU0s6Ci0JCXN3aXRjaCAodXNhZ2UtPmhpZCkgewotCQljYXNlIEhJRF9HRF9YOgotCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAotCQkJCQlFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9YKTsKLQkJCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLwotCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaGktPmlucHV0LCBBQlNfWCwKLQkJCQkJCWZpZWxkLT5sb2dpY2FsX21pbmltdW0sCi0JCQkJCQlmaWVsZC0+bG9naWNhbF9tYXhpbXVtLCAwLCAwKTsKLQkJCXJldHVybiAxOwotCQljYXNlIEhJRF9HRF9ZOgotCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAotCQkJCQlFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9ZKTsKLQkJCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLwotCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaGktPmlucHV0LCBBQlNfWSwKLQkJCQkJCWZpZWxkLT5sb2dpY2FsX21pbmltdW0sCi0JCQkJCQlmaWVsZC0+bG9naWNhbF9tYXhpbXVtLCAwLCAwKTsKLQkJCXJldHVybiAxOwotCQl9Ci0JCXJldHVybiAwOwotCi0JY2FzZSBISURfVVBfRElHSVRJWkVSOgotCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKLQkJY2FzZSBISURfREdfSU5SQU5HRToKLQkJY2FzZSBISURfREdfQ09ORklERU5DRToKLQkJY2FzZSBISURfREdfSU5QVVRNT0RFOgotCQljYXNlIEhJRF9ER19ERVZJQ0VJTkRFWDoKLQkJY2FzZSBISURfREdfQ09OVEFDVENPVU5UOgotCQljYXNlIEhJRF9ER19DT05UQUNUTUFYOgotCQkJcmV0dXJuIC0xOwotCi0JCWNhc2UgSElEX0RHX1RJUFNXSVRDSDoKLQkJCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLwotCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LCBFVl9LRVksIEJUTl9UT1VDSCk7Ci0JCQlyZXR1cm4gMTsKLQotCQljYXNlIEhJRF9ER19XSURUSDoKLQkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKLQkJCQkJRVZfQUJTLCBBQlNfTVRfVE9VQ0hfTUFKT1IpOwotCQkJcmV0dXJuIDE7Ci0JCWNhc2UgSElEX0RHX0hFSUdIVDoKLQkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKLQkJCQkJRVZfQUJTLCBBQlNfTVRfVE9VQ0hfTUlOT1IpOwotCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaGktPmlucHV0LCBBQlNfTVRfT1JJRU5UQVRJT04sCi0JCQkJCTEsIDEsIDAsIDApOwotCQkJcmV0dXJuIDE7Ci0JCWNhc2UgSElEX0RHX1RJUFBSRVNTVVJFOgotCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAotCQkJCQlFVl9BQlMsIEFCU19NVF9QUkVTU1VSRSk7Ci0JCQlyZXR1cm4gMTsKLQotCQljYXNlIEhJRF9ER19DT05UQUNUSUQ6Ci0JCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCi0JCQkJCUVWX0FCUywgQUJTX01UX1RSQUNLSU5HX0lEKTsKLQkJCXJldHVybiAxOwotCi0JCX0KLQkJcmV0dXJuIDA7Ci0KLQljYXNlIDB4ZmYwMDAwMDA6Ci0JCS8qIG5vIGlucHV0LW9yaWVudGVkIG1lYW5pbmcgKi8KLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHN0YW50dW1faW5wdXRfbWFwcGVkKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKLQkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAotCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKLXsKLQlpZiAodXNhZ2UtPnR5cGUgPT0gRVZfS0VZIHx8IHVzYWdlLT50eXBlID09IEVWX0FCUykKLQkJY2xlYXJfYml0KHVzYWdlLT5jb2RlLCAqYml0KTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIHdob2xlIGZpbmdlciBoYXMgYmVlbiBwYXJzZWQsCi0gKiBzbyB0aGF0IGl0IGNhbiBkZWNpZGUgd2hhdCB0byBzZW5kIHRvIHRoZSBpbnB1dCBsYXllci4KLSAqLwotc3RhdGljIHZvaWQgc3RhbnR1bV9maWx0ZXJfZXZlbnQoc3RydWN0IHN0YW50dW1fZGF0YSAqc2QsCi0JCQkJCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0KQotewotCWJvb2wgd2lkZTsKLQotCWlmICghc2QtPnZhbGlkKSB7Ci0JCS8qCi0JCSAqIHRvdWNoc2NyZWVuIGVtdWxhdGlvbjogaWYgdGhlIGZpcnN0IGZpbmdlciBpcyBub3QgdmFsaWQgYW5kCi0JCSAqIHRoZXJlIHByZXZpb3VzbHkgd2FzIGZpbmdlciBhY3Rpdml0eSwgdGhpcyBpcyBhIHJlbGVhc2UKLQkJICovCi0JCWlmIChzZC0+Zmlyc3QgJiYgc2QtPmFjdGl2aXR5KSB7Ci0JCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfS0VZLCBCVE5fVE9VQ0gsIDApOwotCQkJc2QtPmFjdGl2aXR5ID0gZmFsc2U7Ci0JCX0KLQkJcmV0dXJuOwotCX0KLQotCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9UUkFDS0lOR19JRCwgc2QtPmlkKTsKLQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWCwgc2QtPngpOwotCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9ZLCBzZC0+eSk7Ci0KLQl3aWRlID0gKHNkLT53ID4gc2QtPmgpOwotCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9PUklFTlRBVElPTiwgd2lkZSk7Ci0JaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1RPVUNIX01BSk9SLCB3aWRlID8gc2QtPncgOiBzZC0+aCk7Ci0JaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1RPVUNIX01JTk9SLCB3aWRlID8gc2QtPmggOiBzZC0+dyk7Ci0KLQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfUFJFU1NVUkUsIHNkLT56KTsKLQotCWlucHV0X210X3N5bmMoaW5wdXQpOwotCXNkLT52YWxpZCA9IGZhbHNlOwotCi0JLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCi0JaWYgKHNkLT5maXJzdCkgewotCQlpZiAoIXNkLT5hY3Rpdml0eSkgewotCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0tFWSwgQlROX1RPVUNILCAxKTsKLQkJCXNkLT5hY3Rpdml0eSA9IHRydWU7Ci0JCX0KLQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1gsIHNkLT54KTsKLQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1ksIHNkLT55KTsKLQl9Ci0Jc2QtPmZpcnN0ID0gZmFsc2U7Ci19Ci0KLQotc3RhdGljIGludCBzdGFudHVtX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLAotCQkJCXN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBfX3MzMiB2YWx1ZSkKLXsKLQlzdHJ1Y3Qgc3RhbnR1bV9kYXRhICpzZCA9IGhpZF9nZXRfZHJ2ZGF0YShoaWQpOwotCi0JaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0lOUFVUKSB7Ci0JCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gZmllbGQtPmhpZGlucHV0LT5pbnB1dDsKLQotCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKLQkJY2FzZSBISURfREdfSU5SQU5HRToKLQkJCS8qIHRoaXMgaXMgdGhlIGxhc3QgZmllbGQgaW4gYSBmaW5nZXIgKi8KLQkJCXN0YW50dW1fZmlsdGVyX2V2ZW50KHNkLCBpbnB1dCk7Ci0JCQlicmVhazsKLQkJY2FzZSBISURfREdfV0lEVEg6Ci0JCQlzZC0+dyA9IHZhbHVlOwotCQkJYnJlYWs7Ci0JCWNhc2UgSElEX0RHX0hFSUdIVDoKLQkJCXNkLT5oID0gdmFsdWU7Ci0JCQlicmVhazsKLQkJY2FzZSBISURfR0RfWDoKLQkJCXNkLT54ID0gdmFsdWU7Ci0JCQlicmVhazsKLQkJY2FzZSBISURfR0RfWToKLQkJCXNkLT55ID0gdmFsdWU7Ci0JCQlicmVhazsKLQkJY2FzZSBISURfREdfVElQUFJFU1NVUkU6Ci0JCQlzZC0+eiA9IHZhbHVlOwotCQkJYnJlYWs7Ci0JCWNhc2UgSElEX0RHX0NPTlRBQ1RJRDoKLQkJCXNkLT5pZCA9IHZhbHVlOwotCQkJYnJlYWs7Ci0JCWNhc2UgSElEX0RHX0NPTkZJREVOQ0U6Ci0JCQlzZC0+dmFsaWQgPSAhIXZhbHVlOwotCQkJYnJlYWs7Ci0JCWNhc2UgMHhmZjAwMDAwMjoKLQkJCS8qIHRoaXMgY29tZXMgb25seSBiZWZvcmUgdGhlIGZpcnN0IGZpbmdlciAqLwotCQkJc2QtPmZpcnN0ID0gdHJ1ZTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQkvKiBpZ25vcmUgdGhlIG90aGVycyAqLwotCQkJcmV0dXJuIDE7Ci0JCX0KLQl9Ci0KLQkvKiB3ZSBoYXZlIGhhbmRsZWQgdGhlIGhpZGlucHV0IHBhcnQsIG5vdyByZW1haW5zIGhpZGRldiAqLwotCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURERVYgJiYgaGlkLT5oaWRkZXZfaGlkX2V2ZW50KQotCQloaWQtPmhpZGRldl9oaWRfZXZlbnQoaGlkLCBmaWVsZCwgdXNhZ2UsIHZhbHVlKTsKLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IHN0YW50dW1fcHJvYmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsCi0JCQkJY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQotewotCWludCByZXQ7Ci0Jc3RydWN0IHN0YW50dW1fZGF0YSAqc2Q7Ci0KLQlzZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdGFudHVtX2RhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNkKSB7Ci0JCWhpZF9lcnIoaGRldiwgImNhbm5vdCBhbGxvY2F0ZSBTdGFudHVtIGRhdGFcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0Jc2QtPnZhbGlkID0gZmFsc2U7Ci0Jc2QtPmZpcnN0ID0gZmFsc2U7Ci0Jc2QtPmFjdGl2aXR5ID0gZmFsc2U7Ci0JaGlkX3NldF9kcnZkYXRhKGhkZXYsIHNkKTsKLQotCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKLQlpZiAoIXJldCkKLQkJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQpOwotCi0JaWYgKHJldCkKLQkJa2ZyZWUoc2QpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgc3RhbnR1bV9yZW1vdmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCi17Ci0JaGlkX2h3X3N0b3AoaGRldik7Ci0Ja2ZyZWUoaGlkX2dldF9kcnZkYXRhKGhkZXYpKTsKLQloaWRfc2V0X2RydmRhdGEoaGRldiwgTlVMTCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBzdGFudHVtX2RldmljZXNbXSA9IHsKLQl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfU1RBTlRVTSwgVVNCX0RFVklDRV9JRF9NVFApIH0sCi0JeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NUQU5UVU1fU1RNLCBVU0JfREVWSUNFX0lEX01UUF9TVE0pIH0sCi0JeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NUQU5UVU1fU0lUUk9OSVgsIFVTQl9ERVZJQ0VfSURfTVRQX1NJVFJPTklYKSB9LAotCXsgfQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBzdGFudHVtX2RldmljZXMpOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGhpZF91c2FnZV9pZCBzdGFudHVtX2dyYWJiZWRfdXNhZ2VzW10gPSB7Ci0JeyBISURfQU5ZX0lELCBISURfQU5ZX0lELCBISURfQU5ZX0lEIH0sCi0JeyBISURfQU5ZX0lEIC0gMSwgSElEX0FOWV9JRCAtIDEsIEhJRF9BTllfSUQgLSAxfQotfTsKLQotc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIHN0YW50dW1fZHJpdmVyID0gewotCS5uYW1lID0gInN0YW50dW0iLAotCS5pZF90YWJsZSA9IHN0YW50dW1fZGV2aWNlcywKLQkucHJvYmUgPSBzdGFudHVtX3Byb2JlLAotCS5yZW1vdmUgPSBzdGFudHVtX3JlbW92ZSwKLQkuaW5wdXRfbWFwcGluZyA9IHN0YW50dW1faW5wdXRfbWFwcGluZywKLQkuaW5wdXRfbWFwcGVkID0gc3RhbnR1bV9pbnB1dF9tYXBwZWQsCi0JLnVzYWdlX3RhYmxlID0gc3RhbnR1bV9ncmFiYmVkX3VzYWdlcywKLQkuZXZlbnQgPSBzdGFudHVtX2V2ZW50LAotfTsKLQotc3RhdGljIGludCBfX2luaXQgc3RhbnR1bV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJnN0YW50dW1fZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHN0YW50dW1fZXhpdCh2b2lkKQotewotCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmc3RhbnR1bV9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChzdGFudHVtX2luaXQpOwotbW9kdWxlX2V4aXQoc3RhbnR1bV9leGl0KTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkcmF3LmMgYi9kcml2ZXJzL2hpZC9oaWRyYXcuYwppbmRleCA1NDQwOWNiLi5jNzk1NzhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWRyYXcuYworKysgYi9kcml2ZXJzL2hpZC9oaWRyYXcuYwpAQCAtMTAxLDggKzEwMSw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyogdGhlIGZpcnN0IGJ5dGUgaXMgZXhwZWN0ZWQgdG8gYmUgYSByZXBvcnQgbnVtYmVyICovCi0vKiBUaGlzIGZ1bmN0aW9uIGlzIHRvIGJlIGNhbGxlZCB3aXRoIHRoZSBtaW5vcnNfbG9jayBtdXRleCBoZWxkICovCisvKiBUaGUgZmlyc3QgYnl0ZSBpcyBleHBlY3RlZCB0byBiZSBhIHJlcG9ydCBudW1iZXIuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRvIGJlIGNhbGxlZCB3aXRoIHRoZSBtaW5vcnNfbG9jayBtdXRleCBoZWxkICovCiBzdGF0aWMgc3NpemVfdCBoaWRyYXdfc2VuZF9yZXBvcnQoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgY2hhciByZXBvcnRfdHlwZSkKIHsKIAl1bnNpZ25lZCBpbnQgbWlub3IgPSBpbWlub3IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CkBAIC0xNjYsMTEgKzE2NiwxMSBAQAogCiAKIC8qIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYSBHZXRfUmVwb3J0IHRyYW5zZmVyIG92ZXIgdGhlIGNvbnRyb2wgZW5kcG9pbnQKLSAgIHBlciBzZWN0aW9uIDcuMi4xIG9mIHRoZSBISUQgc3BlY2lmaWNhdGlvbiwgdmVyc2lvbiAxLjEuICBUaGUgZmlyc3QgYnl0ZQotICAgb2YgYnVmZmVyIGlzIHRoZSByZXBvcnQgbnVtYmVyIHRvIHJlcXVlc3QsIG9yIDB4MCBpZiB0aGUgZGVmaWNlIGRvZXMgbm90Ci0gICB1c2UgbnVtYmVyZWQgcmVwb3J0cy4gVGhlIHJlcG9ydF90eXBlIHBhcmFtZXRlciBjYW4gYmUgSElEX0ZFQVRVUkVfUkVQT1JUCi0gICBvciBISURfSU5QVVRfUkVQT1JULiAgVGhpcyBmdW5jdGlvbiBpcyB0byBiZSBjYWxsZWQgd2l0aCB0aGUgbWlub3JzX2xvY2sKLSAgIG11dGV4IGhlbGQuICAqLworICogcGVyIHNlY3Rpb24gNy4yLjEgb2YgdGhlIEhJRCBzcGVjaWZpY2F0aW9uLCB2ZXJzaW9uIDEuMS4gIFRoZSBmaXJzdCBieXRlCisgKiBvZiBidWZmZXIgaXMgdGhlIHJlcG9ydCBudW1iZXIgdG8gcmVxdWVzdCwgb3IgMHgwIGlmIHRoZSBkZWZpY2UgZG9lcyBub3QKKyAqIHVzZSBudW1iZXJlZCByZXBvcnRzLiBUaGUgcmVwb3J0X3R5cGUgcGFyYW1ldGVyIGNhbiBiZSBISURfRkVBVFVSRV9SRVBPUlQKKyAqIG9yIEhJRF9JTlBVVF9SRVBPUlQuICBUaGlzIGZ1bmN0aW9uIGlzIHRvIGJlIGNhbGxlZCB3aXRoIHRoZSBtaW5vcnNfbG9jaworICogIG11dGV4IGhlbGQuICovCiBzdGF0aWMgc3NpemVfdCBoaWRyYXdfZ2V0X3JlcG9ydChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBjaGFyIHJlcG9ydF90eXBlKQogewogCXVuc2lnbmVkIGludCBtaW5vciA9IGltaW5vcihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKQEAgLTIwNyw3ICsyMDcsNyBAQAogCX0KIAogCS8qIFJlYWQgdGhlIGZpcnN0IGJ5dGUgZnJvbSB0aGUgdXNlci4gVGhpcyBpcyB0aGUgcmVwb3J0IG51bWJlciwKLQkgICB3aGljaCBpcyBwYXNzZWQgdG8gZGV2LT5oaWRfZ2V0X3Jhd19yZXBvcnQoKS4gKi8KKwkgKiB3aGljaCBpcyBwYXNzZWQgdG8gZGV2LT5oaWRfZ2V0X3Jhd19yZXBvcnQoKS4gKi8KIAlpZiAoY29weV9mcm9tX3VzZXIoJnJlcG9ydF9udW1iZXIsIGJ1ZmZlciwgMSkpIHsKIAkJcmV0ID0gLUVGQVVMVDsKIAkJZ290byBvdXRfZnJlZTsKQEAgLTM5NSwxMiArMzk1LDcgQEAKIAkJCQl9CiAKIAkJCQlpZiAoX0lPQ19OUihjbWQpID09IF9JT0NfTlIoSElESU9DR1JBV05BTUUoMCkpKSB7Ci0JCQkJCWludCBsZW47Ci0JCQkJCWlmICghaGlkLT5uYW1lKSB7Ci0JCQkJCQlyZXQgPSAwOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQkJbGVuID0gc3RybGVuKGhpZC0+bmFtZSkgKyAxOworCQkJCQlpbnQgbGVuID0gc3RybGVuKGhpZC0+bmFtZSkgKyAxOwogCQkJCQlpZiAobGVuID4gX0lPQ19TSVpFKGNtZCkpCiAJCQkJCQlsZW4gPSBfSU9DX1NJWkUoY21kKTsKIAkJCQkJcmV0ID0gY29weV90b191c2VyKHVzZXJfYXJnLCBoaWQtPm5hbWUsIGxlbikgPwpAQCAtNDA5LDEyICs0MDQsNyBAQAogCQkJCX0KIAogCQkJCWlmIChfSU9DX05SKGNtZCkgPT0gX0lPQ19OUihISURJT0NHUkFXUEhZUygwKSkpIHsKLQkJCQkJaW50IGxlbjsKLQkJCQkJaWYgKCFoaWQtPnBoeXMpIHsKLQkJCQkJCXJldCA9IDA7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCQlsZW4gPSBzdHJsZW4oaGlkLT5waHlzKSArIDE7CisJCQkJCWludCBsZW4gPSBzdHJsZW4oaGlkLT5waHlzKSArIDE7CiAJCQkJCWlmIChsZW4gPiBfSU9DX1NJWkUoY21kKSkKIAkJCQkJCWxlbiA9IF9JT0NfU0laRShjbWQpOwogCQkJCQlyZXQgPSBjb3B5X3RvX3VzZXIodXNlcl9hcmcsIGhpZC0+cGh5cywgbGVuKSA/CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYwppbmRleCBhODQyNmYxLi4wZTMwYjE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jCisrKyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMKQEAgLTY4LDYgKzY4LDggQEAKIAl7IFVTQl9WRU5ET1JfSURfUFJPRElHRSwgVVNCX0RFVklDRV9JRF9QUk9ESUdFX0NPUkRMRVNTLCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfUVVBTlRBLCBVU0JfREVWSUNFX0lEX1BJWEFSVF9JTUFHSU5HX0lOQ19PUFRJQ0FMX1RPVUNIX1NDUkVFTiwgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX1NVTiwgVVNCX0RFVklDRV9JRF9SQVJJVEFOX0tWTV9ET05HTEUsIEhJRF9RVUlSS19OT0dFVCB9LAorCXsgVVNCX1ZFTkRPUl9JRF9TWU1CT0wsIFVTQl9ERVZJQ0VfSURfU1lNQk9MX1NDQU5ORVJfMSwgSElEX1FVSVJLX05PR0VUIH0sCisJeyBVU0JfVkVORE9SX0lEX1NZTUJPTCwgVVNCX0RFVklDRV9JRF9TWU1CT0xfU0NBTk5FUl8yLCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfVFVSQk9YLCBVU0JfREVWSUNFX0lEX1RVUkJPWF9LRVlCT0FSRCwgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX1VDTE9HSUMsIFVTQl9ERVZJQ0VfSURfVUNMT0dJQ19UQUJMRVRfUEYxMjA5LCBISURfUVVJUktfTVVMVElfSU5QVVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfVUNMT0dJQywgVVNCX0RFVklDRV9JRF9VQ0xPR0lDX1RBQkxFVF9XUDQwMzBVLCBISURfUVVJUktfTVVMVElfSU5QVVQgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWRkZXYuYyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWRkZXYuYwppbmRleCBhZjBhN2MxLi5mZjNjNjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkZGV2LmMKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jCkBAIC0yNDIsNiArMjQyLDcgQEAKIAlsaXN0X2RlbCgmbGlzdC0+bm9kZSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGlzdC0+aGlkZGV2LT5saXN0X2xvY2ssIGZsYWdzKTsKIAorCW11dGV4X2xvY2soJmxpc3QtPmhpZGRldi0+ZXhpc3RhbmNlbG9jayk7CiAJaWYgKCEtLWxpc3QtPmhpZGRldi0+b3BlbikgewogCQlpZiAobGlzdC0+aGlkZGV2LT5leGlzdCkgewogCQkJdXNiaGlkX2Nsb3NlKGxpc3QtPmhpZGRldi0+aGlkKTsKQEAgLTI1Miw2ICsyNTMsNyBAQAogCX0KIAogCWtmcmVlKGxpc3QpOworCW11dGV4X3VubG9jaygmbGlzdC0+aGlkZGV2LT5leGlzdGFuY2Vsb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzAwLDE3ICszMDIsMjEgQEAKIAlsaXN0X2FkZF90YWlsKCZsaXN0LT5ub2RlLCAmaGlkZGV2LT5saXN0KTsKIAlzcGluX3VubG9ja19pcnEoJmxpc3QtPmhpZGRldi0+bGlzdF9sb2NrKTsKIAorCW11dGV4X2xvY2soJmhpZGRldi0+ZXhpc3RhbmNlbG9jayk7CiAJaWYgKCFsaXN0LT5oaWRkZXYtPm9wZW4rKykKIAkJaWYgKGxpc3QtPmhpZGRldi0+ZXhpc3QpIHsKIAkJCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBoaWRkZXYtPmhpZDsKIAkJCXJlcyA9IHVzYmhpZF9nZXRfcG93ZXIoaGlkKTsKIAkJCWlmIChyZXMgPCAwKSB7CiAJCQkJcmVzID0gLUVJTzsKLQkJCQlnb3RvIGJhaWw7CisJCQkJZ290byBiYWlsX3VubG9jazsKIAkJCX0KIAkJCXVzYmhpZF9vcGVuKGhpZCk7CiAJCX0KKwltdXRleF91bmxvY2soJmhpZGRldi0+ZXhpc3RhbmNlbG9jayk7CiAJcmV0dXJuIDA7CitiYWlsX3VubG9jazoKKwltdXRleF91bmxvY2soJmhpZGRldi0+ZXhpc3RhbmNlbG9jayk7CiBiYWlsOgogCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CiAJa2ZyZWUobGlzdCk7CkBAIC0zNjcsOCArMzczLDEwIEBACiAJCQkJLyogbGV0IE9fTk9OQkxPQ0sgdGFza3MgcnVuICovCiAJCQkJbXV0ZXhfdW5sb2NrKCZsaXN0LT50aHJlYWRfbG9jayk7CiAJCQkJc2NoZWR1bGUoKTsKLQkJCQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZsaXN0LT50aHJlYWRfbG9jaykpCisJCQkJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmbGlzdC0+dGhyZWFkX2xvY2spKSB7CisJCQkJCWZpbmlzaF93YWl0KCZsaXN0LT5oaWRkZXYtPndhaXQsICZ3YWl0KTsKIAkJCQkJcmV0dXJuIC1FSU5UUjsKKwkJCQl9CiAJCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJCX0KIAkJCWZpbmlzaF93YWl0KCZsaXN0LT5oaWRkZXYtPndhaXQsICZ3YWl0KTsKQEAgLTUwOSw3ICs1MTcsNyBAQAogCQkJCSAodXJlZl9tdWx0aS0+bnVtX3ZhbHVlcyA+IEhJRF9NQVhfTVVMVElfVVNBR0VTIHx8CiAJCQkJICB1cmVmLT51c2FnZV9pbmRleCArIHVyZWZfbXVsdGktPm51bV92YWx1ZXMgPiBmaWVsZC0+cmVwb3J0X2NvdW50KSkKIAkJCQlnb3RvIGludmFsOwotCQkJfQorCQl9CiAKIAkJc3dpdGNoIChjbWQpIHsKIAkJY2FzZSBISURJT0NHVVNBR0U6CkBAIC04MDEsMTQgKzgwOSw3IEBACiAJCQlicmVhazsKIAogCQlpZiAoX0lPQ19OUihjbWQpID09IF9JT0NfTlIoSElESU9DR05BTUUoMCkpKSB7Ci0JCQlpbnQgbGVuOwotCi0JCQlpZiAoIWhpZC0+bmFtZSkgewotCQkJCXIgPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQlsZW4gPSBzdHJsZW4oaGlkLT5uYW1lKSArIDE7CisJCQlpbnQgbGVuID0gc3RybGVuKGhpZC0+bmFtZSkgKyAxOwogCQkJaWYgKGxlbiA+IF9JT0NfU0laRShjbWQpKQogCQkJCSBsZW4gPSBfSU9DX1NJWkUoY21kKTsKIAkJCXIgPSBjb3B5X3RvX3VzZXIodXNlcl9hcmcsIGhpZC0+bmFtZSwgbGVuKSA/CkBAIC04MTcsMTQgKzgxOCw3IEBACiAJCX0KIAogCQlpZiAoX0lPQ19OUihjbWQpID09IF9JT0NfTlIoSElESU9DR1BIWVMoMCkpKSB7Ci0JCQlpbnQgbGVuOwotCi0JCQlpZiAoIWhpZC0+cGh5cykgewotCQkJCXIgPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQlsZW4gPSBzdHJsZW4oaGlkLT5waHlzKSArIDE7CisJCQlpbnQgbGVuID0gc3RybGVuKGhpZC0+cGh5cykgKyAxOwogCQkJaWYgKGxlbiA+IF9JT0NfU0laRShjbWQpKQogCQkJCWxlbiA9IF9JT0NfU0laRShjbWQpOwogCQkJciA9IGNvcHlfdG9fdXNlcih1c2VyX2FyZywgaGlkLT5waHlzLCBsZW4pID8KQEAgLTkyNSw3ICs5MTksNiBAQAogCiAJbXV0ZXhfbG9jaygmaGlkZGV2LT5leGlzdGFuY2Vsb2NrKTsKIAloaWRkZXYtPmV4aXN0ID0gMDsKLQltdXRleF91bmxvY2soJmhpZGRldi0+ZXhpc3RhbmNlbG9jayk7CiAKIAl1c2JfZGVyZWdpc3Rlcl9kZXYodXNiaGlkLT5pbnRmLCAmaGlkZGV2X2NsYXNzKTsKIApAQCAtOTM1LDQgKzkyOCw1IEBACiAJfSBlbHNlIHsKIAkJa2ZyZWUoaGlkZGV2KTsKIAl9CisJbXV0ZXhfdW5sb2NrKCZoaWRkZXYtPmV4aXN0YW5jZWxvY2spOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9LY29uZmlnIGIvZHJpdmVycy9od21vbi9LY29uZmlnCmluZGV4IDUwZTQwZGIuLjQzMjIxYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZworKysgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKQEAgLTQwOCwxMyArNDA4LDYgQEAKIAkgIHNlbnNvciBpbnNpZGUgeW91ciBDUFUuIE1vc3Qgb2YgdGhlIGZhbWlseSA2IENQVXMKIAkgIGFyZSBzdXBwb3J0ZWQuIENoZWNrIERvY3VtZW50YXRpb24vaHdtb24vY29yZXRlbXAgZm9yIGRldGFpbHMuCiAKLWNvbmZpZyBTRU5TT1JTX1BLR1RFTVAKLQl0cmlzdGF0ZSAiSW50ZWwgcHJvY2Vzc29yIHBhY2thZ2UgdGVtcGVyYXR1cmUgc2Vuc29yIgotCWRlcGVuZHMgb24gWDg2ICYmIEVYUEVSSU1FTlRBTAotCWhlbHAKLQkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgcGFja2FnZSBsZXZlbCB0ZW1wZXJhdHVyZQotCSAgc2Vuc29yIGluc2lkZSB5b3VyIENQVS4gQ2hlY2sgZG9jdW1lbnRhdGlvbi9kcml2ZXIgZm9yIGRldGFpbHMuCi0KIGNvbmZpZyBTRU5TT1JTX0lCTUFFTQogCXRyaXN0YXRlICJJQk0gQWN0aXZlIEVuZXJneSBNYW5hZ2VyIHRlbXBlcmF0dXJlL3Bvd2VyIHNlbnNvcnMgYW5kIGNvbnRyb2wiCiAJc2VsZWN0IElQTUlfU0kKQEAgLTcwOCw2ICs3MDEsMjIgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIG1heDExMTEuCiAKK2NvbmZpZyBTRU5TT1JTX01BWDE2MDY1CisJdHJpc3RhdGUgIk1heGltIE1BWDE2MDY1IFN5c3RlbSBNYW5hZ2VyIGFuZCBjb21wYXRpYmxlcyIKKwlkZXBlbmRzIG9uIEkyQworCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBoYXJkd2FyZSBtb25pdG9yaW5nCisJICBjYXBhYmlsaXRpZXMgb2YgdGhlIGZvbGxvd2luZyBNYXhpbSBTeXN0ZW0gTWFuYWdlciBjaGlwcy4KKwkgICAgTUFYMTYwNjUKKwkgICAgTUFYMTYwNjYKKwkgICAgTUFYMTYwNjcKKwkgICAgTUFYMTYwNjgKKwkgICAgTUFYMTYwNzAKKwkgICAgTUFYMTYwNzEKKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgbWF4MTYwNjUuCisKIGNvbmZpZyBTRU5TT1JTX01BWDE2MTkKIAl0cmlzdGF0ZSAiTWF4aW0gTUFYMTYxOSBzZW5zb3IgY2hpcCIKIAlkZXBlbmRzIG9uIEkyQwpAQCAtNzI3LDYgKzczNiwxNyBAQAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgbWF4NjYzOS4KIAorY29uZmlnIFNFTlNPUlNfTUFYNjY0MgorCXRyaXN0YXRlICJNYXhpbSBNQVg2NjQyIHNlbnNvciBjaGlwIgorCWRlcGVuZHMgb24gSTJDICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBNQVg2NjQyIHNlbnNvciBjaGlwLgorCSAgTUFYNjY0MiBpcyBhIFNNQnVzLUNvbXBhdGlibGUgUmVtb3RlL0xvY2FsIFRlbXBlcmF0dXJlIFNlbnNvcgorCSAgd2l0aCBPdmVydGVtcGVyYXR1cmUgQWxhcm0gZnJvbSBNYXhpbS4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgbWF4NjY0Mi4KKwogY29uZmlnIFNFTlNPUlNfTUFYNjY1MAogCXRyaXN0YXRlICJNYXhpbSBNQVg2NjUwIHNlbnNvciBjaGlwIgogCWRlcGVuZHMgb24gSTJDICYmIEVYUEVSSU1FTlRBTApAQCAtODAwLDYgKzgyMCwxNiBAQAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlIHdpbGwKIAkgIGJlIGNhbGxlZCBwbWJ1cy4KIAorY29uZmlnIFNFTlNPUlNfQURNMTI3NQorCXRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBBRE0xMjc1IgorCWRlZmF1bHQgbgorCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBoYXJkd2FyZSBtb25pdG9yaW5nIHN1cHBvcnQgZm9yIEFuYWxvZworCSAgRGV2aWNlcyBBRE0xMjc1IEhvdC1Td2FwIENvbnRyb2xsZXIgYW5kIERpZ2l0YWwgUG93ZXIgTW9uaXRvci4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlIHdpbGwKKwkgIGJlIGNhbGxlZCBhZG0xMjc1LgorCiBjb25maWcgU0VOU09SU19NQVgxNjA2NAogCXRyaXN0YXRlICJNYXhpbSBNQVgxNjA2NCIKIAlkZWZhdWx0IG4KQEAgLTgzMCw2ICs4NjAsMjggQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZSB3aWxsCiAJICBiZSBjYWxsZWQgbWF4ODY4OC4KIAorY29uZmlnIFNFTlNPUlNfVUNEOTAwMAorCXRyaXN0YXRlICJUSSBVQ0Q5MDEyMCwgVUNEOTAxMjQsIFVDRDkwOTAsIFVDRDkwOTEwIgorCWRlZmF1bHQgbgorCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBoYXJkd2FyZSBtb25pdG9yaW5nIHN1cHBvcnQgZm9yIFRJCisJICBVQ0Q5MDEyMCwgVUNEOTAxMjQsIFVDRDkwOTAsIFVDRDkwOTEwIFNlcXVlbmNlciBhbmQgU3lzdGVtIEhlYWx0aAorCSAgQ29udHJvbGxlcnMuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZSB3aWxsCisJICBiZSBjYWxsZWQgdWNkOTAwMC4KKworY29uZmlnIFNFTlNPUlNfVUNEOTIwMAorCXRyaXN0YXRlICJUSSBVQ0Q5MjIwLCBVQ0Q5MjIyLCBVQ0Q5MjI0LCBVQ0Q5MjQwLCBVQ0Q5MjQ0LCBVQ0Q5MjQ2LCBVQ0Q5MjQ4IgorCWRlZmF1bHQgbgorCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBoYXJkd2FyZSBtb25pdG9yaW5nIHN1cHBvcnQgZm9yIFRJCisJICBVQ0Q5MjIwLCBVQ0Q5MjIyLCBVQ0Q5MjI0LCBVQ0Q5MjQwLCBVQ0Q5MjQ0LCBVQ0Q5MjQ2LCBhbmQgVUNEOTI0OAorCSAgRGlnaXRhbCBQV00gU3lzdGVtIENvbnRyb2xsZXJzLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUgd2lsbAorCSAgYmUgY2FsbGVkIHVjZDkyMDAuCisKIGVuZGlmICMgUE1CVVMKIAogY29uZmlnIFNFTlNPUlNfU0hUMTUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUgYi9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCmluZGV4IDk2N2QwZWEuLjI4ZThkNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9od21vbi9NYWtlZmlsZQpAQCAtNDAsNyArNDAsNiBAQAogb2JqLSQoQ09ORklHX1NFTlNPUlNfQVNDNzYyMSkJKz0gYXNjNzYyMS5vCiBvYmotJChDT05GSUdfU0VOU09SU19BVFhQMSkJKz0gYXR4cDEubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfQ09SRVRFTVApCSs9IGNvcmV0ZW1wLm8KLW9iai0kKENPTkZJR19TRU5TT1JTX1BLR1RFTVApCSs9IHBrZ3RlbXAubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfRE1FMTczNykJKz0gZG1lMTczNy5vCiBvYmotJChDT05GSUdfU0VOU09SU19EUzYyMCkJKz0gZHM2MjAubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfRFMxNjIxKQkrPSBkczE2MjEubwpAQCAtODMsOCArODIsMTAgQEAKIG9iai0kKENPTkZJR19TRU5TT1JTX0xUQzQyNDUpCSs9IGx0YzQyNDUubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfTFRDNDI2MSkJKz0gbHRjNDI2MS5vCiBvYmotJChDT05GSUdfU0VOU09SU19NQVgxMTExKQkrPSBtYXgxMTExLm8KK29iai0kKENPTkZJR19TRU5TT1JTX01BWDE2MDY1KQkrPSBtYXgxNjA2NS5vCiBvYmotJChDT05GSUdfU0VOU09SU19NQVgxNjE5KQkrPSBtYXgxNjE5Lm8KIG9iai0kKENPTkZJR19TRU5TT1JTX01BWDY2MzkpCSs9IG1heDY2Mzkubworb2JqLSQoQ09ORklHX1NFTlNPUlNfTUFYNjY0MikJKz0gbWF4NjY0Mi5vCiBvYmotJChDT05GSUdfU0VOU09SU19NQVg2NjUwKQkrPSBtYXg2NjUwLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX01DMTM3ODNfQURDKSs9IG1jMTM3ODMtYWRjLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX1BDODczNjApCSs9IHBjODczNjAubwpAQCAtMTE4LDkgKzExOSwxMiBAQAogIyBQTUJ1cyBkcml2ZXJzCiBvYmotJChDT05GSUdfUE1CVVMpCQkrPSBwbWJ1c19jb3JlLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX1BNQlVTKQkrPSBwbWJ1cy5vCitvYmotJChDT05GSUdfU0VOU09SU19BRE0xMjc1KQkrPSBhZG0xMjc1Lm8KIG9iai0kKENPTkZJR19TRU5TT1JTX01BWDE2MDY0KQkrPSBtYXgxNjA2NC5vCiBvYmotJChDT05GSUdfU0VOU09SU19NQVgzNDQ0MCkJKz0gbWF4MzQ0NDAubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfTUFYODY4OCkJKz0gbWF4ODY4OC5vCitvYmotJChDT05GSUdfU0VOU09SU19VQ0Q5MDAwKQkrPSB1Y2Q5MDAwLm8KK29iai0kKENPTkZJR19TRU5TT1JTX1VDRDkyMDApCSs9IHVjZDkyMDAubwogCiBjY2ZsYWdzLSQoQ09ORklHX0hXTU9OX0RFQlVHX0NISVApIDo9IC1EREVCVUcKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hZG0xMjc1LmMgYi9kcml2ZXJzL2h3bW9uL2FkbTEyNzUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmVlMjA0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9od21vbi9hZG0xMjc1LmMKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBIYXJkd2FyZSBtb25pdG9yaW5nIGRyaXZlciBmb3IgQW5hbG9nIERldmljZXMgQURNMTI3NSBIb3QtU3dhcCBDb250cm9sbGVyCisgKiBhbmQgRGlnaXRhbCBQb3dlciBNb25pdG9yCisgKgorICogQ29weXJpZ2h0IChjKSAyMDExIEVyaWNzc29uIEFCLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgInBtYnVzLmgiCisKKyNkZWZpbmUgQURNMTI3NV9QTU9OX0NPTkZJRwkJMHhkNAorCisjZGVmaW5lIEFETTEyNzVfVklOX1ZPVVRfU0VMRUNUCQkoMSA8PCA2KQorI2RlZmluZSBBRE0xMjc1X1ZSQU5HRQkJCSgxIDw8IDUpCisKK3N0YXRpYyBpbnQgYWRtMTI3NV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgY29uZmlnOworCXN0cnVjdCBwbWJ1c19kcml2ZXJfaW5mbyAqaW5mbzsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLAorCQkJCSAgICAgSTJDX0ZVTkNfU01CVVNfUkVBRF9CWVRFX0RBVEEpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG1idXNfZHJpdmVyX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWluZm8pCisJCXJldHVybiAtRU5PTUVNOworCisJY29uZmlnID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgQURNMTI3NV9QTU9OX0NPTkZJRyk7CisJaWYgKGNvbmZpZyA8IDApCisJCXJldHVybiBjb25maWc7CisKKwlpbmZvLT5wYWdlcyA9IDE7CisJaW5mby0+ZGlyZWN0W1BTQ19WT0xUQUdFX0lOXSA9IHRydWU7CisJaW5mby0+ZGlyZWN0W1BTQ19WT0xUQUdFX09VVF0gPSB0cnVlOworCWluZm8tPmRpcmVjdFtQU0NfQ1VSUkVOVF9PVVRdID0gdHJ1ZTsKKwlpbmZvLT5tW1BTQ19DVVJSRU5UX09VVF0gPSA4MDA7CisJaW5mby0+YltQU0NfQ1VSUkVOVF9PVVRdID0gMjA0NzU7CisJaW5mby0+UltQU0NfQ1VSUkVOVF9PVVRdID0gLTE7CisJaW5mby0+ZnVuY1swXSA9IFBNQlVTX0hBVkVfSU9VVCB8IFBNQlVTX0hBVkVfU1RBVFVTX0lPVVQ7CisKKwlpZiAoY29uZmlnICYgQURNMTI3NV9WUkFOR0UpIHsKKwkJaW5mby0+bVtQU0NfVk9MVEFHRV9JTl0gPSAxOTA0NTsKKwkJaW5mby0+YltQU0NfVk9MVEFHRV9JTl0gPSAwOworCQlpbmZvLT5SW1BTQ19WT0xUQUdFX0lOXSA9IC0yOworCQlpbmZvLT5tW1BTQ19WT0xUQUdFX09VVF0gPSAxOTA0NTsKKwkJaW5mby0+YltQU0NfVk9MVEFHRV9PVVRdID0gMDsKKwkJaW5mby0+UltQU0NfVk9MVEFHRV9PVVRdID0gLTI7CisJfSBlbHNlIHsKKwkJaW5mby0+bVtQU0NfVk9MVEFHRV9JTl0gPSA2NjY2OworCQlpbmZvLT5iW1BTQ19WT0xUQUdFX0lOXSA9IDA7CisJCWluZm8tPlJbUFNDX1ZPTFRBR0VfSU5dID0gLTE7CisJCWluZm8tPm1bUFNDX1ZPTFRBR0VfT1VUXSA9IDY2NjY7CisJCWluZm8tPmJbUFNDX1ZPTFRBR0VfT1VUXSA9IDA7CisJCWluZm8tPlJbUFNDX1ZPTFRBR0VfT1VUXSA9IC0xOworCX0KKworCWlmIChjb25maWcgJiBBRE0xMjc1X1ZJTl9WT1VUX1NFTEVDVCkKKwkJaW5mby0+ZnVuY1swXSB8PSBQTUJVU19IQVZFX1ZPVVQgfCBQTUJVU19IQVZFX1NUQVRVU19WT1VUOworCWVsc2UKKwkJaW5mby0+ZnVuY1swXSB8PSBQTUJVU19IQVZFX1ZJTiB8IFBNQlVTX0hBVkVfU1RBVFVTX0lOUFVUOworCisJcmV0dXJuIHBtYnVzX2RvX3Byb2JlKGNsaWVudCwgaWQsIGluZm8pOworfQorCitzdGF0aWMgaW50IGFkbTEyNzVfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJY29uc3Qgc3RydWN0IHBtYnVzX2RyaXZlcl9pbmZvICppbmZvID0gcG1idXNfZ2V0X2RyaXZlcl9pbmZvKGNsaWVudCk7CisJaW50IHJldDsKKworCXJldCA9IHBtYnVzX2RvX3JlbW92ZShjbGllbnQpOworCWtmcmVlKGluZm8pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhZG0xMjc1X2lkW10gPSB7CisJeyJhZG0xMjc1IiwgMH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGFkbTEyNzVfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWRtMTI3NV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJICAgLm5hbWUgPSAiYWRtMTI3NSIsCisJCSAgIH0sCisJLnByb2JlID0gYWRtMTI3NV9wcm9iZSwKKwkucmVtb3ZlID0gYWRtMTI3NV9yZW1vdmUsCisJLmlkX3RhYmxlID0gYWRtMTI3NV9pZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFkbTEyNzVfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmYWRtMTI3NV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYWRtMTI3NV9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJmFkbTEyNzVfZHJpdmVyKTsKK30KKworTU9EVUxFX0FVVEhPUigiR3VlbnRlciBSb2VjayIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQTUJ1cyBkcml2ZXIgZm9yIEFuYWxvZyBEZXZpY2VzIEFETTEyNzUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK21vZHVsZV9pbml0KGFkbTEyNzVfaW5pdCk7Cittb2R1bGVfZXhpdChhZG0xMjc1X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9jb3JldGVtcC5jIGIvZHJpdmVycy9od21vbi9jb3JldGVtcC5jCmluZGV4IDE5NGNhMGEuLmEwMDI0NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vY29yZXRlbXAuYworKysgYi9kcml2ZXJzL2h3bW9uL2NvcmV0ZW1wLmMKQEAgLTM1LDEyOCArMzUsMTU0IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vc21wLmg+CiAKICNkZWZpbmUgRFJWTkFNRQkiY29yZXRlbXAiCiAKLXR5cGVkZWYgZW51bSB7IFNIT1dfVEVNUCwgU0hPV19USk1BWCwgU0hPV19UVEFSR0VULCBTSE9XX0xBQkVMLAotCQlTSE9XX05BTUUgfSBTSE9XOworI2RlZmluZSBCQVNFX1NZU0ZTX0FUVFJfTk8JMgkvKiBTeXNmcyBCYXNlIGF0dHIgbm8gZm9yIGNvcmV0ZW1wICovCisjZGVmaW5lIE5VTV9SRUFMX0NPUkVTCQkxNgkvKiBOdW1iZXIgb2YgUmVhbCBjb3JlcyBwZXIgY3B1ICovCisjZGVmaW5lIENPUkVURU1QX05BTUVfTEVOR1RICTE3CS8qIFN0cmluZyBMZW5ndGggb2YgYXR0cnMgKi8KKyNkZWZpbmUgTUFYX0FUVFJTCQk1CS8qIE1heGltdW0gbm8gb2YgcGVyLWNvcmUgYXR0cnMgKi8KKyNkZWZpbmUgTUFYX0NPUkVfREFUQQkJKE5VTV9SRUFMX0NPUkVTICsgQkFTRV9TWVNGU19BVFRSX05PKQorCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBUT19QSFlTX0lEKGNwdSkJCWNwdV9kYXRhKGNwdSkucGh5c19wcm9jX2lkCisjZGVmaW5lIFRPX0NPUkVfSUQoY3B1KQkJY3B1X2RhdGEoY3B1KS5jcHVfY29yZV9pZAorI2RlZmluZSBUT19BVFRSX05PKGNwdSkJCShUT19DT1JFX0lEKGNwdSkgKyBCQVNFX1NZU0ZTX0FUVFJfTk8pCisjZGVmaW5lIGZvcl9lYWNoX3NpYmxpbmcoaSwgY3B1KQlmb3JfZWFjaF9jcHUoaSwgY3B1X3NpYmxpbmdfbWFzayhjcHUpKQorI2Vsc2UKKyNkZWZpbmUgVE9fUEhZU19JRChjcHUpCQkoY3B1KQorI2RlZmluZSBUT19DT1JFX0lEKGNwdSkJCShjcHUpCisjZGVmaW5lIFRPX0FUVFJfTk8oY3B1KQkJKGNwdSkKKyNkZWZpbmUgZm9yX2VhY2hfc2libGluZyhpLCBjcHUpCWZvciAoaSA9IDA7IGZhbHNlOyApCisjZW5kaWYKIAogLyoKLSAqIEZ1bmN0aW9ucyBkZWNsYXJhdGlvbgorICogUGVyLUNvcmUgVGVtcGVyYXR1cmUgRGF0YQorICogQGxhc3RfdXBkYXRlZDogVGhlIHRpbWUgd2hlbiB0aGUgY3VycmVudCB0ZW1wZXJhdHVyZSB2YWx1ZSB3YXMgdXBkYXRlZAorICoJCWVhcmxpZXIgKGluIGppZmZpZXMpLgorICogQGNwdV9jb3JlX2lkOiBUaGUgQ1BVIENvcmUgZnJvbSB3aGljaCB0ZW1wZXJhdHVyZSB2YWx1ZXMgc2hvdWxkIGJlIHJlYWQKKyAqCQlUaGlzIHZhbHVlIGlzIHBhc3NlZCBhcyAiaWQiIGZpZWxkIHRvIHJkbXNyL3dybXNyIGZ1bmN0aW9ucy4KKyAqIEBzdGF0dXNfcmVnOiBPbmUgb2YgSUEzMl9USEVSTV9TVEFUVVMgb3IgSUEzMl9QQUNLQUdFX1RIRVJNX1NUQVRVUywKKyAqCQlmcm9tIHdoZXJlIHRoZSB0ZW1wZXJhdHVyZSB2YWx1ZXMgc2hvdWxkIGJlIHJlYWQuCisgKiBAaXNfcGtnX2RhdGE6IElmIHRoaXMgaXMgMSwgdGhlIHRlbXBfZGF0YSBob2xkcyBwa2d0ZW1wIGRhdGEuCisgKgkJT3RoZXJ3aXNlLCB0ZW1wX2RhdGEgaG9sZHMgY29yZXRlbXAgZGF0YS4KKyAqIEB2YWxpZDogSWYgdGhpcyBpcyAxLCB0aGUgY3VycmVudCB0ZW1wZXJhdHVyZSBpcyB2YWxpZC4KICAqLwotCi1zdGF0aWMgc3RydWN0IGNvcmV0ZW1wX2RhdGEgKmNvcmV0ZW1wX3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KTsKLQotc3RydWN0IGNvcmV0ZW1wX2RhdGEgewotCXN0cnVjdCBkZXZpY2UgKmh3bW9uX2RldjsKLQlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7Ci0JY29uc3QgY2hhciAqbmFtZTsKLQl1MzIgaWQ7Ci0JdTE2IGNvcmVfaWQ7Ci0JY2hhciB2YWxpZDsJCS8qIHplcm8gdW50aWwgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KLQl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsJLyogaW4gamlmZmllcyAqLworc3RydWN0IHRlbXBfZGF0YSB7CiAJaW50IHRlbXA7Ci0JaW50IHRqbWF4OwogCWludCB0dGFyZ2V0OwotCXU4IGFsYXJtOworCWludCB0am1heDsKKwl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsKKwl1bnNpZ25lZCBpbnQgY3B1OworCXUzMiBjcHVfY29yZV9pZDsKKwl1MzIgc3RhdHVzX3JlZzsKKwlib29sIGlzX3BrZ19kYXRhOworCWJvb2wgdmFsaWQ7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkX2F0dHJzW01BWF9BVFRSU107CisJY2hhciBhdHRyX25hbWVbTUFYX0FUVFJTXVtDT1JFVEVNUF9OQU1FX0xFTkdUSF07CisJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOwogfTsKIAotLyoKLSAqIFN5c2ZzIHN0dWZmCi0gKi8KKy8qIFBsYXRmb3JtIERhdGEgcGVyIFBoeXNpY2FsIENQVSAqLworc3RydWN0IHBsYXRmb3JtX2RhdGEgeworCXN0cnVjdCBkZXZpY2UgKmh3bW9uX2RldjsKKwl1MTYgcGh5c19wcm9jX2lkOworCXN0cnVjdCB0ZW1wX2RhdGEgKmNvcmVfZGF0YVtNQVhfQ09SRV9EQVRBXTsKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBuYW1lX2F0dHI7Cit9OwogCi1zdGF0aWMgc3NpemVfdCBzaG93X25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQotCQkJICAqZGV2YXR0ciwgY2hhciAqYnVmKQorc3RydWN0IHBkZXZfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXVuc2lnbmVkIGludCBjcHU7CisJdTE2IHBoeXNfcHJvY19pZDsKKwl1MTYgY3B1X2NvcmVfaWQ7Cit9OworCitzdGF0aWMgTElTVF9IRUFEKHBkZXZfbGlzdCk7CitzdGF0aWMgREVGSU5FX01VVEVYKHBkZXZfbGlzdF9tdXRleCk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQogewotCWludCByZXQ7Ci0Jc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwotCXN0cnVjdCBjb3JldGVtcF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0KLQlpZiAoYXR0ci0+aW5kZXggPT0gU0hPV19OQU1FKQotCQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBkYXRhLT5uYW1lKTsKLQllbHNlCS8qIHNob3cgbGFiZWwgKi8KLQkJcmV0ID0gc3ByaW50ZihidWYsICJDb3JlICVkXG4iLCBkYXRhLT5jb3JlX2lkKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBEUlZOQU1FKTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2hvd19hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlCi0JCQkgICpkZXZhdHRyLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X2xhYmVsKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBjb3JldGVtcF9kYXRhICpkYXRhID0gY29yZXRlbXBfdXBkYXRlX2RldmljZShkZXYpOwotCS8qIHJlYWQgdGhlIE91dC1vZi1zcGVjIGxvZywgbmV2ZXIgY2xlYXIgKi8KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+YWxhcm0pOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdGVtcF9kYXRhICp0ZGF0YSA9IHBkYXRhLT5jb3JlX2RhdGFbYXR0ci0+aW5kZXhdOworCisJaWYgKHRkYXRhLT5pc19wa2dfZGF0YSkKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiUGh5c2ljYWwgaWQgJXVcbiIsIHBkYXRhLT5waHlzX3Byb2NfaWQpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiQ29yZSAldVxuIiwgdGRhdGEtPmNwdV9jb3JlX2lkKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19jcml0X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXUzMiBlYXgsIGVkeDsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IHBsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHRlbXBfZGF0YSAqdGRhdGEgPSBwZGF0YS0+Y29yZV9kYXRhW2F0dHItPmluZGV4XTsKKworCXJkbXNyX29uX2NwdSh0ZGF0YS0+Y3B1LCB0ZGF0YS0+c3RhdHVzX3JlZywgJmVheCwgJmVkeCk7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgKGVheCA+PiA1KSAmIDEpOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3RqbWF4KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCXN0cnVjdCBwbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHBkYXRhLT5jb3JlX2RhdGFbYXR0ci0+aW5kZXhdLT50am1heCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfdHRhcmdldChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IHBsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcGRhdGEtPmNvcmVfZGF0YVthdHRyLT5pbmRleF0tPnR0YXJnZXQpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X3RlbXAoc3RydWN0IGRldmljZSAqZGV2LAotCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQogeworCXUzMiBlYXgsIGVkeDsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7Ci0Jc3RydWN0IGNvcmV0ZW1wX2RhdGEgKmRhdGEgPSBjb3JldGVtcF91cGRhdGVfZGV2aWNlKGRldik7Ci0JaW50IGVycjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdGVtcF9kYXRhICp0ZGF0YSA9IHBkYXRhLT5jb3JlX2RhdGFbYXR0ci0+aW5kZXhdOwogCi0JaWYgKGF0dHItPmluZGV4ID09IFNIT1dfVEVNUCkKLQkJZXJyID0gZGF0YS0+dmFsaWQgPyBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT50ZW1wKSA6IC1FQUdBSU47Ci0JZWxzZSBpZiAoYXR0ci0+aW5kZXggPT0gU0hPV19USk1BWCkKLQkJZXJyID0gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+dGptYXgpOwotCWVsc2UKLQkJZXJyID0gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+dHRhcmdldCk7Ci0JcmV0dXJuIGVycjsKLX0KKwltdXRleF9sb2NrKCZ0ZGF0YS0+dXBkYXRlX2xvY2spOwogCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwsCi0JCQkgIFNIT1dfVEVNUCk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2NyaXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwKLQkJCSAgU0hPV19USk1BWCk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21heCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLAotCQkJICBTSE9XX1RUQVJHRVQpOwotc3RhdGljIERFVklDRV9BVFRSKHRlbXAxX2NyaXRfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9sYWJlbCwgU19JUlVHTywgc2hvd19uYW1lLCBOVUxMLCBTSE9XX0xBQkVMKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd19uYW1lLCBOVUxMLCBTSE9XX05BTUUpOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqY29yZXRlbXBfYXR0cmlidXRlc1tdID0gewotCSZzZW5zb3JfZGV2X2F0dHJfbmFtZS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbGFiZWwuZGV2X2F0dHIuYXR0ciwKLQkmZGV2X2F0dHJfdGVtcDFfY3JpdF9hbGFybS5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2NyaXQuZGV2X2F0dHIuYXR0ciwKLQlOVUxMCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBjb3JldGVtcF9ncm91cCA9IHsKLQkuYXR0cnMgPSBjb3JldGVtcF9hdHRyaWJ1dGVzLAotfTsKLQotc3RhdGljIHN0cnVjdCBjb3JldGVtcF9kYXRhICpjb3JldGVtcF91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgY29yZXRlbXBfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCi0JbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwotCi0JaWYgKCFkYXRhLT52YWxpZCB8fCB0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlZCArIEhaKSkgewotCQl1MzIgZWF4LCBlZHg7Ci0KLQkJZGF0YS0+dmFsaWQgPSAwOwotCQlyZG1zcl9vbl9jcHUoZGF0YS0+aWQsIE1TUl9JQTMyX1RIRVJNX1NUQVRVUywgJmVheCwgJmVkeCk7Ci0JCWRhdGEtPmFsYXJtID0gKGVheCA+PiA1KSAmIDE7Ci0JCS8qIHVwZGF0ZSBvbmx5IGlmIGRhdGEgaGFzIGJlZW4gdmFsaWQgKi8KKwkvKiBDaGVjayB3aGV0aGVyIHRoZSB0aW1lIGludGVydmFsIGhhcyBlbGFwc2VkICovCisJaWYgKCF0ZGF0YS0+dmFsaWQgfHwgdGltZV9hZnRlcihqaWZmaWVzLCB0ZGF0YS0+bGFzdF91cGRhdGVkICsgSFopKSB7CisJCXJkbXNyX29uX2NwdSh0ZGF0YS0+Y3B1LCB0ZGF0YS0+c3RhdHVzX3JlZywgJmVheCwgJmVkeCk7CisJCXRkYXRhLT52YWxpZCA9IDA7CisJCS8qIENoZWNrIHdoZXRoZXIgdGhlIGRhdGEgaXMgdmFsaWQgKi8KIAkJaWYgKGVheCAmIDB4ODAwMDAwMDApIHsKLQkJCWRhdGEtPnRlbXAgPSBkYXRhLT50am1heCAtICgoKGVheCA+PiAxNikKLQkJCQkJCQkmIDB4N2YpICogMTAwMCk7Ci0JCQlkYXRhLT52YWxpZCA9IDE7Ci0JCX0gZWxzZSB7Ci0JCQlkZXZfZGJnKGRldiwgIlRlbXBlcmF0dXJlIGRhdGEgaW52YWxpZCAoMHgleClcbiIsIGVheCk7CisJCQl0ZGF0YS0+dGVtcCA9IHRkYXRhLT50am1heCAtCisJCQkJCSgoZWF4ID4+IDE2KSAmIDB4N2YpICogMTAwMDsKKwkJCXRkYXRhLT52YWxpZCA9IDE7CiAJCX0KLQkJZGF0YS0+bGFzdF91cGRhdGVkID0gamlmZmllczsKKwkJdGRhdGEtPmxhc3RfdXBkYXRlZCA9IGppZmZpZXM7CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0JcmV0dXJuIGRhdGE7CisJbXV0ZXhfdW5sb2NrKCZ0ZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiB0ZGF0YS0+dmFsaWQgPyBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0ZGF0YS0+dGVtcCkgOiAtRUFHQUlOOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBhZGp1c3RfdGptYXgoc3RydWN0IGNwdWluZm9feDg2ICpjLCB1MzIgaWQsIHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgYWRqdXN0X3RqbWF4KHN0cnVjdCBjcHVpbmZvX3g4NiAqYywgdTMyIGlkLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJLyogVGhlIDEwMEMgaXMgZGVmYXVsdCBmb3IgYm90aCBtb2JpbGUgYW5kIG5vbiBtb2JpbGUgQ1BVcyAqLwogCkBAIC0xNjksOSArMTk1LDggQEAKIAogCS8qIEVhcmx5IGNoaXBzIGhhdmUgbm8gTVNSIGZvciBUak1heCAqLwogCi0JaWYgKChjLT54ODZfbW9kZWwgPT0gMHhmKSAmJiAoYy0+eDg2X21hc2sgPCA0KSkgeworCWlmIChjLT54ODZfbW9kZWwgPT0gMHhmICYmIGMtPng4Nl9tYXNrIDwgNCkKIAkJdXNlbXNyX2VlID0gMDsKLQl9CiAKIAkvKiBBdG9tIENQVXMgKi8KIApAQCAtMTkwLDE0ICsyMTUsMTQgQEAKIAkJcGNpX2Rldl9wdXQoaG9zdF9icmlkZ2UpOwogCX0KIAotCWlmICgoYy0+eDg2X21vZGVsID4gMHhlKSAmJiAodXNlbXNyX2VlKSkgeworCWlmIChjLT54ODZfbW9kZWwgPiAweGUgJiYgdXNlbXNyX2VlKSB7CiAJCXU4IHBsYXRmb3JtX2lkOwogCi0JCS8qIE5vdyB3ZSBjYW4gZGV0ZWN0IHRoZSBtb2JpbGUgQ1BVIHVzaW5nIEludGVsIHByb3ZpZGVkIHRhYmxlCi0JCSAgIGh0dHA6Ly9zb2Z0d2FyZWNvbW11bml0eS5pbnRlbC5jb20vV2lraS9Nb2JpbGl0eS83MjAuaHRtCi0JCSAgIEZvciBDb3JlMiBjb3JlcywgY2hlY2sgTVNSIDB4MTcsIGJpdCAyOCAxID0gTW9iaWxlIENQVQotCQkqLwotCisJCS8qCisJCSAqIE5vdyB3ZSBjYW4gZGV0ZWN0IHRoZSBtb2JpbGUgQ1BVIHVzaW5nIEludGVsIHByb3ZpZGVkIHRhYmxlCisJCSAqIGh0dHA6Ly9zb2Z0d2FyZWNvbW11bml0eS5pbnRlbC5jb20vV2lraS9Nb2JpbGl0eS83MjAuaHRtCisJCSAqIEZvciBDb3JlMiBjb3JlcywgY2hlY2sgTVNSIDB4MTcsIGJpdCAyOCAxID0gTW9iaWxlIENQVQorCQkgKi8KIAkJZXJyID0gcmRtc3Jfc2FmZV9vbl9jcHUoaWQsIDB4MTcsICZlYXgsICZlZHgpOwogCQlpZiAoZXJyKSB7CiAJCQlkZXZfd2FybihkZXYsCkBAIC0yMDUsMjAgKzIzMCwyNiBAQAogCQkJCSAiIENQVVxuIik7CiAJCQl1c2Vtc3JfZWUgPSAwOwogCQl9IGVsc2UgaWYgKGMtPng4Nl9tb2RlbCA8IDB4MTcgJiYgIShlYXggJiAweDEwMDAwMDAwKSkgewotCQkJLyogVHJ1c3QgYml0IDI4IHVwIHRvIFBlbnJ5biwgSSBjb3VsZCBub3QgZmluZCBhbnkKLQkJCSAgIGRvY3VtZW50YXRpb24gb24gdGhhdDsgaWYgeW91IGhhcHBlbiB0byBrbm93Ci0JCQkgICBzb21lb25lIGF0IEludGVsIHBsZWFzZSBhc2sgKi8KKwkJCS8qCisJCQkgKiBUcnVzdCBiaXQgMjggdXAgdG8gUGVucnluLCBJIGNvdWxkIG5vdCBmaW5kIGFueQorCQkJICogZG9jdW1lbnRhdGlvbiBvbiB0aGF0OyBpZiB5b3UgaGFwcGVuIHRvIGtub3cKKwkJCSAqIHNvbWVvbmUgYXQgSW50ZWwgcGxlYXNlIGFzaworCQkJICovCiAJCQl1c2Vtc3JfZWUgPSAwOwogCQl9IGVsc2UgewogCQkJLyogUGxhdGZvcm0gSUQgYml0cyA1Mjo1MCAoRURYIHN0YXJ0cyBhdCBiaXQgMzIpICovCiAJCQlwbGF0Zm9ybV9pZCA9IChlZHggPj4gMTgpICYgMHg3OwogCi0JCQkvKiBNb2JpbGUgUGVucnluIENQVSBzZWVtcyB0byBiZSBwbGF0Zm9ybSBJRCA3IG9yIDUKLQkJCSAgKGd1ZXNzd29yaykgKi8KLQkJCWlmICgoYy0+eDg2X21vZGVsID09IDB4MTcpICYmCi0JCQkgICAgKChwbGF0Zm9ybV9pZCA9PSA1KSB8fCAocGxhdGZvcm1faWQgPT0gNykpKSB7Ci0JCQkJLyogSWYgTVNSIEVFIGJpdCBpcyBzZXQsIHNldCBpdCB0byA5MCBkZWdyZWVzIEMsCi0JCQkJICAgb3RoZXJ3aXNlIDEwNSBkZWdyZWVzIEMgKi8KKwkJCS8qCisJCQkgKiBNb2JpbGUgUGVucnluIENQVSBzZWVtcyB0byBiZSBwbGF0Zm9ybSBJRCA3IG9yIDUKKwkJCSAqIChndWVzc3dvcmspCisJCQkgKi8KKwkJCWlmIChjLT54ODZfbW9kZWwgPT0gMHgxNyAmJgorCQkJICAgIChwbGF0Zm9ybV9pZCA9PSA1IHx8IHBsYXRmb3JtX2lkID09IDcpKSB7CisJCQkJLyoKKwkJCQkgKiBJZiBNU1IgRUUgYml0IGlzIHNldCwgc2V0IGl0IHRvIDkwIGRlZ3JlZXMgQywKKwkJCQkgKiBvdGhlcndpc2UgMTA1IGRlZ3JlZXMgQworCQkJCSAqLwogCQkJCXRqbWF4X2VlID0gOTAwMDA7CiAJCQkJdGptYXggPSAxMDUwMDA7CiAJCQl9CkBAIC0yMjYsNyArMjU3LDYgQEAKIAl9CiAKIAlpZiAodXNlbXNyX2VlKSB7Ci0KIAkJZXJyID0gcmRtc3Jfc2FmZV9vbl9jcHUoaWQsIDB4ZWUsICZlYXgsICZlZHgpOwogCQlpZiAoZXJyKSB7CiAJCQlkZXZfd2FybihkZXYsCkBAIC0yMzUsMjUgKzI2NSwyOCBAQAogCQl9IGVsc2UgaWYgKGVheCAmIDB4NDAwMDAwMDApIHsKIAkJCXRqbWF4ID0gdGptYXhfZWU7CiAJCX0KLQkvKiBpZiB3ZSBkb250IHVzZSBtc3IgRUUgaXQgbWVhbnMgd2UgYXJlIGRlc2t0b3AgQ1BVICh3aXRoIGV4ZWNlcHRpb24KLQkgICBvZiBBdG9tKSAqLwogCX0gZWxzZSBpZiAodGptYXggPT0gMTAwMDAwKSB7CisJCS8qCisJCSAqIElmIHdlIGRvbid0IHVzZSBtc3IgRUUgaXQgbWVhbnMgd2UgYXJlIGRlc2t0b3AgQ1BVCisJCSAqICh3aXRoIGV4ZWNlcHRpb24gb2YgQXRvbSkKKwkJICovCiAJCWRldl93YXJuKGRldiwgIlVzaW5nIHJlbGF0aXZlIHRlbXBlcmF0dXJlIHNjYWxlIVxuIik7CiAJfQogCiAJcmV0dXJuIHRqbWF4OwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBnZXRfdGptYXgoc3RydWN0IGNwdWluZm9feDg2ICpjLCB1MzIgaWQsCi0JCQkgICAgICAgc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBnZXRfdGptYXgoc3RydWN0IGNwdWluZm9feDg2ICpjLCB1MzIgaWQsIHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAkvKiBUaGUgMTAwQyBpcyBkZWZhdWx0IGZvciBib3RoIG1vYmlsZSBhbmQgbm9uIG1vYmlsZSBDUFVzICovCiAJaW50IGVycjsKIAl1MzIgZWF4LCBlZHg7CiAJdTMyIHZhbDsKIAotCS8qIEEgbmV3IGZlYXR1cmUgb2YgY3VycmVudCBJbnRlbChSKSBwcm9jZXNzb3JzLCB0aGUKLQkgICBJQTMyX1RFTVBFUkFUVVJFX1RBUkdFVCBjb250YWlucyB0aGUgVGpNYXggdmFsdWUgKi8KKwkvKgorCSAqIEEgbmV3IGZlYXR1cmUgb2YgY3VycmVudCBJbnRlbChSKSBwcm9jZXNzb3JzLCB0aGUKKwkgKiBJQTMyX1RFTVBFUkFUVVJFX1RBUkdFVCBjb250YWlucyB0aGUgVGpNYXggdmFsdWUKKwkgKi8KIAllcnIgPSByZG1zcl9zYWZlX29uX2NwdShpZCwgTVNSX0lBMzJfVEVNUEVSQVRVUkVfVEFSR0VULCAmZWF4LCAmZWR4KTsKIAlpZiAoZXJyKSB7CiAJCWRldl93YXJuKGRldiwgIlVuYWJsZSB0byByZWFkIFRqTWF4IGZyb20gQ1BVLlxuIik7CkBAIC0yNjMsNyArMjk2LDcgQEAKIAkJICogSWYgdGhlIFRqTWF4IGlzIG5vdCBwbGF1c2libGUsIGFuIGFzc3VtcHRpb24KIAkJICogd2lsbCBiZSB1c2VkCiAJCSAqLwotCQlpZiAoKHZhbCA+IDgwKSAmJiAodmFsIDwgMTIwKSkgeworCQlpZiAodmFsID4gODAgJiYgdmFsIDwgMTIwKSB7CiAJCQlkZXZfaW5mbyhkZXYsICJUak1heCBpcyAlZCBDLlxuIiwgdmFsKTsKIAkJCXJldHVybiB2YWwgKiAxMDAwOwogCQl9CkBAIC0zMDAsMTE1ICszMzMsMjkzIEBACiAJcmRtc3IoTVNSX0lBMzJfVUNPREVfUkVWLCBlYXgsICoodTMyICopZWR4KTsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgY29yZXRlbXBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgZ2V0X3BrZ190am1heCh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGNvcmV0ZW1wX2RhdGEgKmRhdGE7Ci0Jc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKHBkZXYtPmlkKTsKKwlpbnQgZXJyOworCXUzMiBlYXgsIGVkeCwgdmFsOworCisJZXJyID0gcmRtc3Jfc2FmZV9vbl9jcHUoY3B1LCBNU1JfSUEzMl9URU1QRVJBVFVSRV9UQVJHRVQsICZlYXgsICZlZHgpOworCWlmICghZXJyKSB7CisJCXZhbCA9IChlYXggPj4gMTYpICYgMHhmZjsKKwkJaWYgKHZhbCA+IDgwICYmIHZhbCA8IDEyMCkKKwkJCXJldHVybiB2YWwgKiAxMDAwOworCX0KKwlkZXZfd2FybihkZXYsICJVbmFibGUgdG8gcmVhZCBQa2ctVGpNYXggZnJvbSBDUFU6JXVcbiIsIGNwdSk7CisJcmV0dXJuIDEwMDAwMDsgLyogRGVmYXVsdCBUak1heDogMTAwIGRlZ3JlZSBjZWxzaXVzICovCit9CisKK3N0YXRpYyBpbnQgY3JlYXRlX25hbWVfYXR0cihzdHJ1Y3QgcGxhdGZvcm1fZGF0YSAqcGRhdGEsIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlwZGF0YS0+bmFtZV9hdHRyLmF0dHIubmFtZSA9ICJuYW1lIjsKKwlwZGF0YS0+bmFtZV9hdHRyLmF0dHIubW9kZSA9IFNfSVJVR087CisJcGRhdGEtPm5hbWVfYXR0ci5zaG93ID0gc2hvd19uYW1lOworCXJldHVybiBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmcGRhdGEtPm5hbWVfYXR0cik7Cit9CisKK3N0YXRpYyBpbnQgY3JlYXRlX2NvcmVfYXR0cnMoc3RydWN0IHRlbXBfZGF0YSAqdGRhdGEsIHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlpbnQgYXR0cl9ubykKK3sKKwlpbnQgZXJyLCBpOworCXN0YXRpYyBzc2l6ZV90ICgqcmRfcHRyW01BWF9BVFRSU10pIChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKSA9IHsKKwkJCXNob3dfbGFiZWwsIHNob3dfY3JpdF9hbGFybSwgc2hvd190dGFyZ2V0LAorCQkJc2hvd190ZW1wLCBzaG93X3RqbWF4IH07CisJc3RhdGljIGNvbnN0IGNoYXIgKm5hbWVzW01BWF9BVFRSU10gPSB7CisJCQkJCSJ0ZW1wJWRfbGFiZWwiLCAidGVtcCVkX2NyaXRfYWxhcm0iLAorCQkJCQkidGVtcCVkX21heCIsICJ0ZW1wJWRfaW5wdXQiLAorCQkJCQkidGVtcCVkX2NyaXQiIH07CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0FUVFJTOyBpKyspIHsKKwkJc25wcmludGYodGRhdGEtPmF0dHJfbmFtZVtpXSwgQ09SRVRFTVBfTkFNRV9MRU5HVEgsIG5hbWVzW2ldLAorCQkJYXR0cl9ubyk7CisJCXRkYXRhLT5zZF9hdHRyc1tpXS5kZXZfYXR0ci5hdHRyLm5hbWUgPSB0ZGF0YS0+YXR0cl9uYW1lW2ldOworCQl0ZGF0YS0+c2RfYXR0cnNbaV0uZGV2X2F0dHIuYXR0ci5tb2RlID0gU19JUlVHTzsKKwkJdGRhdGEtPnNkX2F0dHJzW2ldLmRldl9hdHRyLnNob3cgPSByZF9wdHJbaV07CisJCXRkYXRhLT5zZF9hdHRyc1tpXS5kZXZfYXR0ci5zdG9yZSA9IE5VTEw7CisJCXRkYXRhLT5zZF9hdHRyc1tpXS5pbmRleCA9IGF0dHJfbm87CisJCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZ0ZGF0YS0+c2RfYXR0cnNbaV0uZGV2X2F0dHIpOworCQlpZiAoZXJyKQorCQkJZ290byBleGl0X2ZyZWU7CisJfQorCXJldHVybiAwOworCitleGl0X2ZyZWU6CisJd2hpbGUgKC0taSA+PSAwKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmdGRhdGEtPnNkX2F0dHJzW2ldLmRldl9hdHRyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfdHRhcmdldChfX3U4IGNwdV9tb2RlbCwgc3RydWN0IHRlbXBfZGF0YSAqdGRhdGEsCisJCQkJc3RydWN0IGRldmljZSAqZGV2KQorewogCWludCBlcnI7CiAJdTMyIGVheCwgZWR4OwogCi0JaWYgKCEoZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjb3JldGVtcF9kYXRhKSwgR0ZQX0tFUk5FTCkpKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIk91dCBvZiBtZW1vcnlcbiIpOwotCQlnb3RvIGV4aXQ7CisJLyoKKwkgKiBJbml0aWFsaXplIHR0YXJnZXQgdmFsdWUuIEV2ZW50dWFsbHkgdGhpcyB3aWxsIGJlCisJICogaW5pdGlhbGl6ZWQgd2l0aCB0aGUgdmFsdWUgZnJvbSBNU1JfSUEzMl9USEVSTV9JTlRFUlJVUFQKKwkgKiByZWdpc3Rlci4gSWYgSUEzMl9URU1QRVJBVFVSRV9UQVJHRVQgaXMgc3VwcG9ydGVkLCB0aGlzCisJICogdmFsdWUgd2lsbCBiZSBvdmVyIHdyaXR0ZW4gYmVsb3cuCisJICogVG8gRG86IFBhdGNoIHRvIGluaXRpYWxpemUgdHRhcmdldCBmcm9tIE1TUl9JQTMyX1RIRVJNX0lOVEVSUlVQVAorCSAqLworCXRkYXRhLT50dGFyZ2V0ID0gdGRhdGEtPnRqbWF4IC0gMjAwMDA7CisKKwkvKgorCSAqIFJlYWQgdGhlIHN0aWxsIHVuZG9jdW1lbnRlZCBJQTMyX1RFTVBFUkFUVVJFX1RBUkdFVC4gSXQgZXhpc3RzCisJICogb24gb2xkZXIgQ1BVcyBidXQgbm90IGluIHRoaXMgcmVnaXN0ZXIsCisJICogQXRvbXMgZG9uJ3QgaGF2ZSBpdCBlaXRoZXIuCisJICovCisJaWYgKGNwdV9tb2RlbCA+IDB4ZSAmJiBjcHVfbW9kZWwgIT0gMHgxYykgeworCQllcnIgPSByZG1zcl9zYWZlX29uX2NwdSh0ZGF0YS0+Y3B1LAorCQkJCU1TUl9JQTMyX1RFTVBFUkFUVVJFX1RBUkdFVCwgJmVheCwgJmVkeCk7CisJCWlmIChlcnIpIHsKKwkJCWRldl93YXJuKGRldiwKKwkJCSJVbmFibGUgdG8gcmVhZCBJQTMyX1RFTVBFUkFUVVJFX1RBUkdFVCBNU1JcbiIpOworCQl9IGVsc2UgeworCQkJdGRhdGEtPnR0YXJnZXQgPSB0ZGF0YS0+dGptYXggLQorCQkJCQkoKGVheCA+PiA4KSAmIDB4ZmYpICogMTAwMDsKKwkJfQogCX0KK30KIAotCWRhdGEtPmlkID0gcGRldi0+aWQ7Ci0jaWZkZWYgQ09ORklHX1NNUAotCWRhdGEtPmNvcmVfaWQgPSBjLT5jcHVfY29yZV9pZDsKLSNlbmRpZgotCWRhdGEtPm5hbWUgPSAiY29yZXRlbXAiOwotCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKK3N0YXRpYyBpbnQgY2hrX3Vjb2RlX3ZlcnNpb24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEocGRldi0+aWQpOworCWludCBlcnI7CisJdTMyIGVkeDsKIAotCS8qIHRlc3QgaWYgd2UgY2FuIGFjY2VzcyB0aGUgVEhFUk1fU1RBVFVTIE1TUiAqLwotCWVyciA9IHJkbXNyX3NhZmVfb25fY3B1KGRhdGEtPmlkLCBNU1JfSUEzMl9USEVSTV9TVEFUVVMsICZlYXgsICZlZHgpOwotCWlmIChlcnIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJIlVuYWJsZSB0byBhY2Nlc3MgVEhFUk1fU1RBVFVTIE1TUiwgZ2l2aW5nIHVwXG4iKTsKLQkJZ290byBleGl0X2ZyZWU7Ci0JfQotCi0JLyogQ2hlY2sgaWYgd2UgaGF2ZSBwcm9ibGVtIHdpdGggZXJyYXRhIEFFMTggb2YgQ29yZSBwcm9jZXNzb3JzOgotCSAgIFJlYWRpbmdzIG1pZ2h0IHN0b3AgdXBkYXRlIHdoZW4gcHJvY2Vzc29yIHZpc2l0ZWQgdG9vIGRlZXAgc2xlZXAsCi0JICAgZml4ZWQgZm9yIHN0ZXBwaW5nIEQwICg2RUMpLgotCSovCi0KLQlpZiAoKGMtPng4Nl9tb2RlbCA9PSAweGUpICYmIChjLT54ODZfbWFzayA8IDB4YykpIHsKKwkvKgorCSAqIENoZWNrIGlmIHdlIGhhdmUgcHJvYmxlbSB3aXRoIGVycmF0YSBBRTE4IG9mIENvcmUgcHJvY2Vzc29yczoKKwkgKiBSZWFkaW5ncyBtaWdodCBzdG9wIHVwZGF0ZSB3aGVuIHByb2Nlc3NvciB2aXNpdGVkIHRvbyBkZWVwIHNsZWVwLAorCSAqIGZpeGVkIGZvciBzdGVwcGluZyBEMCAoNkVDKS4KKwkgKi8KKwlpZiAoYy0+eDg2X21vZGVsID09IDB4ZSAmJiBjLT54ODZfbWFzayA8IDB4YykgewogCQkvKiBjaGVjayBmb3IgbWljcm9jb2RlIHVwZGF0ZSAqLwotCQllcnIgPSBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoZGF0YS0+aWQsIGdldF91Y29kZV9yZXZfb25fY3B1LAorCQllcnIgPSBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUocGRldi0+aWQsIGdldF91Y29kZV9yZXZfb25fY3B1LAogCQkJCQkgICAgICAgJmVkeCwgMSk7CiAJCWlmIChlcnIpIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwKIAkJCQkiQ2Fubm90IGRldGVybWluZSBtaWNyb2NvZGUgcmV2aXNpb24gb2YgIgotCQkJCSJDUFUjJXUgKCVkKSFcbiIsIGRhdGEtPmlkLCBlcnIpOwotCQkJZXJyID0gLUVOT0RFVjsKLQkJCWdvdG8gZXhpdF9mcmVlOworCQkJCSJDUFUjJXUgKCVkKSFcbiIsIHBkZXYtPmlkLCBlcnIpOworCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0gZWxzZSBpZiAoZWR4IDwgMHgzOSkgewotCQkJZXJyID0gLUVOT0RFVjsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwKIAkJCQkiRXJyYXRhIEFFMTggbm90IGZpeGVkLCB1cGRhdGUgQklPUyBvciAiCiAJCQkJIm1pY3JvY29kZSBvZiB0aGUgQ1BVIVxuIik7Ci0JCQlnb3RvIGV4aXRfZnJlZTsKKwkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJfQorCXJldHVybiAwOworfQogCi0JZGF0YS0+dGptYXggPSBnZXRfdGptYXgoYywgZGF0YS0+aWQsICZwZGV2LT5kZXYpOwotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRhdGEpOworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmNvcmV0ZW1wX2dldF9wZGV2KHVuc2lnbmVkIGludCBjcHUpCit7CisJdTE2IHBoeXNfcHJvY19pZCA9IFRPX1BIWVNfSUQoY3B1KTsKKwlzdHJ1Y3QgcGRldl9lbnRyeSAqcDsKKworCW11dGV4X2xvY2soJnBkZXZfbGlzdF9tdXRleCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZwZGV2X2xpc3QsIGxpc3QpCisJCWlmIChwLT5waHlzX3Byb2NfaWQgPT0gcGh5c19wcm9jX2lkKSB7CisJCQltdXRleF91bmxvY2soJnBkZXZfbGlzdF9tdXRleCk7CisJCQlyZXR1cm4gcC0+cGRldjsKKwkJfQorCisJbXV0ZXhfdW5sb2NrKCZwZGV2X2xpc3RfbXV0ZXgpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IHRlbXBfZGF0YSAqaW5pdF90ZW1wX2RhdGEodW5zaWduZWQgaW50IGNwdSwgaW50IHBrZ19mbGFnKQoreworCXN0cnVjdCB0ZW1wX2RhdGEgKnRkYXRhOworCisJdGRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdGVtcF9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0ZGF0YSkKKwkJcmV0dXJuIE5VTEw7CisKKwl0ZGF0YS0+c3RhdHVzX3JlZyA9IHBrZ19mbGFnID8gTVNSX0lBMzJfUEFDS0FHRV9USEVSTV9TVEFUVVMgOgorCQkJCQkJCU1TUl9JQTMyX1RIRVJNX1NUQVRVUzsKKwl0ZGF0YS0+aXNfcGtnX2RhdGEgPSBwa2dfZmxhZzsKKwl0ZGF0YS0+Y3B1ID0gY3B1OworCXRkYXRhLT5jcHVfY29yZV9pZCA9IFRPX0NPUkVfSUQoY3B1KTsKKwltdXRleF9pbml0KCZ0ZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiB0ZGF0YTsKK30KKworc3RhdGljIGludCBjcmVhdGVfY29yZV9kYXRhKHN0cnVjdCBwbGF0Zm9ybV9kYXRhICpwZGF0YSwKKwkJCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCXVuc2lnbmVkIGludCBjcHUsIGludCBwa2dfZmxhZykKK3sKKwlzdHJ1Y3QgdGVtcF9kYXRhICp0ZGF0YTsKKwlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoY3B1KTsKKwl1MzIgZWF4LCBlZHg7CisJaW50IGVyciwgYXR0cl9ubzsKIAogCS8qCi0JICogcmVhZCB0aGUgc3RpbGwgdW5kb2N1bWVudGVkIElBMzJfVEVNUEVSQVRVUkVfVEFSR0VULiBJdCBleGlzdHMKLQkgKiBvbiBvbGRlciBDUFVzIGJ1dCBub3QgaW4gdGhpcyByZWdpc3RlciwKLQkgKiBBdG9tcyBkb24ndCBoYXZlIGl0IGVpdGhlci4KKwkgKiBGaW5kIGF0dHIgbnVtYmVyIGZvciBzeXNmczoKKwkgKiBXZSBtYXAgdGhlIGF0dHIgbnVtYmVyIHRvIGNvcmUgaWQgb2YgdGhlIENQVQorCSAqIFRoZSBhdHRyIG51bWJlciBpcyBhbHdheXMgY29yZSBpZCArIDIKKwkgKiBUaGUgUGtndGVtcCB3aWxsIGFsd2F5cyBzaG93IHVwIGFzIHRlbXAxXyosIGlmIGF2YWlsYWJsZQogCSAqLworCWF0dHJfbm8gPSBwa2dfZmxhZyA/IDEgOiBUT19BVFRSX05PKGNwdSk7CiAKLQlpZiAoKGMtPng4Nl9tb2RlbCA+IDB4ZSkgJiYgKGMtPng4Nl9tb2RlbCAhPSAweDFjKSkgewotCQllcnIgPSByZG1zcl9zYWZlX29uX2NwdShkYXRhLT5pZCwgTVNSX0lBMzJfVEVNUEVSQVRVUkVfVEFSR0VULAotCQkgICAgJmVheCwgJmVkeCk7Ci0JCWlmIChlcnIpIHsKLQkJCWRldl93YXJuKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gcmVhZCIKLQkJCQkJIiBJQTMyX1RFTVBFUkFUVVJFX1RBUkdFVCBNU1JcbiIpOwotCQl9IGVsc2UgewotCQkJZGF0YS0+dHRhcmdldCA9IGRhdGEtPnRqbWF4IC0KLQkJCQkJKCgoZWF4ID4+IDgpICYgMHhmZikgKiAxMDAwKTsKLQkJCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LAotCQkJCQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heC5kZXZfYXR0cik7Ci0JCQlpZiAoZXJyKQotCQkJCWdvdG8gZXhpdF9mcmVlOwotCQl9Ci0JfQorCWlmIChhdHRyX25vID4gTUFYX0NPUkVfREFUQSAtIDEpCisJCXJldHVybiAtRVJBTkdFOwogCi0JaWYgKChlcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmY29yZXRlbXBfZ3JvdXApKSkKLQkJZ290byBleGl0X2RldjsKKwkvKiBTa2lwIGlmIGl0IGlzIGEgSFQgY29yZSwgTm90IGFuIGVycm9yICovCisJaWYgKHBkYXRhLT5jb3JlX2RhdGFbYXR0cl9ub10gIT0gTlVMTCkKKwkJcmV0dXJuIDA7CiAKLQlkYXRhLT5od21vbl9kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJnBkZXYtPmRldik7Ci0JaWYgKElTX0VSUihkYXRhLT5od21vbl9kZXYpKSB7Ci0JCWVyciA9IFBUUl9FUlIoZGF0YS0+aHdtb25fZGV2KTsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2xhc3MgcmVnaXN0cmF0aW9uIGZhaWxlZCAoJWQpXG4iLAotCQkJZXJyKTsKLQkJZ290byBleGl0X2NsYXNzOwotCX0KKwl0ZGF0YSA9IGluaXRfdGVtcF9kYXRhKGNwdSwgcGtnX2ZsYWcpOworCWlmICghdGRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogVGVzdCBpZiB3ZSBjYW4gYWNjZXNzIHRoZSBzdGF0dXMgcmVnaXN0ZXIgKi8KKwllcnIgPSByZG1zcl9zYWZlX29uX2NwdShjcHUsIHRkYXRhLT5zdGF0dXNfcmVnLCAmZWF4LCAmZWR4KTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXRfZnJlZTsKKworCS8qIFdlIGNhbiBhY2Nlc3Mgc3RhdHVzIHJlZ2lzdGVyLiBHZXQgQ3JpdGljYWwgVGVtcGVyYXR1cmUgKi8KKwlpZiAocGtnX2ZsYWcpCisJCXRkYXRhLT50am1heCA9IGdldF9wa2dfdGptYXgocGRldi0+aWQsICZwZGV2LT5kZXYpOworCWVsc2UKKwkJdGRhdGEtPnRqbWF4ID0gZ2V0X3RqbWF4KGMsIGNwdSwgJnBkZXYtPmRldik7CisKKwl1cGRhdGVfdHRhcmdldChjLT54ODZfbW9kZWwsIHRkYXRhLCAmcGRldi0+ZGV2KTsKKwlwZGF0YS0+Y29yZV9kYXRhW2F0dHJfbm9dID0gdGRhdGE7CisKKwkvKiBDcmVhdGUgc3lzZnMgaW50ZXJmYWNlcyAqLworCWVyciA9IGNyZWF0ZV9jb3JlX2F0dHJzKHRkYXRhLCAmcGRldi0+ZGV2LCBhdHRyX25vKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXRfZnJlZTsKIAogCXJldHVybiAwOwotCi1leGl0X2NsYXNzOgotCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZjb3JldGVtcF9ncm91cCk7Ci1leGl0X2RldjoKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXguZGV2X2F0dHIpOwogZXhpdF9mcmVlOgotCWtmcmVlKGRhdGEpOwotZXhpdDoKKwlrZnJlZSh0ZGF0YSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgY29yZXRlbXBfYWRkX2NvcmUodW5zaWduZWQgaW50IGNwdSwgaW50IHBrZ19mbGFnKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gY29yZXRlbXBfZ2V0X3BkZXYoY3B1KTsKKwlpbnQgZXJyOworCisJaWYgKCFwZGV2KQorCQlyZXR1cm47CisKKwlwZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJZXJyID0gY3JlYXRlX2NvcmVfZGF0YShwZGF0YSwgcGRldiwgY3B1LCBwa2dfZmxhZyk7CisJaWYgKGVycikKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQWRkaW5nIENvcmUgJXUgZmFpbGVkXG4iLCBjcHUpOworfQorCitzdGF0aWMgdm9pZCBjb3JldGVtcF9yZW1vdmVfY29yZShzdHJ1Y3QgcGxhdGZvcm1fZGF0YSAqcGRhdGEsCisJCQkJc3RydWN0IGRldmljZSAqZGV2LCBpbnQgaW5keCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgdGVtcF9kYXRhICp0ZGF0YSA9IHBkYXRhLT5jb3JlX2RhdGFbaW5keF07CisKKwkvKiBSZW1vdmUgdGhlIHN5c2ZzIGF0dHJpYnV0ZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0FUVFJTOyBpKyspCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZ0ZGF0YS0+c2RfYXR0cnNbaV0uZGV2X2F0dHIpOworCisJa2ZyZWUocGRhdGEtPmNvcmVfZGF0YVtpbmR4XSk7CisJcGRhdGEtPmNvcmVfZGF0YVtpbmR4XSA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGNvcmV0ZW1wX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RhdGEgKnBkYXRhOworCWludCBlcnI7CisKKwkvKiBDaGVjayB0aGUgbWljcm9jb2RlIHZlcnNpb24gb2YgdGhlIENQVSAqLworCWVyciA9IGNoa191Y29kZV92ZXJzaW9uKHBkZXYpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBJbml0aWFsaXplIHRoZSBwZXItcGFja2FnZSBkYXRhIHN0cnVjdHVyZXMgKi8KKwlwZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwbGF0Zm9ybV9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllcnIgPSBjcmVhdGVfbmFtZV9hdHRyKHBkYXRhLCAmcGRldi0+ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXRfZnJlZTsKKworCXBkYXRhLT5waHlzX3Byb2NfaWQgPSBUT19QSFlTX0lEKHBkZXYtPmlkKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwZGF0YSk7CisKKwlwZGF0YS0+aHdtb25fZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5kZXYpOworCWlmIChJU19FUlIocGRhdGEtPmh3bW9uX2RldikpIHsKKwkJZXJyID0gUFRSX0VSUihwZGF0YS0+aHdtb25fZGV2KTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2xhc3MgcmVnaXN0cmF0aW9uIGZhaWxlZCAoJWQpXG4iLCBlcnIpOworCQlnb3RvIGV4aXRfbmFtZTsKKwl9CisJcmV0dXJuIDA7CisKK2V4aXRfbmFtZToKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJnBkYXRhLT5uYW1lX2F0dHIpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworZXhpdF9mcmVlOgorCWtmcmVlKHBkYXRhKTsKIAlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBjb3JldGVtcF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgY29yZXRlbXBfZGF0YSAqZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBwbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBpOwogCi0JaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+aHdtb25fZGV2KTsKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmY29yZXRlbXBfZ3JvdXApOwotCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heC5kZXZfYXR0cik7CisJZm9yIChpID0gTUFYX0NPUkVfREFUQSAtIDE7IGkgPj0gMDsgLS1pKQorCQlpZiAocGRhdGEtPmNvcmVfZGF0YVtpXSkKKwkJCWNvcmV0ZW1wX3JlbW92ZV9jb3JlKHBkYXRhLCAmcGRldi0+ZGV2LCBpKTsKKworCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmcGRhdGEtPm5hbWVfYXR0cik7CisJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIocGRhdGEtPmh3bW9uX2Rldik7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0Ja2ZyZWUoZGF0YSk7CisJa2ZyZWUocGRhdGEpOwogCXJldHVybiAwOwogfQogCkBAIC00MjEsNTAgKzYzMiwxNCBAQAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChjb3JldGVtcF9yZW1vdmUpLAogfTsKIAotc3RydWN0IHBkZXZfZW50cnkgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCXVuc2lnbmVkIGludCBjcHU7Ci0jaWZkZWYgQ09ORklHX1NNUAotCXUxNiBwaHlzX3Byb2NfaWQ7Ci0JdTE2IGNwdV9jb3JlX2lkOwotI2VuZGlmCi19OwotCi1zdGF0aWMgTElTVF9IRUFEKHBkZXZfbGlzdCk7Ci1zdGF0aWMgREVGSU5FX01VVEVYKHBkZXZfbGlzdF9tdXRleCk7Ci0KIHN0YXRpYyBpbnQgX19jcHVpbml0IGNvcmV0ZW1wX2RldmljZV9hZGQodW5zaWduZWQgaW50IGNwdSkKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJc3RydWN0IHBkZXZfZW50cnkgKnBkZXZfZW50cnk7Ci0Jc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKGNwdSk7Ci0KLQkvKgotCSAqIENQVUlELjA2SC5FQVhbMF0gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIENQVSBoYXMgdGhlcm1hbAotCSAqIHNlbnNvcnMuIFdlIGNoZWNrIHRoaXMgYml0IG9ubHksIGFsbCB0aGUgZWFybHkgQ1BVcwotCSAqIHdpdGhvdXQgdGhlcm1hbCBzZW5zb3JzIHdpbGwgYmUgZmlsdGVyZWQgb3V0LgotCSAqLwotCWlmICghY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9EVFMpKSB7Ci0JCXByX2luZm8oIkNQVSAobW9kZWw9MHgleCkgaGFzIG5vIHRoZXJtYWwgc2Vuc29yXG4iLAotCQkJYy0+eDg2X21vZGVsKTsKLQkJcmV0dXJuIDA7Ci0JfQogCiAJbXV0ZXhfbG9jaygmcGRldl9saXN0X211dGV4KTsKIAotI2lmZGVmIENPTkZJR19TTVAKLQkvKiBTa2lwIHNlY29uZCBIVCBlbnRyeSBvZiBlYWNoIGNvcmUgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBkZXZfZW50cnksICZwZGV2X2xpc3QsIGxpc3QpIHsKLQkJaWYgKGMtPnBoeXNfcHJvY19pZCA9PSBwZGV2X2VudHJ5LT5waHlzX3Byb2NfaWQgJiYKLQkJICAgIGMtPmNwdV9jb3JlX2lkID09IHBkZXZfZW50cnktPmNwdV9jb3JlX2lkKSB7Ci0JCQllcnIgPSAwOwkvKiBOb3QgYW4gZXJyb3IgKi8KLQkJCWdvdG8gZXhpdDsKLQkJfQotCX0KLSNlbmRpZgotCiAJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhEUlZOQU1FLCBjcHUpOwogCWlmICghcGRldikgewogCQllcnIgPSAtRU5PTUVNOwpAQCAtNDg2LDEwICs2NjEsOSBAQAogCiAJcGRldl9lbnRyeS0+cGRldiA9IHBkZXY7CiAJcGRldl9lbnRyeS0+Y3B1ID0gY3B1OwotI2lmZGVmIENPTkZJR19TTVAKLQlwZGV2X2VudHJ5LT5waHlzX3Byb2NfaWQgPSBjLT5waHlzX3Byb2NfaWQ7Ci0JcGRldl9lbnRyeS0+Y3B1X2NvcmVfaWQgPSBjLT5jcHVfY29yZV9pZDsKLSNlbmRpZgorCXBkZXZfZW50cnktPnBoeXNfcHJvY19pZCA9IFRPX1BIWVNfSUQoY3B1KTsKKwlwZGV2X2VudHJ5LT5jcHVfY29yZV9pZCA9IFRPX0NPUkVfSUQoY3B1KTsKKwogCWxpc3RfYWRkX3RhaWwoJnBkZXZfZW50cnktPmxpc3QsICZwZGV2X2xpc3QpOwogCW11dGV4X3VubG9jaygmcGRldl9saXN0X211dGV4KTsKIApAQCAtNTA0LDI4ICs2NzgsMTA4IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgX19jcHVpbml0IGNvcmV0ZW1wX2RldmljZV9yZW1vdmUodW5zaWduZWQgaW50IGNwdSkKK3N0YXRpYyB2b2lkIGNvcmV0ZW1wX2RldmljZV9yZW1vdmUodW5zaWduZWQgaW50IGNwdSkKIHsKLQlzdHJ1Y3QgcGRldl9lbnRyeSAqcDsKLQl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgcGRldl9lbnRyeSAqcCwgKm47CisJdTE2IHBoeXNfcHJvY19pZCA9IFRPX1BIWVNfSUQoY3B1KTsKIAogCW11dGV4X2xvY2soJnBkZXZfbGlzdF9tdXRleCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmcGRldl9saXN0LCBsaXN0KSB7Ci0JCWlmIChwLT5jcHUgIT0gY3B1KQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCAmcGRldl9saXN0LCBsaXN0KSB7CisJCWlmIChwLT5waHlzX3Byb2NfaWQgIT0gcGh5c19wcm9jX2lkKQogCQkJY29udGludWU7Ci0KIAkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocC0+cGRldik7CiAJCWxpc3RfZGVsKCZwLT5saXN0KTsKLQkJbXV0ZXhfdW5sb2NrKCZwZGV2X2xpc3RfbXV0ZXgpOwogCQlrZnJlZShwKTsKLQkJZm9yX2VhY2hfY3B1KGksIGNwdV9zaWJsaW5nX21hc2soY3B1KSkKLQkJCWlmIChpICE9IGNwdSAmJiAhY29yZXRlbXBfZGV2aWNlX2FkZChpKSkKLQkJCQlicmVhazsKLQkJcmV0dXJuOwogCX0KIAltdXRleF91bmxvY2soJnBkZXZfbGlzdF9tdXRleCk7CiB9CiAKK3N0YXRpYyBib29sIGlzX2FueV9jb3JlX29ubGluZShzdHJ1Y3QgcGxhdGZvcm1fZGF0YSAqcGRhdGEpCit7CisJaW50IGk7CisKKwkvKiBGaW5kIG9ubGluZSBjb3JlcywgZXhjZXB0IHBrZ3RlbXAgZGF0YSAqLworCWZvciAoaSA9IE1BWF9DT1JFX0RBVEEgLSAxOyBpID49IDA7IC0taSkgeworCQlpZiAocGRhdGEtPmNvcmVfZGF0YVtpXSAmJgorCQkJIXBkYXRhLT5jb3JlX2RhdGFbaV0tPmlzX3BrZ19kYXRhKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBnZXRfY29yZV9vbmxpbmUodW5zaWduZWQgaW50IGNwdSkKK3sKKwlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoY3B1KTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gY29yZXRlbXBfZ2V0X3BkZXYoY3B1KTsKKwlpbnQgZXJyOworCisJLyoKKwkgKiBDUFVJRC4wNkguRUFYWzBdIGluZGljYXRlcyB3aGV0aGVyIHRoZSBDUFUgaGFzIHRoZXJtYWwKKwkgKiBzZW5zb3JzLiBXZSBjaGVjayB0aGlzIGJpdCBvbmx5LCBhbGwgdGhlIGVhcmx5IENQVXMKKwkgKiB3aXRob3V0IHRoZXJtYWwgc2Vuc29ycyB3aWxsIGJlIGZpbHRlcmVkIG91dC4KKwkgKi8KKwlpZiAoIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfRFRTKSkKKwkJcmV0dXJuOworCisJaWYgKCFwZGV2KSB7CisJCS8qCisJCSAqIEFscmlnaHQsIHdlIGhhdmUgRFRTIHN1cHBvcnQuCisJCSAqIFdlIGFyZSBicmluZ2luZyB0aGUgX2ZpcnN0XyBjb3JlIGluIHRoaXMgcGtnCisJCSAqIG9ubGluZS4gU28sIGluaXRpYWxpemUgcGVyLXBrZyBkYXRhIHN0cnVjdHVyZXMgYW5kCisJCSAqIHRoZW4gYnJpbmcgdGhpcyBjb3JlIG9ubGluZS4KKwkJICovCisJCWVyciA9IGNvcmV0ZW1wX2RldmljZV9hZGQoY3B1KTsKKwkJaWYgKGVycikKKwkJCXJldHVybjsKKwkJLyoKKwkJICogQ2hlY2sgd2hldGhlciBwa2d0ZW1wIHN1cHBvcnQgaXMgYXZhaWxhYmxlLgorCQkgKiBJZiBzbywgYWRkIGludGVyZmFjZXMgZm9yIHBrZ3RlbXAuCisJCSAqLworCQlpZiAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9QVFMpKQorCQkJY29yZXRlbXBfYWRkX2NvcmUoY3B1LCAxKTsKKwl9CisJLyoKKwkgKiBQaHlzaWNhbCBDUFUgZGV2aWNlIGFscmVhZHkgZXhpc3RzLgorCSAqIFNvLCBqdXN0IGFkZCBpbnRlcmZhY2VzIGZvciB0aGlzIGNvcmUuCisJICovCisJY29yZXRlbXBfYWRkX2NvcmUoY3B1LCAwKTsKK30KKworc3RhdGljIHZvaWQgX19jcHVpbml0IHB1dF9jb3JlX29mZmxpbmUodW5zaWduZWQgaW50IGNwdSkKK3sKKwlpbnQgaSwgaW5keDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGNvcmV0ZW1wX2dldF9wZGV2KGNwdSk7CisKKwkvKiBJZiB0aGUgcGh5c2ljYWwgQ1BVIGRldmljZSBkb2VzIG5vdCBleGlzdCwganVzdCByZXR1cm4gKi8KKwlpZiAoIXBkZXYpCisJCXJldHVybjsKKworCXBkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpbmR4ID0gVE9fQVRUUl9OTyhjcHUpOworCisJaWYgKHBkYXRhLT5jb3JlX2RhdGFbaW5keF0gJiYgcGRhdGEtPmNvcmVfZGF0YVtpbmR4XS0+Y3B1ID09IGNwdSkKKwkJY29yZXRlbXBfcmVtb3ZlX2NvcmUocGRhdGEsICZwZGV2LT5kZXYsIGluZHgpOworCisJLyogT25saW5lIHRoZSBIVCB2ZXJzaW9uIG9mIHRoaXMgY29yZSwgaWYgYW55ICovCisJZm9yX2VhY2hfc2libGluZyhpLCBjcHUpIHsKKwkJaWYgKGkgIT0gY3B1KSB7CisJCQlnZXRfY29yZV9vbmxpbmUoaSk7CisJCQlicmVhazsKKwkJfQorCX0KKwkvKgorCSAqIElmIGFsbCBjb3JlcyBpbiB0aGlzIHBrZyBhcmUgb2ZmbGluZSwgcmVtb3ZlIHRoZSBkZXZpY2UuCisJICogY29yZXRlbXBfZGV2aWNlX3JlbW92ZSBjYWxscyB1bnJlZ2lzdGVyX3BsYXRmb3JtX2RldmljZSwKKwkgKiB3aGljaCBpbiB0dXJuIGNhbGxzIGNvcmV0ZW1wX3JlbW92ZS4gVGhpcyByZW1vdmVzIHRoZQorCSAqIHBrZ3RlbXAgZW50cnkgYW5kIGRvZXMgb3RoZXIgY2xlYW4gdXBzLgorCSAqLworCWlmICghaXNfYW55X2NvcmVfb25saW5lKHBkYXRhKSkKKwkJY29yZXRlbXBfZGV2aWNlX3JlbW92ZShjcHUpOworfQorCiBzdGF0aWMgaW50IF9fY3B1aW5pdCBjb3JldGVtcF9jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCiAJCQkJIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQogewpAQCAtNTM0LDEwICs3ODgsMTAgQEAKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgQ1BVX09OTElORToKIAljYXNlIENQVV9ET1dOX0ZBSUxFRDoKLQkJY29yZXRlbXBfZGV2aWNlX2FkZChjcHUpOworCQlnZXRfY29yZV9vbmxpbmUoY3B1KTsKIAkJYnJlYWs7CiAJY2FzZSBDUFVfRE9XTl9QUkVQQVJFOgotCQljb3JldGVtcF9kZXZpY2VfcmVtb3ZlKGNwdSk7CisJCXB1dF9jb3JlX29mZmxpbmUoY3B1KTsKIAkJYnJlYWs7CiAJfQogCXJldHVybiBOT1RJRllfT0s7CkBAIC01NjAsNyArODE0LDcgQEAKIAkJZ290byBleGl0OwogCiAJZm9yX2VhY2hfb25saW5lX2NwdShpKQotCQljb3JldGVtcF9kZXZpY2VfYWRkKGkpOworCQlnZXRfY29yZV9vbmxpbmUoaSk7CiAKICNpZm5kZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAJaWYgKGxpc3RfZW1wdHkoJnBkZXZfbGlzdCkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbWF4MTYwNjUuYyBiL2RyaXZlcnMvaHdtb24vbWF4MTYwNjUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTRhMjRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9od21vbi9tYXgxNjA2NS5jCkBAIC0wLDAgKzEsNzE3IEBACisvKgorICogRHJpdmVyIGZvcgorICogIE1heGltIE1BWDE2MDY1L01BWDE2MDY2IDEyLUNoYW5uZWwvOC1DaGFubmVsLCBGbGFzaC1Db25maWd1cmFibGUKKyAqICBTeXN0ZW0gTWFuYWdlcnMgd2l0aCBOb252b2xhdGlsZSBGYXVsdCBSZWdpc3RlcnMKKyAqICBNYXhpbSBNQVgxNjA2Ny9NQVgxNjA2OCA2LUNoYW5uZWwsIEZsYXNoLUNvbmZpZ3VyYWJsZSBTeXN0ZW0gTWFuYWdlcnMKKyAqICB3aXRoIE5vbnZvbGF0aWxlIEZhdWx0IFJlZ2lzdGVycworICogIE1heGltIE1BWDE2MDcwL01BWDE2MDcxIDEyLUNoYW5uZWwvOC1DaGFubmVsLCBGbGFzaC1Db25maWd1cmFibGUgU3lzdGVtCisgKiAgTW9uaXRvcnMgd2l0aCBOb252b2xhdGlsZSBGYXVsdCBSZWdpc3RlcnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorCitlbnVtIGNoaXBzIHsgbWF4MTYwNjUsIG1heDE2MDY2LCBtYXgxNjA2NywgbWF4MTYwNjgsIG1heDE2MDcwLCBtYXgxNjA3MSB9OworCisvKgorICogUmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgTUFYMTYwNjVfQURDKHgpCQkoKHgpICogMikKKworI2RlZmluZSBNQVgxNjA2NV9DVVJSX1NFTlNFCTB4MTgKKyNkZWZpbmUgTUFYMTYwNjVfQ1NQX0FEQwkweDE5CisjZGVmaW5lIE1BWDE2MDY1X0ZBVUxUKHgpCSgweDFiICsgKHgpKQorI2RlZmluZSBNQVgxNjA2NV9TQ0FMRSh4KQkoMHg0MyArICh4KSkKKyNkZWZpbmUgTUFYMTYwNjVfQ1VSUl9DT05UUk9MCTB4NDcKKyNkZWZpbmUgTUFYMTYwNjVfTElNSVQobCwgeCkJKDB4NDggKyAobCkgKyAoeCkgKiAzKQkvKgorCQkJCQkJCSAqIGw6IGxpbWl0CisJCQkJCQkJICogIDA6IG1pbi9tYXgKKwkJCQkJCQkgKiAgMTogY3JpdAorCQkJCQkJCSAqICAyOiBsY3JpdAorCQkJCQkJCSAqIHg6IEFEQyBpbmRleAorCQkJCQkJCSAqLworCisjZGVmaW5lIE1BWDE2MDY1X1NXX0VOQUJMRQkweDczCisKKyNkZWZpbmUgTUFYMTYwNjVfV0FSTklOR19PVgkoMSA8PCAzKSAvKiBTZXQgaWYgc2Vjb25kYXJ5IHRocmVzaG9sZCBpcyBPVgorCQkJCQkgICAgd2FybmluZyAqLworCisjZGVmaW5lIE1BWDE2MDY1X0NVUlJfRU5BQkxFCSgxIDw8IDApCisKKyNkZWZpbmUgTUFYMTYwNjVfTlVNX0xJTUlUCTMKKyNkZWZpbmUgTUFYMTYwNjVfTlVNX0FEQwkxMgkvKiBtYXhpbXVtIG51bWJlciBvZiBBREMgY2hhbm5lbHMgKi8KKworc3RhdGljIGNvbnN0IGludCBtYXgxNjA2NV9udW1fYWRjW10gPSB7CisJW21heDE2MDY1XSA9IDEyLAorCVttYXgxNjA2Nl0gPSA4LAorCVttYXgxNjA2N10gPSA2LAorCVttYXgxNjA2OF0gPSA2LAorCVttYXgxNjA3MF0gPSAxMiwKKwlbbWF4MTYwNzFdID0gOCwKK307CisKK3N0YXRpYyBjb25zdCBib29sIG1heDE2MDY1X2hhdmVfc2Vjb25kYXJ5W10gPSB7CisJW21heDE2MDY1XSA9IHRydWUsCisJW21heDE2MDY2XSA9IHRydWUsCisJW21heDE2MDY3XSA9IGZhbHNlLAorCVttYXgxNjA2OF0gPSBmYWxzZSwKKwlbbWF4MTYwNzBdID0gdHJ1ZSwKKwlbbWF4MTYwNzFdID0gdHJ1ZSwKK307CisKK3N0YXRpYyBjb25zdCBib29sIG1heDE2MDY1X2hhdmVfY3VycmVudFtdID0geworCVttYXgxNjA2NV0gPSB0cnVlLAorCVttYXgxNjA2Nl0gPSB0cnVlLAorCVttYXgxNjA2N10gPSBmYWxzZSwKKwlbbWF4MTYwNjhdID0gZmFsc2UsCisJW21heDE2MDcwXSA9IHRydWUsCisJW21heDE2MDcxXSA9IHRydWUsCit9OworCitzdHJ1Y3QgbWF4MTYwNjVfZGF0YSB7CisJZW51bSBjaGlwcyB0eXBlOworCXN0cnVjdCBkZXZpY2UgKmh3bW9uX2RldjsKKwlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7CisJYm9vbCB2YWxpZDsKKwl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsgLyogaW4gamlmZmllcyAqLworCWludCBudW1fYWRjOworCWJvb2wgaGF2ZV9jdXJyZW50OworCWludCBjdXJyX2dhaW47CisJLyogbGltaXRzIGFyZSBpbiBtViAqLworCWludCBsaW1pdFtNQVgxNjA2NV9OVU1fTElNSVRdW01BWDE2MDY1X05VTV9BRENdOworCWludCByYW5nZVtNQVgxNjA2NV9OVU1fQURDICsgMV07Lyogdm9sdGFnZSByYW5nZSAqLworCWludCBhZGNbTUFYMTYwNjVfTlVNX0FEQyArIDFdOwkvKiBhZGMgdmFsdWVzIChyYXcpIGluY2x1ZGluZyBjc3BfYWRjICovCisJaW50IGN1cnJfc2Vuc2U7CisJaW50IGZhdWx0WzJdOworfTsKKworc3RhdGljIGNvbnN0IGludCBtYXgxNjA2NV9hZGNfcmFuZ2VbXSA9IHsgNTU2MCwgMjc4MCwgMTM5MCwgMCB9Oworc3RhdGljIGNvbnN0IGludCBtYXgxNjA2NV9jc3BfYWRjX3JhbmdlW10gPSB7IDcwMDAsIDE0MDAwIH07CisKKy8qIEFEQyByZWdpc3RlcnMgaGF2ZSAxMCBiaXQgcmVzb2x1dGlvbi4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IEFEQ19UT19NVihpbnQgYWRjLCBpbnQgcmFuZ2UpCit7CisJcmV0dXJuIChhZGMgKiByYW5nZSkgLyAxMDI0OworfQorCisvKgorICogTGltaXQgcmVnaXN0ZXJzIGhhdmUgOCBiaXQgcmVzb2x1dGlvbiBhbmQgbWF0Y2ggdXBwZXIgOCBiaXRzIG9mIEFEQworICogcmVnaXN0ZXJzLgorICovCitzdGF0aWMgaW5saW5lIGludCBMSU1JVF9UT19NVihpbnQgbGltaXQsIGludCByYW5nZSkKK3sKKwlyZXR1cm4gbGltaXQgKiByYW5nZSAvIDI1NjsKK30KKworc3RhdGljIGlubGluZSBpbnQgTVZfVE9fTElNSVQoaW50IG12LCBpbnQgcmFuZ2UpCit7CisJcmV0dXJuIFNFTlNPUlNfTElNSVQoRElWX1JPVU5EX0NMT1NFU1QobXYgKiAyNTYsIHJhbmdlKSwgMCwgMjU1KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgQURDX1RPX0NVUlIoaW50IGFkYywgaW50IGdhaW4pCit7CisJcmV0dXJuIGFkYyAqIDE0MDAwMDAgLyBnYWluICogMjU1OworfQorCisvKgorICogbWF4MTYwNjVfcmVhZF9hZGMoKQorICoKKyAqIFJlYWQgMTYgYml0IHZhbHVlIGZyb20gPHJlZz4sIDxyZWcrMT4uCisgKiBVcHBlciA4IGJpdHMgYXJlIGluIDxyZWc+LCBsb3dlciAyIGJpdHMgYXJlIGluIGJpdHMgNzo2IG9mIDxyZWcrMT4uCisgKi8KK3N0YXRpYyBpbnQgbWF4MTYwNjVfcmVhZF9hZGMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHJlZykKK3sKKwlpbnQgcnY7CisKKwlydiA9IGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShjbGllbnQsIHJlZyk7CisJaWYgKHVubGlrZWx5KHJ2IDwgMCkpCisJCXJldHVybiBydjsKKwlyZXR1cm4gKChydiAmIDB4ZmYpIDw8IDIpIHwgKChydiA+PiAxNCkgJiAweDAzKTsKK30KKworc3RhdGljIHN0cnVjdCBtYXgxNjA2NV9kYXRhICptYXgxNjA2NV91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBtYXgxNjA2NV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF91cGRhdGVkICsgSFopIHx8ICFkYXRhLT52YWxpZCkgeworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+bnVtX2FkYzsgaSsrKQorCQkJZGF0YS0+YWRjW2ldCisJCQkgID0gbWF4MTYwNjVfcmVhZF9hZGMoY2xpZW50LCBNQVgxNjA2NV9BREMoaSkpOworCisJCWlmIChkYXRhLT5oYXZlX2N1cnJlbnQpIHsKKwkJCWRhdGEtPmFkY1tNQVgxNjA2NV9OVU1fQURDXQorCQkJICA9IG1heDE2MDY1X3JlYWRfYWRjKGNsaWVudCwgTUFYMTYwNjVfQ1NQX0FEQyk7CisJCQlkYXRhLT5jdXJyX3NlbnNlCisJCQkgID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQkJCSAgICAgTUFYMTYwNjVfQ1VSUl9TRU5TRSk7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgRElWX1JPVU5EX1VQKGRhdGEtPm51bV9hZGMsIDgpOyBpKyspCisJCQlkYXRhLT5mYXVsdFtpXQorCQkJICA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIE1BWDE2MDY1X0ZBVUxUKGkpKTsKKworCQlkYXRhLT5sYXN0X3VwZGF0ZWQgPSBqaWZmaWVzOworCQlkYXRhLT52YWxpZCA9IDE7CisJfQorCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiBkYXRhOworfQorCitzdGF0aWMgc3NpemVfdCBtYXgxNjA2NV9zaG93X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGEsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqYXR0cjIgPSB0b19zZW5zb3JfZGV2X2F0dHJfMihkYSk7CisJc3RydWN0IG1heDE2MDY1X2RhdGEgKmRhdGEgPSBtYXgxNjA2NV91cGRhdGVfZGV2aWNlKGRldik7CisJaW50IHZhbCA9IGRhdGEtPmZhdWx0W2F0dHIyLT5ucl07CisKKwlpZiAodmFsIDwgMCkKKwkJcmV0dXJuIHZhbDsKKworCXZhbCAmPSAoMSA8PCBhdHRyMi0+aW5kZXgpOworCWlmICh2YWwpCisJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEodG9faTJjX2NsaWVudChkZXYpLAorCQkJCQkgIE1BWDE2MDY1X0ZBVUxUKGF0dHIyLT5uciksIHZhbCk7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgISF2YWwpOworfQorCitzdGF0aWMgc3NpemVfdCBtYXgxNjA2NV9zaG93X2lucHV0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGEsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGEpOworCXN0cnVjdCBtYXgxNjA2NV9kYXRhICpkYXRhID0gbWF4MTYwNjVfdXBkYXRlX2RldmljZShkZXYpOworCWludCBhZGMgPSBkYXRhLT5hZGNbYXR0ci0+aW5kZXhdOworCisJaWYgKHVubGlrZWx5KGFkYyA8IDApKQorCQlyZXR1cm4gYWRjOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsCisJCQlBRENfVE9fTVYoYWRjLCBkYXRhLT5yYW5nZVthdHRyLT5pbmRleF0pKTsKK30KKworc3RhdGljIHNzaXplX3QgbWF4MTYwNjVfc2hvd19jdXJyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkYSwgY2hhciAqYnVmKQoreworCXN0cnVjdCBtYXgxNjA2NV9kYXRhICpkYXRhID0gbWF4MTYwNjVfdXBkYXRlX2RldmljZShkZXYpOworCisJaWYgKHVubGlrZWx5KGRhdGEtPmN1cnJfc2Vuc2UgPCAwKSkKKwkJcmV0dXJuIGRhdGEtPmN1cnJfc2Vuc2U7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwKKwkJCUFEQ19UT19DVVJSKGRhdGEtPmN1cnJfc2Vuc2UsIGRhdGEtPmN1cnJfZ2FpbikpOworfQorCitzdGF0aWMgc3NpemVfdCBtYXgxNjA2NV9zZXRfbGltaXQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRhLAorCQkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgKmF0dHIyID0gdG9fc2Vuc29yX2Rldl9hdHRyXzIoZGEpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IG1heDE2MDY1X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgZXJyOworCWludCBsaW1pdDsKKworCWVyciA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpOworCWlmICh1bmxpa2VseShlcnIgPCAwKSkKKwkJcmV0dXJuIGVycjsKKworCWxpbWl0ID0gTVZfVE9fTElNSVQodmFsLCBkYXRhLT5yYW5nZVthdHRyMi0+aW5kZXhdKTsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlkYXRhLT5saW1pdFthdHRyMi0+bnJdW2F0dHIyLT5pbmRleF0KKwkgID0gTElNSVRfVE9fTVYobGltaXQsIGRhdGEtPnJhbmdlW2F0dHIyLT5pbmRleF0pOworCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LAorCQkJCSAgTUFYMTYwNjVfTElNSVQoYXR0cjItPm5yLCBhdHRyMi0+aW5kZXgpLAorCQkJCSAgbGltaXQpOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBtYXgxNjA2NV9zaG93X2xpbWl0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGEsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqYXR0cjIgPSB0b19zZW5zb3JfZGV2X2F0dHJfMihkYSk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgbWF4MTYwNjVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsCisJCQlkYXRhLT5saW1pdFthdHRyMi0+bnJdW2F0dHIyLT5pbmRleF0pOworfQorCisvKiBDb25zdHJ1Y3QgYSBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBzdHJ1Y3R1cmUgZm9yIGVhY2ggcmVnaXN0ZXIgKi8KKworLyogSW5wdXQgdm9sdGFnZXMgKi8KK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4wX2lucHV0LCBTX0lSVUdPLCBtYXgxNjA2NV9zaG93X2lucHV0LCBOVUxMLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4xX2lucHV0LCBTX0lSVUdPLCBtYXgxNjA2NV9zaG93X2lucHV0LCBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4yX2lucHV0LCBTX0lSVUdPLCBtYXgxNjA2NV9zaG93X2lucHV0LCBOVUxMLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4zX2lucHV0LCBTX0lSVUdPLCBtYXgxNjA2NV9zaG93X2lucHV0LCBOVUxMLCAzKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW40X2lucHV0LCBTX0lSVUdPLCBtYXgxNjA2NV9zaG93X2lucHV0LCBOVUxMLCA0KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW41X2lucHV0LCBTX0lSVUdPLCBtYXgxNjA2NV9zaG93X2lucHV0LCBOVUxMLCA1KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW42X2lucHV0LCBTX0lSVUdPLCBtYXgxNjA2NV9zaG93X2lucHV0LCBOVUxMLCA2KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW43X2lucHV0LCBTX0lSVUdPLCBtYXgxNjA2NV9zaG93X2lucHV0LCBOVUxMLCA3KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW44X2lucHV0LCBTX0lSVUdPLCBtYXgxNjA2NV9zaG93X2lucHV0LCBOVUxMLCA4KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW45X2lucHV0LCBTX0lSVUdPLCBtYXgxNjA2NV9zaG93X2lucHV0LCBOVUxMLCA5KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4xMF9pbnB1dCwgU19JUlVHTywgbWF4MTYwNjVfc2hvd19pbnB1dCwgTlVMTCwgMTApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjExX2lucHV0LCBTX0lSVUdPLCBtYXgxNjA2NV9zaG93X2lucHV0LCBOVUxMLCAxMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGluMTJfaW5wdXQsIFNfSVJVR08sIG1heDE2MDY1X3Nob3dfaW5wdXQsIE5VTEwsIDEyKTsKKworLyogSW5wdXQgdm9sdGFnZXMgbGNyaXQgKi8KK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjBfbGNyaXQsIFNfSVdVU1IgfCBTX0lSVUdPLCBtYXgxNjA2NV9zaG93X2xpbWl0LAorCQkJICAgIG1heDE2MDY1X3NldF9saW1pdCwgMiwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4xX2xjcml0LCBTX0lXVVNSIHwgU19JUlVHTywgbWF4MTYwNjVfc2hvd19saW1pdCwKKwkJCSAgICBtYXgxNjA2NV9zZXRfbGltaXQsIDIsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluMl9sY3JpdCwgU19JV1VTUiB8IFNfSVJVR08sIG1heDE2MDY1X3Nob3dfbGltaXQsCisJCQkgICAgbWF4MTYwNjVfc2V0X2xpbWl0LCAyLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjNfbGNyaXQsIFNfSVdVU1IgfCBTX0lSVUdPLCBtYXgxNjA2NV9zaG93X2xpbWl0LAorCQkJICAgIG1heDE2MDY1X3NldF9saW1pdCwgMiwgMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW40X2xjcml0LCBTX0lXVVNSIHwgU19JUlVHTywgbWF4MTYwNjVfc2hvd19saW1pdCwKKwkJCSAgICBtYXgxNjA2NV9zZXRfbGltaXQsIDIsIDQpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluNV9sY3JpdCwgU19JV1VTUiB8IFNfSVJVR08sIG1heDE2MDY1X3Nob3dfbGltaXQsCisJCQkgICAgbWF4MTYwNjVfc2V0X2xpbWl0LCAyLCA1KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjZfbGNyaXQsIFNfSVdVU1IgfCBTX0lSVUdPLCBtYXgxNjA2NV9zaG93X2xpbWl0LAorCQkJICAgIG1heDE2MDY1X3NldF9saW1pdCwgMiwgNik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW43X2xjcml0LCBTX0lXVVNSIHwgU19JUlVHTywgbWF4MTYwNjVfc2hvd19saW1pdCwKKwkJCSAgICBtYXgxNjA2NV9zZXRfbGltaXQsIDIsIDcpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluOF9sY3JpdCwgU19JV1VTUiB8IFNfSVJVR08sIG1heDE2MDY1X3Nob3dfbGltaXQsCisJCQkgICAgbWF4MTYwNjVfc2V0X2xpbWl0LCAyLCA4KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjlfbGNyaXQsIFNfSVdVU1IgfCBTX0lSVUdPLCBtYXgxNjA2NV9zaG93X2xpbWl0LAorCQkJICAgIG1heDE2MDY1X3NldF9saW1pdCwgMiwgOSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4xMF9sY3JpdCwgU19JV1VTUiB8IFNfSVJVR08sIG1heDE2MDY1X3Nob3dfbGltaXQsCisJCQkgICAgbWF4MTYwNjVfc2V0X2xpbWl0LCAyLCAxMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4xMV9sY3JpdCwgU19JV1VTUiB8IFNfSVJVR08sIG1heDE2MDY1X3Nob3dfbGltaXQsCisJCQkgICAgbWF4MTYwNjVfc2V0X2xpbWl0LCAyLCAxMSk7CisKKy8qIElucHV0IHZvbHRhZ2VzIGNyaXQgKi8KK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjBfY3JpdCwgU19JV1VTUiB8IFNfSVJVR08sIG1heDE2MDY1X3Nob3dfbGltaXQsCisJCQkgICAgbWF4MTYwNjVfc2V0X2xpbWl0LCAxLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjFfY3JpdCwgU19JV1VTUiB8IFNfSVJVR08sIG1heDE2MDY1X3Nob3dfbGltaXQsCisJCQkgICAgbWF4MTYwNjVfc2V0X2xpbWl0LCAxLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjJfY3JpdCwgU19JV1VTUiB8IFNfSVJVR08sIG1heDE2MDY1X3Nob3dfbGltaXQsCisJCQkgICAgbWF4MTYwNjVfc2V0X2xpbWl0LCAxLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjNfY3JpdCwgU19JV1VTUiB8IFNfSVJVR08sIG1heDE2MDY1X3Nob3dfbGltaXQsCisJCQkgICAgbWF4MTYwNjVfc2V0X2xpbWl0LCAxLCAzKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjRfY3JpdCwgU19JV1VTUiB8IFNfSVJVR08sIG1heDE2MDY1X3Nob3dfbGltaXQsCisJCQkgICAgbWF4MTYwNjVfc2V0X2xpbWl0LCAxLCA0KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjVfY3JpdCwgU19JV1VTUiB8IFNfSVJVR08sIG1heDE2MDY1X3Nob3dfbGltaXQsCisJCQkgICAgbWF4MTYwNjVfc2V0X2xpbWl0LCAxLCA1KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjZfY3JpdCwgU19JV1VTUiB8IFNfSVJVR08sIG1heDE2MDY1X3Nob3dfbGltaXQsCisJCQkgICAgbWF4MTYwNjVfc2V0X2xpbWl0LCAxLCA2KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjdfY3JpdCwgU19JV1VTUiB8IFNfSVJVR08sIG1heDE2MDY1X3Nob3dfbGltaXQsCisJCQkgICAgbWF4MTYwNjVfc2V0X2xpbWl0LCAxLCA3KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjhfY3JpdCwgU19JV1VTUiB8IFNfSVJVR08sIG1heDE2MDY1X3Nob3dfbGltaXQsCisJCQkgICAgbWF4MTYwNjVfc2V0X2xpbWl0LCAxLCA4KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjlfY3JpdCwgU19JV1VTUiB8IFNfSVJVR08sIG1heDE2MDY1X3Nob3dfbGltaXQsCisJCQkgICAgbWF4MTYwNjVfc2V0X2xpbWl0LCAxLCA5KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjEwX2NyaXQsIFNfSVdVU1IgfCBTX0lSVUdPLCBtYXgxNjA2NV9zaG93X2xpbWl0LAorCQkJICAgIG1heDE2MDY1X3NldF9saW1pdCwgMSwgMTApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluMTFfY3JpdCwgU19JV1VTUiB8IFNfSVJVR08sIG1heDE2MDY1X3Nob3dfbGltaXQsCisJCQkgICAgbWF4MTYwNjVfc2V0X2xpbWl0LCAxLCAxMSk7CisKKy8qIElucHV0IHZvbHRhZ2VzIG1pbiAqLworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluMF9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBtYXgxNjA2NV9zaG93X2xpbWl0LAorCQkJICAgIG1heDE2MDY1X3NldF9saW1pdCwgMCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4xX21pbiwgU19JV1VTUiB8IFNfSVJVR08sIG1heDE2MDY1X3Nob3dfbGltaXQsCisJCQkgICAgbWF4MTYwNjVfc2V0X2xpbWl0LCAwLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjJfbWluLCBTX0lXVVNSIHwgU19JUlVHTywgbWF4MTYwNjVfc2hvd19saW1pdCwKKwkJCSAgICBtYXgxNjA2NV9zZXRfbGltaXQsIDAsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluM19taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBtYXgxNjA2NV9zaG93X2xpbWl0LAorCQkJICAgIG1heDE2MDY1X3NldF9saW1pdCwgMCwgMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW40X21pbiwgU19JV1VTUiB8IFNfSVJVR08sIG1heDE2MDY1X3Nob3dfbGltaXQsCisJCQkgICAgbWF4MTYwNjVfc2V0X2xpbWl0LCAwLCA0KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjVfbWluLCBTX0lXVVNSIHwgU19JUlVHTywgbWF4MTYwNjVfc2hvd19saW1pdCwKKwkJCSAgICBtYXgxNjA2NV9zZXRfbGltaXQsIDAsIDUpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluNl9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBtYXgxNjA2NV9zaG93X2xpbWl0LAorCQkJICAgIG1heDE2MDY1X3NldF9saW1pdCwgMCwgNik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW43X21pbiwgU19JV1VTUiB8IFNfSVJVR08sIG1heDE2MDY1X3Nob3dfbGltaXQsCisJCQkgICAgbWF4MTYwNjVfc2V0X2xpbWl0LCAwLCA3KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjhfbWluLCBTX0lXVVNSIHwgU19JUlVHTywgbWF4MTYwNjVfc2hvd19saW1pdCwKKwkJCSAgICBtYXgxNjA2NV9zZXRfbGltaXQsIDAsIDgpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluOV9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBtYXgxNjA2NV9zaG93X2xpbWl0LAorCQkJICAgIG1heDE2MDY1X3NldF9saW1pdCwgMCwgOSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4xMF9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBtYXgxNjA2NV9zaG93X2xpbWl0LAorCQkJICAgIG1heDE2MDY1X3NldF9saW1pdCwgMCwgMTApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluMTFfbWluLCBTX0lXVVNSIHwgU19JUlVHTywgbWF4MTYwNjVfc2hvd19saW1pdCwKKwkJCSAgICBtYXgxNjA2NV9zZXRfbGltaXQsIDAsIDExKTsKKworLyogSW5wdXQgdm9sdGFnZXMgbWF4ICovCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4wX21heCwgU19JV1VTUiB8IFNfSVJVR08sIG1heDE2MDY1X3Nob3dfbGltaXQsCisJCQkgICAgbWF4MTYwNjVfc2V0X2xpbWl0LCAwLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjFfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgbWF4MTYwNjVfc2hvd19saW1pdCwKKwkJCSAgICBtYXgxNjA2NV9zZXRfbGltaXQsIDAsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluMl9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBtYXgxNjA2NV9zaG93X2xpbWl0LAorCQkJICAgIG1heDE2MDY1X3NldF9saW1pdCwgMCwgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4zX21heCwgU19JV1VTUiB8IFNfSVJVR08sIG1heDE2MDY1X3Nob3dfbGltaXQsCisJCQkgICAgbWF4MTYwNjVfc2V0X2xpbWl0LCAwLCAzKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjRfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgbWF4MTYwNjVfc2hvd19saW1pdCwKKwkJCSAgICBtYXgxNjA2NV9zZXRfbGltaXQsIDAsIDQpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluNV9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBtYXgxNjA2NV9zaG93X2xpbWl0LAorCQkJICAgIG1heDE2MDY1X3NldF9saW1pdCwgMCwgNSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW42X21heCwgU19JV1VTUiB8IFNfSVJVR08sIG1heDE2MDY1X3Nob3dfbGltaXQsCisJCQkgICAgbWF4MTYwNjVfc2V0X2xpbWl0LCAwLCA2KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjdfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgbWF4MTYwNjVfc2hvd19saW1pdCwKKwkJCSAgICBtYXgxNjA2NV9zZXRfbGltaXQsIDAsIDcpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluOF9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBtYXgxNjA2NV9zaG93X2xpbWl0LAorCQkJICAgIG1heDE2MDY1X3NldF9saW1pdCwgMCwgOCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW45X21heCwgU19JV1VTUiB8IFNfSVJVR08sIG1heDE2MDY1X3Nob3dfbGltaXQsCisJCQkgICAgbWF4MTYwNjVfc2V0X2xpbWl0LCAwLCA5KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjEwX21heCwgU19JV1VTUiB8IFNfSVJVR08sIG1heDE2MDY1X3Nob3dfbGltaXQsCisJCQkgICAgbWF4MTYwNjVfc2V0X2xpbWl0LCAwLCAxMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4xMV9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBtYXgxNjA2NV9zaG93X2xpbWl0LAorCQkJICAgIG1heDE2MDY1X3NldF9saW1pdCwgMCwgMTEpOworCisvKiBhbGFybXMgKi8KK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjBfYWxhcm0sIFNfSVJVR08sIG1heDE2MDY1X3Nob3dfYWxhcm0sIE5VTEwsCisJCQkgICAgMCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4xX2FsYXJtLCBTX0lSVUdPLCBtYXgxNjA2NV9zaG93X2FsYXJtLCBOVUxMLAorCQkJICAgIDAsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluMl9hbGFybSwgU19JUlVHTywgbWF4MTYwNjVfc2hvd19hbGFybSwgTlVMTCwKKwkJCSAgICAwLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjNfYWxhcm0sIFNfSVJVR08sIG1heDE2MDY1X3Nob3dfYWxhcm0sIE5VTEwsCisJCQkgICAgMCwgMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW40X2FsYXJtLCBTX0lSVUdPLCBtYXgxNjA2NV9zaG93X2FsYXJtLCBOVUxMLAorCQkJICAgIDAsIDQpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluNV9hbGFybSwgU19JUlVHTywgbWF4MTYwNjVfc2hvd19hbGFybSwgTlVMTCwKKwkJCSAgICAwLCA1KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjZfYWxhcm0sIFNfSVJVR08sIG1heDE2MDY1X3Nob3dfYWxhcm0sIE5VTEwsCisJCQkgICAgMCwgNik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW43X2FsYXJtLCBTX0lSVUdPLCBtYXgxNjA2NV9zaG93X2FsYXJtLCBOVUxMLAorCQkJICAgIDAsIDcpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKGluOF9hbGFybSwgU19JUlVHTywgbWF4MTYwNjVfc2hvd19hbGFybSwgTlVMTCwKKwkJCSAgICAxLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjlfYWxhcm0sIFNfSVJVR08sIG1heDE2MDY1X3Nob3dfYWxhcm0sIE5VTEwsCisJCQkgICAgMSwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoaW4xMF9hbGFybSwgU19JUlVHTywgbWF4MTYwNjVfc2hvd19hbGFybSwgTlVMTCwKKwkJCSAgICAxLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihpbjExX2FsYXJtLCBTX0lSVUdPLCBtYXgxNjA2NV9zaG93X2FsYXJtLCBOVUxMLAorCQkJICAgIDEsIDMpOworCisvKiBDdXJyZW50IGFuZCBhbGFybSAqLworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihjdXJyMV9pbnB1dCwgU19JUlVHTywgbWF4MTYwNjVfc2hvd19jdXJyZW50LCBOVUxMLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihjdXJyMV9hbGFybSwgU19JUlVHTywgbWF4MTYwNjVfc2hvd19hbGFybSwgTlVMTCwKKwkJCSAgICAxLCA0KTsKKworLyoKKyAqIEZpbmFsbHksIGNvbnN0cnVjdCBhbiBhcnJheSBvZiBwb2ludGVycyB0byBtZW1iZXJzIG9mIHRoZSBhYm92ZSBvYmplY3RzLAorICogYXMgcmVxdWlyZWQgZm9yIHN5c2ZzX2NyZWF0ZV9ncm91cCgpCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICptYXgxNjA2NV9iYXNpY19hdHRyaWJ1dGVzW10gPSB7CisJJnNlbnNvcl9kZXZfYXR0cl9pbjBfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMF9sY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4wX2NyaXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl9pbjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMV9sY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4xX2NyaXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMV9hbGFybS5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl9pbjJfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMl9sY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4yX2NyaXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMl9hbGFybS5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl9pbjNfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luM19sY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4zX2NyaXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luM19hbGFybS5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl9pbjRfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNF9sY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW40X2NyaXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl9pbjVfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNV9sY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW41X2NyaXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNV9hbGFybS5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl9pbjZfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNl9sY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW42X2NyaXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNl9hbGFybS5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl9pbjdfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luN19sY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW43X2NyaXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luN19hbGFybS5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl9pbjhfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luOF9sY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW44X2NyaXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luOF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl9pbjlfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luOV9sY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW45X2NyaXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luOV9hbGFybS5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl9pbjEwX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjEwX2xjcml0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjEwX2NyaXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMTBfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKworCSZzZW5zb3JfZGV2X2F0dHJfaW4xMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4xMV9sY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4xMV9jcml0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjExX2FsYXJtLmRldl9hdHRyLmF0dHIsCisKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbWF4MTYwNjVfY3VycmVudF9hdHRyaWJ1dGVzW10gPSB7CisJJnNlbnNvcl9kZXZfYXR0cl9pbjEyX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9jdXJyMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfY3VycjFfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbWF4MTYwNjVfbWluX2F0dHJpYnV0ZXNbXSA9IHsKKwkmc2Vuc29yX2Rldl9hdHRyX2luMF9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMV9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMl9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luM19taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNF9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNV9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNl9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luN19taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luOF9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luOV9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMTBfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjExX21pbi5kZXZfYXR0ci5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICptYXgxNjA2NV9tYXhfYXR0cmlidXRlc1tdID0geworCSZzZW5zb3JfZGV2X2F0dHJfaW4wX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4xX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4yX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4zX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW40X21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW41X21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW42X21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW43X21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW44X21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW45X21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4xMF9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMTFfbWF4LmRldl9hdHRyLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWF4MTYwNjVfYmFzaWNfZ3JvdXAgPSB7CisJLmF0dHJzID0gbWF4MTYwNjVfYmFzaWNfYXR0cmlidXRlcywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1heDE2MDY1X2N1cnJlbnRfZ3JvdXAgPSB7CisJLmF0dHJzID0gbWF4MTYwNjVfY3VycmVudF9hdHRyaWJ1dGVzLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWF4MTYwNjVfbWluX2dyb3VwID0geworCS5hdHRycyA9IG1heDE2MDY1X21pbl9hdHRyaWJ1dGVzLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWF4MTYwNjVfbWF4X2dyb3VwID0geworCS5hdHRycyA9IG1heDE2MDY1X21heF9hdHRyaWJ1dGVzLAorfTsKKworc3RhdGljIHZvaWQgbWF4MTYwNjVfY2xlYW51cChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJm1heDE2MDY1X21heF9ncm91cCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmbWF4MTYwNjVfbWluX2dyb3VwKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZtYXgxNjA2NV9jdXJyZW50X2dyb3VwKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZtYXgxNjA2NV9iYXNpY19ncm91cCk7Cit9CisKK3N0YXRpYyBpbnQgbWF4MTYwNjVfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKKwlzdHJ1Y3QgbWF4MTYwNjVfZGF0YSAqZGF0YTsKKwlpbnQgaSwgaiwgdmFsLCByZXQ7CisJYm9vbCBoYXZlX3NlY29uZGFyeTsJCS8qIHRydWUgaWYgY2hpcCBoYXMgc2Vjb25kYXJ5IGxpbWl0cyAqLworCWJvb2wgc2Vjb25kYXJ5X2lzX21heCA9IGZhbHNlOwkvKiBzZWNvbmRhcnkgbGltaXRzIHJlZmxlY3QgbWF4ICovCisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQQorCQkJCSAgICAgfCBJMkNfRlVOQ19TTUJVU19SRUFEX1dPUkRfREFUQSkpCisJCXJldHVybiAtRU5PREVWOworCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFkYXRhKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYXRhKTsKKwltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlkYXRhLT5udW1fYWRjID0gbWF4MTYwNjVfbnVtX2FkY1tpZC0+ZHJpdmVyX2RhdGFdOworCWRhdGEtPmhhdmVfY3VycmVudCA9IG1heDE2MDY1X2hhdmVfY3VycmVudFtpZC0+ZHJpdmVyX2RhdGFdOworCWhhdmVfc2Vjb25kYXJ5ID0gbWF4MTYwNjVfaGF2ZV9zZWNvbmRhcnlbaWQtPmRyaXZlcl9kYXRhXTsKKworCWlmIChoYXZlX3NlY29uZGFyeSkgeworCQl2YWwgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBNQVgxNjA2NV9TV19FTkFCTEUpOworCQlpZiAodW5saWtlbHkodmFsIDwgMCkpIHsKKwkJCXJldCA9IHZhbDsKKwkJCWdvdG8gb3V0X2ZyZWU7CisJCX0KKwkJc2Vjb25kYXJ5X2lzX21heCA9IHZhbCAmIE1BWDE2MDY1X1dBUk5JTkdfT1Y7CisJfQorCisJLyogUmVhZCBzY2FsZSByZWdpc3RlcnMsIGNvbnZlcnQgdG8gcmFuZ2UgKi8KKwlmb3IgKGkgPSAwOyBpIDwgRElWX1JPVU5EX1VQKGRhdGEtPm51bV9hZGMsIDQpOyBpKyspIHsKKwkJdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTUFYMTYwNjVfU0NBTEUoaSkpOworCQlpZiAodW5saWtlbHkodmFsIDwgMCkpIHsKKwkJCXJldCA9IHZhbDsKKwkJCWdvdG8gb3V0X2ZyZWU7CisJCX0KKwkJZm9yIChqID0gMDsgaiA8IDQgJiYgaSAqIDQgKyBqIDwgZGF0YS0+bnVtX2FkYzsgaisrKSB7CisJCQlkYXRhLT5yYW5nZVtpICogNCArIGpdID0KKwkJCSAgbWF4MTYwNjVfYWRjX3JhbmdlWyh2YWwgPj4gKGogKiAyKSkgJiAweDNdOworCQl9CisJfQorCisJLyogUmVhZCBsaW1pdHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTUFYMTYwNjVfTlVNX0xJTUlUOyBpKyspIHsKKwkJaWYgKGkgPT0gMCAmJiAhaGF2ZV9zZWNvbmRhcnkpCisJCQljb250aW51ZTsKKworCQlmb3IgKGogPSAwOyBqIDwgZGF0YS0+bnVtX2FkYzsgaisrKSB7CisJCQl2YWwgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAorCQkJCQkJICAgICAgIE1BWDE2MDY1X0xJTUlUKGksIGopKTsKKwkJCWlmICh1bmxpa2VseSh2YWwgPCAwKSkgeworCQkJCXJldCA9IHZhbDsKKwkJCQlnb3RvIG91dF9mcmVlOworCQkJfQorCQkJZGF0YS0+bGltaXRbaV1bal0gPSBMSU1JVF9UT19NVih2YWwsIGRhdGEtPnJhbmdlW2pdKTsKKwkJfQorCX0KKworCS8qIFJlZ2lzdGVyIHN5c2ZzIGhvb2tzICovCisJZm9yIChpID0gMDsgaSA8IGRhdGEtPm51bV9hZGMgKiA0OyBpKyspIHsKKwkJLyogRG8gbm90IGNyZWF0ZSBzeXNmcyBlbnRyeSBpZiBjaGFubmVsIGlzIGRpc2FibGVkICovCisJCWlmICghZGF0YS0+cmFuZ2VbaSAvIDRdKQorCQkJY29udGludWU7CisKKwkJcmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LmtvYmosCisJCQkJCW1heDE2MDY1X2Jhc2ljX2F0dHJpYnV0ZXNbaV0pOworCQlpZiAodW5saWtlbHkocmV0KSkKKwkJCWdvdG8gb3V0OworCX0KKworCWlmIChoYXZlX3NlY29uZGFyeSkgeworCQlzdHJ1Y3QgYXR0cmlidXRlICoqYXR0ciA9IHNlY29uZGFyeV9pc19tYXggPworCQkgIG1heDE2MDY1X21heF9hdHRyaWJ1dGVzIDogbWF4MTYwNjVfbWluX2F0dHJpYnV0ZXM7CisKKwkJZm9yIChpID0gMDsgaSA8IGRhdGEtPm51bV9hZGM7IGkrKykgeworCQkJaWYgKCFkYXRhLT5yYW5nZVtpXSkKKwkJCQljb250aW51ZTsKKworCQkJcmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LmtvYmosIGF0dHJbaV0pOworCQkJaWYgKHVubGlrZWx5KHJldCkpCisJCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlpZiAoZGF0YS0+aGF2ZV9jdXJyZW50KSB7CisJCXZhbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIE1BWDE2MDY1X0NVUlJfQ09OVFJPTCk7CisJCWlmICh1bmxpa2VseSh2YWwgPCAwKSkgeworCQkJcmV0ID0gdmFsOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKHZhbCAmIE1BWDE2MDY1X0NVUlJfRU5BQkxFKSB7CisJCQkvKgorCQkJICogQ3VycmVudCBnYWluIGlzIDYsIDEyLCAyNCwgNDggYmFzZWQgb24gdmFsdWVzIGluCisJCQkgKiBiaXQgMiwzLgorCQkJICovCisJCQlkYXRhLT5jdXJyX2dhaW4gPSA2IDw8ICgodmFsID4+IDIpICYgMHgwMyk7CisJCQlkYXRhLT5yYW5nZVtNQVgxNjA2NV9OVU1fQURDXQorCQkJICA9IG1heDE2MDY1X2NzcF9hZGNfcmFuZ2VbKHZhbCA+PiAxKSAmIDB4MDFdOworCQkJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLAorCQkJCQkJICZtYXgxNjA2NV9jdXJyZW50X2dyb3VwKTsKKwkJCWlmICh1bmxpa2VseShyZXQpKQorCQkJCWdvdG8gb3V0OworCQl9IGVsc2UgeworCQkJZGF0YS0+aGF2ZV9jdXJyZW50ID0gZmFsc2U7CisJCX0KKwl9CisKKwlkYXRhLT5od21vbl9kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJmNsaWVudC0+ZGV2KTsKKwlpZiAodW5saWtlbHkoSVNfRVJSKGRhdGEtPmh3bW9uX2RldikpKSB7CisJCXJldCA9IFBUUl9FUlIoZGF0YS0+aHdtb25fZGV2KTsKKwkJZ290byBvdXQ7CisJfQorCXJldHVybiAwOworCitvdXQ6CisJbWF4MTYwNjVfY2xlYW51cChjbGllbnQpOworb3V0X2ZyZWU6CisJa2ZyZWUoZGF0YSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtYXgxNjA2NV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgbWF4MTYwNjVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+aHdtb25fZGV2KTsKKwltYXgxNjA2NV9jbGVhbnVwKGNsaWVudCk7CisJa2ZyZWUoZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIG1heDE2MDY1X2lkW10gPSB7CisJeyAibWF4MTYwNjUiLCBtYXgxNjA2NSB9LAorCXsgIm1heDE2MDY2IiwgbWF4MTYwNjYgfSwKKwl7ICJtYXgxNjA2NyIsIG1heDE2MDY3IH0sCisJeyAibWF4MTYwNjgiLCBtYXgxNjA2OCB9LAorCXsgIm1heDE2MDcwIiwgbWF4MTYwNzAgfSwKKwl7ICJtYXgxNjA3MSIsIG1heDE2MDcxIH0sCisJeyB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbWF4MTYwNjVfaWQpOworCisvKiBUaGlzIGlzIHRoZSBkcml2ZXIgdGhhdCB3aWxsIGJlIGluc2VydGVkICovCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbWF4MTYwNjVfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm1heDE2MDY1IiwKKwl9LAorCS5wcm9iZSA9IG1heDE2MDY1X3Byb2JlLAorCS5yZW1vdmUgPSBtYXgxNjA2NV9yZW1vdmUsCisJLmlkX3RhYmxlID0gbWF4MTYwNjVfaWQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtYXgxNjA2NV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZtYXgxNjA2NV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbWF4MTYwNjVfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZtYXgxNjA2NV9kcml2ZXIpOworfQorCitNT0RVTEVfQVVUSE9SKCJHdWVudGVyIFJvZWNrIDxndWVudGVyLnJvZWNrQGVyaWNzc29uLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTUFYMTYwNjUgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9pbml0KG1heDE2MDY1X2luaXQpOworbW9kdWxlX2V4aXQobWF4MTYwNjVfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL21heDM0NDQwLmMgYi9kcml2ZXJzL2h3bW9uL21heDM0NDQwLmMKaW5kZXggOTkyYjcwMS4uZGIxMWUxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9tYXgzNDQ0MC5jCisrKyBiL2RyaXZlcnMvaHdtb24vbWF4MzQ0NDAuYwpAQCAtMzIsNyArMzIsNyBAQAogI2RlZmluZSBNQVgzNDQ0MF9TVEFUVVNfT1RfRkFVTFQJKDEgPDwgNSkKICNkZWZpbmUgTUFYMzQ0NDBfU1RBVFVTX09UX1dBUk4JCSgxIDw8IDYpCiAKLXN0YXRpYyBpbnQgbWF4MzQ0NDBfZ2V0X3N0YXR1cyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcGFnZSwgaW50IHJlZykKK3N0YXRpYyBpbnQgbWF4MzQ0NDBfcmVhZF9ieXRlX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHBhZ2UsIGludCByZWcpCiB7CiAJaW50IHJldDsKIAlpbnQgbWZnX3N0YXR1czsKQEAgLTEwOCw3ICsxMDgsNyBAQAogCQkuZnVuY1sxMV0gPSBQTUJVU19IQVZFX1RFTVAgfCBQTUJVU19IQVZFX1NUQVRVU19URU1QLAogCQkuZnVuY1sxMl0gPSBQTUJVU19IQVZFX1RFTVAgfCBQTUJVU19IQVZFX1NUQVRVU19URU1QLAogCQkuZnVuY1sxM10gPSBQTUJVU19IQVZFX1RFTVAgfCBQTUJVU19IQVZFX1NUQVRVU19URU1QLAotCQkuZ2V0X3N0YXR1cyA9IG1heDM0NDQwX2dldF9zdGF0dXMsCisJCS5yZWFkX2J5dGVfZGF0YSA9IG1heDM0NDQwX3JlYWRfYnl0ZV9kYXRhLAogCX0sCiAJW21heDM0NDQxXSA9IHsKIAkJLnBhZ2VzID0gMTIsCkBAIC0xNDksNyArMTQ5LDcgQEAKIAkJLmZ1bmNbOV0gPSBQTUJVU19IQVZFX1RFTVAgfCBQTUJVU19IQVZFX1NUQVRVU19URU1QLAogCQkuZnVuY1sxMF0gPSBQTUJVU19IQVZFX1RFTVAgfCBQTUJVU19IQVZFX1NUQVRVU19URU1QLAogCQkuZnVuY1sxMV0gPSBQTUJVU19IQVZFX1RFTVAgfCBQTUJVU19IQVZFX1NUQVRVU19URU1QLAotCQkuZ2V0X3N0YXR1cyA9IG1heDM0NDQwX2dldF9zdGF0dXMsCisJCS5yZWFkX2J5dGVfZGF0YSA9IG1heDM0NDQwX3JlYWRfYnl0ZV9kYXRhLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL21heDY2NDIuYyBiL2RyaXZlcnMvaHdtb24vbWF4NjY0Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmOWZjNDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2h3bW9uL21heDY2NDIuYwpAQCAtMCwwICsxLDM1NiBAQAorLyoKKyAqIERyaXZlciBmb3IgKy8tMSBkZWdyZWUgQywgU01CdXMtQ29tcGF0aWJsZSBSZW1vdGUvTG9jYWwgVGVtcGVyYXR1cmUgU2Vuc29yCisgKiB3aXRoIE92ZXJ0ZW1wZXJhdHVyZSBBbGFybQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBlYXJUViBBUworICoKKyAqIERlcml2ZWQgZnJvbToKKyAqCisgKiAgQmFzZWQgb24gdGhlIG1heDE2MTkgZHJpdmVyLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IEFsZXhleSBGaXNoZXIgPGZpc2hvckBtYWlsLnJ1PgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgorICoKKyAqIFRoZSBNQVg2NjQyIGlzIGEgc2Vuc29yIGNoaXAgbWFkZSBieSBNYXhpbS4KKyAqIEl0IHJlcG9ydHMgdXAgdG8gdHdvIHRlbXBlcmF0dXJlcyAoaXRzIG93biBwbHVzIHVwIHRvCisgKiBvbmUgZXh0ZXJuYWwgb25lKS4gQ29tcGxldGUgZGF0YXNoZWV0IGNhbiBiZQorICogb2J0YWluZWQgZnJvbSBNYXhpbSdzIHdlYnNpdGUgYXQ6CisgKiAgIGh0dHA6Ly9kYXRhc2hlZXRzLm1heGltLWljLmNvbS9lbi9kcy9NQVg2NjQyLnBkZgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7CisJMHg0OCwgMHg0OSwgMHg0YSwgMHg0YiwgMHg0YywgMHg0ZCwgMHg0ZSwgMHg0ZiwgSTJDX0NMSUVOVF9FTkQgfTsKKworLyoKKyAqIFRoZSBNQVg2NjQyIHJlZ2lzdGVycworICovCisKKyNkZWZpbmUgTUFYNjY0Ml9SRUdfUl9NQU5fSUQJCTB4RkUKKyNkZWZpbmUgTUFYNjY0Ml9SRUdfUl9DT05GSUcJCTB4MDMKKyNkZWZpbmUgTUFYNjY0Ml9SRUdfV19DT05GSUcJCTB4MDkKKyNkZWZpbmUgTUFYNjY0Ml9SRUdfUl9TVEFUVVMJCTB4MDIKKyNkZWZpbmUgTUFYNjY0Ml9SRUdfUl9MT0NBTF9URU1QCTB4MDAKKyNkZWZpbmUgTUFYNjY0Ml9SRUdfUl9MT0NBTF9URU1QTAkweDExCisjZGVmaW5lIE1BWDY2NDJfUkVHX1JfTE9DQUxfSElHSAkweDA1CisjZGVmaW5lIE1BWDY2NDJfUkVHX1dfTE9DQUxfSElHSAkweDBCCisjZGVmaW5lIE1BWDY2NDJfUkVHX1JfUkVNT1RFX1RFTVAJMHgwMQorI2RlZmluZSBNQVg2NjQyX1JFR19SX1JFTU9URV9URU1QTAkweDEwCisjZGVmaW5lIE1BWDY2NDJfUkVHX1JfUkVNT1RFX0hJR0gJMHgwNworI2RlZmluZSBNQVg2NjQyX1JFR19XX1JFTU9URV9ISUdICTB4MEQKKworLyoKKyAqIENvbnZlcnNpb25zCisgKi8KKworc3RhdGljIGludCB0ZW1wX2Zyb21fcmVnMTAoaW50IHZhbCkKK3sKKwlyZXR1cm4gdmFsICogMjUwOworfQorCitzdGF0aWMgaW50IHRlbXBfZnJvbV9yZWcoaW50IHZhbCkKK3sKKwlyZXR1cm4gdmFsICogMTAwMDsKK30KKworc3RhdGljIGludCB0ZW1wX3RvX3JlZyhpbnQgdmFsKQoreworCXJldHVybiB2YWwgLyAxMDAwOworfQorCisvKgorICogQ2xpZW50IGRhdGEgKGVhY2ggY2xpZW50IGdldHMgaXRzIG93bikKKyAqLworCitzdHJ1Y3QgbWF4NjY0Ml9kYXRhIHsKKwlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7CisJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOworCWJvb2wgdmFsaWQ7IC8qIHplcm8gdW50aWwgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KKwl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsgLyogaW4gamlmZmllcyAqLworCisJLyogcmVnaXN0ZXJzIHZhbHVlcyAqLworCXUxNiB0ZW1wX2lucHV0WzJdOyAvKiBsb2NhbC9yZW1vdGUgKi8KKwl1MTYgdGVtcF9oaWdoWzJdOyAvKiBsb2NhbC9yZW1vdGUgKi8KKwl1OCBhbGFybXM7Cit9OworCisvKgorICogUmVhbCBjb2RlCisgKi8KKworc3RhdGljIHZvaWQgbWF4NjY0Ml9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXU4IGNvbmZpZzsKKwlzdHJ1Y3QgbWF4NjY0Ml9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwkvKgorCSAqIFN0YXJ0IHRoZSBjb252ZXJzaW9ucy4KKwkgKi8KKwljb25maWcgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBNQVg2NjQyX1JFR19SX0NPTkZJRyk7CisJaWYgKGNvbmZpZyAmIDB4NDApCisJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBNQVg2NjQyX1JFR19XX0NPTkZJRywKKwkJCQkJICBjb25maWcgJiAweEJGKTsgLyogcnVuICovCisKKwlkYXRhLT50ZW1wX2hpZ2hbMF0gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAorCQkJCU1BWDY2NDJfUkVHX1JfTE9DQUxfSElHSCk7CisJZGF0YS0+dGVtcF9oaWdoWzFdID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQlNQVg2NjQyX1JFR19SX1JFTU9URV9ISUdIKTsKK30KKworLyogUmV0dXJuIDAgaWYgZGV0ZWN0aW9uIGlzIHN1Y2Nlc3NmdWwsIC1FTk9ERVYgb3RoZXJ3aXNlICovCitzdGF0aWMgaW50IG1heDY2NDJfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjbGllbnQtPmFkYXB0ZXI7CisJdTggcmVnX2NvbmZpZywgcmVnX3N0YXR1cywgbWFuX2lkOworCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIGlkZW50aWZpY2F0aW9uICovCisJbWFuX2lkID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTUFYNjY0Ml9SRUdfUl9NQU5fSUQpOworCWlmIChtYW5faWQgIT0gMHg0RCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKgorCSAqIFdlIHJlYWQgdGhlIGNvbmZpZyBhbmQgc3RhdHVzIHJlZ2lzdGVyLCB0aGUgNCBsb3dlciBiaXRzIGluIHRoZQorCSAqIGNvbmZpZyByZWdpc3RlciBzaG91bGQgYmUgemVybyBhbmQgYml0IDUsIDMsIDEgYW5kIDAgc2hvdWxkIGJlCisJICogemVybyBpbiB0aGUgc3RhdHVzIHJlZ2lzdGVyLgorCSAqLworCXJlZ19jb25maWcgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBNQVg2NjQyX1JFR19SX0NPTkZJRyk7CisJcmVnX3N0YXR1cyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIE1BWDY2NDJfUkVHX1JfU1RBVFVTKTsKKwlpZiAoKChyZWdfY29uZmlnICYgMHgwZikgIT0gMHgwMCkgfHwKKwkgICAgKChyZWdfc3RhdHVzICYgMHgyYikgIT0gMHgwMCkpCisJCXJldHVybiAtRU5PREVWOworCisJc3RybGNweShpbmZvLT50eXBlLCAibWF4NjY0MiIsIEkyQ19OQU1FX1NJWkUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWF4NjY0Ml9kYXRhICptYXg2NjQyX3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IG1heDY2NDJfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXUxNiB2YWwsIHRtcDsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlZCArIEhaKSB8fCAhZGF0YS0+dmFsaWQpIHsKKwkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJVcGRhdGluZyBtYXg2NjQyIGRhdGEuXG4iKTsKKwkJdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQkJTUFYNjY0Ml9SRUdfUl9MT0NBTF9URU1QTCk7CisJCXRtcCA9ICh2YWwgPj4gNikgJiAzOworCQl2YWwgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAorCQkJCQlNQVg2NjQyX1JFR19SX0xPQ0FMX1RFTVApOworCQl2YWwgPSAodmFsIDw8IDIpIHwgdG1wOworCQlkYXRhLT50ZW1wX2lucHV0WzBdID0gdmFsOworCQl2YWwgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAorCQkJCQlNQVg2NjQyX1JFR19SX1JFTU9URV9URU1QTCk7CisJCXRtcCA9ICh2YWwgPj4gNikgJiAzOworCQl2YWwgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAorCQkJCQlNQVg2NjQyX1JFR19SX1JFTU9URV9URU1QKTsKKwkJdmFsID0gKHZhbCA8PCAyKSB8IHRtcDsKKwkJZGF0YS0+dGVtcF9pbnB1dFsxXSA9IHZhbDsKKwkJZGF0YS0+YWxhcm1zID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQkJTUFYNjY0Ml9SRUdfUl9TVEFUVVMpOworCisJCWRhdGEtPmxhc3RfdXBkYXRlZCA9IGppZmZpZXM7CisJCWRhdGEtPnZhbGlkID0gMTsKKwl9CisKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCXJldHVybiBkYXRhOworfQorCisvKgorICogU3lzZnMgc3R1ZmYKKyAqLworCitzdGF0aWMgc3NpemVfdCBzaG93X3RlbXBfbWF4MTAoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZfYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBtYXg2NjQyX2RhdGEgKmRhdGEgPSBtYXg2NjQyX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2X2F0dHIpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsCisJCSAgICAgICB0ZW1wX2Zyb21fcmVnMTAoZGF0YS0+dGVtcF9pbnB1dFthdHRyLT5pbmRleF0pKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wX21heChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IG1heDY2NDJfZGF0YSAqZGF0YSA9IG1heDY2NDJfdXBkYXRlX2RldmljZShkZXYpOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICphdHRyMiA9IHRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHRlbXBfZnJvbV9yZWcoZGF0YS0+dGVtcF9oaWdoW2F0dHIyLT5ucl0pKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2V0X3RlbXBfbWF4KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IGVycjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBtYXg2NjQyX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqYXR0cjIgPSB0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKKworCWVyciA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPnRlbXBfaGlnaFthdHRyMi0+bnJdID0gU0VOU09SU19MSU1JVCh0ZW1wX3RvX3JlZyh2YWwpLCAwLCAyNTUpOworCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBhdHRyMi0+aW5kZXgsCisJCQkJICBkYXRhLT50ZW1wX2hpZ2hbYXR0cjItPm5yXSk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgIGNoYXIgKmJ1ZikKK3sKKwlpbnQgYml0bnIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0ciktPmluZGV4OworCXN0cnVjdCBtYXg2NjQyX2RhdGEgKmRhdGEgPSBtYXg2NjQyX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgKGRhdGEtPmFsYXJtcyA+PiBiaXRucikgJiAxKTsKK30KKworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wX21heDEwLCBOVUxMLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcF9tYXgxMCwgTlVMTCwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDFfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wX21heCwKKwkJCSAgICBzZXRfdGVtcF9tYXgsIDAsIE1BWDY2NDJfUkVHX1dfTE9DQUxfSElHSCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDJfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wX21heCwKKwkJCSAgICBzZXRfdGVtcF9tYXgsIDEsIE1BWDY2NDJfUkVHX1dfUkVNT1RFX0hJR0gpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wX2ZhdWx0LCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCA2KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCA0KTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm1heDY2NDJfYXR0cmlidXRlc1tdID0geworCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21heC5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wX2ZhdWx0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXhfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21heF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1heDY2NDJfZ3JvdXAgPSB7CisJLmF0dHJzID0gbWF4NjY0Ml9hdHRyaWJ1dGVzLAorfTsKKworc3RhdGljIGludCBtYXg2NjQyX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpuZXdfY2xpZW50LAorCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgbWF4NjY0Ml9kYXRhICpkYXRhOworCWludCBlcnI7CisKKwlkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1heDY2NDJfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGV4aXQ7CisJfQorCisJaTJjX3NldF9jbGllbnRkYXRhKG5ld19jbGllbnQsIGRhdGEpOworCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCS8qIEluaXRpYWxpemUgdGhlIE1BWDY2NDIgY2hpcCAqLworCW1heDY2NDJfaW5pdF9jbGllbnQobmV3X2NsaWVudCk7CisKKwkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLworCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZtYXg2NjQyX2dyb3VwKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXRfZnJlZTsKKworCWRhdGEtPmh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmbmV3X2NsaWVudC0+ZGV2KTsKKwlpZiAoSVNfRVJSKGRhdGEtPmh3bW9uX2RldikpIHsKKwkJZXJyID0gUFRSX0VSUihkYXRhLT5od21vbl9kZXYpOworCQlnb3RvIGV4aXRfcmVtb3ZlX2ZpbGVzOworCX0KKworCXJldHVybiAwOworCitleGl0X3JlbW92ZV9maWxlczoKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJm5ld19jbGllbnQtPmRldi5rb2JqLCAmbWF4NjY0Ml9ncm91cCk7CitleGl0X2ZyZWU6CisJa2ZyZWUoZGF0YSk7CitleGl0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbWF4NjY0Ml9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgbWF4NjY0Ml9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5od21vbl9kZXYpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJm1heDY2NDJfZ3JvdXApOworCisJa2ZyZWUoZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBEcml2ZXIgZGF0YSAoY29tbW9uIHRvIGFsbCBjbGllbnRzKQorICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBtYXg2NjQyX2lkW10gPSB7CisJeyAibWF4NjY0MiIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbWF4NjY0Ml9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBtYXg2NjQyX2RyaXZlciA9IHsKKwkuY2xhc3MJCT0gSTJDX0NMQVNTX0hXTU9OLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gIm1heDY2NDIiLAorCX0sCisJLnByb2JlCQk9IG1heDY2NDJfcHJvYmUsCisJLnJlbW92ZQkJPSBtYXg2NjQyX3JlbW92ZSwKKwkuaWRfdGFibGUJPSBtYXg2NjQyX2lkLAorCS5kZXRlY3QJCT0gbWF4NjY0Ml9kZXRlY3QsCisJLmFkZHJlc3NfbGlzdAk9IG5vcm1hbF9pMmMsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtYXg2NjQyX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJm1heDY2NDJfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG1heDY2NDJfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZtYXg2NjQyX2RyaXZlcik7Cit9CisKK01PRFVMRV9BVVRIT1IoIlBlciBEYWxlbiA8cGVyLmRhbGVuQGFwcGVhcnR2LmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTUFYNjY0MiBzZW5zb3IgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9pbml0KG1heDY2NDJfaW5pdCk7Cittb2R1bGVfZXhpdChtYXg2NjQyX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9tYXg4Njg4LmMgYi9kcml2ZXJzL2h3bW9uL21heDg2ODguYwppbmRleCA4ZWJmZWYyLi43ZmI5M2Y0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL21heDg2ODguYworKysgYi9kcml2ZXJzL2h3bW9uL21heDg2ODguYwpAQCAtMzcsNyArMzcsNyBAQAogI2RlZmluZSBNQVg4Njg4X1NUQVRVU19PVF9GQVVMVAkJKDEgPDwgMTMpCiAjZGVmaW5lIE1BWDg2ODhfU1RBVFVTX09UX1dBUk5JTkcJKDEgPDwgMTQpCiAKLXN0YXRpYyBpbnQgbWF4ODY4OF9nZXRfc3RhdHVzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBwYWdlLCBpbnQgcmVnKQorc3RhdGljIGludCBtYXg4Njg4X3JlYWRfYnl0ZV9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBwYWdlLCBpbnQgcmVnKQogewogCWludCByZXQgPSAwOwogCWludCBtZmdfc3RhdHVzOwpAQCAtMTEwLDcgKzExMCw3IEBACiAJLmZ1bmNbMF0gPSBQTUJVU19IQVZFX1ZPVVQgfCBQTUJVU19IQVZFX0lPVVQgfCBQTUJVU19IQVZFX1RFTVAKIAkJfCBQTUJVU19IQVZFX1NUQVRVU19WT1VUIHwgUE1CVVNfSEFWRV9TVEFUVVNfSU9VVAogCQl8IFBNQlVTX0hBVkVfU1RBVFVTX1RFTVAsCi0JLmdldF9zdGF0dXMgPSBtYXg4Njg4X2dldF9zdGF0dXMsCisJLnJlYWRfYnl0ZV9kYXRhID0gbWF4ODY4OF9yZWFkX2J5dGVfZGF0YSwKIH07CiAKIHN0YXRpYyBpbnQgbWF4ODY4OF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9wa2d0ZW1wLmMgYi9kcml2ZXJzL2h3bW9uL3BrZ3RlbXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFjODE3ZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2h3bW9uL3BrZ3RlbXAuYworKysgL2Rldi9udWxsCkBAIC0xLDQ0NCArMCwwIEBACi0vKgotICogcGtndGVtcC5jIC0gTGludXgga2VybmVsIG1vZHVsZSBmb3IgcHJvY2Vzc29yIHBhY2thZ2UgaGFyZHdhcmUgbW9uaXRvcmluZwotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBGZW5naHVhIFl1IDxmZW5naHVhLnl1QGludGVsLmNvbT4KLSAqCi0gKiBJbnNwaXJlZCBmcm9tIG1hbnkgaHdtb24gZHJpdmVycyBlc3BlY2lhbGx5IGNvcmV0ZW1wLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQS4KLSAqLwotCi0jZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10Ci0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9od21vbi5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jcHUuaD4KLSNpbmNsdWRlIDxhc20vbXNyLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPGFzbS9zbXAuaD4KLQotI2RlZmluZSBEUlZOQU1FCSJwa2d0ZW1wIgotCi1lbnVtIHsgU0hPV19URU1QLCBTSE9XX1RKTUFYLCBTSE9XX1RUQVJHRVQsIFNIT1dfTEFCRUwsIFNIT1dfTkFNRSB9OwotCi0vKgotICogRnVuY3Rpb25zIGRlY2xhcmF0aW9uCi0gKi8KLQotc3RhdGljIHN0cnVjdCBwa2d0ZW1wX2RhdGEgKnBrZ3RlbXBfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwotCi1zdHJ1Y3QgcGtndGVtcF9kYXRhIHsKLQlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7Ci0Jc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOwotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JdTMyIGlkOwotCXUxNiBwaHlzX3Byb2NfaWQ7Ci0JY2hhciB2YWxpZDsJCS8qIHplcm8gdW50aWwgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KLQl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsJLyogaW4gamlmZmllcyAqLwotCWludCB0ZW1wOwotCWludCB0am1heDsKLQlpbnQgdHRhcmdldDsKLQl1OCBhbGFybTsKLX07Ci0KLS8qCi0gKiBTeXNmcyBzdHVmZgotICovCi0KLXN0YXRpYyBzc2l6ZV90IHNob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlCi0JCQkgICpkZXZhdHRyLCBjaGFyICpidWYpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7Ci0Jc3RydWN0IHBrZ3RlbXBfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCi0JaWYgKGF0dHItPmluZGV4ID09IFNIT1dfTkFNRSkKLQkJcmV0ID0gc3ByaW50ZihidWYsICIlc1xuIiwgZGF0YS0+bmFtZSk7Ci0JZWxzZQkvKiBzaG93IGxhYmVsICovCi0JCXJldCA9IHNwcmludGYoYnVmLCAicGh5c2ljYWwgaWQgJWRcbiIsCi0JCQkgICAgICBkYXRhLT5waHlzX3Byb2NfaWQpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNob3dfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQotCQkJICAqZGV2YXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBwa2d0ZW1wX2RhdGEgKmRhdGEgPSBwa2d0ZW1wX3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQkvKiByZWFkIHRoZSBPdXQtb2Ytc3BlYyBsb2csIG5ldmVyIGNsZWFyICovCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPmFsYXJtKTsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKLQlzdHJ1Y3QgcGtndGVtcF9kYXRhICpkYXRhID0gcGtndGVtcF91cGRhdGVfZGV2aWNlKGRldik7Ci0JaW50IGVyciA9IDA7Ci0KLQlpZiAoYXR0ci0+aW5kZXggPT0gU0hPV19URU1QKQotCQllcnIgPSBkYXRhLT52YWxpZCA/IHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPnRlbXApIDogLUVBR0FJTjsKLQllbHNlIGlmIChhdHRyLT5pbmRleCA9PSBTSE9XX1RKTUFYKQotCQllcnIgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT50am1heCk7Ci0JZWxzZQotCQllcnIgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT50dGFyZ2V0KTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwsIFNIT1dfVEVNUCk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2NyaXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgU0hPV19USk1BWCk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21heCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCBTSE9XX1RUQVJHRVQpOwotc3RhdGljIERFVklDRV9BVFRSKHRlbXAxX2NyaXRfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9sYWJlbCwgU19JUlVHTywgc2hvd19uYW1lLCBOVUxMLCBTSE9XX0xBQkVMKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd19uYW1lLCBOVUxMLCBTSE9XX05BTUUpOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcGtndGVtcF9hdHRyaWJ1dGVzW10gPSB7Ci0JJnNlbnNvcl9kZXZfYXR0cl9uYW1lLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9sYWJlbC5kZXZfYXR0ci5hdHRyLAotCSZkZXZfYXR0cl90ZW1wMV9jcml0X2FsYXJtLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfY3JpdC5kZXZfYXR0ci5hdHRyLAotCU5VTEwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHBrZ3RlbXBfZ3JvdXAgPSB7Ci0JLmF0dHJzID0gcGtndGVtcF9hdHRyaWJ1dGVzLAotfTsKLQotc3RhdGljIHN0cnVjdCBwa2d0ZW1wX2RhdGEgKnBrZ3RlbXBfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHBrZ3RlbXBfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXVuc2lnbmVkIGludCBjcHU7Ci0JaW50IGVycjsKLQotCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQotCWlmICghZGF0YS0+dmFsaWQgfHwgdGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWikpIHsKLQkJdTMyIGVheCwgZWR4OwotCi0JCWRhdGEtPnZhbGlkID0gMDsKLQkJY3B1ID0gZGF0YS0+aWQ7Ci0JCWVyciA9IHJkbXNyX29uX2NwdShjcHUsIE1TUl9JQTMyX1BBQ0tBR0VfVEhFUk1fU1RBVFVTLAotCQkJCSAgICZlYXgsICZlZHgpOwotCQlpZiAoIWVycikgewotCQkJZGF0YS0+YWxhcm0gPSAoZWF4ID4+IDUpICYgMTsKLQkJCWRhdGEtPnRlbXAgPSBkYXRhLT50am1heCAtICgoKGVheCA+PiAxNikKLQkJCQkJCQkmIDB4N2YpICogMTAwMCk7Ci0JCQlkYXRhLT52YWxpZCA9IDE7Ci0JCX0gZWxzZQotCQkJZGV2X2RiZyhkZXYsICJUZW1wZXJhdHVyZSBkYXRhIGludmFsaWQgKDB4JXgpXG4iLCBlYXgpOwotCi0JCWRhdGEtPmxhc3RfdXBkYXRlZCA9IGppZmZpZXM7Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0JcmV0dXJuIGRhdGE7Ci19Ci0KLXN0YXRpYyBpbnQgZ2V0X3RqbWF4KGludCBjcHUsIHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgZGVmYXVsdF90am1heCA9IDEwMDAwMDsKLQlpbnQgZXJyOwotCXUzMiBlYXgsIGVkeDsKLQl1MzIgdmFsOwotCi0JLyogSUEzMl9URU1QRVJBVFVSRV9UQVJHRVQgY29udGFpbnMgdGhlIFRqTWF4IHZhbHVlICovCi0JZXJyID0gcmRtc3Jfc2FmZV9vbl9jcHUoY3B1LCBNU1JfSUEzMl9URU1QRVJBVFVSRV9UQVJHRVQsICZlYXgsICZlZHgpOwotCWlmICghZXJyKSB7Ci0JCXZhbCA9IChlYXggPj4gMTYpICYgMHhmZjsKLQkJaWYgKCh2YWwgPiA4MCkgJiYgKHZhbCA8IDEyMCkpIHsKLQkJCWRldl9pbmZvKGRldiwgIlRqTWF4IGlzICVkIEMuXG4iLCB2YWwpOwotCQkJcmV0dXJuIHZhbCAqIDEwMDA7Ci0JCX0KLQl9Ci0JZGV2X3dhcm4oZGV2LCAiVW5hYmxlIHRvIHJlYWQgVGpNYXggZnJvbSBDUFUuXG4iKTsKLQlyZXR1cm4gZGVmYXVsdF90am1heDsKLX0KLQotc3RhdGljIGludCBfX2RldmluaXQgcGtndGVtcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBwa2d0ZW1wX2RhdGEgKmRhdGE7Ci0JaW50IGVycjsKLQl1MzIgZWF4LCBlZHg7Ci0jaWZkZWYgQ09ORklHX1NNUAotCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YShwZGV2LT5pZCk7Ci0jZW5kaWYKLQotCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGtndGVtcF9kYXRhKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIk91dCBvZiBtZW1vcnlcbiIpOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JZGF0YS0+aWQgPSBwZGV2LT5pZDsKLSNpZmRlZiBDT05GSUdfU01QCi0JZGF0YS0+cGh5c19wcm9jX2lkID0gYy0+cGh5c19wcm9jX2lkOwotI2VuZGlmCi0JZGF0YS0+bmFtZSA9ICJwa2d0ZW1wIjsKLQltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7Ci0KLQkvKiB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIFRIRVJNX1NUQVRVUyBNU1IgKi8KLQllcnIgPSByZG1zcl9zYWZlX29uX2NwdShkYXRhLT5pZCwgTVNSX0lBMzJfUEFDS0FHRV9USEVSTV9TVEFUVVMsCi0JCQkJJmVheCwgJmVkeCk7Ci0JaWYgKGVycikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkiVW5hYmxlIHRvIGFjY2VzcyBUSEVSTV9TVEFUVVMgTVNSLCBnaXZpbmcgdXBcbiIpOwotCQlnb3RvIGV4aXRfZnJlZTsKLQl9Ci0KLQlkYXRhLT50am1heCA9IGdldF90am1heChkYXRhLT5pZCwgJnBkZXYtPmRldik7Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGF0YSk7Ci0KLQllcnIgPSByZG1zcl9zYWZlX29uX2NwdShkYXRhLT5pZCwgTVNSX0lBMzJfVEVNUEVSQVRVUkVfVEFSR0VULAotCQkJCSZlYXgsICZlZHgpOwotCWlmIChlcnIpIHsKLQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIlVuYWJsZSB0byByZWFkIgotCQkJCSIgSUEzMl9URU1QRVJBVFVSRV9UQVJHRVQgTVNSXG4iKTsKLQl9IGVsc2UgewotCQlkYXRhLT50dGFyZ2V0ID0gZGF0YS0+dGptYXggLSAoKChlYXggPj4gOCkgJiAweGZmKSAqIDEwMDApOwotCQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwKLQkJCQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heC5kZXZfYXR0cik7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGV4aXRfZnJlZTsKLQl9Ci0KLQllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmcGtndGVtcF9ncm91cCk7Ci0JaWYgKGVycikKLQkJZ290byBleGl0X2RldjsKLQotCWRhdGEtPmh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmcGRldi0+ZGV2KTsKLQlpZiAoSVNfRVJSKGRhdGEtPmh3bW9uX2RldikpIHsKLQkJZXJyID0gUFRSX0VSUihkYXRhLT5od21vbl9kZXYpOwotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDbGFzcyByZWdpc3RyYXRpb24gZmFpbGVkICglZClcbiIsCi0JCQllcnIpOwotCQlnb3RvIGV4aXRfY2xhc3M7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWV4aXRfY2xhc3M6Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnBrZ3RlbXBfZ3JvdXApOwotZXhpdF9kZXY6Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4LmRldl9hdHRyKTsKLWV4aXRfZnJlZToKLQlrZnJlZShkYXRhKTsKLWV4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBfX2RldmV4aXQgcGtndGVtcF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3QgcGtndGVtcF9kYXRhICpkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0KLQlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5od21vbl9kZXYpOwotCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZwa2d0ZW1wX2dyb3VwKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXguZGV2X2F0dHIpOwotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwotCWtmcmVlKGRhdGEpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwa2d0ZW1wX2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkJLm5hbWUgPSBEUlZOQU1FLAotCX0sCi0JLnByb2JlID0gcGtndGVtcF9wcm9iZSwKLQkucmVtb3ZlID0gX19kZXZleGl0X3AocGtndGVtcF9yZW1vdmUpLAotfTsKLQotc3RydWN0IHBkZXZfZW50cnkgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCXVuc2lnbmVkIGludCBjcHU7Ci0jaWZkZWYgQ09ORklHX1NNUAotCXUxNiBwaHlzX3Byb2NfaWQ7Ci0jZW5kaWYKLX07Ci0KLXN0YXRpYyBMSVNUX0hFQUQocGRldl9saXN0KTsKLXN0YXRpYyBERUZJTkVfTVVURVgocGRldl9saXN0X211dGV4KTsKLQotc3RhdGljIGludCBfX2NwdWluaXQgcGtndGVtcF9kZXZpY2VfYWRkKHVuc2lnbmVkIGludCBjcHUpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCXN0cnVjdCBwZGV2X2VudHJ5ICpwZGV2X2VudHJ5OwotCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YShjcHUpOwotCi0JaWYgKCFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX1BUUykpCi0JCXJldHVybiAwOwotCi0JbXV0ZXhfbG9jaygmcGRldl9saXN0X211dGV4KTsKLQotI2lmZGVmIENPTkZJR19TTVAKLQkvKiBPbmx5IGtlZXAgdGhlIGZpcnN0IGVudHJ5IGluIGVhY2ggcGFja2FnZSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkocGRldl9lbnRyeSwgJnBkZXZfbGlzdCwgbGlzdCkgewotCQlpZiAoYy0+cGh5c19wcm9jX2lkID09IHBkZXZfZW50cnktPnBoeXNfcHJvY19pZCkgewotCQkJZXJyID0gMDsgICAgICAgIC8qIE5vdCBhbiBlcnJvciAqLwotCQkJZ290byBleGl0OwotCQl9Ci0JfQotI2VuZGlmCi0KLQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKERSVk5BTUUsIGNwdSk7Ci0JaWYgKCFwZGV2KSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCXByX2VycigiRGV2aWNlIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKLQkJZ290byBleGl0OwotCX0KLQotCXBkZXZfZW50cnkgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGRldl9lbnRyeSksIEdGUF9LRVJORUwpOwotCWlmICghcGRldl9lbnRyeSkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGV4aXRfZGV2aWNlX3B1dDsKLQl9Ci0KLQllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOwotCWlmIChlcnIpIHsKLQkJcHJfZXJyKCJEZXZpY2UgYWRkaXRpb24gZmFpbGVkICglZClcbiIsIGVycik7Ci0JCWdvdG8gZXhpdF9kZXZpY2VfZnJlZTsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfU01QCi0JcGRldl9lbnRyeS0+cGh5c19wcm9jX2lkID0gYy0+cGh5c19wcm9jX2lkOwotI2VuZGlmCi0JcGRldl9lbnRyeS0+cGRldiA9IHBkZXY7Ci0JcGRldl9lbnRyeS0+Y3B1ID0gY3B1OwotCWxpc3RfYWRkX3RhaWwoJnBkZXZfZW50cnktPmxpc3QsICZwZGV2X2xpc3QpOwotCW11dGV4X3VubG9jaygmcGRldl9saXN0X211dGV4KTsKLQotCXJldHVybiAwOwotCi1leGl0X2RldmljZV9mcmVlOgotCWtmcmVlKHBkZXZfZW50cnkpOwotZXhpdF9kZXZpY2VfcHV0OgotCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7Ci1leGl0OgotCW11dGV4X3VubG9jaygmcGRldl9saXN0X211dGV4KTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQgcGtndGVtcF9kZXZpY2VfcmVtb3ZlKHVuc2lnbmVkIGludCBjcHUpCi17Ci0Jc3RydWN0IHBkZXZfZW50cnkgKnA7Ci0JdW5zaWduZWQgaW50IGk7Ci0JaW50IGVycjsKLQotCW11dGV4X2xvY2soJnBkZXZfbGlzdF9tdXRleCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmcGRldl9saXN0LCBsaXN0KSB7Ci0JCWlmIChwLT5jcHUgIT0gY3B1KQotCQkJY29udGludWU7Ci0KLQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocC0+cGRldik7Ci0JCWxpc3RfZGVsKCZwLT5saXN0KTsKLQkJbXV0ZXhfdW5sb2NrKCZwZGV2X2xpc3RfbXV0ZXgpOwotCQlrZnJlZShwKTsKLQkJZm9yX2VhY2hfY3B1KGksIGNwdV9jb3JlX21hc2soY3B1KSkgewotCQkJaWYgKGkgIT0gY3B1KSB7Ci0JCQkJZXJyID0gcGtndGVtcF9kZXZpY2VfYWRkKGkpOwotCQkJCWlmICghZXJyKQotCQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlyZXR1cm47Ci0JfQotCW11dGV4X3VubG9jaygmcGRldl9saXN0X211dGV4KTsKLX0KLQotc3RhdGljIGludCBfX2NwdWluaXQgcGtndGVtcF9jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCi0JCQkJIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQotewotCXVuc2lnbmVkIGludCBjcHUgPSAodW5zaWduZWQgbG9uZykgaGNwdTsKLQotCXN3aXRjaCAoYWN0aW9uKSB7Ci0JY2FzZSBDUFVfT05MSU5FOgotCWNhc2UgQ1BVX0RPV05fRkFJTEVEOgotCQlwa2d0ZW1wX2RldmljZV9hZGQoY3B1KTsKLQkJYnJlYWs7Ci0JY2FzZSBDUFVfRE9XTl9QUkVQQVJFOgotCQlwa2d0ZW1wX2RldmljZV9yZW1vdmUoY3B1KTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiBOT1RJRllfT0s7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcGtndGVtcF9jcHVfbm90aWZpZXIgX19yZWZkYXRhID0gewotCS5ub3RpZmllcl9jYWxsID0gcGtndGVtcF9jcHVfY2FsbGJhY2ssCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBwa2d0ZW1wX2luaXQodm9pZCkKLXsKLQlpbnQgaSwgZXJyID0gLUVOT0RFVjsKLQotCS8qIHF1aWNrIGNoZWNrIGlmIHdlIHJ1biBJbnRlbCAqLwotCWlmIChjcHVfZGF0YSgwKS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwpCi0JCWdvdG8gZXhpdDsKLQotCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcGtndGVtcF9kcml2ZXIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXhpdDsKLQotCWZvcl9lYWNoX29ubGluZV9jcHUoaSkKLQkJcGtndGVtcF9kZXZpY2VfYWRkKGkpOwotCi0jaWZuZGVmIENPTkZJR19IT1RQTFVHX0NQVQotCWlmIChsaXN0X2VtcHR5KCZwZGV2X2xpc3QpKSB7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXhpdF9kcml2ZXJfdW5yZWc7Ci0JfQotI2VuZGlmCi0KLQlyZWdpc3Rlcl9ob3RjcHVfbm90aWZpZXIoJnBrZ3RlbXBfY3B1X25vdGlmaWVyKTsKLQlyZXR1cm4gMDsKLQotI2lmbmRlZiBDT05GSUdfSE9UUExVR19DUFUKLWV4aXRfZHJpdmVyX3VucmVnOgotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwa2d0ZW1wX2RyaXZlcik7Ci0jZW5kaWYKLWV4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHBrZ3RlbXBfZXhpdCh2b2lkKQotewotCXN0cnVjdCBwZGV2X2VudHJ5ICpwLCAqbjsKLQotCXVucmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZwa2d0ZW1wX2NwdV9ub3RpZmllcik7Ci0JbXV0ZXhfbG9jaygmcGRldl9saXN0X211dGV4KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbiwgJnBkZXZfbGlzdCwgbGlzdCkgewotCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwLT5wZGV2KTsKLQkJbGlzdF9kZWwoJnAtPmxpc3QpOwotCQlrZnJlZShwKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZwZGV2X2xpc3RfbXV0ZXgpOwotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwa2d0ZW1wX2RyaXZlcik7Ci19Ci0KLU1PRFVMRV9BVVRIT1IoIkZlbmdodWEgWXUgPGZlbmdodWEueXVAaW50ZWwuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJJbnRlbCBwcm9jZXNzb3IgcGFja2FnZSB0ZW1wZXJhdHVyZSBtb25pdG9yIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLW1vZHVsZV9pbml0KHBrZ3RlbXBfaW5pdCkKLW1vZHVsZV9leGl0KHBrZ3RlbXBfZXhpdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vcG1idXMuaCBiL2RyaXZlcnMvaHdtb24vcG1idXMuaAppbmRleCBhODFmN2YyLi41MDY0N2FiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3BtYnVzLmgKKysrIGIvZHJpdmVycy9od21vbi9wbWJ1cy5oCkBAIC0yODEsMTMgKzI4MSwxMSBAQAogCiAJdTMyIGZ1bmNbUE1CVVNfUEFHRVNdOwkvKiBGdW5jdGlvbmFsaXR5LCBwZXIgcGFnZSAqLwogCS8qCi0JICogVGhlIGdldF9zdGF0dXMgZnVuY3Rpb24gbWFwcyBtYW51ZmFjdHVyaW5nIHNwZWNpZmljIHN0YXR1cyB2YWx1ZXMKLQkgKiBpbnRvIFBNQnVzIHN0YW5kYXJkIHN0YXR1cyB2YWx1ZXMuCi0JICogVGhpcyBmdW5jdGlvbiBpcyBvcHRpb25hbCBhbmQgb25seSBuZWNlc3NhcnkgaWYgY2hpcCBzcGVjaWZpYyBzdGF0dXMKLQkgKiByZWdpc3RlciB2YWx1ZXMgaGF2ZSB0byBiZSBtYXBwZWQgaW50byBzdGFuZGFyZCBQTUJ1cyBzdGF0dXMgcmVnaXN0ZXIKLQkgKiB2YWx1ZXMuCisJICogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgbWFwIG1hbnVmYWN0dXJpbmcgc3BlY2lmaWMgcmVnaXN0ZXIgdmFsdWVzCisJICogdG8gUE1CdXMgc3RhbmRhcmQgcmVnaXN0ZXIgdmFsdWVzLiBTcGVjaWZ5IG9ubHkgaWYgbWFwcGluZyBpcworCSAqIG5lY2Vzc2FyeS4KIAkgKi8KLQlpbnQgKCpnZXRfc3RhdHVzKShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcGFnZSwgaW50IHJlZyk7CisJaW50ICgqcmVhZF9ieXRlX2RhdGEpKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBwYWdlLCBpbnQgcmVnKTsKIAkvKgogCSAqIFRoZSBpZGVudGlmeSBmdW5jdGlvbiBkZXRlcm1pbmVzIHN1cHBvcnRlZCBQTUJ1cyBmdW5jdGlvbmFsaXR5LgogCSAqIFRoaXMgZnVuY3Rpb24gaXMgb25seSBuZWNlc3NhcnkgaWYgYSBjaGlwIGRyaXZlciBzdXBwb3J0cyBtdWx0aXBsZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9wbWJ1c19jb3JlLmMgYi9kcml2ZXJzL2h3bW9uL3BtYnVzX2NvcmUuYwppbmRleCAxOTZmZmFmLi45ODc5OWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3BtYnVzX2NvcmUuYworKysgYi9kcml2ZXJzL2h3bW9uL3BtYnVzX2NvcmUuYwpAQCAtMjcwLDE4ICsyNzAsMjIgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBtYnVzX2dldF9kcml2ZXJfaW5mbyk7CiAKLXN0YXRpYyBpbnQgcG1idXNfZ2V0X3N0YXR1cyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcGFnZSwgaW50IHJlZykKKy8qCisgKiBfcG1idXNfcmVhZF9ieXRlX2RhdGEoKSBpcyBzaW1pbGFyIHRvIHBtYnVzX3JlYWRfYnl0ZV9kYXRhKCksIGJ1dCBjaGVja3MgaWYKKyAqIGEgZGV2aWNlIHNwZWNpZmljIG1hcHBpbmcgZnVuY2lvbiBleGlzdHMgYW5kIGNhbGxzIGl0IGlmIG5lY2Vzc2FyeS4KKyAqLworc3RhdGljIGludCBfcG1idXNfcmVhZF9ieXRlX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHBhZ2UsIGludCByZWcpCiB7CiAJc3RydWN0IHBtYnVzX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAljb25zdCBzdHJ1Y3QgcG1idXNfZHJpdmVyX2luZm8gKmluZm8gPSBkYXRhLT5pbmZvOwogCWludCBzdGF0dXM7CiAKLQlpZiAoaW5mby0+Z2V0X3N0YXR1cykgewotCQlzdGF0dXMgPSBpbmZvLT5nZXRfc3RhdHVzKGNsaWVudCwgcGFnZSwgcmVnKTsKKwlpZiAoaW5mby0+cmVhZF9ieXRlX2RhdGEpIHsKKwkJc3RhdHVzID0gaW5mby0+cmVhZF9ieXRlX2RhdGEoY2xpZW50LCBwYWdlLCByZWcpOwogCQlpZiAoc3RhdHVzICE9IC1FTk9EQVRBKQogCQkJcmV0dXJuIHN0YXR1czsKIAl9Ci0JcmV0dXJuICBwbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHBhZ2UsIHJlZyk7CisJcmV0dXJuIHBtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcGFnZSwgcmVnKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwbWJ1c19kYXRhICpwbWJ1c191cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTMwMiwzOCArMzA2LDQxIEBACiAJCQlpZiAoIShpbmZvLT5mdW5jW2ldICYgUE1CVVNfSEFWRV9TVEFUVVNfVk9VVCkpCiAJCQkJY29udGludWU7CiAJCQlkYXRhLT5zdGF0dXNbUEJfU1RBVFVTX1ZPVVRfQkFTRSArIGldCi0JCQkgID0gcG1idXNfZ2V0X3N0YXR1cyhjbGllbnQsIGksIFBNQlVTX1NUQVRVU19WT1VUKTsKKwkJCSAgPSBfcG1idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBpLCBQTUJVU19TVEFUVVNfVk9VVCk7CiAJCX0KIAkJZm9yIChpID0gMDsgaSA8IGluZm8tPnBhZ2VzOyBpKyspIHsKIAkJCWlmICghKGluZm8tPmZ1bmNbaV0gJiBQTUJVU19IQVZFX1NUQVRVU19JT1VUKSkKIAkJCQljb250aW51ZTsKIAkJCWRhdGEtPnN0YXR1c1tQQl9TVEFUVVNfSU9VVF9CQVNFICsgaV0KLQkJCSAgPSBwbWJ1c19nZXRfc3RhdHVzKGNsaWVudCwgaSwgUE1CVVNfU1RBVFVTX0lPVVQpOworCQkJICA9IF9wbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIGksIFBNQlVTX1NUQVRVU19JT1VUKTsKIAkJfQogCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+cGFnZXM7IGkrKykgewogCQkJaWYgKCEoaW5mby0+ZnVuY1tpXSAmIFBNQlVTX0hBVkVfU1RBVFVTX1RFTVApKQogCQkJCWNvbnRpbnVlOwogCQkJZGF0YS0+c3RhdHVzW1BCX1NUQVRVU19URU1QX0JBU0UgKyBpXQotCQkJICA9IHBtYnVzX2dldF9zdGF0dXMoY2xpZW50LCBpLAotCQkJCQkgICAgIFBNQlVTX1NUQVRVU19URU1QRVJBVFVSRSk7CisJCQkgID0gX3BtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgaSwKKwkJCQkJCSAgUE1CVVNfU1RBVFVTX1RFTVBFUkFUVVJFKTsKIAkJfQogCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+cGFnZXM7IGkrKykgewogCQkJaWYgKCEoaW5mby0+ZnVuY1tpXSAmIFBNQlVTX0hBVkVfU1RBVFVTX0ZBTjEyKSkKIAkJCQljb250aW51ZTsKIAkJCWRhdGEtPnN0YXR1c1tQQl9TVEFUVVNfRkFOX0JBU0UgKyBpXQotCQkJICA9IHBtYnVzX2dldF9zdGF0dXMoY2xpZW50LCBpLCBQTUJVU19TVEFUVVNfRkFOXzEyKTsKKwkJCSAgPSBfcG1idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBpLAorCQkJCQkJICBQTUJVU19TVEFUVVNfRkFOXzEyKTsKIAkJfQogCiAJCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5wYWdlczsgaSsrKSB7CiAJCQlpZiAoIShpbmZvLT5mdW5jW2ldICYgUE1CVVNfSEFWRV9TVEFUVVNfRkFOMzQpKQogCQkJCWNvbnRpbnVlOwogCQkJZGF0YS0+c3RhdHVzW1BCX1NUQVRVU19GQU4zNF9CQVNFICsgaV0KLQkJCSAgPSBwbWJ1c19nZXRfc3RhdHVzKGNsaWVudCwgaSwgUE1CVVNfU1RBVFVTX0ZBTl8zNCk7CisJCQkgID0gX3BtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgaSwKKwkJCQkJCSAgUE1CVVNfU1RBVFVTX0ZBTl8zNCk7CiAJCX0KIAogCQlpZiAoaW5mby0+ZnVuY1swXSAmIFBNQlVTX0hBVkVfU1RBVFVTX0lOUFVUKQogCQkJZGF0YS0+c3RhdHVzW1BCX1NUQVRVU19JTlBVVF9CQVNFXQotCQkJICA9IHBtYnVzX2dldF9zdGF0dXMoY2xpZW50LCAwLCBQTUJVU19TVEFUVVNfSU5QVVQpOworCQkJICA9IF9wbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIDAsCisJCQkJCQkgIFBNQlVTX1NUQVRVU19JTlBVVCk7CiAKIAkJZm9yIChpID0gMDsgaSA8IGRhdGEtPm51bV9zZW5zb3JzOyBpKyspIHsKIAkJCXN0cnVjdCBwbWJ1c19zZW5zb3IgKnNlbnNvciA9ICZkYXRhLT5zZW5zb3JzW2ldOwpAQCAtNzkzLDUzICs4MDAsNiBAQAogCWRhdGEtPm51bV9sYWJlbHMrKzsKIH0KIAotc3RhdGljIGNvbnN0IGludCBwbWJ1c190ZW1wX3JlZ2lzdGVyc1tdID0gewotCVBNQlVTX1JFQURfVEVNUEVSQVRVUkVfMSwKLQlQTUJVU19SRUFEX1RFTVBFUkFUVVJFXzIsCi0JUE1CVVNfUkVBRF9URU1QRVJBVFVSRV8zCi19OwotCi1zdGF0aWMgY29uc3QgaW50IHBtYnVzX3RlbXBfZmxhZ3NbXSA9IHsKLQlQTUJVU19IQVZFX1RFTVAsCi0JUE1CVVNfSEFWRV9URU1QMiwKLQlQTUJVU19IQVZFX1RFTVAzCi19OwotCi1zdGF0aWMgY29uc3QgaW50IHBtYnVzX2Zhbl9yZWdpc3RlcnNbXSA9IHsKLQlQTUJVU19SRUFEX0ZBTl9TUEVFRF8xLAotCVBNQlVTX1JFQURfRkFOX1NQRUVEXzIsCi0JUE1CVVNfUkVBRF9GQU5fU1BFRURfMywKLQlQTUJVU19SRUFEX0ZBTl9TUEVFRF80Ci19OwotCi1zdGF0aWMgY29uc3QgaW50IHBtYnVzX2Zhbl9jb25maWdfcmVnaXN0ZXJzW10gPSB7Ci0JUE1CVVNfRkFOX0NPTkZJR18xMiwKLQlQTUJVU19GQU5fQ09ORklHXzEyLAotCVBNQlVTX0ZBTl9DT05GSUdfMzQsCi0JUE1CVVNfRkFOX0NPTkZJR18zNAotfTsKLQotc3RhdGljIGNvbnN0IGludCBwbWJ1c19mYW5fc3RhdHVzX3JlZ2lzdGVyc1tdID0gewotCVBNQlVTX1NUQVRVU19GQU5fMTIsCi0JUE1CVVNfU1RBVFVTX0ZBTl8xMiwKLQlQTUJVU19TVEFUVVNfRkFOXzM0LAotCVBNQlVTX1NUQVRVU19GQU5fMzQKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgcG1idXNfZmFuX2ZsYWdzW10gPSB7Ci0JUE1CVVNfSEFWRV9GQU4xMiwKLQlQTUJVU19IQVZFX0ZBTjEyLAotCVBNQlVTX0hBVkVfRkFOMzQsCi0JUE1CVVNfSEFWRV9GQU4zNAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBwbWJ1c19mYW5fc3RhdHVzX2ZsYWdzW10gPSB7Ci0JUE1CVVNfSEFWRV9TVEFUVVNfRkFOMTIsCi0JUE1CVVNfSEFWRV9TVEFUVVNfRkFOMTIsCi0JUE1CVVNfSEFWRV9TVEFUVVNfRkFOMzQsCi0JUE1CVVNfSEFWRV9TVEFUVVNfRkFOMzQKLX07Ci0KIC8qCiAgKiBEZXRlcm1pbmUgbWF4aW11bSBudW1iZXIgb2Ygc2Vuc29ycywgYm9vbGVhbnMsIGFuZCBsYWJlbHMuCiAgKiBUbyBrZWVwIHRoaW5ncyBzaW1wbGUsIG9ubHkgbWFrZSBhIHJvdWdoIGhpZ2ggZXN0aW1hdGUuCkBAIC05MDAsNDk5ICs4NjAsNDMxIEBACiAvKgogICogU2VhcmNoIGZvciBhdHRyaWJ1dGVzLiBBbGxvY2F0ZSBzZW5zb3JzLCBib29sZWFucywgYW5kIGxhYmVscyBhcyBuZWVkZWQuCiAgKi8KLXN0YXRpYyB2b2lkIHBtYnVzX2ZpbmRfYXR0cmlidXRlcyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJCSAgc3RydWN0IHBtYnVzX2RhdGEgKmRhdGEpCisKKy8qCisgKiBUaGUgcG1idXNfbGltaXRfYXR0ciBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGEgc2luZ2xlIGxpbWl0IGF0dHJpYnV0ZQorICogYW5kIGl0cyBhc3NvY2lhdGVkIGFsYXJtIGF0dHJpYnV0ZS4KKyAqLworc3RydWN0IHBtYnVzX2xpbWl0X2F0dHIgeworCXU4IHJlZzsJCQkvKiBMaW1pdCByZWdpc3RlciAqLworCWNvbnN0IGNoYXIgKmF0dHI7CS8qIEF0dHJpYnV0ZSBuYW1lICovCisJY29uc3QgY2hhciAqYWxhcm07CS8qIEFsYXJtIGF0dHJpYnV0ZSBuYW1lICovCisJdTMyIHNiaXQ7CQkvKiBBbGFybSBhdHRyaWJ1dGUgc3RhdHVzIGJpdCAqLworfTsKKworLyoKKyAqIFRoZSBwbWJ1c19zZW5zb3JfYXR0ciBzdHJ1Y3R1cmUgZGVzY3JpYmVzIG9uZSBzZW5zb3IgYXR0cmlidXRlLiBUaGlzCisgKiBkZXNjcmlwdGlvbiBpbmNsdWRlcyBhIHJlZmVyZW5jZSB0byB0aGUgYXNzb2NpYXRlZCBsaW1pdCBhdHRyaWJ1dGVzLgorICovCitzdHJ1Y3QgcG1idXNfc2Vuc29yX2F0dHIgeworCXU4IHJlZzsJCQkJLyogc2Vuc29yIHJlZ2lzdGVyICovCisJZW51bSBwbWJ1c19zZW5zb3JfY2xhc3NlcyBjbGFzczsvKiBzZW5zb3IgY2xhc3MgKi8KKwljb25zdCBjaGFyICpsYWJlbDsJCS8qIHNlbnNvciBsYWJlbCAqLworCWJvb2wgcGFnZWQ7CQkJLyogdHJ1ZSBpZiBwYWdlZCBzZW5zb3IgKi8KKwlib29sIHVwZGF0ZTsJCQkvKiB0cnVlIGlmIHVwZGF0ZSBuZWVkZWQgKi8KKwlib29sIGNvbXBhcmU7CQkJLyogdHJ1ZSBpZiBjb21wYXJlIGZ1bmN0aW9uIG5lZWRlZCAqLworCXUzMiBmdW5jOwkJCS8qIHNlbnNvciBtYXNrICovCisJdTMyIHNmdW5jOwkJCS8qIHNlbnNvciBzdGF0dXMgbWFzayAqLworCWludCBzYmFzZTsJCQkvKiBzdGF0dXMgYmFzZSByZWdpc3RlciAqLworCXUzMiBnYml0OwkJCS8qIGdlbmVyaWMgc3RhdHVzIGJpdCAqLworCWNvbnN0IHN0cnVjdCBwbWJ1c19saW1pdF9hdHRyICpsaW1pdDsvKiBsaW1pdCByZWdpc3RlcnMgKi8KKwlpbnQgbmxpbWl0OwkJCS8qICMgb2YgbGltaXQgcmVnaXN0ZXJzICovCit9OworCisvKgorICogQWRkIGEgc2V0IG9mIGxpbWl0IGF0dHJpYnV0ZXMgYW5kLCBpZiBzdXBwb3J0ZWQsIHRoZSBhc3NvY2lhdGVkCisgKiBhbGFybSBhdHRyaWJ1dGVzLgorICovCitzdGF0aWMgYm9vbCBwbWJ1c19hZGRfbGltaXRfYXR0cnMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgIHN0cnVjdCBwbWJ1c19kYXRhICpkYXRhLAorCQkJCSAgY29uc3Qgc3RydWN0IHBtYnVzX2RyaXZlcl9pbmZvICppbmZvLAorCQkJCSAgY29uc3QgY2hhciAqbmFtZSwgaW50IGluZGV4LCBpbnQgcGFnZSwKKwkJCQkgIGludCBjYmFzZSwKKwkJCQkgIGNvbnN0IHN0cnVjdCBwbWJ1c19zZW5zb3JfYXR0ciAqYXR0cikKK3sKKwljb25zdCBzdHJ1Y3QgcG1idXNfbGltaXRfYXR0ciAqbCA9IGF0dHItPmxpbWl0OworCWludCBubGltaXQgPSBhdHRyLT5ubGltaXQ7CisJYm9vbCBoYXZlX2FsYXJtID0gZmFsc2U7CisJaW50IGksIGNpbmRleDsKKworCWZvciAoaSA9IDA7IGkgPCBubGltaXQ7IGkrKykgeworCQlpZiAocG1idXNfY2hlY2tfd29yZF9yZWdpc3RlcihjbGllbnQsIHBhZ2UsIGwtPnJlZykpIHsKKwkJCWNpbmRleCA9IGRhdGEtPm51bV9zZW5zb3JzOworCQkJcG1idXNfYWRkX3NlbnNvcihkYXRhLCBuYW1lLCBsLT5hdHRyLCBpbmRleCwgcGFnZSwKKwkJCQkJIGwtPnJlZywgYXR0ci0+Y2xhc3MsIGF0dHItPnVwZGF0ZSwKKwkJCQkJIGZhbHNlKTsKKwkJCWlmIChpbmZvLT5mdW5jW3BhZ2VdICYgYXR0ci0+c2Z1bmMpIHsKKwkJCQlpZiAoYXR0ci0+Y29tcGFyZSkgeworCQkJCQlwbWJ1c19hZGRfYm9vbGVhbl9jbXAoZGF0YSwgbmFtZSwKKwkJCQkJCWwtPmFsYXJtLCBpbmRleCwKKwkJCQkJCWNiYXNlLCBjaW5kZXgsCisJCQkJCQlhdHRyLT5zYmFzZSArIHBhZ2UsIGwtPnNiaXQpOworCQkJCX0gZWxzZSB7CisJCQkJCXBtYnVzX2FkZF9ib29sZWFuX3JlZyhkYXRhLCBuYW1lLAorCQkJCQkJbC0+YWxhcm0sIGluZGV4LAorCQkJCQkJYXR0ci0+c2Jhc2UgKyBwYWdlLCBsLT5zYml0KTsKKwkJCQl9CisJCQkJaGF2ZV9hbGFybSA9IHRydWU7CisJCQl9CisJCX0KKwkJbCsrOworCX0KKwlyZXR1cm4gaGF2ZV9hbGFybTsKK30KKworc3RhdGljIHZvaWQgcG1idXNfYWRkX3NlbnNvcl9hdHRyc19vbmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgICAgICAgc3RydWN0IHBtYnVzX2RhdGEgKmRhdGEsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBwbWJ1c19kcml2ZXJfaW5mbyAqaW5mbywKKwkJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICAgICAgaW50IGluZGV4LCBpbnQgcGFnZSwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IHBtYnVzX3NlbnNvcl9hdHRyICphdHRyKQoreworCWJvb2wgaGF2ZV9hbGFybTsKKwlpbnQgY2Jhc2UgPSBkYXRhLT5udW1fc2Vuc29yczsKKworCWlmIChhdHRyLT5sYWJlbCkKKwkJcG1idXNfYWRkX2xhYmVsKGRhdGEsIG5hbWUsIGluZGV4LCBhdHRyLT5sYWJlbCwKKwkJCQlhdHRyLT5wYWdlZCA/IHBhZ2UgKyAxIDogMCk7CisJcG1idXNfYWRkX3NlbnNvcihkYXRhLCBuYW1lLCAiaW5wdXQiLCBpbmRleCwgcGFnZSwgYXR0ci0+cmVnLAorCQkJIGF0dHItPmNsYXNzLCB0cnVlLCB0cnVlKTsKKwlpZiAoYXR0ci0+c2Z1bmMpIHsKKwkJaGF2ZV9hbGFybSA9IHBtYnVzX2FkZF9saW1pdF9hdHRycyhjbGllbnQsIGRhdGEsIGluZm8sIG5hbWUsCisJCQkJCQkgICBpbmRleCwgcGFnZSwgY2Jhc2UsIGF0dHIpOworCQkvKgorCQkgKiBBZGQgZ2VuZXJpYyBhbGFybSBhdHRyaWJ1dGUgb25seSBpZiB0aGVyZSBhcmUgbm8gaW5kaXZpZHVhbAorCQkgKiBhbGFybSBhdHRyaWJ1dGVzLCBhbmQgaWYgdGhlcmUgaXMgYSBnbG9iYWwgYWxhcm0gYml0LgorCQkgKi8KKwkJaWYgKCFoYXZlX2FsYXJtICYmIGF0dHItPmdiaXQpCisJCQlwbWJ1c19hZGRfYm9vbGVhbl9yZWcoZGF0YSwgbmFtZSwgImFsYXJtIiwgaW5kZXgsCisJCQkJCSAgICAgIFBCX1NUQVRVU19CQVNFICsgcGFnZSwKKwkJCQkJICAgICAgYXR0ci0+Z2JpdCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBwbWJ1c19hZGRfc2Vuc29yX2F0dHJzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJICAgc3RydWN0IHBtYnVzX2RhdGEgKmRhdGEsCisJCQkJICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgcG1idXNfc2Vuc29yX2F0dHIgKmF0dHJzLAorCQkJCSAgIGludCBuYXR0cnMpCiB7CiAJY29uc3Qgc3RydWN0IHBtYnVzX2RyaXZlcl9pbmZvICppbmZvID0gZGF0YS0+aW5mbzsKLQlpbnQgcGFnZSwgaTAsIGkxLCBpbl9pbmRleDsKKwlpbnQgaW5kZXgsIGk7CiAKLQkvKgotCSAqIElucHV0IHZvbHRhZ2Ugc2Vuc29ycwotCSAqLwotCWluX2luZGV4ID0gMTsKLQlpZiAoaW5mby0+ZnVuY1swXSAmIFBNQlVTX0hBVkVfVklOKSB7Ci0JCWJvb2wgaGF2ZV9hbGFybSA9IGZhbHNlOworCWluZGV4ID0gMTsKKwlmb3IgKGkgPSAwOyBpIDwgbmF0dHJzOyBpKyspIHsKKwkJaW50IHBhZ2UsIHBhZ2VzOwogCi0JCWkwID0gZGF0YS0+bnVtX3NlbnNvcnM7Ci0JCXBtYnVzX2FkZF9sYWJlbChkYXRhLCAiaW4iLCBpbl9pbmRleCwgInZpbiIsIDApOwotCQlwbWJ1c19hZGRfc2Vuc29yKGRhdGEsICJpbiIsICJpbnB1dCIsIGluX2luZGV4LCAwLAotCQkJCSBQTUJVU19SRUFEX1ZJTiwgUFNDX1ZPTFRBR0VfSU4sIHRydWUsIHRydWUpOwotCQlpZiAocG1idXNfY2hlY2tfd29yZF9yZWdpc3RlcihjbGllbnQsIDAsCi0JCQkJCSAgICAgIFBNQlVTX1ZJTl9VVl9XQVJOX0xJTUlUKSkgewotCQkJaTEgPSBkYXRhLT5udW1fc2Vuc29yczsKLQkJCXBtYnVzX2FkZF9zZW5zb3IoZGF0YSwgImluIiwgIm1pbiIsIGluX2luZGV4LAotCQkJCQkgMCwgUE1CVVNfVklOX1VWX1dBUk5fTElNSVQsCi0JCQkJCSBQU0NfVk9MVEFHRV9JTiwgZmFsc2UsIGZhbHNlKTsKLQkJCWlmIChpbmZvLT5mdW5jWzBdICYgUE1CVVNfSEFWRV9TVEFUVVNfSU5QVVQpIHsKLQkJCQlwbWJ1c19hZGRfYm9vbGVhbl9yZWcoZGF0YSwgImluIiwgIm1pbl9hbGFybSIsCi0JCQkJCQkgICAgICBpbl9pbmRleCwKLQkJCQkJCSAgICAgIFBCX1NUQVRVU19JTlBVVF9CQVNFLAotCQkJCQkJICAgICAgUEJfVk9MVEFHRV9VVl9XQVJOSU5HKTsKLQkJCQloYXZlX2FsYXJtID0gdHJ1ZTsKLQkJCX0KLQkJfQotCQlpZiAocG1idXNfY2hlY2tfd29yZF9yZWdpc3RlcihjbGllbnQsIDAsCi0JCQkJCSAgICAgIFBNQlVTX1ZJTl9VVl9GQVVMVF9MSU1JVCkpIHsKLQkJCWkxID0gZGF0YS0+bnVtX3NlbnNvcnM7Ci0JCQlwbWJ1c19hZGRfc2Vuc29yKGRhdGEsICJpbiIsICJsY3JpdCIsIGluX2luZGV4LAotCQkJCQkgMCwgUE1CVVNfVklOX1VWX0ZBVUxUX0xJTUlULAotCQkJCQkgUFNDX1ZPTFRBR0VfSU4sIGZhbHNlLCBmYWxzZSk7Ci0JCQlpZiAoaW5mby0+ZnVuY1swXSAmIFBNQlVTX0hBVkVfU1RBVFVTX0lOUFVUKSB7Ci0JCQkJcG1idXNfYWRkX2Jvb2xlYW5fcmVnKGRhdGEsICJpbiIsICJsY3JpdF9hbGFybSIsCi0JCQkJCQkgICAgICBpbl9pbmRleCwKLQkJCQkJCSAgICAgIFBCX1NUQVRVU19JTlBVVF9CQVNFLAotCQkJCQkJICAgICAgUEJfVk9MVEFHRV9VVl9GQVVMVCk7Ci0JCQkJaGF2ZV9hbGFybSA9IHRydWU7Ci0JCQl9Ci0JCX0KLQkJaWYgKHBtYnVzX2NoZWNrX3dvcmRfcmVnaXN0ZXIoY2xpZW50LCAwLAotCQkJCQkgICAgICBQTUJVU19WSU5fT1ZfV0FSTl9MSU1JVCkpIHsKLQkJCWkxID0gZGF0YS0+bnVtX3NlbnNvcnM7Ci0JCQlwbWJ1c19hZGRfc2Vuc29yKGRhdGEsICJpbiIsICJtYXgiLCBpbl9pbmRleCwKLQkJCQkJIDAsIFBNQlVTX1ZJTl9PVl9XQVJOX0xJTUlULAotCQkJCQkgUFNDX1ZPTFRBR0VfSU4sIGZhbHNlLCBmYWxzZSk7Ci0JCQlpZiAoaW5mby0+ZnVuY1swXSAmIFBNQlVTX0hBVkVfU1RBVFVTX0lOUFVUKSB7Ci0JCQkJcG1idXNfYWRkX2Jvb2xlYW5fcmVnKGRhdGEsICJpbiIsICJtYXhfYWxhcm0iLAotCQkJCQkJICAgICAgaW5faW5kZXgsCi0JCQkJCQkgICAgICBQQl9TVEFUVVNfSU5QVVRfQkFTRSwKLQkJCQkJCSAgICAgIFBCX1ZPTFRBR0VfT1ZfV0FSTklORyk7Ci0JCQkJaGF2ZV9hbGFybSA9IHRydWU7Ci0JCQl9Ci0JCX0KLQkJaWYgKHBtYnVzX2NoZWNrX3dvcmRfcmVnaXN0ZXIoY2xpZW50LCAwLAotCQkJCQkgICAgICBQTUJVU19WSU5fT1ZfRkFVTFRfTElNSVQpKSB7Ci0JCQlpMSA9IGRhdGEtPm51bV9zZW5zb3JzOwotCQkJcG1idXNfYWRkX3NlbnNvcihkYXRhLCAiaW4iLCAiY3JpdCIsIGluX2luZGV4LAotCQkJCQkgMCwgUE1CVVNfVklOX09WX0ZBVUxUX0xJTUlULAotCQkJCQkgUFNDX1ZPTFRBR0VfSU4sIGZhbHNlLCBmYWxzZSk7Ci0JCQlpZiAoaW5mby0+ZnVuY1swXSAmIFBNQlVTX0hBVkVfU1RBVFVTX0lOUFVUKSB7Ci0JCQkJcG1idXNfYWRkX2Jvb2xlYW5fcmVnKGRhdGEsICJpbiIsICJjcml0X2FsYXJtIiwKLQkJCQkJCSAgICAgIGluX2luZGV4LAotCQkJCQkJICAgICAgUEJfU1RBVFVTX0lOUFVUX0JBU0UsCi0JCQkJCQkgICAgICBQQl9WT0xUQUdFX09WX0ZBVUxUKTsKLQkJCQloYXZlX2FsYXJtID0gdHJ1ZTsKLQkJCX0KLQkJfQotCQkvKgotCQkgKiBBZGQgZ2VuZXJpYyBhbGFybSBhdHRyaWJ1dGUgb25seSBpZiB0aGVyZSBhcmUgbm8gaW5kaXZpZHVhbAotCQkgKiBhdHRyaWJ1dGVzLgotCQkgKi8KLQkJaWYgKCFoYXZlX2FsYXJtKQotCQkJcG1idXNfYWRkX2Jvb2xlYW5fcmVnKGRhdGEsICJpbiIsICJhbGFybSIsCi0JCQkJCSAgICAgIGluX2luZGV4LAotCQkJCQkgICAgICBQQl9TVEFUVVNfQkFTRSwKLQkJCQkJICAgICAgUEJfU1RBVFVTX1ZJTl9VVik7Ci0JCWluX2luZGV4Kys7Ci0JfQotCWlmIChpbmZvLT5mdW5jWzBdICYgUE1CVVNfSEFWRV9WQ0FQKSB7Ci0JCXBtYnVzX2FkZF9sYWJlbChkYXRhLCAiaW4iLCBpbl9pbmRleCwgInZjYXAiLCAwKTsKLQkJcG1idXNfYWRkX3NlbnNvcihkYXRhLCAiaW4iLCAiaW5wdXQiLCBpbl9pbmRleCwgMCwKLQkJCQkgUE1CVVNfUkVBRF9WQ0FQLCBQU0NfVk9MVEFHRV9JTiwgdHJ1ZSwgdHJ1ZSk7Ci0JCWluX2luZGV4Kys7Ci0JfQotCi0JLyoKLQkgKiBPdXRwdXQgdm9sdGFnZSBzZW5zb3JzCi0JICovCi0JZm9yIChwYWdlID0gMDsgcGFnZSA8IGluZm8tPnBhZ2VzOyBwYWdlKyspIHsKLQkJYm9vbCBoYXZlX2FsYXJtID0gZmFsc2U7Ci0KLQkJaWYgKCEoaW5mby0+ZnVuY1twYWdlXSAmIFBNQlVTX0hBVkVfVk9VVCkpCi0JCQljb250aW51ZTsKLQotCQlpMCA9IGRhdGEtPm51bV9zZW5zb3JzOwotCQlwbWJ1c19hZGRfbGFiZWwoZGF0YSwgImluIiwgaW5faW5kZXgsICJ2b3V0IiwgcGFnZSArIDEpOwotCQlwbWJ1c19hZGRfc2Vuc29yKGRhdGEsICJpbiIsICJpbnB1dCIsIGluX2luZGV4LCBwYWdlLAotCQkJCSBQTUJVU19SRUFEX1ZPVVQsIFBTQ19WT0xUQUdFX09VVCwgdHJ1ZSwgdHJ1ZSk7Ci0JCWlmIChwbWJ1c19jaGVja193b3JkX3JlZ2lzdGVyKGNsaWVudCwgcGFnZSwKLQkJCQkJICAgICAgUE1CVVNfVk9VVF9VVl9XQVJOX0xJTUlUKSkgewotCQkJaTEgPSBkYXRhLT5udW1fc2Vuc29yczsKLQkJCXBtYnVzX2FkZF9zZW5zb3IoZGF0YSwgImluIiwgIm1pbiIsIGluX2luZGV4LCBwYWdlLAotCQkJCQkgUE1CVVNfVk9VVF9VVl9XQVJOX0xJTUlULAotCQkJCQkgUFNDX1ZPTFRBR0VfT1VULCBmYWxzZSwgZmFsc2UpOwotCQkJaWYgKGluZm8tPmZ1bmNbcGFnZV0gJiBQTUJVU19IQVZFX1NUQVRVU19WT1VUKSB7Ci0JCQkJcG1idXNfYWRkX2Jvb2xlYW5fcmVnKGRhdGEsICJpbiIsICJtaW5fYWxhcm0iLAotCQkJCQkJICAgICAgaW5faW5kZXgsCi0JCQkJCQkgICAgICBQQl9TVEFUVVNfVk9VVF9CQVNFICsKLQkJCQkJCSAgICAgIHBhZ2UsCi0JCQkJCQkgICAgICBQQl9WT0xUQUdFX1VWX1dBUk5JTkcpOwotCQkJCWhhdmVfYWxhcm0gPSB0cnVlOwotCQkJfQotCQl9Ci0JCWlmIChwbWJ1c19jaGVja193b3JkX3JlZ2lzdGVyKGNsaWVudCwgcGFnZSwKLQkJCQkJICAgICAgUE1CVVNfVk9VVF9VVl9GQVVMVF9MSU1JVCkpIHsKLQkJCWkxID0gZGF0YS0+bnVtX3NlbnNvcnM7Ci0JCQlwbWJ1c19hZGRfc2Vuc29yKGRhdGEsICJpbiIsICJsY3JpdCIsIGluX2luZGV4LCBwYWdlLAotCQkJCQkgUE1CVVNfVk9VVF9VVl9GQVVMVF9MSU1JVCwKLQkJCQkJIFBTQ19WT0xUQUdFX09VVCwgZmFsc2UsIGZhbHNlKTsKLQkJCWlmIChpbmZvLT5mdW5jW3BhZ2VdICYgUE1CVVNfSEFWRV9TVEFUVVNfVk9VVCkgewotCQkJCXBtYnVzX2FkZF9ib29sZWFuX3JlZyhkYXRhLCAiaW4iLCAibGNyaXRfYWxhcm0iLAotCQkJCQkJICAgICAgaW5faW5kZXgsCi0JCQkJCQkgICAgICBQQl9TVEFUVVNfVk9VVF9CQVNFICsKLQkJCQkJCSAgICAgIHBhZ2UsCi0JCQkJCQkgICAgICBQQl9WT0xUQUdFX1VWX0ZBVUxUKTsKLQkJCQloYXZlX2FsYXJtID0gdHJ1ZTsKLQkJCX0KLQkJfQotCQlpZiAocG1idXNfY2hlY2tfd29yZF9yZWdpc3RlcihjbGllbnQsIHBhZ2UsCi0JCQkJCSAgICAgIFBNQlVTX1ZPVVRfT1ZfV0FSTl9MSU1JVCkpIHsKLQkJCWkxID0gZGF0YS0+bnVtX3NlbnNvcnM7Ci0JCQlwbWJ1c19hZGRfc2Vuc29yKGRhdGEsICJpbiIsICJtYXgiLCBpbl9pbmRleCwgcGFnZSwKLQkJCQkJIFBNQlVTX1ZPVVRfT1ZfV0FSTl9MSU1JVCwKLQkJCQkJIFBTQ19WT0xUQUdFX09VVCwgZmFsc2UsIGZhbHNlKTsKLQkJCWlmIChpbmZvLT5mdW5jW3BhZ2VdICYgUE1CVVNfSEFWRV9TVEFUVVNfVk9VVCkgewotCQkJCXBtYnVzX2FkZF9ib29sZWFuX3JlZyhkYXRhLCAiaW4iLCAibWF4X2FsYXJtIiwKLQkJCQkJCSAgICAgIGluX2luZGV4LAotCQkJCQkJICAgICAgUEJfU1RBVFVTX1ZPVVRfQkFTRSArCi0JCQkJCQkgICAgICBwYWdlLAotCQkJCQkJICAgICAgUEJfVk9MVEFHRV9PVl9XQVJOSU5HKTsKLQkJCQloYXZlX2FsYXJtID0gdHJ1ZTsKLQkJCX0KLQkJfQotCQlpZiAocG1idXNfY2hlY2tfd29yZF9yZWdpc3RlcihjbGllbnQsIHBhZ2UsCi0JCQkJCSAgICAgIFBNQlVTX1ZPVVRfT1ZfRkFVTFRfTElNSVQpKSB7Ci0JCQlpMSA9IGRhdGEtPm51bV9zZW5zb3JzOwotCQkJcG1idXNfYWRkX3NlbnNvcihkYXRhLCAiaW4iLCAiY3JpdCIsIGluX2luZGV4LCBwYWdlLAotCQkJCQkgUE1CVVNfVk9VVF9PVl9GQVVMVF9MSU1JVCwKLQkJCQkJIFBTQ19WT0xUQUdFX09VVCwgZmFsc2UsIGZhbHNlKTsKLQkJCWlmIChpbmZvLT5mdW5jW3BhZ2VdICYgUE1CVVNfSEFWRV9TVEFUVVNfVk9VVCkgewotCQkJCXBtYnVzX2FkZF9ib29sZWFuX3JlZyhkYXRhLCAiaW4iLCAiY3JpdF9hbGFybSIsCi0JCQkJCQkgICAgICBpbl9pbmRleCwKLQkJCQkJCSAgICAgIFBCX1NUQVRVU19WT1VUX0JBU0UgKwotCQkJCQkJICAgICAgcGFnZSwKLQkJCQkJCSAgICAgIFBCX1ZPTFRBR0VfT1ZfRkFVTFQpOwotCQkJCWhhdmVfYWxhcm0gPSB0cnVlOwotCQkJfQotCQl9Ci0JCS8qCi0JCSAqIEFkZCBnZW5lcmljIGFsYXJtIGF0dHJpYnV0ZSBvbmx5IGlmIHRoZXJlIGFyZSBubyBpbmRpdmlkdWFsCi0JCSAqIGF0dHJpYnV0ZXMuCi0JCSAqLwotCQlpZiAoIWhhdmVfYWxhcm0pCi0JCQlwbWJ1c19hZGRfYm9vbGVhbl9yZWcoZGF0YSwgImluIiwgImFsYXJtIiwKLQkJCQkJICAgICAgaW5faW5kZXgsCi0JCQkJCSAgICAgIFBCX1NUQVRVU19CQVNFICsgcGFnZSwKLQkJCQkJICAgICAgUEJfU1RBVFVTX1ZPVVRfT1YpOwotCQlpbl9pbmRleCsrOwotCX0KLQotCS8qCi0JICogQ3VycmVudCBzZW5zb3JzCi0JICovCi0KLQkvKgotCSAqIElucHV0IGN1cnJlbnQgc2Vuc29ycwotCSAqLwotCWluX2luZGV4ID0gMTsKLQlpZiAoaW5mby0+ZnVuY1swXSAmIFBNQlVTX0hBVkVfSUlOKSB7Ci0JCWkwID0gZGF0YS0+bnVtX3NlbnNvcnM7Ci0JCXBtYnVzX2FkZF9sYWJlbChkYXRhLCAiY3VyciIsIGluX2luZGV4LCAiaWluIiwgMCk7Ci0JCXBtYnVzX2FkZF9zZW5zb3IoZGF0YSwgImN1cnIiLCAiaW5wdXQiLCBpbl9pbmRleCwgMCwKLQkJCQkgUE1CVVNfUkVBRF9JSU4sIFBTQ19DVVJSRU5UX0lOLCB0cnVlLCB0cnVlKTsKLQkJaWYgKHBtYnVzX2NoZWNrX3dvcmRfcmVnaXN0ZXIoY2xpZW50LCAwLAotCQkJCQkgICAgICBQTUJVU19JSU5fT0NfV0FSTl9MSU1JVCkpIHsKLQkJCWkxID0gZGF0YS0+bnVtX3NlbnNvcnM7Ci0JCQlwbWJ1c19hZGRfc2Vuc29yKGRhdGEsICJjdXJyIiwgIm1heCIsIGluX2luZGV4LAotCQkJCQkgMCwgUE1CVVNfSUlOX09DX1dBUk5fTElNSVQsCi0JCQkJCSBQU0NfQ1VSUkVOVF9JTiwgZmFsc2UsIGZhbHNlKTsKLQkJCWlmIChpbmZvLT5mdW5jWzBdICYgUE1CVVNfSEFWRV9TVEFUVVNfSU5QVVQpIHsKLQkJCQlwbWJ1c19hZGRfYm9vbGVhbl9yZWcoZGF0YSwgImN1cnIiLCAibWF4X2FsYXJtIiwKLQkJCQkJCSAgICAgIGluX2luZGV4LAotCQkJCQkJICAgICAgUEJfU1RBVFVTX0lOUFVUX0JBU0UsCi0JCQkJCQkgICAgICBQQl9JSU5fT0NfV0FSTklORyk7Ci0JCQl9Ci0JCX0KLQkJaWYgKHBtYnVzX2NoZWNrX3dvcmRfcmVnaXN0ZXIoY2xpZW50LCAwLAotCQkJCQkgICAgICBQTUJVU19JSU5fT0NfRkFVTFRfTElNSVQpKSB7Ci0JCQlpMSA9IGRhdGEtPm51bV9zZW5zb3JzOwotCQkJcG1idXNfYWRkX3NlbnNvcihkYXRhLCAiY3VyciIsICJjcml0IiwgaW5faW5kZXgsCi0JCQkJCSAwLCBQTUJVU19JSU5fT0NfRkFVTFRfTElNSVQsCi0JCQkJCSBQU0NfQ1VSUkVOVF9JTiwgZmFsc2UsIGZhbHNlKTsKLQkJCWlmIChpbmZvLT5mdW5jWzBdICYgUE1CVVNfSEFWRV9TVEFUVVNfSU5QVVQpCi0JCQkJcG1idXNfYWRkX2Jvb2xlYW5fcmVnKGRhdGEsICJjdXJyIiwKLQkJCQkJCSAgICAgICJjcml0X2FsYXJtIiwKLQkJCQkJCSAgICAgIGluX2luZGV4LAotCQkJCQkJICAgICAgUEJfU1RBVFVTX0lOUFVUX0JBU0UsCi0JCQkJCQkgICAgICBQQl9JSU5fT0NfRkFVTFQpOwotCQl9Ci0JCWluX2luZGV4Kys7Ci0JfQotCi0JLyoKLQkgKiBPdXRwdXQgY3VycmVudCBzZW5zb3JzCi0JICovCi0JZm9yIChwYWdlID0gMDsgcGFnZSA8IGluZm8tPnBhZ2VzOyBwYWdlKyspIHsKLQkJYm9vbCBoYXZlX2FsYXJtID0gZmFsc2U7Ci0KLQkJaWYgKCEoaW5mby0+ZnVuY1twYWdlXSAmIFBNQlVTX0hBVkVfSU9VVCkpCi0JCQljb250aW51ZTsKLQotCQlpMCA9IGRhdGEtPm51bV9zZW5zb3JzOwotCQlwbWJ1c19hZGRfbGFiZWwoZGF0YSwgImN1cnIiLCBpbl9pbmRleCwgImlvdXQiLCBwYWdlICsgMSk7Ci0JCXBtYnVzX2FkZF9zZW5zb3IoZGF0YSwgImN1cnIiLCAiaW5wdXQiLCBpbl9pbmRleCwgcGFnZSwKLQkJCQkgUE1CVVNfUkVBRF9JT1VULCBQU0NfQ1VSUkVOVF9PVVQsIHRydWUsIHRydWUpOwotCQlpZiAocG1idXNfY2hlY2tfd29yZF9yZWdpc3RlcihjbGllbnQsIHBhZ2UsCi0JCQkJCSAgICAgIFBNQlVTX0lPVVRfT0NfV0FSTl9MSU1JVCkpIHsKLQkJCWkxID0gZGF0YS0+bnVtX3NlbnNvcnM7Ci0JCQlwbWJ1c19hZGRfc2Vuc29yKGRhdGEsICJjdXJyIiwgIm1heCIsIGluX2luZGV4LCBwYWdlLAotCQkJCQkgUE1CVVNfSU9VVF9PQ19XQVJOX0xJTUlULAotCQkJCQkgUFNDX0NVUlJFTlRfT1VULCBmYWxzZSwgZmFsc2UpOwotCQkJaWYgKGluZm8tPmZ1bmNbcGFnZV0gJiBQTUJVU19IQVZFX1NUQVRVU19JT1VUKSB7Ci0JCQkJcG1idXNfYWRkX2Jvb2xlYW5fcmVnKGRhdGEsICJjdXJyIiwgIm1heF9hbGFybSIsCi0JCQkJCQkgICAgICBpbl9pbmRleCwKLQkJCQkJCSAgICAgIFBCX1NUQVRVU19JT1VUX0JBU0UgKwotCQkJCQkJICAgICAgcGFnZSwgUEJfSU9VVF9PQ19XQVJOSU5HKTsKLQkJCQloYXZlX2FsYXJtID0gdHJ1ZTsKLQkJCX0KLQkJfQotCQlpZiAocG1idXNfY2hlY2tfd29yZF9yZWdpc3RlcihjbGllbnQsIHBhZ2UsCi0JCQkJCSAgICAgIFBNQlVTX0lPVVRfVUNfRkFVTFRfTElNSVQpKSB7Ci0JCQlpMSA9IGRhdGEtPm51bV9zZW5zb3JzOwotCQkJcG1idXNfYWRkX3NlbnNvcihkYXRhLCAiY3VyciIsICJsY3JpdCIsIGluX2luZGV4LCBwYWdlLAotCQkJCQkgUE1CVVNfSU9VVF9VQ19GQVVMVF9MSU1JVCwKLQkJCQkJIFBTQ19DVVJSRU5UX09VVCwgZmFsc2UsIGZhbHNlKTsKLQkJCWlmIChpbmZvLT5mdW5jW3BhZ2VdICYgUE1CVVNfSEFWRV9TVEFUVVNfSU9VVCkgewotCQkJCXBtYnVzX2FkZF9ib29sZWFuX3JlZyhkYXRhLCAiY3VyciIsCi0JCQkJCQkgICAgICAibGNyaXRfYWxhcm0iLAotCQkJCQkJICAgICAgaW5faW5kZXgsCi0JCQkJCQkgICAgICBQQl9TVEFUVVNfSU9VVF9CQVNFICsKLQkJCQkJCSAgICAgIHBhZ2UsIFBCX0lPVVRfVUNfRkFVTFQpOwotCQkJCWhhdmVfYWxhcm0gPSB0cnVlOwotCQkJfQotCQl9Ci0JCWlmIChwbWJ1c19jaGVja193b3JkX3JlZ2lzdGVyKGNsaWVudCwgcGFnZSwKLQkJCQkJICAgICAgUE1CVVNfSU9VVF9PQ19GQVVMVF9MSU1JVCkpIHsKLQkJCWkxID0gZGF0YS0+bnVtX3NlbnNvcnM7Ci0JCQlwbWJ1c19hZGRfc2Vuc29yKGRhdGEsICJjdXJyIiwgImNyaXQiLCBpbl9pbmRleCwgcGFnZSwKLQkJCQkJIFBNQlVTX0lPVVRfT0NfRkFVTFRfTElNSVQsCi0JCQkJCSBQU0NfQ1VSUkVOVF9PVVQsIGZhbHNlLCBmYWxzZSk7Ci0JCQlpZiAoaW5mby0+ZnVuY1twYWdlXSAmIFBNQlVTX0hBVkVfU1RBVFVTX0lPVVQpIHsKLQkJCQlwbWJ1c19hZGRfYm9vbGVhbl9yZWcoZGF0YSwgImN1cnIiLAotCQkJCQkJICAgICAgImNyaXRfYWxhcm0iLAotCQkJCQkJICAgICAgaW5faW5kZXgsCi0JCQkJCQkgICAgICBQQl9TVEFUVVNfSU9VVF9CQVNFICsKLQkJCQkJCSAgICAgIHBhZ2UsIFBCX0lPVVRfT0NfRkFVTFQpOwotCQkJCWhhdmVfYWxhcm0gPSB0cnVlOwotCQkJfQotCQl9Ci0JCS8qCi0JCSAqIEFkZCBnZW5lcmljIGFsYXJtIGF0dHJpYnV0ZSBvbmx5IGlmIHRoZXJlIGFyZSBubyBpbmRpdmlkdWFsCi0JCSAqIGF0dHJpYnV0ZXMuCi0JCSAqLwotCQlpZiAoIWhhdmVfYWxhcm0pCi0JCQlwbWJ1c19hZGRfYm9vbGVhbl9yZWcoZGF0YSwgImN1cnIiLCAiYWxhcm0iLAotCQkJCQkgICAgICBpbl9pbmRleCwKLQkJCQkJICAgICAgUEJfU1RBVFVTX0JBU0UgKyBwYWdlLAotCQkJCQkgICAgICBQQl9TVEFUVVNfSU9VVF9PQyk7Ci0JCWluX2luZGV4Kys7Ci0JfQotCi0JLyoKLQkgKiBQb3dlciBzZW5zb3JzCi0JICovCi0JLyoKLQkgKiBJbnB1dCBQb3dlciBzZW5zb3JzCi0JICovCi0JaW5faW5kZXggPSAxOwotCWlmIChpbmZvLT5mdW5jWzBdICYgUE1CVVNfSEFWRV9QSU4pIHsKLQkJaTAgPSBkYXRhLT5udW1fc2Vuc29yczsKLQkJcG1idXNfYWRkX2xhYmVsKGRhdGEsICJwb3dlciIsIGluX2luZGV4LCAicGluIiwgMCk7Ci0JCXBtYnVzX2FkZF9zZW5zb3IoZGF0YSwgInBvd2VyIiwgImlucHV0IiwgaW5faW5kZXgsCi0JCQkJIDAsIFBNQlVTX1JFQURfUElOLCBQU0NfUE9XRVIsIHRydWUsIHRydWUpOwotCQlpZiAocG1idXNfY2hlY2tfd29yZF9yZWdpc3RlcihjbGllbnQsIDAsCi0JCQkJCSAgICAgIFBNQlVTX1BJTl9PUF9XQVJOX0xJTUlUKSkgewotCQkJaTEgPSBkYXRhLT5udW1fc2Vuc29yczsKLQkJCXBtYnVzX2FkZF9zZW5zb3IoZGF0YSwgInBvd2VyIiwgIm1heCIsIGluX2luZGV4LAotCQkJCQkgMCwgUE1CVVNfUElOX09QX1dBUk5fTElNSVQsIFBTQ19QT1dFUiwKLQkJCQkJIGZhbHNlLCBmYWxzZSk7Ci0JCQlpZiAoaW5mby0+ZnVuY1swXSAmIFBNQlVTX0hBVkVfU1RBVFVTX0lOUFVUKQotCQkJCXBtYnVzX2FkZF9ib29sZWFuX3JlZyhkYXRhLCAicG93ZXIiLAotCQkJCQkJICAgICAgImFsYXJtIiwKLQkJCQkJCSAgICAgIGluX2luZGV4LAotCQkJCQkJICAgICAgUEJfU1RBVFVTX0lOUFVUX0JBU0UsCi0JCQkJCQkgICAgICBQQl9QSU5fT1BfV0FSTklORyk7Ci0JCX0KLQkJaW5faW5kZXgrKzsKLQl9Ci0KLQkvKgotCSAqIE91dHB1dCBQb3dlciBzZW5zb3JzCi0JICovCi0JZm9yIChwYWdlID0gMDsgcGFnZSA8IGluZm8tPnBhZ2VzOyBwYWdlKyspIHsKLQkJYm9vbCBuZWVkX2FsYXJtID0gZmFsc2U7Ci0KLQkJaWYgKCEoaW5mby0+ZnVuY1twYWdlXSAmIFBNQlVTX0hBVkVfUE9VVCkpCi0JCQljb250aW51ZTsKLQotCQlpMCA9IGRhdGEtPm51bV9zZW5zb3JzOwotCQlwbWJ1c19hZGRfbGFiZWwoZGF0YSwgInBvd2VyIiwgaW5faW5kZXgsICJwb3V0IiwgcGFnZSArIDEpOwotCQlwbWJ1c19hZGRfc2Vuc29yKGRhdGEsICJwb3dlciIsICJpbnB1dCIsIGluX2luZGV4LCBwYWdlLAotCQkJCSBQTUJVU19SRUFEX1BPVVQsIFBTQ19QT1dFUiwgdHJ1ZSwgdHJ1ZSk7Ci0JCS8qCi0JCSAqIFBlciBod21vbiBzeXNmcyBBUEksIHBvd2VyX2NhcCBpcyB0byBiZSB1c2VkIHRvIGxpbWl0IG91dHB1dAotCQkgKiBwb3dlci4KLQkJICogV2UgaGF2ZSB0d28gcmVnaXN0ZXJzIHJlbGF0ZWQgdG8gbWF4aW11bSBvdXRwdXQgcG93ZXIsCi0JCSAqIFBNQlVTX1BPVVRfTUFYIGFuZCBQTUJVU19QT1VUX09QX1dBUk5fTElNSVQuCi0JCSAqIFBNQlVTX1BPVVRfTUFYIG1hdGNoZXMgdGhlIHBvd2VyWF9jYXAgYXR0cmlidXRlIGRlZmluaXRpb24uCi0JCSAqIFRoZXJlIGlzIG5vIGF0dHJpYnV0ZSBpbiB0aGUgQVBJIHRvIG1hdGNoCi0JCSAqIFBNQlVTX1BPVVRfT1BfV0FSTl9MSU1JVC4gV2UgdXNlIHBvd2VyWF9tYXggZm9yIG5vdy4KLQkJICovCi0JCWlmIChwbWJ1c19jaGVja193b3JkX3JlZ2lzdGVyKGNsaWVudCwgcGFnZSwgUE1CVVNfUE9VVF9NQVgpKSB7Ci0JCQlpMSA9IGRhdGEtPm51bV9zZW5zb3JzOwotCQkJcG1idXNfYWRkX3NlbnNvcihkYXRhLCAicG93ZXIiLCAiY2FwIiwgaW5faW5kZXgsIHBhZ2UsCi0JCQkJCSBQTUJVU19QT1VUX01BWCwgUFNDX1BPV0VSLAotCQkJCQkgZmFsc2UsIGZhbHNlKTsKLQkJCW5lZWRfYWxhcm0gPSB0cnVlOwotCQl9Ci0JCWlmIChwbWJ1c19jaGVja193b3JkX3JlZ2lzdGVyKGNsaWVudCwgcGFnZSwKLQkJCQkJICAgICAgUE1CVVNfUE9VVF9PUF9XQVJOX0xJTUlUKSkgewotCQkJaTEgPSBkYXRhLT5udW1fc2Vuc29yczsKLQkJCXBtYnVzX2FkZF9zZW5zb3IoZGF0YSwgInBvd2VyIiwgIm1heCIsIGluX2luZGV4LCBwYWdlLAotCQkJCQkgUE1CVVNfUE9VVF9PUF9XQVJOX0xJTUlULCBQU0NfUE9XRVIsCi0JCQkJCSBmYWxzZSwgZmFsc2UpOwotCQkJbmVlZF9hbGFybSA9IHRydWU7Ci0JCX0KLQkJaWYgKG5lZWRfYWxhcm0gJiYgKGluZm8tPmZ1bmNbcGFnZV0gJiBQTUJVU19IQVZFX1NUQVRVU19JT1VUKSkKLQkJCXBtYnVzX2FkZF9ib29sZWFuX3JlZyhkYXRhLCAicG93ZXIiLCAiYWxhcm0iLAotCQkJCQkgICAgICBpbl9pbmRleCwKLQkJCQkJICAgICAgUEJfU1RBVFVTX0lPVVRfQkFTRSArIHBhZ2UsCi0JCQkJCSAgICAgIFBCX1BPVVRfT1BfV0FSTklORwotCQkJCQkgICAgICB8IFBCX1BPV0VSX0xJTUlUSU5HKTsKLQotCQlpZiAocG1idXNfY2hlY2tfd29yZF9yZWdpc3RlcihjbGllbnQsIHBhZ2UsCi0JCQkJCSAgICAgIFBNQlVTX1BPVVRfT1BfRkFVTFRfTElNSVQpKSB7Ci0JCQlpMSA9IGRhdGEtPm51bV9zZW5zb3JzOwotCQkJcG1idXNfYWRkX3NlbnNvcihkYXRhLCAicG93ZXIiLCAiY3JpdCIsIGluX2luZGV4LCBwYWdlLAotCQkJCQkgUE1CVVNfUE9VVF9PUF9GQVVMVF9MSU1JVCwgUFNDX1BPV0VSLAotCQkJCQkgZmFsc2UsIGZhbHNlKTsKLQkJCWlmIChpbmZvLT5mdW5jW3BhZ2VdICYgUE1CVVNfSEFWRV9TVEFUVVNfSU9VVCkKLQkJCQlwbWJ1c19hZGRfYm9vbGVhbl9yZWcoZGF0YSwgInBvd2VyIiwKLQkJCQkJCSAgICAgICJjcml0X2FsYXJtIiwKLQkJCQkJCSAgICAgIGluX2luZGV4LAotCQkJCQkJICAgICAgUEJfU1RBVFVTX0lPVVRfQkFTRQotCQkJCQkJICAgICAgKyBwYWdlLAotCQkJCQkJICAgICAgUEJfUE9VVF9PUF9GQVVMVCk7Ci0JCX0KLQkJaW5faW5kZXgrKzsKLQl9Ci0KLQkvKgotCSAqIFRlbXBlcmF0dXJlIHNlbnNvcnMKLQkgKi8KLQlpbl9pbmRleCA9IDE7Ci0JZm9yIChwYWdlID0gMDsgcGFnZSA8IGluZm8tPnBhZ2VzOyBwYWdlKyspIHsKLQkJaW50IHQ7Ci0KLQkJZm9yICh0ID0gMDsgdCA8IEFSUkFZX1NJWkUocG1idXNfdGVtcF9yZWdpc3RlcnMpOyB0KyspIHsKLQkJCWJvb2wgaGF2ZV9hbGFybSA9IGZhbHNlOwotCi0JCQkvKgotCQkJICogQSBQTUJ1cyBjaGlwIG1heSBzdXBwb3J0IGFueSBjb21iaW5hdGlvbiBvZgotCQkJICogdGVtcGVyYXR1cmUgcmVnaXN0ZXJzIG9uIGFueSBwYWdlLiBTbyB3ZSBjYW4gbm90Ci0JCQkgKiBhYm9ydCBhZnRlciBhIGZhaWx1cmUgdG8gZGV0ZWN0IGEgcmVnaXN0ZXIsIGJ1dCBoYXZlCi0JCQkgKiB0byBjb250aW51ZSBjaGVja2luZyBmb3IgYWxsIHJlZ2lzdGVycyBvbiBhbGwgcGFnZXMuCi0JCQkgKi8KLQkJCWlmICghKGluZm8tPmZ1bmNbcGFnZV0gJiBwbWJ1c190ZW1wX2ZsYWdzW3RdKSkKKwkJcGFnZXMgPSBhdHRycy0+cGFnZWQgPyBpbmZvLT5wYWdlcyA6IDE7CisJCWZvciAocGFnZSA9IDA7IHBhZ2UgPCBwYWdlczsgcGFnZSsrKSB7CisJCQlpZiAoIShpbmZvLT5mdW5jW3BhZ2VdICYgYXR0cnMtPmZ1bmMpKQogCQkJCWNvbnRpbnVlOwotCi0JCQlpZiAoIXBtYnVzX2NoZWNrX3dvcmRfcmVnaXN0ZXIKLQkJCSAgICAoY2xpZW50LCBwYWdlLCBwbWJ1c190ZW1wX3JlZ2lzdGVyc1t0XSkpCi0JCQkJY29udGludWU7Ci0KLQkJCWkwID0gZGF0YS0+bnVtX3NlbnNvcnM7Ci0JCQlwbWJ1c19hZGRfc2Vuc29yKGRhdGEsICJ0ZW1wIiwgImlucHV0IiwgaW5faW5kZXgsIHBhZ2UsCi0JCQkJCSBwbWJ1c190ZW1wX3JlZ2lzdGVyc1t0XSwKLQkJCQkJIFBTQ19URU1QRVJBVFVSRSwgdHJ1ZSwgdHJ1ZSk7Ci0KLQkJCS8qCi0JCQkgKiBQTUJ1cyBwcm92aWRlcyBvbmx5IG9uZSBzdGF0dXMgcmVnaXN0ZXIgZm9yIFRFTVAxLTMuCi0JCQkgKiBUaHVzLCB3ZSBjYW4gbm90IHVzZSB0aGUgc3RhdHVzIHJlZ2lzdGVyIHRvIGRldGVybWluZQotCQkJICogd2hpY2ggb2YgdGhlIHRocmVlIHNlbnNvcnMgYWN0dWFsbHkgY2F1c2VkIGFuIGFsYXJtLgotCQkJICogQWx3YXlzIGNvbXBhcmUgY3VycmVudCB0ZW1wZXJhdHVyZSBhZ2FpbnN0IHRoZSBsaW1pdAotCQkJICogcmVnaXN0ZXJzIHRvIGRldGVybWluZSBhbGFybSBjb25kaXRpb25zIGZvciBhCi0JCQkgKiBzcGVjaWZpYyBzZW5zb3IuCi0JCQkgKgotCQkJICogU2luY2UgdGhlcmUgaXMgb25seSBvbmUgc2V0IG9mIGxpbWl0IHJlZ2lzdGVycyBmb3IKLQkJCSAqIHVwIHRvIHRocmVlIHRlbXBlcmF0dXJlIHNlbnNvcnMsIHdlIG5lZWQgdG8gdXBkYXRlCi0JCQkgKiBhbGwgbGltaXQgcmVnaXN0ZXJzIGFmdGVyIHRoZSBsaW1pdCB3YXMgY2hhbmdlZCBmb3IKLQkJCSAqIG9uZSBvZiB0aGUgc2Vuc29ycy4gVGhpcyBlbnN1cmVzIHRoYXQgY29ycmVjdCBsaW1pdHMKLQkJCSAqIGFyZSByZXBvcnRlZCBmb3IgYWxsIHRlbXBlcmF0dXJlIHNlbnNvcnMuCi0JCQkgKi8KLQkJCWlmIChwbWJ1c19jaGVja193b3JkX3JlZ2lzdGVyCi0JCQkgICAgKGNsaWVudCwgcGFnZSwgUE1CVVNfVVRfV0FSTl9MSU1JVCkpIHsKLQkJCQlpMSA9IGRhdGEtPm51bV9zZW5zb3JzOwotCQkJCXBtYnVzX2FkZF9zZW5zb3IoZGF0YSwgInRlbXAiLCAibWluIiwgaW5faW5kZXgsCi0JCQkJCQkgcGFnZSwgUE1CVVNfVVRfV0FSTl9MSU1JVCwKLQkJCQkJCSBQU0NfVEVNUEVSQVRVUkUsIHRydWUsIGZhbHNlKTsKLQkJCQlpZiAoaW5mby0+ZnVuY1twYWdlXSAmIFBNQlVTX0hBVkVfU1RBVFVTX1RFTVApIHsKLQkJCQkJcG1idXNfYWRkX2Jvb2xlYW5fY21wKGRhdGEsICJ0ZW1wIiwKLQkJCQkJCSJtaW5fYWxhcm0iLCBpbl9pbmRleCwgaTEsIGkwLAotCQkJCQkJUEJfU1RBVFVTX1RFTVBfQkFTRSArIHBhZ2UsCi0JCQkJCQlQQl9URU1QX1VUX1dBUk5JTkcpOwotCQkJCQloYXZlX2FsYXJtID0gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAocG1idXNfY2hlY2tfd29yZF9yZWdpc3RlcihjbGllbnQsIHBhZ2UsCi0JCQkJCQkgICAgICBQTUJVU19VVF9GQVVMVF9MSU1JVCkpIHsKLQkJCQlpMSA9IGRhdGEtPm51bV9zZW5zb3JzOwotCQkJCXBtYnVzX2FkZF9zZW5zb3IoZGF0YSwgInRlbXAiLCAibGNyaXQiLAotCQkJCQkJIGluX2luZGV4LCBwYWdlLAotCQkJCQkJIFBNQlVTX1VUX0ZBVUxUX0xJTUlULAotCQkJCQkJIFBTQ19URU1QRVJBVFVSRSwgdHJ1ZSwgZmFsc2UpOwotCQkJCWlmIChpbmZvLT5mdW5jW3BhZ2VdICYgUE1CVVNfSEFWRV9TVEFUVVNfVEVNUCkgewotCQkJCQlwbWJ1c19hZGRfYm9vbGVhbl9jbXAoZGF0YSwgInRlbXAiLAotCQkJCQkJImxjcml0X2FsYXJtIiwgaW5faW5kZXgsIGkxLCBpMCwKLQkJCQkJCVBCX1NUQVRVU19URU1QX0JBU0UgKyBwYWdlLAotCQkJCQkJUEJfVEVNUF9VVF9GQVVMVCk7Ci0JCQkJCWhhdmVfYWxhcm0gPSB0cnVlOwotCQkJCX0KLQkJCX0KLQkJCWlmIChwbWJ1c19jaGVja193b3JkX3JlZ2lzdGVyCi0JCQkgICAgKGNsaWVudCwgcGFnZSwgUE1CVVNfT1RfV0FSTl9MSU1JVCkpIHsKLQkJCQlpMSA9IGRhdGEtPm51bV9zZW5zb3JzOwotCQkJCXBtYnVzX2FkZF9zZW5zb3IoZGF0YSwgInRlbXAiLCAibWF4IiwgaW5faW5kZXgsCi0JCQkJCQkgcGFnZSwgUE1CVVNfT1RfV0FSTl9MSU1JVCwKLQkJCQkJCSBQU0NfVEVNUEVSQVRVUkUsIHRydWUsIGZhbHNlKTsKLQkJCQlpZiAoaW5mby0+ZnVuY1twYWdlXSAmIFBNQlVTX0hBVkVfU1RBVFVTX1RFTVApIHsKLQkJCQkJcG1idXNfYWRkX2Jvb2xlYW5fY21wKGRhdGEsICJ0ZW1wIiwKLQkJCQkJCSJtYXhfYWxhcm0iLCBpbl9pbmRleCwgaTAsIGkxLAotCQkJCQkJUEJfU1RBVFVTX1RFTVBfQkFTRSArIHBhZ2UsCi0JCQkJCQlQQl9URU1QX09UX1dBUk5JTkcpOwotCQkJCQloYXZlX2FsYXJtID0gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAocG1idXNfY2hlY2tfd29yZF9yZWdpc3RlcihjbGllbnQsIHBhZ2UsCi0JCQkJCQkgICAgICBQTUJVU19PVF9GQVVMVF9MSU1JVCkpIHsKLQkJCQlpMSA9IGRhdGEtPm51bV9zZW5zb3JzOwotCQkJCXBtYnVzX2FkZF9zZW5zb3IoZGF0YSwgInRlbXAiLCAiY3JpdCIsIGluX2luZGV4LAotCQkJCQkJIHBhZ2UsIFBNQlVTX09UX0ZBVUxUX0xJTUlULAotCQkJCQkJIFBTQ19URU1QRVJBVFVSRSwgdHJ1ZSwgZmFsc2UpOwotCQkJCWlmIChpbmZvLT5mdW5jW3BhZ2VdICYgUE1CVVNfSEFWRV9TVEFUVVNfVEVNUCkgewotCQkJCQlwbWJ1c19hZGRfYm9vbGVhbl9jbXAoZGF0YSwgInRlbXAiLAotCQkJCQkJImNyaXRfYWxhcm0iLCBpbl9pbmRleCwgaTAsIGkxLAotCQkJCQkJUEJfU1RBVFVTX1RFTVBfQkFTRSArIHBhZ2UsCi0JCQkJCQlQQl9URU1QX09UX0ZBVUxUKTsKLQkJCQkJaGF2ZV9hbGFybSA9IHRydWU7Ci0JCQkJfQotCQkJfQotCQkJLyoKLQkJCSAqIExhc3QgcmVzb3J0IC0gd2Ugd2VyZSBub3QgYWJsZSB0byBjcmVhdGUgYW55IGFsYXJtCi0JCQkgKiByZWdpc3RlcnMuIFJlcG9ydCBhbGFybSBmb3IgYWxsIHNlbnNvcnMgdXNpbmcgdGhlCi0JCQkgKiBzdGF0dXMgcmVnaXN0ZXIgdGVtcGVyYXR1cmUgYWxhcm0gYml0LgotCQkJICovCi0JCQlpZiAoIWhhdmVfYWxhcm0pCi0JCQkJcG1idXNfYWRkX2Jvb2xlYW5fcmVnKGRhdGEsICJ0ZW1wIiwgImFsYXJtIiwKLQkJCQkJCSAgICAgIGluX2luZGV4LAotCQkJCQkJICAgICAgUEJfU1RBVFVTX0JBU0UgKyBwYWdlLAotCQkJCQkJICAgICAgUEJfU1RBVFVTX1RFTVBFUkFUVVJFKTsKLQkJCWluX2luZGV4Kys7CisJCQlwbWJ1c19hZGRfc2Vuc29yX2F0dHJzX29uZShjbGllbnQsIGRhdGEsIGluZm8sIG5hbWUsCisJCQkJCQkgICBpbmRleCwgcGFnZSwgYXR0cnMpOworCQkJaW5kZXgrKzsKIAkJfQorCQlhdHRycysrOwogCX0KK30KIAotCS8qCi0JICogRmFucwotCSAqLwotCWluX2luZGV4ID0gMTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG1idXNfbGltaXRfYXR0ciB2aW5fbGltaXRfYXR0cnNbXSA9IHsKKwl7CisJCS5yZWcgPSBQTUJVU19WSU5fVVZfV0FSTl9MSU1JVCwKKwkJLmF0dHIgPSAibWluIiwKKwkJLmFsYXJtID0gIm1pbl9hbGFybSIsCisJCS5zYml0ID0gUEJfVk9MVEFHRV9VVl9XQVJOSU5HLAorCX0sIHsKKwkJLnJlZyA9IFBNQlVTX1ZJTl9VVl9GQVVMVF9MSU1JVCwKKwkJLmF0dHIgPSAibGNyaXQiLAorCQkuYWxhcm0gPSAibGNyaXRfYWxhcm0iLAorCQkuc2JpdCA9IFBCX1ZPTFRBR0VfVVZfRkFVTFQsCisJfSwgeworCQkucmVnID0gUE1CVVNfVklOX09WX1dBUk5fTElNSVQsCisJCS5hdHRyID0gIm1heCIsCisJCS5hbGFybSA9ICJtYXhfYWxhcm0iLAorCQkuc2JpdCA9IFBCX1ZPTFRBR0VfT1ZfV0FSTklORywKKwl9LCB7CisJCS5yZWcgPSBQTUJVU19WSU5fT1ZfRkFVTFRfTElNSVQsCisJCS5hdHRyID0gImNyaXQiLAorCQkuYWxhcm0gPSAiY3JpdF9hbGFybSIsCisJCS5zYml0ID0gUEJfVk9MVEFHRV9PVl9GQVVMVCwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbWJ1c19saW1pdF9hdHRyIHZvdXRfbGltaXRfYXR0cnNbXSA9IHsKKwl7CisJCS5yZWcgPSBQTUJVU19WT1VUX1VWX1dBUk5fTElNSVQsCisJCS5hdHRyID0gIm1pbiIsCisJCS5hbGFybSA9ICJtaW5fYWxhcm0iLAorCQkuc2JpdCA9IFBCX1ZPTFRBR0VfVVZfV0FSTklORywKKwl9LCB7CisJCS5yZWcgPSBQTUJVU19WT1VUX1VWX0ZBVUxUX0xJTUlULAorCQkuYXR0ciA9ICJsY3JpdCIsCisJCS5hbGFybSA9ICJsY3JpdF9hbGFybSIsCisJCS5zYml0ID0gUEJfVk9MVEFHRV9VVl9GQVVMVCwKKwl9LCB7CisJCS5yZWcgPSBQTUJVU19WT1VUX09WX1dBUk5fTElNSVQsCisJCS5hdHRyID0gIm1heCIsCisJCS5hbGFybSA9ICJtYXhfYWxhcm0iLAorCQkuc2JpdCA9IFBCX1ZPTFRBR0VfT1ZfV0FSTklORywKKwl9LCB7CisJCS5yZWcgPSBQTUJVU19WT1VUX09WX0ZBVUxUX0xJTUlULAorCQkuYXR0ciA9ICJjcml0IiwKKwkJLmFsYXJtID0gImNyaXRfYWxhcm0iLAorCQkuc2JpdCA9IFBCX1ZPTFRBR0VfT1ZfRkFVTFQsCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbWJ1c19zZW5zb3JfYXR0ciB2b2x0YWdlX2F0dHJpYnV0ZXNbXSA9IHsKKwl7CisJCS5yZWcgPSBQTUJVU19SRUFEX1ZJTiwKKwkJLmNsYXNzID0gUFNDX1ZPTFRBR0VfSU4sCisJCS5sYWJlbCA9ICJ2aW4iLAorCQkuZnVuYyA9IFBNQlVTX0hBVkVfVklOLAorCQkuc2Z1bmMgPSBQTUJVU19IQVZFX1NUQVRVU19JTlBVVCwKKwkJLnNiYXNlID0gUEJfU1RBVFVTX0lOUFVUX0JBU0UsCisJCS5nYml0ID0gUEJfU1RBVFVTX1ZJTl9VViwKKwkJLmxpbWl0ID0gdmluX2xpbWl0X2F0dHJzLAorCQkubmxpbWl0ID0gQVJSQVlfU0laRSh2aW5fbGltaXRfYXR0cnMpLAorCX0sIHsKKwkJLnJlZyA9IFBNQlVTX1JFQURfVkNBUCwKKwkJLmNsYXNzID0gUFNDX1ZPTFRBR0VfSU4sCisJCS5sYWJlbCA9ICJ2Y2FwIiwKKwkJLmZ1bmMgPSBQTUJVU19IQVZFX1ZDQVAsCisJfSwgeworCQkucmVnID0gUE1CVVNfUkVBRF9WT1VULAorCQkuY2xhc3MgPSBQU0NfVk9MVEFHRV9PVVQsCisJCS5sYWJlbCA9ICJ2b3V0IiwKKwkJLnBhZ2VkID0gdHJ1ZSwKKwkJLmZ1bmMgPSBQTUJVU19IQVZFX1ZPVVQsCisJCS5zZnVuYyA9IFBNQlVTX0hBVkVfU1RBVFVTX1ZPVVQsCisJCS5zYmFzZSA9IFBCX1NUQVRVU19WT1VUX0JBU0UsCisJCS5nYml0ID0gUEJfU1RBVFVTX1ZPVVRfT1YsCisJCS5saW1pdCA9IHZvdXRfbGltaXRfYXR0cnMsCisJCS5ubGltaXQgPSBBUlJBWV9TSVpFKHZvdXRfbGltaXRfYXR0cnMpLAorCX0KK307CisKKy8qIEN1cnJlbnQgYXR0cmlidXRlcyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBtYnVzX2xpbWl0X2F0dHIgaWluX2xpbWl0X2F0dHJzW10gPSB7CisJeworCQkucmVnID0gUE1CVVNfSUlOX09DX1dBUk5fTElNSVQsCisJCS5hdHRyID0gIm1heCIsCisJCS5hbGFybSA9ICJtYXhfYWxhcm0iLAorCQkuc2JpdCA9IFBCX0lJTl9PQ19XQVJOSU5HLAorCX0sIHsKKwkJLnJlZyA9IFBNQlVTX0lJTl9PQ19GQVVMVF9MSU1JVCwKKwkJLmF0dHIgPSAiY3JpdCIsCisJCS5hbGFybSA9ICJjcml0X2FsYXJtIiwKKwkJLnNiaXQgPSBQQl9JSU5fT0NfRkFVTFQsCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbWJ1c19saW1pdF9hdHRyIGlvdXRfbGltaXRfYXR0cnNbXSA9IHsKKwl7CisJCS5yZWcgPSBQTUJVU19JT1VUX09DX1dBUk5fTElNSVQsCisJCS5hdHRyID0gIm1heCIsCisJCS5hbGFybSA9ICJtYXhfYWxhcm0iLAorCQkuc2JpdCA9IFBCX0lPVVRfT0NfV0FSTklORywKKwl9LCB7CisJCS5yZWcgPSBQTUJVU19JT1VUX1VDX0ZBVUxUX0xJTUlULAorCQkuYXR0ciA9ICJsY3JpdCIsCisJCS5hbGFybSA9ICJsY3JpdF9hbGFybSIsCisJCS5zYml0ID0gUEJfSU9VVF9VQ19GQVVMVCwKKwl9LCB7CisJCS5yZWcgPSBQTUJVU19JT1VUX09DX0ZBVUxUX0xJTUlULAorCQkuYXR0ciA9ICJjcml0IiwKKwkJLmFsYXJtID0gImNyaXRfYWxhcm0iLAorCQkuc2JpdCA9IFBCX0lPVVRfT0NfRkFVTFQsCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbWJ1c19zZW5zb3JfYXR0ciBjdXJyZW50X2F0dHJpYnV0ZXNbXSA9IHsKKwl7CisJCS5yZWcgPSBQTUJVU19SRUFEX0lJTiwKKwkJLmNsYXNzID0gUFNDX0NVUlJFTlRfSU4sCisJCS5sYWJlbCA9ICJpaW4iLAorCQkuZnVuYyA9IFBNQlVTX0hBVkVfSUlOLAorCQkuc2Z1bmMgPSBQTUJVU19IQVZFX1NUQVRVU19JTlBVVCwKKwkJLnNiYXNlID0gUEJfU1RBVFVTX0lOUFVUX0JBU0UsCisJCS5saW1pdCA9IGlpbl9saW1pdF9hdHRycywKKwkJLm5saW1pdCA9IEFSUkFZX1NJWkUoaWluX2xpbWl0X2F0dHJzKSwKKwl9LCB7CisJCS5yZWcgPSBQTUJVU19SRUFEX0lPVVQsCisJCS5jbGFzcyA9IFBTQ19DVVJSRU5UX09VVCwKKwkJLmxhYmVsID0gImlvdXQiLAorCQkucGFnZWQgPSB0cnVlLAorCQkuZnVuYyA9IFBNQlVTX0hBVkVfSU9VVCwKKwkJLnNmdW5jID0gUE1CVVNfSEFWRV9TVEFUVVNfSU9VVCwKKwkJLnNiYXNlID0gUEJfU1RBVFVTX0lPVVRfQkFTRSwKKwkJLmdiaXQgPSBQQl9TVEFUVVNfSU9VVF9PQywKKwkJLmxpbWl0ID0gaW91dF9saW1pdF9hdHRycywKKwkJLm5saW1pdCA9IEFSUkFZX1NJWkUoaW91dF9saW1pdF9hdHRycyksCisJfQorfTsKKworLyogUG93ZXIgYXR0cmlidXRlcyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBtYnVzX2xpbWl0X2F0dHIgcGluX2xpbWl0X2F0dHJzW10gPSB7CisJeworCQkucmVnID0gUE1CVVNfUElOX09QX1dBUk5fTElNSVQsCisJCS5hdHRyID0gIm1heCIsCisJCS5hbGFybSA9ICJhbGFybSIsCisJCS5zYml0ID0gUEJfUElOX09QX1dBUk5JTkcsCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbWJ1c19saW1pdF9hdHRyIHBvdXRfbGltaXRfYXR0cnNbXSA9IHsKKwl7CisJCS5yZWcgPSBQTUJVU19QT1VUX01BWCwKKwkJLmF0dHIgPSAiY2FwIiwKKwkJLmFsYXJtID0gImNhcF9hbGFybSIsCisJCS5zYml0ID0gUEJfUE9XRVJfTElNSVRJTkcsCisJfSwgeworCQkucmVnID0gUE1CVVNfUE9VVF9PUF9XQVJOX0xJTUlULAorCQkuYXR0ciA9ICJtYXgiLAorCQkuYWxhcm0gPSAibWF4X2FsYXJtIiwKKwkJLnNiaXQgPSBQQl9QT1VUX09QX1dBUk5JTkcsCisJfSwgeworCQkucmVnID0gUE1CVVNfUE9VVF9PUF9GQVVMVF9MSU1JVCwKKwkJLmF0dHIgPSAiY3JpdCIsCisJCS5hbGFybSA9ICJjcml0X2FsYXJtIiwKKwkJLnNiaXQgPSBQQl9QT1VUX09QX0ZBVUxULAorCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG1idXNfc2Vuc29yX2F0dHIgcG93ZXJfYXR0cmlidXRlc1tdID0geworCXsKKwkJLnJlZyA9IFBNQlVTX1JFQURfUElOLAorCQkuY2xhc3MgPSBQU0NfUE9XRVIsCisJCS5sYWJlbCA9ICJwaW4iLAorCQkuZnVuYyA9IFBNQlVTX0hBVkVfUElOLAorCQkuc2Z1bmMgPSBQTUJVU19IQVZFX1NUQVRVU19JTlBVVCwKKwkJLnNiYXNlID0gUEJfU1RBVFVTX0lOUFVUX0JBU0UsCisJCS5saW1pdCA9IHBpbl9saW1pdF9hdHRycywKKwkJLm5saW1pdCA9IEFSUkFZX1NJWkUocGluX2xpbWl0X2F0dHJzKSwKKwl9LCB7CisJCS5yZWcgPSBQTUJVU19SRUFEX1BPVVQsCisJCS5jbGFzcyA9IFBTQ19QT1dFUiwKKwkJLmxhYmVsID0gInBvdXQiLAorCQkucGFnZWQgPSB0cnVlLAorCQkuZnVuYyA9IFBNQlVTX0hBVkVfUE9VVCwKKwkJLnNmdW5jID0gUE1CVVNfSEFWRV9TVEFUVVNfSU9VVCwKKwkJLnNiYXNlID0gUEJfU1RBVFVTX0lPVVRfQkFTRSwKKwkJLmxpbWl0ID0gcG91dF9saW1pdF9hdHRycywKKwkJLm5saW1pdCA9IEFSUkFZX1NJWkUocG91dF9saW1pdF9hdHRycyksCisJfQorfTsKKworLyogVGVtcGVyYXR1cmUgYXRyaWJ1dGVzICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG1idXNfbGltaXRfYXR0ciB0ZW1wX2xpbWl0X2F0dHJzW10gPSB7CisJeworCQkucmVnID0gUE1CVVNfVVRfV0FSTl9MSU1JVCwKKwkJLmF0dHIgPSAibWluIiwKKwkJLmFsYXJtID0gIm1pbl9hbGFybSIsCisJCS5zYml0ID0gUEJfVEVNUF9VVF9XQVJOSU5HLAorCX0sIHsKKwkJLnJlZyA9IFBNQlVTX1VUX0ZBVUxUX0xJTUlULAorCQkuYXR0ciA9ICJsY3JpdCIsCisJCS5hbGFybSA9ICJsY3JpdF9hbGFybSIsCisJCS5zYml0ID0gUEJfVEVNUF9VVF9GQVVMVCwKKwl9LCB7CisJCS5yZWcgPSBQTUJVU19PVF9XQVJOX0xJTUlULAorCQkuYXR0ciA9ICJtYXgiLAorCQkuYWxhcm0gPSAibWF4X2FsYXJtIiwKKwkJLnNiaXQgPSBQQl9URU1QX09UX1dBUk5JTkcsCisJfSwgeworCQkucmVnID0gUE1CVVNfT1RfRkFVTFRfTElNSVQsCisJCS5hdHRyID0gImNyaXQiLAorCQkuYWxhcm0gPSAiY3JpdF9hbGFybSIsCisJCS5zYml0ID0gUEJfVEVNUF9PVF9GQVVMVCwKKwl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBtYnVzX3NlbnNvcl9hdHRyIHRlbXBfYXR0cmlidXRlc1tdID0geworCXsKKwkJLnJlZyA9IFBNQlVTX1JFQURfVEVNUEVSQVRVUkVfMSwKKwkJLmNsYXNzID0gUFNDX1RFTVBFUkFUVVJFLAorCQkucGFnZWQgPSB0cnVlLAorCQkudXBkYXRlID0gdHJ1ZSwKKwkJLmNvbXBhcmUgPSB0cnVlLAorCQkuZnVuYyA9IFBNQlVTX0hBVkVfVEVNUCwKKwkJLnNmdW5jID0gUE1CVVNfSEFWRV9TVEFUVVNfVEVNUCwKKwkJLnNiYXNlID0gUEJfU1RBVFVTX1RFTVBfQkFTRSwKKwkJLmdiaXQgPSBQQl9TVEFUVVNfVEVNUEVSQVRVUkUsCisJCS5saW1pdCA9IHRlbXBfbGltaXRfYXR0cnMsCisJCS5ubGltaXQgPSBBUlJBWV9TSVpFKHRlbXBfbGltaXRfYXR0cnMpLAorCX0sIHsKKwkJLnJlZyA9IFBNQlVTX1JFQURfVEVNUEVSQVRVUkVfMiwKKwkJLmNsYXNzID0gUFNDX1RFTVBFUkFUVVJFLAorCQkucGFnZWQgPSB0cnVlLAorCQkudXBkYXRlID0gdHJ1ZSwKKwkJLmNvbXBhcmUgPSB0cnVlLAorCQkuZnVuYyA9IFBNQlVTX0hBVkVfVEVNUDIsCisJCS5zZnVuYyA9IFBNQlVTX0hBVkVfU1RBVFVTX1RFTVAsCisJCS5zYmFzZSA9IFBCX1NUQVRVU19URU1QX0JBU0UsCisJCS5nYml0ID0gUEJfU1RBVFVTX1RFTVBFUkFUVVJFLAorCQkubGltaXQgPSB0ZW1wX2xpbWl0X2F0dHJzLAorCQkubmxpbWl0ID0gQVJSQVlfU0laRSh0ZW1wX2xpbWl0X2F0dHJzKSwKKwl9LCB7CisJCS5yZWcgPSBQTUJVU19SRUFEX1RFTVBFUkFUVVJFXzMsCisJCS5jbGFzcyA9IFBTQ19URU1QRVJBVFVSRSwKKwkJLnBhZ2VkID0gdHJ1ZSwKKwkJLnVwZGF0ZSA9IHRydWUsCisJCS5jb21wYXJlID0gdHJ1ZSwKKwkJLmZ1bmMgPSBQTUJVU19IQVZFX1RFTVAzLAorCQkuc2Z1bmMgPSBQTUJVU19IQVZFX1NUQVRVU19URU1QLAorCQkuc2Jhc2UgPSBQQl9TVEFUVVNfVEVNUF9CQVNFLAorCQkuZ2JpdCA9IFBCX1NUQVRVU19URU1QRVJBVFVSRSwKKwkJLmxpbWl0ID0gdGVtcF9saW1pdF9hdHRycywKKwkJLm5saW1pdCA9IEFSUkFZX1NJWkUodGVtcF9saW1pdF9hdHRycyksCisJfQorfTsKKworc3RhdGljIGNvbnN0IGludCBwbWJ1c19mYW5fcmVnaXN0ZXJzW10gPSB7CisJUE1CVVNfUkVBRF9GQU5fU1BFRURfMSwKKwlQTUJVU19SRUFEX0ZBTl9TUEVFRF8yLAorCVBNQlVTX1JFQURfRkFOX1NQRUVEXzMsCisJUE1CVVNfUkVBRF9GQU5fU1BFRURfNAorfTsKKworc3RhdGljIGNvbnN0IGludCBwbWJ1c19mYW5fY29uZmlnX3JlZ2lzdGVyc1tdID0geworCVBNQlVTX0ZBTl9DT05GSUdfMTIsCisJUE1CVVNfRkFOX0NPTkZJR18xMiwKKwlQTUJVU19GQU5fQ09ORklHXzM0LAorCVBNQlVTX0ZBTl9DT05GSUdfMzQKK307CisKK3N0YXRpYyBjb25zdCBpbnQgcG1idXNfZmFuX3N0YXR1c19yZWdpc3RlcnNbXSA9IHsKKwlQTUJVU19TVEFUVVNfRkFOXzEyLAorCVBNQlVTX1NUQVRVU19GQU5fMTIsCisJUE1CVVNfU1RBVFVTX0ZBTl8zNCwKKwlQTUJVU19TVEFUVVNfRkFOXzM0Cit9OworCitzdGF0aWMgY29uc3QgdTMyIHBtYnVzX2Zhbl9mbGFnc1tdID0geworCVBNQlVTX0hBVkVfRkFOMTIsCisJUE1CVVNfSEFWRV9GQU4xMiwKKwlQTUJVU19IQVZFX0ZBTjM0LAorCVBNQlVTX0hBVkVfRkFOMzQKK307CisKK3N0YXRpYyBjb25zdCB1MzIgcG1idXNfZmFuX3N0YXR1c19mbGFnc1tdID0geworCVBNQlVTX0hBVkVfU1RBVFVTX0ZBTjEyLAorCVBNQlVTX0hBVkVfU1RBVFVTX0ZBTjEyLAorCVBNQlVTX0hBVkVfU1RBVFVTX0ZBTjM0LAorCVBNQlVTX0hBVkVfU1RBVFVTX0ZBTjM0Cit9OworCisvKiBGYW5zICovCitzdGF0aWMgdm9pZCBwbWJ1c19hZGRfZmFuX2F0dHJpYnV0ZXMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgICAgIHN0cnVjdCBwbWJ1c19kYXRhICpkYXRhKQoreworCWNvbnN0IHN0cnVjdCBwbWJ1c19kcml2ZXJfaW5mbyAqaW5mbyA9IGRhdGEtPmluZm87CisJaW50IGluZGV4ID0gMTsKKwlpbnQgcGFnZTsKKwogCWZvciAocGFnZSA9IDA7IHBhZ2UgPCBpbmZvLT5wYWdlczsgcGFnZSsrKSB7CiAJCWludCBmOwogCkBAIC0xNDAzLDkgKzEyOTUsNyBAQAogCQkJCWJyZWFrOwogCiAJCQlpZiAoIXBtYnVzX2NoZWNrX3dvcmRfcmVnaXN0ZXIoY2xpZW50LCBwYWdlLAotCQkJCQkJICAgICAgIHBtYnVzX2Zhbl9yZWdpc3RlcnNbZl0pCi0JCQkgICAgfHwgIXBtYnVzX2NoZWNrX2J5dGVfcmVnaXN0ZXIoY2xpZW50LCBwYWdlLAotCQkJCQkJcG1idXNfZmFuX2NvbmZpZ19yZWdpc3RlcnNbZl0pKQorCQkJCQkJICAgICAgIHBtYnVzX2Zhbl9yZWdpc3RlcnNbZl0pKQogCQkJCWJyZWFrOwogCiAJCQkvKgpAQCAtMTQxMywxNCArMTMwMywxMyBAQAogCQkJICogRWFjaCBmYW4gY29uZmlndXJhdGlvbiByZWdpc3RlciBjb3ZlcnMgbXVsdGlwbGUgZmFucywKIAkJCSAqIHNvIHdlIGhhdmUgdG8gZG8gc29tZSBtYWdpYy4KIAkJCSAqLwotCQkJcmVndmFsID0gcG1idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBwYWdlLAorCQkJcmVndmFsID0gX3BtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcGFnZSwKIAkJCQlwbWJ1c19mYW5fY29uZmlnX3JlZ2lzdGVyc1tmXSk7CiAJCQlpZiAocmVndmFsIDwgMCB8fAogCQkJICAgICghKHJlZ3ZhbCAmIChQQl9GQU5fMV9JTlNUQUxMRUQgPj4gKChmICYgMSkgKiA0KSkpKSkKIAkJCQljb250aW51ZTsKIAotCQkJaTAgPSBkYXRhLT5udW1fc2Vuc29yczsKLQkJCXBtYnVzX2FkZF9zZW5zb3IoZGF0YSwgImZhbiIsICJpbnB1dCIsIGluX2luZGV4LCBwYWdlLAorCQkJcG1idXNfYWRkX3NlbnNvcihkYXRhLCAiZmFuIiwgImlucHV0IiwgaW5kZXgsIHBhZ2UsCiAJCQkJCSBwbWJ1c19mYW5fcmVnaXN0ZXJzW2ZdLCBQU0NfRkFOLCB0cnVlLAogCQkJCQkgdHJ1ZSk7CiAKQEAgLTE0MzgsMTcgKzEzMjcsNDAgQEAKIAkJCQllbHNlCiAJCQkJCWJhc2UgPSBQQl9TVEFUVVNfRkFOX0JBU0UgKyBwYWdlOwogCQkJCXBtYnVzX2FkZF9ib29sZWFuX3JlZyhkYXRhLCAiZmFuIiwgImFsYXJtIiwKLQkJCQkJaW5faW5kZXgsIGJhc2UsCisJCQkJCWluZGV4LCBiYXNlLAogCQkJCQlQQl9GQU5fRkFOMV9XQVJOSU5HID4+IChmICYgMSkpOwogCQkJCXBtYnVzX2FkZF9ib29sZWFuX3JlZyhkYXRhLCAiZmFuIiwgImZhdWx0IiwKLQkJCQkJaW5faW5kZXgsIGJhc2UsCisJCQkJCWluZGV4LCBiYXNlLAogCQkJCQlQQl9GQU5fRkFOMV9GQVVMVCA+PiAoZiAmIDEpKTsKIAkJCX0KLQkJCWluX2luZGV4Kys7CisJCQlpbmRleCsrOwogCQl9CiAJfQogfQogCitzdGF0aWMgdm9pZCBwbWJ1c19maW5kX2F0dHJpYnV0ZXMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgIHN0cnVjdCBwbWJ1c19kYXRhICpkYXRhKQoreworCS8qIFZvbHRhZ2Ugc2Vuc29ycyAqLworCXBtYnVzX2FkZF9zZW5zb3JfYXR0cnMoY2xpZW50LCBkYXRhLCAiaW4iLCB2b2x0YWdlX2F0dHJpYnV0ZXMsCisJCQkgICAgICAgQVJSQVlfU0laRSh2b2x0YWdlX2F0dHJpYnV0ZXMpKTsKKworCS8qIEN1cnJlbnQgc2Vuc29ycyAqLworCXBtYnVzX2FkZF9zZW5zb3JfYXR0cnMoY2xpZW50LCBkYXRhLCAiY3VyciIsIGN1cnJlbnRfYXR0cmlidXRlcywKKwkJCSAgICAgICBBUlJBWV9TSVpFKGN1cnJlbnRfYXR0cmlidXRlcykpOworCisJLyogUG93ZXIgc2Vuc29ycyAqLworCXBtYnVzX2FkZF9zZW5zb3JfYXR0cnMoY2xpZW50LCBkYXRhLCAicG93ZXIiLCBwb3dlcl9hdHRyaWJ1dGVzLAorCQkJICAgICAgIEFSUkFZX1NJWkUocG93ZXJfYXR0cmlidXRlcykpOworCisJLyogVGVtcGVyYXR1cmUgc2Vuc29ycyAqLworCXBtYnVzX2FkZF9zZW5zb3JfYXR0cnMoY2xpZW50LCBkYXRhLCAidGVtcCIsIHRlbXBfYXR0cmlidXRlcywKKwkJCSAgICAgICBBUlJBWV9TSVpFKHRlbXBfYXR0cmlidXRlcykpOworCisJLyogRmFucyAqLworCXBtYnVzX2FkZF9mYW5fYXR0cmlidXRlcyhjbGllbnQsIGRhdGEpOworfQorCiAvKgogICogSWRlbnRpZnkgY2hpcCBwYXJhbWV0ZXJzLgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGFsbCBjaGlwcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vc2h0MTUuYyBiL2RyaXZlcnMvaHdtb24vc2h0MTUuYwppbmRleCBmNGU2MTdhLi5jZjQzMzBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3NodDE1LmMKKysrIGIvZHJpdmVycy9od21vbi9zaHQxNS5jCkBAIC0xLDYgKzEsMTAgQEAKIC8qCiAgKiBzaHQxNS5jIC0gc3VwcG9ydCBmb3IgdGhlIFNIVDE1IFRlbXBlcmF0dXJlIGFuZCBIdW1pZGl0eSBTZW5zb3IKICAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSBTYXZvaXItZmFpcmUgTGludXggSW5jLgorICogICAgICAgICAgSmVyb21lIE91ZmVsbGEgPGplcm9tZS5vdWZlbGxhQHNhdm9pcmZhaXJlbGludXguY29tPgorICogICAgICAgICAgVml2aWVuIERpZGVsb3QgPHZpdmllbi5kaWRlbG90QHNhdm9pcmZhaXJlbGludXguY29tPgorICoKICAqIENvcHlyaWdodCAoYykgMjAwOSBKb25hdGhhbiBDYW1lcm9uCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA3IFdvdXRlciBIb3JyZQpAQCAtOSwxNiArMTMsNyBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKLSAqIEN1cnJlbnRseSBpZ25vcmluZyBjaGVja3N1bSBvbiByZWFkaW5ncy4KLSAqIERlZmF1bHQgcmVzb2x1dGlvbiBvbmx5ICgxNGJpdCB0ZW1wLCAxMmJpdCBodW1pZGl0eSkKLSAqIElnbm9yaW5nIGJhdHRlcnkgc3RhdHVzLgotICogSGVhdGVyIG5vdCBlbmFibGVkLgotICogVGltaW5ncyBhcmUgYWxsIGNvbnNlcnZhdGl2ZS4KLSAqCi0gKiBEYXRhIHNoZWV0IGF2YWlsYWJsZSAoMS8yMDA5KSBhdAotICogaHR0cDovL3d3dy5zZW5zaXJpb24uY2gvZW4vcGRmL3Byb2R1Y3RfaW5mb3JtYXRpb24vRGF0YXNoZWV0LWh1bWlkaXR5LXNlbnNvci1TSFQxeC5wZGYKLSAqCi0gKiBSZWd1bGF0b3Igc3VwcGx5IG5hbWUgPSB2Y2MKKyAqIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLCBzZWUgdGhlIERvY3VtZW50YXRpb24vaHdtb24vc2h0MTUgZmlsZS4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CkBAIC0zOSwxNyArMzQsMzEgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCi0jZGVmaW5lIFNIVDE1X01FQVNVUkVfVEVNUAkzCi0jZGVmaW5lIFNIVDE1X01FQVNVUkVfUkgJNQorLyogQ29tbWFuZHMgKi8KKyNkZWZpbmUgU0hUMTVfTUVBU1VSRV9URU1QCQkweDAzCisjZGVmaW5lIFNIVDE1X01FQVNVUkVfUkgJCTB4MDUKKyNkZWZpbmUgU0hUMTVfV1JJVEVfU1RBVFVTCQkweDA2CisjZGVmaW5lIFNIVDE1X1JFQURfU1RBVFVTCQkweDA3CisjZGVmaW5lIFNIVDE1X1NPRlRfUkVTRVQJCTB4MUUKIAotI2RlZmluZSBTSFQxNV9SRUFESU5HX05PVEhJTkcJMAotI2RlZmluZSBTSFQxNV9SRUFESU5HX1RFTVAJMQotI2RlZmluZSBTSFQxNV9SRUFESU5HX0hVTUlECTIKKy8qIE1pbiB0aW1pbmdzICovCisjZGVmaW5lIFNIVDE1X1RTQ0tMCQkJMTAwCS8qIChuc2VjcykgY2xvY2sgbG93ICovCisjZGVmaW5lIFNIVDE1X1RTQ0tICQkJMTAwCS8qIChuc2VjcykgY2xvY2sgaGlnaCAqLworI2RlZmluZSBTSFQxNV9UU1UJCQkxNTAJLyogKG5zZWNzKSBkYXRhIHNldHVwIHRpbWUgKi8KKyNkZWZpbmUgU0hUMTVfVFNSU1QJCQkxMQkvKiAobXNlY3MpIHNvZnQgcmVzZXQgdGltZSAqLwogCi0vKiBNaW4gdGltaW5ncyBpbiBuc2VjcyAqLwotI2RlZmluZSBTSFQxNV9UU0NLTAkJMTAwCS8qIGNsb2NrIGxvdyAqLwotI2RlZmluZSBTSFQxNV9UU0NLSAkJMTAwCS8qIGNsb2NrIGhpZ2ggKi8KLSNkZWZpbmUgU0hUMTVfVFNVCQkxNTAJLyogZGF0YSBzZXR1cCB0aW1lICovCisvKiBTdGF0dXMgUmVnaXN0ZXIgQml0cyAqLworI2RlZmluZSBTSFQxNV9TVEFUVVNfTE9XX1JFU09MVVRJT04JMHgwMQorI2RlZmluZSBTSFQxNV9TVEFUVVNfTk9fT1RQX1JFTE9BRAkweDAyCisjZGVmaW5lIFNIVDE1X1NUQVRVU19IRUFURVIJCTB4MDQKKyNkZWZpbmUgU0hUMTVfU1RBVFVTX0xPV19CQVRURVJZCTB4NDAKKworLyogQWN0aW9ucyB0aGUgZHJpdmVyIG1heSBiZSBkb2luZyAqLworZW51bSBzaHQxNV9zdGF0ZSB7CisJU0hUMTVfUkVBRElOR19OT1RISU5HLAorCVNIVDE1X1JFQURJTkdfVEVNUCwKKwlTSFQxNV9SRUFESU5HX0hVTUlECit9OwogCiAvKioKICAqIHN0cnVjdCBzaHQxNV90ZW1wcGFpciAtIGVsZW1lbnRzIG9mIHZvbHRhZ2UgZGVwZW5kZW50IHRlbXAgY2FsYwpAQCAtNjEsOSArNzAsNyBAQAogCWludCBkMTsKIH07CiAKLS8qIFRhYmxlIDkgZnJvbSBkYXRhIHNoZWV0IC0gcmVsYXRlcyB0ZW1wZXJhdHVyZSBjYWxjdWxhdGlvbgotICogdG8gc3VwcGx5IHZvbHRhZ2UuCi0gKi8KKy8qIFRhYmxlIDkgZnJvbSBkYXRhc2hlZXQgLSByZWxhdGVzIHRlbXBlcmF0dXJlIGNhbGN1bGF0aW9uIHRvIHN1cHBseSB2b2x0YWdlICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNodDE1X3RlbXBwYWlyIHRlbXBwb2ludHNbXSA9IHsKIAl7IDI1MDAwMDAsIC0zOTQwMCB9LAogCXsgMzAwMDAwMCwgLTM5NjAwIH0sCkBAIC03MiwyOSArNzksNzAgQEAKIAl7IDUwMDAwMDAsIC00MDEwMCB9LAogfTsKIAorLyogVGFibGUgZnJvbSBDUkMgZGF0YXNoZWV0LCBzZWN0aW9uIDIuNCAqLworc3RhdGljIGNvbnN0IHU4IHNodDE1X2NyYzhfdGFibGVbXSA9IHsKKwkwLAk0OSwJOTgsCTgzLAkxOTYsCTI0NSwJMTY2LAkxNTEsCisJMTg1LAkxMzYsCTIxOSwJMjM0LAkxMjUsCTc2LAkzMSwJNDYsCisJNjcsCTExNCwJMzMsCTE2LAkxMzUsCTE4MiwJMjI5LAkyMTIsCisJMjUwLAkyMDMsCTE1MiwJMTY5LAk2MiwJMTUsCTkyLAkxMDksCisJMTM0LAkxODMsCTIyOCwJMjEzLAk2NiwJMTE1LAkzMiwJMTcsCisJNjMsCTE0LAk5MywJMTA4LAkyNTEsCTIwMiwJMTUzLAkxNjgsCisJMTk3LAkyNDQsCTE2NywJMTUwLAkxLAk0OCwJOTksCTgyLAorCTEyNCwJNzcsCTMwLAk0NywJMTg0LAkxMzcsCTIxOCwJMjM1LAorCTYxLAkxMiwJOTUsCTExMCwJMjQ5LAkyMDAsCTE1NSwJMTcwLAorCTEzMiwJMTgxLAkyMzAsCTIxNSwJNjQsCTExMywJMzQsCTE5LAorCTEyNiwJNzksCTI4LAk0NSwJMTg2LAkxMzksCTIxNiwJMjMzLAorCTE5OSwJMjQ2LAkxNjUsCTE0OCwJMywJNTAsCTk3LAk4MCwKKwkxODcsCTEzOCwJMjE3LAkyMzIsCTEyNywJNzgsCTI5LAk0NCwKKwkyLAk1MSwJOTYsCTgxLAkxOTgsCTI0NywJMTY0LAkxNDksCisJMjQ4LAkyMDEsCTE1NCwJMTcxLAk2MCwJMTMsCTk0LAkxMTEsCisJNjUsCTExMiwJMzUsCTE4LAkxMzMsCTE4MCwJMjMxLAkyMTQsCisJMTIyLAk3NSwJMjQsCTQxLAkxOTAsCTE0MywJMjIwLAkyMzcsCisJMTk1LAkyNDIsCTE2MSwJMTQ0LAk3LAk1NCwJMTAxLAk4NCwKKwk1NywJOCwJOTEsCTEwNiwJMjUzLAkyMDQsCTE1OSwJMTc0LAorCTEyOCwJMTc3LAkyMjYsCTIxMSwJNjgsCTExNywJMzgsCTIzLAorCTI1MiwJMjA1LAkxNTgsCTE3NSwJNTYsCTksCTkwLAkxMDcsCisJNjksCTExNiwJMzksCTIyLAkxMjksCTE3NiwJMjI3LAkyMTAsCisJMTkxLAkxNDIsCTIyMSwJMjM2LAkxMjMsCTc0LAkyNSwJNDAsCisJNiwJNTUsCTEwMCwJODUsCTE5NCwJMjQzLAkxNjAsCTE0NSwKKwk3MSwJMTE4LAkzNywJMjAsCTEzMSwJMTc4LAkyMjUsCTIwOCwKKwkyNTQsCTIwNywJMTU2LAkxNzMsCTU4LAkxMSwJODgsCTEwNSwKKwk0LAk1MywJMTAyLAk4NywJMTkyLAkyNDEsCTE2MiwJMTQ3LAorCTE4OSwJMTQwLAkyMjMsCTIzOCwJMTIxLAk3MiwJMjcsCTQyLAorCTE5MywJMjQwLAkxNjMsCTE0NiwJNSwJNTIsCTEwMywJODYsCisJMTIwLAk3MywJMjYsCTQzLAkxODgsCTE0MSwJMjIyLAkyMzksCisJMTMwLAkxNzksCTIyNCwJMjA5LAk3MCwJMTE5LAkzNiwJMjEsCisJNTksCTEwLAk4OSwJMTA0LAkyNTUsCTIwNiwJMTU3LAkxNzIKK307CisKIC8qKgogICogc3RydWN0IHNodDE1X2RhdGEgLSBkZXZpY2UgaW5zdGFuY2Ugc3BlY2lmaWMgZGF0YQotICogQHBkYXRhOglwbGF0Zm9ybSBkYXRhIChncGlvJ3MgZXRjKQotICogQHJlYWRfd29yazoJYmggb2YgaW50ZXJydXB0IGhhbmRsZXIKLSAqIEB3YWl0X3F1ZXVlOgl3YWl0IHF1ZXVlIGZvciBnZXR0aW5nIHZhbHVlcyBmcm9tIGRldmljZQotICogQHZhbF90ZW1wOglsYXN0IHRlbXBlcmF0dXJlIHZhbHVlIHJlYWQgZnJvbSBkZXZpY2UKLSAqIEB2YWxfaHVtaWQ6IAlsYXN0IGh1bWlkaXR5IHZhbHVlIHJlYWQgZnJvbSBkZXZpY2UKLSAqIEBmbGFnOglzdGF0dXMgZmxhZyB1c2VkIHRvIGlkZW50aWZ5IHdoYXQgdGhlIGxhc3QgcmVxdWVzdCB3YXMKLSAqIEB2YWxpZDoJYXJlIHRoZSBjdXJyZW50IHN0b3JlZCB2YWx1ZXMgdmFsaWQgKHN0YXJ0IGNvbmRpdGlvbikKLSAqIEBsYXN0X3VwZGF0Ogl0aW1lIG9mIGxhc3QgdXBkYXRlCi0gKiBAcmVhZF9sb2NrOgltdXRleCB0byBlbnN1cmUgb25seSBvbmUgcmVhZCBpbiBwcm9ncmVzcwotICoJCWF0IGEgdGltZS4KLSAqIEBkZXY6CWFzc29jaWF0ZSBkZXZpY2Ugc3RydWN0dXJlCi0gKiBAaHdtb25fZGV2OglkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIGh3bW9uIHN1YnN5c3RlbQotICogQHJlZzoJYXNzb2NpYXRlZCByZWd1bGF0b3IgKGlmIHNwZWNpZmllZCkKLSAqIEBuYjoJCW5vdGlmaWVyIGJsb2NrIHRvIGhhbmRsZSBub3RpZmljYXRpb25zIG9mIHZvbHRhZ2UgY2hhbmdlcwotICogQHN1cHBseV91VjoJbG9jYWwgY29weSBvZiBzdXBwbHkgdm9sdGFnZSB1c2VkIHRvIGFsbG93Ci0gKgkJdXNlIG9mIHJlZ3VsYXRvciBjb25zdW1lciBpZiBhdmFpbGFibGUKLSAqIEBzdXBwbHlfdVZfdmFsaWQ6ICAgaW5kaWNhdGVzIHRoYXQgYW4gdXBkYXRlZCB2YWx1ZSBoYXMgbm90IHlldAotICoJCWJlZW4gb2J0YWluZWQgZnJvbSB0aGUgcmVndWxhdG9yIGFuZCBzbyBhbnkgY2FsY3VsYXRpb25zCi0gKgkJYmFzZWQgdXBvbiBpdCB3aWxsIGJlIGludmFsaWQuCi0gKiBAdXBkYXRlX3N1cHBseV93b3JrOgl3b3JrIHN0cnVjdCB0aGF0IGlzIHVzZWQgdG8gdXBkYXRlIHRoZSBzdXBwbHlfdVYKLSAqIEBpbnRlcnJ1cHRfaGFuZGxlZDoJZmxhZyB1c2VkIHRvIGluZGljYXRlIGEgaGFuZGVyIGhhcyBiZWVuIHNjaGVkdWxlZAorICogQHBkYXRhOgkJcGxhdGZvcm0gZGF0YSAoZ3BpbydzIGV0YykuCisgKiBAcmVhZF93b3JrOgkJYmggb2YgaW50ZXJydXB0IGhhbmRsZXIuCisgKiBAd2FpdF9xdWV1ZToJCXdhaXQgcXVldWUgZm9yIGdldHRpbmcgdmFsdWVzIGZyb20gZGV2aWNlLgorICogQHZhbF90ZW1wOgkJbGFzdCB0ZW1wZXJhdHVyZSB2YWx1ZSByZWFkIGZyb20gZGV2aWNlLgorICogQHZhbF9odW1pZDoJCWxhc3QgaHVtaWRpdHkgdmFsdWUgcmVhZCBmcm9tIGRldmljZS4KKyAqIEB2YWxfc3RhdHVzOgkJbGFzdCBzdGF0dXMgcmVnaXN0ZXIgdmFsdWUgcmVhZCBmcm9tIGRldmljZS4KKyAqIEBjaGVja3N1bV9vazoJbGFzdCB2YWx1ZSByZWFkIGZyb20gdGhlIGRldmljZSBwYXNzZWQgQ1JDIHZhbGlkYXRpb24uCisgKiBAY2hlY2tzdW1taW5nOglmbGFnIHVzZWQgdG8gZW5hYmxlIHRoZSBkYXRhIHZhbGlkYXRpb24gd2l0aCBDUkMuCisgKiBAc3RhdGU6CQlzdGF0ZSBpZGVudGlmeWluZyB0aGUgYWN0aW9uIHRoZSBkcml2ZXIgaXMgZG9pbmcuCisgKiBAbWVhc3VyZW1lbnRzX3ZhbGlkOglhcmUgdGhlIGN1cnJlbnQgc3RvcmVkIG1lYXN1cmVzIHZhbGlkIChzdGFydCBjb25kaXRpb24pLgorICogQHN0YXR1c192YWxpZDoJaXMgdGhlIGN1cnJlbnQgc3RvcmVkIHN0YXR1cyB2YWxpZCAoc3RhcnQgY29uZGl0aW9uKS4KKyAqIEBsYXN0X21lYXN1cmVtZW50Ogl0aW1lIG9mIGxhc3QgbWVhc3VyZS4KKyAqIEBsYXN0X3N0YXR1czoJdGltZSBvZiBsYXN0IHN0YXR1cyByZWFkaW5nLgorICogQHJlYWRfbG9jazoJCW11dGV4IHRvIGVuc3VyZSBvbmx5IG9uZSByZWFkIGluIHByb2dyZXNzIGF0IGEgdGltZS4KKyAqIEBkZXY6CQlhc3NvY2lhdGUgZGV2aWNlIHN0cnVjdHVyZS4KKyAqIEBod21vbl9kZXY6CQlkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIGh3bW9uIHN1YnN5c3RlbS4KKyAqIEByZWc6CQlhc3NvY2lhdGVkIHJlZ3VsYXRvciAoaWYgc3BlY2lmaWVkKS4KKyAqIEBuYjoJCQlub3RpZmllciBibG9jayB0byBoYW5kbGUgbm90aWZpY2F0aW9ucyBvZiB2b2x0YWdlCisgKiAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLgorICogQHN1cHBseV91VjoJCWxvY2FsIGNvcHkgb2Ygc3VwcGx5IHZvbHRhZ2UgdXNlZCB0byBhbGxvdyB1c2Ugb2YKKyAqICAgICAgICAgICAgICAgICAgICAgIHJlZ3VsYXRvciBjb25zdW1lciBpZiBhdmFpbGFibGUuCisgKiBAc3VwcGx5X3VWX3ZhbGlkOglpbmRpY2F0ZXMgdGhhdCBhbiB1cGRhdGVkIHZhbHVlIGhhcyBub3QgeWV0IGJlZW4KKyAqCQkJb2J0YWluZWQgZnJvbSB0aGUgcmVndWxhdG9yIGFuZCBzbyBhbnkgY2FsY3VsYXRpb25zCisgKgkJCWJhc2VkIHVwb24gaXQgd2lsbCBiZSBpbnZhbGlkLgorICogQHVwZGF0ZV9zdXBwbHlfd29yazoJd29yayBzdHJ1Y3QgdGhhdCBpcyB1c2VkIHRvIHVwZGF0ZSB0aGUgc3VwcGx5X3VWLgorICogQGludGVycnVwdF9oYW5kbGVkOglmbGFnIHVzZWQgdG8gaW5kaWNhdGUgYSBoYW5kbGVyIGhhcyBiZWVuIHNjaGVkdWxlZC4KICAqLwogc3RydWN0IHNodDE1X2RhdGEgewogCXN0cnVjdCBzaHQxNV9wbGF0Zm9ybV9kYXRhCSpwZGF0YTsKQEAgLTEwMiwyMSArMTUwLDYwIEBACiAJd2FpdF9xdWV1ZV9oZWFkX3QJCXdhaXRfcXVldWU7CiAJdWludDE2X3QJCQl2YWxfdGVtcDsKIAl1aW50MTZfdAkJCXZhbF9odW1pZDsKLQl1OAkJCQlmbGFnOwotCXU4CQkJCXZhbGlkOwotCXVuc2lnbmVkIGxvbmcJCQlsYXN0X3VwZGF0OworCXU4CQkJCXZhbF9zdGF0dXM7CisJYm9vbAkJCQljaGVja3N1bV9vazsKKwlib29sCQkJCWNoZWNrc3VtbWluZzsKKwllbnVtIHNodDE1X3N0YXRlCQlzdGF0ZTsKKwlib29sCQkJCW1lYXN1cmVtZW50c192YWxpZDsKKwlib29sCQkJCXN0YXR1c192YWxpZDsKKwl1bnNpZ25lZCBsb25nCQkJbGFzdF9tZWFzdXJlbWVudDsKKwl1bnNpZ25lZCBsb25nCQkJbGFzdF9zdGF0dXM7CiAJc3RydWN0IG11dGV4CQkJcmVhZF9sb2NrOwogCXN0cnVjdCBkZXZpY2UJCQkqZGV2OwogCXN0cnVjdCBkZXZpY2UJCQkqaHdtb25fZGV2OwogCXN0cnVjdCByZWd1bGF0b3IJCSpyZWc7CiAJc3RydWN0IG5vdGlmaWVyX2Jsb2NrCQluYjsKIAlpbnQJCQkJc3VwcGx5X3VWOwotCWludAkJCQlzdXBwbHlfdVZfdmFsaWQ7CisJYm9vbAkJCQlzdXBwbHlfdVZfdmFsaWQ7CiAJc3RydWN0IHdvcmtfc3RydWN0CQl1cGRhdGVfc3VwcGx5X3dvcms7CiAJYXRvbWljX3QJCQlpbnRlcnJ1cHRfaGFuZGxlZDsKIH07CiAKIC8qKgorICogc2h0MTVfcmV2ZXJzZSgpIC0gcmV2ZXJzZSBhIGJ5dGUKKyAqIEBieXRlOiAgICBieXRlIHRvIHJldmVyc2UuCisgKi8KK3N0YXRpYyB1OCBzaHQxNV9yZXZlcnNlKHU4IGJ5dGUpCit7CisJdTggaSwgYzsKKworCWZvciAoYyA9IDAsIGkgPSAwOyBpIDwgODsgaSsrKQorCQljIHw9ICghIShieXRlICYgKDEgPDwgaSkpKSA8PCAoNyAtIGkpOworCXJldHVybiBjOworfQorCisvKioKKyAqIHNodDE1X2NyYzgoKSAtIGNvbXB1dGUgY3JjOAorICogQGRhdGE6CXNodDE1IHNwZWNpZmljIGRhdGEuCisgKiBAdmFsdWU6CXNodDE1IHJldHJpZXZlZCBkYXRhLgorICoKKyAqIFRoaXMgaW1wbGVtZW50cyBzZWN0aW9uIDIgb2YgdGhlIENSQyBkYXRhc2hlZXQuCisgKi8KK3N0YXRpYyB1OCBzaHQxNV9jcmM4KHN0cnVjdCBzaHQxNV9kYXRhICpkYXRhLAorCQljb25zdCB1OCAqdmFsdWUsCisJCWludCBsZW4pCit7CisJdTggY3JjID0gc2h0MTVfcmV2ZXJzZShkYXRhLT52YWxfc3RhdHVzICYgMHgwRik7CisKKwl3aGlsZSAobGVuLS0pIHsKKwkJY3JjID0gc2h0MTVfY3JjOF90YWJsZVsqdmFsdWUgXiBjcmNdOworCQl2YWx1ZSsrOworCX0KKworCXJldHVybiBjcmM7Cit9CisKKy8qKgogICogc2h0MTVfY29ubmVjdGlvbl9yZXNldCgpIC0gcmVzZXQgdGhlIGNvbW1zIGludGVyZmFjZQogICogQGRhdGE6CXNodDE1IHNwZWNpZmljIGRhdGEKICAqCkBAIC0xMjUsNiArMjEyLDcgQEAKIHN0YXRpYyB2b2lkIHNodDE1X2Nvbm5lY3Rpb25fcmVzZXQoc3RydWN0IHNodDE1X2RhdGEgKmRhdGEpCiB7CiAJaW50IGk7CisKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZGF0YS0+cGRhdGEtPmdwaW9fZGF0YSwgMSk7CiAJbmRlbGF5KFNIVDE1X1RTQ0tMKTsKIAlncGlvX3NldF92YWx1ZShkYXRhLT5wZGF0YS0+Z3Bpb19zY2ssIDApOwpAQCAtMTM2LDE0ICsyMjQsMTQgQEAKIAkJbmRlbGF5KFNIVDE1X1RTQ0tMKTsKIAl9CiB9CisKIC8qKgogICogc2h0MTVfc2VuZF9iaXQoKSAtIHNlbmQgYW4gaW5kaXZpZHVhbCBiaXQgdG8gdGhlIGRldmljZQogICogQGRhdGE6CWRldmljZSBzdGF0ZSBkYXRhCiAgKiBAdmFsOgl2YWx1ZSBvZiBiaXQgdG8gYmUgc2VudAotICoqLworICovCiBzdGF0aWMgaW5saW5lIHZvaWQgc2h0MTVfc2VuZF9iaXQoc3RydWN0IHNodDE1X2RhdGEgKmRhdGEsIGludCB2YWwpCiB7Ci0KIAlncGlvX3NldF92YWx1ZShkYXRhLT5wZGF0YS0+Z3Bpb19kYXRhLCB2YWwpOwogCW5kZWxheShTSFQxNV9UU1UpOwogCWdwaW9fc2V0X3ZhbHVlKGRhdGEtPnBkYXRhLT5ncGlvX3NjaywgMSk7CkBAIC0xNTQsMTIgKzI0MiwxMiBAQAogCiAvKioKICAqIHNodDE1X3RyYW5zbWlzc2lvbl9zdGFydCgpIC0gc3BlY2lmaWMgc2VxdWVuY2UgZm9yIG5ldyB0cmFuc21pc3Npb24KLSAqCiAgKiBAZGF0YToJZGV2aWNlIHN0YXRlIGRhdGEKKyAqCiAgKiBUaW1pbmdzIGZvciB0aGlzIGFyZSBub3QgZG9jdW1lbnRlZCBvbiB0aGUgZGF0YSBzaGVldCwgc28gdmVyeQogICogY29uc2VydmF0aXZlIG9uZXMgdXNlZCBpbiBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpbXBsZW1lbnRzCiAgKiBmaWd1cmUgMTIgb24gdGhlIGRhdGEgc2hlZXQuCi0gKiovCisgKi8KIHN0YXRpYyB2b2lkIHNodDE1X3RyYW5zbWlzc2lvbl9zdGFydChzdHJ1Y3Qgc2h0MTVfZGF0YSAqZGF0YSkKIHsKIAkvKiBlbnN1cmUgZGF0YSBpcyBoaWdoIGFuZCBvdXRwdXQgKi8KQEAgLTE4MCwyMyArMjY4LDI2IEBACiAJZ3Bpb19zZXRfdmFsdWUoZGF0YS0+cGRhdGEtPmdwaW9fc2NrLCAwKTsKIAluZGVsYXkoU0hUMTVfVFNDS0wpOwogfQorCiAvKioKICAqIHNodDE1X3NlbmRfYnl0ZSgpIC0gc2VuZCBhIHNpbmdsZSBieXRlIHRvIHRoZSBkZXZpY2UKICAqIEBkYXRhOglkZXZpY2Ugc3RhdGUKICAqIEBieXRlOgl2YWx1ZSB0byBiZSBzZW50Ci0gKiovCisgKi8KIHN0YXRpYyB2b2lkIHNodDE1X3NlbmRfYnl0ZShzdHJ1Y3Qgc2h0MTVfZGF0YSAqZGF0YSwgdTggYnl0ZSkKIHsKIAlpbnQgaTsKKwogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKIAkJc2h0MTVfc2VuZF9iaXQoZGF0YSwgISEoYnl0ZSAmIDB4ODApKTsKIAkJYnl0ZSA8PD0gMTsKIAl9CiB9CisKIC8qKgogICogc2h0MTVfd2FpdF9mb3JfcmVzcG9uc2UoKSAtIGNoZWNrcyBmb3IgYWNrIGZyb20gZGV2aWNlCiAgKiBAZGF0YToJZGV2aWNlIHN0YXRlCi0gKiovCisgKi8KIHN0YXRpYyBpbnQgc2h0MTVfd2FpdF9mb3JfcmVzcG9uc2Uoc3RydWN0IHNodDE1X2RhdGEgKmRhdGEpCiB7CiAJZ3Bpb19kaXJlY3Rpb25faW5wdXQoZGF0YS0+cGRhdGEtPmdwaW9fZGF0YSk7CkBAIC0yMjAsMjcgKzMxMSwxOTkgQEAKICAqCiAgKiBPbiBlbnRyeSwgc2NrIGlzIG91dHB1dCBsb3csIGRhdGEgaXMgb3V0cHV0IHB1bGwgaGlnaAogICogYW5kIHRoZSBpbnRlcnJ1cHQgZGlzYWJsZWQuCi0gKiovCisgKi8KIHN0YXRpYyBpbnQgc2h0MTVfc2VuZF9jbWQoc3RydWN0IHNodDE1X2RhdGEgKmRhdGEsIHU4IGNtZCkKIHsKIAlpbnQgcmV0ID0gMDsKKwogCXNodDE1X3RyYW5zbWlzc2lvbl9zdGFydChkYXRhKTsKIAlzaHQxNV9zZW5kX2J5dGUoZGF0YSwgY21kKTsKIAlyZXQgPSBzaHQxNV93YWl0X2Zvcl9yZXNwb25zZShkYXRhKTsKIAlyZXR1cm4gcmV0OwogfQorCiAvKioKLSAqIHNodDE1X3VwZGF0ZV9zaW5nbGVfdmFsKCkgLSBnZXQgYSBuZXcgdmFsdWUgZnJvbSBkZXZpY2UKKyAqIHNodDE1X3NvZnRfcmVzZXQoKSAtIHNlbmQgYSBzb2Z0IHJlc2V0IGNvbW1hbmQKKyAqIEBkYXRhOglzaHQxNSBzcGVjaWZpYyBkYXRhLgorICoKKyAqIEFzIGRlc2NyaWJlZCBpbiBzZWN0aW9uIDMuMiBvZiB0aGUgZGF0YXNoZWV0LgorICovCitzdGF0aWMgaW50IHNodDE1X3NvZnRfcmVzZXQoc3RydWN0IHNodDE1X2RhdGEgKmRhdGEpCit7CisJaW50IHJldDsKKworCXJldCA9IHNodDE1X3NlbmRfY21kKGRhdGEsIFNIVDE1X1NPRlRfUkVTRVQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJbXNsZWVwKFNIVDE1X1RTUlNUKTsKKwkvKiBkZXZpY2UgcmVzZXRzIGRlZmF1bHQgaGFyZHdhcmUgc3RhdHVzIHJlZ2lzdGVyIHZhbHVlICovCisJZGF0YS0+dmFsX3N0YXR1cyA9IDA7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHNodDE1X2FjaygpIC0gc2VuZCBhIGFjaworICogQGRhdGE6CXNodDE1IHNwZWNpZmljIGRhdGEuCisgKgorICogRWFjaCBieXRlIG9mIGRhdGEgaXMgYWNrbm93bGVkZ2VkIGJ5IHB1bGxpbmcgdGhlIGRhdGEgbGluZQorICogbG93IGZvciBvbmUgY2xvY2sgcHVsc2UuCisgKi8KK3N0YXRpYyB2b2lkIHNodDE1X2FjayhzdHJ1Y3Qgc2h0MTVfZGF0YSAqZGF0YSkKK3sKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZGF0YS0+cGRhdGEtPmdwaW9fZGF0YSwgMCk7CisJbmRlbGF5KFNIVDE1X1RTVSk7CisJZ3Bpb19zZXRfdmFsdWUoZGF0YS0+cGRhdGEtPmdwaW9fc2NrLCAxKTsKKwluZGVsYXkoU0hUMTVfVFNVKTsKKwlncGlvX3NldF92YWx1ZShkYXRhLT5wZGF0YS0+Z3Bpb19zY2ssIDApOworCW5kZWxheShTSFQxNV9UU1UpOworCWdwaW9fc2V0X3ZhbHVlKGRhdGEtPnBkYXRhLT5ncGlvX2RhdGEsIDEpOworCisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoZGF0YS0+cGRhdGEtPmdwaW9fZGF0YSk7Cit9CisKKy8qKgorICogc2h0MTVfZW5kX3RyYW5zbWlzc2lvbigpIC0gbm90aWZ5IGRldmljZSBvZiBlbmQgb2YgdHJhbnNtaXNzaW9uCisgKiBAZGF0YToJZGV2aWNlIHN0YXRlLgorICoKKyAqIFRoaXMgaXMgYmFzaWNhbGx5IGEgTkFLIChzaW5nbGUgY2xvY2sgcHVsc2UsIGRhdGEgaGlnaCkuCisgKi8KK3N0YXRpYyB2b2lkIHNodDE1X2VuZF90cmFuc21pc3Npb24oc3RydWN0IHNodDE1X2RhdGEgKmRhdGEpCit7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGRhdGEtPnBkYXRhLT5ncGlvX2RhdGEsIDEpOworCW5kZWxheShTSFQxNV9UU1UpOworCWdwaW9fc2V0X3ZhbHVlKGRhdGEtPnBkYXRhLT5ncGlvX3NjaywgMSk7CisJbmRlbGF5KFNIVDE1X1RTQ0tIKTsKKwlncGlvX3NldF92YWx1ZShkYXRhLT5wZGF0YS0+Z3Bpb19zY2ssIDApOworCW5kZWxheShTSFQxNV9UU0NLTCk7Cit9CisKKy8qKgorICogc2h0MTVfcmVhZF9ieXRlKCkgLSBSZWFkIGEgYnl0ZSBiYWNrIGZyb20gdGhlIGRldmljZQorICogQGRhdGE6CWRldmljZSBzdGF0ZS4KKyAqLworc3RhdGljIHU4IHNodDE1X3JlYWRfYnl0ZShzdHJ1Y3Qgc2h0MTVfZGF0YSAqZGF0YSkKK3sKKwlpbnQgaTsKKwl1OCBieXRlID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpIHsKKwkJYnl0ZSA8PD0gMTsKKwkJZ3Bpb19zZXRfdmFsdWUoZGF0YS0+cGRhdGEtPmdwaW9fc2NrLCAxKTsKKwkJbmRlbGF5KFNIVDE1X1RTQ0tIKTsKKwkJYnl0ZSB8PSAhIWdwaW9fZ2V0X3ZhbHVlKGRhdGEtPnBkYXRhLT5ncGlvX2RhdGEpOworCQlncGlvX3NldF92YWx1ZShkYXRhLT5wZGF0YS0+Z3Bpb19zY2ssIDApOworCQluZGVsYXkoU0hUMTVfVFNDS0wpOworCX0KKwlyZXR1cm4gYnl0ZTsKK30KKworLyoqCisgKiBzaHQxNV9zZW5kX3N0YXR1cygpIC0gd3JpdGUgdGhlIHN0YXR1cyByZWdpc3RlciBieXRlCisgKiBAZGF0YToJc2h0MTUgc3BlY2lmaWMgZGF0YS4KKyAqIEBzdGF0dXM6CXRoZSBieXRlIHRvIHNldCB0aGUgc3RhdHVzIHJlZ2lzdGVyIHdpdGguCisgKgorICogQXMgZGVzY3JpYmVkIGluIGZpZ3VyZSAxNCBhbmQgdGFibGUgNSBvZiB0aGUgZGF0YXNoZWV0LgorICovCitzdGF0aWMgaW50IHNodDE1X3NlbmRfc3RhdHVzKHN0cnVjdCBzaHQxNV9kYXRhICpkYXRhLCB1OCBzdGF0dXMpCit7CisJaW50IHJldDsKKworCXJldCA9IHNodDE1X3NlbmRfY21kKGRhdGEsIFNIVDE1X1dSSVRFX1NUQVRVUyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZGF0YS0+cGRhdGEtPmdwaW9fZGF0YSwgMSk7CisJbmRlbGF5KFNIVDE1X1RTVSk7CisJc2h0MTVfc2VuZF9ieXRlKGRhdGEsIHN0YXR1cyk7CisJcmV0ID0gc2h0MTVfd2FpdF9mb3JfcmVzcG9uc2UoZGF0YSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWRhdGEtPnZhbF9zdGF0dXMgPSBzdGF0dXM7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogc2h0MTVfdXBkYXRlX3N0YXR1cygpIC0gZ2V0IHVwZGF0ZWQgc3RhdHVzIHJlZ2lzdGVyIGZyb20gZGV2aWNlIGlmIHRvbyBvbGQKKyAqIEBkYXRhOglkZXZpY2UgaW5zdGFuY2Ugc3BlY2lmaWMgZGF0YS4KKyAqCisgKiBBcyBkZXNjcmliZWQgaW4gZmlndXJlIDE1IGFuZCB0YWJsZSA1IG9mIHRoZSBkYXRhc2hlZXQuCisgKi8KK3N0YXRpYyBpbnQgc2h0MTVfdXBkYXRlX3N0YXR1cyhzdHJ1Y3Qgc2h0MTVfZGF0YSAqZGF0YSkKK3sKKwlpbnQgcmV0ID0gMDsKKwl1OCBzdGF0dXM7CisJdTggcHJldmlvdXNfY29uZmlnOworCXU4IGRldl9jaGVja3N1bSA9IDA7CisJdTggY2hlY2tzdW1fdmFsc1syXTsKKwlpbnQgdGltZW91dCA9IEhaOworCisJbXV0ZXhfbG9jaygmZGF0YS0+cmVhZF9sb2NrKTsKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3N0YXR1cyArIHRpbWVvdXQpCisJCQl8fCAhZGF0YS0+c3RhdHVzX3ZhbGlkKSB7CisJCXJldCA9IHNodDE1X3NlbmRfY21kKGRhdGEsIFNIVDE1X1JFQURfU1RBVFVTKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3JfcmV0OworCQlzdGF0dXMgPSBzaHQxNV9yZWFkX2J5dGUoZGF0YSk7CisKKwkJaWYgKGRhdGEtPmNoZWNrc3VtbWluZykgeworCQkJc2h0MTVfYWNrKGRhdGEpOworCQkJZGV2X2NoZWNrc3VtID0gc2h0MTVfcmV2ZXJzZShzaHQxNV9yZWFkX2J5dGUoZGF0YSkpOworCQkJY2hlY2tzdW1fdmFsc1swXSA9IFNIVDE1X1JFQURfU1RBVFVTOworCQkJY2hlY2tzdW1fdmFsc1sxXSA9IHN0YXR1czsKKwkJCWRhdGEtPmNoZWNrc3VtX29rID0gKHNodDE1X2NyYzgoZGF0YSwgY2hlY2tzdW1fdmFscywgMikKKwkJCQkJPT0gZGV2X2NoZWNrc3VtKTsKKwkJfQorCisJCXNodDE1X2VuZF90cmFuc21pc3Npb24oZGF0YSk7CisKKwkJLyoKKwkJICogUGVyZm9ybSBjaGVja3N1bSB2YWxpZGF0aW9uIG9uIHRoZSByZWNlaXZlZCBkYXRhLgorCQkgKiBTcGVjaWZpY2F0aW9uIG1lbnRpb25zIHRoYXQgaW4gY2FzZSBhIGNoZWNrc3VtIHZlcmlmaWNhdGlvbgorCQkgKiBmYWlscywgYSBzb2Z0IHJlc2V0IGNvbW1hbmQgbXVzdCBiZSBzZW50IHRvIHRoZSBkZXZpY2UuCisJCSAqLworCQlpZiAoZGF0YS0+Y2hlY2tzdW1taW5nICYmICFkYXRhLT5jaGVja3N1bV9vaykgeworCQkJcHJldmlvdXNfY29uZmlnID0gZGF0YS0+dmFsX3N0YXR1cyAmIDB4MDc7CisJCQlyZXQgPSBzaHQxNV9zb2Z0X3Jlc2V0KGRhdGEpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGVycm9yX3JldDsKKwkJCWlmIChwcmV2aW91c19jb25maWcpIHsKKwkJCQlyZXQgPSBzaHQxNV9zZW5kX3N0YXR1cyhkYXRhLCBwcmV2aW91c19jb25maWcpOworCQkJCWlmIChyZXQpIHsKKwkJCQkJZGV2X2VycihkYXRhLT5kZXYsCisJCQkJCQkiQ1JDIHZhbGlkYXRpb24gZmFpbGVkLCB1bmFibGUgIgorCQkJCQkJInRvIHJlc3RvcmUgZGV2aWNlIHNldHRpbmdzXG4iKTsKKwkJCQkJZ290byBlcnJvcl9yZXQ7CisJCQkJfQorCQkJfQorCQkJcmV0ID0gLUVBR0FJTjsKKwkJCWdvdG8gZXJyb3JfcmV0OworCQl9CisKKwkJZGF0YS0+dmFsX3N0YXR1cyA9IHN0YXR1czsKKwkJZGF0YS0+c3RhdHVzX3ZhbGlkID0gdHJ1ZTsKKwkJZGF0YS0+bGFzdF9zdGF0dXMgPSBqaWZmaWVzOworCX0KK2Vycm9yX3JldDoKKwltdXRleF91bmxvY2soJmRhdGEtPnJlYWRfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHNodDE1X21lYXN1cmVtZW50KCkgLSBnZXQgYSBuZXcgdmFsdWUgZnJvbSBkZXZpY2UKICAqIEBkYXRhOgkJZGV2aWNlIGluc3RhbmNlIHNwZWNpZmljIGRhdGEKICAqIEBjb21tYW5kOgkJY29tbWFuZCBzZW50IHRvIHJlcXVlc3QgdmFsdWUKICAqIEB0aW1lb3V0X21zZWNzOgl0aW1lb3V0IGFmdGVyIHdoaWNoIGNvbW1zIGFyZSBhc3N1bWVkCiAgKgkJCXRvIGhhdmUgZmFpbGVkIGFyZSByZXNldC4KLSAqKi8KLXN0YXRpYyBpbmxpbmUgaW50IHNodDE1X3VwZGF0ZV9zaW5nbGVfdmFsKHN0cnVjdCBzaHQxNV9kYXRhICpkYXRhLAotCQkJCQkgIGludCBjb21tYW5kLAotCQkJCQkgIGludCB0aW1lb3V0X21zZWNzKQorICovCitzdGF0aWMgaW50IHNodDE1X21lYXN1cmVtZW50KHN0cnVjdCBzaHQxNV9kYXRhICpkYXRhLAorCQkJICAgICBpbnQgY29tbWFuZCwKKwkJCSAgICAgaW50IHRpbWVvdXRfbXNlY3MpCiB7CiAJaW50IHJldDsKKwl1OCBwcmV2aW91c19jb25maWc7CisKIAlyZXQgPSBzaHQxNV9zZW5kX2NtZChkYXRhLCBjb21tYW5kKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtMjU2LDM4ICs1MTksNjEgQEAKIAkJCXNjaGVkdWxlX3dvcmsoJmRhdGEtPnJlYWRfd29yayk7CiAJfQogCXJldCA9IHdhaXRfZXZlbnRfdGltZW91dChkYXRhLT53YWl0X3F1ZXVlLAotCQkJCSAoZGF0YS0+ZmxhZyA9PSBTSFQxNV9SRUFESU5HX05PVEhJTkcpLAorCQkJCSAoZGF0YS0+c3RhdGUgPT0gU0hUMTVfUkVBRElOR19OT1RISU5HKSwKIAkJCQkgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0X21zZWNzKSk7CiAJaWYgKHJldCA9PSAwKSB7LyogdGltZW91dCBvY2N1cnJlZCAqLwogCQlkaXNhYmxlX2lycV9ub3N5bmMoZ3Bpb190b19pcnEoZGF0YS0+cGRhdGEtPmdwaW9fZGF0YSkpOwogCQlzaHQxNV9jb25uZWN0aW9uX3Jlc2V0KGRhdGEpOwogCQlyZXR1cm4gLUVUSU1FOwogCX0KKworCS8qCisJICogIFBlcmZvcm0gY2hlY2tzdW0gdmFsaWRhdGlvbiBvbiB0aGUgcmVjZWl2ZWQgZGF0YS4KKwkgKiAgU3BlY2lmaWNhdGlvbiBtZW50aW9ucyB0aGF0IGluIGNhc2UgYSBjaGVja3N1bSB2ZXJpZmljYXRpb24gZmFpbHMsCisJICogIGEgc29mdCByZXNldCBjb21tYW5kIG11c3QgYmUgc2VudCB0byB0aGUgZGV2aWNlLgorCSAqLworCWlmIChkYXRhLT5jaGVja3N1bW1pbmcgJiYgIWRhdGEtPmNoZWNrc3VtX29rKSB7CisJCXByZXZpb3VzX2NvbmZpZyA9IGRhdGEtPnZhbF9zdGF0dXMgJiAweDA3OworCQlyZXQgPSBzaHQxNV9zb2Z0X3Jlc2V0KGRhdGEpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJaWYgKHByZXZpb3VzX2NvbmZpZykgeworCQkJcmV0ID0gc2h0MTVfc2VuZF9zdGF0dXMoZGF0YSwgcHJldmlvdXNfY29uZmlnKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlkZXZfZXJyKGRhdGEtPmRldiwKKwkJCQkJIkNSQyB2YWxpZGF0aW9uIGZhaWxlZCwgdW5hYmxlICIKKwkJCQkJInRvIHJlc3RvcmUgZGV2aWNlIHNldHRpbmdzXG4iKTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQl9CisJCXJldHVybiAtRUFHQUlOOworCX0KKwogCXJldHVybiAwOwogfQogCiAvKioKLSAqIHNodDE1X3VwZGF0ZV92YWxzKCkgLSBnZXQgdXBkYXRlZCByZWFkaW5ncyBmcm9tIGRldmljZSBpZiB0b28gb2xkCisgKiBzaHQxNV91cGRhdGVfbWVhc3VyZW1lbnRzKCkgLSBnZXQgdXBkYXRlZCBtZWFzdXJlcyBmcm9tIGRldmljZSBpZiB0b28gb2xkCiAgKiBAZGF0YToJZGV2aWNlIHN0YXRlCi0gKiovCi1zdGF0aWMgaW50IHNodDE1X3VwZGF0ZV92YWxzKHN0cnVjdCBzaHQxNV9kYXRhICpkYXRhKQorICovCitzdGF0aWMgaW50IHNodDE1X3VwZGF0ZV9tZWFzdXJlbWVudHMoc3RydWN0IHNodDE1X2RhdGEgKmRhdGEpCiB7CiAJaW50IHJldCA9IDA7CiAJaW50IHRpbWVvdXQgPSBIWjsKIAogCW11dGV4X2xvY2soJmRhdGEtPnJlYWRfbG9jayk7Ci0JaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF91cGRhdCArIHRpbWVvdXQpCi0JICAgIHx8ICFkYXRhLT52YWxpZCkgewotCQlkYXRhLT5mbGFnID0gU0hUMTVfUkVBRElOR19IVU1JRDsKLQkJcmV0ID0gc2h0MTVfdXBkYXRlX3NpbmdsZV92YWwoZGF0YSwgU0hUMTVfTUVBU1VSRV9SSCwgMTYwKTsKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X21lYXN1cmVtZW50ICsgdGltZW91dCkKKwkgICAgfHwgIWRhdGEtPm1lYXN1cmVtZW50c192YWxpZCkgeworCQlkYXRhLT5zdGF0ZSA9IFNIVDE1X1JFQURJTkdfSFVNSUQ7CisJCXJldCA9IHNodDE1X21lYXN1cmVtZW50KGRhdGEsIFNIVDE1X01FQVNVUkVfUkgsIDE2MCk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycm9yX3JldDsKLQkJZGF0YS0+ZmxhZyA9IFNIVDE1X1JFQURJTkdfVEVNUDsKLQkJcmV0ID0gc2h0MTVfdXBkYXRlX3NpbmdsZV92YWwoZGF0YSwgU0hUMTVfTUVBU1VSRV9URU1QLCA0MDApOworCQlkYXRhLT5zdGF0ZSA9IFNIVDE1X1JFQURJTkdfVEVNUDsKKwkJcmV0ID0gc2h0MTVfbWVhc3VyZW1lbnQoZGF0YSwgU0hUMTVfTUVBU1VSRV9URU1QLCA0MDApOwogCQlpZiAocmV0KQogCQkJZ290byBlcnJvcl9yZXQ7Ci0JCWRhdGEtPnZhbGlkID0gMTsKLQkJZGF0YS0+bGFzdF91cGRhdCA9IGppZmZpZXM7CisJCWRhdGEtPm1lYXN1cmVtZW50c192YWxpZCA9IHRydWU7CisJCWRhdGEtPmxhc3RfbWVhc3VyZW1lbnQgPSBqaWZmaWVzOwogCX0KIGVycm9yX3JldDoKIAltdXRleF91bmxvY2soJmRhdGEtPnJlYWRfbG9jayk7CkBAIC0zMDAsMTAgKzU4NiwxMSBAQAogICogQGRhdGE6CWRldmljZSBzdGF0ZQogICoKICAqIEFzIHBlciBzZWN0aW9uIDQuMyBvZiB0aGUgZGF0YSBzaGVldC4KLSAqKi8KKyAqLwogc3RhdGljIGlubGluZSBpbnQgc2h0MTVfY2FsY190ZW1wKHN0cnVjdCBzaHQxNV9kYXRhICpkYXRhKQogewogCWludCBkMSA9IHRlbXBwb2ludHNbMF0uZDE7CisJaW50IGQyID0gKGRhdGEtPnZhbF9zdGF0dXMgJiBTSFQxNV9TVEFUVVNfTE9XX1JFU09MVVRJT04pID8gNDAgOiAxMDsKIAlpbnQgaTsKIAogCWZvciAoaSA9IEFSUkFZX1NJWkUodGVtcHBvaW50cykgLSAxOyBpID4gMDsgaS0tKQpAQCAtMzE2LDcgKzYwMyw3IEBACiAJCQlicmVhazsKIAkJfQogCi0JcmV0dXJuIGRhdGEtPnZhbF90ZW1wKjEwICsgZDE7CisJcmV0dXJuIGRhdGEtPnZhbF90ZW1wICogZDIgKyBkMTsKIH0KIAogLyoqCkBAIC0zMjUsMjMgKzYxMiwxMDIgQEAKICAqCiAgKiBUaGlzIGlzIHRoZSB0ZW1wZXJhdHVyZSBjb21wZW5zYXRlZCB2ZXJzaW9uIGFzIHBlciBzZWN0aW9uIDQuMiBvZgogICogdGhlIGRhdGEgc2hlZXQuCi0gKiovCisgKgorICogVGhlIHNlbnNvciBpcyBhc3N1bWVkIHRvIGJlIFYzLCB3aGljaCBpcyBjb21wYXRpYmxlIHdpdGggVjQuCisgKiBIdW1pZGl0eSBjb252ZXJzaW9uIGNvZWZmaWNpZW50cyBhcmUgc2hvd24gaW4gdGFibGUgNyBvZiB0aGUgZGF0YXNoZWV0LgorICovCiBzdGF0aWMgaW5saW5lIGludCBzaHQxNV9jYWxjX2h1bWlkKHN0cnVjdCBzaHQxNV9kYXRhICpkYXRhKQogewotCWludCBSSGxpbmVhcjsgLyogbWlsbGkgcGVyY2VudCAqLworCWludCByaF9saW5lYXI7IC8qIG1pbGxpIHBlcmNlbnQgKi8KIAlpbnQgdGVtcCA9IHNodDE1X2NhbGNfdGVtcChkYXRhKTsKLQorCWludCBjMiwgYzM7CisJaW50IHQyOwogCWNvbnN0IGludCBjMSA9IC00OwotCWNvbnN0IGludCBjMiA9IDQwNTAwOyAvKiB4IDEwIF4gLTYgKi8KLQljb25zdCBpbnQgYzMgPSAtMjg7IC8qIHggMTAgXiAtNyAqLwogCi0JUkhsaW5lYXIgPSBjMSoxMDAwCi0JCSsgYzIgKiBkYXRhLT52YWxfaHVtaWQvMTAwMAorCWlmIChkYXRhLT52YWxfc3RhdHVzICYgU0hUMTVfU1RBVFVTX0xPV19SRVNPTFVUSU9OKSB7CisJCWMyID0gNjQ4MDAwOyAvKiB4IDEwIF4gLTYgKi8KKwkJYzMgPSAtNzIwMDsgIC8qIHggMTAgXiAtNyAqLworCQl0MiA9IDEyODA7CisJfSBlbHNlIHsKKwkJYzIgPSA0MDUwMDsgIC8qIHggMTAgXiAtNiAqLworCQljMyA9IC0yODsgICAgLyogeCAxMCBeIC03ICovCisJCXQyID0gODA7CisJfQorCisJcmhfbGluZWFyID0gYzEgKiAxMDAwCisJCSsgYzIgKiBkYXRhLT52YWxfaHVtaWQgLyAxMDAwCiAJCSsgKGRhdGEtPnZhbF9odW1pZCAqIGRhdGEtPnZhbF9odW1pZCAqIGMzKSAvIDEwMDAwOwotCXJldHVybiAodGVtcCAtIDI1MDAwKSAqICgxMDAwMCArIDgwICogZGF0YS0+dmFsX2h1bWlkKQotCQkvIDEwMDAwMDAgKyBSSGxpbmVhcjsKKwlyZXR1cm4gKHRlbXAgLSAyNTAwMCkgKiAoMTAwMDAgKyB0MiAqIGRhdGEtPnZhbF9odW1pZCkKKwkJLyAxMDAwMDAwICsgcmhfbGluZWFyOwogfQogCisvKioKKyAqIHNodDE1X3Nob3dfc3RhdHVzKCkgLSBzaG93IHN0YXR1cyBpbmZvcm1hdGlvbiBpbiBzeXNmcworICogQGRldjoJZGV2aWNlLgorICogQGF0dHI6CWRldmljZSBhdHRyaWJ1dGUuCisgKiBAYnVmOglzeXNmcyBidWZmZXIgd2hlcmUgaW5mb3JtYXRpb24gaXMgd3JpdHRlbiB0by4KKyAqCisgKiBXaWxsIGJlIGNhbGxlZCBvbiByZWFkIGFjY2VzcyB0byB0ZW1wMV9mYXVsdCwgaHVtaWRpdHkxX2ZhdWx0CisgKiBhbmQgaGVhdGVyX2VuYWJsZSBzeXNmcyBhdHRyaWJ1dGVzLgorICogUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBpbnRvIGJ1ZmZlciwgbmVnYXRpdmUgZXJybm8gb24gZXJyb3IuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNodDE1X3Nob3dfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJIGNoYXIgKmJ1ZikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzaHQxNV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdTggYml0ID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpLT5pbmRleDsKKworCXJldCA9IHNodDE1X3VwZGF0ZV9zdGF0dXMoZGF0YSk7CisKKwlyZXR1cm4gcmV0ID8gcmV0IDogc3ByaW50ZihidWYsICIlZFxuIiwgISEoZGF0YS0+dmFsX3N0YXR1cyAmIGJpdCkpOworfQorCisvKioKKyAqIHNodDE1X3N0b3JlX2hlYXRlcigpIC0gY2hhbmdlIGhlYXRlciBzdGF0ZSB2aWEgc3lzZnMKKyAqIEBkZXY6CWRldmljZS4KKyAqIEBhdHRyOglkZXZpY2UgYXR0cmlidXRlLgorICogQGJ1ZjoJc3lzZnMgYnVmZmVyIHRvIHJlYWQgdGhlIG5ldyBoZWF0ZXIgc3RhdGUgZnJvbS4KKyAqIEBjb3VudDoJbGVuZ3RoIG9mIHRoZSBkYXRhLgorICoKKyAqIFdpbGwgYmUgY2FsbGVkIG9uIHJlYWQgYWNjZXNzIHRvIGhlYXRlcl9lbmFibGUgc3lzZnMgYXR0cmlidXRlLgorICogUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgZGVjb2RlZCwgbmVnYXRpdmUgZXJybm8gb24gZXJyb3IuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNodDE1X3N0b3JlX2hlYXRlcihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWludCByZXQ7CisJc3RydWN0IHNodDE1X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlsb25nIHZhbHVlOworCXU4IHN0YXR1czsKKworCWlmIChzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ2YWx1ZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmZGF0YS0+cmVhZF9sb2NrKTsKKwlzdGF0dXMgPSBkYXRhLT52YWxfc3RhdHVzICYgMHgwNzsKKwlpZiAoISF2YWx1ZSkKKwkJc3RhdHVzIHw9IFNIVDE1X1NUQVRVU19IRUFURVI7CisJZWxzZQorCQlzdGF0dXMgJj0gflNIVDE1X1NUQVRVU19IRUFURVI7CisKKwlyZXQgPSBzaHQxNV9zZW5kX3N0YXR1cyhkYXRhLCBzdGF0dXMpOworCW11dGV4X3VubG9jaygmZGF0YS0+cmVhZF9sb2NrKTsKKworCXJldHVybiByZXQgPyByZXQgOiBjb3VudDsKK30KKworLyoqCisgKiBzaHQxNV9zaG93X3RlbXAoKSAtIHNob3cgdGVtcGVyYXR1cmUgbWVhc3VyZW1lbnQgdmFsdWUgaW4gc3lzZnMKKyAqIEBkZXY6CWRldmljZS4KKyAqIEBhdHRyOglkZXZpY2UgYXR0cmlidXRlLgorICogQGJ1ZjoJc3lzZnMgYnVmZmVyIHdoZXJlIG1lYXN1cmVtZW50IHZhbHVlcyBhcmUgd3JpdHRlbiB0by4KKyAqCisgKiBXaWxsIGJlIGNhbGxlZCBvbiByZWFkIGFjY2VzcyB0byB0ZW1wMV9pbnB1dCBzeXNmcyBhdHRyaWJ1dGUuCisgKiBSZXR1cm5zIG51bWJlciBvZiBieXRlcyB3cml0dGVuIGludG8gYnVmZmVyLCBuZWdhdGl2ZSBlcnJubyBvbiBlcnJvci4KKyAqLwogc3RhdGljIHNzaXplX3Qgc2h0MTVfc2hvd190ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgICAgICBjaGFyICpidWYpCkBAIC0zNTAsMTIgKzcxNiwyMSBAQAogCXN0cnVjdCBzaHQxNV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAkvKiBUZWNobmljYWxseSBubyBuZWVkIHRvIHJlYWQgaHVtaWRpdHkgYXMgd2VsbCAqLwotCXJldCA9IHNodDE1X3VwZGF0ZV92YWxzKGRhdGEpOworCXJldCA9IHNodDE1X3VwZGF0ZV9tZWFzdXJlbWVudHMoZGF0YSk7CiAKIAlyZXR1cm4gcmV0ID8gcmV0IDogc3ByaW50ZihidWYsICIlZFxuIiwKIAkJCQkgICBzaHQxNV9jYWxjX3RlbXAoZGF0YSkpOwogfQogCisvKioKKyAqIHNodDE1X3Nob3dfaHVtaWRpdHkoKSAtIHNob3cgaHVtaWRpdHkgbWVhc3VyZW1lbnQgdmFsdWUgaW4gc3lzZnMKKyAqIEBkZXY6CWRldmljZS4KKyAqIEBhdHRyOglkZXZpY2UgYXR0cmlidXRlLgorICogQGJ1ZjoJc3lzZnMgYnVmZmVyIHdoZXJlIG1lYXN1cmVtZW50IHZhbHVlcyBhcmUgd3JpdHRlbiB0by4KKyAqCisgKiBXaWxsIGJlIGNhbGxlZCBvbiByZWFkIGFjY2VzcyB0byBodW1pZGl0eTFfaW5wdXQgc3lzZnMgYXR0cmlidXRlLgorICogUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBpbnRvIGJ1ZmZlciwgbmVnYXRpdmUgZXJybm8gb24gZXJyb3IuCisgKi8KIHN0YXRpYyBzc2l6ZV90IHNodDE1X3Nob3dfaHVtaWRpdHkoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCSAgIGNoYXIgKmJ1ZikKQEAgLTM2MywxMSArNzM4LDExIEBACiAJaW50IHJldDsKIAlzdHJ1Y3Qgc2h0MTVfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JcmV0ID0gc2h0MTVfdXBkYXRlX3ZhbHMoZGF0YSk7CisJcmV0ID0gc2h0MTVfdXBkYXRlX21lYXN1cmVtZW50cyhkYXRhKTsKIAogCXJldHVybiByZXQgPyByZXQgOiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBzaHQxNV9jYWxjX2h1bWlkKGRhdGEpKTsKK30KIAotfTsKIHN0YXRpYyBzc2l6ZV90IHNob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgY2hhciAqYnVmKQpAQCAtMzc2LDE2ICs3NTEsMjMgQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgcGRldi0+bmFtZSk7CiB9CiAKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfaW5wdXQsCi0JCQkgIFNfSVJVR08sIHNodDE1X3Nob3dfdGVtcCwKLQkJCSAgTlVMTCwgMCk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGh1bWlkaXR5MV9pbnB1dCwKLQkJCSAgU19JUlVHTywgc2h0MTVfc2hvd19odW1pZGl0eSwKLQkJCSAgTlVMTCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2lucHV0LCBTX0lSVUdPLAorCQkJICBzaHQxNV9zaG93X3RlbXAsIE5VTEwsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihodW1pZGl0eTFfaW5wdXQsIFNfSVJVR08sCisJCQkgIHNodDE1X3Nob3dfaHVtaWRpdHksIE5VTEwsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9mYXVsdCwgU19JUlVHTywgc2h0MTVfc2hvd19zdGF0dXMsIE5VTEwsCisJCQkgIFNIVDE1X1NUQVRVU19MT1dfQkFUVEVSWSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGh1bWlkaXR5MV9mYXVsdCwgU19JUlVHTywgc2h0MTVfc2hvd19zdGF0dXMsIE5VTEwsCisJCQkgIFNIVDE1X1NUQVRVU19MT1dfQkFUVEVSWSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGhlYXRlcl9lbmFibGUsIFNfSVJVR08gfCBTX0lXVVNSLCBzaHQxNV9zaG93X3N0YXR1cywKKwkJCSAgc2h0MTVfc3RvcmVfaGVhdGVyLCBTSFQxNV9TVEFUVVNfSEVBVEVSKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBzaG93X25hbWUsIE5VTEwpOwogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnNodDE1X2F0dHJzW10gPSB7CiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfaHVtaWRpdHkxX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9mYXVsdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaHVtaWRpdHkxX2ZhdWx0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9oZWF0ZXJfZW5hYmxlLmRldl9hdHRyLmF0dHIsCiAJJmRldl9hdHRyX25hbWUuYXR0ciwKIAlOVUxMLAogfTsKQEAgLTM5Nyw1OSArNzc5LDMxIEBACiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2h0MTVfaW50ZXJydXB0X2ZpcmVkKGludCBpcnEsIHZvaWQgKmQpCiB7CiAJc3RydWN0IHNodDE1X2RhdGEgKmRhdGEgPSBkOworCiAJLyogRmlyc3QgZGlzYWJsZSB0aGUgaW50ZXJydXB0ICovCiAJZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7CiAJYXRvbWljX2luYygmZGF0YS0+aW50ZXJydXB0X2hhbmRsZWQpOwogCS8qIFRoZW4gc2NoZWR1bGUgYSByZWFkaW5nIHdvcmsgc3RydWN0ICovCi0JaWYgKGRhdGEtPmZsYWcgIT0gU0hUMTVfUkVBRElOR19OT1RISU5HKQorCWlmIChkYXRhLT5zdGF0ZSAhPSBTSFQxNV9SRUFESU5HX05PVEhJTkcpCiAJCXNjaGVkdWxlX3dvcmsoJmRhdGEtPnJlYWRfd29yayk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi0vKiBFYWNoIGJ5dGUgb2YgZGF0YSBpcyBhY2tub3dsZWRnZWQgYnkgcHVsbGluZyB0aGUgZGF0YSBsaW5lCi0gKiBsb3cgZm9yIG9uZSBjbG9jayBwdWxzZS4KLSAqLwotc3RhdGljIHZvaWQgc2h0MTVfYWNrKHN0cnVjdCBzaHQxNV9kYXRhICpkYXRhKQotewotCWdwaW9fZGlyZWN0aW9uX291dHB1dChkYXRhLT5wZGF0YS0+Z3Bpb19kYXRhLCAwKTsKLQluZGVsYXkoU0hUMTVfVFNVKTsKLQlncGlvX3NldF92YWx1ZShkYXRhLT5wZGF0YS0+Z3Bpb19zY2ssIDEpOwotCW5kZWxheShTSFQxNV9UU1UpOwotCWdwaW9fc2V0X3ZhbHVlKGRhdGEtPnBkYXRhLT5ncGlvX3NjaywgMCk7Ci0JbmRlbGF5KFNIVDE1X1RTVSk7Ci0JZ3Bpb19zZXRfdmFsdWUoZGF0YS0+cGRhdGEtPmdwaW9fZGF0YSwgMSk7Ci0KLQlncGlvX2RpcmVjdGlvbl9pbnB1dChkYXRhLT5wZGF0YS0+Z3Bpb19kYXRhKTsKLX0KLS8qKgotICogc2h0MTVfZW5kX3RyYW5zbWlzc2lvbigpIC0gbm90aWZ5IGRldmljZSBvZiBlbmQgb2YgdHJhbnNtaXNzaW9uCi0gKiBAZGF0YToJZGV2aWNlIHN0YXRlCi0gKgotICogVGhpcyBpcyBiYXNpY2FsbHkgYSBOQUsuIChzaW5nbGUgY2xvY2sgcHVsc2UsIGRhdGEgaGlnaCkKLSAqKi8KLXN0YXRpYyB2b2lkIHNodDE1X2VuZF90cmFuc21pc3Npb24oc3RydWN0IHNodDE1X2RhdGEgKmRhdGEpCi17Ci0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGRhdGEtPnBkYXRhLT5ncGlvX2RhdGEsIDEpOwotCW5kZWxheShTSFQxNV9UU1UpOwotCWdwaW9fc2V0X3ZhbHVlKGRhdGEtPnBkYXRhLT5ncGlvX3NjaywgMSk7Ci0JbmRlbGF5KFNIVDE1X1RTQ0tIKTsKLQlncGlvX3NldF92YWx1ZShkYXRhLT5wZGF0YS0+Z3Bpb19zY2ssIDApOwotCW5kZWxheShTSFQxNV9UU0NLTCk7Ci19Ci0KIHN0YXRpYyB2b2lkIHNodDE1X2JoX3JlYWRfZGF0YShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmtfcykKIHsKLQlpbnQgaTsKIAl1aW50MTZfdCB2YWwgPSAwOworCXU4IGRldl9jaGVja3N1bSA9IDA7CisJdTggY2hlY2tzdW1fdmFsc1szXTsKIAlzdHJ1Y3Qgc2h0MTVfZGF0YSAqZGF0YQogCQk9IGNvbnRhaW5lcl9vZih3b3JrX3MsIHN0cnVjdCBzaHQxNV9kYXRhLAogCQkJICAgICAgIHJlYWRfd29yayk7CisKIAkvKiBGaXJzdGx5LCB2ZXJpZnkgdGhlIGxpbmUgaXMgbG93ICovCiAJaWYgKGdwaW9fZ2V0X3ZhbHVlKGRhdGEtPnBkYXRhLT5ncGlvX2RhdGEpKSB7Ci0JCS8qIElmIG5vdCwgdGhlbiBzdGFydCB0aGUgaW50ZXJydXB0IGFnYWluIC0gY2FyZQotCQkgICBoZXJlIGFzIGNvdWxkIGhhdmUgZ29uZSBsb3cgaW4gbWVhbnRpbWUgc28gdmVyaWZ5Ci0JCSAgIGl0IGhhc24ndCEKLQkJKi8KKwkJLyoKKwkJICogSWYgbm90LCB0aGVuIHN0YXJ0IHRoZSBpbnRlcnJ1cHQgYWdhaW4gLSBjYXJlIGhlcmUgYXMgY291bGQKKwkJICogaGF2ZSBnb25lIGxvdyBpbiBtZWFudGltZSBzbyB2ZXJpZnkgaXQgaGFzbid0IQorCQkgKi8KIAkJYXRvbWljX3NldCgmZGF0YS0+aW50ZXJydXB0X2hhbmRsZWQsIDApOwogCQllbmFibGVfaXJxKGdwaW9fdG9faXJxKGRhdGEtPnBkYXRhLT5ncGlvX2RhdGEpKTsKIAkJLyogSWYgc3RpbGwgbm90IG9jY3VycmVkIG9yIGFub3RoZXIgaGFuZGxlciBoYXMgYmVlbiBzY2hlZHVsZWQgKi8KQEAgLTQ1NywzMCArODExLDQzIEBACiAJCSAgICB8fCBhdG9taWNfcmVhZCgmZGF0YS0+aW50ZXJydXB0X2hhbmRsZWQpKQogCQkJcmV0dXJuOwogCX0KKwogCS8qIFJlYWQgdGhlIGRhdGEgYmFjayBmcm9tIHRoZSBkZXZpY2UgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMTY7ICsraSkgewotCQl2YWwgPDw9IDE7Ci0JCWdwaW9fc2V0X3ZhbHVlKGRhdGEtPnBkYXRhLT5ncGlvX3NjaywgMSk7Ci0JCW5kZWxheShTSFQxNV9UU0NLSCk7Ci0JCXZhbCB8PSAhIWdwaW9fZ2V0X3ZhbHVlKGRhdGEtPnBkYXRhLT5ncGlvX2RhdGEpOwotCQlncGlvX3NldF92YWx1ZShkYXRhLT5wZGF0YS0+Z3Bpb19zY2ssIDApOwotCQluZGVsYXkoU0hUMTVfVFNDS0wpOwotCQlpZiAoaSA9PSA3KQotCQkJc2h0MTVfYWNrKGRhdGEpOworCXZhbCA9IHNodDE1X3JlYWRfYnl0ZShkYXRhKTsKKwl2YWwgPDw9IDg7CisJc2h0MTVfYWNrKGRhdGEpOworCXZhbCB8PSBzaHQxNV9yZWFkX2J5dGUoZGF0YSk7CisKKwlpZiAoZGF0YS0+Y2hlY2tzdW1taW5nKSB7CisJCS8qCisJCSAqIEFzayB0aGUgZGV2aWNlIGZvciBhIGNoZWNrc3VtIGFuZCByZWFkIGl0IGJhY2suCisJCSAqIE5vdGU6IHRoZSBkZXZpY2Ugc2VuZHMgdGhlIGNoZWNrc3VtIGJ5dGUgcmV2ZXJzZWQuCisJCSAqLworCQlzaHQxNV9hY2soZGF0YSk7CisJCWRldl9jaGVja3N1bSA9IHNodDE1X3JldmVyc2Uoc2h0MTVfcmVhZF9ieXRlKGRhdGEpKTsKKwkJY2hlY2tzdW1fdmFsc1swXSA9IChkYXRhLT5zdGF0ZSA9PSBTSFQxNV9SRUFESU5HX1RFTVApID8KKwkJCVNIVDE1X01FQVNVUkVfVEVNUCA6IFNIVDE1X01FQVNVUkVfUkg7CisJCWNoZWNrc3VtX3ZhbHNbMV0gPSAodTgpICh2YWwgPj4gOCk7CisJCWNoZWNrc3VtX3ZhbHNbMl0gPSAodTgpIHZhbDsKKwkJZGF0YS0+Y2hlY2tzdW1fb2sKKwkJCT0gKHNodDE1X2NyYzgoZGF0YSwgY2hlY2tzdW1fdmFscywgMykgPT0gZGV2X2NoZWNrc3VtKTsKIAl9CisKIAkvKiBUZWxsIHRoZSBkZXZpY2Ugd2UgYXJlIGRvbmUgKi8KIAlzaHQxNV9lbmRfdHJhbnNtaXNzaW9uKGRhdGEpOwogCi0Jc3dpdGNoIChkYXRhLT5mbGFnKSB7CisJc3dpdGNoIChkYXRhLT5zdGF0ZSkgewogCWNhc2UgU0hUMTVfUkVBRElOR19URU1QOgogCQlkYXRhLT52YWxfdGVtcCA9IHZhbDsKIAkJYnJlYWs7CiAJY2FzZSBTSFQxNV9SRUFESU5HX0hVTUlEOgogCQlkYXRhLT52YWxfaHVtaWQgPSB2YWw7CiAJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAotCWRhdGEtPmZsYWcgPSBTSFQxNV9SRUFESU5HX05PVEhJTkc7CisJZGF0YS0+c3RhdGUgPSBTSFQxNV9SRUFESU5HX05PVEhJTkc7CiAJd2FrZV91cCgmZGF0YS0+d2FpdF9xdWV1ZSk7CiB9CiAKQEAgLTUwMCwxMCArODY3LDEwIEBACiAgKgogICogTm90ZSB0aGF0IGFzIHRoZSBub3RpZmljYXRpb24gY29kZSBob2xkcyB0aGUgcmVndWxhdG9yIGxvY2ssIHdlIGhhdmUKICAqIHRvIHNjaGVkdWxlIGFuIHVwZGF0ZSBvZiB0aGUgc3VwcGx5IHZvbHRhZ2UgcmF0aGVyIHRoYW4gZ2V0dGluZyBpdCBkaXJlY3RseS4KLSAqKi8KKyAqLwogc3RhdGljIGludCBzaHQxNV9pbnZhbGlkYXRlX3ZvbHRhZ2Uoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKLQkJCQl1bnNpZ25lZCBsb25nIGV2ZW50LAotCQkJCXZvaWQgKmlnbm9yZWQpCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsCisJCQkJICAgIHZvaWQgKmlnbm9yZWQpCiB7CiAJc3RydWN0IHNodDE1X2RhdGEgKmRhdGEgPSBjb250YWluZXJfb2YobmIsIHN0cnVjdCBzaHQxNV9kYXRhLCBuYik7CiAKQEAgLTUxOCwxMCArODg1LDExIEBACiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IHNodDE1X2RhdGEgKmRhdGEgPSBremFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOworCXU4IHN0YXR1cyA9IDA7CiAKIAlpZiAoIWRhdGEpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAia3phbGxvYyBmYWlsZWQiKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAia3phbGxvYyBmYWlsZWRcbiIpOwogCQlnb3RvIGVycm9yX3JldDsKIAl9CiAKQEAgLTUzMywxMyArOTAxLDIyIEBACiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZGF0YS0+d2FpdF9xdWV1ZSk7CiAKIAlpZiAocGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhIHN1cHBsaWVkIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIHBsYXRmb3JtIGRhdGEgc3VwcGxpZWRcbiIpOwogCQlnb3RvIGVycl9mcmVlX2RhdGE7CiAJfQogCWRhdGEtPnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JZGF0YS0+c3VwcGx5X3VWID0gZGF0YS0+cGRhdGEtPnN1cHBseV9tdioxMDAwOworCWRhdGEtPnN1cHBseV91ViA9IGRhdGEtPnBkYXRhLT5zdXBwbHlfbXYgKiAxMDAwOworCWlmIChkYXRhLT5wZGF0YS0+Y2hlY2tzdW0pCisJCWRhdGEtPmNoZWNrc3VtbWluZyA9IHRydWU7CisJaWYgKGRhdGEtPnBkYXRhLT5ub19vdHBfcmVsb2FkKQorCQlzdGF0dXMgfD0gU0hUMTVfU1RBVFVTX05PX09UUF9SRUxPQUQ7CisJaWYgKGRhdGEtPnBkYXRhLT5sb3dfcmVzb2x1dGlvbikKKwkJc3RhdHVzIHw9IFNIVDE1X1NUQVRVU19MT1dfUkVTT0xVVElPTjsKIAotLyogSWYgYSByZWd1bGF0b3IgaXMgYXZhaWxhYmxlLCBxdWVyeSB3aGF0IHRoZSBzdXBwbHkgdm9sdGFnZSBhY3R1YWxseSBpcyEqLworCS8qCisJICogSWYgYSByZWd1bGF0b3IgaXMgYXZhaWxhYmxlLAorCSAqIHF1ZXJ5IHdoYXQgdGhlIHN1cHBseSB2b2x0YWdlIGFjdHVhbGx5IGlzIQorCSAqLwogCWRhdGEtPnJlZyA9IHJlZ3VsYXRvcl9nZXQoZGF0YS0+ZGV2LCAidmNjIik7CiAJaWYgKCFJU19FUlIoZGF0YS0+cmVnKSkgewogCQlpbnQgdm9sdGFnZTsKQEAgLTU0OSwyOCArOTI2LDM0IEBACiAJCQlkYXRhLT5zdXBwbHlfdVYgPSB2b2x0YWdlOwogCiAJCXJlZ3VsYXRvcl9lbmFibGUoZGF0YS0+cmVnKTsKLQkJLyogc2V0dXAgYSBub3RpZmllciBibG9jayB0byB1cGRhdGUgdGhpcyBpZiBhbm90aGVyIGRldmljZQotCQkgKiAgY2F1c2VzIHRoZSB2b2x0YWdlIHRvIGNoYW5nZSAqLworCQkvKgorCQkgKiBTZXR1cCBhIG5vdGlmaWVyIGJsb2NrIHRvIHVwZGF0ZSB0aGlzIGlmIGFub3RoZXIgZGV2aWNlCisJCSAqIGNhdXNlcyB0aGUgdm9sdGFnZSB0byBjaGFuZ2UKKwkJICovCiAJCWRhdGEtPm5iLm5vdGlmaWVyX2NhbGwgPSAmc2h0MTVfaW52YWxpZGF0ZV92b2x0YWdlOwogCQlyZXQgPSByZWd1bGF0b3JfcmVnaXN0ZXJfbm90aWZpZXIoZGF0YS0+cmVnLCAmZGF0YS0+bmIpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJInJlZ3VsYXRvciBub3RpZmllciByZXF1ZXN0IGZhaWxlZFxuIik7CisJCQlyZWd1bGF0b3JfZGlzYWJsZShkYXRhLT5yZWcpOworCQkJcmVndWxhdG9yX3B1dChkYXRhLT5yZWcpOworCQkJZ290byBlcnJfZnJlZV9kYXRhOworCQl9CiAJfQotLyogVHJ5IHJlcXVlc3RpbmcgdGhlIEdQSU9zICovCisKKwkvKiBUcnkgcmVxdWVzdGluZyB0aGUgR1BJT3MgKi8KIAlyZXQgPSBncGlvX3JlcXVlc3QoZGF0YS0+cGRhdGEtPmdwaW9fc2NrLCAiU0hUMTUgc2NrIik7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJncGlvIHJlcXVlc3QgZmFpbGVkIik7Ci0JCWdvdG8gZXJyX2ZyZWVfZGF0YTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZ3BpbyByZXF1ZXN0IGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX3JlbGVhc2VfcmVnOwogCX0KIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZGF0YS0+cGRhdGEtPmdwaW9fc2NrLCAwKTsKKwogCXJldCA9IGdwaW9fcmVxdWVzdChkYXRhLT5wZGF0YS0+Z3Bpb19kYXRhLCAiU0hUMTUgZGF0YSIpOwogCWlmIChyZXQpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZ3BpbyByZXF1ZXN0IGZhaWxlZCIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJncGlvIHJlcXVlc3QgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJfcmVsZWFzZV9ncGlvX3NjazsKIAl9Ci0JcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnNodDE1X2F0dHJfZ3JvdXApOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAic3lzZnMgY3JlYXRlIGZhaWxlZCIpOwotCQlnb3RvIGVycl9yZWxlYXNlX2dwaW9fZGF0YTsKLQl9CiAKIAlyZXQgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShkYXRhLT5wZGF0YS0+Z3Bpb19kYXRhKSwKIAkJCSAgc2h0MTVfaW50ZXJydXB0X2ZpcmVkLApAQCAtNTc4LDMwICs5NjEsNTMgQEAKIAkJCSAgInNodDE1IGRhdGEiLAogCQkJICBkYXRhKTsKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgaXJxIGZvciBkYXRhIGxpbmUiKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBpcnEgZm9yIGRhdGEgbGluZVxuIik7CiAJCWdvdG8gZXJyX3JlbGVhc2VfZ3Bpb19kYXRhOwogCX0KIAlkaXNhYmxlX2lycV9ub3N5bmMoZ3Bpb190b19pcnEoZGF0YS0+cGRhdGEtPmdwaW9fZGF0YSkpOwogCXNodDE1X2Nvbm5lY3Rpb25fcmVzZXQoZGF0YSk7Ci0Jc2h0MTVfc2VuZF9jbWQoZGF0YSwgMHgxRSk7CisJcmV0ID0gc2h0MTVfc29mdF9yZXNldChkYXRhKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9yZWxlYXNlX2lycTsKKworCS8qIHdyaXRlIHN0YXR1cyB3aXRoIHBsYXRmb3JtIGRhdGEgb3B0aW9ucyAqLworCWlmIChzdGF0dXMpIHsKKwkJcmV0ID0gc2h0MTVfc2VuZF9zdGF0dXMoZGF0YSwgc3RhdHVzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX3JlbGVhc2VfaXJxOworCX0KKworCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZzaHQxNV9hdHRyX2dyb3VwKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInN5c2ZzIGNyZWF0ZSBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9yZWxlYXNlX2lycTsKKwl9CiAKIAlkYXRhLT5od21vbl9kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoZGF0YS0+ZGV2KTsKIAlpZiAoSVNfRVJSKGRhdGEtPmh3bW9uX2RldikpIHsKIAkJcmV0ID0gUFRSX0VSUihkYXRhLT5od21vbl9kZXYpOwotCQlnb3RvIGVycl9yZWxlYXNlX2lycTsKKwkJZ290byBlcnJfcmVsZWFzZV9zeXNmc19ncm91cDsKIAl9CisKIAlyZXR1cm4gMDsKIAorZXJyX3JlbGVhc2Vfc3lzZnNfZ3JvdXA6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnNodDE1X2F0dHJfZ3JvdXApOwogZXJyX3JlbGVhc2VfaXJxOgogCWZyZWVfaXJxKGdwaW9fdG9faXJxKGRhdGEtPnBkYXRhLT5ncGlvX2RhdGEpLCBkYXRhKTsKIGVycl9yZWxlYXNlX2dwaW9fZGF0YToKIAlncGlvX2ZyZWUoZGF0YS0+cGRhdGEtPmdwaW9fZGF0YSk7CiBlcnJfcmVsZWFzZV9ncGlvX3NjazoKIAlncGlvX2ZyZWUoZGF0YS0+cGRhdGEtPmdwaW9fc2NrKTsKK2Vycl9yZWxlYXNlX3JlZzoKKwlpZiAoIUlTX0VSUihkYXRhLT5yZWcpKSB7CisJCXJlZ3VsYXRvcl91bnJlZ2lzdGVyX25vdGlmaWVyKGRhdGEtPnJlZywgJmRhdGEtPm5iKTsKKwkJcmVndWxhdG9yX2Rpc2FibGUoZGF0YS0+cmVnKTsKKwkJcmVndWxhdG9yX3B1dChkYXRhLT5yZWcpOworCX0KIGVycl9mcmVlX2RhdGE6CiAJa2ZyZWUoZGF0YSk7CiBlcnJvcl9yZXQ6Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC02MDksOSArMTAxNSwxNSBAQAogewogCXN0cnVjdCBzaHQxNV9kYXRhICpkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKLQkvKiBNYWtlIHN1cmUgYW55IHJlYWRzIGZyb20gdGhlIGRldmljZSBhcmUgZG9uZSBhbmQKLQkgKiBwcmV2ZW50IG5ldyBvbmVzIGZyb20gYmVnaW5uaW5nICovCisJLyoKKwkgKiBNYWtlIHN1cmUgYW55IHJlYWRzIGZyb20gdGhlIGRldmljZSBhcmUgZG9uZSBhbmQKKwkgKiBwcmV2ZW50IG5ldyBvbmVzIGJlZ2lubmluZworCSAqLwogCW11dGV4X2xvY2soJmRhdGEtPnJlYWRfbG9jayk7CisJaWYgKHNodDE1X3NvZnRfcmVzZXQoZGF0YSkpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkYXRhLT5yZWFkX2xvY2spOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CiAJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+aHdtb25fZGV2KTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmc2h0MTVfYXR0cl9ncm91cCk7CiAJaWYgKCFJU19FUlIoZGF0YS0+cmVnKSkgewpAQCAtNjI1LDEwICsxMDM3LDEwIEBACiAJZ3Bpb19mcmVlKGRhdGEtPnBkYXRhLT5ncGlvX3Njayk7CiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT5yZWFkX2xvY2spOwogCWtmcmVlKGRhdGEpOworCiAJcmV0dXJuIDA7CiB9CiAKLQogLyoKICAqIHNodF9kcml2ZXJzIHNpbXVsdGFuZW91c2x5IHJlZmVycyB0byBfX2RldmluaXQgYW5kIF9fZGV2ZXhpdCBmdW5jdGlvbgogICogd2hpY2ggY2F1c2VzIHNwdXJpb3VzIHNlY3Rpb24gbWlzbWF0Y2ggd2FybmluZy4gU28gdXNlIF9fcmVmZGF0YSB0bwpAQCAtNjczLDcgKzEwODUsNiBAQAogCX0sCiB9OwogCi0KIHN0YXRpYyBpbnQgX19pbml0IHNodDE1X2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi91Y2Q5MDAwLmMgYi9kcml2ZXJzL2h3bW9uL3VjZDkwMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2UxYzczCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9od21vbi91Y2Q5MDAwLmMKQEAgLTAsMCArMSwyNzggQEAKKy8qCisgKiBIYXJkd2FyZSBtb25pdG9yaW5nIGRyaXZlciBmb3IgVUNEOTB4eHggU2VxdWVuY2VyIGFuZCBTeXN0ZW0gSGVhbHRoCisgKiBDb250cm9sbGVyIHNlcmllcworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy9wbWJ1cy5oPgorI2luY2x1ZGUgInBtYnVzLmgiCisKK2VudW0gY2hpcHMgeyB1Y2Q5MDAwLCB1Y2Q5MDEyMCwgdWNkOTAxMjQsIHVjZDkwOTAsIHVjZDkwOTEwIH07CisKKyNkZWZpbmUgVUNEOTAwMF9NT05JVE9SX0NPTkZJRwkJMHhkNQorI2RlZmluZSBVQ0Q5MDAwX05VTV9QQUdFUwkJMHhkNgorI2RlZmluZSBVQ0Q5MDAwX0ZBTl9DT05GSUdfSU5ERVgJMHhlNworI2RlZmluZSBVQ0Q5MDAwX0ZBTl9DT05GSUcJCTB4ZTgKKyNkZWZpbmUgVUNEOTAwMF9ERVZJQ0VfSUQJCTB4ZmQKKworI2RlZmluZSBVQ0Q5MDAwX01PTl9UWVBFKHgpCSgoKHgpID4+IDUpICYgMHgwNykKKyNkZWZpbmUgVUNEOTAwMF9NT05fUEFHRSh4KQkoKHgpICYgMHgwZikKKworI2RlZmluZSBVQ0Q5MDAwX01PTl9WT0xUQUdFCTEKKyNkZWZpbmUgVUNEOTAwMF9NT05fVEVNUEVSQVRVUkUJMgorI2RlZmluZSBVQ0Q5MDAwX01PTl9DVVJSRU5UCTMKKyNkZWZpbmUgVUNEOTAwMF9NT05fVk9MVEFHRV9IVwk0CisKKyNkZWZpbmUgVUNEOTAwMF9OVU1fRkFOCQk0CisKK3N0cnVjdCB1Y2Q5MDAwX2RhdGEgeworCXU4IGZhbl9kYXRhW1VDRDkwMDBfTlVNX0ZBTl1bSTJDX1NNQlVTX0JMT0NLX01BWF07CisJc3RydWN0IHBtYnVzX2RyaXZlcl9pbmZvIGluZm87Cit9OworI2RlZmluZSB0b191Y2Q5MDAwX2RhdGEoX2luZm8pIGNvbnRhaW5lcl9vZihfaW5mbywgc3RydWN0IHVjZDkwMDBfZGF0YSwgaW5mbykKKworc3RhdGljIGludCB1Y2Q5MDAwX2dldF9mYW5fY29uZmlnKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBmYW4pCit7CisJaW50IGZhbl9jb25maWcgPSAwOworCXN0cnVjdCB1Y2Q5MDAwX2RhdGEgKmRhdGEKKwkgID0gdG9fdWNkOTAwMF9kYXRhKHBtYnVzX2dldF9kcml2ZXJfaW5mbyhjbGllbnQpKTsKKworCWlmIChkYXRhLT5mYW5fZGF0YVtmYW5dWzNdICYgMSkKKwkJZmFuX2NvbmZpZyB8PSBQQl9GQU5fMl9JTlNUQUxMRUQ7ICAgLyogVXNlIGxvd2VyIGJpdCBwb3NpdGlvbiAqLworCisJLyogUHVsc2VzL3Jldm9sdXRpb24gKi8KKwlmYW5fY29uZmlnIHw9IChkYXRhLT5mYW5fZGF0YVtmYW5dWzNdICYgMHgwNikgPj4gMTsKKworCXJldHVybiBmYW5fY29uZmlnOworfQorCitzdGF0aWMgaW50IHVjZDkwMDBfcmVhZF9ieXRlX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHBhZ2UsIGludCByZWcpCit7CisJaW50IHJldCA9IDA7CisJaW50IGZhbl9jb25maWc7CisKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgUE1CVVNfRkFOX0NPTkZJR18xMjoKKwkJaWYgKHBhZ2UpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlyZXQgPSB1Y2Q5MDAwX2dldF9mYW5fY29uZmlnKGNsaWVudCwgMCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJZmFuX2NvbmZpZyA9IHJldCA8PCA0OworCQlyZXQgPSB1Y2Q5MDAwX2dldF9mYW5fY29uZmlnKGNsaWVudCwgMSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJZmFuX2NvbmZpZyB8PSByZXQ7CisJCXJldCA9IGZhbl9jb25maWc7CisJCWJyZWFrOworCWNhc2UgUE1CVVNfRkFOX0NPTkZJR18zNDoKKwkJaWYgKHBhZ2UpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlyZXQgPSB1Y2Q5MDAwX2dldF9mYW5fY29uZmlnKGNsaWVudCwgMik7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJZmFuX2NvbmZpZyA9IHJldCA8PCA0OworCQlyZXQgPSB1Y2Q5MDAwX2dldF9mYW5fY29uZmlnKGNsaWVudCwgMyk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJZmFuX2NvbmZpZyB8PSByZXQ7CisJCXJldCA9IGZhbl9jb25maWc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FTk9EQVRBOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHVjZDkwMDBfaWRbXSA9IHsKKwl7InVjZDkwMDAiLCB1Y2Q5MDAwfSwKKwl7InVjZDkwMTIwIiwgdWNkOTAxMjB9LAorCXsidWNkOTAxMjQiLCB1Y2Q5MDEyNH0sCisJeyJ1Y2Q5MDkwIiwgdWNkOTA5MH0sCisJeyJ1Y2Q5MDkxMCIsIHVjZDkwOTEwfSwKKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB1Y2Q5MDAwX2lkKTsKKworc3RhdGljIGludCB1Y2Q5MDAwX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXU4IGJsb2NrX2J1ZmZlcltJMkNfU01CVVNfQkxPQ0tfTUFYICsgMV07CisJc3RydWN0IHVjZDkwMDBfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgcG1idXNfZHJpdmVyX2luZm8gKmluZm87CisJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKm1pZDsKKwlpbnQgaSwgcmV0OworCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsCisJCQkJICAgICBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEgfAorCQkJCSAgICAgSTJDX0ZVTkNfU01CVVNfQkxPQ0tfREFUQSkpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYmxvY2tfZGF0YShjbGllbnQsIFVDRDkwMDBfREVWSUNFX0lELAorCQkJCQlibG9ja19idWZmZXIpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiRmFpbGVkIHRvIHJlYWQgZGV2aWNlIElEXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJYmxvY2tfYnVmZmVyW3JldF0gPSAnXDAnOworCWRldl9pbmZvKCZjbGllbnQtPmRldiwgIkRldmljZSBJRCAlc1xuIiwgYmxvY2tfYnVmZmVyKTsKKworCW1pZCA9IE5VTEw7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodWNkOTAwMF9pZCk7IGkrKykgeworCQltaWQgPSAmdWNkOTAwMF9pZFtpXTsKKwkJaWYgKCFzdHJuY2FzZWNtcChtaWQtPm5hbWUsIGJsb2NrX2J1ZmZlciwgc3RybGVuKG1pZC0+bmFtZSkpKQorCQkJYnJlYWs7CisJfQorCWlmICghbWlkIHx8ICFzdHJsZW4obWlkLT5uYW1lKSkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIlVuc3VwcG9ydGVkIGRldmljZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChpZC0+ZHJpdmVyX2RhdGEgIT0gdWNkOTAwMCAmJiBpZC0+ZHJpdmVyX2RhdGEgIT0gbWlkLT5kcml2ZXJfZGF0YSkKKwkJZGV2X25vdGljZSgmY2xpZW50LT5kZXYsCisJCQkgICAiRGV2aWNlIG1pc21hdGNoOiBDb25maWd1cmVkICVzLCBkZXRlY3RlZCAlc1xuIiwKKwkJCSAgIGlkLT5uYW1lLCBtaWQtPm5hbWUpOworCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1Y2Q5MDAwX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCWluZm8gPSAmZGF0YS0+aW5mbzsKKworCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIFVDRDkwMDBfTlVNX1BBR0VTKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCSJGYWlsZWQgdG8gcmVhZCBudW1iZXIgb2YgYWN0aXZlIHBhZ2VzXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCWluZm8tPnBhZ2VzID0gcmV0OworCWlmICghaW5mby0+cGFnZXMpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJObyBwYWdlcyBjb25maWd1cmVkXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJLyogVGhlIGludGVybmFsIHRlbXBlcmF0dXJlIHNlbnNvciBpcyBhbHdheXMgYWN0aXZlICovCisJaW5mby0+ZnVuY1swXSA9IFBNQlVTX0hBVkVfVEVNUDsKKworCS8qIEV2ZXJ5dGhpbmcgZWxzZSBpcyBjb25maWd1cmFibGUgKi8KKwlyZXQgPSBpMmNfc21idXNfcmVhZF9ibG9ja19kYXRhKGNsaWVudCwgVUNEOTAwMF9NT05JVE9SX0NPTkZJRywKKwkJCQkJYmxvY2tfYnVmZmVyKTsKKwlpZiAocmV0IDw9IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJGYWlsZWQgdG8gcmVhZCBjb25maWd1cmF0aW9uIGRhdGFcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisJZm9yIChpID0gMDsgaSA8IHJldDsgaSsrKSB7CisJCWludCBwYWdlID0gVUNEOTAwMF9NT05fUEFHRShibG9ja19idWZmZXJbaV0pOworCisJCWlmIChwYWdlID49IGluZm8tPnBhZ2VzKQorCQkJY29udGludWU7CisKKwkJc3dpdGNoIChVQ0Q5MDAwX01PTl9UWVBFKGJsb2NrX2J1ZmZlcltpXSkpIHsKKwkJY2FzZSBVQ0Q5MDAwX01PTl9WT0xUQUdFOgorCQljYXNlIFVDRDkwMDBfTU9OX1ZPTFRBR0VfSFc6CisJCQlpbmZvLT5mdW5jW3BhZ2VdIHw9IFBNQlVTX0hBVkVfVk9VVAorCQkJICB8IFBNQlVTX0hBVkVfU1RBVFVTX1ZPVVQ7CisJCQlicmVhazsKKwkJY2FzZSBVQ0Q5MDAwX01PTl9URU1QRVJBVFVSRToKKwkJCWluZm8tPmZ1bmNbcGFnZV0gfD0gUE1CVVNfSEFWRV9URU1QMgorCQkJICB8IFBNQlVTX0hBVkVfU1RBVFVTX1RFTVA7CisJCQlicmVhazsKKwkJY2FzZSBVQ0Q5MDAwX01PTl9DVVJSRU5UOgorCQkJaW5mby0+ZnVuY1twYWdlXSB8PSBQTUJVU19IQVZFX0lPVVQKKwkJCSAgfCBQTUJVU19IQVZFX1NUQVRVU19JT1VUOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIEZhbiBjb25maWd1cmF0aW9uICovCisJaWYgKG1pZC0+ZHJpdmVyX2RhdGEgPT0gdWNkOTAxMjQpIHsKKwkJZm9yIChpID0gMDsgaSA8IFVDRDkwMDBfTlVNX0ZBTjsgaSsrKSB7CisJCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQkJCSAgVUNEOTAwMF9GQU5fQ09ORklHX0lOREVYLCBpKTsKKwkJCXJldCA9IGkyY19zbWJ1c19yZWFkX2Jsb2NrX2RhdGEoY2xpZW50LAorCQkJCQkJCVVDRDkwMDBfRkFOX0NPTkZJRywKKwkJCQkJCQlkYXRhLT5mYW5fZGF0YVtpXSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIG91dDsKKwkJfQorCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgVUNEOTAwMF9GQU5fQ09ORklHX0lOREVYLCAwKTsKKworCQlpbmZvLT5yZWFkX2J5dGVfZGF0YSA9IHVjZDkwMDBfcmVhZF9ieXRlX2RhdGE7CisJCWluZm8tPmZ1bmNbMF0gfD0gUE1CVVNfSEFWRV9GQU4xMiB8IFBNQlVTX0hBVkVfU1RBVFVTX0ZBTjEyCisJCSAgfCBQTUJVU19IQVZFX0ZBTjM0IHwgUE1CVVNfSEFWRV9TVEFUVVNfRkFOMzQ7CisJfQorCisJcmV0ID0gcG1idXNfZG9fcHJvYmUoY2xpZW50LCBtaWQsIGluZm8pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKwlyZXR1cm4gMDsKKworb3V0OgorCWtmcmVlKGRhdGEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdWNkOTAwMF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB1Y2Q5MDAwX2RhdGEgKmRhdGE7CisKKwlkYXRhID0gdG9fdWNkOTAwMF9kYXRhKHBtYnVzX2dldF9kcml2ZXJfaW5mbyhjbGllbnQpKTsKKwlyZXQgPSBwbWJ1c19kb19yZW1vdmUoY2xpZW50KTsKKwlrZnJlZShkYXRhKTsKKwlyZXR1cm4gcmV0OworfQorCisKKy8qIFRoaXMgaXMgdGhlIGRyaXZlciB0aGF0IHdpbGwgYmUgaW5zZXJ0ZWQgKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB1Y2Q5MDAwX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJ1Y2Q5MDAwIiwKKwl9LAorCS5wcm9iZSA9IHVjZDkwMDBfcHJvYmUsCisJLnJlbW92ZSA9IHVjZDkwMDBfcmVtb3ZlLAorCS5pZF90YWJsZSA9IHVjZDkwMDBfaWQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB1Y2Q5MDAwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJnVjZDkwMDBfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVjZDkwMDBfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZ1Y2Q5MDAwX2RyaXZlcik7Cit9CisKK01PRFVMRV9BVVRIT1IoIkd1ZW50ZXIgUm9lY2siKTsKK01PRFVMRV9ERVNDUklQVElPTigiUE1CdXMgZHJpdmVyIGZvciBUSSBVQ0Q5MHh4eCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworbW9kdWxlX2luaXQodWNkOTAwMF9pbml0KTsKK21vZHVsZV9leGl0KHVjZDkwMDBfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3VjZDkyMDAuYyBiL2RyaXZlcnMvaHdtb24vdWNkOTIwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmY2MxY2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2h3bW9uL3VjZDkyMDAuYwpAQCAtMCwwICsxLDIxMCBAQAorLyoKKyAqIEhhcmR3YXJlIG1vbml0b3JpbmcgZHJpdmVyIGZvciB1Y2Q5MjAwIHNlcmllcyBEaWdpdGFsIFBXTSBTeXN0ZW0gQ29udHJvbGxlcnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvcG1idXMuaD4KKyNpbmNsdWRlICJwbWJ1cy5oIgorCisjZGVmaW5lIFVDRDkyMDBfUEhBU0VfSU5GTwkweGQyCisjZGVmaW5lIFVDRDkyMDBfREVWSUNFX0lECTB4ZmQKKworZW51bSBjaGlwcyB7IHVjZDkyMDAsIHVjZDkyMjAsIHVjZDkyMjIsIHVjZDkyMjQsIHVjZDkyNDAsIHVjZDkyNDQsIHVjZDkyNDYsCisJICAgICB1Y2Q5MjQ4IH07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB1Y2Q5MjAwX2lkW10gPSB7CisJeyJ1Y2Q5MjAwIiwgdWNkOTIwMH0sCisJeyJ1Y2Q5MjIwIiwgdWNkOTIyMH0sCisJeyJ1Y2Q5MjIyIiwgdWNkOTIyMn0sCisJeyJ1Y2Q5MjI0IiwgdWNkOTIyNH0sCisJeyJ1Y2Q5MjQwIiwgdWNkOTI0MH0sCisJeyJ1Y2Q5MjQ0IiwgdWNkOTI0NH0sCisJeyJ1Y2Q5MjQ2IiwgdWNkOTI0Nn0sCisJeyJ1Y2Q5MjQ4IiwgdWNkOTI0OH0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgdWNkOTIwMF9pZCk7CisKK3N0YXRpYyBpbnQgdWNkOTIwMF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwl1OCBibG9ja19idWZmZXJbSTJDX1NNQlVTX0JMT0NLX01BWCArIDFdOworCXN0cnVjdCBwbWJ1c19kcml2ZXJfaW5mbyAqaW5mbzsKKwljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqbWlkOworCWludCBpLCBqLCByZXQ7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwKKwkJCQkgICAgIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSB8CisJCQkJICAgICBJMkNfRlVOQ19TTUJVU19CTE9DS19EQVRBKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSBpMmNfc21idXNfcmVhZF9ibG9ja19kYXRhKGNsaWVudCwgVUNEOTIwMF9ERVZJQ0VfSUQsCisJCQkJCWJsb2NrX2J1ZmZlcik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJGYWlsZWQgdG8gcmVhZCBkZXZpY2UgSURcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlibG9ja19idWZmZXJbcmV0XSA9ICdcMCc7CisJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiRGV2aWNlIElEICVzXG4iLCBibG9ja19idWZmZXIpOworCisJbWlkID0gTlVMTDsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh1Y2Q5MjAwX2lkKTsgaSsrKSB7CisJCW1pZCA9ICZ1Y2Q5MjAwX2lkW2ldOworCQlpZiAoIXN0cm5jYXNlY21wKG1pZC0+bmFtZSwgYmxvY2tfYnVmZmVyLCBzdHJsZW4obWlkLT5uYW1lKSkpCisJCQlicmVhazsKKwl9CisJaWYgKCFtaWQgfHwgIXN0cmxlbihtaWQtPm5hbWUpKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiVW5zdXBwb3J0ZWQgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWlmIChpZC0+ZHJpdmVyX2RhdGEgIT0gdWNkOTIwMCAmJiBpZC0+ZHJpdmVyX2RhdGEgIT0gbWlkLT5kcml2ZXJfZGF0YSkKKwkJZGV2X25vdGljZSgmY2xpZW50LT5kZXYsCisJCQkgICAiRGV2aWNlIG1pc21hdGNoOiBDb25maWd1cmVkICVzLCBkZXRlY3RlZCAlc1xuIiwKKwkJCSAgIGlkLT5uYW1lLCBtaWQtPm5hbWUpOworCisJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwbWJ1c19kcml2ZXJfaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghaW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBpMmNfc21idXNfcmVhZF9ibG9ja19kYXRhKGNsaWVudCwgVUNEOTIwMF9QSEFTRV9JTkZPLAorCQkJCQlibG9ja19idWZmZXIpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiRmFpbGVkIHRvIHJlYWQgcGhhc2UgaW5mb3JtYXRpb25cbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIENhbGN1bGF0ZSBudW1iZXIgb2YgY29uZmlndXJlZCBwYWdlcyAocmFpbHMpIGZyb20gUEhBU0VfSU5GTworCSAqIHJlZ2lzdGVyLgorCSAqIFJhaWxzIGhhdmUgdG8gYmUgc2VxdWVudGlhbCwgc28gd2UgY2FuIGFib3J0IGFmdGVyIGZpbmRpbmcKKwkgKiB0aGUgZmlyc3QgdW5jb25maWd1cmVkIHJhaWwuCisJICovCisJaW5mby0+cGFnZXMgPSAwOworCWZvciAoaSA9IDA7IGkgPCByZXQ7IGkrKykgeworCQlpZiAoIWJsb2NrX2J1ZmZlcltpXSkKKwkJCWJyZWFrOworCQlpbmZvLT5wYWdlcysrOworCX0KKwlpZiAoIWluZm8tPnBhZ2VzKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiTm8gcmFpbHMgY29uZmlndXJlZFxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKwlkZXZfaW5mbygmY2xpZW50LT5kZXYsICIlZCByYWlscyBjb25maWd1cmVkXG4iLCBpbmZvLT5wYWdlcyk7CisKKwkvKgorCSAqIFNldCBQSEFTRSByZWdpc3RlcnMgb24gYWxsIHBhZ2VzIHRvIDB4ZmYgdG8gZW5zdXJlIHRoYXQgcGhhc2UKKwkgKiBzcGVjaWZpYyBjb21tYW5kcyB3aWxsIGFwcGx5IHRvIGFsbCBwaGFzZXMgb2YgYSBnaXZlbiBwYWdlIChyYWlsKS4KKwkgKiBUaGlzIG9ubHkgYWZmZWN0cyB0aGUgUkVBRF9JT1VUIGFuZCBSRUFEX1RFTVBFUkFUVVJFMiByZWdpc3RlcnMuCisJICogUkVBRF9JT1VUIHdpbGwgcmV0dXJuIHRoZSBzdW0gb2YgY3VycmVudHMgb2YgYWxsIHBoYXNlcyBvZiBhIHJhaWwsCisJICogYW5kIFJFQURfVEVNUEVSQVRVUkUyIHdpbGwgcmV0dXJuIHRoZSBtYXhpbXVtIHRlbXBlcmF0dXJlIGRldGVjdGVkCisJICogZm9yIHRoZSB0aGUgcGhhc2VzIG9mIHRoZSByYWlsLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5wYWdlczsgaSsrKSB7CisJCS8qCisJCSAqIFNldHRpbmcgUEFHRSAmIFBIQVNFIGZhaWxzIG9uY2UgaW4gYSB3aGlsZSBmb3Igbm8gb2J2aW91cworCQkgKiByZWFzb24sIHNvIHdlIG5lZWQgdG8gcmV0cnkgYSBjb3VwbGUgb2YgdGltZXMuCisJCSAqLworCQlmb3IgKGogPSAwOyBqIDwgMzsgaisrKSB7CisJCQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgUE1CVVNfUEFHRSwgaSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQljb250aW51ZTsKKwkJCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBQTUJVU19QSEFTRSwKKwkJCQkJCQkweGZmKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWNvbnRpbnVlOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBQSEFTRSByZWdpc3RlcnNcbiIpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisJaWYgKGluZm8tPnBhZ2VzID4gMSkKKwkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFBNQlVTX1BBR0UsIDApOworCisJaW5mby0+ZnVuY1swXSA9IFBNQlVTX0hBVkVfVklOIHwgUE1CVVNfSEFWRV9TVEFUVVNfSU5QVVQgfAorCQkJUE1CVVNfSEFWRV9JSU4gfCBQTUJVU19IQVZFX1BJTiB8CisJCQlQTUJVU19IQVZFX1ZPVVQgfCBQTUJVU19IQVZFX1NUQVRVU19WT1VUIHwKKwkJCVBNQlVTX0hBVkVfSU9VVCB8IFBNQlVTX0hBVkVfU1RBVFVTX0lPVVQgfAorCQkJUE1CVVNfSEFWRV9QT1VUIHwgUE1CVVNfSEFWRV9URU1QIHwKKwkJCVBNQlVTX0hBVkVfVEVNUDIgfCBQTUJVU19IQVZFX1NUQVRVU19URU1QOworCisJZm9yIChpID0gMTsgaSA8IGluZm8tPnBhZ2VzOyBpKyspCisJCWluZm8tPmZ1bmNbaV0gPSBQTUJVU19IQVZFX1ZPVVQgfCBQTUJVU19IQVZFX1NUQVRVU19WT1VUIHwKKwkJCVBNQlVTX0hBVkVfSU9VVCB8IFBNQlVTX0hBVkVfU1RBVFVTX0lPVVQgfAorCQkJUE1CVVNfSEFWRV9QT1VUIHwKKwkJCVBNQlVTX0hBVkVfVEVNUDIgfCBQTUJVU19IQVZFX1NUQVRVU19URU1QOworCisJLyogdWNkOTI0MCBzdXBwb3J0cyBhIHNpbmdsZSBmYW4gKi8KKwlpZiAobWlkLT5kcml2ZXJfZGF0YSA9PSB1Y2Q5MjQwKQorCQlpbmZvLT5mdW5jWzBdIHw9IFBNQlVTX0hBVkVfRkFOMTIgfCBQTUJVU19IQVZFX1NUQVRVU19GQU4xMjsKKworCXJldCA9IHBtYnVzX2RvX3Byb2JlKGNsaWVudCwgbWlkLCBpbmZvKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisJcmV0dXJuIDA7CitvdXQ6CisJa2ZyZWUoaW5mbyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB1Y2Q5MjAwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCWludCByZXQ7CisJY29uc3Qgc3RydWN0IHBtYnVzX2RyaXZlcl9pbmZvICppbmZvOworCisJaW5mbyA9IHBtYnVzX2dldF9kcml2ZXJfaW5mbyhjbGllbnQpOworCXJldCA9IHBtYnVzX2RvX3JlbW92ZShjbGllbnQpOworCWtmcmVlKGluZm8pOworCXJldHVybiByZXQ7Cit9CisKKworLyogVGhpcyBpcyB0aGUgZHJpdmVyIHRoYXQgd2lsbCBiZSBpbnNlcnRlZCAqLworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHVjZDkyMDBfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInVjZDkyMDAiLAorCX0sCisJLnByb2JlID0gdWNkOTIwMF9wcm9iZSwKKwkucmVtb3ZlID0gdWNkOTIwMF9yZW1vdmUsCisJLmlkX3RhYmxlID0gdWNkOTIwMF9pZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHVjZDkyMDBfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmdWNkOTIwMF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdWNkOTIwMF9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJnVjZDkyMDBfZHJpdmVyKTsKK30KKworTU9EVUxFX0FVVEhPUigiR3VlbnRlciBSb2VjayIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQTUJ1cyBkcml2ZXIgZm9yIFRJIFVDRDkyMngsIFVDRDkyNHgiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK21vZHVsZV9pbml0KHVjZDkyMDBfaW5pdCk7Cittb2R1bGVfZXhpdCh1Y2Q5MjAwX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1ncGlvLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWdwaW8uYwppbmRleCBkOWFhOWE2Li5hNjUxNzc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWdwaW8uYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWdwaW8uYwpAQCAtMjE5LDcgKzIxOSw3IEBACiB9CiBtb2R1bGVfZXhpdChpMmNfZ3Bpb19leGl0KTsKIAotTU9EVUxFX0FVVEhPUigiSGFhdmFyZCBTa2lubmVtb2VuIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJIYWF2YXJkIFNraW5uZW1vZW4gKEF0bWVsKSIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJQbGF0Zm9ybS1pbmRlcGVuZGVudCBiaXRiYW5naW5nIEkyQyBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BTElBUygicGxhdGZvcm06aTJjLWdwaW8iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1hY3BpLmMgYi9kcml2ZXJzL2lkZS9pZGUtYWNwaS5jCmluZGV4IGMyNmMxMTkuLjJhZjhjYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1hY3BpLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWFjcGkuYwpAQCAtNDE2LDIxICs0MTYsMjEgQEAKIAogCW91dF9vYmogPSBvdXRwdXQucG9pbnRlcjsKIAlpZiAob3V0X29iai0+dHlwZSAhPSBBQ1BJX1RZUEVfQlVGRkVSKSB7Ci0JCWtmcmVlKG91dHB1dC5wb2ludGVyKTsKIAkJREVCUFJJTlQoIlJ1biBfR1RNOiBlcnJvcjogIgogCQkgICAgICAgImV4cGVjdGVkIG9iamVjdCB0eXBlIG9mIEFDUElfVFlQRV9CVUZGRVIsICIKIAkJICAgICAgICJnb3QgMHgleFxuIiwgb3V0X29iai0+dHlwZSk7CisJCWtmcmVlKG91dHB1dC5wb2ludGVyKTsKIAkJcmV0dXJuOwogCX0KIAogCWlmICghb3V0X29iai0+YnVmZmVyLmxlbmd0aCB8fCAhb3V0X29iai0+YnVmZmVyLnBvaW50ZXIgfHwKIAkgICAgb3V0X29iai0+YnVmZmVyLmxlbmd0aCAhPSBzaXplb2Yoc3RydWN0IEdUTV9idWZmZXIpKSB7Ci0JCWtmcmVlKG91dHB1dC5wb2ludGVyKTsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCQkiJXM6IHVuZXhwZWN0ZWQgX0dUTSBsZW5ndGggKDB4JXgpW3Nob3VsZCBiZSAweCV6eF0gb3IgIgogCQkJImFkZHIgKDB4JXApXG4iLAogCQkJX19mdW5jX18sIG91dF9vYmotPmJ1ZmZlci5sZW5ndGgsCiAJCQlzaXplb2Yoc3RydWN0IEdUTV9idWZmZXIpLCBvdXRfb2JqLT5idWZmZXIucG9pbnRlcik7CisJCWtmcmVlKG91dHB1dC5wb2ludGVyKTsKIAkJcmV0dXJuOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jIGIvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jCmluZGV4IDVhNzAyZDAuLjYxZmRmNTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jCkBAIC03Myw3ICs3Myw3IEBACiAJCWRyaXZlLT5mYWlsZWRfcGMgPSBOVUxMOwogCiAJaWYgKHBjLT5jWzBdID09IEdQQ01EX1JFQURfMTAgfHwgcGMtPmNbMF0gPT0gR1BDTURfV1JJVEVfMTAgfHwKLQkgICAgKHJxICYmIHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9CTE9DS19QQykpCisJICAgIHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9CTE9DS19QQykKIAkJdXB0b2RhdGUgPSAxOyAvKiBGSVhNRSAqLwogCWVsc2UgaWYgKHBjLT5jWzBdID09IEdQQ01EX1JFUVVFU1RfU0VOU0UpIHsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXNjYW4tcGNpLmMgYi9kcml2ZXJzL2lkZS9pZGUtc2Nhbi1wY2kuYwppbmRleCAwZTc5ZWZmLi5jM2RhNTNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtc2Nhbi1wY2kuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtc2Nhbi1wY2kuYwpAQCAtODgsNyArODgsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgKmwsICpuOwogCiAJcHJlX2luaXQgPSAwOwotCXdoaWxlICgoZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgZGV2KSkpCisJZm9yX2VhY2hfcGNpX2RldihkZXYpCiAJCWlkZV9zY2FuX3BjaWRldihkZXYpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BtYWMuYyBiL2RyaXZlcnMvaWRlL3BtYWMuYwppbmRleCBlYmNmOGU0Li4xZGI3YzQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wbWFjLmMKKysrIGIvZHJpdmVycy9pZGUvcG1hYy5jCkBAIC0xMzM0LDcgKzEzMzQsNyBAQAogc3RhdGljIGludAogcG1hY19pZGVfcGNpX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKQogewotCXBtYWNfaWRlX2h3aWZfdCAqcG1pZiA9IChwbWFjX2lkZV9od2lmX3QgKilwY2lfZ2V0X2RydmRhdGEocGRldik7CisJcG1hY19pZGVfaHdpZl90ICpwbWlmID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCWludCByYyA9IDA7CiAKIAlpZiAobWVzZy5ldmVudCAhPSBwZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUuZXZlbnQKQEAgLTEzNTAsNyArMTM1MCw3IEBACiBzdGF0aWMgaW50CiBwbWFjX2lkZV9wY2lfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXBtYWNfaWRlX2h3aWZfdCAqcG1pZiA9IChwbWFjX2lkZV9od2lmX3QgKilwY2lfZ2V0X2RydmRhdGEocGRldik7CisJcG1hY19pZGVfaHdpZl90ICpwbWlmID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCWludCByYyA9IDA7CiAKIAlpZiAocGRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50ICE9IFBNX0VWRU5UX09OKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWU4MDIxNTQvZmFrZWhhcmQuYyBiL2RyaXZlcnMvaWVlZTgwMjE1NC9mYWtlaGFyZC5jCmluZGV4IGQ5ZDBlMTMuLmE1YTQ5YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTgwMjE1NC9mYWtlaGFyZC5jCisrKyBiL2RyaXZlcnMvaWVlZTgwMjE1NC9mYWtlaGFyZC5jCkBAIC0zOTMsMTYgKzM5Myw2IEBACiAJcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJcHJpdi0+cGh5ID0gcGh5OwogCi0JLyoKLQkgKiBJZiB0aGUgbmFtZSBpcyBhIGZvcm1hdCBzdHJpbmcgdGhlIGNhbGxlciB3YW50cyB1cyB0byBkbyBhCi0JICogbmFtZSBhbGxvY2F0aW9uLgotCSAqLwotCWlmIChzdHJjaHIoZGV2LT5uYW1lLCAnJScpKSB7Ci0JCWVyciA9IGRldl9hbGxvY19uYW1lKGRldiwgZGV2LT5uYW1lKTsKLQkJaWYgKGVyciA8IDApCi0JCQlnb3RvIG91dDsKLQl9Ci0KIAl3cGFuX3BoeV9zZXRfZGV2KHBoeSwgJnBkZXYtPmRldik7CiAJU0VUX05FVERFVl9ERVYoZGV2LCAmcGh5LT5kZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9hZGRyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9hZGRyLmMKaW5kZXggNGZmYzIyNC4uOGUyMWQ0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvYWRkci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2FkZHIuYwpAQCAtMTg1LDE1ICsxODUsMjAgQEAKIAlfX2JlMzIgZHN0X2lwID0gZHN0X2luLT5zaW5fYWRkci5zX2FkZHI7CiAJc3RydWN0IHJ0YWJsZSAqcnQ7CiAJc3RydWN0IG5laWdoYm91ciAqbmVpZ2g7CisJc3RydWN0IGZsb3dpNCBmbDQ7CiAJaW50IHJldDsKIAotCXJ0ID0gaXBfcm91dGVfb3V0cHV0KCZpbml0X25ldCwgZHN0X2lwLCBzcmNfaXAsIDAsIGFkZHItPmJvdW5kX2Rldl9pZik7CisJbWVtc2V0KCZmbDQsIDAsIHNpemVvZihmbDQpKTsKKwlmbDQuZGFkZHIgPSBkc3RfaXA7CisJZmw0LnNhZGRyID0gc3JjX2lwOworCWZsNC5mbG93aTRfb2lmID0gYWRkci0+Ym91bmRfZGV2X2lmOworCXJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleSgmaW5pdF9uZXQsICZmbDQpOwogCWlmIChJU19FUlIocnQpKSB7CiAJCXJldCA9IFBUUl9FUlIocnQpOwogCQlnb3RvIG91dDsKIAl9CiAJc3JjX2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLQlzcmNfaW4tPnNpbl9hZGRyLnNfYWRkciA9IHJ0LT5ydF9zcmM7CisJc3JjX2luLT5zaW5fYWRkci5zX2FkZHIgPSBmbDQuc2FkZHI7CiAKIAlpZiAocnQtPmRzdC5kZXYtPmZsYWdzICYgSUZGX0xPT1BCQUNLKSB7CiAJCXJldCA9IHJkbWFfdHJhbnNsYXRlX2lwKChzdHJ1Y3Qgc29ja2FkZHIgKikgZHN0X2luLCBhZGRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyLmMKaW5kZXggZGM4NWQ3Ny4uMGNmYzQ1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9jbS5jCmluZGV4IDMyMTZiY2EuLjIzOTE4NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2NtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfY20uYwpAQCAtMzM4LDggKzMzOCw5IEBACiAJCQkJIF9fYmUxNiBwZWVyX3BvcnQsIHU4IHRvcykKIHsKIAlzdHJ1Y3QgcnRhYmxlICpydDsKKwlzdHJ1Y3QgZmxvd2k0IGZsNDsKIAotCXJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKCZpbml0X25ldCwgTlVMTCwgcGVlcl9pcCwgbG9jYWxfaXAsCisJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMoJmluaXRfbmV0LCAmZmw0LCBOVUxMLCBwZWVyX2lwLCBsb2NhbF9pcCwKIAkJCQkgICBwZWVyX3BvcnQsIGxvY2FsX3BvcnQsIElQUFJPVE9fVENQLAogCQkJCSAgIHRvcywgMCk7CiAJaWYgKElTX0VSUihydCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jCmluZGV4IGQ3ZWU3MGYuLmY2NjBjZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jCkBAIC0zMTUsOCArMzE1LDkgQEAKIAkJCQkgX19iZTE2IHBlZXJfcG9ydCwgdTggdG9zKQogewogCXN0cnVjdCBydGFibGUgKnJ0OworCXN0cnVjdCBmbG93aTQgZmw0OwogCi0JcnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMoJmluaXRfbmV0LCBOVUxMLCBwZWVyX2lwLCBsb2NhbF9pcCwKKwlydCA9IGlwX3JvdXRlX291dHB1dF9wb3J0cygmaW5pdF9uZXQsICZmbDQsIE5VTEwsIHBlZXJfaXAsIGxvY2FsX2lwLAogCQkJCSAgIHBlZXJfcG9ydCwgbG9jYWxfcG9ydCwgSVBQUk9UT19UQ1AsCiAJCQkJICAgdG9zLCAwKTsKIAlpZiAoSVNfRVJSKHJ0KSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC90NC5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L3Q0LmgKaW5kZXggMjRhZjEyZi4uYzAyMjFlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L3Q0LmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L3Q0LmgKQEAgLTI2OSwxMSArMjY5LDggQEAKIAogc3RhdGljIGlubGluZSBwZ3Byb3RfdCB0NF9wZ3Byb3Rfd2MocGdwcm90X3QgcHJvdCkKIHsKLSNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKENPTkZJR19QUEM2NCkKIAlyZXR1cm4gcGdwcm90X3dyaXRlY29tYmluZShwcm90KTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1BQQzY0KQotCXJldHVybiBfX3BncHJvdCgocGdwcm90X3ZhbChwcm90KSB8IF9QQUdFX05PX0NBQ0hFKSAmCi0JCQl+KHBncHJvdF90KV9QQUdFX0dVQVJERUQpOwogI2Vsc2UKIAlyZXR1cm4gcGdwcm90X25vbmNhY2hlZChwcm90KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmMKaW5kZXggMTBkMGE1ZS4uOTZmYTlhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5jCkBAIC0yODg1LDkgKzI4ODUsOCBAQAogCQkJCQlpZiAoKGNxZV9lcnJ2ICYKIAkJCQkJCQkoTkVTX05JQ19FUlJWX0JJVFNfSVBWNF9DU1VNX0VSUiB8IE5FU19OSUNfRVJSVl9CSVRTX1RDUFVEUF9DU1VNX0VSUiB8CiAJCQkJCQkJTkVTX05JQ19FUlJWX0JJVFNfSVBIX0VSUiB8IE5FU19OSUNfRVJSVl9CSVRTX1dRRV9PVkVSUlVOKSkgPT0gMCkgewotCQkJCQkJaWYgKG5lc3ZuaWMtPnJ4X2NoZWNrc3VtX2Rpc2FibGVkID09IDApIHsKKwkJCQkJCWlmIChuZXN2bmljLT5uZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pCiAJCQkJCQkJcnhfc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQkJCQkJCX0KIAkJCQkJfSBlbHNlCiAJCQkJCQluZXNfZGVidWcoTkVTX0RCR19DUSwgIiVzOiB1bnN1Y2Nlc3NmdWxseSBjaGVja3N1bW1lZCBUQ1Agb3IgVURQIHBhY2tldC4iCiAJCQkJCQkJCSIgZXJydiA9IDB4JVgsIHBrdF90eXBlID0gMHglWC5cbiIsCkBAIC0yODk3LDcgKzI4OTYsNyBAQAogCQkJCQlpZiAoKGNxZV9lcnJ2ICYKIAkJCQkJCQkoTkVTX05JQ19FUlJWX0JJVFNfSVBWNF9DU1VNX0VSUiB8IE5FU19OSUNfRVJSVl9CSVRTX0lQSF9FUlIgfAogCQkJCQkJCU5FU19OSUNfRVJSVl9CSVRTX1dRRV9PVkVSUlVOKSkgPT0gMCkgewotCQkJCQkJaWYgKG5lc3ZuaWMtPnJ4X2NoZWNrc3VtX2Rpc2FibGVkID09IDApIHsKKwkJCQkJCWlmIChuZXN2bmljLT5uZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pIHsKIAkJCQkJCQlyeF9za2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCQkJCQkJCS8qIG5lc19kZWJ1ZyhORVNfREJHX0NRLCAiJXM6IFJlcG9ydGluZyBzdWNjZXNzZnVsbHkgY2hlY2tzdW1tZWQgSVB2NCBwYWNrZXQuXG4iLAogCQkJCQkJCQkgIG5lc3ZuaWMtPm5ldGRldi0+bmFtZSk7ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuaAppbmRleCBkMmFiZTA3Li45MTU5NDExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmgKQEAgLTEyNDUsNyArMTI0NSw2IEBACiAJdTggIG5leHRfcXBfbmljX2luZGV4OwogCXU4ICBvZl9kZXZpY2VfcmVnaXN0ZXJlZDsKIAl1OCAgcmRtYV9lbmFibGVkOwotCXU4ICByeF9jaGVja3N1bV9kaXNhYmxlZDsKIAl1MzIgbHJvX21heF9hZ2dyOwogCXN0cnVjdCBuZXRfbHJvX21nciBscm9fbWdyOwogCXN0cnVjdCBuZXRfbHJvX2Rlc2MgbHJvX2Rlc2NbTkVTX01BWF9MUk9fREVTQ1JJUFRPUlNdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYwppbmRleCBlOTZiOGZiLi5kM2ExYzQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYwpAQCAtMTA5MywzNCArMTA5Myw2IEBACiB9OwogI2RlZmluZSBORVNfRVRIVE9PTF9TVEFUX0NPVU5UICBBUlJBWV9TSVpFKG5lc19ldGh0b29sX3N0cmluZ3NldCkKIAotLyoqCi0gKiBuZXNfbmV0ZGV2X2dldF9yeF9jc3VtCi0gKi8KLXN0YXRpYyB1MzIgbmVzX25ldGRldl9nZXRfcnhfY3N1bSAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKLXsKLQlzdHJ1Y3QgbmVzX3ZuaWMgKm5lc3ZuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0JaWYgKG5lc3ZuaWMtPnJ4X2NoZWNrc3VtX2Rpc2FibGVkKQotCQlyZXR1cm4gMDsKLQllbHNlCi0JCXJldHVybiAxOwotfQotCi0KLS8qKgotICogbmVzX25ldGRldl9zZXRfcmNfY3N1bQotICovCi1zdGF0aWMgaW50IG5lc19uZXRkZXZfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIGVuYWJsZSkKLXsKLQlzdHJ1Y3QgbmVzX3ZuaWMgKm5lc3ZuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0JaWYgKGVuYWJsZSkKLQkJbmVzdm5pYy0+cnhfY2hlY2tzdW1fZGlzYWJsZWQgPSAwOwotCWVsc2UKLQkJbmVzdm5pYy0+cnhfY2hlY2tzdW1fZGlzYWJsZWQgPSAxOwotCXJldHVybiAwOwotfQotCiAKIC8qKgogICogbmVzX25ldGRldl9nZXRfc3NldF9jb3VudApAQCAtMTUyMSw3ICsxNDkzLDcgQEAKIAlldF9jbWQtPm1heHJ4cGt0ID0gNTExOwogCiAJaWYgKG5lc2FkYXB0ZXItPk9uZUdfTW9kZSkgewotCQlldF9jbWQtPnNwZWVkID0gU1BFRURfMTAwMDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGV0X2NtZCwgU1BFRURfMTAwMCk7CiAJCWlmIChwaHlfdHlwZSA9PSBORVNfUEhZX1RZUEVfUFVNQV8xRykgewogCQkJZXRfY21kLT5zdXBwb3J0ZWQgICA9IFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbDsKIAkJCWV0X2NtZC0+YWR2ZXJ0aXNpbmcgPSBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsOwpAQCAtMTU2MCw3ICsxNTMyLDcgQEAKIAkJZXRfY21kLT5hZHZlcnRpc2luZyA9IEFEVkVSVElTRURfMTAwMDBiYXNlVF9GdWxsOwogCQlldF9jbWQtPnBoeV9hZGRyZXNzID0gbWFjX2luZGV4OwogCX0KLQlldF9jbWQtPnNwZWVkID0gU1BFRURfMTAwMDA7CisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGV0X2NtZCwgU1BFRURfMTAwMDApOwogCWV0X2NtZC0+YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE1OTgsMTkgKzE1NzAsMTAgQEAKIH0KIAogCi1zdGF0aWMgaW50IG5lc19uZXRkZXZfc2V0X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBmbGFncykKLXsKLQlyZXR1cm4gZXRodG9vbF9vcF9zZXRfZmxhZ3MobmV0ZGV2LCBmbGFncywgRVRIX0ZMQUdfTFJPKTsKLX0KLQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5lc19ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAogCS5nZXRfc2V0dGluZ3MgPSBuZXNfbmV0ZGV2X2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzID0gbmVzX25ldGRldl9zZXRfc2V0dGluZ3MsCi0JLmdldF90eF9jc3VtID0gZXRodG9vbF9vcF9nZXRfdHhfY3N1bSwKLQkuZ2V0X3J4X2NzdW0gPSBuZXNfbmV0ZGV2X2dldF9yeF9jc3VtLAotCS5nZXRfc2cgPSBldGh0b29sX29wX2dldF9zZywKIAkuZ2V0X3N0cmluZ3MgPSBuZXNfbmV0ZGV2X2dldF9zdHJpbmdzLAogCS5nZXRfc3NldF9jb3VudCA9IG5lc19uZXRkZXZfZ2V0X3NzZXRfY291bnQsCiAJLmdldF9ldGh0b29sX3N0YXRzID0gbmVzX25ldGRldl9nZXRfZXRodG9vbF9zdGF0cywKQEAgLTE2MTksMTMgKzE1ODIsNiBAQAogCS5zZXRfY29hbGVzY2UgPSBuZXNfbmV0ZGV2X3NldF9jb2FsZXNjZSwKIAkuZ2V0X3BhdXNlcGFyYW0gPSBuZXNfbmV0ZGV2X2dldF9wYXVzZXBhcmFtLAogCS5zZXRfcGF1c2VwYXJhbSA9IG5lc19uZXRkZXZfc2V0X3BhdXNlcGFyYW0sCi0JLnNldF90eF9jc3VtID0gZXRodG9vbF9vcF9zZXRfdHhfY3N1bSwKLQkuc2V0X3J4X2NzdW0gPSBuZXNfbmV0ZGV2X3NldF9yeF9jc3VtLAotCS5zZXRfc2cgPSBldGh0b29sX29wX3NldF9zZywKLQkuZ2V0X3RzbyA9IGV0aHRvb2xfb3BfZ2V0X3RzbywKLQkuc2V0X3RzbyA9IGV0aHRvb2xfb3Bfc2V0X3RzbywKLQkuZ2V0X2ZsYWdzID0gZXRodG9vbF9vcF9nZXRfZmxhZ3MsCi0JLnNldF9mbGFncyA9IG5lc19uZXRkZXZfc2V0X2ZsYWdzLAogfTsKIAogCkBAIC0xNzI3LDEyICsxNjgzLDExIEBACiAJbmV0ZGV2LT5kZXZfYWRkcls1XSA9ICh1OCl1NjR0ZW1wOwogCW1lbWNweShuZXRkZXYtPnBlcm1fYWRkciwgbmV0ZGV2LT5kZXZfYWRkciwgNik7CiAKLQlpZiAoKG5lc3ZuaWMtPmxvZ2ljYWxfcG9ydCA8IDIpIHx8IChuZXNkZXYtPm5lc2FkYXB0ZXItPmh3X3JldiAhPSBORTAyMF9SRVYpKSB7Ci0JCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU08gfCBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNOwotCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfR1NPIHwgTkVUSUZfRl9UU08gfCBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNOwotCX0gZWxzZSB7Ci0JCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTTsKLQl9CisJbmV0ZGV2LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfUlhDU1VNIHwgTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTTsKKwlpZiAoKG5lc3ZuaWMtPmxvZ2ljYWxfcG9ydCA8IDIpIHx8IChuZXNkZXYtPm5lc2FkYXB0ZXItPmh3X3JldiAhPSBORTAyMF9SRVYpKQorCQluZXRkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOworCW5ldGRldi0+ZmVhdHVyZXMgfD0gbmV0ZGV2LT5od19mZWF0dXJlczsKKwluZXRkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOwogCiAJbmVzX2RlYnVnKE5FU19EQkdfSU5JVCwgIm5lc3ZuaWMgPSAlcCwgcmVwb3J0ZWQgZmVhdHVyZXMgPSAweCVsWCwgUVBpZCA9ICVkLCIKIAkJCSIgbmljX2luZGV4ID0gJWQsIGxvZ2ljYWxfcG9ydCA9ICVkLCBtYWNfaW5kZXggPSAlZC5cbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liLmggYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liLmgKaW5kZXggYWI5N2Y5Mi4uN2I2OTg1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWIuaApAQCAtOTEsNyArOTEsNiBAQAogCUlQT0lCX1NUT1BfUkVBUEVSCSAgPSA3LAogCUlQT0lCX0ZMQUdfQURNSU5fQ00JICA9IDksCiAJSVBPSUJfRkxBR19VTUNBU1QJICA9IDEwLAotCUlQT0lCX0ZMQUdfQ1NVTQkJICA9IDExLAogCiAJSVBPSUJfTUFYX0JBQ0tPRkZfU0VDT05EUyA9IDE2LAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2NtLmMKaW5kZXggOTNkNTU4MC4uMzk5MTNhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9jbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfY20uYwpAQCAtMTQ2Myw4ICsxNDYzLDcgQEAKIAkJc2V0X2JpdChJUE9JQl9GTEFHX0FETUlOX0NNLCAmcHJpdi0+ZmxhZ3MpOwogCQlpcG9pYl93YXJuKHByaXYsICJlbmFibGluZyBjb25uZWN0ZWQgbW9kZSAiCiAJCQkgICAid2lsbCBjYXVzZSBtdWx0aWNhc3QgcGFja2V0IGRyb3BzXG4iKTsKLQotCQlkZXYtPmZlYXR1cmVzICY9IH4oTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9TRyB8IE5FVElGX0ZfVFNPKTsKKwkJbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpOwogCQlydG5sX3VubG9jaygpOwogCQlwcml2LT50eF93ci5zZW5kX2ZsYWdzICY9IH5JQl9TRU5EX0lQX0NTVU07CiAKQEAgLTE0NzQsMTMgKzE0NzMsNyBAQAogCiAJaWYgKCFzdHJjbXAoYnVmLCAiZGF0YWdyYW1cbiIpKSB7CiAJCWNsZWFyX2JpdChJUE9JQl9GTEFHX0FETUlOX0NNLCAmcHJpdi0+ZmxhZ3MpOwotCi0JCWlmICh0ZXN0X2JpdChJUE9JQl9GTEFHX0NTVU0sICZwcml2LT5mbGFncykpIHsKLQkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9TRzsKLQkJCXByaXYtPmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9HUk87Ci0JCQlpZiAocHJpdi0+aGNhX2NhcHMgJiBJQl9ERVZJQ0VfVURfVFNPKQotCQkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087Ci0JCX0KKwkJbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpOwogCQlkZXZfc2V0X210dShkZXYsIG1pbihwcml2LT5tY2FzdF9tdHUsIGRldi0+bXR1KSk7CiAJCXJ0bmxfdW5sb2NrKCk7CiAJCWlwb2liX2ZsdXNoX3BhdGhzKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2V0aHRvb2wuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfZXRodG9vbC5jCmluZGV4IDE5ZjdmNTIuLjI5YmM3YjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfZXRodG9vbC5jCkBAIC00MiwzMiArNDIsNiBAQAogCXN0cm5jcHkoZHJ2aW5mby0+ZHJpdmVyLCAiaXBvaWIiLCBzaXplb2YoZHJ2aW5mby0+ZHJpdmVyKSAtIDEpOwogfQogCi1zdGF0aWMgdTMyIGlwb2liX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gdGVzdF9iaXQoSVBPSUJfRkxBR19DU1VNLCAmcHJpdi0+ZmxhZ3MpICYmCi0JCSF0ZXN0X2JpdChJUE9JQl9GTEFHX0FETUlOX0NNLCAmcHJpdi0+ZmxhZ3MpOwotfQotCi1zdGF0aWMgaW50IGlwb2liX3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmIChkYXRhKSB7Ci0JCWlmICghdGVzdF9iaXQoSVBPSUJfRkxBR19BRE1JTl9DTSwgJnByaXYtPmZsYWdzKSAmJgotCQkgICAgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1NHKSAmJgotCQkgICAgKHByaXYtPmhjYV9jYXBzICYgSUJfREVWSUNFX1VEX1RTTykpIHsKLQkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087Ci0JCX0gZWxzZSB7Ci0JCQlpcG9pYl93YXJuKHByaXYsICJjYW4ndCBzZXQgVFNPIG9uXG4iKTsKLQkJCXJldHVybiAtRU9QTk9UU1VQUDsKLQkJfQotCX0gZWxzZQotCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGlwb2liX2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgICAgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmNvYWwpCiB7CkBAIC0xMDgsOCArODIsNiBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGlwb2liX2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbwkJPSBpcG9pYl9nZXRfZHJ2aW5mbywKLQkuZ2V0X3J4X2NzdW0JCT0gaXBvaWJfZ2V0X3J4X2NzdW0sCi0JLnNldF90c28JCT0gaXBvaWJfc2V0X3RzbywKIAkuZ2V0X2NvYWxlc2NlCQk9IGlwb2liX2dldF9jb2FsZXNjZSwKIAkuc2V0X2NvYWxlc2NlCQk9IGlwb2liX3NldF9jb2FsZXNjZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMKaW5kZXggODA2ZDAyOS4uODFhZTYxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9pYi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfaWIuYwpAQCAtMjkyLDcgKzI5Miw3IEBACiAJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAogCXNrYi0+ZGV2ID0gZGV2OwotCWlmICh0ZXN0X2JpdChJUE9JQl9GTEFHX0NTVU0sICZwcml2LT5mbGFncykgJiYgbGlrZWx5KHdjLT5jc3VtX29rKSkKKwlpZiAoKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkgJiYgbGlrZWx5KHdjLT5jc3VtX29rKSkKIAkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAogCW5hcGlfZ3JvX3JlY2VpdmUoJnByaXYtPm5hcGksIHNrYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCmluZGV4IGFjYTNiNDQuLjg2YWRkY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCkBAIC0xNzEsNiArMTcxLDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1MzIgaXBvaWJfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcykKK3sKKwlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKHRlc3RfYml0KElQT0lCX0ZMQUdfQURNSU5fQ00sICZwcml2LT5mbGFncykpCisJCWZlYXR1cmVzICY9IH4oTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfVFNPKTsKKworCXJldHVybiBmZWF0dXJlczsKK30KKwogc3RhdGljIGludCBpcG9pYl9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQogewogCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CkBAIC05NzAsNiArOTgwLDcgQEAKIAkubmRvX29wZW4JCSA9IGlwb2liX29wZW4sCiAJLm5kb19zdG9wCQkgPSBpcG9pYl9zdG9wLAogCS5uZG9fY2hhbmdlX210dQkJID0gaXBvaWJfY2hhbmdlX210dSwKKwkubmRvX2ZpeF9mZWF0dXJlcwkgPSBpcG9pYl9maXhfZmVhdHVyZXMsCiAJLm5kb19zdGFydF94bWl0CSAJID0gaXBvaWJfc3RhcnRfeG1pdCwKIAkubmRvX3R4X3RpbWVvdXQJCSA9IGlwb2liX3RpbWVvdXQsCiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJID0gaXBvaWJfc2V0X21jYXN0X2xpc3QsCkBAIC0xMTU0LDE5ICsxMTY1LDE4IEBACiAJa2ZyZWUoZGV2aWNlX2F0dHIpOwogCiAJaWYgKHByaXYtPmhjYV9jYXBzICYgSUJfREVWSUNFX1VEX0lQX0NTVU0pIHsKLQkJc2V0X2JpdChJUE9JQl9GTEFHX0NTVU0sICZwcml2LT5mbGFncyk7Ci0JCXByaXYtPmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTTsKKwkJcHJpdi0+ZGV2LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfAorCQkJTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9SWENTVU07CisKKwkJaWYgKHByaXYtPmhjYV9jYXBzICYgSUJfREVWSUNFX1VEX1RTTykKKwkJCXByaXYtPmRldi0+aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CisKKwkJcHJpdi0+ZGV2LT5mZWF0dXJlcyB8PSBwcml2LT5kZXYtPmh3X2ZlYXR1cmVzOwogCX0KIAotCXByaXYtPmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9HUk87Ci0KLQlpZiAocHJpdi0+ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfU0cgJiYgcHJpdi0+aGNhX2NhcHMgJiBJQl9ERVZJQ0VfVURfVFNPKQotCQlwcml2LT5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwotCiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICppcG9pYl9hZGRfcG9ydChjb25zdCBjaGFyICpmb3JtYXQsCiAJCQkJCSBzdHJ1Y3QgaWJfZGV2aWNlICpoY2EsIHU4IHBvcnQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcnBvcnQuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VycG9ydC5jCmluZGV4IDg3NTVmNWYuLmYzNjk4OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VycG9ydC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VycG9ydC5jCkBAIC0xMjAsMTcgKzEyMCwyMSBAQAogICogJ2ludGVycnVwdCcgcm91dGluZS4KICAqLwogCi1zdGF0aWMgdm9pZCBzZXJwb3J0X2xkaXNjX3JlY2VpdmUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqY3AsIGNoYXIgKmZwLCBpbnQgY291bnQpCitzdGF0aWMgdW5zaWduZWQgaW50IHNlcnBvcnRfbGRpc2NfcmVjZWl2ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQljb25zdCB1bnNpZ25lZCBjaGFyICpjcCwgY2hhciAqZnAsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3Qgc2VycG9ydCAqc2VycG9ydCA9IChzdHJ1Y3Qgc2VycG9ydCopIHR0eS0+ZGlzY19kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGNoX2ZsYWdzOworCWludCByZXQgPSAwOwogCWludCBpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNlcnBvcnQtPmxvY2ssIGZsYWdzKTsKIAotCWlmICghdGVzdF9iaXQoU0VSUE9SVF9BQ1RJVkUsICZzZXJwb3J0LT5mbGFncykpCisJaWYgKCF0ZXN0X2JpdChTRVJQT1JUX0FDVElWRSwgJnNlcnBvcnQtPmZsYWdzKSkgeworCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogCQlzd2l0Y2ggKGZwW2ldKSB7CkBAIC0xNTIsNiArMTU2LDggQEAKIAogb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlcnBvcnQtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQgPT0gMCA/IGNvdW50IDogcmV0OwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2NhcGkvS2NvbmZpZyBiL2RyaXZlcnMvaXNkbi9jYXBpL0tjb25maWcKaW5kZXggYTE2OGU4YS4uMTVjM2ZmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2NhcGkvS2NvbmZpZworKysgYi9kcml2ZXJzL2lzZG4vY2FwaS9LY29uZmlnCkBAIC0zMywyMSArMzMsNiBAQAogCSAgc3RhbmRhcmRpemVkIGxpYmNhcGkyMCB0byBhY2Nlc3MgdGhpcyBmdW5jdGlvbmFsaXR5LiAgWW91IHNob3VsZCBzYXkKIAkgIFkvTSBoZXJlLgogCi1jb25maWcgSVNETl9DQVBJX0NBUElGU19CT09MCi0JYm9vbCAiQ0FQSTIuMCBmaWxlc3lzdGVtIHN1cHBvcnQgKERFUFJFQ0FURUQpIgotCWRlcGVuZHMgb24gSVNETl9DQVBJX01JRERMRVdBUkUgJiYgSVNETl9DQVBJX0NBUEkyMAotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIHByb3ZpZGVzIGEgc3BlY2lhbCBmaWxlIHN5c3RlbSwgc2ltaWxhciB0byAvZGV2L3B0cyB3aXRoCi0JICBkZXZpY2Ugbm9kZXMgZm9yIHRoZSBzcGVjaWFsIHR0eXMgZXN0YWJsaXNoZWQgYnkgdXNpbmcgdGhlCi0JICBtaWRkbGV3YXJlIGV4dGVuc2lvbiBhYm92ZS4KLQkgIFlvdSBubyBsb25nZXIgbmVlZCB0aGlzLCB1ZGV2IGZ1bGx5IHJlcGxhY2VzIGl0LiBUaGlzIGZlYXR1cmUgaXMKLQkgIHNjaGVkdWxlZCBmb3IgcmVtb3ZhbC4KLQotY29uZmlnIElTRE5fQ0FQSV9DQVBJRlMKLQl0cmlzdGF0ZQotCWRlcGVuZHMgb24gSVNETl9DQVBJX0NBUElGU19CT09MCi0JZGVmYXVsdCBJU0ROX0NBUElfQ0FQSTIwCi0KIGNvbmZpZyBJU0ROX0NBUElfQ0FQSURSVgogCXRyaXN0YXRlICJDQVBJMi4wIGNhcGlkcnYgaW50ZXJmYWNlIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBJU0ROX0k0TApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2NhcGkvTWFrZWZpbGUgYi9kcml2ZXJzL2lzZG4vY2FwaS9NYWtlZmlsZQppbmRleCA1NzEyM2UzLi40ZDViNGI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vY2FwaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lzZG4vY2FwaS9NYWtlZmlsZQpAQCAtNyw3ICs3LDYgQEAKIG9iai0kKENPTkZJR19JU0ROX0NBUEkpCQkJKz0ga2VybmVsY2FwaS5vCiBvYmotJChDT05GSUdfSVNETl9DQVBJX0NBUEkyMCkJCSs9IGNhcGkubyAKIG9iai0kKENPTkZJR19JU0ROX0NBUElfQ0FQSURSVikJCSs9IGNhcGlkcnYubwotb2JqLSQoQ09ORklHX0lTRE5fQ0FQSV9DQVBJRlMpCQkrPSBjYXBpZnMubwogCiAjIE11bHRpcGFydCBvYmplY3RzLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMgYi9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMKaW5kZXggMGQ3MDg4My4uZTQ0OTMzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGkuYwpAQCAtMzgsMTUgKzM4LDEwIEBACiAjaW5jbHVkZSA8bGludXgvaXNkbi9jYXBpdXRpbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lzZG4vY2FwaWNtZC5oPgogCi0jaW5jbHVkZSAiY2FwaWZzLmgiCi0KIE1PRFVMRV9ERVNDUklQVElPTigiQ0FQSTRMaW51eDogVXNlcnNwYWNlIC9kZXYvY2FwaTIwIGludGVyZmFjZSIpOwogTU9EVUxFX0FVVEhPUigiQ2Fyc3RlbiBQYWV0aCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0jdW5kZWYgX0RFQlVHX1RUWUZVTkNTCQkvKiBjYWxsIHRvIHR0eV9kcml2ZXIgKi8KLSN1bmRlZiBfREVCVUdfREFUQUZMT1cJCS8qIGRhdGEgZmxvdyAqLwotCiAvKiAtLS0tLS0tLSBkcml2ZXIgaW5mb3JtYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIERFRklORV9NVVRFWChjYXBpX211dGV4KTsKQEAgLTg1LDcgKzgwLDYgQEAKIAlzdHJ1Y3Qga3JlZiBrcmVmOwogCiAJdW5zaWduZWQgaW50ICAgICAgbWlub3I7Ci0Jc3RydWN0IGRlbnRyeSAqY2FwaWZzX2RlbnRyeTsKIAogCXN0cnVjdCBjYXBpMjBfYXBwbAkqYXA7CiAJdTMyCQkJbmNjaTsKQEAgLTMwMCwxNyArMjk0LDggQEAKIAogc3RhdGljIHZvaWQgY2FwaW5jY2lfYWxsb2NfbWlub3Ioc3RydWN0IGNhcGlkZXYgKmNkZXYsIHN0cnVjdCBjYXBpbmNjaSAqbnApCiB7Ci0Jc3RydWN0IGNhcGltaW5vciAqbXA7Ci0JZGV2X3QgZGV2aWNlOwotCi0JaWYgKCEoY2Rldi0+dXNlcmZsYWdzICYgQ0FQSUZMQUdfSElHSEpBQ0tJTkcpKQotCQlyZXR1cm47Ci0KLQltcCA9IG5wLT5taW5vcnAgPSBjYXBpbWlub3JfYWxsb2MoJmNkZXYtPmFwLCBucC0+bmNjaSk7Ci0JaWYgKG1wKSB7Ci0JCWRldmljZSA9IE1LREVWKGNhcGluY190dHlfZHJpdmVyLT5tYWpvciwgbXAtPm1pbm9yKTsKLQkJbXAtPmNhcGlmc19kZW50cnkgPSBjYXBpZnNfbmV3X25jY2kobXAtPm1pbm9yLCBkZXZpY2UpOwotCX0KKwlpZiAoY2Rldi0+dXNlcmZsYWdzICYgQ0FQSUZMQUdfSElHSEpBQ0tJTkcpCisJCW5wLT5taW5vcnAgPSBjYXBpbWlub3JfYWxsb2MoJmNkZXYtPmFwLCBucC0+bmNjaSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNhcGluY2NpX2ZyZWVfbWlub3Ioc3RydWN0IGNhcGluY2NpICpucCkKQEAgLTMxOSw4ICszMDQsNiBAQAogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAKIAlpZiAobXApIHsKLQkJY2FwaWZzX2ZyZWVfbmNjaShtcC0+Y2FwaWZzX2RlbnRyeSk7Ci0KIAkJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmbXAtPnBvcnQpOwogCQlpZiAodHR5KSB7CiAJCQl0dHlfdmhhbmd1cCh0dHkpOwpAQCAtNDMyLDkgKzQxNSw3IEBACiAKIAl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZtcC0+cG9ydCk7CiAJaWYgKCF0dHkpIHsKLSNpZmRlZiBfREVCVUdfREFUQUZMT1cKLQkJcHJpbnRrKEtFUk5fREVCVUcgImNhcGk6IGN1cnJlbnRseSBubyByZWNlaXZlclxuIik7Ci0jZW5kaWYKKwkJcHJfZGVidWcoImNhcGk6IGN1cnJlbnRseSBubyByZWNlaXZlclxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAJCkBAIC00NDcsMjMgKzQyOCwxNyBAQAogCX0KIAogCWlmIChsZC0+b3BzLT5yZWNlaXZlX2J1ZiA9PSBOVUxMKSB7Ci0jaWYgZGVmaW5lZChfREVCVUdfREFUQUZMT1cpIHx8IGRlZmluZWQoX0RFQlVHX1RUWUZVTkNTKQotCQlwcmludGsoS0VSTl9ERUJVRyAiY2FwaTogbGRpc2MgaGFzIG5vIHJlY2VpdmVfYnVmIGZ1bmN0aW9uXG4iKTsKLSNlbmRpZgorCQlwcl9kZWJ1ZygiY2FwaTogbGRpc2MgaGFzIG5vIHJlY2VpdmVfYnVmIGZ1bmN0aW9uXG4iKTsKIAkJLyogZmF0YWwgZXJyb3IsIGRvIG5vdCByZXF1ZXVlICovCiAJCWdvdG8gZnJlZV9za2I7CiAJfQogCWlmIChtcC0+dHR5aW5zdG9wKSB7Ci0jaWYgZGVmaW5lZChfREVCVUdfREFUQUZMT1cpIHx8IGRlZmluZWQoX0RFQlVHX1RUWUZVTkNTKQotCQlwcmludGsoS0VSTl9ERUJVRyAiY2FwaTogcmVjdiB0dHkgdGhyb3R0bGVkXG4iKTsKLSNlbmRpZgorCQlwcl9kZWJ1ZygiY2FwaTogcmVjdiB0dHkgdGhyb3R0bGVkXG4iKTsKIAkJZ290byBkZXJlZl9sZGlzYzsKIAl9CiAKIAlpZiAodHR5LT5yZWNlaXZlX3Jvb20gPCBkYXRhbGVuKSB7Ci0jaWYgZGVmaW5lZChfREVCVUdfREFUQUZMT1cpIHx8IGRlZmluZWQoX0RFQlVHX1RUWUZVTkNTKQotCQlwcmludGsoS0VSTl9ERUJVRyAiY2FwaTogbm8gcm9vbSBpbiB0dHlcbiIpOwotI2VuZGlmCisJCXByX2RlYnVnKCJjYXBpOiBubyByb29tIGluIHR0eVxuIik7CiAJCWdvdG8gZGVyZWZfbGRpc2M7CiAJfQogCkBAIC00NzksMTAgKzQ1NCw4IEBACiAKIAlpZiAoZXJyY29kZSA9PSBDQVBJX05PRVJST1IpIHsKIAkJc2tiX3B1bGwoc2tiLCBDQVBJTVNHX0xFTihza2ItPmRhdGEpKTsKLSNpZmRlZiBfREVCVUdfREFUQUZMT1cKLQkJcHJpbnRrKEtFUk5fREVCVUcgImNhcGk6IERBVEFfQjNfUkVTUCAldSBsZW49JWQgPT4gbGRpc2NcbiIsCi0JCQkJCWRhdGFoYW5kbGUsIHNrYi0+bGVuKTsKLSNlbmRpZgorCQlwcl9kZWJ1ZygiY2FwaTogREFUQV9CM19SRVNQICV1IGxlbj0lZCA9PiBsZGlzY1xuIiwKKwkJCSBkYXRhaGFuZGxlLCBza2ItPmxlbik7CiAJCWxkLT5vcHMtPnJlY2VpdmVfYnVmKHR0eSwgc2tiLT5kYXRhLCBOVUxMLCBza2ItPmxlbik7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjYXBpOiBzZW5kIERBVEFfQjNfUkVTUCBmYWlsZWQ9JXhcbiIsCkBAIC01MjksOSArNTAyLDcgQEAKIAkJcmV0dXJuOwogCiAJaWYgKG1wLT50dHlvdXRzdG9wKSB7Ci0jaWYgZGVmaW5lZChfREVCVUdfREFUQUZMT1cpIHx8IGRlZmluZWQoX0RFQlVHX1RUWUZVTkNTKQotCQlwcmludGsoS0VSTl9ERUJVRyAiY2FwaTogc2VuZDogdHR5IHN0b3BwZWRcbiIpOwotI2VuZGlmCisJCXByX2RlYnVnKCJjYXBpOiBzZW5kOiB0dHkgc3RvcHBlZFxuIik7CiAJCXR0eV9rcmVmX3B1dCh0dHkpOwogCQlyZXR1cm47CiAJfQpAQCAtNTczLDEwICs1NDQsOCBAQAogCQl9CiAJCWVycmNvZGUgPSBjYXBpMjBfcHV0X21lc3NhZ2UobXAtPmFwLCBza2IpOwogCQlpZiAoZXJyY29kZSA9PSBDQVBJX05PRVJST1IpIHsKLSNpZmRlZiBfREVCVUdfREFUQUZMT1cKLQkJCXByaW50ayhLRVJOX0RFQlVHICJjYXBpOiBEQVRBX0IzX1JFUSAldSBsZW49JXVcbiIsCi0JCQkJCQkJZGF0YWhhbmRsZSwgbGVuKTsKLSNlbmRpZgorCQkJcHJfZGVidWcoImNhcGk6IERBVEFfQjNfUkVRICV1IGxlbj0ldVxuIiwKKwkJCQkgZGF0YWhhbmRsZSwgbGVuKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWNhcGltaW5vcl9kZWxfYWNrKG1wLCBkYXRhaGFuZGxlKTsKQEAgLTY1MCwxMCArNjE5LDggQEAKIAl9CiAJaWYgKENBUElNU0dfU1VCQ09NTUFORChza2ItPmRhdGEpID09IENBUElfSU5EKSB7CiAJCWRhdGFoYW5kbGUgPSBDQVBJTVNHX1UxNihza2ItPmRhdGEsIENBUElNU0dfQkFTRUxFTis0KzQrMik7Ci0jaWZkZWYgX0RFQlVHX0RBVEFGTE9XCi0JCXByaW50ayhLRVJOX0RFQlVHICJjYXBpX3NpZ25hbDogREFUQV9CM19JTkQgJXUgbGVuPSVkXG4iLAotCQkJCWRhdGFoYW5kbGUsIHNrYi0+bGVuLUNBUElNU0dfTEVOKHNrYi0+ZGF0YSkpOwotI2VuZGlmCisJCXByX2RlYnVnKCJjYXBpX3NpZ25hbDogREFUQV9CM19JTkQgJXUgbGVuPSVkXG4iLAorCQkJIGRhdGFoYW5kbGUsIHNrYi0+bGVuLUNBUElNU0dfTEVOKHNrYi0+ZGF0YSkpOwogCQlza2JfcXVldWVfdGFpbCgmbXAtPmlucXVldWUsIHNrYik7CiAKIAkJaGFuZGxlX21pbm9yX3JlY3YobXApOwpAQCAtNjYxLDExICs2MjgsOSBAQAogCX0gZWxzZSBpZiAoQ0FQSU1TR19TVUJDT01NQU5EKHNrYi0+ZGF0YSkgPT0gQ0FQSV9DT05GKSB7CiAKIAkJZGF0YWhhbmRsZSA9IENBUElNU0dfVTE2KHNrYi0+ZGF0YSwgQ0FQSU1TR19CQVNFTEVOKzQpOwotI2lmZGVmIF9ERUJVR19EQVRBRkxPVwotCQlwcmludGsoS0VSTl9ERUJVRyAiY2FwaV9zaWduYWw6IERBVEFfQjNfQ09ORiAldSAweCV4XG4iLAotCQkJCWRhdGFoYW5kbGUsCi0JCQkJQ0FQSU1TR19VMTYoc2tiLT5kYXRhLCBDQVBJTVNHX0JBU0VMRU4rNCsyKSk7Ci0jZW5kaWYKKwkJcHJfZGVidWcoImNhcGlfc2lnbmFsOiBEQVRBX0IzX0NPTkYgJXUgMHgleFxuIiwKKwkJCSBkYXRhaGFuZGxlLAorCQkJIENBUElNU0dfVTE2KHNrYi0+ZGF0YSwgQ0FQSU1TR19CQVNFTEVOKzQrMikpOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJY2FwaW1pbm9yX2RlbF9hY2sobXAsIGRhdGFoYW5kbGUpOwogCQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZtcC0+cG9ydCk7CkBAIC0xMDk1LDkgKzEwNjAsNyBAQAogCXN0cnVjdCBjYXBpbWlub3IgKm1wID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0jaWZkZWYgX0RFQlVHX1RUWUZVTkNTCi0JcHJpbnRrKEtFUk5fREVCVUcgImNhcGluY190dHlfd3JpdGUoY291bnQ9JWQpXG4iLCBjb3VudCk7Ci0jZW5kaWYKKwlwcl9kZWJ1ZygiY2FwaW5jX3R0eV93cml0ZShjb3VudD0lZClcbiIsIGNvdW50KTsKIAogCXNwaW5fbG9ja19iaCgmbXAtPm91dGxvY2spOwogCXNrYiA9IG1wLT5vdXRza2I7CkBAIC0xMTMzLDkgKzEwOTYsNyBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IHJldCA9IDE7CiAKLSNpZmRlZiBfREVCVUdfVFRZRlVOQ1MKLQlwcmludGsoS0VSTl9ERUJVRyAiY2FwaW5jX3B1dF9jaGFyKCV1KVxuIiwgY2gpOwotI2VuZGlmCisJcHJfZGVidWcoImNhcGluY19wdXRfY2hhcigldSlcbiIsIGNoKTsKIAogCXNwaW5fbG9ja19iaCgmbXAtPm91dGxvY2spOwogCXNrYiA9IG1wLT5vdXRza2I7CkBAIC0xMTc0LDkgKzExMzUsNyBAQAogCXN0cnVjdCBjYXBpbWlub3IgKm1wID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0jaWZkZWYgX0RFQlVHX1RUWUZVTkNTCi0JcHJpbnRrKEtFUk5fREVCVUcgImNhcGluY190dHlfZmx1c2hfY2hhcnNcbiIpOwotI2VuZGlmCisJcHJfZGVidWcoImNhcGluY190dHlfZmx1c2hfY2hhcnNcbiIpOwogCiAJc3Bpbl9sb2NrX2JoKCZtcC0+b3V0bG9jayk7CiAJc2tiID0gbXAtPm91dHNrYjsKQEAgLTEyMDAsOSArMTE1OSw3IEBACiAKIAlyb29tID0gQ0FQSU5DX01BWF9TRU5EUVVFVUUtc2tiX3F1ZXVlX2xlbigmbXAtPm91dHF1ZXVlKTsKIAlyb29tICo9IENBUElfTUFYX0JMS1NJWkU7Ci0jaWZkZWYgX0RFQlVHX1RUWUZVTkNTCi0JcHJpbnRrKEtFUk5fREVCVUcgImNhcGluY190dHlfd3JpdGVfcm9vbSA9ICVkXG4iLCByb29tKTsKLSNlbmRpZgorCXByX2RlYnVnKCJjYXBpbmNfdHR5X3dyaXRlX3Jvb20gPSAlZFxuIiwgcm9vbSk7CiAJcmV0dXJuIHJvb207CiB9CiAKQEAgLTEyMTAsMTIgKzExNjcsMTAgQEAKIHsKIAlzdHJ1Y3QgY2FwaW1pbm9yICptcCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAKLSNpZmRlZiBfREVCVUdfVFRZRlVOQ1MKLQlwcmludGsoS0VSTl9ERUJVRyAiY2FwaW5jX3R0eV9jaGFyc19pbl9idWZmZXIgPSAlZCBuYWNrPSVkIHNxPSVkIHJxPSVkXG4iLAotCQkJbXAtPm91dGJ5dGVzLCBtcC0+bmFjaywKLQkJCXNrYl9xdWV1ZV9sZW4oJm1wLT5vdXRxdWV1ZSksCi0JCQlza2JfcXVldWVfbGVuKCZtcC0+aW5xdWV1ZSkpOwotI2VuZGlmCisJcHJfZGVidWcoImNhcGluY190dHlfY2hhcnNfaW5fYnVmZmVyID0gJWQgbmFjaz0lZCBzcT0lZCBycT0lZFxuIiwKKwkJIG1wLT5vdXRieXRlcywgbXAtPm5hY2ssCisJCSBza2JfcXVldWVfbGVuKCZtcC0+b3V0cXVldWUpLAorCQkgc2tiX3F1ZXVlX2xlbigmbXAtPmlucXVldWUpKTsKIAlyZXR1cm4gbXAtPm91dGJ5dGVzOwogfQogCkBAIC0xMjI3LDE3ICsxMTgyLDEzIEBACiAKIHN0YXRpYyB2b2lkIGNhcGluY190dHlfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGt0ZXJtaW9zICogb2xkKQogewotI2lmZGVmIF9ERUJVR19UVFlGVU5DUwotCXByaW50ayhLRVJOX0RFQlVHICJjYXBpbmNfdHR5X3NldF90ZXJtaW9zXG4iKTsKLSNlbmRpZgorCXByX2RlYnVnKCJjYXBpbmNfdHR5X3NldF90ZXJtaW9zXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgY2FwaW5jX3R0eV90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCBjYXBpbWlub3IgKm1wID0gdHR5LT5kcml2ZXJfZGF0YTsKLSNpZmRlZiBfREVCVUdfVFRZRlVOQ1MKLQlwcmludGsoS0VSTl9ERUJVRyAiY2FwaW5jX3R0eV90aHJvdHRsZVxuIik7Ci0jZW5kaWYKKwlwcl9kZWJ1ZygiY2FwaW5jX3R0eV90aHJvdHRsZVxuIik7CiAJbXAtPnR0eWluc3RvcCA9IDE7CiB9CiAKQEAgLTEyNDUsOSArMTE5Niw3IEBACiB7CiAJc3RydWN0IGNhcGltaW5vciAqbXAgPSB0dHktPmRyaXZlcl9kYXRhOwogCi0jaWZkZWYgX0RFQlVHX1RUWUZVTkNTCi0JcHJpbnRrKEtFUk5fREVCVUcgImNhcGluY190dHlfdW50aHJvdHRsZVxuIik7Ci0jZW5kaWYKKwlwcl9kZWJ1ZygiY2FwaW5jX3R0eV91bnRocm90dGxlXG4iKTsKIAltcC0+dHR5aW5zdG9wID0gMDsKIAloYW5kbGVfbWlub3JfcmVjdihtcCk7CiB9CkBAIC0xMjU2LDkgKzEyMDUsNyBAQAogewogCXN0cnVjdCBjYXBpbWlub3IgKm1wID0gdHR5LT5kcml2ZXJfZGF0YTsKIAotI2lmZGVmIF9ERUJVR19UVFlGVU5DUwotCXByaW50ayhLRVJOX0RFQlVHICJjYXBpbmNfdHR5X3N0b3BcbiIpOwotI2VuZGlmCisJcHJfZGVidWcoImNhcGluY190dHlfc3RvcFxuIik7CiAJbXAtPnR0eW91dHN0b3AgPSAxOwogfQogCkBAIC0xMjY2LDkgKzEyMTMsNyBAQAogewogCXN0cnVjdCBjYXBpbWlub3IgKm1wID0gdHR5LT5kcml2ZXJfZGF0YTsKIAotI2lmZGVmIF9ERUJVR19UVFlGVU5DUwotCXByaW50ayhLRVJOX0RFQlVHICJjYXBpbmNfdHR5X3N0YXJ0XG4iKTsKLSNlbmRpZgorCXByX2RlYnVnKCJjYXBpbmNfdHR5X3N0YXJ0XG4iKTsKIAltcC0+dHR5b3V0c3RvcCA9IDA7CiAJaGFuZGxlX21pbm9yX3NlbmQobXApOwogfQpAQCAtMTI3NywzOSArMTIyMiwyOSBAQAogewogCXN0cnVjdCBjYXBpbWlub3IgKm1wID0gdHR5LT5kcml2ZXJfZGF0YTsKIAotI2lmZGVmIF9ERUJVR19UVFlGVU5DUwotCXByaW50ayhLRVJOX0RFQlVHICJjYXBpbmNfdHR5X2hhbmd1cFxuIik7Ci0jZW5kaWYKKwlwcl9kZWJ1ZygiY2FwaW5jX3R0eV9oYW5ndXBcbiIpOwogCXR0eV9wb3J0X2hhbmd1cCgmbXAtPnBvcnQpOwogfQogCiBzdGF0aWMgaW50IGNhcGluY190dHlfYnJlYWtfY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBzdGF0ZSkKIHsKLSNpZmRlZiBfREVCVUdfVFRZRlVOQ1MKLQlwcmludGsoS0VSTl9ERUJVRyAiY2FwaW5jX3R0eV9icmVha19jdGwoJWQpXG4iLCBzdGF0ZSk7Ci0jZW5kaWYKKwlwcl9kZWJ1ZygiY2FwaW5jX3R0eV9icmVha19jdGwoJWQpXG4iLCBzdGF0ZSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGNhcGluY190dHlfZmx1c2hfYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0jaWZkZWYgX0RFQlVHX1RUWUZVTkNTCi0JcHJpbnRrKEtFUk5fREVCVUcgImNhcGluY190dHlfZmx1c2hfYnVmZmVyXG4iKTsKLSNlbmRpZgorCXByX2RlYnVnKCJjYXBpbmNfdHR5X2ZsdXNoX2J1ZmZlclxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIGNhcGluY190dHlfc2V0X2xkaXNjKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0jaWZkZWYgX0RFQlVHX1RUWUZVTkNTCi0JcHJpbnRrKEtFUk5fREVCVUcgImNhcGluY190dHlfc2V0X2xkaXNjXG4iKTsKLSNlbmRpZgorCXByX2RlYnVnKCJjYXBpbmNfdHR5X3NldF9sZGlzY1xuIik7CiB9CiAKIHN0YXRpYyB2b2lkIGNhcGluY190dHlfc2VuZF94Y2hhcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjaGFyIGNoKQogewotI2lmZGVmIF9ERUJVR19UVFlGVU5DUwotCXByaW50ayhLRVJOX0RFQlVHICJjYXBpbmNfdHR5X3NlbmRfeGNoYXIoJWQpXG4iLCBjaCk7Ci0jZW5kaWYKKwlwcl9kZWJ1ZygiY2FwaW5jX3R0eV9zZW5kX3hjaGFyKCVkKVxuIiwgY2gpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHR0eV9vcGVyYXRpb25zIGNhcGluY19vcHMgPSB7CkBAIC0xNTE0LDEwICsxNDQ5LDggQEAKIAogCXByb2NfaW5pdCgpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfSVNETl9DQVBJX0NBUElGUykgfHwgZGVmaW5lZChDT05GSUdfSVNETl9DQVBJX0NBUElGU19NT0RVTEUpCi0gICAgICAgIGNvbXBpbGVpbmZvID0gIiAobWlkZGxld2FyZStjYXBpZnMpIjsKLSNlbGlmIGRlZmluZWQoQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFKQotICAgICAgICBjb21waWxlaW5mbyA9ICIgKG5vIGNhcGlmcykiOworI2lmZGVmIENPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRQorICAgICAgICBjb21waWxlaW5mbyA9ICIgKG1pZGRsZXdhcmUpIjsKICNlbHNlCiAgICAgICAgIGNvbXBpbGVpbmZvID0gIiAobm8gbWlkZGxld2FyZSkiOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpZnMuYyBiL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGlmcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGZhZWQ3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGlmcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjM5ICswLDAgQEAKLS8qICRJZDogY2FwaWZzLmMsdiAxLjEuMi4zIDIwMDQvMDEvMTYgMjE6MDk6MjYga2VpbCBFeHAgJAotICogCi0gKiBDb3B5cmlnaHQgMjAwMCBieSBDYXJzdGVuIFBhZXRoIDxjYWxsZUBjYWxsZS5kZT4KLSAqCi0gKiBIZWF2aWx5IGJhc2VkIG9uIGRldnB0cyBmaWxlc3lzdGVtIGZyb20gSC4gUGV0ZXIgQW52aW4KLSAqIAotICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcwotICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbW91bnQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgkvKiBjdXJyZW50ICovCi0KLSNpbmNsdWRlICJjYXBpZnMuaCIKLQotTU9EVUxFX0RFU0NSSVBUSU9OKCJDQVBJNExpbnV4OiAvZGV2L2NhcGkvIGZpbGVzeXN0ZW0iKTsKLU1PRFVMRV9BVVRIT1IoIkNhcnN0ZW4gUGFldGgiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNkZWZpbmUgQ0FQSUZTX1NVUEVSX01BR0lDICgoJ0MnPDw4KXwnTicpCi0KLXN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKmNhcGlmc19tbnQ7Ci1zdGF0aWMgaW50IGNhcGlmc19tbnRfY291bnQ7Ci0KLXN0YXRpYyBzdHJ1Y3QgewotCWludCBzZXR1aWQ7Ci0JaW50IHNldGdpZDsKLQl1aWRfdCAgIHVpZDsKLQlnaWRfdCAgIGdpZDsKLQl1bW9kZV90IG1vZGU7Ci19IGNvbmZpZyA9IHsubW9kZSA9IDA2MDB9OwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIGludCBjYXBpZnNfcmVtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIGludCAqZmxhZ3MsIGNoYXIgKmRhdGEpCi17Ci0JaW50IHNldHVpZCA9IDA7Ci0JaW50IHNldGdpZCA9IDA7Ci0JdWlkX3QgdWlkID0gMDsKLQlnaWRfdCBnaWQgPSAwOwotCXVtb2RlX3QgbW9kZSA9IDA2MDA7Ci0JY2hhciAqdGhpc19jaGFyOwotCWNoYXIgKm5ld19vcHQgPSBrc3RyZHVwKGRhdGEsIEdGUF9LRVJORUwpOwotCi0JdGhpc19jaGFyID0gTlVMTDsKLQl3aGlsZSAoKHRoaXNfY2hhciA9IHN0cnNlcCgmZGF0YSwgIiwiKSkgIT0gTlVMTCkgewotCQlpbnQgbjsKLQkJY2hhciBkdW1teTsKLQkJaWYgKCEqdGhpc19jaGFyKQotCQkJY29udGludWU7Ci0JCWlmIChzc2NhbmYodGhpc19jaGFyLCAidWlkPSVpJWMiLCAmbiwgJmR1bW15KSA9PSAxKSB7Ci0JCQlzZXR1aWQgPSAxOwotCQkJdWlkID0gbjsKLQkJfSBlbHNlIGlmIChzc2NhbmYodGhpc19jaGFyLCAiZ2lkPSVpJWMiLCAmbiwgJmR1bW15KSA9PSAxKSB7Ci0JCQlzZXRnaWQgPSAxOwotCQkJZ2lkID0gbjsKLQkJfSBlbHNlIGlmIChzc2NhbmYodGhpc19jaGFyLCAibW9kZT0lbyVjIiwgJm4sICZkdW1teSkgPT0gMSkKLQkJCW1vZGUgPSBuICYgflNfSUZNVDsKLQkJZWxzZSB7Ci0JCQlrZnJlZShuZXdfb3B0KTsKLQkJCXByaW50aygiY2FwaWZzOiBjYWxsZWQgd2l0aCBib2d1cyBvcHRpb25zXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQotCi0JbXV0ZXhfbG9jaygmcy0+c19yb290LT5kX2lub2RlLT5pX211dGV4KTsKLQotCXJlcGxhY2VfbW91bnRfb3B0aW9ucyhzLCBuZXdfb3B0KTsKLQljb25maWcuc2V0dWlkICA9IHNldHVpZDsKLQljb25maWcuc2V0Z2lkICA9IHNldGdpZDsKLQljb25maWcudWlkICAgICA9IHVpZDsKLQljb25maWcuZ2lkICAgICA9IGdpZDsKLQljb25maWcubW9kZSAgICA9IG1vZGU7Ci0KLQltdXRleF91bmxvY2soJnMtPnNfcm9vdC0+ZF9pbm9kZS0+aV9tdXRleCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGNhcGlmc19zb3BzID0KLXsKLQkuc3RhdGZzCQk9IHNpbXBsZV9zdGF0ZnMsCi0JLnJlbW91bnRfZnMJPSBjYXBpZnNfcmVtb3VudCwKLQkuc2hvd19vcHRpb25zCT0gZ2VuZXJpY19zaG93X29wdGlvbnMsCi19OwotCi0KLXN0YXRpYyBpbnQKLWNhcGlmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgdm9pZCAqZGF0YSwgaW50IHNpbGVudCkKLXsKLQlzdHJ1Y3QgaW5vZGUgKiBpbm9kZTsKLQotCXMtPnNfYmxvY2tzaXplID0gMTAyNDsKLQlzLT5zX2Jsb2Nrc2l6ZV9iaXRzID0gMTA7Ci0Jcy0+c19tYWdpYyA9IENBUElGU19TVVBFUl9NQUdJQzsKLQlzLT5zX29wID0gJmNhcGlmc19zb3BzOwotCXMtPnNfdGltZV9ncmFuID0gMTsKLQotCWlub2RlID0gbmV3X2lub2RlKHMpOwotCWlmICghaW5vZGUpCi0JCWdvdG8gZmFpbDsKLQlpbm9kZS0+aV9pbm8gPSAxOwotCWlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKLQlpbm9kZS0+aV9tb2RlID0gU19JRkRJUiB8IFNfSVJVR08gfCBTX0lYVUdPIHwgU19JV1VTUjsKLQlpbm9kZS0+aV9vcCA9ICZzaW1wbGVfZGlyX2lub2RlX29wZXJhdGlvbnM7Ci0JaW5vZGUtPmlfZm9wID0gJnNpbXBsZV9kaXJfb3BlcmF0aW9uczsKLQlpbm9kZS0+aV9ubGluayA9IDI7Ci0KLQlzLT5zX3Jvb3QgPSBkX2FsbG9jX3Jvb3QoaW5vZGUpOwotCWlmIChzLT5zX3Jvb3QpCi0JCXJldHVybiAwOwotCQotCXByaW50aygiY2FwaWZzOiBnZXQgcm9vdCBkZW50cnkgZmFpbGVkXG4iKTsKLQlpcHV0KGlub2RlKTsKLWZhaWw6Ci0JcmV0dXJuIC1FTk9NRU07Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpjYXBpZnNfbW91bnQoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsCi0JaW50IGZsYWdzLCBjb25zdCBjaGFyICpkZXZfbmFtZSwgdm9pZCAqZGF0YSkKLXsKLQlyZXR1cm4gbW91bnRfc2luZ2xlKGZzX3R5cGUsIGZsYWdzLCBkYXRhLCBjYXBpZnNfZmlsbF9zdXBlcik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBjYXBpZnNfZnNfdHlwZSA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCT0gImNhcGlmcyIsCi0JLm1vdW50CQk9IGNhcGlmc19tb3VudCwKLQkua2lsbF9zYgk9IGtpbGxfYW5vbl9zdXBlciwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpuZXdfbmNjaSh1bnNpZ25lZCBpbnQgbnVtYmVyLCBkZXZfdCBkZXZpY2UpCi17Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzID0gY2FwaWZzX21udC0+bW50X3NiOwotCXN0cnVjdCBkZW50cnkgKnJvb3QgPSBzLT5zX3Jvb3Q7Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5OwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0JY2hhciBuYW1lWzEwXTsKLQlpbnQgbmFtZWxlbjsKLQotCW11dGV4X2xvY2soJnJvb3QtPmRfaW5vZGUtPmlfbXV0ZXgpOwotCi0JbmFtZWxlbiA9IHNwcmludGYobmFtZSwgIiVkIiwgbnVtYmVyKTsKLQlkZW50cnkgPSBsb29rdXBfb25lX2xlbihuYW1lLCByb290LCBuYW1lbGVuKTsKLQlpZiAoSVNfRVJSKGRlbnRyeSkpIHsKLQkJZGVudHJ5ID0gTlVMTDsKLQkJZ290byB1bmxvY2tfb3V0OwotCX0KLQotCWlmIChkZW50cnktPmRfaW5vZGUpIHsKLQkJZHB1dChkZW50cnkpOwotCQlkZW50cnkgPSBOVUxMOwotCQlnb3RvIHVubG9ja19vdXQ7Ci0JfQotCi0JaW5vZGUgPSBuZXdfaW5vZGUocyk7Ci0JaWYgKCFpbm9kZSkgewotCQlkcHV0KGRlbnRyeSk7Ci0JCWRlbnRyeSA9IE5VTEw7Ci0JCWdvdG8gdW5sb2NrX291dDsKLQl9Ci0KLQkvKiBjb25maWcgY29udGVudHMgaXMgcHJvdGVjdGVkIGJ5IHJvb3QncyBpX211dGV4ICovCi0JaW5vZGUtPmlfdWlkID0gY29uZmlnLnNldHVpZCA/IGNvbmZpZy51aWQgOiBjdXJyZW50X2ZzdWlkKCk7Ci0JaW5vZGUtPmlfZ2lkID0gY29uZmlnLnNldGdpZCA/IGNvbmZpZy5naWQgOiBjdXJyZW50X2ZzZ2lkKCk7Ci0JaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwotCWlub2RlLT5pX2lubyA9IG51bWJlciArIDI7Ci0JaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBTX0lGQ0hSfGNvbmZpZy5tb2RlLCBkZXZpY2UpOwotCi0JZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKLQlkZ2V0KGRlbnRyeSk7Ci0KLXVubG9ja19vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZyb290LT5kX2lub2RlLT5pX211dGV4KTsKLQotCXJldHVybiBkZW50cnk7Ci19Ci0KLXN0cnVjdCBkZW50cnkgKmNhcGlmc19uZXdfbmNjaSh1bnNpZ25lZCBpbnQgbnVtYmVyLCBkZXZfdCBkZXZpY2UpCi17Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5OwotCi0JaWYgKHNpbXBsZV9waW5fZnMoJmNhcGlmc19mc190eXBlLCAmY2FwaWZzX21udCwgJmNhcGlmc19tbnRfY291bnQpIDwgMCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlkZW50cnkgPSBuZXdfbmNjaShudW1iZXIsIGRldmljZSk7Ci0JaWYgKCFkZW50cnkpCi0JCXNpbXBsZV9yZWxlYXNlX2ZzKCZjYXBpZnNfbW50LCAmY2FwaWZzX21udF9jb3VudCk7Ci0KLQlyZXR1cm4gZGVudHJ5OwotfQotCi12b2lkIGNhcGlmc19mcmVlX25jY2koc3RydWN0IGRlbnRyeSAqZGVudHJ5KQotewotCXN0cnVjdCBkZW50cnkgKnJvb3QgPSBjYXBpZnNfbW50LT5tbnRfc2ItPnNfcm9vdDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCi0JaWYgKCFkZW50cnkpCi0JCXJldHVybjsKLQotCW11dGV4X2xvY2soJnJvb3QtPmRfaW5vZGUtPmlfbXV0ZXgpOwotCi0JaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7Ci0JaWYgKGlub2RlKSB7Ci0JCWRyb3BfbmxpbmsoaW5vZGUpOwotCQlkX2RlbGV0ZShkZW50cnkpOwotCQlkcHV0KGRlbnRyeSk7Ci0JfQotCWRwdXQoZGVudHJ5KTsKLQotCW11dGV4X3VubG9jaygmcm9vdC0+ZF9pbm9kZS0+aV9tdXRleCk7Ci0KLQlzaW1wbGVfcmVsZWFzZV9mcygmY2FwaWZzX21udCwgJmNhcGlmc19tbnRfY291bnQpOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBjYXBpZnNfaW5pdCh2b2lkKQotewotCXJldHVybiByZWdpc3Rlcl9maWxlc3lzdGVtKCZjYXBpZnNfZnNfdHlwZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBjYXBpZnNfZXhpdCh2b2lkKQotewotCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmY2FwaWZzX2ZzX3R5cGUpOwotfQotCi1FWFBPUlRfU1lNQk9MKGNhcGlmc19uZXdfbmNjaSk7Ci1FWFBPUlRfU1lNQk9MKGNhcGlmc19mcmVlX25jY2kpOwotCi1tb2R1bGVfaW5pdChjYXBpZnNfaW5pdCk7Ci1tb2R1bGVfZXhpdChjYXBpZnNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpZnMuaCBiL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGlmcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTkzZDExLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGlmcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyogJElkOiBjYXBpZnMuaCx2IDEuMS4yLjIgMjAwNC8wMS8xNiAyMTowOToyNiBrZWlsIEV4cCAkCi0gKiAKLSAqIENvcHlyaWdodCAyMDAwIGJ5IENhcnN0ZW4gUGFldGggPGNhbGxlQGNhbGxlLmRlPgotICoKLSAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9kY2FjaGUuaD4KLQotI2lmIGRlZmluZWQoQ09ORklHX0lTRE5fQ0FQSV9DQVBJRlMpIHx8IGRlZmluZWQoQ09ORklHX0lTRE5fQ0FQSV9DQVBJRlNfTU9EVUxFKQotCi1zdHJ1Y3QgZGVudHJ5ICpjYXBpZnNfbmV3X25jY2kodW5zaWduZWQgaW50IG51bSwgZGV2X3QgZGV2aWNlKTsKLXZvaWQgY2FwaWZzX2ZyZWVfbmNjaShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwotCi0jZWxzZQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkZW50cnkgKmNhcGlmc19uZXdfbmNjaSh1bnNpZ25lZCBpbnQgbnVtLCBkZXZfdCBkZXZpY2UpCi17Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjYXBpZnNfZnJlZV9uY2NpKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLXsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9iYXMtZ2lnYXNldC5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvYmFzLWdpZ2FzZXQuYwppbmRleCA4YTNjNWNmLi4zOTEzZjQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9iYXMtZ2lnYXNldC5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2Jhcy1naWdhc2V0LmMKQEAgLTExNTcsNyArMTE1Nyw2IEBACiAJc3RydWN0IHVyYiAqdXJiOwogCWludCBzdGF0dXM7CiAJc3RydWN0IHVzYl9pc29fcGFja2V0X2Rlc2NyaXB0b3IgKmlmZDsKLQlpbnQgb2Zmc2V0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTEyMjUsNyArMTIyNCw2IEBACiAJCQkgKiAgIHN1Y2Nlc3NmdWxseSBzZW50CiAJCQkgKiAtIGFsbCBmb2xsb3dpbmcgZnJhbWVzIGFyZSBub3Qgc2VudCBhdCBhbGwKIAkJCSAqLwotCQkJb2Zmc2V0ID0gZG9uZS0+bGltaXQ7CS8qIGRlZmF1bHQgKG5vIGVycm9yKSAqLwogCQkJZm9yIChpID0gMDsgaSA8IEJBU19OVU1GUkFNRVM7IGkrKykgewogCQkJCWlmZCA9ICZ1cmItPmlzb19mcmFtZV9kZXNjW2ldOwogCQkJCWlmIChpZmQtPnN0YXR1cyB8fApAQCAtMTIzNSw5ICsxMjMzLDYgQEAKIAkJCQkJCSBpLCBpZmQtPmFjdHVhbF9sZW5ndGgsCiAJCQkJCQkgaWZkLT5sZW5ndGgsCiAJCQkJCQkgZ2V0X3VzYl9zdGF0bXNnKGlmZC0+c3RhdHVzKSk7Ci0JCQkJCW9mZnNldCA9IChpZmQtPm9mZnNldCArCi0JCQkJCQkgIGlmZC0+YWN0dWFsX2xlbmd0aCkKLQkJCQkJCSAlIEJBU19PVVRCVUZTSVpFOwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9ldi1sYXllci5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvZXYtbGF5ZXIuYwppbmRleCBhMTQxODc2Li5iYTc0NjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9ldi1sYXllci5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2V2LWxheWVyLmMKQEAgLTM5MCwxMiArMzkwLDEyIEBACiAgKi8KIHN0YXRpYyBpbnQgY2lkX29mX3Jlc3BvbnNlKGNoYXIgKnMpCiB7Ci0JdW5zaWduZWQgbG9uZyBjaWQ7CisJaW50IGNpZDsKIAlpbnQgcmM7CiAKIAlpZiAoc1stMV0gIT0gJzsnKQogCQlyZXR1cm4gMDsJLyogbm8gQ0lEIHNlcGFyYXRvciAqLwotCXJjID0gc3RyaWN0X3N0cnRvdWwocywgMTAsICZjaWQpOworCXJjID0ga3N0cnRvaW50KHMsIDEwLCAmY2lkKTsKIAlpZiAocmMpCiAJCXJldHVybiAwOwkvKiBDSUQgbm90IG51bWVyaWMgKi8KIAlpZiAoY2lkIDwgMSB8fCBjaWQgPiA2NTUzNSkKQEAgLTU2NiwyNyArNTY2LDE5IEBACiAJCWNhc2UgUlRfWkNBVToKIAkJCWV2ZW50LT5wYXJhbWV0ZXIgPSAtMTsKIAkJCWlmIChjdXJhcmcgKyAxIDwgcGFyYW1zKSB7Ci0JCQkJdW5zaWduZWQgbG9uZyB0eXBlLCB2YWx1ZTsKKwkJCQl1OCB0eXBlLCB2YWx1ZTsKIAotCQkJCWkgPSBzdHJpY3Rfc3RydG91bChhcmd2W2N1cmFyZysrXSwgMTYsICZ0eXBlKTsKLQkJCQlqID0gc3RyaWN0X3N0cnRvdWwoYXJndltjdXJhcmcrK10sIDE2LCAmdmFsdWUpOwotCi0JCQkJaWYgKGkgPT0gMCAmJiB0eXBlIDwgMjU2ICYmCi0JCQkJICAgIGogPT0gMCAmJiB2YWx1ZSA8IDI1NikKKwkJCQlpID0ga3N0cnRvdTgoYXJndltjdXJhcmcrK10sIDE2LCAmdHlwZSk7CisJCQkJaiA9IGtzdHJ0b3U4KGFyZ3ZbY3VyYXJnKytdLCAxNiwgJnZhbHVlKTsKKwkJCQlpZiAoaSA9PSAwICYmIGogPT0gMCkKIAkJCQkJZXZlbnQtPnBhcmFtZXRlciA9ICh0eXBlIDw8IDgpIHwgdmFsdWU7CiAJCQl9IGVsc2UKIAkJCQljdXJhcmcgPSBwYXJhbXMgLSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgUlRfTlVNQkVSOgotCQkJZXZlbnQtPnBhcmFtZXRlciA9IC0xOwotCQkJaWYgKGN1cmFyZyA8IHBhcmFtcykgewotCQkJCXVuc2lnbmVkIGxvbmcgcmVzOwotCQkJCWludCByYzsKLQotCQkJCXJjID0gc3RyaWN0X3N0cnRvdWwoYXJndltjdXJhcmcrK10sIDEwLCAmcmVzKTsKLQkJCQlpZiAocmMgPT0gMCkKLQkJCQkJZXZlbnQtPnBhcmFtZXRlciA9IHJlczsKLQkJCX0KKwkJCWlmIChjdXJhcmcgPj0gcGFyYW1zIHx8CisJCQkgICAga3N0cnRvaW50KGFyZ3ZbY3VyYXJnKytdLCAxMCwgJmV2ZW50LT5wYXJhbWV0ZXIpKQorCQkJCWV2ZW50LT5wYXJhbWV0ZXIgPSAtMTsKIAkJCWdpZ19kYmcoREVCVUdfRVZFTlQsICJwYXJhbWV0ZXI9PSVkIiwgZXZlbnQtPnBhcmFtZXRlcik7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvc2VyLWdpZ2FzZXQuYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L3Nlci1naWdhc2V0LmMKaW5kZXggODZhNWM0Zi4uMWQ0NGQ0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvc2VyLWdpZ2FzZXQuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9zZXItZ2lnYXNldC5jCkBAIC02NzQsNyArNjc0LDcgQEAKICAqCWNmbGFncwlidWZmZXIgY29udGFpbmluZyBlcnJvciBmbGFncyBmb3IgcmVjZWl2ZWQgY2hhcmFjdGVycyAoaWdub3JlZCkKICAqCWNvdW50CW51bWJlciBvZiByZWNlaXZlZCBjaGFyYWN0ZXJzCiAgKi8KLXN0YXRpYyB2b2lkCitzdGF0aWMgdW5zaWduZWQgaW50CiBnaWdhc2V0X3R0eV9yZWNlaXZlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKIAkJICAgIGNoYXIgKmNmbGFncywgaW50IGNvdW50KQogewpAQCAtNjgzLDEyICs2ODMsMTIgQEAKIAlzdHJ1Y3QgaW5idWZfdCAqaW5idWY7CiAKIAlpZiAoIWNzKQotCQlyZXR1cm47CisJCXJldHVybiAtRU5PREVWOwogCWluYnVmID0gY3MtPmluYnVmOwogCWlmICghaW5idWYpIHsKIAkJZGV2X2Vycihjcy0+ZGV2LCAiJXM6IG5vIGluYnVmXG4iLCBfX2Z1bmNfXyk7CiAJCWNzX3B1dChjcyk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJdGFpbCA9IGluYnVmLT50YWlsOwpAQCAtNzI1LDYgKzcyNSw4IEBACiAJZ2lnX2RiZyhERUJVR19JTlRSLCAiJXMtLT5CSCIsIF9fZnVuY19fKTsKIAlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGNzKTsKIAljc19wdXQoY3MpOworCisJcmV0dXJuIGNvdW50OwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RlYnVnLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGVidWcuYwppbmRleCAzNjI2NDAxLi43YTk4OTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGVidWcuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGVidWcuYwpAQCAtODYxLDcgKzg2MSw3IEBACiB2b2lkIGRpdmFfbW50X2FkZF94ZGlfYWRhcHRlciAoY29uc3QgREVTQ1JJUFRPUiogZCkgewogICBkaXZhX29zX3NwaW5fbG9ja19tYWdpY190IG9sZF9pcnFsLCBvbGRfaXJxbDE7CiAgIGR3b3JkIHNlYywgdXNlYywgbG9naWNhbCwgc2VyaWFsLCBvcmdfbWFzazsKLSAgaW50IGlkLCBiZXN0X2lkID0gMCwgZnJlZV9pZCA9IC0xOworICBpbnQgaWQsIGZyZWVfaWQgPSAtMTsKICAgY2hhciB0bXBbMTI4XTsKICAgZGl2YV9kYmdfZW50cnlfaGVhZF90KiBwbXNnID0gTlVMTDsKICAgaW50IGxlbjsKQEAgLTkwNiw3ICs5MDYsNiBAQAogICAgICAgICBhbmQgc2xvdCBpcyBzdGlsbCBmcmVlIC0gcmV1c2UgaXQKICAgICAgICAgKi8KICAgICAgIGZyZWVfaWQgPSBpZDsKLSAgICAgIGJlc3RfaWQgPSAxOwogICAgICAgYnJlYWs7CiAgICAgfQogICB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vbWVzc2FnZS5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL21lc3NhZ2UuYwppbmRleCA4YzVjNTYzLi5hMzM5NTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vbWVzc2FnZS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tZXNzYWdlLmMKQEAgLTExOTgsNyArMTE5OCw2IEBACiAgIHdvcmQgY2g7CiAgIHdvcmQgaTsKICAgd29yZCBJbmZvOwotICB3b3JkIENJUDsKICAgYnl0ZSBMaW5rTGF5ZXI7CiAgIEFQSV9QQVJTRSAqIGFpOwogICBBUElfUEFSU0UgKiBicDsKQEAgLTEzNDAsNyArMTMzOSw2IEBACiAgICAgICAgIGFkZF9zKHBsY2ksQkMsJnBhcm1zWzZdKTsKICAgICAgICAgYWRkX3MocGxjaSxMTEMsJnBhcm1zWzddKTsKICAgICAgICAgYWRkX3MocGxjaSxITEMsJnBhcm1zWzhdKTsKLSAgICAgICAgQ0lQID0gR0VUX1dPUkQocGFybXNbMF0uaW5mbyk7CiAgICAgICAgIGlmIChhLT5JbmZvX01hc2tbYXBwbC0+SWQtMV0gJiAweDIwMCkKICAgICAgICAgewogICAgICAgICAgIC8qIGVhcmx5IEIzIGNvbm5lY3QgKENJUCBtYXNrIGJpdCA5KSBubyByZWxlYXNlIGFmdGVyIGEgZGlzYyAqLwpAQCAtNDgzMCw3ICs0ODI4LDYgQEAKICAgZHdvcmQgeF9JZDsKICAgZHdvcmQgSWQ7CiAgIGR3b3JkIHJJZDsKLSAgd29yZCBOdW1iZXIgPSAwOwogICB3b3JkIGk7CiAgIHdvcmQgY2lwOwogICBkd29yZCBjaXBfbWFzazsKQEAgLTUxMDYsNyArNTEwMyw3IEBACiAgICAgfQogICB9CiAKLSAgaWYocGxjaS0+YXBwbCkgTnVtYmVyID0gcGxjaS0+YXBwbC0+TnVtYmVyKys7CisgIGlmKHBsY2ktPmFwcGwpIHBsY2ktPmFwcGwtPk51bWJlcisrOwogCiAgIHN3aXRjaChwbGNpLT5TaWcuSW5kKSB7CiAgIC8qIFJlc3BvbnNlIHRvIEdldF9TdXBwb3J0ZWRfU2VydmljZXMgcmVxdWVzdCAqLwpAQCAtNTg5NCw3ICs1ODkxLDYgQEAKICAgICBicmVhazsKIAogICBjYXNlIFRFTF9DVFJMOgotICAgIE51bWJlciA9IDA7CiAgICAgaWUgPSBtdWx0aV9mYWNfcGFybXNbMF07IC8qIGluc3BlY3QgdGhlIGZhY2lsaXR5IGhvb2sgaW5kaWNhdGlvbnMgKi8KICAgICBpZihwbGNpLT5TdGF0ZT09QURWQU5DRURfVk9JQ0VfU0lHICYmIGllWzBdKXsKICAgICAgIHN3aXRjaCAoaWVbMV0mMHg5MSkgewpAQCAtMTAxMTksMTQgKzEwMTE1LDEyIEBACiAKIHN0YXRpYyB2b2lkIGR0bWZfY29uZmlybWF0aW9uIChkd29yZCBJZCwgUExDSSAgICpwbGNpKQogewotICB3b3JkIEluZm87CiAgIHdvcmQgaTsKICAgICBieXRlIHJlc3VsdFs0XTsKIAogICBkYnVnICgxLCBkcHJpbnRmICgiWyUwNmx4XSAlcywlZDogZHRtZl9jb25maXJtYXRpb24iLAogICAgIFVuTWFwSWQgKElkKSwgKGNoYXIgICAqKShGSUxFXyksIF9fTElORV9fKSk7CiAKLSAgSW5mbyA9IEdPT0Q7CiAgIHJlc3VsdFswXSA9IDI7CiAgIFBVVF9XT1JEICgmcmVzdWx0WzFdLCBEVE1GX1NVQ0NFU1MpOwogICBpZiAocGxjaS0+ZHRtZl9zZW5kX3JlcXVlc3RzICE9IDApCkBAIC0xMTUyMCwxMyArMTE1MTQsMTIgQEAKIHN0YXRpYyB2b2lkIG1peGVyX2NvbW1hbmQgKGR3b3JkIElkLCBQTENJICAgKnBsY2ksIGJ5dGUgUmMpCiB7CiAgIERJVkFfQ0FQSV9BREFQVEVSICAgKmE7Ci0gIHdvcmQgaSwgaW50ZXJuYWxfY29tbWFuZCwgSW5mbzsKKyAgd29yZCBpLCBpbnRlcm5hbF9jb21tYW5kOwogCiAgIGRidWcgKDEsIGRwcmludGYgKCJbJTA2bHhdICVzLCVkOiBtaXhlcl9jb21tYW5kICUwMnggJTA0eCAlMDR4IiwKICAgICBVbk1hcElkIChJZCksIChjaGFyICAgKikoRklMRV8pLCBfX0xJTkVfXywgUmMsIHBsY2ktPmludGVybmFsX2NvbW1hbmQsCiAgICAgcGxjaS0+bGlfY21kKSk7CiAKLSAgSW5mbyA9IEdPT0Q7CiAgIGEgPSBwbGNpLT5hZGFwdGVyOwogICBpbnRlcm5hbF9jb21tYW5kID0gcGxjaS0+aW50ZXJuYWxfY29tbWFuZDsKICAgcGxjaS0+aW50ZXJuYWxfY29tbWFuZCA9IDA7CkBAIC0xMTU1MCw3ICsxMTU0Myw2IEBACiAgICAgICAgIHsKICAgICAgICAgICBkYnVnICgxLCBkcHJpbnRmICgiWyUwNmx4XSAlcywlZDogTG9hZCBtaXhlciBmYWlsZWQiLAogICAgICAgICAgICAgVW5NYXBJZCAoSWQpLCAoY2hhciAgICopKEZJTEVfKSwgX19MSU5FX18pKTsKLSAgICAgICAgICBJbmZvID0gX0ZBQ0lMSVRZX05PVF9TVVBQT1JURUQ7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHBsY2ktPmludGVybmFsX2NvbW1hbmQpCkBAIC0xMTU5Miw3ICsxMTU4NCw2IEBACiAgICAgICAgICAgICB9IHdoaWxlICgocGxjaS0+bGlfcGxjaV9iX3dyaXRlX3BvcyAhPSBwbGNpLT5saV9wbGNpX2JfcmVxX3BvcykKICAgICAgICAgICAgICAgJiYgIShwbGNpLT5saV9wbGNpX2JfcXVldWVbaV0gJiBMSV9QTENJX0JfTEFTVF9GTEFHKSk7CiAgICAgICAgICAgfQotICAgICAgICAgIEluZm8gPSBfRkFDSUxJVFlfTk9UX1NVUFBPUlRFRDsKICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAocGxjaS0+aW50ZXJuYWxfY29tbWFuZCkKQEAgLTExNjEwLDcgKzExNjAxLDYgQEAKICAgICAgICAgewogICAgICAgICAgIGRidWcgKDEsIGRwcmludGYgKCJbJTA2bHhdICVzLCVkOiBVbmxvYWQgbWl4ZXIgZmFpbGVkIiwKICAgICAgICAgICAgIFVuTWFwSWQgKElkKSwgKGNoYXIgICAqKShGSUxFXyksIF9fTElORV9fKSk7Ci0gICAgICAgICAgSW5mbyA9IF9GQUNJTElUWV9OT1RfU1VQUE9SVEVEOwogICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmIChwbGNpLT5pbnRlcm5hbF9jb21tYW5kKQpAQCAtMTI0NDgsMTMgKzEyNDM4LDExIEBACiBzdGF0aWMgdm9pZCBtaXhlcl9pbmRpY2F0aW9uX2NvZWZzX3NldCAoZHdvcmQgSWQsIFBMQ0kgICAqcGxjaSkKIHsKICAgZHdvcmQgZDsKLSAgRElWQV9DQVBJX0FEQVBURVIgICAqYTsKICAgICBieXRlIHJlc3VsdFsxMl07CiAKICAgZGJ1ZyAoMSwgZHByaW50ZiAoIlslMDZseF0gJXMsJWQ6IG1peGVyX2luZGljYXRpb25fY29lZnNfc2V0IiwKICAgICBVbk1hcElkIChJZCksIChjaGFyICAgKikoRklMRV8pLCBfX0xJTkVfXykpOwogCi0gIGEgPSBwbGNpLT5hZGFwdGVyOwogICBpZiAocGxjaS0+bGlfcGxjaV9iX3JlYWRfcG9zICE9IHBsY2ktPmxpX3BsY2lfYl9yZXFfcG9zKQogICB7CiAgICAgZG8KQEAgLTE0MTExLDEzICsxNDA5OSwxMSBAQAogCiBzdGF0aWMgdm9pZCBmYXhfY29ubmVjdF9hY2tfY29tbWFuZCAoZHdvcmQgSWQsIFBMQ0kgICAqcGxjaSwgYnl0ZSBSYykKIHsKLSAgd29yZCBJbmZvOwogICB3b3JkIGludGVybmFsX2NvbW1hbmQ7CiAKICAgZGJ1ZyAoMSwgZHByaW50ZiAoIlslMDZseF0gJXMsJWQ6IGZheF9jb25uZWN0X2Fja19jb21tYW5kICUwMnggJTA0eCIsCiAgICAgVW5NYXBJZCAoSWQpLCAoY2hhciAgICopKEZJTEVfKSwgX19MSU5FX18sIFJjLCBwbGNpLT5pbnRlcm5hbF9jb21tYW5kKSk7CiAKLSAgSW5mbyA9IEdPT0Q7CiAgIGludGVybmFsX2NvbW1hbmQgPSBwbGNpLT5pbnRlcm5hbF9jb21tYW5kOwogICBwbGNpLT5pbnRlcm5hbF9jb21tYW5kID0gMDsKICAgc3dpdGNoIChpbnRlcm5hbF9jb21tYW5kKQpAQCAtMTQxNjAsMTMgKzE0MTQ2LDExIEBACiAKIHN0YXRpYyB2b2lkIGZheF9lZGF0YV9hY2tfY29tbWFuZCAoZHdvcmQgSWQsIFBMQ0kgICAqcGxjaSwgYnl0ZSBSYykKIHsKLSAgd29yZCBJbmZvOwogICB3b3JkIGludGVybmFsX2NvbW1hbmQ7CiAKICAgZGJ1ZyAoMSwgZHByaW50ZiAoIlslMDZseF0gJXMsJWQ6IGZheF9lZGF0YV9hY2tfY29tbWFuZCAlMDJ4ICUwNHgiLAogICAgIFVuTWFwSWQgKElkKSwgKGNoYXIgICAqKShGSUxFXyksIF9fTElORV9fLCBSYywgcGxjaS0+aW50ZXJuYWxfY29tbWFuZCkpOwogCi0gIEluZm8gPSBHT09EOwogICBpbnRlcm5hbF9jb21tYW5kID0gcGxjaS0+aW50ZXJuYWxfY29tbWFuZDsKICAgcGxjaS0+aW50ZXJuYWxfY29tbWFuZCA9IDA7CiAgIHN3aXRjaCAoaW50ZXJuYWxfY29tbWFuZCkKQEAgLTE0Mzk1LDEzICsxNDM3OSwxMSBAQAogCiBzdGF0aWMgdm9pZCBydHBfY29ubmVjdF9iM19yZXNfY29tbWFuZCAoZHdvcmQgSWQsIFBMQ0kgICAqcGxjaSwgYnl0ZSBSYykKIHsKLSAgd29yZCBJbmZvOwogICB3b3JkIGludGVybmFsX2NvbW1hbmQ7CiAKICAgZGJ1ZyAoMSwgZHByaW50ZiAoIlslMDZseF0gJXMsJWQ6IHJ0cF9jb25uZWN0X2IzX3Jlc19jb21tYW5kICUwMnggJTA0eCIsCiAgICAgVW5NYXBJZCAoSWQpLCAoY2hhciAgICopKEZJTEVfKSwgX19MSU5FX18sIFJjLCBwbGNpLT5pbnRlcm5hbF9jb21tYW5kKSk7CiAKLSAgSW5mbyA9IEdPT0Q7CiAgIGludGVybmFsX2NvbW1hbmQgPSBwbGNpLT5pbnRlcm5hbF9jb21tYW5kOwogICBwbGNpLT5pbnRlcm5hbF9jb21tYW5kID0gMDsKICAgc3dpdGNoIChpbnRlcm5hbF9jb21tYW5kKQpAQCAtMTQ0MjMsNyArMTQ0MDUsNiBAQAogICAgIHsKICAgICAgIGRidWcgKDEsIGRwcmludGYgKCJbJTA2bHhdICVzLCVkOiBSVFAgc2V0dGluZyBjb25uZWN0IHJlc3AgaW5mbyBmYWlsZWQgJTAyeCIsCiAgICAgICAgIFVuTWFwSWQgKElkKSwgKGNoYXIgICAqKShGSUxFXyksIF9fTElORV9fLCBSYykpOwotICAgICAgSW5mbyA9IF9XUk9OR19TVEFURTsKICAgICAgIGJyZWFrOwogICAgIH0KICAgICBpZiAocGxjaV9ubF9idXN5IChwbGNpKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNwY2kuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNwY2kuYwppbmRleCA0MzQzYWJhLi5iMDFhN2JlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjcGNpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3BjaS5jCkBAIC00MDUsNyArNDA1LDcgQEAKICAgICB1X2NoYXIgKmJkYXRhLCBpbnQgY291bnQpCiB7CiAJdV9jaGFyCQkqcHRyLCAqcHRyMSwgbmV3X2YyOwotCWludAkJdG90YWwsIG1heGxlbiwgbmV3X3oyOworCWludAkJbWF4bGVuLCBuZXdfejI7CiAJc3RydWN0IHp0CSp6cDsKIAogCWlmICgoYmNoLT5kZWJ1ZyAmIERFQlVHX0hXX0JDSEFOTkVMKSAmJiAhKGJjaC0+ZGVidWcgJiBERUJVR19IV19CRklGTykpCkBAIC00MzEsNyArNDMxLDYgQEAKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkhGQ1BDSTogcmVjZWl2ZSBvdXQgb2YgbWVtb3J5XG4iKTsKIAkJCXJldHVybjsKIAkJfQotCQl0b3RhbCA9IGNvdW50OwogCQljb3VudCAtPSAzOwogCQlwdHIgPSBza2JfcHV0KGJjaC0+cnhfc2tiLCBjb3VudCk7CiAKQEAgLTk2OCw3ICs5NjcsNiBAQAogcGhfc3RhdGVfbnQoc3RydWN0IGRjaGFubmVsICpkY2gpCiB7CiAJc3RydWN0IGhmY19wY2kJKmhjID0gZGNoLT5odzsKLQl1X2NoYXIJdmFsOwogCiAJaWYgKGRjaC0+ZGVidWcpCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogTlQgbmV3c3RhdGUgJXhcbiIsCkBAIC05ODIsNyArOTgwLDcgQEAKIAkJCWhjLT5ody5pbnRfbTEgJj0gfkhGQ1BDSV9JTlRTX1RJTUVSOwogCQkJV3JpdGVfaGZjKGhjLCBIRkNQQ0lfSU5UX00xLCBoYy0+aHcuaW50X20xKTsKIAkJCS8qIENsZWFyIGFscmVhZHkgcGVuZGluZyBpbnRzICovCi0JCQl2YWwgPSBSZWFkX2hmYyhoYywgSEZDUENJX0lOVF9TMSk7CisJCQkodm9pZCkgUmVhZF9oZmMoaGMsIEhGQ1BDSV9JTlRfUzEpOwogCQkJV3JpdGVfaGZjKGhjLCBIRkNQQ0lfU1RBVEVTLCA0IHwgSEZDUENJX0xPQURfU1RBVEUpOwogCQkJdWRlbGF5KDEwKTsKIAkJCVdyaXRlX2hmYyhoYywgSEZDUENJX1NUQVRFUywgNCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjc3VzYi5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3N1c2IuYwppbmRleCA4NzAwNDc0Li4zY2NiZmYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjc3VzYi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNzdXNiLmMKQEAgLTExOCwxNCArMTE4LDEyIEBACiBjdHJsX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgaGZjc3VzYiAqaHcgPSAoc3RydWN0IGhmY3N1c2IgKikgdXJiLT5jb250ZXh0OwotCXN0cnVjdCBjdHJsX2J1ZiAqYnVmOwogCiAJaWYgKGRlYnVnICYgREJHX0hGQ19DQUxMX1RSQUNFKQogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICVzXG4iLCBody0+bmFtZSwgX19mdW5jX18pOwogCiAJdXJiLT5kZXYgPSBody0+ZGV2OwogCWlmIChody0+Y3RybF9jbnQpIHsKLQkJYnVmID0gJmh3LT5jdHJsX2J1ZmZbaHctPmN0cmxfb3V0X2lkeF07CiAJCWh3LT5jdHJsX2NudC0tOwkvKiBkZWNyZW1lbnQgYWN0dWFsIGNvdW50ICovCiAJCWlmICgrK2h3LT5jdHJsX291dF9pZHggPj0gSEZDX0NUUkxfQlVGU0laRSkKIAkJCWh3LT5jdHJsX291dF9pZHggPSAwOwkvKiBwb2ludGVyIHdyYXAgKi8KQEAgLTE3MjYsNyArMTcyNCw2IEBACiBzdGF0aWMgaW50CiBzZXR1cF9oZmNzdXNiKHN0cnVjdCBoZmNzdXNiICpodykKIHsKLQlpbnQgZXJyOwogCXVfY2hhciBiOwogCiAJaWYgKGRlYnVnICYgREJHX0hGQ19DQUxMX1RSQUNFKQpAQCAtMTc0NSw3ICsxNzQyLDcgQEAKIAl9CiAKIAkvKiBmaXJzdCBzZXQgdGhlIG5lZWRlZCBjb25maWcsIGludGVyZmFjZSBhbmQgYWx0ZXJuYXRlICovCi0JZXJyID0gdXNiX3NldF9pbnRlcmZhY2UoaHctPmRldiwgaHctPmlmX3VzZWQsIGh3LT5hbHRfdXNlZCk7CisJKHZvaWQpIHVzYl9zZXRfaW50ZXJmYWNlKGh3LT5kZXYsIGh3LT5pZl91c2VkLCBody0+YWx0X3VzZWQpOwogCiAJaHctPmxlZF9zdGF0ZSA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9hcmNvZmkuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9hcmNvZmkuYwppbmRleCA4NWE4ZmQ4Li4yMWNiYmUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvYXJjb2ZpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2FyY29maS5jCkBAIC0zMCw4ICszMCw2IEBACiAKIHN0YXRpYyB2b2lkCiBzZW5kX2FyY29maShzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpIHsKLQl1X2NoYXIgdmFsOwotCQogCWFkZF9hcmNvZmlfdGltZXIoY3MpOwogCWNzLT5kYy5pc2FjLm1vbl90eHAgPSAwOwogCWNzLT5kYy5pc2FjLm1vbl90eGMgPSBjcy0+ZGMuaXNhYy5hcmNvZmlfbGlzdC0+bGVuOwpAQCAtNDUsNyArNDMsNyBAQAogCWNzLT5kYy5pc2FjLm1vY3IgJj0gMHgwZjsKIAljcy0+ZGMuaXNhYy5tb2NyIHw9IDB4YTA7CiAJY3MtPndyaXRlaXNhYyhjcywgSVNBQ19NT0NSLCBjcy0+ZGMuaXNhYy5tb2NyKTsKLQl2YWwgPSBjcy0+cmVhZGlzYWMoY3MsIElTQUNfTU9TUik7CisJKHZvaWQpIGNzLT5yZWFkaXNhYyhjcywgSVNBQ19NT1NSKTsKIAljcy0+d3JpdGVpc2FjKGNzLCBJU0FDX01PWDEsIGNzLT5kYy5pc2FjLm1vbl90eFtjcy0+ZGMuaXNhYy5tb25fdHhwKytdKTsKIAljcy0+ZGMuaXNhYy5tb2NyIHw9IDB4MTA7CiAJY3MtPndyaXRlaXNhYyhjcywgSVNBQ19NT0NSLCBjcy0+ZGMuaXNhYy5tb2NyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhX2NzLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYV9jcy5jCmluZGV4IDQ5NmQ0NzcuLjllNWU4N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhX2NzLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2FfY3MuYwpAQCAtMTI5LDEyICsxMjksMTAgQEAKIAogc3RhdGljIGludCBfX2RldmluaXQgZWxzYV9jc19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgbG9jYWxfaW5mb190ICpkZXY7CiAgICAgaW50IGk7CiAgICAgSXNkbkNhcmRfdCBpY2FyZDsKIAogICAgIGRldl9kYmcoJmxpbmstPmRldiwgImVsc2FfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKLSAgICBkZXYgPSBsaW5rLT5wcml2OwogCiAgICAgbGluay0+Y29uZmlnX2ZsYWdzIHw9IENPTkZfRU5BQkxFX0lSUSB8IENPTkZfQVVUT19TRVRfSU87CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhX3Nlci5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2Ffc2VyLmMKaW5kZXggY2JkYTM3OS4uM2ZhOWY2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2Ffc2VyLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2Ffc2VyLmMKQEAgLTEwOSwxMSArMTA5LDEwIEBACiB7CiAJaW50CXF1b3QgPSAwLCBiYXVkX2Jhc2U7CiAJdW5zaWduZWQgY3ZhbCwgZmNyID0gMDsKLQlpbnQJYml0czsKIAogCiAJLyogYnl0ZSBzaXplIGFuZCBwYXJpdHkgKi8KLQljdmFsID0gMHgwMzsgYml0cyA9IDEwOworCWN2YWwgPSAweDAzOwogCS8qIERldGVybWluZSBkaXZpc29yIGJhc2VkIG9uIGJhdWQgcmF0ZSAqLwogCWJhdWRfYmFzZSA9IEJBU0VfQkFVRDsKIAlxdW90ID0gYmF1ZF9iYXNlIC8gYmF1ZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfdXNiLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3VzYi5jCmluZGV4IGVkOTUyN2EuLmY0MDdkZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfdXNiLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY191c2IuYwpAQCAtMjU4LDExICsyNTgsOSBAQAogY3RybF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJaGZjdXNiX2RhdGEgKmhmYyA9IChoZmN1c2JfZGF0YSAqKSB1cmItPmNvbnRleHQ7Ci0JY3RybF9idWZ0ICpidWY7CiAKIAl1cmItPmRldiA9IGhmYy0+ZGV2OwogCWlmIChoZmMtPmN0cmxfY250KSB7Ci0JCWJ1ZiA9ICZoZmMtPmN0cmxfYnVmZltoZmMtPmN0cmxfb3V0X2lkeF07CiAJCWhmYy0+Y3RybF9jbnQtLTsJLyogZGVjcmVtZW50IGFjdHVhbCBjb3VudCAqLwogCQlpZiAoKytoZmMtPmN0cmxfb3V0X2lkeCA+PSBIRkNfQ1RSTF9CVUZTSVpFKQogCQkJaGZjLT5jdHJsX291dF9pZHggPSAwOwkvKiBwb2ludGVyIHdyYXAgKi8KQEAgLTEwOTcsNyArMTA5NSw3IEBACiBoZmNfdXNiX2luaXQoaGZjdXNiX2RhdGEgKiBoZmMpCiB7CiAJdXNiX2ZpZm8gKmZpZm87Ci0JaW50IGksIGVycjsKKwlpbnQgaTsKIAl1X2NoYXIgYjsKIAlzdHJ1Y3QgaGlzYXhfYl9pZiAqcF9iX2lmWzJdOwogCkBAIC0xMTEyLDcgKzExMTAsNyBAQAogCX0KIAogCS8qIGZpcnN0IHNldCB0aGUgbmVlZGVkIGNvbmZpZywgaW50ZXJmYWNlIGFuZCBhbHRlcm5hdGUgKi8KLQllcnIgPSB1c2Jfc2V0X2ludGVyZmFjZShoZmMtPmRldiwgaGZjLT5pZl91c2VkLCBoZmMtPmFsdF91c2VkKTsKKwl1c2Jfc2V0X2ludGVyZmFjZShoZmMtPmRldiwgaGZjLT5pZl91c2VkLCBoZmMtPmFsdF91c2VkKTsKIAogCS8qIGRvIENoaXAgcmVzZXQgKi8KIAl3cml0ZV91c2IoaGZjLCBIRkNVU0JfQ0lSTSwgOCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXBhY3guYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9pcGFjeC5jCmluZGV4IDMzMjEwNDEuLjY5MDg0MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9pcGFjeC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9pcGFjeC5jCkBAIC05Niw3ICs5Niw3IEBACiB7CiAJc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzID0gKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICopIHN0LT5sMS5oYXJkd2FyZTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYXJnOwotICB1X2NoYXIgY2RhMV9jciwgY2RhMl9jcjsKKwl1X2NoYXIgY2RhMV9jcjsKIAogCXN3aXRjaCAocHIpIHsKIAkJY2FzZSAoUEhfREFUQSB8UkVRVUVTVCk6CkBAIC0xNjMsNyArMTYzLDcgQEAKICAgICAgIGNzLT53cml0ZWlzYWMoY3MsIElQQUNYX0NEQV9UU0RQMTAsIDB4ODApOyAvLyBUaW1lc2xvdCAwIGlzIEIxCiAgICAgICBjcy0+d3JpdGVpc2FjKGNzLCBJUEFDWF9DREFfVFNEUDExLCAweDgxKTsgLy8gVGltZXNsb3QgMCBpcyBCMQogICAgICAgY2RhMV9jciA9IGNzLT5yZWFkaXNhYyhjcywgSVBBQ1hfQ0RBMV9DUik7Ci0gICAgICBjZGEyX2NyID0gY3MtPnJlYWRpc2FjKGNzLCBJUEFDWF9DREEyX0NSKTsKKyAgICAgICh2b2lkKSBjcy0+cmVhZGlzYWMoY3MsIElQQUNYX0NEQTJfQ1IpOwogCQkJaWYgKChsb25nKWFyZyAmMSkgeyAvLyBsb29wIEIxCiAgICAgICAgIGNzLT53cml0ZWlzYWMoY3MsIElQQUNYX0NEQTFfQ1IsIGNkYTFfY3IgfDB4MGEpOyAKICAgICAgIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9qYWRlLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvamFkZS5jCmluZGV4IGVhOGY4NDAuLmEwNmNlYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9qYWRlLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2phZGUuYwpAQCAtMjMsMTAgKzIzLDkgQEAKIGludAogSmFkZVZlcnNpb24oc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzLCBjaGFyICpzKQogewotICAgIGludCB2ZXIsaTsKKyAgICBpbnQgdmVyOwogICAgIGludCB0byA9IDUwOwogICAgIGNzLT5CQ19Xcml0ZV9SZWcoY3MsIC0xLCAweDUwLCAweDE5KTsKLSAgICBpPTA7CiAgICAgd2hpbGUgKHRvKSB7CiAgICAgCXVkZWxheSgxKTsKIAl2ZXIgPSBjcy0+QkNfUmVhZF9SZWcoY3MsIC0xLCAweDYwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9sM2RzczEuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9sM2RzczEuYwppbmRleCA4ZTJmZDAyLi5iMGQ5YWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvbDNkc3MxLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2wzZHNzMS5jCkBAIC0yOTQzLDcgKzI5NDMsNyBAQAogc3RhdGljIHZvaWQKIGRzczF1cChzdHJ1Y3QgUFN0YWNrICpzdCwgaW50IHByLCB2b2lkICphcmcpCiB7Ci0JaW50IGksIG10LCBjciwgY2F1c2UsIGNhbGxTdGF0ZTsKKwlpbnQgaSwgbXQsIGNyLCBjYWxsU3RhdGU7CiAJY2hhciAqcHRyOwogCXVfY2hhciAqcDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYXJnOwpAQCAtMzAzNCwxMiArMzAzNCwxMCBAQAogCQkJCXJldHVybjsKIAkJCX0KIAkJfSBlbHNlIGlmIChtdCA9PSBNVF9TVEFUVVMpIHsKLQkJCWNhdXNlID0gMDsKIAkJCWlmICgocHRyID0gZmluZGllKHNrYi0+ZGF0YSwgc2tiLT5sZW4sIElFX0NBVVNFLCAwKSkgIT0gTlVMTCkgewogCQkJCXB0cisrOwogCQkJCWlmICgqcHRyKysgPT0gMikKIAkJCQkJcHRyKys7Ci0JCQkJY2F1c2UgPSAqcHRyICYgMHg3ZjsKIAkJCX0KIAkJCWNhbGxTdGF0ZSA9IDA7CiAJCQlpZiAoKHB0ciA9IGZpbmRpZShza2ItPmRhdGEsIHNrYi0+bGVuLCBJRV9DQUxMX1NUQVRFLCAwKSkgIT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2wzbmkxLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbDNuaTEuYwppbmRleCA3YjIyOWMwLi4wOTJkY2JiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvbDNuaTEuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbDNuaTEuYwpAQCAtMjg4Myw3ICsyODgzLDcgQEAKIHN0YXRpYyB2b2lkCiBuaTF1cChzdHJ1Y3QgUFN0YWNrICpzdCwgaW50IHByLCB2b2lkICphcmcpCiB7Ci0JaW50IGksIG10LCBjciwgY2F1c2UsIGNhbGxTdGF0ZTsKKwlpbnQgaSwgbXQsIGNyLCBjYWxsU3RhdGU7CiAJY2hhciAqcHRyOwogCXVfY2hhciAqcDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYXJnOwpAQCAtMjk4NiwxMiArMjk4NiwxMCBAQAogCQkJCXJldHVybjsKIAkJCX0KIAkJfSBlbHNlIGlmIChtdCA9PSBNVF9TVEFUVVMpIHsKLQkJCWNhdXNlID0gMDsKIAkJCWlmICgocHRyID0gZmluZGllKHNrYi0+ZGF0YSwgc2tiLT5sZW4sIElFX0NBVVNFLCAwKSkgIT0gTlVMTCkgewogCQkJCXB0cisrOwogCQkJCWlmICgqcHRyKysgPT0gMikKIAkJCQkJcHRyKys7Ci0JCQkJY2F1c2UgPSAqcHRyICYgMHg3ZjsKIAkJCX0KIAkJCWNhbGxTdGF0ZSA9IDA7CiAJCQlpZiAoKHB0ciA9IGZpbmRpZShza2ItPmRhdGEsIHNrYi0+bGVuLCBJRV9DQUxMX1NUQVRFLCAwKSkgIT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MS5oIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MS5oCmluZGV4IDY0Zjc4YTguLmI5MDU0Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODEuaAorKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxLmgKQEAgLTM3Nyw3ICszNzcsNiBAQAogfTsKIAogc3RydWN0IHN0NTQ4MV9hZGFwdGVyIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJaW50IG51bWJlcl9vZl9sZWRzOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2OwogCXN0cnVjdCBoaXNheF9kX2lmIGhpc2F4X2RfaWY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX2luaXQuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfaW5pdC5jCmluZGV4IDEzNzUxMjMuLjlmN2ZkMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfaW5pdC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfaW5pdC5jCkBAIC00Niw4ICs0Niw2IEBACiAjZW5kaWYKIGludCBzdDU0ODFfZGVidWc7CiAKLXN0YXRpYyBMSVNUX0hFQUQoYWRhcHRlcl9saXN0KTsKLQogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogcmVnaXN0cmF0aW9uL2RlcmVnaXN0cmF0aW9uIHdpdGggdGhlIFVTQiBsYXllcgogICovCkBAIC04Niw3ICs4NCw2IEBACiAJCWFkYXB0ZXItPmJjc1tpXS5iX2lmLmlmYy5wcml2ID0gJmFkYXB0ZXItPmJjc1tpXTsKIAkJYWRhcHRlci0+YmNzW2ldLmJfaWYuaWZjLmwybDEgPSBzdDU0ODFfYl9sMmwxOwogCX0KLQlsaXN0X2FkZCgmYWRhcHRlci0+bGlzdCwgJmFkYXB0ZXJfbGlzdCk7CiAKIAlyZXR2YWwgPSBzdDU0ODFfc2V0dXBfdXNiKGFkYXB0ZXIpOwogCWlmIChyZXR2YWwgPCAwKQpAQCAtMTI1LDYgKzEyMiw3IEBACiAgZXJyX3VzYjoKIAlzdDU0ODFfcmVsZWFzZV91c2IoYWRhcHRlcik7CiAgZXJyOgorCWtmcmVlKGFkYXB0ZXIpOwogCXJldHVybiAtRUlPOwogfQogCkBAIC0xNDIsOCArMTQwLDYgQEAKIAlpZiAoIWFkYXB0ZXIpCiAJCXJldHVybjsKIAkKLQlsaXN0X2RlbCgmYWRhcHRlci0+bGlzdCk7Ci0KIAlzdDU0ODFfc3RvcChhZGFwdGVyKTsKIAlzdDU0ODFfcmVsZWFzZV9iKCZhZGFwdGVyLT5iY3NbMV0pOwogCXN0NTQ4MV9yZWxlYXNlX2IoJmFkYXB0ZXItPmJjc1swXSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNfY3MuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc19jcy5jCmluZGV4IGFhMjVlMTguLjM2MGY5ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc19jcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc19jcy5jCkBAIC0xMTEsMTIgKzExMSwxMCBAQAogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB0ZWxlc19jc19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgbG9jYWxfaW5mb190ICpkZXY7CiAgICAgaW50IGk7CiAgICAgSXNkbkNhcmRfdCBpY2FyZDsKIAogICAgIGRldl9kYmcoJmxpbmstPmRldiwgInRlbGVzX2NvbmZpZygweCVwKVxuIiwgbGluayk7Ci0gICAgZGV2ID0gbGluay0+cHJpdjsKIAogICAgIGkgPSBwY21jaWFfbG9vcF9jb25maWcobGluaywgdGVsZXNfY3NfY29uZmlnY2hlY2ssIE5VTEwpOwogICAgIGlmIChpICE9IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2xvZy5jIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Nsb2cuYwppbmRleCAyZWU5M2QwLi4yMzZjYzdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2xvZy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9wcm9jbG9nLmMKQEAgLTE1NSw3ICsxNTUsNiBAQAogc3RhdGljIHNzaXplX3QKIGh5c2RuX2xvZ193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKiBvZmYpCiB7Ci0JdW5zaWduZWQgbG9uZyB1ID0gMDsKIAlpbnQgcmM7CiAJdW5zaWduZWQgY2hhciB2YWxidWZbMTI4XTsKIAloeXNkbl9jYXJkICpjYXJkID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwpAQCAtMTY3LDEyICsxNjYsMTAgQEAKIAogCXZhbGJ1Zltjb3VudF0gPSAwOwkvKiB0ZXJtaW5hdGluZyAwICovCiAKLQlyYyA9IHN0cmljdF9zdHJ0b3VsKHZhbGJ1ZiwgMCwgJnUpOwotCi0JaWYgKHJjID09IDApIHsKLQkJY2FyZC0+ZGVidWdfZmxhZ3MgPSB1OwkvKiByZW1lbWJlciBkZWJ1ZyBmbGFncyAqLwotCQloeXNkbl9hZGRsb2coY2FyZCwgImRlYnVnIHNldCB0byAweCVseCIsIGNhcmQtPmRlYnVnX2ZsYWdzKTsKLQl9CisJcmMgPSBrc3RydG91bCh2YWxidWYsIDAsICZjYXJkLT5kZWJ1Z19mbGFncyk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCWh5c2RuX2FkZGxvZyhjYXJkLCAiZGVidWcgc2V0IHRvIDB4JWx4IiwgY2FyZC0+ZGVidWdfZmxhZ3MpOwogCXJldHVybiAoY291bnQpOwogfQkJCQkvKiBoeXNkbl9sb2dfd3JpdGUgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX2NvbW1vbi5jIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX2NvbW1vbi5jCmluZGV4IDE1NjMyYmQuLjZlZDgyYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9jb21tb24uYworKysgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fY29tbW9uLmMKQEAgLTM5OSwxMyArMzk5LDggQEAKICNpbmNsdWRlIDxsaW51eC9pc2RuL2NhcGljbWQuaD4KIAogc3RhdGljIGludAotaXNkbl9jYXBpX3JlY19obF9tc2coY2FwaV9tc2cgKmNtKSB7Ci0JCi0JaW50IGRpOwotCWludCBjaDsKLQkKLQlkaSA9IChjbS0+YWRyLkNvbnRyb2xsZXIgJiAweDdmKSAtMTsKLQljaCA9IGlzZG5fZGMybWlub3IoZGksIChjbS0+YWRyLkNvbnRyb2xsZXI+PjgpJiAweDdmKTsKK2lzZG5fY2FwaV9yZWNfaGxfbXNnKGNhcGlfbXNnICpjbSkKK3sKIAlzd2l0Y2goY20tPkNvbW1hbmQpIHsKIAkJY2FzZSBDQVBJX0ZBQ0lMSVRZOgogCQkJLyogaW4gdGhlIG1vbWVudCBvbmx5IGhhbmRsZWQgaW4gdHR5ICovCkBAIC0xMjc4LDcgKzEyNzMsNiBAQAogCXVpbnQgbWlub3IgPSBpbWlub3IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJaXNkbl9jdHJsIGM7CiAJaW50IGRydmlkeDsKLQlpbnQgY2hpZHg7CiAJaW50IHJldDsKIAlpbnQgaTsKIAljaGFyIF9fdXNlciAqcDsKQEAgLTEzNDAsNyArMTMzNCw2IEBACiAJCWRydmlkeCA9IGlzZG5fbWlub3IyZHJ2KG1pbm9yKTsKIAkJaWYgKGRydmlkeCA8IDApCiAJCQlyZXR1cm4gLUVOT0RFVjsKLQkJY2hpZHggPSBpc2RuX21pbm9yMmNoYW4obWlub3IpOwogCQlpZiAoIShkZXYtPmRydltkcnZpZHhdLT5mbGFncyAmIERSVl9GTEFHX1JVTk5JTkcpKQogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX25ldC5jIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX25ldC5jCmluZGV4IDJhN2QxN2MuLjk3OTg4MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9uZXQuYworKysgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fbmV0LmMKQEAgLTE2NzgsNyArMTY3OCw2IEBACiAJdTMyIHlvdXJfc2VxOwogCV9fYmUzMiBsb2NhbDsKIAlfX2JlMzIgKmFkZHIsICptYXNrOwotCXUxNiB1bnVzZWQ7CiAKIAlpZiAoc2tiLT5sZW4gPCAxNCkKIAkJcmV0dXJuOwpAQCAtMTcyMiw3ICsxNzIxLDYgQEAKIAkJbHAtPmNpc2NvX2xhc3Rfc2xhcnBfaW4gPSBqaWZmaWVzOwogCQlteV9zZXEgPSBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKShwICsgMCkpOwogCQl5b3VyX3NlcSA9IGJlMzJfdG9fY3B1cCgoX19iZTMyICopKHAgKyA0KSk7Ci0JCXVudXNlZCA9IGJlMTZfdG9fY3B1cCgoX19iZTE2ICopKHAgKyA4KSk7CiAJCXAgKz0gMTA7CiAJCWxwLT5jaXNjb195b3Vyc2VxID0gbXlfc2VxOwogCQlscC0+Y2lzY29fbWluZXNlZW4gPSB5b3VyX3NlcTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl90dHkuYyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl90dHkuYwppbmRleCA2MDdkODQ2Li5kODUwNDI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fdHR5LmMKKysrIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3R0eS5jCkBAIC05OTgsNyArOTk4LDYgQEAKIHsKIAl1aW50IGNmbGFnLAogCSBjdmFsLAotCSBmY3IsCiAJIHF1b3Q7CiAJaW50IGk7CiAKQEAgLTEwMzcsNyArMTAzNiw2IEBACiAJCWN2YWwgfD0gVUFSVF9MQ1JfUEFSSVRZOwogCWlmICghKGNmbGFnICYgUEFST0REKSkKIAkJY3ZhbCB8PSBVQVJUX0xDUl9FUEFSOwotCWZjciA9IDA7CiAKIAkvKiBDVFMgZmxvdyBjb250cm9sIGZsYWcgYW5kIG1vZGVtIHN0YXR1cyBpbnRlcnJ1cHRzICovCiAJaWYgKGNmbGFnICYgQ1JUU0NUUykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL21JU0ROL2xheWVyMi5jIGIvZHJpdmVycy9pc2RuL21JU0ROL2xheWVyMi5jCmluZGV4IGQwYWViNDQuLjViYzAwMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9tSVNETi9sYXllcjIuYworKysgYi9kcml2ZXJzL2lzZG4vbUlTRE4vbGF5ZXIyLmMKQEAgLTE2NDAsNyArMTY0MCw3IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1sMl9zdDE0X3BlcnNpc3RhbnRfZGEoc3RydWN0IEZzbUluc3QgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKK2wyX3N0MTRfcGVyc2lzdGVudF9kYShzdHJ1Y3QgRnNtSW5zdCAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKQogewogCXN0cnVjdCBsYXllcjIgKmwyID0gZmktPnVzZXJkYXRhOwogCXN0cnVjdCBza19idWZmICpza2IgPSBhcmc7CkBAIC0xNjU0LDcgKzE2NTQsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotbDJfc3Q1X3BlcnNpc3RhbnRfZGEoc3RydWN0IEZzbUluc3QgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKK2wyX3N0NV9wZXJzaXN0ZW50X2RhKHN0cnVjdCBGc21JbnN0ICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCiB7CiAJc3RydWN0IGxheWVyMiAqbDIgPSBmaS0+dXNlcmRhdGE7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGFyZzsKQEAgLTE2NzEsNyArMTY3MSw3IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1sMl9zdDZfcGVyc2lzdGFudF9kYShzdHJ1Y3QgRnNtSW5zdCAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKQorbDJfc3Q2X3BlcnNpc3RlbnRfZGEoc3RydWN0IEZzbUluc3QgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgbGF5ZXIyICpsMiA9IGZpLT51c2VyZGF0YTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYXJnOwpAQCAtMTY4NSw3ICsxNjg1LDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLWwyX3BlcnNpc3RhbnRfZGEoc3RydWN0IEZzbUluc3QgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKK2wyX3BlcnNpc3RlbnRfZGEoc3RydWN0IEZzbUluc3QgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgbGF5ZXIyICpsMiA9IGZpLT51c2VyZGF0YTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYXJnOwpAQCAtMTgyOSwxNCArMTgyOSwxNCBAQAogCXtTVF9MMl82LCBFVl9MMl9GUkFNRV9FUlJPUiwgbDJfZnJhbWVfZXJyb3J9LAogCXtTVF9MMl83LCBFVl9MMl9GUkFNRV9FUlJPUiwgbDJfZnJhbWVfZXJyb3JfcmVlc3R9LAogCXtTVF9MMl84LCBFVl9MMl9GUkFNRV9FUlJPUiwgbDJfZnJhbWVfZXJyb3JfcmVlc3R9LAotCXtTVF9MMl8xLCBFVl9MMV9ERUFDVElWQVRFLCBsMl9zdDE0X3BlcnNpc3RhbnRfZGF9LAorCXtTVF9MMl8xLCBFVl9MMV9ERUFDVElWQVRFLCBsMl9zdDE0X3BlcnNpc3RlbnRfZGF9LAogCXtTVF9MMl8yLCBFVl9MMV9ERUFDVElWQVRFLCBsMl9zdDI0X3RlaV9yZW1vdmV9LAogCXtTVF9MMl8zLCBFVl9MMV9ERUFDVElWQVRFLCBsMl9zdDNfdGVpX3JlbW92ZX0sCi0Je1NUX0wyXzQsIEVWX0wxX0RFQUNUSVZBVEUsIGwyX3N0MTRfcGVyc2lzdGFudF9kYX0sCi0Je1NUX0wyXzUsIEVWX0wxX0RFQUNUSVZBVEUsIGwyX3N0NV9wZXJzaXN0YW50X2RhfSwKLQl7U1RfTDJfNiwgRVZfTDFfREVBQ1RJVkFURSwgbDJfc3Q2X3BlcnNpc3RhbnRfZGF9LAotCXtTVF9MMl83LCBFVl9MMV9ERUFDVElWQVRFLCBsMl9wZXJzaXN0YW50X2RhfSwKLQl7U1RfTDJfOCwgRVZfTDFfREVBQ1RJVkFURSwgbDJfcGVyc2lzdGFudF9kYX0sCisJe1NUX0wyXzQsIEVWX0wxX0RFQUNUSVZBVEUsIGwyX3N0MTRfcGVyc2lzdGVudF9kYX0sCisJe1NUX0wyXzUsIEVWX0wxX0RFQUNUSVZBVEUsIGwyX3N0NV9wZXJzaXN0ZW50X2RhfSwKKwl7U1RfTDJfNiwgRVZfTDFfREVBQ1RJVkFURSwgbDJfc3Q2X3BlcnNpc3RlbnRfZGF9LAorCXtTVF9MMl83LCBFVl9MMV9ERUFDVElWQVRFLCBsMl9wZXJzaXN0ZW50X2RhfSwKKwl7U1RfTDJfOCwgRVZfTDFfREVBQ1RJVkFURSwgbDJfcGVyc2lzdGVudF9kYX0sCiB9OwogCiBzdGF0aWMgaW50CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vbUlTRE4vc29ja2V0LmMgYi9kcml2ZXJzL2lzZG4vbUlTRE4vc29ja2V0LmMKaW5kZXggNzQ0NmQ4Yi4uOGUzMjUyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL21JU0ROL3NvY2tldC5jCisrKyBiL2RyaXZlcnMvaXNkbi9tSVNETi9zb2NrZXQuYwpAQCAtNDU3LDYgKzQ1Nyw5IEBACiAJaWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKKwlpZiAobGVuICE9IHNpemVvZihjaGFyKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlzd2l0Y2ggKG9wdG5hbWUpIHsKIAljYXNlIE1JU0ROX1RJTUVfU1RBTVA6CiAJCWlmIChfcG1zKHNrKS0+Y21hc2sgJiBNSVNETl9USU1FX1NUQU1QKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtbWMxMzc4My5jIGIvZHJpdmVycy9sZWRzL2xlZHMtbWMxMzc4My5jCmluZGV4IDA2YTViYjQuLjEyNmNhNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLW1jMTM3ODMuYworKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1tYzEzNzgzLmMKQEAgLTIzNSw3ICsyMzUsNyBAQAogCQkJCQkJCU1DMTM3ODNfTEVEX0N4X1BFUklPRDsKIAogCWlmIChwZGF0YS0+ZmxhZ3MgJiBNQzEzNzgzX0xFRF9UUklPREVfVEMzKQotCQlyZWcgfD0gTUMxMzc4M19MRURfQ3hfVFJJT0RFX1RDX0JJVDs7CisJCXJlZyB8PSBNQzEzNzgzX0xFRF9DeF9UUklPREVfVENfQklUOwogCiAJcmV0ID0gbWMxMzc4M19yZWdfd3JpdGUoZGV2LCBNQzEzNzgzX1JFR19MRURfQ09OVFJPTF81LCByZWcpOwogCWlmIChyZXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMKaW5kZXggYmI4YjcyMi4uMGZmOTJjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fcG03Mi5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuYwpAQCAtNDQsMTEgKzQ0LDExIEBACiAgKiBUT0RPOiAgLSBDaGVjayBNUFUgc3RydWN0dXJlIHZlcnNpb24vc2lnbmF0dXJlCiAgKiAgICAgICAgLSBBZGQgdGhpbmdzIGxpa2UgL3NiaW4vb3ZlcnRlbXAgZm9yIG5vbi1jcml0aWNhbAogICogICAgICAgICAgb3ZlcnRlbXAgY29uZGl0aW9ucyBzbyB1c2VybGFuZCBjYW4gdGFrZSBzb21lIHBvbGljeQotICogICAgICAgICAgZGVjaXNpb25zLCBsaWtlIHNsZXdpbmcgZG93biBDUFVzCisgKiAgICAgICAgICBkZWNpc2lvbnMsIGxpa2Ugc2xvd2luZyBkb3duIENQVXMKICAqCSAgLSBEZWFsIHdpdGggZmFuIGFuZCBpMmMgZmFpbHVyZXMgaW4gYSBiZXR0ZXIgd2F5CiAgKgkgIC0gTWF5YmUgZG8gYSBnZW5lcmljIFBJRCBiYXNlZCBvbiBwYXJhbXMgdXNlZCBmb3IKICAqCSAgICBVMyBhbmQgRHJpdmVzID8gRGVmaW5pdGVseSBuZWVkIHRvIGZhY3RvciBjb2RlIGEgYml0Ci0gKiAgICAgICAgICBiZXR0dGVyLi4uIGFsc28gbWFrZSBzZW5zb3IgZGV0ZWN0aW9uIG1vcmUgcm9idXN0IHVzaW5nCisgKiAgICAgICAgICBiZXR0ZXIuLi4gYWxzbyBtYWtlIHNlbnNvciBkZXRlY3Rpb24gbW9yZSByb2J1c3QgdXNpbmcKICAqICAgICAgICAgIHRoZSBkZXZpY2UtdHJlZSB0byBwcm9iZSBmb3IgdGhlbQogICogICAgICAgIC0gRmlndXJlIG91dCBob3cgdG8gZ2V0IHRoZSBzbG90cyBjb25zdW1wdGlvbiBhbmQgc2V0IHRoZQogICogICAgICAgICAgc2xvdHMgZmFuIGFjY29yZGluZ2x5CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMKaW5kZXggOGIwMjFlYi4uNmNjY2Q2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYwpAQCAtNDAsNyArNDAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KQEAgLTI1MjcsMTIgKzI1MjcsOSBAQAogI2lmIGRlZmluZWQoQ09ORklHX1NVU1BFTkQpICYmIGRlZmluZWQoQ09ORklHX1BQQzMyKQogaW50IHBtdV9zeXNfc3VzcGVuZGVkOwogCi1zdGF0aWMgaW50IHBtdV9zeXNfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHBtdV9zeXNjb3JlX3N1c3BlbmQodm9pZCkKIHsKLQlpZiAoc3RhdGUuZXZlbnQgIT0gUE1fRVZFTlRfU1VTUEVORCB8fCBwbXVfc3lzX3N1c3BlbmRlZCkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBTdXNwZW5kIFBNVSBldmVudCBpbnRlcnJ1cHRzICovXAorCS8qIFN1c3BlbmQgUE1VIGV2ZW50IGludGVycnVwdHMgKi8KIAlwbXVfc3VzcGVuZCgpOwogCXBtdV9zeXNfc3VzcGVuZGVkID0gMTsKIApAQCAtMjU0NCwxMiArMjU0MSwxMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHBtdV9zeXNfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYpCitzdGF0aWMgdm9pZCBwbXVfc3lzY29yZV9yZXN1bWUodm9pZCkKIHsKIAlzdHJ1Y3QgYWRiX3JlcXVlc3QgcmVxOwogCiAJaWYgKCFwbXVfc3lzX3N1c3BlbmRlZCkKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKIAogCS8qIFRlbGwgUE1VIHdlIGFyZSByZWFkeSAqLwogCXBtdV9yZXF1ZXN0KCZyZXEsIE5VTEwsIDIsIFBNVV9TWVNURU1fUkVBRFksIDIpOwpAQCAtMjU2Miw1MCArMjU1OSwyMSBAQAogCS8qIFJlc3VtZSBQTVUgZXZlbnQgaW50ZXJydXB0cyAqLwogCXBtdV9yZXN1bWUoKTsKIAlwbXVfc3lzX3N1c3BlbmRlZCA9IDA7Ci0KLQlyZXR1cm4gMDsKIH0KIAotI2VuZGlmIC8qIENPTkZJR19TVVNQRU5EICYmIENPTkZJR19QUEMzMiAqLwotCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBwbXVfc3lzY2xhc3MgPSB7Ci0JLm5hbWUgPSAicG11IiwKK3N0YXRpYyBzdHJ1Y3Qgc3lzY29yZV9vcHMgcG11X3N5c2NvcmVfb3BzID0geworCS5zdXNwZW5kID0gcG11X3N5c2NvcmVfc3VzcGVuZCwKKwkucmVzdW1lID0gcG11X3N5c2NvcmVfcmVzdW1lLAogfTsKIAotc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIGRldmljZV9wbXUgPSB7Ci0JLmNscwkJPSAmcG11X3N5c2NsYXNzLAotfTsKLQotc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIGRyaXZlcl9wbXUgPSB7Ci0jaWYgZGVmaW5lZChDT05GSUdfU1VTUEVORCkgJiYgZGVmaW5lZChDT05GSUdfUFBDMzIpCi0JLnN1c3BlbmQJPSAmcG11X3N5c19zdXNwZW5kLAotCS5yZXN1bWUJCT0gJnBtdV9zeXNfcmVzdW1lLAotI2VuZGlmIC8qIENPTkZJR19TVVNQRU5EICYmIENPTkZJR19QUEMzMiAqLwotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9wbXVfc3lzZnModm9pZCkKK3N0YXRpYyBpbnQgcG11X3N5c2NvcmVfcmVnaXN0ZXIodm9pZCkKIHsKLQlpbnQgcmM7CisJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJnBtdV9zeXNjb3JlX29wcyk7CiAKLQlyYyA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmcG11X3N5c2NsYXNzKTsKLQlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgcmVnaXN0ZXJpbmcgUE1VIHN5cyBjbGFzc1xuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlyYyA9IHN5c2Rldl9yZWdpc3RlcigmZGV2aWNlX3BtdSk7Ci0JaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHJlZ2lzdGVyaW5nIFBNVSBzeXMgZGV2aWNlXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCXJjID0gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmcG11X3N5c2NsYXNzLCAmZHJpdmVyX3BtdSk7Ci0JaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHJlZ2lzdGVyaW5nIFBNVSBzeXMgZHJpdmVyXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQogCXJldHVybiAwOwogfQotCi1zdWJzeXNfaW5pdGNhbGwoaW5pdF9wbXVfc3lzZnMpOworc3Vic3lzX2luaXRjYWxsKHBtdV9zeXNjb3JlX3JlZ2lzdGVyKTsKKyNlbmRpZiAvKiBDT05GSUdfU1VTUEVORCAmJiBDT05GSUdfUFBDMzIgKi8KIAogRVhQT1JUX1NZTUJPTChwbXVfcmVxdWVzdCk7CiBFWFBPUlRfU1lNQk9MKHBtdV9xdWV1ZV9yZXF1ZXN0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvYml0bWFwLmMgYi9kcml2ZXJzL21kL2JpdG1hcC5jCmluZGV4IDVjOTM2MjcuLjcwYmQ3MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvYml0bWFwLmMKKysrIGIvZHJpdmVycy9tZC9iaXRtYXAuYwpAQCAtNDkzLDExICs0OTMsMTEgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiaXRtYXAtPmxvY2ssIGZsYWdzKTsKIAlzYiA9IGttYXBfYXRvbWljKGJpdG1hcC0+c2JfcGFnZSwgS01fVVNFUjApOwogCXNiLT5ldmVudHMgPSBjcHVfdG9fbGU2NChiaXRtYXAtPm1kZGV2LT5ldmVudHMpOwotCWlmIChiaXRtYXAtPm1kZGV2LT5ldmVudHMgPCBiaXRtYXAtPmV2ZW50c19jbGVhcmVkKSB7CisJaWYgKGJpdG1hcC0+bWRkZXYtPmV2ZW50cyA8IGJpdG1hcC0+ZXZlbnRzX2NsZWFyZWQpCiAJCS8qIHJvY2tpbmcgYmFjayB0byByZWFkLW9ubHkgKi8KIAkJYml0bWFwLT5ldmVudHNfY2xlYXJlZCA9IGJpdG1hcC0+bWRkZXYtPmV2ZW50czsKLQkJc2ItPmV2ZW50c19jbGVhcmVkID0gY3B1X3RvX2xlNjQoYml0bWFwLT5ldmVudHNfY2xlYXJlZCk7Ci0JfQorCXNiLT5ldmVudHNfY2xlYXJlZCA9IGNwdV90b19sZTY0KGJpdG1hcC0+ZXZlbnRzX2NsZWFyZWQpOworCXNiLT5zdGF0ZSA9IGNwdV90b19sZTMyKGJpdG1hcC0+ZmxhZ3MpOwogCS8qIEp1c3QgaW4gY2FzZSB0aGVzZSBoYXZlIGJlZW4gY2hhbmdlZCB2aWEgc3lzZnM6ICovCiAJc2ItPmRhZW1vbl9zbGVlcCA9IGNwdV90b19sZTMyKGJpdG1hcC0+bWRkZXYtPmJpdG1hcF9pbmZvLmRhZW1vbl9zbGVlcC9IWik7CiAJc2ItPndyaXRlX2JlaGluZCA9IGNwdV90b19sZTMyKGJpdG1hcC0+bWRkZXYtPmJpdG1hcF9pbmZvLm1heF93cml0ZV9iZWhpbmQpOwpAQCAtNjE4LDcgKzYxOCw3IEBACiAJaWYgKGxlMzJfdG9fY3B1KHNiLT52ZXJzaW9uKSA9PSBCSVRNQVBfTUFKT1JfSE9TVEVORElBTikKIAkJYml0bWFwLT5mbGFncyB8PSBCSVRNQVBfSE9TVEVORElBTjsKIAliaXRtYXAtPmV2ZW50c19jbGVhcmVkID0gbGU2NF90b19jcHUoc2ItPmV2ZW50c19jbGVhcmVkKTsKLQlpZiAoc2ItPnN0YXRlICYgY3B1X3RvX2xlMzIoQklUTUFQX1NUQUxFKSkKKwlpZiAoYml0bWFwLT5mbGFncyAmIEJJVE1BUF9TVEFMRSkKIAkJYml0bWFwLT5ldmVudHNfY2xlYXJlZCA9IGJpdG1hcC0+bWRkZXYtPmV2ZW50czsKIAllcnIgPSAwOwogb3V0OgpAQCAtNjUyLDkgKzY1MiwxMSBAQAogCXN3aXRjaCAob3ApIHsKIAljYXNlIE1BU0tfU0VUOgogCQlzYi0+c3RhdGUgfD0gY3B1X3RvX2xlMzIoYml0cyk7CisJCWJpdG1hcC0+ZmxhZ3MgfD0gYml0czsKIAkJYnJlYWs7CiAJY2FzZSBNQVNLX1VOU0VUOgogCQlzYi0+c3RhdGUgJj0gY3B1X3RvX2xlMzIofmJpdHMpOworCQliaXRtYXAtPmZsYWdzICY9IH5iaXRzOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlCVUcoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuYwppbmRleCA3ZDZmN2YxLi5hYTY0MGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmMKKysrIGIvZHJpdmVycy9tZC9tZC5jCkBAIC0zMzI0LDcgKzMzMjQsNyBAQAogCWNoYXIgKmU7CiAJdW5zaWduZWQgbG9uZyBsb25nIG4gPSBzaW1wbGVfc3RydG91bGwoYnVmLCAmZSwgMTApOwogCi0JaWYgKG1kZGV2LT5wZXJzKQorCWlmIChtZGRldi0+cGVycyAmJiAhdGVzdF9iaXQoTURfUkVDT1ZFUllfRlJPWkVOLCAmbWRkZXYtPnJlY292ZXJ5KSkKIAkJcmV0dXJuIC1FQlVTWTsKIAlpZiAoY21kX21hdGNoKGJ1ZiwgIm5vbmUiKSkKIAkJbiA9IE1heFNlY3RvcjsKQEAgLTQzNDcsMTMgKzQzNDcsMTkgQEAKIAlkaXNrLT5mb3BzID0gJm1kX2ZvcHM7CiAJZGlzay0+cHJpdmF0ZV9kYXRhID0gbWRkZXY7CiAJZGlzay0+cXVldWUgPSBtZGRldi0+cXVldWU7CisJYmxrX3F1ZXVlX2ZsdXNoKG1kZGV2LT5xdWV1ZSwgUkVRX0ZMVVNIIHwgUkVRX0ZVQSk7CiAJLyogQWxsb3cgZXh0ZW5kZWQgcGFydGl0aW9ucy4gIFRoaXMgbWFrZXMgdGhlCiAJICogJ21kcCcgZGV2aWNlIHJlZHVuZGFudCwgYnV0IHdlIGNhbid0IHJlYWxseQogCSAqIHJlbW92ZSBpdCBub3cuCiAJICovCiAJZGlzay0+ZmxhZ3MgfD0gR0VOSERfRkxfRVhUX0RFVlQ7Ci0JYWRkX2Rpc2soZGlzayk7CiAJbWRkZXYtPmdlbmRpc2sgPSBkaXNrOworCS8qIEFzIHNvb24gYXMgd2UgY2FsbCBhZGRfZGlzaygpLCBhbm90aGVyIHRocmVhZCBjb3VsZCBnZXQKKwkgKiB0aHJvdWdoIHRvIG1kX29wZW4sIHNvIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IGdldCB0b28gZmFyCisJICovCisJbXV0ZXhfbG9jaygmbWRkZXYtPm9wZW5fbXV0ZXgpOworCWFkZF9kaXNrKGRpc2spOworCiAJZXJyb3IgPSBrb2JqZWN0X2luaXRfYW5kX2FkZCgmbWRkZXYtPmtvYmosICZtZF9rdHlwZSwKIAkJCQkgICAgICZkaXNrX3RvX2RldihkaXNrKS0+a29iaiwgIiVzIiwgIm1kIik7CiAJaWYgKGVycm9yKSB7CkBAIC00MzY3LDggKzQzNzMsNyBAQAogCWlmIChtZGRldi0+a29iai5zZCAmJgogCSAgICBzeXNmc19jcmVhdGVfZ3JvdXAoJm1kZGV2LT5rb2JqLCAmbWRfYml0bWFwX2dyb3VwKSkKIAkJcHJpbnRrKEtFUk5fREVCVUcgInBvaW50bGVzcyB3YXJuaW5nXG4iKTsKLQotCWJsa19xdWV1ZV9mbHVzaChtZGRldi0+cXVldWUsIFJFUV9GTFVTSCB8IFJFUV9GVUEpOworCW11dGV4X3VubG9jaygmbWRkZXYtPm9wZW5fbXV0ZXgpOwogIGFib3J0OgogCW11dGV4X3VubG9jaygmZGlza3NfbXV0ZXgpOwogCWlmICghZXJyb3IgJiYgbWRkZXYtPmtvYmouc2QpIHsKQEAgLTUyMTEsNiArNTIxNiwxNiBAQAogCQl9IGVsc2UKIAkJCXN1cGVyX3R5cGVzW21kZGV2LT5tYWpvcl92ZXJzaW9uXS4KIAkJCQl2YWxpZGF0ZV9zdXBlcihtZGRldiwgcmRldik7CisJCWlmICgoaW5mby0+c3RhdGUgJiAoMTw8TURfRElTS19TWU5DKSkgJiYKKwkJICAgICghdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSB8fAorCQkgICAgIHJkZXYtPnJhaWRfZGlzayAhPSBpbmZvLT5yYWlkX2Rpc2spKSB7CisJCQkvKiBUaGlzIHdhcyBhIGhvdC1hZGQgcmVxdWVzdCwgYnV0IGV2ZW50cyBkb2Vzbid0CisJCQkgKiBtYXRjaCwgc28gcmVqZWN0IGl0LgorCQkJICovCisJCQlleHBvcnRfcmRldihyZGV2KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKIAkJaWYgKHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpCiAJCQlyZGV2LT5zYXZlZF9yYWlkX2Rpc2sgPSByZGV2LT5yYWlkX2Rpc2s7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMgYi9kcml2ZXJzL21kL211bHRpcGF0aC5jCmluZGV4IGMzNTg5MDkuLjM1MzVjMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMKKysrIGIvZHJpdmVycy9tZC9tdWx0aXBhdGguYwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJaW50IGk7CiAJCiAJc2VxX3ByaW50ZiAoc2VxLCAiIFslZC8lZF0gWyIsIGNvbmYtPnJhaWRfZGlza3MsCi0JCQkJCQkgY29uZi0+d29ya2luZ19kaXNrcyk7CisJCSAgICBjb25mLT5yYWlkX2Rpc2tzIC0gbWRkZXYtPmRlZ3JhZGVkKTsKIAlmb3IgKGkgPSAwOyBpIDwgY29uZi0+cmFpZF9kaXNrczsgaSsrKQogCQlzZXFfcHJpbnRmIChzZXEsICIlcyIsCiAJCQkgICAgICAgY29uZi0+bXVsdGlwYXRoc1tpXS5yZGV2ICYmIApAQCAtMTg2LDM1ICsxODYsMzYgQEAKIHN0YXRpYyB2b2lkIG11bHRpcGF0aF9lcnJvciAobWRkZXZfdCAqbWRkZXYsIG1ka19yZGV2X3QgKnJkZXYpCiB7CiAJbXVsdGlwYXRoX2NvbmZfdCAqY29uZiA9IG1kZGV2LT5wcml2YXRlOworCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKIAotCWlmIChjb25mLT53b3JraW5nX2Rpc2tzIDw9IDEpIHsKKwlpZiAoY29uZi0+cmFpZF9kaXNrcyAtIG1kZGV2LT5kZWdyYWRlZCA8PSAxKSB7CiAJCS8qCiAJCSAqIFVoIG9oLCB3ZSBjYW4gZG8gbm90aGluZyBpZiB0aGlzIGlzIG91ciBsYXN0IHBhdGgsIGJ1dAogCQkgKiBmaXJzdCBjaGVjayBpZiB0aGlzIGlzIGEgcXVldWVkIHJlcXVlc3QgZm9yIGEgZGV2aWNlCiAJCSAqIHdoaWNoIGhhcyBqdXN0IGZhaWxlZC4KIAkJICovCiAJCXByaW50ayhLRVJOX0FMRVJUIAotCQkJIm11bHRpcGF0aDogb25seSBvbmUgSU8gcGF0aCBsZWZ0IGFuZCBJTyBlcnJvci5cbiIpOworCQkgICAgICAgIm11bHRpcGF0aDogb25seSBvbmUgSU8gcGF0aCBsZWZ0IGFuZCBJTyBlcnJvci5cbiIpOwogCQkvKiBsZWF2ZSBpdCBhY3RpdmUuLi4gaXQncyBhbGwgd2UgaGF2ZSAqLwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIE1hcmsgZGlzayBhcyB1bnVzYWJsZQotCQkgKi8KLQkJaWYgKCF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpIHsKLQkJCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKLQkJCWNsZWFyX2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOwotCQkJc2V0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncyk7Ci0JCQlzZXRfYml0KE1EX0NIQU5HRV9ERVZTLCAmbWRkZXYtPmZsYWdzKTsKLQkJCWNvbmYtPndvcmtpbmdfZGlza3MtLTsKLQkJCW1kZGV2LT5kZWdyYWRlZCsrOwotCQkJcHJpbnRrKEtFUk5fQUxFUlQgIm11bHRpcGF0aDogSU8gZmFpbHVyZSBvbiAlcywiCi0JCQkJIiBkaXNhYmxpbmcgSU8gcGF0aC5cbiIKLQkJCQkibXVsdGlwYXRoOiBPcGVyYXRpb24gY29udGludWluZyIKLQkJCQkiIG9uICVkIElPIHBhdGhzLlxuIiwKLQkJCQliZGV2bmFtZSAocmRldi0+YmRldixiKSwKLQkJCQljb25mLT53b3JraW5nX2Rpc2tzKTsKLQkJfQorCQlyZXR1cm47CiAJfQorCS8qCisJICogTWFyayBkaXNrIGFzIHVudXNhYmxlCisJICovCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjb25mLT5kZXZpY2VfbG9jaywgZmxhZ3MpOworCQltZGRldi0+ZGVncmFkZWQrKzsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwl9CisJc2V0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncyk7CisJc2V0X2JpdChNRF9DSEFOR0VfREVWUywgJm1kZGV2LT5mbGFncyk7CisJcHJpbnRrKEtFUk5fQUxFUlQgIm11bHRpcGF0aDogSU8gZmFpbHVyZSBvbiAlcywiCisJICAgICAgICIgZGlzYWJsaW5nIElPIHBhdGguXG4iCisJICAgICAgICJtdWx0aXBhdGg6IE9wZXJhdGlvbiBjb250aW51aW5nIgorCSAgICAgICAiIG9uICVkIElPIHBhdGhzLlxuIiwKKwkgICAgICAgYmRldm5hbWUocmRldi0+YmRldiwgYiksCisJICAgICAgIGNvbmYtPnJhaWRfZGlza3MgLSBtZGRldi0+ZGVncmFkZWQpOwogfQogCiBzdGF0aWMgdm9pZCBwcmludF9tdWx0aXBhdGhfY29uZiAobXVsdGlwYXRoX2NvbmZfdCAqY29uZikKQEAgLTIyNyw3ICsyMjgsNyBAQAogCQlwcmludGsoIihjb25mPT1OVUxMKVxuIik7CiAJCXJldHVybjsKIAl9Ci0JcHJpbnRrKCIgLS0tIHdkOiVkIHJkOiVkXG4iLCBjb25mLT53b3JraW5nX2Rpc2tzLAorCXByaW50aygiIC0tLSB3ZDolZCByZDolZFxuIiwgY29uZi0+cmFpZF9kaXNrcyAtIGNvbmYtPm1kZGV2LT5kZWdyYWRlZCwKIAkJCSBjb25mLT5yYWlkX2Rpc2tzKTsKIAogCWZvciAoaSA9IDA7IGkgPCBjb25mLT5yYWlkX2Rpc2tzOyBpKyspIHsKQEAgLTI3NCwxMCArMjc1LDExIEBACiAJCQkJCQkJICAgUEFHRV9DQUNIRV9TSVpFIC0gMSk7CiAJCQl9CiAKLQkJCWNvbmYtPndvcmtpbmdfZGlza3MrKzsKKwkJCXNwaW5fbG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKIAkJCW1kZGV2LT5kZWdyYWRlZC0tOwogCQkJcmRldi0+cmFpZF9kaXNrID0gcGF0aDsKIAkJCXNldF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCQkJcmN1X2Fzc2lnbl9wb2ludGVyKHAtPnJkZXYsIHJkZXYpOwogCQkJZXJyID0gMDsKIAkJCW1kX2ludGVncml0eV9hZGRfcmRldihyZGV2LCBtZGRldik7CkBAIC0zOTEsNiArMzkzLDcgQEAKIAlpbnQgZGlza19pZHg7CiAJc3RydWN0IG11bHRpcGF0aF9pbmZvICpkaXNrOwogCW1ka19yZGV2X3QgKnJkZXY7CisJaW50IHdvcmtpbmdfZGlza3M7CiAKIAlpZiAobWRfY2hlY2tfbm9fYml0bWFwKG1kZGV2KSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00MjQsNyArNDI3LDcgQEAKIAkJZ290byBvdXRfZnJlZV9jb25mOwogCX0KIAotCWNvbmYtPndvcmtpbmdfZGlza3MgPSAwOworCXdvcmtpbmdfZGlza3MgPSAwOwogCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpIHsKIAkJZGlza19pZHggPSByZGV2LT5yYWlkX2Rpc2s7CiAJCWlmIChkaXNrX2lkeCA8IDAgfHwKQEAgLTQ0Niw3ICs0NDksNyBAQAogCQl9CiAKIAkJaWYgKCF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpCi0JCQljb25mLT53b3JraW5nX2Rpc2tzKys7CisJCQl3b3JraW5nX2Rpc2tzKys7CiAJfQogCiAJY29uZi0+cmFpZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzOwpAQCAtNDU0LDEyICs0NTcsMTIgQEAKIAlzcGluX2xvY2tfaW5pdCgmY29uZi0+ZGV2aWNlX2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZjb25mLT5yZXRyeV9saXN0KTsKIAotCWlmICghY29uZi0+d29ya2luZ19kaXNrcykgeworCWlmICghd29ya2luZ19kaXNrcykgewogCQlwcmludGsoS0VSTl9FUlIgIm11bHRpcGF0aDogbm8gb3BlcmF0aW9uYWwgSU8gcGF0aHMgZm9yICVzXG4iLAogCQkJbWRuYW1lKG1kZGV2KSk7CiAJCWdvdG8gb3V0X2ZyZWVfY29uZjsKIAl9Ci0JbWRkZXYtPmRlZ3JhZGVkID0gY29uZi0+cmFpZF9kaXNrcyAtIGNvbmYtPndvcmtpbmdfZGlza3M7CisJbWRkZXYtPmRlZ3JhZGVkID0gY29uZi0+cmFpZF9kaXNrcyAtIHdvcmtpbmdfZGlza3M7CiAKIAljb25mLT5wb29sID0gbWVtcG9vbF9jcmVhdGVfa21hbGxvY19wb29sKE5SX1JFU0VSVkVEX0JVRlMsCiAJCQkJCQkgc2l6ZW9mKHN0cnVjdCBtdWx0aXBhdGhfYmgpKTsKQEAgLTQ4MSw3ICs0ODQsOCBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAKIAkJIm11bHRpcGF0aDogYXJyYXkgJXMgYWN0aXZlIHdpdGggJWQgb3V0IG9mICVkIElPIHBhdGhzXG4iLAotCQltZG5hbWUobWRkZXYpLCBjb25mLT53b3JraW5nX2Rpc2tzLCBtZGRldi0+cmFpZF9kaXNrcyk7CisJCW1kbmFtZShtZGRldiksIGNvbmYtPnJhaWRfZGlza3MgLSBtZGRldi0+ZGVncmFkZWQsCisJICAgICAgIG1kZGV2LT5yYWlkX2Rpc2tzKTsKIAkvKgogCSAqIE9rLCBldmVyeXRoaW5nIGlzIGp1c3QgZmluZSBub3cKIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmggYi9kcml2ZXJzL21kL211bHRpcGF0aC5oCmluZGV4IGQxYzJhOGQuLjNjNWE0NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmgKKysrIGIvZHJpdmVycy9tZC9tdWx0aXBhdGguaApAQCAtOSw3ICs5LDYgQEAKIAltZGRldl90CQkJKm1kZGV2OwogCXN0cnVjdCBtdWx0aXBhdGhfaW5mbwkqbXVsdGlwYXRoczsKIAlpbnQJCQlyYWlkX2Rpc2tzOwotCWludAkJCXdvcmtpbmdfZGlza3M7CiAJc3BpbmxvY2tfdAkJZGV2aWNlX2xvY2s7CiAJc3RydWN0IGxpc3RfaGVhZAlyZXRyeV9saXN0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxLmMgYi9kcml2ZXJzL21kL3JhaWQxLmMKaW5kZXggMmI3YTdmZi4uNWQwOTYwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkMS5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEuYwpAQCAtMjk3LDIzICsyOTcsMjQgQEAKIAlyZGV2X2RlY19wZW5kaW5nKGNvbmYtPm1pcnJvcnNbbWlycm9yXS5yZGV2LCBjb25mLT5tZGRldik7CiB9CiAKLXN0YXRpYyB2b2lkIHIxX2Jpb193cml0ZV9kb25lKHIxYmlvX3QgKnIxX2JpbywgaW50IHZjbnQsIHN0cnVjdCBiaW9fdmVjICpidiwKLQkJCSAgICAgIGludCBiZWhpbmQpCitzdGF0aWMgdm9pZCByMV9iaW9fd3JpdGVfZG9uZShyMWJpb190ICpyMV9iaW8pCiB7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnIxX2Jpby0+cmVtYWluaW5nKSkKIAl7CiAJCS8qIGl0IHJlYWxseSBpcyB0aGUgZW5kIG9mIHRoaXMgcmVxdWVzdCAqLwogCQlpZiAodGVzdF9iaXQoUjFCSU9fQmVoaW5kSU8sICZyMV9iaW8tPnN0YXRlKSkgewogCQkJLyogZnJlZSBleHRyYSBjb3B5IG9mIHRoZSBkYXRhIHBhZ2VzICovCi0JCQlpbnQgaSA9IHZjbnQ7CisJCQlpbnQgaSA9IHIxX2Jpby0+YmVoaW5kX3BhZ2VfY291bnQ7CiAJCQl3aGlsZSAoaS0tKQotCQkJCXNhZmVfcHV0X3BhZ2UoYnZbaV0uYnZfcGFnZSk7CisJCQkJc2FmZV9wdXRfcGFnZShyMV9iaW8tPmJlaGluZF9wYWdlc1tpXSk7CisJCQlrZnJlZShyMV9iaW8tPmJlaGluZF9wYWdlcyk7CisJCQlyMV9iaW8tPmJlaGluZF9wYWdlcyA9IE5VTEw7CiAJCX0KIAkJLyogY2xlYXIgdGhlIGJpdG1hcCBpZiBhbGwgd3JpdGVzIGNvbXBsZXRlIHN1Y2Nlc3NmdWxseSAqLwogCQliaXRtYXBfZW5kd3JpdGUocjFfYmlvLT5tZGRldi0+Yml0bWFwLCByMV9iaW8tPnNlY3RvciwKIAkJCQlyMV9iaW8tPnNlY3RvcnMsCiAJCQkJIXRlc3RfYml0KFIxQklPX0RlZ3JhZGVkLCAmcjFfYmlvLT5zdGF0ZSksCi0JCQkJYmVoaW5kKTsKKwkJCQl0ZXN0X2JpdChSMUJJT19CZWhpbmRJTywgJnIxX2Jpby0+c3RhdGUpKTsKIAkJbWRfd3JpdGVfZW5kKHIxX2Jpby0+bWRkZXYpOwogCQlyYWlkX2VuZF9iaW9faW8ocjFfYmlvKTsKIAl9CkBAIC0zODYsNyArMzg3LDcgQEAKIAkgKiBMZXQncyBzZWUgaWYgYWxsIG1pcnJvcmVkIHdyaXRlIG9wZXJhdGlvbnMgaGF2ZSBmaW5pc2hlZAogCSAqIGFscmVhZHkuCiAJICovCi0JcjFfYmlvX3dyaXRlX2RvbmUocjFfYmlvLCBiaW8tPmJpX3ZjbnQsIGJpby0+YmlfaW9fdmVjLCBiZWhpbmQpOworCXIxX2Jpb193cml0ZV9kb25lKHIxX2Jpbyk7CiAKIAlpZiAodG9fcHV0KQogCQliaW9fcHV0KHRvX3B1dCk7CkBAIC00MTEsMTAgKzQxMiwxMCBAQAogewogCWNvbnN0IHNlY3Rvcl90IHRoaXNfc2VjdG9yID0gcjFfYmlvLT5zZWN0b3I7CiAJY29uc3QgaW50IHNlY3RvcnMgPSByMV9iaW8tPnNlY3RvcnM7Ci0JaW50IG5ld19kaXNrID0gLTE7CiAJaW50IHN0YXJ0X2Rpc2s7CisJaW50IGJlc3RfZGlzazsKIAlpbnQgaTsKLQlzZWN0b3JfdCBuZXdfZGlzdGFuY2UsIGN1cnJlbnRfZGlzdGFuY2U7CisJc2VjdG9yX3QgYmVzdF9kaXN0OwogCW1ka19yZGV2X3QgKnJkZXY7CiAJaW50IGNob29zZV9maXJzdDsKIApAQCAtNDI1LDYgKzQyNiw4IEBACiAJICogV2UgdGFrZSB0aGUgZmlyc3QgcmVhZGFibGUgZGlzayB3aGVuIGFib3ZlIHRoZSByZXN5bmMgd2luZG93LgogCSAqLwogIHJldHJ5OgorCWJlc3RfZGlzayA9IC0xOworCWJlc3RfZGlzdCA9IE1heFNlY3RvcjsKIAlpZiAoY29uZi0+bWRkZXYtPnJlY292ZXJ5X2NwIDwgTWF4U2VjdG9yICYmCiAJICAgICh0aGlzX3NlY3RvciArIHNlY3RvcnMgPj0gY29uZi0+bmV4dF9yZXN5bmMpKSB7CiAJCWNob29zZV9maXJzdCA9IDE7CkBAIC00MzQsOCArNDM3LDggQEAKIAkJc3RhcnRfZGlzayA9IGNvbmYtPmxhc3RfdXNlZDsKIAl9CiAKLQkvKiBtYWtlIHN1cmUgdGhlIGRpc2sgaXMgb3BlcmF0aW9uYWwgKi8KIAlmb3IgKGkgPSAwIDsgaSA8IGNvbmYtPnJhaWRfZGlza3MgOyBpKyspIHsKKwkJc2VjdG9yX3QgZGlzdDsKIAkJaW50IGRpc2sgPSBzdGFydF9kaXNrICsgaTsKIAkJaWYgKGRpc2sgPj0gY29uZi0+cmFpZF9kaXNrcykKIAkJCWRpc2sgLT0gY29uZi0+cmFpZF9kaXNrczsKQEAgLTQ0Myw2MCArNDQ2LDQzIEBACiAJCXJkZXYgPSByY3VfZGVyZWZlcmVuY2UoY29uZi0+bWlycm9yc1tkaXNrXS5yZGV2KTsKIAkJaWYgKHIxX2Jpby0+Ymlvc1tkaXNrXSA9PSBJT19CTE9DS0VECiAJCSAgICB8fCByZGV2ID09IE5VTEwKLQkJICAgIHx8ICF0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKQorCQkgICAgfHwgdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKQogCQkJY29udGludWU7Ci0KLQkJbmV3X2Rpc2sgPSBkaXNrOwotCQlpZiAoIXRlc3RfYml0KFdyaXRlTW9zdGx5LCAmcmRldi0+ZmxhZ3MpKQotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKG5ld19kaXNrIDwgMCB8fCBjaG9vc2VfZmlyc3QpCi0JCWdvdG8gcmJfb3V0OwotCi0JLyoKLQkgKiBEb24ndCBjaGFuZ2UgdG8gYW5vdGhlciBkaXNrIGZvciBzZXF1ZW50aWFsIHJlYWRzOgotCSAqLwotCWlmIChjb25mLT5uZXh0X3NlcV9zZWN0ID09IHRoaXNfc2VjdG9yKQotCQlnb3RvIHJiX291dDsKLQlpZiAodGhpc19zZWN0b3IgPT0gY29uZi0+bWlycm9yc1tuZXdfZGlza10uaGVhZF9wb3NpdGlvbikKLQkJZ290byByYl9vdXQ7Ci0KLQljdXJyZW50X2Rpc3RhbmNlID0gYWJzKHRoaXNfc2VjdG9yIAotCQkJICAgICAgIC0gY29uZi0+bWlycm9yc1tuZXdfZGlza10uaGVhZF9wb3NpdGlvbik7Ci0KLQkvKiBsb29rIGZvciBhIGJldHRlciBkaXNrIC0gaS5lLiBoZWFkIGlzIGNsb3NlciAqLwotCXN0YXJ0X2Rpc2sgPSBuZXdfZGlzazsKLQlmb3IgKGkgPSAxOyBpIDwgY29uZi0+cmFpZF9kaXNrczsgaSsrKSB7Ci0JCWludCBkaXNrID0gc3RhcnRfZGlzayArIDE7Ci0JCWlmIChkaXNrID49IGNvbmYtPnJhaWRfZGlza3MpCi0JCQlkaXNrIC09IGNvbmYtPnJhaWRfZGlza3M7Ci0KLQkJcmRldiA9IHJjdV9kZXJlZmVyZW5jZShjb25mLT5taXJyb3JzW2Rpc2tdLnJkZXYpOwotCQlpZiAocjFfYmlvLT5iaW9zW2Rpc2tdID09IElPX0JMT0NLRUQKLQkJICAgIHx8IHJkZXYgPT0gTlVMTAotCQkgICAgfHwgIXRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykKLQkJICAgIHx8IHRlc3RfYml0KFdyaXRlTW9zdGx5LCAmcmRldi0+ZmxhZ3MpKQorCQlpZiAoIXRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykgJiYKKwkJICAgIHJkZXYtPnJlY292ZXJ5X29mZnNldCA8IHRoaXNfc2VjdG9yICsgc2VjdG9ycykKIAkJCWNvbnRpbnVlOwotCi0JCWlmICghYXRvbWljX3JlYWQoJnJkZXYtPm5yX3BlbmRpbmcpKSB7Ci0JCQluZXdfZGlzayA9IGRpc2s7CisJCWlmICh0ZXN0X2JpdChXcml0ZU1vc3RseSwgJnJkZXYtPmZsYWdzKSkgeworCQkJLyogRG9uJ3QgYmFsYW5jZSBhbW9uZyB3cml0ZS1tb3N0bHksIGp1c3QKKwkJCSAqIHVzZSB0aGUgZmlyc3QgYXMgYSBsYXN0IHJlc29ydCAqLworCQkJaWYgKGJlc3RfZGlzayA8IDApCisJCQkJYmVzdF9kaXNrID0gZGlzazsKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIFRoaXMgaXMgYSByZWFzb25hYmxlIGRldmljZSB0byB1c2UuICBJdCBtaWdodAorCQkgKiBldmVuIGJlIGJlc3QuCisJCSAqLworCQlkaXN0ID0gYWJzKHRoaXNfc2VjdG9yIC0gY29uZi0+bWlycm9yc1tkaXNrXS5oZWFkX3Bvc2l0aW9uKTsKKwkJaWYgKGNob29zZV9maXJzdAorCQkgICAgLyogRG9uJ3QgY2hhbmdlIHRvIGFub3RoZXIgZGlzayBmb3Igc2VxdWVudGlhbCByZWFkcyAqLworCQkgICAgfHwgY29uZi0+bmV4dF9zZXFfc2VjdCA9PSB0aGlzX3NlY3RvcgorCQkgICAgfHwgZGlzdCA9PSAwCisJCSAgICAvKiBJZiBkZXZpY2UgaXMgaWRsZSwgdXNlIGl0ICovCisJCSAgICB8fCBhdG9taWNfcmVhZCgmcmRldi0+bnJfcGVuZGluZykgPT0gMCkgeworCQkJYmVzdF9kaXNrID0gZGlzazsKIAkJCWJyZWFrOwogCQl9Ci0JCW5ld19kaXN0YW5jZSA9IGFicyh0aGlzX3NlY3RvciAtIGNvbmYtPm1pcnJvcnNbZGlza10uaGVhZF9wb3NpdGlvbik7Ci0JCWlmIChuZXdfZGlzdGFuY2UgPCBjdXJyZW50X2Rpc3RhbmNlKSB7Ci0JCQljdXJyZW50X2Rpc3RhbmNlID0gbmV3X2Rpc3RhbmNlOwotCQkJbmV3X2Rpc2sgPSBkaXNrOworCQlpZiAoZGlzdCA8IGJlc3RfZGlzdCkgeworCQkJYmVzdF9kaXN0ID0gZGlzdDsKKwkJCWJlc3RfZGlzayA9IGRpc2s7CiAJCX0KIAl9CiAKLSByYl9vdXQ6Ci0JaWYgKG5ld19kaXNrID49IDApIHsKLQkJcmRldiA9IHJjdV9kZXJlZmVyZW5jZShjb25mLT5taXJyb3JzW25ld19kaXNrXS5yZGV2KTsKKwlpZiAoYmVzdF9kaXNrID49IDApIHsKKwkJcmRldiA9IHJjdV9kZXJlZmVyZW5jZShjb25mLT5taXJyb3JzW2Jlc3RfZGlza10ucmRldik7CiAJCWlmICghcmRldikKIAkJCWdvdG8gcmV0cnk7CiAJCWF0b21pY19pbmMoJnJkZXYtPm5yX3BlbmRpbmcpOwotCQlpZiAoIXRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpIHsKKwkJaWYgKHRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkgewogCQkJLyogY2Fubm90IHJpc2sgcmV0dXJuaW5nIGEgZGV2aWNlIHRoYXQgZmFpbGVkCiAJCQkgKiBiZWZvcmUgd2UgaW5jJ2VkIG5yX3BlbmRpbmcKIAkJCSAqLwpAQCAtNTA0LDExICs0OTAsMTEgQEAKIAkJCWdvdG8gcmV0cnk7CiAJCX0KIAkJY29uZi0+bmV4dF9zZXFfc2VjdCA9IHRoaXNfc2VjdG9yICsgc2VjdG9yczsKLQkJY29uZi0+bGFzdF91c2VkID0gbmV3X2Rpc2s7CisJCWNvbmYtPmxhc3RfdXNlZCA9IGJlc3RfZGlzazsKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQlyZXR1cm4gbmV3X2Rpc2s7CisJcmV0dXJuIGJlc3RfZGlzazsKIH0KIAogc3RhdGljIGludCByYWlkMV9jb25nZXN0ZWQodm9pZCAqZGF0YSwgaW50IGJpdHMpCkBAIC02NzUsMzcgKzY2MSwzNiBAQAogCiAKIC8qIGR1cGxpY2F0ZSB0aGUgZGF0YSBwYWdlcyBmb3IgYmVoaW5kIEkvTyAKLSAqIFdlIHJldHVybiBhIGxpc3Qgb2YgYmlvX3ZlYyByYXRoZXIgdGhhbiBqdXN0IHBhZ2UgcG9pbnRlcnMKLSAqIGFzIGl0IG1ha2VzIGZyZWVpbmcgZWFzaWVyCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgYmlvX3ZlYyAqYWxsb2NfYmVoaW5kX3BhZ2VzKHN0cnVjdCBiaW8gKmJpbykKK3N0YXRpYyB2b2lkIGFsbG9jX2JlaGluZF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHIxYmlvX3QgKnIxX2JpbykKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgYmlvX3ZlYyAqYnZlYzsKLQlzdHJ1Y3QgYmlvX3ZlYyAqcGFnZXMgPSBremFsbG9jKGJpby0+YmlfdmNudCAqIHNpemVvZihzdHJ1Y3QgYmlvX3ZlYyksCisJc3RydWN0IHBhZ2UgKipwYWdlcyA9IGt6YWxsb2MoYmlvLT5iaV92Y250ICogc2l6ZW9mKHN0cnVjdCBwYWdlKiksCiAJCQkJCUdGUF9OT0lPKTsKIAlpZiAodW5saWtlbHkoIXBhZ2VzKSkKLQkJZ290byBkb19zeW5jX2lvOworCQlyZXR1cm47CiAKIAliaW9fZm9yX2VhY2hfc2VnbWVudChidmVjLCBiaW8sIGkpIHsKLQkJcGFnZXNbaV0uYnZfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX05PSU8pOwotCQlpZiAodW5saWtlbHkoIXBhZ2VzW2ldLmJ2X3BhZ2UpKQorCQlwYWdlc1tpXSA9IGFsbG9jX3BhZ2UoR0ZQX05PSU8pOworCQlpZiAodW5saWtlbHkoIXBhZ2VzW2ldKSkKIAkJCWdvdG8gZG9fc3luY19pbzsKLQkJbWVtY3B5KGttYXAocGFnZXNbaV0uYnZfcGFnZSkgKyBidmVjLT5idl9vZmZzZXQsCisJCW1lbWNweShrbWFwKHBhZ2VzW2ldKSArIGJ2ZWMtPmJ2X29mZnNldCwKIAkJCWttYXAoYnZlYy0+YnZfcGFnZSkgKyBidmVjLT5idl9vZmZzZXQsIGJ2ZWMtPmJ2X2xlbik7Ci0JCWt1bm1hcChwYWdlc1tpXS5idl9wYWdlKTsKKwkJa3VubWFwKHBhZ2VzW2ldKTsKIAkJa3VubWFwKGJ2ZWMtPmJ2X3BhZ2UpOwogCX0KLQotCXJldHVybiBwYWdlczsKKwlyMV9iaW8tPmJlaGluZF9wYWdlcyA9IHBhZ2VzOworCXIxX2Jpby0+YmVoaW5kX3BhZ2VfY291bnQgPSBiaW8tPmJpX3ZjbnQ7CisJc2V0X2JpdChSMUJJT19CZWhpbmRJTywgJnIxX2Jpby0+c3RhdGUpOworCXJldHVybjsKIAogZG9fc3luY19pbzoKLQlpZiAocGFnZXMpCi0JCWZvciAoaSA9IDA7IGkgPCBiaW8tPmJpX3ZjbnQgJiYgcGFnZXNbaV0uYnZfcGFnZTsgaSsrKQotCQkJcHV0X3BhZ2UocGFnZXNbaV0uYnZfcGFnZSk7CisJZm9yIChpID0gMDsgaSA8IGJpby0+YmlfdmNudDsgaSsrKQorCQlpZiAocGFnZXNbaV0pCisJCQlwdXRfcGFnZShwYWdlc1tpXSk7CiAJa2ZyZWUocGFnZXMpOwogCVBSSU5USygiJWRCIGJlaGluZCBhbGxvYyBmYWlsZWQsIGRvaW5nIHN5bmMgSS9PXG4iLCBiaW8tPmJpX3NpemUpOwotCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgaW50IG1ha2VfcmVxdWVzdChtZGRldl90ICptZGRldiwgc3RydWN0IGJpbyAqIGJpbykKQEAgLTcxNyw3ICs3MDIsNiBAQAogCWludCBpLCB0YXJnZXRzID0gMCwgZGlza3M7CiAJc3RydWN0IGJpdG1hcCAqYml0bWFwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGJpb192ZWMgKmJlaGluZF9wYWdlcyA9IE5VTEw7CiAJY29uc3QgaW50IHJ3ID0gYmlvX2RhdGFfZGlyKGJpbyk7CiAJY29uc3QgdW5zaWduZWQgbG9uZyBkb19zeW5jID0gKGJpby0+YmlfcncgJiBSRVFfU1lOQyk7CiAJY29uc3QgdW5zaWduZWQgbG9uZyBkb19mbHVzaF9mdWEgPSAoYmlvLT5iaV9ydyAmIChSRVFfRkxVU0ggfCBSRVFfRlVBKSk7CkBAIC04NzAsOSArODU0LDggQEAKIAlpZiAoYml0bWFwICYmCiAJICAgIChhdG9taWNfcmVhZCgmYml0bWFwLT5iZWhpbmRfd3JpdGVzKQogCSAgICAgPCBtZGRldi0+Yml0bWFwX2luZm8ubWF4X3dyaXRlX2JlaGluZCkgJiYKLQkgICAgIXdhaXRxdWV1ZV9hY3RpdmUoJmJpdG1hcC0+YmVoaW5kX3dhaXQpICYmCi0JICAgIChiZWhpbmRfcGFnZXMgPSBhbGxvY19iZWhpbmRfcGFnZXMoYmlvKSkgIT0gTlVMTCkKLQkJc2V0X2JpdChSMUJJT19CZWhpbmRJTywgJnIxX2Jpby0+c3RhdGUpOworCSAgICAhd2FpdHF1ZXVlX2FjdGl2ZSgmYml0bWFwLT5iZWhpbmRfd2FpdCkpCisJCWFsbG9jX2JlaGluZF9wYWdlcyhiaW8sIHIxX2Jpbyk7CiAKIAlhdG9taWNfc2V0KCZyMV9iaW8tPnJlbWFpbmluZywgMSk7CiAJYXRvbWljX3NldCgmcjFfYmlvLT5iZWhpbmRfcmVtYWluaW5nLCAwKTsKQEAgLTg5Myw3ICs4NzYsNyBAQAogCQltYmlvLT5iaV9ydyA9IFdSSVRFIHwgZG9fZmx1c2hfZnVhIHwgZG9fc3luYzsKIAkJbWJpby0+YmlfcHJpdmF0ZSA9IHIxX2JpbzsKIAotCQlpZiAoYmVoaW5kX3BhZ2VzKSB7CisJCWlmIChyMV9iaW8tPmJlaGluZF9wYWdlcykgewogCQkJc3RydWN0IGJpb192ZWMgKmJ2ZWM7CiAJCQlpbnQgajsKIApAQCAtOTA1LDcgKzg4OCw3IEBACiAJCQkgKiB0aGVtIGFsbAogCQkJICovCiAJCQlfX2Jpb19mb3JfZWFjaF9zZWdtZW50KGJ2ZWMsIG1iaW8sIGosIDApCi0JCQkJYnZlYy0+YnZfcGFnZSA9IGJlaGluZF9wYWdlc1tqXS5idl9wYWdlOworCQkJCWJ2ZWMtPmJ2X3BhZ2UgPSByMV9iaW8tPmJlaGluZF9wYWdlc1tqXTsKIAkJCWlmICh0ZXN0X2JpdChXcml0ZU1vc3RseSwgJmNvbmYtPm1pcnJvcnNbaV0ucmRldi0+ZmxhZ3MpKQogCQkJCWF0b21pY19pbmMoJnIxX2Jpby0+YmVoaW5kX3JlbWFpbmluZyk7CiAJCX0KQEAgLTkxNSw4ICs4OTgsNyBAQAogCQliaW9fbGlzdF9hZGQoJmNvbmYtPnBlbmRpbmdfYmlvX2xpc3QsIG1iaW8pOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25mLT5kZXZpY2VfbG9jaywgZmxhZ3MpOwogCX0KLQlyMV9iaW9fd3JpdGVfZG9uZShyMV9iaW8sIGJpby0+YmlfdmNudCwgYmVoaW5kX3BhZ2VzLCBiZWhpbmRfcGFnZXMgIT0gTlVMTCk7Ci0Ja2ZyZWUoYmVoaW5kX3BhZ2VzKTsgLyogdGhlIGJlaGluZCBwYWdlcyBhcmUgYXR0YWNoZWQgdG8gdGhlIGJpb3Mgbm93ICovCisJcjFfYmlvX3dyaXRlX2RvbmUocjFfYmlvKTsKIAogCS8qIEluIGNhc2UgcmFpZDFkIHNudWNrIGluIHRvIGZyZWV6ZV9hcnJheSAqLwogCXdha2VfdXAoJmNvbmYtPndhaXRfYmFycmllcik7CkBAIC0xMTk2LDYgKzExNzgsMTkzIEBACiAJfQogfQogCitzdGF0aWMgaW50IGZpeF9zeW5jX3JlYWRfZXJyb3IocjFiaW9fdCAqcjFfYmlvKQoreworCS8qIFRyeSBzb21lIHN5bmNocm9ub3VzIHJlYWRzIG9mIG90aGVyIGRldmljZXMgdG8gZ2V0CisJICogZ29vZCBkYXRhLCBtdWNoIGxpa2Ugd2l0aCBub3JtYWwgcmVhZCBlcnJvcnMuICBPbmx5CisJICogcmVhZCBpbnRvIHRoZSBwYWdlcyB3ZSBhbHJlYWR5IGhhdmUgc28gd2UgZG9uJ3QKKwkgKiBuZWVkIHRvIHJlLWlzc3VlIHRoZSByZWFkIHJlcXVlc3QuCisJICogV2UgZG9uJ3QgbmVlZCB0byBmcmVlemUgdGhlIGFycmF5LCBiZWNhdXNlIGJlaW5nIGluIGFuCisJICogYWN0aXZlIHN5bmMgcmVxdWVzdCwgdGhlcmUgaXMgbm8gbm9ybWFsIElPLCBhbmQKKwkgKiBubyBvdmVybGFwcGluZyBzeW5jcy4KKwkgKi8KKwltZGRldl90ICptZGRldiA9IHIxX2Jpby0+bWRkZXY7CisJY29uZl90ICpjb25mID0gbWRkZXYtPnByaXZhdGU7CisJc3RydWN0IGJpbyAqYmlvID0gcjFfYmlvLT5iaW9zW3IxX2Jpby0+cmVhZF9kaXNrXTsKKwlzZWN0b3JfdCBzZWN0ID0gcjFfYmlvLT5zZWN0b3I7CisJaW50IHNlY3RvcnMgPSByMV9iaW8tPnNlY3RvcnM7CisJaW50IGlkeCA9IDA7CisKKwl3aGlsZShzZWN0b3JzKSB7CisJCWludCBzID0gc2VjdG9yczsKKwkJaW50IGQgPSByMV9iaW8tPnJlYWRfZGlzazsKKwkJaW50IHN1Y2Nlc3MgPSAwOworCQltZGtfcmRldl90ICpyZGV2OworCQlpbnQgc3RhcnQ7CisKKwkJaWYgKHMgPiAoUEFHRV9TSVpFPj45KSkKKwkJCXMgPSBQQUdFX1NJWkUgPj4gOTsKKwkJZG8geworCQkJaWYgKHIxX2Jpby0+Ymlvc1tkXS0+YmlfZW5kX2lvID09IGVuZF9zeW5jX3JlYWQpIHsKKwkJCQkvKiBObyByY3UgcHJvdGVjdGlvbiBuZWVkZWQgaGVyZSBkZXZpY2VzCisJCQkJICogY2FuIG9ubHkgYmUgcmVtb3ZlZCB3aGVuIG5vIHJlc3luYyBpcworCQkJCSAqIGFjdGl2ZSwgYW5kIHJlc3luYyBpcyBjdXJyZW50bHkgYWN0aXZlCisJCQkJICovCisJCQkJcmRldiA9IGNvbmYtPm1pcnJvcnNbZF0ucmRldjsKKwkJCQlpZiAoc3luY19wYWdlX2lvKHJkZXYsCisJCQkJCQkgc2VjdCwKKwkJCQkJCSBzPDw5LAorCQkJCQkJIGJpby0+YmlfaW9fdmVjW2lkeF0uYnZfcGFnZSwKKwkJCQkJCSBSRUFELCBmYWxzZSkpIHsKKwkJCQkJc3VjY2VzcyA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWQrKzsKKwkJCWlmIChkID09IGNvbmYtPnJhaWRfZGlza3MpCisJCQkJZCA9IDA7CisJCX0gd2hpbGUgKCFzdWNjZXNzICYmIGQgIT0gcjFfYmlvLT5yZWFkX2Rpc2spOworCisJCWlmICghc3VjY2VzcykgeworCQkJY2hhciBiW0JERVZOQU1FX1NJWkVdOworCQkJLyogQ2Fubm90IHJlYWQgZnJvbSBhbnl3aGVyZSwgYXJyYXkgaXMgdG9hc3QgKi8KKwkJCW1kX2Vycm9yKG1kZGV2LCBjb25mLT5taXJyb3JzW3IxX2Jpby0+cmVhZF9kaXNrXS5yZGV2KTsKKwkJCXByaW50ayhLRVJOX0FMRVJUICJtZC9yYWlkMTolczogJXM6IHVucmVjb3ZlcmFibGUgSS9PIHJlYWQgZXJyb3IiCisJCQkgICAgICAgIiBmb3IgYmxvY2sgJWxsdVxuIiwKKwkJCSAgICAgICBtZG5hbWUobWRkZXYpLAorCQkJICAgICAgIGJkZXZuYW1lKGJpby0+YmlfYmRldiwgYiksCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyMV9iaW8tPnNlY3Rvcik7CisJCQltZF9kb25lX3N5bmMobWRkZXYsIHIxX2Jpby0+c2VjdG9ycywgMCk7CisJCQlwdXRfYnVmKHIxX2Jpbyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCXN0YXJ0ID0gZDsKKwkJLyogd3JpdGUgaXQgYmFjayBhbmQgcmUtcmVhZCAqLworCQl3aGlsZSAoZCAhPSByMV9iaW8tPnJlYWRfZGlzaykgeworCQkJaWYgKGQgPT0gMCkKKwkJCQlkID0gY29uZi0+cmFpZF9kaXNrczsKKwkJCWQtLTsKKwkJCWlmIChyMV9iaW8tPmJpb3NbZF0tPmJpX2VuZF9pbyAhPSBlbmRfc3luY19yZWFkKQorCQkJCWNvbnRpbnVlOworCQkJcmRldiA9IGNvbmYtPm1pcnJvcnNbZF0ucmRldjsKKwkJCWlmIChzeW5jX3BhZ2VfaW8ocmRldiwKKwkJCQkJIHNlY3QsCisJCQkJCSBzPDw5LAorCQkJCQkgYmlvLT5iaV9pb192ZWNbaWR4XS5idl9wYWdlLAorCQkJCQkgV1JJVEUsIGZhbHNlKSA9PSAwKSB7CisJCQkJcjFfYmlvLT5iaW9zW2RdLT5iaV9lbmRfaW8gPSBOVUxMOworCQkJCXJkZXZfZGVjX3BlbmRpbmcocmRldiwgbWRkZXYpOworCQkJCW1kX2Vycm9yKG1kZGV2LCByZGV2KTsKKwkJCX0gZWxzZQorCQkJCWF0b21pY19hZGQocywgJnJkZXYtPmNvcnJlY3RlZF9lcnJvcnMpOworCQl9CisJCWQgPSBzdGFydDsKKwkJd2hpbGUgKGQgIT0gcjFfYmlvLT5yZWFkX2Rpc2spIHsKKwkJCWlmIChkID09IDApCisJCQkJZCA9IGNvbmYtPnJhaWRfZGlza3M7CisJCQlkLS07CisJCQlpZiAocjFfYmlvLT5iaW9zW2RdLT5iaV9lbmRfaW8gIT0gZW5kX3N5bmNfcmVhZCkKKwkJCQljb250aW51ZTsKKwkJCXJkZXYgPSBjb25mLT5taXJyb3JzW2RdLnJkZXY7CisJCQlpZiAoc3luY19wYWdlX2lvKHJkZXYsCisJCQkJCSBzZWN0LAorCQkJCQkgczw8OSwKKwkJCQkJIGJpby0+YmlfaW9fdmVjW2lkeF0uYnZfcGFnZSwKKwkJCQkJIFJFQUQsIGZhbHNlKSA9PSAwKQorCQkJCW1kX2Vycm9yKG1kZGV2LCByZGV2KTsKKwkJfQorCQlzZWN0b3JzIC09IHM7CisJCXNlY3QgKz0gczsKKwkJaWR4ICsrOworCX0KKwlzZXRfYml0KFIxQklPX1VwdG9kYXRlLCAmcjFfYmlvLT5zdGF0ZSk7CisJc2V0X2JpdChCSU9fVVBUT0RBVEUsICZiaW8tPmJpX2ZsYWdzKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBwcm9jZXNzX2NoZWNrcyhyMWJpb190ICpyMV9iaW8pCit7CisJLyogV2UgaGF2ZSByZWFkIGFsbCByZWFkYWJsZSBkZXZpY2VzLiAgSWYgd2UgaGF2ZW4ndAorCSAqIGdvdCB0aGUgYmxvY2ssIHRoZW4gdGhlcmUgaXMgbm8gaG9wZSBsZWZ0LgorCSAqIElmIHdlIGhhdmUsIHRoZW4gd2Ugd2FudCB0byBkbyBhIGNvbXBhcmlzb24KKwkgKiBhbmQgc2tpcCB0aGUgd3JpdGUgaWYgZXZlcnl0aGluZyBpcyB0aGUgc2FtZS4KKwkgKiBJZiBhbnkgYmxvY2tzIGZhaWxlZCB0byByZWFkLCB0aGVuIHdlIG5lZWQgdG8KKwkgKiBhdHRlbXB0IGFuIG92ZXItd3JpdGUKKwkgKi8KKwltZGRldl90ICptZGRldiA9IHIxX2Jpby0+bWRkZXY7CisJY29uZl90ICpjb25mID0gbWRkZXYtPnByaXZhdGU7CisJaW50IHByaW1hcnk7CisJaW50IGk7CisKKwlmb3IgKHByaW1hcnkgPSAwOyBwcmltYXJ5IDwgY29uZi0+cmFpZF9kaXNrczsgcHJpbWFyeSsrKQorCQlpZiAocjFfYmlvLT5iaW9zW3ByaW1hcnldLT5iaV9lbmRfaW8gPT0gZW5kX3N5bmNfcmVhZCAmJgorCQkgICAgdGVzdF9iaXQoQklPX1VQVE9EQVRFLCAmcjFfYmlvLT5iaW9zW3ByaW1hcnldLT5iaV9mbGFncykpIHsKKwkJCXIxX2Jpby0+Ymlvc1twcmltYXJ5XS0+YmlfZW5kX2lvID0gTlVMTDsKKwkJCXJkZXZfZGVjX3BlbmRpbmcoY29uZi0+bWlycm9yc1twcmltYXJ5XS5yZGV2LCBtZGRldik7CisJCQlicmVhazsKKwkJfQorCXIxX2Jpby0+cmVhZF9kaXNrID0gcHJpbWFyeTsKKwlmb3IgKGkgPSAwOyBpIDwgY29uZi0+cmFpZF9kaXNrczsgaSsrKSB7CisJCWludCBqOworCQlpbnQgdmNudCA9IHIxX2Jpby0+c2VjdG9ycyA+PiAoUEFHRV9TSElGVC0gOSk7CisJCXN0cnVjdCBiaW8gKnBiaW8gPSByMV9iaW8tPmJpb3NbcHJpbWFyeV07CisJCXN0cnVjdCBiaW8gKnNiaW8gPSByMV9iaW8tPmJpb3NbaV07CisJCWludCBzaXplOworCisJCWlmIChyMV9iaW8tPmJpb3NbaV0tPmJpX2VuZF9pbyAhPSBlbmRfc3luY19yZWFkKQorCQkJY29udGludWU7CisKKwkJaWYgKHRlc3RfYml0KEJJT19VUFRPREFURSwgJnNiaW8tPmJpX2ZsYWdzKSkgeworCQkJZm9yIChqID0gdmNudDsgai0tIDsgKSB7CisJCQkJc3RydWN0IHBhZ2UgKnAsICpzOworCQkJCXAgPSBwYmlvLT5iaV9pb192ZWNbal0uYnZfcGFnZTsKKwkJCQlzID0gc2Jpby0+YmlfaW9fdmVjW2pdLmJ2X3BhZ2U7CisJCQkJaWYgKG1lbWNtcChwYWdlX2FkZHJlc3MocCksCisJCQkJCSAgIHBhZ2VfYWRkcmVzcyhzKSwKKwkJCQkJICAgUEFHRV9TSVpFKSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZQorCQkJaiA9IDA7CisJCWlmIChqID49IDApCisJCQltZGRldi0+cmVzeW5jX21pc21hdGNoZXMgKz0gcjFfYmlvLT5zZWN0b3JzOworCQlpZiAoaiA8IDAgfHwgKHRlc3RfYml0KE1EX1JFQ09WRVJZX0NIRUNLLCAmbWRkZXYtPnJlY292ZXJ5KQorCQkJICAgICAgJiYgdGVzdF9iaXQoQklPX1VQVE9EQVRFLCAmc2Jpby0+YmlfZmxhZ3MpKSkgeworCQkJLyogTm8gbmVlZCB0byB3cml0ZSB0byB0aGlzIGRldmljZS4gKi8KKwkJCXNiaW8tPmJpX2VuZF9pbyA9IE5VTEw7CisJCQlyZGV2X2RlY19wZW5kaW5nKGNvbmYtPm1pcnJvcnNbaV0ucmRldiwgbWRkZXYpOworCQkJY29udGludWU7CisJCX0KKwkJLyogZml4dXAgdGhlIGJpbyBmb3IgcmV1c2UgKi8KKwkJc2Jpby0+YmlfdmNudCA9IHZjbnQ7CisJCXNiaW8tPmJpX3NpemUgPSByMV9iaW8tPnNlY3RvcnMgPDwgOTsKKwkJc2Jpby0+YmlfaWR4ID0gMDsKKwkJc2Jpby0+YmlfcGh5c19zZWdtZW50cyA9IDA7CisJCXNiaW8tPmJpX2ZsYWdzICY9IH4oQklPX1BPT0xfTUFTSyAtIDEpOworCQlzYmlvLT5iaV9mbGFncyB8PSAxIDw8IEJJT19VUFRPREFURTsKKwkJc2Jpby0+YmlfbmV4dCA9IE5VTEw7CisJCXNiaW8tPmJpX3NlY3RvciA9IHIxX2Jpby0+c2VjdG9yICsKKwkJCWNvbmYtPm1pcnJvcnNbaV0ucmRldi0+ZGF0YV9vZmZzZXQ7CisJCXNiaW8tPmJpX2JkZXYgPSBjb25mLT5taXJyb3JzW2ldLnJkZXYtPmJkZXY7CisJCXNpemUgPSBzYmlvLT5iaV9zaXplOworCQlmb3IgKGogPSAwOyBqIDwgdmNudCA7IGorKykgeworCQkJc3RydWN0IGJpb192ZWMgKmJpOworCQkJYmkgPSAmc2Jpby0+YmlfaW9fdmVjW2pdOworCQkJYmktPmJ2X29mZnNldCA9IDA7CisJCQlpZiAoc2l6ZSA+IFBBR0VfU0laRSkKKwkJCQliaS0+YnZfbGVuID0gUEFHRV9TSVpFOworCQkJZWxzZQorCQkJCWJpLT5idl9sZW4gPSBzaXplOworCQkJc2l6ZSAtPSBQQUdFX1NJWkU7CisJCQltZW1jcHkocGFnZV9hZGRyZXNzKGJpLT5idl9wYWdlKSwKKwkJCSAgICAgICBwYWdlX2FkZHJlc3MocGJpby0+YmlfaW9fdmVjW2pdLmJ2X3BhZ2UpLAorCQkJICAgICAgIFBBR0VfU0laRSk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIHN5bmNfcmVxdWVzdF93cml0ZShtZGRldl90ICptZGRldiwgcjFiaW9fdCAqcjFfYmlvKQogewogCWNvbmZfdCAqY29uZiA9IG1kZGV2LT5wcml2YXRlOwpAQCAtMTIwNSwxODUgKzEzNzQsMTQgQEAKIAogCWJpbyA9IHIxX2Jpby0+Ymlvc1tyMV9iaW8tPnJlYWRfZGlza107CiAKLQotCWlmICh0ZXN0X2JpdChNRF9SRUNPVkVSWV9SRVFVRVNURUQsICZtZGRldi0+cmVjb3ZlcnkpKSB7Ci0JCS8qIFdlIGhhdmUgcmVhZCBhbGwgcmVhZGFibGUgZGV2aWNlcy4gIElmIHdlIGhhdmVuJ3QKLQkJICogZ290IHRoZSBibG9jaywgdGhlbiB0aGVyZSBpcyBubyBob3BlIGxlZnQuCi0JCSAqIElmIHdlIGhhdmUsIHRoZW4gd2Ugd2FudCB0byBkbyBhIGNvbXBhcmlzb24KLQkJICogYW5kIHNraXAgdGhlIHdyaXRlIGlmIGV2ZXJ5dGhpbmcgaXMgdGhlIHNhbWUuCi0JCSAqIElmIGFueSBibG9ja3MgZmFpbGVkIHRvIHJlYWQsIHRoZW4gd2UgbmVlZCB0bwotCQkgKiBhdHRlbXB0IGFuIG92ZXItd3JpdGUKLQkJICovCi0JCWludCBwcmltYXJ5OwotCQlpZiAoIXRlc3RfYml0KFIxQklPX1VwdG9kYXRlLCAmcjFfYmlvLT5zdGF0ZSkpIHsKLQkJCWZvciAoaT0wOyBpPG1kZGV2LT5yYWlkX2Rpc2tzOyBpKyspCi0JCQkJaWYgKHIxX2Jpby0+Ymlvc1tpXS0+YmlfZW5kX2lvID09IGVuZF9zeW5jX3JlYWQpCi0JCQkJCW1kX2Vycm9yKG1kZGV2LCBjb25mLT5taXJyb3JzW2ldLnJkZXYpOwotCi0JCQltZF9kb25lX3N5bmMobWRkZXYsIHIxX2Jpby0+c2VjdG9ycywgMSk7Ci0JCQlwdXRfYnVmKHIxX2Jpbyk7CisJaWYgKCF0ZXN0X2JpdChSMUJJT19VcHRvZGF0ZSwgJnIxX2Jpby0+c3RhdGUpKQorCQkvKiBvdWNoIC0gZmFpbGVkIHRvIHJlYWQgYWxsIG9mIHRoYXQuICovCisJCWlmICghZml4X3N5bmNfcmVhZF9lcnJvcihyMV9iaW8pKQogCQkJcmV0dXJuOwotCQl9Ci0JCWZvciAocHJpbWFyeT0wOyBwcmltYXJ5PG1kZGV2LT5yYWlkX2Rpc2tzOyBwcmltYXJ5KyspCi0JCQlpZiAocjFfYmlvLT5iaW9zW3ByaW1hcnldLT5iaV9lbmRfaW8gPT0gZW5kX3N5bmNfcmVhZCAmJgotCQkJICAgIHRlc3RfYml0KEJJT19VUFRPREFURSwgJnIxX2Jpby0+Ymlvc1twcmltYXJ5XS0+YmlfZmxhZ3MpKSB7Ci0JCQkJcjFfYmlvLT5iaW9zW3ByaW1hcnldLT5iaV9lbmRfaW8gPSBOVUxMOwotCQkJCXJkZXZfZGVjX3BlbmRpbmcoY29uZi0+bWlycm9yc1twcmltYXJ5XS5yZGV2LCBtZGRldik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCXIxX2Jpby0+cmVhZF9kaXNrID0gcHJpbWFyeTsKLQkJZm9yIChpPTA7IGk8bWRkZXYtPnJhaWRfZGlza3M7IGkrKykKLQkJCWlmIChyMV9iaW8tPmJpb3NbaV0tPmJpX2VuZF9pbyA9PSBlbmRfc3luY19yZWFkKSB7Ci0JCQkJaW50IGo7Ci0JCQkJaW50IHZjbnQgPSByMV9iaW8tPnNlY3RvcnMgPj4gKFBBR0VfU0hJRlQtIDkpOwotCQkJCXN0cnVjdCBiaW8gKnBiaW8gPSByMV9iaW8tPmJpb3NbcHJpbWFyeV07Ci0JCQkJc3RydWN0IGJpbyAqc2JpbyA9IHIxX2Jpby0+Ymlvc1tpXTsKIAotCQkJCWlmICh0ZXN0X2JpdChCSU9fVVBUT0RBVEUsICZzYmlvLT5iaV9mbGFncykpIHsKLQkJCQkJZm9yIChqID0gdmNudDsgai0tIDsgKSB7Ci0JCQkJCQlzdHJ1Y3QgcGFnZSAqcCwgKnM7Ci0JCQkJCQlwID0gcGJpby0+YmlfaW9fdmVjW2pdLmJ2X3BhZ2U7Ci0JCQkJCQlzID0gc2Jpby0+YmlfaW9fdmVjW2pdLmJ2X3BhZ2U7Ci0JCQkJCQlpZiAobWVtY21wKHBhZ2VfYWRkcmVzcyhwKSwKLQkJCQkJCQkgICBwYWdlX2FkZHJlc3MocyksCi0JCQkJCQkJICAgUEFHRV9TSVpFKSkKLQkJCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0gZWxzZQotCQkJCQlqID0gMDsKLQkJCQlpZiAoaiA+PSAwKQotCQkJCQltZGRldi0+cmVzeW5jX21pc21hdGNoZXMgKz0gcjFfYmlvLT5zZWN0b3JzOwotCQkJCWlmIChqIDwgMCB8fCAodGVzdF9iaXQoTURfUkVDT1ZFUllfQ0hFQ0ssICZtZGRldi0+cmVjb3ZlcnkpCi0JCQkJCSAgICAgICYmIHRlc3RfYml0KEJJT19VUFRPREFURSwgJnNiaW8tPmJpX2ZsYWdzKSkpIHsKLQkJCQkJc2Jpby0+YmlfZW5kX2lvID0gTlVMTDsKLQkJCQkJcmRldl9kZWNfcGVuZGluZyhjb25mLT5taXJyb3JzW2ldLnJkZXYsIG1kZGV2KTsKLQkJCQl9IGVsc2UgewotCQkJCQkvKiBmaXh1cCB0aGUgYmlvIGZvciByZXVzZSAqLwotCQkJCQlpbnQgc2l6ZTsKLQkJCQkJc2Jpby0+YmlfdmNudCA9IHZjbnQ7Ci0JCQkJCXNiaW8tPmJpX3NpemUgPSByMV9iaW8tPnNlY3RvcnMgPDwgOTsKLQkJCQkJc2Jpby0+YmlfaWR4ID0gMDsKLQkJCQkJc2Jpby0+YmlfcGh5c19zZWdtZW50cyA9IDA7Ci0JCQkJCXNiaW8tPmJpX2ZsYWdzICY9IH4oQklPX1BPT0xfTUFTSyAtIDEpOwotCQkJCQlzYmlvLT5iaV9mbGFncyB8PSAxIDw8IEJJT19VUFRPREFURTsKLQkJCQkJc2Jpby0+YmlfbmV4dCA9IE5VTEw7Ci0JCQkJCXNiaW8tPmJpX3NlY3RvciA9IHIxX2Jpby0+c2VjdG9yICsKLQkJCQkJCWNvbmYtPm1pcnJvcnNbaV0ucmRldi0+ZGF0YV9vZmZzZXQ7Ci0JCQkJCXNiaW8tPmJpX2JkZXYgPSBjb25mLT5taXJyb3JzW2ldLnJkZXYtPmJkZXY7Ci0JCQkJCXNpemUgPSBzYmlvLT5iaV9zaXplOwotCQkJCQlmb3IgKGogPSAwOyBqIDwgdmNudCA7IGorKykgewotCQkJCQkJc3RydWN0IGJpb192ZWMgKmJpOwotCQkJCQkJYmkgPSAmc2Jpby0+YmlfaW9fdmVjW2pdOwotCQkJCQkJYmktPmJ2X29mZnNldCA9IDA7Ci0JCQkJCQlpZiAoc2l6ZSA+IFBBR0VfU0laRSkKLQkJCQkJCQliaS0+YnZfbGVuID0gUEFHRV9TSVpFOwotCQkJCQkJZWxzZQotCQkJCQkJCWJpLT5idl9sZW4gPSBzaXplOwotCQkJCQkJc2l6ZSAtPSBQQUdFX1NJWkU7Ci0JCQkJCQltZW1jcHkocGFnZV9hZGRyZXNzKGJpLT5idl9wYWdlKSwKLQkJCQkJCSAgICAgICBwYWdlX2FkZHJlc3MocGJpby0+YmlfaW9fdmVjW2pdLmJ2X3BhZ2UpLAotCQkJCQkJICAgICAgIFBBR0VfU0laRSk7Ci0JCQkJCX0KLQotCQkJCX0KLQkJCX0KLQl9Ci0JaWYgKCF0ZXN0X2JpdChSMUJJT19VcHRvZGF0ZSwgJnIxX2Jpby0+c3RhdGUpKSB7Ci0JCS8qIG91Y2ggLSBmYWlsZWQgdG8gcmVhZCBhbGwgb2YgdGhhdC4KLQkJICogVHJ5IHNvbWUgc3luY2hyb25vdXMgcmVhZHMgb2Ygb3RoZXIgZGV2aWNlcyB0byBnZXQKLQkJICogZ29vZCBkYXRhLCBtdWNoIGxpa2Ugd2l0aCBub3JtYWwgcmVhZCBlcnJvcnMuICBPbmx5Ci0JCSAqIHJlYWQgaW50byB0aGUgcGFnZXMgd2UgYWxyZWFkeSBoYXZlIHNvIHdlIGRvbid0Ci0JCSAqIG5lZWQgdG8gcmUtaXNzdWUgdGhlIHJlYWQgcmVxdWVzdC4KLQkJICogV2UgZG9uJ3QgbmVlZCB0byBmcmVlemUgdGhlIGFycmF5LCBiZWNhdXNlIGJlaW5nIGluIGFuCi0JCSAqIGFjdGl2ZSBzeW5jIHJlcXVlc3QsIHRoZXJlIGlzIG5vIG5vcm1hbCBJTywgYW5kCi0JCSAqIG5vIG92ZXJsYXBwaW5nIHN5bmNzLgotCQkgKi8KLQkJc2VjdG9yX3Qgc2VjdCA9IHIxX2Jpby0+c2VjdG9yOwotCQlpbnQgc2VjdG9ycyA9IHIxX2Jpby0+c2VjdG9yczsKLQkJaW50IGlkeCA9IDA7Ci0KLQkJd2hpbGUoc2VjdG9ycykgewotCQkJaW50IHMgPSBzZWN0b3JzOwotCQkJaW50IGQgPSByMV9iaW8tPnJlYWRfZGlzazsKLQkJCWludCBzdWNjZXNzID0gMDsKLQkJCW1ka19yZGV2X3QgKnJkZXY7Ci0KLQkJCWlmIChzID4gKFBBR0VfU0laRT4+OSkpCi0JCQkJcyA9IFBBR0VfU0laRSA+PiA5OwotCQkJZG8gewotCQkJCWlmIChyMV9iaW8tPmJpb3NbZF0tPmJpX2VuZF9pbyA9PSBlbmRfc3luY19yZWFkKSB7Ci0JCQkJCS8qIE5vIHJjdSBwcm90ZWN0aW9uIG5lZWRlZCBoZXJlIGRldmljZXMKLQkJCQkJICogY2FuIG9ubHkgYmUgcmVtb3ZlZCB3aGVuIG5vIHJlc3luYyBpcwotCQkJCQkgKiBhY3RpdmUsIGFuZCByZXN5bmMgaXMgY3VycmVudGx5IGFjdGl2ZQotCQkJCQkgKi8KLQkJCQkJcmRldiA9IGNvbmYtPm1pcnJvcnNbZF0ucmRldjsKLQkJCQkJaWYgKHN5bmNfcGFnZV9pbyhyZGV2LAotCQkJCQkJCSBzZWN0LAotCQkJCQkJCSBzPDw5LAotCQkJCQkJCSBiaW8tPmJpX2lvX3ZlY1tpZHhdLmJ2X3BhZ2UsCi0JCQkJCQkJIFJFQUQsIGZhbHNlKSkgewotCQkJCQkJc3VjY2VzcyA9IDE7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0KLQkJCQlkKys7Ci0JCQkJaWYgKGQgPT0gY29uZi0+cmFpZF9kaXNrcykKLQkJCQkJZCA9IDA7Ci0JCQl9IHdoaWxlICghc3VjY2VzcyAmJiBkICE9IHIxX2Jpby0+cmVhZF9kaXNrKTsKLQotCQkJaWYgKHN1Y2Nlc3MpIHsKLQkJCQlpbnQgc3RhcnQgPSBkOwotCQkJCS8qIHdyaXRlIGl0IGJhY2sgYW5kIHJlLXJlYWQgKi8KLQkJCQlzZXRfYml0KFIxQklPX1VwdG9kYXRlLCAmcjFfYmlvLT5zdGF0ZSk7Ci0JCQkJd2hpbGUgKGQgIT0gcjFfYmlvLT5yZWFkX2Rpc2spIHsKLQkJCQkJaWYgKGQgPT0gMCkKLQkJCQkJCWQgPSBjb25mLT5yYWlkX2Rpc2tzOwotCQkJCQlkLS07Ci0JCQkJCWlmIChyMV9iaW8tPmJpb3NbZF0tPmJpX2VuZF9pbyAhPSBlbmRfc3luY19yZWFkKQotCQkJCQkJY29udGludWU7Ci0JCQkJCXJkZXYgPSBjb25mLT5taXJyb3JzW2RdLnJkZXY7Ci0JCQkJCWF0b21pY19hZGQocywgJnJkZXYtPmNvcnJlY3RlZF9lcnJvcnMpOwotCQkJCQlpZiAoc3luY19wYWdlX2lvKHJkZXYsCi0JCQkJCQkJIHNlY3QsCi0JCQkJCQkJIHM8PDksCi0JCQkJCQkJIGJpby0+YmlfaW9fdmVjW2lkeF0uYnZfcGFnZSwKLQkJCQkJCQkgV1JJVEUsIGZhbHNlKSA9PSAwKQotCQkJCQkJbWRfZXJyb3IobWRkZXYsIHJkZXYpOwotCQkJCX0KLQkJCQlkID0gc3RhcnQ7Ci0JCQkJd2hpbGUgKGQgIT0gcjFfYmlvLT5yZWFkX2Rpc2spIHsKLQkJCQkJaWYgKGQgPT0gMCkKLQkJCQkJCWQgPSBjb25mLT5yYWlkX2Rpc2tzOwotCQkJCQlkLS07Ci0JCQkJCWlmIChyMV9iaW8tPmJpb3NbZF0tPmJpX2VuZF9pbyAhPSBlbmRfc3luY19yZWFkKQotCQkJCQkJY29udGludWU7Ci0JCQkJCXJkZXYgPSBjb25mLT5taXJyb3JzW2RdLnJkZXY7Ci0JCQkJCWlmIChzeW5jX3BhZ2VfaW8ocmRldiwKLQkJCQkJCQkgc2VjdCwKLQkJCQkJCQkgczw8OSwKLQkJCQkJCQkgYmlvLT5iaV9pb192ZWNbaWR4XS5idl9wYWdlLAotCQkJCQkJCSBSRUFELCBmYWxzZSkgPT0gMCkKLQkJCQkJCW1kX2Vycm9yKG1kZGV2LCByZGV2KTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKLQkJCQkvKiBDYW5ub3QgcmVhZCBmcm9tIGFueXdoZXJlLCBhcnJheSBpcyB0b2FzdCAqLwotCQkJCW1kX2Vycm9yKG1kZGV2LCBjb25mLT5taXJyb3JzW3IxX2Jpby0+cmVhZF9kaXNrXS5yZGV2KTsKLQkJCQlwcmludGsoS0VSTl9BTEVSVCAibWQvcmFpZDE6JXM6ICVzOiB1bnJlY292ZXJhYmxlIEkvTyByZWFkIGVycm9yIgotCQkJCSAgICAgICAiIGZvciBibG9jayAlbGx1XG4iLAotCQkJCSAgICAgICBtZG5hbWUobWRkZXYpLAotCQkJCSAgICAgICBiZGV2bmFtZShiaW8tPmJpX2JkZXYsIGIpLAotCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXIxX2Jpby0+c2VjdG9yKTsKLQkJCQltZF9kb25lX3N5bmMobWRkZXYsIHIxX2Jpby0+c2VjdG9ycywgMCk7Ci0JCQkJcHV0X2J1ZihyMV9iaW8pOwotCQkJCXJldHVybjsKLQkJCX0KLQkJCXNlY3RvcnMgLT0gczsKLQkJCXNlY3QgKz0gczsKLQkJCWlkeCArKzsKLQkJfQotCX0KLQorCWlmICh0ZXN0X2JpdChNRF9SRUNPVkVSWV9SRVFVRVNURUQsICZtZGRldi0+cmVjb3ZlcnkpKQorCQlpZiAocHJvY2Vzc19jaGVja3MocjFfYmlvKSA8IDApCisJCQlyZXR1cm47CiAJLyoKIAkgKiBzY2hlZHVsZSB3cml0ZXMKIAkgKi8KQEAgLTIwNjMsNyArMjA2MSw3IEBACiAJc2V0X2NhcGFjaXR5KG1kZGV2LT5nZW5kaXNrLCBtZGRldi0+YXJyYXlfc2VjdG9ycyk7CiAJcmV2YWxpZGF0ZV9kaXNrKG1kZGV2LT5nZW5kaXNrKTsKIAlpZiAoc2VjdG9ycyA+IG1kZGV2LT5kZXZfc2VjdG9ycyAmJgotCSAgICBtZGRldi0+cmVjb3ZlcnlfY3AgPT0gTWF4U2VjdG9yKSB7CisJICAgIG1kZGV2LT5yZWNvdmVyeV9jcCA+IG1kZGV2LT5kZXZfc2VjdG9ycykgewogCQltZGRldi0+cmVjb3ZlcnlfY3AgPSBtZGRldi0+ZGV2X3NlY3RvcnM7CiAJCXNldF9iaXQoTURfUkVDT1ZFUllfTkVFREVELCAmbWRkZXYtPnJlY292ZXJ5KTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxLmggYi9kcml2ZXJzL21kL3JhaWQxLmgKaW5kZXggY2JmZGYxYS4uNWZjNGNhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkMS5oCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEuaApAQCAtOTQsNyArOTQsOSBAQAogCWludAkJCXJlYWRfZGlzazsKIAogCXN0cnVjdCBsaXN0X2hlYWQJcmV0cnlfbGlzdDsKLQlzdHJ1Y3QgYml0bWFwX3VwZGF0ZQkqYml0bWFwX3VwZGF0ZTsKKwkvKiBOZXh0IHR3byBhcmUgb25seSB2YWxpZCB3aGVuIFIxQklPX0JlaGluZElPIGlzIHNldCAqLworCXN0cnVjdCBwYWdlCQkqKmJlaGluZF9wYWdlczsKKwlpbnQJCQliZWhpbmRfcGFnZV9jb3VudDsKIAkvKgogCSAqIGlmIHRoZSBJTyBpcyBpbiBXUklURSBkaXJlY3Rpb24sIHRoZW4gbXVsdGlwbGUgYmlvcyBhcmUgdXNlZC4KIAkgKiBXZSBjaG9vc2UgdGhlIG51bWJlciB3aGVuIHRoZXkgYXJlIGFsbG9jYXRlZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEwLmMgYi9kcml2ZXJzL21kL3JhaWQxMC5jCmluZGV4IDhlOTQ2MjYuLjZlODQ2NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEwLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMTAuYwpAQCAtMjcxLDkgKzI3MSwxMCBAQAogCQkgKi8KIAkJc2V0X2JpdChSMTBCSU9fVXB0b2RhdGUsICZyMTBfYmlvLT5zdGF0ZSk7CiAJCXJhaWRfZW5kX2Jpb19pbyhyMTBfYmlvKTsKKwkJcmRldl9kZWNfcGVuZGluZyhjb25mLT5taXJyb3JzW2Rldl0ucmRldiwgY29uZi0+bWRkZXYpOwogCX0gZWxzZSB7CiAJCS8qCi0JCSAqIG9vcHMsIHJlYWQgZXJyb3I6CisJCSAqIG9vcHMsIHJlYWQgZXJyb3IgLSBrZWVwIHRoZSByZWZjb3VudCBvbiB0aGUgcmRldgogCQkgKi8KIAkJY2hhciBiW0JERVZOQU1FX1NJWkVdOwogCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQpAQCAtMjgyLDggKzI4Myw2IEBACiAJCQkgICAgICAgYmRldm5hbWUoY29uZi0+bWlycm9yc1tkZXZdLnJkZXYtPmJkZXYsYiksICh1bnNpZ25lZCBsb25nIGxvbmcpcjEwX2Jpby0+c2VjdG9yKTsKIAkJcmVzY2hlZHVsZV9yZXRyeShyMTBfYmlvKTsKIAl9Ci0KLQlyZGV2X2RlY19wZW5kaW5nKGNvbmYtPm1pcnJvcnNbZGV2XS5yZGV2LCBjb25mLT5tZGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIHJhaWQxMF9lbmRfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgYmlvICpiaW8sIGludCBlcnJvcikKQEAgLTQ4OCwxMyArNDg3LDE5IEBACiBzdGF0aWMgaW50IHJlYWRfYmFsYW5jZShjb25mX3QgKmNvbmYsIHIxMGJpb190ICpyMTBfYmlvKQogewogCWNvbnN0IHNlY3Rvcl90IHRoaXNfc2VjdG9yID0gcjEwX2Jpby0+c2VjdG9yOwotCWludCBkaXNrLCBzbG90LCBuc2xvdDsKKwlpbnQgZGlzaywgc2xvdDsKIAljb25zdCBpbnQgc2VjdG9ycyA9IHIxMF9iaW8tPnNlY3RvcnM7Ci0Jc2VjdG9yX3QgbmV3X2Rpc3RhbmNlLCBjdXJyZW50X2Rpc3RhbmNlOworCXNlY3Rvcl90IG5ld19kaXN0YW5jZSwgYmVzdF9kaXN0OwogCW1ka19yZGV2X3QgKnJkZXY7CisJaW50IGRvX2JhbGFuY2U7CisJaW50IGJlc3Rfc2xvdDsKIAogCXJhaWQxMF9maW5kX3BoeXMoY29uZiwgcjEwX2Jpbyk7CiAJcmN1X3JlYWRfbG9jaygpOworcmV0cnk6CisJYmVzdF9zbG90ID0gLTE7CisJYmVzdF9kaXN0ID0gTWF4U2VjdG9yOworCWRvX2JhbGFuY2UgPSAxOwogCS8qCiAJICogQ2hlY2sgaWYgd2UgY2FuIGJhbGFuY2UuIFdlIGNhbiBiYWxhbmNlIG9uIHRoZSB3aG9sZQogCSAqIGRldmljZSBpZiBubyByZXN5bmMgaXMgZ29pbmcgb24gKHJlY292ZXJ5IGlzIG9rKSwgb3IgYmVsb3cKQEAgLTUwMiw4NiArNTA3LDU4IEBACiAJICogYWJvdmUgdGhlIHJlc3luYyB3aW5kb3cuCiAJICovCiAJaWYgKGNvbmYtPm1kZGV2LT5yZWNvdmVyeV9jcCA8IE1heFNlY3RvcgotCSAgICAmJiAodGhpc19zZWN0b3IgKyBzZWN0b3JzID49IGNvbmYtPm5leHRfcmVzeW5jKSkgewotCQkvKiBtYWtlIHN1cmUgdGhhdCBkaXNrIGlzIG9wZXJhdGlvbmFsICovCi0JCXNsb3QgPSAwOwotCQlkaXNrID0gcjEwX2Jpby0+ZGV2c1tzbG90XS5kZXZudW07CisJICAgICYmICh0aGlzX3NlY3RvciArIHNlY3RvcnMgPj0gY29uZi0+bmV4dF9yZXN5bmMpKQorCQlkb19iYWxhbmNlID0gMDsKIAotCQl3aGlsZSAoKHJkZXYgPSByY3VfZGVyZWZlcmVuY2UoY29uZi0+bWlycm9yc1tkaXNrXS5yZGV2KSkgPT0gTlVMTCB8fAotCQkgICAgICAgcjEwX2Jpby0+ZGV2c1tzbG90XS5iaW8gPT0gSU9fQkxPQ0tFRCB8fAotCQkgICAgICAgIXRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpIHsKLQkJCXNsb3QrKzsKLQkJCWlmIChzbG90ID09IGNvbmYtPmNvcGllcykgewotCQkJCXNsb3QgPSAwOwotCQkJCWRpc2sgPSAtMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWRpc2sgPSByMTBfYmlvLT5kZXZzW3Nsb3RdLmRldm51bTsKLQkJfQotCQlnb3RvIHJiX291dDsKLQl9Ci0KLQotCS8qIG1ha2Ugc3VyZSB0aGUgZGlzayBpcyBvcGVyYXRpb25hbCAqLwotCXNsb3QgPSAwOwotCWRpc2sgPSByMTBfYmlvLT5kZXZzW3Nsb3RdLmRldm51bTsKLQl3aGlsZSAoKHJkZXY9cmN1X2RlcmVmZXJlbmNlKGNvbmYtPm1pcnJvcnNbZGlza10ucmRldikpID09IE5VTEwgfHwKLQkgICAgICAgcjEwX2Jpby0+ZGV2c1tzbG90XS5iaW8gPT0gSU9fQkxPQ0tFRCB8fAotCSAgICAgICAhdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSkgewotCQlzbG90ICsrOwotCQlpZiAoc2xvdCA9PSBjb25mLT5jb3BpZXMpIHsKLQkJCWRpc2sgPSAtMTsKLQkJCWdvdG8gcmJfb3V0OwotCQl9Ci0JCWRpc2sgPSByMTBfYmlvLT5kZXZzW3Nsb3RdLmRldm51bTsKLQl9Ci0KLQotCWN1cnJlbnRfZGlzdGFuY2UgPSBhYnMocjEwX2Jpby0+ZGV2c1tzbG90XS5hZGRyIC0KLQkJCSAgICAgICBjb25mLT5taXJyb3JzW2Rpc2tdLmhlYWRfcG9zaXRpb24pOwotCi0JLyogRmluZCB0aGUgZGlzayB3aG9zZSBoZWFkIGlzIGNsb3Nlc3QsCi0JICogb3IgLSBmb3IgZmFyID4gMSAtIGZpbmQgdGhlIGNsb3Nlc3QgdG8gcGFydGl0aW9uIGJlZ2lubmluZyAqLwotCi0JZm9yIChuc2xvdCA9IHNsb3Q7IG5zbG90IDwgY29uZi0+Y29waWVzOyBuc2xvdCsrKSB7Ci0JCWludCBuZGlzayA9IHIxMF9iaW8tPmRldnNbbnNsb3RdLmRldm51bTsKLQotCi0JCWlmICgocmRldj1yY3VfZGVyZWZlcmVuY2UoY29uZi0+bWlycm9yc1tuZGlza10ucmRldikpID09IE5VTEwgfHwKLQkJICAgIHIxMF9iaW8tPmRldnNbbnNsb3RdLmJpbyA9PSBJT19CTE9DS0VEIHx8Ci0JCSAgICAhdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSkKKwlmb3IgKHNsb3QgPSAwOyBzbG90IDwgY29uZi0+Y29waWVzIDsgc2xvdCsrKSB7CisJCWlmIChyMTBfYmlvLT5kZXZzW3Nsb3RdLmJpbyA9PSBJT19CTE9DS0VEKQogCQkJY29udGludWU7CisJCWRpc2sgPSByMTBfYmlvLT5kZXZzW3Nsb3RdLmRldm51bTsKKwkJcmRldiA9IHJjdV9kZXJlZmVyZW5jZShjb25mLT5taXJyb3JzW2Rpc2tdLnJkZXYpOworCQlpZiAocmRldiA9PSBOVUxMKQorCQkJY29udGludWU7CisJCWlmICghdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghZG9fYmFsYW5jZSkKKwkJCWJyZWFrOwogCiAJCS8qIFRoaXMgb3B0aW1pc2F0aW9uIGlzIGRlYmF0YWJsZSwgYW5kIGNvbXBsZXRlbHkgZGVzdHJveXMKIAkJICogc2VxdWVudGlhbCByZWFkIHNwZWVkIGZvciAnZmFyIGNvcGllcycgYXJyYXlzLiAgU28gb25seQogCQkgKiBrZWVwIGl0IGZvciAnbmVhcicgYXJyYXlzLCBhbmQgcmV2aWV3IHRob3NlIGxhdGVyLgogCQkgKi8KLQkJaWYgKGNvbmYtPm5lYXJfY29waWVzID4gMSAmJiAhYXRvbWljX3JlYWQoJnJkZXYtPm5yX3BlbmRpbmcpKSB7Ci0JCQlkaXNrID0gbmRpc2s7Ci0JCQlzbG90ID0gbnNsb3Q7CisJCWlmIChjb25mLT5uZWFyX2NvcGllcyA+IDEgJiYgIWF0b21pY19yZWFkKCZyZGV2LT5ucl9wZW5kaW5nKSkKIAkJCWJyZWFrOwotCQl9CiAKIAkJLyogZm9yIGZhciA+IDEgYWx3YXlzIHVzZSB0aGUgbG93ZXN0IGFkZHJlc3MgKi8KIAkJaWYgKGNvbmYtPmZhcl9jb3BpZXMgPiAxKQotCQkJbmV3X2Rpc3RhbmNlID0gcjEwX2Jpby0+ZGV2c1tuc2xvdF0uYWRkcjsKKwkJCW5ld19kaXN0YW5jZSA9IHIxMF9iaW8tPmRldnNbc2xvdF0uYWRkcjsKIAkJZWxzZQotCQkJbmV3X2Rpc3RhbmNlID0gYWJzKHIxMF9iaW8tPmRldnNbbnNsb3RdLmFkZHIgLQotCQkJCQkgICBjb25mLT5taXJyb3JzW25kaXNrXS5oZWFkX3Bvc2l0aW9uKTsKLQkJaWYgKG5ld19kaXN0YW5jZSA8IGN1cnJlbnRfZGlzdGFuY2UpIHsKLQkJCWN1cnJlbnRfZGlzdGFuY2UgPSBuZXdfZGlzdGFuY2U7Ci0JCQlkaXNrID0gbmRpc2s7Ci0JCQlzbG90ID0gbnNsb3Q7CisJCQluZXdfZGlzdGFuY2UgPSBhYnMocjEwX2Jpby0+ZGV2c1tzbG90XS5hZGRyIC0KKwkJCQkJICAgY29uZi0+bWlycm9yc1tkaXNrXS5oZWFkX3Bvc2l0aW9uKTsKKwkJaWYgKG5ld19kaXN0YW5jZSA8IGJlc3RfZGlzdCkgeworCQkJYmVzdF9kaXN0ID0gbmV3X2Rpc3RhbmNlOworCQkJYmVzdF9zbG90ID0gc2xvdDsKIAkJfQogCX0KKwlpZiAoc2xvdCA9PSBjb25mLT5jb3BpZXMpCisJCXNsb3QgPSBiZXN0X3Nsb3Q7CiAKLXJiX291dDoKLQlyMTBfYmlvLT5yZWFkX3Nsb3QgPSBzbG90OwotLyoJY29uZi0+bmV4dF9zZXFfc2VjdCA9IHRoaXNfc2VjdG9yICsgc2VjdG9yczsqLwotCi0JaWYgKGRpc2sgPj0gMCAmJiAocmRldj1yY3VfZGVyZWZlcmVuY2UoY29uZi0+bWlycm9yc1tkaXNrXS5yZGV2KSkhPSBOVUxMKQotCQlhdG9taWNfaW5jKCZjb25mLT5taXJyb3JzW2Rpc2tdLnJkZXYtPm5yX3BlbmRpbmcpOwotCWVsc2UKKwlpZiAoc2xvdCA+PSAwKSB7CisJCWRpc2sgPSByMTBfYmlvLT5kZXZzW3Nsb3RdLmRldm51bTsKKwkJcmRldiA9IHJjdV9kZXJlZmVyZW5jZShjb25mLT5taXJyb3JzW2Rpc2tdLnJkZXYpOworCQlpZiAoIXJkZXYpCisJCQlnb3RvIHJldHJ5OworCQlhdG9taWNfaW5jKCZyZGV2LT5ucl9wZW5kaW5nKTsKKwkJaWYgKHRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkgeworCQkJLyogQ2Fubm90IHJpc2sgcmV0dXJuaW5nIGEgZGV2aWNlIHRoYXQgZmFpbGVkCisJCQkgKiBiZWZvcmUgd2UgaW5jJ2VkIG5yX3BlbmRpbmcKKwkJCSAqLworCQkJcmRldl9kZWNfcGVuZGluZyhyZGV2LCBjb25mLT5tZGRldik7CisJCQlnb3RvIHJldHJ5OworCQl9CisJCXIxMF9iaW8tPnJlYWRfc2xvdCA9IHNsb3Q7CisJfSBlbHNlCiAJCWRpc2sgPSAtMTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIApAQCAtMTQ2MCw0MCArMTQzNywzMyBAQAogCWludCBtYXhfcmVhZF9lcnJvcnMgPSBhdG9taWNfcmVhZCgmbWRkZXYtPm1heF9jb3JyX3JlYWRfZXJyb3JzKTsKIAlpbnQgZCA9IHIxMF9iaW8tPmRldnNbcjEwX2Jpby0+cmVhZF9zbG90XS5kZXZudW07CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JcmRldiA9IHJjdV9kZXJlZmVyZW5jZShjb25mLT5taXJyb3JzW2RdLnJkZXYpOwotCWlmIChyZGV2KSB7IC8qIElmIHJkZXYgaXMgbm90IE5VTEwgKi8KLQkJY2hhciBiW0JERVZOQU1FX1NJWkVdOwotCQlpbnQgY3VyX3JlYWRfZXJyb3JfY291bnQgPSAwOworCS8qIHN0aWxsIG93biBhIHJlZmVyZW5jZSB0byB0aGlzIHJkZXYsIHNvIGl0IGNhbm5vdAorCSAqIGhhdmUgYmVlbiBjbGVhcmVkIHJlY2VudGx5LgorCSAqLworCXJkZXYgPSBjb25mLT5taXJyb3JzW2RdLnJkZXY7CiAKKwlpZiAodGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKQorCQkvKiBkcml2ZSBoYXMgYWxyZWFkeSBiZWVuIGZhaWxlZCwganVzdCBpZ25vcmUgYW55CisJCSAgIG1vcmUgZml4X3JlYWRfZXJyb3IoKSBhdHRlbXB0cyAqLworCQlyZXR1cm47CisKKwljaGVja19kZWNheV9yZWFkX2Vycm9ycyhtZGRldiwgcmRldik7CisJYXRvbWljX2luYygmcmRldi0+cmVhZF9lcnJvcnMpOworCWlmIChhdG9taWNfcmVhZCgmcmRldi0+cmVhZF9lcnJvcnMpID4gbWF4X3JlYWRfZXJyb3JzKSB7CisJCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKIAkJYmRldm5hbWUocmRldi0+YmRldiwgYik7CiAKLQkJaWYgKHRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkgewotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQkvKiBkcml2ZSBoYXMgYWxyZWFkeSBiZWVuIGZhaWxlZCwganVzdCBpZ25vcmUgYW55Ci0JCQkgICBtb3JlIGZpeF9yZWFkX2Vycm9yKCkgYXR0ZW1wdHMgKi8KLQkJCXJldHVybjsKLQkJfQotCi0JCWNoZWNrX2RlY2F5X3JlYWRfZXJyb3JzKG1kZGV2LCByZGV2KTsKLQkJYXRvbWljX2luYygmcmRldi0+cmVhZF9lcnJvcnMpOwotCQljdXJfcmVhZF9lcnJvcl9jb3VudCA9IGF0b21pY19yZWFkKCZyZGV2LT5yZWFkX2Vycm9ycyk7Ci0JCWlmIChjdXJfcmVhZF9lcnJvcl9jb3VudCA+IG1heF9yZWFkX2Vycm9ycykgewotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UKLQkJCSAgICAgICAibWQvcmFpZDEwOiVzOiAlczogUmFpZCBkZXZpY2UgZXhjZWVkZWQgIgotCQkJICAgICAgICJyZWFkX2Vycm9yIHRocmVzaG9sZCAiCi0JCQkgICAgICAgIltjdXIgJWQ6bWF4ICVkXVxuIiwKLQkJCSAgICAgICBtZG5hbWUobWRkZXYpLAotCQkJICAgICAgIGIsIGN1cl9yZWFkX2Vycm9yX2NvdW50LCBtYXhfcmVhZF9lcnJvcnMpOwotCQkJcHJpbnRrKEtFUk5fTk9USUNFCi0JCQkgICAgICAgIm1kL3JhaWQxMDolczogJXM6IEZhaWxpbmcgcmFpZCAiCi0JCQkgICAgICAgImRldmljZVxuIiwgbWRuYW1lKG1kZGV2KSwgYik7Ci0JCQltZF9lcnJvcihtZGRldiwgY29uZi0+bWlycm9yc1tkXS5yZGV2KTsKLQkJCXJldHVybjsKLQkJfQorCQlwcmludGsoS0VSTl9OT1RJQ0UKKwkJICAgICAgICJtZC9yYWlkMTA6JXM6ICVzOiBSYWlkIGRldmljZSBleGNlZWRlZCAiCisJCSAgICAgICAicmVhZF9lcnJvciB0aHJlc2hvbGQgW2N1ciAlZDptYXggJWRdXG4iLAorCQkgICAgICAgbWRuYW1lKG1kZGV2KSwgYiwKKwkJICAgICAgIGF0b21pY19yZWFkKCZyZGV2LT5yZWFkX2Vycm9ycyksIG1heF9yZWFkX2Vycm9ycyk7CisJCXByaW50ayhLRVJOX05PVElDRQorCQkgICAgICAgIm1kL3JhaWQxMDolczogJXM6IEZhaWxpbmcgcmFpZCBkZXZpY2VcbiIsCisJCSAgICAgICBtZG5hbWUobWRkZXYpLCBiKTsKKwkJbWRfZXJyb3IobWRkZXYsIGNvbmYtPm1pcnJvcnNbZF0ucmRldik7CisJCXJldHVybjsKIAl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAl3aGlsZShzZWN0b3JzKSB7CiAJCWludCBzID0gc2VjdG9yczsKQEAgLTE1NjIsOCArMTUzMiw4IEBACiAJCQkJCSAgICAgICAid3JpdGUgZmFpbGVkIgogCQkJCQkgICAgICAgIiAoJWQgc2VjdG9ycyBhdCAlbGx1IG9uICVzKVxuIiwKIAkJCQkJICAgICAgIG1kbmFtZShtZGRldiksIHMsCi0JCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKShzZWN0KwotCQkJCQkgICAgICAgcmRldi0+ZGF0YV9vZmZzZXQpLAorCQkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykoCisJCQkJCQkgICAgICAgc2VjdCArIHJkZXYtPmRhdGFfb2Zmc2V0KSwKIAkJCQkJICAgICAgIGJkZXZuYW1lKHJkZXYtPmJkZXYsIGIpKTsKIAkJCQkJcHJpbnRrKEtFUk5fTk9USUNFICJtZC9yYWlkMTA6JXM6ICVzOiBmYWlsaW5nICIKIAkJCQkJICAgICAgICJkcml2ZVxuIiwKQEAgLTE1OTksOCArMTU2OSw4IEBACiAJCQkJCSAgICAgICAiY29ycmVjdGVkIHNlY3RvcnMiCiAJCQkJCSAgICAgICAiICglZCBzZWN0b3JzIGF0ICVsbHUgb24gJXMpXG4iLAogCQkJCQkgICAgICAgbWRuYW1lKG1kZGV2KSwgcywKLQkJCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKHNlY3QrCi0JCQkJCQkgICAgcmRldi0+ZGF0YV9vZmZzZXQpLAorCQkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykoCisJCQkJCQkgICAgICAgc2VjdCArIHJkZXYtPmRhdGFfb2Zmc2V0KSwKIAkJCQkJICAgICAgIGJkZXZuYW1lKHJkZXYtPmJkZXYsIGIpKTsKIAkJCQkJcHJpbnRrKEtFUk5fTk9USUNFICJtZC9yYWlkMTA6JXM6ICVzOiBmYWlsaW5nIGRyaXZlXG4iLAogCQkJCQkgICAgICAgbWRuYW1lKG1kZGV2KSwKQEAgLTE2MTIsOCArMTU4Miw4IEBACiAJCQkJCSAgICAgICAibWQvcmFpZDEwOiVzOiByZWFkIGVycm9yIGNvcnJlY3RlZCIKIAkJCQkJICAgICAgICIgKCVkIHNlY3RvcnMgYXQgJWxsdSBvbiAlcylcbiIsCiAJCQkJCSAgICAgICBtZG5hbWUobWRkZXYpLCBzLAotCQkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykoc2VjdCsKLQkJCQkJICAgICAgICAgICAgcmRldi0+ZGF0YV9vZmZzZXQpLAorCQkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykoCisJCQkJCQkgICAgICAgc2VjdCArIHJkZXYtPmRhdGFfb2Zmc2V0KSwKIAkJCQkJICAgICAgIGJkZXZuYW1lKHJkZXYtPmJkZXYsIGIpKTsKIAkJCQl9CiAKQEAgLTE2NjMsNyArMTYzMyw4IEBACiAJCWVsc2UgaWYgKHRlc3RfYml0KFIxMEJJT19Jc1JlY292ZXIsICZyMTBfYmlvLT5zdGF0ZSkpCiAJCQlyZWNvdmVyeV9yZXF1ZXN0X3dyaXRlKG1kZGV2LCByMTBfYmlvKTsKIAkJZWxzZSB7Ci0JCQlpbnQgbWlycm9yOworCQkJaW50IHNsb3QgPSByMTBfYmlvLT5yZWFkX3Nsb3Q7CisJCQlpbnQgbWlycm9yID0gcjEwX2Jpby0+ZGV2c1tzbG90XS5kZXZudW07CiAJCQkvKiB3ZSBnb3QgYSByZWFkIGVycm9yLiBNYXliZSB0aGUgZHJpdmUgaXMgYmFkLiAgTWF5YmUganVzdAogCQkJICogdGhlIGJsb2NrIGFuZCB3ZSBjYW4gZml4IGl0LgogCQkJICogV2UgZnJlZXplIGFsbCBvdGhlciBJTywgYW5kIHRyeSByZWFkaW5nIHRoZSBibG9jayBmcm9tCkBAIC0xNjc3LDkgKzE2NDgsMTAgQEAKIAkJCQlmaXhfcmVhZF9lcnJvcihjb25mLCBtZGRldiwgcjEwX2Jpbyk7CiAJCQkJdW5mcmVlemVfYXJyYXkoY29uZik7CiAJCQl9CisJCQlyZGV2X2RlY19wZW5kaW5nKGNvbmYtPm1pcnJvcnNbbWlycm9yXS5yZGV2LCBtZGRldik7CiAKLQkJCWJpbyA9IHIxMF9iaW8tPmRldnNbcjEwX2Jpby0+cmVhZF9zbG90XS5iaW87Ci0JCQlyMTBfYmlvLT5kZXZzW3IxMF9iaW8tPnJlYWRfc2xvdF0uYmlvID0KKwkJCWJpbyA9IHIxMF9iaW8tPmRldnNbc2xvdF0uYmlvOworCQkJcjEwX2Jpby0+ZGV2c1tzbG90XS5iaW8gPQogCQkJCW1kZGV2LT5ybyA/IElPX0JMT0NLRUQgOiBOVUxMOwogCQkJbWlycm9yID0gcmVhZF9iYWxhbmNlKGNvbmYsIHIxMF9iaW8pOwogCQkJaWYgKG1pcnJvciA9PSAtMSkgewpAQCAtMTY5Myw2ICsxNjY1LDcgQEAKIAkJCX0gZWxzZSB7CiAJCQkJY29uc3QgdW5zaWduZWQgbG9uZyBkb19zeW5jID0gKHIxMF9iaW8tPm1hc3Rlcl9iaW8tPmJpX3J3ICYgUkVRX1NZTkMpOwogCQkJCWJpb19wdXQoYmlvKTsKKwkJCQlzbG90ID0gcjEwX2Jpby0+cmVhZF9zbG90OwogCQkJCXJkZXYgPSBjb25mLT5taXJyb3JzW21pcnJvcl0ucmRldjsKIAkJCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQogCQkJCQlwcmludGsoS0VSTl9FUlIgIm1kL3JhaWQxMDolczogJXM6IHJlZGlyZWN0aW5nIHNlY3RvciAlbGx1IHRvIgpAQCAtMTcwMiw4ICsxNjc1LDggQEAKIAkJCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcjEwX2Jpby0+c2VjdG9yKTsKIAkJCQliaW8gPSBiaW9fY2xvbmVfbWRkZXYocjEwX2Jpby0+bWFzdGVyX2JpbywKIAkJCQkJCSAgICAgIEdGUF9OT0lPLCBtZGRldik7Ci0JCQkJcjEwX2Jpby0+ZGV2c1tyMTBfYmlvLT5yZWFkX3Nsb3RdLmJpbyA9IGJpbzsKLQkJCQliaW8tPmJpX3NlY3RvciA9IHIxMF9iaW8tPmRldnNbcjEwX2Jpby0+cmVhZF9zbG90XS5hZGRyCisJCQkJcjEwX2Jpby0+ZGV2c1tzbG90XS5iaW8gPSBiaW87CisJCQkJYmlvLT5iaV9zZWN0b3IgPSByMTBfYmlvLT5kZXZzW3Nsb3RdLmFkZHIKIAkJCQkJKyByZGV2LT5kYXRhX29mZnNldDsKIAkJCQliaW8tPmJpX2JkZXYgPSByZGV2LT5iZGV2OwogCQkJCWJpby0+YmlfcncgPSBSRUFEIHwgZG9fc3luYzsKQEAgLTE3NjMsMTMgKzE3MzYsMTMgQEAKICAqCiAgKi8KIAotc3RhdGljIHNlY3Rvcl90IHN5bmNfcmVxdWVzdChtZGRldl90ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9yX25yLCBpbnQgKnNraXBwZWQsIGludCBnb19mYXN0ZXIpCitzdGF0aWMgc2VjdG9yX3Qgc3luY19yZXF1ZXN0KG1kZGV2X3QgKm1kZGV2LCBzZWN0b3JfdCBzZWN0b3JfbnIsCisJCQkgICAgIGludCAqc2tpcHBlZCwgaW50IGdvX2Zhc3RlcikKIHsKIAljb25mX3QgKmNvbmYgPSBtZGRldi0+cHJpdmF0ZTsKIAlyMTBiaW9fdCAqcjEwX2JpbzsKIAlzdHJ1Y3QgYmlvICpiaW9saXN0ID0gTlVMTCwgKmJpbzsKIAlzZWN0b3JfdCBtYXhfc2VjdG9yLCBucl9zZWN0b3JzOwotCWludCBkaXNrOwogCWludCBpOwogCWludCBtYXhfc3luYzsKIAlzZWN0b3JfdCBzeW5jX2Jsb2NrczsKQEAgLTE4NTgsMTA4ICsxODMxLDExNCBAQAogCQlpbnQgaiwgazsKIAkJcjEwX2JpbyA9IE5VTEw7CiAKLQkJZm9yIChpPTAgOyBpPGNvbmYtPnJhaWRfZGlza3M7IGkrKykKLQkJCWlmIChjb25mLT5taXJyb3JzW2ldLnJkZXYgJiYKLQkJCSAgICAhdGVzdF9iaXQoSW5fc3luYywgJmNvbmYtPm1pcnJvcnNbaV0ucmRldi0+ZmxhZ3MpKSB7Ci0JCQkJaW50IHN0aWxsX2RlZ3JhZGVkID0gMDsKLQkJCQkvKiB3YW50IHRvIHJlY29uc3RydWN0IHRoaXMgZGV2aWNlICovCi0JCQkJcjEwYmlvX3QgKnJiMiA9IHIxMF9iaW87Ci0JCQkJc2VjdG9yX3Qgc2VjdCA9IHJhaWQxMF9maW5kX3ZpcnQoY29uZiwgc2VjdG9yX25yLCBpKTsKLQkJCQlpbnQgbXVzdF9zeW5jOwotCQkJCS8qIFVubGVzcyB3ZSBhcmUgZG9pbmcgYSBmdWxsIHN5bmMsIHdlIG9ubHkgbmVlZAotCQkJCSAqIHRvIHJlY292ZXIgdGhlIGJsb2NrIGlmIGl0IGlzIHNldCBpbiB0aGUgYml0bWFwCisJCWZvciAoaT0wIDsgaTxjb25mLT5yYWlkX2Rpc2tzOyBpKyspIHsKKwkJCWludCBzdGlsbF9kZWdyYWRlZDsKKwkJCXIxMGJpb190ICpyYjI7CisJCQlzZWN0b3JfdCBzZWN0OworCQkJaW50IG11c3Rfc3luYzsKKworCQkJaWYgKGNvbmYtPm1pcnJvcnNbaV0ucmRldiA9PSBOVUxMIHx8CisJCQkgICAgdGVzdF9iaXQoSW5fc3luYywgJmNvbmYtPm1pcnJvcnNbaV0ucmRldi0+ZmxhZ3MpKSAKKwkJCQljb250aW51ZTsKKworCQkJc3RpbGxfZGVncmFkZWQgPSAwOworCQkJLyogd2FudCB0byByZWNvbnN0cnVjdCB0aGlzIGRldmljZSAqLworCQkJcmIyID0gcjEwX2JpbzsKKwkJCXNlY3QgPSByYWlkMTBfZmluZF92aXJ0KGNvbmYsIHNlY3Rvcl9uciwgaSk7CisJCQkvKiBVbmxlc3Mgd2UgYXJlIGRvaW5nIGEgZnVsbCBzeW5jLCB3ZSBvbmx5IG5lZWQKKwkJCSAqIHRvIHJlY292ZXIgdGhlIGJsb2NrIGlmIGl0IGlzIHNldCBpbiB0aGUgYml0bWFwCisJCQkgKi8KKwkJCW11c3Rfc3luYyA9IGJpdG1hcF9zdGFydF9zeW5jKG1kZGV2LT5iaXRtYXAsIHNlY3QsCisJCQkJCQkgICAgICAmc3luY19ibG9ja3MsIDEpOworCQkJaWYgKHN5bmNfYmxvY2tzIDwgbWF4X3N5bmMpCisJCQkJbWF4X3N5bmMgPSBzeW5jX2Jsb2NrczsKKwkJCWlmICghbXVzdF9zeW5jICYmCisJCQkgICAgIWNvbmYtPmZ1bGxzeW5jKSB7CisJCQkJLyogeWVwLCBza2lwIHRoZSBzeW5jX2Jsb2NrcyBoZXJlLCBidXQgZG9uJ3QgYXNzdW1lCisJCQkJICogdGhhdCB0aGVyZSB3aWxsIG5ldmVyIGJlIGFueXRoaW5nIHRvIGRvIGhlcmUKIAkJCQkgKi8KLQkJCQltdXN0X3N5bmMgPSBiaXRtYXBfc3RhcnRfc3luYyhtZGRldi0+Yml0bWFwLCBzZWN0LAotCQkJCQkJCSAgICAgICZzeW5jX2Jsb2NrcywgMSk7Ci0JCQkJaWYgKHN5bmNfYmxvY2tzIDwgbWF4X3N5bmMpCi0JCQkJCW1heF9zeW5jID0gc3luY19ibG9ja3M7Ci0JCQkJaWYgKCFtdXN0X3N5bmMgJiYKLQkJCQkgICAgIWNvbmYtPmZ1bGxzeW5jKSB7Ci0JCQkJCS8qIHllcCwgc2tpcCB0aGUgc3luY19ibG9ja3MgaGVyZSwgYnV0IGRvbid0IGFzc3VtZQotCQkJCQkgKiB0aGF0IHRoZXJlIHdpbGwgbmV2ZXIgYmUgYW55dGhpbmcgdG8gZG8gaGVyZQotCQkJCQkgKi8KLQkJCQkJY2h1bmtzX3NraXBwZWQgPSAtMTsKLQkJCQkJY29udGludWU7Ci0JCQkJfQorCQkJCWNodW5rc19za2lwcGVkID0gLTE7CisJCQkJY29udGludWU7CisJCQl9CiAKLQkJCQlyMTBfYmlvID0gbWVtcG9vbF9hbGxvYyhjb25mLT5yMTBidWZfcG9vbCwgR0ZQX05PSU8pOwotCQkJCXJhaXNlX2JhcnJpZXIoY29uZiwgcmIyICE9IE5VTEwpOwotCQkJCWF0b21pY19zZXQoJnIxMF9iaW8tPnJlbWFpbmluZywgMCk7CisJCQlyMTBfYmlvID0gbWVtcG9vbF9hbGxvYyhjb25mLT5yMTBidWZfcG9vbCwgR0ZQX05PSU8pOworCQkJcmFpc2VfYmFycmllcihjb25mLCByYjIgIT0gTlVMTCk7CisJCQlhdG9taWNfc2V0KCZyMTBfYmlvLT5yZW1haW5pbmcsIDApOwogCi0JCQkJcjEwX2Jpby0+bWFzdGVyX2JpbyA9IChzdHJ1Y3QgYmlvKilyYjI7Ci0JCQkJaWYgKHJiMikKLQkJCQkJYXRvbWljX2luYygmcmIyLT5yZW1haW5pbmcpOwotCQkJCXIxMF9iaW8tPm1kZGV2ID0gbWRkZXY7Ci0JCQkJc2V0X2JpdChSMTBCSU9fSXNSZWNvdmVyLCAmcjEwX2Jpby0+c3RhdGUpOwotCQkJCXIxMF9iaW8tPnNlY3RvciA9IHNlY3Q7CisJCQlyMTBfYmlvLT5tYXN0ZXJfYmlvID0gKHN0cnVjdCBiaW8qKXJiMjsKKwkJCWlmIChyYjIpCisJCQkJYXRvbWljX2luYygmcmIyLT5yZW1haW5pbmcpOworCQkJcjEwX2Jpby0+bWRkZXYgPSBtZGRldjsKKwkJCXNldF9iaXQoUjEwQklPX0lzUmVjb3ZlciwgJnIxMF9iaW8tPnN0YXRlKTsKKwkJCXIxMF9iaW8tPnNlY3RvciA9IHNlY3Q7CiAKLQkJCQlyYWlkMTBfZmluZF9waHlzKGNvbmYsIHIxMF9iaW8pOworCQkJcmFpZDEwX2ZpbmRfcGh5cyhjb25mLCByMTBfYmlvKTsKIAotCQkJCS8qIE5lZWQgdG8gY2hlY2sgaWYgdGhlIGFycmF5IHdpbGwgc3RpbGwgYmUKLQkJCQkgKiBkZWdyYWRlZAotCQkJCSAqLwotCQkJCWZvciAoaj0wOyBqPGNvbmYtPnJhaWRfZGlza3M7IGorKykKLQkJCQkJaWYgKGNvbmYtPm1pcnJvcnNbal0ucmRldiA9PSBOVUxMIHx8Ci0JCQkJCSAgICB0ZXN0X2JpdChGYXVsdHksICZjb25mLT5taXJyb3JzW2pdLnJkZXYtPmZsYWdzKSkgewotCQkJCQkJc3RpbGxfZGVncmFkZWQgPSAxOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQotCQkJCW11c3Rfc3luYyA9IGJpdG1hcF9zdGFydF9zeW5jKG1kZGV2LT5iaXRtYXAsIHNlY3QsCi0JCQkJCQkJICAgICAgJnN5bmNfYmxvY2tzLCBzdGlsbF9kZWdyYWRlZCk7Ci0KLQkJCQlmb3IgKGo9MDsgajxjb25mLT5jb3BpZXM7aisrKSB7Ci0JCQkJCWludCBkID0gcjEwX2Jpby0+ZGV2c1tqXS5kZXZudW07Ci0JCQkJCWlmIChjb25mLT5taXJyb3JzW2RdLnJkZXYgJiYKLQkJCQkJICAgIHRlc3RfYml0KEluX3N5bmMsICZjb25mLT5taXJyb3JzW2RdLnJkZXYtPmZsYWdzKSkgewotCQkJCQkJLyogVGhpcyBpcyB3aGVyZSB3ZSByZWFkIGZyb20gKi8KLQkJCQkJCWJpbyA9IHIxMF9iaW8tPmRldnNbMF0uYmlvOwotCQkJCQkJYmlvLT5iaV9uZXh0ID0gYmlvbGlzdDsKLQkJCQkJCWJpb2xpc3QgPSBiaW87Ci0JCQkJCQliaW8tPmJpX3ByaXZhdGUgPSByMTBfYmlvOwotCQkJCQkJYmlvLT5iaV9lbmRfaW8gPSBlbmRfc3luY19yZWFkOwotCQkJCQkJYmlvLT5iaV9ydyA9IFJFQUQ7Ci0JCQkJCQliaW8tPmJpX3NlY3RvciA9IHIxMF9iaW8tPmRldnNbal0uYWRkciArCi0JCQkJCQkJY29uZi0+bWlycm9yc1tkXS5yZGV2LT5kYXRhX29mZnNldDsKLQkJCQkJCWJpby0+YmlfYmRldiA9IGNvbmYtPm1pcnJvcnNbZF0ucmRldi0+YmRldjsKLQkJCQkJCWF0b21pY19pbmMoJmNvbmYtPm1pcnJvcnNbZF0ucmRldi0+bnJfcGVuZGluZyk7Ci0JCQkJCQlhdG9taWNfaW5jKCZyMTBfYmlvLT5yZW1haW5pbmcpOwotCQkJCQkJLyogYW5kIHdlIHdyaXRlIHRvICdpJyAqLwotCi0JCQkJCQlmb3IgKGs9MDsgazxjb25mLT5jb3BpZXM7IGsrKykKLQkJCQkJCQlpZiAocjEwX2Jpby0+ZGV2c1trXS5kZXZudW0gPT0gaSkKLQkJCQkJCQkJYnJlYWs7Ci0JCQkJCQlCVUdfT04oayA9PSBjb25mLT5jb3BpZXMpOwotCQkJCQkJYmlvID0gcjEwX2Jpby0+ZGV2c1sxXS5iaW87Ci0JCQkJCQliaW8tPmJpX25leHQgPSBiaW9saXN0OwotCQkJCQkJYmlvbGlzdCA9IGJpbzsKLQkJCQkJCWJpby0+YmlfcHJpdmF0ZSA9IHIxMF9iaW87Ci0JCQkJCQliaW8tPmJpX2VuZF9pbyA9IGVuZF9zeW5jX3dyaXRlOwotCQkJCQkJYmlvLT5iaV9ydyA9IFdSSVRFOwotCQkJCQkJYmlvLT5iaV9zZWN0b3IgPSByMTBfYmlvLT5kZXZzW2tdLmFkZHIgKwotCQkJCQkJCWNvbmYtPm1pcnJvcnNbaV0ucmRldi0+ZGF0YV9vZmZzZXQ7Ci0JCQkJCQliaW8tPmJpX2JkZXYgPSBjb25mLT5taXJyb3JzW2ldLnJkZXYtPmJkZXY7Ci0KLQkJCQkJCXIxMF9iaW8tPmRldnNbMF0uZGV2bnVtID0gZDsKLQkJCQkJCXIxMF9iaW8tPmRldnNbMV0uZGV2bnVtID0gaTsKLQotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJaWYgKGogPT0gY29uZi0+Y29waWVzKSB7Ci0JCQkJCS8qIENhbm5vdCByZWNvdmVyLCBzbyBhYm9ydCB0aGUgcmVjb3ZlcnkgKi8KLQkJCQkJcHV0X2J1ZihyMTBfYmlvKTsKLQkJCQkJaWYgKHJiMikKLQkJCQkJCWF0b21pY19kZWMoJnJiMi0+cmVtYWluaW5nKTsKLQkJCQkJcjEwX2JpbyA9IHJiMjsKLQkJCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KE1EX1JFQ09WRVJZX0lOVFIsCi0JCQkJCQkJICAgICAgJm1kZGV2LT5yZWNvdmVyeSkpCi0JCQkJCQlwcmludGsoS0VSTl9JTkZPICJtZC9yYWlkMTA6JXM6IGluc3VmZmljaWVudCAiCi0JCQkJCQkgICAgICAgIndvcmtpbmcgZGV2aWNlcyBmb3IgcmVjb3ZlcnkuXG4iLAotCQkJCQkJICAgICAgIG1kbmFtZShtZGRldikpOworCQkJLyogTmVlZCB0byBjaGVjayBpZiB0aGUgYXJyYXkgd2lsbCBzdGlsbCBiZQorCQkJICogZGVncmFkZWQKKwkJCSAqLworCQkJZm9yIChqPTA7IGo8Y29uZi0+cmFpZF9kaXNrczsgaisrKQorCQkJCWlmIChjb25mLT5taXJyb3JzW2pdLnJkZXYgPT0gTlVMTCB8fAorCQkJCSAgICB0ZXN0X2JpdChGYXVsdHksICZjb25mLT5taXJyb3JzW2pdLnJkZXYtPmZsYWdzKSkgeworCQkJCQlzdGlsbF9kZWdyYWRlZCA9IDE7CiAJCQkJCWJyZWFrOwogCQkJCX0KKworCQkJbXVzdF9zeW5jID0gYml0bWFwX3N0YXJ0X3N5bmMobWRkZXYtPmJpdG1hcCwgc2VjdCwKKwkJCQkJCSAgICAgICZzeW5jX2Jsb2Nrcywgc3RpbGxfZGVncmFkZWQpOworCisJCQlmb3IgKGo9MDsgajxjb25mLT5jb3BpZXM7aisrKSB7CisJCQkJaW50IGQgPSByMTBfYmlvLT5kZXZzW2pdLmRldm51bTsKKwkJCQlpZiAoIWNvbmYtPm1pcnJvcnNbZF0ucmRldiB8fAorCQkJCSAgICAhdGVzdF9iaXQoSW5fc3luYywgJmNvbmYtPm1pcnJvcnNbZF0ucmRldi0+ZmxhZ3MpKQorCQkJCQljb250aW51ZTsKKwkJCQkvKiBUaGlzIGlzIHdoZXJlIHdlIHJlYWQgZnJvbSAqLworCQkJCWJpbyA9IHIxMF9iaW8tPmRldnNbMF0uYmlvOworCQkJCWJpby0+YmlfbmV4dCA9IGJpb2xpc3Q7CisJCQkJYmlvbGlzdCA9IGJpbzsKKwkJCQliaW8tPmJpX3ByaXZhdGUgPSByMTBfYmlvOworCQkJCWJpby0+YmlfZW5kX2lvID0gZW5kX3N5bmNfcmVhZDsKKwkJCQliaW8tPmJpX3J3ID0gUkVBRDsKKwkJCQliaW8tPmJpX3NlY3RvciA9IHIxMF9iaW8tPmRldnNbal0uYWRkciArCisJCQkJCWNvbmYtPm1pcnJvcnNbZF0ucmRldi0+ZGF0YV9vZmZzZXQ7CisJCQkJYmlvLT5iaV9iZGV2ID0gY29uZi0+bWlycm9yc1tkXS5yZGV2LT5iZGV2OworCQkJCWF0b21pY19pbmMoJmNvbmYtPm1pcnJvcnNbZF0ucmRldi0+bnJfcGVuZGluZyk7CisJCQkJYXRvbWljX2luYygmcjEwX2Jpby0+cmVtYWluaW5nKTsKKwkJCQkvKiBhbmQgd2Ugd3JpdGUgdG8gJ2knICovCisKKwkJCQlmb3IgKGs9MDsgazxjb25mLT5jb3BpZXM7IGsrKykKKwkJCQkJaWYgKHIxMF9iaW8tPmRldnNba10uZGV2bnVtID09IGkpCisJCQkJCQlicmVhazsKKwkJCQlCVUdfT04oayA9PSBjb25mLT5jb3BpZXMpOworCQkJCWJpbyA9IHIxMF9iaW8tPmRldnNbMV0uYmlvOworCQkJCWJpby0+YmlfbmV4dCA9IGJpb2xpc3Q7CisJCQkJYmlvbGlzdCA9IGJpbzsKKwkJCQliaW8tPmJpX3ByaXZhdGUgPSByMTBfYmlvOworCQkJCWJpby0+YmlfZW5kX2lvID0gZW5kX3N5bmNfd3JpdGU7CisJCQkJYmlvLT5iaV9ydyA9IFdSSVRFOworCQkJCWJpby0+Ymlfc2VjdG9yID0gcjEwX2Jpby0+ZGV2c1trXS5hZGRyICsKKwkJCQkJY29uZi0+bWlycm9yc1tpXS5yZGV2LT5kYXRhX29mZnNldDsKKwkJCQliaW8tPmJpX2JkZXYgPSBjb25mLT5taXJyb3JzW2ldLnJkZXYtPmJkZXY7CisKKwkJCQlyMTBfYmlvLT5kZXZzWzBdLmRldm51bSA9IGQ7CisJCQkJcjEwX2Jpby0+ZGV2c1sxXS5kZXZudW0gPSBpOworCisJCQkJYnJlYWs7CiAJCQl9CisJCQlpZiAoaiA9PSBjb25mLT5jb3BpZXMpIHsKKwkJCQkvKiBDYW5ub3QgcmVjb3Zlciwgc28gYWJvcnQgdGhlIHJlY292ZXJ5ICovCisJCQkJcHV0X2J1ZihyMTBfYmlvKTsKKwkJCQlpZiAocmIyKQorCQkJCQlhdG9taWNfZGVjKCZyYjItPnJlbWFpbmluZyk7CisJCQkJcjEwX2JpbyA9IHJiMjsKKwkJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoTURfUkVDT1ZFUllfSU5UUiwKKwkJCQkJCSAgICAgICZtZGRldi0+cmVjb3ZlcnkpKQorCQkJCQlwcmludGsoS0VSTl9JTkZPICJtZC9yYWlkMTA6JXM6IGluc3VmZmljaWVudCAiCisJCQkJCSAgICAgICAid29ya2luZyBkZXZpY2VzIGZvciByZWNvdmVyeS5cbiIsCisJCQkJCSAgICAgICBtZG5hbWUobWRkZXYpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQogCQlpZiAoYmlvbGlzdCA9PSBOVUxMKSB7CiAJCQl3aGlsZSAocjEwX2JpbykgewogCQkJCXIxMGJpb190ICpyYjIgPSByMTBfYmlvOwpAQCAtMTk3Nyw3ICsxOTU2LDggQEAKIAogCQlpZiAoIWJpdG1hcF9zdGFydF9zeW5jKG1kZGV2LT5iaXRtYXAsIHNlY3Rvcl9uciwKIAkJCQkgICAgICAgJnN5bmNfYmxvY2tzLCBtZGRldi0+ZGVncmFkZWQpICYmCi0JCSAgICAhY29uZi0+ZnVsbHN5bmMgJiYgIXRlc3RfYml0KE1EX1JFQ09WRVJZX1JFUVVFU1RFRCwgJm1kZGV2LT5yZWNvdmVyeSkpIHsKKwkJICAgICFjb25mLT5mdWxsc3luYyAmJiAhdGVzdF9iaXQoTURfUkVDT1ZFUllfUkVRVUVTVEVELAorCQkJCQkJICZtZGRldi0+cmVjb3ZlcnkpKSB7CiAJCQkvKiBXZSBjYW4gc2tpcCB0aGlzIGJsb2NrICovCiAJCQkqc2tpcHBlZCA9IDE7CiAJCQlyZXR1cm4gc3luY19ibG9ja3MgKyBzZWN0b3JzX3NraXBwZWQ7CkBAIC0yMDIyLDcgKzIwMDIsOCBAQAogCQkJZm9yIChpPTA7IGk8Y29uZi0+Y29waWVzOyBpKyspIHsKIAkJCQlpbnQgZCA9IHIxMF9iaW8tPmRldnNbaV0uZGV2bnVtOwogCQkJCWlmIChyMTBfYmlvLT5kZXZzW2ldLmJpby0+YmlfZW5kX2lvKQotCQkJCQlyZGV2X2RlY19wZW5kaW5nKGNvbmYtPm1pcnJvcnNbZF0ucmRldiwgbWRkZXYpOworCQkJCQlyZGV2X2RlY19wZW5kaW5nKGNvbmYtPm1pcnJvcnNbZF0ucmRldiwKKwkJCQkJCQkgbWRkZXYpOwogCQkJfQogCQkJcHV0X2J1ZihyMTBfYmlvKTsKIAkJCWJpb2xpc3QgPSBOVUxMOwpAQCAtMjA0NywyNiArMjAyOCwyNyBAQAogCWRvIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJCWludCBsZW4gPSBQQUdFX1NJWkU7Ci0JCWRpc2sgPSAwOwogCQlpZiAoc2VjdG9yX25yICsgKGxlbj4+OSkgPiBtYXhfc2VjdG9yKQogCQkJbGVuID0gKG1heF9zZWN0b3IgLSBzZWN0b3JfbnIpIDw8IDk7CiAJCWlmIChsZW4gPT0gMCkKIAkJCWJyZWFrOwogCQlmb3IgKGJpbz0gYmlvbGlzdCA7IGJpbyA7IGJpbz1iaW8tPmJpX25leHQpIHsKKwkJCXN0cnVjdCBiaW8gKmJpbzI7CiAJCQlwYWdlID0gYmlvLT5iaV9pb192ZWNbYmlvLT5iaV92Y250XS5idl9wYWdlOwotCQkJaWYgKGJpb19hZGRfcGFnZShiaW8sIHBhZ2UsIGxlbiwgMCkgPT0gMCkgewotCQkJCS8qIHN0b3AgaGVyZSAqLwotCQkJCXN0cnVjdCBiaW8gKmJpbzI7Ci0JCQkJYmlvLT5iaV9pb192ZWNbYmlvLT5iaV92Y250XS5idl9wYWdlID0gcGFnZTsKLQkJCQlmb3IgKGJpbzIgPSBiaW9saXN0OyBiaW8yICYmIGJpbzIgIT0gYmlvOyBiaW8yID0gYmlvMi0+YmlfbmV4dCkgewotCQkJCQkvKiByZW1vdmUgbGFzdCBwYWdlIGZyb20gdGhpcyBiaW8gKi8KLQkJCQkJYmlvMi0+YmlfdmNudC0tOwotCQkJCQliaW8yLT5iaV9zaXplIC09IGxlbjsKLQkJCQkJYmlvMi0+YmlfZmxhZ3MgJj0gfigxPDwgQklPX1NFR19WQUxJRCk7Ci0JCQkJfQotCQkJCWdvdG8gYmlvX2Z1bGw7CisJCQlpZiAoYmlvX2FkZF9wYWdlKGJpbywgcGFnZSwgbGVuLCAwKSkKKwkJCQljb250aW51ZTsKKworCQkJLyogc3RvcCBoZXJlICovCisJCQliaW8tPmJpX2lvX3ZlY1tiaW8tPmJpX3ZjbnRdLmJ2X3BhZ2UgPSBwYWdlOworCQkJZm9yIChiaW8yID0gYmlvbGlzdDsKKwkJCSAgICAgYmlvMiAmJiBiaW8yICE9IGJpbzsKKwkJCSAgICAgYmlvMiA9IGJpbzItPmJpX25leHQpIHsKKwkJCQkvKiByZW1vdmUgbGFzdCBwYWdlIGZyb20gdGhpcyBiaW8gKi8KKwkJCQliaW8yLT5iaV92Y250LS07CisJCQkJYmlvMi0+Ymlfc2l6ZSAtPSBsZW47CisJCQkJYmlvMi0+YmlfZmxhZ3MgJj0gfigxPDwgQklPX1NFR19WQUxJRCk7CiAJCQl9Ci0JCQlkaXNrID0gaTsKKwkJCWdvdG8gYmlvX2Z1bGw7CiAJCX0KIAkJbnJfc2VjdG9ycyArPSBsZW4+Pjk7CiAJCXNlY3Rvcl9uciArPSBsZW4+Pjk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ1LmMgYi9kcml2ZXJzL21kL3JhaWQ1LmMKaW5kZXggNDliZjVmOC4uMzQ2ZTY5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNS5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDUuYwpAQCAtMTcwMCwyNyArMTcwMCwyNSBAQAogCXJhaWQ1X2NvbmZfdCAqY29uZiA9IG1kZGV2LT5wcml2YXRlOwogCXByX2RlYnVnKCJyYWlkNDU2OiBlcnJvciBjYWxsZWRcbiIpOwogCi0JaWYgKCF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpIHsKLQkJc2V0X2JpdChNRF9DSEFOR0VfREVWUywgJm1kZGV2LT5mbGFncyk7Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSkgewotCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjb25mLT5kZXZpY2VfbG9jaywgZmxhZ3MpOwotCQkJbWRkZXYtPmRlZ3JhZGVkKys7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25mLT5kZXZpY2VfbG9jaywgZmxhZ3MpOwotCQkJLyoKLQkJCSAqIGlmIHJlY292ZXJ5IHdhcyBydW5uaW5nLCBtYWtlIHN1cmUgaXQgYWJvcnRzLgotCQkJICovCi0JCQlzZXRfYml0KE1EX1JFQ09WRVJZX0lOVFIsICZtZGRldi0+cmVjb3ZlcnkpOwotCQl9Ci0JCXNldF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpOwotCQlwcmludGsoS0VSTl9BTEVSVAotCQkgICAgICAgIm1kL3JhaWQ6JXM6IERpc2sgZmFpbHVyZSBvbiAlcywgZGlzYWJsaW5nIGRldmljZS5cbiIKLQkJICAgICAgICJtZC9yYWlkOiVzOiBPcGVyYXRpb24gY29udGludWluZyBvbiAlZCBkZXZpY2VzLlxuIiwKLQkJICAgICAgIG1kbmFtZShtZGRldiksCi0JCSAgICAgICBiZGV2bmFtZShyZGV2LT5iZGV2LCBiKSwKLQkJICAgICAgIG1kbmFtZShtZGRldiksCi0JCSAgICAgICBjb25mLT5yYWlkX2Rpc2tzIC0gbWRkZXYtPmRlZ3JhZGVkKTsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbmYtPmRldmljZV9sb2NrLCBmbGFncyk7CisJCW1kZGV2LT5kZWdyYWRlZCsrOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25mLT5kZXZpY2VfbG9jaywgZmxhZ3MpOworCQkvKgorCQkgKiBpZiByZWNvdmVyeSB3YXMgcnVubmluZywgbWFrZSBzdXJlIGl0IGFib3J0cy4KKwkJICovCisJCXNldF9iaXQoTURfUkVDT1ZFUllfSU5UUiwgJm1kZGV2LT5yZWNvdmVyeSk7CiAJfQorCXNldF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpOworCXNldF9iaXQoTURfQ0hBTkdFX0RFVlMsICZtZGRldi0+ZmxhZ3MpOworCXByaW50ayhLRVJOX0FMRVJUCisJICAgICAgICJtZC9yYWlkOiVzOiBEaXNrIGZhaWx1cmUgb24gJXMsIGRpc2FibGluZyBkZXZpY2UuXG4iCisJICAgICAgICJtZC9yYWlkOiVzOiBPcGVyYXRpb24gY29udGludWluZyBvbiAlZCBkZXZpY2VzLlxuIiwKKwkgICAgICAgbWRuYW1lKG1kZGV2KSwKKwkgICAgICAgYmRldm5hbWUocmRldi0+YmRldiwgYiksCisJICAgICAgIG1kbmFtZShtZGRldiksCisJICAgICAgIGNvbmYtPnJhaWRfZGlza3MgLSBtZGRldi0+ZGVncmFkZWQpOwogfQogCiAvKgpAQCAtMzk2MCw3ICszOTU4LDcgQEAKIAkJCS8qIHNwaW5sb2NrIGlzIG5lZWRlZCBhcyByZXNoYXBlX3Byb2dyZXNzIG1heSBiZQogCQkJICogNjRiaXQgb24gYSAzMmJpdCBwbGF0Zm9ybSwgYW5kIHNvIGl0IG1pZ2h0IGJlCiAJCQkgKiBwb3NzaWJsZSB0byBzZWUgYSBoYWxmLXVwZGF0ZWQgdmFsdWUKLQkJCSAqIE9mY291cnNlIHJlc2hhcGVfcHJvZ3Jlc3MgY291bGQgY2hhbmdlIGFmdGVyCisJCQkgKiBPZiBjb3Vyc2UgcmVzaGFwZV9wcm9ncmVzcyBjb3VsZCBjaGFuZ2UgYWZ0ZXIKIAkJCSAqIHRoZSBsb2NrIGlzIGRyb3BwZWQsIHNvIG9uY2Ugd2UgZ2V0IGEgcmVmZXJlbmNlCiAJCQkgKiB0byB0aGUgc3RyaXBlIHRoYXQgd2UgdGhpbmsgaXQgaXMsIHdlIHdpbGwgaGF2ZQogCQkJICogdG8gY2hlY2sgYWdhaW4uCkBAIC01MzkxLDcgKzUzODksOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlzZXRfY2FwYWNpdHkobWRkZXYtPmdlbmRpc2ssIG1kZGV2LT5hcnJheV9zZWN0b3JzKTsKIAlyZXZhbGlkYXRlX2Rpc2sobWRkZXYtPmdlbmRpc2spOwotCWlmIChzZWN0b3JzID4gbWRkZXYtPmRldl9zZWN0b3JzICYmIG1kZGV2LT5yZWNvdmVyeV9jcCA9PSBNYXhTZWN0b3IpIHsKKwlpZiAoc2VjdG9ycyA+IG1kZGV2LT5kZXZfc2VjdG9ycyAmJgorCSAgICBtZGRldi0+cmVjb3ZlcnlfY3AgPiBtZGRldi0+ZGV2X3NlY3RvcnMpIHsKIAkJbWRkZXYtPnJlY292ZXJ5X2NwID0gbWRkZXYtPmRldl9zZWN0b3JzOwogCQlzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgJm1kZGV2LT5yZWNvdmVyeSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdzIxMDIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHcyMTAyLmMKaW5kZXggZjViOWRhMS4uZDMxMjMyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdzIxMDIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R3MjEwMi5jCkBAIC0xMzc3LDcgKzEzNzcsNyBAQAogCXsgMHgwZiwgS0VZX0JMVUUgfSwJLyogYm90dG9tIHllbGxvdyBidXR0b24gKi8KIAl7IDB4MTQsIEtFWV9BVURJTyB9LAkvKiBTbmFwc2hvdCAqLwogCXsgMHgzOCwgS0VZX1RWIH0sCS8qIFRWL1JhZGlvICovCi0JeyAweDBjLCBLRVlfRVNDIH0JLyogdXBwZXIgUmVkIGJ1dHR0b24gKi8KKwl7IDB4MGMsIEtFWV9FU0MgfQkvKiB1cHBlciBSZWQgYnV0dG9uICovCiB9OwogCiBzdGF0aWMgc3RydWN0IHJjX21hcF9kdmJfdXNiX3RhYmxlX3RhYmxlIGtleXNfdGFibGVzW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWF2Yy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1hdmMuYwppbmRleCBmYzVjY2Q4Li4yMWM1MmUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWF2Yy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtYXZjLmMKQEAgLTEzMjAsMTQgKzEzMjAsMTAgQEAKIHsKIAlpbnQgcmV0OwogCi0JbXV0ZXhfbG9jaygmZmR0di0+YXZjX211dGV4KTsKLQogCXJldCA9IGZkdHZfcmVhZChmZHR2LCBhZGRyLCBkYXRhKTsKIAlpZiAocmV0IDwgMCkKIAkJZGV2X2VycihmZHR2LT5kZXZpY2UsICJDTVA6IHJlYWQgSS9PIGVycm9yXG4iKTsKIAotCW11dGV4X3VubG9jaygmZmR0di0+YXZjX211dGV4KTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEzMzUsMTggKzEzMzEsOSBAQAogewogCWludCByZXQ7CiAKLQltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwotCi0JLyogZGF0YVtdIGlzIHN0YWNrLWFsbG9jYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSBETUEtbWFwcGVkLiAqLwotCW1lbWNweShmZHR2LT5hdmNfZGF0YSwgZGF0YSwgOCk7Ci0KLQlyZXQgPSBmZHR2X2xvY2soZmR0diwgYWRkciwgZmR0di0+YXZjX2RhdGEpOworCXJldCA9IGZkdHZfbG9jayhmZHR2LCBhZGRyLCBkYXRhKTsKIAlpZiAocmV0IDwgMCkKIAkJZGV2X2VycihmZHR2LT5kZXZpY2UsICJDTVA6IGxvY2sgSS9PIGVycm9yXG4iKTsKLQllbHNlCi0JCW1lbWNweShkYXRhLCBmZHR2LT5hdmNfZGF0YSwgOCk7Ci0KLQltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1mdy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1mdy5jCmluZGV4IDgwMjJiNzQuLjg2NGI2MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtZncuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWZ3LmMKQEAgLTEyNSw2ICsxMjUsNyBAQAogCiAJCWkgPSAoaSArIDEpICYgKE5fUEFDS0VUUyAtIDEpOwogCX0KKwlmd19pc29fY29udGV4dF9xdWV1ZV9mbHVzaChjdHgtPmNvbnRleHQpOwogCWN0eC0+Y3VycmVudF9wYWNrZXQgPSBpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWcKaW5kZXggMjk5OTk0Yy4uZTRjOTdmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vS2NvbmZpZwpAQCAtMTY2LDIxICsxNjYsNiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcmFkaW8tbWF4aXJhZGlvLgogCi1jb25maWcgUkFESU9fTUFFU1RSTwotCXRyaXN0YXRlICJNYWVzdHJvIG9uIGJvYXJkIHJhZGlvIgotCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBQQ0kKLQktLS1oZWxwLS0tCi0JICBTYXkgWSBoZXJlIHRvIGRpcmVjdGx5IHN1cHBvcnQgdGhlIG9uLWJvYXJkIHJhZGlvIHR1bmVyIG9uIHRoZQotCSAgTWFlc3RybyAyIG9yIDJFIHNvdW5kIGNhcmQuCi0KLQkgIEluIG9yZGVyIHRvIGNvbnRyb2wgeW91ciByYWRpbyBjYXJkLCB5b3Ugd2lsbCBuZWVkIHRvIHVzZSBwcm9ncmFtcwotCSAgdGhhdCBhcmUgY29tcGF0aWJsZSB3aXRoIHRoZSBWaWRlbyBGb3IgTGludXggQVBJLiAgSW5mb3JtYXRpb24gb24KLQkgIHRoaXMgQVBJIGFuZCBwb2ludGVycyB0byAidjRsIiBwcm9ncmFtcyBtYXkgYmUgZm91bmQgYXQKLQkgIDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvQVBJLmh0bWw+LgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByYWRpby1tYWVzdHJvLgotCiBjb25maWcgUkFESU9fTUlST1BDTTIwCiAJdHJpc3RhdGUgIm1pcm9TT1VORCBQQ00yMCByYWRpbyIKIAlkZXBlbmRzIG9uIElTQSAmJiBWSURFT19WNEwyICYmIFNORApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vTWFrZWZpbGUKaW5kZXggMmZhYTMzMy4uZjQ4NGE2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL01ha2VmaWxlCkBAIC0xNiw3ICsxNiw2IEBACiBvYmotJChDT05GSUdfUkFESU9fVFJVU1QpICs9IHJhZGlvLXRydXN0Lm8KIG9iai0kKENPTkZJR19JMkNfU0k0NzEzKSArPSBzaTQ3MTMtaTJjLm8KIG9iai0kKENPTkZJR19SQURJT19TSTQ3MTMpICs9IHJhZGlvLXNpNDcxMy5vCi1vYmotJChDT05GSUdfUkFESU9fTUFFU1RSTykgKz0gcmFkaW8tbWFlc3Ryby5vCiBvYmotJChDT05GSUdfUkFESU9fTUlST1BDTTIwKSArPSByYWRpby1taXJvcGNtMjAubwogb2JqLSQoQ09ORklHX1VTQl9EU0JSKSArPSBkc2JyMTAwLm8KIG9iai0kKENPTkZJR19SQURJT19TSTQ3MFgpICs9IHNpNDcweC8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWFlc3Ryby5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tYWVzdHJvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhZjYxYmYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tYWVzdHJvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NTIgKzAsMCBAQAotLyogTWFlc3RybyBQQ0kgc291bmQgY2FyZCByYWRpbyBkcml2ZXIgZm9yIExpbnV4IHN1cHBvcnQKLSAqIChjKSAyMDAwIEEuIFRsYWxrYSwgYXRsa2FAcGcuZ2RhLnBsCi0gKiBOb3RlcyBvbiB0aGUgaGFyZHdhcmUKLSAqCi0gKiAgKyBGcmVxdWVuY3kgY29udHJvbCBpcyBkb25lIGRpZ2l0YWxseQotICogICsgTm8gdm9sdW1lIGNvbnRyb2wgLSBvbmx5IG11dGUvdW5tdXRlIC0geW91IGhhdmUgdG8gdXNlIEF1eCBsaW5lIHZvbHVtZQotICogIGNvbnRyb2wgb24gTWFlc3RybyBjYXJkIHRvIHNldCB0aGUgdm9sdW1lCi0gKiAgKyBSYWRpbyBzdGF0dXMgKHR1bmVkL25vdF90dW5lZCBhbmQgc3RlcmVvL21vbm8pIGlzIHZhbGlkIHNvbWUgdGltZSBhZnRlcgotICogIGZyZXF1ZW5jeSBzZXR0aW5nICg+MTAwbXMpIGFuZCBvbmx5IHdoZW4gdGhlIHJhZGlvIGlzIHVubXV0ZWQuCi0gKiAgdmVyc2lvbiAwLjAyCi0gKiAgKyBpbyBwb3J0IGlzIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQgLSBvbmx5IHRoZSBmaXJzdCByYWRpbyBpcyB1c2VkCi0gKiAgdmVyc2lvbiAwLjAzCi0gKiAgKyB0aHJlYWQgYWNjZXNzIGxvY2tpbmcgYWRkaXRpb25zCi0gKiAgdmVyc2lvbiAwLjA0Ci0gKiArIGNvZGUgaW1wcm92ZW1lbnRzCi0gKiArIFZJREVPX1RVTkVSX0xPVyBpcyBwZXJtYW5lbnQKLSAqCi0gKiBDb252ZXJ0ZWQgdG8gVjRMMiBBUEkgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4gICAgICAvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8gICAgICovCi0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+Ci0KLU1PRFVMRV9BVVRIT1IoIkFkYW0gVGxhbGthLCBhdGxrYUBwZy5nZGEucGwiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiUmFkaW8gZHJpdmVyIGZvciB0aGUgTWFlc3RybyBQQ0kgc291bmQgY2FyZCByYWRpby4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotc3RhdGljIGludCByYWRpb19uciA9IC0xOwotbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOwotCi0jZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwgMCwgNikKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JIjAuMDYiCi0KLSNkZWZpbmUgR1BJT19EQVRBCTB4NjAgICAvKiBwb3J0IG9mZnNldCBmcm9tIEVTU19JT19CQVNFICovCi0KLSNkZWZpbmUgSU9fTUFTSwkJNCAgICAgIC8qIG1hc2sgICAgICByZWdpc3RlciBvZmZzZXQgZnJvbSBHUElPX0RBVEEKLQkJCQliaXRzIDE9dW5tYXNrIHdyaXRlIHRvIGdpdmVuIGJpdCAqLwotI2RlZmluZSBJT19ESVIJCTggICAgICAvKiBkaXJlY3Rpb24gcmVnaXN0ZXIgb2Zmc2V0IGZyb20gR1BJT19EQVRBCi0JCQkJYml0cyAwLzE9cmVhZC93cml0ZSBkaXJlY3Rpb24gKi8KLQotI2RlZmluZSBHUElPNgkJMHgwMDQwIC8qIG1hc2sgYml0cyBmb3IgR1BJTyBsaW5lcyAqLwotI2RlZmluZSBHUElPNwkJMHgwMDgwCi0jZGVmaW5lIEdQSU84CQkweDAxMDAKLSNkZWZpbmUgR1BJTzkJCTB4MDIwMAotCi0jZGVmaW5lIFNUUl9EQVRBCUdQSU82ICAvKiByYWRpbyBURUE1NzU3IHBpbnMgYW5kIEdQSU8gYml0cyAqLwotI2RlZmluZSBTVFJfQ0xLCQlHUElPNwotI2RlZmluZSBTVFJfV1JFTglHUElPOAotI2RlZmluZSBTVFJfTU9TVAlHUElPOQotCi0jZGVmaW5lIEZSRVFfTE8JCSA1MCoxNjAwMAotI2RlZmluZSBGUkVRX0hJCQkxNTAqMTYwMDAKLQotI2RlZmluZSBGUkVRX0lGCQkxNzEyMDAgLyogMTAuNyoxNjAwMCAgICovCi0jZGVmaW5lIEZSRVFfU1RFUAkyMDAgICAgLyogMTIuNSoxNiAgICAgICovCi0KLSNkZWZpbmUgRlJFUTJCSVRTKHgpCSgoKCh1bnNpZ25lZCBpbnQpKHgpK0ZSRVFfSUYrKEZSRVFfU1RFUDw8MSkpXAotCQkJLyhGUkVRX1NURVA8PDIpKTw8MikgLyogKHg9PWZtaHoqMTYqMTAwMCkgLT4gYml0cyAqLwotCi0jZGVmaW5lIEJJVFMyRlJFUSh4KQkoKHgpICogRlJFUV9TVEVQIC0gRlJFUV9JRikKLQotc3RydWN0IG1hZXN0cm8gewotCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXY7Ci0Jc3RydWN0IG11dGV4IGxvY2s7Ci0KLQl1MTYJaW87CS8qIGJhc2Ugb2YgTWFlc3RybyBjYXJkIHJhZGlvIGlvIChHUElPX0RBVEEpKi8KLQl1MTYJbXV0ZWQ7CS8qIFZJREVPX0FVRElPX01VVEUgKi8KLQl1MTYJc3RlcmVvOwkvKiBWSURFT19UVU5FUl9TVEVSRU9fT04gKi8KLQl1MTYJdHVuZWQ7CS8qIHNpZ25hbCBzdHJlbmd0aCAoMCBvciAweGZmZmYpICovCi19OwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtYWVzdHJvICp0b19tYWVzdHJvKHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYpCi17Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IG1hZXN0cm8sIHY0bDJfZGV2KTsKLX0KLQotc3RhdGljIHUzMiByYWRpb19iaXRzX2dldChzdHJ1Y3QgbWFlc3RybyAqZGV2KQotewotCXUxNiBpbyA9IGRldi0+aW8sIGwsIHJkYXRhOwotCXUzMiBkYXRhID0gMDsKLQl1MTYgb21hc2s7Ci0KLQlvbWFzayA9IGludyhpbyArIElPX01BU0spOwotCW91dHcofihTVFJfQ0xLIHwgU1RSX1dSRU4pLCBpbyArIElPX01BU0spOwotCW91dHcoMCwgaW8pOwotCXVkZWxheSgxNik7Ci0KLQlmb3IgKGwgPSAyNDsgbC0tOykgewotCQlvdXR3KFNUUl9DTEssIGlvKTsJCS8qIEhJIHN0YXRlICovCi0JCXVkZWxheSgyKTsKLQkJaWYgKCFsKQotCQkJZGV2LT50dW5lZCA9IGludyhpbykgJiBTVFJfTU9TVCA/IDAgOiAweGZmZmY7Ci0JCW91dHcoMCwgaW8pOwkJCS8qIExPIHN0YXRlICovCi0JCXVkZWxheSgyKTsKLQkJZGF0YSA8PD0gMTsJCQkvKiBzaGlmdCBkYXRhICovCi0JCXJkYXRhID0gaW53KGlvKTsKLQkJaWYgKCFsKQotCQkJZGV2LT5zdGVyZW8gPSAocmRhdGEgJiBTVFJfTU9TVCkgPyAgMCA6IDE7Ci0JCWVsc2UgaWYgKHJkYXRhICYgU1RSX0RBVEEpCi0JCQlkYXRhKys7Ci0JCXVkZWxheSgyKTsKLQl9Ci0KLQlpZiAoZGV2LT5tdXRlZCkKLQkJb3V0dyhTVFJfV1JFTiwgaW8pOwotCi0JdWRlbGF5KDQpOwotCW91dHcob21hc2ssIGlvICsgSU9fTUFTSyk7Ci0KLQlyZXR1cm4gZGF0YSAmIDB4M2ZmZTsKLX0KLQotc3RhdGljIHZvaWQgcmFkaW9fYml0c19zZXQoc3RydWN0IG1hZXN0cm8gKmRldiwgdTMyIGRhdGEpCi17Ci0JdTE2IGlvID0gZGV2LT5pbywgbCwgYml0czsKLQl1MTYgb21hc2ssIG9kaXI7Ci0KLQlvbWFzayA9IGludyhpbyArIElPX01BU0spOwotCW9kaXIgPSAoaW53KGlvICsgSU9fRElSKSAmIH5TVFJfREFUQSkgfCAoU1RSX0NMSyB8IFNUUl9XUkVOKTsKLQlvdXR3KG9kaXIgfCBTVFJfREFUQSwgaW8gKyBJT19ESVIpOwotCW91dHcofihTVFJfREFUQSB8IFNUUl9DTEsgfCBTVFJfV1JFTiksIGlvICsgSU9fTUFTSyk7Ci0JdWRlbGF5KDE2KTsKLQlmb3IgKGwgPSAyNTsgbDsgbC0tKSB7Ci0JCWJpdHMgPSAoKGRhdGEgPj4gMTgpICYgU1RSX0RBVEEpIHwgU1RSX1dSRU47Ci0JCWRhdGEgPDw9IDE7CQkJLyogc2hpZnQgZGF0YSAqLwotCQlvdXR3KGJpdHMsIGlvKTsJCQkvKiBzdGFydCBzdHJvYmUgKi8KLQkJdWRlbGF5KDIpOwotCQlvdXR3KGJpdHMgfCBTVFJfQ0xLLCBpbyk7CS8qIEhJIGxldmVsICovCi0JCXVkZWxheSgyKTsKLQkJb3V0dyhiaXRzLCBpbyk7CQkJLyogTE8gbGV2ZWwgKi8KLQkJdWRlbGF5KDQpOwotCX0KLQotCWlmICghZGV2LT5tdXRlZCkKLQkJb3V0dygwLCBpbyk7Ci0KLQl1ZGVsYXkoNCk7Ci0Jb3V0dyhvbWFzaywgaW8gKyBJT19NQVNLKTsKLQlvdXR3KG9kaXIsIGlvICsgSU9fRElSKTsKLQltc2xlZXAoMTI1KTsKLX0KLQotc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAotCQkJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICp2KQotewotCXN0cnVjdCBtYWVzdHJvICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCi0Jc3RybGNweSh2LT5kcml2ZXIsICJyYWRpby1tYWVzdHJvIiwgc2l6ZW9mKHYtPmRyaXZlcikpOwotCXN0cmxjcHkodi0+Y2FyZCwgIk1hZXN0cm8gUmFkaW8iLCBzaXplb2Yodi0+Y2FyZCkpOwotCXNucHJpbnRmKHYtPmJ1c19pbmZvLCBzaXplb2Yodi0+YnVzX2luZm8pLCAiUENJOiVzIiwgcGNpX25hbWUoZGV2LT5wZGV2KSk7Ci0Jdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047Ci0Jdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCi17Ci0Jc3RydWN0IG1hZXN0cm8gKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0KLQlpZiAodi0+aW5kZXggPiAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW11dGV4X2xvY2soJmRldi0+bG9jayk7Ci0JcmFkaW9fYml0c19nZXQoZGV2KTsKLQotCXN0cmxjcHkodi0+bmFtZSwgIkZNIiwgc2l6ZW9mKHYtPm5hbWUpKTsKLQl2LT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKLQl2LT5yYW5nZWxvdyA9IEZSRVFfTE87Ci0Jdi0+cmFuZ2VoaWdoID0gRlJFUV9ISTsKLQl2LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTyB8IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKLQl2LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTE9XOwotCWlmIChkZXYtPnN0ZXJlbykKLQkJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87Ci0JZWxzZQotCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87Ci0Jdi0+c2lnbmFsID0gZGV2LT50dW5lZDsKLQltdXRleF91bmxvY2soJmRldi0+bG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQotewotCXJldHVybiB2LT5pbmRleCA/IC1FSU5WQUwgOiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQotewotCXN0cnVjdCBtYWVzdHJvICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCi0JaWYgKGYtPnR1bmVyICE9IDAgfHwgZi0+dHlwZSAhPSBWNEwyX1RVTkVSX1JBRElPKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoZi0+ZnJlcXVlbmN5IDwgRlJFUV9MTyB8fCBmLT5mcmVxdWVuY3kgPiBGUkVRX0hJKQotCQlyZXR1cm4gLUVJTlZBTDsKLQltdXRleF9sb2NrKCZkZXYtPmxvY2spOwotCXJhZGlvX2JpdHNfc2V0KGRldiwgRlJFUTJCSVRTKGYtPmZyZXF1ZW5jeSkpOwotCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKLXsKLQlzdHJ1Y3QgbWFlc3RybyAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQotCWlmIChmLT50dW5lciAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKLQltdXRleF9sb2NrKCZkZXYtPmxvY2spOwotCWYtPmZyZXF1ZW5jeSA9IEJJVFMyRlJFUShyYWRpb19iaXRzX2dldChkZXYpKTsKLQltdXRleF91bmxvY2soJmRldi0+bG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKLXsKLQlzd2l0Y2ggKHFjLT5pZCkgewotCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAxKTsKLQl9Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKLXsKLQlzdHJ1Y3QgbWFlc3RybyAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQotCXN3aXRjaCAoY3RybC0+aWQpIHsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCWN0cmwtPnZhbHVlID0gZGV2LT5tdXRlZDsKLQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCi17Ci0Jc3RydWN0IG1hZXN0cm8gKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JdTE2IGlvID0gZGV2LT5pbzsKLQl1MTYgb21hc2s7Ci0KLQlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQltdXRleF9sb2NrKCZkZXYtPmxvY2spOwotCQlvbWFzayA9IGludyhpbyArIElPX01BU0spOwotCQlvdXR3KH5TVFJfV1JFTiwgaW8gKyBJT19NQVNLKTsKLQkJZGV2LT5tdXRlZCA9IGN0cmwtPnZhbHVlOwotCQlvdXR3KGRldi0+bXV0ZWQgPyBTVFJfV1JFTiA6IDAsIGlvKTsKLQkJdWRlbGF5KDQpOwotCQlvdXR3KG9tYXNrLCBpbyArIElPX01BU0spOwotCQltc2xlZXAoMTI1KTsKLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwotCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkKLXsKLQkqaSA9IDA7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKQotewotCXJldHVybiBpID8gLUVJTlZBTCA6IDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQotewotCWEtPmluZGV4ID0gMDsKLQlzdHJsY3B5KGEtPm5hbWUsICJSYWRpbyIsIHNpemVvZihhLT5uYW1lKSk7Ci0JYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCi17Ci0JcmV0dXJuIGEtPmluZGV4ID8gLUVJTlZBTCA6IDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgbWFlc3Ryb19mb3BzID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkudW5sb2NrZWRfaW9jdGwJPSB2aWRlb19pb2N0bDIsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIG1hZXN0cm9faW9jdGxfb3BzID0gewotCS52aWRpb2NfcXVlcnljYXAgICAgPSB2aWRpb2NfcXVlcnljYXAsCi0JLnZpZGlvY19nX3R1bmVyICAgICA9IHZpZGlvY19nX3R1bmVyLAotCS52aWRpb2Nfc190dW5lciAgICAgPSB2aWRpb2Nfc190dW5lciwKLQkudmlkaW9jX2dfYXVkaW8gICAgID0gdmlkaW9jX2dfYXVkaW8sCi0JLnZpZGlvY19zX2F1ZGlvICAgICA9IHZpZGlvY19zX2F1ZGlvLAotCS52aWRpb2NfZ19pbnB1dCAgICAgPSB2aWRpb2NfZ19pbnB1dCwKLQkudmlkaW9jX3NfaW5wdXQgICAgID0gdmlkaW9jX3NfaW5wdXQsCi0JLnZpZGlvY19nX2ZyZXF1ZW5jeSA9IHZpZGlvY19nX2ZyZXF1ZW5jeSwKLQkudmlkaW9jX3NfZnJlcXVlbmN5ID0gdmlkaW9jX3NfZnJlcXVlbmN5LAotCS52aWRpb2NfcXVlcnljdHJsICAgPSB2aWRpb2NfcXVlcnljdHJsLAotCS52aWRpb2NfZ19jdHJsICAgICAgPSB2aWRpb2NfZ19jdHJsLAotCS52aWRpb2Nfc19jdHJsICAgICAgPSB2aWRpb2Nfc19jdHJsLAotfTsKLQotc3RhdGljIHUxNiBfX2RldmluaXQgcmFkaW9fcG93ZXJfb24oc3RydWN0IG1hZXN0cm8gKmRldikKLXsKLQlyZWdpc3RlciB1MTYgaW8gPSBkZXYtPmlvOwotCXJlZ2lzdGVyIHUzMiBvZnJlcTsKLQl1MTYgb21hc2ssIG9kaXI7Ci0KLQlvbWFzayA9IGludyhpbyArIElPX01BU0spOwotCW9kaXIgPSAoaW53KGlvICsgSU9fRElSKSAmIH5TVFJfREFUQSkgfCAoU1RSX0NMSyB8IFNUUl9XUkVOKTsKLQlvdXR3KG9kaXIgJiB+U1RSX1dSRU4sIGlvICsgSU9fRElSKTsKLQlkZXYtPm11dGVkID0gaW53KGlvKSAmIFNUUl9XUkVOID8gMCA6IDE7Ci0Jb3V0dyhvZGlyLCBpbyArIElPX0RJUik7Ci0Jb3V0dyh+KFNUUl9XUkVOIHwgU1RSX0NMSyksIGlvICsgSU9fTUFTSyk7Ci0Jb3V0dyhkZXYtPm11dGVkID8gMCA6IFNUUl9XUkVOLCBpbyk7Ci0JdWRlbGF5KDE2KTsKLQlvdXR3KG9tYXNrLCBpbyArIElPX01BU0spOwotCW9mcmVxID0gcmFkaW9fYml0c19nZXQoZGV2KTsKLQotCWlmICgob2ZyZXEgPCBGUkVRMkJJVFMoRlJFUV9MTykpIHx8IChvZnJlcSA+IEZSRVEyQklUUyhGUkVRX0hJKSkpCi0JCW9mcmVxID0gRlJFUTJCSVRTKEZSRVFfTE8pOwotCXJhZGlvX2JpdHNfc2V0KGRldiwgb2ZyZXEpOwotCi0JcmV0dXJuIChvZnJlcSA9PSByYWRpb19iaXRzX2dldChkZXYpKTsKLX0KLQotc3RhdGljIGludCBfX2RldmluaXQgbWFlc3Ryb19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQotewotCXN0cnVjdCBtYWVzdHJvICpkZXY7Ci0Jc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldjsKLQlpbnQgcmV0dmFsOwotCi0JcmV0dmFsID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7Ci0JaWYgKHJldHZhbCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJlbmFibGluZyBwY2kgZGV2aWNlIGZhaWxlZCFcbiIpOwotCQlnb3RvIGVycjsKLQl9Ci0KLQlyZXR2YWwgPSAtRU5PTUVNOwotCi0JZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOwotCWlmIChkZXYgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJub3QgZW5vdWdoIG1lbW9yeVxuIik7Ci0JCWdvdG8gZXJyOwotCX0KLQotCXY0bDJfZGV2ID0gJmRldi0+djRsMl9kZXY7Ci0JbXV0ZXhfaW5pdCgmZGV2LT5sb2NrKTsKLQlkZXYtPnBkZXYgPSBwZGV2OwotCi0Jc3RybGNweSh2NGwyX2Rldi0+bmFtZSwgIm1hZXN0cm8iLCBzaXplb2YodjRsMl9kZXYtPm5hbWUpKTsKLQotCXJldHZhbCA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5kZXYsIHY0bDJfZGV2KTsKLQlpZiAocmV0dmFsIDwgMCkgewotCQl2NGwyX2Vycih2NGwyX2RldiwgIkNvdWxkIG5vdCByZWdpc3RlciB2NGwyX2RldmljZVxuIik7Ci0JCWdvdG8gZXJyZnI7Ci0JfQotCi0JZGV2LT5pbyA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSArIEdQSU9fREFUQTsKLQotCXN0cmxjcHkoZGV2LT52ZGV2Lm5hbWUsIHY0bDJfZGV2LT5uYW1lLCBzaXplb2YoZGV2LT52ZGV2Lm5hbWUpKTsKLQlkZXYtPnZkZXYudjRsMl9kZXYgPSB2NGwyX2RldjsKLQlkZXYtPnZkZXYuZm9wcyA9ICZtYWVzdHJvX2ZvcHM7Ci0JZGV2LT52ZGV2LmlvY3RsX29wcyA9ICZtYWVzdHJvX2lvY3RsX29wczsKLQlkZXYtPnZkZXYucmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5OwotCXZpZGVvX3NldF9kcnZkYXRhKCZkZXYtPnZkZXYsIGRldik7Ci0KLQlpZiAoIXJhZGlvX3Bvd2VyX29uKGRldikpIHsKLQkJcmV0dmFsID0gLUVJTzsKLQkJZ290byBlcnJmcjE7Ci0JfQotCi0JcmV0dmFsID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZkZXYtPnZkZXYsIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucik7Ci0JaWYgKHJldHZhbCkgewotCQl2NGwyX2Vycih2NGwyX2RldiwgImNhbid0IHJlZ2lzdGVyIHZpZGVvIGRldmljZSFcbiIpOwotCQlnb3RvIGVycmZyMTsKLQl9Ci0KLQl2NGwyX2luZm8odjRsMl9kZXYsICJ2ZXJzaW9uICIgRFJJVkVSX1ZFUlNJT04gIlxuIik7Ci0KLQlyZXR1cm4gMDsKLWVycmZyMToKLQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKHY0bDJfZGV2KTsKLWVycmZyOgotCWtmcmVlKGRldik7Ci1lcnI6Ci0JcmV0dXJuIHJldHZhbDsKLQotfQotCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgbWFlc3Ryb19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0Jc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKLQlzdHJ1Y3QgbWFlc3RybyAqZGV2ID0gdG9fbWFlc3Rybyh2NGwyX2Rldik7Ci0KLQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmZGV2LT52ZGV2KTsKLQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZkZXYtPnY0bDJfZGV2KTsKLX0KLQotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG1hZXN0cm9fcl9wY2lfdGJsW10gPSB7Ci0JeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfRVNTLCBQQ0lfREVWSUNFX0lEX0VTU19FU1MxOTY4KSwKLQkJLmNsYXNzID0gUENJX0NMQVNTX01VTFRJTUVESUFfQVVESU8gPDwgOCwKLQkJLmNsYXNzX21hc2sgPSAweGZmZmYwMCB9LAotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0VTUywgUENJX0RFVklDRV9JRF9FU1NfRVNTMTk3OCksCi0JCS5jbGFzcyA9IFBDSV9DTEFTU19NVUxUSU1FRElBX0FVRElPIDw8IDgsCi0JCS5jbGFzc19tYXNrID0gMHhmZmZmMDAgfSwKLQl7IDAgfQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBtYWVzdHJvX3JfcGNpX3RibCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtYWVzdHJvX3JfZHJpdmVyID0gewotCS5uYW1lCQk9ICJtYWVzdHJvX3JhZGlvIiwKLQkuaWRfdGFibGUJPSBtYWVzdHJvX3JfcGNpX3RibCwKLQkucHJvYmUJCT0gbWFlc3Ryb19wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG1hZXN0cm9fcmVtb3ZlKSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IG1hZXN0cm9fcmFkaW9faW5pdCh2b2lkKQotewotCWludCByZXR2YWwgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZtYWVzdHJvX3JfZHJpdmVyKTsKLQotCWlmIChyZXR2YWwpCi0JCXByaW50ayhLRVJOX0VSUiAiZXJyb3IgZHVyaW5nIHJlZ2lzdHJhdGlvbiBwY2kgZHJpdmVyXG4iKTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBtYWVzdHJvX3JhZGlvX2V4aXQodm9pZCkKLXsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJm1hZXN0cm9fcl9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChtYWVzdHJvX3JhZGlvX2luaXQpOwotbW9kdWxlX2V4aXQobWFlc3Ryb19yYWRpb19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuYwppbmRleCA4MTI2NjIyLi5kZTVkNDgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWRyaXZlci5jCkBAIC05Niw3ICs5Niw3IEBACiBNT0RVTEVfUEFSTV9ERVNDKHN0ZXJlb190aHJlc2hvbGQsICJTZXRzIHNpZ25hbCB0aHJlc2hvbGQgdG8gYWN0aXZhdGUgc3RlcmVvIik7CiBNT0RVTEVfUEFSTV9ERVNDKHN0YW5kYXJkLCAiU3BlY2lmeSBhdWRpbyBzdGFuZGFyZDogMzIgPSBOVFNDLCA2NCA9IHJhZGlvLCBEZWZhdWx0OiBBdXRvZGV0ZWN0Iik7CiBNT0RVTEVfUEFSTV9ERVNDKGFtc291bmQsICJIYXJkd2lyZSBBTSBzb3VuZCBhdCA2LjVIeiAoRnJhbmNlKSwgRk0gY2FuIGF1dG9zY2FuIik7Ci1NT0RVTEVfUEFSTV9ERVNDKGRvbGJ5LCAiQWN0aXZhdGVzIERvbGJ5IHByb2Nlc3NzaW5nIik7CitNT0RVTEVfUEFSTV9ERVNDKGRvbGJ5LCAiQWN0aXZhdGVzIERvbGJ5IHByb2Nlc3NpbmciKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1lbmNvZGVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1lbmNvZGVyLmMKaW5kZXggZjlkNTk0Ni4uNDAwMzY0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtZW5jb2Rlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWVuY29kZXIuYwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJCX0KIAl9CiAKLQkvKiBBbGxvY2F0ZSBzb21lIGtlbnJlbCBrZXJuZWwgYnVmZmVycyBmb3IgY29weWluZworCS8qIEFsbG9jYXRlIHNvbWUga2VybmVsIGJ1ZmZlcnMgZm9yIGNvcHlpbmcKIAkgKiB0byB1c2VycHNhY2UuCiAJICovCiAJbGVuID0gcGFyYW1zLT5udW1iZXJvZmxpbmVzICogcGFyYW1zLT5waXRjaDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LXZiaS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtdmJpLmMKaW5kZXggOWU1YjAxYy4uYmMxZmNlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtdmJpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtdmJpLmMKQEAgLTE0OCw3ICsxNDgsNyBAQAogCQl9CiAJfQogCi0JLyogQWxsb2NhdGUgc29tZSBrZW5yZWwga2VybmVsIGJ1ZmZlcnMgZm9yIGNvcHlpbmcKKwkvKiBBbGxvY2F0ZSBzb21lIGtlcm5lbCBidWZmZXJzIGZvciBjb3B5aW5nCiAJICogdG8gdXNlcnBzYWNlLgogCSAqLwogCWxlbiA9IHBhcmFtcy0+bnVtYmVyb2ZsaW5lcyAqIHBhcmFtcy0+cGl0Y2g7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jCmluZGV4IDYwODMxMzcuLjk4NTVmYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jCkBAIC03MCw4ICs3MCw5IEBACiAjaW5jbHVkZSAidXNidmlzaW9uLmgiCiAjaW5jbHVkZSAidXNidmlzaW9uLWNhcmRzLmgiCiAKLSNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiSm9lcmcgSGVja2VuYmFjaCA8am9lcmdAaGVja2VuYmFjaC1hdy5kZT4sIFwKLUR3YWluZSBHYXJkZW4gPER3YWluZUdhcmRlbkByb2dlcnMuY29tPiIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUgkJCQkJXAorCSJKb2VyZyBIZWNrZW5iYWNoIDxqb2VyZ0BoZWNrZW5iYWNoLWF3LmRlPiwgIglcCisJIkR3YWluZSBHYXJkZW4gPER3YWluZUdhcmRlbkByb2dlcnMuY29tPiIKICNkZWZpbmUgRFJJVkVSX05BTUUgInVzYnZpc2lvbiIKICNkZWZpbmUgRFJJVkVSX0FMSUFTICJVU0JWaXNpb24iCiAjZGVmaW5lIERSSVZFUl9ERVNDICJVU0JWaXNpb24gVVNCIFZpZGVvIERldmljZSBEcml2ZXIgZm9yIExpbnV4IgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYwppbmRleCBmYTE1ZTg1Li43OTU2YTEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYwpAQCAtODMsMTkgKzgzLDE4IEBACiAKIHN0YXRpYyBpbnQgbXB0X21zaV9lbmFibGVfc3BpOwogbW9kdWxlX3BhcmFtKG1wdF9tc2lfZW5hYmxlX3NwaSwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MobXB0X21zaV9lbmFibGVfc3BpLCAiIEVuYWJsZSBNU0kgU3VwcG9ydCBmb3IgU1BJIFwKLQkJY29udHJvbGxlcnMgKGRlZmF1bHQ9MCkiKTsKK01PRFVMRV9QQVJNX0RFU0MobXB0X21zaV9lbmFibGVfc3BpLAorCQkgIiBFbmFibGUgTVNJIFN1cHBvcnQgZm9yIFNQSSBjb250cm9sbGVycyAoZGVmYXVsdD0wKSIpOwogCiBzdGF0aWMgaW50IG1wdF9tc2lfZW5hYmxlX2ZjOwogbW9kdWxlX3BhcmFtKG1wdF9tc2lfZW5hYmxlX2ZjLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhtcHRfbXNpX2VuYWJsZV9mYywgIiBFbmFibGUgTVNJIFN1cHBvcnQgZm9yIEZDIFwKLQkJY29udHJvbGxlcnMgKGRlZmF1bHQ9MCkiKTsKK01PRFVMRV9QQVJNX0RFU0MobXB0X21zaV9lbmFibGVfZmMsCisJCSAiIEVuYWJsZSBNU0kgU3VwcG9ydCBmb3IgRkMgY29udHJvbGxlcnMgKGRlZmF1bHQ9MCkiKTsKIAogc3RhdGljIGludCBtcHRfbXNpX2VuYWJsZV9zYXM7CiBtb2R1bGVfcGFyYW0obXB0X21zaV9lbmFibGVfc2FzLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhtcHRfbXNpX2VuYWJsZV9zYXMsICIgRW5hYmxlIE1TSSBTdXBwb3J0IGZvciBTQVMgXAotCQljb250cm9sbGVycyAoZGVmYXVsdD0wKSIpOwotCitNT0RVTEVfUEFSTV9ERVNDKG1wdF9tc2lfZW5hYmxlX3NhcywKKwkJICIgRW5hYmxlIE1TSSBTdXBwb3J0IGZvciBTQVMgY29udHJvbGxlcnMgKGRlZmF1bHQ9MCkiKTsKIAogc3RhdGljIGludCBtcHRfY2hhbm5lbF9tYXBwaW5nOwogbW9kdWxlX3BhcmFtKG1wdF9jaGFubmVsX21hcHBpbmcsIGludCwgMCk7CkBAIC0xMDUsMTUgKzEwNCwxNCBAQAogc3RhdGljIGludCBtcHRfc2V0X2RlYnVnX2xldmVsKGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApOwogbW9kdWxlX3BhcmFtX2NhbGwobXB0X2RlYnVnX2xldmVsLCBtcHRfc2V0X2RlYnVnX2xldmVsLCBwYXJhbV9nZXRfaW50LAogCQkgICZtcHRfZGVidWdfbGV2ZWwsIDA2MDApOwotTU9EVUxFX1BBUk1fREVTQyhtcHRfZGVidWdfbGV2ZWwsICIgZGVidWcgbGV2ZWwgLSByZWZlciB0byBtcHRkZWJ1Zy5oIFwKLQktIChkZWZhdWx0PTApIik7CitNT0RVTEVfUEFSTV9ERVNDKG1wdF9kZWJ1Z19sZXZlbCwKKwkJICIgZGVidWcgbGV2ZWwgLSByZWZlciB0byBtcHRkZWJ1Zy5oIC0gKGRlZmF1bHQ9MCkiKTsKIAogaW50IG1wdF9md2ZhdWx0X2RlYnVnOwogRVhQT1JUX1NZTUJPTChtcHRfZndmYXVsdF9kZWJ1Zyk7CiBtb2R1bGVfcGFyYW0obXB0X2Z3ZmF1bHRfZGVidWcsIGludCwgMDYwMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG1wdF9md2ZhdWx0X2RlYnVnLCAiRW5hYmxlIGRldGVjdGlvbiBvZiBGaXJtd2FyZSBmYXVsdCIKLQkiIGFuZCBoYWx0IEZpcm13YXJlIG9uIGZhdWx0IC0gKGRlZmF1bHQ9MCkiKTsKLQorTU9EVUxFX1BBUk1fREVTQyhtcHRfZndmYXVsdF9kZWJ1ZywKKwkJICJFbmFibGUgZGV0ZWN0aW9uIG9mIEZpcm13YXJlIGZhdWx0IGFuZCBoYWx0IEZpcm13YXJlIG9uIGZhdWx0IC0gKGRlZmF1bHQ9MCkiKTsKIAogc3RhdGljIGNoYXIJTXB0Q2FsbGJhY2tzTmFtZVtNUFRfTUFYX1BST1RPQ09MX0RSSVZFUlNdWzUwXTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmggYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaAppbmRleCAxNzM1Yzg0Li5mZTkwMjMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaAorKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaApAQCAtNzYsOCArNzYsOCBAQAogI2RlZmluZSBDT1BZUklHSFQJIkNvcHlyaWdodCAoYykgMTk5OS0yMDA4ICIgTU9EVUxFQVVUSE9SCiAjZW5kaWYKIAotI2RlZmluZSBNUFRfTElOVVhfVkVSU0lPTl9DT01NT04JIjMuMDQuMTgiCi0jZGVmaW5lIE1QVF9MSU5VWF9QQUNLQUdFX05BTUUJCSJAKCMpbXB0bGludXgtMy4wNC4xOCIKKyNkZWZpbmUgTVBUX0xJTlVYX1ZFUlNJT05fQ09NTU9OCSIzLjA0LjE5IgorI2RlZmluZSBNUFRfTElOVVhfUEFDS0FHRV9OQU1FCQkiQCgjKW1wdGxpbnV4LTMuMDQuMTkiCiAjZGVmaW5lIFdIQVRfTUFHSUNfU1RSSU5HCQkiQCIgIigiICIjIiAiKSIKIAogI2RlZmluZSBzaG93X21wdG1vZF92ZXIocyx2ZXIpICBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYwppbmRleCA2NmY5NDEyNS4uNzU5NmFlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jCkBAIC01MDEyLDcgKzUwMTIsNiBAQAogCQkJKGlvY19zdGF0ICYgTVBJX0lPQ1NUQVRVU19GTEFHX0xPR19JTkZPX0FWQUlMQUJMRSkpIHsKIAkJCVZpcnRUYXJnZXQgKnZ0YXJnZXQgPSBOVUxMOwogCQkJdTgJCWlkLCBjaGFubmVsOwotCQkJdTMyCSBsb2dfaW5mbyA9IGxlMzJfdG9fY3B1KHJlcGx5LT5JT0NMb2dJbmZvKTsKIAogCQkJaWQgPSBzYXNfZXZlbnRfZGF0YS0+VGFyZ2V0SUQ7CiAJCQljaGFubmVsID0gc2FzX2V2ZW50X2RhdGEtPkJ1czsKQEAgLTUwMjMsNyArNTAyMiw4IEBACiAJCQkJICAgICJMb2dJbmZvICgweCV4KSBhdmFpbGFibGUgZm9yICIKIAkJCQkgICAiSU5URVJOQUxfREVWSUNFX1JFU0VUIgogCQkJCSAgICJmd19pZCAlZCBmd19jaGFubmVsICVkXG4iLCBpb2MtPm5hbWUsCi0JCQkJICAgbG9nX2luZm8sIGlkLCBjaGFubmVsKSk7CisJCQkJICAgbGUzMl90b19jcHUocmVwbHktPklPQ0xvZ0luZm8pLAorCQkJCSAgIGlkLCBjaGFubmVsKSk7CiAJCQkJaWYgKHZ0YXJnZXQtPnJhaWRWb2x1bWUpIHsKIAkJCQkJZGV2dHByaW50ayhpb2MsIHByaW50ayhNWUlPQ19zX0RFQlVHX0ZNVAogCQkJCQkiU2tpcHBpbmcgUmFpZCBWb2x1bWUgZm9yIGluRE1EXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jCmluZGV4IDBkOWI4MmEuLmExZDRlZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMKQEAgLTE0MTUsMTEgKzE0MTUsOCBAQAogCWRtZnByaW50ayhpb2MsIHByaW50ayhNWUlPQ19zX0RFQlVHX0ZNVCAicWNtZDogU0NwbnQ9JXAsIGRvbmUoKT0lcFxuIiwKIAkJaW9jLT5uYW1lLCBTQ3BudCwgZG9uZSkpOwogCi0JaWYgKGlvYy0+dGFza21nbXRfcXVpZXNjZV9pbykgewotCQlkdG1wcmludGsoaW9jLCBwcmludGsoTVlJT0Nfc19XQVJOX0ZNVCAicWNtZDogU0NwbnQ9JXAgdGltZW91dCArIDYwSFpcbiIsCi0JCQlpb2MtPm5hbWUsIFNDcG50KSk7CisJaWYgKGlvYy0+dGFza21nbXRfcXVpZXNjZV9pbykKIAkJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7Ci0JfQogCiAJLyoKIAkgKiAgUHV0IHRvZ2V0aGVyIGEgTVBUIFNDU0kgcmVxdWVzdC4uLgpAQCAtMTc3Myw3ICsxNzcwLDYgQEAKIAlpbnQJCSBzY3BudF9pZHg7CiAJaW50CQkgcmV0dmFsOwogCVZpcnREZXZpY2UJICp2ZGV2aWNlOwotCXVsb25nCSAJIHNuID0gU0NwbnQtPnNlcmlhbF9udW1iZXI7CiAJTVBUX0FEQVBURVIJKmlvYzsKIAogCS8qIElmIHdlIGNhbid0IGxvY2F0ZSBvdXIgaG9zdCBhZGFwdGVyIHN0cnVjdHVyZSwgcmV0dXJuIEZBSUxFRCBzdGF0dXMuCkBAIC0xODU5LDggKzE4NTUsNyBAQAogCQkJIHZkZXZpY2UtPnZ0YXJnZXQtPmlkLCB2ZGV2aWNlLT5sdW4sCiAJCQkgY3R4MmFib3J0LCBtcHRzY3NpaF9nZXRfdG1fdGltZW91dChpb2MpKTsKIAotCWlmIChTQ1BOVF9UT19MT09LVVBfSURYKGlvYywgU0NwbnQpID09IHNjcG50X2lkeCAmJgotCSAgICBTQ3BudC0+c2VyaWFsX251bWJlciA9PSBzbikgeworCWlmIChTQ1BOVF9UT19MT09LVVBfSURYKGlvYywgU0NwbnQpID09IHNjcG50X2lkeCkgewogCQlkdG1wcmludGsoaW9jLCBwcmludGsoTVlJT0Nfc19ERUJVR19GTVQKIAkJICAgICJ0YXNrIGFib3J0OiBjb21tYW5kIHN0aWxsIGluIGFjdGl2ZSBsaXN0ISAoc2M9JXApXG4iLAogCQkgICAgaW9jLT5uYW1lLCBTQ3BudCkpOwpAQCAtMTg3Myw5ICsxODY4LDkgQEAKIAl9CiAKICBvdXQ6Ci0JcHJpbnRrKE1ZSU9DX3NfSU5GT19GTVQgInRhc2sgYWJvcnQ6ICVzIChydj0lMDR4KSAoc2M9JXApIChzbj0lbGQpXG4iLAorCXByaW50ayhNWUlPQ19zX0lORk9fRk1UICJ0YXNrIGFib3J0OiAlcyAocnY9JTA0eCkgKHNjPSVwKVxuIiwKIAkgICAgaW9jLT5uYW1lLCAoKHJldHZhbCA9PSBTVUNDRVNTKSA/ICJTVUNDRVNTIiA6ICJGQUlMRUQiKSwgcmV0dmFsLAotCSAgICBTQ3BudCwgU0NwbnQtPnNlcmlhbF9udW1iZXIpOworCSAgICBTQ3BudCk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzcGkuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c3BpLmMKaW5kZXggNmQ5NTY4ZC4uOGY2MWJhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzcGkuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNwaS5jCkBAIC04NjcsNiArODY3LDEwIEBACiAJc3RydWN0IF94X2NvbmZpZ19wYXJtcyBjZmc7CiAJc3RydWN0IF9DT05GSUdfUEFHRV9IRUFERVIgaGRyOwogCWludCBlcnIgPSAtRUJVU1k7CisJdTMyIG5lZ29fcGFybXM7CisJdTMyIHBlcmlvZDsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CisJaW50IGk7CiAKIAkvKiBkb24ndCBhbGxvdyB1cGRhdGluZyBuZWdvIHBhcmFtZXRlcnMgb24gUkFJRCBkZXZpY2VzICovCiAJaWYgKHN0YXJnZXQtPmNoYW5uZWwgPT0gMCAmJgpAQCAtOTA0LDYgKzkwOCwyNCBAQAogCXBnMS0+SGVhZGVyLlBhZ2VOdW1iZXIgPSBoZHIuUGFnZU51bWJlcjsKIAlwZzEtPkhlYWRlci5QYWdlVHlwZSA9IGhkci5QYWdlVHlwZTsKIAorCW5lZ29fcGFybXMgPSBsZTMyX3RvX2NwdShwZzEtPlJlcXVlc3RlZFBhcmFtZXRlcnMpOworCXBlcmlvZCA9IChuZWdvX3Bhcm1zICYgTVBJX1NDU0lERVZQQUdFMV9SUF9NSU5fU1lOQ19QRVJJT0RfTUFTSykgPj4KKwkJTVBJX1NDU0lERVZQQUdFMV9SUF9TSElGVF9NSU5fU1lOQ19QRVJJT0Q7CisJaWYgKHBlcmlvZCA9PSA4KSB7CisJCS8qIFR1cm4gb24gaW5saW5lIGRhdGEgcGFkZGluZyBmb3IgVEFQRSB3aGVuIHJ1bm5pbmcgVTMyMCAqLworCQlmb3IgKGkgPSAwIDsgaSA8IDE2OyBpKyspIHsKKwkJCXNkZXYgPSBzY3NpX2RldmljZV9sb29rdXBfYnlfdGFyZ2V0KHN0YXJnZXQsIGkpOworCQkJaWYgKHNkZXYgJiYgc2Rldi0+dHlwZSA9PSBUWVBFX1RBUEUpIHsKKwkJCQlzZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBzZGV2LCBNWUlPQ19zX0ZNVAorCQkJCQkgICAgIklEUDpPTlxuIiwgaW9jLT5uYW1lKTsKKwkJCQluZWdvX3Bhcm1zIHw9IE1QSV9TQ1NJREVWUEFHRTFfUlBfSURQOworCQkJCXBnMS0+UmVxdWVzdGVkUGFyYW1ldGVycyA9CisJCQkJICAgIGNwdV90b19sZTMyKG5lZ29fcGFybXMpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCiAJbXB0c3BpX3ByaW50X3dyaXRlX25lZ28oaGQsIHN0YXJnZXQsIGxlMzJfdG9fY3B1KHBnMS0+UmVxdWVzdGVkUGFyYW1ldGVycykpOwogCiAJaWYgKG1wdF9jb25maWcoaW9jLCAmY2ZnKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9SRUFETUUuaW9jdGwgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL1JFQURNRS5pb2N0bAppbmRleCA2NWMwYzQ3Li41ZmIxOTVhZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vUkVBRE1FLmlvY3RsCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vUkVBRE1FLmlvY3RsCkBAIC0xMTAsNyArMTEwLDcgQEAKICAgICAgIEVOT0JVRlMgICAgIEJ1ZmZlciBub3QgbGFyZ2UgZW5vdWdoLiAgSWYgdGhpcyBvY2N1cnMsIHRoZSByZXF1aXJlZAogICAgICAgICAgICAgICAgICAgYnVmZmVyIGxlbmd0aCBpcyB3cml0dGVuIGludG8gKihsY3QtPnJlc2xlbikKIAotVkkuIFNldHR0aW5nIFBhcmFtZXRlcnMKK1ZJLiBTZXR0aW5nIFBhcmFtZXRlcnMKICAgIAogICAgU1lOT1BTSVMgCiAgCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19zY3NpLmMgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19zY3NpLmMKaW5kZXggZjAwMzk1Ny4uNzRmYmU1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fc2NzaS5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX3Njc2kuYwpAQCAtMzYxLDcgKzM2MSw3IEBACiAJICovCiAJZXJyb3IgPSBsZTMyX3RvX2NwdShtc2ctPmJvZHlbMF0pOwogCi0Jb3NtX2RlYnVnKCJDb21wbGV0ZWQgJWxkXG4iLCBjbWQtPnNlcmlhbF9udW1iZXIpOworCW9zbV9kZWJ1ZygiQ29tcGxldGVkICUweCVwXG4iLCBjbWQpOwogCiAJY21kLT5yZXN1bHQgPSBlcnJvciAmIDB4ZmY7CiAJLyoKQEAgLTY3OCw3ICs2NzgsNyBAQAogCS8qIFF1ZXVlIHRoZSBtZXNzYWdlICovCiAJaTJvX21zZ19wb3N0KGMsIG1zZyk7CiAKLQlvc21fZGVidWcoIklzc3VlZCAlbGRcbiIsIFNDcG50LT5zZXJpYWxfbnVtYmVyKTsKKwlvc21fZGVidWcoIklzc3VlZCAlMHglcFxuIiwgU0NwbnQpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9LY29uZmlnIGIvZHJpdmVycy9taXNjL0tjb25maWcKaW5kZXggNGUwMDdjNi4uNGUzNDljZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL0tjb25maWcKKysrIGIvZHJpdmVycy9taXNjL0tjb25maWcKQEAgLTE0NCw2ICsxNDQsMTkgQEAKIAkgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgbW9kdWxlLCBpdHMgbmFtZSB3aWxsIGJlIHBoYW50b20uIElmIHVuc3VyZSwKIAkgIHNheSBOIGhlcmUuCiAKK2NvbmZpZyBJTlRFTF9NSURfUFRJCisJdHJpc3RhdGUgIlBhcmFsbGVsIFRyYWNlIEludGVyZmFjZSBmb3IgTUlQSSBQMTE0OS43IGNKVEFHIHN0YW5kYXJkIgorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoZSBQVEkgKFBhcmFsbGVsIFRyYWNlIEludGVyZmFjZSkgZHJpdmVyIGRpcmVjdHMKKwkgIHRyYWNlIGRhdGEgcm91dGVkIGZyb20gdmFyaW91cyBwYXJ0cyBpbiB0aGUgc3lzdGVtIG91dAorCSAgdGhyb3VnaCBhbiBJbnRlbCBQZW53ZWxsIFBUSSBwb3J0IGFuZCBvdXQgb2YgdGhlIG1vYmlsZQorCSAgZGV2aWNlIGZvciBhbmFseXNpcyB3aXRoIGEgZGVidWdnaW5nIHRvb2wgKExhdXRlcmJhY2ggb3IgRmlkbykuCisKKwkgIFlvdSBzaG91bGQgc2VsZWN0IHRoaXMgZHJpdmVyIGlmIHRoZSB0YXJnZXQga2VybmVsIGlzIG1lYW50IGZvcgorCSAgYW4gSW50ZWwgQXRvbSAobm9uLW5ldGJvb2spIG1vYmlsZSBkZXZpY2UgY29udGFpbmluZyBhIE1JUEkKKwkgIFAxMTQ5Ljcgc3RhbmRhcmQgaW1wbGVtZW50YXRpb24uCisKIGNvbmZpZyBTR0lfSU9DNAogCXRyaXN0YXRlICJTR0kgSU9DNCBCYXNlIElPIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kKQEAgLTQ1OSw3ICs0NzIsNyBAQAogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGJtcDA4NS4KIAogY29uZmlnIFBDSF9QSFVCCi0JdHJpc3RhdGUgIlBDSCBQYWNrZXQgSHViIG9mIEludGVsIFRvcGNsaWZmIC8gT0tJIFNFTUlDT05EVUNUT1IgTUw3MjEzIgorCXRyaXN0YXRlICJJbnRlbCBFRzIwVCBQQ0ggLyBPS0kgU0VNSUNPTkRVQ1RPUiBJT0goTUw3MjEzL01MNzIyMykgUEhVQiIKIAlkZXBlbmRzIG9uIFBDSQogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIGlzIGZvciBQQ0goUGxhdGZvcm0gY29udHJvbGxlciBIdWIpIFBIVUIoUGFja2V0IEh1Yikgb2YKQEAgLTQ2NywxMCArNDgwLDEyIEBACiAJICBwcm9jZXNzb3IuIFRoZSBUb3BjbGlmZiBoYXMgTUFDIGFkZHJlc3MgYW5kIE9wdGlvbiBST00gZGF0YSBpbiBTUk9NLgogCSAgVGhpcyBkcml2ZXIgY2FuIGFjY2VzcyBNQUMgYWRkcmVzcyBhbmQgT3B0aW9uIFJPTSBkYXRhIGluIFNST00uCiAKLQkgIFRoaXMgZHJpdmVyIGFsc28gY2FuIGJlIHVzZWQgZm9yIE9LSSBTRU1JQ09ORFVDVE9SJ3MgTUw3MjEzIHdoaWNoIGlzCi0JICBmb3IgSVZJKEluLVZlaGljbGUgSW5mb3RhaW5tZW50KSB1c2UuCi0JICBNTDcyMTMgaXMgY29tcGFuaW9uIGNoaXAgZm9yIEludGVsIEF0b20gRTZ4eCBzZXJpZXMuCi0JICBNTDcyMTMgaXMgY29tcGxldGVseSBjb21wYXRpYmxlIGZvciBJbnRlbCBFRzIwVCBQQ0guCisJICBUaGlzIGRyaXZlciBhbHNvIGNhbiBiZSB1c2VkIGZvciBPS0kgU0VNSUNPTkRVQ1RPUiBJT0goSW5wdXQvCisJICBPdXRwdXQgSHViKSwgTUw3MjEzIGFuZCBNTDcyMjMuCisJICBNTDcyMTMgSU9IIGlzIGZvciBJVkkoSW4tVmVoaWNsZSBJbmZvdGFpbm1lbnQpIHVzZSBhbmQgTUw3MjIzIElPSCBpcworCSAgZm9yIE1QKE1lZGlhIFBob25lKSB1c2UuCisJICBNTDcyMTMvTUw3MjIzIGlzIGNvbXBhbmlvbiBjaGlwIGZvciBJbnRlbCBBdG9tIEU2eHggc2VyaWVzLgorCSAgTUw3MjEzL01MNzIyMyBpcyBjb21wbGV0ZWx5IGNvbXBhdGlibGUgZm9yIEludGVsIEVHMjBUIFBDSC4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsCiAJICBiZSBjYWxsZWQgcGNoX3BodWIuCkBAIC00ODEsNSArNDk2LDYgQEAKIHNvdXJjZSAiZHJpdmVycy9taXNjL2l3bWMzMjAwdG9wL0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbWlzYy90aS1zdC9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL21pc2MvbGlzM2x2MDJkL0tjb25maWciCitzb3VyY2UgImRyaXZlcnMvbWlzYy9jYXJtYS9LY29uZmlnIgogCiBlbmRpZiAjIE1JU0NfREVWSUNFUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL01ha2VmaWxlIGIvZHJpdmVycy9taXNjL01ha2VmaWxlCmluZGV4IGY1NDY4NjAuLjVmMDMxNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21pc2MvTWFrZWZpbGUKQEAgLTYsNiArNiw3IEBACiBvYmotJChDT05GSUdfQUQ1MjVYX0RQT1QpCSs9IGFkNTI1eF9kcG90Lm8KIG9iai0kKENPTkZJR19BRDUyNVhfRFBPVF9JMkMpCSs9IGFkNTI1eF9kcG90LWkyYy5vCiBvYmotJChDT05GSUdfQUQ1MjVYX0RQT1RfU1BJKQkrPSBhZDUyNXhfZHBvdC1zcGkubworMGJqLSQoQ09ORklHX0lOVEVMX01JRF9QVEkpCSs9IHB0aS5vCiBvYmotJChDT05GSUdfQVRNRUxfUFdNKQkJKz0gYXRtZWxfcHdtLm8KIG9iai0kKENPTkZJR19BVE1FTF9TU0MpCQkrPSBhdG1lbC1zc2Mubwogb2JqLSQoQ09ORklHX0FUTUVMX1RDTElCKQkrPSBhdG1lbF90Y2xpYi5vCkBAIC00NCwzICs0NSw0IEBACiBvYmoteQkJCQkrPSB0aS1zdC8KIG9iai0kKENPTkZJR19BQjg1MDBfUFdNKQkrPSBhYjg1MDAtcHdtLm8KIG9iai15CQkJCSs9IGxpczNsdjAyZC8KK29iai15CQkJCSs9IGNhcm1hLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2JoMTc4MGdsaS5jIGIvZHJpdmVycy9taXNjL2JoMTc4MGdsaS5jCmluZGV4IGQwN2NkNjcuLjgyZmUyZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9iaDE3ODBnbGkuYworKysgYi9kcml2ZXJzL21pc2MvYmgxNzgwZ2xpLmMKQEAgLTQ5LDggKzQ5LDggQEAKIAlpbnQgcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkZGF0YS0+Y2xpZW50LCByZWcsIHZhbCk7CiAJaWYgKHJldCA8IDApCiAJCWRldl9lcnIoJmRkYXRhLT5jbGllbnQtPmRldiwKLQkJCSJpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhIGZhaWxlZCBlcnJvciAlZFwKLQkJCVJlZ2lzdGVyICglcylcbiIsIHJldCwgbXNnKTsKKwkJCSJpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhIGZhaWxlZCBlcnJvciAlZCBSZWdpc3RlciAoJXMpXG4iLAorCQkJcmV0LCBtc2cpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTU5LDggKzU5LDggQEAKIAlpbnQgcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGRkYXRhLT5jbGllbnQsIHJlZyk7CiAJaWYgKHJldCA8IDApCiAJCWRldl9lcnIoJmRkYXRhLT5jbGllbnQtPmRldiwKLQkJCSJpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEgZmFpbGVkIGVycm9yICVkXAotCQkJIFJlZ2lzdGVyICglcylcbiIsIHJldCwgbXNnKTsKKwkJCSJpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEgZmFpbGVkIGVycm9yICVkIFJlZ2lzdGVyICglcylcbiIsCisJCQlyZXQsIG1zZyk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2Nhcm1hL0tjb25maWcgYi9kcml2ZXJzL21pc2MvY2FybWEvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTAzNzBlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9taXNjL2Nhcm1hL0tjb25maWcKQEAgLTAsMCArMSwxNyBAQAorY29uZmlnIENBUk1BX0ZQR0EKKwl0cmlzdGF0ZSAiQ0FSTUEgREFUQS1GUEdBIEFjY2VzcyBEcml2ZXIiCisJZGVwZW5kcyBvbiBGU0xfU09DICYmIFBQQ184M3h4ICYmIE1FRElBX1NVUFBPUlQgJiYgSEFTX0RNQSAmJiBGU0xfRE1BCisJc2VsZWN0IFZJREVPQlVGX0RNQV9TRworCWRlZmF1bHQgbgorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIGRhdGEKKwkgIHByb2Nlc3NpbmcgRlBHQXMgb24gdGhlIE9WUk8gQ0FSTUEgYm9hcmQuCisKK2NvbmZpZyBDQVJNQV9GUEdBX1BST0dSQU0KKwl0cmlzdGF0ZSAiQ0FSTUEgREFUQS1GUEdBIFByb2dyYW1tZXIiCisJZGVwZW5kcyBvbiBGU0xfU09DICYmIFBQQ184M3h4ICYmIE1FRElBX1NVUFBPUlQgJiYgSEFTX0RNQSAmJiBGU0xfRE1BCisJc2VsZWN0IFZJREVPQlVGX0RNQV9TRworCWRlZmF1bHQgbgorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBwcm9ncmFtbWluZyB0aGUgZGF0YSBwcm9jZXNzaW5nCisJICBGUEdBcyBvbiB0aGUgT1ZSTyBDQVJNQSBib2FyZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9jYXJtYS9NYWtlZmlsZSBiL2RyaXZlcnMvbWlzYy9jYXJtYS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjM2YWMyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9taXNjL2Nhcm1hL01ha2VmaWxlCkBAIC0wLDAgKzEsMiBAQAorb2JqLSQoQ09ORklHX0NBUk1BX0ZQR0EpCQkrPSBjYXJtYS1mcGdhLm8KK29iai0kKENPTkZJR19DQVJNQV9GUEdBX1BST0dSQU0pCSs9IGNhcm1hLWZwZ2EtcHJvZ3JhbS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvY2FybWEvY2FybWEtZnBnYS1wcm9ncmFtLmMgYi9kcml2ZXJzL21pc2MvY2FybWEvY2FybWEtZnBnYS1wcm9ncmFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NlNjA2NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWlzYy9jYXJtYS9jYXJtYS1mcGdhLXByb2dyYW0uYwpAQCAtMCwwICsxLDExNDEgQEAKKy8qCisgKiBDQVJNQSBCb2FyZCBEQVRBLUZQR0EgUHJvZ3JhbW1lcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDExIElyYSBXLiBTbnlkZXIgPGl3c0BvdnJvLmNhbHRlY2guZWR1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWRtYS1zZy5oPgorCisvKiBNUEM4MzQ5RU1EUyBzcGVjaWZpYyBnZXRfaW1tcmJhc2UoKSAqLworI2luY2x1ZGUgPHN5c2Rldi9mc2xfc29jLmg+CisKK3N0YXRpYyBjb25zdCBjaGFyIGRydl9uYW1lW10gPSAiY2FybWEtZnBnYS1wcm9ncmFtIjsKKworLyoKKyAqIEZpcm13YXJlIGltYWdlcyBhcmUgYWx3YXlzIHRoaXMgZXhhY3Qgc2l6ZQorICoKKyAqIDEyODQ5NTUyIGJ5dGVzIGZvciBhIENBUk1BIERpZ2l0aXplciBCb2FyZCAoRVAyUzkwIEZQR0FzKQorICogMTg2NjI4ODAgYnl0ZXMgZm9yIGEgQ0FSTUEgQ29ycmVsYXRvciBCb2FyZCAoRVAyUzEzMCBGUEdBcykKKyAqLworI2RlZmluZSBGV19TSVpFX0VQMlM5MAkJMTI4NDk1NTIKKyNkZWZpbmUgRldfU0laRV9FUDJTMTMwCQkxODY2Mjg4MAorCitzdHJ1Y3QgZnBnYV9kZXYgeworCXN0cnVjdCBtaXNjZGV2aWNlIG1pc2NkZXY7CisKKwkvKiBSZWZlcmVuY2UgY291bnQgKi8KKwlzdHJ1Y3Qga3JlZiByZWY7CisKKwkvKiBEZXZpY2UgUmVnaXN0ZXJzICovCisJc3RydWN0IGRldmljZSAqZGV2OworCXZvaWQgX19pb21lbSAqcmVnczsKKwl2b2lkIF9faW9tZW0gKmltbXI7CisKKwkvKiBGcmVlc2NhbGUgRE1BIERldmljZSAqLworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbjsKKworCS8qIEludGVycnVwdHMgKi8KKwlpbnQgaXJxLCBzdGF0dXM7CisJc3RydWN0IGNvbXBsZXRpb24gY29tcGxldGlvbjsKKworCS8qIEZQR0EgQml0ZmlsZSAqLworCXN0cnVjdCBtdXRleCBsb2NrOworCisJc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiB2YjsKKwlib29sIHZiX2FsbG9jYXRlZDsKKworCS8qIG1heCBzaXplIGFuZCB3cml0dGVuIGJ5dGVzICovCisJc2l6ZV90IGZ3X3NpemU7CisJc2l6ZV90IGJ5dGVzOworfTsKKworLyoKKyAqIEZQR0EgQml0ZmlsZSBIZWxwZXJzCisgKi8KKworLyoqCisgKiBmcGdhX2Ryb3BfZmlybXdhcmVfZGF0YSgpIC0gZHJvcCB0aGUgYml0ZmlsZSBpbWFnZSBmcm9tIG1lbW9yeQorICogQHByaXY6IHRoZSBkcml2ZXIncyBwcml2YXRlIGRhdGEgc3RydWN0dXJlCisgKgorICogTE9DS0lORzogbXVzdCBob2xkIHByaXYtPmxvY2sKKyAqLworc3RhdGljIHZvaWQgZnBnYV9kcm9wX2Zpcm13YXJlX2RhdGEoc3RydWN0IGZwZ2FfZGV2ICpwcml2KQoreworCXZpZGVvYnVmX2RtYV9mcmVlKCZwcml2LT52Yik7CisJcHJpdi0+dmJfYWxsb2NhdGVkID0gZmFsc2U7CisJcHJpdi0+Ynl0ZXMgPSAwOworfQorCisvKgorICogUHJpdmF0ZSBEYXRhIFJlZmVyZW5jZSBDb3VudAorICovCisKK3N0YXRpYyB2b2lkIGZwZ2FfZGV2X3JlbW92ZShzdHJ1Y3Qga3JlZiAqcmVmKQoreworCXN0cnVjdCBmcGdhX2RldiAqcHJpdiA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBmcGdhX2RldiwgcmVmKTsKKworCS8qIGZyZWUgYW55IGZpcm13YXJlIGltYWdlIHRoYXQgd2FzIG5vdCBwcm9ncmFtbWVkICovCisJZnBnYV9kcm9wX2Zpcm13YXJlX2RhdGEocHJpdik7CisKKwltdXRleF9kZXN0cm95KCZwcml2LT5sb2NrKTsKKwlrZnJlZShwcml2KTsKK30KKworLyoKKyAqIExFRCBUcmlnZ2VyIChjb3VsZCBiZSBhIHNlcGVyYXRlIG1vZHVsZSkKKyAqLworCisvKgorICogTk9URTogdGhpcyB3aG9sZSB0aGluZyBkb2VzIGhhdmUgdGhlIHByb2JsZW0gdGhhdCB3aGVuZXZlciB0aGUgbGVkJ3MgYXJlCisgKiBOT1RFOiBmaXJzdCBzZXQgdG8gdXNlIHRoZSBmcGdhIHRyaWdnZXIsIHRoZXkgY291bGQgYmUgaW4gdGhlIHdyb25nIHN0YXRlCisgKi8KKworREVGSU5FX0xFRF9UUklHR0VSKGxlZHRyaWdfZnBnYSk7CisKK3N0YXRpYyB2b2lkIGxlZHRyaWdfZnBnYV9wcm9ncmFtbWVkKGJvb2wgZW5hYmxlZCkKK3sKKwlpZiAoZW5hYmxlZCkKKwkJbGVkX3RyaWdnZXJfZXZlbnQobGVkdHJpZ19mcGdhLCBMRURfRlVMTCk7CisJZWxzZQorCQlsZWRfdHJpZ2dlcl9ldmVudChsZWR0cmlnX2ZwZ2EsIExFRF9PRkYpOworfQorCisvKgorICogRlBHQSBSZWdpc3RlciBIZWxwZXJzCisgKi8KKworLyogUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRlBHQV9DT05GSUdfQ09OVFJPTAkJMHg0MAorI2RlZmluZSBGUEdBX0NPTkZJR19TVEFUVVMJCTB4NDQKKyNkZWZpbmUgRlBHQV9DT05GSUdfRklGT19TSVpFCQkweDQ4CisjZGVmaW5lIEZQR0FfQ09ORklHX0ZJRk9fVVNFRAkJMHg0QworI2RlZmluZSBGUEdBX0NPTkZJR19UT1RBTF9CWVRFX0NPVU5UCTB4NTAKKyNkZWZpbmUgRlBHQV9DT05GSUdfQ1VSX0JZVEVfQ09VTlQJMHg1NAorCisjZGVmaW5lIEZQR0FfRklGT19BRERSRVNTCQkweDMwMDAKKworc3RhdGljIGludCBmcGdhX2ZpZm9fc2l6ZSh2b2lkIF9faW9tZW0gKnJlZ3MpCit7CisJcmV0dXJuIGlvcmVhZDMyYmUocmVncyArIEZQR0FfQ09ORklHX0ZJRk9fU0laRSk7Cit9CisKKyNkZWZpbmUgQ0ZHX1NUQVRVU19FUlJfTUFTSwkweGZmZmUKKworc3RhdGljIGludCBmcGdhX2NvbmZpZ19lcnJvcih2b2lkIF9faW9tZW0gKnJlZ3MpCit7CisJcmV0dXJuIGlvcmVhZDMyYmUocmVncyArIEZQR0FfQ09ORklHX1NUQVRVUykgJiBDRkdfU1RBVFVTX0VSUl9NQVNLOworfQorCitzdGF0aWMgaW50IGZwZ2FfZmlmb19lbXB0eSh2b2lkIF9faW9tZW0gKnJlZ3MpCit7CisJcmV0dXJuIGlvcmVhZDMyYmUocmVncyArIEZQR0FfQ09ORklHX0ZJRk9fVVNFRCkgPT0gMDsKK30KKworc3RhdGljIHZvaWQgZnBnYV9maWZvX3dyaXRlKHZvaWQgX19pb21lbSAqcmVncywgdTMyIHZhbCkKK3sKKwlpb3dyaXRlMzJiZSh2YWwsIHJlZ3MgKyBGUEdBX0ZJRk9fQUREUkVTUyk7Cit9CisKK3N0YXRpYyB2b2lkIGZwZ2Ffc2V0X2J5dGVfY291bnQodm9pZCBfX2lvbWVtICpyZWdzLCB1MzIgY291bnQpCit7CisJaW93cml0ZTMyYmUoY291bnQsIHJlZ3MgKyBGUEdBX0NPTkZJR19UT1RBTF9CWVRFX0NPVU5UKTsKK30KKworI2RlZmluZSBDRkdfQ1RMX0VOQUJMRQkoMSA8PCAwKQorI2RlZmluZSBDRkdfQ1RMX1JFU0VUCSgxIDw8IDEpCisjZGVmaW5lIENGR19DVExfRE1BCSgxIDw8IDIpCisKK3N0YXRpYyB2b2lkIGZwZ2FfcHJvZ3JhbW1lcl9lbmFibGUoc3RydWN0IGZwZ2FfZGV2ICpwcml2LCBib29sIGRtYSkKK3sKKwl1MzIgdmFsOworCisJdmFsID0gKGRtYSkgPyAoQ0ZHX0NUTF9FTkFCTEUgfCBDRkdfQ1RMX0RNQSkgOiBDRkdfQ1RMX0VOQUJMRTsKKwlpb3dyaXRlMzJiZSh2YWwsIHByaXYtPnJlZ3MgKyBGUEdBX0NPTkZJR19DT05UUk9MKTsKK30KKworc3RhdGljIHZvaWQgZnBnYV9wcm9ncmFtbWVyX2Rpc2FibGUoc3RydWN0IGZwZ2FfZGV2ICpwcml2KQoreworCWlvd3JpdGUzMmJlKDB4MCwgcHJpdi0+cmVncyArIEZQR0FfQ09ORklHX0NPTlRST0wpOworfQorCitzdGF0aWMgdm9pZCBmcGdhX2R1bXBfcmVnaXN0ZXJzKHN0cnVjdCBmcGdhX2RldiAqcHJpdikKK3sKKwl1MzIgY29udHJvbCwgc3RhdHVzLCBzaXplLCB1c2VkLCB0b3RhbCwgY3VycjsKKworCS8qIGdvb2Qgc3RhdHVzOiBkbyBub3RoaW5nICovCisJaWYgKHByaXYtPnN0YXR1cyA9PSAwKQorCQlyZXR1cm47CisKKwkvKiBEdW1wIGFsbCBzdGF0dXMgcmVnaXN0ZXJzICovCisJY29udHJvbCA9IGlvcmVhZDMyYmUocHJpdi0+cmVncyArIEZQR0FfQ09ORklHX0NPTlRST0wpOworCXN0YXR1cyA9IGlvcmVhZDMyYmUocHJpdi0+cmVncyArIEZQR0FfQ09ORklHX1NUQVRVUyk7CisJc2l6ZSA9IGlvcmVhZDMyYmUocHJpdi0+cmVncyArIEZQR0FfQ09ORklHX0ZJRk9fU0laRSk7CisJdXNlZCA9IGlvcmVhZDMyYmUocHJpdi0+cmVncyArIEZQR0FfQ09ORklHX0ZJRk9fVVNFRCk7CisJdG90YWwgPSBpb3JlYWQzMmJlKHByaXYtPnJlZ3MgKyBGUEdBX0NPTkZJR19UT1RBTF9CWVRFX0NPVU5UKTsKKwljdXJyID0gaW9yZWFkMzJiZShwcml2LT5yZWdzICsgRlBHQV9DT05GSUdfQ1VSX0JZVEVfQ09VTlQpOworCisJZGV2X2Vycihwcml2LT5kZXYsICJDb25maWd1cmF0aW9uIGZhaWxlZCwgZHVtcGluZyBzdGF0dXMgcmVnaXN0ZXJzXG4iKTsKKwlkZXZfZXJyKHByaXYtPmRldiwgIkNvbnRyb2w6ICAgIDB4JS44eFxuIiwgY29udHJvbCk7CisJZGV2X2Vycihwcml2LT5kZXYsICJTdGF0dXM6ICAgICAweCUuOHhcbiIsIHN0YXR1cyk7CisJZGV2X2Vycihwcml2LT5kZXYsICJGSUZPIFNpemU6ICAweCUuOHhcbiIsIHNpemUpOworCWRldl9lcnIocHJpdi0+ZGV2LCAiRklGTyBVc2VkOiAgMHglLjh4XG4iLCB1c2VkKTsKKwlkZXZfZXJyKHByaXYtPmRldiwgIkZJRk8gVG90YWw6IDB4JS44eFxuIiwgdG90YWwpOworCWRldl9lcnIocHJpdi0+ZGV2LCAiRklGTyBDdXJyOiAgMHglLjh4XG4iLCBjdXJyKTsKK30KKworLyoKKyAqIEZQR0EgUG93ZXIgU3VwcGx5IENvZGUKKyAqLworCisjZGVmaW5lIENUTF9QV1JfQ09OVFJPTAkJMHgyMDA2CisjZGVmaW5lIENUTF9QV1JfU1RBVFVTCQkweDIwMEEKKyNkZWZpbmUgQ1RMX1BXUl9GQUlMCQkweDIwMEIKKworI2RlZmluZSBQV1JfQ09OVFJPTF9FTkFCTEUJMHgwMQorCisjZGVmaW5lIFBXUl9TVEFUVVNfRVJST1JfTUFTSwkweDEwCisjZGVmaW5lIFBXUl9TVEFUVVNfR09PRAkJMHgwZgorCisvKgorICogRGV0ZXJtaW5lIGlmIHRoZSBGUEdBIHBvd2VyIGlzIGdvb2QgZm9yIGFsbCBzdXBwbGllcworICovCitzdGF0aWMgYm9vbCBmcGdhX3Bvd2VyX2dvb2Qoc3RydWN0IGZwZ2FfZGV2ICpwcml2KQoreworCXU4IHZhbDsKKworCXZhbCA9IGlvcmVhZDgocHJpdi0+cmVncyArIENUTF9QV1JfU1RBVFVTKTsKKwlpZiAodmFsICYgUFdSX1NUQVRVU19FUlJPUl9NQVNLKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdmFsID09IFBXUl9TVEFUVVNfR09PRDsKK30KKworLyoKKyAqIERpc2FibGUgdGhlIEZQR0EgcG93ZXIgc3VwcGxpZXMKKyAqLworc3RhdGljIHZvaWQgZnBnYV9kaXNhYmxlX3Bvd2VyX3N1cHBsaWVzKHN0cnVjdCBmcGdhX2RldiAqcHJpdikKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OworCXU4IHZhbDsKKworCWlvd3JpdGU4KDB4MCwgcHJpdi0+cmVncyArIENUTF9QV1JfQ09OVFJPTCk7CisKKwkvKgorCSAqIFdhaXQgNTAwbXMgZm9yIHRoZSBwb3dlciByYWlscyB0byBkaXNjaGFyZ2UKKwkgKgorCSAqIFdpdGhvdXQgdGhpcyBkZWxheSwgdGhlIENUTC1DUExEIHN0YXRlIG1hY2hpbmUgY2FuIGdldCBpbnRvIGEKKwkgKiBzdGF0ZSB3aGVyZSBpdCBpcyB3YWl0aW5nIGZvciB0aGUgcG93ZXItZ29vZHMgdG8gYXNzZXJ0LCBidXQgdGhleQorCSAqIG5ldmVyIGRvLiBUaGlzIG9ubHkgaGFwcGVucyB3aGVuIGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgdGhlCisJICogcG93ZXIgc2VxdWVuY2VyIHZlcnkgcmFwaWRseS4KKwkgKgorCSAqIFRoZSBsb29wIGJlbG93IHdpbGwgYWxzbyB3YWl0IGZvciB0aGUgcG93ZXIgZ29vZHMgdG8gZGUtYXNzZXJ0LAorCSAqIGJ1dCB0ZXN0aW5nIGhhcyBzaG93biB0aGF0IHRoZXkgYXJlIGFsd2F5cyBkaXNhYmxlZCBieSB0aGUgdGltZQorCSAqIHRoZSBzbGVlcCBjb21wbGV0ZXMuIEhvd2V2ZXIsIG9taXR0aW5nIHRoZSBzbGVlcCBhbmQgb25seSB3YWl0aW5nCisJICogZm9yIHRoZSBwb3dlci1nb29kcyB0byBkZS1hc3NlcnQgd2FzIG5vdCBzdWZmaWNpZW50IHRvIGVuc3VyZQorCSAqIHRoYXQgdGhlIHBvd2VyIHNlcXVlbmNlciB3b3VsZCBub3Qgd2VkZ2UgaXRzZWxmLgorCSAqLworCW1zbGVlcCg1MDApOworCisJc3RhcnQgPSBqaWZmaWVzOworCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBzdGFydCArIEhaKSkgeworCQl2YWwgPSBpb3JlYWQ4KHByaXYtPnJlZ3MgKyBDVExfUFdSX1NUQVRVUyk7CisJCWlmICghKHZhbCAmIFBXUl9TVEFUVVNfR09PRCkpCisJCQlicmVhazsKKworCQl1c2xlZXBfcmFuZ2UoNTAwMCwgMTAwMDApOworCX0KKworCXZhbCA9IGlvcmVhZDgocHJpdi0+cmVncyArIENUTF9QV1JfU1RBVFVTKTsKKwlpZiAodmFsICYgUFdSX1NUQVRVU19HT09EKSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAicG93ZXIgZGlzYWJsZSBmYWlsZWQ6ICIKKwkJCQkgICAicG93ZXIgZ29vZHM6IHN0YXR1cyAweCUuMnhcbiIsIHZhbCk7CisJfQorCisJaWYgKHZhbCAmIFBXUl9TVEFUVVNfRVJST1JfTUFTSykgeworCQlkZXZfZXJyKHByaXYtPmRldiwgInBvd2VyIGRpc2FibGUgZmFpbGVkOiAiCisJCQkJICAgImFsYXJtIGJpdCBzZXQ6IHN0YXR1cyAweCUuMnhcbiIsIHZhbCk7CisJfQorfQorCisvKioKKyAqIGZwZ2FfZW5hYmxlX3Bvd2VyX3N1cHBsaWVzKCkgLSBlbmFibGUgdGhlIERBVEEtRlBHQSBwb3dlciBzdXBwbGllcworICogQHByaXY6IHRoZSBkcml2ZXIncyBwcml2YXRlIGRhdGEgc3RydWN0dXJlCisgKgorICogRW5hYmxlIHRoZSBEQVRBLUZQR0EgcG93ZXIgc3VwcGxpZXMsIHdhaXRpbmcgdXAgdG8gMSBzZWNvbmQgZm9yCisgKiB0aGVtIHRvIGVuYWJsZSBzdWNjZXNzZnVsbHkuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FUlJOTyBvdGhlcndpc2UKKyAqLworc3RhdGljIGludCBmcGdhX2VuYWJsZV9wb3dlcl9zdXBwbGllcyhzdHJ1Y3QgZnBnYV9kZXYgKnByaXYpCit7CisJdW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7CisKKwlpZiAoZnBnYV9wb3dlcl9nb29kKHByaXYpKSB7CisJCWRldl9kYmcocHJpdi0+ZGV2LCAicG93ZXIgd2FzIGFscmVhZHkgZ29vZFxuIik7CisJCXJldHVybiAwOworCX0KKworCWlvd3JpdGU4KFBXUl9DT05UUk9MX0VOQUJMRSwgcHJpdi0+cmVncyArIENUTF9QV1JfQ09OVFJPTCk7CisJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHN0YXJ0ICsgSFopKSB7CisJCWlmIChmcGdhX3Bvd2VyX2dvb2QocHJpdikpCisJCQlyZXR1cm4gMDsKKworCQl1c2xlZXBfcmFuZ2UoNTAwMCwgMTAwMDApOworCX0KKworCXJldHVybiBmcGdhX3Bvd2VyX2dvb2QocHJpdikgPyAwIDogLUVUSU1FRE9VVDsKK30KKworLyoKKyAqIERldGVybWluZSBpZiB0aGUgRlBHQSBwb3dlciBzdXBwbGllcyBhcmUgYWxsIGVuYWJsZWQKKyAqLworc3RhdGljIGJvb2wgZnBnYV9wb3dlcl9lbmFibGVkKHN0cnVjdCBmcGdhX2RldiAqcHJpdikKK3sKKwl1OCB2YWw7CisKKwl2YWwgPSBpb3JlYWQ4KHByaXYtPnJlZ3MgKyBDVExfUFdSX0NPTlRST0wpOworCWlmICh2YWwgJiBQV1JfQ09OVFJPTF9FTkFCTEUpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogRGV0ZXJtaW5lIGlmIHRoZSBGUEdBJ3MgYXJlIHByb2dyYW1tZWQgYW5kIHJ1bm5pbmcgY29ycmVjdGx5CisgKi8KK3N0YXRpYyBib29sIGZwZ2FfcnVubmluZyhzdHJ1Y3QgZnBnYV9kZXYgKnByaXYpCit7CisJaWYgKCFmcGdhX3Bvd2VyX2dvb2QocHJpdikpCisJCXJldHVybiBmYWxzZTsKKworCS8qIENoZWNrIHRoZSBjb25maWcgZG9uZSBiaXQgKi8KKwlyZXR1cm4gaW9yZWFkMzJiZShwcml2LT5yZWdzICsgRlBHQV9DT05GSUdfU1RBVFVTKSAmICgxIDw8IDE4KTsKK30KKworLyoKKyAqIEZQR0EgUHJvZ3JhbW1pbmcgQ29kZQorICovCisKKy8qKgorICogZnBnYV9wcm9ncmFtX2Jsb2NrKCkgLSBwdXQgYSBibG9jayBvZiBkYXRhIGludG8gdGhlIHByb2dyYW1tZXIncyBGSUZPCisgKiBAcHJpdjogdGhlIGRyaXZlcidzIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUKKyAqIEBidWY6IHRoZSBkYXRhIHRvIHByb2dyYW0KKyAqIEBjb3VudDogdGhlIGxlbmd0aCBvZiBkYXRhIHRvIHByb2dyYW0gKG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0IGJ5dGVzKQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRVJSTk8gb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbnQgZnBnYV9wcm9ncmFtX2Jsb2NrKHN0cnVjdCBmcGdhX2RldiAqcHJpdiwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpCit7CisJdTMyICpkYXRhID0gYnVmOworCWludCBzaXplID0gZnBnYV9maWZvX3NpemUocHJpdi0+cmVncyk7CisJaW50IGksIGxlbjsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisKKwkvKiBlbmZvcmNlIGNvcnJlY3QgZGF0YSBsZW5ndGggZm9yIHRoZSBGSUZPICovCisJQlVHX09OKGNvdW50ICUgNCAhPSAwKTsKKworCXdoaWxlIChjb3VudCA+IDApIHsKKworCQkvKiBHZXQgdGhlIHNpemUgb2YgdGhlIGJsb2NrIHRvIHdyaXRlIChtYXhpbXVtIGlzIEZJRk9fU0laRSkgKi8KKwkJbGVuID0gbWluX3Qoc2l6ZV90LCBjb3VudCwgc2l6ZSk7CisJCXRpbWVvdXQgPSBqaWZmaWVzICsgSFogLyA0OworCisJCS8qIFdyaXRlIHRoZSBibG9jayAqLworCQlmb3IgKGkgPSAwOyBpIDwgbGVuIC8gNDsgaSsrKQorCQkJZnBnYV9maWZvX3dyaXRlKHByaXYtPnJlZ3MsIGRhdGFbaV0pOworCisJCS8qIFVwZGF0ZSB0aGUgYW1vdW50cyBsZWZ0ICovCisJCWNvdW50IC09IGxlbjsKKwkJZGF0YSArPSBsZW4gLyA0OworCisJCS8qIFdhaXQgZm9yIHRoZSBmaWZvIHRvIGVtcHR5ICovCisJCXdoaWxlICh0cnVlKSB7CisKKwkJCWlmIChmcGdhX2ZpZm9fZW1wdHkocHJpdi0+cmVncykpIHsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJZGV2X2RiZyhwcml2LT5kZXYsICJGaWZvIG5vdCBlbXB0eVxuIik7CisJCQkJY3B1X3JlbGF4KCk7CisJCQl9CisKKwkJCWlmIChmcGdhX2NvbmZpZ19lcnJvcihwcml2LT5yZWdzKSkgeworCQkJCWRldl9lcnIocHJpdi0+ZGV2LCAiRXJyb3IgZGV0ZWN0ZWRcbiIpOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCisJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJCWRldl9lcnIocHJpdi0+ZGV2LCAiRmlmbyBkcmFpbiB0aW1lb3V0XG4iKTsKKwkJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJCX0KKworCQkJdXNsZWVwX3JhbmdlKDUwMDAsIDEwMDAwKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGZwZ2FfcHJvZ3JhbV9jcHUoKSAtIHByb2dyYW0gdGhlIERBVEEtRlBHQSdzIHVzaW5nIHRoZSBDUFUKKyAqIEBwcml2OiB0aGUgZHJpdmVyJ3MgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZQorICoKKyAqIFRoaXMgaXMgdXNlZnVsIHdoZW4gdGhlIERNQSBwcm9ncmFtbWluZyBtZXRob2QgZmFpbHMuIEl0IGlzIHBvc3NpYmxlIHRvCisgKiB3ZWRnZSB0aGUgRnJlZXNjYWxlIERNQSBjb250cm9sbGVyIHN1Y2ggdGhhdCB0aGUgRE1BIHByb2dyYW1taW5nIG1ldGhvZAorICogYWx3YXlzIGZhaWxzLiBUaGlzIG1ldGhvZCBoYXMgYWx3YXlzIHN1Y2NlZWRlZC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVSUk5PIG90aGVyd2lzZQorICovCitzdGF0aWMgbm9pbmxpbmUgaW50IGZwZ2FfcHJvZ3JhbV9jcHUoc3RydWN0IGZwZ2FfZGV2ICpwcml2KQoreworCWludCByZXQ7CisKKwkvKiBEaXNhYmxlIHRoZSBwcm9ncmFtbWVyICovCisJZnBnYV9wcm9ncmFtbWVyX2Rpc2FibGUocHJpdik7CisKKwkvKiBTZXQgdGhlIHRvdGFsIGJ5dGUgY291bnQgKi8KKwlmcGdhX3NldF9ieXRlX2NvdW50KHByaXYtPnJlZ3MsIHByaXYtPmJ5dGVzKTsKKwlkZXZfZGJnKHByaXYtPmRldiwgInRvdGFsIGJ5dGUgY291bnQgJXUgYnl0ZXNcbiIsIHByaXYtPmJ5dGVzKTsKKworCS8qIEVuYWJsZSB0aGUgY29udHJvbGxlciBmb3IgcHJvZ3JhbW1pbmcgKi8KKwlmcGdhX3Byb2dyYW1tZXJfZW5hYmxlKHByaXYsIGZhbHNlKTsKKwlkZXZfZGJnKHByaXYtPmRldiwgImVuYWJsZWQgdGhlIGNvbnRyb2xsZXJcbiIpOworCisJLyogV3JpdGUgZWFjaCBjaHVuayBvZiB0aGUgRlBHQSBiaXRmaWxlIHRvIEZQR0EgcHJvZ3JhbW1lciAqLworCXJldCA9IGZwZ2FfcHJvZ3JhbV9ibG9jayhwcml2LCBwcml2LT52Yi52YWRkciwgcHJpdi0+Ynl0ZXMpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2Rpc2FibGVfY29udHJvbGxlcjsKKworCS8qIFdhaXQgZm9yIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB0byBzaWduYWwgdGhhdCBwcm9ncmFtbWluZyBmaW5pc2hlZCAqLworCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmcHJpdi0+Y29tcGxldGlvbiwgMiAqIEhaKTsKKwlpZiAoIXJldCkgeworCQlkZXZfZXJyKHByaXYtPmRldiwgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBjb21wbGV0aW9uXG4iKTsKKwkJcmV0ID0gLUVUSU1FRE9VVDsKKwkJZ290byBvdXRfZGlzYWJsZV9jb250cm9sbGVyOworCX0KKworCS8qIFJldHJpZXZlIHRoZSBzdGF0dXMgZnJvbSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgKi8KKwlyZXQgPSBwcml2LT5zdGF0dXM7CisKK291dF9kaXNhYmxlX2NvbnRyb2xsZXI6CisJZnBnYV9wcm9ncmFtbWVyX2Rpc2FibGUocHJpdik7CisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBGSUZPX0RNQV9BRERSRVNTCTB4ZjAwMDMwMDAKKyNkZWZpbmUgRklGT19NQVhfTEVOCQk0MDk2CisKKy8qKgorICogZnBnYV9wcm9ncmFtX2RtYSgpIC0gcHJvZ3JhbSB0aGUgREFUQS1GUEdBJ3MgdXNpbmcgdGhlIERNQSBlbmdpbmUKKyAqIEBwcml2OiB0aGUgZHJpdmVyJ3MgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZQorICoKKyAqIFByb2dyYW0gdGhlIERBVEEtRlBHQSdzIHVzaW5nIHRoZSBGcmVlc2NhbGUgRE1BIGVuZ2luZS4gVGhpcyByZXF1aXJlcyB0aGF0CisgKiB0aGUgZW5naW5lIGlzIHByb2dyYW1tZWQgc3VjaCB0aGF0IHRoZSBoYXJkd2FyZSBETUEgcmVxdWVzdCBsaW5lcyBjYW4KKyAqIGNvbnRyb2wgdGhlIGVudGlyZSBETUEgdHJhbnNhY3Rpb24uIFRoZSBzeXN0ZW0gY29udHJvbGxlciBGUEdBIHRoZW4KKyAqIGNvbXBsZXRlbHkgb2ZmbG9hZHMgdGhlIHByb2dyYW1taW5nIGZyb20gdGhlIENQVS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVSUk5PIG90aGVyd2lzZQorICovCitzdGF0aWMgbm9pbmxpbmUgaW50IGZwZ2FfcHJvZ3JhbV9kbWEoc3RydWN0IGZwZ2FfZGV2ICpwcml2KQoreworCXN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKnZiID0gJnByaXYtPnZiOworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IHByaXYtPmNoYW47CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eDsKKwlzaXplX3QgbnVtX3BhZ2VzLCBsZW4sIGF2YWlsID0gMDsKKwlzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZpZyBjb25maWc7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlzdHJ1Y3Qgc2dfdGFibGUgdGFibGU7CisJZG1hX2Nvb2tpZV90IGNvb2tpZTsKKwlpbnQgcmV0LCBpOworCisJLyogRGlzYWJsZSB0aGUgcHJvZ3JhbW1lciAqLworCWZwZ2FfcHJvZ3JhbW1lcl9kaXNhYmxlKHByaXYpOworCisJLyogQWxsb2NhdGUgYSBzY2F0dGVybGlzdCBmb3IgdGhlIERNQSBkZXN0aW5hdGlvbiAqLworCW51bV9wYWdlcyA9IERJVl9ST1VORF9VUChwcml2LT5ieXRlcywgRklGT19NQVhfTEVOKTsKKwlyZXQgPSBzZ19hbGxvY190YWJsZSgmdGFibGUsIG51bV9wYWdlcywgR0ZQX0tFUk5FTCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHByaXYtPmRldiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBkc3Qgc2NhdHRlcmxpc3RcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9yZXR1cm47CisJfQorCisJLyoKKwkgKiBUaGlzIGlzIGFuIHVnbHkgaGFjaworCSAqCisJICogV2UgZmlsbCBpbiBhIHNjYXR0ZXJsaXN0IGFzIGlmIGl0IHdlcmUgbWFwcGVkIGZvciBETUEuIFRoaXMgaXMKKwkgKiBuZWNlc3NhcnkgYmVjYXVzZSB0aGVyZSBleGlzdHMgbm8gYmV0dGVyIHN0cnVjdHVyZSBmb3IgdGhpcworCSAqIGluc2lkZSB0aGUga2VybmVsIGNvZGUuCisJICoKKwkgKiBBcyBhbiBhZGRlZCBib251cywgd2UgY2FuIHVzZSB0aGUgRE1BRW5naW5lIEFQSSBmb3IgYWxsIG9mIHRoaXMsCisJICogcmF0aGVyIHRoYW4gaW52ZW50aW5nIGFub3RoZXIgZXh0cmVtZWx5IHNpbWlsYXIgQVBJLgorCSAqLworCWF2YWlsID0gcHJpdi0+Ynl0ZXM7CisJZm9yX2VhY2hfc2codGFibGUuc2dsLCBzZywgbnVtX3BhZ2VzLCBpKSB7CisJCWxlbiA9IG1pbl90KHNpemVfdCwgYXZhaWwsIEZJRk9fTUFYX0xFTik7CisJCXNnX2RtYV9hZGRyZXNzKHNnKSA9IEZJRk9fRE1BX0FERFJFU1M7CisJCXNnX2RtYV9sZW4oc2cpID0gbGVuOworCisJCWF2YWlsIC09IGxlbjsKKwl9CisKKwkvKiBNYXAgdGhlIGJ1ZmZlciBmb3IgRE1BICovCisJcmV0ID0gdmlkZW9idWZfZG1hX21hcChwcml2LT5kZXYsICZwcml2LT52Yik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHByaXYtPmRldiwgIlVuYWJsZSB0byBtYXAgYnVmZmVyIGZvciBETUFcbiIpOworCQlnb3RvIG91dF9mcmVlX3RhYmxlOworCX0KKworCS8qCisJICogQ29uZmlndXJlIHRoZSBETUEgY2hhbm5lbCB0byB0cmFuc2ZlciBGSUZPX1NJWkUgLyAyIGJ5dGVzIHBlcgorCSAqIHRyYW5zYWN0aW9uLCBhbmQgdGhlbiBwdXQgaXQgdW5kZXIgZXh0ZXJuYWwgY29udHJvbAorCSAqLworCW1lbXNldCgmY29uZmlnLCAwLCBzaXplb2YoY29uZmlnKSk7CisJY29uZmlnLmRpcmVjdGlvbiA9IERNQV9UT19ERVZJQ0U7CisJY29uZmlnLmRzdF9hZGRyX3dpZHRoID0gRE1BX1NMQVZFX0JVU1dJRFRIXzRfQllURVM7CisJY29uZmlnLmRzdF9tYXhidXJzdCA9IGZwZ2FfZmlmb19zaXplKHByaXYtPnJlZ3MpIC8gMiAvIDQ7CisJcmV0ID0gY2hhbi0+ZGV2aWNlLT5kZXZpY2VfY29udHJvbChjaGFuLCBETUFfU0xBVkVfQ09ORklHLAorCQkJCQkgICAodW5zaWduZWQgbG9uZykmY29uZmlnKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAiRE1BIHNsYXZlIGNvbmZpZ3VyYXRpb24gZmFpbGVkXG4iKTsKKwkJZ290byBvdXRfZG1hX3VubWFwOworCX0KKworCXJldCA9IGNoYW4tPmRldmljZS0+ZGV2aWNlX2NvbnRyb2woY2hhbiwgRlNMRE1BX0VYVEVSTkFMX1NUQVJULCAxKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAiRE1BIGV4dGVybmFsIGNvbnRyb2wgc2V0dXAgZmFpbGVkXG4iKTsKKwkJZ290byBvdXRfZG1hX3VubWFwOworCX0KKworCS8qIHNldHVwIGFuZCBzdWJtaXQgdGhlIERNQSB0cmFuc2FjdGlvbiAqLworCXR4ID0gY2hhbi0+ZGV2aWNlLT5kZXZpY2VfcHJlcF9kbWFfc2coY2hhbiwKKwkJCQkJICAgICAgdGFibGUuc2dsLCBudW1fcGFnZXMsCisJCQkJCSAgICAgIHZiLT5zZ2xpc3QsIHZiLT5zZ2xlbiwgMCk7CisJaWYgKCF0eCkgeworCQlkZXZfZXJyKHByaXYtPmRldiwgIlVuYWJsZSB0byBwcmVwIERNQSB0cmFuc2FjdGlvblxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2RtYV91bm1hcDsKKwl9CisKKwljb29raWUgPSB0eC0+dHhfc3VibWl0KHR4KTsKKwlpZiAoZG1hX3N1Ym1pdF9lcnJvcihjb29raWUpKSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAiVW5hYmxlIHRvIHN1Ym1pdCBETUEgdHJhbnNhY3Rpb25cbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9kbWFfdW5tYXA7CisJfQorCisJZG1hX2FzeW5jX21lbWNweV9pc3N1ZV9wZW5kaW5nKGNoYW4pOworCisJLyogU2V0IHRoZSB0b3RhbCBieXRlIGNvdW50ICovCisJZnBnYV9zZXRfYnl0ZV9jb3VudChwcml2LT5yZWdzLCBwcml2LT5ieXRlcyk7CisJZGV2X2RiZyhwcml2LT5kZXYsICJ0b3RhbCBieXRlIGNvdW50ICV1IGJ5dGVzXG4iLCBwcml2LT5ieXRlcyk7CisKKwkvKiBFbmFibGUgdGhlIGNvbnRyb2xsZXIgZm9yIERNQSBwcm9ncmFtbWluZyAqLworCWZwZ2FfcHJvZ3JhbW1lcl9lbmFibGUocHJpdiwgdHJ1ZSk7CisJZGV2X2RiZyhwcml2LT5kZXYsICJlbmFibGVkIHRoZSBjb250cm9sbGVyXG4iKTsKKworCS8qIFdhaXQgZm9yIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB0byBzaWduYWwgdGhhdCBwcm9ncmFtbWluZyBmaW5pc2hlZCAqLworCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmcHJpdi0+Y29tcGxldGlvbiwgMiAqIEhaKTsKKwlpZiAoIXJldCkgeworCQlkZXZfZXJyKHByaXYtPmRldiwgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBjb21wbGV0aW9uXG4iKTsKKwkJcmV0ID0gLUVUSU1FRE9VVDsKKwkJZ290byBvdXRfZGlzYWJsZV9jb250cm9sbGVyOworCX0KKworCS8qIFJldHJpZXZlIHRoZSBzdGF0dXMgZnJvbSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgKi8KKwlyZXQgPSBwcml2LT5zdGF0dXM7CisKK291dF9kaXNhYmxlX2NvbnRyb2xsZXI6CisJZnBnYV9wcm9ncmFtbWVyX2Rpc2FibGUocHJpdik7CitvdXRfZG1hX3VubWFwOgorCXZpZGVvYnVmX2RtYV91bm1hcChwcml2LT5kZXYsIHZiKTsKK291dF9mcmVlX3RhYmxlOgorCXNnX2ZyZWVfdGFibGUoJnRhYmxlKTsKK291dF9yZXR1cm46CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEludGVycnVwdCBIYW5kbGluZworICovCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBmcGdhX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGZwZ2FfZGV2ICpwcml2ID0gZGV2X2lkOworCisJLyogU2F2ZSB0aGUgc3RhdHVzICovCisJcHJpdi0+c3RhdHVzID0gZnBnYV9jb25maWdfZXJyb3IocHJpdi0+cmVncykgPyAtRUlPIDogMDsKKwlkZXZfZGJnKHByaXYtPmRldiwgIklOVEVSUlVQVCBzdGF0dXMgJWRcbiIsIHByaXYtPnN0YXR1cyk7CisJZnBnYV9kdW1wX3JlZ2lzdGVycyhwcml2KTsKKworCS8qIERpc2FibGluZyB0aGUgcHJvZ3JhbW1lciBjbGVhcnMgdGhlIGludGVycnVwdCAqLworCWZwZ2FfcHJvZ3JhbW1lcl9kaXNhYmxlKHByaXYpOworCisJLyogTm90aWZ5IGFueSB3YWl0ZXJzICovCisJY29tcGxldGUoJnByaXYtPmNvbXBsZXRpb24pOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKgorICogU1lTRlMgSGVscGVycworICovCisKKy8qKgorICogZnBnYV9kb19zdG9wKCkgLSBkZWNvbmZpZ3VyZSAocmVzZXQpIHRoZSBEQVRBLUZQR0EncworICogQHByaXY6IHRoZSBkcml2ZXIncyBwcml2YXRlIGRhdGEgc3RydWN0dXJlCisgKgorICogTE9DS0lORzogbXVzdCBob2xkIHByaXYtPmxvY2sKKyAqLworc3RhdGljIGludCBmcGdhX2RvX3N0b3Aoc3RydWN0IGZwZ2FfZGV2ICpwcml2KQoreworCXUzMiB2YWw7CisKKwkvKiBTZXQgdGhlIGxlZCB0byB1bnByb2dyYW1tZWQgKi8KKwlsZWR0cmlnX2ZwZ2FfcHJvZ3JhbW1lZChmYWxzZSk7CisKKwkvKiBQdWxzZSB0aGUgY29uZmlnIGxpbmUgdG8gcmVzZXQgdGhlIEZQR0EncyAqLworCXZhbCA9IENGR19DVExfRU5BQkxFIHwgQ0ZHX0NUTF9SRVNFVDsKKwlpb3dyaXRlMzJiZSh2YWwsIHByaXYtPnJlZ3MgKyBGUEdBX0NPTkZJR19DT05UUk9MKTsKKwlpb3dyaXRlMzJiZSgweDAsIHByaXYtPnJlZ3MgKyBGUEdBX0NPTkZJR19DT05UUk9MKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgbm9pbmxpbmUgaW50IGZwZ2FfZG9fcHJvZ3JhbShzdHJ1Y3QgZnBnYV9kZXYgKnByaXYpCit7CisJaW50IHJldDsKKworCWlmIChwcml2LT5ieXRlcyAhPSBwcml2LT5md19zaXplKSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAiSW5jb3JyZWN0IGJpdGZpbGUgc2l6ZTogZ290ICV6dSBieXRlcywgIgorCQkJCSAgICJzaG91bGQgYmUgJXp1IGJ5dGVzXG4iLAorCQkJCSAgIHByaXYtPmJ5dGVzLCBwcml2LT5md19zaXplKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFmcGdhX3Bvd2VyX2VuYWJsZWQocHJpdikpIHsKKwkJZGV2X2Vycihwcml2LT5kZXYsICJQb3dlciBub3QgZW5hYmxlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghZnBnYV9wb3dlcl9nb29kKHByaXYpKSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAiUG93ZXIgbm90IGdvb2RcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBTZXQgdGhlIExFRCB0byB1bnByb2dyYW1tZWQgKi8KKwlsZWR0cmlnX2ZwZ2FfcHJvZ3JhbW1lZChmYWxzZSk7CisKKwkvKiBUcnkgdG8gcHJvZ3JhbSB0aGUgRlBHQSdzIHVzaW5nIERNQSAqLworCXJldCA9IGZwZ2FfcHJvZ3JhbV9kbWEocHJpdik7CisKKwkvKiBJZiBETUEgZmFpbGVkIG9yIGRvZXNuJ3QgZXhpc3QsIHRyeSB3aXRoIENQVSAqLworCWlmIChyZXQpIHsKKwkJZGV2X3dhcm4ocHJpdi0+ZGV2LCAiRmFsbGluZyBiYWNrIHRvIENQVSBwcm9ncmFtbWluZ1xuIik7CisJCXJldCA9IGZwZ2FfcHJvZ3JhbV9jcHUocHJpdik7CisJfQorCisJaWYgKHJldCkgeworCQlkZXZfZXJyKHByaXYtPmRldiwgIlVuYWJsZSB0byBwcm9ncmFtIEZQR0Enc1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogRHJvcCB0aGUgZmlybXdhcmUgYml0ZmlsZSBmcm9tIG1lbW9yeSAqLworCWZwZ2FfZHJvcF9maXJtd2FyZV9kYXRhKHByaXYpOworCisJZGV2X2RiZyhwcml2LT5kZXYsICJGUEdBIHByb2dyYW1taW5nIHN1Y2Nlc3NmdWxcbiIpOworCWxlZHRyaWdfZnBnYV9wcm9ncmFtbWVkKHRydWUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGaWxlIE9wZXJhdGlvbnMKKyAqLworCitzdGF0aWMgaW50IGZwZ2Ffb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwkvKgorCSAqIFRoZSBtaXNjZGV2aWNlIGxheWVyIHB1dHMgb3VyIHN0cnVjdCBtaXNjZGV2aWNlIGludG8gdGhlCisJICogZmlscC0+cHJpdmF0ZV9kYXRhIGZpZWxkLiBXZSB1c2UgdGhpcyB0byBmaW5kIG91ciBwcml2YXRlCisJICogZGF0YSBhbmQgdGhlbiBvdmVyd3JpdGUgaXQgd2l0aCBvdXIgb3duIHByaXZhdGUgc3RydWN0dXJlLgorCSAqLworCXN0cnVjdCBmcGdhX2RldiAqcHJpdiA9IGNvbnRhaW5lcl9vZihmaWxwLT5wcml2YXRlX2RhdGEsCisJCQkJCSAgICAgc3RydWN0IGZwZ2FfZGV2LCBtaXNjZGV2KTsKKwl1bnNpZ25lZCBpbnQgbnJfcGFnZXM7CisJaW50IHJldDsKKworCS8qIFdlIG9ubHkgYWxsb3cgb25lIHByb2Nlc3MgYXQgYSB0aW1lICovCisJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZwcml2LT5sb2NrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZmlscC0+cHJpdmF0ZV9kYXRhID0gcHJpdjsKKwlrcmVmX2dldCgmcHJpdi0+cmVmKTsKKworCS8qIFRydW5jYXRpb246IGRyb3AgYW55IGV4aXN0aW5nIGRhdGEgKi8KKwlpZiAoZmlscC0+Zl9mbGFncyAmIE9fVFJVTkMpCisJCXByaXYtPmJ5dGVzID0gMDsKKworCS8qIENoZWNrIGlmIHdlIGhhdmUgYWxyZWFkeSBhbGxvY2F0ZWQgYSBidWZmZXIgKi8KKwlpZiAocHJpdi0+dmJfYWxsb2NhdGVkKQorCQlyZXR1cm4gMDsKKworCS8qIEFsbG9jYXRlIGEgYnVmZmVyIHRvIGhvbGQgZW5vdWdoIGRhdGEgZm9yIHRoZSBiaXRmaWxlICovCisJbnJfcGFnZXMgPSBESVZfUk9VTkRfVVAocHJpdi0+Zndfc2l6ZSwgUEFHRV9TSVpFKTsKKwlyZXQgPSB2aWRlb2J1Zl9kbWFfaW5pdF9rZXJuZWwoJnByaXYtPnZiLCBETUFfVE9fREVWSUNFLCBucl9wYWdlcyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHByaXYtPmRldiwgInVuYWJsZSB0byBhbGxvY2F0ZSBkYXRhIGJ1ZmZlclxuIik7CisJCW11dGV4X3VubG9jaygmcHJpdi0+bG9jayk7CisJCWtyZWZfcHV0KCZwcml2LT5yZWYsIGZwZ2FfZGV2X3JlbW92ZSk7CisJCXJldHVybiByZXQ7CisJfQorCisJcHJpdi0+dmJfYWxsb2NhdGVkID0gdHJ1ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmcGdhX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGZwZ2FfZGV2ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJbXV0ZXhfdW5sb2NrKCZwcml2LT5sb2NrKTsKKwlrcmVmX3B1dCgmcHJpdi0+cmVmLCBmcGdhX2Rldl9yZW1vdmUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBmcGdhX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqZl9wb3MpCit7CisJc3RydWN0IGZwZ2FfZGV2ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJLyogRlBHQSBiaXRmaWxlcyBoYXZlIGFuIGV4YWN0IHNpemU6IGRpc2FsbG93IGFueXRoaW5nIGVsc2UgKi8KKwlpZiAocHJpdi0+Ynl0ZXMgPj0gcHJpdi0+Zndfc2l6ZSkKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwljb3VudCA9IG1pbl90KHNpemVfdCwgcHJpdi0+Zndfc2l6ZSAtIHByaXYtPmJ5dGVzLCBjb3VudCk7CisJaWYgKGNvcHlfZnJvbV91c2VyKHByaXYtPnZiLnZhZGRyICsgcHJpdi0+Ynl0ZXMsIGJ1ZiwgY291bnQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXByaXYtPmJ5dGVzICs9IGNvdW50OworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgZnBnYV9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsCisJCQkgbG9mZl90ICpmX3BvcykKK3sKKwlzdHJ1Y3QgZnBnYV9kZXYgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisKKwljb3VudCA9IG1pbl90KHNpemVfdCwgcHJpdi0+Ynl0ZXMgLSAqZl9wb3MsIGNvdW50KTsKKwlpZiAoY29weV90b191c2VyKGJ1ZiwgcHJpdi0+dmIudmFkZHIgKyAqZl9wb3MsIGNvdW50KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkqZl9wb3MgKz0gY291bnQ7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgbG9mZl90IGZwZ2FfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxwLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgb3JpZ2luKQoreworCXN0cnVjdCBmcGdhX2RldiAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlsb2ZmX3QgbmV3cG9zOworCisJLyogb25seSByZWFkLW9ubHkgb3BlbnMgYXJlIGFsbG93ZWQgdG8gc2VlayAqLworCWlmICgoZmlscC0+Zl9mbGFncyAmIE9fQUNDTU9ERSkgIT0gT19SRE9OTFkpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChvcmlnaW4pIHsKKwljYXNlIFNFRUtfU0VUOiAvKiBzZWVrIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUgKi8KKwkJbmV3cG9zID0gb2Zmc2V0OworCQlicmVhazsKKwljYXNlIFNFRUtfQ1VSOiAvKiBzZWVrIHJlbGF0aXZlIHRvIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGZpbGUgKi8KKwkJbmV3cG9zID0gZmlscC0+Zl9wb3MgKyBvZmZzZXQ7CisJCWJyZWFrOworCWNhc2UgU0VFS19FTkQ6IC8qIHNlZWsgcmVsYXRpdmUgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSAqLworCQluZXdwb3MgPSBwcml2LT5md19zaXplIC0gb2Zmc2V0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBjaGVjayBmb3Igc2FuaXR5ICovCisJaWYgKG5ld3BvcyA+IHByaXYtPmZ3X3NpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJZmlscC0+Zl9wb3MgPSBuZXdwb3M7CisJcmV0dXJuIG5ld3BvczsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnBnYV9mb3BzID0geworCS5vcGVuCQk9IGZwZ2Ffb3BlbiwKKwkucmVsZWFzZQk9IGZwZ2FfcmVsZWFzZSwKKwkud3JpdGUJCT0gZnBnYV93cml0ZSwKKwkucmVhZAkJPSBmcGdhX3JlYWQsCisJLmxsc2VlawkJPSBmcGdhX2xsc2VlaywKK307CisKKy8qCisgKiBEZXZpY2UgQXR0cmlidXRlcworICovCisKK3N0YXRpYyBzc2l6ZV90IHBmYWlsX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgY2hhciAqYnVmKQoreworCXN0cnVjdCBmcGdhX2RldiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXU4IHZhbDsKKworCXZhbCA9IGlvcmVhZDgocHJpdi0+cmVncyArIENUTF9QV1JfRkFJTCk7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiMHglLjJ4XG4iLCB2YWwpOworfQorCitzdGF0aWMgc3NpemVfdCBwZ29vZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZnBnYV9kZXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgZnBnYV9wb3dlcl9nb29kKHByaXYpKTsKK30KKworc3RhdGljIHNzaXplX3QgcGVuYWJsZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBmcGdhX2RldiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBmcGdhX3Bvd2VyX2VuYWJsZWQocHJpdikpOworfQorCitzdGF0aWMgc3NpemVfdCBwZW5hYmxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBmcGdhX2RldiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCByZXQ7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmdmFsKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodmFsKSB7CisJCXJldCA9IGZwZ2FfZW5hYmxlX3Bvd2VyX3N1cHBsaWVzKHByaXYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9IGVsc2UgeworCQlmcGdhX2RvX3N0b3AocHJpdik7CisJCWZwZ2FfZGlzYWJsZV9wb3dlcl9zdXBwbGllcyhwcml2KTsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHByb2dyYW1fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZnBnYV9kZXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgZnBnYV9ydW5uaW5nKHByaXYpKTsKK30KKworc3RhdGljIHNzaXplX3QgcHJvZ3JhbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgZnBnYV9kZXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgcmV0OworCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJnZhbCkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogV2UgY2FuJ3QgaGF2ZSBhbiBpbWFnZSB3cml0ZXIgYW5kIGJlIHByb2dyYW1taW5nIHNpbXVsdGFuZW91c2x5ICovCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcHJpdi0+bG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwkvKiBQcm9ncmFtIG9yIFJlc2V0IHRoZSBGUEdBJ3MgKi8KKwlyZXQgPSB2YWwgPyBmcGdhX2RvX3Byb2dyYW0ocHJpdikgOiBmcGdhX2RvX3N0b3AocHJpdik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfdW5sb2NrOworCisJLyogU3VjY2VzcyAqLworCXJldCA9IGNvdW50OworCitvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmcHJpdi0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHBvd2VyX2ZhaWwsIFNfSVJVR08sIHBmYWlsX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHBvd2VyX2dvb2QsIFNfSVJVR08sIHBnb29kX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHBvd2VyX2VuYWJsZSwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgIHBlbmFibGVfc2hvdywgcGVuYWJsZV9zdG9yZSk7CisKK3N0YXRpYyBERVZJQ0VfQVRUUihwcm9ncmFtLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgcHJvZ3JhbV9zaG93LCBwcm9ncmFtX3N0b3JlKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmZwZ2FfYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl9wb3dlcl9mYWlsLmF0dHIsCisJJmRldl9hdHRyX3Bvd2VyX2dvb2QuYXR0ciwKKwkmZGV2X2F0dHJfcG93ZXJfZW5hYmxlLmF0dHIsCisJJmRldl9hdHRyX3Byb2dyYW0uYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZnBnYV9hdHRyX2dyb3VwID0geworCS5hdHRycyA9IGZwZ2FfYXR0cmlidXRlcywKK307CisKKy8qCisgKiBPcGVuRmlybXdhcmUgRGV2aWNlIFN1YnN5c3RlbQorICovCisKKyNkZWZpbmUgU1lTX1JFR19WRVJTSU9OCQkweDAwCisjZGVmaW5lIFNZU19SRUdfR0VPR1JBUEhJQwkweDEwCisKK3N0YXRpYyBib29sIGRtYV9maWx0ZXIoc3RydWN0IGRtYV9jaGFuICpjaGFuLCB2b2lkICpkYXRhKQoreworCS8qCisJICogRE1BIENoYW5uZWwgIzAgaXMgdGhlIG9ubHkgYWNjZXB0YWJsZSBkZXZpY2UKKwkgKgorCSAqIFRoaXMgcHJvYmFibHkgd29uJ3Qgc3Vydml2ZSBhbiB1bmxvYWQvbG9hZCBjeWNsZSBvZiB0aGUgRnJlZXNjYWxlCisJICogRE1BRW5naW5lIGRyaXZlciwgYnV0IHRoYXQgd29uJ3QgYmUgYSBwcm9ibGVtCisJICovCisJcmV0dXJuIGNoYW4tPmNoYW5faWQgPT0gMCAmJiBjaGFuLT5kZXZpY2UtPmRldl9pZCA9PSAwOworfQorCitzdGF0aWMgaW50IGZwZ2Ffb2ZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wKQoreworCXN0cnVjdCBmcGdhX2RldiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YSgmb3AtPmRldik7CisJc3RydWN0IGRldmljZSAqdGhpc19kZXZpY2UgPSBwcml2LT5taXNjZGV2LnRoaXNfZGV2aWNlOworCisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZ0aGlzX2RldmljZS0+a29iaiwgJmZwZ2FfYXR0cl9ncm91cCk7CisJbWlzY19kZXJlZ2lzdGVyKCZwcml2LT5taXNjZGV2KTsKKworCWZyZWVfaXJxKHByaXYtPmlycSwgcHJpdik7CisJaXJxX2Rpc3Bvc2VfbWFwcGluZyhwcml2LT5pcnEpOworCisJLyogbWFrZSBzdXJlIHRoZSBwb3dlciBzdXBwbGllcyBhcmUgb2ZmICovCisJZnBnYV9kaXNhYmxlX3Bvd2VyX3N1cHBsaWVzKHByaXYpOworCisJLyogdW5tYXAgcmVnaXN0ZXJzICovCisJaW91bm1hcChwcml2LT5pbW1yKTsKKwlpb3VubWFwKHByaXYtPnJlZ3MpOworCisJZG1hX3JlbGVhc2VfY2hhbm5lbChwcml2LT5jaGFuKTsKKworCS8qIGRyb3Agb3VyIHJlZmVyZW5jZSB0byB0aGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSAqLworCWtyZWZfcHV0KCZwcml2LT5yZWYsIGZwZ2FfZGV2X3JlbW92ZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIENUTC1DUExEIFZlcnNpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ1RMX0NQTERfVkVSU0lPTgkweDIwMDAKKworc3RhdGljIGludCBmcGdhX29mX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wLAorCQkJIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSA9IG9wLT5kZXYub2Zfbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlICp0aGlzX2RldmljZTsKKwlzdHJ1Y3QgZnBnYV9kZXYgKnByaXY7CisJZG1hX2NhcF9tYXNrX3QgbWFzazsKKwl1MzIgdmVyOworCWludCByZXQ7CisKKwkvKiBBbGxvY2F0ZSBwcml2YXRlIGRhdGEgKi8KKwlwcml2ID0ga3phbGxvYyhzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpIHsKKwkJZGV2X2Vycigmb3AtPmRldiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBwcml2YXRlIGRhdGFcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9yZXR1cm47CisJfQorCisJLyogU2V0dXAgdGhlIG1pc2NkZXZpY2UgKi8KKwlwcml2LT5taXNjZGV2Lm1pbm9yID0gTUlTQ19EWU5BTUlDX01JTk9SOworCXByaXYtPm1pc2NkZXYubmFtZSA9IGRydl9uYW1lOworCXByaXYtPm1pc2NkZXYuZm9wcyA9ICZmcGdhX2ZvcHM7CisKKwlrcmVmX2luaXQoJnByaXYtPnJlZik7CisKKwlkZXZfc2V0X2RydmRhdGEoJm9wLT5kZXYsIHByaXYpOworCXByaXYtPmRldiA9ICZvcC0+ZGV2OworCW11dGV4X2luaXQoJnByaXYtPmxvY2spOworCWluaXRfY29tcGxldGlvbigmcHJpdi0+Y29tcGxldGlvbik7CisJdmlkZW9idWZfZG1hX2luaXQoJnByaXYtPnZiKTsKKworCWRldl9zZXRfZHJ2ZGF0YShwcml2LT5kZXYsIHByaXYpOworCWRtYV9jYXBfemVybyhtYXNrKTsKKwlkbWFfY2FwX3NldChETUFfTUVNQ1BZLCBtYXNrKTsKKwlkbWFfY2FwX3NldChETUFfSU5URVJSVVBULCBtYXNrKTsKKwlkbWFfY2FwX3NldChETUFfU0xBVkUsIG1hc2spOworCWRtYV9jYXBfc2V0KERNQV9TRywgbWFzayk7CisKKwkvKiBHZXQgY29udHJvbCBvZiBETUEgY2hhbm5lbCAjMCAqLworCXByaXYtPmNoYW4gPSBkbWFfcmVxdWVzdF9jaGFubmVsKG1hc2ssIGRtYV9maWx0ZXIsIE5VTEwpOworCWlmICghcHJpdi0+Y2hhbikgeworCQlkZXZfZXJyKCZvcC0+ZGV2LCAiVW5hYmxlIHRvIGFjcXVpcmUgRE1BIGNoYW5uZWwgIzBcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF9mcmVlX3ByaXY7CisJfQorCisJLyogUmVtYXAgdGhlIHJlZ2lzdGVycyBmb3IgdXNlICovCisJcHJpdi0+cmVncyA9IG9mX2lvbWFwKG9mX25vZGUsIDApOworCWlmICghcHJpdi0+cmVncykgeworCQlkZXZfZXJyKCZvcC0+ZGV2LCAiVW5hYmxlIHRvIGlvcmVtYXAgcmVnaXN0ZXJzXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfZG1hX3JlbGVhc2VfY2hhbm5lbDsKKwl9CisKKwkvKiBSZW1hcCB0aGUgSU1NUiBmb3IgdXNlICovCisJcHJpdi0+aW1tciA9IGlvcmVtYXAoZ2V0X2ltbXJiYXNlKCksIDB4MTAwMDAwKTsKKwlpZiAoIXByaXYtPmltbXIpIHsKKwkJZGV2X2Vycigmb3AtPmRldiwgIlVuYWJsZSB0byBpb3JlbWFwIElNTVJcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF91bm1hcF9yZWdzOworCX0KKworCS8qCisJICogQ2hlY2sgdGhhdCBleHRlcm5hbCBETUEgaXMgY29uZmlndXJlZAorCSAqCisJICogVS1Cb290IGRvZXMgdGhpcyBmb3IgdXMsIGJ1dCB3ZSBzaG91bGQgY2hlY2sgaXQgYW5kIGJhaWwgb3V0IGlmCisJICogdGhlcmUgaXMgYSBwcm9ibGVtLiBGYWlsaW5nIHRvIGhhdmUgdGhpcyByZWdpc3RlciBzZXR1cCBjb3JyZWN0bHkKKwkgKiB3aWxsIGNhdXNlIHRoZSBETUEgY29udHJvbGxlciB0byB0cmFuc2ZlciBhIHNpbmdsZSBjYWNoZWxpbmUKKwkgKiB3b3J0aCBvZiBkYXRhLCB0aGVuIHdlZGdlIGl0c2VsZi4KKwkgKi8KKwlpZiAoKGlvcmVhZDMyYmUocHJpdi0+aW1tciArIDB4MTE0KSAmIDB4RTAwKSAhPSAweEUwMCkgeworCQlkZXZfZXJyKCZvcC0+ZGV2LCAiRXh0ZXJuYWwgRE1BIGNvbnRyb2wgbm90IGNvbmZpZ3VyZWRcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF91bm1hcF9pbW1yOworCX0KKworCS8qCisJICogQ2hlY2sgdGhlIENUTC1DUExEIHZlcnNpb24KKwkgKgorCSAqIFRoaXMgZHJpdmVyIHVzZXMgdGhlIENUTC1DUExEIERBVEEtRlBHQSBwb3dlciBzZXF1ZW5jZXIsIGFuZCB3ZQorCSAqIGRvbid0IHdhbnQgdG8gcnVuIG9uIGFueSB2ZXJzaW9uIG9mIHRoZSBDVEwtQ1BMRCB0aGF0IGRvZXMgbm90IHVzZQorCSAqIGEgY29tcGF0aWJsZSByZWdpc3RlciBsYXlvdXQuCisJICoKKwkgKiB2MjogY2hhbmdlZCByZWdpc3RlciBsYXlvdXQsIGFkZGVkIHBvd2VyIHNlcXVlbmNlcgorCSAqIHYzOiBhZGRlZCBnbGl0Y2ggZmlsdGVyIG9uIHRoZSBpMmMgb3ZlcmN1cnJlbnQvb3ZlcnRlbXAgb3V0cHV0cworCSAqLworCXZlciA9IGlvcmVhZDgocHJpdi0+cmVncyArIENUTF9DUExEX1ZFUlNJT04pOworCWlmICh2ZXIgIT0gMHgwMiAmJiB2ZXIgIT0gMHgwMykgeworCQlkZXZfZXJyKCZvcC0+ZGV2LCAiQ1RMLUNQTEQgaXMgbm90IHZlcnNpb24gMHgwMiBvciAweDAzIVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X3VubWFwX2ltbXI7CisJfQorCisJLyogU2V0IHRoZSBleGFjdCBzaXplIHRoYXQgdGhlIGZpcm13YXJlIGltYWdlIHNob3VsZCBiZSAqLworCXZlciA9IGlvcmVhZDMyYmUocHJpdi0+cmVncyArIFNZU19SRUdfVkVSU0lPTik7CisJcHJpdi0+Zndfc2l6ZSA9ICh2ZXIgJiAoMSA8PCAxOCkpID8gRldfU0laRV9FUDJTMTMwIDogRldfU0laRV9FUDJTOTA7CisKKwkvKiBGaW5kIHRoZSBjb3JyZWN0IElSUSBudW1iZXIgKi8KKwlwcml2LT5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChvZl9ub2RlLCAwKTsKKwlpZiAocHJpdi0+aXJxID09IE5PX0lSUSkgeworCQlkZXZfZXJyKCZvcC0+ZGV2LCAiVW5hYmxlIHRvIGZpbmQgSVJRIGxpbmVcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF91bm1hcF9pbW1yOworCX0KKworCS8qIFJlcXVlc3QgdGhlIElSUSAqLworCXJldCA9IHJlcXVlc3RfaXJxKHByaXYtPmlycSwgZnBnYV9pcnEsIElSUUZfU0hBUkVELCBkcnZfbmFtZSwgcHJpdik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZvcC0+ZGV2LCAiVW5hYmxlIHRvIHJlcXVlc3QgSVJRICVkXG4iLCBwcml2LT5pcnEpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF9pcnFfZGlzcG9zZV9tYXBwaW5nOworCX0KKworCS8qIFJlc2V0IGFuZCBzdG9wIHRoZSBGUEdBJ3MsIGp1c3QgaW4gY2FzZSAqLworCWZwZ2FfZG9fc3RvcChwcml2KTsKKworCS8qIFJlZ2lzdGVyIHRoZSBtaXNjZGV2aWNlICovCisJcmV0ID0gbWlzY19yZWdpc3RlcigmcHJpdi0+bWlzY2Rldik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZvcC0+ZGV2LCAiVW5hYmxlIHRvIHJlZ2lzdGVyIG1pc2NkZXZpY2VcbiIpOworCQlnb3RvIG91dF9mcmVlX2lycTsKKwl9CisKKwkvKiBDcmVhdGUgdGhlIHN5c2ZzIGZpbGVzICovCisJdGhpc19kZXZpY2UgPSBwcml2LT5taXNjZGV2LnRoaXNfZGV2aWNlOworCWRldl9zZXRfZHJ2ZGF0YSh0aGlzX2RldmljZSwgcHJpdik7CisJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZ0aGlzX2RldmljZS0+a29iaiwgJmZwZ2FfYXR0cl9ncm91cCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZvcC0+ZGV2LCAiVW5hYmxlIHRvIGNyZWF0ZSBzeXNmcyBmaWxlc1xuIik7CisJCWdvdG8gb3V0X21pc2NfZGVyZWdpc3RlcjsKKwl9CisKKwlkZXZfaW5mbyhwcml2LT5kZXYsICJDQVJNQSBGUEdBIFByb2dyYW1tZXI6ICVzIHJldiVzIHdpdGggJXMgRlBHQXNcbiIsCisJCQkodmVyICYgKDEgPDwgMTcpKSA/ICJDb3JyZWxhdG9yIiA6ICJEaWdpdGl6ZXIiLAorCQkJKHZlciAmICgxIDw8IDE2KSkgPyAiQiIgOiAiQSIsCisJCQkodmVyICYgKDEgPDwgMTgpKSA/ICJFUDJTMTMwIiA6ICJFUDJTOTAiKTsKKworCXJldHVybiAwOworCitvdXRfbWlzY19kZXJlZ2lzdGVyOgorCW1pc2NfZGVyZWdpc3RlcigmcHJpdi0+bWlzY2Rldik7CitvdXRfZnJlZV9pcnE6CisJZnJlZV9pcnEocHJpdi0+aXJxLCBwcml2KTsKK291dF9pcnFfZGlzcG9zZV9tYXBwaW5nOgorCWlycV9kaXNwb3NlX21hcHBpbmcocHJpdi0+aXJxKTsKK291dF91bm1hcF9pbW1yOgorCWlvdW5tYXAocHJpdi0+aW1tcik7CitvdXRfdW5tYXBfcmVnczoKKwlpb3VubWFwKHByaXYtPnJlZ3MpOworb3V0X2RtYV9yZWxlYXNlX2NoYW5uZWw6CisJZG1hX3JlbGVhc2VfY2hhbm5lbChwcml2LT5jaGFuKTsKK291dF9mcmVlX3ByaXY6CisJa3JlZl9wdXQoJnByaXYtPnJlZiwgZnBnYV9kZXZfcmVtb3ZlKTsKK291dF9yZXR1cm46CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgZnBnYV9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiY2FybWEsZnBnYS1wcm9ncmFtbWVyIiwgfSwKKwl7fSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIGZwZ2Ffb2ZfZHJpdmVyID0geworCS5wcm9iZQkJPSBmcGdhX29mX3Byb2JlLAorCS5yZW1vdmUJCT0gZnBnYV9vZl9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCQk9IGRydl9uYW1lLAorCQkub2ZfbWF0Y2hfdGFibGUJPSBmcGdhX29mX21hdGNoLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKKy8qCisgKiBNb2R1bGUgSW5pdCAvIEV4aXQKKyAqLworCitzdGF0aWMgaW50IF9faW5pdCBmcGdhX2luaXQodm9pZCkKK3sKKwlsZWRfdHJpZ2dlcl9yZWdpc3Rlcl9zaW1wbGUoImZwZ2EiLCAmbGVkdHJpZ19mcGdhKTsKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZmcGdhX29mX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBmcGdhX2V4aXQodm9pZCkKK3sKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZnBnYV9vZl9kcml2ZXIpOworCWxlZF90cmlnZ2VyX3VucmVnaXN0ZXJfc2ltcGxlKGxlZHRyaWdfZnBnYSk7Cit9CisKK01PRFVMRV9BVVRIT1IoIklyYSBXLiBTbnlkZXIgPGl3c0BvdnJvLmNhbHRlY2guZWR1PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDQVJNQSBCb2FyZCBEQVRBLUZQR0EgUHJvZ3JhbW1lciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfaW5pdChmcGdhX2luaXQpOworbW9kdWxlX2V4aXQoZnBnYV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9jYXJtYS9jYXJtYS1mcGdhLmMgYi9kcml2ZXJzL21pc2MvY2FybWEvY2FybWEtZnBnYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NjU4MjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21pc2MvY2FybWEvY2FybWEtZnBnYS5jCkBAIC0wLDAgKzEsMTQzMyBAQAorLyoKKyAqIENBUk1BIERBVEEtRlBHQSBBY2Nlc3MgRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTEgSXJhIFcuIFNueWRlciA8aXdzQG92cm8uY2FsdGVjaC5lZHU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvKgorICogRlBHQSBNZW1vcnkgRHVtcCBGb3JtYXQKKyAqCisgKiBGUEdBICMwIGNvbnRyb2wgcmVnaXN0ZXJzICgzMiB4IDMyLWJpdCB3b3JkcykKKyAqIEZQR0EgIzEgY29udHJvbCByZWdpc3RlcnMgKDMyIHggMzItYml0IHdvcmRzKQorICogRlBHQSAjMiBjb250cm9sIHJlZ2lzdGVycyAoMzIgeCAzMi1iaXQgd29yZHMpCisgKiBGUEdBICMzIGNvbnRyb2wgcmVnaXN0ZXJzICgzMiB4IDMyLWJpdCB3b3JkcykKKyAqIFNZU0ZQR0EgY29udHJvbCByZWdpc3RlcnMgKDMyIHggMzItYml0IHdvcmRzKQorICogRlBHQSAjMCBjb3JyZWxhdGlvbiBhcnJheSAoTlVNX0NPUkwwIGNvcnJlbGF0aW9uIGJsb2NrcykKKyAqIEZQR0EgIzEgY29ycmVsYXRpb24gYXJyYXkgKE5VTV9DT1JMMSBjb3JyZWxhdGlvbiBibG9ja3MpCisgKiBGUEdBICMyIGNvcnJlbGF0aW9uIGFycmF5IChOVU1fQ09STDIgY29ycmVsYXRpb24gYmxvY2tzKQorICogRlBHQSAjMyBjb3JyZWxhdGlvbiBhcnJheSAoTlVNX0NPUkwzIGNvcnJlbGF0aW9uIGJsb2NrcykKKyAqCisgKiBFYWNoIGNvcnJlbGF0aW9uIGFycmF5IGNvbnNpc3RzIG9mOgorICoKKyAqIENvcnJlbGF0aW9uIERhdGEgICAgICAoMiB4IE5VTV9MQUdTbiB4IDMyLWJpdCB3b3JkcykKKyAqIFBpcGVsaW5lIE1ldGFkYXRhICAgICAoMiB4IE5VTV9NRVRBbiB4IDMyLWJpdCB3b3JkcykKKyAqIFF1YW50aXphdGlvbiBDb3VudGVycyAoMiB4IE5VTV9RQ05UbiB4IDMyLWJpdCB3b3JkcykKKyAqCisgKiBUaGUgTlVNX0NPUkxuLCBOVU1fTEFHU24sIE5VTV9NRVRBbiwgYW5kIE5VTV9RQ05UbiB2YWx1ZXMgY29tZSBmcm9tCisgKiB0aGUgRlBHQSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycy4gVGhleSBkbyBub3QgY2hhbmdlIG9uY2UgdGhlIEZQR0EncworICogaGF2ZSBiZWVuIHByb2dyYW1tZWQsIHRoZXkgb25seSBjaGFuZ2Ugb24gcmUtcHJvZ3JhbW1pbmcuCisgKi8KKworLyoKKyAqIEJhc2ljIERlc2NyaXB0aW9uOgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIHVzZWQgdG8gY2FwdHVyZSBjb3JyZWxhdGlvbiBzcGVjdHJhIG9mZiBvZiB0aGUgZm91ciBkYXRhCisgKiBwcm9jZXNzaW5nIEZQR0FzLiBUaGUgRlBHQXMgYXJlIG9mdGVuIHJlcHJvZ3JhbW1lZCBhdCBydW50aW1lLCB0aGVyZWZvcmUKKyAqIHRoaXMgZHJpdmVyIHN1cHBvcnRzIGR5bmFtaWMgZW5hYmxlL2Rpc2FibGUgb2YgY2FwdHVyZSB3aGlsZSB0aGUgZGV2aWNlCisgKiByZW1haW5zIG9wZW4uCisgKgorICogVGhlIG5vbWluYWwgY2FwdHVyZSByYXRlIGlzIDY0SHogKGV2ZXJ5IDE1LjYyNW1zKS4gVG8gZmFjaWxpdGF0ZSB0aGlzIGZhc3QKKyAqIGNhcHR1cmUgcmF0ZSwgYWxsIGJ1ZmZlcnMgYXJlIHByZS1hbGxvY2F0ZWQgdG8gYXZvaWQgYW55IHBvdGVudGlhbGx5IGxvbmcKKyAqIHJ1bm5pbmcgbWVtb3J5IGFsbG9jYXRpb25zIHdoaWxlIGNhcHR1cmluZy4KKyAqCisgKiBUaGVyZSBhcmUgdHdvIGxpc3RzIGFuZCBvbmUgcG9pbnRlciB3aGljaCBhcmUgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHRoZQorICogZGlmZmVyZW50IHN0YXRlcyBvZiBkYXRhIGJ1ZmZlcnMuCisgKgorICogMSkgZnJlZSBsaXN0CisgKiBUaGlzIGxpc3QgaG9sZHMgYWxsIGVtcHR5IGRhdGEgYnVmZmVycyB3aGljaCBhcmUgcmVhZHkgdG8gcmVjZWl2ZSBkYXRhLgorICoKKyAqIDIpIGluZmxpZ2h0IHBvaW50ZXIKKyAqIFRoaXMgcG9pbnRlciBob2xkcyB0aGUgY3VycmVudGx5IGluZmxpZ2h0IGRhdGEgYnVmZmVyLiBUaGlzIGJ1ZmZlciBpcyBoYXZpbmcKKyAqIGRhdGEgY29waWVkIGludG8gaXQgYnkgdGhlIERNQSBlbmdpbmUuCisgKgorICogMykgdXNlZCBsaXN0CisgKiBUaGlzIGxpc3QgaG9sZHMgZGF0YSBidWZmZXJzIHdoaWNoIGhhdmUgYmVlbiBmaWxsZWQsIGFuZCBhcmUgd2FpdGluZyB0byBiZQorICogcmVhZCBieSB1c2Vyc3BhY2UuCisgKgorICogQWxsIGJ1ZmZlcnMgc3RhcnQgbGlmZSBvbiB0aGUgZnJlZSBsaXN0LCB0aGVuIG1vdmUgc3VjY2Vzc2l2ZWx5IHRvIHRoZQorICogaW5mbGlnaHQgcG9pbnRlciwgYW5kIHRoZW4gdG8gdGhlIHVzZWQgbGlzdC4gQWZ0ZXIgdGhleSBoYXZlIGJlZW4gcmVhZCBieQorICogdXNlcnNwYWNlLCB0aGV5IGFyZSBtb3ZlZCBiYWNrIHRvIHRoZSBmcmVlIGxpc3QuIFRoZSBjeWNsZSByZXBlYXRzIGFzIGxvbmcKKyAqIGFzIG5lY2Vzc2FyeS4KKyAqCisgKiBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBhbGwgYnVmZmVycyBhcmUgbWFwcGVkIGFuZCByZWFkeSBmb3IgRE1BIHdoZW4gdGhleQorICogYXJlIG9uIGFueSBvZiB0aGUgdGhyZWUgbGlzdHMuIFRoZXkgYXJlIG9ubHkgdW5tYXBwZWQgd2hlbiB0aGV5IGFyZSBpbiB0aGUKKyAqIHByb2Nlc3Mgb2YgYmVpbmcgcmVhZCBieSB1c2Vyc3BhY2UuCisgKi8KKworLyoKKyAqIE5vdGVzIG9uIHRoZSBJUlEgbWFza2luZyBzY2hlbWU6CisgKgorICogVGhlIElSUSBtYXNraW5nIHNjaGVtZSBoZXJlIGlzIGRpZmZlcmVudCB0aGFuIG1vc3Qgb3RoZXIgaGFyZHdhcmUuIFRoZSBvbmx5CisgKiB3YXkgZm9yIHRoZSBEQVRBLUZQR0FzIHRvIGRldGVjdCBpZiB0aGUga2VybmVsIGhhcyB0YWtlbiB0b28gbG9uZyB0byBjb3B5CisgKiB0aGUgZGF0YSBpcyBpZiB0aGUgc3RhdHVzIHJlZ2lzdGVycyBhcmUgbm90IGNsZWFyZWQgYmVmb3JlIHRoZSBuZXh0CisgKiBjb3JyZWxhdGlvbiBkYXRhIGR1bXAgaXMgcmVhZHkuCisgKgorICogVGhlIGludGVycnVwdCBsaW5lIGlzIGNvbm5lY3RlZCB0byB0aGUgc3RhdHVzIHJlZ2lzdGVycywgc3VjaCB0aGF0IHdoZW4gdGhleQorICogYXJlIGNsZWFyZWQsIHRoZSBpbnRlcnJ1cHQgaXMgZGUtYXNzZXJ0ZWQuIFRoZXJlaW4gbGllcyBvdXIgcHJvYmxlbS4gV2UgbmVlZAorICogdG8gc2NoZWR1bGUgYSBsb25nLXJ1bm5pbmcgRE1BIG9wZXJhdGlvbiBhbmQgcmV0dXJuIGZyb20gdGhlIGludGVycnVwdAorICogaGFuZGxlciBxdWlja2x5LCBidXQgd2UgY2Fubm90IGNsZWFyIHRoZSBzdGF0dXMgcmVnaXN0ZXJzLgorICoKKyAqIFRvIGhhbmRsZSB0aGlzLCB0aGUgc3lzdGVtIGNvbnRyb2xsZXIgRlBHQSBoYXMgdGhlIGNhcGFiaWxpdHkgdG8gY29ubmVjdCB0aGUKKyAqIGludGVycnVwdCBsaW5lIHRvIGEgdXNlci1jb250cm9sbGVkIEdQSU8gcGluLiBUaGlzIHBpbiBpcyBkcml2ZW4gaGlnaAorICogKHVuYXNzZXJ0ZWQpIGFuZCBsZWZ0IHRoYXQgd2F5LiBUbyBtYXNrIHRoZSBpbnRlcnJ1cHQsIHdlIGNoYW5nZSB0aGUKKyAqIGludGVycnVwdCBzb3VyY2UgdG8gdGhlIEdQSU8gcGluLiBUYWRhLCB3ZSBoaWQgdGhlIGludGVycnVwdC4gOikKKyAqLworCisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxtZWRpYS92aWRlb2J1Zi1kbWEtc2cuaD4KKworLyogc3lzdGVtIGNvbnRyb2xsZXIgcmVnaXN0ZXJzICovCisjZGVmaW5lIFNZU19JUlFfU09VUkNFX0NUTAkweDI0CisjZGVmaW5lIFNZU19JUlFfT1VUUFVUX0VOCTB4MjgKKyNkZWZpbmUgU1lTX0lSUV9PVVRQVVRfREFUQQkweDJDCisjZGVmaW5lIFNZU19JUlFfSU5QVVRfREFUQQkweDMwCisjZGVmaW5lIFNZU19GUEdBX0NPTkZJR19TVEFUVVMJMHg0NAorCisvKiBHUElPIElSUSBsaW5lIGFzc2lnbm1lbnQgKi8KKyNkZWZpbmUgSVJRX0NPUkxfRE9ORQkJMHgxMAorCisvKiBGUEdBIHJlZ2lzdGVycyAqLworI2RlZmluZSBNTUFQX1JFR19WRVJTSU9OCTB4MDAKKyNkZWZpbmUgTU1BUF9SRUdfQ09STF9DT05GMQkweDA4CisjZGVmaW5lIE1NQVBfUkVHX0NPUkxfQ09ORjIJMHgwQworI2RlZmluZSBNTUFQX1JFR19TVEFUVVMJCTB4NDgKKworI2RlZmluZSBTWVNfRlBHQV9CTE9DSwkJMHhGMDAwMDAwMAorCisjZGVmaW5lIERBVEFfRlBHQV9TVEFSVAkJMHg0MDAwMDAKKyNkZWZpbmUgREFUQV9GUEdBX1NJWkUJCTB4ODAwMDAKKworc3RhdGljIGNvbnN0IGNoYXIgZHJ2X25hbWVbXSA9ICJjYXJtYS1mcGdhIjsKKworI2RlZmluZSBOVU1fRlBHQQk0CisKKyNkZWZpbmUgTUlOX0RBVEFfQlVGUwk4CisjZGVmaW5lIE1BWF9EQVRBX0JVRlMJNjQKKworc3RydWN0IGZwZ2FfaW5mbyB7CisJdW5zaWduZWQgaW50IG51bV9sYWdfcmFtOworCXVuc2lnbmVkIGludCBibGtfc2l6ZTsKK307CisKK3N0cnVjdCBkYXRhX2J1ZiB7CisJc3RydWN0IGxpc3RfaGVhZCBlbnRyeTsKKwlzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmIHZiOworCXNpemVfdCBzaXplOworfTsKKworc3RydWN0IGZwZ2FfZGV2aWNlIHsKKwkvKiBjaGFyYWN0ZXIgZGV2aWNlICovCisJc3RydWN0IG1pc2NkZXZpY2UgbWlzY2RldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IG11dGV4IG11dGV4OworCisJLyogcmVmZXJlbmNlIGNvdW50ICovCisJc3RydWN0IGtyZWYgcmVmOworCisJLyogRlBHQSByZWdpc3RlcnMgYW5kIGluZm9ybWF0aW9uICovCisJc3RydWN0IGZwZ2FfaW5mbyBpbmZvW05VTV9GUEdBXTsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJaW50IGlycTsKKworCS8qIEZQR0EgUGh5c2ljYWwgQWRkcmVzcy9TaXplIEluZm9ybWF0aW9uICovCisJcmVzb3VyY2Vfc2l6ZV90IHBoeXNfYWRkcjsKKwlzaXplX3QgcGh5c19zaXplOworCisJLyogRE1BIHN0cnVjdHVyZXMgKi8KKwlzdHJ1Y3Qgc2dfdGFibGUgY29ybF90YWJsZTsKKwl1bnNpZ25lZCBpbnQgY29ybF9uZW50czsKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47CisKKwkvKiBQcm90ZWN0aW9uIGZvciBhbGwgbWVtYmVycyBiZWxvdyAqLworCXNwaW5sb2NrX3QgbG9jazsKKworCS8qIERldmljZSBlbmFibGUvZGlzYWJsZSBmbGFnICovCisJYm9vbCBlbmFibGVkOworCisJLyogQ29ycmVsYXRpb24gZGF0YSBidWZmZXJzICovCisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWU7CisJc3RydWN0IGxpc3RfaGVhZCB1c2VkOworCXN0cnVjdCBkYXRhX2J1ZiAqaW5mbGlnaHQ7CisKKwkvKiBJbmZvcm1hdGlvbiBhYm91dCBkYXRhIGJ1ZmZlcnMgKi8KKwl1bnNpZ25lZCBpbnQgbnVtX2Ryb3BwZWQ7CisJdW5zaWduZWQgaW50IG51bV9idWZmZXJzOworCXNpemVfdCBidWZzaXplOworCXN0cnVjdCBkZW50cnkgKmRiZ19lbnRyeTsKK307CisKK3N0cnVjdCBmcGdhX3JlYWRlciB7CisJc3RydWN0IGZwZ2FfZGV2aWNlICpwcml2OworCXN0cnVjdCBkYXRhX2J1ZiAqYnVmOworCW9mZl90IGJ1Zl9zdGFydDsKK307CisKK3N0YXRpYyB2b2lkIGZwZ2FfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZikKK3sKKwlzdHJ1Y3QgZnBnYV9kZXZpY2UgKnByaXYgPSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgZnBnYV9kZXZpY2UsIHJlZik7CisKKwkvKiB0aGUgbGFzdCByZWFkZXIgaGFzIGV4aXRlZCwgY2xlYW51cCB0aGUgbGFzdCBiaXRzICovCisJbXV0ZXhfZGVzdHJveSgmcHJpdi0+bXV0ZXgpOworCWtmcmVlKHByaXYpOworfQorCisvKgorICogRGF0YSBCdWZmZXIgQWxsb2NhdGlvbiBIZWxwZXJzCisgKi8KKworLyoqCisgKiBkYXRhX2ZyZWVfYnVmZmVyKCkgLSBmcmVlIGEgc2luZ2xlIGRhdGEgYnVmZmVyIGFuZCBhbGwgYWxsb2NhdGVkIG1lbW9yeQorICogQGJ1ZjogdGhlIGJ1ZmZlciB0byBmcmVlCisgKgorICogVGhpcyB3aWxsIGZyZWUgYWxsIG9mIHRoZSBwYWdlcyBhbGxvY2F0ZWQgdG8gdGhlIGdpdmVuIGRhdGEgYnVmZmVyLCBhbmQKKyAqIHRoZW4gZnJlZSB0aGUgc3RydWN0dXJlIGl0c2VsZgorICovCitzdGF0aWMgdm9pZCBkYXRhX2ZyZWVfYnVmZmVyKHN0cnVjdCBkYXRhX2J1ZiAqYnVmKQoreworCS8qIEl0IGlzIG9rIHRvIGZyZWUgYSBOVUxMIGJ1ZmZlciAqLworCWlmICghYnVmKQorCQlyZXR1cm47CisKKwkvKiBmcmVlIGFsbCBtZW1vcnkgKi8KKwl2aWRlb2J1Zl9kbWFfZnJlZSgmYnVmLT52Yik7CisJa2ZyZWUoYnVmKTsKK30KKworLyoqCisgKiBkYXRhX2FsbG9jX2J1ZmZlcigpIC0gYWxsb2NhdGUgYW5kIGZpbGwgYSBkYXRhIGJ1ZmZlciB3aXRoIHBhZ2VzCisgKiBAYnl0ZXM6IHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVxdWlyZWQKKyAqCisgKiBUaGlzIGFsbG9jYXRlcyBhbGwgc3BhY2UgbmVlZGVkIGZvciBhIGRhdGEgYnVmZmVyLiBJdCBtdXN0IGJlIG1hcHBlZCBiZWZvcmUKKyAqIHVzZSBpbiBhIERNQSB0cmFuc2FjdGlvbiB1c2luZyB2aWRlb2J1Zl9kbWFfbWFwKCkuCisgKgorICogUmV0dXJucyBOVUxMIG9uIGZhaWx1cmUKKyAqLworc3RhdGljIHN0cnVjdCBkYXRhX2J1ZiAqZGF0YV9hbGxvY19idWZmZXIoY29uc3Qgc2l6ZV90IGJ5dGVzKQoreworCXVuc2lnbmVkIGludCBucl9wYWdlczsKKwlzdHJ1Y3QgZGF0YV9idWYgKmJ1ZjsKKwlpbnQgcmV0OworCisJLyogY2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgcGFnZXMgbmVjZXNzYXJ5ICovCisJbnJfcGFnZXMgPSBESVZfUk9VTkRfVVAoYnl0ZXMsIFBBR0VfU0laRSk7CisKKwkvKiBhbGxvY2F0ZSB0aGUgYnVmZmVyIHN0cnVjdHVyZSAqLworCWJ1ZiA9IGt6YWxsb2Moc2l6ZW9mKCpidWYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJZ290byBvdXRfcmV0dXJuOworCisJLyogaW5pdGlhbGl6ZSBpbnRlcm5hbCBmaWVsZHMgKi8KKwlJTklUX0xJU1RfSEVBRCgmYnVmLT5lbnRyeSk7CisJYnVmLT5zaXplID0gYnl0ZXM7CisKKwkvKiBhbGxvY2F0ZSB0aGUgdmlkZW9idWYgKi8KKwl2aWRlb2J1Zl9kbWFfaW5pdCgmYnVmLT52Yik7CisJcmV0ID0gdmlkZW9idWZfZG1hX2luaXRfa2VybmVsKCZidWYtPnZiLCBETUFfRlJPTV9ERVZJQ0UsIG5yX3BhZ2VzKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9mcmVlX2J1ZjsKKworCXJldHVybiBidWY7CisKK291dF9mcmVlX2J1ZjoKKwlrZnJlZShidWYpOworb3V0X3JldHVybjoKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBkYXRhX2ZyZWVfYnVmZmVycygpIC0gZnJlZSBhbGwgYWxsb2NhdGVkIGJ1ZmZlcnMKKyAqIEBwcml2OiB0aGUgZHJpdmVyJ3MgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZQorICoKKyAqIEZyZWUgYWxsIGJ1ZmZlcnMgYWxsb2NhdGVkIGJ5IHRoZSBkcml2ZXIgKGV4Y2VwdCB0aG9zZSBjdXJyZW50bHkgaW4gdGhlCisgKiBwcm9jZXNzIG9mIGJlaW5nIHJlYWQgYnkgdXNlcnNwYWNlKS4KKyAqCisgKiBMT0NLSU5HOiBtdXN0IGhvbGQgZGV2LT5tdXRleAorICogQ09OVEVYVDogdXNlcgorICovCitzdGF0aWMgdm9pZCBkYXRhX2ZyZWVfYnVmZmVycyhzdHJ1Y3QgZnBnYV9kZXZpY2UgKnByaXYpCit7CisJc3RydWN0IGRhdGFfYnVmICpidWYsICp0bXA7CisKKwkvKiB0aGUgZGV2aWNlIHNob3VsZCBiZSBzdG9wcGVkLCBubyBETUEgaW4gcHJvZ3Jlc3MgKi8KKwlCVUdfT04ocHJpdi0+aW5mbGlnaHQgIT0gTlVMTCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYnVmLCB0bXAsICZwcml2LT5mcmVlLCBlbnRyeSkgeworCQlsaXN0X2RlbF9pbml0KCZidWYtPmVudHJ5KTsKKwkJdmlkZW9idWZfZG1hX3VubWFwKHByaXYtPmRldiwgJmJ1Zi0+dmIpOworCQlkYXRhX2ZyZWVfYnVmZmVyKGJ1Zik7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJ1ZiwgdG1wLCAmcHJpdi0+dXNlZCwgZW50cnkpIHsKKwkJbGlzdF9kZWxfaW5pdCgmYnVmLT5lbnRyeSk7CisJCXZpZGVvYnVmX2RtYV91bm1hcChwcml2LT5kZXYsICZidWYtPnZiKTsKKwkJZGF0YV9mcmVlX2J1ZmZlcihidWYpOworCX0KKworCXByaXYtPm51bV9idWZmZXJzID0gMDsKKwlwcml2LT5idWZzaXplID0gMDsKK30KKworLyoqCisgKiBkYXRhX2FsbG9jX2J1ZmZlcnMoKSAtIGFsbG9jYXRlIDEgc2Vjb25kcyB3b3J0aCBvZiBkYXRhIGJ1ZmZlcnMKKyAqIEBwcml2OiB0aGUgZHJpdmVyJ3MgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZQorICoKKyAqIEFsbG9jYXRlIGVub3VnaCBidWZmZXJzIGZvciBhIHdob2xlIHNlY29uZCB3b3J0aCBvZiBkYXRhCisgKgorICogVGhpcyByb3V0aW5lIHdpbGwgYXR0ZW1wdCB0byBkZWdyYWRlIG5pY2VseSBieSBzdWNjZWVkaW5nIGV2ZW4gaWYgYSBmdWxsCisgKiBzZWNvbmQgd29ydGggb2YgZGF0YSBidWZmZXJzIGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQsIGFzIGxvbmcgYXMgYSBtaW5pbXVtCisgKiBudW1iZXIgd2VyZSBhbGxvY2F0ZWQuIEluIHRoaXMgY2FzZSwgaXQgd2lsbCBwcmludCBhIG1lc3NhZ2UgdG8gdGhlIGtlcm5lbAorICogbG9nLgorICoKKyAqIFRoZSBkZXZpY2UgbXVzdCBub3QgYmUgbW9kaWZ5aW5nIGFueSBsaXN0cyB3aGVuIHRoaXMgaXMgY2FsbGVkLgorICoKKyAqIENPTlRFWFQ6IHVzZXIKKyAqIExPQ0tJTkc6IG11c3QgaG9sZCBkZXYtPm11dGV4CisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FUlJOTyBvdGhlcndpc2UKKyAqLworc3RhdGljIGludCBkYXRhX2FsbG9jX2J1ZmZlcnMoc3RydWN0IGZwZ2FfZGV2aWNlICpwcml2KQoreworCXN0cnVjdCBkYXRhX2J1ZiAqYnVmOworCWludCBpLCByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0RBVEFfQlVGUzsgaSsrKSB7CisKKwkJLyogYWxsb2NhdGUgYSBidWZmZXIgKi8KKwkJYnVmID0gZGF0YV9hbGxvY19idWZmZXIocHJpdi0+YnVmc2l6ZSk7CisJCWlmICghYnVmKQorCQkJYnJlYWs7CisKKwkJLyogbWFwIGl0IGZvciBETUEgKi8KKwkJcmV0ID0gdmlkZW9idWZfZG1hX21hcChwcml2LT5kZXYsICZidWYtPnZiKTsKKwkJaWYgKHJldCkgeworCQkJZGF0YV9mcmVlX2J1ZmZlcihidWYpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBhZGQgaXQgdG8gdGhlIGxpc3Qgb2YgZnJlZSBidWZmZXJzICovCisJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+ZW50cnksICZwcml2LT5mcmVlKTsKKwkJcHJpdi0+bnVtX2J1ZmZlcnMrKzsKKwl9CisKKwkvKiBNYWtlIHN1cmUgd2UgYWxsb2NhdGVkIHRoZSBtaW5pbXVtIHJlcXVpcmVkIG51bWJlciBvZiBidWZmZXJzICovCisJaWYgKHByaXYtPm51bV9idWZmZXJzIDwgTUlOX0RBVEFfQlVGUykgeworCQlkZXZfZXJyKHByaXYtPmRldiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBlbm91Z2ggZGF0YSBidWZmZXJzXG4iKTsKKwkJZGF0YV9mcmVlX2J1ZmZlcnMocHJpdik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIFdhcm4gaWYgd2UgYXJlIHJ1bm5pbmcgaW4gYSBkZWdyYWRlZCBzdGF0ZSwgYnV0IGRvIG5vdCBmYWlsICovCisJaWYgKHByaXYtPm51bV9idWZmZXJzIDwgTUFYX0RBVEFfQlVGUykgeworCQlkZXZfd2Fybihwcml2LT5kZXYsCisJCQkgIlVuYWJsZSB0byBhbGxvY2F0ZSAlZCBidWZmZXJzLCB1c2luZyAlZCBidWZmZXJzIGluc3RlYWRcbiIsCisJCQkgTUFYX0RBVEFfQlVGUywgaSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBETUEgT3BlcmF0aW9ucyBIZWxwZXJzCisgKi8KKworLyoqCisgKiBmcGdhX3N0YXJ0X2FkZHIoKSAtIGdldCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBhIERBVEEtRlBHQQorICogQHByaXY6IHRoZSBkcml2ZXIncyBwcml2YXRlIGRhdGEgc3RydWN0dXJlCisgKiBAZnBnYTogdGhlIERBVEEtRlBHQSBudW1iZXIgKHplcm8gYmFzZWQpCisgKi8KK3N0YXRpYyBkbWFfYWRkcl90IGZwZ2Ffc3RhcnRfYWRkcihzdHJ1Y3QgZnBnYV9kZXZpY2UgKnByaXYsIHVuc2lnbmVkIGludCBmcGdhKQoreworCXJldHVybiBwcml2LT5waHlzX2FkZHIgKyAweDQwMDAwMCArICgweDgwMDAwICogZnBnYSk7Cit9CisKKy8qKgorICogZnBnYV9ibG9ja19hZGRyKCkgLSBnZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgYSBjb3JyZWxhdGlvbiBkYXRhIGJsb2NrCisgKiBAcHJpdjogdGhlIGRyaXZlcidzIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUKKyAqIEBmcGdhOiB0aGUgREFUQS1GUEdBIG51bWJlciAoemVybyBiYXNlZCkKKyAqIEBibGtudW06IHRoZSBjb3JyZWxhdGlvbiBibG9jayBudW1iZXIgKHplcm8gYmFzZWQpCisgKi8KK3N0YXRpYyBkbWFfYWRkcl90IGZwZ2FfYmxvY2tfYWRkcihzdHJ1Y3QgZnBnYV9kZXZpY2UgKnByaXYsIHVuc2lnbmVkIGludCBmcGdhLAorCQkJCSAgdW5zaWduZWQgaW50IGJsa251bSkKK3sKKwlyZXR1cm4gZnBnYV9zdGFydF9hZGRyKHByaXYsIGZwZ2EpICsgKDB4MTAwMDAgKiAoMSArIGJsa251bSkpOworfQorCisjZGVmaW5lIFJFR19CTE9DS19TSVpFCSgzMiAqIDQpCisKKy8qKgorICogZGF0YV9zZXR1cF9jb3JsX3RhYmxlKCkgLSBjcmVhdGUgdGhlIHNjYXR0ZXJsaXN0IGZvciBjb3JyZWxhdGlvbiBkdW1wcworICogQHByaXY6IHRoZSBkcml2ZXIncyBwcml2YXRlIGRhdGEgc3RydWN0dXJlCisgKgorICogQ3JlYXRlIHRoZSBzY2F0dGVybGlzdCBmb3IgdHJhbnNmZXJyaW5nIGEgY29ycmVsYXRpb24gZHVtcCBmcm9tIHRoZQorICogREFUQSBGUEdBcy4gVGhpcyBzdHJ1Y3R1cmUgd2lsbCBiZSByZXVzZWQgZm9yIGVhY2ggYnVmZmVyIHRoYW4gbmVlZHMKKyAqIHRvIGJlIGZpbGxlZCB3aXRoIGNvcnJlbGF0aW9uIGRhdGEuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FUlJOTyBvdGhlcndpc2UKKyAqLworc3RhdGljIGludCBkYXRhX3NldHVwX2NvcmxfdGFibGUoc3RydWN0IGZwZ2FfZGV2aWNlICpwcml2KQoreworCXN0cnVjdCBzZ190YWJsZSAqdGFibGUgPSAmcHJpdi0+Y29ybF90YWJsZTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXN0cnVjdCBmcGdhX2luZm8gKmluZm87CisJaW50IGksIGosIHJldDsKKworCS8qIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgbmVlZGVkICovCisJcHJpdi0+Y29ybF9uZW50cyA9ICgxICsgTlVNX0ZQR0EpICogUkVHX0JMT0NLX1NJWkU7CisJZm9yIChpID0gMDsgaSA8IE5VTV9GUEdBOyBpKyspCisJCXByaXYtPmNvcmxfbmVudHMgKz0gcHJpdi0+aW5mb1tpXS5udW1fbGFnX3JhbTsKKworCS8qIEFsbG9jYXRlIHRoZSBzY2F0dGVybGlzdCB0YWJsZSAqLworCXJldCA9IHNnX2FsbG9jX3RhYmxlKHRhYmxlLCBwcml2LT5jb3JsX25lbnRzLCBHRlBfS0VSTkVMKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAidW5hYmxlIHRvIGFsbG9jYXRlIERNQSB0YWJsZVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogQWRkIHRoZSBEQVRBIEZQR0EgcmVnaXN0ZXJzIHRvIHRoZSBzY2F0dGVybGlzdCAqLworCXNnID0gdGFibGUtPnNnbDsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZQR0E7IGkrKykgeworCQlzZ19kbWFfYWRkcmVzcyhzZykgPSBmcGdhX3N0YXJ0X2FkZHIocHJpdiwgaSk7CisJCXNnX2RtYV9sZW4oc2cpID0gUkVHX0JMT0NLX1NJWkU7CisJCXNnID0gc2dfbmV4dChzZyk7CisJfQorCisJLyogQWRkIHRoZSBTWVMtRlBHQSByZWdpc3RlcnMgdG8gdGhlIHNjYXR0ZXJsaXN0ICovCisJc2dfZG1hX2FkZHJlc3Moc2cpID0gU1lTX0ZQR0FfQkxPQ0s7CisJc2dfZG1hX2xlbihzZykgPSBSRUdfQkxPQ0tfU0laRTsKKwlzZyA9IHNnX25leHQoc2cpOworCisJLyogQWRkIHRoZSBGUEdBIGNvcnJlbGF0aW9uIGRhdGEgYmxvY2tzIHRvIHRoZSBzY2F0dGVybGlzdCAqLworCWZvciAoaSA9IDA7IGkgPCBOVU1fRlBHQTsgaSsrKSB7CisJCWluZm8gPSAmcHJpdi0+aW5mb1tpXTsKKwkJZm9yIChqID0gMDsgaiA8IGluZm8tPm51bV9sYWdfcmFtOyBqKyspIHsKKwkJCXNnX2RtYV9hZGRyZXNzKHNnKSA9IGZwZ2FfYmxvY2tfYWRkcihwcml2LCBpLCBqKTsKKwkJCXNnX2RtYV9sZW4oc2cpID0gaW5mby0+YmxrX3NpemU7CisJCQlzZyA9IHNnX25leHQoc2cpOworCQl9CisJfQorCisJLyoKKwkgKiBBbGwgcGh5c2ljYWwgYWRkcmVzc2VzIGFuZCBsZW5ndGhzIGFyZSBwcmVzZW50IGluIHRoZSBzdHJ1Y3R1cmUKKwkgKiBub3cuIEl0IGNhbiBiZSByZXVzZWQgZm9yIGV2ZXJ5IEZQR0EgREFUQSBpbnRlcnJ1cHQKKwkgKi8KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEZQR0EgUmVnaXN0ZXIgQWNjZXNzIEhlbHBlcnMKKyAqLworCitzdGF0aWMgdm9pZCBmcGdhX3dyaXRlX3JlZyhzdHJ1Y3QgZnBnYV9kZXZpY2UgKnByaXYsIHVuc2lnbmVkIGludCBmcGdhLAorCQkJICAgdW5zaWduZWQgaW50IHJlZywgdTMyIHZhbCkKK3sKKwljb25zdCBpbnQgZnBnYV9zdGFydCA9IERBVEFfRlBHQV9TVEFSVCArIChmcGdhICogREFUQV9GUEdBX1NJWkUpOworCWlvd3JpdGUzMmJlKHZhbCwgcHJpdi0+cmVncyArIGZwZ2Ffc3RhcnQgKyByZWcpOworfQorCitzdGF0aWMgdTMyIGZwZ2FfcmVhZF9yZWcoc3RydWN0IGZwZ2FfZGV2aWNlICpwcml2LCB1bnNpZ25lZCBpbnQgZnBnYSwKKwkJCSB1bnNpZ25lZCBpbnQgcmVnKQoreworCWNvbnN0IGludCBmcGdhX3N0YXJ0ID0gREFUQV9GUEdBX1NUQVJUICsgKGZwZ2EgKiBEQVRBX0ZQR0FfU0laRSk7CisJcmV0dXJuIGlvcmVhZDMyYmUocHJpdi0+cmVncyArIGZwZ2Ffc3RhcnQgKyByZWcpOworfQorCisvKioKKyAqIGRhdGFfY2FsY3VsYXRlX2J1ZnNpemUoKSAtIGNhbGN1bGF0ZSB0aGUgZGF0YSBidWZmZXIgc2l6ZSByZXF1aXJlZAorICogQHByaXY6IHRoZSBkcml2ZXIncyBwcml2YXRlIGRhdGEgc3RydWN0dXJlCisgKgorICogQ2FsY3VsYXRlIHRoZSB0b3RhbCBidWZmZXIgc2l6ZSBuZWVkZWQgdG8gaG9sZCBhIHNpbmdsZSBibG9jaworICogb2YgY29ycmVsYXRpb24gZGF0YQorICoKKyAqIENPTlRFWFQ6IHVzZXIKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVSUk5PIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IGRhdGFfY2FsY3VsYXRlX2J1ZnNpemUoc3RydWN0IGZwZ2FfZGV2aWNlICpwcml2KQoreworCXUzMiBudW1fY29ybCwgbnVtX2xhZ3MsIG51bV9tZXRhLCBudW1fcWNudCwgbnVtX3BhY2s7CisJdTMyIGNvbmYxLCBjb25mMiwgdmVyc2lvbjsKKwl1MzIgbnVtX2xhZ19yYW0sIGJsa19zaXplOworCWludCBpOworCisJLyogRWFjaCBidWZmZXIgc3RhcnRzIHdpdGggdGhlIDUgRlBHQSByZWdpc3RlciBhcmVhcyAqLworCXByaXYtPmJ1ZnNpemUgPSAoMSArIE5VTV9GUEdBKSAqIFJFR19CTE9DS19TSVpFOworCisJLyogUmVhZCBhbmQgc3RvcmUgdGhlIGNvbmZpZ3VyYXRpb24gZGF0YSBmb3IgZWFjaCBGUEdBICovCisJZm9yIChpID0gMDsgaSA8IE5VTV9GUEdBOyBpKyspIHsKKwkJdmVyc2lvbiA9IGZwZ2FfcmVhZF9yZWcocHJpdiwgaSwgTU1BUF9SRUdfVkVSU0lPTik7CisJCWNvbmYxID0gZnBnYV9yZWFkX3JlZyhwcml2LCBpLCBNTUFQX1JFR19DT1JMX0NPTkYxKTsKKwkJY29uZjIgPSBmcGdhX3JlYWRfcmVnKHByaXYsIGksIE1NQVBfUkVHX0NPUkxfQ09ORjIpOworCisJCS8qIG1pbm9yIHZlcnNpb24gMiBhbmQgbGF0ZXIgKi8KKwkJaWYgKCh2ZXJzaW9uICYgMHgwMDAwMDBGRikgPj0gMikgeworCQkJbnVtX2NvcmwgPSAoY29uZjEgJiAweDAwMDAwMEYwKSA+PiA0OworCQkJbnVtX3BhY2sgPSAoY29uZjEgJiAweDAwMDAwRjAwKSA+PiA4OworCQkJbnVtX2xhZ3MgPSAoY29uZjEgJiAweDAwRkZGMDAwKSA+PiAxMjsKKwkJCW51bV9tZXRhID0gKGNvbmYxICYgMHg3RjAwMDAwMCkgPj4gMjQ7CisJCQludW1fcWNudCA9IChjb25mMiAmIDB4MDAwMDBGRkYpID4+IDA7CisJCX0gZWxzZSB7CisJCQludW1fY29ybCA9IChjb25mMSAmIDB4MDAwMDAwRjApID4+IDQ7CisJCQludW1fcGFjayA9IDE7IC8qIGltcGxpZWQgKi8KKwkJCW51bV9sYWdzID0gKGNvbmYxICYgMHgwMDBGRkYwMCkgPj4gODsKKwkJCW51bV9tZXRhID0gKGNvbmYxICYgMHg3RkYwMDAwMCkgPj4gMjA7CisJCQludW1fcWNudCA9IChjb25mMiAmIDB4MDAwMDBGRkYpID4+IDA7CisJCX0KKworCQludW1fbGFnX3JhbSA9IChudW1fY29ybCArIG51bV9wYWNrIC0gMSkgLyBudW1fcGFjazsKKwkJYmxrX3NpemUgPSAoKG51bV9wYWNrICogbnVtX2xhZ3MpICsgbnVtX21ldGEgKyBudW1fcWNudCkgKiA4OworCisJCXByaXYtPmluZm9baV0ubnVtX2xhZ19yYW0gPSBudW1fbGFnX3JhbTsKKwkJcHJpdi0+aW5mb1tpXS5ibGtfc2l6ZSA9IGJsa19zaXplOworCQlwcml2LT5idWZzaXplICs9IG51bV9sYWdfcmFtICogYmxrX3NpemU7CisKKwkJZGV2X2RiZyhwcml2LT5kZXYsICJGUEdBICVkIE5VTV9DT1JMOiAlZFxuIiwgaSwgbnVtX2NvcmwpOworCQlkZXZfZGJnKHByaXYtPmRldiwgIkZQR0EgJWQgTlVNX1BBQ0s6ICVkXG4iLCBpLCBudW1fcGFjayk7CisJCWRldl9kYmcocHJpdi0+ZGV2LCAiRlBHQSAlZCBOVU1fTEFHUzogJWRcbiIsIGksIG51bV9sYWdzKTsKKwkJZGV2X2RiZyhwcml2LT5kZXYsICJGUEdBICVkIE5VTV9NRVRBOiAlZFxuIiwgaSwgbnVtX21ldGEpOworCQlkZXZfZGJnKHByaXYtPmRldiwgIkZQR0EgJWQgTlVNX1FDTlQ6ICVkXG4iLCBpLCBudW1fcWNudCk7CisJCWRldl9kYmcocHJpdi0+ZGV2LCAiRlBHQSAlZCBCTEtfU0laRTogJWRcbiIsIGksIGJsa19zaXplKTsKKwl9CisKKwlkZXZfZGJnKHByaXYtPmRldiwgIlRPVEFMIEJVRkZFUiBTSVpFOiAlenUgYnl0ZXNcbiIsIHByaXYtPmJ1ZnNpemUpOworCXJldHVybiAwOworfQorCisvKgorICogSW50ZXJydXB0IEhhbmRsaW5nCisgKi8KKworLyoqCisgKiBkYXRhX2Rpc2FibGVfaW50ZXJydXB0cygpIC0gc3RvcCB0aGUgZGV2aWNlIGZyb20gZ2VuZXJhdGluZyBpbnRlcnJ1cHRzCisgKiBAcHJpdjogdGhlIGRyaXZlcidzIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUKKyAqCisgKiBIaWRlIGludGVycnVwdHMgYnkgc3dpdGNoaW5nIHRvIEdQSU8gaW50ZXJydXB0IHNvdXJjZQorICoKKyAqIExPQ0tJTkc6IG11c3QgaG9sZCBkZXYtPmxvY2sKKyAqLworc3RhdGljIHZvaWQgZGF0YV9kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IGZwZ2FfZGV2aWNlICpwcml2KQoreworCS8qIGhpZGUgdGhlIGludGVycnVwdCBieSBzd2l0Y2hpbmcgdGhlIElSUSBkcml2ZXIgdG8gR1BJTyAqLworCWlvd3JpdGUzMmJlKDB4MkYsIHByaXYtPnJlZ3MgKyBTWVNfSVJRX1NPVVJDRV9DVEwpOworfQorCisvKioKKyAqIGRhdGFfZW5hYmxlX2ludGVycnVwdHMoKSAtIGFsbG93IHRoZSBkZXZpY2UgdG8gZ2VuZXJhdGUgaW50ZXJydXB0cworICogQHByaXY6IHRoZSBkcml2ZXIncyBwcml2YXRlIGRhdGEgc3RydWN0dXJlCisgKgorICogVW5oaWRlIGludGVycnVwdHMgYnkgc3dpdGNoaW5nIHRvIHRoZSBGUEdBIGludGVycnVwdCBzb3VyY2UuIEF0IHRoZQorICogc2FtZSB0aW1lLCBjbGVhciB0aGUgREFUQS1GUEdBIHN0YXR1cyByZWdpc3RlcnMuCisgKgorICogTE9DS0lORzogbXVzdCBob2xkIGRldi0+bG9jaworICovCitzdGF0aWMgdm9pZCBkYXRhX2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBmcGdhX2RldmljZSAqcHJpdikKK3sKKwkvKiBjbGVhciB0aGUgYWN0dWFsIEZQR0EgY29ybF9kb25lIGludGVycnVwdCAqLworCWZwZ2Ffd3JpdGVfcmVnKHByaXYsIDAsIE1NQVBfUkVHX1NUQVRVUywgMHgwKTsKKwlmcGdhX3dyaXRlX3JlZyhwcml2LCAxLCBNTUFQX1JFR19TVEFUVVMsIDB4MCk7CisJZnBnYV93cml0ZV9yZWcocHJpdiwgMiwgTU1BUF9SRUdfU1RBVFVTLCAweDApOworCWZwZ2Ffd3JpdGVfcmVnKHByaXYsIDMsIE1NQVBfUkVHX1NUQVRVUywgMHgwKTsKKworCS8qIGZsdXNoIHRoZSB3cml0ZXMgKi8KKwlmcGdhX3JlYWRfcmVnKHByaXYsIDAsIE1NQVBfUkVHX1NUQVRVUyk7CisKKwkvKiBzd2l0Y2ggYmFjayB0byB0aGUgZXh0ZXJuYWwgaW50ZXJydXB0IHNvdXJjZSAqLworCWlvd3JpdGUzMmJlKDB4M0YsIHByaXYtPnJlZ3MgKyBTWVNfSVJRX1NPVVJDRV9DVEwpOworfQorCisvKioKKyAqIGRhdGFfZG1hX2NiKCkgLSBETUFFbmdpbmUgY2FsbGJhY2sgZm9yIERNQSBjb21wbGV0aW9uCisgKiBAZGF0YTogdGhlIGRyaXZlcidzIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUKKyAqCisgKiBDb21wbGV0ZSBhIERNQSB0cmFuc2ZlciBmcm9tIHRoZSBEQVRBLUZQR0EncworICoKKyAqIFRoaXMgaXMgY2FsbGVkIHZpYSB0aGUgRE1BIGNhbGxiYWNrIG1lY2hhbmlzbSwgYW5kIHdpbGwgaGFuZGxlIG1vdmluZyB0aGUKKyAqIGNvbXBsZXRlZCBETUEgdHJhbnNhY3Rpb24gdG8gdGhlIHVzZWQgbGlzdCwgYW5kIHRoZW4gd2FrZSBhbnkgcHJvY2Vzc2VzCisgKiB3YWl0aW5nIGZvciBuZXcgZGF0YQorICoKKyAqIENPTlRFWFQ6IGFueSwgc29mdGlycSBleHBlY3RlZAorICovCitzdGF0aWMgdm9pZCBkYXRhX2RtYV9jYih2b2lkICpkYXRhKQoreworCXN0cnVjdCBmcGdhX2RldmljZSAqcHJpdiA9IGRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwkvKiBJZiB0aGVyZSBpcyBubyBpbmZsaWdodCBidWZmZXIsIHdlJ3ZlIGdvdCBhIGJ1ZyAqLworCUJVR19PTihwcml2LT5pbmZsaWdodCA9PSBOVUxMKTsKKworCS8qIE1vdmUgdGhlIGluZmxpZ2h0IGJ1ZmZlciBvbnRvIHRoZSB1c2VkIGxpc3QgKi8KKwlsaXN0X21vdmVfdGFpbCgmcHJpdi0+aW5mbGlnaHQtPmVudHJ5LCAmcHJpdi0+dXNlZCk7CisJcHJpdi0+aW5mbGlnaHQgPSBOVUxMOworCisJLyogY2xlYXIgdGhlIEZQR0Egc3RhdHVzIGFuZCByZS1lbmFibGUgaW50ZXJydXB0cyAqLworCWRhdGFfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIFdlJ3ZlIGNoYW5nZWQgYm90aCB0aGUgaW5mbGlnaHQgYW5kIHVzZWQgbGlzdHMsIHNvIHdlIG5lZWQKKwkgKiB0byB3YWtlIHVwIGFueSBwcm9jZXNzZXMgdGhhdCBhcmUgYmxvY2tpbmcgZm9yIHRob3NlIGV2ZW50cworCSAqLworCXdha2VfdXAoJnByaXYtPndhaXQpOworfQorCisvKioKKyAqIGRhdGFfc3VibWl0X2RtYSgpIC0gcHJlcGFyZSBhbmQgc3VibWl0IHRoZSByZXF1aXJlZCBETUEgdG8gZmlsbCBhIGJ1ZmZlcgorICogQHByaXY6IHRoZSBkcml2ZXIncyBwcml2YXRlIGRhdGEgc3RydWN0dXJlCisgKiBAYnVmOiB0aGUgZGF0YSBidWZmZXIKKyAqCisgKiBQcmVwYXJlIGFuZCBzdWJtaXQgdGhlIG5lY2Vzc2FyeSBETUEgdHJhbnNhY3Rpb25zIHRvIGZpbGwgYSBjb3JyZWxhdGlvbgorICogZGF0YSBidWZmZXIuCisgKgorICogTE9DS0lORzogbXVzdCBob2xkIGRldi0+bG9jaworICogQ09OVEVYVDogaGFyZGlycSBvbmx5CisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FUlJOTyBvdGhlcndpc2UKKyAqLworc3RhdGljIGludCBkYXRhX3N1Ym1pdF9kbWEoc3RydWN0IGZwZ2FfZGV2aWNlICpwcml2LCBzdHJ1Y3QgZGF0YV9idWYgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdF9zZywgKnNyY19zZzsKKwl1bnNpZ25lZCBpbnQgZHN0X25lbnRzLCBzcmNfbmVudHM7CisJc3RydWN0IGRtYV9jaGFuICpjaGFuID0gcHJpdi0+Y2hhbjsKKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4OworCWRtYV9jb29raWVfdCBjb29raWU7CisJZG1hX2FkZHJfdCBkc3QsIHNyYzsKKworCWRzdF9zZyA9IGJ1Zi0+dmIuc2dsaXN0OworCWRzdF9uZW50cyA9IGJ1Zi0+dmIuc2dsZW47CisKKwlzcmNfc2cgPSBwcml2LT5jb3JsX3RhYmxlLnNnbDsKKwlzcmNfbmVudHMgPSBwcml2LT5jb3JsX25lbnRzOworCisJLyoKKwkgKiBBbGwgYnVmZmVycyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgcmVhZHkgYW5kIG1hcHBlZAorCSAqIGZvciBETUEgYWxyZWFkeS4gVGhlcmVmb3JlLCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGV4Y2VwdAorCSAqIHN1Ym1pdCBpdCB0byB0aGUgRnJlZXNjYWxlIERNQSBFbmdpbmUgZm9yIHByb2Nlc3NpbmcKKwkgKi8KKworCS8qIHNldHVwIHRoZSBzY2F0dGVybGlzdCB0byBzY2F0dGVybGlzdCB0cmFuc2ZlciAqLworCXR4ID0gY2hhbi0+ZGV2aWNlLT5kZXZpY2VfcHJlcF9kbWFfc2coY2hhbiwKKwkJCQkJICAgICAgZHN0X3NnLCBkc3RfbmVudHMsCisJCQkJCSAgICAgIHNyY19zZywgc3JjX25lbnRzLAorCQkJCQkgICAgICAwKTsKKwlpZiAoIXR4KSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAidW5hYmxlIHRvIHByZXAgc2NhdHRlcmxpc3QgRE1BXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogc3VibWl0IHRoZSB0cmFuc2FjdGlvbiB0byB0aGUgRE1BIGNvbnRyb2xsZXIgKi8KKwljb29raWUgPSB0eC0+dHhfc3VibWl0KHR4KTsKKwlpZiAoZG1hX3N1Ym1pdF9lcnJvcihjb29raWUpKSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAidW5hYmxlIHRvIHN1Ym1pdCBzY2F0dGVybGlzdCBETUFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBQcmVwYXJlIHRoZSByZS1yZWFkIG9mIHRoZSBTWVMtRlBHQSBibG9jayAqLworCWRzdCA9IHNnX2RtYV9hZGRyZXNzKGRzdF9zZykgKyAoTlVNX0ZQR0EgKiBSRUdfQkxPQ0tfU0laRSk7CisJc3JjID0gU1lTX0ZQR0FfQkxPQ0s7CisJdHggPSBjaGFuLT5kZXZpY2UtPmRldmljZV9wcmVwX2RtYV9tZW1jcHkoY2hhbiwgZHN0LCBzcmMsCisJCQkJCQkgIFJFR19CTE9DS19TSVpFLAorCQkJCQkJICBETUFfUFJFUF9JTlRFUlJVUFQpOworCWlmICghdHgpIHsKKwkJZGV2X2Vycihwcml2LT5kZXYsICJ1bmFibGUgdG8gcHJlcCBTWVMtRlBHQSBETUFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBTZXR1cCB0aGUgY2FsbGJhY2sgKi8KKwl0eC0+Y2FsbGJhY2sgPSBkYXRhX2RtYV9jYjsKKwl0eC0+Y2FsbGJhY2tfcGFyYW0gPSBwcml2OworCisJLyogc3VibWl0IHRoZSB0cmFuc2FjdGlvbiB0byB0aGUgRE1BIGNvbnRyb2xsZXIgKi8KKwljb29raWUgPSB0eC0+dHhfc3VibWl0KHR4KTsKKwlpZiAoZG1hX3N1Ym1pdF9lcnJvcihjb29raWUpKSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAidW5hYmxlIHRvIHN1Ym1pdCBTWVMtRlBHQSBETUFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBDT1JMX0RPTkUJMHgxCisjZGVmaW5lIENPUkxfRVJSCTB4MgorCitzdGF0aWMgaXJxcmV0dXJuX3QgZGF0YV9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBmcGdhX2RldmljZSAqcHJpdiA9IGRldl9pZDsKKwlib29sIHN1Ym1pdHRlZCA9IGZhbHNlOworCXN0cnVjdCBkYXRhX2J1ZiAqYnVmOworCXUzMiBzdGF0dXM7CisJaW50IGk7CisKKwkvKiBkZXRlY3Qgc3B1cmlvdXMgaW50ZXJydXB0cyB2aWEgRlBHQSBzdGF0dXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXN0YXR1cyA9IGZwZ2FfcmVhZF9yZWcocHJpdiwgaSwgTU1BUF9SRUdfU1RBVFVTKTsKKwkJaWYgKCEoc3RhdHVzICYgKENPUkxfRE9ORSB8IENPUkxfRVJSKSkpIHsKKwkJCWRldl9lcnIocHJpdi0+ZGV2LCAic3B1cmlvdXMgaXJxIGRldGVjdGVkIChGUEdBKVxuIik7CisJCQlyZXR1cm4gSVJRX05PTkU7CisJCX0KKwl9CisKKwkvKiBkZXRlY3Qgc3B1cmlvdXMgaW50ZXJydXB0cyB2aWEgcmF3IElSUSBwaW4gcmVhZGJhY2sgKi8KKwlzdGF0dXMgPSBpb3JlYWQzMmJlKHByaXYtPnJlZ3MgKyBTWVNfSVJRX0lOUFVUX0RBVEEpOworCWlmIChzdGF0dXMgJiBJUlFfQ09STF9ET05FKSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAic3B1cmlvdXMgaXJxIGRldGVjdGVkIChJUlEpXG4iKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CisKKwkvKiBoaWRlIHRoZSBpbnRlcnJ1cHQgYnkgc3dpdGNoaW5nIHRoZSBJUlEgZHJpdmVyIHRvIEdQSU8gKi8KKwlkYXRhX2Rpc2FibGVfaW50ZXJydXB0cyhwcml2KTsKKworCS8qIElmIHRoZXJlIGFyZSBubyBmcmVlIGJ1ZmZlcnMsIGRyb3AgdGhpcyBkYXRhICovCisJaWYgKGxpc3RfZW1wdHkoJnByaXYtPmZyZWUpKSB7CisJCXByaXYtPm51bV9kcm9wcGVkKys7CisJCWdvdG8gb3V0OworCX0KKworCWJ1ZiA9IGxpc3RfZmlyc3RfZW50cnkoJnByaXYtPmZyZWUsIHN0cnVjdCBkYXRhX2J1ZiwgZW50cnkpOworCWxpc3RfZGVsX2luaXQoJmJ1Zi0+ZW50cnkpOworCUJVR19PTihidWYtPnNpemUgIT0gcHJpdi0+YnVmc2l6ZSk7CisKKwkvKiBTdWJtaXQgYSBETUEgdHJhbnNmZXIgdG8gZ2V0IHRoZSBjb3JyZWxhdGlvbiBkYXRhICovCisJaWYgKGRhdGFfc3VibWl0X2RtYShwcml2LCBidWYpKSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAiVW5hYmxlIHRvIHNldHVwIERNQSB0cmFuc2ZlclxuIik7CisJCWxpc3RfbW92ZV90YWlsKCZidWYtPmVudHJ5LCAmcHJpdi0+ZnJlZSk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIFNhdmUgdGhlIGJ1ZmZlciBmb3IgdGhlIERNQSBjYWxsYmFjayAqLworCXByaXYtPmluZmxpZ2h0ID0gYnVmOworCXN1Ym1pdHRlZCA9IHRydWU7CisKKwkvKiBTdGFydCB0aGUgRE1BIEVuZ2luZSAqLworCWRtYV9hc3luY19tZW1jcHlfaXNzdWVfcGVuZGluZyhwcml2LT5jaGFuKTsKKworb3V0OgorCS8qIElmIG5vIERNQSB3YXMgc3VibWl0dGVkLCByZS1lbmFibGUgaW50ZXJydXB0cyAqLworCWlmICghc3VibWl0dGVkKQorCQlkYXRhX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOworCisJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKyAqIFJlYWx0aW1lIERldmljZSBFbmFibGUgSGVscGVycworICovCisKKy8qKgorICogZGF0YV9kZXZpY2VfZW5hYmxlKCkgLSBlbmFibGUgdGhlIGRldmljZSBmb3IgYnVmZmVyZWQgZHVtcGluZworICogQHByaXY6IHRoZSBkcml2ZXIncyBwcml2YXRlIGRhdGEgc3RydWN0dXJlCisgKgorICogRW5hYmxlIHRoZSBkZXZpY2UgZm9yIGJ1ZmZlcmVkIGR1bXBpbmcuIEFsbG9jYXRlcyBidWZmZXJzIGFuZCBob29rcyB1cAorICogdGhlIGludGVycnVwdCBoYW5kbGVyLiBXaGVuIHRoaXMgZmluaXNoZXMsIGRhdGEgd2lsbCBjb21lIHBvdXJpbmcgaW4uCisgKgorICogTE9DS0lORzogbXVzdCBob2xkIGRldi0+bXV0ZXgKKyAqIENPTlRFWFQ6IHVzZXIgY29udGV4dCBvbmx5CisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FUlJOTyBvdGhlcndpc2UKKyAqLworc3RhdGljIGludCBkYXRhX2RldmljZV9lbmFibGUoc3RydWN0IGZwZ2FfZGV2aWNlICpwcml2KQoreworCXUzMiB2YWw7CisJaW50IHJldDsKKworCS8qIG11bHRpcGxlIGVuYWJsZXMgYXJlIHNhZmU6IHRoZXkgZG8gbm90aGluZyAqLworCWlmIChwcml2LT5lbmFibGVkKQorCQlyZXR1cm4gMDsKKworCS8qIGNoZWNrIHRoYXQgdGhlIEZQR0FzIGFyZSBwcm9ncmFtbWVkICovCisJdmFsID0gaW9yZWFkMzJiZShwcml2LT5yZWdzICsgU1lTX0ZQR0FfQ09ORklHX1NUQVRVUyk7CisJaWYgKCEodmFsICYgKDEgPDwgMTgpKSkgeworCQlkZXZfZXJyKHByaXYtPmRldiwgIkRBVEEtRlBHQXMgYXJlIG5vdCBlbmFibGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9EQVRBOworCX0KKworCS8qIHJlYWQgdGhlIEZQR0FzIHRvIGNhbGN1bGF0ZSB0aGUgYnVmZmVyIHNpemUgKi8KKwlyZXQgPSBkYXRhX2NhbGN1bGF0ZV9idWZzaXplKHByaXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihwcml2LT5kZXYsICJ1bmFibGUgdG8gY2FsY3VsYXRlIGJ1ZmZlciBzaXplXG4iKTsKKwkJZ290byBvdXRfZXJyb3I7CisJfQorCisJLyogYWxsb2NhdGUgdGhlIGNvcnJlbGF0aW9uIGRhdGEgYnVmZmVycyAqLworCXJldCA9IGRhdGFfYWxsb2NfYnVmZmVycyhwcml2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAidW5hYmxlIHRvIGFsbG9jYXRlIGJ1ZmZlcnNcbiIpOworCQlnb3RvIG91dF9lcnJvcjsKKwl9CisKKwkvKiBzZXR1cCB0aGUgc291cmNlIHNjYXR0ZXJsaXN0IGZvciBkdW1waW5nIGNvcnJlbGF0aW9uIGRhdGEgKi8KKwlyZXQgPSBkYXRhX3NldHVwX2NvcmxfdGFibGUocHJpdik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHByaXYtPmRldiwgInVuYWJsZSB0byBzZXR1cCBjb3JyZWxhdGlvbiBETUEgdGFibGVcbiIpOworCQlnb3RvIG91dF9lcnJvcjsKKwl9CisKKwkvKiBob29rdXAgdGhlIGlycSBoYW5kbGVyICovCisJcmV0ID0gcmVxdWVzdF9pcnEocHJpdi0+aXJxLCBkYXRhX2lycSwgSVJRRl9TSEFSRUQsIGRydl9uYW1lLCBwcml2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAidW5hYmxlIHRvIHJlcXVlc3QgSVJRIGhhbmRsZXJcbiIpOworCQlnb3RvIG91dF9lcnJvcjsKKwl9CisKKwkvKiBzd2l0Y2ggdG8gdGhlIGV4dGVybmFsIEZQR0EgSVJRIGxpbmUgKi8KKwlkYXRhX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOworCisJLyogc3VjY2Vzcywgd2UncmUgZW5hYmxlZCAqLworCXByaXYtPmVuYWJsZWQgPSB0cnVlOworCXJldHVybiAwOworCitvdXRfZXJyb3I6CisJc2dfZnJlZV90YWJsZSgmcHJpdi0+Y29ybF90YWJsZSk7CisJcHJpdi0+Y29ybF9uZW50cyA9IDA7CisKKwlkYXRhX2ZyZWVfYnVmZmVycyhwcml2KTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGRhdGFfZGV2aWNlX2Rpc2FibGUoKSAtIGRpc2FibGUgdGhlIGRldmljZSBmb3IgYnVmZmVyZWQgZHVtcGluZworICogQHByaXY6IHRoZSBkcml2ZXIncyBwcml2YXRlIGRhdGEgc3RydWN0dXJlCisgKgorICogRGlzYWJsZSB0aGUgZGV2aWNlIGZvciBidWZmZXJlZCBkdW1waW5nLiBTdG9wcyBuZXcgRE1BIHRyYW5zYWN0aW9ucyBmcm9tCisgKiBiZWluZyBnZW5lcmF0ZWQsIHdhaXRzIGZvciBhbGwgb3V0c3RhbmRpbmcgRE1BIHRvIGNvbXBsZXRlLCBhbmQgdGhlbiBmcmVlcworICogYWxsIGJ1ZmZlcnMuCisgKgorICogTE9DS0lORzogbXVzdCBob2xkIGRldi0+bXV0ZXgKKyAqIENPTlRFWFQ6IHVzZXIgb25seQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRVJSTk8gb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbnQgZGF0YV9kZXZpY2VfZGlzYWJsZShzdHJ1Y3QgZnBnYV9kZXZpY2UgKnByaXYpCit7CisJaW50IHJldDsKKworCS8qIGFsbG93IG11bHRpcGxlIGRpc2FibGUgKi8KKwlpZiAoIXByaXYtPmVuYWJsZWQpCisJCXJldHVybiAwOworCisJLyogc3dpdGNoIHRvIHRoZSBpbnRlcm5hbCBHUElPIElSUSBsaW5lICovCisJZGF0YV9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CisKKwkvKiB1bmhvb2sgdGhlIGlycSBoYW5kbGVyICovCisJZnJlZV9pcnEocHJpdi0+aXJxLCBwcml2KTsKKworCS8qCisJICogd2FpdCBmb3IgYWxsIG91dHN0YW5kaW5nIERNQSB0byBjb21wbGV0ZQorCSAqCisJICogRGV2aWNlIGludGVycnVwdHMgYXJlIGRpc2FibGVkLCB0aGVyZWZvcmUgYW5vdGhlciBidWZmZXIgY2Fubm90CisJICogYmUgbWFya2VkIGluZmxpZ2h0LgorCSAqLworCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShwcml2LT53YWl0LCBwcml2LT5pbmZsaWdodCA9PSBOVUxMKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogZnJlZSB0aGUgY29ycmVsYXRpb24gdGFibGUgKi8KKwlzZ19mcmVlX3RhYmxlKCZwcml2LT5jb3JsX3RhYmxlKTsKKwlwcml2LT5jb3JsX25lbnRzID0gMDsKKworCS8qCisJICogV2UgYXJlIHRha2luZyB0aGUgc3BpbmxvY2sgbm90IHRvIHByb3RlY3QgcHJpdi0+ZW5hYmxlZCwgYnV0IGluc3RlYWQKKwkgKiB0byBtYWtlIHN1cmUgdGhhdCB0aGVyZSBhcmUgbm8gcmVhZGVycyBpbiB0aGUgcHJvY2VzcyBvZiBhbHRlcmluZworCSAqIHRoZSBmcmVlIG9yIHVzZWQgbGlzdHMgd2hpbGUgd2UgYXJlIHNldHRpbmcgdGhpcyBmbGFnLgorCSAqLworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOworCXByaXYtPmVuYWJsZWQgPSBmYWxzZTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOworCisJLyogZnJlZSBhbGwgYnVmZmVyczogdGhlIGZyZWUgYW5kIHVzZWQgbGlzdHMgYXJlIG5vdCBiZWluZyBjaGFuZ2VkICovCisJZGF0YV9mcmVlX2J1ZmZlcnMocHJpdik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBERUJVR0ZTIEludGVyZmFjZQorICovCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisKKy8qCisgKiBDb3VudCB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGdpdmVuIGxpc3QKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBsaXN0X251bV9lbnRyaWVzKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7CisJdW5zaWduZWQgaW50IHJldCA9IDA7CisKKwlsaXN0X2Zvcl9lYWNoKGVudHJ5LCBsaXN0KQorCQlyZXQrKzsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZGF0YV9kZWJ1Z19zaG93KHN0cnVjdCBzZXFfZmlsZSAqZiwgdm9pZCAqb2Zmc2V0KQoreworCXN0cnVjdCBmcGdhX2RldmljZSAqcHJpdiA9IGYtPnByaXZhdGU7CisJaW50IHJldDsKKworCS8qCisJICogTG9jayB0aGUgbXV0ZXggZmlyc3QsIHNvIHRoYXQgd2UgZ2V0IGFuIGFjY3VyYXRlIHZhbHVlIGZvciBlbmFibGUKKwkgKiBMb2NrIHRoZSBzcGlubG9jayBuZXh0LCB0byBnZXQgYWNjdXJhdGUgbGlzdCBjb3VudHMKKwkgKi8KKwlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnByaXYtPm11dGV4KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CisKKwlzZXFfcHJpbnRmKGYsICJlbmFibGVkOiAlZFxuIiwgcHJpdi0+ZW5hYmxlZCk7CisJc2VxX3ByaW50ZihmLCAiYnVmc2l6ZTogJWRcbiIsIHByaXYtPmJ1ZnNpemUpOworCXNlcV9wcmludGYoZiwgIm51bV9idWZmZXJzOiAlZFxuIiwgcHJpdi0+bnVtX2J1ZmZlcnMpOworCXNlcV9wcmludGYoZiwgIm51bV9mcmVlOiAlZFxuIiwgbGlzdF9udW1fZW50cmllcygmcHJpdi0+ZnJlZSkpOworCXNlcV9wcmludGYoZiwgImluZmxpZ2h0OiAlZFxuIiwgcHJpdi0+aW5mbGlnaHQgIT0gTlVMTCk7CisJc2VxX3ByaW50ZihmLCAibnVtX3VzZWQ6ICVkXG4iLCBsaXN0X251bV9lbnRyaWVzKCZwcml2LT51c2VkKSk7CisJc2VxX3ByaW50ZihmLCAibnVtX2Ryb3BwZWQ6ICVkXG4iLCBwcml2LT5udW1fZHJvcHBlZCk7CisKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhdGFfZGVidWdfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZGF0YV9kZWJ1Z19zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGF0YV9kZWJ1Z19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBkYXRhX2RlYnVnX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgZGF0YV9kZWJ1Z2ZzX2luaXQoc3RydWN0IGZwZ2FfZGV2aWNlICpwcml2KQoreworCXByaXYtPmRiZ19lbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoZHJ2X25hbWUsIFNfSVJVR08sIE5VTEwsIHByaXYsCisJCQkJCSAgICAgICZkYXRhX2RlYnVnX2ZvcHMpOworCWlmIChJU19FUlIocHJpdi0+ZGJnX2VudHJ5KSkKKwkJcmV0dXJuIFBUUl9FUlIocHJpdi0+ZGJnX2VudHJ5KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkYXRhX2RlYnVnZnNfZXhpdChzdHJ1Y3QgZnBnYV9kZXZpY2UgKnByaXYpCit7CisJZGVidWdmc19yZW1vdmUocHJpdi0+ZGJnX2VudHJ5KTsKK30KKworI2Vsc2UKKworc3RhdGljIGlubGluZSBpbnQgZGF0YV9kZWJ1Z2ZzX2luaXQoc3RydWN0IGZwZ2FfZGV2aWNlICpwcml2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGF0YV9kZWJ1Z2ZzX2V4aXQoc3RydWN0IGZwZ2FfZGV2aWNlICpwcml2KQoreworfQorCisjZW5kaWYJLyogQ09ORklHX0RFQlVHX0ZTICovCisKKy8qCisgKiBTWVNGUyBBdHRyaWJ1dGVzCisgKi8KKworc3RhdGljIHNzaXplX3QgZGF0YV9lbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBmcGdhX2RldmljZSAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV1XG4iLCBwcml2LT5lbmFibGVkKTsKK30KKworc3RhdGljIHNzaXplX3QgZGF0YV9lbl9zZXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBmcGdhX2RldmljZSAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgZW5hYmxlOworCWludCByZXQ7CisKKwlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDAsICZlbmFibGUpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihwcml2LT5kZXYsICJ1bmFibGUgdG8gcGFyc2UgZW5hYmxlIGlucHV0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZwcml2LT5tdXRleCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChlbmFibGUpCisJCXJldCA9IGRhdGFfZGV2aWNlX2VuYWJsZShwcml2KTsKKwllbHNlCisJCXJldCA9IGRhdGFfZGV2aWNlX2Rpc2FibGUocHJpdik7CisKKwlpZiAocmV0KSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAiZGV2aWNlICVzIGZhaWxlZFxuIiwKKwkJCWVuYWJsZSA/ICJlbmFibGUiIDogImRpc2FibGUiKTsKKwkJY291bnQgPSByZXQ7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoZW5hYmxlLCBTX0lXVVNSIHwgU19JUlVHTywgZGF0YV9lbl9zaG93LCBkYXRhX2VuX3NldCk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYXRhX3N5c2ZzX2F0dHJzW10gPSB7CisJJmRldl9hdHRyX2VuYWJsZS5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBydF9zeXNmc19hdHRyX2dyb3VwID0geworCS5hdHRycyA9IGRhdGFfc3lzZnNfYXR0cnMsCit9OworCisvKgorICogRlBHQSBSZWFsdGltZSBEYXRhIENoYXJhY3RlciBEZXZpY2UKKyAqLworCitzdGF0aWMgaW50IGRhdGFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwkvKgorCSAqIFRoZSBtaXNjZGV2aWNlIGxheWVyIHB1dHMgb3VyIHN0cnVjdCBtaXNjZGV2aWNlIGludG8gdGhlCisJICogZmlscC0+cHJpdmF0ZV9kYXRhIGZpZWxkLiBXZSB1c2UgdGhpcyB0byBmaW5kIG91ciBwcml2YXRlCisJICogZGF0YSBhbmQgdGhlbiBvdmVyd3JpdGUgaXQgd2l0aCBvdXIgb3duIHByaXZhdGUgc3RydWN0dXJlLgorCSAqLworCXN0cnVjdCBmcGdhX2RldmljZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihmaWxwLT5wcml2YXRlX2RhdGEsCisJCQkJCQlzdHJ1Y3QgZnBnYV9kZXZpY2UsIG1pc2NkZXYpOworCXN0cnVjdCBmcGdhX3JlYWRlciAqcmVhZGVyOworCWludCByZXQ7CisKKwkvKiBhbGxvY2F0ZSBwcml2YXRlIGRhdGEgKi8KKwlyZWFkZXIgPSBremFsbG9jKHNpemVvZigqcmVhZGVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZWFkZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJcmVhZGVyLT5wcml2ID0gcHJpdjsKKwlyZWFkZXItPmJ1ZiA9IE5VTEw7CisKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSByZWFkZXI7CisJcmV0ID0gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlscCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHByaXYtPmRldiwgIm5vbnNlZWthYmxlLW9wZW4gZmFpbGVkXG4iKTsKKwkJa2ZyZWUocmVhZGVyKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKgorCSAqIHN1Y2Nlc3MsIGluY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUKKwkgKiBzbyB0aGF0IGl0IGRvZXNuJ3QgZGlzYXBwZWFyIGlmIHRoZSBkZXZpY2UgaXMgdW5ib3VuZAorCSAqLworCWtyZWZfZ2V0KCZwcml2LT5yZWYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhdGFfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgZnBnYV9yZWFkZXIgKnJlYWRlciA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZnBnYV9kZXZpY2UgKnByaXYgPSByZWFkZXItPnByaXY7CisKKwkvKiBmcmVlIHRoZSBwZXItcmVhZGVyIHN0cnVjdHVyZSAqLworCWRhdGFfZnJlZV9idWZmZXIocmVhZGVyLT5idWYpOworCWtmcmVlKHJlYWRlcik7CisJZmlscC0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKworCS8qIGRlY3JlbWVudCBvdXIgcmVmZXJlbmNlIGNvdW50IHRvIHRoZSBwcml2YXRlIGRhdGEgKi8KKwlrcmVmX3B1dCgmcHJpdi0+cmVmLCBmcGdhX2RldmljZV9yZWxlYXNlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgZGF0YV9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqdWJ1Ziwgc2l6ZV90IGNvdW50LAorCQkJIGxvZmZfdCAqZl9wb3MpCit7CisJc3RydWN0IGZwZ2FfcmVhZGVyICpyZWFkZXIgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGZwZ2FfZGV2aWNlICpwcml2ID0gcmVhZGVyLT5wcml2OworCXN0cnVjdCBsaXN0X2hlYWQgKnVzZWQgPSAmcHJpdi0+dXNlZDsKKwlzdHJ1Y3QgZGF0YV9idWYgKmRidWY7CisJc2l6ZV90IGF2YWlsOworCXZvaWQgKmRhdGE7CisJaW50IHJldDsKKworCS8qIGNoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSBhIHBhcnRpYWwgYnVmZmVyICovCisJaWYgKHJlYWRlci0+YnVmKSB7CisJCWRidWYgPSByZWFkZXItPmJ1ZjsKKwkJZ290byBoYXZlX2J1ZmZlcjsKKwl9CisKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKKworCS8qIEJsb2NrIHVudGlsIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBidWZmZXIgb24gdGhlIHVzZWQgbGlzdCAqLworCXdoaWxlIChsaXN0X2VtcHR5KHVzZWQpKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CisKKwkJaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQorCQkJcmV0dXJuIC1FQUdBSU47CisKKwkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHByaXYtPndhaXQsICFsaXN0X2VtcHR5KHVzZWQpKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CisJfQorCisJLyogR3JhYiB0aGUgZmlyc3QgYnVmZmVyIG9mZiBvZiB0aGUgdXNlZCBsaXN0ICovCisJZGJ1ZiA9IGxpc3RfZmlyc3RfZW50cnkodXNlZCwgc3RydWN0IGRhdGFfYnVmLCBlbnRyeSk7CisJbGlzdF9kZWxfaW5pdCgmZGJ1Zi0+ZW50cnkpOworCisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKKworCS8qIEJ1ZmZlcnMgYXJlIGFsd2F5cyBtYXBwZWQ6IHVubWFwIGl0ICovCisJdmlkZW9idWZfZG1hX3VubWFwKHByaXYtPmRldiwgJmRidWYtPnZiKTsKKworCS8qIHNhdmUgdGhlIGJ1ZmZlciBmb3IgbGF0ZXIgKi8KKwlyZWFkZXItPmJ1ZiA9IGRidWY7CisJcmVhZGVyLT5idWZfc3RhcnQgPSAwOworCitoYXZlX2J1ZmZlcjoKKwkvKiBHZXQgdGhlIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgKi8KKwlhdmFpbCA9IGRidWYtPnNpemUgLSByZWFkZXItPmJ1Zl9zdGFydDsKKwlkYXRhID0gZGJ1Zi0+dmIudmFkZHIgKyByZWFkZXItPmJ1Zl9zdGFydDsKKworCS8qIEdldCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlIGNhbiB0cmFuc2ZlciAqLworCWNvdW50ID0gbWluKGNvdW50LCBhdmFpbCk7CisKKwkvKiBDb3B5IHRoZSBkYXRhIHRvIHRoZSB1c2Vyc3BhY2UgYnVmZmVyICovCisJaWYgKGNvcHlfdG9fdXNlcih1YnVmLCBkYXRhLCBjb3VudCkpCisJCXJldHVybiAtRUZBVUxUOworCisJLyogVXBkYXRlIHRoZSBhbW91bnQgb2YgYXZhaWxhYmxlIHNwYWNlICovCisJYXZhaWwgLT0gY291bnQ7CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIHN0aWxsIHNvbWUgZGF0YSBhdmFpbGFibGUsIHNhdmUgdGhlIGJ1ZmZlciBmb3IgdGhlCisJICogbmV4dCB1c2Vyc3BhY2UgY2FsbCB0byByZWFkKCkgYW5kIHJldHVybgorCSAqLworCWlmIChhdmFpbCA+IDApIHsKKwkJcmVhZGVyLT5idWZfc3RhcnQgKz0gY291bnQ7CisJCXJlYWRlci0+YnVmID0gZGJ1ZjsKKwkJcmV0dXJuIGNvdW50OworCX0KKworCS8qCisJICogR2V0IHRoZSBidWZmZXIgcmVhZHkgdG8gYmUgcmV1c2VkIGZvciBETUEKKwkgKgorCSAqIElmIGl0IGZhaWxzLCB3ZSBwcmV0ZW5kIHRoYXQgdGhlIHJlYWQgbmV2ZXIgaGFwcGVkIGFuZCByZXR1cm4KKwkgKiAtRUZBVUxUIHRvIHVzZXJzcGFjZS4gVGhlIHJlYWQgd2lsbCBiZSByZXRyaWVkLgorCSAqLworCXJldCA9IHZpZGVvYnVmX2RtYV9tYXAocHJpdi0+ZGV2LCAmZGJ1Zi0+dmIpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihwcml2LT5kZXYsICJ1bmFibGUgdG8gcmVtYXAgYnVmZmVyIGZvciBETUFcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwkvKiBMb2NrIGFnYWluc3QgY29uY3VycmVudCBlbmFibGUvZGlzYWJsZSAqLworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOworCisJLyogdGhlIHJlYWRlciBpcyBmaW5pc2hlZCB3aXRoIHRoaXMgYnVmZmVyICovCisJcmVhZGVyLT5idWYgPSBOVUxMOworCisJLyoKKwkgKiBPbmUgb2YgdHdvIHRoaW5ncyBoYXMgaGFwcGVuZWQsIHRoZSBkZXZpY2UgaXMgZGlzYWJsZWQsIG9yIHRoZQorCSAqIGRldmljZSBoYXMgYmVlbiByZWNvbmZpZ3VyZWQgdW5kZXJuZWF0aCB1cy4gSW4gZWl0aGVyIGNhc2UsIHdlCisJICogc2hvdWxkIGp1c3QgdGhyb3cgYXdheSB0aGUgYnVmZmVyLgorCSAqLworCWlmICghcHJpdi0+ZW5hYmxlZCB8fCBkYnVmLT5zaXplICE9IHByaXYtPmJ1ZnNpemUpIHsKKwkJdmlkZW9idWZfZG1hX3VubWFwKHByaXYtPmRldiwgJmRidWYtPnZiKTsKKwkJZGF0YV9mcmVlX2J1ZmZlcihkYnVmKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCS8qIFRoZSBidWZmZXIgaXMgc2FmZSB0byByZXVzZSwgc28gYWRkIGl0IGJhY2sgdG8gdGhlIGZyZWUgbGlzdCAqLworCWxpc3RfYWRkX3RhaWwoJmRidWYtPmVudHJ5LCAmcHJpdi0+ZnJlZSk7CisKK291dF91bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGF0YV9wb2xsKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKnRibCkKK3sKKwlzdHJ1Y3QgZnBnYV9yZWFkZXIgKnJlYWRlciA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZnBnYV9kZXZpY2UgKnByaXYgPSByZWFkZXItPnByaXY7CisJdW5zaWduZWQgaW50IG1hc2sgPSAwOworCisJcG9sbF93YWl0KGZpbHAsICZwcml2LT53YWl0LCB0YmwpOworCisJaWYgKCFsaXN0X2VtcHR5KCZwcml2LT51c2VkKSkKKwkJbWFzayB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOworCisJcmV0dXJuIG1hc2s7Cit9CisKK3N0YXRpYyBpbnQgZGF0YV9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgZnBnYV9yZWFkZXIgKnJlYWRlciA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZnBnYV9kZXZpY2UgKnByaXYgPSByZWFkZXItPnByaXY7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQsIHZzaXplLCBwc2l6ZSwgYWRkcjsKKworCS8qIFZNQSBwcm9wZXJ0aWVzICovCisJb2Zmc2V0ID0gdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUOworCXZzaXplID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0OworCXBzaXplID0gcHJpdi0+cGh5c19zaXplIC0gb2Zmc2V0OworCWFkZHIgPSAocHJpdi0+cGh5c19hZGRyICsgb2Zmc2V0KSA+PiBQQUdFX1NISUZUOworCisJLyogQ2hlY2sgYWdhaW5zdCB0aGUgRlBHQSByZWdpb24ncyBwaHlzaWNhbCBtZW1vcnkgc2l6ZSAqLworCWlmICh2c2l6ZSA+IHBzaXplKSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAicmVxdWVzdGVkIG1tYXAgbWFwcGluZyB0b28gbGFyZ2VcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBJTyBtZW1vcnkgKHN0b3AgY2FjaGVpbmcpICovCisJdm1hLT52bV9mbGFncyB8PSBWTV9JTyB8IFZNX1JFU0VSVkVEOworCXZtYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bWEtPnZtX3BhZ2VfcHJvdCk7CisKKwlyZXR1cm4gaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgYWRkciwgdnNpemUsCisJCQkJICB2bWEtPnZtX3BhZ2VfcHJvdCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRhdGFfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gZGF0YV9vcGVuLAorCS5yZWxlYXNlCT0gZGF0YV9yZWxlYXNlLAorCS5yZWFkCQk9IGRhdGFfcmVhZCwKKwkucG9sbAkJPSBkYXRhX3BvbGwsCisJLm1tYXAJCT0gZGF0YV9tbWFwLAorCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAorfTsKKworLyoKKyAqIE9wZW5GaXJtd2FyZSBEZXZpY2UgU3Vic3lzdGVtCisgKi8KKworc3RhdGljIGJvb2wgZG1hX2ZpbHRlcihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHZvaWQgKmRhdGEpCit7CisJLyoKKwkgKiBETUEgQ2hhbm5lbCAjMCBpcyB1c2VkIGZvciB0aGUgRlBHQSBQcm9ncmFtbWVyLCBzbyBpZ25vcmUgaXQKKwkgKgorCSAqIFRoaXMgcHJvYmFibHkgd29uJ3Qgc3Vydml2ZSBhbiB1bmxvYWQvbG9hZCBjeWNsZSBvZiB0aGUgRnJlZXNjYWxlCisJICogRE1BRW5naW5lIGRyaXZlciwgYnV0IHRoYXQgd29uJ3QgYmUgYSBwcm9ibGVtCisJICovCisJaWYgKGNoYW4tPmNoYW5faWQgPT0gMCAmJiBjaGFuLT5kZXZpY2UtPmRldl9pZCA9PSAwKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGludCBkYXRhX29mX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wLAorCQkJIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSA9IG9wLT5kZXYub2Zfbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlICp0aGlzX2RldmljZTsKKwlzdHJ1Y3QgZnBnYV9kZXZpY2UgKnByaXY7CisJc3RydWN0IHJlc291cmNlIHJlczsKKwlkbWFfY2FwX21hc2tfdCBtYXNrOworCWludCByZXQ7CisKKwkvKiBBbGxvY2F0ZSBwcml2YXRlIGRhdGEgKi8KKwlwcml2ID0ga3phbGxvYyhzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpIHsKKwkJZGV2X2Vycigmb3AtPmRldiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBkZXZpY2UgcHJpdmF0ZSBkYXRhXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfcmV0dXJuOworCX0KKworCWRldl9zZXRfZHJ2ZGF0YSgmb3AtPmRldiwgcHJpdik7CisJcHJpdi0+ZGV2ID0gJm9wLT5kZXY7CisJa3JlZl9pbml0KCZwcml2LT5yZWYpOworCW11dGV4X2luaXQoJnByaXYtPm11dGV4KTsKKworCWRldl9zZXRfZHJ2ZGF0YShwcml2LT5kZXYsIHByaXYpOworCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmcHJpdi0+ZnJlZSk7CisJSU5JVF9MSVNUX0hFQUQoJnByaXYtPnVzZWQpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnByaXYtPndhaXQpOworCisJLyogU2V0dXAgdGhlIG1pc2MgZGV2aWNlICovCisJcHJpdi0+bWlzY2Rldi5taW5vciA9IE1JU0NfRFlOQU1JQ19NSU5PUjsKKwlwcml2LT5taXNjZGV2Lm5hbWUgPSBkcnZfbmFtZTsKKwlwcml2LT5taXNjZGV2LmZvcHMgPSAmZGF0YV9mb3BzOworCisJLyogR2V0IHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBGUEdBIHJlZ2lzdGVycyAqLworCXJldCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2Uob2Zfbm9kZSwgMCwgJnJlcyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZvcC0+ZGV2LCAiVW5hYmxlIHRvIGZpbmQgRlBHQSBwaHlzaWNhbCBhZGRyZXNzXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZnJlZV9wcml2OworCX0KKworCXByaXYtPnBoeXNfYWRkciA9IHJlcy5zdGFydDsKKwlwcml2LT5waHlzX3NpemUgPSByZXNvdXJjZV9zaXplKCZyZXMpOworCisJLyogaW9yZW1hcCB0aGUgcmVnaXN0ZXJzIGZvciB1c2UgKi8KKwlwcml2LT5yZWdzID0gb2ZfaW9tYXAob2Zfbm9kZSwgMCk7CisJaWYgKCFwcml2LT5yZWdzKSB7CisJCWRldl9lcnIoJm9wLT5kZXYsICJVbmFibGUgdG8gaW9yZW1hcCByZWdpc3RlcnNcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9mcmVlX3ByaXY7CisJfQorCisJZG1hX2NhcF96ZXJvKG1hc2spOworCWRtYV9jYXBfc2V0KERNQV9NRU1DUFksIG1hc2spOworCWRtYV9jYXBfc2V0KERNQV9JTlRFUlJVUFQsIG1hc2spOworCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgbWFzayk7CisJZG1hX2NhcF9zZXQoRE1BX1NHLCBtYXNrKTsKKworCS8qIFJlcXVlc3QgYSBETUEgY2hhbm5lbCAqLworCXByaXYtPmNoYW4gPSBkbWFfcmVxdWVzdF9jaGFubmVsKG1hc2ssIGRtYV9maWx0ZXIsIE5VTEwpOworCWlmICghcHJpdi0+Y2hhbikgeworCQlkZXZfZXJyKCZvcC0+ZGV2LCAiVW5hYmxlIHRvIHJlcXVlc3QgRE1BIGNoYW5uZWxcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF91bm1hcF9yZWdzOworCX0KKworCS8qIEZpbmQgdGhlIGNvcnJlY3QgSVJRIG51bWJlciAqLworCXByaXYtPmlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG9mX25vZGUsIDApOworCWlmIChwcml2LT5pcnEgPT0gTk9fSVJRKSB7CisJCWRldl9lcnIoJm9wLT5kZXYsICJVbmFibGUgdG8gZmluZCBJUlEgbGluZVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X3JlbGVhc2VfZG1hOworCX0KKworCS8qIERyaXZlIHRoZSBHUElPIGZvciBGUEdBIElSUSBoaWdoIChubyBpbnRlcnJ1cHQpICovCisJaW93cml0ZTMyYmUoSVJRX0NPUkxfRE9ORSwgcHJpdi0+cmVncyArIFNZU19JUlFfT1VUUFVUX0RBVEEpOworCisJLyogUmVnaXN0ZXIgdGhlIG1pc2NkZXZpY2UgKi8KKwlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZwcml2LT5taXNjZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJm9wLT5kZXYsICJVbmFibGUgdG8gcmVnaXN0ZXIgbWlzY2RldmljZVxuIik7CisJCWdvdG8gb3V0X2lycV9kaXNwb3NlX21hcHBpbmc7CisJfQorCisJLyogQ3JlYXRlIHRoZSBkZWJ1Z2ZzIGZpbGVzICovCisJcmV0ID0gZGF0YV9kZWJ1Z2ZzX2luaXQocHJpdik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZvcC0+ZGV2LCAiVW5hYmxlIHRvIGNyZWF0ZSBkZWJ1Z2ZzIGZpbGVzXG4iKTsKKwkJZ290byBvdXRfbWlzY19kZXJlZ2lzdGVyOworCX0KKworCS8qIENyZWF0ZSB0aGUgc3lzZnMgZmlsZXMgKi8KKwl0aGlzX2RldmljZSA9IHByaXYtPm1pc2NkZXYudGhpc19kZXZpY2U7CisJZGV2X3NldF9kcnZkYXRhKHRoaXNfZGV2aWNlLCBwcml2KTsKKwlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnRoaXNfZGV2aWNlLT5rb2JqLCAmcnRfc3lzZnNfYXR0cl9ncm91cCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZvcC0+ZGV2LCAiVW5hYmxlIHRvIGNyZWF0ZSBzeXNmcyBmaWxlc1xuIik7CisJCWdvdG8gb3V0X2RhdGFfZGVidWdmc19leGl0OworCX0KKworCWRldl9pbmZvKCZvcC0+ZGV2LCAiQ0FSTUEgRlBHQSBSZWFsdGltZSBEYXRhIERyaXZlciBMb2FkZWRcbiIpOworCXJldHVybiAwOworCitvdXRfZGF0YV9kZWJ1Z2ZzX2V4aXQ6CisJZGF0YV9kZWJ1Z2ZzX2V4aXQocHJpdik7CitvdXRfbWlzY19kZXJlZ2lzdGVyOgorCW1pc2NfZGVyZWdpc3RlcigmcHJpdi0+bWlzY2Rldik7CitvdXRfaXJxX2Rpc3Bvc2VfbWFwcGluZzoKKwlpcnFfZGlzcG9zZV9tYXBwaW5nKHByaXYtPmlycSk7CitvdXRfcmVsZWFzZV9kbWE6CisJZG1hX3JlbGVhc2VfY2hhbm5lbChwcml2LT5jaGFuKTsKK291dF91bm1hcF9yZWdzOgorCWlvdW5tYXAocHJpdi0+cmVncyk7CitvdXRfZnJlZV9wcml2OgorCWtyZWZfcHV0KCZwcml2LT5yZWYsIGZwZ2FfZGV2aWNlX3JlbGVhc2UpOworb3V0X3JldHVybjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRhdGFfb2ZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wKQoreworCXN0cnVjdCBmcGdhX2RldmljZSAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YSgmb3AtPmRldik7CisJc3RydWN0IGRldmljZSAqdGhpc19kZXZpY2UgPSBwcml2LT5taXNjZGV2LnRoaXNfZGV2aWNlOworCisJLyogcmVtb3ZlIGFsbCBzeXNmcyBmaWxlcywgbm93IHRoZSBkZXZpY2UgY2Fubm90IGJlIHJlLWVuYWJsZWQgKi8KKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnRoaXNfZGV2aWNlLT5rb2JqLCAmcnRfc3lzZnNfYXR0cl9ncm91cCk7CisKKwkvKiByZW1vdmUgYWxsIGRlYnVnZnMgZmlsZXMgKi8KKwlkYXRhX2RlYnVnZnNfZXhpdChwcml2KTsKKworCS8qIGRpc2FibGUgdGhlIGRldmljZSBmcm9tIGdlbmVyYXRpbmcgZGF0YSAqLworCWRhdGFfZGV2aWNlX2Rpc2FibGUocHJpdik7CisKKwkvKiByZW1vdmUgdGhlIGNoYXJhY3RlciBkZXZpY2UgdG8gc3RvcCBuZXcgcmVhZGVycyBmcm9tIGFwcGVhcmluZyAqLworCW1pc2NfZGVyZWdpc3RlcigmcHJpdi0+bWlzY2Rldik7CisKKwkvKiBjbGVhbnVwIGV2ZXJ5dGhpbmcgbm90IG5lZWRlZCBieSByZWFkZXJzICovCisJaXJxX2Rpc3Bvc2VfbWFwcGluZyhwcml2LT5pcnEpOworCWRtYV9yZWxlYXNlX2NoYW5uZWwocHJpdi0+Y2hhbik7CisJaW91bm1hcChwcml2LT5yZWdzKTsKKworCS8qIHJlbGVhc2Ugb3VyIHJlZmVyZW5jZSAqLworCWtyZWZfcHV0KCZwcml2LT5yZWYsIGZwZ2FfZGV2aWNlX3JlbGVhc2UpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBkYXRhX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJjYXJtYSxjYXJtYS1mcGdhIiwgfSwKKwl7fSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIGRhdGFfb2ZfZHJpdmVyID0geworCS5wcm9iZQkJPSBkYXRhX29mX3Byb2JlLAorCS5yZW1vdmUJCT0gZGF0YV9vZl9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCQk9IGRydl9uYW1lLAorCQkub2ZfbWF0Y2hfdGFibGUJPSBkYXRhX29mX21hdGNoLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKKy8qCisgKiBNb2R1bGUgSW5pdCAvIEV4aXQKKyAqLworCitzdGF0aWMgaW50IF9faW5pdCBkYXRhX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZkYXRhX29mX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkYXRhX2V4aXQodm9pZCkKK3sKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZGF0YV9vZl9kcml2ZXIpOworfQorCitNT0RVTEVfQVVUSE9SKCJJcmEgVy4gU255ZGVyIDxpd3NAb3Zyby5jYWx0ZWNoLmVkdT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ0FSTUEgREFUQS1GUEdBIEFjY2VzcyBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX2luaXQoZGF0YV9pbml0KTsKK21vZHVsZV9leGl0KGRhdGFfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvY3M1NTM1LW1mZ3B0LmMgYi9kcml2ZXJzL21pc2MvY3M1NTM1LW1mZ3B0LmMKaW5kZXggZDAyZDMwMi4uZTAxZTA4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2NzNTUzNS1tZmdwdC5jCisrKyBiL2RyaXZlcnMvbWlzYy9jczU1MzUtbWZncHQuYwpAQCAtMzI5LDcgKzMyOSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgY3M1NTM1X21mZ3B0X2RydiA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGNzNTUzNV9tZmdwdF9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSBEUlZfTkFNRSwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCkBAIC0zNDAsNyArMzQwLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgY3M1NTM1X21mZ3B0X2luaXQodm9pZCkKIHsKLQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZjczU1MzVfbWZncHRfZHJ2KTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZjczU1MzVfbWZncHRfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoY3M1NTM1X21mZ3B0X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2libWFzbS9pYm1hc21mcy5jIGIvZHJpdmVycy9taXNjL2libWFzbS9pYm1hc21mcy5jCmluZGV4IGQyZDVkMjMuLjg5OTQ3NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9pYm1hc20vaWJtYXNtZnMuYworKysgYi9kcml2ZXJzL21pc2MvaWJtYXNtL2libWFzbWZzLmMKQEAgLTI5LDcgKzI5LDcgQEAKIAogLyoKICAqIFRoZSBJQk1BU00gZmlsZSB2aXJ0dWFsIGZpbGVzeXN0ZW0uIEl0IGNyZWF0ZXMgdGhlIGZvbGxvd2luZyBoaWVyYXJjaHkKLSAqIGR5bWFtaWNhbGx5IHdoZW4gbW91bnRlZCBmcm9tIHVzZXIgc3BhY2U6CisgKiBkeW5hbWljYWxseSB3aGVuIG1vdW50ZWQgZnJvbSB1c2VyIHNwYWNlOgogICoKICAqICAgIC9pYm1hc20KICAqICAgIHwtLSAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvcGNoX3BodWIuYyBiL2RyaXZlcnMvbWlzYy9wY2hfcGh1Yi5jCmluZGV4IGExOWNiNzEuLjVmZTc5ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9wY2hfcGh1Yi5jCisrKyBiL2RyaXZlcnMvbWlzYy9wY2hfcGh1Yi5jCkBAIC0zNCwxMiArMzQsMTggQEAKICNkZWZpbmUgUEhVQl9USU1FT1VUIDB4MDUJCS8qIFRpbWUgb3V0IHZhbHVlIGZvciBTdGF0dXMgUmVnaXN0ZXIgKi8KICNkZWZpbmUgUENIX1BIVUJfUk9NX1dSSVRFX0VOQUJMRSAweDAxCS8qIEVuYWJsaW5nIGZvciB3cml0aW5nIFJPTSAqLwogI2RlZmluZSBQQ0hfUEhVQl9ST01fV1JJVEVfRElTQUJMRSAweDAwCS8qIERpc2FibGluZyBmb3Igd3JpdGluZyBST00gKi8KLSNkZWZpbmUgUENIX1BIVUJfTUFDX1NUQVJUX0FERFIgMHgyMEMgIC8qIE1BQyBkYXRhIGFyZWEgc3RhcnQgYWRkcmVzcyBvZmZzZXQgKi8KLSNkZWZpbmUgUENIX1BIVUJfUk9NX1NUQVJUX0FERFJfRUcyMFQgMHgxNCAvKiBST00gZGF0YSBhcmVhIHN0YXJ0IGFkZHJlc3Mgb2Zmc2V0CisjZGVmaW5lIFBDSF9QSFVCX01BQ19TVEFSVF9BRERSX0VHMjBUIDB4MTQgIC8qIE1BQyBkYXRhIGFyZWEgc3RhcnQgYWRkcmVzcworCQkJCQkgICAgICAgb2Zmc2V0ICovCisjZGVmaW5lIFBDSF9QSFVCX01BQ19TVEFSVF9BRERSX01MNzIyMyAweDIwQyAgLyogTUFDIGRhdGEgYXJlYSBzdGFydCBhZGRyZXNzCisJCQkJCQkgb2Zmc2V0ICovCisjZGVmaW5lIFBDSF9QSFVCX1JPTV9TVEFSVF9BRERSX0VHMjBUIDB4ODAgLyogUk9NIGRhdGEgYXJlYSBzdGFydCBhZGRyZXNzIG9mZnNldAogCQkJCQkgICAgICAoSW50ZWwgRUcyMFQgUENIKSovCiAjZGVmaW5lIFBDSF9QSFVCX1JPTV9TVEFSVF9BRERSX01MNzIxMyAweDQwMCAvKiBST00gZGF0YSBhcmVhIHN0YXJ0IGFkZHJlc3MKIAkJCQkJCW9mZnNldChPS0kgU0VNSUNPTkRVQ1RPUiBNTDcyMTMpCiAJCQkJCSAgICAgICovCisjZGVmaW5lIFBDSF9QSFVCX1JPTV9TVEFSVF9BRERSX01MNzIyMyAweDQwMCAvKiBST00gZGF0YSBhcmVhIHN0YXJ0IGFkZHJlc3MKKwkJCQkJCW9mZnNldChPS0kgU0VNSUNPTkRVQ1RPUiBNTDcyMjMpCisJCQkJCSAgICAgICovCiAKIC8qIE1BWCBudW1iZXIgb2YgSU5UX1JFRFVDRV9DT05UUk9MIHJlZ2lzdGVycyAqLwogI2RlZmluZSBNQVhfTlVNX0lOVF9SRURVQ0VfQ09OVFJPTF9SRUcgMTI4CkBAIC02Myw2ICs2OSwxMCBAQAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1JPSE0JCQkweDEwZGIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9ST0hNX01MNzIxM19QSFVCCQkweDgwMUEKIAorLyogTWFjcm9zIGZvciBNTDcyMjMgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ST0hNX01MNzIyM19tUEhVQgkweDgwMTIgLyogZm9yIEJ1cy1tICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUk9ITV9NTDcyMjNfblBIVUIJMHg4MDAyIC8qIGZvciBCdXMtbiAqLworCiAvKiBTUk9NIEFDQ0VTUyBNYWNybyAqLwogI2RlZmluZSBQQ0hfV09SRF9BRERSX01BU0sgKH4oKDEgPDwgMikgLSAxKSkKIApAQCAtMTAwLDYgKzExMCw5IEBACiAgKiBAY2xrY2ZnX3JlZzoJCQkJQ0xLIENGRyByZWdpc3RlciB2YWwKICAqIEBwY2hfcGh1Yl9iYXNlX2FkZHJlc3M6CQlSZWdpc3RlciBiYXNlIGFkZHJlc3MKICAqIEBwY2hfcGh1Yl9leHRyb21fYmFzZV9hZGRyZXNzOglleHRlcm5hbCByb20gYmFzZSBhZGRyZXNzCisgKiBAcGNoX21hY19zdGFydF9hZGRyZXNzOgkJTUFDIGFkZHJlc3MgYXJlYSBzdGFydCBhZGRyZXNzCisgKiBAcGNoX29wdF9yb21fc3RhcnRfYWRkcmVzczoJCU9wdGlvbiBST00gc3RhcnQgYWRkcmVzcworICogQGlvaF90eXBlOgkJCQlTYXZlIElPSCB0eXBlCiAgKi8KIHN0cnVjdCBwY2hfcGh1Yl9yZWcgewogCXUzMiBwaHViX2lkX3JlZzsKQEAgLTExNyw2ICsxMzAsOSBAQAogCXUzMiBjbGtjZmdfcmVnOwogCXZvaWQgX19pb21lbSAqcGNoX3BodWJfYmFzZV9hZGRyZXNzOwogCXZvaWQgX19pb21lbSAqcGNoX3BodWJfZXh0cm9tX2Jhc2VfYWRkcmVzczsKKwl1MzIgcGNoX21hY19zdGFydF9hZGRyZXNzOworCXUzMiBwY2hfb3B0X3JvbV9zdGFydF9hZGRyZXNzOworCWludCBpb2hfdHlwZTsKIH07CiAKIC8qIFNST00gU1BFQyBmb3IgTUFDIGFkZHJlc3MgYXNzaWdubWVudCBvZmZzZXQgKi8KQEAgLTMxOSw3ICszMzUsNyBAQAogewogCXVuc2lnbmVkIGludCBtZW1fYWRkcjsKIAotCW1lbV9hZGRyID0gUENIX1BIVUJfUk9NX1NUQVJUX0FERFJfRUcyMFQgKworCW1lbV9hZGRyID0gY2hpcC0+cGNoX21hY19zdGFydF9hZGRyZXNzICsKIAkJCXBjaF9waHViX21hY19vZmZzZXRbb2Zmc2V0X2FkZHJlc3NdOwogCiAJcGNoX3BodWJfcmVhZF9zZXJpYWxfcm9tKGNoaXAsIG1lbV9hZGRyLCBkYXRhKTsKQEAgLTMzNiw3ICszNTIsNyBAQAogCWludCByZXR2YWw7CiAJdW5zaWduZWQgaW50IG1lbV9hZGRyOwogCi0JbWVtX2FkZHIgPSBQQ0hfUEhVQl9ST01fU1RBUlRfQUREUl9FRzIwVCArCisJbWVtX2FkZHIgPSBjaGlwLT5wY2hfbWFjX3N0YXJ0X2FkZHJlc3MgKwogCQkJcGNoX3BodWJfbWFjX29mZnNldFtvZmZzZXRfYWRkcmVzc107CiAKIAlyZXR2YWwgPSBwY2hfcGh1Yl93cml0ZV9zZXJpYWxfcm9tKGNoaXAsIG1lbV9hZGRyLCBkYXRhKTsKQEAgLTM4NCw2ICs0MDAsNDggQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCisvKiBwY2hfcGh1Yl9nYmVfc2VyaWFsX3JvbV9jb25mX21wIC0gbWFrZXMgU2VyaWFsUk9NIGhlYWRlciBmb3JtYXQgY29uZmlndXJhdGlvbgorICogZm9yIEdpZ2FiaXQgRXRoZXJuZXQgTUFDIGFkZHJlc3MKKyAqLworc3RhdGljIGludCBwY2hfcGh1Yl9nYmVfc2VyaWFsX3JvbV9jb25mX21wKHN0cnVjdCBwY2hfcGh1Yl9yZWcgKmNoaXApCit7CisJaW50IHJldHZhbDsKKwl1MzIgb2Zmc2V0X2FkZHI7CisKKwlvZmZzZXRfYWRkciA9IDB4MjAwOworCXJldHZhbCA9IHBjaF9waHViX3dyaXRlX3NlcmlhbF9yb20oY2hpcCwgMHgwMyArIG9mZnNldF9hZGRyLCAweGJjKTsKKwlyZXR2YWwgfD0gcGNoX3BodWJfd3JpdGVfc2VyaWFsX3JvbShjaGlwLCAweDAyICsgb2Zmc2V0X2FkZHIsIDB4MDApOworCXJldHZhbCB8PSBwY2hfcGh1Yl93cml0ZV9zZXJpYWxfcm9tKGNoaXAsIDB4MDEgKyBvZmZzZXRfYWRkciwgMHg0MCk7CisJcmV0dmFsIHw9IHBjaF9waHViX3dyaXRlX3NlcmlhbF9yb20oY2hpcCwgMHgwMCArIG9mZnNldF9hZGRyLCAweDAyKTsKKworCXJldHZhbCB8PSBwY2hfcGh1Yl93cml0ZV9zZXJpYWxfcm9tKGNoaXAsIDB4MDcgKyBvZmZzZXRfYWRkciwgMHgwMCk7CisJcmV0dmFsIHw9IHBjaF9waHViX3dyaXRlX3NlcmlhbF9yb20oY2hpcCwgMHgwNiArIG9mZnNldF9hZGRyLCAweDAwKTsKKwlyZXR2YWwgfD0gcGNoX3BodWJfd3JpdGVfc2VyaWFsX3JvbShjaGlwLCAweDA1ICsgb2Zmc2V0X2FkZHIsIDB4MDApOworCXJldHZhbCB8PSBwY2hfcGh1Yl93cml0ZV9zZXJpYWxfcm9tKGNoaXAsIDB4MDQgKyBvZmZzZXRfYWRkciwgMHg4MCk7CisKKwlyZXR2YWwgfD0gcGNoX3BodWJfd3JpdGVfc2VyaWFsX3JvbShjaGlwLCAweDBiICsgb2Zmc2V0X2FkZHIsIDB4YmMpOworCXJldHZhbCB8PSBwY2hfcGh1Yl93cml0ZV9zZXJpYWxfcm9tKGNoaXAsIDB4MGEgKyBvZmZzZXRfYWRkciwgMHgwMCk7CisJcmV0dmFsIHw9IHBjaF9waHViX3dyaXRlX3NlcmlhbF9yb20oY2hpcCwgMHgwOSArIG9mZnNldF9hZGRyLCAweDQwKTsKKwlyZXR2YWwgfD0gcGNoX3BodWJfd3JpdGVfc2VyaWFsX3JvbShjaGlwLCAweDA4ICsgb2Zmc2V0X2FkZHIsIDB4MTgpOworCisJcmV0dmFsIHw9IHBjaF9waHViX3dyaXRlX3NlcmlhbF9yb20oY2hpcCwgMHgxMyArIG9mZnNldF9hZGRyLCAweGJjKTsKKwlyZXR2YWwgfD0gcGNoX3BodWJfd3JpdGVfc2VyaWFsX3JvbShjaGlwLCAweDEyICsgb2Zmc2V0X2FkZHIsIDB4MDApOworCXJldHZhbCB8PSBwY2hfcGh1Yl93cml0ZV9zZXJpYWxfcm9tKGNoaXAsIDB4MTEgKyBvZmZzZXRfYWRkciwgMHg0MCk7CisJcmV0dmFsIHw9IHBjaF9waHViX3dyaXRlX3NlcmlhbF9yb20oY2hpcCwgMHgxMCArIG9mZnNldF9hZGRyLCAweDE5KTsKKworCXJldHZhbCB8PSBwY2hfcGh1Yl93cml0ZV9zZXJpYWxfcm9tKGNoaXAsIDB4MWIgKyBvZmZzZXRfYWRkciwgMHhiYyk7CisJcmV0dmFsIHw9IHBjaF9waHViX3dyaXRlX3NlcmlhbF9yb20oY2hpcCwgMHgxYSArIG9mZnNldF9hZGRyLCAweDAwKTsKKwlyZXR2YWwgfD0gcGNoX3BodWJfd3JpdGVfc2VyaWFsX3JvbShjaGlwLCAweDE5ICsgb2Zmc2V0X2FkZHIsIDB4NDApOworCXJldHZhbCB8PSBwY2hfcGh1Yl93cml0ZV9zZXJpYWxfcm9tKGNoaXAsIDB4MTggKyBvZmZzZXRfYWRkciwgMHgzYSk7CisKKwlyZXR2YWwgfD0gcGNoX3BodWJfd3JpdGVfc2VyaWFsX3JvbShjaGlwLCAweDFmICsgb2Zmc2V0X2FkZHIsIDB4MDEpOworCXJldHZhbCB8PSBwY2hfcGh1Yl93cml0ZV9zZXJpYWxfcm9tKGNoaXAsIDB4MWUgKyBvZmZzZXRfYWRkciwgMHgwMCk7CisJcmV0dmFsIHw9IHBjaF9waHViX3dyaXRlX3NlcmlhbF9yb20oY2hpcCwgMHgxZCArIG9mZnNldF9hZGRyLCAweDAwKTsKKwlyZXR2YWwgfD0gcGNoX3BodWJfd3JpdGVfc2VyaWFsX3JvbShjaGlwLCAweDFjICsgb2Zmc2V0X2FkZHIsIDB4MDApOworCisJcmV0dXJuIHJldHZhbDsKK30KKwogLyoqCiAgKiBwY2hfcGh1Yl9yZWFkX2diZV9tYWNfYWRkcigpIC0gUmVhZCBHaWdhYml0IEV0aGVybmV0IE1BQyBhZGRyZXNzCiAgKiBAb2Zmc2V0X2FkZHJlc3M6CUdpZ2FiaXQgRXRoZXJuZXQgTUFDIGFkZHJlc3Mgb2Zmc2V0IHZhbHVlLgpAQCAtNDA2LDcgKzQ2NCwxMCBAQAogCWludCByZXR2YWw7CiAJaW50IGk7CiAKLQlyZXR2YWwgPSBwY2hfcGh1Yl9nYmVfc2VyaWFsX3JvbV9jb25mKGNoaXApOworCWlmIChjaGlwLT5pb2hfdHlwZSA9PSAxKSAvKiBFRzIwVCAqLworCQlyZXR2YWwgPSBwY2hfcGh1Yl9nYmVfc2VyaWFsX3JvbV9jb25mKGNoaXApOworCWVsc2UJLyogTUw3MjIzICovCisJCXJldHZhbCA9IHBjaF9waHViX2diZV9zZXJpYWxfcm9tX2NvbmZfbXAoY2hpcCk7CiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKIApAQCAtNDQxLDEyICs1MDIsMTYgQEAKIAl9CiAKIAkvKiBHZXQgUm9tIHNpZ25hdHVyZSAqLwotCXBjaF9waHViX3JlYWRfc2VyaWFsX3JvbShjaGlwLCAweDgwLCAodW5zaWduZWQgY2hhciAqKSZyb21fc2lnbmF0dXJlKTsKKwlwY2hfcGh1Yl9yZWFkX3NlcmlhbF9yb20oY2hpcCwgY2hpcC0+cGNoX29wdF9yb21fc3RhcnRfYWRkcmVzcywKKwkJCQkodW5zaWduZWQgY2hhciAqKSZyb21fc2lnbmF0dXJlKTsKIAlyb21fc2lnbmF0dXJlICY9IDB4ZmY7Ci0JcGNoX3BodWJfcmVhZF9zZXJpYWxfcm9tKGNoaXAsIDB4ODEsICh1bnNpZ25lZCBjaGFyICopJnRtcCk7CisJcGNoX3BodWJfcmVhZF9zZXJpYWxfcm9tKGNoaXAsIGNoaXAtPnBjaF9vcHRfcm9tX3N0YXJ0X2FkZHJlc3MgKyAxLAorCQkJCSh1bnNpZ25lZCBjaGFyICopJnRtcCk7CiAJcm9tX3NpZ25hdHVyZSB8PSAodG1wICYgMHhmZikgPDwgODsKIAlpZiAocm9tX3NpZ25hdHVyZSA9PSAweEFBNTUpIHsKLQkJcGNoX3BodWJfcmVhZF9zZXJpYWxfcm9tKGNoaXAsIDB4ODIsICZyb21fbGVuZ3RoKTsKKwkJcGNoX3BodWJfcmVhZF9zZXJpYWxfcm9tKGNoaXAsCisJCQkJCSBjaGlwLT5wY2hfb3B0X3JvbV9zdGFydF9hZGRyZXNzICsgMiwKKwkJCQkJICZyb21fbGVuZ3RoKTsKIAkJb3JvbV9zaXplID0gcm9tX2xlbmd0aCAqIDUxMjsKIAkJaWYgKG9yb21fc2l6ZSA8IG9mZikgewogCQkJYWRkcl9vZmZzZXQgPSAwOwpAQCAtNDU4LDggKzUyMyw5IEBACiAJCX0KIAogCQlmb3IgKGFkZHJfb2Zmc2V0ID0gMDsgYWRkcl9vZmZzZXQgPCBjb3VudDsgYWRkcl9vZmZzZXQrKykgewotCQkJcGNoX3BodWJfcmVhZF9zZXJpYWxfcm9tKGNoaXAsIDB4ODAgKyBhZGRyX29mZnNldCArIG9mZiwKLQkJCQkJCQkgJmJ1ZlthZGRyX29mZnNldF0pOworCQkJcGNoX3BodWJfcmVhZF9zZXJpYWxfcm9tKGNoaXAsCisJCQkgICAgY2hpcC0+cGNoX29wdF9yb21fc3RhcnRfYWRkcmVzcyArIGFkZHJfb2Zmc2V0ICsgb2ZmLAorCQkJICAgICZidWZbYWRkcl9vZmZzZXRdKTsKIAkJfQogCX0gZWxzZSB7CiAJCWVyciA9IC1FTk9EQVRBOwpAQCAtNTAyLDggKzU2OCw5IEBACiAJCWlmIChQQ0hfUEhVQl9PUk9NX1NJWkUgPCBvZmYgKyBhZGRyX29mZnNldCkKIAkJCWdvdG8gcmV0dXJuX29rOwogCi0JCXJldCA9IHBjaF9waHViX3dyaXRlX3NlcmlhbF9yb20oY2hpcCwgMHg4MCArIGFkZHJfb2Zmc2V0ICsgb2ZmLAotCQkJCQkJICAgICAgIGJ1ZlthZGRyX29mZnNldF0pOworCQlyZXQgPSBwY2hfcGh1Yl93cml0ZV9zZXJpYWxfcm9tKGNoaXAsCisJCQkgICAgY2hpcC0+cGNoX29wdF9yb21fc3RhcnRfYWRkcmVzcyArIGFkZHJfb2Zmc2V0ICsgb2ZmLAorCQkJICAgIGJ1ZlthZGRyX29mZnNldF0pOwogCQlpZiAocmV0KSB7CiAJCQllcnIgPSByZXQ7CiAJCQlnb3RvIHJldHVybl9lcnI7CkBAIC02MDMsMTkgKzY3MCwyMiBAQAogCWRldl9kYmcoJnBkZXYtPmRldiwgIiVzIDogcGNpX2lvbWFwIFNVQ0NFU1MgYW5kIHZhbHVlICIKIAkJImluIHBjaF9waHViX2Jhc2VfYWRkcmVzcyB2YXJpYWJsZSBpcyAlcFxuIiwgX19mdW5jX18sCiAJCWNoaXAtPnBjaF9waHViX2Jhc2VfYWRkcmVzcyk7Ci0JY2hpcC0+cGNoX3BodWJfZXh0cm9tX2Jhc2VfYWRkcmVzcyA9IHBjaV9tYXBfcm9tKHBkZXYsICZyb21fc2l6ZSk7CiAKLQlpZiAoY2hpcC0+cGNoX3BodWJfZXh0cm9tX2Jhc2VfYWRkcmVzcyA9PSAwKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzIDogcGNpX21hcF9yb20gRkFJTEVEIiwgX19mdW5jX18pOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9wY2lfbWFwOworCWlmIChpZC0+ZHJpdmVyX2RhdGEgIT0gMykgeworCQljaGlwLT5wY2hfcGh1Yl9leHRyb21fYmFzZV9hZGRyZXNzID1cCisJCQkJCQkgICBwY2lfbWFwX3JvbShwZGV2LCAmcm9tX3NpemUpOworCQlpZiAoY2hpcC0+cGNoX3BodWJfZXh0cm9tX2Jhc2VfYWRkcmVzcyA9PSAwKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogcGNpX21hcF9yb20gRkFJTEVEIiwgX19mdW5jX18pOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyX3BjaV9tYXA7CisJCX0KKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiJXMgOiAiCisJCQkicGNpX21hcF9yb20gU1VDQ0VTUyBhbmQgdmFsdWUgaW4gIgorCQkJInBjaF9waHViX2V4dHJvbV9iYXNlX2FkZHJlc3MgdmFyaWFibGUgaXMgJXBcbiIsCisJCQlfX2Z1bmNfXywgY2hpcC0+cGNoX3BodWJfZXh0cm9tX2Jhc2VfYWRkcmVzcyk7CiAJfQotCWRldl9kYmcoJnBkZXYtPmRldiwgIiVzIDogIgotCQkicGNpX21hcF9yb20gU1VDQ0VTUyBhbmQgdmFsdWUgaW4gIgotCQkicGNoX3BodWJfZXh0cm9tX2Jhc2VfYWRkcmVzcyB2YXJpYWJsZSBpcyAlcFxuIiwgX19mdW5jX18sCi0JCWNoaXAtPnBjaF9waHViX2V4dHJvbV9iYXNlX2FkZHJlc3MpOwogCi0JaWYgKGlkLT5kcml2ZXJfZGF0YSA9PSAxKSB7CisJaWYgKGlkLT5kcml2ZXJfZGF0YSA9PSAxKSB7IC8qIEVHMjBUIFBDSCAqLwogCQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LmtvYmosCiAJCQkJCSAgICZkZXZfYXR0cl9wY2hfbWFjLmF0dHIpOwogCQlpZiAocmV0dmFsKQpAQCAtNjQyLDcgKzcxMiw5IEBACiAJCWlvd3JpdGUzMigweDAwMGFmZmFhLCBjaGlwLT5wY2hfcGh1Yl9iYXNlX2FkZHJlc3MgKyAweDE0KTsKIAkJLyogc2V0IHRoZSBpbnRlcnJ1cHQgZGVsYXkgdmFsdWUgKi8KIAkJaW93cml0ZTMyKDB4MjUsIGNoaXAtPnBjaF9waHViX2Jhc2VfYWRkcmVzcyArIDB4NDQpOwotCX0gZWxzZSBpZiAoaWQtPmRyaXZlcl9kYXRhID09IDIpIHsKKwkJY2hpcC0+cGNoX29wdF9yb21fc3RhcnRfYWRkcmVzcyA9IFBDSF9QSFVCX1JPTV9TVEFSVF9BRERSX0VHMjBUOworCQljaGlwLT5wY2hfbWFjX3N0YXJ0X2FkZHJlc3MgPSBQQ0hfUEhVQl9NQUNfU1RBUlRfQUREUl9FRzIwVDsKKwl9IGVsc2UgaWYgKGlkLT5kcml2ZXJfZGF0YSA9PSAyKSB7IC8qIE1MNzIxMyBJT0ggKi8KIAkJcmV0dmFsID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZwZGV2LT5kZXYua29iaiwgJnBjaF9iaW5fYXR0cik7CiAJCWlmIChyZXR2YWwpCiAJCQlnb3RvIGVycl9zeXNmc19jcmVhdGU7CkBAIC02NTMsNyArNzI1LDM4IEBACiAJCSAqIERldmljZTgoVVNCIE9IQ0kgIzAvIFVTQiBFSENJICMwKTphCiAJCSAqLwogCQlpb3dyaXRlMzIoMHgwMDBhZmZhMCwgY2hpcC0+cGNoX3BodWJfYmFzZV9hZGRyZXNzICsgMHgxNCk7CisJCWNoaXAtPnBjaF9vcHRfcm9tX3N0YXJ0X2FkZHJlc3MgPVwKKwkJCQkJCSBQQ0hfUEhVQl9ST01fU1RBUlRfQUREUl9NTDcyMTM7CisJfSBlbHNlIGlmIChpZC0+ZHJpdmVyX2RhdGEgPT0gMykgeyAvKiBNTDcyMjMgSU9IIEJ1cy1tKi8KKwkJLyogc2V0IHRoZSBwcmVmZWNoIHZhbHVlCisJCSAqIERldmljZTgoR2JFKQorCQkgKi8KKwkJaW93cml0ZTMyKDB4MDAwYTAwMDAsIGNoaXAtPnBjaF9waHViX2Jhc2VfYWRkcmVzcyArIDB4MTQpOworCQljaGlwLT5wY2hfb3B0X3JvbV9zdGFydF9hZGRyZXNzID1cCisJCQkJCQkgUENIX1BIVUJfUk9NX1NUQVJUX0FERFJfTUw3MjIzOworCQljaGlwLT5wY2hfbWFjX3N0YXJ0X2FkZHJlc3MgPSBQQ0hfUEhVQl9NQUNfU1RBUlRfQUREUl9NTDcyMjM7CisJfSBlbHNlIGlmIChpZC0+ZHJpdmVyX2RhdGEgPT0gNCkgeyAvKiBNTDcyMjMgSU9IIEJ1cy1uKi8KKwkJcmV0dmFsID0gc3lzZnNfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldi5rb2JqLAorCQkJCQkgICAmZGV2X2F0dHJfcGNoX21hYy5hdHRyKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZXJyX3N5c2ZzX2NyZWF0ZTsKKwkJcmV0dmFsID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZwZGV2LT5kZXYua29iaiwgJnBjaF9iaW5fYXR0cik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGV4aXRfYmluX2F0dHI7CisJCS8qIHNldCB0aGUgcHJlZmVjaCB2YWx1ZQorCQkgKiBEZXZpY2UyKFVTQiBPSENJICMwLDEsMiwzLyBVU0IgRUhDSSAjMCk6YQorCQkgKiBEZXZpY2U0KFNESU8gIzAsMSk6ZgorCQkgKiBEZXZpY2U2KFNBVEEgMik6ZgorCQkgKi8KKwkJaW93cml0ZTMyKDB4MDAwMGZmYTAsIGNoaXAtPnBjaF9waHViX2Jhc2VfYWRkcmVzcyArIDB4MTQpOworCQkvKiBzZXQgdGhlIGludGVycnVwdCBkZWxheSB2YWx1ZSAqLworCQlpb3dyaXRlMzIoMHgyNSwgY2hpcC0+cGNoX3BodWJfYmFzZV9hZGRyZXNzICsgMHgxNDApOworCQljaGlwLT5wY2hfb3B0X3JvbV9zdGFydF9hZGRyZXNzID1cCisJCQkJCQkgUENIX1BIVUJfUk9NX1NUQVJUX0FERFJfTUw3MjIzOworCQljaGlwLT5wY2hfbWFjX3N0YXJ0X2FkZHJlc3MgPSBQQ0hfUEhVQl9NQUNfU1RBUlRfQUREUl9NTDcyMjM7CiAJfQorCisJY2hpcC0+aW9oX3R5cGUgPSBpZC0+ZHJpdmVyX2RhdGE7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGNoaXApOwogCiAJcmV0dXJuIDA7CkBAIC03MzMsNiArODM2LDggQEAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2hfcGh1Yl9wY2lkZXZfaWRbXSA9IHsKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBQQ0lfREVWSUNFX0lEX1BDSDFfUEhVQiksICAgICAgIDEsICB9LAogCXsgUENJX1ZERVZJQ0UoUk9ITSwgUENJX0RFVklDRV9JRF9ST0hNX01MNzIxM19QSFVCKSwgMiwgIH0sCisJeyBQQ0lfVkRFVklDRShST0hNLCBQQ0lfREVWSUNFX0lEX1JPSE1fTUw3MjIzX21QSFVCKSwgMywgIH0sCisJeyBQQ0lfVkRFVklDRShST0hNLCBQQ0lfREVWSUNFX0lEX1JPSE1fTUw3MjIzX25QSFVCKSwgNCwgIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBjaF9waHViX3BjaWRldl9pZCk7CkBAIC03NTksNSArODY0LDUgQEAKIG1vZHVsZV9pbml0KHBjaF9waHViX3BjaV9pbml0KTsKIG1vZHVsZV9leGl0KHBjaF9waHViX3BjaV9leGl0KTsKIAotTU9EVUxFX0RFU0NSSVBUSU9OKCJQQ0ggUGFja2V0IEh1YiBQQ0kgRHJpdmVyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkludGVsIEVHMjBUIFBDSC9PS0kgU0VNSUNPTkRVQ1RPUiBJT0goTUw3MjEzL01MNzIyMykgUEhVQiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3B0aS5jIGIvZHJpdmVycy9taXNjL3B0aS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNmY5MjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21pc2MvcHRpLmMKQEAgLTAsMCArMSw5ODAgQEAKKy8qCisgKiAgcHRpLmMgLSBQVEkgZHJpdmVyIGZvciBjSlRBRyBkYXRhIGV4dHJhdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIEludGVsIDIwMTAKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqCisgKiBUaGUgUFRJIChQYXJhbGxlbCBUcmFjZSBJbnRlcmZhY2UpIGRyaXZlciBkaXJlY3RzIHRyYWNlIGRhdGEgcm91dGVkIGZyb20KKyAqIHZhcmlvdXMgcGFydHMgaW4gdGhlIHN5c3RlbSBvdXQgdGhyb3VnaCB0aGUgSW50ZWwgUGVud2VsbCBQVEkgcG9ydCBhbmQKKyAqIG91dCBvZiB0aGUgbW9iaWxlIGRldmljZSBmb3IgYW5hbHlzaXMgd2l0aCBhIGRlYnVnZ2luZyB0b29sCisgKiAoTGF1dGVyYmFjaCwgRmlkbykuIFRoaXMgaXMgcGFydCBvZiBhIHNvbHV0aW9uIGZvciB0aGUgTUlQSSBQMTE0OS43LAorICogY29tcGFjdCBKVEFHLCBzdGFuZGFyZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wdGkuaD4KKworI2RlZmluZSBEUklWRVJOQU1FCQkicHRpIgorI2RlZmluZSBQQ0lOQU1FCQkJInBjaVBUSSIKKyNkZWZpbmUgVFRZTkFNRQkJCSJ0dHlQVEkiCisjZGVmaW5lIENIQVJOQU1FCQkicHRpIgorI2RlZmluZSBQVElUVFlfTUlOT1JfU1RBUlQJMAorI2RlZmluZSBQVElUVFlfTUlOT1JfTlVNCTIKKyNkZWZpbmUgTUFYX0FQUF9JRFMJCTE2ICAgLyogMTI4IGNoYW5uZWwgaWRzIC8gdTggYml0IHNpemUgKi8KKyNkZWZpbmUgTUFYX09TX0lEUwkJMTYgICAvKiAxMjggY2hhbm5lbCBpZHMgLyB1OCBiaXQgc2l6ZSAqLworI2RlZmluZSBNQVhfTU9ERU1fSURTCQkxNiAgIC8qIDEyOCBjaGFubmVsIGlkcyAvIHU4IGJpdCBzaXplICovCisjZGVmaW5lIE1PREVNX0JBU0VfSUQJCTcxICAgLyogbW9kZW0gbWFzdGVyIElEIGFkZHJlc3MgICAgKi8KKyNkZWZpbmUgQ09OVFJPTF9JRAkJNzIgICAvKiBjb250cm9sIG1hc3RlciBJRCBhZGRyZXNzICAqLworI2RlZmluZSBDT05TT0xFX0lECQk3MyAgIC8qIGNvbnNvbGUgbWFzdGVyIElEIGFkZHJlc3MgICovCisjZGVmaW5lIE9TX0JBU0VfSUQJCTc0ICAgLyogYmFzZSBPUyBtYXN0ZXIgSUQgYWRkcmVzcyAgKi8KKyNkZWZpbmUgQVBQX0JBU0VfSUQJCTgwICAgLyogYmFzZSBBcHAgbWFzdGVyIElEIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ09OVFJPTF9GUkFNRV9MRU4JMzIgICAvKiBQVEkgY29udHJvbCBmcmFtZSBtYXhpbXVtIHNpemUgKi8KKyNkZWZpbmUgVVNFUl9DT1BZX1NJWkUJCTgxOTIgLyogOEtiIGJ1ZmZlciBmb3IgdXNlciBzcGFjZSBjb3B5ICovCisjZGVmaW5lIEFQRVJUVVJFXzE0CQkweDM4MDAwMDAgLyogb2Zmc2V0IHRvIGZpcnN0IE9TIHdyaXRlIGFkZHIgKi8KKyNkZWZpbmUgQVBFUlRVUkVfTEVOCQkweDQwMDAwMCAgLyogYWRkcmVzcyBsZW5ndGggKi8KKworc3RydWN0IHB0aV90dHkgeworCXN0cnVjdCBwdGlfbWFzdGVyY2hhbm5lbCAqbWM7Cit9OworCitzdHJ1Y3QgcHRpX2RldiB7CisJc3RydWN0IHR0eV9wb3J0IHBvcnQ7CisJdW5zaWduZWQgbG9uZyBwdGlfYWRkcjsKKwl1bnNpZ25lZCBsb25nIGFwZXJ0dXJlX2Jhc2U7CisJdm9pZCBfX2lvbWVtICpwdGlfaW9hZGRyOworCXU4IGlhX2FwcFtNQVhfQVBQX0lEU107CisJdTggaWFfb3NbTUFYX09TX0lEU107CisJdTggaWFfbW9kZW1bTUFYX01PREVNX0lEU107Cit9OworCisvKgorICogVGhpcyBwcm90ZWN0cyBhY2Nlc3MgdG8gaWFfYXBwLCBpYV9vcywgYW5kIGlhX21vZGVtLAorICogd2hpY2gga2VlcHMgdHJhY2sgb2YgY2hhbm5lbHMgYWxsb2NhdGVkIGluCisgKiBhbiBhcGVydHVyZSB3cml0ZSBpZC4KKyAqLworc3RhdGljIERFRklORV9NVVRFWChhbGxvY2xvY2spOworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX2lkc1tdIF9fZGV2aW5pdGNvbnN0ID0geworCQl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDgyQil9LAorCQl7MH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgdHR5X2RyaXZlciAqcHRpX3R0eV9kcml2ZXI7CitzdGF0aWMgc3RydWN0IHB0aV9kZXYgKmRydl9kYXRhOworCitzdGF0aWMgdW5zaWduZWQgaW50IHB0aV9jb25zb2xlX2NoYW5uZWw7CitzdGF0aWMgdW5zaWduZWQgaW50IHB0aV9jb250cm9sX2NoYW5uZWw7CisKKy8qKgorICogIHB0aV93cml0ZV90b19hcGVydHVyZSgpLSBUaGUgcHJpdmF0ZSB3cml0ZSBmdW5jdGlvbiB0byBQVEkgSFcuCisgKgorICogIEBtYzogVGhlICdhcGVydHVyZScuIEl0J3MgcGFydCBvZiBhIHdyaXRlIGFkZHJlc3MgdGhhdCBob2xkcworICogICAgICAgYSBtYXN0ZXIgYW5kIGNoYW5uZWwgSUQuCisgKiAgQGJ1ZjogRGF0YSBiZWluZyB3cml0dGVuIHRvIHRoZSBIVyB0aGF0IHdpbGwgdWx0aW1hdGVseSBiZSBzZWVuCisgKiAgICAgICAgaW4gYSBkZWJ1Z2dpbmcgdG9vbCAoRmlkbywgTGF1dGVyYmFjaCkuCisgKiAgQGxlbjogU2l6ZSBvZiBidWZmZXIuCisgKgorICogIFNpbmNlIGVhY2ggYXBlcnR1cmUgaXMgc3BlY2lmaWVkIGJ5IGEgdW5pcXVlCisgKiAgbWFzdGVyL2NoYW5uZWwgSUQsIG5vIHR3byBwcm9jZXNzZXMgd2lsbCBiZSB3cml0aW5nCisgKiAgdG8gdGhlIHNhbWUgYXBlcnR1cmUgYXQgdGhlIHNhbWUgdGltZSBzbyBubyBsb2NrIGlzIHJlcXVpcmVkLiBUaGUKKyAqICBQVEktT3V0cHV0IGFnZW50IHdpbGwgc2VuZCB0aGVzZSBvdXQgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSBhcnJpdmVkLCBhbmQKKyAqICB0aHVzLCBpdCB3aWxsIGludGVybWl4IHRoZXNlIG1lc3NhZ2VzLiBUaGUgZGVidWcgdG9vbCBjYW4gdGhlbiBsYXRlcgorICogIHJlZ3JvdXAgdGhlIGFwcHJvcHJpYXRlIG1lc3NhZ2Ugc2VnbWVudHMgdG9nZXRoZXIgcmVjb25zdGl0dXRpbmcgZWFjaAorICogIG1lc3NhZ2UuCisgKi8KK3N0YXRpYyB2b2lkIHB0aV93cml0ZV90b19hcGVydHVyZShzdHJ1Y3QgcHRpX21hc3RlcmNoYW5uZWwgKm1jLAorCQkJCSAgdTggKmJ1ZiwKKwkJCQkgIGludCBsZW4pCit7CisJaW50IGR3b3JkY250OworCWludCBmaW5hbDsKKwlpbnQgaTsKKwl1MzIgcHRpd29yZDsKKwl1MzIgX19pb21lbSAqYXBlcnR1cmU7CisJdTggKnAgPSBidWY7CisKKwkvKgorCSAqIGNhbGN1bGF0ZSB0aGUgYXBlcnR1cmUgb2Zmc2V0IGZyb20gdGhlIGJhc2UgdXNpbmcgdGhlIG1hc3RlciBhbmQKKwkgKiBjaGFubmVsIGlkJ3MuCisJICovCisJYXBlcnR1cmUgPSBkcnZfZGF0YS0+cHRpX2lvYWRkciArIChtYy0+bWFzdGVyIDw8IDE1KQorCQkrIChtYy0+Y2hhbm5lbCA8PCA4KTsKKworCWR3b3JkY250ID0gbGVuID4+IDI7CisJZmluYWwgPSBsZW4gLSAoZHdvcmRjbnQgPDwgMik7CSAgICAvKiBmaW5hbCA9IHRyYWlsaW5nIGJ5dGVzICAgICovCisJaWYgKGZpbmFsID09IDAgJiYgZHdvcmRjbnQgIT0gMCkgeyAgLyogYWx3YXlzIG5lZWQgYSBmaW5hbCBkd29yZCAqLworCQlmaW5hbCArPSA0OworCQlkd29yZGNudC0tOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBkd29yZGNudDsgaSsrKSB7CisJCXB0aXdvcmQgPSBiZTMyX3RvX2NwdSgqKHUzMiAqKXApOworCQlwICs9IDQ7CisJCWlvd3JpdGUzMihwdGl3b3JkLCBhcGVydHVyZSk7CisJfQorCisJYXBlcnR1cmUgKz0gUFRJX0xBU1REV09SRF9EVFM7CS8qIGFkZGluZyBEVFMgc2lnbmFscyB0aGF0IGlzIEVPTSAqLworCisJcHRpd29yZCA9IDA7CisJZm9yIChpID0gMDsgaSA8IGZpbmFsOyBpKyspCisJCXB0aXdvcmQgfD0gKnArKyA8PCAoMjQtKDgqaSkpOworCisJaW93cml0ZTMyKHB0aXdvcmQsIGFwZXJ0dXJlKTsKKwlyZXR1cm47Cit9CisKKy8qKgorICogIHB0aV9jb250cm9sX2ZyYW1lX2J1aWx0X2FuZF9zZW50KCktIGNvbnRyb2wgZnJhbWUgYnVpbGQgYW5kIHNlbmQgZnVuY3Rpb24uCisgKgorICogIEBtYzogVGhlIG1hc3RlciAvIGNoYW5uZWwgc3RydWN0dXJlIG9uIHdoaWNoIHRoZSBmdW5jdGlvbgorICogICAgICAgYnVpbHQgYSBjb250cm9sIGZyYW1lLgorICoKKyAqICBUbyBiZSBhYmxlIHRvIHBvc3QgcHJvY2VzcyB0aGUgUFRJIGNvbnRlbnRzIG9uIGhvc3Qgc2lkZSwgYSBjb250cm9sIGZyYW1lCisgKiAgaXMgYWRkZWQgYmVmb3JlIHNlbmRpbmcgYW55IFBUSSBjb250ZW50LiBTbyB0aGUgaG9zdCBzaWRlIGtub3dzIG9uCisgKiAgZWFjaCBQVEkgZnJhbWUgdGhlIG5hbWUgb2YgdGhlIHRocmVhZCB1c2luZyBhIGRlZGljYXRlZCBtYXN0ZXIgLyBjaGFubmVsLgorICogIFRoZSB0aHJlYWQgbmFtZSBpcyByZXRyaWV2ZWQgZnJvbSB0aGUgJ2N1cnJlbnQnIGdsb2JhbCB2YXJpYWJsZS4KKyAqICBUaGlzIGZ1bmN0aW9uIGJ1aWxkcyB0aGlzIGZyYW1lIGFuZCBzZW5kcyBpdCB0byBhIG1hc3RlciBJRCBDT05UUk9MX0lELgorICogIFRoZSBvdmVyaGVhZCBpcyBvbmx5IDMyIGJ5dGVzIHNpbmNlIHRoZSBkcml2ZXIgb25seSB3cml0ZXMgdG8gSFcKKyAqICBpbiAzMiBieXRlIGNodW5rcy4KKyAqLworCitzdGF0aWMgdm9pZCBwdGlfY29udHJvbF9mcmFtZV9idWlsdF9hbmRfc2VudChzdHJ1Y3QgcHRpX21hc3RlcmNoYW5uZWwgKm1jKQoreworCXN0cnVjdCBwdGlfbWFzdGVyY2hhbm5lbCBtY2NvbnRyb2wgPSB7Lm1hc3RlciA9IENPTlRST0xfSUQsCisJCQkJCSAgICAgIC5jaGFubmVsID0gMH07CisJY29uc3QgY2hhciAqY29udHJvbF9mb3JtYXQgPSAiJTNkICUzZCAlcyI7CisJdTggY29udHJvbF9mcmFtZVtDT05UUk9MX0ZSQU1FX0xFTl07CisKKwkvKgorCSAqIFNpbmNlIHdlIGFjY2VzcyB0aGUgY29tbSBtZW1iZXIgaW4gY3VycmVudCdzIHRhc2tfc3RydWN0LAorCSAqIHdlIG9ubHkgbmVlZCB0byBiZSBhcyBsYXJnZSBhcyB3aGF0ICdjb21tJyBpbiB0aGF0CisJICogc3RydWN0dXJlIGlzLgorCSAqLworCWNoYXIgY29tbVtUQVNLX0NPTU1fTEVOXTsKKworCWlmICghaW5faW50ZXJydXB0KCkpCisJCWdldF90YXNrX2NvbW0oY29tbSwgY3VycmVudCk7CisJZWxzZQorCQlzdHJuY3B5KGNvbW0sICJJbnRlcnJ1cHQiLCBUQVNLX0NPTU1fTEVOKTsKKworCS8qIEFic29sdXRlbHkgZW5zdXJlIG91ciBidWZmZXIgaXMgemVybyB0ZXJtaW5hdGVkLiAqLworCWNvbW1bVEFTS19DT01NX0xFTi0xXSA9IDA7CisKKwltY2NvbnRyb2wuY2hhbm5lbCA9IHB0aV9jb250cm9sX2NoYW5uZWw7CisJcHRpX2NvbnRyb2xfY2hhbm5lbCA9IChwdGlfY29udHJvbF9jaGFubmVsICsgMSkgJiAweDdmOworCisJc25wcmludGYoY29udHJvbF9mcmFtZSwgQ09OVFJPTF9GUkFNRV9MRU4sIGNvbnRyb2xfZm9ybWF0LCBtYy0+bWFzdGVyLAorCQltYy0+Y2hhbm5lbCwgY29tbSk7CisJcHRpX3dyaXRlX3RvX2FwZXJ0dXJlKCZtY2NvbnRyb2wsIGNvbnRyb2xfZnJhbWUsIHN0cmxlbihjb250cm9sX2ZyYW1lKSk7Cit9CisKKy8qKgorICogIHB0aV93cml0ZV9mdWxsX2ZyYW1lX3RvX2FwZXJ0dXJlKCktIGhpZ2ggbGV2ZWwgZnVuY3Rpb24gdG8KKyAqCQkJCQl3cml0ZSB0byBQVEkuCisgKgorICogIEBtYzogIFRoZSAnYXBlcnR1cmUnLiBJdCdzIHBhcnQgb2YgYSB3cml0ZSBhZGRyZXNzIHRoYXQgaG9sZHMKKyAqICAgICAgICBhIG1hc3RlciBhbmQgY2hhbm5lbCBJRC4KKyAqICBAYnVmOiBEYXRhIGJlaW5nIHdyaXR0ZW4gdG8gdGhlIEhXIHRoYXQgd2lsbCB1bHRpbWF0ZWx5IGJlIHNlZW4KKyAqICAgICAgICBpbiBhIGRlYnVnZ2luZyB0b29sIChGaWRvLCBMYXV0ZXJiYWNoKS4KKyAqICBAbGVuOiBTaXplIG9mIGJ1ZmZlci4KKyAqCisgKiAgQWxsIHRocmVhZHMgc2VuZGluZyBkYXRhIChlaXRoZXIgY29uc29sZSwgdXNlciBzcGFjZSBhcHBsaWNhdGlvbiwgLi4uKQorICogIGFyZSBjYWxsaW5nIHRoZSBoaWdoIGxldmVsIGZ1bmN0aW9uIHRvIHdyaXRlIHRvIFBUSSBtZWFuaW5nIHRoYXQgaXQgaXMKKyAqICBwb3NzaWJsZSB0byBhZGQgYSBjb250cm9sIGZyYW1lIGJlZm9yZSBzZW5kaW5nIHRoZSBjb250ZW50LgorICovCitzdGF0aWMgdm9pZCBwdGlfd3JpdGVfZnVsbF9mcmFtZV90b19hcGVydHVyZShzdHJ1Y3QgcHRpX21hc3RlcmNoYW5uZWwgKm1jLAorCQkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorCQkJCQkJaW50IGxlbikKK3sKKwlwdGlfY29udHJvbF9mcmFtZV9idWlsdF9hbmRfc2VudChtYyk7CisJcHRpX3dyaXRlX3RvX2FwZXJ0dXJlKG1jLCAodTggKilidWYsIGxlbik7Cit9CisKKy8qKgorICogZ2V0X2lkKCktIEFsbG9jYXRlIGEgbWFzdGVyIGFuZCBjaGFubmVsIElELgorICoKKyAqIEBpZF9hcnJheTogYW4gYXJyYXkgb2YgYml0cyByZXByZXNlbnRpbmcgd2hhdCBjaGFubmVsCisgKiAgICAgICAgICAgIGlkJ3MgYXJlIGFsbG9jYXRlZCBmb3Igd3JpdGluZy4KKyAqIEBtYXhfaWRzOiAgVGhlIG1heCBhbW91bnQgb2YgYXZhaWxhYmxlIHdyaXRlIElEcyB0byB1c2UuCisgKiBAYmFzZV9pZDogIFRoZSBzdGFydGluZyBTVyBjaGFubmVsIElELCBiYXNlZCBvbiB0aGUgSW50ZWwKKyAqICAgICAgICAgICAgUFRJIGFyY2guCisgKgorICogUmV0dXJuczoKKyAqCXB0aV9tYXN0ZXJjaGFubmVsIHN0cnVjdCB3aXRoIG1hc3RlciwgY2hhbm5lbCBJRCBhZGRyZXNzCisgKgkwIGZvciBlcnJvcgorICoKKyAqIEVhY2ggYml0IGluIHRoZSBhcnJheXMgaWFfYXBwIGFuZCBpYV9vcyBjb3JyZXNwb25kIHRvIGEgbWFzdGVyIGFuZAorICogY2hhbm5lbCBpZC4gVGhlIGJpdCBpcyBvbmUgaWYgdGhlIGlkIGlzIHRha2VuIGFuZCAwIGlmIGZyZWUuIEZvcgorICogZXZlcnkgbWFzdGVyIHRoZXJlIGFyZSAxMjggY2hhbm5lbCBpZCdzLgorICovCitzdGF0aWMgc3RydWN0IHB0aV9tYXN0ZXJjaGFubmVsICpnZXRfaWQodTggKmlkX2FycmF5LCBpbnQgbWF4X2lkcywgaW50IGJhc2VfaWQpCit7CisJc3RydWN0IHB0aV9tYXN0ZXJjaGFubmVsICptYzsKKwlpbnQgaSwgaiwgbWFzazsKKworCW1jID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHB0aV9tYXN0ZXJjaGFubmVsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKG1jID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJLyogbG9vayBmb3IgYSBieXRlIHdpdGggYSBmcmVlIGJpdCAqLworCWZvciAoaSA9IDA7IGkgPCBtYXhfaWRzOyBpKyspCisJCWlmIChpZF9hcnJheVtpXSAhPSAweGZmKQorCQkJYnJlYWs7CisJaWYgKGkgPT0gbWF4X2lkcykgeworCQlrZnJlZShtYyk7CisJCXJldHVybiBOVUxMOworCX0KKwkvKiBmaW5kIHRoZSBiaXQgaW4gdGhlIDEyOCBwb3NzaWJsZSBjaGFubmVsIG9wcG9ydHVuaXRpZXMgKi8KKwltYXNrID0gMHg4MDsKKwlmb3IgKGogPSAwOyBqIDwgODsgaisrKSB7CisJCWlmICgoaWRfYXJyYXlbaV0gJiBtYXNrKSA9PSAwKQorCQkJYnJlYWs7CisJCW1hc2sgPj49IDE7CisJfQorCisJLyogZ3JhYiBpdCAqLworCWlkX2FycmF5W2ldIHw9IG1hc2s7CisJbWMtPm1hc3RlciAgPSBiYXNlX2lkOworCW1jLT5jaGFubmVsID0gKChpICYgMHhmKTw8MykgKyBqOworCS8qIHdyaXRlIG5ldyBtYXN0ZXIgSWQgLyBjaGFubmVsIElkIGFsbG9jYXRpb24gdG8gY2hhbm5lbCBjb250cm9sICovCisJcHRpX2NvbnRyb2xfZnJhbWVfYnVpbHRfYW5kX3NlbnQobWMpOworCXJldHVybiBtYzsKK30KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgdGhyZWUgZnVuY3Rpb25zOgorICogcHRpX3JlcXVlc3RfbWFzdGVyY2FoYW5uZWwoKSwgbWlwaV9yZWxlYXNlX21hc3RlcmNoYW5uZWwoKQorICogYW5kIHB0aV93cml0ZWRhdGEoKSBhcmUgYW4gQVBJIGZvciBvdGhlciBrZXJuZWwgZHJpdmVycyB0bworICogYWNjZXNzIFBUSS4KKyAqLworCisvKioKKyAqIHB0aV9yZXF1ZXN0X21hc3RlcmNoYW5uZWwoKS0gS2VybmVsIEFQSSBmdW5jdGlvbiB1c2VkIHRvIGFsbG9jYXRlCisgKgkJCQlhIG1hc3RlciwgY2hhbm5lbCBJRCBhZGRyZXNzCisgKgkJCQl0byB3cml0ZSB0byBQVEkgSFcuCisgKgorICogQHR5cGU6IDAtIHJlcXVlc3QgQXBwbGljYXRpb24gIG1hc3RlciwgY2hhbm5lbCBhcGVydHVyZSBJRCB3cml0ZSBhZGRyZXNzLgorICogICAgICAgIDEtIHJlcXVlc3QgT1MgbWFzdGVyLCBjaGFubmVsIGFwZXJ0dXJlIElEIHdyaXRlCisgKiAgICAgICAgICAgYWRkcmVzcy4KKyAqICAgICAgICAyLSByZXF1ZXN0IE1vZGVtIG1hc3RlciwgY2hhbm5lbCBhcGVydHVyZSBJRAorICogICAgICAgICAgIHdyaXRlIGFkZHJlc3MuCisgKiAgICAgICAgT3RoZXIgdmFsdWVzLCBlcnJvci4KKyAqCisgKiBSZXR1cm5zOgorICoJcHRpX21hc3RlcmNoYW5uZWwgc3RydWN0CisgKgkwIGZvciBlcnJvcgorICovCitzdHJ1Y3QgcHRpX21hc3RlcmNoYW5uZWwgKnB0aV9yZXF1ZXN0X21hc3RlcmNoYW5uZWwodTggdHlwZSkKK3sKKwlzdHJ1Y3QgcHRpX21hc3RlcmNoYW5uZWwgKm1jOworCisJbXV0ZXhfbG9jaygmYWxsb2Nsb2NrKTsKKworCXN3aXRjaCAodHlwZSkgeworCisJY2FzZSAwOgorCQltYyA9IGdldF9pZChkcnZfZGF0YS0+aWFfYXBwLCBNQVhfQVBQX0lEUywgQVBQX0JBU0VfSUQpOworCQlicmVhazsKKworCWNhc2UgMToKKwkJbWMgPSBnZXRfaWQoZHJ2X2RhdGEtPmlhX29zLCBNQVhfT1NfSURTLCBPU19CQVNFX0lEKTsKKwkJYnJlYWs7CisKKwljYXNlIDI6CisJCW1jID0gZ2V0X2lkKGRydl9kYXRhLT5pYV9tb2RlbSwgTUFYX01PREVNX0lEUywgTU9ERU1fQkFTRV9JRCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW1jID0gTlVMTDsKKwl9CisKKwltdXRleF91bmxvY2soJmFsbG9jbG9jayk7CisJcmV0dXJuIG1jOworfQorRVhQT1JUX1NZTUJPTF9HUEwocHRpX3JlcXVlc3RfbWFzdGVyY2hhbm5lbCk7CisKKy8qKgorICogcHRpX3JlbGVhc2VfbWFzdGVyY2hhbm5lbCgpLSBLZXJuZWwgQVBJIGZ1bmN0aW9uIHVzZWQgdG8gcmVsZWFzZQorICoJCQkJYSBtYXN0ZXIsIGNoYW5uZWwgSUQgYWRkcmVzcworICoJCQkJdXNlZCB0byB3cml0ZSB0byBQVEkgSFcuCisgKgorICogQG1jOiBtYXN0ZXIsIGNoYW5uZWwgYXBldHVyZSBJRCBhZGRyZXNzIHRvIGJlIHJlbGVhc2VkLgorICovCit2b2lkIHB0aV9yZWxlYXNlX21hc3RlcmNoYW5uZWwoc3RydWN0IHB0aV9tYXN0ZXJjaGFubmVsICptYykKK3sKKwl1OCBtYXN0ZXIsIGNoYW5uZWwsIGk7CisKKwltdXRleF9sb2NrKCZhbGxvY2xvY2spOworCisJaWYgKG1jKSB7CisJCW1hc3RlciA9IG1jLT5tYXN0ZXI7CisJCWNoYW5uZWwgPSBtYy0+Y2hhbm5lbDsKKworCQlpZiAobWFzdGVyID09IEFQUF9CQVNFX0lEKSB7CisJCQlpID0gY2hhbm5lbCA+PiAzOworCQkJZHJ2X2RhdGEtPmlhX2FwcFtpXSAmPSAgfigweDgwPj4oY2hhbm5lbCAmIDB4NykpOworCQl9IGVsc2UgaWYgKG1hc3RlciA9PSBPU19CQVNFX0lEKSB7CisJCQlpID0gY2hhbm5lbCA+PiAzOworCQkJZHJ2X2RhdGEtPmlhX29zW2ldICY9IH4oMHg4MD4+KGNoYW5uZWwgJiAweDcpKTsKKwkJfSBlbHNlIHsKKwkJCWkgPSBjaGFubmVsID4+IDM7CisJCQlkcnZfZGF0YS0+aWFfbW9kZW1baV0gJj0gfigweDgwPj4oY2hhbm5lbCAmIDB4NykpOworCQl9CisKKwkJa2ZyZWUobWMpOworCX0KKworCW11dGV4X3VubG9jaygmYWxsb2Nsb2NrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHB0aV9yZWxlYXNlX21hc3RlcmNoYW5uZWwpOworCisvKioKKyAqIHB0aV93cml0ZWRhdGEoKS0gS2VybmVsIEFQSSBmdW5jdGlvbiB1c2VkIHRvIHdyaXRlIHRyYWNlCisgKiAgICAgICAgICAgICAgICAgIGRlYnVnZ2luZyBkYXRhIHRvIFBUSSBIVy4KKyAqCisgKiBAbWM6ICAgIE1hc3RlciwgY2hhbm5lbCBhcGVydHVyZSBJRCBhZGRyZXNzIHRvIHdyaXRlIHRvLgorICogICAgICAgICBOdWxsIHZhbHVlIHdpbGwgcmV0dXJuIHdpdGggbm8gd3JpdGUgb2NjdXJyaW5nLgorICogQGJ1ZjogICBUcmFjZSBkZWJ1Z2luZyBkYXRhIHRvIHdyaXRlIHRvIHRoZSBQVEkgSFcuCisgKiAgICAgICAgIE51bGwgdmFsdWUgd2lsbCByZXR1cm4gd2l0aCBubyB3cml0ZSBvY2N1cnJpbmcuCisgKiBAY291bnQ6IFNpemUgb2YgYnVmLiBWYWx1ZSBvZiAwIG9yIGEgbmVnYXRpdmUgbnVtYmVyIHdpbGwKKyAqICAgICAgICAgcmV0dXJuIHdpdGggbm8gd3JpdGUgb2NjdXJpbmcuCisgKi8KK3ZvaWQgcHRpX3dyaXRlZGF0YShzdHJ1Y3QgcHRpX21hc3RlcmNoYW5uZWwgKm1jLCB1OCAqYnVmLCBpbnQgY291bnQpCit7CisJLyoKKwkgKiBzaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIGV4cG9ydGVkLCB0aGlzIGlzIHRyZWF0ZWQgbGlrZSBhbgorCSAqIEFQSSBmdW5jdGlvbiwgdGh1cywgYWxsIHBhcmFtZXRlcnMgc2hvdWxkCisJICogYmUgY2hlY2tlZCBmb3IgdmFsaWRpdHkuCisJICovCisJaWYgKChtYyAhPSBOVUxMKSAmJiAoYnVmICE9IE5VTEwpICYmIChjb3VudCA+IDApKQorCQlwdGlfd3JpdGVfdG9fYXBlcnR1cmUobWMsIGJ1ZiwgY291bnQpOworCXJldHVybjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHB0aV93cml0ZWRhdGEpOworCisvKioKKyAqIHB0aV9wY2lfcmVtb3ZlKCktIERyaXZlciBleGl0IG1ldGhvZCB0byByZW1vdmUgUFRJIGZyb20KKyAqCQkgICBQQ0kgYnVzLgorICogQHBkZXY6IHZhcmlhYmxlIGNvbnRhaW5pbmcgcGNpIGluZm8gb2YgUFRJLgorICovCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgcHRpX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IHB0aV9kZXYgKmRydl9kYXRhOworCisJZHJ2X2RhdGEgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaWYgKGRydl9kYXRhICE9IE5VTEwpIHsKKwkJcGNpX2lvdW5tYXAocGRldiwgZHJ2X2RhdGEtPnB0aV9pb2FkZHIpOworCQlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJCWtmcmVlKGRydl9kYXRhKTsKKwkJcGNpX3JlbGVhc2VfcmVnaW9uKHBkZXYsIDEpOworCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJfQorfQorCisvKgorICogZm9yIHRoZSB0dHlfZHJpdmVyXyooKSBiYXNpYyBmdW5jdGlvbiBkZXNjcmlwdGlvbnMsIHNlZSB0dHlfZHJpdmVyLmguCisgKiBTcGVjaWZpYyBoZWFkZXIgY29tbWVudHMgbWFkZSBmb3IgUFRJLXJlbGF0ZWQgc3BlY2lmaWNzLgorICovCisKKy8qKgorICogcHRpX3R0eV9kcml2ZXJfb3BlbigpLSBPcGVuIGFuIEFwcGxpY2F0aW9uIG1hc3RlciwgY2hhbm5lbCBhcGVydHVyZQorICogSUQgdG8gdGhlIFBUSSBkZXZpY2UgdmlhIHR0eSBkZXZpY2UuCisgKgorICogQHR0eTogdHR5IGludGVyZmFjZS4KKyAqIEBmaWxwOiBmaWxwIGludGVyZmFjZSBwYXNlZCB0byB0dHlfcG9ydF9vcGVuKCkgY2FsbC4KKyAqCisgKiBSZXR1cm5zOgorICoJaW50LCAwIGZvciBzdWNjZXNzCisgKglvdGhlcndpc2UsIGZhaWwgdmFsdWUKKyAqCisgKiBUaGUgbWFpbiBwdXJwb3NlIG9mIHVzaW5nIHRoZSB0dHkgZGV2aWNlIGludGVyZmFjZSBpcyBmb3IKKyAqIGVhY2ggdHR5IHBvcnQgdG8gaGF2ZSBhIHVuaXF1ZSBQVEkgd3JpdGUgYXBlcnR1cmUuICBJbiBhbgorICogZXhhbXBsZSB1c2UgY2FzZSwgdHR5UFRJMCBnZXRzIHN5c2xvZ2QgYW5kIGFuIEFQUCBhcGVydHVyZQorICogSUQgYW5kIHR0eVBUSTEgaXMgd2hlcmUgdGhlIG5fdHJhY2VzaW5rIGxkaXNjIGhvb2tzIHRvIHJvdXRlCisgKiBtb2RlbSBtZXNzYWdlcyBpbnRvIFBUSS4gIE1vZGVtIHRyYWNlIGRhdGEgZG9lcyBub3QgaGF2ZSB0bworICogZ28gdG8gdHR5UFRJMSwgYnV0IHR0eVBUSTAgYW5kIHR0eVBUSTEgZG8gbmVlZCB0byBiZSBkaXN0aW5jdAorICogbWFzdGVyIElEcy4gIFRoZXNlIG1lc3NhZ2VzIGdvIHRocm91Z2ggdGhlIFBUSSBIVyBhbmQgb3V0IG9mCisgKiB0aGUgaGFuZGhlbGQgcGxhdGZvcm0gYW5kIHRvIHRoZSBGaWRvL0xhdXRlcmJhY2ggZGV2aWNlLgorICovCitzdGF0aWMgaW50IHB0aV90dHlfZHJpdmVyX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJLyoKKwkgKiB3ZSBhY3R1YWxseSB3YW50IHRvIGFsbG9jYXRlIGEgbmV3IGNoYW5uZWwgcGVyIG9wZW4sIHBlcgorCSAqIHN5c3RlbSBhcmNoLiAgSFcgZ2l2ZXMgbW9yZSB0aGFuIHBsZW50eSBjaGFubmVscyBmb3IgYSBzaW5nbGUKKwkgKiBzeXN0ZW0gdGFzayB0byBoYXZlIGl0cyBvd24gY2hhbm5lbCB0byB3cml0ZSB0cmFjZSBkYXRhLiBUaGlzCisJICogYWxzbyByZW1vdmVzIGEgbG9ja2luZyByZXF1aXJlbWVudCBmb3IgdGhlIGFjdHVhbCB3cml0ZQorCSAqIHByb2NlZHVyZS4KKwkgKi8KKwlyZXR1cm4gdHR5X3BvcnRfb3BlbigmZHJ2X2RhdGEtPnBvcnQsIHR0eSwgZmlscCk7Cit9CisKKy8qKgorICogcHRpX3R0eV9kcml2ZXJfY2xvc2UoKS0gY2xvc2UgdHR5IGRldmljZSBhbmQgcmVsZWFzZSBBcHBsaWNhdGlvbgorICogbWFzdGVyLCBjaGFubmVsIGFwZXJ0dXJlIElEIHRvIHRoZSBQVEkgZGV2aWNlIHZpYSB0dHkgZGV2aWNlLgorICoKKyAqIEB0dHk6IHR0eSBpbnRlcmZhY2UuCisgKiBAZmlscDogZmlscCBpbnRlcmZhY2UgcGFzZWQgdG8gdHR5X3BvcnRfY2xvc2UoKSBjYWxsLgorICoKKyAqIFRoZSBtYWluIHB1cnBvc2Ugb2YgdXNpbmcgdGhlIHR0eSBkZXZpY2UgaW50ZXJmYWNlIGlzIHRvIHJvdXRlCisgKiBzeXNsb2cgZGFlbW9uIG1lc3NhZ2VzIHRvIHRoZSBQVEkgSFcgYW5kIG91dCBvZiB0aGUgaGFuZGhlbGQgcGxhdGZvcm0KKyAqIGFuZCB0byB0aGUgRmlkby9MYXV0ZXJiYWNoIGRldmljZS4KKyAqLworc3RhdGljIHZvaWQgcHRpX3R0eV9kcml2ZXJfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJdHR5X3BvcnRfY2xvc2UoJmRydl9kYXRhLT5wb3J0LCB0dHksIGZpbHApOworfQorCisvKioKKyAqIHB0aV90dHlfaW50c3RhbGwoKS0gVXNlZCB0byBzZXQgdXAgc3BlY2lmaWMgbWFzdGVyLWNoYW5uZWxzCisgKgkJICAgICAgIHRvIHR0eSBwb3J0cyBmb3Igb3JnYW5pemF0aW9uYWwgcHVycG9zZXMgd2hlbgorICoJCSAgICAgICB0cmFjaW5nIHZpZXdlZCBmcm9tIGRlYnVnaW5nIHRvb2xzLgorICoKKyAqIEBkcml2ZXI6IHR0eSBkcml2ZXIgaW5mb3JtYXRpb24uCisgKiBAdHR5OiB0dHkgc3RydWN0IGNvbnRhaW5pbmcgcHRpIGluZm9ybWF0aW9uLgorICoKKyAqIFJldHVybnM6CisgKgkwIGZvciBzdWNjZXNzCisgKglvdGhlcndpc2UsIGVycm9yCisgKi8KK3N0YXRpYyBpbnQgcHRpX3R0eV9pbnN0YWxsKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJaW50IGlkeCA9IHR0eS0+aW5kZXg7CisJc3RydWN0IHB0aV90dHkgKnB0aV90dHlfZGF0YTsKKwlpbnQgcmV0ID0gdHR5X2luaXRfdGVybWlvcyh0dHkpOworCisJaWYgKHJldCA9PSAwKSB7CisJCXR0eV9kcml2ZXJfa3JlZl9nZXQoZHJpdmVyKTsKKwkJdHR5LT5jb3VudCsrOworCQlkcml2ZXItPnR0eXNbaWR4XSA9IHR0eTsKKworCQlwdGlfdHR5X2RhdGEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcHRpX3R0eSksIEdGUF9LRVJORUwpOworCQlpZiAocHRpX3R0eV9kYXRhID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlpZiAoaWR4ID09IFBUSVRUWV9NSU5PUl9TVEFSVCkKKwkJCXB0aV90dHlfZGF0YS0+bWMgPSBwdGlfcmVxdWVzdF9tYXN0ZXJjaGFubmVsKDApOworCQllbHNlCisJCQlwdGlfdHR5X2RhdGEtPm1jID0gcHRpX3JlcXVlc3RfbWFzdGVyY2hhbm5lbCgyKTsKKworCQlpZiAocHRpX3R0eV9kYXRhLT5tYyA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTlhJTzsKKwkJdHR5LT5kcml2ZXJfZGF0YSA9IHB0aV90dHlfZGF0YTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHB0aV90dHlfY2xlYW51cCgpLSBVc2VkIHRvIGRlLWFsbG9jYXRlIG1hc3Rlci1jaGFubmVsIHJlc291cmNlcworICoJCSAgICAgIHRpZWQgdG8gdHR5J3Mgb2YgdGhpcyBkcml2ZXIuCisgKgorICogQHR0eTogdHR5IHN0cnVjdCBjb250YWluaW5nIHB0aSBpbmZvcm1hdGlvbi4KKyAqLworc3RhdGljIHZvaWQgcHRpX3R0eV9jbGVhbnVwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IHB0aV90dHkgKnB0aV90dHlfZGF0YSA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJaWYgKHB0aV90dHlfZGF0YSA9PSBOVUxMKQorCQlyZXR1cm47CisJcHRpX3JlbGVhc2VfbWFzdGVyY2hhbm5lbChwdGlfdHR5X2RhdGEtPm1jKTsKKwlrZnJlZSh0dHktPmRyaXZlcl9kYXRhKTsKKwl0dHktPmRyaXZlcl9kYXRhID0gTlVMTDsKK30KKworLyoqCisgKiBwdGlfdHR5X2RyaXZlcl93cml0ZSgpLSAgV3JpdGUgdHJhY2UgZGVidWdnaW5nIGRhdGEgdGhyb3VnaCB0aGUgY2hhcgorICogaW50ZXJmYWNlIHRvIHRoZSBQVEkgSFcuICBQYXJ0IG9mIHRoZSBtaXNjIGRldmljZSBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBAZmlscDogQ29udGFpbnMgcHJpdmF0ZSBkYXRhIHdoaWNoIGlzIHVzZWQgdG8gb2J0YWluCisgKiAgICAgICAgbWFzdGVyLCBjaGFubmVsIHdyaXRlIElELgorICogQGRhdGE6IHRyYWNlIGRhdGEgdG8gYmUgd3JpdHRlbi4KKyAqIEBsZW46ICAjIG9mIGJ5dGUgdG8gd3JpdGUuCisgKgorICogUmV0dXJuczoKKyAqCWludCwgIyBvZiBieXRlcyB3cml0dGVuCisgKglvdGhlcndpc2UsIGVycm9yCisgKi8KK3N0YXRpYyBpbnQgcHRpX3R0eV9kcml2ZXJfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwljb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4pCit7CisJc3RydWN0IHB0aV90dHkgKnB0aV90dHlfZGF0YSA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJaWYgKChwdGlfdHR5X2RhdGEgIT0gTlVMTCkgJiYgKHB0aV90dHlfZGF0YS0+bWMgIT0gTlVMTCkpIHsKKwkJcHRpX3dyaXRlX3RvX2FwZXJ0dXJlKHB0aV90dHlfZGF0YS0+bWMsICh1OCAqKWJ1ZiwgbGVuKTsKKwkJcmV0dXJuIGxlbjsKKwl9CisJLyoKKwkgKiB3ZSBjYW4ndCB3cml0ZSB0byB0aGUgcHRpIGhhcmR3YXJlIGlmIHRoZSBwcml2YXRlIGRyaXZlcl9kYXRhCisJICogYW5kIHRoZSBtYyBhZGRyZXNzIGlzIG5vdCB0aGVyZS4KKwkgKi8KKwllbHNlCisJCXJldHVybiAtRUZBVUxUOworfQorCisvKioKKyAqIHB0aV90dHlfd3JpdGVfcm9vbSgpLSBBbHdheXMgcmV0dXJucyAyMDQ4LgorICoKKyAqIEB0dHk6IGNvbnRhaW5zIHR0eSBpbmZvIG9mIHRoZSBwdGkgZHJpdmVyLgorICovCitzdGF0aWMgaW50IHB0aV90dHlfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXJldHVybiAyMDQ4OworfQorCisvKioKKyAqIHB0aV9jaGFyX29wZW4oKS0gT3BlbiBhbiBBcHBsaWNhdGlvbiBtYXN0ZXIsIGNoYW5uZWwgYXBlcnR1cmUKKyAqIElEIHRvIHRoZSBQVEkgZGV2aWNlLiBQYXJ0IG9mIHRoZSBtaXNjIGRldmljZSBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBAaW5vZGU6IG5vdCB1c2VkLgorICogQGZpbHA6ICBPdXRwdXQtIHdpbGwgaGF2ZSBhIG1hc3RlcmNoYW5uZWwgc3RydWN0IHNldCBjb250YWluaW5nCisgKiAgICAgICAgICAgICAgICAgdGhlIGFsbG9jYXRlZCBhcHBsaWNhdGlvbiBQVEkgYXBlcnR1cmUgd3JpdGUgYWRkcmVzcy4KKyAqCisgKiBSZXR1cm5zOgorICoJaW50LCAwIGZvciBzdWNjZXNzCisgKglvdGhlcndpc2UsIGEgZmFpbCB2YWx1ZQorICovCitzdGF0aWMgaW50IHB0aV9jaGFyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHB0aV9tYXN0ZXJjaGFubmVsICptYzsKKworCS8qCisJICogV2UgcmVhbGx5IGRvIHdhbnQgdG8gZmFpbCBpbW1lZGlhdGVseSBpZgorCSAqIHB0aV9yZXF1ZXN0X21hc3RlcmNoYW5uZWwoKSBmYWlscywKKwkgKiBiZWZvcmUgYXNzaWduaW5nIHRoZSB2YWx1ZSB0byBmaWxwLT5wcml2YXRlX2RhdGEuCisJICogU2xpZ2h0bHkgZWFzaWVyIHRvIGRlYnVnIGlmIHRoaXMgZHJpdmVyIG5lZWRzIGRlYnVnZ2luZy4KKwkgKi8KKwltYyA9IHB0aV9yZXF1ZXN0X21hc3RlcmNoYW5uZWwoMCk7CisJaWYgKG1jID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCWZpbHAtPnByaXZhdGVfZGF0YSA9IG1jOworCXJldHVybiAwOworfQorCisvKioKKyAqIHB0aV9jaGFyX3JlbGVhc2UoKS0gIENsb3NlIGEgY2hhciBjaGFubmVsIHRvIHRoZSBQVEkgZGV2aWNlLiBQYXJ0CisgKiBvZiB0aGUgbWlzYyBkZXZpY2UgaW1wbGVtZW50YXRpb24uCisgKgorICogQGlub2RlOiBOb3QgdXNlZCBpbiB0aGlzIGltcGxlbWVudGFpdG9uLgorICogQGZpbHA6ICBDb250YWlucyBwcml2YXRlX2RhdGEgdGhhdCBjb250YWlucyB0aGUgbWFzdGVyLCBjaGFubmVsCisgKiAgICAgICAgIElEIHRvIGJlIHJlbGVhc2VkIGJ5IHRoZSBQVEkgZGV2aWNlLgorICoKKyAqIFJldHVybnM6CisgKglhbHdheXMgMAorICovCitzdGF0aWMgaW50IHB0aV9jaGFyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJcHRpX3JlbGVhc2VfbWFzdGVyY2hhbm5lbChmaWxwLT5wcml2YXRlX2RhdGEpOworCWtmcmVlKGZpbHAtPnByaXZhdGVfZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcHRpX2NoYXJfd3JpdGUoKS0gIFdyaXRlIHRyYWNlIGRlYnVnZ2luZyBkYXRhIHRocm91Z2ggdGhlIGNoYXIKKyAqIGludGVyZmFjZSB0byB0aGUgUFRJIEhXLiAgUGFydCBvZiB0aGUgbWlzYyBkZXZpY2UgaW1wbGVtZW50YXRpb24uCisgKgorICogQGZpbHA6ICBDb250YWlucyBwcml2YXRlIGRhdGEgd2hpY2ggaXMgdXNlZCB0byBvYnRhaW4KKyAqICAgICAgICAgbWFzdGVyLCBjaGFubmVsIHdyaXRlIElELgorICogQGRhdGE6ICB0cmFjZSBkYXRhIHRvIGJlIHdyaXR0ZW4uCisgKiBAbGVuOiAgICMgb2YgYnl0ZSB0byB3cml0ZS4KKyAqIEBwcG9zZTogTm90IHVzZWQgaW4gdGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBSZXR1cm5zOgorICoJaW50LCAjIG9mIGJ5dGVzIHdyaXR0ZW4KKyAqCW90aGVyd2lzZSwgZXJyb3IgdmFsdWUKKyAqCisgKiBOb3RlczogRnJvbSBzaWRlIGRpc2N1c3Npb25zIHdpdGggQWxhbiBDb3ggYW5kIGV4cGVyaW1lbnRpbmcKKyAqIHdpdGggUFRJIGRlYnVnIEhXIGxpa2UgTm9raWEncyBGaWRvIGJveCBhbmQgTGF1dGVyYmFjaAorICogZGV2aWNlcywgODE5MiBieXRlIHdyaXRlIGJ1ZmZlciB1c2VkIGJ5IFVTRVJfQ09QWV9TSVpFIHdhcworICogZGVlbWVkIGFuIGFwcHJvcHJpYXRlIHNpemUgZm9yIHRoaXMgdHlwZSBvZiB1c2FnZSB3aXRoCisgKiBkZWJ1Z2dpbmcgSFcuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHB0aV9jaGFyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqZGF0YSwKKwkJCSAgICAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcHBvc2UpCit7CisJc3RydWN0IHB0aV9tYXN0ZXJjaGFubmVsICptYzsKKwl2b2lkICprYnVmOworCWNvbnN0IGNoYXIgX191c2VyICp0bXA7CisJc2l6ZV90IHNpemUgPSBVU0VSX0NPUFlfU0laRTsKKwlzaXplX3QgbiA9IDA7CisKKwl0bXAgPSBkYXRhOworCW1jID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJa2J1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKGtidWYgPT0gTlVMTCkgIHsKKwkJcHJfZXJyKCIlcyglZCk6IGJ1ZiBhbGxvY2F0aW9uIGZhaWxlZFxuIiwKKwkJCV9fZnVuY19fLCBfX0xJTkVfXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRvIHsKKwkJaWYgKGxlbiAtIG4gPiBVU0VSX0NPUFlfU0laRSkKKwkJCXNpemUgPSBVU0VSX0NPUFlfU0laRTsKKwkJZWxzZQorCQkJc2l6ZSA9IGxlbiAtIG47CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKGtidWYsIHRtcCwgc2l6ZSkpIHsKKwkJCWtmcmVlKGtidWYpOworCQkJcmV0dXJuIG4gPyBuIDogLUVGQVVMVDsKKwkJfQorCisJCXB0aV93cml0ZV90b19hcGVydHVyZShtYywga2J1Ziwgc2l6ZSk7CisJCW4gICs9IHNpemU7CisJCXRtcCArPSBzaXplOworCisJfSB3aGlsZSAobGVuID4gbik7CisKKwlrZnJlZShrYnVmKTsKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHR0eV9vcGVyYXRpb25zIHB0aV90dHlfZHJpdmVyX29wcyA9IHsKKwkub3BlbgkJPSBwdGlfdHR5X2RyaXZlcl9vcGVuLAorCS5jbG9zZQkJPSBwdGlfdHR5X2RyaXZlcl9jbG9zZSwKKwkud3JpdGUJCT0gcHRpX3R0eV9kcml2ZXJfd3JpdGUsCisJLndyaXRlX3Jvb20JPSBwdGlfdHR5X3dyaXRlX3Jvb20sCisJLmluc3RhbGwJPSBwdGlfdHR5X2luc3RhbGwsCisJLmNsZWFudXAJPSBwdGlfdHR5X2NsZWFudXAKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHB0aV9jaGFyX2RyaXZlcl9vcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS53cml0ZQkJPSBwdGlfY2hhcl93cml0ZSwKKwkub3BlbgkJPSBwdGlfY2hhcl9vcGVuLAorCS5yZWxlYXNlCT0gcHRpX2NoYXJfcmVsZWFzZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBwdGlfY2hhcl9kcml2ZXIgPSB7CisJLm1pbm9yCQk9IE1JU0NfRFlOQU1JQ19NSU5PUiwKKwkubmFtZQkJPSBDSEFSTkFNRSwKKwkuZm9wcwkJPSAmcHRpX2NoYXJfZHJpdmVyX29wcworfTsKKworLyoqCisgKiBwdGlfY29uc29sZV93cml0ZSgpLSAgV3JpdGUgdG8gdGhlIGNvbnNvbGUgdGhhdCBoYXMgYmVlbiBhY3F1aXJlZC4KKyAqCisgKiBAYzogICBOb3QgdXNlZCBpbiB0aGlzIGltcGxlbWVudGFpdG9uLgorICogQGJ1ZjogRGF0YSB0byBiZSB3cml0dGVuLgorICogQGxlbjogTGVuZ3RoIG9mIGJ1Zi4KKyAqLworc3RhdGljIHZvaWQgcHRpX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmMsIGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuKQoreworCXN0YXRpYyBzdHJ1Y3QgcHRpX21hc3RlcmNoYW5uZWwgbWMgPSB7Lm1hc3RlciAgPSBDT05TT0xFX0lELAorCQkJCQkgICAgICAuY2hhbm5lbCA9IDB9OworCisJbWMuY2hhbm5lbCA9IHB0aV9jb25zb2xlX2NoYW5uZWw7CisJcHRpX2NvbnNvbGVfY2hhbm5lbCA9IChwdGlfY29uc29sZV9jaGFubmVsICsgMSkgJiAweDdmOworCisJcHRpX3dyaXRlX2Z1bGxfZnJhbWVfdG9fYXBlcnR1cmUoJm1jLCBidWYsIGxlbik7Cit9CisKKy8qKgorICogcHRpX2NvbnNvbGVfZGV2aWNlKCktICBSZXR1cm4gdGhlIGRyaXZlciB0dHkgc3RydWN0dXJlIGFuZCBzZXQgdGhlCisgKgkJCSAgYXNzb2NpYXRlZCBpbmRleCBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBAYzogICAgIENvbnNvbGUgZGV2aWNlIG9mIHRoZSBkcml2ZXIuCisgKiBAaW5kZXg6IGluZGV4IGFzc29jaWF0ZWQgd2l0aCBjLgorICoKKyAqIFJldHVybnM6CisgKglhbHdheXMgdmFsdWUgb2YgcHRpX3R0eV9kcml2ZXIgc3RydWN0dXJlIHdoZW4gdGhpcyBmdW5jdGlvbgorICoJaXMgY2FsbGVkLgorICovCitzdGF0aWMgc3RydWN0IHR0eV9kcml2ZXIgKnB0aV9jb25zb2xlX2RldmljZShzdHJ1Y3QgY29uc29sZSAqYywgaW50ICppbmRleCkKK3sKKwkqaW5kZXggPSBjLT5pbmRleDsKKwlyZXR1cm4gcHRpX3R0eV9kcml2ZXI7Cit9CisKKy8qKgorICogcHRpX2NvbnNvbGVfc2V0dXAoKS0gIEluaXRpYWxpemUgY29uc29sZSB2YXJpYWJsZXMgdXNlZCBieSB0aGUgZHJpdmVyLgorICoKKyAqIEBjOiAgICAgTm90IHVzZWQuCisgKiBAb3B0czogIE5vdCB1c2VkLgorICoKKyAqIFJldHVybnM6CisgKglhbHdheXMgMC4KKyAqLworc3RhdGljIGludCBwdGlfY29uc29sZV9zZXR1cChzdHJ1Y3QgY29uc29sZSAqYywgY2hhciAqb3B0cykKK3sKKwlwdGlfY29uc29sZV9jaGFubmVsID0gMDsKKwlwdGlfY29udHJvbF9jaGFubmVsID0gMDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHB0aV9jb25zb2xlIHN0cnVjdCwgdXNlZCB0byBjYXB0dXJlIE9TIHByaW50aygpJ3MgYW5kIHNoaWZ0CisgKiBvdXQgdG8gdGhlIFBUSSBkZXZpY2UgZm9yIGRlYnVnZ2luZy4gIFRoaXMgY2Fubm90IGJlCisgKiBlbmFibGVkIHVwb24gYm9vdCBiZWNhdXNlIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBlYXRpbmcKKyAqIGFueSBzZXJpYWwgY29uc29sZSBwcmludGsncyAocmFjZSBjb25kaXRpb24gZGlzY292ZXJlZCkuCisgKiBUaGUgY29uc29sZSBzaG91bGQgYmUgZW5hYmxlZCB1cG9uIHdoZW4gdGhlIHR0eSBwb3J0IGlzCisgKiB1c2VkIGZvciB0aGUgZmlyc3QgdGltZS4gIFNpbmNlIHRoZSBwcmltYXJ5IHB1cnBvc2UgZm9yCisgKiB0aGUgdHR5IHBvcnQgaXMgdG8gaG9vayB1cCBzeXNsb2cgdG8gaXQsIHRoZSB0dHkgcG9ydAorICogd2lsbCBiZSBvcGVuIGZvciBhIHJlYWxseSBsb25nIHRpbWUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY29uc29sZSBwdGlfY29uc29sZSA9IHsKKwkubmFtZQkJPSBUVFlOQU1FLAorCS53cml0ZQkJPSBwdGlfY29uc29sZV93cml0ZSwKKwkuZGV2aWNlCQk9IHB0aV9jb25zb2xlX2RldmljZSwKKwkuc2V0dXAJCT0gcHRpX2NvbnNvbGVfc2V0dXAsCisJLmZsYWdzCQk9IENPTl9QUklOVEJVRkZFUiwKKwkuaW5kZXgJCT0gMCwKK307CisKKy8qKgorICogcHRpX3BvcnRfYWN0aXZhdGUoKS0gVXNlZCB0byBzdGFydC9pbml0aWFsaXplIGFueSBpdGVtcyB1cG9uCisgKiBmaXJzdCBvcGVuaW5nIG9mIHR0eV9wb3J0KCkuCisgKgorICogQHBvcnQtIFRoZSB0dHkgcG9ydCBudW1iZXIgb2YgdGhlIFBUSSBkZXZpY2UuCisgKiBAdHR5LSAgVGhlIHR0eSBzdHJ1Y3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGV2aWNlLgorICoKKyAqIFJldHVybnM6CisgKglhbHdheXMgcmV0dXJucyAwCisgKgorICogTm90ZXM6IFRoZSBwcmltYXJ5IHB1cnBvc2Ugb2YgdGhlIFBUSSB0dHkgcG9ydCAwIGlzIHRvIGhvb2sKKyAqIHRoZSBzeXNsb2cgZGFlbW9uIHRvIGl0OyB0aHVzIHRoaXMgcG9ydCB3aWxsIGJlIG9wZW4gZm9yIGEKKyAqIHZlcnkgbG9uZyB0aW1lLgorICovCitzdGF0aWMgaW50IHB0aV9wb3J0X2FjdGl2YXRlKHN0cnVjdCB0dHlfcG9ydCAqcG9ydCwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlpZiAocG9ydC0+dHR5LT5pbmRleCA9PSBQVElUVFlfTUlOT1JfU1RBUlQpCisJCWNvbnNvbGVfc3RhcnQoJnB0aV9jb25zb2xlKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwdGlfcG9ydF9zaHV0ZG93bigpLSBVc2VkIHRvIHN0b3Avc2h1dGRvd24gYW55IGl0ZW1zIHVwb24gdGhlCisgKiBsYXN0IHR0eSBwb3J0IGNsb3NlLgorICoKKyAqIEBwb3J0LSBUaGUgdHR5IHBvcnQgbnVtYmVyIG9mIHRoZSBQVEkgZGV2aWNlLgorICoKKyAqIE5vdGVzOiBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoZSBQVEkgdHR5IHBvcnQgMCBpcyB0byBob29rCisgKiB0aGUgc3lzbG9nIGRhZW1vbiB0byBpdDsgdGh1cyB0aGlzIHBvcnQgd2lsbCBiZSBvcGVuIGZvciBhCisgKiB2ZXJ5IGxvbmcgdGltZS4KKyAqLworc3RhdGljIHZvaWQgcHRpX3BvcnRfc2h1dGRvd24oc3RydWN0IHR0eV9wb3J0ICpwb3J0KQoreworCWlmIChwb3J0LT50dHktPmluZGV4ID09IFBUSVRUWV9NSU5PUl9TVEFSVCkKKwkJY29uc29sZV9zdG9wKCZwdGlfY29uc29sZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X3BvcnRfb3BlcmF0aW9ucyB0dHlfcG9ydF9vcHMgPSB7CisJLmFjdGl2YXRlID0gcHRpX3BvcnRfYWN0aXZhdGUsCisJLnNodXRkb3duID0gcHRpX3BvcnRfc2h1dGRvd24sCit9OworCisvKgorICogTm90ZSB0aGUgX3Byb2JlKCkgY2FsbCBzZXRzIGV2ZXJ5dGhpbmcgdXAgYW5kIHRpZXMgdGhlIGNoYXIgYW5kIHR0eQorICogdG8gc3VjY2Vzc2Z1bGx5IGRldGVjdGluZyB0aGUgUFRJIGRldmljZSBvbiB0aGUgcGNpIGJ1cy4KKyAqLworCisvKioKKyAqIHB0aV9wY2lfcHJvYmUoKS0gVXNlZCB0byBkZXRlY3QgcHRpIG9uIHRoZSBwY2kgYnVzIGFuZCBzZXQKKyAqCQkgICAgdGhpbmdzIHVwIGluIHRoZSBkcml2ZXIuCisgKgorICogQHBkZXYtIHBjaV9kZXYgc3RydWN0IHZhbHVlcyBmb3IgcHRpLgorICogQGVudC0gIHBjaV9kZXZpY2VfaWQgc3RydWN0IGZvciBwdGkgZHJpdmVyLgorICoKKyAqIFJldHVybnM6CisgKgkwIGZvciBzdWNjZXNzCisgKglvdGhlcndpc2UsIGVycm9yCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IHB0aV9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJaW50IHJldHZhbCA9IC1FSU5WQUw7CisJaW50IHBjaV9iYXIgPSAxOworCisJZGV2X2RiZygmcGRldi0+ZGV2LCAiJXMgJXMoJWQpOiBQVEkgUENJIElEICUwNHg6JTA0eFxuIiwgX19GSUxFX18sCisJCQlfX2Z1bmNfXywgX19MSU5FX18sIHBkZXYtPnZlbmRvciwgcGRldi0+ZGV2aWNlKTsKKworCXJldHZhbCA9IG1pc2NfcmVnaXN0ZXIoJnB0aV9jaGFyX2RyaXZlcik7CisJaWYgKHJldHZhbCkgeworCQlwcl9lcnIoIiVzKCVkKTogQ0hBUiByZWdpc3RyYXRpb24gZmFpbGVkIG9mIHB0aSBkcml2ZXJcbiIsCisJCQlfX2Z1bmNfXywgX19MSU5FX18pOworCQlwcl9lcnIoIiVzKCVkKTogRXJyb3IgdmFsdWUgcmV0dXJuZWQ6ICVkXG4iLAorCQkJX19mdW5jX18sIF9fTElORV9fLCByZXR2YWwpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCXJldHZhbCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXR2YWwgIT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiJXM6IHBjaV9lbmFibGVfZGV2aWNlKCkgcmV0dXJuZWQgZXJyb3IgJWRcbiIsCisJCQlfX2Z1bmNfXywgcmV0dmFsKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlkcnZfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkcnZfZGF0YSksIEdGUF9LRVJORUwpOworCisJaWYgKGRydl9kYXRhID09IE5VTEwpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJIiVzKCVkKToga21hbGxvYygpIHJldHVybmVkIE5VTEwgbWVtb3J5LlxuIiwKKwkJCV9fZnVuY19fLCBfX0xJTkVfXyk7CisJCXJldHVybiByZXR2YWw7CisJfQorCWRydl9kYXRhLT5wdGlfYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBwY2lfYmFyKTsKKworCXJldHZhbCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbihwZGV2LCBwY2lfYmFyLCBkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CisJaWYgKHJldHZhbCAhPSAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSIlcyglZCk6IHBjaV9yZXF1ZXN0X3JlZ2lvbigpIHJldHVybmVkIGVycm9yICVkXG4iLAorCQkJX19mdW5jX18sIF9fTElORV9fLCByZXR2YWwpOworCQlrZnJlZShkcnZfZGF0YSk7CisJCXJldHVybiByZXR2YWw7CisJfQorCWRydl9kYXRhLT5hcGVydHVyZV9iYXNlID0gZHJ2X2RhdGEtPnB0aV9hZGRyK0FQRVJUVVJFXzE0OworCWRydl9kYXRhLT5wdGlfaW9hZGRyID0KKwkJaW9yZW1hcF9ub2NhY2hlKCh1MzIpZHJ2X2RhdGEtPmFwZXJ0dXJlX2Jhc2UsCisJCUFQRVJUVVJFX0xFTik7CisJaWYgKCFkcnZfZGF0YS0+cHRpX2lvYWRkcikgeworCQlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgcGNpX2Jhcik7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWtmcmVlKGRydl9kYXRhKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgZHJ2X2RhdGEpOworCisJdHR5X3BvcnRfaW5pdCgmZHJ2X2RhdGEtPnBvcnQpOworCWRydl9kYXRhLT5wb3J0Lm9wcyA9ICZ0dHlfcG9ydF9vcHM7CisKKwl0dHlfcmVnaXN0ZXJfZGV2aWNlKHB0aV90dHlfZHJpdmVyLCAwLCAmcGRldi0+ZGV2KTsKKwl0dHlfcmVnaXN0ZXJfZGV2aWNlKHB0aV90dHlfZHJpdmVyLCAxLCAmcGRldi0+ZGV2KTsKKworCXJlZ2lzdGVyX2NvbnNvbGUoJnB0aV9jb25zb2xlKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBwdGlfcGNpX2RyaXZlciA9IHsKKwkubmFtZQkJPSBQQ0lOQU1FLAorCS5pZF90YWJsZQk9IHBjaV9pZHMsCisJLnByb2JlCQk9IHB0aV9wY2lfcHJvYmUsCisJLnJlbW92ZQkJPSBwdGlfcGNpX3JlbW92ZSwKK307CisKKy8qKgorICoKKyAqIHB0aV9pbml0KCktIE92ZXJhbGwgZW50cnkvaW5pdCBjYWxsIHRvIHRoZSBwdGkgZHJpdmVyLgorICogICAgICAgICAgICAgSXQgc3RhcnRzIHRoZSByZWdpc3RyYXRpb24gcHJvY2VzcyB3aXRoIHRoZSBrZXJuZWwuCisgKgorICogUmV0dXJuczoKKyAqCWludCBfX2luaXQsIDAgZm9yIHN1Y2Nlc3MKKyAqCW90aGVyd2lzZSB2YWx1ZSBpcyBhbiBlcnJvcgorICoKKyAqLworc3RhdGljIGludCBfX2luaXQgcHRpX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsID0gLUVJTlZBTDsKKworCS8qIEZpcnN0IHJlZ2lzdGVyIG1vZHVsZSBhcyB0dHkgZGV2aWNlICovCisKKwlwdGlfdHR5X2RyaXZlciA9IGFsbG9jX3R0eV9kcml2ZXIoMSk7CisJaWYgKHB0aV90dHlfZHJpdmVyID09IE5VTEwpIHsKKwkJcHJfZXJyKCIlcyglZCk6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCBmb3IgcHRpVFRZIGRyaXZlclxuIiwKKwkJCV9fZnVuY19fLCBfX0xJTkVfXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXB0aV90dHlfZHJpdmVyLT5vd25lcgkJCT0gVEhJU19NT0RVTEU7CisJcHRpX3R0eV9kcml2ZXItPm1hZ2ljCQkJPSBUVFlfRFJJVkVSX01BR0lDOworCXB0aV90dHlfZHJpdmVyLT5kcml2ZXJfbmFtZQkJPSBEUklWRVJOQU1FOworCXB0aV90dHlfZHJpdmVyLT5uYW1lCQkJPSBUVFlOQU1FOworCXB0aV90dHlfZHJpdmVyLT5tYWpvcgkJCT0gMDsKKwlwdGlfdHR5X2RyaXZlci0+bWlub3Jfc3RhcnQJCT0gUFRJVFRZX01JTk9SX1NUQVJUOworCXB0aV90dHlfZHJpdmVyLT5taW5vcl9udW0JCT0gUFRJVFRZX01JTk9SX05VTTsKKwlwdGlfdHR5X2RyaXZlci0+bnVtCQkJPSBQVElUVFlfTUlOT1JfTlVNOworCXB0aV90dHlfZHJpdmVyLT50eXBlCQkJPSBUVFlfRFJJVkVSX1RZUEVfU1lTVEVNOworCXB0aV90dHlfZHJpdmVyLT5zdWJ0eXBlCQkJPSBTWVNURU1fVFlQRV9TWVNDT05TOworCXB0aV90dHlfZHJpdmVyLT5mbGFncwkJCT0gVFRZX0RSSVZFUl9SRUFMX1JBVyB8CisJCQkJCQkgIFRUWV9EUklWRVJfRFlOQU1JQ19ERVY7CisJcHRpX3R0eV9kcml2ZXItPmluaXRfdGVybWlvcwkJPSB0dHlfc3RkX3Rlcm1pb3M7CisKKwl0dHlfc2V0X29wZXJhdGlvbnMocHRpX3R0eV9kcml2ZXIsICZwdGlfdHR5X2RyaXZlcl9vcHMpOworCisJcmV0dmFsID0gdHR5X3JlZ2lzdGVyX2RyaXZlcihwdGlfdHR5X2RyaXZlcik7CisJaWYgKHJldHZhbCkgeworCQlwcl9lcnIoIiVzKCVkKTogVFRZIHJlZ2lzdHJhdGlvbiBmYWlsZWQgb2YgcHRpIGRyaXZlclxuIiwKKwkJCV9fZnVuY19fLCBfX0xJTkVfXyk7CisJCXByX2VycigiJXMoJWQpOiBFcnJvciB2YWx1ZSByZXR1cm5lZDogJWRcbiIsCisJCQlfX2Z1bmNfXywgX19MSU5FX18sIHJldHZhbCk7CisKKwkJcHRpX3R0eV9kcml2ZXIgPSBOVUxMOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCXJldHZhbCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnB0aV9wY2lfZHJpdmVyKTsKKworCWlmIChyZXR2YWwpIHsKKwkJcHJfZXJyKCIlcyglZCk6IFBDSSByZWdpc3RyYXRpb24gZmFpbGVkIG9mIHB0aSBkcml2ZXJcbiIsCisJCQlfX2Z1bmNfXywgX19MSU5FX18pOworCQlwcl9lcnIoIiVzKCVkKTogRXJyb3IgdmFsdWUgcmV0dXJuZWQ6ICVkXG4iLAorCQkJX19mdW5jX18sIF9fTElORV9fLCByZXR2YWwpOworCisJCXR0eV91bnJlZ2lzdGVyX2RyaXZlcihwdGlfdHR5X2RyaXZlcik7CisJCXByX2VycigiJXMoJWQpOiBVbnJlZ2lzdGVyaW5nIFRUWSBwYXJ0IG9mIHB0aSBkcml2ZXJcbiIsCisJCQlfX2Z1bmNfXywgX19MSU5FX18pOworCQlwdGlfdHR5X2RyaXZlciA9IE5VTEw7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqCisgKiBwdGlfZXhpdCgpLSBVbnJlZ2lzdGVycyB0aGlzIG1vZHVsZSBhcyBhIHR0eSBhbmQgcGNpIGRyaXZlci4KKyAqLworc3RhdGljIHZvaWQgX19leGl0IHB0aV9leGl0KHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXR0eV91bnJlZ2lzdGVyX2RldmljZShwdGlfdHR5X2RyaXZlciwgMCk7CisJdHR5X3VucmVnaXN0ZXJfZGV2aWNlKHB0aV90dHlfZHJpdmVyLCAxKTsKKworCXJldHZhbCA9IHR0eV91bnJlZ2lzdGVyX2RyaXZlcihwdGlfdHR5X2RyaXZlcik7CisJaWYgKHJldHZhbCkgeworCQlwcl9lcnIoIiVzKCVkKTogVFRZIHVucmVnaXN0cmF0aW9uIGZhaWxlZCBvZiBwdGkgZHJpdmVyXG4iLAorCQkJX19mdW5jX18sIF9fTElORV9fKTsKKwkJcHJfZXJyKCIlcyglZCk6IEVycm9yIHZhbHVlIHJldHVybmVkOiAlZFxuIiwKKwkJCV9fZnVuY19fLCBfX0xJTkVfXywgcmV0dmFsKTsKKwl9CisKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnB0aV9wY2lfZHJpdmVyKTsKKworCXJldHZhbCA9IG1pc2NfZGVyZWdpc3RlcigmcHRpX2NoYXJfZHJpdmVyKTsKKwlpZiAocmV0dmFsKSB7CisJCXByX2VycigiJXMoJWQpOiBDSEFSIHVucmVnaXN0cmF0aW9uIGZhaWxlZCBvZiBwdGkgZHJpdmVyXG4iLAorCQkJX19mdW5jX18sIF9fTElORV9fKTsKKwkJcHJfZXJyKCIlcyglZCk6IEVycm9yIHZhbHVlIHJldHVybmVkOiAlZFxuIiwKKwkJCV9fZnVuY19fLCBfX0xJTkVfXywgcmV0dmFsKTsKKwl9CisKKwl1bnJlZ2lzdGVyX2NvbnNvbGUoJnB0aV9jb25zb2xlKTsKKwlyZXR1cm47Cit9CisKK21vZHVsZV9pbml0KHB0aV9pbml0KTsKK21vZHVsZV9leGl0KHB0aV9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiS2VuIE1pbGxzLCBKYXkgRnJleWVuc2VlIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBUSSBEcml2ZXIiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmF1bHQuYyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZhdWx0LmMKaW5kZXggMzg2NTdjZC4uYzRhY2FjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmF1bHQuYworKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVmYXVsdC5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSAiZ3J1LmgiCiAjaW5jbHVkZSAiZ3J1dGFibGVzLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVtYWluLmMgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVtYWluLmMKaW5kZXggZjg1MzhiYi4uYWUxNmM4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1bWFpbi5jCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydW1haW4uYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2luY2x1ZGUgPGFzbS91di91dl9odWIuaD4KICNpbmNsdWRlICJncnUuaCIKICNpbmNsdWRlICJncnV0YWJsZXMuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zcGVhcjEzeHhfcGNpZV9nYWRnZXQuYyBiL2RyaXZlcnMvbWlzYy9zcGVhcjEzeHhfcGNpZV9nYWRnZXQuYwppbmRleCBlYzNiOGM5Li43YWRlZDkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc3BlYXIxM3h4X3BjaWVfZ2FkZ2V0LmMKKysrIGIvZHJpdmVycy9taXNjL3NwZWFyMTN4eF9wY2llX2dhZGdldC5jCkBAIC03ODcsOCArNzg3LDggQEAKIAogCXN0YXR1cyA9IHJlcXVlc3RfaXJxKGlycSwgc3BlYXJfcGNpZV9nYWRnZXRfaXJxLCAwLCBwZGV2LT5uYW1lLCBOVUxMKTsKIAlpZiAoc3RhdHVzKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInBjaWUgZ2FkZ2V0IGludGVycnVwdCBJUlElZCBhbHJlYWR5IFwKLQkJCQljbGFpbWVkXG4iLCBpcnEpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkicGNpZSBnYWRnZXQgaW50ZXJydXB0IElSUSVkIGFscmVhZHkgY2xhaW1lZFxuIiwgaXJxKTsKIAkJZ290byBlcnJfaW91bm1hcDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy90aS1zdC9zdF9jb3JlLmMgYi9kcml2ZXJzL21pc2MvdGktc3Qvc3RfY29yZS5jCmluZGV4IGY5MWY4MmUuLjFhMDVmZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy90aS1zdC9zdF9jb3JlLmMKKysrIGIvZHJpdmVycy9taXNjL3RpLXN0L3N0X2NvcmUuYwpAQCAtNzQ3LDggKzc0Nyw4IEBACiAJcHJfZGVidWcoIiVzOiBkb25lICIsIF9fZnVuY19fKTsKIH0KIAotc3RhdGljIHZvaWQgc3RfdHR5X3JlY2VpdmUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwKLQkJCSAgIGNoYXIgKnR0eV9mbGFncywgaW50IGNvdW50KQorc3RhdGljIHVuc2lnbmVkIGludCBzdF90dHlfcmVjZWl2ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBjaGFyICp0dHlfZmxhZ3MsIGludCBjb3VudCkKIHsKICNpZmRlZiBWRVJCT1NFCiAJcHJpbnRfaGV4X2R1bXAoS0VSTl9ERUJVRywgIj5pbj4iLCBEVU1QX1BSRUZJWF9OT05FLApAQCAtNzYxLDYgKzc2MSw4IEBACiAJICovCiAJc3RfcmVjdih0dHktPmRpc2NfZGF0YSwgZGF0YSwgY291bnQpOwogCXByX2RlYnVnKCJkb25lICVzIiwgX19mdW5jX18pOworCisJcmV0dXJuIGNvdW50OwogfQogCiAvKiB3YWtlLXVwIGZ1bmN0aW9uIGNhbGxlZCBpbiBmcm9tIHRoZSBUVFkgbGF5ZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jCmluZGV4IGVhMzg4OGIuLmFhODAzOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYwpAQCAtMTg5OSw1ICsxODk5LDUgQEAKIG1vZHVsZV9leGl0KGF0bWNpX2V4aXQpOwogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkF0bWVsIE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2UgZHJpdmVyIik7Ci1NT0RVTEVfQVVUSE9SKCJIYWF2YXJkIFNraW5uZW1vZW4gPGhhYXZhcmQuc2tpbm5lbW9lbkBhdG1lbC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJIYWF2YXJkIFNraW5uZW1vZW4gKEF0bWVsKSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MDkuYyBiL2RyaXZlcnMvbmV0LzNjNTA5LmMKaW5kZXggOTFhYmI5Ni4uNWYyNTg4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDkuYworKysgYi9kcml2ZXJzL25ldC8zYzUwOS5jCkBAIC0xODUsNyArMTg1LDcgQEAKIHN0YXRpYyBpbnQgbm9wbnA7CiAjZW5kaWYKIAotc3RhdGljIGludCBfX2RldmluaXQgZWwzX2NvbW1vbl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBlbDNfY29tbW9uX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBlbDNfY29tbW9uX3JlbW92ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB1c2hvcnQgaWRfcmVhZF9lZXByb20oaW50IGluZGV4KTsKIHN0YXRpYyB1c2hvcnQgcmVhZF9lZXByb20oaW50IGlvYWRkciwgaW50IGluZGV4KTsKQEAgLTM5NSw3ICszOTUsNyBAQAogc3RhdGljIGludCBpc2FfcmVnaXN0ZXJlZDsKIAogI2lmZGVmIENPTkZJR19QTlAKLXN0YXRpYyBzdHJ1Y3QgcG5wX2RldmljZV9pZCBlbDNfcG5wX2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkIGVsM19wbnBfaWRzW10gX19kZXZpbml0Y29uc3QgPSB7CiAJeyAuaWQgPSAiVENNNTA5MCIgfSwgLyogM0NvbSBFdGhlcmxpbmsgSUlJIChUUCkgKi8KIAl7IC5pZCA9ICJUQ001MDkxIiB9LCAvKiAzQ29tIEV0aGVybGluayBJSUkgKi8KIAl7IC5pZCA9ICJUQ001MDk0IiB9LCAvKiAzQ29tIEV0aGVybGluayBJSUkgKGNvbWJvKSAqLwpAQCAtNDc4LDcgKzQ3OCw3IEBACiAjZW5kaWYgLyogQ09ORklHX1BOUCAqLwogCiAjaWZkZWYgQ09ORklHX0VJU0EKLXN0YXRpYyBzdHJ1Y3QgZWlzYV9kZXZpY2VfaWQgZWwzX2Vpc2FfaWRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGVpc2FfZGV2aWNlX2lkIGVsM19laXNhX2lkc1tdIF9fZGV2aW5pdGNvbnN0ID0gewogCQl7ICJUQ001MDkwIiB9LAogCQl7ICJUQ001MDkxIiB9LAogCQl7ICJUQ001MDkyIiB9LApAQCAtNTA4LDcgKzUwOCw3IEBACiAjaWZkZWYgQ09ORklHX01DQQogc3RhdGljIGludCBlbDNfbWNhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldik7CiAKLXN0YXRpYyBzaG9ydCBlbDNfbWNhX2FkYXB0ZXJfaWRzW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzaG9ydCBlbDNfbWNhX2FkYXB0ZXJfaWRzW10gX19kZXZpbml0Y29uc3QgPSB7CiAJCTB4NjI3YywKIAkJMHg2MjdkLAogCQkweDYyZGIsCkBAIC01MTcsNyArNTE3LDcgQEAKIAkJMHgwMDAwCiB9OwogCi1zdGF0aWMgY2hhciAqZWwzX21jYV9hZGFwdGVyX25hbWVzW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBlbDNfbWNhX2FkYXB0ZXJfbmFtZXNbXSBfX2RldmluaXRjb25zdCA9IHsKIAkJIjNDb20gM2M1MjkgRXRoZXJMaW5rIElJSSAoMTBiYXNlMikiLAogCQkiM0NvbSAzYzUyOSBFdGhlckxpbmsgSUlJICgxMGJhc2VUKSIsCiAJCSIzQ29tIDNjNTI5IEV0aGVyTGluayBJSUkgKHRlc3QgbW9kZSkiLApAQCAtNjAxLDcgKzYwMSw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfTUNBCi1zdGF0aWMgaW50IF9faW5pdCBlbDNfbWNhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGVsM19tY2FfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQogewogCS8qIEJhc2VkIG9uIEVyaWsgTnlncmVuJ3MgKG55Z3JlbkBtaXQuZWR1KSAzYzUyOSBwYXRjaCwKIAkgKiBoZWF2aWx5IG1vZGlmaWVkIGJ5IENocmlzIEJlYXVyZWdhcmQKQEAgLTY3MSw3ICs2NzEsNyBAQAogI2VuZGlmIC8qIENPTkZJR19NQ0EgKi8KIAogI2lmZGVmIENPTkZJR19FSVNBCi1zdGF0aWMgaW50IF9faW5pdCBlbDNfZWlzYV9wcm9iZSAoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2RldmluaXQgZWwzX2Vpc2FfcHJvYmUgKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKIAlzaG9ydCBpOwogCWludCBpb2FkZHIsIGlycSwgaWZfcG9ydDsKQEAgLTEyMDcsNyArMTIwNyw3IEBACiAJCQllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKIAl9CiAKLQllY21kLT5zcGVlZCA9IFNQRUVEXzEwOworCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBTUEVFRF8xMCk7CiAJRUwzV0lORE9XKDEpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1OXguYyBiL2RyaXZlcnMvbmV0LzNjNTl4LmMKaW5kZXggOGNjMjI1Ni4uOTlmNDNkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1OXguYworKysgYi9kcml2ZXJzL25ldC8zYzU5eC5jCkBAIC05MDEsMTQgKzkwMSwxNCBAQAogI2VuZGlmIC8qICFDT05GSUdfUE0gKi8KIAogI2lmZGVmIENPTkZJR19FSVNBCi1zdGF0aWMgc3RydWN0IGVpc2FfZGV2aWNlX2lkIHZvcnRleF9laXNhX2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBlaXNhX2RldmljZV9pZCB2b3J0ZXhfZWlzYV9pZHNbXSBfX2RldmluaXRjb25zdCA9IHsKIAl7ICJUQ001OTIwIiwgQ0hfM0M1OTIgfSwKIAl7ICJUQ001OTcwIiwgQ0hfM0M1OTcgfSwKIAl7ICIiIH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGVpc2EsIHZvcnRleF9laXNhX2lkcyk7CiAKLXN0YXRpYyBpbnQgX19pbml0IHZvcnRleF9laXNhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHZvcnRleF9laXNhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKIAl2b2lkIF9faW9tZW0gKmlvYWRkcjsKIAlzdHJ1Y3QgZWlzYV9kZXZpY2UgKmVkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC84MTM5Y3AuYyBiL2RyaXZlcnMvbmV0LzgxMzljcC5jCmluZGV4IGRkMTZlODMuLjEwYzQ1MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgxMzljcC5jCisrKyBiL2RyaXZlcnMvbmV0LzgxMzljcC5jCkBAIC03NTgsOCArNzU4LDcgQEAKIAogCWVudHJ5ID0gY3AtPnR4X2hlYWQ7CiAJZW9yID0gKGVudHJ5ID09IChDUF9UWF9SSU5HX1NJWkUgLSAxKSkgPyBSaW5nRW5kIDogMDsKLQlpZiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfVFNPKQotCQltc3MgPSBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplOworCW1zcyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemU7CiAKIAlpZiAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA9PSAwKSB7CiAJCXN0cnVjdCBjcF9kZXNjICp0eGQgPSAmY3AtPnR4X3JpbmdbZW50cnldOwpAQCAtMTQxNiwzMiArMTQxNSwyMyBAQAogCWNwLT5tc2dfZW5hYmxlID0gdmFsdWU7CiB9CiAKLXN0YXRpYyB1MzIgY3BfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgY3Bfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcykKIHsKIAlzdHJ1Y3QgY3BfcHJpdmF0ZSAqY3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCXJldHVybiAoY3ByMTYoQ3BDbWQpICYgUnhDaGtTdW0pID8gMSA6IDA7Ci19CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotc3RhdGljIGludCBjcF9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgY3BfcHJpdmF0ZSAqY3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCXUxNiBjbWQgPSBjcC0+Y3BjbWQsIG5ld2NtZDsKKwlpZiAoISgoZGV2LT5mZWF0dXJlcyBeIGZlYXR1cmVzKSAmIE5FVElGX0ZfUlhDU1VNKSkKKwkJcmV0dXJuIDA7CiAKLQluZXdjbWQgPSBjbWQ7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNwLT5sb2NrLCBmbGFncyk7CiAKLQlpZiAoZGF0YSkKLQkJbmV3Y21kIHw9IFJ4Q2hrU3VtOworCWlmIChmZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKQorCQljcC0+Y3BjbWQgfD0gUnhDaGtTdW07CiAJZWxzZQotCQluZXdjbWQgJj0gflJ4Q2hrU3VtOworCQljcC0+Y3BjbWQgJj0gflJ4Q2hrU3VtOwogCi0JaWYgKG5ld2NtZCAhPSBjbWQpIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3AtPmxvY2ssIGZsYWdzKTsKLQkJY3AtPmNwY21kID0gbmV3Y21kOwotCQljcHcxNl9mKENwQ21kLCBuZXdjbWQpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcC0+bG9jaywgZmxhZ3MpOwotCX0KKwljcHcxNl9mKENwQ21kLCBjcC0+Y3BjbWQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE1NTQsMTEgKzE1NDQsNiBAQAogCS5nZXRfbGluawkJPSBldGh0b29sX29wX2dldF9saW5rLAogCS5nZXRfbXNnbGV2ZWwJCT0gY3BfZ2V0X21zZ2xldmVsLAogCS5zZXRfbXNnbGV2ZWwJCT0gY3Bfc2V0X21zZ2xldmVsLAotCS5nZXRfcnhfY3N1bQkJPSBjcF9nZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0JCT0gY3Bfc2V0X3J4X2NzdW0sCi0JLnNldF90eF9jc3VtCQk9IGV0aHRvb2xfb3Bfc2V0X3R4X2NzdW0sIC8qIGxvY2FsISAqLwotCS5zZXRfc2cJCQk9IGV0aHRvb2xfb3Bfc2V0X3NnLAotCS5zZXRfdHNvCQk9IGV0aHRvb2xfb3Bfc2V0X3RzbywKIAkuZ2V0X3JlZ3MJCT0gY3BfZ2V0X3JlZ3MsCiAJLmdldF93b2wJCT0gY3BfZ2V0X3dvbCwKIAkuc2V0X3dvbAkJPSBjcF9zZXRfd29sLApAQCAtMTgzMSw2ICsxODE2LDcgQEAKIAkubmRvX2RvX2lvY3RsCQk9IGNwX2lvY3RsLAogCS5uZG9fc3RhcnRfeG1pdAkJPSBjcF9zdGFydF94bWl0LAogCS5uZG9fdHhfdGltZW91dAkJPSBjcF90eF90aW1lb3V0LAorCS5uZG9fc2V0X2ZlYXR1cmVzCT0gY3Bfc2V0X2ZlYXR1cmVzLAogI2lmIENQX1ZMQU5fVEFHX1VTRUQKIAkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIJPSBjcF92bGFuX3J4X3JlZ2lzdGVyLAogI2VuZGlmCkBAIC0xOTM0LDYgKzE5MjAsOSBAQAogCWNwLT5jcGNtZCA9IChwY2lfdXNpbmdfZGFjID8gUENJREFDIDogMCkgfAogCQkgICAgUENJTXVsUlcgfCBSeENoa1N1bSB8IENwUnhPbiB8IENwVHhPbjsKIAorCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9SWENTVU07CisJZGV2LT5od19mZWF0dXJlcyB8PSBORVRJRl9GX1JYQ1NVTTsKKwogCXJlZ3MgPSBpb3JlbWFwKHBjaWFkZHIsIENQX1JFR1NfU0laRSk7CiAJaWYgKCFyZWdzKSB7CiAJCXJjID0gLUVJTzsKQEAgLTE5NjYsOSArMTk1NSw4IEBACiAJaWYgKHBjaV91c2luZ19kYWMpCiAJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwogCi0jaWYgMCAvKiBkaXNhYmxlZCBieSBkZWZhdWx0IHVudGlsIHZlcmlmaWVkICovCi0JZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKLSNlbmRpZgorCS8qIGRpc2FibGVkIGJ5IGRlZmF1bHQgdW50aWwgdmVyaWZpZWQgKi8KKwlkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1RTTzsKIAogCWRldi0+aXJxID0gcGRldi0+aXJxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hY2VuaWMuYyBiL2RyaXZlcnMvbmV0L2FjZW5pYy5jCmluZGV4IGVlNjQ4ZmUuLmQ3YzFiZmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hY2VuaWMuYworKysgYi9kcml2ZXJzL25ldC9hY2VuaWMuYwpAQCAtNjgsNiArNjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NvY2tpb3MuaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUSkgfHwgZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUV9NT0RVTEUpCiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgpAQCAtMjY1OCwxNSArMjY1OSwxNSBAQAogCiAJbGluayA9IHJlYWRsKCZyZWdzLT5HaWdMbmtTdGF0ZSk7CiAJaWYgKGxpbmsgJiBMTktfMTAwME1CKQotCQllY21kLT5zcGVlZCA9IFNQRUVEXzEwMDA7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBTUEVFRF8xMDAwKTsKIAllbHNlIHsKIAkJbGluayA9IHJlYWRsKCZyZWdzLT5GYXN0TG5rU3RhdGUpOwogCQlpZiAobGluayAmIExOS18xMDBNQikKLQkJCWVjbWQtPnNwZWVkID0gU1BFRURfMTAwOworCQkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIFNQRUVEXzEwMCk7CiAJCWVsc2UgaWYgKGxpbmsgJiBMTktfMTBNQikKLQkJCWVjbWQtPnNwZWVkID0gU1BFRURfMTA7CisJCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgU1BFRURfMTApOwogCQllbHNlCi0JCQllY21kLT5zcGVlZCA9IDA7CisJCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgMCk7CiAJfQogCWlmIChsaW5rICYgTE5LX0ZVTExfRFVQTEVYKQogCQllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKQEAgLTI3MTgsOSArMjcxOSw5IEBACiAJCWxpbmsgfD0gTE5LX1RYX0ZMT1dfQ1RMX1k7CiAJaWYgKGVjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpCiAJCWxpbmsgfD0gTE5LX05FR09USUFURTsKLQlpZiAoZWNtZC0+c3BlZWQgIT0gc3BlZWQpIHsKKwlpZiAoZXRodG9vbF9jbWRfc3BlZWQoZWNtZCkgIT0gc3BlZWQpIHsKIAkJbGluayAmPSB+KExOS18xMDAwTUIgfCBMTktfMTAwTUIgfCBMTktfMTBNQik7Ci0JCXN3aXRjaCAoc3BlZWQpIHsKKwkJc3dpdGNoIChldGh0b29sX2NtZF9zcGVlZChlY21kKSkgewogCQljYXNlIFNQRUVEXzEwMDA6CiAJCQlsaW5rIHw9IExOS18xMDAwTUI7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9ldGhlcmguYyBiL2RyaXZlcnMvbmV0L2FybS9ldGhlcmguYwppbmRleCBmYmZiNWI0Li4wM2UyMTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vZXRoZXJoLmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2V0aGVyaC5jCkBAIC01OTEsMTAgKzU5MSwxMSBAQAogc3RhdGljIGludCBldGhlcmhfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewogCWNtZC0+c3VwcG9ydGVkCT0gZXRoZXJoX3ByaXYoZGV2KS0+c3VwcG9ydGVkOwotCWNtZC0+c3BlZWQJPSBTUEVFRF8xMDsKKwlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCBTUEVFRF8xMCk7CiAJY21kLT5kdXBsZXgJPSBEVVBMRVhfSEFMRjsKIAljbWQtPnBvcnQJPSBkZXYtPmlmX3BvcnQgPT0gSUZfUE9SVF8xMEJBU0VUID8gUE9SVF9UUCA6IFBPUlRfQk5DOwotCWNtZC0+YXV0b25lZwk9IGRldi0+ZmxhZ3MgJiBJRkZfQVVUT01FRElBID8gQVVUT05FR19FTkFCTEUgOiBBVVRPTkVHX0RJU0FCTEU7CisJY21kLT5hdXRvbmVnCT0gKGRldi0+ZmxhZ3MgJiBJRkZfQVVUT01FRElBID8KKwkJCSAgIEFVVE9ORUdfRU5BQkxFIDogQVVUT05FR19ESVNBQkxFKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2tzODY5NW5ldC5jIGIvZHJpdmVycy9uZXQvYXJtL2tzODY5NW5ldC5jCmluZGV4IGFhMDc2NTcuLmE3YjBjYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9rczg2OTVuZXQuYworKysgYi9kcml2ZXJzL25ldC9hcm0va3M4Njk1bmV0LmMKQEAgLTg5MSwxNSArODkxLDE2IEBACiAJCQljbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfUGF1c2U7CiAJCWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOwogCi0JCWNtZC0+c3BlZWQgPSAoY3RybCAmIFdNQ19XU1MpID8gU1BFRURfMTAwIDogU1BFRURfMTA7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsCisJCQkJICAgICAgKGN0cmwgJiBXTUNfV1NTKSA/IFNQRUVEXzEwMCA6IFNQRUVEXzEwKTsKIAkJY21kLT5kdXBsZXggPSAoY3RybCAmIFdNQ19XRFMpID8KIAkJCURVUExFWF9GVUxMIDogRFVQTEVYX0hBTEY7CiAJfSBlbHNlIHsKIAkJLyogYXV0by1uZWdvdGlhdGlvbiBpcyBkaXNhYmxlZCAqLwogCQljbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7CiAKLQkJY21kLT5zcGVlZCA9IChjdHJsICYgV01DX1dBTkYxMDApID8KLQkJCVNQRUVEXzEwMCA6IFNQRUVEXzEwOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCAoKGN0cmwgJiBXTUNfV0FORjEwMCkgPworCQkJCQkgICAgU1BFRURfMTAwIDogU1BFRURfMTApKTsKIAkJY21kLT5kdXBsZXggPSAoY3RybCAmIFdNQ19XQU5GRikgPwogCQkJRFVQTEVYX0ZVTEwgOiBEVVBMRVhfSEFMRjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19ldGh0b29sLmMKaW5kZXggN2M1MjE1MC4uN2JlODg0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX2V0aHRvb2wuYwpAQCAtNTAsMTMgKzUwLDEzIEBACiAJZWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0lOVEVSTkFMOwogCiAJaWYgKGFkYXB0ZXItPmxpbmtfc3BlZWQgIT0gU1BFRURfMCkgewotCQllY21kLT5zcGVlZCA9IGFkYXB0ZXItPmxpbmtfc3BlZWQ7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBhZGFwdGVyLT5saW5rX3NwZWVkKTsKIAkJaWYgKGFkYXB0ZXItPmxpbmtfZHVwbGV4ID09IEZVTExfRFVQTEVYKQogCQkJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CiAJCWVsc2UKIAkJCWVjbWQtPmR1cGxleCA9IERVUExFWF9IQUxGOwogCX0gZWxzZSB7Ci0JCWVjbWQtPnNwZWVkID0gLTE7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCAtMSk7CiAJCWVjbWQtPmR1cGxleCA9IC0xOwogCX0KIApAQCAtNzcsNyArNzcsOCBAQAogCWlmIChlY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSB7CiAJCWF1dG9uZWdfYWR2ZXJ0aXNlZCA9IEFEVkVSVElTRURfQXV0b25lZzsKIAl9IGVsc2UgewotCQlpZiAoZWNtZC0+c3BlZWQgPT0gU1BFRURfMTAwMCkgeworCQl1MzIgc3BlZWQgPSBldGh0b29sX2NtZF9zcGVlZChlY21kKTsKKwkJaWYgKHNwZWVkID09IFNQRUVEXzEwMDApIHsKIAkJCWlmIChlY21kLT5kdXBsZXggIT0gRFVQTEVYX0ZVTEwpIHsKIAkJCQlpZiAobmV0aWZfbXNnX2xpbmsoYWRhcHRlcikpCiAJCQkJCWRldl93YXJuKCZhZGFwdGVyLT5wZGV2LT5kZXYsCkBAIC04Niw3ICs4Nyw3IEBACiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCQlhdXRvbmVnX2FkdmVydGlzZWQgPSBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsOwotCQl9IGVsc2UgaWYgKGVjbWQtPnNwZWVkID09IFNQRUVEXzEwMCkgeworCQl9IGVsc2UgaWYgKHNwZWVkID09IFNQRUVEXzEwMCkgewogCQkJaWYgKGVjbWQtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkKIAkJCQlhdXRvbmVnX2FkdmVydGlzZWQgPSBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGw7CiAJCQllbHNlCkBAIC0xMTMsMTEgKzExNCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1MzIgYXRsMWNfZ2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKLXsKLQlyZXR1cm4gKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX0NTVU0pICE9IDA7Ci19Ci0KIHN0YXRpYyB1MzIgYXRsMWNfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwpAQCAtMzA3LDkgKzMwMyw2IEBACiAJLmdldF9saW5rICAgICAgICAgICAgICAgPSBldGh0b29sX29wX2dldF9saW5rLAogCS5nZXRfZWVwcm9tX2xlbiAgICAgICAgID0gYXRsMWNfZ2V0X2VlcHJvbV9sZW4sCiAJLmdldF9lZXByb20gICAgICAgICAgICAgPSBhdGwxY19nZXRfZWVwcm9tLAotCS5nZXRfdHhfY3N1bSAgICAgICAgICAgID0gYXRsMWNfZ2V0X3R4X2NzdW0sCi0JLmdldF9zZyAgICAgICAgICAgICAgICAgPSBldGh0b29sX29wX2dldF9zZywKLQkuc2V0X3NnICAgICAgICAgICAgICAgICA9IGV0aHRvb2xfb3Bfc2V0X3NnLAogfTsKIAogdm9pZCBhdGwxY19zZXRfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX21haW4uYwppbmRleCBhNmUxYzM2Li4xMjY5YmE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfbWFpbi5jCkBAIC00ODAsNiArNDgwLDE1IEBACiAJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IG10dSA+IEFUX1JYX0JVRl9TSVpFID8KIAkJcm91bmR1cChtdHUgKyBFVEhfSExFTiArIEVUSF9GQ1NfTEVOICsgVkxBTl9ITEVOLCA4KSA6IEFUX1JYX0JVRl9TSVpFOwogfQorCitzdGF0aWMgdTMyIGF0bDFjX2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZmVhdHVyZXMpCit7CisJaWYgKG5ldGRldi0+bXR1ID4gTUFYX1RTT19GUkFNRV9TSVpFKQorCQlmZWF0dXJlcyAmPSB+KE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082KTsKKworCXJldHVybiBmZWF0dXJlczsKK30KKwogLyoKICAqIGF0bDFjX2NoYW5nZV9tdHUgLSBDaGFuZ2UgdGhlIE1heGltdW0gVHJhbnNmZXIgVW5pdAogICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQpAQCAtNTA2LDE0ICs1MTUsOCBAQAogCQluZXRkZXYtPm10dSA9IG5ld19tdHU7CiAJCWFkYXB0ZXItPmh3Lm1heF9mcmFtZV9zaXplID0gbmV3X210dTsKIAkJYXRsMWNfc2V0X3J4YnVmc2l6ZShhZGFwdGVyLCBuZXRkZXYpOwotCQlpZiAobmV3X210dSA+IE1BWF9UU09fRlJBTUVfU0laRSkgewotCQkJYWRhcHRlci0+bmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9UU087Ci0JCQlhZGFwdGVyLT5uZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzY7Ci0JCX0gZWxzZSB7Ci0JCQlhZGFwdGVyLT5uZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwotCQkJYWRhcHRlci0+bmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7Ci0JCX0KIAkJYXRsMWNfZG93bihhZGFwdGVyKTsKKwkJbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhuZXRkZXYpOwogCQlhdGwxY191cChhZGFwdGVyKTsKIAkJY2xlYXJfYml0KF9fQVRfUkVTRVRUSU5HLCAmYWRhcHRlci0+ZmxhZ3MpOwogCQlpZiAoYWRhcHRlci0+aHcuY3RybF9mbGFncyAmIEFUTDFDX0ZQR0FfVkVSU0lPTikgewpAQCAtMTA4OCwxMCArMTA5MSw4IEBACiAJdTMyIG1heF9wYXlfbG9hZDsKIAl1MTYgdHhfb2ZmbG9hZF90aHJlc2g7CiAJdTMyIHR4cV9jdHJsX2RhdGE7Ci0JdTMyIGV4dHJhX3NpemUgPSAwOyAgICAgLyogSnVtYm8gZnJhbWUgdGhyZXNob2xkIGluIFFXT1JEIHVuaXQgKi8KIAl1MzIgbWF4X3BheV9sb2FkX2RhdGE7CiAKLQlleHRyYV9zaXplID0gRVRIX0hMRU4gKyBWTEFOX0hMRU4gKyBFVEhfRkNTX0xFTjsKIAl0eF9vZmZsb2FkX3RocmVzaCA9IE1BWF9UWF9PRkZMT0FEX1RIUkVTSDsKIAlBVF9XUklURV9SRUcoaHcsIFJFR19UWF9UU09fT0ZGTE9BRF9USFJFU0gsCiAJCSh0eF9vZmZsb2FkX3RocmVzaCA+PiAzKSAmIFRYX1RTT19PRkZMT0FEX1RIUkVTSF9NQVNLKTsKQEAgLTI1MzYsNiArMjUzNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIHN0YXRpYyBpbnQgYXRsMWNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKQEAgLTI1NjIsNiArMjU2NCw3IEBACiAKIAlyZXR1cm4gMDsKIH0KKyNlbmRpZgogCiBzdGF0aWMgdm9pZCBhdGwxY19zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKQEAgLTI1ODEsNiArMjU4NCw3IEBACiAJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gYXRsMWNfc2V0X21hY19hZGRyLAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gYXRsMWNfc2V0X211bHRpLAogCS5uZG9fY2hhbmdlX210dQkJPSBhdGwxY19jaGFuZ2VfbXR1LAorCS5uZG9fZml4X2ZlYXR1cmVzCT0gYXRsMWNfZml4X2ZlYXR1cmVzLAogCS5uZG9fZG9faW9jdGwJCT0gYXRsMWNfaW9jdGwsCiAJLm5kb190eF90aW1lb3V0CQk9IGF0bDFjX3R4X3RpbWVvdXQsCiAJLm5kb19nZXRfc3RhdHMJCT0gYXRsMWNfZ2V0X3N0YXRzLApAQCAtMjYwMSwxMiArMjYwNSwxMyBAQAogCWF0bDFjX3NldF9ldGh0b29sX29wcyhuZXRkZXYpOwogCiAJLyogVE9ETzogYWRkIHdoZW4gcmVhZHkgKi8KLQluZXRkZXYtPmZlYXR1cmVzID0JTkVUSUZfRl9TRwkgICB8CisJbmV0ZGV2LT5od19mZWF0dXJlcyA9CU5FVElGX0ZfU0cJICAgfAogCQkJCU5FVElGX0ZfSFdfQ1NVTQkgICB8CiAJCQkJTkVUSUZfRl9IV19WTEFOX1RYIHwKLQkJCQlORVRJRl9GX0hXX1ZMQU5fUlggfAogCQkJCU5FVElGX0ZfVFNPCSAgIHwKIAkJCQlORVRJRl9GX1RTTzY7CisJbmV0ZGV2LT5mZWF0dXJlcyA9CW5ldGRldi0+aHdfZmVhdHVyZXMgfAorCQkJCU5FVElGX0ZfSFdfVkxBTl9SWDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfZXRodG9vbC5jCmluZGV4IDEyMDkyOTcuLjYyNjk0MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9ldGh0b29sLmMKQEAgLTUxLDEzICs1MSwxMyBAQAogCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKIAogCWlmIChhZGFwdGVyLT5saW5rX3NwZWVkICE9IFNQRUVEXzApIHsKLQkJZWNtZC0+c3BlZWQgPSBhZGFwdGVyLT5saW5rX3NwZWVkOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgYWRhcHRlci0+bGlua19zcGVlZCk7CiAJCWlmIChhZGFwdGVyLT5saW5rX2R1cGxleCA9PSBGVUxMX0RVUExFWCkKIAkJCWVjbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOwogCQllbHNlCiAJCQllY21kLT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKIAl9IGVsc2UgewotCQllY21kLT5zcGVlZCA9IC0xOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgLTEpOwogCQllY21kLT5kdXBsZXggPSAtMTsKIAl9CiAKQEAgLTM4Miw5ICszODIsNiBAQAogCS5nZXRfZWVwcm9tX2xlbiAgICAgICAgID0gYXRsMWVfZ2V0X2VlcHJvbV9sZW4sCiAJLmdldF9lZXByb20gICAgICAgICAgICAgPSBhdGwxZV9nZXRfZWVwcm9tLAogCS5zZXRfZWVwcm9tICAgICAgICAgICAgID0gYXRsMWVfc2V0X2VlcHJvbSwKLQkuc2V0X3R4X2NzdW0gICAgICAgICAgICA9IGV0aHRvb2xfb3Bfc2V0X3R4X2h3X2NzdW0sCi0JLnNldF9zZyAgICAgICAgICAgICAgICAgPSBldGh0b29sX29wX3NldF9zZywKLQkuc2V0X3RzbyAgICAgICAgICAgICAgICA9IGV0aHRvb2xfb3Bfc2V0X3RzbywKIH07CiAKIHZvaWQgYXRsMWVfc2V0X2V0aHRvb2xfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9tYWluLmMgYi9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9tYWluLmMKaW5kZXggYjBhNzFlMi4uODZhOTEyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX21haW4uYwpAQCAtNjkxLDEwICs2OTEsOCBAQAogCiBzdGF0aWMgdm9pZCBhdGwxZV9pbml0X3JpbmdfcmVzb3VyY2VzKHN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyKQogewotCXN0cnVjdCBhdGwxZV90eF9yaW5nICp0eF9yaW5nID0gTlVMTDsKIAlzdHJ1Y3QgYXRsMWVfcnhfcmluZyAqcnhfcmluZyA9IE5VTEw7CiAKLQl0eF9yaW5nID0gJmFkYXB0ZXItPnR4X3Jpbmc7CiAJcnhfcmluZyA9ICZhZGFwdGVyLT5yeF9yaW5nOwogCiAJcnhfcmluZy0+cmVhbF9wYWdlX3NpemUgPSBhZGFwdGVyLT5yeF9yaW5nLnBhZ2Vfc2l6ZQpAQCAtMTkyNywxMSArMTkyNSw3IEBACiAJICogcmVzY2hlZHVsZSBvdXIgd2F0Y2hkb2cgdGltZXIgKi8KIAlzZXRfYml0KF9fQVRfRE9XTiwgJmFkYXB0ZXItPmZsYWdzKTsKIAotI2lmZGVmIE5FVElGX0ZfTExUWAogCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKLSNlbHNlCi0JbmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpOwotI2VuZGlmCiAKIAkvKiByZXNldCBNQUMgdG8gZGlzYWJsZSBhbGwgUlgvVFggKi8KIAlhdGwxZV9yZXNldF9odygmYWRhcHRlci0+aHcpOwpAQCAtMjIyMywxMCArMjIxNywxMCBAQAogCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gPSBBVF9UWF9XQVRDSERPRzsKIAlhdGwxZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTsKIAotCW5ldGRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9IV19DU1VNIHwKLQkJTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYOwotCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MTFRYOwotCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CisJbmV0ZGV2LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0hXX0NTVU0gfCBORVRJRl9GX1RTTyB8CisJCU5FVElGX0ZfSFdfVkxBTl9UWDsKKwluZXRkZXYtPmZlYXR1cmVzID0gbmV0ZGV2LT5od19mZWF0dXJlcyB8CisJCU5FVElGX0ZfSFdfVkxBTl9SWCB8IE5FVElGX0ZfTExUWDsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRseC9hdGwxLmMgYi9kcml2ZXJzL25ldC9hdGx4L2F0bDEuYwppbmRleCA2N2Y0MGI5Li5jZDU3ODlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGx4L2F0bDEuYworKysgYi9kcml2ZXJzL25ldC9hdGx4L2F0bDEuYwpAQCAtODMsOCArODMsOSBAQAogI2luY2x1ZGUgImF0bDEuaCIKIAogI2RlZmluZSBBVExYX0RSSVZFUl9WRVJTSU9OICIyLjEuMyIKLU1PRFVMRV9BVVRIT1IoIlhpb25nIEh1YW5nIDx4aW9uZy5odWFuZ0BhdGhlcm9zLmNvbT4sIFwKLUNocmlzIFNub29rIDxjc25vb2tAcmVkaGF0LmNvbT4sIEpheSBDbGlidXJuIDxqY2xpYnVybkBnbWFpbC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJYaW9uZyBIdWFuZyA8eGlvbmcuaHVhbmdAYXRoZXJvcy5jb20+LCAiCisJICAgICAgIkNocmlzIFNub29rIDxjc25vb2tAcmVkaGF0LmNvbT4sICIKKwkgICAgICAiSmF5IENsaWJ1cm4gPGpjbGlidXJuQGdtYWlsLmNvbT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9WRVJTSU9OKEFUTFhfRFJJVkVSX1ZFUlNJT04pOwogCkBAIC0yMDc0LDkgKzIwNzUsNiBAQAogCWNtYl90cGRfbmV4dF90b19jbGVhbiA9IGxlMTZfdG9fY3B1KGFkYXB0ZXItPmNtYi5jbWItPnRwZF9jb25zX2lkeCk7CiAKIAl3aGlsZSAoY21iX3RwZF9uZXh0X3RvX2NsZWFuICE9IHN3X3RwZF9uZXh0X3RvX2NsZWFuKSB7Ci0JCXN0cnVjdCB0eF9wYWNrZXRfZGVzYyAqdHBkOwotCi0JCXRwZCA9IEFUTDFfVFBEX0RFU0ModHBkX3JpbmcsIHN3X3RwZF9uZXh0X3RvX2NsZWFuKTsKIAkJYnVmZmVyX2luZm8gPSAmdHBkX3JpbmctPmJ1ZmZlcl9pbmZvW3N3X3RwZF9uZXh0X3RvX2NsZWFuXTsKIAkJaWYgKGJ1ZmZlcl9pbmZvLT5kbWEpIHsKIAkJCXBjaV91bm1hcF9wYWdlKGFkYXB0ZXItPnBkZXYsIGJ1ZmZlcl9pbmZvLT5kbWEsCkBAIC0yNTcyLDcgKzI1NzAsNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJaW50IGVycjsKLQlpbnQgaXJxX2ZsYWdzID0gSVJRRl9TQU1QTEVfUkFORE9NOworCWludCBpcnFfZmxhZ3MgPSAwOwogCiAJLyogaGFyZHdhcmUgaGFzIGJlZW4gcmVzZXQsIHdlIG5lZWQgdG8gcmVsb2FkIHNvbWUgdGhpbmdzICovCiAJYXRseF9zZXRfbXVsdGkobmV0ZGV2KTsKQEAgLTI5ODYsNiArMjk4NCwxMSBAQAogCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRzsKIAluZXRkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlgpOwogCisJbmV0ZGV2LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfSFdfQ1NVTSB8IE5FVElGX0ZfU0cgfCBORVRJRl9GX1RTTzsKKworCS8qIGlzIHRoaXMgdmFsaWQ/IHNlZSBhdGwxX3NldHVwX21hY19jdHJsKCkgKi8KKwluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfUlhDU1VNOworCiAJLyoKIAkgKiBwYXRjaCBmb3Igc29tZSBMMSBvZiBvbGQgdmVyc2lvbiwKIAkgKiB0aGUgZmluYWwgdmVyc2lvbiBvZiBMMSBtYXkgbm90IG5lZWQgdGhlc2UKQEAgLTMyMjksMTMgKzMyMzIsMTMgQEAKIAlpZiAobmV0aWZfY2Fycmllcl9vayhhZGFwdGVyLT5uZXRkZXYpKSB7CiAJCXUxNiBsaW5rX3NwZWVkLCBsaW5rX2R1cGxleDsKIAkJYXRsMV9nZXRfc3BlZWRfYW5kX2R1cGxleChodywgJmxpbmtfc3BlZWQsICZsaW5rX2R1cGxleCk7Ci0JCWVjbWQtPnNwZWVkID0gbGlua19zcGVlZDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIGxpbmtfc3BlZWQpOwogCQlpZiAobGlua19kdXBsZXggPT0gRlVMTF9EVVBMRVgpCiAJCQllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKIAkJZWxzZQogCQkJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0hBTEY7CiAJfSBlbHNlIHsKLQkJZWNtZC0+c3BlZWQgPSAtMTsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIC0xKTsKIAkJZWNtZC0+ZHVwbGV4ID0gLTE7CiAJfQogCWlmIChody0+bWVkaWFfdHlwZSA9PSBNRURJQV9UWVBFX0FVVE9fU0VOU09SIHx8CkBAIC0zMjY2LDcgKzMyNjksOCBAQAogCWlmIChlY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKQogCQlody0+bWVkaWFfdHlwZSA9IE1FRElBX1RZUEVfQVVUT19TRU5TT1I7CiAJZWxzZSB7Ci0JCWlmIChlY21kLT5zcGVlZCA9PSBTUEVFRF8xMDAwKSB7CisJCXUzMiBzcGVlZCA9IGV0aHRvb2xfY21kX3NwZWVkKGVjbWQpOworCQlpZiAoc3BlZWQgPT0gU1BFRURfMTAwMCkgewogCQkJaWYgKGVjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkgewogCQkJCWlmIChuZXRpZl9tc2dfbGluayhhZGFwdGVyKSkKIAkJCQkJZGV2X3dhcm4oJmFkYXB0ZXItPnBkZXYtPmRldiwKQEAgLTMyNzUsNyArMzI3OSw3IEBACiAJCQkJZ290byBleGl0X3NzZXQ7CiAJCQl9CiAJCQlody0+bWVkaWFfdHlwZSA9IE1FRElBX1RZUEVfMTAwME1fRlVMTDsKLQkJfSBlbHNlIGlmIChlY21kLT5zcGVlZCA9PSBTUEVFRF8xMDApIHsKKwkJfSBlbHNlIGlmIChzcGVlZCA9PSBTUEVFRF8xMDApIHsKIAkJCWlmIChlY21kLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCiAJCQkJaHctPm1lZGlhX3R5cGUgPSBNRURJQV9UWVBFXzEwME1fRlVMTDsKIAkJCWVsc2UKQEAgLTM1OTUsMTIgKzM1OTksNiBAQAogCXJldHVybiAwOwogfQogCi0vKiBGSVhNRTogaXMgdGhpcyByaWdodD8gLS0gQ0hTICovCi1zdGF0aWMgdTMyIGF0bDFfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKLXsKLQlyZXR1cm4gMTsKLX0KLQogc3RhdGljIHZvaWQgYXRsMV9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgc3RyaW5nc2V0LAogCXU4ICpkYXRhKQogewpAQCAtMzY2OCwxMyArMzY2Niw5IEBACiAJLnNldF9yaW5ncGFyYW0JCT0gYXRsMV9zZXRfcmluZ3BhcmFtLAogCS5nZXRfcGF1c2VwYXJhbQkJPSBhdGwxX2dldF9wYXVzZXBhcmFtLAogCS5zZXRfcGF1c2VwYXJhbQkJPSBhdGwxX3NldF9wYXVzZXBhcmFtLAotCS5nZXRfcnhfY3N1bQkJPSBhdGwxX2dldF9yeF9jc3VtLAotCS5zZXRfdHhfY3N1bQkJPSBldGh0b29sX29wX3NldF90eF9od19jc3VtLAogCS5nZXRfbGluawkJPSBldGh0b29sX29wX2dldF9saW5rLAotCS5zZXRfc2cJCQk9IGV0aHRvb2xfb3Bfc2V0X3NnLAogCS5nZXRfc3RyaW5ncwkJPSBhdGwxX2dldF9zdHJpbmdzLAogCS5ud2F5X3Jlc2V0CQk9IGF0bDFfbndheV9yZXNldCwKIAkuZ2V0X2V0aHRvb2xfc3RhdHMJPSBhdGwxX2dldF9ldGh0b29sX3N0YXRzLAogCS5nZXRfc3NldF9jb3VudAkJPSBhdGwxX2dldF9zc2V0X2NvdW50LAotCS5zZXRfdHNvCQk9IGV0aHRvb2xfb3Bfc2V0X3RzbywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGx4L2F0bDIuYyBiL2RyaXZlcnMvbmV0L2F0bHgvYXRsMi5jCmluZGV4IGUzY2JmNDUuLjE2MjQ5ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bHgvYXRsMi5jCisrKyBiL2RyaXZlcnMvbmV0L2F0bHgvYXRsMi5jCkBAIC0xNDExLDkgKzE0MTEsOCBAQAogCiAJZXJyID0gLUVJTzsKIAotI2lmZGVmIE5FVElGX0ZfSFdfVkxBTl9UWAorCW5ldGRldi0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHOwogCW5ldGRldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWCk7Ci0jZW5kaWYKIAogCS8qIEluaXQgUEhZIGFzIGVhcmx5IGFzIHBvc3NpYmxlIGR1ZSB0byBwb3dlciBzYXZpbmcgaXNzdWUgICovCiAJYXRsMl9waHlfaW5pdCgmYWRhcHRlci0+aHcpOwpAQCAtMTc3MCwxMyArMTc2OSwxMyBAQAogCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKIAogCWlmIChhZGFwdGVyLT5saW5rX3NwZWVkICE9IFNQRUVEXzApIHsKLQkJZWNtZC0+c3BlZWQgPSBhZGFwdGVyLT5saW5rX3NwZWVkOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgYWRhcHRlci0+bGlua19zcGVlZCk7CiAJCWlmIChhZGFwdGVyLT5saW5rX2R1cGxleCA9PSBGVUxMX0RVUExFWCkKIAkJCWVjbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOwogCQllbHNlCiAJCQllY21kLT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKIAl9IGVsc2UgewotCQllY21kLT5zcGVlZCA9IC0xOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgLTEpOwogCQllY21kLT5kdXBsZXggPSAtMTsKIAl9CiAKQEAgLTE4NDAsMTEgKzE4MzksNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTMyIGF0bDJfZ2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKLXsKLQlyZXR1cm4gKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX0NTVU0pICE9IDA7Ci19Ci0KIHN0YXRpYyB1MzIgYXRsMl9nZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlyZXR1cm4gMDsKQEAgLTIxMTIsMTIgKzIxMDYsNiBAQAogCS5nZXRfZWVwcm9tX2xlbgkJPSBhdGwyX2dldF9lZXByb21fbGVuLAogCS5nZXRfZWVwcm9tCQk9IGF0bDJfZ2V0X2VlcHJvbSwKIAkuc2V0X2VlcHJvbQkJPSBhdGwyX3NldF9lZXByb20sCi0JLmdldF90eF9jc3VtCQk9IGF0bDJfZ2V0X3R4X2NzdW0sCi0JLmdldF9zZwkJCT0gZXRodG9vbF9vcF9nZXRfc2csCi0JLnNldF9zZwkJCT0gZXRodG9vbF9vcF9zZXRfc2csCi0jaWZkZWYgTkVUSUZfRl9UU08KLQkuZ2V0X3RzbwkJPSBldGh0b29sX29wX2dldF90c28sCi0jZW5kaWYKIH07CiAKIHN0YXRpYyB2b2lkIGF0bDJfc2V0X2V0aHRvb2xfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iNDQuYyBiL2RyaXZlcnMvbmV0L2I0NC5jCmluZGV4IDJlMmI3NjIuLmE2OTMzMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2I0NC5jCisrKyBiL2RyaXZlcnMvbmV0L2I0NC5jCkBAIC0xODA3LDggKzE4MDcsOCBAQAogCWlmIChicC0+ZmxhZ3MgJiBCNDRfRkxBR19BRFZfMTAwRlVMTCkKIAkJY21kLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGw7CiAJY21kLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEX1BhdXNlIHwgQURWRVJUSVNFRF9Bc3ltX1BhdXNlOwotCWNtZC0+c3BlZWQgPSAoYnAtPmZsYWdzICYgQjQ0X0ZMQUdfMTAwX0JBU0VfVCkgPwotCQlTUEVFRF8xMDAgOiBTUEVFRF8xMDsKKwlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCAoKGJwLT5mbGFncyAmIEI0NF9GTEFHXzEwMF9CQVNFX1QpID8KKwkJCQkgICAgU1BFRURfMTAwIDogU1BFRURfMTApKTsKIAljbWQtPmR1cGxleCA9IChicC0+ZmxhZ3MgJiBCNDRfRkxBR19GVUxMX0RVUExFWCkgPwogCQlEVVBMRVhfRlVMTCA6IERVUExFWF9IQUxGOwogCWNtZC0+cG9ydCA9IDA7CkBAIC0xODIwLDcgKzE4MjAsNyBAQAogCWlmIChjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpCiAJCWNtZC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF9BdXRvbmVnOwogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKXsKLQkJY21kLT5zcGVlZCA9IDA7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIDApOwogCQljbWQtPmR1cGxleCA9IDB4ZmY7CiAJfQogCWNtZC0+bWF4dHhwa3QgPSAwOwpAQCAtMTgzMSw2ICsxODMxLDcgQEAKIHN0YXRpYyBpbnQgYjQ0X3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3QgYjQ0ICpicCA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIHNwZWVkID0gZXRodG9vbF9jbWRfc3BlZWQoY21kKTsKIAogCS8qIFdlIGRvIG5vdCBzdXBwb3J0IGdpZ2FiaXQuICovCiAJaWYgKGNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgewpAQCAtMTgzOCw4ICsxODM5LDggQEAKIAkJICAgIChBRFZFUlRJU0VEXzEwMDBiYXNlVF9IYWxmIHwKIAkJICAgICBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsKSkKIAkJCXJldHVybiAtRUlOVkFMOwotCX0gZWxzZSBpZiAoKGNtZC0+c3BlZWQgIT0gU1BFRURfMTAwICYmCi0JCSAgICBjbWQtPnNwZWVkICE9IFNQRUVEXzEwKSB8fAorCX0gZWxzZSBpZiAoKHNwZWVkICE9IFNQRUVEXzEwMCAmJgorCQkgICAgc3BlZWQgIT0gU1BFRURfMTApIHx8CiAJCSAgIChjbWQtPmR1cGxleCAhPSBEVVBMRVhfSEFMRiAmJgogCQkgICAgY21kLT5kdXBsZXggIT0gRFVQTEVYX0ZVTEwpKSB7CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE4NzMsNyArMTg3NCw3IEBACiAJfSBlbHNlIHsKIAkJYnAtPmZsYWdzIHw9IEI0NF9GTEFHX0ZPUkNFX0xJTks7CiAJCWJwLT5mbGFncyAmPSB+KEI0NF9GTEFHXzEwMF9CQVNFX1QgfCBCNDRfRkxBR19GVUxMX0RVUExFWCk7Ci0JCWlmIChjbWQtPnNwZWVkID09IFNQRUVEXzEwMCkKKwkJaWYgKHNwZWVkID09IFNQRUVEXzEwMCkKIAkJCWJwLT5mbGFncyB8PSBCNDRfRkxBR18xMDBfQkFTRV9UOwogCQlpZiAoY21kLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCiAJCQlicC0+ZmxhZ3MgfD0gQjQ0X0ZMQUdfRlVMTF9EVVBMRVg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iY202M3h4X2VuZXQuYyBiL2RyaXZlcnMvbmV0L2JjbTYzeHhfZW5ldC5jCmluZGV4IGM0ODEwNGIuLmYxNTczZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JjbTYzeHhfZW5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L2JjbTYzeHhfZW5ldC5jCkBAIC04MzksOCArODM5LDggQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dF9waHlfZGlzY29ubmVjdDsKIAotCXJldCA9IHJlcXVlc3RfaXJxKHByaXYtPmlycV9yeCwgYmNtX2VuZXRfaXNyX2RtYSwKLQkJCSAgSVJRRl9TQU1QTEVfUkFORE9NIHwgSVJRRl9ESVNBQkxFRCwgZGV2LT5uYW1lLCBkZXYpOworCXJldCA9IHJlcXVlc3RfaXJxKHByaXYtPmlycV9yeCwgYmNtX2VuZXRfaXNyX2RtYSwgSVJRRl9ESVNBQkxFRCwKKwkJCSAgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2ZyZWVpcnE7CiAKQEAgLTEzNDYsNyArMTM0Niw4IEBACiAJCXJldHVybiBwaHlfZXRodG9vbF9nc2V0KHByaXYtPnBoeWRldiwgY21kKTsKIAl9IGVsc2UgewogCQljbWQtPmF1dG9uZWcgPSAwOwotCQljbWQtPnNwZWVkID0gKHByaXYtPmZvcmNlX3NwZWVkXzEwMCkgPyBTUEVFRF8xMDAgOiBTUEVFRF8xMDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgKChwcml2LT5mb3JjZV9zcGVlZF8xMDApCisJCQkJCSAgICA/IFNQRUVEXzEwMCA6IFNQRUVEXzEwKSk7CiAJCWNtZC0+ZHVwbGV4ID0gKHByaXYtPmZvcmNlX2R1cGxleF9mdWxsKSA/CiAJCQlEVVBMRVhfRlVMTCA6IERVUExFWF9IQUxGOwogCQljbWQtPnN1cHBvcnRlZCA9IEFEVkVSVElTRURfMTBiYXNlVF9IYWxmICB8CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZW5ldC9iZS5oIGIvZHJpdmVycy9uZXQvYmVuZXQvYmUuaAppbmRleCAyMzUzZWNhLi5hN2RiODcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZW5ldC9iZS5oCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlLmgKQEAgLTQ5LDYgKzQ5LDcgQEAKICNkZWZpbmUgT0NfREVWSUNFX0lEMQkJMHg3MDAJLyogRGV2aWNlIElkIGZvciBCRTIgY2FyZHMgKi8KICNkZWZpbmUgT0NfREVWSUNFX0lEMgkJMHg3MTAJLyogRGV2aWNlIElkIGZvciBCRTMgY2FyZHMgKi8KICNkZWZpbmUgT0NfREVWSUNFX0lEMwkJMHhlMjIwCS8qIERldmljZSBpZCBmb3IgTGFuY2VyIGNhcmRzICovCisjZGVmaW5lIE9DX0RFVklDRV9JRDQgICAgICAgICAgIDB4ZTIyOCAgIC8qIERldmljZSBpZCBmb3IgVkYgaW4gTGFuY2VyICovCiAKIHN0YXRpYyBpbmxpbmUgY2hhciAqbmljX25hbWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CkBAIC01OCw2ICs1OSw3IEBACiAJY2FzZSBPQ19ERVZJQ0VfSUQyOgogCQlyZXR1cm4gT0NfTkFNRV9CRTsKIAljYXNlIE9DX0RFVklDRV9JRDM6CisJY2FzZSBPQ19ERVZJQ0VfSUQ0OgogCQlyZXR1cm4gT0NfTkFNRV9MQU5DRVI7CiAJY2FzZSBCRV9ERVZJQ0VfSUQyOgogCQlyZXR1cm4gQkUzX05BTUU7CkBAIC04NCwxNSArODYsMTQgQEAKICNkZWZpbmUgTUNDX0NRX0xFTgkJMjU2CiAKICNkZWZpbmUgTUFYX1JTU19RUwkJNAkvKiBCRSBsaW1pdCBpcyA0IHF1ZXVlcy9wb3J0ICovCi0jZGVmaW5lIEJFX01BWF9NU0lYX1ZFQ1RPUlMJKE1BWF9SU1NfUVMgKyAxICsgMSkvKiBSU1MgcXMgKyAxIGRlZiBSeCArIFR4ICovCisjZGVmaW5lIE1BWF9SWF9RUwkJKE1BWF9SU1NfUVMgKyAxKSAvKiBSU1MgcXMgKyAxIGRlZiBSeCAqLworI2RlZmluZSBCRV9NQVhfTVNJWF9WRUNUT1JTCShNQVhfUlhfUVMgKyAxKS8qIFJYICsgVFggKi8KICNkZWZpbmUgQkVfTkFQSV9XRUlHSFQJCTY0CiAjZGVmaW5lIE1BWF9SWF9QT1NUIAkJQkVfTkFQSV9XRUlHSFQgLyogRnJhZ3MgcG9zdGVkIGF0IGEgdGltZSAqLwogI2RlZmluZSBSWF9GUkFHU19SRUZJTExfV00JKFJYX1FfTEVOIC0gTUFYX1JYX1BPU1QpCiAKICNkZWZpbmUgRldfVkVSX0xFTgkJMzIKIAotI2RlZmluZSBCRV9NQVhfVkYJCTMyCi0KIHN0cnVjdCBiZV9kbWFfbWVtIHsKIAl2b2lkICp2YTsKIAlkbWFfYWRkcl90IGRtYTsKQEAgLTI0NSw2ICsyNDYsNDMgQEAKIAogc3RydWN0IGJlX2Rydl9zdGF0cyB7CiAJdTggYmVfb25fZGllX3RlbXBlcmF0dXJlOworCXU2NCBiZV90eF9ldmVudHM7CisJdTY0IGV0aF9yZWRfZHJvcHM7CisJdTY0IHJ4X2Ryb3BzX25vX3BidWY7CisJdTY0IHJ4X2Ryb3BzX25vX3R4cGI7CisJdTY0IHJ4X2Ryb3BzX25vX2VyeF9kZXNjcjsKKwl1NjQgcnhfZHJvcHNfbm9fdHByZV9kZXNjcjsKKwl1NjQgcnhfZHJvcHNfdG9vX21hbnlfZnJhZ3M7CisJdTY0IHJ4X2Ryb3BzX2ludmFsaWRfcmluZzsKKwl1NjQgZm9yd2FyZGVkX3BhY2tldHM7CisJdTY0IHJ4X2Ryb3BzX210dTsKKwl1NjQgcnhfY3JjX2Vycm9yczsKKwl1NjQgcnhfYWxpZ25tZW50X3N5bWJvbF9lcnJvcnM7CisJdTY0IHJ4X3BhdXNlX2ZyYW1lczsKKwl1NjQgcnhfcHJpb3JpdHlfcGF1c2VfZnJhbWVzOworCXU2NCByeF9jb250cm9sX2ZyYW1lczsKKwl1NjQgcnhfaW5fcmFuZ2VfZXJyb3JzOworCXU2NCByeF9vdXRfcmFuZ2VfZXJyb3JzOworCXU2NCByeF9mcmFtZV90b29fbG9uZzsKKwl1NjQgcnhfYWRkcmVzc19tYXRjaF9lcnJvcnM7CisJdTY0IHJ4X2Ryb3BwZWRfdG9vX3NtYWxsOworCXU2NCByeF9kcm9wcGVkX3Rvb19zaG9ydDsKKwl1NjQgcnhfZHJvcHBlZF9oZWFkZXJfdG9vX3NtYWxsOworCXU2NCByeF9kcm9wcGVkX3RjcF9sZW5ndGg7CisJdTY0IHJ4X2Ryb3BwZWRfcnVudDsKKwl1NjQgcnhfaXBfY2hlY2tzdW1fZXJyczsKKwl1NjQgcnhfdGNwX2NoZWNrc3VtX2VycnM7CisJdTY0IHJ4X3VkcF9jaGVja3N1bV9lcnJzOworCXU2NCByeF9zd2l0Y2hlZF91bmljYXN0X3BhY2tldHM7CisJdTY0IHJ4X3N3aXRjaGVkX211bHRpY2FzdF9wYWNrZXRzOworCXU2NCByeF9zd2l0Y2hlZF9icm9hZGNhc3RfcGFja2V0czsKKwl1NjQgdHhfcGF1c2VmcmFtZXM7CisJdTY0IHR4X3ByaW9yaXR5X3BhdXNlZnJhbWVzOworCXU2NCB0eF9jb250cm9sZnJhbWVzOworCXU2NCByeHBwX2ZpZm9fb3ZlcmZsb3dfZHJvcDsKKwl1NjQgcnhfaW5wdXRfZmlmb19vdmVyZmxvd19kcm9wOworCXU2NCBwbWVtX2ZpZm9fb3ZlcmZsb3dfZHJvcDsKKwl1NjQgamFiYmVyX2V2ZW50czsKIH07CiAKIHN0cnVjdCBiZV92Zl9jZmcgewpAQCAtMjc2LDcgKzMxNCw3IEBACiAJc3BpbmxvY2tfdCBtY2NfY3FfbG9jazsKIAogCXN0cnVjdCBtc2l4X2VudHJ5IG1zaXhfZW50cmllc1tCRV9NQVhfTVNJWF9WRUNUT1JTXTsKLQlib29sIG1zaXhfZW5hYmxlZDsKKwl1MzIgbnVtX21zaXhfdmVjOwogCWJvb2wgaXNyX3JlZ2lzdGVyZWQ7CiAKIAkvKiBUWCBSaW5ncyAqLwpAQCAtMjg3LDcgKzMyNSw3IEBACiAJdTMyIGNhY2hlX2xpbmVfYnJlYWtbOF07CiAKIAkvKiBSeCByaW5ncyAqLwotCXN0cnVjdCBiZV9yeF9vYmogcnhfb2JqW01BWF9SU1NfUVMgKyAxXTsgLyogb25lIGRlZmF1bHQgbm9uLXJzcyBRICovCisJc3RydWN0IGJlX3J4X29iaiByeF9vYmpbTUFYX1JYX1FTXTsKIAl1MzIgbnVtX3J4X3FzOwogCXUzMiBiaWdfcGFnZV9zaXplOwkvKiBDb21wb3VuZGVkIHBhZ2Ugc2l6ZSBzaGFyZWQgYnkgcnggd3JicyAqLwogCkBAIC0zMDgsMTAgKzM0NiwxMCBAQAogCXUxNiB3b3JrX2NvdW50ZXI7CiAKIAkvKiBFdGh0b29sIGtub2JzIGFuZCBpbmZvICovCi0JYm9vbCByeF9jc3VtOyAJCS8qIEJFIGNhcmQgbXVzdCBwZXJmb3JtIHJ4LWNoZWNrc3VtbWluZyAqLwogCWNoYXIgZndfdmVyW0ZXX1ZFUl9MRU5dOwogCXUzMiBpZl9oYW5kbGU7CQkvKiBVc2VkIHRvIGNvbmZpZ3VyZSBmaWx0ZXJpbmcgKi8KIAl1MzIgcG1hY19pZDsJCS8qIE1BQyBhZGRyIGhhbmRsZSB1c2VkIGJ5IEJFIGNhcmQgKi8KKwl1MzIgYmVhY29uX3N0YXRlOwkvKiBmb3Igc2V0X3BoeXNfaWQgKi8KIAogCWJvb2wgZWVoX2VycjsKIAlib29sIGxpbmtfdXA7CkBAIC0zMzQsNyArMzcyLDcgQEAKIAogCWJvb2wgYmUzX25hdGl2ZTsKIAlib29sIHNyaW92X2VuYWJsZWQ7Ci0Jc3RydWN0IGJlX3ZmX2NmZyB2Zl9jZmdbQkVfTUFYX1ZGXTsKKwlzdHJ1Y3QgYmVfdmZfY2ZnICp2Zl9jZmc7CiAJdTggaXNfdmlydGZuOwogCXUzMiBzbGlfZmFtaWx5OwogCXU4IGhiYV9wb3J0X251bTsKQEAgLTM0NywxMCArMzg1LDEyIEBACiAjZGVmaW5lIEJFX0dFTjIgMgogI2RlZmluZSBCRV9HRU4zIDMKIAotI2RlZmluZSBsYW5jZXJfY2hpcChhZGFwdGVyKQkJKGFkYXB0ZXItPnBkZXYtPmRldmljZSA9PSBPQ19ERVZJQ0VfSUQzKQorI2RlZmluZSBsYW5jZXJfY2hpcChhZGFwdGVyKQkoKGFkYXB0ZXItPnBkZXYtPmRldmljZSA9PSBPQ19ERVZJQ0VfSUQzKSB8fCBcCisJCQkJIChhZGFwdGVyLT5wZGV2LT5kZXZpY2UgPT0gT0NfREVWSUNFX0lENCkpCiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYmVfZXRodG9vbF9vcHM7CiAKKyNkZWZpbmUgbXNpeF9lbmFibGVkKGFkYXB0ZXIpCQkoYWRhcHRlci0+bnVtX21zaXhfdmVjID4gMCkKICNkZWZpbmUgdHhfc3RhdHMoYWRhcHRlcikJCSgmYWRhcHRlci0+dHhfc3RhdHMpCiAjZGVmaW5lIHJ4X3N0YXRzKHJ4bykJCQkoJnJ4by0+c3RhdHMpCiAKQEAgLTQ1NSwxOCArNDk1LDEwIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBiZV9jaGVja19zcmlvdl9mbl90eXBlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQogewotCXU4IGRhdGE7CiAJdTMyIHNsaV9pbnRmOwogCi0JaWYgKGxhbmNlcl9jaGlwKGFkYXB0ZXIpKSB7Ci0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChhZGFwdGVyLT5wZGV2LCBTTElfSU5URl9SRUdfT0ZGU0VULAotCQkJCQkJCQkmc2xpX2ludGYpOwotCQlhZGFwdGVyLT5pc192aXJ0Zm4gPSAoc2xpX2ludGYgJiBTTElfSU5URl9GVF9NQVNLKSA/IDEgOiAwOwotCX0gZWxzZSB7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShhZGFwdGVyLT5wZGV2LCAweEZFLCAweEFBKTsKLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoYWRhcHRlci0+cGRldiwgMHhGRSwgJmRhdGEpOwotCQlhZGFwdGVyLT5pc192aXJ0Zm4gPSAoZGF0YSAhPSAweEFBKTsKLQl9CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGFkYXB0ZXItPnBkZXYsIFNMSV9JTlRGX1JFR19PRkZTRVQsICZzbGlfaW50Zik7CisJYWRhcHRlci0+aXNfdmlydGZuID0gKHNsaV9pbnRmICYgU0xJX0lOVEZfRlRfTUFTSykgPyAxIDogMDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGJlX3ZmX2V0aF9hZGRyX2dlbmVyYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1OCAqbWFjKQpAQCAtNDgyLDkgKzUxNCwxNSBAQAogCW1lbWNweShtYWMsIGFkYXB0ZXItPm5ldGRldi0+ZGV2X2FkZHIsIDMpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgYmVfbXVsdGlfcnhxKGNvbnN0IHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXJldHVybiBhZGFwdGVyLT5udW1fcnhfcXMgPiAxOworfQorCiBleHRlcm4gdm9pZCBiZV9jcV9ub3RpZnkoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBxaWQsIGJvb2wgYXJtLAogCQl1MTYgbnVtX3BvcHBlZCk7CiBleHRlcm4gdm9pZCBiZV9saW5rX3N0YXR1c191cGRhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIGJvb2wgbGlua191cCk7CiBleHRlcm4gdm9pZCBuZXRkZXZfc3RhdHNfdXBkYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKTsKK2V4dGVybiB2b2lkIGJlX3BhcnNlX3N0YXRzKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKTsKIGV4dGVybiBpbnQgYmVfbG9hZF9mdyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTggKmZ1bmMpOwogI2VuZGlmCQkJCS8qIEJFX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYwppbmRleCA5ZGM5Mzk0Li4yNDYzYjFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmMKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jCkBAIC03MSwxOCArNzEsMzggQEAKIAljb21wbF9zdGF0dXMgPSAoY29tcGwtPnN0YXR1cyA+PiBDUUVfU1RBVFVTX0NPTVBMX1NISUZUKSAmCiAJCQkJQ1FFX1NUQVRVU19DT01QTF9NQVNLOwogCi0JaWYgKChjb21wbC0+dGFnMCA9PSBPUENPREVfQ09NTU9OX1dSSVRFX0ZMQVNIUk9NKSAmJgorCWlmICgoKGNvbXBsLT50YWcwID09IE9QQ09ERV9DT01NT05fV1JJVEVfRkxBU0hST00pIHx8CisJCShjb21wbC0+dGFnMCA9PSBPUENPREVfQ09NTU9OX1dSSVRFX09CSkVDVCkpICYmCiAJCShjb21wbC0+dGFnMSA9PSBDTURfU1VCU1lTVEVNX0NPTU1PTikpIHsKIAkJYWRhcHRlci0+Zmxhc2hfc3RhdHVzID0gY29tcGxfc3RhdHVzOwogCQljb21wbGV0ZSgmYWRhcHRlci0+Zmxhc2hfY29tcGwpOwogCX0KIAogCWlmIChjb21wbF9zdGF0dXMgPT0gTUNDX1NUQVRVU19TVUNDRVNTKSB7Ci0JCWlmIChjb21wbC0+dGFnMCA9PSBPUENPREVfRVRIX0dFVF9TVEFUSVNUSUNTKSB7Ci0JCQlzdHJ1Y3QgYmVfY21kX3Jlc3BfZ2V0X3N0YXRzICpyZXNwID0KLQkJCQkJCWFkYXB0ZXItPnN0YXRzX2NtZC52YTsKLQkJCWJlX2R3c19sZV90b19jcHUoJnJlc3AtPmh3X3N0YXRzLAotCQkJCQkJc2l6ZW9mKHJlc3AtPmh3X3N0YXRzKSk7CisJCWlmICgoKGNvbXBsLT50YWcwID09IE9QQ09ERV9FVEhfR0VUX1NUQVRJU1RJQ1MpIHx8CisJCQkgKGNvbXBsLT50YWcwID09IE9QQ09ERV9FVEhfR0VUX1BQT1JUX1NUQVRTKSkgJiYKKwkJCShjb21wbC0+dGFnMSA9PSBDTURfU1VCU1lTVEVNX0VUSCkpIHsKKwkJCWlmIChhZGFwdGVyLT5nZW5lcmF0aW9uID09IEJFX0dFTjMpIHsKKwkJCQlpZiAobGFuY2VyX2NoaXAoYWRhcHRlcikpIHsKKwkJCQkJc3RydWN0IGxhbmNlcl9jbWRfcmVzcF9wcG9ydF9zdGF0cworCQkJCQkJKnJlc3AgPSBhZGFwdGVyLT5zdGF0c19jbWQudmE7CisJCQkJCWJlX2R3c19sZV90b19jcHUoJnJlc3AtPnBwb3J0X3N0YXRzLAorCQkJCQkJc2l6ZW9mKHJlc3AtPnBwb3J0X3N0YXRzKSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJc3RydWN0IGJlX2NtZF9yZXNwX2dldF9zdGF0c192MSAqcmVzcCA9CisJCQkJCQkJYWRhcHRlci0+c3RhdHNfY21kLnZhOworCisJCQkJYmVfZHdzX2xlX3RvX2NwdSgmcmVzcC0+aHdfc3RhdHMsCisJCQkJCQkJc2l6ZW9mKHJlc3AtPmh3X3N0YXRzKSk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlzdHJ1Y3QgYmVfY21kX3Jlc3BfZ2V0X3N0YXRzX3YwICpyZXNwID0KKwkJCQkJCQlhZGFwdGVyLT5zdGF0c19jbWQudmE7CisKKwkJCQliZV9kd3NfbGVfdG9fY3B1KCZyZXNwLT5od19zdGF0cywKKwkJCQkJCQlzaXplb2YocmVzcC0+aHdfc3RhdHMpKTsKKwkJCX0KKwkJCWJlX3BhcnNlX3N0YXRzKGFkYXB0ZXIpOwogCQkJbmV0ZGV2X3N0YXRzX3VwZGF0ZShhZGFwdGVyKTsKIAkJCWFkYXB0ZXItPnN0YXRzX2NtZF9zZW50ID0gZmFsc2U7CiAJCX0KQEAgLTI5MiwxMiArMzEyLDEyIEBACiAKIAkJaWYgKG1zZWNzID4gNDAwMCkgewogCQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAibWJveCBwb2xsIHRpbWVkIG91dFxuIik7Ci0JCQliZV9kZXRlY3RfZHVtcF91ZShhZGFwdGVyKTsKKwkJCWlmICghbGFuY2VyX2NoaXAoYWRhcHRlcikpCisJCQkJYmVfZGV0ZWN0X2R1bXBfdWUoYWRhcHRlcik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQlzY2hlZHVsZV90aW1lb3V0KG1zZWNzX3RvX2ppZmZpZXMoMSkpOworCQltc2xlZXAoMSk7CiAJCW1zZWNzKys7CiAJfSB3aGlsZSAodHJ1ZSk7CiAKQEAgLTM3NCwyMyArMzk0LDI1IEBACiB7CiAJdTE2IHN0YWdlOwogCWludCBzdGF0dXMsIHRpbWVvdXQgPSAwOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhZGFwdGVyLT5wZGV2LT5kZXY7CiAKIAlkbyB7CiAJCXN0YXR1cyA9IGJlX1BPU1Rfc3RhZ2VfZ2V0KGFkYXB0ZXIsICZzdGFnZSk7CiAJCWlmIChzdGF0dXMpIHsKLQkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIlBPU1QgZXJyb3I7IHN0YWdlPTB4JXhcbiIsCi0JCQkJc3RhZ2UpOworCQkJZGV2X2VycihkZXYsICJQT1NUIGVycm9yOyBzdGFnZT0weCV4XG4iLCBzdGFnZSk7CiAJCQlyZXR1cm4gLTE7CiAJCX0gZWxzZSBpZiAoc3RhZ2UgIT0gUE9TVF9TVEFHRV9BUk1GV19SRFkpIHsKLQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCQlzY2hlZHVsZV90aW1lb3V0KDIgKiBIWik7CisJCQlpZiAobXNsZWVwX2ludGVycnVwdGlibGUoMjAwMCkpIHsKKwkJCQlkZXZfZXJyKGRldiwgIldhaXRpbmcgZm9yIFBPU1QgYWJvcnRlZFxuIik7CisJCQkJcmV0dXJuIC1FSU5UUjsKKwkJCX0KIAkJCXRpbWVvdXQgKz0gMjsKIAkJfSBlbHNlIHsKIAkJCXJldHVybiAwOwogCQl9CiAJfSB3aGlsZSAodGltZW91dCA8IDQwKTsKIAotCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIlBPU1QgdGltZW91dDsgc3RhZ2U9MHgleFxuIiwgc3RhZ2UpOworCWRldl9lcnIoZGV2LCAiUE9TVCB0aW1lb3V0OyBzdGFnZT0weCV4XG4iLCBzdGFnZSk7CiAJcmV0dXJuIC0xOwogfQogCkBAIC03MjgsOCArNzUwLDYgQEAKIAlpZiAobGFuY2VyX2NoaXAoYWRhcHRlcikpIHsKIAkJcmVxLT5oZHIudmVyc2lvbiA9IDI7CiAJCXJlcS0+cGFnZV9zaXplID0gMTsgLyogMSBmb3IgNEsgKi8KLQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0X2xhbmNlciwgY29hbGVzY3dtLCBjdHh0LAotCQkJCQkJCQljb2FsZXNjZV93bSk7CiAJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfY3FfY29udGV4dF9sYW5jZXIsIG5vZGVsYXksIGN0eHQsCiAJCQkJCQkJCW5vX2RlbGF5KTsKIAkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0X2xhbmNlciwgY291bnQsIGN0eHQsCkBAIC0xMDc0LDcgKzEwOTQsNyBAQAogaW50IGJlX2NtZF9nZXRfc3RhdHMoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBiZV9kbWFfbWVtICpub25lbWJfY21kKQogewogCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmI7Ci0Jc3RydWN0IGJlX2NtZF9yZXFfZ2V0X3N0YXRzICpyZXE7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyICpoZHI7CiAJc3RydWN0IGJlX3NnZSAqc2dlOwogCWludCBzdGF0dXMgPSAwOwogCkBAIC0xMDg4LDE0ICsxMTA4LDYyIEBACiAJCXN0YXR1cyA9IC1FQlVTWTsKIAkJZ290byBlcnI7CiAJfQorCWhkciA9IG5vbmVtYl9jbWQtPnZhOworCXNnZSA9IG5vbmVtYmVkZGVkX3NnbCh3cmIpOworCisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgbm9uZW1iX2NtZC0+c2l6ZSwgZmFsc2UsIDEsCisJCQlPUENPREVfRVRIX0dFVF9TVEFUSVNUSUNTKTsKKworCWJlX2NtZF9oZHJfcHJlcGFyZShoZHIsIENNRF9TVUJTWVNURU1fRVRILAorCQlPUENPREVfRVRIX0dFVF9TVEFUSVNUSUNTLCBub25lbWJfY21kLT5zaXplKTsKKworCWlmIChhZGFwdGVyLT5nZW5lcmF0aW9uID09IEJFX0dFTjMpCisJCWhkci0+dmVyc2lvbiA9IDE7CisKKwl3cmItPnRhZzEgPSBDTURfU1VCU1lTVEVNX0VUSDsKKwlzZ2UtPnBhX2hpID0gY3B1X3RvX2xlMzIodXBwZXJfMzJfYml0cyhub25lbWJfY21kLT5kbWEpKTsKKwlzZ2UtPnBhX2xvID0gY3B1X3RvX2xlMzIobm9uZW1iX2NtZC0+ZG1hICYgMHhGRkZGRkZGRik7CisJc2dlLT5sZW4gPSBjcHVfdG9fbGUzMihub25lbWJfY21kLT5zaXplKTsKKworCWJlX21jY19ub3RpZnkoYWRhcHRlcik7CisJYWRhcHRlci0+c3RhdHNfY21kX3NlbnQgPSB0cnVlOworCitlcnI6CisJc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPm1jY19sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBMYW5jZXIgU3RhdHMgKi8KK2ludCBsYW5jZXJfY21kX2dldF9wcG9ydF9zdGF0cyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKKwkJCQlzdHJ1Y3QgYmVfZG1hX21lbSAqbm9uZW1iX2NtZCkKK3sKKworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmI7CisJc3RydWN0IGxhbmNlcl9jbWRfcmVxX3Bwb3J0X3N0YXRzICpyZXE7CisJc3RydWN0IGJlX3NnZSAqc2dlOworCWludCBzdGF0dXMgPSAwOworCisJc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5tY2NfbG9jayk7CisKKwl3cmIgPSB3cmJfZnJvbV9tY2NxKGFkYXB0ZXIpOworCWlmICghd3JiKSB7CisJCXN0YXR1cyA9IC1FQlVTWTsKKwkJZ290byBlcnI7CisJfQogCXJlcSA9IG5vbmVtYl9jbWQtPnZhOwogCXNnZSA9IG5vbmVtYmVkZGVkX3NnbCh3cmIpOwogCi0JYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCBmYWxzZSwgMSwKLQkJCU9QQ09ERV9FVEhfR0VUX1NUQVRJU1RJQ1MpOworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIG5vbmVtYl9jbWQtPnNpemUsIGZhbHNlLCAxLAorCQkJT1BDT0RFX0VUSF9HRVRfUFBPUlRfU1RBVFMpOwogCiAJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9FVEgsCi0JCU9QQ09ERV9FVEhfR0VUX1NUQVRJU1RJQ1MsIHNpemVvZigqcmVxKSk7CisJCQlPUENPREVfRVRIX0dFVF9QUE9SVF9TVEFUUywgbm9uZW1iX2NtZC0+c2l6ZSk7CisKKworCXJlcS0+Y21kX3BhcmFtcy5wYXJhbXMucHBvcnRfbnVtID0gY3B1X3RvX2xlMTYoYWRhcHRlci0+cG9ydF9udW0pOworCXJlcS0+Y21kX3BhcmFtcy5wYXJhbXMucmVzZXRfc3RhdHMgPSAwOworCisJd3JiLT50YWcxID0gQ01EX1NVQlNZU1RFTV9FVEg7CiAJc2dlLT5wYV9oaSA9IGNwdV90b19sZTMyKHVwcGVyXzMyX2JpdHMobm9uZW1iX2NtZC0+ZG1hKSk7CiAJc2dlLT5wYV9sbyA9IGNwdV90b19sZTMyKG5vbmVtYl9jbWQtPmRtYSAmIDB4RkZGRkZGRkYpOwogCXNnZS0+bGVuID0gY3B1X3RvX2xlMzIobm9uZW1iX2NtZC0+c2l6ZSk7CkBAIC0xMTEwLDcgKzExNzgsNyBAQAogCiAvKiBVc2VzIHN5bmNocm9ub3VzIG1jYyAqLwogaW50IGJlX2NtZF9saW5rX3N0YXR1c19xdWVyeShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKLQkJCWJvb2wgKmxpbmtfdXAsIHU4ICptYWNfc3BlZWQsIHUxNiAqbGlua19zcGVlZCkKKwkJCWJvb2wgKmxpbmtfdXAsIHU4ICptYWNfc3BlZWQsIHUxNiAqbGlua19zcGVlZCwgdTMyIGRvbSkKIHsKIAlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiOwogCXN0cnVjdCBiZV9jbWRfcmVxX2xpbmtfc3RhdHVzICpyZXE7CkBAIC0xMTg2LDYgKzEyNTQsMTE2IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAorLyogVXNlcyBzeW5jaHJvbm91cyBtY2MgKi8KK2ludCBiZV9jbWRfZ2V0X3JlZ19sZW4oc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiAqbG9nX3NpemUpCit7CisJc3RydWN0IGJlX21jY193cmIgKndyYjsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9nZXRfZmF0ICpyZXE7CisJaW50IHN0YXR1czsKKworCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+bWNjX2xvY2spOworCisJd3JiID0gd3JiX2Zyb21fbWNjcShhZGFwdGVyKTsKKwlpZiAoIXdyYikgeworCQlzdGF0dXMgPSAtRUJVU1k7CisJCWdvdG8gZXJyOworCX0KKwlyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDAsCisJCQlPUENPREVfQ09NTU9OX01BTkFHRV9GQVQpOworCisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9DT01NT04sCisJCU9QQ09ERV9DT01NT05fTUFOQUdFX0ZBVCwgc2l6ZW9mKCpyZXEpKTsKKwlyZXEtPmZhdF9vcGVyYXRpb24gPSBjcHVfdG9fbGUzMihRVUVSWV9GQVQpOworCXN0YXR1cyA9IGJlX21jY19ub3RpZnlfd2FpdChhZGFwdGVyKTsKKwlpZiAoIXN0YXR1cykgeworCQlzdHJ1Y3QgYmVfY21kX3Jlc3BfZ2V0X2ZhdCAqcmVzcCA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwkJaWYgKGxvZ19zaXplICYmIHJlc3AtPmxvZ19zaXplKQorCQkJKmxvZ19zaXplID0gbGUzMl90b19jcHUocmVzcC0+bG9nX3NpemUpIC0KKwkJCQkJc2l6ZW9mKHUzMik7CisJfQorZXJyOgorCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT5tY2NfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKwordm9pZCBiZV9jbWRfZ2V0X3JlZ3Moc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBidWZfbGVuLCB2b2lkICpidWYpCit7CisJc3RydWN0IGJlX2RtYV9tZW0gZ2V0X2ZhdF9jbWQ7CisJc3RydWN0IGJlX21jY193cmIgKndyYjsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9nZXRfZmF0ICpyZXE7CisJc3RydWN0IGJlX3NnZSAqc2dlOworCXUzMiBvZmZzZXQgPSAwLCB0b3RhbF9zaXplLCBidWZfc2l6ZSwKKwkJCQlsb2dfb2Zmc2V0ID0gc2l6ZW9mKHUzMiksIHBheWxvYWRfbGVuOworCWludCBzdGF0dXM7CisKKwlpZiAoYnVmX2xlbiA9PSAwKQorCQlyZXR1cm47CisKKwl0b3RhbF9zaXplID0gYnVmX2xlbjsKKworCWdldF9mYXRfY21kLnNpemUgPSBzaXplb2Yoc3RydWN0IGJlX2NtZF9yZXFfZ2V0X2ZhdCkgKyA2MCoxMDI0OworCWdldF9mYXRfY21kLnZhID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCWdldF9mYXRfY21kLnNpemUsCisJCQkmZ2V0X2ZhdF9jbWQuZG1hKTsKKwlpZiAoIWdldF9mYXRfY21kLnZhKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgd2hpbGUgcmV0cmlldmluZyBGQVQgZGF0YVxuIik7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2tfYmgoJmFkYXB0ZXItPm1jY19sb2NrKTsKKworCXdoaWxlICh0b3RhbF9zaXplKSB7CisJCWJ1Zl9zaXplID0gbWluKHRvdGFsX3NpemUsICh1MzIpNjAqMTAyNCk7CisJCXRvdGFsX3NpemUgLT0gYnVmX3NpemU7CisKKwkJd3JiID0gd3JiX2Zyb21fbWNjcShhZGFwdGVyKTsKKwkJaWYgKCF3cmIpIHsKKwkJCXN0YXR1cyA9IC1FQlVTWTsKKwkJCWdvdG8gZXJyOworCQl9CisJCXJlcSA9IGdldF9mYXRfY21kLnZhOworCQlzZ2UgPSBub25lbWJlZGRlZF9zZ2wod3JiKTsKKworCQlwYXlsb2FkX2xlbiA9IHNpemVvZihzdHJ1Y3QgYmVfY21kX3JlcV9nZXRfZmF0KSArIGJ1Zl9zaXplOworCQliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBwYXlsb2FkX2xlbiwgZmFsc2UsIDEsCisJCQkJT1BDT0RFX0NPTU1PTl9NQU5BR0VfRkFUKTsKKworCQliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKKwkJCQlPUENPREVfQ09NTU9OX01BTkFHRV9GQVQsIHBheWxvYWRfbGVuKTsKKworCQlzZ2UtPnBhX2hpID0gY3B1X3RvX2xlMzIodXBwZXJfMzJfYml0cyhnZXRfZmF0X2NtZC5kbWEpKTsKKwkJc2dlLT5wYV9sbyA9IGNwdV90b19sZTMyKGdldF9mYXRfY21kLmRtYSAmIDB4RkZGRkZGRkYpOworCQlzZ2UtPmxlbiA9IGNwdV90b19sZTMyKGdldF9mYXRfY21kLnNpemUpOworCisJCXJlcS0+ZmF0X29wZXJhdGlvbiA9IGNwdV90b19sZTMyKFJFVFJJRVZFX0ZBVCk7CisJCXJlcS0+cmVhZF9sb2dfb2Zmc2V0ID0gY3B1X3RvX2xlMzIobG9nX29mZnNldCk7CisJCXJlcS0+cmVhZF9sb2dfbGVuZ3RoID0gY3B1X3RvX2xlMzIoYnVmX3NpemUpOworCQlyZXEtPmRhdGFfYnVmZmVyX3NpemUgPSBjcHVfdG9fbGUzMihidWZfc2l6ZSk7CisKKwkJc3RhdHVzID0gYmVfbWNjX25vdGlmeV93YWl0KGFkYXB0ZXIpOworCQlpZiAoIXN0YXR1cykgeworCQkJc3RydWN0IGJlX2NtZF9yZXNwX2dldF9mYXQgKnJlc3AgPSBnZXRfZmF0X2NtZC52YTsKKwkJCW1lbWNweShidWYgKyBvZmZzZXQsCisJCQkJcmVzcC0+ZGF0YV9idWZmZXIsCisJCQkJcmVzcC0+cmVhZF9sb2dfbGVuZ3RoKTsKKwkJfSBlbHNlIHsKKwkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIkZBVCBUYWJsZSBSZXRyaWV2ZSBlcnJvclxuIik7CisJCQlnb3RvIGVycjsKKwkJfQorCQlvZmZzZXQgKz0gYnVmX3NpemU7CisJCWxvZ19vZmZzZXQgKz0gYnVmX3NpemU7CisJfQorZXJyOgorCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgZ2V0X2ZhdF9jbWQuc2l6ZSwKKwkJCWdldF9mYXRfY21kLnZhLAorCQkJZ2V0X2ZhdF9jbWQuZG1hKTsKKwlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+bWNjX2xvY2spOworfQorCiAvKiBVc2VzIE1ib3ggKi8KIGludCBiZV9jbWRfZ2V0X2Z3X3ZlcihzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgY2hhciAqZndfdmVyKQogewpAQCAtMTI5MywxMiArMTQ3MSwyNCBAQAogLyogVXNlcyBNQ0MgZm9yIHRoaXMgY29tbWFuZCBhcyBpdCBtYXkgYmUgY2FsbGVkIGluIEJIIGNvbnRleHQKICAqIFVzZXMgc3luY2hyb25vdXMgbWNjCiAgKi8KLWludCBiZV9jbWRfcHJvbWlzY3VvdXNfY29uZmlnKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1OCBwb3J0X251bSwgYm9vbCBlbikKK2ludCBiZV9jbWRfcHJvbWlzY3VvdXNfY29uZmlnKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCBib29sIGVuKQogewogCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmI7Ci0Jc3RydWN0IGJlX2NtZF9yZXFfcHJvbWlzY3VvdXNfY29uZmlnICpyZXE7CisJc3RydWN0IGJlX2NtZF9yZXFfcnhfZmlsdGVyICpyZXE7CisJc3RydWN0IGJlX2RtYV9tZW0gcHJvbWlzY291c19jbWQ7CisJc3RydWN0IGJlX3NnZSAqc2dlOwogCWludCBzdGF0dXM7CiAKKwltZW1zZXQoJnByb21pc2NvdXNfY21kLCAwLCBzaXplb2Yoc3RydWN0IGJlX2RtYV9tZW0pKTsKKwlwcm9taXNjb3VzX2NtZC5zaXplID0gc2l6ZW9mKHN0cnVjdCBiZV9jbWRfcmVxX3J4X2ZpbHRlcik7CisJcHJvbWlzY291c19jbWQudmEgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJCXByb21pc2NvdXNfY21kLnNpemUsICZwcm9taXNjb3VzX2NtZC5kbWEpOworCWlmICghcHJvbWlzY291c19jbWQudmEpIHsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCSJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCiAJc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5tY2NfbG9jayk7CiAKIAl3cmIgPSB3cmJfZnJvbV9tY2NxKGFkYXB0ZXIpOwpAQCAtMTMwNiwyNiArMTQ5NiwzMCBAQAogCQlzdGF0dXMgPSAtRUJVU1k7CiAJCWdvdG8gZXJyOwogCX0KLQlyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CiAKLQliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDAsIE9QQ09ERV9FVEhfUFJPTUlTQ1VPVVMpOworCXJlcSA9IHByb21pc2NvdXNfY21kLnZhOworCXNnZSA9IG5vbmVtYmVkZGVkX3NnbCh3cmIpOwogCi0JYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9FVEgsCi0JCU9QQ09ERV9FVEhfUFJPTUlTQ1VPVVMsIHNpemVvZigqcmVxKSk7CisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCBmYWxzZSwgMSwKKwkJCQkJT1BDT0RFX0NPTU1PTl9OVFdLX1JYX0ZJTFRFUik7CisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9DT01NT04sCisJCQlPUENPREVfQ09NTU9OX05UV0tfUlhfRklMVEVSLCBzaXplb2YoKnJlcSkpOwogCi0JLyogSW4gRlcgdmVyc2lvbnMgWC4xMDIuMTQ5L1guMTAxLjQ4NyBhbmQgbGF0ZXIsCi0JICogdGhlIHBvcnQgc2V0dGluZyBhc3NvY2lhdGVkIG9ubHkgd2l0aCB0aGUKLQkgKiBpc3N1aW5nIHBjaSBmdW5jdGlvbiB3aWxsIHRha2UgZWZmZWN0Ci0JICovCi0JaWYgKHBvcnRfbnVtKQotCQlyZXEtPnBvcnQxX3Byb21pc2N1b3VzID0gZW47Ci0JZWxzZQotCQlyZXEtPnBvcnQwX3Byb21pc2N1b3VzID0gZW47CisJcmVxLT5pZl9pZCA9IGNwdV90b19sZTMyKGFkYXB0ZXItPmlmX2hhbmRsZSk7CisJcmVxLT5pZl9mbGFnc19tYXNrID0gY3B1X3RvX2xlMzIoQkVfSUZfRkxBR1NfUFJPTUlTQ1VPVVMpOworCWlmIChlbikKKwkJcmVxLT5pZl9mbGFncyA9IGNwdV90b19sZTMyKEJFX0lGX0ZMQUdTX1BST01JU0NVT1VTKTsKKworCXNnZS0+cGFfaGkgPSBjcHVfdG9fbGUzMih1cHBlcl8zMl9iaXRzKHByb21pc2NvdXNfY21kLmRtYSkpOworCXNnZS0+cGFfbG8gPSBjcHVfdG9fbGUzMihwcm9taXNjb3VzX2NtZC5kbWEgJiAweEZGRkZGRkZGKTsKKwlzZ2UtPmxlbiA9IGNwdV90b19sZTMyKHByb21pc2NvdXNfY21kLnNpemUpOwogCiAJc3RhdHVzID0gYmVfbWNjX25vdGlmeV93YWl0KGFkYXB0ZXIpOwogCiBlcnI6CiAJc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPm1jY19sb2NrKTsKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHByb21pc2NvdXNfY21kLnNpemUsCisJCQlwcm9taXNjb3VzX2NtZC52YSwgcHJvbWlzY291c19jbWQuZG1hKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0xNjA4LDYgKzE4MDIsODEgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCitpbnQgbGFuY2VyX2NtZF93cml0ZV9vYmplY3Qoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBiZV9kbWFfbWVtICpjbWQsCisJCQl1MzIgZGF0YV9zaXplLCB1MzIgZGF0YV9vZmZzZXQsIGNvbnN0IGNoYXIgKm9ial9uYW1lLAorCQkJdTMyICpkYXRhX3dyaXR0ZW4sIHU4ICphZGRuX3N0YXR1cykKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiOworCXN0cnVjdCBsYW5jZXJfY21kX3JlcV93cml0ZV9vYmplY3QgKnJlcTsKKwlzdHJ1Y3QgbGFuY2VyX2NtZF9yZXNwX3dyaXRlX29iamVjdCAqcmVzcDsKKwl2b2lkICpjdHh0ID0gTlVMTDsKKwlpbnQgc3RhdHVzOworCisJc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5tY2NfbG9jayk7CisJYWRhcHRlci0+Zmxhc2hfc3RhdHVzID0gMDsKKworCXdyYiA9IHdyYl9mcm9tX21jY3EoYWRhcHRlcik7CisJaWYgKCF3cmIpIHsKKwkJc3RhdHVzID0gLUVCVVNZOworCQlnb3RvIGVycl91bmxvY2s7CisJfQorCisJcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKHN0cnVjdCBsYW5jZXJfY21kX3JlcV93cml0ZV9vYmplY3QpLAorCQkJdHJ1ZSwgMSwgT1BDT0RFX0NPTU1PTl9XUklURV9PQkpFQ1QpOworCXdyYi0+dGFnMSA9IENNRF9TVUJTWVNURU1fQ09NTU9OOworCisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9DT01NT04sCisJCQkJT1BDT0RFX0NPTU1PTl9XUklURV9PQkpFQ1QsCisJCQkJc2l6ZW9mKHN0cnVjdCBsYW5jZXJfY21kX3JlcV93cml0ZV9vYmplY3QpKTsKKworCWN0eHQgPSAmcmVxLT5jb250ZXh0OworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfbGFuY2VyX3dyaXRlX29ial9jb250ZXh0LAorCQkJd3JpdGVfbGVuZ3RoLCBjdHh0LCBkYXRhX3NpemUpOworCisJaWYgKGRhdGFfc2l6ZSA9PSAwKQorCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2xhbmNlcl93cml0ZV9vYmpfY29udGV4dCwKKwkJCQllb2YsIGN0eHQsIDEpOworCWVsc2UKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9sYW5jZXJfd3JpdGVfb2JqX2NvbnRleHQsCisJCQkJZW9mLCBjdHh0LCAwKTsKKworCWJlX2R3c19jcHVfdG9fbGUoY3R4dCwgc2l6ZW9mKHJlcS0+Y29udGV4dCkpOworCXJlcS0+d3JpdGVfb2Zmc2V0ID0gY3B1X3RvX2xlMzIoZGF0YV9vZmZzZXQpOworCXN0cmNweShyZXEtPm9iamVjdF9uYW1lLCBvYmpfbmFtZSk7CisJcmVxLT5kZXNjcmlwdG9yX2NvdW50ID0gY3B1X3RvX2xlMzIoMSk7CisJcmVxLT5idWZfbGVuID0gY3B1X3RvX2xlMzIoZGF0YV9zaXplKTsKKwlyZXEtPmFkZHJfbG93ID0gY3B1X3RvX2xlMzIoKGNtZC0+ZG1hICsKKwkJCQlzaXplb2Yoc3RydWN0IGxhbmNlcl9jbWRfcmVxX3dyaXRlX29iamVjdCkpCisJCQkJJiAweEZGRkZGRkZGKTsKKwlyZXEtPmFkZHJfaGlnaCA9IGNwdV90b19sZTMyKHVwcGVyXzMyX2JpdHMoY21kLT5kbWEgKworCQkJCXNpemVvZihzdHJ1Y3QgbGFuY2VyX2NtZF9yZXFfd3JpdGVfb2JqZWN0KSkpOworCisJYmVfbWNjX25vdGlmeShhZGFwdGVyKTsKKwlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+bWNjX2xvY2spOworCisJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmFkYXB0ZXItPmZsYXNoX2NvbXBsLAorCQkJbXNlY3NfdG9famlmZmllcygxMjAwMCkpKQorCQlzdGF0dXMgPSAtMTsKKwllbHNlCisJCXN0YXR1cyA9IGFkYXB0ZXItPmZsYXNoX3N0YXR1czsKKworCXJlc3AgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJaWYgKCFzdGF0dXMpIHsKKwkJKmRhdGFfd3JpdHRlbiA9IGxlMzJfdG9fY3B1KHJlc3AtPmFjdHVhbF93cml0ZV9sZW4pOworCX0gZWxzZSB7CisJCSphZGRuX3N0YXR1cyA9IHJlc3AtPmFkZGl0aW9uYWxfc3RhdHVzOworCQlzdGF0dXMgPSByZXNwLT5zdGF0dXM7CisJfQorCisJcmV0dXJuIHN0YXR1czsKKworZXJyX3VubG9jazoKKwlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+bWNjX2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKIGludCBiZV9jbWRfd3JpdGVfZmxhc2hyb20oc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBiZV9kbWFfbWVtICpjbWQsCiAJCQl1MzIgZmxhc2hfdHlwZSwgdTMyIGZsYXNoX29wY29kZSwgdTMyIGJ1Zl9zaXplKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5oIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5oCmluZGV4IDRmMjU0Y2YuLjgxNDhjYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuaAorKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmgKQEAgLTE4NiwxMiArMTg2LDE0IEBACiAjZGVmaW5lIE9QQ09ERV9DT01NT05fTlRXS19QTUFDX0FERAkJCTU5CiAjZGVmaW5lIE9QQ09ERV9DT01NT05fTlRXS19QTUFDX0RFTAkJCTYwCiAjZGVmaW5lIE9QQ09ERV9DT01NT05fRlVOQ1RJT05fUkVTRVQJCQk2MQorI2RlZmluZSBPUENPREVfQ09NTU9OX01BTkFHRV9GQVQJCQk2OAogI2RlZmluZSBPUENPREVfQ09NTU9OX0VOQUJMRV9ESVNBQkxFX0JFQUNPTgkJNjkKICNkZWZpbmUgT1BDT0RFX0NPTU1PTl9HRVRfQkVBQ09OX1NUQVRFCQkJNzAKICNkZWZpbmUgT1BDT0RFX0NPTU1PTl9SRUFEX1RSQU5TUkVDVl9EQVRBCQk3MwogI2RlZmluZSBPUENPREVfQ09NTU9OX0dFVF9QSFlfREVUQUlMUwkJCTEwMgogI2RlZmluZSBPUENPREVfQ09NTU9OX1NFVF9EUklWRVJfRlVOQ1RJT05fQ0FQCQkxMDMKICNkZWZpbmUgT1BDT0RFX0NPTU1PTl9HRVRfQ05UTF9BRERJVElPTkFMX0FUVFJJQlVURVMJMTIxCisjZGVmaW5lIE9QQ09ERV9DT01NT05fV1JJVEVfT0JKRUNUCQkJMTcyCiAKICNkZWZpbmUgT1BDT0RFX0VUSF9SU1NfQ09ORklHCQkJCTEKICNkZWZpbmUgT1BDT0RFX0VUSF9BQ1BJX0NPTkZJRwkJCQkyCkBAIC0yMDIsNiArMjA0LDcgQEAKICNkZWZpbmUgT1BDT0RFX0VUSF9UWF9ERVNUUk9ZICAgICAgICAgICAJCTkKICNkZWZpbmUgT1BDT0RFX0VUSF9SWF9ERVNUUk9ZICAgICAgICAgICAJCTEwCiAjZGVmaW5lIE9QQ09ERV9FVEhfQUNQSV9XT0xfTUFHSUNfQ09ORklHCQkxMgorI2RlZmluZSBPUENPREVfRVRIX0dFVF9QUE9SVF9TVEFUUwkJCTE4CiAKICNkZWZpbmUgT1BDT0RFX0xPV0xFVkVMX0hPU1RfRERSX0RNQSAgICAgICAgICAgICAgICAgICAgMTcKICNkZWZpbmUgT1BDT0RFX0xPV0xFVkVMX0xPT1BCQUNLX1RFU1QgICAgICAgICAgICAgICAgICAgMTgKQEAgLTM4MCw2ICszODMsMjQgQEAKIAl1MTYgcnN2ZDA7CiB9IF9fcGFja2VkOwogCitzdHJ1Y3QgYmVfY21kX3JlcV9nZXRfZmF0IHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUzMiBmYXRfb3BlcmF0aW9uOworCXUzMiByZWFkX2xvZ19vZmZzZXQ7CisJdTMyIHJlYWRfbG9nX2xlbmd0aDsKKwl1MzIgZGF0YV9idWZmZXJfc2l6ZTsKKwl1MzIgZGF0YV9idWZmZXJbMV07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfY21kX3Jlc3BfZ2V0X2ZhdCB7CisJc3RydWN0IGJlX2NtZF9yZXNwX2hkciBoZHI7CisJdTMyIGxvZ19zaXplOworCXUzMiByZWFkX2xvZ19sZW5ndGg7CisJdTMyIHJzdmRbMl07CisJdTMyIGRhdGFfYnVmZmVyWzFdOworfSBfX3BhY2tlZDsKKworCiAvKioqKioqKioqKioqKioqKioqKiogQ3JlYXRlIE1DQ1EgKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogUHNldWRvIGFtYXAgZGVmaW5pdGlvbiBpbiB3aGljaCBlYWNoIGJpdCBvZiB0aGUgYWN0dWFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkCiAgKiBhcyBhIGJ5dGU6IHVzZWQgdG8gY2FsY3VsYXRlIG9mZnNldC9zaGlmdC9tYXNrIG9mIGVhY2ggZmllbGQgKi8KQEAgLTU0OSw3ICs1NzAsNyBAQAogfTsKIAogLyoqKioqKioqKioqKioqKiBIVyBTdGF0cyBHZXQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0cnVjdCBiZV9wb3J0X3J4Zl9zdGF0cyB7CitzdHJ1Y3QgYmVfcG9ydF9yeGZfc3RhdHNfdjAgewogCXUzMiByeF9ieXRlc19sc2Q7CS8qIGR3b3JkIDAqLwogCXUzMiByeF9ieXRlc19tc2Q7CS8qIGR3b3JkIDEqLwogCXUzMiByeF90b3RhbF9mcmFtZXM7CS8qIGR3b3JkIDIqLwpAQCAtNjE4LDggKzYzOSw4IEBACiAJdTMyIHJ4X2lucHV0X2ZpZm9fb3ZlcmZsb3c7CS8qIGR3b3JkIDY1Ki8KIH07CiAKLXN0cnVjdCBiZV9yeGZfc3RhdHMgewotCXN0cnVjdCBiZV9wb3J0X3J4Zl9zdGF0cyBwb3J0WzJdOworc3RydWN0IGJlX3J4Zl9zdGF0c192MCB7CisJc3RydWN0IGJlX3BvcnRfcnhmX3N0YXRzX3YwIHBvcnRbMl07CiAJdTMyIHJ4X2Ryb3BzX25vX3BidWY7CS8qIGR3b3JkIDEzMiovCiAJdTMyIHJ4X2Ryb3BzX25vX3R4cGI7CS8qIGR3b3JkIDEzMyovCiAJdTMyIHJ4X2Ryb3BzX25vX2VyeF9kZXNjcjsJLyogZHdvcmQgMTM0Ki8KQEAgLTY0MiwzNiArNjYzLDIyNyBAQAogCXUzMiByc3ZkMVs2XTsKIH07CiAKLXN0cnVjdCBiZV9lcnhfc3RhdHMgeworc3RydWN0IGJlX2VyeF9zdGF0c192MCB7CiAJdTMyIHJ4X2Ryb3BzX25vX2ZyYWdtZW50c1s0NF07ICAgICAvKiBkd29yZFMgMCB0byA0MyovCi0JdTMyIGRlYnVnX3dkbWFfc2VudF9ob2xkOyAgICAgICAgICAvKiBkd29yZCA0NCovCi0JdTMyIGRlYnVnX3dkbWFfcGJmcmVlX3NlbnRfaG9sZDsgICAvKiBkd29yZCA0NSovCi0JdTMyIGRlYnVnX3dkbWFfemVyb2J5dGVfcGJmcmVlX3NlbnRfaG9sZDsgLyogZHdvcmQgNDYqLwotCXUzMiBkZWJ1Z19wbWVtX3BidWZfZGVhbGxvYzsgICAgICAgLyogZHdvcmQgNDcqLworCXUzMiByc3ZkWzRdOwogfTsKIAogc3RydWN0IGJlX3BtZW1fc3RhdHMgewogCXUzMiBldGhfcmVkX2Ryb3BzOwotCXUzMiByc3ZkWzRdOworCXUzMiByc3ZkWzVdOwogfTsKIAotc3RydWN0IGJlX2h3X3N0YXRzIHsKLQlzdHJ1Y3QgYmVfcnhmX3N0YXRzIHJ4ZjsKK3N0cnVjdCBiZV9od19zdGF0c192MCB7CisJc3RydWN0IGJlX3J4Zl9zdGF0c192MCByeGY7CiAJdTMyIHJzdmRbNDhdOwotCXN0cnVjdCBiZV9lcnhfc3RhdHMgZXJ4OworCXN0cnVjdCBiZV9lcnhfc3RhdHNfdjAgZXJ4OwogCXN0cnVjdCBiZV9wbWVtX3N0YXRzIHBtZW07CiB9OwogCi1zdHJ1Y3QgYmVfY21kX3JlcV9nZXRfc3RhdHMgeworc3RydWN0IGJlX2NtZF9yZXFfZ2V0X3N0YXRzX3YwIHsKIAlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOwotCXU4IHJzdmRbc2l6ZW9mKHN0cnVjdCBiZV9od19zdGF0cyldOworCXU4IHJzdmRbc2l6ZW9mKHN0cnVjdCBiZV9od19zdGF0c192MCldOwogfTsKIAotc3RydWN0IGJlX2NtZF9yZXNwX2dldF9zdGF0cyB7CitzdHJ1Y3QgYmVfY21kX3Jlc3BfZ2V0X3N0YXRzX3YwIHsKIAlzdHJ1Y3QgYmVfY21kX3Jlc3BfaGRyIGhkcjsKLQlzdHJ1Y3QgYmVfaHdfc3RhdHMgaHdfc3RhdHM7CisJc3RydWN0IGJlX2h3X3N0YXRzX3YwIGh3X3N0YXRzOwogfTsKIAorI2RlZmluZSBtYWtlXzY0Yml0X3ZhbChoaV8zMiwgbG9fMzIpCSgoKHU2NCloaV8zMjw8MzIpIHwgbG9fMzIpCitzdHJ1Y3QgbGFuY2VyX2NtZF9wcG9ydF9zdGF0cyB7CisJdTMyIHR4X3BhY2tldHNfbG87CisJdTMyIHR4X3BhY2tldHNfaGk7CisJdTMyIHR4X3VuaWNhc3RfcGFja2V0c19sbzsKKwl1MzIgdHhfdW5pY2FzdF9wYWNrZXRzX2hpOworCXUzMiB0eF9tdWx0aWNhc3RfcGFja2V0c19sbzsKKwl1MzIgdHhfbXVsdGljYXN0X3BhY2tldHNfaGk7CisJdTMyIHR4X2Jyb2FkY2FzdF9wYWNrZXRzX2xvOworCXUzMiB0eF9icm9hZGNhc3RfcGFja2V0c19oaTsKKwl1MzIgdHhfYnl0ZXNfbG87CisJdTMyIHR4X2J5dGVzX2hpOworCXUzMiB0eF91bmljYXN0X2J5dGVzX2xvOworCXUzMiB0eF91bmljYXN0X2J5dGVzX2hpOworCXUzMiB0eF9tdWx0aWNhc3RfYnl0ZXNfbG87CisJdTMyIHR4X211bHRpY2FzdF9ieXRlc19oaTsKKwl1MzIgdHhfYnJvYWRjYXN0X2J5dGVzX2xvOworCXUzMiB0eF9icm9hZGNhc3RfYnl0ZXNfaGk7CisJdTMyIHR4X2Rpc2NhcmRzX2xvOworCXUzMiB0eF9kaXNjYXJkc19oaTsKKwl1MzIgdHhfZXJyb3JzX2xvOworCXUzMiB0eF9lcnJvcnNfaGk7CisJdTMyIHR4X3BhdXNlX2ZyYW1lc19sbzsKKwl1MzIgdHhfcGF1c2VfZnJhbWVzX2hpOworCXUzMiB0eF9wYXVzZV9vbl9mcmFtZXNfbG87CisJdTMyIHR4X3BhdXNlX29uX2ZyYW1lc19oaTsKKwl1MzIgdHhfcGF1c2Vfb2ZmX2ZyYW1lc19sbzsKKwl1MzIgdHhfcGF1c2Vfb2ZmX2ZyYW1lc19oaTsKKwl1MzIgdHhfaW50ZXJuYWxfbWFjX2Vycm9yc19sbzsKKwl1MzIgdHhfaW50ZXJuYWxfbWFjX2Vycm9yc19oaTsKKwl1MzIgdHhfY29udHJvbF9mcmFtZXNfbG87CisJdTMyIHR4X2NvbnRyb2xfZnJhbWVzX2hpOworCXUzMiB0eF9wYWNrZXRzXzY0X2J5dGVzX2xvOworCXUzMiB0eF9wYWNrZXRzXzY0X2J5dGVzX2hpOworCXUzMiB0eF9wYWNrZXRzXzY1X3RvXzEyN19ieXRlc19sbzsKKwl1MzIgdHhfcGFja2V0c182NV90b18xMjdfYnl0ZXNfaGk7CisJdTMyIHR4X3BhY2tldHNfMTI4X3RvXzI1NV9ieXRlc19sbzsKKwl1MzIgdHhfcGFja2V0c18xMjhfdG9fMjU1X2J5dGVzX2hpOworCXUzMiB0eF9wYWNrZXRzXzI1Nl90b181MTFfYnl0ZXNfbG87CisJdTMyIHR4X3BhY2tldHNfMjU2X3RvXzUxMV9ieXRlc19oaTsKKwl1MzIgdHhfcGFja2V0c181MTJfdG9fMTAyM19ieXRlc19sbzsKKwl1MzIgdHhfcGFja2V0c181MTJfdG9fMTAyM19ieXRlc19oaTsKKwl1MzIgdHhfcGFja2V0c18xMDI0X3RvXzE1MThfYnl0ZXNfbG87CisJdTMyIHR4X3BhY2tldHNfMTAyNF90b18xNTE4X2J5dGVzX2hpOworCXUzMiB0eF9wYWNrZXRzXzE1MTlfdG9fMjA0N19ieXRlc19sbzsKKwl1MzIgdHhfcGFja2V0c18xNTE5X3RvXzIwNDdfYnl0ZXNfaGk7CisJdTMyIHR4X3BhY2tldHNfMjA0OF90b180MDk1X2J5dGVzX2xvOworCXUzMiB0eF9wYWNrZXRzXzIwNDhfdG9fNDA5NV9ieXRlc19oaTsKKwl1MzIgdHhfcGFja2V0c180MDk2X3RvXzgxOTFfYnl0ZXNfbG87CisJdTMyIHR4X3BhY2tldHNfNDA5Nl90b184MTkxX2J5dGVzX2hpOworCXUzMiB0eF9wYWNrZXRzXzgxOTJfdG9fOTIxNl9ieXRlc19sbzsKKwl1MzIgdHhfcGFja2V0c184MTkyX3RvXzkyMTZfYnl0ZXNfaGk7CisJdTMyIHR4X2xzb19wYWNrZXRzX2xvOworCXUzMiB0eF9sc29fcGFja2V0c19oaTsKKwl1MzIgcnhfcGFja2V0c19sbzsKKwl1MzIgcnhfcGFja2V0c19oaTsKKwl1MzIgcnhfdW5pY2FzdF9wYWNrZXRzX2xvOworCXUzMiByeF91bmljYXN0X3BhY2tldHNfaGk7CisJdTMyIHJ4X211bHRpY2FzdF9wYWNrZXRzX2xvOworCXUzMiByeF9tdWx0aWNhc3RfcGFja2V0c19oaTsKKwl1MzIgcnhfYnJvYWRjYXN0X3BhY2tldHNfbG87CisJdTMyIHJ4X2Jyb2FkY2FzdF9wYWNrZXRzX2hpOworCXUzMiByeF9ieXRlc19sbzsKKwl1MzIgcnhfYnl0ZXNfaGk7CisJdTMyIHJ4X3VuaWNhc3RfYnl0ZXNfbG87CisJdTMyIHJ4X3VuaWNhc3RfYnl0ZXNfaGk7CisJdTMyIHJ4X211bHRpY2FzdF9ieXRlc19sbzsKKwl1MzIgcnhfbXVsdGljYXN0X2J5dGVzX2hpOworCXUzMiByeF9icm9hZGNhc3RfYnl0ZXNfbG87CisJdTMyIHJ4X2Jyb2FkY2FzdF9ieXRlc19oaTsKKwl1MzIgcnhfdW5rbm93bl9wcm90b3M7CisJdTMyIHJzdmRfNjk7IC8qIFdvcmQgNjkgaXMgcmVzZXJ2ZWQgKi8KKwl1MzIgcnhfZGlzY2FyZHNfbG87CisJdTMyIHJ4X2Rpc2NhcmRzX2hpOworCXUzMiByeF9lcnJvcnNfbG87CisJdTMyIHJ4X2Vycm9yc19oaTsKKwl1MzIgcnhfY3JjX2Vycm9yc19sbzsKKwl1MzIgcnhfY3JjX2Vycm9yc19oaTsKKwl1MzIgcnhfYWxpZ25tZW50X2Vycm9yc19sbzsKKwl1MzIgcnhfYWxpZ25tZW50X2Vycm9yc19oaTsKKwl1MzIgcnhfc3ltYm9sX2Vycm9yc19sbzsKKwl1MzIgcnhfc3ltYm9sX2Vycm9yc19oaTsKKwl1MzIgcnhfcGF1c2VfZnJhbWVzX2xvOworCXUzMiByeF9wYXVzZV9mcmFtZXNfaGk7CisJdTMyIHJ4X3BhdXNlX29uX2ZyYW1lc19sbzsKKwl1MzIgcnhfcGF1c2Vfb25fZnJhbWVzX2hpOworCXUzMiByeF9wYXVzZV9vZmZfZnJhbWVzX2xvOworCXUzMiByeF9wYXVzZV9vZmZfZnJhbWVzX2hpOworCXUzMiByeF9mcmFtZXNfdG9vX2xvbmdfbG87CisJdTMyIHJ4X2ZyYW1lc190b29fbG9uZ19oaTsKKwl1MzIgcnhfaW50ZXJuYWxfbWFjX2Vycm9yc19sbzsKKwl1MzIgcnhfaW50ZXJuYWxfbWFjX2Vycm9yc19oaTsKKwl1MzIgcnhfdW5kZXJzaXplX3BhY2tldHM7CisJdTMyIHJ4X292ZXJzaXplX3BhY2tldHM7CisJdTMyIHJ4X2ZyYWdtZW50X3BhY2tldHM7CisJdTMyIHJ4X2phYmJlcnM7CisJdTMyIHJ4X2NvbnRyb2xfZnJhbWVzX2xvOworCXUzMiByeF9jb250cm9sX2ZyYW1lc19oaTsKKwl1MzIgcnhfY29udHJvbF9mcmFtZXNfdW5rbm93bl9vcGNvZGVfbG87CisJdTMyIHJ4X2NvbnRyb2xfZnJhbWVzX3Vua25vd25fb3Bjb2RlX2hpOworCXUzMiByeF9pbl9yYW5nZV9lcnJvcnM7CisJdTMyIHJ4X291dF9vZl9yYW5nZV9lcnJvcnM7CisJdTMyIHJ4X2FkZHJlc3NfbWF0Y2hfZXJyb3JzOworCXUzMiByeF92bGFuX21pc21hdGNoX2Vycm9yczsKKwl1MzIgcnhfZHJvcHBlZF90b29fc21hbGw7CisJdTMyIHJ4X2Ryb3BwZWRfdG9vX3Nob3J0OworCXUzMiByeF9kcm9wcGVkX2hlYWRlcl90b29fc21hbGw7CisJdTMyIHJ4X2Ryb3BwZWRfaW52YWxpZF90Y3BfbGVuZ3RoOworCXUzMiByeF9kcm9wcGVkX3J1bnQ7CisJdTMyIHJ4X2lwX2NoZWNrc3VtX2Vycm9yczsKKwl1MzIgcnhfdGNwX2NoZWNrc3VtX2Vycm9yczsKKwl1MzIgcnhfdWRwX2NoZWNrc3VtX2Vycm9yczsKKwl1MzIgcnhfbm9uX3Jzc19wYWNrZXRzOworCXUzMiByc3ZkXzExMTsKKwl1MzIgcnhfaXB2NF9wYWNrZXRzX2xvOworCXUzMiByeF9pcHY0X3BhY2tldHNfaGk7CisJdTMyIHJ4X2lwdjZfcGFja2V0c19sbzsKKwl1MzIgcnhfaXB2Nl9wYWNrZXRzX2hpOworCXUzMiByeF9pcHY0X2J5dGVzX2xvOworCXUzMiByeF9pcHY0X2J5dGVzX2hpOworCXUzMiByeF9pcHY2X2J5dGVzX2xvOworCXUzMiByeF9pcHY2X2J5dGVzX2hpOworCXUzMiByeF9uaWNfcGFja2V0c19sbzsKKwl1MzIgcnhfbmljX3BhY2tldHNfaGk7CisJdTMyIHJ4X3RjcF9wYWNrZXRzX2xvOworCXUzMiByeF90Y3BfcGFja2V0c19oaTsKKwl1MzIgcnhfaXNjc2lfcGFja2V0c19sbzsKKwl1MzIgcnhfaXNjc2lfcGFja2V0c19oaTsKKwl1MzIgcnhfbWFuYWdlbWVudF9wYWNrZXRzX2xvOworCXUzMiByeF9tYW5hZ2VtZW50X3BhY2tldHNfaGk7CisJdTMyIHJ4X3N3aXRjaGVkX3VuaWNhc3RfcGFja2V0c19sbzsKKwl1MzIgcnhfc3dpdGNoZWRfdW5pY2FzdF9wYWNrZXRzX2hpOworCXUzMiByeF9zd2l0Y2hlZF9tdWx0aWNhc3RfcGFja2V0c19sbzsKKwl1MzIgcnhfc3dpdGNoZWRfbXVsdGljYXN0X3BhY2tldHNfaGk7CisJdTMyIHJ4X3N3aXRjaGVkX2Jyb2FkY2FzdF9wYWNrZXRzX2xvOworCXUzMiByeF9zd2l0Y2hlZF9icm9hZGNhc3RfcGFja2V0c19oaTsKKwl1MzIgbnVtX2ZvcndhcmRzX2xvOworCXUzMiBudW1fZm9yd2FyZHNfaGk7CisJdTMyIHJ4X2ZpZm9fb3ZlcmZsb3c7CisJdTMyIHJ4X2lucHV0X2ZpZm9fb3ZlcmZsb3c7CisJdTMyIHJ4X2Ryb3BzX3Rvb19tYW55X2ZyYWdzX2xvOworCXUzMiByeF9kcm9wc190b29fbWFueV9mcmFnc19oaTsKKwl1MzIgcnhfZHJvcHNfaW52YWxpZF9xdWV1ZTsKKwl1MzIgcnN2ZF8xNDE7CisJdTMyIHJ4X2Ryb3BzX210dV9sbzsKKwl1MzIgcnhfZHJvcHNfbXR1X2hpOworCXUzMiByeF9wYWNrZXRzXzY0X2J5dGVzX2xvOworCXUzMiByeF9wYWNrZXRzXzY0X2J5dGVzX2hpOworCXUzMiByeF9wYWNrZXRzXzY1X3RvXzEyN19ieXRlc19sbzsKKwl1MzIgcnhfcGFja2V0c182NV90b18xMjdfYnl0ZXNfaGk7CisJdTMyIHJ4X3BhY2tldHNfMTI4X3RvXzI1NV9ieXRlc19sbzsKKwl1MzIgcnhfcGFja2V0c18xMjhfdG9fMjU1X2J5dGVzX2hpOworCXUzMiByeF9wYWNrZXRzXzI1Nl90b181MTFfYnl0ZXNfbG87CisJdTMyIHJ4X3BhY2tldHNfMjU2X3RvXzUxMV9ieXRlc19oaTsKKwl1MzIgcnhfcGFja2V0c181MTJfdG9fMTAyM19ieXRlc19sbzsKKwl1MzIgcnhfcGFja2V0c181MTJfdG9fMTAyM19ieXRlc19oaTsKKwl1MzIgcnhfcGFja2V0c18xMDI0X3RvXzE1MThfYnl0ZXNfbG87CisJdTMyIHJ4X3BhY2tldHNfMTAyNF90b18xNTE4X2J5dGVzX2hpOworCXUzMiByeF9wYWNrZXRzXzE1MTlfdG9fMjA0N19ieXRlc19sbzsKKwl1MzIgcnhfcGFja2V0c18xNTE5X3RvXzIwNDdfYnl0ZXNfaGk7CisJdTMyIHJ4X3BhY2tldHNfMjA0OF90b180MDk1X2J5dGVzX2xvOworCXUzMiByeF9wYWNrZXRzXzIwNDhfdG9fNDA5NV9ieXRlc19oaTsKKwl1MzIgcnhfcGFja2V0c180MDk2X3RvXzgxOTFfYnl0ZXNfbG87CisJdTMyIHJ4X3BhY2tldHNfNDA5Nl90b184MTkxX2J5dGVzX2hpOworCXUzMiByeF9wYWNrZXRzXzgxOTJfdG9fOTIxNl9ieXRlc19sbzsKKwl1MzIgcnhfcGFja2V0c184MTkyX3RvXzkyMTZfYnl0ZXNfaGk7Cit9OworCitzdHJ1Y3QgcHBvcnRfc3RhdHNfcGFyYW1zIHsKKwl1MTYgcHBvcnRfbnVtOworCXU4IHJzdmQ7CisJdTggcmVzZXRfc3RhdHM7Cit9OworCitzdHJ1Y3QgbGFuY2VyX2NtZF9yZXFfcHBvcnRfc3RhdHMgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdW5pb24geworCQlzdHJ1Y3QgcHBvcnRfc3RhdHNfcGFyYW1zIHBhcmFtczsKKwkJdTggcnN2ZFtzaXplb2Yoc3RydWN0IGxhbmNlcl9jbWRfcHBvcnRfc3RhdHMpXTsKKwl9IGNtZF9wYXJhbXM7Cit9OworCitzdHJ1Y3QgbGFuY2VyX2NtZF9yZXNwX3Bwb3J0X3N0YXRzIHsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfaGRyIGhkcjsKKwlzdHJ1Y3QgbGFuY2VyX2NtZF9wcG9ydF9zdGF0cyBwcG9ydF9zdGF0czsKK307CisKK3N0YXRpYyBpbmxpbmUgIHN0cnVjdCBsYW5jZXJfY21kX3Bwb3J0X3N0YXRzKgorCXBwb3J0X3N0YXRzX2Zyb21fY21kKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBsYW5jZXJfY21kX3Jlc3BfcHBvcnRfc3RhdHMgKmNtZCA9IGFkYXB0ZXItPnN0YXRzX2NtZC52YTsKKwlyZXR1cm4gJmNtZC0+cHBvcnRfc3RhdHM7Cit9CisKIHN0cnVjdCBiZV9jbWRfcmVxX2dldF9jbnRsX2FkZG5sX2F0dHJpYnMgewogCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CiAJdTggcnN2ZFs4XTsKQEAgLTY5NSwxMyArOTA3LDYgQEAKIAl1MTYgbm9ybWFsX3ZsYW5bNjRdOwogfSBfX3BhY2tlZDsKIAotc3RydWN0IGJlX2NtZF9yZXFfcHJvbWlzY3VvdXNfY29uZmlnIHsKLQlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOwotCXU4IHBvcnQwX3Byb21pc2N1b3VzOwotCXU4IHBvcnQxX3Byb21pc2N1b3VzOwotCXUxNiByc3ZkMDsKLX0gX19wYWNrZWQ7Ci0KIC8qKioqKioqKioqKioqKioqKioqKiBNdWx0aWNhc3QgTUFDIENvbmZpZyAqKioqKioqKioqKioqKioqKioqLwogI2RlZmluZSBCRV9NQVhfTUMJCTY0IC8qIHNldCBtY2FzdCBwcm9taXNjIGlmID4gNjQgKi8KIHN0cnVjdCBtYWNhZGRyIHsKQEAgLTcxNiwxMSArOTIxLDE4IEBACiAJc3RydWN0IG1hY2FkZHIgbWFjW0JFX01BWF9NQ107CiB9IF9fcGFja2VkOwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBiZV9od19zdGF0cyAqCi1od19zdGF0c19mcm9tX2NtZChzdHJ1Y3QgYmVfY21kX3Jlc3BfZ2V0X3N0YXRzICpjbWQpCi17Ci0JcmV0dXJuICZjbWQtPmh3X3N0YXRzOwotfQorLyoqKioqKioqKioqKioqKioqKiogUlggRklMVEVSICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBiZV9jbWRfcmVxX3J4X2ZpbHRlciB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MzIgZ2xvYmFsX2ZsYWdzX21hc2s7CisJdTMyIGdsb2JhbF9mbGFnczsKKwl1MzIgaWZfZmxhZ3NfbWFzazsKKwl1MzIgaWZfZmxhZ3M7CisJdTMyIGlmX2lkOworCXUzMiBtdWx0aWNhc3RfbnVtOworCXN0cnVjdCBtYWNhZGRyIG1hY1tCRV9NQVhfTUNdOworfTsKKwogCiAvKioqKioqKioqKioqKioqKioqKiogTGluayBTdGF0dXMgUXVlcnkgKioqKioqKioqKioqKioqKioqKi8KIHN0cnVjdCBiZV9jbWRfcmVxX2xpbmtfc3RhdHVzIHsKQEAgLTkyMCw2ICsxMTMyLDM2IEBACiAJc3RydWN0IGZsYXNocm9tX3BhcmFtcyBwYXJhbXM7CiB9OwogCisvKioqKioqKioqKioqKioqKiBMYW5jZXIgRmlybXdhcmUgRmxhc2ggKioqKioqKioqKioqLworc3RydWN0IGFtYXBfbGFuY2VyX3dyaXRlX29ial9jb250ZXh0IHsKKwl1OCB3cml0ZV9sZW5ndGhbMjRdOworCXU4IHJlc2VydmVkMVs3XTsKKwl1OCBlb2Y7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbGFuY2VyX2NtZF9yZXFfd3JpdGVfb2JqZWN0IHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXU4IGNvbnRleHRbc2l6ZW9mKHN0cnVjdCBhbWFwX2xhbmNlcl93cml0ZV9vYmpfY29udGV4dCkgLyA4XTsKKwl1MzIgd3JpdGVfb2Zmc2V0OworCXU4IG9iamVjdF9uYW1lWzEwNF07CisJdTMyIGRlc2NyaXB0b3JfY291bnQ7CisJdTMyIGJ1Zl9sZW47CisJdTMyIGFkZHJfbG93OworCXUzMiBhZGRyX2hpZ2g7Cit9OworCitzdHJ1Y3QgbGFuY2VyX2NtZF9yZXNwX3dyaXRlX29iamVjdCB7CisJdTggb3Bjb2RlOworCXU4IHN1YnN5c3RlbTsKKwl1OCByc3ZkMVsyXTsKKwl1OCBzdGF0dXM7CisJdTggYWRkaXRpb25hbF9zdGF0dXM7CisJdTggcnN2ZDJbMl07CisJdTMyIHJlc3BfbGVuOworCXUzMiBhY3R1YWxfcmVzcF9sZW47CisJdTMyIGFjdHVhbF93cml0ZV9sZW47Cit9OworCiAvKioqKioqKioqKioqKioqKioqKioqKioqIFdPTCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RydWN0IGJlX2NtZF9yZXFfYWNwaV93b2xfbWFnaWNfY29uZmlnewogCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CkBAIC0xMDYxLDYgKzEzMDMsMTUxIEBACiAJdTggcnN2ZFsyMTJdOwogfTsKIAorLyoqKioqKioqKioqKioqKiBIVyBTdGF0cyBHZXQgdjEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQkVfVFhQX1NXX1NaCQkJNDgKK3N0cnVjdCBiZV9wb3J0X3J4Zl9zdGF0c192MSB7CisJdTMyIHJzdmQwWzEyXTsKKwl1MzIgcnhfY3JjX2Vycm9yczsKKwl1MzIgcnhfYWxpZ25tZW50X3N5bWJvbF9lcnJvcnM7CisJdTMyIHJ4X3BhdXNlX2ZyYW1lczsKKwl1MzIgcnhfcHJpb3JpdHlfcGF1c2VfZnJhbWVzOworCXUzMiByeF9jb250cm9sX2ZyYW1lczsKKwl1MzIgcnhfaW5fcmFuZ2VfZXJyb3JzOworCXUzMiByeF9vdXRfcmFuZ2VfZXJyb3JzOworCXUzMiByeF9mcmFtZV90b29fbG9uZzsKKwl1MzIgcnhfYWRkcmVzc19tYXRjaF9lcnJvcnM7CisJdTMyIHJ4X2Ryb3BwZWRfdG9vX3NtYWxsOworCXUzMiByeF9kcm9wcGVkX3Rvb19zaG9ydDsKKwl1MzIgcnhfZHJvcHBlZF9oZWFkZXJfdG9vX3NtYWxsOworCXUzMiByeF9kcm9wcGVkX3RjcF9sZW5ndGg7CisJdTMyIHJ4X2Ryb3BwZWRfcnVudDsKKwl1MzIgcnN2ZDFbMTBdOworCXUzMiByeF9pcF9jaGVja3N1bV9lcnJzOworCXUzMiByeF90Y3BfY2hlY2tzdW1fZXJyczsKKwl1MzIgcnhfdWRwX2NoZWNrc3VtX2VycnM7CisJdTMyIHJzdmQyWzddOworCXUzMiByeF9zd2l0Y2hlZF91bmljYXN0X3BhY2tldHM7CisJdTMyIHJ4X3N3aXRjaGVkX211bHRpY2FzdF9wYWNrZXRzOworCXUzMiByeF9zd2l0Y2hlZF9icm9hZGNhc3RfcGFja2V0czsKKwl1MzIgcnN2ZDNbM107CisJdTMyIHR4X3BhdXNlZnJhbWVzOworCXUzMiB0eF9wcmlvcml0eV9wYXVzZWZyYW1lczsKKwl1MzIgdHhfY29udHJvbGZyYW1lczsKKwl1MzIgcnN2ZDRbMTBdOworCXUzMiByeHBwX2ZpZm9fb3ZlcmZsb3dfZHJvcDsKKwl1MzIgcnhfaW5wdXRfZmlmb19vdmVyZmxvd19kcm9wOworCXUzMiBwbWVtX2ZpZm9fb3ZlcmZsb3dfZHJvcDsKKwl1MzIgamFiYmVyX2V2ZW50czsKKwl1MzIgcnN2ZDVbM107Cit9OworCisKK3N0cnVjdCBiZV9yeGZfc3RhdHNfdjEgeworCXN0cnVjdCBiZV9wb3J0X3J4Zl9zdGF0c192MSBwb3J0WzRdOworCXUzMiByc3ZkMFsyXTsKKwl1MzIgcnhfZHJvcHNfbm9fcGJ1ZjsKKwl1MzIgcnhfZHJvcHNfbm9fdHhwYjsKKwl1MzIgcnhfZHJvcHNfbm9fZXJ4X2Rlc2NyOworCXUzMiByeF9kcm9wc19ub190cHJlX2Rlc2NyOworCXUzMiByc3ZkMVs2XTsKKwl1MzIgcnhfZHJvcHNfdG9vX21hbnlfZnJhZ3M7CisJdTMyIHJ4X2Ryb3BzX2ludmFsaWRfcmluZzsKKwl1MzIgZm9yd2FyZGVkX3BhY2tldHM7CisJdTMyIHJ4X2Ryb3BzX210dTsKKwl1MzIgcnN2ZDJbMTRdOworfTsKKworc3RydWN0IGJlX2VyeF9zdGF0c192MSB7CisJdTMyIHJ4X2Ryb3BzX25vX2ZyYWdtZW50c1s2OF07ICAgICAvKiBkd29yZFMgMCB0byA2NyovCisJdTMyIHJzdmRbNF07Cit9OworCitzdHJ1Y3QgYmVfaHdfc3RhdHNfdjEgeworCXN0cnVjdCBiZV9yeGZfc3RhdHNfdjEgcnhmOworCXUzMiByc3ZkMFtCRV9UWFBfU1dfU1pdOworCXN0cnVjdCBiZV9lcnhfc3RhdHNfdjEgZXJ4OworCXN0cnVjdCBiZV9wbWVtX3N0YXRzIHBtZW07CisJdTMyIHJzdmQxWzNdOworfTsKKworc3RydWN0IGJlX2NtZF9yZXFfZ2V0X3N0YXRzX3YxIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXU4IHJzdmRbc2l6ZW9mKHN0cnVjdCBiZV9od19zdGF0c192MSldOworfTsKKworc3RydWN0IGJlX2NtZF9yZXNwX2dldF9zdGF0c192MSB7CisJc3RydWN0IGJlX2NtZF9yZXNwX2hkciBoZHI7CisJc3RydWN0IGJlX2h3X3N0YXRzX3YxIGh3X3N0YXRzOworfTsKKworc3RhdGljIGlubGluZSB2b2lkICoKK2h3X3N0YXRzX2Zyb21fY21kKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQoreworCWlmIChhZGFwdGVyLT5nZW5lcmF0aW9uID09IEJFX0dFTjMpIHsKKwkJc3RydWN0IGJlX2NtZF9yZXNwX2dldF9zdGF0c192MSAqY21kID0gYWRhcHRlci0+c3RhdHNfY21kLnZhOworCisJCXJldHVybiAmY21kLT5od19zdGF0czsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgYmVfY21kX3Jlc3BfZ2V0X3N0YXRzX3YwICpjbWQgPSBhZGFwdGVyLT5zdGF0c19jbWQudmE7CisKKwkJcmV0dXJuICZjbWQtPmh3X3N0YXRzOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkICpiZV9wb3J0X3J4Zl9zdGF0c19mcm9tX2NtZChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoYWRhcHRlci0+Z2VuZXJhdGlvbiA9PSBCRV9HRU4zKSB7CisJCXN0cnVjdCBiZV9od19zdGF0c192MSAqaHdfc3RhdHMgPSBod19zdGF0c19mcm9tX2NtZChhZGFwdGVyKTsKKwkJc3RydWN0IGJlX3J4Zl9zdGF0c192MSAqcnhmX3N0YXRzID0gJmh3X3N0YXRzLT5yeGY7CisKKwkJcmV0dXJuICZyeGZfc3RhdHMtPnBvcnRbYWRhcHRlci0+cG9ydF9udW1dOworCX0gZWxzZSB7CisJCXN0cnVjdCBiZV9od19zdGF0c192MCAqaHdfc3RhdHMgPSBod19zdGF0c19mcm9tX2NtZChhZGFwdGVyKTsKKwkJc3RydWN0IGJlX3J4Zl9zdGF0c192MCAqcnhmX3N0YXRzID0gJmh3X3N0YXRzLT5yeGY7CisKKwkJcmV0dXJuICZyeGZfc3RhdHMtPnBvcnRbYWRhcHRlci0+cG9ydF9udW1dOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkICpiZV9yeGZfc3RhdHNfZnJvbV9jbWQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaWYgKGFkYXB0ZXItPmdlbmVyYXRpb24gPT0gQkVfR0VOMykgeworCQlzdHJ1Y3QgYmVfaHdfc3RhdHNfdjEgKmh3X3N0YXRzID0gaHdfc3RhdHNfZnJvbV9jbWQoYWRhcHRlcik7CisKKwkJcmV0dXJuICZod19zdGF0cy0+cnhmOworCX0gZWxzZSB7CisJCXN0cnVjdCBiZV9od19zdGF0c192MCAqaHdfc3RhdHMgPSBod19zdGF0c19mcm9tX2NtZChhZGFwdGVyKTsKKworCQlyZXR1cm4gJmh3X3N0YXRzLT5yeGY7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKmJlX2VyeF9zdGF0c19mcm9tX2NtZChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoYWRhcHRlci0+Z2VuZXJhdGlvbiA9PSBCRV9HRU4zKSB7CisJCXN0cnVjdCBiZV9od19zdGF0c192MSAqaHdfc3RhdHMgPSBod19zdGF0c19mcm9tX2NtZChhZGFwdGVyKTsKKworCQlyZXR1cm4gJmh3X3N0YXRzLT5lcng7CisJfSBlbHNlIHsKKwkJc3RydWN0IGJlX2h3X3N0YXRzX3YwICpod19zdGF0cyA9IGh3X3N0YXRzX2Zyb21fY21kKGFkYXB0ZXIpOworCisJCXJldHVybiAmaHdfc3RhdHMtPmVyeDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqYmVfcG1lbV9zdGF0c19mcm9tX2NtZChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoYWRhcHRlci0+Z2VuZXJhdGlvbiA9PSBCRV9HRU4zKSB7CisJCXN0cnVjdCBiZV9od19zdGF0c192MSAqaHdfc3RhdHMgPSBod19zdGF0c19mcm9tX2NtZChhZGFwdGVyKTsKKworCQlyZXR1cm4gJmh3X3N0YXRzLT5wbWVtOworCX0gZWxzZSB7CisJCXN0cnVjdCBiZV9od19zdGF0c192MCAqaHdfc3RhdHMgPSBod19zdGF0c19mcm9tX2NtZChhZGFwdGVyKTsKKworCQlyZXR1cm4gJmh3X3N0YXRzLT5wbWVtOworCX0KK30KKwogZXh0ZXJuIGludCBiZV9wY2lfZm51bV9nZXQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpOwogZXh0ZXJuIGludCBiZV9jbWRfUE9TVChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcik7CiBleHRlcm4gaW50IGJlX2NtZF9tYWNfYWRkcl9xdWVyeShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTggKm1hY19hZGRyLApAQCAtMTA5MywxOCArMTQ4MCwxOSBAQAogZXh0ZXJuIGludCBiZV9jbWRfcV9kZXN0cm95KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcSwKIAkJCWludCB0eXBlKTsKIGV4dGVybiBpbnQgYmVfY21kX2xpbmtfc3RhdHVzX3F1ZXJ5KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAotCQkJYm9vbCAqbGlua191cCwgdTggKm1hY19zcGVlZCwgdTE2ICpsaW5rX3NwZWVkKTsKKwkJCWJvb2wgKmxpbmtfdXAsIHU4ICptYWNfc3BlZWQsIHUxNiAqbGlua19zcGVlZCwgdTMyIGRvbSk7CiBleHRlcm4gaW50IGJlX2NtZF9yZXNldChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcik7CiBleHRlcm4gaW50IGJlX2NtZF9nZXRfc3RhdHMoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQlzdHJ1Y3QgYmVfZG1hX21lbSAqbm9uZW1iX2NtZCk7CitleHRlcm4gaW50IGxhbmNlcl9jbWRfZ2V0X3Bwb3J0X3N0YXRzKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAorCQkJc3RydWN0IGJlX2RtYV9tZW0gKm5vbmVtYl9jbWQpOwogZXh0ZXJuIGludCBiZV9jbWRfZ2V0X2Z3X3ZlcihzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgY2hhciAqZndfdmVyKTsKIAogZXh0ZXJuIGludCBiZV9jbWRfbW9kaWZ5X2VxZChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIGVxX2lkLCB1MzIgZXFkKTsKIGV4dGVybiBpbnQgYmVfY21kX3ZsYW5fY29uZmlnKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgaWZfaWQsCiAJCQl1MTYgKnZ0YWdfYXJyYXksIHUzMiBudW0sIGJvb2wgdW50YWdnZWQsCiAJCQlib29sIHByb21pc2N1b3VzKTsKLWV4dGVybiBpbnQgYmVfY21kX3Byb21pc2N1b3VzX2NvbmZpZyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKLQkJCXU4IHBvcnRfbnVtLCBib29sIGVuKTsKK2V4dGVybiBpbnQgYmVfY21kX3Byb21pc2N1b3VzX2NvbmZpZyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgYm9vbCBlbik7CiBleHRlcm4gaW50IGJlX2NtZF9tdWx0aWNhc3Rfc2V0KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgaWZfaWQsCiAJCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgYmVfZG1hX21lbSAqbWVtKTsKIGV4dGVybiBpbnQgYmVfY21kX3NldF9mbG93X2NvbnRyb2woc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCkBAIC0xMTI0LDYgKzE1MTIsMTEgQEAKIGV4dGVybiBpbnQgYmVfY21kX3dyaXRlX2ZsYXNocm9tKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAogCQkJc3RydWN0IGJlX2RtYV9tZW0gKmNtZCwgdTMyIGZsYXNoX29wZXIsCiAJCQl1MzIgZmxhc2hfb3Bjb2RlLCB1MzIgYnVmX3NpemUpOworZXh0ZXJuIGludCBsYW5jZXJfY21kX3dyaXRlX29iamVjdChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKKwkJCQlzdHJ1Y3QgYmVfZG1hX21lbSAqY21kLAorCQkJCXUzMiBkYXRhX3NpemUsIHUzMiBkYXRhX29mZnNldCwKKwkJCQljb25zdCBjaGFyICpvYmpfbmFtZSwKKwkJCQl1MzIgKmRhdGFfd3JpdHRlbiwgdTggKmFkZG5fc3RhdHVzKTsKIGludCBiZV9jbWRfZ2V0X2ZsYXNoX2NyYyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTggKmZsYXNoZWRfY3JjLAogCQkJCWludCBvZmZzZXQpOwogZXh0ZXJuIGludCBiZV9jbWRfZW5hYmxlX21hZ2ljX3dvbChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTggKm1hYywKQEAgLTExNDgsNCArMTU0MSw2IEBACiBleHRlcm4gaW50IGJlX2NtZF9nZXRfZGllX3RlbXBlcmF0dXJlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKTsKIGV4dGVybiBpbnQgYmVfY21kX2dldF9jbnRsX2F0dHJpYnV0ZXMoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpOwogZXh0ZXJuIGludCBiZV9jbWRfY2hlY2tfbmF0aXZlX21vZGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpOworZXh0ZXJuIGludCBiZV9jbWRfZ2V0X3JlZ19sZW4oc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiAqbG9nX3NpemUpOworZXh0ZXJuIHZvaWQgYmVfY21kX2dldF9yZWdzKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgYnVmX2xlbiwgdm9pZCAqYnVmKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfZXRodG9vbC5jCmluZGV4IGFhYzI0OGYuLmZhY2ZlM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9ldGh0b29sLmMKQEAgLTI2LDggKzI2LDggQEAKIAlpbnQgb2Zmc2V0OwogfTsKIAotZW51bSB7TkVUU1RBVCwgUE9SVFNUQVQsIE1JU0NTVEFULCBEUlZTVEFUX1RYLCBEUlZTVEFUX1JYLCBFUlhTVEFULAotCQkJUE1FTVNUQVQsIERSVlNUQVR9OworZW51bSB7TkVUU1RBVCwgRFJWU1RBVF9UWCwgRFJWU1RBVF9SWCwgRVJYU1RBVCwKKwkJCURSVlNUQVR9OwogI2RlZmluZSBGSUVMRElORk8oX3N0cnVjdCwgZmllbGQpIEZJRUxEX1NJWkVPRihfc3RydWN0LCBmaWVsZCksIFwKIAkJCQkJb2Zmc2V0b2YoX3N0cnVjdCwgZmllbGQpCiAjZGVmaW5lIE5FVFNUQVRfSU5GTyhmaWVsZCkgCSNmaWVsZCwgTkVUU1RBVCxcCkBAIC0zNywxNSArMzcsOCBAQAogCQkJCQlGSUVMRElORk8oc3RydWN0IGJlX3R4X3N0YXRzLCBmaWVsZCkKICNkZWZpbmUgRFJWU1RBVF9SWF9JTkZPKGZpZWxkKQkjZmllbGQsIERSVlNUQVRfUlgsXAogCQkJCQlGSUVMRElORk8oc3RydWN0IGJlX3J4X3N0YXRzLCBmaWVsZCkKLSNkZWZpbmUgTUlTQ1NUQVRfSU5GTyhmaWVsZCkgCSNmaWVsZCwgTUlTQ1NUQVQsXAotCQkJCQlGSUVMRElORk8oc3RydWN0IGJlX3J4Zl9zdGF0cywgZmllbGQpCi0jZGVmaW5lIFBPUlRTVEFUX0lORk8oZmllbGQpIAkjZmllbGQsIFBPUlRTVEFULFwKLQkJCQkJRklFTERJTkZPKHN0cnVjdCBiZV9wb3J0X3J4Zl9zdGF0cywgXAotCQkJCQkJZmllbGQpCi0jZGVmaW5lIEVSWFNUQVRfSU5GTyhmaWVsZCkgCSNmaWVsZCwgRVJYU1RBVCxcCi0JCQkJCUZJRUxESU5GTyhzdHJ1Y3QgYmVfZXJ4X3N0YXRzLCBmaWVsZCkKLSNkZWZpbmUgUE1FTVNUQVRfSU5GTyhmaWVsZCkgCSNmaWVsZCwgUE1FTVNUQVQsXAotCQkJCQlGSUVMRElORk8oc3RydWN0IGJlX3BtZW1fc3RhdHMsIGZpZWxkKQorI2RlZmluZSBFUlhTVEFUX0lORk8oZmllbGQpCSNmaWVsZCwgRVJYU1RBVCxcCisJCQkJCUZJRUxESU5GTyhzdHJ1Y3QgYmVfZXJ4X3N0YXRzX3YxLCBmaWVsZCkKICNkZWZpbmUJRFJWU1RBVF9JTkZPKGZpZWxkKQkjZmllbGQsIERSVlNUQVQsXAogCQkJCQlGSUVMRElORk8oc3RydWN0IGJlX2Rydl9zdGF0cywgXAogCQkJCQkJZmllbGQpCkBAIC02NSw1MCArNTgsNDEgQEAKIAl7RFJWU1RBVF9UWF9JTkZPKGJlX3R4X3N0b3BzKX0sCiAJe0RSVlNUQVRfVFhfSU5GTyhiZV90eF9ldmVudHMpfSwKIAl7RFJWU1RBVF9UWF9JTkZPKGJlX3R4X2NvbXBsKX0sCi0Je1BPUlRTVEFUX0lORk8ocnhfdW5pY2FzdF9mcmFtZXMpfSwKLQl7UE9SVFNUQVRfSU5GTyhyeF9tdWx0aWNhc3RfZnJhbWVzKX0sCi0Je1BPUlRTVEFUX0lORk8ocnhfYnJvYWRjYXN0X2ZyYW1lcyl9LAotCXtQT1JUU1RBVF9JTkZPKHJ4X2NyY19lcnJvcnMpfSwKLQl7UE9SVFNUQVRfSU5GTyhyeF9hbGlnbm1lbnRfc3ltYm9sX2Vycm9ycyl9LAotCXtQT1JUU1RBVF9JTkZPKHJ4X3BhdXNlX2ZyYW1lcyl9LAotCXtQT1JUU1RBVF9JTkZPKHJ4X2NvbnRyb2xfZnJhbWVzKX0sCi0Je1BPUlRTVEFUX0lORk8ocnhfaW5fcmFuZ2VfZXJyb3JzKX0sCi0Je1BPUlRTVEFUX0lORk8ocnhfb3V0X3JhbmdlX2Vycm9ycyl9LAotCXtQT1JUU1RBVF9JTkZPKHJ4X2ZyYW1lX3Rvb19sb25nKX0sCi0Je1BPUlRTVEFUX0lORk8ocnhfYWRkcmVzc19tYXRjaF9lcnJvcnMpfSwKLQl7UE9SVFNUQVRfSU5GTyhyeF92bGFuX21pc21hdGNoKX0sCi0Je1BPUlRTVEFUX0lORk8ocnhfZHJvcHBlZF90b29fc21hbGwpfSwKLQl7UE9SVFNUQVRfSU5GTyhyeF9kcm9wcGVkX3Rvb19zaG9ydCl9LAotCXtQT1JUU1RBVF9JTkZPKHJ4X2Ryb3BwZWRfaGVhZGVyX3Rvb19zbWFsbCl9LAotCXtQT1JUU1RBVF9JTkZPKHJ4X2Ryb3BwZWRfdGNwX2xlbmd0aCl9LAotCXtQT1JUU1RBVF9JTkZPKHJ4X2Ryb3BwZWRfcnVudCl9LAotCXtQT1JUU1RBVF9JTkZPKHJ4X2ZpZm9fb3ZlcmZsb3cpfSwKLQl7UE9SVFNUQVRfSU5GTyhyeF9pbnB1dF9maWZvX292ZXJmbG93KX0sCi0Je1BPUlRTVEFUX0lORk8ocnhfaXBfY2hlY2tzdW1fZXJycyl9LAotCXtQT1JUU1RBVF9JTkZPKHJ4X3RjcF9jaGVja3N1bV9lcnJzKX0sCi0Je1BPUlRTVEFUX0lORk8ocnhfdWRwX2NoZWNrc3VtX2VycnMpfSwKLQl7UE9SVFNUQVRfSU5GTyhyeF9ub25fcnNzX3BhY2tldHMpfSwKLQl7UE9SVFNUQVRfSU5GTyhyeF9pcHY0X3BhY2tldHMpfSwKLQl7UE9SVFNUQVRfSU5GTyhyeF9pcHY2X3BhY2tldHMpfSwKLQl7UE9SVFNUQVRfSU5GTyhyeF9zd2l0Y2hlZF91bmljYXN0X3BhY2tldHMpfSwKLQl7UE9SVFNUQVRfSU5GTyhyeF9zd2l0Y2hlZF9tdWx0aWNhc3RfcGFja2V0cyl9LAotCXtQT1JUU1RBVF9JTkZPKHJ4X3N3aXRjaGVkX2Jyb2FkY2FzdF9wYWNrZXRzKX0sCi0Je1BPUlRTVEFUX0lORk8odHhfdW5pY2FzdGZyYW1lcyl9LAotCXtQT1JUU1RBVF9JTkZPKHR4X211bHRpY2FzdGZyYW1lcyl9LAotCXtQT1JUU1RBVF9JTkZPKHR4X2Jyb2FkY2FzdGZyYW1lcyl9LAotCXtQT1JUU1RBVF9JTkZPKHR4X3BhdXNlZnJhbWVzKX0sCi0Je1BPUlRTVEFUX0lORk8odHhfY29udHJvbGZyYW1lcyl9LAotCXtNSVNDU1RBVF9JTkZPKHJ4X2Ryb3BzX25vX3BidWYpfSwKLQl7TUlTQ1NUQVRfSU5GTyhyeF9kcm9wc19ub190eHBiKX0sCi0Je01JU0NTVEFUX0lORk8ocnhfZHJvcHNfbm9fZXJ4X2Rlc2NyKX0sCi0Je01JU0NTVEFUX0lORk8ocnhfZHJvcHNfbm9fdHByZV9kZXNjcil9LAotCXtNSVNDU1RBVF9JTkZPKHJ4X2Ryb3BzX3Rvb19tYW55X2ZyYWdzKX0sCi0Je01JU0NTVEFUX0lORk8ocnhfZHJvcHNfaW52YWxpZF9yaW5nKX0sCi0Je01JU0NTVEFUX0lORk8oZm9yd2FyZGVkX3BhY2tldHMpfSwKLQl7TUlTQ1NUQVRfSU5GTyhyeF9kcm9wc19tdHUpfSwKLQl7TUlTQ1NUQVRfSU5GTyhwb3J0MF9qYWJiZXJfZXZlbnRzKX0sCi0Je01JU0NTVEFUX0lORk8ocG9ydDFfamFiYmVyX2V2ZW50cyl9LAotCXtQTUVNU1RBVF9JTkZPKGV0aF9yZWRfZHJvcHMpfSwKKwl7RFJWU1RBVF9JTkZPKHJ4X2NyY19lcnJvcnMpfSwKKwl7RFJWU1RBVF9JTkZPKHJ4X2FsaWdubWVudF9zeW1ib2xfZXJyb3JzKX0sCisJe0RSVlNUQVRfSU5GTyhyeF9wYXVzZV9mcmFtZXMpfSwKKwl7RFJWU1RBVF9JTkZPKHJ4X2NvbnRyb2xfZnJhbWVzKX0sCisJe0RSVlNUQVRfSU5GTyhyeF9pbl9yYW5nZV9lcnJvcnMpfSwKKwl7RFJWU1RBVF9JTkZPKHJ4X291dF9yYW5nZV9lcnJvcnMpfSwKKwl7RFJWU1RBVF9JTkZPKHJ4X2ZyYW1lX3Rvb19sb25nKX0sCisJe0RSVlNUQVRfSU5GTyhyeF9hZGRyZXNzX21hdGNoX2Vycm9ycyl9LAorCXtEUlZTVEFUX0lORk8ocnhfZHJvcHBlZF90b29fc21hbGwpfSwKKwl7RFJWU1RBVF9JTkZPKHJ4X2Ryb3BwZWRfdG9vX3Nob3J0KX0sCisJe0RSVlNUQVRfSU5GTyhyeF9kcm9wcGVkX2hlYWRlcl90b29fc21hbGwpfSwKKwl7RFJWU1RBVF9JTkZPKHJ4X2Ryb3BwZWRfdGNwX2xlbmd0aCl9LAorCXtEUlZTVEFUX0lORk8ocnhfZHJvcHBlZF9ydW50KX0sCisJe0RSVlNUQVRfSU5GTyhyeHBwX2ZpZm9fb3ZlcmZsb3dfZHJvcCl9LAorCXtEUlZTVEFUX0lORk8ocnhfaW5wdXRfZmlmb19vdmVyZmxvd19kcm9wKX0sCisJe0RSVlNUQVRfSU5GTyhyeF9pcF9jaGVja3N1bV9lcnJzKX0sCisJe0RSVlNUQVRfSU5GTyhyeF90Y3BfY2hlY2tzdW1fZXJycyl9LAorCXtEUlZTVEFUX0lORk8ocnhfdWRwX2NoZWNrc3VtX2VycnMpfSwKKwl7RFJWU1RBVF9JTkZPKHJ4X3N3aXRjaGVkX3VuaWNhc3RfcGFja2V0cyl9LAorCXtEUlZTVEFUX0lORk8ocnhfc3dpdGNoZWRfbXVsdGljYXN0X3BhY2tldHMpfSwKKwl7RFJWU1RBVF9JTkZPKHJ4X3N3aXRjaGVkX2Jyb2FkY2FzdF9wYWNrZXRzKX0sCisJe0RSVlNUQVRfSU5GTyh0eF9wYXVzZWZyYW1lcyl9LAorCXtEUlZTVEFUX0lORk8odHhfY29udHJvbGZyYW1lcyl9LAorCXtEUlZTVEFUX0lORk8ocnhfcHJpb3JpdHlfcGF1c2VfZnJhbWVzKX0sCisJe0RSVlNUQVRfSU5GTyhwbWVtX2ZpZm9fb3ZlcmZsb3dfZHJvcCl9LAorCXtEUlZTVEFUX0lORk8oamFiYmVyX2V2ZW50cyl9LAorCXtEUlZTVEFUX0lORk8ocnhfZHJvcHNfbm9fcGJ1Zil9LAorCXtEUlZTVEFUX0lORk8ocnhfZHJvcHNfbm9fdHhwYil9LAorCXtEUlZTVEFUX0lORk8ocnhfZHJvcHNfbm9fZXJ4X2Rlc2NyKX0sCisJe0RSVlNUQVRfSU5GTyhyeF9kcm9wc19ub190cHJlX2Rlc2NyKX0sCisJe0RSVlNUQVRfSU5GTyhyeF9kcm9wc190b29fbWFueV9mcmFncyl9LAorCXtEUlZTVEFUX0lORk8ocnhfZHJvcHNfaW52YWxpZF9yaW5nKX0sCisJe0RSVlNUQVRfSU5GTyhmb3J3YXJkZWRfcGFja2V0cyl9LAorCXtEUlZTVEFUX0lORk8ocnhfZHJvcHNfbXR1KX0sCisJe0RSVlNUQVRfSU5GTyhldGhfcmVkX2Ryb3BzKX0sCiAJe0RSVlNUQVRfSU5GTyhiZV9vbl9kaWVfdGVtcGVyYXR1cmUpfQogfTsKICNkZWZpbmUgRVRIVE9PTF9TVEFUU19OVU0gQVJSQVlfU0laRShldF9zdGF0cykKQEAgLTE1Niw2ICsxNDAsMjkgQEAKIH0KIAogc3RhdGljIGludAorYmVfZ2V0X3JlZ19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJdTMyIGxvZ19zaXplID0gMDsKKworCWlmIChiZV9waHlzZm4oYWRhcHRlcikpCisJCWJlX2NtZF9nZXRfcmVnX2xlbihhZGFwdGVyLCAmbG9nX3NpemUpOworCisJcmV0dXJuIGxvZ19zaXplOworfQorCitzdGF0aWMgdm9pZAorYmVfZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfcmVncyAqcmVncywgdm9pZCAqYnVmKQoreworCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWlmIChiZV9waHlzZm4oYWRhcHRlcikpIHsKKwkJbWVtc2V0KGJ1ZiwgMCwgcmVncy0+bGVuKTsKKwkJYmVfY21kX2dldF9yZWdzKGFkYXB0ZXIsIHJlZ3MtPmxlbiwgYnVmKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKIGJlX2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqY29hbGVzY2UpCiB7CiAJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwpAQCAtMTg2LDkgKzE5Myw5IEBACiAJc3RydWN0IGJlX3J4X29iaiAqcnhvOwogCXN0cnVjdCBiZV9lcV9vYmogKnJ4X2VxOwogCXN0cnVjdCBiZV9lcV9vYmogKnR4X2VxID0gJmFkYXB0ZXItPnR4X2VxOwotCXUzMiB0eF9tYXgsIHR4X21pbiwgdHhfY3VyOwogCXUzMiByeF9tYXgsIHJ4X21pbiwgcnhfY3VyOwogCWludCBzdGF0dXMgPSAwLCBpOworCXUzMiB0eF9jdXI7CiAKIAlpZiAoY29hbGVzY2UtPnVzZV9hZGFwdGl2ZV90eF9jb2FsZXNjZSA9PSAxKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTIyNyw4ICsyMzQsNiBAQAogCQl9CiAJfQogCi0JdHhfbWF4ID0gY29hbGVzY2UtPnR4X2NvYWxlc2NlX3VzZWNzX2hpZ2g7Ci0JdHhfbWluID0gY29hbGVzY2UtPnR4X2NvYWxlc2NlX3VzZWNzX2xvdzsKIAl0eF9jdXIgPSBjb2FsZXNjZS0+dHhfY29hbGVzY2VfdXNlY3M7CiAKIAlpZiAodHhfY3VyID4gQkVfTUFYX0VRRCkKQEAgLTI0MiwzMiArMjQ3LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1MzIgYmVfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKLXsKLQlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0KLQlyZXR1cm4gYWRhcHRlci0+cnhfY3N1bTsKLX0KLQotc3RhdGljIGludCBiZV9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1aW50MzJfdCBkYXRhKQotewotCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQotCWlmIChkYXRhKQotCQlhZGFwdGVyLT5yeF9jc3VtID0gdHJ1ZTsKLQllbHNlCi0JCWFkYXB0ZXItPnJ4X2NzdW0gPSBmYWxzZTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZAogYmVfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLCB1aW50NjRfdCAqZGF0YSkKIHsKIAlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IGJlX2h3X3N0YXRzICpod19zdGF0cyA9IGh3X3N0YXRzX2Zyb21fY21kKGFkYXB0ZXItPnN0YXRzX2NtZC52YSk7Ci0Jc3RydWN0IGJlX2VyeF9zdGF0cyAqZXJ4X3N0YXRzID0gJmh3X3N0YXRzLT5lcng7CiAJc3RydWN0IGJlX3J4X29iaiAqcnhvOwogCXZvaWQgKnAgPSBOVUxMOwogCWludCBpLCBqOwpAQCAtMjgwLDE1ICsyNjQsNiBAQAogCQljYXNlIERSVlNUQVRfVFg6CiAJCQlwID0gJmFkYXB0ZXItPnR4X3N0YXRzOwogCQkJYnJlYWs7Ci0JCWNhc2UgUE9SVFNUQVQ6Ci0JCQlwID0gJmh3X3N0YXRzLT5yeGYucG9ydFthZGFwdGVyLT5wb3J0X251bV07Ci0JCQlicmVhazsKLQkJY2FzZSBNSVNDU1RBVDoKLQkJCXAgPSAmaHdfc3RhdHMtPnJ4ZjsKLQkJCWJyZWFrOwotCQljYXNlIFBNRU1TVEFUOgotCQkJcCA9ICZod19zdGF0cy0+cG1lbTsKLQkJCWJyZWFrOwogCQljYXNlIERSVlNUQVQ6CiAJCQlwID0gJmFkYXB0ZXItPmRydl9zdGF0czsKIAkJCWJyZWFrOwpAQCAtMzA2LDcgKzI4MSw4IEBACiAJCQkJcCA9ICh1OCAqKSZyeG8tPnN0YXRzICsgZXRfcnhfc3RhdHNbaV0ub2Zmc2V0OwogCQkJCWJyZWFrOwogCQkJY2FzZSBFUlhTVEFUOgotCQkJCXAgPSAodTMyICopZXJ4X3N0YXRzICsgcnhvLT5xLmlkOworCQkJCXAgPSAodTMyICopYmVfZXJ4X3N0YXRzX2Zyb21fY21kKGFkYXB0ZXIpICsKKwkJCQkJCQkJcnhvLT5xLmlkOwogCQkJCWJyZWFrOwogCQkJfQogCQkJZGF0YVtFVEhUT09MX1NUQVRTX05VTSArIGogKiBFVEhUT09MX1JYU1RBVFNfTlVNICsgaV0gPQpAQCAtMzc0LDE5ICszNTAsMjggQEAKIAogCWlmICgoYWRhcHRlci0+bGlua19zcGVlZCA8IDApIHx8ICghKG5ldGRldi0+ZmxhZ3MgJiBJRkZfVVApKSkgewogCQlzdGF0dXMgPSBiZV9jbWRfbGlua19zdGF0dXNfcXVlcnkoYWRhcHRlciwgJmxpbmtfdXAsCi0JCQkJCQkmbWFjX3NwZWVkLCAmbGlua19zcGVlZCk7CisJCQkJCQkmbWFjX3NwZWVkLCAmbGlua19zcGVlZCwgMCk7CiAKIAkJYmVfbGlua19zdGF0dXNfdXBkYXRlKGFkYXB0ZXIsIGxpbmtfdXApOwogCQkvKiBsaW5rX3NwZWVkIGlzIGluIHVuaXRzIG9mIDEwIE1icHMgKi8KIAkJaWYgKGxpbmtfc3BlZWQpIHsKLQkJCWVjbWQtPnNwZWVkID0gbGlua19zcGVlZCoxMDsKKwkJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBsaW5rX3NwZWVkKjEwKTsKIAkJfSBlbHNlIHsKIAkJCXN3aXRjaCAobWFjX3NwZWVkKSB7CisJCQljYXNlIFBIWV9MSU5LX1NQRUVEXzEwTUJQUzoKKwkJCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgU1BFRURfMTApOworCQkJCWJyZWFrOworCQkJY2FzZSBQSFlfTElOS19TUEVFRF8xMDBNQlBTOgorCQkJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBTUEVFRF8xMDApOworCQkJCWJyZWFrOwogCQkJY2FzZSBQSFlfTElOS19TUEVFRF8xR0JQUzoKLQkJCQllY21kLT5zcGVlZCA9IFNQRUVEXzEwMDA7CisJCQkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIFNQRUVEXzEwMDApOwogCQkJCWJyZWFrOwogCQkJY2FzZSBQSFlfTElOS19TUEVFRF8xMEdCUFM6Ci0JCQkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDAwMDsKKwkJCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgU1BFRURfMTAwMDApOworCQkJCWJyZWFrOworCQkJY2FzZSBQSFlfTElOS19TUEVFRF9aRVJPOgorCQkJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCAwKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpAQCAtNDI5LDE0ICs0MTQsMTQgQEAKIAkJfQogCiAJCS8qIFNhdmUgZm9yIGZ1dHVyZSB1c2UgKi8KLQkJYWRhcHRlci0+bGlua19zcGVlZCA9IGVjbWQtPnNwZWVkOworCQlhZGFwdGVyLT5saW5rX3NwZWVkID0gZXRodG9vbF9jbWRfc3BlZWQoZWNtZCk7CiAJCWFkYXB0ZXItPnBvcnRfdHlwZSA9IGVjbWQtPnBvcnQ7CiAJCWFkYXB0ZXItPnRyYW5zY2VpdmVyID0gZWNtZC0+dHJhbnNjZWl2ZXI7CiAJCWFkYXB0ZXItPmF1dG9uZWcgPSBlY21kLT5hdXRvbmVnOwogCQlkbWFfZnJlZV9jb2hlcmVudCgmYWRhcHRlci0+cGRldi0+ZGV2LCBwaHlfY21kLnNpemUsIHBoeV9jbWQudmEsCiAJCQkJICBwaHlfY21kLmRtYSk7CiAJfSBlbHNlIHsKLQkJZWNtZC0+c3BlZWQgPSBhZGFwdGVyLT5saW5rX3NwZWVkOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgYWRhcHRlci0+bGlua19zcGVlZCk7CiAJCWVjbWQtPnBvcnQgPSBhZGFwdGVyLT5wb3J0X3R5cGU7CiAJCWVjbWQtPnRyYW5zY2VpdmVyID0gYWRhcHRlci0+dHJhbnNjZWl2ZXI7CiAJCWVjbWQtPmF1dG9uZWcgPSBhZGFwdGVyLT5hdXRvbmVnOwpAQCAtNTA3LDI5ICs0OTIsMzMgQEAKIH0KIAogc3RhdGljIGludAotYmVfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKK2JlX3NldF9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJICAgICAgIGVudW0gZXRodG9vbF9waHlzX2lkX3N0YXRlIHN0YXRlKQogewogCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlpbnQgc3RhdHVzOwotCXUzMiBjdXI7CiAKLQliZV9jbWRfZ2V0X2JlYWNvbl9zdGF0ZShhZGFwdGVyLCBhZGFwdGVyLT5oYmFfcG9ydF9udW0sICZjdXIpOworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIEVUSFRPT0xfSURfQUNUSVZFOgorCQliZV9jbWRfZ2V0X2JlYWNvbl9zdGF0ZShhZGFwdGVyLCBhZGFwdGVyLT5oYmFfcG9ydF9udW0sCisJCQkJCSZhZGFwdGVyLT5iZWFjb25fc3RhdGUpOworCQlyZXR1cm4gMTsJLyogY3ljbGUgb24vb2ZmIG9uY2UgcGVyIHNlY29uZCAqLwogCi0JaWYgKGN1ciA9PSBCRUFDT05fU1RBVEVfRU5BQkxFRCkKLQkJcmV0dXJuIDA7CisJY2FzZSBFVEhUT09MX0lEX09OOgorCQliZV9jbWRfc2V0X2JlYWNvbl9zdGF0ZShhZGFwdGVyLCBhZGFwdGVyLT5oYmFfcG9ydF9udW0sIDAsIDAsCisJCQkJCUJFQUNPTl9TVEFURV9FTkFCTEVEKTsKKwkJYnJlYWs7CiAKLQlpZiAoZGF0YSA8IDIpCi0JCWRhdGEgPSAyOworCWNhc2UgRVRIVE9PTF9JRF9PRkY6CisJCWJlX2NtZF9zZXRfYmVhY29uX3N0YXRlKGFkYXB0ZXIsIGFkYXB0ZXItPmhiYV9wb3J0X251bSwgMCwgMCwKKwkJCQkJQkVBQ09OX1NUQVRFX0RJU0FCTEVEKTsKKwkJYnJlYWs7CiAKLQlzdGF0dXMgPSBiZV9jbWRfc2V0X2JlYWNvbl9zdGF0ZShhZGFwdGVyLCBhZGFwdGVyLT5oYmFfcG9ydF9udW0sIDAsIDAsCi0JCQlCRUFDT05fU1RBVEVfRU5BQkxFRCk7Ci0Jc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQlzY2hlZHVsZV90aW1lb3V0KGRhdGEqSFopOworCWNhc2UgRVRIVE9PTF9JRF9JTkFDVElWRToKKwkJYmVfY21kX3NldF9iZWFjb25fc3RhdGUoYWRhcHRlciwgYWRhcHRlci0+aGJhX3BvcnRfbnVtLCAwLCAwLAorCQkJCQlhZGFwdGVyLT5iZWFjb25fc3RhdGUpOworCX0KIAotCXN0YXR1cyA9IGJlX2NtZF9zZXRfYmVhY29uX3N0YXRlKGFkYXB0ZXIsIGFkYXB0ZXItPmhiYV9wb3J0X251bSwgMCwgMCwKLQkJCUJFQUNPTl9TVEFURV9ESVNBQkxFRCk7Ci0KLQlyZXR1cm4gc3RhdHVzOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgYm9vbApAQCAtNjQ2LDcgKzYzNSw3IEBACiAJfQogCiAJaWYgKGJlX2NtZF9saW5rX3N0YXR1c19xdWVyeShhZGFwdGVyLCAmbGlua191cCwgJm1hY19zcGVlZCwKLQkJCQkmcW9zX2xpbmtfc3BlZWQpICE9IDApIHsKKwkJCQkmcW9zX2xpbmtfc3BlZWQsIDApICE9IDApIHsKIAkJdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOwogCQlkYXRhWzRdID0gLTE7CiAJfSBlbHNlIGlmICghbWFjX3NwZWVkKSB7CkBAIC02NjAsMTEgKzY0OSw5IEBACiB7CiAJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCWNoYXIgZmlsZV9uYW1lW0VUSFRPT0xfRkxBU0hfTUFYX0ZJTEVOQU1FXTsKLQl1MzIgcmVnaW9uOwogCiAJZmlsZV9uYW1lW0VUSFRPT0xfRkxBU0hfTUFYX0ZJTEVOQU1FIC0gMV0gPSAwOwogCXN0cmNweShmaWxlX25hbWUsIGVmbC0+ZGF0YSk7Ci0JcmVnaW9uID0gZWZsLT5yZWdpb247CiAKIAlyZXR1cm4gYmVfbG9hZF9mdyhhZGFwdGVyLCBmaWxlX25hbWUpOwogfQpAQCAtNzI1LDE4ICs3MTIsMTIgQEAKIAkuZ2V0X3JpbmdwYXJhbSA9IGJlX2dldF9yaW5ncGFyYW0sCiAJLmdldF9wYXVzZXBhcmFtID0gYmVfZ2V0X3BhdXNlcGFyYW0sCiAJLnNldF9wYXVzZXBhcmFtID0gYmVfc2V0X3BhdXNlcGFyYW0sCi0JLmdldF9yeF9jc3VtID0gYmVfZ2V0X3J4X2NzdW0sCi0JLnNldF9yeF9jc3VtID0gYmVfc2V0X3J4X2NzdW0sCi0JLmdldF90eF9jc3VtID0gZXRodG9vbF9vcF9nZXRfdHhfY3N1bSwKLQkuc2V0X3R4X2NzdW0gPSBldGh0b29sX29wX3NldF90eF9od19jc3VtLAotCS5nZXRfc2cgPSBldGh0b29sX29wX2dldF9zZywKLQkuc2V0X3NnID0gZXRodG9vbF9vcF9zZXRfc2csCi0JLmdldF90c28gPSBldGh0b29sX29wX2dldF90c28sCi0JLnNldF90c28gPSBldGh0b29sX29wX3NldF90c28sCiAJLmdldF9zdHJpbmdzID0gYmVfZ2V0X3N0YXRfc3RyaW5ncywKLQkucGh5c19pZCA9IGJlX3BoeXNfaWQsCisJLnNldF9waHlzX2lkID0gYmVfc2V0X3BoeXNfaWQsCiAJLmdldF9zc2V0X2NvdW50ID0gYmVfZ2V0X3NzZXRfY291bnQsCiAJLmdldF9ldGh0b29sX3N0YXRzID0gYmVfZ2V0X2V0aHRvb2xfc3RhdHMsCisJLmdldF9yZWdzX2xlbiA9IGJlX2dldF9yZWdfbGVuLAorCS5nZXRfcmVncyA9IGJlX2dldF9yZWdzLAogCS5mbGFzaF9kZXZpY2UgPSBiZV9kb19mbGFzaCwKIAkuc2VsZl90ZXN0ID0gYmVfc2VsZl90ZXN0LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2h3LmggYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9ody5oCmluZGV4IGQ0MzQ0YTAuLjUzZDY1OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2h3LmgKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfaHcuaApAQCAtMTU1LDYgKzE1NSwxMCBAQAogLyoqKioqKioqKiogU1JJT1YgVkYgUENJQ0ZHIE9GRlNFVCAqKioqKioqKi8KICNkZWZpbmUgU1JJT1ZfVkZfUENJQ0ZHX09GRlNFVAkJKDQwOTYpCiAKKy8qKioqKioqKioqIEZBVCBUQUJMRSAgKioqKioqKiovCisjZGVmaW5lIFJFVFJJRVZFX0ZBVAkwCisjZGVmaW5lIFFVRVJZX0ZBVAkxCisKIC8qIEZsYXNocm9tIHJlbGF0ZWQgZGVzY3JpcHRvcnMgKi8KICNkZWZpbmUgSU1BR0VfVFlQRV9GSVJNV0FSRQkJMTYwCiAjZGVmaW5lIElNQUdFX1RZUEVfQk9PVENPREUJCTIyNApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jCmluZGV4IDkxODdmYjQuLmE0ODVmN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMKQEAgLTE1LDYgKzE1LDcgQEAKICAqIENvc3RhIE1lc2EsIENBIDkyNjI2CiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSAiYmUuaCIKICNpbmNsdWRlICJiZV9jbWRzLmgiCiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CkBAIC00Miw2ICs0Myw3IEBACiAJeyBQQ0lfREVWSUNFKEJFX1ZFTkRPUl9JRCwgT0NfREVWSUNFX0lEMSkgfSwKIAl7IFBDSV9ERVZJQ0UoQkVfVkVORE9SX0lELCBPQ19ERVZJQ0VfSUQyKSB9LAogCXsgUENJX0RFVklDRShFTVVMRVhfVkVORE9SX0lELCBPQ19ERVZJQ0VfSUQzKX0sCisJeyBQQ0lfREVWSUNFKEVNVUxFWF9WRU5ET1JfSUQsIE9DX0RFVklDRV9JRDQpfSwKIAl7IDAgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBiZV9kZXZfaWRzKTsKQEAgLTExNiwxMSArMTE4LDYgQEAKIAkiVW5rbm93biIKIH07CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBiZV9tdWx0aV9yeHEoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JcmV0dXJuIChhZGFwdGVyLT5udW1fcnhfcXMgPiAxKTsKLX0KLQogc3RhdGljIHZvaWQgYmVfcXVldWVfZnJlZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IGJlX3F1ZXVlX2luZm8gKnEpCiB7CiAJc3RydWN0IGJlX2RtYV9tZW0gKm1lbSA9ICZxLT5kbWFfbWVtOwpAQCAtMjUwLDE0ICsyNDcsMTg1IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAorc3RhdGljIHZvaWQgcG9wdWxhdGVfYmUyX3N0YXRzKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQoreworCisJc3RydWN0IGJlX2Rydl9zdGF0cyAqZHJ2cyA9ICZhZGFwdGVyLT5kcnZfc3RhdHM7CisJc3RydWN0IGJlX3BtZW1fc3RhdHMgKnBtZW1fc3RzID0gYmVfcG1lbV9zdGF0c19mcm9tX2NtZChhZGFwdGVyKTsKKwlzdHJ1Y3QgYmVfcG9ydF9yeGZfc3RhdHNfdjAgKnBvcnRfc3RhdHMgPQorCQliZV9wb3J0X3J4Zl9zdGF0c19mcm9tX2NtZChhZGFwdGVyKTsKKwlzdHJ1Y3QgYmVfcnhmX3N0YXRzX3YwICpyeGZfc3RhdHMgPQorCQliZV9yeGZfc3RhdHNfZnJvbV9jbWQoYWRhcHRlcik7CisKKwlkcnZzLT5yeF9wYXVzZV9mcmFtZXMgPSBwb3J0X3N0YXRzLT5yeF9wYXVzZV9mcmFtZXM7CisJZHJ2cy0+cnhfY3JjX2Vycm9ycyA9IHBvcnRfc3RhdHMtPnJ4X2NyY19lcnJvcnM7CisJZHJ2cy0+cnhfY29udHJvbF9mcmFtZXMgPSBwb3J0X3N0YXRzLT5yeF9jb250cm9sX2ZyYW1lczsKKwlkcnZzLT5yeF9pbl9yYW5nZV9lcnJvcnMgPSBwb3J0X3N0YXRzLT5yeF9pbl9yYW5nZV9lcnJvcnM7CisJZHJ2cy0+cnhfZnJhbWVfdG9vX2xvbmcgPSBwb3J0X3N0YXRzLT5yeF9mcmFtZV90b29fbG9uZzsKKwlkcnZzLT5yeF9kcm9wcGVkX3J1bnQgPSBwb3J0X3N0YXRzLT5yeF9kcm9wcGVkX3J1bnQ7CisJZHJ2cy0+cnhfaXBfY2hlY2tzdW1fZXJycyA9IHBvcnRfc3RhdHMtPnJ4X2lwX2NoZWNrc3VtX2VycnM7CisJZHJ2cy0+cnhfdGNwX2NoZWNrc3VtX2VycnMgPSBwb3J0X3N0YXRzLT5yeF90Y3BfY2hlY2tzdW1fZXJyczsKKwlkcnZzLT5yeF91ZHBfY2hlY2tzdW1fZXJycyA9IHBvcnRfc3RhdHMtPnJ4X3VkcF9jaGVja3N1bV9lcnJzOworCWRydnMtPnJ4cHBfZmlmb19vdmVyZmxvd19kcm9wID0gcG9ydF9zdGF0cy0+cnhfZmlmb19vdmVyZmxvdzsKKwlkcnZzLT5yeF9kcm9wcGVkX3RjcF9sZW5ndGggPSBwb3J0X3N0YXRzLT5yeF9kcm9wcGVkX3RjcF9sZW5ndGg7CisJZHJ2cy0+cnhfZHJvcHBlZF90b29fc21hbGwgPSBwb3J0X3N0YXRzLT5yeF9kcm9wcGVkX3Rvb19zbWFsbDsKKwlkcnZzLT5yeF9kcm9wcGVkX3Rvb19zaG9ydCA9IHBvcnRfc3RhdHMtPnJ4X2Ryb3BwZWRfdG9vX3Nob3J0OworCWRydnMtPnJ4X291dF9yYW5nZV9lcnJvcnMgPSBwb3J0X3N0YXRzLT5yeF9vdXRfcmFuZ2VfZXJyb3JzOworCWRydnMtPnJ4X2lucHV0X2ZpZm9fb3ZlcmZsb3dfZHJvcCA9CisJCXBvcnRfc3RhdHMtPnJ4X2lucHV0X2ZpZm9fb3ZlcmZsb3c7CisJZHJ2cy0+cnhfZHJvcHBlZF9oZWFkZXJfdG9vX3NtYWxsID0KKwkJcG9ydF9zdGF0cy0+cnhfZHJvcHBlZF9oZWFkZXJfdG9vX3NtYWxsOworCWRydnMtPnJ4X2FkZHJlc3NfbWF0Y2hfZXJyb3JzID0KKwkJcG9ydF9zdGF0cy0+cnhfYWRkcmVzc19tYXRjaF9lcnJvcnM7CisJZHJ2cy0+cnhfYWxpZ25tZW50X3N5bWJvbF9lcnJvcnMgPQorCQlwb3J0X3N0YXRzLT5yeF9hbGlnbm1lbnRfc3ltYm9sX2Vycm9yczsKKworCWRydnMtPnR4X3BhdXNlZnJhbWVzID0gcG9ydF9zdGF0cy0+dHhfcGF1c2VmcmFtZXM7CisJZHJ2cy0+dHhfY29udHJvbGZyYW1lcyA9IHBvcnRfc3RhdHMtPnR4X2NvbnRyb2xmcmFtZXM7CisKKwlpZiAoYWRhcHRlci0+cG9ydF9udW0pCisJCWRydnMtPmphYmJlcl9ldmVudHMgPQorCQkJcnhmX3N0YXRzLT5wb3J0MV9qYWJiZXJfZXZlbnRzOworCWVsc2UKKwkJZHJ2cy0+amFiYmVyX2V2ZW50cyA9CisJCQlyeGZfc3RhdHMtPnBvcnQwX2phYmJlcl9ldmVudHM7CisJZHJ2cy0+cnhfZHJvcHNfbm9fcGJ1ZiA9IHJ4Zl9zdGF0cy0+cnhfZHJvcHNfbm9fcGJ1ZjsKKwlkcnZzLT5yeF9kcm9wc19ub190eHBiID0gcnhmX3N0YXRzLT5yeF9kcm9wc19ub190eHBiOworCWRydnMtPnJ4X2Ryb3BzX25vX2VyeF9kZXNjciA9IHJ4Zl9zdGF0cy0+cnhfZHJvcHNfbm9fZXJ4X2Rlc2NyOworCWRydnMtPnJ4X2Ryb3BzX2ludmFsaWRfcmluZyA9IHJ4Zl9zdGF0cy0+cnhfZHJvcHNfaW52YWxpZF9yaW5nOworCWRydnMtPmZvcndhcmRlZF9wYWNrZXRzID0gcnhmX3N0YXRzLT5mb3J3YXJkZWRfcGFja2V0czsKKwlkcnZzLT5yeF9kcm9wc19tdHUgPSByeGZfc3RhdHMtPnJ4X2Ryb3BzX210dTsKKwlkcnZzLT5yeF9kcm9wc19ub190cHJlX2Rlc2NyID0KKwkJcnhmX3N0YXRzLT5yeF9kcm9wc19ub190cHJlX2Rlc2NyOworCWRydnMtPnJ4X2Ryb3BzX3Rvb19tYW55X2ZyYWdzID0KKwkJcnhmX3N0YXRzLT5yeF9kcm9wc190b29fbWFueV9mcmFnczsKKwlhZGFwdGVyLT5kcnZfc3RhdHMuZXRoX3JlZF9kcm9wcyA9IHBtZW1fc3RzLT5ldGhfcmVkX2Ryb3BzOworfQorCitzdGF0aWMgdm9pZCBwb3B1bGF0ZV9iZTNfc3RhdHMoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGJlX2Rydl9zdGF0cyAqZHJ2cyA9ICZhZGFwdGVyLT5kcnZfc3RhdHM7CisJc3RydWN0IGJlX3BtZW1fc3RhdHMgKnBtZW1fc3RzID0gYmVfcG1lbV9zdGF0c19mcm9tX2NtZChhZGFwdGVyKTsKKworCXN0cnVjdCBiZV9yeGZfc3RhdHNfdjEgKnJ4Zl9zdGF0cyA9CisJCWJlX3J4Zl9zdGF0c19mcm9tX2NtZChhZGFwdGVyKTsKKwlzdHJ1Y3QgYmVfcG9ydF9yeGZfc3RhdHNfdjEgKnBvcnRfc3RhdHMgPQorCQliZV9wb3J0X3J4Zl9zdGF0c19mcm9tX2NtZChhZGFwdGVyKTsKKworCWRydnMtPnJ4X3ByaW9yaXR5X3BhdXNlX2ZyYW1lcyA9IDA7CisJZHJ2cy0+cG1lbV9maWZvX292ZXJmbG93X2Ryb3AgPSAwOworCWRydnMtPnJ4X3BhdXNlX2ZyYW1lcyA9IHBvcnRfc3RhdHMtPnJ4X3BhdXNlX2ZyYW1lczsKKwlkcnZzLT5yeF9jcmNfZXJyb3JzID0gcG9ydF9zdGF0cy0+cnhfY3JjX2Vycm9yczsKKwlkcnZzLT5yeF9jb250cm9sX2ZyYW1lcyA9IHBvcnRfc3RhdHMtPnJ4X2NvbnRyb2xfZnJhbWVzOworCWRydnMtPnJ4X2luX3JhbmdlX2Vycm9ycyA9IHBvcnRfc3RhdHMtPnJ4X2luX3JhbmdlX2Vycm9yczsKKwlkcnZzLT5yeF9mcmFtZV90b29fbG9uZyA9IHBvcnRfc3RhdHMtPnJ4X2ZyYW1lX3Rvb19sb25nOworCWRydnMtPnJ4X2Ryb3BwZWRfcnVudCA9IHBvcnRfc3RhdHMtPnJ4X2Ryb3BwZWRfcnVudDsKKwlkcnZzLT5yeF9pcF9jaGVja3N1bV9lcnJzID0gcG9ydF9zdGF0cy0+cnhfaXBfY2hlY2tzdW1fZXJyczsKKwlkcnZzLT5yeF90Y3BfY2hlY2tzdW1fZXJycyA9IHBvcnRfc3RhdHMtPnJ4X3RjcF9jaGVja3N1bV9lcnJzOworCWRydnMtPnJ4X3VkcF9jaGVja3N1bV9lcnJzID0gcG9ydF9zdGF0cy0+cnhfdWRwX2NoZWNrc3VtX2VycnM7CisJZHJ2cy0+cnhfZHJvcHBlZF90Y3BfbGVuZ3RoID0gcG9ydF9zdGF0cy0+cnhfZHJvcHBlZF90Y3BfbGVuZ3RoOworCWRydnMtPnJ4X2Ryb3BwZWRfdG9vX3NtYWxsID0gcG9ydF9zdGF0cy0+cnhfZHJvcHBlZF90b29fc21hbGw7CisJZHJ2cy0+cnhfZHJvcHBlZF90b29fc2hvcnQgPSBwb3J0X3N0YXRzLT5yeF9kcm9wcGVkX3Rvb19zaG9ydDsKKwlkcnZzLT5yeF9vdXRfcmFuZ2VfZXJyb3JzID0gcG9ydF9zdGF0cy0+cnhfb3V0X3JhbmdlX2Vycm9yczsKKwlkcnZzLT5yeF9kcm9wcGVkX2hlYWRlcl90b29fc21hbGwgPQorCQlwb3J0X3N0YXRzLT5yeF9kcm9wcGVkX2hlYWRlcl90b29fc21hbGw7CisJZHJ2cy0+cnhfaW5wdXRfZmlmb19vdmVyZmxvd19kcm9wID0KKwkJcG9ydF9zdGF0cy0+cnhfaW5wdXRfZmlmb19vdmVyZmxvd19kcm9wOworCWRydnMtPnJ4X2FkZHJlc3NfbWF0Y2hfZXJyb3JzID0KKwkJcG9ydF9zdGF0cy0+cnhfYWRkcmVzc19tYXRjaF9lcnJvcnM7CisJZHJ2cy0+cnhfYWxpZ25tZW50X3N5bWJvbF9lcnJvcnMgPQorCQlwb3J0X3N0YXRzLT5yeF9hbGlnbm1lbnRfc3ltYm9sX2Vycm9yczsKKwlkcnZzLT5yeHBwX2ZpZm9fb3ZlcmZsb3dfZHJvcCA9CisJCXBvcnRfc3RhdHMtPnJ4cHBfZmlmb19vdmVyZmxvd19kcm9wOworCWRydnMtPnR4X3BhdXNlZnJhbWVzID0gcG9ydF9zdGF0cy0+dHhfcGF1c2VmcmFtZXM7CisJZHJ2cy0+dHhfY29udHJvbGZyYW1lcyA9IHBvcnRfc3RhdHMtPnR4X2NvbnRyb2xmcmFtZXM7CisJZHJ2cy0+amFiYmVyX2V2ZW50cyA9IHBvcnRfc3RhdHMtPmphYmJlcl9ldmVudHM7CisJZHJ2cy0+cnhfZHJvcHNfbm9fcGJ1ZiA9IHJ4Zl9zdGF0cy0+cnhfZHJvcHNfbm9fcGJ1ZjsKKwlkcnZzLT5yeF9kcm9wc19ub190eHBiID0gcnhmX3N0YXRzLT5yeF9kcm9wc19ub190eHBiOworCWRydnMtPnJ4X2Ryb3BzX25vX2VyeF9kZXNjciA9IHJ4Zl9zdGF0cy0+cnhfZHJvcHNfbm9fZXJ4X2Rlc2NyOworCWRydnMtPnJ4X2Ryb3BzX2ludmFsaWRfcmluZyA9IHJ4Zl9zdGF0cy0+cnhfZHJvcHNfaW52YWxpZF9yaW5nOworCWRydnMtPmZvcndhcmRlZF9wYWNrZXRzID0gcnhmX3N0YXRzLT5mb3J3YXJkZWRfcGFja2V0czsKKwlkcnZzLT5yeF9kcm9wc19tdHUgPSByeGZfc3RhdHMtPnJ4X2Ryb3BzX210dTsKKwlkcnZzLT5yeF9kcm9wc19ub190cHJlX2Rlc2NyID0KKwkJcnhmX3N0YXRzLT5yeF9kcm9wc19ub190cHJlX2Rlc2NyOworCWRydnMtPnJ4X2Ryb3BzX3Rvb19tYW55X2ZyYWdzID0KKwkJcnhmX3N0YXRzLT5yeF9kcm9wc190b29fbWFueV9mcmFnczsKKwlhZGFwdGVyLT5kcnZfc3RhdHMuZXRoX3JlZF9kcm9wcyA9IHBtZW1fc3RzLT5ldGhfcmVkX2Ryb3BzOworfQorCitzdGF0aWMgdm9pZCBwb3B1bGF0ZV9sYW5jZXJfc3RhdHMoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisKKwlzdHJ1Y3QgYmVfZHJ2X3N0YXRzICpkcnZzID0gJmFkYXB0ZXItPmRydl9zdGF0czsKKwlzdHJ1Y3QgbGFuY2VyX2NtZF9wcG9ydF9zdGF0cyAqcHBvcnRfc3RhdHMgPSBwcG9ydF9zdGF0c19mcm9tX2NtZAorCQkJCQkJKGFkYXB0ZXIpOworCWRydnMtPnJ4X3ByaW9yaXR5X3BhdXNlX2ZyYW1lcyA9IDA7CisJZHJ2cy0+cG1lbV9maWZvX292ZXJmbG93X2Ryb3AgPSAwOworCWRydnMtPnJ4X3BhdXNlX2ZyYW1lcyA9CisJCW1ha2VfNjRiaXRfdmFsKHBwb3J0X3N0YXRzLT5yeF9wYXVzZV9mcmFtZXNfbG8sCisJCQkJIHBwb3J0X3N0YXRzLT5yeF9wYXVzZV9mcmFtZXNfaGkpOworCWRydnMtPnJ4X2NyY19lcnJvcnMgPSBtYWtlXzY0Yml0X3ZhbChwcG9ydF9zdGF0cy0+cnhfY3JjX2Vycm9yc19oaSwKKwkJCQkJCXBwb3J0X3N0YXRzLT5yeF9jcmNfZXJyb3JzX2xvKTsKKwlkcnZzLT5yeF9jb250cm9sX2ZyYW1lcyA9CisJCQltYWtlXzY0Yml0X3ZhbChwcG9ydF9zdGF0cy0+cnhfY29udHJvbF9mcmFtZXNfaGksCisJCQlwcG9ydF9zdGF0cy0+cnhfY29udHJvbF9mcmFtZXNfbG8pOworCWRydnMtPnJ4X2luX3JhbmdlX2Vycm9ycyA9IHBwb3J0X3N0YXRzLT5yeF9pbl9yYW5nZV9lcnJvcnM7CisJZHJ2cy0+cnhfZnJhbWVfdG9vX2xvbmcgPQorCQltYWtlXzY0Yml0X3ZhbChwcG9ydF9zdGF0cy0+cnhfaW50ZXJuYWxfbWFjX2Vycm9yc19oaSwKKwkJCQkJcHBvcnRfc3RhdHMtPnJ4X2ZyYW1lc190b29fbG9uZ19sbyk7CisJZHJ2cy0+cnhfZHJvcHBlZF9ydW50ID0gcHBvcnRfc3RhdHMtPnJ4X2Ryb3BwZWRfcnVudDsKKwlkcnZzLT5yeF9pcF9jaGVja3N1bV9lcnJzID0gcHBvcnRfc3RhdHMtPnJ4X2lwX2NoZWNrc3VtX2Vycm9yczsKKwlkcnZzLT5yeF90Y3BfY2hlY2tzdW1fZXJycyA9IHBwb3J0X3N0YXRzLT5yeF90Y3BfY2hlY2tzdW1fZXJyb3JzOworCWRydnMtPnJ4X3VkcF9jaGVja3N1bV9lcnJzID0gcHBvcnRfc3RhdHMtPnJ4X3VkcF9jaGVja3N1bV9lcnJvcnM7CisJZHJ2cy0+cnhfZHJvcHBlZF90Y3BfbGVuZ3RoID0KKwkJCQlwcG9ydF9zdGF0cy0+cnhfZHJvcHBlZF9pbnZhbGlkX3RjcF9sZW5ndGg7CisJZHJ2cy0+cnhfZHJvcHBlZF90b29fc21hbGwgPSBwcG9ydF9zdGF0cy0+cnhfZHJvcHBlZF90b29fc21hbGw7CisJZHJ2cy0+cnhfZHJvcHBlZF90b29fc2hvcnQgPSBwcG9ydF9zdGF0cy0+cnhfZHJvcHBlZF90b29fc2hvcnQ7CisJZHJ2cy0+cnhfb3V0X3JhbmdlX2Vycm9ycyA9IHBwb3J0X3N0YXRzLT5yeF9vdXRfb2ZfcmFuZ2VfZXJyb3JzOworCWRydnMtPnJ4X2Ryb3BwZWRfaGVhZGVyX3Rvb19zbWFsbCA9CisJCQkJcHBvcnRfc3RhdHMtPnJ4X2Ryb3BwZWRfaGVhZGVyX3Rvb19zbWFsbDsKKwlkcnZzLT5yeF9pbnB1dF9maWZvX292ZXJmbG93X2Ryb3AgPSBwcG9ydF9zdGF0cy0+cnhfZmlmb19vdmVyZmxvdzsKKwlkcnZzLT5yeF9hZGRyZXNzX21hdGNoX2Vycm9ycyA9IHBwb3J0X3N0YXRzLT5yeF9hZGRyZXNzX21hdGNoX2Vycm9yczsKKwlkcnZzLT5yeF9hbGlnbm1lbnRfc3ltYm9sX2Vycm9ycyA9CisJCW1ha2VfNjRiaXRfdmFsKHBwb3J0X3N0YXRzLT5yeF9zeW1ib2xfZXJyb3JzX2hpLAorCQkJCXBwb3J0X3N0YXRzLT5yeF9zeW1ib2xfZXJyb3JzX2xvKTsKKwlkcnZzLT5yeHBwX2ZpZm9fb3ZlcmZsb3dfZHJvcCA9IHBwb3J0X3N0YXRzLT5yeF9maWZvX292ZXJmbG93OworCWRydnMtPnR4X3BhdXNlZnJhbWVzID0gbWFrZV82NGJpdF92YWwocHBvcnRfc3RhdHMtPnR4X3BhdXNlX2ZyYW1lc19oaSwKKwkJCQkJcHBvcnRfc3RhdHMtPnR4X3BhdXNlX2ZyYW1lc19sbyk7CisJZHJ2cy0+dHhfY29udHJvbGZyYW1lcyA9CisJCW1ha2VfNjRiaXRfdmFsKHBwb3J0X3N0YXRzLT50eF9jb250cm9sX2ZyYW1lc19oaSwKKwkJCQlwcG9ydF9zdGF0cy0+dHhfY29udHJvbF9mcmFtZXNfbG8pOworCWRydnMtPmphYmJlcl9ldmVudHMgPSBwcG9ydF9zdGF0cy0+cnhfamFiYmVyczsKKwlkcnZzLT5yeF9kcm9wc19ub19wYnVmID0gMDsKKwlkcnZzLT5yeF9kcm9wc19ub190eHBiID0gMDsKKwlkcnZzLT5yeF9kcm9wc19ub19lcnhfZGVzY3IgPSAwOworCWRydnMtPnJ4X2Ryb3BzX2ludmFsaWRfcmluZyA9IHBwb3J0X3N0YXRzLT5yeF9kcm9wc19pbnZhbGlkX3F1ZXVlOworCWRydnMtPmZvcndhcmRlZF9wYWNrZXRzID0gbWFrZV82NGJpdF92YWwocHBvcnRfc3RhdHMtPm51bV9mb3J3YXJkc19oaSwKKwkJCQkJCXBwb3J0X3N0YXRzLT5udW1fZm9yd2FyZHNfbG8pOworCWRydnMtPnJ4X2Ryb3BzX210dSA9IG1ha2VfNjRiaXRfdmFsKHBwb3J0X3N0YXRzLT5yeF9kcm9wc19tdHVfaGksCisJCQkJCQlwcG9ydF9zdGF0cy0+cnhfZHJvcHNfbXR1X2xvKTsKKwlkcnZzLT5yeF9kcm9wc19ub190cHJlX2Rlc2NyID0gMDsKKwlkcnZzLT5yeF9kcm9wc190b29fbWFueV9mcmFncyA9CisJCW1ha2VfNjRiaXRfdmFsKHBwb3J0X3N0YXRzLT5yeF9kcm9wc190b29fbWFueV9mcmFnc19oaSwKKwkJCQlwcG9ydF9zdGF0cy0+cnhfZHJvcHNfdG9vX21hbnlfZnJhZ3NfbG8pOworfQorCit2b2lkIGJlX3BhcnNlX3N0YXRzKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQoreworCWlmIChhZGFwdGVyLT5nZW5lcmF0aW9uID09IEJFX0dFTjMpIHsKKwkJaWYgKGxhbmNlcl9jaGlwKGFkYXB0ZXIpKQorCQkJcG9wdWxhdGVfbGFuY2VyX3N0YXRzKGFkYXB0ZXIpOworCQkgZWxzZQorCQkJcG9wdWxhdGVfYmUzX3N0YXRzKGFkYXB0ZXIpOworCX0gZWxzZSB7CisJCXBvcHVsYXRlX2JlMl9zdGF0cyhhZGFwdGVyKTsKKwl9Cit9CisKIHZvaWQgbmV0ZGV2X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzdHJ1Y3QgYmVfaHdfc3RhdHMgKmh3X3N0YXRzID0gaHdfc3RhdHNfZnJvbV9jbWQoYWRhcHRlci0+c3RhdHNfY21kLnZhKTsKLQlzdHJ1Y3QgYmVfcnhmX3N0YXRzICpyeGZfc3RhdHMgPSAmaHdfc3RhdHMtPnJ4ZjsKLQlzdHJ1Y3QgYmVfcG9ydF9yeGZfc3RhdHMgKnBvcnRfc3RhdHMgPQotCQkJJnJ4Zl9zdGF0cy0+cG9ydFthZGFwdGVyLT5wb3J0X251bV07CisJc3RydWN0IGJlX2Rydl9zdGF0cyAqZHJ2cyA9ICZhZGFwdGVyLT5kcnZfc3RhdHM7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmRldl9zdGF0cyA9ICZhZGFwdGVyLT5uZXRkZXYtPnN0YXRzOwotCXN0cnVjdCBiZV9lcnhfc3RhdHMgKmVyeF9zdGF0cyA9ICZod19zdGF0cy0+ZXJ4OwogCXN0cnVjdCBiZV9yeF9vYmogKnJ4bzsKIAlpbnQgaTsKIApAQCAtMjY3LDQzICs0MzUsNTQgQEAKIAkJZGV2X3N0YXRzLT5yeF9ieXRlcyArPSByeF9zdGF0cyhyeG8pLT5yeF9ieXRlczsKIAkJZGV2X3N0YXRzLT5tdWx0aWNhc3QgKz0gcnhfc3RhdHMocnhvKS0+cnhfbWNhc3RfcGt0czsKIAkJLyogIG5vIHNwYWNlIGluIGxpbnV4IGJ1ZmZlcnM6IGJlc3QgcG9zc2libGUgYXBwcm94aW1hdGlvbiAqLwotCQlkZXZfc3RhdHMtPnJ4X2Ryb3BwZWQgKz0KLQkJCWVyeF9zdGF0cy0+cnhfZHJvcHNfbm9fZnJhZ21lbnRzW3J4by0+cS5pZF07CisJCWlmIChhZGFwdGVyLT5nZW5lcmF0aW9uID09IEJFX0dFTjMpIHsKKwkJCWlmICghKGxhbmNlcl9jaGlwKGFkYXB0ZXIpKSkgeworCQkJCXN0cnVjdCBiZV9lcnhfc3RhdHNfdjEgKmVyeF9zdGF0cyA9CisJCQkJCWJlX2VyeF9zdGF0c19mcm9tX2NtZChhZGFwdGVyKTsKKwkJCQlkZXZfc3RhdHMtPnJ4X2Ryb3BwZWQgKz0KKwkJCQllcnhfc3RhdHMtPnJ4X2Ryb3BzX25vX2ZyYWdtZW50c1tyeG8tPnEuaWRdOworCQkJfQorCQl9IGVsc2UgeworCQkJc3RydWN0IGJlX2VyeF9zdGF0c192MCAqZXJ4X3N0YXRzID0KKwkJCQkJYmVfZXJ4X3N0YXRzX2Zyb21fY21kKGFkYXB0ZXIpOworCQkJZGV2X3N0YXRzLT5yeF9kcm9wcGVkICs9CisJCQkJZXJ4X3N0YXRzLT5yeF9kcm9wc19ub19mcmFnbWVudHNbcnhvLT5xLmlkXTsKKwkJfQogCX0KIAogCWRldl9zdGF0cy0+dHhfcGFja2V0cyA9IHR4X3N0YXRzKGFkYXB0ZXIpLT5iZV90eF9wa3RzOwogCWRldl9zdGF0cy0+dHhfYnl0ZXMgPSB0eF9zdGF0cyhhZGFwdGVyKS0+YmVfdHhfYnl0ZXM7CiAKIAkvKiBiYWQgcGt0cyByZWNlaXZlZCAqLwotCWRldl9zdGF0cy0+cnhfZXJyb3JzID0gcG9ydF9zdGF0cy0+cnhfY3JjX2Vycm9ycyArCi0JCXBvcnRfc3RhdHMtPnJ4X2FsaWdubWVudF9zeW1ib2xfZXJyb3JzICsKLQkJcG9ydF9zdGF0cy0+cnhfaW5fcmFuZ2VfZXJyb3JzICsKLQkJcG9ydF9zdGF0cy0+cnhfb3V0X3JhbmdlX2Vycm9ycyArCi0JCXBvcnRfc3RhdHMtPnJ4X2ZyYW1lX3Rvb19sb25nICsKLQkJcG9ydF9zdGF0cy0+cnhfZHJvcHBlZF90b29fc21hbGwgKwotCQlwb3J0X3N0YXRzLT5yeF9kcm9wcGVkX3Rvb19zaG9ydCArCi0JCXBvcnRfc3RhdHMtPnJ4X2Ryb3BwZWRfaGVhZGVyX3Rvb19zbWFsbCArCi0JCXBvcnRfc3RhdHMtPnJ4X2Ryb3BwZWRfdGNwX2xlbmd0aCArCi0JCXBvcnRfc3RhdHMtPnJ4X2Ryb3BwZWRfcnVudCArCi0JCXBvcnRfc3RhdHMtPnJ4X3RjcF9jaGVja3N1bV9lcnJzICsKLQkJcG9ydF9zdGF0cy0+cnhfaXBfY2hlY2tzdW1fZXJycyArCi0JCXBvcnRfc3RhdHMtPnJ4X3VkcF9jaGVja3N1bV9lcnJzOworCWRldl9zdGF0cy0+cnhfZXJyb3JzID0gZHJ2cy0+cnhfY3JjX2Vycm9ycyArCisJCWRydnMtPnJ4X2FsaWdubWVudF9zeW1ib2xfZXJyb3JzICsKKwkJZHJ2cy0+cnhfaW5fcmFuZ2VfZXJyb3JzICsKKwkJZHJ2cy0+cnhfb3V0X3JhbmdlX2Vycm9ycyArCisJCWRydnMtPnJ4X2ZyYW1lX3Rvb19sb25nICsKKwkJZHJ2cy0+cnhfZHJvcHBlZF90b29fc21hbGwgKworCQlkcnZzLT5yeF9kcm9wcGVkX3Rvb19zaG9ydCArCisJCWRydnMtPnJ4X2Ryb3BwZWRfaGVhZGVyX3Rvb19zbWFsbCArCisJCWRydnMtPnJ4X2Ryb3BwZWRfdGNwX2xlbmd0aCArCisJCWRydnMtPnJ4X2Ryb3BwZWRfcnVudCArCisJCWRydnMtPnJ4X3RjcF9jaGVja3N1bV9lcnJzICsKKwkJZHJ2cy0+cnhfaXBfY2hlY2tzdW1fZXJycyArCisJCWRydnMtPnJ4X3VkcF9jaGVja3N1bV9lcnJzOwogCiAJLyogZGV0YWlsZWQgcnggZXJyb3JzICovCi0JZGV2X3N0YXRzLT5yeF9sZW5ndGhfZXJyb3JzID0gcG9ydF9zdGF0cy0+cnhfaW5fcmFuZ2VfZXJyb3JzICsKLQkJcG9ydF9zdGF0cy0+cnhfb3V0X3JhbmdlX2Vycm9ycyArCi0JCXBvcnRfc3RhdHMtPnJ4X2ZyYW1lX3Rvb19sb25nOworCWRldl9zdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycyA9IGRydnMtPnJ4X2luX3JhbmdlX2Vycm9ycyArCisJCWRydnMtPnJ4X291dF9yYW5nZV9lcnJvcnMgKworCQlkcnZzLT5yeF9mcmFtZV90b29fbG9uZzsKIAotCWRldl9zdGF0cy0+cnhfY3JjX2Vycm9ycyA9IHBvcnRfc3RhdHMtPnJ4X2NyY19lcnJvcnM7CisJZGV2X3N0YXRzLT5yeF9jcmNfZXJyb3JzID0gZHJ2cy0+cnhfY3JjX2Vycm9yczsKIAogCS8qIGZyYW1lIGFsaWdubWVudCBlcnJvcnMgKi8KLQlkZXZfc3RhdHMtPnJ4X2ZyYW1lX2Vycm9ycyA9IHBvcnRfc3RhdHMtPnJ4X2FsaWdubWVudF9zeW1ib2xfZXJyb3JzOworCWRldl9zdGF0cy0+cnhfZnJhbWVfZXJyb3JzID0gZHJ2cy0+cnhfYWxpZ25tZW50X3N5bWJvbF9lcnJvcnM7CiAKIAkvKiByZWNlaXZlciBmaWZvIG92ZXJydW4gKi8KIAkvKiBkcm9wc19ub19wYnVmIGlzIG5vIHBlciBpL2YsIGl0J3MgcGVyIEJFIGNhcmQgKi8KLQlkZXZfc3RhdHMtPnJ4X2ZpZm9fZXJyb3JzID0gcG9ydF9zdGF0cy0+cnhfZmlmb19vdmVyZmxvdyArCi0JCQkJCXBvcnRfc3RhdHMtPnJ4X2lucHV0X2ZpZm9fb3ZlcmZsb3cgKwotCQkJCQlyeGZfc3RhdHMtPnJ4X2Ryb3BzX25vX3BidWY7CisJZGV2X3N0YXRzLT5yeF9maWZvX2Vycm9ycyA9IGRydnMtPnJ4cHBfZmlmb19vdmVyZmxvd19kcm9wICsKKwkJCQlkcnZzLT5yeF9pbnB1dF9maWZvX292ZXJmbG93X2Ryb3AgKworCQkJCWRydnMtPnJ4X2Ryb3BzX25vX3BidWY7CiB9CiAKIHZvaWQgYmVfbGlua19zdGF0dXNfdXBkYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCBib29sIGxpbmtfdXApCkBAIC03MDMsNyArODgyLDcgQEAKIAlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKIAlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7Ci0JCWJlX2NtZF9wcm9taXNjdW91c19jb25maWcoYWRhcHRlciwgYWRhcHRlci0+cG9ydF9udW0sIDEpOworCQliZV9jbWRfcHJvbWlzY3VvdXNfY29uZmlnKGFkYXB0ZXIsIHRydWUpOwogCQlhZGFwdGVyLT5wcm9taXNjdW91cyA9IHRydWU7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC03MTEsNyArODkwLDcgQEAKIAkvKiBCRSB3YXMgcHJldmlvdXNseSBpbiBwcm9taXNjdW91cyBtb2RlOyBkaXNhYmxlIGl0ICovCiAJaWYgKGFkYXB0ZXItPnByb21pc2N1b3VzKSB7CiAJCWFkYXB0ZXItPnByb21pc2N1b3VzID0gZmFsc2U7Ci0JCWJlX2NtZF9wcm9taXNjdW91c19jb25maWcoYWRhcHRlciwgYWRhcHRlci0+cG9ydF9udW0sIDApOworCQliZV9jbWRfcHJvbWlzY3VvdXNfY29uZmlnKGFkYXB0ZXIsIGZhbHNlKTsKIAl9CiAKIAkvKiBFbmFibGUgbXVsdGljYXN0IHByb21pc2MgaWYgbnVtIGNvbmZpZ3VyZWQgZXhjZWVkcyB3aGF0IHdlIHN1cHBvcnQgKi8KQEAgLTk5Myw5ICsxMTcyLDEwIEBACiAJCQlzdHJ1Y3QgYmVfcnhfb2JqICpyeG8sCiAJCQlzdHJ1Y3QgYmVfcnhfY29tcGxfaW5mbyAqcnhjcCkKIHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCXN0cnVjdCBza19idWZmICpza2I7CiAKLQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiX2lwX2FsaWduKGFkYXB0ZXItPm5ldGRldiwgQkVfSERSX0xFTik7CisJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYl9pcF9hbGlnbihuZXRkZXYsIEJFX0hEUl9MRU4pOwogCWlmICh1bmxpa2VseSghc2tiKSkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJZGV2X3dhcm4oJmFkYXB0ZXItPnBkZXYtPmRldiwgInNrYiBhbGxvYyBmYWlsZWRcbiIpOwpAQCAtMTAwNSwxMyArMTE4NSwxNiBAQAogCiAJc2tiX2ZpbGxfcnhfZGF0YShhZGFwdGVyLCByeG8sIHNrYiwgcnhjcCk7CiAKLQlpZiAobGlrZWx5KGFkYXB0ZXItPnJ4X2NzdW0gJiYgY3N1bV9wYXNzZWQocnhjcCkpKQorCWlmIChsaWtlbHkoKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkgJiYgY3N1bV9wYXNzZWQocnhjcCkpKQogCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCWVsc2UKIAkJc2tiX2NoZWNrc3VtX25vbmVfYXNzZXJ0KHNrYik7CiAKIAlza2ItPnRydWVzaXplID0gc2tiLT5sZW4gKyBzaXplb2Yoc3RydWN0IHNrX2J1ZmYpOwotCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGFkYXB0ZXItPm5ldGRldik7CisJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmV0ZGV2KTsKKwlpZiAoYWRhcHRlci0+bmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhIQVNIKQorCQlza2ItPnJ4aGFzaCA9IHJ4Y3AtPnJzc19oYXNoOworCiAKIAlpZiAodW5saWtlbHkocnhjcC0+dmxhbmYpKSB7CiAJCWlmICghYWRhcHRlci0+dmxhbl9ncnAgfHwgYWRhcHRlci0+dmxhbnNfYWRkZWQgPT0gMCkgewpAQCAtMTA3Myw2ICsxMjU2LDggQEAKIAlza2ItPmRhdGFfbGVuID0gcnhjcC0+cGt0X3NpemU7CiAJc2tiLT50cnVlc2l6ZSArPSByeGNwLT5wa3Rfc2l6ZTsKIAlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCWlmIChhZGFwdGVyLT5uZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWEhBU0gpCisJCXNrYi0+cnhoYXNoID0gcnhjcC0+cnNzX2hhc2g7CiAKIAlpZiAobGlrZWx5KCFyeGNwLT52bGFuZikpCiAJCW5hcGlfZ3JvX2ZyYWdzKCZlcV9vYmotPm5hcGkpOwpAQCAtMTEwMyw5ICsxMjg4LDE0IEBACiAJCUFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsX3YxLCBudW1mcmFncywgY29tcGwpOwogCXJ4Y3AtPnBrdF90eXBlID0KIAkJQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGxfdjEsIGNhc3RfZW5jLCBjb21wbCk7Ci0JcnhjcC0+dnRtID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGxfdjEsIHZ0bSwgY29tcGwpOwotCXJ4Y3AtPnZsYW5fdGFnID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGxfdjEsIHZsYW5fdGFnLAotCQkJCQljb21wbCk7CisJcnhjcC0+cnNzX2hhc2ggPQorCQlBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbF92MSwgcnNzaGFzaCwgcnhjcCk7CisJaWYgKHJ4Y3AtPnZsYW5mKSB7CisJCXJ4Y3AtPnZ0bSA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsX3YxLCB2dG0sCisJCQkJCSAgY29tcGwpOworCQlyeGNwLT52bGFuX3RhZyA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsX3YxLCB2bGFuX3RhZywKKwkJCQkJICAgICAgIGNvbXBsKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGJlX3BhcnNlX3J4X2NvbXBsX3YwKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLApAQCAtMTEzMCw5ICsxMzIwLDE0IEBACiAJCUFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsX3YwLCBudW1mcmFncywgY29tcGwpOwogCXJ4Y3AtPnBrdF90eXBlID0KIAkJQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGxfdjAsIGNhc3RfZW5jLCBjb21wbCk7Ci0JcnhjcC0+dnRtID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGxfdjAsIHZ0bSwgY29tcGwpOwotCXJ4Y3AtPnZsYW5fdGFnID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGxfdjAsIHZsYW5fdGFnLAotCQkJCQljb21wbCk7CisJcnhjcC0+cnNzX2hhc2ggPQorCQlBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbF92MCwgcnNzaGFzaCwgcnhjcCk7CisJaWYgKHJ4Y3AtPnZsYW5mKSB7CisJCXJ4Y3AtPnZ0bSA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsX3YwLCB2dG0sCisJCQkJCSAgY29tcGwpOworCQlyeGNwLT52bGFuX3RhZyA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsX3YwLCB2bGFuX3RhZywKKwkJCQkJICAgICAgIGNvbXBsKTsKKwl9CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYmVfcnhfY29tcGxfaW5mbyAqYmVfcnhfY29tcGxfZ2V0KHN0cnVjdCBiZV9yeF9vYmogKnJ4bykKQEAgLTExNTQsMTcgKzEzNDksMjAgQEAKIAllbHNlCiAJCWJlX3BhcnNlX3J4X2NvbXBsX3YwKGFkYXB0ZXIsIGNvbXBsLCByeGNwKTsKIAotCS8qIHZsYW5mIGNvdWxkIGJlIHdyb25nbHkgc2V0IGluIHNvbWUgY2FyZHMuIGlnbm9yZSBpZiB2dG0gaXMgbm90IHNldCAqLwotCWlmICgoYWRhcHRlci0+ZnVuY3Rpb25fbW9kZSAmIDB4NDAwKSAmJiAhcnhjcC0+dnRtKQotCQlyeGNwLT52bGFuZiA9IDA7CisJaWYgKHJ4Y3AtPnZsYW5mKSB7CisJCS8qIHZsYW5mIGNvdWxkIGJlIHdyb25nbHkgc2V0IGluIHNvbWUgY2FyZHMuCisJCSAqIGlnbm9yZSBpZiB2dG0gaXMgbm90IHNldCAqLworCQlpZiAoKGFkYXB0ZXItPmZ1bmN0aW9uX21vZGUgJiAweDQwMCkgJiYgIXJ4Y3AtPnZ0bSkKKwkJCXJ4Y3AtPnZsYW5mID0gMDsKIAotCWlmICghbGFuY2VyX2NoaXAoYWRhcHRlcikpCi0JCXJ4Y3AtPnZsYW5fdGFnID0gc3dhYjE2KHJ4Y3AtPnZsYW5fdGFnKTsKKwkJaWYgKCFsYW5jZXJfY2hpcChhZGFwdGVyKSkKKwkJCXJ4Y3AtPnZsYW5fdGFnID0gc3dhYjE2KHJ4Y3AtPnZsYW5fdGFnKTsKIAotCWlmICgoKGFkYXB0ZXItPnB2aWQgJiBWTEFOX1ZJRF9NQVNLKSA9PQotCQkocnhjcC0+dmxhbl90YWcgJiBWTEFOX1ZJRF9NQVNLKSkgJiYKLQkJIWFkYXB0ZXItPnZsYW5fdGFnW3J4Y3AtPnZsYW5fdGFnXSkKLQkJcnhjcC0+dmxhbmYgPSAwOworCQlpZiAoKChhZGFwdGVyLT5wdmlkICYgVkxBTl9WSURfTUFTSykgPT0KKwkJICAgICAocnhjcC0+dmxhbl90YWcgJiBWTEFOX1ZJRF9NQVNLKSkgJiYKKwkJICAgICFhZGFwdGVyLT52bGFuX3RhZ1tyeGNwLT52bGFuX3RhZ10pCisJCQlyeGNwLT52bGFuZiA9IDA7CisJfQogCiAJLyogQXMgdGhlIGNvbXBsIGhhcyBiZWVuIHBhcnNlZCwgcmVzZXQgaXQ7IHdlIHdvbnQgdG91Y2ggaXQgYWdhaW4gKi8KIAljb21wbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsX3YxLCB2YWxpZCkgLyAzMl0gPSAwOwpAQCAtMTI2MSw3ICsxNDU5LDcgQEAKIAlyZXR1cm4gdHhjcDsKIH0KIAotc3RhdGljIHZvaWQgYmVfdHhfY29tcGxfcHJvY2VzcyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTE2IGxhc3RfaW5kZXgpCitzdGF0aWMgdTE2IGJlX3R4X2NvbXBsX3Byb2Nlc3Moc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBsYXN0X2luZGV4KQogewogCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICp0eHEgPSAmYWRhcHRlci0+dHhfb2JqLnE7CiAJc3RydWN0IGJlX2V0aF93cmIgKndyYjsKQEAgLTEyODgsOSArMTQ4Niw4IEBACiAJCXF1ZXVlX3RhaWxfaW5jKHR4cSk7CiAJfSB3aGlsZSAoY3VyX2luZGV4ICE9IGxhc3RfaW5kZXgpOwogCi0JYXRvbWljX3N1YihudW1fd3JicywgJnR4cS0+dXNlZCk7Ci0KIAlrZnJlZV9za2Ioc2VudF9za2IpOworCXJldHVybiBudW1fd3JiczsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgYmVfZXFfZW50cnkgKmV2ZW50X2dldChzdHJ1Y3QgYmVfZXFfb2JqICplcV9vYmopCkBAIC0xMzczLDcgKzE1NzAsNyBAQAogCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICp0eF9jcSA9ICZhZGFwdGVyLT50eF9vYmouY3E7CiAJc3RydWN0IGJlX3F1ZXVlX2luZm8gKnR4cSA9ICZhZGFwdGVyLT50eF9vYmoucTsKIAlzdHJ1Y3QgYmVfZXRoX3R4X2NvbXBsICp0eGNwOwotCXUxNiBlbmRfaWR4LCBjbXBsID0gMCwgdGltZW8gPSAwOworCXUxNiBlbmRfaWR4LCBjbXBsID0gMCwgdGltZW8gPSAwLCBudW1fd3JicyA9IDA7CiAJc3RydWN0IHNrX2J1ZmYgKipzZW50X3NrYnMgPSBhZGFwdGVyLT50eF9vYmouc2VudF9za2JfbGlzdDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2VudF9za2I7CiAJYm9vbCBkdW1teV93cmI7CkBAIC0xMzgzLDEyICsxNTgwLDE0IEBACiAJCXdoaWxlICgodHhjcCA9IGJlX3R4X2NvbXBsX2dldCh0eF9jcSkpKSB7CiAJCQllbmRfaWR4ID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfdHhfY29tcGwsCiAJCQkJCXdyYl9pbmRleCwgdHhjcCk7Ci0JCQliZV90eF9jb21wbF9wcm9jZXNzKGFkYXB0ZXIsIGVuZF9pZHgpOworCQkJbnVtX3dyYnMgKz0gYmVfdHhfY29tcGxfcHJvY2VzcyhhZGFwdGVyLCBlbmRfaWR4KTsKIAkJCWNtcGwrKzsKIAkJfQogCQlpZiAoY21wbCkgewogCQkJYmVfY3Ffbm90aWZ5KGFkYXB0ZXIsIHR4X2NxLT5pZCwgZmFsc2UsIGNtcGwpOworCQkJYXRvbWljX3N1YihudW1fd3JicywgJnR4cS0+dXNlZCk7CiAJCQljbXBsID0gMDsKKwkJCW51bV93cmJzID0gMDsKIAkJfQogCiAJCWlmIChhdG9taWNfcmVhZCgmdHhxLT51c2VkKSA9PSAwIHx8ICsrdGltZW8gPiAyMDApCkBAIC0xNDA4LDcgKzE2MDcsOCBAQAogCQlpbmRleF9hZHYoJmVuZF9pZHgsCiAJCQl3cmJfY250X2Zvcl9za2IoYWRhcHRlciwgc2VudF9za2IsICZkdW1teV93cmIpIC0gMSwKIAkJCXR4cS0+bGVuKTsKLQkJYmVfdHhfY29tcGxfcHJvY2VzcyhhZGFwdGVyLCBlbmRfaWR4KTsKKwkJbnVtX3dyYnMgPSBiZV90eF9jb21wbF9wcm9jZXNzKGFkYXB0ZXIsIGVuZF9pZHgpOworCQlhdG9taWNfc3ViKG51bV93cmJzLCAmdHhxLT51c2VkKTsKIAl9CiB9CiAKQEAgLTE1NzMsMTIgKzE3NzMsMzEgQEAKIAl9CiB9CiAKK3N0YXRpYyB1MzIgYmVfbnVtX3J4cXNfd2FudChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAobXVsdGlfcnhxICYmIChhZGFwdGVyLT5mdW5jdGlvbl9jYXBzICYgQkVfRlVOQ1RJT05fQ0FQU19SU1MpICYmCisJCSFhZGFwdGVyLT5zcmlvdl9lbmFibGVkICYmICEoYWRhcHRlci0+ZnVuY3Rpb25fbW9kZSAmIDB4NDAwKSkgeworCQlyZXR1cm4gMSArIE1BWF9SU1NfUVM7IC8qIG9uZSBkZWZhdWx0IG5vbi1SU1MgcXVldWUgKi8KKwl9IGVsc2UgeworCQlkZXZfd2FybigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJIk5vIHN1cHBvcnQgZm9yIG11bHRpcGxlIFJYIHF1ZXVlc1xuIik7CisJCXJldHVybiAxOworCX0KK30KKwogc3RhdGljIGludCBiZV9yeF9xdWV1ZXNfY3JlYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICplcSwgKnEsICpjcTsKIAlzdHJ1Y3QgYmVfcnhfb2JqICpyeG87CiAJaW50IHJjLCBpOwogCisJYWRhcHRlci0+bnVtX3J4X3FzID0gbWluKGJlX251bV9yeHFzX3dhbnQoYWRhcHRlciksCisJCQkJbXNpeF9lbmFibGVkKGFkYXB0ZXIpID8KKwkJCQkJYWRhcHRlci0+bnVtX21zaXhfdmVjIC0gMSA6IDEpOworCWlmIChhZGFwdGVyLT5udW1fcnhfcXMgIT0gTUFYX1JYX1FTKQorCQlkZXZfd2FybigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJIkNhbiBjcmVhdGUgb25seSAlZCBSWCBxdWV1ZXMiLCBhZGFwdGVyLT5udW1fcnhfcXMpOworCiAJYWRhcHRlci0+YmlnX3BhZ2Vfc2l6ZSA9ICgxIDw8IGdldF9vcmRlcihyeF9mcmFnX3NpemUpKSAqIFBBR0VfU0laRTsKIAlmb3JfYWxsX3J4X3F1ZXVlcyhhZGFwdGVyLCByeG8sIGkpIHsKIAkJcnhvLT5hZGFwdGVyID0gYWRhcHRlcjsKQEAgLTE3MjQsMTIgKzE5NDMsMTUgQEAKIAkJCWJyZWFrOwogCiAJCS8qIElnbm9yZSBmbHVzaCBjb21wbGV0aW9ucyAqLwotCQlpZiAocnhjcC0+bnVtX3JjdmQpIHsKKwkJaWYgKHJ4Y3AtPm51bV9yY3ZkICYmIHJ4Y3AtPnBrdF9zaXplKSB7CiAJCQlpZiAoZG9fZ3JvKHJ4Y3ApKQogCQkJCWJlX3J4X2NvbXBsX3Byb2Nlc3NfZ3JvKGFkYXB0ZXIsIHJ4bywgcnhjcCk7CiAJCQllbHNlCiAJCQkJYmVfcnhfY29tcGxfcHJvY2VzcyhhZGFwdGVyLCByeG8sIHJ4Y3ApOworCQl9IGVsc2UgaWYgKHJ4Y3AtPnBrdF9zaXplID09IDApIHsKKwkJCWJlX3J4X2NvbXBsX2Rpc2NhcmQoYWRhcHRlciwgcnhvLCByeGNwKTsKIAkJfQorCiAJCWJlX3J4X3N0YXRzX3VwZGF0ZShyeG8sIHJ4Y3ApOwogCX0KIApAQCAtMTc2MCwxMiArMTk4MiwxMiBAQAogCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICp0eF9jcSA9ICZhZGFwdGVyLT50eF9vYmouY3E7CiAJc3RydWN0IGJlX2V0aF90eF9jb21wbCAqdHhjcDsKIAlpbnQgdHhfY29tcGwgPSAwLCBtY2NfY29tcGwsIHN0YXR1cyA9IDA7Ci0JdTE2IGVuZF9pZHg7CisJdTE2IGVuZF9pZHgsIG51bV93cmJzID0gMDsKIAogCXdoaWxlICgodHhjcCA9IGJlX3R4X2NvbXBsX2dldCh0eF9jcSkpKSB7CiAJCWVuZF9pZHggPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF90eF9jb21wbCwKIAkJCQl3cmJfaW5kZXgsIHR4Y3ApOwotCQliZV90eF9jb21wbF9wcm9jZXNzKGFkYXB0ZXIsIGVuZF9pZHgpOworCQludW1fd3JicyArPSBiZV90eF9jb21wbF9wcm9jZXNzKGFkYXB0ZXIsIGVuZF9pZHgpOwogCQl0eF9jb21wbCsrOwogCX0KIApAQCAtMTc4MSw2ICsyMDAzLDggQEAKIAlpZiAodHhfY29tcGwpIHsKIAkJYmVfY3Ffbm90aWZ5KGFkYXB0ZXIsIGFkYXB0ZXItPnR4X29iai5jcS5pZCwgdHJ1ZSwgdHhfY29tcGwpOwogCisJCWF0b21pY19zdWIobnVtX3dyYnMsICZ0eHEtPnVzZWQpOworCiAJCS8qIEFzIFR4IHdyYnMgaGF2ZSBiZWVuIGZyZWVkIHVwLCB3YWtlIHVwIG5ldGRldiBxdWV1ZSBpZgogCQkgKiBpdCB3YXMgc3RvcHBlZCBkdWUgdG8gbGFjayBvZiB0eCB3cmJzLgogCQkgKi8KQEAgLTE4NDMsNiArMjA2Nyw5IEBACiAJc3RydWN0IGJlX3J4X29iaiAqcnhvOwogCWludCBpOwogCisJaWYgKCFhZGFwdGVyLT51ZV9kZXRlY3RlZCAmJiAhbGFuY2VyX2NoaXAoYWRhcHRlcikpCisJCWJlX2RldGVjdF9kdW1wX3VlKGFkYXB0ZXIpOworCiAJLyogd2hlbiBpbnRlcnJ1cHRzIGFyZSBub3QgeWV0IGVuYWJsZWQsIGp1c3QgcmVhcCBhbnkgcGVuZGluZwogCSogbWNjIGNvbXBsZXRpb25zICovCiAJaWYgKCFuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpIHsKQEAgLTE4NTUsMTUgKzIwODIsMTYgQEAKIAkJCWJlX2NxX25vdGlmeShhZGFwdGVyLCBtY2Nfb2JqLT5jcS5pZCwgZmFsc2UsIG1jY19jb21wbCk7CiAJCX0KIAotCQlpZiAoIWFkYXB0ZXItPnVlX2RldGVjdGVkICYmICFsYW5jZXJfY2hpcChhZGFwdGVyKSkKLQkJCWJlX2RldGVjdF9kdW1wX3VlKGFkYXB0ZXIpOwotCiAJCWdvdG8gcmVzY2hlZHVsZTsKIAl9CiAKLQlpZiAoIWFkYXB0ZXItPnN0YXRzX2NtZF9zZW50KQotCQliZV9jbWRfZ2V0X3N0YXRzKGFkYXB0ZXIsICZhZGFwdGVyLT5zdGF0c19jbWQpOwotCisJaWYgKCFhZGFwdGVyLT5zdGF0c19jbWRfc2VudCkgeworCQlpZiAobGFuY2VyX2NoaXAoYWRhcHRlcikpCisJCQlsYW5jZXJfY21kX2dldF9wcG9ydF9zdGF0cyhhZGFwdGVyLAorCQkJCQkJJmFkYXB0ZXItPnN0YXRzX2NtZCk7CisJCWVsc2UKKwkJCWJlX2NtZF9nZXRfc3RhdHMoYWRhcHRlciwgJmFkYXB0ZXItPnN0YXRzX2NtZCk7CisJfQogCWJlX3R4X3JhdGVfdXBkYXRlKGFkYXB0ZXIpOwogCiAJZm9yX2FsbF9yeF9xdWV1ZXMoYWRhcHRlciwgcnhvLCBpKSB7CkBAIC0xODc1LDggKzIxMDMsNiBAQAogCQkJYmVfcG9zdF9yeF9mcmFncyhyeG8sIEdGUF9LRVJORUwpOwogCQl9CiAJfQotCWlmICghYWRhcHRlci0+dWVfZGV0ZWN0ZWQgJiYgIWxhbmNlcl9jaGlwKGFkYXB0ZXIpKQotCQliZV9kZXRlY3RfZHVtcF91ZShhZGFwdGVyKTsKIAogcmVzY2hlZHVsZToKIAlhZGFwdGVyLT53b3JrX2NvdW50ZXIrKzsKQEAgLTE4ODUsNTEgKzIxMTEsMzUgQEAKIAogc3RhdGljIHZvaWQgYmVfbXNpeF9kaXNhYmxlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQogewotCWlmIChhZGFwdGVyLT5tc2l4X2VuYWJsZWQpIHsKKwlpZiAobXNpeF9lbmFibGVkKGFkYXB0ZXIpKSB7CiAJCXBjaV9kaXNhYmxlX21zaXgoYWRhcHRlci0+cGRldik7Ci0JCWFkYXB0ZXItPm1zaXhfZW5hYmxlZCA9IGZhbHNlOwotCX0KLX0KLQotc3RhdGljIGludCBiZV9udW1fcnhxc19nZXQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JaWYgKG11bHRpX3J4cSAmJiAoYWRhcHRlci0+ZnVuY3Rpb25fY2FwcyAmIEJFX0ZVTkNUSU9OX0NBUFNfUlNTKSAmJgotCQkhYWRhcHRlci0+c3Jpb3ZfZW5hYmxlZCAmJiAhKGFkYXB0ZXItPmZ1bmN0aW9uX21vZGUgJiAweDQwMCkpIHsKLQkJcmV0dXJuIDEgKyBNQVhfUlNTX1FTOyAvKiBvbmUgZGVmYXVsdCBub24tUlNTIHF1ZXVlICovCi0JfSBlbHNlIHsKLQkJZGV2X3dhcm4oJmFkYXB0ZXItPnBkZXYtPmRldiwKLQkJCSJObyBzdXBwb3J0IGZvciBtdWx0aXBsZSBSWCBxdWV1ZXNcbiIpOwotCQlyZXR1cm4gMTsKKwkJYWRhcHRlci0+bnVtX21zaXhfdmVjID0gMDsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIGJlX21zaXhfZW5hYmxlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQogewogI2RlZmluZSBCRV9NSU5fTVNJWF9WRUNUT1JTCSgxICsgMSkgLyogUnggKyBUeCAqLwotCWludCBpLCBzdGF0dXM7CisJaW50IGksIHN0YXR1cywgbnVtX3ZlYzsKIAotCWFkYXB0ZXItPm51bV9yeF9xcyA9IGJlX251bV9yeHFzX2dldChhZGFwdGVyKTsKKwludW1fdmVjID0gYmVfbnVtX3J4cXNfd2FudChhZGFwdGVyKSArIDE7CiAKLQlmb3IgKGkgPSAwOyBpIDwgKGFkYXB0ZXItPm51bV9yeF9xcyArIDEpOyBpKyspCisJZm9yIChpID0gMDsgaSA8IG51bV92ZWM7IGkrKykKIAkJYWRhcHRlci0+bXNpeF9lbnRyaWVzW2ldLmVudHJ5ID0gaTsKIAotCXN0YXR1cyA9IHBjaV9lbmFibGVfbXNpeChhZGFwdGVyLT5wZGV2LCBhZGFwdGVyLT5tc2l4X2VudHJpZXMsCi0JCQlhZGFwdGVyLT5udW1fcnhfcXMgKyAxKTsKKwlzdGF0dXMgPSBwY2lfZW5hYmxlX21zaXgoYWRhcHRlci0+cGRldiwgYWRhcHRlci0+bXNpeF9lbnRyaWVzLCBudW1fdmVjKTsKIAlpZiAoc3RhdHVzID09IDApIHsKIAkJZ290byBkb25lOwogCX0gZWxzZSBpZiAoc3RhdHVzID49IEJFX01JTl9NU0lYX1ZFQ1RPUlMpIHsKKwkJbnVtX3ZlYyA9IHN0YXR1czsKIAkJaWYgKHBjaV9lbmFibGVfbXNpeChhZGFwdGVyLT5wZGV2LCBhZGFwdGVyLT5tc2l4X2VudHJpZXMsCi0JCQkJc3RhdHVzKSA9PSAwKSB7Ci0JCQlhZGFwdGVyLT5udW1fcnhfcXMgPSBzdGF0dXMgLSAxOwotCQkJZGV2X3dhcm4oJmFkYXB0ZXItPnBkZXYtPmRldiwKLQkJCQkiQ291bGQgYWxsb2Mgb25seSAlZCBNU0l4IHZlY3RvcnMuICIKLQkJCQkiVXNpbmcgJWQgUlggUXNcbiIsIHN0YXR1cywgYWRhcHRlci0+bnVtX3J4X3FzKTsKKwkJCQludW1fdmVjKSA9PSAwKQogCQkJZ290byBkb25lOwotCQl9CiAJfQogCXJldHVybjsKIGRvbmU6Ci0JYWRhcHRlci0+bXNpeF9lbmFibGVkID0gdHJ1ZTsKKwlhZGFwdGVyLT5udW1fbXNpeF92ZWMgPSBudW1fdmVjOworCXJldHVybjsKIH0KIAogc3RhdGljIHZvaWQgYmVfc3Jpb3ZfZW5hYmxlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQpAQCAtMTkzNyw3ICsyMTQ3LDIwIEBACiAJYmVfY2hlY2tfc3Jpb3ZfZm5fdHlwZShhZGFwdGVyKTsKICNpZmRlZiBDT05GSUdfUENJX0lPVgogCWlmIChiZV9waHlzZm4oYWRhcHRlcikgJiYgbnVtX3ZmcykgewotCQlpbnQgc3RhdHVzOworCQlpbnQgc3RhdHVzLCBwb3M7CisJCXUxNiBudmZzOworCisJCXBvcyA9IHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5KGFkYXB0ZXItPnBkZXYsCisJCQkJCQlQQ0lfRVhUX0NBUF9JRF9TUklPVik7CisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGFkYXB0ZXItPnBkZXYsCisJCQkJCXBvcyArIFBDSV9TUklPVl9UT1RBTF9WRiwgJm52ZnMpOworCisJCWlmIChudW1fdmZzID4gbnZmcykgeworCQkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkJIkRldmljZSBzdXBwb3J0cyAlZCBWRnMgYW5kIG5vdCAlZFxuIiwKKwkJCQkJbnZmcywgbnVtX3Zmcyk7CisJCQludW1fdmZzID0gbnZmczsKKwkJfQogCiAJCXN0YXR1cyA9IHBjaV9lbmFibGVfc3Jpb3YoYWRhcHRlci0+cGRldiwgbnVtX3Zmcyk7CiAJCWFkYXB0ZXItPnNyaW92X2VuYWJsZWQgPSBzdGF0dXMgPyBmYWxzZSA6IHRydWU7CkBAIC0yMDEwLDggKzIyMzMsNyBAQAogZXJyOgogCWRldl93YXJuKCZhZGFwdGVyLT5wZGV2LT5kZXYsCiAJCSJNU0lYIFJlcXVlc3QgSVJRIGZhaWxlZCAtIGVyciAlZFxuIiwgc3RhdHVzKTsKLQlwY2lfZGlzYWJsZV9tc2l4KGFkYXB0ZXItPnBkZXYpOwotCWFkYXB0ZXItPm1zaXhfZW5hYmxlZCA9IGZhbHNlOworCWJlX21zaXhfZGlzYWJsZShhZGFwdGVyKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0yMDIwLDcgKzIyNDIsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJaW50IHN0YXR1czsKIAotCWlmIChhZGFwdGVyLT5tc2l4X2VuYWJsZWQpIHsKKwlpZiAobXNpeF9lbmFibGVkKGFkYXB0ZXIpKSB7CiAJCXN0YXR1cyA9IGJlX21zaXhfcmVnaXN0ZXIoYWRhcHRlcik7CiAJCWlmIChzdGF0dXMgPT0gMCkKIAkJCWdvdG8gZG9uZTsKQEAgLTIwNTMsNyArMjI3NSw3IEBACiAJCXJldHVybjsKIAogCS8qIElOVHggKi8KLQlpZiAoIWFkYXB0ZXItPm1zaXhfZW5hYmxlZCkgeworCWlmICghbXNpeF9lbmFibGVkKGFkYXB0ZXIpKSB7CiAJCWZyZWVfaXJxKG5ldGRldi0+aXJxLCBhZGFwdGVyKTsKIAkJZ290byBkb25lOwogCX0KQEAgLTIwOTUsNyArMjMxNyw3IEBACiAJCQkgYmVfY3Ffbm90aWZ5KGFkYXB0ZXIsIHJ4by0+Y3EuaWQsIGZhbHNlLCAwKTsKIAl9CiAKLQlpZiAoYWRhcHRlci0+bXNpeF9lbmFibGVkKSB7CisJaWYgKG1zaXhfZW5hYmxlZChhZGFwdGVyKSkgewogCQl2ZWMgPSBiZV9tc2l4X3ZlY19nZXQoYWRhcHRlciwgdHhfZXEpOwogCQlzeW5jaHJvbml6ZV9pcnEodmVjKTsKIApAQCAtMjE0OCw3ICsyMzcwLDcgQEAKIAliZV9hc3luY19tY2NfZW5hYmxlKGFkYXB0ZXIpOwogCiAJc3RhdHVzID0gYmVfY21kX2xpbmtfc3RhdHVzX3F1ZXJ5KGFkYXB0ZXIsICZsaW5rX3VwLCAmbWFjX3NwZWVkLAotCQkJJmxpbmtfc3BlZWQpOworCQkJJmxpbmtfc3BlZWQsIDApOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gZXJyOwogCWJlX2xpbmtfc3RhdHVzX3VwZGF0ZShhZGFwdGVyLCBsaW5rX3VwKTsKQEAgLTIyNjgsNyArMjQ5MCw3IEBACiAJCQkJQkVfSUZfRkxBR1NfUEFTU19MM0w0X0VSUk9SUzsKIAkJZW5fZmxhZ3MgfD0gQkVfSUZfRkxBR1NfUEFTU19MM0w0X0VSUk9SUzsKIAotCQlpZiAoYmVfbXVsdGlfcnhxKGFkYXB0ZXIpKSB7CisJCWlmIChhZGFwdGVyLT5mdW5jdGlvbl9jYXBzICYgQkVfRlVOQ1RJT05fQ0FQU19SU1MpIHsKIAkJCWNhcF9mbGFncyB8PSBCRV9JRl9GTEFHU19SU1M7CiAJCQllbl9mbGFncyB8PSBCRV9JRl9GTEFHU19SU1M7CiAJCX0KQEAgLTIzMjUsNyArMjU0Nyw2IEBACiAKIAlyZXR1cm4gMDsKIAotCWJlX21jY19xdWV1ZXNfZGVzdHJveShhZGFwdGVyKTsKIHJ4X3FzX2Rlc3Ryb3k6CiAJYmVfcnhfcXVldWVzX2Rlc3Ryb3koYWRhcHRlcik7CiB0eF9xc19kZXN0cm95OgpAQCAtMjQ5Myw3ICsyNzE0LDYgQEAKIAkJCQkJImNtZCB0byB3cml0ZSB0byBmbGFzaCByb20gZmFpbGVkLlxuIik7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQotCQkJeWllbGQoKTsKIAkJfQogCX0KIAlyZXR1cm4gMDsKQEAgLTI1MTEsMzIgKzI3MzEsOTYgQEAKIAkJcmV0dXJuIDA7CiB9CiAKLWludCBiZV9sb2FkX2Z3KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1OCAqZnVuYykKK3N0YXRpYyBpbnQgbGFuY2VyX2Z3X2Rvd25sb2FkKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAorCQkJCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCiB7Ci0JY2hhciBmd19maWxlW0VUSFRPT0xfRkxBU0hfTUFYX0ZJTEVOQU1FXTsKLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworI2RlZmluZSBMQU5DRVJfRldfRE9XTkxPQURfQ0hVTksgICAgICAoMzIgKiAxMDI0KQorI2RlZmluZSBMQU5DRVJfRldfRE9XTkxPQURfTE9DQVRJT04gICAiL3ByZyIKKwlzdHJ1Y3QgYmVfZG1hX21lbSBmbGFzaF9jbWQ7CisJY29uc3QgdTggKmRhdGFfcHRyID0gTlVMTDsKKwl1OCAqZGVzdF9pbWFnZV9wdHIgPSBOVUxMOworCXNpemVfdCBpbWFnZV9zaXplID0gMDsKKwl1MzIgY2h1bmtfc2l6ZSA9IDA7CisJdTMyIGRhdGFfd3JpdHRlbiA9IDA7CisJdTMyIG9mZnNldCA9IDA7CisJaW50IHN0YXR1cyA9IDA7CisJdTggYWRkX3N0YXR1cyA9IDA7CisKKwlpZiAoIUlTX0FMSUdORUQoZnctPnNpemUsIHNpemVvZih1MzIpKSkgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkiRlcgSW1hZ2Ugbm90IHByb3Blcmx5IGFsaWduZWQuICIKKwkJCSJMZW5ndGggbXVzdCBiZSA0IGJ5dGUgYWxpZ25lZC5cbiIpOworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGxhbmNlcl9md19leGl0OworCX0KKworCWZsYXNoX2NtZC5zaXplID0gc2l6ZW9mKHN0cnVjdCBsYW5jZXJfY21kX3JlcV93cml0ZV9vYmplY3QpCisJCQkJKyBMQU5DRVJfRldfRE9XTkxPQURfQ0hVTks7CisJZmxhc2hfY21kLnZhID0gZG1hX2FsbG9jX2NvaGVyZW50KCZhZGFwdGVyLT5wZGV2LT5kZXYsIGZsYXNoX2NtZC5zaXplLAorCQkJCQkJJmZsYXNoX2NtZC5kbWEsIEdGUF9LRVJORUwpOworCWlmICghZmxhc2hfY21kLnZhKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIHdoaWxlIGZsYXNoaW5nXG4iKTsKKwkJZ290byBsYW5jZXJfZndfZXhpdDsKKwl9CisKKwlkZXN0X2ltYWdlX3B0ciA9IGZsYXNoX2NtZC52YSArCisJCQkJc2l6ZW9mKHN0cnVjdCBsYW5jZXJfY21kX3JlcV93cml0ZV9vYmplY3QpOworCWltYWdlX3NpemUgPSBmdy0+c2l6ZTsKKwlkYXRhX3B0ciA9IGZ3LT5kYXRhOworCisJd2hpbGUgKGltYWdlX3NpemUpIHsKKwkJY2h1bmtfc2l6ZSA9IG1pbl90KHUzMiwgaW1hZ2Vfc2l6ZSwgTEFOQ0VSX0ZXX0RPV05MT0FEX0NIVU5LKTsKKworCQkvKiBDb3B5IHRoZSBpbWFnZSBjaHVuayBjb250ZW50LiAqLworCQltZW1jcHkoZGVzdF9pbWFnZV9wdHIsIGRhdGFfcHRyLCBjaHVua19zaXplKTsKKworCQlzdGF0dXMgPSBsYW5jZXJfY21kX3dyaXRlX29iamVjdChhZGFwdGVyLCAmZmxhc2hfY21kLAorCQkJCWNodW5rX3NpemUsIG9mZnNldCwgTEFOQ0VSX0ZXX0RPV05MT0FEX0xPQ0FUSU9OLAorCQkJCSZkYXRhX3dyaXR0ZW4sICZhZGRfc3RhdHVzKTsKKworCQlpZiAoc3RhdHVzKQorCQkJYnJlYWs7CisKKwkJb2Zmc2V0ICs9IGRhdGFfd3JpdHRlbjsKKwkJZGF0YV9wdHIgKz0gZGF0YV93cml0dGVuOworCQlpbWFnZV9zaXplIC09IGRhdGFfd3JpdHRlbjsKKwl9CisKKwlpZiAoIXN0YXR1cykgeworCQkvKiBDb21taXQgdGhlIEZXIHdyaXR0ZW4gKi8KKwkJc3RhdHVzID0gbGFuY2VyX2NtZF93cml0ZV9vYmplY3QoYWRhcHRlciwgJmZsYXNoX2NtZCwKKwkJCQkJMCwgb2Zmc2V0LCBMQU5DRVJfRldfRE9XTkxPQURfTE9DQVRJT04sCisJCQkJCSZkYXRhX3dyaXR0ZW4sICZhZGRfc3RhdHVzKTsKKwl9CisKKwlkbWFfZnJlZV9jb2hlcmVudCgmYWRhcHRlci0+cGRldi0+ZGV2LCBmbGFzaF9jbWQuc2l6ZSwgZmxhc2hfY21kLnZhLAorCQkJCWZsYXNoX2NtZC5kbWEpOworCWlmIChzdGF0dXMpIHsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJIkZpcm13YXJlIGxvYWQgZXJyb3IuICIKKwkJCSJTdGF0dXMgY29kZTogMHgleCBBZGRpdGlvbmFsIFN0YXR1czogMHgleFxuIiwKKwkJCXN0YXR1cywgYWRkX3N0YXR1cyk7CisJCWdvdG8gbGFuY2VyX2Z3X2V4aXQ7CisJfQorCisJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgIkZpcm13YXJlIGZsYXNoZWQgc3VjY2Vzc2Z1bGx5XG4iKTsKK2xhbmNlcl9md19leGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgYmVfZndfZG93bmxvYWQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSogZncpCit7CiAJc3RydWN0IGZsYXNoX2ZpbGVfaGRyX2cyICpmaGRyOwogCXN0cnVjdCBmbGFzaF9maWxlX2hkcl9nMyAqZmhkcjM7CiAJc3RydWN0IGltYWdlX2hkciAqaW1nX2hkcl9wdHIgPSBOVUxMOwogCXN0cnVjdCBiZV9kbWFfbWVtIGZsYXNoX2NtZDsKLQlpbnQgc3RhdHVzLCBpID0gMCwgbnVtX2ltZ3MgPSAwOwogCWNvbnN0IHU4ICpwOwotCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpIHsKLQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAotCQkJIkZpcm13YXJlIGxvYWQgbm90IGFsbG93ZWQgKGludGVyZmFjZSBpcyBkb3duKVxuIik7Ci0JCXJldHVybiAtRVBFUk07Ci0JfQotCi0Jc3RyY3B5KGZ3X2ZpbGUsIGZ1bmMpOwotCi0Jc3RhdHVzID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGZ3X2ZpbGUsICZhZGFwdGVyLT5wZGV2LT5kZXYpOwotCWlmIChzdGF0dXMpCi0JCWdvdG8gZndfZXhpdDsKKwlpbnQgc3RhdHVzID0gMCwgaSA9IDAsIG51bV9pbWdzID0gMDsKIAogCXAgPSBmdy0+ZGF0YTsKIAlmaGRyID0gKHN0cnVjdCBmbGFzaF9maWxlX2hkcl9nMiAqKSBwOwotCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJGbGFzaGluZyBmaXJtd2FyZSBmaWxlICVzXG4iLCBmd19maWxlKTsKIAogCWZsYXNoX2NtZC5zaXplID0gc2l6ZW9mKHN0cnVjdCBiZV9jbWRfd3JpdGVfZmxhc2hyb20pICsgMzIqMTAyNDsKIAlmbGFzaF9jbWQudmEgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmFkYXB0ZXItPnBkZXYtPmRldiwgZmxhc2hfY21kLnNpemUsCkBAIC0yNTQ1LDcgKzI4MjksNyBAQAogCQlzdGF0dXMgPSAtRU5PTUVNOwogCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCiAJCQkiTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSB3aGlsZSBmbGFzaGluZ1xuIik7Ci0JCWdvdG8gZndfZXhpdDsKKwkJZ290byBiZV9md19leGl0OwogCX0KIAogCWlmICgoYWRhcHRlci0+Z2VuZXJhdGlvbiA9PSBCRV9HRU4zKSAmJgpAQCAtMjU3MywxMSArMjg1NywzNyBAQAogCQkJICBmbGFzaF9jbWQuZG1hKTsKIAlpZiAoc3RhdHVzKSB7CiAJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIkZpcm13YXJlIGxvYWQgZXJyb3JcbiIpOwotCQlnb3RvIGZ3X2V4aXQ7CisJCWdvdG8gYmVfZndfZXhpdDsKIAl9CiAKIAlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAiRmlybXdhcmUgZmxhc2hlZCBzdWNjZXNzZnVsbHlcbiIpOwogCitiZV9md19leGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBiZV9sb2FkX2Z3KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1OCAqZndfZmlsZSkKK3sKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWludCBzdGF0dXM7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoYWRhcHRlci0+bmV0ZGV2KSkgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkiRmlybXdhcmUgbG9hZCBub3QgYWxsb3dlZCAoaW50ZXJmYWNlIGlzIGRvd24pXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXN0YXR1cyA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmd19maWxlLCAmYWRhcHRlci0+cGRldi0+ZGV2KTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ3X2V4aXQ7CisKKwlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAiRmxhc2hpbmcgZmlybXdhcmUgZmlsZSAlc1xuIiwgZndfZmlsZSk7CisKKwlpZiAobGFuY2VyX2NoaXAoYWRhcHRlcikpCisJCXN0YXR1cyA9IGxhbmNlcl9md19kb3dubG9hZChhZGFwdGVyLCBmdyk7CisJZWxzZQorCQlzdGF0dXMgPSBiZV9md19kb3dubG9hZChhZGFwdGVyLCBmdyk7CisKIGZ3X2V4aXQ6CiAJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAJcmV0dXJuIHN0YXR1czsKQEAgLTI2MDYsMTAgKzI5MTYsMTQgQEAKIAlzdHJ1Y3QgYmVfcnhfb2JqICpyeG87CiAJaW50IGk7CiAKLQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0hXX1ZMQU5fUlggfCBORVRJRl9GX1RTTyB8Ci0JCU5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9GSUxURVIgfAotCQlORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSB8Ci0JCU5FVElGX0ZfR1JPIHwgTkVUSUZfRl9UU082OworCW5ldGRldi0+aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082IHwKKwkJTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU0gfCBORVRJRl9GX1JYQ1NVTSB8CisJCU5FVElGX0ZfSFdfVkxBTl9UWDsKKwlpZiAoYmVfbXVsdGlfcnhxKGFkYXB0ZXIpKQorCQluZXRkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfUlhIQVNIOworCisJbmV0ZGV2LT5mZWF0dXJlcyB8PSBuZXRkZXYtPmh3X2ZlYXR1cmVzIHwKKwkJTkVUSUZfRl9IV19WTEFOX1JYIHwgTkVUSUZfRl9IV19WTEFOX0ZJTFRFUjsKIAogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9UU08gfAogCQlORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTTsKQEAgLTI2MTksOCArMjkzMyw2IEBACiAKIAluZXRkZXYtPmZsYWdzIHw9IElGRl9NVUxUSUNBU1Q7CiAKLQlhZGFwdGVyLT5yeF9jc3VtID0gdHJ1ZTsKLQogCS8qIERlZmF1bHQgc2V0dGluZ3MgZm9yIFJ4IGFuZCBUeCBmbG93IGNvbnRyb2wgKi8KIAlhZGFwdGVyLT5yeF9mYyA9IHRydWU7CiAJYWRhcHRlci0+dHhfZmMgPSB0cnVlOwpAQCAtMjc4OCw3ICszMTAwLDE0IEBACiB7CiAJc3RydWN0IGJlX2RtYV9tZW0gKmNtZCA9ICZhZGFwdGVyLT5zdGF0c19jbWQ7CiAKLQljbWQtPnNpemUgPSBzaXplb2Yoc3RydWN0IGJlX2NtZF9yZXFfZ2V0X3N0YXRzKTsKKwlpZiAoYWRhcHRlci0+Z2VuZXJhdGlvbiA9PSBCRV9HRU4yKSB7CisJCWNtZC0+c2l6ZSA9IHNpemVvZihzdHJ1Y3QgYmVfY21kX3JlcV9nZXRfc3RhdHNfdjApOworCX0gZWxzZSB7CisJCWlmIChsYW5jZXJfY2hpcChhZGFwdGVyKSkKKwkJCWNtZC0+c2l6ZSA9IHNpemVvZihzdHJ1Y3QgbGFuY2VyX2NtZF9yZXFfcHBvcnRfc3RhdHMpOworCQllbHNlCisJCQljbWQtPnNpemUgPSBzaXplb2Yoc3RydWN0IGJlX2NtZF9yZXFfZ2V0X3N0YXRzX3YxKTsKKwl9CiAJY21kLT52YSA9IGRtYV9hbGxvY19jb2hlcmVudCgmYWRhcHRlci0+cGRldi0+ZGV2LCBjbWQtPnNpemUsICZjbWQtPmRtYSwKIAkJCQkgICAgIEdGUF9LRVJORUwpOwogCWlmIChjbWQtPnZhID09IE5VTEwpCkBAIC0yODE0LDYgKzMxMzMsNyBAQAogCiAJYmVfY3RybF9jbGVhbnVwKGFkYXB0ZXIpOwogCisJa2ZyZWUoYWRhcHRlci0+dmZfY2ZnKTsKIAliZV9zcmlvdl9kaXNhYmxlKGFkYXB0ZXIpOwogCiAJYmVfbXNpeF9kaXNhYmxlKGFkYXB0ZXIpOwpAQCAtMjg0MSw3ICszMTYxLDggQEAKIAogCW1lbXNldChtYWMsIDAsIEVUSF9BTEVOKTsKIAotCWlmIChiZV9waHlzZm4oYWRhcHRlcikpIHsKKwkvKiBBIGRlZmF1bHQgcGVybWFuZW50IGFkZHJlc3MgaXMgZ2l2ZW4gdG8gZWFjaCBWRiBmb3IgTGFuY2VyKi8KKwlpZiAoYmVfcGh5c2ZuKGFkYXB0ZXIpIHx8IGxhbmNlcl9jaGlwKGFkYXB0ZXIpKSB7CiAJCXN0YXR1cyA9IGJlX2NtZF9tYWNfYWRkcl9xdWVyeShhZGFwdGVyLCBtYWMsCiAJCQlNQUNfQUREUkVTU19UWVBFX05FVFdPUkssIHRydWUgLypwZXJtYW5lbnQgKi8sIDApOwogCkBAIC0yODgzLDYgKzMyMDQsNyBAQAogCQlhZGFwdGVyLT5nZW5lcmF0aW9uID0gQkVfR0VOMzsKIAkJYnJlYWs7CiAJY2FzZSBPQ19ERVZJQ0VfSUQzOgorCWNhc2UgT0NfREVWSUNFX0lENDoKIAkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIFNMSV9JTlRGX1JFR19PRkZTRVQsICZzbGlfaW50Zik7CiAJCWlmX3R5cGUgPSAoc2xpX2ludGYgJiBTTElfSU5URl9JRl9UWVBFX01BU0spID4+CiAJCQkJCQlTTElfSU5URl9JRl9UWVBFX1NISUZUOwpAQCAtMjg5MiwxMCArMzIxNCw2IEBACiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJTTElfSU5URiByZWcgdmFsIGlzIG5vdCB2YWxpZFxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlpZiAobnVtX3ZmcyA+IDApIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwgIlZGcyBub3Qgc3VwcG9ydGVkXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9CiAJCWFkYXB0ZXItPnNsaV9mYW1pbHkgPSAoKHNsaV9pbnRmICYgU0xJX0lOVEZfRkFNSUxZX01BU0spID4+CiAJCQkJCSBTTElfSU5URl9GQU1JTFlfU0hJRlQpOwogCQlhZGFwdGVyLT5nZW5lcmF0aW9uID0gQkVfR0VOMzsKQEAgLTI5OTgsMTYgKzMzMTYsMjMgQEAKIAl9CiAKIAliZV9zcmlvdl9lbmFibGUoYWRhcHRlcik7CisJaWYgKGFkYXB0ZXItPnNyaW92X2VuYWJsZWQpIHsKKwkJYWRhcHRlci0+dmZfY2ZnID0ga2NhbGxvYyhudW1fdmZzLAorCQkJc2l6ZW9mKHN0cnVjdCBiZV92Zl9jZmcpLCBHRlBfS0VSTkVMKTsKKworCQlpZiAoIWFkYXB0ZXItPnZmX2NmZykKKwkJCWdvdG8gZnJlZV9uZXRkZXY7CisJfQogCiAJc3RhdHVzID0gYmVfY3RybF9pbml0KGFkYXB0ZXIpOwogCWlmIChzdGF0dXMpCi0JCWdvdG8gZnJlZV9uZXRkZXY7CisJCWdvdG8gZnJlZV92Zl9jZmc7CiAKIAlpZiAobGFuY2VyX2NoaXAoYWRhcHRlcikpIHsKIAkJc3RhdHVzID0gbGFuY2VyX3Rlc3RfYW5kX3NldF9yZHlfc3RhdGUoYWRhcHRlcik7CiAJCWlmIChzdGF0dXMpIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkFkYXB0ZXIgaW4gbm9uIHJlY292ZXJhYmxlIGVycm9yXG4iKTsKLQkJCWdvdG8gZnJlZV9uZXRkZXY7CisJCQlnb3RvIGN0cmxfY2xlYW47CiAJCX0KIAl9CiAKQEAgLTMwNTAsOSArMzM3NSwyNCBAQAogCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAKIAlpZiAoYmVfcGh5c2ZuKGFkYXB0ZXIpICYmIGFkYXB0ZXItPnNyaW92X2VuYWJsZWQpIHsKLQkJc3RhdHVzID0gYmVfdmZfZXRoX2FkZHJfY29uZmlnKGFkYXB0ZXIpOwotCQlpZiAoc3RhdHVzKQotCQkJZ290byB1bnJlZ19uZXRkZXY7CisJCXU4IG1hY19zcGVlZDsKKwkJYm9vbCBsaW5rX3VwOworCQl1MTYgdmYsIGxua19zcGVlZDsKKworCQlpZiAoIWxhbmNlcl9jaGlwKGFkYXB0ZXIpKSB7CisJCQlzdGF0dXMgPSBiZV92Zl9ldGhfYWRkcl9jb25maWcoYWRhcHRlcik7CisJCQlpZiAoc3RhdHVzKQorCQkJCWdvdG8gdW5yZWdfbmV0ZGV2OworCQl9CisKKwkJZm9yICh2ZiA9IDA7IHZmIDwgbnVtX3ZmczsgdmYrKykgeworCQkJc3RhdHVzID0gYmVfY21kX2xpbmtfc3RhdHVzX3F1ZXJ5KGFkYXB0ZXIsICZsaW5rX3VwLAorCQkJCQkmbWFjX3NwZWVkLCAmbG5rX3NwZWVkLCB2ZiArIDEpOworCQkJaWYgKCFzdGF0dXMpCisJCQkJYWRhcHRlci0+dmZfY2ZnW3ZmXS52Zl90eF9yYXRlID0gbG5rX3NwZWVkICogMTA7CisJCQllbHNlCisJCQkJZ290byB1bnJlZ19uZXRkZXY7CisJCX0KIAl9CiAKIAlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXMgcG9ydCAlZFxuIiwgbmljX25hbWUocGRldiksIGFkYXB0ZXItPnBvcnRfbnVtKTsKQEAgLTMwNjksNiArMzQwOSw4IEBACiAJYmVfc3RhdHNfY2xlYW51cChhZGFwdGVyKTsKIGN0cmxfY2xlYW46CiAJYmVfY3RybF9jbGVhbnVwKGFkYXB0ZXIpOworZnJlZV92Zl9jZmc6CisJa2ZyZWUoYWRhcHRlci0+dmZfY2ZnKTsKIGZyZWVfbmV0ZGV2OgogCWJlX3NyaW92X2Rpc2FibGUoYWRhcHRlcik7CiAJZnJlZV9uZXRkZXYobmV0ZGV2KTsKQEAgLTMxNTMsMTYgKzM0OTUsMTUgQEAKIAlpZiAoIWFkYXB0ZXIpCiAJCXJldHVybjsKIAotCWlmIChuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpCi0JCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYWRhcHRlci0+d29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhZGFwdGVyLT53b3JrKTsKIAogCW5ldGlmX2RldmljZV9kZXRhY2goYWRhcHRlci0+bmV0ZGV2KTsKIAotCWJlX2NtZF9yZXNldF9mdW5jdGlvbihhZGFwdGVyKTsKLQogCWlmIChhZGFwdGVyLT53b2wpCiAJCWJlX3NldHVwX3dvbChhZGFwdGVyLCB0cnVlKTsKIAorCWJlX2NtZF9yZXNldF9mdW5jdGlvbihhZGFwdGVyKTsKKwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIH0KIApAQCAtMzI3NCwxMyArMzYxNSw2IEBACiAJCXJ4X2ZyYWdfc2l6ZSA9IDIwNDg7CiAJfQogCi0JaWYgKG51bV92ZnMgPiAzMikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FCi0JCQkiIDogTW9kdWxlIHBhcmFtIG51bV92ZnMgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIDMyLiIKLQkJCSJVc2luZyAzMlxuIik7Ci0JCW51bV92ZnMgPSAzMjsKLQl9Ci0KIAlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYmVfZHJpdmVyKTsKIH0KIG1vZHVsZV9pbml0KGJlX2luaXRfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JuYS9iZmFfaW9jLmMgYi9kcml2ZXJzL25ldC9ibmEvYmZhX2lvYy5jCmluZGV4IDc1ODE1MThlYy4uZmNiOWJiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm5hL2JmYV9pb2MuYworKysgYi9kcml2ZXJzL25ldC9ibmEvYmZhX2lvYy5jCkBAIC04Miw3ICs4Miw2IEBACiBzdGF0aWMgdm9pZCBiZmFfaW9jX2Jvb3Qoc3RydWN0IGJmYV9pb2MgKmlvYywgdTMyIGJvb3RfdHlwZSwKIAkJCSB1MzIgYm9vdF9wYXJhbSk7CiBzdGF0aWMgdTMyIGJmYV9pb2Nfc21lbV9wZ251bShzdHJ1Y3QgYmZhX2lvYyAqaW9jLCB1MzIgZm1hZGRyKTsKLXN0YXRpYyB1MzIgYmZhX2lvY19zbWVtX3Bnb2ZmKHN0cnVjdCBiZmFfaW9jICppb2MsIHUzMiBmbWFkZHIpOwogc3RhdGljIHZvaWQgYmZhX2lvY19nZXRfYWRhcHRlcl9zZXJpYWxfbnVtKHN0cnVjdCBiZmFfaW9jICppb2MsCiAJCQkJCQljaGFyICpzZXJpYWxfbnVtKTsKIHN0YXRpYyB2b2lkIGJmYV9pb2NfZ2V0X2FkYXB0ZXJfZndfdmVyKHN0cnVjdCBiZmFfaW9jICppb2MsCkBAIC0xMjc0LDEzICsxMjczLDEyIEBACiB2b2lkCiBiZmFfbndfaW9jX2Z3dmVyX2dldChzdHJ1Y3QgYmZhX2lvYyAqaW9jLCBzdHJ1Y3QgYmZpX2lvY19pbWFnZV9oZHIgKmZ3aGRyKQogewotCXUzMglwZ251bSwgcGdvZmY7CisJdTMyCXBnbnVtOwogCXUzMglsb2ZmID0gMDsKIAlpbnQJCWk7CiAJdTMyCSpmd3NpZyA9ICh1MzIgKikgZndoZHI7CiAKIAlwZ251bSA9IGJmYV9pb2Nfc21lbV9wZ251bShpb2MsIGxvZmYpOwotCXBnb2ZmID0gYmZhX2lvY19zbWVtX3Bnb2ZmKGlvYywgbG9mZik7CiAJd3JpdGVsKHBnbnVtLCBpb2MtPmlvY19yZWdzLmhvc3RfcGFnZV9udW1fZm4pOwogCiAJZm9yIChpID0gMDsgaSA8IChzaXplb2Yoc3RydWN0IGJmaV9pb2NfaW1hZ2VfaGRyKSAvIHNpemVvZih1MzIpKTsKQEAgLTE1MTQsNyArMTUxMiw3IEBACiAJCSAgICB1MzIgYm9vdF9lbnYpCiB7CiAJdTMyICpmd2ltZzsKLQl1MzIgcGdudW0sIHBnb2ZmOworCXUzMiBwZ251bTsKIAl1MzIgbG9mZiA9IDA7CiAJdTMyIGNodW5rbm8gPSAwOwogCXUzMiBpOwpAQCAtMTUyNyw3ICsxNTI1LDYgQEAKIAlmd2ltZyA9IGJmYV9jYl9pbWFnZV9nZXRfY2h1bmsoQkZBX0lPQ19GV0lNR19UWVBFKGlvYyksIGNodW5rbm8pOwogCiAJcGdudW0gPSBiZmFfaW9jX3NtZW1fcGdudW0oaW9jLCBsb2ZmKTsKLQlwZ29mZiA9IGJmYV9pb2Nfc21lbV9wZ29mZihpb2MsIGxvZmYpOwogCiAJd3JpdGVsKHBnbnVtLCBpb2MtPmlvY19yZWdzLmhvc3RfcGFnZV9udW1fZm4pOwogCkBAIC0xOTI1LDEyICsxOTIyLDYgQEAKIAlyZXR1cm4gUFNTX1NNRU1fUEdOVU0oaW9jLT5pb2NfcmVncy5zbWVtX3BnMCwgZm1hZGRyKTsKIH0KIAotc3RhdGljIHUzMgotYmZhX2lvY19zbWVtX3Bnb2ZmKHN0cnVjdCBiZmFfaW9jICppb2MsIHUzMiBmbWFkZHIpCi17Ci0JcmV0dXJuIFBTU19TTUVNX1BHT0ZGKGZtYWRkcik7Ci19Ci0KIC8qKgogICogUmVnaXN0ZXIgbWFpbGJveCBtZXNzYWdlIGhhbmRsZXIgZnVuY3Rpb24sIHRvIGJlIGNhbGxlZCBieSBjb21tb24gbW9kdWxlcwogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibmEvYm5hX2N0cmwuYyBiL2RyaXZlcnMvbmV0L2JuYS9ibmFfY3RybC5jCmluZGV4IGUxNTI3NDcuLjUzYjE0MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JuYS9ibmFfY3RybC5jCisrKyBiL2RyaXZlcnMvbmV0L2JuYS9ibmFfY3RybC5jCkBAIC0yNDYsNyArMjQ2LDYgQEAKIGJuYV9tYm94X2ZsdXNoX3Eoc3RydWN0IGJuYSAqYm5hLCBzdHJ1Y3QgbGlzdF9oZWFkICpxKQogewogCXN0cnVjdCBibmFfbWJveF9xZSAqbWJfcWUgPSBOVUxMOwotCXN0cnVjdCBiZmlfbWhkciAqY21kX2g7CiAJc3RydWN0IGxpc3RfaGVhZAkJCSptYl9xOwogCXZvaWQgCQkJKCpjYmZuKSh2b2lkICphcmcsIGludCBzdGF0dXMpOwogCXZvaWQgCQkJKmNiYXJnOwpAQCAtMjYwLDcgKzI1OSw2IEBACiAJCWJmYV9xX3FlX2luaXQobWJfcWUpOwogCQlibmEtPm1ib3hfbW9kLm1zZ19wZW5kaW5nLS07CiAKLQkJY21kX2ggPSAoc3RydWN0IGJmaV9taGRyICopKCZtYl9xZS0+Y21kLm1zZ1swXSk7CiAJCWlmIChjYmZuKQogCQkJY2JmbihjYmFyZywgQk5BX0NCX05PVF9FWEVDKTsKIAl9CkBAIC0yNzc0LDIzICsyNzcyLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkCi1ibmFfcml0X21vZF91bmluaXQoc3RydWN0IGJuYV9yaXRfbW9kICpyaXRfbW9kKQotewotCXN0cnVjdCBibmFfcml0X3NlZ21lbnQgKnJpdF9zZWdtZW50OwotCXN0cnVjdCBsaXN0X2hlYWQgKnFlOwotCWludCBpOwotCWludCBqOwotCi0JZm9yIChpID0gMDsgaSA8IEJGSV9SSVRfU0VHX1RPVEFMX1BPT0xTOyBpKyspIHsKLQkJaiA9IDA7Ci0JCWxpc3RfZm9yX2VhY2gocWUsICZyaXRfbW9kLT5yaXRfc2VnX3Bvb2xbaV0pIHsKLQkJCXJpdF9zZWdtZW50ID0gKHN0cnVjdCBibmFfcml0X3NlZ21lbnQgKilxZTsKLQkJCWorKzsKLQkJfQotCX0KLX0KLQogLyoKICAqIFB1YmxpYyBmdW5jdGlvbnMKICAqLwpAQCAtMjk3Nyw4ICsyOTU4LDYgQEAKIAogCWJuYV91Y2FtX21vZF91bmluaXQoJmJuYS0+dWNhbV9tb2QpOwogCi0JYm5hX3JpdF9tb2RfdW5pbml0KCZibmEtPnJpdF9tb2QpOwotCiAJYm5hX2liX21vZF91bmluaXQoJmJuYS0+aWJfbW9kKTsKIAogCWJuYV9yeF9tb2RfdW5pbml0KCZibmEtPnJ4X21vZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibmEvYm5hX3R4cnguYyBiL2RyaXZlcnMvbmV0L2JuYS9ibmFfdHhyeC5jCmluZGV4IDU4Yzc2NjQuLjM4MDA4NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JuYS9ibmFfdHhyeC5jCisrKyBiL2RyaXZlcnMvbmV0L2JuYS9ibmFfdHhyeC5jCkBAIC0yMjI5LDE0ICsyMjI5LDExIEBACiBibmFfcml0X2NyZWF0ZShzdHJ1Y3QgYm5hX3J4ICpyeCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCSpxZV9yeHA7Ci0Jc3RydWN0IGJuYSAqYm5hOwogCXN0cnVjdCBibmFfcnhwICpyeHA7CiAJc3RydWN0IGJuYV9yeHEgKnEwID0gTlVMTDsKIAlzdHJ1Y3QgYm5hX3J4cSAqcTEgPSBOVUxMOwogCWludCBvZmZzZXQ7CiAKLQlibmEgPSByeC0+Ym5hOwotCiAJb2Zmc2V0ID0gMDsKIAlsaXN0X2Zvcl9lYWNoKHFlX3J4cCwgJnJ4LT5yeHBfcSkgewogCQlyeHAgPSAoc3RydWN0IGJuYV9yeHAgKilxZV9yeHA7CkBAIC0yODMwLDcgKzI4MjcsNyBAQAogCXN0cnVjdCBibmFfbWVtX2Rlc2NyICpkc3FwdF9tZW07CS8qIHMvdyBxcHQgZm9yIGRhdGEgKi8KIAlzdHJ1Y3QgYm5hX21lbV9kZXNjciAqaHBhZ2VfbWVtOwkvKiBoZHIgcGFnZSBtZW0gKi8KIAlzdHJ1Y3QgYm5hX21lbV9kZXNjciAqZHBhZ2VfbWVtOwkvKiBkYXRhIHBhZ2UgbWVtICovCi0JaW50IGksIGNwYWdlX2lkeCA9IDAsIGRwYWdlX2lkeCA9IDAsIGhwYWdlX2lkeCA9IDAsIHJldDsKKwlpbnQgaSwgY3BhZ2VfaWR4ID0gMCwgZHBhZ2VfaWR4ID0gMCwgaHBhZ2VfaWR4ID0gMDsKIAlpbnQgZHBhZ2VfY291bnQsIGhwYWdlX2NvdW50LCByY2JfaWR4OwogCXN0cnVjdCBibmFfaWJfY29uZmlnIGliY2ZnOwogCS8qIEZhaWwgaWYgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggUlhQcywgUlhRcyAqLwpAQCAtMjkyNCw3ICsyOTIxLDcgQEAKIAkJaWJjZmcuaW50ZXJwa3RfdGltZW8gPSBCRklfUlhfSU5URVJQS1RfVElNRU87CiAJCWliY2ZnLmN0cmxfZmxhZ3MgPSBCRklfSUJfQ0ZfSU5UX0VOQUJMRTsKIAotCQlyZXQgPSBibmFfaWJfY29uZmlnKHJ4cC0+Y3EuaWIsICZpYmNmZyk7CisJCWJuYV9pYl9jb25maWcocnhwLT5jcS5pYiwgJmliY2ZnKTsKIAogCQkvKiBMaW5rIHJ4cXMgdG8gcnhwICovCiAJCV9yeHBfYWRkX3J4cXMocnhwLCBxMCwgcTEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm5hL2JuYWQuYyBiL2RyaXZlcnMvbmV0L2JuYS9ibmFkLmMKaW5kZXggOGU2Y2VhYi4uN2QyNWE5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm5hL2JuYWQuYworKysgYi9kcml2ZXJzL25ldC9ibmEvYm5hZC5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAjaW5jbHVkZSAiYm5hZC5oIgogI2luY2x1ZGUgImJuYS5oIgpAQCAtNTAxLDcgKzUwMiw3IEBACiAKIAkJc2tiX3B1dChza2IsIG50b2hzKGNtcGwtPmxlbmd0aCkpOwogCQlpZiAobGlrZWx5Ci0JCSAgICAoYm5hZC0+cnhfY3N1bSAmJgorCQkgICAgKChibmFkLT5uZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pICYmCiAJCSAgICAgKCgoZmxhZ3MgJiBCTkFfQ1FfRUZfSVBWNCkgJiYKIAkJICAgICAgKGZsYWdzICYgQk5BX0NRX0VGX0wzX0NLU1VNX09LKSkgfHwKIAkJICAgICAgKGZsYWdzICYgQk5BX0NRX0VGX0lQVjYpKSAmJgpAQCAtMjkwMiwyMyArMjkwMywyMCBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBibmFkLT5uZXRkZXY7CiAKLQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBWNl9DU1VNOwotCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087Ci0JbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7CisJbmV0ZGV2LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX1JYQ1NVTSB8CisJCU5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNIHwKKwkJTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfCBORVRJRl9GX0hXX1ZMQU5fVFg7CiAKLQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfR1JPOwotCXByX3dhcm4oImJuYTogR1JPIGVuYWJsZWQsIHVzaW5nIGtlcm5lbCBzdGFjayBHUk9cbiIpOworCW5ldGRldi0+dmxhbl9mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0hJR0hETUEgfAorCQlORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSB8CisJCU5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082OwogCi0JbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNOworCW5ldGRldi0+ZmVhdHVyZXMgfD0gbmV0ZGV2LT5od19mZWF0dXJlcyB8CisJCU5FVElGX0ZfSFdfVkxBTl9SWCB8IE5FVElGX0ZfSFdfVkxBTl9GSUxURVI7CiAKIAlpZiAodXNpbmdfZGFjKQogCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKIAotCW5ldGRldi0+ZmVhdHVyZXMgfD0KLQkJTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYIHwKLQkJTkVUSUZfRl9IV19WTEFOX0ZJTFRFUjsKLQotCW5ldGRldi0+dmxhbl9mZWF0dXJlcyA9IG5ldGRldi0+ZmVhdHVyZXM7CiAJbmV0ZGV2LT5tZW1fc3RhcnQgPSBibmFkLT5tbWlvX3N0YXJ0OwogCW5ldGRldi0+bWVtX2VuZCA9IGJuYWQtPm1taW9fc3RhcnQgKyBibmFkLT5tbWlvX2xlbiAtIDE7CiAKQEAgLTI5NjksNyArMjk2Nyw2IEBACiAKIAlibmFkLT50eHFfZGVwdGggPSBCTkFEX1RYUV9ERVBUSDsKIAlibmFkLT5yeHFfZGVwdGggPSBCTkFEX1JYUV9ERVBUSDsKLQlibmFkLT5yeF9jc3VtID0gdHJ1ZTsKIAogCWJuYWQtPnR4X2NvYWxlc2NpbmdfdGltZW8gPSBCRklfVFhfQ09BTEVTQ0lOR19USU1FTzsKIAlibmFkLT5yeF9jb2FsZXNjaW5nX3RpbWVvID0gQkZJX1JYX0NPQUxFU0NJTkdfVElNRU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibmEvYm5hZC5oIGIvZHJpdmVycy9uZXQvYm5hL2JuYWQuaAppbmRleCBhODkxMTdmLi5jY2RhYmFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibmEvYm5hZC5oCisrKyBiL2RyaXZlcnMvbmV0L2JuYS9ibmFkLmgKQEAgLTIzNyw4ICsyMzcsNiBAQAogCXN0cnVjdCBibmFfcnhfY29uZmlnIHJ4X2NvbmZpZ1tCTkFEX01BWF9SWFNdOwogCXN0cnVjdCBibmFfdHhfY29uZmlnIHR4X2NvbmZpZ1tCTkFEX01BWF9UWFNdOwogCi0JdTMyCQlyeF9jc3VtOwotCiAJdm9pZCBfX2lvbWVtCQkqYmFyMDsJLyogQkFSMCBhZGRyZXNzICovCiAKIAlzdHJ1Y3QgYm5hIGJuYTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JuYS9ibmFkX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2JuYS9ibmFkX2V0aHRvb2wuYwppbmRleCAxNDJkNjA0Li4zMzMwY2Q3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm5hL2JuYWRfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2JuYS9ibmFkX2V0aHRvb2wuYwpAQCAtMjM3LDEwICsyMzcsMTAgQEAKIAljbWQtPnBoeV9hZGRyZXNzID0gMDsKIAogCWlmIChuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKLQkJY21kLT5zcGVlZCA9IFNQRUVEXzEwMDAwOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCBTUEVFRF8xMDAwMCk7CiAJCWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CiAJfSBlbHNlIHsKLQkJY21kLT5zcGVlZCA9IC0xOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCAtMSk7CiAJCWNtZC0+ZHVwbGV4ID0gLTE7CiAJfQogCWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0VYVEVSTkFMOwpAQCAtMjU2LDcgKzI1Niw4IEBACiAJLyogMTBHIGZ1bGwgZHVwbGV4IHNldHRpbmcgc3VwcG9ydGVkIG9ubHkgKi8KIAlpZiAoY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7IGVsc2UgewotCQlpZiAoKGNtZC0+c3BlZWQgPT0gU1BFRURfMTAwMDApICYmIChjbWQtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkpCisJCWlmICgoZXRodG9vbF9jbWRfc3BlZWQoY21kKSA9PSBTUEVFRF8xMDAwMCkKKwkJICAgICYmIChjbWQtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkpCiAJCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTgwNiw2MSArODA3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHUzMgotYm5hZF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQotewotCXUzMiByeF9jc3VtOwotCXN0cnVjdCBibmFkICpibmFkID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQotCXJ4X2NzdW0gPSBibmFkLT5yeF9jc3VtOwotCXJldHVybiByeF9jc3VtOwotfQotCi1zdGF0aWMgaW50Ci1ibmFkX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiByeF9jc3VtKQotewotCXN0cnVjdCBibmFkICpibmFkID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQotCW11dGV4X2xvY2soJmJuYWQtPmNvbmZfbXV0ZXgpOwotCWJuYWQtPnJ4X2NzdW0gPSByeF9jc3VtOwotCW11dGV4X3VubG9jaygmYm5hZC0+Y29uZl9tdXRleCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLWJuYWRfc2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIHR4X2NzdW0pCi17Ci0Jc3RydWN0IGJuYWQgKmJuYWQgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0JbXV0ZXhfbG9jaygmYm5hZC0+Y29uZl9tdXRleCk7Ci0JaWYgKHR4X2NzdW0pIHsKLQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU07Ci0JCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUFY2X0NTVU07Ci0JfSBlbHNlIHsKLQkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9JUF9DU1VNOwotCQluZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0lQVjZfQ1NVTTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZibmFkLT5jb25mX211dGV4KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotYm5hZF9zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiB0c28pCi17Ci0Jc3RydWN0IGJuYWQgKmJuYWQgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0JbXV0ZXhfbG9jaygmYm5hZC0+Y29uZl9tdXRleCk7Ci0JaWYgKHRzbykgewotCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwotCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKLQl9IGVsc2UgewotCQluZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzsKLQkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9UU082OwotCX0KLQltdXRleF91bmxvY2soJmJuYWQtPmNvbmZfbXV0ZXgpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZAogYm5hZF9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqIHN0cmluZykKIHsKQEAgLTEyNTYsMTQgKzEyMDIsNiBAQAogCS5zZXRfcmluZ3BhcmFtID0gYm5hZF9zZXRfcmluZ3BhcmFtLAogCS5nZXRfcGF1c2VwYXJhbSA9IGJuYWRfZ2V0X3BhdXNlcGFyYW0sCiAJLnNldF9wYXVzZXBhcmFtID0gYm5hZF9zZXRfcGF1c2VwYXJhbSwKLQkuZ2V0X3J4X2NzdW0gPSBibmFkX2dldF9yeF9jc3VtLAotCS5zZXRfcnhfY3N1bSA9IGJuYWRfc2V0X3J4X2NzdW0sCi0JLmdldF90eF9jc3VtID0gZXRodG9vbF9vcF9nZXRfdHhfY3N1bSwKLQkuc2V0X3R4X2NzdW0gPSBibmFkX3NldF90eF9jc3VtLAotCS5nZXRfc2cgPSBldGh0b29sX29wX2dldF9zZywKLQkuc2V0X3NnID0gZXRodG9vbF9vcF9zZXRfc2csCi0JLmdldF90c28gPSBldGh0b29sX29wX2dldF90c28sCi0JLnNldF90c28gPSBibmFkX3NldF90c28sCiAJLmdldF9zdHJpbmdzID0gYm5hZF9nZXRfc3RyaW5ncywKIAkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBibmFkX2dldF9ldGh0b29sX3N0YXRzLAogCS5nZXRfc3NldF9jb3VudCA9IGJuYWRfZ2V0X3NzZXRfY291bnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDIuYyBiL2RyaXZlcnMvbmV0L2JueDIuYwppbmRleCBkODM4M2E5Li41N2QzMjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyLmMKKysrIGIvZHJpdmVycy9uZXQvYm54Mi5jCkBAIC0zMTc0LDcgKzMxNzQsNyBAQAogCQl9CiAKIAkJc2tiX2NoZWNrc3VtX25vbmVfYXNzZXJ0KHNrYik7Ci0JCWlmIChicC0+cnhfY3N1bSAmJgorCQlpZiAoKGJwLT5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pICYmCiAJCQkoc3RhdHVzICYgKEwyX0ZIRFJfU1RBVFVTX1RDUF9TRUdNRU5UIHwKIAkJCUwyX0ZIRFJfU1RBVFVTX1VEUF9EQVRBR1JBTSkpKSB7CiAKQEAgLTY2OTYsMTcgKzY2OTYsMTYgQEAKIAogCWlmIChicC0+YXV0b25lZyAmIEFVVE9ORUdfU1BFRUQpIHsKIAkJY21kLT5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7Ci0JfQotCWVsc2UgeworCX0gZWxzZSB7CiAJCWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKIAl9CiAKIAlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYpKSB7Ci0JCWNtZC0+c3BlZWQgPSBicC0+bGluZV9zcGVlZDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgYnAtPmxpbmVfc3BlZWQpOwogCQljbWQtPmR1cGxleCA9IGJwLT5kdXBsZXg7CiAJfQogCWVsc2UgewotCQljbWQtPnNwZWVkID0gLTE7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIC0xKTsKIAkJY21kLT5kdXBsZXggPSAtMTsKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJmJwLT5waHlfbG9jayk7CkBAIC02NzU4LDIxICs2NzU3LDIxIEBACiAJCWFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfQXV0b25lZzsKIAl9CiAJZWxzZSB7CisJCXUzMiBzcGVlZCA9IGV0aHRvb2xfY21kX3NwZWVkKGNtZCk7CiAJCWlmIChjbWQtPnBvcnQgPT0gUE9SVF9GSUJSRSkgewotCQkJaWYgKChjbWQtPnNwZWVkICE9IFNQRUVEXzEwMDAgJiYKLQkJCSAgICAgY21kLT5zcGVlZCAhPSBTUEVFRF8yNTAwKSB8fAorCQkJaWYgKChzcGVlZCAhPSBTUEVFRF8xMDAwICYmCisJCQkgICAgIHNwZWVkICE9IFNQRUVEXzI1MDApIHx8CiAJCQkgICAgKGNtZC0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKSkKIAkJCQlnb3RvIGVycl9vdXRfdW5sb2NrOwogCi0JCQlpZiAoY21kLT5zcGVlZCA9PSBTUEVFRF8yNTAwICYmCisJCQlpZiAoc3BlZWQgPT0gU1BFRURfMjUwMCAmJgogCQkJICAgICEoYnAtPnBoeV9mbGFncyAmIEJOWDJfUEhZX0ZMQUdfMl81R19DQVBBQkxFKSkKIAkJCQlnb3RvIGVycl9vdXRfdW5sb2NrOwotCQl9Ci0JCWVsc2UgaWYgKGNtZC0+c3BlZWQgPT0gU1BFRURfMTAwMCB8fCBjbWQtPnNwZWVkID09IFNQRUVEXzI1MDApCisJCX0gZWxzZSBpZiAoc3BlZWQgPT0gU1BFRURfMTAwMCB8fCBzcGVlZCA9PSBTUEVFRF8yNTAwKQogCQkJZ290byBlcnJfb3V0X3VubG9jazsKIAogCQlhdXRvbmVnICY9IH5BVVRPTkVHX1NQRUVEOwotCQlyZXFfbGluZV9zcGVlZCA9IGNtZC0+c3BlZWQ7CisJCXJlcV9saW5lX3NwZWVkID0gc3BlZWQ7CiAJCXJlcV9kdXBsZXggPSBjbWQtPmR1cGxleDsKIAkJYWR2ZXJ0aXNpbmcgPSAwOwogCX0KQEAgLTcxODksMzggKzcxODgsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTMyCi1ibngyX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGJueDIgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybiBicC0+cnhfY3N1bTsKLX0KLQotc3RhdGljIGludAotYm54Ml9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgYm54MiAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JYnAtPnJ4X2NzdW0gPSBkYXRhOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1ibngyX3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IGJueDIgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmIChkYXRhKSB7Ci0JCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTT19FQ047Ci0JCWlmIChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwOSkKLQkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwotCX0gZWxzZQotCQlkZXYtPmZlYXR1cmVzICY9IH4oTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfAotCQkJCSAgIE5FVElGX0ZfVFNPX0VDTik7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgewogCWNoYXIgc3RyaW5nW0VUSF9HU1RSSU5HX0xFTl07CiB9IGJueDJfc3RhdHNfc3RyX2FycltdID0gewpAQCAtNzQ5NSw4MiArNzQ2Miw3NCBAQAogfQogCiBzdGF0aWMgaW50Ci1ibngyX3BoeXNfaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCitibngyX3NldF9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gZXRodG9vbF9waHlzX2lkX3N0YXRlIHN0YXRlKQogewogCXN0cnVjdCBibngyICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGk7Ci0JdTMyIHNhdmU7CiAKLQlibngyX3NldF9wb3dlcl9zdGF0ZShicCwgUENJX0QwKTsKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBFVEhUT09MX0lEX0FDVElWRToKKwkJYm54Ml9zZXRfcG93ZXJfc3RhdGUoYnAsIFBDSV9EMCk7CiAKLQlpZiAoZGF0YSA9PSAwKQotCQlkYXRhID0gMjsKKwkJYnAtPmxlZHNfc2F2ZSA9IFJFR19SRChicCwgQk5YMl9NSVNDX0NGRyk7CisJCVJFR19XUihicCwgQk5YMl9NSVNDX0NGRywgQk5YMl9NSVNDX0NGR19MRURNT0RFX01BQyk7CisJCXJldHVybiAxOwkvKiBjeWNsZSBvbi9vZmYgb25jZSBwZXIgc2Vjb25kICovCiAKLQlzYXZlID0gUkVHX1JEKGJwLCBCTlgyX01JU0NfQ0ZHKTsKLQlSRUdfV1IoYnAsIEJOWDJfTUlTQ19DRkcsIEJOWDJfTUlTQ19DRkdfTEVETU9ERV9NQUMpOworCWNhc2UgRVRIVE9PTF9JRF9PTjoKKwkJUkVHX1dSKGJwLCBCTlgyX0VNQUNfTEVELCBCTlgyX0VNQUNfTEVEX09WRVJSSURFIHwKKwkJICAgICAgIEJOWDJfRU1BQ19MRURfMTAwME1CX09WRVJSSURFIHwKKwkJICAgICAgIEJOWDJfRU1BQ19MRURfMTAwTUJfT1ZFUlJJREUgfAorCQkgICAgICAgQk5YMl9FTUFDX0xFRF8xME1CX09WRVJSSURFIHwKKwkJICAgICAgIEJOWDJfRU1BQ19MRURfVFJBRkZJQ19PVkVSUklERSB8CisJCSAgICAgICBCTlgyX0VNQUNfTEVEX1RSQUZGSUMpOworCQlicmVhazsKIAotCWZvciAoaSA9IDA7IGkgPCAoZGF0YSAqIDIpOyBpKyspIHsKLQkJaWYgKChpICUgMikgPT0gMCkgewotCQkJUkVHX1dSKGJwLCBCTlgyX0VNQUNfTEVELCBCTlgyX0VNQUNfTEVEX09WRVJSSURFKTsKLQkJfQotCQllbHNlIHsKLQkJCVJFR19XUihicCwgQk5YMl9FTUFDX0xFRCwgQk5YMl9FTUFDX0xFRF9PVkVSUklERSB8Ci0JCQkJQk5YMl9FTUFDX0xFRF8xMDAwTUJfT1ZFUlJJREUgfAotCQkJCUJOWDJfRU1BQ19MRURfMTAwTUJfT1ZFUlJJREUgfAotCQkJCUJOWDJfRU1BQ19MRURfMTBNQl9PVkVSUklERSB8Ci0JCQkJQk5YMl9FTUFDX0xFRF9UUkFGRklDX09WRVJSSURFIHwKLQkJCQlCTlgyX0VNQUNfTEVEX1RSQUZGSUMpOwotCQl9Ci0JCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDUwMCk7Ci0JCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJCWJyZWFrOworCWNhc2UgRVRIVE9PTF9JRF9PRkY6CisJCVJFR19XUihicCwgQk5YMl9FTUFDX0xFRCwgQk5YMl9FTUFDX0xFRF9PVkVSUklERSk7CisJCWJyZWFrOworCisJY2FzZSBFVEhUT09MX0lEX0lOQUNUSVZFOgorCQlSRUdfV1IoYnAsIEJOWDJfRU1BQ19MRUQsIDApOworCQlSRUdfV1IoYnAsIEJOWDJfTUlTQ19DRkcsIGJwLT5sZWRzX3NhdmUpOworCisJCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQkJYm54Ml9zZXRfcG93ZXJfc3RhdGUoYnAsIFBDSV9EM2hvdCk7CisJCWJyZWFrOwogCX0KLQlSRUdfV1IoYnAsIEJOWDJfRU1BQ19MRUQsIDApOwotCVJFR19XUihicCwgQk5YMl9NSVNDX0NGRywgc2F2ZSk7Ci0KLQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJYm54Ml9zZXRfcG93ZXJfc3RhdGUoYnAsIFBDSV9EM2hvdCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotYm54Ml9zZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3N0YXRpYyB1MzIKK2JueDJfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcykKIHsKIAlzdHJ1Y3QgYm54MiAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JaWYgKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA5KQotCQlyZXR1cm4gZXRodG9vbF9vcF9zZXRfdHhfaXB2Nl9jc3VtKGRldiwgZGF0YSk7Ci0JZWxzZQotCQlyZXR1cm4gZXRodG9vbF9vcF9zZXRfdHhfY3N1bShkZXYsIGRhdGEpOworCWlmICghKGJwLT5mbGFncyAmIEJOWDJfRkxBR19DQU5fS0VFUF9WTEFOKSkKKwkJZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1JYOworCisJcmV0dXJuIGZlYXR1cmVzOwogfQogCiBzdGF0aWMgaW50Ci1ibngyX3NldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK2JueDJfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcykKIHsKIAlzdHJ1Y3QgYm54MiAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCByYzsKLQotCWlmICghKGJwLT5mbGFncyAmIEJOWDJfRkxBR19DQU5fS0VFUF9WTEFOKSAmJgotCSAgICAhKGRhdGEgJiBFVEhfRkxBR19SWFZMQU4pKQotCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIFRTTyB3aXRoIFZMQU4gdGFnIHdvbid0IHdvcmsgd2l0aCBjdXJyZW50IGZpcm13YXJlICovCi0JaWYgKCEoZGF0YSAmIEVUSF9GTEFHX1RYVkxBTikpCi0JCXJldHVybiAtRUlOVkFMOworCWlmIChmZWF0dXJlcyAmIE5FVElGX0ZfSFdfVkxBTl9UWCkKKwkJZGV2LT52bGFuX2ZlYXR1cmVzIHw9IChkZXYtPmh3X2ZlYXR1cmVzICYgTkVUSUZfRl9BTExfVFNPKTsKKwllbHNlCisJCWRldi0+dmxhbl9mZWF0dXJlcyAmPSB+TkVUSUZfRl9BTExfVFNPOwogCi0JcmMgPSBldGh0b29sX29wX3NldF9mbGFncyhkZXYsIGRhdGEsIEVUSF9GTEFHX1JYSEFTSCB8IEVUSF9GTEFHX1JYVkxBTiB8Ci0JCQkJICBFVEhfRkxBR19UWFZMQU4pOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCi0JaWYgKCghIShkYXRhICYgRVRIX0ZMQUdfUlhWTEFOKSAhPQorCWlmICgoISEoZmVhdHVyZXMgJiBORVRJRl9GX0hXX1ZMQU5fUlgpICE9CiAJICAgICEhKGJwLT5yeF9tb2RlICYgQk5YMl9FTUFDX1JYX01PREVfS0VFUF9WTEFOX1RBRykpICYmCiAJICAgIG5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQlibngyX25ldGlmX3N0b3AoYnAsIGZhbHNlKTsKKwkJZGV2LT5mZWF0dXJlcyA9IGZlYXR1cmVzOwogCQlibngyX3NldF9yeF9tb2RlKGRldik7CiAJCWJueDJfZndfc3luYyhicCwgQk5YMl9EUlZfTVNHX0NPREVfS0VFUF9WTEFOX1VQREFURSwgMCwgMSk7CiAJCWJueDJfbmV0aWZfc3RhcnQoYnAsIGZhbHNlKTsKKwkJcmV0dXJuIDE7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC03NTk1LDE4ICs3NTU0LDExIEBACiAJLnNldF9yaW5ncGFyYW0JCT0gYm54Ml9zZXRfcmluZ3BhcmFtLAogCS5nZXRfcGF1c2VwYXJhbQkJPSBibngyX2dldF9wYXVzZXBhcmFtLAogCS5zZXRfcGF1c2VwYXJhbQkJPSBibngyX3NldF9wYXVzZXBhcmFtLAotCS5nZXRfcnhfY3N1bQkJPSBibngyX2dldF9yeF9jc3VtLAotCS5zZXRfcnhfY3N1bQkJPSBibngyX3NldF9yeF9jc3VtLAotCS5zZXRfdHhfY3N1bQkJPSBibngyX3NldF90eF9jc3VtLAotCS5zZXRfc2cJCQk9IGV0aHRvb2xfb3Bfc2V0X3NnLAotCS5zZXRfdHNvCQk9IGJueDJfc2V0X3RzbywKIAkuc2VsZl90ZXN0CQk9IGJueDJfc2VsZl90ZXN0LAogCS5nZXRfc3RyaW5ncwkJPSBibngyX2dldF9zdHJpbmdzLAotCS5waHlzX2lkCQk9IGJueDJfcGh5c19pZCwKKwkuc2V0X3BoeXNfaWQJCT0gYm54Ml9zZXRfcGh5c19pZCwKIAkuZ2V0X2V0aHRvb2xfc3RhdHMJPSBibngyX2dldF9ldGh0b29sX3N0YXRzLAogCS5nZXRfc3NldF9jb3VudAkJPSBibngyX2dldF9zc2V0X2NvdW50LAotCS5zZXRfZmxhZ3MJCT0gYm54Ml9zZXRfZmxhZ3MsCi0JLmdldF9mbGFncwkJPSBldGh0b29sX29wX2dldF9mbGFncywKIH07CiAKIC8qIENhbGxlZCB3aXRoIHJ0bmxfbG9jayAqLwpAQCAtODExOCw4ICs4MDcwLDYgQEAKIAlicC0+dHhfcmluZ19zaXplID0gTUFYX1RYX0RFU0NfQ05UOwogCWJueDJfc2V0X3J4X3Jpbmdfc2l6ZShicCwgMjU1KTsKIAotCWJwLT5yeF9jc3VtID0gMTsKLQogCWJwLT50eF9xdWlja19jb25zX3RyaXBfaW50ID0gMjsKIAlicC0+dHhfcXVpY2tfY29uc190cmlwID0gMjA7CiAJYnAtPnR4X3RpY2tzX2ludCA9IDE4OwpAQCAtODMxMSwxNyArODI2MSwxNCBAQAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gYm54Ml9jaGFuZ2VfbWFjX2FkZHIsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IGJueDJfY2hhbmdlX210dSwKKwkubmRvX2ZpeF9mZWF0dXJlcwk9IGJueDJfZml4X2ZlYXR1cmVzLAorCS5uZG9fc2V0X2ZlYXR1cmVzCT0gYm54Ml9zZXRfZmVhdHVyZXMsCiAJLm5kb190eF90aW1lb3V0CQk9IGJueDJfdHhfdGltZW91dCwKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gcG9sbF9ibngyLAogI2VuZGlmCiB9OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgdmxhbl9mZWF0dXJlc19hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZsYWdzKQotewotCWRldi0+dmxhbl9mZWF0dXJlcyB8PSBmbGFnczsKLX0KLQogc3RhdGljIGludCBfX2RldmluaXQKIGJueDJfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CkBAIC04MzYxLDIwICs4MzA4LDE3IEBACiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGJwLT5tYWNfYWRkciwgNik7CiAJbWVtY3B5KGRldi0+cGVybV9hZGRyLCBicC0+bWFjX2FkZHIsIDYpOwogCi0JZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1NHIHwgTkVUSUZfRl9HUk8gfAotCQkJIE5FVElGX0ZfUlhIQVNIOwotCXZsYW5fZmVhdHVyZXNfYWRkKGRldiwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9TRyk7Ci0JaWYgKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA5KSB7Ci0JCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUFY2X0NTVU07Ci0JCXZsYW5fZmVhdHVyZXNfYWRkKGRldiwgTkVUSUZfRl9JUFY2X0NTVU0pOwotCX0KLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWDsKLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU09fRUNOOwotCXZsYW5fZmVhdHVyZXNfYWRkKGRldiwgTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTT19FQ04pOwotCWlmIChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwOSkgewotCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKLQkJdmxhbl9mZWF0dXJlc19hZGQoZGV2LCBORVRJRl9GX1RTTzYpOwotCX0KKwlkZXYtPmh3X2ZlYXR1cmVzID0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9TRyB8CisJCU5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU09fRUNOIHwKKwkJTkVUSUZfRl9SWEhBU0ggfCBORVRJRl9GX1JYQ1NVTTsKKworCWlmIChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwOSkKKwkJZGV2LT5od19mZWF0dXJlcyB8PSBORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfVFNPNjsKKworCWRldi0+dmxhbl9mZWF0dXJlcyA9IGRldi0+aHdfZmVhdHVyZXM7CisJZGV2LT5od19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlg7CisJZGV2LT5mZWF0dXJlcyB8PSBkZXYtPmh3X2ZlYXR1cmVzOworCiAJaWYgKChyYyA9IHJlZ2lzdGVyX25ldGRldihkZXYpKSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZVxuIik7CiAJCWdvdG8gZXJyb3I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmggYi9kcml2ZXJzL25ldC9ibngyLmgKaW5kZXggNjgwMjA0NS4uYmYzNzFmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuaApAQCAtNjc1NCw4ICs2NzU0LDYgQEAKIAl1MzIJCQlyeF9tYXhfcmluZ19pZHg7CiAJdTMyCQkJcnhfbWF4X3BnX3JpbmdfaWR4OwogCi0JdTMyCQkJcnhfY3N1bTsKLQogCS8qIFRYIGNvbnN0YW50cyAqLwogCWludAkJdHhfcmluZ19zaXplOwogCXUzMgkJdHhfd2FrZV90aHJlc2g7CkBAIC02OTIyLDYgKzY5MjAsNyBAQAogCXU4CQkJbnVtX3R4X3JpbmdzOwogCXU4CQkJbnVtX3J4X3JpbmdzOwogCisJdTMyIAkJCWxlZHNfc2F2ZTsKIAl1MzIJCQlpZGxlX2Noa19zdGF0dXNfaWR4OwogCiAjaWZkZWYgQkNNX0NOSUMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4LmggYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeC5oCmluZGV4IGUwZmNhNzAuLjY2OGE1NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4LmgKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnguaApAQCAtMSw2ICsxLDYgQEAKIC8qIGJueDJ4Lmg6IEJyb2FkY29tIEV2ZXJlc3QgbmV0d29yayBkcml2ZXIuCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTAgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDExIEJyb2FkY29tIENvcnBvcmF0aW9uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yMiw4ICsyMiw4IEBACiAgKiAoeW91IHdpbGwgbmVlZCB0byByZWJvb3QgYWZ0ZXJ3YXJkcykgKi8KIC8qICNkZWZpbmUgQk5YMlhfU1RPUF9PTl9FUlJPUiAqLwogCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTiAgICAgICIxLjYyLjExLTAiCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURSAgICAgICIyMDExLzAxLzMxIgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04gICAgICAiMS42Mi4xMi0wIgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUgICAgICAiMjAxMS8wMy8yMCIKICNkZWZpbmUgQk5YMlhfQkNfVkVSICAgICAgICAgICAgMHgwNDAyMDAKIAogI2RlZmluZSBCTlgyWF9NVUxUSV9RVUVVRQpAQCAtNDczLDcgKzQ3Myw4IEBACiAjZGVmaW5lIE5VTV9SWF9CRAkJCShSWF9ERVNDX0NOVCAqIE5VTV9SWF9SSU5HUykKICNkZWZpbmUgTUFYX1JYX0JECQkJKE5VTV9SWF9CRCAtIDEpCiAjZGVmaW5lIE1BWF9SWF9BVkFJTAkJCShNQVhfUlhfREVTQ19DTlQgKiBOVU1fUlhfUklOR1MgLSAyKQotI2RlZmluZSBNSU5fUlhfQVZBSUwJCQkxMjgKKyNkZWZpbmUgTUlOX1JYX1NJWkVfVFBBCQkJNzIKKyNkZWZpbmUgTUlOX1JYX1NJWkVfTk9OVFBBCQkxMAogI2RlZmluZSBJTklUX0pVTUJPX1JYX1JJTkdfU0laRQkJTUFYX1JYX0FWQUlMCiAjZGVmaW5lIElOSVRfUlhfUklOR19TSVpFCQlNQVhfUlhfQVZBSUwKICNkZWZpbmUgTkVYVF9SWF9JRFgoeCkJCSgoKCh4KSAmIFJYX0RFU0NfTUFTSykgPT0gXApAQCAtODkzLDYgKzg5NCwyMiBAQAogCSgmYnAtPmRlZl9zdGF0dXNfYmxrLT5zcF9zYi5cCiAJaW5kZXhfdmFsdWVzW0hDX1NQX0lOREVYX0VRX0NPTlNdKQogCisvKiBUaGlzIGlzIGEgZGF0YSB0aGF0IHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgYSBsaW5rIHJlcG9ydCBtZXNzYWdlLgorICogV2Ugd2lsbCBrZWVwIHRoZSBkYXRhIHVzZWQgZm9yIHRoZSBsYXN0IGxpbmsgcmVwb3J0IGluIG9yZGVyCisgKiB0byBwcmV2ZW50IHJlcG9ydGluZyB0aGUgc2FtZSBsaW5rIHBhcmFtZXRlcnMgdHdpY2UuCisgKi8KK3N0cnVjdCBibngyeF9saW5rX3JlcG9ydF9kYXRhIHsKKwl1MTYgbGluZV9zcGVlZDsJCQkvKiBFZmZlY3RpdmUgbGluZSBzcGVlZCAqLworCXVuc2lnbmVkIGxvbmcgbGlua19yZXBvcnRfZmxhZ3M7LyogQk5YMlhfTElOS19SRVBPUlRfWFhYIGZsYWdzICovCit9OworCitlbnVtIHsKKwlCTlgyWF9MSU5LX1JFUE9SVF9GRCwJCS8qIEZ1bGwgRFVQTEVYICovCisJQk5YMlhfTElOS19SRVBPUlRfTElOS19ET1dOLAorCUJOWDJYX0xJTktfUkVQT1JUX1JYX0ZDX09OLAorCUJOWDJYX0xJTktfUkVQT1JUX1RYX0ZDX09OLAorfTsKKwogc3RydWN0IGJueDJ4IHsKIAkvKiBGaWVsZHMgdXNlZCBpbiB0aGUgdHggYW5kIGludHIvbmFwaSBwZXJmb3JtYW5jZSBwYXRocwogCSAqIGFyZSBncm91cGVkIHRvZ2V0aGVyIGluIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cnVjdHVyZQpAQCAtOTE4LDcgKzkzNSw2IEBACiAKIAlpbnQJCQl0eF9yaW5nX3NpemU7CiAKLQl1MzIJCQlyeF9jc3VtOwogLyogTDIgaGVhZGVyIHNpemUgKyAyKlZMQU5zICg4IGJ5dGVzKSArIExMQyBTTkFQICg4IGJ5dGVzKSAqLwogI2RlZmluZSBFVEhfT1ZSRUhFQUQJCShFVEhfSExFTiArIDggKyA4KQogI2RlZmluZSBFVEhfTUlOX1BBQ0tFVF9TSVpFCQk2MApAQCAtMTAyNiw2ICsxMDQyLDkgQEAKIAogCXN0cnVjdCBsaW5rX3BhcmFtcwlsaW5rX3BhcmFtczsKIAlzdHJ1Y3QgbGlua192YXJzCWxpbmtfdmFyczsKKwl1MzIJCQlsaW5rX2NudDsKKwlzdHJ1Y3QgYm54MnhfbGlua19yZXBvcnRfZGF0YSBsYXN0X3JlcG9ydGVkX2xpbms7CisKIAlzdHJ1Y3QgbWRpb19pZl9pbmZvCW1kaW87CiAKIAlzdHJ1Y3QgYm54MnhfY29tbW9uCWNvbW1vbjsKQEAgLTEyMjMsNiArMTI0MiwxMCBAQAogCS8qIERDQlggTmVnb3RpYXRpb24gcmVzdWx0cyAqLwogCXN0cnVjdCBkY2J4X2ZlYXR1cmVzCQkJZGNieF9sb2NhbF9mZWF0OwogCXUzMgkJCQkJZGNieF9lcnJvcjsKKyNpZmRlZiBCQ01fRENCTkwKKwlzdHJ1Y3QgZGNieF9mZWF0dXJlcwkJCWRjYnhfcmVtb3RlX2ZlYXQ7CisJdTMyCQkJCQlkY2J4X3JlbW90ZV9mbGFnczsKKyNlbmRpZgogCXUzMgkJCQkJcGVuZGluZ19tYXg7CiB9OwogCkBAIC0xNDQyLDYgKzE0NjUsOCBAQAogI2RlZmluZSBXQUlUX1JBTVJPRF9QT0xMCTB4MDEKICNkZWZpbmUgV0FJVF9SQU1ST0RfQ09NTU9OCTB4MDIKIAordm9pZCBibngyeF9yZWFkX21mX2NmZyhzdHJ1Y3QgYm54MnggKmJwKTsKKwogLyogZG1hZSAqLwogdm9pZCBibngyeF9yZWFkX2RtYWUoc3RydWN0IGJueDJ4ICpicCwgdTMyIHNyY19hZGRyLCB1MzIgbGVuMzIpOwogdm9pZCBibngyeF93cml0ZV9kbWFlKHN0cnVjdCBibngyeCAqYnAsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHUzMiBkc3RfYWRkciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2Ntbi5jIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmMKaW5kZXggMTY1ODFkZi4uZDViZDM1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmMKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmMKQEAgLTEsNiArMSw2IEBACiAvKiBibngyeF9jbW4uYzogQnJvYWRjb20gRXZlcmVzdCBuZXR3b3JrIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTEgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIxLDEyICsyMSw1NiBAQAogI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CiAjaW5jbHVkZSA8bmV0L2lwNl9jaGVja3N1bS5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlICJibngyeF9jbW4uaCIKIAogI2luY2x1ZGUgImJueDJ4X2luaXQuaCIKIAogc3RhdGljIGludCBibngyeF9zZXR1cF9pcnFzKHN0cnVjdCBibngyeCAqYnApOwogCisvKioKKyAqIGJueDJ4X2J6X2ZwIC0gemVybyBjb250ZW50IG9mIHRoZSBmYXN0cGF0aCBzdHJ1Y3R1cmUuCisgKgorICogQGJwOgkJZHJpdmVyIGhhbmRsZQorICogQGluZGV4OglmYXN0cGF0aCBpbmRleCB0byBiZSB6ZXJvZWQKKyAqCisgKiBNYWtlcyBzdXJlIHRoZSBjb250ZW50cyBvZiB0aGUgYnAtPmZwW2luZGV4XS5uYXBpIGlzIGtlcHQKKyAqIGludGFjdC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X2J6X2ZwKHN0cnVjdCBibngyeCAqYnAsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpbmRleF07CisJc3RydWN0IG5hcGlfc3RydWN0IG9yaWdfbmFwaSA9IGZwLT5uYXBpOworCS8qIGJ6ZXJvIGJueDJ4X2Zhc3RwYXRoIGNvbnRlbnRzICovCisJbWVtc2V0KGZwLCAwLCBzaXplb2YoKmZwKSk7CisKKwkvKiBSZXN0b3JlIHRoZSBOQVBJIG9iamVjdCBhcyBpdCBoYXMgYmVlbiBhbHJlYWR5IGluaXRpYWxpemVkICovCisJZnAtPm5hcGkgPSBvcmlnX25hcGk7Cit9CisKKy8qKgorICogYm54MnhfbW92ZV9mcCAtIG1vdmUgY29udGVudCBvZiB0aGUgZmFzdHBhdGggc3RydWN0dXJlLgorICoKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKKyAqIEBmcm9tOglzb3VyY2UgRlAgaW5kZXgKKyAqIEB0bzoJCWRlc3RpbmF0aW9uIEZQIGluZGV4CisgKgorICogTWFrZXMgc3VyZSB0aGUgY29udGVudHMgb2YgdGhlIGJwLT5mcFt0b10ubmFwaSBpcyBrZXB0CisgKiBpbnRhY3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9tb3ZlX2ZwKHN0cnVjdCBibngyeCAqYnAsIGludCBmcm9tLCBpbnQgdG8pCit7CisJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcm9tX2ZwID0gJmJwLT5mcFtmcm9tXTsKKwlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKnRvX2ZwID0gJmJwLT5mcFt0b107CisJc3RydWN0IG5hcGlfc3RydWN0IG9yaWdfbmFwaSA9IHRvX2ZwLT5uYXBpOworCS8qIE1vdmUgYm54MnhfZmFzdHBhdGggY29udGVudHMgKi8KKwltZW1jcHkodG9fZnAsIGZyb21fZnAsIHNpemVvZigqdG9fZnApKTsKKwl0b19mcC0+aW5kZXggPSB0bzsKKworCS8qIFJlc3RvcmUgdGhlIE5BUEkgb2JqZWN0IGFzIGl0IGhhcyBiZWVuIGFscmVhZHkgaW5pdGlhbGl6ZWQgKi8KKwl0b19mcC0+bmFwaSA9IG9yaWdfbmFwaTsKK30KKwogLyogZnJlZSBza2IgaW4gdGhlIHBhY2tldCByaW5nIGF0IHBvcyBpZHgKICAqIHJldHVybiBpZHggb2YgbGFzdCBiZCBmcmVlZAogICovCkBAIC04Nyw3ICsxMzEsNyBAQAogCiAJLyogcmVsZWFzZSBza2IgKi8KIAlXQVJOX09OKCFza2IpOwotCWRldl9rZnJlZV9za2Ioc2tiKTsKKwlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCXR4X2J1Zi0+Zmlyc3RfYmQgPSAwOwogCXR4X2J1Zi0+c2tiID0gTlVMTDsKIApAQCAtMjY1LDEzICszMDksMTUgQEAKICAqLwogI2RlZmluZSBUUEFfVFNUQU1QX09QVF9MRU4JMTIKIC8qKgotICogQ2FsY3VsYXRlIHRoZSBhcHByb3hpbWF0ZSB2YWx1ZSBvZiB0aGUgTVNTIGZvciB0aGlzCi0gKiBhZ2dyZWdhdGlvbiB1c2luZyB0aGUgZmlyc3QgcGFja2V0IG9mIGl0LgorICogYm54Mnhfc2V0X2xyb19tc3MgLSBjYWxjdWxhdGUgdGhlIGFwcHJveGltYXRlIHZhbHVlIG9mIHRoZSBNU1MKICAqCi0gKiBAcGFyYW0gYnAKLSAqIEBwYXJhbSBwYXJzaW5nX2ZsYWdzIFBhcnNpbmcgZmxhZ3MgZnJvbSB0aGUgU1RBUlQgQ1FFCi0gKiBAcGFyYW0gbGVuX29uX2JkIFRvdGFsIGxlbmd0aCBvZiB0aGUgZmlyc3QgcGFja2V0IGZvciB0aGUKLSAqCQkgICAgIGFnZ3JlZ2F0aW9uLgorICogQGJwOgkJCWRyaXZlciBoYW5kbGUKKyAqIEBwYXJzaW5nX2ZsYWdzOglwYXJzaW5nIGZsYWdzIGZyb20gdGhlIFNUQVJUIENRRQorICogQGxlbl9vbl9iZDoJCXRvdGFsIGxlbmd0aCBvZiB0aGUgZmlyc3QgcGFja2V0IGZvciB0aGUKKyAqCQkJYWdncmVnYXRpb24uCisgKgorICogQXBwcm94aW1hdGUgdmFsdWUgb2YgdGhlIE1TUyBmb3IgdGhpcyBhZ2dyZWdhdGlvbiBjYWxjdWxhdGVkIHVzaW5nCisgKiB0aGUgZmlyc3QgcGFja2V0IG9mIGl0LgogICovCiBzdGF0aWMgaW5saW5lIHUxNiBibngyeF9zZXRfbHJvX21zcyhzdHJ1Y3QgYm54MnggKmJwLCB1MTYgcGFyc2luZ19mbGFncywKIAkJCQkgICAgdTE2IGxlbl9vbl9iZCkKQEAgLTQxOSw3ICs0NjUsNyBAQAogCQl9IGVsc2UgewogCQkJRFAoTkVUSUZfTVNHX1JYX1NUQVRVUywgIkZhaWxlZCB0byBhbGxvY2F0ZSBuZXcgcGFnZXMiCiAJCQkgICAiIC0gZHJvcHBpbmcgcGFja2V0IVxuIik7Ci0JCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQl9CiAKIApAQCAtNjQwLDcgKzY4Niw3IEBACiAKIAkJCXNrYl9jaGVja3N1bV9ub25lX2Fzc2VydChza2IpOwogCi0JCQlpZiAoYnAtPnJ4X2NzdW0pIHsKKwkJCWlmIChicC0+ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSB7CiAJCQkJaWYgKGxpa2VseShCTlgyWF9SWF9DU1VNX09LKGNxZSkpKQogCQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCQkJCWVsc2UKQEAgLTc1OCwzNSArODA0LDExOSBAQAogCXJldHVybiBsaW5lX3NwZWVkOwogfQogCisvKioKKyAqIGJueDJ4X2ZpbGxfcmVwb3J0X2RhdGEgLSBmaWxsIGxpbmsgcmVwb3J0IGRhdGEgdG8gcmVwb3J0CisgKgorICogQGJwOgkJZHJpdmVyIGhhbmRsZQorICogQGRhdGE6CWxpbmsgc3RhdGUgdG8gdXBkYXRlCisgKgorICogSXQgdXNlcyBhIG5vbmUtYXRvbWljIGJpdCBvcGVyYXRpb25zIGJlY2F1c2UgaXMgY2FsbGVkIHVuZGVyIHRoZSBtdXRleC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X2ZpbGxfcmVwb3J0X2RhdGEoc3RydWN0IGJueDJ4ICpicCwKKwkJCQkJICBzdHJ1Y3QgYm54MnhfbGlua19yZXBvcnRfZGF0YSAqZGF0YSkKK3sKKwl1MTYgbGluZV9zcGVlZCA9IGJueDJ4X2dldF9tZl9zcGVlZChicCk7CisKKwltZW1zZXQoZGF0YSwgMCwgc2l6ZW9mKCpkYXRhKSk7CisKKwkvKiBGaWxsIHRoZSByZXBvcnQgZGF0YTogZWZlY3RpdmUgbGluZSBzcGVlZCAqLworCWRhdGEtPmxpbmVfc3BlZWQgPSBsaW5lX3NwZWVkOworCisJLyogTGluayBpcyBkb3duICovCisJaWYgKCFicC0+bGlua192YXJzLmxpbmtfdXAgfHwgKGJwLT5mbGFncyAmIE1GX0ZVTkNfRElTKSkKKwkJX19zZXRfYml0KEJOWDJYX0xJTktfUkVQT1JUX0xJTktfRE9XTiwKKwkJCSAgJmRhdGEtPmxpbmtfcmVwb3J0X2ZsYWdzKTsKKworCS8qIEZ1bGwgRFVQTEVYICovCisJaWYgKGJwLT5saW5rX3ZhcnMuZHVwbGV4ID09IERVUExFWF9GVUxMKQorCQlfX3NldF9iaXQoQk5YMlhfTElOS19SRVBPUlRfRkQsICZkYXRhLT5saW5rX3JlcG9ydF9mbGFncyk7CisKKwkvKiBSeCBGbG93IENvbnRyb2wgaXMgT04gKi8KKwlpZiAoYnAtPmxpbmtfdmFycy5mbG93X2N0cmwgJiBCTlgyWF9GTE9XX0NUUkxfUlgpCisJCV9fc2V0X2JpdChCTlgyWF9MSU5LX1JFUE9SVF9SWF9GQ19PTiwgJmRhdGEtPmxpbmtfcmVwb3J0X2ZsYWdzKTsKKworCS8qIFR4IEZsb3cgQ29udHJvbCBpcyBPTiAqLworCWlmIChicC0+bGlua192YXJzLmZsb3dfY3RybCAmIEJOWDJYX0ZMT1dfQ1RSTF9UWCkKKwkJX19zZXRfYml0KEJOWDJYX0xJTktfUkVQT1JUX1RYX0ZDX09OLCAmZGF0YS0+bGlua19yZXBvcnRfZmxhZ3MpOworfQorCisvKioKKyAqIGJueDJ4X2xpbmtfcmVwb3J0IC0gcmVwb3J0IGxpbmsgc3RhdHVzIHRvIE9TLgorICoKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKKyAqCisgKiBDYWxscyB0aGUgX19ibngyeF9saW5rX3JlcG9ydCgpIHVuZGVyIHRoZSBzYW1lIGxvY2tpbmcgc2NoZW1lCisgKiBhcyBhIGxpbmsvUEhZIHN0YXRlIG1hbmFnaW5nIGNvZGUgdG8gZW5zdXJlIGEgY29uc2lzdGVudCBsaW5rCisgKiByZXBvcnRpbmcuCisgKi8KKwogdm9pZCBibngyeF9saW5rX3JlcG9ydChzdHJ1Y3QgYm54MnggKmJwKQogewotCWlmIChicC0+ZmxhZ3MgJiBNRl9GVU5DX0RJUykgeworCWJueDJ4X2FjcXVpcmVfcGh5X2xvY2soYnApOworCV9fYm54MnhfbGlua19yZXBvcnQoYnApOworCWJueDJ4X3JlbGVhc2VfcGh5X2xvY2soYnApOworfQorCisvKioKKyAqIF9fYm54MnhfbGlua19yZXBvcnQgLSByZXBvcnQgbGluayBzdGF0dXMgdG8gT1MuCisgKgorICogQGJwOgkJZHJpdmVyIGhhbmRsZQorICoKKyAqIE5vbmUgYXRvbWljIGlubWxlbWVudGF0aW9uLgorICogU2hvdWxkIGJlIGNhbGxlZCB1bmRlciB0aGUgcGh5X2xvY2suCisgKi8KK3ZvaWQgX19ibngyeF9saW5rX3JlcG9ydChzdHJ1Y3QgYm54MnggKmJwKQoreworCXN0cnVjdCBibngyeF9saW5rX3JlcG9ydF9kYXRhIGN1cl9kYXRhOworCisJLyogcmVyZWFkIG1mX2NmZyAqLworCWlmICghQ0hJUF9JU19FMShicCkpCisJCWJueDJ4X3JlYWRfbWZfY2ZnKGJwKTsKKworCS8qIFJlYWQgdGhlIGN1cnJlbnQgbGluayByZXBvcnQgaW5mbyAqLworCWJueDJ4X2ZpbGxfcmVwb3J0X2RhdGEoYnAsICZjdXJfZGF0YSk7CisKKwkvKiBEb24ndCByZXBvcnQgbGluayBkb3duIG9yIGV4YWN0bHkgdGhlIHNhbWUgbGluayBzdGF0dXMgdHdpY2UgKi8KKwlpZiAoIW1lbWNtcCgmY3VyX2RhdGEsICZicC0+bGFzdF9yZXBvcnRlZF9saW5rLCBzaXplb2YoY3VyX2RhdGEpKSB8fAorCSAgICAodGVzdF9iaXQoQk5YMlhfTElOS19SRVBPUlRfTElOS19ET1dOLAorCQkgICAgICAmYnAtPmxhc3RfcmVwb3J0ZWRfbGluay5saW5rX3JlcG9ydF9mbGFncykgJiYKKwkgICAgIHRlc3RfYml0KEJOWDJYX0xJTktfUkVQT1JUX0xJTktfRE9XTiwKKwkJICAgICAgJmN1cl9kYXRhLmxpbmtfcmVwb3J0X2ZsYWdzKSkpCisJCXJldHVybjsKKworCWJwLT5saW5rX2NudCsrOworCisJLyogV2UgYXJlIGdvaW5nIHRvIHJlcG9ydCBhIG5ldyBsaW5rIHBhcmFtZXRlcnMgbm93IC0KKwkgKiByZW1lbWJlciB0aGUgY3VycmVudCBkYXRhIGZvciB0aGUgbmV4dCB0aW1lLgorCSAqLworCW1lbWNweSgmYnAtPmxhc3RfcmVwb3J0ZWRfbGluaywgJmN1cl9kYXRhLCBzaXplb2YoY3VyX2RhdGEpKTsKKworCWlmICh0ZXN0X2JpdChCTlgyWF9MSU5LX1JFUE9SVF9MSU5LX0RPV04sCisJCSAgICAgJmN1cl9kYXRhLmxpbmtfcmVwb3J0X2ZsYWdzKSkgewogCQluZXRpZl9jYXJyaWVyX29mZihicC0+ZGV2KTsKIAkJbmV0ZGV2X2VycihicC0+ZGV2LCAiTklDIExpbmsgaXMgRG93blxuIik7CiAJCXJldHVybjsKLQl9Ci0KLQlpZiAoYnAtPmxpbmtfdmFycy5saW5rX3VwKSB7Ci0JCXUxNiBsaW5lX3NwZWVkOwotCi0JCWlmIChicC0+c3RhdGUgPT0gQk5YMlhfU1RBVEVfT1BFTikKLQkJCW5ldGlmX2NhcnJpZXJfb24oYnAtPmRldik7CisJfSBlbHNlIHsKKwkJbmV0aWZfY2Fycmllcl9vbihicC0+ZGV2KTsKIAkJbmV0ZGV2X2luZm8oYnAtPmRldiwgIk5JQyBMaW5rIGlzIFVwLCAiKTsKKwkJcHJfY29udCgiJWQgTWJwcyAiLCBjdXJfZGF0YS5saW5lX3NwZWVkKTsKIAotCQlsaW5lX3NwZWVkID0gYm54MnhfZ2V0X21mX3NwZWVkKGJwKTsKLQotCQlwcl9jb250KCIlZCBNYnBzICIsIGxpbmVfc3BlZWQpOwotCi0JCWlmIChicC0+bGlua192YXJzLmR1cGxleCA9PSBEVVBMRVhfRlVMTCkKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChCTlgyWF9MSU5LX1JFUE9SVF9GRCwKKwkJCQkgICAgICAgJmN1cl9kYXRhLmxpbmtfcmVwb3J0X2ZsYWdzKSkKIAkJCXByX2NvbnQoImZ1bGwgZHVwbGV4Iik7CiAJCWVsc2UKIAkJCXByX2NvbnQoImhhbGYgZHVwbGV4Iik7CiAKLQkJaWYgKGJwLT5saW5rX3ZhcnMuZmxvd19jdHJsICE9IEJOWDJYX0ZMT1dfQ1RSTF9OT05FKSB7Ci0JCQlpZiAoYnAtPmxpbmtfdmFycy5mbG93X2N0cmwgJiBCTlgyWF9GTE9XX0NUUkxfUlgpIHsKKwkJLyogSGFuZGxlIHRoZSBGQyBhdCB0aGUgZW5kIHNvIHRoYXQgb25seSB0aGVzZSBmbGFncyB3b3VsZCBiZQorCQkgKiBwb3NzaWJseSBzZXQuIFRoaXMgd2F5IHdlIG1heSBlYXNpbHkgY2hlY2sgaWYgdGhlcmUgaXMgbm8gRkMKKwkJICogZW5hYmxlZC4KKwkJICovCisJCWlmIChjdXJfZGF0YS5saW5rX3JlcG9ydF9mbGFncykgeworCQkJaWYgKHRlc3RfYml0KEJOWDJYX0xJTktfUkVQT1JUX1JYX0ZDX09OLAorCQkJCSAgICAgJmN1cl9kYXRhLmxpbmtfcmVwb3J0X2ZsYWdzKSkgewogCQkJCXByX2NvbnQoIiwgcmVjZWl2ZSAiKTsKLQkJCQlpZiAoYnAtPmxpbmtfdmFycy5mbG93X2N0cmwgJgotCQkJCSAgICBCTlgyWF9GTE9XX0NUUkxfVFgpCisJCQkJaWYgKHRlc3RfYml0KEJOWDJYX0xJTktfUkVQT1JUX1RYX0ZDX09OLAorCQkJCSAgICAgJmN1cl9kYXRhLmxpbmtfcmVwb3J0X2ZsYWdzKSkKIAkJCQkJcHJfY29udCgiJiB0cmFuc21pdCAiKTsKIAkJCX0gZWxzZSB7CiAJCQkJcHJfY29udCgiLCB0cmFuc21pdCAiKTsKQEAgLTc5NCw2MiArOTI0LDkgQEAKIAkJCXByX2NvbnQoImZsb3cgY29udHJvbCBPTiIpOwogCQl9CiAJCXByX2NvbnQoIlxuIik7Ci0KLQl9IGVsc2UgeyAvKiBsaW5rX2Rvd24gKi8KLQkJbmV0aWZfY2Fycmllcl9vZmYoYnAtPmRldik7Ci0JCW5ldGRldl9lcnIoYnAtPmRldiwgIk5JQyBMaW5rIGlzIERvd25cbiIpOwogCX0KIH0KIAotLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGFjdHVhbGx5IGFsbG9jYXRlZCBCRHMgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGJueDJ4X2FsbG9jX3J4X2JkcyhzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwLAotCQkJCSAgICAgIGludCByeF9yaW5nX3NpemUpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IGZwLT5icDsKLQl1MTYgcmluZ19wcm9kLCBjcWVfcmluZ19wcm9kOwotCWludCBpOwotCi0JZnAtPnJ4X2NvbXBfY29ucyA9IDA7Ci0JY3FlX3JpbmdfcHJvZCA9IHJpbmdfcHJvZCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IHJ4X3Jpbmdfc2l6ZTsgaSsrKSB7Ci0JCWlmIChibngyeF9hbGxvY19yeF9za2IoYnAsIGZwLCByaW5nX3Byb2QpIDwgMCkgewotCQkJQk5YMlhfRVJSKCJ3YXMgb25seSBhYmxlIHRvIGFsbG9jYXRlICIKLQkJCQkgICIlZCByeCBza2JzIG9uIHF1ZXVlWyVkXVxuIiwgaSwgZnAtPmluZGV4KTsKLQkJCWZwLT5ldGhfcV9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKys7Ci0JCQlicmVhazsKLQkJfQotCQlyaW5nX3Byb2QgPSBORVhUX1JYX0lEWChyaW5nX3Byb2QpOwotCQljcWVfcmluZ19wcm9kID0gTkVYVF9SQ1FfSURYKGNxZV9yaW5nX3Byb2QpOwotCQlXQVJOX09OKHJpbmdfcHJvZCA8PSBpKTsKLQl9Ci0KLQlmcC0+cnhfYmRfcHJvZCA9IHJpbmdfcHJvZDsKLQkvKiBMaW1pdCB0aGUgQ1FFIHByb2R1Y2VyIGJ5IHRoZSBDUUUgcmluZyBzaXplICovCi0JZnAtPnJ4X2NvbXBfcHJvZCA9IG1pbl90KHUxNiwgTlVNX1JDUV9SSU5HUypSQ1FfREVTQ19DTlQsCi0JCQkgICAgICAgY3FlX3JpbmdfcHJvZCk7Ci0JZnAtPnJ4X3BrdCA9IGZwLT5yeF9jYWxscyA9IDA7Ci0KLQlyZXR1cm4gaTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X2FsbG9jX3J4X2JkX3Jpbmcoc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCkKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gZnAtPmJwOwotCWludCByeF9yaW5nX3NpemUgPSBicC0+cnhfcmluZ19zaXplID8gYnAtPnJ4X3Jpbmdfc2l6ZSA6Ci0JCQkJCSAgICAgIE1BWF9SWF9BVkFJTC9icC0+bnVtX3F1ZXVlczsKLQotCXJ4X3Jpbmdfc2l6ZSA9IG1heF90KGludCwgTUlOX1JYX0FWQUlMLCByeF9yaW5nX3NpemUpOwotCi0JYm54MnhfYWxsb2NfcnhfYmRzKGZwLCByeF9yaW5nX3NpemUpOwotCi0JLyogV2FybmluZyEKLQkgKiB0aGlzIHdpbGwgZ2VuZXJhdGUgYW4gaW50ZXJydXB0ICh0byB0aGUgVFNUT1JNKQotCSAqIG11c3Qgb25seSBiZSBkb25lIGFmdGVyIGNoaXAgaXMgaW5pdGlhbGl6ZWQKLQkgKi8KLQlibngyeF91cGRhdGVfcnhfcHJvZChicCwgZnAsIGZwLT5yeF9iZF9wcm9kLCBmcC0+cnhfY29tcF9wcm9kLAotCQkJICAgICBmcC0+cnhfc2dlX3Byb2QpOwotfQotCiB2b2lkIGJueDJ4X2luaXRfcnhfcmluZ3Moc3RydWN0IGJueDJ4ICpicCkKIHsKIAlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOwpAQCAtODU4LDYgKzkzNSw3IEBACiAJdTE2IHJpbmdfcHJvZDsKIAlpbnQgaSwgajsKIAorCS8qIEFsbG9jYXRlIFRQQSByZXNvdXJjZXMgKi8KIAlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaikgewogCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtqXTsKIApAQCAtODY1LDYgKzk0Myw3IEBACiAJCSAgICJtdHUgJWQgIHJ4X2J1Zl9zaXplICVkXG4iLCBicC0+ZGV2LT5tdHUsIGZwLT5yeF9idWZfc2l6ZSk7CiAKIAkJaWYgKCFmcC0+ZGlzYWJsZV90cGEpIHsKKwkJCS8qIEZpbGwgdGhlIHBlci1hZ2dyZWdhdGlvbiBwb29sICovCiAJCQlmb3IgKGkgPSAwOyBpIDwgbWF4X2FnZ19xdWV1ZXM7IGkrKykgewogCQkJCWZwLT50cGFfcG9vbFtpXS5za2IgPQogCQkJCSAgIG5ldGRldl9hbGxvY19za2IoYnAtPmRldiwgZnAtPnJ4X2J1Zl9zaXplKTsKQEAgLTkxOSwxMyArOTk4LDEzIEBACiAKIAkJZnAtPnJ4X2JkX2NvbnMgPSAwOwogCi0JCWJueDJ4X3NldF9uZXh0X3BhZ2VfcnhfYmQoZnApOwotCi0JCS8qIENRIHJpbmcgKi8KLQkJYm54Mnhfc2V0X25leHRfcGFnZV9yeF9jcShmcCk7Ci0KLQkJLyogQWxsb2NhdGUgQkRzIGFuZCBpbml0aWFsaXplIEJEIHJpbmcgKi8KLQkJYm54MnhfYWxsb2NfcnhfYmRfcmluZyhmcCk7CisJCS8qIEFjdGl2YXRlIEJEIHJpbmcgKi8KKwkJLyogV2FybmluZyEKKwkJICogdGhpcyB3aWxsIGdlbmVyYXRlIGFuIGludGVycnVwdCAodG8gdGhlIFRTVE9STSkKKwkJICogbXVzdCBvbmx5IGJlIGRvbmUgYWZ0ZXIgY2hpcCBpcyBpbml0aWFsaXplZAorCQkgKi8KKwkJYm54MnhfdXBkYXRlX3J4X3Byb2QoYnAsIGZwLCBmcC0+cnhfYmRfcHJvZCwgZnAtPnJ4X2NvbXBfcHJvZCwKKwkJCQkgICAgIGZwLT5yeF9zZ2VfcHJvZCk7CiAKIAkJaWYgKGogIT0gMCkKIAkJCWNvbnRpbnVlOwpAQCAtOTU5LDI3ICsxMDM4LDQwIEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBibngyeF9mcmVlX3J4X2JkcyhzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBmcC0+YnA7CisJaW50IGk7CisKKwkvKiByaW5nIHdhc24ndCBhbGxvY2F0ZWQgKi8KKwlpZiAoZnAtPnJ4X2J1Zl9yaW5nID09IE5VTEwpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fUlhfQkQ7IGkrKykgeworCQlzdHJ1Y3Qgc3dfcnhfYmQgKnJ4X2J1ZiA9ICZmcC0+cnhfYnVmX3JpbmdbaV07CisJCXN0cnVjdCBza19idWZmICpza2IgPSByeF9idWYtPnNrYjsKKworCQlpZiAoc2tiID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlkbWFfdW5tYXBfc2luZ2xlKCZicC0+cGRldi0+ZGV2LAorCQkJCSBkbWFfdW5tYXBfYWRkcihyeF9idWYsIG1hcHBpbmcpLAorCQkJCSBmcC0+cnhfYnVmX3NpemUsIERNQV9GUk9NX0RFVklDRSk7CisKKwkJcnhfYnVmLT5za2IgPSBOVUxMOworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJfQorfQorCiBzdGF0aWMgdm9pZCBibngyeF9mcmVlX3J4X3NrYnMoc3RydWN0IGJueDJ4ICpicCkKIHsKLQlpbnQgaSwgajsKKwlpbnQgajsKIAogCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBqKSB7CiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2pdOwogCi0JCWZvciAoaSA9IDA7IGkgPCBOVU1fUlhfQkQ7IGkrKykgewotCQkJc3RydWN0IHN3X3J4X2JkICpyeF9idWYgPSAmZnAtPnJ4X2J1Zl9yaW5nW2ldOwotCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJ4X2J1Zi0+c2tiOworCQlibngyeF9mcmVlX3J4X2JkcyhmcCk7CiAKLQkJCWlmIChza2IgPT0gTlVMTCkKLQkJCQljb250aW51ZTsKLQotCQkJZG1hX3VubWFwX3NpbmdsZSgmYnAtPnBkZXYtPmRldiwKLQkJCQkJIGRtYV91bm1hcF9hZGRyKHJ4X2J1ZiwgbWFwcGluZyksCi0JCQkJCSBmcC0+cnhfYnVmX3NpemUsIERNQV9GUk9NX0RFVklDRSk7Ci0KLQkJCXJ4X2J1Zi0+c2tiID0gTlVMTDsKLQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJfQogCQlpZiAoIWZwLT5kaXNhYmxlX3RwYSkKIAkJCWJueDJ4X2ZyZWVfdHBhX3Bvb2woYnAsIGZwLCBDSElQX0lTX0UxKGJwKSA/CiAJCQkJCSAgICBFVEhfTUFYX0FHR1JFR0FUSU9OX1FVRVVFU19FMSA6CkBAIC0xMzQ1LDIxICsxNDM3LDI1IEBACiAKIAlicC0+c3RhdGUgPSBCTlgyWF9TVEFURV9PUEVOSU5HX1dBSVQ0X0xPQUQ7CiAKKwkvKiBTZXQgdGhlIGluaXRpYWwgbGluayByZXBvcnRlZCBzdGF0ZSB0byBsaW5rIGRvd24gKi8KKwlibngyeF9hY3F1aXJlX3BoeV9sb2NrKGJwKTsKKwltZW1zZXQoJmJwLT5sYXN0X3JlcG9ydGVkX2xpbmssIDAsIHNpemVvZihicC0+bGFzdF9yZXBvcnRlZF9saW5rKSk7CisJX19zZXRfYml0KEJOWDJYX0xJTktfUkVQT1JUX0xJTktfRE9XTiwKKwkJJmJwLT5sYXN0X3JlcG9ydGVkX2xpbmsubGlua19yZXBvcnRfZmxhZ3MpOworCWJueDJ4X3JlbGVhc2VfcGh5X2xvY2soYnApOworCiAJLyogbXVzdCBiZSBjYWxsZWQgYmVmb3JlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBIVyBpbml0ICovCiAJYm54MnhfaWx0X3NldF9pbmZvKGJwKTsKIAorCS8qIHplcm8gZmFzdHBhdGggc3RydWN0dXJlcyBwcmVzZXJ2aW5nIGludmFyaWFudHMgbGlrZSBuYXBpIHdoaWNoIGFyZQorCSAqIGFsbG9jYXRlZCBvbmx5IG9uY2UKKwkgKi8KKwlmb3JfZWFjaF9xdWV1ZShicCwgaSkKKwkJYm54MnhfYnpfZnAoYnAsIGkpOworCiAJLyogU2V0IHRoZSByZWNlaXZlIHF1ZXVlcyBidWZmZXIgc2l6ZSAqLwogCWJueDJ4X3NldF9yeF9idWZfc2l6ZShicCk7CiAKLQlpZiAoYm54MnhfYWxsb2NfbWVtKGJwKSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyYyA9IGJueDJ4X3NldF9yZWFsX251bV9xdWV1ZXMoYnApOwotCWlmIChyYykgewotCQlCTlgyWF9FUlIoIlVuYWJsZSB0byBzZXQgcmVhbF9udW1fcXVldWVzXG4iKTsKLQkJZ290byBsb2FkX2Vycm9yMDsKLQl9Ci0KIAlmb3JfZWFjaF9xdWV1ZShicCwgaSkKIAkJYm54MnhfZnAoYnAsIGksIGRpc2FibGVfdHBhKSA9CiAJCQkJCSgoYnAtPmZsYWdzICYgVFBBX0VOQUJMRV9GTEFHKSA9PSAwKTsKQEAgLTEzNjgsNiArMTQ2NCwyMCBAQAogCS8qIFdlIGRvbid0IHdhbnQgVFBBIG9uIEZDb0UgTDIgcmluZyAqLwogCWJueDJ4X2Zjb2UoYnAsIGRpc2FibGVfdHBhKSA9IDE7CiAjZW5kaWYKKworCWlmIChibngyeF9hbGxvY19tZW0oYnApKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIEFzIGxvbmcgYXMgYm54MnhfYWxsb2NfbWVtKCkgbWF5IHBvc3NpYmx5IHVwZGF0ZQorCSAqIGJwLT5udW1fcXVldWVzLCBibngyeF9zZXRfcmVhbF9udW1fcXVldWVzKCkgc2hvdWxkIGFsd2F5cworCSAqIGNvbWUgYWZ0ZXIgaXQuCisJICovCisJcmMgPSBibngyeF9zZXRfcmVhbF9udW1fcXVldWVzKGJwKTsKKwlpZiAocmMpIHsKKwkJQk5YMlhfRVJSKCJVbmFibGUgdG8gc2V0IHJlYWxfbnVtX3F1ZXVlc1xuIik7CisJCWdvdG8gbG9hZF9lcnJvcjA7CisJfQorCiAJYm54MnhfbmFwaV9lbmFibGUoYnApOwogCiAJLyogU2VuZCBMT0FEX1JFUVVFU1QgY29tbWFuZCB0byBNQ1AKQEAgLTE5NzYsMTIgKzIwODYsMTEgQEAKIH0KIAogLyoqCi0gKiBVcGRhdGUgUEJEIGluIEdTTyBjYXNlLgorICogYm54Mnhfc2V0X3BiZF9nc28gLSB1cGRhdGUgUEJEIGluIEdTTyBjYXNlLgogICoKLSAqIEBwYXJhbSBza2IKLSAqIEBwYXJhbSB0eF9zdGFydF9iZAotICogQHBhcmFtIHBiZAotICogQHBhcmFtIHhtaXRfdHlwZQorICogQHNrYjoJcGFja2V0IHNrYgorICogQHBiZDoJcGFyc2UgQkQKKyAqIEB4bWl0X3R5cGU6CXhtaXQgZmxhZ3MKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X3NldF9wYmRfZ3NvKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgICBzdHJ1Y3QgZXRoX3R4X3BhcnNlX2JkX2UxeCAqcGJkLApAQCAtMjAwOCwxMyArMjExNywxNCBAQAogfQogCiAvKioKKyAqIGJueDJ4X3NldF9wYmRfY3N1bV9lMiAtIHVwZGF0ZSBQQkQgd2l0aCBjaGVja3N1bSBhbmQgcmV0dXJuIGhlYWRlciBsZW5ndGgKICAqCi0gKiBAcGFyYW0gc2tiCi0gKiBAcGFyYW0gdHhfc3RhcnRfYmQKLSAqIEBwYXJhbSBwYmRfZTIKLSAqIEBwYXJhbSB4bWl0X3R5cGUKKyAqIEBicDoJCQlkcml2ZXIgaGFuZGxlCisgKiBAc2tiOgkJcGFja2V0IHNrYgorICogQHBhcnNpbmdfZGF0YToJZGF0YSB0byBiZSB1cGRhdGVkCisgKiBAeG1pdF90eXBlOgkJeG1pdCBmbGFncwogICoKLSAqIEByZXR1cm4gaGVhZGVyIGxlbgorICogNTc3MTIgcmVsYXRlZAogICovCiBzdGF0aWMgaW5saW5lICB1OCBibngyeF9zZXRfcGJkX2NzdW1fZTIoc3RydWN0IGJueDJ4ICpicCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAl1MzIgKnBhcnNpbmdfZGF0YSwgdTMyIHhtaXRfdHlwZSkKQEAgLTIwMzksMTMgKzIxNDksMTIgQEAKIH0KIAogLyoqCisgKiBibngyeF9zZXRfcGJkX2NzdW0gLSB1cGRhdGUgUEJEIHdpdGggY2hlY2tzdW0gYW5kIHJldHVybiBoZWFkZXIgbGVuZ3RoCiAgKgotICogQHBhcmFtIHNrYgotICogQHBhcmFtIHR4X3N0YXJ0X2JkCi0gKiBAcGFyYW0gcGJkCi0gKiBAcGFyYW0geG1pdF90eXBlCi0gKgotICogQHJldHVybiBIZWFkZXIgbGVuZ3RoCisgKiBAYnA6CQlkcml2ZXIgaGFuZGxlCisgKiBAc2tiOglwYWNrZXQgc2tiCisgKiBAcGJkOglwYXJzZSBCRCB0byBiZSB1cGRhdGVkCisgKiBAeG1pdF90eXBlOgl4bWl0IGZsYWdzCiAgKi8KIHN0YXRpYyBpbmxpbmUgdTggYm54Mnhfc2V0X3BiZF9jc3VtKHN0cnVjdCBibngyeCAqYnAsIHN0cnVjdCBza19idWZmICpza2IsCiAJc3RydWN0IGV0aF90eF9wYXJzZV9iZF9lMXggKnBiZCwKQEAgLTIzOTMsNiArMjUwMiwyMzIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgYm54MnhfZnJlZV9mcF9tZW1fYXQoc3RydWN0IGJueDJ4ICpicCwgaW50IGZwX2luZGV4KQoreworCXVuaW9uIGhvc3RfaGNfc3RhdHVzX2Jsb2NrICpzYiA9ICZibngyeF9mcChicCwgZnBfaW5kZXgsIHN0YXR1c19ibGspOworCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ZwX2luZGV4XTsKKworCS8qIENvbW1vbiAqLworI2lmZGVmIEJDTV9DTklDCisJaWYgKElTX0ZDT0VfSURYKGZwX2luZGV4KSkgeworCQltZW1zZXQoc2IsIDAsIHNpemVvZih1bmlvbiBob3N0X2hjX3N0YXR1c19ibG9jaykpOworCQlmcC0+c3RhdHVzX2Jsa19tYXBwaW5nID0gMDsKKworCX0gZWxzZSB7CisjZW5kaWYKKwkJLyogc3RhdHVzIGJsb2NrcyAqLworCQlpZiAoQ0hJUF9JU19FMihicCkpCisJCQlCTlgyWF9QQ0lfRlJFRShzYi0+ZTJfc2IsCisJCQkJICAgICAgIGJueDJ4X2ZwKGJwLCBmcF9pbmRleCwKKwkJCQkJCXN0YXR1c19ibGtfbWFwcGluZyksCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaG9zdF9oY19zdGF0dXNfYmxvY2tfZTIpKTsKKwkJZWxzZQorCQkJQk5YMlhfUENJX0ZSRUUoc2ItPmUxeF9zYiwKKwkJCQkgICAgICAgYm54MnhfZnAoYnAsIGZwX2luZGV4LAorCQkJCQkJc3RhdHVzX2Jsa19tYXBwaW5nKSwKKwkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBob3N0X2hjX3N0YXR1c19ibG9ja19lMXgpKTsKKyNpZmRlZiBCQ01fQ05JQworCX0KKyNlbmRpZgorCS8qIFJ4ICovCisJaWYgKCFza2lwX3J4X3F1ZXVlKGJwLCBmcF9pbmRleCkpIHsKKwkJYm54MnhfZnJlZV9yeF9iZHMoZnApOworCisJCS8qIGZhc3RwYXRoIHJ4IHJpbmdzOiByeF9idWYgcnhfZGVzYyByeF9jb21wICovCisJCUJOWDJYX0ZSRUUoYm54MnhfZnAoYnAsIGZwX2luZGV4LCByeF9idWZfcmluZykpOworCQlCTlgyWF9QQ0lfRlJFRShibngyeF9mcChicCwgZnBfaW5kZXgsIHJ4X2Rlc2NfcmluZyksCisJCQkgICAgICAgYm54MnhfZnAoYnAsIGZwX2luZGV4LCByeF9kZXNjX21hcHBpbmcpLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZXRoX3J4X2JkKSAqIE5VTV9SWF9CRCk7CisKKwkJQk5YMlhfUENJX0ZSRUUoYm54MnhfZnAoYnAsIGZwX2luZGV4LCByeF9jb21wX3JpbmcpLAorCQkJICAgICAgIGJueDJ4X2ZwKGJwLCBmcF9pbmRleCwgcnhfY29tcF9tYXBwaW5nKSwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGV0aF9mYXN0X3BhdGhfcnhfY3FlKSAqCisJCQkgICAgICAgTlVNX1JDUV9CRCk7CisKKwkJLyogU0dFIHJpbmcgKi8KKwkJQk5YMlhfRlJFRShibngyeF9mcChicCwgZnBfaW5kZXgsIHJ4X3BhZ2VfcmluZykpOworCQlCTlgyWF9QQ0lfRlJFRShibngyeF9mcChicCwgZnBfaW5kZXgsIHJ4X3NnZV9yaW5nKSwKKwkJCSAgICAgICBibngyeF9mcChicCwgZnBfaW5kZXgsIHJ4X3NnZV9tYXBwaW5nKSwKKwkJCSAgICAgICBCQ01fUEFHRV9TSVpFICogTlVNX1JYX1NHRV9QQUdFUyk7CisJfQorCisJLyogVHggKi8KKwlpZiAoIXNraXBfdHhfcXVldWUoYnAsIGZwX2luZGV4KSkgeworCQkvKiBmYXN0cGF0aCB0eCByaW5nczogdHhfYnVmIHR4X2Rlc2MgKi8KKwkJQk5YMlhfRlJFRShibngyeF9mcChicCwgZnBfaW5kZXgsIHR4X2J1Zl9yaW5nKSk7CisJCUJOWDJYX1BDSV9GUkVFKGJueDJ4X2ZwKGJwLCBmcF9pbmRleCwgdHhfZGVzY19yaW5nKSwKKwkJCSAgICAgICBibngyeF9mcChicCwgZnBfaW5kZXgsIHR4X2Rlc2NfbWFwcGluZyksCisJCQkgICAgICAgc2l6ZW9mKHVuaW9uIGV0aF90eF9iZF90eXBlcykgKiBOVU1fVFhfQkQpOworCX0KKwkvKiBlbmQgb2YgZmFzdHBhdGggKi8KK30KKwordm9pZCBibngyeF9mcmVlX2ZwX21lbShzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBpOworCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCQlibngyeF9mcmVlX2ZwX21lbV9hdChicCwgaSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc2Jfc2hvcnRjdXRzKHN0cnVjdCBibngyeCAqYnAsIGludCBpbmRleCkKK3sKKwl1bmlvbiBob3N0X2hjX3N0YXR1c19ibG9jayBzdGF0dXNfYmxrID0gYm54MnhfZnAoYnAsIGluZGV4LCBzdGF0dXNfYmxrKTsKKwlpZiAoQ0hJUF9JU19FMihicCkpIHsKKwkJYm54MnhfZnAoYnAsIGluZGV4LCBzYl9pbmRleF92YWx1ZXMpID0KKwkJCShfX2xlMTYgKilzdGF0dXNfYmxrLmUyX3NiLT5zYi5pbmRleF92YWx1ZXM7CisJCWJueDJ4X2ZwKGJwLCBpbmRleCwgc2JfcnVubmluZ19pbmRleCkgPQorCQkJKF9fbGUxNiAqKXN0YXR1c19ibGsuZTJfc2ItPnNiLnJ1bm5pbmdfaW5kZXg7CisJfSBlbHNlIHsKKwkJYm54MnhfZnAoYnAsIGluZGV4LCBzYl9pbmRleF92YWx1ZXMpID0KKwkJCShfX2xlMTYgKilzdGF0dXNfYmxrLmUxeF9zYi0+c2IuaW5kZXhfdmFsdWVzOworCQlibngyeF9mcChicCwgaW5kZXgsIHNiX3J1bm5pbmdfaW5kZXgpID0KKwkJCShfX2xlMTYgKilzdGF0dXNfYmxrLmUxeF9zYi0+c2IucnVubmluZ19pbmRleDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYm54MnhfYWxsb2NfZnBfbWVtX2F0KHN0cnVjdCBibngyeCAqYnAsIGludCBpbmRleCkKK3sKKwl1bmlvbiBob3N0X2hjX3N0YXR1c19ibG9jayAqc2I7CisJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaW5kZXhdOworCWludCByaW5nX3NpemUgPSAwOworCisJLyogaWYgcnhfcmluZ19zaXplIHNwZWNpZmllZCAtIHVzZSBpdCAqLworCWludCByeF9yaW5nX3NpemUgPSBicC0+cnhfcmluZ19zaXplID8gYnAtPnJ4X3Jpbmdfc2l6ZSA6CisJCQkgICBNQVhfUlhfQVZBSUwvYnAtPm51bV9xdWV1ZXM7CisKKwkvKiBhbGxvY2F0ZSBhdCBsZWFzdCBudW1iZXIgb2YgYnVmZmVycyByZXF1aXJlZCBieSBGVyAqLworCXJ4X3Jpbmdfc2l6ZSA9IG1heF90KGludCwgZnAtPmRpc2FibGVfdHBhID8gTUlOX1JYX1NJWkVfTk9OVFBBIDoKKwkJCQkJCSAgICBNSU5fUlhfU0laRV9UUEEsCisJCQkJICByeF9yaW5nX3NpemUpOworCisJYm54MnhfZnAoYnAsIGluZGV4LCBicCkgPSBicDsKKwlibngyeF9mcChicCwgaW5kZXgsIGluZGV4KSA9IGluZGV4OworCisJLyogQ29tbW9uICovCisJc2IgPSAmYm54MnhfZnAoYnAsIGluZGV4LCBzdGF0dXNfYmxrKTsKKyNpZmRlZiBCQ01fQ05JQworCWlmICghSVNfRkNPRV9JRFgoaW5kZXgpKSB7CisjZW5kaWYKKwkJLyogc3RhdHVzIGJsb2NrcyAqLworCQlpZiAoQ0hJUF9JU19FMihicCkpCisJCQlCTlgyWF9QQ0lfQUxMT0Moc2ItPmUyX3NiLAorCQkJCSZibngyeF9mcChicCwgaW5kZXgsIHN0YXR1c19ibGtfbWFwcGluZyksCisJCQkJc2l6ZW9mKHN0cnVjdCBob3N0X2hjX3N0YXR1c19ibG9ja19lMikpOworCQllbHNlCisJCQlCTlgyWF9QQ0lfQUxMT0Moc2ItPmUxeF9zYiwKKwkJCQkmYm54MnhfZnAoYnAsIGluZGV4LCBzdGF0dXNfYmxrX21hcHBpbmcpLAorCQkJICAgIHNpemVvZihzdHJ1Y3QgaG9zdF9oY19zdGF0dXNfYmxvY2tfZTF4KSk7CisjaWZkZWYgQkNNX0NOSUMKKwl9CisjZW5kaWYKKwlzZXRfc2Jfc2hvcnRjdXRzKGJwLCBpbmRleCk7CisKKwkvKiBUeCAqLworCWlmICghc2tpcF90eF9xdWV1ZShicCwgaW5kZXgpKSB7CisJCS8qIGZhc3RwYXRoIHR4IHJpbmdzOiB0eF9idWYgdHhfZGVzYyAqLworCQlCTlgyWF9BTExPQyhibngyeF9mcChicCwgaW5kZXgsIHR4X2J1Zl9yaW5nKSwKKwkJCQlzaXplb2Yoc3RydWN0IHN3X3R4X2JkKSAqIE5VTV9UWF9CRCk7CisJCUJOWDJYX1BDSV9BTExPQyhibngyeF9mcChicCwgaW5kZXgsIHR4X2Rlc2NfcmluZyksCisJCQkJJmJueDJ4X2ZwKGJwLCBpbmRleCwgdHhfZGVzY19tYXBwaW5nKSwKKwkJCQlzaXplb2YodW5pb24gZXRoX3R4X2JkX3R5cGVzKSAqIE5VTV9UWF9CRCk7CisJfQorCisJLyogUnggKi8KKwlpZiAoIXNraXBfcnhfcXVldWUoYnAsIGluZGV4KSkgeworCQkvKiBmYXN0cGF0aCByeCByaW5nczogcnhfYnVmIHJ4X2Rlc2MgcnhfY29tcCAqLworCQlCTlgyWF9BTExPQyhibngyeF9mcChicCwgaW5kZXgsIHJ4X2J1Zl9yaW5nKSwKKwkJCQlzaXplb2Yoc3RydWN0IHN3X3J4X2JkKSAqIE5VTV9SWF9CRCk7CisJCUJOWDJYX1BDSV9BTExPQyhibngyeF9mcChicCwgaW5kZXgsIHJ4X2Rlc2NfcmluZyksCisJCQkJJmJueDJ4X2ZwKGJwLCBpbmRleCwgcnhfZGVzY19tYXBwaW5nKSwKKwkJCQlzaXplb2Yoc3RydWN0IGV0aF9yeF9iZCkgKiBOVU1fUlhfQkQpOworCisJCUJOWDJYX1BDSV9BTExPQyhibngyeF9mcChicCwgaW5kZXgsIHJ4X2NvbXBfcmluZyksCisJCQkJJmJueDJ4X2ZwKGJwLCBpbmRleCwgcnhfY29tcF9tYXBwaW5nKSwKKwkJCQlzaXplb2Yoc3RydWN0IGV0aF9mYXN0X3BhdGhfcnhfY3FlKSAqCisJCQkJTlVNX1JDUV9CRCk7CisKKwkJLyogU0dFIHJpbmcgKi8KKwkJQk5YMlhfQUxMT0MoYm54MnhfZnAoYnAsIGluZGV4LCByeF9wYWdlX3JpbmcpLAorCQkJCXNpemVvZihzdHJ1Y3Qgc3dfcnhfcGFnZSkgKiBOVU1fUlhfU0dFKTsKKwkJQk5YMlhfUENJX0FMTE9DKGJueDJ4X2ZwKGJwLCBpbmRleCwgcnhfc2dlX3JpbmcpLAorCQkJCSZibngyeF9mcChicCwgaW5kZXgsIHJ4X3NnZV9tYXBwaW5nKSwKKwkJCQlCQ01fUEFHRV9TSVpFICogTlVNX1JYX1NHRV9QQUdFUyk7CisJCS8qIFJYIEJEIHJpbmcgKi8KKwkJYm54Mnhfc2V0X25leHRfcGFnZV9yeF9iZChmcCk7CisKKwkJLyogQ1EgcmluZyAqLworCQlibngyeF9zZXRfbmV4dF9wYWdlX3J4X2NxKGZwKTsKKworCQkvKiBCRHMgKi8KKwkJcmluZ19zaXplID0gYm54MnhfYWxsb2NfcnhfYmRzKGZwLCByeF9yaW5nX3NpemUpOworCQlpZiAocmluZ19zaXplIDwgcnhfcmluZ19zaXplKQorCQkJZ290byBhbGxvY19tZW1fZXJyOworCX0KKworCXJldHVybiAwOworCisvKiBoYW5kbGVzIGxvdyBtZW1vcnkgY2FzZXMgKi8KK2FsbG9jX21lbV9lcnI6CisJQk5YMlhfRVJSKCJVbmFibGUgdG8gYWxsb2NhdGUgZnVsbCBtZW1vcnkgZm9yIHF1ZXVlICVkIChzaXplICVkKVxuIiwKKwkJCQkJCWluZGV4LCByaW5nX3NpemUpOworCS8qIEZXIHdpbGwgZHJvcCBhbGwgcGFja2V0cyBpZiBxdWV1ZSBpcyBub3QgYmlnIGVub3VnaCwKKwkgKiBJbiB0aGVzZSBjYXNlcyB3ZSBkaXNhYmxlIHRoZSBxdWV1ZQorCSAqIE1pbiBzaXplIGRpZmVyZW50IGZvciBUUEEgYW5kIG5vbi1UUEEgcXVldWVzCisJICovCisJaWYgKHJpbmdfc2l6ZSA8IChmcC0+ZGlzYWJsZV90cGEgPworCQkJCU1JTl9SWF9TSVpFX1RQQSA6IE1JTl9SWF9TSVpFX05PTlRQQSkpIHsKKwkJCS8qIHJlbGVhc2UgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhpcyBxdWV1ZSAqLworCQkJYm54MnhfZnJlZV9mcF9tZW1fYXQoYnAsIGluZGV4KTsKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGJueDJ4X2FsbG9jX2ZwX21lbShzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBpOworCisJLyoqCisJICogMS4gQWxsb2NhdGUgRlAgZm9yIGxlYWRpbmcgLSBmYXRhbCBpZiBlcnJvcgorCSAqIDIuIHtDTklDfSBBbGxvY2F0ZSBGQ29FIEZQIC0gZmF0YWwgaWYgZXJyb3IKKwkgKiAzLiBBbGxvY2F0ZSBSU1MgLSBmaXggbnVtYmVyIG9mIHF1ZXVlcyBpZiBlcnJvcgorCSAqLworCisJLyogbGVhZGluZyAqLworCWlmIChibngyeF9hbGxvY19mcF9tZW1fYXQoYnAsIDApKQorCQlyZXR1cm4gLUVOT01FTTsKKyNpZmRlZiBCQ01fQ05JQworCS8qIEZDb0UgKi8KKwlpZiAoYm54MnhfYWxsb2NfZnBfbWVtX2F0KGJwLCBGQ09FX0lEWCkpCisJCXJldHVybiAtRU5PTUVNOworI2VuZGlmCisJLyogUlNTICovCisJZm9yX2VhY2hfbm9uZGVmYXVsdF9ldGhfcXVldWUoYnAsIGkpCisJCWlmIChibngyeF9hbGxvY19mcF9tZW1fYXQoYnAsIGkpKQorCQkJYnJlYWs7CisKKwkvKiBoYW5kbGUgbWVtb3J5IGZhaWx1cmVzICovCisJaWYgKGkgIT0gQk5YMlhfTlVNX0VUSF9RVUVVRVMoYnApKSB7CisJCWludCBkZWx0YSA9IEJOWDJYX05VTV9FVEhfUVVFVUVTKGJwKSAtIGk7CisKKwkJV0FSTl9PTihkZWx0YSA8IDApOworI2lmZGVmIEJDTV9DTklDCisJCS8qKgorCQkgKiBtb3ZlIG5vbiBldGggRlBzIG5leHQgdG8gbGFzdCBldGggRlAKKwkJICogbXVzdCBiZSBkb25lIGluIHRoYXQgb3JkZXIKKwkJICogRkNPRV9JRFggPCBGV0RfSURYIDwgT09PX0lEWAorCQkgKi8KKworCQkvKiBtb3ZlIEZDb0UgZnAgKi8KKwkJYm54MnhfbW92ZV9mcChicCwgRkNPRV9JRFgsIEZDT0VfSURYIC0gZGVsdGEpOworI2VuZGlmCisJCWJwLT5udW1fcXVldWVzIC09IGRlbHRhOworCQlCTlgyWF9FUlIoIkFkanVzdGVkIG51bSBvZiBxdWV1ZXMgZnJvbSAlZCB0byAlZFxuIiwKKwkJCSAgYnAtPm51bV9xdWV1ZXMgKyBkZWx0YSwgYnAtPm51bV9xdWV1ZXMpOworCX0KKworCXJldHVybiAwOworfQogCiBzdGF0aWMgaW50IGJueDJ4X3NldHVwX2lycXMoc3RydWN0IGJueDJ4ICpicCkKIHsKQEAgLTI0NTcsMTEgKzI3OTIsMjEgQEAKIAogfQogCitzdGF0aWMgaW50IGJueDJ4X3JlbG9hZF9pZl9ydW5uaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAodW5saWtlbHkoIW5ldGlmX3J1bm5pbmcoZGV2KSkpCisJCXJldHVybiAwOworCisJYm54MnhfbmljX3VubG9hZChicCwgVU5MT0FEX05PUk1BTCk7CisJcmV0dXJuIGJueDJ4X25pY19sb2FkKGJwLCBMT0FEX05PUk1BTCk7Cit9CisKIC8qIGNhbGxlZCB3aXRoIHJ0bmxfbG9jayAqLwogaW50IGJueDJ4X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IHJjID0gMDsKIAogCWlmIChicC0+cmVjb3Zlcnlfc3RhdGUgIT0gQk5YMlhfUkVDT1ZFUllfRE9ORSkgewogCQlwcmludGsoS0VSTl9FUlIgIkhhbmRsaW5nIHBhcml0eSBlcnJvciByZWNvdmVyeS4gVHJ5IGFnYWluIGxhdGVyXG4iKTsKQEAgLTI0NzgsMTIgKzI4MjMsNTUgQEAKIAkgKi8KIAlkZXYtPm10dSA9IG5ld19tdHU7CiAKLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7Ci0JCWJueDJ4X25pY191bmxvYWQoYnAsIFVOTE9BRF9OT1JNQUwpOwotCQlyYyA9IGJueDJ4X25pY19sb2FkKGJwLCBMT0FEX05PUk1BTCk7CisJcmV0dXJuIGJueDJ4X3JlbG9hZF9pZl9ydW5uaW5nKGRldik7Cit9CisKK3UzMiBibngyeF9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZlYXR1cmVzKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJLyogVFBBIHJlcXVpcmVzIFJ4IENTVU0gb2ZmbG9hZGluZyAqLworCWlmICghKGZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pIHx8IGJwLT5kaXNhYmxlX3RwYSkKKwkJZmVhdHVyZXMgJj0gfk5FVElGX0ZfTFJPOworCisJcmV0dXJuIGZlYXR1cmVzOworfQorCitpbnQgYm54Mnhfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgZmxhZ3MgPSBicC0+ZmxhZ3M7CisJYm9vbCBibngyeF9yZWxvYWQgPSBmYWxzZTsKKworCWlmIChmZWF0dXJlcyAmIE5FVElGX0ZfTFJPKQorCQlmbGFncyB8PSBUUEFfRU5BQkxFX0ZMQUc7CisJZWxzZQorCQlmbGFncyAmPSB+VFBBX0VOQUJMRV9GTEFHOworCisJaWYgKGZlYXR1cmVzICYgTkVUSUZfRl9MT09QQkFDSykgeworCQlpZiAoYnAtPmxpbmtfcGFyYW1zLmxvb3BiYWNrX21vZGUgIT0gTE9PUEJBQ0tfQk1BQykgeworCQkJYnAtPmxpbmtfcGFyYW1zLmxvb3BiYWNrX21vZGUgPSBMT09QQkFDS19CTUFDOworCQkJYm54MnhfcmVsb2FkID0gdHJ1ZTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChicC0+bGlua19wYXJhbXMubG9vcGJhY2tfbW9kZSAhPSBMT09QQkFDS19OT05FKSB7CisJCQlicC0+bGlua19wYXJhbXMubG9vcGJhY2tfbW9kZSA9IExPT1BCQUNLX05PTkU7CisJCQlibngyeF9yZWxvYWQgPSB0cnVlOworCQl9CiAJfQogCi0JcmV0dXJuIHJjOworCWlmIChmbGFncyBeIGJwLT5mbGFncykgeworCQlicC0+ZmxhZ3MgPSBmbGFnczsKKwkJYm54MnhfcmVsb2FkID0gdHJ1ZTsKKwl9CisKKwlpZiAoYm54MnhfcmVsb2FkKSB7CisJCWlmIChicC0+cmVjb3Zlcnlfc3RhdGUgPT0gQk5YMlhfUkVDT1ZFUllfRE9ORSkKKwkJCXJldHVybiBibngyeF9yZWxvYWRfaWZfcnVubmluZyhkZXYpOworCQkvKiBlbHNlOiBibngyeF9uaWNfbG9hZCgpIHdpbGwgYmUgY2FsbGVkIGF0IGVuZCBvZiByZWNvdmVyeSAqLworCX0KKworCXJldHVybiAwOwogfQogCiB2b2lkIGJueDJ4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2Ntbi5oIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmgKaW5kZXggZWYzN2I5OC4uMWEzNTQ1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmgKQEAgLTEsNiArMSw2IEBACiAvKiBibngyeF9jbW4uaDogQnJvYWRjb20gRXZlcmVzdCBuZXR3b3JrIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTEgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTI1LDI2MCArMjUsMjc3IEBACiAKIGV4dGVybiBpbnQgbnVtX3F1ZXVlczsKIAorLyoqKioqKioqKioqKioqKioqKioqKioqKiBNYWNyb3MgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEJOWDJYX1BDSV9GUkVFKHgsIHksIHNpemUpIFwKKwlkbyB7IFwKKwkJaWYgKHgpIHsgXAorCQkJZG1hX2ZyZWVfY29oZXJlbnQoJmJwLT5wZGV2LT5kZXYsIHNpemUsICh2b2lkICopeCwgeSk7IFwKKwkJCXggPSBOVUxMOyBcCisJCQl5ID0gMDsgXAorCQl9IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIEJOWDJYX0ZSRUUoeCkgXAorCWRvIHsgXAorCQlpZiAoeCkgeyBcCisJCQlrZnJlZSgodm9pZCAqKXgpOyBcCisJCQl4ID0gTlVMTDsgXAorCQl9IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIEJOWDJYX1BDSV9BTExPQyh4LCB5LCBzaXplKSBcCisJZG8geyBcCisJCXggPSBkbWFfYWxsb2NfY29oZXJlbnQoJmJwLT5wZGV2LT5kZXYsIHNpemUsIHksIEdGUF9LRVJORUwpOyBcCisJCWlmICh4ID09IE5VTEwpIFwKKwkJCWdvdG8gYWxsb2NfbWVtX2VycjsgXAorCQltZW1zZXQoKHZvaWQgKil4LCAwLCBzaXplKTsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgQk5YMlhfQUxMT0MoeCwgc2l6ZSkgXAorCWRvIHsgXAorCQl4ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsgXAorCQlpZiAoeCA9PSBOVUxMKSBcCisJCQlnb3RvIGFsbG9jX21lbV9lcnI7IFwKKwl9IHdoaWxlICgwKQorCiAvKioqKioqKioqKioqKioqKioqKioqKiogSW50ZXJmYWNlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgRnVuY3Rpb25zIHRoYXQgbmVlZCB0byBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIGRyaXZlciB2ZXJzaW9uCiAgKi8KIAogLyoqCi0gKiBJbml0aWFsaXplIGxpbmsgcGFyYW1ldGVycyBzdHJ1Y3R1cmUgdmFyaWFibGVzLgorICogYm54MnhfaW5pdGlhbF9waHlfaW5pdCAtIGluaXRpYWxpemUgbGluayBwYXJhbWV0ZXJzIHN0cnVjdHVyZSB2YXJpYWJsZXMuCiAgKgotICogQHBhcmFtIGJwCi0gKiBAcGFyYW0gbG9hZF9tb2RlCi0gKgotICogQHJldHVybiB1OAorICogQGJwOgkJZHJpdmVyIGhhbmRsZQorICogQGxvYWRfbW9kZToJY3VycmVudCBtb2RlCiAgKi8KIHU4IGJueDJ4X2luaXRpYWxfcGh5X2luaXQoc3RydWN0IGJueDJ4ICpicCwgaW50IGxvYWRfbW9kZSk7CiAKIC8qKgotICogQ29uZmlndXJlIGh3IGFjY29yZGluZyB0byBsaW5rIHBhcmFtZXRlcnMgc3RydWN0dXJlLgorICogYm54MnhfbGlua19zZXQgLSBjb25maWd1cmUgaHcgYWNjb3JkaW5nIHRvIGxpbmsgcGFyYW1ldGVycyBzdHJ1Y3R1cmUuCiAgKgotICogQHBhcmFtIGJwCisgKiBAYnA6CQlkcml2ZXIgaGFuZGxlCiAgKi8KIHZvaWQgYm54MnhfbGlua19zZXQoc3RydWN0IGJueDJ4ICpicCk7CiAKIC8qKgotICogUXVlcnkgbGluayBzdGF0dXMKKyAqIGJueDJ4X2xpbmtfdGVzdCAtIHF1ZXJ5IGxpbmsgc3RhdHVzLgogICoKLSAqIEBwYXJhbSBicAotICogQHBhcmFtIGlzX3NlcmRlcworICogQGJwOgkJZHJpdmVyIGhhbmRsZQorICogQGlzX3NlcmRlczoJYm9vbAogICoKLSAqIEByZXR1cm4gMCAtIGxpbmsgaXMgVVAKKyAqIFJldHVybnMgMCBpZiBsaW5rIGlzIFVQLgogICovCiB1OCBibngyeF9saW5rX3Rlc3Qoc3RydWN0IGJueDJ4ICpicCwgdTggaXNfc2VyZGVzKTsKIAogLyoqCi0gKiBIYW5kbGVzIGxpbmsgc3RhdHVzIGNoYW5nZQorICogYm54MnhfX2xpbmtfc3RhdHVzX3VwZGF0ZSAtIGhhbmRsZXMgbGluayBzdGF0dXMgY2hhbmdlLgogICoKLSAqIEBwYXJhbSBicAorICogQGJwOgkJZHJpdmVyIGhhbmRsZQogICovCiB2b2lkIGJueDJ4X19saW5rX3N0YXR1c191cGRhdGUoc3RydWN0IGJueDJ4ICpicCk7CiAKIC8qKgotICogUmVwb3J0IGxpbmsgc3RhdHVzIHRvIHVwcGVyIGxheWVyCisgKiBibngyeF9saW5rX3JlcG9ydCAtIHJlcG9ydCBsaW5rIHN0YXR1cyB0byB1cHBlciBsYXllci4KICAqCi0gKiBAcGFyYW0gYnAKLSAqCi0gKiBAcmV0dXJuIGludAorICogQGJwOgkJZHJpdmVyIGhhbmRsZQogICovCiB2b2lkIGJueDJ4X2xpbmtfcmVwb3J0KHN0cnVjdCBibngyeCAqYnApOwogCisvKiBOb25lLWF0b21pYyB2ZXJzaW9uIG9mIGJueDJ4X2xpbmtfcmVwb3J0KCkgKi8KK3ZvaWQgX19ibngyeF9saW5rX3JlcG9ydChzdHJ1Y3QgYm54MnggKmJwKTsKKwogLyoqCi0gKiBjYWxjdWxhdGVzIE1GIHNwZWVkIGFjY29yZGluZyB0byBjdXJyZW50IGxpbmVzcGVlZCBhbmQgTUYKLSAqIGNvbmZpZ3VyYXRpb24KKyAqIGJueDJ4X2dldF9tZl9zcGVlZCAtIGNhbGN1bGF0ZSBNRiBzcGVlZC4KICAqCi0gKiBAcGFyYW0gYnAKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKICAqCi0gKiBAcmV0dXJuIHUxNgorICogVGFrZXMgaW50byBhY2NvdW50IGN1cnJlbnQgbGluZXNwZWVkIGFuZCBNRiBjb25maWd1cmF0aW9uLgogICovCiB1MTYgYm54MnhfZ2V0X21mX3NwZWVkKHN0cnVjdCBibngyeCAqYnApOwogCiAvKioKLSAqIE1TSS1YIHNsb3dwYXRoIGludGVycnVwdCBoYW5kbGVyCisgKiBibngyeF9tc2l4X3NwX2ludCAtIE1TSS1YIHNsb3dwYXRoIGludGVycnVwdCBoYW5kbGVyCiAgKgotICogQHBhcmFtIGlycQotICogQHBhcmFtIGRldl9pbnN0YW5jZQotICoKLSAqIEByZXR1cm4gaXJxcmV0dXJuX3QKKyAqIEBpcnE6CQlpcnEgbnVtYmVyCisgKiBAZGV2X2luc3RhbmNlOglwcml2YXRlIGluc3RhbmNlCiAgKi8KIGlycXJldHVybl90IGJueDJ4X21zaXhfc3BfaW50KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSk7CiAKIC8qKgotICogbm9uIE1TSS1YIGludGVycnVwdCBoYW5kbGVyCisgKiBibngyeF9pbnRlcnJ1cHQgLSBub24gTVNJLVggaW50ZXJydXB0IGhhbmRsZXIKICAqCi0gKiBAcGFyYW0gaXJxCi0gKiBAcGFyYW0gZGV2X2luc3RhbmNlCi0gKgotICogQHJldHVybiBpcnFyZXR1cm5fdAorICogQGlycToJCWlycSBudW1iZXIKKyAqIEBkZXZfaW5zdGFuY2U6CXByaXZhdGUgaW5zdGFuY2UKICAqLwogaXJxcmV0dXJuX3QgYm54MnhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSk7CiAjaWZkZWYgQkNNX0NOSUMKIAogLyoqCi0gKiBTZW5kIGNvbW1hbmQgdG8gY25pYyBkcml2ZXIKKyAqIGJueDJ4X2NuaWNfbm90aWZ5IC0gc2VuZCBjb21tYW5kIHRvIGNuaWMgZHJpdmVyCiAgKgotICogQHBhcmFtIGJwCi0gKiBAcGFyYW0gY21kCisgKiBAYnA6CQlkcml2ZXIgaGFuZGxlCisgKiBAY21kOgljb21tYW5kCiAgKi8KIGludCBibngyeF9jbmljX25vdGlmeShzdHJ1Y3QgYm54MnggKmJwLCBpbnQgY21kKTsKIAogLyoqCi0gKiBQcm92aWRlcyBjbmljIGluZm9ybWF0aW9uIGZvciBwcm9wZXIgaW50ZXJydXB0IGhhbmRsaW5nCisgKiBibngyeF9zZXR1cF9jbmljX2lycV9pbmZvIC0gcHJvdmlkZXMgY25pYyB3aXRoIElSUSBpbmZvcm1hdGlvbgogICoKLSAqIEBwYXJhbSBicAorICogQGJwOgkJZHJpdmVyIGhhbmRsZQogICovCiB2b2lkIGJueDJ4X3NldHVwX2NuaWNfaXJxX2luZm8oc3RydWN0IGJueDJ4ICpicCk7CiAjZW5kaWYKIAogLyoqCi0gKiBFbmFibGUgSFcgaW50ZXJydXB0cy4KKyAqIGJueDJ4X2ludF9lbmFibGUgLSBlbmFibGUgSFcgaW50ZXJydXB0cy4KICAqCi0gKiBAcGFyYW0gYnAKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKICAqLwogdm9pZCBibngyeF9pbnRfZW5hYmxlKHN0cnVjdCBibngyeCAqYnApOwogCiAvKioKLSAqIERpc2FibGUgaW50ZXJydXB0cy4gVGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgdGhlcmUgYXJlIG5vCi0gKiBJU1JzIG9yIFNQIERQQ3MgKHNwX3Rhc2spIGFyZSBydW5uaW5nIGFmdGVyIGl0IHJldHVybnMuCisgKiBibngyeF9pbnRfZGlzYWJsZV9zeW5jIC0gZGlzYWJsZSBpbnRlcnJ1cHRzLgogICoKLSAqIEBwYXJhbSBicAotICogQHBhcmFtIGRpc2FibGVfaHcgaWYgdHJ1ZSwgZGlzYWJsZSBIVyBpbnRlcnJ1cHRzLgorICogQGJwOgkJZHJpdmVyIGhhbmRsZQorICogQGRpc2FibGVfaHc6CXRydWUsIGRpc2FibGUgSFcgaW50ZXJydXB0cy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCB0aGVyZSBhcmUgbm8KKyAqIElTUnMgb3IgU1AgRFBDcyAoc3BfdGFzaykgYXJlIHJ1bm5pbmcgYWZ0ZXIgaXQgcmV0dXJucy4KICAqLwogdm9pZCBibngyeF9pbnRfZGlzYWJsZV9zeW5jKHN0cnVjdCBibngyeCAqYnAsIGludCBkaXNhYmxlX2h3KTsKIAogLyoqCi0gKiBMb2FkcyBkZXZpY2UgZmlybXdhcmUKKyAqIGJueDJ4X2luaXRfZmlybXdhcmUgLSBsb2FkcyBkZXZpY2UgZmlybXdhcmUKICAqCi0gKiBAcGFyYW0gYnAKLSAqCi0gKiBAcmV0dXJuIGludAorICogQGJwOgkJZHJpdmVyIGhhbmRsZQogICovCiBpbnQgYm54MnhfaW5pdF9maXJtd2FyZShzdHJ1Y3QgYm54MnggKmJwKTsKIAogLyoqCi0gKiBJbml0IEhXIGJsb2NrcyBhY2NvcmRpbmcgdG8gY3VycmVudCBpbml0aWFsaXphdGlvbiBzdGFnZToKLSAqIENPTU1PTiwgUE9SVCBvciBGVU5DVElPTi4KKyAqIGJueDJ4X2luaXRfaHcgLSBpbml0IEhXIGJsb2NrcyBhY2NvcmRpbmcgdG8gY3VycmVudCBpbml0aWFsaXphdGlvbiBzdGFnZS4KICAqCi0gKiBAcGFyYW0gYnAKLSAqIEBwYXJhbSBsb2FkX2NvZGU6IENPTU1PTiwgUE9SVCBvciBGVU5DVElPTgotICoKLSAqIEByZXR1cm4gaW50CisgKiBAYnA6CQlkcml2ZXIgaGFuZGxlCisgKiBAbG9hZF9jb2RlOglDT01NT04sIFBPUlQgb3IgRlVOQ1RJT04KICAqLwogaW50IGJueDJ4X2luaXRfaHcoc3RydWN0IGJueDJ4ICpicCwgdTMyIGxvYWRfY29kZSk7CiAKIC8qKgotICogSW5pdCBkcml2ZXIgaW50ZXJuYWxzOgorICogYm54MnhfbmljX2luaXQgLSBpbml0IGRyaXZlciBpbnRlcm5hbHMuCisgKgorICogQGJwOgkJZHJpdmVyIGhhbmRsZQorICogQGxvYWRfY29kZToJQ09NTU9OLCBQT1JUIG9yIEZVTkNUSU9OCisgKgorICogSW5pdGlhbGl6ZXM6CiAgKiAgLSByaW5ncwogICogIC0gc3RhdHVzIGJsb2NrcwogICogIC0gZXRjLgotICoKLSAqIEBwYXJhbSBicAotICogQHBhcmFtIGxvYWRfY29kZSBDT01NT04sIFBPUlQgb3IgRlVOQ1RJT04KICAqLwogdm9pZCBibngyeF9uaWNfaW5pdChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgbG9hZF9jb2RlKTsKIAogLyoqCi0gKiBBbGxvY2F0ZSBkcml2ZXIncyBtZW1vcnkuCisgKiBibngyeF9hbGxvY19tZW0gLSBhbGxvY2F0ZSBkcml2ZXIncyBtZW1vcnkuCiAgKgotICogQHBhcmFtIGJwCi0gKgotICogQHJldHVybiBpbnQKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKICAqLwogaW50IGJueDJ4X2FsbG9jX21lbShzdHJ1Y3QgYm54MnggKmJwKTsKIAogLyoqCi0gKiBSZWxlYXNlIGRyaXZlcidzIG1lbW9yeS4KKyAqIGJueDJ4X2ZyZWVfbWVtIC0gcmVsZWFzZSBkcml2ZXIncyBtZW1vcnkuCiAgKgotICogQHBhcmFtIGJwCisgKiBAYnA6CQlkcml2ZXIgaGFuZGxlCiAgKi8KIHZvaWQgYm54MnhfZnJlZV9tZW0oc3RydWN0IGJueDJ4ICpicCk7CiAKIC8qKgotICogU2V0dXAgZXRoIENsaWVudC4KKyAqIGJueDJ4X3NldHVwX2NsaWVudCAtIHNldHVwIGV0aCBjbGllbnQuCiAgKgotICogQHBhcmFtIGJwCi0gKiBAcGFyYW0gZnAKLSAqIEBwYXJhbSBpc19sZWFkaW5nCi0gKgotICogQHJldHVybiBpbnQKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKKyAqIEBmcDoJCXBvaW50ZXIgdG8gZmFzdHBhdGggc3RydWN0dXJlCisgKiBAaXNfbGVhZGluZzoJYm9vbGVhbgogICovCiBpbnQgYm54Mnhfc2V0dXBfY2xpZW50KHN0cnVjdCBibngyeCAqYnAsIHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsCiAJCSAgICAgICBpbnQgaXNfbGVhZGluZyk7CiAKIC8qKgotICogU2V0IG51bWJlciBvZiBxdWV1ZXMgYWNjb3JkaW5nIHRvIG1vZGUKKyAqIGJueDJ4X3NldF9udW1fcXVldWVzIC0gc2V0IG51bWJlciBvZiBxdWV1ZXMgYWNjb3JkaW5nIHRvIG1vZGUuCiAgKgotICogQHBhcmFtIGJwCi0gKgorICogQGJwOgkJZHJpdmVyIGhhbmRsZQogICovCiB2b2lkIGJueDJ4X3NldF9udW1fcXVldWVzKHN0cnVjdCBibngyeCAqYnApOwogCiAvKioKLSAqIENsZWFudXAgY2hpcCBpbnRlcm5hbHM6Ci0gKiAtIENsZWFudXAgTUFDIGNvbmZpZ3VyYXRpb24uCi0gKiAtIENsb3NlIGNsaWVudHMuCi0gKiAtIGV0Yy4KKyAqIGJueDJ4X2NoaXBfY2xlYW51cCAtIGNsZWFudXAgY2hpcCBpbnRlcm5hbHMuCiAgKgotICogQHBhcmFtIGJwCi0gKiBAcGFyYW0gdW5sb2FkX21vZGUKKyAqIEBicDoJCQlkcml2ZXIgaGFuZGxlCisgKiBAdW5sb2FkX21vZGU6CUNPTU1PTiwgUE9SVCwgRlVOQ1RJT04KKyAqCisgKiAtIENsZWFudXAgTUFDIGNvbmZpZ3VyYXRpb24uCisgKiAtIENsb3NlcyBjbGllbnRzLgorICogLSBldGMuCiAgKi8KIHZvaWQgYm54MnhfY2hpcF9jbGVhbnVwKHN0cnVjdCBibngyeCAqYnAsIGludCB1bmxvYWRfbW9kZSk7CiAKIC8qKgotICogQWNxdWlyZSBIVyBsb2NrLgorICogYm54MnhfYWNxdWlyZV9od19sb2NrIC0gYWNxdWlyZSBIVyBsb2NrLgogICoKLSAqIEBwYXJhbSBicAotICogQHBhcmFtIHJlc291cmNlIFJlc291cmNlIGJpdCB3aGljaCB3YXMgbG9ja2VkCi0gKgotICogQHJldHVybiBpbnQKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKKyAqIEByZXNvdXJjZToJcmVzb3VyY2UgYml0IHdoaWNoIHdhcyBsb2NrZWQKICAqLwogaW50IGJueDJ4X2FjcXVpcmVfaHdfbG9jayhzdHJ1Y3QgYm54MnggKmJwLCB1MzIgcmVzb3VyY2UpOwogCiAvKioKLSAqIFJlbGVhc2UgSFcgbG9jay4KKyAqIGJueDJ4X3JlbGVhc2VfaHdfbG9jayAtIHJlbGVhc2UgSFcgbG9jay4KICAqCi0gKiBAcGFyYW0gYnAgZHJpdmVyIGhhbmRsZQotICogQHBhcmFtIHJlc291cmNlIFJlc291cmNlIGJpdCB3aGljaCB3YXMgbG9ja2VkCi0gKgotICogQHJldHVybiBpbnQKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKKyAqIEByZXNvdXJjZToJcmVzb3VyY2UgYml0IHdoaWNoIHdhcyBsb2NrZWQKICAqLwogaW50IGJueDJ4X3JlbGVhc2VfaHdfbG9jayhzdHJ1Y3QgYm54MnggKmJwLCB1MzIgcmVzb3VyY2UpOwogCiAvKioKLSAqIENvbmZpZ3VyZSBldGggTUFDIGFkZHJlc3MgaW4gdGhlIEhXIGFjY29yZGluZyB0byB0aGUgdmFsdWUgaW4KLSAqIG5ldGRldi0+ZGV2X2FkZHIuCisgKiBibngyeF9zZXRfZXRoX21hYyAtIGNvbmZpZ3VyZSBldGggTUFDIGFkZHJlc3MgaW4gdGhlIEhXCiAgKgotICogQHBhcmFtIGJwIGRyaXZlciBoYW5kbGUKLSAqIEBwYXJhbSBzZXQKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKKyAqIEBzZXQ6CXNldCBvciBjbGVhcgorICoKKyAqIENvbmZpZ3VyZXMgYWNjb3JkaW5nIHRvIHRoZSB2YWx1ZSBpbiBuZXRkZXYtPmRldl9hZGRyLgogICovCiB2b2lkIGJueDJ4X3NldF9ldGhfbWFjKHN0cnVjdCBibngyeCAqYnAsIGludCBzZXQpOwogCiAjaWZkZWYgQkNNX0NOSUMKIC8qKgotICogU2V0L0NsZWFyIEZJUCBNQUMocykgYXQgdGhlIG5leHQgZW50aWVzIGluIHRoZSBDQU0gYWZ0ZXIgdGhlIEVUSAotICogTUFDKHMpLiBUaGlzIGZ1bmN0aW9uIHdpbGwgd2FpdCB1bnRpbCB0aGUgcmFtZG9yZCBjb21wbGV0aW9uCi0gKiByZXR1cm5zLgorICogYm54Mnhfc2V0X2ZpcF9ldGhfbWFjX2FkZHIgLSBTZXQvQ2xlYXIgRklQIE1BQyhzKQogICoKLSAqIEBwYXJhbSBicCBkcml2ZXIgaGFuZGxlCi0gKiBAcGFyYW0gc2V0IHNldCBvciBjbGVhciB0aGUgQ0FNIGVudHJ5CisgKiBAYnA6CQlkcml2ZXIgaGFuZGxlCisgKiBAc2V0OglzZXQgb3IgY2xlYXIgdGhlIENBTSBlbnRyeQogICoKLSAqIEByZXR1cm4gMCBpZiBjdXNzZXNzLCAtRU5PREVWIGlmIHJhbXJvZCBkb2Vzbid0IHJldHVybi4KKyAqIFVzZWQgbmV4dCBlbnRpZXMgaW4gdGhlIENBTSBhZnRlciB0aGUgRVRIIE1BQyhzKS4KKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCB3YWl0IHVudGlsIHRoZSByYW1kb3JkIGNvbXBsZXRpb24gcmV0dXJucy4KKyAqIFJldHVybiAwIGlmIGN1c3Nlc3MsIC1FTk9ERVYgaWYgcmFtcm9kIGRvZXNuJ3QgcmV0dXJuLgogICovCiBpbnQgYm54Mnhfc2V0X2ZpcF9ldGhfbWFjX2FkZHIoc3RydWN0IGJueDJ4ICpicCwgaW50IHNldCk7CiAKIC8qKgotICogU2V0L0NsZWFyIEFMTF9FTk9ERSBtY2FzdCBNQUMuCisgKiBibngyeF9zZXRfYWxsX2Vub2RlX21hY3MgLSBTZXQvQ2xlYXIgQUxMX0VOT0RFIG1jYXN0IE1BQy4KICAqCi0gKiBAcGFyYW0gYnAKLSAqIEBwYXJhbSBzZXQKLSAqCi0gKiBAcmV0dXJuIGludAorICogQGJwOgkJZHJpdmVyIGhhbmRsZQorICogQHNldDoJc2V0IG9yIGNsZWFyCiAgKi8KIGludCBibngyeF9zZXRfYWxsX2Vub2RlX21hY3Moc3RydWN0IGJueDJ4ICpicCwgaW50IHNldCk7CiAjZW5kaWYKIAogLyoqCi0gKiBTZXQgTUFDIGZpbHRlcmluZyBjb25maWd1cmF0aW9ucy4KKyAqIGJueDJ4X3NldF9yeF9tb2RlIC0gc2V0IE1BQyBmaWx0ZXJpbmcgY29uZmlndXJhdGlvbnMuCiAgKgotICogQHJlbWFya3MgY2FsbGVkIHdpdGggbmV0aWZfdHhfbG9jayBmcm9tIGRldl9tY2FzdC5jCisgKiBAZGV2OgluZXRkZXZpY2UKICAqCi0gKiBAcGFyYW0gZGV2IG5ldF9kZXZpY2UKKyAqIGNhbGxlZCB3aXRoIG5ldGlmX3R4X2xvY2sgZnJvbSBkZXZfbWNhc3QuYwogICovCiB2b2lkIGJueDJ4X3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiAvKioKLSAqIENvbmZpZ3VyZSBNQUMgZmlsdGVyaW5nIHJ1bGVzIGluIGEgRlcuCisgKiBibngyeF9zZXRfc3Rvcm1fcnhfbW9kZSAtIGNvbmZpZ3VyZSBNQUMgZmlsdGVyaW5nIHJ1bGVzIGluIGEgRlcuCiAgKgotICogQHBhcmFtIGJwIGRyaXZlciBoYW5kbGUKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKICAqLwogdm9pZCBibngyeF9zZXRfc3Rvcm1fcnhfbW9kZShzdHJ1Y3QgYm54MnggKmJwKTsKIApAQCAtMjkwLDYzICszMDcsNTkgQEAKIHZvaWQgYm54MnhfZGlzYWJsZV9jbG9zZV90aGVfZ2F0ZShzdHJ1Y3QgYm54MnggKmJwKTsKIAogLyoqCi0gKiBQZXJmb3JtIHN0YXRpc3RpY3MgaGFuZGxpbmcgYWNjb3JkaW5nIHRvIGV2ZW50CisgKiBibngyeF9zdGF0c19oYW5kbGUgLSBwZXJmb3JtIHN0YXRpc3RpY3MgaGFuZGxpbmcgYWNjb3JkaW5nIHRvIGV2ZW50LgogICoKLSAqIEBwYXJhbSBicCBkcml2ZXIgaGFuZGxlCi0gKiBAcGFyYW0gZXZlbnQgYm54Mnhfc3RhdHNfZXZlbnQKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKKyAqIEBldmVudDoJYm54Mnhfc3RhdHNfZXZlbnQKICAqLwogdm9pZCBibngyeF9zdGF0c19oYW5kbGUoc3RydWN0IGJueDJ4ICpicCwgZW51bSBibngyeF9zdGF0c19ldmVudCBldmVudCk7CiAKIC8qKgotICogSGFuZGxlIHJhbXJvZHMgY29tcGxldGlvbgorICogYm54Mnhfc3BfZXZlbnQgLSBoYW5kbGUgcmFtcm9kcyBjb21wbGV0aW9uLgogICoKLSAqIEBwYXJhbSBmcCBmYXN0cGF0aCBoYW5kbGUgZm9yIHRoZSBldmVudAotICogQHBhcmFtIHJyX2NxZSBldGhfcnhfY3FlCisgKiBAZnA6CQlmYXN0cGF0aCBoYW5kbGUgZm9yIHRoZSBldmVudAorICogQHJyX2NxZToJZXRoX3J4X2NxZQogICovCiB2b2lkIGJueDJ4X3NwX2V2ZW50KHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsIHVuaW9uIGV0aF9yeF9jcWUgKnJyX2NxZSk7CiAKIC8qKgotICogSW5pdC9oYWx0IGZ1bmN0aW9uIGJlZm9yZS9hZnRlciBzZW5kaW5nCi0gKiBDTElFTlRfU0VUVVAvQ0ZDX0RFTCBmb3IgdGhlIGZpcnN0L2xhc3QgY2xpZW50LgorICogYm54MnhfZnVuY19zdGFydCAtIGluaXQgZnVuY3Rpb24KICAqCi0gKiBAcGFyYW0gYnAKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKICAqCi0gKiBAcmV0dXJuIGludAorICogTXVzdCBiZSBjYWxsZWQgYmVmb3JlIHNlbmRpbmcgQ0xJRU5UX1NFVFVQIGZvciB0aGUgZmlyc3QgY2xpZW50LgogICovCiBpbnQgYm54MnhfZnVuY19zdGFydChzdHJ1Y3QgYm54MnggKmJwKTsKIAogLyoqCi0gKiBQcmVwYXJlIElMVCBjb25maWd1cmF0aW9ucyBhY2NvcmRpbmcgdG8gY3VycmVudCBkcml2ZXIKLSAqIHBhcmFtZXRlcnMuCisgKiBibngyeF9pbHRfc2V0X2luZm8gLSBwcmVwYXJlIElMVCBjb25maWd1cmF0aW9ucy4KICAqCi0gKiBAcGFyYW0gYnAKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKICAqLwogdm9pZCBibngyeF9pbHRfc2V0X2luZm8oc3RydWN0IGJueDJ4ICpicCk7CiAKIC8qKgotICogSW5pbnRpYWxpemUgZGNieCBwcm90b2NvbAorICogYm54MnhfZGNieF9pbml0IC0gaW5pdGlhbGl6ZSBkY2J4IHByb3RvY29sLgogICoKLSAqIEBwYXJhbSBicAorICogQGJwOgkJZHJpdmVyIGhhbmRsZQogICovCiB2b2lkIGJueDJ4X2RjYnhfaW5pdChzdHJ1Y3QgYm54MnggKmJwKTsKIAogLyoqCi0gKiBTZXQgcG93ZXIgc3RhdGUgdG8gdGhlIHJlcXVlc3RlZCB2YWx1ZS4gQ3VycmVudGx5IG9ubHkgRDAgYW5kCi0gKiBEM2hvdCBhcmUgc3VwcG9ydGVkLgorICogYm54Mnhfc2V0X3Bvd2VyX3N0YXRlIC0gc2V0IHBvd2VyIHN0YXRlIHRvIHRoZSByZXF1ZXN0ZWQgdmFsdWUuCiAgKgotICogQHBhcmFtIGJwCi0gKiBAcGFyYW0gc3RhdGUgRDAgb3IgRDNob3QKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKKyAqIEBzdGF0ZToJcmVxdWlyZWQgc3RhdGUgRDAgb3IgRDNob3QKICAqCi0gKiBAcmV0dXJuIGludAorICogQ3VycmVudGx5IG9ubHkgRDAgYW5kIEQzaG90IGFyZSBzdXBwb3J0ZWQuCiAgKi8KIGludCBibngyeF9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IGJueDJ4ICpicCwgcGNpX3Bvd2VyX3Qgc3RhdGUpOwogCiAvKioKLSAqIFVwZGF0ZXMgTUFYIHBhcnQgb2YgTUYgY29uZmlndXJhdGlvbiBpbiBIVwotICogKGlmIHJlcXVpcmVkKQorICogYm54MnhfdXBkYXRlX21heF9tZl9jb25maWcgLSB1cGRhdGUgTUFYIHBhcnQgb2YgTUYgY29uZmlndXJhdGlvbiBpbiBIVy4KICAqCi0gKiBAcGFyYW0gYnAKLSAqIEBwYXJhbSB2YWx1ZQorICogQGJwOgkJZHJpdmVyIGhhbmRsZQorICogQHZhbHVlOgluZXcgdmFsdWUKICAqLwogdm9pZCBibngyeF91cGRhdGVfbWF4X21mX2NvbmZpZyhzdHJ1Y3QgYm54MnggKmJwLCB1MzIgdmFsdWUpOwogCkBAIC0zNzcsODQgKzM5MCw3MyBAQAogLyogUmVsZWFzZSBJUlEgdmVjdG9ycyAqLwogdm9pZCBibngyeF9mcmVlX2lycShzdHJ1Y3QgYm54MnggKmJwKTsKIAordm9pZCBibngyeF9mcmVlX2ZwX21lbShzdHJ1Y3QgYm54MnggKmJwKTsKK2ludCBibngyeF9hbGxvY19mcF9tZW0oc3RydWN0IGJueDJ4ICpicCk7CisKIHZvaWQgYm54MnhfaW5pdF9yeF9yaW5ncyhzdHJ1Y3QgYm54MnggKmJwKTsKIHZvaWQgYm54MnhfZnJlZV9za2JzKHN0cnVjdCBibngyeCAqYnApOwogdm9pZCBibngyeF9uZXRpZl9zdG9wKHN0cnVjdCBibngyeCAqYnAsIGludCBkaXNhYmxlX2h3KTsKIHZvaWQgYm54MnhfbmV0aWZfc3RhcnQoc3RydWN0IGJueDJ4ICpicCk7CiAKIC8qKgotICogRmlsbCBtc2l4X3RhYmxlLCByZXF1ZXN0IHZlY3RvcnMsIHVwZGF0ZSBudW1fcXVldWVzIGFjY29yZGluZwotICogdG8gbnVtYmVyIG9mIGF2YWlsYWJsZSB2ZWN0b3JzCisgKiBibngyeF9lbmFibGVfbXNpeCAtIHNldCBtc2l4IGNvbmZpZ3VyYXRpb24uCiAgKgotICogQHBhcmFtIGJwCisgKiBAYnA6CQlkcml2ZXIgaGFuZGxlCiAgKgotICogQHJldHVybiBpbnQKKyAqIGZpbGxzIG1zaXhfdGFibGUsIHJlcXVlc3RzIHZlY3RvcnMsIHVwZGF0ZXMgbnVtX3F1ZXVlcworICogYWNjb3JkaW5nIHRvIG51bWJlciBvZiBhdmFpbGFibGUgdmVjdG9ycy4KICAqLwogaW50IGJueDJ4X2VuYWJsZV9tc2l4KHN0cnVjdCBibngyeCAqYnApOwogCiAvKioKLSAqIFJlcXVlc3QgbXNpIG1vZGUgZnJvbSBPUywgdXBkYXRlZCBpbnRlcm5hbHMgYWNjb3JkaW5nbHkKKyAqIGJueDJ4X2VuYWJsZV9tc2kgLSByZXF1ZXN0IG1zaSBtb2RlIGZyb20gT1MsIHVwZGF0ZWQgaW50ZXJuYWxzIGFjY29yZGluZ2x5CiAgKgotICogQHBhcmFtIGJwCi0gKgotICogQHJldHVybiBpbnQKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKICAqLwogaW50IGJueDJ4X2VuYWJsZV9tc2koc3RydWN0IGJueDJ4ICpicCk7CiAKIC8qKgotICogTkFQSSBjYWxsYmFjaworICogYm54MnhfcG9sbCAtIE5BUEkgY2FsbGJhY2sKICAqCi0gKiBAcGFyYW0gbmFwaQotICogQHBhcmFtIGJ1ZGdldAorICogQG5hcGk6CW5hcGkgc3RydWN0dXJlCisgKiBAYnVkZ2V0OgogICoKLSAqIEByZXR1cm4gaW50CiAgKi8KIGludCBibngyeF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCk7CiAKIC8qKgotICogQWxsb2NhdGUvcmVsZWFzZSBtZW1vcmllcyBvdXRzaXplIG1haW4gZHJpdmVyIHN0cnVjdHVyZQorICogYm54MnhfYWxsb2NfbWVtX2JwIC0gYWxsb2NhdGUgbWVtb3JpZXMgb3V0c2l6ZSBtYWluIGRyaXZlciBzdHJ1Y3R1cmUKICAqCi0gKiBAcGFyYW0gYnAKLSAqCi0gKiBAcmV0dXJuIGludAorICogQGJwOgkJZHJpdmVyIGhhbmRsZQogICovCiBpbnQgX19kZXZpbml0IGJueDJ4X2FsbG9jX21lbV9icChzdHJ1Y3QgYm54MnggKmJwKTsKKworLyoqCisgKiBibngyeF9mcmVlX21lbV9icCAtIHJlbGVhc2UgbWVtb3JpZXMgb3V0c2l6ZSBtYWluIGRyaXZlciBzdHJ1Y3R1cmUKKyAqCisgKiBAYnA6CQlkcml2ZXIgaGFuZGxlCisgKi8KIHZvaWQgYm54MnhfZnJlZV9tZW1fYnAoc3RydWN0IGJueDJ4ICpicCk7CiAKIC8qKgotICogQ2hhbmdlIG10dSBuZXRkZXYgY2FsbGJhY2sKKyAqIGJueDJ4X2NoYW5nZV9tdHUgLSBjaGFuZ2UgbXR1IG5ldGRldiBjYWxsYmFjawogICoKLSAqIEBwYXJhbSBkZXYKLSAqIEBwYXJhbSBuZXdfbXR1CisgKiBAZGV2OgluZXQgZGV2aWNlCisgKiBAbmV3X210dToJcmVxdWVzdGVkIG10dQogICoKLSAqIEByZXR1cm4gaW50CiAgKi8KIGludCBibngyeF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KTsKIAordTMyIGJueDJ4X2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmVhdHVyZXMpOworaW50IGJueDJ4X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmVhdHVyZXMpOworCiAvKioKLSAqIHR4IHRpbWVvdXQgbmV0ZGV2IGNhbGxiYWNrCisgKiBibngyeF90eF90aW1lb3V0IC0gdHggdGltZW91dCBuZXRkZXYgY2FsbGJhY2sKICAqCi0gKiBAcGFyYW0gZGV2Ci0gKiBAcGFyYW0gbmV3X210dQotICoKLSAqIEByZXR1cm4gaW50CisgKiBAZGV2OgluZXQgZGV2aWNlCiAgKi8KIHZvaWQgYm54MnhfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAotI2lmZGVmIEJDTV9WTEFOCi0vKioKLSAqIHZsYW4gcnggcmVnaXN0ZXIgbmV0ZGV2IGNhbGxiYWNrCi0gKgotICogQHBhcmFtIGRldgotICogQHBhcmFtIG5ld19tdHUKLSAqCi0gKiBAcmV0dXJuIGludAotICovCi12b2lkIGJueDJ4X3ZsYW5fcnhfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3Qgdmxhbl9ncm91cCAqdmxncnApOwotCi0jZW5kaWYKLQogc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X3VwZGF0ZV9mcHNiX2lkeChzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwKQogewogCWJhcnJpZXIoKTsgLyogc3RhdHVzIGJsb2NrIGlzIHdyaXR0ZW4gdG8gYnkgdGhlIGNoaXAgKi8KQEAgLTcwNSw3ICs3MDcsNyBAQAogLyoqCiAgKiBkaXNhYmxlcyB0eCBmcm9tIHN0YWNrIHBvaW50IG9mIHZpZXcKICAqCi0gKiBAcGFyYW0gYnAKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X3R4X2Rpc2FibGUoc3RydWN0IGJueDJ4ICpicCkKIHsKQEAgLTgzOCw3ICs4NDAsNyBAQAogCW1hcHBpbmcgPSBkbWFfbWFwX3NpbmdsZSgmYnAtPnBkZXYtPmRldiwgc2tiLT5kYXRhLCBmcC0+cnhfYnVmX3NpemUsCiAJCQkJIERNQV9GUk9NX0RFVklDRSk7CiAJaWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKCZicC0+cGRldi0+ZGV2LCBtYXBwaW5nKSkpIHsKLQkJZGV2X2tmcmVlX3NrYihza2IpOworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTg4MCw2ICs4ODIsOSBAQAogewogCWludCBpOwogCisJaWYgKGZwLT5kaXNhYmxlX3RwYSkKKwkJcmV0dXJuOworCiAJZm9yIChpID0gMDsgaSA8IGxhc3Q7IGkrKykKIAkJYm54MnhfZnJlZV9yeF9zZ2UoYnAsIGZwLCBpKTsKIH0KQEAgLTkwOCwzNiArOTEzLDM5IEBACiAJfQogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgYm54MnhfaW5pdF90eF9yaW5nX29uZShzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwKQoreworCWludCBpOworCisJZm9yIChpID0gMTsgaSA8PSBOVU1fVFhfUklOR1M7IGkrKykgeworCQlzdHJ1Y3QgZXRoX3R4X25leHRfYmQgKnR4X25leHRfYmQgPQorCQkJJmZwLT50eF9kZXNjX3JpbmdbVFhfREVTQ19DTlQgKiBpIC0gMV0ubmV4dF9iZDsKKworCQl0eF9uZXh0X2JkLT5hZGRyX2hpID0KKwkJCWNwdV90b19sZTMyKFU2NF9ISShmcC0+dHhfZGVzY19tYXBwaW5nICsKKwkJCQkgICAgQkNNX1BBR0VfU0laRSooaSAlIE5VTV9UWF9SSU5HUykpKTsKKwkJdHhfbmV4dF9iZC0+YWRkcl9sbyA9CisJCQljcHVfdG9fbGUzMihVNjRfTE8oZnAtPnR4X2Rlc2NfbWFwcGluZyArCisJCQkJICAgIEJDTV9QQUdFX1NJWkUqKGkgJSBOVU1fVFhfUklOR1MpKSk7CisJfQorCisJU0VUX0ZMQUcoZnAtPnR4X2RiLmRhdGEuaGVhZGVyLmhlYWRlciwgRE9PUkJFTExfSERSX0RCX1RZUEUsIDEpOworCWZwLT50eF9kYi5kYXRhLnplcm9fZmlsbDEgPSAwOworCWZwLT50eF9kYi5kYXRhLnByb2QgPSAwOworCisJZnAtPnR4X3BrdF9wcm9kID0gMDsKKwlmcC0+dHhfcGt0X2NvbnMgPSAwOworCWZwLT50eF9iZF9wcm9kID0gMDsKKwlmcC0+dHhfYmRfY29ucyA9IDA7CisJZnAtPnR4X3BrdCA9IDA7Cit9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9pbml0X3R4X3JpbmdzKHN0cnVjdCBibngyeCAqYnApCiB7Ci0JaW50IGksIGo7CisJaW50IGk7CiAKLQlmb3JfZWFjaF90eF9xdWV1ZShicCwgaikgewotCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtqXTsKLQotCQlmb3IgKGkgPSAxOyBpIDw9IE5VTV9UWF9SSU5HUzsgaSsrKSB7Ci0JCQlzdHJ1Y3QgZXRoX3R4X25leHRfYmQgKnR4X25leHRfYmQgPQotCQkJCSZmcC0+dHhfZGVzY19yaW5nW1RYX0RFU0NfQ05UICogaSAtIDFdLm5leHRfYmQ7Ci0KLQkJCXR4X25leHRfYmQtPmFkZHJfaGkgPQotCQkJCWNwdV90b19sZTMyKFU2NF9ISShmcC0+dHhfZGVzY19tYXBwaW5nICsKLQkJCQkJICAgIEJDTV9QQUdFX1NJWkUqKGkgJSBOVU1fVFhfUklOR1MpKSk7Ci0JCQl0eF9uZXh0X2JkLT5hZGRyX2xvID0KLQkJCQljcHVfdG9fbGUzMihVNjRfTE8oZnAtPnR4X2Rlc2NfbWFwcGluZyArCi0JCQkJCSAgICBCQ01fUEFHRV9TSVpFKihpICUgTlVNX1RYX1JJTkdTKSkpOwotCQl9Ci0KLQkJU0VUX0ZMQUcoZnAtPnR4X2RiLmRhdGEuaGVhZGVyLmhlYWRlciwgRE9PUkJFTExfSERSX0RCX1RZUEUsIDEpOwotCQlmcC0+dHhfZGIuZGF0YS56ZXJvX2ZpbGwxID0gMDsKLQkJZnAtPnR4X2RiLmRhdGEucHJvZCA9IDA7Ci0KLQkJZnAtPnR4X3BrdF9wcm9kID0gMDsKLQkJZnAtPnR4X3BrdF9jb25zID0gMDsKLQkJZnAtPnR4X2JkX3Byb2QgPSAwOwotCQlmcC0+dHhfYmRfY29ucyA9IDA7Ci0JCWZwLT50eF9wa3QgPSAwOwotCX0KKwlmb3JfZWFjaF90eF9xdWV1ZShicCwgaSkKKwkJYm54MnhfaW5pdF90eF9yaW5nX29uZSgmYnAtPmZwW2ldKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X3NldF9uZXh0X3BhZ2VfcnhfYmQoc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCkKQEAgLTk5Miw2ICsxMDAwLDQ0IEBACiAJfQogfQogCisvKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYWN0dWFsbHkgYWxsb2NhdGVkIEJEcyAqLworc3RhdGljIGlubGluZSBpbnQgYm54MnhfYWxsb2NfcnhfYmRzKHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsCisJCQkJICAgICAgaW50IHJ4X3Jpbmdfc2l6ZSkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gZnAtPmJwOworCXUxNiByaW5nX3Byb2QsIGNxZV9yaW5nX3Byb2Q7CisJaW50IGk7CisKKwlmcC0+cnhfY29tcF9jb25zID0gMDsKKwljcWVfcmluZ19wcm9kID0gcmluZ19wcm9kID0gMDsKKworCS8qIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgb25seSBkdXJpbmcgZm8gaW5pdCBzbworCSAqIGZwLT5ldGhfcV9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkID0gMAorCSAqLworCWZvciAoaSA9IDA7IGkgPCByeF9yaW5nX3NpemU7IGkrKykgeworCQlpZiAoYm54MnhfYWxsb2Nfcnhfc2tiKGJwLCBmcCwgcmluZ19wcm9kKSA8IDApIHsKKwkJCWZwLT5ldGhfcV9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKys7CisJCQljb250aW51ZTsKKwkJfQorCQlyaW5nX3Byb2QgPSBORVhUX1JYX0lEWChyaW5nX3Byb2QpOworCQljcWVfcmluZ19wcm9kID0gTkVYVF9SQ1FfSURYKGNxZV9yaW5nX3Byb2QpOworCQlXQVJOX09OKHJpbmdfcHJvZCA8PSAoaSAtIGZwLT5ldGhfcV9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKSk7CisJfQorCisJaWYgKGZwLT5ldGhfcV9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKQorCQlCTlgyWF9FUlIoIndhcyBvbmx5IGFibGUgdG8gYWxsb2NhdGUgIgorCQkJICAiJWQgcnggc2ticyBvbiBxdWV1ZVslZF1cbiIsCisJCQkgIChpIC0gZnAtPmV0aF9xX3N0YXRzLnJ4X3NrYl9hbGxvY19mYWlsZWQpLCBmcC0+aW5kZXgpOworCisJZnAtPnJ4X2JkX3Byb2QgPSByaW5nX3Byb2Q7CisJLyogTGltaXQgdGhlIENRRSBwcm9kdWNlciBieSB0aGUgQ1FFIHJpbmcgc2l6ZSAqLworCWZwLT5yeF9jb21wX3Byb2QgPSBtaW5fdCh1MTYsIE5VTV9SQ1FfUklOR1MqUkNRX0RFU0NfQ05ULAorCQkJICAgICAgIGNxZV9yaW5nX3Byb2QpOworCWZwLT5yeF9wa3QgPSBmcC0+cnhfY2FsbHMgPSAwOworCisJcmV0dXJuIGkgLSBmcC0+ZXRoX3Ffc3RhdHMucnhfc2tiX2FsbG9jX2ZhaWxlZDsKK30KKwogI2lmZGVmIEJDTV9DTklDCiBzdGF0aWMgaW5saW5lIHZvaWQgYm54MnhfaW5pdF9mY29lX2ZwKHN0cnVjdCBibngyeCAqYnApCiB7CkBAIC0xMDQxLDEyICsxMDg3LDIzIEBACiAJCQkJc3RydWN0IGNtbmdfc3RydWN0X3Blcl9wb3J0ICpjbW5nLAogCQkJCXU4IHBvcnQpCiB7Ci0Jc2l6ZV90IHNpemUgPSBzaXplb2Yoc3RydWN0IGNtbmdfc3RydWN0X3Blcl9wb3J0KTsKKwlzaXplX3Qgc2l6ZSA9CisJCXNpemVvZihzdHJ1Y3QgcmF0ZV9zaGFwaW5nX3ZhcnNfcGVyX3BvcnQpICsKKwkJc2l6ZW9mKHN0cnVjdCBmYWlybmVzc192YXJzX3Blcl9wb3J0KSArCisJCXNpemVvZihzdHJ1Y3Qgc2FmY19zdHJ1Y3RfcGVyX3BvcnQpICsKKwkJc2l6ZW9mKHN0cnVjdCBwZmNfc3RydWN0X3Blcl9wb3J0KTsKIAogCXUzMiBhZGRyID0gQkFSX1hTVFJPUk1fSU5UTUVNICsKIAkJCVhTVE9STV9DTU5HX1BFUl9QT1JUX1ZBUlNfT0ZGU0VUKHBvcnQpOwogCiAJX19zdG9ybV9tZW1zZXRfc3RydWN0KGJwLCBhZGRyLCBzaXplLCAodTMyICopY21uZyk7CisKKwlhZGRyICs9IHNpemUgKyA0IC8qIFNLSVAgRENCK0xMRkMgKi87CisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgY21uZ19zdHJ1Y3RfcGVyX3BvcnQpIC0KKwkJc2l6ZSAvKiB3cml0dGVuICovIC0gNCAvKnNraXBwZWQqLzsKKworCV9fc3Rvcm1fbWVtc2V0X3N0cnVjdChicCwgYWRkciwgc2l6ZSwKKwkJCSAgICAgICh1MzIgKikoY21uZy0+dHJhZmZpY190eXBlX3RvX3ByaW9yaXR5X2NvcykpOwogfQogCiAvKiBIVyBMb2NrIGZvciBzaGFyZWQgZHVhbCBwb3J0IFBIWXMgKi8KQEAgLTEwNTQsMTIgKzExMTEsMTEgQEAKIHZvaWQgYm54MnhfcmVsZWFzZV9waHlfbG9jayhzdHJ1Y3QgYm54MnggKmJwKTsKIAogLyoqCi0gKiBFeHRyYWN0cyBNQVggQlcgcGFydCBmcm9tIE1GIGNvbmZpZ3VyYXRpb24uCisgKiBibngyeF9leHRyYWN0X21heF9jZmcgLSBleHRyYWN0IE1BWCBCVyBwYXJ0IGZyb20gTUYgY29uZmlndXJhdGlvbi4KICAqCi0gKiBAcGFyYW0gYnAKLSAqIEBwYXJhbSBtZl9jZmcKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKKyAqIEBtZl9jZmc6CU1GIGNvbmZpZ3VyYXRpb24KICAqCi0gKiBAcmV0dXJuIHUxNgogICovCiBzdGF0aWMgaW5saW5lIHUxNiBibngyeF9leHRyYWN0X21heF9jZmcoc3RydWN0IGJueDJ4ICpicCwgdTMyIG1mX2NmZykKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2RjYi5jIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZGNiLmMKaW5kZXggOWEyNGQ3OS4uNDEwYTQ5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZGNiLmMKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZGNiLmMKQEAgLTEsNiArMSw2IEBACiAvKiBibngyeF9kY2IuYzogQnJvYWRjb20gRXZlcmVzdCBuZXR3b3JrIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgMjAwOS0yMDEwIEJyb2FkY29tIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgMjAwOS0yMDExIEJyb2FkY29tIENvcnBvcmF0aW9uCiAgKgogICogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQogICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKQEAgLTQ4NSw2ICs0ODUsMzYgQEAKIAl9CiB9CiAKKyNpZmRlZiBCQ01fRENCTkwKK3N0YXRpYyBpbnQgYm54MnhfZGNieF9yZWFkX3NobWVtX3JlbW90ZV9taWIoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlzdHJ1Y3QgbGxkcF9yZW1vdGVfbWliIHJlbW90ZV9taWIgPSB7MH07CisJdTMyIGRjYnhfcmVtb3RlX21pYl9vZmZzZXQgPSBTSE1FTTJfUkQoYnAsIGRjYnhfcmVtb3RlX21pYl9vZmZzZXQpOworCWludCByYzsKKworCURQKE5FVElGX01TR19MSU5LLCAiZGNieF9yZW1vdGVfbWliX29mZnNldCAweCV4XG4iLAorCSAgIGRjYnhfcmVtb3RlX21pYl9vZmZzZXQpOworCisJaWYgKFNITUVNX0RDQlhfUkVNT1RFX01JQl9OT05FID09IGRjYnhfcmVtb3RlX21pYl9vZmZzZXQpIHsKKwkJQk5YMlhfRVJSKCJGVyBkb2Vzbid0IHN1cHBvcnQgZGNieF9yZW1vdGVfbWliX29mZnNldFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJjID0gYm54MnhfZGNieF9yZWFkX21pYihicCwgKHUzMiAqKSZyZW1vdGVfbWliLCBkY2J4X3JlbW90ZV9taWJfb2Zmc2V0LAorCQkJCSBEQ0JYX1JFQURfUkVNT1RFX01JQik7CisKKwlpZiAocmMpIHsKKwkJQk5YMlhfRVJSKCJGYWlsZCB0byByZWFkIHJlbW90ZSBtaWIgZnJvbSBGV1xuIik7CisJCXJldHVybiByYzsKKwl9CisKKwkvKiBzYXZlIGZlYXR1cmVzIGFuZCBmbGFncyAqLworCWJwLT5kY2J4X3JlbW90ZV9mZWF0ID0gcmVtb3RlX21pYi5mZWF0dXJlczsKKwlicC0+ZGNieF9yZW1vdGVfZmxhZ3MgPSByZW1vdGVfbWliLmZsYWdzOworCXJldHVybiAwOworfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgYm54MnhfZGNieF9yZWFkX3NobWVtX25lZ19yZXN1bHRzKHN0cnVjdCBibngyeCAqYnApCiB7CiAJc3RydWN0IGxsZHBfbG9jYWxfbWliIGxvY2FsX21pYiA9IHswfTsKQEAgLTU3MSw2ICs2MDEsMjggQEAKIHsKIAlzd2l0Y2ggKHN0YXRlKSB7CiAJY2FzZSBCTlgyWF9EQ0JYX1NUQVRFX05FR19SRUNFSVZFRDoKKyNpZmRlZiBCQ01fQ05JQworCQlpZiAoYnAtPnN0YXRlICE9IEJOWDJYX1NUQVRFX09QRU5JTkdfV0FJVDRfTE9BRCkgeworCQkJc3RydWN0IGNuaWNfb3BzICpjX29wczsKKwkJCXN0cnVjdCBjbmljX2V0aF9kZXYgKmNwID0gJmJwLT5jbmljX2V0aF9kZXY7CisJCQlicC0+ZmxhZ3MgfD0gTk9fSVNDU0lfT09PX0ZMQUcgfCBOT19JU0NTSV9GTEFHOworCQkJY3AtPmRydl9zdGF0ZSB8PSBDTklDX0RSVl9TVEFURV9OT19JU0NTSV9PT087CisJCQljcC0+ZHJ2X3N0YXRlIHw9IENOSUNfRFJWX1NUQVRFX05PX0lTQ1NJOworCisJCQlyY3VfcmVhZF9sb2NrKCk7CisJCQljX29wcyA9IHJjdV9kZXJlZmVyZW5jZShicC0+Y25pY19vcHMpOworCQkJaWYgKGNfb3BzKSB7CisJCQkJYm54MnhfY25pY19ub3RpZnkoYnAsIENOSUNfQ1RMX1NUT1BfSVNDU0lfQ01EKTsKKwkJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJfQorCisJCS8qIGZhbGwgdGhyb3VnaCBpZiBubyBDTklDIGluaXRpYWxpemVkICAqLworCWNhc2UgQk5YMlhfRENCWF9TVEFURV9JU0NTSV9TVE9QUEVEOgorI2VuZGlmCisKIAkJewogCQkJRFAoTkVUSUZfTVNHX0xJTkssICJCTlgyWF9EQ0JYX1NUQVRFX05FR19SRUNFSVZFRFxuIik7CiAjaWZkZWYgQkNNX0RDQk5MCkBAIC01NzksNiArNjMxLDEwIEBACiAJCQkgKiBuZWdvdGlhdGlvbiByZXN1bHRzCiAJCQkgKi8KIAkJCWJueDJ4X2RjYm5sX3VwZGF0ZV9hcHBsaXN0KGJwLCB0cnVlKTsKKworCQkJLyogUmVhZCBybWVvdGUgbWliIGlmIGRjYnggaXMgaW4gdGhlIEZXICovCisJCQlpZiAoYm54MnhfZGNieF9yZWFkX3NobWVtX3JlbW90ZV9taWIoYnApKQorCQkJCXJldHVybjsKICNlbmRpZgogCQkJLyogUmVhZCBuZWcgcmVzdWx0cyBpZiBkY2J4IGlzIGluIHRoZSBGVyAqLwogCQkJaWYgKGJueDJ4X2RjYnhfcmVhZF9zaG1lbV9uZWdfcmVzdWx0cyhicCkpCkBAIC0xMDU3LDEyICsxMTEzLDYgQEAKIAl9CiB9CiAKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIERlc2NyaXB0aW9uOiBzaW5nbGUgcHJpb3JpdHkgZ3JvdXAKLSAqCi0gKiBSZXR1cm46Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHZvaWQgYm54MnhfZGNieF9ldHNfZGlzYWJsZWRfZW50cnlfZGF0YShzdHJ1Y3QgYm54MnggKmJwLAogCQkJCQkgICAgICAgc3RydWN0IGNvc19oZWxwX2RhdGEgKmNvc19kYXRhLAogCQkJCQkgICAgICAgdTMyIHByaV9qb2luX21hc2spCkBAIC0xMDc1LDExICsxMTI1LDYgQEAKIAljb3NfZGF0YS0+bnVtX29mX2NvcyA9IDE7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBEZXNjcmlwdGlvbjogdXBkYXRpbmcgdGhlIGNvcyBidwotICoKLSAqIFJldHVybjoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgaW5saW5lIHZvaWQgYm54MnhfZGNieF9hZGRfdG9fY29zX2J3KHN0cnVjdCBibngyeCAqYnAsCiAJCQkJCSAgICBzdHJ1Y3QgY29zX2VudHJ5X2hlbHBfZGF0YSAqZGF0YSwKIAkJCQkJICAgIHU4IHBnX2J3KQpAQCAtMTA5MCwxMSArMTEzNSw2IEBACiAJCWRhdGEtPmNvc19idyArPSBwZ19idzsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIERlc2NyaXB0aW9uOiBzaW5nbGUgcHJpb3JpdHkgZ3JvdXAKLSAqCi0gKiBSZXR1cm46Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHZvaWQgYm54MnhfZGNieF9zZXBhcmF0ZV9wYXVzZWFibGVfZnJvbV9ub24oc3RydWN0IGJueDJ4ICpicCwKIAkJCXN0cnVjdCBjb3NfaGVscF9kYXRhICpjb3NfZGF0YSwKIAkJCXUzMiAqcGdfcHJpX29yZ2luYWxfc3ByZWFkLApAQCAtMTM0NywxMSArMTM4Nyw2IEBACiAJfQogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRGVzY3JpcHRpb246IFN0aWxsCi0gKgotICogUmV0dXJuOgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB2b2lkIGJueDJ4X2RjYnhfdGhyZWVfcGdfdG9fY29zX3BhcmFtcygKIAkJCSAgICAgIHN0cnVjdCBibngyeAkJKmJwLAogCQkJICAgICAgc3RydWN0IHBnX2hlbHBfZGF0YQkqcGdfaGVscF9kYXRhLApAQCAtMTUzOSwxMSArMTU3NCw2IEBACiAJfQogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRGVzY3JpcHRpb246IEZpbGwgcGZjX2NvbmZpZyBzdHJ1Y3QgdGhhdCB3aWxsIGJlIHNlbnQgaW4gRENCWCBzdGFydCByYW1yb2QKLSAqCi0gKiBSZXR1cm46Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHZvaWQgYm54MnhfcGZjX2Z3X3N0cnVjdF9lMihzdHJ1Y3QgYm54MnggKmJwKQogewogCXN0cnVjdCBmbG93X2NvbnRyb2xfY29uZmlndXJhdGlvbiAgICpwZmNfZndfY2ZnID0gTlVMTDsKQEAgLTIwMzUsNyArMjA2NSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIHU4IGJueDJ4X2RjYm5sX2dldF9mZWF0Y2ZnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBmZWF0aWQsCiAJCQkJICB1OCAqZmxhZ3MpCiB7CkBAIC0yMTE1LDMxICsyMTQ0LDEwMCBAQAogCXJldHVybiBydmFsOwogfQogCitzdGF0aWMgaW50IGJueDJ4X3BlZXJfYXBwaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgICAgc3RydWN0IGRjYl9wZWVyX2FwcF9pbmZvICppbmZvLCB1MTYqIGFwcF9jb3VudCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCURQKE5FVElGX01TR19MSU5LLCAiQVBQLUlORk9cbiIpOworCisJaW5mby0+d2lsbGluZyA9IChicC0+ZGNieF9yZW1vdGVfZmxhZ3MgJiBEQ0JYX0FQUF9SRU1fV0lMTElORykgPzogMDsKKwlpbmZvLT5lcnJvciA9IChicC0+ZGNieF9yZW1vdGVfZmxhZ3MgJiBEQ0JYX0FQUF9SWF9FUlJPUikgPzogMDsKKwkqYXBwX2NvdW50ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBEQ0JYX01BWF9BUFBfUFJPVE9DT0w7IGkrKykKKwkJaWYgKGJwLT5kY2J4X3JlbW90ZV9mZWF0LmFwcC5hcHBfcHJpX3RibFtpXS5hcHBCaXRmaWVsZCAmCisJCSAgICBEQ0JYX0FQUF9FTlRSWV9WQUxJRCkKKwkJCSgqYXBwX2NvdW50KSsrOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJueDJ4X3BlZXJfYXBwdGFibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGNiX2FwcCAqdGFibGUpCit7CisJaW50IGksIGo7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlEUChORVRJRl9NU0dfTElOSywgIkFQUC1UQUJMRVxuIik7CisKKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IERDQlhfTUFYX0FQUF9QUk9UT0NPTDsgaSsrKSB7CisJCXN0cnVjdCBkY2J4X2FwcF9wcmlvcml0eV9lbnRyeSAqZW50ID0KKwkJCSZicC0+ZGNieF9yZW1vdGVfZmVhdC5hcHAuYXBwX3ByaV90YmxbaV07CisKKwkJaWYgKGVudC0+YXBwQml0ZmllbGQgJiBEQ0JYX0FQUF9FTlRSWV9WQUxJRCkgeworCQkJdGFibGVbal0uc2VsZWN0b3IgPSBibngyeF9kY2J4X2RjYm5sX2FwcF9pZHR5cGUoZW50KTsKKwkJCXRhYmxlW2pdLnByaW9yaXR5ID0gYm54MnhfZGNieF9kY2JubF9hcHBfdXAoZW50KTsKKwkJCXRhYmxlW2orK10ucHJvdG9jb2wgPSBlbnQtPmFwcF9pZDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBibngyeF9jZWVfcGVlcl9nZXRwZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgY2VlX3BnICpwZykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXBnLT53aWxsaW5nID0gKGJwLT5kY2J4X3JlbW90ZV9mbGFncyAmIERDQlhfRVRTX1JFTV9XSUxMSU5HKSA/OiAwOworCisJZm9yIChpID0gMDsgaSA8IENFRV9EQ0JYX01BWF9QR1M7IGkrKykgeworCQlwZy0+cGdfYndbaV0gPQorCQkJRENCWF9QR19CV19HRVQoYnAtPmRjYnhfcmVtb3RlX2ZlYXQuZXRzLnBnX2J3X3RibCwgaSk7CisJCXBnLT5wcmlvX3BnW2ldID0KKwkJCURDQlhfUFJJX1BHX0dFVChicC0+ZGNieF9yZW1vdGVfZmVhdC5ldHMucHJpX3BnX3RibCwgaSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJueDJ4X2NlZV9wZWVyX2dldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSBzdHJ1Y3QgY2VlX3BmYyAqcGZjKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXBmYy0+dGNzX3N1cHBvcnRlZCA9IGJwLT5kY2J4X3JlbW90ZV9mZWF0LnBmYy5wZmNfY2FwczsKKwlwZmMtPnBmY19lbiA9IGJwLT5kY2J4X3JlbW90ZV9mZWF0LnBmYy5wcmlfZW5fYml0bWFwOworCXJldHVybiAwOworfQorCiBjb25zdCBzdHJ1Y3QgZGNibmxfcnRubF9vcHMgYm54MnhfZGNibmxfb3BzID0gewotCS5nZXRzdGF0ZSAgICAgICA9IGJueDJ4X2RjYm5sX2dldF9zdGF0ZSwKLQkuc2V0c3RhdGUgICAgICAgPSBibngyeF9kY2JubF9zZXRfc3RhdGUsCi0JLmdldHBlcm1od2FkZHIgID0gYm54MnhfZGNibmxfZ2V0X3Blcm1faHdfYWRkciwKLQkuc2V0cGd0Y2NmZ3R4ICAgPSBibngyeF9kY2JubF9zZXRfcGdfdGNjZmdfdHgsCi0JLnNldHBnYndnY2ZndHggID0gYm54MnhfZGNibmxfc2V0X3BnX2J3Z2NmZ190eCwKLQkuc2V0cGd0Y2NmZ3J4ICAgPSBibngyeF9kY2JubF9zZXRfcGdfdGNjZmdfcngsCi0JLnNldHBnYndnY2ZncnggID0gYm54MnhfZGNibmxfc2V0X3BnX2J3Z2NmZ19yeCwKLQkuZ2V0cGd0Y2NmZ3R4ICAgPSBibngyeF9kY2JubF9nZXRfcGdfdGNjZmdfdHgsCi0JLmdldHBnYndnY2ZndHggID0gYm54MnhfZGNibmxfZ2V0X3BnX2J3Z2NmZ190eCwKLQkuZ2V0cGd0Y2NmZ3J4ICAgPSBibngyeF9kY2JubF9nZXRfcGdfdGNjZmdfcngsCi0JLmdldHBnYndnY2ZncnggID0gYm54MnhfZGNibmxfZ2V0X3BnX2J3Z2NmZ19yeCwKLQkuc2V0cGZjY2ZnICAgICAgPSBibngyeF9kY2JubF9zZXRfcGZjX2NmZywKLQkuZ2V0cGZjY2ZnICAgICAgPSBibngyeF9kY2JubF9nZXRfcGZjX2NmZywKLQkuc2V0YWxsICAgICAgICAgPSBibngyeF9kY2JubF9zZXRfYWxsLAotCS5nZXRjYXAgICAgICAgICA9IGJueDJ4X2RjYm5sX2dldF9jYXAsCi0JLmdldG51bXRjcyAgICAgID0gYm54MnhfZGNibmxfZ2V0X251bXRjcywKLQkuc2V0bnVtdGNzICAgICAgPSBibngyeF9kY2JubF9zZXRfbnVtdGNzLAotCS5nZXRwZmNzdGF0ZSAgICA9IGJueDJ4X2RjYm5sX2dldF9wZmNfc3RhdGUsCi0JLnNldHBmY3N0YXRlICAgID0gYm54MnhfZGNibmxfc2V0X3BmY19zdGF0ZSwKLQkuc2V0YXBwICAgICAgICAgPSBibngyeF9kY2JubF9zZXRfYXBwX3VwLAotCS5nZXRkY2J4ICAgICAgICA9IGJueDJ4X2RjYm5sX2dldF9kY2J4LAotCS5zZXRkY2J4ICAgICAgICA9IGJueDJ4X2RjYm5sX3NldF9kY2J4LAotCS5nZXRmZWF0Y2ZnICAgICA9IGJueDJ4X2RjYm5sX2dldF9mZWF0Y2ZnLAotCS5zZXRmZWF0Y2ZnICAgICA9IGJueDJ4X2RjYm5sX3NldF9mZWF0Y2ZnLAorCS5nZXRzdGF0ZQkJPSBibngyeF9kY2JubF9nZXRfc3RhdGUsCisJLnNldHN0YXRlCQk9IGJueDJ4X2RjYm5sX3NldF9zdGF0ZSwKKwkuZ2V0cGVybWh3YWRkcgkJPSBibngyeF9kY2JubF9nZXRfcGVybV9od19hZGRyLAorCS5zZXRwZ3RjY2ZndHgJCT0gYm54MnhfZGNibmxfc2V0X3BnX3RjY2ZnX3R4LAorCS5zZXRwZ2J3Z2NmZ3R4CQk9IGJueDJ4X2RjYm5sX3NldF9wZ19id2djZmdfdHgsCisJLnNldHBndGNjZmdyeAkJPSBibngyeF9kY2JubF9zZXRfcGdfdGNjZmdfcngsCisJLnNldHBnYndnY2ZncngJCT0gYm54MnhfZGNibmxfc2V0X3BnX2J3Z2NmZ19yeCwKKwkuZ2V0cGd0Y2NmZ3R4CQk9IGJueDJ4X2RjYm5sX2dldF9wZ190Y2NmZ190eCwKKwkuZ2V0cGdid2djZmd0eAkJPSBibngyeF9kY2JubF9nZXRfcGdfYndnY2ZnX3R4LAorCS5nZXRwZ3RjY2ZncngJCT0gYm54MnhfZGNibmxfZ2V0X3BnX3RjY2ZnX3J4LAorCS5nZXRwZ2J3Z2NmZ3J4CQk9IGJueDJ4X2RjYm5sX2dldF9wZ19id2djZmdfcngsCisJLnNldHBmY2NmZwkJPSBibngyeF9kY2JubF9zZXRfcGZjX2NmZywKKwkuZ2V0cGZjY2ZnCQk9IGJueDJ4X2RjYm5sX2dldF9wZmNfY2ZnLAorCS5zZXRhbGwJCQk9IGJueDJ4X2RjYm5sX3NldF9hbGwsCisJLmdldGNhcAkJCT0gYm54MnhfZGNibmxfZ2V0X2NhcCwKKwkuZ2V0bnVtdGNzCQk9IGJueDJ4X2RjYm5sX2dldF9udW10Y3MsCisJLnNldG51bXRjcwkJPSBibngyeF9kY2JubF9zZXRfbnVtdGNzLAorCS5nZXRwZmNzdGF0ZQkJPSBibngyeF9kY2JubF9nZXRfcGZjX3N0YXRlLAorCS5zZXRwZmNzdGF0ZQkJPSBibngyeF9kY2JubF9zZXRfcGZjX3N0YXRlLAorCS5zZXRhcHAJCQk9IGJueDJ4X2RjYm5sX3NldF9hcHBfdXAsCisJLmdldGRjYngJCT0gYm54MnhfZGNibmxfZ2V0X2RjYngsCisJLnNldGRjYngJCT0gYm54MnhfZGNibmxfc2V0X2RjYngsCisJLmdldGZlYXRjZmcJCT0gYm54MnhfZGNibmxfZ2V0X2ZlYXRjZmcsCisJLnNldGZlYXRjZmcJCT0gYm54MnhfZGNibmxfc2V0X2ZlYXRjZmcsCisJLnBlZXJfZ2V0YXBwaW5mbwk9IGJueDJ4X3BlZXJfYXBwaW5mbywKKwkucGVlcl9nZXRhcHB0YWJsZQk9IGJueDJ4X3BlZXJfYXBwdGFibGUsCisJLmNlZV9wZWVyX2dldHBnCQk9IGJueDJ4X2NlZV9wZWVyX2dldHBnLAorCS5jZWVfcGVlcl9nZXRwZmMJPSBibngyeF9jZWVfcGVlcl9nZXRwZmMsCiB9OwogCiAjZW5kaWYgLyogQkNNX0RDQk5MICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9kY2IuaCBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2RjYi5oCmluZGV4IDcxYjhlZGEuLmJlZDM2OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2RjYi5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2RjYi5oCkBAIC0xLDYgKzEsNiBAQAogLyogYm54MnhfZGNiLmg6IEJyb2FkY29tIEV2ZXJlc3QgbmV0d29yayBkcml2ZXIuCiAgKgotICogQ29weXJpZ2h0IDIwMDktMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IDIwMDktMjAxMSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgogICoKICAqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKICAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CkBAIC02MSw5ICs2MSw2IEBACiAjZGVmaW5lIEJOWDJYX0RDQlhfT1ZFUldSSVRFX1NFVFRJTkdTX0VOQUJMRQkJMQogI2RlZmluZSBCTlgyWF9EQ0JYX09WRVJXUklURV9TRVRUSU5HU19JTlZBTElECShCTlgyWF9EQ0JYX0NPTkZJR19JTlZfVkFMVUUpCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBMTERQIHByb3RvY29sIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdHJ1Y3QgYm54MnhfY29uZmlnX2xsZHBfcGFyYW1zIHsKIAl1MzIgb3ZlcndyaXRlX3NldHRpbmdzOwogCXUzMiBtc2dfdHhfaG9sZDsKQEAgLTgzLDkgKzgwLDYgQEAKIAkJdTMyIGFwcF9pZDsKIH07CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBEQ0JYIHByb3RvY29sIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdHJ1Y3QgYm54MnhfY29uZmlnX2RjYnhfcGFyYW1zIHsKIAl1MzIgb3ZlcndyaXRlX3NldHRpbmdzOwogCXUzMiBhZG1pbl9kY2J4X3ZlcnNpb247CkBAIC0xODMsOSArMTc3LDEzIEBACiAKIGVudW0gewogCUJOWDJYX0RDQlhfU1RBVEVfTkVHX1JFQ0VJVkVEID0gMHgxLAotCUJOWDJYX0RDQlhfU1RBVEVfVFhfUEFVU0VEID0gMHgyLAotCUJOWDJYX0RDQlhfU1RBVEVfVFhfUkVMRUFTRUQgPSAweDQKKyNpZmRlZiBCQ01fQ05JQworCUJOWDJYX0RDQlhfU1RBVEVfSVNDU0lfU1RPUFBFRCwKKyNlbmRpZgorCUJOWDJYX0RDQlhfU1RBVEVfVFhfUEFVU0VELAorCUJOWDJYX0RDQlhfU1RBVEVfVFhfUkVMRUFTRUQKIH07CisKIHZvaWQgYm54MnhfZGNieF9zZXRfcGFyYW1zKHN0cnVjdCBibngyeCAqYnAsIHUzMiBzdGF0ZSk7CiAKIC8qIERDQiBuZXRsaW5rICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9ldGh0b29sLmMKaW5kZXggODljYjk3Ny4uNzI3ZmU4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2V0aHRvb2wuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGJueDJ4X2V0aHRvb2wuYzogQnJvYWRjb20gRXZlcmVzdCBuZXR3b3JrIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTEgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTE2Nyw2ICsxNjcsNyBAQAogewogCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBjZmdfaWR4ID0gYm54MnhfZ2V0X2xpbmtfY2ZnX2lkeChicCk7CisKIAkvKiBEdWFsIE1lZGlhIGJvYXJkcyBwcmVzZW50IGFsbCBhdmFpbGFibGUgcG9ydCB0eXBlcyAqLwogCWNtZC0+c3VwcG9ydGVkID0gYnAtPnBvcnQuc3VwcG9ydGVkW2NmZ19pZHhdIHwKIAkJKGJwLT5wb3J0LnN1cHBvcnRlZFtjZmdfaWR4IF4gMV0gJgpAQCAtMTc2LDE2ICsxNzcsMTYgQEAKIAlpZiAoKGJwLT5zdGF0ZSA9PSBCTlgyWF9TVEFURV9PUEVOKSAmJgogCSAgICAhKGJwLT5mbGFncyAmIE1GX0ZVTkNfRElTKSAmJgogCSAgICAoYnAtPmxpbmtfdmFycy5saW5rX3VwKSkgewotCQljbWQtPnNwZWVkID0gYnAtPmxpbmtfdmFycy5saW5lX3NwZWVkOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCBicC0+bGlua192YXJzLmxpbmVfc3BlZWQpOwogCQljbWQtPmR1cGxleCA9IGJwLT5saW5rX3ZhcnMuZHVwbGV4OwogCX0gZWxzZSB7Ci0KLQkJY21kLT5zcGVlZCA9IGJwLT5saW5rX3BhcmFtcy5yZXFfbGluZV9zcGVlZFtjZmdfaWR4XTsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KAorCQkJY21kLCBicC0+bGlua19wYXJhbXMucmVxX2xpbmVfc3BlZWRbY2ZnX2lkeF0pOwogCQljbWQtPmR1cGxleCA9IGJwLT5saW5rX3BhcmFtcy5yZXFfZHVwbGV4W2NmZ19pZHhdOwogCX0KIAogCWlmIChJU19NRihicCkpCi0JCWNtZC0+c3BlZWQgPSBibngyeF9nZXRfbWZfc3BlZWQoYnApOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCBibngyeF9nZXRfbWZfc3BlZWQoYnApKTsKIAogCWlmIChicC0+cG9ydC5zdXBwb3J0ZWRbY2ZnX2lkeF0gJiBTVVBQT1JURURfVFApCiAJCWNtZC0+cG9ydCA9IFBPUlRfVFA7CkBAIC0yMDYsMTAgKzIwNywxMSBAQAogCWNtZC0+bWF4cnhwa3QgPSAwOwogCiAJRFAoTkVUSUZfTVNHX0xJTkssICJldGh0b29sX2NtZDogY21kICVkXG4iCi0JICAgRFBfTEVWRUwgIiAgc3VwcG9ydGVkIDB4JXggIGFkdmVydGlzaW5nIDB4JXggIHNwZWVkICVkXG4iCisJICAgRFBfTEVWRUwgIiAgc3VwcG9ydGVkIDB4JXggIGFkdmVydGlzaW5nIDB4JXggIHNwZWVkICV1XG4iCiAJICAgRFBfTEVWRUwgIiAgZHVwbGV4ICVkICBwb3J0ICVkICBwaHlfYWRkcmVzcyAlZCAgdHJhbnNjZWl2ZXIgJWRcbiIKIAkgICBEUF9MRVZFTCAiICBhdXRvbmVnICVkICBtYXh0eHBrdCAlZCAgbWF4cnhwa3QgJWRcbiIsCi0JICAgY21kLT5jbWQsIGNtZC0+c3VwcG9ydGVkLCBjbWQtPmFkdmVydGlzaW5nLCBjbWQtPnNwZWVkLAorCSAgIGNtZC0+Y21kLCBjbWQtPnN1cHBvcnRlZCwgY21kLT5hZHZlcnRpc2luZywKKwkgICBldGh0b29sX2NtZF9zcGVlZChjbWQpLAogCSAgIGNtZC0+ZHVwbGV4LCBjbWQtPnBvcnQsIGNtZC0+cGh5X2FkZHJlc3MsIGNtZC0+dHJhbnNjZWl2ZXIsCiAJICAgY21kLT5hdXRvbmVnLCBjbWQtPm1heHR4cGt0LCBjbWQtPm1heHJ4cGt0KTsKIApAQCAtMjI2LDE2ICsyMjgsMTUgQEAKIAkJcmV0dXJuIDA7CiAKIAlEUChORVRJRl9NU0dfTElOSywgImV0aHRvb2xfY21kOiBjbWQgJWRcbiIKLQkgICAiICBzdXBwb3J0ZWQgMHgleCAgYWR2ZXJ0aXNpbmcgMHgleCAgc3BlZWQgJWQgc3BlZWRfaGkgJWRcbiIKKwkgICAiICBzdXBwb3J0ZWQgMHgleCAgYWR2ZXJ0aXNpbmcgMHgleCAgc3BlZWQgJXVcbiIKIAkgICAiICBkdXBsZXggJWQgIHBvcnQgJWQgIHBoeV9hZGRyZXNzICVkICB0cmFuc2NlaXZlciAlZFxuIgogCSAgICIgIGF1dG9uZWcgJWQgIG1heHR4cGt0ICVkICBtYXhyeHBrdCAlZFxuIiwKLQkgICBjbWQtPmNtZCwgY21kLT5zdXBwb3J0ZWQsIGNtZC0+YWR2ZXJ0aXNpbmcsIGNtZC0+c3BlZWQsCi0JICAgY21kLT5zcGVlZF9oaSwKKwkgICBjbWQtPmNtZCwgY21kLT5zdXBwb3J0ZWQsIGNtZC0+YWR2ZXJ0aXNpbmcsCisJICAgZXRodG9vbF9jbWRfc3BlZWQoY21kKSwKIAkgICBjbWQtPmR1cGxleCwgY21kLT5wb3J0LCBjbWQtPnBoeV9hZGRyZXNzLCBjbWQtPnRyYW5zY2VpdmVyLAogCSAgIGNtZC0+YXV0b25lZywgY21kLT5tYXh0eHBrdCwgY21kLT5tYXhyeHBrdCk7CiAKLQlzcGVlZCA9IGNtZC0+c3BlZWQ7Ci0Jc3BlZWQgfD0gKGNtZC0+c3BlZWRfaGkgPDwgMTYpOworCXNwZWVkID0gZXRodG9vbF9jbWRfc3BlZWQoY21kKTsKIAogCWlmIChJU19NRl9TSShicCkpIHsKIAkJdTMyIHBhcnQ7CkBAIC00MzksNyArNDQwLDcgQEAKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIlVuc3VwcG9ydGVkIHNwZWVkICVkXG4iLCBzcGVlZCk7CisJCQlEUChORVRJRl9NU0dfTElOSywgIlVuc3VwcG9ydGVkIHNwZWVkICV1XG4iLCBzcGVlZCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC0xMjE5LDcgKzEyMjAsOCBAQAogCX0KIAogCWlmICgoZXJpbmctPnJ4X3BlbmRpbmcgPiBNQVhfUlhfQVZBSUwpIHx8Ci0JICAgIChlcmluZy0+cnhfcGVuZGluZyA8IE1JTl9SWF9BVkFJTCkgfHwKKwkgICAgKGVyaW5nLT5yeF9wZW5kaW5nIDwgKGJwLT5kaXNhYmxlX3RwYSA/IE1JTl9SWF9TSVpFX05PTlRQQSA6CisJCQkJCQkgICAgTUlOX1JYX1NJWkVfVFBBKSkgfHwKIAkgICAgKGVyaW5nLT50eF9wZW5kaW5nID4gTUFYX1RYX0FWQUlMKSB8fAogCSAgICAoZXJpbmctPnR4X3BlbmRpbmcgPD0gTUFYX1NLQl9GUkFHUyArIDQpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEyOTksOTEgKzEzMDEsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGJueDJ4X3NldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgY2hhbmdlZCA9IDA7Ci0JaW50IHJjID0gMDsKLQotCWlmIChicC0+cmVjb3Zlcnlfc3RhdGUgIT0gQk5YMlhfUkVDT1ZFUllfRE9ORSkgewotCQlwcmludGsoS0VSTl9FUlIgIkhhbmRsaW5nIHBhcml0eSBlcnJvciByZWNvdmVyeS4gVHJ5IGFnYWluIGxhdGVyXG4iKTsKLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCi0JaWYgKCEoZGF0YSAmIEVUSF9GTEFHX1JYVkxBTikpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKChkYXRhICYgRVRIX0ZMQUdfTFJPKSAmJiBicC0+cnhfY3N1bSAmJiBicC0+ZGlzYWJsZV90cGEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmMgPSBldGh0b29sX29wX3NldF9mbGFncyhkZXYsIGRhdGEsIEVUSF9GTEFHX0xSTyB8IEVUSF9GTEFHX1JYVkxBTiB8Ci0JCQkJCUVUSF9GTEFHX1RYVkxBTiB8IEVUSF9GTEFHX1JYSEFTSCk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLQkvKiBUUEEgcmVxdWlyZXMgUnggQ1NVTSBvZmZsb2FkaW5nICovCi0JaWYgKChkYXRhICYgRVRIX0ZMQUdfTFJPKSAmJiBicC0+cnhfY3N1bSkgewotCQlpZiAoIShicC0+ZmxhZ3MgJiBUUEFfRU5BQkxFX0ZMQUcpKSB7Ci0JCQlicC0+ZmxhZ3MgfD0gVFBBX0VOQUJMRV9GTEFHOwotCQkJY2hhbmdlZCA9IDE7Ci0JCX0KLQl9IGVsc2UgaWYgKGJwLT5mbGFncyAmIFRQQV9FTkFCTEVfRkxBRykgewotCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0xSTzsKLQkJYnAtPmZsYWdzICY9IH5UUEFfRU5BQkxFX0ZMQUc7Ci0JCWNoYW5nZWQgPSAxOwotCX0KLQotCWlmIChjaGFuZ2VkICYmIG5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQlibngyeF9uaWNfdW5sb2FkKGJwLCBVTkxPQURfTk9STUFMKTsKLQkJcmMgPSBibngyeF9uaWNfbG9hZChicCwgTE9BRF9OT1JNQUwpOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHUzMiBibngyeF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JcmV0dXJuIGJwLT5yeF9jc3VtOwotfQotCi1zdGF0aWMgaW50IGJueDJ4X3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCByYyA9IDA7Ci0KLQlpZiAoYnAtPnJlY292ZXJ5X3N0YXRlICE9IEJOWDJYX1JFQ09WRVJZX0RPTkUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJIYW5kbGluZyBwYXJpdHkgZXJyb3IgcmVjb3ZlcnkuIFRyeSBhZ2FpbiBsYXRlclxuIik7Ci0JCXJldHVybiAtRUFHQUlOOwotCX0KLQotCWJwLT5yeF9jc3VtID0gZGF0YTsKLQotCS8qIERpc2FibGUgVFBBLCB3aGVuIFJ4IENTVU0gaXMgZGlzYWJsZWQuIE90aGVyd2lzZSBhbGwKLQkgICBUUEEnZWQgcGFja2V0cyB3aWxsIGJlIGRpc2NhcmRlZCBkdWUgdG8gd3JvbmcgVENQIENTVU0gKi8KLQlpZiAoIWRhdGEpIHsKLQkJdTMyIGZsYWdzID0gZXRodG9vbF9vcF9nZXRfZmxhZ3MoZGV2KTsKLQotCQlyYyA9IGJueDJ4X3NldF9mbGFncyhkZXYsIChmbGFncyAmIH5FVEhfRkxBR19MUk8pKTsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgYm54Mnhfc2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlpZiAoZGF0YSkgewotCQlkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPX0VDTik7Ci0JCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwotCX0gZWxzZSB7Ci0JCWRldi0+ZmVhdHVyZXMgJj0gfihORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPX0VDTik7Ci0JCWRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfVFNPNjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJY2hhciBzdHJpbmdbRVRIX0dTVFJJTkdfTEVOXTsKIH0gYm54MnhfdGVzdHNfc3RyX2FycltCTlgyWF9OVU1fVEVTVFNdID0gewpAQCAtMjA5NywzNiArMjAxNCwzOCBAQAogCX0KIH0KIAotc3RhdGljIGludCBibngyeF9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQorc3RhdGljIGludCBibngyeF9zZXRfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICBlbnVtIGV0aHRvb2xfcGh5c19pZF9zdGF0ZSBzdGF0ZSkKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgaTsKIAogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FQUdBSU47CiAKIAlpZiAoIWJwLT5wb3J0LnBtZikKLQkJcmV0dXJuIDA7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCWlmIChkYXRhID09IDApCi0JCWRhdGEgPSAyOworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIEVUSFRPT0xfSURfQUNUSVZFOgorCQlyZXR1cm4gMTsJLyogY3ljbGUgb24vb2ZmIG9uY2UgcGVyIHNlY29uZCAqLwogCi0JZm9yIChpID0gMDsgaSA8IChkYXRhICogMik7IGkrKykgewotCQlpZiAoKGkgJSAyKSA9PSAwKQotCQkJYm54Mnhfc2V0X2xlZCgmYnAtPmxpbmtfcGFyYW1zLCAmYnAtPmxpbmtfdmFycywKLQkJCQkgICAgICBMRURfTU9ERV9PTiwgU1BFRURfMTAwMCk7Ci0JCWVsc2UKLQkJCWJueDJ4X3NldF9sZWQoJmJwLT5saW5rX3BhcmFtcywgJmJwLT5saW5rX3ZhcnMsCi0JCQkJICAgICAgTEVEX01PREVfRlJPTlRfUEFORUxfT0ZGLCAwKTsKKwljYXNlIEVUSFRPT0xfSURfT046CisJCWJueDJ4X3NldF9sZWQoJmJwLT5saW5rX3BhcmFtcywgJmJwLT5saW5rX3ZhcnMsCisJCQkgICAgICBMRURfTU9ERV9PTiwgU1BFRURfMTAwMCk7CisJCWJyZWFrOwogCi0JCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDUwMCk7Ci0JCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJCWJyZWFrOworCWNhc2UgRVRIVE9PTF9JRF9PRkY6CisJCWJueDJ4X3NldF9sZWQoJmJwLT5saW5rX3BhcmFtcywgJmJwLT5saW5rX3ZhcnMsCisJCQkgICAgICBMRURfTU9ERV9GUk9OVF9QQU5FTF9PRkYsIDApOworCisJCWJyZWFrOworCisJY2FzZSBFVEhUT09MX0lEX0lOQUNUSVZFOgorCQlibngyeF9zZXRfbGVkKCZicC0+bGlua19wYXJhbXMsICZicC0+bGlua192YXJzLAorCQkJICAgICAgTEVEX01PREVfT1BFUiwKKwkJCSAgICAgIGJwLT5saW5rX3ZhcnMubGluZV9zcGVlZCk7CiAJfQogCi0JYm54Mnhfc2V0X2xlZCgmYnAtPmxpbmtfcGFyYW1zLCAmYnAtPmxpbmtfdmFycywKLQkJICAgICAgTEVEX01PREVfT1BFUiwgYnAtPmxpbmtfdmFycy5saW5lX3NwZWVkKTsKLQogCXJldHVybiAwOwogfQogCkBAIC0yMjA0LDIwICsyMTIzLDEwIEBACiAJLnNldF9yaW5ncGFyYW0JCT0gYm54Mnhfc2V0X3JpbmdwYXJhbSwKIAkuZ2V0X3BhdXNlcGFyYW0JCT0gYm54MnhfZ2V0X3BhdXNlcGFyYW0sCiAJLnNldF9wYXVzZXBhcmFtCQk9IGJueDJ4X3NldF9wYXVzZXBhcmFtLAotCS5nZXRfcnhfY3N1bQkJPSBibngyeF9nZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0JCT0gYm54Mnhfc2V0X3J4X2NzdW0sCi0JLmdldF90eF9jc3VtCQk9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCi0JLnNldF90eF9jc3VtCQk9IGV0aHRvb2xfb3Bfc2V0X3R4X2h3X2NzdW0sCi0JLnNldF9mbGFncwkJPSBibngyeF9zZXRfZmxhZ3MsCi0JLmdldF9mbGFncwkJPSBldGh0b29sX29wX2dldF9mbGFncywKLQkuZ2V0X3NnCQkJPSBldGh0b29sX29wX2dldF9zZywKLQkuc2V0X3NnCQkJPSBldGh0b29sX29wX3NldF9zZywKLQkuZ2V0X3RzbwkJPSBldGh0b29sX29wX2dldF90c28sCi0JLnNldF90c28JCT0gYm54Mnhfc2V0X3RzbywKIAkuc2VsZl90ZXN0CQk9IGJueDJ4X3NlbGZfdGVzdCwKIAkuZ2V0X3NzZXRfY291bnQJCT0gYm54MnhfZ2V0X3NzZXRfY291bnQsCiAJLmdldF9zdHJpbmdzCQk9IGJueDJ4X2dldF9zdHJpbmdzLAotCS5waHlzX2lkCQk9IGJueDJ4X3BoeXNfaWQsCisJLnNldF9waHlzX2lkCQk9IGJueDJ4X3NldF9waHlzX2lkLAogCS5nZXRfZXRodG9vbF9zdGF0cwk9IGJueDJ4X2dldF9ldGh0b29sX3N0YXRzLAogCS5nZXRfcnhuZmMJCT0gYm54MnhfZ2V0X3J4bmZjLAogCS5nZXRfcnhmaF9pbmRpcgkJPSBibngyeF9nZXRfcnhmaF9pbmRpciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2Z3X2RlZnMuaCBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2Z3X2RlZnMuaAppbmRleCBmNGU1YjFjLi45ZmUzNjc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9md19kZWZzLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZndfZGVmcy5oCkBAIC0xLDYgKzEsNiBAQAogLyogYm54MnhfZndfZGVmcy5oOiBCcm9hZGNvbSBFdmVyZXN0IG5ldHdvcmsgZHJpdmVyLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwNy0yMDEwIEJyb2FkY29tIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZndfZmlsZV9oZHIuaCBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2Z3X2ZpbGVfaGRyLmgKaW5kZXggZjgwNzI2Mi4uZjRhMDdmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZndfZmlsZV9oZHIuaAorKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9md19maWxlX2hkci5oCkBAIC0xLDYgKzEsNiBAQAogLyogYm54MnhfZndfZmlsZV9oZHIuaDogRlcgYmluYXJ5IGZpbGUgaGVhZGVyIHN0cnVjdHVyZS4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTEgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2hzaS5oIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfaHNpLmgKaW5kZXggZGFjMWJmOS4uY2RmMTlmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfaHNpLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfaHNpLmgKQEAgLTEsNiArMSw2IEBACiAvKiBibngyeF9oc2kuaDogQnJvYWRjb20gRXZlcmVzdCBuZXR3b3JrIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTEgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTE5MjksNyArMTkyOSw3IEBACiAKICNkZWZpbmUgQkNNXzU3MTBfRldfTUFKT1JfVkVSU0lPTgkJCTYKICNkZWZpbmUgQkNNXzU3MTBfRldfTUlOT1JfVkVSU0lPTgkJCTIKLSNkZWZpbmUgQkNNXzU3MTBfRldfUkVWSVNJT05fVkVSU0lPTgkJCTUKKyNkZWZpbmUgQkNNXzU3MTBfRldfUkVWSVNJT05fVkVSU0lPTgkJCTkKICNkZWZpbmUgQkNNXzU3MTBfRldfRU5HSU5FRVJJTkdfVkVSU0lPTgkJCTAKICNkZWZpbmUgQkNNXzU3MTBfRldfQ09NUElMRV9GTEFHUwkJCTEKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfaW5pdC5oIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfaW5pdC5oCmluZGV4IGZhNmRiZTMuLmQ1Mzk5MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2luaXQuaAorKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9pbml0LmgKQEAgLTEsNyArMSw3IEBACiAvKiBibngyeF9pbml0Lmg6IEJyb2FkY29tIEV2ZXJlc3QgbmV0d29yayBkcml2ZXIuCiAgKiAgICAgICAgICAgICAgIFN0cnVjdHVyZXMgYW5kIG1hY3JvZXMgbmVlZGVkIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24uCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDExIEJyb2FkY29tIENvcnBvcmF0aW9uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9pbml0X29wcy5oIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfaW5pdF9vcHMuaAppbmRleCA2NmRmMjlmLi5hYWZkMDIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9pbml0X29wcy5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2luaXRfb3BzLmgKQEAgLTIsNyArMiw3IEBACiAgKiAgICAgICAgICAgICAgIFN0YXRpYyBmdW5jdGlvbnMgbmVlZGVkIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24uCiAgKiAgICAgICAgICAgICAgIFRoaXMgZmlsZSBpcyAiaW5jbHVkZWQiIGluIGJueDJ4X21haW4uYy4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTEgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2xpbmsuYyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2xpbmsuYwppbmRleCA5NzRlZjJiLi4wNzZlMTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9saW5rLmMKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbGluay5jCkBAIC0zODUsNyArMzg1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgkJCUVUUyBzZWN0aW9uCQkJCSAgKi8KKy8qCQkJUEZDIHNlY3Rpb24JCQkJICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIHZvaWQgYm54MnhfYm1hYzJfZ2V0X3BmY19zdGF0KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLApAQCAtMTMwMSwxNCArMTMwMSwxMiBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogZ2V0X2VtYWNfYmFzZQorLyoqCisgKiBibngyeF9nZXRfZW1hY19iYXNlIC0gcmV0cml2ZSBlbWFjIGJhc2UgYWRkcmVzcwogICoKLSAqIEBwYXJhbSBjYgotICogQHBhcmFtIG1kY19tZGlvX2FjY2VzcwotICogQHBhcmFtIHBvcnQKLSAqCi0gKiBAcmV0dXJuIHUzMgorICogQGJwOgkJCWRyaXZlciBoYW5kbGUKKyAqIEBtZGNfbWRpb19hY2Nlc3M6CWFjY2VzcyB0eXBlCisgKiBAcG9ydDoJCXBvcnQgaWQKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHNlbGVjdHMgdGhlIE1EQy9NRElPIGFjY2VzcyAodGhyb3VnaCBlbWFjMCBvcgogICogZW1hYzEpIGRlcGVuZCBvbiB0aGUgbWRjX21kaW9fYWNjZXNzLCBwb3J0LCBwb3J0IHN3YXBwZWQuIEVhY2gKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X21haW4uYyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X21haW4uYwppbmRleCBhOTdhNGExLi5hOTdkOWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbWFpbi5jCkBAIC0xLDYgKzEsNiBAQAogLyogYm54MnhfbWFpbi5jOiBCcm9hZGNvbSBFdmVyZXN0IG5ldHdvcmsgZHJpdmVyLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwNy0yMDEwIEJyb2FkY29tIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNTcxLDcgKzU3MSw3IEBACiAJCQkJICAgICAgc3RydWN0IGRtYWVfY29tbWFuZCAqZG1hZSkKIHsKIAl1MzIgKndiX2NvbXAgPSBibngyeF9zcChicCwgd2JfY29tcCk7Ci0JaW50IGNudCA9IENISVBfUkVWX0lTX1NMT1coYnApID8gKDQwMDAwMCkgOiA0MDsKKwlpbnQgY250ID0gQ0hJUF9SRVZfSVNfU0xPVyhicCkgPyAoNDAwMDAwKSA6IDQwMDA7CiAJaW50IHJjID0gMDsKIAogCURQKEJOWDJYX01TR19PRkYsICJkYXRhIGJlZm9yZSBbMHglMDh4IDB4JTA4eCAweCUwOHggMHglMDh4XVxuIiwKQEAgLTIwMzYsNyArMjAzNiw3IEBACiAJcmV0dXJuIENNTkdfRk5TX05PTkU7CiB9CiAKLXN0YXRpYyB2b2lkIGJueDJ4X3JlYWRfbWZfY2ZnKHN0cnVjdCBibngyeCAqYnApCit2b2lkIGJueDJ4X3JlYWRfbWZfY2ZnKHN0cnVjdCBibngyeCAqYnApCiB7CiAJaW50IHZuLCBuID0gKENISVBfTU9ERV9JU180X1BPUlQoYnApID8gMiA6IDEpOwogCkBAIC0yMTIzLDcgKzIxMjMsNiBAQAogLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdXBvbiBsaW5rIGludGVycnVwdCAqLwogc3RhdGljIHZvaWQgYm54MnhfbGlua19hdHRuKHN0cnVjdCBibngyeCAqYnApCiB7Ci0JdTMyIHByZXZfbGlua19zdGF0dXMgPSBicC0+bGlua192YXJzLmxpbmtfc3RhdHVzOwogCS8qIE1ha2Ugc3VyZSB0aGF0IHdlIGFyZSBzeW5jZWQgd2l0aCB0aGUgY3VycmVudCBzdGF0aXN0aWNzICovCiAJYm54Mnhfc3RhdHNfaGFuZGxlKGJwLCBTVEFUU19FVkVOVF9TVE9QKTsKIApAQCAtMjE2OCwxNyArMjE2NywxNSBAQAogCQkJICAgInNpbmdsZSBmdW5jdGlvbiBtb2RlIHdpdGhvdXQgZmFpcm5lc3NcbiIpOwogCX0KIAorCV9fYm54MnhfbGlua19yZXBvcnQoYnApOworCiAJaWYgKElTX01GKGJwKSkKIAkJYm54MnhfbGlua19zeW5jX25vdGlmeShicCk7Ci0KLQkvKiBpbmRpY2F0ZSBsaW5rIHN0YXR1cyBvbmx5IGlmIGxpbmsgc3RhdHVzIGFjdHVhbGx5IGNoYW5nZWQgKi8KLQlpZiAocHJldl9saW5rX3N0YXR1cyAhPSBicC0+bGlua192YXJzLmxpbmtfc3RhdHVzKQotCQlibngyeF9saW5rX3JlcG9ydChicCk7CiB9CiAKIHZvaWQgYm54MnhfX2xpbmtfc3RhdHVzX3VwZGF0ZShzdHJ1Y3QgYm54MnggKmJwKQogewotCWlmICgoYnAtPnN0YXRlICE9IEJOWDJYX1NUQVRFX09QRU4pIHx8IChicC0+ZmxhZ3MgJiBNRl9GVU5DX0RJUykpCisJaWYgKGJwLT5zdGF0ZSAhPSBCTlgyWF9TVEFURV9PUEVOKQogCQlyZXR1cm47CiAKIAlibngyeF9saW5rX3N0YXR1c191cGRhdGUoJmJwLT5saW5rX3BhcmFtcywgJmJwLT5saW5rX3ZhcnMpOwpAQCAtMjE4OCwxMCArMjE4NSw2IEBACiAJZWxzZQogCQlibngyeF9zdGF0c19oYW5kbGUoYnAsIFNUQVRTX0VWRU5UX1NUT1ApOwogCi0JLyogdGhlIGxpbmsgc3RhdHVzIHVwZGF0ZSBjb3VsZCBiZSB0aGUgcmVzdWx0IG9mIGEgRENDIGV2ZW50Ci0JICAgaGVuY2UgcmUtcmVhZCB0aGUgc2htZW0gbWYgY29uZmlndXJhdGlvbiAqLwotCWJueDJ4X3JlYWRfbWZfY2ZnKGJwKTsKLQogCS8qIGluZGljYXRlIGxpbmsgc3RhdHVzICovCiAJYm54MnhfbGlua19yZXBvcnQoYnApOwogfQpAQCAtMzEyMCwxMCArMzExMywxNCBAQAogCQkJaWYgKHZhbCAmIERSVl9TVEFUVVNfU0VUX01GX0JXKQogCQkJCWJueDJ4X3NldF9tZl9idyhicCk7CiAKLQkJCWJueDJ4X19saW5rX3N0YXR1c191cGRhdGUoYnApOwogCQkJaWYgKChicC0+cG9ydC5wbWYgPT0gMCkgJiYgKHZhbCAmIERSVl9TVEFUVVNfUE1GKSkKIAkJCQlibngyeF9wbWZfdXBkYXRlKGJwKTsKIAorCQkJLyogQWx3YXlzIGNhbGwgaXQgaGVyZTogYm54MnhfbGlua19yZXBvcnQoKSB3aWxsCisJCQkgKiBwcmV2ZW50IHRoZSBsaW5rIGluZGljYXRpb24gZHVwbGljYXRpb24uCisJCQkgKi8KKwkJCWJueDJ4X19saW5rX3N0YXR1c191cGRhdGUoYnApOworCiAJCQlpZiAoYnAtPnBvcnQucG1mICYmCiAJCQkgICAgKHZhbCAmIERSVl9TVEFUVVNfRENCWF9ORUdPVElBVElPTl9SRVNVTFRTKSAmJgogCQkJCWJwLT5kY2J4X2VuYWJsZWQgPiAwKQpAQCAtMzY2OSw3ICszNjY2LDggQEAKIAkJCQkgICAgICB1bmlvbiBldmVudF9yaW5nX2VsZW0gKmVsZW0pCiB7CiAJaWYgKCFicC0+Y25pY19ldGhfZGV2LnN0YXJ0aW5nX2NpZCAgfHwKLQkgICAgY2lkIDwgYnAtPmNuaWNfZXRoX2Rldi5zdGFydGluZ19jaWQpCisJICAgIChjaWQgPCBicC0+Y25pY19ldGhfZGV2LnN0YXJ0aW5nX2NpZCAmJgorCSAgICBjaWQgIT0gYnAtPmNuaWNfZXRoX2Rldi5pc2NzaV9sMl9jaWQpKQogCQlyZXR1cm4gMTsKIAogCURQKEJOWDJYX01TR19TUCwgImdvdCBkZWxldGUgcmFtcm9kIGZvciBDTklDIENJRCAlZFxuIiwgY2lkKTsKQEAgLTM5MDQsMTAgKzM5MDIsOSBAQAogCiAJaWYgKHBvbGwpIHsKIAkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbMF07Ci0JCWludCByYzsKIAogCQlibngyeF90eF9pbnQoZnApOwotCQlyYyA9IGJueDJ4X3J4X2ludChmcCwgMTAwMCk7CisJCWJueDJ4X3J4X2ludChmcCwgMTAwMCk7CiAJfQogCiAJaWYgKCFCUF9OT01DUChicCkpIHsKQEAgLTQwNjIsNyArNDA1OSw2IEBACiAJc3RydWN0IGhjX3N0YXR1c19ibG9ja19kYXRhX2UyIHNiX2RhdGFfZTI7CiAJc3RydWN0IGhjX3N0YXR1c19ibG9ja19kYXRhX2UxeCBzYl9kYXRhX2UxeDsKIAlzdHJ1Y3QgaGNfc3RhdHVzX2Jsb2NrX3NtICAqaGNfc21fcDsKLQlzdHJ1Y3QgaGNfaW5kZXhfZGF0YSAqaGNfaW5kZXhfcDsKIAlpbnQgZGF0YV9zaXplOwogCXUzMiAqc2JfZGF0YV9wOwogCkBAIC00MDgzLDcgKzQwNzksNiBAQAogCQlzYl9kYXRhX2UyLmNvbW1vbi5ob3N0X3NiX2FkZHIuaGkgPSBVNjRfSEkobWFwcGluZyk7CiAJCXNiX2RhdGFfZTIuY29tbW9uLmhvc3Rfc2JfYWRkci5sbyA9IFU2NF9MTyhtYXBwaW5nKTsKIAkJaGNfc21fcCA9IHNiX2RhdGFfZTIuY29tbW9uLnN0YXRlX21hY2hpbmU7Ci0JCWhjX2luZGV4X3AgPSBzYl9kYXRhX2UyLmluZGV4X2RhdGE7CiAJCXNiX2RhdGFfcCA9ICh1MzIgKikmc2JfZGF0YV9lMjsKIAkJZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBoY19zdGF0dXNfYmxvY2tfZGF0YV9lMikvc2l6ZW9mKHUzMik7CiAJfSBlbHNlIHsKQEAgLTQwOTcsNyArNDA5Miw2IEBACiAJCXNiX2RhdGFfZTF4LmNvbW1vbi5ob3N0X3NiX2FkZHIuaGkgPSBVNjRfSEkobWFwcGluZyk7CiAJCXNiX2RhdGFfZTF4LmNvbW1vbi5ob3N0X3NiX2FkZHIubG8gPSBVNjRfTE8obWFwcGluZyk7CiAJCWhjX3NtX3AgPSBzYl9kYXRhX2UxeC5jb21tb24uc3RhdGVfbWFjaGluZTsKLQkJaGNfaW5kZXhfcCA9IHNiX2RhdGFfZTF4LmluZGV4X2RhdGE7CiAJCXNiX2RhdGFfcCA9ICh1MzIgKikmc2JfZGF0YV9lMXg7CiAJCWRhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaGNfc3RhdHVzX2Jsb2NrX2RhdGFfZTF4KS9zaXplb2YodTMyKTsKIAl9CkBAIC00NDU0LDcgKzQ0NDgsNyBAQAogCiAJZnAtPnN0YXRlID0gQk5YMlhfRlBfU1RBVEVfQ0xPU0VEOwogCi0JZnAtPmluZGV4ID0gZnAtPmNpZCA9IGZwX2lkeDsKKwlmcC0+Y2lkID0gZnBfaWR4OwogCWZwLT5jbF9pZCA9IEJQX0xfSUQoYnApICsgZnBfaWR4OwogCWZwLT5md19zYl9pZCA9IGJwLT5iYXNlX2Z3X25kc2IgKyBmcC0+Y2xfaWQgKyBDTklDX0NPTlRFWFRfVVNFOwogCWZwLT5pZ3Vfc2JfaWQgPSBicC0+aWd1X2Jhc2Vfc2IgKyBmcF9pZHggKyBDTklDX0NPTlRFWFRfVVNFOwpAQCAtNDU2Niw5ICs0NTYwLDExIEBACiAKIHN0YXRpYyB2b2lkIGJueDJ4X2d1bnppcF9lbmQoc3RydWN0IGJueDJ4ICpicCkKIHsKLQlrZnJlZShicC0+c3RybS0+d29ya3NwYWNlKTsKLQlrZnJlZShicC0+c3RybSk7Ci0JYnAtPnN0cm0gPSBOVUxMOworCWlmIChicC0+c3RybSkgeworCQlrZnJlZShicC0+c3RybS0+d29ya3NwYWNlKTsKKwkJa2ZyZWUoYnAtPnN0cm0pOworCQlicC0+c3RybSA9IE5VTEw7CisJfQogCiAJaWYgKGJwLT5ndW56aXBfYnVmKSB7CiAJCWRtYV9mcmVlX2NvaGVyZW50KCZicC0+cGRldi0+ZGV2LCBGV19CVUZfU0laRSwgYnAtPmd1bnppcF9idWYsCkBAIC01ODc2LDkgKzU4NzIsNiBAQAogCiAJYnAtPmRtYWVfcmVhZHkgPSAwOwogCXNwaW5fbG9ja19pbml0KCZicC0+ZG1hZV9sb2NrKTsKLQlyYyA9IGJueDJ4X2d1bnppcF9pbml0KGJwKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKIAogCXN3aXRjaCAobG9hZF9jb2RlKSB7CiAJY2FzZSBGV19NU0dfQ09ERV9EUlZfTE9BRF9DT01NT046CkBAIC01OTIyLDgwICs1OTE1LDEwIEBACiAKIHZvaWQgYm54MnhfZnJlZV9tZW0oc3RydWN0IGJueDJ4ICpicCkKIHsKLQotI2RlZmluZSBCTlgyWF9QQ0lfRlJFRSh4LCB5LCBzaXplKSBcCi0JZG8geyBcCi0JCWlmICh4KSB7IFwKLQkJCWRtYV9mcmVlX2NvaGVyZW50KCZicC0+cGRldi0+ZGV2LCBzaXplLCAodm9pZCAqKXgsIHkpOyBcCi0JCQl4ID0gTlVMTDsgXAotCQkJeSA9IDA7IFwKLQkJfSBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBCTlgyWF9GUkVFKHgpIFwKLQlkbyB7IFwKLQkJaWYgKHgpIHsgXAotCQkJa2ZyZWUoKHZvaWQgKil4KTsgXAotCQkJeCA9IE5VTEw7IFwKLQkJfSBcCi0JfSB3aGlsZSAoMCkKLQotCWludCBpOworCWJueDJ4X2d1bnppcF9lbmQoYnApOwogCiAJLyogZmFzdHBhdGggKi8KLQkvKiBDb21tb24gKi8KLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgewotI2lmZGVmIEJDTV9DTklDCi0JCS8qIEZDb0UgY2xpZW50IHVzZXMgZGVmYXVsdCBzdGF0dXMgYmxvY2sgKi8KLQkJaWYgKElTX0ZDT0VfSURYKGkpKSB7Ci0JCQl1bmlvbiBob3N0X2hjX3N0YXR1c19ibG9jayAqc2IgPQotCQkJCSZibngyeF9mcChicCwgaSwgc3RhdHVzX2Jsayk7Ci0JCQltZW1zZXQoc2IsIDAsIHNpemVvZih1bmlvbiBob3N0X2hjX3N0YXR1c19ibG9jaykpOwotCQkJYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGtfbWFwcGluZykgPSAwOwotCQl9IGVsc2UgewotI2VuZGlmCi0JCS8qIHN0YXR1cyBibG9ja3MgKi8KLQkJaWYgKENISVBfSVNfRTIoYnApKQotCQkJQk5YMlhfUENJX0ZSRUUoYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGsuZTJfc2IpLAotCQkJCSAgICAgICBibngyeF9mcChicCwgaSwgc3RhdHVzX2Jsa19tYXBwaW5nKSwKLQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBob3N0X2hjX3N0YXR1c19ibG9ja19lMikpOwotCQllbHNlCi0JCQlCTlgyWF9QQ0lfRlJFRShibngyeF9mcChicCwgaSwgc3RhdHVzX2Jsay5lMXhfc2IpLAotCQkJCSAgICAgICBibngyeF9mcChicCwgaSwgc3RhdHVzX2Jsa19tYXBwaW5nKSwKLQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBob3N0X2hjX3N0YXR1c19ibG9ja19lMXgpKTsKLSNpZmRlZiBCQ01fQ05JQwotCQl9Ci0jZW5kaWYKLQl9Ci0JLyogUnggKi8KLQlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaSkgewotCi0JCS8qIGZhc3RwYXRoIHJ4IHJpbmdzOiByeF9idWYgcnhfZGVzYyByeF9jb21wICovCi0JCUJOWDJYX0ZSRUUoYm54MnhfZnAoYnAsIGksIHJ4X2J1Zl9yaW5nKSk7Ci0JCUJOWDJYX1BDSV9GUkVFKGJueDJ4X2ZwKGJwLCBpLCByeF9kZXNjX3JpbmcpLAotCQkJICAgICAgIGJueDJ4X2ZwKGJwLCBpLCByeF9kZXNjX21hcHBpbmcpLAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZXRoX3J4X2JkKSAqIE5VTV9SWF9CRCk7Ci0KLQkJQk5YMlhfUENJX0ZSRUUoYm54MnhfZnAoYnAsIGksIHJ4X2NvbXBfcmluZyksCi0JCQkgICAgICAgYm54MnhfZnAoYnAsIGksIHJ4X2NvbXBfbWFwcGluZyksCi0JCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBldGhfZmFzdF9wYXRoX3J4X2NxZSkgKgotCQkJICAgICAgIE5VTV9SQ1FfQkQpOwotCi0JCS8qIFNHRSByaW5nICovCi0JCUJOWDJYX0ZSRUUoYm54MnhfZnAoYnAsIGksIHJ4X3BhZ2VfcmluZykpOwotCQlCTlgyWF9QQ0lfRlJFRShibngyeF9mcChicCwgaSwgcnhfc2dlX3JpbmcpLAotCQkJICAgICAgIGJueDJ4X2ZwKGJwLCBpLCByeF9zZ2VfbWFwcGluZyksCi0JCQkgICAgICAgQkNNX1BBR0VfU0laRSAqIE5VTV9SWF9TR0VfUEFHRVMpOwotCX0KLQkvKiBUeCAqLwotCWZvcl9lYWNoX3R4X3F1ZXVlKGJwLCBpKSB7Ci0KLQkJLyogZmFzdHBhdGggdHggcmluZ3M6IHR4X2J1ZiB0eF9kZXNjICovCi0JCUJOWDJYX0ZSRUUoYm54MnhfZnAoYnAsIGksIHR4X2J1Zl9yaW5nKSk7Ci0JCUJOWDJYX1BDSV9GUkVFKGJueDJ4X2ZwKGJwLCBpLCB0eF9kZXNjX3JpbmcpLAotCQkJICAgICAgIGJueDJ4X2ZwKGJwLCBpLCB0eF9kZXNjX21hcHBpbmcpLAotCQkJICAgICAgIHNpemVvZih1bmlvbiBldGhfdHhfYmRfdHlwZXMpICogTlVNX1RYX0JEKTsKLQl9CisJYm54MnhfZnJlZV9mcF9tZW0oYnApOwogCS8qIGVuZCBvZiBmYXN0cGF0aCAqLwogCiAJQk5YMlhfUENJX0ZSRUUoYnAtPmRlZl9zdGF0dXNfYmxrLCBicC0+ZGVmX3N0YXR1c19ibGtfbWFwcGluZywKQEAgLTYwMjgsMTAxICs1OTUxLDEzIEBACiAJCSAgICAgICBCQ01fUEFHRV9TSVpFICogTlVNX0VRX1BBR0VTKTsKIAogCUJOWDJYX0ZSRUUoYnAtPnJ4X2luZGlyX3RhYmxlKTsKLQotI3VuZGVmIEJOWDJYX1BDSV9GUkVFCi0jdW5kZWYgQk5YMlhfS0ZSRUUKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldF9zYl9zaG9ydGN1dHMoc3RydWN0IGJueDJ4ICpicCwgaW50IGluZGV4KQotewotCXVuaW9uIGhvc3RfaGNfc3RhdHVzX2Jsb2NrIHN0YXR1c19ibGsgPSBibngyeF9mcChicCwgaW5kZXgsIHN0YXR1c19ibGspOwotCWlmIChDSElQX0lTX0UyKGJwKSkgewotCQlibngyeF9mcChicCwgaW5kZXgsIHNiX2luZGV4X3ZhbHVlcykgPQotCQkJKF9fbGUxNiAqKXN0YXR1c19ibGsuZTJfc2ItPnNiLmluZGV4X3ZhbHVlczsKLQkJYm54MnhfZnAoYnAsIGluZGV4LCBzYl9ydW5uaW5nX2luZGV4KSA9Ci0JCQkoX19sZTE2ICopc3RhdHVzX2Jsay5lMl9zYi0+c2IucnVubmluZ19pbmRleDsKLQl9IGVsc2UgewotCQlibngyeF9mcChicCwgaW5kZXgsIHNiX2luZGV4X3ZhbHVlcykgPQotCQkJKF9fbGUxNiAqKXN0YXR1c19ibGsuZTF4X3NiLT5zYi5pbmRleF92YWx1ZXM7Ci0JCWJueDJ4X2ZwKGJwLCBpbmRleCwgc2JfcnVubmluZ19pbmRleCkgPQotCQkJKF9fbGUxNiAqKXN0YXR1c19ibGsuZTF4X3NiLT5zYi5ydW5uaW5nX2luZGV4OwotCX0KLX0KIAogaW50IGJueDJ4X2FsbG9jX21lbShzdHJ1Y3QgYm54MnggKmJwKQogewotI2RlZmluZSBCTlgyWF9QQ0lfQUxMT0MoeCwgeSwgc2l6ZSkgXAotCWRvIHsgXAotCQl4ID0gZG1hX2FsbG9jX2NvaGVyZW50KCZicC0+cGRldi0+ZGV2LCBzaXplLCB5LCBHRlBfS0VSTkVMKTsgXAotCQlpZiAoeCA9PSBOVUxMKSBcCi0JCQlnb3RvIGFsbG9jX21lbV9lcnI7IFwKLQkJbWVtc2V0KHgsIDAsIHNpemUpOyBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBCTlgyWF9BTExPQyh4LCBzaXplKSBcCi0JZG8geyBcCi0JCXggPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOyBcCi0JCWlmICh4ID09IE5VTEwpIFwKLQkJCWdvdG8gYWxsb2NfbWVtX2VycjsgXAotCX0gd2hpbGUgKDApCi0KLQlpbnQgaTsKLQotCS8qIGZhc3RwYXRoICovCi0JLyogQ29tbW9uICovCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKLQkJdW5pb24gaG9zdF9oY19zdGF0dXNfYmxvY2sgKnNiID0gJmJueDJ4X2ZwKGJwLCBpLCBzdGF0dXNfYmxrKTsKLQkJYm54MnhfZnAoYnAsIGksIGJwKSA9IGJwOwotCQkvKiBzdGF0dXMgYmxvY2tzICovCi0jaWZkZWYgQkNNX0NOSUMKLQkJaWYgKCFJU19GQ09FX0lEWChpKSkgewotI2VuZGlmCi0JCQlpZiAoQ0hJUF9JU19FMihicCkpCi0JCQkJQk5YMlhfUENJX0FMTE9DKHNiLT5lMl9zYiwKLQkJCQkgICAgJmJueDJ4X2ZwKGJwLCBpLCBzdGF0dXNfYmxrX21hcHBpbmcpLAotCQkJCSAgICBzaXplb2Yoc3RydWN0IGhvc3RfaGNfc3RhdHVzX2Jsb2NrX2UyKSk7Ci0JCQllbHNlCi0JCQkJQk5YMlhfUENJX0FMTE9DKHNiLT5lMXhfc2IsCi0JCQkJICAgICZibngyeF9mcChicCwgaSwgc3RhdHVzX2Jsa19tYXBwaW5nKSwKLQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBob3N0X2hjX3N0YXR1c19ibG9ja19lMXgpKTsKLSNpZmRlZiBCQ01fQ05JQwotCQl9Ci0jZW5kaWYKLQkJc2V0X3NiX3Nob3J0Y3V0cyhicCwgaSk7Ci0JfQotCS8qIFJ4ICovCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKLQotCQkvKiBmYXN0cGF0aCByeCByaW5nczogcnhfYnVmIHJ4X2Rlc2MgcnhfY29tcCAqLwotCQlCTlgyWF9BTExPQyhibngyeF9mcChicCwgaSwgcnhfYnVmX3JpbmcpLAotCQkJCXNpemVvZihzdHJ1Y3Qgc3dfcnhfYmQpICogTlVNX1JYX0JEKTsKLQkJQk5YMlhfUENJX0FMTE9DKGJueDJ4X2ZwKGJwLCBpLCByeF9kZXNjX3JpbmcpLAotCQkJCSZibngyeF9mcChicCwgaSwgcnhfZGVzY19tYXBwaW5nKSwKLQkJCQlzaXplb2Yoc3RydWN0IGV0aF9yeF9iZCkgKiBOVU1fUlhfQkQpOwotCi0JCUJOWDJYX1BDSV9BTExPQyhibngyeF9mcChicCwgaSwgcnhfY29tcF9yaW5nKSwKLQkJCQkmYm54MnhfZnAoYnAsIGksIHJ4X2NvbXBfbWFwcGluZyksCi0JCQkJc2l6ZW9mKHN0cnVjdCBldGhfZmFzdF9wYXRoX3J4X2NxZSkgKgotCQkJCU5VTV9SQ1FfQkQpOwotCi0JCS8qIFNHRSByaW5nICovCi0JCUJOWDJYX0FMTE9DKGJueDJ4X2ZwKGJwLCBpLCByeF9wYWdlX3JpbmcpLAotCQkJCXNpemVvZihzdHJ1Y3Qgc3dfcnhfcGFnZSkgKiBOVU1fUlhfU0dFKTsKLQkJQk5YMlhfUENJX0FMTE9DKGJueDJ4X2ZwKGJwLCBpLCByeF9zZ2VfcmluZyksCi0JCQkJJmJueDJ4X2ZwKGJwLCBpLCByeF9zZ2VfbWFwcGluZyksCi0JCQkJQkNNX1BBR0VfU0laRSAqIE5VTV9SWF9TR0VfUEFHRVMpOwotCX0KLQkvKiBUeCAqLwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7Ci0KLQkJLyogZmFzdHBhdGggdHggcmluZ3M6IHR4X2J1ZiB0eF9kZXNjICovCi0JCUJOWDJYX0FMTE9DKGJueDJ4X2ZwKGJwLCBpLCB0eF9idWZfcmluZyksCi0JCQkJc2l6ZW9mKHN0cnVjdCBzd190eF9iZCkgKiBOVU1fVFhfQkQpOwotCQlCTlgyWF9QQ0lfQUxMT0MoYm54MnhfZnAoYnAsIGksIHR4X2Rlc2NfcmluZyksCi0JCQkJJmJueDJ4X2ZwKGJwLCBpLCB0eF9kZXNjX21hcHBpbmcpLAotCQkJCXNpemVvZih1bmlvbiBldGhfdHhfYmRfdHlwZXMpICogTlVNX1RYX0JEKTsKLQl9Ci0JLyogZW5kIG9mIGZhc3RwYXRoICovCisJaWYgKGJueDJ4X2d1bnppcF9pbml0KGJwKSkKKwkJcmV0dXJuIC1FTk9NRU07CiAKICNpZmRlZiBCQ01fQ05JQwogCWlmIChDSElQX0lTX0UyKGJwKSkKQEAgLTYxNjIsMTQgKzU5OTcsMTggQEAKIAogCUJOWDJYX0FMTE9DKGJwLT5yeF9pbmRpcl90YWJsZSwgc2l6ZW9mKGJwLT5yeF9pbmRpcl90YWJsZVswXSkgKgogCQkgICAgVFNUT1JNX0lORElSRUNUSU9OX1RBQkxFX1NJWkUpOworCisJLyogZmFzdHBhdGggKi8KKwkvKiBuZWVkIHRvIGJlIGRvbmUgYXQgdGhlIGVuZCwgc2luY2UgaXQncyBzZWxmIGFkanVzdGluZyB0byBhbW91bnQKKwkgKiBvZiBtZW1vcnkgYXZhaWxhYmxlIGZvciBSU1MgcXVldWVzCisJICovCisJaWYgKGJueDJ4X2FsbG9jX2ZwX21lbShicCkpCisJCWdvdG8gYWxsb2NfbWVtX2VycjsKIAlyZXR1cm4gMDsKIAogYWxsb2NfbWVtX2VycjoKIAlibngyeF9mcmVlX21lbShicCk7CiAJcmV0dXJuIC1FTk9NRU07Ci0KLSN1bmRlZiBCTlgyWF9QQ0lfQUxMT0MKLSN1bmRlZiBCTlgyWF9BTExPQwogfQogCiAvKgpAQCAtNjE5NywxNCArNjAzNiwxNCBAQAogfQogCiAvKioKLSAqIFNldHMgYSBNQUMgaW4gYSBDQU0gZm9yIGEgZmV3IEwyIENsaWVudHMgZm9yIEUxeCBjaGlwcworICogYm54Mnhfc2V0X21hY19hZGRyX2dlbiAtIHNldCBhIE1BQyBpbiBhIENBTSBmb3IgYSBmZXcgTDIgQ2xpZW50cyBmb3IgRTF4IGNoaXBzCiAgKgotICogQHBhcmFtIGJwIGRyaXZlciBkZXNjcmlwdG9yCi0gKiBAcGFyYW0gc2V0IHNldCBvciBjbGVhciBhbiBlbnRyeSAoMSBvciAwKQotICogQHBhcmFtIG1hYyBwb2ludGVyIHRvIGEgYnVmZmVyIGNvbnRhaW5pbmcgYSBNQUMKLSAqIEBwYXJhbSBjbF9iaXRfdmVjIGJpdCB2ZWN0b3Igb2YgY2xpZW50cyB0byByZWdpc3RlciBhIE1BQyBmb3IKLSAqIEBwYXJhbSBjYW1fb2Zmc2V0IG9mZnNldCBpbiBhIENBTSB0byB1c2UKLSAqIEBwYXJhbSBpc19iY2FzdCBpcyB0aGUgc2V0IE1BQyBhIGJyb2FkY2FzdCBhZGRyZXNzIChmb3IgRTEgb25seSkKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKKyAqIEBzZXQ6CXNldCBvciBjbGVhciBhbiBlbnRyeSAoMSBvciAwKQorICogQG1hYzoJcG9pbnRlciB0byBhIGJ1ZmZlciBjb250YWluaW5nIGEgTUFDCisgKiBAY2xfYml0X3ZlYzoJYml0IHZlY3RvciBvZiBjbGllbnRzIHRvIHJlZ2lzdGVyIGEgTUFDIGZvcgorICogQGNhbV9vZmZzZXQ6CW9mZnNldCBpbiBhIENBTSB0byB1c2UKKyAqIEBpc19iY2FzdDoJaXMgdGhlIHNldCBNQUMgYSBicm9hZGNhc3QgYWRkcmVzcyAoZm9yIEUxIG9ubHkpCiAgKi8KIHN0YXRpYyB2b2lkIGJueDJ4X3NldF9tYWNfYWRkcl9nZW4oc3RydWN0IGJueDJ4ICpicCwgaW50IHNldCwgY29uc3QgdTggKm1hYywKIAkJCQkgICB1MzIgY2xfYml0X3ZlYywgdTggY2FtX29mZnNldCwKQEAgLTY1NjQsMTQgKzY0MDMsMTMgQEAKIAogI2lmZGVmIEJDTV9DTklDCiAvKioKLSAqIFNldCBpU0NTSSBNQUMocykgYXQgdGhlIG5leHQgZW50aWVzIGluIHRoZSBDQU0gYWZ0ZXIgdGhlIEVUSAotICogTUFDKHMpLiBUaGlzIGZ1bmN0aW9uIHdpbGwgd2FpdCB1bnRpbCB0aGUgcmFtZG9yZCBjb21wbGV0aW9uCi0gKiByZXR1cm5zLgorICogYm54Mnhfc2V0X2lzY3NpX2V0aF9tYWNfYWRkciAtIHNldCBpU0NTSSBNQUMocykuCiAgKgotICogQHBhcmFtIGJwIGRyaXZlciBoYW5kbGUKLSAqIEBwYXJhbSBzZXQgc2V0IG9yIGNsZWFyIHRoZSBDQU0gZW50cnkKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKKyAqIEBzZXQ6CXNldCBvciBjbGVhciB0aGUgQ0FNIGVudHJ5CiAgKgotICogQHJldHVybiAwIGlmIGN1c3Nlc3MsIC1FTk9ERVYgaWYgcmFtcm9kIGRvZXNuJ3QgcmV0dXJuLgorICogVGhpcyBmdW5jdGlvbiB3aWxsIHdhaXQgdW50aWwgdGhlIHJhbWRvcmQgY29tcGxldGlvbiByZXR1cm5zLgorICogUmV0dXJuIDAgaWYgc3VjY2VzcywgLUVOT0RFViBpZiByYW1yb2QgZG9lc24ndCByZXR1cm4uCiAgKi8KIHN0YXRpYyBpbnQgYm54Mnhfc2V0X2lzY3NpX2V0aF9tYWNfYWRkcihzdHJ1Y3QgYm54MnggKmJwLCBpbnQgc2V0KQogewpAQCAtNjU5MiwxNCArNjQzMCwxMyBAQAogfQogCiAvKioKLSAqIFNldCBGQ29FIEwyIE1BQyhzKSBhdCB0aGUgbmV4dCBlbnRpZXMgaW4gdGhlIENBTSBhZnRlciB0aGUKLSAqIEVUSCBNQUMocykuIFRoaXMgZnVuY3Rpb24gd2lsbCB3YWl0IHVudGlsIHRoZSByYW1kb3JkCi0gKiBjb21wbGV0aW9uIHJldHVybnMuCisgKiBibngyeF9zZXRfZmlwX2V0aF9tYWNfYWRkciAtIHNldCBGQ29FIEwyIE1BQyhzKQogICoKLSAqIEBwYXJhbSBicCBkcml2ZXIgaGFuZGxlCi0gKiBAcGFyYW0gc2V0IHNldCBvciBjbGVhciB0aGUgQ0FNIGVudHJ5CisgKiBAYnA6CQlkcml2ZXIgaGFuZGxlCisgKiBAc2V0OglzZXQgb3IgY2xlYXIgdGhlIENBTSBlbnRyeQogICoKLSAqIEByZXR1cm4gMCBpZiBjdXNzZXNzLCAtRU5PREVWIGlmIHJhbXJvZCBkb2Vzbid0IHJldHVybi4KKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCB3YWl0IHVudGlsIHRoZSByYW1yb2QgY29tcGxldGlvbiByZXR1cm5zLgorICogUmV0dXJucyAwIGlmIHN1Y2Nlc3MsIC1FTk9ERVYgaWYgcmFtcm9kIGRvZXNuJ3QgcmV0dXJuLgogICovCiBpbnQgYm54Mnhfc2V0X2ZpcF9ldGhfbWFjX2FkZHIoc3RydWN0IGJueDJ4ICpicCwgaW50IHNldCkKIHsKQEAgLTY4MDMsMTIgKzY2NDAsMTEgQEAKIH0KIAogLyoqCi0gKiBDb25maWd1cmUgaW50ZXJydXB0IG1vZGUgYWNjb3JkaW5nIHRvIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKyAqIGJueDJ4X3NldF9pbnRfbW9kZSAtIGNvbmZpZ3VyZSBpbnRlcnJ1cHQgbW9kZQorICoKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKKyAqCiAgKiBJbiBjYXNlIG9mIE1TSS1YIGl0IHdpbGwgYWxzbyB0cnkgdG8gZW5hYmxlIE1TSS1YLgotICoKLSAqIEBwYXJhbSBicAotICoKLSAqIEByZXR1cm4gaW50CiAgKi8KIHN0YXRpYyBpbnQgX19kZXZpbml0IGJueDJ4X3NldF9pbnRfbW9kZShzdHJ1Y3QgYm54MnggKmJwKQogewpAQCAtNzM5MiwxMCArNzIyOCwxMSBAQAogCU1GX0NGR19XUihicCwgc2hhcmVkX21mX2NvbmZpZy5jbHBfbWIsIHZhbCB8IFNIQVJFRF9NRl9DTFBfTUFHSUMpOwogfQogCi0vKiBSZXN0b3JlIHRoZSB2YWx1ZSBvZiB0aGUgYG1hZ2ljJyBiaXQuCisvKioKKyAqIGJueDJ4X2NscF9yZXNldF9kb25lIC0gcmVzdG9yZSB0aGUgdmFsdWUgb2YgdGhlIGBtYWdpYycgYml0LgogICoKLSAqIEBwYXJhbSBwZGV2IERldmljZSBoYW5kbGUuCi0gKiBAcGFyYW0gbWFnaWNfdmFsIE9sZCB2YWx1ZSBvZiB0aGUgYG1hZ2ljJyBiaXQuCisgKiBAYnA6CQlkcml2ZXIgaGFuZGxlCisgKiBAbWFnaWNfdmFsOglvbGQgdmFsdWUgb2YgdGhlIGBtYWdpYycgYml0LgogICovCiBzdGF0aWMgdm9pZCBibngyeF9jbHBfcmVzZXRfZG9uZShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgbWFnaWNfdmFsKQogewpAQCAtNzQwNiwxMCArNzI0MywxMiBAQAogfQogCiAvKioKLSAqIFByZXBhcmVzIGZvciBNQ1AgcmVzZXQ6IHRha2VzIGNhcmUgb2YgQ0xQIGNvbmZpZ3VyYXRpb25zLgorICogYm54MnhfcmVzZXRfbWNwX3ByZXAgLSBwcmVwYXJlIGZvciBNQ1AgcmVzZXQuCiAgKgotICogQHBhcmFtIGJwCi0gKiBAcGFyYW0gbWFnaWNfdmFsIE9sZCB2YWx1ZSBvZiAnbWFnaWMnIGJpdC4KKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKKyAqIEBtYWdpY192YWw6CW9sZCB2YWx1ZSBvZiAnbWFnaWMnIGJpdC4KKyAqCisgKiBUYWtlcyBjYXJlIG9mIENMUCBjb25maWd1cmF0aW9ucy4KICAqLwogc3RhdGljIHZvaWQgYm54MnhfcmVzZXRfbWNwX3ByZXAoc3RydWN0IGJueDJ4ICpicCwgdTMyICptYWdpY192YWwpCiB7CkBAIC03NDM0LDEwICs3MjczLDEwIEBACiAjZGVmaW5lIE1DUF9USU1FT1VUICAgICAgNTAwMCAgIC8qIDUgc2Vjb25kcyAoaW4gbXMpICovCiAjZGVmaW5lIE1DUF9PTkVfVElNRU9VVCAgMTAwICAgIC8qIDEwMCBtcyAqLwogCi0vKiBXYWl0cyBmb3IgTUNQX09ORV9USU1FT1VUIG9yIE1DUF9PTkVfVElNRU9VVCoxMCwKLSAqIGRlcGVuZGluZyBvbiB0aGUgSFcgdHlwZS4KKy8qKgorICogYm54MnhfbWNwX3dhaXRfb25lIC0gd2FpdCBmb3IgTUNQX09ORV9USU1FT1VUCiAgKgotICogQHBhcmFtIGJwCisgKiBAYnA6CWRyaXZlciBoYW5kbGUKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X21jcF93YWl0X29uZShzdHJ1Y3QgYm54MnggKmJwKQogewpAQCAtNzQ0OSw1MSArNzI4OCwzNSBAQAogCQltc2xlZXAoTUNQX09ORV9USU1FT1VUKTsKIH0KIAotc3RhdGljIGludCBibngyeF9yZXNldF9tY3BfY29tcChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgbWFnaWNfdmFsKQorLyoKKyAqIGluaXRpYWxpemVzIGJwLT5jb21tb24uc2htZW1fYmFzZSBhbmQgd2FpdHMgZm9yIHZhbGlkaXR5IHNpZ25hdHVyZSB0byBhcHBlYXIKKyAqLworc3RhdGljIGludCBibngyeF9pbml0X3NobWVtKHN0cnVjdCBibngyeCAqYnApCiB7Ci0JdTMyIHNobWVtLCBjbnQsIHZhbGlkaXR5X29mZnNldCwgdmFsOwotCWludCByYyA9IDA7CisJaW50IGNudCA9IDA7CisJdTMyIHZhbCA9IDA7CiAKLQltc2xlZXAoMTAwKTsKLQotCS8qIEdldCBzaG1lbSBvZmZzZXQgKi8KLQlzaG1lbSA9IFJFR19SRChicCwgTUlTQ19SRUdfU0hBUkVEX01FTV9BRERSKTsKLQlpZiAoc2htZW0gPT0gMCkgewotCQlCTlgyWF9FUlIoIlNobWVtIDAgcmV0dXJuIGZhaWx1cmVcbiIpOwotCQlyYyA9IC1FTk9UVFk7Ci0JCWdvdG8gZXhpdF9sYmw7Ci0JfQotCi0JdmFsaWRpdHlfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHNobWVtX3JlZ2lvbiwgdmFsaWRpdHlfbWFwWzBdKTsKLQotCS8qIFdhaXQgZm9yIE1DUCB0byBjb21lIHVwICovCi0JZm9yIChjbnQgPSAwOyBjbnQgPCAoTUNQX1RJTUVPVVQgLyBNQ1BfT05FX1RJTUVPVVQpOyBjbnQrKykgewotCQkvKiBUQkQ6IGl0cyBiZXN0IHRvIGNoZWNrIHZhbGlkaXR5IG1hcCBvZiBsYXN0IHBvcnQuCi0JCSAqIGN1cnJlbnRseSBjaGVja3Mgb24gcG9ydCAwLgotCQkgKi8KLQkJdmFsID0gUkVHX1JEKGJwLCBzaG1lbSArIHZhbGlkaXR5X29mZnNldCk7Ci0JCURQKE5FVElGX01TR19IVywgInNobWVtIDB4JXggdmFsaWRpdHkgbWFwKDB4JXgpPTB4JXhcbiIsIHNobWVtLAotCQkgICBzaG1lbSArIHZhbGlkaXR5X29mZnNldCwgdmFsKTsKLQotCQkvKiBjaGVjayB0aGF0IHNoYXJlZCBtZW1vcnkgaXMgdmFsaWQuICovCi0JCWlmICgodmFsICYgKFNIUl9NRU1fVkFMSURJVFlfREVWX0lORk8gfCBTSFJfTUVNX1ZBTElESVRZX01CKSkKLQkJICAgID09IChTSFJfTUVNX1ZBTElESVRZX0RFVl9JTkZPIHwgU0hSX01FTV9WQUxJRElUWV9NQikpCi0JCQlicmVhazsKKwlkbyB7CisJCWJwLT5jb21tb24uc2htZW1fYmFzZSA9IFJFR19SRChicCwgTUlTQ19SRUdfU0hBUkVEX01FTV9BRERSKTsKKwkJaWYgKGJwLT5jb21tb24uc2htZW1fYmFzZSkgeworCQkJdmFsID0gU0hNRU1fUkQoYnAsIHZhbGlkaXR5X21hcFtCUF9QT1JUKGJwKV0pOworCQkJaWYgKHZhbCAmIFNIUl9NRU1fVkFMSURJVFlfTUIpCisJCQkJcmV0dXJuIDA7CisJCX0KIAogCQlibngyeF9tY3Bfd2FpdF9vbmUoYnApOwotCX0KIAotCURQKE5FVElGX01TR19IVywgIkNudD0lZCBTaG1lbSB2YWxpZGl0eSBtYXAgMHgleFxuIiwgY250LCB2YWwpOworCX0gd2hpbGUgKGNudCsrIDwgKE1DUF9USU1FT1VUIC8gTUNQX09ORV9USU1FT1VUKSk7CiAKLQkvKiBDaGVjayB0aGF0IHNoYXJlZCBtZW1vcnkgaXMgdmFsaWQuIFRoaXMgaW5kaWNhdGVzIHRoYXQgTUNQIGlzIHVwLiAqLwotCWlmICgodmFsICYgKFNIUl9NRU1fVkFMSURJVFlfREVWX0lORk8gfCBTSFJfTUVNX1ZBTElESVRZX01CKSkgIT0KLQkgICAgKFNIUl9NRU1fVkFMSURJVFlfREVWX0lORk8gfCBTSFJfTUVNX1ZBTElESVRZX01CKSkgewotCQlCTlgyWF9FUlIoIlNobWVtIHNpZ25hdHVyZSBub3QgcHJlc2VudC4gTUNQIGlzIG5vdCB1cCAhIVxuIik7Ci0JCXJjID0gLUVOT1RUWTsKLQkJZ290byBleGl0X2xibDsKLQl9CisJQk5YMlhfRVJSKCJCQUQgTUNQIHZhbGlkaXR5IHNpZ25hdHVyZVxuIik7CiAKLWV4aXRfbGJsOgorCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW50IGJueDJ4X3Jlc2V0X21jcF9jb21wKHN0cnVjdCBibngyeCAqYnAsIHUzMiBtYWdpY192YWwpCit7CisJaW50IHJjID0gYm54MnhfaW5pdF9zaG1lbShicCk7CisKIAkvKiBSZXN0b3JlIHRoZSBgbWFnaWMnIGJpdCB2YWx1ZSAqLwogCWlmICghQ0hJUF9JU19FMShicCkpCiAJCWJueDJ4X2NscF9yZXNldF9kb25lKGJwLCBtYWdpY192YWwpOwpAQCAtODAwNiwxMCArNzgyOSwxMiBAQAogCUJOWDJYX0RFVl9JTkZPKCJmbGFzaF9zaXplIDB4JXggKCVkKVxuIiwKIAkJICAgICAgIGJwLT5jb21tb24uZmxhc2hfc2l6ZSwgYnAtPmNvbW1vbi5mbGFzaF9zaXplKTsKIAotCWJwLT5jb21tb24uc2htZW1fYmFzZSA9IFJFR19SRChicCwgTUlTQ19SRUdfU0hBUkVEX01FTV9BRERSKTsKKwlibngyeF9pbml0X3NobWVtKGJwKTsKKwogCWJwLT5jb21tb24uc2htZW0yX2Jhc2UgPSBSRUdfUkQoYnAsIChCUF9QQVRIKGJwKSA/CiAJCQkJCU1JU0NfUkVHX0dFTkVSSUNfQ1JfMSA6CiAJCQkJCU1JU0NfUkVHX0dFTkVSSUNfQ1JfMCkpOworCiAJYnAtPmxpbmtfcGFyYW1zLnNobWVtX2Jhc2UgPSBicC0+Y29tbW9uLnNobWVtX2Jhc2U7CiAJYnAtPmxpbmtfcGFyYW1zLnNobWVtMl9iYXNlID0gYnAtPmNvbW1vbi5zaG1lbTJfYmFzZTsKIAlCTlgyWF9ERVZfSU5GTygic2htZW0gb2Zmc2V0IDB4JXggIHNobWVtMiBvZmZzZXQgMHgleFxuIiwKQEAgLTgwMjEsMTEgKzc4NDYsNiBAQAogCQlyZXR1cm47CiAJfQogCi0JdmFsID0gU0hNRU1fUkQoYnAsIHZhbGlkaXR5X21hcFtCUF9QT1JUKGJwKV0pOwotCWlmICgodmFsICYgKFNIUl9NRU1fVkFMSURJVFlfREVWX0lORk8gfCBTSFJfTUVNX1ZBTElESVRZX01CKSkKLQkJIT0gKFNIUl9NRU1fVkFMSURJVFlfREVWX0lORk8gfCBTSFJfTUVNX1ZBTElESVRZX01CKSkKLQkJQk5YMlhfRVJSKCJCQUQgTUNQIHZhbGlkaXR5IHNpZ25hdHVyZVxuIik7Ci0KIAlicC0+Y29tbW9uLmh3X2NvbmZpZyA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5zaGFyZWRfaHdfY29uZmlnLmNvbmZpZyk7CiAJQk5YMlhfREVWX0lORk8oImh3X2NvbmZpZyAweCUwOHhcbiIsIGJwLT5jb21tb24uaHdfY29uZmlnKTsKIApAQCAtODA1OSwxMyArNzg3OSw5IEBACiAJCSh2YWwgPj0gUkVRX0JDX1ZFUl80X1ZSRllfU1BFQ0lGSUNfUEhZX09QVF9NREwpID8KIAkJRkVBVFVSRV9DT05GSUdfQkNfU1VQUE9SVFNfRFVBTF9QSFlfT1BUX01ETF9WUkZZIDogMDsKIAotCWlmIChCUF9FMUhWTihicCkgPT0gMCkgewotCQlwY2lfcmVhZF9jb25maWdfd29yZChicC0+cGRldiwgYnAtPnBtX2NhcCArIFBDSV9QTV9QTUMsICZwbWMpOwotCQlicC0+ZmxhZ3MgfD0gKHBtYyAmIFBDSV9QTV9DQVBfUE1FX0QzY29sZCkgPyAwIDogTk9fV09MX0ZMQUc7Ci0JfSBlbHNlIHsKLQkJLyogbm8gV09MIGNhcGFiaWxpdHkgZm9yIEUxSFZOICE9IDAgKi8KLQkJYnAtPmZsYWdzIHw9IE5PX1dPTF9GTEFHOwotCX0KKwlwY2lfcmVhZF9jb25maWdfd29yZChicC0+cGRldiwgYnAtPnBtX2NhcCArIFBDSV9QTV9QTUMsICZwbWMpOworCWJwLT5mbGFncyB8PSAocG1jICYgUENJX1BNX0NBUF9QTUVfRDNjb2xkKSA/IDAgOiBOT19XT0xfRkxBRzsKKwogCUJOWDJYX0RFVl9JTkZPKCIlc1dvTCBjYXBhYmxlXG4iLAogCQkgICAgICAgKGJwLT5mbGFncyAmIE5PX1dPTF9GTEFHKSA/ICJub3QgIiA6ICIiKTsKIApAQCAtODU3MSwxNSArODM4Nyw2IEBACiAJCQkJQk5YMlhfREVWX0lORk8oIlJlYWQgaVNDU0kgTUFDOiAiCiAJCQkJCSAgICAgICAiMHgleDoweCUwNHhcbiIsIHZhbDIsIHZhbCk7CiAJCQkJYm54Mnhfc2V0X21hY19idWYoaXNjc2lfbWFjLCB2YWwsIHZhbDIpOwotCi0JCQkJLyogRGlzYWJsZSBpU0NTSSBPT08gaWYgTUFDIGNvbmZpZ3VyYXRpb24gaXMKLQkJCQkgKiBpbnZhbGlkLgotCQkJCSAqLwotCQkJCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihpc2NzaV9tYWMpKSB7Ci0JCQkJCWJwLT5mbGFncyB8PSBOT19JU0NTSV9PT09fRkxBRyB8Ci0JCQkJCQkgICAgIE5PX0lTQ1NJX0ZMQUc7Ci0JCQkJCW1lbXNldChpc2NzaV9tYWMsIDAsIEVUSF9BTEVOKTsKLQkJCQl9CiAJCQl9IGVsc2UKIAkJCQlicC0+ZmxhZ3MgfD0gTk9fSVNDU0lfT09PX0ZMQUcgfCBOT19JU0NTSV9GTEFHOwogCkBAIC04NTkyLDEzICs4Mzk5LDYgQEAKIAkJCQkJICAgICAgICIweCV4OjB4JTA0eFxuIiwgdmFsMiwgdmFsKTsKIAkJCQlibngyeF9zZXRfbWFjX2J1ZihmaXBfbWFjLCB2YWwsIHZhbDIpOwogCi0JCQkJLyogRGlzYWJsZSBGQ29FIGlmIE1BQyBjb25maWd1cmF0aW9uIGlzCi0JCQkJICogaW52YWxpZC4KLQkJCQkgKi8KLQkJCQlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZmlwX21hYykpIHsKLQkJCQkJYnAtPmZsYWdzIHw9IE5PX0ZDT0VfRkxBRzsKLQkJCQkJbWVtc2V0KGJwLT5maXBfbWFjLCAwLCBFVEhfQUxFTik7Ci0JCQkJfQogCQkJfSBlbHNlCiAJCQkJYnAtPmZsYWdzIHw9IE5PX0ZDT0VfRkxBRzsKIAkJfQpAQCAtODYyOSwxMyArODQyOSwyOSBAQAogCQllbHNlIGlmICghSVNfTUYoYnApKQogCQkJbWVtY3B5KGZpcF9tYWMsIGlzY3NpX21hYywgRVRIX0FMRU4pOwogCX0KKworCS8qIERpc2FibGUgaVNDU0kgaWYgTUFDIGNvbmZpZ3VyYXRpb24gaXMKKwkgKiBpbnZhbGlkLgorCSAqLworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihpc2NzaV9tYWMpKSB7CisJCWJwLT5mbGFncyB8PSBOT19JU0NTSV9GTEFHOworCQltZW1zZXQoaXNjc2lfbWFjLCAwLCBFVEhfQUxFTik7CisJfQorCisJLyogRGlzYWJsZSBGQ29FIGlmIE1BQyBjb25maWd1cmF0aW9uIGlzCisJICogaW52YWxpZC4KKwkgKi8KKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZmlwX21hYykpIHsKKwkJYnAtPmZsYWdzIHw9IE5PX0ZDT0VfRkxBRzsKKwkJbWVtc2V0KGJwLT5maXBfbWFjLCAwLCBFVEhfQUxFTik7CisJfQogI2VuZGlmCiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGJueDJ4X2dldF9od2luZm8oc3RydWN0IGJueDJ4ICpicCkKIHsKIAlpbnQgLyphYnMqL2Z1bmMgPSBCUF9BQlNfRlVOQyhicCk7Ci0JaW50IHZuLCBwb3J0OworCWludCB2bjsKIAl1MzIgdmFsID0gMDsKIAlpbnQgcmMgPSAwOwogCkBAIC04NjcwLDcgKzg0ODYsNiBAQAogCWJwLT5tZl9vdiA9IDA7CiAJYnAtPm1mX21vZGUgPSAwOwogCXZuID0gQlBfRTFIVk4oYnApOwotCXBvcnQgPSBCUF9QT1JUKGJwKTsKIAogCWlmICghQ0hJUF9JU19FMShicCkgJiYgIUJQX05PTUNQKGJwKSkgewogCQlEUChORVRJRl9NU0dfUFJPQkUsCkBAIC04OTA0LDggKzg3MTksNiBAQAogCWJwLT5tdWx0aV9tb2RlID0gbXVsdGlfbW9kZTsKIAlicC0+aW50X21vZGUgPSBpbnRfbW9kZTsKIAotCWJwLT5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfR1JPOwotCiAJLyogU2V0IFRQQSBmbGFncyAqLwogCWlmIChkaXNhYmxlX3RwYSkgewogCQlicC0+ZmxhZ3MgJj0gflRQQV9FTkFCTEVfRkxBRzsKQEAgLTg5MjUsOCArODczOCw2IEBACiAKIAlicC0+dHhfcmluZ19zaXplID0gTUFYX1RYX0FWQUlMOwogCi0JYnAtPnJ4X2NzdW0gPSAxOwotCiAJLyogbWFrZSBzdXJlIHRoYXQgdGhlIG51bWJlcnMgYXJlIGluIHRoZSByaWdodCBncmFudWxhcml0eSAqLwogCWJwLT50eF90aWNrcyA9ICg1MCAvIEJOWDJYX0JUUikgKiBCTlgyWF9CVFI7CiAJYnAtPnJ4X3RpY2tzID0gKDI1IC8gQk5YMlhfQlRSKSAqIEJOWDJYX0JUUjsKQEAgLTkzMDQsNiArOTExNSw4IEBACiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiAJLm5kb19kb19pb2N0bAkJPSBibngyeF9pb2N0bCwKIAkubmRvX2NoYW5nZV9tdHUJCT0gYm54MnhfY2hhbmdlX210dSwKKwkubmRvX2ZpeF9mZWF0dXJlcwk9IGJueDJ4X2ZpeF9mZWF0dXJlcywKKwkubmRvX3NldF9mZWF0dXJlcwk9IGJueDJ4X3NldF9mZWF0dXJlcywKIAkubmRvX3R4X3RpbWVvdXQJCT0gYm54MnhfdHhfdGltZW91dCwKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gcG9sbF9ibngyeCwKQEAgLTk0MzAsMjAgKzkyNDMsMjAgQEAKIAogCWRldi0+bmV0ZGV2X29wcyA9ICZibngyeF9uZXRkZXZfb3BzOwogCWJueDJ4X3NldF9ldGh0b29sX29wcyhkZXYpOwotCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRzsKLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNOworCisJZGV2LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSB8CisJCU5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU09fRUNOIHwgTkVUSUZfRl9UU082IHwKKwkJTkVUSUZfRl9SWENTVU0gfCBORVRJRl9GX0xSTyB8IE5FVElGX0ZfSFdfVkxBTl9UWDsKKworCWRldi0+dmxhbl9mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSB8CisJCU5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU09fRUNOIHwgTkVUSUZfRl9UU082IHwgTkVUSUZfRl9ISUdIRE1BOworCisJZGV2LT5mZWF0dXJlcyB8PSBkZXYtPmh3X2ZlYXR1cmVzIHwgTkVUSUZfRl9IV19WTEFOX1JYOwogCWlmIChicC0+ZmxhZ3MgJiBVU0lOR19EQUNfRkxBRykKIAkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7Ci0JZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTT19FQ04pOwotCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwotCWRldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWCk7CiAKLQlkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9TRzsKLQlkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU07Ci0JaWYgKGJwLT5mbGFncyAmIFVTSU5HX0RBQ19GTEFHKQotCQlkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwotCWRldi0+dmxhbl9mZWF0dXJlcyB8PSAoTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTT19FQ04pOwotCWRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7CisJLyogQWRkIExvb3BiYWNrIGNhcGFiaWxpdHkgdG8gdGhlIGRldmljZSAqLworCWRldi0+aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9MT09QQkFDSzsKIAogI2lmZGVmIEJDTV9EQ0JOTAogCWRldi0+ZGNibmxfb3BzID0gJmJueDJ4X2RjYm5sX29wczsKQEAgLTEwMzQyLDYgKzEwMTU1LDExIEBACiAJCWJyZWFrOwogCX0KIAorCWNhc2UgRFJWX0NUTF9JU0NTSV9TVE9QUEVEX0NNRDogeworCQlibngyeF9kY2J4X3NldF9wYXJhbXMoYnAsIEJOWDJYX0RDQlhfU1RBVEVfSVNDU0lfU1RPUFBFRCk7CisJCWJyZWFrOworCX0KKwogCWRlZmF1bHQ6CiAJCUJOWDJYX0VSUigidW5rbm93biBjb21tYW5kICV4XG4iLCBjdGwtPmNtZCk7CiAJCXJjID0gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X3JlZy5oIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfcmVnLmgKaW5kZXggMTUwOWEyMy4uODZiYmEyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfcmVnLmgKQEAgLTEsNiArMSw2IEBACiAvKiBibngyeF9yZWcuaDogQnJvYWRjb20gRXZlcmVzdCBuZXR3b3JrIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTEgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X3N0YXRzLmMgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9zdGF0cy5jCmluZGV4IDM0NDVkZWQuLmU1MzViZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X3N0YXRzLmMKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54Mnhfc3RhdHMuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGJueDJ4X3N0YXRzLmM6IEJyb2FkY29tIEV2ZXJlc3QgbmV0d29yayBkcml2ZXIuCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTAgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDExIEJyb2FkY29tIENvcnBvcmF0aW9uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9zdGF0cy5oIGIvZHJpdmVycy9uZXQvYm54MngvYm54Mnhfc3RhdHMuaAppbmRleCA1OTY3OThjLi40NWQxNGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9zdGF0cy5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X3N0YXRzLmgKQEAgLTEsNiArMSw2IEBACiAvKiBibngyeF9zdGF0cy5oOiBCcm9hZGNvbSBFdmVyZXN0IG5ldHdvcmsgZHJpdmVyLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwNy0yMDEwIEJyb2FkY29tIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGUKaW5kZXggM2M1YzAxNC4uNGMyMWJmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlCkBAIC05LDYgKzksMyBAQAogcHJvYy0kKENPTkZJR19QUk9DX0ZTKSArPSBib25kX3Byb2Nmcy5vCiBib25kaW5nLW9ianMgKz0gJChwcm9jLXkpCiAKLWlwdjYtJChzdWJzdCBtLHksJChDT05GSUdfSVBWNikpICs9IGJvbmRfaXB2Ni5vCi1ib25kaW5nLW9ianMgKz0gJChpcHY2LXkpCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYwppbmRleCAzMTkxMmYxLi5jNzUzN2FiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYwpAQCAtNzE2LDExICs3MTYsOSBAQAogc3RhdGljIHUzMiBfX2dldF9hZ2dfYmFuZHdpZHRoKHN0cnVjdCBhZ2dyZWdhdG9yICphZ2dyZWdhdG9yKQogewogCXUzMiBiYW5kd2lkdGggPSAwOwotCXUzMiBiYXNpY19zcGVlZDsKIAogCWlmIChhZ2dyZWdhdG9yLT5udW1fb2ZfcG9ydHMpIHsKLQkJYmFzaWNfc3BlZWQgPSBfX2dldF9saW5rX3NwZWVkKGFnZ3JlZ2F0b3ItPmxhZ19wb3J0cyk7Ci0JCXN3aXRjaCAoYmFzaWNfc3BlZWQpIHsKKwkJc3dpdGNoIChfX2dldF9saW5rX3NwZWVkKGFnZ3JlZ2F0b3ItPmxhZ19wb3J0cykpIHsKIAkJY2FzZSBBRF9MSU5LX1NQRUVEX0JJVE1BU0tfMU1CUFM6CiAJCQliYW5kd2lkdGggPSBhZ2dyZWdhdG9yLT5udW1fb2ZfcG9ydHM7CiAJCQlicmVhazsKQEAgLTI0MDUsMTQgKzI0MDMsNiBAQAogCXN0cnVjdCBhZF9pbmZvIGFkX2luZm87CiAJaW50IHJlcyA9IDE7CiAKLQkvKiBtYWtlIHN1cmUgdGhhdCB0aGUgc2xhdmVzIGxpc3Qgd2lsbAotCSAqIG5vdCBjaGFuZ2UgZHVyaW5nIHR4Ci0JICovCi0JcmVhZF9sb2NrKCZib25kLT5sb2NrKTsKLQotCWlmICghQk9ORF9JU19PSyhib25kKSkKLQkJZ290byBvdXQ7Ci0KIAlpZiAoYm9uZF8zYWRfZ2V0X2FjdGl2ZV9hZ2dfaW5mbyhib25kLCAmYWRfaW5mbykpIHsKIAkJcHJfZGVidWcoIiVzOiBFcnJvcjogYm9uZF8zYWRfZ2V0X2FjdGl2ZV9hZ2dfaW5mbyBmYWlsZWRcbiIsCiAJCQkgZGV2LT5uYW1lKTsKQEAgLTI0NjYsMzkgKzI0NTYsMjAgQEAKIAkJLyogbm8gc3VpdGFibGUgaW50ZXJmYWNlLCBmcmFtZSBub3Qgc2VudCAqLwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJfQotCXJlYWRfdW5sb2NrKCZib25kLT5sb2NrKTsKKwogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKLWludCBib25kXzNhZF9sYWNwZHVfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGFja2V0X3R5cGUqIHB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCit2b2lkIGJvbmRfM2FkX2xhY3BkdV9yZWN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLAorCQkJICBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKQogewotCXN0cnVjdCBib25kaW5nICpib25kID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3Qgc2xhdmUgKnNsYXZlID0gTlVMTDsKLQlpbnQgcmV0ID0gTkVUX1JYX0RST1A7Ci0KLQlpZiAoIShkZXYtPmZsYWdzICYgSUZGX01BU1RFUikpCi0JCWdvdG8gb3V0OwotCi0Jc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFza2IpCi0JCWdvdG8gb3V0OworCWlmIChza2ItPnByb3RvY29sICE9IFBLVF9UWVBFX0xBQ1BEVSkKKwkJcmV0dXJuOwogCiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBsYWNwZHUpKSkKLQkJZ290byBvdXQ7CisJCXJldHVybjsKIAogCXJlYWRfbG9jaygmYm9uZC0+bG9jayk7Ci0Jc2xhdmUgPSBib25kX2dldF9zbGF2ZV9ieV9kZXYobmV0ZGV2X3ByaXYoZGV2KSwgb3JpZ19kZXYpOwotCWlmICghc2xhdmUpCi0JCWdvdG8gb3V0X3VubG9jazsKLQogCWJvbmRfM2FkX3J4X2luZGljYXRpb24oKHN0cnVjdCBsYWNwZHUgKikgc2tiLT5kYXRhLCBzbGF2ZSwgc2tiLT5sZW4pOwotCi0JcmV0ID0gTkVUX1JYX1NVQ0NFU1M7Ci0KLW91dF91bmxvY2s6CiAJcmVhZF91bmxvY2soJmJvbmQtPmxvY2spOwotb3V0OgotCWRldl9rZnJlZV9za2Ioc2tiKTsKLQotCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmggYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmgKaW5kZXggMDFiOGE2YS4uMGVlM2YxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5oCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuaApAQCAtMjU4LDcgKzI1OCw2IEBACiAJCQkJICogcmVxdWVzdGVkCiAJCQkJICovCiAJc3RydWN0IHRpbWVyX2xpc3QgYWRfdGltZXI7Ci0Jc3RydWN0IHBhY2tldF90eXBlIGFkX3BrdF90eXBlOwogfTsKIAogc3RydWN0IGFkX3NsYXZlX2luZm8gewpAQCAtMjgwLDcgKzI3OSw4IEBACiB2b2lkIGJvbmRfM2FkX2hhbmRsZV9saW5rX2NoYW5nZShzdHJ1Y3Qgc2xhdmUgKnNsYXZlLCBjaGFyIGxpbmspOwogaW50ICBib25kXzNhZF9nZXRfYWN0aXZlX2FnZ19pbmZvKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3QgYWRfaW5mbyAqYWRfaW5mbyk7CiBpbnQgYm9uZF8zYWRfeG1pdF94b3Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1pbnQgYm9uZF8zYWRfbGFjcGR1X3JlY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBhY2tldF90eXBlKiBwdHlwZSwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KTsKK3ZvaWQgYm9uZF8zYWRfbGFjcGR1X3JlY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsCisJCQkgIHN0cnVjdCBzbGF2ZSAqc2xhdmUpOwogaW50IGJvbmRfM2FkX3NldF9jYXJyaWVyKHN0cnVjdCBib25kaW5nICpib25kKTsKICNlbmRpZiAvL19fQk9ORF8zQURfSF9fCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwppbmRleCBiYTcxNTgyLi44ZjJkMmU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCkBAIC0zMDgsNDkgKzMwOCwzMyBAQAogCV91bmxvY2tfcnhfaGFzaHRibChib25kKTsKIH0KIAotc3RhdGljIGludCBybGJfYXJwX3JlY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCitzdGF0aWMgdm9pZCBybGJfYXJwX3JlY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsCisJCQkgc3RydWN0IHNsYXZlICpzbGF2ZSkKIHsKLQlzdHJ1Y3QgYm9uZGluZyAqYm9uZDsKLQlzdHJ1Y3QgYXJwX3BrdCAqYXJwID0gKHN0cnVjdCBhcnBfcGt0ICopc2tiLT5kYXRhOwotCWludCByZXMgPSBORVRfUlhfRFJPUDsKKwlzdHJ1Y3QgYXJwX3BrdCAqYXJwOwogCi0Jd2hpbGUgKGJvbmRfZGV2LT5wcml2X2ZsYWdzICYgSUZGXzgwMl8xUV9WTEFOKQotCQlib25kX2RldiA9IHZsYW5fZGV2X3JlYWxfZGV2KGJvbmRfZGV2KTsKKwlpZiAoc2tiLT5wcm90b2NvbCAhPSBjcHVfdG9fYmUxNihFVEhfUF9BUlApKQorCQlyZXR1cm47CiAKLQlpZiAoIShib25kX2Rldi0+cHJpdl9mbGFncyAmIElGRl9CT05ESU5HKSB8fAotCSAgICAhKGJvbmRfZGV2LT5mbGFncyAmIElGRl9NQVNURVIpKQotCQlnb3RvIG91dDsKLQorCWFycCA9IChzdHJ1Y3QgYXJwX3BrdCAqKSBza2ItPmRhdGE7CiAJaWYgKCFhcnApIHsKIAkJcHJfZGVidWcoIlBhY2tldCBoYXMgbm8gQVJQIGRhdGFcbiIpOwotCQlnb3RvIG91dDsKKwkJcmV0dXJuOwogCX0KIAotCXNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpOwotCWlmICghc2tiKQotCQlnb3RvIG91dDsKLQotCWlmICghcHNrYl9tYXlfcHVsbChza2IsIGFycF9oZHJfbGVuKGJvbmRfZGV2KSkpCi0JCWdvdG8gb3V0OworCWlmICghcHNrYl9tYXlfcHVsbChza2IsIGFycF9oZHJfbGVuKGJvbmQtPmRldikpKQorCQlyZXR1cm47CiAKIAlpZiAoc2tiLT5sZW4gPCBzaXplb2Yoc3RydWN0IGFycF9wa3QpKSB7CiAJCXByX2RlYnVnKCJQYWNrZXQgaXMgdG9vIHNtYWxsIHRvIGJlIGFuIEFSUFxuIik7Ci0JCWdvdG8gb3V0OworCQlyZXR1cm47CiAJfQogCiAJaWYgKGFycC0+b3BfY29kZSA9PSBodG9ucyhBUlBPUF9SRVBMWSkpIHsKIAkJLyogdXBkYXRlIHJ4IGhhc2ggdGFibGUgZm9yIHRoaXMgQVJQICovCi0JCWJvbmQgPSBuZXRkZXZfcHJpdihib25kX2Rldik7CiAJCXJsYl91cGRhdGVfZW50cnlfZnJvbV9hcnAoYm9uZCwgYXJwKTsKIAkJcHJfZGVidWcoIlNlcnZlciByZWNlaXZlZCBhbiBBUlAgUmVwbHkgZnJvbSBjbGllbnRcbiIpOwogCX0KLQotCXJlcyA9IE5FVF9SWF9TVUNDRVNTOwotCi1vdXQ6Ci0JZGV2X2tmcmVlX3NrYihza2IpOwotCi0JcmV0dXJuIHJlczsKIH0KIAogLyogQ2FsbGVyIG11c3QgaG9sZCBib25kIGxvY2sgZm9yIHJlYWQgKi8KQEAgLTc1OSw3ICs3NDMsNiBAQAogc3RhdGljIGludCBybGJfaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCkKIHsKIAlzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gJihCT05EX0FMQl9JTkZPKGJvbmQpKTsKLQlzdHJ1Y3QgcGFja2V0X3R5cGUgKnBrX3R5cGUgPSAmKEJPTkRfQUxCX0lORk8oYm9uZCkucmxiX3BrdF90eXBlKTsKIAlzdHJ1Y3QgcmxiX2NsaWVudF9pbmZvCSpuZXdfaGFzaHRibDsKIAlpbnQgc2l6ZSA9IFJMQl9IQVNIX1RBQkxFX1NJWkUgKiBzaXplb2Yoc3RydWN0IHJsYl9jbGllbnRfaW5mbyk7CiAJaW50IGk7CkBAIC03ODQsMTMgKzc2Nyw4IEBACiAKIAlfdW5sb2NrX3J4X2hhc2h0YmwoYm9uZCk7CiAKLQkvKmluaXRpYWxpemUgcGFja2V0IHR5cGUqLwotCXBrX3R5cGUtPnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9BUlApOwotCXBrX3R5cGUtPmRldiA9IGJvbmQtPmRldjsKLQlwa190eXBlLT5mdW5jID0gcmxiX2FycF9yZWN2OwotCiAJLyogcmVnaXN0ZXIgdG8gcmVjZWl2ZSBBUlBzICovCi0JZGV2X2FkZF9wYWNrKHBrX3R5cGUpOworCWJvbmQtPnJlY3ZfcHJvYmUgPSBybGJfYXJwX3JlY3Y7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTc5OSw4ICs3NzcsNiBAQAogewogCXN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSAmKEJPTkRfQUxCX0lORk8oYm9uZCkpOwogCi0JZGV2X3JlbW92ZV9wYWNrKCYoYm9uZF9pbmZvLT5ybGJfcGt0X3R5cGUpKTsKLQogCV9sb2NrX3J4X2hhc2h0YmwoYm9uZCk7CiAKIAlrZnJlZShib25kX2luZm8tPnJ4X2hhc2h0YmwpOwpAQCAtMTI0OSwxNiArMTIyNSwxMCBAQAogCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAJZXRoX2RhdGEgPSBldGhfaGRyKHNrYik7CiAKLQkvKiBtYWtlIHN1cmUgdGhhdCB0aGUgY3Vycl9hY3RpdmVfc2xhdmUgYW5kIHRoZSBzbGF2ZXMgbGlzdCBkbwotCSAqIG5vdCBjaGFuZ2UgZHVyaW5nIHR4CisJLyogbWFrZSBzdXJlIHRoYXQgdGhlIGN1cnJfYWN0aXZlX3NsYXZlIGRvIG5vdCBjaGFuZ2UgZHVyaW5nIHR4CiAJICovCi0JcmVhZF9sb2NrKCZib25kLT5sb2NrKTsKIAlyZWFkX2xvY2soJmJvbmQtPmN1cnJfc2xhdmVfbG9jayk7CiAKLQlpZiAoIUJPTkRfSVNfT0soYm9uZCkpIHsKLQkJZ290byBvdXQ7Ci0JfQotCiAJc3dpdGNoIChudG9ocyhza2ItPnByb3RvY29sKSkgewogCWNhc2UgRVRIX1BfSVA6IHsKIAkJY29uc3Qgc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTsKQEAgLTEzNTgsMTMgKzEzMjgsMTIgQEAKIAkJfQogCX0KIAotb3V0OgogCWlmIChyZXMpIHsKIAkJLyogbm8gc3VpdGFibGUgaW50ZXJmYWNlLCBmcmFtZSBub3Qgc2VudCAqLwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJfQogCXJlYWRfdW5sb2NrKCZib25kLT5jdXJyX3NsYXZlX2xvY2spOwotCXJlYWRfdW5sb2NrKCZib25kLT5sb2NrKTsKKwogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuaCBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuaAppbmRleCA4Y2E3MTU4Li45MGYxNDBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmgKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5oCkBAIC0xMjksNyArMTI5LDYgQEAKIAlpbnQJCQlscF9jb3VudGVyOwogCS8qIC0tLS0tLS0tIHJsYiBwYXJhbWV0ZXJzIC0tLS0tLS0tICovCiAJaW50IHJsYl9lbmFibGVkOwotCXN0cnVjdCBwYWNrZXRfdHlwZQlybGJfcGt0X3R5cGU7CiAJc3RydWN0IHJsYl9jbGllbnRfaW5mbwkqcnhfaGFzaHRibDsJLyogUmVjZWl2ZSBoYXNoIHRhYmxlICovCiAJc3BpbmxvY2tfdAkJcnhfaGFzaHRibF9sb2NrOwogCXUzMgkJCXJ4X2hhc2h0YmxfaGVhZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCmluZGV4IDE2ZDZmZTkuLjZkYzQyODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwpAQCAtODksOCArODksNyBAQAogCiBzdGF0aWMgaW50IG1heF9ib25kcwk9IEJPTkRfREVGQVVMVF9NQVhfQk9ORFM7CiBzdGF0aWMgaW50IHR4X3F1ZXVlcwk9IEJPTkRfREVGQVVMVF9UWF9RVUVVRVM7Ci1zdGF0aWMgaW50IG51bV9ncmF0X2FycCA9IDE7Ci1zdGF0aWMgaW50IG51bV91bnNvbF9uYSA9IDE7CitzdGF0aWMgaW50IG51bV9wZWVyX25vdGlmID0gMTsKIHN0YXRpYyBpbnQgbWlpbW9uCT0gQk9ORF9MSU5LX01PTl9JTlRFUlY7CiBzdGF0aWMgaW50IHVwZGVsYXk7CiBzdGF0aWMgaW50IGRvd25kZWxheTsKQEAgLTExMywxMCArMTEyLDEwIEBACiBNT0RVTEVfUEFSTV9ERVNDKG1heF9ib25kcywgIk1heCBudW1iZXIgb2YgYm9uZGVkIGRldmljZXMiKTsKIG1vZHVsZV9wYXJhbSh0eF9xdWV1ZXMsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHR4X3F1ZXVlcywgIk1heCBudW1iZXIgb2YgdHJhbnNtaXQgcXVldWVzIChkZWZhdWx0ID0gMTYpIik7Ci1tb2R1bGVfcGFyYW0obnVtX2dyYXRfYXJwLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhudW1fZ3JhdF9hcnAsICJOdW1iZXIgb2YgZ3JhdHVpdG91cyBBUlAgcGFja2V0cyB0byBzZW5kIG9uIGZhaWxvdmVyIGV2ZW50Iik7Ci1tb2R1bGVfcGFyYW0obnVtX3Vuc29sX25hLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhudW1fdW5zb2xfbmEsICJOdW1iZXIgb2YgdW5zb2xpY2l0ZWQgSVB2NiBOZWlnaGJvciBBZHZlcnRpc2VtZW50cyBwYWNrZXRzIHRvIHNlbmQgb24gZmFpbG92ZXIgZXZlbnQiKTsKK21vZHVsZV9wYXJhbV9uYW1lZChudW1fZ3JhdF9hcnAsIG51bV9wZWVyX25vdGlmLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhudW1fZ3JhdF9hcnAsICJOdW1iZXIgb2YgcGVlciBub3RpZmljYXRpb25zIHRvIHNlbmQgb24gZmFpbG92ZXIgZXZlbnQgKGFsaWFzIG9mIG51bV91bnNvbF9uYSkiKTsKK21vZHVsZV9wYXJhbV9uYW1lZChudW1fdW5zb2xfbmEsIG51bV9wZWVyX25vdGlmLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhudW1fdW5zb2xfbmEsICJOdW1iZXIgb2YgcGVlciBub3RpZmljYXRpb25zIHRvIHNlbmQgb24gZmFpbG92ZXIgZXZlbnQgKGFsaWFzIG9mIG51bV9ncmF0X2FycCkiKTsKIG1vZHVsZV9wYXJhbShtaWltb24sIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1paW1vbiwgIkxpbmsgY2hlY2sgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIik7CiBtb2R1bGVfcGFyYW0odXBkZWxheSwgaW50LCAwKTsKQEAgLTIzNCw3ICsyMzMsNiBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZvcndhcmQgZGVjbGFyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyB2b2lkIGJvbmRfc2VuZF9ncmF0dWl0b3VzX2FycChzdHJ1Y3QgYm9uZGluZyAqYm9uZCk7CiBzdGF0aWMgaW50IGJvbmRfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpOwogc3RhdGljIHZvaWQgYm9uZF91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KTsKIApAQCAtMzQ2LDMyICszNDQsNiBAQAogfQogCiAvKioKLSAqIGJvbmRfaGFzX2NoYWxsZW5nZWRfc2xhdmVzCi0gKiBAYm9uZDogdGhlIGJvbmQgd2UncmUgd29ya2luZyBvbgotICoKLSAqIFNlYXJjaGVzIHRoZSBzbGF2ZSBsaXN0LiBSZXR1cm5zIDEgaWYgYSB2bGFuIGNoYWxsZW5nZWQgc2xhdmUKLSAqIHdhcyBmb3VuZCwgMCBvdGhlcndpc2UuCi0gKgotICogQXNzdW1lcyBib25kLT5sb2NrIGlzIGhlbGQuCi0gKi8KLXN0YXRpYyBpbnQgYm9uZF9oYXNfY2hhbGxlbmdlZF9zbGF2ZXMoc3RydWN0IGJvbmRpbmcgKmJvbmQpCi17Ci0Jc3RydWN0IHNsYXZlICpzbGF2ZTsKLQlpbnQgaTsKLQotCWJvbmRfZm9yX2VhY2hfc2xhdmUoYm9uZCwgc2xhdmUsIGkpIHsKLQkJaWYgKHNsYXZlLT5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQpIHsKLQkJCXByX2RlYnVnKCJmb3VuZCBWTEFOIGNoYWxsZW5nZWQgc2xhdmUgLSAlc1xuIiwKLQkJCQkgc2xhdmUtPmRldi0+bmFtZSk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCX0KLQotCXByX2RlYnVnKCJubyBWTEFOIGNoYWxsZW5nZWQgc2xhdmVzIGZvdW5kXG4iKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoqCiAgKiBib25kX25leHRfdmxhbiAtIHNhZmVseSBza2lwIHRvIHRoZSBuZXh0IGl0ZW0gaW4gdGhlIHZsYW5zIGxpc3QuCiAgKiBAYm9uZDogdGhlIGJvbmQgd2UncmUgd29ya2luZyBvbgogICogQGN1cnI6IGl0ZW0gd2UncmUgYWR2YW5jaW5nIGZyb20KQEAgLTYzMSw3ICs2MDMsOCBAQAogc3RhdGljIGludCBib25kX3VwZGF0ZV9zcGVlZF9kdXBsZXgoc3RydWN0IHNsYXZlICpzbGF2ZSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2ID0gc2xhdmUtPmRldjsKLQlzdHJ1Y3QgZXRodG9vbF9jbWQgZXRvb2w7CisJc3RydWN0IGV0aHRvb2xfY21kIGV0b29sID0geyAuY21kID0gRVRIVE9PTF9HU0VUIH07CisJdTMyIHNsYXZlX3NwZWVkOwogCWludCByZXM7CiAKIAkvKiBGYWtlIHNwZWVkIGFuZCBkdXBsZXggKi8KQEAgLTY0NSw3ICs2MTgsOCBAQAogCWlmIChyZXMgPCAwKQogCQlyZXR1cm4gLTE7CiAKLQlzd2l0Y2ggKGV0b29sLnNwZWVkKSB7CisJc2xhdmVfc3BlZWQgPSBldGh0b29sX2NtZF9zcGVlZCgmZXRvb2wpOworCXN3aXRjaCAoc2xhdmVfc3BlZWQpIHsKIAljYXNlIFNQRUVEXzEwOgogCWNhc2UgU1BFRURfMTAwOgogCWNhc2UgU1BFRURfMTAwMDoKQEAgLTY2Myw3ICs2MzcsNyBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0Jc2xhdmUtPnNwZWVkID0gZXRvb2wuc3BlZWQ7CisJc2xhdmUtPnNwZWVkID0gc2xhdmVfc3BlZWQ7CiAJc2xhdmUtPmR1cGxleCA9IGV0b29sLmR1cGxleDsKIAogCXJldHVybiAwOwpAQCAtMTA4Nyw2ICsxMDYxLDIxIEBACiAJcmV0dXJuIGJlc3RzbGF2ZTsKIH0KIAorc3RhdGljIGJvb2wgYm9uZF9zaG91bGRfbm90aWZ5X3BlZXJzKHN0cnVjdCBib25kaW5nICpib25kKQoreworCXN0cnVjdCBzbGF2ZSAqc2xhdmUgPSBib25kLT5jdXJyX2FjdGl2ZV9zbGF2ZTsKKworCXByX2RlYnVnKCJib25kX3Nob3VsZF9ub3RpZnlfcGVlcnM6IGJvbmQgJXMgc2xhdmUgJXNcbiIsCisJCSBib25kLT5kZXYtPm5hbWUsIHNsYXZlID8gc2xhdmUtPmRldi0+bmFtZSA6ICJOVUxMIik7CisKKwlpZiAoIXNsYXZlIHx8ICFib25kLT5zZW5kX3BlZXJfbm90aWYgfHwKKwkgICAgdGVzdF9iaXQoX19MSU5LX1NUQVRFX0xJTktXQVRDSF9QRU5ESU5HLCAmc2xhdmUtPmRldi0+c3RhdGUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlib25kLT5zZW5kX3BlZXJfbm90aWYtLTsKKwlyZXR1cm4gdHJ1ZTsKK30KKwogLyoqCiAgKiBjaGFuZ2VfYWN0aXZlX2ludGVyZmFjZSAtIGNoYW5nZSB0aGUgYWN0aXZlIHNsYXZlIGludG8gdGhlIHNwZWNpZmllZCBvbmUKICAqIEBib25kOiBvdXIgYm9uZGluZyBzdHJ1Y3QKQEAgLTExNTQsNiArMTE0Myw4IEBACiAJCQlib25kX3NldF9zbGF2ZV9pbmFjdGl2ZV9mbGFncyhvbGRfYWN0aXZlKTsKIAogCQlpZiAobmV3X2FjdGl2ZSkgeworCQkJYm9vbCBzaG91bGRfbm90aWZ5X3BlZXJzID0gZmFsc2U7CisKIAkJCWJvbmRfc2V0X3NsYXZlX2FjdGl2ZV9mbGFncyhuZXdfYWN0aXZlKTsKIAogCQkJaWYgKGJvbmQtPnBhcmFtcy5mYWlsX292ZXJfbWFjKQpAQCAtMTE2MSwxNyArMTE1MiwxOSBAQAogCQkJCQkJICAgICAgb2xkX2FjdGl2ZSk7CiAKIAkJCWlmIChuZXRpZl9ydW5uaW5nKGJvbmQtPmRldikpIHsKLQkJCQlib25kLT5zZW5kX2dyYXRfYXJwID0gYm9uZC0+cGFyYW1zLm51bV9ncmF0X2FycDsKLQkJCQlib25kX3NlbmRfZ3JhdHVpdG91c19hcnAoYm9uZCk7Ci0KLQkJCQlib25kLT5zZW5kX3Vuc29sX25hID0gYm9uZC0+cGFyYW1zLm51bV91bnNvbF9uYTsKLQkJCQlib25kX3NlbmRfdW5zb2xpY2l0ZWRfbmEoYm9uZCk7CisJCQkJYm9uZC0+c2VuZF9wZWVyX25vdGlmID0KKwkJCQkJYm9uZC0+cGFyYW1zLm51bV9wZWVyX25vdGlmOworCQkJCXNob3VsZF9ub3RpZnlfcGVlcnMgPQorCQkJCQlib25kX3Nob3VsZF9ub3RpZnlfcGVlcnMoYm9uZCk7CiAJCQl9CiAKIAkJCXdyaXRlX3VubG9ja19iaCgmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKTsKIAkJCXJlYWRfdW5sb2NrKCZib25kLT5sb2NrKTsKIAogCQkJbmV0ZGV2X2JvbmRpbmdfY2hhbmdlKGJvbmQtPmRldiwgTkVUREVWX0JPTkRJTkdfRkFJTE9WRVIpOworCQkJaWYgKHNob3VsZF9ub3RpZnlfcGVlcnMpCisJCQkJbmV0ZGV2X2JvbmRpbmdfY2hhbmdlKGJvbmQtPmRldiwKKwkJCQkJCSAgICAgIE5FVERFVl9OT1RJRllfUEVFUlMpOwogCiAJCQlyZWFkX2xvY2soJmJvbmQtPmxvY2spOwogCQkJd3JpdGVfbG9ja19iaCgmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKTsKQEAgLTEzODcsNTIgKzEzODAsNjggQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBCT05EX1ZMQU5fRkVBVFVSRVMgXAotCShORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRCB8IE5FVElGX0ZfSFdfVkxBTl9SWCB8IE5FVElGX0ZfSFdfVkxBTl9UWCB8IFwKLQkgTkVUSUZfRl9IV19WTEFOX0ZJTFRFUikKK3N0YXRpYyB1MzIgYm9uZF9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZlYXR1cmVzKQoreworCXN0cnVjdCBzbGF2ZSAqc2xhdmU7CisJc3RydWN0IGJvbmRpbmcgKmJvbmQgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiBtYXNrOworCWludCBpOwogCi0vKgotICogQ29tcHV0ZSB0aGUgY29tbW9uIGRldi0+ZmVhdHVyZSBzZXQgYXZhaWxhYmxlIHRvIGFsbCBzbGF2ZXMuICBTb21lCi0gKiBmZWF0dXJlIGJpdHMgYXJlIG1hbmFnZWQgZWxzZXdoZXJlLCBzbyBwcmVzZXJ2ZSB0aG9zZSBmZWF0dXJlIGJpdHMKLSAqIG9uIHRoZSBtYXN0ZXIgZGV2aWNlLgotICovCi1zdGF0aWMgaW50IGJvbmRfY29tcHV0ZV9mZWF0dXJlcyhzdHJ1Y3QgYm9uZGluZyAqYm9uZCkKKwlyZWFkX2xvY2soJmJvbmQtPmxvY2spOworCisJaWYgKCFib25kLT5maXJzdF9zbGF2ZSkgeworCQkvKiBEaXNhYmxlIGFkZGluZyBWTEFOcyB0byBlbXB0eSBib25kLiBCdXQgd2h5PyAtLW1xICovCisJCWZlYXR1cmVzIHw9IE5FVElGX0ZfVkxBTl9DSEFMTEVOR0VEOworCQlnb3RvIG91dDsKKwl9CisKKwltYXNrID0gZmVhdHVyZXM7CisJZmVhdHVyZXMgJj0gfk5FVElGX0ZfT05FX0ZPUl9BTEw7CisJZmVhdHVyZXMgfD0gTkVUSUZfRl9BTExfRk9SX0FMTDsKKworCWJvbmRfZm9yX2VhY2hfc2xhdmUoYm9uZCwgc2xhdmUsIGkpIHsKKwkJZmVhdHVyZXMgPSBuZXRkZXZfaW5jcmVtZW50X2ZlYXR1cmVzKGZlYXR1cmVzLAorCQkJCQkJICAgICBzbGF2ZS0+ZGV2LT5mZWF0dXJlcywKKwkJCQkJCSAgICAgbWFzayk7CisJfQorCitvdXQ6CisJcmVhZF91bmxvY2soJmJvbmQtPmxvY2spOworCXJldHVybiBmZWF0dXJlczsKK30KKworI2RlZmluZSBCT05EX1ZMQU5fRkVBVFVSRVMJKE5FVElGX0ZfQUxMX1RYX09GRkxPQURTIHwgXAorCQkJCSBORVRJRl9GX1NPRlRfRkVBVFVSRVMgfCBcCisJCQkJIE5FVElGX0ZfTFJPKQorCitzdGF0aWMgdm9pZCBib25kX2NvbXB1dGVfZmVhdHVyZXMoc3RydWN0IGJvbmRpbmcgKmJvbmQpCiB7CiAJc3RydWN0IHNsYXZlICpzbGF2ZTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYgPSBib25kLT5kZXY7Ci0JdTMyIGZlYXR1cmVzID0gYm9uZF9kZXYtPmZlYXR1cmVzOwotCXUzMiB2bGFuX2ZlYXR1cmVzID0gMDsKLQl1bnNpZ25lZCBzaG9ydCBtYXhfaGFyZF9oZWFkZXJfbGVuID0gbWF4KCh1MTYpRVRIX0hMRU4sCi0JCQkJCQlib25kX2Rldi0+aGFyZF9oZWFkZXJfbGVuKTsKKwl1MzIgdmxhbl9mZWF0dXJlcyA9IEJPTkRfVkxBTl9GRUFUVVJFUzsKKwl1bnNpZ25lZCBzaG9ydCBtYXhfaGFyZF9oZWFkZXJfbGVuID0gRVRIX0hMRU47CiAJaW50IGk7CiAKLQlmZWF0dXJlcyAmPSB+KE5FVElGX0ZfQUxMX0NTVU0gfCBCT05EX1ZMQU5fRkVBVFVSRVMpOwotCWZlYXR1cmVzIHw9ICBORVRJRl9GX0dTT19NQVNLIHwgTkVUSUZfRl9OT19DU1VNOworCXJlYWRfbG9jaygmYm9uZC0+bG9jayk7CiAKIAlpZiAoIWJvbmQtPmZpcnN0X3NsYXZlKQogCQlnb3RvIGRvbmU7CiAKLQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9PTkVfRk9SX0FMTDsKLQotCXZsYW5fZmVhdHVyZXMgPSBib25kLT5maXJzdF9zbGF2ZS0+ZGV2LT52bGFuX2ZlYXR1cmVzOwogCWJvbmRfZm9yX2VhY2hfc2xhdmUoYm9uZCwgc2xhdmUsIGkpIHsKLQkJZmVhdHVyZXMgPSBuZXRkZXZfaW5jcmVtZW50X2ZlYXR1cmVzKGZlYXR1cmVzLAotCQkJCQkJICAgICBzbGF2ZS0+ZGV2LT5mZWF0dXJlcywKLQkJCQkJCSAgICAgTkVUSUZfRl9PTkVfRk9SX0FMTCk7CiAJCXZsYW5fZmVhdHVyZXMgPSBuZXRkZXZfaW5jcmVtZW50X2ZlYXR1cmVzKHZsYW5fZmVhdHVyZXMsCi0JCQkJCQkJc2xhdmUtPmRldi0+dmxhbl9mZWF0dXJlcywKLQkJCQkJCQlORVRJRl9GX09ORV9GT1JfQUxMKTsKKwkJCXNsYXZlLT5kZXYtPnZsYW5fZmVhdHVyZXMsIEJPTkRfVkxBTl9GRUFUVVJFUyk7CisKIAkJaWYgKHNsYXZlLT5kZXYtPmhhcmRfaGVhZGVyX2xlbiA+IG1heF9oYXJkX2hlYWRlcl9sZW4pCiAJCQltYXhfaGFyZF9oZWFkZXJfbGVuID0gc2xhdmUtPmRldi0+aGFyZF9oZWFkZXJfbGVuOwogCX0KIAogZG9uZToKLQlmZWF0dXJlcyB8PSAoYm9uZF9kZXYtPmZlYXR1cmVzICYgQk9ORF9WTEFOX0ZFQVRVUkVTKTsKLQlib25kX2Rldi0+ZmVhdHVyZXMgPSBuZXRkZXZfZml4X2ZlYXR1cmVzKGJvbmRfZGV2LCBmZWF0dXJlcyk7Ci0JYm9uZF9kZXYtPnZsYW5fZmVhdHVyZXMgPSBuZXRkZXZfZml4X2ZlYXR1cmVzKGJvbmRfZGV2LCB2bGFuX2ZlYXR1cmVzKTsKKwlib25kX2Rldi0+dmxhbl9mZWF0dXJlcyA9IHZsYW5fZmVhdHVyZXM7CiAJYm9uZF9kZXYtPmhhcmRfaGVhZGVyX2xlbiA9IG1heF9oYXJkX2hlYWRlcl9sZW47CiAKLQlyZXR1cm4gMDsKKwlyZWFkX3VubG9jaygmYm9uZC0+bG9jayk7CisKKwluZXRkZXZfY2hhbmdlX2ZlYXR1cmVzKGJvbmRfZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgYm9uZF9zZXR1cF9ieV9zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsCkBAIC0xNDUyLDI3ICsxNDYxLDE3IEBACiB9CiAKIC8qIE9uIGJvbmRpbmcgc2xhdmVzIG90aGVyIHRoYW4gdGhlIGN1cnJlbnRseSBhY3RpdmUgc2xhdmUsIHN1cHByZXNzCi0gKiBkdXBsaWNhdGVzIGV4Y2VwdCBmb3IgODAyLjNhZCBFVEhfUF9TTE9XLCBhbGIgbm9uLW1jYXN0L2JjYXN0LCBhbmQKLSAqIEFSUCBvbiBhY3RpdmUtYmFja3VwIHNsYXZlcyB3aXRoIGFycF92YWxpZGF0ZSBlbmFibGVkLgorICogZHVwbGljYXRlcyBleGNlcHQgZm9yIGFsYiBub24tbWNhc3QvYmNhc3QuCiAgKi8KIHN0YXRpYyBib29sIGJvbmRfc2hvdWxkX2RlbGl2ZXJfZXhhY3RfbWF0Y2goc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJICAgIHN0cnVjdCBzbGF2ZSAqc2xhdmUsCiAJCQkJCSAgICBzdHJ1Y3QgYm9uZGluZyAqYm9uZCkKIHsKIAlpZiAoYm9uZF9pc19zbGF2ZV9pbmFjdGl2ZShzbGF2ZSkpIHsKLQkJaWYgKHNsYXZlX2RvX2FycF92YWxpZGF0ZShib25kLCBzbGF2ZSkgJiYKLQkJICAgIHNrYi0+cHJvdG9jb2wgPT0gX19jcHVfdG9fYmUxNihFVEhfUF9BUlApKQotCQkJcmV0dXJuIGZhbHNlOwotCiAJCWlmIChib25kLT5wYXJhbXMubW9kZSA9PSBCT05EX01PREVfQUxCICYmCiAJCSAgICBza2ItPnBrdF90eXBlICE9IFBBQ0tFVF9CUk9BRENBU1QgJiYKIAkJICAgIHNrYi0+cGt0X3R5cGUgIT0gUEFDS0VUX01VTFRJQ0FTVCkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0KLQkJaWYgKGJvbmQtPnBhcmFtcy5tb2RlID09IEJPTkRfTU9ERV84MDIzQUQgJiYKLQkJICAgIHNrYi0+cHJvdG9jb2wgPT0gX19jcHVfdG9fYmUxNihFVEhfUF9TTE9XKSkKIAkJCXJldHVybiBmYWxzZTsKLQogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAJcmV0dXJuIGZhbHNlOwpAQCAtMTQ5Niw2ICsxNDk1LDE1IEBACiAJaWYgKGJvbmQtPnBhcmFtcy5hcnBfaW50ZXJ2YWwpCiAJCXNsYXZlLT5kZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogCisJaWYgKGJvbmQtPnJlY3ZfcHJvYmUpIHsKKwkJc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKKworCQlpZiAobGlrZWx5KG5za2IpKSB7CisJCQlib25kLT5yZWN2X3Byb2JlKG5za2IsIGJvbmQsIHNsYXZlKTsKKwkJCWRldl9rZnJlZV9za2IobnNrYik7CisJCX0KKwl9CisKIAlpZiAoYm9uZF9zaG91bGRfZGVsaXZlcl9leGFjdF9tYXRjaChza2IsIHNsYXZlLCBib25kKSkgewogCQlyZXR1cm4gUlhfSEFORExFUl9FWEFDVDsKIAl9CkBAIC0xNTI2LDcgKzE1MzQsNiBAQAogCXN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7CiAJc3RydWN0IHNvY2thZGRyIGFkZHI7CiAJaW50IGxpbmtfcmVwb3J0aW5nOwotCWludCBvbGRfZmVhdHVyZXMgPSBib25kX2Rldi0+ZmVhdHVyZXM7CiAJaW50IHJlcyA9IDA7CiAKIAlpZiAoIWJvbmQtPnBhcmFtcy51c2VfY2FycmllciAmJiBzbGF2ZV9kZXYtPmV0aHRvb2xfb3BzID09IE5VTEwgJiYKQEAgLTE1NTksMTYgKzE1NjYsOSBAQAogCQkJcHJfd2FybmluZygiJXM6IFdhcm5pbmc6IGVuc2xhdmVkIFZMQU4gY2hhbGxlbmdlZCBzbGF2ZSAlcy4gQWRkaW5nIFZMQU5zIHdpbGwgYmUgYmxvY2tlZCBhcyBsb25nIGFzICVzIGlzIHBhcnQgb2YgYm9uZCAlc1xuIiwKIAkJCQkgICBib25kX2Rldi0+bmFtZSwgc2xhdmVfZGV2LT5uYW1lLAogCQkJCSAgIHNsYXZlX2Rldi0+bmFtZSwgYm9uZF9kZXYtPm5hbWUpOwotCQkJYm9uZF9kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVkxBTl9DSEFMTEVOR0VEOwogCQl9CiAJfSBlbHNlIHsKIAkJcHJfZGVidWcoIiVzOiAhIE5FVElGX0ZfVkxBTl9DSEFMTEVOR0VEXG4iLCBzbGF2ZV9kZXYtPm5hbWUpOwotCQlpZiAoYm9uZC0+c2xhdmVfY250ID09IDApIHsKLQkJCS8qIEZpcnN0IHNsYXZlLCBhbmQgaXQgaXMgbm90IFZMQU4gY2hhbGxlbmdlZCwKLQkJCSAqIHNvIHJlbW92ZSB0aGUgYmxvY2sgb2YgYWRkaW5nIFZMQU5zIG92ZXIgdGhlIGJvbmQuCi0JCQkgKi8KLQkJCWJvbmRfZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQ7Ci0JCX0KIAl9CiAKIAkvKgpAQCAtMTY0MCw2ICsxNjQwLDggQEAKIAkJfQogCX0KIAorCWNhbGxfbmV0ZGV2aWNlX25vdGlmaWVycyhORVRERVZfSk9JTiwgc2xhdmVfZGV2KTsKKwogCS8qIElmIHRoaXMgaXMgdGhlIGZpcnN0IHNsYXZlLCB0aGVuIHdlIG5lZWQgdG8gc2V0IHRoZSBtYXN0ZXIncyBoYXJkd2FyZQogCSAqIGFkZHJlc3MgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIHNsYXZlJ3MuICovCiAJaWYgKGlzX3plcm9fZXRoZXJfYWRkcihib25kLT5kZXYtPmRldl9hZGRyKSkKQEAgLTE3NTcsMTAgKzE3NTksMTAgQEAKIAluZXdfc2xhdmUtPmRlbGF5ID0gMDsKIAluZXdfc2xhdmUtPmxpbmtfZmFpbHVyZV9jb3VudCA9IDA7CiAKLQlib25kX2NvbXB1dGVfZmVhdHVyZXMoYm9uZCk7Ci0KIAl3cml0ZV91bmxvY2tfYmgoJmJvbmQtPmxvY2spOwogCisJYm9uZF9jb21wdXRlX2ZlYXR1cmVzKGJvbmQpOworCiAJcmVhZF9sb2NrKCZib25kLT5sb2NrKTsKIAogCW5ld19zbGF2ZS0+bGFzdF9hcnBfcnggPSBqaWZmaWVzOwpAQCAtMTk0MCw3ICsxOTQyLDcgQEAKIAlrZnJlZShuZXdfc2xhdmUpOwogCiBlcnJfdW5kb19mbGFnczoKLQlib25kX2Rldi0+ZmVhdHVyZXMgPSBvbGRfZmVhdHVyZXM7CisJYm9uZF9jb21wdXRlX2ZlYXR1cmVzKGJvbmQpOwogCiAJcmV0dXJuIHJlczsKIH0KQEAgLTE5NjEsNiArMTk2Myw3IEBACiAJc3RydWN0IGJvbmRpbmcgKmJvbmQgPSBuZXRkZXZfcHJpdihib25kX2Rldik7CiAJc3RydWN0IHNsYXZlICpzbGF2ZSwgKm9sZGN1cnJlbnQ7CiAJc3RydWN0IHNvY2thZGRyIGFkZHI7CisJdTMyIG9sZF9mZWF0dXJlcyA9IGJvbmRfZGV2LT5mZWF0dXJlczsKIAogCS8qIHNsYXZlIGlzIG5vdCBhIHNsYXZlIG9yIG1hc3RlciBpcyBub3QgbWFzdGVyIG9mIHRoaXMgc2xhdmUgKi8KIAlpZiAoIShzbGF2ZV9kZXYtPmZsYWdzICYgSUZGX1NMQVZFKSB8fApAQCAtMTk3MSw3ICsxOTc0LDcgQEAKIAl9CiAKIAlibG9ja19uZXRwb2xsX3R4KCk7Ci0JbmV0ZGV2X2JvbmRpbmdfY2hhbmdlKGJvbmRfZGV2LCBORVRERVZfQk9ORElOR19ERVNMQVZFKTsKKwluZXRkZXZfYm9uZGluZ19jaGFuZ2UoYm9uZF9kZXYsIE5FVERFVl9SRUxFQVNFKTsKIAl3cml0ZV9sb2NrX2JoKCZib25kLT5sb2NrKTsKIAogCXNsYXZlID0gYm9uZF9nZXRfc2xhdmVfYnlfZGV2KGJvbmQsIHNsYXZlX2Rldik7CkBAIC0yMDIxLDggKzIwMjQsNiBAQAogCS8qIHJlbGVhc2UgdGhlIHNsYXZlIGZyb20gaXRzIGJvbmQgKi8KIAlib25kX2RldGFjaF9zbGF2ZShib25kLCBzbGF2ZSk7CiAKLQlib25kX2NvbXB1dGVfZmVhdHVyZXMoYm9uZCk7Ci0KIAlpZiAoYm9uZC0+cHJpbWFyeV9zbGF2ZSA9PSBzbGF2ZSkKIAkJYm9uZC0+cHJpbWFyeV9zbGF2ZSA9IE5VTEw7CiAKQEAgLTIwNjYsMjQgKzIwNjcsMjMgQEAKIAkJICovCiAJCW1lbXNldChib25kX2Rldi0+ZGV2X2FkZHIsIDAsIGJvbmRfZGV2LT5hZGRyX2xlbik7CiAKLQkJaWYgKCFib25kLT52bGdycCkgewotCQkJYm9uZF9kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVkxBTl9DSEFMTEVOR0VEOwotCQl9IGVsc2UgeworCQlpZiAoYm9uZC0+dmxncnApIHsKIAkJCXByX3dhcm5pbmcoIiVzOiBXYXJuaW5nOiBjbGVhcmluZyBIVyBhZGRyZXNzIG9mICVzIHdoaWxlIGl0IHN0aWxsIGhhcyBWTEFOcy5cbiIsCiAJCQkJICAgYm9uZF9kZXYtPm5hbWUsIGJvbmRfZGV2LT5uYW1lKTsKIAkJCXByX3dhcm5pbmcoIiVzOiBXaGVuIHJlLWFkZGluZyBzbGF2ZXMsIG1ha2Ugc3VyZSB0aGUgYm9uZCdzIEhXIGFkZHJlc3MgbWF0Y2hlcyBpdHMgVkxBTnMnLlxuIiwKIAkJCQkgICBib25kX2Rldi0+bmFtZSk7CiAJCX0KLQl9IGVsc2UgaWYgKChib25kX2Rldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRCkgJiYKLQkJICAgIWJvbmRfaGFzX2NoYWxsZW5nZWRfc2xhdmVzKGJvbmQpKSB7Ci0JCXByX2luZm8oIiVzOiBsYXN0IFZMQU4gY2hhbGxlbmdlZCBzbGF2ZSAlcyBsZWZ0IGJvbmQgJXMuIFZMQU4gYmxvY2tpbmcgaXMgcmVtb3ZlZFxuIiwKLQkJCWJvbmRfZGV2LT5uYW1lLCBzbGF2ZV9kZXYtPm5hbWUsIGJvbmRfZGV2LT5uYW1lKTsKLQkJYm9uZF9kZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRDsKIAl9CiAKIAl3cml0ZV91bmxvY2tfYmgoJmJvbmQtPmxvY2spOwogCXVuYmxvY2tfbmV0cG9sbF90eCgpOwogCisJYm9uZF9jb21wdXRlX2ZlYXR1cmVzKGJvbmQpOworCWlmICghKGJvbmRfZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfVkxBTl9DSEFMTEVOR0VEKSAmJgorCSAgICAob2xkX2ZlYXR1cmVzICYgTkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQpKQorCQlwcl9pbmZvKCIlczogbGFzdCBWTEFOIGNoYWxsZW5nZWQgc2xhdmUgJXMgbGVmdCBib25kICVzLiBWTEFOIGJsb2NraW5nIGlzIHJlbW92ZWRcbiIsCisJCQlib25kX2Rldi0+bmFtZSwgc2xhdmVfZGV2LT5uYW1lLCBib25kX2Rldi0+bmFtZSk7CisKIAkvKiBtdXN0IGRvIHRoaXMgZnJvbSBvdXRzaWRlIGFueSBzcGlubG9ja3MgKi8KIAlib25kX2Rlc3Ryb3lfc2xhdmVfc3ltbGlua3MoYm9uZF9kZXYsIHNsYXZlX2Rldik7CiAKQEAgLTIyMDEsOCArMjIwMSw2IEBACiAJCQlib25kX2FsYl9kZWluaXRfc2xhdmUoYm9uZCwgc2xhdmUpOwogCQl9CiAKLQkJYm9uZF9jb21wdXRlX2ZlYXR1cmVzKGJvbmQpOwotCiAJCWJvbmRfZGVzdHJveV9zbGF2ZV9zeW1saW5rcyhib25kX2Rldiwgc2xhdmVfZGV2KTsKIAkJYm9uZF9kZWxfdmxhbnNfZnJvbV9zbGF2ZShib25kLCBzbGF2ZV9kZXYpOwogCkBAIC0yMjUxLDkgKzIyNDksNyBAQAogCSAqLwogCW1lbXNldChib25kX2Rldi0+ZGV2X2FkZHIsIDAsIGJvbmRfZGV2LT5hZGRyX2xlbik7CiAKLQlpZiAoIWJvbmQtPnZsZ3JwKSB7Ci0JCWJvbmRfZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRDsKLQl9IGVsc2UgeworCWlmIChib25kLT52bGdycCkgewogCQlwcl93YXJuaW5nKCIlczogV2FybmluZzogY2xlYXJpbmcgSFcgYWRkcmVzcyBvZiAlcyB3aGlsZSBpdCBzdGlsbCBoYXMgVkxBTnMuXG4iLAogCQkJICAgYm9uZF9kZXYtPm5hbWUsIGJvbmRfZGV2LT5uYW1lKTsKIAkJcHJfd2FybmluZygiJXM6IFdoZW4gcmUtYWRkaW5nIHNsYXZlcywgbWFrZSBzdXJlIHRoZSBib25kJ3MgSFcgYWRkcmVzcyBtYXRjaGVzIGl0cyBWTEFOcycuXG4iLApAQCAtMjI2NCw2ICsyMjYwLDkgQEAKIAogb3V0OgogCXdyaXRlX3VubG9ja19iaCgmYm9uZC0+bG9jayk7CisKKwlib25kX2NvbXB1dGVfZmVhdHVyZXMoYm9uZCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjQ5Myw3ICsyNDkyLDcgQEAKIAogCQkJYm9uZF91cGRhdGVfc3BlZWRfZHVwbGV4KHNsYXZlKTsKIAotCQkJcHJfaW5mbygiJXM6IGxpbmsgc3RhdHVzIGRlZmluaXRlbHkgdXAgZm9yIGludGVyZmFjZSAlcywgJWQgTWJwcyAlcyBkdXBsZXguXG4iLAorCQkJcHJfaW5mbygiJXM6IGxpbmsgc3RhdHVzIGRlZmluaXRlbHkgdXAgZm9yIGludGVyZmFjZSAlcywgJXUgTWJwcyAlcyBkdXBsZXguXG4iLAogCQkJCWJvbmQtPmRldi0+bmFtZSwgc2xhdmUtPmRldi0+bmFtZSwKIAkJCQlzbGF2ZS0+c3BlZWQsIHNsYXZlLT5kdXBsZXggPyAiZnVsbCIgOiAiaGFsZiIpOwogCkBAIC0yNTcwLDYgKzI1NjksNyBAQAogewogCXN0cnVjdCBib25kaW5nICpib25kID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBib25kaW5nLAogCQkJCQkgICAgbWlpX3dvcmsud29yayk7CisJYm9vbCBzaG91bGRfbm90aWZ5X3BlZXJzID0gZmFsc2U7CiAKIAlyZWFkX2xvY2soJmJvbmQtPmxvY2spOwogCWlmIChib25kLT5raWxsX3RpbWVycykKQEAgLTI1NzgsMTcgKzI1NzgsNyBAQAogCWlmIChib25kLT5zbGF2ZV9jbnQgPT0gMCkKIAkJZ290byByZV9hcm07CiAKLQlpZiAoYm9uZC0+c2VuZF9ncmF0X2FycCkgewotCQlyZWFkX2xvY2soJmJvbmQtPmN1cnJfc2xhdmVfbG9jayk7Ci0JCWJvbmRfc2VuZF9ncmF0dWl0b3VzX2FycChib25kKTsKLQkJcmVhZF91bmxvY2soJmJvbmQtPmN1cnJfc2xhdmVfbG9jayk7Ci0JfQotCi0JaWYgKGJvbmQtPnNlbmRfdW5zb2xfbmEpIHsKLQkJcmVhZF9sb2NrKCZib25kLT5jdXJyX3NsYXZlX2xvY2spOwotCQlib25kX3NlbmRfdW5zb2xpY2l0ZWRfbmEoYm9uZCk7Ci0JCXJlYWRfdW5sb2NrKCZib25kLT5jdXJyX3NsYXZlX2xvY2spOwotCX0KKwlzaG91bGRfbm90aWZ5X3BlZXJzID0gYm9uZF9zaG91bGRfbm90aWZ5X3BlZXJzKGJvbmQpOwogCiAJaWYgKGJvbmRfbWlpbW9uX2luc3BlY3QoYm9uZCkpIHsKIAkJcmVhZF91bmxvY2soJmJvbmQtPmxvY2spOwpAQCAtMjYwOCw2ICsyNTk4LDEyIEBACiAJCQkJICAgbXNlY3NfdG9famlmZmllcyhib25kLT5wYXJhbXMubWlpbW9uKSk7CiBvdXQ6CiAJcmVhZF91bmxvY2soJmJvbmQtPmxvY2spOworCisJaWYgKHNob3VsZF9ub3RpZnlfcGVlcnMpIHsKKwkJcnRubF9sb2NrKCk7CisJCW5ldGRldl9ib25kaW5nX2NoYW5nZShib25kLT5kZXYsIE5FVERFVl9OT1RJRllfUEVFUlMpOworCQlydG5sX3VubG9jaygpOworCX0KIH0KIAogc3RhdGljIF9fYmUzMiBib25kX2dsZWFuX2Rldl9pcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMjc1MSw0NCArMjc0Nyw2IEBACiAJfQogfQogCi0vKgotICogS2ljayBvdXQgYSBncmF0dWl0b3VzIEFSUCBmb3IgYW4gSVAgb24gdGhlIGJvbmRpbmcgbWFzdGVyIHBsdXMgb25lCi0gKiBmb3IgZWFjaCBWTEFOIGFib3ZlIHVzLgotICoKLSAqIENhbGxlciBtdXN0IGhvbGQgY3Vycl9zbGF2ZV9sb2NrIGZvciByZWFkIG9yIGJldHRlcgotICovCi1zdGF0aWMgdm9pZCBib25kX3NlbmRfZ3JhdHVpdG91c19hcnAoc3RydWN0IGJvbmRpbmcgKmJvbmQpCi17Ci0Jc3RydWN0IHNsYXZlICpzbGF2ZSA9IGJvbmQtPmN1cnJfYWN0aXZlX3NsYXZlOwotCXN0cnVjdCB2bGFuX2VudHJ5ICp2bGFuOwotCXN0cnVjdCBuZXRfZGV2aWNlICp2bGFuX2RldjsKLQotCXByX2RlYnVnKCJib25kX3NlbmRfZ3JhdF9hcnA6IGJvbmQgJXMgc2xhdmUgJXNcbiIsCi0JCSBib25kLT5kZXYtPm5hbWUsIHNsYXZlID8gc2xhdmUtPmRldi0+bmFtZSA6ICJOVUxMIik7Ci0KLQlpZiAoIXNsYXZlIHx8ICFib25kLT5zZW5kX2dyYXRfYXJwIHx8Ci0JICAgIHRlc3RfYml0KF9fTElOS19TVEFURV9MSU5LV0FUQ0hfUEVORElORywgJnNsYXZlLT5kZXYtPnN0YXRlKSkKLQkJcmV0dXJuOwotCi0JYm9uZC0+c2VuZF9ncmF0X2FycC0tOwotCi0JaWYgKGJvbmQtPm1hc3Rlcl9pcCkgewotCQlib25kX2FycF9zZW5kKHNsYXZlLT5kZXYsIEFSUE9QX1JFUExZLCBib25kLT5tYXN0ZXJfaXAsCi0JCQkJYm9uZC0+bWFzdGVyX2lwLCAwKTsKLQl9Ci0KLQlpZiAoIWJvbmQtPnZsZ3JwKQotCQlyZXR1cm47Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZsYW4sICZib25kLT52bGFuX2xpc3QsIHZsYW5fbGlzdCkgewotCQl2bGFuX2RldiA9IHZsYW5fZ3JvdXBfZ2V0X2RldmljZShib25kLT52bGdycCwgdmxhbi0+dmxhbl9pZCk7Ci0JCWlmICh2bGFuLT52bGFuX2lwKSB7Ci0JCQlib25kX2FycF9zZW5kKHNsYXZlLT5kZXYsIEFSUE9QX1JFUExZLCB2bGFuLT52bGFuX2lwLAotCQkJCSAgICAgIHZsYW4tPnZsYW5faXAsIHZsYW4tPnZsYW5faWQpOwotCQl9Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBib25kX3ZhbGlkYXRlX2FycChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSwgX19iZTMyIHNpcCwgX19iZTMyIHRpcCkKIHsKIAlpbnQgaTsKQEAgLTI4MDYsNDggKzI3NjQsMjYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgYm9uZF9hcnBfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKK3N0YXRpYyB2b2lkIGJvbmRfYXJwX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCwKKwkJCSBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKQogewogCXN0cnVjdCBhcnBoZHIgKmFycDsKLQlzdHJ1Y3Qgc2xhdmUgKnNsYXZlOwotCXN0cnVjdCBib25kaW5nICpib25kOwogCXVuc2lnbmVkIGNoYXIgKmFycF9wdHI7CiAJX19iZTMyIHNpcCwgdGlwOwogCi0JaWYgKGRldi0+cHJpdl9mbGFncyAmIElGRl84MDJfMVFfVkxBTikgewotCQkvKgotCQkgKiBXaGVuIHVzaW5nIFZMQU5TIGFuZCBib25kaW5nLCBkZXYgYW5kIG9yaXZfZGV2IG1heSBiZQotCQkgKiBpbmNvcnJlY3QgaWYgdGhlIHBoeXNpY2FsIGludGVyZmFjZSBzdXBwb3J0cyBWTEFOCi0JCSAqIGFjY2VsZXJhdGlvbi4gIFdpdGggdGhpcyBjaGFuZ2UgQVJQIHZhbGlkYXRpb24gbm93Ci0JCSAqIHdvcmtzIGZvciBob3N0cyBvbmx5IHJlYWNoYWJsZSBvbiB0aGUgVkxBTiBpbnRlcmZhY2UuCi0JCSAqLwotCQlkZXYgPSB2bGFuX2Rldl9yZWFsX2RldihkZXYpOwotCQlvcmlnX2RldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KGRldl9uZXQoc2tiLT5kZXYpLHNrYi0+c2tiX2lpZik7Ci0JfQorCWlmIChza2ItPnByb3RvY29sICE9IF9fY3B1X3RvX2JlMTYoRVRIX1BfQVJQKSkKKwkJcmV0dXJuOwogCi0JaWYgKCEoZGV2LT5wcml2X2ZsYWdzICYgSUZGX0JPTkRJTkcpIHx8ICEoZGV2LT5mbGFncyAmIElGRl9NQVNURVIpKQotCQlnb3RvIG91dDsKLQotCWJvbmQgPSBuZXRkZXZfcHJpdihkZXYpOwogCXJlYWRfbG9jaygmYm9uZC0+bG9jayk7CiAKLQlwcl9kZWJ1ZygiYm9uZF9hcnBfcmN2OiBib25kICVzIHNrYi0+ZGV2ICVzIG9yaWdfZGV2ICVzXG4iLAotCQkgYm9uZC0+ZGV2LT5uYW1lLCBza2ItPmRldiA/IHNrYi0+ZGV2LT5uYW1lIDogIk5VTEwiLAotCQkgb3JpZ19kZXYgPyBvcmlnX2Rldi0+bmFtZSA6ICJOVUxMIik7CisJcHJfZGVidWcoImJvbmRfYXJwX3JjdjogYm9uZCAlcyBza2ItPmRldiAlc1xuIiwKKwkJIGJvbmQtPmRldi0+bmFtZSwgc2tiLT5kZXYtPm5hbWUpOwogCi0Jc2xhdmUgPSBib25kX2dldF9zbGF2ZV9ieV9kZXYoYm9uZCwgb3JpZ19kZXYpOwotCWlmICghc2xhdmUgfHwgIXNsYXZlX2RvX2FycF92YWxpZGF0ZShib25kLCBzbGF2ZSkpCi0JCWdvdG8gb3V0X3VubG9jazsKLQotCXNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpOwotCWlmICghc2tiKQotCQlnb3RvIG91dF91bmxvY2s7Ci0KLQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBhcnBfaGRyX2xlbihkZXYpKSkKKwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBhcnBfaGRyX2xlbihib25kLT5kZXYpKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCiAJYXJwID0gYXJwX2hkcihza2IpOwotCWlmIChhcnAtPmFyX2hsbiAhPSBkZXYtPmFkZHJfbGVuIHx8CisJaWYgKGFycC0+YXJfaGxuICE9IGJvbmQtPmRldi0+YWRkcl9sZW4gfHwKIAkgICAgc2tiLT5wa3RfdHlwZSA9PSBQQUNLRVRfT1RIRVJIT1NUIHx8CiAJICAgIHNrYi0+cGt0X3R5cGUgPT0gUEFDS0VUX0xPT1BCQUNLIHx8CiAJICAgIGFycC0+YXJfaHJkICE9IGh0b25zKEFSUEhSRF9FVEhFUikgfHwKQEAgLTI4NTYsOSArMjc5Miw5IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAogCWFycF9wdHIgPSAodW5zaWduZWQgY2hhciAqKShhcnAgKyAxKTsKLQlhcnBfcHRyICs9IGRldi0+YWRkcl9sZW47CisJYXJwX3B0ciArPSBib25kLT5kZXYtPmFkZHJfbGVuOwogCW1lbWNweSgmc2lwLCBhcnBfcHRyLCA0KTsKLQlhcnBfcHRyICs9IDQgKyBkZXYtPmFkZHJfbGVuOworCWFycF9wdHIgKz0gNCArIGJvbmQtPmRldi0+YWRkcl9sZW47CiAJbWVtY3B5KCZ0aXAsIGFycF9wdHIsIDQpOwogCiAJcHJfZGVidWcoImJvbmRfYXJwX3JjdjogJXMgJXMvJWQgYXYgJWQgc3YgJWQgc2lwICVwSTQgdGlwICVwSTRcbiIsCkBAIC0yODgxLDkgKzI4MTcsNiBAQAogCiBvdXRfdW5sb2NrOgogCXJlYWRfdW5sb2NrKCZib25kLT5sb2NrKTsKLW91dDoKLQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIE5FVF9SWF9TVUNDRVNTOwogfQogCiAvKgpAQCAtMzI0Myw2ICszMTc2LDcgQEAKIHsKIAlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYm9uZGluZywKIAkJCQkJICAgIGFycF93b3JrLndvcmspOworCWJvb2wgc2hvdWxkX25vdGlmeV9wZWVycyA9IGZhbHNlOwogCWludCBkZWx0YV9pbl90aWNrczsKIAogCXJlYWRfbG9jaygmYm9uZC0+bG9jayk7CkBAIC0zMjU1LDE3ICszMTg5LDcgQEAKIAlpZiAoYm9uZC0+c2xhdmVfY250ID09IDApCiAJCWdvdG8gcmVfYXJtOwogCi0JaWYgKGJvbmQtPnNlbmRfZ3JhdF9hcnApIHsKLQkJcmVhZF9sb2NrKCZib25kLT5jdXJyX3NsYXZlX2xvY2spOwotCQlib25kX3NlbmRfZ3JhdHVpdG91c19hcnAoYm9uZCk7Ci0JCXJlYWRfdW5sb2NrKCZib25kLT5jdXJyX3NsYXZlX2xvY2spOwotCX0KLQotCWlmIChib25kLT5zZW5kX3Vuc29sX25hKSB7Ci0JCXJlYWRfbG9jaygmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKTsKLQkJYm9uZF9zZW5kX3Vuc29saWNpdGVkX25hKGJvbmQpOwotCQlyZWFkX3VubG9jaygmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKTsKLQl9CisJc2hvdWxkX25vdGlmeV9wZWVycyA9IGJvbmRfc2hvdWxkX25vdGlmeV9wZWVycyhib25kKTsKIAogCWlmIChib25kX2FiX2FycF9pbnNwZWN0KGJvbmQsIGRlbHRhX2luX3RpY2tzKSkgewogCQlyZWFkX3VubG9jaygmYm9uZC0+bG9jayk7CkBAIC0zMjg2LDYgKzMyMTAsMTIgQEAKIAkJcXVldWVfZGVsYXllZF93b3JrKGJvbmQtPndxLCAmYm9uZC0+YXJwX3dvcmssIGRlbHRhX2luX3RpY2tzKTsKIG91dDoKIAlyZWFkX3VubG9jaygmYm9uZC0+bG9jayk7CisKKwlpZiAoc2hvdWxkX25vdGlmeV9wZWVycykgeworCQlydG5sX2xvY2soKTsKKwkJbmV0ZGV2X2JvbmRpbmdfY2hhbmdlKGJvbmQtPmRldiwgTkVUREVWX05PVElGWV9QRUVSUyk7CisJCXJ0bmxfdW5sb2NrKCk7CisJfQogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG5ldGRldiBldmVudCBoYW5kbGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0zMzM5LDggKzMyNjksOCBAQAogCiAJCQlzbGF2ZSA9IGJvbmRfZ2V0X3NsYXZlX2J5X2Rldihib25kLCBzbGF2ZV9kZXYpOwogCQkJaWYgKHNsYXZlKSB7Ci0JCQkJdTE2IG9sZF9zcGVlZCA9IHNsYXZlLT5zcGVlZDsKLQkJCQl1MTYgb2xkX2R1cGxleCA9IHNsYXZlLT5kdXBsZXg7CisJCQkJdTMyIG9sZF9zcGVlZCA9IHNsYXZlLT5zcGVlZDsKKwkJCQl1OCAgb2xkX2R1cGxleCA9IHNsYXZlLT5kdXBsZXg7CiAKIAkJCQlib25kX3VwZGF0ZV9zcGVlZF9kdXBsZXgoc2xhdmUpOwogCkBAIC0zNDgyLDQ4ICszNDEyLDYgQEAKIAkubm90aWZpZXJfY2FsbCA9IGJvbmRfaW5ldGFkZHJfZXZlbnQsCiB9OwogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBhY2tldCB0eXBlIGhhbmRsaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIHJlZ2lzdGVyIHRvIHJlY2VpdmUgbGFjcGR1cyBvbiBhIGJvbmQgKi8KLXN0YXRpYyB2b2lkIGJvbmRfcmVnaXN0ZXJfbGFjcGR1KHN0cnVjdCBib25kaW5nICpib25kKQotewotCXN0cnVjdCBwYWNrZXRfdHlwZSAqcGtfdHlwZSA9ICYoQk9ORF9BRF9JTkZPKGJvbmQpLmFkX3BrdF90eXBlKTsKLQotCS8qIGluaXRpYWxpemUgcGFja2V0IHR5cGUgKi8KLQlwa190eXBlLT50eXBlID0gUEtUX1RZUEVfTEFDUERVOwotCXBrX3R5cGUtPmRldiA9IGJvbmQtPmRldjsKLQlwa190eXBlLT5mdW5jID0gYm9uZF8zYWRfbGFjcGR1X3JlY3Y7Ci0KLQlkZXZfYWRkX3BhY2socGtfdHlwZSk7Ci19Ci0KLS8qIHVucmVnaXN0ZXIgdG8gcmVjZWl2ZSBsYWNwZHVzIG9uIGEgYm9uZCAqLwotc3RhdGljIHZvaWQgYm9uZF91bnJlZ2lzdGVyX2xhY3BkdShzdHJ1Y3QgYm9uZGluZyAqYm9uZCkKLXsKLQlkZXZfcmVtb3ZlX3BhY2soJihCT05EX0FEX0lORk8oYm9uZCkuYWRfcGt0X3R5cGUpKTsKLX0KLQotdm9pZCBib25kX3JlZ2lzdGVyX2FycChzdHJ1Y3QgYm9uZGluZyAqYm9uZCkKLXsKLQlzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0ID0gJmJvbmQtPmFycF9tb25fcHQ7Ci0KLQlpZiAocHQtPnR5cGUpCi0JCXJldHVybjsKLQotCXB0LT50eXBlID0gaHRvbnMoRVRIX1BfQVJQKTsKLQlwdC0+ZGV2ID0gYm9uZC0+ZGV2OwotCXB0LT5mdW5jID0gYm9uZF9hcnBfcmN2OwotCWRldl9hZGRfcGFjayhwdCk7Ci19Ci0KLXZvaWQgYm9uZF91bnJlZ2lzdGVyX2FycChzdHJ1Y3QgYm9uZGluZyAqYm9uZCkKLXsKLQlzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0ID0gJmJvbmQtPmFycF9tb25fcHQ7Ci0KLQlkZXZfcmVtb3ZlX3BhY2socHQpOwotCXB0LT50eXBlID0gMDsKLX0KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhhc2hpbmcgUG9saWNpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKgpAQCAtMzYxNywxNCArMzUwNSwxNCBAQAogCiAJCXF1ZXVlX2RlbGF5ZWRfd29yayhib25kLT53cSwgJmJvbmQtPmFycF93b3JrLCAwKTsKIAkJaWYgKGJvbmQtPnBhcmFtcy5hcnBfdmFsaWRhdGUpCi0JCQlib25kX3JlZ2lzdGVyX2FycChib25kKTsKKwkJCWJvbmQtPnJlY3ZfcHJvYmUgPSBib25kX2FycF9yY3Y7CiAJfQogCiAJaWYgKGJvbmQtPnBhcmFtcy5tb2RlID09IEJPTkRfTU9ERV84MDIzQUQpIHsKIAkJSU5JVF9ERUxBWUVEX1dPUksoJmJvbmQtPmFkX3dvcmssIGJvbmRfM2FkX3N0YXRlX21hY2hpbmVfaGFuZGxlcik7CiAJCXF1ZXVlX2RlbGF5ZWRfd29yayhib25kLT53cSwgJmJvbmQtPmFkX3dvcmssIDApOwogCQkvKiByZWdpc3RlciB0byByZWNlaXZlIExBQ1BEVXMgKi8KLQkJYm9uZF9yZWdpc3Rlcl9sYWNwZHUoYm9uZCk7CisJCWJvbmQtPnJlY3ZfcHJvYmUgPSBib25kXzNhZF9sYWNwZHVfcmVjdjsKIAkJYm9uZF8zYWRfaW5pdGlhdGVfYWdnX3NlbGVjdGlvbihib25kLCAxKTsKIAl9CiAKQEAgLTM2MzUsMTggKzM1MjMsOSBAQAogewogCXN0cnVjdCBib25kaW5nICpib25kID0gbmV0ZGV2X3ByaXYoYm9uZF9kZXYpOwogCi0JaWYgKGJvbmQtPnBhcmFtcy5tb2RlID09IEJPTkRfTU9ERV84MDIzQUQpIHsKLQkJLyogVW5yZWdpc3RlciB0aGUgcmVjZWl2ZSBvZiBMQUNQRFVzICovCi0JCWJvbmRfdW5yZWdpc3Rlcl9sYWNwZHUoYm9uZCk7Ci0JfQotCi0JaWYgKGJvbmQtPnBhcmFtcy5hcnBfdmFsaWRhdGUpCi0JCWJvbmRfdW5yZWdpc3Rlcl9hcnAoYm9uZCk7Ci0KIAl3cml0ZV9sb2NrX2JoKCZib25kLT5sb2NrKTsKIAotCWJvbmQtPnNlbmRfZ3JhdF9hcnAgPSAwOwotCWJvbmQtPnNlbmRfdW5zb2xfbmEgPSAwOworCWJvbmQtPnNlbmRfcGVlcl9ub3RpZiA9IDA7CiAKIAkvKiBzaWduYWwgdGltZXJzIG5vdCB0byByZS1hcm0gKi8KIAlib25kLT5raWxsX3RpbWVycyA9IDE7CkBAIC0zNjgyLDYgKzM1NjEsNyBAQAogCQkgKi8KIAkJYm9uZF9hbGJfZGVpbml0aWFsaXplKGJvbmQpOwogCX0KKwlib25kLT5yZWN2X3Byb2JlID0gTlVMTDsKIAogCXJldHVybiAwOwogfQpAQCAtNDEwNSwxMCArMzk4NSw2IEBACiAJaW50IGksIHNsYXZlX25vLCByZXMgPSAxOwogCXN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7CiAKLQlyZWFkX2xvY2soJmJvbmQtPmxvY2spOwotCi0JaWYgKCFCT05EX0lTX09LKGJvbmQpKQotCQlnb3RvIG91dDsKIAkvKgogCSAqIFN0YXJ0IHdpdGggdGhlIGN1cnJfYWN0aXZlX3NsYXZlIHRoYXQgam9pbmVkIHRoZSBib25kIGFzIHRoZQogCSAqIGRlZmF1bHQgZm9yIHNlbmRpbmcgSUdNUCB0cmFmZmljLiAgRm9yIGZhaWxvdmVyIHB1cnBvc2VzIG9uZQpAQCAtNDE1NSw3ICs0MDMxLDcgQEAKIAkJLyogbm8gc3VpdGFibGUgaW50ZXJmYWNlLCBmcmFtZSBub3Qgc2VudCAqLwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJfQotCXJlYWRfdW5sb2NrKCZib25kLT5sb2NrKTsKKwogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKQEAgLTQxNjksMjQgKzQwNDUsMTggQEAKIAlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IG5ldGRldl9wcml2KGJvbmRfZGV2KTsKIAlpbnQgcmVzID0gMTsKIAotCXJlYWRfbG9jaygmYm9uZC0+bG9jayk7CiAJcmVhZF9sb2NrKCZib25kLT5jdXJyX3NsYXZlX2xvY2spOwogCi0JaWYgKCFCT05EX0lTX09LKGJvbmQpKQotCQlnb3RvIG91dDsKKwlpZiAoYm9uZC0+Y3Vycl9hY3RpdmVfc2xhdmUpCisJCXJlcyA9IGJvbmRfZGV2X3F1ZXVlX3htaXQoYm9uZCwgc2tiLAorCQkJYm9uZC0+Y3Vycl9hY3RpdmVfc2xhdmUtPmRldik7CiAKLQlpZiAoIWJvbmQtPmN1cnJfYWN0aXZlX3NsYXZlKQotCQlnb3RvIG91dDsKLQotCXJlcyA9IGJvbmRfZGV2X3F1ZXVlX3htaXQoYm9uZCwgc2tiLCBib25kLT5jdXJyX2FjdGl2ZV9zbGF2ZS0+ZGV2KTsKLQotb3V0OgogCWlmIChyZXMpCiAJCS8qIG5vIHN1aXRhYmxlIGludGVyZmFjZSwgZnJhbWUgbm90IHNlbnQgKi8KIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCiAJcmVhZF91bmxvY2soJmJvbmQtPmN1cnJfc2xhdmVfbG9jayk7Ci0JcmVhZF91bmxvY2soJmJvbmQtPmxvY2spOworCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIApAQCAtNDIwMywxMSArNDA3Myw2IEBACiAJaW50IGk7CiAJaW50IHJlcyA9IDE7CiAKLQlyZWFkX2xvY2soJmJvbmQtPmxvY2spOwotCi0JaWYgKCFCT05EX0lTX09LKGJvbmQpKQotCQlnb3RvIG91dDsKLQogCXNsYXZlX25vID0gYm9uZC0+eG1pdF9oYXNoX3BvbGljeShza2IsIGJvbmQtPnNsYXZlX2NudCk7CiAKIAlib25kX2Zvcl9lYWNoX3NsYXZlKGJvbmQsIHNsYXZlLCBpKSB7CkBAIC00MjI3LDEyICs0MDkyLDExIEBACiAJCX0KIAl9CiAKLW91dDoKIAlpZiAocmVzKSB7CiAJCS8qIG5vIHN1aXRhYmxlIGludGVyZmFjZSwgZnJhbWUgbm90IHNlbnQgKi8KIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCX0KLQlyZWFkX3VubG9jaygmYm9uZC0+bG9jayk7CisKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCkBAIC00MjQ3LDExICs0MTExLDYgQEAKIAlpbnQgaTsKIAlpbnQgcmVzID0gMTsKIAotCXJlYWRfbG9jaygmYm9uZC0+bG9jayk7Ci0KLQlpZiAoIUJPTkRfSVNfT0soYm9uZCkpCi0JCWdvdG8gb3V0OwotCiAJcmVhZF9sb2NrKCZib25kLT5jdXJyX3NsYXZlX2xvY2spOwogCXN0YXJ0X2F0ID0gYm9uZC0+Y3Vycl9hY3RpdmVfc2xhdmU7CiAJcmVhZF91bmxvY2soJmJvbmQtPmN1cnJfc2xhdmVfbG9jayk7CkBAIC00MjkwLDcgKzQxNDksNiBAQAogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKIAkvKiBmcmFtZSBzZW50IHRvIGFsbCBzdWl0YWJsZSBpbnRlcmZhY2VzICovCi0JcmVhZF91bmxvY2soJmJvbmQtPmxvY2spOwogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKQEAgLTQzMjIsMTAgKzQxODAsOCBAQAogCXN0cnVjdCBzbGF2ZSAqc2xhdmUgPSBOVUxMOwogCXN0cnVjdCBzbGF2ZSAqY2hlY2tfc2xhdmU7CiAKLQlyZWFkX2xvY2soJmJvbmQtPmxvY2spOwotCi0JaWYgKCFCT05EX0lTX09LKGJvbmQpIHx8ICFza2ItPnF1ZXVlX21hcHBpbmcpCi0JCWdvdG8gb3V0OworCWlmICghc2tiLT5xdWV1ZV9tYXBwaW5nKQorCQlyZXR1cm4gMTsKIAogCS8qIEZpbmQgb3V0IGlmIGFueSBzbGF2ZXMgaGF2ZSB0aGUgc2FtZSBtYXBwaW5nIGFzIHRoaXMgc2tiLiAqLwogCWJvbmRfZm9yX2VhY2hfc2xhdmUoYm9uZCwgY2hlY2tfc2xhdmUsIGkpIHsKQEAgLTQzNDEsOCArNDE5Nyw2IEBACiAJCXJlcyA9IGJvbmRfZGV2X3F1ZXVlX3htaXQoYm9uZCwgc2tiLCBzbGF2ZS0+ZGV2KTsKIAl9CiAKLW91dDoKLQlyZWFkX3VubG9jaygmYm9uZC0+bG9jayk7CiAJcmV0dXJuIHJlczsKIH0KIApAQCAtNDM1NywyNCArNDIxMSwxNyBAQAogCXUxNiB0eHEgPSBza2JfcnhfcXVldWVfcmVjb3JkZWQoc2tiKSA/IHNrYl9nZXRfcnhfcXVldWUoc2tiKSA6IDA7CiAKIAlpZiAodW5saWtlbHkodHhxID49IGRldi0+cmVhbF9udW1fdHhfcXVldWVzKSkgewotCQlkbworCQlkbyB7CiAJCQl0eHEgLT0gZGV2LT5yZWFsX251bV90eF9xdWV1ZXM7Ci0JCXdoaWxlICh0eHEgPj0gZGV2LT5yZWFsX251bV90eF9xdWV1ZXMpOworCQl9IHdoaWxlICh0eHEgPj0gZGV2LT5yZWFsX251bV90eF9xdWV1ZXMpOwogCX0KIAlyZXR1cm4gdHhxOwogfQogCi1zdGF0aWMgbmV0ZGV2X3R4X3QgYm9uZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgX19ib25kX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IG5ldGRldl9wcml2KGRldik7CiAKLQkvKgotCSAqIElmIHdlIHJpc2sgZGVhZGxvY2sgZnJvbSB0cmFuc21pdHRpbmcgdGhpcyBpbiB0aGUKLQkgKiBuZXRwb2xsIHBhdGgsIHRlbGwgbmV0cG9sbCB0byBxdWV1ZSB0aGUgZnJhbWUgZm9yIGxhdGVyIHR4Ci0JICovCi0JaWYgKGlzX25ldHBvbGxfdHhfYmxvY2tlZChkZXYpKQotCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7Ci0KIAlpZiAoVFhfUVVFVUVfT1ZFUlJJREUoYm9uZC0+cGFyYW1zLm1vZGUpKSB7CiAJCWlmICghYm9uZF9zbGF2ZV9vdmVycmlkZShib25kLCBza2IpKQogCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKQEAgLTQ0MDQsNiArNDI1MSwyOSBAQAogCX0KIH0KIAorc3RhdGljIG5ldGRldl90eF90IGJvbmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBib25kaW5nICpib25kID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwluZXRkZXZfdHhfdCByZXQgPSBORVRERVZfVFhfT0s7CisKKwkvKgorCSAqIElmIHdlIHJpc2sgZGVhZGxvY2sgZnJvbSB0cmFuc21pdHRpbmcgdGhpcyBpbiB0aGUKKwkgKiBuZXRwb2xsIHBhdGgsIHRlbGwgbmV0cG9sbCB0byBxdWV1ZSB0aGUgZnJhbWUgZm9yIGxhdGVyIHR4CisJICovCisJaWYgKGlzX25ldHBvbGxfdHhfYmxvY2tlZChkZXYpKQorCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisKKwlyZWFkX2xvY2soJmJvbmQtPmxvY2spOworCisJaWYgKGJvbmQtPnNsYXZlX2NudCkKKwkJcmV0ID0gX19ib25kX3N0YXJ0X3htaXQoc2tiLCBkZXYpOworCWVsc2UKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCisJcmVhZF91bmxvY2soJmJvbmQtPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KIAogLyoKICAqIHNldCBib25kIG1vZGUgc3BlY2lmaWMgbmV0IGRldmljZSBvcGVyYXRpb25zCkBAIC00NDQ4LDExICs0MzE4LDYgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYm9uZF9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JCT0gYm9uZF9ldGh0b29sX2dldF9kcnZpbmZvLAogCS5nZXRfbGluawkJPSBldGh0b29sX29wX2dldF9saW5rLAotCS5nZXRfdHhfY3N1bQkJPSBldGh0b29sX29wX2dldF90eF9jc3VtLAotCS5nZXRfc2cJCQk9IGV0aHRvb2xfb3BfZ2V0X3NnLAotCS5nZXRfdHNvCQk9IGV0aHRvb2xfb3BfZ2V0X3RzbywKLQkuZ2V0X3VmbwkJPSBldGh0b29sX29wX2dldF91Zm8sCi0JLmdldF9mbGFncwkJPSBldGh0b29sX29wX2dldF9mbGFncywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYm9uZF9uZXRkZXZfb3BzID0gewpAQCAtNDQ3OCw2ICs0MzQzLDcgQEAKICNlbmRpZgogCS5uZG9fYWRkX3NsYXZlCQk9IGJvbmRfZW5zbGF2ZSwKIAkubmRvX2RlbF9zbGF2ZQkJPSBib25kX3JlbGVhc2UsCisJLm5kb19maXhfZmVhdHVyZXMJPSBib25kX2ZpeF9mZWF0dXJlcywKIH07CiAKIHN0YXRpYyB2b2lkIGJvbmRfZGVzdHJ1Y3RvcihzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpCkBAIC00NTMzLDE0ICs0Mzk5LDE0IEBACiAJICogd2hlbiB0aGVyZSBhcmUgc2xhdmVzIHRoYXQgYXJlIG5vdCBodyBhY2NlbAogCSAqIGNhcGFibGUKIAkgKi8KLQlib25kX2Rldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfSFdfVkxBTl9UWCB8Ci0JCQkgICAgICAgTkVUSUZfRl9IV19WTEFOX1JYIHwKLQkJCSAgICAgICBORVRJRl9GX0hXX1ZMQU5fRklMVEVSKTsKIAotCS8qIEJ5IGRlZmF1bHQsIHdlIGVuYWJsZSBHUk8gb24gYm9uZGluZyBkZXZpY2VzLgotCSAqIEFjdHVhbCBzdXBwb3J0IHJlcXVpcmVzIGxvd2xldmVsIGRyaXZlcnMgYXJlIEdSTyByZWFkeS4KLQkgKi8KLQlib25kX2Rldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9HUk87CisJYm9uZF9kZXYtPmh3X2ZlYXR1cmVzID0gQk9ORF9WTEFOX0ZFQVRVUkVTIHwKKwkJCQlORVRJRl9GX0hXX1ZMQU5fVFggfAorCQkJCU5FVElGX0ZfSFdfVkxBTl9SWCB8CisJCQkJTkVUSUZfRl9IV19WTEFOX0ZJTFRFUjsKKworCWJvbmRfZGV2LT5od19mZWF0dXJlcyAmPSB+KE5FVElGX0ZfQUxMX0NTVU0gJiB+TkVUSUZfRl9OT19DU1VNKTsKKwlib25kX2Rldi0+ZmVhdHVyZXMgfD0gYm9uZF9kZXYtPmh3X2ZlYXR1cmVzOwogfQogCiBzdGF0aWMgdm9pZCBib25kX3dvcmtfY2FuY2VsX2FsbChzdHJ1Y3QgYm9uZGluZyAqYm9uZCkKQEAgLTQ3MjQsMTYgKzQ1OTAsMTAgQEAKIAkJdXNlX2NhcnJpZXIgPSAxOwogCX0KIAotCWlmIChudW1fZ3JhdF9hcnAgPCAwIHx8IG51bV9ncmF0X2FycCA+IDI1NSkgewotCQlwcl93YXJuaW5nKCJXYXJuaW5nOiBudW1fZ3JhdF9hcnAgKCVkKSBub3QgaW4gcmFuZ2UgMC0yNTUgc28gaXQgd2FzIHJlc2V0IHRvIDFcbiIsCi0JCQkgICBudW1fZ3JhdF9hcnApOwotCQludW1fZ3JhdF9hcnAgPSAxOwotCX0KLQotCWlmIChudW1fdW5zb2xfbmEgPCAwIHx8IG51bV91bnNvbF9uYSA+IDI1NSkgewotCQlwcl93YXJuaW5nKCJXYXJuaW5nOiBudW1fdW5zb2xfbmEgKCVkKSBub3QgaW4gcmFuZ2UgMC0yNTUgc28gaXQgd2FzIHJlc2V0IHRvIDFcbiIsCi0JCQkgICBudW1fdW5zb2xfbmEpOwotCQludW1fdW5zb2xfbmEgPSAxOworCWlmIChudW1fcGVlcl9ub3RpZiA8IDAgfHwgbnVtX3BlZXJfbm90aWYgPiAyNTUpIHsKKwkJcHJfd2FybmluZygiV2FybmluZzogbnVtX2dyYXRfYXJwL251bV91bnNvbF9uYSAoJWQpIG5vdCBpbiByYW5nZSAwLTI1NSBzbyBpdCB3YXMgcmVzZXQgdG8gMVxuIiwKKwkJCSAgIG51bV9wZWVyX25vdGlmKTsKKwkJbnVtX3BlZXJfbm90aWYgPSAxOwogCX0KIAogCS8qIHJlc2V0IHZhbHVlcyBmb3IgODAyLjNhZCAqLwpAQCAtNDkyNSw4ICs0Nzg1LDcgQEAKIAlwYXJhbXMtPm1vZGUgPSBib25kX21vZGU7CiAJcGFyYW1zLT54bWl0X3BvbGljeSA9IHhtaXRfaGFzaHR5cGU7CiAJcGFyYW1zLT5taWltb24gPSBtaWltb247Ci0JcGFyYW1zLT5udW1fZ3JhdF9hcnAgPSBudW1fZ3JhdF9hcnA7Ci0JcGFyYW1zLT5udW1fdW5zb2xfbmEgPSBudW1fdW5zb2xfbmE7CisJcGFyYW1zLT5udW1fcGVlcl9ub3RpZiA9IG51bV9wZWVyX25vdGlmOwogCXBhcmFtcy0+YXJwX2ludGVydmFsID0gYXJwX2ludGVydmFsOwogCXBhcmFtcy0+YXJwX3ZhbGlkYXRlID0gYXJwX3ZhbGlkYXRlX3ZhbHVlOwogCXBhcmFtcy0+dXBkZWxheSA9IHVwZGVsYXk7CkBAIC01MDI1LDggKzQ4ODQsOSBAQAogCiAJcnRubF9sb2NrKCk7CiAKLQlib25kX2RldiA9IGFsbG9jX25ldGRldl9tcShzaXplb2Yoc3RydWN0IGJvbmRpbmcpLCBuYW1lID8gbmFtZSA6ICIiLAotCQkJCWJvbmRfc2V0dXAsIHR4X3F1ZXVlcyk7CisJYm9uZF9kZXYgPSBhbGxvY19uZXRkZXZfbXEoc2l6ZW9mKHN0cnVjdCBib25kaW5nKSwKKwkJCQkgICBuYW1lID8gbmFtZSA6ICJib25kJWQiLAorCQkJCSAgIGJvbmRfc2V0dXAsIHR4X3F1ZXVlcyk7CiAJaWYgKCFib25kX2RldikgewogCQlwcl9lcnIoIiVzOiBlZWshIGNhbid0IGFsbG9jIG5ldGRldiFcbiIsIG5hbWUpOwogCQlydG5sX3VubG9jaygpOwpAQCAtNTAzNiwyNiArNDg5NiwxMCBAQAogCWRldl9uZXRfc2V0KGJvbmRfZGV2LCBuZXQpOwogCWJvbmRfZGV2LT5ydG5sX2xpbmtfb3BzID0gJmJvbmRfbGlua19vcHM7CiAKLQlpZiAoIW5hbWUpIHsKLQkJcmVzID0gZGV2X2FsbG9jX25hbWUoYm9uZF9kZXYsICJib25kJWQiKTsKLQkJaWYgKHJlcyA8IDApCi0JCQlnb3RvIG91dDsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBJZiB3ZSdyZSBnaXZlbiBhIG5hbWUgdG8gcmVnaXN0ZXIKLQkJICogd2UgbmVlZCB0byBlbnN1cmUgdGhhdCBpdHMgbm90IGFscmVhZHkKLQkJICogcmVnaXN0ZXJlZAotCQkgKi8KLQkJcmVzID0gLUVFWElTVDsKLQkJaWYgKF9fZGV2X2dldF9ieV9uYW1lKG5ldCwgbmFtZSkgIT0gTlVMTCkKLQkJCWdvdG8gb3V0OwotCX0KLQogCXJlcyA9IHJlZ2lzdGVyX25ldGRldmljZShib25kX2Rldik7CiAKIAluZXRpZl9jYXJyaWVyX29mZihib25kX2Rldik7CiAKLW91dDoKIAlydG5sX3VubG9jaygpOwogCWlmIChyZXMgPCAwKQogCQlib25kX2Rlc3RydWN0b3IoYm9uZF9kZXYpOwpAQCAtNTEyMSw3ICs0OTY1LDYgQEAKIAogCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmYm9uZF9uZXRkZXZfbm90aWZpZXIpOwogCXJlZ2lzdGVyX2luZXRhZGRyX25vdGlmaWVyKCZib25kX2luZXRhZGRyX25vdGlmaWVyKTsKLQlib25kX3JlZ2lzdGVyX2lwdjZfbm90aWZpZXIoKTsKIG91dDoKIAlyZXR1cm4gcmVzOwogZXJyOgpAQCAtNTEzNiw3ICs0OTc5LDYgQEAKIHsKIAl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmYm9uZF9uZXRkZXZfbm90aWZpZXIpOwogCXVucmVnaXN0ZXJfaW5ldGFkZHJfbm90aWZpZXIoJmJvbmRfaW5ldGFkZHJfbm90aWZpZXIpOwotCWJvbmRfdW5yZWdpc3Rlcl9pcHY2X25vdGlmaWVyKCk7CiAKIAlib25kX2Rlc3Ryb3lfc3lzZnMoKTsKIAlib25kX2Rlc3Ryb3lfZGVidWdmcygpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3Byb2Nmcy5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3Byb2Nmcy5jCmluZGV4IGMzMmZmNTUuLmM5NzMwN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9wcm9jZnMuYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfcHJvY2ZzLmMKQEAgLTQsOCArNCw2IEBACiAjaW5jbHVkZSAiYm9uZGluZy5oIgogCiAKLWV4dGVybiBjb25zdCBjaGFyICpib25kX21vZGVfbmFtZShpbnQgbW9kZSk7Ci0KIHN0YXRpYyB2b2lkICpib25kX2luZm9fc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIAlfX2FjcXVpcmVzKFJDVSkKIAlfX2FjcXVpcmVzKCZib25kLT5sb2NrKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfc3lzZnMuYwppbmRleCBkZTg3YWVhLi40MDU5YmZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfc3lzZnMuYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfc3lzZnMuYwpAQCAtNDIyLDExICs0MjIsNiBAQAogCQlib25kLT5kZXYtPm5hbWUsIGFycF92YWxpZGF0ZV90YmxbbmV3X3ZhbHVlXS5tb2RlbmFtZSwKIAkJbmV3X3ZhbHVlKTsKIAotCWlmICghYm9uZC0+cGFyYW1zLmFycF92YWxpZGF0ZSAmJiBuZXdfdmFsdWUpCi0JCWJvbmRfcmVnaXN0ZXJfYXJwKGJvbmQpOwotCWVsc2UgaWYgKGJvbmQtPnBhcmFtcy5hcnBfdmFsaWRhdGUgJiYgIW5ld192YWx1ZSkKLQkJYm9uZF91bnJlZ2lzdGVyX2FycChib25kKTsKLQogCWJvbmQtPnBhcmFtcy5hcnBfdmFsaWRhdGUgPSBuZXdfdmFsdWU7CiAKIAlyZXR1cm4gY291bnQ7CkBAIC04NzQsODIgKzg2OSwyOCBAQAogCQkgICBib25kaW5nX3Nob3dfYWRfc2VsZWN0LCBib25kaW5nX3N0b3JlX2FkX3NlbGVjdCk7CiAKIC8qCi0gKiBTaG93IGFuZCBzZXQgdGhlIG51bWJlciBvZiBncmF0IEFSUCB0byBzZW5kIGFmdGVyIGEgZmFpbG92ZXIgZXZlbnQuCisgKiBTaG93IGFuZCBzZXQgdGhlIG51bWJlciBvZiBwZWVyIG5vdGlmaWNhdGlvbnMgdG8gc2VuZCBhZnRlciBhIGZhaWxvdmVyIGV2ZW50LgogICovCi1zdGF0aWMgc3NpemVfdCBib25kaW5nX3Nob3dfbl9ncmF0X2FycChzdHJ1Y3QgZGV2aWNlICpkLAotCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCSAgIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IGJvbmRpbmdfc2hvd19udW1fcGVlcl9ub3RpZihzdHJ1Y3QgZGV2aWNlICpkLAorCQkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICAgY2hhciAqYnVmKQogewogCXN0cnVjdCBib25kaW5nICpib25kID0gdG9fYm9uZChkKTsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBib25kLT5wYXJhbXMubnVtX2dyYXRfYXJwKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgYm9uZC0+cGFyYW1zLm51bV9wZWVyX25vdGlmKTsKIH0KIAotc3RhdGljIHNzaXplX3QgYm9uZGluZ19zdG9yZV9uX2dyYXRfYXJwKHN0cnVjdCBkZXZpY2UgKmQsCi0JCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBzc2l6ZV90IGJvbmRpbmdfc3RvcmVfbnVtX3BlZXJfbm90aWYoc3RydWN0IGRldmljZSAqZCwKKwkJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0JaW50IG5ld192YWx1ZSwgcmV0ID0gY291bnQ7CiAJc3RydWN0IGJvbmRpbmcgKmJvbmQgPSB0b19ib25kKGQpOwotCi0JaWYgKHNzY2FuZihidWYsICIlZCIsICZuZXdfdmFsdWUpICE9IDEpIHsKLQkJcHJfZXJyKCIlczogbm8gbnVtX2dyYXRfYXJwIHZhbHVlIHNwZWNpZmllZC5cbiIsCi0JCSAgICAgICBib25kLT5kZXYtPm5hbWUpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0JaWYgKG5ld192YWx1ZSA8IDAgfHwgbmV3X3ZhbHVlID4gMjU1KSB7Ci0JCXByX2VycigiJXM6IEludmFsaWQgbnVtX2dyYXRfYXJwIHZhbHVlICVkIG5vdCBpbiByYW5nZSAwLTI1NTsgcmVqZWN0ZWQuXG4iLAotCQkgICAgICAgYm9uZC0+ZGV2LT5uYW1lLCBuZXdfdmFsdWUpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9IGVsc2UgewotCQlib25kLT5wYXJhbXMubnVtX2dyYXRfYXJwID0gbmV3X3ZhbHVlOwotCX0KLW91dDoKLQlyZXR1cm4gcmV0OworCWludCBlcnIgPSBrc3RydG91OChidWYsIDEwLCAmYm9uZC0+cGFyYW1zLm51bV9wZWVyX25vdGlmKTsKKwlyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIobnVtX2dyYXRfYXJwLCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJICAgYm9uZGluZ19zaG93X25fZ3JhdF9hcnAsIGJvbmRpbmdfc3RvcmVfbl9ncmF0X2FycCk7Ci0KLS8qCi0gKiBTaG93IGFuZCBzZXQgdGhlIG51bWJlciBvZiB1bnNvbGljaXRlZCBOQSdzIHRvIHNlbmQgYWZ0ZXIgYSBmYWlsb3ZlciBldmVudC4KLSAqLwotc3RhdGljIHNzaXplX3QgYm9uZGluZ19zaG93X25fdW5zb2xfbmEoc3RydWN0IGRldmljZSAqZCwKLQkJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICAgICAgIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IHRvX2JvbmQoZCk7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgYm9uZC0+cGFyYW1zLm51bV91bnNvbF9uYSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGJvbmRpbmdfc3RvcmVfbl91bnNvbF9uYShzdHJ1Y3QgZGV2aWNlICpkLAotCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0JaW50IG5ld192YWx1ZSwgcmV0ID0gY291bnQ7Ci0Jc3RydWN0IGJvbmRpbmcgKmJvbmQgPSB0b19ib25kKGQpOwotCi0JaWYgKHNzY2FuZihidWYsICIlZCIsICZuZXdfdmFsdWUpICE9IDEpIHsKLQkJcHJfZXJyKCIlczogbm8gbnVtX3Vuc29sX25hIHZhbHVlIHNwZWNpZmllZC5cbiIsCi0JCSAgICAgICBib25kLT5kZXYtPm5hbWUpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAobmV3X3ZhbHVlIDwgMCB8fCBuZXdfdmFsdWUgPiAyNTUpIHsKLQkJcHJfZXJyKCIlczogSW52YWxpZCBudW1fdW5zb2xfbmEgdmFsdWUgJWQgbm90IGluIHJhbmdlIDAtMjU1OyByZWplY3RlZC5cbiIsCi0JCSAgICAgICBib25kLT5kZXYtPm5hbWUsIG5ld192YWx1ZSk7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0gZWxzZQotCQlib25kLT5wYXJhbXMubnVtX3Vuc29sX25hID0gbmV3X3ZhbHVlOwotb3V0OgotCXJldHVybiByZXQ7Ci19CisJCSAgIGJvbmRpbmdfc2hvd19udW1fcGVlcl9ub3RpZiwgYm9uZGluZ19zdG9yZV9udW1fcGVlcl9ub3RpZik7CiBzdGF0aWMgREVWSUNFX0FUVFIobnVtX3Vuc29sX25hLCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJICAgYm9uZGluZ19zaG93X25fdW5zb2xfbmEsIGJvbmRpbmdfc3RvcmVfbl91bnNvbF9uYSk7CisJCSAgIGJvbmRpbmdfc2hvd19udW1fcGVlcl9ub3RpZiwgYm9uZGluZ19zdG9yZV9udW1fcGVlcl9ub3RpZik7CiAKIC8qCiAgKiBTaG93IGFuZCBzZXQgdGhlIE1JSSBtb25pdG9yIGludGVydmFsLiAgVGhlcmUgYXJlIHR3byB0cmlja3kgYml0cwpAQCAtMTAwMSw3ICs5NDIsNiBAQAogCQkJCWJvbmQtPmRldi0+bmFtZSk7CiAJCQlib25kLT5wYXJhbXMuYXJwX2ludGVydmFsID0gMDsKIAkJCWlmIChib25kLT5wYXJhbXMuYXJwX3ZhbGlkYXRlKSB7Ci0JCQkJYm9uZF91bnJlZ2lzdGVyX2FycChib25kKTsKIAkJCQlib25kLT5wYXJhbXMuYXJwX3ZhbGlkYXRlID0KIAkJCQkJQk9ORF9BUlBfVkFMSURBVEVfTk9ORTsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZGluZy5oIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kaW5nLmgKaW5kZXggOTA3MzZjYi4uZWExZDAwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kaW5nLmgKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kaW5nLmgKQEAgLTI0LDggKzI0LDggQEAKICNpbmNsdWRlICJib25kXzNhZC5oIgogI2luY2x1ZGUgImJvbmRfYWxiLmgiCiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjMuNy4wIgotI2RlZmluZSBEUlZfUkVMREFURQkiSnVuZSAyLCAyMDEwIgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMy43LjEiCisjZGVmaW5lIERSVl9SRUxEQVRFCSJBcHJpbCAyNywgMjAxMSIKICNkZWZpbmUgRFJWX05BTUUJImJvbmRpbmciCiAjZGVmaW5lIERSVl9ERVNDUklQVElPTgkiRXRoZXJuZXQgQ2hhbm5lbCBCb25kaW5nIERyaXZlciIKIApAQCAtMzksMTYgKzM5LDYgQEAKIAkgICAgICAgbmV0aWZfY2Fycmllcl9vayhkZXYpKQogCiAvKgotICogQ2hlY2tzIHdoZXRoZXIgYm9uZCBpcyByZWFkeSBmb3IgdHJhbnNtaXQuCi0gKgotICogQ2FsbGVyIG11c3QgaG9sZCBib25kLT5sb2NrCi0gKi8KLSNkZWZpbmUgQk9ORF9JU19PSyhib25kKQkJCSAgICAgXAotCQkgICAoKChib25kKS0+ZGV2LT5mbGFncyAmIElGRl9VUCkgJiYgXAotCQkgICAgbmV0aWZfcnVubmluZygoYm9uZCktPmRldikJICAmJiBcCi0JCSAgICAoKGJvbmQpLT5zbGF2ZV9jbnQgPiAwKSkKLQotLyoKICAqIENoZWNrcyB3aGV0aGVyIHNsYXZlIGlzIHJlYWR5IGZvciB0cmFuc21pdC4KICAqLwogI2RlZmluZSBTTEFWRV9JU19PSyhzbGF2ZSkJCQkgICAgICAgIFwKQEAgLTE0OSw4ICsxMzksNyBAQAogCWludCBtb2RlOwogCWludCB4bWl0X3BvbGljeTsKIAlpbnQgbWlpbW9uOwotCWludCBudW1fZ3JhdF9hcnA7Ci0JaW50IG51bV91bnNvbF9uYTsKKwl1OCBudW1fcGVlcl9ub3RpZjsKIAlpbnQgYXJwX2ludGVydmFsOwogCWludCBhcnBfdmFsaWRhdGU7CiAJaW50IHVzZV9jYXJyaWVyOwpAQCAtMTc4LDkgKzE2Nyw2IEBACiAJc3RydWN0IGxpc3RfaGVhZCB2bGFuX2xpc3Q7CiAJX19iZTMyIHZsYW5faXA7CiAJdW5zaWduZWQgc2hvcnQgdmxhbl9pZDsKLSNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKLQlzdHJ1Y3QgaW42X2FkZHIgdmxhbl9pcHY2OwotI2VuZGlmCiB9OwogCiBzdHJ1Y3Qgc2xhdmUgewpAQCAtMTk2LDEyICsxODIsMTIgQEAKIAl1OCAgICAgYmFja3VwOjEsICAgLyogaW5kaWNhdGVzIGJhY2t1cCBzbGF2ZS4gVmFsdWUgY29ycmVzcG9uZHMgd2l0aAogCQkJICAgICAgQk9ORF9TVEFURV9BQ1RJVkUgYW5kIEJPTkRfU1RBVEVfQkFDS1VQICovCiAJICAgICAgIGluYWN0aXZlOjE7IC8qIGluZGljYXRlcyBpbmFjdGl2ZSBzbGF2ZSAqLworCXU4ICAgICBkdXBsZXg7CiAJdTMyICAgIG9yaWdpbmFsX210dTsKIAl1MzIgICAgbGlua19mYWlsdXJlX2NvdW50OwotCXU4ICAgICBwZXJtX2h3YWRkcltFVEhfQUxFTl07Ci0JdTE2ICAgIHNwZWVkOwotCXU4ICAgICBkdXBsZXg7CisJdTMyICAgIHNwZWVkOwogCXUxNiAgICBxdWV1ZV9pZDsKKwl1OCAgICAgcGVybV9od2FkZHJbRVRIX0FMRU5dOwogCXN0cnVjdCBhZF9zbGF2ZV9pbmZvIGFkX2luZm87IC8qIEhVR0UgLSBiZXR0ZXIgdG8gZHluYW1pY2FsbHkgYWxsb2MgKi8KIAlzdHJ1Y3QgdGxiX3NsYXZlX2luZm8gdGxiX2luZm87CiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKQEAgLTIzMSwxMSArMjE3LDEyIEBACiAJc3RydWN0ICAgc2xhdmUgKnByaW1hcnlfc2xhdmU7CiAJYm9vbCAgICAgZm9yY2VfcHJpbWFyeTsKIAlzMzIgICAgICBzbGF2ZV9jbnQ7IC8qIG5ldmVyIGNoYW5nZSB0aGlzIHZhbHVlIG91dHNpZGUgdGhlIGF0dGFjaC9kZXRhY2ggd3JhcHBlcnMgKi8KKwl2b2lkICAgICAoKnJlY3ZfcHJvYmUpKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBib25kaW5nICosCisJCQkgICAgICAgc3RydWN0IHNsYXZlICopOwogCXJ3bG9ja190IGxvY2s7CiAJcndsb2NrX3QgY3Vycl9zbGF2ZV9sb2NrOwogCXM4ICAgICAgIGtpbGxfdGltZXJzOwotCXM4CSBzZW5kX2dyYXRfYXJwOwotCXM4CSBzZW5kX3Vuc29sX25hOworCXU4CSBzZW5kX3BlZXJfbm90aWY7CiAJczgJIHNldHVwX2J5X3NsYXZlOwogCXM4ICAgICAgIGlnbXBfcmV0cmFuczsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwpAQCAtMjYwLDkgKzI0Nyw2IEBACiAJc3RydWN0ICAgZGVsYXllZF93b3JrIGFsYl93b3JrOwogCXN0cnVjdCAgIGRlbGF5ZWRfd29yayBhZF93b3JrOwogCXN0cnVjdCAgIGRlbGF5ZWRfd29yayBtY2FzdF93b3JrOwotI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQotCXN0cnVjdCAgIGluNl9hZGRyIG1hc3Rlcl9pcHY2OwotI2VuZGlmCiAjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCiAJLyogZGVidWdnaW5nIHN1cG9ydCB2aWEgZGVidWdmcyAqLwogCXN0cnVjdAkgZGVudHJ5ICpkZWJ1Z19kaXI7CkBAIC00MDksMTMgKzM5MywxMiBAQAogaW50IGJvbmRfcGFyc2VfcGFybShjb25zdCBjaGFyICptb2RlX2FyZywgY29uc3Qgc3RydWN0IGJvbmRfcGFybV90YmwgKnRibCk7CiB2b2lkIGJvbmRfc2VsZWN0X2FjdGl2ZV9zbGF2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCk7CiB2b2lkIGJvbmRfY2hhbmdlX2FjdGl2ZV9zbGF2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpuZXdfYWN0aXZlKTsKLXZvaWQgYm9uZF9yZWdpc3Rlcl9hcnAoc3RydWN0IGJvbmRpbmcgKik7Ci12b2lkIGJvbmRfdW5yZWdpc3Rlcl9hcnAoc3RydWN0IGJvbmRpbmcgKik7CiB2b2lkIGJvbmRfY3JlYXRlX2RlYnVnZnModm9pZCk7CiB2b2lkIGJvbmRfZGVzdHJveV9kZWJ1Z2ZzKHZvaWQpOwogdm9pZCBib25kX2RlYnVnX3JlZ2lzdGVyKHN0cnVjdCBib25kaW5nICpib25kKTsKIHZvaWQgYm9uZF9kZWJ1Z191bnJlZ2lzdGVyKHN0cnVjdCBib25kaW5nICpib25kKTsKIHZvaWQgYm9uZF9kZWJ1Z19yZXJlZ2lzdGVyKHN0cnVjdCBib25kaW5nICpib25kKTsKK2NvbnN0IGNoYXIgKmJvbmRfbW9kZV9uYW1lKGludCBtb2RlKTsKIAogc3RydWN0IGJvbmRfbmV0IHsKIAlzdHJ1Y3QgbmV0ICoJCW5ldDsJLyogQXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZSAqLwpAQCAtNDU5LDIzICs0NDIsNCBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBib25kX3Bhcm1fdGJsIHByaV9yZXNlbGVjdF90YmxbXTsKIGV4dGVybiBzdHJ1Y3QgYm9uZF9wYXJtX3RibCBhZF9zZWxlY3RfdGJsW107CiAKLSNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKLXZvaWQgYm9uZF9zZW5kX3Vuc29saWNpdGVkX25hKHN0cnVjdCBib25kaW5nICpib25kKTsKLXZvaWQgYm9uZF9yZWdpc3Rlcl9pcHY2X25vdGlmaWVyKHZvaWQpOwotdm9pZCBib25kX3VucmVnaXN0ZXJfaXB2Nl9ub3RpZmllcih2b2lkKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgYm9uZF9zZW5kX3Vuc29saWNpdGVkX25hKHN0cnVjdCBib25kaW5nICpib25kKQotewotCXJldHVybjsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBib25kX3JlZ2lzdGVyX2lwdjZfbm90aWZpZXIodm9pZCkKLXsKLQlyZXR1cm47Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgYm9uZF91bnJlZ2lzdGVyX2lwdjZfbm90aWZpZXIodm9pZCkKLXsKLQlyZXR1cm47Ci19Ci0jZW5kaWYKLQogI2VuZGlmIC8qIF9MSU5VWF9CT05ESU5HX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NhaWYvY2FpZl9zZXJpYWwuYyBiL2RyaXZlcnMvbmV0L2NhaWYvY2FpZl9zZXJpYWwuYwppbmRleCAzZGYwYzBmLi43M2M3ZTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYWlmL2NhaWZfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9uZXQvY2FpZi9jYWlmX3NlcmlhbC5jCkBAIC0xNjcsOCArMTY3LDggQEAKIAogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIGxkaXNjX3JlY2VpdmUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdTggKmRhdGEsCi0JCQljaGFyICpmbGFncywgaW50IGNvdW50KQorc3RhdGljIHVuc2lnbmVkIGludCBsZGlzY19yZWNlaXZlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCWNvbnN0IHU4ICpkYXRhLCBjaGFyICpmbGFncywgaW50IGNvdW50KQogewogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwogCXN0cnVjdCBzZXJfZGV2aWNlICpzZXI7CkBAIC0yMTUsNiArMjE1LDggQEAKIAl9IGVsc2UKIAkJKytzZXItPmRldi0+c3RhdHMucnhfZHJvcHBlZDsKIAl1cGRhdGVfdHR5X3N0YXR1cyhzZXIpOworCisJcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgaW50IGhhbmRsZV90eChzdHJ1Y3Qgc2VyX2RldmljZSAqc2VyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3BjaF9jYW4uYyBiL2RyaXZlcnMvbmV0L2Nhbi9wY2hfY2FuLmMKaW5kZXggZTU0NzEyYi4uZDExZmJiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3BjaF9jYW4uYworKysgYi9kcml2ZXJzL25ldC9jYW4vcGNoX2Nhbi5jCkBAIC02NTMsNyArNjUzLDcgQEAKIAl1MTYgZGF0YV9yZWc7CiAKIAlkbyB7Ci0JCS8qIFJlYWRpbmcgdGhlIG1lc3NzYWdlIG9iamVjdCBmcm9tIHRoZSBNZXNzYWdlIFJBTSAqLworCQkvKiBSZWFkaW5nIHRoZSBtZXNzYWdlIG9iamVjdCBmcm9tIHRoZSBNZXNzYWdlIFJBTSAqLwogCQlpb3dyaXRlMzIoUENIX0NNQVNLX1JYX1RYX0dFVCwgJnByaXYtPnJlZ3MtPmlmcmVnc1swXS5jbWFzayk7CiAJCXBjaF9jYW5fcndfbXNnX29iaigmcHJpdi0+cmVncy0+aWZyZWdzWzBdLmNyZXEsIG9ial9udW0pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc2xjYW4uYyBiL2RyaXZlcnMvbmV0L2Nhbi9zbGNhbi5jCmluZGV4IDFiNDlkZjYuLjc1NjIyZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9zbGNhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zbGNhbi5jCkBAIC00MjUsMTYgKzQyNSwxNyBAQAogICogaW4gcGFyYWxsZWwKICAqLwogCi1zdGF0aWMgdm9pZCBzbGNhbl9yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorc3RhdGljIHVuc2lnbmVkIGludCBzbGNhbl9yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAogCQkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY3AsIGNoYXIgKmZwLCBpbnQgY291bnQpCiB7CiAJc3RydWN0IHNsY2FuICpzbCA9IChzdHJ1Y3Qgc2xjYW4gKikgdHR5LT5kaXNjX2RhdGE7CisJaW50IGJ5dGVzID0gY291bnQ7CiAKIAlpZiAoIXNsIHx8IHNsLT5tYWdpYyAhPSBTTENBTl9NQUdJQyB8fCAhbmV0aWZfcnVubmluZyhzbC0+ZGV2KSkKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIFJlYWQgdGhlIGNoYXJhY3RlcnMgb3V0IG9mIHRoZSBidWZmZXIgKi8KLQl3aGlsZSAoY291bnQtLSkgeworCXdoaWxlIChieXRlcy0tKSB7CiAJCWlmIChmcCAmJiAqZnArKykgewogCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFNMRl9FUlJPUiwgJnNsLT5mbGFncykpCiAJCQkJc2wtPmRldi0+c3RhdHMucnhfZXJyb3JzKys7CkBAIC00NDMsNiArNDQ0LDggQEAKIAkJfQogCQlzbGNhbl91bmVzYyhzbCwgKmNwKyspOwogCX0KKworCXJldHVybiBjb3VudDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZ19tYWluLmMgYi9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nX21haW4uYwppbmRleCA3YTcwNzA5Li42MGE0OWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nX21haW4uYworKysgYi9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nX21haW4uYwpAQCAtNzk3LDcgKzc5Nyw3IEBACiAJcmV0ID0gLUVJTlZBTDsKIAlwcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIXByZXMpCi0JCWdvdG8gcGxhdGZvcm1fcmVzb3VyY2VfZmFpbGVkOzsKKwkJZ290byBwbGF0Zm9ybV9yZXNvdXJjZV9mYWlsZWQ7CiAJY2FyZC0+ZHByYW1fcGh5cyA9IHByZXMtPnN0YXJ0OwogCWNhcmQtPmRwcmFtX3NpemUgPSBwcmVzLT5lbmQgLSBwcmVzLT5zdGFydCArIDE7CiAJY2FyZC0+ZHByYW0gPSBpb3JlbWFwX25vY2FjaGUoY2FyZC0+ZHByYW1fcGh5cywgY2FyZC0+ZHByYW1fc2l6ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYXNzaW5pLmMgYi9kcml2ZXJzL25ldC9jYXNzaW5pLmMKaW5kZXggMTQzYTI4Yy4uMjJjZTAzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2Fzc2luaS5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYwpAQCAtNzA5LDEwICs3MDksMTEgQEAKIAlpZiAoZXAtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpCiAJCWNwLT5saW5rX2NudGwgPSBCTUNSX0FORU5BQkxFOwogCWVsc2UgeworCQl1MzIgc3BlZWQgPSBldGh0b29sX2NtZF9zcGVlZChlcCk7CiAJCWNwLT5saW5rX2NudGwgPSAwOwotCQlpZiAoZXAtPnNwZWVkID09IFNQRUVEXzEwMCkKKwkJaWYgKHNwZWVkID09IFNQRUVEXzEwMCkKIAkJCWNwLT5saW5rX2NudGwgfD0gQk1DUl9TUEVFRDEwMDsKLQkJZWxzZSBpZiAoZXAtPnNwZWVkID09IFNQRUVEXzEwMDApCisJCWVsc2UgaWYgKHNwZWVkID09IFNQRUVEXzEwMDApCiAJCQljcC0+bGlua19jbnRsIHw9IENBU19CTUNSX1NQRUVEMTAwMDsKIAkJaWYgKGVwLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCiAJCQljcC0+bGlua19jbnRsIHw9IEJNQ1JfRlVMTERQTFg7CkBAIC00NjA1LDE4ICs0NjA2LDE3IEBACiAJaWYgKGJtY3IgJiBCTUNSX0FORU5BQkxFKSB7CiAJCWNtZC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF9BdXRvbmVnOwogCQljbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0VOQUJMRTsKLQkJY21kLT5zcGVlZCA9ICgoc3BlZWQgPT0gMTApID8KLQkJCSAgICAgIFNQRUVEXzEwIDoKLQkJCSAgICAgICgoc3BlZWQgPT0gMTAwMCkgPwotCQkJICAgICAgIFNQRUVEXzEwMDAgOiBTUEVFRF8xMDApKTsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgKChzcGVlZCA9PSAxMCkgPworCQkJCQkgICAgU1BFRURfMTAgOgorCQkJCQkgICAgKChzcGVlZCA9PSAxMDAwKSA/CisJCQkJCSAgICAgU1BFRURfMTAwMCA6IFNQRUVEXzEwMCkpKTsKIAkJY21kLT5kdXBsZXggPSBmdWxsX2R1cGxleCA/IERVUExFWF9GVUxMIDogRFVQTEVYX0hBTEY7CiAJfSBlbHNlIHsKIAkJY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOwotCQljbWQtPnNwZWVkID0KLQkJCShibWNyICYgQ0FTX0JNQ1JfU1BFRUQxMDAwKSA/Ci0JCQlTUEVFRF8xMDAwIDoKLQkJCSgoYm1jciAmIEJNQ1JfU1BFRUQxMDApID8gU1BFRURfMTAwOgotCQkJIFNQRUVEXzEwKTsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgKChibWNyICYgQ0FTX0JNQ1JfU1BFRUQxMDAwKSA/CisJCQkJCSAgICBTUEVFRF8xMDAwIDoKKwkJCQkJICAgICgoYm1jciAmIEJNQ1JfU1BFRUQxMDApID8KKwkJCQkJICAgICBTUEVFRF8xMDAgOiBTUEVFRF8xMCkpKTsKIAkJY21kLT5kdXBsZXggPQogCQkJKGJtY3IgJiBCTUNSX0ZVTExEUExYKSA/CiAJCQlEVVBMRVhfRlVMTCA6IERVUExFWF9IQUxGOwpAQCAtNDYzMywxNCArNDYzMywxNCBAQAogCQkgKiBzZXR0aW5ncyB0aGF0IHdlIGNvbmZpZ3VyZWQuCiAJCSAqLwogCQlpZiAoY3AtPmxpbmtfY250bCAmIEJNQ1JfQU5FTkFCTEUpIHsKLQkJCWNtZC0+c3BlZWQgPSAwOworCQkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgMCk7CiAJCQljbWQtPmR1cGxleCA9IDB4ZmY7CiAJCX0gZWxzZSB7Ci0JCQljbWQtPnNwZWVkID0gU1BFRURfMTA7CisJCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCBTUEVFRF8xMCk7CiAJCQlpZiAoY3AtPmxpbmtfY250bCAmIEJNQ1JfU1BFRUQxMDApIHsKLQkJCQljbWQtPnNwZWVkID0gU1BFRURfMTAwOworCQkJCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIFNQRUVEXzEwMCk7CiAJCQl9IGVsc2UgaWYgKGNwLT5saW5rX2NudGwgJiBDQVNfQk1DUl9TUEVFRDEwMDApIHsKLQkJCQljbWQtPnNwZWVkID0gU1BFRURfMTAwMDsKKwkJCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCBTUEVFRF8xMDAwKTsKIAkJCX0KIAkJCWNtZC0+ZHVwbGV4ID0gKGNwLT5saW5rX2NudGwgJiBCTUNSX0ZVTExEUExYKT8KIAkJCQlEVVBMRVhfRlVMTCA6IERVUExFWF9IQUxGOwpAQCAtNDY1Myw2ICs0NjUzLDcgQEAKIHsKIAlzdHJ1Y3QgY2FzICpjcCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgc3BlZWQgPSBldGh0b29sX2NtZF9zcGVlZChjbWQpOwogCiAJLyogVmVyaWZ5IHRoZSBzZXR0aW5ncyB3ZSBjYXJlIGFib3V0LiAqLwogCWlmIChjbWQtPmF1dG9uZWcgIT0gQVVUT05FR19FTkFCTEUgJiYKQEAgLTQ2NjAsOSArNDY2MSw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUgJiYKLQkgICAgKChjbWQtPnNwZWVkICE9IFNQRUVEXzEwMDAgJiYKLQkgICAgICBjbWQtPnNwZWVkICE9IFNQRUVEXzEwMCAmJgotCSAgICAgIGNtZC0+c3BlZWQgIT0gU1BFRURfMTApIHx8CisJICAgICgoc3BlZWQgIT0gU1BFRURfMTAwMCAmJgorCSAgICAgIHNwZWVkICE9IFNQRUVEXzEwMCAmJgorCSAgICAgIHNwZWVkICE9IFNQRUVEXzEwKSB8fAogCSAgICAgKGNtZC0+ZHVwbGV4ICE9IERVUExFWF9IQUxGICYmCiAJICAgICAgY21kLT5kdXBsZXggIT0gRFVQTEVYX0ZVTEwpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvY2hlbHNpby9jb21tb24uaAppbmRleCAwOTJmMzFhLi5jMjZkODYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jaGVsc2lvL2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vY29tbW9uLmgKQEAgLTI2NCwxMSArMjY0LDYgQEAKIAogZW51bSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkYXB0ZXIgZmxhZ3MgKi8KIAlGVUxMX0lOSVRfRE9ORSAgICAgICAgPSAxIDw8IDAsCi0JVFNPX0NBUEFCTEUgICAgICAgICAgID0gMSA8PCAyLAotCVRDUF9DU1VNX0NBUEFCTEUgICAgICA9IDEgPDwgMywKLQlVRFBfQ1NVTV9DQVBBQkxFICAgICAgPSAxIDw8IDQsCi0JVkxBTl9BQ0NFTF9DQVBBQkxFICAgID0gMSA8PCA1LAotCVJYX0NTVU1fRU5BQkxFRCAgICAgICA9IDEgPDwgNiwKIH07CiAKIHN0cnVjdCBtZGlvX29wczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vY3hnYjIuYyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vY3hnYjIuYwppbmRleCAwZjcxMzA0Li5iNDIyZDgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jaGVsc2lvL2N4Z2IyLmMKKysrIGIvZHJpdmVycy9uZXQvY2hlbHNpby9jeGdiMi5jCkBAIC0xOTIsMTAgKzE5Miw4IEBACiAKIHN0YXRpYyB2b2lkIGVuYWJsZV9od19jc3VtKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQogewotCWlmIChhZGFwdGVyLT5mbGFncyAmIFRTT19DQVBBQkxFKQorCWlmIChhZGFwdGVyLT5wb3J0WzBdLmRldi0+aHdfZmVhdHVyZXMgJiBORVRJRl9GX1RTTykKIAkJdDFfdHBfc2V0X2lwX2NoZWNrc3VtX29mZmxvYWQoYWRhcHRlci0+dHAsIDEpOwkvKiBmb3IgVFNPIG9ubHkgKi8KLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBVRFBfQ1NVTV9DQVBBQkxFKQotCQl0MV90cF9zZXRfdWRwX2NoZWNrc3VtX29mZmxvYWQoYWRhcHRlci0+dHAsIDEpOwogCXQxX3RwX3NldF90Y3BfY2hlY2tzdW1fb2ZmbG9hZChhZGFwdGVyLT50cCwgMSk7CiB9CiAKQEAgLTU3OSwxMCArNTc3LDEwIEBACiAJY21kLT5hZHZlcnRpc2luZyA9IHAtPmxpbmtfY29uZmlnLmFkdmVydGlzaW5nOwogCiAJaWYgKG5ldGlmX2NhcnJpZXJfb2soZGV2KSkgewotCQljbWQtPnNwZWVkID0gcC0+bGlua19jb25maWcuc3BlZWQ7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIHAtPmxpbmtfY29uZmlnLnNwZWVkKTsKIAkJY21kLT5kdXBsZXggPSBwLT5saW5rX2NvbmZpZy5kdXBsZXg7CiAJfSBlbHNlIHsKLQkJY21kLT5zcGVlZCA9IC0xOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCAtMSk7CiAJCWNtZC0+ZHVwbGV4ID0gLTE7CiAJfQogCkBAIC02NDAsMTEgKzYzOCwxMiBAQAogCQlyZXR1cm4gLUVPUE5PVFNVUFA7ICAgICAgICAgICAgIC8qIGNhbid0IGNoYW5nZSBzcGVlZC9kdXBsZXggKi8KIAogCWlmIChjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19ESVNBQkxFKSB7Ci0JCWludCBjYXAgPSBzcGVlZF9kdXBsZXhfdG9fY2FwcyhjbWQtPnNwZWVkLCBjbWQtPmR1cGxleCk7CisJCXUzMiBzcGVlZCA9IGV0aHRvb2xfY21kX3NwZWVkKGNtZCk7CisJCWludCBjYXAgPSBzcGVlZF9kdXBsZXhfdG9fY2FwcyhzcGVlZCwgY21kLT5kdXBsZXgpOwogCi0JCWlmICghKGxjLT5zdXBwb3J0ZWQgJiBjYXApIHx8IGNtZC0+c3BlZWQgPT0gU1BFRURfMTAwMCkKKwkJaWYgKCEobGMtPnN1cHBvcnRlZCAmIGNhcCkgfHwgKHNwZWVkID09IFNQRUVEXzEwMDApKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWxjLT5yZXF1ZXN0ZWRfc3BlZWQgPSBjbWQtPnNwZWVkOworCQlsYy0+cmVxdWVzdGVkX3NwZWVkID0gc3BlZWQ7CiAJCWxjLT5yZXF1ZXN0ZWRfZHVwbGV4ID0gY21kLT5kdXBsZXg7CiAJCWxjLT5hZHZlcnRpc2luZyA9IDA7CiAJfSBlbHNlIHsKQEAgLTcwNSwzMyArNzA0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHUzMiBnZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gZGV2LT5tbF9wcml2OwotCi0JcmV0dXJuIChhZGFwdGVyLT5mbGFncyAmIFJYX0NTVU1fRU5BQkxFRCkgIT0gMDsKLX0KLQotc3RhdGljIGludCBzZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IGRldi0+bWxfcHJpdjsKLQotCWlmIChkYXRhKQotCQlhZGFwdGVyLT5mbGFncyB8PSBSWF9DU1VNX0VOQUJMRUQ7Ci0JZWxzZQotCQlhZGFwdGVyLT5mbGFncyAmPSB+UlhfQ1NVTV9FTkFCTEVEOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHZhbHVlKQotewotCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gZGV2LT5tbF9wcml2OwotCi0JaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBUU09fQ0FQQUJMRSkpCi0JCXJldHVybiB2YWx1ZSA/IC1FT1BOT1RTVVBQIDogMDsKLQlyZXR1cm4gZXRodG9vbF9vcF9zZXRfdHNvKGRldiwgdmFsdWUpOwotfQotCiBzdGF0aWMgdm9pZCBnZXRfc2dlX3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqZSkKIHsKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IGRldi0+bWxfcHJpdjsKQEAgLTgzMSwxNyArODAzLDEyIEBACiAJLmdldF9lZXByb20gICAgICAgID0gZ2V0X2VlcHJvbSwKIAkuZ2V0X3BhdXNlcGFyYW0gICAgPSBnZXRfcGF1c2VwYXJhbSwKIAkuc2V0X3BhdXNlcGFyYW0gICAgPSBzZXRfcGF1c2VwYXJhbSwKLQkuZ2V0X3J4X2NzdW0gICAgICAgPSBnZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0gICAgICAgPSBzZXRfcnhfY3N1bSwKLQkuc2V0X3R4X2NzdW0gICAgICAgPSBldGh0b29sX29wX3NldF90eF9jc3VtLAotCS5zZXRfc2cgICAgICAgICAgICA9IGV0aHRvb2xfb3Bfc2V0X3NnLAogCS5nZXRfbGluayAgICAgICAgICA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCiAJLmdldF9zdHJpbmdzICAgICAgID0gZ2V0X3N0cmluZ3MsCiAJLmdldF9zc2V0X2NvdW50CSAgID0gZ2V0X3NzZXRfY291bnQsCiAJLmdldF9ldGh0b29sX3N0YXRzID0gZ2V0X3N0YXRzLAogCS5nZXRfcmVnc19sZW4gICAgICA9IGdldF9yZWdzX2xlbiwKIAkuZ2V0X3JlZ3MgICAgICAgICAgPSBnZXRfcmVncywKLQkuc2V0X3RzbyAgICAgICAgICAgPSBzZXRfdHNvLAogfTsKIAogc3RhdGljIGludCB0MV9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJlcSwgaW50IGNtZCkKQEAgLTExMDUsMjggKzEwNzIsMjggQEAKIAkJbmV0ZGV2LT5tZW1fc3RhcnQgPSBtbWlvX3N0YXJ0OwogCQluZXRkZXYtPm1lbV9lbmQgPSBtbWlvX3N0YXJ0ICsgbW1pb19sZW4gLSAxOwogCQluZXRkZXYtPm1sX3ByaXYgPSBhZGFwdGVyOwotCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU07Ci0JCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MTFRYOworCQluZXRkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfAorCQkJTkVUSUZfRl9SWENTVU07CisJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8CisJCQlORVRJRl9GX1JYQ1NVTSB8IE5FVElGX0ZfTExUWDsKIAotCQlhZGFwdGVyLT5mbGFncyB8PSBSWF9DU1VNX0VOQUJMRUQgfCBUQ1BfQ1NVTV9DQVBBQkxFOwogCQlpZiAocGNpX3VzaW5nX2RhYykKIAkJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwogCQlpZiAodmxhbl90c29fY2FwYWJsZShhZGFwdGVyKSkgewogI2lmIGRlZmluZWQoQ09ORklHX1ZMQU5fODAyMVEpIHx8IGRlZmluZWQoQ09ORklHX1ZMQU5fODAyMVFfTU9EVUxFKQotCQkJYWRhcHRlci0+ZmxhZ3MgfD0gVkxBTl9BQ0NFTF9DQVBBQkxFOwogCQkJbmV0ZGV2LT5mZWF0dXJlcyB8PQogCQkJCU5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWDsKICNlbmRpZgogCiAJCQkvKiBUMjA0OiBkaXNhYmxlIFRTTyAqLwogCQkJaWYgKCEoaXNfVDIoYWRhcHRlcikpIHx8IGJpLT5wb3J0X251bWJlciAhPSA0KSB7Ci0JCQkJYWRhcHRlci0+ZmxhZ3MgfD0gVFNPX0NBUEFCTEU7CisJCQkJbmV0ZGV2LT5od19mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKIAkJCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwogCQkJfQogCQl9CiAKIAkJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJmN4Z2JfbmV0ZGV2X29wczsKLQkJbmV0ZGV2LT5oYXJkX2hlYWRlcl9sZW4gKz0gKGFkYXB0ZXItPmZsYWdzICYgVFNPX0NBUEFCTEUpID8KKwkJbmV0ZGV2LT5oYXJkX2hlYWRlcl9sZW4gKz0gKG5ldGRldi0+aHdfZmVhdHVyZXMgJiBORVRJRl9GX1RTTykgPwogCQkJc2l6ZW9mKHN0cnVjdCBjcGxfdHhfcGt0X2xzbykgOiBzaXplb2Yoc3RydWN0IGNwbF90eF9wa3QpOwogCiAJCW5ldGlmX25hcGlfYWRkKG5ldGRldiwgJmFkYXB0ZXItPm5hcGksIHQxX3BvbGwsIDY0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmMgYi9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jCmluZGV4IDg3NTRkNDQuLjU4MzgwZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmMKKysrIGIvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuYwpAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAKICNpbmNsdWRlICJjcGw1X2NtZC5oIgogI2luY2x1ZGUgInNnZS5oIgpAQCAtOTI5LDcgKzkzMCw3IEBACiAJdTMyIGVuID0gU0dFX0lOVF9FTkFCTEU7CiAJdTMyIHZhbCA9IHJlYWRsKHNnZS0+YWRhcHRlci0+cmVncyArIEFfUExfRU5BQkxFKTsKIAotCWlmIChzZ2UtPmFkYXB0ZXItPmZsYWdzICYgVFNPX0NBUEFCTEUpCisJaWYgKHNnZS0+YWRhcHRlci0+cG9ydFswXS5kZXYtPmh3X2ZlYXR1cmVzICYgTkVUSUZfRl9UU08pCiAJCWVuICY9IH5GX1BBQ0tFVF9UT09fQklHOwogCXdyaXRlbChlbiwgc2dlLT5hZGFwdGVyLT5yZWdzICsgQV9TR19JTlRfRU5BQkxFKTsKIAl3cml0ZWwodmFsIHwgU0dFX1BMX0lOVFJfTUFTSywgc2dlLT5hZGFwdGVyLT5yZWdzICsgQV9QTF9FTkFCTEUpOwpAQCAtOTUyLDcgKzk1Myw3IEBACiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBzZ2UtPmFkYXB0ZXI7CiAJdTMyIGNhdXNlID0gcmVhZGwoYWRhcHRlci0+cmVncyArIEFfU0dfSU5UX0NBVVNFKTsKIAotCWlmIChhZGFwdGVyLT5mbGFncyAmIFRTT19DQVBBQkxFKQorCWlmIChhZGFwdGVyLT5wb3J0WzBdLmRldi0+aHdfZmVhdHVyZXMgJiBORVRJRl9GX1RTTykKIAkJY2F1c2UgJj0gfkZfUEFDS0VUX1RPT19CSUc7CiAJaWYgKGNhdXNlICYgRl9SRVNQUV9FWEhBVVNURUQpCiAJCXNnZS0+c3RhdHMucmVzcFFfZW1wdHkrKzsKQEAgLTEzNjksNiArMTM3MCw3IEBACiAJY29uc3Qgc3RydWN0IGNwbF9yeF9wa3QgKnA7CiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBzZ2UtPmFkYXB0ZXI7CiAJc3RydWN0IHNnZV9wb3J0X3N0YXRzICpzdDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCiAJc2tiID0gZ2V0X3BhY2tldChhZGFwdGVyLT5wZGV2LCBmbCwgbGVuIC0gc2dlLT5yeF9wa3RfcGFkKTsKIAlpZiAodW5saWtlbHkoIXNrYikpIHsKQEAgLTEzODQsOSArMTM4NiwxMCBAQAogCV9fc2tiX3B1bGwoc2tiLCBzaXplb2YoKnApKTsKIAogCXN0ID0gdGhpc19jcHVfcHRyKHNnZS0+cG9ydF9zdGF0c1twLT5pZmZdKTsKKwlkZXYgPSBhZGFwdGVyLT5wb3J0W3AtPmlmZl0uZGV2OwogCi0Jc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgYWRhcHRlci0+cG9ydFtwLT5pZmZdLmRldik7Ci0JaWYgKChhZGFwdGVyLT5mbGFncyAmIFJYX0NTVU1fRU5BQkxFRCkgJiYgcC0+Y3N1bSA9PSAweGZmZmYgJiYKKwlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOworCWlmICgoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSAmJiBwLT5jc3VtID09IDB4ZmZmZiAmJgogCSAgICBza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSAmJgogCSAgICAoc2tiLT5kYXRhWzldID09IElQUFJPVE9fVENQIHx8IHNrYi0+ZGF0YVs5XSA9PSBJUFBST1RPX1VEUCkpIHsKIAkJKytzdC0+cnhfY3NvX2dvb2Q7CkBAIC0xODM4LDggKzE4NDEsNyBAQAogCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJfQogCi0JCWlmICghKGFkYXB0ZXItPmZsYWdzICYgVURQX0NTVU1fQ0FQQUJMRSkgJiYKLQkJICAgIHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgJiYKKwkJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgJiYKIAkJICAgIGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkgewogCQkJaWYgKHVubGlrZWx5KHNrYl9jaGVja3N1bV9oZWxwKHNrYikpKSB7CiAJCQkJcHJfZGVidWcoIiVzOiB1bmFibGUgdG8gZG8gdWRwIGNoZWNrc3VtXG4iLCBkZXYtPm5hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2hlbHNpby90cC5jIGIvZHJpdmVycy9uZXQvY2hlbHNpby90cC5jCmluZGV4IDYyMjJkNTguLjhiZWQ0YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vdHAuYworKysgYi9kcml2ZXJzL25ldC9jaGVsc2lvL3RwLmMKQEAgLTE1MiwxMSArMTUyLDYgQEAKIAlzZXRfY3N1bV9vZmZsb2FkKHRwLCBGX0lQX0NTVU0sIGVuYWJsZSk7CiB9CiAKLXZvaWQgdDFfdHBfc2V0X3VkcF9jaGVja3N1bV9vZmZsb2FkKHN0cnVjdCBwZXRwICp0cCwgaW50IGVuYWJsZSkKLXsKLQlzZXRfY3N1bV9vZmZsb2FkKHRwLCBGX1VEUF9DU1VNLCBlbmFibGUpOwotfQotCiB2b2lkIHQxX3RwX3NldF90Y3BfY2hlY2tzdW1fb2ZmbG9hZChzdHJ1Y3QgcGV0cCAqdHAsIGludCBlbmFibGUpCiB7CiAJc2V0X2NzdW1fb2ZmbG9hZCh0cCwgRl9UQ1BfQ1NVTSwgZW5hYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vdHAuaCBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vdHAuaAppbmRleCAzMmZjNzFlLi5kZmQ4Y2UyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jaGVsc2lvL3RwLmgKKysrIGIvZHJpdmVycy9uZXQvY2hlbHNpby90cC5oCkBAIC02NSw3ICs2NSw2IEBACiBpbnQgdDFfdHBfaW50cl9oYW5kbGVyKHN0cnVjdCBwZXRwICp0cCk7CiAKIHZvaWQgdDFfdHBfZ2V0X21pYl9zdGF0aXN0aWNzKGFkYXB0ZXJfdCAqYWRhcCwgc3RydWN0IHRwX21pYl9zdGF0aXN0aWNzICp0cHMpOwotdm9pZCB0MV90cF9zZXRfdWRwX2NoZWNrc3VtX29mZmxvYWQoc3RydWN0IHBldHAgKnRwLCBpbnQgZW5hYmxlKTsKIHZvaWQgdDFfdHBfc2V0X3RjcF9jaGVja3N1bV9vZmZsb2FkKHN0cnVjdCBwZXRwICp0cCwgaW50IGVuYWJsZSk7CiB2b2lkIHQxX3RwX3NldF9pcF9jaGVja3N1bV9vZmZsb2FkKHN0cnVjdCBwZXRwICp0cCwgaW50IGVuYWJsZSk7CiBpbnQgdDFfdHBfc2V0X2NvYWxlc2Npbmdfc2l6ZShzdHJ1Y3QgcGV0cCAqdHAsIHVuc2lnbmVkIGludCBzaXplKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NuaWMuYyBiL2RyaXZlcnMvbmV0L2NuaWMuYwppbmRleCA4Y2NhNjBlLi4xMWE5MmFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jbmljLmMKKysrIGIvZHJpdmVycy9uZXQvY25pYy5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaWYgZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUSkgfHwgZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUV9NT0RVTEUpCiAjZGVmaW5lIEJDTV9WTEFOIDEKICNlbmRpZgpAQCAtMjk2NiwzMSArMjk2NywzNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBjbmljX3VscF9zdG9wX29uZShzdHJ1Y3QgY25pY19sb2NhbCAqY3AsIGludCBpZl90eXBlKQoreworCXN0cnVjdCBjbmljX3VscF9vcHMgKnVscF9vcHM7CisKKwlpZiAoaWZfdHlwZSA9PSBDTklDX1VMUF9JU0NTSSkKKwkJY25pY19zZW5kX25sbXNnKGNwLCBJU0NTSV9LRVZFTlRfSUZfRE9XTiwgTlVMTCk7CisKKwltdXRleF9sb2NrKCZjbmljX2xvY2spOworCXVscF9vcHMgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGNwLT51bHBfb3BzW2lmX3R5cGVdLAorCQkJCQkgICAgbG9ja2RlcF9pc19oZWxkKCZjbmljX2xvY2spKTsKKwlpZiAoIXVscF9vcHMpIHsKKwkJbXV0ZXhfdW5sb2NrKCZjbmljX2xvY2spOworCQlyZXR1cm47CisJfQorCXNldF9iaXQoVUxQX0ZfQ0FMTF9QRU5ESU5HLCAmY3AtPnVscF9mbGFnc1tpZl90eXBlXSk7CisJbXV0ZXhfdW5sb2NrKCZjbmljX2xvY2spOworCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChVTFBfRl9TVEFSVCwgJmNwLT51bHBfZmxhZ3NbaWZfdHlwZV0pKQorCQl1bHBfb3BzLT5jbmljX3N0b3AoY3AtPnVscF9oYW5kbGVbaWZfdHlwZV0pOworCisJY2xlYXJfYml0KFVMUF9GX0NBTExfUEVORElORywgJmNwLT51bHBfZmxhZ3NbaWZfdHlwZV0pOworfQorCiBzdGF0aWMgdm9pZCBjbmljX3VscF9zdG9wKHN0cnVjdCBjbmljX2RldiAqZGV2KQogewogCXN0cnVjdCBjbmljX2xvY2FsICpjcCA9IGRldi0+Y25pY19wcml2OwogCWludCBpZl90eXBlOwogCi0JY25pY19zZW5kX25sbXNnKGNwLCBJU0NTSV9LRVZFTlRfSUZfRE9XTiwgTlVMTCk7Ci0KLQlmb3IgKGlmX3R5cGUgPSAwOyBpZl90eXBlIDwgTUFYX0NOSUNfVUxQX1RZUEU7IGlmX3R5cGUrKykgewotCQlzdHJ1Y3QgY25pY191bHBfb3BzICp1bHBfb3BzOwotCi0JCW11dGV4X2xvY2soJmNuaWNfbG9jayk7Ci0JCXVscF9vcHMgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGNwLT51bHBfb3BzW2lmX3R5cGVdLAotCQkJCQkJICAgIGxvY2tkZXBfaXNfaGVsZCgmY25pY19sb2NrKSk7Ci0JCWlmICghdWxwX29wcykgewotCQkJbXV0ZXhfdW5sb2NrKCZjbmljX2xvY2spOwotCQkJY29udGludWU7Ci0JCX0KLQkJc2V0X2JpdChVTFBfRl9DQUxMX1BFTkRJTkcsICZjcC0+dWxwX2ZsYWdzW2lmX3R5cGVdKTsKLQkJbXV0ZXhfdW5sb2NrKCZjbmljX2xvY2spOwotCi0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoVUxQX0ZfU1RBUlQsICZjcC0+dWxwX2ZsYWdzW2lmX3R5cGVdKSkKLQkJCXVscF9vcHMtPmNuaWNfc3RvcChjcC0+dWxwX2hhbmRsZVtpZl90eXBlXSk7Ci0KLQkJY2xlYXJfYml0KFVMUF9GX0NBTExfUEVORElORywgJmNwLT51bHBfZmxhZ3NbaWZfdHlwZV0pOwotCX0KKwlmb3IgKGlmX3R5cGUgPSAwOyBpZl90eXBlIDwgTUFYX0NOSUNfVUxQX1RZUEU7IGlmX3R5cGUrKykKKwkJY25pY191bHBfc3RvcF9vbmUoY3AsIGlmX3R5cGUpOwogfQogCiBzdGF0aWMgdm9pZCBjbmljX3VscF9zdGFydChzdHJ1Y3QgY25pY19kZXYgKmRldikKQEAgLTMwMzksNiArMzA0NSwxMiBAQAogCiAJCWNuaWNfcHV0KGRldik7CiAJCWJyZWFrOworCWNhc2UgQ05JQ19DVExfU1RPUF9JU0NTSV9DTUQ6IHsKKwkJc3RydWN0IGNuaWNfbG9jYWwgKmNwID0gZGV2LT5jbmljX3ByaXY7CisJCXNldF9iaXQoQ05JQ19MQ0xfRkxfU1RPUF9JU0NTSSwgJmNwLT5jbmljX2xvY2FsX2ZsYWdzKTsKKwkJcXVldWVfZGVsYXllZF93b3JrKGNuaWNfd3EsICZjcC0+ZGVsZXRlX3Rhc2ssIDApOworCQlicmVhazsKKwl9CiAJY2FzZSBDTklDX0NUTF9DT01QTEVUSU9OX0NNRDogewogCQl1MzIgY2lkID0gQk5YMlhfU1dfQ0lEKGluZm8tPmRhdGEuY29tcC5jaWQpOwogCQl1MzIgbDVfY2lkOwpAQCAtMzU2Miw4ICszNTc0LDEyIEBACiAKIHN0YXRpYyBpbnQgY25pY19jbV9jb25uZWN0KHN0cnVjdCBjbmljX3NvY2sgKmNzaywgc3RydWN0IGNuaWNfc29ja2FkZHIgKnNhZGRyKQogeworCXN0cnVjdCBjbmljX2xvY2FsICpjcCA9IGNzay0+ZGV2LT5jbmljX3ByaXY7CiAJaW50IGVyciA9IDA7CiAKKwlpZiAoY3AtPmV0aGRldi0+ZHJ2X3N0YXRlICYgQ05JQ19EUlZfU1RBVEVfTk9fSVNDU0kpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwogCWlmICghY25pY19pbl91c2UoY3NrKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTM5NjUsNiArMzk4MSwxNSBAQAogCWNwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjbmljX2xvY2FsLCBkZWxldGVfdGFzay53b3JrKTsKIAlkZXYgPSBjcC0+ZGV2OwogCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChDTklDX0xDTF9GTF9TVE9QX0lTQ1NJLCAmY3AtPmNuaWNfbG9jYWxfZmxhZ3MpKSB7CisJCXN0cnVjdCBkcnZfY3RsX2luZm8gaW5mbzsKKworCQljbmljX3VscF9zdG9wX29uZShjcCwgQ05JQ19VTFBfSVNDU0kpOworCisJCWluZm8uY21kID0gRFJWX0NUTF9JU0NTSV9TVE9QUEVEX0NNRDsKKwkJY3AtPmV0aGRldi0+ZHJ2X2N0bChkZXYtPm5ldGRldiwgJmluZm8pOworCX0KKwogCWZvciAoaSA9IDA7IGkgPCBjcC0+bWF4X2NpZF9zcGFjZTsgaSsrKSB7CiAJCXN0cnVjdCBjbmljX2NvbnRleHQgKmN0eCA9ICZjcC0+Y3R4X3RibFtpXTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY25pYy5oIGIvZHJpdmVycy9uZXQvY25pYy5oCmluZGV4IDQ0NTYyNjAuLjMzNjdhNmQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jbmljLmgKKysrIGIvZHJpdmVycy9uZXQvY25pYy5oCkBAIC0yMjYsNiArMjI2LDcgQEAKICNkZWZpbmUJQ05JQ19MQ0xfRkxfS1dRX0lOSVQJCTB4MAogI2RlZmluZQlDTklDX0xDTF9GTF9MMl9XQUlUCQkweDEKICNkZWZpbmUJQ05JQ19MQ0xfRkxfUklOR1NfSU5JVEVECTB4MgorI2RlZmluZQlDTklDX0xDTF9GTF9TVE9QX0lTQ1NJCQkweDQKIAogCXN0cnVjdCBjbmljX2RldiAqZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jbmljX2lmLmggYi9kcml2ZXJzL25ldC9jbmljX2lmLmgKaW5kZXggZTAxYjQ5ZS4uZmRkOGU0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY25pY19pZi5oCisrKyBiL2RyaXZlcnMvbmV0L2NuaWNfaWYuaApAQCAtMTIsOCArMTIsOCBAQAogI2lmbmRlZiBDTklDX0lGX0gKICNkZWZpbmUgQ05JQ19JRl9ICiAKLSNkZWZpbmUgQ05JQ19NT0RVTEVfVkVSU0lPTgkiMi4yLjEzIgotI2RlZmluZSBDTklDX01PRFVMRV9SRUxEQVRFCSJKYW4gMzEsIDIwMTEiCisjZGVmaW5lIENOSUNfTU9EVUxFX1ZFUlNJT04JIjIuMi4xNCIKKyNkZWZpbmUgQ05JQ19NT0RVTEVfUkVMREFURQkiTWFyIDMwLCAyMDExIgogCiAjZGVmaW5lIENOSUNfVUxQX1JETUEJCTAKICNkZWZpbmUgQ05JQ19VTFBfSVNDU0kJCTEKQEAgLTg1LDYgKzg1LDcgQEAKICNkZWZpbmUgQ05JQ19DVExfU1RPUF9DTUQJCTEKICNkZWZpbmUgQ05JQ19DVExfU1RBUlRfQ01ECQkyCiAjZGVmaW5lIENOSUNfQ1RMX0NPTVBMRVRJT05fQ01ECQkzCisjZGVmaW5lIENOSUNfQ1RMX1NUT1BfSVNDU0lfQ01ECQk0CiAKICNkZWZpbmUgRFJWX0NUTF9JT19XUl9DTUQJCTB4MTAxCiAjZGVmaW5lIERSVl9DVExfSU9fUkRfQ01ECQkweDEwMgpAQCAtOTQsNiArOTUsNyBAQAogI2RlZmluZSBEUlZfQ1RMX1NUQVJUX0wyX0NNRAkJMHgxMDYKICNkZWZpbmUgRFJWX0NUTF9TVE9QX0wyX0NNRAkJMHgxMDcKICNkZWZpbmUgRFJWX0NUTF9SRVRfTDJfU1BRX0NSRURJVF9DTUQJMHgxMGMKKyNkZWZpbmUgRFJWX0NUTF9JU0NTSV9TVE9QUEVEX0NNRAkweDEwZAogCiBzdHJ1Y3QgY25pY19jdGxfY29tcGxldGlvbiB7CiAJdTMyCWNpZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jIGIvZHJpdmVycy9uZXQvY3Jpcy9ldGhfdjEwLmMKaW5kZXggOWQyNjdkMy4uZTY2YWNlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3Jpcy9ldGhfdjEwLmMKKysrIGIvZHJpdmVycy9uZXQvY3Jpcy9ldGhfdjEwLmMKQEAgLTQ5MSw4ICs0OTEsOCBAQAogCiAJLyogYWxsb2NhdGUgdGhlIGlycSBjb3JyZXNwb25kaW5nIHRvIHRoZSByZWNlaXZpbmcgRE1BICovCiAKLQlpZiAocmVxdWVzdF9pcnEoTkVUV09SS19ETUFfUlhfSVJRX05CUiwgZTEwMHJ4dHhfaW50ZXJydXB0LAotCQkJSVJRRl9TQU1QTEVfUkFORE9NLCBjYXJkbmFtZSwgKHZvaWQgKilkZXYpKSB7CisJaWYgKHJlcXVlc3RfaXJxKE5FVFdPUktfRE1BX1JYX0lSUV9OQlIsIGUxMDByeHR4X2ludGVycnVwdCwgMCwgY2FyZG5hbWUsCisJCQkodm9pZCAqKWRldikpIHsKIAkJZ290byBncmFjZV9leGl0MDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2FkYXB0ZXIuaCBiL2RyaXZlcnMvbmV0L2N4Z2IzL2FkYXB0ZXIuaAppbmRleCBlZjY3YmU1Li43MzAwZGU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9hZGFwdGVyLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvYWRhcHRlci5oCkBAIC01MCwxMSArNTAsNiBAQAogc3RydWN0IHNnZV9xc2V0Owogc3RydWN0IHBvcnRfaW5mbzsKIAotZW51bSB7CQkJLyogcnhfb2ZmbG9hZCBmbGFncyAqLwotCVQzX1JYX0NTVU0JPSAxIDw8IDAsCi0JVDNfTFJPCQk9IDEgPDwgMSwKLX07Ci0KIGVudW0gbWFjX2lkeF90eXBlcyB7CiAJTEFOX01BQ19JRFgJPSAwLAogCVNBTl9NQUNfSURYLApAQCAtNzQsNyArNjksNiBAQAogCXN0cnVjdCB2bGFuX2dyb3VwICp2bGFuX2dycDsKIAlzdHJ1Y3Qgc2dlX3FzZXQgKnFzOwogCXU4IHBvcnRfaWQ7Ci0JdTggcnhfb2ZmbG9hZDsKIAl1OCBucXNldHM7CiAJdTggZmlyc3RfcXNldDsKIAlzdHJ1Y3QgY3BoeSBwaHk7CkBAIC0yMTIsNyArMjA2LDYgQEAKIAlzdHJ1Y3Qgc2dlX2ZsIGZsW1NHRV9SWFFfUEVSX1NFVF07CiAJc3RydWN0IHNnZV90eHEgdHhxW1NHRV9UWFFfUEVSX1NFVF07CiAJaW50IG5vbWVtOwotCWludCBscm9fZW5hYmxlZDsKIAl2b2lkICpscm9fdmE7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eF9xOwkvKiBhc3NvY2lhdGVkIG5ldGRldiBUWCBxdWV1ZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvY29tbW9uLmggYi9kcml2ZXJzL25ldC9jeGdiMy9jb21tb24uaAppbmRleCA1Y2NiNzdkLi4wNTZlZThjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9jb21tb24uaAorKysgYi9kcml2ZXJzL25ldC9jeGdiMy9jb21tb24uaApAQCAtMzE3LDcgKzMxNyw2IEBACiAKIHN0cnVjdCBxc2V0X3BhcmFtcyB7CQkvKiBTR0UgcXVldWUgc2V0IHBhcmFtZXRlcnMgKi8KIAl1bnNpZ25lZCBpbnQgcG9sbGluZzsJLyogcG9sbGluZy9pbnRlcnJ1cHQgc2VydmljZSBmb3IgcnNwcSAqLwotCXVuc2lnbmVkIGludCBscm87CS8qIGxhcmdlIHJlY2VpdmUgb2ZmbG9hZCAqLwogCXVuc2lnbmVkIGludCBjb2FsZXNjZV91c2VjczsJLyogaXJxIGNvYWxlc2NpbmcgdGltZXIgKi8KIAl1bnNpZ25lZCBpbnQgcnNwcV9zaXplOwkvKiAjIG9mIGVudHJpZXMgaW4gcmVzcG9uc2UgcXVldWUgKi8KIAl1bnNpZ25lZCBpbnQgZmxfc2l6ZTsJLyogIyBvZiBlbnRyaWVzIGluIHJlZ3VsYXIgZnJlZSBsaXN0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19tYWluLmMgYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19tYWluLmMKaW5kZXggOTEwODkzMS4uOTA4MWNlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX21haW4uYwpAQCAtNjQ0LDI2ICs2NDQsNiBAQAogfQogCiAvKioKLSAqCXNldF9xc2V0X2xybyAtIFR1cm4gYSBxdWV1ZSBzZXQncyBMUk8gY2FwYWJpbGl0eSBvbiBhbmQgb2ZmCi0gKglAZGV2OiB0aGUgZGV2aWNlIHRoZSBxc2V0IGlzIGF0dGFjaGVkIHRvCi0gKglAcXNldF9pZHg6IHRoZSBxdWV1ZSBzZXQgaW5kZXgKLSAqCUB2YWw6IHRoZSBMUk8gc3dpdGNoCi0gKgotICoJU2V0cyBMUk8gb24gb3Igb2ZmIGZvciBhIHBhcnRpY3VsYXIgcXVldWUgc2V0LgotICoJdGhlIGRldmljZSdzIGZlYXR1cmVzIGZsYWcgaXMgdXBkYXRlZCB0byByZWZsZWN0IHRoZSBMUk8KLSAqCWNhcGFiaWxpdHkgd2hlbiBhbGwgcXVldWVzIGJlbG9uZ2luZyB0byB0aGUgZGV2aWNlIGFyZQotICoJaW4gdGhlIHNhbWUgc3RhdGUuCi0gKi8KLXN0YXRpYyB2b2lkIHNldF9xc2V0X2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcXNldF9pZHgsIGludCB2YWwpCi17Ci0Jc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gcGktPmFkYXB0ZXI7Ci0KLQlhZGFwdGVyLT5wYXJhbXMuc2dlLnFzZXRbcXNldF9pZHhdLmxybyA9ICEhdmFsOwotCWFkYXB0ZXItPnNnZS5xc1txc2V0X2lkeF0ubHJvX2VuYWJsZWQgPSAhIXZhbDsKLX0KLQotLyoqCiAgKglzZXR1cF9zZ2VfcXNldHMgLSBjb25maWd1cmUgU0dFIFR4L1J4L3Jlc3BvbnNlIHF1ZXVlcwogICoJQGFkYXA6IHRoZSBhZGFwdGVyCiAgKgpAQCAtNjg1LDcgKzY2NSw2IEBACiAKIAkJcGktPnFzID0gJmFkYXAtPnNnZS5xc1twaS0+Zmlyc3RfcXNldF07CiAJCWZvciAoaiA9IDA7IGogPCBwaS0+bnFzZXRzOyArK2osICsrcXNldF9pZHgpIHsKLQkJCXNldF9xc2V0X2xybyhkZXYsIHFzZXRfaWR4LCBwaS0+cnhfb2ZmbG9hZCAmIFQzX0xSTyk7CiAJCQllcnIgPSB0M19zZ2VfYWxsb2NfcXNldChhZGFwLCBxc2V0X2lkeCwgMSwKIAkJCQkoYWRhcC0+ZmxhZ3MgJiBVU0lOR19NU0lYKSA/IHFzZXRfaWR4ICsgMSA6CiAJCQkJCQkJICAgICBpcnFfaWR4LApAQCAtMTc0OSwyMyArMTcyOCwyNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4Z2IzX3BoeXNfaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCitzdGF0aWMgaW50IHNldF9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgICAgICBlbnVtIGV0aHRvb2xfcGh5c19pZF9zdGF0ZSBzdGF0ZSkKIHsKIAlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBwaS0+YWRhcHRlcjsKLQlpbnQgaTsKIAotCWlmIChkYXRhID09IDApCi0JCWRhdGEgPSAyOworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIEVUSFRPT0xfSURfQUNUSVZFOgorCQlyZXR1cm4gMTsJLyogY3ljbGUgb24vb2ZmIG9uY2UgcGVyIHNlY29uZCAqLwogCi0JZm9yIChpID0gMDsgaSA8IGRhdGEgKiAyOyBpKyspIHsKKwljYXNlIEVUSFRPT0xfSURfT0ZGOgorCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXB0ZXIsIEFfVDNEQkdfR1BJT19FTiwgRl9HUElPMF9PVVRfVkFMLCAwKTsKKwkJYnJlYWs7CisKKwljYXNlIEVUSFRPT0xfSURfT046CisJY2FzZSBFVEhUT09MX0lEX0lOQUNUSVZFOgogCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXB0ZXIsIEFfVDNEQkdfR1BJT19FTiwgRl9HUElPMF9PVVRfVkFMLAotCQkJCSAoaSAmIDEpID8gRl9HUElPMF9PVVRfVkFMIDogMCk7Ci0JCWlmIChtc2xlZXBfaW50ZXJydXB0aWJsZSg1MDApKQotCQkJYnJlYWs7Ci0JfQotCXQzX3NldF9yZWdfZmllbGQoYWRhcHRlciwgQV9UM0RCR19HUElPX0VOLCBGX0dQSU8wX09VVF9WQUwsCiAJCQkgRl9HUElPMF9PVVRfVkFMKTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTc3NywxMCArMTc1OSwxMCBAQAogCWNtZC0+YWR2ZXJ0aXNpbmcgPSBwLT5saW5rX2NvbmZpZy5hZHZlcnRpc2luZzsKIAogCWlmIChuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKLQkJY21kLT5zcGVlZCA9IHAtPmxpbmtfY29uZmlnLnNwZWVkOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCBwLT5saW5rX2NvbmZpZy5zcGVlZCk7CiAJCWNtZC0+ZHVwbGV4ID0gcC0+bGlua19jb25maWcuZHVwbGV4OwogCX0gZWxzZSB7Ci0JCWNtZC0+c3BlZWQgPSAtMTsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgLTEpOwogCQljbWQtPmR1cGxleCA9IC0xOwogCX0KIApAQCAtMTgzOSw3ICsxODIxLDggQEAKIAkJICogYmVpbmcgcmVxdWVzdGVkLgogCQkgKi8KIAkJaWYgKGNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUpIHsKLQkJCWludCBjYXAgPSBzcGVlZF9kdXBsZXhfdG9fY2FwcyhjbWQtPnNwZWVkLCBjbWQtPmR1cGxleCk7CisJCQl1MzIgc3BlZWQgPSBldGh0b29sX2NtZF9zcGVlZChjbWQpOworCQkJaW50IGNhcCA9IHNwZWVkX2R1cGxleF90b19jYXBzKHNwZWVkLCBjbWQtPmR1cGxleCk7CiAJCQlpZiAobGMtPnN1cHBvcnRlZCAmIGNhcCkKIAkJCQlyZXR1cm4gMDsKIAkJfQpAQCAtMTg0NywxMSArMTgzMCwxMiBAQAogCX0KIAogCWlmIChjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19ESVNBQkxFKSB7Ci0JCWludCBjYXAgPSBzcGVlZF9kdXBsZXhfdG9fY2FwcyhjbWQtPnNwZWVkLCBjbWQtPmR1cGxleCk7CisJCXUzMiBzcGVlZCA9IGV0aHRvb2xfY21kX3NwZWVkKGNtZCk7CisJCWludCBjYXAgPSBzcGVlZF9kdXBsZXhfdG9fY2FwcyhzcGVlZCwgY21kLT5kdXBsZXgpOwogCi0JCWlmICghKGxjLT5zdXBwb3J0ZWQgJiBjYXApIHx8IGNtZC0+c3BlZWQgPT0gU1BFRURfMTAwMCkKKwkJaWYgKCEobGMtPnN1cHBvcnRlZCAmIGNhcCkgfHwgKHNwZWVkID09IFNQRUVEXzEwMDApKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWxjLT5yZXF1ZXN0ZWRfc3BlZWQgPSBjbWQtPnNwZWVkOworCQlsYy0+cmVxdWVzdGVkX3NwZWVkID0gc3BlZWQ7CiAJCWxjLT5yZXF1ZXN0ZWRfZHVwbGV4ID0gY21kLT5kdXBsZXg7CiAJCWxjLT5hZHZlcnRpc2luZyA9IDA7CiAJfSBlbHNlIHsKQEAgLTE5MDcsMjkgKzE4OTEsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTMyIGdldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHBvcnRfaW5mbyAqcCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlyZXR1cm4gcC0+cnhfb2ZmbG9hZCAmIFQzX1JYX0NTVU07Ci19Ci0KLXN0YXRpYyBpbnQgc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IHBvcnRfaW5mbyAqcCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoZGF0YSkgewotCQlwLT5yeF9vZmZsb2FkIHw9IFQzX1JYX0NTVU07Ci0JfSBlbHNlIHsKLQkJaW50IGk7Ci0KLQkJcC0+cnhfb2ZmbG9hZCAmPSB+KFQzX1JYX0NTVU0gfCBUM19MUk8pOwotCQlmb3IgKGkgPSBwLT5maXJzdF9xc2V0OyBpIDwgcC0+Zmlyc3RfcXNldCArIHAtPm5xc2V0czsgaSsrKQotCQkJc2V0X3FzZXRfbHJvKGRldiwgaSwgMCk7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBnZXRfc2dlX3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqZSkKIHsKIAlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGRldik7CkBAIC0yMTAxLDIwICsyMDYyLDE1IEBACiAJLnNldF9lZXByb20gPSBzZXRfZWVwcm9tLAogCS5nZXRfcGF1c2VwYXJhbSA9IGdldF9wYXVzZXBhcmFtLAogCS5zZXRfcGF1c2VwYXJhbSA9IHNldF9wYXVzZXBhcmFtLAotCS5nZXRfcnhfY3N1bSA9IGdldF9yeF9jc3VtLAotCS5zZXRfcnhfY3N1bSA9IHNldF9yeF9jc3VtLAotCS5zZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3Bfc2V0X3R4X2NzdW0sCi0JLnNldF9zZyA9IGV0aHRvb2xfb3Bfc2V0X3NnLAogCS5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCiAJLmdldF9zdHJpbmdzID0gZ2V0X3N0cmluZ3MsCi0JLnBoeXNfaWQgPSBjeGdiM19waHlzX2lkLAorCS5zZXRfcGh5c19pZCA9IHNldF9waHlzX2lkLAogCS5ud2F5X3Jlc2V0ID0gcmVzdGFydF9hdXRvbmVnLAogCS5nZXRfc3NldF9jb3VudCA9IGdldF9zc2V0X2NvdW50LAogCS5nZXRfZXRodG9vbF9zdGF0cyA9IGdldF9zdGF0cywKIAkuZ2V0X3JlZ3NfbGVuID0gZ2V0X3JlZ3NfbGVuLAogCS5nZXRfcmVncyA9IGdldF9yZWdzLAogCS5nZXRfd29sID0gZ2V0X3dvbCwKLQkuc2V0X3RzbyA9IGV0aHRvb2xfb3Bfc2V0X3RzbywKIH07CiAKIHN0YXRpYyBpbnQgaW5fcmFuZ2UoaW50IHZhbCwgaW50IGxvLCBpbnQgaGkpCkBAIC0yMTYyLDE1ICsyMTE4LDYgQEAKIAkJCSAgICAgIE1BWF9SU1BRX0VOVFJJRVMpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJaWYgKChhZGFwdGVyLT5mbGFncyAmIEZVTExfSU5JVF9ET05FKSAmJiB0LmxybyA+IDApCi0JCQlmb3JfZWFjaF9wb3J0KGFkYXB0ZXIsIGkpIHsKLQkJCQlwaSA9IGFkYXAycGluZm8oYWRhcHRlciwgaSk7Ci0JCQkJaWYgKHQucXNldF9pZHggPj0gcGktPmZpcnN0X3FzZXQgJiYKLQkJCQkgICAgdC5xc2V0X2lkeCA8IHBpLT5maXJzdF9xc2V0ICsgcGktPm5xc2V0cyAmJgotCQkJCSAgICAhKHBpLT5yeF9vZmZsb2FkICYgVDNfUlhfQ1NVTSkpCi0JCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCiAJCWlmICgoYWRhcHRlci0+ZmxhZ3MgJiBGVUxMX0lOSVRfRE9ORSkgJiYKIAkJCSh0LnJzcHFfc2l6ZSA+PSAwIHx8IHQuZmxfc2l6ZVswXSA+PSAwIHx8CiAJCQl0LmZsX3NpemVbMV0gPj0gMCB8fCB0LnR4cV9zaXplWzBdID49IDAgfHwKQEAgLTIyMzEsOCArMjE3OCwxNCBAQAogCQkJCX0KIAkJCX0KIAkJfQotCQlpZiAodC5scm8gPj0gMCkKLQkJCXNldF9xc2V0X2xybyhkZXYsIHQucXNldF9pZHgsIHQubHJvKTsKKworCQlpZiAodC5scm8gPj0gMCkgeworCQkJaWYgKHQubHJvKQorCQkJCWRldi0+d2FudGVkX2ZlYXR1cmVzIHw9IE5FVElGX0ZfR1JPOworCQkJZWxzZQorCQkJCWRldi0+d2FudGVkX2ZlYXR1cmVzICY9IH5ORVRJRl9GX0dSTzsKKwkJCW5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTsKKwkJfQogCiAJCWJyZWFrOwogCX0KQEAgLTIyNjYsNyArMjIxOSw3IEBACiAJCXQuZmxfc2l6ZVswXSA9IHEtPmZsX3NpemU7CiAJCXQuZmxfc2l6ZVsxXSA9IHEtPmp1bWJvX3NpemU7CiAJCXQucG9sbGluZyA9IHEtPnBvbGxpbmc7Ci0JCXQubHJvID0gcS0+bHJvOworCQl0LmxybyA9ICEhKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0dSTyk7CiAJCXQuaW50cl9sYXQgPSBxLT5jb2FsZXNjZV91c2VjczsKIAkJdC5jb25nX3RocmVzID0gcS0+Y29uZ190aHJlczsKIAkJdC5xbnVtID0gcTE7CkBAIC0zMzA0LDE4ICszMjU3LDE4IEBACiAJCWFkYXB0ZXItPnBvcnRbaV0gPSBuZXRkZXY7CiAJCXBpID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAkJcGktPmFkYXB0ZXIgPSBhZGFwdGVyOwotCQlwaS0+cnhfb2ZmbG9hZCA9IFQzX1JYX0NTVU0gfCBUM19MUk87CiAJCXBpLT5wb3J0X2lkID0gaTsKIAkJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKIAkJbmV0ZGV2LT5pcnEgPSBwZGV2LT5pcnE7CiAJCW5ldGRldi0+bWVtX3N0YXJ0ID0gbW1pb19zdGFydDsKIAkJbmV0ZGV2LT5tZW1fZW5kID0gbW1pb19zdGFydCArIG1taW9fbGVuIC0gMTsKLQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9UU087Ci0JCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9HUk87CisJCW5ldGRldi0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwKKwkJCU5FVElGX0ZfVFNPIHwgTkVUSUZfRl9SWENTVU07CisJCW5ldGRldi0+ZmVhdHVyZXMgfD0gbmV0ZGV2LT5od19mZWF0dXJlcyB8CisJCQlORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlg7CiAJCWlmIChwY2lfdXNpbmdfZGFjKQogCQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAKLQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlg7CiAJCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZjeGdiX25ldGRldl9vcHM7CiAJCVNFVF9FVEhUT09MX09QUyhuZXRkZXYsICZjeGdiX2V0aHRvb2xfb3BzKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9zZ2UuYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3NnZS5jCmluZGV4IGJmYTJkNTYuLjNmNTYyYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL3NnZS5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3NnZS5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvdGNwLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlIDxuZXQvYXJwLmg+CiAjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAicmVncy5oIgpAQCAtMjAxOSw3ICsyMDIwLDcgQEAKIAlza2JfcHVsbChza2IsIHNpemVvZigqcCkgKyBwYWQpOwogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGFkYXAtPnBvcnRbcC0+aWZmXSk7CiAJcGkgPSBuZXRkZXZfcHJpdihza2ItPmRldik7Ci0JaWYgKChwaS0+cnhfb2ZmbG9hZCAmIFQzX1JYX0NTVU0pICYmIHAtPmNzdW1fdmFsaWQgJiYKKwlpZiAoKHNrYi0+ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSAmJiBwLT5jc3VtX3ZhbGlkICYmCiAJICAgIHAtPmNzdW0gPT0gaHRvbnMoMHhmZmZmKSAmJiAhcC0+ZnJhZ21lbnQpIHsKIAkJcXMtPnBvcnRfc3RhdHNbU0dFX1BTVEFUX1JYX0NTVU1fR09PRF0rKzsKIAkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKQEAgLTIxMjAsNyArMjEyMSw3IEBACiAJCW9mZnNldCA9IDIgKyBzaXplb2Yoc3RydWN0IGNwbF9yeF9wa3QpOwogCQljcGwgPSBxcy0+bHJvX3ZhID0gc2QtPnBnX2NodW5rLnZhICsgMjsKIAotCQlpZiAoKHBpLT5yeF9vZmZsb2FkICYgVDNfUlhfQ1NVTSkgJiYKKwkJaWYgKChxcy0+bmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSAmJgogCQkgICAgIGNwbC0+Y3N1bV92YWxpZCAmJiBjcGwtPmNzdW0gPT0gaHRvbnMoMHhmZmZmKSkgewogCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAkJCXFzLT5wb3J0X3N0YXRzW1NHRV9QU1RBVF9SWF9DU1VNX0dPT0RdKys7CkBAIC0yMjg1LDcgKzIyODYsOCBAQAogCXEtPm5leHRfaG9sZG9mZiA9IHEtPmhvbGRvZmZfdG1yOwogCiAJd2hpbGUgKGxpa2VseShidWRnZXRfbGVmdCAmJiBpc19uZXdfcmVzcG9uc2UociwgcSkpKSB7Ci0JCWludCBwYWNrZXRfY29tcGxldGUsIGV0aCwgZXRocGFkID0gMiwgbHJvID0gcXMtPmxyb19lbmFibGVkOworCQlpbnQgcGFja2V0X2NvbXBsZXRlLCBldGgsIGV0aHBhZCA9IDI7CisJCWludCBscm8gPSAhIShxcy0+bmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfR1JPKTsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CiAJCXUzMiBsZW4sIGZsYWdzOwogCQlfX2JlMzIgcnNzX2hpLCByc3NfbG87CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiNC9jeGdiNC5oIGIvZHJpdmVycy9uZXQvY3hnYjQvY3hnYjQuaAppbmRleCAwMWQ0OWVhLi5iYzk5ODJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiNC9jeGdiNC5oCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2I0L2N4Z2I0LmgKQEAgLTI5MCw3ICsyOTAsNiBAQAogCXU4ICAgICBwb3J0X2lkOwogCXU4ICAgICB0eF9jaGFuOwogCXU4ICAgICBscG9ydDsgICAgICAgICAgICAgICAgIC8qIGFzc29jaWF0ZWQgb2ZmbG9hZCBsb2dpY2FsIHBvcnQgKi8KLQl1OCAgICAgcnhfb2ZmbG9hZDsgICAgICAgICAgICAvKiBDU08sIGV0YyAqLwogCXU4ICAgICBucXNldHM7ICAgICAgICAgICAgICAgIC8qICMgb2YgcXNldHMgKi8KIAl1OCAgICAgZmlyc3RfcXNldDsgICAgICAgICAgICAvKiBpbmRleCBvZiBmaXJzdCBxc2V0ICovCiAJdTggICAgIHJzc19tb2RlOwpAQCAtMjk4LDExICsyOTcsNiBAQAogCXUxNiAgICpyc3M7CiB9OwogCi0vKiBwb3J0X2luZm8ucnhfb2ZmbG9hZCBmbGFncyAqLwotZW51bSB7Ci0JUlhfQ1NPID0gMSA8PCAwLAotfTsKLQogc3RydWN0IGRlbnRyeTsKIHN0cnVjdCB3b3JrX3N0cnVjdDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjQvY3hnYjRfbWFpbi5jIGIvZHJpdmVycy9uZXQvY3hnYjQvY3hnYjRfbWFpbi5jCmluZGV4IDUzNTJjOGEuLjdlM2NmYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2I0L2N4Z2I0X21haW4uYworKysgYi9kcml2ZXJzL25ldC9jeGdiNC9jeGdiNF9tYWluLmMKQEAgLTEzMzYsMTUgKzEzMzYsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpZGVudGlmeV9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQorc3RhdGljIGludCBpZGVudGlmeV9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgZW51bSBldGh0b29sX3BoeXNfaWRfc3RhdGUgc3RhdGUpCiB7CisJdW5zaWduZWQgaW50IHZhbDsKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcCA9IG5ldGRldjJhZGFwKGRldik7CiAKLQlpZiAoZGF0YSA9PSAwKQotCQlkYXRhID0gMjsgICAgIC8qIGRlZmF1bHQgdG8gMiBzZWNvbmRzICovCisJaWYgKHN0YXRlID09IEVUSFRPT0xfSURfQUNUSVZFKQorCQl2YWwgPSAweGZmZmY7CisJZWxzZSBpZiAoc3RhdGUgPT0gRVRIVE9PTF9JRF9JTkFDVElWRSkKKwkJdmFsID0gMDsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIHQ0X2lkZW50aWZ5X3BvcnQoYWRhcCwgYWRhcC0+Zm4sIG5ldGRldjJwaW5mbyhkZXYpLT52aWlkLAotCQkJCWRhdGEgKiA1KTsKKwlyZXR1cm4gdDRfaWRlbnRpZnlfcG9ydChhZGFwLCBhZGFwLT5mbiwgbmV0ZGV2MnBpbmZvKGRldiktPnZpaWQsIHZhbCk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnJvbV9md19saW5rY2Fwcyh1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNhcHMpCkBAIC0xNDMxLDcgKzE0MzYsOCBAQAogCWNtZC0+c3VwcG9ydGVkID0gZnJvbV9md19saW5rY2FwcyhwLT5wb3J0X3R5cGUsIHAtPmxpbmtfY2ZnLnN1cHBvcnRlZCk7CiAJY21kLT5hZHZlcnRpc2luZyA9IGZyb21fZndfbGlua2NhcHMocC0+cG9ydF90eXBlLAogCQkJCQkgICAgcC0+bGlua19jZmcuYWR2ZXJ0aXNpbmcpOwotCWNtZC0+c3BlZWQgPSBuZXRpZl9jYXJyaWVyX29rKGRldikgPyBwLT5saW5rX2NmZy5zcGVlZCA6IDA7CisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwKKwkJCSAgICAgIG5ldGlmX2NhcnJpZXJfb2soZGV2KSA/IHAtPmxpbmtfY2ZnLnNwZWVkIDogMCk7CiAJY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKIAljbWQtPmF1dG9uZWcgPSBwLT5saW5rX2NmZy5hdXRvbmVnOwogCWNtZC0+bWF4dHhwa3QgPSAwOwpAQCAtMTQ1NSw2ICsxNDYxLDcgQEAKIAl1bnNpZ25lZCBpbnQgY2FwOwogCXN0cnVjdCBwb3J0X2luZm8gKnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBsaW5rX2NvbmZpZyAqbGMgPSAmcC0+bGlua19jZmc7CisJdTMyIHNwZWVkID0gZXRodG9vbF9jbWRfc3BlZWQoY21kKTsKIAogCWlmIChjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkgICAgIC8qIG9ubHkgZnVsbC1kdXBsZXggc3VwcG9ydGVkICovCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTQ2NSwxNiArMTQ3MiwxNiBAQAogCQkgKiBiZWluZyByZXF1ZXN0ZWQuCiAJCSAqLwogCQlpZiAoY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSAmJgotCQkgICAgKGxjLT5zdXBwb3J0ZWQgJiBzcGVlZF90b19jYXBzKGNtZC0+c3BlZWQpKSkKLQkJCQlyZXR1cm4gMDsKKwkJICAgIChsYy0+c3VwcG9ydGVkICYgc3BlZWRfdG9fY2FwcyhzcGVlZCkpKQorCQkJcmV0dXJuIDA7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19ESVNBQkxFKSB7Ci0JCWNhcCA9IHNwZWVkX3RvX2NhcHMoY21kLT5zcGVlZCk7CisJCWNhcCA9IHNwZWVkX3RvX2NhcHMoc3BlZWQpOwogCi0JCWlmICghKGxjLT5zdXBwb3J0ZWQgJiBjYXApIHx8IGNtZC0+c3BlZWQgPT0gU1BFRURfMTAwMCB8fAotCQkgICAgY21kLT5zcGVlZCA9PSBTUEVFRF8xMDAwMCkKKwkJaWYgKCEobGMtPnN1cHBvcnRlZCAmIGNhcCkgfHwgKHNwZWVkID09IFNQRUVEXzEwMDApIHx8CisJCSAgICAoc3BlZWQgPT0gU1BFRURfMTAwMDApKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWxjLT5yZXF1ZXN0ZWRfc3BlZWQgPSBjYXA7CiAJCWxjLT5hZHZlcnRpc2luZyA9IDA7CkBAIC0xNTI2LDI0ICsxNTMzLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHUzMiBnZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBwb3J0X2luZm8gKnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JcmV0dXJuIHAtPnJ4X29mZmxvYWQgJiBSWF9DU087Ci19Ci0KLXN0YXRpYyBpbnQgc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IHBvcnRfaW5mbyAqcCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoZGF0YSkKLQkJcC0+cnhfb2ZmbG9hZCB8PSBSWF9DU087Ci0JZWxzZQotCQlwLT5yeF9vZmZsb2FkICY9IH5SWF9DU087Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIGdldF9zZ2VfcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICplKQogewogCWNvbnN0IHN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTE4NjUsMzYgKzE4NTQsMjAgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0jZGVmaW5lIFRTT19GTEFHUyAoTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfCBORVRJRl9GX1RTT19FQ04pCi0KLXN0YXRpYyBpbnQgc2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgdmFsdWUpCitzdGF0aWMgaW50IGN4Z2Jfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcykKIHsKLQlpZiAodmFsdWUpCi0JCWRldi0+ZmVhdHVyZXMgfD0gVFNPX0ZMQUdTOwotCWVsc2UKLQkJZGV2LT5mZWF0dXJlcyAmPSB+VFNPX0ZMQUdTOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmxhZ3MpCi17CisJY29uc3Qgc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiBjaGFuZ2VkID0gZGV2LT5mZWF0dXJlcyBeIGZlYXR1cmVzOwogCWludCBlcnI7Ci0JdW5zaWduZWQgbG9uZyBvbGRfZmVhdCA9IGRldi0+ZmVhdHVyZXM7CiAKLQllcnIgPSBldGh0b29sX29wX3NldF9mbGFncyhkZXYsIGZsYWdzLCBFVEhfRkxBR19SWEhBU0ggfAotCQkJCSAgIEVUSF9GTEFHX1JYVkxBTiB8IEVUSF9GTEFHX1RYVkxBTik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwlpZiAoIShjaGFuZ2VkICYgTkVUSUZfRl9IV19WTEFOX1JYKSkKKwkJcmV0dXJuIDA7CiAKLQlpZiAoKG9sZF9mZWF0IF4gZGV2LT5mZWF0dXJlcykgJiBORVRJRl9GX0hXX1ZMQU5fUlgpIHsKLQkJY29uc3Qgc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JCWVyciA9IHQ0X3NldF9yeG1vZGUocGktPmFkYXB0ZXIsIHBpLT5hZGFwdGVyLT5mbiwgcGktPnZpaWQsIC0xLAotCQkJCSAgICAtMSwgLTEsIC0xLCAhIShmbGFncyAmIEVUSF9GTEFHX1JYVkxBTiksCi0JCQkJICAgIHRydWUpOwotCQlpZiAoZXJyKQotCQkJZGV2LT5mZWF0dXJlcyA9IG9sZF9mZWF0OwotCX0KKwllcnIgPSB0NF9zZXRfcnhtb2RlKHBpLT5hZGFwdGVyLCBwaS0+YWRhcHRlci0+Zm4sIHBpLT52aWlkLCAtMSwKKwkJCSAgICAtMSwgLTEsIC0xLAorCQkJICAgICEhKGZlYXR1cmVzICYgTkVUSUZfRl9IV19WTEFOX1JYKSwgdHJ1ZSk7CisJaWYgKHVubGlrZWx5KGVycikpCisJCWRldi0+ZmVhdHVyZXMgPSBmZWF0dXJlcyBeIE5FVElGX0ZfSFdfVkxBTl9SWDsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yMDA1LDEzICsxOTc4LDkgQEAKIAkuc2V0X2VlcHJvbSAgICAgICAgPSBzZXRfZWVwcm9tLAogCS5nZXRfcGF1c2VwYXJhbSAgICA9IGdldF9wYXVzZXBhcmFtLAogCS5zZXRfcGF1c2VwYXJhbSAgICA9IHNldF9wYXVzZXBhcmFtLAotCS5nZXRfcnhfY3N1bSAgICAgICA9IGdldF9yeF9jc3VtLAotCS5zZXRfcnhfY3N1bSAgICAgICA9IHNldF9yeF9jc3VtLAotCS5zZXRfdHhfY3N1bSAgICAgICA9IGV0aHRvb2xfb3Bfc2V0X3R4X2lwdjZfY3N1bSwKLQkuc2V0X3NnICAgICAgICAgICAgPSBldGh0b29sX29wX3NldF9zZywKIAkuZ2V0X2xpbmsgICAgICAgICAgPSBldGh0b29sX29wX2dldF9saW5rLAogCS5nZXRfc3RyaW5ncyAgICAgICA9IGdldF9zdHJpbmdzLAotCS5waHlzX2lkICAgICAgICAgICA9IGlkZW50aWZ5X3BvcnQsCisJLnNldF9waHlzX2lkICAgICAgID0gaWRlbnRpZnlfcG9ydCwKIAkubndheV9yZXNldCAgICAgICAgPSByZXN0YXJ0X2F1dG9uZWcsCiAJLmdldF9zc2V0X2NvdW50ICAgID0gZ2V0X3NzZXRfY291bnQsCiAJLmdldF9ldGh0b29sX3N0YXRzID0gZ2V0X3N0YXRzLApAQCAtMjAxOSw4ICsxOTg4LDYgQEAKIAkuZ2V0X3JlZ3MgICAgICAgICAgPSBnZXRfcmVncywKIAkuZ2V0X3dvbCAgICAgICAgICAgPSBnZXRfd29sLAogCS5zZXRfd29sICAgICAgICAgICA9IHNldF93b2wsCi0JLnNldF90c28gICAgICAgICAgID0gc2V0X3RzbywKLQkuc2V0X2ZsYWdzICAgICAgICAgPSBzZXRfZmxhZ3MsCiAJLmdldF9yeG5mYyAgICAgICAgID0gZ2V0X3J4bmZjLAogCS5nZXRfcnhmaF9pbmRpciAgICA9IGdldF9yc3NfdGFibGUsCiAJLnNldF9yeGZoX2luZGlyICAgID0gc2V0X3Jzc190YWJsZSwKQEAgLTI4NzcsNiArMjg0NCw3IEBACiAJLm5kb19nZXRfc3RhdHM2NCAgICAgID0gY3hnYl9nZXRfc3RhdHMsCiAJLm5kb19zZXRfcnhfbW9kZSAgICAgID0gY3hnYl9zZXRfcnhtb2RlLAogCS5uZG9fc2V0X21hY19hZGRyZXNzICA9IGN4Z2Jfc2V0X21hY19hZGRyLAorCS5uZG9fc2V0X2ZlYXR1cmVzICAgICA9IGN4Z2Jfc2V0X2ZlYXR1cmVzLAogCS5uZG9fdmFsaWRhdGVfYWRkciAgICA9IGV0aF92YWxpZGF0ZV9hZGRyLAogCS5uZG9fZG9faW9jdGwgICAgICAgICA9IGN4Z2JfaW9jdGwsCiAJLm5kb19jaGFuZ2VfbXR1ICAgICAgID0gY3hnYl9jaGFuZ2VfbXR1LApAQCAtMzU1OSw2ICszNTI3LDcgQEAKIAkJdDRfZndfYnllKGFkYXB0ZXIsIGFkYXB0ZXItPmZuKTsKIH0KIAorI2RlZmluZSBUU09fRkxBR1MgKE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082IHwgTkVUSUZfRl9UU09fRUNOKQogI2RlZmluZSBWTEFOX0ZFQVQgKE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBUU09fRkxBR1MgfCBcCiAJCSAgIE5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9ISUdIRE1BKQogCkBAIC0zNjYwLDE0ICszNjI5LDE0IEBACiAJCXBpID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAkJcGktPmFkYXB0ZXIgPSBhZGFwdGVyOwogCQlwaS0+eGFjdF9hZGRyX2ZpbHQgPSAtMTsKLQkJcGktPnJ4X29mZmxvYWQgPSBSWF9DU087CiAJCXBpLT5wb3J0X2lkID0gaTsKIAkJbmV0ZGV2LT5pcnEgPSBwZGV2LT5pcnE7CiAKLQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwgVFNPX0ZMQUdTOwotCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNOwotCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfR1JPIHwgTkVUSUZfRl9SWEhBU0ggfCBoaWdoZG1hOwotCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWDsKKwkJbmV0ZGV2LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBUU09fRkxBR1MgfAorCQkJTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU0gfAorCQkJTkVUSUZfRl9SWENTVU0gfCBORVRJRl9GX1JYSEFTSCB8CisJCQlORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlg7CisJCW5ldGRldi0+ZmVhdHVyZXMgfD0gbmV0ZGV2LT5od19mZWF0dXJlcyB8IGhpZ2hkbWE7CiAJCW5ldGRldi0+dmxhbl9mZWF0dXJlcyA9IG5ldGRldi0+ZmVhdHVyZXMgJiBWTEFOX0ZFQVQ7CiAKIAkJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJmN4Z2I0X25ldGRldl9vcHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiNC9zZ2UuYyBiL2RyaXZlcnMvbmV0L2N4Z2I0L3NnZS5jCmluZGV4IDMxMTQ3MWIuLjU2YWRmNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2I0L3NnZS5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2I0L3NnZS5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CiAjaW5jbHVkZSA8bmV0L3RjcC5oPgogI2luY2x1ZGUgImN4Z2I0LmgiCkBAIC0xNTU2LDcgKzE1NTcsNiBAQAogewogCWJvb2wgY3N1bV9vazsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBwb3J0X2luZm8gKnBpOwogCWNvbnN0IHN0cnVjdCBjcGxfcnhfcGt0ICpwa3Q7CiAJc3RydWN0IHNnZV9ldGhfcnhxICpyeHEgPSBjb250YWluZXJfb2YocSwgc3RydWN0IHNnZV9ldGhfcnhxLCByc3BxKTsKIApAQCAtMTU4NCwxMCArMTU4NCw5IEBACiAJaWYgKHNrYi0+ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhIQVNIKQogCQlza2ItPnJ4aGFzaCA9IChfX2ZvcmNlIHUzMilwa3QtPnJzc2hkci5oYXNoX3ZhbDsKIAotCXBpID0gbmV0ZGV2X3ByaXYoc2tiLT5kZXYpOwogCXJ4cS0+c3RhdHMucGt0cysrOwogCi0JaWYgKGNzdW1fb2sgJiYgKHBpLT5yeF9vZmZsb2FkICYgUlhfQ1NPKSAmJgorCWlmIChjc3VtX29rICYmIChxLT5uZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pICYmCiAJICAgIChwa3QtPmwyaW5mbyAmIGh0b25sKFJYRl9VRFAgfCBSWEZfVENQKSkpIHsKIAkJaWYgKCFwa3QtPmlwX2ZyYWcpIHsKIAkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiNHZmL2FkYXB0ZXIuaCBiL2RyaXZlcnMvbmV0L2N4Z2I0dmYvYWRhcHRlci5oCmluZGV4IDQ3NjZiNDEuLjRmZDgyMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2I0dmYvYWRhcHRlci5oCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2I0dmYvYWRhcHRlci5oCkBAIC05NywxNyArOTcsMTEgQEAKIAl1MTYgcnNzX3NpemU7CQkJLyogc2l6ZSBvZiBWSSdzIFJTUyB0YWJsZSBzbGljZSAqLwogCXU4IHBpZHg7CQkJLyogaW5kZXggaW50byBhZGFwdGVyIHBvcnRbXSAqLwogCXU4IHBvcnRfaWQ7CQkJLyogcGh5c2ljYWwgcG9ydCBJRCAqLwotCXU4IHJ4X29mZmxvYWQ7CQkJLyogQ1NPLCBldGMuICovCiAJdTggbnFzZXRzOwkJCS8qICMgb2YgIlF1ZXVlIFNldHMiICovCiAJdTggZmlyc3RfcXNldDsJCQkvKiBpbmRleCBvZiBmaXJzdCAiUXVldWUgU2V0IiAqLwogCXN0cnVjdCBsaW5rX2NvbmZpZyBsaW5rX2NmZzsJLyogcGh5c2ljYWwgcG9ydCBjb25maWd1cmF0aW9uICovCiB9OwogCi0vKiBwb3J0X2luZm8ucnhfb2ZmbG9hZCBmbGFncyAqLwotZW51bSB7Ci0JUlhfQ1NPID0gMSA8PCAwLAotfTsKLQogLyoKICAqIFNjYXR0ZXIgR2F0aGVyIEVuZ2luZSByZXNvdXJjZXMgZm9yIHRoZSAiYWRhcHRlciIuICBPdXIgaW5ncmVzcyBhbmQgZWdyZXNzCiAgKiBxdWV1ZXMgYXJlIG9yZ2FuaXplZCBpbnRvICJRdWV1ZSBTZXRzIiB3aXRoIG9uZSBpbmdyZXNzIGFuZCBvbmUgZWdyZXNzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiNHZmL2N4Z2I0dmZfbWFpbi5jIGIvZHJpdmVycy9uZXQvY3hnYjR2Zi9jeGdiNHZmX21haW4uYwppbmRleCA0NjYxY2JiLi5lNzFjMDhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiNHZmL2N4Z2I0dmZfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2I0dmYvY3hnYjR2Zl9tYWluLmMKQEAgLTExNjcsNyArMTE2Nyw4IEBACiAKIAljbWQtPnN1cHBvcnRlZCA9IHBpLT5saW5rX2NmZy5zdXBwb3J0ZWQ7CiAJY21kLT5hZHZlcnRpc2luZyA9IHBpLT5saW5rX2NmZy5hZHZlcnRpc2luZzsKLQljbWQtPnNwZWVkID0gbmV0aWZfY2Fycmllcl9vayhkZXYpID8gcGktPmxpbmtfY2ZnLnNwZWVkIDogLTE7CisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwKKwkJCSAgICAgIG5ldGlmX2NhcnJpZXJfb2soZGV2KSA/IHBpLT5saW5rX2NmZy5zcGVlZCA6IC0xKTsKIAljbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOwogCiAJY21kLT5wb3J0ID0gKGNtZC0+c3VwcG9ydGVkICYgU1VQUE9SVEVEX1RQKSA/IFBPUlRfVFAgOiBQT1JUX0ZJQlJFOwpAQCAtMTMyNiwzNyArMTMyNywyMiBAQAogfQogCiAvKgotICogUmV0dXJuIHdoZXRoZXIgUlggQ2hlY2tzdW0gT2ZmbG9hZGluZyBpcyBjdXJyZW50bHkgZW5hYmxlZCBmb3IgdGhlIGRldmljZS4KLSAqLwotc3RhdGljIHUzMiBjeGdiNHZmX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JcmV0dXJuIChwaS0+cnhfb2ZmbG9hZCAmIFJYX0NTTykgIT0gMDsKLX0KLQotLyoKLSAqIFR1cm4gUlggQ2hlY2tzdW0gT2ZmbG9hZGluZyBvbiBvciBvZmYgZm9yIHRoZSBkZXZpY2UuCi0gKi8KLXN0YXRpYyBpbnQgY3hnYjR2Zl9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgY3N1bSkKLXsKLQlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoY3N1bSkKLQkJcGktPnJ4X29mZmxvYWQgfD0gUlhfQ1NPOwotCWVsc2UKLQkJcGktPnJ4X29mZmxvYWQgJj0gflJYX0NTTzsKLQlyZXR1cm4gMDsKLX0KLQotLyoKICAqIElkZW50aWZ5IHRoZSBwb3J0IGJ5IGJsaW5raW5nIHRoZSBwb3J0J3MgTEVELgogICovCi1zdGF0aWMgaW50IGN4Z2I0dmZfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgaWQpCitzdGF0aWMgaW50IGN4Z2I0dmZfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgZW51bSBldGh0b29sX3BoeXNfaWRfc3RhdGUgc3RhdGUpCiB7CisJdW5zaWduZWQgaW50IHZhbDsKIAlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGRldik7CiAKLQlyZXR1cm4gdDR2Zl9pZGVudGlmeV9wb3J0KHBpLT5hZGFwdGVyLCBwaS0+dmlpZCwgNSk7CisJaWYgKHN0YXRlID09IEVUSFRPT0xfSURfQUNUSVZFKQorCQl2YWwgPSAweGZmZmY7CisJZWxzZSBpZiAoc3RhdGUgPT0gRVRIVE9PTF9JRF9JTkFDVElWRSkKKwkJdmFsID0gMDsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHQ0dmZfaWRlbnRpZnlfcG9ydChwaS0+YWRhcHRlciwgcGktPnZpaWQsIHZhbCk7CiB9CiAKIC8qCkBAIC0xNTYwLDE4ICsxNTQ2LDYgQEAKICAqLwogI2RlZmluZSBUU09fRkxBR1MgKE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082IHwgTkVUSUZfRl9UU09fRUNOKQogCi0vKgotICogU2V0IFRDUCBTZWdtZW50YXRpb24gT2ZmbG9hZGluZyBmZWF0dXJlIGNhcGFiaWxpdGllcy4KLSAqLwotc3RhdGljIGludCBjeGdiNHZmX3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHRzbykKLXsKLQlpZiAodHNvKQotCQlkZXYtPmZlYXR1cmVzIHw9IFRTT19GTEFHUzsKLQllbHNlCi0JCWRldi0+ZmVhdHVyZXMgJj0gflRTT19GTEFHUzsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBjeGdiNHZmX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MJCT0gY3hnYjR2Zl9nZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvCQk9IGN4Z2I0dmZfZ2V0X2RydmluZm8sCkBAIC0xNTgyLDE5ICsxNTU2LDE0IEBACiAJLmdldF9jb2FsZXNjZQkJPSBjeGdiNHZmX2dldF9jb2FsZXNjZSwKIAkuc2V0X2NvYWxlc2NlCQk9IGN4Z2I0dmZfc2V0X2NvYWxlc2NlLAogCS5nZXRfcGF1c2VwYXJhbQkJPSBjeGdiNHZmX2dldF9wYXVzZXBhcmFtLAotCS5nZXRfcnhfY3N1bQkJPSBjeGdiNHZmX2dldF9yeF9jc3VtLAotCS5zZXRfcnhfY3N1bQkJPSBjeGdiNHZmX3NldF9yeF9jc3VtLAotCS5zZXRfdHhfY3N1bQkJPSBldGh0b29sX29wX3NldF90eF9pcHY2X2NzdW0sCi0JLnNldF9zZwkJCT0gZXRodG9vbF9vcF9zZXRfc2csCiAJLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCiAJLmdldF9zdHJpbmdzCQk9IGN4Z2I0dmZfZ2V0X3N0cmluZ3MsCi0JLnBoeXNfaWQJCT0gY3hnYjR2Zl9waHlzX2lkLAorCS5zZXRfcGh5c19pZAkJPSBjeGdiNHZmX3BoeXNfaWQsCiAJLmdldF9zc2V0X2NvdW50CQk9IGN4Z2I0dmZfZ2V0X3NzZXRfY291bnQsCiAJLmdldF9ldGh0b29sX3N0YXRzCT0gY3hnYjR2Zl9nZXRfZXRodG9vbF9zdGF0cywKIAkuZ2V0X3JlZ3NfbGVuCQk9IGN4Z2I0dmZfZ2V0X3JlZ3NfbGVuLAogCS5nZXRfcmVncwkJPSBjeGdiNHZmX2dldF9yZWdzLAogCS5nZXRfd29sCQk9IGN4Z2I0dmZfZ2V0X3dvbCwKLQkuc2V0X3RzbwkJPSBjeGdiNHZmX3NldF90c28sCiB9OwogCiAvKgpAQCAtMjYyOSwxOSArMjU5OCwxOSBAQAogCQkgKiBpdC4KIAkJICovCiAJCXBpLT54YWN0X2FkZHJfZmlsdCA9IC0xOwotCQlwaS0+cnhfb2ZmbG9hZCA9IFJYX0NTTzsKIAkJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKIAkJbmV0ZGV2LT5pcnEgPSBwZGV2LT5pcnE7CiAKLQkJbmV0ZGV2LT5mZWF0dXJlcyA9IChORVRJRl9GX1NHIHwgVFNPX0ZMQUdTIHwKLQkJCQkgICAgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU0gfAotCQkJCSAgICBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlggfAotCQkJCSAgICBORVRJRl9GX0dSTyk7CisJCW5ldGRldi0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgVFNPX0ZMQUdTIHwKKwkJCU5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNIHwKKwkJCU5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfUlhDU1VNOworCQluZXRkZXYtPnZsYW5fZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgVFNPX0ZMQUdTIHwKKwkJCU5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNIHwKKwkJCU5FVElGX0ZfSElHSERNQTsKKwkJbmV0ZGV2LT5mZWF0dXJlcyA9IG5ldGRldi0+aHdfZmVhdHVyZXMgfAorCQkJTkVUSUZfRl9IV19WTEFOX1JYOwogCQlpZiAocGNpX3VzaW5nX2RhYykKIAkJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwotCQluZXRkZXYtPnZsYW5fZmVhdHVyZXMgPQotCQkJKG5ldGRldi0+ZmVhdHVyZXMgJgotCQkJIH4oTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYKSk7CiAKICNpZmRlZiBIQVZFX05FVF9ERVZJQ0VfT1BTCiAJCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZjeGdiNHZmX25ldGRldl9vcHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiNHZmL3NnZS5jIGIvZHJpdmVycy9uZXQvY3hnYjR2Zi9zZ2UuYwppbmRleCBiYjY1MTIxLi41ZmQ3NWZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiNHZmL3NnZS5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2I0dmYvc2dlLmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxuZXQvaXB2Ni5oPgogI2luY2x1ZGUgPG5ldC90Y3AuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAKICNpbmNsdWRlICJ0NHZmX2NvbW1vbi5oIgogI2luY2x1ZGUgInQ0dmZfZGVmcy5oIgpAQCAtMTU1NSw4ICsxNTU2LDggQEAKIAlwaSA9IG5ldGRldl9wcml2KHNrYi0+ZGV2KTsKIAlyeHEtPnN0YXRzLnBrdHMrKzsKIAotCWlmIChjc3VtX29rICYmIChwaS0+cnhfb2ZmbG9hZCAmIFJYX0NTTykgJiYgIXBrdC0+ZXJyX3ZlYyAmJgotCSAgICAoYmUzMl90b19jcHUocGt0LT5sMmluZm8pICYgKFJYRl9VRFB8UlhGX1RDUCkpKSB7CisJaWYgKGNzdW1fb2sgJiYgKHJzcHEtPm5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkgJiYKKwkgICAgIXBrdC0+ZXJyX3ZlYyAmJiAoYmUzMl90b19jcHUocGt0LT5sMmluZm8pICYgKFJYRl9VRFB8UlhGX1RDUCkpKSB7CiAJCWlmICghcGt0LT5pcF9mcmFnKQogCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAkJZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kZXBjYS5jIGIvZHJpdmVycy9uZXQvZGVwY2EuYwppbmRleCA4YjAwODRkLi4xNzY1NDA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kZXBjYS5jCisrKyBiL2RyaXZlcnMvbmV0L2RlcGNhLmMKQEAgLTMzMSwxOCArMzMxLDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIkRFNDIyIixcCiAgICAgICAgICAgICAgICAgICAgICAgICAgIiJ9CiAKLXN0YXRpYyBjaGFyKiBfX2luaXRkYXRhIGRlcGNhX3NpZ25hdHVyZVtdID0gREVQQ0FfU0lHTkFUVVJFOworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGRlcGNhX3NpZ25hdHVyZVtdIF9fZGV2aW5pdGNvbnN0ID0gREVQQ0FfU0lHTkFUVVJFOwogCiBlbnVtIGRlcGNhX3R5cGUgewogCURFUENBLCBkZTEwMCwgZGUxMDEsIGRlMjAwLCBkZTIwMSwgZGUyMDIsIGRlMjEwLCBkZTIxMiwgZGU0MjIsIHVua25vd24KIH07CiAKLXN0YXRpYyBjaGFyIGRlcGNhX3N0cmluZ1tdID0gImRlcGNhIjsKK3N0YXRpYyBjb25zdCBjaGFyIGRlcGNhX3N0cmluZ1tdID0gImRlcGNhIjsKIAogc3RhdGljIGludCBkZXBjYV9kZXZpY2VfcmVtb3ZlIChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpOwogCiAjaWZkZWYgQ09ORklHX0VJU0EKLXN0YXRpYyBzdHJ1Y3QgZWlzYV9kZXZpY2VfaWQgZGVwY2FfZWlzYV9pZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZWlzYV9kZXZpY2VfaWQgZGVwY2FfZWlzYV9pZHNbXSBfX2RldmluaXRjb25zdCA9IHsKIAl7ICJERUM0MjIwIiwgZGU0MjIgfSwKIAl7ICIiIH0KIH07CkBAIC0zNjcsMTkgKzM2NywxOSBAQAogI2RlZmluZSBERTIxMF9JRCAweDYyOGQKICNkZWZpbmUgREUyMTJfSUQgMHg2ZGVmCiAKLXN0YXRpYyBzaG9ydCBkZXBjYV9tY2FfYWRhcHRlcl9pZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzaG9ydCBkZXBjYV9tY2FfYWRhcHRlcl9pZHNbXSBfX2RldmluaXRjb25zdCA9IHsKIAlERTIxMF9JRCwKIAlERTIxMl9JRCwKIAkweDAwMDAKIH07CiAKLXN0YXRpYyBjaGFyICpkZXBjYV9tY2FfYWRhcHRlcl9uYW1lW10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqZGVwY2FfbWNhX2FkYXB0ZXJfbmFtZVtdID0gewogCSJERUMgRXRoZXJXT1JLUyBNQyBBZGFwdGVyIChERTIxMCkiLAogCSJERUMgRXRoZXJXT1JLUyBNQyBBZGFwdGVyIChERTIxMikiLAogCU5VTEwKIH07CiAKLXN0YXRpYyBlbnVtIGRlcGNhX3R5cGUgZGVwY2FfbWNhX2FkYXB0ZXJfdHlwZVtdID0geworc3RhdGljIGNvbnN0IGVudW0gZGVwY2FfdHlwZSBkZXBjYV9tY2FfYWRhcHRlcl90eXBlW10gPSB7CiAJZGUyMTAsCiAJZGUyMTIsCiAJMApAQCAtNTQxLDEwICs1NDEsOSBAQAogc3RhdGljIGludCBsb2FkX3BhY2tldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHN0YXRpYyB2b2lkIGRlcGNhX2RiZ19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCi1zdGF0aWMgdV9jaGFyIGRlMXh4X2lycVtdIF9faW5pdGRhdGEgPSB7IDIsIDMsIDQsIDUsIDcsIDksIDAgfTsKLXN0YXRpYyB1X2NoYXIgZGUyeHhfaXJxW10gX19pbml0ZGF0YSA9IHsgNSwgOSwgMTAsIDExLCAxNSwgMCB9Owotc3RhdGljIHVfY2hhciBkZTQyMl9pcnFbXSBfX2luaXRkYXRhID0geyA1LCA5LCAxMCwgMTEsIDAgfTsKLXN0YXRpYyB1X2NoYXIgKmRlcGNhX2lycTsKK3N0YXRpYyBjb25zdCB1X2NoYXIgZGUxeHhfaXJxW10gX19kZXZpbml0Y29uc3QgPSB7IDIsIDMsIDQsIDUsIDcsIDksIDAgfTsKK3N0YXRpYyBjb25zdCB1X2NoYXIgZGUyeHhfaXJxW10gX19kZXZpbml0Y29uc3QgPSB7IDUsIDksIDEwLCAxMSwgMTUsIDAgfTsKK3N0YXRpYyBjb25zdCB1X2NoYXIgZGU0MjJfaXJxW10gX19kZXZpbml0Y29uc3QgPSB7IDUsIDksIDEwLCAxMSwgMCB9OwogCiBzdGF0aWMgaW50IGlycTsKIHN0YXRpYyBpbnQgaW87CkBAIC01ODAsNyArNTc5LDcgQEAKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGRlcGNhX2h3X2luaXQgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRlcGNhX2h3X2luaXQgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgZGVwY2FfcHJpdmF0ZSAqbHA7CiAJaW50IGksIGosIG9mZnNldCwgbmV0UkFNLCBtZW1fbGVuLCBzdGF0dXMgPSAwOwpAQCAtNzQ4LDYgKzc0Nyw3IEBACiAJaWYgKGRldi0+aXJxIDwgMikgewogCQl1bnNpZ25lZCBjaGFyIGlycW51bTsKIAkJdW5zaWduZWQgbG9uZyBpcnFfbWFzaywgZGVsYXk7CisJCWNvbnN0IHVfY2hhciAqZGVwY2FfaXJxOwogCiAJCWlycV9tYXNrID0gcHJvYmVfaXJxX29uKCk7CiAKQEAgLTc3MCw2ICs3NzAsNyBAQAogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKKwkJCWRlcGNhX2lycSA9IE5VTEw7CiAJCQlicmVhazsJLyogTm90IHJlYWNoZWQgKi8KIAkJfQogCkBAIC0xMzAyLDcgKzEzMDMsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBfX2luaXQgZGVwY2FfY29tbW9uX2luaXQgKHVfbG9uZyBpb2FkZHIsIHN0cnVjdCBuZXRfZGV2aWNlICoqZGV2cCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRlcGNhX2NvbW1vbl9pbml0ICh1X2xvbmcgaW9hZGRyLCBzdHJ1Y3QgbmV0X2RldmljZSAqKmRldnApCiB7CiAJaW50IHN0YXR1cyA9IDA7CiAKQEAgLTEzMzMsNyArMTMzNCw3IEBACiAvKgogKiogTWljcm9jaGFubmVsIGJ1cyBJL08gZGV2aWNlIHByb2JlCiAqLwotc3RhdGljIGludCBfX2luaXQgZGVwY2FfbWNhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRlcGNhX21jYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiB7CiAJdW5zaWduZWQgY2hhciBwb3NbMl07CiAJdW5zaWduZWQgY2hhciB3aGVyZTsKQEAgLTE0NTcsNyArMTQ1OCw3IEBACiAqKiBJU0EgYnVzIEkvTyBkZXZpY2UgcHJvYmUKICovCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBkZXBjYV9wbGF0Zm9ybV9wcm9iZSAodm9pZCkKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBkZXBjYV9wbGF0Zm9ybV9wcm9iZSAodm9pZCkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGRldjsKQEAgLTE0OTcsNyArMTQ5OCw3IEBACiAJfQogfQogCi1zdGF0aWMgZW51bSBkZXBjYV90eXBlIF9faW5pdCBkZXBjYV9zaG1lbV9wcm9iZSAodWxvbmcgKm1lbV9zdGFydCkKK3N0YXRpYyBlbnVtIGRlcGNhX3R5cGUgX19kZXZpbml0IGRlcGNhX3NobWVtX3Byb2JlICh1bG9uZyAqbWVtX3N0YXJ0KQogewogCXVfbG9uZyBtZW1fYmFzZVtdID0gREVQQ0FfUkFNX0JBU0VfQUREUkVTU0VTOwogCWVudW0gZGVwY2FfdHlwZSBhZGFwdGVyID0gdW5rbm93bjsKQEAgLTE1NTgsNyArMTU1OSw3IEBACiAqLwogCiAjaWZkZWYgQ09ORklHX0VJU0EKLXN0YXRpYyBpbnQgX19pbml0IGRlcGNhX2Vpc2FfcHJvYmUgKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRlcGNhX2Vpc2FfcHJvYmUgKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKIAllbnVtIGRlcGNhX3R5cGUgYWRhcHRlciA9IHVua25vd247CiAJc3RydWN0IGVpc2FfZGV2aWNlICplZGV2OwpAQCAtMTYyOSw3ICsxNjMwLDcgQEAKICoqIGFuZCBCb290IChyZWFkYikgUk9NLiBUaGlzIHdpbGwgYWxzbyBnaXZlIHVzIGEgY2x1ZSB0byB0aGUgbmV0d29yayBSQU0KICoqIGJhc2UgYWRkcmVzcy4KICovCi1zdGF0aWMgaW50IF9faW5pdCBEZXBjYVNpZ25hdHVyZShjaGFyICpuYW1lLCB1X2xvbmcgYmFzZV9hZGRyKQorc3RhdGljIGludCBfX2RldmluaXQgRGVwY2FTaWduYXR1cmUoY2hhciAqbmFtZSwgdV9sb25nIGJhc2VfYWRkcikKIHsKIAl1X2ludCBpLCBqLCBrOwogCXZvaWQgX19pb21lbSAqcHRyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGwyay5jIGIvZHJpdmVycy9uZXQvZGwyay5jCmluZGV4IGMwNWRiNjAuLmM0NDU0NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RsMmsuYworKysgYi9kcml2ZXJzL25ldC9kbDJrLmMKQEAgLTExODksMTAgKzExODksMTAgQEAKIAkJY21kLT50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7CiAJfQogCWlmICggbnAtPmxpbmtfc3RhdHVzICkgewotCQljbWQtPnNwZWVkID0gbnAtPnNwZWVkOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCBucC0+c3BlZWQpOwogCQljbWQtPmR1cGxleCA9IG5wLT5mdWxsX2R1cGxleCA/IERVUExFWF9GVUxMIDogRFVQTEVYX0hBTEY7CiAJfSBlbHNlIHsKLQkJY21kLT5zcGVlZCA9IC0xOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCAtMSk7CiAJCWNtZC0+ZHVwbGV4ID0gLTE7CiAJfQogCWlmICggbnAtPmFuX2VuYWJsZSkKQEAgLTEyMTksMzEgKzEyMTksMjAgQEAKIAl9IGVsc2UgewogCQlucC0+YW5fZW5hYmxlID0gMDsKIAkJaWYgKG5wLT5zcGVlZCA9PSAxMDAwKSB7Ci0JCQljbWQtPnNwZWVkID0gU1BFRURfMTAwOworCQkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgU1BFRURfMTAwKTsKIAkJCWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CiAJCQlwcmludGsoIldhcm5pbmchISBDYW4ndCBkaXNhYmxlIEF1dG8gbmVnb3RpYXRpb24gaW4gMTAwME1icHMsIGNoYW5nZSB0byBNYW51YWwgMTAwTWJwcywgRnVsbCBkdXBsZXguXG4iKTsKIAkJfQotCQlzd2l0Y2goY21kLT5zcGVlZCArIGNtZC0+ZHVwbGV4KSB7Ci0KLQkJY2FzZSBTUEVFRF8xMCArIERVUExFWF9IQUxGOgorCQlzd2l0Y2ggKGV0aHRvb2xfY21kX3NwZWVkKGNtZCkpIHsKKwkJY2FzZSBTUEVFRF8xMDoKIAkJCW5wLT5zcGVlZCA9IDEwOwotCQkJbnAtPmZ1bGxfZHVwbGV4ID0gMDsKKwkJCW5wLT5mdWxsX2R1cGxleCA9IChjbWQtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCk7CiAJCQlicmVhazsKLQotCQljYXNlIFNQRUVEXzEwICsgRFVQTEVYX0ZVTEw6Ci0JCQlucC0+c3BlZWQgPSAxMDsKLQkJCW5wLT5mdWxsX2R1cGxleCA9IDE7Ci0JCQlicmVhazsKLQkJY2FzZSBTUEVFRF8xMDAgKyBEVVBMRVhfSEFMRjoKKwkJY2FzZSBTUEVFRF8xMDA6CiAJCQlucC0+c3BlZWQgPSAxMDA7Ci0JCQlucC0+ZnVsbF9kdXBsZXggPSAwOworCQkJbnAtPmZ1bGxfZHVwbGV4ID0gKGNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKTsKIAkJCWJyZWFrOwotCQljYXNlIFNQRUVEXzEwMCArIERVUExFWF9GVUxMOgotCQkJbnAtPnNwZWVkID0gMTAwOwotCQkJbnAtPmZ1bGxfZHVwbGV4ID0gMTsKLQkJCWJyZWFrOwotCQljYXNlIFNQRUVEXzEwMDAgKyBEVVBMRVhfSEFMRjovKiBub3Qgc3VwcG9ydGVkICovCi0JCWNhc2UgU1BFRURfMTAwMCArIERVUExFWF9GVUxMOi8qIG5vdCBzdXBwb3J0ZWQgKi8KKwkJY2FzZSBTUEVFRF8xMDAwOiAvKiBub3Qgc3VwcG9ydGVkICovCiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZG05MDAwLmMgYi9kcml2ZXJzL25ldC9kbTkwMDAuYwppbmRleCBiN2FmNWJhLi5mYmFmZjM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kbTkwMDAuYworKysgYi9kcml2ZXJzL25ldC9kbTkwMDAuYwpAQCAtMTMxLDggKzEzMSw2IEBACiAJdTMyCQltc2dfZW5hYmxlOwogCXUzMgkJd2FrZV9zdGF0ZTsKIAotCWludAkJcnhfY3N1bTsKLQlpbnQJCWNhbl9jc3VtOwogCWludAkJaXBfc3VtbWVkOwogfSBib2FyZF9pbmZvX3Q7CiAKQEAgLTQ3MCw0NyArNDY4LDIwIEBACiAJcmV0dXJuIG1paV9ud2F5X3Jlc3RhcnQoJmRtLT5taWkpOwogfQogCi1zdGF0aWMgdWludDMyX3QgZG05MDAwX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGRtOTAwMF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZlYXR1cmVzKQogewogCWJvYXJkX2luZm9fdCAqZG0gPSB0b19kbTkwMDBfYm9hcmQoZGV2KTsKLQlyZXR1cm4gZG0tPnJ4X2NzdW07Ci19Ci0KLXN0YXRpYyBpbnQgZG05MDAwX3NldF9yeF9jc3VtX3VubG9ja2VkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVpbnQzMl90IGRhdGEpCi17Ci0JYm9hcmRfaW5mb190ICpkbSA9IHRvX2RtOTAwMF9ib2FyZChkZXYpOwotCi0JaWYgKGRtLT5jYW5fY3N1bSkgewotCQlkbS0+cnhfY3N1bSA9IGRhdGE7Ci0JCWlvdyhkbSwgRE05MDAwX1JDU1IsIGRtLT5yeF9jc3VtID8gUkNTUl9DU1VNIDogMCk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIC1FT1BOT1RTVVBQOwotfQotCi1zdGF0aWMgaW50IGRtOTAwMF9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1aW50MzJfdCBkYXRhKQotewotCWJvYXJkX2luZm9fdCAqZG0gPSB0b19kbTkwMDBfYm9hcmQoZGV2KTsKKwl1MzIgY2hhbmdlZCA9IGRldi0+ZmVhdHVyZXMgXiBmZWF0dXJlczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQ7CisKKwlpZiAoIShjaGFuZ2VkICYgTkVUSUZfRl9SWENTVU0pKQorCQlyZXR1cm4gMDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkbS0+bG9jaywgZmxhZ3MpOwotCXJldCA9IGRtOTAwMF9zZXRfcnhfY3N1bV91bmxvY2tlZChkZXYsIGRhdGEpOworCWlvdyhkbSwgRE05MDAwX1JDU1IsIChmZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSA/IFJDU1JfQ1NVTSA6IDApOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtLT5sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGRtOTAwMF9zZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1aW50MzJfdCBkYXRhKQotewotCWJvYXJkX2luZm9fdCAqZG0gPSB0b19kbTkwMDBfYm9hcmQoZGV2KTsKLQlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7Ci0KLQlpZiAoZG0tPmNhbl9jc3VtKQotCQlyZXQgPSBldGh0b29sX29wX3NldF90eF9jc3VtKGRldiwgZGF0YSk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHUzMiBkbTkwMDBfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTY0MywxMCArNjE0LDYgQEAKICAJLmdldF9lZXByb21fbGVuCQk9IGRtOTAwMF9nZXRfZWVwcm9tX2xlbiwKICAJLmdldF9lZXByb20JCT0gZG05MDAwX2dldF9lZXByb20sCiAgCS5zZXRfZWVwcm9tCQk9IGRtOTAwMF9zZXRfZWVwcm9tLAotCS5nZXRfcnhfY3N1bQkJPSBkbTkwMDBfZ2V0X3J4X2NzdW0sCi0JLnNldF9yeF9jc3VtCQk9IGRtOTAwMF9zZXRfcnhfY3N1bSwKLQkuZ2V0X3R4X2NzdW0JCT0gZXRodG9vbF9vcF9nZXRfdHhfY3N1bSwKLQkuc2V0X3R4X2NzdW0JCT0gZG05MDAwX3NldF90eF9jc3VtLAogfTsKIAogc3RhdGljIHZvaWQgZG05MDAwX3Nob3dfY2Fycmllcihib2FyZF9pbmZvX3QgKmRiLApAQCAtODAwLDcgKzc2Nyw5IEBACiAJZGItPmlvX21vZGUgPSBpb3IoZGIsIERNOTAwMF9JU1IpID4+IDY7CS8qIElTUiBiaXQ3OjYga2VlcHMgSS9PIG1vZGUgKi8KIAogCS8qIENoZWNrc3VtIG1vZGUgKi8KLQlkbTkwMDBfc2V0X3J4X2NzdW1fdW5sb2NrZWQoZGV2LCBkYi0+cnhfY3N1bSk7CisJaWYgKGRldi0+aHdfZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkKKwkJaW93KGRiLCBETTkwMDBfUkNTUiwKKwkJCShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pID8gUkNTUl9DU1VNIDogMCk7CiAKIAlpb3coZGIsIERNOTAwMF9HUENSLCBHUENSX0dFUF9DTlRMKTsJLyogTGV0IEdQSU8wIG91dHB1dCAqLwogCkBAIC0xMDQ5LDcgKzEwMTgsNyBAQAogCiAJCQkvKiBQYXNzIHRvIHVwcGVyIGxheWVyICovCiAJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwotCQkJaWYgKGRiLT5yeF9jc3VtKSB7CisJCQlpZiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSB7CiAJCQkJaWYgKCgoKHJ4Ynl0ZSAmIDB4MWMpIDw8IDMpICYgcnhieXRlKSA9PSAwKQogCQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCQkJCWVsc2UKQEAgLTEzNTgsNiArMTMyNyw3IEBACiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBkbTkwMDBfaGFzaF90YWJsZSwKIAkubmRvX2RvX2lvY3RsCQk9IGRtOTAwMF9pb2N0bCwKIAkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfZmVhdHVyZXMJPSBkbTkwMDBfc2V0X2ZlYXR1cmVzLAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZXRoX21hY19hZGRyLAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCkBAIC0xNTUxLDkgKzE1MjEsOCBAQAogCiAJLyogZG05MDAwYS9iIGFyZSBjYXBhYmxlIG9mIGhhcmR3YXJlIGNoZWNrc3VtIG9mZmxvYWQgKi8KIAlpZiAoZGItPnR5cGUgPT0gVFlQRV9ETTkwMDBBIHx8IGRiLT50eXBlID09IFRZUEVfRE05MDAwQikgewotCQlkYi0+Y2FuX2NzdW0gPSAxOwotCQlkYi0+cnhfY3N1bSA9IDE7Ci0JCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTTsKKwkJbmRldi0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX1JYQ1NVTSB8IE5FVElGX0ZfSVBfQ1NVTTsKKwkJbmRldi0+ZmVhdHVyZXMgfD0gbmRldi0+aHdfZmVhdHVyZXM7CiAJfQogCiAJLyogZnJvbSB0aGlzIHBvaW50IHdlIGFzc3VtZSB0aGF0IHdlIGhhdmUgZm91bmQgYSBETTkwMDAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2R1bW15LmMgYi9kcml2ZXJzL25ldC9kdW1teS5jCmluZGV4IGZmMmQyOWIuLjM5Y2Y5YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2R1bW15LmMKKysrIGIvZHJpdmVycy9uZXQvZHVtbXkuYwpAQCAtMTY4LDEwICsxNjgsNiBAQAogCWlmICghZGV2X2R1bW15KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWVyciA9IGRldl9hbGxvY19uYW1lKGRldl9kdW1teSwgZGV2X2R1bW15LT5uYW1lKTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBlcnI7Ci0KIAlkZXZfZHVtbXktPnJ0bmxfbGlua19vcHMgPSAmZHVtbXlfbGlua19vcHM7CiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldl9kdW1teSk7CiAJaWYgKGVyciA8IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwLmMgYi9kcml2ZXJzL25ldC9lMTAwLmMKaW5kZXggYjBhYTllNi4uZTMzNmM3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAuYwpAQCAtNTkzLDcgKzU5Myw2IEBACiAJZW51bSBwaHkgcGh5OwogCXN0cnVjdCBwYXJhbXMgcGFyYW1zOwogCXN0cnVjdCB0aW1lcl9saXN0IHdhdGNoZG9nOwotCXN0cnVjdCB0aW1lcl9saXN0IGJsaW5rX3RpbWVyOwogCXN0cnVjdCBtaWlfaWZfaW5mbyBtaWk7CiAJc3RydWN0IHdvcmtfc3RydWN0IHR4X3RpbWVvdXRfdGFzazsKIAllbnVtIGxvb3BiYWNrIGxvb3BiYWNrOwpAQCAtNjE4LDcgKzYxNyw2IEBACiAJdTMyIHJ4X3Rjb19mcmFtZXM7CiAJdTMyIHJ4X292ZXJfbGVuZ3RoX2Vycm9yczsKIAotCXUxNiBsZWRzOwogCXUxNiBlZXByb21fd2M7CiAJX19sZTE2IGVlcHJvbVsyNTZdOwogCXNwaW5sb2NrX3QgbWRpb19sb2NrOwpAQCAtMTUxMiw3ICsxNTEwLDcgQEAKIAogc3RhdGljIGludCBlMTAwX2h3X2luaXQoc3RydWN0IG5pYyAqbmljKQogewotCWludCBlcnI7CisJaW50IGVyciA9IDA7CiAKIAllMTAwX2h3X3Jlc2V0KG5pYyk7CiAKQEAgLTE2NjgsNyArMTY2Niw4IEBACiBzdGF0aWMgdm9pZCBlMTAwX3dhdGNoZG9nKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgbmljICpuaWMgPSAoc3RydWN0IG5pYyAqKWRhdGE7Ci0Jc3RydWN0IGV0aHRvb2xfY21kIGNtZDsKKwlzdHJ1Y3QgZXRodG9vbF9jbWQgY21kID0geyAuY21kID0gRVRIVE9PTF9HU0VUIH07CisJdTMyIHNwZWVkOwogCiAJbmV0aWZfcHJpbnRrKG5pYywgdGltZXIsIEtFUk5fREVCVUcsIG5pYy0+bmV0ZGV2LAogCQkgICAgICJyaWdodCBub3cgPSAlbGRcbiIsIGppZmZpZXMpOwpAQCAtMTY3NiwxMCArMTY3NSwxMSBAQAogCS8qIG1paSBsaWJyYXJ5IGhhbmRsZXMgbGluayBtYWludGVuYW5jZSB0YXNrcyAqLwogCiAJbWlpX2V0aHRvb2xfZ3NldCgmbmljLT5taWksICZjbWQpOworCXNwZWVkID0gZXRodG9vbF9jbWRfc3BlZWQoJmNtZCk7CiAKIAlpZiAobWlpX2xpbmtfb2soJm5pYy0+bWlpKSAmJiAhbmV0aWZfY2Fycmllcl9vayhuaWMtPm5ldGRldikpIHsKIAkJbmV0ZGV2X2luZm8obmljLT5uZXRkZXYsICJOSUMgTGluayBpcyBVcCAldSBNYnBzICVzIER1cGxleFxuIiwKLQkJCSAgICBjbWQuc3BlZWQgPT0gU1BFRURfMTAwID8gMTAwIDogMTAsCisJCQkgICAgc3BlZWQgPT0gU1BFRURfMTAwID8gMTAwIDogMTAsCiAJCQkgICAgY21kLmR1cGxleCA9PSBEVVBMRVhfRlVMTCA/ICJGdWxsIiA6ICJIYWxmIik7CiAJfSBlbHNlIGlmICghbWlpX2xpbmtfb2soJm5pYy0+bWlpKSAmJiBuZXRpZl9jYXJyaWVyX29rKG5pYy0+bmV0ZGV2KSkgewogCQluZXRkZXZfaW5mbyhuaWMtPm5ldGRldiwgIk5JQyBMaW5rIGlzIERvd25cbiIpOwpAQCAtMTY5OCwxMyArMTY5OCwxMyBAQAogCXNwaW5fdW5sb2NrX2lycSgmbmljLT5jbWRfbG9jayk7CiAKIAllMTAwX3VwZGF0ZV9zdGF0cyhuaWMpOwotCWUxMDBfYWRqdXN0X2FkYXB0aXZlX2lmcyhuaWMsIGNtZC5zcGVlZCwgY21kLmR1cGxleCk7CisJZTEwMF9hZGp1c3RfYWRhcHRpdmVfaWZzKG5pYywgc3BlZWQsIGNtZC5kdXBsZXgpOwogCiAJaWYgKG5pYy0+bWFjIDw9IG1hY184MjU1N19EMTAwX0MpCiAJCS8qIElzc3VlIGEgbXVsdGljYXN0IGNvbW1hbmQgdG8gd29ya2Fyb3VuZCBhIDU1NyBsb2NrIHVwICovCiAJCWUxMDBfc2V0X211bHRpY2FzdF9saXN0KG5pYy0+bmV0ZGV2KTsKIAotCWlmIChuaWMtPmZsYWdzICYgaWNoICYmIGNtZC5zcGVlZD09U1BFRURfMTAgJiYgY21kLmR1cGxleD09RFVQTEVYX0hBTEYpCisJaWYgKG5pYy0+ZmxhZ3MgJiBpY2ggJiYgc3BlZWQgPT0gU1BFRURfMTAgJiYgY21kLmR1cGxleCA9PSBEVVBMRVhfSEFMRikKIAkJLyogTmVlZCBTVyB3b3JrYXJvdW5kIGZvciBJQ0hbeF0gMTBNYnBzL2hhbGYgZHVwbGV4IFR4IGhhbmcuICovCiAJCW5pYy0+ZmxhZ3MgfD0gaWNoXzEwaF93b3JrYXJvdW5kOwogCWVsc2UKQEAgLTIzNTEsMzAgKzIzNTEsNiBAQAogI2RlZmluZSBFMTAwXzgyNTUyX0xFRF9PVkVSUklERSAweDE5CiAjZGVmaW5lIEUxMDBfODI1NTJfTEVEX09OICAgICAgIDB4MDAwRiAvKiBMRURUWCBhbmQgTEVEX1JYIGJvdGggb24gKi8KICNkZWZpbmUgRTEwMF84MjU1Ml9MRURfT0ZGICAgICAgMHgwMDBBIC8qIExFRFRYIGFuZCBMRURfUlggYm90aCBvZmYgKi8KLXN0YXRpYyB2b2lkIGUxMDBfYmxpbmtfbGVkKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgbmljICpuaWMgPSAoc3RydWN0IG5pYyAqKWRhdGE7Ci0JZW51bSBsZWRfc3RhdGUgewotCQlsZWRfb24gICAgID0gMHgwMSwKLQkJbGVkX29mZiAgICA9IDB4MDQsCi0JCWxlZF9vbl81NTkgPSAweDA1LAotCQlsZWRfb25fNTU3ID0gMHgwNywKLQl9OwotCXUxNiBsZWRfcmVnID0gTUlJX0xFRF9DT05UUk9MOwotCi0JaWYgKG5pYy0+cGh5ID09IHBoeV84MjU1Ml92KSB7Ci0JCWxlZF9yZWcgPSBFMTAwXzgyNTUyX0xFRF9PVkVSUklERTsKLQotCQluaWMtPmxlZHMgPSAobmljLT5sZWRzID09IEUxMDBfODI1NTJfTEVEX09OKSA/Ci0JCSAgICAgICAgICAgIEUxMDBfODI1NTJfTEVEX09GRiA6IEUxMDBfODI1NTJfTEVEX09OOwotCX0gZWxzZSB7Ci0JCW5pYy0+bGVkcyA9IChuaWMtPmxlZHMgJiBsZWRfb24pID8gbGVkX29mZiA6Ci0JCSAgICAgICAgICAgIChuaWMtPm1hYyA8IG1hY184MjU1OV9EMTAxTSkgPyBsZWRfb25fNTU3IDoKLQkJICAgICAgICAgICAgbGVkX29uXzU1OTsKLQl9Ci0JbWRpb193cml0ZShuaWMtPm5ldGRldiwgbmljLT5taWkucGh5X2lkLCBsZWRfcmVnLCBuaWMtPmxlZHMpOwotCW1vZF90aW1lcigmbmljLT5ibGlua190aW1lciwgamlmZmllcyArIEhaIC8gNCk7Ci19CiAKIHN0YXRpYyBpbnQgZTEwMF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7CkBAIC0yNTk4LDE5ICsyNTc0LDM4IEBACiAJbXNsZWVwX2ludGVycnVwdGlibGUoNCAqIDEwMDApOwogfQogCi1zdGF0aWMgaW50IGUxMDBfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKK3N0YXRpYyBpbnQgZTEwMF9zZXRfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgIGVudW0gZXRodG9vbF9waHlzX2lkX3N0YXRlIHN0YXRlKQogewogCXN0cnVjdCBuaWMgKm5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7CisJZW51bSBsZWRfc3RhdGUgeworCQlsZWRfb24gICAgID0gMHgwMSwKKwkJbGVkX29mZiAgICA9IDB4MDQsCisJCWxlZF9vbl81NTkgPSAweDA1LAorCQlsZWRfb25fNTU3ID0gMHgwNywKKwl9OwogCXUxNiBsZWRfcmVnID0gKG5pYy0+cGh5ID09IHBoeV84MjU1Ml92KSA/IEUxMDBfODI1NTJfTEVEX09WRVJSSURFIDoKLQkgICAgICAgICAgICAgIE1JSV9MRURfQ09OVFJPTDsKKwkJTUlJX0xFRF9DT05UUk9MOworCXUxNiBsZWRzID0gMDsKIAotCWlmICghZGF0YSB8fCBkYXRhID4gKHUzMikoTUFYX1NDSEVEVUxFX1RJTUVPVVQgLyBIWikpCi0JCWRhdGEgPSAodTMyKShNQVhfU0NIRURVTEVfVElNRU9VVCAvIEhaKTsKLQltb2RfdGltZXIoJm5pYy0+YmxpbmtfdGltZXIsIGppZmZpZXMpOwotCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKGRhdGEgKiAxMDAwKTsKLQlkZWxfdGltZXJfc3luYygmbmljLT5ibGlua190aW1lcik7Ci0JbWRpb193cml0ZShuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgbGVkX3JlZywgMCk7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgRVRIVE9PTF9JRF9BQ1RJVkU6CisJCXJldHVybiAyOwogCisJY2FzZSBFVEhUT09MX0lEX09OOgorCQlsZWRzID0gKG5pYy0+cGh5ID09IHBoeV84MjU1Ml92KSA/IEUxMDBfODI1NTJfTEVEX09OIDoKKwkJICAgICAgIChuaWMtPm1hYyA8IG1hY184MjU1OV9EMTAxTSkgPyBsZWRfb25fNTU3IDogbGVkX29uXzU1OTsKKwkJYnJlYWs7CisKKwljYXNlIEVUSFRPT0xfSURfT0ZGOgorCQlsZWRzID0gKG5pYy0+cGh5ID09IHBoeV84MjU1Ml92KSA/IEUxMDBfODI1NTJfTEVEX09GRiA6IGxlZF9vZmY7CisJCWJyZWFrOworCisJY2FzZSBFVEhUT09MX0lEX0lOQUNUSVZFOgorCQlicmVhazsKKwl9CisKKwltZGlvX3dyaXRlKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBsZWRfcmVnLCBsZWRzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjY5MSw3ICsyNjg2LDcgQEAKIAkuc2V0X3JpbmdwYXJhbQkJPSBlMTAwX3NldF9yaW5ncGFyYW0sCiAJLnNlbGZfdGVzdAkJPSBlMTAwX2RpYWdfdGVzdCwKIAkuZ2V0X3N0cmluZ3MJCT0gZTEwMF9nZXRfc3RyaW5ncywKLQkucGh5c19pZAkJPSBlMTAwX3BoeXNfaWQsCisJLnNldF9waHlzX2lkCQk9IGUxMDBfc2V0X3BoeXNfaWQsCiAJLmdldF9ldGh0b29sX3N0YXRzCT0gZTEwMF9nZXRfZXRodG9vbF9zdGF0cywKIAkuZ2V0X3NzZXRfY291bnQJCT0gZTEwMF9nZXRfc3NldF9jb3VudCwKIH07CkBAIC0yODMyLDkgKzI4MjcsNiBAQAogCWluaXRfdGltZXIoJm5pYy0+d2F0Y2hkb2cpOwogCW5pYy0+d2F0Y2hkb2cuZnVuY3Rpb24gPSBlMTAwX3dhdGNoZG9nOwogCW5pYy0+d2F0Y2hkb2cuZGF0YSA9ICh1bnNpZ25lZCBsb25nKW5pYzsKLQlpbml0X3RpbWVyKCZuaWMtPmJsaW5rX3RpbWVyKTsKLQluaWMtPmJsaW5rX3RpbWVyLmZ1bmN0aW9uID0gZTEwMF9ibGlua19sZWQ7Ci0JbmljLT5ibGlua190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpbmljOwogCiAJSU5JVF9XT1JLKCZuaWMtPnR4X3RpbWVvdXRfdGFzaywgZTEwMF90eF90aW1lb3V0X3Rhc2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMC5oIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaAppbmRleCBhODgxZGQwLi44Njc2ODk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMC5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwLmgKQEAgLTIzOCw5ICsyMzgsNiBAQAogCXN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrOwogCXU4IGZjX2F1dG9uZWc7CiAKLQlzdHJ1Y3QgdGltZXJfbGlzdCBibGlua190aW1lcjsKLQl1bnNpZ25lZCBsb25nIGxlZF9zdGF0dXM7Ci0KIAkvKiBUWCAqLwogCXN0cnVjdCBlMTAwMF90eF9yaW5nICp0eF9yaW5nOyAgICAgIC8qIE9uZSBwZXIgYWN0aXZlIHF1ZXVlICovCiAJdW5zaWduZWQgaW50IHJlc3RhcnRfcXVldWU7CkBAIC0zNDksNyArMzQ2LDcgQEAKIGV4dGVybiB2b2lkIGUxMDAwX2Rvd24oc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwogZXh0ZXJuIHZvaWQgZTEwMDBfcmVpbml0X2xvY2tlZChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CiBleHRlcm4gdm9pZCBlMTAwMF9yZXNldChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7Ci1leHRlcm4gaW50IGUxMDAwX3NldF9zcGRfZHBseChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgdTE2IHNwZGRwbHgpOworZXh0ZXJuIGludCBlMTAwMF9zZXRfc3BkX2RwbHgoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBzcGQsIHU4IGRwbHgpOwogZXh0ZXJuIGludCBlMTAwMF9zZXR1cF9hbGxfcnhfcmVzb3VyY2VzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKIGV4dGVybiBpbnQgZTEwMDBfc2V0dXBfYWxsX3R4X3Jlc291cmNlcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CiBleHRlcm4gdm9pZCBlMTAwMF9mcmVlX2FsbF9yeF9yZXNvdXJjZXMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jCmluZGV4IGRkNzA3MzguLmVjMGZhNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMKQEAgLTE1OCw3ICsxNTgsNyBAQAogCiAJCWUxMDAwX2dldF9zcGVlZF9hbmRfZHVwbGV4KGh3LCAmYWRhcHRlci0+bGlua19zcGVlZCwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRhcHRlci0+bGlua19kdXBsZXgpOwotCQllY21kLT5zcGVlZCA9IGFkYXB0ZXItPmxpbmtfc3BlZWQ7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBhZGFwdGVyLT5saW5rX3NwZWVkKTsKIAogCQkvKiB1bmZvcnR1bmF0ZWx5IEZVTExfRFVQTEVYICE9IERVUExFWF9GVUxMCiAJCSAqICAgICAgICAgIGFuZCBIQUxGX0RVUExFWCAhPSBEVVBMRVhfSEFMRiAqLwpAQCAtMTY4LDcgKzE2OCw3IEBACiAJCWVsc2UKIAkJCWVjbWQtPmR1cGxleCA9IERVUExFWF9IQUxGOwogCX0gZWxzZSB7Ci0JCWVjbWQtPnNwZWVkID0gLTE7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCAtMSk7CiAJCWVjbWQtPmR1cGxleCA9IC0xOwogCX0KIApAQCAtMTk3LDExICsxOTcsMTMgQEAKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICBBRFZFUlRJU0VEX1RQIHwKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICBBRFZFUlRJU0VEX0F1dG9uZWc7CiAJCWVjbWQtPmFkdmVydGlzaW5nID0gaHctPmF1dG9uZWdfYWR2ZXJ0aXNlZDsKLQl9IGVsc2UKLQkJaWYgKGUxMDAwX3NldF9zcGRfZHBseChhZGFwdGVyLCBlY21kLT5zcGVlZCArIGVjbWQtPmR1cGxleCkpIHsKKwl9IGVsc2UgeworCQl1MzIgc3BlZWQgPSBldGh0b29sX2NtZF9zcGVlZChlY21kKTsKKwkJaWYgKGUxMDAwX3NldF9zcGRfZHBseChhZGFwdGVyLCBzcGVlZCwgZWNtZC0+ZHVwbGV4KSkgewogCQkJY2xlYXJfYml0KF9fRTEwMDBfUkVTRVRUSU5HLCAmYWRhcHRlci0+ZmxhZ3MpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KKwl9CiAKIAkvKiByZXNldCB0aGUgbGluayAqLwogCkBAIC0xNzUzLDQ2ICsxNzU1LDI4IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIHRvZ2dsZSBMRUQgNCB0aW1lcyBwZXIgc2Vjb25kID0gMiAiYmxpbmtzIiBwZXIgc2Vjb25kICovCi0jZGVmaW5lIEUxMDAwX0lEX0lOVEVSVkFMCShIWi80KQotCi0vKiBiaXQgZGVmaW5lcyBmb3IgYWRhcHRlci0+bGVkX3N0YXR1cyAqLwotI2RlZmluZSBFMTAwMF9MRURfT04JCTAKLQotc3RhdGljIHZvaWQgZTEwMDBfbGVkX2JsaW5rX2NhbGxiYWNrKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqKSBkYXRhOwotCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0KLQlpZiAodGVzdF9hbmRfY2hhbmdlX2JpdChFMTAwMF9MRURfT04sICZhZGFwdGVyLT5sZWRfc3RhdHVzKSkKLQkJZTEwMDBfbGVkX29mZihodyk7Ci0JZWxzZQotCQllMTAwMF9sZWRfb24oaHcpOwotCi0JbW9kX3RpbWVyKCZhZGFwdGVyLT5ibGlua190aW1lciwgamlmZmllcyArIEUxMDAwX0lEX0lOVEVSVkFMKTsKLX0KLQotc3RhdGljIGludCBlMTAwMF9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQorc3RhdGljIGludCBlMTAwMF9zZXRfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgICBlbnVtIGV0aHRvb2xfcGh5c19pZF9zdGF0ZSBzdGF0ZSkKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAotCWlmICghZGF0YSkKLQkJZGF0YSA9IElOVF9NQVg7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgRVRIVE9PTF9JRF9BQ1RJVkU6CisJCWUxMDAwX3NldHVwX2xlZChodyk7CisJCXJldHVybiAyOwogCi0JaWYgKCFhZGFwdGVyLT5ibGlua190aW1lci5mdW5jdGlvbikgewotCQlpbml0X3RpbWVyKCZhZGFwdGVyLT5ibGlua190aW1lcik7Ci0JCWFkYXB0ZXItPmJsaW5rX3RpbWVyLmZ1bmN0aW9uID0gZTEwMDBfbGVkX2JsaW5rX2NhbGxiYWNrOwotCQlhZGFwdGVyLT5ibGlua190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpYWRhcHRlcjsKKwljYXNlIEVUSFRPT0xfSURfT046CisJCWUxMDAwX2xlZF9vbihodyk7CisJCWJyZWFrOworCisJY2FzZSBFVEhUT09MX0lEX09GRjoKKwkJZTEwMDBfbGVkX29mZihodyk7CisJCWJyZWFrOworCisJY2FzZSBFVEhUT09MX0lEX0lOQUNUSVZFOgorCQllMTAwMF9jbGVhbnVwX2xlZChodyk7CiAJfQotCWUxMDAwX3NldHVwX2xlZChodyk7Ci0JbW9kX3RpbWVyKCZhZGFwdGVyLT5ibGlua190aW1lciwgamlmZmllcyk7Ci0JbXNsZWVwX2ludGVycnVwdGlibGUoZGF0YSAqIDEwMDApOwotCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT5ibGlua190aW1lcik7Ci0KLQllMTAwMF9sZWRfb2ZmKGh3KTsKLQljbGVhcl9iaXQoRTEwMDBfTEVEX09OLCAmYWRhcHRlci0+bGVkX3N0YXR1cyk7Ci0JZTEwMDBfY2xlYW51cF9sZWQoaHcpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xOTI5LDcgKzE5MTMsNyBAQAogCS5zZXRfdHNvICAgICAgICAgICAgICAgID0gZTEwMDBfc2V0X3RzbywKIAkuc2VsZl90ZXN0ICAgICAgICAgICAgICA9IGUxMDAwX2RpYWdfdGVzdCwKIAkuZ2V0X3N0cmluZ3MgICAgICAgICAgICA9IGUxMDAwX2dldF9zdHJpbmdzLAotCS5waHlzX2lkICAgICAgICAgICAgICAgID0gZTEwMDBfcGh5c19pZCwKKwkuc2V0X3BoeXNfaWQgICAgICAgICAgICA9IGUxMDAwX3NldF9waHlzX2lkLAogCS5nZXRfZXRodG9vbF9zdGF0cyAgICAgID0gZTEwMDBfZ2V0X2V0aHRvb2xfc3RhdHMsCiAJLmdldF9zc2V0X2NvdW50ICAgICAgICAgPSBlMTAwMF9nZXRfc3NldF9jb3VudCwKIAkuZ2V0X2NvYWxlc2NlICAgICAgICAgICA9IGUxMDAwX2dldF9jb2FsZXNjZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYwppbmRleCA0NzdlMDY2Li43NmU4YWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiZTEwMDAuaCIKICNpbmNsdWRlIDxuZXQvaXA2X2NoZWNrc3VtLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAvKiBJbnRlbCBNZWRpYSBTT0MgR2JFIE1ESU8gcGh5c2ljYWwgYmFzZSBhZGRyZXNzICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjZTQxMDBfZ2JlX21kaW9fYmFzZV9waHk7CkBAIC05Niw3ICs5Nyw2IEBACiB2b2lkIGUxMDAwX2Rvd24oc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCBlMTAwMF9yZWluaXRfbG9ja2VkKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgZTEwMDBfcmVzZXQoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwotaW50IGUxMDAwX3NldF9zcGRfZHBseChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgdTE2IHNwZGRwbHgpOwogaW50IGUxMDAwX3NldHVwX2FsbF90eF9yZXNvdXJjZXMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwogaW50IGUxMDAwX3NldHVwX2FsbF9yeF9yZXNvdXJjZXMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCBlMTAwMF9mcmVlX2FsbF90eF9yZXNvdXJjZXMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwpAQCAtNDM4NSw3ICs0Mzg1LDYgQEAKIAlzdHJ1Y3QgbWlpX2lvY3RsX2RhdGEgKmRhdGEgPSBpZl9taWkoaWZyKTsKIAlpbnQgcmV0dmFsOwogCXUxNiBtaWlfcmVnOwotCXUxNiBzcGRkcGx4OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoaHctPm1lZGlhX3R5cGUgIT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpCkBAIC00NDI0LDE3ICs0NDIzLDE4IEBACiAJCQkJCWh3LT5hdXRvbmVnID0gMTsKIAkJCQkJaHctPmF1dG9uZWdfYWR2ZXJ0aXNlZCA9IDB4MkY7CiAJCQkJfSBlbHNlIHsKKwkJCQkJdTMyIHNwZWVkOwogCQkJCQlpZiAobWlpX3JlZyAmIDB4NDApCi0JCQkJCQlzcGRkcGx4ID0gU1BFRURfMTAwMDsKKwkJCQkJCXNwZWVkID0gU1BFRURfMTAwMDsKIAkJCQkJZWxzZSBpZiAobWlpX3JlZyAmIDB4MjAwMCkKLQkJCQkJCXNwZGRwbHggPSBTUEVFRF8xMDA7CisJCQkJCQlzcGVlZCA9IFNQRUVEXzEwMDsKIAkJCQkJZWxzZQotCQkJCQkJc3BkZHBseCA9IFNQRUVEXzEwOwotCQkJCQlzcGRkcGx4ICs9IChtaWlfcmVnICYgMHgxMDApCi0JCQkJCQkgICA/IERVUExFWF9GVUxMIDoKLQkJCQkJCSAgIERVUExFWF9IQUxGOwotCQkJCQlyZXR2YWwgPSBlMTAwMF9zZXRfc3BkX2RwbHgoYWRhcHRlciwKLQkJCQkJCQkJICAgIHNwZGRwbHgpOworCQkJCQkJc3BlZWQgPSBTUEVFRF8xMDsKKwkJCQkJcmV0dmFsID0gZTEwMDBfc2V0X3NwZF9kcGx4KAorCQkJCQkJYWRhcHRlciwgc3BlZWQsCisJCQkJCQkoKG1paV9yZWcgJiAweDEwMCkKKwkJCQkJCSA/IERVUExFWF9GVUxMIDoKKwkJCQkJCSBEVVBMRVhfSEFMRikpOwogCQkJCQlpZiAocmV0dmFsKQogCQkJCQkJcmV0dXJuIHJldHZhbDsKIAkJCQl9CkBAIC00NTk2LDIwICs0NTk2LDI0IEBACiAJfQogfQogCi1pbnQgZTEwMDBfc2V0X3NwZF9kcGx4KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCB1MTYgc3BkZHBseCkKK2ludCBlMTAwMF9zZXRfc3BkX2RwbHgoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBzcGQsIHU4IGRwbHgpCiB7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAogCWh3LT5hdXRvbmVnID0gMDsKIAorCS8qIE1ha2Ugc3VyZSBkcGx4IGlzIGF0IG1vc3QgMSBiaXQgYW5kIGxzYiBvZiBzcGVlZCBpcyBub3Qgc2V0CisJICogZm9yIHRoZSBzd2l0Y2goKSBiZWxvdyB0byB3b3JrICovCisJaWYgKChzcGQgJiAxKSB8fCAoZHBseCAmIH4xKSkKKwkJZ290byBlcnJfaW52YWw7CisKIAkvKiBGaWJlciBOSUNzIG9ubHkgYWxsb3cgMTAwMCBnYnBzIEZ1bGwgZHVwbGV4ICovCiAJaWYgKChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyKSAmJgotCQlzcGRkcGx4ICE9IChTUEVFRF8xMDAwICsgRFVQTEVYX0ZVTEwpKSB7Ci0JCWVfZXJyKHByb2JlLCAiVW5zdXBwb3J0ZWQgU3BlZWQvRHVwbGV4IGNvbmZpZ3VyYXRpb25cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJICAgIHNwZCAhPSBTUEVFRF8xMDAwICYmCisJICAgIGRwbHggIT0gRFVQTEVYX0ZVTEwpCisJCWdvdG8gZXJyX2ludmFsOwogCi0Jc3dpdGNoIChzcGRkcGx4KSB7CisJc3dpdGNoIChzcGQgKyBkcGx4KSB7CiAJY2FzZSBTUEVFRF8xMCArIERVUExFWF9IQUxGOgogCQlody0+Zm9yY2VkX3NwZWVkX2R1cGxleCA9IGUxMDAwXzEwX2hhbGY7CiAJCWJyZWFrOwpAQCAtNDYyOCwxMCArNDYzMiwxMyBAQAogCQlicmVhazsKIAljYXNlIFNQRUVEXzEwMDAgKyBEVVBMRVhfSEFMRjogLyogbm90IHN1cHBvcnRlZCAqLwogCWRlZmF1bHQ6Ci0JCWVfZXJyKHByb2JlLCAiVW5zdXBwb3J0ZWQgU3BlZWQvRHVwbGV4IGNvbmZpZ3VyYXRpb25cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBlcnJfaW52YWw7CiAJfQogCXJldHVybiAwOworCitlcnJfaW52YWw6CisJZV9lcnIocHJvYmUsICJVbnN1cHBvcnRlZCBTcGVlZC9EdXBsZXggY29uZmlndXJhdGlvblxuIik7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBpbnQgX19lMTAwMF9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCAqZW5hYmxlX3dha2UpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvODI1NzEuYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jCmluZGV4IDg5YTY5MDMuLjgyOTVmMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jCkBAIC0zMDAsNiArMzAwLDcgQEAKIAkJZnVuYy0+c2V0X2xhbl9pZCA9IGUxMDAwX3NldF9sYW5faWRfc2luZ2xlX3BvcnQ7CiAJCWZ1bmMtPmNoZWNrX21uZ19tb2RlID0gZTEwMDBlX2NoZWNrX21uZ19tb2RlX2dlbmVyaWM7CiAJCWZ1bmMtPmxlZF9vbiA9IGUxMDAwZV9sZWRfb25fZ2VuZXJpYzsKKwkJZnVuYy0+YmxpbmtfbGVkID0gZTEwMDBlX2JsaW5rX2xlZF9nZW5lcmljOwogCiAJCS8qIEZXU00gcmVnaXN0ZXIgKi8KIAkJbWFjLT5oYXNfZndzbSA9IHRydWU7CkBAIC0zMjAsNiArMzIxLDcgQEAKIAlkZWZhdWx0OgogCQlmdW5jLT5jaGVja19tbmdfbW9kZSA9IGUxMDAwZV9jaGVja19tbmdfbW9kZV9nZW5lcmljOwogCQlmdW5jLT5sZWRfb24gPSBlMTAwMGVfbGVkX29uX2dlbmVyaWM7CisJCWZ1bmMtPmJsaW5rX2xlZCA9IGUxMDAwZV9ibGlua19sZWRfZ2VuZXJpYzsKIAogCQkvKiBGV1NNIHJlZ2lzdGVyICovCiAJCW1hYy0+aGFzX2Z3c20gPSB0cnVlOwpAQCAtNDMxLDkgKzQzMyw2IEBACiAJY2FzZSBlMTAwMF84MjU3MzoKIAljYXNlIGUxMDAwXzgyNTc0OgogCWNhc2UgZTEwMDBfODI1ODM6Ci0JCS8qIERpc2FibGUgQVNQTSBMMHMgZHVlIHRvIGhhcmR3YXJlIGVycmF0YSAqLwotCQllMTAwMGVfZGlzYWJsZV9hc3BtKGFkYXB0ZXItPnBkZXYsIFBDSUVfTElOS19TVEFURV9MMFMpOwotCiAJCWlmIChwZGV2LT5kZXZpY2UgPT0gRTEwMDBfREVWX0lEXzgyNTczTCkgewogCQkJYWRhcHRlci0+ZmxhZ3MgfD0gRkxBR19IQVNfSlVNQk9fRlJBTUVTOwogCQkJYWRhcHRlci0+bWF4X2h3X2ZyYW1lX3NpemUgPSBERUZBVUxUX0pVTUJPOwpAQCAtNTk0LDcgKzU5Myw3IEBACiAKIAkJZXh0Y25mX2N0cmwgfD0gRTEwMDBfRVhUQ05GX0NUUkxfTURJT19TV19PV05FUlNISVA7CiAKLQkJbXNsZWVwKDIpOworCQl1c2xlZXBfcmFuZ2UoMjAwMCwgNDAwMCk7CiAJCWkrKzsKIAl9IHdoaWxlIChpIDwgTURJT19PV05FUlNISVBfVElNRU9VVCk7CiAKQEAgLTgxNiw3ICs4MTUsNyBAQAogCiAJLyogQ2hlY2sgZm9yIHBlbmRpbmcgb3BlcmF0aW9ucy4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgRTEwMDBfRkxBU0hfVVBEQVRFUzsgaSsrKSB7Ci0JCW1zbGVlcCgxKTsKKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwogCQlpZiAoKGVyMzIoRUVDRCkgJiBFMTAwMF9FRUNEX0ZMVVBEKSA9PSAwKQogCQkJYnJlYWs7CiAJfQpAQCAtODQwLDcgKzgzOSw3IEBACiAJZXczMihFRUNELCBlZWNkKTsKIAogCWZvciAoaSA9IDA7IGkgPCBFMTAwMF9GTEFTSF9VUERBVEVTOyBpKyspIHsKLQkJbXNsZWVwKDEpOworCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CiAJCWlmICgoZXIzMihFRUNEKSAmIEUxMDAwX0VFQ0RfRkxVUEQpID09IDApCiAJCQlicmVhazsKIAl9CkBAIC05MzAsNyArOTI5LDcgQEAKIAkJaWYgKGVyMzIoRUVNTkdDVEwpICYKIAkJICAgIEUxMDAwX05WTV9DRkdfRE9ORV9QT1JUXzApCiAJCQlicmVhazsKLQkJbXNsZWVwKDEpOworCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CiAJCXRpbWVvdXQtLTsKIAl9CiAJaWYgKCF0aW1lb3V0KSB7CkBAIC0xMDM3LDcgKzEwMzYsNyBAQAogCWV3MzIoVENUTCwgRTEwMDBfVENUTF9QU1ApOwogCWUxZV9mbHVzaCgpOwogCi0JbXNsZWVwKDEwKTsKKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDIwMDAwKTsKIAogCS8qCiAJICogTXVzdCBhY3F1aXJlIHRoZSBNRElPIG93bmVyc2hpcCBiZWZvcmUgTUFDIHJlc2V0LgpAQCAtMjA2Niw3ICsyMDY1LDggQEAKIAkJCQkgIHwgRkxBR19IQVNfU01BUlRfUE9XRVJfRE9XTgogCQkJCSAgfCBGTEFHX0hBU19BTVQKIAkJCQkgIHwgRkxBR19IQVNfU1dTTV9PTl9MT0FELAotCS5mbGFnczIJCQk9IEZMQUcyX0RJU0FCTEVfQVNQTV9MMSwKKwkuZmxhZ3MyCQkJPSBGTEFHMl9ESVNBQkxFX0FTUE1fTDEKKwkJCQkgIHwgRkxBRzJfRElTQUJMRV9BU1BNX0wwUywKIAkucGJhCQkJPSAyMCwKIAkubWF4X2h3X2ZyYW1lX3NpemUJPSBFVEhfRlJBTUVfTEVOICsgRVRIX0ZDU19MRU4sCiAJLmdldF92YXJpYW50cwkJPSBlMTAwMF9nZXRfdmFyaWFudHNfODI1NzEsCkBAIC0yMDg2LDcgKzIwODYsOCBAQAogCQkJCSAgfCBGTEFHX0hBU19TTUFSVF9QT1dFUl9ET1dOCiAJCQkJICB8IEZMQUdfSEFTX0FNVAogCQkJCSAgfCBGTEFHX0hBU19DVFJMRVhUX09OX0xPQUQsCi0JLmZsYWdzMgkJCSAgPSBGTEFHMl9DSEVDS19QSFlfSEFORywKKwkuZmxhZ3MyCQkJICA9IEZMQUcyX0NIRUNLX1BIWV9IQU5HCisJCQkJICB8IEZMQUcyX0RJU0FCTEVfQVNQTV9MMFMsCiAJLnBiYQkJCT0gMzIsCiAJLm1heF9od19mcmFtZV9zaXplCT0gREVGQVVMVF9KVU1CTywKIAkuZ2V0X3ZhcmlhbnRzCQk9IGUxMDAwX2dldF92YXJpYW50c184MjU3MSwKQEAgLTIxMDQsNiArMjEwNSw3IEBACiAJCQkJICB8IEZMQUdfSEFTX1NNQVJUX1BPV0VSX0RPV04KIAkJCQkgIHwgRkxBR19IQVNfQU1UCiAJCQkJICB8IEZMQUdfSEFTX0NUUkxFWFRfT05fTE9BRCwKKwkuZmxhZ3MyCQkJPSBGTEFHMl9ESVNBQkxFX0FTUE1fTDBTLAogCS5wYmEJCQk9IDMyLAogCS5tYXhfaHdfZnJhbWVfc2l6ZQk9IEVUSF9GUkFNRV9MRU4gKyBFVEhfRkNTX0xFTiwKIAkuZ2V0X3ZhcmlhbnRzCQk9IGUxMDAwX2dldF92YXJpYW50c184MjU3MSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oIGIvZHJpdmVycy9uZXQvZTEwMDBlL2UxMDAwLmgKaW5kZXggMDBiZjU5NS4uOTU0OTg3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2UxMDAwLmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2UxMDAwLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpZm5kZWYgX0UxMDAwX0hfCiAjZGVmaW5lIF9FMTAwMF9IXwogCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgpAQCAtMzksNiArNDAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS1hc3BtLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CiAKICNpbmNsdWRlICJody5oIgogCkBAIC0yODAsNyArMjgyLDcgQEAKIAogCWNvbnN0IHN0cnVjdCBlMTAwMF9pbmZvICplaTsKIAotCXN0cnVjdCB2bGFuX2dyb3VwICp2bGdycDsKKwl1bnNpZ25lZCBsb25nIGFjdGl2ZV92bGFuc1tCSVRTX1RPX0xPTkdTKFZMQU5fTl9WSUQpXTsKIAl1MzIgYmRfbnVtYmVyOwogCXUzMiByeF9idWZmZXJfbGVuOwogCXUxNiBtbmdfdmxhbl9pZDsKQEAgLTM4OSwxMyArMzkxLDEwIEBACiAKIAlib29sIGZjX2F1dG9uZWc7CiAKLQl1bnNpZ25lZCBsb25nIGxlZF9zdGF0dXM7Ci0KIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGZsYWdzMjsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZG93bnNoaWZ0X3Rhc2s7CiAJc3RydWN0IHdvcmtfc3RydWN0IHVwZGF0ZV9waHlfdGFzazsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgbGVkX2JsaW5rX3Rhc2s7CiAJc3RydWN0IHdvcmtfc3RydWN0IHByaW50X2hhbmdfdGFzazsKIAogCWJvb2wgaWRsZV9jaGVjazsKQEAgLTQ1Niw2ICs0NTUsNyBAQAogI2RlZmluZSBGTEFHMl9IQVNfUEhZX1NUQVRTICAgICAgICAgICAgICAgKDEgPDwgNCkKICNkZWZpbmUgRkxBRzJfSEFTX0VFRSAgICAgICAgICAgICAgICAgICAgICgxIDw8IDUpCiAjZGVmaW5lIEZMQUcyX0RNQV9CVVJTVCAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBGTEFHMl9ESVNBQkxFX0FTUE1fTDBTICAgICAgICAgICAgKDEgPDwgNykKICNkZWZpbmUgRkxBRzJfRElTQUJMRV9BSU0gICAgICAgICAgICAgICAgICgxIDw8IDgpCiAjZGVmaW5lIEZMQUcyX0NIRUNLX1BIWV9IQU5HICAgICAgICAgICAgICAoMSA8PCA5KQogCkBAIC00ODQsNyArNDg0LDYgQEAKIAogZXh0ZXJuIHZvaWQgZTEwMDBlX2NoZWNrX29wdGlvbnMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwogZXh0ZXJuIHZvaWQgZTEwMDBlX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKLWV4dGVybiB2b2lkIGUxMDAwZV9sZWRfYmxpbmtfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCiBleHRlcm4gaW50IGUxMDAwZV91cChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CiBleHRlcm4gdm9pZCBlMTAwMGVfZG93bihzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CkBAIC01MDIsNyArNTAxLDYgQEAKIGV4dGVybiB2b2lkIGUxMDAwZV9yZXNldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CiBleHRlcm4gdm9pZCBlMTAwMGVfZ2V0X2h3X2NvbnRyb2woc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwogZXh0ZXJuIHZvaWQgZTEwMDBlX3JlbGVhc2VfaHdfY29udHJvbChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7Ci1leHRlcm4gdm9pZCBlMTAwMGVfZGlzYWJsZV9hc3BtKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MTYgc3RhdGUpOwogCiBleHRlcm4gdW5zaWduZWQgaW50IGNvcHlicmVhazsKIApAQCAtNTczLDcgKzU3MSw3IEBACiBleHRlcm4gdm9pZCBlMTAwMGVfY29uZmlnX2NvbGxpc2lvbl9kaXN0KHN0cnVjdCBlMTAwMF9odyAqaHcpOwogZXh0ZXJuIHMzMiBlMTAwMGVfY29uZmlnX2ZjX2FmdGVyX2xpbmtfdXAoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBleHRlcm4gczMyIGUxMDAwZV9mb3JjZV9tYWNfZmMoc3RydWN0IGUxMDAwX2h3ICpodyk7Ci1leHRlcm4gczMyIGUxMDAwZV9ibGlua19sZWQoc3RydWN0IGUxMDAwX2h3ICpodyk7CitleHRlcm4gczMyIGUxMDAwZV9ibGlua19sZWRfZ2VuZXJpYyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIGV4dGVybiB2b2lkIGUxMDAwX3dyaXRlX3ZmdGFfZ2VuZXJpYyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MzIgdmFsdWUpOwogZXh0ZXJuIHMzMiBlMTAwMF9jaGVja19hbHRfbWFjX2FkZHJfZ2VuZXJpYyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIGV4dGVybiB2b2lkIGUxMDAwZV9yZXNldF9hZGFwdGl2ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9lczJsYW4uYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9lczJsYW4uYwppbmRleCAyZmVmYTgyLi5mNGJiZWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvZXMybGFuLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2VzMmxhbi5jCkBAIC02MTIsNyArNjEyLDcgQEAKIAl3aGlsZSAodGltZW91dCkgewogCQlpZiAoZXIzMihFRU1OR0NUTCkgJiBtYXNrKQogCQkJYnJlYWs7Ci0JCW1zbGVlcCgxKTsKKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwogCQl0aW1lb3V0LS07CiAJfQogCWlmICghdGltZW91dCkgewpAQCAtODAyLDcgKzgwMiw3IEBACiAJZXczMihUQ1RMLCBFMTAwMF9UQ1RMX1BTUCk7CiAJZTFlX2ZsdXNoKCk7CiAKLQltc2xlZXAoMTApOworCXVzbGVlcF9yYW5nZSgxMDAwMCwgMjAwMDApOwogCiAJY3RybCA9IGVyMzIoQ1RSTCk7CiAKQEAgLTE0MzQsNiArMTQzNCw3IEBACiBzdGF0aWMgc3RydWN0IGUxMDAwX21hY19vcGVyYXRpb25zIGVzMl9tYWNfb3BzID0gewogCS5yZWFkX21hY19hZGRyCQk9IGUxMDAwX3JlYWRfbWFjX2FkZHJfODAwMDNlczJsYW4sCiAJLmlkX2xlZF9pbml0CQk9IGUxMDAwZV9pZF9sZWRfaW5pdCwKKwkuYmxpbmtfbGVkCQk9IGUxMDAwZV9ibGlua19sZWRfZ2VuZXJpYywKIAkuY2hlY2tfbW5nX21vZGUJCT0gZTEwMDBlX2NoZWNrX21uZ19tb2RlX2dlbmVyaWMsCiAJLyogY2hlY2tfZm9yX2xpbmsgZGVwZW5kZW50IG9uIG1lZGlhIHR5cGUgKi8KIAkuY2xlYW51cF9sZWQJCT0gZTEwMDBlX2NsZWFudXBfbGVkX2dlbmVyaWMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL2V0aHRvb2wuYwppbmRleCAwN2YwOWU5Ni4uODU5ZDBkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvZXRodG9vbC5jCkBAIC0xMjIsNiArMTIyLDcgQEAKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgc3BlZWQ7CiAKIAlpZiAoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSB7CiAKQEAgLTE1OSwyMyArMTYwLDIzIEBACiAJCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9FWFRFUk5BTDsKIAl9CiAKLQllY21kLT5zcGVlZCA9IC0xOworCXNwZWVkID0gLTE7CiAJZWNtZC0+ZHVwbGV4ID0gLTE7CiAKIAlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiAJCWlmIChuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKLQkJCWVjbWQtPnNwZWVkID0gYWRhcHRlci0+bGlua19zcGVlZDsKKwkJCXNwZWVkID0gYWRhcHRlci0+bGlua19zcGVlZDsKIAkJCWVjbWQtPmR1cGxleCA9IGFkYXB0ZXItPmxpbmtfZHVwbGV4IC0gMTsKIAkJfQogCX0gZWxzZSB7CiAJCXUzMiBzdGF0dXMgPSBlcjMyKFNUQVRVUyk7CiAJCWlmIChzdGF0dXMgJiBFMTAwMF9TVEFUVVNfTFUpIHsKIAkJCWlmIChzdGF0dXMgJiBFMTAwMF9TVEFUVVNfU1BFRURfMTAwMCkKLQkJCQllY21kLT5zcGVlZCA9IDEwMDA7CisJCQkJc3BlZWQgPSBTUEVFRF8xMDAwOwogCQkJZWxzZSBpZiAoc3RhdHVzICYgRTEwMDBfU1RBVFVTX1NQRUVEXzEwMCkKLQkJCQllY21kLT5zcGVlZCA9IDEwMDsKKwkJCQlzcGVlZCA9IFNQRUVEXzEwMDsKIAkJCWVsc2UKLQkJCQllY21kLT5zcGVlZCA9IDEwOworCQkJCXNwZWVkID0gU1BFRURfMTA7CiAKIAkJCWlmIChzdGF0dXMgJiBFMTAwMF9TVEFUVVNfRkQpCiAJCQkJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CkBAIC0xODQsNiArMTg1LDcgQEAKIAkJfQogCX0KIAorCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBzcGVlZCk7CiAJZWNtZC0+YXV0b25lZyA9ICgoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIpIHx8CiAJCQkgaHctPm1hYy5hdXRvbmVnKSA/IEFVVE9ORUdfRU5BQkxFIDogQVVUT05FR19ESVNBQkxFOwogCkBAIC0xOTgsMjAgKzIwMCwyNSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGUxMDAwX3NldF9zcGRfZHBseChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgdTE2IHNwZGRwbHgpCitzdGF0aWMgaW50IGUxMDAwX3NldF9zcGRfZHBseChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgdTMyIHNwZCwgdTggZHBseCkKIHsKIAlzdHJ1Y3QgZTEwMDBfbWFjX2luZm8gKm1hYyA9ICZhZGFwdGVyLT5ody5tYWM7CiAKIAltYWMtPmF1dG9uZWcgPSAwOwogCisJLyogTWFrZSBzdXJlIGRwbHggaXMgYXQgbW9zdCAxIGJpdCBhbmQgbHNiIG9mIHNwZWVkIGlzIG5vdCBzZXQKKwkgKiBmb3IgdGhlIHN3aXRjaCgpIGJlbG93IHRvIHdvcmsgKi8KKwlpZiAoKHNwZCAmIDEpIHx8IChkcGx4ICYgfjEpKQorCQlnb3RvIGVycl9pbnZhbDsKKwogCS8qIEZpYmVyIE5JQ3Mgb25seSBhbGxvdyAxMDAwIGdicHMgRnVsbCBkdXBsZXggKi8KIAlpZiAoKGFkYXB0ZXItPmh3LnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIpICYmCi0JCXNwZGRwbHggIT0gKFNQRUVEXzEwMDAgKyBEVVBMRVhfRlVMTCkpIHsKLQkJZV9lcnIoIlVuc3VwcG9ydGVkIFNwZWVkL0R1cGxleCBjb25maWd1cmF0aW9uXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJICAgIHNwZCAhPSBTUEVFRF8xMDAwICYmCisJICAgIGRwbHggIT0gRFVQTEVYX0ZVTEwpIHsKKwkJZ290byBlcnJfaW52YWw7CiAJfQogCi0Jc3dpdGNoIChzcGRkcGx4KSB7CisJc3dpdGNoIChzcGQgKyBkcGx4KSB7CiAJY2FzZSBTUEVFRF8xMCArIERVUExFWF9IQUxGOgogCQltYWMtPmZvcmNlZF9zcGVlZF9kdXBsZXggPSBBRFZFUlRJU0VfMTBfSEFMRjsKIAkJYnJlYWs7CkBAIC0yMzAsMTAgKzIzNywxMyBAQAogCQlicmVhazsKIAljYXNlIFNQRUVEXzEwMDAgKyBEVVBMRVhfSEFMRjogLyogbm90IHN1cHBvcnRlZCAqLwogCWRlZmF1bHQ6Ci0JCWVfZXJyKCJVbnN1cHBvcnRlZCBTcGVlZC9EdXBsZXggY29uZmlndXJhdGlvblxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlnb3RvIGVycl9pbnZhbDsKIAl9CiAJcmV0dXJuIDA7CisKK2Vycl9pbnZhbDoKKwllX2VycigiVW5zdXBwb3J0ZWQgU3BlZWQvRHVwbGV4IGNvbmZpZ3VyYXRpb25cbiIpOworCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgaW50IGUxMDAwX3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LApAQCAtMjUzLDcgKzI2Myw3IEBACiAJfQogCiAJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19FMTAwMF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCi0JCW1zbGVlcCgxKTsKKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwogCiAJaWYgKGVjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHsKIAkJaHctPm1hYy5hdXRvbmVnID0gMTsKQEAgLTI2OSw3ICsyNzksOCBAQAogCQlpZiAoYWRhcHRlci0+ZmNfYXV0b25lZykKIAkJCWh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGUxMDAwX2ZjX2RlZmF1bHQ7CiAJfSBlbHNlIHsKLQkJaWYgKGUxMDAwX3NldF9zcGRfZHBseChhZGFwdGVyLCBlY21kLT5zcGVlZCArIGVjbWQtPmR1cGxleCkpIHsKKwkJdTMyIHNwZWVkID0gZXRodG9vbF9jbWRfc3BlZWQoZWNtZCk7CisJCWlmIChlMTAwMF9zZXRfc3BkX2RwbHgoYWRhcHRlciwgc3BlZWQsIGVjbWQtPmR1cGxleCkpIHsKIAkJCWNsZWFyX2JpdChfX0UxMDAwX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC0zMTcsNyArMzI4LDcgQEAKIAlhZGFwdGVyLT5mY19hdXRvbmVnID0gcGF1c2UtPmF1dG9uZWc7CiAKIAl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChfX0UxMDAwX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKLQkJbXNsZWVwKDEpOworCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CiAKIAlpZiAoYWRhcHRlci0+ZmNfYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgewogCQlody0+ZmMucmVxdWVzdGVkX21vZGUgPSBlMTAwMF9mY19kZWZhdWx0OwpAQCAtNjczLDcgKzY4NCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19FMTAwMF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCi0JCW1zbGVlcCgxKTsKKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwogCiAJaWYgKG5ldGlmX3J1bm5pbmcoYWRhcHRlci0+bmV0ZGV2KSkKIAkJZTEwMDBlX2Rvd24oYWRhcHRlcik7CkBAIC05NTIsNyArOTYzLDcgQEAKIAogCS8qIERpc2FibGUgYWxsIHRoZSBpbnRlcnJ1cHRzICovCiAJZXczMihJTUMsIDB4RkZGRkZGRkYpOwotCW1zbGVlcCgxMCk7CisJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CiAKIAkvKiBUZXN0IGVhY2ggaW50ZXJydXB0ICovCiAJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKQEAgLTk4NCw3ICs5OTUsNyBAQAogCQkJYWRhcHRlci0+dGVzdF9pY3IgPSAwOwogCQkJZXczMihJTUMsIG1hc2spOwogCQkJZXczMihJQ1MsIG1hc2spOwotCQkJbXNsZWVwKDEwKTsKKwkJCXVzbGVlcF9yYW5nZSgxMDAwMCwgMjAwMDApOwogCiAJCQlpZiAoYWRhcHRlci0+dGVzdF9pY3IgJiBtYXNrKSB7CiAJCQkJKmRhdGEgPSAzOwpAQCAtMTAwMiw3ICsxMDEzLDcgQEAKIAkJYWRhcHRlci0+dGVzdF9pY3IgPSAwOwogCQlldzMyKElNUywgbWFzayk7CiAJCWV3MzIoSUNTLCBtYXNrKTsKLQkJbXNsZWVwKDEwKTsKKwkJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CiAKIAkJaWYgKCEoYWRhcHRlci0+dGVzdF9pY3IgJiBtYXNrKSkgewogCQkJKmRhdGEgPSA0OwpAQCAtMTAyMCw3ICsxMDMxLDcgQEAKIAkJCWFkYXB0ZXItPnRlc3RfaWNyID0gMDsKIAkJCWV3MzIoSU1DLCB+bWFzayAmIDB4MDAwMDdGRkYpOwogCQkJZXczMihJQ1MsIH5tYXNrICYgMHgwMDAwN0ZGRik7Ci0JCQltc2xlZXAoMTApOworCQkJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CiAKIAkJCWlmIChhZGFwdGVyLT50ZXN0X2ljcikgewogCQkJCSpkYXRhID0gNTsKQEAgLTEwMzEsNyArMTA0Miw3IEBACiAKIAkvKiBEaXNhYmxlIGFsbCB0aGUgaW50ZXJydXB0cyAqLwogCWV3MzIoSU1DLCAweEZGRkZGRkZGKTsKLQltc2xlZXAoMTApOworCXVzbGVlcF9yYW5nZSgxMDAwMCwgMjAwMDApOwogCiAJLyogVW5ob29rIHRlc3QgaW50ZXJydXB0IGhhbmRsZXIgKi8KIAlmcmVlX2lycShpcnEsIG5ldGRldik7CkBAIC0xNDA2LDcgKzE0MTcsNyBAQAogCSAqLwogI2RlZmluZSBFMTAwMF9TRVJERVNfTEJfT04gMHg0MTAKIAlldzMyKFNDVEwsIEUxMDAwX1NFUkRFU19MQl9PTik7Ci0JbXNsZWVwKDEwKTsKKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDIwMDAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTUwMSw3ICsxNTEyLDcgQEAKIAkJICAgIGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykgewogI2RlZmluZSBFMTAwMF9TRVJERVNfTEJfT0ZGIDB4NDAwCiAJCQlldzMyKFNDVEwsIEUxMDAwX1NFUkRFU19MQl9PRkYpOwotCQkJbXNsZWVwKDEwKTsKKwkJCXVzbGVlcF9yYW5nZSgxMDAwMCwgMjAwMDApOwogCQkJYnJlYWs7CiAJCX0KIAkJLyogRmFsbCBUaHJvdWdoICovCkBAIC0xODUxLDY0ICsxODYyLDM1IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIHRvZ2dsZSBMRUQgNCB0aW1lcyBwZXIgc2Vjb25kID0gMiAiYmxpbmtzIiBwZXIgc2Vjb25kICovCi0jZGVmaW5lIEUxMDAwX0lEX0lOVEVSVkFMCShIWi80KQotCi0vKiBiaXQgZGVmaW5lcyBmb3IgYWRhcHRlci0+bGVkX3N0YXR1cyAqLwotI2RlZmluZSBFMTAwMF9MRURfT04JCTAKLQotdm9pZCBlMTAwMGVfbGVkX2JsaW5rX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZTEwMDBfYWRhcHRlciwgbGVkX2JsaW5rX3Rhc2spOwotCi0JaWYgKHRlc3RfYW5kX2NoYW5nZV9iaXQoRTEwMDBfTEVEX09OLCAmYWRhcHRlci0+bGVkX3N0YXR1cykpCi0JCWFkYXB0ZXItPmh3Lm1hYy5vcHMubGVkX29mZigmYWRhcHRlci0+aHcpOwotCWVsc2UKLQkJYWRhcHRlci0+aHcubWFjLm9wcy5sZWRfb24oJmFkYXB0ZXItPmh3KTsKLX0KLQotc3RhdGljIHZvaWQgZTEwMDBfbGVkX2JsaW5rX2NhbGxiYWNrKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqKSBkYXRhOwotCi0Jc2NoZWR1bGVfd29yaygmYWRhcHRlci0+bGVkX2JsaW5rX3Rhc2spOwotCW1vZF90aW1lcigmYWRhcHRlci0+YmxpbmtfdGltZXIsIGppZmZpZXMgKyBFMTAwMF9JRF9JTlRFUlZBTCk7Ci19Ci0KLXN0YXRpYyBpbnQgZTEwMDBfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKK3N0YXRpYyBpbnQgZTEwMDBfc2V0X3BoeXNfaWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgICAgZW51bSBldGh0b29sX3BoeXNfaWRfc3RhdGUgc3RhdGUpCiB7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAKLQlpZiAoIWRhdGEpCi0JCWRhdGEgPSBJTlRfTUFYOworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIEVUSFRPT0xfSURfQUNUSVZFOgorCQlpZiAoIWh3LT5tYWMub3BzLmJsaW5rX2xlZCkKKwkJCXJldHVybiAyOwkvKiBjeWNsZSBvbi9vZmYgdHdpY2UgcGVyIHNlY29uZCAqLwogCi0JaWYgKChody0+cGh5LnR5cGUgPT0gZTEwMDBfcGh5X2lmZSkgfHwKLQkgICAgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9wY2hsYW4pIHx8Ci0JICAgIChody0+bWFjLnR5cGUgPT0gZTEwMDBfcGNoMmxhbikgfHwKLQkgICAgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU4MykgfHwKLQkgICAgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NCkpIHsKLQkJaWYgKCFhZGFwdGVyLT5ibGlua190aW1lci5mdW5jdGlvbikgewotCQkJaW5pdF90aW1lcigmYWRhcHRlci0+YmxpbmtfdGltZXIpOwotCQkJYWRhcHRlci0+YmxpbmtfdGltZXIuZnVuY3Rpb24gPQotCQkJCWUxMDAwX2xlZF9ibGlua19jYWxsYmFjazsKLQkJCWFkYXB0ZXItPmJsaW5rX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYWRhcHRlcjsKLQkJfQotCQltb2RfdGltZXIoJmFkYXB0ZXItPmJsaW5rX3RpbWVyLCBqaWZmaWVzKTsKLQkJbXNsZWVwX2ludGVycnVwdGlibGUoZGF0YSAqIDEwMDApOwotCQlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+YmxpbmtfdGltZXIpOworCQlody0+bWFjLm9wcy5ibGlua19sZWQoaHcpOworCQlicmVhazsKKworCWNhc2UgRVRIVE9PTF9JRF9JTkFDVElWRToKIAkJaWYgKGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfaWZlKQogCQkJZTFlX3dwaHkoaHcsIElGRV9QSFlfU1BFQ0lBTF9DT05UUk9MX0xFRCwgMCk7Ci0JfSBlbHNlIHsKLQkJZTEwMDBlX2JsaW5rX2xlZChodyk7Ci0JCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKGRhdGEgKiAxMDAwKTsKKwkJaHctPm1hYy5vcHMubGVkX29mZihodyk7CisJCWh3LT5tYWMub3BzLmNsZWFudXBfbGVkKGh3KTsKKwkJYnJlYWs7CisKKwljYXNlIEVUSFRPT0xfSURfT046CisJCWFkYXB0ZXItPmh3Lm1hYy5vcHMubGVkX29uKCZhZGFwdGVyLT5odyk7CisJCWJyZWFrOworCisJY2FzZSBFVEhUT09MX0lEX09GRjoKKwkJYWRhcHRlci0+aHcubWFjLm9wcy5sZWRfb2ZmKCZhZGFwdGVyLT5odyk7CisJCWJyZWFrOwogCX0KLQotCWh3LT5tYWMub3BzLmxlZF9vZmYoaHcpOwotCWNsZWFyX2JpdChFMTAwMF9MRURfT04sICZhZGFwdGVyLT5sZWRfc3RhdHVzKTsKLQlody0+bWFjLm9wcy5jbGVhbnVwX2xlZChodyk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjAyMCw2ICsyMDAyLDMxIEBACiAJfQogfQogCitzdGF0aWMgaW50IGUxMDAwZV9zZXRfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIGRhdGEpCit7CisJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWJvb2wgbmVlZF9yZXNldCA9IGZhbHNlOworCWludCByYzsKKworCW5lZWRfcmVzZXQgPSAoZGF0YSAmIEVUSF9GTEFHX1JYVkxBTikgIT0KKwkJICAgICAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSFdfVkxBTl9SWCk7CisKKwlyYyA9IGV0aHRvb2xfb3Bfc2V0X2ZsYWdzKG5ldGRldiwgZGF0YSwgRVRIX0ZMQUdfUlhWTEFOIHwKKwkJCQkgIEVUSF9GTEFHX1RYVkxBTik7CisKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCWlmIChuZWVkX3Jlc2V0KSB7CisJCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCQllMTAwMGVfcmVpbml0X2xvY2tlZChhZGFwdGVyKTsKKwkJZWxzZQorCQkJZTEwMDBlX3Jlc2V0KGFkYXB0ZXIpOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGUxMDAwX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MJCT0gZTEwMDBfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MJCT0gZTEwMDBfc2V0X3NldHRpbmdzLApAQCAtMjA0OSwxMiArMjA1NiwxMyBAQAogCS5zZXRfdHNvCQk9IGUxMDAwX3NldF90c28sCiAJLnNlbGZfdGVzdAkJPSBlMTAwMF9kaWFnX3Rlc3QsCiAJLmdldF9zdHJpbmdzCQk9IGUxMDAwX2dldF9zdHJpbmdzLAotCS5waHlzX2lkCQk9IGUxMDAwX3BoeXNfaWQsCisJLnNldF9waHlzX2lkCQk9IGUxMDAwX3NldF9waHlzX2lkLAogCS5nZXRfZXRodG9vbF9zdGF0cwk9IGUxMDAwX2dldF9ldGh0b29sX3N0YXRzLAogCS5nZXRfc3NldF9jb3VudAkJPSBlMTAwMGVfZ2V0X3NzZXRfY291bnQsCiAJLmdldF9jb2FsZXNjZQkJPSBlMTAwMF9nZXRfY29hbGVzY2UsCiAJLnNldF9jb2FsZXNjZQkJPSBlMTAwMF9zZXRfY29hbGVzY2UsCiAJLmdldF9mbGFncwkJPSBldGh0b29sX29wX2dldF9mbGFncywKKwkuc2V0X2ZsYWdzCQk9IGUxMDAwZV9zZXRfZmxhZ3MsCiB9OwogCiB2b2lkIGUxMDAwZV9zZXRfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9ody5oIGIvZHJpdmVycy9uZXQvZTEwMDBlL2h3LmgKaW5kZXggMzA3ZTFlYy4uNmMyZmE4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2h3LmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2h3LmgKQEAgLTc1Niw2ICs3NTYsNyBAQAogLyogRnVuY3Rpb24gcG9pbnRlcnMgYW5kIHN0YXRpYyBkYXRhIGZvciB0aGUgTUFDLiAqLwogc3RydWN0IGUxMDAwX21hY19vcGVyYXRpb25zIHsKIAlzMzIgICgqaWRfbGVkX2luaXQpKHN0cnVjdCBlMTAwMF9odyAqKTsKKwlzMzIgICgqYmxpbmtfbGVkKShzdHJ1Y3QgZTEwMDBfaHcgKik7CiAJYm9vbCAoKmNoZWNrX21uZ19tb2RlKShzdHJ1Y3QgZTEwMDBfaHcgKik7CiAJczMyICAoKmNoZWNrX2Zvcl9saW5rKShzdHJ1Y3QgZTEwMDBfaHcgKik7CiAJczMyICAoKmNsZWFudXBfbGVkKShzdHJ1Y3QgZTEwMDBfaHcgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvaWNoOGxhbi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL2ljaDhsYW4uYwppbmRleCBjZTFkYmZkLi4zMzY5ZDFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvaWNoOGxhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9pY2g4bGFuLmMKQEAgLTMzOCw3ICszMzgsNyBAQAogCS8qIFVuZ2F0ZSBhdXRvbWF0aWMgUEhZIGNvbmZpZ3VyYXRpb24gb24gbm9uLW1hbmFnZWQgODI1NzkgKi8KIAlpZiAoKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9wY2gybGFuKSAmJgogCSAgICAhKGZ3c20gJiBFMTAwMF9JQ0hfRldTTV9GV19WQUxJRCkpIHsKLQkJbXNsZWVwKDEwKTsKKwkJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CiAJCWUxMDAwX2dhdGVfaHdfcGh5X2NvbmZpZ19pY2g4bGFuKGh3LCBmYWxzZSk7CiAJfQogCkBAIC00MjcsNyArNDI3LDcgQEAKIAlwaHktPmlkID0gMDsKIAl3aGlsZSAoKGUxMDAwX3BoeV91bmtub3duID09IGUxMDAwZV9nZXRfcGh5X3R5cGVfZnJvbV9pZChwaHktPmlkKSkgJiYKIAkgICAgICAgKGkrKyA8IDEwMCkpIHsKLQkJbXNsZWVwKDEpOworCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CiAJCXJldF92YWwgPSBlMTAwMGVfZ2V0X3BoeV9pZChodyk7CiAJCWlmIChyZXRfdmFsKQogCQkJcmV0dXJuIHJldF92YWw7CkBAIC01NjQsNiArNTY0LDggQEAKIAkJbWFjLT5vcHMuY2hlY2tfbW5nX21vZGUgPSBlMTAwMF9jaGVja19tbmdfbW9kZV9pY2g4bGFuOwogCQkvKiBJRCBMRUQgaW5pdCAqLwogCQltYWMtPm9wcy5pZF9sZWRfaW5pdCA9IGUxMDAwZV9pZF9sZWRfaW5pdDsKKwkJLyogYmxpbmsgTEVEICovCisJCW1hYy0+b3BzLmJsaW5rX2xlZCA9IGUxMDAwZV9ibGlua19sZWRfZ2VuZXJpYzsKIAkJLyogc2V0dXAgTEVEICovCiAJCW1hYy0+b3BzLnNldHVwX2xlZCA9IGUxMDAwZV9zZXR1cF9sZWRfZ2VuZXJpYzsKIAkJLyogY2xlYW51cCBMRUQgKi8KQEAgLTc2Nyw2ICs3NjksOCBAQAogCSAgICAgKCEoZXIzMihDVFJMX0VYVCkgJiBFMTAwMF9DVFJMX0VYVF9MU0VDQ0spKSkpIHsKIAkJYWRhcHRlci0+ZmxhZ3MgJj0gfkZMQUdfSEFTX0pVTUJPX0ZSQU1FUzsKIAkJYWRhcHRlci0+bWF4X2h3X2ZyYW1lX3NpemUgPSBFVEhfRlJBTUVfTEVOICsgRVRIX0ZDU19MRU47CisKKwkJaHctPm1hYy5vcHMuYmxpbmtfbGVkID0gTlVMTDsKIAl9CiAKIAlpZiAoKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGUxMDAwX2ljaDhsYW4pICYmCkBAIC0xNzA0LDcgKzE3MDgsNyBAQAogCQlnb3RvIG91dDsKIAogCS8qIEFsbG93IHRpbWUgZm9yIGgvdyB0byBnZXQgdG8gcXVpZXNjZW50IHN0YXRlIGFmdGVyIHJlc2V0ICovCi0JbXNsZWVwKDEwKTsKKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDIwMDAwKTsKIAogCS8qIFBlcmZvcm0gYW55IG5lY2Vzc2FyeSBwb3N0LXJlc2V0IHdvcmthcm91bmRzICovCiAJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKQEAgLTE3MzcsNyArMTc0MSw3IEBACiAJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9wY2gybGFuKSB7CiAJCS8qIFVuZ2F0ZSBhdXRvbWF0aWMgUEhZIGNvbmZpZ3VyYXRpb24gb24gbm9uLW1hbmFnZWQgODI1NzkgKi8KIAkJaWYgKCEoZXIzMihGV1NNKSAmIEUxMDAwX0lDSF9GV1NNX0ZXX1ZBTElEKSkgewotCQkJbXNsZWVwKDEwKTsKKwkJCXVzbGVlcF9yYW5nZSgxMDAwMCwgMjAwMDApOwogCQkJZTEwMDBfZ2F0ZV9od19waHlfY29uZmlnX2ljaDhsYW4oaHcsIGZhbHNlKTsKIAkJfQogCkBAIC0yNTMyLDcgKzI1MzYsNyBAQAogCSAqLwogCWlmICghcmV0X3ZhbCkgewogCQllMTAwMGVfcmVsb2FkX252bShodyk7Ci0JCW1zbGVlcCgxMCk7CisJCXVzbGVlcF9yYW5nZSgxMDAwMCwgMjAwMDApOwogCX0KIAogb3V0OgpAQCAtMzAwOSw3ICszMDEzLDcgQEAKIAlldzMyKFRDVEwsIEUxMDAwX1RDVExfUFNQKTsKIAllMWVfZmx1c2goKTsKIAotCW1zbGVlcCgxMCk7CisJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CiAKIAkvKiBXb3JrYXJvdW5kIGZvciBJQ0g4IGJpdCBjb3JydXB0aW9uIGlzc3VlIGluIEZJRk8gbWVtb3J5ICovCiAJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9pY2g4bGFuKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvbGliLmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvbGliLmMKaW5kZXggOTY5MjFkZTUuLmRkOGFiMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9saWIuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvbGliLmMKQEAgLTE0NCw3ICsxNDQsNyBAQAogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQHJhcl9jb3VudDogcmVjZWl2ZSBhZGRyZXNzIHJlZ2lzdGVycwogICoKLSAqICBTZXR1cHMgdGhlIHJlY2VpdmUgYWRkcmVzcyByZWdpc3RlcnMgYnkgc2V0dGluZyB0aGUgYmFzZSByZWNlaXZlIGFkZHJlc3MKKyAqICBTZXR1cCB0aGUgcmVjZWl2ZSBhZGRyZXNzIHJlZ2lzdGVycyBieSBzZXR0aW5nIHRoZSBiYXNlIHJlY2VpdmUgYWRkcmVzcwogICogIHJlZ2lzdGVyIHRvIHRoZSBkZXZpY2VzIE1BQyBhZGRyZXNzIGFuZCBjbGVhcmluZyBhbGwgdGhlIG90aGVyIHJlY2VpdmUKICAqICBhZGRyZXNzIHJlZ2lzdGVycyB0byAwLgogICoqLwpAQCAtODY4LDcgKzg2OCw3IEBACiAJICogbWlsbGlzZWNvbmRzIGV2ZW4gaWYgdGhlIG90aGVyIGVuZCBpcyBkb2luZyBpdCBpbiBTVykuCiAJICovCiAJZm9yIChpID0gMDsgaSA8IEZJQkVSX0xJTktfVVBfTElNSVQ7IGkrKykgewotCQltc2xlZXAoMTApOworCQl1c2xlZXBfcmFuZ2UoMTAwMDAsIDIwMDAwKTsKIAkJc3RhdHVzID0gZXIzMihTVEFUVVMpOwogCQlpZiAoc3RhdHVzICYgRTEwMDBfU1RBVFVTX0xVKQogCQkJYnJlYWs7CkBAIC05MzAsNyArOTMwLDcgQEAKIAogCWV3MzIoQ1RSTCwgY3RybCk7CiAJZTFlX2ZsdXNoKCk7Ci0JbXNsZWVwKDEpOworCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKIAogCS8qCiAJICogRm9yIHRoZXNlIGFkYXB0ZXJzLCB0aGUgU1cgZGVmaW5hYmxlIHBpbiAxIGlzIHNldCB3aGVuIHRoZSBvcHRpY3MKQEAgLTExODEsNyArMTE4MSw3IEBACiAJCQkgKiBvZiBwYXVzZSBmcmFtZXMuICBJbiB0aGlzIGNhc2UsIHdlIGhhZCB0byBhZHZlcnRpc2UKIAkJCSAqIEZVTEwgZmxvdyBjb250cm9sIGJlY2F1c2Ugd2UgY291bGQgbm90IGFkdmVydGlzZSBSeAogCQkJICogT05MWS4gSGVuY2UsIHdlIG11c3Qgbm93IGNoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvCi0JCQkgKiB0dXJuIE9GRiAgdGhlIFRSQU5TTUlTU0lPTiBvZiBQQVVTRSBmcmFtZXMuCisJCQkgKiB0dXJuIE9GRiB0aGUgVFJBTlNNSVNTSU9OIG9mIFBBVVNFIGZyYW1lcy4KIAkJCSAqLwogCQkJaWYgKGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9PSBlMTAwMF9mY19mdWxsKSB7CiAJCQkJaHctPmZjLmN1cnJlbnRfbW9kZSA9IGUxMDAwX2ZjX2Z1bGw7CkBAIC0xMzg1LDcgKzEzODUsNyBAQAogCXdoaWxlIChpIDwgQVVUT19SRUFEX0RPTkVfVElNRU9VVCkgewogCQlpZiAoZXIzMihFRUNEKSAmIEUxMDAwX0VFQ0RfQVVUT19SRCkKIAkJCWJyZWFrOwotCQltc2xlZXAoMSk7CisJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKIAkJaSsrOwogCX0KIApAQCAtMTUzMCwxMiArMTUzMCwxMiBAQAogfQogCiAvKioKLSAqICBlMTAwMGVfYmxpbmtfbGVkIC0gQmxpbmsgTEVECisgKiAgZTEwMDBlX2JsaW5rX2xlZF9nZW5lcmljIC0gQmxpbmsgTEVECiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCiAgKiAgQmxpbmsgdGhlIExFRHMgd2hpY2ggYXJlIHNldCB0byBiZSBvbi4KICAqKi8KLXMzMiBlMTAwMGVfYmxpbmtfbGVkKHN0cnVjdCBlMTAwMF9odyAqaHcpCitzMzIgZTEwMDBlX2JsaW5rX2xlZF9nZW5lcmljKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAJdTMyIGxlZGN0bF9ibGluayA9IDA7CiAJdTMyIGk7CkBAIC0yMDg3LDggKzIwODcsNiBAQAogCWlmIChyZXRfdmFsKQogCQlyZXR1cm4gcmV0X3ZhbDsKIAotCW1zbGVlcCgxMCk7Ci0KIAl3aGlsZSAod2lkeCA8IHdvcmRzKSB7CiAJCXU4IHdyaXRlX29wY29kZSA9IE5WTV9XUklURV9PUENPREVfU1BJOwogCkBAIC0yMTMyLDcgKzIxMzAsNyBAQAogCQl9CiAJfQogCi0JbXNsZWVwKDEwKTsKKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDIwMDAwKTsKIAludm0tPm9wcy5yZWxlYXNlKGh3KTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYwppbmRleCA1MDZhMGEwLi5kOTYwMDU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSA8bGludXgvcG1fcW9zX3BhcmFtcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9hZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAjaW5jbHVkZSAiZTEwMDAuaCIKIApAQCAtNTgsNiArNTksOCBAQAogY2hhciBlMTAwMGVfZHJpdmVyX25hbWVbXSA9ICJlMTAwMGUiOwogY29uc3QgY2hhciBlMTAwMGVfZHJpdmVyX3ZlcnNpb25bXSA9IERSVl9WRVJTSU9OOwogCitzdGF0aWMgdm9pZCBlMTAwMGVfZGlzYWJsZV9hc3BtKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MTYgc3RhdGUpOworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGUxMDAwX2luZm8gKmUxMDAwX2luZm9fdGJsW10gPSB7CiAJW2JvYXJkXzgyNTcxXQkJPSAmZTEwMDBfODI1NzFfaW5mbywKIAlbYm9hcmRfODI1NzJdCQk9ICZlMTAwMF84MjU3Ml9pbmZvLApAQCAtNDU5LDEzICs0NjIsMTMgQEAKIAkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgICB1OCBzdGF0dXMsIF9fbGUxNiB2bGFuKQogeworCXUxNiB0YWcgPSBsZTE2X3RvX2NwdSh2bGFuKTsKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZXRkZXYpOwogCi0JaWYgKGFkYXB0ZXItPnZsZ3JwICYmIChzdGF0dXMgJiBFMTAwMF9SWERfU1RBVF9WUCkpCi0JCXZsYW5fZ3JvX3JlY2VpdmUoJmFkYXB0ZXItPm5hcGksIGFkYXB0ZXItPnZsZ3JwLAotCQkJCSBsZTE2X3RvX2NwdSh2bGFuKSwgc2tiKTsKLQllbHNlCi0JCW5hcGlfZ3JvX3JlY2VpdmUoJmFkYXB0ZXItPm5hcGksIHNrYik7CisJaWYgKHN0YXR1cyAmIEUxMDAwX1JYRF9TVEFUX1ZQKQorCQlfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHNrYiwgdGFnKTsKKworCW5hcGlfZ3JvX3JlY2VpdmUoJmFkYXB0ZXItPm5hcGksIHNrYik7CiB9CiAKIC8qKgpAQCAtMjQzMyw2ICsyNDM2LDggQEAKIAkJdmZ0YSB8PSAoMSA8PCAodmlkICYgMHgxRikpOwogCQlody0+bWFjLm9wcy53cml0ZV92ZnRhKGh3LCBpbmRleCwgdmZ0YSk7CiAJfQorCisJc2V0X2JpdCh2aWQsIGFkYXB0ZXItPmFjdGl2ZV92bGFucyk7CiB9CiAKIHN0YXRpYyB2b2lkIGUxMDAwX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IHZpZCkKQEAgLTI0NDEsMTMgKzI0NDYsNiBAQAogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIHZmdGEsIGluZGV4OwogCi0JaWYgKCF0ZXN0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCi0JCWUxMDAwX2lycV9kaXNhYmxlKGFkYXB0ZXIpOwotCXZsYW5fZ3JvdXBfc2V0X2RldmljZShhZGFwdGVyLT52bGdycCwgdmlkLCBOVUxMKTsKLQotCWlmICghdGVzdF9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQotCQllMTAwMF9pcnFfZW5hYmxlKGFkYXB0ZXIpOwotCiAJaWYgKChhZGFwdGVyLT5ody5tbmdfY29va2llLnN0YXR1cyAmCiAJICAgICBFMTAwMF9NTkdfREhDUF9DT09LSUVfU1RBVFVTX1ZMQU4pICYmCiAJICAgICh2aWQgPT0gYWRhcHRlci0+bW5nX3ZsYW5faWQpKSB7CkBAIC0yNDYzLDYgKzI0NjEsNzkgQEAKIAkJdmZ0YSAmPSB+KDEgPDwgKHZpZCAmIDB4MUYpKTsKIAkJaHctPm1hYy5vcHMud3JpdGVfdmZ0YShodywgaW5kZXgsIHZmdGEpOwogCX0KKworCWNsZWFyX2JpdCh2aWQsIGFkYXB0ZXItPmFjdGl2ZV92bGFucyk7Cit9CisKKy8qKgorICogZTEwMDBlX3ZsYW5fZmlsdGVyX2Rpc2FibGUgLSBoZWxwZXIgdG8gZGlzYWJsZSBodyBWTEFOIGZpbHRlcmluZworICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKKyAqKi8KK3N0YXRpYyB2b2lkIGUxMDAwZV92bGFuX2ZpbHRlcl9kaXNhYmxlKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgcmN0bDsKKworCWlmIChhZGFwdGVyLT5mbGFncyAmIEZMQUdfSEFTX0hXX1ZMQU5fRklMVEVSKSB7CisJCS8qIGRpc2FibGUgVkxBTiByZWNlaXZlIGZpbHRlcmluZyAqLworCQlyY3RsID0gZXIzMihSQ1RMKTsKKwkJcmN0bCAmPSB+KEUxMDAwX1JDVExfVkZFIHwgRTEwMDBfUkNUTF9DRklFTik7CisJCWV3MzIoUkNUTCwgcmN0bCk7CisKKwkJaWYgKGFkYXB0ZXItPm1uZ192bGFuX2lkICE9ICh1MTYpRTEwMDBfTU5HX1ZMQU5fTk9ORSkgeworCQkJZTEwMDBfdmxhbl9yeF9raWxsX3ZpZChuZXRkZXYsIGFkYXB0ZXItPm1uZ192bGFuX2lkKTsKKwkJCWFkYXB0ZXItPm1uZ192bGFuX2lkID0gRTEwMDBfTU5HX1ZMQU5fTk9ORTsKKwkJfQorCX0KK30KKworLyoqCisgKiBlMTAwMGVfdmxhbl9maWx0ZXJfZW5hYmxlIC0gaGVscGVyIHRvIGVuYWJsZSBIVyBWTEFOIGZpbHRlcmluZworICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKKyAqKi8KK3N0YXRpYyB2b2lkIGUxMDAwZV92bGFuX2ZpbHRlcl9lbmFibGUoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgcmN0bDsKKworCWlmIChhZGFwdGVyLT5mbGFncyAmIEZMQUdfSEFTX0hXX1ZMQU5fRklMVEVSKSB7CisJCS8qIGVuYWJsZSBWTEFOIHJlY2VpdmUgZmlsdGVyaW5nICovCisJCXJjdGwgPSBlcjMyKFJDVEwpOworCQlyY3RsIHw9IEUxMDAwX1JDVExfVkZFOworCQlyY3RsICY9IH5FMTAwMF9SQ1RMX0NGSUVOOworCQlldzMyKFJDVEwsIHJjdGwpOworCX0KK30KKworLyoqCisgKiBlMTAwMGVfdmxhbl9zdHJpcF9lbmFibGUgLSBoZWxwZXIgdG8gZGlzYWJsZSBIVyBWTEFOIHN0cmlwcGluZworICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKKyAqKi8KK3N0YXRpYyB2b2lkIGUxMDAwZV92bGFuX3N0cmlwX2Rpc2FibGUoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgY3RybDsKKworCS8qIGRpc2FibGUgVkxBTiB0YWcgaW5zZXJ0L3N0cmlwICovCisJY3RybCA9IGVyMzIoQ1RSTCk7CisJY3RybCAmPSB+RTEwMDBfQ1RSTF9WTUU7CisJZXczMihDVFJMLCBjdHJsKTsKK30KKworLyoqCisgKiBlMTAwMGVfdmxhbl9zdHJpcF9lbmFibGUgLSBoZWxwZXIgdG8gZW5hYmxlIEhXIFZMQU4gc3RyaXBwaW5nCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICoqLworc3RhdGljIHZvaWQgZTEwMDBlX3ZsYW5fc3RyaXBfZW5hYmxlKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIGN0cmw7CisKKwkvKiBlbmFibGUgVkxBTiB0YWcgaW5zZXJ0L3N0cmlwICovCisJY3RybCA9IGVyMzIoQ1RSTCk7CisJY3RybCB8PSBFMTAwMF9DVFJMX1ZNRTsKKwlldzMyKENUUkwsIGN0cmwpOwogfQogCiBzdGF0aWMgdm9pZCBlMTAwMF91cGRhdGVfbW5nX3ZsYW4oc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCkBAIC0yNDcxLDg1ICsyNTQyLDI0IEBACiAJdTE2IHZpZCA9IGFkYXB0ZXItPmh3Lm1uZ19jb29raWUudmxhbl9pZDsKIAl1MTYgb2xkX3ZpZCA9IGFkYXB0ZXItPm1uZ192bGFuX2lkOwogCi0JaWYgKCFhZGFwdGVyLT52bGdycCkKLQkJcmV0dXJuOwotCi0JaWYgKCF2bGFuX2dyb3VwX2dldF9kZXZpY2UoYWRhcHRlci0+dmxncnAsIHZpZCkpIHsKLQkJYWRhcHRlci0+bW5nX3ZsYW5faWQgPSBFMTAwMF9NTkdfVkxBTl9OT05FOwotCQlpZiAoYWRhcHRlci0+aHcubW5nX2Nvb2tpZS5zdGF0dXMgJgotCQkJRTEwMDBfTU5HX0RIQ1BfQ09PS0lFX1NUQVRVU19WTEFOKSB7Ci0JCQllMTAwMF92bGFuX3J4X2FkZF92aWQobmV0ZGV2LCB2aWQpOwotCQkJYWRhcHRlci0+bW5nX3ZsYW5faWQgPSB2aWQ7Ci0JCX0KLQotCQlpZiAoKG9sZF92aWQgIT0gKHUxNilFMTAwMF9NTkdfVkxBTl9OT05FKSAmJgotCQkJCSh2aWQgIT0gb2xkX3ZpZCkgJiYKLQkJICAgICF2bGFuX2dyb3VwX2dldF9kZXZpY2UoYWRhcHRlci0+dmxncnAsIG9sZF92aWQpKQotCQkJZTEwMDBfdmxhbl9yeF9raWxsX3ZpZChuZXRkZXYsIG9sZF92aWQpOwotCX0gZWxzZSB7CisJaWYgKGFkYXB0ZXItPmh3Lm1uZ19jb29raWUuc3RhdHVzICYKKwkgICAgRTEwMDBfTU5HX0RIQ1BfQ09PS0lFX1NUQVRVU19WTEFOKSB7CisJCWUxMDAwX3ZsYW5fcnhfYWRkX3ZpZChuZXRkZXYsIHZpZCk7CiAJCWFkYXB0ZXItPm1uZ192bGFuX2lkID0gdmlkOwogCX0KLX0KIAotCi1zdGF0aWMgdm9pZCBlMTAwMF92bGFuX3J4X3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0JCQkJICAgc3RydWN0IHZsYW5fZ3JvdXAgKmdycCkKLXsKLQlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQl1MzIgY3RybCwgcmN0bDsKLQotCWlmICghdGVzdF9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQotCQllMTAwMF9pcnFfZGlzYWJsZShhZGFwdGVyKTsKLQlhZGFwdGVyLT52bGdycCA9IGdycDsKLQotCWlmIChncnApIHsKLQkJLyogZW5hYmxlIFZMQU4gdGFnIGluc2VydC9zdHJpcCAqLwotCQljdHJsID0gZXIzMihDVFJMKTsKLQkJY3RybCB8PSBFMTAwMF9DVFJMX1ZNRTsKLQkJZXczMihDVFJMLCBjdHJsKTsKLQotCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX0hBU19IV19WTEFOX0ZJTFRFUikgewotCQkJLyogZW5hYmxlIFZMQU4gcmVjZWl2ZSBmaWx0ZXJpbmcgKi8KLQkJCXJjdGwgPSBlcjMyKFJDVEwpOwotCQkJcmN0bCAmPSB+RTEwMDBfUkNUTF9DRklFTjsKLQkJCWV3MzIoUkNUTCwgcmN0bCk7Ci0JCQllMTAwMF91cGRhdGVfbW5nX3ZsYW4oYWRhcHRlcik7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBkaXNhYmxlIFZMQU4gdGFnIGluc2VydC9zdHJpcCAqLwotCQljdHJsID0gZXIzMihDVFJMKTsKLQkJY3RybCAmPSB+RTEwMDBfQ1RSTF9WTUU7Ci0JCWV3MzIoQ1RSTCwgY3RybCk7Ci0KLQkJaWYgKGFkYXB0ZXItPmZsYWdzICYgRkxBR19IQVNfSFdfVkxBTl9GSUxURVIpIHsKLQkJCWlmIChhZGFwdGVyLT5tbmdfdmxhbl9pZCAhPQotCQkJICAgICh1MTYpRTEwMDBfTU5HX1ZMQU5fTk9ORSkgewotCQkJCWUxMDAwX3ZsYW5fcnhfa2lsbF92aWQobmV0ZGV2LAotCQkJCQkJICAgICAgIGFkYXB0ZXItPm1uZ192bGFuX2lkKTsKLQkJCQlhZGFwdGVyLT5tbmdfdmxhbl9pZCA9IEUxMDAwX01OR19WTEFOX05PTkU7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAoIXRlc3RfYml0KF9fRTEwMDBfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKLQkJZTEwMDBfaXJxX2VuYWJsZShhZGFwdGVyKTsKKwlpZiAoKG9sZF92aWQgIT0gKHUxNilFMTAwMF9NTkdfVkxBTl9OT05FKSAmJiAodmlkICE9IG9sZF92aWQpKQorCQllMTAwMF92bGFuX3J4X2tpbGxfdmlkKG5ldGRldiwgb2xkX3ZpZCk7CiB9CiAKIHN0YXRpYyB2b2lkIGUxMDAwX3Jlc3RvcmVfdmxhbihzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKIAl1MTYgdmlkOwogCi0JZTEwMDBfdmxhbl9yeF9yZWdpc3RlcihhZGFwdGVyLT5uZXRkZXYsIGFkYXB0ZXItPnZsZ3JwKTsKKwllMTAwMF92bGFuX3J4X2FkZF92aWQoYWRhcHRlci0+bmV0ZGV2LCAwKTsKIAotCWlmICghYWRhcHRlci0+dmxncnApCi0JCXJldHVybjsKLQotCWZvciAodmlkID0gMDsgdmlkIDwgVkxBTl9OX1ZJRDsgdmlkKyspIHsKLQkJaWYgKCF2bGFuX2dyb3VwX2dldF9kZXZpY2UoYWRhcHRlci0+dmxncnAsIHZpZCkpCi0JCQljb250aW51ZTsKKwlmb3JfZWFjaF9zZXRfYml0KHZpZCwgYWRhcHRlci0+YWN0aXZlX3ZsYW5zLCBWTEFOX05fVklEKQogCQllMTAwMF92bGFuX3J4X2FkZF92aWQoYWRhcHRlci0+bmV0ZGV2LCB2aWQpOwotCX0KIH0KIAogc3RhdGljIHZvaWQgZTEwMDBfaW5pdF9tYW5hZ2VhYmlsaXR5X3B0KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQpAQCAtMjkwMiw3ICsyOTEyLDcgQEAKIAlyY3RsID0gZXIzMihSQ1RMKTsKIAlldzMyKFJDVEwsIHJjdGwgJiB+RTEwMDBfUkNUTF9FTik7CiAJZTFlX2ZsdXNoKCk7Ci0JbXNsZWVwKDEwKTsKKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDIwMDAwKTsKIAogCWlmIChhZGFwdGVyLT5mbGFnczIgJiBGTEFHMl9ETUFfQlVSU1QpIHsKIAkJLyoKQEAgLTMwMzksNiArMzA0OSw4IEBACiAJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewogCQlyY3RsIHw9IChFMTAwMF9SQ1RMX1VQRSB8IEUxMDAwX1JDVExfTVBFKTsKIAkJcmN0bCAmPSB+RTEwMDBfUkNUTF9WRkU7CisJCS8qIERvIG5vdCBoYXJkd2FyZSBmaWx0ZXIgVkxBTnMgaW4gcHJvbWlzYyBtb2RlICovCisJCWUxMDAwZV92bGFuX2ZpbHRlcl9kaXNhYmxlKGFkYXB0ZXIpOwogCX0gZWxzZSB7CiAJCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CiAJCQlyY3RsIHw9IEUxMDAwX1JDVExfTVBFOwpAQCAtMzA0Niw4ICszMDU4LDcgQEAKIAkJfSBlbHNlIHsKIAkJCXJjdGwgJj0gfihFMTAwMF9SQ1RMX1VQRSB8IEUxMDAwX1JDVExfTVBFKTsKIAkJfQotCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX0hBU19IV19WTEFOX0ZJTFRFUikKLQkJCXJjdGwgfD0gRTEwMDBfUkNUTF9WRkU7CisJCWUxMDAwZV92bGFuX2ZpbHRlcl9lbmFibGUoYWRhcHRlcik7CiAJfQogCiAJZXczMihSQ1RMLCByY3RsKTsKQEAgLTMwNzIsNiArMzA4MywxMSBAQAogCQkgKi8KIAkJZTEwMDBfdXBkYXRlX21jX2FkZHJfbGlzdChodywgTlVMTCwgMCk7CiAJfQorCisJaWYgKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX1ZMQU5fUlgpCisJCWUxMDAwZV92bGFuX3N0cmlwX2VuYWJsZShhZGFwdGVyKTsKKwllbHNlCisJCWUxMDAwZV92bGFuX3N0cmlwX2Rpc2FibGUoYWRhcHRlcik7CiB9CiAKIC8qKgpAQCAtMzM4Myw3ICszMzk5LDcgQEAKIAlldzMyKFRDVEwsIHRjdGwpOwogCS8qIGZsdXNoIGJvdGggZGlzYWJsZXMgYW5kIHdhaXQgZm9yIHRoZW0gdG8gZmluaXNoICovCiAJZTFlX2ZsdXNoKCk7Ci0JbXNsZWVwKDEwKTsKKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDIwMDAwKTsKIAogCW5hcGlfZGlzYWJsZSgmYWRhcHRlci0+bmFwaSk7CiAJZTEwMDBfaXJxX2Rpc2FibGUoYWRhcHRlcik7CkBAIC0zNDE4LDcgKzM0MzQsNyBAQAogewogCW1pZ2h0X3NsZWVwKCk7CiAJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19FMTAwMF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCi0JCW1zbGVlcCgxKTsKKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwogCWUxMDAwZV9kb3duKGFkYXB0ZXIpOwogCWUxMDAwZV91cChhZGFwdGVyKTsKIAljbGVhcl9iaXQoX19FMTAwMF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CkBAIC0zNzIxLDEwICszNzM3LDggQEAKIAkgKiBraWxsIG1hbmFnZWFiaWxpdHkgdmxhbiBJRCBpZiBzdXBwb3J0ZWQsIGJ1dCBub3QgaWYgYSB2bGFuIHdpdGgKIAkgKiB0aGUgc2FtZSBJRCBpcyByZWdpc3RlcmVkIG9uIHRoZSBob3N0IE9TIChsZXQgODAyMXEga2lsbCBpdCkKIAkgKi8KLQlpZiAoKGFkYXB0ZXItPmh3Lm1uZ19jb29raWUuc3RhdHVzICYKLQkJCSAgRTEwMDBfTU5HX0RIQ1BfQ09PS0lFX1NUQVRVU19WTEFOKSAmJgotCSAgICAgIShhZGFwdGVyLT52bGdycCAmJgotCSAgICAgICB2bGFuX2dyb3VwX2dldF9kZXZpY2UoYWRhcHRlci0+dmxncnAsIGFkYXB0ZXItPm1uZ192bGFuX2lkKSkpCisJaWYgKGFkYXB0ZXItPmh3Lm1uZ19jb29raWUuc3RhdHVzICYKKwkgICAgRTEwMDBfTU5HX0RIQ1BfQ09PS0lFX1NUQVRVU19WTEFOKQogCQllMTAwMF92bGFuX3J4X2tpbGxfdmlkKG5ldGRldiwgYWRhcHRlci0+bW5nX3ZsYW5faWQpOwogCiAJLyoKQEAgLTQzMjgsNyArNDM0Miw2IEBACiBsaW5rX3VwOgogCXNwaW5fbG9jaygmYWRhcHRlci0+c3RhdHM2NF9sb2NrKTsKIAllMTAwMGVfdXBkYXRlX3N0YXRzKGFkYXB0ZXIpOwotCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5zdGF0czY0X2xvY2spOwogCiAJbWFjLT50eF9wYWNrZXRfZGVsdGEgPSBhZGFwdGVyLT5zdGF0cy50cHQgLSBhZGFwdGVyLT50cHRfb2xkOwogCWFkYXB0ZXItPnRwdF9vbGQgPSBhZGFwdGVyLT5zdGF0cy50cHQ7CkBAIC00MzM5LDYgKzQzNTIsNyBAQAogCWFkYXB0ZXItPmdvcmNfb2xkID0gYWRhcHRlci0+c3RhdHMuZ29yYzsKIAlhZGFwdGVyLT5nb3RjID0gYWRhcHRlci0+c3RhdHMuZ290YyAtIGFkYXB0ZXItPmdvdGNfb2xkOwogCWFkYXB0ZXItPmdvdGNfb2xkID0gYWRhcHRlci0+c3RhdHMuZ290YzsKKwlzcGluX3VubG9jaygmYWRhcHRlci0+c3RhdHM2NF9sb2NrKTsKIAogCWUxMDAwZV91cGRhdGVfYWRhcHRpdmUoJmFkYXB0ZXItPmh3KTsKIApAQCAtNTAyOCw3ICs1MDQyLDcgQEAKIAl9CiAKIAl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChfX0UxMDAwX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKLQkJbXNsZWVwKDEpOworCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CiAJLyogZTEwMDBlX2Rvd24gLT4gZTEwMDBlX3Jlc2V0IGRlcGVuZGVudCBvbiBtYXhfZnJhbWVfc2l6ZSAmIG10dSAqLwogCWFkYXB0ZXItPm1heF9mcmFtZV9zaXplID0gbWF4X2ZyYW1lOwogCWVfaW5mbygiY2hhbmdpbmcgTVRVIGZyb20gJWQgdG8gJWRcbiIsIG5ldGRldi0+bXR1LCBuZXdfbXR1KTsKQEAgLTUzNzMsNyArNTM4Nyw3IEBACiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYtPmJ1cy0+c2VsZiwgcG9zICsgUENJX0VYUF9MTktDVEwsIHJlZzE2KTsKIH0KICNlbmRpZgotdm9pZCBlMTAwMGVfZGlzYWJsZV9hc3BtKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MTYgc3RhdGUpCitzdGF0aWMgdm9pZCBlMTAwMGVfZGlzYWJsZV9hc3BtKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MTYgc3RhdGUpCiB7CiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIkRpc2FibGluZyBBU1BNICVzICVzXG4iLAogCQkgKHN0YXRlICYgUENJRV9MSU5LX1NUQVRFX0wwUykgPyAiTDBzIiA6ICIiLApAQCAtNTM5MywxMyArNTQwNywxOSBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTE2IGFzcG1fZGlzYWJsZV9mbGFnID0gMDsKIAl1MzIgZXJyOwogCisJaWYgKGFkYXB0ZXItPmZsYWdzMiAmIEZMQUcyX0RJU0FCTEVfQVNQTV9MMFMpCisJCWFzcG1fZGlzYWJsZV9mbGFnID0gUENJRV9MSU5LX1NUQVRFX0wwUzsKKwlpZiAoYWRhcHRlci0+ZmxhZ3MyICYgRkxBRzJfRElTQUJMRV9BU1BNX0wxKQorCQlhc3BtX2Rpc2FibGVfZmxhZyB8PSBQQ0lFX0xJTktfU1RBVEVfTDE7CisJaWYgKGFzcG1fZGlzYWJsZV9mbGFnKQorCQllMTAwMGVfZGlzYWJsZV9hc3BtKHBkZXYsIGFzcG1fZGlzYWJsZV9mbGFnKTsKKwogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKIAlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKIAlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKLQlpZiAoYWRhcHRlci0+ZmxhZ3MyICYgRkxBRzJfRElTQUJMRV9BU1BNX0wxKQotCQllMTAwMGVfZGlzYWJsZV9hc3BtKHBkZXYsIFBDSUVfTElOS19TVEFURV9MMSk7CiAKIAllMTAwMGVfc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KGFkYXB0ZXIpOwogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKQEAgLTU2NDMsMTEgKzU2NjMsMTcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUxNiBhc3BtX2Rpc2FibGVfZmxhZyA9IDA7CiAJaW50IGVycjsKIAlwY2lfZXJzX3Jlc3VsdF90IHJlc3VsdDsKIAorCWlmIChhZGFwdGVyLT5mbGFnczIgJiBGTEFHMl9ESVNBQkxFX0FTUE1fTDBTKQorCQlhc3BtX2Rpc2FibGVfZmxhZyA9IFBDSUVfTElOS19TVEFURV9MMFM7CiAJaWYgKGFkYXB0ZXItPmZsYWdzMiAmIEZMQUcyX0RJU0FCTEVfQVNQTV9MMSkKLQkJZTEwMDBlX2Rpc2FibGVfYXNwbShwZGV2LCBQQ0lFX0xJTktfU1RBVEVfTDEpOworCQlhc3BtX2Rpc2FibGVfZmxhZyB8PSBQQ0lFX0xJTktfU1RBVEVfTDE7CisJaWYgKGFzcG1fZGlzYWJsZV9mbGFnKQorCQllMTAwMGVfZGlzYWJsZV9hc3BtKHBkZXYsIGFzcG1fZGlzYWJsZV9mbGFnKTsKKwogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwKQEAgLTU3MTQsNyArNTc0MCw3IEBACiAJdTggcGJhX3N0cltFMTAwMF9QQkFOVU1fTEVOR1RIXTsKIAogCS8qIHByaW50IGJ1cyB0eXBlL3NwZWVkL3dpZHRoIGluZm8gKi8KLQllX2luZm8oIihQQ0kgRXhwcmVzczoyLjVHQi9zOiVzKSAlcE1cbiIsCisJZV9pbmZvKCIoUENJIEV4cHJlc3M6Mi41R1QvczolcykgJXBNXG4iLAogCSAgICAgICAvKiBidXMgd2lkdGggKi8KIAkgICAgICAgKChody0+YnVzLndpZHRoID09IGUxMDAwX2J1c193aWR0aF9wY2llX3g0KSA/ICJXaWR0aCB4NCIgOgogCSAgICAgICAgIldpZHRoIHgxIiksCkBAIC01NzU5LDcgKzU3ODUsNiBAQAogCS5uZG9fdHhfdGltZW91dAkJPSBlMTAwMF90eF90aW1lb3V0LAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAogCi0JLm5kb192bGFuX3J4X3JlZ2lzdGVyCT0gZTEwMDBfdmxhbl9yeF9yZWdpc3RlciwKIAkubmRvX3ZsYW5fcnhfYWRkX3ZpZAk9IGUxMDAwX3ZsYW5fcnhfYWRkX3ZpZCwKIAkubmRvX3ZsYW5fcnhfa2lsbF92aWQJPSBlMTAwMF92bGFuX3J4X2tpbGxfdmlkLAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCkBAIC01Nzg5LDEyICs1ODE0LDE3IEBACiAJcmVzb3VyY2Vfc2l6ZV90IGZsYXNoX3N0YXJ0LCBmbGFzaF9sZW47CiAKIAlzdGF0aWMgaW50IGNhcmRzX2ZvdW5kOworCXUxNiBhc3BtX2Rpc2FibGVfZmxhZyA9IDA7CiAJaW50IGksIGVyciwgcGNpX3VzaW5nX2RhYzsKIAl1MTYgZWVwcm9tX2RhdGEgPSAwOwogCXUxNiBlZXByb21fYXBtZV9tYXNrID0gRTEwMDBfRUVQUk9NX0FQTUU7CiAKKwlpZiAoZWktPmZsYWdzMiAmIEZMQUcyX0RJU0FCTEVfQVNQTV9MMFMpCisJCWFzcG1fZGlzYWJsZV9mbGFnID0gUENJRV9MSU5LX1NUQVRFX0wwUzsKIAlpZiAoZWktPmZsYWdzMiAmIEZMQUcyX0RJU0FCTEVfQVNQTV9MMSkKLQkJZTEwMDBlX2Rpc2FibGVfYXNwbShwZGV2LCBQQ0lFX0xJTktfU1RBVEVfTDEpOworCQlhc3BtX2Rpc2FibGVfZmxhZyB8PSBQQ0lFX0xJTktfU1RBVEVfTDE7CisJaWYgKGFzcG1fZGlzYWJsZV9mbGFnKQorCQllMTAwMGVfZGlzYWJsZV9hc3BtKHBkZXYsIGFzcG1fZGlzYWJsZV9mbGFnKTsKIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KTsKIAlpZiAoZXJyKQpAQCAtNTk5MSw3ICs2MDIxLDYgQEAKIAlJTklUX1dPUksoJmFkYXB0ZXItPmRvd25zaGlmdF90YXNrLCBlMTAwMGVfZG93bnNoaWZ0X3dvcmthcm91bmQpOwogCUlOSVRfV09SSygmYWRhcHRlci0+dXBkYXRlX3BoeV90YXNrLCBlMTAwMGVfdXBkYXRlX3BoeV90YXNrKTsKIAlJTklUX1dPUksoJmFkYXB0ZXItPnByaW50X2hhbmdfdGFzaywgZTEwMDBfcHJpbnRfaHdfaGFuZyk7Ci0JSU5JVF9XT1JLKCZhZGFwdGVyLT5sZWRfYmxpbmtfdGFzaywgZTEwMDBlX2xlZF9ibGlua190YXNrKTsKIAogCS8qIEluaXRpYWxpemUgbGluayBwYXJhbWV0ZXJzLiBVc2VyIGNhbiBjaGFuZ2UgdGhlbSB3aXRoIGV0aHRvb2wgKi8KIAlhZGFwdGVyLT5ody5tYWMuYXV0b25lZyA9IDE7CkBAIC02MTI0LDcgKzYxNTMsNiBAQAogCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPndhdGNoZG9nX3Rhc2spOwogCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPmRvd25zaGlmdF90YXNrKTsKIAljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT51cGRhdGVfcGh5X3Rhc2spOwotCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPmxlZF9ibGlua190YXNrKTsKIAljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5wcmludF9oYW5nX3Rhc2spOwogCiAJaWYgKCEobmV0ZGV2LT5mbGFncyAmIElGRl9VUCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvcGh5LmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvcGh5LmMKaW5kZXggNmFlMzFmYy4uNDg0Nzc0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9waHkuYwpAQCAtMjM3Miw3ICsyMzcyLDcgQEAKIAkJCQlyZXRfdmFsID0gMDsKIAkJCQlnb3RvIG91dDsKIAkJCX0KLQkJCW1zbGVlcCgxKTsKKwkJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKIAkJCWkrKzsKIAkJfSB3aGlsZSAoaSA8IDEwKTsKIAl9CkBAIC0yNzQwLDcgKzI3NDAsNyBAQAogCWUxZV9ycGh5KGh3LCBQSFlfQ09OVFJPTCwgJm1paV9yZWcpOwogCW1paV9yZWcgfD0gTUlJX0NSX1BPV0VSX0RPV047CiAJZTFlX3dwaHkoaHcsIFBIWV9DT05UUk9MLCBtaWlfcmVnKTsKLQltc2xlZXAoMSk7CisJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VlcHJvLmMgYi9kcml2ZXJzL25ldC9lZXByby5jCmluZGV4IGViMzU5NTEuLmRmZWIwMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VlcHJvLmMKKysrIGIvZHJpdmVycy9uZXQvZWVwcm8uYwpAQCAtMTcwMyw3ICsxNzAzLDcgQEAKIAkJY21kLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEX0FVSTsKIAl9CiAKLQljbWQtPnNwZWVkID0gU1BFRURfMTA7CisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgU1BFRURfMTApOwogCiAJaWYgKGRldi0+aWZfcG9ydCA9PSBUUEUgJiYgbHAtPndvcmRbMV0gJiBlZV9EdXBsZXgpIHsKIAkJY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfZXRodG9vbC5jCmluZGV4IGYzYmJkY2UuLjdmNjQyYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX2V0aHRvb2wuYwpAQCAtMzQsNiArMzQsNyBAQAogc3RhdGljIGludCBlaGVhX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3QgZWhlYV9wb3J0ICpwb3J0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgc3BlZWQ7CiAJaW50IHJldDsKIAogCXJldCA9IGVoZWFfc2Vuc2VfcG9ydF9hdHRyKHBvcnQpOwpAQCAtNDMsMTcgKzQ0LDI5IEBACiAKIAlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYpKSB7CiAJCXN3aXRjaCAocG9ydC0+cG9ydF9zcGVlZCkgewotCQljYXNlIEVIRUFfU1BFRURfMTBNOiBjbWQtPnNwZWVkID0gU1BFRURfMTA7IGJyZWFrOwotCQljYXNlIEVIRUFfU1BFRURfMTAwTTogY21kLT5zcGVlZCA9IFNQRUVEXzEwMDsgYnJlYWs7Ci0JCWNhc2UgRUhFQV9TUEVFRF8xRzogY21kLT5zcGVlZCA9IFNQRUVEXzEwMDA7IGJyZWFrOwotCQljYXNlIEVIRUFfU1BFRURfMTBHOiBjbWQtPnNwZWVkID0gU1BFRURfMTAwMDA7IGJyZWFrOworCQljYXNlIEVIRUFfU1BFRURfMTBNOgorCQkJc3BlZWQgPSBTUEVFRF8xMDsKKwkJCWJyZWFrOworCQljYXNlIEVIRUFfU1BFRURfMTAwTToKKwkJCXNwZWVkID0gU1BFRURfMTAwOworCQkJYnJlYWs7CisJCWNhc2UgRUhFQV9TUEVFRF8xRzoKKwkJCXNwZWVkID0gU1BFRURfMTAwMDsKKwkJCWJyZWFrOworCQljYXNlIEVIRUFfU1BFRURfMTBHOgorCQkJc3BlZWQgPSBTUEVFRF8xMDAwMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJc3BlZWQgPSAtMTsKKwkJCWJyZWFrOyAvKiBCVUcgKi8KIAkJfQogCQljbWQtPmR1cGxleCA9IHBvcnQtPmZ1bGxfZHVwbGV4ID09IDEgPwogCQkJCQkJICAgICBEVVBMRVhfRlVMTCA6IERVUExFWF9IQUxGOwogCX0gZWxzZSB7Ci0JCWNtZC0+c3BlZWQgPSAtMTsKKwkJc3BlZWQgPSB+MDsKIAkJY21kLT5kdXBsZXggPSAtMTsKIAl9CisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgc3BlZWQpOwogCiAJaWYgKGNtZC0+c3BlZWQgPT0gU1BFRURfMTAwMDApIHsKIAkJY21kLT5zdXBwb3J0ZWQgPSAoU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8IFNVUFBPUlRFRF9GSUJSRSk7CkBAIC0xNjcsMTEgKzE4MCw2IEBACiAJcG9ydC0+bXNnX2VuYWJsZSA9IHZhbHVlOwogfQogCi1zdGF0aWMgdTMyIGVoZWFfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gMTsKLX0KLQogc3RhdGljIGNoYXIgZWhlYV9ldGh0b29sX3N0YXRzX2tleXNbXVtFVEhfR1NUUklOR19MRU5dID0gewogCXsic2lnX2NvbXBfaXYifSwKIAl7InN3cWVfcmVmaWxsX3RoIn0sCkBAIC0yNjgsMzQgKzI3NiwxNiBAQAogCiB9CiAKLXN0YXRpYyBpbnQgZWhlYV9zZXRfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0JLyogQXZvaWQgY2hhbmdpbmcgdGhlIFZMQU4gZmxhZ3MgKi8KLQlpZiAoKGRhdGEgJiAoRVRIX0ZMQUdfUlhWTEFOIHwgRVRIX0ZMQUdfVFhWTEFOKSkgIT0KLQkgICAgKGV0aHRvb2xfb3BfZ2V0X2ZsYWdzKGRldikgJiAoRVRIX0ZMQUdfUlhWTEFOIHwKLQkJCQkJICBFVEhfRkxBR19UWFZMQU4pKSl7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiBldGh0b29sX29wX3NldF9mbGFncyhkZXYsIGRhdGEsIEVUSF9GTEFHX0xSTwotCQkJCQl8IEVUSF9GTEFHX1RYVkxBTgotCQkJCQl8IEVUSF9GTEFHX1JYVkxBTik7Ci19Ci0KIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBlaGVhX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MgPSBlaGVhX2dldF9zZXR0aW5ncywKIAkuZ2V0X2RydmluZm8gPSBlaGVhX2dldF9kcnZpbmZvLAogCS5nZXRfbXNnbGV2ZWwgPSBlaGVhX2dldF9tc2dsZXZlbCwKIAkuc2V0X21zZ2xldmVsID0gZWhlYV9zZXRfbXNnbGV2ZWwsCiAJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKLQkuc2V0X3RzbyA9IGV0aHRvb2xfb3Bfc2V0X3RzbywKIAkuZ2V0X3N0cmluZ3MgPSBlaGVhX2dldF9zdHJpbmdzLAogCS5nZXRfc3NldF9jb3VudCA9IGVoZWFfZ2V0X3NzZXRfY291bnQsCiAJLmdldF9ldGh0b29sX3N0YXRzID0gZWhlYV9nZXRfZXRodG9vbF9zdGF0cywKLQkuZ2V0X3J4X2NzdW0gPSBlaGVhX2dldF9yeF9jc3VtLAogCS5zZXRfc2V0dGluZ3MgPSBlaGVhX3NldF9zZXR0aW5ncywKLQkuZ2V0X2ZsYWdzID0gZXRodG9vbF9vcF9nZXRfZmxhZ3MsCi0JLnNldF9mbGFncyA9IGVoZWFfc2V0X2ZsYWdzLAogCS5ud2F5X3Jlc2V0ID0gZWhlYV9ud2F5X3Jlc2V0LAkJLyogUmVzdGFydCBhdXRvbmVnb3RpYXRpb24gKi8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9tYWluLmMgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jCmluZGV4IGNmNzljZjcuLjZhMGE4ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX21haW4uYwpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21lbW9yeS5oPgogI2luY2x1ZGUgPGFzbS9rZXhlYy5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2luY2x1ZGUgPG5ldC9pcC5oPgogCkBAIC0zMjYyLDEwICszMjYzLDEyIEBACiAJZGV2LT5uZXRkZXZfb3BzID0gJmVoZWFfbmV0ZGV2X29wczsKIAllaGVhX3NldF9ldGh0b29sX29wcyhkZXYpOwogCisJZGV2LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0ZSQUdMSVNUIHwgTkVUSUZfRl9UU08KKwkJICAgICAgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0xSTzsKIAlkZXYtPmZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfRlJBR0xJU1QgfCBORVRJRl9GX1RTTwogCQkgICAgICB8IE5FVElGX0ZfSElHSERNQSB8IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSFdfVkxBTl9UWAogCQkgICAgICB8IE5FVElGX0ZfSFdfVkxBTl9SWCB8IE5FVElGX0ZfSFdfVkxBTl9GSUxURVIKLQkJICAgICAgfCBORVRJRl9GX0xMVFg7CisJCSAgICAgIHwgTkVUSUZfRl9MTFRYIHwgTkVUSUZfRl9SWENTVU07CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IEVIRUFfV0FUQ0hfRE9HX1RJTUVPVVQ7CiAKIAlpZiAodXNlX2xybykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9xbXIuaCBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9xbXIuaAppbmRleCAzODEwNDczLi5mZGRmZjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfcW1yLmgKKysrIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX3Ftci5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaWZuZGVmIF9fRUhFQV9RTVJfSF9fCiAjZGVmaW5lIF9fRUhFQV9RTVJfSF9fCiAKKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2luY2x1ZGUgImVoZWEuaCIKICNpbmNsdWRlICJlaGVhX2h3LmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuYzI4ajYwLmMgYi9kcml2ZXJzL25ldC9lbmMyOGo2MC5jCmluZGV4IDkwN2IwNWEuLjI4MzdjZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuYzI4ajYwLmMKKysrIGIvZHJpdmVycy9uZXQvZW5jMjhqNjAuYwpAQCAtMTQ4OCw3ICsxNDg4LDcgQEAKIAljbWQtPnN1cHBvcnRlZAk9IFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYKIAkJCXwgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbAogCQkJfCBTVVBQT1JURURfVFA7Ci0JY21kLT5zcGVlZAk9IFNQRUVEXzEwOworCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsICBTUEVFRF8xMCk7CiAJY21kLT5kdXBsZXgJPSBwcml2LT5mdWxsX2R1cGxleCA/IERVUExFWF9GVUxMIDogRFVQTEVYX0hBTEY7CiAJY21kLT5wb3J0CT0gUE9SVF9UUDsKIAljbWQtPmF1dG9uZWcJPSBBVVRPTkVHX0RJU0FCTEU7CkBAIC0xNDk5LDcgKzE0OTksOCBAQAogc3RhdGljIGludAogZW5jMjhqNjBfc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewotCXJldHVybiBlbmMyOGo2MF9zZXRsaW5rKGRldiwgY21kLT5hdXRvbmVnLCBjbWQtPnNwZWVkLCBjbWQtPmR1cGxleCk7CisJcmV0dXJuIGVuYzI4ajYwX3NldGxpbmsoZGV2LCBjbWQtPmF1dG9uZWcsCisJCQkJZXRodG9vbF9jbWRfc3BlZWQoY21kKSwgY21kLT5kdXBsZXgpOwogfQogCiBzdGF0aWMgdTMyIGVuYzI4ajYwX2dldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2VuaWMvTWFrZWZpbGUKaW5kZXggMmU1NzNiZS4uOWQ0OTc0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9lbmljL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogb2JqLSQoQ09ORklHX0VOSUMpIDo9IGVuaWMubwogCiBlbmljLXkgOj0gZW5pY19tYWluLm8gdm5pY19jcS5vIHZuaWNfaW50ci5vIHZuaWNfd3EubyBcCi0JZW5pY19yZXMubyBlbmljX2Rldi5vIHZuaWNfZGV2Lm8gdm5pY19ycS5vIHZuaWNfdmljLm8KKwllbmljX3Jlcy5vIGVuaWNfZGV2Lm8gZW5pY19wcC5vIHZuaWNfZGV2Lm8gdm5pY19ycS5vIHZuaWNfdmljLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy9lbmljLmggYi9kcml2ZXJzL25ldC9lbmljL2VuaWMuaAppbmRleCAzYTNjM2M4Li4zOGIzNTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL2VuaWMuaAorKysgYi9kcml2ZXJzL25ldC9lbmljL2VuaWMuaApAQCAtMzIsNyArMzIsNyBAQAogCiAjZGVmaW5lIERSVl9OQU1FCQkiZW5pYyIKICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCQkiQ2lzY28gVklDIEV0aGVybmV0IE5JQyBEcml2ZXIiCi0jZGVmaW5lIERSVl9WRVJTSU9OCQkiMi4xLjEuMTIiCisjZGVmaW5lIERSVl9WRVJTSU9OCQkiMi4xLjEuMTMiCiAjZGVmaW5lIERSVl9DT1BZUklHSFQJCSJDb3B5cmlnaHQgMjAwOC0yMDExIENpc2NvIFN5c3RlbXMsIEluYyIKIAogI2RlZmluZSBFTklDX0JBUlNfTUFYCQk2CkBAIC04NCw3ICs4NCw2IEBACiAJdW5zaWduZWQgaW50IGZsYWdzOwogCXVuc2lnbmVkIGludCBtY19jb3VudDsKIAl1bnNpZ25lZCBpbnQgdWNfY291bnQ7Ci0JaW50IGNzdW1fcnhfZW5hYmxlZDsKIAl1MzIgcG9ydF9tdHU7CiAJdTMyIHJ4X2NvYWxlc2NlX3VzZWNzOwogCXUzMiB0eF9jb2FsZXNjZV91c2VjczsKQEAgLTEyMCw0ICsxMTksNiBAQAogCXJldHVybiAmKGVuaWMtPnBkZXYtPmRldik7CiB9CiAKK3ZvaWQgZW5pY19yZXNldF9hZGRyX2xpc3RzKHN0cnVjdCBlbmljICplbmljKTsKKwogI2VuZGlmIC8qIF9FTklDX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL2VuaWNfZGV2LmMgYi9kcml2ZXJzL25ldC9lbmljL2VuaWNfZGV2LmMKaW5kZXggMzdhZDNhMS4uOTA2ODdiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy9lbmljX2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19kZXYuYwpAQCAtMTc3LDI0ICsxNzcsMjQgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1pbnQgZW5pY19kZXZfaW5pdF9wcm92KHN0cnVjdCBlbmljICplbmljLCBzdHJ1Y3QgdmljX3Byb3ZpbmZvICp2cCkKK2ludCBlbmljX2Rldl9pbml0X3Byb3YyKHN0cnVjdCBlbmljICplbmljLCBzdHJ1Y3QgdmljX3Byb3ZpbmZvICp2cCkKIHsKIAlpbnQgZXJyOwogCiAJc3Bpbl9sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7Ci0JZXJyID0gdm5pY19kZXZfaW5pdF9wcm92KGVuaWMtPnZkZXYsCisJZXJyID0gdm5pY19kZXZfaW5pdF9wcm92MihlbmljLT52ZGV2LAogCQkodTggKil2cCwgdmljX3Byb3ZpbmZvX3NpemUodnApKTsKIAlzcGluX3VubG9jaygmZW5pYy0+ZGV2Y21kX2xvY2spOwogCiAJcmV0dXJuIGVycjsKIH0KIAotaW50IGVuaWNfZGV2X2luaXRfZG9uZShzdHJ1Y3QgZW5pYyAqZW5pYywgaW50ICpkb25lLCBpbnQgKmVycm9yKQoraW50IGVuaWNfZGV2X2RlaW5pdF9kb25lKHN0cnVjdCBlbmljICplbmljLCBpbnQgKnN0YXR1cykKIHsKIAlpbnQgZXJyOwogCiAJc3Bpbl9sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7Ci0JZXJyID0gdm5pY19kZXZfaW5pdF9kb25lKGVuaWMtPnZkZXYsIGRvbmUsIGVycm9yKTsKKwllcnIgPSB2bmljX2Rldl9kZWluaXRfZG9uZShlbmljLT52ZGV2LCBzdGF0dXMpOwogCXNwaW5fdW5sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CiAKIAlyZXR1cm4gZXJyOwpAQCAtMjE5LDMgKzIxOSw1NyBAQAogCWVuaWNfZGVsX3ZsYW4oZW5pYywgdmlkKTsKIAlzcGluX3VubG9jaygmZW5pYy0+ZGV2Y21kX2xvY2spOwogfQorCitpbnQgZW5pY19kZXZfZW5hYmxlMihzdHJ1Y3QgZW5pYyAqZW5pYywgaW50IGFjdGl2ZSkKK3sKKwlpbnQgZXJyOworCisJc3Bpbl9sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CisJZXJyID0gdm5pY19kZXZfZW5hYmxlMihlbmljLT52ZGV2LCBhY3RpdmUpOworCXNwaW5fdW5sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgZW5pY19kZXZfZW5hYmxlMl9kb25lKHN0cnVjdCBlbmljICplbmljLCBpbnQgKnN0YXR1cykKK3sKKwlpbnQgZXJyOworCisJc3Bpbl9sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CisJZXJyID0gdm5pY19kZXZfZW5hYmxlMl9kb25lKGVuaWMtPnZkZXYsIHN0YXR1cyk7CisJc3Bpbl91bmxvY2soJmVuaWMtPmRldmNtZF9sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBlbmljX2Rldl9zdGF0dXNfdG9fZXJybm8oaW50IGRldmNtZF9zdGF0dXMpCit7CisJc3dpdGNoIChkZXZjbWRfc3RhdHVzKSB7CisJY2FzZSBFUlJfU1VDQ0VTUzoKKwkJcmV0dXJuIDA7CisJY2FzZSBFUlJfRUlOVkFMOgorCQlyZXR1cm4gLUVJTlZBTDsKKwljYXNlIEVSUl9FRkFVTFQ6CisJCXJldHVybiAtRUZBVUxUOworCWNhc2UgRVJSX0VQRVJNOgorCQlyZXR1cm4gLUVQRVJNOworCWNhc2UgRVJSX0VCVVNZOgorCQlyZXR1cm4gLUVCVVNZOworCWNhc2UgRVJSX0VDTURVTktOT1dOOgorCWNhc2UgRVJSX0VOT1RTVVBQT1JURUQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwljYXNlIEVSUl9FQkFEU1RBVEU6CisJCXJldHVybiAtRUlOVkFMOworCWNhc2UgRVJSX0VOT01FTToKKwkJcmV0dXJuIC1FTk9NRU07CisJY2FzZSBFUlJfRVRJTUVET1VUOgorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwljYXNlIEVSUl9FTElOS0RPV046CisJCXJldHVybiAtRU5FVERPV047CisJY2FzZSBFUlJfRUlOUFJPR1JFU1M6CisJCXJldHVybiAtRUlOUFJPR1JFU1M7CisJY2FzZSBFUlJfRU1BWFJFUzoKKwlkZWZhdWx0OgorCQlyZXR1cm4gKGRldmNtZF9zdGF0dXMgPCAwKSA/IGRldmNtZF9zdGF0dXMgOiAtMTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL2VuaWNfZGV2LmggYi9kcml2ZXJzL25ldC9lbmljL2VuaWNfZGV2LmgKaW5kZXggNDk1ZjU3Zi4uZDVmNjgxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy9lbmljX2Rldi5oCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19kZXYuaApAQCAtMzUsNyArMzUsMTAgQEAKIGludCBlbmljX2Rldl9lbmFibGUoc3RydWN0IGVuaWMgKmVuaWMpOwogaW50IGVuaWNfZGV2X2Rpc2FibGUoc3RydWN0IGVuaWMgKmVuaWMpOwogaW50IGVuaWNfdm5pY19kZXZfZGVpbml0KHN0cnVjdCBlbmljICplbmljKTsKLWludCBlbmljX2Rldl9pbml0X3Byb3Yoc3RydWN0IGVuaWMgKmVuaWMsIHN0cnVjdCB2aWNfcHJvdmluZm8gKnZwKTsKLWludCBlbmljX2Rldl9pbml0X2RvbmUoc3RydWN0IGVuaWMgKmVuaWMsIGludCAqZG9uZSwgaW50ICplcnJvcik7CitpbnQgZW5pY19kZXZfaW5pdF9wcm92MihzdHJ1Y3QgZW5pYyAqZW5pYywgc3RydWN0IHZpY19wcm92aW5mbyAqdnApOworaW50IGVuaWNfZGV2X2RlaW5pdF9kb25lKHN0cnVjdCBlbmljICplbmljLCBpbnQgKnN0YXR1cyk7CitpbnQgZW5pY19kZXZfZW5hYmxlMihzdHJ1Y3QgZW5pYyAqZW5pYywgaW50IGFyZyk7CitpbnQgZW5pY19kZXZfZW5hYmxlMl9kb25lKHN0cnVjdCBlbmljICplbmljLCBpbnQgKnN0YXR1cyk7CitpbnQgZW5pY19kZXZfc3RhdHVzX3RvX2Vycm5vKGludCBkZXZjbWRfc3RhdHVzKTsKIAogI2VuZGlmIC8qIF9FTklDX0RFVl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy9lbmljX21haW4uYyBiL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19tYWluLmMKaW5kZXggOGI5Y2FkNS4uMmY0MzNmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy9lbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9lbmljL2VuaWNfbWFpbi5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgogI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSA8bmV0L2lwNl9jaGVja3N1bS5oPgogCiAjaW5jbHVkZSAiY3FfZW5ldF9kZXNjLmgiCkBAIC00NSw2ICs0Niw3IEBACiAjaW5jbHVkZSAiZW5pY19yZXMuaCIKICNpbmNsdWRlICJlbmljLmgiCiAjaW5jbHVkZSAiZW5pY19kZXYuaCIKKyNpbmNsdWRlICJlbmljX3BwLmgiCiAKICNkZWZpbmUgRU5JQ19OT1RJRllfVElNRVJfUEVSSU9ECSgyICogSFopCiAjZGVmaW5lIFdRX0VORVRfTUFYX0RFU0NfTEVOCQkoMSA8PCBXUV9FTkVUX0xFTl9CSVRTKQpAQCAtMTc5LDEwICsxODEsMTAgQEAKIAllY21kLT50cmFuc2NlaXZlciA9IFhDVlJfRVhURVJOQUw7CiAKIAlpZiAobmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7Ci0JCWVjbWQtPnNwZWVkID0gdm5pY19kZXZfcG9ydF9zcGVlZChlbmljLT52ZGV2KTsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIHZuaWNfZGV2X3BvcnRfc3BlZWQoZW5pYy0+dmRldikpOwogCQllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKIAl9IGVsc2UgewotCQllY21kLT5zcGVlZCA9IC0xOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgLTEpOwogCQllY21kLT5kdXBsZXggPSAtMTsKIAl9CiAKQEAgLTI1MCw1NiArMjUyLDYgQEAKIAkJKihkYXRhKyspID0gKCh1NjQgKikmdnN0YXRzLT5yeClbZW5pY19yeF9zdGF0c1tpXS5vZmZzZXRdOwogfQogCi1zdGF0aWMgdTMyIGVuaWNfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKLXsKLQlzdHJ1Y3QgZW5pYyAqZW5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JcmV0dXJuIGVuaWMtPmNzdW1fcnhfZW5hYmxlZDsKLX0KLQotc3RhdGljIGludCBlbmljX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCBlbmljICplbmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQotCWlmIChkYXRhICYmICFFTklDX1NFVFRJTkcoZW5pYywgUlhDU1VNKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQllbmljLT5jc3VtX3J4X2VuYWJsZWQgPSAhIWRhdGE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBlbmljX3NldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCBlbmljICplbmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQotCWlmIChkYXRhICYmICFFTklDX1NFVFRJTkcoZW5pYywgVFhDU1VNKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoZGF0YSkKLQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX0NTVU07Ci0JZWxzZQotCQluZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0hXX0NTVU07Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBlbmljX3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IGVuaWMgKmVuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0JaWYgKGRhdGEgJiYgIUVOSUNfU0VUVElORyhlbmljLCBUU08pKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChkYXRhKQotCQluZXRkZXYtPmZlYXR1cmVzIHw9Ci0JCQlORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNiB8IE5FVElGX0ZfVFNPX0VDTjsKLQllbHNlCi0JCW5ldGRldi0+ZmVhdHVyZXMgJj0KLQkJCX4oTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfCBORVRJRl9GX1RTT19FQ04pOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB1MzIgZW5pY19nZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgZW5pYyAqZW5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7CkBAIC0zODcsMTcgKzMzOSw4IEBACiAJLmdldF9zdHJpbmdzID0gZW5pY19nZXRfc3RyaW5ncywKIAkuZ2V0X3NzZXRfY291bnQgPSBlbmljX2dldF9zc2V0X2NvdW50LAogCS5nZXRfZXRodG9vbF9zdGF0cyA9IGVuaWNfZ2V0X2V0aHRvb2xfc3RhdHMsCi0JLmdldF9yeF9jc3VtID0gZW5pY19nZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0gPSBlbmljX3NldF9yeF9jc3VtLAotCS5nZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCi0JLnNldF90eF9jc3VtID0gZW5pY19zZXRfdHhfY3N1bSwKLQkuZ2V0X3NnID0gZXRodG9vbF9vcF9nZXRfc2csCi0JLnNldF9zZyA9IGV0aHRvb2xfb3Bfc2V0X3NnLAotCS5nZXRfdHNvID0gZXRodG9vbF9vcF9nZXRfdHNvLAotCS5zZXRfdHNvID0gZW5pY19zZXRfdHNvLAogCS5nZXRfY29hbGVzY2UgPSBlbmljX2dldF9jb2FsZXNjZSwKIAkuc2V0X2NvYWxlc2NlID0gZW5pY19zZXRfY29hbGVzY2UsCi0JLmdldF9mbGFncyA9IGV0aHRvb2xfb3BfZ2V0X2ZsYWdzLAogfTsKIAogc3RhdGljIHZvaWQgZW5pY19mcmVlX3dxX2J1ZihzdHJ1Y3Qgdm5pY193cSAqd3EsIHN0cnVjdCB2bmljX3dxX2J1ZiAqYnVmKQpAQCAtODc0LDcgKzgxNyw3IEBACiAJcmV0dXJuIG5ldF9zdGF0czsKIH0KIAotc3RhdGljIHZvaWQgZW5pY19yZXNldF9hZGRyX2xpc3RzKHN0cnVjdCBlbmljICplbmljKQordm9pZCBlbmljX3Jlc2V0X2FkZHJfbGlzdHMoc3RydWN0IGVuaWMgKmVuaWMpCiB7CiAJZW5pYy0+bWNfY291bnQgPSAwOwogCWVuaWMtPnVjX2NvdW50ID0gMDsKQEAgLTExMTIsMTU3ICsxMDU1LDc3IEBACiAJCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IGVuaWNfc2V0X3BvcnRfcHJvZmlsZShzdHJ1Y3QgZW5pYyAqZW5pYywgdTggKm1hYykKLXsKLQlzdHJ1Y3QgdmljX3Byb3ZpbmZvICp2cDsKLQl1OCBvdWlbM10gPSBWSUNfUFJPVklORk9fQ0lTQ09fT1VJOwotCXUxNiBvc190eXBlID0gVklDX0dFTkVSSUNfUFJPVl9PU19UWVBFX0xJTlVYOwotCWNoYXIgdXVpZF9zdHJbMzhdOwotCWNoYXIgY2xpZW50X21hY19zdHJbMThdOwotCXU4ICpjbGllbnRfbWFjOwotCWludCBlcnI7Ci0KLQllcnIgPSBlbmljX3ZuaWNfZGV2X2RlaW5pdChlbmljKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZW5pY19yZXNldF9hZGRyX2xpc3RzKGVuaWMpOwotCi0Jc3dpdGNoIChlbmljLT5wcC5yZXF1ZXN0KSB7Ci0KLQljYXNlIFBPUlRfUkVRVUVTVF9BU1NPQ0lBVEU6Ci0KLQkJaWYgKCEoZW5pYy0+cHAuc2V0ICYgRU5JQ19TRVRfTkFNRSkgfHwgIXN0cmxlbihlbmljLT5wcC5uYW1lKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihtYWMpKQotCQkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwotCi0JCXZwID0gdmljX3Byb3ZpbmZvX2FsbG9jKEdGUF9LRVJORUwsIG91aSwKLQkJCVZJQ19QUk9WSU5GT19HRU5FUklDX1RZUEUpOwotCQlpZiAoIXZwKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJdmljX3Byb3ZpbmZvX2FkZF90bHYodnAsCi0JCQlWSUNfR0VORVJJQ19QUk9WX1RMVl9QT1JUX1BST0ZJTEVfTkFNRV9TVFIsCi0JCQlzdHJsZW4oZW5pYy0+cHAubmFtZSkgKyAxLCBlbmljLT5wcC5uYW1lKTsKLQotCQlpZiAoIWlzX3plcm9fZXRoZXJfYWRkcihlbmljLT5wcC5tYWNfYWRkcikpCi0JCQljbGllbnRfbWFjID0gZW5pYy0+cHAubWFjX2FkZHI7Ci0JCWVsc2UKLQkJCWNsaWVudF9tYWMgPSBtYWM7Ci0KLQkJdmljX3Byb3ZpbmZvX2FkZF90bHYodnAsCi0JCQlWSUNfR0VORVJJQ19QUk9WX1RMVl9DTElFTlRfTUFDX0FERFIsCi0JCQlFVEhfQUxFTiwgY2xpZW50X21hYyk7Ci0KLQkJc3ByaW50ZihjbGllbnRfbWFjX3N0ciwgIiVwTSIsIGNsaWVudF9tYWMpOwotCQl2aWNfcHJvdmluZm9fYWRkX3Rsdih2cCwKLQkJCVZJQ19HRU5FUklDX1BST1ZfVExWX0NMVVNURVJfUE9SVF9VVUlEX1NUUiwKLQkJCXNpemVvZihjbGllbnRfbWFjX3N0ciksIGNsaWVudF9tYWNfc3RyKTsKLQotCQlpZiAoZW5pYy0+cHAuc2V0ICYgRU5JQ19TRVRfSU5TVEFOQ0UpIHsKLQkJCXNwcmludGYodXVpZF9zdHIsICIlcFVCIiwgZW5pYy0+cHAuaW5zdGFuY2VfdXVpZCk7Ci0JCQl2aWNfcHJvdmluZm9fYWRkX3Rsdih2cCwKLQkJCQlWSUNfR0VORVJJQ19QUk9WX1RMVl9DTElFTlRfVVVJRF9TVFIsCi0JCQkJc2l6ZW9mKHV1aWRfc3RyKSwgdXVpZF9zdHIpOwotCQl9Ci0KLQkJaWYgKGVuaWMtPnBwLnNldCAmIEVOSUNfU0VUX0hPU1QpIHsKLQkJCXNwcmludGYodXVpZF9zdHIsICIlcFVCIiwgZW5pYy0+cHAuaG9zdF91dWlkKTsKLQkJCXZpY19wcm92aW5mb19hZGRfdGx2KHZwLAotCQkJCVZJQ19HRU5FUklDX1BST1ZfVExWX0hPU1RfVVVJRF9TVFIsCi0JCQkJc2l6ZW9mKHV1aWRfc3RyKSwgdXVpZF9zdHIpOwotCQl9Ci0KLQkJb3NfdHlwZSA9IGh0b25zKG9zX3R5cGUpOwotCQl2aWNfcHJvdmluZm9fYWRkX3Rsdih2cCwKLQkJCVZJQ19HRU5FUklDX1BST1ZfVExWX09TX1RZUEUsCi0JCQlzaXplb2Yob3NfdHlwZSksICZvc190eXBlKTsKLQotCQllcnIgPSBlbmljX2Rldl9pbml0X3Byb3YoZW5pYywgdnApOwotCQl2aWNfcHJvdmluZm9fZnJlZSh2cCk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCQlicmVhazsKLQotCWNhc2UgUE9SVF9SRVFVRVNUX0RJU0FTU09DSUFURToKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBTZXQgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwb3J0IGFzc29jL2Rpc2Fzc29jCi0JICogcmVxdWVzdCBoYXMgYmVlbiBzZW50IG91dCB0byBmdwotCSAqLwotCWVuaWMtPnBwLnNldCB8PSBFTklDX1BPUlRfUkVRVUVTVF9BUFBMSUVEOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgZW5pY19zZXRfdmZfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmYsCiAJc3RydWN0IG5sYXR0ciAqcG9ydFtdKQogewogCXN0cnVjdCBlbmljICplbmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgZW5pY19wb3J0X3Byb2ZpbGUgbmV3X3BwOwotCWludCBlcnIgPSAwOwotCi0JbWVtc2V0KCZuZXdfcHAsIDAsIHNpemVvZihuZXdfcHApKTsKLQotCWlmIChwb3J0W0lGTEFfUE9SVF9SRVFVRVNUXSkgewotCQluZXdfcHAuc2V0IHw9IEVOSUNfU0VUX1JFUVVFU1Q7Ci0JCW5ld19wcC5yZXF1ZXN0ID0gbmxhX2dldF91OChwb3J0W0lGTEFfUE9SVF9SRVFVRVNUXSk7Ci0JfQotCi0JaWYgKHBvcnRbSUZMQV9QT1JUX1BST0ZJTEVdKSB7Ci0JCW5ld19wcC5zZXQgfD0gRU5JQ19TRVRfTkFNRTsKLQkJbWVtY3B5KG5ld19wcC5uYW1lLCBubGFfZGF0YShwb3J0W0lGTEFfUE9SVF9QUk9GSUxFXSksCi0JCQlQT1JUX1BST0ZJTEVfTUFYKTsKLQl9Ci0KLQlpZiAocG9ydFtJRkxBX1BPUlRfSU5TVEFOQ0VfVVVJRF0pIHsKLQkJbmV3X3BwLnNldCB8PSBFTklDX1NFVF9JTlNUQU5DRTsKLQkJbWVtY3B5KG5ld19wcC5pbnN0YW5jZV91dWlkLAotCQkJbmxhX2RhdGEocG9ydFtJRkxBX1BPUlRfSU5TVEFOQ0VfVVVJRF0pLCBQT1JUX1VVSURfTUFYKTsKLQl9Ci0KLQlpZiAocG9ydFtJRkxBX1BPUlRfSE9TVF9VVUlEXSkgewotCQluZXdfcHAuc2V0IHw9IEVOSUNfU0VUX0hPU1Q7Ci0JCW1lbWNweShuZXdfcHAuaG9zdF91dWlkLAotCQkJbmxhX2RhdGEocG9ydFtJRkxBX1BPUlRfSE9TVF9VVUlEXSksIFBPUlRfVVVJRF9NQVgpOwotCX0KKwlzdHJ1Y3QgZW5pY19wb3J0X3Byb2ZpbGUgcHJldl9wcDsKKwlpbnQgZXJyID0gMCwgcmVzdG9yZV9wcCA9IDE7CiAKIAkvKiBkb24ndCBzdXBwb3J0IFZGcywgeWV0ICovCiAJaWYgKHZmICE9IFBPUlRfU0VMRl9WRikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JaWYgKCEobmV3X3BwLnNldCAmIEVOSUNfU0VUX1JFUVVFU1QpKQorCWlmICghcG9ydFtJRkxBX1BPUlRfUkVRVUVTVF0pCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCWlmIChuZXdfcHAucmVxdWVzdCA9PSBQT1JUX1JFUVVFU1RfQVNTT0NJQVRFKSB7Ci0JCS8qIFNwZWNpYWwgY2FzZSBoYW5kbGluZyAqLwotCQlpZiAoIWlzX3plcm9fZXRoZXJfYWRkcihlbmljLT5wcC52Zl9tYWMpKQotCQkJbWVtY3B5KG5ld19wcC5tYWNfYWRkciwgZW5pYy0+cHAudmZfbWFjLCBFVEhfQUxFTik7CisJbWVtY3B5KCZwcmV2X3BwLCAmZW5pYy0+cHAsIHNpemVvZihlbmljLT5wcCkpOworCW1lbXNldCgmZW5pYy0+cHAsIDAsIHNpemVvZihlbmljLT5wcCkpOworCisJZW5pYy0+cHAuc2V0IHw9IEVOSUNfU0VUX1JFUVVFU1Q7CisJZW5pYy0+cHAucmVxdWVzdCA9IG5sYV9nZXRfdTgocG9ydFtJRkxBX1BPUlRfUkVRVUVTVF0pOworCisJaWYgKHBvcnRbSUZMQV9QT1JUX1BST0ZJTEVdKSB7CisJCWVuaWMtPnBwLnNldCB8PSBFTklDX1NFVF9OQU1FOworCQltZW1jcHkoZW5pYy0+cHAubmFtZSwgbmxhX2RhdGEocG9ydFtJRkxBX1BPUlRfUFJPRklMRV0pLAorCQkJUE9SVF9QUk9GSUxFX01BWCk7CisJfQorCisJaWYgKHBvcnRbSUZMQV9QT1JUX0lOU1RBTkNFX1VVSURdKSB7CisJCWVuaWMtPnBwLnNldCB8PSBFTklDX1NFVF9JTlNUQU5DRTsKKwkJbWVtY3B5KGVuaWMtPnBwLmluc3RhbmNlX3V1aWQsCisJCQlubGFfZGF0YShwb3J0W0lGTEFfUE9SVF9JTlNUQU5DRV9VVUlEXSksIFBPUlRfVVVJRF9NQVgpOworCX0KKworCWlmIChwb3J0W0lGTEFfUE9SVF9IT1NUX1VVSURdKSB7CisJCWVuaWMtPnBwLnNldCB8PSBFTklDX1NFVF9IT1NUOworCQltZW1jcHkoZW5pYy0+cHAuaG9zdF91dWlkLAorCQkJbmxhX2RhdGEocG9ydFtJRkxBX1BPUlRfSE9TVF9VVUlEXSksIFBPUlRfVVVJRF9NQVgpOworCX0KKworCS8qIFNwZWNpYWwgY2FzZSBoYW5kbGluZzogbWFjIGNhbWUgZnJvbSBJRkxBX1ZGX01BQyAqLworCWlmICghaXNfemVyb19ldGhlcl9hZGRyKHByZXZfcHAudmZfbWFjKSkKKwkJbWVtY3B5KGVuaWMtPnBwLm1hY19hZGRyLCBwcmV2X3BwLnZmX21hYywgRVRIX0FMRU4pOwogCiAJCWlmIChpc196ZXJvX2V0aGVyX2FkZHIobmV0ZGV2LT5kZXZfYWRkcikpCiAJCQlyYW5kb21fZXRoZXJfYWRkcihuZXRkZXYtPmRldl9hZGRyKTsKKworCWVyciA9IGVuaWNfcHJvY2Vzc19zZXRfcHBfcmVxdWVzdChlbmljLCAmcHJldl9wcCwgJnJlc3RvcmVfcHApOworCWlmIChlcnIpIHsKKwkJaWYgKHJlc3RvcmVfcHApIHsKKwkJCS8qIFRoaW5ncyBhcmUgc3RpbGwgdGhlIHdheSB0aGV5IHdlcmU6IEltcGxpY2l0CisJCQkgKiBESVNBU1NPQ0lBVEUgZmFpbGVkCisJCQkgKi8KKwkJCW1lbWNweSgmZW5pYy0+cHAsICZwcmV2X3BwLCBzaXplb2YoZW5pYy0+cHApKTsKKwkJfSBlbHNlIHsKKwkJCW1lbXNldCgmZW5pYy0+cHAsIDAsIHNpemVvZihlbmljLT5wcCkpOworCQkJbWVtc2V0KG5ldGRldi0+ZGV2X2FkZHIsIDAsIEVUSF9BTEVOKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFNldCBmbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIHBvcnQgYXNzb2MvZGlzYXNzb2MKKwkJICogcmVxdWVzdCBoYXMgYmVlbiBzZW50IG91dCB0byBmdworCQkgKi8KKwkJZW5pYy0+cHAuc2V0IHw9IEVOSUNfUE9SVF9SRVFVRVNUX0FQUExJRUQ7CisKKwkJLyogSWYgRElTQVNTT0NJQVRFLCBjbGVhbiB1cCBhbGwgYXNzaWduZWQvc2F2ZWQgbWFjYWRkcmVzc2VzICovCisJCWlmIChlbmljLT5wcC5yZXF1ZXN0ID09IFBPUlRfUkVRVUVTVF9ESVNBU1NPQ0lBVEUpIHsKKwkJCW1lbXNldChlbmljLT5wcC5tYWNfYWRkciwgMCwgRVRIX0FMRU4pOworCQkJbWVtc2V0KG5ldGRldi0+ZGV2X2FkZHIsIDAsIEVUSF9BTEVOKTsKKwkJfQogCX0KIAotCW1lbWNweSgmZW5pYy0+cHAsICZuZXdfcHAsIHNpemVvZihzdHJ1Y3QgZW5pY19wb3J0X3Byb2ZpbGUpKTsKLQotCWVyciA9IGVuaWNfc2V0X3BvcnRfcHJvZmlsZShlbmljLCBuZXRkZXYtPmRldl9hZGRyKTsKLQlpZiAoZXJyKQotCQlnb3RvIHNldF9wb3J0X3Byb2ZpbGVfY2xlYW51cDsKLQotc2V0X3BvcnRfcHJvZmlsZV9jbGVhbnVwOgogCW1lbXNldChlbmljLT5wcC52Zl9tYWMsIDAsIEVUSF9BTEVOKTsKIAotCWlmIChlcnIgfHwgZW5pYy0+cHAucmVxdWVzdCA9PSBQT1JUX1JFUVVFU1RfRElTQVNTT0NJQVRFKSB7Ci0JCW1lbXNldChuZXRkZXYtPmRldl9hZGRyLCAwLCBFVEhfQUxFTik7Ci0JCW1lbXNldChlbmljLT5wcC5tYWNfYWRkciwgMCwgRVRIX0FMRU4pOwotCX0KLQogCXJldHVybiBlcnI7CiB9CiAKQEAgLTEyNzAsMzQgKzExMzMsMTUgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBlbmljICplbmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlpbnQgZXJyLCBlcnJvciwgZG9uZTsKIAl1MTYgcmVzcG9uc2UgPSBQT1JUX1BST0ZJTEVfUkVTUE9OU0VfU1VDQ0VTUzsKKwlpbnQgZXJyOwogCiAJaWYgKCEoZW5pYy0+cHAuc2V0ICYgRU5JQ19QT1JUX1JFUVVFU1RfQVBQTElFRCkpCiAJCXJldHVybiAtRU5PREFUQTsKIAotCWVyciA9IGVuaWNfZGV2X2luaXRfZG9uZShlbmljLCAmZG9uZSwgJmVycm9yKTsKKwllcnIgPSBlbmljX3Byb2Nlc3NfZ2V0X3BwX3JlcXVlc3QoZW5pYywgZW5pYy0+cHAucmVxdWVzdCwgJnJlc3BvbnNlKTsKIAlpZiAoZXJyKQotCQllcnJvciA9IGVycjsKLQotCXN3aXRjaCAoZXJyb3IpIHsKLQljYXNlIEVSUl9TVUNDRVNTOgotCQlpZiAoIWRvbmUpCi0JCQlyZXNwb25zZSA9IFBPUlRfUFJPRklMRV9SRVNQT05TRV9JTlBST0dSRVNTOwotCQlicmVhazsKLQljYXNlIEVSUl9FSU5WQUw6Ci0JCXJlc3BvbnNlID0gUE9SVF9QUk9GSUxFX1JFU1BPTlNFX0lOVkFMSUQ7Ci0JCWJyZWFrOwotCWNhc2UgRVJSX0VCQURTVEFURToKLQkJcmVzcG9uc2UgPSBQT1JUX1BST0ZJTEVfUkVTUE9OU0VfQkFEU1RBVEU7Ci0JCWJyZWFrOwotCWNhc2UgRVJSX0VOT01FTToKLQkJcmVzcG9uc2UgPSBQT1JUX1BST0ZJTEVfUkVTUE9OU0VfSU5TVUZGSUNJRU5UX1JFU09VUkNFUzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmVzcG9uc2UgPSBQT1JUX1BST0ZJTEVfUkVTUE9OU0VfRVJST1I7Ci0JCWJyZWFrOwotCX0KKwkJcmV0dXJuIGVycjsKIAogCU5MQV9QVVRfVTE2KHNrYiwgSUZMQV9QT1JUX1JFUVVFU1QsIGVuaWMtPnBwLnJlcXVlc3QpOwogCU5MQV9QVVRfVTE2KHNrYiwgSUZMQV9QT1JUX1JFU1BPTlNFLCByZXNwb25zZSk7CkBAIC0xNDA3LDcgKzEyNTEsNyBAQAogCQlza2JfcHV0KHNrYiwgYnl0ZXNfd3JpdHRlbik7CiAJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5ldGRldik7CiAKLQkJaWYgKGVuaWMtPmNzdW1fcnhfZW5hYmxlZCAmJiAhY3N1bV9ub3RfY2FsYykgeworCQlpZiAoKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkgJiYgIWNzdW1fbm90X2NhbGMpIHsKIAkJCXNrYi0+Y3N1bSA9IGh0b25zKGNoZWNrc3VtKTsKIAkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fQ09NUExFVEU7CiAJCX0KQEAgLTI1MzYsMTcgKzIzODAsMTggQEAKIAkJZGV2X2luZm8oZGV2LCAibG9vcGJhY2sgdGFnPTB4JTA0eFxuIiwgZW5pYy0+bG9vcF90YWcpOwogCX0KIAlpZiAoRU5JQ19TRVRUSU5HKGVuaWMsIFRYQ1NVTSkpCi0JCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSFdfQ1NVTTsKKwkJbmV0ZGV2LT5od19mZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9IV19DU1VNOwogCWlmIChFTklDX1NFVFRJTkcoZW5pYywgVFNPKSkKLQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTyB8CisJCW5ldGRldi0+aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9UU08gfAogCQkJTkVUSUZfRl9UU082IHwgTkVUSUZfRl9UU09fRUNOOwotCWlmIChFTklDX1NFVFRJTkcoZW5pYywgTFJPKSkKLQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0dSTzsKKwlpZiAoRU5JQ19TRVRUSU5HKGVuaWMsIFJYQ1NVTSkpCisJCW5ldGRldi0+aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9SWENTVU07CisKKwluZXRkZXYtPmZlYXR1cmVzIHw9IG5ldGRldi0+aHdfZmVhdHVyZXM7CisKIAlpZiAodXNpbmdfZGFjKQogCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKIAotCWVuaWMtPmNzdW1fcnhfZW5hYmxlZCA9IEVOSUNfU0VUVElORyhlbmljLCBSWENTVU0pOwotCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CiAJaWYgKGVycikgewogCQlkZXZfZXJyKGRldiwgIkNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCBhYm9ydGluZ1xuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL2VuaWNfcHAuYyBiL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19wcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYWE3NWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9lbmljL2VuaWNfcHAuYwpAQCAtMCwwICsxLDI2NCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDExIENpc2NvIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBtYXkgcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgorI2luY2x1ZGUgPG5ldC9pcC5oPgorCisjaW5jbHVkZSAidm5pY192aWMuaCIKKyNpbmNsdWRlICJlbmljX3Jlcy5oIgorI2luY2x1ZGUgImVuaWMuaCIKKyNpbmNsdWRlICJlbmljX2Rldi5oIgorCitzdGF0aWMgaW50IGVuaWNfc2V0X3BvcnRfcHJvZmlsZShzdHJ1Y3QgZW5pYyAqZW5pYykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZW5pYy0+bmV0ZGV2OworCXN0cnVjdCB2aWNfcHJvdmluZm8gKnZwOworCWNvbnN0IHU4IG91aVszXSA9IFZJQ19QUk9WSU5GT19DSVNDT19PVUk7CisJY29uc3QgdTE2IG9zX3R5cGUgPSBodG9ucyhWSUNfR0VORVJJQ19QUk9WX09TX1RZUEVfTElOVVgpOworCWNoYXIgdXVpZF9zdHJbMzhdOworCWNoYXIgY2xpZW50X21hY19zdHJbMThdOworCXU4ICpjbGllbnRfbWFjOworCWludCBlcnI7CisKKwlpZiAoIShlbmljLT5wcC5zZXQgJiBFTklDX1NFVF9OQU1FKSB8fCAhc3RybGVuKGVuaWMtPnBwLm5hbWUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZwID0gdmljX3Byb3ZpbmZvX2FsbG9jKEdGUF9LRVJORUwsIG91aSwKKwkJVklDX1BST1ZJTkZPX0dFTkVSSUNfVFlQRSk7CisJaWYgKCF2cCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlWSUNfUFJPVklORk9fQUREX1RMVih2cCwKKwkJVklDX0dFTkVSSUNfUFJPVl9UTFZfUE9SVF9QUk9GSUxFX05BTUVfU1RSLAorCQlzdHJsZW4oZW5pYy0+cHAubmFtZSkgKyAxLCBlbmljLT5wcC5uYW1lKTsKKworCWlmICghaXNfemVyb19ldGhlcl9hZGRyKGVuaWMtPnBwLm1hY19hZGRyKSkKKwkJY2xpZW50X21hYyA9IGVuaWMtPnBwLm1hY19hZGRyOworCWVsc2UKKwkJY2xpZW50X21hYyA9IG5ldGRldi0+ZGV2X2FkZHI7CisKKwlWSUNfUFJPVklORk9fQUREX1RMVih2cCwKKwkJVklDX0dFTkVSSUNfUFJPVl9UTFZfQ0xJRU5UX01BQ19BRERSLAorCQlFVEhfQUxFTiwgY2xpZW50X21hYyk7CisKKwlzbnByaW50ZihjbGllbnRfbWFjX3N0ciwgc2l6ZW9mKGNsaWVudF9tYWNfc3RyKSwgIiVwTSIsIGNsaWVudF9tYWMpOworCVZJQ19QUk9WSU5GT19BRERfVExWKHZwLAorCQlWSUNfR0VORVJJQ19QUk9WX1RMVl9DTFVTVEVSX1BPUlRfVVVJRF9TVFIsCisJCXNpemVvZihjbGllbnRfbWFjX3N0ciksIGNsaWVudF9tYWNfc3RyKTsKKworCWlmIChlbmljLT5wcC5zZXQgJiBFTklDX1NFVF9JTlNUQU5DRSkgeworCQlzcHJpbnRmKHV1aWRfc3RyLCAiJXBVQiIsIGVuaWMtPnBwLmluc3RhbmNlX3V1aWQpOworCQlWSUNfUFJPVklORk9fQUREX1RMVih2cCwKKwkJCVZJQ19HRU5FUklDX1BST1ZfVExWX0NMSUVOVF9VVUlEX1NUUiwKKwkJCXNpemVvZih1dWlkX3N0ciksIHV1aWRfc3RyKTsKKwl9CisKKwlpZiAoZW5pYy0+cHAuc2V0ICYgRU5JQ19TRVRfSE9TVCkgeworCQlzcHJpbnRmKHV1aWRfc3RyLCAiJXBVQiIsIGVuaWMtPnBwLmhvc3RfdXVpZCk7CisJCVZJQ19QUk9WSU5GT19BRERfVExWKHZwLAorCQkJVklDX0dFTkVSSUNfUFJPVl9UTFZfSE9TVF9VVUlEX1NUUiwKKwkJCXNpemVvZih1dWlkX3N0ciksIHV1aWRfc3RyKTsKKwl9CisKKwlWSUNfUFJPVklORk9fQUREX1RMVih2cCwKKwkJVklDX0dFTkVSSUNfUFJPVl9UTFZfT1NfVFlQRSwKKwkJc2l6ZW9mKG9zX3R5cGUpLCAmb3NfdHlwZSk7CisKKwllcnIgPSBlbmljX2Rldl9zdGF0dXNfdG9fZXJybm8oZW5pY19kZXZfaW5pdF9wcm92MihlbmljLCB2cCkpOworCithZGRfdGx2X2ZhaWx1cmU6CisJdmljX3Byb3ZpbmZvX2ZyZWUodnApOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBlbmljX3Vuc2V0X3BvcnRfcHJvZmlsZShzdHJ1Y3QgZW5pYyAqZW5pYykKK3sKKwlpbnQgZXJyOworCisJZXJyID0gZW5pY192bmljX2Rldl9kZWluaXQoZW5pYyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVuaWNfZGV2X3N0YXR1c190b19lcnJubyhlcnIpOworCisJZW5pY19yZXNldF9hZGRyX2xpc3RzKGVuaWMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZW5pY19hcmVfcHBfZGlmZmVyZW50KHN0cnVjdCBlbmljX3BvcnRfcHJvZmlsZSAqcHAxLAorCQlzdHJ1Y3QgZW5pY19wb3J0X3Byb2ZpbGUgKnBwMikKK3sKKwlyZXR1cm4gc3RyY21wKHBwMS0+bmFtZSwgcHAyLT5uYW1lKSB8ICEhbWVtY21wKHBwMS0+aW5zdGFuY2VfdXVpZCwKKwkJcHAyLT5pbnN0YW5jZV91dWlkLCBQT1JUX1VVSURfTUFYKSB8CisJCSEhbWVtY21wKHBwMS0+aG9zdF91dWlkLCBwcDItPmhvc3RfdXVpZCwgUE9SVF9VVUlEX01BWCkgfAorCQkhIW1lbWNtcChwcDEtPm1hY19hZGRyLCBwcDItPm1hY19hZGRyLCBFVEhfQUxFTik7Cit9CisKK3N0YXRpYyBpbnQgZW5pY19wcF9wcmVhc3NvY2lhdGUoc3RydWN0IGVuaWMgKmVuaWMsCisJc3RydWN0IGVuaWNfcG9ydF9wcm9maWxlICpwcmV2X3BwLCBpbnQgKnJlc3RvcmVfcHApOworc3RhdGljIGludCBlbmljX3BwX2Rpc2Fzc29jaWF0ZShzdHJ1Y3QgZW5pYyAqZW5pYywKKwlzdHJ1Y3QgZW5pY19wb3J0X3Byb2ZpbGUgKnByZXZfcHAsIGludCAqcmVzdG9yZV9wcCk7CitzdGF0aWMgaW50IGVuaWNfcHBfcHJlYXNzb2NpYXRlX3JyKHN0cnVjdCBlbmljICplbmljLAorCXN0cnVjdCBlbmljX3BvcnRfcHJvZmlsZSAqcHJldl9wcCwgaW50ICpyZXN0b3JlX3BwKTsKK3N0YXRpYyBpbnQgZW5pY19wcF9hc3NvY2lhdGUoc3RydWN0IGVuaWMgKmVuaWMsCisJc3RydWN0IGVuaWNfcG9ydF9wcm9maWxlICpwcmV2X3BwLCBpbnQgKnJlc3RvcmVfcHApOworCitzdGF0aWMgaW50ICgqZW5pY19wcF9oYW5kbGVyc1tdKShzdHJ1Y3QgZW5pYyAqZW5pYywKKwkJc3RydWN0IGVuaWNfcG9ydF9wcm9maWxlICpwcmV2X3N0YXRlLCBpbnQgKnJlc3RvcmVfcHApID0geworCVtQT1JUX1JFUVVFU1RfUFJFQVNTT0NJQVRFXQk9IGVuaWNfcHBfcHJlYXNzb2NpYXRlLAorCVtQT1JUX1JFUVVFU1RfUFJFQVNTT0NJQVRFX1JSXQk9IGVuaWNfcHBfcHJlYXNzb2NpYXRlX3JyLAorCVtQT1JUX1JFUVVFU1RfQVNTT0NJQVRFXQk9IGVuaWNfcHBfYXNzb2NpYXRlLAorCVtQT1JUX1JFUVVFU1RfRElTQVNTT0NJQVRFXQk9IGVuaWNfcHBfZGlzYXNzb2NpYXRlLAorfTsKKworc3RhdGljIGNvbnN0IGludCBlbmljX3BwX2hhbmRsZXJzX2NvdW50ID0KKwkJCXNpemVvZihlbmljX3BwX2hhbmRsZXJzKS9zaXplb2YoKmVuaWNfcHBfaGFuZGxlcnMpOworCitzdGF0aWMgaW50IGVuaWNfcHBfcHJlYXNzb2NpYXRlKHN0cnVjdCBlbmljICplbmljLAorCXN0cnVjdCBlbmljX3BvcnRfcHJvZmlsZSAqcHJldl9wcCwgaW50ICpyZXN0b3JlX3BwKQoreworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworc3RhdGljIGludCBlbmljX3BwX2Rpc2Fzc29jaWF0ZShzdHJ1Y3QgZW5pYyAqZW5pYywKKwlzdHJ1Y3QgZW5pY19wb3J0X3Byb2ZpbGUgKnByZXZfcHAsIGludCAqcmVzdG9yZV9wcCkKK3sKKwlyZXR1cm4gZW5pY191bnNldF9wb3J0X3Byb2ZpbGUoZW5pYyk7Cit9CisKK3N0YXRpYyBpbnQgZW5pY19wcF9wcmVhc3NvY2lhdGVfcnIoc3RydWN0IGVuaWMgKmVuaWMsCisJc3RydWN0IGVuaWNfcG9ydF9wcm9maWxlICpwcmV2X3BwLCBpbnQgKnJlc3RvcmVfcHApCit7CisJaW50IGVycjsKKwlpbnQgYWN0aXZlID0gMDsKKworCWlmIChlbmljLT5wcC5yZXF1ZXN0ICE9IFBPUlRfUkVRVUVTVF9BU1NPQ0lBVEUpIHsKKwkJLyogSWYgcHJlLWFzc29jaWF0ZSBpcyBub3QgcGFydCBvZiBhbiBhc3NvY2lhdGUuCisJCVdlIGFsd2F5cyBkaXNhc3NvY2lhdGUgZmlyc3QgKi8KKwkJZXJyID0gZW5pY19wcF9oYW5kbGVyc1tQT1JUX1JFUVVFU1RfRElTQVNTT0NJQVRFXShlbmljLAorCQkJcHJldl9wcCwgcmVzdG9yZV9wcCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCSpyZXN0b3JlX3BwID0gMDsKKwl9CisKKwkqcmVzdG9yZV9wcCA9IDA7CisKKwllcnIgPSBlbmljX3NldF9wb3J0X3Byb2ZpbGUoZW5pYyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIElmIHByZS1hc3NvY2lhdGUgaXMgbm90IHBhcnQgb2YgYW4gYXNzb2NpYXRlLiAqLworCWlmIChlbmljLT5wcC5yZXF1ZXN0ICE9IFBPUlRfUkVRVUVTVF9BU1NPQ0lBVEUpCisJCWVyciA9IGVuaWNfZGV2X3N0YXR1c190b19lcnJubyhlbmljX2Rldl9lbmFibGUyKGVuaWMsIGFjdGl2ZSkpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBlbmljX3BwX2Fzc29jaWF0ZShzdHJ1Y3QgZW5pYyAqZW5pYywKKwlzdHJ1Y3QgZW5pY19wb3J0X3Byb2ZpbGUgKnByZXZfcHAsIGludCAqcmVzdG9yZV9wcCkKK3sKKwlpbnQgZXJyOworCWludCBhY3RpdmUgPSAxOworCisJLyogQ2hlY2sgaWYgYSBwcmUtYXNzb2NpYXRlIHdhcyBjYWxsZWQgYmVmb3JlICovCisJaWYgKHByZXZfcHAtPnJlcXVlc3QgIT0gUE9SVF9SRVFVRVNUX1BSRUFTU09DSUFURV9SUiB8fAorCQkocHJldl9wcC0+cmVxdWVzdCA9PSBQT1JUX1JFUVVFU1RfUFJFQVNTT0NJQVRFX1JSICYmCisJCQllbmljX2FyZV9wcF9kaWZmZXJlbnQocHJldl9wcCwgJmVuaWMtPnBwKSkpIHsKKwkJZXJyID0gZW5pY19wcF9oYW5kbGVyc1tQT1JUX1JFUVVFU1RfRElTQVNTT0NJQVRFXSgKKwkJCWVuaWMsIHByZXZfcHAsIHJlc3RvcmVfcHApOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQkqcmVzdG9yZV9wcCA9IDA7CisJfQorCisJZXJyID0gZW5pY19wcF9oYW5kbGVyc1tQT1JUX1JFUVVFU1RfUFJFQVNTT0NJQVRFX1JSXSgKKwkJCWVuaWMsIHByZXZfcHAsIHJlc3RvcmVfcHApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkqcmVzdG9yZV9wcCA9IDA7CisKKwlyZXR1cm4gZW5pY19kZXZfc3RhdHVzX3RvX2Vycm5vKGVuaWNfZGV2X2VuYWJsZTIoZW5pYywgYWN0aXZlKSk7Cit9CisKK2ludCBlbmljX3Byb2Nlc3Nfc2V0X3BwX3JlcXVlc3Qoc3RydWN0IGVuaWMgKmVuaWMsCisJc3RydWN0IGVuaWNfcG9ydF9wcm9maWxlICpwcmV2X3BwLCBpbnQgKnJlc3RvcmVfcHApCit7CisJaWYgKGVuaWMtPnBwLnJlcXVlc3QgPCBlbmljX3BwX2hhbmRsZXJzX2NvdW50CisJCSYmIGVuaWNfcHBfaGFuZGxlcnNbZW5pYy0+cHAucmVxdWVzdF0pCisJCXJldHVybiBlbmljX3BwX2hhbmRsZXJzW2VuaWMtPnBwLnJlcXVlc3RdKGVuaWMsCisJCQlwcmV2X3BwLCByZXN0b3JlX3BwKTsKKwllbHNlCisJCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworaW50IGVuaWNfcHJvY2Vzc19nZXRfcHBfcmVxdWVzdChzdHJ1Y3QgZW5pYyAqZW5pYywgaW50IHJlcXVlc3QsCisJdTE2ICpyZXNwb25zZSkKK3sKKwlpbnQgZXJyLCBzdGF0dXMgPSBFUlJfU1VDQ0VTUzsKKworCXN3aXRjaCAocmVxdWVzdCkgeworCisJY2FzZSBQT1JUX1JFUVVFU1RfUFJFQVNTT0NJQVRFX1JSOgorCWNhc2UgUE9SVF9SRVFVRVNUX0FTU09DSUFURToKKwkJZXJyID0gZW5pY19kZXZfZW5hYmxlMl9kb25lKGVuaWMsICZzdGF0dXMpOworCQlicmVhazsKKworCWNhc2UgUE9SVF9SRVFVRVNUX0RJU0FTU09DSUFURToKKwkJZXJyID0gZW5pY19kZXZfZGVpbml0X2RvbmUoZW5pYywgJnN0YXR1cyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGVycikKKwkJc3RhdHVzID0gZXJyOworCisJc3dpdGNoIChzdGF0dXMpIHsKKwljYXNlIEVSUl9TVUNDRVNTOgorCQkqcmVzcG9uc2UgPSBQT1JUX1BST0ZJTEVfUkVTUE9OU0VfU1VDQ0VTUzsKKwkJYnJlYWs7CisJY2FzZSBFUlJfRUlOVkFMOgorCQkqcmVzcG9uc2UgPSBQT1JUX1BST0ZJTEVfUkVTUE9OU0VfSU5WQUxJRDsKKwkJYnJlYWs7CisJY2FzZSBFUlJfRUJBRFNUQVRFOgorCQkqcmVzcG9uc2UgPSBQT1JUX1BST0ZJTEVfUkVTUE9OU0VfQkFEU1RBVEU7CisJCWJyZWFrOworCWNhc2UgRVJSX0VOT01FTToKKwkJKnJlc3BvbnNlID0gUE9SVF9QUk9GSUxFX1JFU1BPTlNFX0lOU1VGRklDSUVOVF9SRVNPVVJDRVM7CisJCWJyZWFrOworCWNhc2UgRVJSX0VJTlBST0dSRVNTOgorCQkqcmVzcG9uc2UgPSBQT1JUX1BST0ZJTEVfUkVTUE9OU0VfSU5QUk9HUkVTUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJKnJlc3BvbnNlID0gUE9SVF9QUk9GSUxFX1JFU1BPTlNFX0VSUk9SOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19wcC5oIGIvZHJpdmVycy9uZXQvZW5pYy9lbmljX3BwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk5ZTM2NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19wcC5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMSBDaXNjbyBTeXN0ZW1zLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgbWF5IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisKKyNpZm5kZWYgX0VOSUNfUFBfSF8KKyNkZWZpbmUgX0VOSUNfUFBfSF8KKworaW50IGVuaWNfcHJvY2Vzc19zZXRfcHBfcmVxdWVzdChzdHJ1Y3QgZW5pYyAqZW5pYywKKwlzdHJ1Y3QgZW5pY19wb3J0X3Byb2ZpbGUgKnByZXZfcHAsIGludCAqcmVzdG9yZV9wcCk7CitpbnQgZW5pY19wcm9jZXNzX2dldF9wcF9yZXF1ZXN0KHN0cnVjdCBlbmljICplbmljLCBpbnQgcmVxdWVzdCwKKwl1MTYgKnJlc3BvbnNlKTsKKworI2VuZGlmIC8qIF9FTklDX1BQX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL2VuaWNfcmVzLmMgYi9kcml2ZXJzL25ldC9lbmljL2VuaWNfcmVzLmMKaW5kZXggZjExMWEzNy4uNmU1YzYzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy9lbmljX3Jlcy5jCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19yZXMuYwpAQCAtOTgsOSArOTgsOSBAQAogCQkidk5JQyBNQUMgYWRkciAlcE0gd3EvcnEgJWQvJWQgbXR1ICVkXG4iLAogCQllbmljLT5tYWNfYWRkciwgYy0+d3FfZGVzY19jb3VudCwgYy0+cnFfZGVzY19jb3VudCwgYy0+bXR1KTsKIAlkZXZfaW5mbyhlbmljX2dldF9kZXYoZW5pYyksICJ2TklDIGNzdW0gdHgvcnggJWQvJWQgIgotCQkidHNvL2xybyAlZC8lZCBpbnRyIHRpbWVyICVkIHVzZWMgcnNzICVkXG4iLAorCQkidHNvICVkIGludHIgdGltZXIgJWQgdXNlYyByc3MgJWRcbiIsCiAJCUVOSUNfU0VUVElORyhlbmljLCBUWENTVU0pLCBFTklDX1NFVFRJTkcoZW5pYywgUlhDU1VNKSwKLQkJRU5JQ19TRVRUSU5HKGVuaWMsIFRTTyksIEVOSUNfU0VUVElORyhlbmljLCBMUk8pLAorCQlFTklDX1NFVFRJTkcoZW5pYywgVFNPKSwKIAkJYy0+aW50cl90aW1lcl91c2VjLCBFTklDX1NFVFRJTkcoZW5pYywgUlNTKSk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXYuYyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXYuYwppbmRleCBjMDg5YjM2Li42OGYyNGFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5jCkBAIC03ODYsNDggKzc4Niw2IEBACiAJcmV0dXJuIHI7CiB9CiAKLWludCB2bmljX2Rldl9pbml0X2RvbmUoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LCBpbnQgKmRvbmUsIGludCAqZXJyKQotewotCXU2NCBhMCA9IDAsIGExID0gMDsKLQlpbnQgd2FpdCA9IDEwMDA7Ci0JaW50IHJldDsKLQotCSpkb25lID0gMDsKLQotCXJldCA9IHZuaWNfZGV2X2NtZCh2ZGV2LCBDTURfSU5JVF9TVEFUVVMsICZhMCwgJmExLCB3YWl0KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JKmRvbmUgPSAoYTAgPT0gMCk7Ci0KLQkqZXJyID0gKGEwID09IDApID8gKGludClhMTowOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCB2bmljX2Rldl9pbml0X3Byb3Yoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LCB1OCAqYnVmLCB1MzIgbGVuKQotewotCXU2NCBhMCwgYTEgPSBsZW47Ci0JaW50IHdhaXQgPSAxMDAwOwotCWRtYV9hZGRyX3QgcHJvdl9wYTsKLQl2b2lkICpwcm92X2J1ZjsKLQlpbnQgcmV0OwotCi0JcHJvdl9idWYgPSBwY2lfYWxsb2NfY29uc2lzdGVudCh2ZGV2LT5wZGV2LCBsZW4sICZwcm92X3BhKTsKLQlpZiAoIXByb3ZfYnVmKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbWNweShwcm92X2J1ZiwgYnVmLCBsZW4pOwotCi0JYTAgPSBwcm92X3BhOwotCi0JcmV0ID0gdm5pY19kZXZfY21kKHZkZXYsIENNRF9JTklUX1BST1ZfSU5GTywgJmEwLCAmYTEsIHdhaXQpOwotCi0JcGNpX2ZyZWVfY29uc2lzdGVudCh2ZGV2LT5wZGV2LCBsZW4sIHByb3ZfYnVmLCBwcm92X3BhKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIGludCB2bmljX2Rldl9kZWluaXQoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KQogewogCXU2NCBhMCA9IDAsIGExID0gMDsKQEAgLTkyNyw0ICs4ODUsNTkgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAoraW50IHZuaWNfZGV2X2luaXRfcHJvdjIoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LCB1OCAqYnVmLCB1MzIgbGVuKQoreworCXU2NCBhMCwgYTEgPSBsZW47CisJaW50IHdhaXQgPSAxMDAwOworCWRtYV9hZGRyX3QgcHJvdl9wYTsKKwl2b2lkICpwcm92X2J1ZjsKKwlpbnQgcmV0OwogCisJcHJvdl9idWYgPSBwY2lfYWxsb2NfY29uc2lzdGVudCh2ZGV2LT5wZGV2LCBsZW4sICZwcm92X3BhKTsKKwlpZiAoIXByb3ZfYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbWNweShwcm92X2J1ZiwgYnVmLCBsZW4pOworCisJYTAgPSBwcm92X3BhOworCisJcmV0ID0gdm5pY19kZXZfY21kKHZkZXYsIENNRF9JTklUX1BST1ZfSU5GTzIsICZhMCwgJmExLCB3YWl0KTsKKworCXBjaV9mcmVlX2NvbnNpc3RlbnQodmRldi0+cGRldiwgbGVuLCBwcm92X2J1ZiwgcHJvdl9wYSk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdm5pY19kZXZfZW5hYmxlMihzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIGludCBhY3RpdmUpCit7CisJdTY0IGEwLCBhMSA9IDA7CisJaW50IHdhaXQgPSAxMDAwOworCisJYTAgPSAoYWN0aXZlID8gQ01EX0VOQUJMRTJfQUNUSVZFIDogMCk7CisKKwlyZXR1cm4gdm5pY19kZXZfY21kKHZkZXYsIENNRF9FTkFCTEUyLCAmYTAsICZhMSwgd2FpdCk7Cit9CisKK3N0YXRpYyBpbnQgdm5pY19kZXZfY21kX3N0YXR1cyhzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIGVudW0gdm5pY19kZXZjbWRfY21kIGNtZCwKKwlpbnQgKnN0YXR1cykKK3sKKwl1NjQgYTAgPSBjbWQsIGExID0gMDsKKwlpbnQgd2FpdCA9IDEwMDA7CisJaW50IHJldDsKKworCXJldCA9IHZuaWNfZGV2X2NtZCh2ZGV2LCBDTURfU1RBVFVTLCAmYTAsICZhMSwgd2FpdCk7CisJaWYgKCFyZXQpCisJCSpzdGF0dXMgPSAoaW50KWEwOworCisJcmV0dXJuIHJldDsKK30KKworaW50IHZuaWNfZGV2X2VuYWJsZTJfZG9uZShzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIGludCAqc3RhdHVzKQoreworCXJldHVybiB2bmljX2Rldl9jbWRfc3RhdHVzKHZkZXYsIENNRF9FTkFCTEUyLCBzdGF0dXMpOworfQorCitpbnQgdm5pY19kZXZfZGVpbml0X2RvbmUoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LCBpbnQgKnN0YXR1cykKK3sKKwlyZXR1cm4gdm5pY19kZXZfY21kX3N0YXR1cyh2ZGV2LCBDTURfREVJTklULCBzdGF0dXMpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5oIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5oCmluZGV4IGU4Mzc1NDYuLmNmNDgyYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXYuaAorKysgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2LmgKQEAgLTEwOCw4ICsxMDgsNiBAQAogaW50IHZuaWNfZGV2X29wZW4oc3RydWN0IHZuaWNfZGV2ICp2ZGV2LCBpbnQgYXJnKTsKIGludCB2bmljX2Rldl9vcGVuX2RvbmUoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LCBpbnQgKmRvbmUpOwogaW50IHZuaWNfZGV2X2luaXQoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LCBpbnQgYXJnKTsKLWludCB2bmljX2Rldl9pbml0X2RvbmUoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LCBpbnQgKmRvbmUsIGludCAqZXJyKTsKLWludCB2bmljX2Rldl9pbml0X3Byb3Yoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LCB1OCAqYnVmLCB1MzIgbGVuKTsKIGludCB2bmljX2Rldl9kZWluaXQoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KTsKIGludCB2bmljX2Rldl9oYW5nX3Jlc2V0KHN0cnVjdCB2bmljX2RldiAqdmRldiwgaW50IGFyZyk7CiBpbnQgdm5pY19kZXZfaGFuZ19yZXNldF9kb25lKHN0cnVjdCB2bmljX2RldiAqdmRldiwgaW50ICpkb25lKTsKQEAgLTEyMiw1ICsxMjAsOSBAQAogc3RydWN0IHZuaWNfZGV2ICp2bmljX2Rldl9yZWdpc3RlcihzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsCiAJdm9pZCAqcHJpdiwgc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCB2bmljX2Rldl9iYXIgKmJhciwKIAl1bnNpZ25lZCBpbnQgbnVtX2JhcnMpOworaW50IHZuaWNfZGV2X2luaXRfcHJvdjIoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LCB1OCAqYnVmLCB1MzIgbGVuKTsKK2ludCB2bmljX2Rldl9lbmFibGUyKHN0cnVjdCB2bmljX2RldiAqdmRldiwgaW50IGFjdGl2ZSk7CitpbnQgdm5pY19kZXZfZW5hYmxlMl9kb25lKHN0cnVjdCB2bmljX2RldiAqdmRldiwgaW50ICpzdGF0dXMpOworaW50IHZuaWNfZGV2X2RlaW5pdF9kb25lKHN0cnVjdCB2bmljX2RldiAqdmRldiwgaW50ICpzdGF0dXMpOwogCiAjZW5kaWYgLyogX1ZOSUNfREVWX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2Y21kLmggYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2Y21kLmgKaW5kZXggZDgzM2EwNy4uYzU1NjliZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2RldmNtZC5oCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXZjbWQuaApAQCAtMjY3LDE3ICsyNjcsNjIgQEAKIAogCS8qCiAJICogQXMgZm9yIEJZX0JERiBleGNlcHQgYTAgaXMgaW5kZXggb2YgaHZubGluayBzdWJvcmRpbmF0ZSB2bmljCi0JICogb3IgU1ItSU9WIHZpcnR1YWwgdm5pYyAqLworCSAqIG9yIFNSLUlPViB2aXJ0dWFsIHZuaWMKKwkgKi8KIAlDTURfUFJPWFlfQllfSU5ERVggPSAgICBfQ01EQyhfQ01EX0RJUl9SVywgX0NNRF9WVFlQRV9BTEwsIDQzKSwKIAogCS8qCi0JICogaW46ICAodTY0KWEwPXBhZGRyIG9mIGJ1ZmZlciB0byBwdXQgbGF0ZXN0IFZJQyBWSUYtQ09ORklHLUlORk8gVExWIGluCi0JICogICAgICAodTMyKWExPWxlbmd0aCBvZiBidWZmZXIgaW4gYTAKLQkgKiBvdXQ6ICh1NjQpYTA9cGFkZHIgb2YgYnVmZmVyIHdpdGggbGF0ZXN0IFZJQyBWSUYtQ09ORklHLUlORk8gVExWCi0JICogICAgICAodTMyKWExPWFjdHVhbCBsZW5ndGggb2YgbGF0ZXN0IFZJQyBWSUYtQ09ORklHLUlORk8gVExWICovCisJICogRm9yIEhQUCB0b2dnbGU6CisJICogYWRhcHRlci1pbmZvLWdldAorCSAqIGluOiAgKHU2NClhMD1waHNpY2FsIGFkZHJlc3Mgb2YgYnVmZmVyIHBhc3NlZCBpbiBmcm9tIGNhbGxlci4KKwkgKiAgICAgICh1MTYpYTE9c2l6ZSBvZiBidWZmZXIgc3BlY2lmaWVkIGluIGEwLgorCSAqIG91dDogKHU2NClhMD1waHNpY2FsIGFkZHJlc3Mgb2YgYnVmZmVyIHBhc3NlZCBpbiBmcm9tIGNhbGxlci4KKwkgKiAgICAgICh1MTYpYTE9YWN0dWFsIGJ5dGVzIGZyb20gVklGLUNPTkZJRy1JTkZPIFRMViwgb3IKKwkgKiAgICAgICAgICAgICAgMCBpZiBubyBWSUYtQ09ORklHLUlORk8gVExWIHdhcyBldmVyIHJlY2VpdmVkLiAqLwogCUNNRF9DT05GSUdfSU5GT19HRVQgICAgID0gX0NNREMoX0NNRF9ESVJfUlcsIF9DTURfVlRZUEVfQUxMLCA0NCksCisKKwkvKiBpbml0X3Byb3ZfaW5mbzI6CisJICogVmFyaWFudCBvZiBDTURfSU5JVF9QUk9WX0lORk8sIHdoZXJlIGl0IHdpbGwgbm90IHRyeSB0byBlbmFibGUKKwkgKiB0aGUgdm5pYyB1bnRpbCBDTURfRU5BQkxFMiBpcyBpc3N1ZWQuCisJICogICAgICh1NjQpYTA9cGFkZHIgb2Ygdm5pY19kZXZjbWRfcHJvdmluZm8KKwkgKiAgICAgKHUzMilhMT1zaXplb2YgcHJvdmlzaW9uIGluZm8gKi8KKwlDTURfSU5JVF9QUk9WX0lORk8yICA9IF9DTURDKF9DTURfRElSX1dSSVRFLCBfQ01EX1ZUWVBFX0VORVQsIDQ3KSwKKworCS8qIGVuYWJsZTI6CisJICogICAgICAodTMyKWEwPTAgICAgICAgICAgICAgICAgICA9PT4gc3RhbmRieQorCSAqICAgICAgICAgICAgID1DTURfRU5BQkxFMl9BQ1RJVkUgPT0+IGFjdGl2ZQorCSAqLworCUNNRF9FTkFCTEUyID0gX0NNREMoX0NNRF9ESVJfV1JJVEUsIF9DTURfVlRZUEVfRU5FVCwgNDgpLAorCisJLyoKKwkgKiBjbWRfc3RhdHVzOgorCSAqICAgICBSZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIHNwZWNpZmllZCBjb21tYW5kCisJICogSW5wdXQ6CisJICogICAgIGEwID0gY29tbWFuZCBmb3Igd2hpY2ggc3RhdHVzIGlzIGJlaW5nIHF1ZXJpZWQuCisJICogICAgICAgICAgUG9zc2libGUgdmFsdWVzIGFyZToKKwkgKiAgICAgICAgICAgICAgQ01EX1NPRlRfUkVTRVQKKwkgKiAgICAgICAgICAgICAgQ01EX0hBTkdfUkVTRVQKKwkgKiAgICAgICAgICAgICAgQ01EX09QRU4KKwkgKiAgICAgICAgICAgICAgQ01EX0lOSVQKKwkgKiAgICAgICAgICAgICAgQ01EX0lOSVRfUFJPVl9JTkZPCisJICogICAgICAgICAgICAgIENNRF9ERUlOSVQKKwkgKiAgICAgICAgICAgICAgQ01EX0lOSVRfUFJPVl9JTkZPMgorCSAqICAgICAgICAgICAgICBDTURfRU5BQkxFMgorCSAqIE91dHB1dDoKKwkgKiAgICAgaWYgc3RhdHVzID09IFNUQVRfRVJST1IKKwkgKiAgICAgICAgYTAgPSBFUlJfRU5PVFNVUFBPUlRFRCAtIHN0YXR1cyBmb3IgY29tbWFuZCBpbiBhMCBpcworCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IHN1cHBvcnRlZAorCSAqICAgICBpZiBzdGF0dXMgPT0gU1RBVF9OT05FCisJICogICAgICAgIGEwID0gc3RhdHVzIG9mIHRoZSBkZXZjbWQgc3BlY2lmaWVkIGluIGEwIGFzIGZvbGxvd3MuCisJICogICAgICAgICAgICAgRVJSX1NVQ0NFU1MgICAtIGNvbW1hbmQgaW4gYTAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseQorCSAqICAgICAgICAgICAgIEVSUl9FSU5QUk9HUkVTUyAtIGNvbW1hbmQgaW4gYTAgaXMgc3RpbGwgaW4gcHJvZ3Jlc3MKKwkgKi8KKwlDTURfU1RBVFVTID0gX0NNREMoX0NNRF9ESVJfUlcsIF9DTURfVlRZUEVfQUxMLCA0OSksCiB9OwogCisvKiBDTURfRU5BQkxFMiBmbGFncyAqLworI2RlZmluZSBDTURfRU5BQkxFMl9BQ1RJVkUgIDB4MQorCiAvKiBmbGFncyBmb3IgQ01EX09QRU4gKi8KICNkZWZpbmUgQ01EX09QRU5GX09QUk9NCQkweDEJLyogb3BlbiBjb21pbmcgZnJvbSBvcHRpb24gcm9tICovCiAKQEAgLTMxNSw2ICszNjAsOCBAQAogCUVSUl9FVElNRURPVVQgPSA4LAogCUVSUl9FTElOS0RPV04gPSA5LAogCUVSUl9FTUFYUkVTID0gMTAsCisJRVJSX0VOT1RTVVBQT1JURUQgPSAxMSwKKwlFUlJfRUlOUFJPR1JFU1MgPSAxMiwKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfdmljLmMgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfdmljLmMKaW5kZXggNDcyNWI3OS4uMjRlZjhjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy92bmljX3ZpYy5jCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY192aWMuYwpAQCAtMjMsNyArMjMsOCBAQAogCiAjaW5jbHVkZSAidm5pY192aWMuaCIKIAotc3RydWN0IHZpY19wcm92aW5mbyAqdmljX3Byb3ZpbmZvX2FsbG9jKGdmcF90IGZsYWdzLCB1OCAqb3VpLCB1OCB0eXBlKQorc3RydWN0IHZpY19wcm92aW5mbyAqdmljX3Byb3ZpbmZvX2FsbG9jKGdmcF90IGZsYWdzLCBjb25zdCB1OCAqb3VpLAorCWNvbnN0IHU4IHR5cGUpCiB7CiAJc3RydWN0IHZpY19wcm92aW5mbyAqdnA7CiAKQEAgLTQ3LDcgKzQ4LDcgQEAKIH0KIAogaW50IHZpY19wcm92aW5mb19hZGRfdGx2KHN0cnVjdCB2aWNfcHJvdmluZm8gKnZwLCB1MTYgdHlwZSwgdTE2IGxlbmd0aCwKLQl2b2lkICp2YWx1ZSkKKwljb25zdCB2b2lkICp2YWx1ZSkKIHsKIAlzdHJ1Y3QgdmljX3Byb3ZpbmZvX3RsdiAqdGx2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfdmljLmggYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfdmljLmgKaW5kZXggZjcwMGY1ZC4uOWVmODFmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy92bmljX3ZpYy5oCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY192aWMuaApAQCAtNDcsNiArNDcsNyBAQAogCVZJQ19HRU5FUklDX1BST1ZfT1NfVFlQRV9FU1ggPSAxLAogCVZJQ19HRU5FUklDX1BST1ZfT1NfVFlQRV9MSU5VWCA9IDIsCiAJVklDX0dFTkVSSUNfUFJPVl9PU19UWVBFX1dJTkRPV1MgPSAzLAorCVZJQ19HRU5FUklDX1BST1ZfT1NfVFlQRV9TT0xBUklTID0gNCwKIH07CiAKIHN0cnVjdCB2aWNfcHJvdmluZm8gewpAQCAtNjEsMTQgKzYyLDIyIEBACiAJfSB0bHZbMF07CiB9IF9fcGFja2VkOwogCisjZGVmaW5lIFZJQ19QUk9WSU5GT19BRERfVExWKHZwLCB0bHZ0eXBlLCB0bHZsZW4sIGRhdGEpIFwKKwlkbyB7IFwKKwkJZXJyID0gdmljX3Byb3ZpbmZvX2FkZF90bHYodnAsIHRsdnR5cGUsIHRsdmxlbiwgZGF0YSk7IFwKKwkJaWYgKGVycikgXAorCQkJZ290byBhZGRfdGx2X2ZhaWx1cmU7IFwKKwl9IHdoaWxlICgwKQorCiAjZGVmaW5lIFZJQ19QUk9WSU5GT19NQVhfREFUQQkJMTM4NQogI2RlZmluZSBWSUNfUFJPVklORk9fTUFYX1RMVl9EQVRBIChWSUNfUFJPVklORk9fTUFYX0RBVEEgLSBcCiAJc2l6ZW9mKHN0cnVjdCB2aWNfcHJvdmluZm8pKQogCi1zdHJ1Y3QgdmljX3Byb3ZpbmZvICp2aWNfcHJvdmluZm9fYWxsb2MoZ2ZwX3QgZmxhZ3MsIHU4ICpvdWksIHU4IHR5cGUpOworc3RydWN0IHZpY19wcm92aW5mbyAqdmljX3Byb3ZpbmZvX2FsbG9jKGdmcF90IGZsYWdzLCBjb25zdCB1OCAqb3VpLAorCWNvbnN0IHU4IHR5cGUpOwogdm9pZCB2aWNfcHJvdmluZm9fZnJlZShzdHJ1Y3QgdmljX3Byb3ZpbmZvICp2cCk7CiBpbnQgdmljX3Byb3ZpbmZvX2FkZF90bHYoc3RydWN0IHZpY19wcm92aW5mbyAqdnAsIHUxNiB0eXBlLCB1MTYgbGVuZ3RoLAotCXZvaWQgKnZhbHVlKTsKKwljb25zdCB2b2lkICp2YWx1ZSk7CiBzaXplX3QgdmljX3Byb3ZpbmZvX3NpemUoc3RydWN0IHZpY19wcm92aW5mbyAqdnApOwogCiAjZW5kaWYJLyogX1ZOSUNfVklDX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ld3JrMy5jIGIvZHJpdmVycy9uZXQvZXdyazMuYwppbmRleCAzODBkMDYxLi5iNWY2MTczIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ld3JrMy5jCisrKyBiL2RyaXZlcnMvbmV0L2V3cmszLmMKQEAgLTE1NDUsNyArMTU0NSw3IEBACiAJfQogCiAJZWNtZC0+c3VwcG9ydGVkIHw9IFNVUFBPUlRFRF8xMGJhc2VUX0hhbGY7Ci0JZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDsKKwlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgU1BFRURfMTApOwogCWVjbWQtPmR1cGxleCA9IERVUExFWF9IQUxGOwogCXJldHVybiAwOwogfQpAQCAtMTYwNCw1NSArMTYwNCw0NyBAQAogCXJldHVybiAhKGNtciAmIENNUl9MSU5LKTsKIH0KIAotc3RhdGljIGludCBld3JrM19waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQorc3RhdGljIGludCBld3JrM19zZXRfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICBlbnVtIGV0aHRvb2xfcGh5c19pZF9zdGF0ZSBzdGF0ZSkKIHsKIAlzdHJ1Y3QgZXdyazNfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgaW9iYXNlID0gZGV2LT5iYXNlX2FkZHI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1OCBjcjsKLQlpbnQgY291bnQ7CiAKLQkvKiBUb2dnbGUgTEVEIDR4IHBlciBzZWNvbmQgKi8KLQljb3VudCA9IGRhdGEgPDwgMjsKKwlzcGluX2xvY2tfaXJxKCZscC0+aHdfbG9jayk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmh3X2xvY2ssIGZsYWdzKTsKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBFVEhUT09MX0lEX0FDVElWRToKKwkJLyogUHJldmVudCBJU1IgZnJvbSB0d2lkZGxpbmcgdGhlIExFRCAqLworCQlscC0+bGVkX21hc2sgPSAwOworCQlzcGluX3VubG9ja19pcnEoJmxwLT5od19sb2NrKTsKKwkJcmV0dXJuIDI7CS8qIGN5Y2xlIG9uL29mZiB0d2ljZSBwZXIgc2Vjb25kICovCiAKLQkvKiBCYWlsIGlmIGEgUEhZU19JRCBpcyBhbHJlYWR5IGluIHByb2dyZXNzICovCi0JaWYgKGxwLT5sZWRfbWFzayA9PSAwKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5od19sb2NrLCBmbGFncyk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JLyogUHJldmVudCBJU1IgZnJvbSB0d2lkZGxpbmcgdGhlIExFRCAqLwotCWxwLT5sZWRfbWFzayA9IDA7Ci0KLQl3aGlsZSAoY291bnQtLSkgewotCQkvKiBUb2dnbGUgdGhlIExFRCAqLworCWNhc2UgRVRIVE9PTF9JRF9PTjoKIAkJY3IgPSBpbmIoRVdSSzNfQ1IpOwotCQlvdXRiKGNyIF4gQ1JfTEVELCBFV1JLM19DUik7CisJCW91dGIoY3IgfCBDUl9MRUQsIEVXUkszX0NSKTsKKwkJYnJlYWs7CiAKLQkJLyogV2FpdCBhIGxpdHRsZSB3aGlsZSAqLwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+aHdfbG9jaywgZmxhZ3MpOwotCQltc2xlZXAoMjUwKTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5od19sb2NrLCBmbGFncyk7CisJY2FzZSBFVEhUT09MX0lEX09GRjoKKwkJY3IgPSBpbmIoRVdSSzNfQ1IpOworCQlvdXRiKGNyICYgfkNSX0xFRCwgRVdSSzNfQ1IpOworCQlicmVhazsKIAotCQkvKiBFeGl0IGlmIHdlIGdvdCBhIHNpZ25hbCAqLwotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCQlicmVhazsKKwljYXNlIEVUSFRPT0xfSURfSU5BQ1RJVkU6CisJCWxwLT5sZWRfbWFzayA9IENSX0xFRDsKKwkJY3IgPSBpbmIoRVdSSzNfQ1IpOworCQlvdXRiKGNyICYgfkNSX0xFRCwgRVdSSzNfQ1IpOwogCX0KKwlzcGluX3VubG9ja19pcnEoJmxwLT5od19sb2NrKTsKIAotCWxwLT5sZWRfbWFzayA9IENSX0xFRDsKLQljciA9IGluYihFV1JLM19DUik7Ci0Jb3V0YihjciAmIH5DUl9MRUQsIEVXUkszX0NSKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+aHdfbG9jaywgZmxhZ3MpOwotCXJldHVybiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSA/IC1FUkVTVEFSVFNZUyA6IDA7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZXRodG9vbF9vcHNfMjAzID0gewogCS5nZXRfZHJ2aW5mbyA9IGV3cmszX2dldF9kcnZpbmZvLAogCS5nZXRfc2V0dGluZ3MgPSBld3JrM19nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncyA9IGV3cmszX3NldF9zZXR0aW5ncywKLQkucGh5c19pZCA9IGV3cmszX3BoeXNfaWQsCisJLnNldF9waHlzX2lkID0gZXdyazNfc2V0X3BoeXNfaWQsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGV0aHRvb2xfb3BzID0gewpAQCAtMTY2MCw3ICsxNjUyLDcgQEAKIAkuZ2V0X3NldHRpbmdzID0gZXdyazNfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MgPSBld3JrM19zZXRfc2V0dGluZ3MsCiAJLmdldF9saW5rID0gZXdyazNfZ2V0X2xpbmssCi0JLnBoeXNfaWQgPSBld3JrM19waHlzX2lkLAorCS5zZXRfcGh5c19pZCA9IGV3cmszX3NldF9waHlzX2lkLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jIGIvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKaW5kZXggZDVhYjRkYS4uNTM3YjY5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKQEAgLTY0LDYgKzY0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlICA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KQEAgLTc3NCw3ICs3NzUsNiBAQAogCXUzMiBkcml2ZXJfZGF0YTsKIAl1MzIgZGV2aWNlX2lkOwogCXUzMiByZWdpc3Rlcl9zaXplOwotCWludCByeF9jc3VtOwogCXUzMiBtYWNfaW5fdXNlOwogCWludCBtZ210X3ZlcnNpb247CiAJaW50IG1nbXRfc2VtYTsKQEAgLTM5NTYsNiArMzk1Niw3IEBACiBzdGF0aWMgaW50IG52X2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmVjbWQpCiB7CiAJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgc3BlZWQ7CiAJaW50IGFkdjsKIAogCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKQEAgLTM5NzUsMjMgKzM5NzYsMjYgQEAKIAlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYpKSB7CiAJCXN3aXRjaCAobnAtPmxpbmtzcGVlZCAmIChOVlJFR19MSU5LU1BFRURfTUFTSykpIHsKIAkJY2FzZSBOVlJFR19MSU5LU1BFRURfMTA6Ci0JCQllY21kLT5zcGVlZCA9IFNQRUVEXzEwOworCQkJc3BlZWQgPSBTUEVFRF8xMDsKIAkJCWJyZWFrOwogCQljYXNlIE5WUkVHX0xJTktTUEVFRF8xMDA6Ci0JCQllY21kLT5zcGVlZCA9IFNQRUVEXzEwMDsKKwkJCXNwZWVkID0gU1BFRURfMTAwOwogCQkJYnJlYWs7CiAJCWNhc2UgTlZSRUdfTElOS1NQRUVEXzEwMDA6Ci0JCQllY21kLT5zcGVlZCA9IFNQRUVEXzEwMDA7CisJCQlzcGVlZCA9IFNQRUVEXzEwMDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNwZWVkID0gLTE7CiAJCQlicmVhazsKIAkJfQogCQllY21kLT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKIAkJaWYgKG5wLT5kdXBsZXgpCiAJCQllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKIAl9IGVsc2UgewotCQllY21kLT5zcGVlZCA9IC0xOworCQlzcGVlZCA9IC0xOwogCQllY21kLT5kdXBsZXggPSAtMTsKIAl9Ci0KKwlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgc3BlZWQpOwogCWVjbWQtPmF1dG9uZWcgPSBucC0+YXV0b25lZzsKIAogCWVjbWQtPmFkdmVydGlzaW5nID0gQURWRVJUSVNFRF9NSUk7CkBAIC00MDMwLDYgKzQwMzQsNyBAQAogc3RhdGljIGludCBudl9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQogewogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIHNwZWVkID0gZXRodG9vbF9jbWRfc3BlZWQoZWNtZCk7CiAKIAlpZiAoZWNtZC0+cG9ydCAhPSBQT1JUX01JSSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00MDU1LDcgKzQwNjAsNyBAQAogCQkvKiBOb3RlOiBhdXRvbmVnb3RpYXRpb24gZGlzYWJsZSwgc3BlZWQgMTAwMCBpbnRlbnRpb25hbGx5CiAJCSAqIGZvcmJpZGRlbiAtIG5vIG9uZSBzaG91bGQgbmVlZCB0aGF0LiAqLwogCi0JCWlmIChlY21kLT5zcGVlZCAhPSBTUEVFRF8xMCAmJiBlY21kLT5zcGVlZCAhPSBTUEVFRF8xMDApCisJCWlmIChzcGVlZCAhPSBTUEVFRF8xMCAmJiBzcGVlZCAhPSBTUEVFRF8xMDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKGVjbWQtPmR1cGxleCAhPSBEVVBMRVhfSEFMRiAmJiBlY21kLT5kdXBsZXggIT0gRFVQTEVYX0ZVTEwpCiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQxMzksMTMgKzQxNDQsMTMgQEAKIAogCQlhZHYgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0FEVkVSVElTRSwgTUlJX1JFQUQpOwogCQlhZHYgJj0gfihBRFZFUlRJU0VfQUxMIHwgQURWRVJUSVNFXzEwMEJBU0U0IHwgQURWRVJUSVNFX1BBVVNFX0NBUCB8IEFEVkVSVElTRV9QQVVTRV9BU1lNKTsKLQkJaWYgKGVjbWQtPnNwZWVkID09IFNQRUVEXzEwICYmIGVjbWQtPmR1cGxleCA9PSBEVVBMRVhfSEFMRikKKwkJaWYgKHNwZWVkID09IFNQRUVEXzEwICYmIGVjbWQtPmR1cGxleCA9PSBEVVBMRVhfSEFMRikKIAkJCWFkdiB8PSBBRFZFUlRJU0VfMTBIQUxGOwotCQlpZiAoZWNtZC0+c3BlZWQgPT0gU1BFRURfMTAgJiYgZWNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKQorCQlpZiAoc3BlZWQgPT0gU1BFRURfMTAgJiYgZWNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKQogCQkJYWR2IHw9IEFEVkVSVElTRV8xMEZVTEw7Ci0JCWlmIChlY21kLT5zcGVlZCA9PSBTUEVFRF8xMDAgJiYgZWNtZC0+ZHVwbGV4ID09IERVUExFWF9IQUxGKQorCQlpZiAoc3BlZWQgPT0gU1BFRURfMTAwICYmIGVjbWQtPmR1cGxleCA9PSBEVVBMRVhfSEFMRikKIAkJCWFkdiB8PSBBRFZFUlRJU0VfMTAwSEFMRjsKLQkJaWYgKGVjbWQtPnNwZWVkID09IFNQRUVEXzEwMCAmJiBlY21kLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCisJCWlmIChzcGVlZCA9PSBTUEVFRF8xMDAgJiYgZWNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKQogCQkJYWR2IHw9IEFEVkVSVElTRV8xMDBGVUxMOwogCQlucC0+cGF1c2VfZmxhZ3MgJj0gfihOVl9QQVVTRUZSQU1FX0FVVE9ORUd8TlZfUEFVU0VGUkFNRV9SWF9FTkFCTEV8TlZfUEFVU0VGUkFNRV9UWF9FTkFCTEUpOwogCQlpZiAobnAtPnBhdXNlX2ZsYWdzICYgTlZfUEFVU0VGUkFNRV9SWF9SRVEpIHsvKiBmb3Igcnggd2Ugc2V0IGJvdGggYWR2ZXJ0aXNlbWVudHMgYnV0IGRpc2FibGUgdHggcGF1c2UgKi8KQEAgLTQyNjQsMTYgKzQyNjksNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbnZfc2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgdmFsdWUpCi17Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmICgobnAtPmRyaXZlcl9kYXRhICYgREVWX0hBU19DSEVDS1NVTSkpCi0JCXJldHVybiBldGh0b29sX29wX3NldF90c28oZGV2LCB2YWx1ZSk7Ci0JZWxzZQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci19Ci0KIHN0YXRpYyB2b2lkIG52X2dldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtKiByaW5nKQogewogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CkBAIC00NDgwLDU4ICs0NDc1LDM2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1MzIgbnZfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyB1MzIgbnZfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcykKIHsKLQlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXJldHVybiBucC0+cnhfY3N1bSAhPSAwOworCS8qIHZsYW4gaXMgZGVwZW5kZW50IG9uIHJ4IGNoZWNrc3VtIG9mZmxvYWQgKi8KKwlpZiAoZmVhdHVyZXMgJiAoTkVUSUZfRl9IV19WTEFOX1RYfE5FVElGX0ZfSFdfVkxBTl9SWCkpCisJCWZlYXR1cmVzIHw9IE5FVElGX0ZfUlhDU1VNOworCisJcmV0dXJuIGZlYXR1cmVzOwogfQogCi1zdGF0aWMgaW50IG52X3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQorc3RhdGljIGludCBudl9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZlYXR1cmVzKQogewogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKLQlpbnQgcmV0Y29kZSA9IDA7CisJdTMyIGNoYW5nZWQgPSBkZXYtPmZlYXR1cmVzIF4gZmVhdHVyZXM7CiAKLQlpZiAobnAtPmRyaXZlcl9kYXRhICYgREVWX0hBU19DSEVDS1NVTSkgewotCQlpZiAoZGF0YSkgewotCQkJbnAtPnJ4X2NzdW0gPSAxOworCWlmIChjaGFuZ2VkICYgTkVUSUZfRl9SWENTVU0pIHsKKwkJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOworCisJCWlmIChmZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKQogCQkJbnAtPnR4cnhjdGxfYml0cyB8PSBOVlJFR19UWFJYQ1RMX1JYQ0hFQ0s7Ci0JCX0gZWxzZSB7Ci0JCQlucC0+cnhfY3N1bSA9IDA7Ci0JCQkvKiB2bGFuIGlzIGRlcGVuZGVudCBvbiByeCBjaGVja3N1bSBvZmZsb2FkICovCi0JCQlpZiAoIShucC0+dmxhbmN0bF9iaXRzICYgTlZSRUdfVkxBTkNPTlRST0xfRU5BQkxFKSkKLQkJCQlucC0+dHhyeGN0bF9iaXRzICY9IH5OVlJFR19UWFJYQ1RMX1JYQ0hFQ0s7Ci0JCX0KLQkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQkJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOworCQllbHNlCisJCQlucC0+dHhyeGN0bF9iaXRzICY9IH5OVlJFR19UWFJYQ1RMX1JYQ0hFQ0s7CisKKwkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJCXdyaXRlbChucC0+dHhyeGN0bF9iaXRzLCBiYXNlICsgTnZSZWdUeFJ4Q29udHJvbCk7Ci0JCQlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKLQkJfQotCX0gZWxzZSB7Ci0JCXJldHVybiAtRUlOVkFMOworCisJCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwogCX0KIAotCXJldHVybiByZXRjb2RlOwotfQotCi1zdGF0aWMgaW50IG52X3NldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAobnAtPmRyaXZlcl9kYXRhICYgREVWX0hBU19DSEVDS1NVTSkKLQkJcmV0dXJuIGV0aHRvb2xfb3Bfc2V0X3R4X2NzdW0oZGV2LCBkYXRhKTsKLQllbHNlCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLX0KLQotc3RhdGljIGludCBudl9zZXRfc2coc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmIChucC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX0NIRUNLU1VNKQotCQlyZXR1cm4gZXRodG9vbF9vcF9zZXRfc2coZGV2LCBkYXRhKTsKLQllbHNlCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBudl9nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3NldCkKQEAgLTQ4OTYsMTUgKzQ4NjksMTAgQEAKIAkuZ2V0X3JlZ3NfbGVuID0gbnZfZ2V0X3JlZ3NfbGVuLAogCS5nZXRfcmVncyA9IG52X2dldF9yZWdzLAogCS5ud2F5X3Jlc2V0ID0gbnZfbndheV9yZXNldCwKLQkuc2V0X3RzbyA9IG52X3NldF90c28sCiAJLmdldF9yaW5ncGFyYW0gPSBudl9nZXRfcmluZ3BhcmFtLAogCS5zZXRfcmluZ3BhcmFtID0gbnZfc2V0X3JpbmdwYXJhbSwKIAkuZ2V0X3BhdXNlcGFyYW0gPSBudl9nZXRfcGF1c2VwYXJhbSwKIAkuc2V0X3BhdXNlcGFyYW0gPSBudl9zZXRfcGF1c2VwYXJhbSwKLQkuZ2V0X3J4X2NzdW0gPSBudl9nZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0gPSBudl9zZXRfcnhfY3N1bSwKLQkuc2V0X3R4X2NzdW0gPSBudl9zZXRfdHhfY3N1bSwKLQkuc2V0X3NnID0gbnZfc2V0X3NnLAogCS5nZXRfc3RyaW5ncyA9IG52X2dldF9zdHJpbmdzLAogCS5nZXRfZXRodG9vbF9zdGF0cyA9IG52X2dldF9ldGh0b29sX3N0YXRzLAogCS5nZXRfc3NldF9jb3VudCA9IG52X2dldF9zc2V0X2NvdW50LApAQCAtNTIzNSw2ICs1MjAzLDggQEAKIAkubmRvX3N0YXJ0X3htaXQJCT0gbnZfc3RhcnRfeG1pdCwKIAkubmRvX3R4X3RpbWVvdXQJCT0gbnZfdHhfdGltZW91dCwKIAkubmRvX2NoYW5nZV9tdHUJCT0gbnZfY2hhbmdlX210dSwKKwkubmRvX2ZpeF9mZWF0dXJlcwk9IG52X2ZpeF9mZWF0dXJlcywKKwkubmRvX3NldF9mZWF0dXJlcwk9IG52X3NldF9mZWF0dXJlcywKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKIAkubmRvX3NldF9tYWNfYWRkcmVzcwk9IG52X3NldF9tYWNfYWRkcmVzcywKIAkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IG52X3NldF9tdWx0aWNhc3QsCkBAIC01MjUxLDYgKzUyMjEsOCBAQAogCS5uZG9fc3RhcnRfeG1pdAkJPSBudl9zdGFydF94bWl0X29wdGltaXplZCwKIAkubmRvX3R4X3RpbWVvdXQJCT0gbnZfdHhfdGltZW91dCwKIAkubmRvX2NoYW5nZV9tdHUJCT0gbnZfY2hhbmdlX210dSwKKwkubmRvX2ZpeF9mZWF0dXJlcwk9IG52X2ZpeF9mZWF0dXJlcywKKwkubmRvX3NldF9mZWF0dXJlcwk9IG52X3NldF9mZWF0dXJlcywKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKIAkubmRvX3NldF9tYWNfYWRkcmVzcwk9IG52X3NldF9tYWNfYWRkcmVzcywKIAkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IG52X3NldF9tdWx0aWNhc3QsCkBAIC01MzY0LDExICs1MzM2LDEwIEBACiAJCW5wLT5wa3RfbGltaXQgPSBOVl9QS1RMSU1JVF8yOwogCiAJaWYgKGlkLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfQ0hFQ0tTVU0pIHsKLQkJbnAtPnJ4X2NzdW0gPSAxOwogCQlucC0+dHhyeGN0bF9iaXRzIHw9IE5WUkVHX1RYUlhDVExfUlhDSEVDSzsKLQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1NHOwotCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwotCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfR1JPOworCQlkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfU0cgfAorCQkJTkVUSUZfRl9UU08gfCBORVRJRl9GX1JYQ1NVTTsKKwkJZGV2LT5mZWF0dXJlcyB8PSBkZXYtPmh3X2ZlYXR1cmVzOwogCX0KIAogCW5wLT52bGFuY3RsX2JpdHMgPSAwOwpAQCAtNTM4NCw3ICs1MzU1LDYgQEAKIAkJbnAtPnBhdXNlX2ZsYWdzIHw9IE5WX1BBVVNFRlJBTUVfVFhfQ0FQQUJMRSB8IE5WX1BBVVNFRlJBTUVfVFhfUkVROwogCX0KIAotCiAJZXJyID0gLUVOT01FTTsKIAlucC0+YmFzZSA9IGlvcmVtYXAoYWRkciwgbnAtPnJlZ2lzdGVyX3NpemUpOwogCWlmICghbnAtPmJhc2UpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYwppbmRleCA1MTMxZTYxLi4yMWFiYjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMKQEAgLTk1Niw4ICs5NTYsNiBAQAogCS5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCiAJLmdldF9tc2dsZXZlbCA9IGZzX2dldF9tc2dsZXZlbCwKIAkuc2V0X21zZ2xldmVsID0gZnNfc2V0X21zZ2xldmVsLAotCS5zZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3Bfc2V0X3R4X2NzdW0sCS8qIGxvY2FsISAqLwotCS5zZXRfc2cgPSBldGh0b29sX29wX3NldF9zZywKIAkuZ2V0X3JlZ3MgPSBmc19nZXRfcmVncywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuYyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuYwppbmRleCAyYTBhZDlhLi5mZjYwYjIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyLmMKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5jCkBAIC0zNjUsNyArMzY1LDcgQEAKIAkJZ2Zhcl93cml0ZSgmcmVncy0+cmlyMCwgREVGQVVMVF9SSVIwKTsKIAl9CiAKLQlpZiAocHJpdi0+cnhfY3N1bV9lbmFibGUpCisJaWYgKG5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pCiAJCXJjdHJsIHw9IFJDVFJMX0NIRUNLU1VNTUlORzsKIAogCWlmIChwcml2LT5leHRlbmRlZF9oYXNoKSB7CkBAIC00NjMsNiArNDYzLDcgQEAKIAkubmRvX3N0YXJ0X3htaXQgPSBnZmFyX3N0YXJ0X3htaXQsCiAJLm5kb19zdG9wID0gZ2Zhcl9jbG9zZSwKIAkubmRvX2NoYW5nZV9tdHUgPSBnZmFyX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfZmVhdHVyZXMgPSBnZmFyX3NldF9mZWF0dXJlcywKIAkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGdmYXJfc2V0X211bHRpLAogCS5uZG9fdHhfdGltZW91dCA9IGdmYXJfdGltZW91dCwKIAkubmRvX2RvX2lvY3RsID0gZ2Zhcl9pb2N0bCwKQEAgLTUxMyw3ICs1MTQsNyBAQAogLyogUmV0dXJucyAxIGlmIGluY29taW5nIGZyYW1lcyB1c2UgYW4gRkNCICovCiBzdGF0aWMgaW5saW5lIGludCBnZmFyX3VzZXNfZmNiKHN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYpCiB7Ci0JcmV0dXJuIHByaXYtPnZsZ3JwIHx8IHByaXYtPnJ4X2NzdW1fZW5hYmxlIHx8CisJcmV0dXJuIHByaXYtPnZsZ3JwIHx8IChwcml2LT5uZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSB8fAogCQkocHJpdi0+ZGV2aWNlX2ZsYWdzICYgRlNMX0dJQU5GQVJfREVWX0hBU19USU1FUik7CiB9CiAKQEAgLTEwMzAsMTAgKzEwMzEsMTEgQEAKIAkJbmV0aWZfbmFwaV9hZGQoZGV2LCAmcHJpdi0+Z2ZhcmdycFtpXS5uYXBpLCBnZmFyX3BvbGwsIEdGQVJfREVWX1dFSUdIVCk7CiAKIAlpZiAocHJpdi0+ZGV2aWNlX2ZsYWdzICYgRlNMX0dJQU5GQVJfREVWX0hBU19DU1VNKSB7Ci0JCXByaXYtPnJ4X2NzdW1fZW5hYmxlID0gMTsKLQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1NHIHwgTkVUSUZfRl9ISUdIRE1BOwotCX0gZWxzZQotCQlwcml2LT5yeF9jc3VtX2VuYWJsZSA9IDA7CisJCWRldi0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1NHIHwKKwkJCU5FVElGX0ZfUlhDU1VNOworCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfU0cgfAorCQkJTkVUSUZfRl9SWENTVU0gfCBORVRJRl9GX0hJR0hETUE7CisJfQogCiAJcHJpdi0+dmxncnAgPSBOVUxMOwogCkBAIC0yNjk3LDcgKzI2OTksNyBAQAogCWlmIChwcml2LT5wYWRkaW5nKQogCQlza2JfcHVsbChza2IsIHByaXYtPnBhZGRpbmcpOwogCi0JaWYgKHByaXYtPnJ4X2NzdW1fZW5hYmxlKQorCWlmIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pCiAJCWdmYXJfcnhfY2hlY2tzdW0oc2tiLCBmY2IpOwogCiAJLyogVGVsbCB0aGUgc2tiIHdoYXQga2luZCBvZiBwYWNrZXQgdGhpcyBpcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhci5oIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5oCmluZGV4IGIyZmU3ZWQuLmZjODZmNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuaAorKysgYi9kcml2ZXJzL25ldC9naWFuZmFyLmgKQEAgLTM4MiwyMyArMzgyLDYgQEAKICNkZWZpbmUgQkRfTEZMQUcoZmxhZ3MpICgoZmxhZ3MpIDw8IDE2KQogI2RlZmluZSBCRF9MRU5HVEhfTUFTSwkJMHgwMDAwZmZmZgogCi0jZGVmaW5lIENMQVNTX0NPREVfVU5SRUNPRwkJMHgwMAotI2RlZmluZSBDTEFTU19DT0RFX0RVTU1ZMQkJMHgwMQotI2RlZmluZSBDTEFTU19DT0RFX0VUSEVSVFlQRTEJCTB4MDIKLSNkZWZpbmUgQ0xBU1NfQ09ERV9FVEhFUlRZUEUyCQkweDAzCi0jZGVmaW5lIENMQVNTX0NPREVfVVNFUl9QUk9HMQkJMHgwNAotI2RlZmluZSBDTEFTU19DT0RFX1VTRVJfUFJPRzIJCTB4MDUKLSNkZWZpbmUgQ0xBU1NfQ09ERV9VU0VSX1BST0czCQkweDA2Ci0jZGVmaW5lIENMQVNTX0NPREVfVVNFUl9QUk9HNAkJMHgwNwotI2RlZmluZSBDTEFTU19DT0RFX1RDUF9JUFY0CQkweDA4Ci0jZGVmaW5lIENMQVNTX0NPREVfVURQX0lQVjQJCTB4MDkKLSNkZWZpbmUgQ0xBU1NfQ09ERV9BSF9FU1BfSVBWNAkJMHgwYQotI2RlZmluZSBDTEFTU19DT0RFX1NDVFBfSVBWNAkJMHgwYgotI2RlZmluZSBDTEFTU19DT0RFX1RDUF9JUFY2CQkweDBjCi0jZGVmaW5lIENMQVNTX0NPREVfVURQX0lQVjYJCTB4MGQKLSNkZWZpbmUgQ0xBU1NfQ09ERV9BSF9FU1BfSVBWNgkJMHgwZQotI2RlZmluZSBDTEFTU19DT0RFX1NDVFBfSVBWNgkJMHgwZgotCiAjZGVmaW5lIEZQUl9GSUxFUl9NQVNLCTB4RkZGRkZGRkYKICNkZWZpbmUgTUFYX0ZJTEVSX0lEWAkweEZGCiAKQEAgLTExMDAsNyArMTA4Myw3IEBACiAJc3RydWN0IGRldmljZV9ub2RlICpwaHlfbm9kZTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnRiaV9ub2RlOwogCXUzMiBkZXZpY2VfZmxhZ3M7Ci0JdW5zaWduZWQgY2hhciByeF9jc3VtX2VuYWJsZToxLAorCXVuc2lnbmVkIGNoYXIKIAkJZXh0ZW5kZWRfaGFzaDoxLAogCQliZF9zdGFzaF9lbjoxLAogCQlyeF9maWxlcl9lbmFibGU6MSwKQEAgLTExNzAsNiArMTE1Myw3IEBACiBleHRlcm4gdm9pZCBnZmFyX2NvbmZpZ3VyZV9jb2FsZXNjaW5nKHN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYsCiAJCXVuc2lnbmVkIGxvbmcgdHhfbWFzaywgdW5zaWduZWQgbG9uZyByeF9tYXNrKTsKIHZvaWQgZ2Zhcl9pbml0X3N5c2ZzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworaW50IGdmYXJfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcyk7CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZ2Zhcl9ldGh0b29sX29wczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhcl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYwppbmRleCAzYmM4ZTI3Li40OTNkNzQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYwpAQCAtNTE3LDE1ICs1MTcsMTUgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGdmYXJfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdWludDMyX3QgZGF0YSkKK2ludCBnZmFyX3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmVhdHVyZXMpCiB7CiAJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyID0gMCwgaSA9IDA7CisJdTMyIGNoYW5nZWQgPSBkZXYtPmZlYXR1cmVzIF4gZmVhdHVyZXM7CiAKLQlpZiAoIShwcml2LT5kZXZpY2VfZmxhZ3MgJiBGU0xfR0lBTkZBUl9ERVZfSEFTX0NTVU0pKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KKwlpZiAoIShjaGFuZ2VkICYgTkVUSUZfRl9SWENTVU0pKQorCQlyZXR1cm4gMDsKIAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKSB7CiAJCS8qIEhhbHQgVFggYW5kIFJYLCBhbmQgcHJvY2VzcyB0aGUgZnJhbWVzIHdoaWNoCkBAIC01NDYsNTggKzU0NiwxNSBAQAogCiAJCS8qIE5vdyB3ZSB0YWtlIGRvd24gdGhlIHJpbmdzIHRvIHJlYnVpbGQgdGhlbSAqLwogCQlzdG9wX2dmYXIoZGV2KTsKLQl9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+YmZsb2NrLCBmbGFncyk7Ci0JcHJpdi0+cnhfY3N1bV9lbmFibGUgPSBkYXRhOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmJmbG9jaywgZmxhZ3MpOworCQlkZXYtPmZlYXR1cmVzID0gZmVhdHVyZXM7CiAKLQlpZiAoZGV2LT5mbGFncyAmIElGRl9VUCkgewogCQllcnIgPSBzdGFydHVwX2dmYXIoZGV2KTsKIAkJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKGRldik7CiAJfQogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB1aW50MzJfdCBnZmFyX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoIShwcml2LT5kZXZpY2VfZmxhZ3MgJiBGU0xfR0lBTkZBUl9ERVZfSEFTX0NTVU0pKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBwcml2LT5yeF9jc3VtX2VuYWJsZTsKLX0KLQotc3RhdGljIGludCBnZmFyX3NldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVpbnQzMl90IGRhdGEpCi17Ci0Jc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoIShwcml2LT5kZXZpY2VfZmxhZ3MgJiBGU0xfR0lBTkZBUl9ERVZfSEFTX0NTVU0pKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQluZXRpZl90eF9sb2NrX2JoKGRldik7Ci0KLQlpZiAoZGF0YSkKLQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU07Ci0JZWxzZQotCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0lQX0NTVU07Ci0KLQluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdWludDMyX3QgZ2Zhcl9nZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKCEocHJpdi0+ZGV2aWNlX2ZsYWdzICYgRlNMX0dJQU5GQVJfREVWX0hBU19DU1VNKSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0lQX0NTVU0pICE9IDA7Ci19Ci0KIHN0YXRpYyB1aW50MzJfdCBnZmFyX2dldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNjQ1LDQyICs2MDIsNiBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgZ2Zhcl9ldGhmbG93X3RvX2NsYXNzKGludCBmbG93X3R5cGUsIHU2NCAqY2xhc3MpCi17Ci0Jc3dpdGNoIChmbG93X3R5cGUpIHsKLQljYXNlIFRDUF9WNF9GTE9XOgotCQkqY2xhc3MgPSBDTEFTU19DT0RFX1RDUF9JUFY0OwotCQlicmVhazsKLQljYXNlIFVEUF9WNF9GTE9XOgotCQkqY2xhc3MgPSBDTEFTU19DT0RFX1VEUF9JUFY0OwotCQlicmVhazsKLQljYXNlIEFIX1Y0X0ZMT1c6Ci0JY2FzZSBFU1BfVjRfRkxPVzoKLQkJKmNsYXNzID0gQ0xBU1NfQ09ERV9BSF9FU1BfSVBWNDsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1Y0X0ZMT1c6Ci0JCSpjbGFzcyA9IENMQVNTX0NPREVfU0NUUF9JUFY0OwotCQlicmVhazsKLQljYXNlIFRDUF9WNl9GTE9XOgotCQkqY2xhc3MgPSBDTEFTU19DT0RFX1RDUF9JUFY2OwotCQlicmVhazsKLQljYXNlIFVEUF9WNl9GTE9XOgotCQkqY2xhc3MgPSBDTEFTU19DT0RFX1VEUF9JUFY2OwotCQlicmVhazsKLQljYXNlIEFIX1Y2X0ZMT1c6Ci0JY2FzZSBFU1BfVjZfRkxPVzoKLQkJKmNsYXNzID0gQ0xBU1NfQ09ERV9BSF9FU1BfSVBWNjsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1Y2X0ZMT1c6Ci0JCSpjbGFzcyA9IENMQVNTX0NPREVfU0NUUF9JUFY2OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLQogc3RhdGljIHZvaWQgZXRoZmxvd190b19maWxlcl9ydWxlcyAoc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiwgdTY0IGV0aGZsb3cpCiB7CiAJdTMyIGZjciA9IDB4MCwgZnByID0gRlBSX0ZJTEVSX01BU0s7CkBAIC03NzgsMTEgKzY5OSw2IEBACiAJY2FzZSBVRFBfVjZfRkxPVzoKIAkJY21wX3JxZnByID0gUlFGUFJfSVBWNiB8UlFGUFJfVURQOwogCQlicmVhazsKLQljYXNlIElQVjRfRkxPVzoKLQkJY21wX3JxZnByID0gUlFGUFJfSVBWNDsKLQljYXNlIElQVjZfRkxPVzoKLQkJY21wX3JxZnByID0gUlFGUFJfSVBWNjsKLQkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSICJSaWdodCBub3cgdGhpcyBjbGFzcyBpcyBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJcmV0dXJuIDA7CkBAIC04NDgsMTggKzc2NCw5IEBACiAKIHN0YXRpYyBpbnQgZ2Zhcl9zZXRfaGFzaF9vcHRzKHN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpCiB7Ci0JdTY0IGNsYXNzOwotCi0JaWYgKCFnZmFyX2V0aGZsb3dfdG9fY2xhc3MoY21kLT5mbG93X3R5cGUsICZjbGFzcykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGNsYXNzIDwgQ0xBU1NfQ09ERV9VU0VSX1BST0cxIHx8Ci0JCQljbGFzcyA+IENMQVNTX0NPREVfU0NUUF9JUFY2KQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCS8qIHdyaXRlIHRoZSBmaWxlciBydWxlcyBoZXJlICovCiAJaWYgKCFnZmFyX2V0aGZsb3dfdG9fZmlsZXJfdGFibGUocHJpdiwgY21kLT5kYXRhLCBjbWQtPmZsb3dfdHlwZSkpCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTg5NCwxMSArODAxLDYgQEAKIAkuZ2V0X3N0cmluZ3MgPSBnZmFyX2dzdHJpbmdzLAogCS5nZXRfc3NldF9jb3VudCA9IGdmYXJfc3NldF9jb3VudCwKIAkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBnZmFyX2ZpbGxfc3RhdHMsCi0JLmdldF9yeF9jc3VtID0gZ2Zhcl9nZXRfcnhfY3N1bSwKLQkuZ2V0X3R4X2NzdW0gPSBnZmFyX2dldF90eF9jc3VtLAotCS5zZXRfcnhfY3N1bSA9IGdmYXJfc2V0X3J4X2NzdW0sCi0JLnNldF90eF9jc3VtID0gZ2Zhcl9zZXRfdHhfY3N1bSwKLQkuc2V0X3NnID0gZXRodG9vbF9vcF9zZXRfc2csCiAJLmdldF9tc2dsZXZlbCA9IGdmYXJfZ2V0X21zZ2xldmVsLAogCS5zZXRfbXNnbGV2ZWwgPSBnZmFyX3NldF9tc2dsZXZlbCwKICNpZmRlZiBDT05GSUdfUE0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dyZXRoLmMgYi9kcml2ZXJzL25ldC9ncmV0aC5jCmluZGV4IDM5NmZmN2QuLmYxODEzMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dyZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvZ3JldGguYwpAQCAtOTAxLDcgKzkwMSw3IEBACiAKIAkJCQlza2JfcHV0KHNrYiwgcGt0X2xlbik7CiAKLQkJCQlpZiAoZ3JldGgtPmZsYWdzICYgR1JFVEhfRkxBR19SWF9DU1VNICYmIGh3X2NoZWNrc3VtbWVkKHN0YXR1cykpCisJCQkJaWYgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSAmJiBod19jaGVja3N1bW1lZChzdGF0dXMpKQogCQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCQkJCWVsc2UKIAkJCQkJc2tiX2NoZWNrc3VtX25vbmVfYXNzZXJ0KHNrYik7CkBAIC0xMTQyLDQxICsxMTQyLDYgQEAKIAkJYnVmZltpXSA9IGdyZXRoX3JlYWRfYmQoJmdyZXRoX3JlZ3NbaV0pOwogfQogCi1zdGF0aWMgdTMyIGdyZXRoX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGdyZXRoX3ByaXZhdGUgKmdyZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gKGdyZXRoLT5mbGFncyAmIEdSRVRIX0ZMQUdfUlhfQ1NVTSkgIT0gMDsKLX0KLQotc3RhdGljIGludCBncmV0aF9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgZ3JldGhfcHJpdmF0ZSAqZ3JldGggPSBuZXRkZXZfcHJpdihkZXYpOwotCi0Jc3Bpbl9sb2NrX2JoKCZncmV0aC0+ZGV2bG9jayk7Ci0KLQlpZiAoZGF0YSkKLQkJZ3JldGgtPmZsYWdzIHw9IEdSRVRIX0ZMQUdfUlhfQ1NVTTsKLQllbHNlCi0JCWdyZXRoLT5mbGFncyAmPSB+R1JFVEhfRkxBR19SWF9DU1VNOwotCi0Jc3Bpbl91bmxvY2tfYmgoJmdyZXRoLT5kZXZsb2NrKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdTMyIGdyZXRoX2dldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9JUF9DU1VNKSAhPSAwOwotfQotCi1zdGF0aWMgaW50IGdyZXRoX3NldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKLQlldGh0b29sX29wX3NldF90eF9jc3VtKGRldiwgZGF0YSk7Ci0JbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZ3JldGhfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9tc2dsZXZlbAkJPSBncmV0aF9nZXRfbXNnbGV2ZWwsCiAJLnNldF9tc2dsZXZlbAkJPSBncmV0aF9zZXRfbXNnbGV2ZWwsCkBAIC0xMTg1LDEwICsxMTUwLDYgQEAKIAkuZ2V0X2RydmluZm8JCT0gZ3JldGhfZ2V0X2RydmluZm8sCiAJLmdldF9yZWdzX2xlbiAgICAgICAgICAgPSBncmV0aF9nZXRfcmVnc19sZW4sCiAJLmdldF9yZWdzICAgICAgICAgICAgICAgPSBncmV0aF9nZXRfcmVncywKLQkuZ2V0X3J4X2NzdW0JCT0gZ3JldGhfZ2V0X3J4X2NzdW0sCi0JLnNldF9yeF9jc3VtCQk9IGdyZXRoX3NldF9yeF9jc3VtLAotCS5nZXRfdHhfY3N1bQkJPSBncmV0aF9nZXRfdHhfY3N1bSwKLQkuc2V0X3R4X2NzdW0JCT0gZ3JldGhfc2V0X3R4X2NzdW0sCiAJLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCiB9OwogCkBAIC0xNTcwLDkgKzE1MzEsMTAgQEAKIAlHUkVUSF9SRUdTQVZFKHJlZ3MtPnN0YXR1cywgMHhGRik7CiAKIAlpZiAoZ3JldGgtPmdiaXRfbWFjKSB7Ci0JCWRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9ISUdIRE1BOworCQlkZXYtPmh3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8CisJCQlORVRJRl9GX1JYQ1NVTTsKKwkJZGV2LT5mZWF0dXJlcyA9IGRldi0+aHdfZmVhdHVyZXMgfCBORVRJRl9GX0hJR0hETUE7CiAJCWdyZXRoX25ldGRldl9vcHMubmRvX3N0YXJ0X3htaXQgPSBncmV0aF9zdGFydF94bWl0X2diaXQ7Ci0JCWdyZXRoLT5mbGFncyA9IEdSRVRIX0ZMQUdfUlhfQ1NVTTsKIAl9CiAKIAlpZiAoZ3JldGgtPm11bHRpY2FzdCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ3JldGguaCBiL2RyaXZlcnMvbmV0L2dyZXRoLmgKaW5kZXggYmUwZjIwNi4uOWEwMDQwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ3JldGguaAorKysgYi9kcml2ZXJzL25ldC9ncmV0aC5oCkBAIC03Nyw5ICs3Nyw2IEBACiAgKi8KICNkZWZpbmUgTUFYX0ZSQU1FX1NJWkUJCTE1MjAKIAotLyogRmxhZ3MgKi8KLSNkZWZpbmUgR1JFVEhfRkxBR19SWF9DU1VNIDB4MQotCiAvKiBHUkVUSCBBUEIgcmVnaXN0ZXJzICovCiBzdHJ1Y3QgZ3JldGhfcmVncyB7CiAJdTMyIGNvbnRyb2w7CkBAIC0xMzMsNyArMTMwLDYgQEAKIAl1bnNpZ25lZCBpbnQgZHVwbGV4OwogCiAJdTMyIG1zZ19lbmFibGU7Ci0JdTMyIGZsYWdzOwogCiAJdTggcGh5YWRkcjsKIAl1OCBtdWx0aWNhc3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1hY2hpLmMgYi9kcml2ZXJzL25ldC9oYW1hY2hpLmMKaW5kZXggODBkMjVlZC4uYTA5MDQxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtYWNoaS5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbWFjaGkuYwpAQCAtMTMyLDEzICsxMzIsOCBAQAogLyoKICAqIFJYX0NIRUNLU1VNIHR1cm5zIG9uIGNhcmQtZ2VuZXJhdGVkIHJlY2VpdmUgY2hlY2tzdW0gZ2VuZXJhdGlvbiBmb3IKICAqICAgVENQIGFuZCBVRFAgcGFja2V0cy4gIE90aGVyd2lzZSB0aGUgdXBwZXIgbGF5ZXJzIGRvIHRoZSBjYWxjdWxhdGlvbi4KLSAqIFRYX0NIRUNLU1VNIHdvbid0IGRvIGFueXRoaW5nIHRvbyB1c2VmdWwsIGV2ZW4gaWYgaXQgd29ya3MuICBUaGVyZSdzIG5vCi0gKiAgIGVhc3kgbWVjaGFuaXNtIGJ5IHdoaWNoIHRvIHRlbGwgdGhlIFRDUC9VRFAgc3RhY2sgdGhhdCBpdCBuZWVkIG5vdAotICogICBnZW5lcmF0ZSBjaGVja3N1bXMgZm9yIHRoaXMgZGV2aWNlLiAgQnV0IGlmIHNvbWVib2R5IGNhbiBmaW5kIGEgd2F5Ci0gKiAgIHRvIGdldCB0aGF0IHRvIHdvcmssIG1vc3Qgb2YgdGhlIGNhcmQgd29yayBpcyBpbiBoZXJlIGFscmVhZHkuCiAgKiAzLzEwLzE5OTkgUGV0ZSBXeWNrb2ZmIDx3eWNrb2ZmQGNhLnNhbmRpYS5nb3Y+CiAgKi8KLSN1bmRlZiAgVFhfQ0hFQ0tTVU0KICNkZWZpbmUgUlhfQ0hFQ0tTVU0KIAogLyogT3BlcmF0aW9uYWwgcGFyYW1ldGVycyB0aGF0IHVzdWFsbHkgYXJlIG5vdCBjaGFuZ2VkLiAqLwpAQCAtNjMwLDExICs2MjUsNiBAQAogCiAJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAotI2lmZGVmIFRYX0NIRUNLU1VNCi0JcHJpbnRrKCJjaGVjayB0aGF0IHNrYmNvcHkgaW4gaXBfcXVldWVfeG1pdCBpc24ndCBoYXBwZW5pbmdcbiIpOwotCWRldi0+aGFyZF9oZWFkZXJfbGVuICs9IDg7ICAvKiBmb3IgY2tzdW0gdGFnICovCi0jZW5kaWYKLQogCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCiAJCWRldi0+ZGV2X2FkZHJbaV0gPSAxID8gcmVhZF9lZXByb20oaW9hZGRyLCA0ICsgaSkKIAkJCTogcmVhZGIoaW9hZGRyICsgU3RhdGlvbkFkZHIgKyBpKTsKQEAgLTkzNywxMSArOTI3LDcgQEAKIAogCS8qIGFsd2F5cyAxLCB0YWtlcyBubyBtb3JlIHRpbWUgdG8gZG8gaXQgKi8KIAl3cml0ZXcoMHgwMDAxLCBpb2FkZHIgKyBSeENoZWNrc3VtKTsKLSNpZmRlZiBUWF9DSEVDS1NVTQotCXdyaXRldygweDAwMDEsIGlvYWRkciArIFR4Q2hlY2tzdW0pOwotI2Vsc2UKIAl3cml0ZXcoMHgwMDAwLCBpb2FkZHIgKyBUeENoZWNrc3VtKTsKLSNlbmRpZgogCXdyaXRldygweDgwMDAsIGlvYWRkciArIE1BQ0NuZmcpOyAvKiBTb2Z0IHJlc2V0IHRoZSBNQUMgKi8KIAl3cml0ZXcoMHgyMTVGLCBpb2FkZHIgKyBNQUNDbmZnKTsKIAl3cml0ZXcoMHgwMDBDLCBpb2FkZHIgKyBGcmFtZUdhcDApOwpAQCAtMTIyNiw0MCArMTIxMiw2IEBACiB9CiAKIAotI2lmZGVmIFRYX0NIRUNLU1VNCi0jZGVmaW5lIGNzdW1fYWRkKGl0LCB2YWwpIFwKLWRvIHsgXAotICAgIGl0ICs9ICh1MTYpICh2YWwpOyBcCi0gICAgaWYgKGl0ICYgMHhmZmZmMDAwMCkgeyBcCi0JaXQgJj0gMHhmZmZmOyBcCi0JKytpdDsgXAotICAgIH0gXAotfSB3aGlsZSAoMCkKLSAgICAvKiBwcmludGsoImFkZCAlMDR4IC0tPiAlMDR4XG4iLCB2YWwsIGl0KTsgXCAqLwotCi0vKiB1aC0+bGVuIGFscmVhZHkgbmV0d29yayBmb3JtYXQsIGRvIG5vdCBzd2FwICovCi0jZGVmaW5lIHBzZXVkb19jc3VtX3VkcChzdW0saWgsdWgpIGRvIHsgXAotICAgIHN1bSA9IDA7IFwKLSAgICBjc3VtX2FkZChzdW0sIChpaCktPnNhZGRyID4+IDE2KTsgXAotICAgIGNzdW1fYWRkKHN1bSwgKGloKS0+c2FkZHIgJiAweGZmZmYpOyBcCi0gICAgY3N1bV9hZGQoc3VtLCAoaWgpLT5kYWRkciA+PiAxNik7IFwKLSAgICBjc3VtX2FkZChzdW0sIChpaCktPmRhZGRyICYgMHhmZmZmKTsgXAotICAgIGNzdW1fYWRkKHN1bSwgY3B1X3RvX2JlMTYoSVBQUk9UT19VRFApKTsgXAotICAgIGNzdW1fYWRkKHN1bSwgKHVoKS0+bGVuKTsgXAotfSB3aGlsZSAoMCkKLQotLyogc3dhcCBsZW4gKi8KLSNkZWZpbmUgcHNldWRvX2NzdW1fdGNwKHN1bSxpaCxsZW4pIGRvIHsgXAotICAgIHN1bSA9IDA7IFwKLSAgICBjc3VtX2FkZChzdW0sIChpaCktPnNhZGRyID4+IDE2KTsgXAotICAgIGNzdW1fYWRkKHN1bSwgKGloKS0+c2FkZHIgJiAweGZmZmYpOyBcCi0gICAgY3N1bV9hZGQoc3VtLCAoaWgpLT5kYWRkciA+PiAxNik7IFwKLSAgICBjc3VtX2FkZChzdW0sIChpaCktPmRhZGRyICYgMHhmZmZmKTsgXAotICAgIGNzdW1fYWRkKHN1bSwgY3B1X3RvX2JlMTYoSVBQUk9UT19UQ1ApKTsgXAotICAgIGNzdW1fYWRkKHN1bSwgaHRvbnMobGVuKSk7IFwKLX0gd2hpbGUgKDApCi0jZW5kaWYKLQogc3RhdGljIG5ldGRldl90eF90IGhhbWFjaGlfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0xMjkyLDM2ICsxMjQ0LDYgQEAKIAogCWhtcC0+dHhfc2tidWZmW2VudHJ5XSA9IHNrYjsKIAotI2lmZGVmIFRYX0NIRUNLU1VNCi0JewotCSAgICAvKiB0YWNrIG9uIGNoZWNrc3VtIHRhZyAqLwotCSAgICB1MzIgdGFndmFsID0gMDsKLQkgICAgc3RydWN0IGV0aGhkciAqZWggPSAoc3RydWN0IGV0aGhkciAqKXNrYi0+ZGF0YTsKLQkgICAgaWYgKGVoLT5oX3Byb3RvID09IGNwdV90b19iZTE2KEVUSF9QX0lQKSkgewotCQlzdHJ1Y3QgaXBoZHIgKmloID0gKHN0cnVjdCBpcGhkciAqKSgoY2hhciAqKWVoICsgRVRIX0hMRU4pOwotCQlpZiAoaWgtPnByb3RvY29sID09IElQUFJPVE9fVURQKSB7Ci0JCSAgICBzdHJ1Y3QgdWRwaGRyICp1aAotCQkgICAgICA9IChzdHJ1Y3QgdWRwaGRyICopKChjaGFyICopaWggKyBpaC0+aWhsKjQpOwotCQkgICAgdTMyIG9mZnNldCA9ICgodW5zaWduZWQgY2hhciAqKXVoICsgNikgLSBza2ItPmRhdGE7Ci0JCSAgICB1MzIgcHNldWRvOwotCQkgICAgcHNldWRvX2NzdW1fdWRwKHBzZXVkbywgaWgsIHVoKTsKLQkJICAgIHBzZXVkbyA9IGh0b25zKHBzZXVkbyk7Ci0JCSAgICBwcmludGsoInVkcCBja3N1bSB3YXMgJTA0eCwgc2VuZGluZyBwc2V1ZG8gJTA0eFxuIiwKLQkJICAgICAgdWgtPmNoZWNrLCBwc2V1ZG8pOwotCQkgICAgdWgtPmNoZWNrID0gMDsgIC8qIHplcm8gb3V0IHVoLT5jaGVjayBiZWZvcmUgY2FyZCBjYWxjICovCi0JCSAgICAvKgotCQkgICAgICogc3RhcnQgYXQgMTQgKHNraXAgZXRoaGRyKSwgc3RvcmUgYXQgb2Zmc2V0ICh1aC0+Y2hlY2spLAotCQkgICAgICogdXNlIHBzZXVkbyB2YWx1ZSBnaXZlbi4KLQkJICAgICAqLwotCQkgICAgdGFndmFsID0gKDE0IDw8IDI0KSB8IChvZmZzZXQgPDwgMTYpIHwgcHNldWRvOwotCQl9IGVsc2UgaWYgKGloLT5wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkgewotCQkgICAgcHJpbnRrKCJ0Y3AsIG5vIGF1dG8gY2tzdW1cbiIpOwotCQl9Ci0JICAgIH0KLQkgICAgKih1MzIgKilza2JfcHVzaChza2IsIDgpID0gdGFndmFsOwotCX0KLSNlbmRpZgotCiAgICAgICAgIGhtcC0+dHhfcmluZ1tlbnRyeV0uYWRkciA9IGNwdV90b19sZVhYKHBjaV9tYXBfc2luZ2xlKGhtcC0+cGNpX2RldiwKIAkJc2tiLT5kYXRhLCBza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSkpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby82cGFjay5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vNnBhY2suYwppbmRleCAzZTVkMGI2Li45OTIwODk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby82cGFjay5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvLzZwYWNrLmMKQEAgLTQ1Niw3ICs0NTYsNyBAQAogICogYSBibG9jayBvZiA2cGFjayBkYXRhIGhhcyBiZWVuIHJlY2VpdmVkLCB3aGljaCBjYW4gbm93IGJlIGRlY2Fwc3VsYXRlZAogICogYW5kIHNlbnQgb24gdG8gc29tZSBJUCBsYXllciBmb3IgZnVydGhlciBwcm9jZXNzaW5nLgogICovCi1zdGF0aWMgdm9pZCBzaXhwYWNrX3JlY2VpdmVfYnVmKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCitzdGF0aWMgdW5zaWduZWQgaW50IHNpeHBhY2tfcmVjZWl2ZV9idWYoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAljb25zdCB1bnNpZ25lZCBjaGFyICpjcCwgY2hhciAqZnAsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3Qgc2l4cGFjayAqc3A7CkBAIC00NjQsMTEgKzQ2NCwxMSBAQAogCWludCBjb3VudDE7CiAKIAlpZiAoIWNvdW50KQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCiAJc3AgPSBzcF9nZXQodHR5KTsKIAlpZiAoIXNwKQotCQlyZXR1cm47CisJCXJldHVybiAtRU5PREVWOwogCiAJbWVtY3B5KGJ1ZiwgY3AsIGNvdW50IDwgc2l6ZW9mKGJ1ZikgPyBjb3VudCA6IHNpemVvZihidWYpKTsKIApAQCAtNDg3LDYgKzQ4Nyw4IEBACiAKIAlzcF9wdXQoc3ApOwogCXR0eV91bnRocm90dGxlKHR0eSk7CisKKwlyZXR1cm4gY291bnQxOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vYnBxZXRoZXIuYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JwcWV0aGVyLmMKaW5kZXggODkzMTE2OC4uMThkOGFmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vYnBxZXRoZXIuYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9icHFldGhlci5jCkBAIC01MTYsMTAgKzUxNiw2IEBACiAJbWVtY3B5KGJwcS0+ZGVzdF9hZGRyLCBiY2FzdF9hZGRyLCBzaXplb2YoYnBxX2V0aF9hZGRyKSk7CiAJbWVtY3B5KGJwcS0+YWNwdF9hZGRyLCBiY2FzdF9hZGRyLCBzaXplb2YoYnBxX2V0aF9hZGRyKSk7CiAKLQllcnIgPSBkZXZfYWxsb2NfbmFtZShuZGV2LCBuZGV2LT5uYW1lKTsKLQlpZiAoZXJyIDwgMCkgCi0JCWdvdG8gZXJyb3I7Ci0KIAllcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UobmRldik7CiAJaWYgKGVycikKIAkJZ290byBlcnJvcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL21raXNzLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9ta2lzcy5jCmluZGV4IDRjNjI4MzkuLjBlNGYyMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL21raXNzLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vbWtpc3MuYwpAQCAtOTIzLDEzICs5MjMsMTQgQEAKICAqIGEgYmxvY2sgb2YgZGF0YSBoYXMgYmVlbiByZWNlaXZlZCwgd2hpY2ggY2FuIG5vdyBiZSBkZWNhcHN1bGF0ZWQKICAqIGFuZCBzZW50IG9uIHRvIHRoZSBBWC4yNSBsYXllciBmb3IgZnVydGhlciBwcm9jZXNzaW5nLgogICovCi1zdGF0aWMgdm9pZCBta2lzc19yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpjcCwKLQljaGFyICpmcCwgaW50IGNvdW50KQorc3RhdGljIHVuc2lnbmVkIGludCBta2lzc19yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQljb25zdCB1bnNpZ25lZCBjaGFyICpjcCwgY2hhciAqZnAsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3QgbWtpc3MgKmF4ID0gbWtpc3NfZ2V0KHR0eSk7CisJaW50IGJ5dGVzID0gY291bnQ7CiAKIAlpZiAoIWF4KQotCQlyZXR1cm47CisJCXJldHVybiAtRU5PREVWOwogCiAJLyoKIAkgKiBBcmdoISBtdHUgY2hhbmdlIHRpbWUhIC0gY29zdHMgdXMgdGhlIHBhY2tldCBwYXJ0IHJlY2VpdmVkCkBAIC05MzksNyArOTQwLDcgQEAKIAkJYXhfY2hhbmdlZG10dShheCk7CiAKIAkvKiBSZWFkIHRoZSBjaGFyYWN0ZXJzIG91dCBvZiB0aGUgYnVmZmVyICovCi0Jd2hpbGUgKGNvdW50LS0pIHsKKwl3aGlsZSAoYnl0ZXMtLSkgewogCQlpZiAoZnAgIT0gTlVMTCAmJiAqZnArKykgewogCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEFYRl9FUlJPUiwgJmF4LT5mbGFncykpCiAJCQkJYXgtPmRldi0+c3RhdHMucnhfZXJyb3JzKys7CkBAIC05NTIsNiArOTUzLDggQEAKIAogCW1raXNzX3B1dChheCk7CiAJdHR5X3VudGhyb3R0bGUodHR5KTsKKworCXJldHVybiBjb3VudDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hwMTAwLmMgYi9kcml2ZXJzL25ldC9ocDEwMC5jCmluZGV4IDhlMTBkMmYuLmM1MmExZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hwMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvaHAxMDAuYwpAQCAtMTg4LDE0ICsxODgsMTQgQEAKICAqICB2YXJpYWJsZXMKICAqLwogI2lmZGVmIENPTkZJR19JU0EKLXN0YXRpYyBjb25zdCBjaGFyICpocDEwMF9pc2FfdGJsW10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgaHAxMDBfaXNhX3RibFtdIF9fZGV2aW5pdGNvbnN0ID0gewogCSJIV1BGMTUwIiwgLyogSFAgSjI1NzMgcmV2IEEgKi8KIAkiSFdQMTk1MCIsIC8qIEhQIEoyNTczICovCiB9OwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfRUlTQQotc3RhdGljIHN0cnVjdCBlaXNhX2RldmljZV9pZCBocDEwMF9laXNhX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBlaXNhX2RldmljZV9pZCBocDEwMF9laXNhX3RibFtdIF9fZGV2aW5pdGNvbnN0ID0gewogCXsgIkhXUEYxODAiIH0sIC8qIEhQIEoyNTc3IHJldiBBICovCiAJeyAiSFdQMTkyMCIgfSwgLyogSFAgMjcyNDhCICovCiAJeyAiSFdQMTk0MCIgfSwgLyogSFAgSjI1NzcgKi8KQEAgLTMzNiw3ICszMzYsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX0lTQQotc3RhdGljIF9faW5pdCBpbnQgaHAxMDBfaXNhX3Byb2JlMShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW9hZGRyKQorc3RhdGljIF9fZGV2aW5pdCBpbnQgaHAxMDBfaXNhX3Byb2JlMShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW9hZGRyKQogewogCWNvbnN0IGNoYXIgKnNpZzsKIAlpbnQgaTsKQEAgLTM3Miw3ICszNzIsNyBAQAogICogRUlTQSBhbmQgUENJIGFyZSBoYW5kbGVkIGJ5IGRldmljZSBpbmZyYXN0cnVjdHVyZS4KICAqLwogCi1zdGF0aWMgaW50ICBfX2luaXQgaHAxMDBfaXNhX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBhZGRyKQorc3RhdGljIGludCAgX19kZXZpbml0IGhwMTAwX2lzYV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgYWRkcikKIHsKIAlpbnQgZXJyID0gLUVOT0RFVjsKIApAQCAtMzk2LDcgKzM5Niw3IEBACiAjZW5kaWYgLyogQ09ORklHX0lTQSAqLwogCiAjaWYgIWRlZmluZWQoTU9EVUxFKSAmJiBkZWZpbmVkKENPTkZJR19JU0EpCi1zdHJ1Y3QgbmV0X2RldmljZSAqIF9faW5pdCBocDEwMF9wcm9iZShpbnQgdW5pdCkKK3N0cnVjdCBuZXRfZGV2aWNlICogX19kZXZpbml0IGhwMTAwX3Byb2JlKGludCB1bml0KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGhwMTAwX3ByaXZhdGUpKTsKIAlpbnQgZXJyOwpAQCAtMjg0Myw3ICsyODQzLDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19FSVNBCi1zdGF0aWMgaW50IF9faW5pdCBocDEwMF9laXNhX3Byb2JlIChzdHJ1Y3QgZGV2aWNlICpnZW5kZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBocDEwMF9laXNhX3Byb2JlIChzdHJ1Y3QgZGV2aWNlICpnZW5kZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgaHAxMDBfcHJpdmF0ZSkpOwogCXN0cnVjdCBlaXNhX2RldmljZSAqZWRldiA9IHRvX2Vpc2FfZGV2aWNlKGdlbmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMKaW5kZXggM2JiOTkwYi4uMDc5NDUwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYwpAQCAtMjA1MywxMyArMjA1Myw2IEBACiAJbXV0ZXhfdW5sb2NrKCZkZXYtPmxpbmtfbG9jayk7CiB9CiAKLXN0YXRpYyB1MzIgZW1hY19ldGh0b29sX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQotewotCXN0cnVjdCBlbWFjX2luc3RhbmNlICpkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKLQotCXJldHVybiBkZXYtPnRhaF9kZXYgIT0gTlVMTDsKLX0KLQogc3RhdGljIGludCBlbWFjX2dldF9yZWdzX2xlbihzdHJ1Y3QgZW1hY19pbnN0YW5jZSAqZGV2KQogewogCWlmIChlbWFjX2hhc19mZWF0dXJlKGRldiwgRU1BQ19GVFJfRU1BQzQpKQpAQCAtMjIwMywxNSArMjE5NiwxMSBAQAogCS5nZXRfcmluZ3BhcmFtID0gZW1hY19ldGh0b29sX2dldF9yaW5ncGFyYW0sCiAJLmdldF9wYXVzZXBhcmFtID0gZW1hY19ldGh0b29sX2dldF9wYXVzZXBhcmFtLAogCi0JLmdldF9yeF9jc3VtID0gZW1hY19ldGh0b29sX2dldF9yeF9jc3VtLAotCiAJLmdldF9zdHJpbmdzID0gZW1hY19ldGh0b29sX2dldF9zdHJpbmdzLAogCS5nZXRfc3NldF9jb3VudCA9IGVtYWNfZXRodG9vbF9nZXRfc3NldF9jb3VudCwKIAkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBlbWFjX2V0aHRvb2xfZ2V0X2V0aHRvb2xfc3RhdHMsCiAKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAotCS5nZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCi0JLmdldF9zZyA9IGV0aHRvb2xfb3BfZ2V0X3NnLAogfTsKIAogc3RhdGljIGludCBlbWFjX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQpAQCAtMjg1OSw4ICsyODQ4LDEwIEBACiAJaWYgKGVyciAhPSAwKQogCQlnb3RvIGVycl9kZXRhY2hfdGFoOwogCi0JaWYgKGRldi0+dGFoX2RldikKLQkJbmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9TRzsKKwlpZiAoZGV2LT50YWhfZGV2KSB7CisJCW5kZXYtPmh3X2ZlYXR1cmVzID0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9TRzsKKwkJbmRldi0+ZmVhdHVyZXMgfD0gbmRldi0+aHdfZmVhdHVyZXMgfCBORVRJRl9GX1JYQ1NVTTsKKwl9CiAJbmRldi0+d2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7CiAJaWYgKGVtYWNfcGh5X3N1cHBvcnRzX2dpZ2UoZGV2LT5waHlfbW9kZSkpIHsKIAkJbmRldi0+bmV0ZGV2X29wcyA9ICZlbWFjX2dpZ2VfbmV0ZGV2X29wczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libWxhbmEuYyBiL2RyaXZlcnMvbmV0L2libWxhbmEuYwppbmRleCA4ZmY2OGFlLi4xMzZkNzU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1sYW5hLmMKKysrIGIvZHJpdmVycy9uZXQvaWJtbGFuYS5jCkBAIC03ODIsNyArNzgyLDggQEAKIAogCS8qIHJlZ2lzdGVyIHJlc291cmNlcyAtIG9ubHkgbmVjZXNzYXJ5IGZvciBJUlEgKi8KIAotCXJlc3VsdCA9IHJlcXVlc3RfaXJxKHByaXYtPnJlYWxpcnEsIGlycV9oYW5kbGVyLCBJUlFGX1NIQVJFRCB8IElSUUZfU0FNUExFX1JBTkRPTSwgZGV2LT5uYW1lLCBkZXYpOworCXJlc3VsdCA9IHJlcXVlc3RfaXJxKHByaXYtPnJlYWxpcnEsIGlycV9oYW5kbGVyLCBJUlFGX1NIQVJFRCwKKwkJCSAgICAgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChyZXN1bHQgIT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgaXJxICVkXG4iLCBkZXYtPm5hbWUsIGRldi0+aXJxKTsKIAkJcmV0dXJuIHJlc3VsdDsKQEAgLTg5NCwxMiArODk1LDEyIEBACiBzdGF0aWMgaW50IGlibWxhbmFfaW87CiBzdGF0aWMgaW50IHN0YXJ0c2xvdDsJCS8qIGNvdW50cyB0aHJvdWdoIHNsb3RzIHdoZW4gcHJvYmluZyBtdWx0aXBsZSBkZXZpY2VzICovCiAKLXN0YXRpYyBzaG9ydCBpYm1sYW5hX2FkYXB0ZXJfaWRzW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzaG9ydCBpYm1sYW5hX2FkYXB0ZXJfaWRzW10gX19kZXZpbml0Y29uc3QgPSB7CiAJSUJNX0xBTkFfSUQsCiAJMHgwMDAwCiB9OwogCi1zdGF0aWMgY2hhciAqaWJtbGFuYV9hZGFwdGVyX25hbWVzW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBpYm1sYW5hX2FkYXB0ZXJfbmFtZXNbXSBfX2RldmluaXRjb25zdCA9IHsKIAkiSUJNIExBTiBBZGFwdGVyL0EiLAogCU5VTEwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm12ZXRoLmMgYi9kcml2ZXJzL25ldC9pYm12ZXRoLmMKaW5kZXggNTUyMmQ0NS4uYjM4OGQ3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtdmV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2libXZldGguYwpAQCAtNzEwLDcgKzcxMCw3IEBACiAJCQkJU1VQUE9SVEVEX0ZJQlJFKTsKIAljbWQtPmFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwgfCBBRFZFUlRJU0VEX0F1dG9uZWcgfAogCQkJCUFEVkVSVElTRURfRklCUkUpOwotCWNtZC0+c3BlZWQgPSBTUEVFRF8xMDAwOworCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIFNQRUVEXzEwMDApOwogCWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CiAJY21kLT5wb3J0ID0gUE9SVF9GSUJSRTsKIAljbWQtPnBoeV9hZGRyZXNzID0gMDsKQEAgLTcyOSw0NSArNzI5LDI0IEBACiAJCXNpemVvZihpbmZvLT52ZXJzaW9uKSAtIDEpOwogfQogCi1zdGF0aWMgdm9pZCBpYm12ZXRoX3NldF9yeF9jc3VtX2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQorc3RhdGljIHUzMiBpYm12ZXRoX2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmVhdHVyZXMpCiB7Ci0Jc3RydWN0IGlibXZldGhfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CisJLyoKKwkgKiBTaW5jZSB0aGUgaWJtdmV0aCBmaXJtd2FyZSBpbnRlcmZhY2UgZG9lcyBub3QgaGF2ZSB0aGUKKwkgKiBjb25jZXB0IG9mIHNlcGFyYXRlIHR4L3J4IGNoZWNrc3VtIG9mZmxvYWQgZW5hYmxlLCBpZiByeAorCSAqIGNoZWNrc3VtIGlzIGRpc2FibGVkIHdlIGFsc28gaGF2ZSB0byBkaXNhYmxlIHR4IGNoZWNrc3VtCisJICogb2ZmbG9hZC4gT25jZSB3ZSBkaXNhYmxlIHJ4IGNoZWNrc3VtIG9mZmxvYWQsIHdlIGFyZSBubworCSAqIGxvbmdlciBhbGxvd2VkIHRvIHNlbmQgdHggYnVmZmVycyB0aGF0IGFyZSBub3QgcHJvcGVybHkKKwkgKiBjaGVja3N1bW1lZC4KKwkgKi8KIAotCWlmIChkYXRhKSB7Ci0JCWFkYXB0ZXItPnJ4X2NzdW0gPSAxOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIFNpbmNlIHRoZSBpYm12ZXRoIGZpcm13YXJlIGludGVyZmFjZSBkb2VzIG5vdCBoYXZlIHRoZQotCQkgKiBjb25jZXB0IG9mIHNlcGFyYXRlIHR4L3J4IGNoZWNrc3VtIG9mZmxvYWQgZW5hYmxlLCBpZiByeAotCQkgKiBjaGVja3N1bSBpcyBkaXNhYmxlZCB3ZSBhbHNvIGhhdmUgdG8gZGlzYWJsZSB0eCBjaGVja3N1bQotCQkgKiBvZmZsb2FkLiBPbmNlIHdlIGRpc2FibGUgcnggY2hlY2tzdW0gb2ZmbG9hZCwgd2UgYXJlIG5vCi0JCSAqIGxvbmdlciBhbGxvd2VkIHRvIHNlbmQgdHggYnVmZmVycyB0aGF0IGFyZSBub3QgcHJvcGVybHkKLQkJICogY2hlY2tzdW1tZWQuCi0JCSAqLwotCQlhZGFwdGVyLT5yeF9jc3VtID0gMDsKLQkJZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9JUF9DU1VNOwotCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0lQVjZfQ1NVTTsKLQl9CisJaWYgKCEoZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkpCisJCWZlYXR1cmVzICY9IH5ORVRJRl9GX0FMTF9DU1VNOworCisJcmV0dXJuIGZlYXR1cmVzOwogfQogCi1zdGF0aWMgdm9pZCBpYm12ZXRoX3NldF90eF9jc3VtX2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCBpYm12ZXRoX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKGRhdGEpIHsKLQkJaWYgKGFkYXB0ZXItPmZ3X2lwdjRfY3N1bV9zdXBwb3J0KQotCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU07Ci0JCWlmIChhZGFwdGVyLT5md19pcHY2X2NzdW1fc3VwcG9ydCkKLQkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUFY2X0NTVU07Ci0JCWFkYXB0ZXItPnJ4X2NzdW0gPSAxOwotCX0gZWxzZSB7Ci0JCWRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfSVBfQ1NVTTsKLQkJZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9JUFY2X0NTVU07Ci0JfQotfQotCi1zdGF0aWMgaW50IGlibXZldGhfc2V0X2NzdW1fb2ZmbG9hZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSwKLQkJCQkgICAgdm9pZCAoKmRvbmUpIChzdHJ1Y3QgbmV0X2RldmljZSAqLCB1MzIpKQorc3RhdGljIGludCBpYm12ZXRoX3NldF9jc3VtX29mZmxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCiB7CiAJc3RydWN0IGlibXZldGhfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBzZXRfYXR0ciwgY2xyX2F0dHIsIHJldF9hdHRyOwpAQCAtODI3LDggKzgwNiw4IEBACiAJCX0gZWxzZQogCQkJYWRhcHRlci0+ZndfaXB2Nl9jc3VtX3N1cHBvcnQgPSBkYXRhOwogCi0JCWlmIChyZXQgPT0gSF9TVUNDRVNTIHx8IHJldDYgPT0gSF9TVUNDRVNTKQotCQkJZG9uZShkZXYsIGRhdGEpOworCQlpZiAocmV0ICE9IEhfU1VDQ0VTUyB8fCByZXQ2ICE9IEhfU1VDQ0VTUykKKwkJCWFkYXB0ZXItPnJ4X2NzdW0gPSBkYXRhOwogCQllbHNlCiAJCQlyYzEgPSAtRUlPOwogCX0gZWxzZSB7CkBAIC04NDQsNDEgKzgyMywyMiBAQAogCXJldHVybiByYzEgPyByYzEgOiByYzI7CiB9CiAKLXN0YXRpYyBpbnQgaWJtdmV0aF9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3N0YXRpYyBpbnQgaWJtdmV0aF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZlYXR1cmVzKQogewogCXN0cnVjdCBpYm12ZXRoX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCByeF9jc3VtID0gISEoZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSk7CisJaW50IHJjOwogCi0JaWYgKChkYXRhICYmIGFkYXB0ZXItPnJ4X2NzdW0pIHx8ICghZGF0YSAmJiAhYWRhcHRlci0+cnhfY3N1bSkpCisJaWYgKHJ4X2NzdW0gPT0gYWRhcHRlci0+cnhfY3N1bSkKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gaWJtdmV0aF9zZXRfY3N1bV9vZmZsb2FkKGRldiwgZGF0YSwgaWJtdmV0aF9zZXRfcnhfY3N1bV9mbGFncyk7Ci19Ci0KLXN0YXRpYyBpbnQgaWJtdmV0aF9zZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgaWJtdmV0aF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKGRhdGEgJiYgKGRldi0+ZmVhdHVyZXMgJiAoTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU0pKSkKLQkJcmV0dXJuIDA7Ci0JaWYgKCFkYXRhICYmICEoZGV2LT5mZWF0dXJlcyAmIChORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSkpKQotCQlyZXR1cm4gMDsKLQotCWlmIChkYXRhICYmICFhZGFwdGVyLT5yeF9jc3VtKQotCQlyYyA9IGlibXZldGhfc2V0X2NzdW1fb2ZmbG9hZChkZXYsIGRhdGEsCi0JCQkJCSAgICAgIGlibXZldGhfc2V0X3R4X2NzdW1fZmxhZ3MpOwotCWVsc2UKLQkJaWJtdmV0aF9zZXRfdHhfY3N1bV9mbGFncyhkZXYsIGRhdGEpOworCXJjID0gaWJtdmV0aF9zZXRfY3N1bV9vZmZsb2FkKGRldiwgcnhfY3N1bSk7CisJaWYgKHJjICYmICFhZGFwdGVyLT5yeF9jc3VtKQorCQlkZXYtPmZlYXR1cmVzID0gZmVhdHVyZXMgJiB+KE5FVElGX0ZfQUxMX0NTVU0gfCBORVRJRl9GX1JYQ1NVTSk7CiAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyB1MzIgaWJtdmV0aF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpYm12ZXRoX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwotCXJldHVybiBhZGFwdGVyLT5yeF9jc3VtOwotfQotCiBzdGF0aWMgdm9pZCBpYm12ZXRoX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBzdHJpbmdzZXQsIHU4ICpkYXRhKQogewogCWludCBpOwpAQCAtOTE0LDEzICs4NzQsOSBAQAogCS5nZXRfZHJ2aW5mbwkJPSBuZXRkZXZfZ2V0X2RydmluZm8sCiAJLmdldF9zZXR0aW5ncwkJPSBuZXRkZXZfZ2V0X3NldHRpbmdzLAogCS5nZXRfbGluawkJPSBldGh0b29sX29wX2dldF9saW5rLAotCS5zZXRfdHhfY3N1bQkJPSBpYm12ZXRoX3NldF90eF9jc3VtLAotCS5nZXRfcnhfY3N1bQkJPSBpYm12ZXRoX2dldF9yeF9jc3VtLAotCS5zZXRfcnhfY3N1bQkJPSBpYm12ZXRoX3NldF9yeF9jc3VtLAogCS5nZXRfc3RyaW5ncwkJPSBpYm12ZXRoX2dldF9zdHJpbmdzLAogCS5nZXRfc3NldF9jb3VudAkJPSBpYm12ZXRoX2dldF9zc2V0X2NvdW50LAogCS5nZXRfZXRodG9vbF9zdGF0cwk9IGlibXZldGhfZ2V0X2V0aHRvb2xfc3RhdHMsCi0JLnNldF9zZwkJCT0gZXRodG9vbF9vcF9zZXRfc2csCiB9OwogCiBzdGF0aWMgaW50IGlibXZldGhfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCkBAIC0xMzQ1LDYgKzEzMDEsOCBAQAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gaWJtdmV0aF9zZXRfbXVsdGljYXN0X2xpc3QsCiAJLm5kb19kb19pb2N0bAkJPSBpYm12ZXRoX2lvY3RsLAogCS5uZG9fY2hhbmdlX210dQkJPSBpYm12ZXRoX2NoYW5nZV9tdHUsCisJLm5kb19maXhfZmVhdHVyZXMJPSBpYm12ZXRoX2ZpeF9mZWF0dXJlcywKKwkubmRvX3NldF9mZWF0dXJlcwk9IGlibXZldGhfc2V0X2ZlYXR1cmVzLAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZXRoX21hY19hZGRyLAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCkBAIC0xNDEyLDcgKzEzNzAsOSBAQAogCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZpYm12ZXRoX25ldGRldl9vcHM7CiAJbmV0ZGV2LT5ldGh0b29sX29wcyA9ICZuZXRkZXZfZXRodG9vbF9vcHM7CiAJU0VUX05FVERFVl9ERVYobmV0ZGV2LCAmZGV2LT5kZXYpOwotCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRzsKKwluZXRkZXYtPmh3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfUlhDU1VNIHwKKwkJTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU07CisJbmV0ZGV2LT5mZWF0dXJlcyB8PSBuZXRkZXYtPmh3X2ZlYXR1cmVzOwogCiAJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsICZhZGFwdGVyLT5tYWNfYWRkciwgbmV0ZGV2LT5hZGRyX2xlbik7CiAKQEAgLTE0MzcsNyArMTM5Nyw3IEBACiAKIAluZXRkZXZfZGJnKG5ldGRldiwgInJlZ2lzdGVyaW5nIG5ldGRldi4uLlxuIik7CiAKLQlpYm12ZXRoX3NldF9jc3VtX29mZmxvYWQobmV0ZGV2LCAxLCBpYm12ZXRoX3NldF90eF9jc3VtX2ZsYWdzKTsKKwlpYm12ZXRoX3NldF9mZWF0dXJlcyhuZXRkZXYsIG5ldGRldi0+ZmVhdHVyZXMpOwogCiAJcmMgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWZiLmMgYi9kcml2ZXJzL25ldC9pZmIuYwppbmRleCBlMDdkNDg3Li40ZmVjYWVkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWZiLmMKKysrIGIvZHJpdmVycy9uZXQvaWZiLmMKQEAgLTIzMywxMCArMjMzLDYgQEAKIAlpZiAoIWRldl9pZmIpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZXJyID0gZGV2X2FsbG9jX25hbWUoZGV2X2lmYiwgZGV2X2lmYi0+bmFtZSk7Ci0JaWYgKGVyciA8IDApCi0JCWdvdG8gZXJyOwotCiAJZGV2X2lmYi0+cnRubF9saW5rX29wcyA9ICZpZmJfbGlua19vcHM7CiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldl9pZmIpOwogCWlmIChlcnIgPCAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmMgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuYwppbmRleCA2YjI1NmMyLi4wZjU2M2M4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuYworKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuYwpAQCAtMjQ0LDYgKzI0NCwxNCBAQAogCSAqLwogCXNpemUgKz0gTlZNX1dPUkRfU0laRV9CQVNFX1NISUZUOwogCisJLyoKKwkgKiBDaGVjayBmb3IgaW52YWxpZCBzaXplCisJICovCisJaWYgKChody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzYpICYmIChzaXplID4gMTUpKSB7CisJCXByaW50aygiaWdiOiBUaGUgTlZNIHNpemUgaXMgbm90IHZhbGlkLCAiCisJCQkiZGVmYXVsdGluZyB0byAzMksuXG4iKTsKKwkJc2l6ZSA9IDE1OworCX0KIAludm0tPndvcmRfc2l6ZSA9IDEgPDwgc2l6ZTsKIAlpZiAobnZtLT53b3JkX3NpemUgPT0gKDEgPDwgMTUpKQogCQludm0tPnBhZ2Vfc2l6ZSA9IDEyODsKQEAgLTE4NzcsNyArMTg4NSw3IEBACiAJfQogCiAJaWYgKG52bV9kYXRhICYgTlZNX0NPTVBBVElCSUxJVFlfQklUX01BU0spIHsKLQkJLyogaWYgY2hla2NzdW1zIGNvbXBhdGliaWxpdHkgYml0IGlzIHNldCB2YWxpZGF0ZSBjaGVja3N1bXMKKwkJLyogaWYgY2hlY2tzdW1zIGNvbXBhdGliaWxpdHkgYml0IGlzIHNldCB2YWxpZGF0ZSBjaGVja3N1bXMKIAkJICogZm9yIGFsbCA0IHBvcnRzLiAqLwogCQllZXByb21fcmVnaW9uc19jb3VudCA9IDQ7CiAJfQpAQCAtMTk4OCw2ICsxOTk2LDcgQEAKIG91dDoKIAlyZXR1cm4gcmV0X3ZhbDsKIH0KKwogLyoqCiAgKiAgaWdiX3NldF9lZWVfaTM1MCAtIEVuYWJsZS9kaXNhYmxlIEVFRSBzdXBwb3J0CiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9pZ2IuaCBiL2RyaXZlcnMvbmV0L2lnYi9pZ2IuaAppbmRleCAxYzY4N2UyLi5mNGZhNGIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvaWdiLmgKKysrIGIvZHJpdmVycy9uZXQvaWdiL2lnYi5oCkBAIC0zNjAsNyArMzYwLDcgQEAKIGV4dGVybiB2b2lkIGlnYl9kb3duKHN0cnVjdCBpZ2JfYWRhcHRlciAqKTsKIGV4dGVybiB2b2lkIGlnYl9yZWluaXRfbG9ja2VkKHN0cnVjdCBpZ2JfYWRhcHRlciAqKTsKIGV4dGVybiB2b2lkIGlnYl9yZXNldChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKik7Ci1leHRlcm4gaW50IGlnYl9zZXRfc3BkX2RwbHgoc3RydWN0IGlnYl9hZGFwdGVyICosIHUxNik7CitleHRlcm4gaW50IGlnYl9zZXRfc3BkX2RwbHgoc3RydWN0IGlnYl9hZGFwdGVyICosIHUzMiwgdTgpOwogZXh0ZXJuIGludCBpZ2Jfc2V0dXBfdHhfcmVzb3VyY2VzKHN0cnVjdCBpZ2JfcmluZyAqKTsKIGV4dGVybiBpbnQgaWdiX3NldHVwX3J4X3Jlc291cmNlcyhzdHJ1Y3QgaWdiX3JpbmcgKik7CiBleHRlcm4gdm9pZCBpZ2JfZnJlZV90eF9yZXNvdXJjZXMoc3RydWN0IGlnYl9yaW5nICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYwppbmRleCBkOTc2NzMzLi5mZGM4OTVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYwpAQCAtMTc4LDExICsxNzgsMTEgQEAKIAogCQlpZiAoKHN0YXR1cyAmIEUxMDAwX1NUQVRVU19TUEVFRF8xMDAwKSB8fAogCQkgICAgaHctPnBoeS5tZWRpYV90eXBlICE9IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKQotCQkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDAwOworCQkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIFNQRUVEXzEwMDApOwogCQllbHNlIGlmIChzdGF0dXMgJiBFMTAwMF9TVEFUVVNfU1BFRURfMTAwKQotCQkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDA7CisJCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgU1BFRURfMTAwKTsKIAkJZWxzZQotCQkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDsKKwkJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBTUEVFRF8xMCk7CiAKIAkJaWYgKChzdGF0dXMgJiBFMTAwMF9TVEFUVVNfRkQpIHx8CiAJCSAgICBody0+cGh5Lm1lZGlhX3R5cGUgIT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpCkBAIC0xOTAsNyArMTkwLDcgQEAKIAkJZWxzZQogCQkJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0hBTEY7CiAJfSBlbHNlIHsKLQkJZWNtZC0+c3BlZWQgPSAtMTsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIC0xKTsKIAkJZWNtZC0+ZHVwbGV4ID0gLTE7CiAJfQogCkBAIC0yMjMsNyArMjIzLDggQEAKIAkJaWYgKGFkYXB0ZXItPmZjX2F1dG9uZWcpCiAJCQlody0+ZmMucmVxdWVzdGVkX21vZGUgPSBlMTAwMF9mY19kZWZhdWx0OwogCX0gZWxzZSB7Ci0JCWlmIChpZ2Jfc2V0X3NwZF9kcGx4KGFkYXB0ZXIsIGVjbWQtPnNwZWVkICsgZWNtZC0+ZHVwbGV4KSkgeworCQl1MzIgc3BlZWQgPSBldGh0b29sX2NtZF9zcGVlZChlY21kKTsKKwkJaWYgKGlnYl9zZXRfc3BkX2RwbHgoYWRhcHRlciwgc3BlZWQsIGVjbWQtPmR1cGxleCkpIHsKIAkJCWNsZWFyX2JpdChfX0lHQl9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpAQCAtMTk2MywyNyArMTk2NCwyOCBAQAogLyogYml0IGRlZmluZXMgZm9yIGFkYXB0ZXItPmxlZF9zdGF0dXMgKi8KICNkZWZpbmUgSUdCX0xFRF9PTgkJMAogCi1zdGF0aWMgaW50IGlnYl9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQorc3RhdGljIGludCBpZ2Jfc2V0X3BoeXNfaWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgIGVudW0gZXRodG9vbF9waHlzX2lkX3N0YXRlIHN0YXRlKQogewogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAKLQl0aW1lb3V0ID0gZGF0YSAqIDEwMDA7Ci0KLQkvKgotCSAqICBtc2xlZXBfaW50ZXJydXB0YWJsZSBvbmx5IGFjY2VwdHMgdW5zaWduZWQgaW50IHNvIHdlIGFyZSBsaW1pdGVkCi0JICogaW4gaG93IGxvbmcgYSBkdXJhdGlvbiB3ZSBjYW4gd2FpdAotCSAqLwotCWlmICghdGltZW91dCB8fCB0aW1lb3V0ID4gVUlOVF9NQVgpCi0JCXRpbWVvdXQgPSBVSU5UX01BWDsKLQotCWlnYl9ibGlua19sZWQoaHcpOwotCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKHRpbWVvdXQpOwotCi0JaWdiX2xlZF9vZmYoaHcpOwotCWNsZWFyX2JpdChJR0JfTEVEX09OLCAmYWRhcHRlci0+bGVkX3N0YXR1cyk7Ci0JaWdiX2NsZWFudXBfbGVkKGh3KTsKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBFVEhUT09MX0lEX0FDVElWRToKKwkJaWdiX2JsaW5rX2xlZChodyk7CisJCXJldHVybiAyOworCWNhc2UgRVRIVE9PTF9JRF9PTjoKKwkJaWdiX2JsaW5rX2xlZChodyk7CisJCWJyZWFrOworCWNhc2UgRVRIVE9PTF9JRF9PRkY6CisJCWlnYl9sZWRfb2ZmKGh3KTsKKwkJYnJlYWs7CisJY2FzZSBFVEhUT09MX0lEX0lOQUNUSVZFOgorCQlpZ2JfbGVkX29mZihodyk7CisJCWNsZWFyX2JpdChJR0JfTEVEX09OLCAmYWRhcHRlci0+bGVkX3N0YXR1cyk7CisJCWlnYl9jbGVhbnVwX2xlZChodyk7CisJCWJyZWFrOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMjIxNSw3ICsyMjE3LDcgQEAKIAkuc2V0X3RzbyAgICAgICAgICAgICAgICA9IGlnYl9zZXRfdHNvLAogCS5zZWxmX3Rlc3QgICAgICAgICAgICAgID0gaWdiX2RpYWdfdGVzdCwKIAkuZ2V0X3N0cmluZ3MgICAgICAgICAgICA9IGlnYl9nZXRfc3RyaW5ncywKLQkucGh5c19pZCAgICAgICAgICAgICAgICA9IGlnYl9waHlzX2lkLAorCS5zZXRfcGh5c19pZCAgICAgICAgICAgID0gaWdiX3NldF9waHlzX2lkLAogCS5nZXRfc3NldF9jb3VudCAgICAgICAgID0gaWdiX2dldF9zc2V0X2NvdW50LAogCS5nZXRfZXRodG9vbF9zdGF0cyAgICAgID0gaWdiX2dldF9ldGh0b29sX3N0YXRzLAogCS5nZXRfY29hbGVzY2UgICAgICAgICAgID0gaWdiX2dldF9jb2FsZXNjZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKaW5kZXggMGRmZDFiOS4uMThmY2NmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogI2luY2x1ZGUgPGxpbnV4L2Flci5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaWZkZWYgQ09ORklHX0lHQl9EQ0EKICNpbmNsdWRlIDxsaW51eC9kY2EuaD4KICNlbmRpZgpAQCAtMzUzMiw2ICszNTMzLDI1IEBACiAJcmV0dXJuIGxpbmtfYWN0aXZlOwogfQogCitzdGF0aWMgYm9vbCBpZ2JfdGhlcm1hbF9zZW5zb3JfZXZlbnQoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIGV2ZW50KQoreworCWJvb2wgcmV0ID0gZmFsc2U7CisJdTMyIGN0cmxfZXh0LCB0aHN0YXQ7CisKKwkvKiBjaGVjayBmb3IgdGhlcm1hbCBzZW5zb3IgZXZlbnQgb24gaTM1MCwgY29wcGVyIG9ubHkgKi8KKwlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwX2kzNTApIHsKKwkJdGhzdGF0ID0gcmQzMihFMTAwMF9USFNUQVQpOworCQljdHJsX2V4dCA9IHJkMzIoRTEwMDBfQ1RSTF9FWFQpOworCisJCWlmICgoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSAmJgorCQkgICAgIShjdHJsX2V4dCAmIEUxMDAwX0NUUkxfRVhUX0xJTktfTU9ERV9TR01JSSkpIHsKKwkJCXJldCA9ICEhKHRoc3RhdCAmIGV2ZW50KTsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKIC8qKgogICogaWdiX3dhdGNoZG9nIC0gVGltZXIgQ2FsbC1iYWNrCiAgKiBAZGF0YTogcG9pbnRlciB0byBhZGFwdGVyIGNhc3QgaW50byBhbiB1bnNpZ25lZCBsb25nCkBAIC0zNTUwLDcgKzM1NzAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2F0Y2hkb2dfdGFzayk7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwotCXUzMiBsaW5rLCBjdHJsX2V4dCwgdGhzdGF0OworCXUzMiBsaW5rOwogCWludCBpOwogCiAJbGluayA9IGlnYl9oYXNfbGluayhhZGFwdGVyKTsKQEAgLTM1NzQsMjUgKzM1OTQsMTQgQEAKIAkJCSAgICAgICAoKGN0cmwgJiBFMTAwMF9DVFJMX1JGQ0UpID8gICJSWCIgOgogCQkJICAgICAgICgoY3RybCAmIEUxMDAwX0NUUkxfVEZDRSkgPyAgIlRYIiA6ICJOb25lIikpKTsKIAotCQkJLyogY2hlY2sgZm9yIHRoZXJtYWwgc2Vuc29yIGV2ZW50IG9uIGkzNTAsCi0JCQkgKiBjb3BwZXIgb25seSAqLwotCQkJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9pMzUwKSB7Ci0JCQkJdGhzdGF0ID0gcmQzMihFMTAwMF9USFNUQVQpOwotCQkJCWN0cmxfZXh0ID0gcmQzMihFMTAwMF9DVFJMX0VYVCk7Ci0JCQkJaWYgKChody0+cGh5Lm1lZGlhX3R5cGUgPT0KLQkJCQkgICAgIGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSAmJiAhKGN0cmxfZXh0ICYKLQkJCQkgICAgIEUxMDAwX0NUUkxfRVhUX0xJTktfTU9ERV9TR01JSSkpIHsKLQkJCQkJaWYgKHRoc3RhdCAmCi0JCQkJCSAgICBFMTAwMF9USFNUQVRfTElOS19USFJPVFRMRSkgewotCQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiaWdiOiAlcyBUaGUgIgotCQkJCQkJICAgICAgICJuZXR3b3JrIGFkYXB0ZXIgbGluayAiCi0JCQkJCQkgICAgICAgInNwZWVkIHdhcyBkb3duc2hpZnRlZCAiCi0JCQkJCQkgICAgICAgImJlY2F1c2UgaXQgIgotCQkJCQkJICAgICAgICJvdmVyaGVhdGVkLlxuIiwKLQkJCQkJCSAgICAgICBuZXRkZXYtPm5hbWUpOwotCQkJCQl9Ci0JCQkJfQorCQkJLyogY2hlY2sgZm9yIHRoZXJtYWwgc2Vuc29yIGV2ZW50ICovCisJCQlpZiAoaWdiX3RoZXJtYWxfc2Vuc29yX2V2ZW50KGh3LCBFMTAwMF9USFNUQVRfTElOS19USFJPVFRMRSkpIHsKKwkJCQlwcmludGsoS0VSTl9JTkZPICJpZ2I6ICVzIFRoZSBuZXR3b3JrIGFkYXB0ZXIgIgorCQkJCQkJICJsaW5rIHNwZWVkIHdhcyBkb3duc2hpZnRlZCAiCisJCQkJCQkgImJlY2F1c2UgaXQgb3ZlcmhlYXRlZC5cbiIsCisJCQkJCQkgbmV0ZGV2LT5uYW1lKTsKIAkJCX0KKwogCQkJLyogYWRqdXN0IHRpbWVvdXQgZmFjdG9yIGFjY29yZGluZyB0byBzcGVlZC9kdXBsZXggKi8KIAkJCWFkYXB0ZXItPnR4X3RpbWVvdXRfZmFjdG9yID0gMTsKIAkJCXN3aXRjaCAoYWRhcHRlci0+bGlua19zcGVlZCkgewpAQCAtMzYxOCwyMiArMzYyNywxNSBAQAogCQlpZiAobmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7CiAJCQlhZGFwdGVyLT5saW5rX3NwZWVkID0gMDsKIAkJCWFkYXB0ZXItPmxpbmtfZHVwbGV4ID0gMDsKLQkJCS8qIGNoZWNrIGZvciB0aGVybWFsIHNlbnNvciBldmVudCBvbiBpMzUwCi0JCQkgKiBjb3BwZXIgb25seSovCi0JCQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwX2kzNTApIHsKLQkJCQl0aHN0YXQgPSByZDMyKEUxMDAwX1RIU1RBVCk7Ci0JCQkJY3RybF9leHQgPSByZDMyKEUxMDAwX0NUUkxfRVhUKTsKLQkJCQlpZiAoKGh3LT5waHkubWVkaWFfdHlwZSA9PQotCQkJCSAgICAgZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpICYmICEoY3RybF9leHQgJgotCQkJCSAgICAgRTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX1NHTUlJKSkgewotCQkJCQlpZiAodGhzdGF0ICYgRTEwMDBfVEhTVEFUX1BXUl9ET1dOKSB7Ci0JCQkJCQlwcmludGsoS0VSTl9FUlIgImlnYjogJXMgVGhlICIKLQkJCQkJCSJuZXR3b3JrIGFkYXB0ZXIgd2FzIHN0b3BwZWQgIgotCQkJCQkJImJlY2F1c2UgaXQgb3ZlcmhlYXRlZC5cbiIsCisKKwkJCS8qIGNoZWNrIGZvciB0aGVybWFsIHNlbnNvciBldmVudCAqLworCQkJaWYgKGlnYl90aGVybWFsX3NlbnNvcl9ldmVudChodywgRTEwMDBfVEhTVEFUX1BXUl9ET1dOKSkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiaWdiOiAlcyBUaGUgbmV0d29yayBhZGFwdGVyICIKKwkJCQkJCSJ3YXMgc3RvcHBlZCBiZWNhdXNlIGl0ICIKKwkJCQkJCSJvdmVyaGVhdGVkLlxuIiwKIAkJCQkJCW5ldGRldi0+bmFtZSk7Ci0JCQkJCX0KLQkJCQl9CiAJCQl9CisKIAkJCS8qIExpbmtzIHN0YXR1cyBtZXNzYWdlIG11c3QgZm9sbG93IHRoaXMgZm9ybWF0ICovCiAJCQlwcmludGsoS0VSTl9JTkZPICJpZ2I6ICVzIE5JQyBMaW5rIGlzIERvd25cbiIsCiAJCQkgICAgICAgbmV0ZGV2LT5uYW1lKTsKQEAgLTYzNDgsMjEgKzYzNTAsMjUgQEAKIAl9CiB9CiAKLWludCBpZ2Jfc2V0X3NwZF9kcGx4KHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwgdTE2IHNwZGRwbHgpCitpbnQgaWdiX3NldF9zcGRfZHBseChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBzcGQsIHU4IGRwbHgpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCXN0cnVjdCBlMTAwMF9tYWNfaW5mbyAqbWFjID0gJmFkYXB0ZXItPmh3Lm1hYzsKIAogCW1hYy0+YXV0b25lZyA9IDA7CiAKKwkvKiBNYWtlIHN1cmUgZHBseCBpcyBhdCBtb3N0IDEgYml0IGFuZCBsc2Igb2Ygc3BlZWQgaXMgbm90IHNldAorCSAqIGZvciB0aGUgc3dpdGNoKCkgYmVsb3cgdG8gd29yayAqLworCWlmICgoc3BkICYgMSkgfHwgKGRwbHggJiB+MSkpCisJCWdvdG8gZXJyX2ludmFsOworCiAJLyogRmliZXIgTklDJ3Mgb25seSBhbGxvdyAxMDAwIEdicHMgRnVsbCBkdXBsZXggKi8KIAlpZiAoKGFkYXB0ZXItPmh3LnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKSAmJgotCQlzcGRkcGx4ICE9IChTUEVFRF8xMDAwICsgRFVQTEVYX0ZVTEwpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuc3VwcG9ydGVkIFNwZWVkL0R1cGxleCBjb25maWd1cmF0aW9uXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCSAgICBzcGQgIT0gU1BFRURfMTAwMCAmJgorCSAgICBkcGx4ICE9IERVUExFWF9GVUxMKQorCQlnb3RvIGVycl9pbnZhbDsKIAotCXN3aXRjaCAoc3BkZHBseCkgeworCXN3aXRjaCAoc3BkICsgZHBseCkgewogCWNhc2UgU1BFRURfMTAgKyBEVVBMRVhfSEFMRjoKIAkJbWFjLT5mb3JjZWRfc3BlZWRfZHVwbGV4ID0gQURWRVJUSVNFXzEwX0hBTEY7CiAJCWJyZWFrOwpAQCAtNjM4MSwxMCArNjM4NywxMyBAQAogCQlicmVhazsKIAljYXNlIFNQRUVEXzEwMDAgKyBEVVBMRVhfSEFMRjogLyogbm90IHN1cHBvcnRlZCAqLwogCWRlZmF1bHQ6Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuc3VwcG9ydGVkIFNwZWVkL0R1cGxleCBjb25maWd1cmF0aW9uXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gZXJyX2ludmFsOwogCX0KIAlyZXR1cm4gMDsKKworZXJyX2ludmFsOgorCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuc3VwcG9ydGVkIFNwZWVkL0R1cGxleCBjb25maWd1cmF0aW9uXG4iKTsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogc3RhdGljIGludCBfX2lnYl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCAqZW5hYmxlX3dha2UpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2J2Zi9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9pZ2J2Zi9ldGh0b29sLmMKaW5kZXggMWQ5NDNhYS4uYjBiMTRkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdidmYvZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYnZmL2V0aHRvb2wuYwpAQCAtOTAsMTggKzkwLDE4IEBACiAJc3RhdHVzID0gZXIzMihTVEFUVVMpOwogCWlmIChzdGF0dXMgJiBFMTAwMF9TVEFUVVNfTFUpIHsKIAkJaWYgKHN0YXR1cyAmIEUxMDAwX1NUQVRVU19TUEVFRF8xMDAwKQotCQkJZWNtZC0+c3BlZWQgPSAxMDAwOworCQkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIFNQRUVEXzEwMDApOwogCQllbHNlIGlmIChzdGF0dXMgJiBFMTAwMF9TVEFUVVNfU1BFRURfMTAwKQotCQkJZWNtZC0+c3BlZWQgPSAxMDA7CisJCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgU1BFRURfMTAwKTsKIAkJZWxzZQotCQkJZWNtZC0+c3BlZWQgPSAxMDsKKwkJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBTUEVFRF8xMCk7CiAKIAkJaWYgKHN0YXR1cyAmIEUxMDAwX1NUQVRVU19GRCkKIAkJCWVjbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOwogCQllbHNlCiAJCQllY21kLT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKIAl9IGVsc2UgewotCQllY21kLT5zcGVlZCA9IC0xOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgLTEpOwogCQllY21kLT5kdXBsZXggPSAtMTsKIAl9CiAKQEAgLTM5MSwxMSArMzkxLDYgQEAKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CiAKLXN0YXRpYyBpbnQgaWdidmZfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBpZ2J2Zl9nZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICplYykKIHsKQEAgLTUyNyw3ICs1MjIsNiBAQAogCS5zZWxmX3Rlc3QJCT0gaWdidmZfZGlhZ190ZXN0LAogCS5nZXRfc3NldF9jb3VudAkJPSBpZ2J2Zl9nZXRfc3NldF9jb3VudCwKIAkuZ2V0X3N0cmluZ3MJCT0gaWdidmZfZ2V0X3N0cmluZ3MsCi0JLnBoeXNfaWQJCT0gaWdidmZfcGh5c19pZCwKIAkuZ2V0X2V0aHRvb2xfc3RhdHMJPSBpZ2J2Zl9nZXRfZXRodG9vbF9zdGF0cywKIAkuZ2V0X2NvYWxlc2NlCQk9IGlnYnZmX2dldF9jb2FsZXNjZSwKIAkuc2V0X2NvYWxlc2NlCQk9IGlnYnZmX3NldF9jb2FsZXNjZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYnZmL25ldGRldi5jIGIvZHJpdmVycy9uZXQvaWdidmYvbmV0ZGV2LmMKaW5kZXggMWQwNGNhNi4uMWM3N2ZiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdidmYvbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvaWdidmYvbmV0ZGV2LmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9taWkuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAKICNpbmNsdWRlICJpZ2J2Zi5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pb2MzLWV0aC5jIGIvZHJpdmVycy9uZXQvaW9jMy1ldGguYwppbmRleCBjOGVlOGQyLi45NmM5NTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pb2MzLWV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2lvYzMtZXRoLmMKQEAgLTkwLDggKzkwLDYgQEAKIAl1MzIgZW1jciwgZWhhcl9oLCBlaGFyX2w7CiAJc3BpbmxvY2tfdCBpb2MzX2xvY2s7CiAJc3RydWN0IG1paV9pZl9pbmZvIG1paTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotI2RlZmluZSBJT0MzX0ZMQUdfUlhfQ0hFQ0tTVU1TCTEKIAogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCkBAIC02MDksNyArNjA3LDcgQEAKIAkJCQlnb3RvIG5leHQ7CiAJCQl9CiAKLQkJCWlmIChsaWtlbHkoaXAtPmZsYWdzICYgSU9DM19GTEFHX1JYX0NIRUNLU1VNUykpCisJCQlpZiAobGlrZWx5KGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkpCiAJCQkJaW9jM190Y3B1ZHBfY2hlY2tzdW0oc2tiLAogCQkJCQl3MCAmIEVSWEJVRl9JUENLU1VNX01BU0ssIGxlbik7CiAKQEAgLTEzMjgsNiArMTMyNiw3IEBACiAJZGV2LT53YXRjaGRvZ190aW1lbwk9IDUgKiBIWjsKIAlkZXYtPm5ldGRldl9vcHMJCT0gJmlvYzNfbmV0ZGV2X29wczsKIAlkZXYtPmV0aHRvb2xfb3BzCT0gJmlvYzNfZXRodG9vbF9vcHM7CisJZGV2LT5od19mZWF0dXJlcwk9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNOwogCWRldi0+ZmVhdHVyZXMJCT0gTkVUSUZfRl9JUF9DU1VNOwogCiAJc3dfcGh5c2lkMSA9IGlvYzNfbWRpb19yZWFkKGRldiwgaXAtPm1paS5waHlfaWQsIE1JSV9QSFlTSUQxKTsKQEAgLTE2MTgsMzcgKzE2MTcsMTIgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyB1MzIgaW9jM19nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpb2MzX3ByaXZhdGUgKmlwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybiBpcC0+ZmxhZ3MgJiBJT0MzX0ZMQUdfUlhfQ0hFQ0tTVU1TOwotfQotCi1zdGF0aWMgaW50IGlvYzNfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IGlvYzNfcHJpdmF0ZSAqaXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0Jc3Bpbl9sb2NrX2JoKCZpcC0+aW9jM19sb2NrKTsKLQlpZiAoZGF0YSkKLQkJaXAtPmZsYWdzIHw9IElPQzNfRkxBR19SWF9DSEVDS1NVTVM7Ci0JZWxzZQotCQlpcC0+ZmxhZ3MgJj0gfklPQzNfRkxBR19SWF9DSEVDS1NVTVM7Ci0Jc3Bpbl91bmxvY2tfYmgoJmlwLT5pb2MzX2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaW9jM19ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JCT0gaW9jM19nZXRfZHJ2aW5mbywKIAkuZ2V0X3NldHRpbmdzCQk9IGlvYzNfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MJCT0gaW9jM19zZXRfc2V0dGluZ3MsCiAJLm53YXlfcmVzZXQJCT0gaW9jM19ud2F5X3Jlc2V0LAogCS5nZXRfbGluawkJPSBpb2MzX2dldF9saW5rLAotCS5nZXRfcnhfY3N1bQkJPSBpb2MzX2dldF9yeF9jc3VtLAotCS5zZXRfcnhfY3N1bQkJPSBpb2MzX3NldF9yeF9jc3VtLAotCS5nZXRfdHhfY3N1bQkJPSBldGh0b29sX29wX2dldF90eF9jc3VtLAotCS5zZXRfdHhfY3N1bQkJPSBldGh0b29sX29wX3NldF90eF9jc3VtCiB9OwogCiBzdGF0aWMgaW50IGlvYzNfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvYWxpLWlyY2MuYyBiL2RyaXZlcnMvbmV0L2lyZGEvYWxpLWlyY2MuYwppbmRleCA4NzIxODNmLi5kNTMyZGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2FsaS1pcmNjLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9hbGktaXJjYy5jCkBAIC0xODAwLDcgKzE4MDAsNyBAQAogCU1lc3NhZ2VDb3VudCA9IGluYihpb2Jhc2UrIEZJUl9MU1IpJjB4MDc7CiAJCiAJaWYgKE1lc3NhZ2VDb3VudCA+IDApCQotCQlJUkRBX0RFQlVHKDAsICIlcygpLCBNZXNzc2FnZSBjb3VudCA9ICVkLFxuIiwgX19mdW5jX18gLCBNZXNzYWdlQ291bnQpOworCQlJUkRBX0RFQlVHKDAsICIlcygpLCBNZXNzYWdlIGNvdW50ID0gJWQsXG4iLCBfX2Z1bmNfXyAsIE1lc3NhZ2VDb3VudCk7CiAJCQogCWZvciAoaT0wOyBpPD1NZXNzYWdlQ291bnQ7IGkrKykKIAl7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2lydHR5LXNpci5jIGIvZHJpdmVycy9uZXQvaXJkYS9pcnR0eS1zaXIuYwppbmRleCAzMzUyYjI0Li4wMzU4NjFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2lydHR5LXNpci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvaXJ0dHktc2lyLmMKQEAgLTIxNiwyMyArMjE2LDIzIEBACiAgKiB1c2JzZXJpYWw6CXVyYi1jb21wbGV0ZS1pbnRlcnJ1cHQgLyBzb2Z0aW50CiAgKi8KIAotc3RhdGljIHZvaWQgaXJ0dHlfcmVjZWl2ZV9idWYoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqY3AsCi0JCQkgICAgICBjaGFyICpmcCwgaW50IGNvdW50KSAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXJ0dHlfcmVjZWl2ZV9idWYoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqY3AsIGNoYXIgKmZwLCBpbnQgY291bnQpCiB7CiAJc3RydWN0IHNpcl9kZXYgKmRldjsKIAlzdHJ1Y3Qgc2lydHR5X2NiICpwcml2ID0gdHR5LT5kaXNjX2RhdGE7CiAJaW50CWk7CiAKLQlJUkRBX0FTU0VSVChwcml2ICE9IE5VTEwsIHJldHVybjspOwotCUlSREFfQVNTRVJUKHByaXYtPm1hZ2ljID09IElSVFRZX01BR0lDLCByZXR1cm47KTsKKwlJUkRBX0FTU0VSVChwcml2ICE9IE5VTEwsIHJldHVybiAtRU5PREVWOyk7CisJSVJEQV9BU1NFUlQocHJpdi0+bWFnaWMgPT0gSVJUVFlfTUFHSUMsIHJldHVybiAtRUlOVkFMOyk7CiAKIAlpZiAodW5saWtlbHkoY291bnQ9PTApKQkJLyogeWVzLCB0aGlzIGhhcHBlbnMgKi8KLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAogCWRldiA9IHByaXYtPmRldjsKIAlpZiAoIWRldikgewogCQlJUkRBX1dBUk5JTkcoIiVzKCksIG5vdCByZWFkeSB5ZXQhXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKQEAgLTI0MiwxMSArMjQyLDEzIEBACiAgCQlpZiAoZnAgJiYgKmZwKyspIHsgCiAJCQlJUkRBX0RFQlVHKDAsICJGcmFtaW5nIG9yIHBhcml0eSBlcnJvciFcbiIpOwogCQkJc2lyZGV2X3JlY2VpdmUoZGV2LCBOVUxMLCAwKTsJLyogbm90aWZ5IHNpcl9kZXYgKHVwZGF0aW5nIHN0YXRzKSAqLwotCQkJcmV0dXJuOworCQkJcmV0dXJuIC1FSU5WQUw7CiAgCQl9CiAJfQogCiAJc2lyZGV2X3JlY2VpdmUoZGV2LCBjcCwgY291bnQpOworCisJcmV0dXJuIGNvdW50OwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMgYi9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYwppbmRleCA4ODAwZTFmLi42OWI1NzA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYwpAQCAtMjIyLDE5ICsyMjIsMTkgQEAKIHN0YXRpYyB2b2lkIHNtc2NfaXJjY19zaXJfd2FpdF9od190cmFuc21pdHRlcl9maW5pc2goc3RydWN0IHNtc2NfaXJjY19jYiAqc2VsZik7CiAKIC8qIFByb2JpbmcgKi8KLXN0YXRpYyBpbnQgX19pbml0IHNtc2NfaXJjY19sb29rX2Zvcl9jaGlwcyh2b2lkKTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc21zY19jaGlwICogX19pbml0IHNtc2NfaXJjY19wcm9iZSh1bnNpZ25lZCBzaG9ydCBjZmdfYmFzZSwgdTggcmVnLCBjb25zdCBzdHJ1Y3Qgc21zY19jaGlwICpjaGlwLCBjaGFyICp0eXBlKTsKLXN0YXRpYyBpbnQgX19pbml0IHNtc2Nfc3VwZXJpb19mbGF0KGNvbnN0IHN0cnVjdCBzbXNjX2NoaXAgKmNoaXBzLCB1bnNpZ25lZCBzaG9ydCBjZmdfYmFzZSwgY2hhciAqdHlwZSk7Ci1zdGF0aWMgaW50IF9faW5pdCBzbXNjX3N1cGVyaW9fcGFnZWQoY29uc3Qgc3RydWN0IHNtc2NfY2hpcCAqY2hpcHMsIHVuc2lnbmVkIHNob3J0IGNmZ19iYXNlLCBjaGFyICp0eXBlKTsKLXN0YXRpYyBpbnQgX19pbml0IHNtc2Nfc3VwZXJpb19mZGModW5zaWduZWQgc2hvcnQgY2ZnX2Jhc2UpOwotc3RhdGljIGludCBfX2luaXQgc21zY19zdXBlcmlvX2xwYyh1bnNpZ25lZCBzaG9ydCBjZmdfYmFzZSk7CitzdGF0aWMgaW50IHNtc2NfaXJjY19sb29rX2Zvcl9jaGlwcyh2b2lkKTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc21zY19jaGlwICogc21zY19pcmNjX3Byb2JlKHVuc2lnbmVkIHNob3J0IGNmZ19iYXNlLCB1OCByZWcsIGNvbnN0IHN0cnVjdCBzbXNjX2NoaXAgKmNoaXAsIGNoYXIgKnR5cGUpOworc3RhdGljIGludCBzbXNjX3N1cGVyaW9fZmxhdChjb25zdCBzdHJ1Y3Qgc21zY19jaGlwICpjaGlwcywgdW5zaWduZWQgc2hvcnQgY2ZnX2Jhc2UsIGNoYXIgKnR5cGUpOworc3RhdGljIGludCBzbXNjX3N1cGVyaW9fcGFnZWQoY29uc3Qgc3RydWN0IHNtc2NfY2hpcCAqY2hpcHMsIHVuc2lnbmVkIHNob3J0IGNmZ19iYXNlLCBjaGFyICp0eXBlKTsKK3N0YXRpYyBpbnQgc21zY19zdXBlcmlvX2ZkYyh1bnNpZ25lZCBzaG9ydCBjZmdfYmFzZSk7CitzdGF0aWMgaW50IHNtc2Nfc3VwZXJpb19scGModW5zaWduZWQgc2hvcnQgY2ZnX2Jhc2UpOwogI2lmZGVmIENPTkZJR19QQ0kKLXN0YXRpYyBpbnQgX19pbml0IHByZWNvbmZpZ3VyZV9zbXNjX2NoaXAoc3RydWN0IHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbiAqY29uZik7Ci1zdGF0aWMgaW50IF9faW5pdCBwcmVjb25maWd1cmVfdGhyb3VnaF84MjgwMShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3Qgc21zY19pcmNjX3N1YnN5c3RlbV9jb25maWd1cmF0aW9uICpjb25mKTsKLXN0YXRpYyB2b2lkIF9faW5pdCBwcmVjb25maWd1cmVfYWxpX3BvcnQoc3RydWN0IHBjaV9kZXYgKmRldiwKK3N0YXRpYyBpbnQgcHJlY29uZmlndXJlX3Ntc2NfY2hpcChzdHJ1Y3Qgc21zY19pcmNjX3N1YnN5c3RlbV9jb25maWd1cmF0aW9uICpjb25mKTsKK3N0YXRpYyBpbnQgcHJlY29uZmlndXJlX3Rocm91Z2hfODI4MDEoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbiAqY29uZik7CitzdGF0aWMgdm9pZCBwcmVjb25maWd1cmVfYWxpX3BvcnQoc3RydWN0IHBjaV9kZXYgKmRldiwKIAkJCQkJIHVuc2lnbmVkIHNob3J0IHBvcnQpOwotc3RhdGljIGludCBfX2luaXQgcHJlY29uZmlndXJlX3Rocm91Z2hfYWxpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24gKmNvbmYpOwotc3RhdGljIGludCBfX2luaXQgc21zY19pcmNjX3ByZWNvbmZpZ3VyZV9zdWJzeXN0ZW1zKHVuc2lnbmVkIHNob3J0IGlyY2NfY2ZnLAorc3RhdGljIGludCBwcmVjb25maWd1cmVfdGhyb3VnaF9hbGkoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbiAqY29uZik7CitzdGF0aWMgaW50IHNtc2NfaXJjY19wcmVjb25maWd1cmVfc3Vic3lzdGVtcyh1bnNpZ25lZCBzaG9ydCBpcmNjX2NmZywKIAkJCQkJCSAgICB1bnNpZ25lZCBzaG9ydCBpcmNjX2ZpciwKIAkJCQkJCSAgICB1bnNpZ25lZCBzaG9ydCBpcmNjX3NpciwKIAkJCQkJCSAgICB1bnNpZ25lZCBjaGFyIGlyY2NfZG1hLApAQCAtMzY2LDcgKzM2Niw3IEBACiB9CiAKIC8qIFBOUCBob3RwbHVnIHN1cHBvcnQgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCBzbXNjX2lyY2NfcG5wX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgc21zY19pcmNjX3BucF90YWJsZVtdIF9fZGV2aW5pdGNvbnN0ID0gewogCXsgLmlkID0gIlNNQ2YwMTAiLCAuZHJpdmVyX2RhdGEgPSAwIH0sCiAJLyogYW5kIHByZXN1bWFibHkgb3RoZXJzICovCiAJeyB9CkBAIC01MTUsNyArNTE1LDcgQEAKICAqICAgIFRyeSB0byBvcGVuIGRyaXZlciBpbnN0YW5jZQogICoKICAqLwotc3RhdGljIGludCBfX2luaXQgc21zY19pcmNjX29wZW4odW5zaWduZWQgaW50IGZpcl9iYXNlLCB1bnNpZ25lZCBpbnQgc2lyX2Jhc2UsIHU4IGRtYSwgdTggaXJxKQorc3RhdGljIGludCBfX2RldmluaXQgc21zY19pcmNjX29wZW4odW5zaWduZWQgaW50IGZpcl9iYXNlLCB1bnNpZ25lZCBpbnQgc2lyX2Jhc2UsIHU4IGRtYSwgdTggaXJxKQogewogCXN0cnVjdCBzbXNjX2lyY2NfY2IgKnNlbGY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTIyNzMsNyArMjI3Myw3IEBACiB9CiAKIAotc3RhdGljIGludCBfX2luaXQgc21zY19hY2Nlc3ModW5zaWduZWQgc2hvcnQgY2ZnX2Jhc2UsIHVuc2lnbmVkIGNoYXIgcmVnKQorc3RhdGljIGludCBfX2RldmluaXQgc21zY19hY2Nlc3ModW5zaWduZWQgc2hvcnQgY2ZnX2Jhc2UsIHVuc2lnbmVkIGNoYXIgcmVnKQogewogCUlSREFfREVCVUcoMSwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAKQEAgLTIyODEsNyArMjI4MSw3IEBACiAJcmV0dXJuIGluYihjZmdfYmFzZSkgIT0gcmVnID8gLTEgOiAwOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNtc2NfY2hpcCAqIF9faW5pdCBzbXNjX2lyY2NfcHJvYmUodW5zaWduZWQgc2hvcnQgY2ZnX2Jhc2UsIHU4IHJlZywgY29uc3Qgc3RydWN0IHNtc2NfY2hpcCAqY2hpcCwgY2hhciAqdHlwZSkKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc21zY19jaGlwICogX19kZXZpbml0IHNtc2NfaXJjY19wcm9iZSh1bnNpZ25lZCBzaG9ydCBjZmdfYmFzZSwgdTggcmVnLCBjb25zdCBzdHJ1Y3Qgc21zY19jaGlwICpjaGlwLCBjaGFyICp0eXBlKQogewogCXU4IGRldmlkLCB4ZGV2aWQsIHJldjsKIApAQCAtMjQwNiw3ICsyNDA2LDcgQEAKICNpZmRlZiBDT05GSUdfUENJCiAjZGVmaW5lIFBDSUlEX1ZFTkRPUl9JTlRFTCAweDgwODYKICNkZWZpbmUgUENJSURfVkVORE9SX0FMSSAweDEwYjkKLXN0YXRpYyBzdHJ1Y3Qgc21zY19pcmNjX3N1YnN5c3RlbV9jb25maWd1cmF0aW9uIHN1YnN5c3RlbV9jb25maWd1cmF0aW9uc1tdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbiBzdWJzeXN0ZW1fY29uZmlndXJhdGlvbnNbXSBfX2RldmluaXRjb25zdCA9IHsKIAkvKgogCSAqIFN1YnN5c3RlbXMgbmVlZGluZyBlbnRyaWVzOgogCSAqIDB4MTBiOToweDE1MzMgMHgxMDNjOjB4MDg1MCBIUCBueDkwMTAgZmFtaWx5CkBAIC0yNTMyLDcgKzI1MzIsNyBAQAogICogKEZJUiBwb3J0LCBTSVIgcG9ydCwgRklSIERNQSwgRklSIElSUSkKICAqIHRocm91Z2ggdGhlIGNoaXAgY29uZmlndXJhdGlvbiBwb3J0LgogICovCi1zdGF0aWMgaW50IF9faW5pdCBwcmVjb25maWd1cmVfc21zY19jaGlwKHN0cnVjdAorc3RhdGljIGludCBfX2RldmluaXQgcHJlY29uZmlndXJlX3Ntc2NfY2hpcChzdHJ1Y3QKIAkJCQkJIHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbgogCQkJCQkgKmNvbmYpCiB7CkBAIC0yNjMzLDcgKzI2MzMsNyBAQAogICogb3IgSW50ZWwgODI4MDFEQi9EQkwgKElDSDQvSUNINC1MKSBMUEMgSW50ZXJmYWNlIEJyaWRnZS4KICAqIFRoZXkgYWxsIHdvcmsgdGhlIHNhbWUgd2F5IQogICovCi1zdGF0aWMgaW50IF9faW5pdCBwcmVjb25maWd1cmVfdGhyb3VnaF84MjgwMShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorc3RhdGljIGludCBfX2RldmluaXQgcHJlY29uZmlndXJlX3Rocm91Z2hfODI4MDEoc3RydWN0IHBjaV9kZXYgKmRldiwKIAkJCQkJICAgICBzdHJ1Y3QKIAkJCQkJICAgICBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24KIAkJCQkJICAgICAqY29uZikKQEAgLTI3ODYsNyArMjc4Niw3IEBACiAgKiBUaGlzIGlzIGJhc2VkIG9uIHJldmVyc2UtZW5naW5lZXJpbmcgc2luY2UgQUxpIGRvZXMgbm90CiAgKiBwcm92aWRlIGFueSBkYXRhIHNoZWV0IGZvciB0aGUgMTUzMyBjaGlwLgogICovCi1zdGF0aWMgdm9pZCBfX2luaXQgcHJlY29uZmlndXJlX2FsaV9wb3J0KHN0cnVjdCBwY2lfZGV2ICpkZXYsCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcHJlY29uZmlndXJlX2FsaV9wb3J0KHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJCQkJCSB1bnNpZ25lZCBzaG9ydCBwb3J0KQogewogCXVuc2lnbmVkIGNoYXIgcmVnOwpAQCAtMjgyNCw3ICsyODI0LDcgQEAKIAlJUkRBX01FU1NBR0UoIkFjdGl2YXRlZCBBTGkgMTUzMyBJU0EgYnJpZGdlIHBvcnQgMHglMDR4LlxuIiwgcG9ydCk7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IHByZWNvbmZpZ3VyZV90aHJvdWdoX2FsaShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorc3RhdGljIGludCBfX2RldmluaXQgcHJlY29uZmlndXJlX3Rocm91Z2hfYWxpKHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJCQkJCSAgIHN0cnVjdAogCQkJCQkgICBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24KIAkJCQkJICAgKmNvbmYpCkBAIC0yODM3LDcgKzI4MzcsNyBAQAogCXJldHVybiBwcmVjb25maWd1cmVfc21zY19jaGlwKGNvbmYpOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBzbXNjX2lyY2NfcHJlY29uZmlndXJlX3N1YnN5c3RlbXModW5zaWduZWQgc2hvcnQgaXJjY19jZmcsCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbXNjX2lyY2NfcHJlY29uZmlndXJlX3N1YnN5c3RlbXModW5zaWduZWQgc2hvcnQgaXJjY19jZmcsCiAJCQkJCQkgICAgdW5zaWduZWQgc2hvcnQgaXJjY19maXIsCiAJCQkJCQkgICAgdW5zaWduZWQgc2hvcnQgaXJjY19zaXIsCiAJCQkJCQkgICAgdW5zaWduZWQgY2hhciBpcmNjX2RtYSwKQEAgLTI4NDksNyArMjg0OSw3IEBACiAJaW50IHJldCA9IDA7CiAKIAlmb3JfZWFjaF9wY2lfZGV2KGRldikgewotCQlzdHJ1Y3Qgc21zY19pcmNjX3N1YnN5c3RlbV9jb25maWd1cmF0aW9uICpjb25mOworCQljb25zdCBzdHJ1Y3Qgc21zY19pcmNjX3N1YnN5c3RlbV9jb25maWd1cmF0aW9uICpjb25mOwogCiAJCS8qCiAJCSAqIENhY2hlIHRoZSBzdWJzeXN0ZW0gdmVuZG9yL2RldmljZToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYi5oIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiLmgKaW5kZXggOGYzZGYwNC4uNDllODQwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYi9peGdiLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiLmgKQEAgLTE1Nyw5ICsxNTcsNiBAQAogCXUxNiBsaW5rX2R1cGxleDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHhfdGltZW91dF90YXNrOwogCi0Jc3RydWN0IHRpbWVyX2xpc3QgYmxpbmtfdGltZXI7Ci0JdW5zaWduZWQgbG9uZyBsZWRfc3RhdHVzOwotCiAJLyogVFggKi8KIAlzdHJ1Y3QgaXhnYl9kZXNjX3JpbmcgdHhfcmluZyBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCXVuc2lnbmVkIGludCByZXN0YXJ0X3F1ZXVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9ldGh0b29sLmMKaW5kZXggY2M1M2FhMS4uNmRhODkwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfZXRodG9vbC5jCkBAIC0xMDQsMTAgKzEwNCwxMCBAQAogCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9FWFRFUk5BTDsKIAogCWlmIChuZXRpZl9jYXJyaWVyX29rKGFkYXB0ZXItPm5ldGRldikpIHsKLQkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDAwMDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIFNQRUVEXzEwMDAwKTsKIAkJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CiAJfSBlbHNlIHsKLQkJZWNtZC0+c3BlZWQgPSAtMTsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIC0xKTsKIAkJZWNtZC0+ZHVwbGV4ID0gLTE7CiAJfQogCkBAIC0xMjksOSArMTI5LDEwIEBACiBpeGdiX3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmVjbWQpCiB7CiAJc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJdTMyIHNwZWVkID0gZXRodG9vbF9jbWRfc3BlZWQoZWNtZCk7CiAKIAlpZiAoZWNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSB8fAotCSAgIGVjbWQtPnNwZWVkICsgZWNtZC0+ZHVwbGV4ICE9IFNQRUVEXzEwMDAwICsgRFVQTEVYX0ZVTEwpCisJICAgIChzcGVlZCArIGVjbWQtPmR1cGxleCAhPSBTUEVFRF8xMDAwMCArIERVUExFWF9GVUxMKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAobmV0aWZfcnVubmluZyhhZGFwdGVyLT5uZXRkZXYpKSB7CkBAIC02MTAsNDYgKzYxMSwyNCBAQAogCXJldHVybiBlcnI7CiB9CiAKLS8qIHRvZ2dsZSBMRUQgNCB0aW1lcyBwZXIgc2Vjb25kID0gMiAiYmxpbmtzIiBwZXIgc2Vjb25kICovCi0jZGVmaW5lIElYR0JfSURfSU5URVJWQUwJKEhaLzQpCi0KLS8qIGJpdCBkZWZpbmVzIGZvciBhZGFwdGVyLT5sZWRfc3RhdHVzICovCi0jZGVmaW5lIElYR0JfTEVEX09OCQkwCi0KLXN0YXRpYyB2b2lkCi1peGdiX2xlZF9ibGlua19jYWxsYmFjayh1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgaXhnYl9hZGFwdGVyICopZGF0YTsKLQotCWlmICh0ZXN0X2FuZF9jaGFuZ2VfYml0KElYR0JfTEVEX09OLCAmYWRhcHRlci0+bGVkX3N0YXR1cykpCi0JCWl4Z2JfbGVkX29mZigmYWRhcHRlci0+aHcpOwotCWVsc2UKLQkJaXhnYl9sZWRfb24oJmFkYXB0ZXItPmh3KTsKLQotCW1vZF90aW1lcigmYWRhcHRlci0+YmxpbmtfdGltZXIsIGppZmZpZXMgKyBJWEdCX0lEX0lOVEVSVkFMKTsKLX0KLQogc3RhdGljIGludAotaXhnYl9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQoraXhnYl9zZXRfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBlbnVtIGV0aHRvb2xfcGh5c19pZF9zdGF0ZSBzdGF0ZSkKIHsKIAlzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAotCWlmICghZGF0YSkKLQkJZGF0YSA9IElOVF9NQVg7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgRVRIVE9PTF9JRF9BQ1RJVkU6CisJCXJldHVybiAyOwogCi0JaWYgKCFhZGFwdGVyLT5ibGlua190aW1lci5mdW5jdGlvbikgewotCQlpbml0X3RpbWVyKCZhZGFwdGVyLT5ibGlua190aW1lcik7Ci0JCWFkYXB0ZXItPmJsaW5rX3RpbWVyLmZ1bmN0aW9uID0gaXhnYl9sZWRfYmxpbmtfY2FsbGJhY2s7Ci0JCWFkYXB0ZXItPmJsaW5rX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylhZGFwdGVyOworCWNhc2UgRVRIVE9PTF9JRF9PTjoKKwkJaXhnYl9sZWRfb24oJmFkYXB0ZXItPmh3KTsKKwkJYnJlYWs7CisKKwljYXNlIEVUSFRPT0xfSURfT0ZGOgorCWNhc2UgRVRIVE9PTF9JRF9JTkFDVElWRToKKwkJaXhnYl9sZWRfb2ZmKCZhZGFwdGVyLT5odyk7CiAJfQogCi0JbW9kX3RpbWVyKCZhZGFwdGVyLT5ibGlua190aW1lciwgamlmZmllcyk7Ci0KLQltc2xlZXBfaW50ZXJydXB0aWJsZShkYXRhICogMTAwMCk7Ci0JZGVsX3RpbWVyX3N5bmMoJmFkYXB0ZXItPmJsaW5rX3RpbWVyKTsKLQlpeGdiX2xlZF9vZmYoJmFkYXB0ZXItPmh3KTsKLQljbGVhcl9iaXQoSVhHQl9MRURfT04sICZhZGFwdGVyLT5sZWRfc3RhdHVzKTsKLQogCXJldHVybiAwOwogfQogCkBAIC03NjYsNyArNzQ1LDcgQEAKIAkuc2V0X21zZ2xldmVsID0gaXhnYl9zZXRfbXNnbGV2ZWwsCiAJLnNldF90c28gPSBpeGdiX3NldF90c28sCiAJLmdldF9zdHJpbmdzID0gaXhnYl9nZXRfc3RyaW5ncywKLQkucGh5c19pZCA9IGl4Z2JfcGh5c19pZCwKKwkuc2V0X3BoeXNfaWQgPSBpeGdiX3NldF9waHlzX2lkLAogCS5nZXRfc3NldF9jb3VudCA9IGl4Z2JfZ2V0X3NzZXRfY291bnQsCiAJLmdldF9ldGh0b29sX3N0YXRzID0gaXhnYl9nZXRfZXRodG9vbF9zdGF0cywKIAkuZ2V0X2ZsYWdzID0gZXRodG9vbF9vcF9nZXRfZmxhZ3MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYwppbmRleCAwZjY4MWFjLi42YTEzMGViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAogCisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlICJpeGdiLmgiCiAKIGNoYXIgaXhnYl9kcml2ZXJfbmFtZVtdID0gIml4Z2IiOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUuaCBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlLmgKaW5kZXggOGQ0NjgwMi4uZTQ2N2IyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUuaAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5oCkBAIC0xMDYsNiArMTA2LDcgQEAKICNkZWZpbmUgSVhHQkVfTUFYX1ZGX0ZVTkNUSU9OUyAgICAgICAgICA2NAogI2RlZmluZSBJWEdCRV9NQVhfVkZUQV9FTlRSSUVTICAgICAgICAgIDEyOAogI2RlZmluZSBNQVhfRU1VTEFUSU9OX01BQ19BRERSUyAgICAgICAgIDE2CisjZGVmaW5lIElYR0JFX01BWF9QRl9NQUNWTEFOUyAgICAgICAgICAgMTUKICNkZWZpbmUgVk1EUV9QKHApICAgKChwKSArIGFkYXB0ZXItPm51bV92ZnMpCiAKIHN0cnVjdCB2Zl9kYXRhX3N0b3JhZ2UgewpAQCAtMTIxLDYgKzEyMiwxNSBAQAogCXUxNiB0eF9yYXRlOwogfTsKIAorc3RydWN0IHZmX21hY3ZsYW5zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGw7CisJaW50IHZmOworCWludCByYXJfZW50cnk7CisJYm9vbCBmcmVlOworCWJvb2wgaXNfbWFjdmxhbjsKKwl1OCB2Zl9tYWN2bGFuW0VUSF9BTEVOXTsKK307CisKIC8qIHdyYXBwZXIgYXJvdW5kIGEgcG9pbnRlciB0byBhIHNvY2tldCBidWZmZXIsCiAgKiBzbyBhIERNQSBoYW5kbGUgY2FuIGJlIHN0b3JlZCBhbG9uZyB3aXRoIHRoZSBidWZmZXIgKi8KIHN0cnVjdCBpeGdiZV90eF9idWZmZXIgewpAQCAtMzMxLDEwICszNDEsNTIgQEAKIAogLyogYm9hcmQgc3BlY2lmaWMgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSAqLwogc3RydWN0IGl4Z2JlX2FkYXB0ZXIgewotCXN0cnVjdCB0aW1lcl9saXN0IHdhdGNoZG9nX3RpbWVyOworCXVuc2lnbmVkIGxvbmcgc3RhdGU7CisKKwkvKiBTb21lIGZlYXR1cmVzIG5lZWQgdHJpLXN0YXRlIGNhcGFiaWxpdHksCisJICogdGh1cyB0aGUgYWRkaXRpb25hbCAqX0NBUEFCTEUgZmxhZ3MuCisJICovCisJdTMyIGZsYWdzOworI2RlZmluZSBJWEdCRV9GTEFHX1JYX0NTVU1fRU5BQkxFRCAgICAgICAgICAgICAgKHUzMikoMSkKKyNkZWZpbmUgSVhHQkVfRkxBR19NU0lfQ0FQQUJMRSAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMSkKKyNkZWZpbmUgSVhHQkVfRkxBR19NU0lfRU5BQkxFRCAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMikKKyNkZWZpbmUgSVhHQkVfRkxBR19NU0lYX0NBUEFCTEUgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMykKKyNkZWZpbmUgSVhHQkVfRkxBR19NU0lYX0VOQUJMRUQgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgNCkKKyNkZWZpbmUgSVhHQkVfRkxBR19SWF8xQlVGX0NBUEFCTEUgICAgICAgICAgICAgICh1MzIpKDEgPDwgNikKKyNkZWZpbmUgSVhHQkVfRkxBR19SWF9QU19DQVBBQkxFICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgNykKKyNkZWZpbmUgSVhHQkVfRkxBR19SWF9QU19FTkFCTEVEICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgOCkKKyNkZWZpbmUgSVhHQkVfRkxBR19JTl9ORVRQT0xMICAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgOSkKKyNkZWZpbmUgSVhHQkVfRkxBR19EQ0FfRU5BQkxFRCAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMTApCisjZGVmaW5lIElYR0JFX0ZMQUdfRENBX0NBUEFCTEUgICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDExKQorI2RlZmluZSBJWEdCRV9GTEFHX0lNSVJfRU5BQkxFRCAgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAxMikKKyNkZWZpbmUgSVhHQkVfRkxBR19NUV9DQVBBQkxFICAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMTMpCisjZGVmaW5lIElYR0JFX0ZMQUdfRENCX0VOQUJMRUQgICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDE0KQorI2RlZmluZSBJWEdCRV9GTEFHX1JTU19FTkFCTEVEICAgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAxNikKKyNkZWZpbmUgSVhHQkVfRkxBR19SU1NfQ0FQQUJMRSAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMTcpCisjZGVmaW5lIElYR0JFX0ZMQUdfVk1EUV9DQVBBQkxFICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDE4KQorI2RlZmluZSBJWEdCRV9GTEFHX1ZNRFFfRU5BQkxFRCAgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAxOSkKKyNkZWZpbmUgSVhHQkVfRkxBR19GQU5fRkFJTF9DQVBBQkxFICAgICAgICAgICAgICh1MzIpKDEgPDwgMjApCisjZGVmaW5lIElYR0JFX0ZMQUdfTkVFRF9MSU5LX1VQREFURSAgICAgICAgICAgICAodTMyKSgxIDw8IDIyKQorI2RlZmluZSBJWEdCRV9GTEFHX05FRURfTElOS19DT05GSUcgICAgICAgICAgICAgKHUzMikoMSA8PCAyMykKKyNkZWZpbmUgSVhHQkVfRkxBR19GRElSX0hBU0hfQ0FQQUJMRSAgICAgICAgICAgICh1MzIpKDEgPDwgMjQpCisjZGVmaW5lIElYR0JFX0ZMQUdfRkRJUl9QRVJGRUNUX0NBUEFCTEUgICAgICAgICAodTMyKSgxIDw8IDI1KQorI2RlZmluZSBJWEdCRV9GTEFHX0ZDT0VfQ0FQQUJMRSAgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAyNikKKyNkZWZpbmUgSVhHQkVfRkxBR19GQ09FX0VOQUJMRUQgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMjcpCisjZGVmaW5lIElYR0JFX0ZMQUdfU1JJT1ZfQ0FQQUJMRSAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDI4KQorI2RlZmluZSBJWEdCRV9GTEFHX1NSSU9WX0VOQUJMRUQgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAyOSkKKworCXUzMiBmbGFnczI7CisjZGVmaW5lIElYR0JFX0ZMQUcyX1JTQ19DQVBBQkxFICAgICAgICAgICAgICAgICAodTMyKSgxKQorI2RlZmluZSBJWEdCRV9GTEFHMl9SU0NfRU5BQkxFRCAgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAxKQorI2RlZmluZSBJWEdCRV9GTEFHMl9URU1QX1NFTlNPUl9DQVBBQkxFICAgICAgICAgKHUzMikoMSA8PCAyKQorI2RlZmluZSBJWEdCRV9GTEFHMl9URU1QX1NFTlNPUl9FVkVOVCAgICAgICAgICAgKHUzMikoMSA8PCAzKQorI2RlZmluZSBJWEdCRV9GTEFHMl9TRUFSQ0hfRk9SX1NGUCAgICAgICAgICAgICAgKHUzMikoMSA8PCA0KQorI2RlZmluZSBJWEdCRV9GTEFHMl9TRlBfTkVFRFNfUkVTRVQgICAgICAgICAgICAgKHUzMikoMSA8PCA1KQorI2RlZmluZSBJWEdCRV9GTEFHMl9SRVNFVF9SRVFVRVNURUQgICAgICAgICAgICAgKHUzMikoMSA8PCA2KQorI2RlZmluZSBJWEdCRV9GTEFHMl9GRElSX1JFUVVJUkVTX1JFSU5JVCAgICAgICAgKHUzMikoMSA8PCA3KQorCiAJdW5zaWduZWQgbG9uZyBhY3RpdmVfdmxhbnNbQklUU19UT19MT05HUyhWTEFOX05fVklEKV07CiAJdTE2IGJkX251bWJlcjsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfdGFzazsKIAlzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IgKnFfdmVjdG9yW01BWF9NU0lYX1FfVkVDVE9SU107CiAKIAkvKiBEQ0IgcGFyYW1ldGVycyAqLwpAQCAtMzc3LDQzICs0MjksNiBAQAogCXUzMiBhbGxvY19yeF9wYWdlX2ZhaWxlZDsKIAl1MzIgYWxsb2NfcnhfYnVmZl9mYWlsZWQ7CiAKLQkvKiBTb21lIGZlYXR1cmVzIG5lZWQgdHJpLXN0YXRlIGNhcGFiaWxpdHksCi0JICogdGh1cyB0aGUgYWRkaXRpb25hbCAqX0NBUEFCTEUgZmxhZ3MuCi0JICovCi0JdTMyIGZsYWdzOwotI2RlZmluZSBJWEdCRV9GTEFHX1JYX0NTVU1fRU5BQkxFRCAgICAgICAgICAgICAgKHUzMikoMSkKLSNkZWZpbmUgSVhHQkVfRkxBR19NU0lfQ0FQQUJMRSAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMSkKLSNkZWZpbmUgSVhHQkVfRkxBR19NU0lfRU5BQkxFRCAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMikKLSNkZWZpbmUgSVhHQkVfRkxBR19NU0lYX0NBUEFCTEUgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMykKLSNkZWZpbmUgSVhHQkVfRkxBR19NU0lYX0VOQUJMRUQgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgNCkKLSNkZWZpbmUgSVhHQkVfRkxBR19SWF8xQlVGX0NBUEFCTEUgICAgICAgICAgICAgICh1MzIpKDEgPDwgNikKLSNkZWZpbmUgSVhHQkVfRkxBR19SWF9QU19DQVBBQkxFICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgNykKLSNkZWZpbmUgSVhHQkVfRkxBR19SWF9QU19FTkFCTEVEICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgOCkKLSNkZWZpbmUgSVhHQkVfRkxBR19JTl9ORVRQT0xMICAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgOSkKLSNkZWZpbmUgSVhHQkVfRkxBR19EQ0FfRU5BQkxFRCAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMTApCi0jZGVmaW5lIElYR0JFX0ZMQUdfRENBX0NBUEFCTEUgICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDExKQotI2RlZmluZSBJWEdCRV9GTEFHX0lNSVJfRU5BQkxFRCAgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAxMikKLSNkZWZpbmUgSVhHQkVfRkxBR19NUV9DQVBBQkxFICAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMTMpCi0jZGVmaW5lIElYR0JFX0ZMQUdfRENCX0VOQUJMRUQgICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDE0KQotI2RlZmluZSBJWEdCRV9GTEFHX1JTU19FTkFCTEVEICAgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAxNikKLSNkZWZpbmUgSVhHQkVfRkxBR19SU1NfQ0FQQUJMRSAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMTcpCi0jZGVmaW5lIElYR0JFX0ZMQUdfVk1EUV9DQVBBQkxFICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDE4KQotI2RlZmluZSBJWEdCRV9GTEFHX1ZNRFFfRU5BQkxFRCAgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAxOSkKLSNkZWZpbmUgSVhHQkVfRkxBR19GQU5fRkFJTF9DQVBBQkxFICAgICAgICAgICAgICh1MzIpKDEgPDwgMjApCi0jZGVmaW5lIElYR0JFX0ZMQUdfTkVFRF9MSU5LX1VQREFURSAgICAgICAgICAgICAodTMyKSgxIDw8IDIyKQotI2RlZmluZSBJWEdCRV9GTEFHX0lOX1NGUF9MSU5LX1RBU0sgICAgICAgICAgICAgKHUzMikoMSA8PCAyMykKLSNkZWZpbmUgSVhHQkVfRkxBR19JTl9TRlBfTU9EX1RBU0sgICAgICAgICAgICAgICh1MzIpKDEgPDwgMjQpCi0jZGVmaW5lIElYR0JFX0ZMQUdfRkRJUl9IQVNIX0NBUEFCTEUgICAgICAgICAgICAodTMyKSgxIDw8IDI1KQotI2RlZmluZSBJWEdCRV9GTEFHX0ZESVJfUEVSRkVDVF9DQVBBQkxFICAgICAgICAgKHUzMikoMSA8PCAyNikKLSNkZWZpbmUgSVhHQkVfRkxBR19GQ09FX0NBUEFCTEUgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMjcpCi0jZGVmaW5lIElYR0JFX0ZMQUdfRkNPRV9FTkFCTEVEICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDI4KQotI2RlZmluZSBJWEdCRV9GTEFHX1NSSU9WX0NBUEFCTEUgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAyOSkKLSNkZWZpbmUgSVhHQkVfRkxBR19TUklPVl9FTkFCTEVEICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMzApCi0KLQl1MzIgZmxhZ3MyOwotI2RlZmluZSBJWEdCRV9GTEFHMl9SU0NfQ0FQQUJMRSAgICAgICAgICAgICAgICAgKHUzMikoMSkKLSNkZWZpbmUgSVhHQkVfRkxBRzJfUlNDX0VOQUJMRUQgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMSkKLSNkZWZpbmUgSVhHQkVfRkxBRzJfVEVNUF9TRU5TT1JfQ0FQQUJMRSAgICAgICAgICh1MzIpKDEgPDwgMikKIC8qIGRlZmF1bHQgdG8gdHJ5aW5nIGZvciBmb3VyIHNlY29uZHMgKi8KICNkZWZpbmUgSVhHQkVfVFJZX0xJTktfVElNRU9VVCAoNCAqIEhaKQogCkBAIC00MzQsNyArNDQ5LDYgQEAKIAl1MzIgcnhfZWl0cl9wYXJhbTsKIAl1MzIgdHhfZWl0cl9wYXJhbTsKIAotCXVuc2lnbmVkIGxvbmcgc3RhdGU7CiAJdTY0IHR4X2J1c3k7CiAJdW5zaWduZWQgaW50IHR4X3JpbmdfY291bnQ7CiAJdW5zaWduZWQgaW50IHJ4X3JpbmdfY291bnQ7CkBAIC00NDMsMTUgKzQ1NywxMiBAQAogCWJvb2wgbGlua191cDsKIAl1bnNpZ25lZCBsb25nIGxpbmtfY2hlY2tfdGltZW91dDsKIAotCXN0cnVjdCB3b3JrX3N0cnVjdCB3YXRjaGRvZ190YXNrOwotCXN0cnVjdCB3b3JrX3N0cnVjdCBzZnBfdGFzazsKLQlzdHJ1Y3QgdGltZXJfbGlzdCBzZnBfdGltZXI7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IG11bHRpc3BlZWRfZmliZXJfdGFzazsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2ZwX2NvbmZpZ19tb2R1bGVfdGFzazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2VydmljZV90YXNrOworCXN0cnVjdCB0aW1lcl9saXN0IHNlcnZpY2VfdGltZXI7CiAJdTMyIGZkaXJfcGJhbGxvYzsKIAl1MzIgYXRyX3NhbXBsZV9yYXRlOworCXVuc2lnbmVkIGxvbmcgZmRpcl9vdmVyZmxvdzsgLyogbnVtYmVyIG9mIHRpbWVzIEFUUiB3YXMgYmFja2VkIG9mZiAqLwogCXNwaW5sb2NrX3QgZmRpcl9wZXJmZWN0X2xvY2s7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IGZkaXJfcmVpbml0X3Rhc2s7CiAjaWZkZWYgSVhHQkVfRkNPRQogCXN0cnVjdCBpeGdiZV9mY29lIGZjb2U7CiAjZW5kaWYgLyogSVhHQkVfRkNPRSAqLwpAQCAtNDYxLDcgKzQ3Miw3IEBACiAJdTE2IGVlcHJvbV92ZXJzaW9uOwogCiAJaW50IG5vZGU7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IGNoZWNrX292ZXJ0ZW1wX3Rhc2s7CisJdTMyIGxlZF9yZWc7CiAJdTMyIGludGVycnVwdF9ldmVudDsKIAljaGFyIGxzY19pbnRfbmFtZVtJRk5BTVNJWiArIDldOwogCkBAIC00NzAsMTMgKzQ4MSwxNyBAQAogCXVuc2lnbmVkIGludCBudW1fdmZzOwogCXN0cnVjdCB2Zl9kYXRhX3N0b3JhZ2UgKnZmaW5mbzsKIAlpbnQgdmZfcmF0ZV9saW5rX3NwZWVkOworCXN0cnVjdCB2Zl9tYWN2bGFucyB2Zl9tdnM7CisJc3RydWN0IHZmX21hY3ZsYW5zICptdl9saXN0OworCWJvb2wgYW50aXNwb29maW5nX2VuYWJsZWQ7CiB9OwogCiBlbnVtIGl4YmdlX3N0YXRlX3QgewogCV9fSVhHQkVfVEVTVElORywKIAlfX0lYR0JFX1JFU0VUVElORywKIAlfX0lYR0JFX0RPV04sCi0JX19JWEdCRV9TRlBfTU9EVUxFX05PVF9GT1VORAorCV9fSVhHQkVfU0VSVklDRV9TQ0hFRCwKKwlfX0lYR0JFX0lOX1NGUF9JTklULAogfTsKIAogc3RydWN0IGl4Z2JlX3JzY19jYiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OC5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTguYwppbmRleCA4NDVjNjc5Li44MTc5ZTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OC5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk4LmMKQEAgLTM3LDYgKzM3LDcgQEAKICNkZWZpbmUgSVhHQkVfODI1OThfUkFSX0VOVFJJRVMgICAxNgogI2RlZmluZSBJWEdCRV84MjU5OF9NQ19UQkxfU0laRSAgMTI4CiAjZGVmaW5lIElYR0JFXzgyNTk4X1ZGVF9UQkxfU0laRSAxMjgKKyNkZWZpbmUgSVhHQkVfODI1OThfUlhfUEJfU0laRQkgNTEyCiAKIHN0YXRpYyBzMzIgaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfODI1OTgoc3RydWN0IGl4Z2JlX2h3ICpodywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCBzcGVlZCwKQEAgLTE5NywxNCArMTk4LDM1IEBACiAgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQogICoKICAqICBTdGFydHMgdGhlIGhhcmR3YXJlIHVzaW5nIHRoZSBnZW5lcmljIHN0YXJ0X2h3IGZ1bmN0aW9uLgotICogIFRoZW4gc2V0IHBjaWUgY29tcGxldGlvbiB0aW1lb3V0CisgKiAgRGlzYWJsZXMgcmVsYXhlZCBvcmRlcmluZyBUaGVuIHNldCBwY2llIGNvbXBsZXRpb24gdGltZW91dAorICoKICAqKi8KIHN0YXRpYyBzMzIgaXhnYmVfc3RhcnRfaHdfODI1OTgoc3RydWN0IGl4Z2JlX2h3ICpodykKIHsKKwl1MzIgcmVndmFsOworCXUzMiBpOwogCXMzMiByZXRfdmFsID0gMDsKIAogCXJldF92YWwgPSBpeGdiZV9zdGFydF9od19nZW5lcmljKGh3KTsKIAorCS8qIERpc2FibGUgcmVsYXhlZCBvcmRlcmluZyAqLworCWZvciAoaSA9IDA7ICgoaSA8IGh3LT5tYWMubWF4X3R4X3F1ZXVlcykgJiYKKwkgICAgIChpIDwgSVhHQkVfRENBX01BWF9RVUVVRVNfODI1OTgpKTsgaSsrKSB7CisJCXJlZ3ZhbCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9EQ0FfVFhDVFJMKGkpKTsKKwkJcmVndmFsICY9IH5JWEdCRV9EQ0FfVFhDVFJMX1RYX1dCX1JPX0VOOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0RDQV9UWENUUkwoaSksIHJlZ3ZhbCk7CisJfQorCisJZm9yIChpID0gMDsgKChpIDwgaHctPm1hYy5tYXhfcnhfcXVldWVzKSAmJgorCSAgICAgKGkgPCBJWEdCRV9EQ0FfTUFYX1FVRVVFU184MjU5OCkpOyBpKyspIHsKKwkJcmVndmFsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0RDQV9SWENUUkwoaSkpOworCQlyZWd2YWwgJj0gfihJWEdCRV9EQ0FfUlhDVFJMX0RFU0NfV1JPX0VOIHwKKwkJCSAgICBJWEdCRV9EQ0FfUlhDVFJMX0RFU0NfSFNST19FTik7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRENBX1JYQ1RSTChpKSwgcmVndmFsKTsKKwl9CisKKwlody0+bWFjLnJ4X3BiX3NpemUgPSBJWEdCRV84MjU5OF9SWF9QQl9TSVpFOworCiAJLyogc2V0IHRoZSBjb21wbGV0aW9uIHRpbWVvdXQgZm9yIGludGVyZmFjZSAqLwogCWlmIChyZXRfdmFsID09IDApCiAJCWl4Z2JlX3NldF9wY2llX2NvbXBsZXRpb25fdGltZW91dChodyk7CkBAIC0xMDY0LDcgKzEwODYsNyBAQAogCQkJc2ZwX3N0YXQgPSBzZnBfc3RhdCAmIElYR0JFX0kyQ19FRVBST01fU1RBVFVTX01BU0s7CiAJCQlpZiAoc2ZwX3N0YXQgIT0gSVhHQkVfSTJDX0VFUFJPTV9TVEFUVVNfSU5fUFJPR1JFU1MpCiAJCQkJYnJlYWs7Ci0JCQltc2xlZXAoMTApOworCQkJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CiAJCX0KIAogCQlpZiAoc2ZwX3N0YXQgIT0gSVhHQkVfSTJDX0VFUFJPTV9TVEFUVVNfUEFTUykgewpAQCAtMTE4OCw2ICsxMjEwLDM4IEBACiAJcmV0dXJuIHBoeXNpY2FsX2xheWVyOwogfQogCisvKioKKyAqICBpeGdiZV9zZXRfbGFuX2lkX211bHRpX3BvcnRfcGNpZV84MjU5OCAtIFNldCBMQU4gaWQgZm9yIFBDSWUgbXVsdGlwbGUKKyAqICBwb3J0IGRldmljZXMuCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgQ2FsbHMgY29tbW9uIGZ1bmN0aW9uIGFuZCBjb3JyZWN0cyBpc3N1ZSB3aXRoIHNvbWUgc2luZ2xlIHBvcnQgZGV2aWNlcworICogIHRoYXQgZW5hYmxlIExBTjEgYnV0IG5vdCBMQU4wLgorICoqLworc3RhdGljIHZvaWQgaXhnYmVfc2V0X2xhbl9pZF9tdWx0aV9wb3J0X3BjaWVfODI1OTgoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmVfYnVzX2luZm8gKmJ1cyA9ICZody0+YnVzOworCXUxNiBwY2lfZ2VuID0gMDsKKwl1MTYgcGNpX2N0cmwyID0gMDsKKworCWl4Z2JlX3NldF9sYW5faWRfbXVsdGlfcG9ydF9wY2llKGh3KTsKKworCS8qIGNoZWNrIGlmIExBTjAgaXMgZGlzYWJsZWQgKi8KKwlody0+ZWVwcm9tLm9wcy5yZWFkKGh3LCBJWEdCRV9QQ0lFX0dFTkVSQUxfUFRSLCAmcGNpX2dlbik7CisJaWYgKChwY2lfZ2VuICE9IDApICYmIChwY2lfZ2VuICE9IDB4RkZGRikpIHsKKworCQlody0+ZWVwcm9tLm9wcy5yZWFkKGh3LCBwY2lfZ2VuICsgSVhHQkVfUENJRV9DVFJMMiwgJnBjaV9jdHJsMik7CisKKwkJLyogaWYgTEFOMCBpcyBjb21wbGV0ZWx5IGRpc2FibGVkIGZvcmNlIGZ1bmN0aW9uIHRvIDAgKi8KKwkJaWYgKChwY2lfY3RybDIgJiBJWEdCRV9QQ0lFX0NUUkwyX0xBTl9ESVNBQkxFKSAmJgorCQkgICAgIShwY2lfY3RybDIgJiBJWEdCRV9QQ0lFX0NUUkwyX0RJU0FCTEVfU0VMRUNUKSAmJgorCQkgICAgIShwY2lfY3RybDIgJiBJWEdCRV9QQ0lFX0NUUkwyX0RVTU1ZX0VOQUJMRSkpIHsKKworCQkJYnVzLT5mdW5jID0gMDsKKwkJfQorCX0KK30KKwogc3RhdGljIHN0cnVjdCBpeGdiZV9tYWNfb3BlcmF0aW9ucyBtYWNfb3BzXzgyNTk4ID0gewogCS5pbml0X2h3CQk9ICZpeGdiZV9pbml0X2h3X2dlbmVyaWMsCiAJLnJlc2V0X2h3CQk9ICZpeGdiZV9yZXNldF9od184MjU5OCwKQEAgLTExOTksNyArMTI1Myw3IEBACiAJLmdldF9tYWNfYWRkcgkJPSAmaXhnYmVfZ2V0X21hY19hZGRyX2dlbmVyaWMsCiAJLnN0b3BfYWRhcHRlcgkJPSAmaXhnYmVfc3RvcF9hZGFwdGVyX2dlbmVyaWMsCiAJLmdldF9idXNfaW5mbyAgICAgICAgICAgPSAmaXhnYmVfZ2V0X2J1c19pbmZvX2dlbmVyaWMsCi0JLnNldF9sYW5faWQgICAgICAgICAgICAgPSAmaXhnYmVfc2V0X2xhbl9pZF9tdWx0aV9wb3J0X3BjaWUsCisJLnNldF9sYW5faWQgICAgICAgICAgICAgPSAmaXhnYmVfc2V0X2xhbl9pZF9tdWx0aV9wb3J0X3BjaWVfODI1OTgsCiAJLnJlYWRfYW5hbG9nX3JlZzgJPSAmaXhnYmVfcmVhZF9hbmFsb2dfcmVnOF84MjU5OCwKIAkud3JpdGVfYW5hbG9nX3JlZzgJPSAmaXhnYmVfd3JpdGVfYW5hbG9nX3JlZzhfODI1OTgsCiAJLnNldHVwX2xpbmsJCT0gJml4Z2JlX3NldHVwX21hY19saW5rXzgyNTk4LApAQCAtMTIyNyw2ICsxMjgxLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgaXhnYmVfZWVwcm9tX29wZXJhdGlvbnMgZWVwcm9tX29wc184MjU5OCA9IHsKIAkuaW5pdF9wYXJhbXMJCT0gJml4Z2JlX2luaXRfZWVwcm9tX3BhcmFtc19nZW5lcmljLAogCS5yZWFkCQkJPSAmaXhnYmVfcmVhZF9lZXJkX2dlbmVyaWMsCisJLnJlYWRfYnVmZmVyCQk9ICZpeGdiZV9yZWFkX2VlcmRfYnVmZmVyX2dlbmVyaWMsCiAJLmNhbGNfY2hlY2tzdW0gICAgICAgICAgPSAmaXhnYmVfY2FsY19lZXByb21fY2hlY2tzdW1fZ2VuZXJpYywKIAkudmFsaWRhdGVfY2hlY2tzdW0JPSAmaXhnYmVfdmFsaWRhdGVfZWVwcm9tX2NoZWNrc3VtX2dlbmVyaWMsCiAJLnVwZGF0ZV9jaGVja3N1bQk9ICZpeGdiZV91cGRhdGVfZWVwcm9tX2NoZWNrc3VtX2dlbmVyaWMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OS5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTkuYwppbmRleCAwMGFlYmEzLi44ZWU2NjEyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTkuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OS5jCkBAIC0zOCw2ICszOCw3IEBACiAjZGVmaW5lIElYR0JFXzgyNTk5X1JBUl9FTlRSSUVTICAgMTI4CiAjZGVmaW5lIElYR0JFXzgyNTk5X01DX1RCTF9TSVpFICAgMTI4CiAjZGVmaW5lIElYR0JFXzgyNTk5X1ZGVF9UQkxfU0laRSAgMTI4CisjZGVmaW5lIElYR0JFXzgyNTk5X1JYX1BCX1NJWkUJICA1MTIKIAogc3RhdGljIHZvaWQgaXhnYmVfZGlzYWJsZV90eF9sYXNlcl9tdWx0aXNwZWVkX2ZpYmVyKHN0cnVjdCBpeGdiZV9odyAqaHcpOwogc3RhdGljIHZvaWQgaXhnYmVfZW5hYmxlX3R4X2xhc2VyX211bHRpc3BlZWRfZmliZXIoc3RydWN0IGl4Z2JlX2h3ICpodyk7CkBAIC02MSw2ICs2Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpOwogc3RhdGljIHMzMiBpeGdiZV92ZXJpZnlfZndfdmVyc2lvbl84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3N0YXRpYyBib29sIGl4Z2JlX3ZlcmlmeV9sZXNtX2Z3X2VuYWJsZWRfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodyk7CiAKIHN0YXRpYyB2b2lkIGl4Z2JlX2luaXRfbWFjX2xpbmtfb3BzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCiB7CkBAIC04Niw3ICs4OCw4IEBACiAJCWlmICgobWFjLT5vcHMuZ2V0X21lZGlhX3R5cGUoaHcpID09CiAJCSAgICAgaXhnYmVfbWVkaWFfdHlwZV9iYWNrcGxhbmUpICYmCiAJCSAgICAoaHctPnBoeS5zbWFydF9zcGVlZCA9PSBpeGdiZV9zbWFydF9zcGVlZF9hdXRvIHx8Ci0JCSAgICAgaHctPnBoeS5zbWFydF9zcGVlZCA9PSBpeGdiZV9zbWFydF9zcGVlZF9vbikpCisJCSAgICAgaHctPnBoeS5zbWFydF9zcGVlZCA9PSBpeGdiZV9zbWFydF9zcGVlZF9vbikgJiYKKwkJICAgICAhaXhnYmVfdmVyaWZ5X2xlc21fZndfZW5hYmxlZF84MjU5OShodykpCiAJCQltYWMtPm9wcy5zZXR1cF9saW5rID0gJml4Z2JlX3NldHVwX21hY19saW5rX3NtYXJ0c3BlZWQ7CiAJCWVsc2UKIAkJCW1hYy0+b3BzLnNldHVwX2xpbmsgPSAmaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTk7CkBAIC0xMDcsNyArMTEwLDYgQEAKIAogCQlyZXRfdmFsID0gaXhnYmVfZ2V0X3NmcF9pbml0X3NlcXVlbmNlX29mZnNldHMoaHcsICZsaXN0X29mZnNldCwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhX29mZnNldCk7Ci0KIAkJaWYgKHJldF92YWwgIT0gMCkKIAkJCWdvdG8gc2V0dXBfc2ZwX291dDsKIApAQCAtMTI3LDkgKzEyOSwxMyBAQAogCQl9CiAKIAkJLyogUmVsZWFzZSB0aGUgc2VtYXBob3JlICovCi0JCWl4Z2JlX3JlbGVhc2Vfc3dmd19zeW5jKGh3LCBJWEdCRV9HU1NSX01BQ19DU1JfU00pOwotCQkvKiBEZWxheSBvYnRhaW5pbmcgc2VtYXBob3JlIGFnYWluIHRvIGFsbG93IEZXIGFjY2VzcyAqLwotCQltc2xlZXAoaHctPmVlcHJvbS5zZW1hcGhvcmVfZGVsYXkpOworCQlody0+bWFjLm9wcy5yZWxlYXNlX3N3Zndfc3luYyhodywgSVhHQkVfR1NTUl9NQUNfQ1NSX1NNKTsKKwkJLyoKKwkJICogRGVsYXkgb2J0YWluaW5nIHNlbWFwaG9yZSBhZ2FpbiB0byBhbGxvdyBGVyBhY2Nlc3MsCisJCSAqIHNlbWFwaG9yZV9kZWxheSBpcyBpbiBtcyB1c2xlZXBfcmFuZ2UgbmVlZHMgdXMuCisJCSAqLworCQl1c2xlZXBfcmFuZ2UoaHctPmVlcHJvbS5zZW1hcGhvcmVfZGVsYXkgKiAxMDAwLAorCQkJICAgICBody0+ZWVwcm9tLnNlbWFwaG9yZV9kZWxheSAqIDIwMDApOwogCiAJCS8qIE5vdyByZXN0YXJ0IERTUCBieSBzZXR0aW5nIFJlc3RhcnRfQU4gYW5kIGNsZWFyaW5nIExNUyAqLwogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0FVVE9DLCAoKElYR0JFX1JFQURfUkVHKGh3LApAQCAtMTM4LDcgKzE0NCw3IEBACiAKIAkJLyogV2FpdCBmb3IgQU4gdG8gbGVhdmUgc3RhdGUgMCAqLwogCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewotCQkJbXNsZWVwKDQpOworCQkJdXNsZWVwX3JhbmdlKDQwMDAsIDgwMDApOwogCQkJcmVnX2FubHAxID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0FOTFAxKTsKIAkJCWlmIChyZWdfYW5scDEgJiBJWEdCRV9BTkxQMV9BTl9TVEFURV9NQVNLKQogCQkJCWJyZWFrOwpAQCAtMzUzLDYgKzM1OSw3IEBACiAJY2FzZSBJWEdCRV9ERVZfSURfODI1OTlfU0ZQOgogCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk5X1NGUF9GQ09FOgogCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk5X1NGUF9FTToKKwljYXNlIElYR0JFX0RFVl9JRF84MjU5OV9TRlBfU0YyOgogCQltZWRpYV90eXBlID0gaXhnYmVfbWVkaWFfdHlwZV9maWJlcjsKIAkJYnJlYWs7CiAJY2FzZSBJWEdCRV9ERVZfSURfODI1OTlfQ1g0OgpAQCAtMzYxLDYgKzM2OCw5IEBACiAJY2FzZSBJWEdCRV9ERVZfSURfODI1OTlfVDNfTE9NOgogCQltZWRpYV90eXBlID0gaXhnYmVfbWVkaWFfdHlwZV9jb3BwZXI7CiAJCWJyZWFrOworCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk5X0xTOgorCQltZWRpYV90eXBlID0gaXhnYmVfbWVkaWFfdHlwZV9maWJlcl9sY287CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCW1lZGlhX3R5cGUgPSBpeGdiZV9tZWRpYV90eXBlX3Vua25vd247CiAJCWJyZWFrOwpAQCAtNDg2LDcgKzQ5Niw3IEBACiAgKgogICogIFNldCB0aGUgbGluayBzcGVlZCBpbiB0aGUgQVVUT0MgcmVnaXN0ZXIgYW5kIHJlc3RhcnRzIGxpbmsuCiAgKiovCi1zMzIgaXhnYmVfc2V0dXBfbWFjX2xpbmtfbXVsdGlzcGVlZF9maWJlcihzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorc3RhdGljIHMzMiBpeGdiZV9zZXR1cF9tYWNfbGlua19tdWx0aXNwZWVkX2ZpYmVyKHN0cnVjdCBpeGdiZV9odyAqaHcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpCkBAIC0xMTc2LDcgKzExODYsNyBAQAogCQlpZiAoSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZESVJDVFJMKSAmCiAJCSAgICAgICAgICAgICAgICAgICBJWEdCRV9GRElSQ1RSTF9JTklUX0RPTkUpCiAJCQlicmVhazsKLQkJbXNsZWVwKDEpOworCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CiAJfQogCWlmIChpID49IElYR0JFX0ZESVJfSU5JVF9ET05FX1BPTEwpCiAJCWh3X2RiZyhodywgIkZsb3cgRGlyZWN0b3IgU2lnbmF0dXJlIHBvbGwgdGltZSBleGNlZWRlZCFcbiIpOwpAQCAtMTI3MSw3ICsxMjgxLDcgQEAKIAkJaWYgKElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GRElSQ1RSTCkgJgogCQkgICAgICAgICAgICAgICAgICAgSVhHQkVfRkRJUkNUUkxfSU5JVF9ET05FKQogCQkJYnJlYWs7Ci0JCW1zbGVlcCgxKTsKKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwogCX0KIAlpZiAoaSA+PSBJWEdCRV9GRElSX0lOSVRfRE9ORV9QT0xMKQogCQlod19kYmcoaHcsICJGbG93IERpcmVjdG9yIFBlcmZlY3QgcG9sbCB0aW1lIGV4Y2VlZGVkIVxuIik7CkBAIC0xNzQwLDMwICsxNzUwLDI5IEBACiAgKiAgaXhnYmVfc3RhcnRfaHdfODI1OTkgLSBQcmVwYXJlIGhhcmR3YXJlIGZvciBUeC9SeAogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqCi0gKiAgU3RhcnRzIHRoZSBoYXJkd2FyZSB1c2luZyB0aGUgZ2VuZXJpYyBzdGFydF9odyBmdW5jdGlvbi4KLSAqICBUaGVuIHBlcmZvcm1zIGRldmljZS1zcGVjaWZpYzoKLSAqICBDbGVhcnMgdGhlIHJhdGUgbGltaXRlciByZWdpc3RlcnMuCisgKiAgU3RhcnRzIHRoZSBoYXJkd2FyZSB1c2luZyB0aGUgZ2VuZXJpYyBzdGFydF9odyBmdW5jdGlvbgorICogIGFuZCB0aGUgZ2VuZXJhdGlvbiBzdGFydF9odyBmdW5jdGlvbi4KKyAqICBUaGVuIHBlcmZvcm1zIHJldmlzaW9uLXNwZWNpZmljIG9wZXJhdGlvbnMsIGlmIGFueS4KICAqKi8KIHN0YXRpYyBzMzIgaXhnYmVfc3RhcnRfaHdfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKIHsKLQl1MzIgcV9udW07Ci0JczMyIHJldF92YWw7CisJczMyIHJldF92YWwgPSAwOwogCiAJcmV0X3ZhbCA9IGl4Z2JlX3N0YXJ0X2h3X2dlbmVyaWMoaHcpOworCWlmIChyZXRfdmFsICE9IDApCisJCWdvdG8gb3V0OwogCi0JLyogQ2xlYXIgdGhlIHJhdGUgbGltaXRlcnMgKi8KLQlmb3IgKHFfbnVtID0gMDsgcV9udW0gPCBody0+bWFjLm1heF90eF9xdWV1ZXM7IHFfbnVtKyspIHsKLQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFREUVNFTCwgcV9udW0pOwotCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVEJDTlJDLCAwKTsKLQl9Ci0JSVhHQkVfV1JJVEVfRkxVU0goaHcpOworCXJldF92YWwgPSBpeGdiZV9zdGFydF9od19nZW4yKGh3KTsKKwlpZiAocmV0X3ZhbCAhPSAwKQorCQlnb3RvIG91dDsKIAogCS8qIFdlIG5lZWQgdG8gcnVuIGxpbmsgYXV0b3RyeSBhZnRlciB0aGUgZHJpdmVyIGxvYWRzICovCiAJaHctPm1hYy5hdXRvdHJ5X3Jlc3RhcnQgPSB0cnVlOworCWh3LT5tYWMucnhfcGJfc2l6ZSA9IElYR0JFXzgyNTk5X1JYX1BCX1NJWkU7CiAKIAlpZiAocmV0X3ZhbCA9PSAwKQogCQlyZXRfdmFsID0gaXhnYmVfdmVyaWZ5X2Z3X3ZlcnNpb25fODI1OTkoaHcpOwotCitvdXQ6CiAJcmV0dXJuIHJldF92YWw7CiB9CiAKQEAgLTE3NzUsNyArMTc4NCw3IEBACiAgKiAgSWYgUEhZIGFscmVhZHkgZGV0ZWN0ZWQsIG1haW50YWlucyBjdXJyZW50IFBIWSB0eXBlIGluIGh3IHN0cnVjdCwKICAqICBvdGhlcndpc2UgZXhlY3V0ZXMgdGhlIFBIWSBkZXRlY3Rpb24gcm91dGluZS4KICAqKi8KLXMzMiBpeGdiZV9pZGVudGlmeV9waHlfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3N0YXRpYyBzMzIgaXhnYmVfaWRlbnRpZnlfcGh5XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCiB7CiAJczMyIHN0YXR1cyA9IElYR0JFX0VSUl9QSFlfQUREUl9JTlZBTElEOwogCkBAIC0xOTY4LDIxICsxOTc3LDYgQEAKIH0KIAogLyoqCi0gKiAgaXhnYmVfZ2V0X2RldmljZV9jYXBzXzgyNTk5IC0gR2V0IGFkZGl0aW9uYWwgZGV2aWNlIGNhcGFiaWxpdGllcwotICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKLSAqICBAZGV2aWNlX2NhcHM6IHRoZSBFRVBST00gd29yZCB3aXRoIHRoZSBleHRyYSBkZXZpY2UgY2FwYWJpbGl0aWVzCi0gKgotICogIFRoaXMgZnVuY3Rpb24gd2lsbCByZWFkIHRoZSBFRVBST00gbG9jYXRpb24gZm9yIHRoZSBkZXZpY2UgY2FwYWJpbGl0aWVzLAotICogIGFuZCByZXR1cm4gdGhlIHdvcmQgdGhyb3VnaCBkZXZpY2VfY2Fwcy4KLSAqKi8KLXN0YXRpYyBzMzIgaXhnYmVfZ2V0X2RldmljZV9jYXBzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUxNiAqZGV2aWNlX2NhcHMpCi17Ci0JaHctPmVlcHJvbS5vcHMucmVhZChodywgSVhHQkVfREVWSUNFX0NBUFMsIGRldmljZV9jYXBzKTsKLQotCXJldHVybiAwOwotfQotCi0vKioKICAqICBpeGdiZV92ZXJpZnlfZndfdmVyc2lvbl84MjU5OSAtIHZlcmlmeSBmdyB2ZXJzaW9uIGZvciA4MjU5OQogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqCkBAIC0yMDMwLDYgKzIwMjQsMTEwIEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAorLyoqCisgKiAgaXhnYmVfdmVyaWZ5X2xlc21fZndfZW5hYmxlZF84MjU5OSAtIENoZWNrcyBMRVNNIEZXIG1vZHVsZSBzdGF0ZS4KKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIFJldHVybnMgdHJ1ZSBpZiB0aGUgTEVTTSBGVyBtb2R1bGUgaXMgcHJlc2VudCBhbmQgZW5hYmxlZC4gT3RoZXJ3aXNlCisgKiAgcmV0dXJucyBmYWxzZS4gU21hcnQgU3BlZWQgbXVzdCBiZSBkaXNhYmxlZCBpZiBMRVNNIEZXIG1vZHVsZSBpcyBlbmFibGVkLgorICoqLworc3RhdGljIGJvb2wgaXhnYmVfdmVyaWZ5X2xlc21fZndfZW5hYmxlZF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCWJvb2wgbGVzbV9lbmFibGVkID0gZmFsc2U7CisJdTE2IGZ3X29mZnNldCwgZndfbGVzbV9wYXJhbV9vZmZzZXQsIGZ3X2xlc21fc3RhdGU7CisJczMyIHN0YXR1czsKKworCS8qIGdldCB0aGUgb2Zmc2V0IHRvIHRoZSBGaXJtd2FyZSBNb2R1bGUgYmxvY2sgKi8KKwlzdGF0dXMgPSBody0+ZWVwcm9tLm9wcy5yZWFkKGh3LCBJWEdCRV9GV19QVFIsICZmd19vZmZzZXQpOworCisJaWYgKChzdGF0dXMgIT0gMCkgfHwKKwkgICAgKGZ3X29mZnNldCA9PSAwKSB8fCAoZndfb2Zmc2V0ID09IDB4RkZGRikpCisJCWdvdG8gb3V0OworCisJLyogZ2V0IHRoZSBvZmZzZXQgdG8gdGhlIExFU00gUGFyYW1ldGVycyBibG9jayAqLworCXN0YXR1cyA9IGh3LT5lZXByb20ub3BzLnJlYWQoaHcsIChmd19vZmZzZXQgKworCQkJCSAgICAgSVhHQkVfRldfTEVTTV9QQVJBTUVURVJTX1BUUiksCisJCQkJICAgICAmZndfbGVzbV9wYXJhbV9vZmZzZXQpOworCisJaWYgKChzdGF0dXMgIT0gMCkgfHwKKwkgICAgKGZ3X2xlc21fcGFyYW1fb2Zmc2V0ID09IDApIHx8IChmd19sZXNtX3BhcmFtX29mZnNldCA9PSAweEZGRkYpKQorCQlnb3RvIG91dDsKKworCS8qIGdldCB0aGUgbGVzbSBzdGF0ZSB3b3JkICovCisJc3RhdHVzID0gaHctPmVlcHJvbS5vcHMucmVhZChodywgKGZ3X2xlc21fcGFyYW1fb2Zmc2V0ICsKKwkJCQkgICAgIElYR0JFX0ZXX0xFU01fU1RBVEVfMSksCisJCQkJICAgICAmZndfbGVzbV9zdGF0ZSk7CisKKwlpZiAoKHN0YXR1cyA9PSAwKSAmJgorCSAgICAoZndfbGVzbV9zdGF0ZSAmIElYR0JFX0ZXX0xFU01fU1RBVEVfRU5BQkxFRCkpCisJCWxlc21fZW5hYmxlZCA9IHRydWU7CisKK291dDoKKwlyZXR1cm4gbGVzbV9lbmFibGVkOworfQorCisvKioKKyAqICBpeGdiZV9yZWFkX2VlcHJvbV9idWZmZXJfODI1OTkgLSBSZWFkIEVFUFJPTSB3b3JkKHMpIHVzaW5nCisgKiAgZmFzdGVzdCBhdmFpbGFibGUgbWV0aG9kCisgKgorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAb2Zmc2V0OiBvZmZzZXQgb2YgIHdvcmQgaW4gRUVQUk9NIHRvIHJlYWQKKyAqICBAd29yZHM6IG51bWJlciBvZiB3b3JkcworICogIEBkYXRhOiB3b3JkKHMpIHJlYWQgZnJvbSB0aGUgRUVQUk9NCisgKgorICogIFJldHJpZXZlcyAxNiBiaXQgd29yZChzKSByZWFkIGZyb20gRUVQUk9NCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX3JlYWRfZWVwcm9tX2J1ZmZlcl84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgb2Zmc2V0LAorCQkJCQkgIHUxNiB3b3JkcywgdTE2ICpkYXRhKQoreworCXN0cnVjdCBpeGdiZV9lZXByb21faW5mbyAqZWVwcm9tID0gJmh3LT5lZXByb207CisJczMyIHJldF92YWwgPSBJWEdCRV9FUlJfQ09ORklHOworCisJLyoKKwkgKiBJZiBFRVBST00gaXMgZGV0ZWN0ZWQgYW5kIGNhbiBiZSBhZGRyZXNzZWQgdXNpbmcgMTQgYml0cywKKwkgKiB1c2UgRUVSRCBvdGhlcndpc2UgdXNlIGJpdCBiYW5nCisJICovCisJaWYgKChlZXByb20tPnR5cGUgPT0gaXhnYmVfZWVwcm9tX3NwaSkgJiYKKwkgICAgKG9mZnNldCArICh3b3JkcyAtIDEpIDw9IElYR0JFX0VFUkRfTUFYX0FERFIpKQorCQlyZXRfdmFsID0gaXhnYmVfcmVhZF9lZXJkX2J1ZmZlcl9nZW5lcmljKGh3LCBvZmZzZXQsIHdvcmRzLAorCQkJCQkJCSBkYXRhKTsKKwllbHNlCisJCXJldF92YWwgPSBpeGdiZV9yZWFkX2VlcHJvbV9idWZmZXJfYml0X2JhbmdfZ2VuZXJpYyhodywgb2Zmc2V0LAorCQkJCQkJCQkgICAgd29yZHMsCisJCQkJCQkJCSAgICBkYXRhKTsKKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZV9yZWFkX2VlcHJvbV84MjU5OSAtIFJlYWQgRUVQUk9NIHdvcmQgdXNpbmcKKyAqICBmYXN0ZXN0IGF2YWlsYWJsZSBtZXRob2QKKyAqCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBvZmZzZXQ6IG9mZnNldCBvZiAgd29yZCBpbiB0aGUgRUVQUk9NIHRvIHJlYWQKKyAqICBAZGF0YTogd29yZCByZWFkIGZyb20gdGhlIEVFUFJPTQorICoKKyAqICBSZWFkcyBhIDE2IGJpdCB3b3JkIGZyb20gdGhlIEVFUFJPTQorICoqLworc3RhdGljIHMzMiBpeGdiZV9yZWFkX2VlcHJvbV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorCQkJCSAgIHUxNiBvZmZzZXQsIHUxNiAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXhnYmVfZWVwcm9tX2luZm8gKmVlcHJvbSA9ICZody0+ZWVwcm9tOworCXMzMiByZXRfdmFsID0gSVhHQkVfRVJSX0NPTkZJRzsKKworCS8qCisJICogSWYgRUVQUk9NIGlzIGRldGVjdGVkIGFuZCBjYW4gYmUgYWRkcmVzc2VkIHVzaW5nIDE0IGJpdHMsCisJICogdXNlIEVFUkQgb3RoZXJ3aXNlIHVzZSBiaXQgYmFuZworCSAqLworCWlmICgoZWVwcm9tLT50eXBlID09IGl4Z2JlX2VlcHJvbV9zcGkpICYmCisJICAgIChvZmZzZXQgPD0gSVhHQkVfRUVSRF9NQVhfQUREUikpCisJCXJldF92YWwgPSBpeGdiZV9yZWFkX2VlcmRfZ2VuZXJpYyhodywgb2Zmc2V0LCBkYXRhKTsKKwllbHNlCisJCXJldF92YWwgPSBpeGdiZV9yZWFkX2VlcHJvbV9iaXRfYmFuZ19nZW5lcmljKGh3LCBvZmZzZXQsIGRhdGEpOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaXhnYmVfbWFjX29wZXJhdGlvbnMgbWFjX29wc184MjU5OSA9IHsKIAkuaW5pdF9odyAgICAgICAgICAgICAgICA9ICZpeGdiZV9pbml0X2h3X2dlbmVyaWMsCiAJLnJlc2V0X2h3ICAgICAgICAgICAgICAgPSAmaXhnYmVfcmVzZXRfaHdfODI1OTksCkBAIC0yMDQwLDcgKzIxMzgsNyBAQAogCS5lbmFibGVfcnhfZG1hICAgICAgICAgID0gJml4Z2JlX2VuYWJsZV9yeF9kbWFfODI1OTksCiAJLmdldF9tYWNfYWRkciAgICAgICAgICAgPSAmaXhnYmVfZ2V0X21hY19hZGRyX2dlbmVyaWMsCiAJLmdldF9zYW5fbWFjX2FkZHIgICAgICAgPSAmaXhnYmVfZ2V0X3Nhbl9tYWNfYWRkcl9nZW5lcmljLAotCS5nZXRfZGV2aWNlX2NhcHMgICAgICAgID0gJml4Z2JlX2dldF9kZXZpY2VfY2Fwc184MjU5OSwKKwkuZ2V0X2RldmljZV9jYXBzICAgICAgICA9ICZpeGdiZV9nZXRfZGV2aWNlX2NhcHNfZ2VuZXJpYywKIAkuZ2V0X3d3bl9wcmVmaXggICAgICAgICA9ICZpeGdiZV9nZXRfd3duX3ByZWZpeF9nZW5lcmljLAogCS5zdG9wX2FkYXB0ZXIgICAgICAgICAgID0gJml4Z2JlX3N0b3BfYWRhcHRlcl9nZW5lcmljLAogCS5nZXRfYnVzX2luZm8gICAgICAgICAgID0gJml4Z2JlX2dldF9idXNfaW5mb19nZW5lcmljLApAQCAtMjA3Niw4ICsyMTc0LDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXhnYmVfZWVwcm9tX29wZXJhdGlvbnMgZWVwcm9tX29wc184MjU5OSA9IHsKIAkuaW5pdF9wYXJhbXMJCT0gJml4Z2JlX2luaXRfZWVwcm9tX3BhcmFtc19nZW5lcmljLAotCS5yZWFkCQkJPSAmaXhnYmVfcmVhZF9lZXJkX2dlbmVyaWMsCisJLnJlYWQJCQk9ICZpeGdiZV9yZWFkX2VlcHJvbV84MjU5OSwKKwkucmVhZF9idWZmZXIJCT0gJml4Z2JlX3JlYWRfZWVwcm9tX2J1ZmZlcl84MjU5OSwKIAkud3JpdGUJCQk9ICZpeGdiZV93cml0ZV9lZXByb21fZ2VuZXJpYywKKwkud3JpdGVfYnVmZmVyCQk9ICZpeGdiZV93cml0ZV9lZXByb21fYnVmZmVyX2JpdF9iYW5nX2dlbmVyaWMsCiAJLmNhbGNfY2hlY2tzdW0JCT0gJml4Z2JlX2NhbGNfZWVwcm9tX2NoZWNrc3VtX2dlbmVyaWMsCiAJLnZhbGlkYXRlX2NoZWNrc3VtCT0gJml4Z2JlX3ZhbGlkYXRlX2VlcHJvbV9jaGVja3N1bV9nZW5lcmljLAogCS51cGRhdGVfY2hlY2tzdW0JPSAmaXhnYmVfdXBkYXRlX2VlcHJvbV9jaGVja3N1bV9nZW5lcmljLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYwppbmRleCBiY2Q5NTI5Li5iODk0YjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYwpAQCAtNTQsNiArNTQsMTMgQEAKIHN0YXRpYyBzMzIgaXhnYmVfbmVnb3RpYXRlX2ZjKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiBhZHZfcmVnLCB1MzIgbHBfcmVnLAogCQkJICAgICAgdTMyIGFkdl9zeW0sIHUzMiBhZHZfYXNtLCB1MzIgbHBfc3ltLCB1MzIgbHBfYXNtKTsKIHN0YXRpYyBzMzIgaXhnYmVfc2V0dXBfZmMoc3RydWN0IGl4Z2JlX2h3ICpodywgczMyIHBhY2tldGJ1Zl9udW0pOworc3RhdGljIHMzMiBpeGdiZV9wb2xsX2VlcmRfZWV3cl9kb25lKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiBlZV9yZWcpOworc3RhdGljIHMzMiBpeGdiZV9yZWFkX2VlcHJvbV9idWZmZXJfYml0X2Jhbmcoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwKKwkJCQkJICAgICB1MTYgd29yZHMsIHUxNiAqZGF0YSk7CitzdGF0aWMgczMyIGl4Z2JlX3dyaXRlX2VlcHJvbV9idWZmZXJfYml0X2Jhbmcoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwKKwkJCQkJICAgICB1MTYgd29yZHMsIHUxNiAqZGF0YSk7CitzdGF0aWMgczMyIGl4Z2JlX2RldGVjdF9lZXByb21fcGFnZV9zaXplX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywKKwkJCQkJCSB1MTYgb2Zmc2V0KTsKIAogLyoqCiAgKiAgaXhnYmVfc3RhcnRfaHdfZ2VuZXJpYyAtIFByZXBhcmUgaGFyZHdhcmUgZm9yIFR4L1J4CkBAIC05Niw2ICsxMDMsNDUgQEAKIH0KIAogLyoqCisgKiAgaXhnYmVfc3RhcnRfaHdfZ2VuMiAtIEluaXQgc2VxdWVuY2UgZm9yIGNvbW1vbiBkZXZpY2UgZmFtaWx5CisgKiAgQGh3OiBwb2ludGVyIHRvIGh3IHN0cnVjdHVyZQorICoKKyAqIFBlcmZvcm1zIHRoZSBpbml0IHNlcXVlbmNlIGNvbW1vbiB0byB0aGUgc2Vjb25kIGdlbmVyYXRpb24KKyAqIG9mIDEwIEdiRSBkZXZpY2VzLgorICogRGV2aWNlcyBpbiB0aGUgc2Vjb25kIGdlbmVyYXRpb246CisgKiAgICAgODI1OTkKKyAqICAgICBYNTQwCisgKiovCitzMzIgaXhnYmVfc3RhcnRfaHdfZ2VuMihzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXUzMiBpOworCXUzMiByZWd2YWw7CisKKwkvKiBDbGVhciB0aGUgcmF0ZSBsaW1pdGVycyAqLworCWZvciAoaSA9IDA7IGkgPCBody0+bWFjLm1heF90eF9xdWV1ZXM7IGkrKykgeworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVERRU0VMLCBpKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFRCQ05SQywgMCk7CisJfQorCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKKworCS8qIERpc2FibGUgcmVsYXhlZCBvcmRlcmluZyAqLworCWZvciAoaSA9IDA7IGkgPCBody0+bWFjLm1heF90eF9xdWV1ZXM7IGkrKykgeworCQlyZWd2YWwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRENBX1RYQ1RSTF84MjU5OShpKSk7CisJCXJlZ3ZhbCAmPSB+SVhHQkVfRENBX1RYQ1RSTF9UWF9XQl9ST19FTjsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9EQ0FfVFhDVFJMXzgyNTk5KGkpLCByZWd2YWwpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBody0+bWFjLm1heF9yeF9xdWV1ZXM7IGkrKykgeworCQlyZWd2YWwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRENBX1JYQ1RSTChpKSk7CisJCXJlZ3ZhbCAmPSB+KElYR0JFX0RDQV9SWENUUkxfREVTQ19XUk9fRU4gfAorCQkJCQlJWEdCRV9EQ0FfUlhDVFJMX0RFU0NfSFNST19FTik7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRENBX1JYQ1RSTChpKSwgcmVndmFsKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiAgaXhnYmVfaW5pdF9od19nZW5lcmljIC0gR2VuZXJpYyBoYXJkd2FyZSBpbml0aWFsaXphdGlvbgogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqCkBAIC00NjQsNyArNTEwLDcgQEAKIAlyZWdfdmFsICY9IH4oSVhHQkVfUlhDVFJMX1JYRU4pOwogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhDVFJMLCByZWdfdmFsKTsKIAlJWEdCRV9XUklURV9GTFVTSChodyk7Ci0JbXNsZWVwKDIpOworCXVzbGVlcF9yYW5nZSgyMDAwLCA0MDAwKTsKIAogCS8qIENsZWFyIGludGVycnVwdCBtYXNrIHRvIHN0b3AgZnJvbSBpbnRlcnJ1cHRzIGJlaW5nIGdlbmVyYXRlZCAqLwogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlNQywgSVhHQkVfSVJRX0NMRUFSX01BU0spOwpAQCAtNTQ1LDYgKzU5MSw4IEBACiAJCS8qIFNldCBkZWZhdWx0IHNlbWFwaG9yZSBkZWxheSB0byAxMG1zIHdoaWNoIGlzIGEgd2VsbAogCQkgKiB0ZXN0ZWQgdmFsdWUgKi8KIAkJZWVwcm9tLT5zZW1hcGhvcmVfZGVsYXkgPSAxMDsKKwkJLyogQ2xlYXIgRUVQUk9NIHBhZ2Ugc2l6ZSwgaXQgd2lsbCBiZSBpbml0aWFsaXplZCBhcyBuZWVkZWQgKi8KKwkJZWVwcm9tLT53b3JkX3BhZ2Vfc2l6ZSA9IDA7CiAKIAkJLyoKIAkJICogQ2hlY2sgZm9yIEVFUFJPTSBwcmVzZW50IGZpcnN0LgpAQCAtNTc3LDI2ICs2MjUsNzggQEAKIH0KIAogLyoqCi0gKiAgaXhnYmVfd3JpdGVfZWVwcm9tX2dlbmVyaWMgLSBXcml0ZXMgMTYgYml0IHZhbHVlIHRvIEVFUFJPTQorICogIGl4Z2JlX3dyaXRlX2VlcHJvbV9idWZmZXJfYml0X2JhbmdfZ2VuZXJpYyAtIFdyaXRlIEVFUFJPTSB1c2luZyBiaXQtYmFuZworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAb2Zmc2V0OiBvZmZzZXQgd2l0aGluIHRoZSBFRVBST00gdG8gd3JpdGUKKyAqICBAd29yZHM6IG51bWJlciBvZiB3b3JkcworICogIEBkYXRhOiAxNiBiaXQgd29yZChzKSB0byB3cml0ZSB0byBFRVBST00KKyAqCisgKiAgUmVhZHMgMTYgYml0IHdvcmQocykgZnJvbSBFRVBST00gdGhyb3VnaCBiaXQtYmFuZyBtZXRob2QKKyAqKi8KK3MzMiBpeGdiZV93cml0ZV9lZXByb21fYnVmZmVyX2JpdF9iYW5nX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwKKwkJCQkJICAgICAgIHUxNiB3b3JkcywgdTE2ICpkYXRhKQoreworCXMzMiBzdGF0dXMgPSAwOworCXUxNiBpLCBjb3VudDsKKworCWh3LT5lZXByb20ub3BzLmluaXRfcGFyYW1zKGh3KTsKKworCWlmICh3b3JkcyA9PSAwKSB7CisJCXN0YXR1cyA9IElYR0JFX0VSUl9JTlZBTElEX0FSR1VNRU5UOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAob2Zmc2V0ICsgd29yZHMgPiBody0+ZWVwcm9tLndvcmRfc2l6ZSkgeworCQlzdGF0dXMgPSBJWEdCRV9FUlJfRUVQUk9NOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIFRoZSBFRVBST00gcGFnZSBzaXplIGNhbm5vdCBiZSBxdWVyaWVkIGZyb20gdGhlIGNoaXAuIFdlIGRvIGxhenkKKwkgKiBpbml0aWFsaXphdGlvbi4gSXQgaXMgd29ydGggdG8gZG8gdGhhdCB3aGVuIHdlIHdyaXRlIGxhcmdlIGJ1ZmZlci4KKwkgKi8KKwlpZiAoKGh3LT5lZXByb20ud29yZF9wYWdlX3NpemUgPT0gMCkgJiYKKwkgICAgKHdvcmRzID4gSVhHQkVfRUVQUk9NX1BBR0VfU0laRV9NQVgpKQorCQlpeGdiZV9kZXRlY3RfZWVwcm9tX3BhZ2Vfc2l6ZV9nZW5lcmljKGh3LCBvZmZzZXQpOworCisJLyoKKwkgKiBXZSBjYW5ub3QgaG9sZCBzeW5jaHJvbml6YXRpb24gc2VtYXBob3JlcyBmb3IgdG9vIGxvbmcKKwkgKiB0byBhdm9pZCBvdGhlciBlbnRpdHkgc3RhcnZhdGlvbi4gSG93ZXZlciBpdCBpcyBtb3JlIGVmZmljaWVudAorCSAqIHRvIHJlYWQgaW4gYnVyc3RzIHRoYW4gc3luY2hyb25pemluZyBhY2Nlc3MgZm9yIGVhY2ggd29yZC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgd29yZHM7IGkgKz0gSVhHQkVfRUVQUk9NX1JEX0JVRkZFUl9NQVhfQ09VTlQpIHsKKwkJY291bnQgPSAod29yZHMgLSBpKSAvIElYR0JFX0VFUFJPTV9SRF9CVUZGRVJfTUFYX0NPVU5UID4gMCA/CisJCQkgSVhHQkVfRUVQUk9NX1JEX0JVRkZFUl9NQVhfQ09VTlQgOiAod29yZHMgLSBpKTsKKwkJc3RhdHVzID0gaXhnYmVfd3JpdGVfZWVwcm9tX2J1ZmZlcl9iaXRfYmFuZyhodywgb2Zmc2V0ICsgaSwKKwkJCQkJCQkgICAgY291bnQsICZkYXRhW2ldKTsKKworCQlpZiAoc3RhdHVzICE9IDApCisJCQlicmVhazsKKwl9CisKK291dDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV93cml0ZV9lZXByb21fYnVmZmVyX2JpdF9iYW5nIC0gV3JpdGVzIDE2IGJpdCB3b3JkKHMpIHRvIEVFUFJPTQogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqICBAb2Zmc2V0OiBvZmZzZXQgd2l0aGluIHRoZSBFRVBST00gdG8gYmUgd3JpdHRlbiB0bwotICogIEBkYXRhOiAxNiBiaXQgd29yZCB0byBiZSB3cml0dGVuIHRvIHRoZSBFRVBST00KKyAqICBAd29yZHM6IG51bWJlciBvZiB3b3JkKHMpCisgKiAgQGRhdGE6IDE2IGJpdCB3b3JkKHMpIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIEVFUFJPTQogICoKICAqICBJZiBpeGdiZV9lZXByb21fdXBkYXRlX2NoZWNrc3VtIGlzIG5vdCBjYWxsZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiwgdGhlCiAgKiAgRUVQUk9NIHdpbGwgbW9zdCBsaWtlbHkgY29udGFpbiBhbiBpbnZhbGlkIGNoZWNrc3VtLgogICoqLwotczMyIGl4Z2JlX3dyaXRlX2VlcHJvbV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUxNiBvZmZzZXQsIHUxNiBkYXRhKQorc3RhdGljIHMzMiBpeGdiZV93cml0ZV9lZXByb21fYnVmZmVyX2JpdF9iYW5nKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUxNiBvZmZzZXQsCisJCQkJCSAgICAgIHUxNiB3b3JkcywgdTE2ICpkYXRhKQogewogCXMzMiBzdGF0dXM7CisJdTE2IHdvcmQ7CisJdTE2IHBhZ2Vfc2l6ZTsKKwl1MTYgaTsKIAl1OCB3cml0ZV9vcGNvZGUgPSBJWEdCRV9FRVBST01fV1JJVEVfT1BDT0RFX1NQSTsKIAotCWh3LT5lZXByb20ub3BzLmluaXRfcGFyYW1zKGh3KTsKLQotCWlmIChvZmZzZXQgPj0gaHctPmVlcHJvbS53b3JkX3NpemUpIHsKLQkJc3RhdHVzID0gSVhHQkVfRVJSX0VFUFJPTTsKLQkJZ290byBvdXQ7Ci0JfQotCiAJLyogUHJlcGFyZSB0aGUgRUVQUk9NIGZvciB3cml0aW5nICAqLwogCXN0YXR1cyA9IGl4Z2JlX2FjcXVpcmVfZWVwcm9tKGh3KTsKIApAQCAtNjA4LDU0ICs3MDgsNjkgQEAKIAl9CiAKIAlpZiAoc3RhdHVzID09IDApIHsKLQkJaXhnYmVfc3RhbmRieV9lZXByb20oaHcpOworCQlmb3IgKGkgPSAwOyBpIDwgd29yZHM7IGkrKykgeworCQkJaXhnYmVfc3RhbmRieV9lZXByb20oaHcpOwogCi0JCS8qICBTZW5kIHRoZSBXUklURSBFTkFCTEUgY29tbWFuZCAoOCBiaXQgb3Bjb2RlICkgICovCi0JCWl4Z2JlX3NoaWZ0X291dF9lZXByb21fYml0cyhodywgSVhHQkVfRUVQUk9NX1dSRU5fT1BDT0RFX1NQSSwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX0VFUFJPTV9PUENPREVfQklUUyk7CisJCQkvKiAgU2VuZCB0aGUgV1JJVEUgRU5BQkxFIGNvbW1hbmQgKDggYml0IG9wY29kZSApICAqLworCQkJaXhnYmVfc2hpZnRfb3V0X2VlcHJvbV9iaXRzKGh3LAorCQkJCQkJICBJWEdCRV9FRVBST01fV1JFTl9PUENPREVfU1BJLAorCQkJCQkJICBJWEdCRV9FRVBST01fT1BDT0RFX0JJVFMpOwogCi0JCWl4Z2JlX3N0YW5kYnlfZWVwcm9tKGh3KTsKKwkJCWl4Z2JlX3N0YW5kYnlfZWVwcm9tKGh3KTsKIAotCQkvKgotCQkgKiBTb21lIFNQSSBlZXByb21zIHVzZSB0aGUgOHRoIGFkZHJlc3MgYml0IGVtYmVkZGVkIGluIHRoZQotCQkgKiBvcGNvZGUKLQkJICovCi0JCWlmICgoaHctPmVlcHJvbS5hZGRyZXNzX2JpdHMgPT0gOCkgJiYgKG9mZnNldCA+PSAxMjgpKQotCQkJd3JpdGVfb3Bjb2RlIHw9IElYR0JFX0VFUFJPTV9BOF9PUENPREVfU1BJOworCQkJLyoKKwkJCSAqIFNvbWUgU1BJIGVlcHJvbXMgdXNlIHRoZSA4dGggYWRkcmVzcyBiaXQgZW1iZWRkZWQKKwkJCSAqIGluIHRoZSBvcGNvZGUKKwkJCSAqLworCQkJaWYgKChody0+ZWVwcm9tLmFkZHJlc3NfYml0cyA9PSA4KSAmJgorCQkJICAgICgob2Zmc2V0ICsgaSkgPj0gMTI4KSkKKwkJCQl3cml0ZV9vcGNvZGUgfD0gSVhHQkVfRUVQUk9NX0E4X09QQ09ERV9TUEk7CiAKLQkJLyogU2VuZCB0aGUgV3JpdGUgY29tbWFuZCAoOC1iaXQgb3Bjb2RlICsgYWRkcikgKi8KLQkJaXhnYmVfc2hpZnRfb3V0X2VlcHJvbV9iaXRzKGh3LCB3cml0ZV9vcGNvZGUsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9FRVBST01fT1BDT0RFX0JJVFMpOwotCQlpeGdiZV9zaGlmdF9vdXRfZWVwcm9tX2JpdHMoaHcsICh1MTYpKG9mZnNldCoyKSwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3LT5lZXByb20uYWRkcmVzc19iaXRzKTsKKwkJCS8qIFNlbmQgdGhlIFdyaXRlIGNvbW1hbmQgKDgtYml0IG9wY29kZSArIGFkZHIpICovCisJCQlpeGdiZV9zaGlmdF9vdXRfZWVwcm9tX2JpdHMoaHcsIHdyaXRlX29wY29kZSwKKwkJCQkJCSAgICBJWEdCRV9FRVBST01fT1BDT0RFX0JJVFMpOworCQkJaXhnYmVfc2hpZnRfb3V0X2VlcHJvbV9iaXRzKGh3LCAodTE2KSgob2Zmc2V0ICsgaSkgKiAyKSwKKwkJCQkJCSAgICBody0+ZWVwcm9tLmFkZHJlc3NfYml0cyk7CiAKLQkJLyogU2VuZCB0aGUgZGF0YSAqLwotCQlkYXRhID0gKGRhdGEgPj4gOCkgfCAoZGF0YSA8PCA4KTsKLQkJaXhnYmVfc2hpZnRfb3V0X2VlcHJvbV9iaXRzKGh3LCBkYXRhLCAxNik7Ci0JCWl4Z2JlX3N0YW5kYnlfZWVwcm9tKGh3KTsKKwkJCXBhZ2Vfc2l6ZSA9IGh3LT5lZXByb20ud29yZF9wYWdlX3NpemU7CiAKKwkJCS8qIFNlbmQgdGhlIGRhdGEgaW4gYnVyc3QgdmlhIFNQSSovCisJCQlkbyB7CisJCQkJd29yZCA9IGRhdGFbaV07CisJCQkJd29yZCA9ICh3b3JkID4+IDgpIHwgKHdvcmQgPDwgOCk7CisJCQkJaXhnYmVfc2hpZnRfb3V0X2VlcHJvbV9iaXRzKGh3LCB3b3JkLCAxNik7CisKKwkJCQlpZiAocGFnZV9zaXplID09IDApCisJCQkJCWJyZWFrOworCisJCQkJLyogZG8gbm90IHdyYXAgYXJvdW5kIHBhZ2UgKi8KKwkJCQlpZiAoKChvZmZzZXQgKyBpKSAmIChwYWdlX3NpemUgLSAxKSkgPT0KKwkJCQkgICAgKHBhZ2Vfc2l6ZSAtIDEpKQorCQkJCQlicmVhazsKKwkJCX0gd2hpbGUgKCsraSA8IHdvcmRzKTsKKworCQkJaXhnYmVfc3RhbmRieV9lZXByb20oaHcpOworCQkJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CisJCX0KIAkJLyogRG9uZSB3aXRoIHdyaXRpbmcgLSByZWxlYXNlIHRoZSBFRVBST00gKi8KIAkJaXhnYmVfcmVsZWFzZV9lZXByb20oaHcpOwogCX0KIAotb3V0OgogCXJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgotICogIGl4Z2JlX3JlYWRfZWVwcm9tX2JpdF9iYW5nX2dlbmVyaWMgLSBSZWFkIEVFUFJPTSB3b3JkIHVzaW5nIGJpdC1iYW5nCisgKiAgaXhnYmVfd3JpdGVfZWVwcm9tX2dlbmVyaWMgLSBXcml0ZXMgMTYgYml0IHZhbHVlIHRvIEVFUFJPTQogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKLSAqICBAb2Zmc2V0OiBvZmZzZXQgd2l0aGluIHRoZSBFRVBST00gdG8gYmUgcmVhZAotICogIEBkYXRhOiByZWFkIDE2IGJpdCB2YWx1ZSBmcm9tIEVFUFJPTQorICogIEBvZmZzZXQ6IG9mZnNldCB3aXRoaW4gdGhlIEVFUFJPTSB0byBiZSB3cml0dGVuIHRvCisgKiAgQGRhdGE6IDE2IGJpdCB3b3JkIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIEVFUFJPTQogICoKLSAqICBSZWFkcyAxNiBiaXQgdmFsdWUgZnJvbSBFRVBST00gdGhyb3VnaCBiaXQtYmFuZyBtZXRob2QKKyAqICBJZiBpeGdiZV9lZXByb21fdXBkYXRlX2NoZWNrc3VtIGlzIG5vdCBjYWxsZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiwgdGhlCisgKiAgRUVQUk9NIHdpbGwgbW9zdCBsaWtlbHkgY29udGFpbiBhbiBpbnZhbGlkIGNoZWNrc3VtLgogICoqLwotczMyIGl4Z2JlX3JlYWRfZWVwcm9tX2JpdF9iYW5nX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqZGF0YSkKK3MzMiBpeGdiZV93cml0ZV9lZXByb21fZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgZGF0YSkKIHsKIAlzMzIgc3RhdHVzOwotCXUxNiB3b3JkX2luOwotCXU4IHJlYWRfb3Bjb2RlID0gSVhHQkVfRUVQUk9NX1JFQURfT1BDT0RFX1NQSTsKIAogCWh3LT5lZXByb20ub3BzLmluaXRfcGFyYW1zKGh3KTsKIApAQCAtNjY0LDYgKzc3OSw3NiBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlzdGF0dXMgPSBpeGdiZV93cml0ZV9lZXByb21fYnVmZmVyX2JpdF9iYW5nKGh3LCBvZmZzZXQsIDEsICZkYXRhKTsKKworb3V0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX3JlYWRfZWVwcm9tX2J1ZmZlcl9iaXRfYmFuZ19nZW5lcmljIC0gUmVhZCBFRVBST00gdXNpbmcgYml0LWJhbmcKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQG9mZnNldDogb2Zmc2V0IHdpdGhpbiB0aGUgRUVQUk9NIHRvIGJlIHJlYWQKKyAqICBAd29yZHM6IG51bWJlciBvZiB3b3JkKHMpCisgKiAgQGRhdGE6IHJlYWQgMTYgYml0IHdvcmRzKHMpIGZyb20gRUVQUk9NCisgKgorICogIFJlYWRzIDE2IGJpdCB3b3JkKHMpIGZyb20gRUVQUk9NIHRocm91Z2ggYml0LWJhbmcgbWV0aG9kCisgKiovCitzMzIgaXhnYmVfcmVhZF9lZXByb21fYnVmZmVyX2JpdF9iYW5nX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwKKwkJCQkJICAgICAgdTE2IHdvcmRzLCB1MTYgKmRhdGEpCit7CisJczMyIHN0YXR1cyA9IDA7CisJdTE2IGksIGNvdW50OworCisJaHctPmVlcHJvbS5vcHMuaW5pdF9wYXJhbXMoaHcpOworCisJaWYgKHdvcmRzID09IDApIHsKKwkJc3RhdHVzID0gSVhHQkVfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChvZmZzZXQgKyB3b3JkcyA+IGh3LT5lZXByb20ud29yZF9zaXplKSB7CisJCXN0YXR1cyA9IElYR0JFX0VSUl9FRVBST007CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogV2UgY2Fubm90IGhvbGQgc3luY2hyb25pemF0aW9uIHNlbWFwaG9yZXMgZm9yIHRvbyBsb25nCisJICogdG8gYXZvaWQgb3RoZXIgZW50aXR5IHN0YXJ2YXRpb24uIEhvd2V2ZXIgaXQgaXMgbW9yZSBlZmZpY2llbnQKKwkgKiB0byByZWFkIGluIGJ1cnN0cyB0aGFuIHN5bmNocm9uaXppbmcgYWNjZXNzIGZvciBlYWNoIHdvcmQuCisJICovCisJZm9yIChpID0gMDsgaSA8IHdvcmRzOyBpICs9IElYR0JFX0VFUFJPTV9SRF9CVUZGRVJfTUFYX0NPVU5UKSB7CisJCWNvdW50ID0gKHdvcmRzIC0gaSkgLyBJWEdCRV9FRVBST01fUkRfQlVGRkVSX01BWF9DT1VOVCA+IDAgPworCQkJIElYR0JFX0VFUFJPTV9SRF9CVUZGRVJfTUFYX0NPVU5UIDogKHdvcmRzIC0gaSk7CisKKwkJc3RhdHVzID0gaXhnYmVfcmVhZF9lZXByb21fYnVmZmVyX2JpdF9iYW5nKGh3LCBvZmZzZXQgKyBpLAorCQkJCQkJCSAgIGNvdW50LCAmZGF0YVtpXSk7CisKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJYnJlYWs7CisJfQorCitvdXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfcmVhZF9lZXByb21fYnVmZmVyX2JpdF9iYW5nIC0gUmVhZCBFRVBST00gdXNpbmcgYml0LWJhbmcKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQG9mZnNldDogb2Zmc2V0IHdpdGhpbiB0aGUgRUVQUk9NIHRvIGJlIHJlYWQKKyAqICBAd29yZHM6IG51bWJlciBvZiB3b3JkKHMpCisgKiAgQGRhdGE6IHJlYWQgMTYgYml0IHdvcmQocykgZnJvbSBFRVBST00KKyAqCisgKiAgUmVhZHMgMTYgYml0IHdvcmQocykgZnJvbSBFRVBST00gdGhyb3VnaCBiaXQtYmFuZyBtZXRob2QKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfcmVhZF9lZXByb21fYnVmZmVyX2JpdF9iYW5nKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUxNiBvZmZzZXQsCisJCQkJCSAgICAgdTE2IHdvcmRzLCB1MTYgKmRhdGEpCit7CisJczMyIHN0YXR1czsKKwl1MTYgd29yZF9pbjsKKwl1OCByZWFkX29wY29kZSA9IElYR0JFX0VFUFJPTV9SRUFEX09QQ09ERV9TUEk7CisJdTE2IGk7CisKIAkvKiBQcmVwYXJlIHRoZSBFRVBST00gZm9yIHJlYWRpbmcgICovCiAJc3RhdHVzID0gaXhnYmVfYWNxdWlyZV9lZXByb20oaHcpOwogCkBAIC02NzUsMjkgKzg2MCwxNDUgQEAKIAl9CiAKIAlpZiAoc3RhdHVzID09IDApIHsKLQkJaXhnYmVfc3RhbmRieV9lZXByb20oaHcpOworCQlmb3IgKGkgPSAwOyBpIDwgd29yZHM7IGkrKykgeworCQkJaXhnYmVfc3RhbmRieV9lZXByb20oaHcpOworCQkJLyoKKwkJCSAqIFNvbWUgU1BJIGVlcHJvbXMgdXNlIHRoZSA4dGggYWRkcmVzcyBiaXQgZW1iZWRkZWQKKwkJCSAqIGluIHRoZSBvcGNvZGUKKwkJCSAqLworCQkJaWYgKChody0+ZWVwcm9tLmFkZHJlc3NfYml0cyA9PSA4KSAmJgorCQkJICAgICgob2Zmc2V0ICsgaSkgPj0gMTI4KSkKKwkJCQlyZWFkX29wY29kZSB8PSBJWEdCRV9FRVBST01fQThfT1BDT0RFX1NQSTsKIAotCQkvKgotCQkgKiBTb21lIFNQSSBlZXByb21zIHVzZSB0aGUgOHRoIGFkZHJlc3MgYml0IGVtYmVkZGVkIGluIHRoZQotCQkgKiBvcGNvZGUKLQkJICovCi0JCWlmICgoaHctPmVlcHJvbS5hZGRyZXNzX2JpdHMgPT0gOCkgJiYgKG9mZnNldCA+PSAxMjgpKQotCQkJcmVhZF9vcGNvZGUgfD0gSVhHQkVfRUVQUk9NX0E4X09QQ09ERV9TUEk7CisJCQkvKiBTZW5kIHRoZSBSRUFEIGNvbW1hbmQgKG9wY29kZSArIGFkZHIpICovCisJCQlpeGdiZV9zaGlmdF9vdXRfZWVwcm9tX2JpdHMoaHcsIHJlYWRfb3Bjb2RlLAorCQkJCQkJICAgIElYR0JFX0VFUFJPTV9PUENPREVfQklUUyk7CisJCQlpeGdiZV9zaGlmdF9vdXRfZWVwcm9tX2JpdHMoaHcsICh1MTYpKChvZmZzZXQgKyBpKSAqIDIpLAorCQkJCQkJICAgIGh3LT5lZXByb20uYWRkcmVzc19iaXRzKTsKIAotCQkvKiBTZW5kIHRoZSBSRUFEIGNvbW1hbmQgKG9wY29kZSArIGFkZHIpICovCi0JCWl4Z2JlX3NoaWZ0X291dF9lZXByb21fYml0cyhodywgcmVhZF9vcGNvZGUsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9FRVBST01fT1BDT0RFX0JJVFMpOwotCQlpeGdiZV9zaGlmdF9vdXRfZWVwcm9tX2JpdHMoaHcsICh1MTYpKG9mZnNldCoyKSwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3LT5lZXByb20uYWRkcmVzc19iaXRzKTsKLQotCQkvKiBSZWFkIHRoZSBkYXRhLiAqLwotCQl3b3JkX2luID0gaXhnYmVfc2hpZnRfaW5fZWVwcm9tX2JpdHMoaHcsIDE2KTsKLQkJKmRhdGEgPSAod29yZF9pbiA+PiA4KSB8ICh3b3JkX2luIDw8IDgpOworCQkJLyogUmVhZCB0aGUgZGF0YS4gKi8KKwkJCXdvcmRfaW4gPSBpeGdiZV9zaGlmdF9pbl9lZXByb21fYml0cyhodywgMTYpOworCQkJZGF0YVtpXSA9ICh3b3JkX2luID4+IDgpIHwgKHdvcmRfaW4gPDwgOCk7CisJCX0KIAogCQkvKiBFbmQgdGhpcyByZWFkIG9wZXJhdGlvbiAqLwogCQlpeGdiZV9yZWxlYXNlX2VlcHJvbShodyk7CiAJfQogCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfcmVhZF9lZXByb21fYml0X2JhbmdfZ2VuZXJpYyAtIFJlYWQgRUVQUk9NIHdvcmQgdXNpbmcgYml0LWJhbmcKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQG9mZnNldDogb2Zmc2V0IHdpdGhpbiB0aGUgRUVQUk9NIHRvIGJlIHJlYWQKKyAqICBAZGF0YTogcmVhZCAxNiBiaXQgdmFsdWUgZnJvbSBFRVBST00KKyAqCisgKiAgUmVhZHMgMTYgYml0IHZhbHVlIGZyb20gRUVQUk9NIHRocm91Z2ggYml0LWJhbmcgbWV0aG9kCisgKiovCitzMzIgaXhnYmVfcmVhZF9lZXByb21fYml0X2JhbmdfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgb2Zmc2V0LAorCQkJCSAgICAgICB1MTYgKmRhdGEpCit7CisJczMyIHN0YXR1czsKKworCWh3LT5lZXByb20ub3BzLmluaXRfcGFyYW1zKGh3KTsKKworCWlmIChvZmZzZXQgPj0gaHctPmVlcHJvbS53b3JkX3NpemUpIHsKKwkJc3RhdHVzID0gSVhHQkVfRVJSX0VFUFJPTTsKKwkJZ290byBvdXQ7CisJfQorCisJc3RhdHVzID0gaXhnYmVfcmVhZF9lZXByb21fYnVmZmVyX2JpdF9iYW5nKGh3LCBvZmZzZXQsIDEsIGRhdGEpOworCitvdXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfcmVhZF9lZXJkX2J1ZmZlcl9nZW5lcmljIC0gUmVhZCBFRVBST00gd29yZChzKSB1c2luZyBFRVJECisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBvZmZzZXQ6IG9mZnNldCBvZiB3b3JkIGluIHRoZSBFRVBST00gdG8gcmVhZAorICogIEB3b3JkczogbnVtYmVyIG9mIHdvcmQocykKKyAqICBAZGF0YTogMTYgYml0IHdvcmQocykgZnJvbSB0aGUgRUVQUk9NCisgKgorICogIFJlYWRzIGEgMTYgYml0IHdvcmQocykgZnJvbSB0aGUgRUVQUk9NIHVzaW5nIHRoZSBFRVJEIHJlZ2lzdGVyLgorICoqLworczMyIGl4Z2JlX3JlYWRfZWVyZF9idWZmZXJfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgb2Zmc2V0LAorCQkJCSAgIHUxNiB3b3JkcywgdTE2ICpkYXRhKQoreworCXUzMiBlZXJkOworCXMzMiBzdGF0dXMgPSAwOworCXUzMiBpOworCisJaHctPmVlcHJvbS5vcHMuaW5pdF9wYXJhbXMoaHcpOworCisJaWYgKHdvcmRzID09IDApIHsKKwkJc3RhdHVzID0gSVhHQkVfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChvZmZzZXQgPj0gaHctPmVlcHJvbS53b3JkX3NpemUpIHsKKwkJc3RhdHVzID0gSVhHQkVfRVJSX0VFUFJPTTsKKwkJZ290byBvdXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHdvcmRzOyBpKyspIHsKKwkJZWVyZCA9ICgob2Zmc2V0ICsgaSkgPDwgSVhHQkVfRUVQUk9NX1JXX0FERFJfU0hJRlQpICsKKwkJICAgICAgIElYR0JFX0VFUFJPTV9SV19SRUdfU1RBUlQ7CisKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FRVJELCBlZXJkKTsKKwkJc3RhdHVzID0gaXhnYmVfcG9sbF9lZXJkX2Vld3JfZG9uZShodywgSVhHQkVfTlZNX1BPTExfUkVBRCk7CisKKwkJaWYgKHN0YXR1cyA9PSAwKSB7CisJCQlkYXRhW2ldID0gKElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9FRVJEKSA+PgorCQkJCSAgIElYR0JFX0VFUFJPTV9SV19SRUdfREFUQSk7CisJCX0gZWxzZSB7CisJCQlod19kYmcoaHcsICJFZXByb20gcmVhZCB0aW1lZCBvdXRcbiIpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CitvdXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfZGV0ZWN0X2VlcHJvbV9wYWdlX3NpemVfZ2VuZXJpYyAtIERldGVjdCBFRVBST00gcGFnZSBzaXplCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBvZmZzZXQ6IG9mZnNldCB3aXRoaW4gdGhlIEVFUFJPTSB0byBiZSB1c2VkIGFzIGEgc2NyYXRjaCBwYWQKKyAqCisgKiAgRGlzY292ZXIgRUVQUk9NIHBhZ2Ugc2l6ZSBieSB3cml0aW5nIG1hcmNoaW5nIGRhdGEgYXQgZ2l2ZW4gb2Zmc2V0LgorICogIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgd2hlbiB3ZSBhcmUgd3JpdGluZyBhIG5ldyBsYXJnZSBidWZmZXIKKyAqICBhdCBnaXZlbiBvZmZzZXQgc28gdGhlIGRhdGEgd291bGQgYmUgb3ZlcndyaXR0ZW4gYW55d2F5LgorICoqLworc3RhdGljIHMzMiBpeGdiZV9kZXRlY3RfZWVwcm9tX3BhZ2Vfc2l6ZV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsCisJCQkJCQkgdTE2IG9mZnNldCkKK3sKKwl1MTYgZGF0YVtJWEdCRV9FRVBST01fUEFHRV9TSVpFX01BWF07CisJczMyIHN0YXR1cyA9IDA7CisJdTE2IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgSVhHQkVfRUVQUk9NX1BBR0VfU0laRV9NQVg7IGkrKykKKwkJZGF0YVtpXSA9IGk7CisKKwlody0+ZWVwcm9tLndvcmRfcGFnZV9zaXplID0gSVhHQkVfRUVQUk9NX1BBR0VfU0laRV9NQVg7CisJc3RhdHVzID0gaXhnYmVfd3JpdGVfZWVwcm9tX2J1ZmZlcl9iaXRfYmFuZyhodywgb2Zmc2V0LAorCQkJCQkgICAgIElYR0JFX0VFUFJPTV9QQUdFX1NJWkVfTUFYLCBkYXRhKTsKKwlody0+ZWVwcm9tLndvcmRfcGFnZV9zaXplID0gMDsKKwlpZiAoc3RhdHVzICE9IDApCisJCWdvdG8gb3V0OworCisJc3RhdHVzID0gaXhnYmVfcmVhZF9lZXByb21fYnVmZmVyX2JpdF9iYW5nKGh3LCBvZmZzZXQsIDEsIGRhdGEpOworCWlmIChzdGF0dXMgIT0gMCkKKwkJZ290byBvdXQ7CisKKwkvKgorCSAqIFdoZW4gd3JpdGluZyBpbiBidXJzdCBtb3JlIHRoYW4gdGhlIGFjdHVhbCBwYWdlIHNpemUKKwkgKiBFRVBST00gYWRkcmVzcyB3cmFwcyBhcm91bmQgY3VycmVudCBwYWdlLgorCSAqLworCWh3LT5lZXByb20ud29yZF9wYWdlX3NpemUgPSBJWEdCRV9FRVBST01fUEFHRV9TSVpFX01BWCAtIGRhdGFbMF07CisKKwlod19kYmcoaHcsICJEZXRlY3RlZCBFRVBST00gcGFnZSBzaXplID0gJWQgd29yZHMuIiwKKwkgICAgICAgaHctPmVlcHJvbS53b3JkX3BhZ2Vfc2l6ZSk7CiBvdXQ6CiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTcxMiwzMyArMTAxMyw3NSBAQAogICoqLwogczMyIGl4Z2JlX3JlYWRfZWVyZF9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUxNiBvZmZzZXQsIHUxNiAqZGF0YSkKIHsKLQl1MzIgZWVyZDsKLQlzMzIgc3RhdHVzOworCXJldHVybiBpeGdiZV9yZWFkX2VlcmRfYnVmZmVyX2dlbmVyaWMoaHcsIG9mZnNldCwgMSwgZGF0YSk7Cit9CisKKy8qKgorICogIGl4Z2JlX3dyaXRlX2Vld3JfYnVmZmVyX2dlbmVyaWMgLSBXcml0ZSBFRVBST00gd29yZChzKSB1c2luZyBFRVdSCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBvZmZzZXQ6IG9mZnNldCBvZiAgd29yZCBpbiB0aGUgRUVQUk9NIHRvIHdyaXRlCisgKiAgQHdvcmRzOiBudW1iZXIgb2Ygd29yZHMKKyAqICBAZGF0YTogd29yZChzKSB3cml0ZSB0byB0aGUgRUVQUk9NCisgKgorICogIFdyaXRlIGEgMTYgYml0IHdvcmQocykgdG8gdGhlIEVFUFJPTSB1c2luZyB0aGUgRUVXUiByZWdpc3Rlci4KKyAqKi8KK3MzMiBpeGdiZV93cml0ZV9lZXdyX2J1ZmZlcl9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUxNiBvZmZzZXQsCisJCQkJICAgIHUxNiB3b3JkcywgdTE2ICpkYXRhKQoreworCXUzMiBlZXdyOworCXMzMiBzdGF0dXMgPSAwOworCXUxNiBpOwogCiAJaHctPmVlcHJvbS5vcHMuaW5pdF9wYXJhbXMoaHcpOwogCisJaWYgKHdvcmRzID09IDApIHsKKwkJc3RhdHVzID0gSVhHQkVfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisJCWdvdG8gb3V0OworCX0KKwogCWlmIChvZmZzZXQgPj0gaHctPmVlcHJvbS53b3JkX3NpemUpIHsKIAkJc3RhdHVzID0gSVhHQkVfRVJSX0VFUFJPTTsKIAkJZ290byBvdXQ7CiAJfQogCi0JZWVyZCA9IChvZmZzZXQgPDwgSVhHQkVfRUVQUk9NX1JXX0FERFJfU0hJRlQpICsKLQkgICAgICAgSVhHQkVfRUVQUk9NX1JXX1JFR19TVEFSVDsKKwlmb3IgKGkgPSAwOyBpIDwgd29yZHM7IGkrKykgeworCQllZXdyID0gKChvZmZzZXQgKyBpKSA8PCBJWEdCRV9FRVBST01fUldfQUREUl9TSElGVCkgfAorCQkgICAgICAgKGRhdGFbaV0gPDwgSVhHQkVfRUVQUk9NX1JXX1JFR19EQVRBKSB8CisJCSAgICAgICBJWEdCRV9FRVBST01fUldfUkVHX1NUQVJUOwogCi0JSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FRVJELCBlZXJkKTsKLQlzdGF0dXMgPSBpeGdiZV9wb2xsX2VlcmRfZWV3cl9kb25lKGh3LCBJWEdCRV9OVk1fUE9MTF9SRUFEKTsKKwkJc3RhdHVzID0gaXhnYmVfcG9sbF9lZXJkX2Vld3JfZG9uZShodywgSVhHQkVfTlZNX1BPTExfV1JJVEUpOworCQlpZiAoc3RhdHVzICE9IDApIHsKKwkJCWh3X2RiZyhodywgIkVlcHJvbSB3cml0ZSBFRVdSIHRpbWVkIG91dFxuIik7CisJCQlnb3RvIG91dDsKKwkJfQogCi0JaWYgKHN0YXR1cyA9PSAwKQotCQkqZGF0YSA9IChJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRUVSRCkgPj4KLQkJICAgICAgICAgSVhHQkVfRUVQUk9NX1JXX1JFR19EQVRBKTsKLQllbHNlCi0JCWh3X2RiZyhodywgIkVlcHJvbSByZWFkIHRpbWVkIG91dFxuIik7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUVXUiwgZWV3cik7CisKKwkJc3RhdHVzID0gaXhnYmVfcG9sbF9lZXJkX2Vld3JfZG9uZShodywgSVhHQkVfTlZNX1BPTExfV1JJVEUpOworCQlpZiAoc3RhdHVzICE9IDApIHsKKwkJCWh3X2RiZyhodywgIkVlcHJvbSB3cml0ZSBFRVdSIHRpbWVkIG91dFxuIik7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KIAogb3V0OgogCXJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgorICogIGl4Z2JlX3dyaXRlX2Vld3JfZ2VuZXJpYyAtIFdyaXRlIEVFUFJPTSB3b3JkIHVzaW5nIEVFV1IKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQG9mZnNldDogb2Zmc2V0IG9mICB3b3JkIGluIHRoZSBFRVBST00gdG8gd3JpdGUKKyAqICBAZGF0YTogd29yZCB3cml0ZSB0byB0aGUgRUVQUk9NCisgKgorICogIFdyaXRlIGEgMTYgYml0IHdvcmQgdG8gdGhlIEVFUFJPTSB1c2luZyB0aGUgRUVXUiByZWdpc3Rlci4KKyAqKi8KK3MzMiBpeGdiZV93cml0ZV9lZXdyX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwgdTE2IGRhdGEpCit7CisJcmV0dXJuIGl4Z2JlX3dyaXRlX2Vld3JfYnVmZmVyX2dlbmVyaWMoaHcsIG9mZnNldCwgMSwgJmRhdGEpOworfQorCisvKioKICAqICBpeGdiZV9wb2xsX2VlcmRfZWV3cl9kb25lIC0gUG9sbCBFRVJEIHJlYWQgb3IgRUVXUiB3cml0ZSBzdGF0dXMKICAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCiAgKiAgQGVlX3JlZzogRUVQUk9NIGZsYWcgZm9yIHBvbGxpbmcKQEAgLTc0Niw3ICsxMDg5LDcgQEAKICAqICBQb2xscyB0aGUgc3RhdHVzIGJpdCAoYml0IDEpIG9mIHRoZSBFRVJEIG9yIEVFV1IgdG8gZGV0ZXJtaW5lIHdoZW4gdGhlCiAgKiAgcmVhZCBvciB3cml0ZSBpcyBkb25lIHJlc3BlY3RpdmVseS4KICAqKi8KLXMzMiBpeGdiZV9wb2xsX2VlcmRfZWV3cl9kb25lKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiBlZV9yZWcpCitzdGF0aWMgczMyIGl4Z2JlX3BvbGxfZWVyZF9lZXdyX2RvbmUoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIGVlX3JlZykKIHsKIAl1MzIgaTsKIAl1MzIgcmVnOwpAQCAtODQ2LDYgKzExODksMjggQEAKIAkJdWRlbGF5KDUwKTsKIAl9CiAKKwlpZiAoaSA9PSB0aW1lb3V0KSB7CisJCWh3X2RiZyhodywgIkRyaXZlciBjYW4ndCBhY2Nlc3MgdGhlIEVlcHJvbSAtIFNNQkkgU2VtYXBob3JlICIKKwkJICAgICAgICJub3QgZ3JhbnRlZC5cbiIpOworCQkvKgorCQkgKiB0aGlzIHJlbGVhc2UgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCBiZWNhdXNlIG91ciBhdHRlbXB0cworCQkgKiBhYm92ZSB0byBnZXQgdGhlIHNlbWFwaG9yZSBtYXkgaGF2ZSBzdWNjZWVkZWQsIGFuZCBpZiB0aGVyZQorCQkgKiB3YXMgYSB0aW1lb3V0LCB3ZSBzaG91bGQgdW5jb25kaXRpb25hbGx5IGNsZWFyIHRoZSBzZW1hcGhvcmUKKwkJICogYml0cyB0byBmcmVlIHRoZSBkcml2ZXIgdG8gbWFrZSBwcm9ncmVzcworCQkgKi8KKwkJaXhnYmVfcmVsZWFzZV9lZXByb21fc2VtYXBob3JlKGh3KTsKKworCQl1ZGVsYXkoNTApOworCQkvKgorCQkgKiBvbmUgbGFzdCB0cnkKKwkJICogSWYgdGhlIFNNQkkgYml0IGlzIDAgd2hlbiB3ZSByZWFkIGl0LCB0aGVuIHRoZSBiaXQgd2lsbCBiZQorCQkgKiBzZXQgYW5kIHdlIGhhdmUgdGhlIHNlbWFwaG9yZQorCQkgKi8KKwkJc3dzbSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9TV1NNKTsKKwkJaWYgKCEoc3dzbSAmIElYR0JFX1NXU01fU01CSSkpCisJCQlzdGF0dXMgPSAwOworCX0KKwogCS8qIE5vdyBnZXQgdGhlIHNlbWFwaG9yZSBiZXR3ZWVuIFNXL0ZXIHRocm91Z2ggdGhlIFNXRVNNQkkgYml0ICovCiAJaWYgKHN0YXR1cyA9PSAwKSB7CiAJCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKQEAgLTExMTIsOCArMTQ3NywxMiBAQAogCiAJaHctPm1hYy5vcHMucmVsZWFzZV9zd2Z3X3N5bmMoaHcsIElYR0JFX0dTU1JfRUVQX1NNKTsKIAotCS8qIERlbGF5IGJlZm9yZSBhdHRlbXB0IHRvIG9idGFpbiBzZW1hcGhvcmUgYWdhaW4gdG8gYWxsb3cgRlcgYWNjZXNzICovCi0JbXNsZWVwKGh3LT5lZXByb20uc2VtYXBob3JlX2RlbGF5KTsKKwkvKgorCSAqIERlbGF5IGJlZm9yZSBhdHRlbXB0IHRvIG9idGFpbiBzZW1hcGhvcmUgYWdhaW4gdG8gYWxsb3cgRlcKKwkgKiBhY2Nlc3MuIHNlbWFwaG9yZV9kZWxheSBpcyBpbiBtcyB3ZSBuZWVkIHVzIGZvciB1c2xlZXBfcmFuZ2UKKwkgKi8KKwl1c2xlZXBfcmFuZ2UoaHctPmVlcHJvbS5zZW1hcGhvcmVfZGVsYXkgKiAxMDAwLAorCQkgICAgIGh3LT5lZXByb20uc2VtYXBob3JlX2RlbGF5ICogMjAwMCk7CiB9CiAKIC8qKgpAQCAtMjE4OSw3ICsyNTU4LDcgQEAKIAkJICogdGhyZWFkIGN1cnJlbnRseSB1c2luZyByZXNvdXJjZSAoc3dtYXNrKQogCQkgKi8KIAkJaXhnYmVfcmVsZWFzZV9lZXByb21fc2VtYXBob3JlKGh3KTsKLQkJbXNsZWVwKDUpOworCQl1c2xlZXBfcmFuZ2UoNTAwMCwgMTAwMDApOwogCQl0aW1lb3V0LS07CiAJfQogCkBAIC0yMjYzLDcgKzI2MzIsNyBAQAogCQlhdXRvY19yZWcgfD0gSVhHQkVfQVVUT0NfQU5fUkVTVEFSVDsKIAkJYXV0b2NfcmVnIHw9IElYR0JFX0FVVE9DX0ZMVTsKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9BVVRPQywgYXV0b2NfcmVnKTsKLQkJbXNsZWVwKDEwKTsKKwkJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CiAJfQogCiAJbGVkX3JlZyAmPSB+SVhHQkVfTEVEX01PREVfTUFTSyhpbmRleCk7CkBAIC0yODgzLDMgKzMyNTIsMTggQEAKIAkJcGZ2ZnNwb29mICY9IH4oMSA8PCB2Zl90YXJnZXRfc2hpZnQpOwogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUEZWRlNQT09GKHZmX3RhcmdldF9yZWcpLCBwZnZmc3Bvb2YpOwogfQorCisvKioKKyAqICBpeGdiZV9nZXRfZGV2aWNlX2NhcHNfZ2VuZXJpYyAtIEdldCBhZGRpdGlvbmFsIGRldmljZSBjYXBhYmlsaXRpZXMKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGRldmljZV9jYXBzOiB0aGUgRUVQUk9NIHdvcmQgd2l0aCB0aGUgZXh0cmEgZGV2aWNlIGNhcGFiaWxpdGllcworICoKKyAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVhZCB0aGUgRUVQUk9NIGxvY2F0aW9uIGZvciB0aGUgZGV2aWNlIGNhcGFiaWxpdGllcywKKyAqICBhbmQgcmV0dXJuIHRoZSB3b3JkIHRocm91Z2ggZGV2aWNlX2NhcHMuCisgKiovCitzMzIgaXhnYmVfZ2V0X2RldmljZV9jYXBzX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2ICpkZXZpY2VfY2FwcykKK3sKKwlody0+ZWVwcm9tLm9wcy5yZWFkKGh3LCBJWEdCRV9ERVZJQ0VfQ0FQUywgZGV2aWNlX2NhcHMpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5oCmluZGV4IDUwOGY2MzUuLjQ2YmU4M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5oCkBAIC0zNSw2ICszNSw3IEBACiBzMzIgaXhnYmVfaW5pdF9vcHNfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKIHMzMiBpeGdiZV9pbml0X2h3X2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodyk7CiBzMzIgaXhnYmVfc3RhcnRfaHdfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3MzMiBpeGdiZV9zdGFydF9od19nZW4yKHN0cnVjdCBpeGdiZV9odyAqaHcpOwogczMyIGl4Z2JlX2NsZWFyX2h3X2NudHJzX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodyk7CiBzMzIgaXhnYmVfcmVhZF9wYmFfc3RyaW5nX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggKnBiYV9udW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHBiYV9udW1fc2l6ZSk7CkBAIC00OCwxNCArNDksMjIgQEAKIAogczMyIGl4Z2JlX2luaXRfZWVwcm9tX3BhcmFtc19nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcpOwogczMyIGl4Z2JlX3dyaXRlX2VlcHJvbV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUxNiBvZmZzZXQsIHUxNiBkYXRhKTsKK3MzMiBpeGdiZV93cml0ZV9lZXByb21fYnVmZmVyX2JpdF9iYW5nX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwKKwkJCQkJICAgICAgIHUxNiB3b3JkcywgdTE2ICpkYXRhKTsKIHMzMiBpeGdiZV9yZWFkX2VlcmRfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpOworczMyIGl4Z2JlX3JlYWRfZWVyZF9idWZmZXJfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgb2Zmc2V0LAorCQkJCSAgIHUxNiB3b3JkcywgdTE2ICpkYXRhKTsKK3MzMiBpeGdiZV93cml0ZV9lZXdyX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwgdTE2IGRhdGEpOworczMyIGl4Z2JlX3dyaXRlX2Vld3JfYnVmZmVyX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwKKwkJCQkgICAgdTE2IHdvcmRzLCB1MTYgKmRhdGEpOwogczMyIGl4Z2JlX3JlYWRfZWVwcm9tX2JpdF9iYW5nX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqZGF0YSk7CitzMzIgaXhnYmVfcmVhZF9lZXByb21fYnVmZmVyX2JpdF9iYW5nX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwKKwkJCQkJICAgICAgdTE2IHdvcmRzLCB1MTYgKmRhdGEpOwogdTE2IGl4Z2JlX2NhbGNfZWVwcm9tX2NoZWNrc3VtX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodyk7CiBzMzIgaXhnYmVfdmFsaWRhdGVfZWVwcm9tX2NoZWNrc3VtX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgKmNoZWNrc3VtX3ZhbCk7CiBzMzIgaXhnYmVfdXBkYXRlX2VlcHJvbV9jaGVja3N1bV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcpOwotczMyIGl4Z2JlX3BvbGxfZWVyZF9lZXdyX2RvbmUoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIGVlX3JlZyk7CiAKIHMzMiBpeGdiZV9zZXRfcmFyX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIGluZGV4LCB1OCAqYWRkciwgdTMyIHZtZHEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBlbmFibGVfYWRkcik7CkBAIC04OSw2ICs5OCw3IEBACiBzMzIgaXhnYmVfYmxpbmtfbGVkX3N0b3BfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgaW5kZXgpOwogdm9pZCBpeGdiZV9zZXRfbWFjX2FudGlfc3Bvb2Zpbmcoc3RydWN0IGl4Z2JlX2h3ICpodywgYm9vbCBlbmFibGUsIGludCBwZik7CiB2b2lkIGl4Z2JlX3NldF92bGFuX2FudGlfc3Bvb2Zpbmcoc3RydWN0IGl4Z2JlX2h3ICpodywgYm9vbCBlbmFibGUsIGludCB2Zik7CitzMzIgaXhnYmVfZ2V0X2RldmljZV9jYXBzX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2ICpkZXZpY2VfY2Fwcyk7CiAKICNkZWZpbmUgSVhHQkVfV1JJVEVfUkVHKGEsIHJlZywgdmFsdWUpIHdyaXRlbCgodmFsdWUpLCAoKGEpLT5od19hZGRyICsgKHJlZykpKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTguYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OC5jCmluZGV4IDFiYzU3ZTUuLjc3MWQwMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OC5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OC5jCkBAIC0yODksNyArMjg5LDcgQEAKICAqIENvbmZpZ3VyZSBxdWV1ZSBzdGF0aXN0aWNzIHJlZ2lzdGVycywgYWxsIHF1ZXVlcyBiZWxvbmdpbmcgdG8gc2FtZSB0cmFmZmljCiAgKiBjbGFzcyB1c2VzIGEgc2luZ2xlIHNldCBvZiBxdWV1ZSBzdGF0aXN0aWNzIGNvdW50ZXJzLgogICovCi1zMzIgaXhnYmVfZGNiX2NvbmZpZ190Y19zdGF0c184MjU5OChzdHJ1Y3QgaXhnYmVfaHcgKmh3KQorc3RhdGljIHMzMiBpeGdiZV9kY2JfY29uZmlnX3RjX3N0YXRzXzgyNTk4KHN0cnVjdCBpeGdiZV9odyAqaHcpCiB7CiAJdTMyIHJlZyA9IDA7CiAJdTggIGkgICA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTkuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OS5jCmluZGV4IDAyNWFmOGMuLmQ1MGNmNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OS5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OS5jCkBAIC0zOSwzNiArMzksNTIgQEAKICAqLwogc3RhdGljIHMzMiBpeGdiZV9kY2JfY29uZmlnX3BhY2tldF9idWZmZXJzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IHJ4X3BiYSkKIHsKLQlzMzIgcmV0X3ZhbCA9IDA7Ci0JdTMyIHZhbHVlID0gSVhHQkVfUlhQQlNJWkVfNjRLQjsKKwlpbnQgbnVtX3RjcyA9IElYR0JFX01BWF9QQUNLRVRfQlVGRkVSUzsKKwl1MzIgcnhfcGJfc2l6ZSA9IGh3LT5tYWMucnhfcGJfc2l6ZSA8PCBJWEdCRV9SWFBCU0laRV9TSElGVDsKKwl1MzIgcnhwa3RzaXplOworCXUzMiB0eHBrdHNpemU7CisJdTMyIHR4cGJ0aHJlc2g7CiAJdTggIGkgPSAwOwogCi0JLyogU2V0dXAgUnggcGFja2V0IGJ1ZmZlciBzaXplcyAqLwotCXN3aXRjaCAocnhfcGJhKSB7Ci0JY2FzZSBwYmFfODBfNDg6Ci0JCS8qIFNldHVwIHRoZSBmaXJzdCBmb3VyIGF0IDgwS0IgKi8KLQkJdmFsdWUgPSBJWEdCRV9SWFBCU0laRV84MEtCOwotCQlmb3IgKDsgaSA8IDQ7IGkrKykKLQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhQQlNJWkUoaSksIHZhbHVlKTsKLQkJLyogU2V0dXAgdGhlIGxhc3QgZm91ciBhdCA0OEtCLi4uZG9uJ3QgcmUtaW5pdCBpICovCi0JCXZhbHVlID0gSVhHQkVfUlhQQlNJWkVfNDhLQjsKLQkJLyogRmFsbCBUaHJvdWdoICovCi0JY2FzZSBwYmFfZXF1YWw6Ci0JZGVmYXVsdDoKLQkJZm9yICg7IGkgPCBJWEdCRV9NQVhfUEFDS0VUX0JVRkZFUlM7IGkrKykKLQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhQQlNJWkUoaSksIHZhbHVlKTsKLQotCQkvKiBTZXR1cCBUeCBwYWNrZXQgYnVmZmVyIHNpemVzICovCi0JCWZvciAoaSA9IDA7IGkgPCBJWEdCRV9NQVhfUEFDS0VUX0JVRkZFUlM7IGkrKykgewotCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9UWFBCU0laRShpKSwKLQkJCSAgICAgICAgICAgICAgICBJWEdCRV9UWFBCU0laRV8yMEtCKTsKLQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVFhQQlRIUkVTSChpKSwKLQkJCSAgICAgICAgICAgICAgICBJWEdCRV9UWFBCVEhSRVNIX0RDQik7Ci0JCX0KLQkJYnJlYWs7CisJLyoKKwkgKiBUaGlzIHJlYWxseSBtZWFucyBjb25maWd1cmUgdGhlIGZpcnN0IGhhbGYgb2YgdGhlIFRDcworCSAqIChUcmFmZmljIENsYXNzZXMpIHRvIHVzZSA1Lzggb2YgdGhlIFJ4IHBhY2tldCBidWZmZXIKKwkgKiBzcGFjZS4gIFRvIGRldGVybWluZSB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGZvciBlYWNoIFRDLAorCSAqIHdlIGFyZSBtdWx0aXBseWluZyB0aGUgYXZlcmFnZSBzaXplIGJ5IDUvNCBhbmQgYXBwbHlpbmcKKwkgKiBpdCB0byBoYWxmIG9mIHRoZSB0cmFmZmljIGNsYXNzZXMuCisJICovCisJaWYgKHJ4X3BiYSA9PSBwYmFfODBfNDgpIHsKKwkJcnhwa3RzaXplID0gKHJ4X3BiX3NpemUgKiA1KSAvIChudW1fdGNzICogNCk7CisJCXJ4X3BiX3NpemUgLT0gcnhwa3RzaXplICogKG51bV90Y3MgLyAyKTsKKwkJZm9yICg7IGkgPCAobnVtX3RjcyAvIDIpOyBpKyspCisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JYUEJTSVpFKGkpLCByeHBrdHNpemUpOwogCX0KIAotCXJldHVybiByZXRfdmFsOworCS8qIERpdmlkZSB0aGUgcmVtYWluaW5nIFJ4IHBhY2tldCBidWZmZXIgZXZlbmx5IGFtb25nIHRoZSBUQ3MgKi8KKwlyeHBrdHNpemUgPSByeF9wYl9zaXplIC8gKG51bV90Y3MgLSBpKTsKKwlmb3IgKDsgaSA8IG51bV90Y3M7IGkrKykKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SWFBCU0laRShpKSwgcnhwa3RzaXplKTsKKworCS8qCisJICogU2V0dXAgVHggcGFja2V0IGJ1ZmZlciBhbmQgdGhyZXNob2xkIGVxdWFsbHkgZm9yIGFsbCBUQ3MKKwkgKiBUWFBCVEhSRVNIIHJlZ2lzdGVyIGlzIHNldCBpbiBLIHNvIGRpdmlkZSBieSAxMDI0IGFuZCBzdWJ0cmFjdAorCSAqIDEwIHNpbmNlIHRoZSBsYXJnZXN0IHBhY2tldCB3ZSBzdXBwb3J0IGlzIGp1c3Qgb3ZlciA5Sy4KKwkgKi8KKwl0eHBrdHNpemUgPSBJWEdCRV9UWFBCU0laRV9NQVggLyBudW1fdGNzOworCXR4cGJ0aHJlc2ggPSAodHhwa3RzaXplIC8gMTAyNCkgLSBJWEdCRV9UWFBLVF9TSVpFX01BWDsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3RjczsgaSsrKSB7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVFhQQlNJWkUoaSksIHR4cGt0c2l6ZSk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVFhQQlRIUkVTSChpKSwgdHhwYnRocmVzaCk7CisJfQorCisJLyogQ2xlYXIgdW51c2VkIFRDcywgaWYgYW55LCB0byB6ZXJvIGJ1ZmZlciBzaXplKi8KKwlmb3IgKDsgaSA8IE1BWF9UUkFGRklDX0NMQVNTOyBpKyspIHsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SWFBCU0laRShpKSwgMCk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVFhQQlNJWkUoaSksIDApOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1RYUEJUSFJFU0goaSksIDApOworCX0KKworCXJldHVybiAwOwogfQogCiAvKioKQEAgLTI4NSwxMiArMzAxLDE3IEBACiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNDRkcsIHJlZyk7CiAJCS8qCiAJCSAqIEVuYWJsZSBSZWNlaXZlIFBGQwotCQkgKiBXZSB3aWxsIGFsd2F5cyBob25vciBYT0ZGIGZyYW1lcyB3ZSByZWNlaXZlIHdoZW4KLQkJICogd2UgYXJlIGluIFBGQyBtb2RlLgorCQkgKiA4MjU5OSB3aWxsIGFsd2F5cyBob25vciBYT0ZGIGZyYW1lcyB3ZSByZWNlaXZlIHdoZW4KKwkJICogd2UgYXJlIGluIFBGQyBtb2RlIGhvd2V2ZXIgWDU0MCBvbmx5IGhvbm9ycyBlbmFibGVkCisJCSAqIHRyYWZmaWMgY2xhc3Nlcy4KIAkJICovCiAJCXJlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9NRkxDTik7CiAJCXJlZyAmPSB+SVhHQkVfTUZMQ05fUkZDRTsKIAkJcmVnIHw9IElYR0JFX01GTENOX1JQRkNFIHwgSVhHQkVfTUZMQ05fRFBGOworCisJCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjX1g1NDApCisJCQlyZWcgfD0gcGZjX2VuIDw8IElYR0JFX01GTENOX1JQRkNFX1NISUZUOworCiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTUZMQ04sIHJlZyk7CiAKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk5LmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTkuaAppbmRleCAxNDhmZDhiLi4yZGU3MWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTkuaAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTkuaApAQCAtOTIsOCArOTIsMTAgQEAKICNkZWZpbmUgSVhHQkVfUlhQQlNJWkVfNjRLQiAgICAgMHgwMDAxMDAwMCAvKiA2NEtCIFBhY2tldCBCdWZmZXIgKi8KICNkZWZpbmUgSVhHQkVfUlhQQlNJWkVfODBLQiAgICAgMHgwMDAxNDAwMCAvKiA4MEtCIFBhY2tldCBCdWZmZXIgKi8KICNkZWZpbmUgSVhHQkVfUlhQQlNJWkVfMTI4S0IgICAgMHgwMDAyMDAwMCAvKiAxMjhLQiBQYWNrZXQgQnVmZmVyICovCisjZGVmaW5lIElYR0JFX1RYUEJTSVpFX01BWAkweDAwMDI4MDAwIC8qIDE2MEtCIFBhY2tldCBCdWZmZXIqLwogCiAjZGVmaW5lIElYR0JFX1RYUEJUSFJFU0hfRENCICAgIDB4QSAgICAgICAgLyogVEhSRVNIIHZhbHVlIGZvciBEQ0IgbW9kZSAqLworI2RlZmluZSBJWEdCRV9UWFBLVF9TSVpFX01BWCAgICAweEEgICAgICAgIC8qIE1heCBUeCBQYWNrZXQgc2l6ZSAgKi8KIAogLyogU0VDVFhNSU5JRkcgRENCICovCiAjZGVmaW5lIElYR0JFX1NFQ1RYX0RDQgkJMHgwMDAwMUYwMCAvKiBEQ0IgVFggQnVmZmVyIElGRyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiX25sLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYwppbmRleCAzMjdjODYxLi41ZTdlZDIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYwpAQCAtMzQ3LDE4ICszNDcsMjggQEAKIHN0YXRpYyB1OCBpeGdiZV9kY2JubF9zZXRfYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBkY2JfYXBwIGFwcCA9IHsKKwkJCSAgICAgIC5zZWxlY3RvciA9IERDQl9BUFBfSURUWVBFX0VUSFRZUEUsCisJCQkgICAgICAucHJvdG9jb2wgPSBFVEhfUF9GQ09FLAorCQkJICAgICB9OworCXU4IHVwID0gZGNiX2dldGFwcChuZXRkZXYsICZhcHApOwogCWludCByZXQ7CiAKLQlpZiAoIWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHx8Ci0JICAgICEoYWRhcHRlci0+ZGNieF9jYXAgJiBEQ0JfQ0FQX0RDQlhfVkVSX0NFRSkpCi0JCXJldHVybiBEQ0JfTk9fSFdfQ0hHOwotCiAJcmV0ID0gaXhnYmVfY29weV9kY2JfY2ZnKCZhZGFwdGVyLT50ZW1wX2RjYl9jZmcsICZhZGFwdGVyLT5kY2JfY2ZnLAogCQkJCSBNQVhfVFJBRkZJQ19DTEFTUyk7Ci0KIAlpZiAocmV0KQogCQlyZXR1cm4gRENCX05PX0hXX0NIRzsKIAorCS8qIEluIElFRUUgbW9kZSBhcHAgZGF0YSBtdXN0IGJlIHBhcnNlZCBpbnRvIERDQlggZm9ybWF0IGZvcgorCSAqIGhhcmR3YXJlIHJvdXRpbmVzLgorCSAqLworCWlmIChhZGFwdGVyLT5kY2J4X2NhcCAmIERDQl9DQVBfRENCWF9WRVJfSUVFRSkKKwkJdXAgPSAoMSA8PCB1cCk7CisKKyNpZmRlZiBJWEdCRV9GQ09FCisJaWYgKHVwICYmICh1cCAhPSAoMSA8PCBhZGFwdGVyLT5mY29lLnVwKSkpCisJCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9BUFBfVVBDSEc7CisKIAkvKgogCSAqIE9ubHkgdGFrZSBkb3duIHRoZSBhZGFwdGVyIGlmIGFuIGFwcCBjaGFuZ2Ugb2NjdXJyZWQuIEZDb0UKIAkgKiBtYXkgc2h1ZmZsZSB0eCByaW5ncyBpbiB0aGlzIGNhc2UgYW5kIHRoaXMgY2FuIG5vdCBiZSBkb25lCkBAIC0zNjYsMTIgKzM3NiwxNSBAQAogCSAqLwogCWlmIChhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCAmIEJJVF9BUFBfVVBDSEcpIHsKIAkJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19JWEdCRV9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCi0JCQltc2xlZXAoMSk7CisJCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CisKKwkJaXhnYmVfZmNvZV9zZXRhcHAoYWRhcHRlciwgdXApOwogCiAJCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCQluZXRkZXYtPm5ldGRldl9vcHMtPm5kb19zdG9wKG5ldGRldik7CiAJCWl4Z2JlX2NsZWFyX2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7CiAJfQorI2VuZGlmCiAKIAlpZiAoYWRhcHRlci0+ZGNiX2NmZy5wZmNfbW9kZV9lbmFibGUpIHsKIAkJc3dpdGNoIChhZGFwdGVyLT5ody5tYWMudHlwZSkgewpAQCAtMzk5LDEyICs0MTIsMTQgQEAKIAkJfQogCX0KIAorI2lmZGVmIElYR0JFX0ZDT0UKIAlpZiAoYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgJiBCSVRfQVBQX1VQQ0hHKSB7CiAJCWl4Z2JlX2luaXRfaW50ZXJydXB0X3NjaGVtZShhZGFwdGVyKTsKIAkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKIAkJCW5ldGRldi0+bmV0ZGV2X29wcy0+bmRvX29wZW4obmV0ZGV2KTsKIAkJcmV0ID0gRENCX0hXX0NIR19SU1Q7CiAJfQorI2VuZGlmCiAKIAlpZiAoYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgJiBCSVRfUEZDKSB7CiAJCXU4IHBmY19lbjsKQEAgLTU1OCw2OCArNTczLDYgQEAKIAlyZXR1cm4gZGNiX2dldGFwcChuZXRkZXYsICZhcHApOwogfQogCi0vKioKLSAqIGl4Z2JlX2RjYm5sX3NldGFwcCAtIHNldCB0aGUgRENCWCBhcHBsaWNhdGlvbiB1c2VyIHByaW9yaXR5Ci0gKiBAbmV0ZGV2IDogdGhlIGNvcnJlc3BvbmRpbmcgbmV0ZGV2Ci0gKiBAaWR0eXBlIDogaWRlbnRpZmllcyB0aGUgaWQgYXMgZXRoZXIgdHlwZSBvciBUQ1AvVURQIHBvcnQgbnVtYmVyCi0gKiBAaWQ6IGlkIGlzIGVpdGhlciBldGhlciB0eXBlIG9yIFRDUC9VRFAgcG9ydCBudW1iZXIKLSAqIEB1cDogdGhlIDgwMi4xcCB1c2VyIHByaW9yaXR5IGJpdG1hcAotICoKLSAqIFJldHVybnMgOiAwIG9uIHN1Y2Nlc3Mgb3IgMSBvbiBlcnJvcgotICovCi1zdGF0aWMgdTggaXhnYmVfZGNibmxfc2V0YXBwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGlkdHlwZSwgdTE2IGlkLCB1OCB1cCkKLXsKLQlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JdTggcnZhbCA9IDE7Ci0Jc3RydWN0IGRjYl9hcHAgYXBwID0gewotCQkJICAgICAgLnNlbGVjdG9yID0gaWR0eXBlLAotCQkJICAgICAgLnByb3RvY29sID0gaWQsCi0JCQkgICAgICAucHJpb3JpdHkgPSB1cAotCQkJICAgICB9OwotCi0JaWYgKCEoYWRhcHRlci0+ZGNieF9jYXAgJiBEQ0JfQ0FQX0RDQlhfVkVSX0NFRSkpCi0JCXJldHVybiBydmFsOwotCi0JcnZhbCA9IGRjYl9zZXRhcHAobmV0ZGV2LCAmYXBwKTsKLQotCXN3aXRjaCAoaWR0eXBlKSB7Ci0JY2FzZSBEQ0JfQVBQX0lEVFlQRV9FVEhUWVBFOgotI2lmZGVmIElYR0JFX0ZDT0UKLQkJaWYgKGlkID09IEVUSF9QX0ZDT0UpIHsKLQkJCXU4IG9sZF90YzsKLQotCQkJLyogR2V0IGN1cnJlbnQgcHJvZ3JhbW1lZCB0YyAqLwotCQkJb2xkX3RjID0gYWRhcHRlci0+ZmNvZS50YzsKLQkJCXJ2YWwgPSBpeGdiZV9mY29lX3NldGFwcChhZGFwdGVyLCB1cCk7Ci0KLQkJCWlmIChydmFsIHx8Ci0JCQkgICAhKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkgfHwKLQkJCSAgICEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZDT0VfRU5BQkxFRCkpCi0JCQkJYnJlYWs7Ci0KLQkJCS8qIFRoZSBGQ29FIGFwcGxpY2F0aW9uIHByaW9yaXR5IG1heSBiZSBjaGFuZ2VkIG11bHRpcGxlCi0JCQkgKiB0aW1lcyBpbiBxdWljayBzdWNjZXNzaW9uIHdpdGggc3dpdGNoZXMgdGhhdCBidWlsZCB1cAotCQkJICogVExWcy4gVG8gYXZvaWQgY3JlYXRpbmcgdW5lZWRlZCBkZXZpY2UgcmVzZXRzIHRoaXMKLQkJCSAqIGNoZWNrcyB0aGUgYWN0dWFsIEhXIGNvbmZpZ3VyYXRpb24gYW5kIGNsZWFycwotCQkJICogQklUX0FQUF9VUENIRyBpZiBhIEhXIGNvbmZpZ3VyYXRpb24gY2hhbmdlIGlzIG5vdAotCQkJICogbmVlZAotCQkJICovCi0JCQlpZiAob2xkX3RjID09IGFkYXB0ZXItPmZjb2UudGMpCi0JCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgJj0gfkJJVF9BUFBfVVBDSEc7Ci0JCQllbHNlCi0JCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0FQUF9VUENIRzsKLQkJfQotI2VuZGlmCi0JCWJyZWFrOwotCWNhc2UgRENCX0FQUF9JRFRZUEVfUE9SVE5VTToKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCXJldHVybiBydmFsOwotfQotCiBzdGF0aWMgaW50IGl4Z2JlX2RjYm5sX2llZWVfZ2V0ZXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICAgc3RydWN0IGllZWVfZXRzICpldHMpCiB7CkBAIC03NDUsMjUgKzY5OCwxNCBAQAogCiAJaWYgKCEoYWRhcHRlci0+ZGNieF9jYXAgJiBEQ0JfQ0FQX0RDQlhfVkVSX0lFRUUpKQogCQlyZXR1cm4gLUVJTlZBTDsKLSNpZmRlZiBJWEdCRV9GQ09FCi0JaWYgKGFwcC0+c2VsZWN0b3IgPT0gMSAmJiBhcHAtPnByb3RvY29sID09IEVUSF9QX0ZDT0UpIHsKLQkJaWYgKGFkYXB0ZXItPmZjb2UudGMgPT0gYXBwLT5wcmlvcml0eSkKLQkJCWdvdG8gc2V0YXBwOwogCi0JCS8qIEluIElFRUUgbW9kZSBtYXAgdXAgdG8gdGMgMToxICovCi0JCWFkYXB0ZXItPmZjb2UudGMgPSBhcHAtPnByaW9yaXR5OwotCQlhZGFwdGVyLT5mY29lLnVwID0gYXBwLT5wcmlvcml0eTsKLQotCQkvKiBGb3JjZSBoYXJkd2FyZSByZXNldCByZXF1aXJlZCB0byBwdXNoIEZDb0UKLQkJICogc2V0dXAgb24ge3R4fHJ4fV9yaW5ncwotCQkgKi8KLQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0FQUF9VUENIRzsKLQkJaXhnYmVfZGNibmxfc2V0X2FsbChkZXYpOwotCX0KLQotc2V0YXBwOgotI2VuZGlmCiAJZGNiX3NldGFwcChkZXYsIGFwcCk7CisKKyNpZmRlZiBJWEdCRV9GQ09FCisJaWYgKGFwcC0+c2VsZWN0b3IgPT0gMSAmJiBhcHAtPnByb3RvY29sID09IEVUSF9QX0ZDT0UgJiYKKwkgICAgYWRhcHRlci0+ZmNvZS50YyA9PSBhcHAtPnByaW9yaXR5KQorCQlpeGdiZV9kY2JubF9zZXRfYWxsKGRldik7CisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KIApAQCAtODM4LDcgKzc4MCw2IEBACiAJLmdldHBmY3N0YXRlCT0gaXhnYmVfZGNibmxfZ2V0cGZjc3RhdGUsCiAJLnNldHBmY3N0YXRlCT0gaXhnYmVfZGNibmxfc2V0cGZjc3RhdGUsCiAJLmdldGFwcAkJPSBpeGdiZV9kY2JubF9nZXRhcHAsCi0JLnNldGFwcAkJPSBpeGdiZV9kY2JubF9zZXRhcHAsCiAJLmdldGRjYngJPSBpeGdiZV9kY2JubF9nZXRkY2J4LAogCS5zZXRkY2J4CT0gaXhnYmVfZGNibmxfc2V0ZGNieCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMKaW5kZXggNzYzODBhMi4uY2IxNTU1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYwpAQCAtODQsNiArODQsNyBAQAogCXsiaHdfcnNjX2ZsdXNoZWQiLCBJWEdCRV9TVEFUKHJzY190b3RhbF9mbHVzaCl9LAogCXsiZmRpcl9tYXRjaCIsIElYR0JFX1NUQVQoc3RhdHMuZmRpcm1hdGNoKX0sCiAJeyJmZGlyX21pc3MiLCBJWEdCRV9TVEFUKHN0YXRzLmZkaXJtaXNzKX0sCisJeyJmZGlyX292ZXJmbG93IiwgSVhHQkVfU1RBVChmZGlyX292ZXJmbG93KX0sCiAJeyJyeF9maWZvX2Vycm9ycyIsIElYR0JFX05FVERFVl9TVEFUKHJ4X2ZpZm9fZXJyb3JzKX0sCiAJeyJyeF9taXNzZWRfZXJyb3JzIiwgSVhHQkVfTkVUREVWX1NUQVQocnhfbWlzc2VkX2Vycm9ycyl9LAogCXsidHhfYWJvcnRlZF9lcnJvcnMiLCBJWEdCRV9ORVRERVZfU1RBVCh0eF9hYm9ydGVkX2Vycm9ycyl9LApAQCAtMTAyLDYgKzEwMywxMCBAQAogCXsiYWxsb2NfcnhfcGFnZV9mYWlsZWQiLCBJWEdCRV9TVEFUKGFsbG9jX3J4X3BhZ2VfZmFpbGVkKX0sCiAJeyJhbGxvY19yeF9idWZmX2ZhaWxlZCIsIElYR0JFX1NUQVQoYWxsb2NfcnhfYnVmZl9mYWlsZWQpfSwKIAl7InJ4X25vX2RtYV9yZXNvdXJjZXMiLCBJWEdCRV9TVEFUKGh3X3J4X25vX2RtYV9yZXNvdXJjZXMpfSwKKwl7Im9zMmJtY19yeF9ieV9ibWMiLCBJWEdCRV9TVEFUKHN0YXRzLm8yYmdwdGMpfSwKKwl7Im9zMmJtY190eF9ieV9ibWMiLCBJWEdCRV9TVEFUKHN0YXRzLmIyb3NwYyl9LAorCXsib3MyYm1jX3R4X2J5X2hvc3QiLCBJWEdCRV9TVEFUKHN0YXRzLm8yYnNwYyl9LAorCXsib3MyYm1jX3J4X2J5X2hvc3QiLCBJWEdCRV9TVEFUKHN0YXRzLmIyb2dwcmMpfSwKICNpZmRlZiBJWEdCRV9GQ09FCiAJeyJmY29lX2JhZF9mY2NyYyIsIElYR0JFX1NUQVQoc3RhdHMuZmNjcmMpfSwKIAl7InJ4X2Zjb2VfZHJvcHBlZCIsIElYR0JFX1NUQVQoc3RhdHMuZmNvZXJwZGMpfSwKQEAgLTI4OCwyMCArMjkzLDIwIEBACiAJaWYgKGxpbmtfdXApIHsKIAkJc3dpdGNoIChsaW5rX3NwZWVkKSB7CiAJCWNhc2UgSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEw6Ci0JCQllY21kLT5zcGVlZCA9IFNQRUVEXzEwMDAwOworCQkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIFNQRUVEXzEwMDAwKTsKIAkJCWJyZWFrOwogCQljYXNlIElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEw6Ci0JCQllY21kLT5zcGVlZCA9IFNQRUVEXzEwMDA7CisJCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgU1BFRURfMTAwMCk7CiAJCQlicmVhazsKIAkJY2FzZSBJWEdCRV9MSU5LX1NQRUVEXzEwMF9GVUxMOgotCQkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDA7CisJCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgU1BFRURfMTAwKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJCX0KIAkJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CiAJfSBlbHNlIHsKLQkJZWNtZC0+c3BlZWQgPSAtMTsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIC0xKTsKIAkJZWNtZC0+ZHVwbGV4ID0gLTE7CiAJfQogCkBAIC0zNDYsOSArMzUxLDEwIEBACiAJCX0KIAl9IGVsc2UgewogCQkvKiBpbiB0aGlzIGNhc2Ugd2UgY3VycmVudGx5IG9ubHkgc3VwcG9ydCAxMEdiL0ZVTEwgKi8KKwkJdTMyIHNwZWVkID0gZXRodG9vbF9jbWRfc3BlZWQoZWNtZCk7CiAJCWlmICgoZWNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgfHwKIAkJICAgIChlY21kLT5hZHZlcnRpc2luZyAhPSBBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCkgfHwKLQkJICAgIChlY21kLT5zcGVlZCArIGVjbWQtPmR1cGxleCAhPSBTUEVFRF8xMDAwMCArIERVUExFWF9GVUxMKSkKKwkJICAgIChzcGVlZCArIGVjbWQtPmR1cGxleCAhPSBTUEVFRF8xMDAwMCArIERVUExFWF9GVUxMKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtODQ2LDExICs4NTIsOCBAQAogCWlmICghZWVwcm9tX2J1ZmYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZm9yIChpID0gMDsgaSA8IGVlcHJvbV9sZW47IGkrKykgewotCQlpZiAoKHJldF92YWwgPSBody0+ZWVwcm9tLm9wcy5yZWFkKGh3LCBmaXJzdF93b3JkICsgaSwKLQkJICAgICZlZXByb21fYnVmZltpXSkpKQotCQkJYnJlYWs7Ci0JfQorCXJldF92YWwgPSBody0+ZWVwcm9tLm9wcy5yZWFkX2J1ZmZlcihodywgZmlyc3Rfd29yZCwgZWVwcm9tX2xlbiwKKwkJCQkJICAgICBlZXByb21fYnVmZik7CiAKIAkvKiBEZXZpY2UncyBlZXByb20gaXMgYWx3YXlzIGxpdHRsZS1lbmRpYW4sIHdvcmQgYWRkcmVzc2FibGUgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZWVwcm9tX2xlbjsgaSsrKQpAQCAtOTMxLDcgKzkzNCw3IEBACiAJfQogCiAJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19JWEdCRV9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCi0JCW1zbGVlcCgxKTsKKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwogCiAJaWYgKCFuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpIHsKIAkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKQEAgLTEwMzAsOSArMTAzMyw2IEBACiAJCXJldHVybiBJWEdCRV9URVNUX0xFTjsKIAljYXNlIEVUSF9TU19TVEFUUzoKIAkJcmV0dXJuIElYR0JFX1NUQVRTX0xFTjsKLQljYXNlIEVUSF9TU19OVFVQTEVfRklMVEVSUzoKLQkJcmV0dXJuIEVUSFRPT0xfTUFYX05UVVBMRV9MSVNUX0VOVFJZICoKLQkJICAgICAgIEVUSFRPT0xfTUFYX05UVVBMRV9TVFJJTkdfUEVSX0VOVFJZOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CkBAIC0xMjM4LDQ2ICsxMjM4LDYyIEBACiAJeyAwLCAwLCAwLCAwIH0KIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgcmVnaXN0ZXJfdGVzdF9wYXR0ZXJuc1tdID0gewotCTB4NUE1QTVBNUEsIDB4QTVBNUE1QTUsIDB4MDAwMDAwMDAsIDB4RkZGRkZGRkYKLX07CitzdGF0aWMgYm9vbCByZWdfcGF0dGVybl90ZXN0KHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCB1NjQgKmRhdGEsIGludCByZWcsCisJCQkgICAgIHUzMiBtYXNrLCB1MzIgd3JpdGUpCit7CisJdTMyIHBhdCwgdmFsLCBiZWZvcmU7CisJc3RhdGljIGNvbnN0IHUzMiB0ZXN0X3BhdHRlcm5bXSA9IHsKKwkJMHg1QTVBNUE1QSwgMHhBNUE1QTVBNSwgMHgwMDAwMDAwMCwgMHhGRkZGRkZGRn07CiAKLSNkZWZpbmUgUkVHX1BBVFRFUk5fVEVTVChSLCBNLCBXKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl1MzIgcGF0LCB2YWwsIGJlZm9yZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWZvciAocGF0ID0gMDsgcGF0IDwgQVJSQVlfU0laRShyZWdpc3Rlcl90ZXN0X3BhdHRlcm5zKTsgcGF0KyspIHsgICAgICBcCi0JCWJlZm9yZSA9IHJlYWRsKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSKTsgICAgICAgICAgICAgICAgICAgICAgXAotCQl3cml0ZWwoKHJlZ2lzdGVyX3Rlc3RfcGF0dGVybnNbcGF0XSAmIFcpLCAgICAgICAgICAgICAgICAgICAgIFwKLQkJICAgICAgIChhZGFwdGVyLT5ody5od19hZGRyICsgUikpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCXZhbCA9IHJlYWRsKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQlpZiAodmFsICE9IChyZWdpc3Rlcl90ZXN0X3BhdHRlcm5zW3BhdF0gJiBXICYgTSkpIHsgICAgICAgICAgIFwKLQkJCWVfZXJyKGRydiwgInBhdHRlcm4gdGVzdCByZWcgJTA0WCBmYWlsZWQ6IGdvdCAiICAgICAgIFwKLQkJCSAgICAgICIweCUwOFggZXhwZWN0ZWQgMHglMDhYXG4iLCAgICAgICAgICAgICAgICAgICAgIFwKLQkJCSAgICAgIFIsIHZhbCwgKHJlZ2lzdGVyX3Rlc3RfcGF0dGVybnNbcGF0XSAmIFcgJiBNKSk7IFwKLQkJCSpkYXRhID0gUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCXdyaXRlbChiZWZvcmUsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSKTsgICAgICAgICAgICAgIFwKLQkJCXJldHVybiAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCXdyaXRlbChiZWZvcmUsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSKTsgICAgICAgICAgICAgICAgICAgICAgXAotCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZm9yIChwYXQgPSAwOyBwYXQgPCBBUlJBWV9TSVpFKHRlc3RfcGF0dGVybik7IHBhdCsrKSB7CisJCWJlZm9yZSA9IHJlYWRsKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyByZWcpOworCQl3cml0ZWwoKHRlc3RfcGF0dGVybltwYXRdICYgd3JpdGUpLAorCQkgICAgICAgKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyByZWcpKTsKKwkJdmFsID0gcmVhZGwoYWRhcHRlci0+aHcuaHdfYWRkciArIHJlZyk7CisJCWlmICh2YWwgIT0gKHRlc3RfcGF0dGVybltwYXRdICYgd3JpdGUgJiBtYXNrKSkgeworCQkJZV9lcnIoZHJ2LCAicGF0dGVybiB0ZXN0IHJlZyAlMDRYIGZhaWxlZDogZ290ICIKKwkJCSAgICAgICIweCUwOFggZXhwZWN0ZWQgMHglMDhYXG4iLAorCQkJICAgICAgcmVnLCB2YWwsICh0ZXN0X3BhdHRlcm5bcGF0XSAmIHdyaXRlICYgbWFzaykpOworCQkJKmRhdGEgPSByZWc7CisJCQl3cml0ZWwoYmVmb3JlLCBhZGFwdGVyLT5ody5od19hZGRyICsgcmVnKTsKKwkJCXJldHVybiAxOworCQl9CisJCXdyaXRlbChiZWZvcmUsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyByZWcpOworCX0KKwlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBSRUdfU0VUX0FORF9DSEVDSyhSLCBNLCBXKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCXUzMiB2YWwsIGJlZm9yZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JYmVmb3JlID0gcmVhZGwoYWRhcHRlci0+aHcuaHdfYWRkciArIFIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl3cml0ZWwoKFcgJiBNKSwgKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCXZhbCA9IHJlYWRsKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JaWYgKChXICYgTSkgIT0gKHZhbCAmIE0pKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJZV9lcnIoZHJ2LCAic2V0L2NoZWNrIHJlZyAlMDRYIHRlc3QgZmFpbGVkOiBnb3QgMHglMDhYICIgIFwKLQkJICAgICAgImV4cGVjdGVkIDB4JTA4WFxuIiwgUiwgKHZhbCAmIE0pLCAoVyAmIE0pKTsgICAgICAgIFwKLQkJKmRhdGEgPSBSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCXdyaXRlbChiZWZvcmUsIChhZGFwdGVyLT5ody5od19hZGRyICsgUikpOyAgICAgICAgICAgICAgICAgICAgXAotCQlyZXR1cm4gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCXdyaXRlbChiZWZvcmUsIChhZGFwdGVyLT5ody5od19hZGRyICsgUikpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitzdGF0aWMgYm9vbCByZWdfc2V0X2FuZF9jaGVjayhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwgdTY0ICpkYXRhLCBpbnQgcmVnLAorCQkJICAgICAgdTMyIG1hc2ssIHUzMiB3cml0ZSkKK3sKKwl1MzIgdmFsLCBiZWZvcmU7CisJYmVmb3JlID0gcmVhZGwoYWRhcHRlci0+aHcuaHdfYWRkciArIHJlZyk7CisJd3JpdGVsKCh3cml0ZSAmIG1hc2spLCAoYWRhcHRlci0+aHcuaHdfYWRkciArIHJlZykpOworCXZhbCA9IHJlYWRsKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyByZWcpOworCWlmICgod3JpdGUgJiBtYXNrKSAhPSAodmFsICYgbWFzaykpIHsKKwkJZV9lcnIoZHJ2LCAic2V0L2NoZWNrIHJlZyAlMDRYIHRlc3QgZmFpbGVkOiBnb3QgMHglMDhYICIKKwkJICAgICAgImV4cGVjdGVkIDB4JTA4WFxuIiwgcmVnLCAodmFsICYgbWFzayksICh3cml0ZSAmIG1hc2spKTsKKwkJKmRhdGEgPSByZWc7CisJCXdyaXRlbChiZWZvcmUsIChhZGFwdGVyLT5ody5od19hZGRyICsgcmVnKSk7CisJCXJldHVybiAxOworCX0KKwl3cml0ZWwoYmVmb3JlLCAoYWRhcHRlci0+aHcuaHdfYWRkciArIHJlZykpOworCXJldHVybiAwOwogfQogCisjZGVmaW5lIFJFR19QQVRURVJOX1RFU1QocmVnLCBtYXNrLCB3cml0ZSkJCQkJICAgICAgXAorCWRvIHsJCQkJCQkJCSAgICAgIFwKKwkJaWYgKHJlZ19wYXR0ZXJuX3Rlc3QoYWRhcHRlciwgZGF0YSwgcmVnLCBtYXNrLCB3cml0ZSkpCSAgICAgIFwKKwkJCXJldHVybiAxOwkJCQkJICAgICAgXAorCX0gd2hpbGUgKDApCQkJCQkJCSAgICAgIFwKKworCisjZGVmaW5lIFJFR19TRVRfQU5EX0NIRUNLKHJlZywgbWFzaywgd3JpdGUpCQkJCSAgICAgIFwKKwlkbyB7CQkJCQkJCQkgICAgICBcCisJCWlmIChyZWdfc2V0X2FuZF9jaGVjayhhZGFwdGVyLCBkYXRhLCByZWcsIG1hc2ssIHdyaXRlKSkJICAgICAgXAorCQkJcmV0dXJuIDE7CQkJCQkgICAgICBcCisJfSB3aGlsZSAoMCkJCQkJCQkJICAgICAgXAorCiBzdGF0aWMgaW50IGl4Z2JlX3JlZ190ZXN0KHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCB1NjQgKmRhdGEpCiB7CiAJY29uc3Qgc3RydWN0IGl4Z2JlX3JlZ190ZXN0ICp0ZXN0OwpAQCAtMTMyOCwxMyArMTM0NCwxMyBAQAogCQkJc3dpdGNoICh0ZXN0LT50ZXN0X3R5cGUpIHsKIAkJCWNhc2UgUEFUVEVSTl9URVNUOgogCQkJCVJFR19QQVRURVJOX1RFU1QodGVzdC0+cmVnICsgKGkgKiAweDQwKSwKLQkJCQkJCXRlc3QtPm1hc2ssCi0JCQkJCQl0ZXN0LT53cml0ZSk7CisJCQkJCQkgdGVzdC0+bWFzaywKKwkJCQkJCSB0ZXN0LT53cml0ZSk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFNFVF9SRUFEX1RFU1Q6CiAJCQkJUkVHX1NFVF9BTkRfQ0hFQ0sodGVzdC0+cmVnICsgKGkgKiAweDQwKSwKLQkJCQkJCXRlc3QtPm1hc2ssCi0JCQkJCQl0ZXN0LT53cml0ZSk7CisJCQkJCQkgIHRlc3QtPm1hc2ssCisJCQkJCQkgIHRlc3QtPndyaXRlKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgV1JJVEVfTk9fVEVTVDoKIAkJCQl3cml0ZWwodGVzdC0+d3JpdGUsCkBAIC0xMzQzLDE4ICsxMzU5LDE4IEBACiAJCQkJYnJlYWs7CiAJCQljYXNlIFRBQkxFMzJfVEVTVDoKIAkJCQlSRUdfUEFUVEVSTl9URVNUKHRlc3QtPnJlZyArIChpICogNCksCi0JCQkJCQl0ZXN0LT5tYXNrLAotCQkJCQkJdGVzdC0+d3JpdGUpOworCQkJCQkJIHRlc3QtPm1hc2ssCisJCQkJCQkgdGVzdC0+d3JpdGUpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBUQUJMRTY0X1RFU1RfTE86CiAJCQkJUkVHX1BBVFRFUk5fVEVTVCh0ZXN0LT5yZWcgKyAoaSAqIDgpLAotCQkJCQkJdGVzdC0+bWFzaywKLQkJCQkJCXRlc3QtPndyaXRlKTsKKwkJCQkJCSB0ZXN0LT5tYXNrLAorCQkJCQkJIHRlc3QtPndyaXRlKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgVEFCTEU2NF9URVNUX0hJOgogCQkJCVJFR19QQVRURVJOX1RFU1QoKHRlc3QtPnJlZyArIDQpICsgKGkgKiA4KSwKLQkJCQkJCXRlc3QtPm1hc2ssCi0JCQkJCQl0ZXN0LT53cml0ZSk7CisJCQkJCQkgdGVzdC0+bWFzaywKKwkJCQkJCSB0ZXN0LT53cml0ZSk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KQEAgLTE0MTcsNyArMTQzMyw3IEBACiAKIAkvKiBEaXNhYmxlIGFsbCB0aGUgaW50ZXJydXB0cyAqLwogCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTUMsIDB4RkZGRkZGRkYpOwotCW1zbGVlcCgxMCk7CisJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CiAKIAkvKiBUZXN0IGVhY2ggaW50ZXJydXB0ICovCiAJZm9yICg7IGkgPCAxMDsgaSsrKSB7CkBAIC0xNDM3LDcgKzE0NTMsNyBAQAogCQkJICAgICAgICAgICAgICAgIH5tYXNrICYgMHgwMDAwN0ZGRik7CiAJCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSUNTLAogCQkJICAgICAgICAgICAgICAgIH5tYXNrICYgMHgwMDAwN0ZGRik7Ci0JCQltc2xlZXAoMTApOworCQkJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CiAKIAkJCWlmIChhZGFwdGVyLT50ZXN0X2ljciAmIG1hc2spIHsKIAkJCQkqZGF0YSA9IDM7CkBAIC0xNDU0LDcgKzE0NzAsNyBAQAogCQlhZGFwdGVyLT50ZXN0X2ljciA9IDA7CiAJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTVMsIG1hc2spOwogCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSUNTLCBtYXNrKTsKLQkJbXNsZWVwKDEwKTsKKwkJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CiAKIAkJaWYgKCEoYWRhcHRlci0+dGVzdF9pY3IgJm1hc2spKSB7CiAJCQkqZGF0YSA9IDQ7CkBAIC0xNDc0LDcgKzE0OTAsNyBAQAogCQkJICAgICAgICAgICAgICAgIH5tYXNrICYgMHgwMDAwN0ZGRik7CiAJCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSUNTLAogCQkJICAgICAgICAgICAgICAgIH5tYXNrICYgMHgwMDAwN0ZGRik7Ci0JCQltc2xlZXAoMTApOworCQkJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CiAKIAkJCWlmIChhZGFwdGVyLT50ZXN0X2ljcikgewogCQkJCSpkYXRhID0gNTsKQEAgLTE0ODUsNyArMTUwMSw3IEBACiAKIAkvKiBEaXNhYmxlIGFsbCB0aGUgaW50ZXJydXB0cyAqLwogCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTUMsIDB4RkZGRkZGRkYpOwotCW1zbGVlcCgxMCk7CisJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CiAKIAkvKiBVbmhvb2sgdGVzdCBpbnRlcnJ1cHQgaGFuZGxlciAqLwogCWZyZWVfaXJxKGlycSwgbmV0ZGV2KTsKQEAgLTE1OTgsNiArMTYxNCwxMyBAQAogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIHJlZ19kYXRhOwogCisJLyogWDU0MCBuZWVkcyB0byBzZXQgdGhlIE1BQ0MuRkxVIGJpdCB0byBmb3JjZSBsaW5rIHVwICovCisJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY19YNTQwKSB7CisJCXJlZ19kYXRhID0gSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9NQUNDKTsKKwkJcmVnX2RhdGEgfD0gSVhHQkVfTUFDQ19GTFU7CisJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX01BQ0MsIHJlZ19kYXRhKTsKKwl9CisKIAkvKiByaWdodCBub3cgd2Ugb25seSBzdXBwb3J0IE1BQyBsb29wYmFjayBpbiB0aGUgZHJpdmVyICovCiAJcmVnX2RhdGEgPSBJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0hMUkVHMCk7CiAJLyogU2V0dXAgTUFDIGxvb3BiYWNrICovCkBAIC0xNjEzLDcgKzE2MzYsNyBAQAogCXJlZ19kYXRhIHw9IElYR0JFX0FVVE9DX0xNU18xMEdfTElOS19OT19BTiB8IElYR0JFX0FVVE9DX0ZMVTsKIAlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9BVVRPQywgcmVnX2RhdGEpOwogCUlYR0JFX1dSSVRFX0ZMVVNIKCZhZGFwdGVyLT5odyk7Ci0JbXNsZWVwKDEwKTsKKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDIwMDAwKTsKIAogCS8qIERpc2FibGUgQXRsYXMgVHggbGFuZXM7IHJlLWVuYWJsZWQgaW4gcmVzZXQgcGF0aCAqLwogCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpIHsKQEAgLTE5OTksMjUgKzIwMjIsMzAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpeGdiZV9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQorc3RhdGljIGludCBpeGdiZV9zZXRfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgICBlbnVtIGV0aHRvb2xfcGh5c19pZF9zdGF0ZSBzdGF0ZSkKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQl1MzIgbGVkX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MRURDVEwpOwotCXUzMiBpOwogCi0JaWYgKCFkYXRhIHx8IGRhdGEgPiAzMDApCi0JCWRhdGEgPSAzMDA7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgRVRIVE9PTF9JRF9BQ1RJVkU6CisJCWFkYXB0ZXItPmxlZF9yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTEVEQ1RMKTsKKwkJcmV0dXJuIDI7CiAKLQlmb3IgKGkgPSAwOyBpIDwgKGRhdGEgKiAxMDAwKTsgaSArPSA0MDApIHsKKwljYXNlIEVUSFRPT0xfSURfT046CiAJCWh3LT5tYWMub3BzLmxlZF9vbihodywgSVhHQkVfTEVEX09OKTsKLQkJbXNsZWVwX2ludGVycnVwdGlibGUoMjAwKTsKLQkJaHctPm1hYy5vcHMubGVkX29mZihodywgSVhHQkVfTEVEX09OKTsKLQkJbXNsZWVwX2ludGVycnVwdGlibGUoMjAwKTsKLQl9CisJCWJyZWFrOwogCi0JLyogUmVzdG9yZSBMRUQgc2V0dGluZ3MgKi8KLQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9MRURDVEwsIGxlZF9yZWcpOworCWNhc2UgRVRIVE9PTF9JRF9PRkY6CisJCWh3LT5tYWMub3BzLmxlZF9vZmYoaHcsIElYR0JFX0xFRF9PTik7CisJCWJyZWFrOworCisJY2FzZSBFVEhUT09MX0lEX0lOQUNUSVZFOgorCQkvKiBSZXN0b3JlIExFRCBzZXR0aW5ncyAqLworCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9MRURDVEwsIGFkYXB0ZXItPmxlZF9yZWcpOworCQlicmVhazsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIyMzAsOCArMjI1OCwxMyBAQAogCW5lZWRfcmVzZXQgPSAoZGF0YSAmIEVUSF9GTEFHX1JYVkxBTikgIT0KIAkJICAgICAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSFdfVkxBTl9SWCk7CiAKKwlpZiAoKGRhdGEgJiBFVEhfRkxBR19SWEhBU0gpICYmCisJICAgICEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1JTU19FTkFCTEVEKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCiAJcmMgPSBldGh0b29sX29wX3NldF9mbGFncyhuZXRkZXYsIGRhdGEsIEVUSF9GTEFHX0xSTyB8IEVUSF9GTEFHX05UVVBMRSB8Ci0JCQkJCUVUSF9GTEFHX1JYVkxBTiB8IEVUSF9GTEFHX1RYVkxBTik7CisJCQkJICBFVEhfRkxBR19SWFZMQU4gfCBFVEhfRkxBR19UWFZMQU4gfAorCQkJCSAgRVRIX0ZMQUdfUlhIQVNIKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIApAQCAtMjQ2NSw3ICsyNDk4LDcgQEAKIAkuc2V0X3RzbyAgICAgICAgICAgICAgICA9IGl4Z2JlX3NldF90c28sCiAJLnNlbGZfdGVzdCAgICAgICAgICAgICAgPSBpeGdiZV9kaWFnX3Rlc3QsCiAJLmdldF9zdHJpbmdzICAgICAgICAgICAgPSBpeGdiZV9nZXRfc3RyaW5ncywKLQkucGh5c19pZCAgICAgICAgICAgICAgICA9IGl4Z2JlX3BoeXNfaWQsCisJLnNldF9waHlzX2lkICAgICAgICAgICAgPSBpeGdiZV9zZXRfcGh5c19pZCwKIAkuZ2V0X3NzZXRfY291bnQgICAgICAgICA9IGl4Z2JlX2dldF9zc2V0X2NvdW50LAogCS5nZXRfZXRodG9vbF9zdGF0cyAgICAgID0gaXhnYmVfZ2V0X2V0aHRvb2xfc3RhdHMsCiAJLmdldF9jb2FsZXNjZSAgICAgICAgICAgPSBpeGdiZV9nZXRfY29hbGVzY2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9mY29lLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9mY29lLmMKaW5kZXggZGJhN2Q3Ny4uMDU5MjA3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZmNvZS5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2Zjb2UuYwpAQCAtNDE2LDggKzQxNiw3IEBACiAJaWYgKCFkZHAtPnVkbCkKIAkJZ290byBkZHBfb3V0OwogCi0JZGRwLT5lcnIgPSAoZmNlcnIgfCBmY2VvZmUpOwotCWlmIChkZHAtPmVycikKKwlpZiAoZmNlcnIgfCBmY2VvZmUpCiAJCWdvdG8gZGRwX291dDsKIAogCWZjc3RhdCA9IChzdGVyciAmIElYR0JFX1JYREFEVl9TVEFUX0ZDU1RBVCk7CkBAIC00MjgsNiArNDI3LDcgQEAKIAkJaWYgKGZjc3RhdCA9PSBJWEdCRV9SWERBRFZfU1RBVF9GQ1NUQVRfRkNQUlNQKSB7CiAJCQlwY2lfdW5tYXBfc2coYWRhcHRlci0+cGRldiwgZGRwLT5zZ2wsCiAJCQkJICAgICBkZHAtPnNnYywgRE1BX0ZST01fREVWSUNFKTsKKwkJCWRkcC0+ZXJyID0gKGZjZXJyIHwgZmNlb2ZlKTsKIAkJCWRkcC0+c2dsID0gTlVMTDsKIAkJCWRkcC0+c2djID0gMDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCmluZGV4IGUxNDVmMmMuLjA4ZThlMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxuZXQvaXA2X2NoZWNrc3VtLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2luY2x1ZGUgPHNjc2kvZmMvZmNfZmNvZS5oPgogCiAjaW5jbHVkZSAiaXhnYmUuaCIKQEAgLTUxLDggKzUyLDEyIEBACiBjaGFyIGl4Z2JlX2RyaXZlcl9uYW1lW10gPSAiaXhnYmUiOwogc3RhdGljIGNvbnN0IGNoYXIgaXhnYmVfZHJpdmVyX3N0cmluZ1tdID0KIAkJCSAgICAgICJJbnRlbChSKSAxMCBHaWdhYml0IFBDSSBFeHByZXNzIE5ldHdvcmsgRHJpdmVyIjsKLQotI2RlZmluZSBEUlZfVkVSU0lPTiAiMy4yLjktazIiCisjZGVmaW5lIE1BSiAzCisjZGVmaW5lIE1JTiAzCisjZGVmaW5lIEJVSUxEIDgKKyNkZWZpbmUgS0ZJWCAyCisjZGVmaW5lIERSVl9WRVJTSU9OIF9fc3RyaW5naWZ5KE1BSikgIi4iIF9fc3RyaW5naWZ5KE1JTikgIi4iIFwKKwlfX3N0cmluZ2lmeShCVUlMRCkgIi1rIiBfX3N0cmluZ2lmeShLRklYKQogY29uc3QgY2hhciBpeGdiZV9kcml2ZXJfdmVyc2lvbltdID0gRFJWX1ZFUlNJT047CiBzdGF0aWMgY29uc3QgY2hhciBpeGdiZV9jb3B5cmlnaHRbXSA9CiAJCQkJIkNvcHlyaWdodCAoYykgMTk5OS0yMDExIEludGVsIENvcnBvcmF0aW9uLiI7CkBAIC0xMjAsNiArMTI1LDEwIEBACiAJIGJvYXJkXzgyNTk5IH0sCiAJe1BDSV9WREVWSUNFKElOVEVMLCBJWEdCRV9ERVZfSURfWDU0MFQpLAogCSBib2FyZF9YNTQwIH0sCisJe1BDSV9WREVWSUNFKElOVEVMLCBJWEdCRV9ERVZfSURfODI1OTlfU0ZQX1NGMiksCisJIGJvYXJkXzgyNTk5IH0sCisJe1BDSV9WREVWSUNFKElOVEVMLCBJWEdCRV9ERVZfSURfODI1OTlfTFMpLAorCSBib2FyZF84MjU5OSB9LAogCiAJLyogcmVxdWlyZWQgbGFzdCBlbnRyeSAqLwogCXswLCB9CkBAIC0xODUsNiArMTk0LDIyIEBACiAJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRDsKIH0KIAorc3RhdGljIHZvaWQgaXhnYmVfc2VydmljZV9ldmVudF9zY2hlZHVsZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoIXRlc3RfYml0KF9fSVhHQkVfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSAmJgorCSAgICAhdGVzdF9hbmRfc2V0X2JpdChfX0lYR0JFX1NFUlZJQ0VfU0NIRUQsICZhZGFwdGVyLT5zdGF0ZSkpCisJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnNlcnZpY2VfdGFzayk7Cit9CisKK3N0YXRpYyB2b2lkIGl4Z2JlX3NlcnZpY2VfZXZlbnRfY29tcGxldGUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJQlVHX09OKCF0ZXN0X2JpdChfX0lYR0JFX1NFUlZJQ0VfU0NIRUQsICZhZGFwdGVyLT5zdGF0ZSkpOworCisJLyogZmx1c2ggbWVtb3J5IHRvIG1ha2Ugc3VyZSBzdGF0ZSBpcyBjb3JyZWN0IGJlZm9yZSBuZXh0IHdhdGNob2cgKi8KKwlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwljbGVhcl9iaXQoX19JWEdCRV9TRVJWSUNFX1NDSEVELCAmYWRhcHRlci0+c3RhdGUpOworfQorCiBzdHJ1Y3QgaXhnYmVfcmVnX2luZm8gewogCXUzMiBvZnM7CiAJY2hhciAqbmFtZTsKQEAgLTgxMSw3ICs4MzYsMTkgQEAKICNkZWZpbmUgREVTQ19ORUVERUQgKFRYRF9VU0VfQ09VTlQoSVhHQkVfTUFYX0RBVEFfUEVSX1RYRCkgLyogc2tiLT5kYXRhICovICsgXAogCU1BWF9TS0JfRlJBR1MgKiBUWERfVVNFX0NPVU5UKFBBR0VfU0laRSkgKyAxKSAvKiBmb3IgY29udGV4dCAqLwogCi1zdGF0aWMgdm9pZCBpeGdiZV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworLyoqCisgKiBpeGdiZV90eF90aW1lb3V0X3Jlc2V0IC0gaW5pdGlhdGUgcmVzZXQgZHVlIHRvIFR4IHRpbWVvdXQKKyAqIEBhZGFwdGVyOiBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3QKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JlX3R4X3RpbWVvdXRfcmVzZXQoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisKKwkvKiBEbyB0aGUgcmVzZXQgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCAqLworCWlmICghdGVzdF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKSB7CisJCWFkYXB0ZXItPmZsYWdzMiB8PSBJWEdCRV9GTEFHMl9SRVNFVF9SRVFVRVNURUQ7CisJCWl4Z2JlX3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUoYWRhcHRlcik7CisJfQorfQogCiAvKioKICAqIGl4Z2JlX2NsZWFuX3R4X2lycSAtIFJlY2xhaW0gcmVzb3VyY2VzIGFmdGVyIHRyYW5zbWl0IGNvbXBsZXRlcwpAQCAtODkzLDcgKzkzMCw3IEBACiAJCQlhZGFwdGVyLT50eF90aW1lb3V0X2NvdW50ICsgMSwgdHhfcmluZy0+cXVldWVfaW5kZXgpOwogCiAJCS8qIHNjaGVkdWxlIGltbWVkaWF0ZSByZXNldCBpZiB3ZSBiZWxpZXZlIHdlIGh1bmcgKi8KLQkJaXhnYmVfdHhfdGltZW91dChhZGFwdGVyLT5uZXRkZXYpOworCQlpeGdiZV90eF90aW1lb3V0X3Jlc2V0KGFkYXB0ZXIpOwogCiAJCS8qIHRoZSBhZGFwdGVyIGlzIGFib3V0IHRvIHJlc2V0LCBubyBwb2ludCBpbiBlbmFibGluZyBzdHVmZiAqLwogCQlyZXR1cm4gdHJ1ZTsKQEAgLTk0Myw4ICs5ODAsNiBAQAogCXJ4Y3RybCB8PSBJWEdCRV9EQ0FfUlhDVFJMX0RFU0NfRENBX0VOOwogCXJ4Y3RybCB8PSBJWEdCRV9EQ0FfUlhDVFJMX0hFQURfRENBX0VOOwogCXJ4Y3RybCAmPSB+KElYR0JFX0RDQV9SWENUUkxfREVTQ19SUk9fRU4pOwotCXJ4Y3RybCAmPSB+KElYR0JFX0RDQV9SWENUUkxfREVTQ19XUk9fRU4gfAotCQkgICAgSVhHQkVfRENBX1JYQ1RSTF9ERVNDX0hTUk9fRU4pOwogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRENBX1JYQ1RSTChyZWdfaWR4KSwgcnhjdHJsKTsKIH0KIApAQCAtOTYyLDcgKzk5Nyw2IEBACiAJCXR4Y3RybCAmPSB+SVhHQkVfRENBX1RYQ1RSTF9DUFVJRF9NQVNLOwogCQl0eGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSk7CiAJCXR4Y3RybCB8PSBJWEdCRV9EQ0FfVFhDVFJMX0RFU0NfRENBX0VOOwotCQl0eGN0cmwgJj0gfklYR0JFX0RDQV9UWENUUkxfVFhfV0JfUk9fRU47CiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRENBX1RYQ1RSTChyZWdfaWR4KSwgdHhjdHJsKTsKIAkJYnJlYWs7CiAJY2FzZSBpeGdiZV9tYWNfODI1OTlFQjoKQEAgLTk3Miw3ICsxMDA2LDYgQEAKIAkJdHhjdHJsIHw9IChkY2EzX2dldF90YWcoJmFkYXB0ZXItPnBkZXYtPmRldiwgY3B1KSA8PAogCQkJICAgSVhHQkVfRENBX1RYQ1RSTF9DUFVJRF9TSElGVF84MjU5OSk7CiAJCXR4Y3RybCB8PSBJWEdCRV9EQ0FfVFhDVFJMX0RFU0NfRENBX0VOOwotCQl0eGN0cmwgJj0gfklYR0JFX0RDQV9UWENUUkxfVFhfV0JfUk9fRU47CiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRENBX1RYQ1RSTF84MjU5OShyZWdfaWR4KSwgdHhjdHJsKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTEwNjEsOCArMTA5NCwxNCBAQAogCiAJcmV0dXJuIDA7CiB9Ci0KICNlbmRpZiAvKiBDT05GSUdfSVhHQkVfRENBICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpeGdiZV9yeF9oYXNoKHVuaW9uIGl4Z2JlX2Fkdl9yeF9kZXNjICpyeF9kZXNjLAorCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXNrYi0+cnhoYXNoID0gbGUzMl90b19jcHUocnhfZGVzYy0+d2IubG93ZXIuaGlfZHdvcmQucnNzKTsKK30KKwogLyoqCiAgKiBpeGdiZV9yZWNlaXZlX3NrYiAtIFNlbmQgYSBjb21wbGV0ZWQgcGFja2V0IHVwIHRoZSBzdGFjawogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCkBAIC0xNDU0LDYgKzE0OTMsOCBAQAogCQl9CiAKIAkJaXhnYmVfcnhfY2hlY2tzdW0oYWRhcHRlciwgcnhfZGVzYywgc2tiKTsKKwkJaWYgKGFkYXB0ZXItPm5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYSEFTSCkKKwkJCWl4Z2JlX3J4X2hhc2gocnhfZGVzYywgc2tiKTsKIAogCQkvKiBwcm9iYWJseSBhIGxpdHRsZSBza2V3ZWQgZHVlIHRvIHJlbW92aW5nIENSQyAqLwogCQl0b3RhbF9yeF9ieXRlcyArPSBza2ItPmxlbjsKQEAgLTE3ODcsMzUgKzE4MjgsNTEgQEAKIH0KIAogLyoqCi0gKiBpeGdiZV9jaGVja19vdmVydGVtcF90YXNrIC0gd29ya2VyIHRocmVhZCB0byBjaGVjayBvdmVyIHRlbXB1cmF0dXJlCi0gKiBAd29yazogcG9pbnRlciB0byB3b3JrX3N0cnVjdCBjb250YWluaW5nIG91ciBkYXRhCisgKiBpeGdiZV9jaGVja19vdmVydGVtcF9zdWJ0YXNrIC0gY2hlY2sgZm9yIG92ZXIgdGVtcHVyYXR1cmUKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIGFkYXB0ZXIKICAqKi8KLXN0YXRpYyB2b2lkIGl4Z2JlX2NoZWNrX292ZXJ0ZW1wX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorc3RhdGljIHZvaWQgaXhnYmVfY2hlY2tfb3ZlcnRlbXBfc3VidGFzayhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLAotCQkJCQkJICAgICBzdHJ1Y3QgaXhnYmVfYWRhcHRlciwKLQkJCQkJCSAgICAgY2hlY2tfb3ZlcnRlbXBfdGFzayk7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MzIgZWljciA9IGFkYXB0ZXItPmludGVycnVwdF9ldmVudDsKIAotCWlmICghKGFkYXB0ZXItPmZsYWdzMiAmIElYR0JFX0ZMQUcyX1RFTVBfU0VOU09SX0NBUEFCTEUpKQorCWlmICh0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCiAJCXJldHVybjsKIAorCWlmICghKGFkYXB0ZXItPmZsYWdzMiAmIElYR0JFX0ZMQUcyX1RFTVBfU0VOU09SX0NBUEFCTEUpICYmCisJICAgICEoYWRhcHRlci0+ZmxhZ3MyICYgSVhHQkVfRkxBRzJfVEVNUF9TRU5TT1JfRVZFTlQpKQorCQlyZXR1cm47CisKKwlhZGFwdGVyLT5mbGFnczIgJj0gfklYR0JFX0ZMQUcyX1RFTVBfU0VOU09SX0VWRU5UOworCiAJc3dpdGNoIChody0+ZGV2aWNlX2lkKSB7Ci0JY2FzZSBJWEdCRV9ERVZfSURfODI1OTlfVDNfTE9NOiB7Ci0JCXUzMiBhdXRvbmVnOwotCQlib29sIGxpbmtfdXAgPSBmYWxzZTsKKwljYXNlIElYR0JFX0RFVl9JRF84MjU5OV9UM19MT006CisJCS8qCisJCSAqIFNpbmNlIHRoZSB3YXJuaW5nIGludGVycnVwdCBpcyBmb3IgYm90aCBwb3J0cworCQkgKiB3ZSBkb24ndCBoYXZlIHRvIGNoZWNrIGlmOgorCQkgKiAgLSBUaGlzIGludGVycnVwdCB3YXNuJ3QgZm9yIG91ciBwb3J0LgorCQkgKiAgLSBXZSBtYXkgaGF2ZSBtaXNzZWQgdGhlIGludGVycnVwdCBzbyBhbHdheXMgaGF2ZSB0bworCQkgKiAgICBjaGVjayBpZiB3ZSAgZ290IGEgTFNDCisJCSAqLworCQlpZiAoIShlaWNyICYgSVhHQkVfRUlDUl9HUElfU0RQMCkgJiYKKwkJICAgICEoZWljciAmIElYR0JFX0VJQ1JfTFNDKSkKKwkJCXJldHVybjsKIAotCQlpZiAoaHctPm1hYy5vcHMuY2hlY2tfbGluaykKKwkJaWYgKCEoZWljciAmIElYR0JFX0VJQ1JfTFNDKSAmJiBody0+bWFjLm9wcy5jaGVja19saW5rKSB7CisJCQl1MzIgYXV0b25lZzsKKwkJCWJvb2wgbGlua191cCA9IGZhbHNlOworCiAJCQlody0+bWFjLm9wcy5jaGVja19saW5rKGh3LCAmYXV0b25lZywgJmxpbmtfdXAsIGZhbHNlKTsKIAotCQlpZiAoKChlaWNyICYgSVhHQkVfRUlDUl9HUElfU0RQMCkgJiYgKCFsaW5rX3VwKSkgfHwKLQkJICAgIChlaWNyICYgSVhHQkVfRUlDUl9MU0MpKQotCQkJLyogQ2hlY2sgaWYgdGhpcyBpcyBkdWUgdG8gb3ZlcnRlbXAgKi8KLQkJCWlmIChody0+cGh5Lm9wcy5jaGVja19vdmVydGVtcChodykgPT0gSVhHQkVfRVJSX09WRVJURU1QKQotCQkJCWJyZWFrOwotCQlyZXR1cm47Ci0JfQorCQkJaWYgKGxpbmtfdXApCisJCQkJcmV0dXJuOworCQl9CisKKwkJLyogQ2hlY2sgaWYgdGhpcyBpcyBub3QgZHVlIHRvIG92ZXJ0ZW1wICovCisJCWlmIChody0+cGh5Lm9wcy5jaGVja19vdmVydGVtcChodykgIT0gSVhHQkVfRVJSX09WRVJURU1QKQorCQkJcmV0dXJuOworCisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWlmICghKGVpY3IgJiBJWEdCRV9FSUNSX0dQSV9TRFAwKSkKIAkJCXJldHVybjsKQEAgLTE4MjUsOCArMTg4Miw4IEBACiAJICAgICAgICJOZXR3b3JrIGFkYXB0ZXIgaGFzIGJlZW4gc3RvcHBlZCBiZWNhdXNlIGl0IGhhcyBvdmVyIGhlYXRlZC4gIgogCSAgICAgICAiUmVzdGFydCB0aGUgY29tcHV0ZXIuIElmIHRoZSBwcm9ibGVtIHBlcnNpc3RzLCAiCiAJICAgICAgICJwb3dlciBvZmYgdGhlIHN5c3RlbSBhbmQgcmVwbGFjZSB0aGUgYWRhcHRlclxuIik7Ci0JLyogd3JpdGUgdG8gY2xlYXIgdGhlIGludGVycnVwdCAqLwotCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlDUiwgSVhHQkVfRUlDUl9HUElfU0RQMCk7CisKKwlhZGFwdGVyLT5pbnRlcnJ1cHRfZXZlbnQgPSAwOwogfQogCiBzdGF0aWMgdm9pZCBpeGdiZV9jaGVja19mYW5fZmFpbHVyZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIGVpY3IpCkBAIC0xODQ4LDE1ICsxOTA1LDE5IEBACiAJaWYgKGVpY3IgJiBJWEdCRV9FSUNSX0dQSV9TRFAyKSB7CiAJCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgKi8KIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSUNSLCBJWEdCRV9FSUNSX0dQSV9TRFAyKTsKLQkJaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCi0JCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5zZnBfY29uZmlnX21vZHVsZV90YXNrKTsKKwkJaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpIHsKKwkJCWFkYXB0ZXItPmZsYWdzMiB8PSBJWEdCRV9GTEFHMl9TRlBfTkVFRFNfUkVTRVQ7CisJCQlpeGdiZV9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKGFkYXB0ZXIpOworCQl9CiAJfQogCiAJaWYgKGVpY3IgJiBJWEdCRV9FSUNSX0dQSV9TRFAxKSB7CiAJCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgKi8KIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSUNSLCBJWEdCRV9FSUNSX0dQSV9TRFAxKTsKLQkJaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCi0JCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5tdWx0aXNwZWVkX2ZpYmVyX3Rhc2spOworCQlpZiAoIXRlc3RfYml0KF9fSVhHQkVfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkgeworCQkJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19ORUVEX0xJTktfQ09ORklHOworCQkJaXhnYmVfc2VydmljZV9ldmVudF9zY2hlZHVsZShhZGFwdGVyKTsKKwkJfQogCX0KIH0KIApAQCAtMTg3MCw3ICsxOTMxLDcgQEAKIAlpZiAoIXRlc3RfYml0KF9fSVhHQkVfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkgewogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJTUMsIElYR0JFX0VJTUNfTFNDKTsKIAkJSVhHQkVfV1JJVEVfRkxVU0goaHcpOwotCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT53YXRjaGRvZ190YXNrKTsKKwkJaXhnYmVfc2VydmljZV9ldmVudF9zY2hlZHVsZShhZGFwdGVyKTsKIAl9CiB9CiAKQEAgLTE4OTgsMjYgKzE5NTksMzIgQEAKIAogCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CiAJY2FzZSBpeGdiZV9tYWNfODI1OTlFQjoKLQkJaXhnYmVfY2hlY2tfc2ZwX2V2ZW50KGFkYXB0ZXIsIGVpY3IpOwotCQlpZiAoKGFkYXB0ZXItPmZsYWdzMiAmIElYR0JFX0ZMQUcyX1RFTVBfU0VOU09SX0NBUEFCTEUpICYmCi0JCSAgICAoKGVpY3IgJiBJWEdCRV9FSUNSX0dQSV9TRFAwKSB8fCAoZWljciAmIElYR0JFX0VJQ1JfTFNDKSkpIHsKLQkJCWFkYXB0ZXItPmludGVycnVwdF9ldmVudCA9IGVpY3I7Ci0JCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5jaGVja19vdmVydGVtcF90YXNrKTsKLQkJfQotCQkvKiBub3cgZmFsbHRocm91Z2ggdG8gaGFuZGxlIEZsb3cgRGlyZWN0b3IgKi8KIAljYXNlIGl4Z2JlX21hY19YNTQwOgogCQkvKiBIYW5kbGUgRmxvdyBEaXJlY3RvciBGdWxsIHRocmVzaG9sZCBpbnRlcnJ1cHQgKi8KIAkJaWYgKGVpY3IgJiBJWEdCRV9FSUNSX0ZMT1dfRElSKSB7CisJCQlpbnQgcmVpbml0X2NvdW50ID0gMDsKIAkJCWludCBpOwotCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSUNSLCBJWEdCRV9FSUNSX0ZMT1dfRElSKTsKLQkJCS8qIERpc2FibGUgdHJhbnNtaXRzIGJlZm9yZSBGRElSIFJlLWluaXRpYWxpemF0aW9uICovCi0JCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKIAkJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKLQkJCQlzdHJ1Y3QgaXhnYmVfcmluZyAqdHhfcmluZyA9Ci0JCQkJCQkJICAgIGFkYXB0ZXItPnR4X3JpbmdbaV07CisJCQkJc3RydWN0IGl4Z2JlX3JpbmcgKnJpbmcgPSBhZGFwdGVyLT50eF9yaW5nW2ldOwogCQkJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoX19JWEdCRV9UWF9GRElSX0lOSVRfRE9ORSwKLQkJCQkJCSAgICAgICAmdHhfcmluZy0+c3RhdGUpKQotCQkJCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5mZGlyX3JlaW5pdF90YXNrKTsKKwkJCQkJCSAgICAgICAmcmluZy0+c3RhdGUpKQorCQkJCQlyZWluaXRfY291bnQrKzsKKwkJCX0KKwkJCWlmIChyZWluaXRfY291bnQpIHsKKwkJCQkvKiBubyBtb3JlIGZsb3cgZGlyZWN0b3IgaW50ZXJydXB0cyB1bnRpbCBhZnRlciBpbml0ICovCisJCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSU1DLCBJWEdCRV9FSU1DX0ZMT1dfRElSKTsKKwkJCQllaWNyICY9IH5JWEdCRV9FSUNSX0ZMT1dfRElSOworCQkJCWFkYXB0ZXItPmZsYWdzMiB8PSBJWEdCRV9GTEFHMl9GRElSX1JFUVVJUkVTX1JFSU5JVDsKKwkJCQlpeGdiZV9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKGFkYXB0ZXIpOworCQkJfQorCQl9CisJCWl4Z2JlX2NoZWNrX3NmcF9ldmVudChhZGFwdGVyLCBlaWNyKTsKKwkJaWYgKChhZGFwdGVyLT5mbGFnczIgJiBJWEdCRV9GTEFHMl9URU1QX1NFTlNPUl9DQVBBQkxFKSAmJgorCQkgICAgKChlaWNyICYgSVhHQkVfRUlDUl9HUElfU0RQMCkgfHwgKGVpY3IgJiBJWEdCRV9FSUNSX0xTQykpKSB7CisJCQlpZiAoIXRlc3RfYml0KF9fSVhHQkVfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkgeworCQkJCWFkYXB0ZXItPmludGVycnVwdF9ldmVudCA9IGVpY3I7CisJCQkJYWRhcHRlci0+ZmxhZ3MyIHw9IElYR0JFX0ZMQUcyX1RFTVBfU0VOU09SX0VWRU5UOworCQkJCWl4Z2JlX3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUoYWRhcHRlcik7CiAJCQl9CiAJCX0KIAkJYnJlYWs7CkBAIC0xOTI3LDggKzE5OTQsMTAgQEAKIAogCWl4Z2JlX2NoZWNrX2Zhbl9mYWlsdXJlKGFkYXB0ZXIsIGVpY3IpOwogCisJLyogcmUtZW5hYmxlIHRoZSBvcmlnaW5hbCBpbnRlcnJ1cHQgc3RhdGUsIG5vIGxzYywgbm8gcXVldWVzICovCiAJaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCi0JCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlNUywgSVhHQkVfRUlNU19PVEhFUik7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlNUywgZWljciAmCisJCSAgICAgICAgICAgICAgICB+KElYR0JFX0VJTVNfTFNDIHwgSVhHQkVfRUlNU19SVFhfUVVFVUUpKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTI1MTMsOCArMjU4MiwxMSBAQAogCQlpeGdiZV9jaGVja19zZnBfZXZlbnQoYWRhcHRlciwgZWljcik7CiAJCWlmICgoYWRhcHRlci0+ZmxhZ3MyICYgSVhHQkVfRkxBRzJfVEVNUF9TRU5TT1JfQ0FQQUJMRSkgJiYKIAkJICAgICgoZWljciAmIElYR0JFX0VJQ1JfR1BJX1NEUDApIHx8IChlaWNyICYgSVhHQkVfRUlDUl9MU0MpKSkgewotCQkJYWRhcHRlci0+aW50ZXJydXB0X2V2ZW50ID0gZWljcjsKLQkJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPmNoZWNrX292ZXJ0ZW1wX3Rhc2spOworCQkJaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpIHsKKwkJCQlhZGFwdGVyLT5pbnRlcnJ1cHRfZXZlbnQgPSBlaWNyOworCQkJCWFkYXB0ZXItPmZsYWdzMiB8PSBJWEdCRV9GTEFHMl9URU1QX1NFTlNPUl9FVkVOVDsKKwkJCQlpeGdiZV9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKGFkYXB0ZXIpOworCQkJfQogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0yNzMxLDcgKzI4MDMsNyBAQAogCiAJLyogcG9sbCB0byB2ZXJpZnkgcXVldWUgaXMgZW5hYmxlZCAqLwogCWRvIHsKLQkJbXNsZWVwKDEpOworCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CiAJCXR4ZGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9UWERDVEwocmVnX2lkeCkpOwogCX0gd2hpbGUgKC0td2FpdF9sb29wICYmICEodHhkY3RsICYgSVhHQkVfVFhEQ1RMX0VOQUJMRSkpOwogCWlmICghd2FpdF9sb29wKQpAQCAtMzAyMyw3ICszMDk1LDcgQEAKIAkJcmV0dXJuOwogCiAJZG8gewotCQltc2xlZXAoMSk7CisJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKIAkJcnhkY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JYRENUTChyZWdfaWR4KSk7CiAJfSB3aGlsZSAoLS13YWl0X2xvb3AgJiYgIShyeGRjdGwgJiBJWEdCRV9SWERDVExfRU5BQkxFKSk7CiAKQEAgLTMxNzgsNyArMzI1MCw5IEBACiAJLyogZW5hYmxlIFR4IGxvb3BiYWNrIGZvciBWRi9QRiBjb21tdW5pY2F0aW9uICovCiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9QRkRUWEdTV0MsIElYR0JFX1BGRFRYR1NXQ19WVF9MQkVOKTsKIAkvKiBFbmFibGUgTUFDIEFudGktU3Bvb2ZpbmcgKi8KLQlody0+bWFjLm9wcy5zZXRfbWFjX2FudGlfc3Bvb2ZpbmcoaHcsIChhZGFwdGVyLT5udW1fdmZzICE9IDApLAorCWh3LT5tYWMub3BzLnNldF9tYWNfYW50aV9zcG9vZmluZyhodywKKwkJCQkJICAoYWRhcHRlci0+YW50aXNwb29maW5nX2VuYWJsZWQgPQorCQkJCQkgICAoYWRhcHRlci0+bnVtX3ZmcyAhPSAwKSksCiAJCQkJCSAgYWRhcHRlci0+bnVtX3Zmcyk7CiB9CiAKQEAgLTM0ODcsNyArMzU2MSw3IEBACiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdW5zaWduZWQgaW50IHZmbiA9IGFkYXB0ZXItPm51bV92ZnM7Ci0JdW5zaWduZWQgaW50IHJhcl9lbnRyaWVzID0gaHctPm1hYy5udW1fcmFyX2VudHJpZXMgLSAodmZuICsgMSk7CisJdW5zaWduZWQgaW50IHJhcl9lbnRyaWVzID0gSVhHQkVfTUFYX1BGX01BQ1ZMQU5TOwogCWludCBjb3VudCA9IDA7CiAKIAkvKiByZXR1cm4gRU5PTUVNIGluZGljYXRpbmcgaW5zdWZmaWNpZW50IG1lbW9yeSBmb3IgYWRkcmVzc2VzICovCkBAIC0zNzYwLDMxICszODM0LDE2IEBACiAgKiovCiBzdGF0aWMgdm9pZCBpeGdiZV9zZnBfbGlua19jb25maWcoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwkvKgorCSAqIFdlIGFyZSBhc3N1bWluZyB0aGUgd29yc3QgY2FzZSBzY2VuZXJpbyBoZXJlLCBhbmQgdGhhdAorCSAqIGlzIHRoYXQgYW4gU0ZQIHdhcyBpbnNlcnRlZC9yZW1vdmVkIGFmdGVyIHRoZSByZXNldAorCSAqIGJ1dCBiZWZvcmUgU0ZQIGRldGVjdGlvbiB3YXMgZW5hYmxlZC4gIEFzIHN1Y2ggdGhlIGJlc3QKKwkgKiBzb2x1dGlvbiBpcyB0byBqdXN0IHN0YXJ0IHNlYXJjaGluZyBhcyBzb29uIGFzIHdlIHN0YXJ0CisJICovCisJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQorCQlhZGFwdGVyLT5mbGFnczIgfD0gSVhHQkVfRkxBRzJfU0VBUkNIX0ZPUl9TRlA7CiAKLQkJaWYgKGh3LT5waHkubXVsdGlzcGVlZF9maWJlcikgewotCQkJLyoKLQkJCSAqIEluIG11bHRpc3BlZWQgZmliZXIgc2V0dXBzLCB0aGUgZGV2aWNlIG1heSBub3QgaGF2ZQotCQkJICogaGFkIGEgcGh5c2ljYWwgY29ubmVjdGlvbiB3aGVuIHRoZSBkcml2ZXIgbG9hZGVkLgotCQkJICogSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGUgaW5pdGlhbCBsaW5rIGNvbmZpZ3VyYXRpb24KLQkJCSAqIGNvdWxkbid0IGdldCB0aGUgTUFDIGludG8gMTBHIG9yIDFHIG1vZGUsIHNvIHdlJ2xsCi0JCQkgKiBuZXZlciBoYXZlIGEgbGluayBzdGF0dXMgY2hhbmdlIGludGVycnVwdCBmaXJlLgotCQkJICogV2UgbmVlZCB0byB0cnkgYW5kIGZvcmNlIGFuIGF1dG9uZWdvdGlhdGlvbgotCQkJICogc2Vzc2lvbiwgdGhlbiBicmluZyB1cCBsaW5rLgotCQkJICovCi0JCQlpZiAoaHctPm1hYy5vcHMuc2V0dXBfc2ZwKQotCQkJCWh3LT5tYWMub3BzLnNldHVwX3NmcChodyk7Ci0JCQlpZiAoIShhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfSU5fU0ZQX0xJTktfVEFTSykpCi0JCQkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+bXVsdGlzcGVlZF9maWJlcl90YXNrKTsKLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiBEaXJlY3QgQXR0YWNoIEN1IGFuZCBub24tbXVsdGlzcGVlZCBmaWJlciBtb2R1bGVzCi0JCQkgKiBzdGlsbCBuZWVkIHRvIGJlIGNvbmZpZ3VyZWQgcHJvcGVybHkgcHJpb3IgdG8KLQkJCSAqIGF0dGVtcHRpbmcgbGluay4KLQkJCSAqLwotCQkJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0lOX1NGUF9NT0RfVEFTSykpCi0JCQkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+c2ZwX2NvbmZpZ19tb2R1bGVfdGFzayk7Ci0JCX0KKwlhZGFwdGVyLT5mbGFnczIgfD0gSVhHQkVfRkxBRzJfU0ZQX05FRURTX1JFU0VUOwogfQogCiAvKioKQEAgLTM4NjAsOSArMzkxOSwxMCBAQAogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkFOX0ZBSUxfQ0FQQUJMRSkKIAkJZ3BpZSB8PSBJWEdCRV9TRFAxX0dQSUVOOwogCi0JaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CiAJCWdwaWUgfD0gSVhHQkVfU0RQMV9HUElFTjsKIAkJZ3BpZSB8PSBJWEdCRV9TRFAyX0dQSUVOOworCX0KIAogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfR1BJRSwgZ3BpZSk7CiB9CkBAIC0zOTEzLDE3ICszOTczLDYgQEAKIAkJCWVfY3JpdChkcnYsICJGYW4gaGFzIHN0b3BwZWQsIHJlcGxhY2UgdGhlIGFkYXB0ZXJcbiIpOwogCX0KIAotCS8qCi0JICogRm9yIGhvdC1wbHVnZ2FibGUgU0ZQKyBkZXZpY2VzLCBhIG5ldyBTRlArIG1vZHVsZSBtYXkgaGF2ZQotCSAqIGFycml2ZWQgYmVmb3JlIGludGVycnVwdHMgd2VyZSBlbmFibGVkIGJ1dCBhZnRlciBwcm9iZS4gIFN1Y2gKLQkgKiBkZXZpY2VzIHdvdWxkbid0IGhhdmUgdGhlaXIgdHlwZSBpZGVudGlmaWVkIHlldC4gV2UgbmVlZCB0bwotCSAqIGtpY2sgb2ZmIHRoZSBTRlArIG1vZHVsZSBzZXR1cCBmaXJzdCwgdGhlbiB0cnkgdG8gYnJpbmcgdXAgbGluay4KLQkgKiBJZiB3ZSdyZSBub3QgaG90LXBsdWdnYWJsZSBTRlArLCB3ZSBqdXN0IG5lZWQgdG8gY29uZmlndXJlIGxpbmsKLQkgKiBhbmQgYnJpbmcgaXQgdXAuCi0JICovCi0JaWYgKGh3LT5waHkudHlwZSA9PSBpeGdiZV9waHlfbm9uZSkKLQkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+c2ZwX2NvbmZpZ19tb2R1bGVfdGFzayk7Ci0KIAkvKiBlbmFibGUgdHJhbnNtaXRzICovCiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhhZGFwdGVyLT5uZXRkZXYpOwogCkBAIC0zOTMxLDcgKzM5ODAsNyBAQAogCSAqIGxpbmsgdXAgaW50ZXJydXB0IGJ1dCBzaG91bGRuJ3QgYmUgYSBwcm9ibGVtICovCiAJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19ORUVEX0xJTktfVVBEQVRFOwogCWFkYXB0ZXItPmxpbmtfY2hlY2tfdGltZW91dCA9IGppZmZpZXM7Ci0JbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyk7CisJbW9kX3RpbWVyKCZhZGFwdGVyLT5zZXJ2aWNlX3RpbWVyLCBqaWZmaWVzKTsKIAogCS8qIFNldCBQRiBSZXNldCBEb25lIGJpdCBzbyBQRi9WRiBNYWlsIE9wcyBjYW4gd29yayAqLwogCWN0cmxfZXh0ID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0NUUkxfRVhUKTsKQEAgLTM5NDQsOCArMzk5MywxMSBAQAogdm9pZCBpeGdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewogCVdBUk5fT04oaW5faW50ZXJydXB0KCkpOworCS8qIHB1dCBvZmYgYW55IGltcGVuZGluZyBOZXRXYXRjaERvZ1RpbWVvdXQgKi8KKwlhZGFwdGVyLT5uZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwogCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fSVhHQkVfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQotCQltc2xlZXAoMSk7CisJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKIAlpeGdiZV9kb3duKGFkYXB0ZXIpOwogCS8qCiAJICogSWYgU1ItSU9WIGVuYWJsZWQgdGhlbiB3YWl0IGEgYml0IGJlZm9yZSBicmluZ2luZyB0aGUgYWRhcHRlcgpAQCAtMzk3MiwxMCArNDAyNCwyMCBAQAogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJaW50IGVycjsKIAorCS8qIGxvY2sgU0ZQIGluaXQgYml0IHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIHdpdGggdGhlIHdhdGNoZG9nICovCisJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19JWEdCRV9JTl9TRlBfSU5JVCwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOworCisJLyogY2xlYXIgYWxsIFNGUCBhbmQgbGluayBjb25maWcgcmVsYXRlZCBmbGFncyB3aGlsZSBob2xkaW5nIFNGUF9JTklUICovCisJYWRhcHRlci0+ZmxhZ3MyICY9IH4oSVhHQkVfRkxBRzJfU0VBUkNIX0ZPUl9TRlAgfAorCQkJICAgICBJWEdCRV9GTEFHMl9TRlBfTkVFRFNfUkVTRVQpOworCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX05FRURfTElOS19DT05GSUc7CisKIAllcnIgPSBody0+bWFjLm9wcy5pbml0X2h3KGh3KTsKIAlzd2l0Y2ggKGVycikgewogCWNhc2UgMDoKIAljYXNlIElYR0JFX0VSUl9TRlBfTk9UX1BSRVNFTlQ6CisJY2FzZSBJWEdCRV9FUlJfU0ZQX05PVF9TVVBQT1JURUQ6CiAJCWJyZWFrOwogCWNhc2UgSVhHQkVfRVJSX01BU1RFUl9SRVFVRVNUU19QRU5ESU5HOgogCQllX2Rldl9lcnIoIm1hc3RlciBkaXNhYmxlIHRpbWVkIG91dFxuIik7CkBAIC0zOTkzLDYgKzQwNTUsOCBAQAogCQllX2Rldl9lcnIoIkhhcmR3YXJlIEVycm9yOiAlZFxuIiwgZXJyKTsKIAl9CiAKKwljbGVhcl9iaXQoX19JWEdCRV9JTl9TRlBfSU5JVCwgJmFkYXB0ZXItPnN0YXRlKTsKKwogCS8qIHJlcHJvZ3JhbSB0aGUgUkFSWzBdIGluIGNhc2UgdXNlciBjaGFuZ2VkIGl0LiAqLwogCWh3LT5tYWMub3BzLnNldF9yYXIoaHcsIDAsIGh3LT5tYWMuYWRkciwgYWRhcHRlci0+bnVtX3ZmcywKIAkJCSAgICBJWEdCRV9SQUhfQVYpOwpAQCAtNDEyMSwxMyArNDE4NSwzOSBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MzIgcnhjdHJsOwotCXUzMiB0eGRjdGw7CiAJaW50IGk7CiAJaW50IG51bV9xX3ZlY3RvcnMgPSBhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUzsKIAogCS8qIHNpZ25hbCB0aGF0IHdlIGFyZSBkb3duIHRvIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciAqLwogCXNldF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpOwogCisJLyogZGlzYWJsZSByZWNlaXZlcyAqLworCXJ4Y3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SWENUUkwpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhDVFJMLCByeGN0cmwgJiB+SVhHQkVfUlhDVFJMX1JYRU4pOworCisJLyogZGlzYWJsZSBhbGwgZW5hYmxlZCByeCBxdWV1ZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQorCQkvKiB0aGlzIGNhbGwgYWxzbyBmbHVzaGVzIHRoZSBwcmV2aW91cyB3cml0ZSAqLworCQlpeGdiZV9kaXNhYmxlX3J4X3F1ZXVlKGFkYXB0ZXIsIGFkYXB0ZXItPnJ4X3JpbmdbaV0pOworCisJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CisKKwluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKKworCS8qIGNhbGwgY2FycmllciBvZmYgZmlyc3QgdG8gYXZvaWQgZmFsc2UgZGV2X3dhdGNoZG9nIHRpbWVvdXRzICovCisJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKKwluZXRpZl90eF9kaXNhYmxlKG5ldGRldik7CisKKwlpeGdiZV9pcnFfZGlzYWJsZShhZGFwdGVyKTsKKworCWl4Z2JlX25hcGlfZGlzYWJsZV9hbGwoYWRhcHRlcik7CisKKwlhZGFwdGVyLT5mbGFnczIgJj0gfihJWEdCRV9GTEFHMl9GRElSX1JFUVVJUkVTX1JFSU5JVCB8CisJCQkgICAgIElYR0JFX0ZMQUcyX1JFU0VUX1JFUVVFU1RFRCk7CisJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfTkVFRF9MSU5LX1VQREFURTsKKworCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT5zZXJ2aWNlX3RpbWVyKTsKKwogCS8qIGRpc2FibGUgcmVjZWl2ZSBmb3IgYWxsIFZGcyBhbmQgd2FpdCBvbmUgc2Vjb25kICovCiAJaWYgKGFkYXB0ZXItPm51bV92ZnMpIHsKIAkJLyogcGluZyBhbGwgdGhlIGFjdGl2ZSB2ZnMgdG8gbGV0IHRoZW0ga25vdyB3ZSBhcmUgZ29pbmcgZG93biAqLwpAQCAtNDE0MSwzMSArNDIzMSw2IEBACiAJCQlhZGFwdGVyLT52ZmluZm9baV0uY2xlYXJfdG9fc2VuZCA9IDA7CiAJfQogCi0JLyogZGlzYWJsZSByZWNlaXZlcyAqLwotCXJ4Y3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SWENUUkwpOwotCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhDVFJMLCByeGN0cmwgJiB+SVhHQkVfUlhDVFJMX1JYRU4pOwotCi0JLyogZGlzYWJsZSBhbGwgZW5hYmxlZCByeCBxdWV1ZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQotCQkvKiB0aGlzIGNhbGwgYWxzbyBmbHVzaGVzIHRoZSBwcmV2aW91cyB3cml0ZSAqLwotCQlpeGdiZV9kaXNhYmxlX3J4X3F1ZXVlKGFkYXB0ZXIsIGFkYXB0ZXItPnJ4X3JpbmdbaV0pOwotCi0JbXNsZWVwKDEwKTsKLQotCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpOwotCi0JY2xlYXJfYml0KF9fSVhHQkVfU0ZQX01PRFVMRV9OT1RfRk9VTkQsICZhZGFwdGVyLT5zdGF0ZSk7Ci0JZGVsX3RpbWVyX3N5bmMoJmFkYXB0ZXItPnNmcF90aW1lcik7Ci0JZGVsX3RpbWVyX3N5bmMoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyKTsKLQljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT53YXRjaGRvZ190YXNrKTsKLQotCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7Ci0JbmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpOwotCi0JaXhnYmVfaXJxX2Rpc2FibGUoYWRhcHRlcik7Ci0KLQlpeGdiZV9uYXBpX2Rpc2FibGVfYWxsKGFkYXB0ZXIpOwotCiAJLyogQ2xlYW51cCB0aGUgYWZmaW5pdHlfaGludCBDUFUgbWFzayBtZW1vcnkgYW5kIGNhbGxiYWNrICovCiAJZm9yIChpID0gMDsgaSA8IG51bV9xX3ZlY3RvcnM7IGkrKykgewogCQlzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IgKnFfdmVjdG9yID0gYWRhcHRlci0+cV92ZWN0b3JbaV07CkBAIC00MTc1LDIxICs0MjQwLDEzIEBACiAJCWZyZWVfY3B1bWFza192YXIocV92ZWN0b3ItPmFmZmluaXR5X21hc2spOwogCX0KIAotCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkRJUl9IQVNIX0NBUEFCTEUgfHwKLQkgICAgYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZESVJfUEVSRkVDVF9DQVBBQkxFKQotCQljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5mZGlyX3JlaW5pdF90YXNrKTsKLQotCWlmIChhZGFwdGVyLT5mbGFnczIgJiBJWEdCRV9GTEFHMl9URU1QX1NFTlNPUl9DQVBBQkxFKQotCQljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5jaGVja19vdmVydGVtcF90YXNrKTsKLQogCS8qIGRpc2FibGUgdHJhbnNtaXRzIGluIHRoZSBoYXJkd2FyZSBub3cgdGhhdCBpbnRlcnJ1cHRzIGFyZSBvZmYgKi8KIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CiAJCXU4IHJlZ19pZHggPSBhZGFwdGVyLT50eF9yaW5nW2ldLT5yZWdfaWR4OwotCQl0eGRjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVFhEQ1RMKHJlZ19pZHgpKTsKLQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9UWERDVEwocmVnX2lkeCksCi0JCQkJKHR4ZGN0bCAmIH5JWEdCRV9UWERDVExfRU5BQkxFKSk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVFhEQ1RMKHJlZ19pZHgpLCBJWEdCRV9UWERDVExfU1dGTFNIKTsKIAl9Ci0JLyogRGlzYWJsZSB0aGUgVHggRE1BIGVuZ2luZSBvbiA4MjU5OSAqLworCisJLyogRGlzYWJsZSB0aGUgVHggRE1BIGVuZ2luZSBvbiA4MjU5OSBhbmQgWDU0MCAqLwogCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CiAJY2FzZSBpeGdiZV9tYWNfODI1OTlFQjoKIAljYXNlIGl4Z2JlX21hY19YNTQwOgpAQCAtNDIwMSw5ICs0MjU4LDYgQEAKIAkJYnJlYWs7CiAJfQogCi0JLyogY2xlYXIgbi10dXBsZSBmaWx0ZXJzIHRoYXQgYXJlIGNhY2hlZCAqLwotCWV0aHRvb2xfbnR1cGxlX2ZsdXNoKG5ldGRldik7Ci0KIAlpZiAoIXBjaV9jaGFubmVsX29mZmxpbmUoYWRhcHRlci0+cGRldikpCiAJCWl4Z2JlX3Jlc2V0KGFkYXB0ZXIpOwogCkBAIC00MjY3LDI1ICs0MzIxLDggQEAKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKLQlhZGFwdGVyLT50eF90aW1lb3V0X2NvdW50Kys7Ci0KIAkvKiBEbyB0aGUgcmVzZXQgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCAqLwotCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnJlc2V0X3Rhc2spOwotfQotCi1zdGF0aWMgdm9pZCBpeGdiZV9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcjsKLQlhZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpeGdiZV9hZGFwdGVyLCByZXNldF90YXNrKTsKLQotCS8qIElmIHdlJ3JlIGFscmVhZHkgZG93biBvciByZXNldHRpbmcsIGp1c3QgYmFpbCAqLwotCWlmICh0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkgfHwKLQkgICAgdGVzdF9iaXQoX19JWEdCRV9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCi0JCXJldHVybjsKLQotCWl4Z2JlX2R1bXAoYWRhcHRlcik7Ci0JbmV0ZGV2X2VycihhZGFwdGVyLT5uZXRkZXYsICJSZXNldCBhZGFwdGVyXG4iKTsKLQlpeGdiZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpOworCWl4Z2JlX3R4X3RpbWVvdXRfcmVzZXQoYWRhcHRlcik7CiB9CiAKIC8qKgpAQCAtNDU2Nyw4ICs0NjA0LDggQEAKICNpZmRlZiBDT05GSUdfSVhHQkVfRENCCiAKIC8qIGl4Z2JlX2dldF9maXJzdF9yZWdfaWR4IC0gUmV0dXJuIGZpcnN0IHJlZ2lzdGVyIGluZGV4IGFzc29jaWF0ZWQgd2l0aCByaW5nICovCi12b2lkIGl4Z2JlX2dldF9maXJzdF9yZWdfaWR4KHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCB1OCB0YywKLQkJCSAgICAgdW5zaWduZWQgaW50ICp0eCwgdW5zaWduZWQgaW50ICpyeCkKK3N0YXRpYyB2b2lkIGl4Z2JlX2dldF9maXJzdF9yZWdfaWR4KHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCB1OCB0YywKKwkJCQkgICAgdW5zaWduZWQgaW50ICp0eCwgdW5zaWduZWQgaW50ICpyeCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CkBAIC01MTMzLDU3ICs1MTcwLDYgQEAKIH0KIAogLyoqCi0gKiBpeGdiZV9zZnBfdGltZXIgLSB3b3JrZXIgdGhyZWFkIHRvIGZpbmQgYSBtaXNzaW5nIG1vZHVsZQotICogQGRhdGE6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0Ci0gKiovCi1zdGF0aWMgdm9pZCBpeGdiZV9zZnBfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBpeGdiZV9hZGFwdGVyICopZGF0YTsKLQotCS8qCi0JICogRG8gdGhlIHNmcF90aW1lciBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0IGR1ZSB0byB0aGUKLQkgKiBkZWxheXMgdGhhdCBzZnArIGRldGVjdGlvbiByZXF1aXJlcwotCSAqLwotCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnNmcF90YXNrKTsKLX0KLQotLyoqCi0gKiBpeGdiZV9zZnBfdGFzayAtIHdvcmtlciB0aHJlYWQgdG8gZmluZCBhIG1pc3NpbmcgbW9kdWxlCi0gKiBAd29yazogcG9pbnRlciB0byB3b3JrX3N0cnVjdCBjb250YWluaW5nIG91ciBkYXRhCi0gKiovCi1zdGF0aWMgdm9pZCBpeGdiZV9zZnBfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjb250YWluZXJfb2Yod29yaywKLQkJCQkJCSAgICAgc3RydWN0IGl4Z2JlX2FkYXB0ZXIsCi0JCQkJCQkgICAgIHNmcF90YXNrKTsKLQlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCi0JaWYgKChody0+cGh5LnR5cGUgPT0gaXhnYmVfcGh5X25sKSAmJgotCSAgICAoaHctPnBoeS5zZnBfdHlwZSA9PSBpeGdiZV9zZnBfdHlwZV9ub3RfcHJlc2VudCkpIHsKLQkJczMyIHJldCA9IGh3LT5waHkub3BzLmlkZW50aWZ5X3NmcChodyk7Ci0JCWlmIChyZXQgPT0gSVhHQkVfRVJSX1NGUF9OT1RfUFJFU0VOVCkKLQkJCWdvdG8gcmVzY2hlZHVsZTsKLQkJcmV0ID0gaHctPnBoeS5vcHMucmVzZXQoaHcpOwotCQlpZiAocmV0ID09IElYR0JFX0VSUl9TRlBfTk9UX1NVUFBPUlRFRCkgewotCQkJZV9kZXZfZXJyKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBiZWNhdXNlIGFuIHVuc3VwcG9ydGVkICIKLQkJCQkgICJTRlArIG1vZHVsZSB0eXBlIHdhcyBkZXRlY3RlZC5cbiIpOwotCQkJZV9kZXZfZXJyKCJSZWxvYWQgdGhlIGRyaXZlciBhZnRlciBpbnN0YWxsaW5nIGEgIgotCQkJCSAgInN1cHBvcnRlZCBtb2R1bGUuXG4iKTsKLQkJCXVucmVnaXN0ZXJfbmV0ZGV2KGFkYXB0ZXItPm5ldGRldik7Ci0JCX0gZWxzZSB7Ci0JCQllX2luZm8ocHJvYmUsICJkZXRlY3RlZCBTRlArOiAlZFxuIiwgaHctPnBoeS5zZnBfdHlwZSk7Ci0JCX0KLQkJLyogZG9uJ3QgbmVlZCB0aGlzIHJvdXRpbmUgYW55IG1vcmUgKi8KLQkJY2xlYXJfYml0KF9fSVhHQkVfU0ZQX01PRFVMRV9OT1RfRk9VTkQsICZhZGFwdGVyLT5zdGF0ZSk7Ci0JfQotCXJldHVybjsKLXJlc2NoZWR1bGU6Ci0JaWYgKHRlc3RfYml0KF9fSVhHQkVfU0ZQX01PRFVMRV9OT1RfRk9VTkQsICZhZGFwdGVyLT5zdGF0ZSkpCi0JCW1vZF90aW1lcigmYWRhcHRlci0+c2ZwX3RpbWVyLAotCQkJICByb3VuZF9qaWZmaWVzKGppZmZpZXMgKyAoMiAqIEhaKSkpOwotfQotCi0vKioKICAqIGl4Z2JlX3N3X2luaXQgLSBJbml0aWFsaXplIGdlbmVyYWwgc29mdHdhcmUgc3RydWN0dXJlcyAoc3RydWN0IGl4Z2JlX2FkYXB0ZXIpCiAgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQogICoKQEAgLTU4OTksOCArNTg4NSwxMyBAQAogCQlod3N0YXRzLT5nb3RjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HT1RDSCk7CiAJCWh3c3RhdHMtPnRvciArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVE9SSCk7CiAJCWJyZWFrOwotCWNhc2UgaXhnYmVfbWFjXzgyNTk5RUI6CiAJY2FzZSBpeGdiZV9tYWNfWDU0MDoKKwkJLyogT1MyQk1DIHN0YXRzIGFyZSBYNTQwIG9ubHkqLworCQlod3N0YXRzLT5vMmJncHRjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9PMkJHUFRDKTsKKwkJaHdzdGF0cy0+bzJic3BjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9PMkJTUEMpOworCQlod3N0YXRzLT5iMm9zcGMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0IyT1NQQyk7CisJCWh3c3RhdHMtPmIyb2dwcmMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0IyT0dQUkMpOworCWNhc2UgaXhnYmVfbWFjXzgyNTk5RUI6CiAJCWh3c3RhdHMtPmdvcmMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0dPUkNMKTsKIAkJSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0dPUkNIKTsgLyogdG8gY2xlYXIgKi8KIAkJaHdzdGF0cy0+Z290YyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfR09UQ0wpOwpAQCAtNTk3NCwyMyArNTk2NSw2NiBAQAogfQogCiAvKioKLSAqIGl4Z2JlX3dhdGNoZG9nIC0gVGltZXIgQ2FsbC1iYWNrCi0gKiBAZGF0YTogcG9pbnRlciB0byBhZGFwdGVyIGNhc3QgaW50byBhbiB1bnNpZ25lZCBsb25nCisgKiBpeGdiZV9mZGlyX3JlaW5pdF9zdWJ0YXNrIC0gd29ya2VyIHRocmVhZCB0byByZWluaXQgRkRJUiBmaWx0ZXIgdGFibGUKKyAqIEBhZGFwdGVyIC0gcG9pbnRlciB0byB0aGUgZGV2aWNlIGFkYXB0ZXIgc3RydWN0dXJlCiAgKiovCi1zdGF0aWMgdm9pZCBpeGdiZV93YXRjaGRvZyh1bnNpZ25lZCBsb25nIGRhdGEpCitzdGF0aWMgdm9pZCBpeGdiZV9mZGlyX3JlaW5pdF9zdWJ0YXNrKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewotCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBpeGdiZV9hZGFwdGVyICopZGF0YTsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCWludCBpOworCisJaWYgKCEoYWRhcHRlci0+ZmxhZ3MyICYgSVhHQkVfRkxBRzJfRkRJUl9SRVFVSVJFU19SRUlOSVQpKQorCQlyZXR1cm47CisKKwlhZGFwdGVyLT5mbGFnczIgJj0gfklYR0JFX0ZMQUcyX0ZESVJfUkVRVUlSRVNfUkVJTklUOworCisJLyogaWYgaW50ZXJmYWNlIGlzIGRvd24gZG8gbm90aGluZyAqLworCWlmICh0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCXJldHVybjsKKworCS8qIGRvIG5vdGhpbmcgaWYgd2UgYXJlIG5vdCB1c2luZyBzaWduYXR1cmUgZmlsdGVycyAqLworCWlmICghKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GRElSX0hBU0hfQ0FQQUJMRSkpCisJCXJldHVybjsKKworCWFkYXB0ZXItPmZkaXJfb3ZlcmZsb3crKzsKKworCWlmIChpeGdiZV9yZWluaXRfZmRpcl90YWJsZXNfODI1OTkoaHcpID09IDApIHsKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKKwkJCXNldF9iaXQoX19JWEdCRV9UWF9GRElSX0lOSVRfRE9ORSwKKwkJCSAgICAgICAgJihhZGFwdGVyLT50eF9yaW5nW2ldLT5zdGF0ZSkpOworCQkvKiByZS1lbmFibGUgZmxvdyBkaXJlY3RvciBpbnRlcnJ1cHRzICovCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlNUywgSVhHQkVfRUlNU19GTE9XX0RJUik7CisJfSBlbHNlIHsKKwkJZV9lcnIocHJvYmUsICJmYWlsZWQgdG8gZmluaXNoIEZESVIgcmUtaW5pdGlhbGl6YXRpb24sICIKKwkJICAgICAgImlnbm9yZWQgYWRkaW5nIEZESVIgQVRSIGZpbHRlcnNcbiIpOworCX0KK30KKworLyoqCisgKiBpeGdiZV9jaGVja19oYW5nX3N1YnRhc2sgLSBjaGVjayBmb3IgaHVuZyBxdWV1ZXMgYW5kIGRyb3BwZWQgaW50ZXJydXB0cworICogQGFkYXB0ZXIgLSBwb2ludGVyIHRvIHRoZSBkZXZpY2UgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNlcnZlcyB0d28gcHVycG9zZXMuICBGaXJzdCBpdCBzdHJvYmVzIHRoZSBpbnRlcnJ1cHQgbGluZXMKKyAqIGluIG9yZGVyIHRvIG1ha2UgY2VydGFpbiBpbnRlcnJ1cHRzIGFyZSBvY2N1cmluZy4gIFNlY29uZGx5IGl0IHNldHMgdGhlCisgKiBiaXRzIG5lZWRlZCB0byBjaGVjayBmb3IgVFggaGFuZ3MuICBBcyBhIHJlc3VsdCB3ZSBzaG91bGQgaW1tZWRpYXRlbHkKKyAqIGRldGVybWluZSBpZiBhIGhhbmcgaGFzIG9jY3VyZWQuCisgKi8KK3N0YXRpYyB2b2lkIGl4Z2JlX2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXU2NCBlaWNzID0gMDsKIAlpbnQgaTsKIAotCS8qCi0JICogIERvIHRoZSB3YXRjaGRvZyBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0IGR1ZSB0byB0aGUgbG92ZWx5Ci0JICogZGVsYXlzIHRoYXQgc29tZSBvZiB0aGUgbmV3ZXIgaGFyZHdhcmUgcmVxdWlyZXMKLQkgKi8KKwkvKiBJZiB3ZSdyZSBkb3duIG9yIHJlc2V0dGluZywganVzdCBiYWlsICovCisJaWYgKHRlc3RfYml0KF9fSVhHQkVfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSB8fAorCSAgICB0ZXN0X2JpdChfX0lYR0JFX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKKwkJcmV0dXJuOwogCi0JaWYgKHRlc3RfYml0KF9fSVhHQkVfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKLQkJZ290byB3YXRjaGRvZ19zaG9ydF9jaXJjdWl0OworCS8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgKi8KKwlpZiAobmV0aWZfY2Fycmllcl9vayhhZGFwdGVyLT5uZXRkZXYpKSB7CisJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCisJCQlzZXRfY2hlY2tfZm9yX3R4X2hhbmcoYWRhcHRlci0+dHhfcmluZ1tpXSk7CisJfQogCiAJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX01TSVhfRU5BQkxFRCkpIHsKIAkJLyoKQEAgLTYwMDAsMTA4ICs2MDM0LDE3MiBAQAogCQkgKi8KIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSUNTLAogCQkJKElYR0JFX0VJQ1NfVENQX1RJTUVSIHwgSVhHQkVfRUlDU19PVEhFUikpOwotCQlnb3RvIHdhdGNoZG9nX3Jlc2NoZWR1bGU7CisJfSBlbHNlIHsKKwkJLyogZ2V0IG9uZSBiaXQgZm9yIGV2ZXJ5IGFjdGl2ZSB0eC9yeCBpbnRlcnJ1cHQgdmVjdG9yICovCisJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUzsgaSsrKSB7CisJCQlzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IgKnF2ID0gYWRhcHRlci0+cV92ZWN0b3JbaV07CisJCQlpZiAocXYtPnJ4cl9jb3VudCB8fCBxdi0+dHhyX2NvdW50KQorCQkJCWVpY3MgfD0gKCh1NjQpMSA8PCBpKTsKKwkJfQogCX0KIAotCS8qIGdldCBvbmUgYml0IGZvciBldmVyeSBhY3RpdmUgdHgvcnggaW50ZXJydXB0IHZlY3RvciAqLwotCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUzsgaSsrKSB7Ci0JCXN0cnVjdCBpeGdiZV9xX3ZlY3RvciAqcXYgPSBhZGFwdGVyLT5xX3ZlY3RvcltpXTsKLQkJaWYgKHF2LT5yeHJfY291bnQgfHwgcXYtPnR4cl9jb3VudCkKLQkJCWVpY3MgfD0gKCh1NjQpMSA8PCBpKTsKLQl9Ci0KLQkvKiBDYXVzZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgdG8gZW5zdXJlIHJ4IHJpbmdzIGFyZSBjbGVhbmVkICovCisJLyogQ2F1c2Ugc29mdHdhcmUgaW50ZXJydXB0IHRvIGVuc3VyZSByaW5ncyBhcmUgY2xlYW5lZCAqLwogCWl4Z2JlX2lycV9yZWFybV9xdWV1ZXMoYWRhcHRlciwgZWljcyk7CiAKLXdhdGNoZG9nX3Jlc2NoZWR1bGU6Ci0JLyogUmVzZXQgdGhlIHRpbWVyICovCi0JbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgcm91bmRfamlmZmllcyhqaWZmaWVzICsgMiAqIEhaKSk7Ci0KLXdhdGNoZG9nX3Nob3J0X2NpcmN1aXQ6Ci0Jc2NoZWR1bGVfd29yaygmYWRhcHRlci0+d2F0Y2hkb2dfdGFzayk7CiB9CiAKIC8qKgotICogaXhnYmVfbXVsdGlzcGVlZF9maWJlcl90YXNrIC0gd29ya2VyIHRocmVhZCB0byBjb25maWd1cmUgbXVsdGlzcGVlZCBmaWJlcgotICogQHdvcms6IHBvaW50ZXIgdG8gd29ya19zdHJ1Y3QgY29udGFpbmluZyBvdXIgZGF0YQorICogaXhnYmVfd2F0Y2hkb2dfdXBkYXRlX2xpbmsgLSB1cGRhdGUgdGhlIGxpbmsgc3RhdHVzCisgKiBAYWRhcHRlciAtIHBvaW50ZXIgdG8gdGhlIGRldmljZSBhZGFwdGVyIHN0cnVjdHVyZQorICogQGxpbmtfc3BlZWQgLSBwb2ludGVyIHRvIGEgdTMyIHRvIHN0b3JlIHRoZSBsaW5rX3NwZWVkCiAgKiovCi1zdGF0aWMgdm9pZCBpeGdiZV9tdWx0aXNwZWVkX2ZpYmVyX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorc3RhdGljIHZvaWQgaXhnYmVfd2F0Y2hkb2dfdXBkYXRlX2xpbmsoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjb250YWluZXJfb2Yod29yaywKLQkJCQkJCSAgICAgc3RydWN0IGl4Z2JlX2FkYXB0ZXIsCi0JCQkJCQkgICAgIG11bHRpc3BlZWRfZmliZXJfdGFzayk7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQl1MzIgYXV0b25lZzsKLQlib29sIG5lZ290aWF0aW9uOwotCi0JYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19JTl9TRlBfTElOS19UQVNLOwotCWF1dG9uZWcgPSBody0+cGh5LmF1dG9uZWdfYWR2ZXJ0aXNlZDsKLQlpZiAoKCFhdXRvbmVnKSAmJiAoaHctPm1hYy5vcHMuZ2V0X2xpbmtfY2FwYWJpbGl0aWVzKSkKLQkJaHctPm1hYy5vcHMuZ2V0X2xpbmtfY2FwYWJpbGl0aWVzKGh3LCAmYXV0b25lZywgJm5lZ290aWF0aW9uKTsKLQlody0+bWFjLmF1dG90cnlfcmVzdGFydCA9IGZhbHNlOwotCWlmIChody0+bWFjLm9wcy5zZXR1cF9saW5rKQotCQlody0+bWFjLm9wcy5zZXR1cF9saW5rKGh3LCBhdXRvbmVnLCBuZWdvdGlhdGlvbiwgdHJ1ZSk7Ci0JYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19ORUVEX0xJTktfVVBEQVRFOwotCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX0lOX1NGUF9MSU5LX1RBU0s7Ci19Ci0KLS8qKgotICogaXhnYmVfc2ZwX2NvbmZpZ19tb2R1bGVfdGFzayAtIHdvcmtlciB0aHJlYWQgdG8gY29uZmlndXJlIGEgbmV3IFNGUCsgbW9kdWxlCi0gKiBAd29yazogcG9pbnRlciB0byB3b3JrX3N0cnVjdCBjb250YWluaW5nIG91ciBkYXRhCi0gKiovCi1zdGF0aWMgdm9pZCBpeGdiZV9zZnBfY29uZmlnX21vZHVsZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLAotCQkJCQkJICAgICBzdHJ1Y3QgaXhnYmVfYWRhcHRlciwKLQkJCQkJCSAgICAgc2ZwX2NvbmZpZ19tb2R1bGVfdGFzayk7Ci0Jc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQl1MzIgZXJyOwotCi0JYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19JTl9TRlBfTU9EX1RBU0s7Ci0KLQkvKiBUaW1lIGZvciBlbGVjdHJpY2FsIG9zY2lsbGF0aW9ucyB0byBzZXR0bGUgZG93biAqLwotCW1zbGVlcCgxMDApOwotCWVyciA9IGh3LT5waHkub3BzLmlkZW50aWZ5X3NmcChodyk7Ci0KLQlpZiAoZXJyID09IElYR0JFX0VSUl9TRlBfTk9UX1NVUFBPUlRFRCkgewotCQllX2Rldl9lcnIoImZhaWxlZCB0byBpbml0aWFsaXplIGJlY2F1c2UgYW4gdW5zdXBwb3J0ZWQgU0ZQKyAiCi0JCQkgICJtb2R1bGUgdHlwZSB3YXMgZGV0ZWN0ZWQuXG4iKTsKLQkJZV9kZXZfZXJyKCJSZWxvYWQgdGhlIGRyaXZlciBhZnRlciBpbnN0YWxsaW5nIGEgc3VwcG9ydGVkICIKLQkJCSAgIm1vZHVsZS5cbiIpOwotCQl1bnJlZ2lzdGVyX25ldGRldihhZGFwdGVyLT5uZXRkZXYpOwotCQlyZXR1cm47Ci0JfQotCWlmIChody0+bWFjLm9wcy5zZXR1cF9zZnApCi0JCWh3LT5tYWMub3BzLnNldHVwX3NmcChodyk7Ci0KLQlpZiAoIShhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfSU5fU0ZQX0xJTktfVEFTSykpCi0JCS8qIFRoaXMgd2lsbCBhbHNvIHdvcmsgZm9yIERBIFR3aW5heCBjb25uZWN0aW9ucyAqLwotCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5tdWx0aXNwZWVkX2ZpYmVyX3Rhc2spOwotCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX0lOX1NGUF9NT0RfVEFTSzsKLX0KLQotLyoqCi0gKiBpeGdiZV9mZGlyX3JlaW5pdF90YXNrIC0gd29ya2VyIHRocmVhZCB0byByZWluaXQgRkRJUiBmaWx0ZXIgdGFibGUKLSAqIEB3b3JrOiBwb2ludGVyIHRvIHdvcmtfc3RydWN0IGNvbnRhaW5pbmcgb3VyIGRhdGEKLSAqKi8KLXN0YXRpYyB2b2lkIGl4Z2JlX2ZkaXJfcmVpbml0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssCi0JCQkJCQkgICAgIHN0cnVjdCBpeGdiZV9hZGFwdGVyLAotCQkJCQkJICAgICBmZGlyX3JlaW5pdF90YXNrKTsKLQlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiBsaW5rX3NwZWVkID0gYWRhcHRlci0+bGlua19zcGVlZDsKKwlib29sIGxpbmtfdXAgPSBhZGFwdGVyLT5saW5rX3VwOwogCWludCBpOwogCi0JaWYgKGl4Z2JlX3JlaW5pdF9mZGlyX3RhYmxlc184MjU5OShodykgPT0gMCkgewotCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQotCQkJc2V0X2JpdChfX0lYR0JFX1RYX0ZESVJfSU5JVF9ET05FLAotCQkJCSYoYWRhcHRlci0+dHhfcmluZ1tpXS0+c3RhdGUpKTsKKwlpZiAoIShhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfTkVFRF9MSU5LX1VQREFURSkpCisJCXJldHVybjsKKworCWlmIChody0+bWFjLm9wcy5jaGVja19saW5rKSB7CisJCWh3LT5tYWMub3BzLmNoZWNrX2xpbmsoaHcsICZsaW5rX3NwZWVkLCAmbGlua191cCwgZmFsc2UpOwogCX0gZWxzZSB7Ci0JCWVfZXJyKHByb2JlLCAiZmFpbGVkIHRvIGZpbmlzaCBGRElSIHJlLWluaXRpYWxpemF0aW9uLCAiCi0JCSAgICAgICJpZ25vcmVkIGFkZGluZyBGRElSIEFUUiBmaWx0ZXJzXG4iKTsKKwkJLyogYWx3YXlzIGFzc3VtZSBsaW5rIGlzIHVwLCBpZiBubyBjaGVjayBsaW5rIGZ1bmN0aW9uICovCisJCWxpbmtfc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTDsKKwkJbGlua191cCA9IHRydWU7CiAJfQotCS8qIERvbmUgRkRJUiBSZS1pbml0aWFsaXphdGlvbiwgZW5hYmxlIHRyYW5zbWl0cyAqLwotCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMoYWRhcHRlci0+bmV0ZGV2KTsKKwlpZiAobGlua191cCkgeworCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgTUFYX1RSQUZGSUNfQ0xBU1M7IGkrKykKKwkJCQlody0+bWFjLm9wcy5mY19lbmFibGUoaHcsIGkpOworCQl9IGVsc2UgeworCQkJaHctPm1hYy5vcHMuZmNfZW5hYmxlKGh3LCAwKTsKKwkJfQorCX0KKworCWlmIChsaW5rX3VwIHx8CisJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgKGFkYXB0ZXItPmxpbmtfY2hlY2tfdGltZW91dCArCisJCQkJIElYR0JFX1RSWV9MSU5LX1RJTUVPVVQpKSkgeworCQlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19ORUVEX0xJTktfVVBEQVRFOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJTVMsIElYR0JFX0VJTUNfTFNDKTsKKwkJSVhHQkVfV1JJVEVfRkxVU0goaHcpOworCX0KKworCWFkYXB0ZXItPmxpbmtfdXAgPSBsaW5rX3VwOworCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSBsaW5rX3NwZWVkOworfQorCisvKioKKyAqIGl4Z2JlX3dhdGNoZG9nX2xpbmtfaXNfdXAgLSB1cGRhdGUgbmV0aWZfY2FycmllciBzdGF0dXMgYW5kCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgbGluayB1cCBtZXNzYWdlCisgKiBAYWRhcHRlciAtIHBvaW50ZXIgdG8gdGhlIGRldmljZSBhZGFwdGVyIHN0cnVjdHVyZQorICoqLworc3RhdGljIHZvaWQgaXhnYmVfd2F0Y2hkb2dfbGlua19pc191cChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIGxpbmtfc3BlZWQgPSBhZGFwdGVyLT5saW5rX3NwZWVkOworCWJvb2wgZmxvd19yeCwgZmxvd190eDsKKworCS8qIG9ubHkgY29udGludWUgaWYgbGluayB3YXMgcHJldmlvdXNseSBkb3duICovCisJaWYgKG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkKKwkJcmV0dXJuOworCisJYWRhcHRlci0+ZmxhZ3MyICY9IH5JWEdCRV9GTEFHMl9TRUFSQ0hfRk9SX1NGUDsKKworCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBpeGdiZV9tYWNfODI1OThFQjogeworCQl1MzIgZnJjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkNUUkwpOworCQl1MzIgcm1jcyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9STUNTKTsKKwkJZmxvd19yeCA9ICEhKGZyY3RsICYgSVhHQkVfRkNUUkxfUkZDRSk7CisJCWZsb3dfdHggPSAhIShybWNzICYgSVhHQkVfUk1DU19URkNFXzgwMl8zWCk7CisJfQorCQlicmVhazsKKwljYXNlIGl4Z2JlX21hY19YNTQwOgorCWNhc2UgaXhnYmVfbWFjXzgyNTk5RUI6IHsKKwkJdTMyIG1mbGNuID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX01GTENOKTsKKwkJdTMyIGZjY2ZnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZDQ0ZHKTsKKwkJZmxvd19yeCA9ICEhKG1mbGNuICYgSVhHQkVfTUZMQ05fUkZDRSk7CisJCWZsb3dfdHggPSAhIShmY2NmZyAmIElYR0JFX0ZDQ0ZHX1RGQ0VfODAyXzNYKTsKKwl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZsb3dfdHggPSBmYWxzZTsKKwkJZmxvd19yeCA9IGZhbHNlOworCQlicmVhazsKKwl9CisJZV9pbmZvKGRydiwgIk5JQyBMaW5rIGlzIFVwICVzLCBGbG93IENvbnRyb2w6ICVzXG4iLAorCSAgICAgICAobGlua19zcGVlZCA9PSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTCA/CisJICAgICAgICIxMCBHYnBzIiA6CisJICAgICAgIChsaW5rX3NwZWVkID09IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwgPworCSAgICAgICAiMSBHYnBzIiA6CisJICAgICAgIChsaW5rX3NwZWVkID09IElYR0JFX0xJTktfU1BFRURfMTAwX0ZVTEwgPworCSAgICAgICAiMTAwIE1icHMiIDoKKwkgICAgICAgInVua25vd24gc3BlZWQiKSkpLAorCSAgICAgICAoKGZsb3dfcnggJiYgZmxvd190eCkgPyAiUlgvVFgiIDoKKwkgICAgICAgKGZsb3dfcnggPyAiUlgiIDoKKwkgICAgICAgKGZsb3dfdHggPyAiVFgiIDogIk5vbmUiKSkpKTsKKworCW5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTsKKyNpZmRlZiBIQVZFX0lQTElOS19WRl9DT05GSUcKKwlpeGdiZV9jaGVja192Zl9yYXRlX2xpbWl0KGFkYXB0ZXIpOworI2VuZGlmIC8qIEhBVkVfSVBMSU5LX1ZGX0NPTkZJRyAqLworfQorCisvKioKKyAqIGl4Z2JlX3dhdGNoZG9nX2xpbmtfaXNfZG93biAtIHVwZGF0ZSBuZXRpZl9jYXJyaWVyIHN0YXR1cyBhbmQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50IGxpbmsgZG93biBtZXNzYWdlCisgKiBAYWRhcHRlciAtIHBvaW50ZXIgdG8gdGhlIGFkYXB0ZXIgc3RydWN0dXJlCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZV93YXRjaGRvZ19saW5rX2lzX2Rvd24oc3RydWN0IGl4Z2JlX2FkYXB0ZXIqIGFkYXB0ZXIpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJYWRhcHRlci0+bGlua191cCA9IGZhbHNlOworCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSAwOworCisJLyogb25seSBjb250aW51ZSBpZiBsaW5rIHdhcyB1cCBwcmV2aW91c2x5ICovCisJaWYgKCFuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpCisJCXJldHVybjsKKworCS8qIHBvbGwgZm9yIFNGUCsgY2FibGUgd2hlbiBsaW5rIGlzIGRvd24gKi8KKwlpZiAoaXhnYmVfaXNfc2ZwKGh3KSAmJiBody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCisJCWFkYXB0ZXItPmZsYWdzMiB8PSBJWEdCRV9GTEFHMl9TRUFSQ0hfRk9SX1NGUDsKKworCWVfaW5mbyhkcnYsICJOSUMgTGluayBpcyBEb3duXG4iKTsKKwluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOworfQorCisvKioKKyAqIGl4Z2JlX3dhdGNoZG9nX2ZsdXNoX3R4IC0gZmx1c2ggcXVldWVzIG9uIGxpbmsgZG93bgorICogQGFkYXB0ZXIgLSBwb2ludGVyIHRvIHRoZSBkZXZpY2UgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JlX3dhdGNoZG9nX2ZsdXNoX3R4KHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBpOworCWludCBzb21lX3R4X3BlbmRpbmcgPSAwOworCisJaWYgKCFuZXRpZl9jYXJyaWVyX29rKGFkYXB0ZXItPm5ldGRldikpIHsKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykgeworCQkJc3RydWN0IGl4Z2JlX3JpbmcgKnR4X3JpbmcgPSBhZGFwdGVyLT50eF9yaW5nW2ldOworCQkJaWYgKHR4X3JpbmctPm5leHRfdG9fdXNlICE9IHR4X3JpbmctPm5leHRfdG9fY2xlYW4pIHsKKwkJCQlzb21lX3R4X3BlbmRpbmcgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKHNvbWVfdHhfcGVuZGluZykgeworCQkJLyogV2UndmUgbG9zdCBsaW5rLCBzbyB0aGUgY29udHJvbGxlciBzdG9wcyBETUEsCisJCQkgKiBidXQgd2UndmUgZ290IHF1ZXVlZCBUeCB3b3JrIHRoYXQncyBuZXZlciBnb2luZworCQkJICogdG8gZ2V0IGRvbmUsIHNvIHJlc2V0IGNvbnRyb2xsZXIgdG8gZmx1c2ggVHguCisJCQkgKiAoRG8gdGhlIHJlc2V0IG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQpLgorCQkJICovCisJCQlhZGFwdGVyLT5mbGFnczIgfD0gSVhHQkVfRkxBRzJfUkVTRVRfUkVRVUVTVEVEOworCQl9CisJfQogfQogCiBzdGF0aWMgdm9pZCBpeGdiZV9zcG9vZl9jaGVjayhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKQEAgLTYxMjQsMTMzICs2MjIyLDE4NiBAQAogCWVfd2FybihkcnYsICIlZCBTcG9vZmVkIHBhY2tldHMgZGV0ZWN0ZWRcbiIsIHNzdnBjKTsKIH0KIAotc3RhdGljIERFRklORV9NVVRFWChpeGdiZV93YXRjaGRvZ19sb2NrKTsKLQogLyoqCi0gKiBpeGdiZV93YXRjaGRvZ190YXNrIC0gd29ya2VyIHRocmVhZCB0byBicmluZyBsaW5rIHVwCi0gKiBAd29yazogcG9pbnRlciB0byB3b3JrX3N0cnVjdCBjb250YWluaW5nIG91ciBkYXRhCisgKiBpeGdiZV93YXRjaGRvZ19zdWJ0YXNrIC0gY2hlY2sgYW5kIGJyaW5nIGxpbmsgdXAKKyAqIEBhZGFwdGVyIC0gcG9pbnRlciB0byB0aGUgZGV2aWNlIGFkYXB0ZXIgc3RydWN0dXJlCiAgKiovCi1zdGF0aWMgdm9pZCBpeGdiZV93YXRjaGRvZ190YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3N0YXRpYyB2b2lkIGl4Z2JlX3dhdGNoZG9nX3N1YnRhc2soc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjb250YWluZXJfb2Yod29yaywKLQkJCQkJCSAgICAgc3RydWN0IGl4Z2JlX2FkYXB0ZXIsCi0JCQkJCQkgICAgIHdhdGNoZG9nX3Rhc2spOwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0Jc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQl1MzIgbGlua19zcGVlZDsKLQlib29sIGxpbmtfdXA7Ci0JaW50IGk7Ci0Jc3RydWN0IGl4Z2JlX3JpbmcgKnR4X3Jpbmc7Ci0JaW50IHNvbWVfdHhfcGVuZGluZyA9IDA7CisJLyogaWYgaW50ZXJmYWNlIGlzIGRvd24gZG8gbm90aGluZyAqLworCWlmICh0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCXJldHVybjsKIAotCW11dGV4X2xvY2soJml4Z2JlX3dhdGNoZG9nX2xvY2spOworCWl4Z2JlX3dhdGNoZG9nX3VwZGF0ZV9saW5rKGFkYXB0ZXIpOwogCi0JbGlua191cCA9IGFkYXB0ZXItPmxpbmtfdXA7Ci0JbGlua19zcGVlZCA9IGFkYXB0ZXItPmxpbmtfc3BlZWQ7Ci0KLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX05FRURfTElOS19VUERBVEUpIHsKLQkJaHctPm1hYy5vcHMuY2hlY2tfbGluayhodywgJmxpbmtfc3BlZWQsICZsaW5rX3VwLCBmYWxzZSk7Ci0JCWlmIChsaW5rX3VwKSB7Ci0jaWZkZWYgQ09ORklHX0RDQgotCQkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkgewotCQkJCWZvciAoaSA9IDA7IGkgPCBNQVhfVFJBRkZJQ19DTEFTUzsgaSsrKQotCQkJCQlody0+bWFjLm9wcy5mY19lbmFibGUoaHcsIGkpOwotCQkJfSBlbHNlIHsKLQkJCQlody0+bWFjLm9wcy5mY19lbmFibGUoaHcsIDApOwotCQkJfQotI2Vsc2UKLQkJCWh3LT5tYWMub3BzLmZjX2VuYWJsZShodywgMCk7Ci0jZW5kaWYKLQkJfQotCi0JCWlmIChsaW5rX3VwIHx8Ci0JCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIChhZGFwdGVyLT5saW5rX2NoZWNrX3RpbWVvdXQgKwotCQkJCQkgSVhHQkVfVFJZX0xJTktfVElNRU9VVCkpKSB7Ci0JCQlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19ORUVEX0xJTktfVVBEQVRFOwotCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSU1TLCBJWEdCRV9FSU1DX0xTQyk7Ci0JCX0KLQkJYWRhcHRlci0+bGlua191cCA9IGxpbmtfdXA7Ci0JCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSBsaW5rX3NwZWVkOwotCX0KLQotCWlmIChsaW5rX3VwKSB7Ci0JCWlmICghbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7Ci0JCQlib29sIGZsb3dfcngsIGZsb3dfdHg7Ci0KLQkJCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7Ci0JCQljYXNlIGl4Z2JlX21hY184MjU5OEVCOiB7Ci0JCQkJdTMyIGZyY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZDVFJMKTsKLQkJCQl1MzIgcm1jcyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9STUNTKTsKLQkJCQlmbG93X3J4ID0gISEoZnJjdGwgJiBJWEdCRV9GQ1RSTF9SRkNFKTsKLQkJCQlmbG93X3R4ID0gISEocm1jcyAmIElYR0JFX1JNQ1NfVEZDRV84MDJfM1gpOwotCQkJfQotCQkJCWJyZWFrOwotCQkJY2FzZSBpeGdiZV9tYWNfODI1OTlFQjoKLQkJCWNhc2UgaXhnYmVfbWFjX1g1NDA6IHsKLQkJCQl1MzIgbWZsY24gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTUZMQ04pOwotCQkJCXUzMiBmY2NmZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ0NGRyk7Ci0JCQkJZmxvd19yeCA9ICEhKG1mbGNuICYgSVhHQkVfTUZMQ05fUkZDRSk7Ci0JCQkJZmxvd190eCA9ICEhKGZjY2ZnICYgSVhHQkVfRkNDRkdfVEZDRV84MDJfM1gpOwotCQkJfQotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlmbG93X3R4ID0gZmFsc2U7Ci0JCQkJZmxvd19yeCA9IGZhbHNlOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQllX2luZm8oZHJ2LCAiTklDIExpbmsgaXMgVXAgJXMsIEZsb3cgQ29udHJvbDogJXNcbiIsCi0JCQkgICAgICAgKGxpbmtfc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEwgPwotCQkJICAgICAgICIxMCBHYnBzIiA6Ci0JCQkgICAgICAgKGxpbmtfc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCA/Ci0JCQkgICAgICAgIjEgR2JwcyIgOgotCQkJICAgICAgIChsaW5rX3NwZWVkID09IElYR0JFX0xJTktfU1BFRURfMTAwX0ZVTEwgPwotCQkJICAgICAgICIxMDAgTWJwcyIgOgotCQkJICAgICAgICJ1bmtub3duIHNwZWVkIikpKSwKLQkJCSAgICAgICAoKGZsb3dfcnggJiYgZmxvd190eCkgPyAiUlgvVFgiIDoKLQkJCSAgICAgICAoZmxvd19yeCA/ICJSWCIgOgotCQkJICAgICAgIChmbG93X3R4ID8gIlRYIiA6ICJOb25lIikpKSk7Ci0KLQkJCW5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTsKLQkJCWl4Z2JlX2NoZWNrX3ZmX3JhdGVfbGltaXQoYWRhcHRlcik7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBGb3JjZSBkZXRlY3Rpb24gb2YgaHVuZyBjb250cm9sbGVyICovCi0JCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7Ci0JCQkJdHhfcmluZyA9IGFkYXB0ZXItPnR4X3JpbmdbaV07Ci0JCQkJc2V0X2NoZWNrX2Zvcl90eF9oYW5nKHR4X3JpbmcpOwotCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJYWRhcHRlci0+bGlua191cCA9IGZhbHNlOwotCQlhZGFwdGVyLT5saW5rX3NwZWVkID0gMDsKLQkJaWYgKG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgewotCQkJZV9pbmZvKGRydiwgIk5JQyBMaW5rIGlzIERvd25cbiIpOwotCQkJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKLQkJfQotCX0KLQotCWlmICghbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKLQkJCXR4X3JpbmcgPSBhZGFwdGVyLT50eF9yaW5nW2ldOwotCQkJaWYgKHR4X3JpbmctPm5leHRfdG9fdXNlICE9IHR4X3JpbmctPm5leHRfdG9fY2xlYW4pIHsKLQkJCQlzb21lX3R4X3BlbmRpbmcgPSAxOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJaWYgKHNvbWVfdHhfcGVuZGluZykgewotCQkJLyogV2UndmUgbG9zdCBsaW5rLCBzbyB0aGUgY29udHJvbGxlciBzdG9wcyBETUEsCi0JCQkgKiBidXQgd2UndmUgZ290IHF1ZXVlZCBUeCB3b3JrIHRoYXQncyBuZXZlciBnb2luZwotCQkJICogdG8gZ2V0IGRvbmUsIHNvIHJlc2V0IGNvbnRyb2xsZXIgdG8gZmx1c2ggVHguCi0JCQkgKiAoRG8gdGhlIHJlc2V0IG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQpLgotCQkJICovCi0JCQkgc2NoZWR1bGVfd29yaygmYWRhcHRlci0+cmVzZXRfdGFzayk7Ci0JCX0KLQl9CisJaWYgKGFkYXB0ZXItPmxpbmtfdXApCisJCWl4Z2JlX3dhdGNoZG9nX2xpbmtfaXNfdXAoYWRhcHRlcik7CisJZWxzZQorCQlpeGdiZV93YXRjaGRvZ19saW5rX2lzX2Rvd24oYWRhcHRlcik7CiAKIAlpeGdiZV9zcG9vZl9jaGVjayhhZGFwdGVyKTsKIAlpeGdiZV91cGRhdGVfc3RhdHMoYWRhcHRlcik7Ci0JbXV0ZXhfdW5sb2NrKCZpeGdiZV93YXRjaGRvZ19sb2NrKTsKKworCWl4Z2JlX3dhdGNoZG9nX2ZsdXNoX3R4KGFkYXB0ZXIpOworfQorCisvKioKKyAqIGl4Z2JlX3NmcF9kZXRlY3Rpb25fc3VidGFzayAtIHBvbGwgZm9yIFNGUCsgY2FibGUKKyAqIEBhZGFwdGVyIC0gdGhlIGl4Z2JlIGFkYXB0ZXIgc3RydWN0dXJlCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZV9zZnBfZGV0ZWN0aW9uX3N1YnRhc2soc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzMzIgZXJyOworCisJLyogbm90IHNlYXJjaGluZyBmb3IgU0ZQIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8gaGVyZSAqLworCWlmICghKGFkYXB0ZXItPmZsYWdzMiAmIElYR0JFX0ZMQUcyX1NFQVJDSF9GT1JfU0ZQKSAmJgorCSAgICAhKGFkYXB0ZXItPmZsYWdzMiAmIElYR0JFX0ZMQUcyX1NGUF9ORUVEU19SRVNFVCkpCisJCXJldHVybjsKKworCS8qIHNvbWVvbmUgZWxzZSBpcyBpbiBpbml0LCB3YWl0IHVudGlsIG5leHQgc2VydmljZSBldmVudCAqLworCWlmICh0ZXN0X2FuZF9zZXRfYml0KF9fSVhHQkVfSU5fU0ZQX0lOSVQsICZhZGFwdGVyLT5zdGF0ZSkpCisJCXJldHVybjsKKworCWVyciA9IGh3LT5waHkub3BzLmlkZW50aWZ5X3NmcChodyk7CisJaWYgKGVyciA9PSBJWEdCRV9FUlJfU0ZQX05PVF9TVVBQT1JURUQpCisJCWdvdG8gc2ZwX291dDsKKworCWlmIChlcnIgPT0gSVhHQkVfRVJSX1NGUF9OT1RfUFJFU0VOVCkgeworCQkvKiBJZiBubyBjYWJsZSBpcyBwcmVzZW50LCB0aGVuIHdlIG5lZWQgdG8gcmVzZXQKKwkJICogdGhlIG5leHQgdGltZSB3ZSBmaW5kIGEgZ29vZCBjYWJsZS4gKi8KKwkJYWRhcHRlci0+ZmxhZ3MyIHw9IElYR0JFX0ZMQUcyX1NGUF9ORUVEU19SRVNFVDsKKwl9CisKKwkvKiBleGl0IG9uIGVycm9yICovCisJaWYgKGVycikKKwkJZ290byBzZnBfb3V0OworCisJLyogZXhpdCBpZiByZXNldCBub3QgbmVlZGVkICovCisJaWYgKCEoYWRhcHRlci0+ZmxhZ3MyICYgSVhHQkVfRkxBRzJfU0ZQX05FRURTX1JFU0VUKSkKKwkJZ290byBzZnBfb3V0OworCisJYWRhcHRlci0+ZmxhZ3MyICY9IH5JWEdCRV9GTEFHMl9TRlBfTkVFRFNfUkVTRVQ7CisKKwkvKgorCSAqIEEgbW9kdWxlIG1heSBiZSBpZGVudGlmaWVkIGNvcnJlY3RseSwgYnV0IHRoZSBFRVBST00gbWF5IG5vdCBoYXZlCisJICogc3VwcG9ydCBmb3IgdGhhdCBtb2R1bGUuICBzZXR1cF9zZnAoKSB3aWxsIGZhaWwgaW4gdGhhdCBjYXNlLCBzbworCSAqIHdlIHNob3VsZCBub3QgYWxsb3cgdGhhdCBtb2R1bGUgdG8gbG9hZC4KKwkgKi8KKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQorCQllcnIgPSBody0+cGh5Lm9wcy5yZXNldChodyk7CisJZWxzZQorCQllcnIgPSBody0+bWFjLm9wcy5zZXR1cF9zZnAoaHcpOworCisJaWYgKGVyciA9PSBJWEdCRV9FUlJfU0ZQX05PVF9TVVBQT1JURUQpCisJCWdvdG8gc2ZwX291dDsKKworCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfTkVFRF9MSU5LX0NPTkZJRzsKKwllX2luZm8ocHJvYmUsICJkZXRlY3RlZCBTRlArOiAlZFxuIiwgaHctPnBoeS5zZnBfdHlwZSk7CisKK3NmcF9vdXQ6CisJY2xlYXJfYml0KF9fSVhHQkVfSU5fU0ZQX0lOSVQsICZhZGFwdGVyLT5zdGF0ZSk7CisKKwlpZiAoKGVyciA9PSBJWEdCRV9FUlJfU0ZQX05PVF9TVVBQT1JURUQpICYmCisJICAgIChhZGFwdGVyLT5uZXRkZXYtPnJlZ19zdGF0ZSA9PSBORVRSRUdfUkVHSVNURVJFRCkpIHsKKwkJZV9kZXZfZXJyKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBiZWNhdXNlIGFuIHVuc3VwcG9ydGVkICIKKwkJCSAgIlNGUCsgbW9kdWxlIHR5cGUgd2FzIGRldGVjdGVkLlxuIik7CisJCWVfZGV2X2VycigiUmVsb2FkIHRoZSBkcml2ZXIgYWZ0ZXIgaW5zdGFsbGluZyBhICIKKwkJCSAgInN1cHBvcnRlZCBtb2R1bGUuXG4iKTsKKwkJdW5yZWdpc3Rlcl9uZXRkZXYoYWRhcHRlci0+bmV0ZGV2KTsKKwl9Cit9CisKKy8qKgorICogaXhnYmVfc2ZwX2xpbmtfY29uZmlnX3N1YnRhc2sgLSBzZXQgdXAgbGluayBTRlAgYWZ0ZXIgbW9kdWxlIGluc3RhbGwKKyAqIEBhZGFwdGVyIC0gdGhlIGl4Z2JlIGFkYXB0ZXIgc3RydWN0dXJlCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZV9zZnBfbGlua19jb25maWdfc3VidGFzayhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiBhdXRvbmVnOworCWJvb2wgbmVnb3RpYXRpb247CisKKwlpZiAoIShhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfTkVFRF9MSU5LX0NPTkZJRykpCisJCXJldHVybjsKKworCS8qIHNvbWVvbmUgZWxzZSBpcyBpbiBpbml0LCB3YWl0IHVudGlsIG5leHQgc2VydmljZSBldmVudCAqLworCWlmICh0ZXN0X2FuZF9zZXRfYml0KF9fSVhHQkVfSU5fU0ZQX0lOSVQsICZhZGFwdGVyLT5zdGF0ZSkpCisJCXJldHVybjsKKworCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX05FRURfTElOS19DT05GSUc7CisKKwlhdXRvbmVnID0gaHctPnBoeS5hdXRvbmVnX2FkdmVydGlzZWQ7CisJaWYgKCghYXV0b25lZykgJiYgKGh3LT5tYWMub3BzLmdldF9saW5rX2NhcGFiaWxpdGllcykpCisJCWh3LT5tYWMub3BzLmdldF9saW5rX2NhcGFiaWxpdGllcyhodywgJmF1dG9uZWcsICZuZWdvdGlhdGlvbik7CisJaHctPm1hYy5hdXRvdHJ5X3Jlc3RhcnQgPSBmYWxzZTsKKwlpZiAoaHctPm1hYy5vcHMuc2V0dXBfbGluaykKKwkJaHctPm1hYy5vcHMuc2V0dXBfbGluayhodywgYXV0b25lZywgbmVnb3RpYXRpb24sIHRydWUpOworCisJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19ORUVEX0xJTktfVVBEQVRFOworCWFkYXB0ZXItPmxpbmtfY2hlY2tfdGltZW91dCA9IGppZmZpZXM7CisJY2xlYXJfYml0KF9fSVhHQkVfSU5fU0ZQX0lOSVQsICZhZGFwdGVyLT5zdGF0ZSk7Cit9CisKKy8qKgorICogaXhnYmVfc2VydmljZV90aW1lciAtIFRpbWVyIENhbGwtYmFjaworICogQGRhdGE6IHBvaW50ZXIgdG8gYWRhcHRlciBjYXN0IGludG8gYW4gdW5zaWduZWQgbG9uZworICoqLworc3RhdGljIHZvaWQgaXhnYmVfc2VydmljZV90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKilkYXRhOworCXVuc2lnbmVkIGxvbmcgbmV4dF9ldmVudF9vZmZzZXQ7CisKKwkvKiBwb2xsIGZhc3RlciB3aGVuIHdhaXRpbmcgZm9yIGxpbmsgKi8KKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX05FRURfTElOS19VUERBVEUpCisJCW5leHRfZXZlbnRfb2Zmc2V0ID0gSFogLyAxMDsKKwllbHNlCisJCW5leHRfZXZlbnRfb2Zmc2V0ID0gSFogKiAyOworCisJLyogUmVzZXQgdGhlIHRpbWVyICovCisJbW9kX3RpbWVyKCZhZGFwdGVyLT5zZXJ2aWNlX3RpbWVyLCBuZXh0X2V2ZW50X29mZnNldCArIGppZmZpZXMpOworCisJaXhnYmVfc2VydmljZV9ldmVudF9zY2hlZHVsZShhZGFwdGVyKTsKK30KKworc3RhdGljIHZvaWQgaXhnYmVfcmVzZXRfc3VidGFzayhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoIShhZGFwdGVyLT5mbGFnczIgJiBJWEdCRV9GTEFHMl9SRVNFVF9SRVFVRVNURUQpKQorCQlyZXR1cm47CisKKwlhZGFwdGVyLT5mbGFnczIgJj0gfklYR0JFX0ZMQUcyX1JFU0VUX1JFUVVFU1RFRDsKKworCS8qIElmIHdlJ3JlIGFscmVhZHkgZG93biBvciByZXNldHRpbmcsIGp1c3QgYmFpbCAqLworCWlmICh0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkgfHwKKwkgICAgdGVzdF9iaXQoX19JWEdCRV9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCisJCXJldHVybjsKKworCWl4Z2JlX2R1bXAoYWRhcHRlcik7CisJbmV0ZGV2X2VycihhZGFwdGVyLT5uZXRkZXYsICJSZXNldCBhZGFwdGVyXG4iKTsKKwlhZGFwdGVyLT50eF90aW1lb3V0X2NvdW50Kys7CisKKwlpeGdiZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpOworfQorCisvKioKKyAqIGl4Z2JlX3NlcnZpY2VfdGFzayAtIG1hbmFnZXMgYW5kIHJ1bnMgc3VidGFza3MKKyAqIEB3b3JrOiBwb2ludGVyIHRvIHdvcmtfc3RydWN0IGNvbnRhaW5pbmcgb3VyIGRhdGEKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjb250YWluZXJfb2Yod29yaywKKwkJCQkJCSAgICAgc3RydWN0IGl4Z2JlX2FkYXB0ZXIsCisJCQkJCQkgICAgIHNlcnZpY2VfdGFzayk7CisKKwlpeGdiZV9yZXNldF9zdWJ0YXNrKGFkYXB0ZXIpOworCWl4Z2JlX3NmcF9kZXRlY3Rpb25fc3VidGFzayhhZGFwdGVyKTsKKwlpeGdiZV9zZnBfbGlua19jb25maWdfc3VidGFzayhhZGFwdGVyKTsKKwlpeGdiZV9jaGVja19vdmVydGVtcF9zdWJ0YXNrKGFkYXB0ZXIpOworCWl4Z2JlX3dhdGNoZG9nX3N1YnRhc2soYWRhcHRlcik7CisJaXhnYmVfZmRpcl9yZWluaXRfc3VidGFzayhhZGFwdGVyKTsKKwlpeGdiZV9jaGVja19oYW5nX3N1YnRhc2soYWRhcHRlcik7CisKKwlpeGdiZV9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKGFkYXB0ZXIpOwogfQogCiBzdGF0aWMgaW50IGl4Z2JlX3RzbyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwKQEAgLTcwODksNiArNzI0MCw4IEBACiAjaWZkZWYgQ09ORklHX1BDSV9JT1YKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCWludCBlcnI7CisJaW50IG51bV92Zl9tYWN2bGFucywgaTsKKwlzdHJ1Y3QgdmZfbWFjdmxhbnMgKm12X2xpc3Q7CiAKIAlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCIHx8ICFtYXhfdmZzKQogCQlyZXR1cm47CkBAIC03MTA1LDYgKzcyNTgsMjYgQEAKIAkJZV9lcnIocHJvYmUsICJGYWlsZWQgdG8gZW5hYmxlIFBDSSBzcmlvdjogJWRcbiIsIGVycik7CiAJCWdvdG8gZXJyX25vdmZzOwogCX0KKworCW51bV92Zl9tYWN2bGFucyA9IGh3LT5tYWMubnVtX3Jhcl9lbnRyaWVzIC0KKwkJKElYR0JFX01BWF9QRl9NQUNWTEFOUyArIDEgKyBhZGFwdGVyLT5udW1fdmZzKTsKKworCWFkYXB0ZXItPm12X2xpc3QgPSBtdl9saXN0ID0ga2NhbGxvYyhudW1fdmZfbWFjdmxhbnMsCisJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCB2Zl9tYWN2bGFucyksCisJCQkJCSAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKG12X2xpc3QpIHsKKwkJLyogSW5pdGlhbGl6ZSBsaXN0IG9mIFZGIG1hY3ZsYW5zICovCisJCUlOSVRfTElTVF9IRUFEKCZhZGFwdGVyLT52Zl9tdnMubCk7CisJCWZvciAoaSA9IDA7IGkgPCBudW1fdmZfbWFjdmxhbnM7IGkrKykgeworCQkJbXZfbGlzdC0+dmYgPSAtMTsKKwkJCW12X2xpc3QtPmZyZWUgPSB0cnVlOworCQkJbXZfbGlzdC0+cmFyX2VudHJ5ID0gaHctPm1hYy5udW1fcmFyX2VudHJpZXMgLQorCQkJCShpICsgYWRhcHRlci0+bnVtX3ZmcyArIDEpOworCQkJbGlzdF9hZGQoJm12X2xpc3QtPmwsICZhZGFwdGVyLT52Zl9tdnMubCk7CisJCQltdl9saXN0Kys7CisJCX0KKwl9CisKIAkvKiBJZiBjYWxsIHRvIGVuYWJsZSBWRnMgc3VjY2VlZGVkIHRoZW4gYWxsb2NhdGUgbWVtb3J5CiAJICogZm9yIHBlciBWRiBjb250cm9sIHN0cnVjdHVyZXMuCiAJICovCkBAIC03Mjc1LDIyICs3NDQ4LDYgQEAKIAlody0+cGh5Lm1kaW8ubWRpb19yZWFkID0gaXhnYmVfbWRpb19yZWFkOwogCWh3LT5waHkubWRpby5tZGlvX3dyaXRlID0gaXhnYmVfbWRpb193cml0ZTsKIAotCS8qIHNldCB1cCB0aGlzIHRpbWVyIGFuZCB3b3JrIHN0cnVjdCBiZWZvcmUgY2FsbGluZyBnZXRfaW52YXJpYW50cwotCSAqIHdoaWNoIG1pZ2h0IHN0YXJ0IHRoZSB0aW1lcgotCSAqLwotCWluaXRfdGltZXIoJmFkYXB0ZXItPnNmcF90aW1lcik7Ci0JYWRhcHRlci0+c2ZwX3RpbWVyLmZ1bmN0aW9uID0gaXhnYmVfc2ZwX3RpbWVyOwotCWFkYXB0ZXItPnNmcF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGFkYXB0ZXI7Ci0KLQlJTklUX1dPUksoJmFkYXB0ZXItPnNmcF90YXNrLCBpeGdiZV9zZnBfdGFzayk7Ci0KLQkvKiBtdWx0aXNwZWVkIGZpYmVyIGhhcyBpdHMgb3duIHRhc2tsZXQsIGNhbGxlZCBmcm9tIEdQSSBTRFAxIGNvbnRleHQgKi8KLQlJTklUX1dPUksoJmFkYXB0ZXItPm11bHRpc3BlZWRfZmliZXJfdGFzaywgaXhnYmVfbXVsdGlzcGVlZF9maWJlcl90YXNrKTsKLQotCS8qIGEgbmV3IFNGUCsgbW9kdWxlIGFycml2YWwsIGNhbGxlZCBmcm9tIEdQSSBTRFAyIGNvbnRleHQgKi8KLQlJTklUX1dPUksoJmFkYXB0ZXItPnNmcF9jb25maWdfbW9kdWxlX3Rhc2ssCi0JCSAgaXhnYmVfc2ZwX2NvbmZpZ19tb2R1bGVfdGFzayk7Ci0KIAlpaS0+Z2V0X2ludmFyaWFudHMoaHcpOwogCiAJLyogc2V0dXAgdGhlIHByaXZhdGUgc3RydWN0dXJlICovCkBAIC03MzI0LDE3ICs3NDgxLDkgQEAKIAlody0+cGh5LnJlc2V0X2lmX292ZXJ0ZW1wID0gZmFsc2U7CiAJaWYgKGVyciA9PSBJWEdCRV9FUlJfU0ZQX05PVF9QUkVTRU5UICYmCiAJICAgIGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikgewotCQkvKgotCQkgKiBTdGFydCBhIGtlcm5lbCB0aHJlYWQgdG8gd2F0Y2ggZm9yIGEgbW9kdWxlIHRvIGFycml2ZS4KLQkJICogT25seSBkbyB0aGlzIGZvciA4MjU5OCwgc2luY2UgODI1OTkgd2lsbCBnZW5lcmF0ZQotCQkgKiBpbnRlcnJ1cHRzIG9uIG1vZHVsZSBhcnJpdmFsLgotCQkgKi8KLQkJc2V0X2JpdChfX0lYR0JFX1NGUF9NT0RVTEVfTk9UX0ZPVU5ELCAmYWRhcHRlci0+c3RhdGUpOwotCQltb2RfdGltZXIoJmFkYXB0ZXItPnNmcF90aW1lciwKLQkJCSAgcm91bmRfamlmZmllcyhqaWZmaWVzICsgKDIgKiBIWikpKTsKIAkJZXJyID0gMDsKIAl9IGVsc2UgaWYgKGVyciA9PSBJWEdCRV9FUlJfU0ZQX05PVF9TVVBQT1JURUQpIHsKLQkJZV9kZXZfZXJyKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBiZWNhdXNlIGFuIHVuc3VwcG9ydGVkIFNGUCsgIgorCQllX2Rldl9lcnIoImZhaWxlZCB0byBsb2FkIGJlY2F1c2UgYW4gdW5zdXBwb3J0ZWQgU0ZQKyAiCiAJCQkgICJtb2R1bGUgdHlwZSB3YXMgZGV0ZWN0ZWQuXG4iKTsKIAkJZV9kZXZfZXJyKCJSZWxvYWQgdGhlIGRyaXZlciBhZnRlciBpbnN0YWxsaW5nIGEgc3VwcG9ydGVkICIKIAkJCSAgIm1vZHVsZS5cbiIpOwpAQCAtNzM1Niw5ICs3NTA1LDE2IEBACiAJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKIAluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKIAluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfR1JPOworCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9SWEhBU0g7CiAKLQlpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJc3dpdGNoIChhZGFwdGVyLT5ody5tYWMudHlwZSkgeworCWNhc2UgaXhnYmVfbWFjXzgyNTk5RUI6CisJY2FzZSBpeGdiZV9tYWNfWDU0MDoKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NDVFBfQ1NVTTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQogCiAJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7CkBAIC03NDE5LDE3ICs3NTc1LDE5IEBACiAJICAgICAgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikpKSkKIAkJaHctPm1hYy5vcHMuZGlzYWJsZV90eF9sYXNlcihodyk7CiAKLQlpbml0X3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lcik7Ci0JYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIuZnVuY3Rpb24gPSBpeGdiZV93YXRjaGRvZzsKLQlhZGFwdGVyLT53YXRjaGRvZ190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpYWRhcHRlcjsKKwlzZXR1cF90aW1lcigmYWRhcHRlci0+c2VydmljZV90aW1lciwgJml4Z2JlX3NlcnZpY2VfdGltZXIsCisJICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIGFkYXB0ZXIpOwogCi0JSU5JVF9XT1JLKCZhZGFwdGVyLT5yZXNldF90YXNrLCBpeGdiZV9yZXNldF90YXNrKTsKLQlJTklUX1dPUksoJmFkYXB0ZXItPndhdGNoZG9nX3Rhc2ssIGl4Z2JlX3dhdGNoZG9nX3Rhc2spOworCUlOSVRfV09SSygmYWRhcHRlci0+c2VydmljZV90YXNrLCBpeGdiZV9zZXJ2aWNlX3Rhc2spOworCWNsZWFyX2JpdChfX0lYR0JFX1NFUlZJQ0VfU0NIRUQsICZhZGFwdGVyLT5zdGF0ZSk7CiAKIAllcnIgPSBpeGdiZV9pbml0X2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7CiAJaWYgKGVycikKIAkJZ290byBlcnJfc3dfaW5pdDsKIAorCWlmICghKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SU1NfRU5BQkxFRCkpCisJCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfUlhIQVNIOworCiAJc3dpdGNoIChwZGV2LT5kZXZpY2UpIHsKIAljYXNlIElYR0JFX0RFVl9JRF84MjU5OV9TRlA6CiAJCS8qIE9ubHkgdGhpcyBzdWJkZXZpY2Ugc3VwcG9ydHMgV09MICovCkBAIC03NDU4LDggKzc2MTYsOCBAQAogCiAJLyogcHJpbnQgYnVzIHR5cGUvc3BlZWQvd2lkdGggaW5mbyAqLwogCWVfZGV2X2luZm8oIihQQ0kgRXhwcmVzczolczolcykgJXBNXG4iLAotCQkgICAoaHctPmJ1cy5zcGVlZCA9PSBpeGdiZV9idXNfc3BlZWRfNTAwMCA/ICI1LjBHYi9zIiA6Ci0JCSAgICBody0+YnVzLnNwZWVkID09IGl4Z2JlX2J1c19zcGVlZF8yNTAwID8gIjIuNUdiL3MiIDoKKwkJICAgKGh3LT5idXMuc3BlZWQgPT0gaXhnYmVfYnVzX3NwZWVkXzUwMDAgPyAiNS4wR1QvcyIgOgorCQkgICAgaHctPmJ1cy5zcGVlZCA9PSBpeGdiZV9idXNfc3BlZWRfMjUwMCA/ICIyLjVHVC9zIiA6CiAJCSAgICAiVW5rbm93biIpLAogCQkgICAoaHctPmJ1cy53aWR0aCA9PSBpeGdiZV9idXNfd2lkdGhfcGNpZV94OCA/ICJXaWR0aCB4OCIgOgogCQkgICAgaHctPmJ1cy53aWR0aCA9PSBpeGdiZV9idXNfd2lkdGhfcGNpZV94NCA/ICJXaWR0aCB4NCIgOgpAQCAtNzUwOCwxMyArNzY2Niw2IEBACiAJLyogY2FycmllciBvZmYgcmVwb3J0aW5nIGlzIGltcG9ydGFudCB0byBldGh0b29sIGV2ZW4gQkVGT1JFIG9wZW4gKi8KIAluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCi0JaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GRElSX0hBU0hfQ0FQQUJMRSB8fAotCSAgICBhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkRJUl9QRVJGRUNUX0NBUEFCTEUpCi0JCUlOSVRfV09SSygmYWRhcHRlci0+ZmRpcl9yZWluaXRfdGFzaywgaXhnYmVfZmRpcl9yZWluaXRfdGFzayk7Ci0KLQlpZiAoYWRhcHRlci0+ZmxhZ3MyICYgSVhHQkVfRkxBRzJfVEVNUF9TRU5TT1JfQ0FQQUJMRSkKLQkJSU5JVF9XT1JLKCZhZGFwdGVyLT5jaGVja19vdmVydGVtcF90YXNrLAotCQkJICBpeGdiZV9jaGVja19vdmVydGVtcF90YXNrKTsKICNpZmRlZiBDT05GSUdfSVhHQkVfRENBCiAJaWYgKGRjYV9hZGRfcmVxdWVzdGVyKCZwZGV2LT5kZXYpID09IDApIHsKIAkJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19EQ0FfRU5BQkxFRDsKQEAgLTc1NDEsMTEgKzc2OTIsNyBAQAogZXJyX2VlcHJvbToKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1NSSU9WX0VOQUJMRUQpCiAJCWl4Z2JlX2Rpc2FibGVfc3Jpb3YoYWRhcHRlcik7Ci0JY2xlYXJfYml0KF9fSVhHQkVfU0ZQX01PRFVMRV9OT1RfRk9VTkQsICZhZGFwdGVyLT5zdGF0ZSk7Ci0JZGVsX3RpbWVyX3N5bmMoJmFkYXB0ZXItPnNmcF90aW1lcik7Ci0JY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+c2ZwX3Rhc2spOwotCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPm11bHRpc3BlZWRfZmliZXJfdGFzayk7Ci0JY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+c2ZwX2NvbmZpZ19tb2R1bGVfdGFzayk7CisJYWRhcHRlci0+ZmxhZ3MyICY9IH5JWEdCRV9GTEFHMl9TRUFSQ0hfRk9SX1NGUDsKIAlpb3VubWFwKGh3LT5od19hZGRyKTsKIGVycl9pb3JlbWFwOgogCWZyZWVfbmV0ZGV2KG5ldGRldik7CkBAIC03NTczLDI0ICs3NzIwLDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCiAJc2V0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSk7Ci0KLQkvKgotCSAqIFRoZSB0aW1lcnMgbWF5IGJlIHJlc2NoZWR1bGVkLCBzbyBleHBsaWNpdGx5IGRpc2FibGUgdGhlbQotCSAqIGZyb20gYmVpbmcgcmVzY2hlZHVsZWQuCi0JICovCi0JY2xlYXJfYml0KF9fSVhHQkVfU0ZQX01PRFVMRV9OT1RfRk9VTkQsICZhZGFwdGVyLT5zdGF0ZSk7Ci0JZGVsX3RpbWVyX3N5bmMoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyKTsKLQlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+c2ZwX3RpbWVyKTsKLQotCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPndhdGNoZG9nX3Rhc2spOwotCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnNmcF90YXNrKTsKLQljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5tdWx0aXNwZWVkX2ZpYmVyX3Rhc2spOwotCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnNmcF9jb25maWdfbW9kdWxlX3Rhc2spOwotCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkRJUl9IQVNIX0NBUEFCTEUgfHwKLQkgICAgYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZESVJfUEVSRkVDVF9DQVBBQkxFKQotCQljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5mZGlyX3JlaW5pdF90YXNrKTsKLQlpZiAoYWRhcHRlci0+ZmxhZ3MyICYgSVhHQkVfRkxBRzJfVEVNUF9TRU5TT1JfQ0FQQUJMRSkKLQkJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+Y2hlY2tfb3ZlcnRlbXBfdGFzayk7CisJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+c2VydmljZV90YXNrKTsKIAogI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQV9FTkFCTEVEKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYnguaCBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21ieC5oCmluZGV4IGZlNmVhODEuLmIyMzliZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21ieC5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21ieC5oCkBAIC0zNiw5ICszNiw2IEBACiAjZGVmaW5lIElYR0JFX1ZGTUFJTEJPWCAgICAgICAgICAgICAweDAwMkZDCiAjZGVmaW5lIElYR0JFX1ZGTUJNRU0gICAgICAgICAgICAgICAweDAwMjAwCiAKLSNkZWZpbmUgSVhHQkVfUEZNQUlMQk9YKHgpICAgICAgICAgICgweDA0QjAwICsgKDQgKiB4KSkKLSNkZWZpbmUgSVhHQkVfUEZNQk1FTSh2Zm4pICAgICAgICAgICgweDEzMDAwICsgKDY0ICogdmZuKSkKLQogI2RlZmluZSBJWEdCRV9QRk1BSUxCT1hfU1RTICAgMHgwMDAwMDAwMSAvKiBJbml0aWF0ZSBtZXNzYWdlIHNlbmQgdG8gVkYgKi8KICNkZWZpbmUgSVhHQkVfUEZNQUlMQk9YX0FDSyAgIDB4MDAwMDAwMDIgLyogQWNrIG1lc3NhZ2UgcmVjdidkIGZyb20gVkYgKi8KICNkZWZpbmUgSVhHQkVfUEZNQUlMQk9YX1ZGVSAgIDB4MDAwMDAwMDQgLyogVkYgb3ducyB0aGUgbWFpbGJveCBidWZmZXIgKi8KQEAgLTcwLDYgKzY3LDcgQEAKICNkZWZpbmUgSVhHQkVfVkZfU0VUX01VTFRJQ0FTVCAgICAweDAzIC8qIFZGIHJlcXVlc3RzIFBGIHRvIHNldCBNQyBhZGRyICovCiAjZGVmaW5lIElYR0JFX1ZGX1NFVF9WTEFOICAgICAgICAgMHgwNCAvKiBWRiByZXF1ZXN0cyBQRiB0byBzZXQgVkxBTiAqLwogI2RlZmluZSBJWEdCRV9WRl9TRVRfTFBFICAgICAgICAgIDB4MDUgLyogVkYgcmVxdWVzdHMgUEYgdG8gc2V0IFZNT0xSLkxQRSAqLworI2RlZmluZSBJWEdCRV9WRl9TRVRfTUFDVkxBTiAgICAgIDB4MDYgLyogVkYgcmVxdWVzdHMgUEYgZm9yIHVuaWNhc3QgZmlsdGVyICovCiAKIC8qIGxlbmd0aCBvZiBwZXJtYW5lbnQgYWRkcmVzcyBtZXNzYWdlIHJldHVybmVkIGZyb20gUEYgKi8KICNkZWZpbmUgSVhHQkVfVkZfUEVSTUFERFJfTVNHX0xFTiA0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9waHkuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3BoeS5jCmluZGV4IGRmNWI4YWEuLjczNWY2ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3BoeS5jCkBAIC00NDksNyArNDQ5LDggQEAKIAkJCQkgICAgIE1ESU9fTU1EX0FOLAogCQkJCSAgICAgJmF1dG9uZWdfcmVnKTsKIAotCQlhdXRvbmVnX3JlZyAmPSB+QURWRVJUSVNFXzEwMEZVTEw7CisJCWF1dG9uZWdfcmVnICY9IH4oQURWRVJUSVNFXzEwMEZVTEwgfAorCQkJCSBBRFZFUlRJU0VfMTAwSEFMRik7CiAJCWlmIChody0+cGh5LmF1dG9uZWdfYWR2ZXJ0aXNlZCAmIElYR0JFX0xJTktfU1BFRURfMTAwX0ZVTEwpCiAJCQlhdXRvbmVnX3JlZyB8PSBBRFZFUlRJU0VfMTAwRlVMTDsKIApAQCAtNjU2LDcgKzY1Nyw4IEBACiAJCQkJICAgICBNRElPX01NRF9BTiwKIAkJCQkgICAgICZhdXRvbmVnX3JlZyk7CiAKLQkJYXV0b25lZ19yZWcgJj0gfkFEVkVSVElTRV8xMDBGVUxMOworCQlhdXRvbmVnX3JlZyAmPSB+KEFEVkVSVElTRV8xMDBGVUxMIHwKKwkJCQkgQURWRVJUSVNFXzEwMEhBTEYpOwogCQlpZiAoaHctPnBoeS5hdXRvbmVnX2FkdmVydGlzZWQgJiBJWEdCRV9MSU5LX1NQRUVEXzEwMF9GVUxMKQogCQkJYXV0b25lZ19yZWcgfD0gQURWRVJUSVNFXzEwMEZVTEw7CiAKQEAgLTc1Myw3ICs3NTUsNyBAQAogCQkgICAgICAgICAgICAgICAgICAgICAmcGh5X2RhdGEpOwogCQlpZiAoKHBoeV9kYXRhICYgTURJT19DVFJMMV9SRVNFVCkgPT0gMCkKIAkJCWJyZWFrOwotCQltc2xlZXAoMTApOworCQl1c2xlZXBfcmFuZ2UoMTAwMDAsIDIwMDAwKTsKIAl9CiAKIAlpZiAoKHBoeV9kYXRhICYgTURJT19DVFJMMV9SRVNFVCkgIT0gMCkgewpAQCAtNzgyLDcgKzc4NCw3IEBACiAJCWNhc2UgSVhHQkVfREVMQVlfTkw6CiAJCQlkYXRhX29mZnNldCsrOwogCQkJaHdfZGJnKGh3LCAiREVMQVk6ICVkIE1TXG4iLCBlZGF0YSk7Ci0JCQltc2xlZXAoZWRhdGEpOworCQkJdXNsZWVwX3JhbmdlKGVkYXRhICogMTAwMCwgZWRhdGEgKiAyMDAwKTsKIAkJCWJyZWFrOwogCQljYXNlIElYR0JFX0RBVEFfTkw6CiAJCQlod19kYmcoaHcsICJEQVRBOlxuIik7CkBAIC0xMjIwLDcgKzEyMjIsNyBAQAogCQlzd2Z3X21hc2sgPSBJWEdCRV9HU1NSX1BIWTBfU007CiAKIAlkbyB7Ci0JCWlmIChpeGdiZV9hY3F1aXJlX3N3Zndfc3luYyhodywgc3dmd19tYXNrKSAhPSAwKSB7CisJCWlmIChody0+bWFjLm9wcy5hY3F1aXJlX3N3Zndfc3luYyhodywgc3dmd19tYXNrKSAhPSAwKSB7CiAJCQlzdGF0dXMgPSBJWEdCRV9FUlJfU1dGV19TWU5DOwogCQkJZ290byByZWFkX2J5dGVfb3V0OwogCQl9CkBAIC0xMjY3LDcgKzEyNjksNyBAQAogCQlicmVhazsKIAogZmFpbDoKLQkJaXhnYmVfcmVsZWFzZV9zd2Z3X3N5bmMoaHcsIHN3ZndfbWFzayk7CisJCWh3LT5tYWMub3BzLnJlbGVhc2Vfc3dmd19zeW5jKGh3LCBzd2Z3X21hc2spOwogCQltc2xlZXAoMTAwKTsKIAkJaXhnYmVfaTJjX2J1c19jbGVhcihodyk7CiAJCXJldHJ5Kys7CkBAIC0xMjc4LDcgKzEyODAsNyBAQAogCiAJfSB3aGlsZSAocmV0cnkgPCBtYXhfcmV0cnkpOwogCi0JaXhnYmVfcmVsZWFzZV9zd2Z3X3N5bmMoaHcsIHN3ZndfbWFzayk7CisJaHctPm1hYy5vcHMucmVsZWFzZV9zd2Z3X3N5bmMoaHcsIHN3ZndfbWFzayk7CiAKIHJlYWRfYnl0ZV9vdXQ6CiAJcmV0dXJuIHN0YXR1czsKQEAgLTEzMDYsNyArMTMwOCw3IEBACiAJZWxzZQogCQlzd2Z3X21hc2sgPSBJWEdCRV9HU1NSX1BIWTBfU007CiAKLQlpZiAoaXhnYmVfYWNxdWlyZV9zd2Z3X3N5bmMoaHcsIHN3ZndfbWFzaykgIT0gMCkgeworCWlmIChody0+bWFjLm9wcy5hY3F1aXJlX3N3Zndfc3luYyhodywgc3dmd19tYXNrKSAhPSAwKSB7CiAJCXN0YXR1cyA9IElYR0JFX0VSUl9TV0ZXX1NZTkM7CiAJCWdvdG8gd3JpdGVfYnl0ZV9vdXQ7CiAJfQpAQCAtMTM1MCw3ICsxMzUyLDcgQEAKIAkJCWh3X2RiZyhodywgIkkyQyBieXRlIHdyaXRlIGVycm9yLlxuIik7CiAJfSB3aGlsZSAocmV0cnkgPCBtYXhfcmV0cnkpOwogCi0JaXhnYmVfcmVsZWFzZV9zd2Z3X3N5bmMoaHcsIHN3ZndfbWFzayk7CisJaHctPm1hYy5vcHMucmVsZWFzZV9zd2Z3X3N5bmMoaHcsIHN3ZndfbWFzayk7CiAKIHdyaXRlX2J5dGVfb3V0OgogCXJldHVybiBzdGF0dXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9zcmlvdi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfc3Jpb3YuYwppbmRleCA2ZTUwZDgzLi5hYzk5YjA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9zcmlvdi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3NyaW92LmMKQEAgLTgyLDYgKzgyLDIxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGl4Z2JlX3Jlc3RvcmVfdmZfbWFjdmxhbnMoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisJc3RydWN0IHZmX21hY3ZsYW5zICplbnRyeTsKKworCWxpc3RfZm9yX2VhY2gocG9zLCAmYWRhcHRlci0+dmZfbXZzLmwpIHsKKwkJZW50cnkgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHZmX21hY3ZsYW5zLCBsKTsKKwkJaWYgKGVudHJ5LT5mcmVlID09IGZhbHNlKQorCQkJaHctPm1hYy5vcHMuc2V0X3JhcihodywgZW50cnktPnJhcl9lbnRyeSwKKwkJCQkJICAgIGVudHJ5LT52Zl9tYWN2bGFuLAorCQkJCQkgICAgZW50cnktPnZmLCBJWEdCRV9SQUhfQVYpOworCX0KK30KKwogdm9pZCBpeGdiZV9yZXN0b3JlX3ZmX211bHRpY2FzdHMoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKQEAgLTEwMiw2ICsxMTcsOSBAQAogCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NVEEodmVjdG9yX3JlZyksIG10YV9yZWcpOwogCQl9CiAJfQorCisJLyogUmVzdG9yZSBhbnkgVkYgbWFjdmxhbnMgKi8KKwlpeGdiZV9yZXN0b3JlX3ZmX21hY3ZsYW5zKGFkYXB0ZXIpOwogfQogCiBzdGF0aWMgaW50IGl4Z2JlX3NldF92Zl92bGFuKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkLCBpbnQgdmlkLApAQCAtMTEwLDcgKzEyOCw3IEBACiAJcmV0dXJuIGFkYXB0ZXItPmh3Lm1hYy5vcHMuc2V0X3ZmdGEoJmFkYXB0ZXItPmh3LCB2aWQsIHZmLCAoYm9vbClhZGQpOwogfQogCi12b2lkIGl4Z2JlX3NldF92Zl9scGUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiAqbXNnYnVmKQorc3RhdGljIHZvaWQgaXhnYmVfc2V0X3ZmX2xwZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyICptc2didWYpCiB7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlpbnQgbmV3X210dSA9IG1zZ2J1ZlsxXTsKQEAgLTIwMCw2ICsyMTgsNjEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBpeGdiZV9zZXRfdmZfbWFjdmxhbihzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwKKwkJCQlpbnQgdmYsIGludCBpbmRleCwgdW5zaWduZWQgY2hhciAqbWFjX2FkZHIpCit7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisJc3RydWN0IHZmX21hY3ZsYW5zICplbnRyeTsKKworCWlmIChpbmRleCA8PSAxKSB7CisJCWxpc3RfZm9yX2VhY2gocG9zLCAmYWRhcHRlci0+dmZfbXZzLmwpIHsKKwkJCWVudHJ5ID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCB2Zl9tYWN2bGFucywgbCk7CisJCQlpZiAoZW50cnktPnZmID09IHZmKSB7CisJCQkJZW50cnktPnZmID0gLTE7CisJCQkJZW50cnktPmZyZWUgPSB0cnVlOworCQkJCWVudHJ5LT5pc19tYWN2bGFuID0gZmFsc2U7CisJCQkJaHctPm1hYy5vcHMuY2xlYXJfcmFyKGh3LCBlbnRyeS0+cmFyX2VudHJ5KTsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogSWYgaW5kZXggd2FzIHplcm8gdGhlbiB3ZSB3ZXJlIGFza2VkIHRvIGNsZWFyIHRoZSB1YyBsaXN0CisJICogZm9yIHRoZSBWRi4gIFdlJ3JlIGRvbmUuCisJICovCisJaWYgKCFpbmRleCkKKwkJcmV0dXJuIDA7CisKKwllbnRyeSA9IE5VTEw7CisKKwlsaXN0X2Zvcl9lYWNoKHBvcywgJmFkYXB0ZXItPnZmX212cy5sKSB7CisJCWVudHJ5ID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCB2Zl9tYWN2bGFucywgbCk7CisJCWlmIChlbnRyeS0+ZnJlZSkKKwkJCWJyZWFrOworCX0KKworCS8qCisJICogSWYgd2UgdHJhdmVyc2VkIHRoZSBlbnRpcmUgbGlzdCBhbmQgZGlkbid0IGZpbmQgYSBmcmVlIGVudHJ5CisJICogdGhlbiB3ZSdyZSBvdXQgb2Ygc3BhY2Ugb24gdGhlIFJBUiB0YWJsZS4gIEFsc28gZW50cnkgbWF5CisJICogYmUgTlVMTCBiZWNhdXNlIHRoZSBvcmlnaW5hbCBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgdGhlIGxpc3QKKwkgKiBmYWlsZWQsIHdoaWNoIGlzIG5vdCBmYXRhbCBidXQgZG9lcyBtZWFuIHdlIGNhbid0IHN1cHBvcnQKKwkgKiBWRiByZXF1ZXN0cyBmb3IgTUFDVkxBTiBiZWNhdXNlIHdlIGNvdWxkbid0IGFsbG9jYXRlCisJICogbWVtb3J5IGZvciB0aGUgbGlzdCBtYW5hZ2VtZW50IHJlcXVpcmVkLgorCSAqLworCWlmICghZW50cnkgfHwgIWVudHJ5LT5mcmVlKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCWVudHJ5LT5mcmVlID0gZmFsc2U7CisJZW50cnktPmlzX21hY3ZsYW4gPSB0cnVlOworCWVudHJ5LT52ZiA9IHZmOworCW1lbWNweShlbnRyeS0+dmZfbWFjdmxhbiwgbWFjX2FkZHIsIEVUSF9BTEVOKTsKKworCWh3LT5tYWMub3BzLnNldF9yYXIoaHcsIGVudHJ5LT5yYXJfZW50cnksIG1hY19hZGRyLCB2ZiwgSVhHQkVfUkFIX0FWKTsKKworCXJldHVybiAwOworfQorCiBpbnQgaXhnYmVfdmZfY29uZmlndXJhdGlvbihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGV2ZW50X21hc2spCiB7CiAJdW5zaWduZWQgY2hhciB2Zl9tYWNfYWRkcls2XTsKQEAgLTI1MSwxMiArMzI0LDEyIEBACiBzdGF0aWMgaW50IGl4Z2JlX3Jjdl9tc2dfZnJvbV92ZihzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIHZmKQogewogCXUzMiBtYnhfc2l6ZSA9IElYR0JFX1ZGTUFJTEJPWF9TSVpFOwotCXUzMiBtc2didWZbbWJ4X3NpemVdOworCXUzMiBtc2didWZbSVhHQkVfVkZNQUlMQk9YX1NJWkVdOwogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJczMyIHJldHZhbDsKIAlpbnQgZW50cmllczsKIAl1MTYgKmhhc2hfbGlzdDsKLQlpbnQgYWRkLCB2aWQ7CisJaW50IGFkZCwgdmlkLCBpbmRleDsKIAl1OCAqbmV3X21hYzsKIAogCXJldHZhbCA9IGl4Z2JlX3JlYWRfbWJ4KGh3LCBtc2didWYsIG1ieF9zaXplLCB2Zik7CkBAIC0zNDUsNiArNDE4LDI0IEBACiAJCQlyZXR2YWwgPSBpeGdiZV9zZXRfdmZfdmxhbihhZGFwdGVyLCBhZGQsIHZpZCwgdmYpOwogCQl9CiAJCWJyZWFrOworCWNhc2UgSVhHQkVfVkZfU0VUX01BQ1ZMQU46CisJCWluZGV4ID0gKG1zZ2J1ZlswXSAmIElYR0JFX1ZUX01TR0lORk9fTUFTSykgPj4KKwkJCUlYR0JFX1ZUX01TR0lORk9fU0hJRlQ7CisJCS8qCisJCSAqIElmIHRoZSBWRiBpcyBhbGxvd2VkIHRvIHNldCBNQUMgZmlsdGVycyB0aGVuIHR1cm4gb2ZmCisJCSAqIGFudGktc3Bvb2ZpbmcgdG8gYXZvaWQgZmFsc2UgcG9zaXRpdmVzLiAgQW4gaW5kZXgKKwkJICogZ3JlYXRlciB0aGFuIDAgd2lsbCBpbmRpY2F0ZSB0aGUgVkYgaXMgc2V0dGluZyBhCisJCSAqIG1hY3ZsYW4gTUFDIGZpbHRlci4KKwkJICovCisJCWlmIChpbmRleCA+IDAgJiYgYWRhcHRlci0+YW50aXNwb29maW5nX2VuYWJsZWQpIHsKKwkJCWh3LT5tYWMub3BzLnNldF9tYWNfYW50aV9zcG9vZmluZyhodywgZmFsc2UsCisJCQkJCQkJICBhZGFwdGVyLT5udW1fdmZzKTsKKwkJCWh3LT5tYWMub3BzLnNldF92bGFuX2FudGlfc3Bvb2ZpbmcoaHcsIGZhbHNlLCB2Zik7CisJCQlhZGFwdGVyLT5hbnRpc3Bvb2ZpbmdfZW5hYmxlZCA9IGZhbHNlOworCQl9CisJCXJldHZhbCA9IGl4Z2JlX3NldF92Zl9tYWN2bGFuKGFkYXB0ZXIsIHZmLCBpbmRleCwKKwkJCQkJICAgICAgKHVuc2lnbmVkIGNoYXIgKikoJm1zZ2J1ZlsxXSkpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQllX2VycihkcnYsICJVbmhhbmRsZWQgTXNnICU4Ljh4XG4iLCBtc2didWZbMF0pOwogCQlyZXR2YWwgPSBJWEdCRV9FUlJfTUJYOwpAQCAtNDUyLDcgKzU0Myw4IEBACiAJCQlnb3RvIG91dDsKIAkJaXhnYmVfc2V0X3ZtdmlyKGFkYXB0ZXIsIHZsYW4gfCAocW9zIDw8IFZMQU5fUFJJT19TSElGVCksIHZmKTsKIAkJaXhnYmVfc2V0X3Ztb2xyKGh3LCB2ZiwgZmFsc2UpOwotCQlody0+bWFjLm9wcy5zZXRfdmxhbl9hbnRpX3Nwb29maW5nKGh3LCB0cnVlLCB2Zik7CisJCWlmIChhZGFwdGVyLT5hbnRpc3Bvb2ZpbmdfZW5hYmxlZCkKKwkJCWh3LT5tYWMub3BzLnNldF92bGFuX2FudGlfc3Bvb2ZpbmcoaHcsIHRydWUsIHZmKTsKIAkJYWRhcHRlci0+dmZpbmZvW3ZmXS5wZl92bGFuID0gdmxhbjsKIAkJYWRhcHRlci0+dmZpbmZvW3ZmXS5wZl9xb3MgPSBxb3M7CiAJCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV90eXBlLmgKaW5kZXggMjVjMWZiNy4uZmE0M2YyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfdHlwZS5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3R5cGUuaApAQCAtNTgsOSArNTgsMTEgQEAKICNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk5X1NGUF9GQ09FICAgICAgMHgxNTI5CiAjZGVmaW5lIElYR0JFX1NVQkRFVl9JRF84MjU5OV9TRlAgICAgICAgIDB4MTFBOQogI2RlZmluZSBJWEdCRV9ERVZfSURfODI1OTlfU0ZQX0VNICAgICAgICAweDE1MDcKKyNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk5X1NGUF9TRjIgICAgICAgMHgxNTRECiAjZGVmaW5lIElYR0JFX0RFVl9JRF84MjU5OV9YQVVJX0xPTSAgICAgIDB4MTBGQwogI2RlZmluZSBJWEdCRV9ERVZfSURfODI1OTlfQ09NQk9fQkFDS1BMQU5FIDB4MTBGOAogI2RlZmluZSBJWEdCRV9TVUJERVZfSURfODI1OTlfS1g0X0tSX01FWlogIDB4MDAwQworI2RlZmluZSBJWEdCRV9ERVZfSURfODI1OTlfTFMgICAgICAgICAgICAweDE1NEYKICNkZWZpbmUgSVhHQkVfREVWX0lEX1g1NDBUICAgICAgICAgICAgICAgMHgxNTI4CiAKIC8qIEdlbmVyYWwgUmVnaXN0ZXJzICovCkBAIC0xNjMsNiArMTY1LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwRDAxOCArICgoX2kgLSA2NCkgKiAweDQwKSkpCiAjZGVmaW5lIElYR0JFX1JYRENUTChfaSkgKCgoX2kpIDwgNjQpID8gKDB4MDEwMjggKyAoKF9pKSAqIDB4NDApKSA6IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEQwMjggKyAoKF9pIC0gNjQpICogMHg0MCkpKQorI2RlZmluZSBJWEdCRV9SU0NDVEwoX2kpICgoKF9pKSA8IDY0KSA/ICgweDAxMDJDICsgKChfaSkgKiAweDQwKSkgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICgweDBEMDJDICsgKChfaSAtIDY0KSAqIDB4NDApKSkKKyNkZWZpbmUgSVhHQkVfUlNDREJVICAgICAweDAzMDI4CiAjZGVmaW5lIElYR0JFX1JERENDICAgICAgMHgwMkYyMAogI2RlZmluZSBJWEdCRV9SWE1FTVdSQVAgIDB4MDMxOTAKICNkZWZpbmUgSVhHQkVfU1RBUkNUUkwgICAweDAzMDI0CkBAIC0yMjcsMTcgKzIzMiwyMyBAQAogI2RlZmluZSBJWEdCRV9WTFZGKF9pKSAgKDB4MEYxMDAgKyAoKF9pKSAqIDQpKSAgLyogNjQgb2YgdGhlc2UgKDAtNjMpICovCiAjZGVmaW5lIElYR0JFX1ZMVkZCKF9pKSAoMHgwRjIwMCArICgoX2kpICogNCkpICAvKiAxMjggb2YgdGhlc2UgKDAtMTI3KSAqLwogI2RlZmluZSBJWEdCRV9WTVZJUihfaSkgKDB4MDgwMDAgKyAoKF9pKSAqIDQpKSAgLyogNjQgb2YgdGhlc2UgKDAtNjMpICovCi0jZGVmaW5lIElYR0JFX1ZUX0NUTCAgICAweDA1MUIwCi0jZGVmaW5lIElYR0JFX1ZGUkUoX2kpICAoMHgwNTFFMCArICgoX2kpICogNCkpCi0jZGVmaW5lIElYR0JFX1ZGVEUoX2kpICAoMHgwODExMCArICgoX2kpICogNCkpCi0jZGVmaW5lIElYR0JFX1ZNRUNNKF9pKSAoMHgwODc5MCArICgoX2kpICogNCkpCi0jZGVmaW5lIElYR0JFX1FERSAgICAgICAweDJGMDQKLSNkZWZpbmUgSVhHQkVfVk1PTFIoX2kpICgweDBGMDAwICsgKChfaSkgKiA0KSkgLyogNjQgdG90YWwgKi8KLSNkZWZpbmUgSVhHQkVfVVRBKF9pKSAgICgweDBGNDAwICsgKChfaSkgKiA0KSkKLSNkZWZpbmUgSVhHQkVfVk1SQ1RMKF9pKSAgICAgICAgKDB4MEY2MDAgKyAoKF9pKSAqIDQpKQotI2RlZmluZSBJWEdCRV9WTVJWTEFOKF9pKSAgICAgICAoMHgwRjYxMCArICgoX2kpICogNCkpCi0jZGVmaW5lIElYR0JFX1ZNUlZNKF9pKSAgICAgICAgICgweDBGNjMwICsgKChfaSkgKiA0KSkKLSNkZWZpbmUgSVhHQkVfTDM0VF9JTUlSKF9pKSAgICAgICgweDBFODAwICsgKChfaSkgKiA0KSkgLyoxMjggb2YgdGhlc2UgKDAtMTI3KSovCisjZGVmaW5lIElYR0JFX1ZUX0NUTCAgICAgICAgIDB4MDUxQjAKKyNkZWZpbmUgSVhHQkVfUEZNQUlMQk9YKF9pKSAgKDB4MDRCMDAgKyAoNCAqIChfaSkpKSAvKiA2NCB0b3RhbCAqLworI2RlZmluZSBJWEdCRV9QRk1CTUVNKF9pKSAgICAoMHgxMzAwMCArICg2NCAqIChfaSkpKSAvKiA2NCBNYWlsYm94ZXMsIDE2IERXIGVhY2ggKi8KKyNkZWZpbmUgSVhHQkVfUEZNQklDUihfaSkgICAgKDB4MDA3MTAgKyAoNCAqIChfaSkpKSAvKiA0IHRvdGFsICovCisjZGVmaW5lIElYR0JFX1BGTUJJTVIoX2kpICAgICgweDAwNzIwICsgKDQgKiAoX2kpKSkgLyogNCB0b3RhbCAqLworI2RlZmluZSBJWEdCRV9WRlJFKF9pKSAgICAgICAoMHgwNTFFMCArICgoX2kpICogNCkpCisjZGVmaW5lIElYR0JFX1ZGVEUoX2kpICAgICAgICgweDA4MTEwICsgKChfaSkgKiA0KSkKKyNkZWZpbmUgSVhHQkVfVk1FQ00oX2kpICAgICAgKDB4MDg3OTAgKyAoKF9pKSAqIDQpKQorI2RlZmluZSBJWEdCRV9RREUgICAgICAgICAgICAweDJGMDQKKyNkZWZpbmUgSVhHQkVfVk1UWFNXKF9pKSAgICAgKDB4MDUxODAgKyAoKF9pKSAqIDQpKSAvKiAyIHRvdGFsICovCisjZGVmaW5lIElYR0JFX1ZNT0xSKF9pKSAgICAgICgweDBGMDAwICsgKChfaSkgKiA0KSkgLyogNjQgdG90YWwgKi8KKyNkZWZpbmUgSVhHQkVfVVRBKF9pKSAgICAgICAgKDB4MEY0MDAgKyAoKF9pKSAqIDQpKQorI2RlZmluZSBJWEdCRV9NUkNUTChfaSkgICAgICAoMHgwRjYwMCArICgoX2kpICogNCkpCisjZGVmaW5lIElYR0JFX1ZNUlZMQU4oX2kpICAgICgweDBGNjEwICsgKChfaSkgKiA0KSkKKyNkZWZpbmUgSVhHQkVfVk1SVk0oX2kpICAgICAgKDB4MEY2MzAgKyAoKF9pKSAqIDQpKQorI2RlZmluZSBJWEdCRV9MMzRUX0lNSVIoX2kpICAoMHgwRTgwMCArICgoX2kpICogNCkpIC8qMTI4IG9mIHRoZXNlICgwLTEyNykqLworI2RlZmluZSBJWEdCRV9SWEZFQ0NFUlIwICAgICAgICAgMHgwNTFCOAogI2RlZmluZSBJWEdCRV9MTElUSFJFU0ggMHgwRUM5MAogI2RlZmluZSBJWEdCRV9JTUlSKF9pKSAgKDB4MDVBODAgKyAoKF9pKSAqIDQpKSAgLyogOCBvZiB0aGVzZSAoMC03KSAqLwogI2RlZmluZSBJWEdCRV9JTUlSRVhUKF9pKSAgICAgICAoMHgwNUFBMCArICgoX2kpICogNCkpICAvKiA4IG9mIHRoZXNlICgwLTcpICovCkBAIC0zNjQsNyArMzc1LDcgQEAKICNkZWZpbmUgSVhHQkVfV1VGQ19GTFg1IDB4MDAyMDAwMDAgLyogRmxleGlibGUgRmlsdGVyIDUgRW5hYmxlICovCiAjZGVmaW5lIElYR0JFX1dVRkNfRkxYX0ZJTFRFUlMgICAgIDB4MDAwRjAwMDAgLyogTWFzayBmb3IgNCBmbGV4IGZpbHRlcnMgKi8KICNkZWZpbmUgSVhHQkVfV1VGQ19FWFRfRkxYX0ZJTFRFUlMgMHgwMDMwMDAwMCAvKiBNYXNrIGZvciBFeHQuIGZsZXggZmlsdGVycyAqLwotI2RlZmluZSBJWEdCRV9XVUZDX0FMTF9GSUxURVJTICAgICAweDAwM0YwMEZGIC8qIE1hc2sgZm9yIGFsbCA2IHdha2V1cCBmaWx0ZXJzKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19BTExfRklMVEVSUyAgICAgMHgwMDNGMDBGRiAvKiBNYXNrIGZvciBhbGwgd2FrZXVwIGZpbHRlcnMgKi8KICNkZWZpbmUgSVhHQkVfV1VGQ19GTFhfT0ZGU0VUICAgICAgMTYgLyogT2Zmc2V0IHRvIHRoZSBGbGV4aWJsZSBGaWx0ZXJzIGJpdHMgKi8KIAogLyogV2FrZSBVcCBTdGF0dXMgKi8KQEAgLTQwNiw3ICs0MTcsNiBAQAogI2RlZmluZSBJWEdCRV9TRUNUWFNUQVQgICAgICAgICAweDA4ODA0CiAjZGVmaW5lIElYR0JFX1NFQ1RYQlVGRkFGICAgICAgIDB4MDg4MDgKICNkZWZpbmUgSVhHQkVfU0VDVFhNSU5JRkcgICAgICAgMHgwODgxMAotI2RlZmluZSBJWEdCRV9TRUNUWFNUQVQgICAgICAgICAweDA4ODA0CiAjZGVmaW5lIElYR0JFX1NFQ1JYQ1RSTCAgICAgICAgIDB4MDhEMDAKICNkZWZpbmUgSVhHQkVfU0VDUlhTVEFUICAgICAgICAgMHgwOEQwNAogCkBAIC00OTksMjEgKzUwOSw2IEBACiAKICNkZWZpbmUgSVhHQkVfU0VDVFhDVFJMX1NUT1JFX0ZPUldBUkRfRU5BQkxFICAgIDB4NAogCi0vKiBIVyBSU0MgcmVnaXN0ZXJzICovCi0jZGVmaW5lIElYR0JFX1JTQ0NUTChfaSkgKCgoX2kpIDwgNjQpID8gKDB4MDEwMkMgKyAoKF9pKSAqIDB4NDApKSA6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEQwMkMgKyAoKF9pIC0gNjQpICogMHg0MCkpKQotI2RlZmluZSBJWEdCRV9SU0NEQlUgICAgICAweDAzMDI4Ci0jZGVmaW5lIElYR0JFX1JTQ0NUTF9SU0NFTiAgICAgICAgICAweDAxCi0jZGVmaW5lIElYR0JFX1JTQ0NUTF9NQVhERVNDXzEgICAgICAweDAwCi0jZGVmaW5lIElYR0JFX1JTQ0NUTF9NQVhERVNDXzQgICAgICAweDA0Ci0jZGVmaW5lIElYR0JFX1JTQ0NUTF9NQVhERVNDXzggICAgICAweDA4Ci0jZGVmaW5lIElYR0JFX1JTQ0NUTF9NQVhERVNDXzE2ICAgICAweDBDCi0jZGVmaW5lIElYR0JFX1JYREFEVl9SU0NDTlRfU0hJRlQgICAgIDE3Ci0jZGVmaW5lIElYR0JFX0dQSUVfUlNDX0RFTEFZX1NISUZUICAgIDExCi0jZGVmaW5lIElYR0JFX1JYREFEVl9SU0NDTlRfTUFTSyAgICAweDAwMUUwMDAwCi0jZGVmaW5lIElYR0JFX1JTQ0RCVV9SU0NBQ0tESVMgICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIElYR0JFX1JEUlhDVExfUlNDRlJTVFNJWkUgICAweDAwM0UwMDAwCi0KIC8qIERDQiByZWdpc3RlcnMgKi8KICNkZWZpbmUgSVhHQkVfUlRSUENTICAgICAgMHgwMjQzMAogI2RlZmluZSBJWEdCRV9SVFREQ1MgICAgICAweDA0OTAwCkBAIC01MjIsNiArNTE3LDcgQEAKICNkZWZpbmUgSVhHQkVfUlRSVVAyVEMgICAgMHgwMzAyMAogI2RlZmluZSBJWEdCRV9SVFRVUDJUQyAgICAweDBDODAwCiAjZGVmaW5lIElYR0JFX1JUUlBUNEMoX2kpICgweDAyMTQwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAoMC03KSAqLworI2RlZmluZSBJWEdCRV9UWExMUShfaSkgICAoMHgwODJFMCArICgoX2kpICogNCkpIC8qIDQgb2YgdGhlc2UgKDAtMykgKi8KICNkZWZpbmUgSVhHQkVfUlRSUFQ0UyhfaSkgKDB4MDIxNjAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlICgwLTcpICovCiAjZGVmaW5lIElYR0JFX1JUVERUMkMoX2kpICgweDA0OTEwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAoMC03KSAqLwogI2RlZmluZSBJWEdCRV9SVFREVDJTKF9pKSAoMHgwNDkzMCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgKDAtNykgKi8KQEAgLTU0MCw3ICs1MzYsNyBAQAogCShJWEdCRV9SVFRCQ05SQ19SRl9ERUNfTUFTSyA8PCBJWEdCRV9SVFRCQ05SQ19SRl9JTlRfU0hJRlQpCiAKIAotLyogRkNvRSByZWdpc3RlcnMgKi8KKy8qIEZDb0UgRE1BIENvbnRleHQgUmVnaXN0ZXJzICovCiAjZGVmaW5lIElYR0JFX0ZDUFRSTCAgICAweDAyNDEwIC8qIEZDIFVzZXIgRGVzYy4gUFRSIExvdyAqLwogI2RlZmluZSBJWEdCRV9GQ1BUUkggICAgMHgwMjQxNCAvKiBGQyBVU2VyIERlc2MuIFBUUiBIaWdoICovCiAjZGVmaW5lIElYR0JFX0ZDQlVGRiAgICAweDAyNDE4IC8qIEZDIEJ1ZmZlciBDb250cm9sICovCkBAIC02NzcsNiArNjczLDEwIEBACiAjZGVmaW5lIElYR0JFX0ZDT0VEV1JDICAweDAyNDJDIC8qIE51bWJlciBvZiBGQ29FIERXb3JkcyBSZWNlaXZlZCAqLwogI2RlZmluZSBJWEdCRV9GQ09FUFRDICAgMHgwODc4NCAvKiBOdW1iZXIgb2YgRkNvRSBQYWNrZXRzIFRyYW5zbWl0dGVkICovCiAjZGVmaW5lIElYR0JFX0ZDT0VEV1RDICAweDA4Nzg4IC8qIE51bWJlciBvZiBGQ29FIERXb3JkcyBUcmFuc21pdHRlZCAqLworI2RlZmluZSBJWEdCRV9PMkJHUFRDICAgMHgwNDFDNAorI2RlZmluZSBJWEdCRV9PMkJTUEMgICAgMHgwODdCMAorI2RlZmluZSBJWEdCRV9CMk9TUEMgICAgMHgwNDFDMAorI2RlZmluZSBJWEdCRV9CMk9HUFJDICAgMHgwMkY5MAogI2RlZmluZSBJWEdCRV9QQ1JDOEVDTCAgMHgwRTgxMAogI2RlZmluZSBJWEdCRV9QQ1JDOEVDSCAgMHgwRTgxMQogI2RlZmluZSBJWEdCRV9QQ1JDOEVDSF9NQVNLICAgICAweDFGCkBAIC03NDIsMTcgKzc0MiwxMCBAQAogI2RlZmluZSBJWEdCRV9QQkFDTFJfODI1OTkgICAgICAweDExMDY4CiAjZGVmaW5lIElYR0JFX0NJQUFfODI1OTkgICAgICAgIDB4MTEwODgKICNkZWZpbmUgSVhHQkVfQ0lBRF84MjU5OSAgICAgICAgMHgxMTA4QwotI2RlZmluZSBJWEdCRV9QQ0lFX0RJQUdfMF84MjU5OSAweDExMDkwCi0jZGVmaW5lIElYR0JFX1BDSUVfRElBR18xXzgyNTk5IDB4MTEwOTQKLSNkZWZpbmUgSVhHQkVfUENJRV9ESUFHXzJfODI1OTkgMHgxMTA5OAotI2RlZmluZSBJWEdCRV9QQ0lFX0RJQUdfM184MjU5OSAweDExMDlDCi0jZGVmaW5lIElYR0JFX1BDSUVfRElBR180XzgyNTk5IDB4MTEwQTAKLSNkZWZpbmUgSVhHQkVfUENJRV9ESUFHXzVfODI1OTkgMHgxMTBBNAotI2RlZmluZSBJWEdCRV9QQ0lFX0RJQUdfNl84MjU5OSAweDExMEE4Ci0jZGVmaW5lIElYR0JFX1BDSUVfRElBR183XzgyNTk5IDB4MTEwQzAKLSNkZWZpbmUgSVhHQkVfSU5UUlBUX0NTUl84MjU5OSAgMHgxMTBCMAotI2RlZmluZSBJWEdCRV9JTlRSUFRfTUFTS184MjU5OSAweDExMEI4CisjZGVmaW5lIElYR0JFX1BJQ0FVU0UgICAgICAgICAgIDB4MTEwQjAKKyNkZWZpbmUgSVhHQkVfUElFTkEgICAgICAgICAgICAgMHgxMTBCOAogI2RlZmluZSBJWEdCRV9DRFFfTUJSXzgyNTk5ICAgICAweDExMEI0CisjZGVmaW5lIElYR0JFX1BDSUVTUEFSRSAgICAgICAgIDB4MTEwQkMKICNkZWZpbmUgSVhHQkVfTUlTQ19SRUdfODI1OTkgICAgMHgxMTBGMAogI2RlZmluZSBJWEdCRV9FQ0NfQ1RSTF8wXzgyNTk5ICAweDExMTAwCiAjZGVmaW5lIElYR0JFX0VDQ19DVFJMXzFfODI1OTkgIDB4MTExMDQKQEAgLTc4NSw3ICs3NzgsMTkgQEAKICNkZWZpbmUgSVhHQkVfU1lTVElNTCAgICAweDA4QzBDIC8qIFN5c3RlbSB0aW1lIHJlZ2lzdGVyIExvdyAtIFJPICovCiAjZGVmaW5lIElYR0JFX1NZU1RJTUggICAgMHgwOEMxMCAvKiBTeXN0ZW0gdGltZSByZWdpc3RlciBIaWdoIC0gUk8gKi8KICNkZWZpbmUgSVhHQkVfVElNSU5DQSAgICAweDA4QzE0IC8qIEluY3JlbWVudCBhdHRyaWJ1dGVzIHJlZ2lzdGVyIC0gUlcgKi8KLSNkZWZpbmUgSVhHQkVfUlhVRFAgICAgICAweDA4QzFDIC8qIFRpbWUgU3luYyBSeCBVRFAgUG9ydCAtIFJXICovCisjZGVmaW5lIElYR0JFX1RJTUFESkwgICAgMHgwOEMxOCAvKiBUaW1lIEFkanVzdG1lbnQgT2Zmc2V0IHJlZ2lzdGVyIExvdyAtIFJXICovCisjZGVmaW5lIElYR0JFX1RJTUFESkggICAgMHgwOEMxQyAvKiBUaW1lIEFkanVzdG1lbnQgT2Zmc2V0IHJlZ2lzdGVyIEhpZ2ggLSBSVyAqLworI2RlZmluZSBJWEdCRV9UU0FVWEMgICAgIDB4MDhDMjAgLyogVGltZVN5bmMgQXV4aWxpYXJ5IENvbnRyb2wgcmVnaXN0ZXIgLSBSVyAqLworI2RlZmluZSBJWEdCRV9UUkdUVElNTDAgIDB4MDhDMjQgLyogVGFyZ2V0IFRpbWUgUmVnaXN0ZXIgMCBMb3cgLSBSVyAqLworI2RlZmluZSBJWEdCRV9UUkdUVElNSDAgIDB4MDhDMjggLyogVGFyZ2V0IFRpbWUgUmVnaXN0ZXIgMCBIaWdoIC0gUlcgKi8KKyNkZWZpbmUgSVhHQkVfVFJHVFRJTUwxICAweDA4QzJDIC8qIFRhcmdldCBUaW1lIFJlZ2lzdGVyIDEgTG93IC0gUlcgKi8KKyNkZWZpbmUgSVhHQkVfVFJHVFRJTUgxICAweDA4QzMwIC8qIFRhcmdldCBUaW1lIFJlZ2lzdGVyIDEgSGlnaCAtIFJXICovCisjZGVmaW5lIElYR0JFX0ZSRVFPVVQwICAgMHgwOEMzNCAvKiBGcmVxdWVuY3kgT3V0IDAgQ29udHJvbCByZWdpc3RlciAtIFJXICovCisjZGVmaW5lIElYR0JFX0ZSRVFPVVQxICAgMHgwOEMzOCAvKiBGcmVxdWVuY3kgT3V0IDEgQ29udHJvbCByZWdpc3RlciAtIFJXICovCisjZGVmaW5lIElYR0JFX0FVWFNUTVBMMCAgMHgwOEMzQyAvKiBBdXhpbGlhcnkgVGltZSBTdGFtcCAwIHJlZ2lzdGVyIExvdyAtIFJPICovCisjZGVmaW5lIElYR0JFX0FVWFNUTVBIMCAgMHgwOEM0MCAvKiBBdXhpbGlhcnkgVGltZSBTdGFtcCAwIHJlZ2lzdGVyIEhpZ2ggLSBSTyAqLworI2RlZmluZSBJWEdCRV9BVVhTVE1QTDEgIDB4MDhDNDQgLyogQXV4aWxpYXJ5IFRpbWUgU3RhbXAgMSByZWdpc3RlciBMb3cgLSBSTyAqLworI2RlZmluZSBJWEdCRV9BVVhTVE1QSDEgIDB4MDhDNDggLyogQXV4aWxpYXJ5IFRpbWUgU3RhbXAgMSByZWdpc3RlciBIaWdoIC0gUk8gKi8KIAogLyogRGlhZ25vc3RpYyBSZWdpc3RlcnMgKi8KICNkZWZpbmUgSVhHQkVfUkRTVEFUQ1RMICAgMHgwMkMyMApAQCAtODI5LDggKzgzNCwyMCBAQAogI2RlZmluZSBJWEdCRV9UWERBVEFSRFBUUihfaSkgICAoMHgwQzcyMCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgQzcyMC1DNzJDKi8KICNkZWZpbmUgSVhHQkVfVFhERVNDUkRQVFIoX2kpICAgKDB4MEM3MzAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlIEM3MzAtQzczQyovCiAjZGVmaW5lIElYR0JFX1BDSUVFQ0NDVEwgMHgxMTA2QworI2RlZmluZSBJWEdCRV9SWFdSUFRSKF9pKSAgICAgICAoMHgwMzEwMCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgMzEwMC0zMTBDKi8KKyNkZWZpbmUgSVhHQkVfUlhVU0VEKF9pKSAgICAgICAgKDB4MDMxMjAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlIDMxMjAtMzEyQyovCisjZGVmaW5lIElYR0JFX1JYUkRQVFIoX2kpICAgICAgICgweDAzMTQwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAzMTQwLTMxNEMqLworI2RlZmluZSBJWEdCRV9SWFJEV1JQVFIoX2kpICAgICAoMHgwMzE2MCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgMzE2MC0zMTBDKi8KKyNkZWZpbmUgSVhHQkVfVFhXUlBUUihfaSkgICAgICAgKDB4MEMxMDAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlIEMxMDAtQzEwQyovCisjZGVmaW5lIElYR0JFX1RYVVNFRChfaSkgICAgICAgICgweDBDMTIwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSBDMTIwLUMxMkMqLworI2RlZmluZSBJWEdCRV9UWFJEUFRSKF9pKSAgICAgICAoMHgwQzE0MCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgQzE0MC1DMTRDKi8KKyNkZWZpbmUgSVhHQkVfVFhSRFdSUFRSKF9pKSAgICAgKDB4MEMxNjAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlIEMxNjAtQzEwQyovCiAjZGVmaW5lIElYR0JFX1BDSUVFQ0NDVEwwIDB4MTExMDAKICNkZWZpbmUgSVhHQkVfUENJRUVDQ0NUTDEgMHgxMTEwNAorI2RlZmluZSBJWEdCRV9SWERCVUVDQyAgMHgwM0Y3MAorI2RlZmluZSBJWEdCRV9UWERCVUVDQyAgMHgwQ0Y3MAorI2RlZmluZSBJWEdCRV9SWERCVUVTVCAweDAzRjc0CisjZGVmaW5lIElYR0JFX1RYREJVRVNUIDB4MENGNzQKICNkZWZpbmUgSVhHQkVfUEJUWEVDQyAgIDB4MEMzMDAKICNkZWZpbmUgSVhHQkVfUEJSWEVDQyAgIDB4MDMzMDAKICNkZWZpbmUgSVhHQkVfR0hFQ0NSICAgIDB4MTEwQjAKQEAgLTg3MSw2ICs4ODgsNyBAQAogI2RlZmluZSBJWEdCRV9BVVRPQzMgICAgMHgwNDJBQwogI2RlZmluZSBJWEdCRV9BTkxQMSAgICAgMHgwNDJCMAogI2RlZmluZSBJWEdCRV9BTkxQMiAgICAgMHgwNDJCNAorI2RlZmluZSBJWEdCRV9NQUNDICAgICAgMHgwNDMzMAogI2RlZmluZSBJWEdCRV9BVExBU0NUTCAgMHgwNDgwMAogI2RlZmluZSBJWEdCRV9NTU5HQyAgICAgMHgwNDJEMAogI2RlZmluZSBJWEdCRV9BTkxQTlAxICAgMHgwNDJENApAQCAtODgzLDE0ICs5MDEsNDkgQEAKICNkZWZpbmUgSVhHQkVfTVBWQyAgICAgIDB4MDQzMTgKICNkZWZpbmUgSVhHQkVfU0dNSUlDICAgIDB4MDQzMTQKIAorLyogU3RhdGlzdGljcyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgSVhHQkVfUlhORkdQQyAgICAgIDB4MDQxQjAKKyNkZWZpbmUgSVhHQkVfUlhORkdCQ0wgICAgIDB4MDQxQjQKKyNkZWZpbmUgSVhHQkVfUlhORkdCQ0ggICAgIDB4MDQxQjgKKyNkZWZpbmUgSVhHQkVfUlhER1BDICAgICAgIDB4MDJGNTAKKyNkZWZpbmUgSVhHQkVfUlhER0JDTCAgICAgIDB4MDJGNTQKKyNkZWZpbmUgSVhHQkVfUlhER0JDSCAgICAgIDB4MDJGNTgKKyNkZWZpbmUgSVhHQkVfUlhEREdQQyAgICAgIDB4MDJGNUMKKyNkZWZpbmUgSVhHQkVfUlhEREdCQ0wgICAgIDB4MDJGNjAKKyNkZWZpbmUgSVhHQkVfUlhEREdCQ0ggICAgIDB4MDJGNjQKKyNkZWZpbmUgSVhHQkVfUlhMUEJLR1BDICAgIDB4MDJGNjgKKyNkZWZpbmUgSVhHQkVfUlhMUEJLR0JDTCAgIDB4MDJGNkMKKyNkZWZpbmUgSVhHQkVfUlhMUEJLR0JDSCAgIDB4MDJGNzAKKyNkZWZpbmUgSVhHQkVfUlhETFBCS0dQQyAgIDB4MDJGNzQKKyNkZWZpbmUgSVhHQkVfUlhETFBCS0dCQ0wgIDB4MDJGNzgKKyNkZWZpbmUgSVhHQkVfUlhETFBCS0dCQ0ggIDB4MDJGN0MKKyNkZWZpbmUgSVhHQkVfVFhER1BDICAgICAgIDB4MDg3QTAKKyNkZWZpbmUgSVhHQkVfVFhER0JDTCAgICAgIDB4MDg3QTQKKyNkZWZpbmUgSVhHQkVfVFhER0JDSCAgICAgIDB4MDg3QTgKKworI2RlZmluZSBJWEdCRV9SWERTVEFUQ1RSTCAweDAyRjQwCisKKy8qIENvcHBlciBQb25kIDIgbGluayB0aW1lb3V0ICovCiAjZGVmaW5lIElYR0JFX1ZBTElEQVRFX0xJTktfUkVBRFlfVElNRU9VVCA1MAogCiAvKiBPbWVyIENPUkVDVEwgKi8KICNkZWZpbmUgSVhHQkVfQ09SRUNUTCAgICAgICAgICAgMHgwMTRGMDAKIC8qIEJBUkNUUkwgKi8KLSNkZWZpbmUgSVhHQkVfQkFSQ1RSTCAgICAgICAgICAgMHgxMTBGNAotI2RlZmluZSBJWEdCRV9CQVJDVFJMX0ZMU0laRSAgICAweDA3MDAKLSNkZWZpbmUgSVhHQkVfQkFSQ1RSTF9DU1JTSVpFICAgMHgyMDAwCisjZGVmaW5lIElYR0JFX0JBUkNUUkwgICAgICAgICAgICAgICAweDExMEY0CisjZGVmaW5lIElYR0JFX0JBUkNUUkxfRkxTSVpFICAgICAgICAweDA3MDAKKyNkZWZpbmUgSVhHQkVfQkFSQ1RSTF9GTFNJWkVfU0hJRlQgIDgKKyNkZWZpbmUgSVhHQkVfQkFSQ1RSTF9DU1JTSVpFICAgICAgIDB4MjAwMAorCisvKiBSU0NDVEwgQml0IE1hc2tzICovCisjZGVmaW5lIElYR0JFX1JTQ0NUTF9SU0NFTiAgICAgICAgICAweDAxCisjZGVmaW5lIElYR0JFX1JTQ0NUTF9NQVhERVNDXzEgICAgICAweDAwCisjZGVmaW5lIElYR0JFX1JTQ0NUTF9NQVhERVNDXzQgICAgICAweDA0CisjZGVmaW5lIElYR0JFX1JTQ0NUTF9NQVhERVNDXzggICAgICAweDA4CisjZGVmaW5lIElYR0JFX1JTQ0NUTF9NQVhERVNDXzE2ICAgICAweDBDCisKKy8qIFJTQ0RCVSBCaXQgTWFza3MgKi8KKyNkZWZpbmUgSVhHQkVfUlNDREJVX1JTQ1NNQUxESVNfTUFTSyAgICAweDAwMDAwMDdGCisjZGVmaW5lIElYR0JFX1JTQ0RCVV9SU0NBQ0tESVMgICAgICAgICAgMHgwMDAwMDA4MAogCiAvKiBSRFJYQ1RMIEJpdCBNYXNrcyAqLwogI2RlZmluZSBJWEdCRV9SRFJYQ1RMX1JETVRTXzFfMiAgICAgMHgwMDAwMDAwMCAvKiBSeCBEZXNjIE1pbiBUaHJlc2hvbGQgU2l6ZSAqLwpAQCAtODk4LDYgKzk1MSw4IEBACiAjZGVmaW5lIElYR0JFX1JEUlhDVExfTVZNRU4gICAgICAgICAweDAwMDAwMDIwCiAjZGVmaW5lIElYR0JFX1JEUlhDVExfRE1BSURPTkUgICAgICAweDAwMDAwMDA4IC8qIERNQSBpbml0IGN5Y2xlIGRvbmUgKi8KICNkZWZpbmUgSVhHQkVfUkRSWENUTF9BR0dESVMgICAgICAgIDB4MDAwMTAwMDAgLyogQWdncmVnYXRpb24gZGlzYWJsZSAqLworI2RlZmluZSBJWEdCRV9SRFJYQ1RMX1JTQ0ZSU1RTSVpFICAgMHgwMDNFMDAwMCAvKiBSU0MgRmlyc3QgcGFja2V0IHNpemUgKi8KKyNkZWZpbmUgSVhHQkVfUkRSWENUTF9SU0NMTElESVMgICAgIDB4MDA4MDAwMDAgLyogRGlzYWJsZSBSU0MgY29tcGwgb24gTExJICovCiAjZGVmaW5lIElYR0JFX1JEUlhDVExfUlNDQUNLQyAgICAgICAweDAyMDAwMDAwIC8qIG11c3Qgc2V0IDEgd2hlbiBSU0MgZW5hYmxlZCAqLwogI2RlZmluZSBJWEdCRV9SRFJYQ1RMX0ZDT0VfV1JGSVggICAgMHgwNDAwMDAwMCAvKiBtdXN0IHNldCAxIHdoZW4gUlNDIGVuYWJsZWQgKi8KIApAQCAtOTY5LDggKzEwMjQsOCBAQAogI2RlZmluZSBJWEdCRV9NU0NBX09QX0NPREVfU0hJRlQgICAgIDI2IC8qIE9QIENPREUgc2hpZnQgKi8KICNkZWZpbmUgSVhHQkVfTVNDQV9BRERSX0NZQ0xFICAgICAgICAweDAwMDAwMDAwIC8qIE9QIENPREUgMDAgKGFkZHIgY3ljbGUpICovCiAjZGVmaW5lIElYR0JFX01TQ0FfV1JJVEUgICAgICAgICAgICAgMHgwNDAwMDAwMCAvKiBPUCBDT0RFIDAxICh3cml0ZSkgKi8KLSNkZWZpbmUgSVhHQkVfTVNDQV9SRUFEICAgICAgICAgICAgICAweDA4MDAwMDAwIC8qIE9QIENPREUgMTAgKHJlYWQpICovCi0jZGVmaW5lIElYR0JFX01TQ0FfUkVBRF9BVVRPSU5DICAgICAgMHgwQzAwMDAwMCAvKiBPUCBDT0RFIDExIChyZWFkLCBhdXRvIGluYykqLworI2RlZmluZSBJWEdCRV9NU0NBX1JFQUQgICAgICAgICAgICAgIDB4MEMwMDAwMDAgLyogT1AgQ09ERSAxMSAocmVhZCkgKi8KKyNkZWZpbmUgSVhHQkVfTVNDQV9SRUFEX0FVVE9JTkMgICAgICAweDA4MDAwMDAwIC8qIE9QIENPREUgMTAgKHJlYWQsIGF1dG8gaW5jKSovCiAjZGVmaW5lIElYR0JFX01TQ0FfU1RfQ09ERV9NQVNLICAgICAgMHgzMDAwMDAwMCAvKiBTVCBDb2RlIG1hc2sgKi8KICNkZWZpbmUgSVhHQkVfTVNDQV9TVF9DT0RFX1NISUZUICAgICAyOCAvKiBTVCBDb2RlIHNoaWZ0ICovCiAjZGVmaW5lIElYR0JFX01TQ0FfTkVXX1BST1RPQ09MICAgICAgMHgwMDAwMDAwMCAvKiBTVCBDT0RFIDAwIChuZXcgcHJvdG9jb2wpICovCkBAIC0xMDU3LDYgKzExMTIsNyBAQAogI2RlZmluZSBJWEdCRV9HUElFX0VJTUVOICAgICAgICAgMHgwMDAwMDA0MCAvKiBJbW1lZGlhdGUgSW50ZXJydXB0IEVuYWJsZSAqLwogI2RlZmluZSBJWEdCRV9HUElFX0VJQU1FICAgICAgICAgMHg0MDAwMDAwMAogI2RlZmluZSBJWEdCRV9HUElFX1BCQV9TVVBQT1JUICAgMHg4MDAwMDAwMAorI2RlZmluZSBJWEdCRV9HUElFX1JTQ19ERUxBWV9TSElGVCAxMQogI2RlZmluZSBJWEdCRV9HUElFX1ZUTU9ERV9NQVNLICAgMHgwMDAwQzAwMCAvKiBWVCBNb2RlIE1hc2sgKi8KICNkZWZpbmUgSVhHQkVfR1BJRV9WVE1PREVfMTYgICAgIDB4MDAwMDQwMDAgLyogMTYgVkZzIDggcXVldWVzIHBlciBWRiAqLwogI2RlZmluZSBJWEdCRV9HUElFX1ZUTU9ERV8zMiAgICAgMHgwMDAwODAwMCAvKiAzMiBWRnMgNCBxdWV1ZXMgcGVyIFZGICovCkBAIC0xMjkxLDYgKzEzNDcsMTEgQEAKICNkZWZpbmUgSVhHQkVfRlRRRl9QT09MX1NISUZUICAgICAgICAgICA4CiAjZGVmaW5lIElYR0JFX0ZUUUZfNVRVUExFX01BU0tfTUFTSyAgICAgMHgwMDAwMDAxRgogI2RlZmluZSBJWEdCRV9GVFFGXzVUVVBMRV9NQVNLX1NISUZUICAgIDI1CisjZGVmaW5lIElYR0JFX0ZUUUZfU09VUkNFX0FERFJfTUFTSyAgICAgMHgxRQorI2RlZmluZSBJWEdCRV9GVFFGX0RFU1RfQUREUl9NQVNLICAgICAgIDB4MUQKKyNkZWZpbmUgSVhHQkVfRlRRRl9TT1VSQ0VfUE9SVF9NQVNLICAgICAweDFCCisjZGVmaW5lIElYR0JFX0ZUUUZfREVTVF9QT1JUX01BU0sgICAgICAgMHgxNworI2RlZmluZSBJWEdCRV9GVFFGX1BST1RPQ09MX0NPTVBfTUFTSyAgIDB4MEYKICNkZWZpbmUgSVhHQkVfRlRRRl9QT09MX01BU0tfRU4gICAgICAgICAweDQwMDAwMDAwCiAjZGVmaW5lIElYR0JFX0ZUUUZfUVVFVUVfRU5BQkxFICAgICAgICAgMHg4MDAwMDAwMAogCkBAIC0xMzMzLDExICsxMzk0LDExIEBACiAgKgogICogQ3VycmVudCBmaWx0ZXJzOgogICogICAgRUFQT0wgODAyLjF4ICgweDg4OGUpOiBGaWx0ZXIgMAotICogICAgQkNOICgweDg5MDQpOiAgICAgICAgICBGaWx0ZXIgMQorICogICAgRkNvRSAoMHg4OTA2KTogICAgICAgICBGaWx0ZXIgMgogICogICAgMTU4OCAoMHg4OGY3KTogICAgICAgICBGaWx0ZXIgMworICogICAgRklQICAoMHg4OTE0KTogICAgICAgICBGaWx0ZXIgNAogICovCiAjZGVmaW5lIElYR0JFX0VUUUZfRklMVEVSX0VBUE9MICAgICAgICAgIDAKLSNkZWZpbmUgSVhHQkVfRVRRRl9GSUxURVJfQkNOICAgICAgICAgICAgMQogI2RlZmluZSBJWEdCRV9FVFFGX0ZJTFRFUl9GQ09FICAgICAgICAgICAyCiAjZGVmaW5lIElYR0JFX0VUUUZfRklMVEVSXzE1ODggICAgICAgICAgIDMKICNkZWZpbmUgSVhHQkVfRVRRRl9GSUxURVJfRklQICAgICAgICAgICAgNApAQCAtMTQ0OCw2ICsxNTA5LDExIEBACiAjZGVmaW5lIElYR0JFX0FVVE9DMl8xMEdfWEZJICgweDEgPDwgSVhHQkVfQVVUT0MyXzEwR19TRVJJQUxfUE1BX1BNRF9TSElGVCkKICNkZWZpbmUgSVhHQkVfQVVUT0MyXzEwR19TRkkgKDB4MiA8PCBJWEdCRV9BVVRPQzJfMTBHX1NFUklBTF9QTUFfUE1EX1NISUZUKQogCisjZGVmaW5lIElYR0JFX01BQ0NfRkxVICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSVhHQkVfTUFDQ19GU1ZfMTBHICAgMHgwMDAzMDAwMAorI2RlZmluZSBJWEdCRV9NQUNDX0ZTICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElYR0JFX01BQ19SWDJUWF9MUEJLIDB4MDAwMDAwMDIKKwogLyogTElOS1MgQml0IE1hc2tzICovCiAjZGVmaW5lIElYR0JFX0xJTktTX0tYX0FOX0NPTVAgIDB4ODAwMDAwMDAKICNkZWZpbmUgSVhHQkVfTElOS1NfVVAgICAgICAgICAgMHg0MDAwMDAwMApAQCAtMTUwMSw3ICsxNTY3LDYgQEAKICNkZWZpbmUgSVhHQkVfQU5MUDFfQVNNX1BBVVNFICAgICAgICAgICAweDA4MDAKICNkZWZpbmUgSVhHQkVfQU5MUDFfQU5fU1RBVEVfTUFTSyAgICAgICAweDAwMGYwMDAwCiAKLQogLyogU1cgU2VtYXBob3JlIFJlZ2lzdGVyIGJpdG1hc2tzICovCiAjZGVmaW5lIElYR0JFX1NXU01fU01CSSAweDAwMDAwMDAxIC8qIERyaXZlciBTZW1hcGhvcmUgYml0ICovCiAjZGVmaW5lIElYR0JFX1NXU01fU1dFU01CSSAweDAwMDAwMDAyIC8qIEZXIFNlbWFwaG9yZSBiaXQgKi8KQEAgLTE1MTQsNiArMTU3OSwxMCBAQAogI2RlZmluZSBJWEdCRV9HU1NSX1BIWTFfU00gICAgMHgwMDA0CiAjZGVmaW5lIElYR0JFX0dTU1JfTUFDX0NTUl9TTSAweDAwMDgKICNkZWZpbmUgSVhHQkVfR1NTUl9GTEFTSF9TTSAgIDB4MDAxMAorI2RlZmluZSBJWEdCRV9HU1NSX1NXX01OR19TTSAgMHgwNDAwCisKKy8qIEZXIFN0YXR1cyByZWdpc3RlciBiaXRtYXNrICovCisjZGVmaW5lIElYR0JFX0ZXU1RTX0ZXUkkgICAgMHgwMDAwMDIwMCAvKiBGaXJtd2FyZSBSZXNldCBJbmRpY2F0aW9uICovCiAKIC8qIEVFQyBSZWdpc3RlciAqLwogI2RlZmluZSBJWEdCRV9FRUNfU0sgICAgICAgIDB4MDAwMDAwMDEgLyogRUVQUk9NIENsb2NrICovCkBAIC0xNTM0LDYgKzE2MDMsNyBAQAogLyogRUVQUk9NIEFkZHJlc3NpbmcgYml0cyBiYXNlZCBvbiB0eXBlICgwLXNtYWxsLCAxLWxhcmdlKSAqLwogI2RlZmluZSBJWEdCRV9FRUNfQUREUl9TSVpFIDB4MDAwMDA0MDAKICNkZWZpbmUgSVhHQkVfRUVDX1NJWkUgICAgICAweDAwMDA3ODAwIC8qIEVFUFJPTSBTaXplICovCisjZGVmaW5lIElYR0JFX0VFUkRfTUFYX0FERFIgMHgwMDAwM0ZGRiAvKiBFRVJEIGFsb3dzIDE0IGJpdHMgZm9yIGFkZHIuICovCiAKICNkZWZpbmUgSVhHQkVfRUVDX1NJWkVfU0hJRlQgICAgICAgICAgMTEKICNkZWZpbmUgSVhHQkVfRUVQUk9NX1dPUkRfU0laRV9TSElGVCAgNgpAQCAtMTU2Myw4ICsxNjMzLDEwIEBACiAjZGVmaW5lIElYR0JFX0ZXX1BUUiAgICAgICAgICAgIDB4MEYKICNkZWZpbmUgSVhHQkVfUEJBTlVNMF9QVFIgICAgICAgMHgxNQogI2RlZmluZSBJWEdCRV9QQkFOVU0xX1BUUiAgICAgICAweDE2Ci0jZGVmaW5lIElYR0JFX0RFVklDRV9DQVBTICAgICAgIDB4MkMKKyNkZWZpbmUgSVhHQkVfRlJFRV9TUEFDRV9QVFIgICAgMFgzRQogI2RlZmluZSBJWEdCRV9TQU5fTUFDX0FERFJfUFRSICAweDI4CisjZGVmaW5lIElYR0JFX0RFVklDRV9DQVBTICAgICAgIDB4MkMKKyNkZWZpbmUgSVhHQkVfU0VSSUFMX05VTUJFUl9NQUNfQUREUiAweDExCiAjZGVmaW5lIElYR0JFX1BDSUVfTVNJWF84MjU5OV9DQVBTICAweDcyCiAjZGVmaW5lIElYR0JFX1BDSUVfTVNJWF84MjU5OF9DQVBTICAweDYyCiAKQEAgLTE2MDEsNiArMTY3MywxMCBAQAogCiAjZGVmaW5lIElYR0JFX0VUSF9MRU5HVEhfT0ZfQUREUkVTUyAgIDYKIAorI2RlZmluZSBJWEdCRV9FRVBST01fUEFHRV9TSVpFX01BWCAgICAgICAxMjgKKyNkZWZpbmUgSVhHQkVfRUVQUk9NX1JEX0JVRkZFUl9NQVhfQ09VTlQgNTEyIC8qIEVFUFJPTSB3b3JkcyAjIHJlYWQgaW4gYnVyc3QgKi8KKyNkZWZpbmUgSVhHQkVfRUVQUk9NX1dSX0JVRkZFUl9NQVhfQ09VTlQgMjU2IC8qIEVFUFJPTSB3b3JkcyAjIHdyIGluIGJ1cnN0ICovCisKICNpZm5kZWYgSVhHQkVfRUVQUk9NX0dSQU5UX0FUVEVNUFRTCiAjZGVmaW5lIElYR0JFX0VFUFJPTV9HUkFOVF9BVFRFTVBUUyAxMDAwIC8qIEVFUFJPTSAjIGF0dGVtcHRzIHRvIGdhaW4gZ3JhbnQgKi8KICNlbmRpZgpAQCAtMTYxNiwxNCArMTY5MiwyNSBAQAogI2RlZmluZSBJWEdCRV9GTFVET05FX0FUVEVNUFRTIDIwMDAwCiAjZW5kaWYKIAorI2RlZmluZSBJWEdCRV9QQ0lFX0NUUkwyICAgICAgICAgICAgICAgICAweDUgICAvKiBQQ0llIENvbnRyb2wgMiBPZmZzZXQgKi8KKyNkZWZpbmUgSVhHQkVfUENJRV9DVFJMMl9EVU1NWV9FTkFCTEUgICAgMHg4ICAgLyogRHVtbXkgRnVuY3Rpb24gRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1BDSUVfQ1RSTDJfTEFOX0RJU0FCTEUgICAgIDB4MiAgIC8qIExBTiBQQ0kgRGlzYWJsZSAqLworI2RlZmluZSBJWEdCRV9QQ0lFX0NUUkwyX0RJU0FCTEVfU0VMRUNUICAweDEgICAvKiBMQU4gRGlzYWJsZSBTZWxlY3QgKi8KKwogI2RlZmluZSBJWEdCRV9TQU5fTUFDX0FERFJfUE9SVDBfT0ZGU0VUICAweDAKICNkZWZpbmUgSVhHQkVfU0FOX01BQ19BRERSX1BPUlQxX09GRlNFVCAgMHgzCiAjZGVmaW5lIElYR0JFX0RFVklDRV9DQVBTX0FMTE9XX0FOWV9TRlAgIDB4MQogI2RlZmluZSBJWEdCRV9ERVZJQ0VfQ0FQU19GQ09FX09GRkxPQURTICAweDIKKyNkZWZpbmUgSVhHQkVfRldfTEVTTV9QQVJBTUVURVJTX1BUUiAgICAgMHgyCisjZGVmaW5lIElYR0JFX0ZXX0xFU01fU1RBVEVfMSAgICAgICAgICAgIDB4MQorI2RlZmluZSBJWEdCRV9GV19MRVNNX1NUQVRFX0VOQUJMRUQgICAgICAweDgwMDAgLyogTEVTTSBFbmFibGUgYml0ICovCiAjZGVmaW5lIElYR0JFX0ZXX1BBU1NUSFJPVUdIX1BBVENIX0NPTkZJR19QVFIgICAweDQKLSNkZWZpbmUgSVhHQkVfRldfUEFUQ0hfVkVSU0lPTl80ICAgMHg3Ci0KLS8qIEFsdGVybmF0aXZlIFNBTiBNQUMgQWRkcmVzcyBCbG9jayAqLworI2RlZmluZSBJWEdCRV9GV19QQVRDSF9WRVJTSU9OXzQgICAgICAgICAweDcKKyNkZWZpbmUgSVhHQkVfRkNPRV9JQkFfQ0FQU19CTEtfUFRSICAgICAgICAgMHgzMyAvKiBpU0NTSS9GQ09FIGJsb2NrICovCisjZGVmaW5lIElYR0JFX0ZDT0VfSUJBX0NBUFNfRkNPRSAgICAgICAgICAgIDB4MjAgLyogRkNPRSBmbGFncyAqLworI2RlZmluZSBJWEdCRV9JU0NTSV9GQ09FX0JMS19QVFIgICAgICAgICAgICAweDE3IC8qIGlTQ1NJL0ZDT0UgYmxvY2sgKi8KKyNkZWZpbmUgSVhHQkVfSVNDU0lfRkNPRV9GTEFHU19PRkZTRVQgICAgICAgMHgwICAvKiBGQ09FIGZsYWdzICovCisjZGVmaW5lIElYR0JFX0lTQ1NJX0ZDT0VfRkxBR1NfRU5BQkxFICAgICAgIDB4MSAgLyogRkNPRSBmbGFncyBlbmFibGUgYml0ICovCiAjZGVmaW5lIElYR0JFX0FMVF9TQU5fTUFDX0FERFJfQkxLX1BUUiAgICAgIDB4MjcgLyogQWx0LiBTQU4gTUFDIGJsb2NrICovCiAjZGVmaW5lIElYR0JFX0FMVF9TQU5fTUFDX0FERFJfQ0FQU19PRkZTRVQgIDB4MCAvKiBBbHQuIFNBTiBNQUMgY2FwYWJpbGl0eSAqLwogI2RlZmluZSBJWEdCRV9BTFRfU0FOX01BQ19BRERSX1BPUlQwX09GRlNFVCAweDEgLyogQWx0LiBTQU4gTUFDIDAgb2Zmc2V0ICovCkBAIC0xNjg4LDYgKzE3NzUsNyBAQAogLyogVHJhbnNtaXQgQ29uZmlnIG1hc2tzICovCiAjZGVmaW5lIElYR0JFX1RYRENUTF9FTkFCTEUgICAgIDB4MDIwMDAwMDAgLyogRW5hYmxlIHNwZWNpZmljIFR4IFF1ZXVlICovCiAjZGVmaW5lIElYR0JFX1RYRENUTF9TV0ZMU0ggICAgIDB4MDQwMDAwMDAgLyogVHggRGVzYy4gd3JpdGUtYmFjayBmbHVzaGluZyAqLworI2RlZmluZSBJWEdCRV9UWERDVExfV1RIUkVTSF9TSElGVCAgICAgIDE2IC8qIHNoaWZ0IHRvIFdUSFJFU0ggYml0cyAqLwogLyogRW5hYmxlIHNob3J0IHBhY2tldCBwYWRkaW5nIHRvIDY0IGJ5dGVzICovCiAjZGVmaW5lIElYR0JFX1RYX1BBRF9FTkFCTEUgICAgIDB4MDAwMDA0MDAKICNkZWZpbmUgSVhHQkVfSlVNQk9fRlJBTUVfRU5BQkxFIDB4MDAwMDAwMDQgIC8qIEFsbG93IGp1bWJvIGZyYW1lcyAqLwpAQCAtMTcwMSw5ICsxNzg5LDkgQEAKICNkZWZpbmUgSVhHQkVfUlhDVFJMX1JYRU4gICAgICAgMHgwMDAwMDAwMSAgLyogRW5hYmxlIFJlY2VpdmVyICovCiAjZGVmaW5lIElYR0JFX1JYQ1RSTF9ETUJZUFMgICAgIDB4MDAwMDAwMDIgIC8qIERlc2NyaXB0b3IgTW9uaXRvciBCeXBhc3MgKi8KICNkZWZpbmUgSVhHQkVfUlhEQ1RMX0VOQUJMRSAgICAgMHgwMjAwMDAwMCAgLyogRW5hYmxlIHNwZWNpZmljIFJ4IFF1ZXVlICovCi0jZGVmaW5lIElYR0JFX1JYRENUTF9WTUUgICAgICAgIDB4NDAwMDAwMDAgIC8qIFZMQU4gbW9kZSBlbmFibGUgKi8KICNkZWZpbmUgSVhHQkVfUlhEQ1RMX1JMUE1MTUFTSyAgMHgwMDAwM0ZGRiAgLyogT25seSBzdXBwb3J0ZWQgb24gdGhlIFg1NDAgKi8KICNkZWZpbmUgSVhHQkVfUlhEQ1RMX1JMUE1MX0VOICAgMHgwMDAwODAwMAorI2RlZmluZSBJWEdCRV9SWERDVExfVk1FICAgICAgICAweDQwMDAwMDAwICAvKiBWTEFOIG1vZGUgZW5hYmxlICovCiAKICNkZWZpbmUgSVhHQkVfRkNUUkxfU0JQIDB4MDAwMDAwMDIgLyogU3RvcmUgQmFkIFBhY2tldCAqLwogI2RlZmluZSBJWEdCRV9GQ1RSTF9NUEUgMHgwMDAwMDEwMCAvKiBNdWx0aWNhc3QgUHJvbWlzY3VvdXMgRW5hKi8KQEAgLTE3MTksNiArMTgwNyw4IEBACiAjZGVmaW5lIElYR0JFX01GTENOX1JQRkNFICAgICAgIDB4MDAwMDAwMDQgLyogUmVjZWl2ZSBQcmlvcml0eSBGQyBFbmFibGUgKi8KICNkZWZpbmUgSVhHQkVfTUZMQ05fUkZDRSAgICAgICAgMHgwMDAwMDAwOCAvKiBSZWNlaXZlIEZDIEVuYWJsZSAqLwogCisjZGVmaW5lIElYR0JFX01GTENOX1JQRkNFX1NISUZUCQkgNAorCiAvKiBNdWx0aXBsZSBSZWNlaXZlIFF1ZXVlIENvbnRyb2wgKi8KICNkZWZpbmUgSVhHQkVfTVJRQ19SU1NFTiAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAgLyogUlNTIEVuYWJsZSAqLwogI2RlZmluZSBJWEdCRV9NUlFDX01SUUVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHhGIC8qIEJpdHMgMzowICovCkBAIC0xODU5LDYgKzE5NDksOCBAQAogI2RlZmluZSBJWEdCRV9SWERBRFZfUEtUVFlQRV9NQVNLICAgICAgIDB4MDAwMEZGRjAKICNkZWZpbmUgSVhHQkVfUlhEQURWX1BLVFRZUEVfTUFTS19FWCAgICAweDAwMDFGRkYwCiAjZGVmaW5lIElYR0JFX1JYREFEVl9IRFJCVUZMRU5fTUFTSyAgICAgMHgwMDAwN0ZFMAorI2RlZmluZSBJWEdCRV9SWERBRFZfUlNDQ05UX01BU0sgICAgICAgIDB4MDAxRTAwMDAKKyNkZWZpbmUgSVhHQkVfUlhEQURWX1JTQ0NOVF9TSElGVCAgICAgICAxNwogI2RlZmluZSBJWEdCRV9SWERBRFZfSERSQlVGTEVOX1NISUZUICAgIDUKICNkZWZpbmUgSVhHQkVfUlhEQURWX1NQTElUSEVBREVSX0VOICAgICAweDAwMDAxMDAwCiAjZGVmaW5lIElYR0JFX1JYREFEVl9TUEggICAgICAgICAgICAgICAgMHg4MDAwCkBAIC0xOTM0LDE1ICsyMDI2LDYgQEAKICNkZWZpbmUgSVhHQkVfVkZMUkUoX2kpICAgICAgICAgICAgICAgICAgKCgoX2kgJiAxKSA/IDB4MDAxQzAgOiAweDAwNjAwKSkKICNkZWZpbmUgSVhHQkVfVkZMUkVDKF9pKSAgICAgICAgICAgICAgICAgKDB4MDA3MDAgKyAoX2kgKiA0KSkKIAotLyogTGl0dGxlIEVuZGlhbiBkZWZpbmVzICovCi0jaWZuZGVmIF9fbGUzMgotI2RlZmluZSBfX2xlMzIgIHUzMgotI2VuZGlmCi0jaWZuZGVmIF9fbGU2NAotI2RlZmluZSBfX2xlNjQgIHU2NAotCi0jZW5kaWYKLQogZW51bSBpeGdiZV9mZGlyX3BiYWxsb2NfdHlwZSB7CiAJSVhHQkVfRkRJUl9QQkFMTE9DXzY0SyA9IDAsCiAJSVhHQkVfRkRJUl9QQkFMTE9DXzEyOEssCkBAIC0yMTQxLDggKzIyMjQsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwgfCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEwpCiAKLSNkZWZpbmUgSVhHQkVfUENJRV9ERVZfQ1RSTF8yIDB4QzgKLSNkZWZpbmUgUENJRV9DT01QTF9UT19WQUxVRSAweDA1CiAKIC8qIFBoeXNpY2FsIGxheWVyIHR5cGUgKi8KIHR5cGVkZWYgdTMyIGl4Z2JlX3BoeXNpY2FsX2xheWVyOwpAQCAtMjMxNSw2ICsyMzk2LDcgQEAKIGVudW0gaXhnYmVfbWVkaWFfdHlwZSB7CiAJaXhnYmVfbWVkaWFfdHlwZV91bmtub3duID0gMCwKIAlpeGdiZV9tZWRpYV90eXBlX2ZpYmVyLAorCWl4Z2JlX21lZGlhX3R5cGVfZmliZXJfbGNvLAogCWl4Z2JlX21lZGlhX3R5cGVfY29wcGVyLAogCWl4Z2JlX21lZGlhX3R5cGVfYmFja3BsYW5lLAogCWl4Z2JlX21lZGlhX3R5cGVfY3g0LApAQCAtMjQ3OCw2ICsyNTYwLDEwIEBACiAJdTY0IGZjb2VwdGM7CiAJdTY0IGZjb2Vkd3JjOwogCXU2NCBmY29lZHd0YzsKKwl1NjQgYjJvc3BjOworCXU2NCBiMm9ncHJjOworCXU2NCBvMmJncHRjOworCXU2NCBvMmJzcGM7CiB9OwogCiAvKiBmb3J3YXJkIGRlY2xhcmF0aW9uICovCkBAIC0yNDkxLDcgKzI1NzcsOSBAQAogc3RydWN0IGl4Z2JlX2VlcHJvbV9vcGVyYXRpb25zIHsKIAlzMzIgKCppbml0X3BhcmFtcykoc3RydWN0IGl4Z2JlX2h3ICopOwogCXMzMiAoKnJlYWQpKHN0cnVjdCBpeGdiZV9odyAqLCB1MTYsIHUxNiAqKTsKKwlzMzIgKCpyZWFkX2J1ZmZlcikoc3RydWN0IGl4Z2JlX2h3ICosIHUxNiwgdTE2LCB1MTYgKik7CiAJczMyICgqd3JpdGUpKHN0cnVjdCBpeGdiZV9odyAqLCB1MTYsIHUxNik7CisJczMyICgqd3JpdGVfYnVmZmVyKShzdHJ1Y3QgaXhnYmVfaHcgKiwgdTE2LCB1MTYsIHUxNiAqKTsKIAlzMzIgKCp2YWxpZGF0ZV9jaGVja3N1bSkoc3RydWN0IGl4Z2JlX2h3ICosIHUxNiAqKTsKIAlzMzIgKCp1cGRhdGVfY2hlY2tzdW0pKHN0cnVjdCBpeGdiZV9odyAqKTsKIAl1MTYgKCpjYWxjX2NoZWNrc3VtKShzdHJ1Y3QgaXhnYmVfaHcgKik7CkBAIC0yNTc3LDYgKzI2NjUsNyBAQAogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VtYXBob3JlX2RlbGF5OwogCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZF9zaXplOwogCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc19iaXRzOworCXUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZF9wYWdlX3NpemU7CiB9OwogCiAjZGVmaW5lIElYR0JFX0ZMQUdTX0RPVUJMRV9SRVNFVF9SRVFVSVJFRAkweDAxCkBAIC0yNTk3LDYgKzI2ODYsNyBAQAogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmZ0X3NpemU7CiAJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fcmFyX2VudHJpZXM7CiAJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXJfaGlnaHdhdGVyOworCXUzMgkJCQlyeF9wYl9zaXplOwogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3R4X3F1ZXVlczsKIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9yeF9xdWV1ZXM7CiAJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbXNpeF92ZWN0b3JzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfeDU0MC5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfeDU0MC5jCmluZGV4IGQ5MzIzYzAuLjRlZDY4N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3g1NDAuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV94NTQwLmMKQEAgLTM3LDYgKzM3LDcgQEAKICNkZWZpbmUgSVhHQkVfWDU0MF9SQVJfRU5UUklFUyAgIDEyOAogI2RlZmluZSBJWEdCRV9YNTQwX01DX1RCTF9TSVpFICAgMTI4CiAjZGVmaW5lIElYR0JFX1g1NDBfVkZUX1RCTF9TSVpFICAxMjgKKyNkZWZpbmUgSVhHQkVfWDU0MF9SWF9QQl9TSVpFCSAzODQKIAogc3RhdGljIHMzMiBpeGdiZV91cGRhdGVfZmxhc2hfWDU0MChzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKIHN0YXRpYyBzMzIgaXhnYmVfcG9sbF9mbGFzaF91cGRhdGVfZG9uZV9YNTQwKHN0cnVjdCBpeGdiZV9odyAqaHcpOwpAQCAtMjI2LDYgKzIyNywyOCBAQAogfQogCiAvKioKKyAqICBpeGdiZV9zdGFydF9od19YNTQwIC0gUHJlcGFyZSBoYXJkd2FyZSBmb3IgVHgvUngKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIFN0YXJ0cyB0aGUgaGFyZHdhcmUgdXNpbmcgdGhlIGdlbmVyaWMgc3RhcnRfaHcgZnVuY3Rpb24KKyAqICBhbmQgdGhlIGdlbmVyYXRpb24gc3RhcnRfaHcgZnVuY3Rpb24uCisgKiAgVGhlbiBwZXJmb3JtcyByZXZpc2lvbi1zcGVjaWZpYyBvcGVyYXRpb25zLCBpZiBhbnkuCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX3N0YXJ0X2h3X1g1NDAoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzMzIgcmV0X3ZhbCA9IDA7CisKKwlyZXRfdmFsID0gaXhnYmVfc3RhcnRfaHdfZ2VuZXJpYyhodyk7CisJaWYgKHJldF92YWwgIT0gMCkKKwkJZ290byBvdXQ7CisKKwlyZXRfdmFsID0gaXhnYmVfc3RhcnRfaHdfZ2VuMihodyk7CisJaHctPm1hYy5yeF9wYl9zaXplID0gSVhHQkVfWDU0MF9SWF9QQl9TSVpFOworb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKICAqICBpeGdiZV9nZXRfc3VwcG9ydGVkX3BoeXNpY2FsX2xheWVyX1g1NDAgLSBSZXR1cm5zIHBoeXNpY2FsIGxheWVyIHR5cGUKICAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCiAgKgpAQCAtMjgxLDc0ICszMDQsMTA1IEBACiB9CiAKIC8qKgotICogaXhnYmVfcmVhZF9lZXJkX1g1NDAgLSBSZWFkIEVFUFJPTSB3b3JkIHVzaW5nIEVFUkQKLSAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKLSAqIEBvZmZzZXQ6IG9mZnNldCBvZiB3b3JkIGluIHRoZSBFRVBST00gdG8gcmVhZAotICogQGRhdGE6IHdvcmQgcmVhZCBmcm9tIHRoZSBFRVJQT00KKyAqICBpeGdiZV9yZWFkX2VlcmRfWDU0MC0gUmVhZCBFRVBST00gd29yZCB1c2luZyBFRVJECisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBvZmZzZXQ6IG9mZnNldCBvZiAgd29yZCBpbiB0aGUgRUVQUk9NIHRvIHJlYWQKKyAqICBAZGF0YTogd29yZCByZWFkIGZyb20gdGhlIEVFUFJPTQorICoKKyAqICBSZWFkcyBhIDE2IGJpdCB3b3JkIGZyb20gdGhlIEVFUFJPTSB1c2luZyB0aGUgRUVSRCByZWdpc3Rlci4KICAqKi8KIHN0YXRpYyBzMzIgaXhnYmVfcmVhZF9lZXJkX1g1NDAoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwgdTE2ICpkYXRhKQogewotCXMzMiBzdGF0dXM7CisJczMyIHN0YXR1cyA9IDA7CiAKLQlpZiAoaHctPm1hYy5vcHMuYWNxdWlyZV9zd2Z3X3N5bmMoaHcsIElYR0JFX0dTU1JfRUVQX1NNKSA9PSAwKQorCWlmIChody0+bWFjLm9wcy5hY3F1aXJlX3N3Zndfc3luYyhodywgSVhHQkVfR1NTUl9FRVBfU00pID09CisJICAgIDApCiAJCXN0YXR1cyA9IGl4Z2JlX3JlYWRfZWVyZF9nZW5lcmljKGh3LCBvZmZzZXQsIGRhdGEpOwogCWVsc2UKIAkJc3RhdHVzID0gSVhHQkVfRVJSX1NXRldfU1lOQzsKIAotCWl4Z2JlX3JlbGVhc2Vfc3dmd19zeW5jX1g1NDAoaHcsIElYR0JFX0dTU1JfRUVQX1NNKTsKKwlody0+bWFjLm9wcy5yZWxlYXNlX3N3Zndfc3luYyhodywgSVhHQkVfR1NTUl9FRVBfU00pOwogCXJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgotICogaXhnYmVfd3JpdGVfZWV3cl9YNTQwIC0gV3JpdGUgRUVQUk9NIHdvcmQgdXNpbmcgRUVXUgotICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQotICogQG9mZnNldDogb2Zmc2V0IG9mICB3b3JkIGluIHRoZSBFRVBST00gdG8gd3JpdGUKLSAqIEBkYXRhOiB3b3JkIHdyaXRlIHRvIHRoZSBFRVBST00KKyAqICBpeGdiZV9yZWFkX2VlcmRfYnVmZmVyX1g1NDAgLSBSZWFkIEVFUFJPTSB3b3JkKHMpIHVzaW5nIEVFUkQKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQG9mZnNldDogb2Zmc2V0IG9mICB3b3JkIGluIHRoZSBFRVBST00gdG8gcmVhZAorICogIEB3b3JkczogbnVtYmVyIG9mIHdvcmRzCisgKiAgQGRhdGE6IHdvcmQocykgcmVhZCBmcm9tIHRoZSBFRVBST00KICAqCi0gKiBXcml0ZSBhIDE2IGJpdCB3b3JkIHRvIHRoZSBFRVBST00gdXNpbmcgdGhlIEVFV1IgcmVnaXN0ZXIuCisgKiAgUmVhZHMgYSAxNiBiaXQgd29yZChzKSBmcm9tIHRoZSBFRVBST00gdXNpbmcgdGhlIEVFUkQgcmVnaXN0ZXIuCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX3JlYWRfZWVyZF9idWZmZXJfWDU0MChzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorCQkJCSAgICAgICB1MTYgb2Zmc2V0LCB1MTYgd29yZHMsIHUxNiAqZGF0YSkKK3sKKwlzMzIgc3RhdHVzID0gMDsKKworCWlmIChody0+bWFjLm9wcy5hY3F1aXJlX3N3Zndfc3luYyhodywgSVhHQkVfR1NTUl9FRVBfU00pID09CisJICAgIDApCisJCXN0YXR1cyA9IGl4Z2JlX3JlYWRfZWVyZF9idWZmZXJfZ2VuZXJpYyhodywgb2Zmc2V0LAorCQkJCQkJCXdvcmRzLCBkYXRhKTsKKwllbHNlCisJCXN0YXR1cyA9IElYR0JFX0VSUl9TV0ZXX1NZTkM7CisKKwlody0+bWFjLm9wcy5yZWxlYXNlX3N3Zndfc3luYyhodywgSVhHQkVfR1NTUl9FRVBfU00pOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX3dyaXRlX2Vld3JfWDU0MCAtIFdyaXRlIEVFUFJPTSB3b3JkIHVzaW5nIEVFV1IKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQG9mZnNldDogb2Zmc2V0IG9mICB3b3JkIGluIHRoZSBFRVBST00gdG8gd3JpdGUKKyAqICBAZGF0YTogd29yZCB3cml0ZSB0byB0aGUgRUVQUk9NCisgKgorICogIFdyaXRlIGEgMTYgYml0IHdvcmQgdG8gdGhlIEVFUFJPTSB1c2luZyB0aGUgRUVXUiByZWdpc3Rlci4KICAqKi8KIHN0YXRpYyBzMzIgaXhnYmVfd3JpdGVfZWV3cl9YNTQwKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUxNiBvZmZzZXQsIHUxNiBkYXRhKQogewotCXUzMiBlZXdyOwotCXMzMiBzdGF0dXM7CisJczMyIHN0YXR1cyA9IDA7CiAKLQlody0+ZWVwcm9tLm9wcy5pbml0X3BhcmFtcyhodyk7Ci0KLQlpZiAob2Zmc2V0ID49IGh3LT5lZXByb20ud29yZF9zaXplKSB7Ci0JCXN0YXR1cyA9IElYR0JFX0VSUl9FRVBST007Ci0JCWdvdG8gb3V0OwotCX0KLQotCWVld3IgPSAob2Zmc2V0IDw8IElYR0JFX0VFUFJPTV9SV19BRERSX1NISUZUKSB8Ci0JICAgICAgIChkYXRhIDw8IElYR0JFX0VFUFJPTV9SV19SRUdfREFUQSkgfAotCSAgICAgICBJWEdCRV9FRVBST01fUldfUkVHX1NUQVJUOwotCi0JaWYgKGh3LT5tYWMub3BzLmFjcXVpcmVfc3dmd19zeW5jKGh3LCBJWEdCRV9HU1NSX0VFUF9TTSkgPT0gMCkgewotCQlzdGF0dXMgPSBpeGdiZV9wb2xsX2VlcmRfZWV3cl9kb25lKGh3LCBJWEdCRV9OVk1fUE9MTF9XUklURSk7Ci0JCWlmIChzdGF0dXMgIT0gMCkgewotCQkJaHdfZGJnKGh3LCAiRWVwcm9tIHdyaXRlIEVFV1IgdGltZWQgb3V0XG4iKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FRVdSLCBlZXdyKTsKLQotCQlzdGF0dXMgPSBpeGdiZV9wb2xsX2VlcmRfZWV3cl9kb25lKGh3LCBJWEdCRV9OVk1fUE9MTF9XUklURSk7Ci0JCWlmIChzdGF0dXMgIT0gMCkgewotCQkJaHdfZGJnKGh3LCAiRWVwcm9tIHdyaXRlIEVFV1IgdGltZWQgb3V0XG4iKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfSBlbHNlIHsKKwlpZiAoaHctPm1hYy5vcHMuYWNxdWlyZV9zd2Z3X3N5bmMoaHcsIElYR0JFX0dTU1JfRUVQX1NNKSA9PSAwKQorCQlzdGF0dXMgPSBpeGdiZV93cml0ZV9lZXdyX2dlbmVyaWMoaHcsIG9mZnNldCwgZGF0YSk7CisJZWxzZQogCQlzdGF0dXMgPSBJWEdCRV9FUlJfU1dGV19TWU5DOwotCX0KIAotb3V0OgotCWl4Z2JlX3JlbGVhc2Vfc3dmd19zeW5jX1g1NDAoaHcsIElYR0JFX0dTU1JfRUVQX1NNKTsKKwlody0+bWFjLm9wcy5yZWxlYXNlX3N3Zndfc3luYyhodywgSVhHQkVfR1NTUl9FRVBfU00pOwogCXJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgotICogaXhnYmVfY2FsY19lZXByb21fY2hlY2tzdW1fWDU0MCAtIENhbGN1bGF0ZXMgYW5kIHJldHVybnMgdGhlIGNoZWNrc3VtCi0gKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgaXhnYmVfd3JpdGVfZWV3cl9idWZmZXJfWDU0MCAtIFdyaXRlIEVFUFJPTSB3b3JkKHMpIHVzaW5nIEVFV1IKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQG9mZnNldDogb2Zmc2V0IG9mICB3b3JkIGluIHRoZSBFRVBST00gdG8gd3JpdGUKKyAqICBAd29yZHM6IG51bWJlciBvZiB3b3JkcworICogIEBkYXRhOiB3b3JkKHMpIHdyaXRlIHRvIHRoZSBFRVBST00KKyAqCisgKiAgV3JpdGUgYSAxNiBiaXQgd29yZChzKSB0byB0aGUgRUVQUk9NIHVzaW5nIHRoZSBFRVdSIHJlZ2lzdGVyLgorICoqLworc3RhdGljIHMzMiBpeGdiZV93cml0ZV9lZXdyX2J1ZmZlcl9YNTQwKHN0cnVjdCBpeGdiZV9odyAqaHcsCisJCQkJCXUxNiBvZmZzZXQsIHUxNiB3b3JkcywgdTE2ICpkYXRhKQoreworCXMzMiBzdGF0dXMgPSAwOworCisJaWYgKGh3LT5tYWMub3BzLmFjcXVpcmVfc3dmd19zeW5jKGh3LCBJWEdCRV9HU1NSX0VFUF9TTSkgPT0KKwkgICAgMCkKKwkJc3RhdHVzID0gaXhnYmVfd3JpdGVfZWV3cl9idWZmZXJfZ2VuZXJpYyhodywgb2Zmc2V0LAorCQkJCQkJCSB3b3JkcywgZGF0YSk7CisJZWxzZQorCQlzdGF0dXMgPSBJWEdCRV9FUlJfU1dGV19TWU5DOworCisJaHctPm1hYy5vcHMucmVsZWFzZV9zd2Z3X3N5bmMoaHcsIElYR0JFX0dTU1JfRUVQX1NNKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9jYWxjX2VlcHJvbV9jaGVja3N1bV9YNTQwIC0gQ2FsY3VsYXRlcyBhbmQgcmV0dXJucyB0aGUgY2hlY2tzdW0KKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB1c2Ugc3luY2hyb25pemF0aW9uIGZvciBFRVJEIGFuZCBFRVdSLiBJdCBjYW4KKyAqICBiZSB1c2VkIGludGVybmFsbHkgYnkgZnVuY3Rpb24gd2hpY2ggdXRpbGl6ZSBpeGdiZV9hY3F1aXJlX3N3Zndfc3luY19YNTQwLgorICoKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCiAgKiovCiBzdGF0aWMgdTE2IGl4Z2JlX2NhbGNfZWVwcm9tX2NoZWNrc3VtX1g1NDAoc3RydWN0IGl4Z2JlX2h3ICpodykKIHsKQEAgLTM1OSw5ICs0MTMsMTUgQEAKIAl1MTYgcG9pbnRlciA9IDA7CiAJdTE2IHdvcmQgPSAwOwogCisJLyoKKwkgKiBEbyBub3QgdXNlIGh3LT5lZXByb20ub3BzLnJlYWQgYmVjYXVzZSB3ZSBkbyBub3Qgd2FudCB0byB0YWtlCisJICogdGhlIHN5bmNocm9uaXphdGlvbiBzZW1hcGhvcmVzIGhlcmUuIEluc3RlYWQgdXNlCisJICogaXhnYmVfcmVhZF9lZXJkX2dlbmVyaWMKKwkgKi8KKwogCS8qIEluY2x1ZGUgMHgwLTB4M0YgaW4gdGhlIGNoZWNrc3VtICovCiAJZm9yIChpID0gMDsgaSA8IElYR0JFX0VFUFJPTV9DSEVDS1NVTTsgaSsrKSB7Ci0JCWlmIChody0+ZWVwcm9tLm9wcy5yZWFkKGh3LCBpLCAmd29yZCkgIT0gMCkgeworCQlpZiAoaXhnYmVfcmVhZF9lZXJkX2dlbmVyaWMoaHcsIGksICZ3b3JkKSAhPSAwKSB7CiAJCQlod19kYmcoaHcsICJFRVBST00gcmVhZCBmYWlsZWRcbiIpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTM3Niw3ICs0MzYsNyBAQAogCQlpZiAoaSA9PSBJWEdCRV9QSFlfUFRSIHx8IGkgPT0gSVhHQkVfT1BUSU9OX1JPTV9QVFIpCiAJCQljb250aW51ZTsKIAotCQlpZiAoaHctPmVlcHJvbS5vcHMucmVhZChodywgaSwgJnBvaW50ZXIpICE9IDApIHsKKwkJaWYgKGl4Z2JlX3JlYWRfZWVyZF9nZW5lcmljKGh3LCBpLCAmcG9pbnRlcikgIT0gMCkgewogCQkJaHdfZGJnKGh3LCAiRUVQUk9NIHJlYWQgZmFpbGVkXG4iKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0zODYsNyArNDQ2LDcgQEAKIAkJICAgIHBvaW50ZXIgPj0gaHctPmVlcHJvbS53b3JkX3NpemUpCiAJCQljb250aW51ZTsKIAotCQlpZiAoaHctPmVlcHJvbS5vcHMucmVhZChodywgcG9pbnRlciwgJmxlbmd0aCkgIT0gMCkgeworCQlpZiAoaXhnYmVfcmVhZF9lZXJkX2dlbmVyaWMoaHcsIHBvaW50ZXIsICZsZW5ndGgpICE9IDApIHsKIAkJCWh3X2RiZyhodywgIkVFUFJPTSByZWFkIGZhaWxlZFxuIik7CiAJCQlicmVhazsKIAkJfQpAQCAtMzk3LDcgKzQ1Nyw3IEBACiAJCQljb250aW51ZTsKIAogCQlmb3IgKGogPSBwb2ludGVyKzE7IGogPD0gcG9pbnRlcitsZW5ndGg7IGorKykgewotCQkJaWYgKGh3LT5lZXByb20ub3BzLnJlYWQoaHcsIGosICZ3b3JkKSAhPSAwKSB7CisJCQlpZiAoaXhnYmVfcmVhZF9lZXJkX2dlbmVyaWMoaHcsIGosICZ3b3JkKSAhPSAwKSB7CiAJCQkJaHdfZGJnKGh3LCAiRUVQUk9NIHJlYWQgZmFpbGVkXG4iKTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTQxMSw2ICs0NzEsNjIgQEAKIH0KIAogLyoqCisgKiAgaXhnYmVfdmFsaWRhdGVfZWVwcm9tX2NoZWNrc3VtX1g1NDAgLSBWYWxpZGF0ZSBFRVBST00gY2hlY2tzdW0KKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGNoZWNrc3VtX3ZhbDogY2FsY3VsYXRlZCBjaGVja3N1bQorICoKKyAqICBQZXJmb3JtcyBjaGVja3N1bSBjYWxjdWxhdGlvbiBhbmQgdmFsaWRhdGVzIHRoZSBFRVBST00gY2hlY2tzdW0uICBJZiB0aGUKKyAqICBjYWxsZXIgZG9lcyBub3QgbmVlZCBjaGVja3N1bV92YWwsIHRoZSB2YWx1ZSBjYW4gYmUgTlVMTC4KKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfdmFsaWRhdGVfZWVwcm9tX2NoZWNrc3VtX1g1NDAoc3RydWN0IGl4Z2JlX2h3ICpodywKKwkJCQkJICAgICAgIHUxNiAqY2hlY2tzdW1fdmFsKQoreworCXMzMiBzdGF0dXM7CisJdTE2IGNoZWNrc3VtOworCXUxNiByZWFkX2NoZWNrc3VtID0gMDsKKworCS8qCisJICogUmVhZCB0aGUgZmlyc3Qgd29yZCBmcm9tIHRoZSBFRVBST00uIElmIHRoaXMgdGltZXMgb3V0IG9yIGZhaWxzLCBkbworCSAqIG5vdCBjb250aW51ZSBvciB3ZSBjb3VsZCBiZSBpbiBmb3IgYSB2ZXJ5IGxvbmcgd2FpdCB3aGlsZSBldmVyeQorCSAqIEVFUFJPTSByZWFkIGZhaWxzCisJICovCisJc3RhdHVzID0gaHctPmVlcHJvbS5vcHMucmVhZChodywgMCwgJmNoZWNrc3VtKTsKKworCWlmIChzdGF0dXMgIT0gMCkgeworCQlod19kYmcoaHcsICJFRVBST00gcmVhZCBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoaHctPm1hYy5vcHMuYWNxdWlyZV9zd2Z3X3N5bmMoaHcsIElYR0JFX0dTU1JfRUVQX1NNKSA9PSAwKSB7CisJCWNoZWNrc3VtID0gaHctPmVlcHJvbS5vcHMuY2FsY19jaGVja3N1bShodyk7CisKKwkJLyoKKwkJICogRG8gbm90IHVzZSBody0+ZWVwcm9tLm9wcy5yZWFkIGJlY2F1c2Ugd2UgZG8gbm90IHdhbnQgdG8gdGFrZQorCQkgKiB0aGUgc3luY2hyb25pemF0aW9uIHNlbWFwaG9yZXMgdHdpY2UgaGVyZS4KKwkJICovCisJCWl4Z2JlX3JlYWRfZWVyZF9nZW5lcmljKGh3LCBJWEdCRV9FRVBST01fQ0hFQ0tTVU0sCisJCQkJCSZyZWFkX2NoZWNrc3VtKTsKKworCQkvKgorCQkgKiBWZXJpZnkgcmVhZCBjaGVja3N1bSBmcm9tIEVFUFJPTSBpcyB0aGUgc2FtZSBhcworCQkgKiBjYWxjdWxhdGVkIGNoZWNrc3VtCisJCSAqLworCQlpZiAocmVhZF9jaGVja3N1bSAhPSBjaGVja3N1bSkKKwkJCXN0YXR1cyA9IElYR0JFX0VSUl9FRVBST01fQ0hFQ0tTVU07CisKKwkJLyogSWYgdGhlIHVzZXIgY2FyZXMsIHJldHVybiB0aGUgY2FsY3VsYXRlZCBjaGVja3N1bSAqLworCQlpZiAoY2hlY2tzdW1fdmFsKQorCQkJKmNoZWNrc3VtX3ZhbCA9IGNoZWNrc3VtOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IElYR0JFX0VSUl9TV0ZXX1NZTkM7CisJfQorCisJaHctPm1hYy5vcHMucmVsZWFzZV9zd2Z3X3N5bmMoaHcsIElYR0JFX0dTU1JfRUVQX1NNKTsKK291dDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKICAqIGl4Z2JlX3VwZGF0ZV9lZXByb21fY2hlY2tzdW1fWDU0MCAtIFVwZGF0ZXMgdGhlIEVFUFJPTSBjaGVja3N1bSBhbmQgZmxhc2gKICAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqCkBAIC00MjEsMTEgKzUzNywzNSBAQAogc3RhdGljIHMzMiBpeGdiZV91cGRhdGVfZWVwcm9tX2NoZWNrc3VtX1g1NDAoc3RydWN0IGl4Z2JlX2h3ICpodykKIHsKIAlzMzIgc3RhdHVzOworCXUxNiBjaGVja3N1bTsKIAotCXN0YXR1cyA9IGl4Z2JlX3VwZGF0ZV9lZXByb21fY2hlY2tzdW1fZ2VuZXJpYyhodyk7CisJLyoKKwkgKiBSZWFkIHRoZSBmaXJzdCB3b3JkIGZyb20gdGhlIEVFUFJPTS4gSWYgdGhpcyB0aW1lcyBvdXQgb3IgZmFpbHMsIGRvCisJICogbm90IGNvbnRpbnVlIG9yIHdlIGNvdWxkIGJlIGluIGZvciBhIHZlcnkgbG9uZyB3YWl0IHdoaWxlIGV2ZXJ5CisJICogRUVQUk9NIHJlYWQgZmFpbHMKKwkgKi8KKwlzdGF0dXMgPSBody0+ZWVwcm9tLm9wcy5yZWFkKGh3LCAwLCAmY2hlY2tzdW0pOwogCi0JaWYgKHN0YXR1cykKKwlpZiAoc3RhdHVzICE9IDApCisJCWh3X2RiZyhodywgIkVFUFJPTSByZWFkIGZhaWxlZFxuIik7CisKKwlpZiAoaHctPm1hYy5vcHMuYWNxdWlyZV9zd2Z3X3N5bmMoaHcsIElYR0JFX0dTU1JfRUVQX1NNKSA9PSAwKSB7CisJCWNoZWNrc3VtID0gaHctPmVlcHJvbS5vcHMuY2FsY19jaGVja3N1bShodyk7CisKKwkJLyoKKwkJICogRG8gbm90IHVzZSBody0+ZWVwcm9tLm9wcy53cml0ZSBiZWNhdXNlIHdlIGRvIG5vdCB3YW50IHRvCisJCSAqIHRha2UgdGhlIHN5bmNocm9uaXphdGlvbiBzZW1hcGhvcmVzIHR3aWNlIGhlcmUuCisJCSAqLworCQlzdGF0dXMgPSBpeGdiZV93cml0ZV9lZXdyX2dlbmVyaWMoaHcsIElYR0JFX0VFUFJPTV9DSEVDS1NVTSwKKwkJCQkJCSAgY2hlY2tzdW0pOworCisJaWYgKHN0YXR1cyA9PSAwKQogCQlzdGF0dXMgPSBpeGdiZV91cGRhdGVfZmxhc2hfWDU0MChodyk7CisJZWxzZQorCQlzdGF0dXMgPSBJWEdCRV9FUlJfU1dGV19TWU5DOworCX0KKworCWh3LT5tYWMub3BzLnJlbGVhc2Vfc3dmd19zeW5jKGh3LCBJWEdCRV9HU1NSX0VFUF9TTSk7CiAKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtNDUyLDcgKzU5Miw3IEBACiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FRUMsIGZsdXApOwogCiAJc3RhdHVzID0gaXhnYmVfcG9sbF9mbGFzaF91cGRhdGVfZG9uZV9YNTQwKGh3KTsKLQlpZiAoc3RhdHVzKQorCWlmIChzdGF0dXMgPT0gMCkKIAkJaHdfZGJnKGh3LCAiRmxhc2ggdXBkYXRlIGNvbXBsZXRlXG4iKTsKIAllbHNlCiAJCWh3X2RiZyhodywgIkZsYXNoIHVwZGF0ZSB0aW1lIG91dFxuIik7CkBAIC00NjYsMTEgKzYwNiwxMCBAQAogCQl9CiAKIAkJc3RhdHVzID0gaXhnYmVfcG9sbF9mbGFzaF91cGRhdGVfZG9uZV9YNTQwKGh3KTsKLQkJaWYgKHN0YXR1cykKKwkJaWYgKHN0YXR1cyA9PSAwKQogCQkJaHdfZGJnKGh3LCAiRmxhc2ggdXBkYXRlIGNvbXBsZXRlXG4iKTsKIAkJZWxzZQogCQkJaHdfZGJnKGh3LCAiRmxhc2ggdXBkYXRlIHRpbWUgb3V0XG4iKTsKLQogCX0KIG91dDoKIAlyZXR1cm4gc3RhdHVzOwpAQCAtNTQyLDcgKzY4MSw3IEBACiAJCQkgKiByZXNvdXJjZSAoc3dtYXNrKQogCQkJICovCiAJCQlpeGdiZV9yZWxlYXNlX3N3Zndfc3luY19zZW1hcGhvcmUoaHcpOwotCQkJbXNsZWVwKDUpOworCQkJdXNsZWVwX3JhbmdlKDUwMDAsIDEwMDAwKTsKIAkJfQogCX0KIApAQCAtNTY0LDcgKzcwMyw3IEBACiAJCX0KIAl9CiAKLQltc2xlZXAoNSk7CisJdXNsZWVwX3JhbmdlKDUwMDAsIDEwMDAwKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTg4LDcgKzcyNyw3IEBACiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9TV0ZXX1NZTkMsIHN3Zndfc3luYyk7CiAKIAlpeGdiZV9yZWxlYXNlX3N3Zndfc3luY19zZW1hcGhvcmUoaHcpOwotCW1zbGVlcCg1KTsKKwl1c2xlZXBfcmFuZ2UoNTAwMCwgMTAwMDApOwogfQogCiAvKioKQEAgLTY1OCwxMCArNzk3LDcwIEBACiAJSVhHQkVfV1JJVEVfRkxVU0goaHcpOwogfQogCisvKioKKyAqIGl4Z2JlX2JsaW5rX2xlZF9zdGFydF9YNTQwIC0gQmxpbmsgTEVEIGJhc2VkIG9uIGluZGV4LgorICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogQGluZGV4OiBsZWQgbnVtYmVyIHRvIGJsaW5rCisgKgorICogRGV2aWNlcyB0aGF0IGltcGxlbWVudCB0aGUgdmVyc2lvbiAyIGludGVyZmFjZToKKyAqICAgWDU0MAorICoqLworc3RhdGljIHMzMiBpeGdiZV9ibGlua19sZWRfc3RhcnRfWDU0MChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgaW5kZXgpCit7CisJdTMyIG1hY2NfcmVnOworCXUzMiBsZWRjdGxfcmVnOworCisJLyoKKwkgKiBJbiBvcmRlciBmb3IgdGhlIGJsaW5rIGJpdCBpbiB0aGUgTEVEIGNvbnRyb2wgcmVnaXN0ZXIKKwkgKiB0byB3b3JrLCBsaW5rIGFuZCBzcGVlZCBtdXN0IGJlIGZvcmNlZCBpbiB0aGUgTUFDLiBXZQorCSAqIHdpbGwgcmV2ZXJzZSB0aGlzIHdoZW4gd2Ugc3RvcCB0aGUgYmxpbmtpbmcuCisJICovCisJbWFjY19yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTUFDQyk7CisJbWFjY19yZWcgfD0gSVhHQkVfTUFDQ19GTFUgfCBJWEdCRV9NQUNDX0ZTVl8xMEcgfCBJWEdCRV9NQUNDX0ZTOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTUFDQywgbWFjY19yZWcpOworCisJLyogU2V0IHRoZSBMRUQgdG8gTElOS19VUCArIEJMSU5LLiAqLworCWxlZGN0bF9yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTEVEQ1RMKTsKKwlsZWRjdGxfcmVnICY9IH5JWEdCRV9MRURfTU9ERV9NQVNLKGluZGV4KTsKKwlsZWRjdGxfcmVnIHw9IElYR0JFX0xFRF9CTElOSyhpbmRleCk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9MRURDVEwsIGxlZGN0bF9yZWcpOworCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGl4Z2JlX2JsaW5rX2xlZF9zdG9wX1g1NDAgLSBTdG9wIGJsaW5raW5nIExFRCBiYXNlZCBvbiBpbmRleC4KKyAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqIEBpbmRleDogbGVkIG51bWJlciB0byBzdG9wIGJsaW5raW5nCisgKgorICogRGV2aWNlcyB0aGF0IGltcGxlbWVudCB0aGUgdmVyc2lvbiAyIGludGVyZmFjZToKKyAqICAgWDU0MAorICoqLworc3RhdGljIHMzMiBpeGdiZV9ibGlua19sZWRfc3RvcF9YNTQwKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiBpbmRleCkKK3sKKwl1MzIgbWFjY19yZWc7CisJdTMyIGxlZGN0bF9yZWc7CisKKwkvKiBSZXN0b3JlIHRoZSBMRUQgdG8gaXRzIGRlZmF1bHQgdmFsdWUuICovCisJbGVkY3RsX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MRURDVEwpOworCWxlZGN0bF9yZWcgJj0gfklYR0JFX0xFRF9NT0RFX01BU0soaW5kZXgpOworCWxlZGN0bF9yZWcgfD0gSVhHQkVfTEVEX0xJTktfQUNUSVZFIDw8IElYR0JFX0xFRF9NT0RFX1NISUZUKGluZGV4KTsKKwlsZWRjdGxfcmVnICY9IH5JWEdCRV9MRURfQkxJTksoaW5kZXgpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTEVEQ1RMLCBsZWRjdGxfcmVnKTsKKworCS8qIFVuZm9yY2UgbGluayBhbmQgc3BlZWQgaW4gdGhlIE1BQy4gKi8KKwltYWNjX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9NQUNDKTsKKwltYWNjX3JlZyAmPSB+KElYR0JFX01BQ0NfRkxVIHwgSVhHQkVfTUFDQ19GU1ZfMTBHIHwgSVhHQkVfTUFDQ19GUyk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NQUNDLCBtYWNjX3JlZyk7CisJSVhHQkVfV1JJVEVfRkxVU0goaHcpOworCisJcmV0dXJuIDA7Cit9CiBzdGF0aWMgc3RydWN0IGl4Z2JlX21hY19vcGVyYXRpb25zIG1hY19vcHNfWDU0MCA9IHsKIAkuaW5pdF9odyAgICAgICAgICAgICAgICA9ICZpeGdiZV9pbml0X2h3X2dlbmVyaWMsCiAJLnJlc2V0X2h3ICAgICAgICAgICAgICAgPSAmaXhnYmVfcmVzZXRfaHdfWDU0MCwKLQkuc3RhcnRfaHcgICAgICAgICAgICAgICA9ICZpeGdiZV9zdGFydF9od19nZW5lcmljLAorCS5zdGFydF9odyAgICAgICAgICAgICAgID0gJml4Z2JlX3N0YXJ0X2h3X1g1NDAsCiAJLmNsZWFyX2h3X2NudHJzICAgICAgICAgPSAmaXhnYmVfY2xlYXJfaHdfY250cnNfZ2VuZXJpYywKIAkuZ2V0X21lZGlhX3R5cGUgICAgICAgICA9ICZpeGdiZV9nZXRfbWVkaWFfdHlwZV9YNTQwLAogCS5nZXRfc3VwcG9ydGVkX3BoeXNpY2FsX2xheWVyID0KQEAgLTY2OSw3ICs4NjgsNyBAQAogCS5lbmFibGVfcnhfZG1hICAgICAgICAgID0gJml4Z2JlX2VuYWJsZV9yeF9kbWFfZ2VuZXJpYywKIAkuZ2V0X21hY19hZGRyICAgICAgICAgICA9ICZpeGdiZV9nZXRfbWFjX2FkZHJfZ2VuZXJpYywKIAkuZ2V0X3Nhbl9tYWNfYWRkciAgICAgICA9ICZpeGdiZV9nZXRfc2FuX21hY19hZGRyX2dlbmVyaWMsCi0JLmdldF9kZXZpY2VfY2FwcyAgICAgICAgPSBOVUxMLAorCS5nZXRfZGV2aWNlX2NhcHMgICAgICAgID0gJml4Z2JlX2dldF9kZXZpY2VfY2Fwc19nZW5lcmljLAogCS5nZXRfd3duX3ByZWZpeCAgICAgICAgID0gJml4Z2JlX2dldF93d25fcHJlZml4X2dlbmVyaWMsCiAJLnN0b3BfYWRhcHRlciAgICAgICAgICAgPSAmaXhnYmVfc3RvcF9hZGFwdGVyX2dlbmVyaWMsCiAJLmdldF9idXNfaW5mbyAgICAgICAgICAgPSAmaXhnYmVfZ2V0X2J1c19pbmZvX2dlbmVyaWMsCkBAIC02ODEsOCArODgwLDggQEAKIAkuZ2V0X2xpbmtfY2FwYWJpbGl0aWVzICA9ICZpeGdiZV9nZXRfY29wcGVyX2xpbmtfY2FwYWJpbGl0aWVzX2dlbmVyaWMsCiAJLmxlZF9vbiAgICAgICAgICAgICAgICAgPSAmaXhnYmVfbGVkX29uX2dlbmVyaWMsCiAJLmxlZF9vZmYgICAgICAgICAgICAgICAgPSAmaXhnYmVfbGVkX29mZl9nZW5lcmljLAotCS5ibGlua19sZWRfc3RhcnQgICAgICAgID0gJml4Z2JlX2JsaW5rX2xlZF9zdGFydF9nZW5lcmljLAotCS5ibGlua19sZWRfc3RvcCAgICAgICAgID0gJml4Z2JlX2JsaW5rX2xlZF9zdG9wX2dlbmVyaWMsCisJLmJsaW5rX2xlZF9zdGFydCAgICAgICAgPSAmaXhnYmVfYmxpbmtfbGVkX3N0YXJ0X1g1NDAsCisJLmJsaW5rX2xlZF9zdG9wICAgICAgICAgPSAmaXhnYmVfYmxpbmtfbGVkX3N0b3BfWDU0MCwKIAkuc2V0X3JhciAgICAgICAgICAgICAgICA9ICZpeGdiZV9zZXRfcmFyX2dlbmVyaWMsCiAJLmNsZWFyX3JhciAgICAgICAgICAgICAgPSAmaXhnYmVfY2xlYXJfcmFyX2dlbmVyaWMsCiAJLnNldF92bWRxICAgICAgICAgICAgICAgPSAmaXhnYmVfc2V0X3ZtZHFfZ2VuZXJpYywKQEAgLTcwNSw5ICs5MDQsMTEgQEAKIHN0YXRpYyBzdHJ1Y3QgaXhnYmVfZWVwcm9tX29wZXJhdGlvbnMgZWVwcm9tX29wc19YNTQwID0gewogCS5pbml0X3BhcmFtcyAgICAgICAgICAgID0gJml4Z2JlX2luaXRfZWVwcm9tX3BhcmFtc19YNTQwLAogCS5yZWFkICAgICAgICAgICAgICAgICAgID0gJml4Z2JlX3JlYWRfZWVyZF9YNTQwLAorCS5yZWFkX2J1ZmZlcgkJPSAmaXhnYmVfcmVhZF9lZXJkX2J1ZmZlcl9YNTQwLAogCS53cml0ZSAgICAgICAgICAgICAgICAgID0gJml4Z2JlX3dyaXRlX2Vld3JfWDU0MCwKKwkud3JpdGVfYnVmZmVyCQk9ICZpeGdiZV93cml0ZV9lZXdyX2J1ZmZlcl9YNTQwLAogCS5jYWxjX2NoZWNrc3VtCQk9ICZpeGdiZV9jYWxjX2VlcHJvbV9jaGVja3N1bV9YNTQwLAotCS52YWxpZGF0ZV9jaGVja3N1bSAgICAgID0gJml4Z2JlX3ZhbGlkYXRlX2VlcHJvbV9jaGVja3N1bV9nZW5lcmljLAorCS52YWxpZGF0ZV9jaGVja3N1bSAgICAgID0gJml4Z2JlX3ZhbGlkYXRlX2VlcHJvbV9jaGVja3N1bV9YNTQwLAogCS51cGRhdGVfY2hlY2tzdW0gICAgICAgID0gJml4Z2JlX3VwZGF0ZV9lZXByb21fY2hlY2tzdW1fWDU0MCwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JldmYvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi9ldGh0b29sLmMKaW5kZXggMDU2M2FiMi4uZGVlZTM3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmV2Zi9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi9ldGh0b29sLmMKQEAgLTEwNCwxMSArMTA0LDEzIEBACiAJaHctPm1hYy5vcHMuY2hlY2tfbGluayhodywgJmxpbmtfc3BlZWQsICZsaW5rX3VwLCBmYWxzZSk7CiAKIAlpZiAobGlua191cCkgewotCQllY21kLT5zcGVlZCA9IChsaW5rX3NwZWVkID09IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMKSA/Ci0JCQkgICAgICAgU1BFRURfMTAwMDAgOiBTUEVFRF8xMDAwOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoCisJCQllY21kLAorCQkJKGxpbmtfc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEwpID8KKwkJCVNQRUVEXzEwMDAwIDogU1BFRURfMTAwMCk7CiAJCWVjbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOwogCX0gZWxzZSB7Ci0JCWVjbWQtPnNwZWVkID0gLTE7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCAtMSk7CiAJCWVjbWQtPmR1cGxleCA9IC0xOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmV2Zi9peGdiZXZmX21haW4uYyBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMKaW5kZXggMDVmYTdjOC4uMjhkM2NiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmV2Zi9peGdiZXZmX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSA8bmV0L2lwNl9jaGVja3N1bS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2luY2x1ZGUgIml4Z2JldmYuaCIKIApAQCAtMTQ2MCw2ICsxNDYxLDM0IEBACiAJfQogfQogCitzdGF0aWMgaW50IGl4Z2JldmZfd3JpdGVfdWNfYWRkcl9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlpbnQgY291bnQgPSAwOworCisJaWYgKChuZXRkZXZfdWNfY291bnQobmV0ZGV2KSkgPiAxMCkgeworCQlwcmludGsoS0VSTl9FUlIgIlRvbyBtYW55IHVuaWNhc3QgZmlsdGVycyAtIE5vIFNwYWNlXG4iKTsKKwkJcmV0dXJuIC1FTk9TUEM7CisJfQorCisJaWYgKCFuZXRkZXZfdWNfZW1wdHkobmV0ZGV2KSkgeworCQlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOworCQluZXRkZXZfZm9yX2VhY2hfdWNfYWRkcihoYSwgbmV0ZGV2KSB7CisJCQlody0+bWFjLm9wcy5zZXRfdWNfYWRkcihodywgKytjb3VudCwgaGEtPmFkZHIpOworCQkJdWRlbGF5KDIwMCk7CisJCX0KKwl9IGVsc2UgeworCQkvKgorCQkgKiBJZiB0aGUgbGlzdCBpcyBlbXB0eSB0aGVuIHNlbmQgbWVzc2FnZSB0byBQRiBkcml2ZXIgdG8KKwkJICogY2xlYXIgYWxsIG1hY3ZsYW5zIG9uIHRoaXMgVkYuCisJCSAqLworCQlody0+bWFjLm9wcy5zZXRfdWNfYWRkcihodywgMCwgTlVMTCk7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCiAvKioKICAqIGl4Z2JldmZfc2V0X3J4X21vZGUgLSBNdWx0aWNhc3Qgc2V0CiAgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCkBAIC0xNDc2LDYgKzE1MDUsOCBAQAogCS8qIHJlcHJvZ3JhbSBtdWx0aWNhc3QgbGlzdCAqLwogCWlmIChody0+bWFjLm9wcy51cGRhdGVfbWNfYWRkcl9saXN0KQogCQlody0+bWFjLm9wcy51cGRhdGVfbWNfYWRkcl9saXN0KGh3LCBuZXRkZXYpOworCisJaXhnYmV2Zl93cml0ZV91Y19hZGRyX2xpc3QobmV0ZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgaXhnYmV2Zl9uYXBpX2VuYWJsZV9hbGwoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JldmYvbWJ4LmggYi9kcml2ZXJzL25ldC9peGdiZXZmL21ieC5oCmluZGV4IGIyYjViZjUuLmVhMzkzZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JldmYvbWJ4LmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi9tYnguaApAQCAtODEsNiArODEsNyBAQAogI2RlZmluZSBJWEdCRV9WRl9TRVRfTVVMVElDQVNUICAgIDB4MDMgLyogVkYgcmVxdWVzdHMgUEYgdG8gc2V0IE1DIGFkZHIgKi8KICNkZWZpbmUgSVhHQkVfVkZfU0VUX1ZMQU4gICAgICAgICAweDA0IC8qIFZGIHJlcXVlc3RzIFBGIHRvIHNldCBWTEFOICovCiAjZGVmaW5lIElYR0JFX1ZGX1NFVF9MUEUgICAgICAgICAgMHgwNSAvKiBWRiByZXF1ZXN0cyBQRiB0byBzZXQgVk1PTFIuTFBFICovCisjZGVmaW5lIElYR0JFX1ZGX1NFVF9NQUNWTEFOICAgICAgMHgwNiAvKiBWRiByZXF1ZXN0cyBQRiBmb3IgdW5pY2FzdCBmaWx0ZXIgKi8KIAogLyogbGVuZ3RoIG9mIHBlcm1hbmVudCBhZGRyZXNzIG1lc3NhZ2UgcmV0dXJuZWQgZnJvbSBQRiAqLwogI2RlZmluZSBJWEdCRV9WRl9QRVJNQUREUl9NU0dfTEVOIDQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JldmYvdmYuYyBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvdmYuYwppbmRleCBlZWNkM2JmLi5hYTM2ODJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZXZmL3ZmLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi92Zi5jCkBAIC0yMTYsNiArMjE2LDM5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzMzIgaXhnYmV2Zl9zZXRfdWNfYWRkcl92ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgaW5kZXgsIHU4ICphZGRyKQoreworCXN0cnVjdCBpeGdiZV9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJdTMyIG1zZ2J1ZlszXTsKKwl1OCAqbXNnX2FkZHIgPSAodTggKikoJm1zZ2J1ZlsxXSk7CisJczMyIHJldF92YWw7CisKKwltZW1zZXQobXNnYnVmLCAwLCBzaXplb2YobXNnYnVmKSk7CisJLyoKKwkgKiBJZiBpbmRleCBpcyBvbmUgdGhlbiB0aGlzIGlzIHRoZSBzdGFydCBvZiBhIG5ldyBsaXN0IGFuZCBuZWVkcworCSAqIGluZGljYXRpb24gdG8gdGhlIFBGIHNvIGl0IGNhbiBkbyBpdCdzIG93biBsaXN0IG1hbmFnZW1lbnQuCisJICogSWYgaXQgaXMgemVybyB0aGVuIHRoYXQgdGVsbHMgdGhlIFBGIHRvIGp1c3QgY2xlYXIgYWxsIG9mCisJICogdGhpcyBWRidzIG1hY3ZsYW5zIGFuZCB0aGVyZSBpcyBubyBuZXcgbGlzdC4KKwkgKi8KKwltc2didWZbMF0gfD0gaW5kZXggPDwgSVhHQkVfVlRfTVNHSU5GT19TSElGVDsKKwltc2didWZbMF0gfD0gSVhHQkVfVkZfU0VUX01BQ1ZMQU47CisJaWYgKGFkZHIpCisJCW1lbWNweShtc2dfYWRkciwgYWRkciwgNik7CisJcmV0X3ZhbCA9IG1ieC0+b3BzLndyaXRlX3Bvc3RlZChodywgbXNnYnVmLCAzKTsKKworCWlmICghcmV0X3ZhbCkKKwkJcmV0X3ZhbCA9IG1ieC0+b3BzLnJlYWRfcG9zdGVkKGh3LCBtc2didWYsIDMpOworCisJbXNnYnVmWzBdICY9IH5JWEdCRV9WVF9NU0dUWVBFX0NUUzsKKworCWlmICghcmV0X3ZhbCkKKwkJaWYgKG1zZ2J1ZlswXSA9PQorCQkgICAgKElYR0JFX1ZGX1NFVF9NQUNWTEFOIHwgSVhHQkVfVlRfTVNHVFlQRV9OQUNLKSkKKwkJCXJldF92YWwgPSAtRU5PTUVNOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKIC8qKgogICogIGl4Z2JldmZfc2V0X3Jhcl92ZiAtIHNldCBkZXZpY2UgTUFDIGFkZHJlc3MKICAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCkBAIC0zNzgsNiArNDExLDcgQEAKIAkuY2hlY2tfbGluayAgICAgICAgICA9IGl4Z2JldmZfY2hlY2tfbWFjX2xpbmtfdmYsCiAJLnNldF9yYXIgICAgICAgICAgICAgPSBpeGdiZXZmX3NldF9yYXJfdmYsCiAJLnVwZGF0ZV9tY19hZGRyX2xpc3QgPSBpeGdiZXZmX3VwZGF0ZV9tY19hZGRyX2xpc3RfdmYsCisJLnNldF91Y19hZGRyICAgICAgICAgPSBpeGdiZXZmX3NldF91Y19hZGRyX3ZmLAogCS5zZXRfdmZ0YSAgICAgICAgICAgID0gaXhnYmV2Zl9zZXRfdmZ0YV92ZiwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JldmYvdmYuaCBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvdmYuaAppbmRleCAyM2ViMTE0Li4xMDMwNmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZXZmL3ZmLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi92Zi5oCkBAIC02Miw2ICs2Miw3IEBACiAKIAkvKiBSQVIsIE11bHRpY2FzdCwgVkxBTiAqLwogCXMzMiAoKnNldF9yYXIpKHN0cnVjdCBpeGdiZV9odyAqLCB1MzIsIHU4ICosIHUzMik7CisJczMyICgqc2V0X3VjX2FkZHIpKHN0cnVjdCBpeGdiZV9odyAqLCB1MzIsIHU4ICopOwogCXMzMiAoKmluaXRfcnhfYWRkcnMpKHN0cnVjdCBpeGdiZV9odyAqKTsKIAlzMzIgKCp1cGRhdGVfbWNfYWRkcl9saXN0KShzdHJ1Y3QgaXhnYmVfaHcgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7CiAJczMyICgqZW5hYmxlX21jKShzdHJ1Y3QgaXhnYmVfaHcgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9qbWUuYyBiL2RyaXZlcnMvbmV0L2ptZS5jCmluZGV4IDk5NGM4MDkuLmI1YjE3NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ptZS5jCisrKyBiL2RyaXZlcnMvbmV0L2ptZS5jCkBAIC0yMjMwLDE3ICsyMjMwLDkgQEAKIAkJam1lX3Jlc3RhcnRfcnhfZW5naW5lKGptZSk7CiAJfQogCi0JaWYgKG5ld19tdHUgPiAxOTAwKSB7Ci0JCW5ldGRldi0+ZmVhdHVyZXMgJj0gfihORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSB8Ci0JCQkJTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYpOwotCX0gZWxzZSB7Ci0JCWlmICh0ZXN0X2JpdChKTUVfRkxBR19UWENTVU0sICZqbWUtPmZsYWdzKSkKLQkJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU07Ci0JCWlmICh0ZXN0X2JpdChKTUVfRkxBR19UU08sICZqbWUtPmZsYWdzKSkKLQkJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzY7Ci0JfQotCiAJbmV0ZGV2LT5tdHUgPSBuZXdfbXR1OworCW5ldGRldl91cGRhdGVfZmVhdHVyZXMobmV0ZGV2KTsKKwogCWptZV9yZXNldF9saW5rKGptZSk7CiAKIAlyZXR1cm4gMDsKQEAgLTI1NjMsNyArMjU1NSw4IEBACiAJc3RydWN0IGptZV9hZGFwdGVyICpqbWUgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCWludCByYywgZmRjID0gMDsKIAotCWlmIChlY21kLT5zcGVlZCA9PSBTUEVFRF8xMDAwICYmIGVjbWQtPmF1dG9uZWcgIT0gQVVUT05FR19FTkFCTEUpCisJaWYgKGV0aHRvb2xfY21kX3NwZWVkKGVjbWQpID09IFNQRUVEXzEwMDAKKwkgICAgJiYgZWNtZC0+YXV0b25lZyAhPSBBVVRPTkVHX0VOQUJMRSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKgpAQCAtMjY0MCwxOSArMjYzMywyMCBAQAogfQogCiBzdGF0aWMgdTMyCi1qbWVfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK2ptZV9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIGZlYXR1cmVzKQogewotCXN0cnVjdCBqbWVfYWRhcHRlciAqam1lID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlyZXR1cm4gam1lLT5yZWdfcnhtY3MgJiBSWE1DU19DSEVDS1NVTTsKKwlpZiAobmV0ZGV2LT5tdHUgPiAxOTAwKQorCQlmZWF0dXJlcyAmPSB+KE5FVElGX0ZfQUxMX1RTTyB8IE5FVElGX0ZfQUxMX0NTVU0pOworCXJldHVybiBmZWF0dXJlczsKIH0KIAogc3RhdGljIGludAotam1lX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBvbikKK2ptZV9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIGZlYXR1cmVzKQogewogCXN0cnVjdCBqbWVfYWRhcHRlciAqam1lID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAogCXNwaW5fbG9ja19iaCgmam1lLT5yeG1jc19sb2NrKTsKLQlpZiAob24pCisJaWYgKGZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pCiAJCWptZS0+cmVnX3J4bWNzIHw9IFJYTUNTX0NIRUNLU1VNOwogCWVsc2UKIAkJam1lLT5yZWdfcnhtY3MgJj0gflJYTUNTX0NIRUNLU1VNOwpAQCAtMjY2Myw0MiArMjY1Nyw2IEBACiB9CiAKIHN0YXRpYyBpbnQKLWptZV9zZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgb24pCi17Ci0Jc3RydWN0IGptZV9hZGFwdGVyICpqbWUgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0JaWYgKG9uKSB7Ci0JCXNldF9iaXQoSk1FX0ZMQUdfVFhDU1VNLCAmam1lLT5mbGFncyk7Ci0JCWlmIChuZXRkZXYtPm10dSA8PSAxOTAwKQotCQkJbmV0ZGV2LT5mZWF0dXJlcyB8PQotCQkJCU5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNOwotCX0gZWxzZSB7Ci0JCWNsZWFyX2JpdChKTUVfRkxBR19UWENTVU0sICZqbWUtPmZsYWdzKTsKLQkJbmV0ZGV2LT5mZWF0dXJlcyAmPQotCQkJCX4oTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU0pOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1qbWVfc2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgb24pCi17Ci0Jc3RydWN0IGptZV9hZGFwdGVyICpqbWUgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0JaWYgKG9uKSB7Ci0JCXNldF9iaXQoSk1FX0ZMQUdfVFNPLCAmam1lLT5mbGFncyk7Ci0JCWlmIChuZXRkZXYtPm10dSA8PSAxOTAwKQotCQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNjsKLQl9IGVsc2UgewotCQljbGVhcl9iaXQoSk1FX0ZMQUdfVFNPLCAmam1lLT5mbGFncyk7Ci0JCW5ldGRldi0+ZmVhdHVyZXMgJj0gfihORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNik7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKIGptZV9ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGptZV9hZGFwdGVyICpqbWUgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwpAQCAtMjgzOSwxMSArMjc5Nyw2IEBACiAJLmdldF9saW5rCQk9IGptZV9nZXRfbGluaywKIAkuZ2V0X21zZ2xldmVsICAgICAgICAgICA9IGptZV9nZXRfbXNnbGV2ZWwsCiAJLnNldF9tc2dsZXZlbCAgICAgICAgICAgPSBqbWVfc2V0X21zZ2xldmVsLAotCS5nZXRfcnhfY3N1bQkJPSBqbWVfZ2V0X3J4X2NzdW0sCi0JLnNldF9yeF9jc3VtCQk9IGptZV9zZXRfcnhfY3N1bSwKLQkuc2V0X3R4X2NzdW0JCT0gam1lX3NldF90eF9jc3VtLAotCS5zZXRfdHNvCQk9IGptZV9zZXRfdHNvLAotCS5zZXRfc2cJCQk9IGV0aHRvb2xfb3Bfc2V0X3NnLAogCS5ud2F5X3Jlc2V0ICAgICAgICAgICAgID0gam1lX253YXlfcmVzZXQsCiAJLmdldF9lZXByb21fbGVuCQk9IGptZV9nZXRfZWVwcm9tX2xlbiwKIAkuZ2V0X2VlcHJvbQkJPSBqbWVfZ2V0X2VlcHJvbSwKQEAgLTI5MDMsNiArMjg1Niw4IEBACiAJLm5kb19jaGFuZ2VfbXR1CQk9IGptZV9jaGFuZ2VfbXR1LAogCS5uZG9fdHhfdGltZW91dAkJPSBqbWVfdHhfdGltZW91dCwKIAkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIJPSBqbWVfdmxhbl9yeF9yZWdpc3RlciwKKwkubmRvX2ZpeF9mZWF0dXJlcyAgICAgICA9IGptZV9maXhfZmVhdHVyZXMsCisJLm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSBqbWVfc2V0X2ZlYXR1cmVzLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQKQEAgLTI5NTcsNiArMjkxMiwxMiBAQAogCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZqbWVfbmV0ZGV2X29wczsKIAluZXRkZXYtPmV0aHRvb2xfb3BzCQk9ICZqbWVfZXRodG9vbF9vcHM7CiAJbmV0ZGV2LT53YXRjaGRvZ190aW1lbwkJPSBUWF9USU1FT1VUOworCW5ldGRldi0+aHdfZmVhdHVyZXMJCT0JTkVUSUZfRl9JUF9DU1VNIHwKKwkJCQkJCU5FVElGX0ZfSVBWNl9DU1VNIHwKKwkJCQkJCU5FVElGX0ZfU0cgfAorCQkJCQkJTkVUSUZfRl9UU08gfAorCQkJCQkJTkVUSUZfRl9UU082IHwKKwkJCQkJCU5FVElGX0ZfUlhDU1VNOwogCW5ldGRldi0+ZmVhdHVyZXMJCT0JTkVUSUZfRl9JUF9DU1VNIHwKIAkJCQkJCU5FVElGX0ZfSVBWNl9DU1VNIHwKIAkJCQkJCU5FVElGX0ZfU0cgfApAQCAtMzA0MCw4ICszMDAxLDkgQEAKIAlqbWUtPnJlZ190eHBmYyA9IDA7CiAJam1lLT5yZWdfcG1jcyA9IFBNQ1NfTUZFTjsKIAlqbWUtPnJlZ19ncHJlZzEgPSBHUFJFRzFfREVGQVVMVDsKLQlzZXRfYml0KEpNRV9GTEFHX1RYQ1NVTSwgJmptZS0+ZmxhZ3MpOwotCXNldF9iaXQoSk1FX0ZMQUdfVFNPLCAmam1lLT5mbGFncyk7CisKKwlpZiAoam1lLT5yZWdfcnhtY3MgJiBSWE1DU19DSEVDS1NVTSkKKwkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1JYQ1NVTTsKIAogCS8qCiAJICogR2V0IE1heCBSZWFkIFJlcSBTaXplIGZyb20gUENJIENvbmZpZyBTcGFjZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvam1lLmggYi9kcml2ZXJzL25ldC9qbWUuaAppbmRleCA4YmYzMDQ1Li5lOWFhZWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9qbWUuaAorKysgYi9kcml2ZXJzL25ldC9qbWUuaApAQCAtNDY4LDggKzQ2OCw2IEBACiBlbnVtIGptZV9mbGFnc19iaXRzIHsKIAlKTUVfRkxBR19NU0kJCT0gMSwKIAlKTUVfRkxBR19TU0VUCQk9IDIsCi0JSk1FX0ZMQUdfVFhDU1VNCQk9IDMsCi0JSk1FX0ZMQUdfVFNPCQk9IDQsCiAJSk1FX0ZMQUdfUE9MTAkJPSA1LAogCUpNRV9GTEFHX1NIVVRET1dOCT0gNiwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9rc3o4ODR4LmMgYi9kcml2ZXJzL25ldC9rc3o4ODR4LmMKaW5kZXggN2Y3ZDU3MC4uNDFlYTU5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQva3N6ODg0eC5jCisrKyBiL2RyaXZlcnMvbmV0L2tzejg4NHguYwpAQCAtMTIyMSw3ICsxMjIxLDYgQEAKICNkZWZpbmUgTElOS19JTlRfV09SS0lORwkJKDEgPDwgMCkKICNkZWZpbmUgU01BTExfUEFDS0VUX1RYX0JVRwkJKDEgPDwgMSkKICNkZWZpbmUgSEFMRl9EVVBMRVhfU0lHTkFMX0JVRwkJKDEgPDwgMikKLSNkZWZpbmUgSVBWNl9DU1VNX0dFTl9IQUNLCQkoMSA8PCAzKQogI2RlZmluZSBSWF9IVUdFX0ZSQU1FCQkJKDEgPDwgNCkKICNkZWZpbmUgU1RQX1NVUFBPUlQJCQkoMSA8PCA4KQogCkBAIC0zNzQ4LDcgKzM3NDcsNiBAQAogCQlpZiAoMSA9PSByYykKIAkJCWh3LT5mZWF0dXJlcyB8PSBIQUxGX0RVUExFWF9TSUdOQUxfQlVHOwogCX0KLQlody0+ZmVhdHVyZXMgfD0gSVBWNl9DU1VNX0dFTl9IQUNLOwogCXJldHVybiByYzsKIH0KIApAQCAtNDg4Nyw4ICs0ODg1LDcgQEAKIAlsZWZ0ID0gaHdfYWxsb2NfcGt0KGh3LCBza2ItPmxlbiwgbnVtKTsKIAlpZiAobGVmdCkgewogCQlpZiAobGVmdCA8IG51bSB8fAotCQkJCSgoaHctPmZlYXR1cmVzICYgSVBWNl9DU1VNX0dFTl9IQUNLKSAmJgotCQkJCShDSEVDS1NVTV9QQVJUSUFMID09IHNrYi0+aXBfc3VtbWVkKSAmJgorCQkJCSgoQ0hFQ0tTVU1fUEFSVElBTCA9PSBza2ItPmlwX3N1bW1lZCkgJiYKIAkJCQkoRVRIX1BfSVBWNiA9PSBodG9ucyhza2ItPnByb3RvY29sKSkpKSB7CiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqb3JnX3NrYiA9IHNrYjsKIApAQCAtNjAwMSw2ICs1OTk4LDcgQEAKIAlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9IHByaXYtPmFkYXB0ZXI7CiAJc3RydWN0IGtzel9wb3J0ICpwb3J0ID0gJnByaXYtPnBvcnQ7CisJdTMyIHNwZWVkID0gZXRodG9vbF9jbWRfc3BlZWQoY21kKTsKIAlpbnQgcmM7CiAKIAkvKgpAQCAtNjAwOSwxMSArNjAwNywxMSBAQAogCSAqLwogCWlmIChjbWQtPmF1dG9uZWcgJiYgcHJpdi0+YWR2ZXJ0aXNpbmcgPT0gY21kLT5hZHZlcnRpc2luZykgewogCQljbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfQUxMOwotCQlpZiAoMTAgPT0gY21kLT5zcGVlZCkKKwkJaWYgKDEwID09IHNwZWVkKQogCQkJY21kLT5hZHZlcnRpc2luZyAmPQogCQkJCX4oQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsIHwKIAkJCQlBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYpOwotCQllbHNlIGlmICgxMDAgPT0gY21kLT5zcGVlZCkKKwkJZWxzZSBpZiAoMTAwID09IHNwZWVkKQogCQkJY21kLT5hZHZlcnRpc2luZyAmPQogCQkJCX4oQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwgfAogCQkJCUFEVkVSVElTRURfMTBiYXNlVF9IYWxmKTsKQEAgLTYwMzUsOCArNjAzMyw4IEBACiAJCXBvcnQtPmZvcmNlX2xpbmsgPSAwOwogCX0gZWxzZSB7CiAJCXBvcnQtPmR1cGxleCA9IGNtZC0+ZHVwbGV4ICsgMTsKLQkJaWYgKGNtZC0+c3BlZWQgIT0gMTAwMCkKLQkJCXBvcnQtPnNwZWVkID0gY21kLT5zcGVlZDsKKwkJaWYgKDEwMDAgIT0gc3BlZWQpCisJCQlwb3J0LT5zcGVlZCA9IHNwZWVkOwogCQlpZiAoY21kLT5hdXRvbmVnKQogCQkJcG9ydC0+Zm9yY2VfbGluayA9IDA7CiAJCWVsc2UKQEAgLTY1ODMsNTcgKzY1ODEsMzMgQEAKIH0KIAogLyoqCi0gKiBuZXRkZXZfZ2V0X3J4X2NzdW0gLSBnZXQgcmVjZWl2ZSBjaGVja3N1bSBzdXBwb3J0CisgKiBuZXRkZXZfc2V0X2ZlYXR1cmVzIC0gc2V0IHJlY2VpdmUgY2hlY2tzdW0gc3VwcG9ydAogICogQGRldjoJTmV0d29yayBkZXZpY2UuCi0gKgotICogVGhpcyBmdW5jdGlvbiBnZXRzIHJlY2VpdmUgY2hlY2tzdW0gc3VwcG9ydCBzZXR0aW5nLgotICoKLSAqIFJldHVybiB0cnVlIGlmIHJlY2VpdmUgY2hlY2tzdW0gaXMgZW5hYmxlZDsgZmFsc2Ugb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgdTMyIG5ldGRldl9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBkZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGRldl9pbmZvICpod19wcml2ID0gcHJpdi0+YWRhcHRlcjsKLQlzdHJ1Y3Qga3N6X2h3ICpodyA9ICZod19wcml2LT5odzsKLQotCXJldHVybiBody0+cnhfY2ZnICYKLQkJKERNQV9SWF9DU1VNX1VEUCB8Ci0JCURNQV9SWF9DU1VNX1RDUCB8Ci0JCURNQV9SWF9DU1VNX0lQKTsKLX0KLQotLyoqCi0gKiBuZXRkZXZfc2V0X3J4X2NzdW0gLSBzZXQgcmVjZWl2ZSBjaGVja3N1bSBzdXBwb3J0Ci0gKiBAZGV2OglOZXR3b3JrIGRldmljZS4KLSAqIEBkYXRhOglaZXJvIHRvIGRpc2FibGUgcmVjZWl2ZSBjaGVja3N1bSBzdXBwb3J0LgorICogQGZlYXR1cmVzOglOZXcgZGV2aWNlIGZlYXR1cmVzIChvZmZsb2FkcykuCiAgKgogICogVGhpcyBmdW5jdGlvbiBzZXRzIHJlY2VpdmUgY2hlY2tzdW0gc3VwcG9ydCBzZXR0aW5nLgogICoKICAqIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWw7IG90aGVyd2lzZSBhbiBlcnJvciBjb2RlLgogICovCi1zdGF0aWMgaW50IG5ldGRldl9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3N0YXRpYyBpbnQgbmV0ZGV2X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmVhdHVyZXMpCiB7CiAJc3RydWN0IGRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgZGV2X2luZm8gKmh3X3ByaXYgPSBwcml2LT5hZGFwdGVyOwogCXN0cnVjdCBrc3pfaHcgKmh3ID0gJmh3X3ByaXYtPmh3OwotCXUzMiBuZXdfc2V0dGluZyA9IGh3LT5yeF9jZmc7CiAKLQlpZiAoZGF0YSkKLQkJbmV3X3NldHRpbmcgfD0KLQkJCShETUFfUlhfQ1NVTV9VRFAgfCBETUFfUlhfQ1NVTV9UQ1AgfAotCQkJRE1BX1JYX0NTVU1fSVApOwotCWVsc2UKLQkJbmV3X3NldHRpbmcgJj0KLQkJCX4oRE1BX1JYX0NTVU1fVURQIHwgRE1BX1JYX0NTVU1fVENQIHwKLQkJCURNQV9SWF9DU1VNX0lQKTsKLQluZXdfc2V0dGluZyAmPSB+RE1BX1JYX0NTVU1fVURQOwogCW11dGV4X2xvY2soJmh3X3ByaXYtPmxvY2spOwotCWlmIChuZXdfc2V0dGluZyAhPSBody0+cnhfY2ZnKSB7Ci0JCWh3LT5yeF9jZmcgPSBuZXdfc2V0dGluZzsKLQkJaWYgKGh3LT5lbmFibGVkKQotCQkJd3JpdGVsKGh3LT5yeF9jZmcsIGh3LT5pbyArIEtTX0RNQV9SWF9DVFJMKTsKLQl9CisKKwkvKiBzZWUgbm90ZSBpbiBod19zZXR1cCgpICovCisJaWYgKGZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pCisJCWh3LT5yeF9jZmcgfD0gRE1BX1JYX0NTVU1fVENQIHwgRE1BX1JYX0NTVU1fSVA7CisJZWxzZQorCQlody0+cnhfY2ZnICY9IH4oRE1BX1JYX0NTVU1fVENQIHwgRE1BX1JYX0NTVU1fSVApOworCisJaWYgKGh3LT5lbmFibGVkKQorCQl3cml0ZWwoaHctPnJ4X2NmZywgaHctPmlvICsgS1NfRE1BX1JYX0NUUkwpOworCiAJbXV0ZXhfdW5sb2NrKCZod19wcml2LT5sb2NrKTsKKwogCXJldHVybiAwOwogfQogCkBAIC02NjU4LDEyICs2NjMyLDYgQEAKIAkuZ2V0X3N0cmluZ3MJCT0gbmV0ZGV2X2dldF9zdHJpbmdzLAogCS5nZXRfc3NldF9jb3VudAkJPSBuZXRkZXZfZ2V0X3NzZXRfY291bnQsCiAJLmdldF9ldGh0b29sX3N0YXRzCT0gbmV0ZGV2X2dldF9ldGh0b29sX3N0YXRzLAotCS5nZXRfcnhfY3N1bQkJPSBuZXRkZXZfZ2V0X3J4X2NzdW0sCi0JLnNldF9yeF9jc3VtCQk9IG5ldGRldl9zZXRfcnhfY3N1bSwKLQkuZ2V0X3R4X2NzdW0JCT0gZXRodG9vbF9vcF9nZXRfdHhfY3N1bSwKLQkuc2V0X3R4X2NzdW0JCT0gZXRodG9vbF9vcF9zZXRfdHhfY3N1bSwKLQkuZ2V0X3NnCQkJPSBldGh0b29sX29wX2dldF9zZywKLQkuc2V0X3NnCQkJPSBldGh0b29sX29wX3NldF9zZywKIH07CiAKIC8qCkBAIC02ODI4LDE0ICs2Nzk2LDE1IEBACiAJLyogNTAwIG1zIHRpbWVvdXQgKi8KIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gSFogLyAyOwogCi0JZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU07CisJZGV2LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfU0cgfCBORVRJRl9GX1JYQ1NVTTsKIAogCS8qCiAJICogSGFyZHdhcmUgZG9lcyBub3QgcmVhbGx5IHN1cHBvcnQgSVB2NiBjaGVja3N1bSBnZW5lcmF0aW9uLCBidXQKLQkgKiBkcml2ZXIgYWN0dWFsbHkgcnVucyBmYXN0ZXIgd2l0aCB0aGlzIG9uLiAgUmVmZXIgSVBWNl9DU1VNX0dFTl9IQUNLLgorCSAqIGRyaXZlciBhY3R1YWxseSBydW5zIGZhc3RlciB3aXRoIHRoaXMgb24uCiAJICovCi0JZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQVjZfQ1NVTTsKLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0c7CisJZGV2LT5od19mZWF0dXJlcyB8PSBORVRJRl9GX0lQVjZfQ1NVTTsKKworCWRldi0+ZmVhdHVyZXMgfD0gZGV2LT5od19mZWF0dXJlczsKIAogCXNlbWFfaW5pdCgmcHJpdi0+cHJvY19zZW0sIDEpOwogCkBAIC02ODYwLDYgKzY4MjksNyBAQAogCS5uZG9fc3RhcnRfeG1pdAkJPSBuZXRkZXZfdHgsCiAJLm5kb190eF90aW1lb3V0CQk9IG5ldGRldl90eF90aW1lb3V0LAogCS5uZG9fY2hhbmdlX210dQkJPSBuZXRkZXZfY2hhbmdlX210dSwKKwkubmRvX3NldF9mZWF0dXJlcwk9IG5ldGRldl9zZXRfZmVhdHVyZXMsCiAJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBuZXRkZXZfc2V0X21hY19hZGRyZXNzLAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAogCS5uZG9fZG9faW9jdGwJCT0gbmV0ZGV2X2lvY3RsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbG9vcGJhY2suYyBiL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMKaW5kZXggZDcwZmI3Ni4uNGNlOWU1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbG9vcGJhY2suYworKysgYi9kcml2ZXJzL25ldC9sb29wYmFjay5jCkBAIC0xNzQsNyArMTc0LDggQEAKIAkJfCBORVRJRl9GX0hJR0hETUEKIAkJfCBORVRJRl9GX0xMVFgKIAkJfCBORVRJRl9GX05FVE5TX0xPQ0FMCi0JCXwgTkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQ7CisJCXwgTkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQKKwkJfCBORVRJRl9GX0xPT1BCQUNLOwogCWRldi0+ZXRodG9vbF9vcHMJPSAmbG9vcGJhY2tfZXRodG9vbF9vcHM7CiAJZGV2LT5oZWFkZXJfb3BzCQk9ICZldGhfaGVhZGVyX29wczsKIAlkZXYtPm5ldGRldl9vcHMJCT0gJmxvb3BiYWNrX29wczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY2IuYyBiL2RyaXZlcnMvbmV0L21hY2IuYwppbmRleCA3OWNjYjU0Li42YzZhMDI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWNiLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjYi5jCkBAIC01NzYsNiArNTc2LDExIEBACiAJCSAqIGFkZCB0aGF0IGlmL3doZW4gd2UgZ2V0IG91ciBoYW5kcyBvbiBhIGZ1bGwtYmxvd24gTUlJIFBIWS4KIAkJICovCiAKKwkJaWYgKHN0YXR1cyAmIE1BQ0JfQklUKElTUl9ST1ZSKSkgeworCQkJLyogV2UgbWlzc2VkIGF0IGxlYXN0IG9uZSBwYWNrZXQgKi8KKwkJCWJwLT5od19zdGF0cy5yeF9vdmVycnVucysrOworCQl9CisKIAkJaWYgKHN0YXR1cyAmIE1BQ0JfQklUKEhSRVNQKSkgewogCQkJLyoKIAkJCSAqIFRPRE86IFJlc2V0IHRoZSBoYXJkd2FyZSwgYW5kIG1heWJlIG1vdmUgdGhlIHByaW50awpAQCAtMTAyNCw3ICsxMDI5LDggQEAKIAkJCQkgICBod3N0YXQtPnJ4X2phYmJlcnMgKwogCQkJCSAgIGh3c3RhdC0+cnhfdW5kZXJzaXplX3BrdHMgKwogCQkJCSAgIGh3c3RhdC0+cnhfbGVuZ3RoX21pc21hdGNoKTsKLQluc3RhdC0+cnhfb3Zlcl9lcnJvcnMgPSBod3N0YXQtPnJ4X3Jlc291cmNlX2Vycm9yczsKKwluc3RhdC0+cnhfb3Zlcl9lcnJvcnMgPSBod3N0YXQtPnJ4X3Jlc291cmNlX2Vycm9ycyArCisJCQkJICAgaHdzdGF0LT5yeF9vdmVycnVuczsKIAluc3RhdC0+cnhfY3JjX2Vycm9ycyA9IGh3c3RhdC0+cnhfZmNzX2Vycm9yczsKIAluc3RhdC0+cnhfZnJhbWVfZXJyb3JzID0gaHdzdGF0LT5yeF9hbGlnbl9lcnJvcnM7CiAJbnN0YXQtPnJ4X2ZpZm9fZXJyb3JzID0gaHdzdGF0LT5yeF9vdmVycnVuczsKQEAgLTExNzEsOCArMTE3Nyw3IEBACiAJfQogCiAJZGV2LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCWVyciA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBtYWNiX2ludGVycnVwdCwgSVJRRl9TQU1QTEVfUkFORE9NLAotCQkJICBkZXYtPm5hbWUsIGRldik7CisJZXJyID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIG1hY2JfaW50ZXJydXB0LCAwLCBkZXYtPm5hbWUsIGRldik7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICIlczogVW5hYmxlIHRvIHJlcXVlc3QgSVJRICVkIChlcnJvciAlZClcbiIsCkBAIC0xMzUxLDUgKzEzNTYsNSBAQAogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkF0bWVsIE1BQ0IgRXRoZXJuZXQgZHJpdmVyIik7Ci1NT0RVTEVfQVVUSE9SKCJIYWF2YXJkIFNraW5uZW1vZW4gPGhza2lubmVtb2VuQGF0bWVsLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIkhhYXZhcmQgU2tpbm5lbW9lbiAoQXRtZWwpIik7CiBNT0RVTEVfQUxJQVMoInBsYXRmb3JtOm1hY2IiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY3ZsYW4uYyBiL2RyaXZlcnMvbmV0L21hY3ZsYW4uYwppbmRleCBkOGU0ZTY5Li5kNmFlYWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWN2bGFuLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjdmxhbi5jCkBAIC03MCwxNiArNzAsMTcgQEAKIAlobGlzdF9hZGRfaGVhZF9yY3UoJnZsYW4tPmhsaXN0LCAmcG9ydC0+dmxhbl9oYXNoW2FkZHJbNV1dKTsKIH0KIAotc3RhdGljIHZvaWQgbWFjdmxhbl9oYXNoX2RlbChzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW4pCitzdGF0aWMgdm9pZCBtYWN2bGFuX2hhc2hfZGVsKHN0cnVjdCBtYWN2bGFuX2RldiAqdmxhbiwgYm9vbCBzeW5jKQogewogCWhsaXN0X2RlbF9yY3UoJnZsYW4tPmhsaXN0KTsKLQlzeW5jaHJvbml6ZV9yY3UoKTsKKwlpZiAoc3luYykKKwkJc3luY2hyb25pemVfcmN1KCk7CiB9CiAKIHN0YXRpYyB2b2lkIG1hY3ZsYW5faGFzaF9jaGFuZ2VfYWRkcihzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW4sCiAJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpCiB7Ci0JbWFjdmxhbl9oYXNoX2RlbCh2bGFuKTsKKwltYWN2bGFuX2hhc2hfZGVsKHZsYW4sIHRydWUpOwogCS8qIE5vdyB0aGF0IHdlIGFyZSB1bmhhc2hlZCBpdCBpcyBzYWZlIHRvIGNoYW5nZSB0aGUgZGV2aWNlCiAJICogYWRkcmVzcyB3aXRob3V0IGNvbmZ1c2luZyBwYWNrZXQgZGVsaXZlcnkuCiAJICovCkBAIC0yMzcsMTAgKzIzOCw4IEBACiAKIAkJZGVzdCA9IG1hY3ZsYW5faGFzaF9sb29rdXAocG9ydCwgZXRoLT5oX2Rlc3QpOwogCQlpZiAoZGVzdCAmJiBkZXN0LT5tb2RlID09IE1BQ1ZMQU5fTU9ERV9CUklER0UpIHsKLQkJCXVuc2lnbmVkIGludCBsZW5ndGggPSBza2ItPmxlbiArIEVUSF9ITEVOOwotCQkJaW50IHJldCA9IGRlc3QtPmZvcndhcmQoZGVzdC0+ZGV2LCBza2IpOwotCQkJbWFjdmxhbl9jb3VudF9yeChkZXN0LCBsZW5ndGgsCi0JCQkJCSByZXQgPT0gTkVUX1JYX1NVQ0NFU1MsIDApOworCQkJLyogc2VuZCB0byBsb3dlcmRldiBmaXJzdCBmb3IgaXRzIG5ldHdvcmsgdGFwcyAqLworCQkJdmxhbi0+Zm9yd2FyZCh2bGFuLT5sb3dlcmRldiwgc2tiKTsKIAogCQkJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CiAJCX0KQEAgLTM0NSw3ICszNDQsNyBAQAogCWRldl91Y19kZWwobG93ZXJkZXYsIGRldi0+ZGV2X2FkZHIpOwogCiBoYXNoX2RlbDoKLQltYWN2bGFuX2hhc2hfZGVsKHZsYW4pOworCW1hY3ZsYW5faGFzaF9kZWwodmxhbiwgIWRldi0+ZGlzbWFudGxlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDE1LDcgKzQxNCw3IEBACiAjZGVmaW5lIE1BQ1ZMQU5fRkVBVFVSRVMgXAogCShORVRJRl9GX1NHIHwgTkVUSUZfRl9BTExfQ1NVTSB8IE5FVElGX0ZfSElHSERNQSB8IE5FVElGX0ZfRlJBR0xJU1QgfCBcCiAJIE5FVElGX0ZfR1NPIHwgTkVUSUZfRl9UU08gfCBORVRJRl9GX1VGTyB8IE5FVElGX0ZfR1NPX1JPQlVTVCB8IFwKLQkgTkVUSUZfRl9UU09fRUNOIHwgTkVUSUZfRl9UU082IHwgTkVUSUZfRl9HUk8pCisJIE5FVElGX0ZfVFNPX0VDTiB8IE5FVElGX0ZfVFNPNiB8IE5FVElGX0ZfR1JPIHwgTkVUSUZfRl9SWENTVU0pCiAKICNkZWZpbmUgTUFDVkxBTl9TVEFURV9NQVNLIFwKIAkoKDE8PF9fTElOS19TVEFURV9OT0NBUlJJRVIpIHwgKDE8PF9fTElOS19TVEFURV9ET1JNQU5UKSkKQEAgLTUxNywxMiArNTE2LDYgQEAKIAlzbnByaW50ZihkcnZpbmZvLT52ZXJzaW9uLCAzMiwgIjAuMSIpOwogfQogCi1zdGF0aWMgdTMyIG1hY3ZsYW5fZXRodG9vbF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWNvbnN0IHN0cnVjdCBtYWN2bGFuX2RldiAqdmxhbiA9IG5ldGRldl9wcml2KGRldik7Ci0JcmV0dXJuIGRldl9ldGh0b29sX2dldF9yeF9jc3VtKHZsYW4tPmxvd2VyZGV2KTsKLX0KLQogc3RhdGljIGludCBtYWN2bGFuX2V0aHRvb2xfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCXN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewpAQCAtNTMwLDE4ICs1MjMsMTAgQEAKIAlyZXR1cm4gZGV2X2V0aHRvb2xfZ2V0X3NldHRpbmdzKHZsYW4tPmxvd2VyZGV2LCBjbWQpOwogfQogCi1zdGF0aWMgdTMyIG1hY3ZsYW5fZXRodG9vbF9nZXRfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQljb25zdCBzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW4gPSBuZXRkZXZfcHJpdihkZXYpOwotCXJldHVybiBkZXZfZXRodG9vbF9nZXRfZmxhZ3Modmxhbi0+bG93ZXJkZXYpOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG1hY3ZsYW5fZXRodG9vbF9vcHMgPSB7CiAJLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCiAJLmdldF9zZXR0aW5ncwkJPSBtYWN2bGFuX2V0aHRvb2xfZ2V0X3NldHRpbmdzLAotCS5nZXRfcnhfY3N1bQkJPSBtYWN2bGFuX2V0aHRvb2xfZ2V0X3J4X2NzdW0sCiAJLmdldF9kcnZpbmZvCQk9IG1hY3ZsYW5fZXRodG9vbF9nZXRfZHJ2aW5mbywKLQkuZ2V0X2ZsYWdzCQk9IG1hY3ZsYW5fZXRodG9vbF9nZXRfZmxhZ3MsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG1hY3ZsYW5fbmV0ZGV2X29wcyA9IHsKQEAgLTU5OCw4ICs1ODMsOCBAQAogCWVyciA9IG5ldGRldl9yeF9oYW5kbGVyX3JlZ2lzdGVyKGRldiwgbWFjdmxhbl9oYW5kbGVfZnJhbWUsIHBvcnQpOwogCWlmIChlcnIpCiAJCWtmcmVlKHBvcnQpOwotCi0JZGV2LT5wcml2X2ZsYWdzIHw9IElGRl9NQUNWTEFOX1BPUlQ7CisJZWxzZQorCQlkZXYtPnByaXZfZmxhZ3MgfD0gSUZGX01BQ1ZMQU5fUE9SVDsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC03OTEsNiArNzc2LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHRyOwogCXN0cnVjdCBtYWN2bGFuX2RldiAqdmxhbiwgKm5leHQ7CiAJc3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydDsKKwlMSVNUX0hFQUQobGlzdF9raWxsKTsKIAogCWlmICghbWFjdmxhbl9wb3J0X2V4aXN0cyhkZXYpKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CkBAIC04MTYsNyArODAyLDkgQEAKIAkJCWJyZWFrOwogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2bGFuLCBuZXh0LCAmcG9ydC0+dmxhbnMsIGxpc3QpCi0JCQl2bGFuLT5kZXYtPnJ0bmxfbGlua19vcHMtPmRlbGxpbmsodmxhbi0+ZGV2LCBOVUxMKTsKKwkJCXZsYW4tPmRldi0+cnRubF9saW5rX29wcy0+ZGVsbGluayh2bGFuLT5kZXYsICZsaXN0X2tpbGwpOworCQl1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KCZsaXN0X2tpbGwpOworCQlsaXN0X2RlbCgmbGlzdF9raWxsKTsKIAkJYnJlYWs7CiAJY2FzZSBORVRERVZfUFJFX1RZUEVfQ0hBTkdFOgogCQkvKiBGb3JiaWQgdW5kZXJsYXlpbmcgZGV2aWNlIHRvIGNoYW5nZSBpdHMgdHlwZS4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8uYyBiL2RyaXZlcnMvbmV0L21kaW8uYwppbmRleCBlODViZjA0Li4xNmZiYjExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tZGlvLmMKKysrIGIvZHJpdmVycy9uZXQvbWRpby5jCkBAIC0xNzYsNiArMTc2LDkgQEAKICAqIEBucGFnZV9hZHY6IE1vZGVzIGN1cnJlbnRseSBhZHZlcnRpc2VkIG9uIG5leHQgcGFnZXMKICAqIEBucGFnZV9scGE6IE1vZGVzIGFkdmVydGlzZWQgYnkgbGluayBwYXJ0bmVyIG9uIG5leHQgcGFnZXMKICAqCisgKiBUaGUgQGVjbWQgcGFyYW1ldGVyIGlzIGV4cGVjdGVkIHRvIGhhdmUgYmVlbiBjbGVhcmVkIGJlZm9yZSBjYWxsaW5nCisgKiBtZGlvNDVfZXRodG9vbF9nc2V0X25wYWdlKCkuCisgKgogICogU2luY2UgdGhlIENTUnMgZm9yIGF1dG8tbmVnb3RpYXRpb24gdXNpbmcgbmV4dCBwYWdlcyBhcmUgbm90IGZ1bGx5CiAgKiBzdGFuZGFyZGlzZWQsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgYXR0ZW1wdCB0byBkZWNvZGUgdGhlbS4gIFRoZQogICogY2FsbGVyIG11c3QgcGFzcyB0aGVtIGluLgpAQCAtMTg1LDYgKzE4OCw3IEBACiAJCQkgICAgICAgdTMyIG5wYWdlX2FkdiwgdTMyIG5wYWdlX2xwYSkKIHsKIAlpbnQgcmVnOworCXUzMiBzcGVlZDsKIAogCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKIAllY21kLT5waHlfYWRkcmVzcyA9IG1kaW8tPnBydGFkOwpAQCAtMjg3LDMzICsyOTEsMzYgQEAKIAkJaWYgKG1vZGVzICYgKEFEVkVSVElTRURfMTAwMDBiYXNlVF9GdWxsIHwKIAkJCSAgICAgQURWRVJUSVNFRF8xMDAwMGJhc2VLWDRfRnVsbCB8CiAJCQkgICAgIEFEVkVSVElTRURfMTAwMDBiYXNlS1JfRnVsbCkpIHsKLQkJCWVjbWQtPnNwZWVkID0gU1BFRURfMTAwMDA7CisJCQlzcGVlZCA9IFNQRUVEXzEwMDAwOwogCQkJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CiAJCX0gZWxzZSBpZiAobW9kZXMgJiAoQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCB8CiAJCQkJICAgIEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYgfAogCQkJCSAgICBBRFZFUlRJU0VEXzEwMDBiYXNlS1hfRnVsbCkpIHsKLQkJCWVjbWQtPnNwZWVkID0gU1BFRURfMTAwMDsKKwkJCXNwZWVkID0gU1BFRURfMTAwMDsKIAkJCWVjbWQtPmR1cGxleCA9ICEobW9kZXMgJiBBRFZFUlRJU0VEXzEwMDBiYXNlVF9IYWxmKTsKIAkJfSBlbHNlIGlmIChtb2RlcyAmIChBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwgfAogCQkJCSAgICBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYpKSB7Ci0JCQllY21kLT5zcGVlZCA9IFNQRUVEXzEwMDsKKwkJCXNwZWVkID0gU1BFRURfMTAwOwogCQkJZWNtZC0+ZHVwbGV4ID0gISEobW9kZXMgJiBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwpOwogCQl9IGVsc2UgewotCQkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDsKKwkJCXNwZWVkID0gU1BFRURfMTA7CiAJCQllY21kLT5kdXBsZXggPSAhIShtb2RlcyAmIEFEVkVSVElTRURfMTBiYXNlVF9GdWxsKTsKIAkJfQogCX0gZWxzZSB7CiAJCS8qIFJlcG9ydCBmb3JjZWQgc2V0dGluZ3MgKi8KIAkJcmVnID0gbWRpby0+bWRpb19yZWFkKG1kaW8tPmRldiwgbWRpby0+cHJ0YWQsIE1ESU9fTU1EX1BNQVBNRCwKIAkJCQkgICAgICBNRElPX0NUUkwxKTsKLQkJZWNtZC0+c3BlZWQgPSAoKChyZWcgJiBNRElPX1BNQV9DVFJMMV9TUEVFRDEwMDApID8gMTAwIDogMSkgKgotCQkJICAgICAgICgocmVnICYgTURJT19QTUFfQ1RSTDFfU1BFRUQxMDApID8gMTAwIDogMTApKTsKKwkJc3BlZWQgPSAoKChyZWcgJiBNRElPX1BNQV9DVFJMMV9TUEVFRDEwMDApID8gMTAwIDogMSkKKwkJCSAqICgocmVnICYgTURJT19QTUFfQ1RSTDFfU1BFRUQxMDApID8gMTAwIDogMTApKTsKIAkJZWNtZC0+ZHVwbGV4ID0gKHJlZyAmIE1ESU9fQ1RSTDFfRlVMTERQTFggfHwKLQkJCQllY21kLT5zcGVlZCA9PSBTUEVFRF8xMDAwMCk7CisJCQkJc3BlZWQgPT0gU1BFRURfMTAwMDApOwogCX0KIAorCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBzcGVlZCk7CisKIAkvKiAxMEdCQVNFLVQgTURJL01ESS1YICovCi0JaWYgKGVjbWQtPnBvcnQgPT0gUE9SVF9UUCAmJiBlY21kLT5zcGVlZCA9PSBTUEVFRF8xMDAwMCkgeworCWlmIChlY21kLT5wb3J0ID09IFBPUlRfVFAKKwkgICAgJiYgKGV0aHRvb2xfY21kX3NwZWVkKGVjbWQpID09IFNQRUVEXzEwMDAwKSkgewogCQlzd2l0Y2ggKG1kaW8tPm1kaW9fcmVhZChtZGlvLT5kZXYsIG1kaW8tPnBydGFkLCBNRElPX01NRF9QTUFQTUQsCiAJCQkJCU1ESU9fUE1BXzEwR0JUX1NXQVBQT0wpKSB7CiAJCWNhc2UgTURJT19QTUFfMTBHQlRfU1dBUFBPTF9BQk5YIHwgTURJT19QTUFfMTBHQlRfU1dBUFBPTF9DRE5YOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWlpLmMgYi9kcml2ZXJzL25ldC9taWkuYwppbmRleCBkNGZjMDBiLi5jNjJlNzgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9taWkuYworKysgYi9kcml2ZXJzL25ldC9taWkuYwpAQCAtNjIsNiArNjIsOSBAQAogICogQG1paTogTUlJIGludGVyZmFjZQogICogQGVjbWQ6IHJlcXVlc3RlZCBldGh0b29sX2NtZAogICoKKyAqIFRoZSBAZWNtZCBwYXJhbWV0ZXIgaXMgZXhwZWN0ZWQgdG8gaGF2ZSBiZWVuIGNsZWFyZWQgYmVmb3JlIGNhbGxpbmcKKyAqIG1paV9ldGh0b29sX2dzZXQoKS4KKyAqCiAgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGVycm9yLgogICovCiBpbnQgbWlpX2V0aHRvb2xfZ3NldChzdHJ1Y3QgbWlpX2lmX2luZm8gKm1paSwgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQpAQCAtMTIyLDIyICsxMjUsMjUgQEAKIAogCQlpZiAobmVnbyAmIChBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsIHwKIAkJCSAgICBBRFZFUlRJU0VEXzEwMDBiYXNlVF9IYWxmKSkgewotCQkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDAwOworCQkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIFNQRUVEXzEwMDApOwogCQkJZWNtZC0+ZHVwbGV4ID0gISEobmVnbyAmIEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwpOwogCQl9IGVsc2UgaWYgKG5lZ28gJiAoQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsIHwKIAkJCQkgICBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYpKSB7Ci0JCQllY21kLT5zcGVlZCA9IFNQRUVEXzEwMDsKKwkJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBTUEVFRF8xMDApOwogCQkJZWNtZC0+ZHVwbGV4ID0gISEobmVnbyAmIEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCk7CiAJCX0gZWxzZSB7Ci0JCQllY21kLT5zcGVlZCA9IFNQRUVEXzEwOworCQkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIFNQRUVEXzEwKTsKIAkJCWVjbWQtPmR1cGxleCA9ICEhKG5lZ28gJiBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbCk7CiAJCX0KIAl9IGVsc2UgewogCQllY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOwogCi0JCWVjbWQtPnNwZWVkID0gKChibWNyICYgQk1DUl9TUEVFRDEwMDAgJiYKLQkJCQkoYm1jciAmIEJNQ1JfU1BFRUQxMDApID09IDApID8gU1BFRURfMTAwMCA6Ci0JCQkgICAgICAgKGJtY3IgJiBCTUNSX1NQRUVEMTAwKSA/IFNQRUVEXzEwMCA6IFNQRUVEXzEwKTsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsCisJCQkJICAgICAgKChibWNyICYgQk1DUl9TUEVFRDEwMDAgJiYKKwkJCQkJKGJtY3IgJiBCTUNSX1NQRUVEMTAwKSA9PSAwKSA/CisJCQkJICAgICAgIFNQRUVEXzEwMDAgOgorCQkJCSAgICAgICAoKGJtY3IgJiBCTUNSX1NQRUVEMTAwKSA/CisJCQkJCVNQRUVEXzEwMCA6IFNQRUVEXzEwKSkpOwogCQllY21kLT5kdXBsZXggPSAoYm1jciAmIEJNQ1JfRlVMTERQTFgpID8gRFVQTEVYX0ZVTEwgOiBEVVBMRVhfSEFMRjsKIAl9CiAKQEAgLTE1OCwxMCArMTY0LDExIEBACiBpbnQgbWlpX2V0aHRvb2xfc3NldChzdHJ1Y3QgbWlpX2lmX2luZm8gKm1paSwgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBtaWktPmRldjsKKwl1MzIgc3BlZWQgPSBldGh0b29sX2NtZF9zcGVlZChlY21kKTsKIAotCWlmIChlY21kLT5zcGVlZCAhPSBTUEVFRF8xMCAmJgotCSAgICBlY21kLT5zcGVlZCAhPSBTUEVFRF8xMDAgJiYKLQkgICAgZWNtZC0+c3BlZWQgIT0gU1BFRURfMTAwMCkKKwlpZiAoc3BlZWQgIT0gU1BFRURfMTAgJiYKKwkgICAgc3BlZWQgIT0gU1BFRURfMTAwICYmCisJICAgIHNwZWVkICE9IFNQRUVEXzEwMDApCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChlY21kLT5kdXBsZXggIT0gRFVQTEVYX0hBTEYgJiYgZWNtZC0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE3Myw3ICsxODAsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoZWNtZC0+YXV0b25lZyAhPSBBVVRPTkVHX0RJU0FCTEUgJiYgZWNtZC0+YXV0b25lZyAhPSBBVVRPTkVHX0VOQUJMRSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKChlY21kLT5zcGVlZCA9PSBTUEVFRF8xMDAwKSAmJiAoIW1paS0+c3VwcG9ydHNfZ21paSkpCisJaWYgKChzcGVlZCA9PSBTUEVFRF8xMDAwKSAmJiAoIW1paS0+c3VwcG9ydHNfZ21paSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogaWdub3JlIHN1cHBvcnRlZCwgbWF4dHhwa3QsIG1heHJ4cGt0ICovCkBAIC0yMzEsOSArMjM4LDkgQEAKIAkJYm1jciA9IG1paS0+bWRpb19yZWFkKGRldiwgbWlpLT5waHlfaWQsIE1JSV9CTUNSKTsKIAkJdG1wID0gYm1jciAmIH4oQk1DUl9BTkVOQUJMRSB8IEJNQ1JfU1BFRUQxMDAgfAogCQkJICAgICAgIEJNQ1JfU1BFRUQxMDAwIHwgQk1DUl9GVUxMRFBMWCk7Ci0JCWlmIChlY21kLT5zcGVlZCA9PSBTUEVFRF8xMDAwKQorCQlpZiAoc3BlZWQgPT0gU1BFRURfMTAwMCkKIAkJCXRtcCB8PSBCTUNSX1NQRUVEMTAwMDsKLQkJZWxzZSBpZiAoZWNtZC0+c3BlZWQgPT0gU1BFRURfMTAwKQorCQllbHNlIGlmIChzcGVlZCA9PSBTUEVFRF8xMDApCiAJCQl0bXAgfD0gQk1DUl9TUEVFRDEwMDsKIAkJaWYgKGVjbWQtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkgewogCQkJdG1wIHw9IEJNQ1JfRlVMTERQTFg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2VuX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L21seDQvZW5fZXRodG9vbC5jCmluZGV4IGQ1NGI3YWIuLjJlODU4ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvZW5fZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvZW5fZXRodG9vbC5jCkBAIC01NywzNyArNTcsNiBAQAogCWRydmluZm8tPmVlZHVtcF9sZW4gPSAwOwogfQogCi1zdGF0aWMgdTMyIG1seDRfZW5fZ2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXJldHVybiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfVFNPKSAhPSAwOwotfQotCi1zdGF0aWMgaW50IG1seDRfZW5fc2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmIChkYXRhKSB7Ci0JCWlmICghcHJpdi0+bWRldi0+TFNPX3N1cHBvcnQpCi0JCQlyZXR1cm4gLUVQRVJNOwotCQlkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNik7Ci0JfSBlbHNlCi0JCWRldi0+ZmVhdHVyZXMgJj0gfihORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1MzIgbWx4NF9lbl9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXJldHVybiBwcml2LT5yeF9jc3VtOwotfQotCi1zdGF0aWMgaW50IG1seDRfZW5fc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JcHJpdi0+cnhfY3N1bSA9IChkYXRhICE9IDApOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgY29uc3QgY2hhciBtYWluX3N0cmluZ3NbXVtFVEhfR1NUUklOR19MRU5dID0gewogCSJyeF9wYWNrZXRzIiwgInR4X3BhY2tldHMiLCAicnhfYnl0ZXMiLCAidHhfYnl0ZXMiLCAicnhfZXJyb3JzIiwKIAkidHhfZXJyb3JzIiwgInJ4X2Ryb3BwZWQiLCAidHhfZHJvcHBlZCIsICJtdWx0aWNhc3QiLCAiY29sbGlzaW9ucyIsCkBAIC0yOTYsMTAgKzI2NSwxMCBAQAogCiAJdHJhbnNfdHlwZSA9IHByaXYtPnBvcnRfc3RhdGUudHJhbnNjaXZlcjsKIAlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYpKSB7Ci0JCWNtZC0+c3BlZWQgPSBwcml2LT5wb3J0X3N0YXRlLmxpbmtfc3BlZWQ7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIHByaXYtPnBvcnRfc3RhdGUubGlua19zcGVlZCk7CiAJCWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CiAJfSBlbHNlIHsKLQkJY21kLT5zcGVlZCA9IC0xOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCAtMSk7CiAJCWNtZC0+ZHVwbGV4ID0gLTE7CiAJfQogCkBAIC0zMjMsNyArMjkyLDggQEAKIHN0YXRpYyBpbnQgbWx4NF9lbl9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7CiAJaWYgKChjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHx8Ci0JICAgIChjbWQtPnNwZWVkICE9IFNQRUVEXzEwMDAwKSB8fCAoY21kLT5kdXBsZXggIT0gRFVQTEVYX0ZVTEwpKQorCSAgICAoZXRodG9vbF9jbWRfc3BlZWQoY21kKSAhPSBTUEVFRF8xMDAwMCkgfHwKKwkgICAgKGNtZC0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBOb3RoaW5nIHRvIGNoYW5nZSAqLwpAQCAtNDgzLDE3ICs0NTMsNyBAQAogCS5nZXRfZHJ2aW5mbyA9IG1seDRfZW5fZ2V0X2RydmluZm8sCiAJLmdldF9zZXR0aW5ncyA9IG1seDRfZW5fZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MgPSBtbHg0X2VuX3NldF9zZXR0aW5ncywKLSNpZmRlZiBORVRJRl9GX1RTTwotCS5nZXRfdHNvID0gbWx4NF9lbl9nZXRfdHNvLAotCS5zZXRfdHNvID0gbWx4NF9lbl9zZXRfdHNvLAotI2VuZGlmCi0JLmdldF9zZyA9IGV0aHRvb2xfb3BfZ2V0X3NnLAotCS5zZXRfc2cgPSBldGh0b29sX29wX3NldF9zZywKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAotCS5nZXRfcnhfY3N1bSA9IG1seDRfZW5fZ2V0X3J4X2NzdW0sCi0JLnNldF9yeF9jc3VtID0gbWx4NF9lbl9zZXRfcnhfY3N1bSwKLQkuZ2V0X3R4X2NzdW0gPSBldGh0b29sX29wX2dldF90eF9jc3VtLAotCS5zZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3Bfc2V0X3R4X2lwdjZfY3N1bSwKIAkuZ2V0X3N0cmluZ3MgPSBtbHg0X2VuX2dldF9zdHJpbmdzLAogCS5nZXRfc3NldF9jb3VudCA9IG1seDRfZW5fZ2V0X3NzZXRfY291bnQsCiAJLmdldF9ldGh0b29sX3N0YXRzID0gbWx4NF9lbl9nZXRfZXRodG9vbF9zdGF0cywKQEAgLTUwOCw3ICs0NjgsNiBAQAogCS5zZXRfcGF1c2VwYXJhbSA9IG1seDRfZW5fc2V0X3BhdXNlcGFyYW0sCiAJLmdldF9yaW5ncGFyYW0gPSBtbHg0X2VuX2dldF9yaW5ncGFyYW0sCiAJLnNldF9yaW5ncGFyYW0gPSBtbHg0X2VuX3NldF9yaW5ncGFyYW0sCi0JLmdldF9mbGFncyA9IGV0aHRvb2xfb3BfZ2V0X2ZsYWdzLAogfTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2VuX25ldGRldi5jIGIvZHJpdmVycy9uZXQvbWx4NC9lbl9uZXRkZXYuYwppbmRleCA3NzA2M2Y5Li42MTg1MGFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L2VuX25ldGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvZW5fbmV0ZGV2LmMKQEAgLTEwODMsNyArMTA4Myw2IEBACiAJcHJpdi0+cHJvZiA9IHByb2Y7CiAJcHJpdi0+cG9ydCA9IHBvcnQ7CiAJcHJpdi0+cG9ydF91cCA9IGZhbHNlOwotCXByaXYtPnJ4X2NzdW0gPSAxOwogCXByaXYtPmZsYWdzID0gcHJvZi0+ZmxhZ3M7CiAJcHJpdi0+dHhfcmluZ19udW0gPSBwcm9mLT50eF9yaW5nX251bTsKIAlwcml2LT5yeF9yaW5nX251bSA9IHByb2YtPnJ4X3JpbmdfbnVtOwpAQCAtMTE0MSwyMSArMTE0MCwxNiBAQAogCS8qCiAJICogU2V0IGRyaXZlciBmZWF0dXJlcwogCSAqLwotCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRzsKLQlkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9TRzsKLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNOwotCWRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTTsKLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8Ci0JCQkgTkVUSUZfRl9IV19WTEFOX1JYIHwKLQkJCSBORVRJRl9GX0hXX1ZMQU5fRklMVEVSOwotCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9HUk87Ci0JaWYgKG1kZXYtPkxTT19zdXBwb3J0KSB7Ci0JCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087Ci0JCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwotCQlkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087Ci0JCWRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7Ci0JfQorCWRldi0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU07CisJaWYgKG1kZXYtPkxTT19zdXBwb3J0KQorCQlkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082OworCisJZGV2LT52bGFuX2ZlYXR1cmVzID0gZGV2LT5od19mZWF0dXJlczsKKworCWRldi0+aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9SWENTVU07CisJZGV2LT5mZWF0dXJlcyA9IGRldi0+aHdfZmVhdHVyZXMgfCBORVRJRl9GX0hJR0hETUEgfAorCQkJTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYIHwKKwkJCU5FVElGX0ZfSFdfVkxBTl9GSUxURVI7CiAKIAltZGV2LT5wbmRldltwb3J0XSA9IGRldjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9lbl9yeC5jIGIvZHJpdmVycy9uZXQvbWx4NC9lbl9yeC5jCmluZGV4IDYyZGQyMWIuLjI3NzIxNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvZW5fcnguYworKysgYi9kcml2ZXJzL25ldC9tbHg0L2VuX3J4LmMKQEAgLTU4NCw3ICs1ODQsNyBAQAogCQlyaW5nLT5ieXRlcyArPSBsZW5ndGg7CiAJCXJpbmctPnBhY2tldHMrKzsKIAotCQlpZiAobGlrZWx5KHByaXYtPnJ4X2NzdW0pKSB7CisJCWlmIChsaWtlbHkoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSkgewogCQkJaWYgKChjcWUtPnN0YXR1cyAmIGNwdV90b19iZTE2KE1MWDRfQ1FFX1NUQVRVU19JUE9LKSkgJiYKIAkJCSAgICAoY3FlLT5jaGVja3N1bSA9PSBjcHVfdG9fYmUxNigweGZmZmYpKSkgewogCQkJCXByaXYtPnBvcnRfc3RhdHMucnhfY2hrc3VtX2dvb2QrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvbWx4NF9lbi5oIGIvZHJpdmVycy9uZXQvbWx4NC9tbHg0X2VuLmgKaW5kZXggZTMwZjYwOS4uMGI1MTUwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9tbHg0X2VuLmgKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9tbHg0X2VuLmgKQEAgLTQ1MSw3ICs0NTEsNiBAQAogCWludCByZWdpc3RlcmVkOwogCWludCBhbGxvY2F0ZWQ7CiAJaW50IHN0cmlkZTsKLQlpbnQgcnhfY3N1bTsKIAl1NjQgbWFjOwogCWludCBtYWNfaW5kZXg7CiAJdW5zaWduZWQgbWF4X210dTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMgYi9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jCmluZGV4IDM0NDI1YjkuLmE1ZDliMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYwpAQCAtMTQ0NCwxMyArMTQ0NCwxMyBAQAogCWNtZC0+YWR2ZXJ0aXNpbmcgPSBBRFZFUlRJU0VEX01JSTsKIAlzd2l0Y2ggKHBvcnRfc3RhdHVzICYgUE9SVF9TUEVFRF9NQVNLKSB7CiAJY2FzZSBQT1JUX1NQRUVEXzEwOgotCQljbWQtPnNwZWVkID0gU1BFRURfMTA7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIFNQRUVEXzEwKTsKIAkJYnJlYWs7CiAJY2FzZSBQT1JUX1NQRUVEXzEwMDoKLQkJY21kLT5zcGVlZCA9IFNQRUVEXzEwMDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgU1BFRURfMTAwKTsKIAkJYnJlYWs7CiAJY2FzZSBQT1JUX1NQRUVEXzEwMDA6Ci0JCWNtZC0+c3BlZWQgPSBTUEVFRF8xMDAwOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCBTUEVFRF8xMDAwKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJY21kLT5zcGVlZCA9IC0xOwpAQCAtMTU3NSwxOCArMTU3NSwxMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTMyCi1tdjY0M3h4X2V0aF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlyZXR1cm4gISEocmRscChtcCwgUE9SVF9DT05GSUcpICYgMHgwMjAwMDAwMCk7Ci19CiAKIHN0YXRpYyBpbnQKLW12NjQzeHhfZXRoX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiByeF9jc3VtKQorbXY2NDN4eF9ldGhfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcykKIHsKIAlzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiByeF9jc3VtID0gZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTTsKIAogCXdybHAobXAsIFBPUlRfQ09ORklHLCByeF9jc3VtID8gMHgwMjAwMDAwMCA6IDB4MDAwMDAwMDApOwogCkBAIC0xNjM0LDExICsxNjI4LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgbXY2NDN4eF9ldGhfc2V0X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCXJldHVybiBldGh0b29sX29wX3NldF9mbGFncyhkZXYsIGRhdGEsIEVUSF9GTEFHX0xSTyk7Ci19Ci0KIHN0YXRpYyBpbnQgbXY2NDN4eF9ldGhfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHNzZXQpCiB7CiAJaWYgKHNzZXQgPT0gRVRIX1NTX1NUQVRTKQpAQCAtMTY1NywxNCArMTY0Niw4IEBACiAJLnNldF9jb2FsZXNjZQkJPSBtdjY0M3h4X2V0aF9zZXRfY29hbGVzY2UsCiAJLmdldF9yaW5ncGFyYW0JCT0gbXY2NDN4eF9ldGhfZ2V0X3JpbmdwYXJhbSwKIAkuc2V0X3JpbmdwYXJhbQkJPSBtdjY0M3h4X2V0aF9zZXRfcmluZ3BhcmFtLAotCS5nZXRfcnhfY3N1bQkJPSBtdjY0M3h4X2V0aF9nZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0JCT0gbXY2NDN4eF9ldGhfc2V0X3J4X2NzdW0sCi0JLnNldF90eF9jc3VtCQk9IGV0aHRvb2xfb3Bfc2V0X3R4X2NzdW0sCi0JLnNldF9zZwkJCT0gZXRodG9vbF9vcF9zZXRfc2csCiAJLmdldF9zdHJpbmdzCQk9IG12NjQzeHhfZXRoX2dldF9zdHJpbmdzLAogCS5nZXRfZXRodG9vbF9zdGF0cwk9IG12NjQzeHhfZXRoX2dldF9ldGh0b29sX3N0YXRzLAotCS5nZXRfZmxhZ3MJCT0gZXRodG9vbF9vcF9nZXRfZmxhZ3MsCi0JLnNldF9mbGFncwkJPSBtdjY0M3h4X2V0aF9zZXRfZmxhZ3MsCiAJLmdldF9zc2V0X2NvdW50CQk9IG12NjQzeHhfZXRoX2dldF9zc2V0X2NvdW50LAogfTsKIApAQCAtMjI2NCw3ICsyMjQ3LDcgQEAKIAkgKiBmcmFtZXMgdG8gUlggcXVldWUgIzAsIGFuZCBpbmNsdWRlIHRoZSBwc2V1ZG8taGVhZGVyIHdoZW4KIAkgKiBjYWxjdWxhdGluZyByZWNlaXZlIGNoZWNrc3Vtcy4KIAkgKi8KLQl3cmxwKG1wLCBQT1JUX0NPTkZJRywgMHgwMjAwMDAwMCk7CisJbXY2NDN4eF9ldGhfc2V0X2ZlYXR1cmVzKG1wLT5kZXYsIG1wLT5kZXYtPmZlYXR1cmVzKTsKIAogCS8qCiAJICogVHJlYXQgQlBEVXMgYXMgbm9ybWFsIG11bHRpY2FzdHMsIGFuZCBkaXNhYmxlIHBhcnRpdGlvbiBtb2RlLgpAQCAtMjg0OCw2ICsyODMxLDcgQEAKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKIAkubmRvX2RvX2lvY3RsCQk9IG12NjQzeHhfZXRoX2lvY3RsLAogCS5uZG9fY2hhbmdlX210dQkJPSBtdjY0M3h4X2V0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X2ZlYXR1cmVzCT0gbXY2NDN4eF9ldGhfc2V0X2ZlYXR1cmVzLAogCS5uZG9fdHhfdGltZW91dAkJPSBtdjY0M3h4X2V0aF90eF90aW1lb3V0LAogCS5uZG9fZ2V0X3N0YXRzCQk9IG12NjQzeHhfZXRoX2dldF9zdGF0cywKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgpAQCAtMjkzMCw3ICsyOTE0LDkgQEAKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gMiAqIEhaOwogCWRldi0+YmFzZV9hZGRyID0gMDsKIAotCWRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNOworCWRldi0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwKKwkJTkVUSUZfRl9SWENTVU0gfCBORVRJRl9GX0xSTzsKKwlkZXYtPmZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNOwogCWRldi0+dmxhbl9mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU07CiAKIAlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYyBiL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMKaW5kZXggMTQ0NmRlNS4uYmY4NDg0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYworKysgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCkBAIC02NSw2ICs2NSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bmV0L3RjcC5oPgpAQCAtMjA1LDcgKzIwNiw2IEBACiAJaW50IHR4X2JvdW5kYXJ5OwkvKiBib3VuZGFyeSB0cmFuc21pdHMgY2Fubm90IGNyb3NzICovCiAJaW50IG51bV9zbGljZXM7CiAJaW50IHJ1bm5pbmc7CQkvKiBydW5uaW5nPyAgICAgICAgICAgICAqLwotCWludCBjc3VtX2ZsYWc7CQkvKiByeF9jc3Vtcz8gICAgICAgICAgICAqLwogCWludCBzbWFsbF9ieXRlczsKIAlpbnQgYmlnX2J5dGVzOwogCWludCBtYXhfaW50cl9zbG90czsKQEAgLTEzODYsNyArMTM4Niw3IEBACiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAlza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgc3MgLSAmbWdwLT5zc1swXSk7CiAKLQlpZiAobWdwLT5jc3VtX2ZsYWcpIHsKKwlpZiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSB7CiAJCWlmICgoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHx8CiAJCSAgICAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkpIHsKIAkJCXNrYi0+Y3N1bSA9IGNzdW07CkBAIC0xNjQ1LDcgKzE2NDUsNyBAQAogCWludCBpOwogCiAJY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOwotCWNtZC0+c3BlZWQgPSBTUEVFRF8xMDAwMDsKKwlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCBTUEVFRF8xMDAwMCk7CiAJY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKIAogCS8qCkBAIC0xNzU3LDQzICsxNzU3LDYgQEAKIAlyaW5nLT50eF9wZW5kaW5nID0gcmluZy0+dHhfbWF4X3BlbmRpbmc7CiB9CiAKLXN0YXRpYyB1MzIgbXlyaTEwZ2VfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKLXsKLQlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQotCWlmIChtZ3AtPmNzdW1fZmxhZykKLQkJcmV0dXJuIDE7Ci0JZWxzZQotCQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBteXJpMTBnZV9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgY3N1bV9lbmFibGVkKQotewotCXN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3AgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCWludCBlcnIgPSAwOwotCi0JaWYgKGNzdW1fZW5hYmxlZCkKLQkJbWdwLT5jc3VtX2ZsYWcgPSBNWEdFRldfRkxBR1NfQ0tTVU07Ci0JZWxzZSB7Ci0JCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfTFJPOwotCQltZ3AtPmNzdW1fZmxhZyA9IDA7Ci0KLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBteXJpMTBnZV9zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiB0c29fZW5hYmxlZCkKLXsKLQlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQl1MzIgZmxhZ3MgPSBtZ3AtPmZlYXR1cmVzICYgKE5FVElGX0ZfVFNPNiB8IE5FVElGX0ZfVFNPKTsKLQotCWlmICh0c29fZW5hYmxlZCkKLQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBmbGFnczsKLQllbHNlCi0JCW5ldGRldi0+ZmVhdHVyZXMgJj0gfmZsYWdzOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgY29uc3QgY2hhciBteXJpMTBnZV9nc3RyaW5nc19tYWluX3N0YXRzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHsKIAkicnhfcGFja2V0cyIsICJ0eF9wYWNrZXRzIiwgInJ4X2J5dGVzIiwgInR4X2J5dGVzIiwgInJ4X2Vycm9ycyIsCiAJInR4X2Vycm9ycyIsICJyeF9kcm9wcGVkIiwgInR4X2Ryb3BwZWQiLCAibXVsdGljYXN0IiwgImNvbGxpc2lvbnMiLApAQCAtMTk0NCwxMSArMTkwNyw2IEBACiAJcmV0dXJuIG1ncC0+bXNnX2VuYWJsZTsKIH0KIAotc3RhdGljIGludCBteXJpMTBnZV9zZXRfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIHZhbHVlKQotewotCXJldHVybiBldGh0b29sX29wX3NldF9mbGFncyhuZXRkZXYsIHZhbHVlLCBFVEhfRkxBR19MUk8pOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG15cmkxMGdlX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MgPSBteXJpMTBnZV9nZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvID0gbXlyaTEwZ2VfZ2V0X2RydmluZm8sCkBAIC0xOTU3LDE5ICsxOTE1LDEyIEBACiAJLmdldF9wYXVzZXBhcmFtID0gbXlyaTEwZ2VfZ2V0X3BhdXNlcGFyYW0sCiAJLnNldF9wYXVzZXBhcmFtID0gbXlyaTEwZ2Vfc2V0X3BhdXNlcGFyYW0sCiAJLmdldF9yaW5ncGFyYW0gPSBteXJpMTBnZV9nZXRfcmluZ3BhcmFtLAotCS5nZXRfcnhfY3N1bSA9IG15cmkxMGdlX2dldF9yeF9jc3VtLAotCS5zZXRfcnhfY3N1bSA9IG15cmkxMGdlX3NldF9yeF9jc3VtLAotCS5zZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3Bfc2V0X3R4X2h3X2NzdW0sCi0JLnNldF9zZyA9IGV0aHRvb2xfb3Bfc2V0X3NnLAotCS5zZXRfdHNvID0gbXlyaTEwZ2Vfc2V0X3RzbywKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAogCS5nZXRfc3RyaW5ncyA9IG15cmkxMGdlX2dldF9zdHJpbmdzLAogCS5nZXRfc3NldF9jb3VudCA9IG15cmkxMGdlX2dldF9zc2V0X2NvdW50LAogCS5nZXRfZXRodG9vbF9zdGF0cyA9IG15cmkxMGdlX2dldF9ldGh0b29sX3N0YXRzLAogCS5zZXRfbXNnbGV2ZWwgPSBteXJpMTBnZV9zZXRfbXNnbGV2ZWwsCiAJLmdldF9tc2dsZXZlbCA9IG15cmkxMGdlX2dldF9tc2dsZXZlbCwKLQkuZ2V0X2ZsYWdzID0gZXRodG9vbF9vcF9nZXRfZmxhZ3MsCi0JLnNldF9mbGFncyA9IG15cmkxMGdlX3NldF9mbGFncwogfTsKIAogc3RhdGljIGludCBteXJpMTBnZV9hbGxvY2F0ZV9yaW5ncyhzdHJ1Y3QgbXlyaTEwZ2Vfc2xpY2Vfc3RhdGUgKnNzKQpAQCAtMzEzNiw2ICszMDg3LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1MzIgbXlyaTEwZ2VfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcykKK3sKKwlpZiAoIShmZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSkKKwkJZmVhdHVyZXMgJj0gfk5FVElGX0ZfTFJPOworCisJcmV0dXJuIGZlYXR1cmVzOworfQorCiBzdGF0aWMgaW50IG15cmkxMGdlX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCiB7CiAJc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0zODM0LDYgKzM3OTMsNyBAQAogCS5uZG9fZ2V0X3N0YXRzCQk9IG15cmkxMGdlX2dldF9zdGF0cywKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKIAkubmRvX2NoYW5nZV9tdHUJCT0gbXlyaTEwZ2VfY2hhbmdlX210dSwKKwkubmRvX2ZpeF9mZWF0dXJlcwk9IG15cmkxMGdlX2ZpeF9mZWF0dXJlcywKIAkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IG15cmkxMGdlX3NldF9tdWx0aWNhc3RfbGlzdCwKIAkubmRvX3NldF9tYWNfYWRkcmVzcwk9IG15cmkxMGdlX3NldF9tYWNfYWRkcmVzcywKIH07CkBAIC0zODYwLDcgKzM4MjAsNiBAQAogCW1ncCA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJbWdwLT5kZXYgPSBuZXRkZXY7CiAJbWdwLT5wZGV2ID0gcGRldjsKLQltZ3AtPmNzdW1fZmxhZyA9IE1YR0VGV19GTEFHU19DS1NVTTsKIAltZ3AtPnBhdXNlID0gbXlyaTEwZ2VfZmxvd19jb250cm9sOwogCW1ncC0+aW50cl9jb2FsX2RlbGF5ID0gbXlyaTEwZ2VfaW50cl9jb2FsX2RlbGF5OwogCW1ncC0+bXNnX2VuYWJsZSA9IG5ldGlmX21zZ19pbml0KG15cmkxMGdlX2RlYnVnLCBNWVJJMTBHRV9NU0dfREVGQVVMVCk7CkBAIC0zOTc2LDExICszOTM1LDExIEBACiAJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJm15cmkxMGdlX25ldGRldl9vcHM7CiAJbmV0ZGV2LT5tdHUgPSBteXJpMTBnZV9pbml0aWFsX210dTsKIAluZXRkZXYtPmJhc2VfYWRkciA9IG1ncC0+aW9tZW1fYmFzZTsKLQluZXRkZXYtPmZlYXR1cmVzID0gbWdwLT5mZWF0dXJlczsKKwluZXRkZXYtPmh3X2ZlYXR1cmVzID0gbWdwLT5mZWF0dXJlcyB8IE5FVElGX0ZfTFJPIHwgTkVUSUZfRl9SWENTVU07CisJbmV0ZGV2LT5mZWF0dXJlcyA9IG5ldGRldi0+aHdfZmVhdHVyZXM7CiAKIAlpZiAoZGFjX2VuYWJsZWQpCiAJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwotCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87CiAKIAluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gbWdwLT5mZWF0dXJlczsKIAlpZiAobWdwLT5md192ZXJfdGlueSA8IDM3KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmF0c2VtaS5jIGIvZHJpdmVycy9uZXQvbmF0c2VtaS5jCmluZGV4IDEwNzQyMzEuLmI3OGJlMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25hdHNlbWkuYworKysgYi9kcml2ZXJzL25ldC9uYXRzZW1pLmMKQEAgLTI4MjAsNyArMjgyMCw3IEBACiAJdTMyIHRtcDsKIAogCWVjbWQtPnBvcnQgICAgICAgID0gZGV2LT5pZl9wb3J0OwotCWVjbWQtPnNwZWVkICAgICAgID0gbnAtPnNwZWVkOworCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBucC0+c3BlZWQpOwogCWVjbWQtPmR1cGxleCAgICAgID0gbnAtPmR1cGxleDsKIAllY21kLT5hdXRvbmVnICAgICA9IG5wLT5hdXRvbmVnOwogCWVjbWQtPmFkdmVydGlzaW5nID0gMDsKQEAgLTI4NzgsOSArMjg3OCw5IEBACiAJCXRtcCA9IG1paV9ud2F5X3Jlc3VsdCgKIAkJCW5wLT5hZHZlcnRpc2luZyAmIG1kaW9fcmVhZChkZXYsIE1JSV9MUEEpKTsKIAkJaWYgKHRtcCA9PSBMUEFfMTAwRlVMTCB8fCB0bXAgPT0gTFBBXzEwMEhBTEYpCi0JCQllY21kLT5zcGVlZCAgPSBTUEVFRF8xMDA7CisJCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgU1BFRURfMTAwKTsKIAkJZWxzZQotCQkJZWNtZC0+c3BlZWQgID0gU1BFRURfMTA7CisJCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgU1BFRURfMTApOwogCQlpZiAodG1wID09IExQQV8xMDBGVUxMIHx8IHRtcCA9PSBMUEFfMTBGVUxMKQogCQkJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CiAJCWVsc2UKQEAgLTI5MDgsNyArMjkwOCw4IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0gZWxzZSBpZiAoZWNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUpIHsKLQkJaWYgKGVjbWQtPnNwZWVkICE9IFNQRUVEXzEwICYmIGVjbWQtPnNwZWVkICE9IFNQRUVEXzEwMCkKKwkJdTMyIHNwZWVkID0gZXRodG9vbF9jbWRfc3BlZWQoZWNtZCk7CisJCWlmIChzcGVlZCAhPSBTUEVFRF8xMCAmJiBzcGVlZCAhPSBTUEVFRF8xMDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKGVjbWQtPmR1cGxleCAhPSBEVVBMRVhfSEFMRiAmJiBlY21kLT5kdXBsZXggIT0gRFVQTEVYX0ZVTEwpCiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI5NTYsNyArMjk1Nyw3IEBACiAJCWlmIChlY21kLT5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCkKIAkJCW5wLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VfMTAwRlVMTDsKIAl9IGVsc2UgewotCQlucC0+c3BlZWQgID0gZWNtZC0+c3BlZWQ7CisJCW5wLT5zcGVlZCAgPSBldGh0b29sX2NtZF9zcGVlZChlY21kKTsKIAkJbnAtPmR1cGxleCA9IGVjbWQtPmR1cGxleDsKIAkJLyogdXNlciBvdmVycmlkaW5nIHRoZSBpbml0aWFsIGZ1bGwgZHVwbGV4IHBhcm0/ICovCiAJCWlmIChucC0+ZHVwbGV4ID09IERVUExFWF9IQUxGKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmUzMjEwLmMgYi9kcml2ZXJzL25ldC9uZTMyMTAuYwppbmRleCAyNDNlZDJhLi5lODk4NGIwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmUzMjEwLmMKKysrIGIvZHJpdmVycy9uZXQvbmUzMjEwLmMKQEAgLTgwLDE3ICs4MCwyMCBAQAogCiAjZGVmaW5lIE5FMzIxMF9ERUJVRwkweDAKIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgaXJxX21hcFtdIF9faW5pdGRhdGEgPSB7MTUsIDEyLCAxMSwgMTAsIDksIDcsIDUsIDN9Owotc3RhdGljIHVuc2lnbmVkIGludCBzaG1lbV9tYXBbXSBfX2luaXRkYXRhID0gezB4ZmYwLCAweGZlMCwgMHhmZmYwLCAweGQ4LCAweGZmZTAsIDB4ZmZjMCwgMHhkMCwgMHgwfTsKLXN0YXRpYyBjb25zdCBjaGFyICppZm1hcFtdIF9faW5pdGRhdGEgPSB7IlVUUCIsICI/IiwgIkJOQyIsICJBVUkifTsKLXN0YXRpYyBpbnQgaWZtYXBfdmFsW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGlycV9tYXBbXSBfX2RldmluaXRjb25zdCA9CisJeyAxNSwgMTIsIDExLCAxMCwgOSwgNywgNSwgMyB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzaG1lbV9tYXBbXSBfX2RldmluaXRjb25zdCA9CisJeyAweGZmMCwgMHhmZTAsIDB4ZmZmMCwgMHhkOCwgMHhmZmUwLCAweGZmYzAsIDB4ZDAsIDB4MCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGlmbWFwW10gX19kZXZpbml0Y29uc3QgPQorCXsgIlVUUCIsICI/IiwgIkJOQyIsICJBVUkiIH07CitzdGF0aWMgY29uc3QgaW50IGlmbWFwX3ZhbFtdIF9fZGV2aW5pdGNvbnN0ID0gewogCQlJRl9QT1JUXzEwQkFTRVQsCiAJCUlGX1BPUlRfVU5LTk9XTiwKIAkJSUZfUE9SVF8xMEJBU0UyLAogCQlJRl9QT1JUX0FVSSwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IG5lMzIxMF9laXNhX3Byb2JlIChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBuZTMyMTBfZWlzYV9wcm9iZSAoc3RydWN0IGRldmljZSAqZGV2aWNlKQogewogCXVuc2lnbmVkIGxvbmcgaW9hZGRyLCBwaHlzX21lbTsKIAlpbnQgaSwgcmV0dmFsLCBwb3J0X2luZGV4OwpAQCAtMzEzLDcgKzMxNiw3IEBACiAJbWVtY3B5X3RvaW8oc2htZW0sIGJ1ZiwgY291bnQpOwogfQogCi1zdGF0aWMgc3RydWN0IGVpc2FfZGV2aWNlX2lkIG5lMzIxMF9pZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZWlzYV9kZXZpY2VfaWQgbmUzMjEwX2lkc1tdIF9fZGV2aW5pdGNvbnN0ID0gewogCXsgIkVHTDAxMDEiIH0sCiAJeyAiTlZMMTgwMSIgfSwKIAl7ICIiIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKaW5kZXggZWI0MWU0NC4uZGZjODI3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCisrKyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYwpAQCAtMjQyLDM0ICsyNDIsNiBAQAogfQogCiAvKgotICogV3JhcHBlciBvdmVyIHNpbXBsZV9zdHJ0b2wgKGJhc2UgMTApIHdpdGggc2FuaXR5IGFuZCByYW5nZSBjaGVja2luZy4KLSAqIFdlIHJldHVybiAoc2lnbmVkKSBsb25nIG9ubHkgYmVjYXVzZSB3ZSBtYXkgd2FudCB0byByZXR1cm4gZXJyb3JzLgotICogRG8gbm90IHVzZSB0aGlzIHRvIGNvbnZlcnQgbnVtYmVycyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIG5lZ2F0aXZlLgotICovCi1zdGF0aWMgbG9uZyBzdHJ0b2wxMF9jaGVja19yYW5nZShjb25zdCBjaGFyICpjcCwgbG9uZyBtaW4sIGxvbmcgbWF4KQotewotCWxvbmcgcmV0OwotCWNoYXIgKnAgPSAoY2hhciAqKSBjcDsKLQotCVdBUk5fT04obWluIDwgMCk7Ci0JV0FSTl9PTihtYXggPCBtaW4pOwotCi0JcmV0ID0gc2ltcGxlX3N0cnRvbChwLCAmcCwgMTApOwotCi0JaWYgKCpwICYmICgqcCAhPSAnXG4nKSkgewotCQlwcmludGsoS0VSTl9FUlIgIm5ldGNvbnNvbGU6IGludmFsaWQgaW5wdXRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JaWYgKChyZXQgPCBtaW4pIHx8IChyZXQgPiBtYXgpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibmV0Y29uc29sZTogaW5wdXQgJWxkIG11c3QgYmUgYmV0d2VlbiAiCi0JCQkJIiVsZCBhbmQgJWxkXG4iLCByZXQsIG1pbiwgbWF4KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotLyoKICAqIEF0dHJpYnV0ZSBvcGVyYXRpb25zIGZvciBuZXRjb25zb2xlX3RhcmdldC4KICAqLwogCkBAIC0zMjcsMTIgKzI5OSwxNCBAQAogCQkJICAgICBjb25zdCBjaGFyICpidWYsCiAJCQkgICAgIHNpemVfdCBjb3VudCkKIHsKKwlpbnQgZW5hYmxlZDsKIAlpbnQgZXJyOwotCWxvbmcgZW5hYmxlZDsKIAotCWVuYWJsZWQgPSBzdHJ0b2wxMF9jaGVja19yYW5nZShidWYsIDAsIDEpOwotCWlmIChlbmFibGVkIDwgMCkKLQkJcmV0dXJuIGVuYWJsZWQ7CisJZXJyID0ga3N0cnRvaW50KGJ1ZiwgMTAsICZlbmFibGVkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlpZiAoZW5hYmxlZCA8IDAgfHwgZW5hYmxlZCA+IDEpCisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGVuYWJsZWQpIHsJLyogMSAqLwogCkBAIC0zODQsOCArMzU4LDcgQEAKIAkJCQljb25zdCBjaGFyICpidWYsCiAJCQkJc2l6ZV90IGNvdW50KQogewotCWxvbmcgbG9jYWxfcG9ydDsKLSNkZWZpbmUgX19VMTZfTUFYCSgoX191MTYpIH4wVSkKKwlpbnQgcnY7CiAKIAlpZiAobnQtPmVuYWJsZWQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJuZXRjb25zb2xlOiB0YXJnZXQgKCVzKSBpcyBlbmFibGVkLCAiCkBAIC0zOTQsMTIgKzM2Nyw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWxvY2FsX3BvcnQgPSBzdHJ0b2wxMF9jaGVja19yYW5nZShidWYsIDAsIF9fVTE2X01BWCk7Ci0JaWYgKGxvY2FsX3BvcnQgPCAwKQotCQlyZXR1cm4gbG9jYWxfcG9ydDsKLQotCW50LT5ucC5sb2NhbF9wb3J0ID0gbG9jYWxfcG9ydDsKLQorCXJ2ID0ga3N0cnRvdTE2KGJ1ZiwgMTAsICZudC0+bnAubG9jYWxfcG9ydCk7CisJaWYgKHJ2IDwgMCkKKwkJcmV0dXJuIHJ2OwogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQogCkBAIC00MDcsOCArMzc3LDcgQEAKIAkJCQkgY29uc3QgY2hhciAqYnVmLAogCQkJCSBzaXplX3QgY291bnQpCiB7Ci0JbG9uZyByZW1vdGVfcG9ydDsKLSNkZWZpbmUgX19VMTZfTUFYCSgoX191MTYpIH4wVSkKKwlpbnQgcnY7CiAKIAlpZiAobnQtPmVuYWJsZWQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJuZXRjb25zb2xlOiB0YXJnZXQgKCVzKSBpcyBlbmFibGVkLCAiCkBAIC00MTcsMTIgKzM4Niw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXJlbW90ZV9wb3J0ID0gc3RydG9sMTBfY2hlY2tfcmFuZ2UoYnVmLCAwLCBfX1UxNl9NQVgpOwotCWlmIChyZW1vdGVfcG9ydCA8IDApCi0JCXJldHVybiByZW1vdGVfcG9ydDsKLQotCW50LT5ucC5yZW1vdGVfcG9ydCA9IHJlbW90ZV9wb3J0OwotCisJcnYgPSBrc3RydG91MTYoYnVmLCAxMCwgJm50LT5ucC5yZW1vdGVfcG9ydCk7CisJaWYgKHJ2IDwgMCkKKwkJcmV0dXJuIHJ2OwogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQogCkBAIC00NjMsOCArNDI5LDYgQEAKIAkJCQlzaXplX3QgY291bnQpCiB7CiAJdTggcmVtb3RlX21hY1tFVEhfQUxFTl07Ci0JY2hhciAqcCA9IChjaGFyICopIGJ1ZjsKLQlpbnQgaTsKIAogCWlmIChudC0+ZW5hYmxlZCkgewogCQlwcmludGsoS0VSTl9FUlIgIm5ldGNvbnNvbGU6IHRhcmdldCAoJXMpIGlzIGVuYWJsZWQsICIKQEAgLTQ3MywyMyArNDM3LDEzIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTiAtIDE7IGkrKykgewotCQlyZW1vdGVfbWFjW2ldID0gc2ltcGxlX3N0cnRvdWwocCwgJnAsIDE2KTsKLQkJaWYgKCpwICE9ICc6JykKLQkJCWdvdG8gaW52YWxpZDsKLQkJcCsrOwotCX0KLQlyZW1vdGVfbWFjW0VUSF9BTEVOIC0gMV0gPSBzaW1wbGVfc3RydG91bChwLCAmcCwgMTYpOwotCWlmICgqcCAmJiAoKnAgIT0gJ1xuJykpCi0JCWdvdG8gaW52YWxpZDsKLQorCWlmICghbWFjX3B0b24oYnVmLCByZW1vdGVfbWFjKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGJ1ZlszICogRVRIX0FMRU4gLSAxXSAmJiBidWZbMyAqIEVUSF9BTEVOIC0gMV0gIT0gJ1xuJykKKwkJcmV0dXJuIC1FSU5WQUw7CiAJbWVtY3B5KG50LT5ucC5yZW1vdGVfbWFjLCByZW1vdGVfbWFjLCBFVEhfQUxFTik7CiAKIAlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKLQotaW52YWxpZDoKLQlwcmludGsoS0VSTl9FUlIgIm5ldGNvbnNvbGU6IGludmFsaWQgaW5wdXRcbiIpOwotCXJldHVybiAtRUlOVkFMOwogfQogCiAvKgpAQCAtNjY3LDExICs2MjEsMTAgQEAKIAlib29sIHN0b3BwZWQgPSBmYWxzZTsKIAogCWlmICghKGV2ZW50ID09IE5FVERFVl9DSEFOR0VOQU1FIHx8IGV2ZW50ID09IE5FVERFVl9VTlJFR0lTVEVSIHx8Ci0JICAgICAgZXZlbnQgPT0gTkVUREVWX0JPTkRJTkdfREVTTEFWRSB8fCBldmVudCA9PSBORVRERVZfR09JTkdfRE9XTikpCisJICAgICAgZXZlbnQgPT0gTkVUREVWX1JFTEVBU0UgfHwgZXZlbnQgPT0gTkVUREVWX0pPSU4pKQogCQlnb3RvIGRvbmU7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdGFyZ2V0X2xpc3RfbG9jaywgZmxhZ3MpOwotcmVzdGFydDoKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG50LCAmdGFyZ2V0X2xpc3QsIGxpc3QpIHsKIAkJbmV0Y29uc29sZV90YXJnZXRfZ2V0KG50KTsKIAkJaWYgKG50LT5ucC5kZXYgPT0gZGV2KSB7CkBAIC02NzksNiArNjMyLDggQEAKIAkJCWNhc2UgTkVUREVWX0NIQU5HRU5BTUU6CiAJCQkJc3RybGNweShudC0+bnAuZGV2X25hbWUsIGRldi0+bmFtZSwgSUZOQU1TSVopOwogCQkJCWJyZWFrOworCQkJY2FzZSBORVRERVZfUkVMRUFTRToKKwkJCWNhc2UgTkVUREVWX0pPSU46CiAJCQljYXNlIE5FVERFVl9VTlJFR0lTVEVSOgogCQkJCS8qCiAJCQkJICogcnRubF9sb2NrIGFscmVhZHkgaGVsZApAQCAtNjkzLDExICs2NDgsNyBAQAogCQkJCQlkZXZfcHV0KG50LT5ucC5kZXYpOwogCQkJCQludC0+bnAuZGV2ID0gTlVMTDsKIAkJCQkJbmV0Y29uc29sZV90YXJnZXRfcHV0KG50KTsKLQkJCQkJZ290byByZXN0YXJ0OwogCQkJCX0KLQkJCQkvKiBGYWxsIHRocm91Z2ggKi8KLQkJCWNhc2UgTkVUREVWX0dPSU5HX0RPV046Ci0JCQljYXNlIE5FVERFVl9CT05ESU5HX0RFU0xBVkU6CiAJCQkJbnQtPmVuYWJsZWQgPSAwOwogCQkJCXN0b3BwZWQgPSB0cnVlOwogCQkJCWJyZWFrOwpAQCAtNzA2LDEwICs2NTcsMjEgQEAKIAkJbmV0Y29uc29sZV90YXJnZXRfcHV0KG50KTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFyZ2V0X2xpc3RfbG9jaywgZmxhZ3MpOwotCWlmIChzdG9wcGVkICYmIChldmVudCA9PSBORVRERVZfVU5SRUdJU1RFUiB8fCBldmVudCA9PSBORVRERVZfQk9ORElOR19ERVNMQVZFKSkKKwlpZiAoc3RvcHBlZCkgewogCQlwcmludGsoS0VSTl9JTkZPICJuZXRjb25zb2xlOiBuZXR3b3JrIGxvZ2dpbmcgc3RvcHBlZCBvbiAiCi0JCQkiaW50ZXJmYWNlICVzIGFzIGl0ICVzXG4iLCAgZGV2LT5uYW1lLAotCQkJZXZlbnQgPT0gTkVUREVWX1VOUkVHSVNURVIgPyAidW5yZWdpc3RlcmVkIiA6ICJyZWxlYXNlZCBzbGF2ZXMiKTsKKwkJICAgICAgICJpbnRlcmZhY2UgJXMgYXMgaXQgIiwgZGV2LT5uYW1lKTsKKwkJc3dpdGNoIChldmVudCkgeworCQljYXNlIE5FVERFVl9VTlJFR0lTVEVSOgorCQkJcHJpbnRrKEtFUk5fQ09OVCAidW5yZWdpc3RlcmVkXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIE5FVERFVl9SRUxFQVNFOgorCQkJcHJpbnRrKEtFUk5fQ09OVCAicmVsZWFzZWQgc2xhdmVzXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIE5FVERFVl9KT0lOOgorCQkJcHJpbnRrKEtFUk5fQ09OVCAiaXMgam9pbmluZyBhIG1hc3RlciBkZXZpY2VcbiIpOworCQkJYnJlYWs7CisJCX0KKwl9CiAKIGRvbmU6CiAJcmV0dXJuIE5PVElGWV9ET05FOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaCBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmgKaW5kZXggNjc5ZGM4NS4uNzcyMjA2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaAorKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oCkBAIC0xMTc3LDcgKzExNzcsNyBAQAogCXU4IG1heF9zZHNfcmluZ3M7CiAJdTggZHJpdmVyX21pc21hdGNoOwogCXU4IG1zaXhfc3VwcG9ydGVkOwotCXU4IHJ4X2NzdW07CisJdTggX19wYWQ7CiAJdTggcGNpX3VzaW5nX2RhYzsKIAl1OCBwb3J0bnVtOwogCXU4IHBoeXNpY2FsX3BvcnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMKaW5kZXggM2JkY2M4MC4uYjM0ZmI3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2V0aHRvb2wuYwpAQCAtMTE3LDcgKzExNyw3IEBACiAKIAkJZWNtZC0+cG9ydCA9IFBPUlRfVFA7CiAKLQkJZWNtZC0+c3BlZWQgPSBhZGFwdGVyLT5saW5rX3NwZWVkOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgYWRhcHRlci0+bGlua19zcGVlZCk7CiAJCWVjbWQtPmR1cGxleCA9IGFkYXB0ZXItPmxpbmtfZHVwbGV4OwogCQllY21kLT5hdXRvbmVnID0gYWRhcHRlci0+bGlua19hdXRvbmVnOwogCkBAIC0xMzQsNyArMTM0LDcgQEAKIAkJfQogCiAJCWlmIChuZXRpZl9ydW5uaW5nKGRldikgJiYgYWRhcHRlci0+aGFzX2xpbmtfZXZlbnRzKSB7Ci0JCQllY21kLT5zcGVlZCA9IGFkYXB0ZXItPmxpbmtfc3BlZWQ7CisJCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgYWRhcHRlci0+bGlua19zcGVlZCk7CiAJCQllY21kLT5hdXRvbmVnID0gYWRhcHRlci0+bGlua19hdXRvbmVnOwogCQkJZWNtZC0+ZHVwbGV4ID0gYWRhcHRlci0+bGlua19kdXBsZXg7CiAJCQlnb3RvIHNraXA7CkBAIC0xNDYsMTAgKzE0NiwxMCBAQAogCQkJdTE2IHBjaWZuID0gYWRhcHRlci0+YWh3LnBjaV9mdW5jOwogCiAJCQl2YWwgPSBOWFJEMzIoYWRhcHRlciwgUDNfTElOS19TUEVFRF9SRUcocGNpZm4pKTsKLQkJCWVjbWQtPnNwZWVkID0gUDNfTElOS19TUEVFRF9NSFogKgotCQkJCQlQM19MSU5LX1NQRUVEX1ZBTChwY2lmbiwgdmFsKTsKKwkJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBQM19MSU5LX1NQRUVEX01IWiAqCisJCQkJCSAgICAgIFAzX0xJTktfU1BFRURfVkFMKHBjaWZuLCB2YWwpKTsKIAkJfSBlbHNlCi0JCQllY21kLT5zcGVlZCA9IFNQRUVEXzEwMDAwOworCQkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIFNQRUVEXzEwMDAwKTsKIAogCQllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKIAkJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKQEAgLTI1MSw2ICsyNTEsNyBAQAogbmV0eGVuX25pY19zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQogewogCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIHNwZWVkID0gZXRodG9vbF9jbWRfc3BlZWQoZWNtZCk7CiAJaW50IHJldDsKIAogCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlICE9IE5FVFhFTl9OSUNfR0JFKQpAQCAtMjU5LDE0ICsyNjAsMTQgQEAKIAlpZiAoIShhZGFwdGVyLT5jYXBhYmlsaXRpZXMgJiBOWF9GV19DQVBBQklMSVRZX0dCRV9MSU5LX0NGRykpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJldCA9IG54X2Z3X2NtZF9zZXRfZ2JlX3BvcnQoYWRhcHRlciwgZWNtZC0+c3BlZWQsIGVjbWQtPmR1cGxleCwKKwlyZXQgPSBueF9md19jbWRfc2V0X2diZV9wb3J0KGFkYXB0ZXIsIHNwZWVkLCBlY21kLT5kdXBsZXgsCiAJCQkJICAgICBlY21kLT5hdXRvbmVnKTsKIAlpZiAocmV0ID09IE5YX1JDT0RFX05PVF9TVVBQT1JURUQpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAllbHNlIGlmIChyZXQpCiAJCXJldHVybiAtRUlPOwogCi0JYWRhcHRlci0+bGlua19zcGVlZCA9IGVjbWQtPnNwZWVkOworCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSBzcGVlZDsKIAlhZGFwdGVyLT5saW5rX2R1cGxleCA9IGVjbWQtPmR1cGxleDsKIAlhZGFwdGVyLT5saW5rX2F1dG9uZWcgPSBlY21kLT5hdXRvbmVnOwogCkBAIC02NzYsNjIgKzY3Nyw2IEBACiAJfQogfQogCi1zdGF0aWMgdTMyIG5ldHhlbl9uaWNfZ2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSVBfQ1NVTTsKLX0KLQotc3RhdGljIHUzMiBuZXR4ZW5fbmljX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gYWRhcHRlci0+cnhfY3N1bTsKLX0KLQotc3RhdGljIGludCBuZXR4ZW5fbmljX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoZGF0YSkgewotCQlhZGFwdGVyLT5yeF9jc3VtID0gZGF0YTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTykgewotCQlpZiAobmV0eGVuX2NvbmZpZ19od19scm8oYWRhcHRlciwgTkVUWEVOX05JQ19MUk9fRElTQUJMRUQpKQotCQkJcmV0dXJuIC1FSU87Ci0KLQkJZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9MUk87Ci0JCW5ldHhlbl9zZW5kX2xyb19jbGVhbnVwKGFkYXB0ZXIpOwotCQluZXRkZXZfaW5mbyhkZXYsICJkaXNhYmxpbmcgTFJPIGFzIHJ4X2NzdW0gaXMgb2ZmXG4iKTsKLQl9Ci0JYWRhcHRlci0+cnhfY3N1bSA9IGRhdGE7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1MzIgbmV0eGVuX25pY19nZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmIChOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQotCQlyZXR1cm4gKGRldi0+ZmVhdHVyZXMgJiAoTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYpKSAhPSAwOwotCi0JcmV0dXJuIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9UU08pICE9IDA7Ci19Ci0KLXN0YXRpYyBpbnQgbmV0eGVuX25pY19zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCWlmIChkYXRhKSB7Ci0JCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7Ci0KLQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKLQkJaWYgKE5YX0lTX1JFVklTSU9OX1AzKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCi0JCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKLQl9IGVsc2UKLQkJZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082KTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZAogbmV0eGVuX25pY19nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKIHsKQEAgLTg2Niw0MyArODExLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBuZXR4ZW5fbmljX3NldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCWludCBod19scm87Ci0KLQlpZiAoZXRodG9vbF9pbnZhbGlkX2ZsYWdzKG5ldGRldiwgZGF0YSwgRVRIX0ZMQUdfTFJPKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIShhZGFwdGVyLT5jYXBhYmlsaXRpZXMgJiBOWF9GV19DQVBBQklMSVRZX0hXX0xSTykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCFhZGFwdGVyLT5yeF9jc3VtKSB7Ci0JCW5ldGRldl9pbmZvKG5ldGRldiwgInJ4IGNzdW0gaXMgb2ZmLCBjYW5ub3QgdG9nZ2xlIExST1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICghIShkYXRhICYgRVRIX0ZMQUdfTFJPKSA9PSAhIShuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MUk8pKQotCQlyZXR1cm4gMDsKLQotCWlmIChkYXRhICYgRVRIX0ZMQUdfTFJPKSB7Ci0JCWh3X2xybyA9IE5FVFhFTl9OSUNfTFJPX0VOQUJMRUQ7Ci0JCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87Ci0JfSBlbHNlIHsKLQkJaHdfbHJvID0gTkVUWEVOX05JQ19MUk9fRElTQUJMRUQ7Ci0JCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfTFJPOwotCX0KLQotCWlmIChuZXR4ZW5fY29uZmlnX2h3X2xybyhhZGFwdGVyLCBod19scm8pKQotCQlyZXR1cm4gLUVJTzsKLQotCWlmICgoaHdfbHJvID09IDApICYmIG5ldHhlbl9zZW5kX2xyb19jbGVhbnVwKGFkYXB0ZXIpKQotCQlyZXR1cm4gLUVJTzsKLQotCi0JcmV0dXJuIDA7Ci19Ci0KIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZXR4ZW5fbmljX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MgPSBuZXR4ZW5fbmljX2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzID0gbmV0eGVuX25pY19zZXRfc2V0dGluZ3MsCkBAIC05MTYsMjEgKzgyNCwxMiBAQAogCS5zZXRfcmluZ3BhcmFtID0gbmV0eGVuX25pY19zZXRfcmluZ3BhcmFtLAogCS5nZXRfcGF1c2VwYXJhbSA9IG5ldHhlbl9uaWNfZ2V0X3BhdXNlcGFyYW0sCiAJLnNldF9wYXVzZXBhcmFtID0gbmV0eGVuX25pY19zZXRfcGF1c2VwYXJhbSwKLQkuZ2V0X3R4X2NzdW0gPSBuZXR4ZW5fbmljX2dldF90eF9jc3VtLAotCS5zZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3Bfc2V0X3R4X2NzdW0sCi0JLnNldF9zZyA9IGV0aHRvb2xfb3Bfc2V0X3NnLAotCS5nZXRfdHNvID0gbmV0eGVuX25pY19nZXRfdHNvLAotCS5zZXRfdHNvID0gbmV0eGVuX25pY19zZXRfdHNvLAogCS5nZXRfd29sID0gbmV0eGVuX25pY19nZXRfd29sLAogCS5zZXRfd29sID0gbmV0eGVuX25pY19zZXRfd29sLAogCS5zZWxmX3Rlc3QgPSBuZXR4ZW5fbmljX2RpYWdfdGVzdCwKIAkuZ2V0X3N0cmluZ3MgPSBuZXR4ZW5fbmljX2dldF9zdHJpbmdzLAogCS5nZXRfZXRodG9vbF9zdGF0cyA9IG5ldHhlbl9uaWNfZ2V0X2V0aHRvb2xfc3RhdHMsCiAJLmdldF9zc2V0X2NvdW50ID0gbmV0eGVuX2dldF9zc2V0X2NvdW50LAotCS5nZXRfcnhfY3N1bSA9IG5ldHhlbl9uaWNfZ2V0X3J4X2NzdW0sCi0JLnNldF9yeF9jc3VtID0gbmV0eGVuX25pY19zZXRfcnhfY3N1bSwKIAkuZ2V0X2NvYWxlc2NlID0gbmV0eGVuX2dldF9pbnRyX2NvYWxlc2NlLAogCS5zZXRfY29hbGVzY2UgPSBuZXR4ZW5fc2V0X2ludHJfY29hbGVzY2UsCi0JLmdldF9mbGFncyA9IGV0aHRvb2xfb3BfZ2V0X2ZsYWdzLAotCS5zZXRfZmxhZ3MgPSBuZXR4ZW5fbmljX3NldF9mbGFncywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMKaW5kZXggNzMxMDc3ZC4uN2Y5OTk2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYwpAQCAtMTQ4Myw3ICsxNDgzLDggQEAKIAlpZiAoIXNrYikKIAkJZ290byBub19za2I7CiAKLQlpZiAobGlrZWx5KGFkYXB0ZXItPnJ4X2NzdW0gJiYgY2tzdW0gPT0gU1RBVFVTX0NLU1VNX09LKSkgeworCWlmIChsaWtlbHkoKGFkYXB0ZXItPm5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkKKwkgICAgJiYgY2tzdW0gPT0gU1RBVFVTX0NLU1VNX09LKSkgewogCQlhZGFwdGVyLT5zdGF0cy5jc3VtbWVkKys7CiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJfSBlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKaW5kZXggZThhNGI2Ni4uYjY0NDM4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYwpAQCAtNDg1LDYgKzQ4NSwzNyBAQAogCWFkYXB0ZXItPnNldF9tdWx0aShkZXYpOwogfQogCitzdGF0aWMgdTMyIG5ldHhlbl9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZlYXR1cmVzKQoreworCWlmICghKGZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pKSB7CisJCW5ldGRldl9pbmZvKGRldiwgImRpc2FibGluZyBMUk8gYXMgUlhDU1VNIGlzIG9mZlxuIik7CisKKwkJZmVhdHVyZXMgJj0gfk5FVElGX0ZfTFJPOworCX0KKworCXJldHVybiBmZWF0dXJlczsKK30KKworc3RhdGljIGludCBuZXR4ZW5fc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcykKK3sKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBod19scm87CisKKwlpZiAoISgoZGV2LT5mZWF0dXJlcyBeIGZlYXR1cmVzKSAmIE5FVElGX0ZfTFJPKSkKKwkJcmV0dXJuIDA7CisKKwlod19scm8gPSAoZmVhdHVyZXMgJiBORVRJRl9GX0xSTykgPyBORVRYRU5fTklDX0xST19FTkFCTEVECisJICAgICAgICAgOiBORVRYRU5fTklDX0xST19ESVNBQkxFRDsKKworCWlmIChuZXR4ZW5fY29uZmlnX2h3X2xybyhhZGFwdGVyLCBod19scm8pKQorCQlyZXR1cm4gLUVJTzsKKworCWlmICghKGZlYXR1cmVzICYgTkVUSUZfRl9MUk8pICYmIG5ldHhlbl9zZW5kX2xyb19jbGVhbnVwKGFkYXB0ZXIpKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5ldHhlbl9uZXRkZXZfb3BzID0gewogCS5uZG9fb3BlbgkgICA9IG5ldHhlbl9uaWNfb3BlbiwKIAkubmRvX3N0b3AJICAgPSBuZXR4ZW5fbmljX2Nsb3NlLApAQCAtNDk1LDYgKzUyNiw4IEBACiAJLm5kb19zZXRfbWFjX2FkZHJlc3MgICAgPSBuZXR4ZW5fbmljX3NldF9tYWMsCiAJLm5kb19jaGFuZ2VfbXR1CSAgID0gbmV0eGVuX25pY19jaGFuZ2VfbXR1LAogCS5uZG9fdHhfdGltZW91dAkgICA9IG5ldHhlbl90eF90aW1lb3V0LAorCS5uZG9fZml4X2ZlYXR1cmVzID0gbmV0eGVuX2ZpeF9mZWF0dXJlcywKKwkubmRvX3NldF9mZWF0dXJlcyA9IG5ldHhlbl9zZXRfZmVhdHVyZXMsCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIAkubmRvX3BvbGxfY29udHJvbGxlciA9IG5ldHhlbl9uaWNfcG9sbF9jb250cm9sbGVyLAogI2VuZGlmCkBAIC05MDUsNyArOTM4LDcgQEAKIAlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7CiAJaW50IGVyciwgcmluZzsKIAotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBJUlFGX1NBTVBMRV9SQU5ET007CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CiAKQEAgLTExOTYsNyArMTIyOSw2IEBACiAJaW50IGVyciA9IDA7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCi0JYWRhcHRlci0+cnhfY3N1bSA9IDE7CiAJYWRhcHRlci0+bWNfZW5hYmxlZCA9IDA7CiAJaWYgKE5YX0lTX1JFVklTSU9OX1AzKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCiAJCWFkYXB0ZXItPm1heF9tY19jb3VudCA9IDM4OwpAQCAtMTIxMCwxNCArMTI0MiwxMyBAQAogCiAJU0VUX0VUSFRPT0xfT1BTKG5ldGRldiwgJm5ldHhlbl9uaWNfZXRodG9vbF9vcHMpOwogCi0JbmV0ZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfVFNPKTsKLQluZXRkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX0dSTyk7Ci0JbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IChORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9UU08pOworCW5ldGRldi0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9UU08gfAorCSAgICAgICAgICAgICAgICAgICAgICBORVRJRl9GX1JYQ1NVTTsKIAotCWlmIChOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKSB7Ci0JCW5ldGRldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9UU082KTsKLQkJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IChORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfVFNPNik7Ci0JfQorCWlmIChOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQorCQluZXRkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9UU082OworCisJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IG5ldGRldi0+aHdfZmVhdHVyZXM7CiAKIAlpZiAoYWRhcHRlci0+cGNpX3VzaW5nX2RhYykgewogCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKQEAgLTEyMjUsMTAgKzEyNTYsMTIgQEAKIAl9CiAKIAlpZiAoYWRhcHRlci0+Y2FwYWJpbGl0aWVzICYgTlhfRldfQ0FQQUJJTElUWV9GVkxBTlRYKQotCQluZXRkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX0hXX1ZMQU5fVFgpOworCQluZXRkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWDsKIAogCWlmIChhZGFwdGVyLT5jYXBhYmlsaXRpZXMgJiBOWF9GV19DQVBBQklMSVRZX0hXX0xSTykKLQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xSTzsKKwkJbmV0ZGV2LT5od19mZWF0dXJlcyB8PSBORVRJRl9GX0xSTzsKKworCW5ldGRldi0+ZmVhdHVyZXMgfD0gbmV0ZGV2LT5od19mZWF0dXJlczsKIAogCW5ldGRldi0+aXJxID0gYWRhcHRlci0+bXNpeF9lbnRyaWVzWzBdLnZlY3RvcjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbml1LmMgYi9kcml2ZXJzL25ldC9uaXUuYwppbmRleCAzMjY3OGI2Li5jYzI1YmZmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbml1LmMKKysrIGIvZHJpdmVycy9uZXQvbml1LmMKQEAgLTEyMzMsNyArMTIzMyw3IEBACiAKIAlibXNyID0gZXJyOwogCWlmIChibXNyICYgQk1TUl9MU1RBVFVTKSB7Ci0JCXUxNiBhZHYsIGxwYSwgY29tbW9uLCBlc3RhdDsKKwkJdTE2IGFkdiwgbHBhOwogCiAJCWVyciA9IG1paV9yZWFkKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9BRFZFUlRJU0UpOwogCQlpZiAoZXJyIDwgMCkKQEAgLTEyNDUsMTIgKzEyNDUsOSBAQAogCQkJZ290byBvdXQ7CiAJCWxwYSA9IGVycjsKIAotCQljb21tb24gPSBhZHYgJiBscGE7Ci0KIAkJZXJyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX0VTVEFUVVMpOwogCQlpZiAoZXJyIDwgMCkKIAkJCWdvdG8gb3V0OwotCQllc3RhdCA9IGVycjsKIAkJbGlua191cCA9IDE7CiAJCWN1cnJlbnRfc3BlZWQgPSBTUEVFRF8xMDAwOwogCQljdXJyZW50X2R1cGxleCA9IERVUExFWF9GVUxMOwpAQCAtMTY1MCw3ICsxNjQ3LDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBtaWlfcmVzZXQoc3RydWN0IG5pdSAqbnApCkBAIC0yMzgxLDE3ICsyMzc4LDE0IEBACiAJc3RydWN0IG5pdV9saW5rX2NvbmZpZyAqbHAgPSAmbnAtPmxpbmtfY29uZmlnOwogCXVuc2lnbmVkIGxvbmcgY3RybF9yZWcsIHRlc3RfY2ZnX3JlZywgcGxsX2NmZywgaTsKIAl1NjQgY3RybF92YWwsIHRlc3RfY2ZnX3ZhbCwgc2lnLCBtYXNrLCB2YWw7Ci0JdTY0IHJlc2V0X3ZhbDsKIAogCXN3aXRjaCAobnAtPnBvcnQpIHsKIAljYXNlIDA6Ci0JCXJlc2V0X3ZhbCA9ICBFTkVUX1NFUkRFU19SRVNFVF8wOwogCQljdHJsX3JlZyA9IEVORVRfU0VSREVTXzBfQ1RSTF9DRkc7CiAJCXRlc3RfY2ZnX3JlZyA9IEVORVRfU0VSREVTXzBfVEVTVF9DRkc7CiAJCXBsbF9jZmcgPSBFTkVUX1NFUkRFU18wX1BMTF9DRkc7CiAJCWJyZWFrOwogCWNhc2UgMToKLQkJcmVzZXRfdmFsID0gIEVORVRfU0VSREVTX1JFU0VUXzE7CiAJCWN0cmxfcmVnID0gRU5FVF9TRVJERVNfMV9DVFJMX0NGRzsKIAkJdGVzdF9jZmdfcmVnID0gRU5FVF9TRVJERVNfMV9URVNUX0NGRzsKIAkJcGxsX2NmZyA9IEVORVRfU0VSREVTXzFfUExMX0NGRzsKQEAgLTYwNzEsOCArNjA2NSw3IEBACiAJZm9yIChpID0gMDsgaSA8IG5wLT5udW1fbGRnOyBpKyspIHsKIAkJc3RydWN0IG5pdV9sZGcgKmxwID0gJm5wLT5sZGdbaV07CiAKLQkJZXJyID0gcmVxdWVzdF9pcnEobHAtPmlycSwgbml1X2ludGVycnVwdCwKLQkJCQkgIElSUUZfU0hBUkVEIHwgSVJRRl9TQU1QTEVfUkFORE9NLAorCQllcnIgPSByZXF1ZXN0X2lycShscC0+aXJxLCBuaXVfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKIAkJCQkgIG5wLT5pcnFfbmFtZVtpXSwgbHApOwogCQlpZiAoZXJyKQogCQkJZ290byBvdXRfZnJlZV9pcnFzOwpAQCAtNjg1MSw3ICs2ODQ0LDcgQEAKIAljbWQtPnN1cHBvcnRlZCA9IGxwLT5zdXBwb3J0ZWQ7CiAJY21kLT5hZHZlcnRpc2luZyA9IGxwLT5hY3RpdmVfYWR2ZXJ0aXNpbmc7CiAJY21kLT5hdXRvbmVnID0gbHAtPmFjdGl2ZV9hdXRvbmVnOwotCWNtZC0+c3BlZWQgPSBscC0+YWN0aXZlX3NwZWVkOworCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIGxwLT5hY3RpdmVfc3BlZWQpOwogCWNtZC0+ZHVwbGV4ID0gbHAtPmFjdGl2ZV9kdXBsZXg7CiAJY21kLT5wb3J0ID0gKG5wLT5mbGFncyAmIE5JVV9GTEFHU19GSUJFUikgPyBQT1JUX0ZJQlJFIDogUE9SVF9UUDsKIAljbWQtPnRyYW5zY2VpdmVyID0gKG5wLT5mbGFncyAmIE5JVV9GTEFHU19YQ1ZSX1NFUkRFUykgPwpAQCAtNjg2Niw3ICs2ODU5LDcgQEAKIAlzdHJ1Y3Qgbml1X2xpbmtfY29uZmlnICpscCA9ICZucC0+bGlua19jb25maWc7CiAKIAlscC0+YWR2ZXJ0aXNpbmcgPSBjbWQtPmFkdmVydGlzaW5nOwotCWxwLT5zcGVlZCA9IGNtZC0+c3BlZWQ7CisJbHAtPnNwZWVkID0gZXRodG9vbF9jbWRfc3BlZWQoY21kKTsKIAlscC0+ZHVwbGV4ID0gY21kLT5kdXBsZXg7CiAJbHAtPmF1dG9uZWcgPSBjbWQtPmF1dG9uZWc7CiAJcmV0dXJuIG5pdV9pbml0X2xpbmsobnApOwpAQCAtNzAyMyw2ICs3MDE2LDcgQEAKIAljYXNlIFVEUF9WNF9GTE9XOgogCQkqY2xhc3MgPSBDTEFTU19DT0RFX1VEUF9JUFY0OwogCQlicmVhazsKKwljYXNlIEFIX0VTUF9WNF9GTE9XOgogCWNhc2UgQUhfVjRfRkxPVzoKIAljYXNlIEVTUF9WNF9GTE9XOgogCQkqY2xhc3MgPSBDTEFTU19DT0RFX0FIX0VTUF9JUFY0OwpAQCAtNzAzNiw2ICs3MDMwLDcgQEAKIAljYXNlIFVEUF9WNl9GTE9XOgogCQkqY2xhc3MgPSBDTEFTU19DT0RFX1VEUF9JUFY2OwogCQlicmVhazsKKwljYXNlIEFIX0VTUF9WNl9GTE9XOgogCWNhc2UgQUhfVjZfRkxPVzoKIAljYXNlIEVTUF9WNl9GTE9XOgogCQkqY2xhc3MgPSBDTEFTU19DT0RFX0FIX0VTUF9JUFY2OwpAQCAtNzg4OSwzNyArNzg4NCwzNSBAQAogCW53NjRfbWFjKHJlZywgdmFsKTsKIH0KIAotc3RhdGljIGludCBuaXVfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3N0YXRpYyBpbnQgbml1X3NldF9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICBlbnVtIGV0aHRvb2xfcGh5c19pZF9zdGF0ZSBzdGF0ZSkKKwogewogCXN0cnVjdCBuaXUgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1NjQgb3JpZ19sZWRfc3RhdGU7Ci0JaW50IGk7CiAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKLQlpZiAoZGF0YSA9PSAwKQotCQlkYXRhID0gMjsKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBFVEhUT09MX0lEX0FDVElWRToKKwkJbnAtPm9yaWdfbGVkX3N0YXRlID0gbml1X2xlZF9zdGF0ZV9zYXZlKG5wKTsKKwkJcmV0dXJuIDE7CS8qIGN5Y2xlIG9uL29mZiBvbmNlIHBlciBzZWNvbmQgKi8KIAotCW9yaWdfbGVkX3N0YXRlID0gbml1X2xlZF9zdGF0ZV9zYXZlKG5wKTsKLQlmb3IgKGkgPSAwOyBpIDwgKGRhdGEgKiAyKTsgaSsrKSB7Ci0JCWludCBvbiA9ICgoaSAlIDIpID09IDApOworCWNhc2UgRVRIVE9PTF9JRF9PTjoKKwkJbml1X2ZvcmNlX2xlZChucCwgMSk7CisJCWJyZWFrOwogCi0JCW5pdV9mb3JjZV9sZWQobnAsIG9uKTsKKwljYXNlIEVUSFRPT0xfSURfT0ZGOgorCQluaXVfZm9yY2VfbGVkKG5wLCAwKTsKKwkJYnJlYWs7CiAKLQkJaWYgKG1zbGVlcF9pbnRlcnJ1cHRpYmxlKDUwMCkpCi0JCQlicmVhazsKKwljYXNlIEVUSFRPT0xfSURfSU5BQ1RJVkU6CisJCW5pdV9sZWRfc3RhdGVfcmVzdG9yZShucCwgbnAtPm9yaWdfbGVkX3N0YXRlKTsKIAl9Ci0Jbml1X2xlZF9zdGF0ZV9yZXN0b3JlKG5wLCBvcmlnX2xlZF9zdGF0ZSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBuaXVfc2V0X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCXJldHVybiBldGh0b29sX29wX3NldF9mbGFncyhkZXYsIGRhdGEsIEVUSF9GTEFHX1JYSEFTSCk7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbml1X2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbwkJPSBuaXVfZ2V0X2RydmluZm8sCiAJLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCkBAIC03OTMzLDExICs3OTI2LDkgQEAKIAkuZ2V0X3N0cmluZ3MJCT0gbml1X2dldF9zdHJpbmdzLAogCS5nZXRfc3NldF9jb3VudAkJPSBuaXVfZ2V0X3NzZXRfY291bnQsCiAJLmdldF9ldGh0b29sX3N0YXRzCT0gbml1X2dldF9ldGh0b29sX3N0YXRzLAotCS5waHlzX2lkCQk9IG5pdV9waHlzX2lkLAorCS5zZXRfcGh5c19pZAkJPSBuaXVfc2V0X3BoeXNfaWQsCiAJLmdldF9yeG5mYwkJPSBuaXVfZ2V0X25mYywKIAkuc2V0X3J4bmZjCQk9IG5pdV9zZXRfbmZjLAotCS5zZXRfZmxhZ3MJCT0gbml1X3NldF9mbGFncywKLQkuZ2V0X2ZsYWdzCQk9IGV0aHRvb2xfb3BfZ2V0X2ZsYWdzLAogfTsKIAogc3RhdGljIGludCBuaXVfbGRnX2Fzc2lnbl9sZG4oc3RydWN0IG5pdSAqbnAsIHN0cnVjdCBuaXVfcGFyZW50ICpwYXJlbnQsCkBAIC04MTMxLDcgKzgxMjIsNyBAQAogCW5ldGlmX3ByaW50ayhucCwgcHJvYmUsIEtFUk5fREVCVUcsIG5wLT5kZXYsCiAJCSAgICAgIlZQRF9TQ0FOOiBzdGFydFsleF0gZW5kWyV4XVxuIiwgc3RhcnQsIGVuZCk7CiAJd2hpbGUgKHN0YXJ0IDwgZW5kKSB7Ci0JCWludCBsZW4sIGVyciwgaW5zdGFuY2UsIHR5cGUsIHByb3BfbGVuOworCQlpbnQgbGVuLCBlcnIsIHByb3BfbGVuOwogCQljaGFyIG5hbWVidWZbNjRdOwogCQl1OCAqcHJvcF9idWY7CiAJCWludCBtYXhfbGVuOwpAQCAtODE0Nyw4ICs4MTM4LDYgQEAKIAkJbGVuID0gZXJyOwogCQlzdGFydCArPSAzOwogCi0JCWluc3RhbmNlID0gbml1X3BjaV9lZXByb21fcmVhZChucCwgc3RhcnQpOwotCQl0eXBlID0gbml1X3BjaV9lZXByb21fcmVhZChucCwgc3RhcnQgKyAzKTsKIAkJcHJvcF9sZW4gPSBuaXVfcGNpX2VlcHJvbV9yZWFkKG5wLCBzdGFydCArIDQpOwogCQllcnIgPSBuaXVfcGNpX3ZwZF9nZXRfcHJvcG5hbWUobnAsIHN0YXJ0ICsgNSwgbmFtZWJ1ZiwgNjQpOwogCQlpZiAoZXJyIDwgMCkKQEAgLTk3NjgsOCArOTc1Nyw4IEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBuaXVfc2V0X2Jhc2ljX2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9TRyB8IE5FVElGX0ZfSFdfQ1NVTSB8Ci0JCQkgIE5FVElGX0ZfR1JPIHwgTkVUSUZfRl9SWEhBU0gpOworCWRldi0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9IV19DU1VNIHwgTkVUSUZfRl9SWEhBU0g7CisJZGV2LT5mZWF0dXJlcyB8PSBkZXYtPmh3X2ZlYXR1cmVzIHwgTkVUSUZfRl9SWENTVU07CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IG5pdV9wY2lfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uaXUuaCBiL2RyaXZlcnMvbmV0L25pdS5oCmluZGV4IGE0MWZhOGUuLjUxZTE3N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25pdS5oCisrKyBiL2RyaXZlcnMvbmV0L25pdS5oCkBAIC0zMjc5LDYgKzMyNzksNyBAQAogCXVuc2lnbmVkIGxvbmcJCQl4cGNzX29mZjsKIAogCXN0cnVjdCB0aW1lcl9saXN0CQl0aW1lcjsKKwl1NjQJCQkJb3JpZ19sZWRfc3RhdGU7CiAJY29uc3Qgc3RydWN0IG5pdV9waHlfb3BzCSpwaHlfb3BzOwogCWludAkJCQlwaHlfYWRkcjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbnM4MzgyMC5jIGIvZHJpdmVycy9uZXQvbnM4MzgyMC5jCmluZGV4IDY2NjdlMDYuLjNlNDA0MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25zODM4MjAuYworKysgYi9kcml2ZXJzL25ldC9uczgzODIwLmMKQEAgLTEyNTEsNyArMTI1MSw3IEBACiAJLyoKIAkgKiBIZXJlJ3MgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGV0aHRvb2wgY29tbWFuZHMgZnJvbSBvdGhlciBkcml2ZXJzOgogCSAqCWNtZC0+YWR2ZXJ0aXNpbmcgPQotCSAqCWNtZC0+c3BlZWQgPQorCSAqCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIC4uLikKIAkgKgljbWQtPmR1cGxleCA9CiAJICoJY21kLT5wb3J0ID0gMDsKIAkgKgljbWQtPnBoeV9hZGRyZXNzID0KQEAgLTEyODksMTMgKzEyODksMTMgQEAKIAljbWQtPmR1cGxleCA9IGZ1bGxkdXBsZXggPyBEVVBMRVhfRlVMTCA6IERVUExFWF9IQUxGOwogCXN3aXRjaCAoY2ZnIC8gQ0ZHX1NQRFNUUzAgJiAzKSB7CiAJY2FzZSAyOgotCQljbWQtPnNwZWVkID0gU1BFRURfMTAwMDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgU1BFRURfMTAwMCk7CiAJCWJyZWFrOwogCWNhc2UgMToKLQkJY21kLT5zcGVlZCA9IFNQRUVEXzEwMDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgU1BFRURfMTAwKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJY21kLT5zcGVlZCA9IFNQRUVEXzEwOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCBTUEVFRF8xMCk7CiAJCWJyZWFrOwogCX0KIAljbWQtPmF1dG9uZWcgPSAodGJpY3IgJiBUQklDUl9NUl9BTl9FTkFCTEUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wYXNlbWlfbWFjLmMgYi9kcml2ZXJzL25ldC9wYXNlbWlfbWFjLmMKaW5kZXggODI4ZTk3Yy4uOWVjMTEyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGFzZW1pX21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3Bhc2VtaV9tYWMuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgogI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgogI2luY2x1ZGUgPGxpbnV4L2luZXRfbHJvLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZS5oIGIvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlLmgKaW5kZXggYmYxMjZlNy4uNTlmYWM3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlLmgKKysrIGIvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlLmgKQEAgLTU5Nyw4ICs1OTcsNiBAQAogICogQHJ4X3Jpbmc6CQlQb2ludGVyIG9mIFJ4IGRlc2NyaXB0b3IgcmluZyBzdHJ1Y3R1cmUKICAqIEByeF9idWZmZXJfbGVuOglSZWNlaXZlIGJ1ZmZlciBsZW5ndGgKICAqIEB0eF9xdWV1ZV9sZW46CVRyYW5zbWl0IHF1ZXVlIGxlbmd0aAotICogQHJ4X2NzdW06CQlSZWNlaXZlIFRDUC9JUCBjaGVja3N1bSBlbmFibGUvZGlzYWJsZQotICogQHR4X2NzdW06CQlUcmFuc21pdCBUQ1AvSVAgY2hlY2tzdW0gZW5hYmxlL2Rpc2FibGUKICAqIEBoYXZlX21zaToJCVBDSSBNU0kgbW9kZSBmbGFnCiAgKi8KIApAQCAtNjIzLDggKzYyMSw2IEBACiAJc3RydWN0IHBjaF9nYmVfcnhfcmluZyAqcnhfcmluZzsKIAl1bnNpZ25lZCBsb25nIHJ4X2J1ZmZlcl9sZW47CiAJdW5zaWduZWQgbG9uZyB0eF9xdWV1ZV9sZW47Ci0JYm9vbCByeF9jc3VtOwotCWJvb2wgdHhfY3N1bTsKIAlib29sIGhhdmVfbXNpOwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZV9ldGh0b29sLmMKaW5kZXggZDIxNzRhNC4uZWEyZDhlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmVfZXRodG9vbC5jCkBAIC05Miw3ICs5Miw3IEBACiAJZWNtZC0+YWR2ZXJ0aXNpbmcgJj0gfihBRFZFUlRJU0VEX1RQIHwgQURWRVJUSVNFRF8xMDAwYmFzZVRfSGFsZik7CiAKIAlpZiAoIW5ldGlmX2NhcnJpZXJfb2soYWRhcHRlci0+bmV0ZGV2KSkKLQkJZWNtZC0+c3BlZWQgPSAtMTsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIC0xKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMDksMTIgKzEwOSwxNSBAQAogewogCXN0cnVjdCBwY2hfZ2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBwY2hfZ2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgc3BlZWQgPSBldGh0b29sX2NtZF9zcGVlZChlY21kKTsKIAlpbnQgcmV0OwogCiAJcGNoX2diZV9oYWxfd3JpdGVfcGh5X3JlZyhodywgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQpOwogCi0JaWYgKGVjbWQtPnNwZWVkID09IFVTSFJUX01BWCkgewotCQllY21kLT5zcGVlZCA9IFNQRUVEXzEwMDA7CisJLyogd2hlbiBzZXRfc2V0dGluZ3MoKSBpcyBjYWxsZWQgd2l0aCBhIGV0aHRvb2xfY21kIHByZXZpb3VzbHkKKwkgKiBmaWxsZWQgYnkgZ2V0X3NldHRpbmdzKCkgb24gYSBkb3duIGxpbmssIHNwZWVkIGlzIC0xOiAqLworCWlmIChzcGVlZCA9PSBVSU5UX01BWCkgeworCQlzcGVlZCA9IFNQRUVEXzEwMDA7CiAJCWVjbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOwogCX0KIAlyZXQgPSBtaWlfZXRodG9vbF9zc2V0KCZhZGFwdGVyLT5taWksIGVjbWQpOwpAQCAtMTIyLDcgKzEyNSw3IEBACiAJCXByX2VycigiRXJyb3I6IG1paV9ldGh0b29sX3NzZXRcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KLQlody0+bWFjLmxpbmtfc3BlZWQgPSBlY21kLT5zcGVlZDsKKwlody0+bWFjLmxpbmtfc3BlZWQgPSBzcGVlZDsKIAlody0+bWFjLmxpbmtfZHVwbGV4ID0gZWNtZC0+ZHVwbGV4OwogCWh3LT5waHkuYXV0b25lZ19hZHZlcnRpc2VkID0gZWNtZC0+YWR2ZXJ0aXNpbmc7CiAJaHctPm1hYy5hdXRvbmVnID0gZWNtZC0+YXV0b25lZzsKQEAgLTQzNCw1NyArNDM3LDYgQEAKIH0KIAogLyoqCi0gKiBwY2hfZ2JlX2dldF9yeF9jc3VtIC0gUmVwb3J0IHdoZXRoZXIgcmVjZWl2ZSBjaGVja3N1bXMgYXJlIHR1cm5lZCBvbiBvciBvZmYKLSAqIEBuZXRkZXY6ICBOZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCi0gKiBSZXR1cm5zCi0gKgl0cnVlKDEpOiAgQ2hlY2tzdW0gT24KLSAqCWZhbHNlKDApOiBDaGVja3N1bSBPZmYKLSAqLwotc3RhdGljIHUzMiBwY2hfZ2JlX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCi17Ci0Jc3RydWN0IHBjaF9nYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0KLQlyZXR1cm4gYWRhcHRlci0+cnhfY3N1bTsKLX0KLQotLyoqCi0gKiBwY2hfZ2JlX3NldF9yeF9jc3VtIC0gVHVybiByZWNlaXZlIGNoZWNrc3VtIG9uIG9yIG9mZgotICogQG5ldGRldjogIE5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEBkYXRhOiAgICBDaGVja3N1bSBPblt0cnVlXSBvciBPZmZbZmFsc2VdCi0gKiBSZXR1cm5zCi0gKgkwOgkJCVN1Y2Nlc3NmdWwuCi0gKglOZWdhdGl2ZSB2YWx1ZToJCUZhaWxlZC4KLSAqLwotc3RhdGljIGludCBwY2hfZ2JlX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCBwY2hfZ2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0JYWRhcHRlci0+cnhfY3N1bSA9IGRhdGE7Ci0JaWYgKChuZXRpZl9ydW5uaW5nKG5ldGRldikpKQotCQlwY2hfZ2JlX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7Ci0JZWxzZQotCQlwY2hfZ2JlX3Jlc2V0KGFkYXB0ZXIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogcGNoX2diZV9zZXRfdHhfY3N1bSAtIFR1cm4gdHJhbnNtaXQgY2hlY2tzdW1zIG9uIG9yIG9mZgotICogQG5ldGRldjogTmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQotICogQGRhdGE6ICAgQ2hlY2tzdW0gb25bdHJ1ZV0gb3Igb2ZmW2ZhbHNlXQotICogUmV0dXJucwotICoJMDoJCQlTdWNjZXNzZnVsLgotICoJTmVnYXRpdmUgdmFsdWU6CQlGYWlsZWQuCi0gKi8KLXN0YXRpYyBpbnQgcGNoX2diZV9zZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgcGNoX2diZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQotCWFkYXB0ZXItPnR4X2NzdW0gPSBkYXRhOwotCXJldHVybiBldGh0b29sX29wX3NldF90eF9pcHY2X2NzdW0obmV0ZGV2LCBkYXRhKTsKLX0KLQotLyoqCiAgKiBwY2hfZ2JlX2dldF9zdHJpbmdzIC0gUmV0dXJuIGEgc2V0IG9mIHN0cmluZ3MgdGhhdCBkZXNjcmliZSB0aGUgcmVxdWVzdGVkCiAgKgkJCSBvYmplY3RzCiAgKiBAbmV0ZGV2OiAgICBOZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCkBAIC01NTQsOSArNTA2LDYgQEAKIAkuc2V0X3JpbmdwYXJhbSA9IHBjaF9nYmVfc2V0X3JpbmdwYXJhbSwKIAkuZ2V0X3BhdXNlcGFyYW0gPSBwY2hfZ2JlX2dldF9wYXVzZXBhcmFtLAogCS5zZXRfcGF1c2VwYXJhbSA9IHBjaF9nYmVfc2V0X3BhdXNlcGFyYW0sCi0JLmdldF9yeF9jc3VtID0gcGNoX2diZV9nZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0gPSBwY2hfZ2JlX3NldF9yeF9jc3VtLAotCS5zZXRfdHhfY3N1bSA9IHBjaF9nYmVfc2V0X3R4X2NzdW0sCiAJLmdldF9zdHJpbmdzID0gcGNoX2diZV9nZXRfc3RyaW5ncywKIAkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBwY2hfZ2JlX2dldF9ldGh0b29sX3N0YXRzLAogCS5nZXRfc3NldF9jb3VudCA9IHBjaF9nYmVfZ2V0X3NzZXRfY291bnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlX21haW4uYwppbmRleCA1NmQwNDlhLi5lYWMzYzVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZV9tYWluLmMKQEAgLTIwLDYgKzIwLDcgQEAKIAogI2luY2x1ZGUgInBjaF9nYmUuaCIKICNpbmNsdWRlICJwY2hfZ2JlX2FwaS5oIgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAKICNkZWZpbmUgRFJWX1ZFUlNJT04gICAgICIxLjAwIgogY29uc3QgY2hhciBwY2hfZHJpdmVyX3ZlcnNpb25bXSA9IERSVl9WRVJTSU9OOwpAQCAtNjU5LDYgKzY2MCw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHBjaF9nYmVfc2V0dXBfcmN0bChzdHJ1Y3QgcGNoX2diZV9hZGFwdGVyICphZGFwdGVyKQogeworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJc3RydWN0IHBjaF9nYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXUzMiByeF9tb2RlLCB0Y3BpcDsKIApAQCAtNjY5LDcgKzY3MSw3IEBACiAKIAl0Y3BpcCA9IGlvcmVhZDMyKCZody0+cmVnLT5UQ1BJUF9BQ0MpOwogCi0JaWYgKGFkYXB0ZXItPnJ4X2NzdW0pIHsKKwlpZiAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSB7CiAJCXRjcGlwICY9IH5QQ0hfR0JFX1JYX1RDUElQQUNDX09GRjsKIAkJdGNwaXAgfD0gUENIX0dCRV9SWF9UQ1BJUEFDQ19FTjsKIAl9IGVsc2UgewpAQCAtODkwLDEyICs4OTIsMTIgQEAKIAlzdHJ1Y3QgcGNoX2diZV9hZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBwY2hfZ2JlX2FkYXB0ZXIgKilkYXRhOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJc3RydWN0IHBjaF9nYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCXN0cnVjdCBldGh0b29sX2NtZCBjbWQ7CiAKIAlwcl9kZWJ1ZygicmlnaHQgbm93ID0gJWxkXG4iLCBqaWZmaWVzKTsKIAogCXBjaF9nYmVfdXBkYXRlX3N0YXRzKGFkYXB0ZXIpOwogCWlmICgobWlpX2xpbmtfb2soJmFkYXB0ZXItPm1paSkpICYmICghbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSkgeworCQlzdHJ1Y3QgZXRodG9vbF9jbWQgY21kID0geyAuY21kID0gRVRIVE9PTF9HU0VUIH07CiAJCW5ldGRldi0+dHhfcXVldWVfbGVuID0gYWRhcHRlci0+dHhfcXVldWVfbGVuOwogCQkvKiBtaWkgbGlicmFyeSBoYW5kbGVzIGxpbmsgbWFpbnRlbmFuY2UgdGFza3MgKi8KIAkJaWYgKG1paV9ldGh0b29sX2dzZXQoJmFkYXB0ZXItPm1paSwgJmNtZCkpIHsKQEAgLTkwNSw3ICs5MDcsNyBAQAogCQkJCQkJUENIX0dCRV9XQVRDSERPR19QRVJJT0QpKTsKIAkJCXJldHVybjsKIAkJfQotCQlody0+bWFjLmxpbmtfc3BlZWQgPSBjbWQuc3BlZWQ7CisJCWh3LT5tYWMubGlua19zcGVlZCA9IGV0aHRvb2xfY21kX3NwZWVkKCZjbWQpOwogCQlody0+bWFjLmxpbmtfZHVwbGV4ID0gY21kLmR1cGxleDsKIAkJLyogU2V0IHRoZSBSR01JSSBjb250cm9sLiAqLwogCQlwY2hfZ2JlX3NldF9yZ21paV9jdHJsKGFkYXB0ZXIsIGh3LT5tYWMubGlua19zcGVlZCwKQEAgLTkxNSw3ICs5MTcsNyBAQAogCQkJCSBody0+bWFjLmxpbmtfZHVwbGV4KTsKIAkJbmV0ZGV2X2RiZyhuZXRkZXYsCiAJCQkgICAiTGluayBpcyBVcCAlZCBNYnBzICVzLUR1cGxleFxuIiwKLQkJCSAgIGNtZC5zcGVlZCwKKwkJCSAgIGh3LT5tYWMubGlua19zcGVlZCwKIAkJCSAgIGNtZC5kdXBsZXggPT0gRFVQTEVYX0ZVTEwgPyAiRnVsbCIgOiAiSGFsZiIpOwogCQluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7CiAJCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKQEAgLTk1Myw3ICs5NTUsNyBAQAogCWZyYW1lX2N0cmwgPSAwOwogCWlmICh1bmxpa2VseShza2ItPmxlbiA8IFBDSF9HQkVfU0hPUlRfUEtUKSkKIAkJZnJhbWVfY3RybCB8PSBQQ0hfR0JFX1RYRF9DVFJMX0FQQUQ7Ci0JaWYgKHVubGlrZWx5KCFhZGFwdGVyLT50eF9jc3VtKSkKKwlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fTk9ORSkKIAkJZnJhbWVfY3RybCB8PSBQQ0hfR0JFX1RYRF9DVFJMX1RDUElQX0FDQ19PRkY7CiAKIAkvKiBQZXJmb3JtcyBjaGVja3N1bSBwcm9jZXNzaW5nICovCkBAIC05NjEsNyArOTYzLDcgQEAKIAkgKiBJdCBpcyBiZWNhdXNlIHRoZSBoYXJkd2FyZSBhY2NlbGVyYXRvciBkb2VzIG5vdCBzdXBwb3J0IGEgY2hlY2tzdW0sCiAJICogd2hlbiB0aGUgcmVjZWl2ZWQgZGF0YSBzaXplIGlzIGxlc3MgdGhhbiA2NCBieXRlcy4KIAkgKi8KLQlpZiAoKHNrYi0+bGVuIDwgUENIX0dCRV9TSE9SVF9QS1QpICYmIChhZGFwdGVyLT50eF9jc3VtKSkgeworCWlmIChza2ItPmxlbiA8IFBDSF9HQkVfU0hPUlRfUEtUICYmIHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX05PTkUpIHsKIAkJZnJhbWVfY3RybCB8PSBQQ0hfR0JFX1RYRF9DVFJMX0FQQUQgfAogCQkJICAgICAgUENIX0dCRV9UWERfQ1RSTF9UQ1BJUF9BQ0NfT0ZGOwogCQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHsKQEAgLTE0MjksNyArMTQzMSw3IEBACiAJCQlsZW5ndGggPSAocnhfZGVzYy0+cnhfd29yZHNfZW9iKSAtIDM7CiAKIAkJCS8qIERlY2lkZSB0aGUgZGF0YSBjb252ZXJzaW9uIG1ldGhvZCAqLwotCQkJaWYgKCFhZGFwdGVyLT5yeF9jc3VtKSB7CisJCQlpZiAoIShuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pKSB7CiAJCQkJLyogW0hlYWRlcjoxNF1bcGF5bG9hZF0gKi8KIAkJCQlpZiAoTkVUX0lQX0FMSUdOKSB7CiAJCQkJCS8qIEJlY2F1c2UgYWxpZ25tZW50IGRpZmZlcnMsCkBAIC0yMDMyLDYgKzIwMzQsMjkgQEAKIH0KIAogLyoqCisgKiBwY2hfZ2JlX3NldF9mZWF0dXJlcyAtIFJlc2V0IGRldmljZSBhZnRlciBmZWF0dXJlcyBjaGFuZ2VkCisgKiBAbmV0ZGV2OiAgIE5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBmZWF0dXJlczogIE5ldyBmZWF0dXJlcworICogUmV0dXJucworICoJMDoJCUhXIHN0YXRlIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5CisgKi8KK3N0YXRpYyBpbnQgcGNoX2diZV9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIGZlYXR1cmVzKQoreworCXN0cnVjdCBwY2hfZ2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXUzMiBjaGFuZ2VkID0gZmVhdHVyZXMgXiBuZXRkZXYtPmZlYXR1cmVzOworCisJaWYgKCEoY2hhbmdlZCAmIE5FVElGX0ZfUlhDU1VNKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQlwY2hfZ2JlX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7CisJZWxzZQorCQlwY2hfZ2JlX3Jlc2V0KGFkYXB0ZXIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgogICogcGNoX2diZV9pb2N0bCAtIENvbnRyb2xzIHJlZ2lzdGVyIHRocm91Z2ggYSBNSUkgaW50ZXJmYWNlCiAgKiBAbmV0ZGV2OiAgIE5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKICAqIEBpZnI6ICAgICAgUG9pbnRlciB0byBpZnIgc3RydWN0dXJlCkBAIC0yMTMxLDYgKzIxNTYsNyBAQAogCS5uZG9fc2V0X21hY19hZGRyZXNzID0gcGNoX2diZV9zZXRfbWFjLAogCS5uZG9fdHhfdGltZW91dCA9IHBjaF9nYmVfdHhfdGltZW91dCwKIAkubmRvX2NoYW5nZV9tdHUgPSBwY2hfZ2JlX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfZmVhdHVyZXMgPSBwY2hfZ2JlX3NldF9mZWF0dXJlcywKIAkubmRvX2RvX2lvY3RsID0gcGNoX2diZV9pb2N0bCwKIAkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9ICZwY2hfZ2JlX3NldF9tdWx0aSwKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgpAQCAtMjMzNiw3ICsyMzYyLDkgQEAKIAluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gUENIX0dCRV9XQVRDSERPR19QRVJJT0Q7CiAJbmV0aWZfbmFwaV9hZGQobmV0ZGV2LCAmYWRhcHRlci0+bmFwaSwKIAkJICAgICAgIHBjaF9nYmVfbmFwaV9wb2xsLCBQQ0hfR0JFX1JYX1dFSUdIVCk7Ci0JbmV0ZGV2LT5mZWF0dXJlcyA9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9HUk87CisJbmV0ZGV2LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfUlhDU1VNIHwKKwkJTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU07CisJbmV0ZGV2LT5mZWF0dXJlcyA9IG5ldGRldi0+aHdfZmVhdHVyZXM7CiAJcGNoX2diZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTsKIAogCXBjaF9nYmVfbWFjX2xvYWRfbWFjX2FkZHIoJmFkYXB0ZXItPmh3KTsKQEAgLTIzNzUsMTEgKzI0MDMsNiBAQAogCiAJcGNoX2diZV9jaGVja19vcHRpb25zKGFkYXB0ZXIpOwogCi0JaWYgKGFkYXB0ZXItPnR4X2NzdW0pCi0JCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU07Ci0JZWxzZQotCQluZXRkZXYtPmZlYXR1cmVzICY9IH4oTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU0pOwotCiAJLyogaW5pdGlhbGl6ZSB0aGUgd29sIHNldHRpbmdzIGJhc2VkIG9uIHRoZSBlZXByb20gc2V0dGluZ3MgKi8KIAlhZGFwdGVyLT53YWtlX3VwX2V2dCA9IFBDSF9HQkVfV0xfSU5JVF9TRVRUSU5HOwogCWRldl9pbmZvKCZwZGV2LT5kZXYsICJNQUMgYWRkcmVzcyA6ICVwTVxuIiwgbmV0ZGV2LT5kZXZfYWRkcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmVfcGFyYW0uYyBiL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZV9wYXJhbS5jCmluZGV4IGVmMDk5NmEuLjViNWQ5MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZV9wYXJhbS5jCisrKyBiL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZV9wYXJhbS5jCkBAIC00MjYsNiArNDI2LDggQEAKIHZvaWQgcGNoX2diZV9jaGVja19vcHRpb25zKHN0cnVjdCBwY2hfZ2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IHBjaF9nYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJaW50IHZhbDsKIAogCXsgLyogVHJhbnNtaXQgRGVzY3JpcHRvciBDb3VudCAqLwogCQlzdGF0aWMgY29uc3Qgc3RydWN0IHBjaF9nYmVfb3B0aW9uIG9wdCA9IHsKQEAgLTQ2Niw5ICs0NjgsMTAgQEAKIAkJCS5lcnIgID0gImRlZmF1bHRpbmcgdG8gRW5hYmxlZCIsCiAJCQkuZGVmICA9IFBDSF9HQkVfREVGQVVMVF9SWF9DU1VNCiAJCX07Ci0JCWFkYXB0ZXItPnJ4X2NzdW0gPSBYc3VtUlg7Ci0JCXBjaF9nYmVfdmFsaWRhdGVfb3B0aW9uKChpbnQgKikoJmFkYXB0ZXItPnJ4X2NzdW0pLAotCQkJCQkmb3B0LCBhZGFwdGVyKTsKKwkJdmFsID0gWHN1bVJYOworCQlwY2hfZ2JlX3ZhbGlkYXRlX29wdGlvbigmdmFsLCAmb3B0LCBhZGFwdGVyKTsKKwkJaWYgKCF2YWwpCisJCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1JYQ1NVTTsKIAl9CiAJeyAvKiBDaGVja3N1bSBPZmZsb2FkIEVuYWJsZS9EaXNhYmxlICovCiAJCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNoX2diZV9vcHRpb24gb3B0ID0gewpAQCAtNDc3LDkgKzQ4MCwxMCBAQAogCQkJLmVyciAgPSAiZGVmYXVsdGluZyB0byBFbmFibGVkIiwKIAkJCS5kZWYgID0gUENIX0dCRV9ERUZBVUxUX1RYX0NTVU0KIAkJfTsKLQkJYWRhcHRlci0+dHhfY3N1bSA9IFhzdW1UWDsKLQkJcGNoX2diZV92YWxpZGF0ZV9vcHRpb24oKGludCAqKSgmYWRhcHRlci0+dHhfY3N1bSksCi0JCQkJCQkmb3B0LCBhZGFwdGVyKTsKKwkJdmFsID0gWHN1bVRYOworCQlwY2hfZ2JlX3ZhbGlkYXRlX29wdGlvbigmdmFsLCAmb3B0LCBhZGFwdGVyKTsKKwkJaWYgKCF2YWwpCisJCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0FMTF9DU1VNOwogCX0KIAl7IC8qIEZsb3cgQ29udHJvbCAqLwogCQlzdGF0aWMgY29uc3Qgc3RydWN0IHBjaF9nYmVfb3B0aW9uIG9wdCA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZV9waHkuYyBiL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZV9waHkuYwppbmRleCA5MjNhNjg3Li4yOGJiOTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmVfcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlX3BoeS5jCkBAIC0yNDcsNyArMjQ3LDcgQEAKIHZvaWQgcGNoX2diZV9waHlfaW5pdF9zZXR0aW5nKHN0cnVjdCBwY2hfZ2JlX2h3ICpodykKIHsKIAlzdHJ1Y3QgcGNoX2diZV9hZGFwdGVyICphZGFwdGVyOwotCXN0cnVjdCBldGh0b29sX2NtZCAgICAgY21kOworCXN0cnVjdCBldGh0b29sX2NtZCAgICAgY21kID0geyAuY21kID0gRVRIVE9PTF9HU0VUIH07CiAJaW50IHJldDsKIAl1MTYgbWlpX3JlZzsKIApAQCAtMjU2LDcgKzI1Niw3IEBACiAJaWYgKHJldCkKIAkJcHJfZXJyKCJFcnJvcjogbWlpX2V0aHRvb2xfZ3NldFxuIik7CiAKLQljbWQuc3BlZWQgPSBody0+bWFjLmxpbmtfc3BlZWQ7CisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KCZjbWQsIGh3LT5tYWMubGlua19zcGVlZCk7CiAJY21kLmR1cGxleCA9IGh3LT5tYWMubGlua19kdXBsZXg7CiAJY21kLmFkdmVydGlzaW5nID0gaHctPnBoeS5hdXRvbmVnX2FkdmVydGlzZWQ7CiAJY21kLmF1dG9uZWcgPSBody0+bWFjLmF1dG9uZWc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCmluZGV4IDEwODU5MTcuLjI4OGU0ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCkBAIC0xODYwLDcgKzE4NjAsNyBAQAogICAgIHRtcCA9IGludyhpb2FkZHIgKyBDT05GSUcpOwogICAgIGVjbWQtPnBvcnQgPSAodG1wICYgQ0ZHX0FVSV9TRUxFQ1QpID8gUE9SVF9BVUkgOiBQT1JUX1RQOwogICAgIGVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKLSAgICBlY21kLT5zcGVlZCA9IFNQRUVEXzEwOworICAgIGV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBTUEVFRF8xMCk7CiAgICAgZWNtZC0+cGh5X2FkZHJlc3MgPSBpb2FkZHIgKyBNR01UOwogCiAgICAgU01DX1NFTEVDVF9CQU5LKDApOwpAQCAtMTg3NSw4ICsxODc1LDggQEAKICAgICB1MTYgdG1wOwogICAgIHVuc2lnbmVkIGludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAotICAgIGlmIChlY21kLT5zcGVlZCAhPSBTUEVFRF8xMCkKLSAgICAJcmV0dXJuIC1FSU5WQUw7CisgICAgaWYgKGV0aHRvb2xfY21kX3NwZWVkKGVjbWQpICE9IFNQRUVEXzEwKQorCXJldHVybiAtRUlOVkFMOwogICAgIGlmIChlY21kLT5kdXBsZXggIT0gRFVQTEVYX0hBTEYgJiYgZWNtZC0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKQogICAgIAlyZXR1cm4gLUVJTlZBTDsKICAgICBpZiAoZWNtZC0+cG9ydCAhPSBQT1JUX1RQICYmIGVjbWQtPnBvcnQgIT0gUE9SVF9BVUkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY25ldDMyLmMgYi9kcml2ZXJzL25ldC9wY25ldDMyLmMKaW5kZXggNzY4MDM3Ni4uYjQ4YWJhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNuZXQzMi5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbmV0MzIuYwpAQCAtMjk1LDEyICsyOTUsMTQgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZQkqbmV4dDsKIAlzdHJ1Y3QgbWlpX2lmX2luZm8JbWlpX2lmOwogCXN0cnVjdCB0aW1lcl9saXN0CXdhdGNoZG9nX3RpbWVyOwotCXN0cnVjdCB0aW1lcl9saXN0CWJsaW5rX3RpbWVyOwogCXUzMgkJCW1zZ19lbmFibGU7CS8qIGRlYnVnIG1lc3NhZ2UgbGV2ZWwgKi8KIAogCS8qIGVhY2ggYml0IGluZGljYXRlcyBhbiBhdmFpbGFibGUgUEhZICovCiAJdTMyCQkJcGh5bWFzazsKIAl1bnNpZ25lZCBzaG9ydAkJY2hpcF92ZXJzaW9uOwkvKiB3aGljaCB2YXJpYW50IHRoaXMgaXMgKi8KKworCS8qIHNhdmVkIHJlZ2lzdGVycyBkdXJpbmcgZXRodG9vbCBibGluayAqLworCXUxNiAJCQlzYXZlX3JlZ3NbNF07CiB9OwogCiBzdGF0aWMgaW50IHBjbmV0MzJfcHJvYmVfcGNpKHN0cnVjdCBwY2lfZGV2ICosIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICopOwpAQCAtMzI0LDggKzMyNiw2IEBACiBzdGF0aWMgdm9pZCBwY25ldDMyX2V0aHRvb2xfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSBzdHJ1Y3QgZXRodG9vbF90ZXN0ICpldGhfdGVzdCwgdTY0ICogZGF0YSk7CiBzdGF0aWMgaW50IHBjbmV0MzJfbG9vcGJhY2tfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1aW50NjRfdCAqIGRhdGExKTsKLXN0YXRpYyBpbnQgcGNuZXQzMl9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKTsKLXN0YXRpYyB2b2lkIHBjbmV0MzJfbGVkX2JsaW5rX2NhbGxiYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBwY25ldDMyX2dldF9yZWdzX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHBjbmV0MzJfZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfcmVncyAqcmVncywKIAkJCSAgICAgdm9pZCAqcHRyKTsKQEAgLTEwMjIsNyArMTAyMiw4IEBACiAJcmV0dXJuIHJjOwogfQkJCQkvKiBlbmQgcGNuZXQzMl9sb29wYmFja190ZXN0ICAqLwogCi1zdGF0aWMgdm9pZCBwY25ldDMyX2xlZF9ibGlua19jYWxsYmFjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCBwY25ldDMyX3NldF9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICAgZW51bSBldGh0b29sX3BoeXNfaWRfc3RhdGUgc3RhdGUpCiB7CiAJc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBwY25ldDMyX2FjY2VzcyAqYSA9ICZscC0+YTsKQEAgLTEwMzAsNTAgKzEwMzEsMzEgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0JZm9yIChpID0gNDsgaSA8IDg7IGkrKykKLQkJYS0+d3JpdGVfYmNyKGlvYWRkciwgaSwgYS0+cmVhZF9iY3IoaW9hZGRyLCBpKSBeIDB4NDAwMCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBFVEhUT09MX0lEX0FDVElWRToKKwkJLyogU2F2ZSB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgYmNycyAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwkJZm9yIChpID0gNDsgaSA8IDg7IGkrKykKKwkJCWxwLT5zYXZlX3JlZ3NbaSAtIDRdID0gYS0+cmVhZF9iY3IoaW9hZGRyLCBpKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDI7CS8qIGN5Y2xlIG9uL29mZiB0d2ljZSBwZXIgc2Vjb25kICovCiAKLQltb2RfdGltZXIoJmxwLT5ibGlua190aW1lciwgUENORVQzMl9CTElOS19USU1FT1VUKTsKLX0KKwljYXNlIEVUSFRPT0xfSURfT046CisJY2FzZSBFVEhUT09MX0lEX09GRjoKKwkJLyogQmxpbmsgdGhlIGxlZCAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwkJZm9yIChpID0gNDsgaSA8IDg7IGkrKykKKwkJCWEtPndyaXRlX2Jjcihpb2FkZHIsIGksIGEtPnJlYWRfYmNyKGlvYWRkciwgaSkgXiAweDQwMDApOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOworCQlicmVhazsKIAotc3RhdGljIGludCBwY25ldDMyX3BoeXNfaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBwY25ldDMyX2FjY2VzcyAqYSA9ICZscC0+YTsKLQl1bG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBpLCByZWdzWzRdOwotCi0JaWYgKCFscC0+YmxpbmtfdGltZXIuZnVuY3Rpb24pIHsKLQkJaW5pdF90aW1lcigmbHAtPmJsaW5rX3RpbWVyKTsKLQkJbHAtPmJsaW5rX3RpbWVyLmZ1bmN0aW9uID0gKHZvaWQgKilwY25ldDMyX2xlZF9ibGlua19jYWxsYmFjazsKLQkJbHAtPmJsaW5rX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylkZXY7CisJY2FzZSBFVEhUT09MX0lEX0lOQUNUSVZFOgorCQkvKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZSBvZiB0aGUgYmNycyAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwkJZm9yIChpID0gNDsgaSA8IDg7IGkrKykKKwkJCWEtPndyaXRlX2Jjcihpb2FkZHIsIGksIGxwLT5zYXZlX3JlZ3NbaSAtIDRdKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAl9Ci0KLQkvKiBTYXZlIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBiY3JzICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0JZm9yIChpID0gNDsgaSA8IDg7IGkrKykKLQkJcmVnc1tpIC0gNF0gPSBhLT5yZWFkX2Jjcihpb2FkZHIsIGkpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0KLQltb2RfdGltZXIoJmxwLT5ibGlua190aW1lciwgamlmZmllcyk7Ci0Jc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQotCS8qIEFWOiB0aGUgbGltaXQgaGVyZSBtYWtlcyBubyBzZW5zZSB3aGF0c29ldmVyICovCi0JaWYgKCghZGF0YSkgfHwgKGRhdGEgPiAodTMyKSAoTUFYX1NDSEVEVUxFX1RJTUVPVVQgLyBIWikpKQotCQlkYXRhID0gKHUzMikgKE1BWF9TQ0hFRFVMRV9USU1FT1VUIC8gSFopOwotCi0JbXNsZWVwX2ludGVycnVwdGlibGUoZGF0YSAqIDEwMDApOwotCWRlbF90aW1lcl9zeW5jKCZscC0+YmxpbmtfdGltZXIpOwotCi0JLyogUmVzdG9yZSB0aGUgb3JpZ2luYWwgdmFsdWUgb2YgdGhlIGJjcnMgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKLQlmb3IgKGkgPSA0OyBpIDwgODsgaSsrKQotCQlhLT53cml0ZV9iY3IoaW9hZGRyLCBpLCByZWdzW2kgLSA0XSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKLQogCXJldHVybiAwOwogfQogCkBAIC0xNDUwLDcgKzE0MzIsNyBAQAogCS5zZXRfcmluZ3BhcmFtCQk9IHBjbmV0MzJfc2V0X3JpbmdwYXJhbSwKIAkuZ2V0X3N0cmluZ3MJCT0gcGNuZXQzMl9nZXRfc3RyaW5ncywKIAkuc2VsZl90ZXN0CQk9IHBjbmV0MzJfZXRodG9vbF90ZXN0LAotCS5waHlzX2lkCQk9IHBjbmV0MzJfcGh5c19pZCwKKwkuc2V0X3BoeXNfaWQJCT0gcGNuZXQzMl9zZXRfcGh5c19pZCwKIAkuZ2V0X3JlZ3NfbGVuCQk9IHBjbmV0MzJfZ2V0X3JlZ3NfbGVuLAogCS5nZXRfcmVncwkJPSBwY25ldDMyX2dldF9yZWdzLAogCS5nZXRfc3NldF9jb3VudAkJPSBwY25ldDMyX2dldF9zc2V0X2NvdW50LApAQCAtMjExNyw3ICsyMDk5LDcgQEAKIAkJaW50IGZpcnN0X3BoeSA9IC0xOwogCQl1MTYgYm1jcjsKIAkJdTMyIGJjcjk7Ci0JCXN0cnVjdCBldGh0b29sX2NtZCBlY21kOworCQlzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZCA9IHsgLmNtZCA9IEVUSFRPT0xfR1NFVCB9OwogCiAJCS8qCiAJCSAqIFRoZXJlIGlzIHJlYWxseSBubyBnb29kIG90aGVyIHdheSB0byBoYW5kbGUgbXVsdGlwbGUgUEhZcwpAQCAtMjEzMyw5ICsyMTE1LDkgQEAKIAkJCWVjbWQucG9ydCA9IFBPUlRfTUlJOwogCQkJZWNtZC50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7CiAJCQllY21kLmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7Ci0JCQllY21kLnNwZWVkID0KLQkJCSAgICBscC0+Ci0JCQkgICAgb3B0aW9ucyAmIFBDTkVUMzJfUE9SVF8xMDAgPyBTUEVFRF8xMDAgOiBTUEVFRF8xMDsKKwkJCWV0aHRvb2xfY21kX3NwZWVkX3NldCgmZWNtZCwKKwkJCQkJICAgICAgKGxwLT5vcHRpb25zICYgUENORVQzMl9QT1JUXzEwMCkgPworCQkJCQkgICAgICBTUEVFRF8xMDAgOiBTUEVFRF8xMCk7CiAJCQliY3I5ID0gbHAtPmEucmVhZF9iY3IoaW9hZGRyLCA5KTsKIAogCQkJaWYgKGxwLT5vcHRpb25zICYgUENORVQzMl9QT1JUX0ZEKSB7CkBAIC0yNzgxLDExICsyNzYzLDExIEBACiAJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKIAkJaWYgKGxwLT5taWkpIHsKIAkJCWlmIChuZXRpZl9tc2dfbGluayhscCkpIHsKLQkJCQlzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZDsKKwkJCQlzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZCA9IHsKKwkJCQkJLmNtZCA9IEVUSFRPT0xfR1NFVCB9OwogCQkJCW1paV9ldGh0b29sX2dzZXQoJmxwLT5taWlfaWYsICZlY21kKTsKLQkJCQluZXRkZXZfaW5mbyhkZXYsICJsaW5rIHVwLCAlc01icHMsICVzLWR1cGxleFxuIiwKLQkJCQkJICAgIChlY21kLnNwZWVkID09IFNQRUVEXzEwMCkKLQkJCQkJICAgID8gIjEwMCIgOiAiMTAiLAorCQkJCW5ldGRldl9pbmZvKGRldiwgImxpbmsgdXAsICV1TWJwcywgJXMtZHVwbGV4XG4iLAorCQkJCQkgICAgZXRodG9vbF9jbWRfc3BlZWQoJmVjbWQpLAogCQkJCQkgICAgKGVjbWQuZHVwbGV4ID09IERVUExFWF9GVUxMKQogCQkJCQkgICAgPyAiZnVsbCIgOiAiaGFsZiIpOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS5jCmluZGV4IGY3NjcwMzMuLmE0NzU5NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHkuYworKysgYi9kcml2ZXJzL25ldC9waHkvcGh5LmMKQEAgLTIzOCw2ICsyMzgsOCBAQAogICovCiBpbnQgcGh5X2V0aHRvb2xfc3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKKwl1MzIgc3BlZWQgPSBldGh0b29sX2NtZF9zcGVlZChjbWQpOworCiAJaWYgKGNtZC0+cGh5X2FkZHJlc3MgIT0gcGh5ZGV2LT5hZGRyKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMjUzLDE2ICsyNTUsMTYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSAmJgotCSAgICAoKGNtZC0+c3BlZWQgIT0gU1BFRURfMTAwMCAmJgotCSAgICAgIGNtZC0+c3BlZWQgIT0gU1BFRURfMTAwICYmCi0JICAgICAgY21kLT5zcGVlZCAhPSBTUEVFRF8xMCkgfHwKKwkgICAgKChzcGVlZCAhPSBTUEVFRF8xMDAwICYmCisJICAgICAgc3BlZWQgIT0gU1BFRURfMTAwICYmCisJICAgICAgc3BlZWQgIT0gU1BFRURfMTApIHx8CiAJICAgICAoY21kLT5kdXBsZXggIT0gRFVQTEVYX0hBTEYgJiYKIAkgICAgICBjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXBoeWRldi0+YXV0b25lZyA9IGNtZC0+YXV0b25lZzsKIAotCXBoeWRldi0+c3BlZWQgPSBjbWQtPnNwZWVkOworCXBoeWRldi0+c3BlZWQgPSBzcGVlZDsKIAogCXBoeWRldi0+YWR2ZXJ0aXNpbmcgPSBjbWQtPmFkdmVydGlzaW5nOwogCkBAIC0yODYsNyArMjg4LDcgQEAKIAogCWNtZC0+YWR2ZXJ0aXNpbmcgPSBwaHlkZXYtPmFkdmVydGlzaW5nOwogCi0JY21kLT5zcGVlZCA9IHBoeWRldi0+c3BlZWQ7CisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgcGh5ZGV2LT5zcGVlZCk7CiAJY21kLT5kdXBsZXggPSBwaHlkZXYtPmR1cGxleDsKIAljbWQtPnBvcnQgPSBQT1JUX01JSTsKIAljbWQtPnBoeV9hZGRyZXNzID0gcGh5ZGV2LT5hZGRyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwX2FzeW5jLmMgYi9kcml2ZXJzL25ldC9wcHBfYXN5bmMuYwppbmRleCBhMWI4MmM5Li41Mzg3MmQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBfYXN5bmMuYworKysgYi9kcml2ZXJzL25ldC9wcHBfYXN5bmMuYwpAQCAtMzQwLDcgKzM0MCw3IEBACiB9CiAKIC8qIE1heSBzbGVlcCwgZG9uJ3QgY2FsbCBmcm9tIGludGVycnVwdCBsZXZlbCBvciB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgKi8KLXN0YXRpYyB2b2lkCitzdGF0aWMgdW5zaWduZWQgaW50CiBwcHBfYXN5bmN0dHlfcmVjZWl2ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCiAJCSAgY2hhciAqY2ZsYWdzLCBpbnQgY291bnQpCiB7CkBAIC0zNDgsNyArMzQ4LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCFhcCkKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT0RFVjsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYXAtPnJlY3ZfbG9jaywgZmxhZ3MpOwogCXBwcF9hc3luY19pbnB1dChhcCwgYnVmLCBjZmxhZ3MsIGNvdW50KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcC0+cmVjdl9sb2NrLCBmbGFncyk7CkBAIC0zNTYsNiArMzU2LDggQEAKIAkJdGFza2xldF9zY2hlZHVsZSgmYXAtPnRzayk7CiAJYXBfcHV0KGFwKTsKIAl0dHlfdW50aHJvdHRsZSh0dHkpOworCisJcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwX3N5bmN0dHkuYyBiL2RyaXZlcnMvbmV0L3BwcF9zeW5jdHR5LmMKaW5kZXggMjU3M2Y1Mi4uMDgxNTc5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwX3N5bmN0dHkuYworKysgYi9kcml2ZXJzL25ldC9wcHBfc3luY3R0eS5jCkBAIC0zODEsNyArMzgxLDcgQEAKIH0KIAogLyogTWF5IHNsZWVwLCBkb24ndCBjYWxsIGZyb20gaW50ZXJydXB0IGxldmVsIG9yIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCAqLwotc3RhdGljIHZvaWQKK3N0YXRpYyB1bnNpZ25lZCBpbnQKIHBwcF9zeW5jX3JlY2VpdmUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAogCQkgIGNoYXIgKmNmbGFncywgaW50IGNvdW50KQogewpAQCAtMzg5LDcgKzM4OSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghYXApCi0JCXJldHVybjsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFwLT5yZWN2X2xvY2ssIGZsYWdzKTsKIAlwcHBfc3luY19pbnB1dChhcCwgYnVmLCBjZmxhZ3MsIGNvdW50KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcC0+cmVjdl9sb2NrLCBmbGFncyk7CkBAIC0zOTcsNiArMzk3LDggQEAKIAkJdGFza2xldF9zY2hlZHVsZSgmYXAtPnRzayk7CiAJc3BfcHV0KGFwKTsKIAl0dHlfdW50aHJvdHRsZSh0dHkpOworCisJcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHB0cC5jIGIvZHJpdmVycy9uZXQvcHB0cC5jCmluZGV4IDUxZGZjZjguLjEyODZmZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwdHAuYworKysgYi9kcml2ZXJzL25ldC9wcHRwLmMKQEAgLTE3NSw2ICsxNzUsNyBAQAogCXN0cnVjdCBwcHRwX29wdCAqb3B0ID0gJnBvLT5wcm90by5wcHRwOwogCXN0cnVjdCBwcHRwX2dyZV9oZWFkZXIgKmhkcjsKIAl1bnNpZ25lZCBpbnQgaGVhZGVyX2xlbiA9IHNpemVvZigqaGRyKTsKKwlzdHJ1Y3QgZmxvd2k0IGZsNDsKIAlpbnQgaXNsY3A7CiAJaW50IGxlbjsKIAl1bnNpZ25lZCBjaGFyICpkYXRhOwpAQCAtMTg5LDcgKzE5MCw3IEBACiAJaWYgKHNrX3BwcG94KHBvKS0+c2tfc3RhdGUgJiBQUFBPWF9ERUFEKQogCQlnb3RvIHR4X2Vycm9yOwogCi0JcnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMoJmluaXRfbmV0LCBOVUxMLAorCXJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKCZpbml0X25ldCwgJmZsNCwgTlVMTCwKIAkJCQkgICBvcHQtPmRzdF9hZGRyLnNpbl9hZGRyLnNfYWRkciwKIAkJCQkgICBvcHQtPnNyY19hZGRyLnNpbl9hZGRyLnNfYWRkciwKIAkJCQkgICAwLCAwLCBJUFBST1RPX0dSRSwKQEAgLTI3MCw4ICsyNzEsOCBAQAogCQlpcGgtPmZyYWdfb2ZmCT0JMDsKIAlpcGgtPnByb3RvY29sID0gSVBQUk9UT19HUkU7CiAJaXBoLT50b3MgICAgICA9IDA7Ci0JaXBoLT5kYWRkciAgICA9IHJ0LT5ydF9kc3Q7Ci0JaXBoLT5zYWRkciAgICA9IHJ0LT5ydF9zcmM7CisJaXBoLT5kYWRkciAgICA9IGZsNC5kYWRkcjsKKwlpcGgtPnNhZGRyICAgID0gZmw0LnNhZGRyOwogCWlwaC0+dHRsICAgICAgPSBpcDRfZHN0X2hvcGxpbWl0KCZydC0+ZHN0KTsKIAlpcGgtPnRvdF9sZW4gID0gaHRvbnMoc2tiLT5sZW4pOwogCkBAIC00MzQsNiArNDM1LDcgQEAKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7CiAJc3RydWN0IHBwdHBfb3B0ICpvcHQgPSAmcG8tPnByb3RvLnBwdHA7CiAJc3RydWN0IHJ0YWJsZSAqcnQ7CisJc3RydWN0IGZsb3dpNCBmbDQ7CiAJaW50IGVycm9yID0gMDsKIAogCWlmIChzcC0+c2FfcHJvdG9jb2wgIT0gUFhfUFJPVE9fUFBUUCkKQEAgLTQ2Myw3ICs0NjUsNyBAQAogCXBvLT5jaGFuLnByaXZhdGUgPSBzazsKIAlwby0+Y2hhbi5vcHMgPSAmcHB0cF9jaGFuX29wczsKIAotCXJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKCZpbml0X25ldCwgc2ssCisJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMoJmluaXRfbmV0LCAmZmw0LCBzaywKIAkJCQkgICBvcHQtPmRzdF9hZGRyLnNpbl9hZGRyLnNfYWRkciwKIAkJCQkgICBvcHQtPnNyY19hZGRyLnNpbl9hZGRyLnNfYWRkciwKIAkJCQkgICAwLCAwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX25ldC5jIGIvZHJpdmVycy9uZXQvcHMzX2dlbGljX25ldC5jCmluZGV4IGZmZGY3MzQuLmIxZjI1MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BzM19nZWxpY19uZXQuYworKysgYi9kcml2ZXJzL25ldC9wczNfZ2VsaWNfbmV0LmMKQEAgLTk1MSw3ICs5NTEsNyBAQAogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5ldGRldik7CiAKIAkvKiBjaGVja3N1bSBvZmZsb2FkICovCi0JaWYgKGNhcmQtPnJ4X2NzdW0pIHsKKwlpZiAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSB7CiAJCWlmICgoZGF0YV9zdGF0dXMgJiBHRUxJQ19ERVNDUl9EQVRBX1NUQVRVU19DSEtfTUFTSykgJiYKIAkJICAgICghKGRhdGFfZXJyb3IgJiBHRUxJQ19ERVNDUl9EQVRBX0VSUk9SX0NIS19NQVNLKSkpCiAJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwpAQCAtMTI0MywxNyArMTI0MywxNyBAQAogCiAJc3dpdGNoIChjYXJkLT5ldGhlcl9wb3J0X3N0YXR1cyAmIEdFTElDX0xWMV9FVEhFUl9TUEVFRF9NQVNLKSB7CiAJY2FzZSBHRUxJQ19MVjFfRVRIRVJfU1BFRURfMTA6Ci0JCWNtZC0+c3BlZWQgPSBTUEVFRF8xMDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgU1BFRURfMTApOwogCQlicmVhazsKIAljYXNlIEdFTElDX0xWMV9FVEhFUl9TUEVFRF8xMDA6Ci0JCWNtZC0+c3BlZWQgPSBTUEVFRF8xMDA7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIFNQRUVEXzEwMCk7CiAJCWJyZWFrOwogCWNhc2UgR0VMSUNfTFYxX0VUSEVSX1NQRUVEXzEwMDA6Ci0JCWNtZC0+c3BlZWQgPSBTUEVFRF8xMDAwOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCBTUEVFRF8xMDAwKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJfaW5mbygiJXM6IHNwZWVkIHVua25vd25cbiIsIF9fZnVuY19fKTsKLQkJY21kLT5zcGVlZCA9IFNQRUVEXzEwOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCBTUEVFRF8xMCk7CiAJCWJyZWFrOwogCX0KIApAQCAtMTMxMiwyMSArMTMxMiw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXUzMiBnZWxpY19uZXRfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKLXsKLQlzdHJ1Y3QgZ2VsaWNfY2FyZCAqY2FyZCA9IG5ldGRldl9jYXJkKG5ldGRldik7Ci0KLQlyZXR1cm4gY2FyZC0+cnhfY3N1bTsKLX0KLQotaW50IGdlbGljX25ldF9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgZ2VsaWNfY2FyZCAqY2FyZCA9IG5ldGRldl9jYXJkKG5ldGRldik7Ci0KLQljYXJkLT5yeF9jc3VtID0gZGF0YTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgZ2VsaWNfbmV0X2dldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCSAgICAgIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKIHsKQEAgLTE0MTEsMTAgKzEzOTYsNiBAQAogCS5nZXRfc2V0dGluZ3MJPSBnZWxpY19ldGhlcl9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncwk9IGdlbGljX2V0aGVyX3NldF9zZXR0aW5ncywKIAkuZ2V0X2xpbmsJPSBldGh0b29sX29wX2dldF9saW5rLAotCS5nZXRfdHhfY3N1bQk9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCi0JLnNldF90eF9jc3VtCT0gZXRodG9vbF9vcF9zZXRfdHhfY3N1bSwKLQkuZ2V0X3J4X2NzdW0JPSBnZWxpY19uZXRfZ2V0X3J4X2NzdW0sCi0JLnNldF9yeF9jc3VtCT0gZ2VsaWNfbmV0X3NldF9yeF9jc3VtLAogCS5nZXRfd29sCT0gZ2VsaWNfbmV0X2dldF93b2wsCiAJLnNldF93b2wJPSBnZWxpY19uZXRfc2V0X3dvbCwKIH07CkBAIC0xNTEyLDcgKzE0OTMsMTEgQEAKIAlpbnQgc3RhdHVzOwogCXU2NCB2MSwgdjI7CiAKKwluZXRkZXYtPmh3X2ZlYXR1cmVzID0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9SWENTVU07CisKIAluZXRkZXYtPmZlYXR1cmVzID0gTkVUSUZfRl9JUF9DU1VNOworCWlmIChHRUxJQ19DQVJEX1JYX0NTVU1fREVGQVVMVCkKKwkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1JYQ1NVTTsKIAogCXN0YXR1cyA9IGx2MV9uZXRfY29udHJvbChidXNfaWQoY2FyZCksIGRldl9pZChjYXJkKSwKIAkJCQkgR0VMSUNfTFYxX0dFVF9NQUNfQUREUkVTUywKQEAgLTE3NTYsNyArMTc0MSw2IEBACiAJLyogc2V0dXAgY2FyZCBzdHJ1Y3R1cmUgKi8KIAljYXJkLT5pcnFfbWFzayA9IEdFTElDX0NBUkRfUlhJTlQgfCBHRUxJQ19DQVJEX1RYSU5UIHwKIAkJR0VMSUNfQ0FSRF9QT1JUX1NUQVRVU19DSEFOR0VEOwotCWNhcmQtPnJ4X2NzdW0gPSBHRUxJQ19DQVJEX1JYX0NTVU1fREVGQVVMVDsKIAogCiAJaWYgKGdlbGljX2NhcmRfaW5pdF9jaGFpbihjYXJkLCAmY2FyZC0+dHhfY2hhaW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wczNfZ2VsaWNfbmV0LmggYi9kcml2ZXJzL25ldC9wczNfZ2VsaWNfbmV0LmgKaW5kZXggZmFkYWRmOS4uZDlhNTViOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX25ldC5oCisrKyBiL2RyaXZlcnMvbmV0L3BzM19nZWxpY19uZXQuaApAQCAtMjkwLDcgKzI5MCw2IEBACiAJc3RydWN0IGdlbGljX2Rlc2NyX2NoYWluIHR4X2NoYWluOwogCXN0cnVjdCBnZWxpY19kZXNjcl9jaGFpbiByeF9jaGFpbjsKIAlpbnQgcnhfZG1hX3Jlc3RhcnRfcmVxdWlyZWQ7Ci0JaW50IHJ4X2NzdW07CiAJLyoKIAkgKiB0eF9sb2NrIGd1YXJkcyB0eCBkZXNjcmlwdG9yIGxpc3QgYW5kCiAJICogdHhfZG1hX3Byb2dyZXNzLgpAQCAtMzc3LDggKzM3Niw2IEBACiAvKiBzaGFyZWQgZXRodG9vbCBvcHMgKi8KIGV4dGVybiB2b2lkIGdlbGljX25ldF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJCSAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbyk7Ci1leHRlcm4gdTMyIGdlbGljX25ldF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKLWV4dGVybiBpbnQgZ2VsaWNfbmV0X3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKTsKIGV4dGVybiB2b2lkIGdlbGljX25ldF9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiAKICNlbmRpZiAvKiBfR0VMSUNfTkVUX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzM19nZWxpY193aXJlbGVzcy5jIGIvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmMKaW5kZXggYjVhZTI5ZC4uMmU2MjkzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmMKKysrIGIvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmMKQEAgLTI1ODEsMTAgKzI1ODEsNiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBnZWxpY193bF9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JPSBnZWxpY19uZXRfZ2V0X2RydmluZm8sCiAJLmdldF9saW5rCT0gZ2VsaWNfd2xfZ2V0X2xpbmssCi0JLmdldF90eF9jc3VtCT0gZXRodG9vbF9vcF9nZXRfdHhfY3N1bSwKLQkuc2V0X3R4X2NzdW0JPSBldGh0b29sX29wX3NldF90eF9jc3VtLAotCS5nZXRfcnhfY3N1bQk9IGdlbGljX25ldF9nZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0JPSBnZWxpY19uZXRfc2V0X3J4X2NzdW0sCiB9OwogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgZ2VsaWNfd2xfc2V0dXBfbmV0ZGV2X29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxhM3h4eC5jIGIvZHJpdmVycy9uZXQvcWxhM3h4eC5jCmluZGV4IDM0OGI0ZjEuLjc3MWJiNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsYTN4eHguYworKysgYi9kcml2ZXJzL25ldC9xbGEzeHh4LmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAKICNpbmNsdWRlICJxbGEzeHh4LmgiCiAKQEAgLTE3MjUsNyArMTcyNiw3IEBACiAJfQogCWVjbWQtPmFkdmVydGlzaW5nID0gcWxfc3VwcG9ydGVkX21vZGVzKHFkZXYpOwogCWVjbWQtPmF1dG9uZWcgPSBxbF9nZXRfYXV0b19jZmdfc3RhdHVzKHFkZXYpOwotCWVjbWQtPnNwZWVkID0gcWxfZ2V0X3NwZWVkKHFkZXYpOworCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBxbF9nZXRfc3BlZWQocWRldikpOwogCWVjbWQtPmR1cGxleCA9IHFsX2dldF9mdWxsX2R1cChxZGV2KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTM0NjgsNyArMzQ2OSw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBxZGV2LT5uZGV2OwogCWludCBlcnI7Ci0JdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3MgPSBJUlFGX1NBTVBMRV9SQU5ET00gfCBJUlFGX1NIQVJFRDsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFncyA9IElSUUZfU0hBUkVEOwogCXVuc2lnbmVkIGxvbmcgaHdfZmxhZ3M7CiAKIAlpZiAocWxfYWxsb2NfbWVtX3Jlc291cmNlcyhxZGV2KSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pYy5oIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pYy5oCmluZGV4IGIwZGVhZDAuLjQ4MGVmNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWMuaAorKysgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljLmgKQEAgLTI5LDEzICsyOSwxNSBAQAogCiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgogCiAjaW5jbHVkZSAicWxjbmljX2hkci5oIgogCiAjZGVmaW5lIF9RTENOSUNfTElOVVhfTUFKT1IgNQogI2RlZmluZSBfUUxDTklDX0xJTlVYX01JTk9SIDAKLSNkZWZpbmUgX1FMQ05JQ19MSU5VWF9TVUJWRVJTSU9OIDE1Ci0jZGVmaW5lIFFMQ05JQ19MSU5VWF9WRVJTSU9OSUQgICI1LjAuMTUiCisjZGVmaW5lIF9RTENOSUNfTElOVVhfU1VCVkVSU0lPTiAxOAorI2RlZmluZSBRTENOSUNfTElOVVhfVkVSU0lPTklEICAiNS4wLjE4IgogI2RlZmluZSBRTENOSUNfRFJWX0lEQ19WRVIgIDB4MDEKICNkZWZpbmUgUUxDTklDX0RSSVZFUl9WRVJTSU9OICAoKF9RTENOSUNfTElOVVhfTUFKT1IgPDwgMTYpIHxcCiAJCSAoX1FMQ05JQ19MSU5VWF9NSU5PUiA8PCA4KSB8IChfUUxDTklDX0xJTlVYX1NVQlZFUlNJT04pKQpAQCAtOTMsOCArOTUsNiBAQAogI2RlZmluZSBUWF9JUF9QS1QJMHgwNAogI2RlZmluZSBUWF9UQ1BfTFNPCTB4MDUKICNkZWZpbmUgVFhfVENQX0xTTzYJMHgwNgotI2RlZmluZSBUWF9JUFNFQwkweDA3Ci0jZGVmaW5lIFRYX0lQU0VDX0NNRAkweDBhCiAjZGVmaW5lIFRYX1RDUFY2X1BLVAkweDBiCiAjZGVmaW5lIFRYX1VEUFY2X1BLVAkweDBjCiAKQEAgLTExOCw3ICsxMTgsNiBAQAogI2RlZmluZSBQSEFOX1BFR19SQ1ZfSU5JVElBTElaRUQJMHhmZjAxCiAKICNkZWZpbmUgTlVNX1JDVl9ERVNDX1JJTkdTCTMKLSNkZWZpbmUgTlVNX1NUU19ERVNDX1JJTkdTCTQKIAogI2RlZmluZSBSQ1ZfUklOR19OT1JNQUwgMAogI2RlZmluZSBSQ1ZfUklOR19KVU1CTwkxCkBAIC0yMDEsNyArMjAwLDcgQEAKIAlfX2xlMTYgcmVzZXJ2ZWQ7CiAJX19sZTMyIGJ1ZmZlcl9sZW5ndGg7CS8qIGFsbG9jYXRlZCBidWZmZXIgbGVuZ3RoICh1c3VhbGx5IDJLKSAqLwogCV9fbGU2NCBhZGRyX2J1ZmZlcjsKLX07Cit9IF9fcGFja2VkOwogCiAvKiBvcGNvZGUgZmllbGQgaW4gc3RhdHVzX2Rlc2MgKi8KICNkZWZpbmUgUUxDTklDX1NZTl9PRkZMT0FECTB4MDMKQEAgLTI5Myw2ICsyOTIsNyBAQAogLyogRmxhc2ggRGVmaW5lcyBhbmQgU3RydWN0dXJlcyAqLwogI2RlZmluZSBRTENOSUNfRkxUX0xPQ0FUSU9OCTB4M0YxMDAwCiAjZGVmaW5lIFFMQ05JQ19GV19JTUFHRV9SRUdJT04JMHg3NAorI2RlZmluZSBRTENOSUNfQk9PVExEX1JFR0lPTiAgICAwWDcyCiBzdHJ1Y3QgcWxjbmljX2ZsdF9oZWFkZXIgewogCXUxNiB2ZXJzaW9uOwogCXUxNiBsZW47CkBAIC0zMDcsNyArMzA3LDcgQEAKIAl1OCByZXNlcnZlZDE7CiAJdTMyIHNpemU7CiAJdTMyIHN0YXJ0X2FkZHI7Ci0JdTMyIGVuZF9hZGQ7CisJdTMyIGVuZF9hZGRyOwogfTsKIAogLyogTWFnaWMgbnVtYmVyIHRvIGxldCB1c2VyIGtub3cgZmxhc2ggaXMgcHJvZ3JhbW1lZCAqLwpAQCAtMzY2LDEyICszNjYsNiBAQAogCXU2NCBsZW5ndGg7CiB9OwogCi1zdHJ1Y3QgcWxjbmljX3JlY3ZfY3JiIHsKLQl1MzIgY3JiX3Jjdl9wcm9kdWNlcltOVU1fUkNWX0RFU0NfUklOR1NdOwotCXUzMiBjcmJfc3RzX2NvbnN1bWVyW05VTV9TVFNfREVTQ19SSU5HU107Ci0JdTMyIHN3X2ludF9tYXNrW05VTV9TVFNfREVTQ19SSU5HU107Ci19OwotCiAvKiAgICBGb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBzdGF0ZSBvZiB0aGUgYnVmZmVycyAgICAqLwogI2RlZmluZQlRTENOSUNfQlVGRkVSX0ZSRUUJMAogI2RlZmluZQlRTENOSUNfQlVGRkVSX0JVU1kJMQpAQCAtMzg4LDEwICszODIsMTAgQEAKIAogLyogSW4gcnhfYnVmZmVyLCB3ZSBkbyBub3QgbmVlZCBtdWx0aXBsZSBmcmFnbWVudHMgYXMgaXMgYSBzaW5nbGUgYnVmZmVyICovCiBzdHJ1Y3QgcWxjbmljX3J4X2J1ZmZlciB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JdTY0IGRtYTsKIAl1MTYgcmVmX2hhbmRsZTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwl1NjQgZG1hOwogfTsKIAogLyogQm9hcmQgdHlwZXMgKi8KQEAgLTM5OSw2ICszOTMsNDggQEAKICNkZWZpbmUJUUxDTklDX1hHQkUJMHgwMgogCiAvKgorICogSW50ZXJydXB0IGNvYWxlc2NpbmcgZGVmYXVsdHMuIFRoZSBkZWZhdWx0cyBhcmUgZm9yIDE1MDAgTVRVLiBJdCBpcworICogYWRqdXN0ZWQgYmFzZWQgb24gY29uZmlndXJlZCBNVFUuCisgKi8KKyNkZWZpbmUgUUxDTklDX0RFRkFVTFRfSU5UUl9DT0FMRVNDRV9SWF9USU1FX1VTCTMKKyNkZWZpbmUgUUxDTklDX0RFRkFVTFRfSU5UUl9DT0FMRVNDRV9SWF9QQUNLRVRTCTI1NgorCisjZGVmaW5lIFFMQ05JQ19JTlRSX0RFRkFVTFQJCQkweDA0CisjZGVmaW5lIFFMQ05JQ19DT05GSUdfSU5UUl9DT0FMRVNDRQkJMworCitzdHJ1Y3QgcWxjbmljX25pY19pbnRyX2NvYWxlc2NlIHsKKwl1OAl0eXBlOworCXU4CXN0c19yaW5nX21hc2s7CisJdTE2CXJ4X3BhY2tldHM7CisJdTE2CXJ4X3RpbWVfdXM7CisJdTE2CWZsYWc7CisJdTMyCXRpbWVyX291dDsKK307CisKK3N0cnVjdCBxbGNuaWNfZHVtcF90ZW1wbGF0ZV9oZHIgeworCV9fbGUzMgl0eXBlOworCV9fbGUzMglvZmZzZXQ7CisJX19sZTMyCXNpemU7CisJX19sZTMyCWNhcF9tYXNrOworCV9fbGUzMgludW1fZW50cmllczsKKwlfX2xlMzIJdmVyc2lvbjsKKwlfX2xlMzIJdGltZXN0YW1wOworCV9fbGUzMgljaGVja3N1bTsKKwlfX2xlMzIJZHJ2X2NhcF9tYXNrOworCV9fbGUzMglzeXNfaW5mb1szXTsKKwlfX2xlMzIJc2F2ZWRfc3RhdGVbMTZdOworCV9fbGUzMgljYXBfc2l6ZXNbOF07CisJX19sZTMyCXJzdmRbMF07Cit9OworCitzdHJ1Y3QgcWxjbmljX2Z3X2R1bXAgeworCXU4CWNscjsJLyogZmxhZyB0byBpbmRpY2F0ZSBpZiBkdW1wIGlzIGNsZWFyZWQgKi8KKwl1MzIJc2l6ZTsJLyogdG90YWwgc2l6ZSBvZiB0aGUgZHVtcCAqLworCXZvaWQJKmRhdGE7CS8qIGR1bXAgZGF0YSBhcmVhICovCisJc3RydWN0CXFsY25pY19kdW1wX3RlbXBsYXRlX2hkciAqdG1wbF9oZHI7Cit9OworCisvKgogICogT25lIGhhcmR3YXJlX2NvbnRleHR7fSBwZXIgYWRhcHRlcgogICogY29udGFpbnMgaW50ZXJydXB0IGluZm8gYXMgd2VsbCBzaGFyZWQgaGFyZHdhcmUgaW5mby4KICAqLwpAQCAtNDE2LDYgKzQ1Miw5IEBACiAJdTggbGlua3VwOwogCXUxNiBwb3J0X3R5cGU7CiAJdTE2IGJvYXJkX3R5cGU7CisKKwlzdHJ1Y3QgcWxjbmljX25pY19pbnRyX2NvYWxlc2NlIGNvYWw7CisJc3RydWN0IHFsY25pY19md19kdW1wIGZ3X2R1bXA7CiB9OwogCiBzdHJ1Y3QgcWxjbmljX2FkYXB0ZXJfc3RhdHMgewpAQCAtNDQzLDUwICs0ODIsNDkgQEAKICAqIGJlIG9uZSBSY3YgRGVzY3JpcHRvciBmb3Igbm9ybWFsIHBhY2tldHMsIG9uZSBmb3IganVtYm8gYW5kIG1heSBiZSBvdGhlcnMuCiAgKi8KIHN0cnVjdCBxbGNuaWNfaG9zdF9yZHNfcmluZyB7Ci0JdTMyIHByb2R1Y2VyOwotCXUzMiBudW1fZGVzYzsKLQl1MzIgZG1hX3NpemU7Ci0JdTMyIHNrYl9zaXplOwotCXUzMiBmbGFnczsKIAl2b2lkIF9faW9tZW0gKmNyYl9yY3ZfcHJvZHVjZXI7CiAJc3RydWN0IHJjdl9kZXNjICpkZXNjX2hlYWQ7CiAJc3RydWN0IHFsY25pY19yeF9idWZmZXIgKnJ4X2J1Zl9hcnI7CisJdTMyIG51bV9kZXNjOworCXUzMiBwcm9kdWNlcjsKKwl1MzIgZG1hX3NpemU7CisJdTMyIHNrYl9zaXplOworCXUzMiBmbGFnczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfbGlzdDsKIAlzcGlubG9ja190IGxvY2s7CiAJZG1hX2FkZHJfdCBwaHlzX2FkZHI7Ci19OworfSBfX19fY2FjaGVsaW5lX2ludGVybm9kZWFsaWduZWRfaW5fc21wOwogCiBzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcgewogCXUzMiBjb25zdW1lcjsKIAl1MzIgbnVtX2Rlc2M7CiAJdm9pZCBfX2lvbWVtICpjcmJfc3RzX2NvbnN1bWVyOwotCXZvaWQgX19pb21lbSAqY3JiX2ludHJfbWFzazsKIAogCXN0cnVjdCBzdGF0dXNfZGVzYyAqZGVzY19oZWFkOwogCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcjsKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfbGlzdFtOVU1fUkNWX0RFU0NfUklOR1NdOwogCisJdm9pZCBfX2lvbWVtICpjcmJfaW50cl9tYXNrOwogCWludCBpcnE7CiAKIAlkbWFfYWRkcl90IHBoeXNfYWRkcjsKIAljaGFyIG5hbWVbSUZOQU1TSVorNF07Ci19OworfSBfX19fY2FjaGVsaW5lX2ludGVybm9kZWFsaWduZWRfaW5fc21wOwogCiBzdHJ1Y3QgcWxjbmljX2hvc3RfdHhfcmluZyB7CiAJdTMyIHByb2R1Y2VyOwotCV9fbGUzMiAqaHdfY29uc3VtZXI7CiAJdTMyIHN3X2NvbnN1bWVyOwotCXZvaWQgX19pb21lbSAqY3JiX2NtZF9wcm9kdWNlcjsKIAl1MzIgbnVtX2Rlc2M7Ci0KLQlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7Ci0KLQlzdHJ1Y3QgcWxjbmljX2NtZF9idWZmZXIgKmNtZF9idWZfYXJyOworCXZvaWQgX19pb21lbSAqY3JiX2NtZF9wcm9kdWNlcjsKIAlzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKmRlc2NfaGVhZDsKKwlzdHJ1Y3QgcWxjbmljX2NtZF9idWZmZXIgKmNtZF9idWZfYXJyOworCV9fbGUzMiAqaHdfY29uc3VtZXI7CisKIAlkbWFfYWRkcl90IHBoeXNfYWRkcjsKIAlkbWFfYWRkcl90IGh3X2NvbnNfcGh5c19hZGRyOwotfTsKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7Cit9IF9fX19jYWNoZWxpbmVfaW50ZXJub2RlYWxpZ25lZF9pbl9zbXA7CiAKIC8qCiAgKiBSZWNlaXZlIGNvbnRleHQuIFRoZXJlIGlzIG9uZSBzdWNoIHN0cnVjdHVyZSBwZXIgaW5zdGFuY2Ugb2YgdGhlCkBAIC00OTUsMTIgKzUzMywxMiBAQAogICogcHJlc2VudCBlbHNld2hlcmUuCiAgKi8KIHN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0IHsKKwlzdHJ1Y3QgcWxjbmljX2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nczsKKwlzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nczsKIAl1MzIgc3RhdGU7CiAJdTE2IGNvbnRleHRfaWQ7CiAJdTE2IHZpcnRfcG9ydDsKIAotCXN0cnVjdCBxbGNuaWNfaG9zdF9yZHNfcmluZyAqcmRzX3JpbmdzOwotCXN0cnVjdCBxbGNuaWNfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmdzOwogfTsKIAogLyogSFcgY29udGV4dCBjcmVhdGlvbiAqLwpAQCAtNTM5LDkgKzU3Nyw2IEBACiAjZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9ERVNUUk9ZX1JYX0NUWCAgICAgICAgICAweDAwMDAwMDA4CiAjZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9DUkVBVEVfVFhfQ1RYICAgICAgICAgICAweDAwMDAwMDA5CiAjZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9ERVNUUk9ZX1RYX0NUWCAgICAgICAgICAweDAwMDAwMDBhCi0jZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9TRVRVUF9TVEFUSVNUSUNTICAgICAgICAweDAwMDAwMDBlCi0jZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9HRVRfU1RBVElTVElDUyAgICAgICAgICAweDAwMDAwMDBmCi0jZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9ERUxFVEVfU1RBVElTVElDUyAgICAgICAweDAwMDAwMDEwCiAjZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9TRVRfTVRVICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCiAjZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9SRUFEX1BIWQkJMHgwMDAwMDAxMwogI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfV1JJVEVfUEhZCQkweDAwMDAwMDE0CkBAIC01NTAsMTcgKzU4NSwxMSBAQAogI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfU0VUX0ZMT1dfQ1RMCQkweDAwMDAwMDE3CiAjZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9SRUFEX01BWF9NVFUJCTB4MDAwMDAwMTgKICNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX1JFQURfTUFYX0xSTwkJMHgwMDAwMDAxOQotI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfQ09ORklHVVJFX1RPRQkJMHgwMDAwMDAxYQotI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfRlVOQ19BVFRSSUIJCTB4MDAwMDAwMWIKLSNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX1JFQURfUEVYUV9QQVJBTUVURVJTCTB4MDAwMDAwMWMKLSNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX0dFVF9MSUNfQ0FQQUJJTElUSUVTCTB4MDAwMDAwMWQKLSNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX1JFQURfTUFYX0xST19QRVJfQk9BUkQJMHgwMDAwMDAxZQogI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfTUFDX0FERFJFU1MJCTB4MDAwMDAwMWYKIAogI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfR0VUX1BDSV9JTkZPCQkweDAwMDAwMDIwCiAjZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9HRVRfTklDX0lORk8JCTB4MDAwMDAwMjEKICNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX1NFVF9OSUNfSU5GTwkJMHgwMDAwMDAyMgotI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfUkVTRVRfTlBBUgkJMHgwMDAwMDAyMwogI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfR0VUX0VTV0lUQ0hfQ0FQQUJJTElUWQkweDAwMDAwMDI0CiAjZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9UT0dHTEVfRVNXSVRDSAkJMHgwMDAwMDAyNQogI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfR0VUX0VTV0lUQ0hfU1RBVFVTCTB4MDAwMDAwMjYKQEAgLTU2OCw4ICs1OTcsMTIgQEAKICNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX0NPTkZJR1VSRV9FU1dJVENICTB4MDAwMDAwMjgKICNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX0dFVF9FU1dJVENIX1BPUlRfQ09ORklHCTB4MDAwMDAwMjkKICNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX0dFVF9FU1dJVENIX1NUQVRTCTB4MDAwMDAwMmEKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX0NPTkZJR19QT1JUCQkweDAwMDAwMDJFCisjZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9URU1QX1NJWkUJCTB4MDAwMDAwMmYKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX0dFVF9URU1QX0hEUgkJMHgwMDAwMDAzMAogCiAjZGVmaW5lIFFMQ05JQ19SQ09ERV9TVUNDRVNTCQkwCisjZGVmaW5lIFFMQ05JQ19SQ09ERV9OT1RfU1VQUE9SVEVECTkKICNkZWZpbmUgUUxDTklDX1JDT0RFX1RJTUVPVVQJCTE3CiAjZGVmaW5lIFFMQ05JQ19ERVNUUk9ZX0NUWF9SRVNFVAkwCiAKQEAgLTU5OCwxNCArNjMxLDE0IEBACiAJX19sZTMyIHJpbmdfc2l6ZTsJCS8qIFJpbmcgZW50cmllcyAqLwogCV9fbGUxNiBtc2lfaW5kZXg7CiAJX19sZTE2IHJzdmQ7CQkvKiBQYWRkaW5nICovCi19OworfSBfX3BhY2tlZDsKIAogc3RydWN0IHFsY25pY19ob3N0cnFfcmRzX3JpbmcgewogCV9fbGU2NCBob3N0X3BoeXNfYWRkcjsJLyogUmluZyBiYXNlIGFkZHIgKi8KIAlfX2xlNjQgYnVmZl9zaXplOwkJLyogUGFja2V0IGJ1ZmZlciBzaXplICovCiAJX19sZTMyIHJpbmdfc2l6ZTsJCS8qIFJpbmcgZW50cmllcyAqLwogCV9fbGUzMiByaW5nX2tpbmQ7CQkvKiBDbGFzcyBvZiByaW5nICovCi19OworfSBfX3BhY2tlZDsKIAogc3RydWN0IHFsY25pY19ob3N0cnFfcnhfY3R4IHsKIAlfX2xlNjQgaG9zdF9yc3BfZG1hX2FkZHI7CS8qIFJlc3BvbnNlIGRtYSdkIGhlcmUgKi8KQEAgLTYyNiwxNyArNjU5LDE3IEBACiAJICAgLSBOIGhvc3RycV9yZHNfcmluZ3MKIAkgICAtIE4gaG9zdHJxX3Nkc19yaW5ncyAqLwogCWNoYXIgZGF0YVswXTsKLX07Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgcWxjbmljX2NhcmRyc3BfcmRzX3Jpbmd7CiAJX19sZTMyIGhvc3RfcHJvZHVjZXJfY3JiOwkvKiBDcmIgdG8gdXNlICovCiAJX19sZTMyIHJzdmQxOwkJLyogUGFkZGluZyAqLwotfTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBxbGNuaWNfY2FyZHJzcF9zZHNfcmluZyB7CiAJX19sZTMyIGhvc3RfY29uc3VtZXJfY3JiOwkvKiBDcmIgdG8gdXNlICovCiAJX19sZTMyIGludGVycnVwdF9jcmI7CS8qIENyYiB0byB1c2UgKi8KLX07Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgcWxjbmljX2NhcmRyc3BfcnhfY3R4IHsKIAkvKiBUaGVzZSByaW5nIG9mZnNldHMgYXJlIHJlbGF0aXZlIHRvIGRhdGFbMF0gYmVsb3cgKi8KQEAgLTY1NSw3ICs2ODgsNyBAQAogCSAgIC0gTiBjYXJkcnNwX3Jkc19yaW5ncwogCSAgIC0gTiBjYXJkcnNfc2RzX3JpbmdzICovCiAJY2hhciBkYXRhWzBdOwotfTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgU0laRU9GX0hPU1RSUV9SWChIT1NUUlFfUlgsIHJkc19yaW5ncywgc2RzX3JpbmdzKQlcCiAJKHNpemVvZihIT1NUUlFfUlgpICsgCQkJCQlcCkBAIC02NzUsNyArNzA4LDcgQEAKIAlfX2xlNjQgaG9zdF9waHlzX2FkZHI7CS8qIFJpbmcgYmFzZSBhZGRyICovCiAJX19sZTMyIHJpbmdfc2l6ZTsJCS8qIFJpbmcgZW50cmllcyAqLwogCV9fbGUzMiByc3ZkOwkJLyogUGFkZGluZyAqLwotfTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBxbGNuaWNfaG9zdHJxX3R4X2N0eCB7CiAJX19sZTY0IGhvc3RfcnNwX2RtYV9hZGRyOwkvKiBSZXNwb25zZSBkbWEnZCBoZXJlICovCkBAIC02OTAsMTIgKzcyMywxMiBAQAogCV9fbGUxNiByc3ZkMzsJCS8qIFBhZGRpbmcgKi8KIAlzdHJ1Y3QgcWxjbmljX2hvc3RycV9jZHNfcmluZyBjZHNfcmluZzsJLyogRGVzYyBvZiBjZHMgcmluZyAqLwogCXU4ICByZXNlcnZlZFsxMjhdOwkvKiBmdXR1cmUgZXhwYW5zaW9uICovCi19OworfSBfX3BhY2tlZDsKIAogc3RydWN0IHFsY25pY19jYXJkcnNwX2Nkc19yaW5nIHsKIAlfX2xlMzIgaG9zdF9wcm9kdWNlcl9jcmI7CS8qIENyYiB0byB1c2UgKi8KIAlfX2xlMzIgaW50ZXJydXB0X2NyYjsJLyogQ3JiIHRvIHVzZSAqLwotfTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBxbGNuaWNfY2FyZHJzcF90eF9jdHggewogCV9fbGUzMiBob3N0X2N0eF9zdGF0ZTsJLyogU3RhcnRpbmcgc3RhdGUgKi8KQEAgLTcwNCw3ICs3MzcsNyBAQAogCXU4ICB2aXJ0X3BvcnQ7CQkvKiBWaXJ0dWFsL0xvZ2ljYWwgaWQgb2YgcG9ydCAqLwogCXN0cnVjdCBxbGNuaWNfY2FyZHJzcF9jZHNfcmluZyBjZHNfcmluZzsJLyogQ2FyZCBjZHMgc2V0dGluZ3MgKi8KIAl1OCAgcmVzZXJ2ZWRbMTI4XTsJLyogZnV0dXJlIGV4cGFuc2lvbiAqLwotfTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgU0laRU9GX0hPU1RSUV9UWChIT1NUUlFfVFgpCShzaXplb2YoSE9TVFJRX1RYKSkKICNkZWZpbmUgU0laRU9GX0NBUkRSU1BfVFgoQ0FSRFJTUF9UWCkJKHNpemVvZihDQVJEUlNQX1RYKSkKQEAgLTczOCw0MCArNzcxLDYgQEAKIAl1aW50OF90IG1hY19hZGRyW0VUSF9BTEVOKzJdOwogfTsKIAotLyoKLSAqIEludGVycnVwdCBjb2FsZXNjaW5nIGRlZmF1bHRzLiBUaGUgZGVmYXVsdHMgYXJlIGZvciAxNTAwIE1UVS4gSXQgaXMKLSAqIGFkanVzdGVkIGJhc2VkIG9uIGNvbmZpZ3VyZWQgTVRVLgotICovCi0jZGVmaW5lIFFMQ05JQ19ERUZBVUxUX0lOVFJfQ09BTEVTQ0VfUlhfVElNRV9VUwkzCi0jZGVmaW5lIFFMQ05JQ19ERUZBVUxUX0lOVFJfQ09BTEVTQ0VfUlhfUEFDS0VUUwkyNTYKLSNkZWZpbmUgUUxDTklDX0RFRkFVTFRfSU5UUl9DT0FMRVNDRV9UWF9QQUNLRVRTCTY0Ci0jZGVmaW5lIFFMQ05JQ19ERUZBVUxUX0lOVFJfQ09BTEVTQ0VfVFhfVElNRV9VUwk0Ci0KLSNkZWZpbmUgUUxDTklDX0lOVFJfREVGQVVMVAkJCTB4MDQKLQotdW5pb24gcWxjbmljX25pY19pbnRyX2NvYWxlc2NlX2RhdGEgewotCXN0cnVjdCB7Ci0JCXUxNglyeF9wYWNrZXRzOwotCQl1MTYJcnhfdGltZV91czsKLQkJdTE2CXR4X3BhY2tldHM7Ci0JCXUxNgl0eF90aW1lX3VzOwotCX0gZGF0YTsKLQl1NjQJCXdvcmQ7Ci19OwotCi1zdHJ1Y3QgcWxjbmljX25pY19pbnRyX2NvYWxlc2NlIHsKLQl1MTYJCXN0YXRzX3RpbWVfdXM7Ci0JdTE2CQlyYXRlX3NhbXBsZV90aW1lOwotCXUxNgkJZmxhZ3M7Ci0JdTE2CQlyc3ZkXzE7Ci0JdTMyCQlsb3dfdGhyZXNob2xkOwotCXUzMgkJaGlnaF90aHJlc2hvbGQ7Ci0JdW5pb24gcWxjbmljX25pY19pbnRyX2NvYWxlc2NlX2RhdGEJbm9ybWFsOwotCXVuaW9uIHFsY25pY19uaWNfaW50cl9jb2FsZXNjZV9kYXRhCWxvdzsKLQl1bmlvbiBxbGNuaWNfbmljX2ludHJfY29hbGVzY2VfZGF0YQloaWdoOwotCXVuaW9uIHFsY25pY19uaWNfaW50cl9jb2FsZXNjZV9kYXRhCWlycTsKLX07Ci0KICNkZWZpbmUgUUxDTklDX0hPU1RfUkVRVUVTVAkweDEzCiAjZGVmaW5lIFFMQ05JQ19SRVFVRVNUCQkweDE0CiAKQEAgLTc4Myw1MCArNzgyLDIwIEBACiAvKgogICogRHJpdmVyIC0tPiBGaXJtd2FyZQogICovCi0jZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX1NUQVJUIAkJCTAKLSNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfQ09ORklHX1JTUwkJCTEKLSNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfQ09ORklHX1JTU19UQkwJCTIKLSNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfQ09ORklHX0lOVFJfQ09BTEVTQ0UJCTMKLSNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfQ09ORklHX0xFRAkJCTQKLSNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfQ09ORklHX1BST01JU0NVT1VTCQk1Ci0jZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX0NPTkZJR19MMl9NQUMgCQk2Ci0jZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX0xST19SRVFVRVNUCQkJNwotI2RlZmluZSBRTENOSUNfSDJDX09QQ09ERV9HRVRfU05NUF9TVEFUUwkJOAotI2RlZmluZSBRTENOSUNfSDJDX09QQ09ERV9QUk9YWV9TVEFSVF9SRVFVRVNUCQk5Ci0jZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX1BST1hZX1NUT1BfUkVRVUVTVAkJMTAKLSNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfUFJPWFlfU0VUX01UVSAJCTExCi0jZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX1BST1hZX1NFVF9WUE9SVF9NSVNTX01PREUJMTIKLSNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfR0VUX0ZJTkdFUl9QUklOVF9SRVFVRVNUCTEzCi0jZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX0lOU1RBTExfTElDRU5TRV9SRVFVRVNUCTE0Ci0jZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX0dFVF9MSUNFTlNFX0NBUEFCSUxJVFlfUkVRVUVTVAkxNQotI2RlZmluZSBRTENOSUNfSDJDX09QQ09ERV9HRVRfTkVUX1NUQVRTIAkJMTYKLSNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfUFJPWFlfVVBEQVRFX1AyVgkJMTcKLSNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfQ09ORklHX0lQQUREUiAJCTE4Ci0jZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX1BST1hZX1NUT1BfRE9ORQkJMjAKLSNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfR0VUX0xJTktFVkVOVCAJCTIxCi0jZGVmaW5lIFFMQ05JQ19DMkNfT1BDT0RFCQkJCTIyCi0jZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX0NPTkZJR19CUklER0lORwkJMjMKLSNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfQ09ORklHX0hXX0xSTyAJCTI0Ci0jZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX0xBU1QJCQkJMjUKKyNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfQ09ORklHX1JTUwkJCTB4MQorI2RlZmluZSBRTENOSUNfSDJDX09QQ09ERV9DT05GSUdfSU5UUl9DT0FMRVNDRQkJMHgzCisjZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX0NPTkZJR19MRUQJCQkweDQKKyNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfTFJPX1JFUVVFU1QJCQkweDcKKyNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfU0VUX01BQ19SRUNFSVZFX01PREUJCTB4YworI2RlZmluZSBRTENOSUNfSDJDX09QQ09ERV9DT05GSUdfSVBBRERSCQkweDEyCisjZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX0dFVF9MSU5LRVZFTlQJCTB4MTUKKyNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfQ09ORklHX0JSSURHSU5HCQkweDE3CisjZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX0NPTkZJR19IV19MUk8JCTB4MTgKIC8qCiAgKiBGaXJtd2FyZSAtLT4gRHJpdmVyCiAgKi8KIAotI2RlZmluZSBRTENOSUNfQzJIX09QQ09ERV9TVEFSVCAJCQkxMjgKLSNkZWZpbmUgUUxDTklDX0MySF9PUENPREVfQ09ORklHX1JTU19SRVNQT05TRQkJMTI5Ci0jZGVmaW5lIFFMQ05JQ19DMkhfT1BDT0RFX0NPTkZJR19SU1NfVEJMX1JFU1BPTlNFCTEzMAotI2RlZmluZSBRTENOSUNfQzJIX09QQ09ERV9DT05GSUdfTUFDX1JFU1BPTlNFCQkxMzEKLSNkZWZpbmUgUUxDTklDX0MySF9PUENPREVfQ09ORklHX1BST01JU0NVT1VTX1JFU1BPTlNFCTEzMgotI2RlZmluZSBRTENOSUNfQzJIX09QQ09ERV9DT05GSUdfTDJfTUFDX1JFU1BPTlNFCTEzMwotI2RlZmluZSBRTENOSUNfQzJIX09QQ09ERV9MUk9fREVMRVRFX1JFU1BPTlNFCQkxMzQKLSNkZWZpbmUgUUxDTklDX0MySF9PUENPREVfTFJPX0FERF9GQUlMVVJFX1JFU1BPTlNFCTEzNQotI2RlZmluZSBRTENOSUNfQzJIX09QQ09ERV9HRVRfU05NUF9TVEFUUwkJMTM2Ci0jZGVmaW5lIFFMQ05JQ19DMkhfT1BDT0RFX0dFVF9GSU5HRVJfUFJJTlRfUkVQTFkJMTM3Ci0jZGVmaW5lIFFMQ05JQ19DMkhfT1BDT0RFX0lOU1RBTExfTElDRU5TRV9SRVBMWSAJMTM4Ci0jZGVmaW5lIFFMQ05JQ19DMkhfT1BDT0RFX0dFVF9MSUNFTlNFX0NBUEFCSUxJVElFU19SRVBMWSAxMzkKLSNkZWZpbmUgUUxDTklDX0MySF9PUENPREVfR0VUX05FVF9TVEFUU19SRVNQT05TRQkxNDAKICNkZWZpbmUgUUxDTklDX0MySF9PUENPREVfR0VUX0xJTktFVkVOVF9SRVNQT05TRQkxNDEKLSNkZWZpbmUgUUxDTklDX0MySF9PUENPREVfTEFTVAkJCQkxNDIKIAogI2RlZmluZSBWUE9SVF9NSVNTX01PREVfRFJPUAkJMCAvKiBkcm9wIGFsbCB1bm1hdGNoZWQgKi8KICNkZWZpbmUgVlBPUlRfTUlTU19NT0RFX0FDQ0VQVF9BTEwJMSAvKiBhY2NlcHQgYWxsIHBhY2tldHMgKi8KQEAgLTg5NSw3ICs4NjQsNyBAQAogCV9fbGU2NCBxaGRyOwogCV9fbGU2NCByZXFfaGRyOwogCV9fbGU2NCB3b3Jkc1s2XTsKLX07Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgcWxjbmljX21hY19yZXEgewogCXU4IG9wOwpAQCAtOTA2LDcgKzg3NSw3IEBACiBzdHJ1Y3QgcWxjbmljX3ZsYW5fcmVxIHsKIAlfX2xlMTYgdmxhbl9pZDsKIAlfX2xlMTYgcnN2ZFszXTsKLX07Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgcWxjbmljX2lwYWRkciB7CiAJX19iZTMyIGlwdjQ7CkBAIC05MjksNyArODk4LDggQEAKICNkZWZpbmUgUUxDTklDX0lTX01TSV9GQU1JTFkoYWRhcHRlcikgXAogCSgoYWRhcHRlciktPmZsYWdzICYgKFFMQ05JQ19NU0lfRU5BQkxFRCB8IFFMQ05JQ19NU0lYX0VOQUJMRUQpKQogCi0jZGVmaW5lIE1TSVhfRU5UUklFU19QRVJfQURBUFRFUglOVU1fU1RTX0RFU0NfUklOR1MKKyNkZWZpbmUgUUxDTklDX0RFRl9OVU1fU1RTX0RFU0NfUklOR1MJNAorI2RlZmluZSBRTENOSUNfTUlOX05VTV9SU1NfUklOR1MJMgogI2RlZmluZSBRTENOSUNfTVNJWF9UQkxfU1BBQ0UJCTgxOTIKICNkZWZpbmUgUUxDTklDX1BDSV9SRUdfTVNJWF9UQkwgCTB4NDQKICNkZWZpbmUgUUxDTklDX01TSVhfVEJMX1BHU0laRQkJNDA5NgpAQCAtOTQyLDYgKzkxMiw3IEBACiAjZGVmaW5lIF9fUUxDTklDX1JFU0VUVElORwkJMgogI2RlZmluZSBfX1FMQ05JQ19TVEFSVF9GVyAJCTQKICNkZWZpbmUgX19RTENOSUNfQUVSCQkJNQorI2RlZmluZSBfX1FMQ05JQ19ESUFHX1JFU19BTExPQwkJNgogCiAjZGVmaW5lIFFMQ05JQ19JTlRFUlJVUFRfVEVTVAkJMQogI2RlZmluZSBRTENOSUNfTE9PUEJBQ0tfVEVTVAkJMgpAQCAtOTY1LDE0ICs5MzYsMTQgQEAKIH07CiAKIHN0cnVjdCBxbGNuaWNfYWRhcHRlciB7Ci0Jc3RydWN0IHFsY25pY19oYXJkd2FyZV9jb250ZXh0IGFodzsKLQorCXN0cnVjdCBxbGNuaWNfaGFyZHdhcmVfY29udGV4dCAqYWh3OworCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eDsKKwlzdHJ1Y3QgcWxjbmljX2hvc3RfdHhfcmluZyAqdHhfcmluZzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwotCXN0cnVjdCBsaXN0X2hlYWQgbWFjX2xpc3Q7CiAKLQlzcGlubG9ja190IHR4X2NsZWFuX2xvY2s7Ci0Jc3BpbmxvY2tfdCBtYWNfbGVhcm5fbG9jazsKKwl1bnNpZ25lZCBsb25nIHN0YXRlOworCXUzMiBmbGFnczsKIAogCXUxNiBudW1fdHhkOwogCXUxNiBudW1fcnhkOwpAQCAtOTgzLDE0ICs5NTQsMTIgQEAKIAl1OCBtYXhfcmRzX3JpbmdzOwogCXU4IG1heF9zZHNfcmluZ3M7CiAJdTggbXNpeF9zdXBwb3J0ZWQ7Ci0JdTggcnhfY3N1bTsKIAl1OCBwb3J0bnVtOwogCXU4IHBoeXNpY2FsX3BvcnQ7CiAJdTggcmVzZXRfY29udGV4dDsKIAogCXU4IG1jX2VuYWJsZWQ7CiAJdTggbWF4X21jX2NvdW50OwotCXU4IHJzc19zdXBwb3J0ZWQ7CiAJdTggZndfd2FpdF9jbnQ7CiAJdTggZndfZmFpbF9jbnQ7CiAJdTggdHhfdGltZW9fY250OwpAQCAtMTAxNSw3ICs5ODQsNiBAQAogCiAJdTMyIGZ3X2hhbF92ZXJzaW9uOwogCXUzMiBjYXBhYmlsaXRpZXM7Ci0JdTMyIGZsYWdzOwogCXUzMiBpcnE7CiAJdTMyIHRlbXA7CiAKQEAgLTEwMzMsMzEgKzEwMDEsMjkgQEAKIAl1OCBtYWNfYWRkcltFVEhfQUxFTl07CiAKIAl1NjQgZGV2X3JzdF90aW1lOworCXVuc2lnbmVkIGxvbmcgdmxhbnNbQklUU19UT19MT05HUyhWTEFOX05fVklEKV07CiAKLQlzdHJ1Y3Qgdmxhbl9ncm91cCAqdmxncnA7CiAJc3RydWN0IHFsY25pY19ucGFyX2luZm8gKm5wYXJzOwogCXN0cnVjdCBxbGNuaWNfZXN3aXRjaCAqZXN3aXRjaDsKIAlzdHJ1Y3QgcWxjbmljX25pY190ZW1wbGF0ZSAqbmljX29wczsKIAogCXN0cnVjdCBxbGNuaWNfYWRhcHRlcl9zdGF0cyBzdGF0czsKLQotCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0IHJlY3ZfY3R4OwotCXN0cnVjdCBxbGNuaWNfaG9zdF90eF9yaW5nICp0eF9yaW5nOworCXN0cnVjdCBsaXN0X2hlYWQgbWFjX2xpc3Q7CiAKIAl2b2lkIF9faW9tZW0JKnRndF9tYXNrX3JlZzsKIAl2b2lkIF9faW9tZW0JKnRndF9zdGF0dXNfcmVnOwogCXZvaWQgX19pb21lbQkqY3JiX2ludF9zdGF0ZV9yZWc7CiAJdm9pZCBfX2lvbWVtCSppc3JfaW50X3ZlYzsKIAotCXN0cnVjdCBtc2l4X2VudHJ5IG1zaXhfZW50cmllc1tNU0lYX0VOVFJJRVNfUEVSX0FEQVBURVJdOworCXN0cnVjdCBtc2l4X2VudHJ5ICptc2l4X2VudHJpZXM7CiAKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIGZ3X3dvcms7CiAKLQlzdHJ1Y3QgcWxjbmljX25pY19pbnRyX2NvYWxlc2NlIGNvYWw7CiAKIAlzdHJ1Y3QgcWxjbmljX2ZpbHRlcl9oYXNoIGZoYXNoOwogCi0JdW5zaWduZWQgbG9uZyBzdGF0ZTsKKwlzcGlubG9ja190IHR4X2NsZWFuX2xvY2s7CisJc3BpbmxvY2tfdCBtYWNfbGVhcm5fbG9jazsKIAlfX2xlMzIgZmlsZV9wcmRfb2ZmOwkvKkZpbGUgZncgcHJvZHVjdCBvZmZzZXQqLwogCXUzMiBmd192ZXJzaW9uOwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CkBAIC0xMDc5LDcgKzEwNDUsNyBAQAogCV9fbGUxNgltaW5fdHhfYnc7CiAJX19sZTE2CW1heF90eF9idzsKIAl1OAlyZXNlcnZlZDJbMTA0XTsKLX07Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgcWxjbmljX3BjaV9pbmZvIHsKIAlfX2xlMTYJaWQ7IC8qIHBjaSBmdW5jdGlvbiBpZCAqLwpAQCAtMTA5Myw3ICsxMDU5LDcgQEAKIAogCXU4CW1hY1tFVEhfQUxFTl07CiAJdTgJcmVzZXJ2ZWQyWzEwNl07Ci19OworfSBfX3BhY2tlZDsKIAogc3RydWN0IHFsY25pY19ucGFyX2luZm8gewogCXUxNglwdmlkOwpAQCAtMTIxMCwxNSArMTE3NiwxNjAgQEAKIAlfX2xlNjQgbG9jYWxfZnJhbWVzOwogCV9fbGU2NCBudW1ieXRlczsKIAlfX2xlNjQgcnN2ZFszXTsKLX07Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgcWxjbmljX2Vzd19zdGF0aXN0aWNzIHsKIAlzdHJ1Y3QgX19xbGNuaWNfZXN3X3N0YXRpc3RpY3Mgcng7CiAJc3RydWN0IF9fcWxjbmljX2Vzd19zdGF0aXN0aWNzIHR4OwogfTsKIAotaW50IHFsY25pY19md19jbWRfcXVlcnlfcGh5KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgdTMyIHJlZywgdTMyICp2YWwpOwotaW50IHFsY25pY19md19jbWRfc2V0X3BoeShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiByZWcsIHUzMiB2YWwpOworc3RydWN0IHFsY25pY19jb21tb25fZW50cnlfaGRyIHsKKwlfX2xlMzIJdHlwZTsKKwlfX2xlMzIJb2Zmc2V0OworCV9fbGUzMgljYXBfc2l6ZTsKKwl1OAltYXNrOworCXU4CXJzdmRbMl07CisJdTgJZmxhZ3M7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgX19jcmIgeworCV9fbGUzMglhZGRyOworCXU4CXN0cmlkZTsKKwl1OAlyc3ZkMVszXTsKKwlfX2xlMzIJZGF0YV9zaXplOworCV9fbGUzMglub19vcHM7CisJX19sZTMyCXJzdmQyWzRdOworfSBfX3BhY2tlZDsKKworc3RydWN0IF9fY3RybCB7CisJX19sZTMyCWFkZHI7CisJdTgJc3RyaWRlOworCXU4CWluZGV4X2E7CisJX19sZTE2CXRpbWVvdXQ7CisJX19sZTMyCWRhdGFfc2l6ZTsKKwlfX2xlMzIJbm9fb3BzOworCXU4CW9wY29kZTsKKwl1OAlpbmRleF92OworCXU4CXNobF92YWw7CisJdTgJc2hyX3ZhbDsKKwlfX2xlMzIJdmFsMTsKKwlfX2xlMzIJdmFsMjsKKwlfX2xlMzIJdmFsMzsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBfX2NhY2hlIHsKKwlfX2xlMzIJYWRkcjsKKwl1OAlzdHJpZGU7CisJdTgJcnN2ZDsKKwlfX2xlMTYJaW5pdF90YWdfdmFsOworCV9fbGUzMglzaXplOworCV9fbGUzMglub19vcHM7CisJX19sZTMyCWN0cmxfYWRkcjsKKwlfX2xlMzIJY3RybF92YWw7CisJX19sZTMyCXJlYWRfYWRkcjsKKwl1OAlyZWFkX2FkZHJfc3RyaWRlOworCXU4CXJlYWRfYWRkcl9udW07CisJdTgJcnN2ZDFbMl07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgX19vY20geworCXU4CXJzdmRbOF07CisJX19sZTMyCXNpemU7CisJX19sZTMyCW5vX29wczsKKwl1OAlyc3ZkMVs4XTsKKwlfX2xlMzIJcmVhZF9hZGRyOworCV9fbGUzMglyZWFkX2FkZHJfc3RyaWRlOworfSBfX3BhY2tlZDsKKworc3RydWN0IF9fbWVtIHsKKwl1OAlyc3ZkWzI0XTsKKwlfX2xlMzIJYWRkcjsKKwlfX2xlMzIJc2l6ZTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBfX211eCB7CisJX19sZTMyCWFkZHI7CisJdTgJcnN2ZFs0XTsKKwlfX2xlMzIJc2l6ZTsKKwlfX2xlMzIJbm9fb3BzOworCV9fbGUzMgl2YWw7CisJX19sZTMyCXZhbF9zdHJpZGU7CisJX19sZTMyCXJlYWRfYWRkcjsKKwl1OAlyc3ZkMls0XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBfX3F1ZXVlIHsKKwlfX2xlMzIJc2VsX2FkZHI7CisJX19sZTE2CXN0cmlkZTsKKwl1OAlyc3ZkWzJdOworCV9fbGUzMglzaXplOworCV9fbGUzMglub19vcHM7CisJdTgJcnN2ZDJbOF07CisJX19sZTMyCXJlYWRfYWRkcjsKKwl1OAlyZWFkX2FkZHJfc3RyaWRlOworCXU4CXJlYWRfYWRkcl9jbnQ7CisJdTgJcnN2ZDNbMl07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgcWxjbmljX2R1bXBfZW50cnkgeworCXN0cnVjdCBxbGNuaWNfY29tbW9uX2VudHJ5X2hkciBoZHI7CisJdW5pb24geworCQlzdHJ1Y3QgX19jcmIJY3JiOworCQlzdHJ1Y3QgX19jYWNoZQljYWNoZTsKKwkJc3RydWN0IF9fb2NtCW9jbTsKKwkJc3RydWN0IF9fbWVtCW1lbTsKKwkJc3RydWN0IF9fbXV4CW11eDsKKwkJc3RydWN0IF9fcXVldWUJcXVlOworCQlzdHJ1Y3QgX19jdHJsCWN0cmw7CisJfSByZWdpb247Cit9IF9fcGFja2VkOworCitlbnVtIG9wX2NvZGVzIHsKKwlRTENOSUNfRFVNUF9OT1AJCT0gMCwKKwlRTENOSUNfRFVNUF9SRUFEX0NSQgk9IDEsCisJUUxDTklDX0RVTVBfUkVBRF9NVVgJPSAyLAorCVFMQ05JQ19EVU1QX1FVRVVFCT0gMywKKwlRTENOSUNfRFVNUF9CUkRfQ09ORklHCT0gNCwKKwlRTENOSUNfRFVNUF9SRUFEX09DTQk9IDYsCisJUUxDTklDX0RVTVBfUEVHX1JFRwk9IDcsCisJUUxDTklDX0RVTVBfTDFfRFRBRwk9IDgsCisJUUxDTklDX0RVTVBfTDFfSVRBRwk9IDksCisJUUxDTklDX0RVTVBfTDFfREFUQQk9IDExLAorCVFMQ05JQ19EVU1QX0wxX0lOU1QJPSAxMiwKKwlRTENOSUNfRFVNUF9MMl9EVEFHCT0gMjEsCisJUUxDTklDX0RVTVBfTDJfSVRBRwk9IDIyLAorCVFMQ05JQ19EVU1QX0wyX0RBVEEJPSAyMywKKwlRTENOSUNfRFVNUF9MMl9JTlNUCT0gMjQsCisJUUxDTklDX0RVTVBfUkVBRF9ST00JPSA3MSwKKwlRTENOSUNfRFVNUF9SRUFEX01FTQk9IDcyLAorCVFMQ05JQ19EVU1QX1JFQURfQ1RSTAk9IDk4LAorCVFMQ05JQ19EVU1QX1RMSERSCT0gOTksCisJUUxDTklDX0RVTVBfUkRFTkQJPSAyNTUKK307CisKKyNkZWZpbmUgUUxDTklDX0RVTVBfV0NSQglCSVRfMAorI2RlZmluZSBRTENOSUNfRFVNUF9SV0NSQglCSVRfMQorI2RlZmluZSBRTENOSUNfRFVNUF9BTkRDUkIJQklUXzIKKyNkZWZpbmUgUUxDTklDX0RVTVBfT1JDUkIJQklUXzMKKyNkZWZpbmUgUUxDTklDX0RVTVBfUE9MTENSQglCSVRfNAorI2RlZmluZSBRTENOSUNfRFVNUF9SRF9TQVZFCUJJVF81CisjZGVmaW5lIFFMQ05JQ19EVU1QX1dSVF9TQVZFRAlCSVRfNgorI2RlZmluZSBRTENOSUNfRFVNUF9NT0RfU0FWRV9TVAlCSVRfNworI2RlZmluZSBRTENOSUNfRFVNUF9TS0lQCUJJVF83CisKKyNkZWZpbmUgUUxDTklDX0RVTVBfTUFTS19NSU4JCTMKKyNkZWZpbmUgUUxDTklDX0RVTVBfTUFTS19ERUYJCTB4MGYKKyNkZWZpbmUgUUxDTklDX0RVTVBfTUFTS19NQVgJCTB4ZmYKKyNkZWZpbmUgUUxDTklDX0ZPUkNFX0ZXX0RVTVBfS0VZCTB4ZGVhZGZlZWQKKworc3RydWN0IHFsY25pY19kdW1wX29wZXJhdGlvbnMgeworCWVudW0gb3BfY29kZXMgb3Bjb2RlOworCXUzMiAoKmhhbmRsZXIpKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqLAorCQkJc3RydWN0IHFsY25pY19kdW1wX2VudHJ5ICosIHUzMiAqKTsKK307CisKK2ludCBxbGNuaWNfZndfY21kX2dldF9taW5pZHVtcF90ZW1wKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7CitpbnQgcWxjbmljX2Z3X2NtZF9zZXRfcG9ydChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBjb25maWcpOwogCiB1MzIgcWxjbmljX2h3X3JlYWRfd3hfMk0oc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1bG9uZyBvZmYpOwogaW50IHFsY25pY19od193cml0ZV93eF8yTShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKiwgdWxvbmcgb2ZmLCB1MzIgZGF0YSk7CkBAIC0xMjY0LDYgKzEzNzUsNyBAQAogaW50IHFsY25pY19jb25maWdfbGVkKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgdTMyIHN0YXRlLCB1MzIgcmF0ZSk7CiB2b2lkIHFsY25pY19wcnVuZV9sYl9maWx0ZXJzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIHFsY25pY19kZWxldGVfbGJfZmlsdGVycyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50IHFsY25pY19kdW1wX2Z3KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqKTsKIAogLyogRnVuY3Rpb25zIGZyb20gcWxjbmljX2luaXQuYyAqLwogaW50IHFsY25pY19sb2FkX2Zpcm13YXJlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7CkBAIC0xMjc0LDcgKzEzODYsNyBAQAogaW50IHFsY25pY19zZXR1cF9pZGNfcGFyYW0oc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKTsKIGludCBxbGNuaWNfY2hlY2tfZmxhc2hfZndfdmVyKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7CiAKLWludCBxbGNuaWNfcm9tX2Zhc3RfcmVhZChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyLCBpbnQgKnZhbHApOworaW50IHFsY25pY19yb21fZmFzdF9yZWFkKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgdTMyIGFkZHIsIHUzMiAqdmFscCk7CiBpbnQgcWxjbmljX3JvbV9mYXN0X3JlYWRfd29yZHMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwKIAkJCQl1OCAqYnl0ZXMsIHNpemVfdCBzaXplKTsKIGludCBxbGNuaWNfYWxsb2Nfc3dfcmVzb3VyY2VzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7CkBAIC0xMjk0LDcgKzE0MDYsNyBAQAogCiBpbnQgcWxjbmljX2NoZWNrX2Z3X3N0YXR1cyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCBxbGNuaWNfd2F0Y2hkb2dfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotdm9pZCBxbGNuaWNfcG9zdF9yeF9idWZmZXJzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgdTMyIHJpbmdpZCwKK3ZvaWQgcWxjbmljX3Bvc3RfcnhfYnVmZmVycyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCXN0cnVjdCBxbGNuaWNfaG9zdF9yZHNfcmluZyAqcmRzX3JpbmcpOwogaW50IHFsY25pY19wcm9jZXNzX3Jjdl9yaW5nKHN0cnVjdCBxbGNuaWNfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmcsIGludCBtYXgpOwogdm9pZCBxbGNuaWNfc2V0X211bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwpAQCAtMTMwOCw2ICsxNDIwLDggQEAKIAogaW50IHFsY25pY19md19jbWRfc2V0X210dShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBtdHUpOwogaW50IHFsY25pY19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBuZXdfbXR1KTsKK3UzMiBxbGNuaWNfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBmZWF0dXJlcyk7CitpbnQgcWxjbmljX3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZmVhdHVyZXMpOwogaW50IHFsY25pY19jb25maWdfaHdfbHJvKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgaW50IGVuYWJsZSk7CiBpbnQgcWxjbmljX2NvbmZpZ19icmlkZ2VkX21vZGUoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1MzIgZW5hYmxlKTsKIGludCBxbGNuaWNfc2VuZF9scm9fY2xlYW51cChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOwpAQCAtMTMyMiw2ICsxNDM2LDkgQEAKIHZvaWQgcWxjbmljX2RpYWdfZnJlZV9yZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG1heF9zZHNfcmluZ3MpOwogaW50IHFsY25pY19kaWFnX2FsbG9jX3JlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdGVzdCk7CiBuZXRkZXZfdHhfdCBxbGNuaWNfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK2ludCBxbGNuaWNfdmFsaWRhdGVfbWF4X3JzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1OCBtYXhfaHcsIHU4IHZhbCk7CitpbnQgcWxjbmljX3NldF9tYXhfcnNzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgdTggZGF0YSk7Cit2b2lkIHFsY25pY19kZXZfcmVxdWVzdF9yZXNldChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKik7CiAKIC8qIE1hbmFnZW1lbnQgZnVuY3Rpb25zICovCiBpbnQgcWxjbmljX2dldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKiwgdTgqKTsKQEAgLTEzNzksOCArMTQ5Niw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdTMyIHFsY25pY190eF9hdmFpbChzdHJ1Y3QgcWxjbmljX2hvc3RfdHhfcmluZyAqdHhfcmluZykKIHsKLQlzbXBfbWIoKTsKLQlpZiAodHhfcmluZy0+cHJvZHVjZXIgPCB0eF9yaW5nLT5zd19jb25zdW1lcikKKwlpZiAobGlrZWx5KHR4X3JpbmctPnByb2R1Y2VyIDwgdHhfcmluZy0+c3dfY29uc3VtZXIpKQogCQlyZXR1cm4gdHhfcmluZy0+c3dfY29uc3VtZXIgLSB0eF9yaW5nLT5wcm9kdWNlcjsKIAllbHNlCiAJCXJldHVybiB0eF9yaW5nLT5zd19jb25zdW1lciArIHR4X3JpbmctPm51bV9kZXNjIC0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfY3R4LmMgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2N0eC5jCmluZGV4IDI3NjMxZjIuLmJhYjA0MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfY3R4LmMKKysrIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19jdHguYwpAQCAtNjQsMTQgKzY0LDEwNSBAQAogCXJldHVybiByY29kZTsKIH0KIAorc3RhdGljIHVpbnQzMl90IHFsY25pY190ZW1wX2NoZWNrc3VtKHVpbnQzMl90ICp0ZW1wX2J1ZmZlciwgdTE2IHRlbXBfc2l6ZSkKK3sKKwl1aW50NjRfdCBzdW0gPSAwOworCWludCBjb3VudCA9IHRlbXBfc2l6ZSAvIHNpemVvZih1aW50MzJfdCk7CisJd2hpbGUgKGNvdW50LS0gPiAwKQorCQlzdW0gKz0gKnRlbXBfYnVmZmVyKys7CisJd2hpbGUgKHN1bSA+PiAzMikKKwkJc3VtID0gKHN1bSAmIDB4RkZGRkZGRkYpICsgKHN1bSA+PiAzMik7CisJcmV0dXJuIH5zdW07Cit9CisKK2ludCBxbGNuaWNfZndfY21kX2dldF9taW5pZHVtcF90ZW1wKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgZXJyLCBpOworCXUxNiB0ZW1wX3NpemU7CisJdm9pZCAqdG1wX2FkZHI7CisJdTMyIHZlcnNpb24sIGNzdW0sICp0ZW1wbGF0ZSwgKnRtcF9idWY7CisJc3RydWN0IHFsY25pY19oYXJkd2FyZV9jb250ZXh0ICphaHc7CisJc3RydWN0IHFsY25pY19kdW1wX3RlbXBsYXRlX2hkciAqdG1wbF9oZHIsICp0bXBfdG1wbDsKKwlkbWFfYWRkcl90IHRtcF9hZGRyX3QgPSAwOworCisJYWh3ID0gYWRhcHRlci0+YWh3OworCWVyciA9IHFsY25pY19pc3N1ZV9jbWQoYWRhcHRlciwKKwkJCWFkYXB0ZXItPmFody0+cGNpX2Z1bmMsCisJCQlhZGFwdGVyLT5md19oYWxfdmVyc2lvbiwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCVFMQ05JQ19DRFJQX0NNRF9URU1QX1NJWkUpOworCWlmIChlcnIgIT0gUUxDTklDX1JDT0RFX1NVQ0NFU1MpIHsKKwkJZXJyID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfQVJHMV9DUkJfT0ZGU0VUKTsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJIkZhaWxlZCB0byBnZXQgdGVtcGxhdGUgc2l6ZSAlZFxuIiwgZXJyKTsKKwkJZXJyID0gLUVJTzsKKwkJcmV0dXJuIGVycjsKKwl9CisJdmVyc2lvbiA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX0FSRzNfQ1JCX09GRlNFVCk7CisJdGVtcF9zaXplID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfQVJHMl9DUkJfT0ZGU0VUKTsKKwlpZiAoIXRlbXBfc2l6ZSkKKwkJcmV0dXJuIC1FSU87CisKKwl0bXBfYWRkciA9IGRtYV9hbGxvY19jb2hlcmVudCgmYWRhcHRlci0+cGRldi0+ZGV2LCB0ZW1wX3NpemUsCisJCQkmdG1wX2FkZHJfdCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0bXBfYWRkcikgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkiQ2FuJ3QgZ2V0IG1lbW9yeSBmb3IgRlcgZHVtcCB0ZW1wbGF0ZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwllcnIgPSBxbGNuaWNfaXNzdWVfY21kKGFkYXB0ZXIsCisJCWFkYXB0ZXItPmFody0+cGNpX2Z1bmMsCisJCWFkYXB0ZXItPmZ3X2hhbF92ZXJzaW9uLAorCQlMU0QodG1wX2FkZHJfdCksCisJCU1TRCh0bXBfYWRkcl90KSwKKwkJdGVtcF9zaXplLAorCQlRTENOSUNfQ0RSUF9DTURfR0VUX1RFTVBfSERSKTsKKworCWlmIChlcnIgIT0gUUxDTklDX1JDT0RFX1NVQ0NFU1MpIHsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJIkZhaWxlZCB0byBnZXQgbWluaSBkdW1wIHRlbXBsYXRlIGhlYWRlciAlZFxuIiwgZXJyKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBlcnJvcjsKKwl9CisJdG1wX3RtcGwgPSAoc3RydWN0IHFsY25pY19kdW1wX3RlbXBsYXRlX2hkciAqKSB0bXBfYWRkcjsKKwljc3VtID0gcWxjbmljX3RlbXBfY2hlY2tzdW0oKHVpbnQzMl90ICopIHRtcF9hZGRyLCB0ZW1wX3NpemUpOworCWlmIChjc3VtKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJUZW1wbGF0ZSBoZWFkZXIgY2hlY2tzdW0gdmFsaWRhdGlvbiBmYWlsZWRcbiIpOworCQllcnIgPSAtRUlPOworCQlnb3RvIGVycm9yOworCX0KKwlhaHctPmZ3X2R1bXAudG1wbF9oZHIgPSB2emFsbG9jKHRlbXBfc2l6ZSk7CisJaWYgKCFhaHctPmZ3X2R1bXAudG1wbF9oZHIpIHsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBlcnJvcjsKKwl9CisJdG1wX2J1ZiA9ICh1MzIgKikgdG1wX2FkZHI7CisJdGVtcGxhdGUgPSAodTMyICopIGFody0+ZndfZHVtcC50bXBsX2hkcjsKKwlmb3IgKGkgPSAwOyBpIDwgdGVtcF9zaXplL3NpemVvZih1MzIpOyBpKyspCisJCSp0ZW1wbGF0ZSsrID0gX19sZTMyX3RvX2NwdSgqdG1wX2J1ZisrKTsKKworCXRtcGxfaGRyID0gYWh3LT5md19kdW1wLnRtcGxfaGRyOworCWlmICh0bXBsX2hkci0+Y2FwX21hc2sgPiBRTENOSUNfRFVNUF9NQVNLX0RFRiAmJgorCQl0bXBsX2hkci0+Y2FwX21hc2sgPD0gUUxDTklDX0RVTVBfTUFTS19NQVgpCisJCXRtcGxfaGRyLT5kcnZfY2FwX21hc2sgPSB0bXBsX2hkci0+Y2FwX21hc2s7CisJZWxzZQorCQl0bXBsX2hkci0+ZHJ2X2NhcF9tYXNrID0gUUxDTklDX0RVTVBfTUFTS19ERUY7CitlcnJvcjoKKwlkbWFfZnJlZV9jb2hlcmVudCgmYWRhcHRlci0+cGRldi0+ZGV2LCB0ZW1wX3NpemUsIHRtcF9hZGRyLCB0bXBfYWRkcl90KTsKKwlyZXR1cm4gZXJyOworfQorCiBpbnQKIHFsY25pY19md19jbWRfc2V0X210dShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBtdHUpCiB7Ci0Jc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9IGFkYXB0ZXItPnJlY3ZfY3R4OwogCiAJaWYgKHJlY3ZfY3R4LT5zdGF0ZSA9PSBRTENOSUNfSE9TVF9DVFhfU1RBVEVfQUNUSVZFKSB7CiAJCWlmIChxbGNuaWNfaXNzdWVfY21kKGFkYXB0ZXIsCi0JCQlhZGFwdGVyLT5haHcucGNpX2Z1bmMsCisJCQlhZGFwdGVyLT5haHctPnBjaV9mdW5jLAogCQkJYWRhcHRlci0+ZndfaGFsX3ZlcnNpb24sCiAJCQlyZWN2X2N0eC0+Y29udGV4dF9pZCwKIAkJCW10dSwKQEAgLTEwMiwxMiArMTkzLDEyIEBACiAJZG1hX2FkZHJfdCBob3N0cnFfcGh5c19hZGRyLCBjYXJkcnNwX3BoeXNfYWRkcjsKIAl1NjQgcGh5c19hZGRyOwogCi0JaW50IGksIG5yZHNfcmluZ3MsIG5zZHNfcmluZ3M7CisJdTggaSwgbnJkc19yaW5ncywgbnNkc19yaW5nczsKIAlzaXplX3QgcnFfc2l6ZSwgcnNwX3NpemU7CiAJdTMyIGNhcCwgcmVnLCB2YWwsIHJlZzI7CiAJaW50IGVycjsKIAotCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKwlzdHJ1Y3QgcWxjbmljX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSBhZGFwdGVyLT5yZWN2X2N0eDsKIAogCW5yZHNfcmluZ3MgPSBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOwogCW5zZHNfcmluZ3MgPSBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOwpAQCAtMTE5LDE0ICsyMTAsMTQgQEAKIAkJU0laRU9GX0NBUkRSU1BfUlgoc3RydWN0IHFsY25pY19jYXJkcnNwX3J4X2N0eCwgbnJkc19yaW5ncywKIAkJCQkJCW5zZHNfcmluZ3MpOwogCi0JYWRkciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCi0JCQkJcnFfc2l6ZSwgJmhvc3RycV9waHlzX2FkZHIpOworCWFkZHIgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmFkYXB0ZXItPnBkZXYtPmRldiwgcnFfc2l6ZSwKKwkJCSZob3N0cnFfcGh5c19hZGRyLCBHRlBfS0VSTkVMKTsKIAlpZiAoYWRkciA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAlwcnEgPSAoc3RydWN0IHFsY25pY19ob3N0cnFfcnhfY3R4ICopYWRkcjsKIAotCWFkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAotCQkJcnNwX3NpemUsICZjYXJkcnNwX3BoeXNfYWRkcik7CisJYWRkciA9IGRtYV9hbGxvY19jb2hlcmVudCgmYWRhcHRlci0+cGRldi0+ZGV2LCByc3Bfc2l6ZSwKKwkJCSZjYXJkcnNwX3BoeXNfYWRkciwgR0ZQX0tFUk5FTCk7CiAJaWYgKGFkZHIgPT0gTlVMTCkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9mcmVlX3JxOwpAQCAtMTUxLDcgKzI0Miw3IEBACiAKIAlwcnEtPm51bV9yZHNfcmluZ3MgPSBjcHVfdG9fbGUxNihucmRzX3JpbmdzKTsKIAlwcnEtPm51bV9zZHNfcmluZ3MgPSBjcHVfdG9fbGUxNihuc2RzX3JpbmdzKTsKLQlwcnEtPnJkc19yaW5nX29mZnNldCA9IGNwdV90b19sZTMyKDApOworCXBycS0+cmRzX3Jpbmdfb2Zmc2V0ID0gMDsKIAogCXZhbCA9IGxlMzJfdG9fY3B1KHBycS0+cmRzX3Jpbmdfb2Zmc2V0KSArCiAJCShzaXplb2Yoc3RydWN0IHFsY25pY19ob3N0cnFfcmRzX3JpbmcpICogbnJkc19yaW5ncyk7CkBAIC0xODcsNyArMjc4LDcgQEAKIAogCXBoeXNfYWRkciA9IGhvc3RycV9waHlzX2FkZHI7CiAJZXJyID0gcWxjbmljX2lzc3VlX2NtZChhZGFwdGVyLAotCQkJYWRhcHRlci0+YWh3LnBjaV9mdW5jLAorCQkJYWRhcHRlci0+YWh3LT5wY2lfZnVuYywKIAkJCWFkYXB0ZXItPmZ3X2hhbF92ZXJzaW9uLAogCQkJKHUzMikocGh5c19hZGRyID4+IDMyKSwKIAkJCSh1MzIpKHBoeXNfYWRkciAmIDB4ZmZmZmZmZmYpLApAQCAtMjA3LDcgKzI5OCw3IEBACiAJCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbaV07CiAKIAkJcmVnID0gbGUzMl90b19jcHUocHJzcF9yZHNbaV0uaG9zdF9wcm9kdWNlcl9jcmIpOwotCQlyZHNfcmluZy0+Y3JiX3Jjdl9wcm9kdWNlciA9IGFkYXB0ZXItPmFody5wY2lfYmFzZTAgKyByZWc7CisJCXJkc19yaW5nLT5jcmJfcmN2X3Byb2R1Y2VyID0gYWRhcHRlci0+YWh3LT5wY2lfYmFzZTAgKyByZWc7CiAJfQogCiAJcHJzcF9zZHMgPSAoKHN0cnVjdCBxbGNuaWNfY2FyZHJzcF9zZHNfcmluZyAqKQpAQCAtMjE5LDggKzMxMCw4IEBACiAJCXJlZyA9IGxlMzJfdG9fY3B1KHByc3Bfc2RzW2ldLmhvc3RfY29uc3VtZXJfY3JiKTsKIAkJcmVnMiA9IGxlMzJfdG9fY3B1KHByc3Bfc2RzW2ldLmludGVycnVwdF9jcmIpOwogCi0JCXNkc19yaW5nLT5jcmJfc3RzX2NvbnN1bWVyID0gYWRhcHRlci0+YWh3LnBjaV9iYXNlMCArIHJlZzsKLQkJc2RzX3JpbmctPmNyYl9pbnRyX21hc2sgPSBhZGFwdGVyLT5haHcucGNpX2Jhc2UwICsgcmVnMjsKKwkJc2RzX3JpbmctPmNyYl9zdHNfY29uc3VtZXIgPSBhZGFwdGVyLT5haHctPnBjaV9iYXNlMCArIHJlZzsKKwkJc2RzX3JpbmctPmNyYl9pbnRyX21hc2sgPSBhZGFwdGVyLT5haHctPnBjaV9iYXNlMCArIHJlZzI7CiAJfQogCiAJcmVjdl9jdHgtPnN0YXRlID0gbGUzMl90b19jcHUocHJzcC0+aG9zdF9jdHhfc3RhdGUpOwpAQCAtMjI4LDE5ICszMTksMjAgQEAKIAlyZWN2X2N0eC0+dmlydF9wb3J0ID0gcHJzcC0+dmlydF9wb3J0OwogCiBvdXRfZnJlZV9yc3A6Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCByc3Bfc2l6ZSwgcHJzcCwgY2FyZHJzcF9waHlzX2FkZHIpOworCWRtYV9mcmVlX2NvaGVyZW50KCZhZGFwdGVyLT5wZGV2LT5kZXYsIHJzcF9zaXplLCBwcnNwLAorCQljYXJkcnNwX3BoeXNfYWRkcik7CiBvdXRfZnJlZV9ycToKLQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHJxX3NpemUsIHBycSwgaG9zdHJxX3BoeXNfYWRkcik7CisJZG1hX2ZyZWVfY29oZXJlbnQoJmFkYXB0ZXItPnBkZXYtPmRldiwgcnFfc2l6ZSwgcHJxLCBob3N0cnFfcGh5c19hZGRyKTsKIAlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZAogcWxjbmljX2Z3X2NtZF9kZXN0cm95X3J4X2N0eChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9IGFkYXB0ZXItPnJlY3ZfY3R4OwogCiAJaWYgKHFsY25pY19pc3N1ZV9jbWQoYWRhcHRlciwKLQkJCWFkYXB0ZXItPmFody5wY2lfZnVuYywKKwkJCWFkYXB0ZXItPmFody0+cGNpX2Z1bmMsCiAJCQlhZGFwdGVyLT5md19oYWxfdmVyc2lvbiwKIAkJCXJlY3ZfY3R4LT5jb250ZXh0X2lkLAogCQkJUUxDTklDX0RFU1RST1lfQ1RYX1JFU0VULApAQCAtMjc0LDE0ICszNjYsMTQgQEAKIAkqKHR4X3JpbmctPmh3X2NvbnN1bWVyKSA9IDA7CiAKIAlycV9zaXplID0gU0laRU9GX0hPU1RSUV9UWChzdHJ1Y3QgcWxjbmljX2hvc3RycV90eF9jdHgpOwotCXJxX2FkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAotCQlycV9zaXplLCAmcnFfcGh5c19hZGRyKTsKKwlycV9hZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KCZhZGFwdGVyLT5wZGV2LT5kZXYsIHJxX3NpemUsCisJCQkmcnFfcGh5c19hZGRyLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXJxX2FkZHIpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJcnNwX3NpemUgPSBTSVpFT0ZfQ0FSRFJTUF9UWChzdHJ1Y3QgcWxjbmljX2NhcmRyc3BfdHhfY3R4KTsKLQlyc3BfYWRkciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCi0JCXJzcF9zaXplLCAmcnNwX3BoeXNfYWRkcik7CisJcnNwX2FkZHIgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmFkYXB0ZXItPnBkZXYtPmRldiwgcnNwX3NpemUsCisJCQkmcnNwX3BoeXNfYWRkciwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyc3BfYWRkcikgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9mcmVlX3JxOwpAQCAtMzEzLDcgKzQwNSw3IEBACiAKIAlwaHlzX2FkZHIgPSBycV9waHlzX2FkZHI7CiAJZXJyID0gcWxjbmljX2lzc3VlX2NtZChhZGFwdGVyLAotCQkJYWRhcHRlci0+YWh3LnBjaV9mdW5jLAorCQkJYWRhcHRlci0+YWh3LT5wY2lfZnVuYywKIAkJCWFkYXB0ZXItPmZ3X2hhbF92ZXJzaW9uLAogCQkJKHUzMikocGh5c19hZGRyID4+IDMyKSwKIAkJCSgodTMyKXBoeXNfYWRkciAmIDB4ZmZmZmZmZmYpLApAQCAtMzIyLDcgKzQxNCw3IEBACiAKIAlpZiAoZXJyID09IFFMQ05JQ19SQ09ERV9TVUNDRVNTKSB7CiAJCXRlbXAgPSBsZTMyX3RvX2NwdShwcnNwLT5jZHNfcmluZy5ob3N0X3Byb2R1Y2VyX2NyYik7Ci0JCXR4X3JpbmctPmNyYl9jbWRfcHJvZHVjZXIgPSBhZGFwdGVyLT5haHcucGNpX2Jhc2UwICsgdGVtcDsKKwkJdHhfcmluZy0+Y3JiX2NtZF9wcm9kdWNlciA9IGFkYXB0ZXItPmFody0+cGNpX2Jhc2UwICsgdGVtcDsKIAogCQlhZGFwdGVyLT50eF9jb250ZXh0X2lkID0KIAkJCWxlMTZfdG9fY3B1KHByc3AtPmNvbnRleHRfaWQpOwpAQCAtMzMyLDEwICs0MjQsMTEgQEAKIAkJZXJyID0gLUVJTzsKIAl9CiAKLQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHJzcF9zaXplLCByc3BfYWRkciwgcnNwX3BoeXNfYWRkcik7CisJZG1hX2ZyZWVfY29oZXJlbnQoJmFkYXB0ZXItPnBkZXYtPmRldiwgcnNwX3NpemUsIHJzcF9hZGRyLAorCQlyc3BfcGh5c19hZGRyKTsKIAogb3V0X2ZyZWVfcnE6Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBycV9zaXplLCBycV9hZGRyLCBycV9waHlzX2FkZHIpOworCWRtYV9mcmVlX2NvaGVyZW50KCZhZGFwdGVyLT5wZGV2LT5kZXYsIHJxX3NpemUsIHJxX2FkZHIsIHJxX3BoeXNfYWRkcik7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtMzQ0LDcgKzQzNyw3IEBACiBxbGNuaWNfZndfY21kX2Rlc3Ryb3lfdHhfY3R4KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpZiAocWxjbmljX2lzc3VlX2NtZChhZGFwdGVyLAotCQkJYWRhcHRlci0+YWh3LnBjaV9mdW5jLAorCQkJYWRhcHRlci0+YWh3LT5wY2lfZnVuYywKIAkJCWFkYXB0ZXItPmZ3X2hhbF92ZXJzaW9uLAogCQkJYWRhcHRlci0+dHhfY29udGV4dF9pZCwKIAkJCVFMQ05JQ19ERVNUUk9ZX0NUWF9SRVNFVCwKQEAgLTM1NywzMyArNDUwLDE1IEBACiB9CiAKIGludAotcWxjbmljX2Z3X2NtZF9xdWVyeV9waHkoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1MzIgcmVnLCB1MzIgKnZhbCkKLXsKLQotCWlmIChxbGNuaWNfaXNzdWVfY21kKGFkYXB0ZXIsCi0JCQlhZGFwdGVyLT5haHcucGNpX2Z1bmMsCi0JCQlhZGFwdGVyLT5md19oYWxfdmVyc2lvbiwKLQkJCXJlZywKLQkJCTAsCi0JCQkwLAotCQkJUUxDTklDX0NEUlBfQ01EX1JFQURfUEhZKSkgewotCi0JCXJldHVybiAtRUlPOwotCX0KLQotCXJldHVybiBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19BUkcxX0NSQl9PRkZTRVQpOwotfQotCi1pbnQKLXFsY25pY19md19jbWRfc2V0X3BoeShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiByZWcsIHUzMiB2YWwpCitxbGNuaWNfZndfY21kX3NldF9wb3J0KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgdTMyIGNvbmZpZykKIHsKIAlyZXR1cm4gcWxjbmljX2lzc3VlX2NtZChhZGFwdGVyLAotCQkJYWRhcHRlci0+YWh3LnBjaV9mdW5jLAorCQkJYWRhcHRlci0+YWh3LT5wY2lfZnVuYywKIAkJCWFkYXB0ZXItPmZ3X2hhbF92ZXJzaW9uLAotCQkJcmVnLAotCQkJdmFsLAorCQkJY29uZmlnLAogCQkJMCwKLQkJCVFMQ05JQ19DRFJQX0NNRF9XUklURV9QSFkpOworCQkJMCwKKwkJCVFMQ05JQ19DRFJQX0NNRF9DT05GSUdfUE9SVCk7CiB9CiAKIGludCBxbGNuaWNfYWxsb2NfaHdfcmVzb3VyY2VzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKQEAgLTM5OCwyMCArNDczLDE5IEBACiAKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CiAKLQlyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKwlyZWN2X2N0eCA9IGFkYXB0ZXItPnJlY3ZfY3R4OwogCXR4X3JpbmcgPSBhZGFwdGVyLT50eF9yaW5nOwogCi0JdHhfcmluZy0+aHdfY29uc3VtZXIgPSAoX19sZTMyICopcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgc2l6ZW9mKHUzMiksCi0JCQkJCQkmdHhfcmluZy0+aHdfY29uc19waHlzX2FkZHIpOworCXR4X3JpbmctPmh3X2NvbnN1bWVyID0gKF9fbGUzMiAqKSBkbWFfYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwKKwkJc2l6ZW9mKHUzMiksICZ0eF9yaW5nLT5od19jb25zX3BoeXNfYWRkciwgR0ZQX0tFUk5FTCk7CiAJaWYgKHR4X3JpbmctPmh3X2NvbnN1bWVyID09IE5VTEwpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIHR4IGNvbnN1bWVyXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCSoodHhfcmluZy0+aHdfY29uc3VtZXIpID0gMDsKIAogCS8qIGNtZCBkZXNjIHJpbmcgKi8KLQlhZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgVFhfREVTQ19SSU5HU0laRSh0eF9yaW5nKSwKLQkJCSZ0eF9yaW5nLT5waHlzX2FkZHIpOworCWFkZHIgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwgVFhfREVTQ19SSU5HU0laRSh0eF9yaW5nKSwKKwkJCSZ0eF9yaW5nLT5waHlzX2FkZHIsIEdGUF9LRVJORUwpOwogCiAJaWYgKGFkZHIgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgdHggZGVzYyByaW5nXG4iKTsKQEAgLTQyMyw5ICs0OTcsOSBAQAogCiAJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgewogCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOwotCQlhZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJYWRkciA9IGRtYV9hbGxvY19jb2hlcmVudCgmYWRhcHRlci0+cGRldi0+ZGV2LAogCQkJCVJDVl9ERVNDX1JJTkdTSVpFKHJkc19yaW5nKSwKLQkJCQkmcmRzX3JpbmctPnBoeXNfYWRkcik7CisJCQkJJnJkc19yaW5nLT5waHlzX2FkZHIsIEdGUF9LRVJORUwpOwogCQlpZiAoYWRkciA9PSBOVUxMKSB7CiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCiAJCQkJImZhaWxlZCB0byBhbGxvY2F0ZSByZHMgcmluZyBbJWRdXG4iLCByaW5nKTsKQEAgLTQzOSw5ICs1MTMsOSBAQAogCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOyByaW5nKyspIHsKIAkJc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1tyaW5nXTsKIAotCQlhZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJYWRkciA9IGRtYV9hbGxvY19jb2hlcmVudCgmYWRhcHRlci0+cGRldi0+ZGV2LAogCQkJCVNUQVRVU19ERVNDX1JJTkdTSVpFKHNkc19yaW5nKSwKLQkJCQkmc2RzX3JpbmctPnBoeXNfYWRkcik7CisJCQkJJnNkc19yaW5nLT5waHlzX2FkZHIsIEdGUF9LRVJORUwpOwogCQlpZiAoYWRkciA9PSBOVUxMKSB7CiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCiAJCQkJImZhaWxlZCB0byBhbGxvY2F0ZSBzZHMgcmluZyBbJWRdXG4iLCByaW5nKTsKQEAgLTUwMSwxMSArNTc1LDExIEBACiAJc3RydWN0IHFsY25pY19ob3N0X3R4X3JpbmcgKnR4X3Jpbmc7CiAJaW50IHJpbmc7CiAKLQlyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKwlyZWN2X2N0eCA9IGFkYXB0ZXItPnJlY3ZfY3R4OwogCiAJdHhfcmluZyA9IGFkYXB0ZXItPnR4X3Jpbmc7CiAJaWYgKHR4X3JpbmctPmh3X2NvbnN1bWVyICE9IE5VTEwpIHsKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQlkbWFfZnJlZV9jb2hlcmVudCgmYWRhcHRlci0+cGRldi0+ZGV2LAogCQkJCXNpemVvZih1MzIpLAogCQkJCXR4X3JpbmctPmh3X2NvbnN1bWVyLAogCQkJCXR4X3JpbmctPmh3X2NvbnNfcGh5c19hZGRyKTsKQEAgLTUxMyw3ICs1ODcsNyBAQAogCX0KIAogCWlmICh0eF9yaW5nLT5kZXNjX2hlYWQgIT0gTlVMTCkgewotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCWRtYV9mcmVlX2NvaGVyZW50KCZhZGFwdGVyLT5wZGV2LT5kZXYsCiAJCQkJVFhfREVTQ19SSU5HU0laRSh0eF9yaW5nKSwKIAkJCQl0eF9yaW5nLT5kZXNjX2hlYWQsIHR4X3JpbmctPnBoeXNfYWRkcik7CiAJCXR4X3JpbmctPmRlc2NfaGVhZCA9IE5VTEw7CkBAIC01MjMsNyArNTk3LDcgQEAKIAkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKIAogCQlpZiAocmRzX3JpbmctPmRlc2NfaGVhZCAhPSBOVUxMKSB7Ci0JCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQlkbWFfZnJlZV9jb2hlcmVudCgmYWRhcHRlci0+cGRldi0+ZGV2LAogCQkJCQlSQ1ZfREVTQ19SSU5HU0laRShyZHNfcmluZyksCiAJCQkJCXJkc19yaW5nLT5kZXNjX2hlYWQsCiAJCQkJCXJkc19yaW5nLT5waHlzX2FkZHIpOwpAQCAtNTM1LDcgKzYwOSw3IEBACiAJCXNkc19yaW5nID0gJnJlY3ZfY3R4LT5zZHNfcmluZ3NbcmluZ107CiAKIAkJaWYgKHNkc19yaW5nLT5kZXNjX2hlYWQgIT0gTlVMTCkgewotCQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJZG1hX2ZyZWVfY29oZXJlbnQoJmFkYXB0ZXItPnBkZXYtPmRldiwKIAkJCQlTVEFUVVNfREVTQ19SSU5HU0laRShzZHNfcmluZyksCiAJCQkJc2RzX3JpbmctPmRlc2NfaGVhZCwKIAkJCQlzZHNfcmluZy0+cGh5c19hZGRyKTsKQEAgLTU1MSw5ICs2MjUsOSBAQAogCWludCBlcnI7CiAJdTMyIGFyZzE7CiAKLQlhcmcxID0gYWRhcHRlci0+YWh3LnBjaV9mdW5jIHwgQklUXzg7CisJYXJnMSA9IGFkYXB0ZXItPmFody0+cGNpX2Z1bmMgfCBCSVRfODsKIAllcnIgPSBxbGNuaWNfaXNzdWVfY21kKGFkYXB0ZXIsCi0JCQlhZGFwdGVyLT5haHcucGNpX2Z1bmMsCisJCQlhZGFwdGVyLT5haHctPnBjaV9mdW5jLAogCQkJYWRhcHRlci0+ZndfaGFsX3ZlcnNpb24sCiAJCQlhcmcxLAogCQkJMCwKQEAgLTU4MiwxNSArNjU2LDE1IEBACiAJdm9pZCAqbmljX2luZm9fYWRkcjsKIAlzaXplX3QJbmljX3NpemUgPSBzaXplb2Yoc3RydWN0IHFsY25pY19pbmZvKTsKIAotCW5pY19pbmZvX2FkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAotCQluaWNfc2l6ZSwgJm5pY19kbWFfdCk7CisJbmljX2luZm9fYWRkciA9IGRtYV9hbGxvY19jb2hlcmVudCgmYWRhcHRlci0+cGRldi0+ZGV2LCBuaWNfc2l6ZSwKKwkJCQkmbmljX2RtYV90LCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5pY19pbmZvX2FkZHIpCiAJCXJldHVybiAtRU5PTUVNOwogCW1lbXNldChuaWNfaW5mb19hZGRyLCAwLCBuaWNfc2l6ZSk7CiAKIAluaWNfaW5mbyA9IChzdHJ1Y3QgcWxjbmljX2luZm8gKikgbmljX2luZm9fYWRkcjsKIAllcnIgPSBxbGNuaWNfaXNzdWVfY21kKGFkYXB0ZXIsCi0JCQlhZGFwdGVyLT5haHcucGNpX2Z1bmMsCisJCQlhZGFwdGVyLT5haHctPnBjaV9mdW5jLAogCQkJYWRhcHRlci0+ZndfaGFsX3ZlcnNpb24sCiAJCQlNU0QobmljX2RtYV90KSwKIAkJCUxTRChuaWNfZG1hX3QpLApAQCAtNjIzLDcgKzY5Nyw4IEBACiAJCWVyciA9IC1FSU87CiAJfQogCi0JcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBuaWNfc2l6ZSwgbmljX2luZm9fYWRkciwgbmljX2RtYV90KTsKKwlkbWFfZnJlZV9jb2hlcmVudCgmYWRhcHRlci0+cGRldi0+ZGV2LCBuaWNfc2l6ZSwgbmljX2luZm9fYWRkciwKKwkJbmljX2RtYV90KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC02MzksOCArNzE0LDggQEAKIAlpZiAoYWRhcHRlci0+b3BfbW9kZSAhPSBRTENOSUNfTUdNVF9GVU5DKQogCQlyZXR1cm4gZXJyOwogCi0JbmljX2luZm9fYWRkciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIG5pY19zaXplLAotCQkJJm5pY19kbWFfdCk7CisJbmljX2luZm9fYWRkciA9IGRtYV9hbGxvY19jb2hlcmVudCgmYWRhcHRlci0+cGRldi0+ZGV2LCBuaWNfc2l6ZSwKKwkJCSZuaWNfZG1hX3QsIEdGUF9LRVJORUwpOwogCWlmICghbmljX2luZm9fYWRkcikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTY1OSw3ICs3MzQsNyBAQAogCW5pY19pbmZvLT5tYXhfdHhfYncgPSBjcHVfdG9fbGUxNihuaWMtPm1heF90eF9idyk7CiAKIAllcnIgPSBxbGNuaWNfaXNzdWVfY21kKGFkYXB0ZXIsCi0JCQlhZGFwdGVyLT5haHcucGNpX2Z1bmMsCisJCQlhZGFwdGVyLT5haHctPnBjaV9mdW5jLAogCQkJYWRhcHRlci0+ZndfaGFsX3ZlcnNpb24sCiAJCQlNU0QobmljX2RtYV90KSwKIAkJCUxTRChuaWNfZG1hX3QpLApAQCAtNjcyLDcgKzc0Nyw4IEBACiAJCWVyciA9IC1FSU87CiAJfQogCi0JcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBuaWNfc2l6ZSwgbmljX2luZm9fYWRkciwgbmljX2RtYV90KTsKKwlkbWFfZnJlZV9jb2hlcmVudCgmYWRhcHRlci0+cGRldi0+ZGV2LCBuaWNfc2l6ZSwgbmljX2luZm9fYWRkciwKKwkJbmljX2RtYV90KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC02ODcsMTUgKzc2MywxNSBAQAogCXNpemVfdCBucGFyX3NpemUgPSBzaXplb2Yoc3RydWN0IHFsY25pY19wY2lfaW5mbyk7CiAJc2l6ZV90IHBjaV9zaXplID0gbnBhcl9zaXplICogUUxDTklDX01BWF9QQ0lfRlVOQzsKIAotCXBjaV9pbmZvX2FkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBwY2lfc2l6ZSwKLQkJCSZwY2lfaW5mb19kbWFfdCk7CisJcGNpX2luZm9fYWRkciA9IGRtYV9hbGxvY19jb2hlcmVudCgmYWRhcHRlci0+cGRldi0+ZGV2LCBwY2lfc2l6ZSwKKwkJCSZwY2lfaW5mb19kbWFfdCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwY2lfaW5mb19hZGRyKQogCQlyZXR1cm4gLUVOT01FTTsKIAltZW1zZXQocGNpX2luZm9fYWRkciwgMCwgcGNpX3NpemUpOwogCiAJbnBhciA9IChzdHJ1Y3QgcWxjbmljX3BjaV9pbmZvICopIHBjaV9pbmZvX2FkZHI7CiAJZXJyID0gcWxjbmljX2lzc3VlX2NtZChhZGFwdGVyLAotCQkJYWRhcHRlci0+YWh3LnBjaV9mdW5jLAorCQkJYWRhcHRlci0+YWh3LT5wY2lfZnVuYywKIAkJCWFkYXB0ZXItPmZ3X2hhbF92ZXJzaW9uLAogCQkJTVNEKHBjaV9pbmZvX2RtYV90KSwKIAkJCUxTRChwY2lfaW5mb19kbWFfdCksCkBAIC03MjEsNyArNzk3LDcgQEAKIAkJZXJyID0gLUVJTzsKIAl9CiAKLQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHBjaV9zaXplLCBwY2lfaW5mb19hZGRyLAorCWRtYV9mcmVlX2NvaGVyZW50KCZhZGFwdGVyLT5wZGV2LT5kZXYsIHBjaV9zaXplLCBwY2lfaW5mb19hZGRyLAogCQlwY2lfaW5mb19kbWFfdCk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTc0MSw3ICs4MTcsNyBAQAogCWFyZzEgfD0gcGNpX2Z1bmMgPDwgODsKIAogCWVyciA9IHFsY25pY19pc3N1ZV9jbWQoYWRhcHRlciwKLQkJCWFkYXB0ZXItPmFody5wY2lfZnVuYywKKwkJCWFkYXB0ZXItPmFody0+cGNpX2Z1bmMsCiAJCQlhZGFwdGVyLT5md19oYWxfdmVyc2lvbiwKIAkJCWFyZzEsCiAJCQkwLApAQCAtNzc1LDE0ICs4NTEsMTQgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlpZiAoYWRhcHRlci0+b3BfbW9kZSAhPSBRTENOSUNfTUdNVF9GVU5DICYmCi0JICAgIGZ1bmMgIT0gYWRhcHRlci0+YWh3LnBjaV9mdW5jKSB7CisJICAgIGZ1bmMgIT0gYWRhcHRlci0+YWh3LT5wY2lfZnVuYykgewogCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCiAJCQkiTm90IHByaXZpbGVnZSB0byBxdWVyeSBzdGF0cyBmb3IgZnVuYz0lZCIsIGZ1bmMpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlzdGF0c19hZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgc3RhdHNfc2l6ZSwKLQkJCSZzdGF0c19kbWFfdCk7CisJc3RhdHNfYWRkciA9IGRtYV9hbGxvY19jb2hlcmVudCgmYWRhcHRlci0+cGRldi0+ZGV2LCBzdGF0c19zaXplLAorCQkJJnN0YXRzX2RtYV90LCBHRlBfS0VSTkVMKTsKIAlpZiAoIXN0YXRzX2FkZHIpIHsKIAkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNzkzLDcgKzg2OSw3IEBACiAJYXJnMSB8PSByeF90eCA8PCAxNSB8IHN0YXRzX3NpemUgPDwgMTY7CiAKIAllcnIgPSBxbGNuaWNfaXNzdWVfY21kKGFkYXB0ZXIsCi0JCQlhZGFwdGVyLT5haHcucGNpX2Z1bmMsCisJCQlhZGFwdGVyLT5haHctPnBjaV9mdW5jLAogCQkJYWRhcHRlci0+ZndfaGFsX3ZlcnNpb24sCiAJCQlhcmcxLAogCQkJTVNEKHN0YXRzX2RtYV90KSwKQEAgLTgxNiw3ICs4OTIsNyBAQAogCQllc3dfc3RhdHMtPm51bWJ5dGVzID0gbGU2NF90b19jcHUoc3RhdHMtPm51bWJ5dGVzKTsKIAl9CiAKLQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHN0YXRzX3NpemUsIHN0YXRzX2FkZHIsCisJZG1hX2ZyZWVfY29oZXJlbnQoJmFkYXB0ZXItPnBkZXYtPmRldiwgc3RhdHNfc2l6ZSwgc3RhdHNfYWRkciwKIAkJc3RhdHNfZG1hX3QpOwogCXJldHVybiBlcnI7CiB9CkBAIC05MDAsNyArOTc2LDcgQEAKIAlhcmcxIHw9IEJJVF8xNCB8IHJ4X3R4IDw8IDE1OwogCiAJcmV0dXJuIHFsY25pY19pc3N1ZV9jbWQoYWRhcHRlciwKLQkJCWFkYXB0ZXItPmFody5wY2lfZnVuYywKKwkJCWFkYXB0ZXItPmFody0+cGNpX2Z1bmMsCiAJCQlhZGFwdGVyLT5md19oYWxfdmVyc2lvbiwKIAkJCWFyZzEsCiAJCQkwLApAQCAtOTIxLDcgKzk5Nyw3IEBACiAJdTggcGNpX2Z1bmM7CiAJcGNpX2Z1bmMgPSAoKmFyZzEgPj4gOCk7CiAJZXJyID0gcWxjbmljX2lzc3VlX2NtZChhZGFwdGVyLAotCQkJYWRhcHRlci0+YWh3LnBjaV9mdW5jLAorCQkJYWRhcHRlci0+YWh3LT5wY2lfZnVuYywKIAkJCWFkYXB0ZXItPmZ3X2hhbF92ZXJzaW9uLAogCQkJKmFyZzEsCiAJCQkwLApAQCAtOTk5LDcgKzEwNzUsNyBAQAogCX0KIAogCWVyciA9IHFsY25pY19pc3N1ZV9jbWQoYWRhcHRlciwKLQkJCWFkYXB0ZXItPmFody5wY2lfZnVuYywKKwkJCWFkYXB0ZXItPmFody0+cGNpX2Z1bmMsCiAJCQlhZGFwdGVyLT5md19oYWxfdmVyc2lvbiwKIAkJCWFyZzEsCiAJCQlhcmcyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2V0aHRvb2wuYwppbmRleCA0NWIyNzU1Li45ZWZjNjkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2V0aHRvb2wuYwpAQCAtMTUwLDEwICsxNTAsMTAgQEAKIHsKIAlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBjaGVja19zZnBfbW9kdWxlID0gMDsKLQl1MTYgcGNpZm4gPSBhZGFwdGVyLT5haHcucGNpX2Z1bmM7CisJdTE2IHBjaWZuID0gYWRhcHRlci0+YWh3LT5wY2lfZnVuYzsKIAogCS8qIHJlYWQgd2hpY2ggbW9kZSAqLwotCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IFFMQ05JQ19HQkUpIHsKKwlpZiAoYWRhcHRlci0+YWh3LT5wb3J0X3R5cGUgPT0gUUxDTklDX0dCRSkgewogCQllY21kLT5zdXBwb3J0ZWQgPSAoU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiB8CiAJCQkJICAgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8CiAJCQkJICAgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgfApAQCAtMTY2LDExICsxNjYsMTEgQEAKIAkJCQkgICAgIEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYgfAogCQkJCSAgICAgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCk7CiAKLQkJZWNtZC0+c3BlZWQgPSBhZGFwdGVyLT5saW5rX3NwZWVkOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgYWRhcHRlci0+bGlua19zcGVlZCk7CiAJCWVjbWQtPmR1cGxleCA9IGFkYXB0ZXItPmxpbmtfZHVwbGV4OwogCQllY21kLT5hdXRvbmVnID0gYWRhcHRlci0+bGlua19hdXRvbmVnOwogCi0JfSBlbHNlIGlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IFFMQ05JQ19YR0JFKSB7CisJfSBlbHNlIGlmIChhZGFwdGVyLT5haHctPnBvcnRfdHlwZSA9PSBRTENOSUNfWEdCRSkgewogCQl1MzIgdmFsOwogCiAJCXZhbCA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX1BPUlRfTU9ERV9BRERSKTsKQEAgLTE4MywxNSArMTgzLDE1IEBACiAJCX0KIAogCQlpZiAobmV0aWZfcnVubmluZyhkZXYpICYmIGFkYXB0ZXItPmhhc19saW5rX2V2ZW50cykgewotCQkJZWNtZC0+c3BlZWQgPSBhZGFwdGVyLT5saW5rX3NwZWVkOworCQkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIGFkYXB0ZXItPmxpbmtfc3BlZWQpOwogCQkJZWNtZC0+YXV0b25lZyA9IGFkYXB0ZXItPmxpbmtfYXV0b25lZzsKIAkJCWVjbWQtPmR1cGxleCA9IGFkYXB0ZXItPmxpbmtfZHVwbGV4OwogCQkJZ290byBza2lwOwogCQl9CiAKIAkJdmFsID0gUUxDUkQzMihhZGFwdGVyLCBQM1BfTElOS19TUEVFRF9SRUcocGNpZm4pKTsKLQkJZWNtZC0+c3BlZWQgPSBQM1BfTElOS19TUEVFRF9NSFogKgotCQkJUDNQX0xJTktfU1BFRURfVkFMKHBjaWZuLCB2YWwpOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgUDNQX0xJTktfU1BFRURfTUhaICoKKwkJCQkgICAgICBQM1BfTElOS19TUEVFRF9WQUwocGNpZm4sIHZhbCkpOwogCQllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKIAkJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKIAl9IGVsc2UKQEAgLTIwMSw3ICsyMDEsNyBAQAogCWVjbWQtPnBoeV9hZGRyZXNzID0gYWRhcHRlci0+cGh5c2ljYWxfcG9ydDsKIAllY21kLT50cmFuc2NlaXZlciA9IFhDVlJfRVhURVJOQUw7CiAKLQlzd2l0Y2ggKGFkYXB0ZXItPmFody5ib2FyZF90eXBlKSB7CisJc3dpdGNoIChhZGFwdGVyLT5haHctPmJvYXJkX3R5cGUpIHsKIAljYXNlIFFMQ05JQ19CUkRUWVBFX1AzUF9SRUZfUUc6CiAJY2FzZSBRTENOSUNfQlJEVFlQRV9QM1BfNF9HQjoKIAljYXNlIFFMQ05JQ19CUkRUWVBFX1AzUF80X0dCX01NOgpAQCAtMjM4LDcgKzIzOCw3IEBACiAJCWVjbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7CiAJCWJyZWFrOwogCWNhc2UgUUxDTklDX0JSRFRZUEVfUDNQXzEwR19UUDoKLQkJaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gUUxDTklDX1hHQkUpIHsKKwkJaWYgKGFkYXB0ZXItPmFody0+cG9ydF90eXBlID09IFFMQ05JQ19YR0JFKSB7CiAJCQllY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOwogCQkJZWNtZC0+c3VwcG9ydGVkIHw9IChTVVBQT1JURURfRklCUkUgfCBTVVBQT1JURURfVFApOwogCQkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0KQEAgLTI1Niw3ICsyNTYsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJVbnN1cHBvcnRlZCBib2FyZCBtb2RlbCAlZFxuIiwKLQkJCWFkYXB0ZXItPmFody5ib2FyZF90eXBlKTsKKwkJCWFkYXB0ZXItPmFody0+Ym9hcmRfdHlwZSk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMjg0LDUwICsyODQsNDQgQEAKIHN0YXRpYyBpbnQKIHFsY25pY19zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQogeworCXUzMiBjb25maWcgPSAwOworCXUzMiByZXQgPSAwOwogCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7Ci0JX191MzIgc3RhdHVzOworCisJaWYgKGFkYXB0ZXItPmFody0+cG9ydF90eXBlICE9IFFMQ05JQ19HQkUpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCS8qIHJlYWQgd2hpY2ggbW9kZSAqLwotCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IFFMQ05JQ19HQkUpIHsKLQkJLyogYXV0b25lZ290aWF0aW9uICovCi0JCWlmIChxbGNuaWNfZndfY21kX3NldF9waHkoYWRhcHRlciwKLQkJCSAgICAgICBRTENOSUNfTklVX0dCX01JSV9NR01UX0FERFJfQVVUT05FRywKLQkJCSAgICAgICBlY21kLT5hdXRvbmVnKSAhPSAwKQotCQkJcmV0dXJuIC1FSU87Ci0JCWVsc2UKLQkJCWFkYXB0ZXItPmxpbmtfYXV0b25lZyA9IGVjbWQtPmF1dG9uZWc7CisJaWYgKGVjbWQtPmR1cGxleCkKKwkJY29uZmlnIHw9IDB4MTsKIAotCQlpZiAocWxjbmljX2Z3X2NtZF9xdWVyeV9waHkoYWRhcHRlciwKLQkJCSAgICAgIFFMQ05JQ19OSVVfR0JfTUlJX01HTVRfQUREUl9QSFlfU1RBVFVTLAotCQkJICAgICAgJnN0YXR1cykgIT0gMCkKLQkJCXJldHVybiAtRUlPOworCWlmIChlY21kLT5hdXRvbmVnKQorCQljb25maWcgfD0gMHgyOwogCi0JCXN3aXRjaCAoZWNtZC0+c3BlZWQpIHsKLQkJY2FzZSBTUEVFRF8xMDoKLQkJCXFsY25pY19zZXRfcGh5X3NwZWVkKHN0YXR1cywgMCk7Ci0JCQlicmVhazsKLQkJY2FzZSBTUEVFRF8xMDA6Ci0JCQlxbGNuaWNfc2V0X3BoeV9zcGVlZChzdGF0dXMsIDEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1BFRURfMTAwMDoKLQkJCXFsY25pY19zZXRfcGh5X3NwZWVkKHN0YXR1cywgMik7Ci0JCQlicmVhazsKLQkJfQorCXN3aXRjaCAoZXRodG9vbF9jbWRfc3BlZWQoZWNtZCkpIHsKKwljYXNlIFNQRUVEXzEwOgorCQljb25maWcgfD0gKDAgPDwgOCk7CisJCWJyZWFrOworCWNhc2UgU1BFRURfMTAwOgorCQljb25maWcgfD0gKDEgPDwgOCk7CisJCWJyZWFrOworCWNhc2UgU1BFRURfMTAwMDoKKwkJY29uZmlnIHw9ICgxMCA8PCA4KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU87CisJfQogCi0JCWlmIChlY21kLT5kdXBsZXggPT0gRFVQTEVYX0hBTEYpCi0JCQlxbGNuaWNfY2xlYXJfcGh5X2R1cGxleChzdGF0dXMpOwotCQlpZiAoZWNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKQotCQkJcWxjbmljX3NldF9waHlfZHVwbGV4KHN0YXR1cyk7Ci0JCWlmIChxbGNuaWNfZndfY21kX3NldF9waHkoYWRhcHRlciwKLQkJCSAgICAgICBRTENOSUNfTklVX0dCX01JSV9NR01UX0FERFJfUEhZX1NUQVRVUywKLQkJCSAgICAgICAqKChpbnQgKikmc3RhdHVzKSkgIT0gMCkKLQkJCXJldHVybiAtRUlPOwotCQllbHNlIHsKLQkJCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSBlY21kLT5zcGVlZDsKLQkJCWFkYXB0ZXItPmxpbmtfZHVwbGV4ID0gZWNtZC0+ZHVwbGV4OwotCQl9Ci0JfSBlbHNlCisJcmV0ID0gcWxjbmljX2Z3X2NtZF9zZXRfcG9ydChhZGFwdGVyLCBjb25maWcpOworCisJaWYgKHJldCA9PSBRTENOSUNfUkNPREVfTk9UX1NVUFBPUlRFRCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOworCWVsc2UgaWYgKHJldCkKKwkJcmV0dXJuIC1FSU87CisKKwlhZGFwdGVyLT5saW5rX3NwZWVkID0gZXRodG9vbF9jbWRfc3BlZWQoZWNtZCk7CisJYWRhcHRlci0+bGlua19kdXBsZXggPSBlY21kLT5kdXBsZXg7CisJYWRhcHRlci0+bGlua19hdXRvbmVnID0gZWNtZC0+YXV0b25lZzsKIAogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQogCQlyZXR1cm4gMDsKQEAgLTM0MCwxNCArMzM0LDE0IEBACiBxbGNuaWNfZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfcmVncyAqcmVncywgdm9pZCAqcCkKIHsKIAlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKwlzdHJ1Y3QgcWxjbmljX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSBhZGFwdGVyLT5yZWN2X2N0eDsKIAlzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOwogCXUzMiAqcmVnc19idWZmID0gcDsKIAlpbnQgcmluZywgaSA9IDAsIGogPSAwOwogCiAJbWVtc2V0KHAsIDAsIHFsY25pY19nZXRfcmVnc19sZW4oZGV2KSk7CiAJcmVncy0+dmVyc2lvbiA9IChRTENOSUNfRVRIVE9PTF9SRUdTX1ZFUiA8PCAyNCkgfAotCQkoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkIDw8IDE2KSB8IChhZGFwdGVyLT5wZGV2KS0+ZGV2aWNlOworCQkoYWRhcHRlci0+YWh3LT5yZXZpc2lvbl9pZCA8PCAxNikgfCAoYWRhcHRlci0+cGRldiktPmRldmljZTsKIAogCXJlZ3NfYnVmZlswXSA9ICgweGNhZmUwMDAwIHwgKFFMQ05JQ19ERVZfSU5GT19TSVpFICYgMHhmZmZmKSk7CiAJcmVnc19idWZmWzFdID0gUUxDTklDX01HTVRfQVBJX1ZFUlNJT047CkBAIC0zODIsNyArMzc2LDcgQEAKIAl1MzIgdmFsOwogCiAJdmFsID0gUUxDUkQzMihhZGFwdGVyLCBDUkJfWEdfU1RBVEVfUDNQKTsKLQl2YWwgPSBYR19MSU5LX1NUQVRFX1AzUChhZGFwdGVyLT5haHcucGNpX2Z1bmMsIHZhbCk7CisJdmFsID0gWEdfTElOS19TVEFURV9QM1AoYWRhcHRlci0+YWh3LT5wY2lfZnVuYywgdmFsKTsKIAlyZXR1cm4gKHZhbCA9PSBYR19MSU5LX1VQX1AzUCkgPyAwIDogMTsKIH0KIApAQCAtNDc0LDYgKzQ2OCwzOSBAQAogCXJldHVybiBxbGNuaWNfcmVzZXRfY29udGV4dChhZGFwdGVyKTsKIH0KIAorc3RhdGljIHZvaWQgcWxjbmljX2dldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgZXRodG9vbF9jaGFubmVscyAqY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCisJY2hhbm5lbC0+bWF4X3J4ID0gcm91bmRkb3duX3Bvd19vZl90d28obWluX3QoaW50LAorCQkJYWRhcHRlci0+bWF4X3J4X3F1ZXMsIG51bV9vbmxpbmVfY3B1cygpKSk7CisJY2hhbm5lbC0+bWF4X3R4ID0gYWRhcHRlci0+bWF4X3R4X3F1ZXM7CisKKwljaGFubmVsLT5yeF9jb3VudCA9IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7CisJY2hhbm5lbC0+dHhfY291bnQgPSBhZGFwdGVyLT5tYXhfdHhfcXVlczsKK30KKworc3RhdGljIGludCBxbGNuaWNfc2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBldGh0b29sX2NoYW5uZWxzICpjaGFubmVsKQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGVycjsKKworCWlmIChjaGFubmVsLT5vdGhlcl9jb3VudCB8fCBjaGFubmVsLT5jb21iaW5lZF9jb3VudCB8fAorCSAgICBjaGFubmVsLT50eF9jb3VudCAhPSBjaGFubmVsLT5tYXhfdHgpCisJCXJldHVybiAtRUlOVkFMOworCisJZXJyID0gcWxjbmljX3ZhbGlkYXRlX21heF9yc3MoZGV2LCBjaGFubmVsLT5tYXhfcngsIGNoYW5uZWwtPnJ4X2NvdW50KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gcWxjbmljX3NldF9tYXhfcnNzKGFkYXB0ZXIsIGNoYW5uZWwtPnJ4X2NvdW50KTsKKwluZXRkZXZfaW5mbyhkZXYsICJhbGxvY2F0ZWQgMHgleCBzZHMgcmluZ3NcbiIsCisJCQkJIGFkYXB0ZXItPm1heF9zZHNfcmluZ3MpOworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyB2b2lkCiBxbGNuaWNfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCSAgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqcGF1c2UpCkBAIC00ODIsNyArNTA5LDcgQEAKIAlpbnQgcG9ydCA9IGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQ7CiAJX191MzIgdmFsOwogCi0JaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gUUxDTklDX0dCRSkgeworCWlmIChhZGFwdGVyLT5haHctPnBvcnRfdHlwZSA9PSBRTENOSUNfR0JFKSB7CiAJCWlmICgocG9ydCA8IDApIHx8IChwb3J0ID4gUUxDTklDX05JVV9NQVhfR0JFX1BPUlRTKSkKIAkJCXJldHVybjsKIAkJLyogZ2V0IGZsb3cgY29udHJvbCBzZXR0aW5ncyAqLwpAQCAtNTA0LDcgKzUzMSw3IEBACiAJCQlwYXVzZS0+dHhfcGF1c2UgPSAhKHFsY25pY19nYl9nZXRfZ2IzX21hc2sodmFsKSk7CiAJCQlicmVhazsKIAkJfQotCX0gZWxzZSBpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBRTENOSUNfWEdCRSkgeworCX0gZWxzZSBpZiAoYWRhcHRlci0+YWh3LT5wb3J0X3R5cGUgPT0gUUxDTklDX1hHQkUpIHsKIAkJaWYgKChwb3J0IDwgMCkgfHwgKHBvcnQgPiBRTENOSUNfTklVX01BWF9YR19QT1JUUykpCiAJCQlyZXR1cm47CiAJCXBhdXNlLT5yeF9wYXVzZSA9IDE7CkBAIC01MTUsNyArNTQyLDcgQEAKIAkJCXBhdXNlLT50eF9wYXVzZSA9ICEocWxjbmljX3hnX2dldF94ZzFfbWFzayh2YWwpKTsKIAl9IGVsc2UgewogCQlkZXZfZXJyKCZuZXRkZXYtPmRldiwgIlVua25vd24gYm9hcmQgdHlwZTogJXhcbiIsCi0JCQkJCWFkYXB0ZXItPmFody5wb3J0X3R5cGUpOworCQkJCQlhZGFwdGVyLT5haHctPnBvcnRfdHlwZSk7CiAJfQogfQogCkBAIC01MjgsNyArNTU1LDcgQEAKIAlfX3UzMiB2YWw7CiAKIAkvKiByZWFkIG1vZGUgKi8KLQlpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBRTENOSUNfR0JFKSB7CisJaWYgKGFkYXB0ZXItPmFody0+cG9ydF90eXBlID09IFFMQ05JQ19HQkUpIHsKIAkJaWYgKChwb3J0IDwgMCkgfHwgKHBvcnQgPiBRTENOSUNfTklVX01BWF9HQkVfUE9SVFMpKQogCQkJcmV0dXJuIC1FSU87CiAJCS8qIHNldCBmbG93IGNvbnRyb2wgKi8KQEAgLTU3MSw3ICs1OTgsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAkJUUxDV1IzMihhZGFwdGVyLCBRTENOSUNfTklVX0dCX1BBVVNFX0NUTCwgdmFsKTsKLQl9IGVsc2UgaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gUUxDTklDX1hHQkUpIHsKKwl9IGVsc2UgaWYgKGFkYXB0ZXItPmFody0+cG9ydF90eXBlID09IFFMQ05JQ19YR0JFKSB7CiAJCWlmICghcGF1c2UtPnJ4X3BhdXNlIHx8IHBhdXNlLT5hdXRvbmVnKQogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCkBAIC01OTMsNyArNjIwLDcgQEAKIAkJUUxDV1IzMihhZGFwdGVyLCBRTENOSUNfTklVX1hHX1BBVVNFX0NUTCwgdmFsKTsKIAl9IGVsc2UgewogCQlkZXZfZXJyKCZuZXRkZXYtPmRldiwgIlVua25vd24gYm9hcmQgdHlwZTogJXhcbiIsCi0JCQkJYWRhcHRlci0+YWh3LnBvcnRfdHlwZSk7CisJCQkJYWRhcHRlci0+YWh3LT5wb3J0X3R5cGUpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTYzOSw4ICs2NjYsOCBAQAogCQlnb3RvIGNsZWFyX2l0OwogCiAJYWRhcHRlci0+ZGlhZ19jbnQgPSAwOwotCXJldCA9IHFsY25pY19pc3N1ZV9jbWQoYWRhcHRlciwgYWRhcHRlci0+YWh3LnBjaV9mdW5jLAotCQkJYWRhcHRlci0+ZndfaGFsX3ZlcnNpb24sIGFkYXB0ZXItPnBvcnRudW0sCisJcmV0ID0gcWxjbmljX2lzc3VlX2NtZChhZGFwdGVyLCBhZGFwdGVyLT5haHctPnBjaV9mdW5jLAorCQkJYWRhcHRlci0+ZndfaGFsX3ZlcnNpb24sIGFkYXB0ZXItPmFody0+cGNpX2Z1bmMsCiAJCQkwLCAwLCAweDAwMDAwMDExKTsKIAlpZiAocmV0KQogCQlnb3RvIGRvbmU7CkBAIC03NDksMTQgKzc3NiwxNCBAQAogCQlyZXR1cm47CiAKIAltZW1zZXQoJnBvcnRfc3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgcWxjbmljX2Vzd19zdGF0aXN0aWNzKSk7Ci0JcmV0ID0gcWxjbmljX2dldF9wb3J0X3N0YXRzKGFkYXB0ZXIsIGFkYXB0ZXItPmFody5wY2lfZnVuYywKKwlyZXQgPSBxbGNuaWNfZ2V0X3BvcnRfc3RhdHMoYWRhcHRlciwgYWRhcHRlci0+YWh3LT5wY2lfZnVuYywKIAkJCVFMQ05JQ19RVUVSWV9SWF9DT1VOVEVSLCAmcG9ydF9zdGF0cy5yeCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuOwogCiAJcWxjbmljX2ZpbGxfZGV2aWNlX3N0YXRzKCZpbmRleCwgZGF0YSwgJnBvcnRfc3RhdHMucngpOwogCi0JcmV0ID0gcWxjbmljX2dldF9wb3J0X3N0YXRzKGFkYXB0ZXIsIGFkYXB0ZXItPmFody5wY2lfZnVuYywKKwlyZXQgPSBxbGNuaWNfZ2V0X3BvcnRfc3RhdHMoYWRhcHRlciwgYWRhcHRlci0+YWh3LT5wY2lfZnVuYywKIAkJCVFMQ05JQ19RVUVSWV9UWF9DT1VOVEVSLCAmcG9ydF9zdGF0cy50eCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuOwpAQCAtNzY0LDExNSArNzkxLDQ5IEBACiAJcWxjbmljX2ZpbGxfZGV2aWNlX3N0YXRzKCZpbmRleCwgZGF0YSwgJnBvcnRfc3RhdHMudHgpOwogfQogCi1zdGF0aWMgaW50IHFsY25pY19zZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKChhZGFwdGVyLT5mbGFncyAmIFFMQ05JQ19FU1dJVENIX0VOQUJMRUQpKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JaWYgKGRhdGEpCi0JCWRldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNKTsKLQllbHNlCi0JCWRldi0+ZmVhdHVyZXMgJj0gfihORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSk7Ci0KLQlyZXR1cm4gMDsKLQotfQotc3RhdGljIHUzMiBxbGNuaWNfZ2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSVBfQ1NVTTsKLX0KLQotc3RhdGljIHUzMiBxbGNuaWNfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwotCXJldHVybiBhZGFwdGVyLT5yeF9jc3VtOwotfQotCi1zdGF0aWMgaW50IHFsY25pY19zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKChhZGFwdGVyLT5mbGFncyAmIFFMQ05JQ19FU1dJVENIX0VOQUJMRUQpKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JaWYgKCEhZGF0YSkgewotCQlhZGFwdGVyLT5yeF9jc3VtID0gISFkYXRhOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPKSB7Ci0JCWlmIChxbGNuaWNfY29uZmlnX2h3X2xybyhhZGFwdGVyLCBRTENOSUNfTFJPX0RJU0FCTEVEKSkKLQkJCXJldHVybiAtRUlPOwotCi0JCWRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfTFJPOwotCQlxbGNuaWNfc2VuZF9scm9fY2xlYW51cChhZGFwdGVyKTsKLQkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwKLQkJCQkJImRpc2FibGluZyBMUk8gYXMgcnhfY3N1bSBpcyBvZmZcbiIpOwotCX0KLQlhZGFwdGVyLT5yeF9jc3VtID0gISFkYXRhOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdTMyIHFsY25pY19nZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIChkZXYtPmZlYXR1cmVzICYgKE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082KSkgIT0gMDsKLX0KLQotc3RhdGljIGludCBxbGNuaWNfc2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwotCWlmICghKGFkYXB0ZXItPmNhcGFiaWxpdGllcyAmIFFMQ05JQ19GV19DQVBBQklMSVRZX1RTTykpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQlpZiAoZGF0YSkKLQkJZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYpOwotCWVsc2UKLQkJZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHFsY25pY19ibGlua19sZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHZhbCkKK3N0YXRpYyBpbnQgcWxjbmljX3NldF9sZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgZW51bSBldGh0b29sX3BoeXNfaWRfc3RhdGUgc3RhdGUpCiB7CiAJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgbWF4X3Nkc19yaW5ncyA9IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7Ci0JaW50IGRldl9kb3duID0gMDsKLQlpbnQgcmV0OwogCi0JaWYgKCF0ZXN0X2JpdChfX1FMQ05JQ19ERVZfVVAsICZhZGFwdGVyLT5zdGF0ZSkpIHsKLQkJZGV2X2Rvd24gPSAxOwotCQlpZiAodGVzdF9hbmRfc2V0X2JpdChfX1FMQ05JQ19SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCi0JCQlyZXR1cm4gLUVJTzsKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBFVEhUT09MX0lEX0FDVElWRToKKwkJaWYgKCF0ZXN0X2JpdChfX1FMQ05JQ19ERVZfVVAsICZhZGFwdGVyLT5zdGF0ZSkpIHsKKwkJCWlmICh0ZXN0X2FuZF9zZXRfYml0KF9fUUxDTklDX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKKwkJCQlyZXR1cm4gLUVJTzsKIAotCQlyZXQgPSBxbGNuaWNfZGlhZ19hbGxvY19yZXMoZGV2LCBRTENOSUNfTEVEX1RFU1QpOwotCQlpZiAocmV0KSB7Ci0JCQljbGVhcl9iaXQoX19RTENOSUNfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpOwotCQkJcmV0dXJuIHJldDsKKwkJCWlmIChxbGNuaWNfZGlhZ19hbGxvY19yZXMoZGV2LCBRTENOSUNfTEVEX1RFU1QpKSB7CisJCQkJY2xlYXJfYml0KF9fUUxDTklDX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJCXNldF9iaXQoX19RTENOSUNfRElBR19SRVNfQUxMT0MsICZhZGFwdGVyLT5zdGF0ZSk7CiAJCX0KLQl9CiAKLQlyZXQgPSBhZGFwdGVyLT5uaWNfb3BzLT5jb25maWdfbGVkKGFkYXB0ZXIsIDEsIDB4Zik7Ci0JaWYgKHJldCkgeworCQlpZiAoYWRhcHRlci0+bmljX29wcy0+Y29uZmlnX2xlZChhZGFwdGVyLCAxLCAweGYpID09IDApCisJCQlyZXR1cm4gMDsKKwogCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCiAJCQkiRmFpbGVkIHRvIHNldCBMRUQgYmxpbmsgc3RhdGUuXG4iKTsKLQkJZ290byBkb25lOworCQlicmVhazsKKworCWNhc2UgRVRIVE9PTF9JRF9JTkFDVElWRToKKwkJaWYgKGFkYXB0ZXItPm5pY19vcHMtPmNvbmZpZ19sZWQoYWRhcHRlciwgMCwgMHhmKSkKKwkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkiRmFpbGVkIHRvIHJlc2V0IExFRCBibGluayBzdGF0ZS5cbiIpOworCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JbXNsZWVwX2ludGVycnVwdGlibGUodmFsICogMTAwMCk7Ci0KLQlyZXQgPSBhZGFwdGVyLT5uaWNfb3BzLT5jb25maWdfbGVkKGFkYXB0ZXIsIDAsIDB4Zik7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCi0JCQkiRmFpbGVkIHRvIHJlc2V0IExFRCBibGluayBzdGF0ZS5cbiIpOwotCQlnb3RvIGRvbmU7Ci0JfQotCi1kb25lOgotCWlmIChkZXZfZG93bikgeworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoX19RTENOSUNfRElBR19SRVNfQUxMT0MsICZhZGFwdGVyLT5zdGF0ZSkpIHsKIAkJcWxjbmljX2RpYWdfZnJlZV9yZXMoZGV2LCBtYXhfc2RzX3JpbmdzKTsKIAkJY2xlYXJfYml0KF9fUUxDTklDX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKIAl9Ci0JcmV0dXJuIHJldDsKIAorCXJldHVybiAtRUlPOwogfQogCiBzdGF0aWMgdm9pZApAQCAtOTM2LDggKzg5Nyw4IEBACiAJKi8KIAlpZiAoZXRoY29hbC0+cnhfY29hbGVzY2VfdXNlY3MgPiAweGZmZmYgfHwKIAkJZXRoY29hbC0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPiAweGZmZmYgfHwKLQkJZXRoY29hbC0+dHhfY29hbGVzY2VfdXNlY3MgPiAweGZmZmYgfHwKLQkJZXRoY29hbC0+dHhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPiAweGZmZmYgfHwKKwkJZXRoY29hbC0+dHhfY29hbGVzY2VfdXNlY3MgfHwKKwkJZXRoY29hbC0+dHhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgfHwKIAkJZXRoY29hbC0+cnhfY29hbGVzY2VfdXNlY3NfaXJxIHx8CiAJCWV0aGNvYWwtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2lycSB8fAogCQlldGhjb2FsLT50eF9jb2FsZXNjZV91c2Vjc19pcnEgfHwKQEAgLTk1OSwyMSArOTIwLDE3IEBACiAKIAlpZiAoIWV0aGNvYWwtPnJ4X2NvYWxlc2NlX3VzZWNzIHx8CiAJCSFldGhjb2FsLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lcykgewotCQlhZGFwdGVyLT5jb2FsLmZsYWdzID0gUUxDTklDX0lOVFJfREVGQVVMVDsKLQkJYWRhcHRlci0+Y29hbC5ub3JtYWwuZGF0YS5yeF90aW1lX3VzID0KKwkJYWRhcHRlci0+YWh3LT5jb2FsLmZsYWcgPSBRTENOSUNfSU5UUl9ERUZBVUxUOworCQlhZGFwdGVyLT5haHctPmNvYWwucnhfdGltZV91cyA9CiAJCQlRTENOSUNfREVGQVVMVF9JTlRSX0NPQUxFU0NFX1JYX1RJTUVfVVM7Ci0JCWFkYXB0ZXItPmNvYWwubm9ybWFsLmRhdGEucnhfcGFja2V0cyA9CisJCWFkYXB0ZXItPmFody0+Y29hbC5yeF9wYWNrZXRzID0KIAkJCVFMQ05JQ19ERUZBVUxUX0lOVFJfQ09BTEVTQ0VfUlhfUEFDS0VUUzsKIAl9IGVsc2UgewotCQlhZGFwdGVyLT5jb2FsLmZsYWdzID0gMDsKLQkJYWRhcHRlci0+Y29hbC5ub3JtYWwuZGF0YS5yeF90aW1lX3VzID0KLQkJZXRoY29hbC0+cnhfY29hbGVzY2VfdXNlY3M7Ci0JCWFkYXB0ZXItPmNvYWwubm9ybWFsLmRhdGEucnhfcGFja2V0cyA9Ci0JCWV0aGNvYWwtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzOworCQlhZGFwdGVyLT5haHctPmNvYWwuZmxhZyA9IDA7CisJCWFkYXB0ZXItPmFody0+Y29hbC5yeF90aW1lX3VzID0gZXRoY29hbC0+cnhfY29hbGVzY2VfdXNlY3M7CisJCWFkYXB0ZXItPmFody0+Y29hbC5yeF9wYWNrZXRzID0KKwkJCWV0aGNvYWwtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzOwogCX0KLQlhZGFwdGVyLT5jb2FsLm5vcm1hbC5kYXRhLnR4X3RpbWVfdXMgPSBldGhjb2FsLT50eF9jb2FsZXNjZV91c2VjczsKLQlhZGFwdGVyLT5jb2FsLm5vcm1hbC5kYXRhLnR4X3BhY2tldHMgPQotCWV0aGNvYWwtPnR4X21heF9jb2FsZXNjZWRfZnJhbWVzOwogCiAJcWxjbmljX2NvbmZpZ19pbnRyX2NvYWxlc2NlKGFkYXB0ZXIpOwogCkBAIC05ODgsNTAgKzk0NSw4IEBACiAJaWYgKGFkYXB0ZXItPmlzX3VwICE9IFFMQ05JQ19BREFQVEVSX1VQX01BR0lDKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWV0aGNvYWwtPnJ4X2NvYWxlc2NlX3VzZWNzID0gYWRhcHRlci0+Y29hbC5ub3JtYWwuZGF0YS5yeF90aW1lX3VzOwotCWV0aGNvYWwtPnR4X2NvYWxlc2NlX3VzZWNzID0gYWRhcHRlci0+Y29hbC5ub3JtYWwuZGF0YS50eF90aW1lX3VzOwotCWV0aGNvYWwtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzID0KLQkJYWRhcHRlci0+Y29hbC5ub3JtYWwuZGF0YS5yeF9wYWNrZXRzOwotCWV0aGNvYWwtPnR4X21heF9jb2FsZXNjZWRfZnJhbWVzID0KLQkJYWRhcHRlci0+Y29hbC5ub3JtYWwuZGF0YS50eF9wYWNrZXRzOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcWxjbmljX3NldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCWludCBod19scm87Ci0KLQlpZiAoZXRodG9vbF9pbnZhbGlkX2ZsYWdzKG5ldGRldiwgZGF0YSwgRVRIX0ZMQUdfTFJPKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIShhZGFwdGVyLT5jYXBhYmlsaXRpZXMgJiBRTENOSUNfRldfQ0FQQUJJTElUWV9IV19MUk8pKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghYWRhcHRlci0+cnhfY3N1bSkgewotCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAicnggY3N1bSBpcyBvZmYsICIKLQkJCSJjYW5ub3QgdG9nZ2xlIGxyb1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICgoZGF0YSAmIEVUSF9GTEFHX0xSTykgJiYgKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTykpCi0JCXJldHVybiAwOwotCi0JaWYgKGRhdGEgJiBFVEhfRkxBR19MUk8pIHsKLQkJaHdfbHJvID0gUUxDTklDX0xST19FTkFCTEVEOwotCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOwotCX0gZWxzZSB7Ci0JCWh3X2xybyA9IDA7Ci0JCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfTFJPOwotCX0KLQotCWlmIChxbGNuaWNfY29uZmlnX2h3X2xybyhhZGFwdGVyLCBod19scm8pKQotCQlyZXR1cm4gLUVJTzsKLQotCWlmICgoaHdfbHJvID09IDApICYmIHFsY25pY19zZW5kX2xyb19jbGVhbnVwKGFkYXB0ZXIpKQotCQlyZXR1cm4gLUVJTzsKLQorCWV0aGNvYWwtPnJ4X2NvYWxlc2NlX3VzZWNzID0gYWRhcHRlci0+YWh3LT5jb2FsLnJ4X3RpbWVfdXM7CisJZXRoY29hbC0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPSBhZGFwdGVyLT5haHctPmNvYWwucnhfcGFja2V0czsKIAogCXJldHVybiAwOwogfQpAQCAtMTA1MCw2ICs5NjUsODQgQEAKIAlhZGFwdGVyLT5tc2dfZW5hYmxlID0gbXNnbHZsOwogfQogCitzdGF0aWMgaW50CitxbGNuaWNfZ2V0X2R1bXBfZmxhZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9kdW1wICpkdW1wKQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IHFsY25pY19md19kdW1wICpmd19kdW1wID0gJmFkYXB0ZXItPmFody0+ZndfZHVtcDsKKworCWR1bXAtPmxlbiA9IGZ3X2R1bXAtPnRtcGxfaGRyLT5zaXplICsgZndfZHVtcC0+c2l6ZTsKKwlkdW1wLT5mbGFnID0gZndfZHVtcC0+dG1wbF9oZHItPmRydl9jYXBfbWFzazsKKwlkdW1wLT52ZXJzaW9uID0gYWRhcHRlci0+ZndfdmVyc2lvbjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcWxjbmljX2dldF9kdW1wX2RhdGEoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfZHVtcCAqZHVtcCwKKwkJCXZvaWQgKmJ1ZmZlcikKK3sKKwlpbnQgaSwgY29weV9zejsKKwl1MzIgKmhkcl9wdHIsICpkYXRhOworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IHFsY25pY19md19kdW1wICpmd19kdW1wID0gJmFkYXB0ZXItPmFody0+ZndfZHVtcDsKKworCWlmIChxbGNuaWNfYXBpX2xvY2soYWRhcHRlcikpCisJCXJldHVybiAtRUlPOworCWlmICghZndfZHVtcC0+Y2xyKSB7CisJCW5ldGRldl9pbmZvKG5ldGRldiwgIkR1bXAgbm90IGF2YWlsYWJsZVxuIik7CisJCXFsY25pY19hcGlfdW5sb2NrKGFkYXB0ZXIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyogQ29weSB0ZW1wbGF0ZSBoZWFkZXIgZmlyc3QgKi8KKwljb3B5X3N6ID0gZndfZHVtcC0+dG1wbF9oZHItPnNpemU7CisJaGRyX3B0ciA9ICh1MzIgKikgZndfZHVtcC0+dG1wbF9oZHI7CisJZGF0YSA9ICh1MzIgKikgYnVmZmVyOworCWZvciAoaSA9IDA7IGkgPCBjb3B5X3N6L3NpemVvZih1MzIpOyBpKyspCisJCSpkYXRhKysgPSBjcHVfdG9fbGUzMigqaGRyX3B0cisrKTsKKworCS8qIENvcHkgY2FwdHVyZWQgZHVtcCBkYXRhICovCisJbWVtY3B5KGJ1ZmZlciArIGNvcHlfc3osIGZ3X2R1bXAtPmRhdGEsIGZ3X2R1bXAtPnNpemUpOworCWR1bXAtPmxlbiA9IGNvcHlfc3ogKyBmd19kdW1wLT5zaXplOworCWR1bXAtPmZsYWcgPSBmd19kdW1wLT50bXBsX2hkci0+ZHJ2X2NhcF9tYXNrOworCisJLyogRnJlZSBkdW1wIGFyZWEgb25jZSBkYXRhIGhhcyBiZWVuIGNhcHR1cmVkICovCisJdmZyZWUoZndfZHVtcC0+ZGF0YSk7CisJZndfZHVtcC0+ZGF0YSA9IE5VTEw7CisJZndfZHVtcC0+Y2xyID0gMDsKKwlxbGNuaWNfYXBpX3VubG9jayhhZGFwdGVyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitxbGNuaWNfc2V0X2R1bXAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfZHVtcCAqdmFsKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IHFsY25pY19md19kdW1wICpmd19kdW1wID0gJmFkYXB0ZXItPmFody0+ZndfZHVtcDsKKworCWlmICh2YWwtPmZsYWcgPT0gUUxDTklDX0ZPUkNFX0ZXX0RVTVBfS0VZKSB7CisJCW5ldGRldl9pbmZvKG5ldGRldiwgIkZvcmNpbmcgYSBGVyBkdW1wXG4iKTsKKwkJcWxjbmljX2Rldl9yZXF1ZXN0X3Jlc2V0KGFkYXB0ZXIpOworCX0gZWxzZSB7CisJCWlmICh2YWwtPmZsYWcgPiBRTENOSUNfRFVNUF9NQVNLX01BWCB8fAorCQkJdmFsLT5mbGFnIDwgUUxDTklDX0RVTVBfTUFTS19NSU4pIHsKKwkJCQluZXRkZXZfaW5mbyhuZXRkZXYsCisJCQkJIkludmFsaWQgZHVtcCBsZXZlbDogMHgleFxuIiwgdmFsLT5mbGFnKTsKKwkJCQlyZXQgPSAtRUlOVkFMOworCQkJCWdvdG8gb3V0OworCQl9CisJCWlmIChxbGNuaWNfYXBpX2xvY2soYWRhcHRlcikpCisJCQlyZXR1cm4gLUVJTzsKKwkJZndfZHVtcC0+dG1wbF9oZHItPmRydl9jYXBfbWFzayA9IHZhbC0+ZmxhZyAmIDB4ZmY7CisJCXFsY25pY19hcGlfdW5sb2NrKGFkYXB0ZXIpOworCQluZXRkZXZfaW5mbyhuZXRkZXYsICJEcml2ZXIgbWFzayBjaGFuZ2VkIHRvOiAweCV4XG4iLAorCQkJZndfZHVtcC0+dG1wbF9oZHItPmRydl9jYXBfbWFzayk7CisJfQorb3V0OgorCXJldHVybiByZXQ7Cit9CisKIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBxbGNuaWNfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncyA9IHFsY25pY19nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncyA9IHFsY25pY19zZXRfc2V0dGluZ3MsCkBAIC0xMDYxLDI2ICsxMDU0LDIyIEBACiAJLmdldF9lZXByb20gPSBxbGNuaWNfZ2V0X2VlcHJvbSwKIAkuZ2V0X3JpbmdwYXJhbSA9IHFsY25pY19nZXRfcmluZ3BhcmFtLAogCS5zZXRfcmluZ3BhcmFtID0gcWxjbmljX3NldF9yaW5ncGFyYW0sCisJLmdldF9jaGFubmVscyA9IHFsY25pY19nZXRfY2hhbm5lbHMsCisJLnNldF9jaGFubmVscyA9IHFsY25pY19zZXRfY2hhbm5lbHMsCiAJLmdldF9wYXVzZXBhcmFtID0gcWxjbmljX2dldF9wYXVzZXBhcmFtLAogCS5zZXRfcGF1c2VwYXJhbSA9IHFsY25pY19zZXRfcGF1c2VwYXJhbSwKLQkuZ2V0X3R4X2NzdW0gPSBxbGNuaWNfZ2V0X3R4X2NzdW0sCi0JLnNldF90eF9jc3VtID0gcWxjbmljX3NldF90eF9jc3VtLAotCS5zZXRfc2cgPSBldGh0b29sX29wX3NldF9zZywKLQkuZ2V0X3RzbyA9IHFsY25pY19nZXRfdHNvLAotCS5zZXRfdHNvID0gcWxjbmljX3NldF90c28sCiAJLmdldF93b2wgPSBxbGNuaWNfZ2V0X3dvbCwKIAkuc2V0X3dvbCA9IHFsY25pY19zZXRfd29sLAogCS5zZWxmX3Rlc3QgPSBxbGNuaWNfZGlhZ190ZXN0LAogCS5nZXRfc3RyaW5ncyA9IHFsY25pY19nZXRfc3RyaW5ncywKIAkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBxbGNuaWNfZ2V0X2V0aHRvb2xfc3RhdHMsCiAJLmdldF9zc2V0X2NvdW50ID0gcWxjbmljX2dldF9zc2V0X2NvdW50LAotCS5nZXRfcnhfY3N1bSA9IHFsY25pY19nZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0gPSBxbGNuaWNfc2V0X3J4X2NzdW0sCiAJLmdldF9jb2FsZXNjZSA9IHFsY25pY19nZXRfaW50cl9jb2FsZXNjZSwKIAkuc2V0X2NvYWxlc2NlID0gcWxjbmljX3NldF9pbnRyX2NvYWxlc2NlLAotCS5nZXRfZmxhZ3MgPSBldGh0b29sX29wX2dldF9mbGFncywKLQkuc2V0X2ZsYWdzID0gcWxjbmljX3NldF9mbGFncywKLQkucGh5c19pZCA9IHFsY25pY19ibGlua19sZWQsCisJLnNldF9waHlzX2lkID0gcWxjbmljX3NldF9sZWQsCiAJLnNldF9tc2dsZXZlbCA9IHFsY25pY19zZXRfbXNnbGV2ZWwsCiAJLmdldF9tc2dsZXZlbCA9IHFsY25pY19nZXRfbXNnbGV2ZWwsCisJLmdldF9kdW1wX2ZsYWcgPSBxbGNuaWNfZ2V0X2R1bXBfZmxhZywKKwkuZ2V0X2R1bXBfZGF0YSA9IHFsY25pY19nZXRfZHVtcF9kYXRhLAorCS5zZXRfZHVtcCA9IHFsY25pY19zZXRfZHVtcCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2hkci5oIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19oZHIuaAppbmRleCA3MjZlZjU1Li5kMTQ1MDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2hkci5oCisrKyBiL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfaGRyLmgKQEAgLTQ5MiwxMCArNDkyLDEwIEBACiAKICNkZWZpbmUgVEVTVF9BR1RfQ1RSTAkoMHgwMCkKIAotI2RlZmluZSBUQV9DVExfU1RBUlQJMQotI2RlZmluZSBUQV9DVExfRU5BQkxFCTIKLSNkZWZpbmUgVEFfQ1RMX1dSSVRFCTQKLSNkZWZpbmUgVEFfQ1RMX0JVU1kJOAorI2RlZmluZSBUQV9DVExfU1RBUlQJQklUXzAKKyNkZWZpbmUgVEFfQ1RMX0VOQUJMRQlCSVRfMQorI2RlZmluZSBUQV9DVExfV1JJVEUJQklUXzIKKyNkZWZpbmUgVEFfQ1RMX0JVU1kJQklUXzMKIAogLyoKICAqICAgUmVnaXN0ZXIgb2Zmc2V0cyBmb3IgTU4KQEAgLTc2NSw2ICs3NjUsMzggQEAKICNkZWZpbmUgUUxDTklDX01BWF9QQ0lfRlVOQwk4CiAjZGVmaW5lIFFMQ05JQ19NQVhfVkxBTl9GSUxURVJTCTY0CiAKKy8qIEZXIGR1bXAgZGVmaW5lcyAqLworI2RlZmluZSBNSVVfVEVTVF9DVFIJCTB4NDEwMDAwOTAKKyNkZWZpbmUgTUlVX1RFU1RfQUREUl9MTwkweDQxMDAwMDk0CisjZGVmaW5lIE1JVV9URVNUX0FERFJfSEkJMHg0MTAwMDA5OAorI2RlZmluZSBGTEFTSF9ST01fV0lORE9XCTB4NDIxMTAwMzAKKyNkZWZpbmUgRkxBU0hfUk9NX0RBVEEJCTB4NDIxNTAwMDAKKworc3RhdGljIGNvbnN0IHUzMiBNSVVfVEVTVF9SRUFEX0RBVEFbXSA9IHsKKwkweDQxMDAwMEE4LCAweDQxMDAwMEFDLCAweDQxMDAwMEI4LCAweDQxMDAwMEJDLCB9OworCisjZGVmaW5lIFFMQ05JQ19GV19EVU1QX1JFRzEJMHgwMDEzMDA2MAorI2RlZmluZSBRTENOSUNfRldfRFVNUF9SRUcyCTB4MDAxZTAwMDAKKyNkZWZpbmUgUUxDTklDX0ZMQVNIX1NFTTJfTEsJMHgwMDEzQzAxMAorI2RlZmluZSBRTENOSUNfRkxBU0hfU0VNMl9VTEsJMHgwMDEzQzAxNAorI2RlZmluZSBRTENOSUNfRkxBU0hfTE9DS19JRAkweDAwMUIyMTAwCisKKyNkZWZpbmUgUUxDTklDX1JEX0RVTVBfUkVHKGFkZHIsIGJhcjAsIGRhdGEpIGRvIHsJCQlcCisJd3JpdGVsKChhZGRyICYgMHhGRkZGMDAwMCksICh2b2lkICopIChiYXIwICsJCQlcCisJCVFMQ05JQ19GV19EVU1QX1JFRzEpKTsJCQkJCVwKKwlyZWFkbCgodm9pZCAqKSAoYmFyMCArIFFMQ05JQ19GV19EVU1QX1JFRzEpKTsJCQlcCisJKmRhdGEgPSByZWFkbCgodm9pZCAqKSAoYmFyMCArIFFMQ05JQ19GV19EVU1QX1JFRzIgKwkJXAorCQlMU1coYWRkcikpKTsJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIFFMQ05JQ19XUl9EVU1QX1JFRyhhZGRyLCBiYXIwLCBkYXRhKSBkbyB7CQkJXAorCXdyaXRlbCgoYWRkciAmIDB4RkZGRjAwMDApLCAodm9pZCAqKSAoYmFyMCArCQkJXAorCQlRTENOSUNfRldfRFVNUF9SRUcxKSk7CQkJCQlcCisJcmVhZGwoKHZvaWQgKikgKGJhcjAgKyBRTENOSUNfRldfRFVNUF9SRUcxKSk7CQkJXAorCXdyaXRlbChkYXRhLCAodm9pZCAqKSAoYmFyMCArIFFMQ05JQ19GV19EVU1QX1JFRzIgKyBMU1coYWRkcikpKTtcCisJcmVhZGwoKHZvaWQgKikgKGJhcjAgKyBRTENOSUNfRldfRFVNUF9SRUcyICsgTFNXKGFkZHIpKSk7CVwKK30gd2hpbGUgKDApCisKIC8qIFBDSSBmdW5jdGlvbiBvcGVyYXRpb25hbCBtb2RlICovCiBlbnVtIHsKIAlRTENOSUNfTUdNVF9GVU5DCT0gMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfaHcuYyBiL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfaHcuYwppbmRleCA2MTY5NDBmLi5lOTY1NjYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19ody5jCkBAIC05LDYgKzksNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCiAjZGVmaW5lIE1BU0sobikgKCgxVUxMPDwobikpLTEpCiAjZGVmaW5lIE9DTV9XSU5fUDNQKGFkZHIpIChhZGRyICYgMHhmZmMwMDAwKQpAQCAtNDU3LDcgKzQ1OCw3IEBACiAKIAlyZXEucWhkciA9IGNwdV90b19sZTY0KFFMQ05JQ19IT1NUX1JFUVVFU1QgPDwgMjMpOwogCi0Jd29yZCA9IFFMQ05JQ19IMkNfT1BDT0RFX1BST1hZX1NFVF9WUE9SVF9NSVNTX01PREUgfAorCXdvcmQgPSBRTENOSUNfSDJDX09QQ09ERV9TRVRfTUFDX1JFQ0VJVkVfTU9ERSB8CiAJCQkoKHU2NClhZGFwdGVyLT5wb3J0bnVtIDw8IDE2KTsKIAlyZXEucmVxX2hkciA9IGNwdV90b19sZTY0KHdvcmQpOwogCkBAIC01MzIsMzMgKzUzMywzMSBAQAogCX0KIH0KIAotI2RlZmluZQlRTENOSUNfQ09ORklHX0lOVFJfQ09BTEVTQ0UJMwotCiAvKgogICogU2VuZCB0aGUgaW50ZXJydXB0IGNvYWxlc2NpbmcgcGFyYW1ldGVyIHNldCBieSBldGh0b29sIHRvIHRoZSBjYXJkLgogICovCiBpbnQgcWxjbmljX2NvbmZpZ19pbnRyX2NvYWxlc2NlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgcWxjbmljX25pY19yZXEgcmVxOwotCXU2NCB3b3JkWzZdOwotCWludCBydiwgaTsKKwlpbnQgcnY7CiAKIAltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHN0cnVjdCBxbGNuaWNfbmljX3JlcSkpOwogCiAJcmVxLnFoZHIgPSBjcHVfdG9fbGU2NChRTENOSUNfSE9TVF9SRVFVRVNUIDw8IDIzKTsKIAotCXdvcmRbMF0gPSBRTENOSUNfQ09ORklHX0lOVFJfQ09BTEVTQ0UgfCAoKHU2NClhZGFwdGVyLT5wb3J0bnVtIDw8IDE2KTsKLQlyZXEucmVxX2hkciA9IGNwdV90b19sZTY0KHdvcmRbMF0pOworCXJlcS5yZXFfaGRyID0gY3B1X3RvX2xlNjQoUUxDTklDX0NPTkZJR19JTlRSX0NPQUxFU0NFIHwKKwkJKCh1NjQpIGFkYXB0ZXItPnBvcnRudW0gPDwgMTYpKTsKIAotCW1lbWNweSgmd29yZFswXSwgJmFkYXB0ZXItPmNvYWwsIHNpemVvZihhZGFwdGVyLT5jb2FsKSk7Ci0JZm9yIChpID0gMDsgaSA8IDY7IGkrKykKLQkJcmVxLndvcmRzW2ldID0gY3B1X3RvX2xlNjQod29yZFtpXSk7Ci0KKwlyZXEud29yZHNbMF0gPSBjcHVfdG9fbGU2NCgoKHU2NCkgYWRhcHRlci0+YWh3LT5jb2FsLmZsYWcpIDw8IDMyKTsKKwlyZXEud29yZHNbMl0gPSBjcHVfdG9fbGU2NChhZGFwdGVyLT5haHctPmNvYWwucnhfcGFja2V0cyB8CisJCQkoKHU2NCkgYWRhcHRlci0+YWh3LT5jb2FsLnJ4X3RpbWVfdXMpIDw8IDE2KTsKKwlyZXEud29yZHNbNV0gPSBjcHVfdG9fbGU2NChhZGFwdGVyLT5haHctPmNvYWwudGltZXJfb3V0IHwKKwkJCSgodTY0KSBhZGFwdGVyLT5haHctPmNvYWwudHlwZSkgPDwgMzIgfAorCQkJKCh1NjQpIGFkYXB0ZXItPmFody0+Y29hbC5zdHNfcmluZ19tYXNrKSA8PCA0MCk7CiAJcnYgPSBxbGNuaWNfc2VuZF9jbWRfZGVzY3MoYWRhcHRlciwgKHN0cnVjdCBjbWRfZGVzY190eXBlMCAqKSZyZXEsIDEpOwogCWlmIChydiAhPSAwKQogCQlkZXZfZXJyKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKIAkJCSJDb3VsZCBub3Qgc2VuZCBpbnRlcnJ1cHQgY29hbGVzY2luZyBwYXJhbWV0ZXJzXG4iKTsKLQogCXJldHVybiBydjsKIH0KIApAQCAtNTY4LDYgKzU2Nyw5IEBACiAJdTY0IHdvcmQ7CiAJaW50IHJ2OwogCisJaWYgKCF0ZXN0X2JpdChfX1FMQ05JQ19GV19BVFRBQ0hFRCwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJcmV0dXJuIDA7CisKIAltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHN0cnVjdCBxbGNuaWNfbmljX3JlcSkpOwogCiAJcmVxLnFoZHIgPSBjcHVfdG9fbGU2NChRTENOSUNfSE9TVF9SRVFVRVNUIDw8IDIzKTsKQEAgLTcxMyw2ICs3MTUsOSBAQAogCXU2NCB3b3JkOwogCWludCBydjsKIAorCWlmICghdGVzdF9iaXQoX19RTENOSUNfRldfQVRUQUNIRUQsICZhZGFwdGVyLT5zdGF0ZSkpCisJCXJldHVybiAwOworCiAJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihzdHJ1Y3QgcWxjbmljX25pY19yZXEpKTsKIAlyZXEucWhkciA9IGNwdV90b19sZTY0KFFMQ05JQ19IT1NUX1JFUVVFU1QgPDwgMjMpOwogCkBAIC03NTQsNiArNzU5LDQzIEBACiAJcmV0dXJuIHJjOwogfQogCisKK3UzMiBxbGNuaWNfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBmZWF0dXJlcykKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKChhZGFwdGVyLT5mbGFncyAmIFFMQ05JQ19FU1dJVENIX0VOQUJMRUQpKSB7CisJCXUzMiBjaGFuZ2VkID0gZmVhdHVyZXMgXiBuZXRkZXYtPmZlYXR1cmVzOworCQlmZWF0dXJlcyBePSBjaGFuZ2VkICYgKE5FVElGX0ZfQUxMX0NTVU0gfCBORVRJRl9GX1JYQ1NVTSk7CisJfQorCisJaWYgKCEoZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkpCisJCWZlYXR1cmVzICY9IH5ORVRJRl9GX0xSTzsKKworCXJldHVybiBmZWF0dXJlczsKK30KKworCitpbnQgcWxjbmljX3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZmVhdHVyZXMpCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwl1MzIgY2hhbmdlZCA9IG5ldGRldi0+ZmVhdHVyZXMgXiBmZWF0dXJlczsKKwlpbnQgaHdfbHJvID0gKGZlYXR1cmVzICYgTkVUSUZfRl9MUk8pID8gUUxDTklDX0xST19FTkFCTEVEIDogMDsKKworCWlmICghKGNoYW5nZWQgJiBORVRJRl9GX0xSTykpCisJCXJldHVybiAwOworCisJbmV0ZGV2LT5mZWF0dXJlcyA9IGZlYXR1cmVzIF4gTkVUSUZfRl9MUk87CisKKwlpZiAocWxjbmljX2NvbmZpZ19od19scm8oYWRhcHRlciwgaHdfbHJvKSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoKGh3X2xybyA9PSAwKSAmJiBxbGNuaWNfc2VuZF9scm9fY2xlYW51cChhZGFwdGVyKSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIENoYW5nZXMgdGhlIENSQiB3aW5kb3cgdG8gdGhlIHNwZWNpZmllZCB3aW5kb3cuCiAgKi8KQEAgLTc4MCw3ICs4MjIsNyBAQAogCW0gPSAmY3JiXzEyOE1fMk1fbWFwW0NSQl9CTEsob2ZmKV0uc3ViX2Jsb2NrW0NSQl9TVUJCTEsob2ZmKV07CiAKIAlpZiAobS0+dmFsaWQgJiYgKG0tPnN0YXJ0XzEyOE0gPD0gb2ZmKSAmJiAobS0+ZW5kXzEyOE0gPiBvZmYpKSB7Ci0JCSphZGRyID0gYWRhcHRlci0+YWh3LnBjaV9iYXNlMCArIG0tPnN0YXJ0XzJNICsKKwkJKmFkZHIgPSBhZGFwdGVyLT5haHctPnBjaV9iYXNlMCArIG0tPnN0YXJ0XzJNICsKIAkJCShvZmYgLSBtLT5zdGFydF8xMjhNKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNzg4LDcgKzgzMCw3IEBACiAJLyoKIAkgKiBOb3QgaW4gZGlyZWN0IG1hcCwgdXNlIGNyYiB3aW5kb3cKIAkgKi8KLQkqYWRkciA9IGFkYXB0ZXItPmFody5wY2lfYmFzZTAgKyBDUkJfSU5ESVJFQ1RfMk0gKyAob2ZmICYgTUFTSygxNikpOworCSphZGRyID0gYWRhcHRlci0+YWh3LT5wY2lfYmFzZTAgKyBDUkJfSU5ESVJFQ1RfMk0gKyAob2ZmICYgTUFTSygxNikpOwogCXJldHVybiAxOwogfQogCkBAIC04MDEsNyArODQzLDcgQEAKIHFsY25pY19wY2lfc2V0X2NyYndpbmRvd18yTShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHVsb25nIG9mZikKIHsKIAl1MzIgd2luZG93OwotCXZvaWQgX19pb21lbSAqYWRkciA9IGFkYXB0ZXItPmFody5wY2lfYmFzZTAgKyBDUkJfV0lORE9XXzJNOworCXZvaWQgX19pb21lbSAqYWRkciA9IGFkYXB0ZXItPmFody0+cGNpX2Jhc2UwICsgQ1JCX1dJTkRPV18yTTsKIAogCW9mZiAtPSBRTENOSUNfUENJX0NSQlNQQUNFOwogCkBAIC04MzgsMTMgKzg4MCwxMyBAQAogCiAJaWYgKHJ2ID4gMCkgewogCQkvKiBpbmRpcmVjdCBhY2Nlc3MgKi8KLQkJd3JpdGVfbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5haHcuY3JiX2xvY2ssIGZsYWdzKTsKKwkJd3JpdGVfbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5haHctPmNyYl9sb2NrLCBmbGFncyk7CiAJCWNyYl93aW5fbG9jayhhZGFwdGVyKTsKIAkJcnYgPSBxbGNuaWNfcGNpX3NldF9jcmJ3aW5kb3dfMk0oYWRhcHRlciwgb2ZmKTsKIAkJaWYgKCFydikKIAkJCXdyaXRlbChkYXRhLCBhZGRyKTsKIAkJY3JiX3dpbl91bmxvY2soYWRhcHRlcik7Ci0JCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5haHcuY3JiX2xvY2ssIGZsYWdzKTsKKwkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFody0+Y3JiX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIHJ2OwogCX0KIApAQCAtODY5LDEyICs5MTEsMTIgQEAKIAogCWlmIChydiA+IDApIHsKIAkJLyogaW5kaXJlY3QgYWNjZXNzICovCi0JCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+YWh3LmNyYl9sb2NrLCBmbGFncyk7CisJCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+YWh3LT5jcmJfbG9jaywgZmxhZ3MpOwogCQljcmJfd2luX2xvY2soYWRhcHRlcik7CiAJCWlmICghcWxjbmljX3BjaV9zZXRfY3Jid2luZG93XzJNKGFkYXB0ZXIsIG9mZikpCiAJCQlkYXRhID0gcmVhZGwoYWRkcik7CiAJCWNyYl93aW5fdW5sb2NrKGFkYXB0ZXIpOwotCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+YWh3LmNyYl9sb2NrLCBmbGFncyk7CisJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5haHctPmNyYl9sb2NrLCBmbGFncyk7CiAJCXJldHVybiBkYXRhOwogCX0KIApAQCAtOTA0LDkgKzk0Niw5IEBACiAKIAl3aW5kb3cgPSBPQ01fV0lOX1AzUChhZGRyKTsKIAotCXdyaXRlbCh3aW5kb3csIGFkYXB0ZXItPmFody5vY21fd2luX2NyYik7CisJd3JpdGVsKHdpbmRvdywgYWRhcHRlci0+YWh3LT5vY21fd2luX2NyYik7CiAJLyogcmVhZCBiYWNrIHRvIGZsdXNoICovCi0JcmVhZGwoYWRhcHRlci0+YWh3Lm9jbV93aW5fY3JiKTsKKwlyZWFkbChhZGFwdGVyLT5haHctPm9jbV93aW5fY3JiKTsKIAogCSpzdGFydCA9IFFMQ05JQ19QQ0lfT0NNMF8yTSArIEdFVF9NRU1fT0ZGU18yTShhZGRyKTsKIAlyZXR1cm4gMDsKQEAgLTkyMCwxMyArOTYyLDEzIEBACiAJaW50IHJldDsKIAl1MzIgc3RhcnQ7CiAKLQltdXRleF9sb2NrKCZhZGFwdGVyLT5haHcubWVtX2xvY2spOworCW11dGV4X2xvY2soJmFkYXB0ZXItPmFody0+bWVtX2xvY2spOwogCiAJcmV0ID0gcWxjbmljX3BjaV9zZXRfd2luZG93XzJNKGFkYXB0ZXIsIG9mZiwgJnN0YXJ0KTsKIAlpZiAocmV0ICE9IDApCiAJCWdvdG8gdW5sb2NrOwogCi0JYWRkciA9IGFkYXB0ZXItPmFody5wY2lfYmFzZTAgKyBzdGFydDsKKwlhZGRyID0gYWRhcHRlci0+YWh3LT5wY2lfYmFzZTAgKyBzdGFydDsKIAogCWlmIChvcCA9PSAwKQkvKiByZWFkICovCiAJCSpkYXRhID0gcmVhZHEoYWRkcik7CkBAIC05MzQsNyArOTc2LDcgQEAKIAkJd3JpdGVxKCpkYXRhLCBhZGRyKTsKIAogdW5sb2NrOgotCW11dGV4X3VubG9jaygmYWRhcHRlci0+YWh3Lm1lbV9sb2NrKTsKKwltdXRleF91bmxvY2soJmFkYXB0ZXItPmFody0+bWVtX2xvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTk0MiwyMyArOTg0LDIzIEBACiB2b2lkCiBxbGNuaWNfcGNpX2NhbXFtX3JlYWRfMk0oc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1NjQgb2ZmLCB1NjQgKmRhdGEpCiB7Ci0Jdm9pZCBfX2lvbWVtICphZGRyID0gYWRhcHRlci0+YWh3LnBjaV9iYXNlMCArCisJdm9pZCBfX2lvbWVtICphZGRyID0gYWRhcHRlci0+YWh3LT5wY2lfYmFzZTAgKwogCQlRTENOSUNfUENJX0NBTVFNXzJNX0JBU0UgKyAob2ZmIC0gUUxDTklDX1BDSV9DQU1RTSk7CiAKLQltdXRleF9sb2NrKCZhZGFwdGVyLT5haHcubWVtX2xvY2spOworCW11dGV4X2xvY2soJmFkYXB0ZXItPmFody0+bWVtX2xvY2spOwogCSpkYXRhID0gcmVhZHEoYWRkcik7Ci0JbXV0ZXhfdW5sb2NrKCZhZGFwdGVyLT5haHcubWVtX2xvY2spOworCW11dGV4X3VubG9jaygmYWRhcHRlci0+YWh3LT5tZW1fbG9jayk7CiB9CiAKIHZvaWQKIHFsY25pY19wY2lfY2FtcW1fd3JpdGVfMk0oc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1NjQgb2ZmLCB1NjQgZGF0YSkKIHsKLQl2b2lkIF9faW9tZW0gKmFkZHIgPSBhZGFwdGVyLT5haHcucGNpX2Jhc2UwICsKKwl2b2lkIF9faW9tZW0gKmFkZHIgPSBhZGFwdGVyLT5haHctPnBjaV9iYXNlMCArCiAJCVFMQ05JQ19QQ0lfQ0FNUU1fMk1fQkFTRSArIChvZmYgLSBRTENOSUNfUENJX0NBTVFNKTsKIAotCW11dGV4X2xvY2soJmFkYXB0ZXItPmFody5tZW1fbG9jayk7CisJbXV0ZXhfbG9jaygmYWRhcHRlci0+YWh3LT5tZW1fbG9jayk7CiAJd3JpdGVxKGRhdGEsIGFkZHIpOwotCW11dGV4X3VubG9jaygmYWRhcHRlci0+YWh3Lm1lbV9sb2NrKTsKKwltdXRleF91bmxvY2soJmFkYXB0ZXItPmFody0+bWVtX2xvY2spOwogfQogCiAjZGVmaW5lIE1BWF9DVExfQ0hFQ0sgICAxMDAwCkBAIC05OTcsNyArMTAzOSw3IEBACiBjb3JyZWN0OgogCW9mZjggPSBvZmYgJiB+MHhmOwogCi0JbXV0ZXhfbG9jaygmYWRhcHRlci0+YWh3Lm1lbV9sb2NrKTsKKwltdXRleF9sb2NrKCZhZGFwdGVyLT5haHctPm1lbV9sb2NrKTsKIAogCXdyaXRlbChvZmY4LCAobWVtX2NyYiArIE1JVV9URVNUX0FHVF9BRERSX0xPKSk7CiAJd3JpdGVsKDAsIChtZW1fY3JiICsgTUlVX1RFU1RfQUdUX0FERFJfSEkpKTsKQEAgLTEwNDksNyArMTA5MSw3IEBACiAJCXJldCA9IDA7CiAKIGRvbmU6Ci0JbXV0ZXhfdW5sb2NrKCZhZGFwdGVyLT5haHcubWVtX2xvY2spOworCW11dGV4X3VubG9jaygmYWRhcHRlci0+YWh3LT5tZW1fbG9jayk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTA5MSw3ICsxMTMzLDcgQEAKIGNvcnJlY3Q6CiAJb2ZmOCA9IG9mZiAmIH4weGY7CiAKLQltdXRleF9sb2NrKCZhZGFwdGVyLT5haHcubWVtX2xvY2spOworCW11dGV4X2xvY2soJmFkYXB0ZXItPmFody0+bWVtX2xvY2spOwogCiAJd3JpdGVsKG9mZjgsIChtZW1fY3JiICsgTUlVX1RFU1RfQUdUX0FERFJfTE8pKTsKIAl3cml0ZWwoMCwgKG1lbV9jcmIgKyBNSVVfVEVTVF9BR1RfQUREUl9ISSkpOwpAQCAtMTEyMSw3ICsxMTYzLDcgQEAKIAkJcmV0ID0gMDsKIAl9CiAKLQltdXRleF91bmxvY2soJmFkYXB0ZXItPmFody5tZW1fbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZhZGFwdGVyLT5haHctPm1lbV9sb2NrKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMTQ1LDcgKzExODcsNyBAQAogCWlmIChxbGNuaWNfcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBvZmZzZXQsICZib2FyZF90eXBlKSkKIAkJcmV0dXJuIC1FSU87CiAKLQlhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9IGJvYXJkX3R5cGU7CisJYWRhcHRlci0+YWh3LT5ib2FyZF90eXBlID0gYm9hcmRfdHlwZTsKIAogCWlmIChib2FyZF90eXBlID09IFFMQ05JQ19CUkRUWVBFX1AzUF80X0dCX01NKSB7CiAJCXUzMiBncGlvID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfUk9NVVNCX0dMQl9QQURfR1BJT19JKTsKQEAgLTExNjQsMjAgKzEyMDYsMjAgQEAKIAljYXNlIFFMQ05JQ19CUkRUWVBFX1AzUF8xMEdfU0ZQX1FUOgogCWNhc2UgUUxDTklDX0JSRFRZUEVfUDNQXzEwR19YRlA6CiAJY2FzZSBRTENOSUNfQlJEVFlQRV9QM1BfMTAwMDBfQkFTRV9UOgotCQlhZGFwdGVyLT5haHcucG9ydF90eXBlID0gUUxDTklDX1hHQkU7CisJCWFkYXB0ZXItPmFody0+cG9ydF90eXBlID0gUUxDTklDX1hHQkU7CiAJCWJyZWFrOwogCWNhc2UgUUxDTklDX0JSRFRZUEVfUDNQX1JFRl9RRzoKIAljYXNlIFFMQ05JQ19CUkRUWVBFX1AzUF80X0dCOgogCWNhc2UgUUxDTklDX0JSRFRZUEVfUDNQXzRfR0JfTU06Ci0JCWFkYXB0ZXItPmFody5wb3J0X3R5cGUgPSBRTENOSUNfR0JFOworCQlhZGFwdGVyLT5haHctPnBvcnRfdHlwZSA9IFFMQ05JQ19HQkU7CiAJCWJyZWFrOwogCWNhc2UgUUxDTklDX0JSRFRZUEVfUDNQXzEwR19UUDoKLQkJYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9IChhZGFwdGVyLT5wb3J0bnVtIDwgMikgPworCQlhZGFwdGVyLT5haHctPnBvcnRfdHlwZSA9IChhZGFwdGVyLT5wb3J0bnVtIDwgMikgPwogCQkJUUxDTklDX1hHQkUgOiBRTENOSUNfR0JFOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmtub3duIGJvYXJkIHR5cGUgJXhcbiIsIGJvYXJkX3R5cGUpOwotCQlhZGFwdGVyLT5haHcucG9ydF90eXBlID0gUUxDTklDX1hHQkU7CisJCWFkYXB0ZXItPmFody0+cG9ydF90eXBlID0gUUxDTklDX1hHQkU7CiAJCWJyZWFrOwogCX0KIApAQCAtMTIyMCwzICsxMjYyLDQ2MSBAQAogCiAJcmV0dXJuIHJ2OwogfQorCisvKiBGVyBkdW1wIHJlbGF0ZWQgZnVuY3Rpb25zICovCitzdGF0aWMgdTMyCitxbGNuaWNfZHVtcF9jcmIoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgcWxjbmljX2R1bXBfZW50cnkgKmVudHJ5LAorCQl1MzIgKmJ1ZmZlcikKK3sKKwlpbnQgaTsKKwl1MzIgYWRkciwgZGF0YTsKKwlzdHJ1Y3QgX19jcmIgKmNyYiA9ICZlbnRyeS0+cmVnaW9uLmNyYjsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBhZGFwdGVyLT5haHctPnBjaV9iYXNlMDsKKworCWFkZHIgPSBjcmItPmFkZHI7CisKKwlmb3IgKGkgPSAwOyBpIDwgY3JiLT5ub19vcHM7IGkrKykgeworCQlRTENOSUNfUkRfRFVNUF9SRUcoYWRkciwgYmFzZSwgJmRhdGEpOworCQkqYnVmZmVyKysgPSBjcHVfdG9fbGUzMihhZGRyKTsKKwkJKmJ1ZmZlcisrID0gY3B1X3RvX2xlMzIoZGF0YSk7CisJCWFkZHIgKz0gY3JiLT5zdHJpZGU7CisJfQorCXJldHVybiBjcmItPm5vX29wcyAqIDIgKiBzaXplb2YodTMyKTsKK30KKworc3RhdGljIHUzMgorcWxjbmljX2R1bXBfY3RybChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsCisJc3RydWN0IHFsY25pY19kdW1wX2VudHJ5ICplbnRyeSwgdTMyICpidWZmZXIpCit7CisJaW50IGksIGssIHRpbWVvdXQgPSAwOworCXZvaWQgX19pb21lbSAqYmFzZSA9IGFkYXB0ZXItPmFody0+cGNpX2Jhc2UwOworCXUzMiBhZGRyLCBkYXRhOworCXU4IG9wY29kZSwgbm9fb3BzOworCXN0cnVjdCBfX2N0cmwgKmN0ciA9ICZlbnRyeS0+cmVnaW9uLmN0cmw7CisJc3RydWN0IHFsY25pY19kdW1wX3RlbXBsYXRlX2hkciAqdF9oZHIgPSBhZGFwdGVyLT5haHctPmZ3X2R1bXAudG1wbF9oZHI7CisKKwlhZGRyID0gY3RyLT5hZGRyOworCW5vX29wcyA9IGN0ci0+bm9fb3BzOworCisJZm9yIChpID0gMDsgaSA8IG5vX29wczsgaSsrKSB7CisJCWsgPSAwOworCQlvcGNvZGUgPSAwOworCQlmb3IgKGsgPSAwOyBrIDwgODsgaysrKSB7CisJCQlpZiAoIShjdHItPm9wY29kZSAmICgxIDw8IGspKSkKKwkJCQljb250aW51ZTsKKwkJCXN3aXRjaCAoMSA8PCBrKSB7CisJCQljYXNlIFFMQ05JQ19EVU1QX1dDUkI6CisJCQkJUUxDTklDX1dSX0RVTVBfUkVHKGFkZHIsIGJhc2UsIGN0ci0+dmFsMSk7CisJCQkJYnJlYWs7CisJCQljYXNlIFFMQ05JQ19EVU1QX1JXQ1JCOgorCQkJCVFMQ05JQ19SRF9EVU1QX1JFRyhhZGRyLCBiYXNlLCAmZGF0YSk7CisJCQkJUUxDTklDX1dSX0RVTVBfUkVHKGFkZHIsIGJhc2UsIGRhdGEpOworCQkJCWJyZWFrOworCQkJY2FzZSBRTENOSUNfRFVNUF9BTkRDUkI6CisJCQkJUUxDTklDX1JEX0RVTVBfUkVHKGFkZHIsIGJhc2UsICZkYXRhKTsKKwkJCQlRTENOSUNfV1JfRFVNUF9SRUcoYWRkciwgYmFzZSwKKwkJCQkJKGRhdGEgJiBjdHItPnZhbDIpKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUUxDTklDX0RVTVBfT1JDUkI6CisJCQkJUUxDTklDX1JEX0RVTVBfUkVHKGFkZHIsIGJhc2UsICZkYXRhKTsKKwkJCQlRTENOSUNfV1JfRFVNUF9SRUcoYWRkciwgYmFzZSwKKwkJCQkJKGRhdGEgfCBjdHItPnZhbDMpKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUUxDTklDX0RVTVBfUE9MTENSQjoKKwkJCQl3aGlsZSAodGltZW91dCA8PSBjdHItPnRpbWVvdXQpIHsKKwkJCQkJUUxDTklDX1JEX0RVTVBfUkVHKGFkZHIsIGJhc2UsICZkYXRhKTsKKwkJCQkJaWYgKChkYXRhICYgY3RyLT52YWwyKSA9PSBjdHItPnZhbDEpCisJCQkJCQlicmVhazsKKwkJCQkJbXNsZWVwKDEpOworCQkJCQl0aW1lb3V0Kys7CisJCQkJfQorCQkJCWlmICh0aW1lb3V0ID4gY3RyLT50aW1lb3V0KSB7CisJCQkJCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJCSJUaW1lZCBvdXQsIGFib3J0aW5nIHBvbGwgQ1JCXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBRTENOSUNfRFVNUF9SRF9TQVZFOgorCQkJCWlmIChjdHItPmluZGV4X2EpCisJCQkJCWFkZHIgPSB0X2hkci0+c2F2ZWRfc3RhdGVbY3RyLT5pbmRleF9hXTsKKwkJCQlRTENOSUNfUkRfRFVNUF9SRUcoYWRkciwgYmFzZSwgJmRhdGEpOworCQkJCXRfaGRyLT5zYXZlZF9zdGF0ZVtjdHItPmluZGV4X3ZdID0gZGF0YTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUUxDTklDX0RVTVBfV1JUX1NBVkVEOgorCQkJCWlmIChjdHItPmluZGV4X3YpCisJCQkJCWRhdGEgPSB0X2hkci0+c2F2ZWRfc3RhdGVbY3RyLT5pbmRleF92XTsKKwkJCQllbHNlCisJCQkJCWRhdGEgPSBjdHItPnZhbDE7CisJCQkJaWYgKGN0ci0+aW5kZXhfYSkKKwkJCQkJYWRkciA9IHRfaGRyLT5zYXZlZF9zdGF0ZVtjdHItPmluZGV4X2FdOworCQkJCVFMQ05JQ19XUl9EVU1QX1JFRyhhZGRyLCBiYXNlLCBkYXRhKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUUxDTklDX0RVTVBfTU9EX1NBVkVfU1Q6CisJCQkJZGF0YSA9IHRfaGRyLT5zYXZlZF9zdGF0ZVtjdHItPmluZGV4X3ZdOworCQkJCWRhdGEgPDw9IGN0ci0+c2hsX3ZhbDsKKwkJCQlkYXRhID4+PSBjdHItPnNocl92YWw7CisJCQkJaWYgKGN0ci0+dmFsMikKKwkJCQkJZGF0YSAmPSBjdHItPnZhbDI7CisJCQkJZGF0YSB8PSBjdHItPnZhbDM7CisJCQkJZGF0YSArPSBjdHItPnZhbDE7CisJCQkJdF9oZHItPnNhdmVkX3N0YXRlW2N0ci0+aW5kZXhfdl0gPSBkYXRhOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCQkiVW5rbm93biBvcGNvZGVcbiIpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWFkZHIgKz0gY3RyLT5zdHJpZGU7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyCitxbGNuaWNfZHVtcF9tdXgoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgcWxjbmljX2R1bXBfZW50cnkgKmVudHJ5LAorCXUzMiAqYnVmZmVyKQoreworCWludCBsb29wOworCXUzMiB2YWwsIGRhdGEgPSAwOworCXN0cnVjdCBfX211eCAqbXV4ID0gJmVudHJ5LT5yZWdpb24ubXV4OworCXZvaWQgX19pb21lbSAqYmFzZSA9IGFkYXB0ZXItPmFody0+cGNpX2Jhc2UwOworCisJdmFsID0gbXV4LT52YWw7CisJZm9yIChsb29wID0gMDsgbG9vcCA8IG11eC0+bm9fb3BzOyBsb29wKyspIHsKKwkJUUxDTklDX1dSX0RVTVBfUkVHKG11eC0+YWRkciwgYmFzZSwgdmFsKTsKKwkJUUxDTklDX1JEX0RVTVBfUkVHKG11eC0+cmVhZF9hZGRyLCBiYXNlLCAmZGF0YSk7CisJCSpidWZmZXIrKyA9IGNwdV90b19sZTMyKHZhbCk7CisJCSpidWZmZXIrKyA9IGNwdV90b19sZTMyKGRhdGEpOworCQl2YWwgKz0gbXV4LT52YWxfc3RyaWRlOworCX0KKwlyZXR1cm4gMiAqIG11eC0+bm9fb3BzICogc2l6ZW9mKHUzMik7Cit9CisKK3N0YXRpYyB1MzIKK3FsY25pY19kdW1wX3F1ZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBxbGNuaWNfZHVtcF9lbnRyeSAqZW50cnksCisJdTMyICpidWZmZXIpCit7CisJaW50IGksIGxvb3A7CisJdTMyIGNudCwgYWRkciwgZGF0YSwgcXVlX2lkID0gMDsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBhZGFwdGVyLT5haHctPnBjaV9iYXNlMDsKKwlzdHJ1Y3QgX19xdWV1ZSAqcXVlID0gJmVudHJ5LT5yZWdpb24ucXVlOworCisJYWRkciA9IHF1ZS0+cmVhZF9hZGRyOworCWNudCA9IHF1ZS0+cmVhZF9hZGRyX2NudDsKKworCWZvciAobG9vcCA9IDA7IGxvb3AgPCBxdWUtPm5vX29wczsgbG9vcCsrKSB7CisJCVFMQ05JQ19XUl9EVU1QX1JFRyhxdWUtPnNlbF9hZGRyLCBiYXNlLCBxdWVfaWQpOworCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspIHsKKwkJCVFMQ05JQ19SRF9EVU1QX1JFRyhhZGRyLCBiYXNlLCAmZGF0YSk7CisJCQkqYnVmZmVyKysgPSBjcHVfdG9fbGUzMihkYXRhKTsKKwkJCWFkZHIgKz0gcXVlLT5yZWFkX2FkZHJfc3RyaWRlOworCQl9CisJCXF1ZV9pZCArPSBxdWUtPnN0cmlkZTsKKwl9CisJcmV0dXJuIHF1ZS0+bm9fb3BzICogY250ICogc2l6ZW9mKHUzMik7Cit9CisKK3N0YXRpYyB1MzIKK3FsY25pY19kdW1wX29jbShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBxbGNuaWNfZHVtcF9lbnRyeSAqZW50cnksCisJdTMyICpidWZmZXIpCit7CisJaW50IGk7CisJdTMyIGRhdGE7CisJdm9pZCBfX2lvbWVtICphZGRyOworCXN0cnVjdCBfX29jbSAqb2NtID0gJmVudHJ5LT5yZWdpb24ub2NtOworCisJYWRkciA9IGFkYXB0ZXItPmFody0+cGNpX2Jhc2UwICsgb2NtLT5yZWFkX2FkZHI7CisJZm9yIChpID0gMDsgaSA8IG9jbS0+bm9fb3BzOyBpKyspIHsKKwkJZGF0YSA9IHJlYWRsKGFkZHIpOworCQkqYnVmZmVyKysgPSBjcHVfdG9fbGUzMihkYXRhKTsKKwkJYWRkciArPSBvY20tPnJlYWRfYWRkcl9zdHJpZGU7CisJfQorCXJldHVybiBvY20tPm5vX29wcyAqIHNpemVvZih1MzIpOworfQorCitzdGF0aWMgdTMyCitxbGNuaWNfcmVhZF9yb20oc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgcWxjbmljX2R1bXBfZW50cnkgKmVudHJ5LAorCXUzMiAqYnVmZmVyKQoreworCWludCBpLCBjb3VudCA9IDA7CisJdTMyIGZsX2FkZHIsIHNpemUsIHZhbCwgbGNrX3ZhbCwgYWRkcjsKKwlzdHJ1Y3QgX19tZW0gKnJvbSA9ICZlbnRyeS0+cmVnaW9uLm1lbTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBhZGFwdGVyLT5haHctPnBjaV9iYXNlMDsKKworCWZsX2FkZHIgPSByb20tPmFkZHI7CisJc2l6ZSA9IHJvbS0+c2l6ZS80OworbG9ja190cnk6CisJbGNrX3ZhbCA9IHJlYWRsKGJhc2UgKyBRTENOSUNfRkxBU0hfU0VNMl9MSyk7CisJaWYgKCFsY2tfdmFsICYmIGNvdW50IDwgTUFYX0NUTF9DSEVDSykgeworCQltc2xlZXAoMTApOworCQljb3VudCsrOworCQlnb3RvIGxvY2tfdHJ5OworCX0KKwl3cml0ZWwoYWRhcHRlci0+YWh3LT5wY2lfZnVuYywgKGJhc2UgKyBRTENOSUNfRkxBU0hfTE9DS19JRCkpOworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJYWRkciA9IGZsX2FkZHIgJiAweEZGRkYwMDAwOworCQlRTENOSUNfV1JfRFVNUF9SRUcoRkxBU0hfUk9NX1dJTkRPVywgYmFzZSwgYWRkcik7CisJCWFkZHIgPSBMU1coZmxfYWRkcikgKyBGTEFTSF9ST01fREFUQTsKKwkJUUxDTklDX1JEX0RVTVBfUkVHKGFkZHIsIGJhc2UsICZ2YWwpOworCQlmbF9hZGRyICs9IDQ7CisJCSpidWZmZXIrKyA9IGNwdV90b19sZTMyKHZhbCk7CisJfQorCXJlYWRsKGJhc2UgKyBRTENOSUNfRkxBU0hfU0VNMl9VTEspOworCXJldHVybiByb20tPnNpemU7Cit9CisKK3N0YXRpYyB1MzIKK3FsY25pY19kdW1wX2wxX2NhY2hlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwKKwlzdHJ1Y3QgcWxjbmljX2R1bXBfZW50cnkgKmVudHJ5LCB1MzIgKmJ1ZmZlcikKK3sKKwlpbnQgaTsKKwl1MzIgY250LCB2YWwsIGRhdGEsIGFkZHI7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gYWRhcHRlci0+YWh3LT5wY2lfYmFzZTA7CisJc3RydWN0IF9fY2FjaGUgKmwxID0gJmVudHJ5LT5yZWdpb24uY2FjaGU7CisKKwl2YWwgPSBsMS0+aW5pdF90YWdfdmFsOworCisJZm9yIChpID0gMDsgaSA8IGwxLT5ub19vcHM7IGkrKykgeworCQlRTENOSUNfV1JfRFVNUF9SRUcobDEtPmFkZHIsIGJhc2UsIHZhbCk7CisJCVFMQ05JQ19XUl9EVU1QX1JFRyhsMS0+Y3RybF9hZGRyLCBiYXNlLCBMU1cobDEtPmN0cmxfdmFsKSk7CisJCWFkZHIgPSBsMS0+cmVhZF9hZGRyOworCQljbnQgPSBsMS0+cmVhZF9hZGRyX251bTsKKwkJd2hpbGUgKGNudCkgeworCQkJUUxDTklDX1JEX0RVTVBfUkVHKGFkZHIsIGJhc2UsICZkYXRhKTsKKwkJCSpidWZmZXIrKyA9IGNwdV90b19sZTMyKGRhdGEpOworCQkJYWRkciArPSBsMS0+cmVhZF9hZGRyX3N0cmlkZTsKKwkJCWNudC0tOworCQl9CisJCXZhbCArPSBsMS0+c3RyaWRlOworCX0KKwlyZXR1cm4gbDEtPm5vX29wcyAqIGwxLT5yZWFkX2FkZHJfbnVtICogc2l6ZW9mKHUzMik7Cit9CisKK3N0YXRpYyB1MzIKK3FsY25pY19kdW1wX2wyX2NhY2hlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwKKwlzdHJ1Y3QgcWxjbmljX2R1bXBfZW50cnkgKmVudHJ5LCB1MzIgKmJ1ZmZlcikKK3sKKwlpbnQgaTsKKwl1MzIgY250LCB2YWwsIGRhdGEsIGFkZHI7CisJdTggcG9sbF9tYXNrLCBwb2xsX3RvLCB0aW1lX291dCA9IDA7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gYWRhcHRlci0+YWh3LT5wY2lfYmFzZTA7CisJc3RydWN0IF9fY2FjaGUgKmwyID0gJmVudHJ5LT5yZWdpb24uY2FjaGU7CisKKwl2YWwgPSBsMi0+aW5pdF90YWdfdmFsOworCXBvbGxfbWFzayA9IExTQihNU1cobDItPmN0cmxfdmFsKSk7CisJcG9sbF90byA9IE1TQihNU1cobDItPmN0cmxfdmFsKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbDItPm5vX29wczsgaSsrKSB7CisJCVFMQ05JQ19XUl9EVU1QX1JFRyhsMi0+YWRkciwgYmFzZSwgdmFsKTsKKwkJZG8geworCQkJUUxDTklDX1dSX0RVTVBfUkVHKGwyLT5jdHJsX2FkZHIsIGJhc2UsCisJCQkJTFNXKGwyLT5jdHJsX3ZhbCkpOworCQkJUUxDTklDX1JEX0RVTVBfUkVHKGwyLT5jdHJsX2FkZHIsIGJhc2UsICZkYXRhKTsKKwkJCWlmICghKGRhdGEgJiBwb2xsX21hc2spKQorCQkJCWJyZWFrOworCQkJbXNsZWVwKDEpOworCQkJdGltZV9vdXQrKzsKKwkJfSB3aGlsZSAodGltZV9vdXQgPD0gcG9sbF90byk7CisJCWlmICh0aW1lX291dCA+IHBvbGxfdG8pCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlhZGRyID0gbDItPnJlYWRfYWRkcjsKKwkJY250ID0gbDItPnJlYWRfYWRkcl9udW07CisJCXdoaWxlIChjbnQpIHsKKwkJCVFMQ05JQ19SRF9EVU1QX1JFRyhhZGRyLCBiYXNlLCAmZGF0YSk7CisJCQkqYnVmZmVyKysgPSBjcHVfdG9fbGUzMihkYXRhKTsKKwkJCWFkZHIgKz0gbDItPnJlYWRfYWRkcl9zdHJpZGU7CisJCQljbnQtLTsKKwkJfQorCQl2YWwgKz0gbDItPnN0cmlkZTsKKwl9CisJcmV0dXJuIGwyLT5ub19vcHMgKiBsMi0+cmVhZF9hZGRyX251bSAqIHNpemVvZih1MzIpOworfQorCitzdGF0aWMgdTMyCitxbGNuaWNfcmVhZF9tZW1vcnkoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLAorCXN0cnVjdCBxbGNuaWNfZHVtcF9lbnRyeSAqZW50cnksIHUzMiAqYnVmZmVyKQoreworCXUzMiBhZGRyLCBkYXRhLCB0ZXN0LCByZXQgPSAwOworCWludCBpLCByZWdfcmVhZDsKKwlzdHJ1Y3QgX19tZW0gKm1lbSA9ICZlbnRyeS0+cmVnaW9uLm1lbTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBhZGFwdGVyLT5haHctPnBjaV9iYXNlMDsKKworCXJlZ19yZWFkID0gbWVtLT5zaXplOworCWFkZHIgPSBtZW0tPmFkZHI7CisJLyogY2hlY2sgZm9yIGRhdGEgc2l6ZSBvZiBtdWx0aXBsZSBvZiAxNiBhbmQgMTYgYnl0ZSBhbGlnbm1lbnQgKi8KKwlpZiAoKGFkZHIgJiAweGYpIHx8IChyZWdfcmVhZCUxNikpIHsKKwkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJVbmFsaWduZWQgbWVtb3J5IGFkZHI6MHgleCBzaXplOjB4JXhcbiIsCisJCQlhZGRyLCByZWdfcmVhZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW11dGV4X2xvY2soJmFkYXB0ZXItPmFody0+bWVtX2xvY2spOworCisJd2hpbGUgKHJlZ19yZWFkICE9IDApIHsKKwkJUUxDTklDX1dSX0RVTVBfUkVHKE1JVV9URVNUX0FERFJfTE8sIGJhc2UsIGFkZHIpOworCQlRTENOSUNfV1JfRFVNUF9SRUcoTUlVX1RFU1RfQUREUl9ISSwgYmFzZSwgMCk7CisJCVFMQ05JQ19XUl9EVU1QX1JFRyhNSVVfVEVTVF9DVFIsIGJhc2UsCisJCQlUQV9DVExfRU5BQkxFIHwgVEFfQ1RMX1NUQVJUKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0NUTF9DSEVDSzsgaSsrKSB7CisJCQlRTENOSUNfUkRfRFVNUF9SRUcoTUlVX1RFU1RfQ1RSLCBiYXNlLCAmdGVzdCk7CisJCQlpZiAoISh0ZXN0ICYgVEFfQ1RMX0JVU1kpKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChpID09IE1BWF9DVExfQ0hFQ0spIHsKKwkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpIHsKKwkJCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJCSJmYWlsZWQgdG8gcmVhZCB0aHJvdWdoIGFnZW50XG4iKTsKKwkJCQlyZXQgPSAtRUlOVkFMOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCVFMQ05JQ19SRF9EVU1QX1JFRyhNSVVfVEVTVF9SRUFEX0RBVEFbaV0sIGJhc2UsICZkYXRhKTsKKwkJCSpidWZmZXIrKyA9IGNwdV90b19sZTMyKGRhdGEpOworCQl9CisJCWFkZHIgKz0gMTY7CisJCXJlZ19yZWFkIC09IDE2OworCQlyZXQgKz0gMTY7CisJfQorb3V0OgorCW11dGV4X3VubG9jaygmYWRhcHRlci0+YWh3LT5tZW1fbG9jayk7CisJcmV0dXJuIG1lbS0+c2l6ZTsKK30KKworc3RhdGljIHUzMgorcWxjbmljX2R1bXBfbm9wKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwKKwlzdHJ1Y3QgcWxjbmljX2R1bXBfZW50cnkgKmVudHJ5LCB1MzIgKmJ1ZmZlcikKK3sKKwllbnRyeS0+aGRyLmZsYWdzIHw9IFFMQ05JQ19EVU1QX1NLSVA7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBxbGNuaWNfZHVtcF9vcGVyYXRpb25zIGZ3X2R1bXBfb3BzW10gPSB7CisJeyBRTENOSUNfRFVNUF9OT1AsIHFsY25pY19kdW1wX25vcCB9LAorCXsgUUxDTklDX0RVTVBfUkVBRF9DUkIsIHFsY25pY19kdW1wX2NyYiB9LAorCXsgUUxDTklDX0RVTVBfUkVBRF9NVVgsIHFsY25pY19kdW1wX211eCB9LAorCXsgUUxDTklDX0RVTVBfUVVFVUUsIHFsY25pY19kdW1wX3F1ZSB9LAorCXsgUUxDTklDX0RVTVBfQlJEX0NPTkZJRywgcWxjbmljX3JlYWRfcm9tIH0sCisJeyBRTENOSUNfRFVNUF9SRUFEX09DTSwgcWxjbmljX2R1bXBfb2NtIH0sCisJeyBRTENOSUNfRFVNUF9QRUdfUkVHLCBxbGNuaWNfZHVtcF9jdHJsIH0sCisJeyBRTENOSUNfRFVNUF9MMV9EVEFHLCBxbGNuaWNfZHVtcF9sMV9jYWNoZSB9LAorCXsgUUxDTklDX0RVTVBfTDFfSVRBRywgcWxjbmljX2R1bXBfbDFfY2FjaGUgfSwKKwl7IFFMQ05JQ19EVU1QX0wxX0RBVEEsIHFsY25pY19kdW1wX2wxX2NhY2hlIH0sCisJeyBRTENOSUNfRFVNUF9MMV9JTlNULCBxbGNuaWNfZHVtcF9sMV9jYWNoZSB9LAorCXsgUUxDTklDX0RVTVBfTDJfRFRBRywgcWxjbmljX2R1bXBfbDJfY2FjaGUgfSwKKwl7IFFMQ05JQ19EVU1QX0wyX0lUQUcsIHFsY25pY19kdW1wX2wyX2NhY2hlIH0sCisJeyBRTENOSUNfRFVNUF9MMl9EQVRBLCBxbGNuaWNfZHVtcF9sMl9jYWNoZSB9LAorCXsgUUxDTklDX0RVTVBfTDJfSU5TVCwgcWxjbmljX2R1bXBfbDJfY2FjaGUgfSwKKwl7IFFMQ05JQ19EVU1QX1JFQURfUk9NLCBxbGNuaWNfcmVhZF9yb20gfSwKKwl7IFFMQ05JQ19EVU1QX1JFQURfTUVNLCBxbGNuaWNfcmVhZF9tZW1vcnkgfSwKKwl7IFFMQ05JQ19EVU1QX1JFQURfQ1RSTCwgcWxjbmljX2R1bXBfY3RybCB9LAorCXsgUUxDTklDX0RVTVBfVExIRFIsIHFsY25pY19kdW1wX25vcCB9LAorCXsgUUxDTklDX0RVTVBfUkRFTkQsIHFsY25pY19kdW1wX25vcCB9LAorfTsKKworLyogV2FsayB0aGUgdGVtcGxhdGUgYW5kIGNvbGxlY3QgZHVtcCBmb3IgZWFjaCBlbnRyeSBpbiB0aGUgZHVtcCB0ZW1wbGF0ZSAqLworc3RhdGljIGludAorcWxjbmljX3ZhbGlkX2R1bXBfZW50cnkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcWxjbmljX2R1bXBfZW50cnkgKmVudHJ5LAorCXUzMiBzaXplKQoreworCWludCByZXQgPSAxOworCWlmIChzaXplICE9IGVudHJ5LT5oZHIuY2FwX3NpemUpIHsKKwkJZGV2X2luZm8oZGV2LAorCQkiSW52YWxpZGF0ZSBkdW1wLCBUeXBlOiVkXHRNYXNrOiVkXHRTaXplOiVkQ2FwX3NpemU6JWRcbiIsCisJCWVudHJ5LT5oZHIudHlwZSwgZW50cnktPmhkci5tYXNrLCBzaXplLCBlbnRyeS0+aGRyLmNhcF9zaXplKTsKKwkJZGV2X2luZm8oZGV2LCAiQWJvcnRpbmcgZnVydGhlciBkdW1wIGNhcHR1cmVcbiIpOworCQlyZXQgPSAwOworCX0KKwlyZXR1cm4gcmV0OworfQorCitpbnQgcWxjbmljX2R1bXBfZncoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiAqYnVmZmVyOworCWNoYXIgbWVzZ1s2NF07CisJY2hhciAqbXNnW10gPSB7bWVzZywgTlVMTH07CisJaW50IGksIGssIG9wc19jbnQsIG9wc19pbmRleCwgZHVtcF9zaXplID0gMDsKKwl1MzIgZW50cnlfb2Zmc2V0LCBkdW1wLCBub19lbnRyaWVzLCBidWZfb2Zmc2V0ID0gMDsKKwlzdHJ1Y3QgcWxjbmljX2R1bXBfZW50cnkgKmVudHJ5OworCXN0cnVjdCBxbGNuaWNfZndfZHVtcCAqZndfZHVtcCA9ICZhZGFwdGVyLT5haHctPmZ3X2R1bXA7CisJc3RydWN0IHFsY25pY19kdW1wX3RlbXBsYXRlX2hkciAqdG1wbF9oZHIgPSBmd19kdW1wLT50bXBsX2hkcjsKKworCWlmIChmd19kdW1wLT5jbHIpIHsKKwkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJQcmV2aW91cyBkdW1wIG5vdCBjbGVhcmVkLCBub3QgY2FwdHVyaW5nIGR1bXBcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJLyogQ2FsY3VsYXRlIHRoZSBzaXplIGZvciBkdW1wIGRhdGEgYXJlYSBvbmx5ICovCisJZm9yIChpID0gMiwgayA9IDE7IChpICYgUUxDTklDX0RVTVBfTUFTS19NQVgpOyBpIDw8PSAxLCBrKyspCisJCWlmIChpICYgdG1wbF9oZHItPmRydl9jYXBfbWFzaykKKwkJCWR1bXBfc2l6ZSArPSB0bXBsX2hkci0+Y2FwX3NpemVzW2tdOworCWlmICghZHVtcF9zaXplKQorCQlyZXR1cm4gLUVJTzsKKworCWZ3X2R1bXAtPmRhdGEgPSB2emFsbG9jKGR1bXBfc2l6ZSk7CisJaWYgKCFmd19kdW1wLT5kYXRhKSB7CisJCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkiVW5hYmxlIHRvIGFsbG9jYXRlICglZCBLQikgZm9yIGZ3IGR1bXBcbiIsCisJCQlkdW1wX3NpemUvMTAyNCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlidWZmZXIgPSBmd19kdW1wLT5kYXRhOworCWZ3X2R1bXAtPnNpemUgPSBkdW1wX3NpemU7CisJbm9fZW50cmllcyA9IHRtcGxfaGRyLT5udW1fZW50cmllczsKKwlvcHNfY250ID0gQVJSQVlfU0laRShmd19kdW1wX29wcyk7CisJZW50cnlfb2Zmc2V0ID0gdG1wbF9oZHItPm9mZnNldDsKKwl0bXBsX2hkci0+c3lzX2luZm9bMF0gPSBRTENOSUNfRFJJVkVSX1ZFUlNJT047CisJdG1wbF9oZHItPnN5c19pbmZvWzFdID0gYWRhcHRlci0+ZndfdmVyc2lvbjsKKworCWZvciAoaSA9IDA7IGkgPCBub19lbnRyaWVzOyBpKyspIHsKKwkJZW50cnkgPSAoc3RydWN0IHFsY25pY19kdW1wX2VudHJ5ICopICgodm9pZCAqKSB0bXBsX2hkciArCisJCQllbnRyeV9vZmZzZXQpOworCQlpZiAoIShlbnRyeS0+aGRyLm1hc2sgJiB0bXBsX2hkci0+ZHJ2X2NhcF9tYXNrKSkgeworCQkJZW50cnktPmhkci5mbGFncyB8PSBRTENOSUNfRFVNUF9TS0lQOworCQkJZW50cnlfb2Zmc2V0ICs9IGVudHJ5LT5oZHIub2Zmc2V0OworCQkJY29udGludWU7CisJCX0KKwkJLyogRmluZCB0aGUgaGFuZGxlciBmb3IgdGhpcyBlbnRyeSAqLworCQlvcHNfaW5kZXggPSAwOworCQl3aGlsZSAob3BzX2luZGV4IDwgb3BzX2NudCkgeworCQkJaWYgKGVudHJ5LT5oZHIudHlwZSA9PSBmd19kdW1wX29wc1tvcHNfaW5kZXhdLm9wY29kZSkKKwkJCQlicmVhazsKKwkJCW9wc19pbmRleCsrOworCQl9CisJCWlmIChvcHNfaW5kZXggPT0gb3BzX2NudCkgeworCQkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkiSW52YWxpZCBlbnRyeSB0eXBlICVkLCBleGl0aW5nIGR1bXBcbiIsCisJCQkJZW50cnktPmhkci50eXBlKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJLyogQ29sbGVjdCBkdW1wIGZvciB0aGlzIGVudHJ5ICovCisJCWR1bXAgPSBmd19kdW1wX29wc1tvcHNfaW5kZXhdLmhhbmRsZXIoYWRhcHRlciwgZW50cnksIGJ1ZmZlcik7CisJCWlmIChkdW1wICYmICFxbGNuaWNfdmFsaWRfZHVtcF9lbnRyeSgmYWRhcHRlci0+cGRldi0+ZGV2LCBlbnRyeSwKKwkJCWR1bXApKQorCQkJZW50cnktPmhkci5mbGFncyB8PSBRTENOSUNfRFVNUF9TS0lQOworCQlidWZfb2Zmc2V0ICs9IGVudHJ5LT5oZHIuY2FwX3NpemU7CisJCWVudHJ5X29mZnNldCArPSBlbnRyeS0+aGRyLm9mZnNldDsKKwkJYnVmZmVyID0gZndfZHVtcC0+ZGF0YSArIGJ1Zl9vZmZzZXQ7CisJfQorCWlmIChkdW1wX3NpemUgIT0gYnVmX29mZnNldCkgeworCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJIkNhcHR1cmVkKCVkKSBhbmQgZXhwZWN0ZWQgc2l6ZSglZCkgZG8gbm90IG1hdGNoXG4iLAorCQkJYnVmX29mZnNldCwgZHVtcF9zaXplKTsKKwkJZ290byBlcnJvcjsKKwl9IGVsc2UgeworCQlmd19kdW1wLT5jbHIgPSAxOworCQlzbnByaW50ZihtZXNnLCBzaXplb2YobWVzZyksICJGVyBkdW1wIGZvciBkZXZpY2U6ICVkXG4iLAorCQkJYWRhcHRlci0+cGRldi0+ZGV2Zm4pOworCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAiRHVtcCBkYXRhLCAlZCBieXRlcyBjYXB0dXJlZFxuIiwKKwkJCWZ3X2R1bXAtPnNpemUpOworCQkvKiBTZW5kIGEgdWRldiBldmVudCB0byBub3RpZnkgYXZhaWxhYmlsaXR5IG9mIEZXIGR1bXAgKi8KKwkJa29iamVjdF91ZXZlbnRfZW52KCZhZGFwdGVyLT5wZGV2LT5kZXYua29iaiwgS09CSl9DSEFOR0UsIG1zZyk7CisJCXJldHVybiAwOworCX0KK2Vycm9yOgorCXZmcmVlKGZ3X2R1bXAtPmRhdGEpOworCXJldHVybiAtRUlOVkFMOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19pbml0LmMgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2luaXQuYwppbmRleCBhN2YxZDViLi41YjhiYmNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2luaXQuYworKysgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2luaXQuYwpAQCAtOTQsNyArOTQsNyBAQAogCXN0cnVjdCBxbGNuaWNfcnhfYnVmZmVyICpyeF9idWY7CiAJaW50IGksIHJpbmc7CiAKLQlyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKwlyZWN2X2N0eCA9IGFkYXB0ZXItPnJlY3ZfY3R4OwogCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOyByaW5nKyspIHsKIAkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKIAkJZm9yIChpID0gMDsgaSA8IHJkc19yaW5nLT5udW1fZGVzYzsgKytpKSB7CkBAIC0xMTksNyArMTE5LDcgQEAKIAlzdHJ1Y3QgcWxjbmljX3J4X2J1ZmZlciAqcnhfYnVmOwogCWludCBpLCByaW5nOwogCi0JcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisJcmVjdl9jdHggPSBhZGFwdGVyLT5yZWN2X2N0eDsKIAlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Jkc19yaW5nczsgcmluZysrKSB7CiAJCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ107CiAKQEAgLTE3Myw3ICsxNzMsNyBAQAogCXN0cnVjdCBxbGNuaWNfaG9zdF90eF9yaW5nICp0eF9yaW5nOwogCWludCByaW5nOwogCi0JcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisJcmVjdl9jdHggPSBhZGFwdGVyLT5yZWN2X2N0eDsKIAogCWlmIChyZWN2X2N0eC0+cmRzX3JpbmdzID09IE5VTEwpCiAJCWdvdG8gc2tpcF9yZHM7CkBAIC0yMjYsNyArMjI2LDcgQEAKIAl9CiAJdHhfcmluZy0+Y21kX2J1Zl9hcnIgPSBjbWRfYnVmX2FycjsKIAotCXJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCXJlY3ZfY3R4ID0gYWRhcHRlci0+cmVjdl9jdHg7CiAKIAlzaXplID0gYWRhcHRlci0+bWF4X3Jkc19yaW5ncyAqIHNpemVvZihzdHJ1Y3QgcWxjbmljX2hvc3RfcmRzX3JpbmcpOwogCXJkc19yaW5nID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKQEAgLTM0NSw3ICszNDUsNyBAQAogfQogCiBzdGF0aWMgaW50IGRvX3JvbV9mYXN0X3JlYWQoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLAotCQkJICAgIGludCBhZGRyLCBpbnQgKnZhbHApCisJCQkgICAgdTMyIGFkZHIsIHUzMiAqdmFscCkKIHsKIAlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19ST01VU0JfUk9NX0FERFJFU1MsIGFkZHIpOwogCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX1JPTVVTQl9ST01fRFVNTVlfQllURV9DTlQsIDApOwpAQCAtMzk4LDcgKzM5OCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IHFsY25pY19yb21fZmFzdF9yZWFkKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHIsIGludCAqdmFscCkKK2ludCBxbGNuaWNfcm9tX2Zhc3RfcmVhZChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBhZGRyLCB1MzIgKnZhbHApCiB7CiAJaW50IHJldDsKIApAQCAtODY0LDcgKzg2NCw3IEBACiAJZm9yIChpID0gMDsgaSA8IGVudHJpZXM7IGkrKykgewogCiAJCV9fbGUzMiBmbGFncywgZmlsZV9jaGlwcmV2LCBvZmZzOwotCQl1OCBjaGlwcmV2ID0gYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkOworCQl1OCBjaGlwcmV2ID0gYWRhcHRlci0+YWh3LT5yZXZpc2lvbl9pZDsKIAkJdTMyIGZsYWdiaXQ7CiAKIAkJb2ZmcyA9IGNwdV90b19sZTMyKHB0YWJfZGVzY3ItPmZpbmRleCkgKwpAQCAtMTEzMCw5ICsxMTMwLDIwIEBACiAJfSBlbHNlIHsKIAkJdTY0IGRhdGE7CiAJCXUzMiBoaSwgbG87CisJCWludCByZXQ7CisJCXN0cnVjdCBxbGNuaWNfZmx0X2VudHJ5IGJvb3RsZF9lbnRyeTsKIAotCQlzaXplID0gKFFMQ05JQ19JTUFHRV9TVEFSVCAtIFFMQ05JQ19CT09UTERfU1RBUlQpIC8gODsKLQkJZmxhc2hhZGRyID0gUUxDTklDX0JPT1RMRF9TVEFSVDsKKwkJcmV0ID0gcWxjbmljX2dldF9mbHRfZW50cnkoYWRhcHRlciwgUUxDTklDX0JPT1RMRF9SRUdJT04sCisJCQkJCSZib290bGRfZW50cnkpOworCQlpZiAoIXJldCkgeworCQkJc2l6ZSA9IGJvb3RsZF9lbnRyeS5zaXplIC8gODsKKwkJCWZsYXNoYWRkciA9IGJvb3RsZF9lbnRyeS5zdGFydF9hZGRyOworCQl9IGVsc2UgeworCQkJc2l6ZSA9IChRTENOSUNfSU1BR0VfU1RBUlQgLSBRTENOSUNfQk9PVExEX1NUQVJUKSAvIDg7CisJCQlmbGFzaGFkZHIgPSBRTENOSUNfQk9PVExEX1NUQVJUOworCQkJZGV2X2luZm8oJnBkZXYtPmRldiwKKwkJCQkidXNpbmcgbGVnYWN5IG1ldGhvZCB0byBnZXQgZmxhc2ggZncgcmVnaW9uIik7CisJCX0KIAogCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAJCQlpZiAocWxjbmljX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwKQEAgLTEzNzksOCArMTM5MCw4IEBACiAKIAlza2IgPSBidWZmZXItPnNrYjsKIAotCWlmIChsaWtlbHkoYWRhcHRlci0+cnhfY3N1bSAmJiAoY2tzdW0gPT0gU1RBVFVTX0NLU1VNX09LIHx8Ci0JCQkJCQlja3N1bSA9PSBTVEFUVVNfQ0tTVU1fTE9PUCkpKSB7CisJaWYgKGxpa2VseSgoYWRhcHRlci0+bmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSAmJgorCSAgICAoY2tzdW0gPT0gU1RBVFVTX0NLU1VNX09LIHx8IGNrc3VtID09IFNUQVRVU19DS1NVTV9MT09QKSkpIHsKIAkJYWRhcHRlci0+c3RhdHMuY3N1bW1lZCsrOwogCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCX0gZWxzZSB7CkBAIC0xMzk0LDcgKzE0MDUsNyBAQAogCXJldHVybiBza2I7CiB9CiAKLXN0YXRpYyBpbnQKK3N0YXRpYyBpbmxpbmUgaW50CiBxbGNuaWNfY2hlY2tfcnhfdGFnZ2luZyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQl1MTYgKnZsYW5fdGFnKQogewpAQCAtMTQyNSw3ICsxNDM2LDcgQEAKIAkJaW50IHJpbmcsIHU2NCBzdHNfZGF0YTApCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKLQlzdHJ1Y3QgcWxjbmljX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisJc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gYWRhcHRlci0+cmVjdl9jdHg7CiAJc3RydWN0IHFsY25pY19yeF9idWZmZXIgKmJ1ZmZlcjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBxbGNuaWNfaG9zdF9yZHNfcmluZyAqcmRzX3Jpbmc7CkBAIC0xNDY3LDEwICsxNDc4LDEwIEBACiAKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZXRkZXYpOwogCi0JaWYgKCh2aWQgIT0gMHhmZmZmKSAmJiBhZGFwdGVyLT52bGdycCkKLQkJdmxhbl9ncm9fcmVjZWl2ZSgmc2RzX3JpbmctPm5hcGksIGFkYXB0ZXItPnZsZ3JwLCB2aWQsIHNrYik7Ci0JZWxzZQotCQluYXBpX2dyb19yZWNlaXZlKCZzZHNfcmluZy0+bmFwaSwgc2tiKTsKKwlpZiAodmlkICE9IDB4ZmZmZikKKwkJX192bGFuX2h3YWNjZWxfcHV0X3RhZyhza2IsIHZpZCk7CisKKwluYXBpX2dyb19yZWNlaXZlKCZzZHNfcmluZy0+bmFwaSwgc2tiKTsKIAogCWFkYXB0ZXItPnN0YXRzLnJ4X3BrdHMrKzsKIAlhZGFwdGVyLT5zdGF0cy5yeGJ5dGVzICs9IGxlbmd0aDsKQEAgLTE0ODgsNyArMTQ5OSw3IEBACiAJCWludCByaW5nLCB1NjQgc3RzX2RhdGEwLCB1NjQgc3RzX2RhdGExKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0Jc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9IGFkYXB0ZXItPnJlY3ZfY3R4OwogCXN0cnVjdCBxbGNuaWNfcnhfYnVmZmVyICpidWZmZXI7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgcWxjbmljX2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nOwpAQCAtMTU1MiwxMCArMTU2Myw5IEBACiAKIAlsZW5ndGggPSBza2ItPmxlbjsKIAotCWlmICgodmlkICE9IDB4ZmZmZikgJiYgYWRhcHRlci0+dmxncnApCi0JCXZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsIGFkYXB0ZXItPnZsZ3JwLCB2aWQpOwotCWVsc2UKLQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKKwlpZiAodmlkICE9IDB4ZmZmZikKKwkJX192bGFuX2h3YWNjZWxfcHV0X3RhZyhza2IsIHZpZCk7CisJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKIAogCWFkYXB0ZXItPnN0YXRzLmxyb19wa3RzKys7CiAJYWRhcHRlci0+c3RhdHMubHJvYnl0ZXMgKz0gbGVuZ3RoOwpAQCAtMTYyNSw3ICsxNjM1LDcgQEAKIAogCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOyByaW5nKyspIHsKIAkJc3RydWN0IHFsY25pY19ob3N0X3Jkc19yaW5nICpyZHNfcmluZyA9Ci0JCQkmYWRhcHRlci0+cmVjdl9jdHgucmRzX3JpbmdzW3JpbmddOworCQkJJmFkYXB0ZXItPnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ107CiAKIAkJaWYgKCFsaXN0X2VtcHR5KCZzZHNfcmluZy0+ZnJlZV9saXN0W3JpbmddKSkgewogCQkJbGlzdF9mb3JfZWFjaChjdXIsICZzZHNfcmluZy0+ZnJlZV9saXN0W3JpbmddKSB7CkBAIC0xNjUxLDEyICsxNjYxLDEzIEBACiB9CiAKIHZvaWQKLXFsY25pY19wb3N0X3J4X2J1ZmZlcnMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1MzIgcmluZ2lkLAorcWxjbmljX3Bvc3RfcnhfYnVmZmVycyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJc3RydWN0IHFsY25pY19ob3N0X3Jkc19yaW5nICpyZHNfcmluZykKIHsKIAlzdHJ1Y3QgcmN2X2Rlc2MgKnBkZXNjOwogCXN0cnVjdCBxbGNuaWNfcnhfYnVmZmVyICpidWZmZXI7Ci0JaW50IHByb2R1Y2VyLCBjb3VudCA9IDA7CisJaW50IGNvdW50ID0gMDsKKwl1MzIgcHJvZHVjZXI7CiAJc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKIAogCXByb2R1Y2VyID0gcmRzX3JpbmctPnByb2R1Y2VyOwpAQCAtMTY5Niw3ICsxNzA3LDggQEAKIHsKIAlzdHJ1Y3QgcmN2X2Rlc2MgKnBkZXNjOwogCXN0cnVjdCBxbGNuaWNfcnhfYnVmZmVyICpidWZmZXI7Ci0JaW50IHByb2R1Y2VyLCBjb3VudCA9IDA7CisJaW50ICBjb3VudCA9IDA7CisJdWludDMyX3QgcHJvZHVjZXI7CiAJc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKIAogCWlmICghc3Bpbl90cnlsb2NrKCZyZHNfcmluZy0+bG9jaykpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX21haW4uYyBiL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfbWFpbi5jCmluZGV4IGNiMWExZWYuLjNhYjdkMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfbWFpbi5jCkBAIC0xMywxMiArMTMsMTIgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3N3YWIuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KICNpbmNsdWRlIDxuZXQvaXAuaD4KICNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvYWVyLmg+CisjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIlFMb2dpYyAxLzEwIEdiRSBDb252ZXJnZWQvSW50ZWxsaWdlbnQgRXRoZXJuZXQgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CkBAIC05OCw2ICs5OCw5IEBACiBzdGF0aWMgaW50IHFsY25pY3ZmX3N0YXJ0X2Zpcm13YXJlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqKTsKIHN0YXRpYyB2b2lkIHFsY25pY19zZXRfbmV0ZGV2X2ZlYXR1cmVzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqLAogCQkJCXN0cnVjdCBxbGNuaWNfZXN3X2Z1bmNfY2ZnICopOworc3RhdGljIHZvaWQgcWxjbmljX3ZsYW5fcnhfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICosIHUxNik7CitzdGF0aWMgdm9pZCBxbGNuaWNfdmxhbl9yeF9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKiwgdTE2KTsKKwogLyogIFBDSSBEZXZpY2UgSUQgVGFibGUgICovCiAjZGVmaW5lIEVOVFJZKGRldmljZSkgXAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUUxPR0lDLCAoZGV2aWNlKSksIFwKQEAgLTExMyw3ICsxMTYsNyBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHFsY25pY19wY2lfdGJsKTsKIAogCi12b2lkCitpbmxpbmUgdm9pZAogcWxjbmljX3VwZGF0ZV9jbWRfcHJvZHVjZXIoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLAogCQlzdHJ1Y3QgcWxjbmljX2hvc3RfdHhfcmluZyAqdHhfcmluZykKIHsKQEAgLTE2OSw3ICsxNzIsNyBAQAogewogCWludCByaW5nOwogCXN0cnVjdCBxbGNuaWNfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7Ci0Jc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9IGFkYXB0ZXItPnJlY3ZfY3R4OwogCiAJaWYgKHFsY25pY19hbGxvY19zZHNfcmluZ3MocmVjdl9jdHgsIGFkYXB0ZXItPm1heF9zZHNfcmluZ3MpKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE5MywxNCArMTk2LDE0IEBACiB7CiAJaW50IHJpbmc7CiAJc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nICpzZHNfcmluZzsKLQlzdHJ1Y3QgcWxjbmljX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisJc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gYWRhcHRlci0+cmVjdl9jdHg7CiAKIAlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Nkc19yaW5nczsgcmluZysrKSB7CiAJCXNkc19yaW5nID0gJnJlY3ZfY3R4LT5zZHNfcmluZ3NbcmluZ107CiAJCW5ldGlmX25hcGlfZGVsKCZzZHNfcmluZy0+bmFwaSk7CiAJfQogCi0JcWxjbmljX2ZyZWVfc2RzX3JpbmdzKCZhZGFwdGVyLT5yZWN2X2N0eCk7CisJcWxjbmljX2ZyZWVfc2RzX3JpbmdzKGFkYXB0ZXItPnJlY3ZfY3R4KTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTIwOCw3ICsyMTEsNyBAQAogewogCWludCByaW5nOwogCXN0cnVjdCBxbGNuaWNfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7Ci0Jc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9IGFkYXB0ZXItPnJlY3ZfY3R4OwogCiAJaWYgKGFkYXB0ZXItPmlzX3VwICE9IFFMQ05JQ19BREFQVEVSX1VQX01BR0lDKQogCQlyZXR1cm47CkBAIC0yMjUsNyArMjI4LDcgQEAKIHsKIAlpbnQgcmluZzsKIAlzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOwotCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKwlzdHJ1Y3QgcWxjbmljX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSBhZGFwdGVyLT5yZWN2X2N0eDsKIAogCWlmIChhZGFwdGVyLT5pc191cCAhPSBRTENOSUNfQURBUFRFUl9VUF9NQUdJQykKIAkJcmV0dXJuOwpAQCAtMzE3LDEzICszMjAsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBxbGNuaWNfdmxhbl9yeF9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAotCQlzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwKQotewotCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JYWRhcHRlci0+dmxncnAgPSBncnA7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcWxjbmljX25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuCSAgID0gcWxjbmljX29wZW4sCiAJLm5kb19zdG9wCSAgID0gcWxjbmljX2Nsb3NlLApAQCAtMzMzLDggKzMyOSwxMSBAQAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gcWxjbmljX3NldF9tdWx0aSwKIAkubmRvX3NldF9tYWNfYWRkcmVzcyAgICA9IHFsY25pY19zZXRfbWFjLAogCS5uZG9fY2hhbmdlX210dQkgICA9IHFsY25pY19jaGFuZ2VfbXR1LAorCS5uZG9fZml4X2ZlYXR1cmVzICA9IHFsY25pY19maXhfZmVhdHVyZXMsCisJLm5kb19zZXRfZmVhdHVyZXMgID0gcWxjbmljX3NldF9mZWF0dXJlcywKIAkubmRvX3R4X3RpbWVvdXQJICAgPSBxbGNuaWNfdHhfdGltZW91dCwKLQkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIgPSBxbGNuaWNfdmxhbl9yeF9yZWdpc3RlciwKKwkubmRvX3ZsYW5fcnhfYWRkX3ZpZAk9IHFsY25pY192bGFuX3J4X2FkZCwKKwkubmRvX3ZsYW5fcnhfa2lsbF92aWQJPSBxbGNuaWNfdmxhbl9yeF9kZWwsCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIAkubmRvX3BvbGxfY29udHJvbGxlciA9IHFsY25pY19wb2xsX2NvbnRyb2xsZXIsCiAjZW5kaWYKQEAgLTM1MiwyNCArMzUxLDUzIEBACiAJLnN0YXJ0X2Zpcm13YXJlID0gcWxjbmljdmZfc3RhcnRfZmlybXdhcmUKIH07CiAKLXN0YXRpYyB2b2lkCi1xbGNuaWNfc2V0dXBfaW50cihzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IHFsY25pY19lbmFibGVfbXNpeChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBudW1fbXNpeCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJaW50IGVyciA9IC0xOworCisJYWRhcHRlci0+bWF4X3Nkc19yaW5ncyA9IDE7CisJYWRhcHRlci0+ZmxhZ3MgJj0gfihRTENOSUNfTVNJX0VOQUJMRUQgfCBRTENOSUNfTVNJWF9FTkFCTEVEKTsKKwlxbGNuaWNfc2V0X21zaXhfYml0KHBkZXYsIDApOworCisJaWYgKGFkYXB0ZXItPm1zaXhfc3VwcG9ydGVkKSB7CisgZW5hYmxlX21zaXg6CisJCXFsY25pY19pbml0X21zaXhfZW50cmllcyhhZGFwdGVyLCBudW1fbXNpeCk7CisJCWVyciA9IHBjaV9lbmFibGVfbXNpeChwZGV2LCBhZGFwdGVyLT5tc2l4X2VudHJpZXMsIG51bV9tc2l4KTsKKwkJaWYgKGVyciA9PSAwKSB7CisJCQlhZGFwdGVyLT5mbGFncyB8PSBRTENOSUNfTVNJWF9FTkFCTEVEOworCQkJcWxjbmljX3NldF9tc2l4X2JpdChwZGV2LCAxKTsKKworCQkJYWRhcHRlci0+bWF4X3Nkc19yaW5ncyA9IG51bV9tc2l4OworCisJCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAidXNpbmcgbXNpLXggaW50ZXJydXB0c1xuIik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCWlmIChlcnIgPiAwKSB7CisJCQludW1fbXNpeCA9IHJvdW5kZG93bl9wb3dfb2ZfdHdvKGVycik7CisJCQlpZiAobnVtX21zaXgpCisJCQkJZ290byBlbmFibGVfbXNpeDsKKwkJfQorCX0KKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyB2b2lkIHFsY25pY19lbmFibGVfbXNpX2xlZ2FjeShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJY29uc3Qgc3RydWN0IHFsY25pY19sZWdhY3lfaW50cl9zZXQgKmxlZ2FjeV9pbnRycDsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7Ci0JaW50IGVyciwgbnVtX21zaXg7CiAKLQlpZiAoYWRhcHRlci0+cnNzX3N1cHBvcnRlZCkgewotCQludW1fbXNpeCA9IChudW1fb25saW5lX2NwdXMoKSA+PSBNU0lYX0VOVFJJRVNfUEVSX0FEQVBURVIpID8KLQkJCU1TSVhfRU5UUklFU19QRVJfQURBUFRFUiA6IDI7Ci0JfSBlbHNlCi0JCW51bV9tc2l4ID0gMTsKKwlpZiAodXNlX21zaSAmJiAhcGNpX2VuYWJsZV9tc2kocGRldikpIHsKKwkJYWRhcHRlci0+ZmxhZ3MgfD0gUUxDTklDX01TSV9FTkFCTEVEOworCQlhZGFwdGVyLT50Z3Rfc3RhdHVzX3JlZyA9IHFsY25pY19nZXRfaW9hZGRyKGFkYXB0ZXIsCisJCQkJbXNpX3RndF9zdGF0dXNbYWRhcHRlci0+YWh3LT5wY2lfZnVuY10pOworCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAidXNpbmcgbXNpIGludGVycnVwdHNcbiIpOworCQlhZGFwdGVyLT5tc2l4X2VudHJpZXNbMF0udmVjdG9yID0gcGRldi0+aXJxOworCQlyZXR1cm47CisJfQogCi0JYWRhcHRlci0+bWF4X3Nkc19yaW5ncyA9IDE7Ci0KLQlhZGFwdGVyLT5mbGFncyAmPSB+KFFMQ05JQ19NU0lfRU5BQkxFRCB8IFFMQ05JQ19NU0lYX0VOQUJMRUQpOwotCi0JbGVnYWN5X2ludHJwID0gJmxlZ2FjeV9pbnRyW2FkYXB0ZXItPmFody5wY2lfZnVuY107CisJbGVnYWN5X2ludHJwID0gJmxlZ2FjeV9pbnRyW2FkYXB0ZXItPmFody0+cGNpX2Z1bmNdOwogCiAJYWRhcHRlci0+aW50X3ZlY19iaXQgPSBsZWdhY3lfaW50cnAtPmludF92ZWNfYml0OwogCWFkYXB0ZXItPnRndF9zdGF0dXNfcmVnID0gcWxjbmljX2dldF9pb2FkZHIoYWRhcHRlciwKQEAgLTM4MCw0NCArNDA4LDMwIEBACiAKIAlhZGFwdGVyLT5jcmJfaW50X3N0YXRlX3JlZyA9IHFsY25pY19nZXRfaW9hZGRyKGFkYXB0ZXIsCiAJCQlJU1JfSU5UX1NUQVRFX1JFRyk7Ci0KLQlxbGNuaWNfc2V0X21zaXhfYml0KHBkZXYsIDApOwotCi0JaWYgKGFkYXB0ZXItPm1zaXhfc3VwcG9ydGVkKSB7Ci0KLQkJcWxjbmljX2luaXRfbXNpeF9lbnRyaWVzKGFkYXB0ZXIsIG51bV9tc2l4KTsKLQkJZXJyID0gcGNpX2VuYWJsZV9tc2l4KHBkZXYsIGFkYXB0ZXItPm1zaXhfZW50cmllcywgbnVtX21zaXgpOwotCQlpZiAoZXJyID09IDApIHsKLQkJCWFkYXB0ZXItPmZsYWdzIHw9IFFMQ05JQ19NU0lYX0VOQUJMRUQ7Ci0JCQlxbGNuaWNfc2V0X21zaXhfYml0KHBkZXYsIDEpOwotCi0JCQlpZiAoYWRhcHRlci0+cnNzX3N1cHBvcnRlZCkKLQkJCQlhZGFwdGVyLT5tYXhfc2RzX3JpbmdzID0gbnVtX21zaXg7Ci0KLQkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJ1c2luZyBtc2kteCBpbnRlcnJ1cHRzXG4iKTsKLQkJCXJldHVybjsKLQkJfQotCi0JCWlmIChlcnIgPiAwKQotCQkJcGNpX2Rpc2FibGVfbXNpeChwZGV2KTsKLQotCQkvKiBmYWxsIHRocm91Z2ggZm9yIG1zaSAqLwotCX0KLQotCWlmICh1c2VfbXNpICYmICFwY2lfZW5hYmxlX21zaShwZGV2KSkgewotCQlhZGFwdGVyLT5mbGFncyB8PSBRTENOSUNfTVNJX0VOQUJMRUQ7Ci0JCWFkYXB0ZXItPnRndF9zdGF0dXNfcmVnID0gcWxjbmljX2dldF9pb2FkZHIoYWRhcHRlciwKLQkJCQltc2lfdGd0X3N0YXR1c1thZGFwdGVyLT5haHcucGNpX2Z1bmNdKTsKLQkJZGV2X2luZm8oJnBkZXYtPmRldiwgInVzaW5nIG1zaSBpbnRlcnJ1cHRzXG4iKTsKLQkJYWRhcHRlci0+bXNpeF9lbnRyaWVzWzBdLnZlY3RvciA9IHBkZXYtPmlycTsKLQkJcmV0dXJuOwotCX0KLQogCWRldl9pbmZvKCZwZGV2LT5kZXYsICJ1c2luZyBsZWdhY3kgaW50ZXJydXB0c1xuIik7CiAJYWRhcHRlci0+bXNpeF9lbnRyaWVzWzBdLnZlY3RvciA9IHBkZXYtPmlycTsKIH0KIAogc3RhdGljIHZvaWQKK3FsY25pY19zZXR1cF9pbnRyKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgbnVtX21zaXg7CisKKwlpZiAoYWRhcHRlci0+bXNpeF9zdXBwb3J0ZWQpIHsKKwkJbnVtX21zaXggPSAobnVtX29ubGluZV9jcHVzKCkgPj0KKwkJCVFMQ05JQ19ERUZfTlVNX1NUU19ERVNDX1JJTkdTKSA/CisJCQlRTENOSUNfREVGX05VTV9TVFNfREVTQ19SSU5HUyA6CisJCQlRTENOSUNfTUlOX05VTV9SU1NfUklOR1M7CisJfSBlbHNlCisJCW51bV9tc2l4ID0gMTsKKworCWlmICghcWxjbmljX2VuYWJsZV9tc2l4KGFkYXB0ZXIsIG51bV9tc2l4KSkKKwkJcmV0dXJuOworCisJcWxjbmljX2VuYWJsZV9tc2lfbGVnYWN5KGFkYXB0ZXIpOworfQorCitzdGF0aWMgdm9pZAogcWxjbmljX3RlYXJkb3duX2ludHIoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQogewogCWlmIChhZGFwdGVyLT5mbGFncyAmIFFMQ05JQ19NU0lYX0VOQUJMRUQpCkBAIC00MjksOCArNDQzLDggQEAKIHN0YXRpYyB2b2lkCiBxbGNuaWNfY2xlYW51cF9wY2lfbWFwKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlpZiAoYWRhcHRlci0+YWh3LnBjaV9iYXNlMCAhPSBOVUxMKQotCQlpb3VubWFwKGFkYXB0ZXItPmFody5wY2lfYmFzZTApOworCWlmIChhZGFwdGVyLT5haHctPnBjaV9iYXNlMCAhPSBOVUxMKQorCQlpb3VubWFwKGFkYXB0ZXItPmFody0+cGNpX2Jhc2UwKTsKIH0KIAogc3RhdGljIGludApAQCAtNDY0LDggKzQ3OCwxMCBAQAogCiAJZm9yIChpID0gMDsgaSA8IFFMQ05JQ19NQVhfUENJX0ZVTkM7IGkrKykgewogCQlwZm4gPSBwY2lfaW5mb1tpXS5pZDsKLQkJaWYgKHBmbiA+IFFMQ05JQ19NQVhfUENJX0ZVTkMpCi0JCQlyZXR1cm4gUUxfU1RBVFVTX0lOVkFMSURfUEFSQU07CisJCWlmIChwZm4gPiBRTENOSUNfTUFYX1BDSV9GVU5DKSB7CisJCQlyZXQgPSBRTF9TVEFUVVNfSU5WQUxJRF9QQVJBTTsKKwkJCWdvdG8gZXJyX2Vzd2l0Y2g7CisJCX0KIAkJYWRhcHRlci0+bnBhcnNbcGZuXS5hY3RpdmUgPSAodTgpcGNpX2luZm9baV0uYWN0aXZlOwogCQlhZGFwdGVyLT5ucGFyc1twZm5dLnR5cGUgPSAodTgpcGNpX2luZm9baV0udHlwZTsKIAkJYWRhcHRlci0+bnBhcnNbcGZuXS5waHlfcG9ydCA9ICh1OClwY2lfaW5mb1tpXS5kZWZhdWx0X3BvcnQ7CkBAIC00OTgsNyArNTE0LDcgQEAKIAl1MzIgcmVmX2NvdW50OwogCWludCBpLCByZXQgPSAxOwogCXUzMiBkYXRhID0gUUxDTklDX01HTVRfRlVOQzsKLQl2b2lkIF9faW9tZW0gKnByaXZfb3AgPSBhZGFwdGVyLT5haHcucGNpX2Jhc2UwICsgUUxDTklDX0RSVl9PUF9NT0RFOworCXZvaWQgX19pb21lbSAqcHJpdl9vcCA9IGFkYXB0ZXItPmFody0+cGNpX2Jhc2UwICsgUUxDTklDX0RSVl9PUF9NT0RFOwogCiAJLyogSWYgb3RoZXIgZHJpdmVycyBhcmUgbm90IGluIHVzZSBzZXQgdGhlaXIgcHJpdmlsZWdlIGxldmVsICovCiAJcmVmX2NvdW50ID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfQ1JCX0RSVl9BQ1RJVkUpOwpAQCAtNTEwLDE2ICs1MjYsMTYgQEAKIAkJZm9yIChpID0gMDsgaSA8IFFMQ05JQ19NQVhfUENJX0ZVTkM7IGkrKykgewogCQkJaWQgPSBpOwogCQkJaWYgKGFkYXB0ZXItPm5wYXJzW2ldLnR5cGUgIT0gUUxDTklDX1RZUEVfTklDIHx8Ci0JCQkJaWQgPT0gYWRhcHRlci0+YWh3LnBjaV9mdW5jKQorCQkJCWlkID09IGFkYXB0ZXItPmFody0+cGNpX2Z1bmMpCiAJCQkJY29udGludWU7CiAJCQlkYXRhIHw9IChxbGNuaWNfY29uZmlnX25wYXJzICYKIAkJCQkJUUxDX0RFVl9TRVRfRFJWKDB4ZiwgaWQpKTsKIAkJfQogCX0gZWxzZSB7CiAJCWRhdGEgPSByZWFkbChwcml2X29wKTsKLQkJZGF0YSA9IChkYXRhICYgflFMQ19ERVZfU0VUX0RSVigweGYsIGFkYXB0ZXItPmFody5wY2lfZnVuYykpIHwKKwkJZGF0YSA9IChkYXRhICYgflFMQ19ERVZfU0VUX0RSVigweGYsIGFkYXB0ZXItPmFody0+cGNpX2Z1bmMpKSB8CiAJCQkoUUxDX0RFVl9TRVRfRFJWKFFMQ05JQ19NR01UX0ZVTkMsCi0JCQlhZGFwdGVyLT5haHcucGNpX2Z1bmMpKTsKKwkJCWFkYXB0ZXItPmFody0+cGNpX2Z1bmMpKTsKIAl9CiAJd3JpdGVsKGRhdGEsIHByaXZfb3ApOwogCXFsY25pY19hcGlfdW5sb2NrKGFkYXB0ZXIpOwpAQCAtNTM3LDIyICs1NTMsMjMgQEAKIAl1MzIgb3BfbW9kZSwgcHJpdl9sZXZlbDsKIAogCS8qIERldGVybWluZSBGVyBBUEkgdmVyc2lvbiAqLwotCWFkYXB0ZXItPmZ3X2hhbF92ZXJzaW9uID0gcmVhZGwoYWRhcHRlci0+YWh3LnBjaV9iYXNlMCArIFFMQ05JQ19GV19BUEkpOworCWFkYXB0ZXItPmZ3X2hhbF92ZXJzaW9uID0gcmVhZGwoYWRhcHRlci0+YWh3LT5wY2lfYmFzZTAgKworCQkJCQlRTENOSUNfRldfQVBJKTsKIAogCS8qIEZpbmQgUENJIGZ1bmN0aW9uIG51bWJlciAqLwogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChhZGFwdGVyLT5wZGV2LCBRTENOSUNfTVNJWF9UQUJMRV9PRkZTRVQsICZmdW5jKTsKLQltc2l4X2Jhc2VfYWRkciA9IGFkYXB0ZXItPmFody5wY2lfYmFzZTAgKyBRTENOSUNfTVNJWF9CQVNFOworCW1zaXhfYmFzZV9hZGRyID0gYWRhcHRlci0+YWh3LT5wY2lfYmFzZTAgKyBRTENOSUNfTVNJWF9CQVNFOwogCW1zaXhfYmFzZSA9IHJlYWRsKG1zaXhfYmFzZV9hZGRyKTsKIAlmdW5jID0gKGZ1bmMgLSBtc2l4X2Jhc2UpL1FMQ05JQ19NU0lYX1RCTF9QR1NJWkU7Ci0JYWRhcHRlci0+YWh3LnBjaV9mdW5jID0gZnVuYzsKKwlhZGFwdGVyLT5haHctPnBjaV9mdW5jID0gZnVuYzsKIAogCS8qIERldGVybWluZSBmdW5jdGlvbiBwcml2aWxlZ2UgbGV2ZWwgKi8KLQlwcml2X29wID0gYWRhcHRlci0+YWh3LnBjaV9iYXNlMCArIFFMQ05JQ19EUlZfT1BfTU9ERTsKKwlwcml2X29wID0gYWRhcHRlci0+YWh3LT5wY2lfYmFzZTAgKyBRTENOSUNfRFJWX09QX01PREU7CiAJb3BfbW9kZSA9IHJlYWRsKHByaXZfb3ApOwogCWlmIChvcF9tb2RlID09IFFMQ19ERVZfRFJWX0RFRkFVTFQpCiAJCXByaXZfbGV2ZWwgPSBRTENOSUNfTUdNVF9GVU5DOwogCWVsc2UKLQkJcHJpdl9sZXZlbCA9IFFMQ19ERVZfR0VUX0RSVihvcF9tb2RlLCBhZGFwdGVyLT5haHcucGNpX2Z1bmMpOworCQlwcml2X2xldmVsID0gUUxDX0RFVl9HRVRfRFJWKG9wX21vZGUsIGFkYXB0ZXItPmFody0+cGNpX2Z1bmMpOwogCiAJaWYgKHByaXZfbGV2ZWwgPT0gUUxDTklDX05PTl9QUklWX0ZVTkMpIHsKIAkJYWRhcHRlci0+b3BfbW9kZSA9IFFMQ05JQ19OT05fUFJJVl9GVU5DOwpAQCAtNTkxLDEzICs2MDgsMTQgQEAKIAogCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlZE1CIG1lbW9yeSBtYXBcbiIsIChpbnQpKG1lbV9sZW4+PjIwKSk7CiAKLQlhZGFwdGVyLT5haHcucGNpX2Jhc2UwID0gbWVtX3B0cjA7Ci0JYWRhcHRlci0+YWh3LnBjaV9sZW4wID0gcGNpX2xlbjA7CisJYWRhcHRlci0+YWh3LT5wY2lfYmFzZTAgPSBtZW1fcHRyMDsKKwlhZGFwdGVyLT5haHctPnBjaV9sZW4wID0gcGNpX2xlbjA7CiAKIAlxbGNuaWNfY2hlY2tfdmYoYWRhcHRlcik7CiAKLQlhZGFwdGVyLT5haHcub2NtX3dpbl9jcmIgPSBxbGNuaWNfZ2V0X2lvYWRkcihhZGFwdGVyLAotCQlRTENOSUNfUENJWF9QU19SRUcoUENJWF9PQ01fV0lORE9XX1JFRyhhZGFwdGVyLT5haHcucGNpX2Z1bmMpKSk7CisJYWRhcHRlci0+YWh3LT5vY21fd2luX2NyYiA9IHFsY25pY19nZXRfaW9hZGRyKGFkYXB0ZXIsCisJCVFMQ05JQ19QQ0lYX1BTX1JFRyhQQ0lYX09DTV9XSU5ET1dfUkVHKAorCQkJYWRhcHRlci0+YWh3LT5wY2lfZnVuYykpKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjM5LDcgKzY1Nyw3IEBACiAKIAlkZXZfaW5mbygmcGRldi0+ZGV2LCAiZmlybXdhcmUgdiVkLiVkLiVkXG4iLAogCQkJZndfbWFqb3IsIGZ3X21pbm9yLCBmd19idWlsZCk7Ci0JaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gUUxDTklDX1hHQkUpIHsKKwlpZiAoYWRhcHRlci0+YWh3LT5wb3J0X3R5cGUgPT0gUUxDTklDX1hHQkUpIHsKIAkJaWYgKGFkYXB0ZXItPmZsYWdzICYgUUxDTklDX0VTV0lUQ0hfRU5BQkxFRCkgewogCQkJYWRhcHRlci0+bnVtX3J4ZCA9IERFRkFVTFRfUkNWX0RFU0NSSVBUT1JTX1ZGOwogCQkJYWRhcHRlci0+bWF4X3J4ZCA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfVkY7CkBAIC02NTEsNyArNjY5LDcgQEAKIAkJYWRhcHRlci0+bnVtX2p1bWJvX3J4ZCA9IE1BWF9KVU1CT19SQ1ZfREVTQ1JJUFRPUlNfMTBHOwogCQlhZGFwdGVyLT5tYXhfanVtYm9fcnhkID0gTUFYX0pVTUJPX1JDVl9ERVNDUklQVE9SU18xMEc7CiAKLQl9IGVsc2UgaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gUUxDTklDX0dCRSkgeworCX0gZWxzZSBpZiAoYWRhcHRlci0+YWh3LT5wb3J0X3R5cGUgPT0gUUxDTklDX0dCRSkgewogCQlhZGFwdGVyLT5udW1fcnhkID0gREVGQVVMVF9SQ1ZfREVTQ1JJUFRPUlNfMUc7CiAJCWFkYXB0ZXItPm51bV9qdW1ib19yeGQgPSBNQVhfSlVNQk9fUkNWX0RFU0NSSVBUT1JTXzFHOwogCQlhZGFwdGVyLT5tYXhfanVtYm9fcnhkID0gTUFYX0pVTUJPX1JDVl9ERVNDUklQVE9SU18xRzsKQEAgLTY1OSw3ICs2NzcsNiBAQAogCX0KIAogCWFkYXB0ZXItPm1zaXhfc3VwcG9ydGVkID0gISF1c2VfbXNpX3g7Ci0JYWRhcHRlci0+cnNzX3N1cHBvcnRlZCA9ICEhdXNlX21zaV94OwogCiAJYWRhcHRlci0+bnVtX3R4ZCA9IE1BWF9DTURfREVTQ1JJUFRPUlM7CiAKQEAgLTY3Miw3ICs2ODksNyBAQAogCWludCBlcnI7CiAJc3RydWN0IHFsY25pY19pbmZvIG5pY19pbmZvOwogCi0JZXJyID0gcWxjbmljX2dldF9uaWNfaW5mbyhhZGFwdGVyLCAmbmljX2luZm8sIGFkYXB0ZXItPmFody5wY2lfZnVuYyk7CisJZXJyID0gcWxjbmljX2dldF9uaWNfaW5mbyhhZGFwdGVyLCAmbmljX2luZm8sIGFkYXB0ZXItPmFody0+cGNpX2Z1bmMpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTcwOCw2ICs3MjUsMjIgQEAKIH0KIAogc3RhdGljIHZvaWQKK3FsY25pY192bGFuX3J4X2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgdmlkKQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc2V0X2JpdCh2aWQsIGFkYXB0ZXItPnZsYW5zKTsKK30KKworc3RhdGljIHZvaWQKK3FsY25pY192bGFuX3J4X2RlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgdmlkKQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlxbGNuaWNfcmVzdG9yZV9pbmRldl9hZGRyKG5ldGRldiwgTkVUREVWX0RPV04pOworCWNsZWFyX2JpdCh2aWQsIGFkYXB0ZXItPnZsYW5zKTsKK30KKworc3RhdGljIHZvaWQKIHFsY25pY19zZXRfZXN3aXRjaF9wb3J0X2ZlYXR1cmVzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwKIAkJc3RydWN0IHFsY25pY19lc3dfZnVuY19jZmcgKmVzd19jZmcpCiB7CkBAIC03MzQsNyArNzY3LDcgQEAKIAlpZiAoIShhZGFwdGVyLT5mbGFncyAmIFFMQ05JQ19FU1dJVENIX0VOQUJMRUQpKQogCQlyZXR1cm4gMDsKIAotCWVzd19jZmcucGNpX2Z1bmMgPSBhZGFwdGVyLT5haHcucGNpX2Z1bmM7CisJZXN3X2NmZy5wY2lfZnVuYyA9IGFkYXB0ZXItPmFody0+cGNpX2Z1bmM7CiAJaWYgKHFsY25pY19nZXRfZXN3aXRjaF9wb3J0X2NvbmZpZyhhZGFwdGVyLCAmZXN3X2NmZykpCiAJCQlyZXR1cm4gLUVJTzsKIAlxbGNuaWNfc2V0X3ZsYW5fY29uZmlnKGFkYXB0ZXIsICZlc3dfY2ZnKTsKQEAgLTc1MCwyOCArNzgzLDI3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAl1bnNpZ25lZCBsb25nIGZlYXR1cmVzLCB2bGFuX2ZlYXR1cmVzOwogCi0JZmVhdHVyZXMgPSAoTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8CisJZmVhdHVyZXMgPSAoTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNIHwKIAkJCU5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9HUk8pOwogCXZsYW5fZmVhdHVyZXMgPSAoTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8Ci0JCQlORVRJRl9GX0lQVjZfQ1NVTSk7CisJCQlORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfSFdfVkxBTl9GSUxURVIpOwogCiAJaWYgKGFkYXB0ZXItPmNhcGFiaWxpdGllcyAmIFFMQ05JQ19GV19DQVBBQklMSVRZX1RTTykgewogCQlmZWF0dXJlcyB8PSAoTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYpOwogCQl2bGFuX2ZlYXR1cmVzIHw9IChORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNik7CiAJfQotCWlmIChhZGFwdGVyLT5jYXBhYmlsaXRpZXMgJiBRTENOSUNfRldfQ0FQQUJJTElUWV9IV19MUk8pCisKKwlpZiAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPKQogCQlmZWF0dXJlcyB8PSBORVRJRl9GX0xSTzsKIAogCWlmIChlc3dfY2ZnLT5vZmZsb2FkX2ZsYWdzICYgQklUXzApIHsKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBmZWF0dXJlczsKLQkJYWRhcHRlci0+cnhfY3N1bSA9IDE7CiAJCWlmICghKGVzd19jZmctPm9mZmxvYWRfZmxhZ3MgJiBCSVRfMSkpCiAJCQluZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzsKIAkJaWYgKCEoZXN3X2NmZy0+b2ZmbG9hZF9mbGFncyAmIEJJVF8yKSkKIAkJCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfVFNPNjsKIAl9IGVsc2UgewogCQluZXRkZXYtPmZlYXR1cmVzICY9IH5mZWF0dXJlczsKLQkJYWRhcHRlci0+cnhfY3N1bSA9IDA7CiAJfQogCiAJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzID0gKGZlYXR1cmVzICYgdmxhbl9mZWF0dXJlcyk7CkBAIC03OTEsMTQgKzgyMywxNCBAQAogCWlmIChhZGFwdGVyLT5mbGFncyAmIFFMQ05JQ19BREFQVEVSX0lOSVRJQUxJWkVEKQogCQlyZXR1cm4gMDsKIAotCXByaXZfb3AgPSBhZGFwdGVyLT5haHcucGNpX2Jhc2UwICsgUUxDTklDX0RSVl9PUF9NT0RFOworCXByaXZfb3AgPSBhZGFwdGVyLT5haHctPnBjaV9iYXNlMCArIFFMQ05JQ19EUlZfT1BfTU9ERTsKIAlvcF9tb2RlID0gcmVhZGwocHJpdl9vcCk7Ci0JcHJpdl9sZXZlbCA9IFFMQ19ERVZfR0VUX0RSVihvcF9tb2RlLCBhZGFwdGVyLT5haHcucGNpX2Z1bmMpOworCXByaXZfbGV2ZWwgPSBRTENfREVWX0dFVF9EUlYob3BfbW9kZSwgYWRhcHRlci0+YWh3LT5wY2lfZnVuYyk7CiAKIAlpZiAob3BfbW9kZSA9PSBRTENfREVWX0RSVl9ERUZBVUxUKQogCQlwcml2X2xldmVsID0gUUxDTklDX01HTVRfRlVOQzsKIAllbHNlCi0JCXByaXZfbGV2ZWwgPSBRTENfREVWX0dFVF9EUlYob3BfbW9kZSwgYWRhcHRlci0+YWh3LnBjaV9mdW5jKTsKKwkJcHJpdl9sZXZlbCA9IFFMQ19ERVZfR0VUX0RSVihvcF9tb2RlLCBhZGFwdGVyLT5haHctPnBjaV9mdW5jKTsKIAogCWlmIChhZGFwdGVyLT5mbGFncyAmIFFMQ05JQ19FU1dJVENIX0VOQUJMRUQpIHsKIAkJaWYgKHByaXZfbGV2ZWwgPT0gUUxDTklDX01HTVRfRlVOQykgewpAQCAtMTAzOCw3ICsxMDcwLDcgQEAKIAogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0Jc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9IGFkYXB0ZXItPnJlY3ZfY3R4OwogCiAJaWYgKGFkYXB0ZXItPmRpYWdfdGVzdCA9PSBRTENOSUNfSU5URVJSVVBUX1RFU1QpIHsKIAkJaGFuZGxlciA9IHFsY25pY190bXBfaW50cjsKQEAgLTEwNzUsNyArMTEwNyw3IEBACiAJaW50IHJpbmc7CiAJc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nICpzZHNfcmluZzsKIAotCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKwlzdHJ1Y3QgcWxjbmljX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSBhZGFwdGVyLT5yZWN2X2N0eDsKIAogCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOyByaW5nKyspIHsKIAkJc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1tyaW5nXTsKQEAgLTEwODMsMjAgKzExMTUsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQKLXFsY25pY19pbml0X2NvYWxlc2NlX2RlZmF1bHRzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlhZGFwdGVyLT5jb2FsLmZsYWdzID0gUUxDTklDX0lOVFJfREVGQVVMVDsKLQlhZGFwdGVyLT5jb2FsLm5vcm1hbC5kYXRhLnJ4X3RpbWVfdXMgPQotCQlRTENOSUNfREVGQVVMVF9JTlRSX0NPQUxFU0NFX1JYX1RJTUVfVVM7Ci0JYWRhcHRlci0+Y29hbC5ub3JtYWwuZGF0YS5yeF9wYWNrZXRzID0KLQkJUUxDTklDX0RFRkFVTFRfSU5UUl9DT0FMRVNDRV9SWF9QQUNLRVRTOwotCWFkYXB0ZXItPmNvYWwubm9ybWFsLmRhdGEudHhfdGltZV91cyA9Ci0JCVFMQ05JQ19ERUZBVUxUX0lOVFJfQ09BTEVTQ0VfVFhfVElNRV9VUzsKLQlhZGFwdGVyLT5jb2FsLm5vcm1hbC5kYXRhLnR4X3BhY2tldHMgPQotCQlRTENOSUNfREVGQVVMVF9JTlRSX0NPQUxFU0NFX1RYX1BBQ0tFVFM7Ci19Ci0KIHN0YXRpYyBpbnQKIF9fcWxjbmljX3VwKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKQEAgLTExMTUsMTQgKzExMzMsMTQgQEAKIAkJcmV0dXJuIC1FSU87CiAKIAlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Jkc19yaW5nczsgcmluZysrKSB7Ci0JCXJkc19yaW5nID0gJmFkYXB0ZXItPnJlY3ZfY3R4LnJkc19yaW5nc1tyaW5nXTsKLQkJcWxjbmljX3Bvc3RfcnhfYnVmZmVycyhhZGFwdGVyLCByaW5nLCByZHNfcmluZyk7CisJCXJkc19yaW5nID0gJmFkYXB0ZXItPnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ107CisJCXFsY25pY19wb3N0X3J4X2J1ZmZlcnMoYWRhcHRlciwgcmRzX3JpbmcpOwogCX0KIAogCXFsY25pY19zZXRfbXVsdGkobmV0ZGV2KTsKIAlxbGNuaWNfZndfY21kX3NldF9tdHUoYWRhcHRlciwgbmV0ZGV2LT5tdHUpOwogCi0JYWRhcHRlci0+YWh3Lmxpbmt1cCA9IDA7CisJYWRhcHRlci0+YWh3LT5saW5rdXAgPSAwOwogCiAJaWYgKGFkYXB0ZXItPm1heF9zZHNfcmluZ3MgPiAxKQogCQlxbGNuaWNfY29uZmlnX3JzcyhhZGFwdGVyLCAxKTsKQEAgLTEyMzAsOCArMTI0OCw2IEBACiAJCWdvdG8gZXJyX291dF9mcmVlX2h3OwogCX0KIAotCXFsY25pY19pbml0X2NvYWxlc2NlX2RlZmF1bHRzKGFkYXB0ZXIpOwotCiAJcWxjbmljX2NyZWF0ZV9zeXNmc19lbnRyaWVzKGFkYXB0ZXIpOwogCiAJYWRhcHRlci0+aXNfdXAgPSBRTENOSUNfQURBUFRFUl9VUF9NQUdJQzsKQEAgLTEyNzIsNyArMTI4OCw3IEBACiAJY2xlYXJfYml0KF9fUUxDTklDX0RFVl9VUCwgJmFkYXB0ZXItPnN0YXRlKTsKIAlpZiAoYWRhcHRlci0+ZGlhZ190ZXN0ID09IFFMQ05JQ19JTlRFUlJVUFRfVEVTVCkgewogCQlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Nkc19yaW5nczsgcmluZysrKSB7Ci0JCQlzZHNfcmluZyA9ICZhZGFwdGVyLT5yZWN2X2N0eC5zZHNfcmluZ3NbcmluZ107CisJCQlzZHNfcmluZyA9ICZhZGFwdGVyLT5yZWN2X2N0eC0+c2RzX3JpbmdzW3JpbmddOwogCQkJcWxjbmljX2Rpc2FibGVfaW50KHNkc19yaW5nKTsKIAkJfQogCX0KQEAgLTEyOTMsNiArMTMwOSw0OCBAQAogCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKIH0KIAorc3RhdGljIGludCBxbGNuaWNfYWxsb2NfYWRhcHRlcl9yZXNvdXJjZXMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCWludCBlcnIgPSAwOworCWFkYXB0ZXItPmFodyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBxbGNuaWNfaGFyZHdhcmVfY29udGV4dCksCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFhZGFwdGVyLT5haHcpIHsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJIkZhaWxlZCB0byBhbGxvY2F0ZSByZWN2IGN0eCByZXNvdXJjZXMgZm9yIGFkYXB0ZXJcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQ7CisJfQorCWFkYXB0ZXItPnJlY3ZfY3R4ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQpLAorCQkJCUdGUF9LRVJORUwpOworCWlmICghYWRhcHRlci0+cmVjdl9jdHgpIHsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJIkZhaWxlZCB0byBhbGxvY2F0ZSByZWN2IGN0eCByZXNvdXJjZXMgZm9yIGFkYXB0ZXJcbiIpOworCQlrZnJlZShhZGFwdGVyLT5haHcpOworCQlhZGFwdGVyLT5haHcgPSBOVUxMOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQ7CisJfQorCS8qIEluaXRpYWxpemUgaW50ZXJydXB0IGNvYWxlc2NlIHBhcmFtZXRlcnMgKi8KKwlhZGFwdGVyLT5haHctPmNvYWwuZmxhZyA9IFFMQ05JQ19JTlRSX0RFRkFVTFQ7CisJYWRhcHRlci0+YWh3LT5jb2FsLnJ4X3RpbWVfdXMgPSBRTENOSUNfREVGQVVMVF9JTlRSX0NPQUxFU0NFX1JYX1RJTUVfVVM7CisJYWRhcHRlci0+YWh3LT5jb2FsLnJ4X3BhY2tldHMgPSBRTENOSUNfREVGQVVMVF9JTlRSX0NPQUxFU0NFX1JYX1BBQ0tFVFM7CitlcnJfb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHFsY25pY19mcmVlX2FkYXB0ZXJfcmVzb3VyY2VzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlrZnJlZShhZGFwdGVyLT5yZWN2X2N0eCk7CisJYWRhcHRlci0+cmVjdl9jdHggPSBOVUxMOworCisJaWYgKGFkYXB0ZXItPmFody0+ZndfZHVtcC50bXBsX2hkcikgeworCQl2ZnJlZShhZGFwdGVyLT5haHctPmZ3X2R1bXAudG1wbF9oZHIpOworCQlhZGFwdGVyLT5haHctPmZ3X2R1bXAudG1wbF9oZHIgPSBOVUxMOworCX0KKwlrZnJlZShhZGFwdGVyLT5haHcpOworCWFkYXB0ZXItPmFodyA9IE5VTEw7Cit9CisKIGludCBxbGNuaWNfZGlhZ19hbGxvY19yZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHRlc3QpCiB7CiAJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTEzMjUsMTMgKzEzODMsMTMgQEAKIAl9CiAKIAlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Jkc19yaW5nczsgcmluZysrKSB7Ci0JCXJkc19yaW5nID0gJmFkYXB0ZXItPnJlY3ZfY3R4LnJkc19yaW5nc1tyaW5nXTsKLQkJcWxjbmljX3Bvc3RfcnhfYnVmZmVycyhhZGFwdGVyLCByaW5nLCByZHNfcmluZyk7CisJCXJkc19yaW5nID0gJmFkYXB0ZXItPnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ107CisJCXFsY25pY19wb3N0X3J4X2J1ZmZlcnMoYWRhcHRlciwgcmRzX3JpbmcpOwogCX0KIAogCWlmIChhZGFwdGVyLT5kaWFnX3Rlc3QgPT0gUUxDTklDX0lOVEVSUlVQVF9URVNUKSB7CiAJCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOyByaW5nKyspIHsKLQkJCXNkc19yaW5nID0gJmFkYXB0ZXItPnJlY3ZfY3R4LnNkc19yaW5nc1tyaW5nXTsKKwkJCXNkc19yaW5nID0gJmFkYXB0ZXItPnJlY3ZfY3R4LT5zZHNfcmluZ3NbcmluZ107CiAJCQlxbGNuaWNfZW5hYmxlX2ludChzZHNfcmluZyk7CiAJCX0KIAl9CkBAIC0xMzk5LDcgKzE0NTcsNiBAQAogCWludCBlcnI7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCi0JYWRhcHRlci0+cnhfY3N1bSA9IDE7CiAJYWRhcHRlci0+bWNfZW5hYmxlZCA9IDA7CiAJYWRhcHRlci0+bWF4X21jX2NvdW50ID0gMzg7CiAKQEAgLTE0MTAsMjYgKzE0NjcsMjQgQEAKIAogCVNFVF9FVEhUT09MX09QUyhuZXRkZXYsICZxbGNuaWNfZXRodG9vbF9vcHMpOwogCi0JbmV0ZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8Ci0JCU5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9HUk8gfCBORVRJRl9GX0hXX1ZMQU5fUlgpOwotCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSAoTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8Ci0JCU5FVElGX0ZfSVBWNl9DU1VNKTsKKwluZXRkZXYtPmh3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8CisJCU5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9SWENTVU07CiAKLQlpZiAoYWRhcHRlci0+Y2FwYWJpbGl0aWVzICYgUUxDTklDX0ZXX0NBUEFCSUxJVFlfVFNPKSB7Ci0JCW5ldGRldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082KTsKLQkJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IChORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNik7Ci0JfQorCWlmIChhZGFwdGVyLT5jYXBhYmlsaXRpZXMgJiBRTENOSUNfRldfQ0FQQUJJTElUWV9UU08pCisJCW5ldGRldi0+aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzY7CisJaWYgKHBjaV91c2luZ19kYWMpCisJCW5ldGRldi0+aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwogCi0JaWYgKHBjaV91c2luZ19kYWMpIHsKLQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7Ci0JCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7Ci0JfQorCW5ldGRldi0+dmxhbl9mZWF0dXJlcyA9IG5ldGRldi0+aHdfZmVhdHVyZXM7CiAKIAlpZiAoYWRhcHRlci0+Y2FwYWJpbGl0aWVzICYgUUxDTklDX0ZXX0NBUEFCSUxJVFlfRlZMQU5UWCkKLQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9IV19WTEFOX1RYKTsKLQorCQluZXRkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWDsKIAlpZiAoYWRhcHRlci0+Y2FwYWJpbGl0aWVzICYgUUxDTklDX0ZXX0NBUEFCSUxJVFlfSFdfTFJPKQotCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOworCQluZXRkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOworCisJbmV0ZGV2LT5mZWF0dXJlcyB8PSBuZXRkZXYtPmh3X2ZlYXR1cmVzIHwKKwkJTkVUSUZfRl9IV19WTEFOX1JYIHwgTkVUSUZfRl9IV19WTEFOX0ZJTFRFUjsKKwogCW5ldGRldi0+aXJxID0gYWRhcHRlci0+bXNpeF9lbnRyaWVzWzBdLnZlY3RvcjsKIAogCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CkBAIC0xNDU5LDYgKzE1MTQsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludAorcWxjbmljX2FsbG9jX21zaXhfZW50cmllcyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBjb3VudCkKK3sKKwlhZGFwdGVyLT5tc2l4X2VudHJpZXMgPSBrY2FsbG9jKGNvdW50LCBzaXplb2Yoc3RydWN0IG1zaXhfZW50cnkpLAorCQkJCQlHRlBfS0VSTkVMKTsKKworCWlmIChhZGFwdGVyLT5tc2l4X2VudHJpZXMpCisJCXJldHVybiAwOworCisJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiZmFpbGVkIGFsbG9jYXRpbmcgbXNpeF9lbnRyaWVzXG4iKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKwogc3RhdGljIGludCBfX2RldmluaXQKIHFsY25pY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKQEAgLTE1MDEsMjMgKzE1NjksMzAgQEAKIAlhZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlhZGFwdGVyLT5uZXRkZXYgID0gbmV0ZGV2OwogCWFkYXB0ZXItPnBkZXYgICAgPSBwZGV2OworCisJaWYgKHFsY25pY19hbGxvY19hZGFwdGVyX3Jlc291cmNlcyhhZGFwdGVyKSkKKwkJZ290byBlcnJfb3V0X2ZyZWVfbmV0ZGV2OworCiAJYWRhcHRlci0+ZGV2X3JzdF90aW1lID0gamlmZmllczsKLQogCXJldmlzaW9uX2lkID0gcGRldi0+cmV2aXNpb247Ci0JYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkID0gcmV2aXNpb25faWQ7CisJYWRhcHRlci0+YWh3LT5yZXZpc2lvbl9pZCA9IHJldmlzaW9uX2lkOwogCi0Jcndsb2NrX2luaXQoJmFkYXB0ZXItPmFody5jcmJfbG9jayk7Ci0JbXV0ZXhfaW5pdCgmYWRhcHRlci0+YWh3Lm1lbV9sb2NrKTsKKwlyd2xvY2tfaW5pdCgmYWRhcHRlci0+YWh3LT5jcmJfbG9jayk7CisJbXV0ZXhfaW5pdCgmYWRhcHRlci0+YWh3LT5tZW1fbG9jayk7CiAKIAlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+dHhfY2xlYW5fbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmFkYXB0ZXItPm1hY19saXN0KTsKIAogCWVyciA9IHFsY25pY19zZXR1cF9wY2lfbWFwKGFkYXB0ZXIpOwogCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9mcmVlX25ldGRldjsKKwkJZ290byBlcnJfb3V0X2ZyZWVfaHc7CiAKIAkvKiBUaGlzIHdpbGwgYmUgcmVzZXQgZm9yIG1lenogY2FyZHMgICovCi0JYWRhcHRlci0+cG9ydG51bSA9IGFkYXB0ZXItPmFody5wY2lfZnVuYzsKKwlhZGFwdGVyLT5wb3J0bnVtID0gYWRhcHRlci0+YWh3LT5wY2lfZnVuYzsKKworCS8qIEdldCBGVyBkdW1wIHRlbXBsYXRlIGFuZCBzdG9yZSBpdCAqLworCWlmIChhZGFwdGVyLT5vcF9tb2RlICE9IFFMQ05JQ19OT05fUFJJVl9GVU5DKQorCQlxbGNuaWNfZndfY21kX2dldF9taW5pZHVtcF90ZW1wKGFkYXB0ZXIpOwogCiAJZXJyID0gcWxjbmljX2dldF9ib2FyZF9pbmZvKGFkYXB0ZXIpOwogCWlmIChlcnIpIHsKQEAgLTE1NDUsMTEgKzE2MjAsMTUgQEAKIAogCQlwcl9pbmZvKCIlczogJXMgQm9hcmQgQ2hpcCByZXYgMHgleFxuIiwKIAkJCQltb2R1bGVfbmFtZShUSElTX01PRFVMRSksCi0JCQkJYnJkX25hbWUsIGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCk7CisJCQkJYnJkX25hbWUsIGFkYXB0ZXItPmFody0+cmV2aXNpb25faWQpOwogCX0KIAogCXFsY25pY19jbGVhcl9zdGF0cyhhZGFwdGVyKTsKIAorCWVyciA9IHFsY25pY19hbGxvY19tc2l4X2VudHJpZXMoYWRhcHRlciwgYWRhcHRlci0+bWF4X3J4X3F1ZXMpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9kZWNyX3JlZjsKKwogCXFsY25pY19zZXR1cF9pbnRyKGFkYXB0ZXIpOwogCiAJZXJyID0gcWxjbmljX3NldHVwX25ldGRldihhZGFwdGVyLCBuZXRkZXYsIHBjaV91c2luZ19kYWMpOwpAQCAtMTU2MCw3ICsxNjM5LDcgQEAKIAogCXFsY25pY19zY2hlZHVsZV93b3JrKGFkYXB0ZXIsIHFsY25pY19md19wb2xsX3dvcmssIEZXX1BPTExfREVMQVkpOwogCi0Jc3dpdGNoIChhZGFwdGVyLT5haHcucG9ydF90eXBlKSB7CisJc3dpdGNoIChhZGFwdGVyLT5haHctPnBvcnRfdHlwZSkgewogCWNhc2UgUUxDTklDX0dCRToKIAkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgIiVzOiBHYkUgcG9ydCBpbml0aWFsaXplZFxuIiwKIAkJCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOwpAQCAtMTU3OCw2ICsxNjU3LDcgQEAKIAogZXJyX291dF9kaXNhYmxlX21zaToKIAlxbGNuaWNfdGVhcmRvd25faW50cihhZGFwdGVyKTsKKwlrZnJlZShhZGFwdGVyLT5tc2l4X2VudHJpZXMpOwogCiBlcnJfb3V0X2RlY3JfcmVmOgogCXFsY25pY19jbHJfYWxsX2Rydl9zdGF0ZShhZGFwdGVyLCAwKTsKQEAgLTE1ODUsNiArMTY2NSw5IEBACiBlcnJfb3V0X2lvdW5tYXA6CiAJcWxjbmljX2NsZWFudXBfcGNpX21hcChhZGFwdGVyKTsKIAorZXJyX291dF9mcmVlX2h3OgorCXFsY25pY19mcmVlX2FkYXB0ZXJfcmVzb3VyY2VzKGFkYXB0ZXIpOworCiBlcnJfb3V0X2ZyZWVfbmV0ZGV2OgogCWZyZWVfbmV0ZGV2KG5ldGRldik7CiAKQEAgLTE2MjYsNiArMTcwOSw3IEBACiAJcWxjbmljX2ZyZWVfbGJfZmlsdGVyc19tZW0oYWRhcHRlcik7CiAKIAlxbGNuaWNfdGVhcmRvd25faW50cihhZGFwdGVyKTsKKwlrZnJlZShhZGFwdGVyLT5tc2l4X2VudHJpZXMpOwogCiAJcWxjbmljX3JlbW92ZV9kaWFnX2VudHJpZXMoYWRhcHRlcik7CiAKQEAgLTE2MzgsNiArMTcyMiw3IEBACiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAorCXFsY25pY19mcmVlX2FkYXB0ZXJfcmVzb3VyY2VzKGFkYXB0ZXIpOwogCWZyZWVfbmV0ZGV2KG5ldGRldik7CiB9CiBzdGF0aWMgaW50IF9fcWxjbmljX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQpAQCAtMTgxOSw2ICsxOTA0LDcgQEAKIAl2bGFuX3JlcS0+dmxhbl9pZCA9IHZsYW5faWQ7CiAKIAl0eF9yaW5nLT5wcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLCB0eF9yaW5nLT5udW1fZGVzYyk7CisJc21wX21iKCk7CiB9CiAKICNkZWZpbmUgUUxDTklDX01BQ19IQVNIKE1BQylcCkBAIC0xODc5LDU4ICsxOTY1LDEyMiBAQAogCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5tYWNfbGVhcm5fbG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkCi1xbGNuaWNfdHNvX2NoZWNrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0JCXN0cnVjdCBxbGNuaWNfaG9zdF90eF9yaW5nICp0eF9yaW5nLAorc3RhdGljIGludAorcWxjbmljX3R4X3BrdChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCXN0cnVjdCBjbWRfZGVzY190eXBlMCAqZmlyc3RfZGVzYywKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQl1OCBvcGNvZGUgPSBUWF9FVEhFUl9QS1Q7Ci0JX19iZTE2IHByb3RvY29sID0gc2tiLT5wcm90b2NvbDsKLQl1MTYgZmxhZ3MgPSAwOwotCWludCBjb3BpZWQsIG9mZnNldCwgY29weV9sZW4sIGhkcl9sZW4gPSAwLCB0c28gPSAwOworCXU4IG9wY29kZSA9IDAsIGhkcl9sZW4gPSAwOworCXUxNiBmbGFncyA9IDAsIHZsYW5fdGNpID0gMDsKKwlpbnQgY29waWVkLCBvZmZzZXQsIGNvcHlfbGVuOwogCXN0cnVjdCBjbWRfZGVzY190eXBlMCAqaHdkZXNjOwogCXN0cnVjdCB2bGFuX2V0aGhkciAqdmg7Ci0Jc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgcWxjbmljX2hvc3RfdHhfcmluZyAqdHhfcmluZyA9IGFkYXB0ZXItPnR4X3Jpbmc7CisJdTE2IHByb3RvY29sID0gbnRvaHMoc2tiLT5wcm90b2NvbCk7CiAJdTMyIHByb2R1Y2VyID0gdHhfcmluZy0+cHJvZHVjZXI7Ci0JX19sZTE2IHZsYW5fb29iID0gZmlyc3RfZGVzYy0+ZmxhZ3Nfb3Bjb2RlICYKLQkJCQljcHVfdG9fbGUxNihGTEFHU19WTEFOX09PQik7CisKKwlpZiAocHJvdG9jb2wgPT0gRVRIX1BfODAyMVEpIHsKKwkJdmggPSAoc3RydWN0IHZsYW5fZXRoaGRyICopc2tiLT5kYXRhOworCQlmbGFncyA9IEZMQUdTX1ZMQU5fVEFHR0VEOworCQl2bGFuX3RjaSA9IHZoLT5oX3ZsYW5fVENJOworCX0gZWxzZSBpZiAodmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7CisJCWZsYWdzID0gRkxBR1NfVkxBTl9PT0I7CisJCXZsYW5fdGNpID0gdmxhbl90eF90YWdfZ2V0KHNrYik7CisJfQorCWlmICh1bmxpa2VseShhZGFwdGVyLT5wdmlkKSkgeworCQlpZiAodmxhbl90Y2kgJiYgIShhZGFwdGVyLT5mbGFncyAmIFFMQ05JQ19UQUdHSU5HX0VOQUJMRUQpKQorCQkJcmV0dXJuIC1FSU87CisJCWlmICh2bGFuX3RjaSAmJiAoYWRhcHRlci0+ZmxhZ3MgJiBRTENOSUNfVEFHR0lOR19FTkFCTEVEKSkKKwkJCWdvdG8gc2V0X2ZsYWdzOworCisJCWZsYWdzID0gRkxBR1NfVkxBTl9PT0I7CisJCXZsYW5fdGNpID0gYWRhcHRlci0+cHZpZDsKKwl9CitzZXRfZmxhZ3M6CisJcWxjbmljX3NldF90eF92bGFuX3RjaShmaXJzdF9kZXNjLCB2bGFuX3RjaSk7CisJcWxjbmljX3NldF90eF9mbGFnc19vcGNvZGUoZmlyc3RfZGVzYywgZmxhZ3MsIG9wY29kZSk7CiAKIAlpZiAoKihza2ItPmRhdGEpICYgQklUXzApIHsKIAkJZmxhZ3MgfD0gQklUXzA7CiAJCW1lbWNweSgmZmlyc3RfZGVzYy0+ZXRoX2FkZHIsIHNrYi0+ZGF0YSwgRVRIX0FMRU4pOwogCX0KLQotCWlmICgobmV0ZGV2LT5mZWF0dXJlcyAmIChORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNikpICYmCisJb3Bjb2RlID0gVFhfRVRIRVJfUEtUOworCWlmICgoYWRhcHRlci0+bmV0ZGV2LT5mZWF0dXJlcyAmIChORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNikpICYmCiAJCQlza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplID4gMCkgewogCiAJCWhkcl9sZW4gPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsgdGNwX2hkcmxlbihza2IpOwogCiAJCWZpcnN0X2Rlc2MtPm1zcyA9IGNwdV90b19sZTE2KHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUpOwogCQlmaXJzdF9kZXNjLT50b3RhbF9oZHJfbGVuZ3RoID0gaGRyX2xlbjsKLQkJaWYgKHZsYW5fb29iKSB7CisKKwkJb3Bjb2RlID0gKHByb3RvY29sID09IEVUSF9QX0lQVjYpID8gVFhfVENQX0xTTzYgOiBUWF9UQ1BfTFNPOworCisJCS8qIEZvciBMU08sIHdlIG5lZWQgdG8gY29weSB0aGUgTUFDL0lQL1RDUCBoZWFkZXJzIGludG8KKwkJKiB0aGUgZGVzY3JpcHRvciByaW5nICovCisJCWNvcGllZCA9IDA7CisJCW9mZnNldCA9IDI7CisKKwkJaWYgKGZsYWdzICYgRkxBR1NfVkxBTl9PT0IpIHsKIAkJCWZpcnN0X2Rlc2MtPnRvdGFsX2hkcl9sZW5ndGggKz0gVkxBTl9ITEVOOwogCQkJZmlyc3RfZGVzYy0+dGNwX2hkcl9vZmZzZXQgPSBWTEFOX0hMRU47CiAJCQlmaXJzdF9kZXNjLT5pcF9oZHJfb2Zmc2V0ID0gVkxBTl9ITEVOOwogCQkJLyogT25seSBpbiBjYXNlIG9mIFRTTyBvbiB2bGFuIGRldmljZSAqLwogCQkJZmxhZ3MgfD0gRkxBR1NfVkxBTl9UQUdHRUQ7CisKKwkJCS8qIENyZWF0ZSBhIFRTTyB2bGFuIGhlYWRlciB0ZW1wbGF0ZSBmb3IgZmlybXdhcmUgKi8KKworCQkJaHdkZXNjID0gJnR4X3JpbmctPmRlc2NfaGVhZFtwcm9kdWNlcl07CisJCQl0eF9yaW5nLT5jbWRfYnVmX2Fycltwcm9kdWNlcl0uc2tiID0gTlVMTDsKKworCQkJY29weV9sZW4gPSBtaW4oKGludClzaXplb2Yoc3RydWN0IGNtZF9kZXNjX3R5cGUwKSAtCisJCQkJb2Zmc2V0LCBoZHJfbGVuICsgVkxBTl9ITEVOKTsKKworCQkJdmggPSAoc3RydWN0IHZsYW5fZXRoaGRyICopKChjaGFyICopIGh3ZGVzYyArIDIpOworCQkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIHZoLCAxMik7CisJCQl2aC0+aF92bGFuX3Byb3RvID0gaHRvbnMoRVRIX1BfODAyMVEpOworCQkJdmgtPmhfdmxhbl9UQ0kgPSBodG9ucyh2bGFuX3RjaSk7CisKKwkJCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFfb2Zmc2V0KHNrYiwgMTIsCisJCQkJKGNoYXIgKil2aCArIDE2LCBjb3B5X2xlbiAtIDE2KTsKKworCQkJY29waWVkID0gY29weV9sZW4gLSBWTEFOX0hMRU47CisJCQlvZmZzZXQgPSAwOworCisJCQlwcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLCB0eF9yaW5nLT5udW1fZGVzYyk7CiAJCX0KIAotCQlvcGNvZGUgPSAocHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfSVBWNikpID8KLQkJCQlUWF9UQ1BfTFNPNiA6IFRYX1RDUF9MU087Ci0JCXRzbyA9IDE7CisJCXdoaWxlIChjb3BpZWQgPCBoZHJfbGVuKSB7CisKKwkJCWNvcHlfbGVuID0gbWluKChpbnQpc2l6ZW9mKHN0cnVjdCBjbWRfZGVzY190eXBlMCkgLQorCQkJCW9mZnNldCwgKGhkcl9sZW4gLSBjb3BpZWQpKTsKKworCQkJaHdkZXNjID0gJnR4X3JpbmctPmRlc2NfaGVhZFtwcm9kdWNlcl07CisJCQl0eF9yaW5nLT5jbWRfYnVmX2Fycltwcm9kdWNlcl0uc2tiID0gTlVMTDsKKworCQkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YV9vZmZzZXQoc2tiLCBjb3BpZWQsCisJCQkJIChjaGFyICopIGh3ZGVzYyArIG9mZnNldCwgY29weV9sZW4pOworCisJCQljb3BpZWQgKz0gY29weV9sZW47CisJCQlvZmZzZXQgPSAwOworCisJCQlwcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLCB0eF9yaW5nLT5udW1fZGVzYyk7CisJCX0KKworCQl0eF9yaW5nLT5wcm9kdWNlciA9IHByb2R1Y2VyOworCQlzbXBfbWIoKTsKKwkJYWRhcHRlci0+c3RhdHMubHNvX2ZyYW1lcysrOwogCiAJfSBlbHNlIGlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CiAJCXU4IGw0cHJvdG87CiAKLQkJaWYgKHByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX0lQKSkgeworCQlpZiAocHJvdG9jb2wgPT0gRVRIX1BfSVApIHsKIAkJCWw0cHJvdG8gPSBpcF9oZHIoc2tiKS0+cHJvdG9jb2w7CiAKIAkJCWlmIChsNHByb3RvID09IElQUFJPVE9fVENQKQogCQkJCW9wY29kZSA9IFRYX1RDUF9QS1Q7CiAJCQllbHNlIGlmIChsNHByb3RvID09IElQUFJPVE9fVURQKQogCQkJCW9wY29kZSA9IFRYX1VEUF9QS1Q7Ci0JCX0gZWxzZSBpZiAocHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfSVBWNikpIHsKKwkJfSBlbHNlIGlmIChwcm90b2NvbCA9PSBFVEhfUF9JUFY2KSB7CiAJCQlsNHByb3RvID0gaXB2Nl9oZHIoc2tiKS0+bmV4dGhkcjsKIAogCQkJaWYgKGw0cHJvdG8gPT0gSVBQUk9UT19UQ1ApCkBAIC0xOTM5LDYzICsyMDg5LDExIEBACiAJCQkJb3Bjb2RlID0gVFhfVURQVjZfUEtUOwogCQl9CiAJfQotCiAJZmlyc3RfZGVzYy0+dGNwX2hkcl9vZmZzZXQgKz0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTsKIAlmaXJzdF9kZXNjLT5pcF9oZHJfb2Zmc2V0ICs9IHNrYl9uZXR3b3JrX29mZnNldChza2IpOwogCXFsY25pY19zZXRfdHhfZmxhZ3Nfb3Bjb2RlKGZpcnN0X2Rlc2MsIGZsYWdzLCBvcGNvZGUpOwogCi0JaWYgKCF0c28pCi0JCXJldHVybjsKLQotCS8qIEZvciBMU08sIHdlIG5lZWQgdG8gY29weSB0aGUgTUFDL0lQL1RDUCBoZWFkZXJzIGludG8KLQkgKiB0aGUgZGVzY3JpcHRvciByaW5nCi0JICovCi0JY29waWVkID0gMDsKLQlvZmZzZXQgPSAyOwotCi0JaWYgKHZsYW5fb29iKSB7Ci0JCS8qIENyZWF0ZSBhIFRTTyB2bGFuIGhlYWRlciB0ZW1wbGF0ZSBmb3IgZmlybXdhcmUgKi8KLQotCQlod2Rlc2MgPSAmdHhfcmluZy0+ZGVzY19oZWFkW3Byb2R1Y2VyXTsKLQkJdHhfcmluZy0+Y21kX2J1Zl9hcnJbcHJvZHVjZXJdLnNrYiA9IE5VTEw7Ci0KLQkJY29weV9sZW4gPSBtaW4oKGludClzaXplb2Yoc3RydWN0IGNtZF9kZXNjX3R5cGUwKSAtIG9mZnNldCwKLQkJCQloZHJfbGVuICsgVkxBTl9ITEVOKTsKLQotCQl2aCA9IChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKikoKGNoYXIgKilod2Rlc2MgKyAyKTsKLQkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIHZoLCAxMik7Ci0JCXZoLT5oX3ZsYW5fcHJvdG8gPSBodG9ucyhFVEhfUF84MDIxUSk7Ci0JCXZoLT5oX3ZsYW5fVENJID0gKF9fYmUxNilzd2FiMTYoKHUxNilmaXJzdF9kZXNjLT52bGFuX1RDSSk7Ci0KLQkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YV9vZmZzZXQoc2tiLCAxMiwKLQkJCQkoY2hhciAqKXZoICsgMTYsIGNvcHlfbGVuIC0gMTYpOwotCi0JCWNvcGllZCA9IGNvcHlfbGVuIC0gVkxBTl9ITEVOOwotCQlvZmZzZXQgPSAwOwotCi0JCXByb2R1Y2VyID0gZ2V0X25leHRfaW5kZXgocHJvZHVjZXIsIHR4X3JpbmctPm51bV9kZXNjKTsKLQl9Ci0KLQl3aGlsZSAoY29waWVkIDwgaGRyX2xlbikgewotCi0JCWNvcHlfbGVuID0gbWluKChpbnQpc2l6ZW9mKHN0cnVjdCBjbWRfZGVzY190eXBlMCkgLSBvZmZzZXQsCi0JCQkJKGhkcl9sZW4gLSBjb3BpZWQpKTsKLQotCQlod2Rlc2MgPSAmdHhfcmluZy0+ZGVzY19oZWFkW3Byb2R1Y2VyXTsKLQkJdHhfcmluZy0+Y21kX2J1Zl9hcnJbcHJvZHVjZXJdLnNrYiA9IE5VTEw7Ci0KLQkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YV9vZmZzZXQoc2tiLCBjb3BpZWQsCi0JCQkJIChjaGFyICopaHdkZXNjICsgb2Zmc2V0LCBjb3B5X2xlbik7Ci0KLQkJY29waWVkICs9IGNvcHlfbGVuOwotCQlvZmZzZXQgPSAwOwotCi0JCXByb2R1Y2VyID0gZ2V0X25leHRfaW5kZXgocHJvZHVjZXIsIHR4X3JpbmctPm51bV9kZXNjKTsKLQl9Ci0KLQl0eF9yaW5nLT5wcm9kdWNlciA9IHByb2R1Y2VyOwotCWJhcnJpZXIoKTsKLQlhZGFwdGVyLT5zdGF0cy5sc29fZnJhbWVzKys7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTIwNDYsMzkgKzIxNDQsMjEgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotc3RhdGljIGludAotcWxjbmljX2NoZWNrX3R4X3RhZ2dpbmcoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLAotCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCXN0cnVjdCBjbWRfZGVzY190eXBlMCAqZmlyc3RfZGVzYykKK3N0YXRpYyB2b2lkCitxbGNuaWNfdW5tYXBfYnVmZmVycyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCXN0cnVjdCBxbGNuaWNfY21kX2J1ZmZlciAqcGJ1ZikKIHsKLQl1OCBvcGNvZGUgPSAwOwotCXUxNiBmbGFncyA9IDA7Ci0JX19iZTE2IHByb3RvY29sID0gc2tiLT5wcm90b2NvbDsKLQlzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZoOworCXN0cnVjdCBxbGNuaWNfc2tiX2ZyYWcgKm5mID0gJnBidWYtPmZyYWdfYXJyYXlbMF07CisJaW50IG5yX2ZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKwlpbnQgaTsKIAotCWlmIChwcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF84MDIxUSkpIHsKLQkJdmggPSAoc3RydWN0IHZsYW5fZXRoaGRyICopc2tiLT5kYXRhOwotCQlwcm90b2NvbCA9IHZoLT5oX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvOwotCQlmbGFncyA9IEZMQUdTX1ZMQU5fVEFHR0VEOwotCQlxbGNuaWNfc2V0X3R4X3ZsYW5fdGNpKGZpcnN0X2Rlc2MsIG50b2hzKHZoLT5oX3ZsYW5fVENJKSk7Ci0JfSBlbHNlIGlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKLQkJZmxhZ3MgPSBGTEFHU19WTEFOX09PQjsKLQkJcWxjbmljX3NldF90eF92bGFuX3RjaShmaXJzdF9kZXNjLCB2bGFuX3R4X3RhZ19nZXQoc2tiKSk7CisJZm9yIChpID0gMDsgaSA8IG5yX2ZyYWdzOyBpKyspIHsKKwkJbmYgPSAmcGJ1Zi0+ZnJhZ19hcnJheVtpKzFdOworCQlwY2lfdW5tYXBfcGFnZShwZGV2LCBuZi0+ZG1hLCBuZi0+bGVuZ3RoLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAl9Ci0JaWYgKHVubGlrZWx5KGFkYXB0ZXItPnB2aWQpKSB7Ci0JCWlmIChmaXJzdF9kZXNjLT52bGFuX1RDSSAmJgotCQkJCSEoYWRhcHRlci0+ZmxhZ3MgJiBRTENOSUNfVEFHR0lOR19FTkFCTEVEKSkKLQkJCXJldHVybiAtRUlPOwotCQlpZiAoZmlyc3RfZGVzYy0+dmxhbl9UQ0kgJiYKLQkJCQkoYWRhcHRlci0+ZmxhZ3MgJiBRTENOSUNfVEFHR0lOR19FTkFCTEVEKSkKLQkJCWdvdG8gc2V0X2ZsYWdzOwogCi0JCWZsYWdzID0gRkxBR1NfVkxBTl9PT0I7Ci0JCXFsY25pY19zZXRfdHhfdmxhbl90Y2koZmlyc3RfZGVzYywgYWRhcHRlci0+cHZpZCk7Ci0JfQotc2V0X2ZsYWdzOgotCXFsY25pY19zZXRfdHhfZmxhZ3Nfb3Bjb2RlKGZpcnN0X2Rlc2MsIGZsYWdzLCBvcGNvZGUpOwotCXJldHVybiAwOworCW5mID0gJnBidWYtPmZyYWdfYXJyYXlbMF07CisJcGNpX3VubWFwX3NpbmdsZShwZGV2LCBuZi0+ZG1hLCBza2JfaGVhZGxlbihza2IpLCBQQ0lfRE1BX1RPREVWSUNFKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCkBAIC0yMTAzLDcgKzIxODMsNyBAQAogCWludCBpLCBrOwogCiAJdTMyIHByb2R1Y2VyOwotCWludCBmcmFnX2NvdW50LCBub19vZl9kZXNjOworCWludCBmcmFnX2NvdW50OwogCXUzMiBudW1fdHhkID0gdHhfcmluZy0+bnVtX2Rlc2M7CiAKIAlpZiAoIXRlc3RfYml0KF9fUUxDTklDX0RFVl9VUCwgJmFkYXB0ZXItPnN0YXRlKSkgewpAQCAtMjEzMywxMiArMjIxMyw4IEBACiAJCWZyYWdfY291bnQgPSAxICsgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKIAl9CiAKLQkvKiA0IGZyYWdtZW50cyBwZXIgY21kIGRlcyAqLwotCW5vX29mX2Rlc2MgPSAoZnJhZ19jb3VudCArIDMpID4+IDI7Ci0KIAlpZiAodW5saWtlbHkocWxjbmljX3R4X2F2YWlsKHR4X3JpbmcpIDw9IFRYX1NUT1BfVEhSRVNIKSkgewogCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7Ci0JCXNtcF9tYigpOwogCQlpZiAocWxjbmljX3R4X2F2YWlsKHR4X3JpbmcpID4gVFhfU1RPUF9USFJFU0gpCiAJCQluZXRpZl9zdGFydF9xdWV1ZShuZXRkZXYpOwogCQllbHNlIHsKQEAgLTIxNTUsOSArMjIzMSw2IEBACiAJZmlyc3RfZGVzYyA9IGh3ZGVzYyA9ICZ0eF9yaW5nLT5kZXNjX2hlYWRbcHJvZHVjZXJdOwogCXFsY25pY19jbGVhcl9jbWRkZXNjKCh1NjQgKilod2Rlc2MpOwogCi0JaWYgKHFsY25pY19jaGVja190eF90YWdnaW5nKGFkYXB0ZXIsIHNrYiwgZmlyc3RfZGVzYykpCi0JCWdvdG8gZHJvcF9wYWNrZXQ7Ci0KIAlpZiAocWxjbmljX21hcF90eF9za2IocGRldiwgc2tiLCBwYnVmKSkgewogCQlhZGFwdGVyLT5zdGF0cy50eF9kbWFfbWFwX2Vycm9yKys7CiAJCWdvdG8gZHJvcF9wYWNrZXQ7CkBAIC0yMjAxLDggKzIyNzQsMTAgQEAKIAl9CiAKIAl0eF9yaW5nLT5wcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLCBudW1fdHhkKTsKKwlzbXBfbWIoKTsKIAotCXFsY25pY190c29fY2hlY2sobmV0ZGV2LCB0eF9yaW5nLCBmaXJzdF9kZXNjLCBza2IpOworCWlmICh1bmxpa2VseShxbGNuaWNfdHhfcGt0KGFkYXB0ZXIsIGZpcnN0X2Rlc2MsIHNrYikpKQorCQlnb3RvIHVud2luZF9idWZmOwogCiAJaWYgKHFsY25pY19tYWNfbGVhcm4pCiAJCXFsY25pY19zZW5kX2ZpbHRlcihhZGFwdGVyLCB0eF9yaW5nLCBmaXJzdF9kZXNjLCBza2IpOwpAQCAtMjIxNCw2ICsyMjg5LDggQEAKIAogCXJldHVybiBORVRERVZfVFhfT0s7CiAKK3Vud2luZF9idWZmOgorCXFsY25pY191bm1hcF9idWZmZXJzKHBkZXYsIHNrYiwgcGJ1Zik7CiBkcm9wX3BhY2tldDoKIAlhZGFwdGVyLT5zdGF0cy50eGRyb3BwZWQrKzsKIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwpAQCAtMjI2MCwxNiArMjMzNywxNiBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAKLQlpZiAoYWRhcHRlci0+YWh3Lmxpbmt1cCAmJiAhbGlua3VwKSB7CisJaWYgKGFkYXB0ZXItPmFody0+bGlua3VwICYmICFsaW5rdXApIHsKIAkJbmV0ZGV2X2luZm8obmV0ZGV2LCAiTklDIExpbmsgaXMgZG93blxuIik7Ci0JCWFkYXB0ZXItPmFody5saW5rdXAgPSAwOworCQlhZGFwdGVyLT5haHctPmxpbmt1cCA9IDA7CiAJCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAJCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CiAJCX0KLQl9IGVsc2UgaWYgKCFhZGFwdGVyLT5haHcubGlua3VwICYmIGxpbmt1cCkgeworCX0gZWxzZSBpZiAoIWFkYXB0ZXItPmFody0+bGlua3VwICYmIGxpbmt1cCkgewogCQluZXRkZXZfaW5mbyhuZXRkZXYsICJOSUMgTGluayBpcyB1cFxuIik7Ci0JCWFkYXB0ZXItPmFody5saW5rdXAgPSAxOworCQlhZGFwdGVyLT5haHctPmxpbmt1cCA9IDE7CiAJCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKIAkJCW5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTsKIAkJCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKQEAgLTI1MDUsNyArMjU4Miw3IEBACiAJaW50IHJpbmc7CiAJc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nICpzZHNfcmluZzsKIAlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKwlzdHJ1Y3QgcWxjbmljX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSBhZGFwdGVyLT5yZWN2X2N0eDsKIAogCWRpc2FibGVfaXJxKGFkYXB0ZXItPmlycSk7CiAJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7IHJpbmcrKykgewpAQCAtMjc1Niw2ICsyODMzLDggQEAKIAkJCXNldF9iaXQoX19RTENOSUNfU1RBUlRfRlcsICZhZGFwdGVyLT5zdGF0ZSk7CiAJCQlRTENEQihhZGFwdGVyLCBEUlYsICJSZXN0YXJ0aW5nIGZ3XG4iKTsKIAkJCXFsY25pY19pZGNfZGVidWdfaW5mbyhhZGFwdGVyLCAwKTsKKwkJCVFMQ0RCKGFkYXB0ZXIsIERSViwgIlRha2UgRlcgZHVtcFxuIik7CisJCQlxbGNuaWNfZHVtcF9mdyhhZGFwdGVyKTsKIAkJfQogCiAJCXFsY25pY19hcGlfdW5sb2NrKGFkYXB0ZXIpOwpAQCAtMjg1NCw3ICsyOTMzLDcgQEAKIH0KIAogLypUcmFuc2l0IHRvIFJFU0VUIHN0YXRlIGZyb20gUkVBRFkgc3RhdGUgb25seSAqLwotc3RhdGljIHZvaWQKK3ZvaWQKIHFsY25pY19kZXZfcmVxdWVzdF9yZXNldChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJdTMyIHN0YXRlOwpAQCAtMzI2Niw2ICszMzQ1LDU2IEBACiAJLnN0b3JlID0gcWxjbmljX3N0b3JlX2RpYWdfbW9kZSwKIH07CiAKK2ludCBxbGNuaWNfdmFsaWRhdGVfbWF4X3JzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1OCBtYXhfaHcsIHU4IHZhbCkKK3sKKwlpZiAoIXVzZV9tc2lfeCAmJiAhdXNlX21zaSkgeworCQluZXRkZXZfaW5mbyhuZXRkZXYsICJubyBtc2l4IG9yIG1zaSBzdXBwb3J0LCBoZW5jZSBubyByc3NcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoKHZhbCA+IG1heF9odykgfHwgKHZhbCA8ICAyKSB8fCAhaXNfcG93ZXJfb2ZfMih2YWwpKSB7CisJCW5ldGRldl9pbmZvKG5ldGRldiwgInJzc19yaW5nIHZhbGlkIHJhbmdlIFsyIC0gJXhdIGluICIKKwkJCSIgcG93ZXJzIG9mIDJcbiIsIG1heF9odyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKKworfQorCitpbnQgcWxjbmljX3NldF9tYXhfcnNzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgdTggZGF0YSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCWludCBlcnIgPSAwOworCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoX19RTENOSUNfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQorCQlyZXR1cm4gLUVCVVNZOworCisJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCV9fcWxjbmljX2Rvd24oYWRhcHRlciwgbmV0ZGV2KTsKKwlxbGNuaWNfZGV0YWNoKGFkYXB0ZXIpOworCXFsY25pY190ZWFyZG93bl9pbnRyKGFkYXB0ZXIpOworCisJaWYgKHFsY25pY19lbmFibGVfbXNpeChhZGFwdGVyLCBkYXRhKSkgeworCQluZXRkZXZfaW5mbyhuZXRkZXYsICJmYWlsZWQgc2V0dGluZyBtYXhfcnNzOyByc3MgZGlzYWJsZWRcbiIpOworCQlxbGNuaWNfZW5hYmxlX21zaV9sZWdhY3koYWRhcHRlcik7CisJfQorCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQllcnIgPSBxbGNuaWNfYXR0YWNoKGFkYXB0ZXIpOworCQlpZiAoZXJyKQorCQkJZ290byBkb25lOworCQllcnIgPSBfX3FsY25pY191cChhZGFwdGVyLCBuZXRkZXYpOworCQlpZiAoZXJyKQorCQkJZ290byBkb25lOworCQlxbGNuaWNfcmVzdG9yZV9pbmRldl9hZGRyKG5ldGRldiwgTkVUREVWX1VQKTsKKwl9CisgZG9uZToKKwluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CisJY2xlYXJfYml0KF9fUUxDTklDX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgaW50CiBxbGNuaWNfc3lzZnNfdmFsaWRhdGVfY3JiKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwKIAkJbG9mZl90IG9mZnNldCwgc2l6ZV90IHNpemUpCkBAIC0zMzk2LDcgKzM1MjUsNiBAQAogCXJldHVybiBzaXplOwogfQogCi0KIHN0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBiaW5fYXR0cl9jcmIgPSB7CiAJLmF0dHIgPSB7Lm5hbWUgPSAiY3JiIiwgLm1vZGUgPSAoU19JUlVHTyB8IFNfSVdVU1IpfSwKIAkuc2l6ZSA9IDAsCkBAIC0zNTE1LDcgKzM2NDMsNyBAQAogCXU4IHBjaV9mdW5jOwogCWludCBpOwogCi0Jb3BfbW9kZSA9IHJlYWRsKGFkYXB0ZXItPmFody5wY2lfYmFzZTAgKyBRTENOSUNfRFJWX09QX01PREUpOworCW9wX21vZGUgPSByZWFkbChhZGFwdGVyLT5haHctPnBjaV9iYXNlMCArIFFMQ05JQ19EUlZfT1BfTU9ERSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogCQlwY2lfZnVuYyA9IGVzd19jZmdbaV0ucGNpX2Z1bmM7CkBAIC0zNTgxLDEzICszNzA5LDEzIEBACiAJCQlpZiAocWxjbmljX2NvbmZpZ19zd2l0Y2hfcG9ydChhZGFwdGVyLCAmZXN3X2NmZ1tpXSkpCiAJCQkJcmV0dXJuIFFMX1NUQVRVU19JTlZBTElEX1BBUkFNOwogCi0JCWlmIChhZGFwdGVyLT5haHcucGNpX2Z1bmMgIT0gZXN3X2NmZ1tpXS5wY2lfZnVuYykKKwkJaWYgKGFkYXB0ZXItPmFody0+cGNpX2Z1bmMgIT0gZXN3X2NmZ1tpXS5wY2lfZnVuYykKIAkJCWNvbnRpbnVlOwogCiAJCW9wX21vZGUgPSBlc3dfY2ZnW2ldLm9wX21vZGU7CiAJCXFsY25pY19nZXRfZXN3aXRjaF9wb3J0X2NvbmZpZyhhZGFwdGVyLCAmZXN3X2NmZ1tpXSk7CiAJCWVzd19jZmdbaV0ub3BfbW9kZSA9IG9wX21vZGU7Ci0JCWVzd19jZmdbaV0ucGNpX2Z1bmMgPSBhZGFwdGVyLT5haHcucGNpX2Z1bmM7CisJCWVzd19jZmdbaV0ucGNpX2Z1bmMgPSBhZGFwdGVyLT5haHctPnBjaV9mdW5jOwogCiAJCXN3aXRjaCAoZXN3X2NmZ1tpXS5vcF9tb2RlKSB7CiAJCWNhc2UgUUxDTklDX1BPUlRfREVGQVVMVFM6CkBAIC0zOTY4LDE0ICs0MDk2LDE0IEBACiAJCWRldl9pbmZvKGRldiwgImZhaWxlZCB0byBjcmVhdGUgY3JiIHN5c2ZzIGVudHJ5XG4iKTsKIAlpZiAoZGV2aWNlX2NyZWF0ZV9iaW5fZmlsZShkZXYsICZiaW5fYXR0cl9tZW0pKQogCQlkZXZfaW5mbyhkZXYsICJmYWlsZWQgdG8gY3JlYXRlIG1lbSBzeXNmcyBlbnRyeVxuIik7CisJaWYgKGRldmljZV9jcmVhdGVfYmluX2ZpbGUoZGV2LCAmYmluX2F0dHJfcGNpX2NvbmZpZykpCisJCWRldl9pbmZvKGRldiwgImZhaWxlZCB0byBjcmVhdGUgcGNpIGNvbmZpZyBzeXNmcyBlbnRyeSIpOwogCWlmICghKGFkYXB0ZXItPmZsYWdzICYgUUxDTklDX0VTV0lUQ0hfRU5BQkxFRCkpCiAJCXJldHVybjsKIAlpZiAoZGV2aWNlX2NyZWF0ZV9iaW5fZmlsZShkZXYsICZiaW5fYXR0cl9lc3dfY29uZmlnKSkKIAkJZGV2X2luZm8oZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBlc3cgY29uZmlnIHN5c2ZzIGVudHJ5Iik7CiAJaWYgKGFkYXB0ZXItPm9wX21vZGUgIT0gUUxDTklDX01HTVRfRlVOQykKIAkJcmV0dXJuOwotCWlmIChkZXZpY2VfY3JlYXRlX2Jpbl9maWxlKGRldiwgJmJpbl9hdHRyX3BjaV9jb25maWcpKQotCQlkZXZfaW5mbyhkZXYsICJmYWlsZWQgdG8gY3JlYXRlIHBjaSBjb25maWcgc3lzZnMgZW50cnkiKTsKIAlpZiAoZGV2aWNlX2NyZWF0ZV9iaW5fZmlsZShkZXYsICZiaW5fYXR0cl9ucGFyX2NvbmZpZykpCiAJCWRldl9pbmZvKGRldiwgImZhaWxlZCB0byBjcmVhdGUgbnBhciBjb25maWcgc3lzZnMgZW50cnkiKTsKIAlpZiAoZGV2aWNlX2NyZWF0ZV9iaW5fZmlsZShkZXYsICZiaW5fYXR0cl9wbV9jb25maWcpKQpAQCAtMzk5NiwxMiArNDEyNCwxMiBAQAogCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kaWFnX21vZGUpOwogCWRldmljZV9yZW1vdmVfYmluX2ZpbGUoZGV2LCAmYmluX2F0dHJfY3JiKTsKIAlkZXZpY2VfcmVtb3ZlX2Jpbl9maWxlKGRldiwgJmJpbl9hdHRyX21lbSk7CisJZGV2aWNlX3JlbW92ZV9iaW5fZmlsZShkZXYsICZiaW5fYXR0cl9wY2lfY29uZmlnKTsKIAlpZiAoIShhZGFwdGVyLT5mbGFncyAmIFFMQ05JQ19FU1dJVENIX0VOQUJMRUQpKQogCQlyZXR1cm47CiAJZGV2aWNlX3JlbW92ZV9iaW5fZmlsZShkZXYsICZiaW5fYXR0cl9lc3dfY29uZmlnKTsKIAlpZiAoYWRhcHRlci0+b3BfbW9kZSAhPSBRTENOSUNfTUdNVF9GVU5DKQogCQlyZXR1cm47Ci0JZGV2aWNlX3JlbW92ZV9iaW5fZmlsZShkZXYsICZiaW5fYXR0cl9wY2lfY29uZmlnKTsKIAlkZXZpY2VfcmVtb3ZlX2Jpbl9maWxlKGRldiwgJmJpbl9hdHRyX25wYXJfY29uZmlnKTsKIAlkZXZpY2VfcmVtb3ZlX2Jpbl9maWxlKGRldiwgJmJpbl9hdHRyX3BtX2NvbmZpZyk7CiAJZGV2aWNlX3JlbW92ZV9iaW5fZmlsZShkZXYsICZiaW5fYXR0cl9lc3dfc3RhdHMpOwpAQCAtNDA0OCwxNCArNDE3NiwxMCBAQAogCiAJcWxjbmljX2NvbmZpZ19pbmRldl9hZGRyKGFkYXB0ZXIsIG5ldGRldiwgZXZlbnQpOwogCi0JaWYgKCFhZGFwdGVyLT52bGdycCkKLQkJcmV0dXJuOwotCi0JZm9yICh2aWQgPSAwOyB2aWQgPCBWTEFOX05fVklEOyB2aWQrKykgewotCQlkZXYgPSB2bGFuX2dyb3VwX2dldF9kZXZpY2UoYWRhcHRlci0+dmxncnAsIHZpZCk7CisJZm9yX2VhY2hfc2V0X2JpdCh2aWQsIGFkYXB0ZXItPnZsYW5zLCBWTEFOX05fVklEKSB7CisJCWRldiA9IHZsYW5fZmluZF9kZXYobmV0ZGV2LCB2aWQpOwogCQlpZiAoIWRldikKIAkJCWNvbnRpbnVlOwotCiAJCXFsY25pY19jb25maWdfaW5kZXZfYWRkcihhZGFwdGVyLCBkZXYsIGV2ZW50KTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaCBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZS5oCmluZGV4IDQ3NTdjNTkuLmQzMjg1MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZS5oCisrKyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZS5oCkBAIC0yMTM0LDcgKzIxMzQsNyBAQAogCXN0cnVjdCBkZWxheWVkX3dvcmsgbXBpX2lkY193b3JrOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgbXBpX2NvcmVfdG9fbG9nOwogCXN0cnVjdCBjb21wbGV0aW9uIGlkZV9jb21wbGV0aW9uOwotCXN0cnVjdCBuaWNfb3BlcmF0aW9ucyAqbmljX29wczsKKwljb25zdCBzdHJ1Y3QgbmljX29wZXJhdGlvbnMgKm5pY19vcHM7CiAJdTE2IGRldmljZV9pZDsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKIAlhdG9taWNfdCBsYl9jb3VudDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZXRodG9vbC5jCmluZGV4IDgxNDljYzkuLjE5YjAwZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2V0aHRvb2wuYwpAQCAtMzU2LDcgKzM1Niw3IEBACiAJCWVjbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOwogCX0KIAotCWVjbWQtPnNwZWVkID0gU1BFRURfMTAwMDA7CisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIFNQRUVEXzEwMDAwKTsKIAllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKIAogCXJldHVybiAwOwpAQCAtNDEyLDMxICs0MTIsMzEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBxbF9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgZGF0YSkKK3N0YXRpYyBpbnQgcWxfc2V0X3BoeXNfaWQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCisJCQkgIGVudW0gZXRodG9vbF9waHlzX2lkX3N0YXRlIHN0YXRlKQorCiB7CiAJc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKLQl1MzIgbGVkX3JlZywgaTsKLQlpbnQgc3RhdHVzOwogCi0JLyogU2F2ZSB0aGUgY3VycmVudCBMRUQgc2V0dGluZ3MgKi8KLQlzdGF0dXMgPSBxbF9tYl9nZXRfbGVkX2NmZyhxZGV2KTsKLQlpZiAoc3RhdHVzKQotCQlyZXR1cm4gc3RhdHVzOwotCWxlZF9yZWcgPSBxZGV2LT5sZWRfY29uZmlnOworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIEVUSFRPT0xfSURfQUNUSVZFOgorCQkvKiBTYXZlIHRoZSBjdXJyZW50IExFRCBzZXR0aW5ncyAqLworCQlpZiAocWxfbWJfZ2V0X2xlZF9jZmcocWRldikpCisJCQlyZXR1cm4gLUVJTzsKIAotCS8qIFN0YXJ0IGJsaW5raW5nIHRoZSBsZWQgKi8KLQlpZiAoIWRhdGEgfHwgZGF0YSA+IDMwMCkKLQkJZGF0YSA9IDMwMDsKLQotCWZvciAoaSA9IDA7IGkgPCAoZGF0YSAqIDEwKTsgaSsrKQorCQkvKiBTdGFydCBibGlua2luZyAqLwogCQlxbF9tYl9zZXRfbGVkX2NmZyhxZGV2LCBRTF9MRURfQkxJTkspOworCQlyZXR1cm4gMDsKIAotCS8qIFJlc3RvcmUgTEVEIHNldHRpbmdzICovCi0Jc3RhdHVzID0gcWxfbWJfc2V0X2xlZF9jZmcocWRldiwgbGVkX3JlZyk7Ci0JaWYgKHN0YXR1cykKLQkJcmV0dXJuIHN0YXR1czsKKwljYXNlIEVUSFRPT0xfSURfSU5BQ1RJVkU6CisJCS8qIFJlc3RvcmUgTEVEIHNldHRpbmdzICovCisJCWlmIChxbF9tYl9zZXRfbGVkX2NmZyhxZGV2LCBxZGV2LT5sZWRfY29uZmlnKSkKKwkJCXJldHVybiAtRUlPOworCQlyZXR1cm4gMDsKIAotCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KIH0KIAogc3RhdGljIGludCBxbF9zdGFydF9sb29wYmFjayhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKQEAgLTY1NSwzMiArNjU1LDYgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgdTMyIHFsX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCi17Ci0Jc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXJldHVybiBxZGV2LT5yeF9jc3VtOwotfQotCi1zdGF0aWMgaW50IHFsX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVpbnQzMl90IGRhdGEpCi17Ci0Jc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXFkZXYtPnJ4X2NzdW0gPSBkYXRhOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHFsX3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHVpbnQzMl90IGRhdGEpCi17Ci0KLQlpZiAoZGF0YSkgewotCQluZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKLQkJbmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwotCX0gZWxzZSB7Ci0JCW5kZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzsKLQkJbmRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfVFNPNjsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB1MzIgcWxfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCXN0cnVjdCBxbF9hZGFwdGVyICpxZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CkBAIC03MDMsMTggKzY3NywxMCBAQAogCS5nZXRfbXNnbGV2ZWwgPSBxbF9nZXRfbXNnbGV2ZWwsCiAJLnNldF9tc2dsZXZlbCA9IHFsX3NldF9tc2dsZXZlbCwKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAotCS5waHlzX2lkCQkgPSBxbF9waHlzX2lkLAorCS5zZXRfcGh5c19pZAkJID0gcWxfc2V0X3BoeXNfaWQsCiAJLnNlbGZfdGVzdAkJID0gcWxfc2VsZl90ZXN0LAogCS5nZXRfcGF1c2VwYXJhbQkJID0gcWxfZ2V0X3BhdXNlcGFyYW0sCiAJLnNldF9wYXVzZXBhcmFtCQkgPSBxbF9zZXRfcGF1c2VwYXJhbSwKLQkuZ2V0X3J4X2NzdW0gPSBxbF9nZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0gPSBxbF9zZXRfcnhfY3N1bSwKLQkuZ2V0X3R4X2NzdW0gPSBldGh0b29sX29wX2dldF90eF9jc3VtLAotCS5zZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3Bfc2V0X3R4X2NzdW0sCi0JLmdldF9zZyA9IGV0aHRvb2xfb3BfZ2V0X3NnLAotCS5zZXRfc2cgPSBldGh0b29sX29wX3NldF9zZywKLQkuZ2V0X3RzbyA9IGV0aHRvb2xfb3BfZ2V0X3RzbywKLQkuc2V0X3RzbyA9IHFsX3NldF90c28sCiAJLmdldF9jb2FsZXNjZSA9IHFsX2dldF9jb2FsZXNjZSwKIAkuc2V0X2NvYWxlc2NlID0gcWxfc2V0X2NvYWxlc2NlLAogCS5nZXRfc3NldF9jb3VudCA9IHFsX2dldF9zc2V0X2NvdW50LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21haW4uYyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMKaW5kZXggNWJiMzExOS4uOTMwYWU0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbWFpbi5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2luY2x1ZGUgPG5ldC9pcDZfY2hlY2tzdW0uaD4KIAogI2luY2x1ZGUgInFsZ2UuaCIKQEAgLTE1NzEsNyArMTU3Miw3IEBACiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmRldik7CiAJc2tiX2NoZWNrc3VtX25vbmVfYXNzZXJ0KHNrYik7CiAKLQlpZiAocWRldi0+cnhfY3N1bSAmJgorCWlmICgobmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkgJiYKIAkJIShpYl9tYWNfcnNwLT5mbGFnczEgJiBJQl9NQUNfQ1NVTV9FUlJfTUFTSykpIHsKIAkJLyogVENQIGZyYW1lLiAqLwogCQlpZiAoaWJfbWFjX3JzcC0+ZmxhZ3MyICYgSUJfTUFDX0lPQ0JfUlNQX1QpIHsKQEAgLTE2ODQsNyArMTY4NSw3IEBACiAJLyogSWYgcnggY2hlY2tzdW0gaXMgb24sIGFuZCB0aGVyZSBhcmUgbm8KIAkgKiBjc3VtIG9yIGZyYW1lIGVycm9ycy4KIAkgKi8KLQlpZiAocWRldi0+cnhfY3N1bSAmJgorCWlmICgobmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkgJiYKIAkJIShpYl9tYWNfcnNwLT5mbGFnczEgJiBJQl9NQUNfQ1NVTV9FUlJfTUFTSykpIHsKIAkJLyogVENQIGZyYW1lLiAqLwogCQlpZiAoaWJfbWFjX3JzcC0+ZmxhZ3MyICYgSUJfTUFDX0lPQ0JfUlNQX1QpIHsKQEAgLTIwMDQsNyArMjAwNSw3IEBACiAJLyogSWYgcnggY2hlY2tzdW0gaXMgb24sIGFuZCB0aGVyZSBhcmUgbm8KIAkgKiBjc3VtIG9yIGZyYW1lIGVycm9ycy4KIAkgKi8KLQlpZiAocWRldi0+cnhfY3N1bSAmJgorCWlmICgobmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkgJiYKIAkJIShpYl9tYWNfcnNwLT5mbGFnczEgJiBJQl9NQUNfQ1NVTV9FUlJfTUFTSykpIHsKIAkJLyogVENQIGZyYW1lLiAqLwogCQlpZiAoaWJfbWFjX3JzcC0+ZmxhZ3MyICYgSUJfTUFDX0lPQ0JfUlNQX1QpIHsKQEAgLTQ0MTIsMTIgKzQ0MTMsMTIgQEAKIAlydG5sX3VubG9jaygpOwogfQogCi1zdGF0aWMgc3RydWN0IG5pY19vcGVyYXRpb25zIHFsYTgwMTJfbmljX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmljX29wZXJhdGlvbnMgcWxhODAxMl9uaWNfb3BzID0gewogCS5nZXRfZmxhc2gJCT0gcWxfZ2V0XzgwMTJfZmxhc2hfcGFyYW1zLAogCS5wb3J0X2luaXRpYWxpemUJPSBxbF84MDEyX3BvcnRfaW5pdGlhbGl6ZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbmljX29wZXJhdGlvbnMgcWxhODAwMF9uaWNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBuaWNfb3BlcmF0aW9ucyBxbGE4MDAwX25pY19vcHMgPSB7CiAJLmdldF9mbGFzaAkJPSBxbF9nZXRfODAwMF9mbGFzaF9wYXJhbXMsCiAJLnBvcnRfaW5pdGlhbGl6ZQk9IHFsXzgwMDBfcG9ydF9pbml0aWFsaXplLAogfTsKQEAgLTQ2MjEsNyArNDYyMiw2IEBACiAJLyoKIAkgKiBTZXQgdXAgdGhlIG9wZXJhdGluZyBwYXJhbWV0ZXJzLgogCSAqLwotCXFkZXYtPnJ4X2NzdW0gPSAxOwogCXFkZXYtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKG5kZXYtPm5hbWUpOwogCUlOSVRfREVMQVlFRF9XT1JLKCZxZGV2LT5hc2ljX3Jlc2V0X3dvcmssIHFsX2FzaWNfcmVzZXRfd29yayk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnFkZXYtPm1waV9yZXNldF93b3JrLCBxbF9tcGlfcmVzZXRfd29yayk7CkBAIC00Njk1LDE1ICs0Njk1LDExIEBACiAKIAlxZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAJU0VUX05FVERFVl9ERVYobmRldiwgJnBkZXYtPmRldik7Ci0JbmRldi0+ZmVhdHVyZXMgPSAoMAotCQkJICB8IE5FVElGX0ZfSVBfQ1NVTQotCQkJICB8IE5FVElGX0ZfU0cKLQkJCSAgfCBORVRJRl9GX1RTTwotCQkJICB8IE5FVElGX0ZfVFNPNgotCQkJICB8IE5FVElGX0ZfVFNPX0VDTgotCQkJICB8IE5FVElGX0ZfSFdfVkxBTl9UWAotCQkJICB8IE5FVElGX0ZfSFdfVkxBTl9SWCB8IE5FVElGX0ZfSFdfVkxBTl9GSUxURVIpOwotCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfR1JPOworCW5kZXYtPmh3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8CisJCU5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082IHwgTkVUSUZfRl9UU09fRUNOIHwKKwkJTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9SWENTVU07CisJbmRldi0+ZmVhdHVyZXMgPSBuZGV2LT5od19mZWF0dXJlcyB8CisJCU5FVElGX0ZfSFdfVkxBTl9SWCB8IE5FVElGX0ZfSFdfVkxBTl9GSUxURVI7CiAKIAlpZiAodGVzdF9iaXQoUUxfRE1BNjQsICZxZGV2LT5mbGFncykpCiAJCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3I4MTY5LmMgYi9kcml2ZXJzL25ldC9yODE2OS5jCmluZGV4IDM5N2MzNjguLmVmMWNlMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3I4MTY5LmMKKysrIGIvZHJpdmVycy9uZXQvcjgxNjkuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS1hc3BtLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTM3LDYgKzM4LDggQEAKIAogI2RlZmluZSBGSVJNV0FSRV84MTY4RF8xCSJydGxfbmljL3J0bDgxNjhkLTEuZnciCiAjZGVmaW5lIEZJUk1XQVJFXzgxNjhEXzIJInJ0bF9uaWMvcnRsODE2OGQtMi5mdyIKKyNkZWZpbmUgRklSTVdBUkVfODE2OEVfMQkicnRsX25pYy9ydGw4MTY4ZS0xLmZ3IgorI2RlZmluZSBGSVJNV0FSRV84MTY4RV8yCSJydGxfbmljL3J0bDgxNjhlLTIuZnciCiAjZGVmaW5lIEZJUk1XQVJFXzgxMDVFXzEJInJ0bF9uaWMvcnRsODEwNWUtMS5mdyIKIAogI2lmZGVmIFJUTDgxNjlfREVCVUcKQEAgLTk2LDkwICs5OSwxMjYgQEAKICNkZWZpbmUgUlRMX1IzMihyZWcpCQlyZWFkbCAoaW9hZGRyICsgKHJlZykpCiAKIGVudW0gbWFjX3ZlcnNpb24gewotCVJUTF9HSUdBX01BQ19OT05FICAgPSAweDAwLAotCVJUTF9HSUdBX01BQ19WRVJfMDEgPSAweDAxLCAvLyA4MTY5Ci0JUlRMX0dJR0FfTUFDX1ZFUl8wMiA9IDB4MDIsIC8vIDgxNjlTCi0JUlRMX0dJR0FfTUFDX1ZFUl8wMyA9IDB4MDMsIC8vIDgxMTBTCi0JUlRMX0dJR0FfTUFDX1ZFUl8wNCA9IDB4MDQsIC8vIDgxNjlTQgotCVJUTF9HSUdBX01BQ19WRVJfMDUgPSAweDA1LCAvLyA4MTEwU0NkCi0JUlRMX0dJR0FfTUFDX1ZFUl8wNiA9IDB4MDYsIC8vIDgxMTBTQ2UKLQlSVExfR0lHQV9NQUNfVkVSXzA3ID0gMHgwNywgLy8gODEwMmUKLQlSVExfR0lHQV9NQUNfVkVSXzA4ID0gMHgwOCwgLy8gODEwMmUKLQlSVExfR0lHQV9NQUNfVkVSXzA5ID0gMHgwOSwgLy8gODEwMmUKLQlSVExfR0lHQV9NQUNfVkVSXzEwID0gMHgwYSwgLy8gODEwMWUKLQlSVExfR0lHQV9NQUNfVkVSXzExID0gMHgwYiwgLy8gODE2OEJiCi0JUlRMX0dJR0FfTUFDX1ZFUl8xMiA9IDB4MGMsIC8vIDgxNjhCZQotCVJUTF9HSUdBX01BQ19WRVJfMTMgPSAweDBkLCAvLyA4MTAxRWIKLQlSVExfR0lHQV9NQUNfVkVSXzE0ID0gMHgwZSwgLy8gODEwMSA/Ci0JUlRMX0dJR0FfTUFDX1ZFUl8xNSA9IDB4MGYsIC8vIDgxMDEgPwotCVJUTF9HSUdBX01BQ19WRVJfMTYgPSAweDExLCAvLyA4MTAxRWMKLQlSVExfR0lHQV9NQUNfVkVSXzE3ID0gMHgxMCwgLy8gODE2OEJmCi0JUlRMX0dJR0FfTUFDX1ZFUl8xOCA9IDB4MTIsIC8vIDgxNjhDUAotCVJUTF9HSUdBX01BQ19WRVJfMTkgPSAweDEzLCAvLyA4MTY4QwotCVJUTF9HSUdBX01BQ19WRVJfMjAgPSAweDE0LCAvLyA4MTY4QwotCVJUTF9HSUdBX01BQ19WRVJfMjEgPSAweDE1LCAvLyA4MTY4QwotCVJUTF9HSUdBX01BQ19WRVJfMjIgPSAweDE2LCAvLyA4MTY4QwotCVJUTF9HSUdBX01BQ19WRVJfMjMgPSAweDE3LCAvLyA4MTY4Q1AKLQlSVExfR0lHQV9NQUNfVkVSXzI0ID0gMHgxOCwgLy8gODE2OENQCi0JUlRMX0dJR0FfTUFDX1ZFUl8yNSA9IDB4MTksIC8vIDgxNjhECi0JUlRMX0dJR0FfTUFDX1ZFUl8yNiA9IDB4MWEsIC8vIDgxNjhECi0JUlRMX0dJR0FfTUFDX1ZFUl8yNyA9IDB4MWIsIC8vIDgxNjhEUAotCVJUTF9HSUdBX01BQ19WRVJfMjggPSAweDFjLCAvLyA4MTY4RFAKLQlSVExfR0lHQV9NQUNfVkVSXzI5ID0gMHgxZCwgLy8gODEwNUUKLQlSVExfR0lHQV9NQUNfVkVSXzMwID0gMHgxZSwgLy8gODEwNUUKKwlSVExfR0lHQV9NQUNfVkVSXzAxID0gMCwKKwlSVExfR0lHQV9NQUNfVkVSXzAyLAorCVJUTF9HSUdBX01BQ19WRVJfMDMsCisJUlRMX0dJR0FfTUFDX1ZFUl8wNCwKKwlSVExfR0lHQV9NQUNfVkVSXzA1LAorCVJUTF9HSUdBX01BQ19WRVJfMDYsCisJUlRMX0dJR0FfTUFDX1ZFUl8wNywKKwlSVExfR0lHQV9NQUNfVkVSXzA4LAorCVJUTF9HSUdBX01BQ19WRVJfMDksCisJUlRMX0dJR0FfTUFDX1ZFUl8xMCwKKwlSVExfR0lHQV9NQUNfVkVSXzExLAorCVJUTF9HSUdBX01BQ19WRVJfMTIsCisJUlRMX0dJR0FfTUFDX1ZFUl8xMywKKwlSVExfR0lHQV9NQUNfVkVSXzE0LAorCVJUTF9HSUdBX01BQ19WRVJfMTUsCisJUlRMX0dJR0FfTUFDX1ZFUl8xNiwKKwlSVExfR0lHQV9NQUNfVkVSXzE3LAorCVJUTF9HSUdBX01BQ19WRVJfMTgsCisJUlRMX0dJR0FfTUFDX1ZFUl8xOSwKKwlSVExfR0lHQV9NQUNfVkVSXzIwLAorCVJUTF9HSUdBX01BQ19WRVJfMjEsCisJUlRMX0dJR0FfTUFDX1ZFUl8yMiwKKwlSVExfR0lHQV9NQUNfVkVSXzIzLAorCVJUTF9HSUdBX01BQ19WRVJfMjQsCisJUlRMX0dJR0FfTUFDX1ZFUl8yNSwKKwlSVExfR0lHQV9NQUNfVkVSXzI2LAorCVJUTF9HSUdBX01BQ19WRVJfMjcsCisJUlRMX0dJR0FfTUFDX1ZFUl8yOCwKKwlSVExfR0lHQV9NQUNfVkVSXzI5LAorCVJUTF9HSUdBX01BQ19WRVJfMzAsCisJUlRMX0dJR0FfTUFDX1ZFUl8zMSwKKwlSVExfR0lHQV9NQUNfVkVSXzMyLAorCVJUTF9HSUdBX01BQ19WRVJfMzMsCisJUlRMX0dJR0FfTUFDX05PTkUgICA9IDB4ZmYsCiB9OwogCi0jZGVmaW5lIF9SKE5BTUUsTUFDLE1BU0spIFwKLQl7IC5uYW1lID0gTkFNRSwgLm1hY192ZXJzaW9uID0gTUFDLCAuUnhDb25maWdNYXNrID0gTUFTSyB9CitlbnVtIHJ0bF90eF9kZXNjX3ZlcnNpb24geworCVJUTF9URF8wCT0gMCwKKwlSVExfVERfMQk9IDEsCit9OworCisjZGVmaW5lIF9SKE5BTUUsVEQsRlcpIFwKKwl7IC5uYW1lID0gTkFNRSwgLnR4ZF92ZXJzaW9uID0gVEQsIC5md19uYW1lID0gRlcgfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHsKIAljb25zdCBjaGFyICpuYW1lOwotCXU4IG1hY192ZXJzaW9uOwotCXUzMiBSeENvbmZpZ01hc2s7CS8qIENsZWFycyB0aGUgYml0cyBzdXBwb3J0ZWQgYnkgdGhpcyBjaGlwICovCi19IHJ0bF9jaGlwX2luZm9bXSA9IHsKLQlfUigiUlRMODE2OSIsCQlSVExfR0lHQV9NQUNfVkVSXzAxLCAweGZmN2UxODgwKSwgLy8gODE2OQotCV9SKCJSVEw4MTY5cyIsCQlSVExfR0lHQV9NQUNfVkVSXzAyLCAweGZmN2UxODgwKSwgLy8gODE2OVMKLQlfUigiUlRMODExMHMiLAkJUlRMX0dJR0FfTUFDX1ZFUl8wMywgMHhmZjdlMTg4MCksIC8vIDgxMTBTCi0JX1IoIlJUTDgxNjlzYi84MTEwc2IiLAlSVExfR0lHQV9NQUNfVkVSXzA0LCAweGZmN2UxODgwKSwgLy8gODE2OVNCCi0JX1IoIlJUTDgxNjlzYy84MTEwc2MiLAlSVExfR0lHQV9NQUNfVkVSXzA1LCAweGZmN2UxODgwKSwgLy8gODExMFNDZAotCV9SKCJSVEw4MTY5c2MvODExMHNjIiwJUlRMX0dJR0FfTUFDX1ZFUl8wNiwgMHhmZjdlMTg4MCksIC8vIDgxMTBTQ2UKLQlfUigiUlRMODEwMmUiLAkJUlRMX0dJR0FfTUFDX1ZFUl8wNywgMHhmZjdlMTg4MCksIC8vIFBDSS1FCi0JX1IoIlJUTDgxMDJlIiwJCVJUTF9HSUdBX01BQ19WRVJfMDgsIDB4ZmY3ZTE4ODApLCAvLyBQQ0ktRQotCV9SKCJSVEw4MTAyZSIsCQlSVExfR0lHQV9NQUNfVkVSXzA5LCAweGZmN2UxODgwKSwgLy8gUENJLUUKLQlfUigiUlRMODEwMWUiLAkJUlRMX0dJR0FfTUFDX1ZFUl8xMCwgMHhmZjdlMTg4MCksIC8vIFBDSS1FCi0JX1IoIlJUTDgxNjhiLzgxMTFiIiwJUlRMX0dJR0FfTUFDX1ZFUl8xMSwgMHhmZjdlMTg4MCksIC8vIFBDSS1FCi0JX1IoIlJUTDgxNjhiLzgxMTFiIiwJUlRMX0dJR0FfTUFDX1ZFUl8xMiwgMHhmZjdlMTg4MCksIC8vIFBDSS1FCi0JX1IoIlJUTDgxMDFlIiwJCVJUTF9HSUdBX01BQ19WRVJfMTMsIDB4ZmY3ZTE4ODApLCAvLyBQQ0ktRSA4MTM5Ci0JX1IoIlJUTDgxMDBlIiwJCVJUTF9HSUdBX01BQ19WRVJfMTQsIDB4ZmY3ZTE4ODApLCAvLyBQQ0ktRSA4MTM5Ci0JX1IoIlJUTDgxMDBlIiwJCVJUTF9HSUdBX01BQ19WRVJfMTUsIDB4ZmY3ZTE4ODApLCAvLyBQQ0ktRSA4MTM5Ci0JX1IoIlJUTDgxNjhiLzgxMTFiIiwJUlRMX0dJR0FfTUFDX1ZFUl8xNywgMHhmZjdlMTg4MCksIC8vIFBDSS1FCi0JX1IoIlJUTDgxMDFlIiwJCVJUTF9HSUdBX01BQ19WRVJfMTYsIDB4ZmY3ZTE4ODApLCAvLyBQQ0ktRQotCV9SKCJSVEw4MTY4Y3AvODExMWNwIiwJUlRMX0dJR0FfTUFDX1ZFUl8xOCwgMHhmZjdlMTg4MCksIC8vIFBDSS1FCi0JX1IoIlJUTDgxNjhjLzgxMTFjIiwJUlRMX0dJR0FfTUFDX1ZFUl8xOSwgMHhmZjdlMTg4MCksIC8vIFBDSS1FCi0JX1IoIlJUTDgxNjhjLzgxMTFjIiwJUlRMX0dJR0FfTUFDX1ZFUl8yMCwgMHhmZjdlMTg4MCksIC8vIFBDSS1FCi0JX1IoIlJUTDgxNjhjLzgxMTFjIiwJUlRMX0dJR0FfTUFDX1ZFUl8yMSwgMHhmZjdlMTg4MCksIC8vIFBDSS1FCi0JX1IoIlJUTDgxNjhjLzgxMTFjIiwJUlRMX0dJR0FfTUFDX1ZFUl8yMiwgMHhmZjdlMTg4MCksIC8vIFBDSS1FCi0JX1IoIlJUTDgxNjhjcC84MTExY3AiLAlSVExfR0lHQV9NQUNfVkVSXzIzLCAweGZmN2UxODgwKSwgLy8gUENJLUUKLQlfUigiUlRMODE2OGNwLzgxMTFjcCIsCVJUTF9HSUdBX01BQ19WRVJfMjQsIDB4ZmY3ZTE4ODApLCAvLyBQQ0ktRQotCV9SKCJSVEw4MTY4ZC84MTExZCIsCVJUTF9HSUdBX01BQ19WRVJfMjUsIDB4ZmY3ZTE4ODApLCAvLyBQQ0ktRQotCV9SKCJSVEw4MTY4ZC84MTExZCIsCVJUTF9HSUdBX01BQ19WRVJfMjYsIDB4ZmY3ZTE4ODApLCAvLyBQQ0ktRQotCV9SKCJSVEw4MTY4ZHAvODExMWRwIiwJUlRMX0dJR0FfTUFDX1ZFUl8yNywgMHhmZjdlMTg4MCksIC8vIFBDSS1FCi0JX1IoIlJUTDgxNjhkcC84MTExZHAiLAlSVExfR0lHQV9NQUNfVkVSXzI4LCAweGZmN2UxODgwKSwgLy8gUENJLUUKLQlfUigiUlRMODEwNWUiLAkJUlRMX0dJR0FfTUFDX1ZFUl8yOSwgMHhmZjdlMTg4MCksIC8vIFBDSS1FCi0JX1IoIlJUTDgxMDVlIiwJCVJUTF9HSUdBX01BQ19WRVJfMzAsIDB4ZmY3ZTE4ODApICAvLyBQQ0ktRQorCWVudW0gcnRsX3R4X2Rlc2NfdmVyc2lvbiB0eGRfdmVyc2lvbjsKKwljb25zdCBjaGFyICpmd19uYW1lOworfSBydGxfY2hpcF9pbmZvc1tdID0geworCS8qIFBDSSBkZXZpY2VzLiAqLworCVtSVExfR0lHQV9NQUNfVkVSXzAxXSA9CisJCV9SKCJSVEw4MTY5IiwJCVJUTF9URF8wLCBOVUxMKSwKKwlbUlRMX0dJR0FfTUFDX1ZFUl8wMl0gPQorCQlfUigiUlRMODE2OXMiLAkJUlRMX1REXzAsIE5VTEwpLAorCVtSVExfR0lHQV9NQUNfVkVSXzAzXSA9CisJCV9SKCJSVEw4MTEwcyIsCQlSVExfVERfMCwgTlVMTCksCisJW1JUTF9HSUdBX01BQ19WRVJfMDRdID0KKwkJX1IoIlJUTDgxNjlzYi84MTEwc2IiLAlSVExfVERfMCwgTlVMTCksCisJW1JUTF9HSUdBX01BQ19WRVJfMDVdID0KKwkJX1IoIlJUTDgxNjlzYy84MTEwc2MiLAlSVExfVERfMCwgTlVMTCksCisJW1JUTF9HSUdBX01BQ19WRVJfMDZdID0KKwkJX1IoIlJUTDgxNjlzYy84MTEwc2MiLAlSVExfVERfMCwgTlVMTCksCisJLyogUENJLUUgZGV2aWNlcy4gKi8KKwlbUlRMX0dJR0FfTUFDX1ZFUl8wN10gPQorCQlfUigiUlRMODEwMmUiLAkJUlRMX1REXzEsIE5VTEwpLAorCVtSVExfR0lHQV9NQUNfVkVSXzA4XSA9CisJCV9SKCJSVEw4MTAyZSIsCQlSVExfVERfMSwgTlVMTCksCisJW1JUTF9HSUdBX01BQ19WRVJfMDldID0KKwkJX1IoIlJUTDgxMDJlIiwJCVJUTF9URF8xLCBOVUxMKSwKKwlbUlRMX0dJR0FfTUFDX1ZFUl8xMF0gPQorCQlfUigiUlRMODEwMWUiLAkJUlRMX1REXzAsIE5VTEwpLAorCVtSVExfR0lHQV9NQUNfVkVSXzExXSA9CisJCV9SKCJSVEw4MTY4Yi84MTExYiIsCVJUTF9URF8wLCBOVUxMKSwKKwlbUlRMX0dJR0FfTUFDX1ZFUl8xMl0gPQorCQlfUigiUlRMODE2OGIvODExMWIiLAlSVExfVERfMCwgTlVMTCksCisJW1JUTF9HSUdBX01BQ19WRVJfMTNdID0KKwkJX1IoIlJUTDgxMDFlIiwJCVJUTF9URF8wLCBOVUxMKSwKKwlbUlRMX0dJR0FfTUFDX1ZFUl8xNF0gPQorCQlfUigiUlRMODEwMGUiLAkJUlRMX1REXzAsIE5VTEwpLAorCVtSVExfR0lHQV9NQUNfVkVSXzE1XSA9CisJCV9SKCJSVEw4MTAwZSIsCQlSVExfVERfMCwgTlVMTCksCisJW1JUTF9HSUdBX01BQ19WRVJfMTZdID0KKwkJX1IoIlJUTDgxMDFlIiwJCVJUTF9URF8wLCBOVUxMKSwKKwlbUlRMX0dJR0FfTUFDX1ZFUl8xN10gPQorCQlfUigiUlRMODE2OGIvODExMWIiLAlSVExfVERfMCwgTlVMTCksCisJW1JUTF9HSUdBX01BQ19WRVJfMThdID0KKwkJX1IoIlJUTDgxNjhjcC84MTExY3AiLAlSVExfVERfMSwgTlVMTCksCisJW1JUTF9HSUdBX01BQ19WRVJfMTldID0KKwkJX1IoIlJUTDgxNjhjLzgxMTFjIiwJUlRMX1REXzEsIE5VTEwpLAorCVtSVExfR0lHQV9NQUNfVkVSXzIwXSA9CisJCV9SKCJSVEw4MTY4Yy84MTExYyIsCVJUTF9URF8xLCBOVUxMKSwKKwlbUlRMX0dJR0FfTUFDX1ZFUl8yMV0gPQorCQlfUigiUlRMODE2OGMvODExMWMiLAlSVExfVERfMSwgTlVMTCksCisJW1JUTF9HSUdBX01BQ19WRVJfMjJdID0KKwkJX1IoIlJUTDgxNjhjLzgxMTFjIiwJUlRMX1REXzEsIE5VTEwpLAorCVtSVExfR0lHQV9NQUNfVkVSXzIzXSA9CisJCV9SKCJSVEw4MTY4Y3AvODExMWNwIiwJUlRMX1REXzEsIE5VTEwpLAorCVtSVExfR0lHQV9NQUNfVkVSXzI0XSA9CisJCV9SKCJSVEw4MTY4Y3AvODExMWNwIiwJUlRMX1REXzEsIE5VTEwpLAorCVtSVExfR0lHQV9NQUNfVkVSXzI1XSA9CisJCV9SKCJSVEw4MTY4ZC84MTExZCIsCVJUTF9URF8xLCBGSVJNV0FSRV84MTY4RF8xKSwKKwlbUlRMX0dJR0FfTUFDX1ZFUl8yNl0gPQorCQlfUigiUlRMODE2OGQvODExMWQiLAlSVExfVERfMSwgRklSTVdBUkVfODE2OERfMiksCisJW1JUTF9HSUdBX01BQ19WRVJfMjddID0KKwkJX1IoIlJUTDgxNjhkcC84MTExZHAiLAlSVExfVERfMSwgTlVMTCksCisJW1JUTF9HSUdBX01BQ19WRVJfMjhdID0KKwkJX1IoIlJUTDgxNjhkcC84MTExZHAiLAlSVExfVERfMSwgTlVMTCksCisJW1JUTF9HSUdBX01BQ19WRVJfMjldID0KKwkJX1IoIlJUTDgxMDVlIiwJCVJUTF9URF8xLCBGSVJNV0FSRV84MTA1RV8xKSwKKwlbUlRMX0dJR0FfTUFDX1ZFUl8zMF0gPQorCQlfUigiUlRMODEwNWUiLAkJUlRMX1REXzEsIEZJUk1XQVJFXzgxMDVFXzEpLAorCVtSVExfR0lHQV9NQUNfVkVSXzMxXSA9CisJCV9SKCJSVEw4MTY4ZHAvODExMWRwIiwJUlRMX1REXzEsIE5VTEwpLAorCVtSVExfR0lHQV9NQUNfVkVSXzMyXSA9CisJCV9SKCJSVEw4MTY4ZS84MTExZSIsCVJUTF9URF8xLCBGSVJNV0FSRV84MTY4RV8xKSwKKwlbUlRMX0dJR0FfTUFDX1ZFUl8zM10gPQorCQlfUigiUlRMODE2OGUvODExMWUiLAlSVExfVERfMSwgRklSTVdBUkVfODE2OEVfMikKIH07CiAjdW5kZWYgX1IKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBydGxfZmlybXdhcmVfaW5mbyB7Ci0JaW50IG1hY192ZXJzaW9uOwotCWNvbnN0IGNoYXIgKmZ3X25hbWU7Ci19IHJ0bF9maXJtd2FyZV9pbmZvc1tdID0gewotCXsgLm1hY192ZXJzaW9uID0gUlRMX0dJR0FfTUFDX1ZFUl8yNSwgLmZ3X25hbWUgPSBGSVJNV0FSRV84MTY4RF8xIH0sCi0JeyAubWFjX3ZlcnNpb24gPSBSVExfR0lHQV9NQUNfVkVSXzI2LCAuZndfbmFtZSA9IEZJUk1XQVJFXzgxNjhEXzIgfSwKLQl7IC5tYWNfdmVyc2lvbiA9IFJUTF9HSUdBX01BQ19WRVJfMjksIC5md19uYW1lID0gRklSTVdBUkVfODEwNUVfMSB9LAotCXsgLm1hY192ZXJzaW9uID0gUlRMX0dJR0FfTUFDX1ZFUl8zMCwgLmZ3X25hbWUgPSBGSVJNV0FSRV84MTA1RV8xIH0KLX07Ci0KIGVudW0gY2ZnX3ZlcnNpb24gewogCVJUTF9DRkdfMCA9IDB4MDAsCiAJUlRMX0NGR18xLApAQCAtMjMyLDYgKzI3MSw5IEBACiAJSW50clN0YXR1cwk9IDB4M2UsCiAJVHhDb25maWcJPSAweDQwLAogCVJ4Q29uZmlnCT0gMHg0NCwKKworI2RlZmluZSBSVExfUlhfQ09ORklHX01BU0sJCTB4ZmY3ZTE4ODB1CisKIAlSeE1pc3NlZAk9IDB4NGMsCiAJQ2ZnOTM0NgkJPSAweDUwLAogCUNvbmZpZzAJCT0gMHg1MSwKQEAgLTMyNSw3ICszNjcsOSBAQAogI2RlZmluZSBPQ1BBUl9GTEFHCQkJMHg4MDAwMDAwMAogI2RlZmluZSBPQ1BBUl9HUEhZX1dSSVRFX0NNRAkJMHg4MDAwZjA2MAogI2RlZmluZSBPQ1BBUl9HUEhZX1JFQURfQ01ECQkweDAwMDBmMDYwCi0JUkRTQVIxCQkJPSAweGQwCS8qIDgxNjhjIG9ubHkuIFVuZG9jdW1lbnRlZCBvbiA4MTY4ZHAgKi8KKwlSRFNBUjEJCQk9IDB4ZDAsCS8qIDgxNjhjIG9ubHkuIFVuZG9jdW1lbnRlZCBvbiA4MTY4ZHAgKi8KKwlNSVNDCQkJPSAweGYwLAkvKiA4MTY4ZSBvbmx5LiAqLworI2RlZmluZSBUWFBMQV9SU1QJCQkoMSA8PCAyOSkKIH07CiAKIGVudW0gcnRsX3JlZ2lzdGVyX2NvbnRlbnQgewpAQCAtNDAzLDYgKzQ0Nyw3IEBACiAJQldGCQk9ICgxIDw8IDYpLAkvKiBBY2NlcHQgQnJvYWRjYXN0IHdha2V1cCBmcmFtZSAqLwogCU1XRgkJPSAoMSA8PCA1KSwJLyogQWNjZXB0IE11bHRpY2FzdCB3YWtldXAgZnJhbWUgKi8KIAlVV0YJCT0gKDEgPDwgNCksCS8qIEFjY2VwdCBVbmljYXN0IHdha2V1cCBmcmFtZSAqLworCVNwaV9lbgkJPSAoMSA8PCAzKSwKIAlMYW5XYWtlCQk9ICgxIDw8IDEpLAkvKiBMYW5XYWtlIGVuYWJsZS9kaXNhYmxlICovCiAJUE1FU3RhdHVzCT0gKDEgPDwgMCksCS8qIFBNRSBzdGF0dXMgY2FuIGJlIHJlc2V0IGJ5IFBDSSBSU1QjICovCiAKQEAgLTQ1MSwyMSArNDk2LDY5IEBACiAJQ291bnRlckR1bXAJPSAweDgsCiB9OwogCi1lbnVtIGRlc2Nfc3RhdHVzX2JpdCB7CitlbnVtIHJ0bF9kZXNjX2JpdCB7CisJLyogRmlyc3QgZG91Ymxld29yZC4gKi8KIAlEZXNjT3duCQk9ICgxIDw8IDMxKSwgLyogRGVzY3JpcHRvciBpcyBvd25lZCBieSBOSUMgKi8KIAlSaW5nRW5kCQk9ICgxIDw8IDMwKSwgLyogRW5kIG9mIGRlc2NyaXB0b3IgcmluZyAqLwogCUZpcnN0RnJhZwk9ICgxIDw8IDI5KSwgLyogRmlyc3Qgc2VnbWVudCBvZiBhIHBhY2tldCAqLwogCUxhc3RGcmFnCT0gKDEgPDwgMjgpLCAvKiBGaW5hbCBzZWdtZW50IG9mIGEgcGFja2V0ICovCit9OwogCi0JLyogVHggcHJpdmF0ZSAqLwotCUxhcmdlU2VuZAk9ICgxIDw8IDI3KSwgLyogVENQIExhcmdlIFNlbmQgT2ZmbG9hZCAoVFNPKSAqLwotCU1TU1NoaWZ0CT0gMTYsICAgICAgICAvKiBNU1MgdmFsdWUgcG9zaXRpb24gKi8KLQlNU1NNYXNrCQk9IDB4ZmZmLCAgICAgLyogTVNTIHZhbHVlICsgTGFyZ2VTZW5kIGJpdDogMTIgYml0cyAqLwotCUlQQ1MJCT0gKDEgPDwgMTgpLCAvKiBDYWxjdWxhdGUgSVAgY2hlY2tzdW0gKi8KLQlVRFBDUwkJPSAoMSA8PCAxNyksIC8qIENhbGN1bGF0ZSBVRFAvSVAgY2hlY2tzdW0gKi8KLQlUQ1BDUwkJPSAoMSA8PCAxNiksIC8qIENhbGN1bGF0ZSBUQ1AvSVAgY2hlY2tzdW0gKi8KLQlUeFZsYW5UYWcJPSAoMSA8PCAxNyksIC8qIEFkZCBWTEFOIHRhZyAqLworLyogR2VuZXJpYyBjYXNlLiAqLworZW51bSBydGxfdHhfZGVzY19iaXQgeworCS8qIEZpcnN0IGRvdWJsZXdvcmQuICovCisJVERfTFNPCQk9ICgxIDw8IDI3KSwJCS8qIExhcmdlIFNlbmQgT2ZmbG9hZCAqLworI2RlZmluZSBURF9NU1NfTUFYCQkJMHgwN2ZmdQkvKiBNU1MgdmFsdWUgKi8KIAorCS8qIFNlY29uZCBkb3VibGV3b3JkLiAqLworCVR4VmxhblRhZwk9ICgxIDw8IDE3KSwJCS8qIEFkZCBWTEFOIHRhZyAqLworfTsKKworLyogODE2OSwgODE2OGIgYW5kIDgxMHggZXhjZXB0IDgxMDJlLiAqLworZW51bSBydGxfdHhfZGVzY19iaXRfMCB7CisJLyogRmlyc3QgZG91Ymxld29yZC4gKi8KKyNkZWZpbmUgVEQwX01TU19TSElGVAkJCTE2CS8qIE1TUyBwb3NpdGlvbiAoMTEgYml0cykgKi8KKwlURDBfVENQX0NTCT0gKDEgPDwgMTYpLAkJLyogQ2FsY3VsYXRlIFRDUC9JUCBjaGVja3N1bSAqLworCVREMF9VRFBfQ1MJPSAoMSA8PCAxNyksCQkvKiBDYWxjdWxhdGUgVURQL0lQIGNoZWNrc3VtICovCisJVEQwX0lQX0NTCT0gKDEgPDwgMTgpLAkJLyogQ2FsY3VsYXRlIElQIGNoZWNrc3VtICovCit9OworCisvKiA4MTAyZSwgODE2OGMgYW5kIGJleW9uZC4gKi8KK2VudW0gcnRsX3R4X2Rlc2NfYml0XzEgeworCS8qIFNlY29uZCBkb3VibGV3b3JkLiAqLworI2RlZmluZSBURDFfTVNTX1NISUZUCQkJMTgJLyogTVNTIHBvc2l0aW9uICgxMSBiaXRzKSAqLworCVREMV9JUF9DUwk9ICgxIDw8IDI5KSwJCS8qIENhbGN1bGF0ZSBJUCBjaGVja3N1bSAqLworCVREMV9UQ1BfQ1MJPSAoMSA8PCAzMCksCQkvKiBDYWxjdWxhdGUgVENQL0lQIGNoZWNrc3VtICovCisJVEQxX1VEUF9DUwk9ICgxIDw8IDMxKSwJCS8qIENhbGN1bGF0ZSBVRFAvSVAgY2hlY2tzdW0gKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsX3R4X2Rlc2NfaW5mbyB7CisJc3RydWN0IHsKKwkJdTMyIHVkcDsKKwkJdTMyIHRjcDsKKwl9IGNoZWNrc3VtOworCXUxNiBtc3Nfc2hpZnQ7CisJdTE2IG9wdHNfb2Zmc2V0OworfSB0eF9kZXNjX2luZm8gW10gPSB7CisJW1JUTF9URF8wXSA9IHsKKwkJLmNoZWNrc3VtID0geworCQkJLnVkcAk9IFREMF9JUF9DUyB8IFREMF9VRFBfQ1MsCisJCQkudGNwCT0gVEQwX0lQX0NTIHwgVEQwX1RDUF9DUworCQl9LAorCQkubXNzX3NoaWZ0CT0gVEQwX01TU19TSElGVCwKKwkJLm9wdHNfb2Zmc2V0CT0gMAorCX0sCisJW1JUTF9URF8xXSA9IHsKKwkJLmNoZWNrc3VtID0geworCQkJLnVkcAk9IFREMV9JUF9DUyB8IFREMV9VRFBfQ1MsCisJCQkudGNwCT0gVEQxX0lQX0NTIHwgVEQxX1RDUF9DUworCQl9LAorCQkubXNzX3NoaWZ0CT0gVEQxX01TU19TSElGVCwKKwkJLm9wdHNfb2Zmc2V0CT0gMQorCX0KK307CisKK2VudW0gcnRsX3J4X2Rlc2NfYml0IHsKIAkvKiBSeCBwcml2YXRlICovCiAJUElEMQkJPSAoMSA8PCAxOCksIC8qIFByb3RvY29sIElEIGJpdCAxLzIgKi8KIAlQSUQwCQk9ICgxIDw8IDE3KSwgLyogUHJvdG9jb2wgSUQgYml0IDIvMiAqLwpAQCAtNTI1LDEzICs2MTgsMTMgQEAKIAogc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7CiAJdm9pZCBfX2lvbWVtICptbWlvX2FkZHI7CS8qIG1lbW9yeSBtYXAgcGh5c2ljYWwgYWRkcmVzcyAqLwotCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OwkvKiBJbmRleCBvZiBQQ0kgZGV2aWNlICovCisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKLQlzcGlubG9ja190IGxvY2s7CQkvKiBzcGluIGxvY2sgZmxhZyAqLworCXNwaW5sb2NrX3QgbG9jazsKIAl1MzIgbXNnX2VuYWJsZTsKLQlpbnQgY2hpcHNldDsKLQlpbnQgbWFjX3ZlcnNpb247CisJdTE2IHR4ZF92ZXJzaW9uOworCXUxNiBtYWNfdmVyc2lvbjsKIAl1MzIgY3VyX3J4OyAvKiBJbmRleCBpbnRvIHRoZSBSeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi8KIAl1MzIgY3VyX3R4OyAvKiBJbmRleCBpbnRvIHRoZSBUeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi8KIAl1MzIgZGlydHlfcng7CkBAIC01NDcsNyArNjQwLDYgQEAKIAl1MTYgaW50cl9ldmVudDsKIAl1MTYgbmFwaV9ldmVudDsKIAl1MTYgaW50cl9tYXNrOwotCWludCBwaHlfMTAwMF9jdHJsX3JlZzsKIAogCXN0cnVjdCBtZGlvX29wcyB7CiAJCXZvaWQgKCp3cml0ZSkodm9pZCBfX2lvbWVtICosIGludCwgaW50KTsKQEAgLTU4OCw2ICs2ODAsOCBAQAogTU9EVUxFX1ZFUlNJT04oUlRMODE2OV9WRVJTSU9OKTsKIE1PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV84MTY4RF8xKTsKIE1PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV84MTY4RF8yKTsKK01PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV84MTY4RV8xKTsKK01PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV84MTY4RV8yKTsKIE1PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV84MTA1RV8xKTsKIAogc3RhdGljIGludCBydGw4MTY5X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC02NTksMzIgKzc1Myw0OSBAQAogI2RlZmluZSBPT0JfQ01EX0RSSVZFUl9TVEFSVAkweDA1CiAjZGVmaW5lIE9PQl9DTURfRFJJVkVSX1NUT1AJMHgwNgogCitzdGF0aWMgdTE2IHJ0bDgxNjhfZ2V0X29jcF9yZWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCit7CisJcmV0dXJuICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zMSkgPyAweGI4IDogMHgxMDsKK30KKwogc3RhdGljIHZvaWQgcnRsODE2OF9kcml2ZXJfc3RhcnQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CisJdTE2IHJlZzsKIAlpbnQgaTsKIAogCXJ0bDgxNjhfb29iX25vdGlmeSh0cCwgT09CX0NNRF9EUklWRVJfU1RBUlQpOwogCisJcmVnID0gcnRsODE2OF9nZXRfb2NwX3JlZyh0cCk7CisKIAlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewogCQltc2xlZXAoMTApOwotCQlpZiAob2NwX3JlYWQodHAsIDB4MGYsIDB4MDAxMCkgJiAweDAwMDAwODAwKQorCQlpZiAob2NwX3JlYWQodHAsIDB4MGYsIHJlZykgJiAweDAwMDAwODAwKQogCQkJYnJlYWs7CiAJfQogfQogCiBzdGF0aWMgdm9pZCBydGw4MTY4X2RyaXZlcl9zdG9wKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogeworCXUxNiByZWc7CiAJaW50IGk7CiAKIAlydGw4MTY4X29vYl9ub3RpZnkodHAsIE9PQl9DTURfRFJJVkVSX1NUT1ApOwogCisJcmVnID0gcnRsODE2OF9nZXRfb2NwX3JlZyh0cCk7CisKIAlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewogCQltc2xlZXAoMTApOwotCQlpZiAoKG9jcF9yZWFkKHRwLCAweDBmLCAweDAwMTApICYgMHgwMDAwMDgwMCkgPT0gMCkKKwkJaWYgKChvY3BfcmVhZCh0cCwgMHgwZiwgcmVnKSAmIDB4MDAwMDA4MDApID09IDApCiAJCQlicmVhazsKIAl9CiB9CiAKK3N0YXRpYyBpbnQgcjgxNjhkcF9jaGVja19kYXNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQoreworCXUxNiByZWcgPSBydGw4MTY4X2dldF9vY3BfcmVnKHRwKTsKKworCXJldHVybiAob2NwX3JlYWQodHAsIDB4MGYsIHJlZykgJiAweDAwMDA4MDAwKSA/IDEgOiAwOworfQogCiBzdGF0aWMgdm9pZCByODE2OV9tZGlvX3dyaXRlKHZvaWQgX19pb21lbSAqaW9hZGRyLCBpbnQgcmVnX2FkZHIsIGludCB2YWx1ZSkKIHsKQEAgLTk4Myw5ICsxMDk0LDggQEAKIH0KIAogc3RhdGljIHZvaWQgX19ydGw4MTY5X2NoZWNrX2xpbmtfc3RhdHVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgICAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsCi0JCQkJICAgICAgdm9pZCBfX2lvbWVtICppb2FkZHIsCi0JCQkJICAgICAgYm9vbCBwbSkKKwkJCQkJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsCisJCQkJCXZvaWQgX19pb21lbSAqaW9hZGRyLCBib29sIHBtKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTExMDIsNiArMTIxMiwxMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3QgY2hhciAqcnRsX2xvb2t1cF9maXJtd2FyZV9uYW1lKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQoreworCXJldHVybiBydGxfY2hpcF9pbmZvc1t0cC0+bWFjX3ZlcnNpb25dLmZ3X25hbWU7Cit9CisKIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQogewpAQCAtMTExMCw2ICsxMjI1LDggQEAKIAlzdHJjcHkoaW5mby0+ZHJpdmVyLCBNT0RVTEVOQU1FKTsKIAlzdHJjcHkoaW5mby0+dmVyc2lvbiwgUlRMODE2OV9WRVJTSU9OKTsKIAlzdHJjcHkoaW5mby0+YnVzX2luZm8sIHBjaV9uYW1lKHRwLT5wY2lfZGV2KSk7CisJc3RybmNweShpbmZvLT5md192ZXJzaW9uLCBJU19FUlJfT1JfTlVMTCh0cC0+ZncpID8gIk4vQSIgOgorCQlydGxfbG9va3VwX2Zpcm13YXJlX25hbWUodHApLCBzaXplb2YoaW5mby0+ZndfdmVyc2lvbikgLSAxKTsKIH0KIAogc3RhdGljIGludCBydGw4MTY5X2dldF9yZWdzX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMTE3MSwxNiArMTI4OCw3IEBACiAJCWdpZ2FfY3RybCAmPSB+KEFEVkVSVElTRV8xMDAwRlVMTCB8IEFEVkVSVElTRV8xMDAwSEFMRik7CiAKIAkJLyogVGhlIDgxMDBlLzgxMDFlLzgxMDJlIGRvIEZhc3QgRXRoZXJuZXQgb25seS4gKi8KLQkJaWYgKCh0cC0+bWFjX3ZlcnNpb24gIT0gUlRMX0dJR0FfTUFDX1ZFUl8wNykgJiYKLQkJICAgICh0cC0+bWFjX3ZlcnNpb24gIT0gUlRMX0dJR0FfTUFDX1ZFUl8wOCkgJiYKLQkJICAgICh0cC0+bWFjX3ZlcnNpb24gIT0gUlRMX0dJR0FfTUFDX1ZFUl8wOSkgJiYKLQkJICAgICh0cC0+bWFjX3ZlcnNpb24gIT0gUlRMX0dJR0FfTUFDX1ZFUl8xMCkgJiYKLQkJICAgICh0cC0+bWFjX3ZlcnNpb24gIT0gUlRMX0dJR0FfTUFDX1ZFUl8xMykgJiYKLQkJICAgICh0cC0+bWFjX3ZlcnNpb24gIT0gUlRMX0dJR0FfTUFDX1ZFUl8xNCkgJiYKLQkJICAgICh0cC0+bWFjX3ZlcnNpb24gIT0gUlRMX0dJR0FfTUFDX1ZFUl8xNSkgJiYKLQkJICAgICh0cC0+bWFjX3ZlcnNpb24gIT0gUlRMX0dJR0FfTUFDX1ZFUl8xNikgJiYKLQkJICAgICh0cC0+bWFjX3ZlcnNpb24gIT0gUlRMX0dJR0FfTUFDX1ZFUl8yOSkgJiYKLQkJICAgICh0cC0+bWFjX3ZlcnNpb24gIT0gUlRMX0dJR0FfTUFDX1ZFUl8zMCkpIHsKKwkJaWYgKHRwLT5taWkuc3VwcG9ydHNfZ21paSkgewogCQkJaWYgKGFkdiAmIEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYpCiAJCQkJZ2lnYV9jdHJsIHw9IEFEVkVSVElTRV8xMDAwSEFMRjsKIAkJCWlmIChhZHYgJiBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsKQpAQCAtMTIxMCwxMiArMTMxOCwxMCBAQAogCQkJYm1jciB8PSBCTUNSX0ZVTExEUExYOwogCX0KIAotCXRwLT5waHlfMTAwMF9jdHJsX3JlZyA9IGdpZ2FfY3RybDsKLQogCXJ0bF93cml0ZXBoeSh0cCwgTUlJX0JNQ1IsIGJtY3IpOwogCi0JaWYgKCh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8wMikgfHwKLQkgICAgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzAzKSkgeworCWlmICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8wMiB8fAorCSAgICB0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8wMykgewogCQlpZiAoKHNwZWVkID09IFNQRUVEXzEwMCkgJiYgKGF1dG9uZWcgIT0gQVVUT05FR19FTkFCTEUpKSB7CiAJCQlydGxfd3JpdGVwaHkodHAsIDB4MTcsIDB4MjEzOCk7CiAJCQlydGxfd3JpdGVwaHkodHAsIDB4MGUsIDB4MDI2MCk7CkBAIC0xMjM3LDEwICsxMzQzLDE0IEBACiAJaW50IHJldDsKIAogCXJldCA9IHRwLT5zZXRfc3BlZWQoZGV2LCBhdXRvbmVnLCBzcGVlZCwgZHVwbGV4LCBhZHZlcnRpc2luZyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OwogCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSAmJiAodHAtPnBoeV8xMDAwX2N0cmxfcmVnICYgQURWRVJUSVNFXzEwMDBGVUxMKSkKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpICYmIChhdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSAmJgorCSAgICAoYWR2ZXJ0aXNpbmcgJiBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsKSkgewogCQltb2RfdGltZXIoJnRwLT50aW1lciwgamlmZmllcyArIFJUTDgxNjlfUEhZX1RJTUVPVVQpOwotCisJfQorb3V0OgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEyNTAsMjIgKzEzNjAsMjUgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CiAKKwlkZWxfdGltZXJfc3luYygmdHAtPnRpbWVyKTsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+bG9jaywgZmxhZ3MpOwotCXJldCA9IHJ0bDgxNjlfc2V0X3NwZWVkKGRldiwKLQkJY21kLT5hdXRvbmVnLCBjbWQtPnNwZWVkLCBjbWQtPmR1cGxleCwgY21kLT5hZHZlcnRpc2luZyk7CisJcmV0ID0gcnRsODE2OV9zZXRfc3BlZWQoZGV2LCBjbWQtPmF1dG9uZWcsIGV0aHRvb2xfY21kX3NwZWVkKGNtZCksCisJCQkJY21kLT5kdXBsZXgsIGNtZC0+YWR2ZXJ0aXNpbmcpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRwLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdTMyIHJ0bDgxNjlfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyB1MzIgcnRsODE2OV9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZlYXR1cmVzKQogewotCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpZiAoZGV2LT5tdHUgPiBURF9NU1NfTUFYKQorCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9BTExfVFNPOwogCi0JcmV0dXJuIHRwLT5jcF9jbWQgJiBSeENoa1N1bTsKKwlyZXR1cm4gZmVhdHVyZXM7CiB9CiAKLXN0YXRpYyBpbnQgcnRsODE2OV9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3N0YXRpYyBpbnQgcnRsODE2OV9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZlYXR1cmVzKQogewogCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CkBAIC0xMjczLDExICsxMzg2LDE2IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdHAtPmxvY2ssIGZsYWdzKTsKIAotCWlmIChkYXRhKQorCWlmIChmZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKQogCQl0cC0+Y3BfY21kIHw9IFJ4Q2hrU3VtOwogCWVsc2UKIAkJdHAtPmNwX2NtZCAmPSB+UnhDaGtTdW07CiAKKwlpZiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSFdfVkxBTl9SWCkKKwkJdHAtPmNwX2NtZCB8PSBSeFZsYW47CisJZWxzZQorCQl0cC0+Y3BfY21kICY9IH5SeFZsYW47CisKIAlSVExfVzE2KENQbHVzQ21kLCB0cC0+Y3BfY21kKTsKIAlSVExfUjE2KENQbHVzQ21kKTsKIApAQCAtMTI5MywyNyArMTQxMSw2IEBACiAJCVR4VmxhblRhZyB8IHN3YWIxNih2bGFuX3R4X3RhZ19nZXQoc2tiKSkgOiAweDAwOwogfQogCi0jZGVmaW5lIE5FVElGX0ZfSFdfVkxBTl9UWF9SWAkoTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYKQotCi1zdGF0aWMgdm9pZCBydGw4MTY5X3ZsYW5fbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+bG9jaywgZmxhZ3MpOwotCWlmIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9IV19WTEFOX1JYKQotCQl0cC0+Y3BfY21kIHw9IFJ4VmxhbjsKLQllbHNlCi0JCXRwLT5jcF9jbWQgJj0gflJ4VmxhbjsKLQlSVExfVzE2KENQbHVzQ21kLCB0cC0+Y3BfY21kKTsKLQkvKiBQQ0kgY29tbWl0ICovCi0JUlRMX1IxNihDUGx1c0NtZCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHAtPmxvY2ssIGZsYWdzKTsKLQotCWRldi0+dmxhbl9mZWF0dXJlcyA9IGRldi0+ZmVhdHVyZXMgJn4gTkVUSUZfRl9IV19WTEFOX1RYX1JYOwotfQotCiBzdGF0aWMgdm9pZCBydGw4MTY5X3J4X3ZsYW5fdGFnKHN0cnVjdCBSeERlc2MgKmRlc2MsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJdTMyIG9wdHMyID0gbGUzMl90b19jcHUoZGVzYy0+b3B0czIpOwpAQCAtMTMzOSw3ICsxNDM2LDcgQEAKIAljbWQtPmFkdmVydGlzaW5nID0gKHN0YXR1cyAmIFRCSU53RW5hYmxlKSA/ICBBRFZFUlRJU0VEX0F1dG9uZWcgOiAwOwogCWNtZC0+YXV0b25lZyA9ICEhKHN0YXR1cyAmIFRCSU53RW5hYmxlKTsKIAotCWNtZC0+c3BlZWQgPSBTUEVFRF8xMDAwOworCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIFNQRUVEXzEwMDApOwogCWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7IC8qIEFsd2F5cyBzZXQgKi8KIAogCXJldHVybiAwOwpAQCAtMTQyNCwxMSArMTUyMSwxMSBAQAogewogCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CisJc3RydWN0IGRldmljZSAqZCA9ICZ0cC0+cGNpX2Rldi0+ZGV2OwogCXN0cnVjdCBydGw4MTY5X2NvdW50ZXJzICpjb3VudGVyczsKIAlkbWFfYWRkcl90IHBhZGRyOwogCXUzMiBjbWQ7CiAJaW50IHdhaXQgPSAxMDAwOwotCXN0cnVjdCBkZXZpY2UgKmQgPSAmdHAtPnBjaV9kZXYtPmRldjsKIAogCS8qCiAJICogU29tZSBjaGlwcyBhcmUgdW5hYmxlIHRvIGR1bXAgdGFsbHkgY291bnRlcnMgd2hlbiB0aGUgcmVjZWl2ZXIKQEAgLTE0NDgsNyArMTU0NSw2IEBACiAKIAl3aGlsZSAod2FpdC0tKSB7CiAJCWlmICgoUlRMX1IzMihDb3VudGVyQWRkckxvdykgJiBDb3VudGVyRHVtcCkgPT0gMCkgewotCQkJLyogY29weSB1cGRhdGVkIGNvdW50ZXJzICovCiAJCQltZW1jcHkoJnRwLT5jb3VudGVycywgY291bnRlcnMsIHNpemVvZigqY291bnRlcnMpKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0xNDk0LDI4ICsxNTkwLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgcnRsODE2OV9zZXRfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgb2xkX2ZlYXQgPSBkZXYtPmZlYXR1cmVzOwotCWludCByYzsKLQotCWlmICgodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMDUpICYmCi0JICAgICEoZGF0YSAmIEVUSF9GTEFHX1JYVkxBTikpIHsKLQkJbmV0aWZfaW5mbyh0cCwgZHJ2LCBkZXYsICI4MTEwU0NkIHJlcXVpcmVzIGhhcmR3YXJlIFJ4IFZMQU5cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyYyA9IGV0aHRvb2xfb3Bfc2V0X2ZsYWdzKGRldiwgZGF0YSwgRVRIX0ZMQUdfVFhWTEFOIHwgRVRIX0ZMQUdfUlhWTEFOKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCWlmICgob2xkX2ZlYXQgXiBkZXYtPmZlYXR1cmVzKSAmIE5FVElGX0ZfSFdfVkxBTl9SWCkKLQkJcnRsODE2OV92bGFuX21vZGUoZGV2KTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxNjlfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvCQk9IHJ0bDgxNjlfZ2V0X2RydmluZm8sCiAJLmdldF9yZWdzX2xlbgkJPSBydGw4MTY5X2dldF9yZWdzX2xlbiwKQEAgLTE1MjQsMjQgKzE1OTgsMTggQEAKIAkuc2V0X3NldHRpbmdzCQk9IHJ0bDgxNjlfc2V0X3NldHRpbmdzLAogCS5nZXRfbXNnbGV2ZWwJCT0gcnRsODE2OV9nZXRfbXNnbGV2ZWwsCiAJLnNldF9tc2dsZXZlbAkJPSBydGw4MTY5X3NldF9tc2dsZXZlbCwKLQkuZ2V0X3J4X2NzdW0JCT0gcnRsODE2OV9nZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0JCT0gcnRsODE2OV9zZXRfcnhfY3N1bSwKLQkuc2V0X3R4X2NzdW0JCT0gZXRodG9vbF9vcF9zZXRfdHhfY3N1bSwKLQkuc2V0X3NnCQkJPSBldGh0b29sX29wX3NldF9zZywKLQkuc2V0X3RzbwkJPSBldGh0b29sX29wX3NldF90c28sCiAJLmdldF9yZWdzCQk9IHJ0bDgxNjlfZ2V0X3JlZ3MsCiAJLmdldF93b2wJCT0gcnRsODE2OV9nZXRfd29sLAogCS5zZXRfd29sCQk9IHJ0bDgxNjlfc2V0X3dvbCwKIAkuZ2V0X3N0cmluZ3MJCT0gcnRsODE2OV9nZXRfc3RyaW5ncywKIAkuZ2V0X3NzZXRfY291bnQJCT0gcnRsODE2OV9nZXRfc3NldF9jb3VudCwKIAkuZ2V0X2V0aHRvb2xfc3RhdHMJPSBydGw4MTY5X2dldF9ldGh0b29sX3N0YXRzLAotCS5zZXRfZmxhZ3MJCT0gcnRsODE2OV9zZXRfZmxhZ3MsCi0JLmdldF9mbGFncwkJPSBldGh0b29sX29wX2dldF9mbGFncywKIH07CiAKIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X21hY192ZXJzaW9uKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLAotCQkJCSAgICB2b2lkIF9faW9tZW0gKmlvYWRkcikKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggZGVmYXVsdF92ZXJzaW9uKQogeworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKIAkvKgogCSAqIFRoZSBkcml2ZXIgY3VycmVudGx5IGhhbmRsZXMgdGhlIDgxNjhCZiBhbmQgdGhlIDgxNjhCZSBpZGVudGljYWxseQogCSAqIGJ1dCB0aGV5IGNhbiBiZSBpZGVudGlmaWVkIG1vcmUgc3BlY2lmaWNhbGx5IHRocm91Z2ggdGhlIHRlc3QgYmVsb3cKQEAgLTE1NTgsNiArMTYyNiwxMSBAQAogCQl1MzIgdmFsOwogCQlpbnQgbWFjX3ZlcnNpb247CiAJfSBtYWNfaW5mb1tdID0geworCQkvKiA4MTY4RSBmYW1pbHkuICovCisJCXsgMHg3Y2YwMDAwMCwgMHgyYzIwMDAwMCwJUlRMX0dJR0FfTUFDX1ZFUl8zMyB9LAorCQl7IDB4N2NmMDAwMDAsIDB4MmMxMDAwMDAsCVJUTF9HSUdBX01BQ19WRVJfMzIgfSwKKwkJeyAweDdjODAwMDAwLCAweDJjMDAwMDAwLAlSVExfR0lHQV9NQUNfVkVSXzMzIH0sCisKIAkJLyogODE2OEQgZmFtaWx5LiAqLwogCQl7IDB4N2NmMDAwMDAsIDB4MjgzMDAwMDAsCVJUTF9HSUdBX01BQ19WRVJfMjYgfSwKIAkJeyAweDdjZjAwMDAwLCAweDI4MTAwMDAwLAlSVExfR0lHQV9NQUNfVkVSXzI1IH0sCkBAIC0xNTY2LDYgKzE2MzksNyBAQAogCQkvKiA4MTY4RFAgZmFtaWx5LiAqLwogCQl7IDB4N2NmMDAwMDAsIDB4Mjg4MDAwMDAsCVJUTF9HSUdBX01BQ19WRVJfMjcgfSwKIAkJeyAweDdjZjAwMDAwLCAweDI4YTAwMDAwLAlSVExfR0lHQV9NQUNfVkVSXzI4IH0sCisJCXsgMHg3Y2YwMDAwMCwgMHgyOGIwMDAwMCwJUlRMX0dJR0FfTUFDX1ZFUl8zMSB9LAogCiAJCS8qIDgxNjhDIGZhbWlseS4gKi8KIAkJeyAweDdjZjAwMDAwLCAweDNjYjAwMDAwLAlSVExfR0lHQV9NQUNfVkVSXzI0IH0sCkBAIC0xNTg1LDYgKzE2NTksNyBAQAogCQl7IDB4N2M4MDAwMDAsIDB4MzAwMDAwMDAsCVJUTF9HSUdBX01BQ19WRVJfMTEgfSwKIAogCQkvKiA4MTAxIGZhbWlseS4gKi8KKwkJeyAweDdjZjAwMDAwLCAweDQwYjAwMDAwLAlSVExfR0lHQV9NQUNfVkVSXzMwIH0sCiAJCXsgMHg3Y2YwMDAwMCwgMHg0MGEwMDAwMCwJUlRMX0dJR0FfTUFDX1ZFUl8zMCB9LAogCQl7IDB4N2NmMDAwMDAsIDB4NDA5MDAwMDAsCVJUTF9HSUdBX01BQ19WRVJfMjkgfSwKIAkJeyAweDdjODAwMDAwLCAweDQwODAwMDAwLAlSVExfR0lHQV9NQUNfVkVSXzMwIH0sCkBAIC0xNjIxLDYgKzE2OTYsMTIgQEAKIAl3aGlsZSAoKHJlZyAmIHAtPm1hc2spICE9IHAtPnZhbCkKIAkJcCsrOwogCXRwLT5tYWNfdmVyc2lvbiA9IHAtPm1hY192ZXJzaW9uOworCisJaWYgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfTk9ORSkgeworCQluZXRpZl9ub3RpY2UodHAsIHByb2JlLCBkZXYsCisJCQkgICAgICJ1bmtub3duIE1BQywgdXNpbmcgZmFtaWx5IGRlZmF1bHRcbiIpOworCQl0cC0+bWFjX3ZlcnNpb24gPSBkZWZhdWx0X3ZlcnNpb247CisJfQogfQogCiBzdGF0aWMgdm9pZCBydGw4MTY5X3ByaW50X21hY192ZXJzaW9uKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQpAQCAtMTY5MCwxNCArMTc3MSwxNCBAQAogCQljYXNlIFBIWV9CSk1QTjoKIAkJCWlmIChyZWdubyA+IGluZGV4KSB7CiAJCQkJbmV0aWZfZXJyKHRwLCBwcm9iZSwgdHAtPmRldiwKLQkJCQkJIk91dCBvZiByYW5nZSBvZiBmaXJtd2FyZVxuIik7CisJCQkJCSAgIk91dCBvZiByYW5nZSBvZiBmaXJtd2FyZVxuIik7CiAJCQkJcmV0dXJuOwogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgUEhZX1JFQURDT1VOVF9FUV9TS0lQOgogCQkJaWYgKGluZGV4ICsgMiA+PSBmd19zaXplKSB7CiAJCQkJbmV0aWZfZXJyKHRwLCBwcm9iZSwgdHAtPmRldiwKLQkJCQkJIk91dCBvZiByYW5nZSBvZiBmaXJtd2FyZVxuIik7CisJCQkJCSAgIk91dCBvZiByYW5nZSBvZiBmaXJtd2FyZVxuIik7CiAJCQkJcmV0dXJuOwogCQkJfQogCQkJYnJlYWs7CkBAIC0xNzA2LDcgKzE3ODcsNyBAQAogCQljYXNlIFBIWV9TS0lQTjoKIAkJCWlmIChpbmRleCArIDEgKyByZWdubyA+PSBmd19zaXplKSB7CiAJCQkJbmV0aWZfZXJyKHRwLCBwcm9iZSwgdHAtPmRldiwKLQkJCQkJIk91dCBvZiByYW5nZSBvZiBmaXJtd2FyZVxuIik7CisJCQkJCSAgIk91dCBvZiByYW5nZSBvZiBmaXJtd2FyZVxuIik7CiAJCQkJcmV0dXJuOwogCQkJfQogCQkJYnJlYWs7CkBAIC0xNzYyLDEwICsxODQzLDcgQEAKIAkJCWluZGV4Kys7CiAJCQlicmVhazsKIAkJY2FzZSBQSFlfUkVBRENPVU5UX0VRX1NLSVA6Ci0JCQlpZiAoY291bnQgPT0gZGF0YSkKLQkJCQlpbmRleCArPSAyOwotCQkJZWxzZQotCQkJCWluZGV4ICs9IDE7CisJCQlpbmRleCArPSAoY291bnQgPT0gZGF0YSkgPyAyIDogMTsKIAkJCWJyZWFrOwogCQljYXNlIFBIWV9DT01QX0VRX1NLSVBOOgogCQkJaWYgKHByZWRhdGEgPT0gZGF0YSkKQEAgLTIxNzYsNyArMjI1NCw3IEBACiAKIAkJLyoKIAkJICogVHggRXJyb3IgSXNzdWUKLQkJICogZW5oYW5jZSBsaW5lIGRyaXZlciBwb3dlcgorCQkgKiBFbmhhbmNlIGxpbmUgZHJpdmVyIHBvd2VyCiAJCSAqLwogCQl7IDB4MWYsIDB4MDAwMiB9LAogCQl7IDB4MDYsIDB4NTU2MSB9LApAQCAtMjI4OCw3ICsyMzY2LDcgQEAKIAogCQkvKgogCQkgKiBUeCBFcnJvciBJc3N1ZQotCQkgKiBlbmhhbmNlIGxpbmUgZHJpdmVyIHBvd2VyCisJCSAqIEVuaGFuY2UgbGluZSBkcml2ZXIgcG93ZXIKIAkJICovCiAJCXsgMHgxZiwgMHgwMDAyIH0sCiAJCXsgMHgwNiwgMHg1NTYxIH0sCkBAIC0yNDQ0LDYgKzI1MjIsNzkgQEAKIAlydGxfcGF0Y2hwaHkodHAsIDB4MGQsIDEgPDwgNSk7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0bDgxNjhlX2h3X3BoeV9jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlfcmVnIHBoeV9yZWdfaW5pdFtdID0geworCQkvKiBFbmFibGUgRGVsYXkgY2FwICovCisJCXsgMHgxZiwgMHgwMDA1IH0sCisJCXsgMHgwNSwgMHg4YjgwIH0sCisJCXsgMHgwNiwgMHhjODk2IH0sCisJCXsgMHgxZiwgMHgwMDAwIH0sCisKKwkJLyogQ2hhbm5lbCBlc3RpbWF0aW9uIGZpbmUgdHVuZSAqLworCQl7IDB4MWYsIDB4MDAwMSB9LAorCQl7IDB4MGIsIDB4NmMyMCB9LAorCQl7IDB4MDcsIDB4Mjg3MiB9LAorCQl7IDB4MWMsIDB4ZWZmZiB9LAorCQl7IDB4MWYsIDB4MDAwMyB9LAorCQl7IDB4MTQsIDB4NjQyMCB9LAorCQl7IDB4MWYsIDB4MDAwMCB9LAorCisJCS8qIFVwZGF0ZSBQRk0gJiAxME0gVFggaWRsZSB0aW1lciAqLworCQl7IDB4MWYsIDB4MDAwNyB9LAorCQl7IDB4MWUsIDB4MDAyZiB9LAorCQl7IDB4MTUsIDB4MTkxOSB9LAorCQl7IDB4MWYsIDB4MDAwMCB9LAorCisJCXsgMHgxZiwgMHgwMDA3IH0sCisJCXsgMHgxZSwgMHgwMGFjIH0sCisJCXsgMHgxOCwgMHgwMDA2IH0sCisJCXsgMHgxZiwgMHgwMDAwIH0KKwl9OworCisJcnRsX2FwcGx5X2Zpcm13YXJlKHRwKTsKKworCXJ0bF93cml0ZXBoeV9iYXRjaCh0cCwgcGh5X3JlZ19pbml0LCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdCkpOworCisJLyogRENPIGVuYWJsZSBmb3IgMTBNIElETEUgUG93ZXIgKi8KKwlydGxfd3JpdGVwaHkodHAsIDB4MWYsIDB4MDAwNyk7CisJcnRsX3dyaXRlcGh5KHRwLCAweDFlLCAweDAwMjMpOworCXJ0bF93MXcwX3BoeSh0cCwgMHgxNywgMHgwMDA2LCAweDAwMDApOworCXJ0bF93cml0ZXBoeSh0cCwgMHgxZiwgMHgwMDAwKTsKKworCS8qIEZvciBpbXBlZGFuY2UgbWF0Y2hpbmcgKi8KKwlydGxfd3JpdGVwaHkodHAsIDB4MWYsIDB4MDAwMik7CisJcnRsX3cxdzBfcGh5KHRwLCAweDA4LCAweDgwMDAsIDB4N2YwMCk7CisJcnRsX3dyaXRlcGh5KHRwLCAweDFmLCAweDAwMDApOworCisJLyogUEhZIGF1dG8gc3BlZWQgZG93biAqLworCXJ0bF93cml0ZXBoeSh0cCwgMHgxZiwgMHgwMDA3KTsKKwlydGxfd3JpdGVwaHkodHAsIDB4MWUsIDB4MDAyZCk7CisJcnRsX3cxdzBfcGh5KHRwLCAweDE4LCAweDAwNTAsIDB4MDAwMCk7CisJcnRsX3dyaXRlcGh5KHRwLCAweDFmLCAweDAwMDApOworCXJ0bF93MXcwX3BoeSh0cCwgMHgxNCwgMHg4MDAwLCAweDAwMDApOworCisJcnRsX3dyaXRlcGh5KHRwLCAweDFmLCAweDAwMDUpOworCXJ0bF93cml0ZXBoeSh0cCwgMHgwNSwgMHg4Yjg2KTsKKwlydGxfdzF3MF9waHkodHAsIDB4MDYsIDB4MDAwMSwgMHgwMDAwKTsKKwlydGxfd3JpdGVwaHkodHAsIDB4MWYsIDB4MDAwMCk7CisKKwlydGxfd3JpdGVwaHkodHAsIDB4MWYsIDB4MDAwNSk7CisJcnRsX3dyaXRlcGh5KHRwLCAweDA1LCAweDhiODUpOworCXJ0bF93MXcwX3BoeSh0cCwgMHgwNiwgMHgwMDAwLCAweDIwMDApOworCXJ0bF93cml0ZXBoeSh0cCwgMHgxZiwgMHgwMDA3KTsKKwlydGxfd3JpdGVwaHkodHAsIDB4MWUsIDB4MDAyMCk7CisJcnRsX3cxdzBfcGh5KHRwLCAweDE1LCAweDAwMDAsIDB4MTEwMCk7CisJcnRsX3dyaXRlcGh5KHRwLCAweDFmLCAweDAwMDYpOworCXJ0bF93cml0ZXBoeSh0cCwgMHgwMCwgMHg1YTAwKTsKKwlydGxfd3JpdGVwaHkodHAsIDB4MWYsIDB4MDAwMCk7CisJcnRsX3dyaXRlcGh5KHRwLCAweDBkLCAweDAwMDcpOworCXJ0bF93cml0ZXBoeSh0cCwgMHgwZSwgMHgwMDNjKTsKKwlydGxfd3JpdGVwaHkodHAsIDB4MGQsIDB4NDAwNyk7CisJcnRsX3dyaXRlcGh5KHRwLCAweDBlLCAweDAwMDApOworCXJ0bF93cml0ZXBoeSh0cCwgMHgwZCwgMHgwMDAwKTsKK30KKwogc3RhdGljIHZvaWQgcnRsODEwMmVfaHdfcGh5X2NvbmZpZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHBoeV9yZWcgcGh5X3JlZ19pbml0W10gPSB7CkBAIC0yNTU4LDYgKzI3MDksMTMgQEAKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMzA6CiAJCXJ0bDgxMDVlX2h3X3BoeV9jb25maWcodHApOwogCQlicmVhazsKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMzE6CisJCS8qIE5vbmUuICovCisJCWJyZWFrOworCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8zMjoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMzM6CisJCXJ0bDgxNjhlX2h3X3BoeV9jb25maWcodHApOworCQlicmVhazsKIAogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtMjU3NCw5ICsyNzMyLDYgQEAKIAogCWFzc2VydCh0cC0+bWFjX3ZlcnNpb24gPiBSVExfR0lHQV9NQUNfVkVSXzAxKTsKIAotCWlmICghKHRwLT5waHlfMTAwMF9jdHJsX3JlZyAmIEFEVkVSVElTRV8xMDAwRlVMTCkpCi0JCXJldHVybjsKLQogCXNwaW5fbG9ja19pcnEoJnRwLT5sb2NrKTsKIAogCWlmICh0cC0+cGh5X3Jlc2V0X3BlbmRpbmcodHApKSB7CkBAIC0yNjAxLDI4ICsyNzU2LDYgQEAKIAlzcGluX3VubG9ja19pcnEoJnRwLT5sb2NrKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHJ0bDgxNjlfZGVsZXRlX3RpbWVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciA9ICZ0cC0+dGltZXI7Ci0KLQlpZiAodHAtPm1hY192ZXJzaW9uIDw9IFJUTF9HSUdBX01BQ19WRVJfMDEpCi0JCXJldHVybjsKLQotCWRlbF90aW1lcl9zeW5jKHRpbWVyKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJ0bDgxNjlfcmVxdWVzdF90aW1lcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIgPSAmdHAtPnRpbWVyOwotCi0JaWYgKHRwLT5tYWNfdmVyc2lvbiA8PSBSVExfR0lHQV9NQUNfVkVSXzAxKQotCQlyZXR1cm47Ci0KLQltb2RfdGltZXIodGltZXIsIGppZmZpZXMgKyBSVEw4MTY5X1BIWV9USU1FT1VUKTsKLX0KLQogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAvKgogICogUG9sbGluZyAnaW50ZXJydXB0JyAtIHVzZWQgYnkgdGhpbmdzIGxpa2UgbmV0Y29uc29sZSB0byBzZW5kIHNrYnMKQEAgLTI2OTAsMTEgKzI4MjMsMTEgQEAKIAlydGw4MTY5X3BoeV9yZXNldChkZXYsIHRwKTsKIAogCXJ0bDgxNjlfc2V0X3NwZWVkKGRldiwgQVVUT05FR19FTkFCTEUsIFNQRUVEXzEwMDAsIERVUExFWF9GVUxMLAotCQlBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZiB8IEFEVkVSVElTRURfMTBiYXNlVF9GdWxsIHwKLQkJQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmIHwgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsIHwKLQkJKHRwLT5taWkuc3VwcG9ydHNfZ21paSA/Ci0JCQlBRFZFUlRJU0VEXzEwMDBiYXNlVF9IYWxmIHwKLQkJCUFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwgOiAwKSk7CisJCQkgIEFEVkVSVElTRURfMTBiYXNlVF9IYWxmIHwgQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwgfAorCQkJICBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYgfCBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwgfAorCQkJICAodHAtPm1paS5zdXBwb3J0c19nbWlpID8KKwkJCSAgIEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYgfAorCQkJICAgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCA6IDApKTsKIAogCWlmIChSVExfUjgoUEhZc3RhdHVzKSAmIFRCSV9FbmFibGUpCiAJCW5ldGlmX2luZm8odHAsIGxpbmssIGRldiwgIlRCSSBhdXRvLW5lZ290aWF0aW5nXG4iKTsKQEAgLTI3NDcsNyArMjg4MCw4IEBACiAJcmV0dXJuIG5ldGlmX3J1bm5pbmcoZGV2KSA/IHRwLT5kb19pb2N0bCh0cCwgZGF0YSwgY21kKSA6IC1FTk9ERVY7CiB9CiAKLXN0YXRpYyBpbnQgcnRsX3htaWlfaW9jdGwoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqZGF0YSwgaW50IGNtZCkKK3N0YXRpYyBpbnQgcnRsX3htaWlfaW9jdGwoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsCisJCQkgIHN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqZGF0YSwgaW50IGNtZCkKIHsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU0lPQ0dNSUlQSFk6CkBAIC0yODQ3LDYgKzI5ODEsOCBAQAogCS5uZG9fdHhfdGltZW91dAkJPSBydGw4MTY5X3R4X3RpbWVvdXQsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IHJ0bDgxNjlfY2hhbmdlX210dSwKKwkubmRvX2ZpeF9mZWF0dXJlcwk9IHJ0bDgxNjlfZml4X2ZlYXR1cmVzLAorCS5uZG9fc2V0X2ZlYXR1cmVzCT0gcnRsODE2OV9zZXRfZmVhdHVyZXMsCiAJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBydGxfc2V0X21hY19hZGRyZXNzLAogCS5uZG9fZG9faW9jdGwJCT0gcnRsODE2OV9pb2N0bCwKIAkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHJ0bF9zZXRfcnhfbW9kZSwKQEAgLTI4NjYsNiArMzAwMiw3IEBACiAJCW9wcy0+cmVhZAk9IHI4MTY4ZHBfMV9tZGlvX3JlYWQ7CiAJCWJyZWFrOwogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yODoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMzE6CiAJCW9wcy0+d3JpdGUJPSByODE2OGRwXzJfbWRpb193cml0ZTsKIAkJb3BzLT5yZWFkCT0gcjgxNjhkcF8yX21kaW9fcmVhZDsKIAkJYnJlYWs7CkBAIC0yOTA3LDMzICszMDQ0LDgyIEBACiBzdGF0aWMgdm9pZCByODE2OF9waHlfcG93ZXJfdXAoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CiAJcnRsX3dyaXRlcGh5KHRwLCAweDFmLCAweDAwMDApOwotCXJ0bF93cml0ZXBoeSh0cCwgMHgwZSwgMHgwMDAwKTsKKwlzd2l0Y2ggKHRwLT5tYWNfdmVyc2lvbikgeworCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8xMToKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMTI6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzE3OgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8xODoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMTk6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzIwOgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yMToKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjI6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzIzOgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNDoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjU6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI2OgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNzoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjg6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzMxOgorCQlydGxfd3JpdGVwaHkodHAsIDB4MGUsIDB4MDAwMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KIAlydGxfd3JpdGVwaHkodHAsIE1JSV9CTUNSLCBCTUNSX0FORU5BQkxFKTsKIH0KIAogc3RhdGljIHZvaWQgcjgxNjhfcGh5X3Bvd2VyX2Rvd24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CiAJcnRsX3dyaXRlcGh5KHRwLCAweDFmLCAweDAwMDApOwotCXJ0bF93cml0ZXBoeSh0cCwgMHgwZSwgMHgwMjAwKTsKLQlydGxfd3JpdGVwaHkodHAsIE1JSV9CTUNSLCBCTUNSX1BET1dOKTsKKwlzd2l0Y2ggKHRwLT5tYWNfdmVyc2lvbikgeworCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8zMjoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMzM6CisJCXJ0bF93cml0ZXBoeSh0cCwgTUlJX0JNQ1IsIEJNQ1JfQU5FTkFCTEUgfCBCTUNSX1BET1dOKTsKKwkJYnJlYWs7CisKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMTE6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzEyOgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8xNzoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMTg6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzE5OgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yMDoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjE6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzIyOgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yMzoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjQ6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI1OgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNjoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjc6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI4OgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8zMToKKwkJcnRsX3dyaXRlcGh5KHRwLCAweDBlLCAweDAyMDApOworCWRlZmF1bHQ6CisJCXJ0bF93cml0ZXBoeSh0cCwgTUlJX0JNQ1IsIEJNQ1JfUERPV04pOworCQlicmVhazsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIHI4MTY4X3BsbF9wb3dlcl9kb3duKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKIAotCWlmICgoKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzI3KSB8fAotCSAgICAgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzI4KSkgJiYKLQkgICAgKG9jcF9yZWFkKHRwLCAweDBmLCAweDAwMTApICYgMHgwMDAwODAwMCkpIHsKKwlpZiAoKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzI3IHx8CisJICAgICB0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yOCB8fAorCSAgICAgdHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzEpICYmCisJICAgIHI4MTY4ZHBfY2hlY2tfZGFzaCh0cCkpIHsKIAkJcmV0dXJuOwogCX0KIAotCWlmICgoKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzIzKSB8fAotCSAgICAgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzI0KSkgJiYKKwlpZiAoKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzIzIHx8CisJICAgICB0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yNCkgJiYKIAkgICAgKFJUTF9SMTYoQ1BsdXNDbWQpICYgQVNGKSkgewogCQlyZXR1cm47CiAJfQogCisJaWYgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzMyIHx8CisJICAgIHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzMzKQorCQlydGxfZXBoeV93cml0ZShpb2FkZHIsIDB4MTksIDB4ZmY2NCk7CisKIAlpZiAoX19ydGw4MTY5X2dldF93b2wodHApICYgV0FLRV9BTlkpIHsKIAkJcnRsX3dyaXRlcGh5KHRwLCAweDFmLCAweDAwMDApOwogCQlydGxfd3JpdGVwaHkodHAsIE1JSV9CTUNSLCAweDAwMDApOwpAQCAtMjk1MCw2ICszMTM2LDkgQEAKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjY6CiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI3OgogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yODoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMzE6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzMyOgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8zMzoKIAkJUlRMX1c4KFBNQ0gsIFJUTF9SOChQTUNIKSAmIH4weDgwKTsKIAkJYnJlYWs7CiAJfQpAQCAtMjk1OSw5ICszMTQ4LDEwIEBACiB7CiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOwogCi0JaWYgKCgodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjcpIHx8Ci0JICAgICAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjgpKSAmJgotCSAgICAob2NwX3JlYWQodHAsIDB4MGYsIDB4MDAxMCkgJiAweDAwMDA4MDAwKSkgeworCWlmICgodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjcgfHwKKwkgICAgIHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzI4IHx8CisJICAgICB0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zMSkgJiYKKwkgICAgcjgxNjhkcF9jaGVja19kYXNoKHRwKSkgewogCQlyZXR1cm47CiAJfQogCkBAIC0yOTcwLDYgKzMxNjAsOSBAQAogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNjoKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjc6CiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI4OgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8zMToKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMzI6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzMzOgogCQlSVExfVzgoUE1DSCwgUlRMX1I4KFBNQ0gpIHwgMHg4MCk7CiAJCWJyZWFrOwogCX0KQEAgLTMwMjQsNiArMzIxNyw5IEBACiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI2OgogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNzoKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjg6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzMxOgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8zMjoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMzM6CiAJCW9wcy0+ZG93bgk9IHI4MTY4X3BsbF9wb3dlcl9kb3duOwogCQlvcHMtPnVwCQk9IHI4MTY4X3BsbF9wb3dlcl91cDsKIAkJYnJlYWs7CkBAIC0zMDM1LDYgKzMyMzEsMjIgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHJ0bF9od19yZXNldChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKK3sKKwl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CisJaW50IGk7CisKKwkvKiBTb2Z0IHJlc2V0IHRoZSBjaGlwLiAqLworCVJUTF9XOChDaGlwQ21kLCBDbWRSZXNldCk7CisKKwkvKiBDaGVjayB0aGF0IHRoZSBjaGlwIGhhcyBmaW5pc2hlZCB0aGUgcmVzZXQuICovCisJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisJCWlmICgoUlRMX1I4KENoaXBDbWQpICYgQ21kUmVzZXQpID09IDApCisJCQlicmVhazsKKwkJbXNsZWVwX2ludGVycnVwdGlibGUoMSk7CisJfQorfQorCiBzdGF0aWMgaW50IF9fZGV2aW5pdAogcnRsODE2OV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKQEAgLTMwNDQsNyArMzI1Niw3IEBACiAJc3RydWN0IG1paV9pZl9pbmZvICptaWk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAl2b2lkIF9faW9tZW0gKmlvYWRkcjsKLQl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgY2hpcHNldCwgaTsKIAlpbnQgcmM7CiAKIAlpZiAobmV0aWZfbXNnX2RydigmZGVidWcpKSB7CkBAIC0zMTM0LDYgKzMzNDYsNyBAQAogCQlyYyA9IC1FSU87CiAJCWdvdG8gZXJyX291dF9mcmVlX3Jlc18zOwogCX0KKwl0cC0+bW1pb19hZGRyID0gaW9hZGRyOwogCiAJdHAtPnBjaWVfY2FwID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7CiAJaWYgKCF0cC0+cGNpZV9jYXApCkBAIC0zMTQxLDIyICszMzU0LDE0IEBACiAKIAlSVExfVzE2KEludHJNYXNrLCAweDAwMDApOwogCi0JLyogU29mdCByZXNldCB0aGUgY2hpcC4gKi8KLQlSVExfVzgoQ2hpcENtZCwgQ21kUmVzZXQpOwotCi0JLyogQ2hlY2sgdGhhdCB0aGUgY2hpcCBoYXMgZmluaXNoZWQgdGhlIHJlc2V0LiAqLwotCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgewotCQlpZiAoKFJUTF9SOChDaGlwQ21kKSAmIENtZFJlc2V0KSA9PSAwKQotCQkJYnJlYWs7Ci0JCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEpOwotCX0KKwlydGxfaHdfcmVzZXQodHApOwogCiAJUlRMX1cxNihJbnRyU3RhdHVzLCAweGZmZmYpOwogCiAJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKIAkvKiBJZGVudGlmeSBjaGlwIGF0dGFjaGVkIHRvIGJvYXJkICovCi0JcnRsODE2OV9nZXRfbWFjX3ZlcnNpb24odHAsIGlvYWRkcik7CisJcnRsODE2OV9nZXRfbWFjX3ZlcnNpb24odHAsIGRldiwgY2ZnLT5kZWZhdWx0X3Zlcik7CiAKIAkvKgogCSAqIFByZXRlbmQgd2UgYXJlIHVzaW5nIFZMQU5zOyBUaGlzIGJ5cGFzc2VzIGEgbmFzdHkgYnVnIHdoZXJlCkBAIC0zMTY4LDI1ICszMzczLDEwIEBACiAJcnRsX2luaXRfbWRpb19vcHModHApOwogCXJ0bF9pbml0X3BsbF9wb3dlcl9vcHModHApOwogCi0JLyogVXNlIGFwcHJvcHJpYXRlIGRlZmF1bHQgaWYgdW5rbm93biAqLwotCWlmICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX05PTkUpIHsKLQkJbmV0aWZfbm90aWNlKHRwLCBwcm9iZSwgZGV2LAotCQkJICAgICAidW5rbm93biBNQUMsIHVzaW5nIGZhbWlseSBkZWZhdWx0XG4iKTsKLQkJdHAtPm1hY192ZXJzaW9uID0gY2ZnLT5kZWZhdWx0X3ZlcjsKLQl9Ci0KIAlydGw4MTY5X3ByaW50X21hY192ZXJzaW9uKHRwKTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJ0bF9jaGlwX2luZm8pOyBpKyspIHsKLQkJaWYgKHRwLT5tYWNfdmVyc2lvbiA9PSBydGxfY2hpcF9pbmZvW2ldLm1hY192ZXJzaW9uKQotCQkJYnJlYWs7Ci0JfQotCWlmIChpID09IEFSUkFZX1NJWkUocnRsX2NoaXBfaW5mbykpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJImRyaXZlciBidWcsIE1BQyB2ZXJzaW9uIG5vdCBmb3VuZCBpbiBydGxfY2hpcF9pbmZvXG4iKTsKLQkJZ290byBlcnJfb3V0X21zaV80OwotCX0KLQl0cC0+Y2hpcHNldCA9IGk7CisJY2hpcHNldCA9IHRwLT5tYWNfdmVyc2lvbjsKKwl0cC0+dHhkX3ZlcnNpb24gPSBydGxfY2hpcF9pbmZvc1tjaGlwc2V0XS50eGRfdmVyc2lvbjsKIAogCVJUTF9XOChDZmc5MzQ2LCBDZmc5MzQ2X1VubG9jayk7CiAJUlRMX1c4KENvbmZpZzEsIFJUTF9SOChDb25maWcxKSB8IFBNRW5hYmxlKTsKQEAgLTMyMDYsOCArMzM5Niw2IEBACiAJCXRwLT5waHlfcmVzZXRfcGVuZGluZyA9IHJ0bDgxNjlfdGJpX3Jlc2V0X3BlbmRpbmc7CiAJCXRwLT5saW5rX29rID0gcnRsODE2OV90YmlfbGlua19vazsKIAkJdHAtPmRvX2lvY3RsID0gcnRsX3RiaV9pb2N0bDsKLQotCQl0cC0+cGh5XzEwMDBfY3RybF9yZWcgPSBBRFZFUlRJU0VfMTAwMEZVTEw7IC8qIEltcGxpZWQgYnkgVEJJICovCiAJfSBlbHNlIHsKIAkJdHAtPnNldF9zcGVlZCA9IHJ0bDgxNjlfc2V0X3NwZWVkX3htaWk7CiAJCXRwLT5nZXRfc2V0dGluZ3MgPSBydGw4MTY5X2dzZXRfeG1paTsKQEAgLTMyMTksOCArMzQwNyw2IEBACiAKIAlzcGluX2xvY2tfaW5pdCgmdHAtPmxvY2spOwogCi0JdHAtPm1taW9fYWRkciA9IGlvYWRkcjsKLQogCS8qIEdldCBNQUMgYWRkcmVzcyAqLwogCWZvciAoaSA9IDA7IGkgPCBNQUNfQUREUl9MRU47IGkrKykKIAkJZGV2LT5kZXZfYWRkcltpXSA9IFJUTF9SOChNQUMwICsgaSk7CkBAIC0zMjMzLDcgKzM0MTksMTkgQEAKIAogCW5ldGlmX25hcGlfYWRkKGRldiwgJnRwLT5uYXBpLCBydGw4MTY5X3BvbGwsIFI4MTY5X05BUElfV0VJR0hUKTsKIAotCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1RYX1JYIHwgTkVUSUZfRl9HUk87CisJLyogZG9uJ3QgZW5hYmxlIFNHLCBJUF9DU1VNIGFuZCBUU08gYnkgZGVmYXVsdCAtIGl0IG1pZ2h0IG5vdCB3b3JrCisJICogcHJvcGVybHkgZm9yIGFsbCBkZXZpY2VzICovCisJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1JYQ1NVTSB8CisJCU5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWDsKKworCWRldi0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9UU08gfAorCQlORVRJRl9GX1JYQ1NVTSB8IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWDsKKwlkZXYtPnZsYW5fZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9UU08gfAorCQlORVRJRl9GX0hJR0hETUE7CisKKwlpZiAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMDUpCisJCS8qIDgxMTBTQ2QgcmVxdWlyZXMgaGFyZHdhcmUgUnggVkxBTiAtIGRpc2FsbG93IHRvZ2dsaW5nICovCisJCWRldi0+aHdfZmVhdHVyZXMgJj0gfk5FVElGX0ZfSFdfVkxBTl9SWDsKIAogCXRwLT5pbnRyX21hc2sgPSAweGZmZmY7CiAJdHAtPmh3X3N0YXJ0ID0gY2ZnLT5od19zdGFydDsKQEAgLTMyNTMsMTIgKzM0NTEsMTIgQEAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKIAogCW5ldGlmX2luZm8odHAsIHByb2JlLCBkZXYsICIlcyBhdCAweCVseCwgJXBNLCBYSUQgJTA4eCBJUlEgJWRcbiIsCi0JCSAgIHJ0bF9jaGlwX2luZm9bdHAtPmNoaXBzZXRdLm5hbWUsCi0JCSAgIGRldi0+YmFzZV9hZGRyLCBkZXYtPmRldl9hZGRyLAorCQkgICBydGxfY2hpcF9pbmZvc1tjaGlwc2V0XS5uYW1lLCBkZXYtPmJhc2VfYWRkciwgZGV2LT5kZXZfYWRkciwKIAkJICAgKHUzMikoUlRMX1IzMihUeENvbmZpZykgJiAweDljZjBmOGZmKSwgZGV2LT5pcnEpOwogCi0JaWYgKCh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yNykgfHwKLQkgICAgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzI4KSkgeworCWlmICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yNyB8fAorCSAgICB0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yOCB8fAorCSAgICB0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zMSkgewogCQlydGw4MTY4X2RyaXZlcl9zdGFydCh0cCk7CiAJfQogCkBAIC0zMjkwLDggKzM0ODgsOSBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JaWYgKCh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yNykgfHwKLQkgICAgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzI4KSkgeworCWlmICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yNyB8fAorCSAgICB0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yOCB8fAorCSAgICB0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zMSkgewogCQlydGw4MTY4X2RyaXZlcl9zdG9wKHRwKTsKIAl9CiAKQEAgLTMzMTQsMzMgKzM1MTMsMjMgQEAKIAogc3RhdGljIHZvaWQgcnRsX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7Ci0JaW50IGk7Ci0KIAkvKiBSZXR1cm4gZWFybHkgaWYgdGhlIGZpcm13YXJlIGlzIGFscmVhZHkgbG9hZGVkIC8gY2FjaGVkLiAqLwotCWlmICghSVNfRVJSKHRwLT5mdykpCi0JCWdvdG8gb3V0OworCWlmIChJU19FUlIodHAtPmZ3KSkgeworCQljb25zdCBjaGFyICpuYW1lOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocnRsX2Zpcm13YXJlX2luZm9zKTsgaSsrKSB7Ci0JCWNvbnN0IHN0cnVjdCBydGxfZmlybXdhcmVfaW5mbyAqaW5mbyA9IHJ0bF9maXJtd2FyZV9pbmZvcyArIGk7Ci0KLQkJaWYgKGluZm8tPm1hY192ZXJzaW9uID09IHRwLT5tYWNfdmVyc2lvbikgewotCQkJY29uc3QgY2hhciAqbmFtZSA9IGluZm8tPmZ3X25hbWU7CisJCW5hbWUgPSBydGxfbG9va3VwX2Zpcm13YXJlX25hbWUodHApOworCQlpZiAobmFtZSkgewogCQkJaW50IHJjOwogCiAJCQlyYyA9IHJlcXVlc3RfZmlybXdhcmUoJnRwLT5mdywgbmFtZSwgJnRwLT5wY2lfZGV2LT5kZXYpOwotCQkJaWYgKHJjIDwgMCkgewotCQkJCW5ldGlmX3dhcm4odHAsIGlmdXAsIHRwLT5kZXYsICJ1bmFibGUgdG8gbG9hZCAiCi0JCQkJCSJmaXJtd2FyZSBwYXRjaCAlcyAoJWQpXG4iLCBuYW1lLCByYyk7Ci0JCQkJZ290byBvdXRfZGlzYWJsZV9yZXF1ZXN0X2Zpcm13YXJlOwotCQkJfQotCQkJZ290byBvdXQ7Ci0JCX0KLQl9CisJCQlpZiAocmMgPj0gMCkKKwkJCQlyZXR1cm47CiAKLW91dF9kaXNhYmxlX3JlcXVlc3RfZmlybXdhcmU6Ci0JdHAtPmZ3ID0gTlVMTDsKLW91dDoKLQlyZXR1cm47CisJCQluZXRpZl93YXJuKHRwLCBpZnVwLCB0cC0+ZGV2LCAidW5hYmxlIHRvIGxvYWQgIgorCQkJCSJmaXJtd2FyZSBwYXRjaCAlcyAoJWQpXG4iLCBuYW1lLCByYyk7CisJCX0KKwkJdHAtPmZ3ID0gTlVMTDsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgcnRsODE2OV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0zMzg2LDE0ICszNTc1LDEyIEBACiAKIAlydGw4MTY5X2luaXRfcGh5KGRldiwgdHApOwogCi0JcnRsODE2OV92bGFuX21vZGUoZGV2KTsKKwlydGw4MTY5X3NldF9mZWF0dXJlcyhkZXYsIGRldi0+ZmVhdHVyZXMpOwogCiAJcnRsX3BsbF9wb3dlcl91cCh0cCk7CiAKIAlydGxfaHdfc3RhcnQoZGV2KTsKIAotCXJ0bDgxNjlfcmVxdWVzdF90aW1lcihkZXYpOwotCiAJdHAtPnNhdmVkX3dvbG9wdHMgPSAwOwogCXBtX3J1bnRpbWVfcHV0X25vaWRsZSgmcGRldi0+ZGV2KTsKIApAQCAtMzQyNSw3ICszNjEyLDggQEAKIAlydGw4MTY5X2lycV9tYXNrX2FuZF9hY2soaW9hZGRyKTsKIAogCWlmICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yNyB8fAotCSAgICB0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yOCkgeworCSAgICB0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yOCB8fAorCSAgICB0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zMSkgewogCQl3aGlsZSAoUlRMX1I4KFR4UG9sbCkgJiBOUFEpCiAJCQl1ZGVsYXkoMjApOwogCkBAIC0zNDQzLDcgKzM2MzEsNyBAQAogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKIAl1MzIgY2ZnID0gcnRsODE2OV9yeF9jb25maWc7CiAKLQljZmcgfD0gKFJUTF9SMzIoUnhDb25maWcpICYgcnRsX2NoaXBfaW5mb1t0cC0+Y2hpcHNldF0uUnhDb25maWdNYXNrKTsKKwljZmcgfD0gKFJUTF9SMzIoUnhDb25maWcpICYgUlRMX1JYX0NPTkZJR19NQVNLKTsKIAlSVExfVzMyKFJ4Q29uZmlnLCBjZmcpOwogCiAJLyogU2V0IERNQSBidXJzdCBzaXplIGFuZCBJbnRlcmZyYW1lIEdhcCBUaW1lICovCkBAIC0zNDU0LDI1ICszNjQyLDE0IEBACiBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0Jdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOwotCXVuc2lnbmVkIGludCBpOwogCi0JLyogU29mdCByZXNldCB0aGUgY2hpcC4gKi8KLQlSVExfVzgoQ2hpcENtZCwgQ21kUmVzZXQpOwotCi0JLyogQ2hlY2sgdGhhdCB0aGUgY2hpcCBoYXMgZmluaXNoZWQgdGhlIHJlc2V0LiAqLwotCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgewotCQlpZiAoKFJUTF9SOChDaGlwQ21kKSAmIENtZFJlc2V0KSA9PSAwKQotCQkJYnJlYWs7Ci0JCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEpOwotCX0KKwlydGxfaHdfcmVzZXQodHApOwogCiAJdHAtPmh3X3N0YXJ0KGRldik7CiAKIAluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogfQogCi0KIHN0YXRpYyB2b2lkIHJ0bF9zZXRfcnhfdHhfZGVzY19yZWdpc3RlcnMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsCiAJCQkJCSB2b2lkIF9faW9tZW0gKmlvYWRkcikKIHsKQEAgLTM1MzgsMjYgKzM3MTUsMjYgQEAKIAl9CiAKIAlSVExfVzgoQ2ZnOTM0NiwgQ2ZnOTM0Nl9VbmxvY2spOwotCWlmICgodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMDEpIHx8Ci0JICAgICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8wMikgfHwKLQkgICAgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzAzKSB8fAotCSAgICAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMDQpKQorCWlmICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8wMSB8fAorCSAgICB0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8wMiB8fAorCSAgICB0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8wMyB8fAorCSAgICB0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8wNCkKIAkJUlRMX1c4KENoaXBDbWQsIENtZFR4RW5iIHwgQ21kUnhFbmIpOwogCiAJUlRMX1c4KEVhcmx5VHhUaHJlcywgTm9FYXJseVR4KTsKIAogCXJ0bF9zZXRfcnhfbWF4X3NpemUoaW9hZGRyLCByeF9idWZfc3opOwogCi0JaWYgKCh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8wMSkgfHwKLQkgICAgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzAyKSB8fAotCSAgICAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMDMpIHx8Ci0JICAgICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8wNCkpCisJaWYgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzAxIHx8CisJICAgIHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzAyIHx8CisJICAgIHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzAzIHx8CisJICAgIHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzA0KQogCQlydGxfc2V0X3J4X3R4X2NvbmZpZ19yZWdpc3RlcnModHApOwogCiAJdHAtPmNwX2NtZCB8PSBydGxfcndfY3BsdXNjbWQoaW9hZGRyKSB8IFBDSU11bFJXOwogCi0JaWYgKCh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8wMikgfHwKLQkgICAgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzAzKSkgeworCWlmICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8wMiB8fAorCSAgICB0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8wMykgewogCQlkcHJpbnRrKCJTZXQgTUFDIFJlZyBDK0NSIE9mZnNldCAweEUwLiAiCiAJCQkiQml0LTMgYW5kIGJpdC0xNCBNVVNUIGJlIDFcbiIpOwogCQl0cC0+Y3BfY21kIHw9ICgxIDw8IDE0KTsKQEAgLTM1NzUsMTAgKzM3NTIsMTAgQEAKIAogCXJ0bF9zZXRfcnhfdHhfZGVzY19yZWdpc3RlcnModHAsIGlvYWRkcik7CiAKLQlpZiAoKHRwLT5tYWNfdmVyc2lvbiAhPSBSVExfR0lHQV9NQUNfVkVSXzAxKSAmJgotCSAgICAodHAtPm1hY192ZXJzaW9uICE9IFJUTF9HSUdBX01BQ19WRVJfMDIpICYmCi0JICAgICh0cC0+bWFjX3ZlcnNpb24gIT0gUlRMX0dJR0FfTUFDX1ZFUl8wMykgJiYKLQkgICAgKHRwLT5tYWNfdmVyc2lvbiAhPSBSVExfR0lHQV9NQUNfVkVSXzA0KSkgeworCWlmICh0cC0+bWFjX3ZlcnNpb24gIT0gUlRMX0dJR0FfTUFDX1ZFUl8wMSAmJgorCSAgICB0cC0+bWFjX3ZlcnNpb24gIT0gUlRMX0dJR0FfTUFDX1ZFUl8wMiAmJgorCSAgICB0cC0+bWFjX3ZlcnNpb24gIT0gUlRMX0dJR0FfTUFDX1ZFUl8wMyAmJgorCSAgICB0cC0+bWFjX3ZlcnNpb24gIT0gUlRMX0dJR0FfTUFDX1ZFUl8wNCkgewogCQlSVExfVzgoQ2hpcENtZCwgQ21kVHhFbmIgfCBDbWRSeEVuYik7CiAJCXJ0bF9zZXRfcnhfdHhfY29uZmlnX3JlZ2lzdGVycyh0cCk7CiAJfQpAQCAtMzgyMiw2ICszOTk5LDE3IEBACiAJUlRMX1cxNihDUGx1c0NtZCwgUlRMX1IxNihDUGx1c0NtZCkgJiB+UjgxNjhfQ1BDTURfUVVJUktfTUFTSyk7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTY4ZHAodm9pZCBfX2lvbWVtICppb2FkZHIsIHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXJ0bF9jc2lfYWNjZXNzX2VuYWJsZV8xKGlvYWRkcik7CisKKwlydGxfdHhfcGVyZm9ybWFuY2VfdHdlYWsocGRldiwgMHg1IDw8IE1BWF9SRUFEX1JFUVVFU1RfU0hJRlQpOworCisJUlRMX1c4KE1heFR4UGFja2V0U2l6ZSwgVHhQYWNrZXRNYXgpOworCisJcnRsX2Rpc2FibGVfY2xvY2tfcmVxdWVzdChwZGV2KTsKK30KKwogc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxNjhkXzQodm9pZCBfX2lvbWVtICppb2FkZHIsIHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXBoeV9pbmZvIGVfaW5mb184MTY4ZF80W10gPSB7CkBAIC0zODQ4LDYgKzQwMzYsNDEgQEAKIAlydGxfZW5hYmxlX2Nsb2NrX3JlcXVlc3QocGRldik7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTY4ZSh2b2lkIF9faW9tZW0gKmlvYWRkciwgc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBlcGh5X2luZm8gZV9pbmZvXzgxNjhlW10gPSB7CisJCXsgMHgwMCwgMHgwMjAwLAkweDAxMDAgfSwKKwkJeyAweDAwLCAweDAwMDAsCTB4MDAwNCB9LAorCQl7IDB4MDYsIDB4MDAwMiwJMHgwMDAxIH0sCisJCXsgMHgwNiwgMHgwMDAwLAkweDAwMzAgfSwKKwkJeyAweDA3LCAweDAwMDAsCTB4MjAwMCB9LAorCQl7IDB4MDAsIDB4MDAwMCwJMHgwMDIwIH0sCisJCXsgMHgwMywgMHg1ODAwLAkweDIwMDAgfSwKKwkJeyAweDAzLCAweDAwMDAsCTB4MDAwMSB9LAorCQl7IDB4MDEsIDB4MDgwMCwJMHgxMDAwIH0sCisJCXsgMHgwNywgMHgwMDAwLAkweDQwMDAgfSwKKwkJeyAweDFlLCAweDAwMDAsCTB4MjAwMCB9LAorCQl7IDB4MTksIDB4ZmZmZiwJMHhmZTZjIH0sCisJCXsgMHgwYSwgMHgwMDAwLAkweDAwNDAgfQorCX07CisKKwlydGxfY3NpX2FjY2Vzc19lbmFibGVfMihpb2FkZHIpOworCisJcnRsX2VwaHlfaW5pdChpb2FkZHIsIGVfaW5mb184MTY4ZSwgQVJSQVlfU0laRShlX2luZm9fODE2OGUpKTsKKworCXJ0bF90eF9wZXJmb3JtYW5jZV90d2VhayhwZGV2LCAweDUgPDwgTUFYX1JFQURfUkVRVUVTVF9TSElGVCk7CisKKwlSVExfVzgoTWF4VHhQYWNrZXRTaXplLCBUeFBhY2tldE1heCk7CisKKwlydGxfZGlzYWJsZV9jbG9ja19yZXF1ZXN0KHBkZXYpOworCisJLyogUmVzZXQgdHggRklGTyBwb2ludGVyICovCisJUlRMX1czMihNSVNDLCBSVExfUjMyKE1JU0MpIHwgVFhQTEFfUlNUKTsKKwlSVExfVzMyKE1JU0MsIFJUTF9SMzIoTUlTQykgJiB+VFhQTEFfUlNUKTsKKworCVJUTF9XOChDb25maWc1LCBSVExfUjgoQ29uZmlnNSkgJiB+U3BpX2VuKTsKK30KKwogc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxNjgoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0zODg1LDU1ICs0MTA4LDY0IEBACiAJc3dpdGNoICh0cC0+bWFjX3ZlcnNpb24pIHsKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMTE6CiAJCXJ0bF9od19zdGFydF84MTY4YmIoaW9hZGRyLCBwZGV2KTsKLQlicmVhazsKKwkJYnJlYWs7CiAKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMTI6CiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzE3OgogCQlydGxfaHdfc3RhcnRfODE2OGJlZihpb2FkZHIsIHBkZXYpOwotCWJyZWFrOworCQlicmVhazsKIAogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8xODoKIAkJcnRsX2h3X3N0YXJ0XzgxNjhjcF8xKGlvYWRkciwgcGRldik7Ci0JYnJlYWs7CisJCWJyZWFrOwogCiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzE5OgogCQlydGxfaHdfc3RhcnRfODE2OGNfMShpb2FkZHIsIHBkZXYpOwotCWJyZWFrOworCQlicmVhazsKIAogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yMDoKIAkJcnRsX2h3X3N0YXJ0XzgxNjhjXzIoaW9hZGRyLCBwZGV2KTsKLQlicmVhazsKKwkJYnJlYWs7CiAKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjE6CiAJCXJ0bF9od19zdGFydF84MTY4Y18zKGlvYWRkciwgcGRldik7Ci0JYnJlYWs7CisJCWJyZWFrOwogCiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzIyOgogCQlydGxfaHdfc3RhcnRfODE2OGNfNChpb2FkZHIsIHBkZXYpOwotCWJyZWFrOworCQlicmVhazsKIAogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yMzoKIAkJcnRsX2h3X3N0YXJ0XzgxNjhjcF8yKGlvYWRkciwgcGRldik7Ci0JYnJlYWs7CisJCWJyZWFrOwogCiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI0OgogCQlydGxfaHdfc3RhcnRfODE2OGNwXzMoaW9hZGRyLCBwZGV2KTsKLQlicmVhazsKKwkJYnJlYWs7CiAKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjU6CiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI2OgogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNzoKIAkJcnRsX2h3X3N0YXJ0XzgxNjhkKGlvYWRkciwgcGRldik7Ci0JYnJlYWs7CisJCWJyZWFrOwogCiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI4OgogCQlydGxfaHdfc3RhcnRfODE2OGRfNChpb2FkZHIsIHBkZXYpOwotCWJyZWFrOworCQlicmVhazsKKworCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8zMToKKwkJcnRsX2h3X3N0YXJ0XzgxNjhkcChpb2FkZHIsIHBkZXYpOworCQlicmVhazsKKworCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8zMjoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMzM6CisJCXJ0bF9od19zdGFydF84MTY4ZShpb2FkZHIsIHBkZXYpOworCQlicmVhazsKIAogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiB1bmtub3duIGNoaXBzZXQgKG1hY192ZXJzaW9uID0gJWQpLlxuIiwKIAkJCWRldi0+bmFtZSwgdHAtPm1hY192ZXJzaW9uKTsKLQlicmVhazsKKwkJYnJlYWs7CiAJfQogCiAJUlRMX1c4KENoaXBDbWQsIENtZFR4RW5iIHwgQ21kUnhFbmIpOwpAQCAtNDAxNywxMCArNDI0OSwxMCBAQAogCQl7IDB4MGEsCTAsIDB4MDAyMCB9CiAJfTsKIAotCS8qIEZvcmNlIExBTiBleGl0IGZyb20gQVNQTSBpZiBSeC9UeCBhcmUgbm90IGlkZWwgKi8KKwkvKiBGb3JjZSBMQU4gZXhpdCBmcm9tIEFTUE0gaWYgUngvVHggYXJlIG5vdCBpZGxlICovCiAJUlRMX1czMihGdW5jRXZlbnQsIFJUTF9SMzIoRnVuY0V2ZW50KSB8IDB4MDAyODAwKTsKIAotCS8qIGRpc2FibGUgRWFybHkgVGFsbHkgQ291bnRlciAqLworCS8qIERpc2FibGUgRWFybHkgVGFsbHkgQ291bnRlciAqLwogCVJUTF9XMzIoRnVuY0V2ZW50LCBSVExfUjMyKEZ1bmNFdmVudCkgJiB+MHgwMTAwMDApOwogCiAJUlRMX1c4KE1DVSwgUlRMX1I4KE1DVSkgfCBFTl9ORFAgfCBFTl9PT0JfUkVTRVQpOwpAQCAtNDA0MSw4ICs0MjczLDggQEAKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC0+cGNpX2RldjsKIAotCWlmICgodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMTMpIHx8Ci0JICAgICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8xNikpIHsKKwlpZiAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMTMgfHwKKwkgICAgdHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMTYpIHsKIAkJaW50IGNhcCA9IHRwLT5wY2llX2NhcDsKIAogCQlpZiAoY2FwKSB7CkBAIC00MTA1LDYgKzQzMzcsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWRldi0+bXR1ID0gbmV3X210dTsKKwluZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDM0Miw2ICs0NTc2LDcgQEAKIAlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCB0YXNrLndvcmspOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0cC0+ZGV2OworCWludCBpOwogCiAJcnRubF9sb2NrKCk7CiAKQEAgLTQzNTAsMTkgKzQ1ODUsMTUgQEAKIAogCXJ0bDgxNjlfd2FpdF9mb3JfcXVpZXNjZW5jZShkZXYpOwogCi0JcnRsODE2OV9yeF9pbnRlcnJ1cHQoZGV2LCB0cCwgdHAtPm1taW9fYWRkciwgfih1MzIpMCk7CisJZm9yIChpID0gMDsgaSA8IE5VTV9SWF9ERVNDOyBpKyspCisJCXJ0bDgxNjlfbWFya190b19hc2ljKHRwLT5SeERlc2NBcnJheSArIGksIHJ4X2J1Zl9zeik7CisKIAlydGw4MTY5X3R4X2NsZWFyKHRwKTsKIAotCWlmICh0cC0+ZGlydHlfcnggPT0gdHAtPmN1cl9yeCkgewotCQlydGw4MTY5X2luaXRfcmluZ19pbmRleGVzKHRwKTsKLQkJcnRsX2h3X3N0YXJ0KGRldik7Ci0JCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLQkJcnRsODE2OV9jaGVja19saW5rX3N0YXR1cyhkZXYsIHRwLCB0cC0+bW1pb19hZGRyKTsKLQl9IGVsc2UgewotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJbmV0aWZfZW1lcmcodHAsIGludHIsIGRldiwgIlJ4IGJ1ZmZlcnMgc2hvcnRhZ2VcbiIpOwotCQlydGw4MTY5X3NjaGVkdWxlX3dvcmsoZGV2LCBydGw4MTY5X3Jlc2V0X3Rhc2spOwotCX0KKwlydGw4MTY5X2luaXRfcmluZ19pbmRleGVzKHRwKTsKKwlydGxfaHdfc3RhcnQoZGV2KTsKKwluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJcnRsODE2OV9jaGVja19saW5rX3N0YXR1cyhkZXYsIHRwLCB0cC0+bW1pb19hZGRyKTsKIAogb3V0X3VubG9jazoKIAlydG5sX3VubG9jaygpOwpAQCAtNDM3OSw3ICs0NjEwLDcgQEAKIH0KIAogc3RhdGljIGludCBydGw4MTY5X3htaXRfZnJhZ3Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgICB1MzIgb3B0czEpCisJCQkgICAgICB1MzIgKm9wdHMpCiB7CiAJc3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqaW5mbyA9IHNrYl9zaGluZm8oc2tiKTsKIAl1bnNpZ25lZCBpbnQgY3VyX2ZyYWcsIGVudHJ5OwpAQCAtNDQwNiwxMCArNDYzNywxMiBAQAogCQkJZ290byBlcnJfb3V0OwogCQl9CiAKLQkJLyogYW50aSBnY2MgMi45NS4zIGJ1Z3dhcmUgKHNpYykgKi8KLQkJc3RhdHVzID0gb3B0czEgfCBsZW4gfCAoUmluZ0VuZCAqICEoKGVudHJ5ICsgMSkgJSBOVU1fVFhfREVTQykpOworCQkvKiBBbnRpIGdjYyAyLjk1LjMgYnVnd2FyZSAoc2ljKSAqLworCQlzdGF0dXMgPSBvcHRzWzBdIHwgbGVuIHwKKwkJCShSaW5nRW5kICogISgoZW50cnkgKyAxKSAlIE5VTV9UWF9ERVNDKSk7CiAKIAkJdHhkLT5vcHRzMSA9IGNwdV90b19sZTMyKHN0YXR1cyk7CisJCXR4ZC0+b3B0czIgPSBjcHVfdG9fbGUzMihvcHRzWzFdKTsKIAkJdHhkLT5hZGRyID0gY3B1X3RvX2xlNjQobWFwcGluZyk7CiAKIAkJdHAtPnR4X3NrYltlbnRyeV0ubGVuID0gbGVuOwpAQCAtNDQyNywyNCArNDY2MCwyNiBAQAogCXJldHVybiAtRUlPOwogfQogCi1zdGF0aWMgaW5saW5lIHUzMiBydGw4MTY5X3Rzb19jc3VtKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgcnRsODE2OV90c29fY3N1bShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwKKwkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyICpvcHRzKQogewotCWlmIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9UU08pIHsKLQkJdTMyIG1zcyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemU7CisJY29uc3Qgc3RydWN0IHJ0bF90eF9kZXNjX2luZm8gKmluZm8gPSB0eF9kZXNjX2luZm8gKyB0cC0+dHhkX3ZlcnNpb247CisJdTMyIG1zcyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemU7CisJaW50IG9mZnNldCA9IGluZm8tPm9wdHNfb2Zmc2V0OwogCi0JCWlmIChtc3MpCi0JCQlyZXR1cm4gTGFyZ2VTZW5kIHwgKChtc3MgJiBNU1NNYXNrKSA8PCBNU1NTaGlmdCk7Ci0JfQotCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CisJaWYgKG1zcykgeworCQlvcHRzWzBdIHw9IFREX0xTTzsKKwkJb3B0c1tvZmZzZXRdIHw9IG1pbihtc3MsIFREX01TU19NQVgpIDw8IGluZm8tPm1zc19zaGlmdDsKKwl9IGVsc2UgaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKIAkJY29uc3Qgc3RydWN0IGlwaGRyICppcCA9IGlwX2hkcihza2IpOwogCiAJCWlmIChpcC0+cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApCi0JCQlyZXR1cm4gSVBDUyB8IFRDUENTOworCQkJb3B0c1tvZmZzZXRdIHw9IGluZm8tPmNoZWNrc3VtLnRjcDsKIAkJZWxzZSBpZiAoaXAtPnByb3RvY29sID09IElQUFJPVE9fVURQKQotCQkJcmV0dXJuIElQQ1MgfCBVRFBDUzsKLQkJV0FSTl9PTigxKTsJLyogd2UgbmVlZCBhIFdBUk4oKSAqLworCQkJb3B0c1tvZmZzZXRdIHw9IGluZm8tPmNoZWNrc3VtLnVkcDsKKwkJZWxzZQorCQkJV0FSTl9PTl9PTkNFKDEpOwogCX0KLQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIG5ldGRldl90eF90IHJ0bDgxNjlfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtNDQ1Nyw3ICs0NjkyLDcgQEAKIAlzdHJ1Y3QgZGV2aWNlICpkID0gJnRwLT5wY2lfZGV2LT5kZXY7CiAJZG1hX2FkZHJfdCBtYXBwaW5nOwogCXUzMiBzdGF0dXMsIGxlbjsKLQl1MzIgb3B0czE7CisJdTMyIG9wdHNbMl07CiAJaW50IGZyYWdzOwogCiAJaWYgKHVubGlrZWx5KFRYX0JVRkZTX0FWQUlMKHRwKSA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MpKSB7CkBAIC00NDc4LDMxICs0NzEzLDM1IEBACiAKIAl0cC0+dHhfc2tiW2VudHJ5XS5sZW4gPSBsZW47CiAJdHhkLT5hZGRyID0gY3B1X3RvX2xlNjQobWFwcGluZyk7Ci0JdHhkLT5vcHRzMiA9IGNwdV90b19sZTMyKHJ0bDgxNjlfdHhfdmxhbl90YWcodHAsIHNrYikpOwogCi0Jb3B0czEgPSBEZXNjT3duIHwgcnRsODE2OV90c29fY3N1bShza2IsIGRldik7CisJb3B0c1sxXSA9IGNwdV90b19sZTMyKHJ0bDgxNjlfdHhfdmxhbl90YWcodHAsIHNrYikpOworCW9wdHNbMF0gPSBEZXNjT3duOwogCi0JZnJhZ3MgPSBydGw4MTY5X3htaXRfZnJhZ3ModHAsIHNrYiwgb3B0czEpOworCXJ0bDgxNjlfdHNvX2NzdW0odHAsIHNrYiwgb3B0cyk7CisKKwlmcmFncyA9IHJ0bDgxNjlfeG1pdF9mcmFncyh0cCwgc2tiLCBvcHRzKTsKIAlpZiAoZnJhZ3MgPCAwKQogCQlnb3RvIGVycl9kbWFfMTsKIAllbHNlIGlmIChmcmFncykKLQkJb3B0czEgfD0gRmlyc3RGcmFnOworCQlvcHRzWzBdIHw9IEZpcnN0RnJhZzsKIAllbHNlIHsKLQkJb3B0czEgfD0gRmlyc3RGcmFnIHwgTGFzdEZyYWc7CisJCW9wdHNbMF0gfD0gRmlyc3RGcmFnIHwgTGFzdEZyYWc7CiAJCXRwLT50eF9za2JbZW50cnldLnNrYiA9IHNrYjsKIAl9CiAKKwl0eGQtPm9wdHMyID0gY3B1X3RvX2xlMzIob3B0c1sxXSk7CisKIAl3bWIoKTsKIAotCS8qIGFudGkgZ2NjIDIuOTUuMyBidWd3YXJlIChzaWMpICovCi0Jc3RhdHVzID0gb3B0czEgfCBsZW4gfCAoUmluZ0VuZCAqICEoKGVudHJ5ICsgMSkgJSBOVU1fVFhfREVTQykpOworCS8qIEFudGkgZ2NjIDIuOTUuMyBidWd3YXJlIChzaWMpICovCisJc3RhdHVzID0gb3B0c1swXSB8IGxlbiB8IChSaW5nRW5kICogISgoZW50cnkgKyAxKSAlIE5VTV9UWF9ERVNDKSk7CiAJdHhkLT5vcHRzMSA9IGNwdV90b19sZTMyKHN0YXR1cyk7CiAKIAl0cC0+Y3VyX3R4ICs9IGZyYWdzICsgMTsKIAogCXdtYigpOwogCi0JUlRMX1c4KFR4UG9sbCwgTlBRKTsJLyogc2V0IHBvbGxpbmcgYml0ICovCisJUlRMX1c4KFR4UG9sbCwgTlBRKTsKIAogCWlmIChUWF9CVUZGU19BVkFJTCh0cCkgPCBNQVhfU0tCX0ZSQUdTKSB7CiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKQEAgLTQ2NTksMjAgKzQ4OTgsMTIgQEAKIAlyZXR1cm4gc2tiOwogfQogCi0vKgotICogV2FybmluZyA6IHJ0bDgxNjlfcnhfaW50ZXJydXB0KCkgbWlnaHQgYmUgY2FsbGVkIDoKLSAqIDEpIGZyb20gTkFQSSAoc29mdGlycSkgY29udGV4dAotICoJKHBvbGxpbmcgPSAxIDogd2Ugc2hvdWxkIGNhbGwgbmV0aWZfcmVjZWl2ZV9za2IoKSkKLSAqIDIpIGZyb20gcHJvY2VzcyBjb250ZXh0IChydGw4MTY5X3Jlc2V0X3Rhc2soKSkKLSAqCShwb2xsaW5nID0gMCA6IHdlIG11c3QgY2FsbCBuZXRpZl9yeCgpIGluc3RlYWQpCi0gKi8KIHN0YXRpYyBpbnQgcnRsODE2OV9yeF9pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwKIAkJCQl2b2lkIF9faW9tZW0gKmlvYWRkciwgdTMyIGJ1ZGdldCkKIHsKIAl1bnNpZ25lZCBpbnQgY3VyX3J4LCByeF9sZWZ0OwogCXVuc2lnbmVkIGludCBjb3VudDsKLQlpbnQgcG9sbGluZyA9IChidWRnZXQgIT0gfih1MzIpMCkgPyAxIDogMDsKIAogCWN1cl9yeCA9IHRwLT5jdXJfcng7CiAJcnhfbGVmdCA9IE5VTV9SWF9ERVNDICsgdHAtPmRpcnR5X3J4IC0gY3VyX3J4OwpAQCAtNDczMiwxMCArNDk2Myw3IEBACiAKIAkJCXJ0bDgxNjlfcnhfdmxhbl90YWcoZGVzYywgc2tiKTsKIAotCQkJaWYgKGxpa2VseShwb2xsaW5nKSkKLQkJCQluYXBpX2dyb19yZWNlaXZlKCZ0cC0+bmFwaSwgc2tiKTsKLQkJCWVsc2UKLQkJCQluZXRpZl9yeChza2IpOworCQkJbmFwaV9ncm9fcmVjZWl2ZSgmdHAtPm5hcGksIHNrYik7CiAKIAkJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X3NpemU7CiAJCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKQEAgLTQ3OTgsNiArNTAyNiw3IEBACiAJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjQ6CiAJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjc6CiAJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjg6CisJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMzE6CiAJCQkvKiBFeHBlcmltZW50YWwgc2NpZW5jZS4gUGt0Z2VuIHByb29mLiAqLwogCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzEyOgogCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI1OgpAQCAtNDg5MCw3ICs1MTE5LDcgQEAKIAlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOwogCi0JcnRsODE2OV9kZWxldGVfdGltZXIoZGV2KTsKKwlkZWxfdGltZXJfc3luYygmdHAtPnRpbWVyKTsKIAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIApAQCAtNDkyNyw3ICs1MTU2LDcgQEAKIAogCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJnBkZXYtPmRldik7CiAKLQkvKiB1cGRhdGUgY291bnRlcnMgYmVmb3JlIGdvaW5nIGRvd24gKi8KKwkvKiBVcGRhdGUgY291bnRlcnMgYmVmb3JlIGdvaW5nIGRvd24gKi8KIAlydGw4MTY5X3VwZGF0ZV9jb3VudGVycyhkZXYpOwogCiAJcnRsODE2OV9kb3duKGRldik7CkBAIC00OTgyLDcgKzUyMTEsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+bG9jaywgZmxhZ3MpOwogCiAJdG1wID0gcnRsODE2OV9yeF9jb25maWcgfCByeF9tb2RlIHwKLQkgICAgICAoUlRMX1IzMihSeENvbmZpZykgJiBydGxfY2hpcF9pbmZvW3RwLT5jaGlwc2V0XS5SeENvbmZpZ01hc2spOworCSAgICAgIChSVExfUjMyKFJ4Q29uZmlnKSAmIFJUTF9SWF9DT05GSUdfTUFTSyk7CiAKIAlpZiAodHAtPm1hY192ZXJzaW9uID4gUlRMX0dJR0FfTUFDX1ZFUl8wNikgewogCQl1MzIgZGF0YSA9IG1jX2ZpbHRlclswXTsKQEAgLTUxMjAsMTUgKzUzNDksMTUgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHJ0bDgxNjlfcG1fb3BzID0gewotCS5zdXNwZW5kID0gcnRsODE2OV9zdXNwZW5kLAotCS5yZXN1bWUgPSBydGw4MTY5X3Jlc3VtZSwKLQkuZnJlZXplID0gcnRsODE2OV9zdXNwZW5kLAotCS50aGF3ID0gcnRsODE2OV9yZXN1bWUsCi0JLnBvd2Vyb2ZmID0gcnRsODE2OV9zdXNwZW5kLAotCS5yZXN0b3JlID0gcnRsODE2OV9yZXN1bWUsCi0JLnJ1bnRpbWVfc3VzcGVuZCA9IHJ0bDgxNjlfcnVudGltZV9zdXNwZW5kLAotCS5ydW50aW1lX3Jlc3VtZSA9IHJ0bDgxNjlfcnVudGltZV9yZXN1bWUsCi0JLnJ1bnRpbWVfaWRsZSA9IHJ0bDgxNjlfcnVudGltZV9pZGxlLAorCS5zdXNwZW5kCQk9IHJ0bDgxNjlfc3VzcGVuZCwKKwkucmVzdW1lCQkJPSBydGw4MTY5X3Jlc3VtZSwKKwkuZnJlZXplCQkJPSBydGw4MTY5X3N1c3BlbmQsCisJLnRoYXcJCQk9IHJ0bDgxNjlfcmVzdW1lLAorCS5wb3dlcm9mZgkJPSBydGw4MTY5X3N1c3BlbmQsCisJLnJlc3RvcmUJCT0gcnRsODE2OV9yZXN1bWUsCisJLnJ1bnRpbWVfc3VzcGVuZAk9IHJ0bDgxNjlfcnVudGltZV9zdXNwZW5kLAorCS5ydW50aW1lX3Jlc3VtZQkJPSBydGw4MTY5X3J1bnRpbWVfcmVzdW1lLAorCS5ydW50aW1lX2lkbGUJCT0gcnRsODE2OV9ydW50aW1lX2lkbGUsCiB9OwogCiAjZGVmaW5lIFJUTDgxNjlfUE1fT1BTCSgmcnRsODE2OV9wbV9vcHMpCkBAIC01MTQ3LDcgKzUzNzYsNyBAQAogCiAJcnRsODE2OV9uZXRfc3VzcGVuZChkZXYpOwogCi0JLyogcmVzdG9yZSBvcmlnaW5hbCBNQUMgYWRkcmVzcyAqLworCS8qIFJlc3RvcmUgb3JpZ2luYWwgTUFDIGFkZHJlc3MgKi8KIAlydGxfcmFyX3NldCh0cCwgZGV2LT5wZXJtX2FkZHIpOwogCiAJc3Bpbl9sb2NrX2lycSgmdHAtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcmlvbmV0LmMgYi9kcml2ZXJzL25ldC9yaW9uZXQuYwppbmRleCAyNmFmYmFhLi43N2M1MDkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9yaW9uZXQuYworKysgYi9kcml2ZXJzL25ldC9yaW9uZXQuYwpAQCAtMTYyLDggKzE2Miw4IEBACiAJcm5ldC0+dHhfc2xvdCAmPSAoUklPTkVUX1RYX1JJTkdfU0laRSAtIDEpOwogCiAJaWYgKG5ldGlmX21zZ190eF9xdWV1ZWQocm5ldCkpCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBxdWV1ZWQgc2tiICU4Ljh4IGxlbiAlOC44eFxuIiwgRFJWX05BTUUsCi0JCSAgICAgICAodTMyKSBza2IsIHNrYi0+bGVuKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHF1ZXVlZCBza2IgbGVuICU4Ljh4XG4iLCBEUlZfTkFNRSwKKwkJICAgICAgIHNrYi0+bGVuKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvczJpby5jIGIvZHJpdmVycy9uZXQvczJpby5jCmluZGV4IDMzN2JkY2QuLmRmMGQyYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3MyaW8uYworKysgYi9kcml2ZXJzL25ldC9zMmlvLmMKQEAgLTc4LDYgKzc4LDcgQEAKICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlIDxuZXQvdGNwLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC0yMjQ0LDEzICsyMjQ1LDEyIEBACiBzdGF0aWMgdm9pZCBmaXhfbWFjX2FkZHJlc3Moc3RydWN0IHMyaW9fbmljICpzcCkKIHsKIAlzdHJ1Y3QgWEVOQV9kZXZfY29uZmlnIF9faW9tZW0gKmJhcjAgPSBzcC0+YmFyMDsKLQl1NjQgdmFsNjQ7CiAJaW50IGkgPSAwOwogCiAJd2hpbGUgKGZpeF9tYWNbaV0gIT0gRU5EX1NJR04pIHsKIAkJd3JpdGVxKGZpeF9tYWNbaSsrXSwgJmJhcjAtPmdwaW9fY29udHJvbCk7CiAJCXVkZWxheSgxMCk7Ci0JCXZhbDY0ID0gcmVhZHEoJmJhcjAtPmdwaW9fY29udHJvbCk7CisJCSh2b2lkKSByZWFkcSgmYmFyMC0+Z3Bpb19jb250cm9sKTsKIAl9CiB9CiAKQEAgLTI3MjcsNyArMjcyNyw2IEBACiAJaW50IGo7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgUnhEX3QgKnJ4ZHA7Ci0Jc3RydWN0IGJ1ZmZBZGQgKmJhOwogCXN0cnVjdCBSeEQxICpyeGRwMTsKIAlzdHJ1Y3QgUnhEMyAqcnhkcDM7CiAJc3RydWN0IG1hY19pbmZvICptYWNfY29udHJvbCA9ICZzcC0+bWFjX2NvbnRyb2w7CkBAIC0yNzUxLDcgKzI3NTAsNiBAQAogCQkJbWVtc2V0KHJ4ZHAsIDAsIHNpemVvZihzdHJ1Y3QgUnhEMSkpOwogCQl9IGVsc2UgaWYgKHNwLT5yeGRfbW9kZSA9PSBSWERfTU9ERV8zQikgewogCQkJcnhkcDMgPSAoc3RydWN0IFJ4RDMgKilyeGRwOwotCQkJYmEgPSAmbWFjX2NvbnRyb2wtPnJpbmdzW3Jpbmdfbm9dLmJhW2Jsa11bal07CiAJCQlwY2lfdW5tYXBfc2luZ2xlKHNwLT5wZGV2LAogCQkJCQkgKGRtYV9hZGRyX3QpcnhkcDMtPkJ1ZmZlcjBfcHRyLAogCQkJCQkgQlVGMF9MRU4sCkBAIC01MzgzLDcgKzUzODEsNyBAQAogewogCXN0cnVjdCBzMmlvX25pYyAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwogCWlmICgoaW5mby0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgfHwKLQkgICAgKGluZm8tPnNwZWVkICE9IFNQRUVEXzEwMDAwKSB8fAorCSAgICAoZXRodG9vbF9jbWRfc3BlZWQoaW5mbykgIT0gU1BFRURfMTAwMDApIHx8CiAJICAgIChpbmZvLT5kdXBsZXggIT0gRFVQTEVYX0ZVTEwpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAllbHNlIHsKQEAgLTU0MTcsMTAgKzU0MTUsMTAgQEAKIAlpbmZvLT50cmFuc2NlaXZlciA9IFhDVlJfRVhURVJOQUw7CiAKIAlpZiAobmV0aWZfY2Fycmllcl9vayhzcC0+ZGV2KSkgewotCQlpbmZvLT5zcGVlZCA9IDEwMDAwOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoaW5mbywgU1BFRURfMTAwMDApOwogCQlpbmZvLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKIAl9IGVsc2UgewotCQlpbmZvLT5zcGVlZCA9IC0xOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoaW5mbywgLTEpOwogCQlpbmZvLT5kdXBsZXggPSAtMTsKIAl9CiAKQEAgLTU0ODQsODMgKzU0ODIsNzkgQEAKIAl9CiB9CiAKLS8qKgotICogIHMyaW9fcGh5X2lkICAtIHRpbWVyIGZ1bmN0aW9uIHRoYXQgYWx0ZXJuYXRlcyBhZGFwdGVyIExFRC4KLSAqICBAZGF0YSA6IGFkZHJlc3Mgb2YgdGhlIHByaXZhdGUgbWVtYmVyIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlLCB3aGljaAotICogIGlzIGEgcG9pbnRlciB0byB0aGUgczJpb19uaWMgc3RydWN0dXJlLCBwcm92aWRlZCBhcyBhbiB1MzIuCi0gKiBEZXNjcmlwdGlvbjogVGhpcyBpcyBhY3R1YWxseSB0aGUgdGltZXIgZnVuY3Rpb24gdGhhdCBhbHRlcm5hdGVzIHRoZQotICogYWRhcHRlciBMRUQgYml0IG9mIHRoZSBhZGFwdGVyIGNvbnRyb2wgYml0IHRvIHNldC9yZXNldCBldmVyeSB0aW1lIG9uCi0gKiBpbnZvY2F0aW9uLiBUaGUgdGltZXIgaXMgc2V0IGZvciAxLzIgYSBzZWNvbmQsIGhlbmNlIHRoYSBOSUMgYmxpbmtzCi0gKiAgb25jZSBldmVyeSBzZWNvbmQuCisvKgorICogIHMyaW9fc2V0X2xlZCAtIGNvbnRyb2wgTklDIGxlZAogICovCi1zdGF0aWMgdm9pZCBzMmlvX3BoeV9pZCh1bnNpZ25lZCBsb25nIGRhdGEpCitzdGF0aWMgdm9pZCBzMmlvX3NldF9sZWQoc3RydWN0IHMyaW9fbmljICpzcCwgYm9vbCBvbikKIHsKLQlzdHJ1Y3QgczJpb19uaWMgKnNwID0gKHN0cnVjdCBzMmlvX25pYyAqKWRhdGE7CiAJc3RydWN0IFhFTkFfZGV2X2NvbmZpZyBfX2lvbWVtICpiYXIwID0gc3AtPmJhcjA7Ci0JdTY0IHZhbDY0ID0gMDsKLQl1MTYgc3ViaWQ7CisJdTE2IHN1YmlkID0gc3AtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2U7CisJdTY0IHZhbDY0OwogCi0Jc3ViaWQgPSBzcC0+cGRldi0+c3Vic3lzdGVtX2RldmljZTsKIAlpZiAoKHNwLT5kZXZpY2VfdHlwZSA9PSBYRlJBTUVfSUlfREVWSUNFKSB8fAogCSAgICAoKHN1YmlkICYgMHhGRikgPj0gMHgwNykpIHsKIAkJdmFsNjQgPSByZWFkcSgmYmFyMC0+Z3Bpb19jb250cm9sKTsKLQkJdmFsNjQgXj0gR1BJT19DVFJMX0dQSU9fMDsKKwkJaWYgKG9uKQorCQkJdmFsNjQgfD0gR1BJT19DVFJMX0dQSU9fMDsKKwkJZWxzZQorCQkJdmFsNjQgJj0gfkdQSU9fQ1RSTF9HUElPXzA7CisKIAkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+Z3Bpb19jb250cm9sKTsKIAl9IGVsc2UgewogCQl2YWw2NCA9IHJlYWRxKCZiYXIwLT5hZGFwdGVyX2NvbnRyb2wpOwotCQl2YWw2NCBePSBBREFQVEVSX0xFRF9PTjsKKwkJaWYgKG9uKQorCQkJdmFsNjQgfD0gQURBUFRFUl9MRURfT047CisJCWVsc2UKKwkJCXZhbDY0ICY9IH5BREFQVEVSX0xFRF9PTjsKKwogCQl3cml0ZXEodmFsNjQsICZiYXIwLT5hZGFwdGVyX2NvbnRyb2wpOwogCX0KIAotCW1vZF90aW1lcigmc3AtPmlkX3RpbWVyLCBqaWZmaWVzICsgSFogLyAyKTsKIH0KIAogLyoqCi0gKiBzMmlvX2V0aHRvb2xfaWRuaWMgLSBUbyBwaHlzaWNhbGx5IGlkZW50aWZ5IHRoZSBuaWMgb24gdGhlIHN5c3RlbS4KLSAqIEBzcCA6IHByaXZhdGUgbWVtYmVyIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlLCB3aGljaCBpcyBhIHBvaW50ZXIgdG8gdGhlCi0gKiBzMmlvX25pYyBzdHJ1Y3R1cmUuCi0gKiBAaWQgOiBwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgd2l0aCBpZGVudGlmaWNhdGlvbiBwYXJhbWV0ZXJzIGdpdmVuIGJ5Ci0gKiBldGh0b29sLgorICogczJpb19ldGh0b29sX3NldF9sZWQgLSBUbyBwaHlzaWNhbGx5IGlkZW50aWZ5IHRoZSBuaWMgb24gdGhlIHN5c3RlbS4KKyAqIEBkZXYgOiBuZXR3b3JrIGRldmljZQorICogQHN0YXRlOiBsZWQgc2V0dGluZworICoKICAqIERlc2NyaXB0aW9uOiBVc2VkIHRvIHBoeXNpY2FsbHkgaWRlbnRpZnkgdGhlIE5JQyBvbiB0aGUgc3lzdGVtLgogICogVGhlIExpbmsgTEVEIHdpbGwgYmxpbmsgZm9yIGEgdGltZSBzcGVjaWZpZWQgYnkgdGhlIHVzZXIgZm9yCiAgKiBpZGVudGlmaWNhdGlvbi4KICAqIE5PVEU6IFRoZSBMaW5rIGhhcyB0byBiZSBVcCB0byBiZSBhYmxlIHRvIGJsaW5rIHRoZSBMRUQuIEhlbmNlCiAgKiBpZGVudGlmaWNhdGlvbiBpcyBwb3NzaWJsZSBvbmx5IGlmIGl0J3MgbGluayBpcyB1cC4KLSAqIFJldHVybiB2YWx1ZToKLSAqIGludCAsIHJldHVybnMgMCBvbiBzdWNjZXNzCiAgKi8KIAotc3RhdGljIGludCBzMmlvX2V0aHRvb2xfaWRuaWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCitzdGF0aWMgaW50IHMyaW9fZXRodG9vbF9zZXRfbGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJZW51bSBldGh0b29sX3BoeXNfaWRfc3RhdGUgc3RhdGUpCiB7Ci0JdTY0IHZhbDY0ID0gMCwgbGFzdF9ncGlvX2N0cmxfdmFsOwogCXN0cnVjdCBzMmlvX25pYyAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBYRU5BX2Rldl9jb25maWcgX19pb21lbSAqYmFyMCA9IHNwLT5iYXIwOwotCXUxNiBzdWJpZDsKKwl1MTYgc3ViaWQgPSBzcC0+cGRldi0+c3Vic3lzdGVtX2RldmljZTsKIAotCXN1YmlkID0gc3AtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2U7Ci0JbGFzdF9ncGlvX2N0cmxfdmFsID0gcmVhZHEoJmJhcjAtPmdwaW9fY29udHJvbCk7CiAJaWYgKChzcC0+ZGV2aWNlX3R5cGUgPT0gWEZSQU1FX0lfREVWSUNFKSAmJiAoKHN1YmlkICYgMHhGRikgPCAweDA3KSkgewotCQl2YWw2NCA9IHJlYWRxKCZiYXIwLT5hZGFwdGVyX2NvbnRyb2wpOworCQl1NjQgdmFsNjQgPSByZWFkcSgmYmFyMC0+YWRhcHRlcl9jb250cm9sKTsKIAkJaWYgKCEodmFsNjQgJiBBREFQVEVSX0NOVExfRU4pKSB7CiAJCQlwcl9lcnIoIkFkYXB0ZXIgTGluayBkb3duLCBjYW5ub3QgYmxpbmsgTEVEXG4iKTsKLQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIC1FQUdBSU47CiAJCX0KIAl9Ci0JaWYgKHNwLT5pZF90aW1lci5mdW5jdGlvbiA9PSBOVUxMKSB7Ci0JCWluaXRfdGltZXIoJnNwLT5pZF90aW1lcik7Ci0JCXNwLT5pZF90aW1lci5mdW5jdGlvbiA9IHMyaW9fcGh5X2lkOwotCQlzcC0+aWRfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXNwOwotCX0KLQltb2RfdGltZXIoJnNwLT5pZF90aW1lciwgamlmZmllcyk7Ci0JaWYgKGRhdGEpCi0JCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKGRhdGEgKiBIWik7Ci0JZWxzZQotCQltc2xlZXBfaW50ZXJydXB0aWJsZShNQVhfRkxJQ0tFUl9USU1FKTsKLQlkZWxfdGltZXJfc3luYygmc3AtPmlkX3RpbWVyKTsKIAotCWlmIChDQVJEU19XSVRIX0ZBVUxUWV9MSU5LX0lORElDQVRPUlMoc3AtPmRldmljZV90eXBlLCBzdWJpZCkpIHsKLQkJd3JpdGVxKGxhc3RfZ3Bpb19jdHJsX3ZhbCwgJmJhcjAtPmdwaW9fY29udHJvbCk7Ci0JCWxhc3RfZ3Bpb19jdHJsX3ZhbCA9IHJlYWRxKCZiYXIwLT5ncGlvX2NvbnRyb2wpOworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIEVUSFRPT0xfSURfQUNUSVZFOgorCQlzcC0+YWRhcHRfY3RybF9vcmcgPSByZWFkcSgmYmFyMC0+Z3Bpb19jb250cm9sKTsKKwkJcmV0dXJuIDE7CS8qIGN5Y2xlIG9uL29mZiBvbmNlIHBlciBzZWNvbmQgKi8KKworCWNhc2UgRVRIVE9PTF9JRF9PTjoKKwkJczJpb19zZXRfbGVkKHNwLCB0cnVlKTsKKwkJYnJlYWs7CisKKwljYXNlIEVUSFRPT0xfSURfT0ZGOgorCQlzMmlvX3NldF9sZWQoc3AsIGZhbHNlKTsKKwkJYnJlYWs7CisKKwljYXNlIEVUSFRPT0xfSURfSU5BQ1RJVkU6CisJCWlmIChDQVJEU19XSVRIX0ZBVUxUWV9MSU5LX0lORElDQVRPUlMoc3AtPmRldmljZV90eXBlLCBzdWJpZCkpCisJCQl3cml0ZXEoc3AtPmFkYXB0X2N0cmxfb3JnLCAmYmFyMC0+Z3Bpb19jb250cm9sKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTY2MjUsMjUgKzY2MTksNiBAQAogfQogCiAKLXN0YXRpYyB1MzIgczJpb19ldGh0b29sX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHMyaW9fbmljICpzcCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlyZXR1cm4gc3AtPnJ4X2NzdW07Ci19Ci0KLXN0YXRpYyBpbnQgczJpb19ldGh0b29sX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCBzMmlvX25pYyAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKGRhdGEpCi0JCXNwLT5yeF9jc3VtID0gMTsKLQllbHNlCi0JCXNwLT5yeF9jc3VtID0gMDsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHMyaW9fZ2V0X2VlcHJvbV9sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gWEVOQV9FRVBST01fU1BBQ0U7CkBAIC02Njk1LDYxICs2NjcwLDI3IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHMyaW9fZXRodG9vbF9vcF9zZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlpZiAoZGF0YSkKLQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU07Ci0JZWxzZQotCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0lQX0NTVU07Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHUzMiBzMmlvX2V0aHRvb2xfb3BfZ2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXJldHVybiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfVFNPKSAhPSAwOwotfQotCi1zdGF0aWMgaW50IHMyaW9fZXRodG9vbF9vcF9zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCWlmIChkYXRhKQotCQlkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNik7Ci0JZWxzZQotCQlkZXYtPmZlYXR1cmVzICY9IH4oTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgczJpb19ldGh0b29sX3NldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3N0YXRpYyBpbnQgczJpb19zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZlYXR1cmVzKQogewogCXN0cnVjdCBzMmlvX25pYyAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCByYyA9IDA7Ci0JaW50IGNoYW5nZWQgPSAwOwotCi0JaWYgKGV0aHRvb2xfaW52YWxpZF9mbGFncyhkZXYsIGRhdGEsIEVUSF9GTEFHX0xSTykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGRhdGEgJiBFVEhfRkxBR19MUk8pIHsKLQkJaWYgKCEoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPKSkgewotCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xSTzsKLQkJCWNoYW5nZWQgPSAxOwotCQl9Ci0JfSBlbHNlIGlmIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MUk8pIHsKLQkJZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9MUk87Ci0JCWNoYW5nZWQgPSAxOwotCX0KKwl1MzIgY2hhbmdlZCA9IChmZWF0dXJlcyBeIGRldi0+ZmVhdHVyZXMpICYgTkVUSUZfRl9MUk87CiAKIAlpZiAoY2hhbmdlZCAmJiBuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJaW50IHJjOworCiAJCXMyaW9fc3RvcF9hbGxfdHhfcXVldWUoc3ApOwogCQlzMmlvX2NhcmRfZG93bihzcCk7CisJCWRldi0+ZmVhdHVyZXMgPSBmZWF0dXJlczsKIAkJcmMgPSBzMmlvX2NhcmRfdXAoc3ApOwogCQlpZiAocmMpCiAJCQlzMmlvX3Jlc2V0KHNwKTsKIAkJZWxzZQogCQkJczJpb19zdGFydF9hbGxfdHhfcXVldWUoc3ApOworCisJCXJldHVybiByYyA/IHJjIDogMTsKIAl9CiAKLQlyZXR1cm4gcmM7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzID0gewpAQCAtNjc2NSwxOCArNjcwNiw5IEBACiAJLmdldF9yaW5ncGFyYW0gPSBzMmlvX2V0aHRvb2xfZ3JpbmdwYXJhbSwKIAkuZ2V0X3BhdXNlcGFyYW0gPSBzMmlvX2V0aHRvb2xfZ2V0cGF1c2VfZGF0YSwKIAkuc2V0X3BhdXNlcGFyYW0gPSBzMmlvX2V0aHRvb2xfc2V0cGF1c2VfZGF0YSwKLQkuZ2V0X3J4X2NzdW0gPSBzMmlvX2V0aHRvb2xfZ2V0X3J4X2NzdW0sCi0JLnNldF9yeF9jc3VtID0gczJpb19ldGh0b29sX3NldF9yeF9jc3VtLAotCS5zZXRfdHhfY3N1bSA9IHMyaW9fZXRodG9vbF9vcF9zZXRfdHhfY3N1bSwKLQkuc2V0X2ZsYWdzID0gczJpb19ldGh0b29sX3NldF9mbGFncywKLQkuZ2V0X2ZsYWdzID0gZXRodG9vbF9vcF9nZXRfZmxhZ3MsCi0JLnNldF9zZyA9IGV0aHRvb2xfb3Bfc2V0X3NnLAotCS5nZXRfdHNvID0gczJpb19ldGh0b29sX29wX2dldF90c28sCi0JLnNldF90c28gPSBzMmlvX2V0aHRvb2xfb3Bfc2V0X3RzbywKLQkuc2V0X3VmbyA9IGV0aHRvb2xfb3Bfc2V0X3VmbywKIAkuc2VsZl90ZXN0ID0gczJpb19ldGh0b29sX3Rlc3QsCiAJLmdldF9zdHJpbmdzID0gczJpb19ldGh0b29sX2dldF9zdHJpbmdzLAotCS5waHlzX2lkID0gczJpb19ldGh0b29sX2lkbmljLAorCS5zZXRfcGh5c19pZCA9IHMyaW9fZXRodG9vbF9zZXRfbGVkLAogCS5nZXRfZXRodG9vbF9zdGF0cyA9IHMyaW9fZ2V0X2V0aHRvb2xfc3RhdHMsCiAJLmdldF9zc2V0X2NvdW50ID0gczJpb19nZXRfc3NldF9jb3VudCwKIH07CkBAIC03MjMxLDcgKzcxNjMsNyBAQAogCQkvKiBBcyBwZXIgdGhlIEhXIHJlcXVpcmVtZW50IHdlIG5lZWQgdG8gcmVwbGVuaXNoIHRoZQogCQkgKiByZWNlaXZlIGJ1ZmZlciB0byBhdm9pZCB0aGUgcmluZyBidW1wLiBTaW5jZSB0aGVyZSBpcwogCQkgKiBubyBpbnRlbnRpb24gb2YgcHJvY2Vzc2luZyB0aGUgUnggZnJhbWUgYXQgdGhpcyBwb2ludHdlIGFyZQotCQkgKiBqdXN0IHNldHR0aW5nIHRoZSBvd25lcnNoaXAgYml0IG9mIHJ4ZCBpbiBFYWNoIFJ4CisJCSAqIGp1c3Qgc2V0dGluZyB0aGUgb3duZXJzaGlwIGJpdCBvZiByeGQgaW4gRWFjaCBSeAogCQkgKiByaW5nIHRvIEhXIGFuZCBzZXQgdGhlIGFwcHJvcHJpYXRlIGJ1ZmZlciBzaXplCiAJCSAqIGJhc2VkIG9uIHRoZSByaW5nIG1vZGUKIAkJICovCkBAIC03NTQ1LDcgKzc0NzcsNyBAQAogCWlmICgocnhkcC0+Q29udHJvbF8xICYgVENQX09SX1VEUF9GUkFNRSkgJiYKIAkgICAgKCghcmluZ19kYXRhLT5scm8pIHx8CiAJICAgICAocmluZ19kYXRhLT5scm8gJiYgKCEocnhkcC0+Q29udHJvbF8xICYgUlhEX0ZSQU1FX0lQX0ZSQUcpKSkpICYmCi0JICAgIChzcC0+cnhfY3N1bSkpIHsKKwkgICAgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkpIHsKIAkJbDNfY3N1bSA9IFJYRF9HRVRfTDNfQ0tTVU0ocnhkcC0+Q29udHJvbF8xKTsKIAkJbDRfY3N1bSA9IFJYRF9HRVRfTDRfQ0tTVU0ocnhkcC0+Q29udHJvbF8xKTsKIAkJaWYgKChsM19jc3VtID09IEwzX0NLU1VNX09LKSAmJiAobDRfY3N1bSA9PSBMNF9DS1NVTV9PSykpIHsKQEAgLTc4MDYsNiArNzczOCw3IEBACiAJLm5kb19kb19pb2N0bAkgICAJPSBzMmlvX2lvY3RsLAogCS5uZG9fc2V0X21hY19hZGRyZXNzICAgID0gczJpb19zZXRfbWFjX2FkZHIsCiAJLm5kb19jaGFuZ2VfbXR1CSAgIAk9IHMyaW9fY2hhbmdlX210dSwKKwkubmRvX3NldF9mZWF0dXJlcwk9IHMyaW9fc2V0X2ZlYXR1cmVzLAogCS5uZG9fdmxhbl9yeF9yZWdpc3RlciAgID0gczJpb192bGFuX3J4X3JlZ2lzdGVyLAogCS5uZG9fdmxhbl9yeF9raWxsX3ZpZCAgID0gczJpb192bGFuX3J4X2tpbGxfdmlkLAogCS5uZG9fdHhfdGltZW91dAkgICAJPSBzMmlvX3R4X3dhdGNoZG9nLApAQCAtODA0NywxNyArNzk4MCwxOCBAQAogCS8qICBEcml2ZXIgZW50cnkgcG9pbnRzICovCiAJZGV2LT5uZXRkZXZfb3BzID0gJnMyaW9fbmV0ZGV2X29wczsKIAlTRVRfRVRIVE9PTF9PUFMoZGV2LCAmbmV0ZGV2X2V0aHRvb2xfb3BzKTsKLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWDsKLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOwotCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTTsKKwlkZXYtPmh3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8CisJCU5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082IHwKKwkJTkVUSUZfRl9SWENTVU0gfCBORVRJRl9GX0xSTzsKKwlkZXYtPmZlYXR1cmVzIHw9IGRldi0+aHdfZmVhdHVyZXMgfAorCQlORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlg7CisJaWYgKHNwLT5kZXZpY2VfdHlwZSAmIFhGUkFNRV9JSV9ERVZJQ0UpIHsKKwkJZGV2LT5od19mZWF0dXJlcyB8PSBORVRJRl9GX1VGTzsKKwkJaWYgKHVmbykKKwkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9VRk87CisJfQogCWlmIChzcC0+aGlnaF9kbWFfZmxhZyA9PSB0cnVlKQogCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwotCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwotCWlmICgoc3AtPmRldmljZV90eXBlICYgWEZSQU1FX0lJX0RFVklDRSkgJiYgKHVmbykpICB7Ci0JCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9VRk87Ci0JCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNOwotCX0KIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gV0FUQ0hfRE9HX1RJTUVPVVQ7CiAJSU5JVF9XT1JLKCZzcC0+cnN0X3RpbWVyX3Rhc2ssIHMyaW9fcmVzdGFydF9uaWMpOwogCUlOSVRfV09SSygmc3AtPnNldF9saW5rX3Rhc2ssIHMyaW9fc2V0X2xpbmspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvczJpby5oIGIvZHJpdmVycy9uZXQvczJpby5oCmluZGV4IDJkMTQ0OTcuLjgwMGIzYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3MyaW8uaAorKysgYi9kcml2ZXJzL25ldC9zMmlvLmgKQEAgLTg5Myw5ICs4OTMsNiBAQAogCXUxNiBhbGxfbXVsdGlfcG9zOwogCXUxNiBwcm9taXNjX2ZsZzsKIAotCS8qICBJZCB0aW1lciwgdXNlZCB0byBibGluayBOSUMgdG8gcGh5c2ljYWxseSBpZGVudGlmeSBOSUMuICovCi0Jc3RydWN0IHRpbWVyX2xpc3QgaWRfdGltZXI7Ci0KIAkvKiAgUmVzdGFydCB0aW1lciwgdXNlZCB0byByZXN0YXJ0IE5JQyBpZiB0aGUgZGV2aWNlIGlzIHN0dWNrIGFuZAogCSAqICBhIHNjaGVkdWxlIHRhc2sgdGhhdCB3aWxsIHNldCB0aGUgY29ycmVjdCBMaW5rIHN0YXRlIG9uY2UgdGhlCiAJICogIE5JQydzIFBIWSBoYXMgc3RhYmlsaXplZCBhZnRlciBhIHN0YXRlIGNoYW5nZS4KQEAgLTEwMDUsMTggKzEwMDIsMTYgQEAKICNkZWZpbmUgTEYJMgogc3RhdGljIGlubGluZSB2b2lkIFNQRUNJQUxfUkVHX1dSSVRFKHU2NCB2YWwsIHZvaWQgX19pb21lbSAqYWRkciwgaW50IG9yZGVyKQogewotCXUzMiByZXQ7Ci0KIAlpZiAob3JkZXIgPT0gTEYpIHsKIAkJd3JpdGVsKCh1MzIpICh2YWwpLCBhZGRyKTsKLQkJcmV0ID0gcmVhZGwoYWRkcik7CisJCSh2b2lkKSByZWFkbChhZGRyKTsKIAkJd3JpdGVsKCh1MzIpICh2YWwgPj4gMzIpLCAoYWRkciArIDQpKTsKLQkJcmV0ID0gcmVhZGwoYWRkciArIDQpOworCQkodm9pZCkgcmVhZGwoYWRkciArIDQpOwogCX0gZWxzZSB7CiAJCXdyaXRlbCgodTMyKSAodmFsID4+IDMyKSwgKGFkZHIgKyA0KSk7Ci0JCXJldCA9IHJlYWRsKGFkZHIgKyA0KTsKKwkJKHZvaWQpIHJlYWRsKGFkZHIgKyA0KTsKIAkJd3JpdGVsKCh1MzIpICh2YWwpLCBhZGRyKTsKLQkJcmV0ID0gcmVhZGwoYWRkcik7CisJCSh2b2lkKSByZWFkbChhZGRyKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NiMTI1MC1tYWMuYyBiL2RyaXZlcnMvbmV0L3NiMTI1MC1tYWMuYwppbmRleCBkOTZkMmY3Li42OGQ1MDQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zYjEyNTAtbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvc2IxMjUwLW1hYy5jCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bGludXgvcGh5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2M5MjAzMS5jIGIvZHJpdmVycy9uZXQvc2M5MjAzMS5jCmluZGV4IDc2MjkwYTguLmZhNzQzMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NjOTIwMzEuYworKysgYi9kcml2ZXJzL25ldC9zYzkyMDMxLmMKQEAgLTExNzMsNyArMTE3Myw4IEBACiAJaWYgKHBoeV9jdHJsICYgUGh5Q3RybEFuZSkKIAkJY21kLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEX0F1dG9uZWc7CiAKLQljbWQtPnNwZWVkID0gKG91dHB1dF9zdGF0dXMgJiAweDIpID8gU1BFRURfMTAwIDogU1BFRURfMTA7CisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwKKwkJCSAgICAgIChvdXRwdXRfc3RhdHVzICYgMHgyKSA/IFNQRUVEXzEwMCA6IFNQRUVEXzEwKTsKIAljbWQtPmR1cGxleCA9IChvdXRwdXRfc3RhdHVzICYgMHg0KSA/IERVUExFWF9GVUxMIDogRFVQTEVYX0hBTEY7CiAJY21kLT5wb3J0ID0gUE9SVF9NSUk7CiAJY21kLT5waHlfYWRkcmVzcyA9IHBoeV9hZGRyZXNzOwpAQCAtMTE4OCwxMCArMTE4OSwxMSBAQAogewogCXN0cnVjdCBzYzkyMDMxX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvaWQgX19pb21lbSAqcG9ydF9iYXNlID0gcHJpdi0+cG9ydF9iYXNlOworCXUzMiBzcGVlZCA9IGV0aHRvb2xfY21kX3NwZWVkKGNtZCk7CiAJdTMyIHBoeV9jdHJsOwogCXUzMiBvbGRfcGh5X2N0cmw7CiAKLQlpZiAoIShjbWQtPnNwZWVkID09IFNQRUVEXzEwIHx8IGNtZC0+c3BlZWQgPT0gU1BFRURfMTAwKSkKKwlpZiAoIShzcGVlZCA9PSBTUEVFRF8xMCB8fCBzcGVlZCA9PSBTUEVFRF8xMDApKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoIShjbWQtPmR1cGxleCA9PSBEVVBMRVhfSEFMRiB8fCBjbWQtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTIyOSw3ICsxMjMxLDcgQEAKIAkJLy8gRklYTUU6IFdob2xlIGJyYW5jaCBndWVzc2VkCiAJCXBoeV9jdHJsID0gMDsKIAotCQlpZiAoY21kLT5zcGVlZCA9PSBTUEVFRF8xMCkKKwkJaWYgKHNwZWVkID09IFNQRUVEXzEwKQogCQkJcGh5X2N0cmwgfD0gUGh5Q3RybFNwZDEwOwogCQllbHNlIC8qIGNtZC0+c3BlZWQgPT0gU1BFRURfMTAwICovCiAJCQlwaHlfY3RybCB8PSBQaHlDdHJsU3BkMTAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2VmeC5jIGIvZHJpdmVycy9uZXQvc2ZjL2VmeC5jCmluZGV4IGEzYzJhYWIuLmM5MTQ3MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9lZnguYworKysgYi9kcml2ZXJzL25ldC9zZmMvZWZ4LmMKQEAgLTc5OCwxMSArNzk4LDYgQEAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoZWZ4LT5uZXRfZGV2KSkKIAkJcmV0dXJuOwogCi0JaWYgKGVmeC0+cG9ydF9pbmhpYml0ZWQpIHsKLQkJbmV0aWZfY2Fycmllcl9vZmYoZWZ4LT5uZXRfZGV2KTsKLQkJcmV0dXJuOwotCX0KLQogCWlmIChsaW5rX3N0YXRlLT51cCAhPSBuZXRpZl9jYXJyaWVyX29rKGVmeC0+bmV0X2RldikpIHsKIAkJZWZ4LT5uX2xpbmtfc3RhdGVfY2hhbmdlcysrOwogCkBAIC04MzgsNyArODMzLDcgQEAKIAl9CiB9CiAKLXZvaWQgZWZ4X2xpbmtfc2V0X3dhbnRlZF9mYyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBlbnVtIGVmeF9mY190eXBlIHdhbnRlZF9mYykKK3ZvaWQgZWZ4X2xpbmtfc2V0X3dhbnRlZF9mYyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCB1OCB3YW50ZWRfZmMpCiB7CiAJZWZ4LT53YW50ZWRfZmMgPSB3YW50ZWRfZmM7CiAJaWYgKGVmeC0+bGlua19hZHZlcnRpc2luZykgewpAQCAtMTMxOSw4ICsxMzE0LDIwIEBACiAKIHN0YXRpYyB2b2lkIGVmeF9zZXRfY2hhbm5lbHMoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKKwlzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWw7CisJc3RydWN0IGVmeF90eF9xdWV1ZSAqdHhfcXVldWU7CisKIAllZngtPnR4X2NoYW5uZWxfb2Zmc2V0ID0KIAkJc2VwYXJhdGVfdHhfY2hhbm5lbHMgPyBlZngtPm5fY2hhbm5lbHMgLSBlZngtPm5fdHhfY2hhbm5lbHMgOiAwOworCisJLyogV2UgbmVlZCB0byBhZGp1c3QgdGhlIFRYIHF1ZXVlIG51bWJlcnMgaWYgd2UgaGF2ZSBzZXBhcmF0ZQorCSAqIFJYLW9ubHkgYW5kIFRYLW9ubHkgY2hhbm5lbHMuCisJICovCisJZWZ4X2Zvcl9lYWNoX2NoYW5uZWwoY2hhbm5lbCwgZWZ4KSB7CisJCWVmeF9mb3JfZWFjaF9jaGFubmVsX3R4X3F1ZXVlKHR4X3F1ZXVlLCBjaGFubmVsKQorCQkJdHhfcXVldWUtPnF1ZXVlIC09IChlZngtPnR4X2NoYW5uZWxfb2Zmc2V0ICoKKwkJCQkJICAgIEVGWF9UWFFfVFlQRVMpOworCX0KIH0KIAogc3RhdGljIGludCBlZnhfcHJvYmVfbmljKHN0cnVjdCBlZnhfbmljICplZngpCkBAIC0xNDM4LDcgKzE0NDUsNyBAQAogCSAqIHJlc3RhcnQgdGhlIHRyYW5zbWl0IGludGVyZmFjZSBlYXJseSBzbyB0aGUgd2F0Y2hkb2cgdGltZXIgc3RvcHMgKi8KIAllZnhfc3RhcnRfcG9ydChlZngpOwogCi0JaWYgKGVmeF9kZXZfcmVnaXN0ZXJlZChlZngpICYmICFlZngtPnBvcnRfaW5oaWJpdGVkKQorCWlmIChlZnhfZGV2X3JlZ2lzdGVyZWQoZWZ4KSAmJiBuZXRpZl9kZXZpY2VfcHJlc2VudChlZngtPm5ldF9kZXYpKQogCQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMoZWZ4LT5uZXRfZGV2KTsKIAogCWVmeF9mb3JfZWFjaF9jaGFubmVsKGNoYW5uZWwsIGVmeCkKQEAgLTE4NzYsNiArMTg4MywxNyBAQAogCS8qIE90aGVyd2lzZSBlZnhfc3RhcnRfcG9ydCgpIHdpbGwgZG8gdGhpcyAqLwogfQogCitzdGF0aWMgaW50IGVmeF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsIHUzMiBkYXRhKQoreworCXN0cnVjdCBlZnhfbmljICplZnggPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKKworCS8qIElmIGRpc2FibGluZyBSWCBuLXR1cGxlIGZpbHRlcmluZywgY2xlYXIgZXhpc3RpbmcgZmlsdGVycyAqLworCWlmIChuZXRfZGV2LT5mZWF0dXJlcyAmIH5kYXRhICYgTkVUSUZfRl9OVFVQTEUpCisJCWVmeF9maWx0ZXJfY2xlYXJfcngoZWZ4LCBFRlhfRklMVEVSX1BSSV9NQU5VQUwpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZWZ4X25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuCQk9IGVmeF9uZXRfb3BlbiwKIAkubmRvX3N0b3AJCT0gZWZ4X25ldF9zdG9wLApAQCAtMTg4Nyw2ICsxOTA1LDcgQEAKIAkubmRvX2NoYW5nZV9tdHUJCT0gZWZ4X2NoYW5nZV9tdHUsCiAJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBlZnhfc2V0X21hY19hZGRyZXNzLAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gZWZ4X3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3NldF9mZWF0dXJlcwk9IGVmeF9zZXRfZmVhdHVyZXMsCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIAkubmRvX3BvbGxfY29udHJvbGxlciA9IGVmeF9uZXRwb2xsLAogI2VuZGlmCkBAIC0yMDkwLDYgKzIxMDksNyBAQAogCW5ldGlmX2luZm8oZWZ4LCBkcnYsIGVmeC0+bmV0X2RldiwgInJlc2V0dGluZyAoJXMpXG4iLAogCQkgICBSRVNFVF9UWVBFKG1ldGhvZCkpOwogCisJbmV0aWZfZGV2aWNlX2RldGFjaChlZngtPm5ldF9kZXYpOwogCWVmeF9yZXNldF9kb3duKGVmeCwgbWV0aG9kKTsKIAogCXJjID0gZWZ4LT50eXBlLT5yZXNldChlZngsIG1ldGhvZCk7CkBAIC0yMTIzLDYgKzIxNDMsNyBAQAogCQllZngtPnN0YXRlID0gU1RBVEVfRElTQUJMRUQ7CiAJfSBlbHNlIHsKIAkJbmV0aWZfZGJnKGVmeCwgZHJ2LCBlZngtPm5ldF9kZXYsICJyZXNldCBjb21wbGV0ZVxuIik7CisJCW5ldGlmX2RldmljZV9hdHRhY2goZWZ4LT5uZXRfZGV2KTsKIAl9CiAJcmV0dXJuIHJjOwogfQpAQCAtMjIzNSw3ICsyMjU2LDcgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZWZ4X3BoeV9vcGVyYXRpb25zIGVmeF9kdW1teV9waHlfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZWZ4X3BoeV9vcGVyYXRpb25zIGVmeF9kdW1teV9waHlfb3BlcmF0aW9ucyA9IHsKIAkuaW5pdAkJID0gZWZ4X3BvcnRfZHVtbXlfb3BfaW50LAogCS5yZWNvbmZpZ3VyZQkgPSBlZnhfcG9ydF9kdW1teV9vcF9pbnQsCiAJLnBvbGwJCSA9IGVmeF9wb3J0X2R1bW15X29wX3BvbGwsCkBAIC0yMjUxLDcgKzIyNzIsNyBAQAogLyogVGhpcyB6ZXJvZXMgb3V0IGFuZCB0aGVuIGZpbGxzIGluIHRoZSBpbnZhcmlhbnRzIGluIGEgc3RydWN0CiAgKiBlZnhfbmljIChpbmNsdWRpbmcgYWxsIHN1Yi1zdHJ1Y3R1cmVzKS4KICAqLwotc3RhdGljIGludCBlZnhfaW5pdF9zdHJ1Y3Qoc3RydWN0IGVmeF9uaWMgKmVmeCwgc3RydWN0IGVmeF9uaWNfdHlwZSAqdHlwZSwKK3N0YXRpYyBpbnQgZWZ4X2luaXRfc3RydWN0KHN0cnVjdCBlZnhfbmljICplZngsIGNvbnN0IHN0cnVjdCBlZnhfbmljX3R5cGUgKnR5cGUsCiAJCQkgICBzdHJ1Y3QgcGNpX2RldiAqcGNpX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCiB7CiAJaW50IGk7CkBAIC0yMjcxLDcgKzIyOTIsNiBAQAogCXN0cmxjcHkoZWZ4LT5uYW1lLCBwY2lfbmFtZShwY2lfZGV2KSwgc2l6ZW9mKGVmeC0+bmFtZSkpOwogCiAJZWZ4LT5uZXRfZGV2ID0gbmV0X2RldjsKLQllZngtPnJ4X2NoZWNrc3VtX2VuYWJsZWQgPSB0cnVlOwogCXNwaW5fbG9ja19pbml0KCZlZngtPnN0YXRzX2xvY2spOwogCW11dGV4X2luaXQoJmVmeC0+bWFjX2xvY2spOwogCWVmeC0+bWFjX29wID0gdHlwZS0+ZGVmYXVsdF9tYWNfb3BzOwpAQCAtMjQ0Miw3ICsyNDYyLDcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGVmeF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsCiAJCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudHJ5KQogewotCXN0cnVjdCBlZnhfbmljX3R5cGUgKnR5cGUgPSAoc3RydWN0IGVmeF9uaWNfdHlwZSAqKSBlbnRyeS0+ZHJpdmVyX2RhdGE7CisJY29uc3Qgc3RydWN0IGVmeF9uaWNfdHlwZSAqdHlwZSA9IChjb25zdCBzdHJ1Y3QgZWZ4X25pY190eXBlICopIGVudHJ5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldjsKIAlzdHJ1Y3QgZWZ4X25pYyAqZWZ4OwogCWludCBpLCByYzsKQEAgLTI0NTQsMTIgKzI0NzQsMTUgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJbmV0X2Rldi0+ZmVhdHVyZXMgfD0gKHR5cGUtPm9mZmxvYWRfZmVhdHVyZXMgfCBORVRJRl9GX1NHIHwKIAkJCSAgICAgIE5FVElGX0ZfSElHSERNQSB8IE5FVElGX0ZfVFNPIHwKLQkJCSAgICAgIE5FVElGX0ZfR1JPKTsKKwkJCSAgICAgIE5FVElGX0ZfUlhDU1VNKTsKIAlpZiAodHlwZS0+b2ZmbG9hZF9mZWF0dXJlcyAmIE5FVElGX0ZfVjZfQ1NVTSkKIAkJbmV0X2Rldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwogCS8qIE1hc2sgZm9yIGZlYXR1cmVzIHRoYXQgYWxzbyBhcHBseSB0byBWTEFOIGRldmljZXMgKi8KIAluZXRfZGV2LT52bGFuX2ZlYXR1cmVzIHw9IChORVRJRl9GX0FMTF9DU1VNIHwgTkVUSUZfRl9TRyB8Ci0JCQkJICAgTkVUSUZfRl9ISUdIRE1BIHwgTkVUSUZfRl9UU08pOworCQkJCSAgIE5FVElGX0ZfSElHSERNQSB8IE5FVElGX0ZfQUxMX1RTTyB8CisJCQkJICAgTkVUSUZfRl9SWENTVU0pOworCS8qIEFsbCBvZmZsb2FkcyBjYW4gYmUgdG9nZ2xlZCAqLworCW5ldF9kZXYtPmh3X2ZlYXR1cmVzID0gbmV0X2Rldi0+ZmVhdHVyZXMgJiB+TkVUSUZfRl9ISUdIRE1BOwogCWVmeCA9IG5ldGRldl9wcml2KG5ldF9kZXYpOwogCXBjaV9zZXRfZHJ2ZGF0YShwY2lfZGV2LCBlZngpOwogCVNFVF9ORVRERVZfREVWKG5ldF9kZXYsICZwY2lfZGV2LT5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2VmeC5oIGIvZHJpdmVycy9uZXQvc2ZjL2VmeC5oCmluZGV4IDNkODNhMWYuLmIwZDEyMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9lZnguaAorKysgYi9kcml2ZXJzL25ldC9zZmMvZWZ4LmgKQEAgLTE0Miw2ICsxNDIsNiBAQAogCiBleHRlcm4gdm9pZCBlZnhfbGlua19zdGF0dXNfY2hhbmdlZChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKIGV4dGVybiB2b2lkIGVmeF9saW5rX3NldF9hZHZlcnRpc2luZyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCB1MzIpOwotZXh0ZXJuIHZvaWQgZWZ4X2xpbmtfc2V0X3dhbnRlZF9mYyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBlbnVtIGVmeF9mY190eXBlKTsKK2V4dGVybiB2b2lkIGVmeF9saW5rX3NldF93YW50ZWRfZmMoc3RydWN0IGVmeF9uaWMgKmVmeCwgdTgpOwogCiAjZW5kaWYgLyogRUZYX0VGWF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvc2ZjL2V0aHRvb2wuYwppbmRleCA4MDcxNzhlLi5kMjI5MDI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9ldGh0b29sLmMKQEAgLTE3OCwxOSArMTc4LDI3IEBACiAgKi8KIAogLyogSWRlbnRpZnkgZGV2aWNlIGJ5IGZsYXNoaW5nIExFRHMgKi8KLXN0YXRpYyBpbnQgZWZ4X2V0aHRvb2xfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwgdTMyIGNvdW50KQorc3RhdGljIGludCBlZnhfZXRodG9vbF9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAorCQkJICAgICAgIGVudW0gZXRodG9vbF9waHlzX2lkX3N0YXRlIHN0YXRlKQogewogCXN0cnVjdCBlZnhfbmljICplZnggPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKKwllbnVtIGVmeF9sZWRfbW9kZSBtb2RlID0gRUZYX0xFRF9ERUZBVUxUOwogCi0JZG8gewotCQllZngtPnR5cGUtPnNldF9pZF9sZWQoZWZ4LCBFRlhfTEVEX09OKTsKLQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKEhaIC8gMik7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgRVRIVE9PTF9JRF9PTjoKKwkJbW9kZSA9IEVGWF9MRURfT047CisJCWJyZWFrOworCWNhc2UgRVRIVE9PTF9JRF9PRkY6CisJCW1vZGUgPSBFRlhfTEVEX09GRjsKKwkJYnJlYWs7CisJY2FzZSBFVEhUT09MX0lEX0lOQUNUSVZFOgorCQltb2RlID0gRUZYX0xFRF9ERUZBVUxUOworCQlicmVhazsKKwljYXNlIEVUSFRPT0xfSURfQUNUSVZFOgorCQlyZXR1cm4gMTsJLyogY3ljbGUgb24vb2ZmIG9uY2UgcGVyIHNlY29uZCAqLworCX0KIAotCQllZngtPnR5cGUtPnNldF9pZF9sZWQoZWZ4LCBFRlhfTEVEX09GRik7Ci0JCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShIWiAvIDIpOwotCX0gd2hpbGUgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSAmJiAtLWNvdW50ICE9IDApOwotCi0JZWZ4LT50eXBlLT5zZXRfaWRfbGVkKGVmeCwgRUZYX0xFRF9ERUZBVUxUKTsKKwllZngtPnR5cGUtPnNldF9pZF9sZWQoZWZ4LCBtb2RlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjExLDcgKzIxOSw3IEBACiAJZWNtZC0+c3VwcG9ydGVkIHw9IFNVUFBPUlRFRF9QYXVzZSB8IFNVUFBPUlRFRF9Bc3ltX1BhdXNlOwogCiAJaWYgKExPT1BCQUNLX0lOVEVSTkFMKGVmeCkpIHsKLQkJZWNtZC0+c3BlZWQgPSBsaW5rX3N0YXRlLT5zcGVlZDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIGxpbmtfc3RhdGUtPnNwZWVkKTsKIAkJZWNtZC0+ZHVwbGV4ID0gbGlua19zdGF0ZS0+ZmQgPyBEVVBMRVhfRlVMTCA6IERVUExFWF9IQUxGOwogCX0KIApAQCAtMjI2LDcgKzIzNCw4IEBACiAJaW50IHJjOwogCiAJLyogR01BQyBkb2VzIG5vdCBzdXBwb3J0IDEwMDBNYnBzIEhEICovCi0JaWYgKGVjbWQtPnNwZWVkID09IFNQRUVEXzEwMDAgJiYgZWNtZC0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKSB7CisJaWYgKChldGh0b29sX2NtZF9zcGVlZChlY21kKSA9PSBTUEVFRF8xMDAwKSAmJgorCSAgICAoZWNtZC0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKSkgewogCQluZXRpZl9kYmcoZWZ4LCBkcnYsIGVmeC0+bmV0X2RldiwKIAkJCSAgInJlamVjdGluZyB1bnN1cHBvcnRlZCAxMDAwTWJwcyBIRCBzZXR0aW5nXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC01MTgsNzIgKzUyNyw2IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGVmeF9ldGh0b29sX3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsIHUzMiBlbmFibGUpCi17Ci0Jc3RydWN0IGVmeF9uaWMgKmVmeCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkgPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKLQl1MzIgZmVhdHVyZXM7Ci0KLQlmZWF0dXJlcyA9IE5FVElGX0ZfVFNPOwotCWlmIChlZngtPnR5cGUtPm9mZmxvYWRfZmVhdHVyZXMgJiBORVRJRl9GX1Y2X0NTVU0pCi0JCWZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKLQotCWlmIChlbmFibGUpCi0JCW5ldF9kZXYtPmZlYXR1cmVzIHw9IGZlYXR1cmVzOwotCWVsc2UKLQkJbmV0X2Rldi0+ZmVhdHVyZXMgJj0gfmZlYXR1cmVzOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZWZ4X2V0aHRvb2xfc2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsIHUzMiBlbmFibGUpCi17Ci0Jc3RydWN0IGVmeF9uaWMgKmVmeCA9IG5ldGRldl9wcml2KG5ldF9kZXYpOwotCXUzMiBmZWF0dXJlcyA9IGVmeC0+dHlwZS0+b2ZmbG9hZF9mZWF0dXJlcyAmIE5FVElGX0ZfQUxMX0NTVU07Ci0KLQlpZiAoZW5hYmxlKQotCQluZXRfZGV2LT5mZWF0dXJlcyB8PSBmZWF0dXJlczsKLQllbHNlCi0JCW5ldF9kZXYtPmZlYXR1cmVzICY9IH5mZWF0dXJlczsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGVmeF9ldGh0b29sX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LCB1MzIgZW5hYmxlKQotewotCXN0cnVjdCBlZnhfbmljICplZnggPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKLQotCS8qIE5vIHdheSB0byBzdG9wIHRoZSBoYXJkd2FyZSBkb2luZyB0aGUgY2hlY2tzOyB3ZSBqdXN0Ci0JICogaWdub3JlIHRoZSByZXN1bHQuCi0JICovCi0JZWZ4LT5yeF9jaGVja3N1bV9lbmFibGVkID0gISFlbmFibGU7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHUzMiBlZnhfZXRodG9vbF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldikKLXsKLQlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7Ci0KLQlyZXR1cm4gZWZ4LT5yeF9jaGVja3N1bV9lbmFibGVkOwotfQotCi1zdGF0aWMgaW50IGVmeF9ldGh0b29sX3NldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IGVmeF9uaWMgKmVmeCA9IG5ldGRldl9wcml2KG5ldF9kZXYpOwotCXUzMiBzdXBwb3J0ZWQgPSAoZWZ4LT50eXBlLT5vZmZsb2FkX2ZlYXR1cmVzICYKLQkJCSAoRVRIX0ZMQUdfUlhIQVNIIHwgRVRIX0ZMQUdfTlRVUExFKSk7Ci0JaW50IHJjOwotCi0JcmMgPSBldGh0b29sX29wX3NldF9mbGFncyhuZXRfZGV2LCBkYXRhLCBzdXBwb3J0ZWQpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCi0JaWYgKCEoZGF0YSAmIEVUSF9GTEFHX05UVVBMRSkpCi0JCWVmeF9maWx0ZXJfY2xlYXJfcngoZWZ4LCBFRlhfRklMVEVSX1BSSV9NQU5VQUwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIGVmeF9ldGh0b29sX3NlbGZfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwKIAkJCQkgIHN0cnVjdCBldGh0b29sX3Rlc3QgKnRlc3QsIHU2NCAqZGF0YSkKIHsKQEAgLTc1NSw3ICs2OTgsNyBAQAogCQkJCSAgICAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKnBhdXNlKQogewogCXN0cnVjdCBlZnhfbmljICplZnggPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKLQllbnVtIGVmeF9mY190eXBlIHdhbnRlZF9mYywgb2xkX2ZjOworCXU4IHdhbnRlZF9mYywgb2xkX2ZjOwogCXUzMiBvbGRfYWR2OwogCWJvb2wgcmVzZXQ7CiAJaW50IHJjID0gMDsKQEAgLTEwMTIsOCArOTU1LDkgQEAKIAogCWlmIChudHVwbGUtPmZzLmFjdGlvbiA9PSBFVEhUT09MX1JYTlRVUExFX0FDVElPTl9DTEVBUikKIAkJcmV0dXJuIGVmeF9maWx0ZXJfcmVtb3ZlX2ZpbHRlcihlZngsICZmaWx0ZXIpOwotCWVsc2UKLQkJcmV0dXJuIGVmeF9maWx0ZXJfaW5zZXJ0X2ZpbHRlcihlZngsICZmaWx0ZXIsIHRydWUpOworCisJcmMgPSBlZnhfZmlsdGVyX2luc2VydF9maWx0ZXIoZWZ4LCAmZmlsdGVyLCB0cnVlKTsKKwlyZXR1cm4gcmMgPCAwID8gcmMgOiAwOwogfQogCiBzdGF0aWMgaW50IGVmeF9ldGh0b29sX2dldF9yeGZoX2luZGlyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LApAQCAtMTA3MCwyMiArMTAxNCwxMCBAQAogCS5zZXRfcmluZ3BhcmFtCQk9IGVmeF9ldGh0b29sX3NldF9yaW5ncGFyYW0sCiAJLmdldF9wYXVzZXBhcmFtICAgICAgICAgPSBlZnhfZXRodG9vbF9nZXRfcGF1c2VwYXJhbSwKIAkuc2V0X3BhdXNlcGFyYW0gICAgICAgICA9IGVmeF9ldGh0b29sX3NldF9wYXVzZXBhcmFtLAotCS5nZXRfcnhfY3N1bQkJPSBlZnhfZXRodG9vbF9nZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0JCT0gZWZ4X2V0aHRvb2xfc2V0X3J4X2NzdW0sCi0JLmdldF90eF9jc3VtCQk9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCi0JLyogTmVlZCB0byBlbmFibGUvZGlzYWJsZSBJUHY2IHRvbyAqLwotCS5zZXRfdHhfY3N1bQkJPSBlZnhfZXRodG9vbF9zZXRfdHhfY3N1bSwKLQkuZ2V0X3NnCQkJPSBldGh0b29sX29wX2dldF9zZywKLQkuc2V0X3NnCQkJPSBldGh0b29sX29wX3NldF9zZywKLQkuZ2V0X3RzbwkJPSBldGh0b29sX29wX2dldF90c28sCi0JLyogTmVlZCB0byBlbmFibGUvZGlzYWJsZSBUU08tSVB2NiB0b28gKi8KLQkuc2V0X3RzbwkJPSBlZnhfZXRodG9vbF9zZXRfdHNvLAotCS5nZXRfZmxhZ3MJCT0gZXRodG9vbF9vcF9nZXRfZmxhZ3MsCi0JLnNldF9mbGFncwkJPSBlZnhfZXRodG9vbF9zZXRfZmxhZ3MsCiAJLmdldF9zc2V0X2NvdW50CQk9IGVmeF9ldGh0b29sX2dldF9zc2V0X2NvdW50LAogCS5zZWxmX3Rlc3QJCT0gZWZ4X2V0aHRvb2xfc2VsZl90ZXN0LAogCS5nZXRfc3RyaW5ncwkJPSBlZnhfZXRodG9vbF9nZXRfc3RyaW5ncywKLQkucGh5c19pZAkJPSBlZnhfZXRodG9vbF9waHlzX2lkLAorCS5zZXRfcGh5c19pZAkJPSBlZnhfZXRodG9vbF9waHlzX2lkLAogCS5nZXRfZXRodG9vbF9zdGF0cwk9IGVmeF9ldGh0b29sX2dldF9zdGF0cywKIAkuZ2V0X3dvbCAgICAgICAgICAgICAgICA9IGVmeF9ldGh0b29sX2dldF93b2wsCiAJLnNldF93b2wgICAgICAgICAgICAgICAgPSBlZnhfZXRodG9vbF9zZXRfd29sLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5jIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5jCmluZGV4IGQ5NmIyMzcuLjYwMTc2ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb24uYworKysgYi9kcml2ZXJzL25ldC9zZmMvZmFsY29uLmMKQEAgLTE3MDMsNyArMTcwMyw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqLwogCi1zdHJ1Y3QgZWZ4X25pY190eXBlIGZhbGNvbl9hMV9uaWNfdHlwZSA9IHsKK2NvbnN0IHN0cnVjdCBlZnhfbmljX3R5cGUgZmFsY29uX2ExX25pY190eXBlID0gewogCS5wcm9iZSA9IGZhbGNvbl9wcm9iZV9uaWMsCiAJLnJlbW92ZSA9IGZhbGNvbl9yZW1vdmVfbmljLAogCS5pbml0ID0gZmFsY29uX2luaXRfbmljLApAQCAtMTc0NCw3ICsxNzQ0LDcgQEAKIAkucmVzZXRfd29ybGRfZmxhZ3MgPSBFVEhfUkVTRVRfSVJRLAogfTsKIAotc3RydWN0IGVmeF9uaWNfdHlwZSBmYWxjb25fYjBfbmljX3R5cGUgPSB7Citjb25zdCBzdHJ1Y3QgZWZ4X25pY190eXBlIGZhbGNvbl9iMF9uaWNfdHlwZSA9IHsKIAkucHJvYmUgPSBmYWxjb25fcHJvYmVfbmljLAogCS5yZW1vdmUgPSBmYWxjb25fcmVtb3ZlX25pYywKIAkuaW5pdCA9IGZhbGNvbl9pbml0X25pYywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb25feG1hYy5jIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbl94bWFjLmMKaW5kZXggMmM5ZWU1ZC4uOTUxNjQ1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbl94bWFjLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbl94bWFjLmMKQEAgLTM2Miw3ICszNjIsNyBAQAogCWZhbGNvbl9hY2tfc3RhdHVzX2ludHIoZWZ4KTsKIH0KIAotc3RydWN0IGVmeF9tYWNfb3BlcmF0aW9ucyBmYWxjb25feG1hY19vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGVmeF9tYWNfb3BlcmF0aW9ucyBmYWxjb25feG1hY19vcGVyYXRpb25zID0gewogCS5yZWNvbmZpZ3VyZQk9IGZhbGNvbl9yZWNvbmZpZ3VyZV94bWFjLAogCS51cGRhdGVfc3RhdHMJPSBmYWxjb25fdXBkYXRlX3N0YXRzX3htYWMsCiAJLmNoZWNrX2ZhdWx0CT0gZmFsY29uX3htYWNfY2hlY2tfZmF1bHQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvbWFjLmggYi9kcml2ZXJzL25ldC9zZmMvbWFjLmgKaW5kZXggNjg4NmNkZi4uZDZhMjU1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL21hYy5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9tYWMuaApAQCAtMTMsOCArMTMsOCBAQAogCiAjaW5jbHVkZSAibmV0X2RyaXZlci5oIgogCi1leHRlcm4gc3RydWN0IGVmeF9tYWNfb3BlcmF0aW9ucyBmYWxjb25feG1hY19vcGVyYXRpb25zOwotZXh0ZXJuIHN0cnVjdCBlZnhfbWFjX29wZXJhdGlvbnMgZWZ4X21jZGlfbWFjX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGVmeF9tYWNfb3BlcmF0aW9ucyBmYWxjb25feG1hY19vcGVyYXRpb25zOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBlZnhfbWFjX29wZXJhdGlvbnMgZWZ4X21jZGlfbWFjX29wZXJhdGlvbnM7CiBleHRlcm4gaW50IGVmeF9tY2RpX21hY19zdGF0cyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBkbWFfYWRkcl90IGRtYV9hZGRyLAogCQkJICAgICAgdTMyIGRtYV9sZW4sIGludCBlbmFibGUsIGludCBjbGVhcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9tY2RpX21hYy5jIGIvZHJpdmVycy9uZXQvc2ZjL21jZGlfbWFjLmMKaW5kZXggMzNmNzI5NC4uNTBjMjA3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL21jZGlfbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL21jZGlfbWFjLmMKQEAgLTEzOCw3ICsxMzgsNyBAQAogfQogCiAKLXN0cnVjdCBlZnhfbWFjX29wZXJhdGlvbnMgZWZ4X21jZGlfbWFjX29wZXJhdGlvbnMgPSB7Citjb25zdCBzdHJ1Y3QgZWZ4X21hY19vcGVyYXRpb25zIGVmeF9tY2RpX21hY19vcGVyYXRpb25zID0gewogCS5yZWNvbmZpZ3VyZQk9IGVmeF9tY2RpX21hY19yZWNvbmZpZ3VyZSwKIAkudXBkYXRlX3N0YXRzCT0gZWZ4X3BvcnRfZHVtbXlfb3Bfdm9pZCwKIAkuY2hlY2tfZmF1bHQgCT0gZWZ4X21jZGlfbWFjX2NoZWNrX2ZhdWx0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL21jZGlfcGh5LmMgYi9kcml2ZXJzL25ldC9zZmMvbWNkaV9waHkuYwppbmRleCA3ZTNjNjViLi42YzYzYWIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvbWNkaV9waHkuYworKysgYi9kcml2ZXJzL25ldC9zZmMvbWNkaV9waHkuYwpAQCAtNTEzLDcgKzUxMyw3IEBACiAJZWNtZC0+c3VwcG9ydGVkID0KIAkJbWNkaV90b19ldGh0b29sX2NhcChwaHlfY2ZnLT5tZWRpYSwgcGh5X2NmZy0+c3VwcG9ydGVkX2NhcCk7CiAJZWNtZC0+YWR2ZXJ0aXNpbmcgPSBlZngtPmxpbmtfYWR2ZXJ0aXNpbmc7Ci0JZWNtZC0+c3BlZWQgPSBlZngtPmxpbmtfc3RhdGUuc3BlZWQ7CisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIGVmeC0+bGlua19zdGF0ZS5zcGVlZCk7CiAJZWNtZC0+ZHVwbGV4ID0gZWZ4LT5saW5rX3N0YXRlLmZkOwogCWVjbWQtPnBvcnQgPSBtY2RpX3RvX2V0aHRvb2xfbWVkaWEocGh5X2NmZy0+bWVkaWEpOwogCWVjbWQtPnBoeV9hZGRyZXNzID0gcGh5X2NmZy0+cG9ydDsKQEAgLTU0NSw3ICs1NDUsNyBAQAogCQljYXBzID0gKGV0aHRvb2xfdG9fbWNkaV9jYXAoZWNtZC0+YWR2ZXJ0aXNpbmcpIHwKIAkJCSAxIDw8IE1DX0NNRF9QSFlfQ0FQX0FOX0xCTik7CiAJfSBlbHNlIGlmIChlY21kLT5kdXBsZXgpIHsKLQkJc3dpdGNoIChlY21kLT5zcGVlZCkgeworCQlzd2l0Y2ggKGV0aHRvb2xfY21kX3NwZWVkKGVjbWQpKSB7CiAJCWNhc2UgMTA6ICAgIGNhcHMgPSAxIDw8IE1DX0NNRF9QSFlfQ0FQXzEwRkRYX0xCTjsgICAgYnJlYWs7CiAJCWNhc2UgMTAwOiAgIGNhcHMgPSAxIDw8IE1DX0NNRF9QSFlfQ0FQXzEwMEZEWF9MQk47ICAgYnJlYWs7CiAJCWNhc2UgMTAwMDogIGNhcHMgPSAxIDw8IE1DX0NNRF9QSFlfQ0FQXzEwMDBGRFhfTEJOOyAgYnJlYWs7CkBAIC01NTMsNyArNTUzLDcgQEAKIAkJZGVmYXVsdDogICAgcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9IGVsc2UgewotCQlzd2l0Y2ggKGVjbWQtPnNwZWVkKSB7CisJCXN3aXRjaCAoZXRodG9vbF9jbWRfc3BlZWQoZWNtZCkpIHsKIAkJY2FzZSAxMDogICAgY2FwcyA9IDEgPDwgTUNfQ01EX1BIWV9DQVBfMTBIRFhfTEJOOyAgICBicmVhazsKIAkJY2FzZSAxMDA6ICAgY2FwcyA9IDEgPDwgTUNfQ01EX1BIWV9DQVBfMTAwSERYX0xCTjsgICBicmVhazsKIAkJY2FzZSAxMDAwOiAgY2FwcyA9IDEgPDwgTUNfQ01EX1BIWV9DQVBfMTAwMEhEWF9MQk47ICBicmVhazsKQEAgLTczOSw3ICs3MzksNyBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdHJ1Y3QgZWZ4X3BoeV9vcGVyYXRpb25zIGVmeF9tY2RpX3BoeV9vcHMgPSB7Citjb25zdCBzdHJ1Y3QgZWZ4X3BoeV9vcGVyYXRpb25zIGVmeF9tY2RpX3BoeV9vcHMgPSB7CiAJLnByb2JlCQk9IGVmeF9tY2RpX3BoeV9wcm9iZSwKIAkuaW5pdCAJIAk9IGVmeF9wb3J0X2R1bW15X29wX2ludCwKIAkucmVjb25maWd1cmUJPSBlZnhfbWNkaV9waHlfcmVjb25maWd1cmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvbWRpb18xMGcuYyBiL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5jCmluZGV4IDE5ZTY4YzIuLjdhYjM4NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5jCkBAIC0yMzIsMTIgKzIzMiwxMiBAQAogICovCiBpbnQgZWZ4X21kaW9fc2V0X3NldHRpbmdzKHN0cnVjdCBlZnhfbmljICplZngsIHN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKIHsKLQlzdHJ1Y3QgZXRodG9vbF9jbWQgcHJldjsKKwlzdHJ1Y3QgZXRodG9vbF9jbWQgcHJldiA9IHsgLmNtZCA9IEVUSFRPT0xfR1NFVCB9OwogCiAJZWZ4LT5waHlfb3AtPmdldF9zZXR0aW5ncyhlZngsICZwcmV2KTsKIAogCWlmIChlY21kLT5hZHZlcnRpc2luZyA9PSBwcmV2LmFkdmVydGlzaW5nICYmCi0JICAgIGVjbWQtPnNwZWVkID09IHByZXYuc3BlZWQgJiYKKwkgICAgZXRodG9vbF9jbWRfc3BlZWQoZWNtZCkgPT0gZXRodG9vbF9jbWRfc3BlZWQoJnByZXYpICYmCiAJICAgIGVjbWQtPmR1cGxleCA9PSBwcmV2LmR1cGxleCAmJgogCSAgICBlY21kLT5wb3J0ID09IHByZXYucG9ydCAmJgogCSAgICBlY21kLT5hdXRvbmVnID09IHByZXYuYXV0b25lZykKQEAgLTI4NCw3ICsyODQsNyBAQAogCWVmeF9tZGlvX3dyaXRlKGVmeCwgTURJT19NTURfQU4sIE1ESU9fQ1RSTDEsIHJlZyk7CiB9CiAKLWVudW0gZWZ4X2ZjX3R5cGUgZWZ4X21kaW9fZ2V0X3BhdXNlKHN0cnVjdCBlZnhfbmljICplZngpCit1OCBlZnhfbWRpb19nZXRfcGF1c2Uoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKIAlCVUlMRF9CVUdfT04oRUZYX0ZDX0FVVE8gJiAoRUZYX0ZDX1JYIHwgRUZYX0ZDX1RYKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5oIGIvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmgKaW5kZXggZGYwNzAzOS4uYTk3ZGJiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmgKQEAgLTkyLDcgKzkyLDcgQEAKIC8qIEdldCBwYXVzZSBwYXJhbWV0ZXJzIGZyb20gQU4gaWYgYXZhaWxhYmxlIChvdGhlcndpc2UgcmV0dXJuCiAgKiByZXF1ZXN0ZWQgcGF1c2UgcGFyYW1ldGVycykKICAqLwotZW51bSBlZnhfZmNfdHlwZSBlZnhfbWRpb19nZXRfcGF1c2Uoc3RydWN0IGVmeF9uaWMgKmVmeCk7Cit1OCBlZnhfbWRpb19nZXRfcGF1c2Uoc3RydWN0IGVmeF9uaWMgKmVmeCk7CiAKIC8qIFdhaXQgZm9yIHNwZWNpZmllZCBNTURzIHRvIGV4aXQgcmVzZXQgd2l0aGluIGEgdGltZW91dCAqLwogZXh0ZXJuIGludCBlZnhfbWRpb193YWl0X3Jlc2V0X21tZHMoc3RydWN0IGVmeF9uaWMgKmVmeCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9uZXRfZHJpdmVyLmggYi9kcml2ZXJzL25ldC9zZmMvbmV0X2RyaXZlci5oCmluZGV4IDE5MWEzMTEuLmU4ZDVmMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9uZXRfZHJpdmVyLmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL25ldF9kcml2ZXIuaApAQCAtNDQ5LDExICs0NDksOSBAQAogc3RydWN0IGVmeF9uaWM7CiAKIC8qIFBzZXVkbyBiaXQtbWFzayBmbG93IGNvbnRyb2wgZmllbGQgKi8KLWVudW0gZWZ4X2ZjX3R5cGUgewotCUVGWF9GQ19SWCA9IEZMT1dfQ1RSTF9SWCwKLQlFRlhfRkNfVFggPSBGTE9XX0NUUkxfVFgsCi0JRUZYX0ZDX0FVVE8gPSA0LAotfTsKKyNkZWZpbmUgRUZYX0ZDX1JYCUZMT1dfQ1RSTF9SWAorI2RlZmluZSBFRlhfRkNfVFgJRkxPV19DVFJMX1RYCisjZGVmaW5lIEVGWF9GQ19BVVRPCTQKIAogLyoqCiAgKiBzdHJ1Y3QgZWZ4X2xpbmtfc3RhdGUgLSBDdXJyZW50IHN0YXRlIG9mIHRoZSBsaW5rCkBAIC00NjUsNyArNDYzLDcgQEAKIHN0cnVjdCBlZnhfbGlua19zdGF0ZSB7CiAJYm9vbCB1cDsKIAlib29sIGZkOwotCWVudW0gZWZ4X2ZjX3R5cGUgZmM7CisJdTggZmM7CiAJdW5zaWduZWQgaW50IHNwZWVkOwogfTsKIApAQCAtNjcwLDE2ICs2NjgsMTQgQEAKICAqIEBtdGRfbGlzdDogTGlzdCBvZiBNVERzIGF0dGFjaGVkIHRvIHRoZSBOSUMKICAqIEBuaWNfZGF0YTogSGFyZHdhcmUgZGVwZW5kZW50IHN0YXRlCiAgKiBAbWFjX2xvY2s6IE1BQyBhY2Nlc3MgbG9jay4gUHJvdGVjdHMgQHBvcnRfZW5hYmxlZCwgQHBoeV9tb2RlLAotICoJQHBvcnRfaW5oaWJpdGVkLCBlZnhfbW9uaXRvcigpIGFuZCBlZnhfcmVjb25maWd1cmVfcG9ydCgpCisgKgllZnhfbW9uaXRvcigpIGFuZCBlZnhfcmVjb25maWd1cmVfcG9ydCgpCiAgKiBAcG9ydF9lbmFibGVkOiBQb3J0IGVuYWJsZWQgaW5kaWNhdG9yLgogICoJU2VyaWFsaXNlcyBlZnhfc3RvcF9hbGwoKSwgZWZ4X3N0YXJ0X2FsbCgpLCBlZnhfbW9uaXRvcigpIGFuZAogICoJZWZ4X21hY193b3JrKCkgd2l0aCBrZXJuZWwgaW50ZXJmYWNlcy4gU2FmZSB0byByZWFkIHVuZGVyIGFueQogICoJb25lIG9mIHRoZSBydG5sX2xvY2ssIG1hY19sb2NrLCBvciBuZXRpZl90eF9sb2NrLCBidXQgYWxsIHRocmVlIG11c3QKICAqCWJlIGhlbGQgdG8gbW9kaWZ5IGl0LgotICogQHBvcnRfaW5oaWJpdGVkOiBJZiBzZXQsIHRoZSBuZXRpZl9jYXJyaWVyIGlzIGFsd2F5cyBvZmYuIEhvbGQgdGhlIG1hY19sb2NrCiAgKiBAcG9ydF9pbml0aWFsaXplZDogUG9ydCBpbml0aWFsaXplZD8KICAqIEBuZXRfZGV2OiBPcGVyYXRpbmcgc3lzdGVtIG5ldHdvcmsgZGV2aWNlLiBDb25zaWRlciBob2xkaW5nIHRoZSBydG5sIGxvY2sKLSAqIEByeF9jaGVja3N1bV9lbmFibGVkOiBSWCBjaGVja3N1bW1pbmcgZW5hYmxlZAogICogQHN0YXRzX2J1ZmZlcjogRE1BIGJ1ZmZlciBmb3Igc3RhdGlzdGljcwogICogQG1hY19vcDogTUFDIGludGVyZmFjZQogICogQHBoeV90eXBlOiBQSFkgdHlwZQpAQCAtNzY1LDE4ICs3NjEsMTYgQEAKIAlzdHJ1Y3QgbXV0ZXggbWFjX2xvY2s7CiAJc3RydWN0IHdvcmtfc3RydWN0IG1hY193b3JrOwogCWJvb2wgcG9ydF9lbmFibGVkOwotCWJvb2wgcG9ydF9pbmhpYml0ZWQ7CiAKIAlib29sIHBvcnRfaW5pdGlhbGl6ZWQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXY7Ci0JYm9vbCByeF9jaGVja3N1bV9lbmFibGVkOwogCiAJc3RydWN0IGVmeF9idWZmZXIgc3RhdHNfYnVmZmVyOwogCi0Jc3RydWN0IGVmeF9tYWNfb3BlcmF0aW9ucyAqbWFjX29wOworCWNvbnN0IHN0cnVjdCBlZnhfbWFjX29wZXJhdGlvbnMgKm1hY19vcDsKIAogCXVuc2lnbmVkIGludCBwaHlfdHlwZTsKLQlzdHJ1Y3QgZWZ4X3BoeV9vcGVyYXRpb25zICpwaHlfb3A7CisJY29uc3Qgc3RydWN0IGVmeF9waHlfb3BlcmF0aW9ucyAqcGh5X29wOwogCXZvaWQgKnBoeV9kYXRhOwogCXN0cnVjdCBtZGlvX2lmX2luZm8gbWRpbzsKIAl1bnNpZ25lZCBpbnQgbWRpb19idXM7CkBAIC03ODgsNyArNzgyLDcgQEAKIAogCWJvb2wgcHJvbWlzY3VvdXM7CiAJdW5pb24gZWZ4X211bHRpY2FzdF9oYXNoIG11bHRpY2FzdF9oYXNoOwotCWVudW0gZWZ4X2ZjX3R5cGUgd2FudGVkX2ZjOworCXU4IHdhbnRlZF9mYzsKIAogCWF0b21pY190IHJ4X3Jlc2V0OwogCWVudW0gZWZ4X2xvb3BiYWNrX21vZGUgbG9vcGJhY2tfbW9kZTsKQEAgLTg5Nyw3ICs4OTEsNyBAQAogCXZvaWQgKCpyZXN1bWVfd29sKShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKIAlpbnQgKCp0ZXN0X3JlZ2lzdGVycykoc3RydWN0IGVmeF9uaWMgKmVmeCk7CiAJaW50ICgqdGVzdF9udnJhbSkoc3RydWN0IGVmeF9uaWMgKmVmeCk7Ci0Jc3RydWN0IGVmeF9tYWNfb3BlcmF0aW9ucyAqZGVmYXVsdF9tYWNfb3BzOworCWNvbnN0IHN0cnVjdCBlZnhfbWFjX29wZXJhdGlvbnMgKmRlZmF1bHRfbWFjX29wczsKIAogCWludCByZXZpc2lvbjsKIAl1bnNpZ25lZCBpbnQgbWVtX21hcF9zaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL25pYy5jIGIvZHJpdmVycy9uZXQvc2ZjL25pYy5jCmluZGV4IDliMjlhOGQuLmYyYTJiOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9uaWMuYworKysgYi9kcml2ZXJzL25ldC9zZmMvbmljLmMKQEAgLTg1Miw3ICs4NTIsNiBAQAogCXVuc2lnbmVkIGV4cGVjdGVkX3B0cjsKIAlib29sIHJ4X2V2X3BrdF9vaywgZGlzY2FyZCA9IGZhbHNlLCBjaGVja3N1bW1lZDsKIAlzdHJ1Y3QgZWZ4X3J4X3F1ZXVlICpyeF9xdWV1ZTsKLQlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gY2hhbm5lbC0+ZWZ4OwogCiAJLyogQmFzaWMgcGFja2V0IGluZm9ybWF0aW9uICovCiAJcnhfZXZfYnl0ZV9jbnQgPSBFRlhfUVdPUkRfRklFTEQoKmV2ZW50LCBGU0ZfQVpfUlhfRVZfQllURV9DTlQpOwpAQCAtODc1LDkgKzg3NCw4IEBACiAJCSAqIFVEUC9JUCwgdGhlbiB3ZSBjYW4gcmVseSBvbiB0aGUgaGFyZHdhcmUgY2hlY2tzdW0uCiAJCSAqLwogCQljaGVja3N1bW1lZCA9Ci0JCQlsaWtlbHkoZWZ4LT5yeF9jaGVja3N1bV9lbmFibGVkKSAmJgotCQkJKHJ4X2V2X2hkcl90eXBlID09IEZTRV9DWl9SWF9FVl9IRFJfVFlQRV9JUFY0VjZfVENQIHx8Ci0JCQkgcnhfZXZfaGRyX3R5cGUgPT0gRlNFX0NaX1JYX0VWX0hEUl9UWVBFX0lQVjRWNl9VRFApOworCQkJcnhfZXZfaGRyX3R5cGUgPT0gRlNFX0NaX1JYX0VWX0hEUl9UWVBFX0lQVjRWNl9UQ1AgfHwKKwkJCXJ4X2V2X2hkcl90eXBlID09IEZTRV9DWl9SWF9FVl9IRFJfVFlQRV9JUFY0VjZfVURQOwogCX0gZWxzZSB7CiAJCWVmeF9oYW5kbGVfcnhfbm90X29rKHJ4X3F1ZXVlLCBldmVudCwgJnJ4X2V2X3BrdF9vaywgJmRpc2NhcmQpOwogCQljaGVja3N1bW1lZCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL25pYy5oIGIvZHJpdmVycy9uZXQvc2ZjL25pYy5oCmluZGV4IGQ5MTcwMWEuLjRiZDFmMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9uaWMuaAorKysgYi9kcml2ZXJzL25ldC9zZmMvbmljLmgKQEAgLTE1Miw5ICsxNTIsOSBAQAogCWludCB3b2xfZmlsdGVyX2lkOwogfTsKIAotZXh0ZXJuIHN0cnVjdCBlZnhfbmljX3R5cGUgZmFsY29uX2ExX25pY190eXBlOwotZXh0ZXJuIHN0cnVjdCBlZnhfbmljX3R5cGUgZmFsY29uX2IwX25pY190eXBlOwotZXh0ZXJuIHN0cnVjdCBlZnhfbmljX3R5cGUgc2llbmFfYTBfbmljX3R5cGU7CitleHRlcm4gY29uc3Qgc3RydWN0IGVmeF9uaWNfdHlwZSBmYWxjb25fYTFfbmljX3R5cGU7CitleHRlcm4gY29uc3Qgc3RydWN0IGVmeF9uaWNfdHlwZSBmYWxjb25fYjBfbmljX3R5cGU7CitleHRlcm4gY29uc3Qgc3RydWN0IGVmeF9uaWNfdHlwZSBzaWVuYV9hMF9uaWNfdHlwZTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3BoeS5oIGIvZHJpdmVycy9uZXQvc2ZjL3BoeS5oCmluZGV4IGIzYjc5NDcuLjExZDE0OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9waHkuaAorKysgYi9kcml2ZXJzL25ldC9zZmMvcGh5LmgKQEAgLTEzLDE0ICsxMywxNCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIDEwWHByZXNzIChTRlg3MTAxKSBQSFkKICAqLwotZXh0ZXJuIHN0cnVjdCBlZnhfcGh5X29wZXJhdGlvbnMgZmFsY29uX3NmeDcxMDFfcGh5X29wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZWZ4X3BoeV9vcGVyYXRpb25zIGZhbGNvbl9zZng3MTAxX3BoeV9vcHM7CiAKIGV4dGVybiB2b2lkIHRlbnhwcmVzc19zZXRfaWRfbGVkKHN0cnVjdCBlZnhfbmljICplZngsIGVudW0gZWZ4X2xlZF9tb2RlIG1vZGUpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogQU1DQy9RdWFrZSBRVDIwMnggUEhZcwogICovCi1leHRlcm4gc3RydWN0IGVmeF9waHlfb3BlcmF0aW9ucyBmYWxjb25fcXQyMDJ4X3BoeV9vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGVmeF9waHlfb3BlcmF0aW9ucyBmYWxjb25fcXQyMDJ4X3BoeV9vcHM7CiAKIC8qIFRoZXNlIFBIWXMgcHJvdmlkZSB2YXJpb3VzIEgvVyBjb250cm9sIHN0YXRlcyBmb3IgTEVEcyAqLwogI2RlZmluZSBRVUFLRV9MRURfTElOS19JTlZBTAkoMCkKQEAgLTM5LDcgKzM5LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIFRyYW5zd2l0Y2ggQ1g0IHJldGltZXIKICovCi1leHRlcm4gc3RydWN0IGVmeF9waHlfb3BlcmF0aW9ucyBmYWxjb25fdHhjX3BoeV9vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGVmeF9waHlfb3BlcmF0aW9ucyBmYWxjb25fdHhjX3BoeV9vcHM7CiAKICNkZWZpbmUgVFhDX0dQSU9fRElSX0lOUFVUCTAKICNkZWZpbmUgVFhDX0dQSU9fRElSX09VVFBVVAkxCkBAIC01MCw3ICs1MCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogU2llbmEgbWFuYWdlZCBQSFlzCiAgKi8KLWV4dGVybiBzdHJ1Y3QgZWZ4X3BoeV9vcGVyYXRpb25zIGVmeF9tY2RpX3BoeV9vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGVmeF9waHlfb3BlcmF0aW9ucyBlZnhfbWNkaV9waHlfb3BzOwogCiBleHRlcm4gaW50IGVmeF9tY2RpX21kaW9fcmVhZChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCB1bnNpZ25lZCBpbnQgYnVzLAogCQkJICAgICAgdW5zaWduZWQgaW50IHBydGFkLCB1bnNpZ25lZCBpbnQgZGV2YWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvcXQyMDJ4X3BoeS5jIGIvZHJpdmVycy9uZXQvc2ZjL3F0MjAyeF9waHkuYwppbmRleCA1NWY5MDkyLi43YWQ5N2UzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvcXQyMDJ4X3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9xdDIwMnhfcGh5LmMKQEAgLTQ0OSw3ICs0NDksNyBAQAogCWVmeC0+cGh5X2RhdGEgPSBOVUxMOwogfQogCi1zdHJ1Y3QgZWZ4X3BoeV9vcGVyYXRpb25zIGZhbGNvbl9xdDIwMnhfcGh5X29wcyA9IHsKK2NvbnN0IHN0cnVjdCBlZnhfcGh5X29wZXJhdGlvbnMgZmFsY29uX3F0MjAyeF9waHlfb3BzID0gewogCS5wcm9iZQkJID0gcXQyMDJ4X3BoeV9wcm9iZSwKIAkuaW5pdAkJID0gcXQyMDJ4X3BoeV9pbml0LAogCS5yZWNvbmZpZ3VyZQkgPSBxdDIwMnhfcGh5X3JlY29uZmlndXJlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3J4LmMgYi9kcml2ZXJzL25ldC9zZmMvcnguYwppbmRleCBjMGZkYjU5Li42MmU0MzY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvcnguYworKysgYi9kcml2ZXJzL25ldC9zZmMvcnguYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvdGNwLmg+CiAjaW5jbHVkZSA8bGludXgvdWRwLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlIDxuZXQvaXAuaD4KICNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KICNpbmNsdWRlICJuZXRfZHJpdmVyLmgiCkBAIC02MDUsNiArNjA2LDkgQEAKIAkJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIGNoYW5uZWwtPmNoYW5uZWwpOwogCX0KIAorCWlmICh1bmxpa2VseSghKGVmeC0+bmV0X2Rldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkpKQorCQljaGVja3N1bW1lZCA9IGZhbHNlOworCiAJaWYgKGxpa2VseShjaGVja3N1bW1lZCB8fCByeF9idWYtPmlzX3BhZ2UpKSB7CiAJCWVmeF9yeF9wYWNrZXRfZ3JvKGNoYW5uZWwsIHJ4X2J1ZiwgZWgsIGNoZWNrc3VtbWVkKTsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3NlbGZ0ZXN0LmMgYi9kcml2ZXJzL25ldC9zZmMvc2VsZnRlc3QuYwppbmRleCA1MGFkM2JjLi44MjJmNmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvc2VsZnRlc3QuYworKysgYi9kcml2ZXJzL25ldC9zZmMvc2VsZnRlc3QuYwpAQCAtNjk1LDEyICs2OTUsMTIgQEAKIAkvKiBPZmZsaW5lIChpLmUuIGRpc3J1cHRpdmUpIHRlc3RpbmcKIAkgKiBUaGlzIGNoZWNrcyBNQUMgYW5kIFBIWSBsb29wYmFjayBvbiB0aGUgc3BlY2lmaWVkIHBvcnQuICovCiAKLQkvKiBmb3JjZSB0aGUgY2FycmllciBzdGF0ZSBvZmYgc28gdGhlIGtlcm5lbCBkb2Vzbid0IHRyYW5zbWl0IGR1cmluZwotCSAqIHRoZSBsb29wYmFjayB0ZXN0LCBhbmQgdGhlIHdhdGNoZG9nIHRpbWVvdXQgZG9lc24ndCBmaXJlLiBBbHNvIHB1dAotCSAqIGZhbGNvbiBpbnRvIGxvb3BiYWNrIGZvciB0aGUgcmVnaXN0ZXIgdGVzdC4KKwkvKiBEZXRhY2ggdGhlIGRldmljZSBzbyB0aGUga2VybmVsIGRvZXNuJ3QgdHJhbnNtaXQgZHVyaW5nIHRoZQorCSAqIGxvb3BiYWNrIHRlc3QgYW5kIHRoZSB3YXRjaGRvZyB0aW1lb3V0IGRvZXNuJ3QgZmlyZS4KIAkgKi8KKwluZXRpZl9kZXZpY2VfZGV0YWNoKGVmeC0+bmV0X2Rldik7CisKIAltdXRleF9sb2NrKCZlZngtPm1hY19sb2NrKTsKLQllZngtPnBvcnRfaW5oaWJpdGVkID0gdHJ1ZTsKIAlpZiAoZWZ4LT5sb29wYmFja19tb2RlcykgewogCQkvKiBXZSBuZWVkIHRoZSAzMTIgY2xvY2sgZnJvbSB0aGUgUEhZIHRvIHRlc3QgdGhlIFhNQUMKIAkJICogcmVnaXN0ZXJzLCBzbyBtb3ZlIGludG8gWEdNSUkgbG9vcGJhY2sgaWYgYXZhaWxhYmxlICovCkBAIC03NTAsMTIgKzc1MCwxMSBAQAogCS8qIHJlc3RvcmUgdGhlIFBIWSB0byB0aGUgcHJldmlvdXMgc3RhdGUgKi8KIAltdXRleF9sb2NrKCZlZngtPm1hY19sb2NrKTsKIAllZngtPnBoeV9tb2RlID0gcGh5X21vZGU7Ci0JZWZ4LT5wb3J0X2luaGliaXRlZCA9IGZhbHNlOwogCWVmeC0+bG9vcGJhY2tfbW9kZSA9IGxvb3BiYWNrX21vZGU7CiAJX19lZnhfcmVjb25maWd1cmVfcG9ydChlZngpOwogCW11dGV4X3VubG9jaygmZWZ4LT5tYWNfbG9jayk7CiAKLQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMoZWZ4LT5uZXRfZGV2KTsKKwluZXRpZl9kZXZpY2VfYXR0YWNoKGVmeC0+bmV0X2Rldik7CiAKIAlyZXR1cm4gcmNfdGVzdDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9zaWVuYS5jIGIvZHJpdmVycy9uZXQvc2ZjL3NpZW5hLmMKaW5kZXggODM3ODY5Yi4uZmI0NzIxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3NpZW5hLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3NpZW5hLmMKQEAgLTU5OSw3ICs1OTksNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KIAotc3RydWN0IGVmeF9uaWNfdHlwZSBzaWVuYV9hMF9uaWNfdHlwZSA9IHsKK2NvbnN0IHN0cnVjdCBlZnhfbmljX3R5cGUgc2llbmFfYTBfbmljX3R5cGUgPSB7CiAJLnByb2JlID0gc2llbmFfcHJvYmVfbmljLAogCS5yZW1vdmUgPSBzaWVuYV9yZW1vdmVfbmljLAogCS5pbml0ID0gc2llbmFfaW5pdF9uaWMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvdGVueHByZXNzLmMgYi9kcml2ZXJzL25ldC9zZmMvdGVueHByZXNzLmMKaW5kZXggZWZkY2ViMy4uN2IwZmQ4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3RlbnhwcmVzcy5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy90ZW54cHJlc3MuYwpAQCAtNDYwLDcgKzQ2MCw3IEBACiAJLyogSW4gbG9vcGJhY2ssIHRoZSBQSFkgYXV0b21hdGljYWxseSBicmluZ3MgdXAgdGhlIGNvcnJlY3QgaW50ZXJmYWNlLAogCSAqIGJ1dCBkb2Vzbid0IGFkdmVydGlzZSB0aGUgY29ycmVjdCBzcGVlZC4gU28gb3ZlcnJpZGUgaXQgKi8KIAlpZiAoTE9PUEJBQ0tfRVhURVJOQUwoZWZ4KSkKLQkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDAwMDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIFNQRUVEXzEwMDAwKTsKIH0KIAogc3RhdGljIGludCB0ZW54cHJlc3Nfc2V0X3NldHRpbmdzKHN0cnVjdCBlZnhfbmljICplZngsIHN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKQEAgLTQ3OCw3ICs0NzgsNyBAQAogCQkJICBhZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTAwMDBiYXNlVF9GdWxsKTsKIH0KIAotc3RydWN0IGVmeF9waHlfb3BlcmF0aW9ucyBmYWxjb25fc2Z4NzEwMV9waHlfb3BzID0geworY29uc3Qgc3RydWN0IGVmeF9waHlfb3BlcmF0aW9ucyBmYWxjb25fc2Z4NzEwMV9waHlfb3BzID0gewogCS5wcm9iZQkJICA9IHRlbnhwcmVzc19waHlfcHJvYmUsCiAJLmluaXQgICAgICAgICAgICAgPSB0ZW54cHJlc3NfcGh5X2luaXQsCiAJLnJlY29uZmlndXJlICAgICAgPSB0ZW54cHJlc3NfcGh5X3JlY29uZmlndXJlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3R4LmMgYi9kcml2ZXJzL25ldC9zZmMvdHguYwppbmRleCBkMmM4NWRmLi44NGViOTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvdHguYworKysgYi9kcml2ZXJzL25ldC9zZmMvdHguYwpAQCAtMjA1LDcgKzIwNSw5IEBACiAJCQkJCWdvdG8gdW53aW5kOwogCQkJCX0KIAkJCQlzbXBfbWIoKTsKLQkJCQluZXRpZl90eF9zdGFydF9xdWV1ZSh0eF9xdWV1ZS0+Y29yZV90eHEpOworCQkJCWlmIChsaWtlbHkoIWVmeC0+bG9vcGJhY2tfc2VsZnRlc3QpKQorCQkJCQluZXRpZl90eF9zdGFydF9xdWV1ZSgKKwkJCQkJCXR4X3F1ZXVlLT5jb3JlX3R4cSk7CiAJCQl9CiAKIAkJCWluc2VydF9wdHIgPSB0eF9xdWV1ZS0+aW5zZXJ0X2NvdW50ICYgdHhfcXVldWUtPnB0cl9tYXNrOwpAQCAtMzM4LDggKzM0MCw3IEBACiAJc3RydWN0IGVmeF90eF9xdWV1ZSAqdHhfcXVldWU7CiAJdW5zaWduZWQgaW5kZXgsIHR5cGU7CiAKLQlpZiAodW5saWtlbHkoZWZ4LT5wb3J0X2luaGliaXRlZCkpCi0JCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwlFRlhfV0FSTl9PTl9QQVJBTk9JRCghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0X2RldikpOwogCiAJaW5kZXggPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKIAl0eXBlID0gc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCA/IEVGWF9UWFFfVFlQRV9PRkZMT0FEIDogMDsKQEAgLTQzNiw3ICs0MzcsNyBAQAogCXNtcF9tYigpOwogCWlmICh1bmxpa2VseShuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4X3F1ZXVlLT5jb3JlX3R4cSkpICYmCiAJICAgIGxpa2VseShlZngtPnBvcnRfZW5hYmxlZCkgJiYKLQkgICAgbGlrZWx5KCFlZngtPnBvcnRfaW5oaWJpdGVkKSkgeworCSAgICBsaWtlbHkobmV0aWZfZGV2aWNlX3ByZXNlbnQoZWZ4LT5uZXRfZGV2KSkpIHsKIAkJZmlsbF9sZXZlbCA9IHR4X3F1ZXVlLT5pbnNlcnRfY291bnQgLSB0eF9xdWV1ZS0+cmVhZF9jb3VudDsKIAkJaWYgKGZpbGxfbGV2ZWwgPCBFRlhfVFhRX1RIUkVTSE9MRChlZngpKSB7CiAJCQlFRlhfQlVHX09OX1BBUkFOT0lEKCFlZnhfZGV2X3JlZ2lzdGVyZWQoZWZ4KSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvdHhjNDMxMjhfcGh5LmMgYi9kcml2ZXJzL25ldC9zZmMvdHhjNDMxMjhfcGh5LmMKaW5kZXggZDk4ODZhZC4uN2MyMWIzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3R4YzQzMTI4X3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy90eGM0MzEyOF9waHkuYwpAQCAtNTQ1LDcgKzU0NSw3IEBACiAJbWRpbzQ1X2V0aHRvb2xfZ3NldCgmZWZ4LT5tZGlvLCBlY21kKTsKIH0KIAotc3RydWN0IGVmeF9waHlfb3BlcmF0aW9ucyBmYWxjb25fdHhjX3BoeV9vcHMgPSB7Citjb25zdCBzdHJ1Y3QgZWZ4X3BoeV9vcGVyYXRpb25zIGZhbGNvbl90eGNfcGh5X29wcyA9IHsKIAkucHJvYmUJCT0gdHhjNDMxMjhfcGh5X3Byb2JlLAogCS5pbml0CQk9IHR4YzQzMTI4X3BoeV9pbml0LAogCS5yZWNvbmZpZ3VyZQk9IHR4YzQzMTI4X3BoeV9yZWNvbmZpZ3VyZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NnaXNlZXEuYyBiL2RyaXZlcnMvbmV0L3NnaXNlZXEuYwppbmRleCBkZDAzYmY2Li41NDQxNWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZ2lzZWVxLmMKKysrIGIvZHJpdmVycy9uZXQvc2dpc2VlcS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIHNnaXNlZXEuYzogU2VlcTgwMDMgZXRoZXJuZXQgZHJpdmVyIGZvciBTR0kgbWFjaGluZXMuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZG1AZW5nci5zZ2kuY29tKQorICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkKICAqLwogCiAjdW5kZWYgREVCVUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NnaXNlZXEuaCBiL2RyaXZlcnMvbmV0L3NnaXNlZXEuaAppbmRleCA1MjMxMDRkLi4yMjExZTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZ2lzZWVxLmgKKysrIGIvZHJpdmVycy9uZXQvc2dpc2VlcS5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIHNnaXNlZXEuaDogRGVmaW5lcyBmb3IgdGhlIFNlZXE4MDAzIGV0aGVybmV0IGNvbnRyb2xsZXIuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZG1AZW5nci5zZ2kuY29tKQorICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkKICAqLwogI2lmbmRlZiBfU0dJU0VFUV9ICiAjZGVmaW5lIF9TR0lTRUVRX0gKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZ2UuYyBiL2RyaXZlcnMvbmV0L3NrZ2UuYwppbmRleCAzNWIyOGY0Li5mNGJlNWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2dlLmMKKysrIGIvZHJpdmVycy9uZXQvc2tnZS5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCiAjaW5jbHVkZSAic2tnZS5oIgpAQCAtMzAzLDcgKzMwNCw3IEBACiAKIAllY21kLT5hZHZlcnRpc2luZyA9IHNrZ2UtPmFkdmVydGlzaW5nOwogCWVjbWQtPmF1dG9uZWcgPSBza2dlLT5hdXRvbmVnOwotCWVjbWQtPnNwZWVkID0gc2tnZS0+c3BlZWQ7CisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIHNrZ2UtPnNwZWVkKTsKIAllY21kLT5kdXBsZXggPSBza2dlLT5kdXBsZXg7CiAJcmV0dXJuIDA7CiB9CkBAIC0zMjEsOCArMzIyLDkgQEAKIAkJc2tnZS0+c3BlZWQgPSAtMTsKIAl9IGVsc2UgewogCQl1MzIgc2V0dGluZzsKKwkJdTMyIHNwZWVkID0gZXRodG9vbF9jbWRfc3BlZWQoZWNtZCk7CiAKLQkJc3dpdGNoIChlY21kLT5zcGVlZCkgeworCQlzd2l0Y2ggKHNwZWVkKSB7CiAJCWNhc2UgU1BFRURfMTAwMDoKIAkJCWlmIChlY21kLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCiAJCQkJc2V0dGluZyA9IFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbDsKQEAgLTM1NSw3ICszNTcsNyBAQAogCQlpZiAoKHNldHRpbmcgJiBzdXBwb3J0ZWQpID09IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlza2dlLT5zcGVlZCA9IGVjbWQtPnNwZWVkOworCQlza2dlLT5zcGVlZCA9IHNwZWVkOwogCQlza2dlLT5kdXBsZXggPSBlY21kLT5kdXBsZXg7CiAJfQogCkBAIC01MzcsNDYgKzUzOSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2tnZV9zZXRfc2coc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IHNrZ2VfaHcgKmh3ID0gc2tnZS0+aHc7Ci0KLQlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9HRU5FU0lTICYmIGRhdGEpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQlyZXR1cm4gZXRodG9vbF9vcF9zZXRfc2coZGV2LCBkYXRhKTsKLX0KLQotc3RhdGljIGludCBza2dlX3NldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCBza2dlX3BvcnQgKnNrZ2UgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBza2dlX2h3ICpodyA9IHNrZ2UtPmh3OwotCi0JaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfR0VORVNJUyAmJiBkYXRhKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlyZXR1cm4gZXRodG9vbF9vcF9zZXRfdHhfY3N1bShkZXYsIGRhdGEpOwotfQotCi1zdGF0aWMgdTMyIHNrZ2VfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgc2tnZV9wb3J0ICpza2dlID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybiBza2dlLT5yeF9jc3VtOwotfQotCi0vKiBPbmx5IFl1a29uIHN1cHBvcnRzIGNoZWNrc3VtIG9mZmxvYWQuICovCi1zdGF0aWMgaW50IHNrZ2Vfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoc2tnZS0+aHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9HRU5FU0lTICYmIGRhdGEpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCXNrZ2UtPnJ4X2NzdW0gPSBkYXRhOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBza2dlX2dldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqZWNtZCkKIHsKQEAgLTc4NiwyOSArNzQ4LDI4IEBACiB9CiAKIC8qIGJsaW5rIExFRCdzIGZvciBmaW5kaW5nIGJvYXJkICovCi1zdGF0aWMgaW50IHNrZ2VfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3N0YXRpYyBpbnQgc2tnZV9zZXRfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgIGVudW0gZXRodG9vbF9waHlzX2lkX3N0YXRlIHN0YXRlKQogewogCXN0cnVjdCBza2dlX3BvcnQgKnNrZ2UgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgbXM7Ci0JZW51bSBsZWRfbW9kZSBtb2RlID0gTEVEX01PREVfVFNUOwogCi0JaWYgKCFkYXRhIHx8IGRhdGEgPiAodTMyKShNQVhfU0NIRURVTEVfVElNRU9VVCAvIEhaKSkKLQkJbXMgPSBqaWZmaWVzX3RvX21zZWNzKE1BWF9TQ0hFRFVMRV9USU1FT1VUIC8gSFopICogMTAwMDsKLQllbHNlCi0JCW1zID0gZGF0YSAqIDEwMDA7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgRVRIVE9PTF9JRF9BQ1RJVkU6CisJCXJldHVybiAyOwkvKiBjeWNsZSBvbi9vZmYgdHdpY2UgcGVyIHNlY29uZCAqLwogCi0Jd2hpbGUgKG1zID4gMCkgewotCQlza2dlX2xlZChza2dlLCBtb2RlKTsKLQkJbW9kZSBePSBMRURfTU9ERV9UU1Q7CisJY2FzZSBFVEhUT09MX0lEX09OOgorCQlza2dlX2xlZChza2dlLCBMRURfTU9ERV9UU1QpOworCQlicmVhazsKIAotCQlpZiAobXNsZWVwX2ludGVycnVwdGlibGUoQkxJTktfTVMpKQotCQkJYnJlYWs7Ci0JCW1zIC09IEJMSU5LX01TOworCWNhc2UgRVRIVE9PTF9JRF9PRkY6CisJCXNrZ2VfbGVkKHNrZ2UsIExFRF9NT0RFX09GRik7CisJCWJyZWFrOworCisJY2FzZSBFVEhUT09MX0lEX0lOQUNUSVZFOgorCQkvKiBiYWNrIHRvIHJlZ3VsYXIgTEVEIHN0YXRlICovCisJCXNrZ2VfbGVkKHNrZ2UsIG5ldGlmX3J1bm5pbmcoZGV2KSA/IExFRF9NT0RFX09OIDogTEVEX01PREVfT0ZGKTsKIAl9CiAKLQkvKiBiYWNrIHRvIHJlZ3VsYXIgTEVEIHN0YXRlICovCi0Jc2tnZV9sZWQoc2tnZSwgbmV0aWZfcnVubmluZyhkZXYpID8gTEVEX01PREVfT04gOiBMRURfTU9ERV9PRkYpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkyNSwxMiArODg2LDggQEAKIAkuc2V0X3BhdXNlcGFyYW0gPSBza2dlX3NldF9wYXVzZXBhcmFtLAogCS5nZXRfY29hbGVzY2UJPSBza2dlX2dldF9jb2FsZXNjZSwKIAkuc2V0X2NvYWxlc2NlCT0gc2tnZV9zZXRfY29hbGVzY2UsCi0JLnNldF9zZwkJPSBza2dlX3NldF9zZywKLQkuc2V0X3R4X2NzdW0JPSBza2dlX3NldF90eF9jc3VtLAotCS5nZXRfcnhfY3N1bQk9IHNrZ2VfZ2V0X3J4X2NzdW0sCi0JLnNldF9yeF9jc3VtCT0gc2tnZV9zZXRfcnhfY3N1bSwKIAkuZ2V0X3N0cmluZ3MJPSBza2dlX2dldF9zdHJpbmdzLAotCS5waHlzX2lkCT0gc2tnZV9waHlzX2lkLAorCS5zZXRfcGh5c19pZAk9IHNrZ2Vfc2V0X3BoeXNfaWQsCiAJLmdldF9zc2V0X2NvdW50ID0gc2tnZV9nZXRfc3NldF9jb3VudCwKIAkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBza2dlX2dldF9ldGh0b29sX3N0YXRzLAogfTsKQEAgLTMwODUsNyArMzA0Miw4IEBACiAJfQogCiAJc2tiX3B1dChza2IsIGxlbik7Ci0JaWYgKHNrZ2UtPnJ4X2NzdW0pIHsKKworCWlmIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pIHsKIAkJc2tiLT5jc3VtID0gY3N1bTsKIAkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9DT01QTEVURTsKIAl9CkBAIC0zODQ3LDEwICszODA1LDEwIEBACiAJc2V0dXBfdGltZXIoJnNrZ2UtPmxpbmtfdGltZXIsIHhtX2xpbmtfdGltZXIsICh1bnNpZ25lZCBsb25nKSBza2dlKTsKIAogCWlmIChody0+Y2hpcF9pZCAhPSBDSElQX0lEX0dFTkVTSVMpIHsKLQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1NHOwotCQlza2dlLT5yeF9jc3VtID0gMTsKKwkJZGV2LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfU0cgfAorCQkgICAgICAgICAgICAgICAgICAgTkVUSUZfRl9SWENTVU07CisJCWRldi0+ZmVhdHVyZXMgfD0gZGV2LT5od19mZWF0dXJlczsKIAl9Ci0JZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0dSTzsKIAogCS8qIHJlYWQgdGhlIG1hYyBhZGRyZXNzICovCiAJbWVtY3B5X2Zyb21pbyhkZXYtPmRldl9hZGRyLCBody0+cmVncyArIEIyX01BQ18xICsgcG9ydCo4LCBFVEhfQUxFTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2dlLmggYi9kcml2ZXJzL25ldC9za2dlLmgKaW5kZXggNTFjMDIxNC4uNTk4YmY3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tnZS5oCisrKyBiL2RyaXZlcnMvbmV0L3NrZ2UuaApAQCAtMjQ2MCw3ICsyNDYwLDYgQEAKIAlzdHJ1Y3QgdGltZXJfbGlzdCAgICBsaW5rX3RpbWVyOwogCWVudW0gcGF1c2VfY29udHJvbCAgIGZsb3dfY29udHJvbDsKIAllbnVtIHBhdXNlX3N0YXR1cyAgICBmbG93X3N0YXR1czsKLQl1OAkJICAgICByeF9jc3VtOwogCXU4CQkgICAgIGJsaW5rX29uOwogCXU4CQkgICAgIHdvbDsKIAl1OAkJICAgICBhdXRvbmVnOwkvKiBBVVRPTkVHX0VOQUJMRSwgQVVUT05FR19ESVNBQkxFICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za3kyLmMgYi9kcml2ZXJzL25ldC9za3kyLmMKaW5kZXggZmY4ZDI2Mi4uM2VlNDFkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2t5Mi5jCisrKyBiL2RyaXZlcnMvbmV0L3NreTIuYwpAQCAtMTE5OCwxMiArMTE5OCwxMiBAQAogCiAJc2t5Ml93cml0ZTMyKHNreTItPmh3LAogCQkgICAgIFFfQUREUihyeHFhZGRyW3NreTItPnBvcnRdLCBRX0NTUiksCi0JCSAgICAgKHNreTItPmZsYWdzICYgU0tZMl9GTEFHX1JYX0NIRUNLU1VNKQorCQkgICAgIChza3kyLT5uZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pCiAJCSAgICAgPyBCTVVfRU5BX1JYX0NIS1NVTSA6IEJNVV9ESVNfUlhfQ0hLU1VNKTsKIH0KIAogLyogRW5hYmxlL2Rpc2FibGUgcmVjZWl2ZSBoYXNoIGNhbGN1bGF0aW9uIChSU1MpICovCi1zdGF0aWMgdm9pZCByeF9zZXRfcnNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCByeF9zZXRfcnNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcykKIHsKIAlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBza3kyLT5odzsKQEAgLTEyMTYsNyArMTIxNiw3IEBACiAJfQogCiAJLyogUHJvZ3JhbSBSU1MgaW5pdGlhbCB2YWx1ZXMgKi8KLQlpZiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhIQVNIKSB7CisJaWYgKGZlYXR1cmVzICYgTkVUSUZfRl9SWEhBU0gpIHsKIAkJdTMyIGtleVtua2V5c107CiAKIAkJZ2V0X3JhbmRvbV9ieXRlcyhrZXksIG5rZXlzICogc2l6ZW9mKHUzMikpOwpAQCAtMTMyMiwzMiArMTMyMiwzMiBAQAogCXJldHVybiBlcnI7CiB9CiAKLSNkZWZpbmUgTkVUSUZfRl9BTExfVkxBTiAoTkVUSUZfRl9IV19WTEFOX1RYfE5FVElGX0ZfSFdfVkxBTl9SWCkKKyNkZWZpbmUgU0tZMl9WTEFOX09GRkxPQURTIChORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1NHIHwgTkVUSUZfRl9UU08pCiAKLXN0YXRpYyB2b2lkIHNreTJfdmxhbl9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBza3kyX3ZsYW5fbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmVhdHVyZXMpCiB7CiAJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHNreTJfaHcgKmh3ID0gc2t5Mi0+aHc7CiAJdTE2IHBvcnQgPSBza3kyLT5wb3J0OwogCi0JaWYgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX1ZMQU5fUlgpCisJaWYgKGZlYXR1cmVzICYgTkVUSUZfRl9IV19WTEFOX1JYKQogCQlza3kyX3dyaXRlMzIoaHcsIFNLX1JFRyhwb3J0LCBSWF9HTUZfQ1RSTF9UKSwKIAkJCSAgICAgUlhfVkxBTl9TVFJJUF9PTik7CiAJZWxzZQogCQlza3kyX3dyaXRlMzIoaHcsIFNLX1JFRyhwb3J0LCBSWF9HTUZfQ1RSTF9UKSwKIAkJCSAgICAgUlhfVkxBTl9TVFJJUF9PRkYpOwogCi0JZGV2LT52bGFuX2ZlYXR1cmVzID0gZGV2LT5mZWF0dXJlcyAmfiBORVRJRl9GX0FMTF9WTEFOOwotCWlmIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9IV19WTEFOX1RYKQorCWlmIChmZWF0dXJlcyAmIE5FVElGX0ZfSFdfVkxBTl9UWCkgewogCQlza3kyX3dyaXRlMzIoaHcsIFNLX1JFRyhwb3J0LCBUWF9HTUZfQ1RSTF9UKSwKIAkJCSAgICAgVFhfVkxBTl9UQUdfT04pOwotCWVsc2UgeworCisJCWRldi0+dmxhbl9mZWF0dXJlcyB8PSBTS1kyX1ZMQU5fT0ZGTE9BRFM7CisJfSBlbHNlIHsKIAkJc2t5Ml93cml0ZTMyKGh3LCBTS19SRUcocG9ydCwgVFhfR01GX0NUUkxfVCksCiAJCQkgICAgIFRYX1ZMQU5fVEFHX09GRik7CiAKIAkJLyogQ2FuJ3QgZG8gdHJhbnNtaXQgb2ZmbG9hZCBvZiB2bGFuIHdpdGhvdXQgaHcgdmxhbiAqLwotCQlkZXYtPnZsYW5fZmVhdHVyZXMgJj0gfihORVRJRl9GX1RTTyB8IE5FVElGX0ZfU0cKLQkJCQkJfCBORVRJRl9GX0FMTF9DU1VNKTsKKwkJZGV2LT52bGFuX2ZlYXR1cmVzICY9IH5TS1kyX1ZMQU5fT0ZGTE9BRFM7CiAJfQogfQogCkBAIC0xNDYzLDcgKzE0NjMsNyBAQAogCQlyeF9zZXRfY2hlY2tzdW0oc2t5Mik7CiAKIAlpZiAoIShody0+ZmxhZ3MgJiBTS1kyX0hXX1JTU19CUk9LRU4pKQotCQlyeF9zZXRfcnNzKHNreTItPm5ldGRldik7CisJCXJ4X3NldF9yc3Moc2t5Mi0+bmV0ZGV2LCBza3kyLT5uZXRkZXYtPmZlYXR1cmVzKTsKIAogCS8qIHN1Ym1pdCBSeCByaW5nICovCiAJZm9yIChpID0gMDsgaSA8IHNreTItPnJ4X3BlbmRpbmc7IGkrKykgewpAQCAtMTYyNiw3ICsxNjI2LDggQEAKIAlza3kyX3ByZWZldGNoX2luaXQoaHcsIHR4cWFkZHJbcG9ydF0sIHNreTItPnR4X2xlX21hcCwKIAkJCSAgIHNreTItPnR4X3Jpbmdfc2l6ZSAtIDEpOwogCi0Jc2t5Ml92bGFuX21vZGUoc2t5Mi0+bmV0ZGV2KTsKKwlza3kyX3ZsYW5fbW9kZShza3kyLT5uZXRkZXYsIHNreTItPm5ldGRldi0+ZmVhdHVyZXMpOworCW5ldGRldl91cGRhdGVfZmVhdHVyZXMoc2t5Mi0+bmV0ZGV2KTsKIAogCXNreTJfcnhfc3RhcnQoc2t5Mik7CiB9CkBAIC0yMjYxLDEyICsyMjYyLDkgQEAKIAkgICAgIGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRkVfUCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JLyogVFNPLCBldGMgb24gWXVrb24gVWx0cmEgYW5kIE1UVSA+IDE1MDAgbm90IHN1cHBvcnRlZCAqLwotCWlmIChuZXdfbXR1ID4gRVRIX0RBVEFfTEVOICYmIGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRUNfVSkKLQkJZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfVFNPfE5FVElGX0ZfU0d8TkVUSUZfRl9BTExfQ1NVTSk7Ci0KIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQlkZXYtPm10dSA9IG5ld19tdHU7CisJCW5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yMjg4LDYgKzIyODYsNyBAQAogCXNreTJfcnhfY2xlYW4oc2t5Mik7CiAKIAlkZXYtPm10dSA9IG5ld19tdHU7CisJbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpOwogCiAJbW9kZSA9IERBVEFfQkxJTkRfVkFMKERBVEFfQkxJTkRfREVGKSB8CiAJCUdNX1NNT0RfVkxBTl9FTkEgfCBJUEdfREFUQV9WQUwoSVBHX0RBVEFfREVGKTsKQEAgLTI1MzUsOCArMjUzNCwxMSBAQAogCQkJICAgIiVzOiByZWNlaXZlIGNoZWNrc3VtIHByb2JsZW0gKHN0YXR1cyA9ICUjeClcbiIsCiAJCQkgICBza3kyLT5uZXRkZXYtPm5hbWUsIHN0YXR1cyk7CiAKLQkJLyogRGlzYWJsZSBjaGVja3N1bSBvZmZsb2FkICovCi0JCXNreTItPmZsYWdzICY9IH5TS1kyX0ZMQUdfUlhfQ0hFQ0tTVU07CisJCS8qIERpc2FibGUgY2hlY2tzdW0gb2ZmbG9hZAorCQkgKiBJdCB3aWxsIGJlIHJlZW5hYmxlZCBvbiBuZXh0IG5kb19zZXRfZmVhdHVyZXMsIGJ1dCBpZiBpdCdzCisJCSAqIHJlYWxseSBicm9rZW4sIHdpbGwgZ2V0IGRpc2FibGVkIGFnYWluCisJCSAqLworCQlza3kyLT5uZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1JYQ1NVTTsKIAkJc2t5Ml93cml0ZTMyKHNreTItPmh3LCBRX0FERFIocnhxYWRkcltza3kyLT5wb3J0XSwgUV9DU1IpLAogCQkJICAgICBCTVVfRElTX1JYX0NIS1NVTSk7CiAJfQpAQCAtMjU5MSw3ICsyNTkzLDcgQEAKIAogCQkJLyogVGhpcyBjaGlwIHJlcG9ydHMgY2hlY2tzdW0gc3RhdHVzIGRpZmZlcmVudGx5ICovCiAJCQlpZiAoaHctPmZsYWdzICYgU0tZMl9IV19ORVdfTEUpIHsKLQkJCQlpZiAoKHNreTItPmZsYWdzICYgU0tZMl9GTEFHX1JYX0NIRUNLU1VNKSAmJgorCQkJCWlmICgoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSAmJgogCQkJCSAgICAobGUtPmNzcyAmIChDU1NfSVNJUFY0IHwgQ1NTX0lTSVBWNikpICYmCiAJCQkJICAgIChsZS0+Y3NzICYgQ1NTX1RDUFVEUENTT0spKQogCQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwpAQCAtMjYxNiw3ICsyNjE4LDcgQEAKIAkJCXNreTItPnJ4X3RhZyA9IGxlbmd0aDsKIAkJCS8qIGZhbGwgdGhyb3VnaCAqLwogCQljYXNlIE9QX1JYQ0hLUzoKLQkJCWlmIChsaWtlbHkoc2t5Mi0+ZmxhZ3MgJiBTS1kyX0ZMQUdfUlhfQ0hFQ0tTVU0pKQorCQkJaWYgKGxpa2VseShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pKQogCQkJCXNreTJfcnhfY2hlY2tzdW0oc2t5Miwgc3RhdHVzKTsKIAkJCWJyZWFrOwogCkBAIC0zNDExLDEwICszNDEzLDEwIEBACiAJZWNtZC0+cGh5X2FkZHJlc3MgPSBQSFlfQUREUl9NQVJWOwogCWlmIChza3kyX2lzX2NvcHBlcihodykpIHsKIAkJZWNtZC0+cG9ydCA9IFBPUlRfVFA7Ci0JCWVjbWQtPnNwZWVkID0gc2t5Mi0+c3BlZWQ7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBza3kyLT5zcGVlZCk7CiAJCWVjbWQtPnN1cHBvcnRlZCB8PSAgU1VQUE9SVEVEX0F1dG9uZWcgfCBTVVBQT1JURURfVFA7CiAJfSBlbHNlIHsKLQkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDAwOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgU1BFRURfMTAwMCk7CiAJCWVjbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOwogCQllY21kLT5zdXBwb3J0ZWQgfD0gIFNVUFBPUlRFRF9BdXRvbmVnIHwgU1VQUE9SVEVEX0ZJQlJFOwogCX0KQEAgLTM0NTAsOCArMzQ1Miw5IEBACiAJCXNreTItPnNwZWVkID0gLTE7CiAJfSBlbHNlIHsKIAkJdTMyIHNldHRpbmc7CisJCXUzMiBzcGVlZCA9IGV0aHRvb2xfY21kX3NwZWVkKGVjbWQpOwogCi0JCXN3aXRjaCAoZWNtZC0+c3BlZWQpIHsKKwkJc3dpdGNoIChzcGVlZCkgewogCQljYXNlIFNQRUVEXzEwMDA6CiAJCQlpZiAoZWNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKQogCQkJCXNldHRpbmcgPSBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGw7CkBAIC0zNDg0LDcgKzM0ODcsNyBAQAogCQlpZiAoKHNldHRpbmcgJiBzdXBwb3J0ZWQpID09IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlza3kyLT5zcGVlZCA9IGVjbWQtPnNwZWVkOworCQlza3kyLT5zcGVlZCA9IHNwZWVkOwogCQlza3kyLT5kdXBsZXggPSBlY21kLT5kdXBsZXg7CiAJCXNreTItPmZsYWdzICY9IH5TS1kyX0ZMQUdfQVVUT19TUEVFRDsKIAl9CkBAIC0zNTUyLDI4ICszNTU1LDYgQEAKIAl7ICJ0eF9maWZvX3VuZGVycnVuIiwgR01fVFhFX0ZJRk9fVVIgfSwKIH07CiAKLXN0YXRpYyB1MzIgc2t5Ml9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JcmV0dXJuICEhKHNreTItPmZsYWdzICYgU0tZMl9GTEFHX1JYX0NIRUNLU1VNKTsKLX0KLQotc3RhdGljIGludCBza3kyX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKGRhdGEpCi0JCXNreTItPmZsYWdzIHw9IFNLWTJfRkxBR19SWF9DSEVDS1NVTTsKLQllbHNlCi0JCXNreTItPmZsYWdzICY9IH5TS1kyX0ZMQUdfUlhfQ0hFQ0tTVU07Ci0KLQlza3kyX3dyaXRlMzIoc2t5Mi0+aHcsIFFfQUREUihyeHFhZGRyW3NreTItPnBvcnRdLCBRX0NTUiksCi0JCSAgICAgZGF0YSA/IEJNVV9FTkFfUlhfQ0hLU1VNIDogQk1VX0RJU19SWF9DSEtTVU0pOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB1MzIgc2t5Ml9nZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTM4MjYsMjMgKzM4MDcsMjQgQEAKIH0KIAogLyogYmxpbmsgTEVEJ3MgZm9yIGZpbmRpbmcgYm9hcmQgKi8KLXN0YXRpYyBpbnQgc2t5Ml9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQorc3RhdGljIGludCBza3kyX3NldF9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgZW51bSBldGh0b29sX3BoeXNfaWRfc3RhdGUgc3RhdGUpCiB7CiAJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgaW50IGk7CiAKLQlpZiAoZGF0YSA9PSAwKQotCQlkYXRhID0gVUlOVF9NQVg7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZGF0YTsgaSsrKSB7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgRVRIVE9PTF9JRF9BQ1RJVkU6CisJCXJldHVybiAxOwkvKiBjeWNsZSBvbi9vZmYgb25jZSBwZXIgc2Vjb25kICovCisJY2FzZSBFVEhUT09MX0lEX0lOQUNUSVZFOgorCQlza3kyX2xlZChza3kyLCBNT19MRURfTk9STSk7CisJCWJyZWFrOworCWNhc2UgRVRIVE9PTF9JRF9PTjoKIAkJc2t5Ml9sZWQoc2t5MiwgTU9fTEVEX09OKTsKLQkJaWYgKG1zbGVlcF9pbnRlcnJ1cHRpYmxlKDUwMCkpCi0JCQlicmVhazsKKwkJYnJlYWs7CisJY2FzZSBFVEhUT09MX0lEX09GRjoKIAkJc2t5Ml9sZWQoc2t5MiwgTU9fTEVEX09GRik7Ci0JCWlmIChtc2xlZXBfaW50ZXJydXB0aWJsZSg1MDApKQotCQkJYnJlYWs7CisJCWJyZWFrOwogCX0KLQlza3kyX2xlZChza3kyLCBNT19MRURfTk9STSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQwODMsMzQgKzQwNjUsNiBAQAogCX0KIH0KIAotLyogSW4gb3JkZXIgdG8gZG8gSnVtYm8gcGFja2V0cyBvbiB0aGVzZSBjaGlwcywgbmVlZCB0byB0dXJuIG9mZiB0aGUKLSAqIHRyYW5zbWl0IHN0b3JlL2ZvcndhcmQuIFRoZXJlZm9yZSBjaGVja3N1bSBvZmZsb2FkIHdvbid0IHdvcmsuCi0gKi8KLXN0YXRpYyBpbnQgbm9fdHhfb2ZmbG9hZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWNvbnN0IHN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOwotCWNvbnN0IHN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OwotCi0JcmV0dXJuIGRldi0+bXR1ID4gRVRIX0RBVEFfTEVOICYmIGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRUNfVTsKLX0KLQotc3RhdGljIGludCBza3kyX3NldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCWlmIChkYXRhICYmIG5vX3R4X29mZmxvYWQoZGV2KSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gZXRodG9vbF9vcF9zZXRfdHhfY3N1bShkZXYsIGRhdGEpOwotfQotCi0KLXN0YXRpYyBpbnQgc2t5Ml9zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCWlmIChkYXRhICYmIG5vX3R4X29mZmxvYWQoZGV2KSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gZXRodG9vbF9vcF9zZXRfdHNvKGRldiwgZGF0YSk7Ci19Ci0KIHN0YXRpYyBpbnQgc2t5Ml9nZXRfZWVwcm9tX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNDIxMywzMSArNDE2NywzNiBAQAogCXJldHVybiBza3kyX3ZwZF93cml0ZShza3kyLT5odywgY2FwLCBkYXRhLCBlZXByb20tPm9mZnNldCwgZWVwcm9tLT5sZW4pOwogfQogCi1zdGF0aWMgaW50IHNreTJfc2V0X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQorc3RhdGljIHUzMiBza3kyX2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmVhdHVyZXMpCit7CisJY29uc3Qgc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CisJY29uc3Qgc3RydWN0IHNreTJfaHcgKmh3ID0gc2t5Mi0+aHc7CisKKwkvKiBJbiBvcmRlciB0byBkbyBKdW1ibyBwYWNrZXRzIG9uIHRoZXNlIGNoaXBzLCBuZWVkIHRvIHR1cm4gb2ZmIHRoZQorCSAqIHRyYW5zbWl0IHN0b3JlL2ZvcndhcmQuIFRoZXJlZm9yZSBjaGVja3N1bSBvZmZsb2FkIHdvbid0IHdvcmsuCisJICovCisJaWYgKGRldi0+bXR1ID4gRVRIX0RBVEFfTEVOICYmIGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRUNfVSkKKwkJZmVhdHVyZXMgJj0gfihORVRJRl9GX1RTT3xORVRJRl9GX1NHfE5FVElGX0ZfQUxMX0NTVU0pOworCisJcmV0dXJuIGZlYXR1cmVzOworfQorCitzdGF0aWMgaW50IHNreTJfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcykKIHsKIAlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIG9sZF9mZWF0ID0gZGV2LT5mZWF0dXJlczsKLQl1MzIgc3VwcG9ydGVkID0gMDsKLQlpbnQgcmM7CisJdTMyIGNoYW5nZWQgPSBkZXYtPmZlYXR1cmVzIF4gZmVhdHVyZXM7CiAKLQlpZiAoIShza3kyLT5ody0+ZmxhZ3MgJiBTS1kyX0hXX1JTU19CUk9LRU4pKQotCQlzdXBwb3J0ZWQgfD0gRVRIX0ZMQUdfUlhIQVNIOworCWlmIChjaGFuZ2VkICYgTkVUSUZfRl9SWENTVU0pIHsKKwkJdTMyIG9uID0gZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTTsKKwkJc2t5Ml93cml0ZTMyKHNreTItPmh3LCBRX0FERFIocnhxYWRkcltza3kyLT5wb3J0XSwgUV9DU1IpLAorCQkJICAgICBvbiA/IEJNVV9FTkFfUlhfQ0hLU1VNIDogQk1VX0RJU19SWF9DSEtTVU0pOworCX0KIAotCWlmICghKHNreTItPmh3LT5mbGFncyAmIFNLWTJfSFdfVkxBTl9CUk9LRU4pKQotCQlzdXBwb3J0ZWQgfD0gRVRIX0ZMQUdfUlhWTEFOIHwgRVRIX0ZMQUdfVFhWTEFOOworCWlmIChjaGFuZ2VkICYgTkVUSUZfRl9SWEhBU0gpCisJCXJ4X3NldF9yc3MoZGV2LCBmZWF0dXJlcyk7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAic2t5MiBzZXRfZmxhZ3M6IHN1cHBvcnRlZCAleCBkYXRhICV4XG4iLAotCSAgICAgICBzdXBwb3J0ZWQsIGRhdGEpOwotCi0JcmMgPSBldGh0b29sX29wX3NldF9mbGFncyhkZXYsIGRhdGEsIHN1cHBvcnRlZCk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLQlpZiAoKG9sZF9mZWF0IF4gZGV2LT5mZWF0dXJlcykgJiBORVRJRl9GX1JYSEFTSCkKLQkJcnhfc2V0X3JzcyhkZXYpOwotCi0JaWYgKChvbGRfZmVhdCBeIGRldi0+ZmVhdHVyZXMpICYgTkVUSUZfRl9BTExfVkxBTikKLQkJc2t5Ml92bGFuX21vZGUoZGV2KTsKKwlpZiAoY2hhbmdlZCAmIChORVRJRl9GX0hXX1ZMQU5fVFh8TkVUSUZfRl9IV19WTEFOX1JYKSkKKwkJc2t5Ml92bGFuX21vZGUoZGV2LCBmZWF0dXJlcyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQyNTcsMTEgKzQyMTYsNiBAQAogCS5nZXRfZWVwcm9tX2xlbgk9IHNreTJfZ2V0X2VlcHJvbV9sZW4sCiAJLmdldF9lZXByb20JPSBza3kyX2dldF9lZXByb20sCiAJLnNldF9lZXByb20JPSBza3kyX3NldF9lZXByb20sCi0JLnNldF9zZyAJPSBldGh0b29sX29wX3NldF9zZywKLQkuc2V0X3R4X2NzdW0JPSBza3kyX3NldF90eF9jc3VtLAotCS5zZXRfdHNvCT0gc2t5Ml9zZXRfdHNvLAotCS5nZXRfcnhfY3N1bQk9IHNreTJfZ2V0X3J4X2NzdW0sCi0JLnNldF9yeF9jc3VtCT0gc2t5Ml9zZXRfcnhfY3N1bSwKIAkuZ2V0X3N0cmluZ3MJPSBza3kyX2dldF9zdHJpbmdzLAogCS5nZXRfY29hbGVzY2UJPSBza3kyX2dldF9jb2FsZXNjZSwKIAkuc2V0X2NvYWxlc2NlCT0gc2t5Ml9zZXRfY29hbGVzY2UsCkBAIC00MjY5LDExICs0MjIzLDkgQEAKIAkuc2V0X3JpbmdwYXJhbQk9IHNreTJfc2V0X3JpbmdwYXJhbSwKIAkuZ2V0X3BhdXNlcGFyYW0gPSBza3kyX2dldF9wYXVzZXBhcmFtLAogCS5zZXRfcGF1c2VwYXJhbSA9IHNreTJfc2V0X3BhdXNlcGFyYW0sCi0JLnBoeXNfaWQJPSBza3kyX3BoeXNfaWQsCisJLnNldF9waHlzX2lkCT0gc2t5Ml9zZXRfcGh5c19pZCwKIAkuZ2V0X3NzZXRfY291bnQgPSBza3kyX2dldF9zc2V0X2NvdW50LAogCS5nZXRfZXRodG9vbF9zdGF0cyA9IHNreTJfZ2V0X2V0aHRvb2xfc3RhdHMsCi0JLnNldF9mbGFncwk9IHNreTJfc2V0X2ZsYWdzLAotCS5nZXRfZmxhZ3MJPSBldGh0b29sX29wX2dldF9mbGFncywKIH07CiAKICNpZmRlZiBDT05GSUdfU0tZMl9ERUJVRwpAQCAtNDU1Myw2ICs0NTA1LDggQEAKIAkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHNreTJfc2V0X21hY19hZGRyZXNzLAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gc2t5Ml9zZXRfbXVsdGljYXN0LAogCS5uZG9fY2hhbmdlX210dQkJPSBza3kyX2NoYW5nZV9tdHUsCisJLm5kb19maXhfZmVhdHVyZXMJPSBza3kyX2ZpeF9mZWF0dXJlcywKKwkubmRvX3NldF9mZWF0dXJlcwk9IHNreTJfc2V0X2ZlYXR1cmVzLAogCS5uZG9fdHhfdGltZW91dAkJPSBza3kyX3R4X3RpbWVvdXQsCiAJLm5kb19nZXRfc3RhdHM2NAk9IHNreTJfZ2V0X3N0YXRzLAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCkBAIC00NTY4LDYgKzQ1MjIsOCBAQAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gc2t5Ml9zZXRfbWFjX2FkZHJlc3MsCiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBza3kyX3NldF9tdWx0aWNhc3QsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IHNreTJfY2hhbmdlX210dSwKKwkubmRvX2ZpeF9mZWF0dXJlcwk9IHNreTJfZml4X2ZlYXR1cmVzLAorCS5uZG9fc2V0X2ZlYXR1cmVzCT0gc2t5Ml9zZXRfZmVhdHVyZXMsCiAJLm5kb190eF90aW1lb3V0CQk9IHNreTJfdHhfdGltZW91dCwKIAkubmRvX2dldF9zdGF0czY0CT0gc2t5Ml9nZXRfc3RhdHMsCiAgIH0sCkBAIC00NjAwLDcgKzQ1NTYsNyBAQAogCS8qIEF1dG8gc3BlZWQgYW5kIGZsb3cgY29udHJvbCAqLwogCXNreTItPmZsYWdzID0gU0tZMl9GTEFHX0FVVE9fU1BFRUQgfCBTS1kyX0ZMQUdfQVVUT19QQVVTRTsKIAlpZiAoaHctPmNoaXBfaWQgIT0gQ0hJUF9JRF9ZVUtPTl9YTCkKLQkJc2t5Mi0+ZmxhZ3MgfD0gU0tZMl9GTEFHX1JYX0NIRUNLU1VNOworCQlkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfUlhDU1VNOwogCiAJc2t5Mi0+Zmxvd19tb2RlID0gRkNfQk9USDsKIApAQCAtNDYxOSwxOCArNDU3NSwyMSBAQAogCiAJc2t5Mi0+cG9ydCA9IHBvcnQ7CiAKLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfU0cKLQkJfCBORVRJRl9GX1RTTyB8IE5FVElGX0ZfR1JPOworCWRldi0+aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9TRyB8IE5FVElGX0ZfVFNPOwogCiAJaWYgKGhpZ2htZW0pCiAJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwogCiAJLyogRW5hYmxlIHJlY2VpdmUgaGFzaGluZyB1bmxlc3MgaGFyZHdhcmUgaXMga25vd24gYnJva2VuICovCiAJaWYgKCEoaHctPmZsYWdzICYgU0tZMl9IV19SU1NfQlJPS0VOKSkKLQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1JYSEFTSDsKKwkJZGV2LT5od19mZWF0dXJlcyB8PSBORVRJRl9GX1JYSEFTSDsKIAotCWlmICghKGh3LT5mbGFncyAmIFNLWTJfSFdfVkxBTl9CUk9LRU4pKQotCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWDsKKwlpZiAoIShody0+ZmxhZ3MgJiBTS1kyX0hXX1ZMQU5fQlJPS0VOKSkgeworCQlkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWDsKKwkJZGV2LT52bGFuX2ZlYXR1cmVzIHw9IFNLWTJfVkxBTl9PRkZMT0FEUzsKKwl9CisKKwlkZXYtPmZlYXR1cmVzIHw9IGRldi0+aHdfZmVhdHVyZXM7CiAKIAkvKiByZWFkIHRoZSBtYWMgYWRkcmVzcyAqLwogCW1lbWNweV9mcm9taW8oZGV2LT5kZXZfYWRkciwgaHctPnJlZ3MgKyBCMl9NQUNfMSArIHBvcnQgKiA4LCBFVEhfQUxFTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za3kyLmggYi9kcml2ZXJzL25ldC9za3kyLmgKaW5kZXggMGM2ZDEwYy4uMzE4YzlhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2t5Mi5oCisrKyBiL2RyaXZlcnMvbmV0L3NreTIuaApAQCAtMjI1NCw3ICsyMjU0LDYgQEAKIAl1OAkJICAgICB3b2w7CQkvKiBXQUtFXyBiaXRzICovCiAJdTgJCSAgICAgZHVwbGV4OwkJLyogRFVQTEVYX0hBTEYsIERVUExFWF9GVUxMICovCiAJdTE2CQkgICAgIGZsYWdzOwotI2RlZmluZSBTS1kyX0ZMQUdfUlhfQ0hFQ0tTVU0JCTB4MDAwMQogI2RlZmluZSBTS1kyX0ZMQUdfQVVUT19TUEVFRAkJMHgwMDAyCiAjZGVmaW5lIFNLWTJfRkxBR19BVVRPX1BBVVNFCQkweDAwMDQKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2xpcC5jIGIvZHJpdmVycy9uZXQvc2xpcC5jCmluZGV4IDhlYzFhOWEuLjU4NDgwOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NsaXAuYworKysgYi9kcml2ZXJzL25ldC9zbGlwLmMKQEAgLTY3MCwxNiArNjcwLDE3IEBACiAgKiBpbiBwYXJhbGxlbAogICovCiAKLXN0YXRpYyB2b2lkIHNsaXBfcmVjZWl2ZV9idWYoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqY3AsCi0JCQkJCQkJY2hhciAqZnAsIGludCBjb3VudCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2xpcF9yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQljb25zdCB1bnNpZ25lZCBjaGFyICpjcCwgY2hhciAqZnAsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3Qgc2xpcCAqc2wgPSB0dHktPmRpc2NfZGF0YTsKKwlpbnQgYnl0ZXMgPSBjb3VudDsKIAogCWlmICghc2wgfHwgc2wtPm1hZ2ljICE9IFNMSVBfTUFHSUMgfHwgIW5ldGlmX3J1bm5pbmcoc2wtPmRldikpCi0JCXJldHVybjsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBSZWFkIHRoZSBjaGFyYWN0ZXJzIG91dCBvZiB0aGUgYnVmZmVyICovCi0Jd2hpbGUgKGNvdW50LS0pIHsKKwl3aGlsZSAoYnl0ZXMtLSkgewogCQlpZiAoZnAgJiYgKmZwKyspIHsKIAkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChTTEZfRVJST1IsICZzbC0+ZmxhZ3MpKQogCQkJCXNsLT5kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwpAQCAtNjkzLDYgKzY5NCw4IEBACiAjZW5kaWYKIAkJCXNsaXBfdW5lc2Moc2wsICpjcCsrKTsKIAl9CisKKwlyZXR1cm4gY291bnQ7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYy1tY2EuYyBiL2RyaXZlcnMvbmV0L3NtYy1tY2EuYwppbmRleCBkMDdjMzljLi4wZjI5ZjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWMtbWNhLmMKKysrIGIvZHJpdmVycy9uZXQvc21jLW1jYS5jCkBAIC0xNTYsNyArMTU2LDcgQEAKICAgIHsgMTQsIDE1IH0KIH07CiAKLXN0YXRpYyBzaG9ydCBzbWNfbWNhX2FkYXB0ZXJfaWRzW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzaG9ydCBzbWNfbWNhX2FkYXB0ZXJfaWRzW10gX19kZXZpbml0Y29uc3QgPSB7CiAJMHg2MWM4LAogCTB4NjFjOSwKIAkweDZmYzAsCkBAIC0xNjgsNyArMTY4LDcgQEAKIAkweDAwMDAKIH07CiAKLXN0YXRpYyBjaGFyICpzbWNfbWNhX2FkYXB0ZXJfbmFtZXNbXSBfX2luaXRkYXRhID0geworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHNtY19tY2FfYWRhcHRlcl9uYW1lc1tdIF9fZGV2aW5pdGNvbnN0ID0gewogCSJTTUMgRXRoZXJjYXJkIFBMVVMgRWxpdGUvQSBCTkMvQVVJIChXRDgwMTNFUC9BKSIsCiAJIlNNQyBFdGhlcmNhcmQgUExVUyBFbGl0ZS9BIFVUUC9BVUkgKFdEODAxM1dQL0EpIiwKIAkiV0QgRXRoZXJjYXJkIFBMVVMvQSAoV0Q4MDAzRS9BIG9yIFdEODAwM0VUL0EpIiwKQEAgLTE5OSw3ICsxOTksNyBAQAogI2VuZGlmCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCB1bHRyYW1jYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpnZW5fZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgdWx0cmFtY2FfcHJvYmUoc3RydWN0IGRldmljZSAqZ2VuX2RldikKIHsKIAl1bnNpZ25lZCBzaG9ydCBpb2FkZHI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxMXguYyBiL2RyaXZlcnMvbmV0L3NtYzkxMXguYwppbmRleCA2NjgzMWYzLi4wNTM4NjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWM5MTF4LmMKKysrIGIvZHJpdmVycy9uZXQvc21jOTExeC5jCkBAIC0xNDg4LDkgKzE0ODgsOSBAQAogCQkJCVNVUFBPUlRFRF9UUCB8IFNVUFBPUlRFRF9BVUk7CiAKIAkJaWYgKGxwLT5jdGxfcnNwZWVkID09IDEwKQotCQkJY21kLT5zcGVlZCA9IFNQRUVEXzEwOworCQkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgU1BFRURfMTApOwogCQllbHNlIGlmIChscC0+Y3RsX3JzcGVlZCA9PSAxMDApCi0JCQljbWQtPnNwZWVkID0gU1BFRURfMTAwOworCQkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgU1BFRURfMTAwKTsKIAogCQljbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7CiAJCWlmIChscC0+bWlpLnBoeV9pZD09MSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxeC5jIGIvZHJpdmVycy9uZXQvc21jOTF4LmMKaW5kZXggNDM2NTRhMy4uZGM0ODA1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTF4LmMKKysrIGIvZHJpdmVycy9uZXQvc21jOTF4LmMKQEAgLTE1NjUsOSArMTU2NSw5IEBACiAJCQkJIFNVUFBPUlRFRF9UUCB8IFNVUFBPUlRFRF9BVUk7CiAKIAkJaWYgKGxwLT5jdGxfcnNwZWVkID09IDEwKQotCQkJY21kLT5zcGVlZCA9IFNQRUVEXzEwOworCQkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgU1BFRURfMTApOwogCQllbHNlIGlmIChscC0+Y3RsX3JzcGVlZCA9PSAxMDApCi0JCQljbWQtPnNwZWVkID0gU1BFRURfMTAwOworCQkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgU1BFRURfMTAwKTsKIAogCQljbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7CiAJCWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0lOVEVSTkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21zYzkxMXguYyBiL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmMKaW5kZXggNGI0MmVjYy4uYzZkNDdkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21zYzkxMXguYworKysgYi9kcml2ZXJzL25ldC9zbXNjOTExeC5jCkBAIC0yOSw2ICsyOSw4IEBACiAgKgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtNjksNiArNzEsMTcgQEAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMD1ub25lLC4uLiwxNj1hbGwpIik7CiAKK3N0cnVjdCBzbXNjOTExeF9kYXRhOworCitzdHJ1Y3Qgc21zYzkxMXhfb3BzIHsKKwl1MzIgKCpyZWdfcmVhZCkoc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhLCB1MzIgcmVnKTsKKwl2b2lkICgqcmVnX3dyaXRlKShzdHJ1Y3Qgc21zYzkxMXhfZGF0YSAqcGRhdGEsIHUzMiByZWcsIHUzMiB2YWwpOworCXZvaWQgKCpyeF9yZWFkZmlmbykoc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhLAorCQkJCXVuc2lnbmVkIGludCAqYnVmLCB1bnNpZ25lZCBpbnQgd29yZGNvdW50KTsKKwl2b2lkICgqdHhfd3JpdGVmaWZvKShzdHJ1Y3Qgc21zYzkxMXhfZGF0YSAqcGRhdGEsCisJCQkJdW5zaWduZWQgaW50ICpidWYsIHVuc2lnbmVkIGludCB3b3JkY291bnQpOworfTsKKwogc3RydWN0IHNtc2M5MTF4X2RhdGEgewogCXZvaWQgX19pb21lbSAqaW9hZGRyOwogCkBAIC0xMTYsOCArMTI5LDE0IEBACiAJdW5zaWduZWQgaW50IGNsZWFyX2JpdHNfbWFzazsKIAl1bnNpZ25lZCBpbnQgaGFzaGhpOwogCXVuc2lnbmVkIGludCBoYXNobG87CisKKwkvKiByZWdpc3RlciBhY2Nlc3MgZnVuY3Rpb25zICovCisJY29uc3Qgc3RydWN0IHNtc2M5MTF4X29wcyAqb3BzOwogfTsKIAorLyogRWFzeSBhY2Nlc3MgdG8gaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgX19zbXNjX3NoaWZ0KHBkYXRhLCByZWcpICgocmVnKSA8PCAoKHBkYXRhKS0+Y29uZmlnLnNoaWZ0KSkKKwogc3RhdGljIGlubGluZSB1MzIgX19zbXNjOTExeF9yZWdfcmVhZChzdHJ1Y3Qgc21zYzkxMXhfZGF0YSAqcGRhdGEsIHUzMiByZWcpCiB7CiAJaWYgKHBkYXRhLT5jb25maWcuZmxhZ3MgJiBTTVNDOTExWF9VU0VfMzJCSVQpCkBAIC0xMzEsMTMgKzE1MCwyOSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIHUzMgorX19zbXNjOTExeF9yZWdfcmVhZF9zaGlmdChzdHJ1Y3Qgc21zYzkxMXhfZGF0YSAqcGRhdGEsIHUzMiByZWcpCit7CisJaWYgKHBkYXRhLT5jb25maWcuZmxhZ3MgJiBTTVNDOTExWF9VU0VfMzJCSVQpCisJCXJldHVybiByZWFkbChwZGF0YS0+aW9hZGRyICsgX19zbXNjX3NoaWZ0KHBkYXRhLCByZWcpKTsKKworCWlmIChwZGF0YS0+Y29uZmlnLmZsYWdzICYgU01TQzkxMVhfVVNFXzE2QklUKQorCQlyZXR1cm4gKHJlYWR3KHBkYXRhLT5pb2FkZHIgKworCQkJCV9fc21zY19zaGlmdChwZGF0YSwgcmVnKSkgJiAweEZGRkYpIHwKKwkJCSgocmVhZHcocGRhdGEtPmlvYWRkciArCisJCQlfX3Ntc2Nfc2hpZnQocGRhdGEsIHJlZyArIDIpKSAmIDB4RkZGRikgPDwgMTYpOworCisJQlVHKCk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgdTMyIHNtc2M5MTF4X3JlZ19yZWFkKHN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YSwgdTMyIHJlZykKIHsKIAl1MzIgZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBkYXRhLT5kZXZfbG9jaywgZmxhZ3MpOwotCWRhdGEgPSBfX3Ntc2M5MTF4X3JlZ19yZWFkKHBkYXRhLCByZWcpOworCWRhdGEgPSBwZGF0YS0+b3BzLT5yZWdfcmVhZChwZGF0YSwgcmVnKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZGF0YS0+ZGV2X2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiBkYXRhOwpAQCAtMTYwLDEzICsxOTUsMzIgQEAKIAlCVUcoKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkCitfX3Ntc2M5MTF4X3JlZ193cml0ZV9zaGlmdChzdHJ1Y3Qgc21zYzkxMXhfZGF0YSAqcGRhdGEsIHUzMiByZWcsIHUzMiB2YWwpCit7CisJaWYgKHBkYXRhLT5jb25maWcuZmxhZ3MgJiBTTVNDOTExWF9VU0VfMzJCSVQpIHsKKwkJd3JpdGVsKHZhbCwgcGRhdGEtPmlvYWRkciArIF9fc21zY19zaGlmdChwZGF0YSwgcmVnKSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAocGRhdGEtPmNvbmZpZy5mbGFncyAmIFNNU0M5MTFYX1VTRV8xNkJJVCkgeworCQl3cml0ZXcodmFsICYgMHhGRkZGLAorCQkJcGRhdGEtPmlvYWRkciArIF9fc21zY19zaGlmdChwZGF0YSwgcmVnKSk7CisJCXdyaXRldygodmFsID4+IDE2KSAmIDB4RkZGRiwKKwkJCXBkYXRhLT5pb2FkZHIgKyBfX3Ntc2Nfc2hpZnQocGRhdGEsIHJlZyArIDIpKTsKKwkJcmV0dXJuOworCX0KKworCUJVRygpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgc21zYzkxMXhfcmVnX3dyaXRlKHN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YSwgdTMyIHJlZywKIAkJCQkgICAgICB1MzIgdmFsKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGRhdGEtPmRldl9sb2NrLCBmbGFncyk7Ci0JX19zbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIHJlZywgdmFsKTsKKwlwZGF0YS0+b3BzLT5yZWdfd3JpdGUocGRhdGEsIHJlZywgdmFsKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZGF0YS0+ZGV2X2xvY2ssIGZsYWdzKTsKIH0KIApAQCAtMjAyLDYgKzI1Niw0MCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBkYXRhLT5kZXZfbG9jaywgZmxhZ3MpOwogfQogCisvKiBXcml0ZXMgYSBwYWNrZXQgdG8gdGhlIFRYX0RBVEFfRklGTyAtIHNoaWZ0ZWQgdmVyc2lvbiAqLworc3RhdGljIGlubGluZSB2b2lkCitzbXNjOTExeF90eF93cml0ZWZpZm9fc2hpZnQoc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhLCB1bnNpZ25lZCBpbnQgKmJ1ZiwKKwkJICAgICAgdW5zaWduZWQgaW50IHdvcmRjb3VudCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBkYXRhLT5kZXZfbG9jaywgZmxhZ3MpOworCisJaWYgKHBkYXRhLT5jb25maWcuZmxhZ3MgJiBTTVNDOTExWF9TV0FQX0ZJRk8pIHsKKwkJd2hpbGUgKHdvcmRjb3VudC0tKQorCQkJX19zbXNjOTExeF9yZWdfd3JpdGVfc2hpZnQocGRhdGEsIFRYX0RBVEFfRklGTywKKwkJCQkJICAgICBzd2FiMzIoKmJ1ZisrKSk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChwZGF0YS0+Y29uZmlnLmZsYWdzICYgU01TQzkxMVhfVVNFXzMyQklUKSB7CisJCXdyaXRlc2wocGRhdGEtPmlvYWRkciArIF9fc21zY19zaGlmdChwZGF0YSwKKwkJCQkJCVRYX0RBVEFfRklGTyksIGJ1Ziwgd29yZGNvdW50KTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHBkYXRhLT5jb25maWcuZmxhZ3MgJiBTTVNDOTExWF9VU0VfMTZCSVQpIHsKKwkJd2hpbGUgKHdvcmRjb3VudC0tKQorCQkJX19zbXNjOTExeF9yZWdfd3JpdGVfc2hpZnQocGRhdGEsCisJCQkJCQkgVFhfREFUQV9GSUZPLCAqYnVmKyspOworCQlnb3RvIG91dDsKKwl9CisKKwlCVUcoKTsKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZGF0YS0+ZGV2X2xvY2ssIGZsYWdzKTsKK30KKwogLyogUmVhZHMgYSBwYWNrZXQgb3V0IG9mIHRoZSBSWF9EQVRBX0ZJRk8gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAogc21zYzkxMXhfcnhfcmVhZGZpZm8oc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhLCB1bnNpZ25lZCBpbnQgKmJ1ZiwKQEAgLTIzNCw2ICszMjIsNDAgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZGF0YS0+ZGV2X2xvY2ssIGZsYWdzKTsKIH0KIAorLyogUmVhZHMgYSBwYWNrZXQgb3V0IG9mIHRoZSBSWF9EQVRBX0ZJRk8gLSBzaGlmdGVkIHZlcnNpb24gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorc21zYzkxMXhfcnhfcmVhZGZpZm9fc2hpZnQoc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhLCB1bnNpZ25lZCBpbnQgKmJ1ZiwKKwkJICAgICB1bnNpZ25lZCBpbnQgd29yZGNvdW50KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGRhdGEtPmRldl9sb2NrLCBmbGFncyk7CisKKwlpZiAocGRhdGEtPmNvbmZpZy5mbGFncyAmIFNNU0M5MTFYX1NXQVBfRklGTykgeworCQl3aGlsZSAod29yZGNvdW50LS0pCisJCQkqYnVmKysgPSBzd2FiMzIoX19zbXNjOTExeF9yZWdfcmVhZF9zaGlmdChwZGF0YSwKKwkJCQkJCQkgICAgUlhfREFUQV9GSUZPKSk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChwZGF0YS0+Y29uZmlnLmZsYWdzICYgU01TQzkxMVhfVVNFXzMyQklUKSB7CisJCXJlYWRzbChwZGF0YS0+aW9hZGRyICsgX19zbXNjX3NoaWZ0KHBkYXRhLAorCQkJCQkJUlhfREFUQV9GSUZPKSwgYnVmLCB3b3JkY291bnQpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocGRhdGEtPmNvbmZpZy5mbGFncyAmIFNNU0M5MTFYX1VTRV8xNkJJVCkgeworCQl3aGlsZSAod29yZGNvdW50LS0pCisJCQkqYnVmKysgPSBfX3Ntc2M5MTF4X3JlZ19yZWFkX3NoaWZ0KHBkYXRhLAorCQkJCQkJCQlSWF9EQVRBX0ZJRk8pOworCQlnb3RvIG91dDsKKwl9CisKKwlCVUcoKTsKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZGF0YS0+ZGV2X2xvY2ssIGZsYWdzKTsKK30KKwogLyogd2FpdHMgZm9yIE1BQyBub3QgYnVzeSwgd2l0aCB0aW1lb3V0LiAgT25seSBjYWxsZWQgYnkgc21zYzkxMXhfbWFjX3JlYWQKICAqIGFuZCBzbXNjOTExeF9tYWNfd3JpdGUsIHNvIGFzc3VtZXMgbWFjX2xvY2sgaXMgaGVsZCAqLwogc3RhdGljIGludCBzbXNjOTExeF9tYWNfY29tcGxldGUoc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhKQpAQCAtMjQ4LDggKzM3MCw4IEBACiAJCWlmICghKHZhbCAmIE1BQ19DU1JfQ01EX0NTUl9CVVNZXykpCiAJCQlyZXR1cm4gMDsKIAl9Ci0JU01TQ19XQVJOSU5HKEhXLCAiVGltZWQgb3V0IHdhaXRpbmcgZm9yIE1BQyBub3QgQlVTWS4gIgotCQkiTUFDX0NTUl9DTUQ6IDB4JTA4WCIsIHZhbCk7CisJU01TQ19XQVJOKHBkYXRhLCBodywgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBNQUMgbm90IEJVU1kuICIKKwkJICAiTUFDX0NTUl9DTUQ6IDB4JTA4WCIsIHZhbCk7CiAJcmV0dXJuIC1FSU87CiB9CiAKQEAgLTI2Miw3ICszODQsNyBAQAogCiAJdGVtcCA9IHNtc2M5MTF4X3JlZ19yZWFkKHBkYXRhLCBNQUNfQ1NSX0NNRCk7CiAJaWYgKHVubGlrZWx5KHRlbXAgJiBNQUNfQ1NSX0NNRF9DU1JfQlVTWV8pKSB7Ci0JCVNNU0NfV0FSTklORyhIVywgIk1BQyBidXN5IGF0IGVudHJ5Iik7CisJCVNNU0NfV0FSTihwZGF0YSwgaHcsICJNQUMgYnVzeSBhdCBlbnRyeSIpOwogCQlyZXR1cm4gMHhGRkZGRkZGRjsKIAl9CiAKQEAgLTI3Nyw3ICszOTksNyBAQAogCWlmIChsaWtlbHkoc21zYzkxMXhfbWFjX2NvbXBsZXRlKHBkYXRhKSA9PSAwKSkKIAkJcmV0dXJuIHNtc2M5MTF4X3JlZ19yZWFkKHBkYXRhLCBNQUNfQ1NSX0RBVEEpOwogCi0JU01TQ19XQVJOSU5HKEhXLCAiTUFDIGJ1c3kgYWZ0ZXIgcmVhZCIpOworCVNNU0NfV0FSTihwZGF0YSwgaHcsICJNQUMgYnVzeSBhZnRlciByZWFkIik7CiAJcmV0dXJuIDB4RkZGRkZGRkY7CiB9CiAKQEAgLTI5MSw4ICs0MTMsOCBAQAogCiAJdGVtcCA9IHNtc2M5MTF4X3JlZ19yZWFkKHBkYXRhLCBNQUNfQ1NSX0NNRCk7CiAJaWYgKHVubGlrZWx5KHRlbXAgJiBNQUNfQ1NSX0NNRF9DU1JfQlVTWV8pKSB7Ci0JCVNNU0NfV0FSTklORyhIVywKLQkJCSJzbXNjOTExeF9tYWNfd3JpdGUgZmFpbGVkLCBNQUMgYnVzeSBhdCBlbnRyeSIpOworCQlTTVNDX1dBUk4ocGRhdGEsIGh3LAorCQkJICAic21zYzkxMXhfbWFjX3dyaXRlIGZhaWxlZCwgTUFDIGJ1c3kgYXQgZW50cnkiKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzEwLDggKzQzMiw3IEBACiAJaWYgKGxpa2VseShzbXNjOTExeF9tYWNfY29tcGxldGUocGRhdGEpID09IDApKQogCQlyZXR1cm47CiAKLQlTTVNDX1dBUk5JTkcoSFcsCi0JCSJzbXNjOTExeF9tYWNfd3JpdGUgZmFpbGVkLCBNQUMgYnVzeSBhZnRlciB3cml0ZSIpOworCVNNU0NfV0FSTihwZGF0YSwgaHcsICJzbXNjOTExeF9tYWNfd3JpdGUgZmFpbGVkLCBNQUMgYnVzeSBhZnRlciB3cml0ZSIpOwogfQogCiAvKiBHZXQgYSBwaHkgcmVnaXN0ZXIgKi8KQEAgLTMyNiw4ICs0NDcsNyBAQAogCiAJLyogQ29uZmlybSBNSUkgbm90IGJ1c3kgKi8KIAlpZiAodW5saWtlbHkoc21zYzkxMXhfbWFjX3JlYWQocGRhdGEsIE1JSV9BQ0MpICYgTUlJX0FDQ19NSUlfQlVTWV8pKSB7Ci0JCVNNU0NfV0FSTklORyhIVywKLQkJCSJNSUkgaXMgYnVzeSBpbiBzbXNjOTExeF9taWlfcmVhZD8/PyIpOworCQlTTVNDX1dBUk4ocGRhdGEsIGh3LCAiTUlJIGlzIGJ1c3kgaW4gc21zYzkxMXhfbWlpX3JlYWQ/Pz8iKTsKIAkJcmVnID0gLUVJTzsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMzQzLDcgKzQ2Myw3IEBACiAJCQlnb3RvIG91dDsKIAkJfQogCi0JU01TQ19XQVJOSU5HKEhXLCAiVGltZWQgb3V0IHdhaXRpbmcgZm9yIE1JSSByZWFkIHRvIGZpbmlzaCIpOworCVNNU0NfV0FSTihwZGF0YSwgaHcsICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgTUlJIHJlYWQgdG8gZmluaXNoIik7CiAJcmVnID0gLUVJTzsKIAogb3V0OgpAQCAtMzY0LDggKzQ4NCw3IEBACiAKIAkvKiBDb25maXJtIE1JSSBub3QgYnVzeSAqLwogCWlmICh1bmxpa2VseShzbXNjOTExeF9tYWNfcmVhZChwZGF0YSwgTUlJX0FDQykgJiBNSUlfQUNDX01JSV9CVVNZXykpIHsKLQkJU01TQ19XQVJOSU5HKEhXLAotCQkJIk1JSSBpcyBidXN5IGluIHNtc2M5MTF4X21paV93cml0ZT8/PyIpOworCQlTTVNDX1dBUk4ocGRhdGEsIGh3LCAiTUlJIGlzIGJ1c3kgaW4gc21zYzkxMXhfbWlpX3dyaXRlPz8/Iik7CiAJCXJlZyA9IC1FSU87CiAJCWdvdG8gb3V0OwogCX0KQEAgLTM4NSw3ICs1MDQsNyBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAotCVNNU0NfV0FSTklORyhIVywgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBNSUkgd3JpdGUgdG8gZmluaXNoIik7CisJU01TQ19XQVJOKHBkYXRhLCBodywgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBNSUkgd3JpdGUgdG8gZmluaXNoIik7CiAJcmVnID0gLUVJTzsKIAogb3V0OgpAQCAtNDI2LDE4ICs1NDUsMjAgQEAKIAl1bnNpZ25lZCBpbnQgaHdjZmcgPSBzbXNjOTExeF9yZWdfcmVhZChwZGF0YSwgSFdfQ0ZHKTsKIAogCWlmIChwZGF0YS0+Y29uZmlnLmZsYWdzICYgU01TQzkxMVhfRk9SQ0VfSU5URVJOQUxfUEhZKSB7Ci0JCVNNU0NfVFJBQ0UoSFcsICJGb3JjaW5nIGludGVybmFsIFBIWSIpOworCQlTTVNDX1RSQUNFKHBkYXRhLCBodywgIkZvcmNpbmcgaW50ZXJuYWwgUEhZIik7CiAJCXBkYXRhLT51c2luZ19leHRwaHkgPSAwOwogCX0gZWxzZSBpZiAocGRhdGEtPmNvbmZpZy5mbGFncyAmIFNNU0M5MTFYX0ZPUkNFX0VYVEVSTkFMX1BIWSkgewotCQlTTVNDX1RSQUNFKEhXLCAiRm9yY2luZyBleHRlcm5hbCBQSFkiKTsKKwkJU01TQ19UUkFDRShwZGF0YSwgaHcsICJGb3JjaW5nIGV4dGVybmFsIFBIWSIpOwogCQlzbXNjOTExeF9waHlfZW5hYmxlX2V4dGVybmFsKHBkYXRhKTsKIAkJcGRhdGEtPnVzaW5nX2V4dHBoeSA9IDE7CiAJfSBlbHNlIGlmIChod2NmZyAmIEhXX0NGR19FWFRfUEhZX0RFVF8pIHsKLQkJU01TQ19UUkFDRShIVywgIkhXX0NGRyBFWFRfUEhZX0RFVCBzZXQsIHVzaW5nIGV4dGVybmFsIFBIWSIpOworCQlTTVNDX1RSQUNFKHBkYXRhLCBodywKKwkJCSAgICJIV19DRkcgRVhUX1BIWV9ERVQgc2V0LCB1c2luZyBleHRlcm5hbCBQSFkiKTsKIAkJc21zYzkxMXhfcGh5X2VuYWJsZV9leHRlcm5hbChwZGF0YSk7CiAJCXBkYXRhLT51c2luZ19leHRwaHkgPSAxOwogCX0gZWxzZSB7Ci0JCVNNU0NfVFJBQ0UoSFcsICJIV19DRkcgRVhUX1BIWV9ERVQgY2xlYXIsIHVzaW5nIGludGVybmFsIFBIWSIpOworCQlTTVNDX1RSQUNFKHBkYXRhLCBodywKKwkJCSAgICJIV19DRkcgRVhUX1BIWV9ERVQgY2xlYXIsIHVzaW5nIGludGVybmFsIFBIWSIpOwogCQlwZGF0YS0+dXNpbmdfZXh0cGh5ID0gMDsKIAl9CiB9CkBAIC00OTksNyArNjIwLDcgQEAKIAkJd3JzeiArPSAodTMyKSgodWxvbmcpcGRhdGEtPmxvb3BiYWNrX3R4X3BrdCAmIDB4Myk7CiAJCXdyc3ogPj49IDI7CiAKLQkJc21zYzkxMXhfdHhfd3JpdGVmaWZvKHBkYXRhLCAodW5zaWduZWQgaW50ICopYnVmcCwgd3Jzeik7CisJCXBkYXRhLT5vcHMtPnR4X3dyaXRlZmlmbyhwZGF0YSwgKHVuc2lnbmVkIGludCAqKWJ1ZnAsIHdyc3opOwogCiAJCS8qIFdhaXQgdGlsbCB0cmFuc21pdCBpcyBkb25lICovCiAJCWkgPSA2MDsKQEAgLTUwOSwxMyArNjMwLDEzIEBACiAJCX0gd2hpbGUgKChpLS0pICYmICghc3RhdHVzKSk7CiAKIAkJaWYgKCFzdGF0dXMpIHsKLQkJCVNNU0NfV0FSTklORyhIVywgIkZhaWxlZCB0byB0cmFuc21pdCAiCi0JCQkJImR1cmluZyBsb29wYmFjayB0ZXN0Iik7CisJCQlTTVNDX1dBUk4ocGRhdGEsIGh3LAorCQkJCSAgIkZhaWxlZCB0byB0cmFuc21pdCBkdXJpbmcgbG9vcGJhY2sgdGVzdCIpOwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKHN0YXR1cyAmIFRYX1NUU19FU18pIHsKLQkJCVNNU0NfV0FSTklORyhIVywgIlRyYW5zbWl0IGVuY291bnRlcmVkICIKLQkJCQkiZXJyb3JzIGR1cmluZyBsb29wYmFjayB0ZXN0Iik7CisJCQlTTVNDX1dBUk4ocGRhdGEsIGh3LAorCQkJCSAgIlRyYW5zbWl0IGVuY291bnRlcmVkIGVycm9ycyBkdXJpbmcgbG9vcGJhY2sgdGVzdCIpOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtNTI3LDEzICs2NDgsMTMgQEAKIAkJfSB3aGlsZSAoKGktLSkgJiYgKCFzdGF0dXMpKTsKIAogCQlpZiAoIXN0YXR1cykgewotCQkJU01TQ19XQVJOSU5HKEhXLAotCQkJCSJGYWlsZWQgdG8gcmVjZWl2ZSBkdXJpbmcgbG9vcGJhY2sgdGVzdCIpOworCQkJU01TQ19XQVJOKHBkYXRhLCBodywKKwkJCQkgICJGYWlsZWQgdG8gcmVjZWl2ZSBkdXJpbmcgbG9vcGJhY2sgdGVzdCIpOwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKHN0YXR1cyAmIFJYX1NUU19FU18pIHsKLQkJCVNNU0NfV0FSTklORyhIVywgIlJlY2VpdmUgZW5jb3VudGVyZWQgIgotCQkJCSJlcnJvcnMgZHVyaW5nIGxvb3BiYWNrIHRlc3QiKTsKKwkJCVNNU0NfV0FSTihwZGF0YSwgaHcsCisJCQkJICAiUmVjZWl2ZSBlbmNvdW50ZXJlZCBlcnJvcnMgZHVyaW5nIGxvb3BiYWNrIHRlc3QiKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTU0MywxMiArNjY0LDEyIEBACiAJCXJkc3ogKz0gKHUzMikoKHVsb25nKXBkYXRhLT5sb29wYmFja19yeF9wa3QgJiAweDMpOwogCQlyZHN6ID4+PSAyOwogCi0JCXNtc2M5MTF4X3J4X3JlYWRmaWZvKHBkYXRhLCAodW5zaWduZWQgaW50ICopYnVmcCwgcmRzeik7CisJCXBkYXRhLT5vcHMtPnJ4X3JlYWRmaWZvKHBkYXRhLCAodW5zaWduZWQgaW50ICopYnVmcCwgcmRzeik7CiAKIAkJaWYgKHBrdGxlbmd0aCAhPSAoTUlOX1BBQ0tFVF9TSVpFICsgNCkpIHsKLQkJCVNNU0NfV0FSTklORyhIVywgIlVuZXhwZWN0ZWQgcGFja2V0IHNpemUgIgotCQkJCSJkdXJpbmcgbG9vcCBiYWNrIHRlc3QsIHNpemU9JWQsIHdpbGwgcmV0cnkiLAotCQkJCXBrdGxlbmd0aCk7CisJCQlTTVNDX1dBUk4ocGRhdGEsIGh3LCAiVW5leHBlY3RlZCBwYWNrZXQgc2l6ZSAiCisJCQkJICAiZHVyaW5nIGxvb3AgYmFjayB0ZXN0LCBzaXplPSVkLCB3aWxsIHJldHJ5IiwKKwkJCQkgIHBrdGxlbmd0aCk7CiAJCX0gZWxzZSB7CiAJCQl1bnNpZ25lZCBpbnQgajsKIAkJCWludCBtaXNtYXRjaCA9IDA7CkBAIC01NjAsMTIgKzY4MSwxMiBAQAogCQkJCX0KIAkJCX0KIAkJCWlmICghbWlzbWF0Y2gpIHsKLQkJCQlTTVNDX1RSQUNFKEhXLCAiU3VjY2Vzc2Z1bGx5IHZlcmlmaWVkICIKKwkJCQlTTVNDX1RSQUNFKHBkYXRhLCBodywgIlN1Y2Nlc3NmdWxseSB2ZXJpZmllZCAiCiAJCQkJCSAgICJsb29wYmFjayBwYWNrZXQiKTsKIAkJCQlyZXR1cm4gMDsKIAkJCX0gZWxzZSB7Ci0JCQkJU01TQ19XQVJOSU5HKEhXLCAiRGF0YSBtaXNtYXRjaCAiCi0JCQkJCSJkdXJpbmcgbG9vcCBiYWNrIHRlc3QsIHdpbGwgcmV0cnkiKTsKKwkJCQlTTVNDX1dBUk4ocGRhdGEsIGh3LCAiRGF0YSBtaXNtYXRjaCAiCisJCQkJCSAgImR1cmluZyBsb29wIGJhY2sgdGVzdCwgd2lsbCByZXRyeSIpOwogCQkJfQogCQl9CiAJfQpAQCAtNTgyLDcgKzcwMyw3IEBACiAJQlVHX09OKCFwaHlfZGV2KTsKIAlCVUdfT04oIXBoeV9kZXYtPmJ1cyk7CiAKLQlTTVNDX1RSQUNFKEhXLCAiUGVyZm9ybWluZyBQSFkgQkNSIFJlc2V0Iik7CisJU01TQ19UUkFDRShwZGF0YSwgaHcsICJQZXJmb3JtaW5nIFBIWSBCQ1IgUmVzZXQiKTsKIAlzbXNjOTExeF9taWlfd3JpdGUocGh5X2Rldi0+YnVzLCBwaHlfZGV2LT5hZGRyLCBNSUlfQk1DUiwgQk1DUl9SRVNFVCk7CiAJZG8gewogCQltc2xlZXAoMSk7CkBAIC01OTEsNyArNzEyLDcgQEAKIAl9IHdoaWxlICgoaS0tKSAmJiAodGVtcCAmIEJNQ1JfUkVTRVQpKTsKIAogCWlmICh0ZW1wICYgQk1DUl9SRVNFVCkgewotCQlTTVNDX1dBUk5JTkcoSFcsICJQSFkgcmVzZXQgZmFpbGVkIHRvIGNvbXBsZXRlLiIpOworCQlTTVNDX1dBUk4ocGRhdGEsIGh3LCAiUEhZIHJlc2V0IGZhaWxlZCB0byBjb21wbGV0ZSIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJLyogRXh0cmEgZGVsYXkgcmVxdWlyZWQgYmVjYXVzZSB0aGUgcGh5IG1heSBub3QgYmUgY29tcGxldGVkIHdpdGgKQEAgLTY5NSwxMSArODE2LDExIEBACiAJCWVsc2UKIAkJCWFmYyAmPSB+MHhGOwogCi0JCVNNU0NfVFJBQ0UoSFcsICJyeCBwYXVzZSAlcywgdHggcGF1c2UgJXMiLAotCQkJKGNhcCAmIEZMT1dfQ1RSTF9SWCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpLAotCQkJKGNhcCAmIEZMT1dfQ1RSTF9UWCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpKTsKKwkJU01TQ19UUkFDRShwZGF0YSwgaHcsICJyeCBwYXVzZSAlcywgdHggcGF1c2UgJXMiLAorCQkJICAgKGNhcCAmIEZMT1dfQ1RSTF9SWCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpLAorCQkJICAgKGNhcCAmIEZMT1dfQ1RSTF9UWCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpKTsKIAl9IGVsc2UgewotCQlTTVNDX1RSQUNFKEhXLCAiaGFsZiBkdXBsZXgiKTsKKwkJU01TQ19UUkFDRShwZGF0YSwgaHcsICJoYWxmIGR1cGxleCIpOwogCQlmbG93ID0gMDsKIAkJYWZjIHw9IDB4RjsKIAl9CkBAIC03MjIsMTcgKzg0MywxNyBAQAogCiAJaWYgKHBoeV9kZXYtPmR1cGxleCAhPSBwZGF0YS0+bGFzdF9kdXBsZXgpIHsKIAkJdW5zaWduZWQgaW50IG1hY19jcjsKLQkJU01TQ19UUkFDRShIVywgImR1cGxleCBzdGF0ZSBoYXMgY2hhbmdlZCIpOworCQlTTVNDX1RSQUNFKHBkYXRhLCBodywgImR1cGxleCBzdGF0ZSBoYXMgY2hhbmdlZCIpOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwZGF0YS0+bWFjX2xvY2ssIGZsYWdzKTsKIAkJbWFjX2NyID0gc21zYzkxMXhfbWFjX3JlYWQocGRhdGEsIE1BQ19DUik7CiAJCWlmIChwaHlfZGV2LT5kdXBsZXgpIHsKLQkJCVNNU0NfVFJBQ0UoSFcsCi0JCQkJImNvbmZpZ3VyaW5nIGZvciBmdWxsIGR1cGxleCBtb2RlIik7CisJCQlTTVNDX1RSQUNFKHBkYXRhLCBodywKKwkJCQkgICAiY29uZmlndXJpbmcgZm9yIGZ1bGwgZHVwbGV4IG1vZGUiKTsKIAkJCW1hY19jciB8PSBNQUNfQ1JfRkRQWF87CiAJCX0gZWxzZSB7Ci0JCQlTTVNDX1RSQUNFKEhXLAotCQkJCSJjb25maWd1cmluZyBmb3IgaGFsZiBkdXBsZXggbW9kZSIpOworCQkJU01TQ19UUkFDRShwZGF0YSwgaHcsCisJCQkJICAgImNvbmZpZ3VyaW5nIGZvciBoYWxmIGR1cGxleCBtb2RlIik7CiAJCQltYWNfY3IgJj0gfk1BQ19DUl9GRFBYXzsKIAkJfQogCQlzbXNjOTExeF9tYWNfd3JpdGUocGRhdGEsIE1BQ19DUiwgbWFjX2NyKTsKQEAgLTc0NCw5ICs4NjUsOSBAQAogCiAJY2FycmllciA9IG5ldGlmX2NhcnJpZXJfb2soZGV2KTsKIAlpZiAoY2FycmllciAhPSBwZGF0YS0+bGFzdF9jYXJyaWVyKSB7Ci0JCVNNU0NfVFJBQ0UoSFcsICJjYXJyaWVyIHN0YXRlIGhhcyBjaGFuZ2VkIik7CisJCVNNU0NfVFJBQ0UocGRhdGEsIGh3LCAiY2FycmllciBzdGF0ZSBoYXMgY2hhbmdlZCIpOwogCQlpZiAoY2FycmllcikgewotCQkJU01TQ19UUkFDRShIVywgImNvbmZpZ3VyaW5nIGZvciBjYXJyaWVyIE9LIik7CisJCQlTTVNDX1RSQUNFKHBkYXRhLCBodywgImNvbmZpZ3VyaW5nIGZvciBjYXJyaWVyIE9LIik7CiAJCQlpZiAoKHBkYXRhLT5ncGlvX29yaWdfc2V0dGluZyAmIEdQSU9fQ0ZHX0xFRDFfRU5fKSAmJgogCQkJICAgICghcGRhdGEtPnVzaW5nX2V4dHBoeSkpIHsKIAkJCQkvKiBSZXN0b3JlIG9yaWdpbmFsIEdQSU8gY29uZmlndXJhdGlvbiAqLwpAQCAtNzU1LDcgKzg3Niw3IEBACiAJCQkJCXBkYXRhLT5ncGlvX3NldHRpbmcpOwogCQkJfQogCQl9IGVsc2UgewotCQkJU01TQ19UUkFDRShIVywgImNvbmZpZ3VyaW5nIGZvciBubyBjYXJyaWVyIik7CisJCQlTTVNDX1RSQUNFKHBkYXRhLCBodywgImNvbmZpZ3VyaW5nIGZvciBubyBjYXJyaWVyIik7CiAJCQkvKiBDaGVjayBnbG9iYWwgc2V0dGluZyB0aGF0IExFRDEKIAkJCSAqIHVzYWdlIGlzIDEwLzEwMCBpbmRpY2F0b3IgKi8KIAkJCXBkYXRhLT5ncGlvX3NldHRpbmcgPSBzbXNjOTExeF9yZWdfcmVhZChwZGF0YSwKQEAgLTc4NywyNSArOTA4LDI1IEBACiAJLyogZmluZCB0aGUgZmlyc3QgcGh5ICovCiAJcGh5ZGV2ID0gcGh5X2ZpbmRfZmlyc3QocGRhdGEtPm1paV9idXMpOwogCWlmICghcGh5ZGV2KSB7Ci0JCXByX2VycigiJXM6IG5vIFBIWSBmb3VuZFxuIiwgZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihkZXYsICJubyBQSFkgZm91bmRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlTTVNDX1RSQUNFKFBST0JFLCAiUEhZOiBhZGRyICVkLCBwaHlfaWQgMHglMDhYIiwKLQkJCXBoeWRldi0+YWRkciwgcGh5ZGV2LT5waHlfaWQpOworCVNNU0NfVFJBQ0UocGRhdGEsIHByb2JlLCAiUEhZOiBhZGRyICVkLCBwaHlfaWQgMHglMDhYIiwKKwkJICAgcGh5ZGV2LT5hZGRyLCBwaHlkZXYtPnBoeV9pZCk7CiAKIAlyZXQgPSBwaHlfY29ubmVjdF9kaXJlY3QoZGV2LCBwaHlkZXYsCiAJCQkmc21zYzkxMXhfcGh5X2FkanVzdF9saW5rLCAwLAogCQkJcGRhdGEtPmNvbmZpZy5waHlfaW50ZXJmYWNlKTsKIAogCWlmIChyZXQpIHsKLQkJcHJfZXJyKCIlczogQ291bGQgbm90IGF0dGFjaCB0byBQSFlcbiIsIGRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIoZGV2LCAiQ291bGQgbm90IGF0dGFjaCB0byBQSFlcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCXByX2luZm8oIiVzOiBhdHRhY2hlZCBQSFkgZHJpdmVyIFslc10gKG1paV9idXM6cGh5X2FkZHI9JXMsIGlycT0lZClcbiIsCi0JCWRldi0+bmFtZSwgcGh5ZGV2LT5kcnYtPm5hbWUsCi0JCWRldl9uYW1lKCZwaHlkZXYtPmRldiksIHBoeWRldi0+aXJxKTsKKwluZXRkZXZfaW5mbyhkZXYsCisJCSAgICAiYXR0YWNoZWQgUEhZIGRyaXZlciBbJXNdIChtaWlfYnVzOnBoeV9hZGRyPSVzLCBpcnE9JWQpXG4iLAorCQkgICAgcGh5ZGV2LT5kcnYtPm5hbWUsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksIHBoeWRldi0+aXJxKTsKIAogCS8qIG1hc2sgd2l0aCBNQUMgc3VwcG9ydGVkIGZlYXR1cmVzICovCiAJcGh5ZGV2LT5zdXBwb3J0ZWQgJj0gKFBIWV9CQVNJQ19GRUFUVVJFUyB8IFNVUFBPUlRFRF9QYXVzZSB8CkBAIC04MTgsMTMgKzkzOSwxMyBAQAogCiAjaWZkZWYgVVNFX1BIWV9XT1JLX0FST1VORAogCWlmIChzbXNjOTExeF9waHlfbG9vcGJhY2t0ZXN0KGRldikgPCAwKSB7Ci0JCVNNU0NfV0FSTklORyhIVywgIkZhaWxlZCBMb29wIEJhY2sgVGVzdCIpOworCQlTTVNDX1dBUk4ocGRhdGEsIGh3LCAiRmFpbGVkIExvb3AgQmFjayBUZXN0Iik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLQlTTVNDX1RSQUNFKEhXLCAiUGFzc2VkIExvb3AgQmFjayBUZXN0Iik7CisJU01TQ19UUkFDRShwZGF0YSwgaHcsICJQYXNzZWQgTG9vcCBCYWNrIFRlc3QiKTsKICNlbmRpZgkJCQkvKiBVU0VfUEhZX1dPUktfQVJPVU5EICovCiAKLQlTTVNDX1RSQUNFKEhXLCAicGh5IGluaXRpYWxpc2VkIHN1Y2Nlc3NmdWxseSIpOworCVNNU0NfVFJBQ0UocGRhdGEsIGh3LCAicGh5IGluaXRpYWxpc2VkIHN1Y2Nlc3NmdWxseSIpOwogCXJldHVybiAwOwogfQogCkBAIC04NjAsOCArOTgxLDggQEAKIAkJc21zYzkxMXhfcGh5X2luaXRpYWxpc2VfZXh0ZXJuYWwocGRhdGEpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlTTVNDX1RSQUNFKEhXLCAiRXh0ZXJuYWwgUEhZIGlzIG5vdCBzdXBwb3J0ZWQsICIKLQkJCSJ1c2luZyBpbnRlcm5hbCBQSFkiKTsKKwkJU01TQ19UUkFDRShwZGF0YSwgaHcsICJFeHRlcm5hbCBQSFkgaXMgbm90IHN1cHBvcnRlZCwgIgorCQkJICAgInVzaW5nIGludGVybmFsIFBIWSIpOwogCQlwZGF0YS0+dXNpbmdfZXh0cGh5ID0gMDsKIAkJYnJlYWs7CiAJfQpAQCAtODcyLDEyICs5OTMsMTIgQEAKIAl9CiAKIAlpZiAobWRpb2J1c19yZWdpc3RlcihwZGF0YS0+bWlpX2J1cykpIHsKLQkJU01TQ19XQVJOSU5HKFBST0JFLCAiRXJyb3IgcmVnaXN0ZXJpbmcgbWlpIGJ1cyIpOworCQlTTVNDX1dBUk4ocGRhdGEsIHByb2JlLCAiRXJyb3IgcmVnaXN0ZXJpbmcgbWlpIGJ1cyIpOwogCQlnb3RvIGVycl9vdXRfZnJlZV9idXNfMjsKIAl9CiAKIAlpZiAoc21zYzkxMXhfbWlpX3Byb2JlKGRldikgPCAwKSB7Ci0JCVNNU0NfV0FSTklORyhQUk9CRSwgIkVycm9yIHJlZ2lzdGVyaW5nIG1paSBidXMiKTsKKwkJU01TQ19XQVJOKHBkYXRhLCBwcm9iZSwgIkVycm9yIHJlZ2lzdGVyaW5nIG1paSBidXMiKTsKIAkJZ290byBlcnJfb3V0X3VucmVnaXN0ZXJfYnVzXzM7CiAJfQogCkBAIC05MTMsOCArMTAzNCw3IEBACiAJCQkgKiBkb2VzIG5vdCByZWZlcmVuY2UgYSBoYXJkd2FyZSBkZWZpbmVkIHJlc2VydmVkIGJpdAogCQkJICogYnV0IHJhdGhlciBhIGRyaXZlciBkZWZpbmVkIG9uZS4KIAkJCSAqLwotCQkJU01TQ19XQVJOSU5HKEhXLAotCQkJCSJQYWNrZXQgdGFnIHJlc2VydmVkIGJpdCBpcyBoaWdoIik7CisJCQlTTVNDX1dBUk4ocGRhdGEsIGh3LCAiUGFja2V0IHRhZyByZXNlcnZlZCBiaXQgaXMgaGlnaCIpOwogCQl9IGVsc2UgewogCQkJaWYgKHVubGlrZWx5KHR4X3N0YXQgJiBUWF9TVFNfRVNfKSkgewogCQkJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CkBAIC05NzcsOCArMTA5Nyw4IEBACiAJCX0gd2hpbGUgKCh2YWwgJiBSWF9EUF9DVFJMX1JYX0ZGV0RfKSAmJiAtLXRpbWVvdXQpOwogCiAJCWlmICh1bmxpa2VseSh0aW1lb3V0ID09IDApKQotCQkJU01TQ19XQVJOSU5HKEhXLCAiVGltZWQgb3V0IHdhaXRpbmcgZm9yICIKLQkJCQkiUlggRkZXRCB0byBmaW5pc2gsIFJYX0RQX0NUUkw6IDB4JTA4WCIsIHZhbCk7CisJCQlTTVNDX1dBUk4ocGRhdGEsIGh3LCAiVGltZWQgb3V0IHdhaXRpbmcgZm9yICIKKwkJCQkgICJSWCBGRldEIHRvIGZpbmlzaCwgUlhfRFBfQ1RSTDogMHglMDhYIiwgdmFsKTsKIAl9IGVsc2UgewogCQl1bnNpZ25lZCBpbnQgdGVtcDsKIAkJd2hpbGUgKHBrdHdvcmRzLS0pCkBAIC0xMDIxLDggKzExNDEsOCBAQAogCQlzbXNjOTExeF9yeF9jb3VudGVycm9ycyhkZXYsIHJ4c3RhdCk7CiAKIAkJaWYgKHVubGlrZWx5KHJ4c3RhdCAmIFJYX1NUU19FU18pKSB7Ci0JCQlTTVNDX1dBUk5JTkcoUlhfRVJSLAotCQkJCSJEaXNjYXJkaW5nIHBhY2tldCB3aXRoIGVycm9yIGJpdCBzZXQiKTsKKwkJCVNNU0NfV0FSTihwZGF0YSwgcnhfZXJyLAorCQkJCSAgIkRpc2NhcmRpbmcgcGFja2V0IHdpdGggZXJyb3IgYml0IHNldCIpOwogCQkJLyogUGFja2V0IGhhcyBhbiBlcnJvciwgZGlzY2FyZCBpdCBhbmQgY29udGludWUgd2l0aAogCQkJICogdGhlIG5leHQgKi8KIAkJCXNtc2M5MTF4X3J4X2Zhc3Rmb3J3YXJkKHBkYXRhLCBwa3R3b3Jkcyk7CkBAIC0xMDMyLDggKzExNTIsOCBAQAogCiAJCXNrYiA9IG5ldGRldl9hbGxvY19za2IoZGV2LCBwa3RsZW5ndGggKyBORVRfSVBfQUxJR04pOwogCQlpZiAodW5saWtlbHkoIXNrYikpIHsKLQkJCVNNU0NfV0FSTklORyhSWF9FUlIsCi0JCQkJIlVuYWJsZSB0byBhbGxvY2F0ZSBza2IgZm9yIHJ4IHBhY2tldCIpOworCQkJU01TQ19XQVJOKHBkYXRhLCByeF9lcnIsCisJCQkJICAiVW5hYmxlIHRvIGFsbG9jYXRlIHNrYiBmb3IgcnggcGFja2V0Iik7CiAJCQkvKiBEcm9wIHRoZSBwYWNrZXQgYW5kIHN0b3AgdGhpcyBwb2xsaW5nIGl0ZXJhdGlvbiAqLwogCQkJc21zYzkxMXhfcnhfZmFzdGZvcndhcmQocGRhdGEsIHBrdHdvcmRzKTsKIAkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwpAQCAtMTA0Niw4ICsxMTY2LDggQEAKIAkJLyogQWxpZ24gSVAgb24gMTZCIGJvdW5kYXJ5ICovCiAJCXNrYl9yZXNlcnZlKHNrYiwgTkVUX0lQX0FMSUdOKTsKIAkJc2tiX3B1dChza2IsIHBrdGxlbmd0aCAtIDQpOwotCQlzbXNjOTExeF9yeF9yZWFkZmlmbyhwZGF0YSwgKHVuc2lnbmVkIGludCAqKXNrYi0+aGVhZCwKLQkJCQkgICAgIHBrdHdvcmRzKTsKKwkJcGRhdGEtPm9wcy0+cnhfcmVhZGZpZm8ocGRhdGEsCisJCQkJICh1bnNpZ25lZCBpbnQgKilza2ItPmhlYWQsIHBrdHdvcmRzKTsKIAkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAkJc2tiX2NoZWNrc3VtX25vbmVfYXNzZXJ0KHNrYik7CiAJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CkBAIC0xMDgzLDggKzEyMDMsOCBAQAogCXNtc2M5MTF4X21hY193cml0ZShwZGF0YSwgTUFDX0NSLCBtYWNfY3IpOwogCXNtc2M5MTF4X21hY193cml0ZShwZGF0YSwgSEFTSEgsIHBkYXRhLT5oYXNoaGkpOwogCXNtc2M5MTF4X21hY193cml0ZShwZGF0YSwgSEFTSEwsIHBkYXRhLT5oYXNobG8pOwotCVNNU0NfVFJBQ0UoSFcsICJtYWNjciAweCUwOFgsIEhBU0hIIDB4JTA4WCwgSEFTSEwgMHglMDhYIiwKLQkJbWFjX2NyLCBwZGF0YS0+aGFzaGhpLCBwZGF0YS0+aGFzaGxvKTsKKwlTTVNDX1RSQUNFKHBkYXRhLCBodywgIm1hY2NyIDB4JTA4WCwgSEFTSEggMHglMDhYLCBIQVNITCAweCUwOFgiLAorCQkgICBtYWNfY3IsIHBkYXRhLT5oYXNoaGksIHBkYXRhLT5oYXNobG8pOwogfQogCiBzdGF0aWMgdm9pZCBzbXNjOTExeF9yeF9tdWx0aWNhc3RfdXBkYXRlX3dvcmthcm91bmQoc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhKQpAQCAtMTEwMiw3ICsxMjIyLDcgQEAKIAogCS8qIENoZWNrIFJ4IGhhcyBzdG9wcGVkICovCiAJaWYgKHNtc2M5MTF4X21hY19yZWFkKHBkYXRhLCBNQUNfQ1IpICYgTUFDX0NSX1JYRU5fKQotCQlTTVNDX1dBUk5JTkcoRFJWLCAiUnggbm90IHN0b3BwZWQiKTsKKwkJU01TQ19XQVJOKHBkYXRhLCBkcnYsICJSeCBub3Qgc3RvcHBlZCIpOwogCiAJLyogUGVyZm9ybSB0aGUgdXBkYXRlIC0gc2FmZSB0byBkbyBub3cgUnggaGFzIHN0b3BwZWQgKi8KIAlzbXNjOTExeF9yeF9tdWx0aWNhc3RfdXBkYXRlKHBkYXRhKTsKQEAgLTExMzEsNyArMTI1MSw3IEBACiAJfSB3aGlsZSAoKC0tdGltZW91dCkgJiYgKHRlbXAgJiBIV19DRkdfU1JTVF8pKTsKIAogCWlmICh1bmxpa2VseSh0ZW1wICYgSFdfQ0ZHX1NSU1RfKSkgewotCQlTTVNDX1dBUk5JTkcoRFJWLCAiRmFpbGVkIHRvIGNvbXBsZXRlIHJlc2V0Iik7CisJCVNNU0NfV0FSTihwZGF0YSwgZHJ2LCAiRmFpbGVkIHRvIGNvbXBsZXRlIHJlc2V0Iik7CiAJCXJldHVybiAtRUlPOwogCX0KIAlyZXR1cm4gMDsKQEAgLTExNjAsMTggKzEyODAsMTggQEAKIAogCS8qIGlmIHRoZSBwaHkgaXMgbm90IHlldCByZWdpc3RlcmVkLCByZXRyeSBsYXRlciovCiAJaWYgKCFwZGF0YS0+cGh5X2RldikgewotCQlTTVNDX1dBUk5JTkcoSFcsICJwaHlfZGV2IGlzIE5VTEwiKTsKKwkJU01TQ19XQVJOKHBkYXRhLCBodywgInBoeV9kZXYgaXMgTlVMTCIpOwogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcikpIHsKLQkJU01TQ19XQVJOSU5HKEhXLCAiZGV2X2FkZHIgaXMgbm90IGEgdmFsaWQgTUFDIGFkZHJlc3MiKTsKKwkJU01TQ19XQVJOKHBkYXRhLCBodywgImRldl9hZGRyIGlzIG5vdCBhIHZhbGlkIE1BQyBhZGRyZXNzIik7CiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIAl9CiAKIAkvKiBSZXNldCB0aGUgTEFOOTExeCAqLwogCWlmIChzbXNjOTExeF9zb2Z0X3Jlc2V0KHBkYXRhKSkgewotCQlTTVNDX1dBUk5JTkcoSFcsICJzb2Z0IHJlc2V0IGZhaWxlZCIpOworCQlTTVNDX1dBUk4ocGRhdGEsIGh3LCAic29mdCByZXNldCBmYWlsZWQiKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0xMTkxLDggKzEzMTEsOCBAQAogCX0KIAogCWlmICh1bmxpa2VseSh0aW1lb3V0ID09IDApKQotCQlTTVNDX1dBUk5JTkcoSUZVUCwKLQkJCSJUaW1lZCBvdXQgd2FpdGluZyBmb3IgRUVQUk9NIGJ1c3kgYml0IHRvIGNsZWFyIik7CisJCVNNU0NfV0FSTihwZGF0YSwgaWZ1cCwKKwkJCSAgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBFRVBST00gYnVzeSBiaXQgdG8gY2xlYXIiKTsKIAogCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgR1BJT19DRkcsIDB4NzAwNzAwMDApOwogCkBAIC0xMjEwLDIyICsxMzMwLDIyIEBACiAJaW50Y2ZnID0gKCgxMCA8PCAyNCkgfCBJTlRfQ0ZHX0lSUV9FTl8pOwogCiAJaWYgKHBkYXRhLT5jb25maWcuaXJxX3BvbGFyaXR5KSB7Ci0JCVNNU0NfVFJBQ0UoSUZVUCwgImlycSBwb2xhcml0eTogYWN0aXZlIGhpZ2giKTsKKwkJU01TQ19UUkFDRShwZGF0YSwgaWZ1cCwgImlycSBwb2xhcml0eTogYWN0aXZlIGhpZ2giKTsKIAkJaW50Y2ZnIHw9IElOVF9DRkdfSVJRX1BPTF87CiAJfSBlbHNlIHsKLQkJU01TQ19UUkFDRShJRlVQLCAiaXJxIHBvbGFyaXR5OiBhY3RpdmUgbG93Iik7CisJCVNNU0NfVFJBQ0UocGRhdGEsIGlmdXAsICJpcnEgcG9sYXJpdHk6IGFjdGl2ZSBsb3ciKTsKIAl9CiAKIAlpZiAocGRhdGEtPmNvbmZpZy5pcnFfdHlwZSkgewotCQlTTVNDX1RSQUNFKElGVVAsICJpcnEgdHlwZTogcHVzaC1wdWxsIik7CisJCVNNU0NfVFJBQ0UocGRhdGEsIGlmdXAsICJpcnEgdHlwZTogcHVzaC1wdWxsIik7CiAJCWludGNmZyB8PSBJTlRfQ0ZHX0lSUV9UWVBFXzsKIAl9IGVsc2UgewotCQlTTVNDX1RSQUNFKElGVVAsICJpcnEgdHlwZTogb3BlbiBkcmFpbiIpOworCQlTTVNDX1RSQUNFKHBkYXRhLCBpZnVwLCAiaXJxIHR5cGU6IG9wZW4gZHJhaW4iKTsKIAl9CiAKIAlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIElOVF9DRkcsIGludGNmZyk7CiAKLQlTTVNDX1RSQUNFKElGVVAsICJUZXN0aW5nIGlycSBoYW5kbGVyIHVzaW5nIElSUSAlZCIsIGRldi0+aXJxKTsKKwlTTVNDX1RSQUNFKHBkYXRhLCBpZnVwLCAiVGVzdGluZyBpcnEgaGFuZGxlciB1c2luZyBJUlEgJWQiLCBkZXYtPmlycSk7CiAJcGRhdGEtPnNvZnR3YXJlX2lycV9zaWduYWwgPSAwOwogCXNtcF93bWIoKTsKIApAQCAtMTI0MSwxNCArMTM2MSwxNSBAQAogCX0KIAogCWlmICghcGRhdGEtPnNvZnR3YXJlX2lycV9zaWduYWwpIHsKLQkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiSVNSIGZhaWxlZCBzaWduYWxpbmcgdGVzdCAoSVJRICVkKVxuIiwKLQkJCSBkZXYtPmlycSk7CisJCW5ldGRldl93YXJuKGRldiwgIklTUiBmYWlsZWQgc2lnbmFsaW5nIHRlc3QgKElSUSAlZClcbiIsCisJCQkgICAgZGV2LT5pcnEpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JU01TQ19UUkFDRShJRlVQLCAiSVJRIGhhbmRsZXIgcGFzc2VkIHRlc3QgdXNpbmcgSVJRICVkIiwgZGV2LT5pcnEpOworCVNNU0NfVFJBQ0UocGRhdGEsIGlmdXAsICJJUlEgaGFuZGxlciBwYXNzZWQgdGVzdCB1c2luZyBJUlEgJWQiLAorCQkgICBkZXYtPmlycSk7CiAKLQlkZXZfaW5mbygmZGV2LT5kZXYsICJTTVNDOTExeC85MjF4IGlkZW50aWZpZWQgYXQgJSMwOGx4LCBJUlE6ICVkXG4iLAotCQkgKHVuc2lnbmVkIGxvbmcpcGRhdGEtPmlvYWRkciwgZGV2LT5pcnEpOworCW5ldGRldl9pbmZvKGRldiwgIlNNU0M5MTF4LzkyMXggaWRlbnRpZmllZCBhdCAlIzA4bHgsIElSUTogJWRcbiIsCisJCSAgICAodW5zaWduZWQgbG9uZylwZGF0YS0+aW9hZGRyLCBkZXYtPmlycSk7CiAKIAkvKiBSZXNldCB0aGUgbGFzdCBrbm93biBkdXBsZXggYW5kIGNhcnJpZXIgKi8KIAlwZGF0YS0+bGFzdF9kdXBsZXggPSAtMTsKQEAgLTEzMTMsNyArMTQzNCw3IEBACiAJaWYgKHBkYXRhLT5waHlfZGV2KQogCQlwaHlfc3RvcChwZGF0YS0+cGh5X2Rldik7CiAKLQlTTVNDX1RSQUNFKElGRE9XTiwgIkludGVyZmFjZSBzdG9wcGVkIik7CisJU01TQ19UUkFDRShwZGF0YSwgaWZkb3duLCAiSW50ZXJmYWNlIHN0b3BwZWQiKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTMzMSw4ICsxNDUyLDggQEAKIAlmcmVlc3BhY2UgPSBzbXNjOTExeF9yZWdfcmVhZChwZGF0YSwgVFhfRklGT19JTkYpICYgVFhfRklGT19JTkZfVERGUkVFXzsKIAogCWlmICh1bmxpa2VseShmcmVlc3BhY2UgPCBUWF9GSUZPX0xPV19USFJFU0hPTEQpKQotCQlTTVNDX1dBUk5JTkcoVFhfRVJSLAotCQkJIlR4IGRhdGEgZmlmbyBsb3csIHNwYWNlIGF2YWlsYWJsZTogJWQiLCBmcmVlc3BhY2UpOworCQlTTVNDX1dBUk4ocGRhdGEsIHR4X2VyciwKKwkJCSAgIlR4IGRhdGEgZmlmbyBsb3csIHNwYWNlIGF2YWlsYWJsZTogJWQiLCBmcmVlc3BhY2UpOwogCiAJLyogV29yZCBhbGlnbm1lbnQgYWRqdXN0bWVudCAqLwogCXR4X2NtZF9hID0gKHUzMikoKHVsb25nKXNrYi0+ZGF0YSAmIDB4MDMpIDw8IDE2OwpAQCAtMTM1MCw3ICsxNDcxLDcgQEAKIAl3cnN6ICs9ICh1MzIpKCh1bG9uZylza2ItPmRhdGEgJiAweDMpOwogCXdyc3ogPj49IDI7CiAKLQlzbXNjOTExeF90eF93cml0ZWZpZm8ocGRhdGEsICh1bnNpZ25lZCBpbnQgKilidWZwLCB3cnN6KTsKKwlwZGF0YS0+b3BzLT50eF93cml0ZWZpZm8ocGRhdGEsICh1bnNpZ25lZCBpbnQgKilidWZwLCB3cnN6KTsKIAlmcmVlc3BhY2UgLT0gKHNrYi0+bGVuICsgMzIpOwogCWRldl9rZnJlZV9za2Ioc2tiKTsKIApAQCAtMTQzMiw3ICsxNTUzLDcgQEAKIAkJICogcmVjZWl2aW5nIGRhdGEgKi8KIAkJaWYgKCFwZGF0YS0+bXVsdGljYXN0X3VwZGF0ZV9wZW5kaW5nKSB7CiAJCQl1bnNpZ25lZCBpbnQgdGVtcDsKLQkJCVNNU0NfVFJBQ0UoSFcsICJzY2hlZHVsaW5nIG1jYXN0IHVwZGF0ZSIpOworCQkJU01TQ19UUkFDRShwZGF0YSwgaHcsICJzY2hlZHVsaW5nIG1jYXN0IHVwZGF0ZSIpOwogCQkJcGRhdGEtPm11bHRpY2FzdF91cGRhdGVfcGVuZGluZyA9IDE7CiAKIAkJCS8qIFJlcXVlc3QgdGhlIGhhcmR3YXJlIHRvIHN0b3AsIHRoZW4gcGVyZm9ybSB0aGUKQEAgLTE0NzQsNyArMTU5NSw3IEBACiAJaWYgKHVubGlrZWx5KGludHN0cyAmIGludGVuICYgSU5UX1NUU19SWFNUT1BfSU5UXykpIHsKIAkJLyogQ2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBtdWx0aWNhc3QgdXBkYXRlIHNjaGVkdWxlZCBhbmQKIAkJICogaXQgaXMgbm93IHNhZmUgdG8gY29tcGxldGUgdGhlIHVwZGF0ZSAqLwotCQlTTVNDX1RSQUNFKElOVFIsICJSWCBTdG9wIGludGVycnVwdCIpOworCQlTTVNDX1RSQUNFKHBkYXRhLCBpbnRyLCAiUlggU3RvcCBpbnRlcnJ1cHQiKTsKIAkJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBJTlRfU1RTLCBJTlRfU1RTX1JYU1RPUF9JTlRfKTsKIAkJaWYgKHBkYXRhLT5tdWx0aWNhc3RfdXBkYXRlX3BlbmRpbmcpCiAJCQlzbXNjOTExeF9yeF9tdWx0aWNhc3RfdXBkYXRlX3dvcmthcm91bmQocGRhdGEpOwpAQCAtMTQ5MSw3ICsxNjEyLDcgQEAKIAl9CiAKIAlpZiAodW5saWtlbHkoaW50c3RzICYgaW50ZW4gJiBJTlRfU1RTX1JYRV8pKSB7Ci0JCVNNU0NfVFJBQ0UoSU5UUiwgIlJYIEVycm9yIGludGVycnVwdCIpOworCQlTTVNDX1RSQUNFKHBkYXRhLCBpbnRyLCAiUlggRXJyb3IgaW50ZXJydXB0Iik7CiAJCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSU5UX1NUUywgSU5UX1NUU19SWEVfKTsKIAkJc2VydmljZWQgPSBJUlFfSEFORExFRDsKIAl9CkBAIC0xNTA1LDggKzE2MjYsNyBAQAogCQkJLyogU2NoZWR1bGUgYSBOQVBJIHBvbGwgKi8KIAkJCV9fbmFwaV9zY2hlZHVsZSgmcGRhdGEtPm5hcGkpOwogCQl9IGVsc2UgewotCQkJU01TQ19XQVJOSU5HKFJYX0VSUiwKLQkJCQkibmFwaV9zY2hlZHVsZV9wcmVwIGZhaWxlZCIpOworCQkJU01TQ19XQVJOKHBkYXRhLCByeF9lcnIsICJuYXBpX3NjaGVkdWxlX3ByZXAgZmFpbGVkIik7CiAJCX0KIAkJc2VydmljZWQgPSBJUlFfSEFORExFRDsKIAl9CkBAIC0xNTQzLDcgKzE2NjMsNyBAQAogCXNtc2M5MTF4X3NldF9od19tYWNfYWRkcmVzcyhwZGF0YSwgZGV2LT5kZXZfYWRkcik7CiAJc3Bpbl91bmxvY2tfaXJxKCZwZGF0YS0+bWFjX2xvY2spOwogCi0JZGV2X2luZm8oJmRldi0+ZGV2LCAiTUFDIEFkZHJlc3M6ICVwTVxuIiwgZGV2LT5kZXZfYWRkcik7CisJbmV0ZGV2X2luZm8oZGV2LCAiTUFDIEFkZHJlc3M6ICVwTVxuIiwgZGV2LT5kZXZfYWRkcik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE2NDksOSArMTc2OSw5IEBACiAJaW50IHRpbWVvdXQgPSAxMDA7CiAJdTMyIGUyY21kOwogCi0JU01TQ19UUkFDRShEUlYsICJvcCAweCUwOHgiLCBvcCk7CisJU01TQ19UUkFDRShwZGF0YSwgZHJ2LCAib3AgMHglMDh4Iiwgb3ApOwogCWlmIChzbXNjOTExeF9yZWdfcmVhZChwZGF0YSwgRTJQX0NNRCkgJiBFMlBfQ01EX0VQQ19CVVNZXykgewotCQlTTVNDX1dBUk5JTkcoRFJWLCAiQnVzeSBhdCBzdGFydCIpOworCQlTTVNDX1dBUk4ocGRhdGEsIGRydiwgIkJ1c3kgYXQgc3RhcnQiKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKQEAgLTE2NjQsMTIgKzE3ODQsMTIgQEAKIAl9IHdoaWxlICgoZTJjbWQgJiBFMlBfQ01EX0VQQ19CVVNZXykgJiYgKC0tdGltZW91dCkpOwogCiAJaWYgKCF0aW1lb3V0KSB7Ci0JCVNNU0NfVFJBQ0UoRFJWLCAiVElNRUQgT1VUIik7CisJCVNNU0NfVFJBQ0UocGRhdGEsIGRydiwgIlRJTUVEIE9VVCIpOwogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAKIAlpZiAoZTJjbWQgJiBFMlBfQ01EX0VQQ19USU1FT1VUXykgewotCQlTTVNDX1RSQUNFKERSViwgIkVycm9yIG9jY3VycmVkIGR1cmluZyBlZXByb20gb3BlcmF0aW9uIik7CisJCVNNU0NfVFJBQ0UocGRhdGEsIGRydiwgIkVycm9yIG9jY3VycmVkIGR1cmluZyBlZXByb20gb3BlcmF0aW9uIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTY4Miw3ICsxODAyLDcgQEAKIAl1MzIgb3AgPSBFMlBfQ01EX0VQQ19DTURfUkVBRF8gfCBhZGRyZXNzOwogCWludCByZXQ7CiAKLQlTTVNDX1RSQUNFKERSViwgImFkZHJlc3MgMHgleCIsIGFkZHJlc3MpOworCVNNU0NfVFJBQ0UocGRhdGEsIGRydiwgImFkZHJlc3MgMHgleCIsIGFkZHJlc3MpOwogCXJldCA9IHNtc2M5MTF4X2VlcHJvbV9zZW5kX2NtZChwZGF0YSwgb3ApOwogCiAJaWYgKCFyZXQpCkBAIC0xNjk4LDcgKzE4MTgsNyBAQAogCXUzMiB0ZW1wOwogCWludCByZXQ7CiAKLQlTTVNDX1RSQUNFKERSViwgImFkZHJlc3MgMHgleCwgZGF0YSAweCV4IiwgYWRkcmVzcywgZGF0YSk7CisJU01TQ19UUkFDRShwZGF0YSwgZHJ2LCAiYWRkcmVzcyAweCV4LCBkYXRhIDB4JXgiLCBhZGRyZXNzLCBkYXRhKTsKIAlyZXQgPSBzbXNjOTExeF9lZXByb21fc2VuZF9jbWQocGRhdGEsIG9wKTsKIAogCWlmICghcmV0KSB7CkBAIC0xODExLDI2ICsxOTMxLDI2IEBACiAJc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBpbnQgYnl0ZV90ZXN0OwogCi0JU01TQ19UUkFDRShQUk9CRSwgIkRyaXZlciBQYXJhbWV0ZXJzOiIpOwotCVNNU0NfVFJBQ0UoUFJPQkUsICJMQU4gYmFzZTogMHglMDhsWCIsCi0JCSh1bnNpZ25lZCBsb25nKXBkYXRhLT5pb2FkZHIpOwotCVNNU0NfVFJBQ0UoUFJPQkUsICJJUlE6ICVkIiwgZGV2LT5pcnEpOwotCVNNU0NfVFJBQ0UoUFJPQkUsICJQSFkgd2lsbCBiZSBhdXRvZGV0ZWN0ZWQuIik7CisJU01TQ19UUkFDRShwZGF0YSwgcHJvYmUsICJEcml2ZXIgUGFyYW1ldGVyczoiKTsKKwlTTVNDX1RSQUNFKHBkYXRhLCBwcm9iZSwgIkxBTiBiYXNlOiAweCUwOGxYIiwKKwkJICAgKHVuc2lnbmVkIGxvbmcpcGRhdGEtPmlvYWRkcik7CisJU01TQ19UUkFDRShwZGF0YSwgcHJvYmUsICJJUlE6ICVkIiwgZGV2LT5pcnEpOworCVNNU0NfVFJBQ0UocGRhdGEsIHByb2JlLCAiUEhZIHdpbGwgYmUgYXV0b2RldGVjdGVkLiIpOwogCiAJc3Bpbl9sb2NrX2luaXQoJnBkYXRhLT5kZXZfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnBkYXRhLT5tYWNfbG9jayk7CiAKIAlpZiAocGRhdGEtPmlvYWRkciA9PSAwKSB7Ci0JCVNNU0NfV0FSTklORyhQUk9CRSwgInBkYXRhLT5pb2FkZHI6IDB4MDAwMDAwMDAiKTsKKwkJU01TQ19XQVJOKHBkYXRhLCBwcm9iZSwgInBkYXRhLT5pb2FkZHI6IDB4MDAwMDAwMDAiKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJLyogQ2hlY2sgYnl0ZSBvcmRlcmluZyAqLwogCWJ5dGVfdGVzdCA9IHNtc2M5MTF4X3JlZ19yZWFkKHBkYXRhLCBCWVRFX1RFU1QpOwotCVNNU0NfVFJBQ0UoUFJPQkUsICJCWVRFX1RFU1Q6IDB4JTA4WCIsIGJ5dGVfdGVzdCk7CisJU01TQ19UUkFDRShwZGF0YSwgcHJvYmUsICJCWVRFX1RFU1Q6IDB4JTA4WCIsIGJ5dGVfdGVzdCk7CiAJaWYgKGJ5dGVfdGVzdCA9PSAweDQzMjE4NzY1KSB7Ci0JCVNNU0NfVFJBQ0UoUFJPQkUsICJCWVRFX1RFU1QgbG9va3Mgc3dhcHBlZCwgIgotCQkJImFwcGx5aW5nIFdPUkRfU1dBUCIpOworCQlTTVNDX1RSQUNFKHBkYXRhLCBwcm9iZSwgIkJZVEVfVEVTVCBsb29rcyBzd2FwcGVkLCAiCisJCQkgICAiYXBwbHlpbmcgV09SRF9TV0FQIik7CiAJCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgV09SRF9TV0FQLCAweGZmZmZmZmZmKTsKIAogCQkvKiAxIGR1bW15IHJlYWQgb2YgQllURV9URVNUIGlzIG5lZWRlZCBhZnRlciBhIHdyaXRlIHRvCkBAIC0xODQxLDEyICsxOTYxLDEzIEBACiAJfQogCiAJaWYgKGJ5dGVfdGVzdCAhPSAweDg3NjU0MzIxKSB7Ci0JCVNNU0NfV0FSTklORyhEUlYsICJCWVRFX1RFU1Q6IDB4JTA4WCIsIGJ5dGVfdGVzdCk7CisJCVNNU0NfV0FSTihwZGF0YSwgZHJ2LCAiQllURV9URVNUOiAweCUwOFgiLCBieXRlX3Rlc3QpOwogCQlpZiAoKChieXRlX3Rlc3QgPj4gMTYpICYgMHhGRkZGKSA9PSAoYnl0ZV90ZXN0ICYgMHhGRkZGKSkgewotCQkJU01TQ19XQVJOSU5HKFBST0JFLAotCQkJCSJ0b3AgMTYgYml0cyBlcXVhbCB0byBib3R0b20gMTYgYml0cyIpOwotCQkJU01TQ19UUkFDRShQUk9CRSwgIlRoaXMgbWF5IG1lYW4gdGhlIGNoaXAgaXMgc2V0ICIKLQkJCQkiZm9yIDMyIGJpdCB3aGlsZSB0aGUgYnVzIGlzIHJlYWRpbmcgMTYgYml0Iik7CisJCQlTTVNDX1dBUk4ocGRhdGEsIHByb2JlLAorCQkJCSAgInRvcCAxNiBiaXRzIGVxdWFsIHRvIGJvdHRvbSAxNiBiaXRzIik7CisJCQlTTVNDX1RSQUNFKHBkYXRhLCBwcm9iZSwKKwkJCQkgICAiVGhpcyBtYXkgbWVhbiB0aGUgY2hpcCBpcyBzZXQgIgorCQkJCSAgICJmb3IgMzIgYml0IHdoaWxlIHRoZSBidXMgaXMgcmVhZGluZyAxNiBiaXQiKTsKIAkJfQogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC0xODgxLDE3ICsyMDAyLDE4IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJU01TQ19XQVJOSU5HKFBST0JFLCAiTEFOOTExeCBub3QgaWRlbnRpZmllZCwgaWRyZXY6IDB4JTA4WCIsCi0JCQlwZGF0YS0+aWRyZXYpOworCQlTTVNDX1dBUk4ocGRhdGEsIHByb2JlLCAiTEFOOTExeCBub3QgaWRlbnRpZmllZCwgaWRyZXY6IDB4JTA4WCIsCisJCQkgIHBkYXRhLT5pZHJldik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCVNNU0NfVFJBQ0UoUFJPQkUsICJMQU45MTF4IGlkZW50aWZpZWQsIGlkcmV2OiAweCUwOFgsIGdlbmVyYXRpb246ICVkIiwKLQkJcGRhdGEtPmlkcmV2LCBwZGF0YS0+Z2VuZXJhdGlvbik7CisJU01TQ19UUkFDRShwZGF0YSwgcHJvYmUsCisJCSAgICJMQU45MTF4IGlkZW50aWZpZWQsIGlkcmV2OiAweCUwOFgsIGdlbmVyYXRpb246ICVkIiwKKwkJICAgcGRhdGEtPmlkcmV2LCBwZGF0YS0+Z2VuZXJhdGlvbik7CiAKIAlpZiAocGRhdGEtPmdlbmVyYXRpb24gPT0gMCkKLQkJU01TQ19XQVJOSU5HKFBST0JFLAotCQkJIlRoaXMgZHJpdmVyIGlzIG5vdCBpbnRlbmRlZCBmb3IgdGhpcyBjaGlwIHJldmlzaW9uIik7CisJCVNNU0NfV0FSTihwZGF0YSwgcHJvYmUsCisJCQkgICJUaGlzIGRyaXZlciBpcyBub3QgaW50ZW5kZWQgZm9yIHRoaXMgY2hpcCByZXZpc2lvbiIpOwogCiAJLyogd29ya2Fyb3VuZCBmb3IgcGxhdGZvcm1zIHdpdGhvdXQgYW4gZWVwcm9tLCB3aGVyZSB0aGUgbWFjIGFkZHJlc3MKIAkgKiBpcyBzdG9yZWQgZWxzZXdoZXJlIGFuZCBzZXQgYnkgdGhlIGJvb3Rsb2FkZXIuICBUaGlzIHNhdmVzIHRoZQpAQCAtMTkzMSw3ICsyMDUzLDcgQEAKIAlCVUdfT04oIXBkYXRhLT5pb2FkZHIpOwogCUJVR19PTighcGRhdGEtPnBoeV9kZXYpOwogCi0JU01TQ19UUkFDRShJRkRPV04sICJTdG9wcGluZyBkcml2ZXIuIik7CisJU01TQ19UUkFDRShwZGF0YSwgaWZkb3duLCAiU3RvcHBpbmcgZHJpdmVyIik7CiAKIAlwaHlfZGlzY29ubmVjdChwZGF0YS0+cGh5X2Rldik7CiAJcGRhdGEtPnBoeV9kZXYgPSBOVUxMOwpAQCAtMTk1NSw2ICsyMDc3LDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIHN0YW5kYXJkIHJlZ2lzdGVyIGFjY2VzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNtc2M5MTF4X29wcyBzdGFuZGFyZF9zbXNjOTExeF9vcHMgPSB7CisJLnJlZ19yZWFkID0gX19zbXNjOTExeF9yZWdfcmVhZCwKKwkucmVnX3dyaXRlID0gX19zbXNjOTExeF9yZWdfd3JpdGUsCisJLnJ4X3JlYWRmaWZvID0gc21zYzkxMXhfcnhfcmVhZGZpZm8sCisJLnR4X3dyaXRlZmlmbyA9IHNtc2M5MTF4X3R4X3dyaXRlZmlmbywKK307CisKKy8qIHNoaWZ0ZWQgcmVnaXN0ZXIgYWNjZXNzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNtc2M5MTF4X29wcyBzaGlmdGVkX3Ntc2M5MTF4X29wcyA9IHsKKwkucmVnX3JlYWQgPSBfX3Ntc2M5MTF4X3JlZ19yZWFkX3NoaWZ0LAorCS5yZWdfd3JpdGUgPSBfX3Ntc2M5MTF4X3JlZ193cml0ZV9zaGlmdCwKKwkucnhfcmVhZGZpZm8gPSBzbXNjOTExeF9yeF9yZWFkZmlmb19zaGlmdCwKKwkudHhfd3JpdGVmaWZvID0gc21zYzkxMXhfdHhfd3JpdGVmaWZvX3NoaWZ0LAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgc21zYzkxMXhfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTE5NjUsMTEgKzIxMDMsMTEgQEAKIAlpbnQgcmVzX3NpemUsIGlycV9mbGFnczsKIAlpbnQgcmV0dmFsOwogCi0JcHJfaW5mbygiJXM6IERyaXZlciB2ZXJzaW9uICVzLlxuIiwgU01TQ19DSElQTkFNRSwgU01TQ19EUlZfVkVSU0lPTik7CisJcHJfaW5mbygiRHJpdmVyIHZlcnNpb24gJXNcbiIsIFNNU0NfRFJWX1ZFUlNJT04pOwogCiAJLyogcGxhdGZvcm0gZGF0YSBzcGVjaWZpZXMgaXJxICYgZHluYW1pYyBidXMgY29uZmlndXJhdGlvbiAqLwogCWlmICghcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpIHsKLQkJcHJfd2FybmluZygiJXM6IHBsYXRmb3JtX2RhdGEgbm90IHByb3ZpZGVkXG4iLCBTTVNDX0NISVBOQU1FKTsKKwkJcHJfd2FybigicGxhdGZvcm1fZGF0YSBub3QgcHJvdmlkZWRcbiIpOwogCQlyZXR2YWwgPSAtRU5PREVWOwogCQlnb3RvIG91dF8wOwogCX0KQEAgLTE5NzksOCArMjExNyw3IEBACiAJaWYgKCFyZXMpCiAJCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFyZXMpIHsKLQkJcHJfd2FybmluZygiJXM6IENvdWxkIG5vdCBhbGxvY2F0ZSByZXNvdXJjZS5cbiIsCi0JCQlTTVNDX0NISVBOQU1FKTsKKwkJcHJfd2FybigiQ291bGQgbm90IGFsbG9jYXRlIHJlc291cmNlXG4iKTsKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAkJZ290byBvdXRfMDsKIAl9CkBAIC0xOTg4LDggKzIxMjUsNyBAQAogCiAJaXJxX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CiAJaWYgKCFpcnFfcmVzKSB7Ci0JCXByX3dhcm5pbmcoIiVzOiBDb3VsZCBub3QgYWxsb2NhdGUgaXJxIHJlc291cmNlLlxuIiwKLQkJCVNNU0NfQ0hJUE5BTUUpOworCQlwcl93YXJuKCJDb3VsZCBub3QgYWxsb2NhdGUgaXJxIHJlc291cmNlXG4iKTsKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAkJZ290byBvdXRfMDsKIAl9CkBAIC0yMDAxLDcgKzIxMzcsNyBAQAogCiAJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBzbXNjOTExeF9kYXRhKSk7CiAJaWYgKCFkZXYpIHsKLQkJcHJfd2FybmluZygiJXM6IENvdWxkIG5vdCBhbGxvY2F0ZSBkZXZpY2UuXG4iLCBTTVNDX0NISVBOQU1FKTsKKwkJcHJfd2FybigiQ291bGQgbm90IGFsbG9jYXRlIGRldmljZVxuIik7CiAJCXJldHZhbCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X3JlbGVhc2VfaW9fMTsKIAl9CkBAIC0yMDIxLDEyICsyMTU3LDE3IEBACiAJcGRhdGEtPm1zZ19lbmFibGUgPSAoKDEgPDwgZGVidWcpIC0gMSk7CiAKIAlpZiAocGRhdGEtPmlvYWRkciA9PSBOVUxMKSB7Ci0JCVNNU0NfV0FSTklORyhQUk9CRSwKLQkJCSJFcnJvciBzbXNjOTExeCBiYXNlIGFkZHJlc3MgaW52YWxpZCIpOworCQlTTVNDX1dBUk4ocGRhdGEsIHByb2JlLCAiRXJyb3Igc21zYzkxMXggYmFzZSBhZGRyZXNzIGludmFsaWQiKTsKIAkJcmV0dmFsID0gLUVOT01FTTsKIAkJZ290byBvdXRfZnJlZV9uZXRkZXZfMjsKIAl9CiAKKwkvKiBhc3N1bWUgc3RhbmRhcmQsIG5vbi1zaGlmdGVkLCBhY2Nlc3MgdG8gSFcgcmVnaXN0ZXJzICovCisJcGRhdGEtPm9wcyA9ICZzdGFuZGFyZF9zbXNjOTExeF9vcHM7CisJLyogYXBwbHkgdGhlIHJpZ2h0IGFjY2VzcyBpZiBzaGlmdGluZyBpcyBuZWVkZWQgKi8KKwlpZiAoY29uZmlnLT5zaGlmdCkKKwkJcGRhdGEtPm9wcyA9ICZzaGlmdGVkX3Ntc2M5MTF4X29wczsKKwogCXJldHZhbCA9IHNtc2M5MTF4X2luaXQoZGV2KTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBvdXRfdW5tYXBfaW9fMzsKQEAgLTIwNDcsOCArMjE4OCw4IEBACiAJcmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIHNtc2M5MTF4X2lycWhhbmRsZXIsCiAJCQkgICAgIGlycV9mbGFncyB8IElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldik7CiAJaWYgKHJldHZhbCkgewotCQlTTVNDX1dBUk5JTkcoUFJPQkUsCi0JCQkiVW5hYmxlIHRvIGNsYWltIHJlcXVlc3RlZCBpcnE6ICVkIiwgZGV2LT5pcnEpOworCQlTTVNDX1dBUk4ocGRhdGEsIHByb2JlLAorCQkJICAiVW5hYmxlIHRvIGNsYWltIHJlcXVlc3RlZCBpcnE6ICVkIiwgZGV2LT5pcnEpOwogCQlnb3RvIG91dF91bm1hcF9pb18zOwogCX0KIApAQCAtMjA1NiwxNyArMjE5NywxNiBAQAogCiAJcmV0dmFsID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKHJldHZhbCkgewotCQlTTVNDX1dBUk5JTkcoUFJPQkUsCi0JCQkiRXJyb3IgJWkgcmVnaXN0ZXJpbmcgZGV2aWNlIiwgcmV0dmFsKTsKKwkJU01TQ19XQVJOKHBkYXRhLCBwcm9iZSwgIkVycm9yICVpIHJlZ2lzdGVyaW5nIGRldmljZSIsIHJldHZhbCk7CiAJCWdvdG8gb3V0X3Vuc2V0X2RydmRhdGFfNDsKIAl9IGVsc2UgewotCQlTTVNDX1RSQUNFKFBST0JFLCAiTmV0d29yayBpbnRlcmZhY2U6IFwiJXNcIiIsIGRldi0+bmFtZSk7CisJCVNNU0NfVFJBQ0UocGRhdGEsIHByb2JlLAorCQkJICAgIk5ldHdvcmsgaW50ZXJmYWNlOiBcIiVzXCIiLCBkZXYtPm5hbWUpOwogCX0KIAogCXJldHZhbCA9IHNtc2M5MTF4X21paV9pbml0KHBkZXYsIGRldik7CiAJaWYgKHJldHZhbCkgewotCQlTTVNDX1dBUk5JTkcoUFJPQkUsCi0JCQkiRXJyb3IgJWkgaW5pdGlhbGlzaW5nIG1paSIsIHJldHZhbCk7CisJCVNNU0NfV0FSTihwZGF0YSwgcHJvYmUsICJFcnJvciAlaSBpbml0aWFsaXNpbmcgbWlpIiwgcmV0dmFsKTsKIAkJZ290byBvdXRfdW5yZWdpc3Rlcl9uZXRkZXZfNTsKIAl9CiAKQEAgLTIwNzUsMTAgKzIyMTUsMTIgQEAKIAkvKiBDaGVjayBpZiBtYWMgYWRkcmVzcyBoYXMgYmVlbiBzcGVjaWZpZWQgd2hlbiBicmluZ2luZyBpbnRlcmZhY2UgdXAgKi8KIAlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKSkgewogCQlzbXNjOTExeF9zZXRfaHdfbWFjX2FkZHJlc3MocGRhdGEsIGRldi0+ZGV2X2FkZHIpOwotCQlTTVNDX1RSQUNFKFBST0JFLCAiTUFDIEFkZHJlc3MgaXMgc3BlY2lmaWVkIGJ5IGNvbmZpZ3VyYXRpb24iKTsKKwkJU01TQ19UUkFDRShwZGF0YSwgcHJvYmUsCisJCQkgICAiTUFDIEFkZHJlc3MgaXMgc3BlY2lmaWVkIGJ5IGNvbmZpZ3VyYXRpb24iKTsKIAl9IGVsc2UgaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIocGRhdGEtPmNvbmZpZy5tYWMpKSB7CiAJCW1lbWNweShkZXYtPmRldl9hZGRyLCBwZGF0YS0+Y29uZmlnLm1hYywgNik7Ci0JCVNNU0NfVFJBQ0UoUFJPQkUsICJNQUMgQWRkcmVzcyBzcGVjaWZpZWQgYnkgcGxhdGZvcm0gZGF0YSIpOworCQlTTVNDX1RSQUNFKHBkYXRhLCBwcm9iZSwKKwkJCSAgICJNQUMgQWRkcmVzcyBzcGVjaWZpZWQgYnkgcGxhdGZvcm0gZGF0YSIpOwogCX0gZWxzZSB7CiAJCS8qIFRyeSByZWFkaW5nIG1hYyBhZGRyZXNzIGZyb20gZGV2aWNlLiBpZiBFRVBST00gaXMgcHJlc2VudAogCQkgKiBpdCB3aWxsIGFscmVhZHkgaGF2ZSBiZWVuIHNldCAqLwpAQCAtMjA4NiwyMCArMjIyOCwyMCBAQAogCiAJCWlmIChpc192YWxpZF9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpKSB7CiAJCQkvKiBlZXByb20gdmFsdWVzIGFyZSB2YWxpZCAgc28gdXNlIHRoZW0gKi8KLQkJCVNNU0NfVFJBQ0UoUFJPQkUsCi0JCQkJIk1hYyBBZGRyZXNzIGlzIHJlYWQgZnJvbSBMQU45MTF4IEVFUFJPTSIpOworCQkJU01TQ19UUkFDRShwZGF0YSwgcHJvYmUsCisJCQkJICAgIk1hYyBBZGRyZXNzIGlzIHJlYWQgZnJvbSBMQU45MTF4IEVFUFJPTSIpOwogCQl9IGVsc2UgewogCQkJLyogZWVwcm9tIHZhbHVlcyBhcmUgaW52YWxpZCwgZ2VuZXJhdGUgcmFuZG9tIE1BQyAqLwogCQkJcmFuZG9tX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcik7CiAJCQlzbXNjOTExeF9zZXRfaHdfbWFjX2FkZHJlc3MocGRhdGEsIGRldi0+ZGV2X2FkZHIpOwotCQkJU01TQ19UUkFDRShQUk9CRSwKLQkJCQkiTUFDIEFkZHJlc3MgaXMgc2V0IHRvIHJhbmRvbV9ldGhlcl9hZGRyIik7CisJCQlTTVNDX1RSQUNFKHBkYXRhLCBwcm9iZSwKKwkJCQkgICAiTUFDIEFkZHJlc3MgaXMgc2V0IHRvIHJhbmRvbV9ldGhlcl9hZGRyIik7CiAJCX0KIAl9CiAKIAlzcGluX3VubG9ja19pcnEoJnBkYXRhLT5tYWNfbG9jayk7CiAKLQlkZXZfaW5mbygmZGV2LT5kZXYsICJNQUMgQWRkcmVzczogJXBNXG4iLCBkZXYtPmRldl9hZGRyKTsKKwluZXRkZXZfaW5mbyhkZXYsICJNQUMgQWRkcmVzczogJXBNXG4iLCBkZXYtPmRldl9hZGRyKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbXNjOTExeC5oIGIvZHJpdmVycy9uZXQvc21zYzkxMXguaAppbmRleCA1MGY3MTJlLi44ZDY3YWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbXNjOTExeC5oCisrKyBiL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmgKQEAgLTMzLDI1ICszMywyMSBAQAogICogY2FuIGJlIHN1Y2Nlc3NmdWxseSBsb29wZWQgYmFjayAqLwogI2RlZmluZSBVU0VfUEhZX1dPUktfQVJPVU5ECiAKLSNkZWZpbmUgRFBSSU5USyhubGV2ZWwsIGtsZXZlbCwgZm10LCBhcmdzLi4uKSBcCi0JKCh2b2lkKSgoTkVUSUZfTVNHXyMjbmxldmVsICYgcGRhdGEtPm1zZ19lbmFibGUpICYmIFwKLQlwcmludGsoS0VSTl8jI2tsZXZlbCAiJXM6ICVzOiAiIGZtdCAiXG4iLCBcCi0JcGRhdGEtPmRldi0+bmFtZSwgX19mdW5jX18sICMjIGFyZ3MpKSkKLQogI2lmIFVTRV9ERUJVRyA+PSAxCi0jZGVmaW5lIFNNU0NfV0FSTklORyhubGV2ZWwsIGZtdCwgYXJncy4uLikgXAotCURQUklOVEsobmxldmVsLCBXQVJOSU5HLCBmbXQsICMjIGFyZ3MpCisjZGVmaW5lIFNNU0NfV0FSTihwZGF0YSwgbmxldmVsLCBmbXQsIGFyZ3MuLi4pCQkJXAorCW5ldGlmX3dhcm4ocGRhdGEsIG5sZXZlbCwgKHBkYXRhKS0+ZGV2LAkJCVwKKwkJICAgIiVzOiAiIGZtdCAiXG4iLCBfX2Z1bmNfXywgIyNhcmdzKQogI2Vsc2UKLSNkZWZpbmUgU01TQ19XQVJOSU5HKG5sZXZlbCwgZm10LCBhcmdzLi4uKSBcCi0JKHsgZG8ge30gd2hpbGUgKDApOyAwOyB9KQorI2RlZmluZSBTTVNDX1dBUk4ocGRhdGEsIG5sZXZlbCwgZm10LCBhcmdzLi4uKQkJCVwKKwlub19wcmludGsoZm10ICJcbiIsICMjYXJncykKICNlbmRpZgogCiAjaWYgVVNFX0RFQlVHID49IDIKLSNkZWZpbmUgU01TQ19UUkFDRShubGV2ZWwsIGZtdCwgYXJncy4uLikgXAotCURQUklOVEsobmxldmVsLCBJTkZPLCBmbXQsICMjIGFyZ3MpCisjZGVmaW5lIFNNU0NfVFJBQ0UocGRhdGEsIG5sZXZlbCwgZm10LCBhcmdzLi4uKQkJCVwKKwluZXRpZl9pbmZvKHBkYXRhLCBubGV2ZWwsIHBkYXRhLT5kZXYsIGZtdCAiXG4iLCAjI2FyZ3MpCiAjZWxzZQotI2RlZmluZSBTTVNDX1RSQUNFKG5sZXZlbCwgZm10LCBhcmdzLi4uKSBcCi0JKHsgZG8ge30gd2hpbGUgKDApOyAwOyB9KQorI2RlZmluZSBTTVNDX1RSQUNFKHBkYXRhLCBubGV2ZWwsIGZtdCwgYXJncy4uLikJCQlcCisJbm9fcHJpbnRrKGZtdCAiXG4iLCAjI2FyZ3MpCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19ERUJVR19TUElOTE9DSwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jIGIvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jCmluZGV4IGNiNmJjY2EuLjk0OWYxMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYworKysgYi9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMKQEAgLTk5NCwxNSArOTk0LDEzIEBACiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmV0ZGV2KTsKIAogCS8qIGNoZWNrc3VtIG9mZmxvYWQgKi8KLQlpZiAoY2FyZC0+b3B0aW9ucy5yeF9jc3VtKSB7CisJc2tiX2NoZWNrc3VtX25vbmVfYXNzZXJ0KHNrYik7CisJaWYgKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkgewogCQlpZiAoICggKGRhdGFfc3RhdHVzICYgU1BJREVSX05FVF9EQVRBX1NUQVRVU19DS1NVTV9NQVNLKSA9PQogCQkgICAgICAgU1BJREVSX05FVF9EQVRBX1NUQVRVU19DS1NVTV9NQVNLKSAmJgogCQkgICAgICEoZGF0YV9lcnJvciAmIFNQSURFUl9ORVRfREFUQV9FUlJfQ0tTVU1fTUFTSykpCiAJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCQllbHNlCi0JCQlza2JfY2hlY2tzdW1fbm9uZV9hc3NlcnQoc2tiKTsKLQl9IGVsc2UKLQkJc2tiX2NoZWNrc3VtX25vbmVfYXNzZXJ0KHNrYik7CisJfQogCiAJaWYgKGRhdGFfc3RhdHVzICYgU1BJREVSX05FVF9WTEFOX1BBQ0tFVCkgewogCQkvKiBmdXJ0aGVyIGVuaGFuY2VtZW50czogSFctYWNjZWwgVkxBTgpAQCAtMjMyMiwxNCArMjMyMCwxNSBAQAogCWNhcmQtPmFuZWdfdGltZXIuZnVuY3Rpb24gPSBzcGlkZXJfbmV0X2xpbmtfcGh5OwogCWNhcmQtPmFuZWdfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBjYXJkOwogCi0JY2FyZC0+b3B0aW9ucy5yeF9jc3VtID0gU1BJREVSX05FVF9SWF9DU1VNX0RFRkFVTFQ7Ci0KIAluZXRpZl9uYXBpX2FkZChuZXRkZXYsICZjYXJkLT5uYXBpLAogCQkgICAgICAgc3BpZGVyX25ldF9wb2xsLCBTUElERVJfTkVUX05BUElfV0VJR0hUKTsKIAogCXNwaWRlcl9uZXRfc2V0dXBfbmV0ZGV2X29wcyhuZXRkZXYpOwogCi0JbmV0ZGV2LT5mZWF0dXJlcyA9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfTExUWDsKKwluZXRkZXYtPmh3X2ZlYXR1cmVzID0gTkVUSUZfRl9SWENTVU0gfCBORVRJRl9GX0lQX0NTVU07CisJaWYgKFNQSURFUl9ORVRfUlhfQ1NVTV9ERUZBVUxUKQorCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfUlhDU1VNOworCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9MTFRYOwogCS8qIHNvbWUgdGltZTogTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYIHwKIAkgKgkJTkVUSUZfRl9IV19WTEFOX0ZJTFRFUiAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmggYi9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmgKaW5kZXggMDVmNzRjYi4uMDIwZjY0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5oCisrKyBiL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuaApAQCAtNDI5LDEyICs0MjksNiBAQAogICogNzAxYjgwMDAgd291bGQgYmUgY29ycmVjdCwgYnV0IGV2ZXJ5IHBhY2tldHMgZ2V0cyB0aGF0IGZsYWcgKi8KICNkZWZpbmUgU1BJREVSX05FVF9ERVNUUk9ZX1JYX0ZMQUdTCTB4NzAwYjgwMDAKIAotLyogdGhpcyB3aWxsIGJlIGJpZ2dlciBzb21lIHRpbWUgKi8KLXN0cnVjdCBzcGlkZXJfbmV0X29wdGlvbnMgewotCWludCByeF9jc3VtOyAvKiBmb3Igcng6IGlmIDAgaXBfc3VtbWVkPU5PTkUsCi0JCQlpZiAxIGFuZCBodyBoYXMgdmVyaWZpZWQsIGlwX3N1bW1lZD1VTk5FQ0VTU0FSWSAqLwotfTsKLQogI2RlZmluZSBTUElERVJfTkVUX0RFRkFVTFRfTVNHCQkoIE5FVElGX01TR19EUlYgfCBcCiAJCQkJCSAgTkVUSUZfTVNHX1BST0JFIHwgXAogCQkJCQkgIE5FVElGX01TR19MSU5LIHwgXApAQCAtNDg3LDcgKzQ4MSw2IEBACiAJLyogZm9yIGV0aHRvb2wgKi8KIAlpbnQgbXNnX2VuYWJsZTsKIAlzdHJ1Y3Qgc3BpZGVyX25ldF9leHRyYV9zdGF0cyBzcGlkZXJfc3RhdHM7Ci0Jc3RydWN0IHNwaWRlcl9uZXRfb3B0aW9ucyBvcHRpb25zOwogCiAJLyogTXVzdCBiZSBsYXN0IGl0ZW0gaW4gc3RydWN0ICovCiAJc3RydWN0IHNwaWRlcl9uZXRfZGVzY3IgZGFycmF5WzBdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3BpZGVyX25ldF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9zcGlkZXJfbmV0X2V0aHRvb2wuYwppbmRleCA1YmFlNzI4Li45YzI4OGNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zcGlkZXJfbmV0X2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9zcGlkZXJfbmV0X2V0aHRvb2wuYwpAQCAtNTgsNyArNTgsNyBAQAogCWNtZC0+YWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCB8CiAJCQkgICAgIEFEVkVSVElTRURfRklCUkUpOwogCWNtZC0+cG9ydCA9IFBPUlRfRklCUkU7Ci0JY21kLT5zcGVlZCA9IGNhcmQtPnBoeS5zcGVlZDsKKwlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCBjYXJkLT5waHkuc3BlZWQpOwogCWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CiAKIAlyZXR1cm4gMDsKQEAgLTExNSwyNCArMTE1LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHUzMgotc3BpZGVyX25ldF9ldGh0b29sX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCi17Ci0Jc3RydWN0IHNwaWRlcl9uZXRfY2FyZCAqY2FyZCA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0KLQlyZXR1cm4gY2FyZC0+b3B0aW9ucy5yeF9jc3VtOwotfQotCi1zdGF0aWMgaW50Ci1zcGlkZXJfbmV0X2V0aHRvb2xfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIG4pCi17Ci0Jc3RydWN0IHNwaWRlcl9uZXRfY2FyZCAqY2FyZCA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0KLQljYXJkLT5vcHRpb25zLnJ4X2NzdW0gPSBuOwotCXJldHVybiAwOwotfQotCi0KIHN0YXRpYyB2b2lkCiBzcGlkZXJfbmV0X2V0aHRvb2xfZ2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJCSBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKmVyaW5nKQpAQCAtMTg5LDkgKzE3MSw2IEBACiAJLnNldF9tc2dsZXZlbAkJPSBzcGlkZXJfbmV0X2V0aHRvb2xfc2V0X21zZ2xldmVsLAogCS5nZXRfbGluawkJPSBldGh0b29sX29wX2dldF9saW5rLAogCS5ud2F5X3Jlc2V0CQk9IHNwaWRlcl9uZXRfZXRodG9vbF9ud2F5X3Jlc2V0LAotCS5nZXRfcnhfY3N1bQkJPSBzcGlkZXJfbmV0X2V0aHRvb2xfZ2V0X3J4X2NzdW0sCi0JLnNldF9yeF9jc3VtCQk9IHNwaWRlcl9uZXRfZXRodG9vbF9zZXRfcnhfY3N1bSwKLQkuc2V0X3R4X2NzdW0JCT0gZXRodG9vbF9vcF9zZXRfdHhfY3N1bSwKIAkuZ2V0X3JpbmdwYXJhbSAgICAgICAgICA9IHNwaWRlcl9uZXRfZXRodG9vbF9nZXRfcmluZ3BhcmFtLAogCS5nZXRfc3RyaW5ncwkJPSBzcGlkZXJfbmV0X2dldF9zdHJpbmdzLAogCS5nZXRfc3NldF9jb3VudAkJPSBzcGlkZXJfbmV0X2dldF9zc2V0X2NvdW50LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjMTAwMF9jb3JlLmMgYi9kcml2ZXJzL25ldC9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYwppbmRleCA2YWU0YzNmLi5mMjA0NTVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYworKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYwpAQCAtMTc4LDEwICsxNzgsMTEgQEAKIHsKIAl1bnNpZ25lZCBpbnQgcG10ID0gMDsKIAotCWlmIChtb2RlID09IFdBS0VfTUFHSUMpIHsKKwlpZiAobW9kZSAmIFdBS0VfTUFHSUMpIHsKIAkJQ0hJUF9EQkcoS0VSTl9ERUJVRyAiR01BQzogV09MIE1hZ2ljIGZyYW1lXG4iKTsKIAkJcG10IHw9IHBvd2VyX2Rvd24gfCBtYWdpY19wa3RfZW47Ci0JfSBlbHNlIGlmIChtb2RlID09IFdBS0VfVUNBU1QpIHsKKwl9CisJaWYgKG1vZGUgJiBXQUtFX1VDQVNUKSB7CiAJCUNISVBfREJHKEtFUk5fREVCVUcgIkdNQUM6IFdPTCBvbiBnbG9iYWwgdW5pY2FzdFxuIik7CiAJCXBtdCB8PSBnbG9iYWxfdW5pY2FzdDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjLmggYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjLmgKaW5kZXggNWYwNmM0Ny4uMmIwNzZiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hYy5oCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWMuaApAQCAtMjEsNyArMjEsNiBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIk5vdl8yMDEwIgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0bW1hYy5oPgogCiAjaW5jbHVkZSAiY29tbW9uLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jCmluZGV4IGZkNzE5ZWQuLmFlNTIxM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jCkBAIC0xOTcsMTMgKzE5Nyw2IEBACiAJfQogfQogCi1zdGF0aWMgdTMyIHN0bW1hY19ldGh0b29sX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybiBwcml2LT5yeF9jb2U7Ci19Ci0KIHN0YXRpYyB2b2lkCiBzdG1tYWNfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJICAgICAgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqcGF1c2UpCkBAIC0yNDEsMjAgKzIzNCwxMSBAQAogCQluZXdfcGF1c2UgfD0gRkxPV19UWDsKIAogCXByaXYtPmZsb3dfY3RybCA9IG5ld19wYXVzZTsKKwlwaHktPmF1dG9uZWcgPSBwYXVzZS0+YXV0b25lZzsKIAogCWlmIChwaHktPmF1dG9uZWcpIHsKLQkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewotCQkJc3RydWN0IGV0aHRvb2xfY21kIGNtZDsKLQkJCS8qIGF1dG8tbmVnb3RpYXRpb24gYXV0b21hdGljYWxseSByZXN0YXJ0ZWQgKi8KLQkJCWNtZC5jbWQgPSBFVEhUT09MX05XQVlfUlNUOwotCQkJY21kLnN1cHBvcnRlZCA9IHBoeS0+c3VwcG9ydGVkOwotCQkJY21kLmFkdmVydGlzaW5nID0gcGh5LT5hZHZlcnRpc2luZzsKLQkJCWNtZC5hdXRvbmVnID0gcGh5LT5hdXRvbmVnOwotCQkJY21kLnNwZWVkID0gcGh5LT5zcGVlZDsKLQkJCWNtZC5kdXBsZXggPSBwaHktPmR1cGxleDsKLQkJCWNtZC5waHlfYWRkcmVzcyA9IHBoeS0+YWRkcjsKLQkJCXJldCA9IHBoeV9ldGh0b29sX3NzZXQocGh5LCAmY21kKTsKLQkJfQorCQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQkJcmV0ID0gcGh5X3N0YXJ0X2FuZWcocGh5KTsKIAl9IGVsc2UKIAkJcHJpdi0+aHctPm1hYy0+Zmxvd19jdHJsKHByaXYtPmlvYWRkciwgcGh5LT5kdXBsZXgsCiAJCQkJCSBwcml2LT5mbG93X2N0cmwsIHByaXYtPnBhdXNlKTsKQEAgLTMxNSw3ICsyOTksNyBAQAogCiAJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAJaWYgKGRldmljZV9jYW5fd2FrZXVwKHByaXYtPmRldmljZSkpIHsKLQkJd29sLT5zdXBwb3J0ZWQgPSBXQUtFX01BR0lDOworCQl3b2wtPnN1cHBvcnRlZCA9IFdBS0VfTUFHSUMgfCBXQUtFX1VDQVNUOwogCQl3b2wtPndvbG9wdHMgPSBwcml2LT53b2xvcHRzOwogCX0KIAlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwpAQCAtMzI0LDcgKzMwOCw3IEBACiBzdGF0aWMgaW50IHN0bW1hY19zZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKIHsKIAlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXUzMiBzdXBwb3J0ID0gV0FLRV9NQUdJQzsKKwl1MzIgc3VwcG9ydCA9IFdBS0VfTUFHSUMgfCBXQUtFX1VDQVNUOwogCiAJaWYgKCFkZXZpY2VfY2FuX3dha2V1cChwcml2LT5kZXZpY2UpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTM1OCwxMSArMzQyLDYgQEAKIAkuZ2V0X3JlZ3MgPSBzdG1tYWNfZXRodG9vbF9ncmVncywKIAkuZ2V0X3JlZ3NfbGVuID0gc3RtbWFjX2V0aHRvb2xfZ2V0X3JlZ3NfbGVuLAogCS5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCi0JLmdldF9yeF9jc3VtID0gc3RtbWFjX2V0aHRvb2xfZ2V0X3J4X2NzdW0sCi0JLmdldF90eF9jc3VtID0gZXRodG9vbF9vcF9nZXRfdHhfY3N1bSwKLQkuc2V0X3R4X2NzdW0gPSBldGh0b29sX29wX3NldF90eF9pcHY2X2NzdW0sCi0JLmdldF9zZyA9IGV0aHRvb2xfb3BfZ2V0X3NnLAotCS5zZXRfc2cgPSBldGh0b29sX29wX3NldF9zZywKIAkuZ2V0X3BhdXNlcGFyYW0gPSBzdG1tYWNfZ2V0X3BhdXNlcGFyYW0sCiAJLnNldF9wYXVzZXBhcmFtID0gc3RtbWFjX3NldF9wYXVzZXBhcmFtLAogCS5nZXRfZXRodG9vbF9zdGF0cyA9IHN0bW1hY19nZXRfZXRodG9vbF9zdGF0cywKQEAgLTM3MCw4ICszNDksNiBAQAogCS5nZXRfd29sID0gc3RtbWFjX2dldF93b2wsCiAJLnNldF93b2wgPSBzdG1tYWNfc2V0X3dvbCwKIAkuZ2V0X3NzZXRfY291bnQJPSBzdG1tYWNfZ2V0X3NzZXRfY291bnQsCi0JLmdldF90c28gPSBldGh0b29sX29wX2dldF90c28sCi0JLnNldF90c28gPSBldGh0b29sX29wX3NldF90c28sCiB9OwogCiB2b2lkIHN0bW1hY19zZXRfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMKaW5kZXggY2M5NzNmYy4uZTI1ZTQ0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlICJzdG1tYWMuaCIKIAogI2RlZmluZSBTVE1NQUNfUkVTT1VSQ0VfTkFNRQkic3RtbWFjZXRoIgpAQCAtMTE2LDkgKzExNyw2IEBACiBtb2R1bGVfcGFyYW0odGMsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyh0YywgIkRNQSB0aHJlc2hvbGQgY29udHJvbCB2YWx1ZSIpOwogCi0jZGVmaW5lIFJYX05PX0NPQUxFU0NFCTEJLyogQWx3YXlzIGludGVycnVwdCBvbiBjb21wbGV0aW9uICovCi0jZGVmaW5lIFRYX05PX0NPQUxFU0NFCS0xCS8qIE5vIG1vZGVyYXRpb24gYnkgZGVmYXVsdCAqLwotCiAvKiBQYXkgYXR0ZW50aW9uIHRvIHR1bmUgdGhpcyBwYXJhbWV0ZXI7IHRha2UgY2FyZSBvZiBib3RoCiAgKiBoYXJkd2FyZSBjYXBhYmlsaXR5IGFuZCBuZXR3b3JrIHN0YWJpdGlseS9wZXJmb3JtYW5jZSBpbXBhY3QuCiAgKiBNYW55IHRlc3RzIHNob3dlZCB0aGF0IH40bXMgbGF0ZW5jeSBzZWVtcyB0byBiZSBnb29kIGVub3VnaC4gKi8KQEAgLTEzOSw3ICsxMzcsNiBAQAogCQkJCSAgICAgIE5FVElGX01TR19JRkRPV04gfCBORVRJRl9NU0dfVElNRVIpOwogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc3RtbWFjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwotc3RhdGljIG5ldGRldl90eF90IHN0bW1hY194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiAvKioKICAqIHN0bW1hY192ZXJpZnlfYXJncyAtIHZlcmlmeSB0aGUgZHJpdmVyIHBhcmFtZXRlcnMuCkBAIC04MzEsNiArODI4LDcgQEAKIAkJcHJfaW5mbygic3RtbWFjOiBSeCBDaGVja3N1bSBPZmZsb2FkIEVuZ2luZSBzdXBwb3J0ZWRcbiIpOwogCWlmIChwcml2LT5wbGF0LT50eF9jb2UpCiAJCXByX2luZm8oIlx0VFggQ2hlY2tzdW0gaW5zZXJ0aW9uIHN1cHBvcnRlZFxuIik7CisJbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpOwogCiAJLyogSW5pdGlhbGlzZSB0aGUgTU1DIChpZiBwcmVzZW50KSB0byBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzLiAqLwogCXdyaXRlbCgweGZmZmZmZmZmLCBwcml2LT5pb2FkZHIgKyBNTUNfSElHSF9JTlRSX01BU0spOwpAQCAtOTM0LDQ2ICs5MzIsNiBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogVG8gcGVyZm9ybSBlbXVsYXRlZCBoYXJkd2FyZSBzZWdtZW50YXRpb24gb24gc2tiLgotICovCi1zdGF0aWMgaW50IHN0bW1hY19zd190c28oc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBza19idWZmICpzZWdzLCAqY3Vycl9za2I7Ci0JaW50IGdzb19zZWdzID0gc2tiX3NoaW5mbyhza2IpLT5nc29fc2VnczsKLQotCS8qIEVzdGltYXRlIHRoZSBudW1iZXIgb2YgZnJhZ21lbnRzIGluIHRoZSB3b3JzdCBjYXNlICovCi0JaWYgKHVubGlrZWx5KHN0bW1hY190eF9hdmFpbChwcml2KSA8IGdzb19zZWdzKSkgewotCQluZXRpZl9zdG9wX3F1ZXVlKHByaXYtPmRldik7Ci0JCVRYX0RCRyhLRVJOX0VSUiAiJXM6IFRTTyBCVUchIFR4IFJpbmcgZnVsbCB3aGVuIHF1ZXVlIGF3YWtlXG4iLAotCQkgICAgICAgX19mdW5jX18pOwotCQlpZiAoc3RtbWFjX3R4X2F2YWlsKHByaXYpIDwgZ3NvX3NlZ3MpCi0JCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7Ci0KLQkJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5kZXYpOwotCX0KLQlUWF9EQkcoIlx0c3RtbWFjX3N3X3Rzbzogc2VnbWVudGluZzogc2tiICVwIChsZW4gJWQpXG4iLAotCSAgICAgICBza2IsIHNrYi0+bGVuKTsKLQotCXNlZ3MgPSBza2JfZ3NvX3NlZ21lbnQoc2tiLCBwcml2LT5kZXYtPmZlYXR1cmVzICYgfk5FVElGX0ZfVFNPKTsKLQlpZiAoSVNfRVJSKHNlZ3MpKQotCQlnb3RvIHN3X3Rzb19lbmQ7Ci0KLQlkbyB7Ci0JCWN1cnJfc2tiID0gc2VnczsKLQkJc2VncyA9IHNlZ3MtPm5leHQ7Ci0JCVRYX0RCRygiXHRcdGN1cnJlbnQgc2tiLT5sZW46ICVkLCAqY3VyciAlcCwiCi0JCSAgICAgICAiKm5leHQgJXBcbiIsIGN1cnJfc2tiLT5sZW4sIGN1cnJfc2tiLCBzZWdzKTsKLQkJY3Vycl9za2ItPm5leHQgPSBOVUxMOwotCQlzdG1tYWNfeG1pdChjdXJyX3NrYiwgcHJpdi0+ZGV2KTsKLQl9IHdoaWxlIChzZWdzKTsKLQotc3dfdHNvX2VuZDoKLQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0KLQlyZXR1cm4gTkVUREVWX1RYX09LOwotfQotCiBzdGF0aWMgdW5zaWduZWQgaW50IHN0bW1hY19oYW5kbGVfanVtYm9fZnJhbWVzKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCQkgICAgICAgaW50IGNzdW1faW5zZXJ0aW9uKQpAQCAtMTA1MSwxNiArMTAwOSw3IEBACiAJCSAgICAgICAhc2tiX2lzX2dzbyhza2IpID8gImlzbid0IiA6ICJpcyIpOwogI2VuZGlmCiAKLQlpZiAodW5saWtlbHkoc2tiX2lzX2dzbyhza2IpKSkKLQkJcmV0dXJuIHN0bW1hY19zd190c28ocHJpdiwgc2tiKTsKLQotCWlmIChsaWtlbHkoKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpKSkgewotCQlpZiAodW5saWtlbHkoKCFwcml2LT5wbGF0LT50eF9jb2UpIHx8Ci0JCQkgICAgIChwcml2LT5ub19jc3VtX2luc2VydGlvbikpKQotCQkJc2tiX2NoZWNrc3VtX2hlbHAoc2tiKTsKLQkJZWxzZQotCQkJY3N1bV9pbnNlcnRpb24gPSAxOwotCX0KKwljc3VtX2luc2VydGlvbiA9IChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKTsKIAogCWRlc2MgPSBwcml2LT5kbWFfdHggKyBlbnRyeTsKIAlmaXJzdCA9IGRlc2M7CkBAIC0xMzgwLDE4ICsxMzI5LDI5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWRldi0+bXR1ID0gbmV3X210dTsKKwluZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBzdG1tYWNfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcykKK3sKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKCFwcml2LT5yeF9jb2UpCisJCWZlYXR1cmVzICY9IH5ORVRJRl9GX1JYQ1NVTTsKKwlpZiAoIXByaXYtPnBsYXQtPnR4X2NvZSkKKwkJZmVhdHVyZXMgJj0gfk5FVElGX0ZfQUxMX0NTVU07CisKIAkvKiBTb21lIEdNQUMgZGV2aWNlcyBoYXZlIGEgYnVnZ2VkIEp1bWJvIGZyYW1lIHN1cHBvcnQgdGhhdAogCSAqIG5lZWRzIHRvIGhhdmUgdGhlIFR4IENPRSBkaXNhYmxlZCBmb3Igb3ZlcnNpemVkIGZyYW1lcwogCSAqIChkdWUgdG8gbGltaXRlZCBidWZmZXIgc2l6ZXMpLiBJbiB0aGlzIGNhc2Ugd2UgZGlzYWJsZQogCSAqIHRoZSBUWCBjc3VtIGluc2VydGlvbmluIHRoZSBUREVTIGFuZCBub3QgdXNlIFNGLiAqLwotCWlmICgocHJpdi0+cGxhdC0+YnVnZ2VkX2p1bWJvKSAmJiAocHJpdi0+ZGV2LT5tdHUgPiBFVEhfREFUQV9MRU4pKQotCQlwcml2LT5ub19jc3VtX2luc2VydGlvbiA9IDE7Ci0JZWxzZQotCQlwcml2LT5ub19jc3VtX2luc2VydGlvbiA9IDA7CisJaWYgKHByaXYtPnBsYXQtPmJ1Z2dlZF9qdW1ibyAmJiAoZGV2LT5tdHUgPiBFVEhfREFUQV9MRU4pKQorCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9BTExfQ1NVTTsKIAotCWRldi0+bXR1ID0gbmV3X210dTsKLQotCXJldHVybiAwOworCXJldHVybiBmZWF0dXJlczsKIH0KIAogc3RhdGljIGlycXJldHVybl90IHN0bW1hY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQpAQCAtMTQ3MSw2ICsxNDMxLDcgQEAKIAkubmRvX3N0YXJ0X3htaXQgPSBzdG1tYWNfeG1pdCwKIAkubmRvX3N0b3AgPSBzdG1tYWNfcmVsZWFzZSwKIAkubmRvX2NoYW5nZV9tdHUgPSBzdG1tYWNfY2hhbmdlX210dSwKKwkubmRvX2ZpeF9mZWF0dXJlcyA9IHN0bW1hY19maXhfZmVhdHVyZXMsCiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzdG1tYWNfbXVsdGljYXN0X2xpc3QsCiAJLm5kb190eF90aW1lb3V0ID0gc3RtbWFjX3R4X3RpbWVvdXQsCiAJLm5kb19kb19pb2N0bCA9IHN0bW1hY19pb2N0bCwKQEAgLTE1MDEsOCArMTQ2Miw4IEBACiAJZGV2LT5uZXRkZXZfb3BzID0gJnN0bW1hY19uZXRkZXZfb3BzOwogCXN0bW1hY19zZXRfZXRodG9vbF9vcHMoZGV2KTsKIAotCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSElHSERNQSB8Ci0JCU5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNOworCWRldi0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU07CisJZGV2LT5mZWF0dXJlcyB8PSBkZXYtPmh3X2ZlYXR1cmVzIHwgTkVUSUZfRl9ISUdIRE1BOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBtc2Vjc190b19qaWZmaWVzKHdhdGNoZG9nKTsKICNpZmRlZiBTVE1NQUNfVkxBTl9UQUdfVVNFRAogCS8qIEJvdGggbWFjMTAwIGFuZCBnbWFjIHN1cHBvcnQgcmVjZWl2ZSBWTEFOIHRhZyBkZXRlY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmdlbS5jIGIvZHJpdmVycy9uZXQvc3VuZ2VtLmMKaW5kZXggZDNiZTczNS4uYWI1OTMwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuZ2VtLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuZ2VtLmMKQEAgLTEyOTQsNyArMTI5NCw3IEBACiAJCWF1dG9uZWcgPSAxOwogCX0gZWxzZSB7CiAJCWF1dG9uZWcgPSAwOwotCQlzcGVlZCA9IGVwLT5zcGVlZDsKKwkJc3BlZWQgPSBldGh0b29sX2NtZF9zcGVlZChlcCk7CiAJCWR1cGxleCA9IGVwLT5kdXBsZXg7CiAJfQogCkBAIC0yNjQyLDcgKzI2NDIsNyBAQAogCQkvKiBSZXR1cm4gY3VycmVudCBQSFkgc2V0dGluZ3MgKi8KIAkJc3Bpbl9sb2NrX2lycSgmZ3AtPmxvY2spOwogCQljbWQtPmF1dG9uZWcgPSBncC0+d2FudF9hdXRvbmVnOwotCQljbWQtPnNwZWVkID0gZ3AtPnBoeV9taWkuc3BlZWQ7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIGdwLT5waHlfbWlpLnNwZWVkKTsKIAkJY21kLT5kdXBsZXggPSBncC0+cGh5X21paS5kdXBsZXg7CiAJCWNtZC0+YWR2ZXJ0aXNpbmcgPSBncC0+cGh5X21paS5hZHZlcnRpc2luZzsKIApAQCAtMjY1OSw3ICsyNjU5LDcgQEAKIAkJCSBTVVBQT1JURURfMTAwYmFzZVRfSGFsZiB8IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIHwKIAkJCSBTVVBQT1JURURfQXV0b25lZyk7CiAJCWNtZC0+YWR2ZXJ0aXNpbmcgPSBjbWQtPnN1cHBvcnRlZDsKLQkJY21kLT5zcGVlZCA9IDA7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIDApOwogCQljbWQtPmR1cGxleCA9IGNtZC0+cG9ydCA9IGNtZC0+cGh5X2FkZHJlc3MgPQogCQkJY21kLT50cmFuc2NlaXZlciA9IGNtZC0+YXV0b25lZyA9IDA7CiAKQEAgLTI2NzMsNyArMjY3Myw3IEBACiAJCQljbWQtPmFkdmVydGlzaW5nID0gY21kLT5zdXBwb3J0ZWQ7CiAJCQljbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKIAkJCWlmIChncC0+bHN0YXRlID09IGxpbmtfdXApCi0JCQkJY21kLT5zcGVlZCA9IFNQRUVEXzEwMDA7CisJCQkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgU1BFRURfMTAwMCk7CiAJCQljbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOwogCQkJY21kLT5hdXRvbmVnID0gMTsKIAkJfQpAQCAtMjY4Niw2ICsyNjg2LDcgQEAKIHN0YXRpYyBpbnQgZ2VtX3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3QgZ2VtICpncCA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIHNwZWVkID0gZXRodG9vbF9jbWRfc3BlZWQoY21kKTsKIAogCS8qIFZlcmlmeSB0aGUgc2V0dGluZ3Mgd2UgY2FyZSBhYm91dC4gKi8KIAlpZiAoY21kLT5hdXRvbmVnICE9IEFVVE9ORUdfRU5BQkxFICYmCkBAIC0yNjk3LDkgKzI2OTgsOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19ESVNBQkxFICYmCi0JICAgICgoY21kLT5zcGVlZCAhPSBTUEVFRF8xMDAwICYmCi0JICAgICAgY21kLT5zcGVlZCAhPSBTUEVFRF8xMDAgJiYKLQkgICAgICBjbWQtPnNwZWVkICE9IFNQRUVEXzEwKSB8fAorCSAgICAoKHNwZWVkICE9IFNQRUVEXzEwMDAgJiYKKwkgICAgICBzcGVlZCAhPSBTUEVFRF8xMDAgJiYKKwkgICAgICBzcGVlZCAhPSBTUEVFRF8xMCkgfHwKIAkgICAgIChjbWQtPmR1cGxleCAhPSBEVVBMRVhfSEFMRiAmJgogCSAgICAgIGNtZC0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKSkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzE0Niw3ICszMTQ3LDggQEAKIAkJCSAgICBncC0+cGh5X21paS5kZWYgPyBncC0+cGh5X21paS5kZWYtPm5hbWUgOiAibm8iKTsKIAogCS8qIEdFTSBjYW4gZG8gaXQgYWxsLi4uICovCi0JZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9IV19DU1VNIHwgTkVUSUZfRl9MTFRYOworCWRldi0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9IV19DU1VNOworCWRldi0+ZmVhdHVyZXMgfD0gZGV2LT5od19mZWF0dXJlcyB8IE5FVElGX0ZfUlhDU1VNIHwgTkVUSUZfRl9MTFRYOwogCWlmIChwY2lfdXNpbmdfZGFjKQogCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuaG1lLmMgYi9kcml2ZXJzL25ldC9zdW5obWUuYwppbmRleCBiZmYyZjc5Li4zMGFhZDU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5obWUuYworKysgYi9kcml2ZXJzL25ldC9zdW5obWUuYwpAQCAtMTM4Myw3ICsxMzgzLDcgQEAKIAkJaWYgKGVwID09IE5VTEwgfHwgZXAtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHsKIAkJCWhwLT5zd19ibWNyID0gQk1DUl9TUEVFRDEwMDsKIAkJfSBlbHNlIHsKLQkJCWlmIChlcC0+c3BlZWQgPT0gU1BFRURfMTAwKQorCQkJaWYgKGV0aHRvb2xfY21kX3NwZWVkKGVwKSA9PSBTUEVFRF8xMDApCiAJCQkJaHAtPnN3X2JtY3IgPSBCTUNSX1NQRUVEMTAwOwogCQkJZWxzZQogCQkJCWhwLT5zd19ibWNyID0gMDsKQEAgLTI0MDEsNiArMjQwMSw3IEBACiBzdGF0aWMgaW50IGhtZV9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7CiAJc3RydWN0IGhhcHB5X21lYWwgKmhwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgc3BlZWQ7CiAKIAljbWQtPnN1cHBvcnRlZCA9CiAJCShTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8CkBAIC0yNDIwLDEwICsyNDIxLDkgQEAKIAogCWlmIChocC0+c3dfYm1jciAmIEJNQ1JfQU5FTkFCTEUpIHsKIAkJY21kLT5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7Ci0JCWNtZC0+c3BlZWQgPQotCQkJKGhwLT5zd19scGEgJiAoTFBBXzEwMEhBTEYgfCBMUEFfMTAwRlVMTCkpID8KLQkJCVNQRUVEXzEwMCA6IFNQRUVEXzEwOwotCQlpZiAoY21kLT5zcGVlZCA9PSBTUEVFRF8xMDApCisJCXNwZWVkID0gKChocC0+c3dfbHBhICYgKExQQV8xMDBIQUxGIHwgTFBBXzEwMEZVTEwpKSA/CisJCQkgU1BFRURfMTAwIDogU1BFRURfMTApOworCQlpZiAoc3BlZWQgPT0gU1BFRURfMTAwKQogCQkJY21kLT5kdXBsZXggPQogCQkJCShocC0+c3dfbHBhICYgKExQQV8xMDBGVUxMKSkgPwogCQkJCURVUExFWF9GVUxMIDogRFVQTEVYX0hBTEY7CkBAIC0yNDMzLDEzICsyNDMzLDEyIEBACiAJCQkJRFVQTEVYX0ZVTEwgOiBEVVBMRVhfSEFMRjsKIAl9IGVsc2UgewogCQljbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7Ci0JCWNtZC0+c3BlZWQgPQotCQkJKGhwLT5zd19ibWNyICYgQk1DUl9TUEVFRDEwMCkgPwotCQkJU1BFRURfMTAwIDogU1BFRURfMTA7CisJCXNwZWVkID0gKGhwLT5zd19ibWNyICYgQk1DUl9TUEVFRDEwMCkgPyBTUEVFRF8xMDAgOiBTUEVFRF8xMDsKIAkJY21kLT5kdXBsZXggPQogCQkJKGhwLT5zd19ibWNyICYgQk1DUl9GVUxMRFBMWCkgPwogCQkJRFVQTEVYX0ZVTEwgOiBEVVBMRVhfSEFMRjsKIAl9CisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgc3BlZWQpOwogCXJldHVybiAwOwogfQogCkBAIC0yNDUyLDggKzI0NTEsOCBAQAogCSAgICBjbWQtPmF1dG9uZWcgIT0gQVVUT05FR19ESVNBQkxFKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSAmJgotCSAgICAoKGNtZC0+c3BlZWQgIT0gU1BFRURfMTAwICYmCi0JICAgICAgY21kLT5zcGVlZCAhPSBTUEVFRF8xMCkgfHwKKwkgICAgKChldGh0b29sX2NtZF9zcGVlZChjbWQpICE9IFNQRUVEXzEwMCAmJgorCSAgICAgIGV0aHRvb2xfY21kX3NwZWVkKGNtZCkgIT0gU1BFRURfMTApIHx8CiAJICAgICAoY21kLT5kdXBsZXggIT0gRFVQTEVYX0hBTEYgJiYKIAkgICAgICBjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI3ODgsNyArMjc4Nyw4IEBACiAJZGV2LT5ldGh0b29sX29wcyA9ICZobWVfZXRodG9vbF9vcHM7CiAKIAkvKiBIYXBweSBNZWFsIGNhbiBkbyBpdCBhbGwuLi4gKi8KLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0hXX0NTVU07CisJZGV2LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0hXX0NTVU07CisJZGV2LT5mZWF0dXJlcyB8PSBkZXYtPmh3X2ZlYXR1cmVzIHwgTkVUSUZfRl9SWENTVU07CiAKIAlkZXYtPmlycSA9IG9wLT5hcmNoZGF0YS5pcnFzWzBdOwogCkBAIC0zMTEzLDcgKzMxMTMsOCBAQAogCWRldi0+ZG1hID0gMDsKIAogCS8qIEhhcHB5IE1lYWwgY2FuIGRvIGl0IGFsbC4uLiAqLwotCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSFdfQ1NVTTsKKwlkZXYtPmh3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSFdfQ1NVTTsKKwlkZXYtPmZlYXR1cmVzIHw9IGRldi0+aHdfZmVhdHVyZXMgfCBORVRJRl9GX1JYQ1NVTTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1NCVVMpICYmIGRlZmluZWQoQ09ORklHX1BDSSkKIAkvKiBIb29rIHVwIFBDSSByZWdpc3Rlci9kZXNjcmlwdG9yIGFjY2Vzc29ycy4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RjMzU4MTUuYyBiL2RyaXZlcnMvbmV0L3RjMzU4MTUuYwppbmRleCA3Y2E1MWNlLi40YTU1YTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90YzM1ODE1LmMKKysrIGIvZHJpdmVycy9uZXQvdGMzNTgxNS5jCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvcGh5Lmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RlaHV0aS5jIGIvZHJpdmVycy9uZXQvdGVodXRpLmMKaW5kZXggODU2NGVjNS4uODBmYmVlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGVodXRpLmMKKysrIGIvZHJpdmVycy9uZXQvdGVodXRpLmMKQEAgLTIwMTcsOSArMjAxNywxMSBAQAogCQluZGV2LT5pcnEgPSBwZGV2LT5pcnE7CiAJCW5kZXYtPmZlYXR1cmVzID0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9TRyB8IE5FVElGX0ZfVFNPCiAJCSAgICB8IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWCB8Ci0JCSAgICBORVRJRl9GX0hXX1ZMQU5fRklMVEVSCisJCSAgICBORVRJRl9GX0hXX1ZMQU5fRklMVEVSIHwgTkVUSUZfRl9SWENTVU0KIAkJICAgIC8qfCBORVRJRl9GX0ZSQUdMSVNUICovCiAJCSAgICA7CisJCW5kZXYtPmh3X2ZlYXR1cmVzID0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9TRyB8CisJCQlORVRJRl9GX1RTTyB8IE5FVElGX0ZfSFdfVkxBTl9UWDsKIAogCQlpZiAocGNpX3VzaW5nX2RhYykKIAkJCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKQEAgLTIxNDksNyArMjE1MSw3IEBACiAKIAllY21kLT5zdXBwb3J0ZWQgPSAoU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8IFNVUFBPUlRFRF9GSUJSRSk7CiAJZWNtZC0+YWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8xMDAwMGJhc2VUX0Z1bGwgfCBBRFZFUlRJU0VEX0ZJQlJFKTsKLQllY21kLT5zcGVlZCA9IFNQRUVEXzEwMDAwOworCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBTUEVFRF8xMDAwMCk7CiAJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CiAJZWNtZC0+cG9ydCA9IFBPUlRfRklCUkU7CiAJZWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0VYVEVSTkFMOwkvKiB3aGF0IGRvZXMgaXQgbWVhbj8gKi8KQEAgLTIxODgsMjQgKzIxOTAsNiBAQAogfQogCiAvKgotICogYmR4X2dldF9yeF9jc3VtIC0gcmVwb3J0IHdoZXRoZXIgcmVjZWl2ZSBjaGVja3N1bXMgYXJlIHR1cm5lZCBvbiBvciBvZmYKLSAqIEBuZXRkZXYKLSAqLwotc3RhdGljIHUzMiBiZHhfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKLXsKLQlyZXR1cm4gMTsJCS8qIGFsd2F5cyBvbiAqLwotfQotCi0vKgotICogYmR4X2dldF90eF9jc3VtIC0gcmVwb3J0IHdoZXRoZXIgdHJhbnNtaXQgY2hlY2tzdW1zIGFyZSB0dXJuZWQgb24gb3Igb2ZmCi0gKiBAbmV0ZGV2Ci0gKi8KLXN0YXRpYyB1MzIgYmR4X2dldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCi17Ci0JcmV0dXJuIChuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9JUF9DU1VNKSAhPSAwOwotfQotCi0vKgogICogYmR4X2dldF9jb2FsZXNjZSAtIGdldCBpbnRlcnJ1cHQgY29hbGVzY2luZyBwYXJhbWV0ZXJzCiAgKiBAbmV0ZGV2CiAgKiBAZWNvYWwKQEAgLTI0MjQsMTAgKzI0MDgsNiBAQAogCQkuc2V0X2NvYWxlc2NlID0gYmR4X3NldF9jb2FsZXNjZSwKIAkJLmdldF9yaW5ncGFyYW0gPSBiZHhfZ2V0X3JpbmdwYXJhbSwKIAkJLnNldF9yaW5ncGFyYW0gPSBiZHhfc2V0X3JpbmdwYXJhbSwKLQkJLmdldF9yeF9jc3VtID0gYmR4X2dldF9yeF9jc3VtLAotCQkuZ2V0X3R4X2NzdW0gPSBiZHhfZ2V0X3R4X2NzdW0sCi0JCS5nZXRfc2cgPSBldGh0b29sX29wX2dldF9zZywKLQkJLmdldF90c28gPSBldGh0b29sX29wX2dldF90c28sCiAJCS5nZXRfc3RyaW5ncyA9IGJkeF9nZXRfc3RyaW5ncywKIAkJLmdldF9zc2V0X2NvdW50ID0gYmR4X2dldF9zc2V0X2NvdW50LAogCQkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBiZHhfZ2V0X2V0aHRvb2xfc3RhdHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuYyBiL2RyaXZlcnMvbmV0L3RnMy5jCmluZGV4IDdhNWRhZWYuLmRiMTkzMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5jCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5jCkBAIC02MiwxMiArNjIsMzYgQEAKIAogI2luY2x1ZGUgInRnMy5oIgogCisvKiBGdW5jdGlvbnMgJiBtYWNyb3MgdG8gdmVyaWZ5IFRHM19GTEFHUyB0eXBlcyAqLworCitzdGF0aWMgaW5saW5lIGludCBfdGczX2ZsYWcoZW51bSBURzNfRkxBR1MgZmxhZywgdW5zaWduZWQgbG9uZyAqYml0cykKK3sKKwlyZXR1cm4gdGVzdF9iaXQoZmxhZywgYml0cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfdGczX2ZsYWdfc2V0KGVudW0gVEczX0ZMQUdTIGZsYWcsIHVuc2lnbmVkIGxvbmcgKmJpdHMpCit7CisJc2V0X2JpdChmbGFnLCBiaXRzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF90ZzNfZmxhZ19jbGVhcihlbnVtIFRHM19GTEFHUyBmbGFnLCB1bnNpZ25lZCBsb25nICpiaXRzKQoreworCWNsZWFyX2JpdChmbGFnLCBiaXRzKTsKK30KKworI2RlZmluZSB0ZzNfZmxhZyh0cCwgZmxhZykJCQkJXAorCV90ZzNfZmxhZyhURzNfRkxBR18jI2ZsYWcsICh0cCktPnRnM19mbGFncykKKyNkZWZpbmUgdGczX2ZsYWdfc2V0KHRwLCBmbGFnKQkJCQlcCisJX3RnM19mbGFnX3NldChURzNfRkxBR18jI2ZsYWcsICh0cCktPnRnM19mbGFncykKKyNkZWZpbmUgdGczX2ZsYWdfY2xlYXIodHAsIGZsYWcpCQkJXAorCV90ZzNfZmxhZ19jbGVhcihURzNfRkxBR18jI2ZsYWcsICh0cCktPnRnM19mbGFncykKKwogI2RlZmluZSBEUlZfTU9EVUxFX05BTUUJCSJ0ZzMiCiAjZGVmaW5lIFRHM19NQUpfTlVNCQkJMwotI2RlZmluZSBURzNfTUlOX05VTQkJCTExNworI2RlZmluZSBURzNfTUlOX05VTQkJCTExOQogI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JXAogCV9fc3RyaW5naWZ5KFRHM19NQUpfTlVNKSAiLiIgX19zdHJpbmdpZnkoVEczX01JTl9OVU0pCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiSmFudWFyeSAyNSwgMjAxMSIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJNYXkgMTgsIDIwMTEiCiAKICNkZWZpbmUgVEczX0RFRl9NQUNfTU9ERQkwCiAjZGVmaW5lIFRHM19ERUZfUlhfTU9ERQkJMApAQCAtODUsMjYgKzEwOSwyNSBAQAogLyogbGVuZ3RoIG9mIHRpbWUgYmVmb3JlIHdlIGRlY2lkZSB0aGUgaGFyZHdhcmUgaXMgYm9ya2VkLAogICogYW5kIGRldi0+dHhfdGltZW91dCgpIHNob3VsZCBiZSBjYWxsZWQgdG8gZml4IHRoZSBwcm9ibGVtCiAgKi8KKwogI2RlZmluZSBURzNfVFhfVElNRU9VVAkJCSg1ICogSFopCiAKIC8qIGhhcmR3YXJlIG1pbmltdW0gYW5kIG1heGltdW0gZm9yIGEgc2luZ2xlIGZyYW1lJ3MgZGF0YSBwYXlsb2FkICovCiAjZGVmaW5lIFRHM19NSU5fTVRVCQkJNjAKICNkZWZpbmUgVEczX01BWF9NVFUodHApCVwKLQkoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19KVU1CT19DQVBBQkxFKSA/IDkwMDAgOiAxNTAwKQorCSh0ZzNfZmxhZyh0cCwgSlVNQk9fQ0FQQUJMRSkgPyA5MDAwIDogMTUwMCkKIAogLyogVGhlc2UgbnVtYmVycyBzZWVtIHRvIGJlIGhhcmQgY29kZWQgaW4gdGhlIE5JQyBmaXJtd2FyZSBzb21laG93LgogICogWW91IGNhbid0IGNoYW5nZSB0aGUgcmluZyBzaXplcywgYnV0IHlvdSBjYW4gY2hhbmdlIHdoZXJlIHlvdSBwbGFjZQogICogdGhlbSBpbiB0aGUgTklDIG9uYm9hcmQgbWVtb3J5LgogICovCiAjZGVmaW5lIFRHM19SWF9TVERfUklOR19TSVpFKHRwKSBcCi0JKChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNyB8fCBcCi0JICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxOSkgPyBcCi0JIFJYX1NURF9NQVhfU0laRV81NzE3IDogNTEyKQorCSh0ZzNfZmxhZyh0cCwgTFJHX1BST0RfUklOR19DQVApID8gXAorCSBURzNfUlhfU1REX01BWF9TSVpFXzU3MTcgOiBURzNfUlhfU1REX01BWF9TSVpFXzU3MDApCiAjZGVmaW5lIFRHM19ERUZfUlhfUklOR19QRU5ESU5HCQkyMDAKICNkZWZpbmUgVEczX1JYX0pNQl9SSU5HX1NJWkUodHApIFwKLQkoKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3IHx8IFwKLQkgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE5KSA/IFwKLQkgMTAyNCA6IDI1NikKKwkodGczX2ZsYWcodHAsIExSR19QUk9EX1JJTkdfQ0FQKSA/IFwKKwkgVEczX1JYX0pNQl9NQVhfU0laRV81NzE3IDogVEczX1JYX0pNQl9NQVhfU0laRV81NzAwKQogI2RlZmluZSBURzNfREVGX1JYX0pVTUJPX1JJTkdfUEVORElORwkxMDAKICNkZWZpbmUgVEczX1JTU19JTkRJUl9UQkxfU0laRQkJMTI4CiAKQEAgLTE2NywxMSArMTkwLDYgQEAKIAogI2RlZmluZSBURzNfUkFXX0lQX0FMSUdOIDIKIAotLyogbnVtYmVyIG9mIEVUSFRPT0xfR1NUQVRTIHU2NCdzICovCi0jZGVmaW5lIFRHM19OVU1fU1RBVFMJCShzaXplb2Yoc3RydWN0IHRnM19ldGh0b29sX3N0YXRzKS9zaXplb2YodTY0KSkKLQotI2RlZmluZSBURzNfTlVNX1RFU1QJCTYKLQogI2RlZmluZSBURzNfRldfVVBEQVRFX1RJTUVPVVRfU0VDCTUKIAogI2RlZmluZSBGSVJNV0FSRV9URzMJCSJ0aWdvbi90ZzMuYmluIgpAQCAtMjY2LDYgKzI4NCw3IEBACiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgVEczUENJX0RFVklDRV9USUdPTjNfNTc3OTEpfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBURzNQQ0lfREVWSUNFX1RJR09OM181Nzc5NSl9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3MTkpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBURzNQQ0lfREVWSUNFX1RJR09OM181NzIwKX0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TWVNLT05ORUNULCBQQ0lfREVWSUNFX0lEX1NZU0tPTk5FQ1RfOURYWCl9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU1lTS09OTkVDVCwgUENJX0RFVklDRV9JRF9TWVNLT05ORUNUXzlNWFgpfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FMVElNQSwgUENJX0RFVklDRV9JRF9BTFRJTUFfQUMxMDAwKX0sCkBAIC0yODAsNyArMjk5LDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJY29uc3QgY2hhciBzdHJpbmdbRVRIX0dTVFJJTkdfTEVOXTsKLX0gZXRodG9vbF9zdGF0c19rZXlzW1RHM19OVU1fU1RBVFNdID0geworfSBldGh0b29sX3N0YXRzX2tleXNbXSA9IHsKIAl7ICJyeF9vY3RldHMiIH0sCiAJeyAicnhfZnJhZ21lbnRzIiB9LAogCXsgInJ4X3VjYXN0X3BhY2tldHMiIH0sCkBAIC0zNTYsMTIgKzM3NSwxNyBAQAogCXsgInJpbmdfc3RhdHVzX3VwZGF0ZSIgfSwKIAl7ICJuaWNfaXJxcyIgfSwKIAl7ICJuaWNfYXZvaWRlZF9pcnFzIiB9LAotCXsgIm5pY190eF90aHJlc2hvbGRfaGl0IiB9CisJeyAibmljX3R4X3RocmVzaG9sZF9oaXQiIH0sCisKKwl7ICJtYnVmX2x3bV90aHJlc2hfaGl0IiB9LAogfTsKIAorI2RlZmluZSBURzNfTlVNX1NUQVRTCUFSUkFZX1NJWkUoZXRodG9vbF9zdGF0c19rZXlzKQorCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewogCWNvbnN0IGNoYXIgc3RyaW5nW0VUSF9HU1RSSU5HX0xFTl07Ci19IGV0aHRvb2xfdGVzdF9rZXlzW1RHM19OVU1fVEVTVF0gPSB7Cit9IGV0aHRvb2xfdGVzdF9rZXlzW10gPSB7CiAJeyAibnZyYW0gdGVzdCAgICAgKG9ubGluZSkgIiB9LAogCXsgImxpbmsgdGVzdCAgICAgIChvbmxpbmUpICIgfSwKIAl7ICJyZWdpc3RlciB0ZXN0ICAob2ZmbGluZSkiIH0sCkBAIC0zNzAsNiArMzk0LDkgQEAKIAl7ICJpbnRlcnJ1cHQgdGVzdCAob2ZmbGluZSkiIH0sCiB9OwogCisjZGVmaW5lIFRHM19OVU1fVEVTVAlBUlJBWV9TSVpFKGV0aHRvb2xfdGVzdF9rZXlzKQorCisKIHN0YXRpYyB2b2lkIHRnM193cml0ZTMyKHN0cnVjdCB0ZzMgKnRwLCB1MzIgb2ZmLCB1MzIgdmFsKQogewogCXdyaXRlbCh2YWwsIHRwLT5yZWdzICsgb2ZmKTsKQEAgLTQ2Nyw4ICs0OTQsNyBAQAogICovCiBzdGF0aWMgdm9pZCBfdHczMl9mbHVzaChzdHJ1Y3QgdGczICp0cCwgdTMyIG9mZiwgdTMyIHZhbCwgdTMyIHVzZWNfd2FpdCkKIHsKLQlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19QQ0lYX1RBUkdFVF9IV0JVRykgfHwKLQkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfSUNIX1dPUktBUk9VTkQpKQorCWlmICh0ZzNfZmxhZyh0cCwgUENJWF9UQVJHRVRfSFdCVUcpIHx8IHRnM19mbGFnKHRwLCBJQ0hfV09SS0FST1VORCkpCiAJCS8qIE5vbi1wb3N0ZWQgbWV0aG9kcyAqLwogCQl0cC0+d3JpdGUzMih0cCwgb2ZmLCB2YWwpOwogCWVsc2UgewpAQCAtNDg4LDggKzUxNCw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgdHczMl9tYWlsYm94X2ZsdXNoKHN0cnVjdCB0ZzMgKnRwLCB1MzIgb2ZmLCB1MzIgdmFsKQogewogCXRwLT53cml0ZTMyX21ib3godHAsIG9mZiwgdmFsKTsKLQlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTUJPWF9XUklURV9SRU9SREVSKSAmJgotCSAgICAhKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfSUNIX1dPUktBUk9VTkQpKQorCWlmICghdGczX2ZsYWcodHAsIE1CT1hfV1JJVEVfUkVPUkRFUikgJiYgIXRnM19mbGFnKHRwLCBJQ0hfV09SS0FST1VORCkpCiAJCXRwLT5yZWFkMzJfbWJveCh0cCwgb2ZmKTsKIH0KIApAQCAtNDk3LDkgKzUyMiw5IEBACiB7CiAJdm9pZCBfX2lvbWVtICptYm94ID0gdHAtPnJlZ3MgKyBvZmY7CiAJd3JpdGVsKHZhbCwgbWJveCk7Ci0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19UWERfTUJPWF9IV0JVRykKKwlpZiAodGczX2ZsYWcodHAsIFRYRF9NQk9YX0hXQlVHKSkKIAkJd3JpdGVsKHZhbCwgbWJveCk7Ci0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19NQk9YX1dSSVRFX1JFT1JERVIpCisJaWYgKHRnM19mbGFnKHRwLCBNQk9YX1dSSVRFX1JFT1JERVIpKQogCQlyZWFkbChtYm94KTsKIH0KIApAQCAtNTI4LDEyICs1NTMsMTIgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikgJiYKKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYgJiYKIAkgICAgKG9mZiA+PSBOSUNfU1JBTV9TVEFUU19CTEspICYmIChvZmYgPCBOSUNfU1JBTV9UWF9CVUZGRVJfREVTQykpCiAJCXJldHVybjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+aW5kaXJlY3RfbG9jaywgZmxhZ3MpOwotCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfU1JBTV9VU0VfQ09ORklHKSB7CisJaWYgKHRnM19mbGFnKHRwLCBTUkFNX1VTRV9DT05GSUcpKSB7CiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQodHAtPnBkZXYsIFRHM1BDSV9NRU1fV0lOX0JBU0VfQUREUiwgb2ZmKTsKIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZCh0cC0+cGRldiwgVEczUENJX01FTV9XSU5fREFUQSwgdmFsKTsKIApAQCAtNTUzLDE0ICs1NzgsMTQgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikgJiYKKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYgJiYKIAkgICAgKG9mZiA+PSBOSUNfU1JBTV9TVEFUU19CTEspICYmIChvZmYgPCBOSUNfU1JBTV9UWF9CVUZGRVJfREVTQykpIHsKIAkJKnZhbCA9IDA7CiAJCXJldHVybjsKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdHAtPmluZGlyZWN0X2xvY2ssIGZsYWdzKTsKLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1NSQU1fVVNFX0NPTkZJRykgeworCWlmICh0ZzNfZmxhZyh0cCwgU1JBTV9VU0VfQ09ORklHKSkgewogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHRwLT5wZGV2LCBURzNQQ0lfTUVNX1dJTl9CQVNFX0FERFIsIG9mZik7CiAJCXBjaV9yZWFkX2NvbmZpZ19kd29yZCh0cC0+cGRldiwgVEczUENJX01FTV9XSU5fREFUQSwgdmFsKTsKIApAQCAtNTk3LDcgKzYyMiw3IEBACiAJaW50IHJldCA9IDA7CiAJdTMyIHN0YXR1cywgcmVxLCBnbnQ7CiAKLQlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9BUEUpKQorCWlmICghdGczX2ZsYWcodHAsIEVOQUJMRV9BUEUpKQogCQlyZXR1cm4gMDsKIAogCXN3aXRjaCAobG9ja251bSkgewpAQCAtNjQzLDcgKzY2OCw3IEBACiB7CiAJdTMyIGdudDsKIAotCWlmICghKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX0FQRSkpCisJaWYgKCF0ZzNfZmxhZyh0cCwgRU5BQkxFX0FQRSkpCiAJCXJldHVybjsKIAogCXN3aXRjaCAobG9ja251bSkgewpAQCAtNjg3LDE0ICs3MTIsMTQgQEAKIAkJc3RydWN0IHRnM19uYXBpICp0bmFwaSA9ICZ0cC0+bmFwaVtpXTsKIAogCQl0dzMyX21haWxib3hfZih0bmFwaS0+aW50X21ib3gsIHRuYXBpLT5sYXN0X3RhZyA8PCAyNCk7Ci0JCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzFTSE9UX01TSSkKKwkJaWYgKHRnM19mbGFnKHRwLCAxU0hPVF9NU0kpKQogCQkJdHczMl9tYWlsYm94X2YodG5hcGktPmludF9tYm94LCB0bmFwaS0+bGFzdF90YWcgPDwgMjQpOwogCiAJCXRwLT5jb2FsX25vdyB8PSB0bmFwaS0+Y29hbF9ub3c7CiAJfQogCiAJLyogRm9yY2UgYW4gaW5pdGlhbCBpbnRlcnJ1cHQgKi8KLQlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfVEFHR0VEX1NUQVRVUykgJiYKKwlpZiAoIXRnM19mbGFnKHRwLCBUQUdHRURfU1RBVFVTKSAmJgogCSAgICAodHAtPm5hcGlbMF0uaHdfc3RhdHVzLT5zdGF0dXMgJiBTRF9TVEFUVVNfVVBEQVRFRCkpCiAJCXR3MzIoR1JDX0xPQ0FMX0NUUkwsIHRwLT5ncmNfbG9jYWxfY3RybCB8IEdSQ19MQ0xDVFJMX1NFVElOVCk7CiAJZWxzZQpAQCAtNzEwLDkgKzczNSw3IEBACiAJdW5zaWduZWQgaW50IHdvcmtfZXhpc3RzID0gMDsKIAogCS8qIGNoZWNrIGZvciBwaHkgZXZlbnRzICovCi0JaWYgKCEodHAtPnRnM19mbGFncyAmCi0JICAgICAgKFRHM19GTEFHX1VTRV9MSU5LQ0hHX1JFRyB8Ci0JICAgICAgIFRHM19GTEFHX1BPTExfU0VSREVTKSkpIHsKKwlpZiAoISh0ZzNfZmxhZyh0cCwgVVNFX0xJTktDSEdfUkVHKSB8fCB0ZzNfZmxhZyh0cCwgUE9MTF9TRVJERVMpKSkgewogCQlpZiAoc2Jsay0+c3RhdHVzICYgU0RfU1RBVFVTX0xJTktfQ0hHKQogCQkJd29ya19leGlzdHMgPSAxOwogCX0KQEAgLTc0MCw4ICs3NjMsNyBAQAogCSAqIFRoZSBsYXN0X3RhZyB3ZSB3cml0ZSBhYm92ZSB0ZWxscyB0aGUgY2hpcCB3aGljaCBwaWVjZSBvZgogCSAqIHdvcmsgd2UndmUgY29tcGxldGVkLgogCSAqLwotCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19UQUdHRURfU1RBVFVTKSAmJgotCSAgICB0ZzNfaGFzX3dvcmsodG5hcGkpKQorCWlmICghdGczX2ZsYWcodHAsIFRBR0dFRF9TVEFUVVMpICYmIHRnM19oYXNfd29yayh0bmFwaSkpCiAJCXR3MzIoSE9TVENDX01PREUsIHRwLT5jb2FsZXNjZV9tb2RlIHwKIAkJICAgICBIT1NUQ0NfTU9ERV9FTkFCTEUgfCB0bmFwaS0+Y29hbF9ub3cpOwogfQpAQCAtNzUxLDggKzc3Myw3IEBACiAJdTMyIGNsb2NrX2N0cmw7CiAJdTMyIG9yaWdfY2xvY2tfY3RybDsKIAotCWlmICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0NQTVVfUFJFU0VOVCkgfHwKLQkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc4MF9DTEFTUykpCisJaWYgKHRnM19mbGFnKHRwLCBDUE1VX1BSRVNFTlQpIHx8IHRnM19mbGFnKHRwLCA1NzgwX0NMQVNTKSkKIAkJcmV0dXJuOwogCiAJY2xvY2tfY3RybCA9IHRyMzIoVEczUENJX0NMT0NLX0NUUkwpOwpAQCAtNzYzLDcgKzc4NCw3IEBACiAJCSAgICAgICAweDFmKTsKIAl0cC0+cGNpX2Nsb2NrX2N0cmwgPSBjbG9ja19jdHJsOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSB7CisJaWYgKHRnM19mbGFnKHRwLCA1NzA1X1BMVVMpKSB7CiAJCWlmIChvcmlnX2Nsb2NrX2N0cmwgJiBDTE9DS19DVFJMXzYyNV9DT1JFKSB7CiAJCQl0dzMyX3dhaXRfZihURzNQQ0lfQ0xPQ0tfQ1RSTCwKIAkJCQkgICAgY2xvY2tfY3RybCB8IENMT0NLX0NUUkxfNjI1X0NPUkUsIDQwKTsKQEAgLTg4MCw2ICs5MDEsMTA0IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCB0ZzNfcGh5X2NsNDVfd3JpdGUoc3RydWN0IHRnMyAqdHAsIHUzMiBkZXZhZCwgdTMyIGFkZHIsIHUzMiB2YWwpCit7CisJaW50IGVycjsKKworCWVyciA9IHRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19NTURfQ1RSTCwgZGV2YWQpOworCWlmIChlcnIpCisJCWdvdG8gZG9uZTsKKworCWVyciA9IHRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19NTURfQUREUkVTUywgYWRkcik7CisJaWYgKGVycikKKwkJZ290byBkb25lOworCisJZXJyID0gdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX01NRF9DVFJMLAorCQkJICAgTUlJX1RHM19NTURfQ1RSTF9EQVRBX05PSU5DIHwgZGV2YWQpOworCWlmIChlcnIpCisJCWdvdG8gZG9uZTsKKworCWVyciA9IHRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19NTURfQUREUkVTUywgdmFsKTsKKworZG9uZToKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHRnM19waHlfY2w0NV9yZWFkKHN0cnVjdCB0ZzMgKnRwLCB1MzIgZGV2YWQsIHUzMiBhZGRyLCB1MzIgKnZhbCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX01NRF9DVFJMLCBkZXZhZCk7CisJaWYgKGVycikKKwkJZ290byBkb25lOworCisJZXJyID0gdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX01NRF9BRERSRVNTLCBhZGRyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGRvbmU7CisKKwllcnIgPSB0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfTU1EX0NUUkwsCisJCQkgICBNSUlfVEczX01NRF9DVFJMX0RBVEFfTk9JTkMgfCBkZXZhZCk7CisJaWYgKGVycikKKwkJZ290byBkb25lOworCisJZXJyID0gdGczX3JlYWRwaHkodHAsIE1JSV9URzNfTU1EX0FERFJFU1MsIHZhbCk7CisKK2RvbmU6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB0ZzNfcGh5ZHNwX3JlYWQoc3RydWN0IHRnMyAqdHAsIHUzMiByZWcsIHUzMiAqdmFsKQoreworCWludCBlcnI7CisKKwllcnIgPSB0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRFNQX0FERFJFU1MsIHJlZyk7CisJaWYgKCFlcnIpCisJCWVyciA9IHRnM19yZWFkcGh5KHRwLCBNSUlfVEczX0RTUF9SV19QT1JULCB2YWwpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB0ZzNfcGh5ZHNwX3dyaXRlKHN0cnVjdCB0ZzMgKnRwLCB1MzIgcmVnLCB1MzIgdmFsKQoreworCWludCBlcnI7CisKKwllcnIgPSB0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRFNQX0FERFJFU1MsIHJlZyk7CisJaWYgKCFlcnIpCisJCWVyciA9IHRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfUldfUE9SVCwgdmFsKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgdGczX3BoeV9hdXhjdGxfcmVhZChzdHJ1Y3QgdGczICp0cCwgaW50IHJlZywgdTMyICp2YWwpCit7CisJaW50IGVycjsKKworCWVyciA9IHRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19BVVhfQ1RSTCwKKwkJCSAgIChyZWcgPDwgTUlJX1RHM19BVVhDVExfTUlTQ19SRFNFTF9TSElGVCkgfAorCQkJICAgTUlJX1RHM19BVVhDVExfU0hEV1NFTF9NSVNDKTsKKwlpZiAoIWVycikKKwkJZXJyID0gdGczX3JlYWRwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIHZhbCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHRnM19waHlfYXV4Y3RsX3dyaXRlKHN0cnVjdCB0ZzMgKnRwLCBpbnQgcmVnLCB1MzIgc2V0KQoreworCWlmIChyZWcgPT0gTUlJX1RHM19BVVhDVExfU0hEV1NFTF9NSVNDKQorCQlzZXQgfD0gTUlJX1RHM19BVVhDVExfTUlTQ19XUkVOOworCisJcmV0dXJuIHRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19BVVhfQ1RSTCwgc2V0IHwgcmVnKTsKK30KKworI2RlZmluZSBURzNfUEhZX0FVWENUTF9TTURTUF9FTkFCTEUodHApIFwKKwl0ZzNfcGh5X2F1eGN0bF93cml0ZSgodHApLCBNSUlfVEczX0FVWENUTF9TSERXU0VMX0FVWENUTCwgXAorCQkJICAgICBNSUlfVEczX0FVWENUTF9BQ1RMX1NNRFNQX0VOQSB8IFwKKwkJCSAgICAgTUlJX1RHM19BVVhDVExfQUNUTF9UWF82REIpCisKKyNkZWZpbmUgVEczX1BIWV9BVVhDVExfU01EU1BfRElTQUJMRSh0cCkgXAorCXRnM19waHlfYXV4Y3RsX3dyaXRlKCh0cCksIE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfQVVYQ1RMLCBcCisJCQkgICAgIE1JSV9URzNfQVVYQ1RMX0FDVExfVFhfNkRCKTsKKwogc3RhdGljIGludCB0ZzNfYm1jcl9yZXNldChzdHJ1Y3QgdGczICp0cCkKIHsKIAl1MzIgcGh5X2NvbnRyb2w7CkBAIC05ODIsNyArMTEwMSw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1JHTUlJX0lOQkFORF9ESVNBQkxFKSkKKwlpZiAoIXRnM19mbGFnKHRwLCBSR01JSV9JTkJBTkRfRElTQUJMRSkpCiAJCXZhbCB8PSBNQUNfUEhZQ0ZHMl9FTU9ERV9NQVNLX01BU0sgfAogCQkgICAgICAgTUFDX1BIWUNGRzJfRk1PREVfTUFTS19NQVNLIHwKIAkJICAgICAgIE1BQ19QSFlDRkcyX0dNT0RFX01BU0tfTUFTSyB8CkBAIC05OTUsMTAgKzExMTQsMTAgQEAKIAl2YWwgPSB0cjMyKE1BQ19QSFlDRkcxKTsKIAl2YWwgJj0gfihNQUNfUEhZQ0ZHMV9SWENMS19UT19NQVNLIHwgTUFDX1BIWUNGRzFfVFhDTEtfVE9fTUFTSyB8CiAJCSBNQUNfUEhZQ0ZHMV9SR01JSV9FWFRfUlhfREVDIHwgTUFDX1BIWUNGRzFfUkdNSUlfU05EX1NUQVRfRU4pOwotCWlmICghKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUkdNSUlfSU5CQU5EX0RJU0FCTEUpKSB7Ci0JCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1JHTUlJX0VYVF9JQk5EX1JYX0VOKQorCWlmICghdGczX2ZsYWcodHAsIFJHTUlJX0lOQkFORF9ESVNBQkxFKSkgeworCQlpZiAodGczX2ZsYWcodHAsIFJHTUlJX0VYVF9JQk5EX1JYX0VOKSkKIAkJCXZhbCB8PSBNQUNfUEhZQ0ZHMV9SR01JSV9FWFRfUlhfREVDOwotCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19SR01JSV9FWFRfSUJORF9UWF9FTikKKwkJaWYgKHRnM19mbGFnKHRwLCBSR01JSV9FWFRfSUJORF9UWF9FTikpCiAJCQl2YWwgfD0gTUFDX1BIWUNGRzFfUkdNSUlfU05EX1NUQVRfRU47CiAJfQogCXZhbCB8PSBNQUNfUEhZQ0ZHMV9SWENMS19USU1FT1VUIHwgTUFDX1BIWUNGRzFfVFhDTEtfVElNRU9VVCB8CkBAIC0xMDEzLDEzICsxMTMyLDEzIEBACiAJCSBNQUNfUkdNSUlfTU9ERV9UWF9FTkFCTEUgfAogCQkgTUFDX1JHTUlJX01PREVfVFhfTE9XUFdSIHwKIAkJIE1BQ19SR01JSV9NT0RFX1RYX1JFU0VUKTsKLQlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1JHTUlJX0lOQkFORF9ESVNBQkxFKSkgewotCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19SR01JSV9FWFRfSUJORF9SWF9FTikKKwlpZiAoIXRnM19mbGFnKHRwLCBSR01JSV9JTkJBTkRfRElTQUJMRSkpIHsKKwkJaWYgKHRnM19mbGFnKHRwLCBSR01JSV9FWFRfSUJORF9SWF9FTikpCiAJCQl2YWwgfD0gTUFDX1JHTUlJX01PREVfUlhfSU5UX0IgfAogCQkJICAgICAgIE1BQ19SR01JSV9NT0RFX1JYX1FVQUxJVFkgfAogCQkJICAgICAgIE1BQ19SR01JSV9NT0RFX1JYX0FDVElWSVRZIHwKIAkJCSAgICAgICBNQUNfUkdNSUlfTU9ERV9SWF9FTkdfREVUOwotCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19SR01JSV9FWFRfSUJORF9UWF9FTikKKwkJaWYgKHRnM19mbGFnKHRwLCBSR01JSV9FWFRfSUJORF9UWF9FTikpCiAJCQl2YWwgfD0gTUFDX1JHTUlJX01PREVfVFhfRU5BQkxFIHwKIAkJCSAgICAgICBNQUNfUkdNSUlfTU9ERV9UWF9MT1dQV1IgfAogCQkJICAgICAgIE1BQ19SR01JSV9NT0RFX1RYX1JFU0VUOwpAQCAtMTAzMyw3ICsxMTUyLDcgQEAKIAl0dzMyX2YoTUFDX01JX01PREUsIHRwLT5taV9tb2RlKTsKIAl1ZGVsYXkoODApOwogCi0JaWYgKCh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX01ESU9CVVNfSU5JVEVEKSAmJgorCWlmICh0ZzNfZmxhZyh0cCwgTURJT0JVU19JTklURUQpICYmCiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg1KQogCQl0ZzNfbWRpb19jb25maWdfNTc4NSh0cCk7CiB9CkBAIC0xMDQ0LDggKzExNjMsNyBAQAogCXUzMiByZWc7CiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKIAotCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNyB8fAotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxOSkgeworCWlmICh0ZzNfZmxhZyh0cCwgNTcxN19QTFVTKSkgewogCQl1MzIgaXNfc2VyZGVzOwogCiAJCXRwLT5waHlfYWRkciA9IFBDSV9GVU5DKHRwLT5wZGV2LT5kZXZmbikgKyAxOwpAQCAtMTA2Miw4ICsxMTgwLDcgQEAKIAogCXRnM19tZGlvX3N0YXJ0KHRwKTsKIAotCWlmICghKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfVVNFX1BIWUxJQikgfHwKLQkgICAgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTURJT0JVU19JTklURUQpKQorCWlmICghdGczX2ZsYWcodHAsIFVTRV9QSFlMSUIpIHx8IHRnM19mbGFnKHRwLCBNRElPQlVTX0lOSVRFRCkpCiAJCXJldHVybiAwOwogCiAJdHAtPm1kaW9fYnVzID0gbWRpb2J1c19hbGxvYygpOwpAQCAtMTExOSwxMSArMTIzNiwxMSBAQAogCQkJCSAgICAgUEhZX0JSQ01fUlhfUkVGQ0xLX1VOVVNFRCB8CiAJCQkJICAgICBQSFlfQlJDTV9ESVNfVFhDUlhDX05PRU5SR1kgfAogCQkJCSAgICAgUEhZX0JSQ01fQVVUT19QV1JEV05fRU5BQkxFOwotCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19SR01JSV9JTkJBTkRfRElTQUJMRSkKKwkJaWYgKHRnM19mbGFnKHRwLCBSR01JSV9JTkJBTkRfRElTQUJMRSkpCiAJCQlwaHlkZXYtPmRldl9mbGFncyB8PSBQSFlfQlJDTV9TVERfSUJORF9ESVNBQkxFOwotCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19SR01JSV9FWFRfSUJORF9SWF9FTikKKwkJaWYgKHRnM19mbGFnKHRwLCBSR01JSV9FWFRfSUJORF9SWF9FTikpCiAJCQlwaHlkZXYtPmRldl9mbGFncyB8PSBQSFlfQlJDTV9FWFRfSUJORF9SWF9FTkFCTEU7Ci0JCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1JHTUlJX0VYVF9JQk5EX1RYX0VOKQorCQlpZiAodGczX2ZsYWcodHAsIFJHTUlJX0VYVF9JQk5EX1RYX0VOKSkKIAkJCXBoeWRldi0+ZGV2X2ZsYWdzIHw9IFBIWV9CUkNNX0VYVF9JQk5EX1RYX0VOQUJMRTsKIAkJLyogZmFsbHRocnUgKi8KIAljYXNlIFBIWV9JRF9SVEw4MjExQzoKQEAgLTExMzcsNyArMTI1NCw3IEBACiAJCWJyZWFrOwogCX0KIAotCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX01ESU9CVVNfSU5JVEVEOworCXRnM19mbGFnX3NldCh0cCwgTURJT0JVU19JTklURUQpOwogCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg1KQogCQl0ZzNfbWRpb19jb25maWdfNTc4NSh0cCk7CkBAIC0xMTQ3LDU5ICsxMjY0LDEzIEBACiAKIHN0YXRpYyB2b2lkIHRnM19tZGlvX2Zpbmkoc3RydWN0IHRnMyAqdHApCiB7Ci0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTURJT0JVU19JTklURUQpIHsKLQkJdHAtPnRnM19mbGFnczMgJj0gflRHM19GTEczX01ESU9CVVNfSU5JVEVEOworCWlmICh0ZzNfZmxhZyh0cCwgTURJT0JVU19JTklURUQpKSB7CisJCXRnM19mbGFnX2NsZWFyKHRwLCBNRElPQlVTX0lOSVRFRCk7CiAJCW1kaW9idXNfdW5yZWdpc3Rlcih0cC0+bWRpb19idXMpOwogCQltZGlvYnVzX2ZyZWUodHAtPm1kaW9fYnVzKTsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgdGczX3BoeV9jbDQ1X3dyaXRlKHN0cnVjdCB0ZzMgKnRwLCB1MzIgZGV2YWQsIHUzMiBhZGRyLCB1MzIgdmFsKQotewotCWludCBlcnI7Ci0KLQllcnIgPSB0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfTU1EX0NUUkwsIGRldmFkKTsKLQlpZiAoZXJyKQotCQlnb3RvIGRvbmU7Ci0KLQllcnIgPSB0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfTU1EX0FERFJFU1MsIGFkZHIpOwotCWlmIChlcnIpCi0JCWdvdG8gZG9uZTsKLQotCWVyciA9IHRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19NTURfQ1RSTCwKLQkJCSAgIE1JSV9URzNfTU1EX0NUUkxfREFUQV9OT0lOQyB8IGRldmFkKTsKLQlpZiAoZXJyKQotCQlnb3RvIGRvbmU7Ci0KLQllcnIgPSB0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfTU1EX0FERFJFU1MsIHZhbCk7Ci0KLWRvbmU6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCB0ZzNfcGh5X2NsNDVfcmVhZChzdHJ1Y3QgdGczICp0cCwgdTMyIGRldmFkLCB1MzIgYWRkciwgdTMyICp2YWwpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IHRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19NTURfQ1RSTCwgZGV2YWQpOwotCWlmIChlcnIpCi0JCWdvdG8gZG9uZTsKLQotCWVyciA9IHRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19NTURfQUREUkVTUywgYWRkcik7Ci0JaWYgKGVycikKLQkJZ290byBkb25lOwotCi0JZXJyID0gdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX01NRF9DVFJMLAotCQkJICAgTUlJX1RHM19NTURfQ1RSTF9EQVRBX05PSU5DIHwgZGV2YWQpOwotCWlmIChlcnIpCi0JCWdvdG8gZG9uZTsKLQotCWVyciA9IHRnM19yZWFkcGh5KHRwLCBNSUlfVEczX01NRF9BRERSRVNTLCB2YWwpOwotCi1kb25lOgotCXJldHVybiBlcnI7Ci19Ci0KIC8qIHRwLT5sb2NrIGlzIGhlbGQuICovCiBzdGF0aWMgaW5saW5lIHZvaWQgdGczX2dlbmVyYXRlX2Z3X2V2ZW50KHN0cnVjdCB0ZzMgKnRwKQogewpAQCAtMTI0Nyw4ICsxMzE4LDcgQEAKIAl1MzIgcmVnOwogCXUzMiB2YWw7CiAKLQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3ODBfQ0xBU1MpIHx8Ci0JICAgICEodHAtPnRnM19mbGFncyAgJiBURzNfRkxBR19FTkFCTEVfQVNGKSkKKwlpZiAoIXRnM19mbGFnKHRwLCA1NzgwX0NMQVNTKSB8fCAhdGczX2ZsYWcodHAsIEVOQUJMRV9BU0YpKQogCQlyZXR1cm47CiAKIAl0ZzNfd2FpdF9mb3JfZXZlbnRfYWNrKHRwKTsKQEAgLTEzMDgsNiArMTM3OCwxMSBAQAogCQkJICAgICJvbiIgOiAib2ZmIiwKIAkJCSAgICAodHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9mbG93Y3RybCAmIEZMT1dfQ1RSTF9SWCkgPwogCQkJICAgICJvbiIgOiAib2ZmIik7CisKKwkJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0VFRV9DQVApCisJCQluZXRkZXZfaW5mbyh0cC0+ZGV2LCAiRUVFIGlzICVzXG4iLAorCQkJCSAgICB0cC0+c2V0bHBpY250ID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7CisKIAkJdGczX3VtcF9saW5rX3JlcG9ydCh0cCk7CiAJfQogfQpAQCAtMTM3MywxMyArMTQ0OCwxMiBAQAogCXUzMiBvbGRfcnhfbW9kZSA9IHRwLT5yeF9tb2RlOwogCXUzMiBvbGRfdHhfbW9kZSA9IHRwLT50eF9tb2RlOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfVVNFX1BIWUxJQikKKwlpZiAodGczX2ZsYWcodHAsIFVTRV9QSFlMSUIpKQogCQlhdXRvbmVnID0gdHAtPm1kaW9fYnVzLT5waHlfbWFwW1RHM19QSFlfTUlJX0FERFJdLT5hdXRvbmVnOwogCWVsc2UKIAkJYXV0b25lZyA9IHRwLT5saW5rX2NvbmZpZy5hdXRvbmVnOwogCi0JaWYgKGF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUgJiYKLQkgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19QQVVTRV9BVVRPTkVHKSkgeworCWlmIChhdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFICYmIHRnM19mbGFnKHRwLCBQQVVTRV9BVVRPTkVHKSkgewogCQlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfQU5ZX1NFUkRFUykKIAkJCWZsb3djdHJsID0gdGczX3Jlc29sdmVfZmxvd2N0cmxfMTAwMFgobGNsYWR2LCBybXRhZHYpOwogCQllbHNlCkBAIC0xNTc2LDI4ICsxNjUwLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgdGczX3BoeWRzcF9yZWFkKHN0cnVjdCB0ZzMgKnRwLCB1MzIgcmVnLCB1MzIgKnZhbCkKLXsKLQlpbnQgZXJyOwotCi0JZXJyID0gdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9BRERSRVNTLCByZWcpOwotCWlmICghZXJyKQotCQllcnIgPSB0ZzNfcmVhZHBoeSh0cCwgTUlJX1RHM19EU1BfUldfUE9SVCwgdmFsKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgdGczX3BoeWRzcF93cml0ZShzdHJ1Y3QgdGczICp0cCwgdTMyIHJlZywgdTMyIHZhbCkKLXsKLQlpbnQgZXJyOwotCi0JZXJyID0gdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9BRERSRVNTLCByZWcpOwotCWlmICghZXJyKQotCQllcnIgPSB0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRFNQX1JXX1BPUlQsIHZhbCk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCiBzdGF0aWMgdm9pZCB0ZzNfcGh5X2ZldF90b2dnbGVfYXBkKHN0cnVjdCB0ZzMgKnRwLCBib29sIGVuYWJsZSkKIHsKIAl1MzIgcGh5dGVzdDsKQEAgLTE2MjIsOSArMTY3NCw4IEBACiB7CiAJdTMyIHJlZzsKIAotCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSB8fAotCSAgICAoKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3IHx8Ci0JICAgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTkpICYmCisJaWYgKCF0ZzNfZmxhZyh0cCwgNTcwNV9QTFVTKSB8fAorCSAgICAodGczX2ZsYWcodHAsIDU3MTdfUExVUykgJiYKIAkgICAgICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19NSUlfU0VSREVTKSkpCiAJCXJldHVybjsKIApAQCAtMTY1OCw3ICsxNzA5LDcgQEAKIHsKIAl1MzIgcGh5OwogCi0JaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpIHx8CisJaWYgKCF0ZzNfZmxhZyh0cCwgNTcwNV9QTFVTKSB8fAogCSAgICAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfQU5ZX1NFUkRFUykpCiAJCXJldHVybjsKIApAQCAtMTY4MCwzMSArMTczMSwzMyBAQAogCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0ZFVF9URVNULCBlcGh5KTsKIAkJfQogCX0gZWxzZSB7Ci0JCXBoeSA9IE1JSV9URzNfQVVYQ1RMX01JU0NfUkRTRUxfTUlTQyB8Ci0JCSAgICAgIE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfTUlTQzsKLQkJaWYgKCF0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIHBoeSkgJiYKLQkJICAgICF0ZzNfcmVhZHBoeSh0cCwgTUlJX1RHM19BVVhfQ1RSTCwgJnBoeSkpIHsKKwkJaW50IHJldDsKKworCQlyZXQgPSB0ZzNfcGh5X2F1eGN0bF9yZWFkKHRwLAorCQkJCQkgIE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfTUlTQywgJnBoeSk7CisJCWlmICghcmV0KSB7CiAJCQlpZiAoZW5hYmxlKQogCQkJCXBoeSB8PSBNSUlfVEczX0FVWENUTF9NSVNDX0ZPUkNFX0FNRElYOwogCQkJZWxzZQogCQkJCXBoeSAmPSB+TUlJX1RHM19BVVhDVExfTUlTQ19GT1JDRV9BTURJWDsKLQkJCXBoeSB8PSBNSUlfVEczX0FVWENUTF9NSVNDX1dSRU47Ci0JCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIHBoeSk7CisJCQl0ZzNfcGh5X2F1eGN0bF93cml0ZSh0cCwKKwkJCQkJICAgICBNSUlfVEczX0FVWENUTF9TSERXU0VMX01JU0MsIHBoeSk7CiAJCX0KIAl9CiB9CiAKIHN0YXRpYyB2b2lkIHRnM19waHlfc2V0X3dpcmVzcGVlZChzdHJ1Y3QgdGczICp0cCkKIHsKKwlpbnQgcmV0OwogCXUzMiB2YWw7CiAKIAlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfTk9fRVRIX1dJUkVfU1BFRUQpCiAJCXJldHVybjsKIAotCWlmICghdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0FVWF9DVFJMLCAweDcwMDcpICYmCi0JICAgICF0ZzNfcmVhZHBoeSh0cCwgTUlJX1RHM19BVVhfQ1RSTCwgJnZhbCkpCi0JCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19BVVhfQ1RSTCwKLQkJCSAgICAgKHZhbCB8ICgxIDw8IDE1KSB8ICgxIDw8IDQpKSk7CisJcmV0ID0gdGczX3BoeV9hdXhjdGxfcmVhZCh0cCwgTUlJX1RHM19BVVhDVExfU0hEV1NFTF9NSVNDLCAmdmFsKTsKKwlpZiAoIXJldCkKKwkJdGczX3BoeV9hdXhjdGxfd3JpdGUodHAsIE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfTUlTQywKKwkJCQkgICAgIHZhbCB8IE1JSV9URzNfQVVYQ1RMX01JU0NfV0lSRVNQRF9FTik7CiB9CiAKIHN0YXRpYyB2b2lkIHRnM19waHlfYXBwbHlfb3RwKHN0cnVjdCB0ZzMgKnRwKQpAQCAtMTcxNiwxMSArMTc2OSw4IEBACiAKIAlvdHAgPSB0cC0+cGh5X290cDsKIAotCS8qIEVuYWJsZSBTTV9EU1AgY2xvY2sgYW5kIHR4IDZkQiBjb2RpbmcuICovCi0JcGh5ID0gTUlJX1RHM19BVVhDVExfU0hEV1NFTF9BVVhDVEwgfAotCSAgICAgIE1JSV9URzNfQVVYQ1RMX0FDVExfU01EU1BfRU5BIHwKLQkgICAgICBNSUlfVEczX0FVWENUTF9BQ1RMX1RYXzZEQjsKLQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIHBoeSk7CisJaWYgKFRHM19QSFlfQVVYQ1RMX1NNRFNQX0VOQUJMRSh0cCkpCisJCXJldHVybjsKIAogCXBoeSA9ICgob3RwICYgVEczX09UUF9BR0NUR1RfTUFTSykgPj4gVEczX09UUF9BR0NUR1RfU0hJRlQpOwogCXBoeSB8PSBNSUlfVEczX0RTUF9UQVAxX0FHQ1RHVF9ERkxUOwpAQCAtMTc0NCwxMCArMTc5NCw3IEBACiAJICAgICAgKChvdHAgJiBURzNfT1RQX1JDT0ZGX01BU0spID4+IFRHM19PVFBfUkNPRkZfU0hJRlQpOwogCXRnM19waHlkc3Bfd3JpdGUodHAsIE1JSV9URzNfRFNQX0VYUDk3LCBwaHkpOwogCi0JLyogVHVybiBvZmYgU01fRFNQIGNsb2NrLiAqLwotCXBoeSA9IE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfQVVYQ1RMIHwKLQkgICAgICBNSUlfVEczX0FVWENUTF9BQ1RMX1RYXzZEQjsKLQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIHBoeSk7CisJVEczX1BIWV9BVVhDVExfU01EU1BfRElTQUJMRSh0cCk7CiB9CiAKIHN0YXRpYyB2b2lkIHRnM19waHlfZWVlX2FkanVzdChzdHJ1Y3QgdGczICp0cCwgdTMyIGN1cnJlbnRfbGlua191cCkKQEAgLTE3NzYsMjkgKzE4MjMsOSBAQAogCQl0ZzNfcGh5X2NsNDVfcmVhZCh0cCwgTURJT19NTURfQU4sCiAJCQkJICBURzNfQ0w0NV9EN19FRUVSRVNfU1RBVCwgJnZhbCk7CiAKLQkJc3dpdGNoICh2YWwpIHsKLQkJY2FzZSBURzNfQ0w0NV9EN19FRUVSRVNfU1RBVF9MUF8xMDAwVDoKLQkJCXN3aXRjaCAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpKSB7Ci0JCQljYXNlIEFTSUNfUkVWXzU3MTc6Ci0JCQljYXNlIEFTSUNfUkVWXzU3MTk6Ci0JCQljYXNlIEFTSUNfUkVWXzU3NzY1OgotCQkJCS8qIEVuYWJsZSBTTV9EU1AgY2xvY2sgYW5kIHR4IDZkQiBjb2RpbmcuICovCi0JCQkJdmFsID0gTUlJX1RHM19BVVhDVExfU0hEV1NFTF9BVVhDVEwgfAotCQkJCSAgICAgIE1JSV9URzNfQVVYQ1RMX0FDVExfU01EU1BfRU5BIHwKLQkJCQkgICAgICBNSUlfVEczX0FVWENUTF9BQ1RMX1RYXzZEQjsKLQkJCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIHZhbCk7Ci0KLQkJCQl0ZzNfcGh5ZHNwX3dyaXRlKHRwLCBNSUlfVEczX0RTUF9UQVAyNiwgMHgwMDAwKTsKLQotCQkJCS8qIFR1cm4gb2ZmIFNNX0RTUCBjbG9jay4gKi8KLQkJCQl2YWwgPSBNSUlfVEczX0FVWENUTF9TSERXU0VMX0FVWENUTCB8Ci0JCQkJICAgICAgTUlJX1RHM19BVVhDVExfQUNUTF9UWF82REI7Ci0JCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0FVWF9DVFJMLCB2YWwpOwotCQkJfQotCQkJLyogRmFsbHRocm91Z2ggKi8KLQkJY2FzZSBURzNfQ0w0NV9EN19FRUVSRVNfU1RBVF9MUF8xMDBUWDoKKwkJaWYgKHZhbCA9PSBURzNfQ0w0NV9EN19FRUVSRVNfU1RBVF9MUF8xMDAwVCB8fAorCQkgICAgdmFsID09IFRHM19DTDQ1X0Q3X0VFRVJFU19TVEFUX0xQXzEwMFRYKQogCQkJdHAtPnNldGxwaWNudCA9IDI7Ci0JCX0KIAl9CiAKIAlpZiAoIXRwLT5zZXRscGljbnQpIHsKQEAgLTE4MDcsNiArMTgzNCwyMyBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgdGczX3BoeV9lZWVfZW5hYmxlKHN0cnVjdCB0ZzMgKnRwKQoreworCXUzMiB2YWw7CisKKwlpZiAodHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9zcGVlZCA9PSBTUEVFRF8xMDAwICYmCisJICAgIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNyB8fAorCSAgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTkgfHwKKwkgICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc2NSkgJiYKKwkgICAgIVRHM19QSFlfQVVYQ1RMX1NNRFNQX0VOQUJMRSh0cCkpIHsKKwkJdGczX3BoeWRzcF93cml0ZSh0cCwgTUlJX1RHM19EU1BfVEFQMjYsIDB4MDAwMyk7CisJCVRHM19QSFlfQVVYQ1RMX1NNRFNQX0RJU0FCTEUodHApOworCX0KKworCXZhbCA9IHRyMzIoVEczX0NQTVVfRUVFX01PREUpOworCXR3MzIoVEczX0NQTVVfRUVFX01PREUsIHZhbCB8IFRHM19DUE1VX0VFRU1EX0xQSV9FTkFCTEUpOworfQorCiBzdGF0aWMgaW50IHRnM193YWl0X21hY3JvX2RvbmUoc3RydWN0IHRnMyAqdHApCiB7CiAJaW50IGxpbWl0ID0gMTAwOwpAQCAtMTk0NSw4ICsxOTg5LDkgQEAKIAkJCSAgICAgKE1JSV9URzNfQ1RSTF9BU19NQVNURVIgfAogCQkJICAgICAgTUlJX1RHM19DVFJMX0VOQUJMRV9BU19NQVNURVIpKTsKIAotCQkvKiBFbmFibGUgU01fRFNQX0NMT0NLIGFuZCA2ZEIuICAqLwotCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIDB4MGMwMCk7CisJCWVyciA9IFRHM19QSFlfQVVYQ1RMX1NNRFNQX0VOQUJMRSh0cCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOwogCiAJCS8qIEJsb2NrIHRoZSBQSFkgY29udHJvbCBhY2Nlc3MuICAqLwogCQl0ZzNfcGh5ZHNwX3dyaXRlKHRwLCAweDgwMDUsIDB4MDgwMCk7CkBAIC0xOTY1LDEzICsyMDEwLDcgQEAKIAl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRFNQX0FERFJFU1MsIDB4ODIwMCk7CiAJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9DT05UUk9MLCAweDAwMDApOwogCi0JaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzAzIHx8Ci0JICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzA0KSB7Ci0JCS8qIFNldCBFeHRlbmRlZCBwYWNrZXQgbGVuZ3RoIGJpdCBmb3IganVtYm8gZnJhbWVzICovCi0JCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19BVVhfQ1RSTCwgMHg0NDAwKTsKLQl9IGVsc2UgewotCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIDB4MDQwMCk7Ci0JfQorCVRHM19QSFlfQVVYQ1RMX1NNRFNQX0RJU0FCTEUodHApOwogCiAJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0NUUkwsIHBoeTlfb3JpZyk7CiAKQEAgLTIwNDcsOCArMjA4Niw3IEBACiAJCX0KIAl9CiAKLQlpZiAoKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3IHx8Ci0JICAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxOSkgJiYKKwlpZiAodGczX2ZsYWcodHAsIDU3MTdfUExVUykgJiYKIAkgICAgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX01JSV9TRVJERVMpKQogCQlyZXR1cm4gMDsKIApAQCAtMjA2MCw0OSArMjA5OCw1NyBAQAogCQl0ZzNfcGh5X3RvZ2dsZV9hcGQodHAsIGZhbHNlKTsKIAogb3V0OgotCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19BRENfQlVHKSB7Ci0JCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19BVVhfQ1RSTCwgMHgwYzAwKTsKKwlpZiAoKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0FEQ19CVUcpICYmCisJICAgICFURzNfUEhZX0FVWENUTF9TTURTUF9FTkFCTEUodHApKSB7CiAJCXRnM19waHlkc3Bfd3JpdGUodHAsIDB4MjAxZiwgMHgyYWFhKTsKIAkJdGczX3BoeWRzcF93cml0ZSh0cCwgMHgwMDBhLCAweDAzMjMpOwotCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIDB4MDQwMCk7CisJCVRHM19QSFlfQVVYQ1RMX1NNRFNQX0RJU0FCTEUodHApOwogCX0KKwogCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR181NzA0X0EwX0JVRykgewogCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfTUlTQ19TSERXLCAweDhkNjgpOwogCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfTUlTQ19TSERXLCAweDhkNjgpOwogCX0KKwogCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19CRVJfQlVHKSB7Ci0JCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19BVVhfQ1RSTCwgMHgwYzAwKTsKLQkJdGczX3BoeWRzcF93cml0ZSh0cCwgMHgwMDBhLCAweDMxMGIpOwotCQl0ZzNfcGh5ZHNwX3dyaXRlKHRwLCAweDIwMWYsIDB4OTUwNik7Ci0JCXRnM19waHlkc3Bfd3JpdGUodHAsIDB4NDAxZiwgMHgxNGUyKTsKLQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0FVWF9DVFJMLCAweDA0MDApOworCQlpZiAoIVRHM19QSFlfQVVYQ1RMX1NNRFNQX0VOQUJMRSh0cCkpIHsKKwkJCXRnM19waHlkc3Bfd3JpdGUodHAsIDB4MDAwYSwgMHgzMTBiKTsKKwkJCXRnM19waHlkc3Bfd3JpdGUodHAsIDB4MjAxZiwgMHg5NTA2KTsKKwkJCXRnM19waHlkc3Bfd3JpdGUodHAsIDB4NDAxZiwgMHgxNGUyKTsKKwkJCVRHM19QSFlfQVVYQ1RMX1NNRFNQX0RJU0FCTEUodHApOworCQl9CiAJfSBlbHNlIGlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19KSVRURVJfQlVHKSB7Ci0JCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19BVVhfQ1RSTCwgMHgwYzAwKTsKLQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9BRERSRVNTLCAweDAwMGEpOwotCQlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfQURKVVNUX1RSSU0pIHsKLQkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfUldfUE9SVCwgMHgxMTBiKTsKLQkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19URVNUMSwKLQkJCQkgICAgIE1JSV9URzNfVEVTVDFfVFJJTV9FTiB8IDB4NCk7Ci0JCX0gZWxzZQotCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9SV19QT1JULCAweDAxMGIpOwotCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIDB4MDQwMCk7CisJCWlmICghVEczX1BIWV9BVVhDVExfU01EU1BfRU5BQkxFKHRwKSkgeworCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9BRERSRVNTLCAweDAwMGEpOworCQkJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0FESlVTVF9UUklNKSB7CisJCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9SV19QT1JULCAweDExMGIpOworCQkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19URVNUMSwKKwkJCQkJICAgICBNSUlfVEczX1RFU1QxX1RSSU1fRU4gfCAweDQpOworCQkJfSBlbHNlCisJCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9SV19QT1JULCAweDAxMGIpOworCisJCQlURzNfUEhZX0FVWENUTF9TTURTUF9ESVNBQkxFKHRwKTsKKwkJfQogCX0KKwogCS8qIFNldCBFeHRlbmRlZCBwYWNrZXQgbGVuZ3RoIGJpdCAoYml0IDE0KSBvbiBhbGwgY2hpcHMgdGhhdCAqLwogCS8qIHN1cHBvcnQganVtYm8gZnJhbWVzICovCiAJaWYgKCh0cC0+cGh5X2lkICYgVEczX1BIWV9JRF9NQVNLKSA9PSBURzNfUEhZX0lEX0JDTTU0MDEpIHsKIAkJLyogQ2Fubm90IGRvIHJlYWQtbW9kaWZ5LXdyaXRlIG9uIDU0MDEgKi8KLQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0FVWF9DVFJMLCAweDRjMjApOwotCX0gZWxzZSBpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0pVTUJPX0NBUEFCTEUpIHsKKwkJdGczX3BoeV9hdXhjdGxfd3JpdGUodHAsIE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfQVVYQ1RMLCAweDRjMjApOworCX0gZWxzZSBpZiAodGczX2ZsYWcodHAsIEpVTUJPX0NBUEFCTEUpKSB7CiAJCS8qIFNldCBiaXQgMTQgd2l0aCByZWFkLW1vZGlmeS13cml0ZSB0byBwcmVzZXJ2ZSBvdGhlciBiaXRzICovCi0JCWlmICghdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0FVWF9DVFJMLCAweDAwMDcpICYmCi0JCSAgICAhdGczX3JlYWRwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsICZ2YWwpKQotCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0FVWF9DVFJMLCB2YWwgfCAweDQwMDApOworCQllcnIgPSB0ZzNfcGh5X2F1eGN0bF9yZWFkKHRwLAorCQkJCQkgIE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfQVVYQ1RMLCAmdmFsKTsKKwkJaWYgKCFlcnIpCisJCQl0ZzNfcGh5X2F1eGN0bF93cml0ZSh0cCwgTUlJX1RHM19BVVhDVExfU0hEV1NFTF9BVVhDVEwsCisJCQkJCSAgIHZhbCB8IE1JSV9URzNfQVVYQ1RMX0FDVExfRVhUUEtUTEVOKTsKIAl9CiAKIAkvKiBTZXQgcGh5IHJlZ2lzdGVyIDB4MTAgYml0IDAgdG8gaGlnaCBmaWZvIGVsYXN0aWNpdHkgdG8gc3VwcG9ydAogCSAqIGp1bWJvIGZyYW1lcyB0cmFuc21pc3Npb24uCiAJICovCi0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19KVU1CT19DQVBBQkxFKSB7CisJaWYgKHRnM19mbGFnKHRwLCBKVU1CT19DQVBBQkxFKSkgewogCQlpZiAoIXRnM19yZWFkcGh5KHRwLCBNSUlfVEczX0VYVF9DVFJMLCAmdmFsKSkKIAkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19FWFRfQ1RSTCwKIAkJCQkgICAgIHZhbCB8IE1JSV9URzNfRVhUX0NUUkxfRklGT19FTEFTVElDKTsKQEAgLTIxMjMsMTQgKzIxNjksMTUgQEAKIAlib29sIG5lZWRfdmF1eCA9IGZhbHNlOwogCiAJLyogVGhlIEdQSU9zIGRvIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudCBvbiA1Nzc2NS4gKi8KLQlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfSVNfTklDKSA9PSAwIHx8CisJaWYgKCF0ZzNfZmxhZyh0cCwgSVNfTklDKSB8fAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxOSB8fAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3NjUpCiAJCXJldHVybjsKIAogCWlmICgoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDQgfHwKIAkgICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE0IHx8Ci0JICAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNykgJiYKKwkgICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3IHx8CisJICAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcyMCkgJiYKIAkgICAgdHAtPnBkZXZfcGVlciAhPSB0cC0+cGRldikgewogCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X3BlZXI7CiAKQEAgLTIxNDAsMTcgKzIxODcsMTYgQEAKIAkJaWYgKGRldl9wZWVyKSB7CiAJCQlzdHJ1Y3QgdGczICp0cF9wZWVyID0gbmV0ZGV2X3ByaXYoZGV2X3BlZXIpOwogCi0JCQlpZiAodHBfcGVlci0+dGczX2ZsYWdzICYgVEczX0ZMQUdfSU5JVF9DT01QTEVURSkKKwkJCWlmICh0ZzNfZmxhZyh0cF9wZWVyLCBJTklUX0NPTVBMRVRFKSkKIAkJCQlyZXR1cm47CiAKLQkJCWlmICgodHBfcGVlci0+dGczX2ZsYWdzICYgVEczX0ZMQUdfV09MX0VOQUJMRSkgfHwKLQkJCSAgICAodHBfcGVlci0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikpCisJCQlpZiAodGczX2ZsYWcodHBfcGVlciwgV09MX0VOQUJMRSkgfHwKKwkJCSAgICB0ZzNfZmxhZyh0cF9wZWVyLCBFTkFCTEVfQVNGKSkKIAkJCQluZWVkX3ZhdXggPSB0cnVlOwogCQl9CiAJfQogCi0JaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfV09MX0VOQUJMRSkgfHwKLQkgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKSkKKwlpZiAodGczX2ZsYWcodHAsIFdPTF9FTkFCTEUpIHx8IHRnM19mbGFnKHRwLCBFTkFCTEVfQVNGKSkKIAkJbmVlZF92YXV4ID0gdHJ1ZTsKIAogCWlmIChuZWVkX3ZhdXgpIHsKQEAgLTIzMDQsMTEgKzIzNTAsMTAgQEAKIAkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0VYVF9DVFJMLAogCQkJICAgICBNSUlfVEczX0VYVF9DVFJMX0ZPUkNFX0xFRF9PRkYpOwogCi0JCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19BVVhfQ1RSTCwKLQkJCSAgICAgTUlJX1RHM19BVVhDVExfU0hEV1NFTF9QV1JDVEwgfAotCQkJICAgICBNSUlfVEczX0FVWENUTF9QQ1RMXzEwMFRYX0xQV1IgfAotCQkJICAgICBNSUlfVEczX0FVWENUTF9QQ1RMX1NQUl9JU09MQVRFIHwKLQkJCSAgICAgTUlJX1RHM19BVVhDVExfUENUTF9WUkVHXzExVik7CisJCXZhbCA9IE1JSV9URzNfQVVYQ1RMX1BDVExfMTAwVFhfTFBXUiB8CisJCSAgICAgIE1JSV9URzNfQVVYQ1RMX1BDVExfU1BSX0lTT0xBVEUgfAorCQkgICAgICBNSUlfVEczX0FVWENUTF9QQ1RMX1ZSRUdfMTFWOworCQl0ZzNfcGh5X2F1eGN0bF93cml0ZSh0cCwgTUlJX1RHM19BVVhDVExfU0hEV1NFTF9QV1JDVEwsIHZhbCk7CiAJfQogCiAJLyogVGhlIFBIWSBzaG91bGQgbm90IGJlIHBvd2VyZWQgZG93biBvbiBzb21lIGNoaXBzIGJlY2F1c2UKQEAgLTIzMzQsNyArMjM3OSw3IEBACiAvKiB0cC0+bG9jayBpcyBoZWxkLiAqLwogc3RhdGljIGludCB0ZzNfbnZyYW1fbG9jayhzdHJ1Y3QgdGczICp0cCkKIHsKLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNKSB7CisJaWYgKHRnM19mbGFnKHRwLCBOVlJBTSkpIHsKIAkJaW50IGk7CiAKIAkJaWYgKHRwLT5udnJhbV9sb2NrX2NudCA9PSAwKSB7CkBAIC0yMzU3LDcgKzI0MDIsNyBAQAogLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KIHN0YXRpYyB2b2lkIHRnM19udnJhbV91bmxvY2soc3RydWN0IHRnMyAqdHApCiB7Ci0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkgeworCWlmICh0ZzNfZmxhZyh0cCwgTlZSQU0pKSB7CiAJCWlmICh0cC0+bnZyYW1fbG9ja19jbnQgPiAwKQogCQkJdHAtPm52cmFtX2xvY2tfY250LS07CiAJCWlmICh0cC0+bnZyYW1fbG9ja19jbnQgPT0gMCkKQEAgLTIzNjgsOCArMjQxMyw3IEBACiAvKiB0cC0+bG9jayBpcyBoZWxkLiAqLwogc3RhdGljIHZvaWQgdGczX2VuYWJsZV9udnJhbV9hY2Nlc3Moc3RydWN0IHRnMyAqdHApCiB7Ci0JaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3NTBfUExVUykgJiYKLQkgICAgISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1BST1RFQ1RFRF9OVlJBTSkpIHsKKwlpZiAodGczX2ZsYWcodHAsIDU3NTBfUExVUykgJiYgIXRnM19mbGFnKHRwLCBQUk9URUNURURfTlZSQU0pKSB7CiAJCXUzMiBudmFjY2VzcyA9IHRyMzIoTlZSQU1fQUNDRVNTKTsKIAogCQl0dzMyKE5WUkFNX0FDQ0VTUywgbnZhY2Nlc3MgfCBBQ0NFU1NfRU5BQkxFKTsKQEAgLTIzNzksOCArMjQyMyw3IEBACiAvKiB0cC0+bG9jayBpcyBoZWxkLiAqLwogc3RhdGljIHZvaWQgdGczX2Rpc2FibGVfbnZyYW1fYWNjZXNzKHN0cnVjdCB0ZzMgKnRwKQogewotCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzUwX1BMVVMpICYmCi0JICAgICEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19QUk9URUNURURfTlZSQU0pKSB7CisJaWYgKHRnM19mbGFnKHRwLCA1NzUwX1BMVVMpICYmICF0ZzNfZmxhZyh0cCwgUFJPVEVDVEVEX05WUkFNKSkgewogCQl1MzIgbnZhY2Nlc3MgPSB0cjMyKE5WUkFNX0FDQ0VTUyk7CiAKIAkJdHczMihOVlJBTV9BQ0NFU1MsIG52YWNjZXNzICYgfkFDQ0VTU19FTkFCTEUpOwpAQCAtMjQ1MCwxMCArMjQ5MywxMCBAQAogCiBzdGF0aWMgdTMyIHRnM19udnJhbV9waHlzX2FkZHIoc3RydWN0IHRnMyAqdHAsIHUzMiBhZGRyKQogewotCWlmICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNKSAmJgotCSAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNX0JVRkZFUkVEKSAmJgotCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9GTEFTSCkgJiYKLQkgICAhKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTk9fTlZSQU1fQUREUl9UUkFOUykgJiYKKwlpZiAodGczX2ZsYWcodHAsIE5WUkFNKSAmJgorCSAgICB0ZzNfZmxhZyh0cCwgTlZSQU1fQlVGRkVSRUQpICYmCisJICAgIHRnM19mbGFnKHRwLCBGTEFTSCkgJiYKKwkgICAgIXRnM19mbGFnKHRwLCBOT19OVlJBTV9BRERSX1RSQU5TKSAmJgogCSAgICAodHAtPm52cmFtX2plZGVjbnVtID09IEpFREVDX0FUTUVMKSkKIAogCQlhZGRyID0gKChhZGRyIC8gdHAtPm52cmFtX3BhZ2VzaXplKSA8PApAQCAtMjQ2NSwxMCArMjUwOCwxMCBAQAogCiBzdGF0aWMgdTMyIHRnM19udnJhbV9sb2dpY2FsX2FkZHIoc3RydWN0IHRnMyAqdHAsIHUzMiBhZGRyKQogewotCWlmICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNKSAmJgotCSAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNX0JVRkZFUkVEKSAmJgotCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9GTEFTSCkgJiYKLQkgICAhKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTk9fTlZSQU1fQUREUl9UUkFOUykgJiYKKwlpZiAodGczX2ZsYWcodHAsIE5WUkFNKSAmJgorCSAgICB0ZzNfZmxhZyh0cCwgTlZSQU1fQlVGRkVSRUQpICYmCisJICAgIHRnM19mbGFnKHRwLCBGTEFTSCkgJiYKKwkgICAgIXRnM19mbGFnKHRwLCBOT19OVlJBTV9BRERSX1RSQU5TKSAmJgogCSAgICAodHAtPm52cmFtX2plZGVjbnVtID09IEpFREVDX0FUTUVMKSkKIAogCQlhZGRyID0gKChhZGRyID4+IEFUTUVMX0FUNDVEQjBYMUJfUEFHRV9QT1MpICoKQEAgLTI0ODgsNyArMjUzMSw3IEBACiB7CiAJaW50IHJldDsKIAotCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkpCisJaWYgKCF0ZzNfZmxhZyh0cCwgTlZSQU0pKQogCQlyZXR1cm4gdGczX252cmFtX3JlYWRfdXNpbmdfZWVwcm9tKHRwLCBvZmZzZXQsIHZhbCk7CiAKIAlvZmZzZXQgPSB0ZzNfbnZyYW1fcGh5c19hZGRyKHRwLCBvZmZzZXQpOwpAQCAtMjU4MCw3ICsyNjIzLDcgQEAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHRwLT5wZGV2LCBQQ0lfRDApOwogCiAJLyogU3dpdGNoIG91dCBvZiBWYXV4IGlmIGl0IGlzIGEgTklDICovCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfSVNfTklDKQorCWlmICh0ZzNfZmxhZyh0cCwgSVNfTklDKSkKIAkJdHczMl93YWl0X2YoR1JDX0xPQ0FMX0NUUkwsIHRwLT5ncmNfbG9jYWxfY3RybCwgMTAwKTsKIAogCXJldHVybiAwOwpAQCAtMjU5NCw3ICsyNjM3LDcgQEAKIAl0ZzNfZW5hYmxlX3JlZ2lzdGVyX2FjY2Vzcyh0cCk7CiAKIAkvKiBSZXN0b3JlIHRoZSBDTEtSRVEgc2V0dGluZy4gKi8KLQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19DTEtSRVFfQlVHKSB7CisJaWYgKHRnM19mbGFnKHRwLCBDTEtSRVFfQlVHKSkgewogCQl1MTYgbG5rY3RsOwogCiAJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHRwLT5wZGV2LApAQCAtMjYxMSw5ICsyNjU0LDkgQEAKIAkgICAgIG1pc2NfaG9zdF9jdHJsIHwgTUlTQ19IT1NUX0NUUkxfTUFTS19QQ0lfSU5UKTsKIAogCWRldmljZV9zaG91bGRfd2FrZSA9IGRldmljZV9tYXlfd2FrZXVwKCZ0cC0+cGRldi0+ZGV2KSAmJgotCQkJICAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1dPTF9FTkFCTEUpOworCQkJICAgICB0ZzNfZmxhZyh0cCwgV09MX0VOQUJMRSk7CiAKLQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19VU0VfUEhZTElCKSB7CisJaWYgKHRnM19mbGFnKHRwLCBVU0VfUEhZTElCKSkgewogCQlkb19sb3dfcG93ZXIgPSBmYWxzZTsKIAkJaWYgKCh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19JU19DT05ORUNURUQpICYmCiAJCSAgICAhKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0lTX0xPV19QT1dFUikpIHsKQEAgLTI2MzQsOSArMjY3Nyw4IEBACiAJCQkJICAgICAgQURWRVJUSVNFRF9BdXRvbmVnIHwKIAkJCQkgICAgICBBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZjsKIAotCQkJaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikgfHwKLQkJCSAgICBkZXZpY2Vfc2hvdWxkX3dha2UpIHsKLQkJCQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1dPTF9TUEVFRF8xMDBNQikKKwkJCWlmICh0ZzNfZmxhZyh0cCwgRU5BQkxFX0FTRikgfHwgZGV2aWNlX3Nob3VsZF93YWtlKSB7CisJCQkJaWYgKHRnM19mbGFnKHRwLCBXT0xfU1BFRURfMTAwTUIpKQogCQkJCQlhZHZlcnRpc2luZyB8PQogCQkJCQkJQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmIHwKIAkJCQkJCUFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCB8CkBAIC0yNjgxLDcgKzI3MjMsNyBAQAogCiAJCXZhbCA9IHRyMzIoR1JDX1ZDUFVfRVhUX0NUUkwpOwogCQl0dzMyKEdSQ19WQ1BVX0VYVF9DVFJMLCB2YWwgfCBHUkNfVkNQVV9FWFRfQ1RSTF9ESVNBQkxFX1dPTCk7Ci0JfSBlbHNlIGlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKSkgeworCX0gZWxzZSBpZiAoIXRnM19mbGFnKHRwLCBFTkFCTEVfQVNGKSkgewogCQlpbnQgaTsKIAkJdTMyIHZhbDsKIApAQCAtMjY5Miw3ICsyNzM0LDcgQEAKIAkJCW1zbGVlcCgxKTsKIAkJfQogCX0KLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1dPTF9DQVApCisJaWYgKHRnM19mbGFnKHRwLCBXT0xfQ0FQKSkKIAkJdGczX3dyaXRlX21lbSh0cCwgTklDX1NSQU1fV09MX01CT1gsIFdPTF9TSUdOQVRVUkUgfAogCQkJCQkJICAgICBXT0xfRFJWX1NUQVRFX1NIVVRET1dOIHwKIAkJCQkJCSAgICAgV09MX0RSVl9XT0wgfApAQCAtMjcwMiw4ICsyNzQ0LDEzIEBACiAJCXUzMiBtYWNfbW9kZTsKIAogCQlpZiAoISh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19QSFlfU0VSREVTKSkgewotCQkJaWYgKGRvX2xvd19wb3dlcikgewotCQkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19BVVhfQ1RSTCwgMHg1YSk7CisJCQlpZiAoZG9fbG93X3Bvd2VyICYmCisJCQkgICAgISh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19JU19GRVQpKSB7CisJCQkJdGczX3BoeV9hdXhjdGxfd3JpdGUodHAsCisJCQkJCSAgICAgICBNSUlfVEczX0FVWENUTF9TSERXU0VMX1BXUkNUTCwKKwkJCQkJICAgICAgIE1JSV9URzNfQVVYQ1RMX1BDVExfV09MX0VOIHwKKwkJCQkJICAgICAgIE1JSV9URzNfQVVYQ1RMX1BDVExfMTAwVFhfTFBXUiB8CisJCQkJCSAgICAgICBNSUlfVEczX0FVWENUTF9QQ1RMX0NMX0FCX1RYREFDKTsKIAkJCQl1ZGVsYXkoNDApOwogCQkJfQogCkBAIC0yNzE1LDggKzI3NjIsNyBAQAogCQkJbWFjX21vZGUgfD0gdHAtPm1hY19tb2RlICYgTUFDX01PREVfTElOS19QT0xBUklUWTsKIAkJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0KIAkJCSAgICBBU0lDX1JFVl81NzAwKSB7Ci0JCQkJdTMyIHNwZWVkID0gKHRwLT50ZzNfZmxhZ3MgJgotCQkJCQkgICAgIFRHM19GTEFHX1dPTF9TUEVFRF8xMDBNQikgPworCQkJCXUzMiBzcGVlZCA9IHRnM19mbGFnKHRwLCBXT0xfU1BFRURfMTAwTUIpID8KIAkJCQkJICAgICBTUEVFRF8xMDAgOiBTUEVFRF8xMDsKIAkJCQlpZiAodGczXzU3MDBfbGlua19wb2xhcml0eSh0cCwgc3BlZWQpKQogCQkJCQltYWNfbW9kZSB8PSBNQUNfTU9ERV9MSU5LX1BPTEFSSVRZOwpAQCAtMjcyNywxNyArMjc3MywxNSBAQAogCQkJbWFjX21vZGUgPSBNQUNfTU9ERV9QT1JUX01PREVfVEJJOwogCQl9CiAKLQkJaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzUwX1BMVVMpKQorCQlpZiAoIXRnM19mbGFnKHRwLCA1NzUwX1BMVVMpKQogCQkJdHczMihNQUNfTEVEX0NUUkwsIHRwLT5sZWRfY3RybCk7CiAKIAkJbWFjX21vZGUgfD0gTUFDX01PREVfTUFHSUNfUEtUX0VOQUJMRTsKLQkJaWYgKCgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpICYmCi0JCSAgICAhKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc4MF9DTEFTUykpICYmCi0JCSAgICAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKSB8fAotCQkgICAgICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9BUEUpKSkKKwkJaWYgKCh0ZzNfZmxhZyh0cCwgNTcwNV9QTFVTKSAmJiAhdGczX2ZsYWcodHAsIDU3ODBfQ0xBU1MpKSAmJgorCQkgICAgKHRnM19mbGFnKHRwLCBFTkFCTEVfQVNGKSB8fCB0ZzNfZmxhZyh0cCwgRU5BQkxFX0FQRSkpKQogCQkJbWFjX21vZGUgfD0gTUFDX01PREVfS0VFUF9GUkFNRV9JTl9XT0w7CiAKLQkJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX0FQRSkKKwkJaWYgKHRnM19mbGFnKHRwLCBFTkFCTEVfQVBFKSkKIAkJCW1hY19tb2RlIHw9IE1BQ19NT0RFX0FQRV9UWF9FTiB8CiAJCQkJICAgIE1BQ19NT0RFX0FQRV9SWF9FTiB8CiAJCQkJICAgIE1BQ19NT0RFX1RERV9FTkFCTEU7CkBAIC0yNzQ5LDcgKzI3OTMsNyBAQAogCQl1ZGVsYXkoMTApOwogCX0KIAotCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19XT0xfU1BFRURfMTAwTUIpICYmCisJaWYgKCF0ZzNfZmxhZyh0cCwgV09MX1NQRUVEXzEwME1CKSAmJgogCSAgICAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDAgfHwKIAkgICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzAxKSkgewogCQl1MzIgYmFzZV92YWw7CkBAIC0yNzYwLDEyICsyODA0LDExIEBACiAKIAkJdHczMl93YWl0X2YoVEczUENJX0NMT0NLX0NUUkwsIGJhc2VfdmFsIHwgQ0xPQ0tfQ1RSTF9BTFRDTEsgfAogCQkJICAgIENMT0NLX0NUUkxfUFdSRE9XTl9QTEwxMzMsIDQwKTsKLQl9IGVsc2UgaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3ODBfQ0xBU1MpIHx8Ci0JCSAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfQ1BNVV9QUkVTRU5UKSB8fAotCQkgICAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYpKSB7CisJfSBlbHNlIGlmICh0ZzNfZmxhZyh0cCwgNTc4MF9DTEFTUykgfHwKKwkJICAgdGczX2ZsYWcodHAsIENQTVVfUFJFU0VOVCkgfHwKKwkJICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYpIHsKIAkJLyogZG8gbm90aGluZyAqLwotCX0gZWxzZSBpZiAoISgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzUwX1BMVVMpICYmCi0JCSAgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKSkpIHsKKwl9IGVsc2UgaWYgKCEodGczX2ZsYWcodHAsIDU3NTBfUExVUykgJiYgdGczX2ZsYWcodHAsIEVOQUJMRV9BU0YpKSkgewogCQl1MzIgbmV3Yml0czEsIG5ld2JpdHMyOwogCiAJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwMCB8fApAQCAtMjc3NCw3ICsyODE3LDcgQEAKIAkJCQkgICAgQ0xPQ0tfQ1RSTF9UWENMS19ESVNBQkxFIHwKIAkJCQkgICAgQ0xPQ0tfQ1RSTF9BTFRDTEspOwogCQkJbmV3Yml0czIgPSBuZXdiaXRzMSB8IENMT0NLX0NUUkxfNDRNSFpfQ09SRTsKLQkJfSBlbHNlIGlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykgeworCQl9IGVsc2UgaWYgKHRnM19mbGFnKHRwLCA1NzA1X1BMVVMpKSB7CiAJCQluZXdiaXRzMSA9IENMT0NLX0NUUkxfNjI1X0NPUkU7CiAJCQluZXdiaXRzMiA9IG5ld2JpdHMxIHwgQ0xPQ0tfQ1RSTF9BTFRDTEs7CiAJCX0gZWxzZSB7CkBAIC0yNzg4LDcgKzI4MzEsNyBAQAogCQl0dzMyX3dhaXRfZihURzNQQ0lfQ0xPQ0tfQ1RSTCwgdHAtPnBjaV9jbG9ja19jdHJsIHwgbmV3Yml0czIsCiAJCQkgICAgNDApOwogCi0JCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSkgeworCQlpZiAoIXRnM19mbGFnKHRwLCA1NzA1X1BMVVMpKSB7CiAJCQl1MzIgbmV3Yml0czM7CiAKIAkJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwMCB8fApAQCAtMjgwNSw4ICsyODQ4LDcgQEAKIAkJfQogCX0KIAotCWlmICghKGRldmljZV9zaG91bGRfd2FrZSkgJiYKLQkgICAgISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikpCisJaWYgKCEoZGV2aWNlX3Nob3VsZF93YWtlKSAmJiAhdGczX2ZsYWcodHAsIEVOQUJMRV9BU0YpKQogCQl0ZzNfcG93ZXJfZG93bl9waHkodHAsIGRvX2xvd19wb3dlcik7CiAKIAl0ZzNfZnJvYl9hdXhfcG93ZXIodHApOwpAQCAtMjgxOCw3ICsyODYwLDcgQEAKIAogCQl2YWwgJj0gfigoMSA8PCAxNikgfCAoMSA8PCA0KSB8ICgxIDw8IDIpIHwgKDEgPDwgMSkgfCAxKTsKIAkJdHczMigweDdkMDAsIHZhbCk7Ci0JCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKSkgeworCQlpZiAoIXRnM19mbGFnKHRwLCBFTkFCTEVfQVNGKSkgewogCQkJaW50IGVycjsKIAogCQkJZXJyID0gdGczX252cmFtX2xvY2sodHApOwpAQCAtMjgzNyw3ICsyODc5LDcgQEAKIHsKIAl0ZzNfcG93ZXJfZG93bl9wcmVwYXJlKHRwKTsKIAotCXBjaV93YWtlX2Zyb21fZDModHAtPnBkZXYsIHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19XT0xfRU5BQkxFKTsKKwlwY2lfd2FrZV9mcm9tX2QzKHRwLT5wZGV2LCB0ZzNfZmxhZyh0cCwgV09MX0VOQUJMRSkpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUodHAtPnBkZXYsIFBDSV9EM2hvdCk7CiB9CiAKQEAgLTI4ODgsMTA2ICsyOTMwLDU0IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCB0ZzNfcGh5X2NvcHBlcl9iZWdpbihzdHJ1Y3QgdGczICp0cCkKK3N0YXRpYyBpbnQgdGczX3BoeV9hdXRvbmVnX2NmZyhzdHJ1Y3QgdGczICp0cCwgdTMyIGFkdmVydGlzZSwgdTMyIGZsb3djdHJsKQogewotCXUzMiBuZXdfYWR2OwotCWludCBpOworCWludCBlcnIgPSAwOworCXUzMiB2YWwsIG5ld19hZHY7CiAKLQlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfSVNfTE9XX1BPV0VSKSB7Ci0JCS8qIEVudGVyaW5nIGxvdyBwb3dlciBtb2RlLiAgRGlzYWJsZSBnaWdhYml0IGFuZAotCQkgKiAxMDBiYXNlVCBhZHZlcnRpc2VtZW50cy4KLQkJICovCi0JCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19DVFJMLCAwKTsKKwluZXdfYWR2ID0gQURWRVJUSVNFX0NTTUE7CisJaWYgKGFkdmVydGlzZSAmIEFEVkVSVElTRURfMTBiYXNlVF9IYWxmKQorCQluZXdfYWR2IHw9IEFEVkVSVElTRV8xMEhBTEY7CisJaWYgKGFkdmVydGlzZSAmIEFEVkVSVElTRURfMTBiYXNlVF9GdWxsKQorCQluZXdfYWR2IHw9IEFEVkVSVElTRV8xMEZVTEw7CisJaWYgKGFkdmVydGlzZSAmIEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZikKKwkJbmV3X2FkdiB8PSBBRFZFUlRJU0VfMTAwSEFMRjsKKwlpZiAoYWR2ZXJ0aXNlICYgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsKQorCQluZXdfYWR2IHw9IEFEVkVSVElTRV8xMDBGVUxMOwogCi0JCW5ld19hZHYgPSAoQURWRVJUSVNFXzEwSEFMRiB8IEFEVkVSVElTRV8xMEZVTEwgfAotCQkJICAgQURWRVJUSVNFX0NTTUEgfCBBRFZFUlRJU0VfUEFVU0VfQ0FQKTsKLQkJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19XT0xfU1BFRURfMTAwTUIpCi0JCQluZXdfYWR2IHw9IChBRFZFUlRJU0VfMTAwSEFMRiB8IEFEVkVSVElTRV8xMDBGVUxMKTsKKwluZXdfYWR2IHw9IHRnM19hZHZlcnRfZmxvd2N0cmxfMTAwMFQoZmxvd2N0cmwpOwogCi0JCXRnM193cml0ZXBoeSh0cCwgTUlJX0FEVkVSVElTRSwgbmV3X2Fkdik7Ci0JfSBlbHNlIGlmICh0cC0+bGlua19jb25maWcuc3BlZWQgPT0gU1BFRURfSU5WQUxJRCkgewotCQlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfMTBfMTAwX09OTFkpCi0JCQl0cC0+bGlua19jb25maWcuYWR2ZXJ0aXNpbmcgJj0KLQkJCQl+KEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYgfAotCQkJCSAgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCk7CisJZXJyID0gdGczX3dyaXRlcGh5KHRwLCBNSUlfQURWRVJUSVNFLCBuZXdfYWR2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGRvbmU7CiAKLQkJbmV3X2FkdiA9IEFEVkVSVElTRV9DU01BOwotCQlpZiAodHAtPmxpbmtfY29uZmlnLmFkdmVydGlzaW5nICYgQURWRVJUSVNFRF8xMGJhc2VUX0hhbGYpCi0JCQluZXdfYWR2IHw9IEFEVkVSVElTRV8xMEhBTEY7Ci0JCWlmICh0cC0+bGlua19jb25maWcuYWR2ZXJ0aXNpbmcgJiBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbCkKLQkJCW5ld19hZHYgfD0gQURWRVJUSVNFXzEwRlVMTDsKLQkJaWYgKHRwLT5saW5rX2NvbmZpZy5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZikKLQkJCW5ld19hZHYgfD0gQURWRVJUSVNFXzEwMEhBTEY7Ci0JCWlmICh0cC0+bGlua19jb25maWcuYWR2ZXJ0aXNpbmcgJiBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwpCi0JCQluZXdfYWR2IHw9IEFEVkVSVElTRV8xMDBGVUxMOworCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR18xMF8xMDBfT05MWSkKKwkJZ290byBkb25lOwogCi0JCW5ld19hZHYgfD0gdGczX2FkdmVydF9mbG93Y3RybF8xMDAwVCh0cC0+bGlua19jb25maWcuZmxvd2N0cmwpOworCW5ld19hZHYgPSAwOworCWlmIChhZHZlcnRpc2UgJiBBRFZFUlRJU0VEXzEwMDBiYXNlVF9IYWxmKQorCQluZXdfYWR2IHw9IE1JSV9URzNfQ1RSTF9BRFZfMTAwMF9IQUxGOworCWlmIChhZHZlcnRpc2UgJiBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsKQorCQluZXdfYWR2IHw9IE1JSV9URzNfQ1RSTF9BRFZfMTAwMF9GVUxMOwogCi0JCXRnM193cml0ZXBoeSh0cCwgTUlJX0FEVkVSVElTRSwgbmV3X2Fkdik7CisJaWYgKHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81NzAxX0EwIHx8CisJICAgIHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81NzAxX0IwKQorCQluZXdfYWR2IHw9IChNSUlfVEczX0NUUkxfQVNfTUFTVEVSIHwKKwkJCSAgICBNSUlfVEczX0NUUkxfRU5BQkxFX0FTX01BU1RFUik7CiAKLQkJaWYgKHRwLT5saW5rX2NvbmZpZy5hZHZlcnRpc2luZyAmCi0JCSAgICAoQURWRVJUSVNFRF8xMDAwYmFzZVRfSGFsZiB8IEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwpKSB7Ci0JCQluZXdfYWR2ID0gMDsKLQkJCWlmICh0cC0+bGlua19jb25maWcuYWR2ZXJ0aXNpbmcgJiBBRFZFUlRJU0VEXzEwMDBiYXNlVF9IYWxmKQotCQkJCW5ld19hZHYgfD0gTUlJX1RHM19DVFJMX0FEVl8xMDAwX0hBTEY7Ci0JCQlpZiAodHAtPmxpbmtfY29uZmlnLmFkdmVydGlzaW5nICYgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCkKLQkJCQluZXdfYWR2IHw9IE1JSV9URzNfQ1RSTF9BRFZfMTAwMF9GVUxMOwotCQkJaWYgKCEodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfMTBfMTAwX09OTFkpICYmCi0JCQkgICAgKHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81NzAxX0EwIHx8Ci0JCQkgICAgIHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81NzAxX0IwKSkKLQkJCQluZXdfYWR2IHw9IChNSUlfVEczX0NUUkxfQVNfTUFTVEVSIHwKLQkJCQkJICAgIE1JSV9URzNfQ1RSTF9FTkFCTEVfQVNfTUFTVEVSKTsKLQkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19DVFJMLCBuZXdfYWR2KTsKLQkJfSBlbHNlIHsKLQkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19DVFJMLCAwKTsKLQkJfQotCX0gZWxzZSB7Ci0JCW5ld19hZHYgPSB0ZzNfYWR2ZXJ0X2Zsb3djdHJsXzEwMDBUKHRwLT5saW5rX2NvbmZpZy5mbG93Y3RybCk7Ci0JCW5ld19hZHYgfD0gQURWRVJUSVNFX0NTTUE7CisJZXJyID0gdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0NUUkwsIG5ld19hZHYpOworCWlmIChlcnIpCisJCWdvdG8gZG9uZTsKIAotCQkvKiBBc2tpbmcgZm9yIGEgc3BlY2lmaWMgbGluayBtb2RlLiAqLwotCQlpZiAodHAtPmxpbmtfY29uZmlnLnNwZWVkID09IFNQRUVEXzEwMDApIHsKLQkJCXRnM193cml0ZXBoeSh0cCwgTUlJX0FEVkVSVElTRSwgbmV3X2Fkdik7CisJaWYgKCEodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfRUVFX0NBUCkpCisJCWdvdG8gZG9uZTsKIAotCQkJaWYgKHRwLT5saW5rX2NvbmZpZy5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCi0JCQkJbmV3X2FkdiA9IE1JSV9URzNfQ1RSTF9BRFZfMTAwMF9GVUxMOwotCQkJZWxzZQotCQkJCW5ld19hZHYgPSBNSUlfVEczX0NUUkxfQURWXzEwMDBfSEFMRjsKLQkJCWlmICh0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTcwMV9BMCB8fAotCQkJICAgIHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81NzAxX0IwKQotCQkJCW5ld19hZHYgfD0gKE1JSV9URzNfQ1RSTF9BU19NQVNURVIgfAotCQkJCQkgICAgTUlJX1RHM19DVFJMX0VOQUJMRV9BU19NQVNURVIpOwotCQl9IGVsc2UgewotCQkJaWYgKHRwLT5saW5rX2NvbmZpZy5zcGVlZCA9PSBTUEVFRF8xMDApIHsKLQkJCQlpZiAodHAtPmxpbmtfY29uZmlnLmR1cGxleCA9PSBEVVBMRVhfRlVMTCkKLQkJCQkJbmV3X2FkdiB8PSBBRFZFUlRJU0VfMTAwRlVMTDsKLQkJCQllbHNlCi0JCQkJCW5ld19hZHYgfD0gQURWRVJUSVNFXzEwMEhBTEY7Ci0JCQl9IGVsc2UgewotCQkJCWlmICh0cC0+bGlua19jb25maWcuZHVwbGV4ID09IERVUExFWF9GVUxMKQotCQkJCQluZXdfYWR2IHw9IEFEVkVSVElTRV8xMEZVTEw7Ci0JCQkJZWxzZQotCQkJCQluZXdfYWR2IHw9IEFEVkVSVElTRV8xMEhBTEY7Ci0JCQl9Ci0JCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9BRFZFUlRJU0UsIG5ld19hZHYpOworCXR3MzIoVEczX0NQTVVfRUVFX01PREUsCisJICAgICB0cjMyKFRHM19DUE1VX0VFRV9NT0RFKSAmIH5URzNfQ1BNVV9FRUVNRF9MUElfRU5BQkxFKTsKIAotCQkJbmV3X2FkdiA9IDA7Ci0JCX0KLQotCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQ1RSTCwgbmV3X2Fkdik7Ci0JfQotCi0JaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0VFRV9DQVApIHsKLQkJdTMyIHZhbDsKLQotCQl0dzMyKFRHM19DUE1VX0VFRV9NT0RFLAotCQkgICAgIHRyMzIoVEczX0NQTVVfRUVFX01PREUpICYgflRHM19DUE1VX0VFRU1EX0xQSV9FTkFCTEUpOwotCi0JCS8qIEVuYWJsZSBTTV9EU1AgY2xvY2sgYW5kIHR4IDZkQiBjb2RpbmcuICovCi0JCXZhbCA9IE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfQVVYQ1RMIHwKLQkJICAgICAgTUlJX1RHM19BVVhDVExfQUNUTF9TTURTUF9FTkEgfAotCQkgICAgICBNSUlfVEczX0FVWENUTF9BQ1RMX1RYXzZEQjsKLQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0FVWF9DVFJMLCB2YWwpOworCWVyciA9IFRHM19QSFlfQVVYQ1RMX1NNRFNQX0VOQUJMRSh0cCk7CisJaWYgKCFlcnIpIHsKKwkJdTMyIGVycjI7CiAKIAkJc3dpdGNoIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkpIHsKIAkJY2FzZSBBU0lDX1JFVl81NzE3OgpAQCAtMzAwNCwyMiArMjk5NCw2NiBAQAogCQl9CiAKIAkJdmFsID0gMDsKLQkJaWYgKHRwLT5saW5rX2NvbmZpZy5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSB7Ci0JCQkvKiBBZHZlcnRpc2UgMTAwLUJhc2VUWCBFRUUgYWJpbGl0eSAqLwotCQkJaWYgKHRwLT5saW5rX2NvbmZpZy5hZHZlcnRpc2luZyAmCi0JCQkgICAgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsKQotCQkJCXZhbCB8PSBNRElPX0FOX0VFRV9BRFZfMTAwVFg7Ci0JCQkvKiBBZHZlcnRpc2UgMTAwMC1CYXNlVCBFRUUgYWJpbGl0eSAqLwotCQkJaWYgKHRwLT5saW5rX2NvbmZpZy5hZHZlcnRpc2luZyAmCi0JCQkgICAgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCkKLQkJCQl2YWwgfD0gTURJT19BTl9FRUVfQURWXzEwMDBUOwotCQl9Ci0JCXRnM19waHlfY2w0NV93cml0ZSh0cCwgTURJT19NTURfQU4sIE1ESU9fQU5fRUVFX0FEViwgdmFsKTsKKwkJLyogQWR2ZXJ0aXNlIDEwMC1CYXNlVFggRUVFIGFiaWxpdHkgKi8KKwkJaWYgKGFkdmVydGlzZSAmIEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCkKKwkJCXZhbCB8PSBNRElPX0FOX0VFRV9BRFZfMTAwVFg7CisJCS8qIEFkdmVydGlzZSAxMDAwLUJhc2VUIEVFRSBhYmlsaXR5ICovCisJCWlmIChhZHZlcnRpc2UgJiBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsKQorCQkJdmFsIHw9IE1ESU9fQU5fRUVFX0FEVl8xMDAwVDsKKwkJZXJyID0gdGczX3BoeV9jbDQ1X3dyaXRlKHRwLCBNRElPX01NRF9BTiwgTURJT19BTl9FRUVfQURWLCB2YWwpOwogCi0JCS8qIFR1cm4gb2ZmIFNNX0RTUCBjbG9jay4gKi8KLQkJdmFsID0gTUlJX1RHM19BVVhDVExfU0hEV1NFTF9BVVhDVEwgfAotCQkgICAgICBNSUlfVEczX0FVWENUTF9BQ1RMX1RYXzZEQjsKLQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0FVWF9DVFJMLCB2YWwpOworCQllcnIyID0gVEczX1BIWV9BVVhDVExfU01EU1BfRElTQUJMRSh0cCk7CisJCWlmICghZXJyKQorCQkJZXJyID0gZXJyMjsKKwl9CisKK2RvbmU6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgdGczX3BoeV9jb3BwZXJfYmVnaW4oc3RydWN0IHRnMyAqdHApCit7CisJdTMyIG5ld19hZHY7CisJaW50IGk7CisKKwlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfSVNfTE9XX1BPV0VSKSB7CisJCW5ld19hZHYgPSBBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZiB8CisJCQkgIEFEVkVSVElTRURfMTBiYXNlVF9GdWxsOworCQlpZiAodGczX2ZsYWcodHAsIFdPTF9TUEVFRF8xMDBNQikpCisJCQluZXdfYWR2IHw9IEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZiB8CisJCQkJICAgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsOworCisJCXRnM19waHlfYXV0b25lZ19jZmcodHAsIG5ld19hZHYsCisJCQkJICAgIEZMT1dfQ1RSTF9UWCB8IEZMT1dfQ1RSTF9SWCk7CisJfSBlbHNlIGlmICh0cC0+bGlua19jb25maWcuc3BlZWQgPT0gU1BFRURfSU5WQUxJRCkgeworCQlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfMTBfMTAwX09OTFkpCisJCQl0cC0+bGlua19jb25maWcuYWR2ZXJ0aXNpbmcgJj0KKwkJCQl+KEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYgfAorCQkJCSAgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCk7CisKKwkJdGczX3BoeV9hdXRvbmVnX2NmZyh0cCwgdHAtPmxpbmtfY29uZmlnLmFkdmVydGlzaW5nLAorCQkJCSAgICB0cC0+bGlua19jb25maWcuZmxvd2N0cmwpOworCX0gZWxzZSB7CisJCS8qIEFza2luZyBmb3IgYSBzcGVjaWZpYyBsaW5rIG1vZGUuICovCisJCWlmICh0cC0+bGlua19jb25maWcuc3BlZWQgPT0gU1BFRURfMTAwMCkgeworCQkJaWYgKHRwLT5saW5rX2NvbmZpZy5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCisJCQkJbmV3X2FkdiA9IEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGw7CisJCQllbHNlCisJCQkJbmV3X2FkdiA9IEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGY7CisJCX0gZWxzZSBpZiAodHAtPmxpbmtfY29uZmlnLnNwZWVkID09IFNQRUVEXzEwMCkgeworCQkJaWYgKHRwLT5saW5rX2NvbmZpZy5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCisJCQkJbmV3X2FkdiA9IEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbDsKKwkJCWVsc2UKKwkJCQluZXdfYWR2ID0gQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmOworCQl9IGVsc2UgeworCQkJaWYgKHRwLT5saW5rX2NvbmZpZy5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCisJCQkJbmV3X2FkdiA9IEFEVkVSVElTRURfMTBiYXNlVF9GdWxsOworCQkJZWxzZQorCQkJCW5ld19hZHYgPSBBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZjsKKwkJfQorCisJCXRnM19waHlfYXV0b25lZ19jZmcodHAsIG5ld19hZHYsCisJCQkJICAgIHRwLT5saW5rX2NvbmZpZy5mbG93Y3RybCk7CiAJfQogCiAJaWYgKHRwLT5saW5rX2NvbmZpZy5hdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSAmJgpAQCAtMzA3Nyw3ICszMTExLDcgQEAKIAogCS8qIFR1cm4gb2ZmIHRhcCBwb3dlciBtYW5hZ2VtZW50LiAqLwogCS8qIFNldCBFeHRlbmRlZCBwYWNrZXQgbGVuZ3RoIGJpdCAqLwotCWVyciAgPSB0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIDB4NGMyMCk7CisJZXJyID0gdGczX3BoeV9hdXhjdGxfd3JpdGUodHAsIE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfQVVYQ1RMLCAweDRjMjApOwogCiAJZXJyIHw9IHRnM19waHlkc3Bfd3JpdGUodHAsIDB4MDAxMiwgMHgxODA0KTsKIAllcnIgfD0gdGczX3BoeWRzcF93cml0ZSh0cCwgMHgwMDEzLCAweDEyMDQpOwpAQCAtMzE0MCw3ICszMTc0LDcgQEAKIAkJaWYgKGN1cmFkdiAhPSByZXFhZHYpCiAJCQlyZXR1cm4gMDsKIAotCQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1BBVVNFX0FVVE9ORUcpCisJCWlmICh0ZzNfZmxhZyh0cCwgUEFVU0VfQVVUT05FRykpCiAJCQl0ZzNfcmVhZHBoeSh0cCwgTUlJX0xQQSwgcm10YWR2KTsKIAl9IGVsc2UgewogCQkvKiBSZXByb2dyYW0gdGhlIGFkdmVydGlzZW1lbnQgcmVnaXN0ZXIsIGV2ZW4gaWYgaXQKQEAgLTMxODMsNyArMzIxNyw3IEBACiAJCXVkZWxheSg4MCk7CiAJfQogCi0JdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0FVWF9DVFJMLCAweDAyKTsKKwl0ZzNfcGh5X2F1eGN0bF93cml0ZSh0cCwgTUlJX1RHM19BVVhDVExfU0hEV1NFTF9QV1JDVEwsIDApOwogCiAJLyogU29tZSB0aGlyZC1wYXJ0eSBQSFlzIG5lZWQgdG8gYmUgcmVzZXQgb24gbGluayBnb2luZwogCSAqIGRvd24uCkBAIC0zMjAzLDcgKzMyMzcsNyBAQAogCWlmICgodHAtPnBoeV9pZCAmIFRHM19QSFlfSURfTUFTSykgPT0gVEczX1BIWV9JRF9CQ001NDAxKSB7CiAJCXRnM19yZWFkcGh5KHRwLCBNSUlfQk1TUiwgJmJtc3IpOwogCQlpZiAodGczX3JlYWRwaHkodHAsIE1JSV9CTVNSLCAmYm1zcikgfHwKLQkJICAgICEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0lOSVRfQ09NUExFVEUpKQorCQkgICAgIXRnM19mbGFnKHRwLCBJTklUX0NPTVBMRVRFKSkKIAkJCWJtc3IgPSAwOwogCiAJCWlmICghKGJtc3IgJiBCTVNSX0xTVEFUVVMpKSB7CkBAIC0zMjY0LDExICszMjk4LDEzIEBACiAJY3VycmVudF9kdXBsZXggPSBEVVBMRVhfSU5WQUxJRDsKIAogCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19DQVBBQ0lUSVZFX0NPVVBMSU5HKSB7Ci0JCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19BVVhfQ1RSTCwgMHg0MDA3KTsKLQkJdGczX3JlYWRwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsICZ2YWwpOwotCQlpZiAoISh2YWwgJiAoMSA8PCAxMCkpKSB7Ci0JCQl2YWwgfD0gKDEgPDwgMTApOwotCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0FVWF9DVFJMLCB2YWwpOworCQllcnIgPSB0ZzNfcGh5X2F1eGN0bF9yZWFkKHRwLAorCQkJCQkgIE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfTUlTQ1RFU1QsCisJCQkJCSAgJnZhbCk7CisJCWlmICghZXJyICYmICEodmFsICYgKDEgPDwgMTApKSkgeworCQkJdGczX3BoeV9hdXhjdGxfd3JpdGUodHAsCisJCQkJCSAgICAgTUlJX1RHM19BVVhDVExfU0hEV1NFTF9NSVNDVEVTVCwKKwkJCQkJICAgICB2YWwgfCAoMSA8PCAxMCkpOwogCQkJZ290byByZWxpbms7CiAJCX0KIAl9CkBAIC0zMzQxLDggKzMzNzcsOCBAQAogCQl0ZzNfcGh5X2NvcHBlcl9iZWdpbih0cCk7CiAKIAkJdGczX3JlYWRwaHkodHAsIE1JSV9CTVNSLCAmYm1zcik7Ci0JCWlmICghdGczX3JlYWRwaHkodHAsIE1JSV9CTVNSLCAmYm1zcikgJiYKLQkJICAgIChibXNyICYgQk1TUl9MU1RBVFVTKSkKKwkJaWYgKCghdGczX3JlYWRwaHkodHAsIE1JSV9CTVNSLCAmYm1zcikgJiYgKGJtc3IgJiBCTVNSX0xTVEFUVVMpKSB8fAorCQkgICAgKHRwLT5tYWNfbW9kZSAmIE1BQ19NT0RFX1BPUlRfSU5UX0xQQkFDSykpCiAJCQljdXJyZW50X2xpbmtfdXAgPSAxOwogCX0KIApAQCAtMzM4NSw3ICszNDIxLDcgQEAKIAogCXRnM19waHlfZWVlX2FkanVzdCh0cCwgY3VycmVudF9saW5rX3VwKTsKIAotCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfVVNFX0xJTktDSEdfUkVHKSB7CisJaWYgKHRnM19mbGFnKHRwLCBVU0VfTElOS0NIR19SRUcpKSB7CiAJCS8qIFBvbGxlZCB2aWEgdGltZXIuICovCiAJCXR3MzJfZihNQUNfRVZFTlQsIDApOwogCX0gZWxzZSB7CkBAIC0zMzk2LDggKzM0MzIsNyBAQAogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwMCAmJgogCSAgICBjdXJyZW50X2xpbmtfdXAgPT0gMSAmJgogCSAgICB0cC0+bGlua19jb25maWcuYWN0aXZlX3NwZWVkID09IFNQRUVEXzEwMDAgJiYKLQkgICAgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfUENJWF9NT0RFKSB8fAotCSAgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19QQ0lfSElHSF9TUEVFRCkpKSB7CisJICAgICh0ZzNfZmxhZyh0cCwgUENJWF9NT0RFKSB8fCB0ZzNfZmxhZyh0cCwgUENJX0hJR0hfU1BFRUQpKSkgewogCQl1ZGVsYXkoMTIwKTsKIAkJdHczMl9mKE1BQ19TVEFUVVMsCiAJCSAgICAgKE1BQ19TVEFUVVNfU1lOQ19DSEFOR0VEIHwKQEAgLTM0MDksNyArMzQ0NCw3IEBACiAJfQogCiAJLyogUHJldmVudCBzZW5kIEJEIGNvcnJ1cHRpb24uICovCi0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfQ0xLUkVRX0JVRykgeworCWlmICh0ZzNfZmxhZyh0cCwgQ0xLUkVRX0JVRykpIHsKIAkJdTE2IG9sZGxua2N0bCwgbmV3bG5rY3RsOwogCiAJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHRwLT5wZGV2LApAQCAtMzgwNCw3ICszODM5LDcgQEAKIAlpbnQgaTsKIAogCS8qIFJlc2V0IHdoZW4gaW5pdHRpbmcgZmlyc3QgdGltZSBvciB3ZSBoYXZlIGEgbGluay4gKi8KLQlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19JTklUX0NPTVBMRVRFKSAmJgorCWlmICh0ZzNfZmxhZyh0cCwgSU5JVF9DT01QTEVURSkgJiYKIAkgICAgIShtYWNfc3RhdHVzICYgTUFDX1NUQVRVU19QQ1NfU1lOQ0VEKSkKIAkJcmV0dXJuOwogCkBAIC00MDY1LDkgKzQxMDAsOSBAQAogCW9yaWdfYWN0aXZlX3NwZWVkID0gdHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9zcGVlZDsKIAlvcmlnX2FjdGl2ZV9kdXBsZXggPSB0cC0+bGlua19jb25maWcuYWN0aXZlX2R1cGxleDsKIAotCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfSFdfQVVUT05FRykgJiYKKwlpZiAoIXRnM19mbGFnKHRwLCBIV19BVVRPTkVHKSAmJgogCSAgICBuZXRpZl9jYXJyaWVyX29rKHRwLT5kZXYpICYmCi0JICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfSU5JVF9DT01QTEVURSkpIHsKKwkgICAgdGczX2ZsYWcodHAsIElOSVRfQ09NUExFVEUpKSB7CiAJCW1hY19zdGF0dXMgPSB0cjMyKE1BQ19TVEFUVVMpOwogCQltYWNfc3RhdHVzICY9IChNQUNfU1RBVFVTX1BDU19TWU5DRUQgfAogCQkJICAgICAgIE1BQ19TVEFUVVNfU0lHTkFMX0RFVCB8CkBAIC00MDk4LDcgKzQxMzMsNyBAQAogCWN1cnJlbnRfbGlua191cCA9IDA7CiAJbWFjX3N0YXR1cyA9IHRyMzIoTUFDX1NUQVRVUyk7CiAKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9IV19BVVRPTkVHKQorCWlmICh0ZzNfZmxhZyh0cCwgSFdfQVVUT05FRykpCiAJCWN1cnJlbnRfbGlua191cCA9IHRnM19zZXR1cF9maWJlcl9od19hdXRvbmVnKHRwLCBtYWNfc3RhdHVzKTsKIAllbHNlCiAJCWN1cnJlbnRfbGlua191cCA9IHRnM19zZXR1cF9maWJlcl9ieV9oYW5kKHRwLCBtYWNfc3RhdHVzKTsKQEAgLTQyOTcsNyArNDMzMiw3IEBACiAJCQkJCWN1cnJlbnRfZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CiAJCQkJZWxzZQogCQkJCQljdXJyZW50X2R1cGxleCA9IERVUExFWF9IQUxGOwotCQkJfSBlbHNlIGlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc4MF9DTEFTUykpIHsKKwkJCX0gZWxzZSBpZiAoIXRnM19mbGFnKHRwLCA1NzgwX0NMQVNTKSkgewogCQkJCS8qIExpbmsgaXMgdXAgdmlhIHBhcmFsbGVsIGRldGVjdCAqLwogCQkJfSBlbHNlIHsKIAkJCQljdXJyZW50X2xpbmtfdXAgPSAwOwpAQCAtNDM5NCw2ICs0NDI5LDcgQEAKIAogc3RhdGljIGludCB0ZzNfc2V0dXBfcGh5KHN0cnVjdCB0ZzMgKnRwLCBpbnQgZm9yY2VfcmVzZXQpCiB7CisJdTMyIHZhbDsKIAlpbnQgZXJyOwogCiAJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX1BIWV9TRVJERVMpCkBAIC00NDA0LDcgKzQ0NDAsNyBAQAogCQllcnIgPSB0ZzNfc2V0dXBfY29wcGVyX3BoeSh0cCwgZm9yY2VfcmVzZXQpOwogCiAJaWYgKEdFVF9DSElQX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBDSElQUkVWXzU3ODRfQVgpIHsKLQkJdTMyIHZhbCwgc2NhbGU7CisJCXUzMiBzY2FsZTsKIAogCQl2YWwgPSB0cjMyKFRHM19DUE1VX0NMQ0tfU1RBVCkgJiBDUE1VX0NMQ0tfU1RBVF9NQUNfQ0xDS19NQVNLOwogCQlpZiAodmFsID09IENQTVVfQ0xDS19TVEFUX01BQ19DTENLXzYyXzUpCkBAIC00NDE5LDE5ICs0NDU1LDIyIEBACiAJCXR3MzIoR1JDX01JU0NfQ0ZHLCB2YWwpOwogCX0KIAorCXZhbCA9ICgyIDw8IFRYX0xFTkdUSFNfSVBHX0NSU19TSElGVCkgfAorCSAgICAgICg2IDw8IFRYX0xFTkdUSFNfSVBHX1NISUZUKTsKKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MjApCisJCXZhbCB8PSB0cjMyKE1BQ19UWF9MRU5HVEhTKSAmCisJCSAgICAgICAoVFhfTEVOR1RIU19KTUJfRlJNX0xFTl9NU0sgfAorCQkJVFhfTEVOR1RIU19DTlRfRFdOX1ZBTF9NU0spOworCiAJaWYgKHRwLT5saW5rX2NvbmZpZy5hY3RpdmVfc3BlZWQgPT0gU1BFRURfMTAwMCAmJgogCSAgICB0cC0+bGlua19jb25maWcuYWN0aXZlX2R1cGxleCA9PSBEVVBMRVhfSEFMRikKLQkJdHczMihNQUNfVFhfTEVOR1RIUywKLQkJICAgICAoKDIgPDwgVFhfTEVOR1RIU19JUEdfQ1JTX1NISUZUKSB8Ci0JCSAgICAgICg2IDw8IFRYX0xFTkdUSFNfSVBHX1NISUZUKSB8Ci0JCSAgICAgICgweGZmIDw8IFRYX0xFTkdUSFNfU0xPVF9USU1FX1NISUZUKSkpOworCQl0dzMyKE1BQ19UWF9MRU5HVEhTLCB2YWwgfAorCQkgICAgICgweGZmIDw8IFRYX0xFTkdUSFNfU0xPVF9USU1FX1NISUZUKSk7CiAJZWxzZQotCQl0dzMyKE1BQ19UWF9MRU5HVEhTLAotCQkgICAgICgoMiA8PCBUWF9MRU5HVEhTX0lQR19DUlNfU0hJRlQpIHwKLQkJICAgICAgKDYgPDwgVFhfTEVOR1RIU19JUEdfU0hJRlQpIHwKLQkJICAgICAgKDMyIDw8IFRYX0xFTkdUSFNfU0xPVF9USU1FX1NISUZUKSkpOworCQl0dzMyKE1BQ19UWF9MRU5HVEhTLCB2YWwgfAorCQkgICAgICgzMiA8PCBUWF9MRU5HVEhTX1NMT1RfVElNRV9TSElGVCkpOwogCi0JaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpKSB7CisJaWYgKCF0ZzNfZmxhZyh0cCwgNTcwNV9QTFVTKSkgewogCQlpZiAobmV0aWZfY2Fycmllcl9vayh0cC0+ZGV2KSkgewogCQkJdHczMihIT1NUQ0NfU1RBVF9DT0FMX1RJQ0tTLAogCQkJICAgICB0cC0+Y29hbC5zdGF0c19ibG9ja19jb2FsZXNjZV91c2Vjcyk7CkBAIC00NDQwLDggKzQ0NzksOCBAQAogCQl9CiAJfQogCi0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19BU1BNX1dPUktBUk9VTkQpIHsKLQkJdTMyIHZhbCA9IHRyMzIoUENJRV9QV1JfTUdNVF9USFJFU0gpOworCWlmICh0ZzNfZmxhZyh0cCwgQVNQTV9XT1JLQVJPVU5EKSkgeworCQl2YWwgPSB0cjMyKFBDSUVfUFdSX01HTVRfVEhSRVNIKTsKIAkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKHRwLT5kZXYpKQogCQkJdmFsID0gKHZhbCAmIH5QQ0lFX1BXUl9NR01UX0wxX1RIUkVTSF9NU0spIHwKIAkJCSAgICAgIHRwLT5wd3JtZ210X3RocmVzaDsKQEAgLTQ0NTgsNiArNDQ5NywxMjMgQEAKIAlyZXR1cm4gdHAtPmlycV9zeW5jOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgdGczX3JkMzJfbG9vcChzdHJ1Y3QgdGczICp0cCwgdTMyICpkc3QsIHUzMiBvZmYsIHUzMiBsZW4pCit7CisJaW50IGk7CisKKwlkc3QgPSAodTMyICopKCh1OCAqKWRzdCArIG9mZik7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSBzaXplb2YodTMyKSkKKwkJKmRzdCsrID0gdHIzMihvZmYgKyBpKTsKK30KKworc3RhdGljIHZvaWQgdGczX2R1bXBfbGVnYWN5X3JlZ3Moc3RydWN0IHRnMyAqdHAsIHUzMiAqcmVncykKK3sKKwl0ZzNfcmQzMl9sb29wKHRwLCByZWdzLCBURzNQQ0lfVkVORE9SLCAweGIwKTsKKwl0ZzNfcmQzMl9sb29wKHRwLCByZWdzLCBNQUlMQk9YX0lOVEVSUlVQVF8wLCAweDIwMCk7CisJdGczX3JkMzJfbG9vcCh0cCwgcmVncywgTUFDX01PREUsIDB4NGYwKTsKKwl0ZzNfcmQzMl9sb29wKHRwLCByZWdzLCBTTkREQVRBSV9NT0RFLCAweGUwKTsKKwl0ZzNfcmQzMl9sb29wKHRwLCByZWdzLCBTTkREQVRBQ19NT0RFLCAweDA0KTsKKwl0ZzNfcmQzMl9sb29wKHRwLCByZWdzLCBTTkRCRFNfTU9ERSwgMHg4MCk7CisJdGczX3JkMzJfbG9vcCh0cCwgcmVncywgU05EQkRJX01PREUsIDB4NDgpOworCXRnM19yZDMyX2xvb3AodHAsIHJlZ3MsIFNOREJEQ19NT0RFLCAweDA0KTsKKwl0ZzNfcmQzMl9sb29wKHRwLCByZWdzLCBSQ1ZMUENfTU9ERSwgMHgyMCk7CisJdGczX3JkMzJfbG9vcCh0cCwgcmVncywgUkNWTFBDX1NFTExTVF9CQVNFLCAweDE1Yyk7CisJdGczX3JkMzJfbG9vcCh0cCwgcmVncywgUkNWREJESV9NT0RFLCAweDBjKTsKKwl0ZzNfcmQzMl9sb29wKHRwLCByZWdzLCBSQ1ZEQkRJX0pVTUJPX0JELCAweDNjKTsKKwl0ZzNfcmQzMl9sb29wKHRwLCByZWdzLCBSQ1ZEQkRJX0JEX1BST0RfSURYXzAsIDB4NDQpOworCXRnM19yZDMyX2xvb3AodHAsIHJlZ3MsIFJDVkRDQ19NT0RFLCAweDA0KTsKKwl0ZzNfcmQzMl9sb29wKHRwLCByZWdzLCBSQ1ZCRElfTU9ERSwgMHgyMCk7CisJdGczX3JkMzJfbG9vcCh0cCwgcmVncywgUkNWQ0NfTU9ERSwgMHgxNCk7CisJdGczX3JkMzJfbG9vcCh0cCwgcmVncywgUkNWTFNDX01PREUsIDB4MDgpOworCXRnM19yZDMyX2xvb3AodHAsIHJlZ3MsIE1CRlJFRV9NT0RFLCAweDA4KTsKKwl0ZzNfcmQzMl9sb29wKHRwLCByZWdzLCBIT1NUQ0NfTU9ERSwgMHgxMDApOworCisJaWYgKHRnM19mbGFnKHRwLCBTVVBQT1JUX01TSVgpKQorCQl0ZzNfcmQzMl9sb29wKHRwLCByZWdzLCBIT1NUQ0NfUlhDT0xfVElDS1NfVkVDMSwgMHgxODApOworCisJdGczX3JkMzJfbG9vcCh0cCwgcmVncywgTUVNQVJCX01PREUsIDB4MTApOworCXRnM19yZDMyX2xvb3AodHAsIHJlZ3MsIEJVRk1HUl9NT0RFLCAweDU4KTsKKwl0ZzNfcmQzMl9sb29wKHRwLCByZWdzLCBSRE1BQ19NT0RFLCAweDA4KTsKKwl0ZzNfcmQzMl9sb29wKHRwLCByZWdzLCBXRE1BQ19NT0RFLCAweDA4KTsKKwl0ZzNfcmQzMl9sb29wKHRwLCByZWdzLCBSWF9DUFVfTU9ERSwgMHgwNCk7CisJdGczX3JkMzJfbG9vcCh0cCwgcmVncywgUlhfQ1BVX1NUQVRFLCAweDA0KTsKKwl0ZzNfcmQzMl9sb29wKHRwLCByZWdzLCBSWF9DUFVfUEdNQ1RSLCAweDA0KTsKKwl0ZzNfcmQzMl9sb29wKHRwLCByZWdzLCBSWF9DUFVfSFdCS1BULCAweDA0KTsKKworCWlmICghdGczX2ZsYWcodHAsIDU3MDVfUExVUykpIHsKKwkJdGczX3JkMzJfbG9vcCh0cCwgcmVncywgVFhfQ1BVX01PREUsIDB4MDQpOworCQl0ZzNfcmQzMl9sb29wKHRwLCByZWdzLCBUWF9DUFVfU1RBVEUsIDB4MDQpOworCQl0ZzNfcmQzMl9sb29wKHRwLCByZWdzLCBUWF9DUFVfUEdNQ1RSLCAweDA0KTsKKwl9CisKKwl0ZzNfcmQzMl9sb29wKHRwLCByZWdzLCBHUkNNQk9YX0lOVEVSUlVQVF8wLCAweDExMCk7CisJdGczX3JkMzJfbG9vcCh0cCwgcmVncywgRlRRX1JFU0VULCAweDEyMCk7CisJdGczX3JkMzJfbG9vcCh0cCwgcmVncywgTVNHSU5UX01PREUsIDB4MGMpOworCXRnM19yZDMyX2xvb3AodHAsIHJlZ3MsIERNQUNfTU9ERSwgMHgwNCk7CisJdGczX3JkMzJfbG9vcCh0cCwgcmVncywgR1JDX01PREUsIDB4NGMpOworCisJaWYgKHRnM19mbGFnKHRwLCBOVlJBTSkpCisJCXRnM19yZDMyX2xvb3AodHAsIHJlZ3MsIE5WUkFNX0NNRCwgMHgyNCk7Cit9CisKK3N0YXRpYyB2b2lkIHRnM19kdW1wX3N0YXRlKHN0cnVjdCB0ZzMgKnRwKQoreworCWludCBpOworCXUzMiAqcmVnczsKKworCXJlZ3MgPSBremFsbG9jKFRHM19SRUdfQkxLX1NJWkUsIEdGUF9BVE9NSUMpOworCWlmICghcmVncykgeworCQluZXRkZXZfZXJyKHRwLT5kZXYsICJGYWlsZWQgYWxsb2NhdGluZyByZWdpc3RlciBkdW1wIGJ1ZmZlclxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAodGczX2ZsYWcodHAsIFBDSV9FWFBSRVNTKSkgeworCQkvKiBSZWFkIHVwIHRvIGJ1dCBub3QgaW5jbHVkaW5nIHByaXZhdGUgUENJIHJlZ2lzdGVycyAqLworCQlmb3IgKGkgPSAwOyBpIDwgVEczX1BDSUVfVExETFBMX1BPUlQ7IGkgKz0gc2l6ZW9mKHUzMikpCisJCQlyZWdzW2kgLyBzaXplb2YodTMyKV0gPSB0cjMyKGkpOworCX0gZWxzZQorCQl0ZzNfZHVtcF9sZWdhY3lfcmVncyh0cCwgcmVncyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVEczX1JFR19CTEtfU0laRSAvIHNpemVvZih1MzIpOyBpICs9IDQpIHsKKwkJaWYgKCFyZWdzW2kgKyAwXSAmJiAhcmVnc1tpICsgMV0gJiYKKwkJICAgICFyZWdzW2kgKyAyXSAmJiAhcmVnc1tpICsgM10pCisJCQljb250aW51ZTsKKworCQluZXRkZXZfZXJyKHRwLT5kZXYsICIweCUwOHg6IDB4JTA4eCwgMHglMDh4LCAweCUwOHgsIDB4JTA4eFxuIiwKKwkJCSAgIGkgKiA0LAorCQkJICAgcmVnc1tpICsgMF0sIHJlZ3NbaSArIDFdLCByZWdzW2kgKyAyXSwgcmVnc1tpICsgM10pOworCX0KKworCWtmcmVlKHJlZ3MpOworCisJZm9yIChpID0gMDsgaSA8IHRwLT5pcnFfY250OyBpKyspIHsKKwkJc3RydWN0IHRnM19uYXBpICp0bmFwaSA9ICZ0cC0+bmFwaVtpXTsKKworCQkvKiBTVyBzdGF0dXMgYmxvY2sgKi8KKwkJbmV0ZGV2X2Vycih0cC0+ZGV2LAorCQkJICIlZDogSG9zdCBzdGF0dXMgYmxvY2sgWyUwOHg6JTA4eDooJTA0eDolMDR4OiUwNHgpOiglMDR4OiUwNHgpXVxuIiwKKwkJCSAgIGksCisJCQkgICB0bmFwaS0+aHdfc3RhdHVzLT5zdGF0dXMsCisJCQkgICB0bmFwaS0+aHdfc3RhdHVzLT5zdGF0dXNfdGFnLAorCQkJICAgdG5hcGktPmh3X3N0YXR1cy0+cnhfanVtYm9fY29uc3VtZXIsCisJCQkgICB0bmFwaS0+aHdfc3RhdHVzLT5yeF9jb25zdW1lciwKKwkJCSAgIHRuYXBpLT5od19zdGF0dXMtPnJ4X21pbmlfY29uc3VtZXIsCisJCQkgICB0bmFwaS0+aHdfc3RhdHVzLT5pZHhbMF0ucnhfcHJvZHVjZXIsCisJCQkgICB0bmFwaS0+aHdfc3RhdHVzLT5pZHhbMF0udHhfY29uc3VtZXIpOworCisJCW5ldGRldl9lcnIodHAtPmRldiwKKwkJIiVkOiBOQVBJIGluZm8gWyUwOHg6JTA4eDooJTA0eDolMDR4OiUwNHgpOiUwNHg6KCUwNHg6JTA0eDolMDR4OiUwNHgpXVxuIiwKKwkJCSAgIGksCisJCQkgICB0bmFwaS0+bGFzdF90YWcsIHRuYXBpLT5sYXN0X2lycV90YWcsCisJCQkgICB0bmFwaS0+dHhfcHJvZCwgdG5hcGktPnR4X2NvbnMsIHRuYXBpLT50eF9wZW5kaW5nLAorCQkJICAgdG5hcGktPnJ4X3JjYl9wdHIsCisJCQkgICB0bmFwaS0+cHJvZHJpbmcucnhfc3RkX3Byb2RfaWR4LAorCQkJICAgdG5hcGktPnByb2RyaW5nLnJ4X3N0ZF9jb25zX2lkeCwKKwkJCSAgIHRuYXBpLT5wcm9kcmluZy5yeF9qbWJfcHJvZF9pZHgsCisJCQkgICB0bmFwaS0+cHJvZHJpbmcucnhfam1iX2NvbnNfaWR4KTsKKwl9Cit9CisKIC8qIFRoaXMgaXMgY2FsbGVkIHdoZW5ldmVyIHdlIHN1c3BlY3QgdGhhdCB0aGUgc3lzdGVtIGNoaXBzZXQgaXMgcmUtCiAgKiBvcmRlcmluZyB0aGUgc2VxdWVuY2Ugb2YgTU1JTyB0byB0aGUgdHggc2VuZCBtYWlsYm94LiBUaGUgc3ltcHRvbQogICogaXMgYm9ndXMgdHggY29tcGxldGlvbnMuIFdlIHRyeSB0byByZWNvdmVyIGJ5IHNldHRpbmcgdGhlCkBAIC00NDY2LDcgKzQ2MjIsNyBAQAogICovCiBzdGF0aWMgdm9pZCB0ZzNfdHhfcmVjb3ZlcihzdHJ1Y3QgdGczICp0cCkKIHsKLQlCVUdfT04oKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19NQk9YX1dSSVRFX1JFT1JERVIpIHx8CisJQlVHX09OKHRnM19mbGFnKHRwLCBNQk9YX1dSSVRFX1JFT1JERVIpIHx8CiAJICAgICAgIHRwLT53cml0ZTMyX3R4X21ib3ggPT0gdGczX3dyaXRlX2luZGlyZWN0X21ib3gpOwogCiAJbmV0ZGV2X3dhcm4odHAtPmRldiwKQEAgLTQ0NzYsNyArNDYzMiw3IEBACiAJCSAgICAiYW5kIGluY2x1ZGUgc3lzdGVtIGNoaXBzZXQgaW5mb3JtYXRpb24uXG4iKTsKIAogCXNwaW5fbG9jaygmdHAtPmxvY2spOwotCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfVFhfUkVDT1ZFUllfUEVORElORzsKKwl0ZzNfZmxhZ19zZXQodHAsIFRYX1JFQ09WRVJZX1BFTkRJTkcpOwogCXNwaW5fdW5sb2NrKCZ0cC0+bG9jayk7CiB9CiAKQEAgLTQ1MDAsNyArNDY1Niw3IEBACiAJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOwogCWludCBpbmRleCA9IHRuYXBpIC0gdHAtPm5hcGk7CiAKLQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfVFNTKQorCWlmICh0ZzNfZmxhZyh0cCwgRU5BQkxFX1RTUykpCiAJCWluZGV4LS07CiAKIAl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHRwLT5kZXYsIGluZGV4KTsKQEAgLTQ4MTUsNyArNDk3MSw3IEBACiAJCQlza2IgPSBjb3B5X3NrYjsKIAkJfQogCi0JCWlmICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1JYX0NIRUNLU1VNUykgJiYKKwkJaWYgKCh0cC0+ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSAmJgogCQkgICAgKGRlc2MtPnR5cGVfZmxhZ3MgJiBSWERfRkxBR19UQ1BVRFBfQ1NVTSkgJiYKIAkJICAgICgoKGRlc2MtPmlwX3RjcF9jc3VtICYgUlhEX1RDUENTVU1fTUFTSykKIAkJICAgICAgPj4gUlhEX1RDUENTVU1fU0hJRlQpID09IDB4ZmZmZikpCkBAIC00ODY4LDcgKzUwMjQsNyBAQAogCXR3MzJfcnhfbWJveCh0bmFwaS0+Y29uc21ib3gsIHN3X2lkeCk7CiAKIAkvKiBSZWZpbGwgUlggcmluZyhzKS4gKi8KLQlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9SU1MpKSB7CisJaWYgKCF0ZzNfZmxhZyh0cCwgRU5BQkxFX1JTUykpIHsKIAkJaWYgKHdvcmtfbWFzayAmIFJYRF9PUEFRVUVfUklOR19TVEQpIHsKIAkJCXRwci0+cnhfc3RkX3Byb2RfaWR4ID0gc3RkX3Byb2RfaWR4ICYKIAkJCQkJICAgICAgIHRwLT5yeF9zdGRfcmluZ19tYXNrOwpAQCAtNDkwMSwxNiArNTA1NywxNCBAQAogc3RhdGljIHZvaWQgdGczX3BvbGxfbGluayhzdHJ1Y3QgdGczICp0cCkKIHsKIAkvKiBoYW5kbGUgbGluayBjaGFuZ2UgYW5kIG90aGVyIHBoeSBldmVudHMgKi8KLQlpZiAoISh0cC0+dGczX2ZsYWdzICYKLQkgICAgICAoVEczX0ZMQUdfVVNFX0xJTktDSEdfUkVHIHwKLQkgICAgICAgVEczX0ZMQUdfUE9MTF9TRVJERVMpKSkgeworCWlmICghKHRnM19mbGFnKHRwLCBVU0VfTElOS0NIR19SRUcpIHx8IHRnM19mbGFnKHRwLCBQT0xMX1NFUkRFUykpKSB7CiAJCXN0cnVjdCB0ZzNfaHdfc3RhdHVzICpzYmxrID0gdHAtPm5hcGlbMF0uaHdfc3RhdHVzOwogCiAJCWlmIChzYmxrLT5zdGF0dXMgJiBTRF9TVEFUVVNfTElOS19DSEcpIHsKIAkJCXNibGstPnN0YXR1cyA9IFNEX1NUQVRVU19VUERBVEVEIHwKIAkJCQkgICAgICAgKHNibGstPnN0YXR1cyAmIH5TRF9TVEFUVVNfTElOS19DSEcpOwogCQkJc3Bpbl9sb2NrKCZ0cC0+bG9jayk7Ci0JCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19VU0VfUEhZTElCKSB7CisJCQlpZiAodGczX2ZsYWcodHAsIFVTRV9QSFlMSUIpKSB7CiAJCQkJdHczMl9mKE1BQ19TVEFUVVMsCiAJCQkJICAgICAoTUFDX1NUQVRVU19TWU5DX0NIQU5HRUQgfAogCQkJCSAgICAgIE1BQ19TVEFUVVNfQ0ZHX0NIQU5HRUQgfApAQCAtNTA1Nyw3ICs1MjExLDcgQEAKIAkvKiBydW4gVFggY29tcGxldGlvbiB0aHJlYWQgKi8KIAlpZiAodG5hcGktPmh3X3N0YXR1cy0+aWR4WzBdLnR4X2NvbnN1bWVyICE9IHRuYXBpLT50eF9jb25zKSB7CiAJCXRnM190eCh0bmFwaSk7Ci0JCWlmICh1bmxpa2VseSh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfVFhfUkVDT1ZFUllfUEVORElORykpCisJCWlmICh1bmxpa2VseSh0ZzNfZmxhZyh0cCwgVFhfUkVDT1ZFUllfUEVORElORykpKQogCQkJcmV0dXJuIHdvcmtfZG9uZTsKIAl9CiAKQEAgLTUwNjgsNyArNTIyMiw3IEBACiAJaWYgKCoodG5hcGktPnJ4X3JjYl9wcm9kX2lkeCkgIT0gdG5hcGktPnJ4X3JjYl9wdHIpCiAJCXdvcmtfZG9uZSArPSB0ZzNfcngodG5hcGksIGJ1ZGdldCAtIHdvcmtfZG9uZSk7CiAKLQlpZiAoKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX1JTUykgJiYgdG5hcGkgPT0gJnRwLT5uYXBpWzFdKSB7CisJaWYgKHRnM19mbGFnKHRwLCBFTkFCTEVfUlNTKSAmJiB0bmFwaSA9PSAmdHAtPm5hcGlbMV0pIHsKIAkJc3RydWN0IHRnM19yeF9wcm9kcmluZ19zZXQgKmRwciA9ICZ0cC0+bmFwaVswXS5wcm9kcmluZzsKIAkJaW50IGksIGVyciA9IDA7CiAJCXUzMiBzdGRfcHJvZF9pZHggPSBkcHItPnJ4X3N0ZF9wcm9kX2lkeDsKQEAgLTUxMDcsNyArNTI2MSw3IEBACiAJd2hpbGUgKDEpIHsKIAkJd29ya19kb25lID0gdGczX3BvbGxfd29yayh0bmFwaSwgd29ya19kb25lLCBidWRnZXQpOwogCi0JCWlmICh1bmxpa2VseSh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfVFhfUkVDT1ZFUllfUEVORElORykpCisJCWlmICh1bmxpa2VseSh0ZzNfZmxhZyh0cCwgVFhfUkVDT1ZFUllfUEVORElORykpKQogCQkJZ290byB0eF9yZWNvdmVyeTsKIAogCQlpZiAodW5saWtlbHkod29ya19kb25lID49IGJ1ZGdldCkpCkBAIC01MTQxLDYgKzUyOTUsNDAgQEAKIAlyZXR1cm4gd29ya19kb25lOwogfQogCitzdGF0aWMgdm9pZCB0ZzNfcHJvY2Vzc19lcnJvcihzdHJ1Y3QgdGczICp0cCkKK3sKKwl1MzIgdmFsOworCWJvb2wgcmVhbF9lcnJvciA9IGZhbHNlOworCisJaWYgKHRnM19mbGFnKHRwLCBFUlJPUl9QUk9DRVNTRUQpKQorCQlyZXR1cm47CisKKwkvKiBDaGVjayBGbG93IEF0dGVudGlvbiByZWdpc3RlciAqLworCXZhbCA9IHRyMzIoSE9TVENDX0ZMT1dfQVRUTik7CisJaWYgKHZhbCAmIH5IT1NUQ0NfRkxPV19BVFROX01CVUZfTFdNKSB7CisJCW5ldGRldl9lcnIodHAtPmRldiwgIkZMT1cgQXR0ZW50aW9uIGVycm9yLiAgUmVzZXR0aW5nIGNoaXAuXG4iKTsKKwkJcmVhbF9lcnJvciA9IHRydWU7CisJfQorCisJaWYgKHRyMzIoTVNHSU5UX1NUQVRVUykgJiB+TVNHSU5UX1NUQVRVU19NU0lfUkVRKSB7CisJCW5ldGRldl9lcnIodHAtPmRldiwgIk1TSSBTdGF0dXMgZXJyb3IuICBSZXNldHRpbmcgY2hpcC5cbiIpOworCQlyZWFsX2Vycm9yID0gdHJ1ZTsKKwl9CisKKwlpZiAodHIzMihSRE1BQ19TVEFUVVMpIHx8IHRyMzIoV0RNQUNfU1RBVFVTKSkgeworCQluZXRkZXZfZXJyKHRwLT5kZXYsICJETUEgU3RhdHVzIGVycm9yLiAgUmVzZXR0aW5nIGNoaXAuXG4iKTsKKwkJcmVhbF9lcnJvciA9IHRydWU7CisJfQorCisJaWYgKCFyZWFsX2Vycm9yKQorCQlyZXR1cm47CisKKwl0ZzNfZHVtcF9zdGF0ZSh0cCk7CisKKwl0ZzNfZmxhZ19zZXQodHAsIEVSUk9SX1BST0NFU1NFRCk7CisJc2NoZWR1bGVfd29yaygmdHAtPnJlc2V0X3Rhc2spOworfQorCiBzdGF0aWMgaW50IHRnM19wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKIHsKIAlzdHJ1Y3QgdGczX25hcGkgKnRuYXBpID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCB0ZzNfbmFwaSwgbmFwaSk7CkBAIC01MTQ5LDE3ICs1MzM3LDIwIEBACiAJc3RydWN0IHRnM19od19zdGF0dXMgKnNibGsgPSB0bmFwaS0+aHdfc3RhdHVzOwogCiAJd2hpbGUgKDEpIHsKKwkJaWYgKHNibGstPnN0YXR1cyAmIFNEX1NUQVRVU19FUlJPUikKKwkJCXRnM19wcm9jZXNzX2Vycm9yKHRwKTsKKwogCQl0ZzNfcG9sbF9saW5rKHRwKTsKIAogCQl3b3JrX2RvbmUgPSB0ZzNfcG9sbF93b3JrKHRuYXBpLCB3b3JrX2RvbmUsIGJ1ZGdldCk7CiAKLQkJaWYgKHVubGlrZWx5KHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19UWF9SRUNPVkVSWV9QRU5ESU5HKSkKKwkJaWYgKHVubGlrZWx5KHRnM19mbGFnKHRwLCBUWF9SRUNPVkVSWV9QRU5ESU5HKSkpCiAJCQlnb3RvIHR4X3JlY292ZXJ5OwogCiAJCWlmICh1bmxpa2VseSh3b3JrX2RvbmUgPj0gYnVkZ2V0KSkKIAkJCWJyZWFrOwogCi0JCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfVEFHR0VEX1NUQVRVUykgeworCQlpZiAodGczX2ZsYWcodHAsIFRBR0dFRF9TVEFUVVMpKSB7CiAJCQkvKiB0cC0+bGFzdF90YWcgaXMgdXNlZCBpbiB0ZzNfaW50X3JlZW5hYmxlKCkgYmVsb3cKIAkJCSAqIHRvIHRlbGwgdGhlIGh3IGhvdyBtdWNoIHdvcmsgaGFzIGJlZW4gcHJvY2Vzc2VkLAogCQkJICogc28gd2UgbXVzdCByZWFkIGl0IGJlZm9yZSBjaGVja2luZyBmb3IgbW9yZSB3b3JrLgpAQCAtNTMyNiw3ICs1NTE3LDcgQEAKIAkgKiBpbnRlcnJ1cHQgaXMgb3VycyBhbmQgd2lsbCBmbHVzaCB0aGUgc3RhdHVzIGJsb2NrLgogCSAqLwogCWlmICh1bmxpa2VseSghKHNibGstPnN0YXR1cyAmIFNEX1NUQVRVU19VUERBVEVEKSkpIHsKLQkJaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfQ0hJUF9SRVNFVFRJTkcpIHx8CisJCWlmICh0ZzNfZmxhZyh0cCwgQ0hJUF9SRVNFVFRJTkcpIHx8CiAJCSAgICAodHIzMihURzNQQ0lfUENJU1RBVEUpICYgUENJU1RBVEVfSU5UX05PVF9BQ1RJVkUpKSB7CiAJCQloYW5kbGVkID0gMDsKIAkJCWdvdG8gb3V0OwpAQCAtNTM3NSw3ICs1NTY2LDcgQEAKIAkgKiBpbnRlcnJ1cHQgaXMgb3VycyBhbmQgd2lsbCBmbHVzaCB0aGUgc3RhdHVzIGJsb2NrLgogCSAqLwogCWlmICh1bmxpa2VseShzYmxrLT5zdGF0dXNfdGFnID09IHRuYXBpLT5sYXN0X2lycV90YWcpKSB7Ci0JCWlmICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0NISVBfUkVTRVRUSU5HKSB8fAorCQlpZiAodGczX2ZsYWcodHAsIENISVBfUkVTRVRUSU5HKSB8fAogCQkgICAgKHRyMzIoVEczUENJX1BDSVNUQVRFKSAmIFBDSVNUQVRFX0lOVF9OT1RfQUNUSVZFKSkgewogCQkJaGFuZGxlZCA9IDA7CiAJCQlnb3RvIG91dDsKQEAgLTU0ODgsMTQgKzU2NzksMTQgQEAKIAogCXRnM19mdWxsX2xvY2sodHAsIDEpOwogCi0JcmVzdGFydF90aW1lciA9IHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUkVTVEFSVF9USU1FUjsKLQl0cC0+dGczX2ZsYWdzMiAmPSB+VEczX0ZMRzJfUkVTVEFSVF9USU1FUjsKKwlyZXN0YXJ0X3RpbWVyID0gdGczX2ZsYWcodHAsIFJFU1RBUlRfVElNRVIpOworCXRnM19mbGFnX2NsZWFyKHRwLCBSRVNUQVJUX1RJTUVSKTsKIAotCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfVFhfUkVDT1ZFUllfUEVORElORykgeworCWlmICh0ZzNfZmxhZyh0cCwgVFhfUkVDT1ZFUllfUEVORElORykpIHsKIAkJdHAtPndyaXRlMzJfdHhfbWJveCA9IHRnM193cml0ZTMyX3R4X21ib3g7CiAJCXRwLT53cml0ZTMyX3J4X21ib3ggPSB0ZzNfd3JpdGVfZmx1c2hfcmVnMzI7Ci0JCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTUJPWF9XUklURV9SRU9SREVSOwotCQl0cC0+dGczX2ZsYWdzICY9IH5URzNfRkxBR19UWF9SRUNPVkVSWV9QRU5ESU5HOworCQl0ZzNfZmxhZ19zZXQodHAsIE1CT1hfV1JJVEVfUkVPUkRFUik7CisJCXRnM19mbGFnX2NsZWFyKHRwLCBUWF9SRUNPVkVSWV9QRU5ESU5HKTsKIAl9CiAKIAl0ZzNfaGFsdCh0cCwgUkVTRVRfS0lORF9TSFVURE9XTiwgMCk7CkBAIC01NTE1LDIxICs1NzA2LDEzIEBACiAJCXRnM19waHlfc3RhcnQodHApOwogfQogCi1zdGF0aWMgdm9pZCB0ZzNfZHVtcF9zaG9ydF9zdGF0ZShzdHJ1Y3QgdGczICp0cCkKLXsKLQluZXRkZXZfZXJyKHRwLT5kZXYsICJERUJVRzogTUFDX1RYX1NUQVRVU1slMDh4XSBNQUNfUlhfU1RBVFVTWyUwOHhdXG4iLAotCQkgICB0cjMyKE1BQ19UWF9TVEFUVVMpLCB0cjMyKE1BQ19SWF9TVEFUVVMpKTsKLQluZXRkZXZfZXJyKHRwLT5kZXYsICJERUJVRzogUkRNQUNfU1RBVFVTWyUwOHhdIFdETUFDX1NUQVRVU1slMDh4XVxuIiwKLQkJICAgdHIzMihSRE1BQ19TVEFUVVMpLCB0cjMyKFdETUFDX1NUQVRVUykpOwotfQotCiBzdGF0aWMgdm9pZCB0ZzNfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCWlmIChuZXRpZl9tc2dfdHhfZXJyKHRwKSkgewogCQluZXRkZXZfZXJyKGRldiwgInRyYW5zbWl0IHRpbWVkIG91dCwgcmVzZXR0aW5nXG4iKTsKLQkJdGczX2R1bXBfc2hvcnRfc3RhdGUodHApOworCQl0ZzNfZHVtcF9zdGF0ZSh0cCk7CiAJfQogCiAJc2NoZWR1bGVfd29yaygmdHAtPnJlc2V0X3Rhc2spOwpAQCAtNTU0OCw3ICs1NzMxLDcgQEAKIAkJCQkJICBpbnQgbGVuKQogewogI2lmIGRlZmluZWQoQ09ORklHX0hJR0hNRU0pICYmIChCSVRTX1BFUl9MT05HID09IDY0KQotCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfNDBCSVRfRE1BX0JVRykKKwlpZiAodGczX2ZsYWcodHAsIDQwQklUX0RNQV9CVUcpKQogCQlyZXR1cm4gKCh1NjQpIG1hcHBpbmcgKyBsZW4pID4gRE1BX0JJVF9NQVNLKDQwKTsKIAlyZXR1cm4gMDsKICNlbHNlCkBAIC01NTU2LDg5ICs1NzM5LDYgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCB0ZzNfc2V0X3R4ZChzdHJ1Y3QgdGczX25hcGkgKiwgaW50LCBkbWFfYWRkcl90LCBpbnQsIHUzMiwgdTMyKTsKLQotLyogV29ya2Fyb3VuZCA0R0IgYW5kIDQwLWJpdCBoYXJkd2FyZSBETUEgYnVncy4gKi8KLXN0YXRpYyBpbnQgdGlnb24zX2RtYV9od2J1Z193b3JrYXJvdW5kKHN0cnVjdCB0ZzNfbmFwaSAqdG5hcGksCi0JCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBsYXN0X3BsdXNfb25lLAotCQkJCSAgICAgICB1MzIgKnN0YXJ0LCB1MzIgYmFzZV9mbGFncywgdTMyIG1zcykKLXsKLQlzdHJ1Y3QgdGczICp0cCA9IHRuYXBpLT50cDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjsKLQlkbWFfYWRkcl90IG5ld19hZGRyID0gMDsKLQl1MzIgZW50cnkgPSAqc3RhcnQ7Ci0JaW50IGksIHJldCA9IDA7Ci0KLQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MDEpCi0JCW5ld19za2IgPSBza2JfY29weShza2IsIEdGUF9BVE9NSUMpOwotCWVsc2UgewotCQlpbnQgbW9yZV9oZWFkcm9vbSA9IDQgLSAoKHVuc2lnbmVkIGxvbmcpc2tiLT5kYXRhICYgMyk7Ci0KLQkJbmV3X3NrYiA9IHNrYl9jb3B5X2V4cGFuZChza2IsCi0JCQkJCSAgc2tiX2hlYWRyb29tKHNrYikgKyBtb3JlX2hlYWRyb29tLAotCQkJCQkgIHNrYl90YWlscm9vbShza2IpLCBHRlBfQVRPTUlDKTsKLQl9Ci0KLQlpZiAoIW5ld19za2IpIHsKLQkJcmV0ID0gLTE7Ci0JfSBlbHNlIHsKLQkJLyogTmV3IFNLQiBpcyBndWFyYW50ZWVkIHRvIGJlIGxpbmVhci4gKi8KLQkJZW50cnkgPSAqc3RhcnQ7Ci0JCW5ld19hZGRyID0gcGNpX21hcF9zaW5nbGUodHAtPnBkZXYsIG5ld19za2ItPmRhdGEsIG5ld19za2ItPmxlbiwKLQkJCQkJICBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJLyogTWFrZSBzdXJlIHRoZSBtYXBwaW5nIHN1Y2NlZWRlZCAqLwotCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHRwLT5wZGV2LCBuZXdfYWRkcikpIHsKLQkJCXJldCA9IC0xOwotCQkJZGV2X2tmcmVlX3NrYihuZXdfc2tiKTsKLQkJCW5ld19za2IgPSBOVUxMOwotCi0JCS8qIE1ha2Ugc3VyZSBuZXcgc2tiIGRvZXMgbm90IGNyb3NzIGFueSA0RyBib3VuZGFyaWVzLgotCQkgKiBEcm9wIHRoZSBwYWNrZXQgaWYgaXQgZG9lcy4KLQkJICovCi0JCX0gZWxzZSBpZiAoKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNEdfRE1BX0JORFJZX0JVRykgJiYKLQkJCSAgICB0ZzNfNGdfb3ZlcmZsb3dfdGVzdChuZXdfYWRkciwgbmV3X3NrYi0+bGVuKSkgewotCQkJcGNpX3VubWFwX3NpbmdsZSh0cC0+cGRldiwgbmV3X2FkZHIsIG5ld19za2ItPmxlbiwKLQkJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQkJcmV0ID0gLTE7Ci0JCQlkZXZfa2ZyZWVfc2tiKG5ld19za2IpOwotCQkJbmV3X3NrYiA9IE5VTEw7Ci0JCX0gZWxzZSB7Ci0JCQl0ZzNfc2V0X3R4ZCh0bmFwaSwgZW50cnksIG5ld19hZGRyLCBuZXdfc2tiLT5sZW4sCi0JCQkJICAgIGJhc2VfZmxhZ3MsIDEgfCAobXNzIDw8IDEpKTsKLQkJCSpzdGFydCA9IE5FWFRfVFgoZW50cnkpOwotCQl9Ci0JfQotCi0JLyogTm93IGNsZWFuIHVwIHRoZSBzdyByaW5nIGVudHJpZXMuICovCi0JaSA9IDA7Ci0Jd2hpbGUgKGVudHJ5ICE9IGxhc3RfcGx1c19vbmUpIHsKLQkJaW50IGxlbjsKLQotCQlpZiAoaSA9PSAwKQotCQkJbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKLQkJZWxzZQotCQkJbGVuID0gc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpLTFdLnNpemU7Ci0KLQkJcGNpX3VubWFwX3NpbmdsZSh0cC0+cGRldiwKLQkJCQkgZG1hX3VubWFwX2FkZHIoJnRuYXBpLT50eF9idWZmZXJzW2VudHJ5XSwKLQkJCQkJCW1hcHBpbmcpLAotCQkJCSBsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQlpZiAoaSA9PSAwKSB7Ci0JCQl0bmFwaS0+dHhfYnVmZmVyc1tlbnRyeV0uc2tiID0gbmV3X3NrYjsKLQkJCWRtYV91bm1hcF9hZGRyX3NldCgmdG5hcGktPnR4X2J1ZmZlcnNbZW50cnldLCBtYXBwaW5nLAotCQkJCQkgICBuZXdfYWRkcik7Ci0JCX0gZWxzZSB7Ci0JCQl0bmFwaS0+dHhfYnVmZmVyc1tlbnRyeV0uc2tiID0gTlVMTDsKLQkJfQotCQllbnRyeSA9IE5FWFRfVFgoZW50cnkpOwotCQlpKys7Ci0JfQotCi0JZGV2X2tmcmVlX3NrYihza2IpOwotCi0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIHZvaWQgdGczX3NldF90eGQoc3RydWN0IHRnM19uYXBpICp0bmFwaSwgaW50IGVudHJ5LAogCQkJZG1hX2FkZHJfdCBtYXBwaW5nLCBpbnQgbGVuLCB1MzIgZmxhZ3MsCiAJCQl1MzIgbXNzX2FuZF9pc19lbmQpCkBAIC01NjYyLDE3OSArNTc2Miw4NiBAQAogCXR4ZC0+dmxhbl90YWcgPSB2bGFuX3RhZyA8PCBUWERfVkxBTl9UQUdfU0hJRlQ7CiB9CiAKLS8qIGhhcmRfc3RhcnRfeG1pdCBmb3IgZGV2aWNlcyB0aGF0IGRvbid0IGhhdmUgYW55IGJ1Z3MgYW5kCi0gKiBzdXBwb3J0IFRHM19GTEcyX0hXX1RTT18yIGFuZCBURzNfRkxHMl9IV19UU09fMyBvbmx5LgotICovCi1zdGF0aWMgbmV0ZGV2X3R4X3QgdGczX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCB0ZzNfc2tiX2Vycm9yX3VubWFwKHN0cnVjdCB0ZzNfbmFwaSAqdG5hcGksCisJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxhc3QpCiB7Ci0Jc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXUzMiBsZW4sIGVudHJ5LCBiYXNlX2ZsYWdzLCBtc3M7Ci0JZG1hX2FkZHJfdCBtYXBwaW5nOwotCXN0cnVjdCB0ZzNfbmFwaSAqdG5hcGk7Ci0Jc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOwotCXVuc2lnbmVkIGludCBpLCBsYXN0OworCWludCBpOworCXUzMiBlbnRyeSA9IHRuYXBpLT50eF9wcm9kOworCXN0cnVjdCByaW5nX2luZm8gKnR4YiA9ICZ0bmFwaS0+dHhfYnVmZmVyc1tlbnRyeV07CiAKLQl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwotCXRuYXBpID0gJnRwLT5uYXBpW3NrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpXTsKLQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfVFNTKQotCQl0bmFwaSsrOwotCi0JLyogV2UgYXJlIHJ1bm5pbmcgaW4gQkggZGlzYWJsZWQgY29udGV4dCB3aXRoIG5ldGlmX3R4X2xvY2sKLQkgKiBhbmQgVFggcmVjbGFpbSBydW5zIHZpYSB0cC0+bmFwaS5wb2xsIGluc2lkZSBvZiBhIHNvZnR3YXJlCi0JICogaW50ZXJydXB0LiAgRnVydGhlcm1vcmUsIElSUSBwcm9jZXNzaW5nIHJ1bnMgbG9ja2xlc3Mgc28gd2UgaGF2ZQotCSAqIG5vIElSUSBjb250ZXh0IGRlYWRsb2NrcyB0byB3b3JyeSBhYm91dCBlaXRoZXIuICBSZWpvaWNlIQotCSAqLwotCWlmICh1bmxpa2VseSh0ZzNfdHhfYXZhaWwodG5hcGkpIDw9IChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMSkpKSB7Ci0JCWlmICghbmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpKSB7Ci0JCQluZXRpZl90eF9zdG9wX3F1ZXVlKHR4cSk7Ci0KLQkJCS8qIFRoaXMgaXMgYSBoYXJkIGVycm9yLCBsb2cgaXQuICovCi0JCQluZXRkZXZfZXJyKGRldiwKLQkJCQkgICAiQlVHISBUeCBSaW5nIGZ1bGwgd2hlbiBxdWV1ZSBhd2FrZSFcbiIpOwotCQl9Ci0JCXJldHVybiBORVRERVZfVFhfQlVTWTsKLQl9Ci0KLQllbnRyeSA9IHRuYXBpLT50eF9wcm9kOwotCWJhc2VfZmxhZ3MgPSAwOwotCW1zcyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemU7Ci0JaWYgKG1zcykgewotCQlpbnQgdGNwX29wdF9sZW4sIGlwX3RjcF9sZW47Ci0JCXUzMiBoZHJsZW47Ci0KLQkJaWYgKHNrYl9oZWFkZXJfY2xvbmVkKHNrYikgJiYKLQkJICAgIHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKSkgewotCQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQkJZ290byBvdXRfdW5sb2NrOwotCQl9Ci0KLQkJaWYgKHNrYl9pc19nc29fdjYoc2tiKSkgewotCQkJaGRybGVuID0gc2tiX2hlYWRsZW4oc2tiKSAtIEVUSF9ITEVOOwotCQl9IGVsc2UgewotCQkJc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTsKLQotCQkJdGNwX29wdF9sZW4gPSB0Y3Bfb3B0bGVuKHNrYik7Ci0JCQlpcF90Y3BfbGVuID0gaXBfaGRybGVuKHNrYikgKyBzaXplb2Yoc3RydWN0IHRjcGhkcik7Ci0KLQkJCWlwaC0+Y2hlY2sgPSAwOwotCQkJaXBoLT50b3RfbGVuID0gaHRvbnMobXNzICsgaXBfdGNwX2xlbiArIHRjcF9vcHRfbGVuKTsKLQkJCWhkcmxlbiA9IGlwX3RjcF9sZW4gKyB0Y3Bfb3B0X2xlbjsKLQkJfQotCi0JCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0hXX1RTT18zKSB7Ci0JCQltc3MgfD0gKGhkcmxlbiAmIDB4YykgPDwgMTI7Ci0JCQlpZiAoaGRybGVuICYgMHgxMCkKLQkJCQliYXNlX2ZsYWdzIHw9IDB4MDAwMDAwMTA7Ci0JCQliYXNlX2ZsYWdzIHw9IChoZHJsZW4gJiAweDNlMCkgPDwgNTsKLQkJfSBlbHNlCi0JCQltc3MgfD0gaGRybGVuIDw8IDk7Ci0KLQkJYmFzZV9mbGFncyB8PSAoVFhEX0ZMQUdfQ1BVX1BSRV9ETUEgfAotCQkJICAgICAgIFRYRF9GTEFHX0NQVV9QT1NUX0RNQSk7Ci0KLQkJdGNwX2hkcihza2IpLT5jaGVjayA9IDA7Ci0KLQl9IGVsc2UgaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKLQkJYmFzZV9mbGFncyB8PSBUWERfRkxBR19UQ1BVRFBfQ1NVTTsKLQl9Ci0KLQlpZiAodmxhbl90eF90YWdfcHJlc2VudChza2IpKQotCQliYXNlX2ZsYWdzIHw9IChUWERfRkxBR19WTEFOIHwKLQkJCSAgICAgICAodmxhbl90eF90YWdfZ2V0KHNrYikgPDwgMTYpKTsKLQotCWxlbiA9IHNrYl9oZWFkbGVuKHNrYik7Ci0KLQkvKiBRdWV1ZSBza2IgZGF0YSwgYS5rLmEuIHRoZSBtYWluIHNrYiBmcmFnbWVudC4gKi8KLQltYXBwaW5nID0gcGNpX21hcF9zaW5nbGUodHAtPnBkZXYsIHNrYi0+ZGF0YSwgbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHRwLT5wZGV2LCBtYXBwaW5nKSkgewotCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLQl0bmFwaS0+dHhfYnVmZmVyc1tlbnRyeV0uc2tiID0gc2tiOwotCWRtYV91bm1hcF9hZGRyX3NldCgmdG5hcGktPnR4X2J1ZmZlcnNbZW50cnldLCBtYXBwaW5nLCBtYXBwaW5nKTsKLQotCWlmICgodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19VU0VfSlVNQk9fQkRGTEFHKSAmJgotCSAgICAhbXNzICYmIHNrYi0+bGVuID4gVkxBTl9FVEhfRlJBTUVfTEVOKQotCQliYXNlX2ZsYWdzIHw9IFRYRF9GTEFHX0pNQl9QS1Q7Ci0KLQl0ZzNfc2V0X3R4ZCh0bmFwaSwgZW50cnksIG1hcHBpbmcsIGxlbiwgYmFzZV9mbGFncywKLQkJICAgIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID09IDApIHwgKG1zcyA8PCAxKSk7Ci0KLQllbnRyeSA9IE5FWFRfVFgoZW50cnkpOwotCi0JLyogTm93IGxvb3AgdGhyb3VnaCBhZGRpdGlvbmFsIGRhdGEgZnJhZ21lbnRzLCBhbmQgcXVldWUgdGhlbS4gKi8KLQlpZiAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA+IDApIHsKLQkJbGFzdCA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgLSAxOwotCQlmb3IgKGkgPSAwOyBpIDw9IGxhc3Q7IGkrKykgewotCQkJc2tiX2ZyYWdfdCAqZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldOwotCi0JCQlsZW4gPSBmcmFnLT5zaXplOwotCQkJbWFwcGluZyA9IHBjaV9tYXBfcGFnZSh0cC0+cGRldiwKLQkJCQkJICAgICAgIGZyYWctPnBhZ2UsCi0JCQkJCSAgICAgICBmcmFnLT5wYWdlX29mZnNldCwKLQkJCQkJICAgICAgIGxlbiwgUENJX0RNQV9UT0RFVklDRSk7Ci0JCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHRwLT5wZGV2LCBtYXBwaW5nKSkKLQkJCQlnb3RvIGRtYV9lcnJvcjsKLQotCQkJdG5hcGktPnR4X2J1ZmZlcnNbZW50cnldLnNrYiA9IE5VTEw7Ci0JCQlkbWFfdW5tYXBfYWRkcl9zZXQoJnRuYXBpLT50eF9idWZmZXJzW2VudHJ5XSwgbWFwcGluZywKLQkJCQkJICAgbWFwcGluZyk7Ci0KLQkJCXRnM19zZXRfdHhkKHRuYXBpLCBlbnRyeSwgbWFwcGluZywgbGVuLAotCQkJCSAgICBiYXNlX2ZsYWdzLCAoaSA9PSBsYXN0KSB8IChtc3MgPDwgMSkpOwotCi0JCQllbnRyeSA9IE5FWFRfVFgoZW50cnkpOwotCQl9Ci0JfQotCi0JLyogUGFja2V0cyBhcmUgcmVhZHksIHVwZGF0ZSBUeCBwcm9kdWNlciBpZHggbG9jYWwgYW5kIG9uIGNhcmQuICovCi0JdHczMl90eF9tYm94KHRuYXBpLT5wcm9kbWJveCwgZW50cnkpOwotCi0JdG5hcGktPnR4X3Byb2QgPSBlbnRyeTsKLQlpZiAodW5saWtlbHkodGczX3R4X2F2YWlsKHRuYXBpKSA8PSAoTUFYX1NLQl9GUkFHUyArIDEpKSkgewotCQluZXRpZl90eF9zdG9wX3F1ZXVlKHR4cSk7Ci0KLQkJLyogbmV0aWZfdHhfc3RvcF9xdWV1ZSgpIG11c3QgYmUgZG9uZSBiZWZvcmUgY2hlY2tpbmcKLQkJICogY2hlY2tpbmcgdHggaW5kZXggaW4gdGczX3R4X2F2YWlsKCkgYmVsb3csIGJlY2F1c2UgaW4KLQkJICogdGczX3R4KCksIHdlIHVwZGF0ZSB0eCBpbmRleCBiZWZvcmUgY2hlY2tpbmcgZm9yCi0JCSAqIG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQoKS4KLQkJICovCi0JCXNtcF9tYigpOwotCQlpZiAodGczX3R4X2F2YWlsKHRuYXBpKSA+IFRHM19UWF9XQUtFVVBfVEhSRVNIKHRuYXBpKSkKLQkJCW5ldGlmX3R4X3dha2VfcXVldWUodHhxKTsKLQl9Ci0KLW91dF91bmxvY2s6Ci0JbW1pb3diKCk7Ci0KLQlyZXR1cm4gTkVUREVWX1RYX09LOwotCi1kbWFfZXJyb3I6Ci0JbGFzdCA9IGk7Ci0JZW50cnkgPSB0bmFwaS0+dHhfcHJvZDsKLQl0bmFwaS0+dHhfYnVmZmVyc1tlbnRyeV0uc2tiID0gTlVMTDsKLQlwY2lfdW5tYXBfc2luZ2xlKHRwLT5wZGV2LAotCQkJIGRtYV91bm1hcF9hZGRyKCZ0bmFwaS0+dHhfYnVmZmVyc1tlbnRyeV0sIG1hcHBpbmcpLAorCXBjaV91bm1hcF9zaW5nbGUodG5hcGktPnRwLT5wZGV2LAorCQkJIGRtYV91bm1hcF9hZGRyKHR4YiwgbWFwcGluZyksCiAJCQkgc2tiX2hlYWRsZW4oc2tiKSwKIAkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKIAlmb3IgKGkgPSAwOyBpIDw9IGxhc3Q7IGkrKykgewogCQlza2JfZnJhZ190ICpmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV07Ci0JCWVudHJ5ID0gTkVYVF9UWChlbnRyeSk7CiAKLQkJcGNpX3VubWFwX3BhZ2UodHAtPnBkZXYsCi0JCQkgICAgICAgZG1hX3VubWFwX2FkZHIoJnRuYXBpLT50eF9idWZmZXJzW2VudHJ5XSwKLQkJCQkJICAgICAgbWFwcGluZyksCisJCWVudHJ5ID0gTkVYVF9UWChlbnRyeSk7CisJCXR4YiA9ICZ0bmFwaS0+dHhfYnVmZmVyc1tlbnRyeV07CisKKwkJcGNpX3VubWFwX3BhZ2UodG5hcGktPnRwLT5wZGV2LAorCQkJICAgICAgIGRtYV91bm1hcF9hZGRyKHR4YiwgbWFwcGluZyksCiAJCQkgICAgICAgZnJhZy0+c2l6ZSwgUENJX0RNQV9UT0RFVklDRSk7CiAJfQorfQorCisvKiBXb3JrYXJvdW5kIDRHQiBhbmQgNDAtYml0IGhhcmR3YXJlIERNQSBidWdzLiAqLworc3RhdGljIGludCB0aWdvbjNfZG1hX2h3YnVnX3dvcmthcm91bmQoc3RydWN0IHRnM19uYXBpICp0bmFwaSwKKwkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICAgdTMyIGJhc2VfZmxhZ3MsIHUzMiBtc3MpCit7CisJc3RydWN0IHRnMyAqdHAgPSB0bmFwaS0+dHA7CisJc3RydWN0IHNrX2J1ZmYgKm5ld19za2I7CisJZG1hX2FkZHJfdCBuZXdfYWRkciA9IDA7CisJdTMyIGVudHJ5ID0gdG5hcGktPnR4X3Byb2Q7CisJaW50IHJldCA9IDA7CisKKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MDEpCisJCW5ld19za2IgPSBza2JfY29weShza2IsIEdGUF9BVE9NSUMpOworCWVsc2UgeworCQlpbnQgbW9yZV9oZWFkcm9vbSA9IDQgLSAoKHVuc2lnbmVkIGxvbmcpc2tiLT5kYXRhICYgMyk7CisKKwkJbmV3X3NrYiA9IHNrYl9jb3B5X2V4cGFuZChza2IsCisJCQkJCSAgc2tiX2hlYWRyb29tKHNrYikgKyBtb3JlX2hlYWRyb29tLAorCQkJCQkgIHNrYl90YWlscm9vbShza2IpLCBHRlBfQVRPTUlDKTsKKwl9CisKKwlpZiAoIW5ld19za2IpIHsKKwkJcmV0ID0gLTE7CisJfSBlbHNlIHsKKwkJLyogTmV3IFNLQiBpcyBndWFyYW50ZWVkIHRvIGJlIGxpbmVhci4gKi8KKwkJbmV3X2FkZHIgPSBwY2lfbWFwX3NpbmdsZSh0cC0+cGRldiwgbmV3X3NrYi0+ZGF0YSwgbmV3X3NrYi0+bGVuLAorCQkJCQkgIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkvKiBNYWtlIHN1cmUgdGhlIG1hcHBpbmcgc3VjY2VlZGVkICovCisJCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IodHAtPnBkZXYsIG5ld19hZGRyKSkgeworCQkJcmV0ID0gLTE7CisJCQlkZXZfa2ZyZWVfc2tiKG5ld19za2IpOworCisJCS8qIE1ha2Ugc3VyZSBuZXcgc2tiIGRvZXMgbm90IGNyb3NzIGFueSA0RyBib3VuZGFyaWVzLgorCQkgKiBEcm9wIHRoZSBwYWNrZXQgaWYgaXQgZG9lcy4KKwkJICovCisJCX0gZWxzZSBpZiAodGczX2ZsYWcodHAsIDRHX0RNQV9CTkRSWV9CVUcpICYmCisJCQkgICB0ZzNfNGdfb3ZlcmZsb3dfdGVzdChuZXdfYWRkciwgbmV3X3NrYi0+bGVuKSkgeworCQkJcGNpX3VubWFwX3NpbmdsZSh0cC0+cGRldiwgbmV3X2FkZHIsIG5ld19za2ItPmxlbiwKKwkJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJcmV0ID0gLTE7CisJCQlkZXZfa2ZyZWVfc2tiKG5ld19za2IpOworCQl9IGVsc2UgeworCQkJdG5hcGktPnR4X2J1ZmZlcnNbZW50cnldLnNrYiA9IG5ld19za2I7CisJCQlkbWFfdW5tYXBfYWRkcl9zZXQoJnRuYXBpLT50eF9idWZmZXJzW2VudHJ5XSwKKwkJCQkJICAgbWFwcGluZywgbmV3X2FkZHIpOworCisJCQl0ZzNfc2V0X3R4ZCh0bmFwaSwgZW50cnksIG5ld19hZGRyLCBuZXdfc2tiLT5sZW4sCisJCQkJICAgIGJhc2VfZmxhZ3MsIDEgfCAobXNzIDw8IDEpKTsKKwkJfQorCX0KIAogCWRldl9rZnJlZV9za2Ioc2tiKTsKLQlyZXR1cm4gTkVUREVWX1RYX09LOworCisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIG5ldGRldl90eF90IHRnM19zdGFydF94bWl0X2RtYV9idWcoc3RydWN0IHNrX2J1ZmYgKiwKLQkJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK3N0YXRpYyBuZXRkZXZfdHhfdCB0ZzNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIAogLyogVXNlIEdTTyB0byB3b3JrYXJvdW5kIGEgcmFyZSBUU08gYnVnIHRoYXQgbWF5IGJlIHRyaWdnZXJlZCB3aGVuIHRoZQogICogVFNPIGhlYWRlciBpcyBncmVhdGVyIHRoYW4gODAgYnl0ZXMuCkBAIC01ODY4LDcgKzU4NzUsNyBAQAogCQluc2tiID0gc2VnczsKIAkJc2VncyA9IHNlZ3MtPm5leHQ7CiAJCW5za2ItPm5leHQgPSBOVUxMOwotCQl0ZzNfc3RhcnRfeG1pdF9kbWFfYnVnKG5za2IsIHRwLT5kZXYpOworCQl0ZzNfc3RhcnRfeG1pdChuc2tiLCB0cC0+ZGV2KTsKIAl9IHdoaWxlIChzZWdzKTsKIAogdGczX3Rzb19idWdfZW5kOgpAQCAtNTg3OCwyMiArNTg4NSwyMSBAQAogfQogCiAvKiBoYXJkX3N0YXJ0X3htaXQgZm9yIGRldmljZXMgdGhhdCBoYXZlIHRoZSA0RyBidWcgYW5kL29yIDQwLWJpdCBidWcgYW5kCi0gKiBzdXBwb3J0IFRHM19GTEcyX0hXX1RTT18xIG9yIGZpcm13YXJlIFRTTyBvbmx5LgorICogc3VwcG9ydCBURzNfRkxBR19IV19UU09fMSBvciBmaXJtd2FyZSBUU08gb25seS4KICAqLwotc3RhdGljIG5ldGRldl90eF90IHRnM19zdGFydF94bWl0X2RtYV9idWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHRnM19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXUzMiBsZW4sIGVudHJ5LCBiYXNlX2ZsYWdzLCBtc3M7Ci0JaW50IHdvdWxkX2hpdF9od2J1ZzsKKwlpbnQgaSA9IC0xLCB3b3VsZF9oaXRfaHdidWc7CiAJZG1hX2FkZHJfdCBtYXBwaW5nOwogCXN0cnVjdCB0ZzNfbmFwaSAqdG5hcGk7CiAJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOwotCXVuc2lnbmVkIGludCBpLCBsYXN0OworCXVuc2lnbmVkIGludCBsYXN0OwogCiAJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKIAl0bmFwaSA9ICZ0cC0+bmFwaVtza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKV07Ci0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX1RTUykKKwlpZiAodGczX2ZsYWcodHAsIEVOQUJMRV9UU1MpKQogCQl0bmFwaSsrOwogCiAJLyogV2UgYXJlIHJ1bm5pbmcgaW4gQkggZGlzYWJsZWQgY29udGV4dCB3aXRoIG5ldGlmX3R4X2xvY2sKQEAgLTU5NDQsMTMgKzU5NTAsMTUgQEAKIAkJfQogCiAJCWlmICh1bmxpa2VseSgoRVRIX0hMRU4gKyBoZHJfbGVuKSA+IDgwKSAmJgotCQkJICAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9UU09fQlVHKSkKKwkJICAgIHRnM19mbGFnKHRwLCBUU09fQlVHKSkKIAkJCXJldHVybiB0ZzNfdHNvX2J1Zyh0cCwgc2tiKTsKIAogCQliYXNlX2ZsYWdzIHw9IChUWERfRkxBR19DUFVfUFJFX0RNQSB8CiAJCQkgICAgICAgVFhEX0ZMQUdfQ1BVX1BPU1RfRE1BKTsKIAotCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9IV19UU08pIHsKKwkJaWYgKHRnM19mbGFnKHRwLCBIV19UU09fMSkgfHwKKwkJICAgIHRnM19mbGFnKHRwLCBIV19UU09fMikgfHwKKwkJICAgIHRnM19mbGFnKHRwLCBIV19UU09fMykpIHsKIAkJCXRjcF9oZHIoc2tiKS0+Y2hlY2sgPSAwOwogCQkJYmFzZV9mbGFncyAmPSB+VFhEX0ZMQUdfVENQVURQX0NTVU07CiAJCX0gZWxzZQpAQCAtNTk1OSwxNCArNTk2NywxNCBAQAogCQkJCQkJCQkgSVBQUk9UT19UQ1AsCiAJCQkJCQkJCSAwKTsKIAotCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9IV19UU09fMykgeworCQlpZiAodGczX2ZsYWcodHAsIEhXX1RTT18zKSkgewogCQkJbXNzIHw9IChoZHJfbGVuICYgMHhjKSA8PCAxMjsKIAkJCWlmIChoZHJfbGVuICYgMHgxMCkKIAkJCQliYXNlX2ZsYWdzIHw9IDB4MDAwMDAwMTA7CiAJCQliYXNlX2ZsYWdzIHw9IChoZHJfbGVuICYgMHgzZTApIDw8IDU7Ci0JCX0gZWxzZSBpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9IV19UU09fMikKKwkJfSBlbHNlIGlmICh0ZzNfZmxhZyh0cCwgSFdfVFNPXzIpKQogCQkJbXNzIHw9IGhkcl9sZW4gPDwgOTsKLQkJZWxzZSBpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfSFdfVFNPXzEpIHx8CisJCWVsc2UgaWYgKHRnM19mbGFnKHRwLCBIV19UU09fMSkgfHwKIAkJCSBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwNSkgewogCQkJaWYgKHRjcF9vcHRfbGVuIHx8IGlwaC0+aWhsID4gNSkgewogCQkJCWludCB0c2ZsYWdzOwpAQCAtNTk4OCw3ICs1OTk2LDcgQEAKIAkJYmFzZV9mbGFncyB8PSAoVFhEX0ZMQUdfVkxBTiB8CiAJCQkgICAgICAgKHZsYW5fdHhfdGFnX2dldChza2IpIDw8IDE2KSk7CiAKLQlpZiAoKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfVVNFX0pVTUJPX0JERkxBRykgJiYKKwlpZiAodGczX2ZsYWcodHAsIFVTRV9KVU1CT19CREZMQUcpICYmCiAJICAgICFtc3MgJiYgc2tiLT5sZW4gPiBWTEFOX0VUSF9GUkFNRV9MRU4pCiAJCWJhc2VfZmxhZ3MgfD0gVFhEX0ZMQUdfSk1CX1BLVDsKIApAQCAtNjAwNSwxOCArNjAxMywxOCBAQAogCiAJd291bGRfaGl0X2h3YnVnID0gMDsKIAotCWlmICgodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19TSE9SVF9ETUFfQlVHKSAmJiBsZW4gPD0gOCkKKwlpZiAodGczX2ZsYWcodHAsIFNIT1JUX0RNQV9CVUcpICYmIGxlbiA8PSA4KQogCQl3b3VsZF9oaXRfaHdidWcgPSAxOwogCi0JaWYgKCh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzRHX0RNQV9CTkRSWV9CVUcpICYmCisJaWYgKHRnM19mbGFnKHRwLCA0R19ETUFfQk5EUllfQlVHKSAmJgogCSAgICB0ZzNfNGdfb3ZlcmZsb3dfdGVzdChtYXBwaW5nLCBsZW4pKQogCQl3b3VsZF9oaXRfaHdidWcgPSAxOwogCi0JaWYgKCh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzQwQklUX0RNQV9MSU1JVF9CVUcpICYmCisJaWYgKHRnM19mbGFnKHRwLCA0MEJJVF9ETUFfTElNSVRfQlVHKSAmJgogCSAgICB0ZzNfNDBiaXRfb3ZlcmZsb3dfdGVzdCh0cCwgbWFwcGluZywgbGVuKSkKIAkJd291bGRfaGl0X2h3YnVnID0gMTsKIAotCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3MDFfRE1BX0JVRykKKwlpZiAodGczX2ZsYWcodHAsIDU3MDFfRE1BX0JVRykpCiAJCXdvdWxkX2hpdF9od2J1ZyA9IDE7CiAKIAl0ZzNfc2V0X3R4ZCh0bmFwaSwgZW50cnksIG1hcHBpbmcsIGxlbiwgYmFzZV9mbGFncywKQEAgLTYwNDIsMTkgKzYwNTAsMjEgQEAKIAkJCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IodHAtPnBkZXYsIG1hcHBpbmcpKQogCQkJCWdvdG8gZG1hX2Vycm9yOwogCi0JCQlpZiAoKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfU0hPUlRfRE1BX0JVRykgJiYKKwkJCWlmICh0ZzNfZmxhZyh0cCwgU0hPUlRfRE1BX0JVRykgJiYKIAkJCSAgICBsZW4gPD0gOCkKIAkJCQl3b3VsZF9oaXRfaHdidWcgPSAxOwogCi0JCQlpZiAoKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNEdfRE1BX0JORFJZX0JVRykgJiYKKwkJCWlmICh0ZzNfZmxhZyh0cCwgNEdfRE1BX0JORFJZX0JVRykgJiYKIAkJCSAgICB0ZzNfNGdfb3ZlcmZsb3dfdGVzdChtYXBwaW5nLCBsZW4pKQogCQkJCXdvdWxkX2hpdF9od2J1ZyA9IDE7CiAKLQkJCWlmICgodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM180MEJJVF9ETUFfTElNSVRfQlVHKSAmJgorCQkJaWYgKHRnM19mbGFnKHRwLCA0MEJJVF9ETUFfTElNSVRfQlVHKSAmJgogCQkJICAgIHRnM180MGJpdF9vdmVyZmxvd190ZXN0KHRwLCBtYXBwaW5nLCBsZW4pKQogCQkJCXdvdWxkX2hpdF9od2J1ZyA9IDE7CiAKLQkJCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0hXX1RTTykKKwkJCWlmICh0ZzNfZmxhZyh0cCwgSFdfVFNPXzEpIHx8CisJCQkgICAgdGczX2ZsYWcodHAsIEhXX1RTT18yKSB8fAorCQkJICAgIHRnM19mbGFnKHRwLCBIV19UU09fMykpCiAJCQkJdGczX3NldF90eGQodG5hcGksIGVudHJ5LCBtYXBwaW5nLCBsZW4sCiAJCQkJCSAgICBiYXNlX2ZsYWdzLCAoaSA9PSBsYXN0KXwobXNzIDw8IDEpKTsKIAkJCWVsc2UKQEAgLTYwNjYsMjAgKzYwNzYsMTUgQEAKIAl9CiAKIAlpZiAod291bGRfaGl0X2h3YnVnKSB7Ci0JCXUzMiBsYXN0X3BsdXNfb25lID0gZW50cnk7Ci0JCXUzMiBzdGFydDsKLQotCQlzdGFydCA9IGVudHJ5IC0gMSAtIHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7Ci0JCXN0YXJ0ICY9IChURzNfVFhfUklOR19TSVpFIC0gMSk7CisJCXRnM19za2JfZXJyb3JfdW5tYXAodG5hcGksIHNrYiwgaSk7CiAKIAkJLyogSWYgdGhlIHdvcmthcm91bmQgZmFpbHMgZHVlIHRvIG1lbW9yeS9tYXBwaW5nCiAJCSAqIGZhaWx1cmUsIHNpbGVudGx5IGRyb3AgdGhpcyBwYWNrZXQuCiAJCSAqLwotCQlpZiAodGlnb24zX2RtYV9od2J1Z193b3JrYXJvdW5kKHRuYXBpLCBza2IsIGxhc3RfcGx1c19vbmUsCi0JCQkJCQkmc3RhcnQsIGJhc2VfZmxhZ3MsIG1zcykpCisJCWlmICh0aWdvbjNfZG1hX2h3YnVnX3dvcmthcm91bmQodG5hcGksIHNrYiwgYmFzZV9mbGFncywgbXNzKSkKIAkJCWdvdG8gb3V0X3VubG9jazsKIAotCQllbnRyeSA9IHN0YXJ0OworCQllbnRyeSA9IE5FWFRfVFgodG5hcGktPnR4X3Byb2QpOwogCX0KIAogCS8qIFBhY2tldHMgYXJlIHJlYWR5LCB1cGRhdGUgVHggcHJvZHVjZXIgaWR4IGxvY2FsIGFuZCBvbiBjYXJkLiAqLwpAQCAtNjEwNSw0MyArNjExMCw4NiBAQAogCXJldHVybiBORVRERVZfVFhfT0s7CiAKIGRtYV9lcnJvcjoKLQlsYXN0ID0gaTsKLQllbnRyeSA9IHRuYXBpLT50eF9wcm9kOwotCXRuYXBpLT50eF9idWZmZXJzW2VudHJ5XS5za2IgPSBOVUxMOwotCXBjaV91bm1hcF9zaW5nbGUodHAtPnBkZXYsCi0JCQkgZG1hX3VubWFwX2FkZHIoJnRuYXBpLT50eF9idWZmZXJzW2VudHJ5XSwgbWFwcGluZyksCi0JCQkgc2tiX2hlYWRsZW4oc2tiKSwKLQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKLQlmb3IgKGkgPSAwOyBpIDw9IGxhc3Q7IGkrKykgewotCQlza2JfZnJhZ190ICpmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV07Ci0JCWVudHJ5ID0gTkVYVF9UWChlbnRyeSk7Ci0KLQkJcGNpX3VubWFwX3BhZ2UodHAtPnBkZXYsCi0JCQkgICAgICAgZG1hX3VubWFwX2FkZHIoJnRuYXBpLT50eF9idWZmZXJzW2VudHJ5XSwKLQkJCQkJICAgICAgbWFwcGluZyksCi0JCQkgICAgICAgZnJhZy0+c2l6ZSwgUENJX0RNQV9UT0RFVklDRSk7Ci0JfQotCisJdGczX3NrYl9lcnJvcl91bm1hcCh0bmFwaSwgc2tiLCBpKTsKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CisJdG5hcGktPnR4X2J1ZmZlcnNbdG5hcGktPnR4X3Byb2RdLnNrYiA9IE5VTEw7CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAorc3RhdGljIHZvaWQgdGczX3NldF9sb29wYmFjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmVhdHVyZXMpCit7CisJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKGZlYXR1cmVzICYgTkVUSUZfRl9MT09QQkFDSykgeworCQlpZiAodHAtPm1hY19tb2RlICYgTUFDX01PREVfUE9SVF9JTlRfTFBCQUNLKQorCQkJcmV0dXJuOworCisJCS8qCisJCSAqIENsZWFyIE1BQ19NT0RFX0hBTEZfRFVQTEVYIG9yIHlvdSB3b24ndCBnZXQgcGFja2V0cyBiYWNrIGluCisJCSAqIGxvb3BiYWNrIG1vZGUgaWYgSGFsZi1EdXBsZXggbW9kZSB3YXMgbmVnb3RpYXRlZCBlYXJsaWVyLgorCQkgKi8KKwkJdHAtPm1hY19tb2RlICY9IH5NQUNfTU9ERV9IQUxGX0RVUExFWDsKKworCQkvKiBFbmFibGUgaW50ZXJuYWwgTUFDIGxvb3BiYWNrIG1vZGUgKi8KKwkJdHAtPm1hY19tb2RlIHw9IE1BQ19NT0RFX1BPUlRfSU5UX0xQQkFDSzsKKwkJc3Bpbl9sb2NrX2JoKCZ0cC0+bG9jayk7CisJCXR3MzIoTUFDX01PREUsIHRwLT5tYWNfbW9kZSk7CisJCW5ldGlmX2NhcnJpZXJfb24odHAtPmRldik7CisJCXNwaW5fdW5sb2NrX2JoKCZ0cC0+bG9jayk7CisJCW5ldGRldl9pbmZvKGRldiwgIkludGVybmFsIE1BQyBsb29wYmFjayBtb2RlIGVuYWJsZWQuXG4iKTsKKwl9IGVsc2UgeworCQlpZiAoISh0cC0+bWFjX21vZGUgJiBNQUNfTU9ERV9QT1JUX0lOVF9MUEJBQ0spKQorCQkJcmV0dXJuOworCisJCS8qIERpc2FibGUgaW50ZXJuYWwgTUFDIGxvb3BiYWNrIG1vZGUgKi8KKwkJdHAtPm1hY19tb2RlICY9IH5NQUNfTU9ERV9QT1JUX0lOVF9MUEJBQ0s7CisJCXNwaW5fbG9ja19iaCgmdHAtPmxvY2spOworCQl0dzMyKE1BQ19NT0RFLCB0cC0+bWFjX21vZGUpOworCQkvKiBGb3JjZSBsaW5rIHN0YXR1cyBjaGVjayAqLworCQl0ZzNfc2V0dXBfcGh5KHRwLCAxKTsKKwkJc3Bpbl91bmxvY2tfYmgoJnRwLT5sb2NrKTsKKwkJbmV0ZGV2X2luZm8oZGV2LCAiSW50ZXJuYWwgTUFDIGxvb3BiYWNrIG1vZGUgZGlzYWJsZWQuXG4iKTsKKwl9Cit9CisKK3N0YXRpYyB1MzIgdGczX2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmVhdHVyZXMpCit7CisJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKGRldi0+bXR1ID4gRVRIX0RBVEFfTEVOICYmIHRnM19mbGFnKHRwLCA1NzgwX0NMQVNTKSkKKwkJZmVhdHVyZXMgJj0gfk5FVElGX0ZfQUxMX1RTTzsKKworCXJldHVybiBmZWF0dXJlczsKK30KKworc3RhdGljIGludCB0ZzNfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcykKK3sKKwl1MzIgY2hhbmdlZCA9IGRldi0+ZmVhdHVyZXMgXiBmZWF0dXJlczsKKworCWlmICgoY2hhbmdlZCAmIE5FVElGX0ZfTE9PUEJBQ0spICYmIG5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJdGczX3NldF9sb29wYmFjayhkZXYsIGZlYXR1cmVzKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgdGczX3NldF9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHRnMyAqdHAsCiAJCQkgICAgICAgaW50IG5ld19tdHUpCiB7CiAJZGV2LT5tdHUgPSBuZXdfbXR1OwogCiAJaWYgKG5ld19tdHUgPiBFVEhfREFUQV9MRU4pIHsKLQkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc4MF9DTEFTUykgewotCQkJdHAtPnRnM19mbGFnczIgJj0gflRHM19GTEcyX1RTT19DQVBBQkxFOwotCQkJZXRodG9vbF9vcF9zZXRfdHNvKGRldiwgMCk7CisJCWlmICh0ZzNfZmxhZyh0cCwgNTc4MF9DTEFTUykpIHsKKwkJCW5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTsKKwkJCXRnM19mbGFnX2NsZWFyKHRwLCBUU09fQ0FQQUJMRSk7CiAJCX0gZWxzZSB7Ci0JCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0pVTUJPX1JJTkdfRU5BQkxFOworCQkJdGczX2ZsYWdfc2V0KHRwLCBKVU1CT19SSU5HX0VOQUJMRSk7CiAJCX0KIAl9IGVsc2UgewotCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzgwX0NMQVNTKQotCQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfVFNPX0NBUEFCTEU7Ci0JCXRwLT50ZzNfZmxhZ3MgJj0gflRHM19GTEFHX0pVTUJPX1JJTkdfRU5BQkxFOworCQlpZiAodGczX2ZsYWcodHAsIDU3ODBfQ0xBU1MpKSB7CisJCQl0ZzNfZmxhZ19zZXQodHAsIFRTT19DQVBBQkxFKTsKKwkJCW5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTsKKwkJfQorCQl0ZzNfZmxhZ19jbGVhcih0cCwgSlVNQk9fUklOR19FTkFCTEUpOwogCX0KIH0KIApAQCAtNjE5NSw3ICs2MjQzLDcgQEAKIAkJCXRnM19yeF9za2JfZnJlZSh0cCwgJnRwci0+cnhfc3RkX2J1ZmZlcnNbaV0sCiAJCQkJCXRwLT5yeF9wa3RfbWFwX3N6KTsKIAotCQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0pVTUJPX0NBUEFCTEUpIHsKKwkJaWYgKHRnM19mbGFnKHRwLCBKVU1CT19DQVBBQkxFKSkgewogCQkJZm9yIChpID0gdHByLT5yeF9qbWJfY29uc19pZHg7CiAJCQkgICAgIGkgIT0gdHByLT5yeF9qbWJfcHJvZF9pZHg7CiAJCQkgICAgIGkgPSAoaSArIDEpICYgdHAtPnJ4X2ptYl9yaW5nX21hc2spIHsKQEAgLTYyMTEsOCArNjI1OSw3IEBACiAJCXRnM19yeF9za2JfZnJlZSh0cCwgJnRwci0+cnhfc3RkX2J1ZmZlcnNbaV0sCiAJCQkJdHAtPnJ4X3BrdF9tYXBfc3opOwogCi0JaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfSlVNQk9fQ0FQQUJMRSkgJiYKLQkgICAgISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3ODBfQ0xBU1MpKSB7CisJaWYgKHRnM19mbGFnKHRwLCBKVU1CT19DQVBBQkxFKSAmJiAhdGczX2ZsYWcodHAsIDU3ODBfQ0xBU1MpKSB7CiAJCWZvciAoaSA9IDA7IGkgPD0gdHAtPnJ4X2ptYl9yaW5nX21hc2s7IGkrKykKIAkJCXRnM19yeF9za2JfZnJlZSh0cCwgJnRwci0+cnhfam1iX2J1ZmZlcnNbaV0sCiAJCQkJCVRHM19SWF9KTUJfTUFQX1NaKTsKQEAgLTYyNDksNyArNjI5Niw3IEBACiAJbWVtc2V0KHRwci0+cnhfc3RkLCAwLCBURzNfUlhfU1REX1JJTkdfQllURVModHApKTsKIAogCXJ4X3BrdF9kbWFfc3ogPSBURzNfUlhfU1REX0RNQV9TWjsKLQlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc4MF9DTEFTUykgJiYKKwlpZiAodGczX2ZsYWcodHAsIDU3ODBfQ0xBU1MpICYmCiAJICAgIHRwLT5kZXYtPm10dSA+IEVUSF9EQVRBX0xFTikKIAkJcnhfcGt0X2RtYV9zeiA9IFRHM19SWF9KTUJfRE1BX1NaOwogCXRwLT5yeF9wa3RfbWFwX3N6ID0gVEczX1JYX0RNQV9UT19NQVBfU1oocnhfcGt0X2RtYV9zeik7CkBAIC02MjgyLDEzICs2MzI5LDEyIEBACiAJCX0KIAl9CiAKLQlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfSlVNQk9fQ0FQQUJMRSkgfHwKLQkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc4MF9DTEFTUykpCisJaWYgKCF0ZzNfZmxhZyh0cCwgSlVNQk9fQ0FQQUJMRSkgfHwgdGczX2ZsYWcodHAsIDU3ODBfQ0xBU1MpKQogCQlnb3RvIGRvbmU7CiAKIAltZW1zZXQodHByLT5yeF9qbWIsIDAsIFRHM19SWF9KTUJfUklOR19CWVRFUyh0cCkpOwogCi0JaWYgKCEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0pVTUJPX1JJTkdfRU5BQkxFKSkKKwlpZiAoIXRnM19mbGFnKHRwLCBKVU1CT19SSU5HX0VOQUJMRSkpCiAJCWdvdG8gZG9uZTsKIAogCWZvciAoaSA9IDA7IGkgPD0gdHAtPnJ4X2ptYl9yaW5nX21hc2s7IGkrKykgewpAQCAtNjM1Nyw4ICs2NDAzLDcgQEAKIAlpZiAoIXRwci0+cnhfc3RkKQogCQlnb3RvIGVycl9vdXQ7CiAKLQlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19KVU1CT19DQVBBQkxFKSAmJgotCSAgICAhKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc4MF9DTEFTUykpIHsKKwlpZiAodGczX2ZsYWcodHAsIEpVTUJPX0NBUEFCTEUpICYmICF0ZzNfZmxhZyh0cCwgNTc4MF9DTEFTUykpIHsKIAkJdHByLT5yeF9qbWJfYnVmZmVycyA9IGt6YWxsb2MoVEczX1JYX0pNQl9CVUZGX1JJTkdfU0laRSh0cCksCiAJCQkJCSAgICAgIEdGUF9LRVJORUwpOwogCQlpZiAoIXRwci0+cnhfam1iX2J1ZmZlcnMpCkBAIC02NTU2LDggKzY2MDEsOCBAQAogCQkvKiBJZiBtdWx0aXZlY3RvciBUU1MgaXMgZW5hYmxlZCwgdmVjdG9yIDAgZG9lcyBub3QgaGFuZGxlCiAJCSAqIHR4IGludGVycnVwdHMuICBEb24ndCBhbGxvY2F0ZSBhbnkgcmVzb3VyY2VzIGZvciBpdC4KIAkJICovCi0JCWlmICgoIWkgJiYgISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9UU1MpKSB8fAotCQkgICAgKGkgJiYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX1RTUykpKSB7CisJCWlmICgoIWkgJiYgIXRnM19mbGFnKHRwLCBFTkFCTEVfVFNTKSkgfHwKKwkJICAgIChpICYmIHRnM19mbGFnKHRwLCBFTkFCTEVfVFNTKSkpIHsKIAkJCXRuYXBpLT50eF9idWZmZXJzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJpbmdfaW5mbykgKgogCQkJCQkJICAgIFRHM19UWF9SSU5HX1NJWkUsCiAJCQkJCQkgICAgR0ZQX0tFUk5FTCk7CkBAIC02NTk3LDcgKzY2NDIsNyBAQAogCQkgKiBJZiBtdWx0aXZlY3RvciBSU1MgaXMgZW5hYmxlZCwgdmVjdG9yIDAgZG9lcyBub3QgaGFuZGxlCiAJCSAqIHJ4IG9yIHR4IGludGVycnVwdHMuICBEb24ndCBhbGxvY2F0ZSBhbnkgcmVzb3VyY2VzIGZvciBpdC4KIAkJICovCi0JCWlmICghaSAmJiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfUlNTKSkKKwkJaWYgKCFpICYmIHRnM19mbGFnKHRwLCBFTkFCTEVfUlNTKSkKIAkJCWNvbnRpbnVlOwogCiAJCXRuYXBpLT5yeF9yY2IgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnRwLT5wZGV2LT5kZXYsCkBAIC02NjI3LDcgKzY2NzIsNyBAQAogCXVuc2lnbmVkIGludCBpOwogCXUzMiB2YWw7CiAKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpIHsKKwlpZiAodGczX2ZsYWcodHAsIDU3MDVfUExVUykpIHsKIAkJc3dpdGNoIChvZnMpIHsKIAkJY2FzZSBSQ1ZMU0NfTU9ERToKIAkJY2FzZSBETUFDX01PREU6CkBAIC02NzM3LDcgKzY3ODIsNyBAQAogCXUzMiBhcGVkYXRhOwogCiAJLyogTkNTSSBkb2VzIG5vdCBzdXBwb3J0IEFQRSBldmVudHMgKi8KLQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19BUEVfSEFTX05DU0kpCisJaWYgKHRnM19mbGFnKHRwLCBBUEVfSEFTX05DU0kpKQogCQlyZXR1cm47CiAKIAlhcGVkYXRhID0gdGczX2FwZV9yZWFkMzIodHAsIFRHM19BUEVfU0VHX1NJRyk7CkBAIC02Nzc2LDcgKzY4MjEsNyBAQAogCXUzMiBldmVudDsKIAl1MzIgYXBlZGF0YTsKIAotCWlmICghKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX0FQRSkpCisJaWYgKCF0ZzNfZmxhZyh0cCwgRU5BQkxFX0FQRSkpCiAJCXJldHVybjsKIAogCXN3aXRjaCAoa2luZCkgewpAQCAtNjgwNSw3ICs2ODUwLDcgQEAKIAkJdGczX2FwZV93cml0ZTMyKHRwLCBURzNfQVBFX0hPU1RfU0VHX1NJRywgMHgwKTsKIAogCQlpZiAoZGV2aWNlX21heV93YWtldXAoJnRwLT5wZGV2LT5kZXYpICYmCi0JCSAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1dPTF9FTkFCTEUpKSB7CisJCSAgICB0ZzNfZmxhZyh0cCwgV09MX0VOQUJMRSkpIHsKIAkJCXRnM19hcGVfd3JpdGUzMih0cCwgVEczX0FQRV9IT1NUX1dPTF9TUEVFRCwKIAkJCQkJICAgIFRHM19BUEVfSE9TVF9XT0xfU1BFRURfQVVUTyk7CiAJCQlhcGVkYXRhID0gVEczX0FQRV9IT1NUX0RSVlJfU1RBVEVfV09MOwpAQCAtNjgzNCw3ICs2ODc5LDcgQEAKIAl0ZzNfd3JpdGVfbWVtKHRwLCBOSUNfU1JBTV9GSVJNV0FSRV9NQk9YLAogCQkgICAgICBOSUNfU1JBTV9GSVJNV0FSRV9NQk9YX01BR0lDMSk7CiAKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9BU0ZfTkVXX0hBTkRTSEFLRSkgeworCWlmICh0ZzNfZmxhZyh0cCwgQVNGX05FV19IQU5EU0hBS0UpKSB7CiAJCXN3aXRjaCAoa2luZCkgewogCQljYXNlIFJFU0VUX0tJTkRfSU5JVDoKIAkJCXRnM193cml0ZV9tZW0odHAsIE5JQ19TUkFNX0ZXX0RSVl9TVEFURV9NQk9YLApAQCAtNjg2NCw3ICs2OTA5LDcgQEAKIC8qIHRwLT5sb2NrIGlzIGhlbGQuICovCiBzdGF0aWMgdm9pZCB0ZzNfd3JpdGVfc2lnX3Bvc3RfcmVzZXQoc3RydWN0IHRnMyAqdHAsIGludCBraW5kKQogewotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0FTRl9ORVdfSEFORFNIQUtFKSB7CisJaWYgKHRnM19mbGFnKHRwLCBBU0ZfTkVXX0hBTkRTSEFLRSkpIHsKIAkJc3dpdGNoIChraW5kKSB7CiAJCWNhc2UgUkVTRVRfS0lORF9JTklUOgogCQkJdGczX3dyaXRlX21lbSh0cCwgTklDX1NSQU1fRldfRFJWX1NUQVRFX01CT1gsCkBAIC02ODg4LDcgKzY5MzMsNyBAQAogLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KIHN0YXRpYyB2b2lkIHRnM193cml0ZV9zaWdfbGVnYWN5KHN0cnVjdCB0ZzMgKnRwLCBpbnQga2luZCkKIHsKLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0VOQUJMRV9BU0YpIHsKKwlpZiAodGczX2ZsYWcodHAsIEVOQUJMRV9BU0YpKSB7CiAJCXN3aXRjaCAoa2luZCkgewogCQljYXNlIFJFU0VUX0tJTkRfSU5JVDoKIAkJCXRnM193cml0ZV9tZW0odHAsIE5JQ19TUkFNX0ZXX0RSVl9TVEFURV9NQk9YLApAQCAtNjkzOSw5ICs2OTg0LDggQEAKIAkgKiBvZiB0aGUgYWJvdmUgbG9vcCBhcyBhbiBlcnJvciwgYnV0IGRvIHJlcG9ydCB0aGUgbGFjayBvZgogCSAqIHJ1bm5pbmcgZmlybXdhcmUgb25jZS4KIAkgKi8KLQlpZiAoaSA+PSAxMDAwMDAgJiYKLQkgICAgISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX05PX0ZXQVJFX1JFUE9SVEVEKSkgewotCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9OT19GV0FSRV9SRVBPUlRFRDsKKwlpZiAoaSA+PSAxMDAwMDAgJiYgIXRnM19mbGFnKHRwLCBOT19GV0FSRV9SRVBPUlRFRCkpIHsKKwkJdGczX2ZsYWdfc2V0KHRwLCBOT19GV0FSRV9SRVBPUlRFRCk7CiAKIAkJbmV0ZGV2X2luZm8odHAtPmRldiwgIk5vIGZpcm13YXJlIHJ1bm5pbmdcbiIpOwogCX0KQEAgLTY5NzQsMTAgKzcwMTgsMTAgQEAKIAkvKiBTZXQgTUFYIFBDSSByZXRyeSB0byB6ZXJvLiAqLwogCXZhbCA9IChQQ0lTVEFURV9ST01fRU5BQkxFIHwgUENJU1RBVEVfUk9NX1JFVFJZX0VOQUJMRSk7CiAJaWYgKHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81NzA0X0EwICYmCi0JICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfUENJWF9NT0RFKSkKKwkgICAgdGczX2ZsYWcodHAsIFBDSVhfTU9ERSkpCiAJCXZhbCB8PSBQQ0lTVEFURV9SRVRSWV9TQU1FX0RNQTsKIAkvKiBBbGxvdyByZWFkcyBhbmQgd3JpdGVzIHRvIHRoZSBBUEUgcmVnaXN0ZXIgYW5kIG1lbW9yeSBzcGFjZS4gKi8KLQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfQVBFKQorCWlmICh0ZzNfZmxhZyh0cCwgRU5BQkxFX0FQRSkpCiAJCXZhbCB8PSBQQ0lTVEFURV9BTExPV19BUEVfQ1RMU1BDX1dSIHwKIAkJICAgICAgIFBDSVNUQVRFX0FMTE9XX0FQRV9TSE1FTV9XUiB8CiAJCSAgICAgICBQQ0lTVEFURV9BTExPV19BUEVfUFNQQUNFX1dSOwpAQCAtNjk4Niw3ICs3MDMwLDcgQEAKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQodHAtPnBkZXYsIFBDSV9DT01NQU5ELCB0cC0+cGNpX2NtZCk7CiAKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3ODUpIHsKLQkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUENJX0VYUFJFU1MpCisJCWlmICh0ZzNfZmxhZyh0cCwgUENJX0VYUFJFU1MpKQogCQkJcGNpZV9zZXRfcmVhZHJxKHRwLT5wZGV2LCB0cC0+cGNpZV9yZWFkcnEpOwogCQllbHNlIHsKIAkJCXBjaV93cml0ZV9jb25maWdfYnl0ZSh0cC0+cGRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwKQEAgLTY5OTcsNyArNzA0MSw3IEBACiAJfQogCiAJLyogTWFrZSBzdXJlIFBDSS1YIHJlbGF4ZWQgb3JkZXJpbmcgYml0IGlzIGNsZWFyLiAqLwotCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfUENJWF9NT0RFKSB7CisJaWYgKHRnM19mbGFnKHRwLCBQQ0lYX01PREUpKSB7CiAJCXUxNiBwY2l4X2NtZDsKIAogCQlwY2lfcmVhZF9jb25maWdfd29yZCh0cC0+cGRldiwgdHAtPnBjaXhfY2FwICsgUENJX1hfQ01ELApAQCAtNzAwNywxMiArNzA1MSwxMiBAQAogCQkJCSAgICAgIHBjaXhfY21kKTsKIAl9CiAKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzgwX0NMQVNTKSB7CisJaWYgKHRnM19mbGFnKHRwLCA1NzgwX0NMQVNTKSkgewogCiAJCS8qIENoaXAgcmVzZXQgb24gNTc4MCB3aWxsIHJlc2V0IE1TSSBlbmFibGUgYml0LAogCQkgKiBzbyBuZWVkIHRvIHJlc3RvcmUgaXQuCiAJCSAqLwotCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9VU0lOR19NU0kpIHsKKwkJaWYgKHRnM19mbGFnKHRwLCBVU0lOR19NU0kpKSB7CiAJCQl1MTYgY3RybDsKIAogCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQodHAtPnBkZXYsCkBAIC03MDUyLDcgKzcwOTYsNyBAQAogCXRnM19zYXZlX3BjaV9zdGF0ZSh0cCk7CiAKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTIgfHwKLQkgICAgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTc1NV9QTFVTKSkKKwkgICAgdGczX2ZsYWcodHAsIDU3NTVfUExVUykpCiAJCXR3MzIoR1JDX0ZBU1RCT09UX1BDLCAwKTsKIAogCS8qCkBAIC03MDcxLDcgKzcxMTUsNyBAQAogCSAqIGF0IHRoaXMgdGltZSwgYnV0IHRoZSBpcnEgaGFuZGxlciBtYXkgc3RpbGwgYmUgY2FsbGVkIGR1ZSB0byBpcnEKIAkgKiBzaGFyaW5nIG9yIGlycXBvbGwuCiAJICovCi0JdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19DSElQX1JFU0VUVElORzsKKwl0ZzNfZmxhZ19zZXQodHAsIENISVBfUkVTRVRUSU5HKTsKIAlmb3IgKGkgPSAwOyBpIDwgdHAtPmlycV9jbnQ7IGkrKykgewogCQlzdHJ1Y3QgdGczX25hcGkgKnRuYXBpID0gJnRwLT5uYXBpW2ldOwogCQlpZiAodG5hcGktPmh3X3N0YXR1cykgewpAQCAtNzA5NCwxMCArNzEzOCwxMCBAQAogCS8qIGRvIHRoZSByZXNldCAqLwogCXZhbCA9IEdSQ19NSVNDX0NGR19DT1JFQ0xLX1JFU0VUOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUENJX0VYUFJFU1MpIHsKKwlpZiAodGczX2ZsYWcodHAsIFBDSV9FWFBSRVNTKSkgewogCQkvKiBGb3JjZSBQQ0llIDEuMGEgbW9kZSAqLwogCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3ODUgJiYKLQkJICAgICEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM181NzE3X1BMVVMpICYmCisJCSAgICAhdGczX2ZsYWcodHAsIDU3NzY1X1BMVVMpICYmCiAJCSAgICB0cjMyKFRHM19QQ0lFX1BIWV9UU1RDVEwpID09CiAJCSAgICAoVEczX1BDSUVfUEhZX1RTVENUTF9QQ0lFMTAgfCBURzNfUENJRV9QSFlfVFNUQ1RMX1BTQ1JBTSkpCiAJCQl0dzMyKFRHM19QQ0lFX1BIWV9UU1RDVEwsIFRHM19QQ0lFX1BIWV9UU1RDVExfUFNDUkFNKTsKQEAgLTcxMTUsOCArNzE1OSw3IEBACiAJfQogCiAJLyogTWFuYWdlIGdwaHkgcG93ZXIgZm9yIGFsbCBDUE1VIGFic2VudCBQQ0llIGRldmljZXMuICovCi0JaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykgJiYKLQkgICAgISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfQ1BNVV9QUkVTRU5UKSkKKwlpZiAodGczX2ZsYWcodHAsIDU3MDVfUExVUykgJiYgIXRnM19mbGFnKHRwLCBDUE1VX1BSRVNFTlQpKQogCQl2YWwgfD0gR1JDX01JU0NfQ0ZHX0tFRVBfR1BIWV9QT1dFUjsKIAogCXR3MzIoR1JDX01JU0NfQ0ZHLCB2YWwpOwpAQCAtNzE0OSw3ICs3MTkyLDcgQEAKIAogCXVkZWxheSgxMjApOwogCi0JaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BDSV9FWFBSRVNTKSAmJiB0cC0+cGNpZV9jYXApIHsKKwlpZiAodGczX2ZsYWcodHAsIFBDSV9FWFBSRVNTKSAmJiB0cC0+cGNpZV9jYXApIHsKIAkJdTE2IHZhbDE2OwogCiAJCWlmICh0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTc1MF9BMCkgewpAQCAtNzE3NSw3ICs3MjE4LDcgQEAKIAkJICogT2xkZXIgUENJZSBkZXZpY2VzIG9ubHkgc3VwcG9ydCB0aGUgMTI4IGJ5dGUKIAkJICogTVBTIHNldHRpbmcuICBFbmZvcmNlIHRoZSByZXN0cmljdGlvbi4KIAkJICovCi0JCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19DUE1VX1BSRVNFTlQpKQorCQlpZiAoIXRnM19mbGFnKHRwLCBDUE1VX1BSRVNFTlQpKQogCQkJdmFsMTYgJj0gflBDSV9FWFBfREVWQ1RMX1BBWUxPQUQ7CiAJCXBjaV93cml0ZV9jb25maWdfd29yZCh0cC0+cGRldiwKIAkJCQkgICAgICB0cC0+cGNpZV9jYXAgKyBQQ0lfRVhQX0RFVkNUTCwKQEAgLTcxOTQsMTAgKzcyMzcsMTEgQEAKIAogCXRnM19yZXN0b3JlX3BjaV9zdGF0ZSh0cCk7CiAKLQl0cC0+dGczX2ZsYWdzICY9IH5URzNfRkxBR19DSElQX1JFU0VUVElORzsKKwl0ZzNfZmxhZ19jbGVhcih0cCwgQ0hJUF9SRVNFVFRJTkcpOworCXRnM19mbGFnX2NsZWFyKHRwLCBFUlJPUl9QUk9DRVNTRUQpOwogCiAJdmFsID0gMDsKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzgwX0NMQVNTKQorCWlmICh0ZzNfZmxhZyh0cCwgNTc4MF9DTEFTUykpCiAJCXZhbCA9IHRyMzIoTUVNQVJCX01PREUpOwogCXR3MzIoTUVNQVJCX01PREUsIHZhbCB8IE1FTUFSQl9NT0RFX0VOQUJMRSk7CiAKQEAgLTcyMjIsNyArNzI2Niw3IEBACiAJCXR3MzIoVEczUENJX0NMT0NLX0NUUkwsIHRwLT5wY2lfY2xvY2tfY3RybCk7CiAJfQogCi0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX0FQRSkKKwlpZiAodGczX2ZsYWcodHAsIEVOQUJMRV9BUEUpKQogCQl0cC0+bWFjX21vZGUgPSBNQUNfTU9ERV9BUEVfVFhfRU4gfAogCQkJICAgICAgIE1BQ19NT0RFX0FQRV9SWF9FTiB8CiAJCQkgICAgICAgTUFDX01PREVfVERFX0VOQUJMRTsKQEAgLTcyNDcsMjggKzcyOTEsMzMgQEAKIAogCXRnM19tZGlvX3N0YXJ0KHRwKTsKIAotCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QQ0lfRVhQUkVTUykgJiYKKwlpZiAodGczX2ZsYWcodHAsIFBDSV9FWFBSRVNTKSAmJgogCSAgICB0cC0+cGNpX2NoaXBfcmV2X2lkICE9IENISVBSRVZfSURfNTc1MF9BMCAmJgogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTc4NSAmJgotCSAgICAhKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTcxN19QTFVTKSkgeworCSAgICAhdGczX2ZsYWcodHAsIDU3NzY1X1BMVVMpKSB7CiAJCXZhbCA9IHRyMzIoMHg3YzAwKTsKIAogCQl0dzMyKDB4N2MwMCwgdmFsIHwgKDEgPDwgMjUpKTsKIAl9CiAKKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MjApIHsKKwkJdmFsID0gdHIzMihURzNfQ1BNVV9DTENLX09SSURFKTsKKwkJdHczMihURzNfQ1BNVV9DTENLX09SSURFLCB2YWwgJiB+Q1BNVV9DTENLX09SSURFX01BQ19PUklERV9FTik7CisJfQorCiAJLyogUmVwcm9iZSBBU0YgZW5hYmxlIHN0YXRlLiAgKi8KLQl0cC0+dGczX2ZsYWdzICY9IH5URzNfRkxBR19FTkFCTEVfQVNGOwotCXRwLT50ZzNfZmxhZ3MyICY9IH5URzNfRkxHMl9BU0ZfTkVXX0hBTkRTSEFLRTsKKwl0ZzNfZmxhZ19jbGVhcih0cCwgRU5BQkxFX0FTRik7CisJdGczX2ZsYWdfY2xlYXIodHAsIEFTRl9ORVdfSEFORFNIQUtFKTsKIAl0ZzNfcmVhZF9tZW0odHAsIE5JQ19TUkFNX0RBVEFfU0lHLCAmdmFsKTsKIAlpZiAodmFsID09IE5JQ19TUkFNX0RBVEFfU0lHX01BR0lDKSB7CiAJCXUzMiBuaWNfY2ZnOwogCiAJCXRnM19yZWFkX21lbSh0cCwgTklDX1NSQU1fREFUQV9DRkcsICZuaWNfY2ZnKTsKIAkJaWYgKG5pY19jZmcgJiBOSUNfU1JBTV9EQVRBX0NGR19BU0ZfRU5BQkxFKSB7Ci0JCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0VOQUJMRV9BU0Y7CisJCQl0ZzNfZmxhZ19zZXQodHAsIEVOQUJMRV9BU0YpOwogCQkJdHAtPmxhc3RfZXZlbnRfamlmZmllcyA9IGppZmZpZXM7Ci0JCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzUwX1BMVVMpCi0JCQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfQVNGX05FV19IQU5EU0hBS0U7CisJCQlpZiAodGczX2ZsYWcodHAsIDU3NTBfUExVUykpCisJCQkJdGczX2ZsYWdfc2V0KHRwLCBBU0ZfTkVXX0hBTkRTSEFLRSk7CiAJCX0KIAl9CiAKQEAgLTcyNzgsOCArNzMyNyw3IEBACiAvKiB0cC0+bG9jayBpcyBoZWxkLiAqLwogc3RhdGljIHZvaWQgdGczX3N0b3BfZncoc3RydWN0IHRnMyAqdHApCiB7Ci0JaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikgJiYKLQkgICAhKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX0FQRSkpIHsKKwlpZiAodGczX2ZsYWcodHAsIEVOQUJMRV9BU0YpICYmICF0ZzNfZmxhZyh0cCwgRU5BQkxFX0FQRSkpIHsKIAkJLyogV2FpdCBmb3IgUlggY3B1IHRvIEFDSyB0aGUgcHJldmlvdXMgZXZlbnQuICovCiAJCXRnM193YWl0X2Zvcl9ldmVudF9hY2sodHApOwogCkBAIC03MzI1LDggKzczNzMsNyBAQAogewogCWludCBpOwogCi0JQlVHX09OKG9mZnNldCA9PSBUWF9DUFVfQkFTRSAmJgotCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpKTsKKwlCVUdfT04ob2Zmc2V0ID09IFRYX0NQVV9CQVNFICYmIHRnM19mbGFnKHRwLCA1NzA1X1BMVVMpKTsKIAogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikgewogCQl1MzIgdmFsID0gdHIzMihHUkNfVkNQVV9FWFRfQ1RSTCk7CkBAIC03MzYxLDcgKzc0MDgsNyBAQAogCX0KIAogCS8qIENsZWFyIGZpcm13YXJlJ3MgbnZyYW0gYXJiaXRyYXRpb24uICovCi0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkKKwlpZiAodGczX2ZsYWcodHAsIE5WUkFNKSkKIAkJdHczMihOVlJBTV9TV0FSQiwgU1dBUkJfUkVRX0NMUjApOwogCXJldHVybiAwOwogfQpAQCAtNzM3OSwxNSArNzQyNiwxNCBAQAogCWludCBlcnIsIGxvY2tfZXJyLCBpOwogCXZvaWQgKCp3cml0ZV9vcCkoc3RydWN0IHRnMyAqLCB1MzIsIHUzMik7CiAKLQlpZiAoY3B1X2Jhc2UgPT0gVFhfQ1BVX0JBU0UgJiYKLQkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSkgeworCWlmIChjcHVfYmFzZSA9PSBUWF9DUFVfQkFTRSAmJiB0ZzNfZmxhZyh0cCwgNTcwNV9QTFVTKSkgewogCQluZXRkZXZfZXJyKHRwLT5kZXYsCiAJCQkgICAiJXM6IFRyeWluZyB0byBsb2FkIFRYIGNwdSBmaXJtd2FyZSB3aGljaCBpcyA1NzA1XG4iLAogCQkJICAgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpCisJaWYgKHRnM19mbGFnKHRwLCA1NzA1X1BMVVMpKQogCQl3cml0ZV9vcCA9IHRnM193cml0ZV9tZW07CiAJZWxzZQogCQl3cml0ZV9vcCA9IHRnM193cml0ZV9pbmRpcmVjdF9yZWczMjsKQEAgLTc0NzMsOCArNzUxOSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIDU3MDUgbmVlZHMgYSBzcGVjaWFsIHZlcnNpb24gb2YgdGhlIFRTTyBmaXJtd2FyZS4gICovCi0KIC8qIHRwLT5sb2NrIGlzIGhlbGQuICovCiBzdGF0aWMgaW50IHRnM19sb2FkX3Rzb19maXJtd2FyZShzdHJ1Y3QgdGczICp0cCkKIHsKQEAgLTc0ODMsNyArNzUyNyw5IEBACiAJdW5zaWduZWQgbG9uZyBjcHVfYmFzZSwgY3B1X3NjcmF0Y2hfYmFzZSwgY3B1X3NjcmF0Y2hfc2l6ZTsKIAlpbnQgZXJyLCBpOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfSFdfVFNPKQorCWlmICh0ZzNfZmxhZyh0cCwgSFdfVFNPXzEpIHx8CisJICAgIHRnM19mbGFnKHRwLCBIV19UU09fMikgfHwKKwkgICAgdGczX2ZsYWcodHAsIEhXX1RTT18zKSkKIAkJcmV0dXJuIDA7CiAKIAlmd19kYXRhID0gKHZvaWQgKil0cC0+ZnctPmRhdGE7CkBAIC03NTUyLDcgKzc1OTgsNyBAQAogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQogCQlyZXR1cm4gMDsKIAotCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikgeworCWlmICh0ZzNfZmxhZyh0cCwgRU5BQkxFX0FTRikpIHsKIAkJdTMyIGFkZHIwX2hpZ2gsIGFkZHIwX2xvdywgYWRkcjFfaGlnaCwgYWRkcjFfbG93OwogCiAJCWFkZHIwX2hpZ2ggPSB0cjMyKE1BQ19BRERSXzBfSElHSCk7CkBAIC03NTg3LDcgKzc2MzMsNyBAQAogCQkgICAgICAoYmRpbmZvX2FkZHIgKyBURzNfQkRJTkZPX01BWExFTl9GTEFHUyksCiAJCSAgICAgICBtYXhsZW5fZmxhZ3MpOwogCi0JaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpKQorCWlmICghdGczX2ZsYWcodHAsIDU3MDVfUExVUykpCiAJCXRnM193cml0ZV9tZW0odHAsCiAJCQkgICAgICAoYmRpbmZvX2FkZHIgKyBURzNfQkRJTkZPX05JQ19BRERSKSwKIAkJCSAgICAgIG5pY19hZGRyKTsKQEAgLTc1OTgsNyArNzY0NCw3IEBACiB7CiAJaW50IGk7CiAKLQlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9UU1MpKSB7CisJaWYgKCF0ZzNfZmxhZyh0cCwgRU5BQkxFX1RTUykpIHsKIAkJdHczMihIT1NUQ0NfVFhDT0xfVElDS1MsIGVjLT50eF9jb2FsZXNjZV91c2Vjcyk7CiAJCXR3MzIoSE9TVENDX1RYTUFYX0ZSQU1FUywgZWMtPnR4X21heF9jb2FsZXNjZWRfZnJhbWVzKTsKIAkJdHczMihIT1NUQ0NfVFhDT0FMX01BWEZfSU5ULCBlYy0+dHhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaXJxKTsKQEAgLTc2MDgsNyArNzY1NCw3IEBACiAJCXR3MzIoSE9TVENDX1RYQ09BTF9NQVhGX0lOVCwgMCk7CiAJfQogCi0JaWYgKCEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfUlNTKSkgeworCWlmICghdGczX2ZsYWcodHAsIEVOQUJMRV9SU1MpKSB7CiAJCXR3MzIoSE9TVENDX1JYQ09MX1RJQ0tTLCBlYy0+cnhfY29hbGVzY2VfdXNlY3MpOwogCQl0dzMyKEhPU1RDQ19SWE1BWF9GUkFNRVMsIGVjLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lcyk7CiAJCXR3MzIoSE9TVENDX1JYQ09BTF9NQVhGX0lOVCwgZWMtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2lycSk7CkBAIC03NjE4LDcgKzc2NjQsNyBAQAogCQl0dzMyKEhPU1RDQ19SWENPQUxfTUFYRl9JTlQsIDApOwogCX0KIAotCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSkgeworCWlmICghdGczX2ZsYWcodHAsIDU3MDVfUExVUykpIHsKIAkJdTMyIHZhbCA9IGVjLT5zdGF0c19ibG9ja19jb2FsZXNjZV91c2VjczsKIAogCQl0dzMyKEhPU1RDQ19SWENPQUxfVElDS19JTlQsIGVjLT5yeF9jb2FsZXNjZV91c2Vjc19pcnEpOwpAQCAtNzY0MCw3ICs3Njg2LDcgQEAKIAkJcmVnID0gSE9TVENDX1JYQ09BTF9NQVhGX0lOVF9WRUMxICsgaSAqIDB4MTg7CiAJCXR3MzIocmVnLCBlYy0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaXJxKTsKIAotCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfVFNTKSB7CisJCWlmICh0ZzNfZmxhZyh0cCwgRU5BQkxFX1RTUykpIHsKIAkJCXJlZyA9IEhPU1RDQ19UWENPTF9USUNLU19WRUMxICsgaSAqIDB4MTg7CiAJCQl0dzMyKHJlZywgZWMtPnR4X2NvYWxlc2NlX3VzZWNzKTsKIAkJCXJlZyA9IEhPU1RDQ19UWE1BWF9GUkFNRVNfVkVDMSArIGkgKiAweDE4OwpAQCAtNzY1NSw3ICs3NzAxLDcgQEAKIAkJdHczMihIT1NUQ0NfUlhNQVhfRlJBTUVTX1ZFQzEgKyBpICogMHgxOCwgMCk7CiAJCXR3MzIoSE9TVENDX1JYQ09BTF9NQVhGX0lOVF9WRUMxICsgaSAqIDB4MTgsIDApOwogCi0JCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9UU1MpIHsKKwkJaWYgKHRnM19mbGFnKHRwLCBFTkFCTEVfVFNTKSkgewogCQkJdHczMihIT1NUQ0NfVFhDT0xfVElDS1NfVkVDMSArIGkgKiAweDE4LCAwKTsKIAkJCXR3MzIoSE9TVENDX1RYTUFYX0ZSQU1FU19WRUMxICsgaSAqIDB4MTgsIDApOwogCQkJdHczMihIT1NUQ0NfVFhDT0FMX01BWEZfSU5UX1ZFQzEgKyBpICogMHgxOCwgMCk7CkBAIC03NjcxLDEwICs3NzE3LDkgQEAKIAlzdHJ1Y3QgdGczX25hcGkgKnRuYXBpID0gJnRwLT5uYXBpWzBdOwogCiAJLyogRGlzYWJsZSBhbGwgdHJhbnNtaXQgcmluZ3MgYnV0IHRoZSBmaXJzdC4gKi8KLQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykpCisJaWYgKCF0ZzNfZmxhZyh0cCwgNTcwNV9QTFVTKSkKIAkJbGltaXQgPSBOSUNfU1JBTV9TRU5EX1JDQiArIFRHM19CRElORk9fU0laRSAqIDE2OwotCWVsc2UgaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3IHx8Ci0JCSBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxOSkKKwllbHNlIGlmICh0ZzNfZmxhZyh0cCwgNTcxN19QTFVTKSkKIAkJbGltaXQgPSBOSUNfU1JBTV9TRU5EX1JDQiArIFRHM19CRElORk9fU0laRSAqIDQ7CiAJZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzY1KQogCQlsaW1pdCA9IE5JQ19TUkFNX1NFTkRfUkNCICsgVEczX0JESU5GT19TSVpFICogMjsKQEAgLTc2ODgsMTAgKzc3MzMsOSBAQAogCiAKIAkvKiBEaXNhYmxlIGFsbCByZWNlaXZlIHJldHVybiByaW5ncyBidXQgdGhlIGZpcnN0LiAqLwotCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNyB8fAotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxOSkKKwlpZiAodGczX2ZsYWcodHAsIDU3MTdfUExVUykpCiAJCWxpbWl0ID0gTklDX1NSQU1fUkNWX1JFVF9SQ0IgKyBURzNfQkRJTkZPX1NJWkUgKiAxNzsKLQllbHNlIGlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSkKKwllbHNlIGlmICghdGczX2ZsYWcodHAsIDU3MDVfUExVUykpCiAJCWxpbWl0ID0gTklDX1NSQU1fUkNWX1JFVF9SQ0IgKyBURzNfQkRJTkZPX1NJWkUgKiAxNjsKIAllbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1NSB8fAogCQkgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzY1KQpAQCAtNzcwOCwxNiArNzc1MiwxNiBAQAogCXR3MzJfbWFpbGJveF9mKHRwLT5uYXBpWzBdLmludF9tYm94LCAxKTsKIAogCS8qIFplcm8gbWFpbGJveCByZWdpc3RlcnMuICovCi0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19TVVBQT1JUX01TSVgpIHsKKwlpZiAodGczX2ZsYWcodHAsIFNVUFBPUlRfTVNJWCkpIHsKIAkJZm9yIChpID0gMTsgaSA8IHRwLT5pcnFfbWF4OyBpKyspIHsKIAkJCXRwLT5uYXBpW2ldLnR4X3Byb2QgPSAwOwogCQkJdHAtPm5hcGlbaV0udHhfY29ucyA9IDA7Ci0JCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfVFNTKQorCQkJaWYgKHRnM19mbGFnKHRwLCBFTkFCTEVfVFNTKSkKIAkJCQl0dzMyX21haWxib3godHAtPm5hcGlbaV0ucHJvZG1ib3gsIDApOwogCQkJdHczMl9yeF9tYm94KHRwLT5uYXBpW2ldLmNvbnNtYm94LCAwKTsKIAkJCXR3MzJfbWFpbGJveF9mKHRwLT5uYXBpW2ldLmludF9tYm94LCAxKTsKIAkJfQotCQlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9UU1MpKQorCQlpZiAoIXRnM19mbGFnKHRwLCBFTkFCTEVfVFNTKSkKIAkJCXR3MzJfbWFpbGJveCh0cC0+bmFwaVswXS5wcm9kbWJveCwgMCk7CiAJfSBlbHNlIHsKIAkJdHAtPm5hcGlbMF0udHhfcHJvZCA9IDA7CkBAIC03NzI3LDcgKzc3NzEsNyBAQAogCX0KIAogCS8qIE1ha2Ugc3VyZSB0aGUgTklDLWJhc2VkIHNlbmQgQkQgcmluZ3MgYXJlIGRpc2FibGVkLiAqLwotCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSkgeworCWlmICghdGczX2ZsYWcodHAsIDU3MDVfUExVUykpIHsKIAkJdTMyIG1ib3ggPSBNQUlMQk9YX1NORE5JQ19QUk9EX0lEWF8wICsgVEczXzY0QklUX1JFR19MT1c7CiAJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQogCQkJdHczMl90eF9tYm94KG1ib3ggKyBpICogOCwgMCk7CkBAIC03Nzg3LDYgKzc4MzEsNDcgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHRnM19zZXR1cF9yeGJkX3RocmVzaG9sZHMoc3RydWN0IHRnMyAqdHApCit7CisJdTMyIHZhbCwgYmRjYWNoZV9tYXhjbnQsIGhvc3RfcmVwX3RocmVzaCwgbmljX3JlcF90aHJlc2g7CisKKwlpZiAoIXRnM19mbGFnKHRwLCA1NzUwX1BMVVMpIHx8CisJICAgIHRnM19mbGFnKHRwLCA1NzgwX0NMQVNTKSB8fAorCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1MCB8fAorCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1MikKKwkJYmRjYWNoZV9tYXhjbnQgPSBURzNfU1JBTV9SWF9TVERfQkRDQUNIRV9TSVpFXzU3MDA7CisJZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTUgfHwKKwkJIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg3KQorCQliZGNhY2hlX21heGNudCA9IFRHM19TUkFNX1JYX1NURF9CRENBQ0hFX1NJWkVfNTc1NTsKKwllbHNlCisJCWJkY2FjaGVfbWF4Y250ID0gVEczX1NSQU1fUlhfU1REX0JEQ0FDSEVfU0laRV81OTA2OworCisJbmljX3JlcF90aHJlc2ggPSBtaW4oYmRjYWNoZV9tYXhjbnQgLyAyLCB0cC0+cnhfc3RkX21heF9wb3N0KTsKKwlob3N0X3JlcF90aHJlc2ggPSBtYXhfdCh1MzIsIHRwLT5yeF9wZW5kaW5nIC8gOCwgMSk7CisKKwl2YWwgPSBtaW4obmljX3JlcF90aHJlc2gsIGhvc3RfcmVwX3RocmVzaCk7CisJdHczMihSQ1ZCRElfU1REX1RIUkVTSCwgdmFsKTsKKworCWlmICh0ZzNfZmxhZyh0cCwgNTc3NjVfUExVUykpCisJCXR3MzIoU1REX1JFUExFTklTSF9MV00sIGJkY2FjaGVfbWF4Y250KTsKKworCWlmICghdGczX2ZsYWcodHAsIEpVTUJPX0NBUEFCTEUpIHx8IHRnM19mbGFnKHRwLCA1NzgwX0NMQVNTKSkKKwkJcmV0dXJuOworCisJaWYgKCF0ZzNfZmxhZyh0cCwgNTcwNV9QTFVTKSkKKwkJYmRjYWNoZV9tYXhjbnQgPSBURzNfU1JBTV9SWF9KTUJfQkRDQUNIRV9TSVpFXzU3MDA7CisJZWxzZQorCQliZGNhY2hlX21heGNudCA9IFRHM19TUkFNX1JYX0pNQl9CRENBQ0hFX1NJWkVfNTcxNzsKKworCWhvc3RfcmVwX3RocmVzaCA9IG1heF90KHUzMiwgdHAtPnJ4X2p1bWJvX3BlbmRpbmcgLyA4LCAxKTsKKworCXZhbCA9IG1pbihiZGNhY2hlX21heGNudCAvIDIsIGhvc3RfcmVwX3RocmVzaCk7CisJdHczMihSQ1ZCRElfSlVNQk9fVEhSRVNILCB2YWwpOworCisJaWYgKHRnM19mbGFnKHRwLCA1Nzc2NV9QTFVTKSkKKwkJdHczMihKTUJfUkVQTEVOSVNIX0xXTSwgYmRjYWNoZV9tYXhjbnQpOworfQorCiAvKiB0cC0+bG9jayBpcyBoZWxkLiAqLwogc3RhdGljIGludCB0ZzNfcmVzZXRfaHcoc3RydWN0IHRnMyAqdHAsIGludCByZXNldF9waHkpCiB7CkBAIC03ODAwLDcgKzc4ODUsNyBAQAogCiAJdGczX3dyaXRlX3NpZ19wcmVfcmVzZXQodHAsIFJFU0VUX0tJTkRfSU5JVCk7CiAKLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0lOSVRfQ09NUExFVEUpCisJaWYgKHRnM19mbGFnKHRwLCBJTklUX0NPTVBMRVRFKSkKIAkJdGczX2Fib3J0X2h3KHRwLCAxKTsKIAogCS8qIEVuYWJsZSBNQUMgY29udHJvbCBvZiBMUEkgKi8KQEAgLTc4MjAsNyArNzkwNSw3IEBACiAJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTcxNykKIAkJCXZhbCB8PSBURzNfQ1BNVV9FRUVNRF9TTkRfSURYX0RFVF9FTjsKIAotCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfQVBFKQorCQlpZiAodGczX2ZsYWcodHAsIEVOQUJMRV9BUEUpKQogCQkJdmFsIHw9IFRHM19DUE1VX0VFRU1EX0FQRV9UWF9ERVRfRU47CiAKIAkJdHczMl9mKFRHM19DUE1VX0VFRV9NT0RFLCB2YWwpOwpAQCAtNzg3OSw3ICs3OTY0LDcgQEAKIAkJdHczMihURzNfUENJRV9MTktDVEwsIHZhbCB8IFRHM19QQ0lFX0xOS0NUTF9MMV9QTExfUERfRElTKTsKIAl9CiAKLQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19MMVBMTFBEX0VOKSB7CisJaWYgKHRnM19mbGFnKHRwLCBMMVBMTFBEX0VOKSkgewogCQl1MzIgZ3JjX21vZGUgPSB0cjMyKEdSQ19NT0RFKTsKIAogCQkvKiBBY2Nlc3MgdGhlIGxvd2VyIDFLIG9mIFBMIFBDSUUgYmxvY2sgcmVnaXN0ZXJzLiAqLwpAQCAtNzkwOSw2ICs3OTk0LDIyIEBACiAJCQl0dzMyKEdSQ19NT0RFLCBncmNfbW9kZSk7CiAJCX0KIAorCQlpZiAoR0VUX0NISVBfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IENISVBSRVZfNTc3NjVfQVgpIHsKKwkJCXUzMiBncmNfbW9kZSA9IHRyMzIoR1JDX01PREUpOworCisJCQkvKiBBY2Nlc3MgdGhlIGxvd2VyIDFLIG9mIERMIFBDSUUgYmxvY2sgcmVnaXN0ZXJzLiAqLworCQkJdmFsID0gZ3JjX21vZGUgJiB+R1JDX01PREVfUENJRV9QT1JUX01BU0s7CisJCQl0dzMyKEdSQ19NT0RFLCB2YWwgfCBHUkNfTU9ERV9QQ0lFX0RMX1NFTCk7CisKKwkJCXZhbCA9IHRyMzIoVEczX1BDSUVfVExETFBMX1BPUlQgKworCQkJCSAgIFRHM19QQ0lFX0RMX0xPX0ZUU01BWCk7CisJCQl2YWwgJj0gflRHM19QQ0lFX0RMX0xPX0ZUU01BWF9NU0s7CisJCQl0dzMyKFRHM19QQ0lFX1RMRExQTF9QT1JUICsgVEczX1BDSUVfRExfTE9fRlRTTUFYLAorCQkJICAgICB2YWwgfCBURzNfUENJRV9ETF9MT19GVFNNQVhfVkFMKTsKKworCQkJdHczMihHUkNfTU9ERSwgZ3JjX21vZGUpOworCQl9CisKIAkJdmFsID0gdHIzMihURzNfQ1BNVV9MU1BEXzEwTUJfQ0xLKTsKIAkJdmFsICY9IH5DUE1VX0xTUERfMTBNQl9NQUNDTEtfTUFTSzsKIAkJdmFsIHw9IENQTVVfTFNQRF8xME1CX01BQ0NMS182XzI1OwpAQCAtNzkyMCwyMCArODAyMSwyMCBAQAogCSAqIG90aGVyIHJldmlzaW9uLiAgQnV0IGRvIG5vdCBzZXQgdGhpcyBvbiBQQ0kgRXhwcmVzcwogCSAqIGNoaXBzIGFuZCBkb24ndCBldmVuIHRvdWNoIHRoZSBjbG9ja3MgaWYgdGhlIENQTVUgaXMgcHJlc2VudC4KIAkgKi8KLQlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfQ1BNVV9QUkVTRU5UKSkgewotCQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BDSV9FWFBSRVNTKSkKKwlpZiAoIXRnM19mbGFnKHRwLCBDUE1VX1BSRVNFTlQpKSB7CisJCWlmICghdGczX2ZsYWcodHAsIFBDSV9FWFBSRVNTKSkKIAkJCXRwLT5wY2lfY2xvY2tfY3RybCB8PSBDTE9DS19DVFJMX0RFTEFZX1BDSV9HUkFOVDsKIAkJdHczMl9mKFRHM1BDSV9DTE9DS19DVFJMLCB0cC0+cGNpX2Nsb2NrX2N0cmwpOwogCX0KIAogCWlmICh0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTcwNF9BMCAmJgotCSAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1BDSVhfTU9ERSkpIHsKKwkgICAgdGczX2ZsYWcodHAsIFBDSVhfTU9ERSkpIHsKIAkJdmFsID0gdHIzMihURzNQQ0lfUENJU1RBVEUpOwogCQl2YWwgfD0gUENJU1RBVEVfUkVUUllfU0FNRV9ETUE7CiAJCXR3MzIoVEczUENJX1BDSVNUQVRFLCB2YWwpOwogCX0KIAotCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9BUEUpIHsKKwlpZiAodGczX2ZsYWcodHAsIEVOQUJMRV9BUEUpKSB7CiAJCS8qIEFsbG93IHJlYWRzIGFuZCB3cml0ZXMgdG8gdGhlCiAJCSAqIEFQRSByZWdpc3RlciBhbmQgbWVtb3J5IHNwYWNlLgogCQkgKi8KQEAgLTc5NjAsMTEgKzgwNjEsMTQgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTcxN19QTFVTKSB7CisJaWYgKHRnM19mbGFnKHRwLCA1Nzc2NV9QTFVTKSkgewogCQl2YWwgPSB0cjMyKFRHM1BDSV9ETUFfUldfQ1RSTCkgJgogCQkgICAgICB+RE1BX1JXQ1RSTF9ESVNfQ0FDSEVfQUxJR05NRU5UOwogCQlpZiAodHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3NzY1X0EwKQogCQkJdmFsICY9IH5ETUFfUldDVFJMX0NSRFJEUl9SRE1BX01SUlNfTVNLOworCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3NzY1ICYmCisJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTcxNykKKwkJCXZhbCB8PSBETUFfUldDVFJMX1RBR0dFRF9TVEFUX1dBOwogCQl0dzMyKFRHM1BDSV9ETUFfUldfQ1RSTCwgdmFsIHwgdHAtPmRtYV9yd2N0cmwpOwogCX0gZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3ODQgJiYKIAkJICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3NjEpIHsKQEAgLTc5OTksNyArODEwMyw3IEBACiAJdHczMihHUkNfTUlTQ19DRkcsIHZhbCk7CiAKIAkvKiBJbml0aWFsaXplIE1CVUYvREVTQyBwb29sLiAqLwotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3NTBfUExVUykgeworCWlmICh0ZzNfZmxhZyh0cCwgNTc1MF9QTFVTKSkgewogCQkvKiBEbyBub3RoaW5nLiAgKi8KIAl9IGVsc2UgaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzA1KSB7CiAJCXR3MzIoQlVGTUdSX01CX1BPT0xfQUREUiwgTklDX1NSQU1fTUJVRl9QT09MX0JBU0UpOwpAQCAtODAwOSw3ICs4MTEzLDcgQEAKIAkJCXR3MzIoQlVGTUdSX01CX1BPT0xfU0laRSwgTklDX1NSQU1fTUJVRl9QT09MX1NJWkU5Nik7CiAJCXR3MzIoQlVGTUdSX0RNQV9ERVNDX1BPT0xfQUREUiwgTklDX1NSQU1fRE1BX0RFU0NfUE9PTF9CQVNFKTsKIAkJdHczMihCVUZNR1JfRE1BX0RFU0NfUE9PTF9TSVpFLCBOSUNfU1JBTV9ETUFfREVTQ19QT09MX1NJWkUpOwotCX0gZWxzZSBpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9UU09fQ0FQQUJMRSkgeworCX0gZWxzZSBpZiAodGczX2ZsYWcodHAsIFRTT19DQVBBQkxFKSkgewogCQlpbnQgZndfbGVuOwogCiAJCWZ3X2xlbiA9IHRwLT5md19sZW47CkBAIC04MDQzLDYgKzgxNDcsMTAgQEAKIAl2YWwgPSBCVUZNR1JfTU9ERV9FTkFCTEUgfCBCVUZNR1JfTU9ERV9BVFROX0VOQUJMRTsKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTkpCiAJCXZhbCB8PSBCVUZNR1JfTU9ERV9OT19UWF9VTkRFUlJVTjsKKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcgfHwKKwkgICAgdHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3MTlfQTAgfHwKKwkgICAgdHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3MjBfQTApCisJCXZhbCB8PSBCVUZNR1JfTU9ERV9NQkxPV19BVFROX0VOQUI7CiAJdHczMihCVUZNR1JfTU9ERSwgdmFsKTsKIAlmb3IgKGkgPSAwOyBpIDwgMjAwMDsgaSsrKSB7CiAJCWlmICh0cjMyKEJVRk1HUl9NT0RFKSAmIEJVRk1HUl9NT0RFX0VOQUJMRSkKQEAgLTgwNTQsMjEgKzgxNjIsMTAgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JLyogU2V0dXAgcmVwbGVuaXNoIHRocmVzaG9sZC4gKi8KLQl2YWwgPSB0cC0+cnhfcGVuZGluZyAvIDg7Ci0JaWYgKHZhbCA9PSAwKQotCQl2YWwgPSAxOwotCWVsc2UgaWYgKHZhbCA+IHRwLT5yeF9zdGRfbWF4X3Bvc3QpCi0JCXZhbCA9IHRwLT5yeF9zdGRfbWF4X3Bvc3Q7Ci0JZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYpIHsKLQkJaWYgKHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81OTA2X0ExKQotCQkJdHczMihJU09fUEtUX1RYLCAodHIzMihJU09fUEtUX1RYKSAmIH4weDMpIHwgMHgyKTsKKwlpZiAodHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU5MDZfQTEpCisJCXR3MzIoSVNPX1BLVF9UWCwgKHRyMzIoSVNPX1BLVF9UWCkgJiB+MHgzKSB8IDB4Mik7CiAKLQkJaWYgKHZhbCA+IChURzNfUlhfSU5URVJOQUxfUklOR19TWl81OTA2IC8gMikpCi0JCQl2YWwgPSBURzNfUlhfSU5URVJOQUxfUklOR19TWl81OTA2IC8gMjsKLQl9Ci0KLQl0dzMyKFJDVkJESV9TVERfVEhSRVNILCB2YWwpOworCXRnM19zZXR1cF9yeGJkX3RocmVzaG9sZHModHApOwogCiAJLyogSW5pdGlhbGl6ZSBURzNfQkRJTkZPJ3MgYXQ6CiAJICogIFJDVkRCRElfU1REX0JEOglzdGFuZGFyZCBldGggc2l6ZSByeCByaW5nCkBAIC04MDkxLDEzICs4MTg4LDEyIEBACiAJICAgICAoKHU2NCkgdHByLT5yeF9zdGRfbWFwcGluZyA+PiAzMikpOwogCXR3MzIoUkNWREJESV9TVERfQkQgKyBURzNfQkRJTkZPX0hPU1RfQUREUiArIFRHM182NEJJVF9SRUdfTE9XLAogCSAgICAgKCh1NjQpIHRwci0+cnhfc3RkX21hcHBpbmcgJiAweGZmZmZmZmZmKSk7Ci0JaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzE3ICYmCi0JICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzE5KQorCWlmICghdGczX2ZsYWcodHAsIDU3MTdfUExVUykpCiAJCXR3MzIoUkNWREJESV9TVERfQkQgKyBURzNfQkRJTkZPX05JQ19BRERSLAogCQkgICAgIE5JQ19TUkFNX1JYX0JVRkZFUl9ERVNDKTsKIAogCS8qIERpc2FibGUgdGhlIG1pbmkgcmluZyAqLwotCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSkKKwlpZiAoIXRnM19mbGFnKHRwLCA1NzA1X1BMVVMpKQogCQl0dzMyKFJDVkRCRElfTUlOSV9CRCArIFRHM19CRElORk9fTUFYTEVOX0ZMQUdTLAogCQkgICAgIEJESU5GT19GTEFHU19ESVNBQkxFRCk7CiAKQEAgLTgxMDUsMjAgKzgyMDEsMTggQEAKIAkgKiBibG9ja3Mgb24gdGhvc2UgZGV2aWNlcyB0aGF0IGhhdmUgdGhlbS4KIAkgKi8KIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTkgfHwKLQkgICAgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfSlVNQk9fQ0FQQUJMRSkgJiYKLQkgICAgISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3ODBfQ0xBU1MpKSkgewotCQkvKiBTZXR1cCByZXBsZW5pc2ggdGhyZXNob2xkLiAqLwotCQl0dzMyKFJDVkJESV9KVU1CT19USFJFU0gsIHRwLT5yeF9qdW1ib19wZW5kaW5nIC8gOCk7CisJICAgICh0ZzNfZmxhZyh0cCwgSlVNQk9fQ0FQQUJMRSkgJiYgIXRnM19mbGFnKHRwLCA1NzgwX0NMQVNTKSkpIHsKIAotCQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0pVTUJPX1JJTkdfRU5BQkxFKSB7CisJCWlmICh0ZzNfZmxhZyh0cCwgSlVNQk9fUklOR19FTkFCTEUpKSB7CiAJCQl0dzMyKFJDVkRCRElfSlVNQk9fQkQgKyBURzNfQkRJTkZPX0hPU1RfQUREUiArIFRHM182NEJJVF9SRUdfSElHSCwKIAkJCSAgICAgKCh1NjQpIHRwci0+cnhfam1iX21hcHBpbmcgPj4gMzIpKTsKIAkJCXR3MzIoUkNWREJESV9KVU1CT19CRCArIFRHM19CRElORk9fSE9TVF9BRERSICsgVEczXzY0QklUX1JFR19MT1csCiAJCQkgICAgICgodTY0KSB0cHItPnJ4X2ptYl9tYXBwaW5nICYgMHhmZmZmZmZmZikpOworCQkJdmFsID0gVEczX1JYX0pNQl9SSU5HX1NJWkUodHApIDw8CisJCQkgICAgICBCRElORk9fRkxBR1NfTUFYTEVOX1NISUZUOwogCQkJdHczMihSQ1ZEQkRJX0pVTUJPX0JEICsgVEczX0JESU5GT19NQVhMRU5fRkxBR1MsCi0JCQkgICAgIChSWF9KVU1CT19NQVhfU0laRSA8PCBCRElORk9fRkxBR1NfTUFYTEVOX1NISUZUKSB8Ci0JCQkgICAgIEJESU5GT19GTEFHU19VU0VfRVhUX1JFQ1YpOwotCQkJaWYgKCEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19VU0VfSlVNQk9fQkRGTEFHKSB8fAorCQkJICAgICB2YWwgfCBCRElORk9fRkxBR1NfVVNFX0VYVF9SRUNWKTsKKwkJCWlmICghdGczX2ZsYWcodHAsIFVTRV9KVU1CT19CREZMQUcpIHx8CiAJCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzY1KQogCQkJCXR3MzIoUkNWREJESV9KVU1CT19CRCArIFRHM19CRElORk9fTklDX0FERFIsCiAJCQkJICAgICBOSUNfU1JBTV9SWF9KVU1CT19CVUZGRVJfREVTQyk7CkBAIC04MTI3LDMyICs4MjIxLDI3IEBACiAJCQkgICAgIEJESU5GT19GTEFHU19ESVNBQkxFRCk7CiAJCX0KIAotCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM181NzE3X1BMVVMpIHsKKwkJaWYgKHRnM19mbGFnKHRwLCA1Nzc2NV9QTFVTKSkgewogCQkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc2NSkKLQkJCQl2YWwgPSBSWF9TVERfTUFYX1NJWkVfNTcwNTsKKwkJCQl2YWwgPSBURzNfUlhfU1REX01BWF9TSVpFXzU3MDA7CiAJCQllbHNlCi0JCQkJdmFsID0gUlhfU1REX01BWF9TSVpFXzU3MTc7CisJCQkJdmFsID0gVEczX1JYX1NURF9NQVhfU0laRV81NzE3OwogCQkJdmFsIDw8PSBCRElORk9fRkxBR1NfTUFYTEVOX1NISUZUOwogCQkJdmFsIHw9IChURzNfUlhfU1REX0RNQV9TWiA8PCAyKTsKIAkJfSBlbHNlCiAJCQl2YWwgPSBURzNfUlhfU1REX0RNQV9TWiA8PCBCRElORk9fRkxBR1NfTUFYTEVOX1NISUZUOwogCX0gZWxzZQotCQl2YWwgPSBSWF9TVERfTUFYX1NJWkVfNTcwNSA8PCBCRElORk9fRkxBR1NfTUFYTEVOX1NISUZUOworCQl2YWwgPSBURzNfUlhfU1REX01BWF9TSVpFXzU3MDAgPDwgQkRJTkZPX0ZMQUdTX01BWExFTl9TSElGVDsKIAogCXR3MzIoUkNWREJESV9TVERfQkQgKyBURzNfQkRJTkZPX01BWExFTl9GTEFHUywgdmFsKTsKIAogCXRwci0+cnhfc3RkX3Byb2RfaWR4ID0gdHAtPnJ4X3BlbmRpbmc7CiAJdHczMl9yeF9tYm94KFRHM19SWF9TVERfUFJPRF9JRFhfUkVHLCB0cHItPnJ4X3N0ZF9wcm9kX2lkeCk7CiAKLQl0cHItPnJ4X2ptYl9wcm9kX2lkeCA9ICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfSlVNQk9fUklOR19FTkFCTEUpID8KLQkJCSAgdHAtPnJ4X2p1bWJvX3BlbmRpbmcgOiAwOworCXRwci0+cnhfam1iX3Byb2RfaWR4ID0KKwkJdGczX2ZsYWcodHAsIEpVTUJPX1JJTkdfRU5BQkxFKSA/IHRwLT5yeF9qdW1ib19wZW5kaW5nIDogMDsKIAl0dzMyX3J4X21ib3goVEczX1JYX0pNQl9QUk9EX0lEWF9SRUcsIHRwci0+cnhfam1iX3Byb2RfaWR4KTsKIAotCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3MTdfUExVUykgewotCQl0dzMyKFNURF9SRVBMRU5JU0hfTFdNLCAzMik7Ci0JCXR3MzIoSk1CX1JFUExFTklTSF9MV00sIDE2KTsKLQl9Ci0KIAl0ZzNfcmluZ3NfcmVzZXQodHApOwogCiAJLyogSW5pdGlhbGl6ZSBNQUMgYWRkcmVzcyBhbmQgYmFja29mZiBzZWVkLiAqLwpAQCAtODE2NSwxMCArODI1NCwxNiBAQAogCS8qIFRoZSBzbG90IHRpbWUgaXMgY2hhbmdlZCBieSB0ZzNfc2V0dXBfcGh5IGlmIHdlCiAJICogcnVuIGF0IGdpZ2FiaXQgd2l0aCBoYWxmIGR1cGxleC4KIAkgKi8KLQl0dzMyKE1BQ19UWF9MRU5HVEhTLAotCSAgICAgKDIgPDwgVFhfTEVOR1RIU19JUEdfQ1JTX1NISUZUKSB8Ci0JICAgICAoNiA8PCBUWF9MRU5HVEhTX0lQR19TSElGVCkgfAotCSAgICAgKDMyIDw8IFRYX0xFTkdUSFNfU0xPVF9USU1FX1NISUZUKSk7CisJdmFsID0gKDIgPDwgVFhfTEVOR1RIU19JUEdfQ1JTX1NISUZUKSB8CisJICAgICAgKDYgPDwgVFhfTEVOR1RIU19JUEdfU0hJRlQpIHwKKwkgICAgICAoMzIgPDwgVFhfTEVOR1RIU19TTE9UX1RJTUVfU0hJRlQpOworCisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzIwKQorCQl2YWwgfD0gdHIzMihNQUNfVFhfTEVOR1RIUykgJgorCQkgICAgICAgKFRYX0xFTkdUSFNfSk1CX0ZSTV9MRU5fTVNLIHwKKwkJCVRYX0xFTkdUSFNfQ05UX0RXTl9WQUxfTVNLKTsKKworCXR3MzIoTUFDX1RYX0xFTkdUSFMsIHZhbCk7CiAKIAkvKiBSZWNlaXZlIHJ1bGVzLiAqLwogCXR3MzIoTUFDX1JDVl9SVUxFX0NGRywgUkNWX1JVTEVfQ0ZHX0RFRkFVTFRfQ0xBU1MpOwpAQCAtODE5NSwzMyArODI5MCwzOSBAQAogCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzA1ICYmCiAJICAgIHRwLT5wY2lfY2hpcF9yZXZfaWQgIT0gQ0hJUFJFVl9JRF81NzA1X0EwKSB7Ci0JCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1RTT19DQVBBQkxFICYmCisJCWlmICh0ZzNfZmxhZyh0cCwgVFNPX0NBUEFCTEUpICYmCiAJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwNSkgewogCQkJcmRtYWNfbW9kZSB8PSBSRE1BQ19NT0RFX0ZJRk9fU0laRV8xMjg7CiAJCX0gZWxzZSBpZiAoISh0cjMyKFRHM1BDSV9QQ0lTVEFURSkgJiBQQ0lTVEFURV9CVVNfU1BFRURfSElHSCkgJiYKLQkJCSAgICEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9JU181Nzg4KSkgeworCQkJICAgIXRnM19mbGFnKHRwLCBJU181Nzg4KSkgewogCQkJcmRtYWNfbW9kZSB8PSBSRE1BQ19NT0RFX0ZJRk9fTE9OR19CVVJTVDsKIAkJfQogCX0KIAotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BDSV9FWFBSRVNTKQorCWlmICh0ZzNfZmxhZyh0cCwgUENJX0VYUFJFU1MpKQogCQlyZG1hY19tb2RlIHw9IFJETUFDX01PREVfRklGT19MT05HX0JVUlNUOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfSFdfVFNPKQorCWlmICh0ZzNfZmxhZyh0cCwgSFdfVFNPXzEpIHx8CisJICAgIHRnM19mbGFnKHRwLCBIV19UU09fMikgfHwKKwkgICAgdGczX2ZsYWcodHAsIEhXX1RTT18zKSkKIAkJcmRtYWNfbW9kZSB8PSBSRE1BQ19NT0RFX0lQVjRfTFNPX0VOOwogCi0JaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0hXX1RTT18zKSB8fAorCWlmICh0ZzNfZmxhZyh0cCwgNTc3NjVfUExVUykgfHwKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODUgfHwKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzgwKQogCQlyZG1hY19tb2RlIHw9IFJETUFDX01PREVfSVBWNl9MU09fRU47CiAKKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MjApCisJCXJkbWFjX21vZGUgfD0gdHIzMihSRE1BQ19NT0RFKSAmIFJETUFDX01PREVfSDJCTkNfVkxBTl9ERVQ7CisKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NjEgfHwKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODQgfHwKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODUgfHwKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzgwIHx8Ci0JICAgICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3MTdfUExVUykpIHsKKwkgICAgdGczX2ZsYWcodHAsIDU3NzY1X1BMVVMpKSB7CiAJCXZhbCA9IHRyMzIoVEczX1JETUFfUlNSVkNUUkxfUkVHKTsKLQkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE5KSB7CisJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxOSB8fAorCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MjApIHsKIAkJCXZhbCAmPSB+KFRHM19SRE1BX1JTUlZDVFJMX1RYTVJHTl9NQVNLIHwKIAkJCQkgVEczX1JETUFfUlNSVkNUUkxfRklGT19MV01fTUFTSyB8CiAJCQkJIFRHM19SRE1BX1JTUlZDVFJMX0ZJRk9fSFdNX01BU0spOwpAQCAtODIzMyw3ICs4MzM0LDggQEAKIAkJICAgICB2YWwgfCBURzNfUkRNQV9SU1JWQ1RSTF9GSUZPX09GTFdfRklYKTsKIAl9CiAKLQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTkpIHsKKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTkgfHwKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MjApIHsKIAkJdmFsID0gdHIzMihURzNfTFNPX1JEX0RNQV9DUlBURU5fQ1RSTCk7CiAJCXR3MzIoVEczX0xTT19SRF9ETUFfQ1JQVEVOX0NUUkwsIHZhbCB8CiAJCSAgICAgVEczX0xTT19SRF9ETUFfQ1JQVEVOX0NUUkxfQkxFTl9CRF80SyB8CkBAIC04MjQxLDEyICs4MzQzLDEyIEBACiAJfQogCiAJLyogUmVjZWl2ZS9zZW5kIHN0YXRpc3RpY3MuICovCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc1MF9QTFVTKSB7CisJaWYgKHRnM19mbGFnKHRwLCA1NzUwX1BMVVMpKSB7CiAJCXZhbCA9IHRyMzIoUkNWTFBDX1NUQVRTX0VOQUJMRSk7CiAJCXZhbCAmPSB+UkNWTFBDX1NUQVRTRU5BQl9EQUNLX0ZJWDsKIAkJdHczMihSQ1ZMUENfU1RBVFNfRU5BQkxFLCB2YWwpOwogCX0gZWxzZSBpZiAoKHJkbWFjX21vZGUgJiBSRE1BQ19NT0RFX0ZJRk9fU0laRV8xMjgpICYmCi0JCSAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1RTT19DQVBBQkxFKSkgeworCQkgICB0ZzNfZmxhZyh0cCwgVFNPX0NBUEFCTEUpKSB7CiAJCXZhbCA9IHRyMzIoUkNWTFBDX1NUQVRTX0VOQUJMRSk7CiAJCXZhbCAmPSB+UkNWTFBDX1NUQVRTRU5BQl9MTkdCUlNUX1JGSVg7CiAJCXR3MzIoUkNWTFBDX1NUQVRTX0VOQUJMRSwgdmFsKTsKQEAgLTgyNjksNyArODM3MSw3IEBACiAKIAlfX3RnM19zZXRfY29hbGVzY2UodHAsICZ0cC0+Y29hbCk7CiAKLQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykpIHsKKwlpZiAoIXRnM19mbGFnKHRwLCA1NzA1X1BMVVMpKSB7CiAJCS8qIFN0YXR1cy9zdGF0aXN0aWNzIGJsb2NrIGFkZHJlc3MuICBTZWUgdGczX3RpbWVyLAogCQkgKiB0aGUgdGczX3BlcmlvZGljX2ZldGNoX3N0YXRzIGNhbGwgdGhlcmUsIGFuZAogCQkgKiB0ZzNfZ2V0X3N0YXRzIHRvIHNlZSBob3cgdGhpcyB3b3JrcyBmb3IgNTcwNS81NzUwIGNoaXBzLgpAQCAtODI5NSw3ICs4Mzk3LDcgQEAKIAogCXR3MzIoUkNWQ0NfTU9ERSwgUkNWQ0NfTU9ERV9FTkFCTEUgfCBSQ1ZDQ19NT0RFX0FUVE5fRU5BQkxFKTsKIAl0dzMyKFJDVkxQQ19NT0RFLCBSQ1ZMUENfTU9ERV9FTkFCTEUpOwotCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSkKKwlpZiAoIXRnM19mbGFnKHRwLCA1NzA1X1BMVVMpKQogCQl0dzMyKFJDVkxTQ19NT0RFLCBSQ1ZMU0NfTU9ERV9FTkFCTEUgfCBSQ1ZMU0NfTU9ERV9BVFROX0VOQUJMRSk7CiAKIAlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfTUlJX1NFUkRFUykgewpAQCAtODMwNSwxMyArODQwNywxMyBAQAogCQl1ZGVsYXkoMTApOwogCX0KIAotCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9BUEUpCisJaWYgKHRnM19mbGFnKHRwLCBFTkFCTEVfQVBFKSkKIAkJdHAtPm1hY19tb2RlID0gTUFDX01PREVfQVBFX1RYX0VOIHwgTUFDX01PREVfQVBFX1JYX0VOOwogCWVsc2UKIAkJdHAtPm1hY19tb2RlID0gMDsKIAl0cC0+bWFjX21vZGUgfD0gTUFDX01PREVfVFhTVEFUX0VOQUJMRSB8IE1BQ19NT0RFX1JYU1RBVF9FTkFCTEUgfAogCQlNQUNfTU9ERV9UREVfRU5BQkxFIHwgTUFDX01PREVfUkRFX0VOQUJMRSB8IE1BQ19NT0RFX0ZIREVfRU5BQkxFOwotCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSAmJgorCWlmICghdGczX2ZsYWcodHAsIDU3MDVfUExVUykgJiYKIAkgICAgISh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19QSFlfU0VSREVTKSAmJgogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTcwMCkKIAkJdHAtPm1hY19tb2RlIHw9IE1BQ19NT0RFX0xJTktfUE9MQVJJVFk7CkBAIC04MzE5LDEyICs4NDIxLDEyIEBACiAJdWRlbGF5KDQwKTsKIAogCS8qIHRwLT5ncmNfbG9jYWxfY3RybCBpcyBwYXJ0aWFsbHkgc2V0IHVwIGR1cmluZyB0ZzNfZ2V0X2ludmFyaWFudHMoKS4KLQkgKiBJZiBURzNfRkxHMl9JU19OSUMgaXMgemVybywgd2Ugc2hvdWxkIHJlYWQgdGhlCisJICogSWYgVEczX0ZMQUdfSVNfTklDIGlzIHplcm8sIHdlIHNob3VsZCByZWFkIHRoZQogCSAqIHJlZ2lzdGVyIHRvIHByZXNlcnZlIHRoZSBHUElPIHNldHRpbmdzIGZvciBMT01zLiBUaGUgR1BJT3MsCiAJICogd2hldGhlciB1c2VkIGFzIGlucHV0cyBvciBvdXRwdXRzLCBhcmUgc2V0IGJ5IGJvb3QgY29kZSBhZnRlcgogCSAqIHJlc2V0LgogCSAqLwotCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfSVNfTklDKSkgeworCWlmICghdGczX2ZsYWcodHAsIElTX05JQykpIHsKIAkJdTMyIGdwaW9fbWFzazsKIAogCQlncGlvX21hc2sgPSBHUkNfTENMQ1RSTF9HUElPX09FMCB8IEdSQ19MQ0xDVFJMX0dQSU9fT0UxIHwKQEAgLTgzNDIsMjEgKzg0NDQsMjAgQEAKIAkJdHAtPmdyY19sb2NhbF9jdHJsIHw9IHRyMzIoR1JDX0xPQ0FMX0NUUkwpICYgZ3Bpb19tYXNrOwogCiAJCS8qIEdQSU8xIG11c3QgYmUgZHJpdmVuIGhpZ2ggZm9yIGVlcHJvbSB3cml0ZSBwcm90ZWN0ICovCi0JCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRUVQUk9NX1dSSVRFX1BST1QpCisJCWlmICh0ZzNfZmxhZyh0cCwgRUVQUk9NX1dSSVRFX1BST1QpKQogCQkJdHAtPmdyY19sb2NhbF9jdHJsIHw9IChHUkNfTENMQ1RSTF9HUElPX09FMSB8CiAJCQkJCSAgICAgICBHUkNfTENMQ1RSTF9HUElPX09VVFBVVDEpOwogCX0KIAl0dzMyX2YoR1JDX0xPQ0FMX0NUUkwsIHRwLT5ncmNfbG9jYWxfY3RybCk7CiAJdWRlbGF5KDEwMCk7CiAKLQlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVVNJTkdfTVNJWCkgJiYKLQkJdHAtPmlycV9jbnQgPiAxKSB7CisJaWYgKHRnM19mbGFnKHRwLCBVU0lOR19NU0lYKSAmJiB0cC0+aXJxX2NudCA+IDEpIHsKIAkJdmFsID0gdHIzMihNU0dJTlRfTU9ERSk7CiAJCXZhbCB8PSBNU0dJTlRfTU9ERV9NVUxUSVZFQ19FTiB8IE1TR0lOVF9NT0RFX0VOQUJMRTsKIAkJdHczMihNU0dJTlRfTU9ERSwgdmFsKTsKIAl9CiAKLQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykpIHsKKwlpZiAoIXRnM19mbGFnKHRwLCA1NzA1X1BMVVMpKSB7CiAJCXR3MzJfZihETUFDX01PREUsIERNQUNfTU9ERV9FTkFCTEUpOwogCQl1ZGVsYXkoNDApOwogCX0KQEAgLTgzNjksMTggKzg0NzAsMTggQEAKIAogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwNSAmJgogCSAgICB0cC0+cGNpX2NoaXBfcmV2X2lkICE9IENISVBSRVZfSURfNTcwNV9BMCkgewotCQlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVFNPX0NBUEFCTEUpICYmCisJCWlmICh0ZzNfZmxhZyh0cCwgVFNPX0NBUEFCTEUpICYmCiAJCSAgICAodHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3MDVfQTEgfHwKIAkJICAgICB0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTcwNV9BMikpIHsKIAkJCS8qIG5vdGhpbmcgKi8KIAkJfSBlbHNlIGlmICghKHRyMzIoVEczUENJX1BDSVNUQVRFKSAmIFBDSVNUQVRFX0JVU19TUEVFRF9ISUdIKSAmJgotCQkJICAgISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0lTXzU3ODgpKSB7CisJCQkgICAhdGczX2ZsYWcodHAsIElTXzU3ODgpKSB7CiAJCQl2YWwgfD0gV0RNQUNfTU9ERV9SWF9BQ0NFTDsKIAkJfQogCX0KIAogCS8qIEVuYWJsZSBob3N0IGNvYWxlc2NpbmcgYnVnIGZpeCAqLwotCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3NTVfUExVUykKKwlpZiAodGczX2ZsYWcodHAsIDU3NTVfUExVUykpCiAJCXZhbCB8PSBXRE1BQ19NT0RFX1NUQVRVU19UQUdfRklYOwogCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg1KQpAQCAtODM4OSw3ICs4NDkwLDcgQEAKIAl0dzMyX2YoV0RNQUNfTU9ERSwgdmFsKTsKIAl1ZGVsYXkoNDApOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19QQ0lYX01PREUpIHsKKwlpZiAodGczX2ZsYWcodHAsIFBDSVhfTU9ERSkpIHsKIAkJdTE2IHBjaXhfY21kOwogCiAJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHRwLT5wZGV2LCB0cC0+cGNpeF9jYXAgKyBQQ0lfWF9DTUQsCkBAIC04NDA5LDcgKzg1MTAsNyBAQAogCXVkZWxheSg0MCk7CiAKIAl0dzMyKFJDVkRDQ19NT0RFLCBSQ1ZEQ0NfTU9ERV9FTkFCTEUgfCBSQ1ZEQ0NfTU9ERV9BVFROX0VOQUJMRSk7Ci0JaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpKQorCWlmICghdGczX2ZsYWcodHAsIDU3MDVfUExVUykpCiAJCXR3MzIoTUJGUkVFX01PREUsIE1CRlJFRV9NT0RFX0VOQUJMRSk7CiAKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NjEpCkBAIC04NDIxLDE1ICs4NTIyLDE2IEBACiAJdHczMihTTkRCRENfTU9ERSwgU05EQkRDX01PREVfRU5BQkxFIHwgU05EQkRDX01PREVfQVRUTl9FTkFCTEUpOwogCXR3MzIoUkNWQkRJX01PREUsIFJDVkJESV9NT0RFX0VOQUJMRSB8IFJDVkJESV9NT0RFX1JDQl9BVFROX0VOQUIpOwogCXZhbCA9IFJDVkRCRElfTU9ERV9FTkFCTEUgfCBSQ1ZEQkRJX01PREVfSU5WX1JJTkdfU1o7Ci0JaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3IHx8Ci0JICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE5KQorCWlmICh0ZzNfZmxhZyh0cCwgTFJHX1BST0RfUklOR19DQVApKQogCQl2YWwgfD0gUkNWREJESV9NT0RFX0xSR19SSU5HX1NaOwogCXR3MzIoUkNWREJESV9NT0RFLCB2YWwpOwogCXR3MzIoU05EREFUQUlfTU9ERSwgU05EREFUQUlfTU9ERV9FTkFCTEUpOwotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0hXX1RTTykKKwlpZiAodGczX2ZsYWcodHAsIEhXX1RTT18xKSB8fAorCSAgICB0ZzNfZmxhZyh0cCwgSFdfVFNPXzIpIHx8CisJICAgIHRnM19mbGFnKHRwLCBIV19UU09fMykpCiAJCXR3MzIoU05EREFUQUlfTU9ERSwgU05EREFUQUlfTU9ERV9FTkFCTEUgfCAweDgpOwogCXZhbCA9IFNOREJESV9NT0RFX0VOQUJMRSB8IFNOREJESV9NT0RFX0FUVE5fRU5BQkxFOwotCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9UU1MpCisJaWYgKHRnM19mbGFnKHRwLCBFTkFCTEVfVFNTKSkKIAkJdmFsIHw9IFNOREJESV9NT0RFX01VTFRJX1RYUV9FTjsKIAl0dzMyKFNOREJESV9NT0RFLCB2YWwpOwogCXR3MzIoU05EQkRTX01PREUsIFNOREJEU19NT0RFX0VOQUJMRSB8IFNOREJEU19NT0RFX0FUVE5fRU5BQkxFKTsKQEAgLTg0NDAsMjAgKzg1NDIsMjggQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVFNPX0NBUEFCTEUpIHsKKwlpZiAodGczX2ZsYWcodHAsIFRTT19DQVBBQkxFKSkgewogCQllcnIgPSB0ZzNfbG9hZF90c29fZmlybXdhcmUodHApOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAl9CiAKIAl0cC0+dHhfbW9kZSA9IFRYX01PREVfRU5BQkxFOwotCWlmICgodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM181NzU1X1BMVVMpIHx8CisKKwlpZiAodGczX2ZsYWcodHAsIDU3NTVfUExVUykgfHwKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYpCiAJCXRwLT50eF9tb2RlIHw9IFRYX01PREVfTUJVRl9MT0NLVVBfRklYOworCisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzIwKSB7CisJCXZhbCA9IFRYX01PREVfSk1CX0ZSTV9MRU4gfCBUWF9NT0RFX0NOVF9ETl9NT0RFOworCQl0cC0+dHhfbW9kZSAmPSB+dmFsOworCQl0cC0+dHhfbW9kZSB8PSB0cjMyKE1BQ19UWF9NT0RFKSAmIHZhbDsKKwl9CisKIAl0dzMyX2YoTUFDX1RYX01PREUsIHRwLT50eF9tb2RlKTsKIAl1ZGVsYXkoMTAwKTsKIAotCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9SU1MpIHsKKwlpZiAodGczX2ZsYWcodHAsIEVOQUJMRV9SU1MpKSB7CiAJCXUzMiByZWcgPSBNQUNfUlNTX0lORElSX1RCTF8wOwogCQl1OCAqZW50ID0gKHU4ICopJnZhbDsKIApAQCAtODQ4MiwxMCArODU5MiwxMCBAQAogCX0KIAogCXRwLT5yeF9tb2RlID0gUlhfTU9ERV9FTkFCTEU7Ci0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTc1NV9QTFVTKQorCWlmICh0ZzNfZmxhZyh0cCwgNTc1NV9QTFVTKSkKIAkJdHAtPnJ4X21vZGUgfD0gUlhfTU9ERV9JUFY2X0NTVU1fRU5BQkxFOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX1JTUykKKwlpZiAodGczX2ZsYWcodHAsIEVOQUJMRV9SU1MpKQogCQl0cC0+cnhfbW9kZSB8PSBSWF9NT0RFX1JTU19FTkFCTEUgfAogCQkJICAgICAgIFJYX01PREVfUlNTX0lUQkxfSEFTSF9CSVRTXzcgfAogCQkJICAgICAgIFJYX01PREVfUlNTX0lQVjZfSEFTSF9FTiB8CkBAIC04NTMyLDExICs4NjQyLDExIEBACiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzA0ICYmCiAJICAgICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19QSFlfU0VSREVTKSkgewogCQkvKiBVc2UgaGFyZHdhcmUgbGluayBhdXRvLW5lZ290aWF0aW9uICovCi0JCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0hXX0FVVE9ORUc7CisJCXRnM19mbGFnX3NldCh0cCwgSFdfQVVUT05FRyk7CiAJfQogCiAJaWYgKCh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19NSUlfU0VSREVTKSAmJgotCSAgICAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTQpKSB7CisJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE0KSB7CiAJCXUzMiB0bXA7CiAKIAkJdG1wID0gdHIzMihTRVJERVNfUlhfQ1RSTCk7CkBAIC04NTQ2LDcgKzg2NTYsNyBAQAogCQl0dzMyKEdSQ19MT0NBTF9DVFJMLCB0cC0+Z3JjX2xvY2FsX2N0cmwpOwogCX0KIAotCWlmICghKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfVVNFX1BIWUxJQikpIHsKKwlpZiAoIXRnM19mbGFnKHRwLCBVU0VfUEhZTElCKSkgewogCQlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfSVNfTE9XX1BPV0VSKSB7CiAJCQl0cC0+cGh5X2ZsYWdzICY9IH5URzNfUEhZRkxHX0lTX0xPV19QT1dFUjsKIAkJCXRwLT5saW5rX2NvbmZpZy5zcGVlZCA9IHRwLT5saW5rX2NvbmZpZy5vcmlnX3NwZWVkOwpAQCAtODU3OSwxMiArODY4OSwxMSBAQAogCXR3MzIoTUFDX1JDVl9SVUxFXzEsICAweDg2MDAwMDA0ICYgUkNWX1JVTEVfRElTQUJMRV9NQVNLKTsKIAl0dzMyKE1BQ19SQ1ZfVkFMVUVfMSwgMHhmZmZmZmZmZiAmIFJDVl9SVUxFX0RJU0FCTEVfTUFTSyk7CiAKLQlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSAmJgotCSAgICAhKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc4MF9DTEFTUykpCisJaWYgKHRnM19mbGFnKHRwLCA1NzA1X1BMVVMpICYmICF0ZzNfZmxhZyh0cCwgNTc4MF9DTEFTUykpCiAJCWxpbWl0ID0gODsKIAllbHNlCiAJCWxpbWl0ID0gMTY7Ci0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKQorCWlmICh0ZzNfZmxhZyh0cCwgRU5BQkxFX0FTRikpCiAJCWxpbWl0IC09IDQ7CiAJc3dpdGNoIChsaW1pdCkgewogCWNhc2UgMTY6CkBAIC04NjIyLDcgKzg3MzEsNyBAQAogCQlicmVhazsKIAl9CiAKLQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfQVBFKQorCWlmICh0ZzNfZmxhZyh0cCwgRU5BQkxFX0FQRSkpCiAJCS8qIFdyaXRlIG91ciBoZWFydGJlYXQgdXBkYXRlIGludGVydmFsIHRvIEFQRS4gKi8KIAkJdGczX2FwZV93cml0ZTMyKHRwLCBURzNfQVBFX0hPU1RfSEVBUlRCRUFUX0lOVF9NUywKIAkJCQlBUEVfSE9TVF9IRUFSVEJFQVRfSU5UX0RJU0FCTEUpOwpAQCAtODY4OCw3ICs4Nzk3LDIxIEBACiAJVEczX1NUQVRfQUREMzIoJnNwLT5yeF91bmRlcnNpemVfcGFja2V0cywgTUFDX1JYX1NUQVRTX1VOREVSU0laRSk7CiAKIAlURzNfU1RBVF9BREQzMigmc3AtPnJ4YmRzX2VtcHR5LCBSQ1ZMUENfTk9fUkNWX0JEX0NOVCk7Ci0JVEczX1NUQVRfQUREMzIoJnNwLT5yeF9kaXNjYXJkcywgUkNWTFBDX0lOX0RJU0NBUkRTX0NOVCk7CisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzE3ICYmCisJICAgIHRwLT5wY2lfY2hpcF9yZXZfaWQgIT0gQ0hJUFJFVl9JRF81NzE5X0EwICYmCisJICAgIHRwLT5wY2lfY2hpcF9yZXZfaWQgIT0gQ0hJUFJFVl9JRF81NzIwX0EwKSB7CisJCVRHM19TVEFUX0FERDMyKCZzcC0+cnhfZGlzY2FyZHMsIFJDVkxQQ19JTl9ESVNDQVJEU19DTlQpOworCX0gZWxzZSB7CisJCXUzMiB2YWwgPSB0cjMyKEhPU1RDQ19GTE9XX0FUVE4pOworCQl2YWwgPSAodmFsICYgSE9TVENDX0ZMT1dfQVRUTl9NQlVGX0xXTSkgPyAxIDogMDsKKwkJaWYgKHZhbCkgeworCQkJdHczMihIT1NUQ0NfRkxPV19BVFROLCBIT1NUQ0NfRkxPV19BVFROX01CVUZfTFdNKTsKKwkJCXNwLT5yeF9kaXNjYXJkcy5sb3cgKz0gdmFsOworCQkJaWYgKHNwLT5yeF9kaXNjYXJkcy5sb3cgPCB2YWwpCisJCQkJc3AtPnJ4X2Rpc2NhcmRzLmhpZ2ggKz0gMTsKKwkJfQorCQlzcC0+bWJ1Zl9sd21fdGhyZXNoX2hpdCA9IHNwLT5yeF9kaXNjYXJkczsKKwl9CiAJVEczX1NUQVRfQUREMzIoJnNwLT5yeF9lcnJvcnMsIFJDVkxQQ19JTl9FUlJPUlNfQ05UKTsKIH0KIApAQCAtODcwMSw3ICs4ODI0LDcgQEAKIAogCXNwaW5fbG9jaygmdHAtPmxvY2spOwogCi0JaWYgKCEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1RBR0dFRF9TVEFUVVMpKSB7CisJaWYgKCF0ZzNfZmxhZyh0cCwgVEFHR0VEX1NUQVRVUykpIHsKIAkJLyogQWxsIG9mIHRoaXMgZ2FyYmFnZSBpcyBiZWNhdXNlIHdoZW4gdXNpbmcgbm9uLXRhZ2dlZAogCQkgKiBJUlEgc3RhdHVzIHRoZSBtYWlsYm94L3N0YXR1c19ibG9jayBwcm90b2NvbCB0aGUgY2hpcAogCQkgKiB1c2VzIHdpdGggdGhlIGNwdSBpcyByYWNlIHByb25lLgpAQCAtODcxNSw3ICs4ODM4LDcgQEAKIAkJfQogCiAJCWlmICghKHRyMzIoV0RNQUNfTU9ERSkgJiBXRE1BQ19NT0RFX0VOQUJMRSkpIHsKLQkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX1JFU1RBUlRfVElNRVI7CisJCQl0ZzNfZmxhZ19zZXQodHAsIFJFU1RBUlRfVElNRVIpOwogCQkJc3Bpbl91bmxvY2soJnRwLT5sb2NrKTsKIAkJCXNjaGVkdWxlX3dvcmsoJnRwLT5yZXNldF90YXNrKTsKIAkJCXJldHVybjsKQEAgLTg3MjQsMTYgKzg4NDcsMTMgQEAKIAogCS8qIFRoaXMgcGFydCBvbmx5IHJ1bnMgb25jZSBwZXIgc2Vjb25kLiAqLwogCWlmICghLS10cC0+dGltZXJfY291bnRlcikgewotCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpCisJCWlmICh0ZzNfZmxhZyh0cCwgNTcwNV9QTFVTKSkKIAkJCXRnM19wZXJpb2RpY19mZXRjaF9zdGF0cyh0cCk7CiAKLQkJaWYgKHRwLT5zZXRscGljbnQgJiYgIS0tdHAtPnNldGxwaWNudCkgewotCQkJdTMyIHZhbCA9IHRyMzIoVEczX0NQTVVfRUVFX01PREUpOwotCQkJdHczMihURzNfQ1BNVV9FRUVfTU9ERSwKLQkJCSAgICAgdmFsIHwgVEczX0NQTVVfRUVFTURfTFBJX0VOQUJMRSk7Ci0JCX0KKwkJaWYgKHRwLT5zZXRscGljbnQgJiYgIS0tdHAtPnNldGxwaWNudCkKKwkJCXRnM19waHlfZWVlX2VuYWJsZSh0cCk7CiAKLQkJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19VU0VfTElOS0NIR19SRUcpIHsKKwkJaWYgKHRnM19mbGFnKHRwLCBVU0VfTElOS0NIR19SRUcpKSB7CiAJCQl1MzIgbWFjX3N0YXQ7CiAJCQlpbnQgcGh5X2V2ZW50OwogCkBAIC04NzQ4LDcgKzg4NjgsNyBAQAogCiAJCQlpZiAocGh5X2V2ZW50KQogCQkJCXRnM19zZXR1cF9waHkodHAsIDApOwotCQl9IGVsc2UgaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19QT0xMX1NFUkRFUykgeworCQl9IGVsc2UgaWYgKHRnM19mbGFnKHRwLCBQT0xMX1NFUkRFUykpIHsKIAkJCXUzMiBtYWNfc3RhdCA9IHRyMzIoTUFDX1NUQVRVUyk7CiAJCQlpbnQgbmVlZF9zZXR1cCA9IDA7CiAKQEAgLTg3NzMsNyArODg5Myw3IEBACiAJCQkJdGczX3NldHVwX3BoeSh0cCwgMCk7CiAJCQl9CiAJCX0gZWxzZSBpZiAoKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX01JSV9TRVJERVMpICYmCi0JCQkgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzgwX0NMQVNTKSkgeworCQkJICAgdGczX2ZsYWcodHAsIDU3ODBfQ0xBU1MpKSB7CiAJCQl0ZzNfc2VyZGVzX3BhcmFsbGVsX2RldGVjdCh0cCk7CiAJCX0KIApAQCAtODc5OCw4ICs4OTE4LDcgQEAKIAkgKiByZXNldHMuCiAJICovCiAJaWYgKCEtLXRwLT5hc2ZfY291bnRlcikgewotCQlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKSAmJgotCQkgICAgISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9BUEUpKSB7CisJCWlmICh0ZzNfZmxhZyh0cCwgRU5BQkxFX0FTRikgJiYgIXRnM19mbGFnKHRwLCBFTkFCTEVfQVBFKSkgewogCQkJdGczX3dhaXRfZm9yX2V2ZW50X2Fjayh0cCk7CiAKIAkJCXRnM193cml0ZV9tZW0odHAsIE5JQ19TUkFNX0ZXX0NNRF9NQk9YLApAQCAtODgzNSwxNiArODk1NCwxNiBAQAogCQluYW1lW0lGTkFNU0laLTFdID0gMDsKIAl9CiAKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9VU0lOR19NU0lfT1JfTVNJWCkgeworCWlmICh0ZzNfZmxhZyh0cCwgVVNJTkdfTVNJKSB8fCB0ZzNfZmxhZyh0cCwgVVNJTkdfTVNJWCkpIHsKIAkJZm4gPSB0ZzNfbXNpOwotCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl8xU0hPVF9NU0kpCisJCWlmICh0ZzNfZmxhZyh0cCwgMVNIT1RfTVNJKSkKIAkJCWZuID0gdGczX21zaV8xc2hvdDsKLQkJZmxhZ3MgPSBJUlFGX1NBTVBMRV9SQU5ET007CisJCWZsYWdzID0gMDsKIAl9IGVsc2UgewogCQlmbiA9IHRnM19pbnRlcnJ1cHQ7Ci0JCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfVEFHR0VEX1NUQVRVUykKKwkJaWYgKHRnM19mbGFnKHRwLCBUQUdHRURfU1RBVFVTKSkKIAkJCWZuID0gdGczX2ludGVycnVwdF90YWdnZWQ7Ci0JCWZsYWdzID0gSVJRRl9TSEFSRUQgfCBJUlFGX1NBTVBMRV9SQU5ET007CisJCWZsYWdzID0gSVJRRl9TSEFSRUQ7CiAJfQogCiAJcmV0dXJuIHJlcXVlc3RfaXJxKHRuYXBpLT5pcnFfdmVjLCBmbiwgZmxhZ3MsIG5hbWUsIHRuYXBpKTsKQEAgLTg4NjgsOCArODk4Nyw3IEBACiAJICogVHVybiBvZmYgTVNJIG9uZSBzaG90IG1vZGUuICBPdGhlcndpc2UgdGhpcyB0ZXN0IGhhcyBubwogCSAqIG9ic2VydmFibGUgd2F5IHRvIGtub3cgd2hldGhlciB0aGUgaW50ZXJydXB0IHdhcyBkZWxpdmVyZWQuCiAJICovCi0JaWYgKCh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3MTdfUExVUykgJiYKLQkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVVNJTkdfTVNJKSkgeworCWlmICh0ZzNfZmxhZyh0cCwgNTc3NjVfUExVUykgJiYgdGczX2ZsYWcodHAsIFVTSU5HX01TSSkpIHsKIAkJdmFsID0gdHIzMihNU0dJTlRfTU9ERSkgfCBNU0dJTlRfTU9ERV9PTkVfU0hPVF9ESVNBQkxFOwogCQl0dzMyKE1TR0lOVF9NT0RFLCB2YWwpOwogCX0KQEAgLTg5MTEsOCArOTAyOSw3IEBACiAKIAlpZiAoaW50cl9vaykgewogCQkvKiBSZWVuYWJsZSBNU0kgb25lIHNob3QgbW9kZS4gKi8KLQkJaWYgKCh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3MTdfUExVUykgJiYKLQkJICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1VTSU5HX01TSSkpIHsKKwkJaWYgKHRnM19mbGFnKHRwLCA1Nzc2NV9QTFVTKSAmJiB0ZzNfZmxhZyh0cCwgVVNJTkdfTVNJKSkgewogCQkJdmFsID0gdHIzMihNU0dJTlRfTU9ERSkgJiB+TVNHSU5UX01PREVfT05FX1NIT1RfRElTQUJMRTsKIAkJCXR3MzIoTVNHSU5UX01PREUsIHZhbCk7CiAJCX0KQEAgLTg5MzAsNyArOTA0Nyw3IEBACiAJaW50IGVycjsKIAl1MTYgcGNpX2NtZDsKIAotCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVVNJTkdfTVNJKSkKKwlpZiAoIXRnM19mbGFnKHRwLCBVU0lOR19NU0kpKQogCQlyZXR1cm4gMDsKIAogCS8qIFR1cm4gb2ZmIFNFUlIgcmVwb3J0aW5nIGluIGNhc2UgTVNJIHRlcm1pbmF0ZXMgd2l0aCBNYXN0ZXIKQEAgLTg5NjAsNyArOTA3Nyw3IEBACiAKIAlwY2lfZGlzYWJsZV9tc2kodHAtPnBkZXYpOwogCi0JdHAtPnRnM19mbGFnczIgJj0gflRHM19GTEcyX1VTSU5HX01TSTsKKwl0ZzNfZmxhZ19jbGVhcih0cCwgVVNJTkdfTVNJKTsKIAl0cC0+bmFwaVswXS5pcnFfdmVjID0gdHAtPnBkZXYtPmlycTsKIAogCWVyciA9IHRnM19yZXF1ZXN0X2lycSh0cCwgMCk7CkBAIC05MDU3LDkgKzkxNzQsMTEgQEAKIAl9CiAKIAlpZiAodHAtPmlycV9jbnQgPiAxKSB7Ci0JCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX0VOQUJMRV9SU1M7Ci0JCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxOSkgewotCQkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfRU5BQkxFX1RTUzsKKwkJdGczX2ZsYWdfc2V0KHRwLCBFTkFCTEVfUlNTKTsKKworCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTkgfHwKKwkJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzIwKSB7CisJCQl0ZzNfZmxhZ19zZXQodHAsIEVOQUJMRV9UU1MpOwogCQkJbmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyh0cC0+ZGV2LCB0cC0+aXJxX2NudCAtIDEpOwogCQl9CiAJfQpAQCAtOTA2OSw4ICs5MTg4LDggQEAKIAogc3RhdGljIHZvaWQgdGczX2ludHNfaW5pdChzdHJ1Y3QgdGczICp0cCkKIHsKLQlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19TVVBQT1JUX01TSV9PUl9NU0lYKSAmJgotCSAgICAhKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19UQUdHRURfU1RBVFVTKSkgeworCWlmICgodGczX2ZsYWcodHAsIFNVUFBPUlRfTVNJKSB8fCB0ZzNfZmxhZyh0cCwgU1VQUE9SVF9NU0lYKSkgJiYKKwkgICAgIXRnM19mbGFnKHRwLCBUQUdHRURfU1RBVFVTKSkgewogCQkvKiBBbGwgTVNJIHN1cHBvcnRpbmcgY2hpcHMgc2hvdWxkIHN1cHBvcnQgdGFnZ2VkCiAJCSAqIHN0YXR1cy4gIEFzc2VydCB0aGF0IHRoaXMgaXMgdGhlIGNhc2UuCiAJCSAqLwpAQCAtOTA3OSwyMSArOTE5OCwxOSBAQAogCQlnb3RvIGRlZmNmZzsKIAl9CiAKLQlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19TVVBQT1JUX01TSVgpICYmIHRnM19lbmFibGVfbXNpeCh0cCkpCi0JCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX1VTSU5HX01TSVg7Ci0JZWxzZSBpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19TVVBQT1JUX01TSSkgJiYKLQkJIHBjaV9lbmFibGVfbXNpKHRwLT5wZGV2KSA9PSAwKQotCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9VU0lOR19NU0k7CisJaWYgKHRnM19mbGFnKHRwLCBTVVBQT1JUX01TSVgpICYmIHRnM19lbmFibGVfbXNpeCh0cCkpCisJCXRnM19mbGFnX3NldCh0cCwgVVNJTkdfTVNJWCk7CisJZWxzZSBpZiAodGczX2ZsYWcodHAsIFNVUFBPUlRfTVNJKSAmJiBwY2lfZW5hYmxlX21zaSh0cC0+cGRldikgPT0gMCkKKwkJdGczX2ZsYWdfc2V0KHRwLCBVU0lOR19NU0kpOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVVNJTkdfTVNJX09SX01TSVgpIHsKKwlpZiAodGczX2ZsYWcodHAsIFVTSU5HX01TSSkgfHwgdGczX2ZsYWcodHAsIFVTSU5HX01TSVgpKSB7CiAJCXUzMiBtc2lfbW9kZSA9IHRyMzIoTVNHSU5UX01PREUpOwotCQlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVVNJTkdfTVNJWCkgJiYKLQkJICAgIHRwLT5pcnFfY250ID4gMSkKKwkJaWYgKHRnM19mbGFnKHRwLCBVU0lOR19NU0lYKSAmJiB0cC0+aXJxX2NudCA+IDEpCiAJCQltc2lfbW9kZSB8PSBNU0dJTlRfTU9ERV9NVUxUSVZFQ19FTjsKIAkJdHczMihNU0dJTlRfTU9ERSwgbXNpX21vZGUgfCBNU0dJTlRfTU9ERV9FTkFCTEUpOwogCX0KIGRlZmNmZzoKLQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1VTSU5HX01TSVgpKSB7CisJaWYgKCF0ZzNfZmxhZyh0cCwgVVNJTkdfTVNJWCkpIHsKIAkJdHAtPmlycV9jbnQgPSAxOwogCQl0cC0+bmFwaVswXS5pcnFfdmVjID0gdHAtPnBkZXYtPmlycTsKIAkJbmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyh0cC0+ZGV2LCAxKTsKQEAgLTkxMDMsMTIgKzkyMjAsMTQgQEAKIAogc3RhdGljIHZvaWQgdGczX2ludHNfZmluaShzdHJ1Y3QgdGczICp0cCkKIHsKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9VU0lOR19NU0lYKQorCWlmICh0ZzNfZmxhZyh0cCwgVVNJTkdfTVNJWCkpCiAJCXBjaV9kaXNhYmxlX21zaXgodHAtPnBkZXYpOwotCWVsc2UgaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVVNJTkdfTVNJKQorCWVsc2UgaWYgKHRnM19mbGFnKHRwLCBVU0lOR19NU0kpKQogCQlwY2lfZGlzYWJsZV9tc2kodHAtPnBkZXYpOwotCXRwLT50ZzNfZmxhZ3MyICY9IH5URzNfRkxHMl9VU0lOR19NU0lfT1JfTVNJWDsKLQl0cC0+dGczX2ZsYWdzMyAmPSB+KFRHM19GTEczX0VOQUJMRV9SU1MgfCBURzNfRkxHM19FTkFCTEVfVFNTKTsKKwl0ZzNfZmxhZ19jbGVhcih0cCwgVVNJTkdfTVNJKTsKKwl0ZzNfZmxhZ19jbGVhcih0cCwgVVNJTkdfTVNJWCk7CisJdGczX2ZsYWdfY2xlYXIodHAsIEVOQUJMRV9SU1MpOworCXRnM19mbGFnX2NsZWFyKHRwLCBFTkFCTEVfVFNTKTsKIH0KIAogc3RhdGljIGludCB0ZzNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtOTEyMywxMCArOTI0MiwxMCBAQAogCQkJCXJldHVybiBlcnI7CiAJCX0gZWxzZSBpZiAoZXJyKSB7CiAJCQluZXRkZXZfd2Fybih0cC0+ZGV2LCAiVFNPIGNhcGFiaWxpdHkgZGlzYWJsZWRcbiIpOwotCQkJdHAtPnRnM19mbGFnczIgJj0gflRHM19GTEcyX1RTT19DQVBBQkxFOwotCQl9IGVsc2UgaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9UU09fQ0FQQUJMRSkpIHsKKwkJCXRnM19mbGFnX2NsZWFyKHRwLCBUU09fQ0FQQUJMRSk7CisJCX0gZWxzZSBpZiAoIXRnM19mbGFnKHRwLCBUU09fQ0FQQUJMRSkpIHsKIAkJCW5ldGRldl9ub3RpY2UodHAtPmRldiwgIlRTTyBjYXBhYmlsaXR5IHJlc3RvcmVkXG4iKTsKLQkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX1RTT19DQVBBQkxFOworCQkJdGczX2ZsYWdfc2V0KHRwLCBUU09fQ0FQQUJMRSk7CiAJCX0KIAl9CiAKQEAgLTkxMzksNyArOTI1OCw3IEBACiAJdGczX2Z1bGxfbG9jayh0cCwgMCk7CiAKIAl0ZzNfZGlzYWJsZV9pbnRzKHRwKTsKLQl0cC0+dGczX2ZsYWdzICY9IH5URzNfRkxBR19JTklUX0NPTVBMRVRFOworCXRnM19mbGFnX2NsZWFyKHRwLCBJTklUX0NPTVBMRVRFKTsKIAogCXRnM19mdWxsX3VubG9jayh0cCk7CiAKQEAgLTkxODAsNyArOTI5OSw3IEBACiAJCXRnM19oYWx0KHRwLCBSRVNFVF9LSU5EX1NIVVRET1dOLCAxKTsKIAkJdGczX2ZyZWVfcmluZ3ModHApOwogCX0gZWxzZSB7Ci0JCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfVEFHR0VEX1NUQVRVUykKKwkJaWYgKHRnM19mbGFnKHRwLCBUQUdHRURfU1RBVFVTKSkKIAkJCXRwLT50aW1lcl9vZmZzZXQgPSBIWjsKIAkJZWxzZQogCQkJdHAtPnRpbWVyX29mZnNldCA9IEhaIC8gMTA7CkBAIC05MjAyLDcgKzkzMjEsNyBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dDM7CiAKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9VU0lOR19NU0kpIHsKKwlpZiAodGczX2ZsYWcodHAsIFVTSU5HX01TSSkpIHsKIAkJZXJyID0gdGczX3Rlc3RfbXNpKHRwKTsKIAogCQlpZiAoZXJyKSB7CkBAIC05MjE0LDggKzkzMzMsNyBAQAogCQkJZ290byBlcnJfb3V0MjsKIAkJfQogCi0JCWlmICghKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTcxN19QTFVTKSAmJgotCQkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVVNJTkdfTVNJKSkgeworCQlpZiAoIXRnM19mbGFnKHRwLCA1Nzc2NV9QTFVTKSAmJiB0ZzNfZmxhZyh0cCwgVVNJTkdfTVNJKSkgewogCQkJdTMyIHZhbCA9IHRyMzIoUENJRV9UUkFOU0FDVElPTl9DRkcpOwogCiAJCQl0dzMyKFBDSUVfVFJBTlNBQ1RJT05fQ0ZHLApAQCAtOTIyOCwxMyArOTM0NiwyMCBAQAogCXRnM19mdWxsX2xvY2sodHAsIDApOwogCiAJYWRkX3RpbWVyKCZ0cC0+dGltZXIpOwotCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfSU5JVF9DT01QTEVURTsKKwl0ZzNfZmxhZ19zZXQodHAsIElOSVRfQ09NUExFVEUpOwogCXRnM19lbmFibGVfaW50cyh0cCk7CiAKIAl0ZzNfZnVsbF91bmxvY2sodHApOwogCiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhkZXYpOwogCisJLyoKKwkgKiBSZXNldCBsb29wYmFjayBmZWF0dXJlIGlmIGl0IHdhcyB0dXJuZWQgb24gd2hpbGUgdGhlIGRldmljZSB3YXMgZG93bgorCSAqIG1ha2Ugc3VyZSB0aGF0IGl0J3MgaW5zdGFsbGVkIHByb3Blcmx5IG5vdy4KKwkgKi8KKwlpZiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTE9PUEJBQ0spCisJCXRnM19zZXRfbG9vcGJhY2soZGV2LCBkZXYtPmZlYXR1cmVzKTsKKwogCXJldHVybiAwOwogCiBlcnJfb3V0MzoKQEAgLTkyNzcsNyArOTQwMiw3IEBACiAKIAl0ZzNfaGFsdCh0cCwgUkVTRVRfS0lORF9TSFVURE9XTiwgMSk7CiAJdGczX2ZyZWVfcmluZ3ModHApOwotCXRwLT50ZzNfZmxhZ3MgJj0gflRHM19GTEFHX0lOSVRfQ09NUExFVEU7CisJdGczX2ZsYWdfY2xlYXIodHAsIElOSVRfQ09NUExFVEUpOwogCiAJdGczX2Z1bGxfdW5sb2NrKHRwKTsKIApAQCAtOTQyNCw2ICs5NTQ5LDggQEAKIAlFU1RBVF9BREQobmljX2F2b2lkZWRfaXJxcyk7CiAJRVNUQVRfQUREKG5pY190eF90aHJlc2hvbGRfaGl0KTsKIAorCUVTVEFUX0FERChtYnVmX2x3bV90aHJlc2hfaGl0KTsKKwogCXJldHVybiBlc3RhdHM7CiB9CiAKQEAgLTk1MzQsNyArOTY2MSw3IEBACiAJLyogV2hlbiBBU0YgaXMgaW4gdXNlLCB3ZSBhbHdheXMga2VlcCB0aGUgUlhfTU9ERV9LRUVQX1ZMQU5fVEFHCiAJICogZmxhZyBjbGVhci4KIAkgKi8KLQlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikpCisJaWYgKCF0ZzNfZmxhZyh0cCwgRU5BQkxFX0FTRikpCiAJCXJ4X21vZGUgfD0gUlhfTU9ERV9LRUVQX1ZMQU5fVEFHOwogI2VuZGlmCiAKQEAgLTk1ODgsODIgKzk3MTUsMjYgQEAKIAl0ZzNfZnVsbF91bmxvY2sodHApOwogfQogCi0jZGVmaW5lIFRHM19SRUdEVU1QX0xFTgkJKDMyICogMTAyNCkKLQogc3RhdGljIGludCB0ZzNfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIFRHM19SRUdEVU1QX0xFTjsKKwlyZXR1cm4gVEczX1JFR19CTEtfU0laRTsKIH0KIAogc3RhdGljIHZvaWQgdGczX2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBldGh0b29sX3JlZ3MgKnJlZ3MsIHZvaWQgKl9wKQogewotCXUzMiAqcCA9IF9wOwogCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1OCAqb3JpZ19wID0gX3A7Ci0JaW50IGk7CiAKIAlyZWdzLT52ZXJzaW9uID0gMDsKIAotCW1lbXNldChwLCAwLCBURzNfUkVHRFVNUF9MRU4pOworCW1lbXNldChfcCwgMCwgVEczX1JFR19CTEtfU0laRSk7CiAKIAlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfSVNfTE9XX1BPV0VSKQogCQlyZXR1cm47CiAKIAl0ZzNfZnVsbF9sb2NrKHRwLCAwKTsKIAotI2RlZmluZSBfX0dFVF9SRUczMihyZWcpCSgqKHApKysgPSB0cjMyKHJlZykpCi0jZGVmaW5lIEdFVF9SRUczMl9MT09QKGJhc2UsIGxlbikJCVwKLWRvIHsJcCA9ICh1MzIgKikob3JpZ19wICsgKGJhc2UpKTsJCVwKLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpCQlcCi0JCV9fR0VUX1JFRzMyKChiYXNlKSArIGkpOwlcCi19IHdoaWxlICgwKQotI2RlZmluZSBHRVRfUkVHMzJfMShyZWcpCQkJXAotZG8gewlwID0gKHUzMiAqKShvcmlnX3AgKyAocmVnKSk7CQlcCi0JX19HRVRfUkVHMzIoKHJlZykpOwkJCVwKLX0gd2hpbGUgKDApCi0KLQlHRVRfUkVHMzJfTE9PUChURzNQQ0lfVkVORE9SLCAweGIwKTsKLQlHRVRfUkVHMzJfTE9PUChNQUlMQk9YX0lOVEVSUlVQVF8wLCAweDIwMCk7Ci0JR0VUX1JFRzMyX0xPT1AoTUFDX01PREUsIDB4NGYwKTsKLQlHRVRfUkVHMzJfTE9PUChTTkREQVRBSV9NT0RFLCAweGUwKTsKLQlHRVRfUkVHMzJfMShTTkREQVRBQ19NT0RFKTsKLQlHRVRfUkVHMzJfTE9PUChTTkRCRFNfTU9ERSwgMHg4MCk7Ci0JR0VUX1JFRzMyX0xPT1AoU05EQkRJX01PREUsIDB4NDgpOwotCUdFVF9SRUczMl8xKFNOREJEQ19NT0RFKTsKLQlHRVRfUkVHMzJfTE9PUChSQ1ZMUENfTU9ERSwgMHgyMCk7Ci0JR0VUX1JFRzMyX0xPT1AoUkNWTFBDX1NFTExTVF9CQVNFLCAweDE1Yyk7Ci0JR0VUX1JFRzMyX0xPT1AoUkNWREJESV9NT0RFLCAweDBjKTsKLQlHRVRfUkVHMzJfTE9PUChSQ1ZEQkRJX0pVTUJPX0JELCAweDNjKTsKLQlHRVRfUkVHMzJfTE9PUChSQ1ZEQkRJX0JEX1BST0RfSURYXzAsIDB4NDQpOwotCUdFVF9SRUczMl8xKFJDVkRDQ19NT0RFKTsKLQlHRVRfUkVHMzJfTE9PUChSQ1ZCRElfTU9ERSwgMHgyMCk7Ci0JR0VUX1JFRzMyX0xPT1AoUkNWQ0NfTU9ERSwgMHgxNCk7Ci0JR0VUX1JFRzMyX0xPT1AoUkNWTFNDX01PREUsIDB4MDgpOwotCUdFVF9SRUczMl8xKE1CRlJFRV9NT0RFKTsKLQlHRVRfUkVHMzJfTE9PUChIT1NUQ0NfTU9ERSwgMHgxMDApOwotCUdFVF9SRUczMl9MT09QKE1FTUFSQl9NT0RFLCAweDEwKTsKLQlHRVRfUkVHMzJfTE9PUChCVUZNR1JfTU9ERSwgMHg1OCk7Ci0JR0VUX1JFRzMyX0xPT1AoUkRNQUNfTU9ERSwgMHgwOCk7Ci0JR0VUX1JFRzMyX0xPT1AoV0RNQUNfTU9ERSwgMHgwOCk7Ci0JR0VUX1JFRzMyXzEoUlhfQ1BVX01PREUpOwotCUdFVF9SRUczMl8xKFJYX0NQVV9TVEFURSk7Ci0JR0VUX1JFRzMyXzEoUlhfQ1BVX1BHTUNUUik7Ci0JR0VUX1JFRzMyXzEoUlhfQ1BVX0hXQktQVCk7Ci0JR0VUX1JFRzMyXzEoVFhfQ1BVX01PREUpOwotCUdFVF9SRUczMl8xKFRYX0NQVV9TVEFURSk7Ci0JR0VUX1JFRzMyXzEoVFhfQ1BVX1BHTUNUUik7Ci0JR0VUX1JFRzMyX0xPT1AoR1JDTUJPWF9JTlRFUlJVUFRfMCwgMHgxMTApOwotCUdFVF9SRUczMl9MT09QKEZUUV9SRVNFVCwgMHgxMjApOwotCUdFVF9SRUczMl9MT09QKE1TR0lOVF9NT0RFLCAweDBjKTsKLQlHRVRfUkVHMzJfMShETUFDX01PREUpOwotCUdFVF9SRUczMl9MT09QKEdSQ19NT0RFLCAweDRjKTsKLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNKQotCQlHRVRfUkVHMzJfTE9PUChOVlJBTV9DTUQsIDB4MjQpOwotCi0jdW5kZWYgX19HRVRfUkVHMzIKLSN1bmRlZiBHRVRfUkVHMzJfTE9PUAotI3VuZGVmIEdFVF9SRUczMl8xCisJdGczX2R1bXBfbGVnYWN5X3JlZ3ModHAsICh1MzIgKilfcCk7CiAKIAl0ZzNfZnVsbF91bmxvY2sodHApOwogfQpAQCAtOTY4Myw3ICs5NzU0LDcgQEAKIAl1MzIgaSwgb2Zmc2V0LCBsZW4sIGJfb2Zmc2V0LCBiX2NvdW50OwogCV9fYmUzMiB2YWw7CiAKLQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19OT19OVlJBTSkKKwlpZiAodGczX2ZsYWcodHAsIE5PX05WUkFNKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfSVNfTE9XX1BPV0VSKQpAQCAtOTc1MSw3ICs5ODIyLDcgQEAKIAlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfSVNfTE9XX1BPV0VSKQogCQlyZXR1cm4gLUVBR0FJTjsKIAotCWlmICgodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19OT19OVlJBTSkgfHwKKwlpZiAodGczX2ZsYWcodHAsIE5PX05WUkFNKSB8fAogCSAgICBlZXByb20tPm1hZ2ljICE9IFRHM19FRVBST01fTUFHSUMpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC05ODAzLDcgKzk4NzQsNyBAQAogewogCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1VTRV9QSFlMSUIpIHsKKwlpZiAodGczX2ZsYWcodHAsIFVTRV9QSFlMSUIpKSB7CiAJCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CiAJCWlmICghKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0lTX0NPTk5FQ1RFRCkpCiAJCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTk4MzEsMTAgKzk5MDIsMTAgQEAKIAogCWNtZC0+YWR2ZXJ0aXNpbmcgPSB0cC0+bGlua19jb25maWcuYWR2ZXJ0aXNpbmc7CiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQljbWQtPnNwZWVkID0gdHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9zcGVlZDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgdHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9zcGVlZCk7CiAJCWNtZC0+ZHVwbGV4ID0gdHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9kdXBsZXg7CiAJfSBlbHNlIHsKLQkJY21kLT5zcGVlZCA9IFNQRUVEX0lOVkFMSUQ7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIFNQRUVEX0lOVkFMSUQpOwogCQljbWQtPmR1cGxleCA9IERVUExFWF9JTlZBTElEOwogCX0KIAljbWQtPnBoeV9hZGRyZXNzID0gdHAtPnBoeV9hZGRyOwpAQCAtOTg0OCw4ICs5OTE5LDkgQEAKIHN0YXRpYyBpbnQgdGczX3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIHNwZWVkID0gZXRodG9vbF9jbWRfc3BlZWQoY21kKTsKIAotCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1VTRV9QSFlMSUIpIHsKKwlpZiAodGczX2ZsYWcodHAsIFVTRV9QSFlMSUIpKSB7CiAJCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CiAJCWlmICghKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0lTX0NPTk5FQ1RFRCkpCiAJCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTk4OTcsMTQgKzk5NjksMTQgQEAKIAkJY21kLT5hZHZlcnRpc2luZyAmPSBtYXNrOwogCX0gZWxzZSB7CiAJCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19BTllfU0VSREVTKSB7Ci0JCQlpZiAoY21kLT5zcGVlZCAhPSBTUEVFRF8xMDAwKQorCQkJaWYgKHNwZWVkICE9IFNQRUVEXzEwMDApCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJCWlmIChjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfSBlbHNlIHsKLQkJCWlmIChjbWQtPnNwZWVkICE9IFNQRUVEXzEwMCAmJgotCQkJICAgIGNtZC0+c3BlZWQgIT0gU1BFRURfMTApCisJCQlpZiAoc3BlZWQgIT0gU1BFRURfMTAwICYmCisJCQkgICAgc3BlZWQgIT0gU1BFRURfMTApCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CkBAIC05OTE5LDcgKzk5OTEsNyBAQAogCQl0cC0+bGlua19jb25maWcuZHVwbGV4ID0gRFVQTEVYX0lOVkFMSUQ7CiAJfSBlbHNlIHsKIAkJdHAtPmxpbmtfY29uZmlnLmFkdmVydGlzaW5nID0gMDsKLQkJdHAtPmxpbmtfY29uZmlnLnNwZWVkID0gY21kLT5zcGVlZDsKKwkJdHAtPmxpbmtfY29uZmlnLnNwZWVkID0gc3BlZWQ7CiAJCXRwLT5saW5rX2NvbmZpZy5kdXBsZXggPSBjbWQtPmR1cGxleDsKIAl9CiAKQEAgLTk5NDksMTQgKzEwMDIxLDEyIEBACiB7CiAJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfV09MX0NBUCkgJiYKLQkgICAgZGV2aWNlX2Nhbl93YWtldXAoJnRwLT5wZGV2LT5kZXYpKQorCWlmICh0ZzNfZmxhZyh0cCwgV09MX0NBUCkgJiYgZGV2aWNlX2Nhbl93YWtldXAoJnRwLT5wZGV2LT5kZXYpKQogCQl3b2wtPnN1cHBvcnRlZCA9IFdBS0VfTUFHSUM7CiAJZWxzZQogCQl3b2wtPnN1cHBvcnRlZCA9IDA7CiAJd29sLT53b2xvcHRzID0gMDsKLQlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19XT0xfRU5BQkxFKSAmJgotCSAgICBkZXZpY2VfY2FuX3dha2V1cCgmdHAtPnBkZXYtPmRldikpCisJaWYgKHRnM19mbGFnKHRwLCBXT0xfRU5BQkxFKSAmJiBkZXZpY2VfY2FuX3dha2V1cCgmdHAtPnBkZXYtPmRldikpCiAJCXdvbC0+d29sb3B0cyA9IFdBS0VfTUFHSUM7CiAJbWVtc2V0KCZ3b2wtPnNvcGFzcywgMCwgc2l6ZW9mKHdvbC0+c29wYXNzKSk7CiB9CkBAIC05OTY5LDE5ICsxMDAzOSwxOCBAQAogCWlmICh3b2wtPndvbG9wdHMgJiB+V0FLRV9NQUdJQykKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKCh3b2wtPndvbG9wdHMgJiBXQUtFX01BR0lDKSAmJgotCSAgICAhKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfV09MX0NBUCkgJiYgZGV2aWNlX2Nhbl93YWtldXAoZHApKSkKKwkgICAgISh0ZzNfZmxhZyh0cCwgV09MX0NBUCkgJiYgZGV2aWNlX2Nhbl93YWtldXAoZHApKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUoZHAsIHdvbC0+d29sb3B0cyAmIFdBS0VfTUFHSUMpOwogCiAJc3Bpbl9sb2NrX2JoKCZ0cC0+bG9jayk7CiAJaWYgKGRldmljZV9tYXlfd2FrZXVwKGRwKSkKLQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19XT0xfRU5BQkxFOworCQl0ZzNfZmxhZ19zZXQodHAsIFdPTF9FTkFCTEUpOwogCWVsc2UKLQkJdHAtPnRnM19mbGFncyAmPSB+VEczX0ZMQUdfV09MX0VOQUJMRTsKKwkJdGczX2ZsYWdfY2xlYXIodHAsIFdPTF9FTkFCTEUpOwogCXNwaW5fdW5sb2NrX2JoKCZ0cC0+bG9jayk7CiAKLQogCXJldHVybiAwOwogfQogCkBAIC05OTk3LDMzICsxMDA2Niw2IEBACiAJdHAtPm1zZ19lbmFibGUgPSB2YWx1ZTsKIH0KIAotc3RhdGljIGludCB0ZzNfc2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgdmFsdWUpCi17Ci0Jc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9UU09fQ0FQQUJMRSkpIHsKLQkJaWYgKHZhbHVlKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJldHVybiAwOwotCX0KLQlpZiAoKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0lQVjZfQ1NVTSkgJiYKLQkgICAgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0hXX1RTT18yKSB8fAotCSAgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfSFdfVFNPXzMpKSkgewotCQlpZiAodmFsdWUpIHsKLQkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwotCQkJaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0hXX1RTT18zKSB8fAotCQkJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzYxIHx8Ci0JCQkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg0ICYmCi0JCQkgICAgIEdFVF9DSElQX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBDSElQUkVWXzU3ODRfQVgpIHx8Ci0JCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODUgfHwKLQkJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3ODApCi0JCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTT19FQ047Ci0JCX0gZWxzZQotCQkJZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfVFNPNiB8IE5FVElGX0ZfVFNPX0VDTik7Ci0JfQotCXJldHVybiBldGh0b29sX29wX3NldF90c28oZGV2LCB2YWx1ZSk7Ci19Ci0KIHN0YXRpYyBpbnQgdGczX253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xMDAzNSw3ICsxMDA3Nyw3IEBACiAJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX1BIWV9TRVJERVMpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfVVNFX1BIWUxJQikgeworCWlmICh0ZzNfZmxhZyh0cCwgVVNFX1BIWUxJQikpIHsKIAkJaWYgKCEodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfSVNfQ09OTkVDVEVEKSkKIAkJCXJldHVybiAtRUFHQUlOOwogCQlyID0gcGh5X3N0YXJ0X2FuZWcodHAtPm1kaW9fYnVzLT5waHlfbWFwW1RHM19QSFlfTUlJX0FERFJdKTsKQEAgLTEwMDY0LDcgKzEwMTA2LDcgQEAKIAogCWVyaW5nLT5yeF9tYXhfcGVuZGluZyA9IHRwLT5yeF9zdGRfcmluZ19tYXNrOwogCWVyaW5nLT5yeF9taW5pX21heF9wZW5kaW5nID0gMDsKLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0pVTUJPX1JJTkdfRU5BQkxFKQorCWlmICh0ZzNfZmxhZyh0cCwgSlVNQk9fUklOR19FTkFCTEUpKQogCQllcmluZy0+cnhfanVtYm9fbWF4X3BlbmRpbmcgPSB0cC0+cnhfam1iX3JpbmdfbWFzazsKIAllbHNlCiAJCWVyaW5nLT5yeF9qdW1ib19tYXhfcGVuZGluZyA9IDA7CkBAIC0xMDA3Myw3ICsxMDExNSw3IEBACiAKIAllcmluZy0+cnhfcGVuZGluZyA9IHRwLT5yeF9wZW5kaW5nOwogCWVyaW5nLT5yeF9taW5pX3BlbmRpbmcgPSAwOwotCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfSlVNQk9fUklOR19FTkFCTEUpCisJaWYgKHRnM19mbGFnKHRwLCBKVU1CT19SSU5HX0VOQUJMRSkpCiAJCWVyaW5nLT5yeF9qdW1ib19wZW5kaW5nID0gdHAtPnJ4X2p1bWJvX3BlbmRpbmc7CiAJZWxzZQogCQllcmluZy0+cnhfanVtYm9fcGVuZGluZyA9IDA7CkBAIC0xMDA5MCw3ICsxMDEzMiw3IEBACiAJICAgIChlcmluZy0+cnhfanVtYm9fcGVuZGluZyA+IHRwLT5yeF9qbWJfcmluZ19tYXNrKSB8fAogCSAgICAoZXJpbmctPnR4X3BlbmRpbmcgPiBURzNfVFhfUklOR19TSVpFIC0gMSkgfHwKIAkgICAgKGVyaW5nLT50eF9wZW5kaW5nIDw9IE1BWF9TS0JfRlJBR1MpIHx8Ci0JICAgICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9UU09fQlVHKSAmJgorCSAgICAodGczX2ZsYWcodHAsIFRTT19CVUcpICYmCiAJICAgICAoZXJpbmctPnR4X3BlbmRpbmcgPD0gKE1BWF9TS0JfRlJBR1MgKiAzKSkpKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMTAxMDQsNyArMTAxNDYsNyBAQAogCiAJdHAtPnJ4X3BlbmRpbmcgPSBlcmluZy0+cnhfcGVuZGluZzsKIAotCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9NQVhfUlhQRU5EXzY0KSAmJgorCWlmICh0ZzNfZmxhZyh0cCwgTUFYX1JYUEVORF82NCkgJiYKIAkgICAgdHAtPnJ4X3BlbmRpbmcgPiA2MykKIAkJdHAtPnJ4X3BlbmRpbmcgPSA2MzsKIAl0cC0+cnhfanVtYm9fcGVuZGluZyA9IGVyaW5nLT5yeF9qdW1ib19wZW5kaW5nOwpAQCAtMTAxMzEsNyArMTAxNzMsNyBAQAogewogCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWVwYXVzZS0+YXV0b25lZyA9ICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfUEFVU0VfQVVUT05FRykgIT0gMDsKKwllcGF1c2UtPmF1dG9uZWcgPSAhIXRnM19mbGFnKHRwLCBQQVVTRV9BVVRPTkVHKTsKIAogCWlmICh0cC0+bGlua19jb25maWcuYWN0aXZlX2Zsb3djdHJsICYgRkxPV19DVFJMX1JYKQogCQllcGF1c2UtPnJ4X3BhdXNlID0gMTsKQEAgLTEwMTQ5LDcgKzEwMTkxLDcgQEAKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGVyciA9IDA7CiAKLQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19VU0VfUEhZTElCKSB7CisJaWYgKHRnM19mbGFnKHRwLCBVU0VfUEhZTElCKSkgewogCQl1MzIgbmV3YWR2OwogCQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwogCkBAIC0xMDE3Nyw5ICsxMDIxOSw5IEBACiAJCQluZXdhZHYgPSAwOwogCiAJCWlmIChlcGF1c2UtPmF1dG9uZWcpCi0JCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX1BBVVNFX0FVVE9ORUc7CisJCQl0ZzNfZmxhZ19zZXQodHAsIFBBVVNFX0FVVE9ORUcpOwogCQllbHNlCi0JCQl0cC0+dGczX2ZsYWdzICY9IH5URzNfRkxBR19QQVVTRV9BVVRPTkVHOworCQkJdGczX2ZsYWdfY2xlYXIodHAsIFBBVVNFX0FVVE9ORUcpOwogCiAJCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19JU19DT05ORUNURUQpIHsKIAkJCXUzMiBvbGRhZHYgPSBwaHlkZXYtPmFkdmVydGlzaW5nICYKQEAgLTEwMjIxLDkgKzEwMjYzLDkgQEAKIAkJdGczX2Z1bGxfbG9jayh0cCwgaXJxX3N5bmMpOwogCiAJCWlmIChlcGF1c2UtPmF1dG9uZWcpCi0JCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX1BBVVNFX0FVVE9ORUc7CisJCQl0ZzNfZmxhZ19zZXQodHAsIFBBVVNFX0FVVE9ORUcpOwogCQllbHNlCi0JCQl0cC0+dGczX2ZsYWdzICY9IH5URzNfRkxBR19QQVVTRV9BVVRPTkVHOworCQkJdGczX2ZsYWdfY2xlYXIodHAsIFBBVVNFX0FVVE9ORUcpOwogCQlpZiAoZXBhdXNlLT5yeF9wYXVzZSkKIAkJCXRwLT5saW5rX2NvbmZpZy5mbG93Y3RybCB8PSBGTE9XX0NUUkxfUlg7CiAJCWVsc2UKQEAgLTEwMjQ2LDUwICsxMDI4OCw2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHUzMiB0ZzNfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0JcmV0dXJuICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfUlhfQ0hFQ0tTVU1TKSAhPSAwOwotfQotCi1zdGF0aWMgaW50IHRnM19zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0JST0tFTl9DSEVDS1NVTVMpIHsKLQkJaWYgKGRhdGEgIT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlzcGluX2xvY2tfYmgoJnRwLT5sb2NrKTsKLQlpZiAoZGF0YSkKLQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19SWF9DSEVDS1NVTVM7Ci0JZWxzZQotCQl0cC0+dGczX2ZsYWdzICY9IH5URzNfRkxBR19SWF9DSEVDS1NVTVM7Ci0Jc3Bpbl91bmxvY2tfYmgoJnRwLT5sb2NrKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHRnM19zZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0JST0tFTl9DSEVDS1NVTVMpIHsKLQkJaWYgKGRhdGEgIT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM181NzU1X1BMVVMpCi0JCWV0aHRvb2xfb3Bfc2V0X3R4X2lwdjZfY3N1bShkZXYsIGRhdGEpOwotCWVsc2UKLQkJZXRodG9vbF9vcF9zZXRfdHhfY3N1bShkZXYsIGRhdGEpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgdGczX2dldF9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzc2V0KQogewogCXN3aXRjaCAoc3NldCkgewpAQCAtMTAzMTcsMzUgKzEwMzE1LDM4IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHRnM19waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQorc3RhdGljIGludCB0ZzNfc2V0X3BoeXNfaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICBlbnVtIGV0aHRvb2xfcGh5c19pZF9zdGF0ZSBzdGF0ZSkKIHsKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGk7CiAKIAlpZiAoIW5ldGlmX3J1bm5pbmcodHAtPmRldikpCiAJCXJldHVybiAtRUFHQUlOOwogCi0JaWYgKGRhdGEgPT0gMCkKLQkJZGF0YSA9IFVJTlRfTUFYIC8gMjsKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBFVEhUT09MX0lEX0FDVElWRToKKwkJcmV0dXJuIDE7CS8qIGN5Y2xlIG9uL29mZiBvbmNlIHBlciBzZWNvbmQgKi8KIAotCWZvciAoaSA9IDA7IGkgPCAoZGF0YSAqIDIpOyBpKyspIHsKLQkJaWYgKChpICUgMikgPT0gMCkKLQkJCXR3MzIoTUFDX0xFRF9DVFJMLCBMRURfQ1RSTF9MTktMRURfT1ZFUlJJREUgfAotCQkJCQkgICBMRURfQ1RSTF8xMDAwTUJQU19PTiB8Ci0JCQkJCSAgIExFRF9DVFJMXzEwME1CUFNfT04gfAotCQkJCQkgICBMRURfQ1RSTF8xME1CUFNfT04gfAotCQkJCQkgICBMRURfQ1RSTF9UUkFGRklDX09WRVJSSURFIHwKLQkJCQkJICAgTEVEX0NUUkxfVFJBRkZJQ19CTElOSyB8Ci0JCQkJCSAgIExFRF9DVFJMX1RSQUZGSUNfTEVEKTsKKwljYXNlIEVUSFRPT0xfSURfT046CisJCXR3MzIoTUFDX0xFRF9DVFJMLCBMRURfQ1RSTF9MTktMRURfT1ZFUlJJREUgfAorCQkgICAgIExFRF9DVFJMXzEwMDBNQlBTX09OIHwKKwkJICAgICBMRURfQ1RSTF8xMDBNQlBTX09OIHwKKwkJICAgICBMRURfQ1RSTF8xME1CUFNfT04gfAorCQkgICAgIExFRF9DVFJMX1RSQUZGSUNfT1ZFUlJJREUgfAorCQkgICAgIExFRF9DVFJMX1RSQUZGSUNfQkxJTksgfAorCQkgICAgIExFRF9DVFJMX1RSQUZGSUNfTEVEKTsKKwkJYnJlYWs7CiAKLQkJZWxzZQotCQkJdHczMihNQUNfTEVEX0NUUkwsIExFRF9DVFJMX0xOS0xFRF9PVkVSUklERSB8Ci0JCQkJCSAgIExFRF9DVFJMX1RSQUZGSUNfT1ZFUlJJREUpOworCWNhc2UgRVRIVE9PTF9JRF9PRkY6CisJCXR3MzIoTUFDX0xFRF9DVFJMLCBMRURfQ1RSTF9MTktMRURfT1ZFUlJJREUgfAorCQkgICAgIExFRF9DVFJMX1RSQUZGSUNfT1ZFUlJJREUpOworCQlicmVhazsKIAotCQlpZiAobXNsZWVwX2ludGVycnVwdGlibGUoNTAwKSkKLQkJCWJyZWFrOworCWNhc2UgRVRIVE9PTF9JRF9JTkFDVElWRToKKwkJdHczMihNQUNfTEVEX0NUUkwsIHRwLT5sZWRfY3RybCk7CisJCWJyZWFrOwogCX0KLQl0dzMyKE1BQ19MRURfQ1RSTCwgdHAtPmxlZF9jdHJsKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xMDM1Niw2ICsxMDM1Nyw4MCBAQAogCW1lbWNweSh0bXBfc3RhdHMsIHRnM19nZXRfZXN0YXRzKHRwKSwgc2l6ZW9mKHRwLT5lc3RhdHMpKTsKIH0KIAorc3RhdGljIF9fYmUzMiAqIHRnM192cGRfcmVhZGJsb2NrKHN0cnVjdCB0ZzMgKnRwKQoreworCWludCBpOworCV9fYmUzMiAqYnVmOworCXUzMiBvZmZzZXQgPSAwLCBsZW4gPSAwOworCXUzMiBtYWdpYywgdmFsOworCisJaWYgKHRnM19mbGFnKHRwLCBOT19OVlJBTSkgfHwgdGczX252cmFtX3JlYWQodHAsIDAsICZtYWdpYykpCisJCXJldHVybiBOVUxMOworCisJaWYgKG1hZ2ljID09IFRHM19FRVBST01fTUFHSUMpIHsKKwkJZm9yIChvZmZzZXQgPSBURzNfTlZNX0RJUl9TVEFSVDsKKwkJICAgICBvZmZzZXQgPCBURzNfTlZNX0RJUl9FTkQ7CisJCSAgICAgb2Zmc2V0ICs9IFRHM19OVk1fRElSRU5UX1NJWkUpIHsKKwkJCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0LCAmdmFsKSkKKwkJCQlyZXR1cm4gTlVMTDsKKworCQkJaWYgKCh2YWwgPj4gVEczX05WTV9ESVJUWVBFX1NISUZUKSA9PQorCQkJICAgIFRHM19OVk1fRElSVFlQRV9FWFRWUEQpCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAob2Zmc2V0ICE9IFRHM19OVk1fRElSX0VORCkgeworCQkJbGVuID0gKHZhbCAmIFRHM19OVk1fRElSVFlQRV9MRU5NU0spICogNDsKKwkJCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0ICsgNCwgJm9mZnNldCkpCisJCQkJcmV0dXJuIE5VTEw7CisKKwkJCW9mZnNldCA9IHRnM19udnJhbV9sb2dpY2FsX2FkZHIodHAsIG9mZnNldCk7CisJCX0KKwl9CisKKwlpZiAoIW9mZnNldCB8fCAhbGVuKSB7CisJCW9mZnNldCA9IFRHM19OVk1fVlBEX09GRjsKKwkJbGVuID0gVEczX05WTV9WUERfTEVOOworCX0KKworCWJ1ZiA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVmID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJaWYgKG1hZ2ljID09IFRHM19FRVBST01fTUFHSUMpIHsKKwkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7CisJCQkvKiBUaGUgZGF0YSBpcyBpbiBsaXR0bGUtZW5kaWFuIGZvcm1hdCBpbiBOVlJBTS4KKwkJCSAqIFVzZSB0aGUgYmlnLWVuZGlhbiByZWFkIHJvdXRpbmVzIHRvIHByZXNlcnZlCisJCQkgKiB0aGUgYnl0ZSBvcmRlciBhcyBpdCBleGlzdHMgaW4gTlZSQU0uCisJCQkgKi8KKwkJCWlmICh0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCBvZmZzZXQgKyBpLCAmYnVmW2kvNF0pKQorCQkJCWdvdG8gZXJyb3I7CisJCX0KKwl9IGVsc2UgeworCQl1OCAqcHRyOworCQlzc2l6ZV90IGNudDsKKwkJdW5zaWduZWQgaW50IHBvcyA9IDA7CisKKwkJcHRyID0gKHU4ICopJmJ1ZlswXTsKKwkJZm9yIChpID0gMDsgcG9zIDwgbGVuICYmIGkgPCAzOyBpKyssIHBvcyArPSBjbnQsIHB0ciArPSBjbnQpIHsKKwkJCWNudCA9IHBjaV9yZWFkX3ZwZCh0cC0+cGRldiwgcG9zLAorCQkJCQkgICBsZW4gLSBwb3MsIHB0cik7CisJCQlpZiAoY250ID09IC1FVElNRURPVVQgfHwgY250ID09IC1FSU5UUikKKwkJCQljbnQgPSAwOworCQkJZWxzZSBpZiAoY250IDwgMCkKKwkJCQlnb3RvIGVycm9yOworCQl9CisJCWlmIChwb3MgIT0gbGVuKQorCQkJZ290byBlcnJvcjsKKwl9CisKKwlyZXR1cm4gYnVmOworCitlcnJvcjoKKwlrZnJlZShidWYpOworCXJldHVybiBOVUxMOworfQorCiAjZGVmaW5lIE5WUkFNX1RFU1RfU0laRSAweDEwMAogI2RlZmluZSBOVlJBTV9TRUxGQk9PVF9GT1JNQVQxXzBfU0laRQkweDE0CiAjZGVmaW5lIE5WUkFNX1NFTEZCT09UX0ZPUk1BVDFfMl9TSVpFCTB4MTgKQEAgLTEwMzY5LDcgKzEwNDQ0LDcgQEAKIAlfX2JlMzIgKmJ1ZjsKIAlpbnQgaSwgaiwgaywgZXJyID0gMCwgc2l6ZTsKIAotCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX05PX05WUkFNKQorCWlmICh0ZzNfZmxhZyh0cCwgTk9fTlZSQU0pKQogCQlyZXR1cm4gMDsKIAogCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgMCwgJm1hZ2ljKSAhPSAwKQpAQCAtMTA0OTUsMTQgKzEwNTcwLDExIEBACiAJaWYgKGNzdW0gIT0gbGUzMl90b19jcHUoYnVmWzB4ZmMvNF0pKQogCQlnb3RvIG91dDsKIAotCWZvciAoaSA9IDA7IGkgPCBURzNfTlZNX1ZQRF9MRU47IGkgKz0gNCkgewotCQkvKiBUaGUgZGF0YSBpcyBpbiBsaXR0bGUtZW5kaWFuIGZvcm1hdCBpbiBOVlJBTS4KLQkJICogVXNlIHRoZSBiaWctZW5kaWFuIHJlYWQgcm91dGluZXMgdG8gcHJlc2VydmUKLQkJICogdGhlIGJ5dGUgb3JkZXIgYXMgaXQgZXhpc3RzIGluIE5WUkFNLgotCQkgKi8KLQkJaWYgKHRnM19udnJhbV9yZWFkX2JlMzIodHAsIFRHM19OVk1fVlBEX09GRiArIGksICZidWZbaS80XSkpCi0JCQlnb3RvIG91dDsKLQl9CisJa2ZyZWUoYnVmKTsKKworCWJ1ZiA9IHRnM192cGRfcmVhZGJsb2NrKHRwKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlpID0gcGNpX3ZwZF9maW5kX3RhZygodTggKilidWYsIDAsIFRHM19OVk1fVlBEX0xFTiwKIAkJCSAgICAgUENJX1ZQRF9MUkRUX1JPX0RBVEEpOwpAQCAtMTA3MTQsOSArMTA3ODYsOSBAQAogCX07CiAKIAlpc181NzA1ID0gaXNfNTc1MCA9IDA7Ci0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSB7CisJaWYgKHRnM19mbGFnKHRwLCA1NzA1X1BMVVMpKSB7CiAJCWlzXzU3MDUgPSAxOwotCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzUwX1BMVVMpCisJCWlmICh0ZzNfZmxhZyh0cCwgNTc1MF9QTFVTKSkKIAkJCWlzXzU3NTAgPSAxOwogCX0KIApAQCAtMTA3MjcsNyArMTA3OTksNyBAQAogCQlpZiAoIWlzXzU3MDUgJiYgKHJlZ190YmxbaV0uZmxhZ3MgJiBURzNfRkxfNTcwNSkpCiAJCQljb250aW51ZTsKIAotCQlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfSVNfNTc4OCkgJiYKKwkJaWYgKHRnM19mbGFnKHRwLCBJU181Nzg4KSAmJgogCQkgICAgKHJlZ190YmxbaV0uZmxhZ3MgJiBURzNfRkxfTk9UXzU3ODgpKQogCQkJY29udGludWU7CiAKQEAgLTEwODUwLDE2ICsxMDkyMiwxNSBAQAogCWludCBlcnIgPSAwOwogCWludCBpOwogCi0JaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3IHx8Ci0JICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE5KQorCWlmICh0ZzNfZmxhZyh0cCwgNTcxN19QTFVTKSkKIAkJbWVtX3RibCA9IG1lbV90YmxfNTcxNzsKIAllbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3NjUpCiAJCW1lbV90YmwgPSBtZW1fdGJsXzU3NzY1OwotCWVsc2UgaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTc1NV9QTFVTKQorCWVsc2UgaWYgKHRnM19mbGFnKHRwLCA1NzU1X1BMVVMpKQogCQltZW1fdGJsID0gbWVtX3RibF81NzU1OwogCWVsc2UgaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2KQogCQltZW1fdGJsID0gbWVtX3RibF81OTA2OwotCWVsc2UgaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKQorCWVsc2UgaWYgKHRnM19mbGFnKHRwLCA1NzA1X1BMVVMpKQogCQltZW1fdGJsID0gbWVtX3RibF81NzA1OwogCWVsc2UKIAkJbWVtX3RibCA9IG1lbV90YmxfNTcweDsKQEAgLTEwODc1LDExICsxMDk0NiwzNSBAQAogCiAjZGVmaW5lIFRHM19NQUNfTE9PUEJBQ0sJMAogI2RlZmluZSBURzNfUEhZX0xPT1BCQUNLCTEKKyNkZWZpbmUgVEczX1RTT19MT09QQkFDSwkyCiAKLXN0YXRpYyBpbnQgdGczX3J1bl9sb29wYmFjayhzdHJ1Y3QgdGczICp0cCwgaW50IGxvb3BiYWNrX21vZGUpCisjZGVmaW5lIFRHM19UU09fTVNTCQk1MDAKKworI2RlZmluZSBURzNfVFNPX0lQX0hEUl9MRU4JMjAKKyNkZWZpbmUgVEczX1RTT19UQ1BfSERSX0xFTgkyMAorI2RlZmluZSBURzNfVFNPX1RDUF9PUFRfTEVOCTEyCisKK3N0YXRpYyBjb25zdCB1OCB0ZzNfdHNvX2hlYWRlcltdID0geworMHgwOCwgMHgwMCwKKzB4NDUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDQwLCAweDAwLAorMHg0MCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MGEsIDB4MDAsIDB4MDAsIDB4MDEsCisweDBhLCAweDAwLCAweDAwLCAweDAyLAorMHgwZCwgMHgwMCwgMHhlMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsCisweDAwLCAweDAwLCAweDAyLCAweDAwLAorMHg4MCwgMHgxMCwgMHgxMCwgMHgwMCwKKzB4MTQsIDB4MDksIDB4MDAsIDB4MDAsCisweDAxLCAweDAxLCAweDA4LCAweDBhLAorMHgxMSwgMHgxMSwgMHgxMSwgMHgxMSwKKzB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsCit9OworCitzdGF0aWMgaW50IHRnM19ydW5fbG9vcGJhY2soc3RydWN0IHRnMyAqdHAsIHUzMiBwa3RzeiwgaW50IGxvb3BiYWNrX21vZGUpCiB7CiAJdTMyIG1hY19tb2RlLCByeF9zdGFydF9pZHgsIHJ4X2lkeCwgdHhfaWR4LCBvcGFxdWVfa2V5OwotCXUzMiBkZXNjX2lkeCwgY29hbF9ub3c7CisJdTMyIGJhc2VfZmxhZ3MgPSAwLCBtc3MgPSAwLCBkZXNjX2lkeCwgY29hbF9ub3csIGRhdGFfb2ZmLCB2YWw7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKnJ4X3NrYjsKIAl1OCAqdHhfZGF0YTsKIAlkbWFfYWRkcl90IG1hcDsKQEAgLTEwODkxLDkgKzEwOTg2LDkgQEAKIAl0bmFwaSA9ICZ0cC0+bmFwaVswXTsKIAlybmFwaSA9ICZ0cC0+bmFwaVswXTsKIAlpZiAodHAtPmlycV9jbnQgPiAxKSB7Ci0JCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9SU1MpCisJCWlmICh0ZzNfZmxhZyh0cCwgRU5BQkxFX1JTUykpCiAJCQlybmFwaSA9ICZ0cC0+bmFwaVsxXTsKLQkJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX1RTUykKKwkJaWYgKHRnM19mbGFnKHRwLCBFTkFCTEVfVFNTKSkKIAkJCXRuYXBpID0gJnRwLT5uYXBpWzFdOwogCX0KIAljb2FsX25vdyA9IHRuYXBpLT5jb2FsX25vdyB8IHJuYXBpLT5jb2FsX25vdzsKQEAgLTEwOTA1LDIyICsxMTAwMCwyMCBAQAogCQkgKiBhbGwgbmV3ZXIgQVNJQyByZXZpc2lvbnMuCiAJCSAqLwogCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODAgfHwKLQkJICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfQ1BNVV9QUkVTRU5UKSkKKwkJICAgIHRnM19mbGFnKHRwLCBDUE1VX1BSRVNFTlQpKQogCQkJcmV0dXJuIDA7CiAKIAkJbWFjX21vZGUgPSB0cC0+bWFjX21vZGUgJgogCQkJICAgfihNQUNfTU9ERV9QT1JUX01PREVfTUFTSyB8IE1BQ19NT0RFX0hBTEZfRFVQTEVYKTsKIAkJbWFjX21vZGUgfD0gTUFDX01PREVfUE9SVF9JTlRfTFBCQUNLOwotCQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykpCisJCWlmICghdGczX2ZsYWcodHAsIDU3MDVfUExVUykpCiAJCQltYWNfbW9kZSB8PSBNQUNfTU9ERV9MSU5LX1BPTEFSSVRZOwogCQlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfMTBfMTAwX09OTFkpCiAJCQltYWNfbW9kZSB8PSBNQUNfTU9ERV9QT1JUX01PREVfTUlJOwogCQllbHNlCiAJCQltYWNfbW9kZSB8PSBNQUNfTU9ERV9QT1JUX01PREVfR01JSTsKIAkJdHczMihNQUNfTU9ERSwgbWFjX21vZGUpOwotCX0gZWxzZSBpZiAobG9vcGJhY2tfbW9kZSA9PSBURzNfUEhZX0xPT1BCQUNLKSB7Ci0JCXUzMiB2YWw7Ci0KKwl9IGVsc2UgewogCQlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfSVNfRkVUKSB7CiAJCQl0ZzNfcGh5X2ZldF90b2dnbGVfYXBkKHRwLCBmYWxzZSk7CiAJCQl2YWwgPSBCTUNSX0xPT1BCQUNLIHwgQk1DUl9GVUxMRFBMWCB8IEJNQ1JfU1BFRUQxMDA7CkBAIC0xMDk2OCwxMyArMTEwNjEsMTEgQEAKIAkJCQlicmVhazsKIAkJCW1kZWxheSgxKTsKIAkJfQotCX0gZWxzZSB7Ci0JCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWVyciA9IC1FSU87CiAKLQl0eF9sZW4gPSAxNTE0OworCXR4X2xlbiA9IHBrdHN6OwogCXNrYiA9IG5ldGRldl9hbGxvY19za2IodHAtPmRldiwgdHhfbGVuKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMDk4Myw5ICsxMTA3NCw1OCBAQAogCW1lbWNweSh0eF9kYXRhLCB0cC0+ZGV2LT5kZXZfYWRkciwgNik7CiAJbWVtc2V0KHR4X2RhdGEgKyA2LCAweDAsIDgpOwogCi0JdHczMihNQUNfUlhfTVRVX1NJWkUsIHR4X2xlbiArIDQpOworCXR3MzIoTUFDX1JYX01UVV9TSVpFLCB0eF9sZW4gKyBFVEhfRkNTX0xFTik7CiAKLQlmb3IgKGkgPSAxNDsgaSA8IHR4X2xlbjsgaSsrKQorCWlmIChsb29wYmFja19tb2RlID09IFRHM19UU09fTE9PUEJBQ0spIHsKKwkJc3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopJnR4X2RhdGFbRVRIX0hMRU5dOworCisJCXUzMiBoZHJfbGVuID0gVEczX1RTT19JUF9IRFJfTEVOICsgVEczX1RTT19UQ1BfSERSX0xFTiArCisJCQkgICAgICBURzNfVFNPX1RDUF9PUFRfTEVOOworCisJCW1lbWNweSh0eF9kYXRhICsgRVRIX0FMRU4gKiAyLCB0ZzNfdHNvX2hlYWRlciwKKwkJICAgICAgIHNpemVvZih0ZzNfdHNvX2hlYWRlcikpOworCQltc3MgPSBURzNfVFNPX01TUzsKKworCQl2YWwgPSB0eF9sZW4gLSBFVEhfQUxFTiAqIDIgLSBzaXplb2YodGczX3Rzb19oZWFkZXIpOworCQludW1fcGt0cyA9IERJVl9ST1VORF9VUCh2YWwsIFRHM19UU09fTVNTKTsKKworCQkvKiBTZXQgdGhlIHRvdGFsIGxlbmd0aCBmaWVsZCBpbiB0aGUgSVAgaGVhZGVyICovCisJCWlwaC0+dG90X2xlbiA9IGh0b25zKCh1MTYpKG1zcyArIGhkcl9sZW4pKTsKKworCQliYXNlX2ZsYWdzID0gKFRYRF9GTEFHX0NQVV9QUkVfRE1BIHwKKwkJCSAgICAgIFRYRF9GTEFHX0NQVV9QT1NUX0RNQSk7CisKKwkJaWYgKHRnM19mbGFnKHRwLCBIV19UU09fMSkgfHwKKwkJICAgIHRnM19mbGFnKHRwLCBIV19UU09fMikgfHwKKwkJICAgIHRnM19mbGFnKHRwLCBIV19UU09fMykpIHsKKwkJCXN0cnVjdCB0Y3BoZHIgKnRoOworCQkJdmFsID0gRVRIX0hMRU4gKyBURzNfVFNPX0lQX0hEUl9MRU47CisJCQl0aCA9IChzdHJ1Y3QgdGNwaGRyICopJnR4X2RhdGFbdmFsXTsKKwkJCXRoLT5jaGVjayA9IDA7CisJCX0gZWxzZQorCQkJYmFzZV9mbGFncyB8PSBUWERfRkxBR19UQ1BVRFBfQ1NVTTsKKworCQlpZiAodGczX2ZsYWcodHAsIEhXX1RTT18zKSkgeworCQkJbXNzIHw9IChoZHJfbGVuICYgMHhjKSA8PCAxMjsKKwkJCWlmIChoZHJfbGVuICYgMHgxMCkKKwkJCQliYXNlX2ZsYWdzIHw9IDB4MDAwMDAwMTA7CisJCQliYXNlX2ZsYWdzIHw9IChoZHJfbGVuICYgMHgzZTApIDw8IDU7CisJCX0gZWxzZSBpZiAodGczX2ZsYWcodHAsIEhXX1RTT18yKSkKKwkJCW1zcyB8PSBoZHJfbGVuIDw8IDk7CisJCWVsc2UgaWYgKHRnM19mbGFnKHRwLCBIV19UU09fMSkgfHwKKwkJCSBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwNSkgeworCQkJbXNzIHw9IChURzNfVFNPX1RDUF9PUFRfTEVOIDw8IDkpOworCQl9IGVsc2UgeworCQkJYmFzZV9mbGFncyB8PSAoVEczX1RTT19UQ1BfT1BUX0xFTiA8PCAxMCk7CisJCX0KKworCQlkYXRhX29mZiA9IEVUSF9BTEVOICogMiArIHNpemVvZih0ZzNfdHNvX2hlYWRlcik7CisJfSBlbHNlIHsKKwkJbnVtX3BrdHMgPSAxOworCQlkYXRhX29mZiA9IEVUSF9ITEVOOworCX0KKworCWZvciAoaSA9IGRhdGFfb2ZmOyBpIDwgdHhfbGVuOyBpKyspCiAJCXR4X2RhdGFbaV0gPSAodTgpIChpICYgMHhmZik7CiAKIAltYXAgPSBwY2lfbWFwX3NpbmdsZSh0cC0+cGRldiwgc2tiLT5kYXRhLCB0eF9sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwpAQCAtMTEwMDEsMTIgKzExMTQxLDEwIEBACiAKIAlyeF9zdGFydF9pZHggPSBybmFwaS0+aHdfc3RhdHVzLT5pZHhbMF0ucnhfcHJvZHVjZXI7CiAKLQludW1fcGt0cyA9IDA7Ci0KLQl0ZzNfc2V0X3R4ZCh0bmFwaSwgdG5hcGktPnR4X3Byb2QsIG1hcCwgdHhfbGVuLCAwLCAxKTsKKwl0ZzNfc2V0X3R4ZCh0bmFwaSwgdG5hcGktPnR4X3Byb2QsIG1hcCwgdHhfbGVuLAorCQkgICAgYmFzZV9mbGFncywgKG1zcyA8PCAxKSB8IDEpOwogCiAJdG5hcGktPnR4X3Byb2QrKzsKLQludW1fcGt0cysrOwogCiAJdHczMl90eF9tYm94KHRuYXBpLT5wcm9kbWJveCwgdG5hcGktPnR4X3Byb2QpOwogCXRyMzJfbWFpbGJveCh0bmFwaS0+cHJvZG1ib3gpOwpAQCAtMTEwMzYsMjkgKzExMTc0LDU2IEBACiAJaWYgKHJ4X2lkeCAhPSByeF9zdGFydF9pZHggKyBudW1fcGt0cykKIAkJZ290byBvdXQ7CiAKLQlkZXNjID0gJnJuYXBpLT5yeF9yY2Jbcnhfc3RhcnRfaWR4XTsKLQlkZXNjX2lkeCA9IGRlc2MtPm9wYXF1ZSAmIFJYRF9PUEFRVUVfSU5ERVhfTUFTSzsKLQlvcGFxdWVfa2V5ID0gZGVzYy0+b3BhcXVlICYgUlhEX09QQVFVRV9SSU5HX01BU0s7Ci0JaWYgKG9wYXF1ZV9rZXkgIT0gUlhEX09QQVFVRV9SSU5HX1NURCkKLQkJZ290byBvdXQ7CisJdmFsID0gZGF0YV9vZmY7CisJd2hpbGUgKHJ4X2lkeCAhPSByeF9zdGFydF9pZHgpIHsKKwkJZGVzYyA9ICZybmFwaS0+cnhfcmNiW3J4X3N0YXJ0X2lkeCsrXTsKKwkJZGVzY19pZHggPSBkZXNjLT5vcGFxdWUgJiBSWERfT1BBUVVFX0lOREVYX01BU0s7CisJCW9wYXF1ZV9rZXkgPSBkZXNjLT5vcGFxdWUgJiBSWERfT1BBUVVFX1JJTkdfTUFTSzsKIAotCWlmICgoZGVzYy0+ZXJyX3ZsYW4gJiBSWERfRVJSX01BU0spICE9IDAgJiYKLQkgICAgKGRlc2MtPmVycl92bGFuICE9IFJYRF9FUlJfT0REX05JQkJMRV9SQ1ZEX01JSSkpCi0JCWdvdG8gb3V0OwotCi0JcnhfbGVuID0gKChkZXNjLT5pZHhfbGVuICYgUlhEX0xFTl9NQVNLKSA+PiBSWERfTEVOX1NISUZUKSAtIDQ7Ci0JaWYgKHJ4X2xlbiAhPSB0eF9sZW4pCi0JCWdvdG8gb3V0OwotCi0Jcnhfc2tiID0gdHByLT5yeF9zdGRfYnVmZmVyc1tkZXNjX2lkeF0uc2tiOwotCi0JbWFwID0gZG1hX3VubWFwX2FkZHIoJnRwci0+cnhfc3RkX2J1ZmZlcnNbZGVzY19pZHhdLCBtYXBwaW5nKTsKLQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUodHAtPnBkZXYsIG1hcCwgcnhfbGVuLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCi0JZm9yIChpID0gMTQ7IGkgPCB0eF9sZW47IGkrKykgewotCQlpZiAoKihyeF9za2ItPmRhdGEgKyBpKSAhPSAodTgpIChpICYgMHhmZikpCisJCWlmICgoZGVzYy0+ZXJyX3ZsYW4gJiBSWERfRVJSX01BU0spICE9IDAgJiYKKwkJICAgIChkZXNjLT5lcnJfdmxhbiAhPSBSWERfRVJSX09ERF9OSUJCTEVfUkNWRF9NSUkpKQogCQkJZ290byBvdXQ7CisKKwkJcnhfbGVuID0gKChkZXNjLT5pZHhfbGVuICYgUlhEX0xFTl9NQVNLKSA+PiBSWERfTEVOX1NISUZUKQorCQkJIC0gRVRIX0ZDU19MRU47CisKKwkJaWYgKGxvb3BiYWNrX21vZGUgIT0gVEczX1RTT19MT09QQkFDSykgeworCQkJaWYgKHJ4X2xlbiAhPSB0eF9sZW4pCisJCQkJZ290byBvdXQ7CisKKwkJCWlmIChwa3RzeiA8PSBURzNfUlhfU1REX0RNQV9TWiAtIEVUSF9GQ1NfTEVOKSB7CisJCQkJaWYgKG9wYXF1ZV9rZXkgIT0gUlhEX09QQVFVRV9SSU5HX1NURCkKKwkJCQkJZ290byBvdXQ7CisJCQl9IGVsc2UgeworCQkJCWlmIChvcGFxdWVfa2V5ICE9IFJYRF9PUEFRVUVfUklOR19KVU1CTykKKwkJCQkJZ290byBvdXQ7CisJCQl9CisJCX0gZWxzZSBpZiAoKGRlc2MtPnR5cGVfZmxhZ3MgJiBSWERfRkxBR19UQ1BVRFBfQ1NVTSkgJiYKKwkJCSAgIChkZXNjLT5pcF90Y3BfY3N1bSAmIFJYRF9UQ1BDU1VNX01BU0spCisJCQkgICAgPj4gUlhEX1RDUENTVU1fU0hJRlQgIT0gMHhmZmZmKSB7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWlmIChvcGFxdWVfa2V5ID09IFJYRF9PUEFRVUVfUklOR19TVEQpIHsKKwkJCXJ4X3NrYiA9IHRwci0+cnhfc3RkX2J1ZmZlcnNbZGVzY19pZHhdLnNrYjsKKwkJCW1hcCA9IGRtYV91bm1hcF9hZGRyKCZ0cHItPnJ4X3N0ZF9idWZmZXJzW2Rlc2NfaWR4XSwKKwkJCQkJICAgICBtYXBwaW5nKTsKKwkJfSBlbHNlIGlmIChvcGFxdWVfa2V5ID09IFJYRF9PUEFRVUVfUklOR19KVU1CTykgeworCQkJcnhfc2tiID0gdHByLT5yeF9qbWJfYnVmZmVyc1tkZXNjX2lkeF0uc2tiOworCQkJbWFwID0gZG1hX3VubWFwX2FkZHIoJnRwci0+cnhfam1iX2J1ZmZlcnNbZGVzY19pZHhdLAorCQkJCQkgICAgIG1hcHBpbmcpOworCQl9IGVsc2UKKwkJCWdvdG8gb3V0OworCisJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdSh0cC0+cGRldiwgbWFwLCByeF9sZW4sCisJCQkJCSAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCisJCWZvciAoaSA9IGRhdGFfb2ZmOyBpIDwgcnhfbGVuOyBpKyssIHZhbCsrKSB7CisJCQlpZiAoKihyeF9za2ItPmRhdGEgKyBpKSAhPSAodTgpICh2YWwgJiAweGZmKSkKKwkJCQlnb3RvIG91dDsKKwkJfQogCX0KKwogCWVyciA9IDA7CiAKIAkvKiB0ZzNfZnJlZV9yaW5ncyB3aWxsIHVubWFwIGFuZCBmcmVlIHRoZSByeF9za2IgKi8KQEAgLTExMDY2LDEwICsxMTIzMSwxMyBAQAogCXJldHVybiBlcnI7CiB9CiAKLSNkZWZpbmUgVEczX01BQ19MT09QQkFDS19GQUlMRUQJCTEKLSNkZWZpbmUgVEczX1BIWV9MT09QQkFDS19GQUlMRUQJCTIKLSNkZWZpbmUgVEczX0xPT1BCQUNLX0ZBSUxFRAkJKFRHM19NQUNfTE9PUEJBQ0tfRkFJTEVEIHwJXAotCQkJCQkgVEczX1BIWV9MT09QQkFDS19GQUlMRUQpCisjZGVmaW5lIFRHM19TVERfTE9PUEJBQ0tfRkFJTEVECQkxCisjZGVmaW5lIFRHM19KTUJfTE9PUEJBQ0tfRkFJTEVECQkyCisjZGVmaW5lIFRHM19UU09fTE9PUEJBQ0tfRkFJTEVECQk0CisKKyNkZWZpbmUgVEczX01BQ19MT09QQkFDS19TSElGVAkJMAorI2RlZmluZSBURzNfUEhZX0xPT1BCQUNLX1NISUZUCQk0CisjZGVmaW5lIFRHM19MT09QQkFDS19GQUlMRUQJCTB4MDAwMDAwNzcKIAogc3RhdGljIGludCB0ZzNfdGVzdF9sb29wYmFjayhzdHJ1Y3QgdGczICp0cCkKIHsKQEAgLTExMDg4LDExICsxMTI1NiwyMCBAQAogCQlnb3RvIGRvbmU7CiAJfQogCisJaWYgKHRnM19mbGFnKHRwLCBFTkFCTEVfUlNTKSkgeworCQlpbnQgaTsKKworCQkvKiBSZXJvdXRlIGFsbCByeCBwYWNrZXRzIHRvIHRoZSAxc3QgcXVldWUgKi8KKwkJZm9yIChpID0gTUFDX1JTU19JTkRJUl9UQkxfMDsKKwkJICAgICBpIDwgTUFDX1JTU19JTkRJUl9UQkxfMCArIFRHM19SU1NfSU5ESVJfVEJMX1NJWkU7IGkgKz0gNCkKKwkJCXR3MzIoaSwgMHgwKTsKKwl9CisKIAkvKiBUdXJuIG9mZiBncGh5IGF1dG9wb3dlcmRvd24uICovCiAJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0VOQUJMRV9BUEQpCiAJCXRnM19waHlfdG9nZ2xlX2FwZCh0cCwgZmFsc2UpOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19DUE1VX1BSRVNFTlQpIHsKKwlpZiAodGczX2ZsYWcodHAsIENQTVVfUFJFU0VOVCkpIHsKIAkJaW50IGk7CiAJCXUzMiBzdGF0dXM7CiAKQEAgLTExMTE4LDEwICsxMTI5NSwxNCBAQAogCQkJCSAgQ1BNVV9DVFJMX0xJTktfQVdBUkVfTU9ERSkpOwogCX0KIAotCWlmICh0ZzNfcnVuX2xvb3BiYWNrKHRwLCBURzNfTUFDX0xPT1BCQUNLKSkKLQkJZXJyIHw9IFRHM19NQUNfTE9PUEJBQ0tfRkFJTEVEOworCWlmICh0ZzNfcnVuX2xvb3BiYWNrKHRwLCBFVEhfRlJBTUVfTEVOLCBURzNfTUFDX0xPT1BCQUNLKSkKKwkJZXJyIHw9IFRHM19TVERfTE9PUEJBQ0tfRkFJTEVEIDw8IFRHM19NQUNfTE9PUEJBQ0tfU0hJRlQ7CiAKLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0NQTVVfUFJFU0VOVCkgeworCWlmICh0ZzNfZmxhZyh0cCwgSlVNQk9fUklOR19FTkFCTEUpICYmCisJICAgIHRnM19ydW5fbG9vcGJhY2sodHAsIDkwMDAgKyBFVEhfSExFTiwgVEczX01BQ19MT09QQkFDSykpCisJCWVyciB8PSBURzNfSk1CX0xPT1BCQUNLX0ZBSUxFRCA8PCBURzNfTUFDX0xPT1BCQUNLX1NISUZUOworCisJaWYgKHRnM19mbGFnKHRwLCBDUE1VX1BSRVNFTlQpKSB7CiAJCXR3MzIoVEczX0NQTVVfQ1RSTCwgY3BtdWN0cmwpOwogCiAJCS8qIFJlbGVhc2UgdGhlIG11dGV4ICovCkBAIC0xMTEyOSw5ICsxMTMxMCwxOCBAQAogCX0KIAogCWlmICghKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX1BIWV9TRVJERVMpICYmCi0JICAgICEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19VU0VfUEhZTElCKSkgewotCQlpZiAodGczX3J1bl9sb29wYmFjayh0cCwgVEczX1BIWV9MT09QQkFDSykpCi0JCQllcnIgfD0gVEczX1BIWV9MT09QQkFDS19GQUlMRUQ7CisJICAgICF0ZzNfZmxhZyh0cCwgVVNFX1BIWUxJQikpIHsKKwkJaWYgKHRnM19ydW5fbG9vcGJhY2sodHAsIEVUSF9GUkFNRV9MRU4sIFRHM19QSFlfTE9PUEJBQ0spKQorCQkJZXJyIHw9IFRHM19TVERfTE9PUEJBQ0tfRkFJTEVEIDw8CisJCQkgICAgICAgVEczX1BIWV9MT09QQkFDS19TSElGVDsKKwkJaWYgKHRnM19mbGFnKHRwLCBUU09fQ0FQQUJMRSkgJiYKKwkJICAgIHRnM19ydW5fbG9vcGJhY2sodHAsIEVUSF9GUkFNRV9MRU4sIFRHM19UU09fTE9PUEJBQ0spKQorCQkJZXJyIHw9IFRHM19UU09fTE9PUEJBQ0tfRkFJTEVEIDw8CisJCQkgICAgICAgVEczX1BIWV9MT09QQkFDS19TSElGVDsKKwkJaWYgKHRnM19mbGFnKHRwLCBKVU1CT19SSU5HX0VOQUJMRSkgJiYKKwkJICAgIHRnM19ydW5fbG9vcGJhY2sodHAsIDkwMDAgKyBFVEhfSExFTiwgVEczX1BIWV9MT09QQkFDSykpCisJCQllcnIgfD0gVEczX0pNQl9MT09QQkFDS19GQUlMRUQgPDwKKwkJCSAgICAgICBURzNfUEhZX0xPT1BCQUNLX1NISUZUOwogCX0KIAogCS8qIFJlLWVuYWJsZSBncGh5IGF1dG9wb3dlcmRvd24uICovCkBAIC0xMTE3Niw3ICsxMTM2Niw3IEBACiAJCXRnM19oYWx0KHRwLCBSRVNFVF9LSU5EX1NVU1BFTkQsIDEpOwogCQllcnIgPSB0ZzNfbnZyYW1fbG9jayh0cCk7CiAJCXRnM19oYWx0X2NwdSh0cCwgUlhfQ1BVX0JBU0UpOwotCQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykpCisJCWlmICghdGczX2ZsYWcodHAsIDU3MDVfUExVUykpCiAJCQl0ZzNfaGFsdF9jcHUodHAsIFRYX0NQVV9CQVNFKTsKIAkJaWYgKCFlcnIpCiAJCQl0ZzNfbnZyYW1fdW5sb2NrKHRwKTsKQEAgLTExMjA2LDcgKzExMzk2LDcgQEAKIAogCQl0ZzNfaGFsdCh0cCwgUkVTRVRfS0lORF9TSFVURE9XTiwgMSk7CiAJCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKLQkJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfSU5JVF9DT01QTEVURTsKKwkJCXRnM19mbGFnX3NldCh0cCwgSU5JVF9DT01QTEVURSk7CiAJCQllcnIyID0gdGczX3Jlc3RhcnRfaHcodHAsIDEpOwogCQkJaWYgKCFlcnIyKQogCQkJCXRnM19uZXRpZl9zdGFydCh0cCk7CkBAIC0xMTIyOCw3ICsxMTQxOCw3IEBACiAJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBlcnI7CiAKLQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19VU0VfUEhZTElCKSB7CisJaWYgKHRnM19mbGFnKHRwLCBVU0VfUEhZTElCKSkgewogCQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwogCQlpZiAoISh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19JU19DT05ORUNURUQpKQogCQkJcmV0dXJuIC1FQUdBSU47CkBAIC0xMTI0Nyw5ICsxMTQzNyw3IEBACiAJCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19QSFlfU0VSREVTKQogCQkJYnJlYWs7CQkJLyogV2UgaGF2ZSBubyBQSFkgKi8KIAotCQlpZiAoKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0lTX0xPV19QT1dFUikgfHwKLQkJICAgICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0VOQUJMRV9BU0YpICYmCi0JCSAgICAgIW5ldGlmX3J1bm5pbmcoZGV2KSkpCisJCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQogCQkJcmV0dXJuIC1FQUdBSU47CiAKIAkJc3Bpbl9sb2NrX2JoKCZ0cC0+bG9jayk7CkBAIC0xMTI2NSw5ICsxMTQ1Myw3IEBACiAJCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19QSFlfU0VSREVTKQogCQkJYnJlYWs7CQkJLyogV2UgaGF2ZSBubyBQSFkgKi8KIAotCQlpZiAoKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0lTX0xPV19QT1dFUikgfHwKLQkJICAgICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0VOQUJMRV9BU0YpICYmCi0JCSAgICAgIW5ldGlmX3J1bm5pbmcoZGV2KSkpCisJCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQogCQkJcmV0dXJuIC1FQUdBSU47CiAKIAkJc3Bpbl9sb2NrX2JoKCZ0cC0+bG9jayk7CkBAIC0xMTI5Nyw3ICsxMTQ4Myw3IEBACiAJdTMyIG1heF9yeGNvYWxfdGlja19pbnQgPSAwLCBtYXhfdHhjb2FsX3RpY2tfaW50ID0gMDsKIAl1MzIgbWF4X3N0YXRfY29hbF90aWNrcyA9IDAsIG1pbl9zdGF0X2NvYWxfdGlja3MgPSAwOwogCi0JaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpKSB7CisJaWYgKCF0ZzNfZmxhZyh0cCwgNTcwNV9QTFVTKSkgewogCQltYXhfcnhjb2FsX3RpY2tfaW50ID0gTUFYX1JYQ09BTF9USUNLX0lOVDsKIAkJbWF4X3R4Y29hbF90aWNrX2ludCA9IE1BWF9UWENPQUxfVElDS19JTlQ7CiAJCW1heF9zdGF0X2NvYWxfdGlja3MgPSBNQVhfU1RBVF9DT0FMX1RJQ0tTOwpAQCAtMTEzNjQsMTQgKzExNTUwLDkgQEAKIAkuc2V0X3JpbmdwYXJhbQkJPSB0ZzNfc2V0X3JpbmdwYXJhbSwKIAkuZ2V0X3BhdXNlcGFyYW0JCT0gdGczX2dldF9wYXVzZXBhcmFtLAogCS5zZXRfcGF1c2VwYXJhbQkJPSB0ZzNfc2V0X3BhdXNlcGFyYW0sCi0JLmdldF9yeF9jc3VtCQk9IHRnM19nZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0JCT0gdGczX3NldF9yeF9jc3VtLAotCS5zZXRfdHhfY3N1bQkJPSB0ZzNfc2V0X3R4X2NzdW0sCi0JLnNldF9zZwkJCT0gZXRodG9vbF9vcF9zZXRfc2csCi0JLnNldF90c28JCT0gdGczX3NldF90c28sCiAJLnNlbGZfdGVzdAkJPSB0ZzNfc2VsZl90ZXN0LAogCS5nZXRfc3RyaW5ncwkJPSB0ZzNfZ2V0X3N0cmluZ3MsCi0JLnBoeXNfaWQJCT0gdGczX3BoeXNfaWQsCisJLnNldF9waHlzX2lkCQk9IHRnM19zZXRfcGh5c19pZCwKIAkuZ2V0X2V0aHRvb2xfc3RhdHMJPSB0ZzNfZ2V0X2V0aHRvb2xfc3RhdHMsCiAJLmdldF9jb2FsZXNjZQkJPSB0ZzNfZ2V0X2NvYWxlc2NlLAogCS5zZXRfY29hbGVzY2UJCT0gdGczX3NldF9jb2FsZXNjZSwKQEAgLTExNDE2LDggKzExNTk3LDcgQEAKIHsKIAl1MzIgdmFsOwogCi0JaWYgKCh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX05PX05WUkFNKSB8fAotCSAgICB0ZzNfbnZyYW1fcmVhZCh0cCwgMCwgJnZhbCkgIT0gMCkKKwlpZiAodGczX2ZsYWcodHAsIE5PX05WUkFNKSB8fCB0ZzNfbnZyYW1fcmVhZCh0cCwgMCwgJnZhbCkgIT0gMCkKIAkJcmV0dXJuOwogCiAJLyogU2VsZmJvb3QgZm9ybWF0ICovCkBAIC0xMTQ1MiwxOSArMTE2MzIsMTkgQEAKIAogCW52Y2ZnMSA9IHRyMzIoTlZSQU1fQ0ZHMSk7CiAJaWYgKG52Y2ZnMSAmIE5WUkFNX0NGRzFfRkxBU0hJRl9FTkFCKSB7Ci0JCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0ZMQVNIOworCQl0ZzNfZmxhZ19zZXQodHAsIEZMQVNIKTsKIAl9IGVsc2UgewogCQludmNmZzEgJj0gfk5WUkFNX0NGRzFfQ09NUEFUX0JZUEFTUzsKIAkJdHczMihOVlJBTV9DRkcxLCBudmNmZzEpOwogCX0KIAotCWlmICgoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTApIHx8Ci0JICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3ODBfQ0xBU1MpKSB7CisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzUwIHx8CisJICAgIHRnM19mbGFnKHRwLCA1NzgwX0NMQVNTKSkgewogCQlzd2l0Y2ggKG52Y2ZnMSAmIE5WUkFNX0NGRzFfVkVORE9SX01BU0spIHsKIAkJY2FzZSBGTEFTSF9WRU5ET1JfQVRNRUxfRkxBU0hfQlVGRkVSRUQ6CiAJCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19BVE1FTDsKIAkJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IEFUTUVMX0FUNDVEQjBYMUJfUEFHRV9TSVpFOwotCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKKwkJCXRnM19mbGFnX3NldCh0cCwgTlZSQU1fQlVGRkVSRUQpOwogCQkJYnJlYWs7CiAJCWNhc2UgRkxBU0hfVkVORE9SX0FUTUVMX0ZMQVNIX1VOQlVGRkVSRUQ6CiAJCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19BVE1FTDsKQEAgLTExNDczLDEyICsxMTY1MywxMiBAQAogCQljYXNlIEZMQVNIX1ZFTkRPUl9BVE1FTF9FRVBST006CiAJCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19BVE1FTDsKIAkJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IEFUTUVMX0FUMjRDNTEyX0NISVBfU0laRTsKLQkJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7CisJCQl0ZzNfZmxhZ19zZXQodHAsIE5WUkFNX0JVRkZFUkVEKTsKIAkJCWJyZWFrOwogCQljYXNlIEZMQVNIX1ZFTkRPUl9TVDoKIAkJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX1NUOwogCQkJdHAtPm52cmFtX3BhZ2VzaXplID0gU1RfTTQ1UEVYMF9QQUdFX1NJWkU7Ci0JCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEOworCQkJdGczX2ZsYWdfc2V0KHRwLCBOVlJBTV9CVUZGRVJFRCk7CiAJCQlicmVhazsKIAkJY2FzZSBGTEFTSF9WRU5ET1JfU0FJRlVOOgogCQkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfU0FJRlVOOwpAQCAtMTE0OTMsNyArMTE2NzMsNyBAQAogCX0gZWxzZSB7CiAJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX0FUTUVMOwogCQl0cC0+bnZyYW1fcGFnZXNpemUgPSBBVE1FTF9BVDQ1REIwWDFCX1BBR0VfU0laRTsKLQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKKwkJdGczX2ZsYWdfc2V0KHRwLCBOVlJBTV9CVUZGRVJFRCk7CiAJfQogfQogCkBAIC0xMTUzMiwyOSArMTE3MTIsMjkgQEAKIAogCS8qIE5WUkFNIHByb3RlY3Rpb24gZm9yIFRQTSAqLwogCWlmIChudmNmZzEgJiAoMSA8PCAyNykpCi0JCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX1BST1RFQ1RFRF9OVlJBTTsKKwkJdGczX2ZsYWdfc2V0KHRwLCBQUk9URUNURURfTlZSQU0pOwogCiAJc3dpdGNoIChudmNmZzEgJiBOVlJBTV9DRkcxXzU3NTJWRU5ET1JfTUFTSykgewogCWNhc2UgRkxBU0hfNTc1MlZFTkRPUl9BVE1FTF9FRVBST01fNjRLSFo6CiAJY2FzZSBGTEFTSF81NzUyVkVORE9SX0FUTUVMX0VFUFJPTV8zNzZLSFo6CiAJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX0FUTUVMOwotCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEOworCQl0ZzNfZmxhZ19zZXQodHAsIE5WUkFNX0JVRkZFUkVEKTsKIAkJYnJlYWs7CiAJY2FzZSBGTEFTSF81NzUyVkVORE9SX0FUTUVMX0ZMQVNIX0JVRkZFUkVEOgogCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19BVE1FTDsKLQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKLQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfRkxBU0g7CisJCXRnM19mbGFnX3NldCh0cCwgTlZSQU1fQlVGRkVSRUQpOworCQl0ZzNfZmxhZ19zZXQodHAsIEZMQVNIKTsKIAkJYnJlYWs7CiAJY2FzZSBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFMTA6CiAJY2FzZSBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFMjA6CiAJY2FzZSBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFNDA6CiAJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX1NUOwotCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEOwotCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9GTEFTSDsKKwkJdGczX2ZsYWdfc2V0KHRwLCBOVlJBTV9CVUZGRVJFRCk7CisJCXRnM19mbGFnX3NldCh0cCwgRkxBU0gpOwogCQlicmVhazsKIAl9CiAKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9GTEFTSCkgeworCWlmICh0ZzNfZmxhZyh0cCwgRkxBU0gpKSB7CiAJCXRnM19udnJhbV9nZXRfcGFnZXNpemUodHAsIG52Y2ZnMSk7CiAJfSBlbHNlIHsKIAkJLyogRm9yIGVlcHJvbSwgc2V0IHBhZ2VzaXplIHRvIG1heGltdW0gZWVwcm9tIHNpemUgKi8KQEAgLTExNTczLDcgKzExNzUzLDcgQEAKIAogCS8qIE5WUkFNIHByb3RlY3Rpb24gZm9yIFRQTSAqLwogCWlmIChudmNmZzEgJiAoMSA8PCAyNykpIHsKLQkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfUFJPVEVDVEVEX05WUkFNOworCQl0ZzNfZmxhZ19zZXQodHAsIFBST1RFQ1RFRF9OVlJBTSk7CiAJCXByb3RlY3QgPSAxOwogCX0KIApAQCAtMTE1ODQsOCArMTE3NjQsOCBAQAogCWNhc2UgRkxBU0hfNTc1NVZFTkRPUl9BVE1FTF9GTEFTSF8zOgogCWNhc2UgRkxBU0hfNTc1NVZFTkRPUl9BVE1FTF9GTEFTSF81OgogCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19BVE1FTDsKLQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKLQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfRkxBU0g7CisJCXRnM19mbGFnX3NldCh0cCwgTlZSQU1fQlVGRkVSRUQpOworCQl0ZzNfZmxhZ19zZXQodHAsIEZMQVNIKTsKIAkJdHAtPm52cmFtX3BhZ2VzaXplID0gMjY0OwogCQlpZiAobnZjZmcxID09IEZMQVNIXzU3NTVWRU5ET1JfQVRNRUxfRkxBU0hfMSB8fAogCQkgICAgbnZjZmcxID09IEZMQVNIXzU3NTVWRU5ET1JfQVRNRUxfRkxBU0hfNSkKQEAgLTExNjAyLDggKzExNzgyLDggQEAKIAljYXNlIEZMQVNIXzU3NTJWRU5ET1JfU1RfTTQ1UEUyMDoKIAljYXNlIEZMQVNIXzU3NTJWRU5ET1JfU1RfTTQ1UEU0MDoKIAkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfU1Q7Ci0JCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7Ci0JCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0ZMQVNIOworCQl0ZzNfZmxhZ19zZXQodHAsIE5WUkFNX0JVRkZFUkVEKTsKKwkJdGczX2ZsYWdfc2V0KHRwLCBGTEFTSCk7CiAJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDI1NjsKIAkJaWYgKG52Y2ZnMSA9PSBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFMTApCiAJCQl0cC0+bnZyYW1fc2l6ZSA9IChwcm90ZWN0ID8KQEAgLTExNjMzLDcgKzExODEzLDcgQEAKIAljYXNlIEZMQVNIXzU3ODdWRU5ET1JfTUlDUk9fRUVQUk9NXzY0S0haOgogCWNhc2UgRkxBU0hfNTc4N1ZFTkRPUl9NSUNST19FRVBST01fMzc2S0haOgogCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19BVE1FTDsKLQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKKwkJdGczX2ZsYWdfc2V0KHRwLCBOVlJBTV9CVUZGRVJFRCk7CiAJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IEFUTUVMX0FUMjRDNTEyX0NISVBfU0laRTsKIAogCQludmNmZzEgJj0gfk5WUkFNX0NGRzFfQ09NUEFUX0JZUEFTUzsKQEAgLTExNjQ0LDE2ICsxMTgyNCwxNiBAQAogCWNhc2UgRkxBU0hfNTc1NVZFTkRPUl9BVE1FTF9GTEFTSF8yOgogCWNhc2UgRkxBU0hfNTc1NVZFTkRPUl9BVE1FTF9GTEFTSF8zOgogCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19BVE1FTDsKLQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKLQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfRkxBU0g7CisJCXRnM19mbGFnX3NldCh0cCwgTlZSQU1fQlVGRkVSRUQpOworCQl0ZzNfZmxhZ19zZXQodHAsIEZMQVNIKTsKIAkJdHAtPm52cmFtX3BhZ2VzaXplID0gMjY0OwogCQlicmVhazsKIAljYXNlIEZMQVNIXzU3NTJWRU5ET1JfU1RfTTQ1UEUxMDoKIAljYXNlIEZMQVNIXzU3NTJWRU5ET1JfU1RfTTQ1UEUyMDoKIAljYXNlIEZMQVNIXzU3NTJWRU5ET1JfU1RfTTQ1UEU0MDoKIAkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfU1Q7Ci0JCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7Ci0JCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0ZMQVNIOworCQl0ZzNfZmxhZ19zZXQodHAsIE5WUkFNX0JVRkZFUkVEKTsKKwkJdGczX2ZsYWdfc2V0KHRwLCBGTEFTSCk7CiAJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDI1NjsKIAkJYnJlYWs7CiAJfQpAQCAtMTE2NjcsNyArMTE4NDcsNyBAQAogCiAJLyogTlZSQU0gcHJvdGVjdGlvbiBmb3IgVFBNICovCiAJaWYgKG52Y2ZnMSAmICgxIDw8IDI3KSkgewotCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19QUk9URUNURURfTlZSQU07CisJCXRnM19mbGFnX3NldCh0cCwgUFJPVEVDVEVEX05WUkFNKTsKIAkJcHJvdGVjdCA9IDE7CiAJfQogCkBAIC0xMTY4Miw5ICsxMTg2Miw5IEBACiAJY2FzZSBGTEFTSF81NzYxVkVORE9SX0FUTUVMX01EQjA4MUQ6CiAJY2FzZSBGTEFTSF81NzYxVkVORE9SX0FUTUVMX01EQjE2MUQ6CiAJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX0FUTUVMOwotCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEOwotCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9GTEFTSDsKLQkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfTk9fTlZSQU1fQUREUl9UUkFOUzsKKwkJdGczX2ZsYWdfc2V0KHRwLCBOVlJBTV9CVUZGRVJFRCk7CisJCXRnM19mbGFnX3NldCh0cCwgRkxBU0gpOworCQl0ZzNfZmxhZ19zZXQodHAsIE5PX05WUkFNX0FERFJfVFJBTlMpOwogCQl0cC0+bnZyYW1fcGFnZXNpemUgPSAyNTY7CiAJCWJyZWFrOwogCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9TVF9BX000NVBFMjA6CkBAIC0xMTY5Niw4ICsxMTg3Niw4IEBACiAJY2FzZSBGTEFTSF81NzYxVkVORE9SX1NUX01fTTQ1UEU4MDoKIAljYXNlIEZMQVNIXzU3NjFWRU5ET1JfU1RfTV9NNDVQRTE2OgogCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19TVDsKLQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKLQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfRkxBU0g7CisJCXRnM19mbGFnX3NldCh0cCwgTlZSQU1fQlVGRkVSRUQpOworCQl0ZzNfZmxhZ19zZXQodHAsIEZMQVNIKTsKIAkJdHAtPm52cmFtX3BhZ2VzaXplID0gMjU2OwogCQlicmVhazsKIAl9CkBAIC0xMTczNyw3ICsxMTkxNyw3IEBACiBzdGF0aWMgdm9pZCBfX2RldmluaXQgdGczX2dldF81OTA2X252cmFtX2luZm8oc3RydWN0IHRnMyAqdHApCiB7CiAJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfQVRNRUw7Ci0JdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKKwl0ZzNfZmxhZ19zZXQodHAsIE5WUkFNX0JVRkZFUkVEKTsKIAl0cC0+bnZyYW1fcGFnZXNpemUgPSBBVE1FTF9BVDI0QzUxMl9DSElQX1NJWkU7CiB9CiAKQEAgLTExNzUxLDcgKzExOTMxLDcgQEAKIAljYXNlIEZMQVNIXzU3ODdWRU5ET1JfQVRNRUxfRUVQUk9NXzM3NktIWjoKIAljYXNlIEZMQVNIXzU3ODdWRU5ET1JfTUlDUk9fRUVQUk9NXzM3NktIWjoKIAkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfQVRNRUw7Ci0JCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7CisJCXRnM19mbGFnX3NldCh0cCwgTlZSQU1fQlVGRkVSRUQpOwogCQl0cC0+bnZyYW1fcGFnZXNpemUgPSBBVE1FTF9BVDI0QzUxMl9DSElQX1NJWkU7CiAKIAkJbnZjZmcxICY9IH5OVlJBTV9DRkcxX0NPTVBBVF9CWVBBU1M7CkBAIC0xMTc2NSw4ICsxMTk0NSw4IEBACiAJY2FzZSBGTEFTSF81Nzc4MFZFTkRPUl9BVE1FTF9BVDQ1REIwNDFEOgogCWNhc2UgRkxBU0hfNTc3ODBWRU5ET1JfQVRNRUxfQVQ0NURCMDQxQjoKIAkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfQVRNRUw7Ci0JCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7Ci0JCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0ZMQVNIOworCQl0ZzNfZmxhZ19zZXQodHAsIE5WUkFNX0JVRkZFUkVEKTsKKwkJdGczX2ZsYWdfc2V0KHRwLCBGTEFTSCk7CiAKIAkJc3dpdGNoIChudmNmZzEgJiBOVlJBTV9DRkcxXzU3NTJWRU5ET1JfTUFTSykgewogCQljYXNlIEZMQVNIXzU3NTJWRU5ET1JfQVRNRUxfRkxBU0hfQlVGRkVSRUQ6CkBAIC0xMTc4OCw4ICsxMTk2OCw4IEBACiAJY2FzZSBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFMjA6CiAJY2FzZSBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFNDA6CiAJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX1NUOwotCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEOwotCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9GTEFTSDsKKwkJdGczX2ZsYWdfc2V0KHRwLCBOVlJBTV9CVUZGRVJFRCk7CisJCXRnM19mbGFnX3NldCh0cCwgRkxBU0gpOwogCiAJCXN3aXRjaCAobnZjZmcxICYgTlZSQU1fQ0ZHMV81NzUyVkVORE9SX01BU0spIHsKIAkJY2FzZSBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFMTA6CkBAIC0xMTgwNCwxMyArMTE5ODQsMTMgQEAKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OgotCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19OT19OVlJBTTsKKwkJdGczX2ZsYWdfc2V0KHRwLCBOT19OVlJBTSk7CiAJCXJldHVybjsKIAl9CiAKIAl0ZzNfbnZyYW1fZ2V0X3BhZ2VzaXplKHRwLCBudmNmZzEpOwogCWlmICh0cC0+bnZyYW1fcGFnZXNpemUgIT0gMjY0ICYmIHRwLT5udnJhbV9wYWdlc2l6ZSAhPSA1MjgpCi0JCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX05PX05WUkFNX0FERFJfVFJBTlM7CisJCXRnM19mbGFnX3NldCh0cCwgTk9fTlZSQU1fQUREUl9UUkFOUyk7CiB9CiAKIApAQCAtMTE4MjQsNyArMTIwMDQsNyBAQAogCWNhc2UgRkxBU0hfNTcxN1ZFTkRPUl9BVE1FTF9FRVBST006CiAJY2FzZSBGTEFTSF81NzE3VkVORE9SX01JQ1JPX0VFUFJPTToKIAkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfQVRNRUw7Ci0JCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7CisJCXRnM19mbGFnX3NldCh0cCwgTlZSQU1fQlVGRkVSRUQpOwogCQl0cC0+bnZyYW1fcGFnZXNpemUgPSBBVE1FTF9BVDI0QzUxMl9DSElQX1NJWkU7CiAKIAkJbnZjZmcxICY9IH5OVlJBTV9DRkcxX0NPTVBBVF9CWVBBU1M7CkBAIC0xMTgzOCwxMSArMTIwMTgsMTMgQEAKIAljYXNlIEZMQVNIXzU3MTdWRU5ET1JfQVRNRUxfQURCMDIxRDoKIAljYXNlIEZMQVNIXzU3MTdWRU5ET1JfQVRNRUxfNDVVU1BUOgogCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19BVE1FTDsKLQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKLQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfRkxBU0g7CisJCXRnM19mbGFnX3NldCh0cCwgTlZSQU1fQlVGRkVSRUQpOworCQl0ZzNfZmxhZ19zZXQodHAsIEZMQVNIKTsKIAogCQlzd2l0Y2ggKG52Y2ZnMSAmIE5WUkFNX0NGRzFfNTc1MlZFTkRPUl9NQVNLKSB7CiAJCWNhc2UgRkxBU0hfNTcxN1ZFTkRPUl9BVE1FTF9NREIwMjFEOgorCQkJLyogRGV0ZWN0IHNpemUgd2l0aCB0ZzNfbnZyYW1fZ2V0X3NpemUoKSAqLworCQkJYnJlYWs7CiAJCWNhc2UgRkxBU0hfNTcxN1ZFTkRPUl9BVE1FTF9BREIwMjFCOgogCQljYXNlIEZMQVNIXzU3MTdWRU5ET1JfQVRNRUxfQURCMDIxRDoKIAkJCXRwLT5udnJhbV9zaXplID0gVEczX05WUkFNX1NJWkVfMjU2S0I7CkBAIC0xMTg2MywxMyArMTIwNDUsMTUgQEAKIAljYXNlIEZMQVNIXzU3MTdWRU5ET1JfU1RfMjVVU1BUOgogCWNhc2UgRkxBU0hfNTcxN1ZFTkRPUl9TVF80NVVTUFQ6CiAJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX1NUOwotCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEOwotCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9GTEFTSDsKKwkJdGczX2ZsYWdfc2V0KHRwLCBOVlJBTV9CVUZGRVJFRCk7CisJCXRnM19mbGFnX3NldCh0cCwgRkxBU0gpOwogCiAJCXN3aXRjaCAobnZjZmcxICYgTlZSQU1fQ0ZHMV81NzUyVkVORE9SX01BU0spIHsKIAkJY2FzZSBGTEFTSF81NzE3VkVORE9SX1NUX01fTTI1UEUyMDoKLQkJY2FzZSBGTEFTSF81NzE3VkVORE9SX1NUX0FfTTI1UEUyMDoKIAkJY2FzZSBGTEFTSF81NzE3VkVORE9SX1NUX01fTTQ1UEUyMDoKKwkJCS8qIERldGVjdCBzaXplIHdpdGggdGczX252cmFtX2dldF9zaXplKCkgKi8KKwkJCWJyZWFrOworCQljYXNlIEZMQVNIXzU3MTdWRU5ET1JfU1RfQV9NMjVQRTIwOgogCQljYXNlIEZMQVNIXzU3MTdWRU5ET1JfU1RfQV9NNDVQRTIwOgogCQkJdHAtPm52cmFtX3NpemUgPSBURzNfTlZSQU1fU0laRV8yNTZLQjsKIAkJCWJyZWFrOwpAQCAtMTE4NzksMTMgKzEyMDYzLDEyNSBAQAogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX05PX05WUkFNOworCQl0ZzNfZmxhZ19zZXQodHAsIE5PX05WUkFNKTsKIAkJcmV0dXJuOwogCX0KIAogCXRnM19udnJhbV9nZXRfcGFnZXNpemUodHAsIG52Y2ZnMSk7CiAJaWYgKHRwLT5udnJhbV9wYWdlc2l6ZSAhPSAyNjQgJiYgdHAtPm52cmFtX3BhZ2VzaXplICE9IDUyOCkKLQkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfTk9fTlZSQU1fQUREUl9UUkFOUzsKKwkJdGczX2ZsYWdfc2V0KHRwLCBOT19OVlJBTV9BRERSX1RSQU5TKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IHRnM19nZXRfNTcyMF9udnJhbV9pbmZvKHN0cnVjdCB0ZzMgKnRwKQoreworCXUzMiBudmNmZzEsIG52bXBpbnN0cnA7CisKKwludmNmZzEgPSB0cjMyKE5WUkFNX0NGRzEpOworCW52bXBpbnN0cnAgPSBudmNmZzEgJiBOVlJBTV9DRkcxXzU3NTJWRU5ET1JfTUFTSzsKKworCXN3aXRjaCAobnZtcGluc3RycCkgeworCWNhc2UgRkxBU0hfNTcyMF9FRVBST01fSEQ6CisJY2FzZSBGTEFTSF81NzIwX0VFUFJPTV9MRDoKKwkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfQVRNRUw7CisJCXRnM19mbGFnX3NldCh0cCwgTlZSQU1fQlVGRkVSRUQpOworCisJCW52Y2ZnMSAmPSB+TlZSQU1fQ0ZHMV9DT01QQVRfQllQQVNTOworCQl0dzMyKE5WUkFNX0NGRzEsIG52Y2ZnMSk7CisJCWlmIChudm1waW5zdHJwID09IEZMQVNIXzU3MjBfRUVQUk9NX0hEKQorCQkJdHAtPm52cmFtX3BhZ2VzaXplID0gQVRNRUxfQVQyNEM1MTJfQ0hJUF9TSVpFOworCQllbHNlCisJCQl0cC0+bnZyYW1fcGFnZXNpemUgPSBBVE1FTF9BVDI0QzAyX0NISVBfU0laRTsKKwkJcmV0dXJuOworCWNhc2UgRkxBU0hfNTcyMFZFTkRPUl9NX0FUTUVMX0RCMDExRDoKKwljYXNlIEZMQVNIXzU3MjBWRU5ET1JfQV9BVE1FTF9EQjAxMUI6CisJY2FzZSBGTEFTSF81NzIwVkVORE9SX0FfQVRNRUxfREIwMTFEOgorCWNhc2UgRkxBU0hfNTcyMFZFTkRPUl9NX0FUTUVMX0RCMDIxRDoKKwljYXNlIEZMQVNIXzU3MjBWRU5ET1JfQV9BVE1FTF9EQjAyMUI6CisJY2FzZSBGTEFTSF81NzIwVkVORE9SX0FfQVRNRUxfREIwMjFEOgorCWNhc2UgRkxBU0hfNTcyMFZFTkRPUl9NX0FUTUVMX0RCMDQxRDoKKwljYXNlIEZMQVNIXzU3MjBWRU5ET1JfQV9BVE1FTF9EQjA0MUI6CisJY2FzZSBGTEFTSF81NzIwVkVORE9SX0FfQVRNRUxfREIwNDFEOgorCWNhc2UgRkxBU0hfNTcyMFZFTkRPUl9NX0FUTUVMX0RCMDgxRDoKKwljYXNlIEZMQVNIXzU3MjBWRU5ET1JfQV9BVE1FTF9EQjA4MUQ6CisJY2FzZSBGTEFTSF81NzIwVkVORE9SX0FUTUVMXzQ1VVNQVDoKKwkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfQVRNRUw7CisJCXRnM19mbGFnX3NldCh0cCwgTlZSQU1fQlVGRkVSRUQpOworCQl0ZzNfZmxhZ19zZXQodHAsIEZMQVNIKTsKKworCQlzd2l0Y2ggKG52bXBpbnN0cnApIHsKKwkJY2FzZSBGTEFTSF81NzIwVkVORE9SX01fQVRNRUxfREIwMjFEOgorCQljYXNlIEZMQVNIXzU3MjBWRU5ET1JfQV9BVE1FTF9EQjAyMUI6CisJCWNhc2UgRkxBU0hfNTcyMFZFTkRPUl9BX0FUTUVMX0RCMDIxRDoKKwkJCXRwLT5udnJhbV9zaXplID0gVEczX05WUkFNX1NJWkVfMjU2S0I7CisJCQlicmVhazsKKwkJY2FzZSBGTEFTSF81NzIwVkVORE9SX01fQVRNRUxfREIwNDFEOgorCQljYXNlIEZMQVNIXzU3MjBWRU5ET1JfQV9BVE1FTF9EQjA0MUI6CisJCWNhc2UgRkxBU0hfNTcyMFZFTkRPUl9BX0FUTUVMX0RCMDQxRDoKKwkJCXRwLT5udnJhbV9zaXplID0gVEczX05WUkFNX1NJWkVfNTEyS0I7CisJCQlicmVhazsKKwkJY2FzZSBGTEFTSF81NzIwVkVORE9SX01fQVRNRUxfREIwODFEOgorCQljYXNlIEZMQVNIXzU3MjBWRU5ET1JfQV9BVE1FTF9EQjA4MUQ6CisJCQl0cC0+bnZyYW1fc2l6ZSA9IFRHM19OVlJBTV9TSVpFXzFNQjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdHAtPm52cmFtX3NpemUgPSBURzNfTlZSQU1fU0laRV8xMjhLQjsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgRkxBU0hfNTcyMFZFTkRPUl9NX1NUX00yNVBFMTA6CisJY2FzZSBGTEFTSF81NzIwVkVORE9SX01fU1RfTTQ1UEUxMDoKKwljYXNlIEZMQVNIXzU3MjBWRU5ET1JfQV9TVF9NMjVQRTEwOgorCWNhc2UgRkxBU0hfNTcyMFZFTkRPUl9BX1NUX000NVBFMTA6CisJY2FzZSBGTEFTSF81NzIwVkVORE9SX01fU1RfTTI1UEUyMDoKKwljYXNlIEZMQVNIXzU3MjBWRU5ET1JfTV9TVF9NNDVQRTIwOgorCWNhc2UgRkxBU0hfNTcyMFZFTkRPUl9BX1NUX00yNVBFMjA6CisJY2FzZSBGTEFTSF81NzIwVkVORE9SX0FfU1RfTTQ1UEUyMDoKKwljYXNlIEZMQVNIXzU3MjBWRU5ET1JfTV9TVF9NMjVQRTQwOgorCWNhc2UgRkxBU0hfNTcyMFZFTkRPUl9NX1NUX000NVBFNDA6CisJY2FzZSBGTEFTSF81NzIwVkVORE9SX0FfU1RfTTI1UEU0MDoKKwljYXNlIEZMQVNIXzU3MjBWRU5ET1JfQV9TVF9NNDVQRTQwOgorCWNhc2UgRkxBU0hfNTcyMFZFTkRPUl9NX1NUX00yNVBFODA6CisJY2FzZSBGTEFTSF81NzIwVkVORE9SX01fU1RfTTQ1UEU4MDoKKwljYXNlIEZMQVNIXzU3MjBWRU5ET1JfQV9TVF9NMjVQRTgwOgorCWNhc2UgRkxBU0hfNTcyMFZFTkRPUl9BX1NUX000NVBFODA6CisJY2FzZSBGTEFTSF81NzIwVkVORE9SX1NUXzI1VVNQVDoKKwljYXNlIEZMQVNIXzU3MjBWRU5ET1JfU1RfNDVVU1BUOgorCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19TVDsKKwkJdGczX2ZsYWdfc2V0KHRwLCBOVlJBTV9CVUZGRVJFRCk7CisJCXRnM19mbGFnX3NldCh0cCwgRkxBU0gpOworCisJCXN3aXRjaCAobnZtcGluc3RycCkgeworCQljYXNlIEZMQVNIXzU3MjBWRU5ET1JfTV9TVF9NMjVQRTIwOgorCQljYXNlIEZMQVNIXzU3MjBWRU5ET1JfTV9TVF9NNDVQRTIwOgorCQljYXNlIEZMQVNIXzU3MjBWRU5ET1JfQV9TVF9NMjVQRTIwOgorCQljYXNlIEZMQVNIXzU3MjBWRU5ET1JfQV9TVF9NNDVQRTIwOgorCQkJdHAtPm52cmFtX3NpemUgPSBURzNfTlZSQU1fU0laRV8yNTZLQjsKKwkJCWJyZWFrOworCQljYXNlIEZMQVNIXzU3MjBWRU5ET1JfTV9TVF9NMjVQRTQwOgorCQljYXNlIEZMQVNIXzU3MjBWRU5ET1JfTV9TVF9NNDVQRTQwOgorCQljYXNlIEZMQVNIXzU3MjBWRU5ET1JfQV9TVF9NMjVQRTQwOgorCQljYXNlIEZMQVNIXzU3MjBWRU5ET1JfQV9TVF9NNDVQRTQwOgorCQkJdHAtPm52cmFtX3NpemUgPSBURzNfTlZSQU1fU0laRV81MTJLQjsKKwkJCWJyZWFrOworCQljYXNlIEZMQVNIXzU3MjBWRU5ET1JfTV9TVF9NMjVQRTgwOgorCQljYXNlIEZMQVNIXzU3MjBWRU5ET1JfTV9TVF9NNDVQRTgwOgorCQljYXNlIEZMQVNIXzU3MjBWRU5ET1JfQV9TVF9NMjVQRTgwOgorCQljYXNlIEZMQVNIXzU3MjBWRU5ET1JfQV9TVF9NNDVQRTgwOgorCQkJdHAtPm52cmFtX3NpemUgPSBURzNfTlZSQU1fU0laRV8xTUI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXRwLT5udnJhbV9zaXplID0gVEczX05WUkFNX1NJWkVfMTI4S0I7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQl0ZzNfZmxhZ19zZXQodHAsIE5PX05WUkFNKTsKKwkJcmV0dXJuOworCX0KKworCXRnM19udnJhbV9nZXRfcGFnZXNpemUodHAsIG52Y2ZnMSk7CisJaWYgKHRwLT5udnJhbV9wYWdlc2l6ZSAhPSAyNjQgJiYgdHAtPm52cmFtX3BhZ2VzaXplICE9IDUyOCkKKwkJdGczX2ZsYWdfc2V0KHRwLCBOT19OVlJBTV9BRERSX1RSQU5TKTsKIH0KIAogLyogQ2hpcHMgb3RoZXIgdGhhbiA1NzAwLzU3MDEgdXNlIHRoZSBOVlJBTSBmb3IgZmV0Y2hpbmcgaW5mby4gKi8KQEAgLTExOTA1LDcgKzEyMjAxLDcgQEAKIAogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTcwMCAmJgogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTcwMSkgewotCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNOworCQl0ZzNfZmxhZ19zZXQodHAsIE5WUkFNKTsKIAogCQlpZiAodGczX252cmFtX2xvY2sodHApKSB7CiAJCQluZXRkZXZfd2Fybih0cC0+ZGV2LApAQCAtMTE5MzUsNiArMTIyMzEsOCBAQAogCQllbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNyB8fAogCQkJIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE5KQogCQkJdGczX2dldF81NzE3X252cmFtX2luZm8odHApOworCQllbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcyMCkKKwkJCXRnM19nZXRfNTcyMF9udnJhbV9pbmZvKHRwKTsKIAkJZWxzZQogCQkJdGczX2dldF9udnJhbV9pbmZvKHRwKTsKIApAQCAtMTE5NDUsNyArMTIyNDMsOCBAQAogCQl0ZzNfbnZyYW1fdW5sb2NrKHRwKTsKIAogCX0gZWxzZSB7Ci0JCXRwLT50ZzNfZmxhZ3MgJj0gfihURzNfRkxBR19OVlJBTSB8IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEKTsKKwkJdGczX2ZsYWdfY2xlYXIodHAsIE5WUkFNKTsKKwkJdGczX2ZsYWdfY2xlYXIodHAsIE5WUkFNX0JVRkZFUkVEKTsKIAogCQl0ZzNfZ2V0X2VlcHJvbV9zaXplKHRwKTsKIAl9CkBAIC0xMjEyOCw3ICsxMjQyNyw3IEBACiAJCQludnJhbV9jbWQgfD0gTlZSQU1fQ01EX0xBU1Q7CiAKIAkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzUyICYmCi0JCSAgICAhKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTc1NV9QTFVTKSAmJgorCQkgICAgIXRnM19mbGFnKHRwLCA1NzU1X1BMVVMpICYmCiAJCSAgICAodHAtPm52cmFtX2plZGVjbnVtID09IEpFREVDX1NUKSAmJgogCQkgICAgKG52cmFtX2NtZCAmIE5WUkFNX0NNRF9GSVJTVCkpIHsKIApAQCAtMTIxMzgsNyArMTI0MzcsNyBAQAogCiAJCQkJYnJlYWs7CiAJCX0KLQkJaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9GTEFTSCkpIHsKKwkJaWYgKCF0ZzNfZmxhZyh0cCwgRkxBU0gpKSB7CiAJCQkvKiBXZSBhbHdheXMgZG8gY29tcGxldGUgd29yZCB3cml0ZXMgdG8gZWVwcm9tLiAqLwogCQkJbnZyYW1fY21kIHw9IChOVlJBTV9DTURfRklSU1QgfCBOVlJBTV9DTURfTEFTVCk7CiAJCX0KQEAgLTEyMTU0LDEzICsxMjQ1MywxMyBAQAogewogCWludCByZXQ7CiAKLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0VFUFJPTV9XUklURV9QUk9UKSB7CisJaWYgKHRnM19mbGFnKHRwLCBFRVBST01fV1JJVEVfUFJPVCkpIHsKIAkJdHczMl9mKEdSQ19MT0NBTF9DVFJMLCB0cC0+Z3JjX2xvY2FsX2N0cmwgJgogCQkgICAgICAgfkdSQ19MQ0xDVFJMX0dQSU9fT1VUUFVUMSk7CiAJCXVkZWxheSg0MCk7CiAJfQogCi0JaWYgKCEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNKSkgeworCWlmICghdGczX2ZsYWcodHAsIE5WUkFNKSkgewogCQlyZXQgPSB0ZzNfbnZyYW1fd3JpdGVfYmxvY2tfdXNpbmdfZWVwcm9tKHRwLCBvZmZzZXQsIGxlbiwgYnVmKTsKIAl9IGVsc2UgewogCQl1MzIgZ3JjX21vZGU7CkBAIC0xMjE3MCwxNiArMTI0NjksMTMgQEAKIAkJCXJldHVybiByZXQ7CiAKIAkJdGczX2VuYWJsZV9udnJhbV9hY2Nlc3ModHApOwotCQlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc1MF9QTFVTKSAmJgotCQkgICAgISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1BST1RFQ1RFRF9OVlJBTSkpCisJCWlmICh0ZzNfZmxhZyh0cCwgNTc1MF9QTFVTKSAmJiAhdGczX2ZsYWcodHAsIFBST1RFQ1RFRF9OVlJBTSkpCiAJCQl0dzMyKE5WUkFNX1dSSVRFMSwgMHg0MDYpOwogCiAJCWdyY19tb2RlID0gdHIzMihHUkNfTU9ERSk7CiAJCXR3MzIoR1JDX01PREUsIGdyY19tb2RlIHwgR1JDX01PREVfTlZSQU1fV1JfRU5BQkxFKTsKIAotCQlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTV9CVUZGRVJFRCkgfHwKLQkJCSEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9GTEFTSCkpIHsKLQorCQlpZiAodGczX2ZsYWcodHAsIE5WUkFNX0JVRkZFUkVEKSB8fCAhdGczX2ZsYWcodHAsIEZMQVNIKSkgewogCQkJcmV0ID0gdGczX252cmFtX3dyaXRlX2Jsb2NrX2J1ZmZlcmVkKHRwLCBvZmZzZXQsIGxlbiwKIAkJCQlidWYpOwogCQl9IGVsc2UgewpAQCAtMTIxOTQsNyArMTI0OTAsNyBAQAogCQl0ZzNfbnZyYW1fdW5sb2NrKHRwKTsKIAl9CiAKLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0VFUFJPTV9XUklURV9QUk9UKSB7CisJaWYgKHRnM19mbGFnKHRwLCBFRVBST01fV1JJVEVfUFJPVCkpIHsKIAkJdHczMl9mKEdSQ19MT0NBTF9DVFJMLCB0cC0+Z3JjX2xvY2FsX2N0cmwpOwogCQl1ZGVsYXkoNDApOwogCX0KQEAgLTEyMzE2LDE5ICsxMjYxMiwyMCBAQAogCXRwLT5sZWRfY3RybCA9IExFRF9DVFJMX01PREVfUEhZXzE7CiAKIAkvKiBBc3N1bWUgYW4gb25ib2FyZCBkZXZpY2UgYW5kIFdPTCBjYXBhYmxlIGJ5IGRlZmF1bHQuICAqLwotCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfRUVQUk9NX1dSSVRFX1BST1QgfCBURzNfRkxBR19XT0xfQ0FQOworCXRnM19mbGFnX3NldCh0cCwgRUVQUk9NX1dSSVRFX1BST1QpOworCXRnM19mbGFnX3NldCh0cCwgV09MX0NBUCk7CiAKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYpIHsKIAkJaWYgKCEodHIzMihQQ0lFX1RSQU5TQUNUSU9OX0NGRykgJiBQQ0lFX1RSQU5TX0NGR19MT00pKSB7Ci0JCQl0cC0+dGczX2ZsYWdzICY9IH5URzNfRkxBR19FRVBST01fV1JJVEVfUFJPVDsKLQkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0lTX05JQzsKKwkJCXRnM19mbGFnX2NsZWFyKHRwLCBFRVBST01fV1JJVEVfUFJPVCk7CisJCQl0ZzNfZmxhZ19zZXQodHAsIElTX05JQyk7CiAJCX0KIAkJdmFsID0gdHIzMihWQ1BVX0NGR1NIRFcpOwogCQlpZiAodmFsICYgVkNQVV9DRkdTSERXX0FTUE1fREJOQykKLQkJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfQVNQTV9XT1JLQVJPVU5EOworCQkJdGczX2ZsYWdfc2V0KHRwLCBBU1BNX1dPUktBUk9VTkQpOwogCQlpZiAoKHZhbCAmIFZDUFVfQ0ZHU0hEV19XT0xfRU5BQkxFKSAmJgogCQkgICAgKHZhbCAmIFZDUFVfQ0ZHU0hEV19XT0xfTUFHUEtUKSkgewotCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19XT0xfRU5BQkxFOworCQkJdGczX2ZsYWdfc2V0KHRwLCBXT0xfRU5BQkxFKTsKIAkJCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSgmdHAtPnBkZXYtPmRldiwgdHJ1ZSk7CiAJCX0KIAkJZ290byBkb25lOwpAQCAtMTIzNDUsOSArMTI2NDIsOSBAQAogCiAJCXRnM19yZWFkX21lbSh0cCwgTklDX1NSQU1fREFUQV9WRVIsICZ2ZXIpOwogCQl2ZXIgPj49IE5JQ19TUkFNX0RBVEFfVkVSX1NISUZUOwotCQlpZiAoKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzAwKSAmJgotCQkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzAxKSAmJgotCQkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzAzKSAmJgorCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MDAgJiYKKwkJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzAxICYmCisJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTcwMyAmJgogCQkgICAgKHZlciA+IDApICYmICh2ZXIgPCAweDEwMCkpCiAJCQl0ZzNfcmVhZF9tZW0odHAsIE5JQ19TUkFNX0RBVEFfQ0ZHXzIsICZjZmcyKTsKIApAQCAtMTIzNzEsMTMgKzEyNjY4LDEzIEBACiAKIAkJdHAtPnBoeV9pZCA9IGVlcHJvbV9waHlfaWQ7CiAJCWlmIChlZXByb21fcGh5X3NlcmRlcykgewotCQkJaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpKQorCQkJaWYgKCF0ZzNfZmxhZyh0cCwgNTcwNV9QTFVTKSkKIAkJCQl0cC0+cGh5X2ZsYWdzIHw9IFRHM19QSFlGTEdfUEhZX1NFUkRFUzsKIAkJCWVsc2UKIAkJCQl0cC0+cGh5X2ZsYWdzIHw9IFRHM19QSFlGTEdfTUlJX1NFUkRFUzsKIAkJfQogCi0JCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3NTBfUExVUykKKwkJaWYgKHRnM19mbGFnKHRwLCA1NzUwX1BMVVMpKQogCQkJbGVkX2NmZyA9IGNmZzIgJiAoTklDX1NSQU1fREFUQV9DRkdfTEVEX01PREVfTUFTSyB8CiAJCQkJICAgIFNIQVNUQV9FWFRfTEVEX01PREVfTUFTSyk7CiAJCWVsc2UKQEAgLTEyNDM3LDM0ICsxMjczNCwzNCBAQAogCQkJdHAtPmxlZF9jdHJsID0gTEVEX0NUUkxfTU9ERV9QSFlfMTsKIAogCQlpZiAobmljX2NmZyAmIE5JQ19TUkFNX0RBVEFfQ0ZHX0VFUFJPTV9XUCkgewotCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19FRVBST01fV1JJVEVfUFJPVDsKKwkJCXRnM19mbGFnX3NldCh0cCwgRUVQUk9NX1dSSVRFX1BST1QpOwogCQkJaWYgKCh0cC0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PQogCQkJICAgICBQQ0lfVkVORE9SX0lEX0FSSU1BKSAmJgogCQkJICAgICh0cC0+cGRldi0+c3Vic3lzdGVtX2RldmljZSA9PSAweDIwNWEgfHwKIAkJCSAgICAgdHAtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHgyMDYzKSkKLQkJCQl0cC0+dGczX2ZsYWdzICY9IH5URzNfRkxBR19FRVBST01fV1JJVEVfUFJPVDsKKwkJCQl0ZzNfZmxhZ19jbGVhcih0cCwgRUVQUk9NX1dSSVRFX1BST1QpOwogCQl9IGVsc2UgewotCQkJdHAtPnRnM19mbGFncyAmPSB+VEczX0ZMQUdfRUVQUk9NX1dSSVRFX1BST1Q7Ci0JCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9JU19OSUM7CisJCQl0ZzNfZmxhZ19jbGVhcih0cCwgRUVQUk9NX1dSSVRFX1BST1QpOworCQkJdGczX2ZsYWdfc2V0KHRwLCBJU19OSUMpOwogCQl9CiAKIAkJaWYgKG5pY19jZmcgJiBOSUNfU1JBTV9EQVRBX0NGR19BU0ZfRU5BQkxFKSB7Ci0JCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0VOQUJMRV9BU0Y7Ci0JCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzUwX1BMVVMpCi0JCQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfQVNGX05FV19IQU5EU0hBS0U7CisJCQl0ZzNfZmxhZ19zZXQodHAsIEVOQUJMRV9BU0YpOworCQkJaWYgKHRnM19mbGFnKHRwLCA1NzUwX1BMVVMpKQorCQkJCXRnM19mbGFnX3NldCh0cCwgQVNGX05FV19IQU5EU0hBS0UpOwogCQl9CiAKIAkJaWYgKChuaWNfY2ZnICYgTklDX1NSQU1fREFUQV9DRkdfQVBFX0VOQUJMRSkgJiYKLQkJCSh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3NTBfUExVUykpCi0JCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19FTkFCTEVfQVBFOworCQkgICAgdGczX2ZsYWcodHAsIDU3NTBfUExVUykpCisJCQl0ZzNfZmxhZ19zZXQodHAsIEVOQUJMRV9BUEUpOwogCiAJCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19BTllfU0VSREVTICYmCiAJCSAgICAhKG5pY19jZmcgJiBOSUNfU1JBTV9EQVRBX0NGR19GSUJFUl9XT0wpKQotCQkJdHAtPnRnM19mbGFncyAmPSB+VEczX0ZMQUdfV09MX0NBUDsKKwkJCXRnM19mbGFnX2NsZWFyKHRwLCBXT0xfQ0FQKTsKIAotCQlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19XT0xfQ0FQKSAmJgorCQlpZiAodGczX2ZsYWcodHAsIFdPTF9DQVApICYmCiAJCSAgICAobmljX2NmZyAmIE5JQ19TUkFNX0RBVEFfQ0ZHX1dPTF9FTkFCTEUpKSB7Ci0JCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX1dPTF9FTkFCTEU7CisJCQl0ZzNfZmxhZ19zZXQodHAsIFdPTF9FTkFCTEUpOwogCQkJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKCZ0cC0+cGRldi0+ZGV2LCB0cnVlKTsKIAkJfQogCkBAIC0xMjQ3NiwzMyArMTI3NzMsMzMgQEAKIAkJaWYgKGNmZzIgJiAoMSA8PCAxOCkpCiAJCQl0cC0+cGh5X2ZsYWdzIHw9IFRHM19QSFlGTEdfU0VSREVTX1BSRUVNUEhBU0lTOwogCi0JCWlmICgoKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTcxN19QTFVTKSB8fAotCQkgICAgKChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NCAmJgotCQkgICAgICBHRVRfQ0hJUF9SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQ0hJUFJFVl81Nzg0X0FYKSkpICYmCisJCWlmICgodGczX2ZsYWcodHAsIDU3NzY1X1BMVVMpIHx8CisJCSAgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg0ICYmCisJCSAgICAgIEdFVF9DSElQX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBDSElQUkVWXzU3ODRfQVgpKSAmJgogCQkgICAgKGNmZzIgJiBOSUNfU1JBTV9EQVRBX0NGR18yX0FQRF9FTikpCiAJCQl0cC0+cGh5X2ZsYWdzIHw9IFRHM19QSFlGTEdfRU5BQkxFX0FQRDsKIAotCQlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUENJX0VYUFJFU1MpICYmCisJCWlmICh0ZzNfZmxhZyh0cCwgUENJX0VYUFJFU1MpICYmCiAJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTc4NSAmJgotCQkgICAgISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3MTdfUExVUykpIHsKKwkJICAgICF0ZzNfZmxhZyh0cCwgNTc3NjVfUExVUykpIHsKIAkJCXUzMiBjZmczOwogCiAJCQl0ZzNfcmVhZF9tZW0odHAsIE5JQ19TUkFNX0RBVEFfQ0ZHXzMsICZjZmczKTsKIAkJCWlmIChjZmczICYgTklDX1NSQU1fQVNQTV9ERUJPVU5DRSkKLQkJCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0FTUE1fV09SS0FST1VORDsKKwkJCQl0ZzNfZmxhZ19zZXQodHAsIEFTUE1fV09SS0FST1VORCk7CiAJCX0KIAogCQlpZiAoY2ZnNCAmIE5JQ19TUkFNX1JHTUlJX0lOQkFORF9ESVNBQkxFKQotCQkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfUkdNSUlfSU5CQU5EX0RJU0FCTEU7CisJCQl0ZzNfZmxhZ19zZXQodHAsIFJHTUlJX0lOQkFORF9ESVNBQkxFKTsKIAkJaWYgKGNmZzQgJiBOSUNfU1JBTV9SR01JSV9FWFRfSUJORF9SWF9FTikKLQkJCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX1JHTUlJX0VYVF9JQk5EX1JYX0VOOworCQkJdGczX2ZsYWdfc2V0KHRwLCBSR01JSV9FWFRfSUJORF9SWF9FTik7CiAJCWlmIChjZmc0ICYgTklDX1NSQU1fUkdNSUlfRVhUX0lCTkRfVFhfRU4pCi0JCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19SR01JSV9FWFRfSUJORF9UWF9FTjsKKwkJCXRnM19mbGFnX3NldCh0cCwgUkdNSUlfRVhUX0lCTkRfVFhfRU4pOwogCX0KIGRvbmU6Ci0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19XT0xfQ0FQKQorCWlmICh0ZzNfZmxhZyh0cCwgV09MX0NBUCkpCiAJCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSgmdHAtPnBkZXYtPmRldiwKLQkJCQkgdHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1dPTF9FTkFCTEUpOworCQkJCQkgdGczX2ZsYWcodHAsIFdPTF9FTkFCTEUpKTsKIAllbHNlCiAJCWRldmljZV9zZXRfd2FrZXVwX2NhcGFibGUoJnRwLT5wZGV2LT5kZXYsIGZhbHNlKTsKIH0KQEAgLTEyNTkyLDE4ICsxMjg4OSwxNyBAQAogCWludCBlcnI7CiAKIAkvKiBmbG93IGNvbnRyb2wgYXV0b25lZ290aWF0aW9uIGlzIGRlZmF1bHQgYmVoYXZpb3IgKi8KLQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX1BBVVNFX0FVVE9ORUc7CisJdGczX2ZsYWdfc2V0KHRwLCBQQVVTRV9BVVRPTkVHKTsKIAl0cC0+bGlua19jb25maWcuZmxvd2N0cmwgPSBGTE9XX0NUUkxfVFggfCBGTE9XX0NUUkxfUlg7CiAKLQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19VU0VfUEhZTElCKQorCWlmICh0ZzNfZmxhZyh0cCwgVVNFX1BIWUxJQikpCiAJCXJldHVybiB0ZzNfcGh5X2luaXQodHApOwogCiAJLyogUmVhZGluZyB0aGUgUEhZIElEIHJlZ2lzdGVyIGNhbiBjb25mbGljdCB3aXRoIEFTRgogCSAqIGZpcm13YXJlIGFjY2VzcyB0byB0aGUgUEhZIGhhcmR3YXJlLgogCSAqLwogCWVyciA9IDA7Ci0JaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikgfHwKLQkgICAgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX0FQRSkpIHsKKwlpZiAodGczX2ZsYWcodHAsIEVOQUJMRV9BU0YpIHx8IHRnM19mbGFnKHRwLCBFTkFCTEVfQVBFKSkgewogCQlod19waHlfaWQgPSBod19waHlfaWRfbWFza2VkID0gVEczX1BIWV9JRF9JTlZBTElEOwogCX0gZWxzZSB7CiAJCS8qIE5vdyByZWFkIHRoZSBwaHlzaWNhbCBQSFlfSUQgZnJvbSB0aGUgY2hpcCBhbmQgdmVyaWZ5CkBAIC0xMjY1OSw5ICsxMjk1NSw5IEBACiAJdGczX3BoeV9pbml0X2xpbmtfY29uZmlnKHRwKTsKIAogCWlmICghKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0FOWV9TRVJERVMpICYmCi0JICAgICEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfQVBFKSAmJgotCSAgICAhKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKSkgewotCQl1MzIgYm1zciwgYWR2X3JlZywgdGczX2N0cmwsIG1hc2s7CisJICAgICF0ZzNfZmxhZyh0cCwgRU5BQkxFX0FQRSkgJiYKKwkgICAgIXRnM19mbGFnKHRwLCBFTkFCTEVfQVNGKSkgeworCQl1MzIgYm1zciwgbWFzazsKIAogCQl0ZzNfcmVhZHBoeSh0cCwgTUlJX0JNU1IsICZibXNyKTsKIAkJaWYgKCF0ZzNfcmVhZHBoeSh0cCwgTUlJX0JNU1IsICZibXNyKSAmJgpAQCAtMTI2NzIsMzYgKzEyOTY4LDE4IEBACiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCi0JCWFkdl9yZWcgPSAoQURWRVJUSVNFXzEwSEFMRiB8IEFEVkVSVElTRV8xMEZVTEwgfAotCQkJICAgQURWRVJUSVNFXzEwMEhBTEYgfCBBRFZFUlRJU0VfMTAwRlVMTCB8Ci0JCQkgICBBRFZFUlRJU0VfQ1NNQSB8IEFEVkVSVElTRV9QQVVTRV9DQVApOwotCQl0ZzNfY3RybCA9IDA7Ci0JCWlmICghKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHXzEwXzEwMF9PTkxZKSkgewotCQkJdGczX2N0cmwgPSAoTUlJX1RHM19DVFJMX0FEVl8xMDAwX0hBTEYgfAotCQkJCSAgICBNSUlfVEczX0NUUkxfQURWXzEwMDBfRlVMTCk7Ci0JCQlpZiAodHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3MDFfQTAgfHwKLQkJCSAgICB0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTcwMV9CMCkKLQkJCQl0ZzNfY3RybCB8PSAoTUlJX1RHM19DVFJMX0FTX01BU1RFUiB8Ci0JCQkJCSAgICAgTUlJX1RHM19DVFJMX0VOQUJMRV9BU19NQVNURVIpOwotCQl9CisJCXRnM19waHlfc2V0X3dpcmVzcGVlZCh0cCk7CiAKIAkJbWFzayA9IChBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZiB8IEFEVkVSVElTRURfMTBiYXNlVF9GdWxsIHwKIAkJCUFEVkVSVElTRURfMTAwYmFzZVRfSGFsZiB8IEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCB8CiAJCQlBRFZFUlRJU0VEXzEwMDBiYXNlVF9IYWxmIHwgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCk7CiAJCWlmICghdGczX2NvcHBlcl9pc19hZHZlcnRpc2luZ19hbGwodHAsIG1hc2spKSB7Ci0JCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9BRFZFUlRJU0UsIGFkdl9yZWcpOwotCi0JCQlpZiAoISh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR18xMF8xMDBfT05MWSkpCi0JCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0NUUkwsIHRnM19jdHJsKTsKKwkJCXRnM19waHlfYXV0b25lZ19jZmcodHAsIHRwLT5saW5rX2NvbmZpZy5hZHZlcnRpc2luZywKKwkJCQkJICAgIHRwLT5saW5rX2NvbmZpZy5mbG93Y3RybCk7CiAKIAkJCXRnM193cml0ZXBoeSh0cCwgTUlJX0JNQ1IsCiAJCQkJICAgICBCTUNSX0FORU5BQkxFIHwgQk1DUl9BTlJFU1RBUlQpOwogCQl9Ci0JCXRnM19waHlfc2V0X3dpcmVzcGVlZCh0cCk7Ci0KLQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfQURWRVJUSVNFLCBhZHZfcmVnKTsKLQkJaWYgKCEodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfMTBfMTAwX09OTFkpKQotCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0NUUkwsIHRnM19jdHJsKTsKIAl9CiAKIHNraXBfcGh5X3Jlc2V0OgpAQCAtMTI3MjEsNDYgKzEyOTk5LDExIEBACiAJdTggKnZwZF9kYXRhOwogCXVuc2lnbmVkIGludCBibG9ja19lbmQsIHJvc2l6ZSwgbGVuOwogCWludCBqLCBpID0gMDsKLQl1MzIgbWFnaWM7CiAKLQlpZiAoKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTk9fTlZSQU0pIHx8Ci0JICAgIHRnM19udnJhbV9yZWFkKHRwLCAweDAsICZtYWdpYykpCi0JCWdvdG8gb3V0X25vX3ZwZDsKLQotCXZwZF9kYXRhID0ga21hbGxvYyhURzNfTlZNX1ZQRF9MRU4sIEdGUF9LRVJORUwpOworCXZwZF9kYXRhID0gKHU4ICopdGczX3ZwZF9yZWFkYmxvY2sodHApOwogCWlmICghdnBkX2RhdGEpCiAJCWdvdG8gb3V0X25vX3ZwZDsKIAotCWlmIChtYWdpYyA9PSBURzNfRUVQUk9NX01BR0lDKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBURzNfTlZNX1ZQRF9MRU47IGkgKz0gNCkgewotCQkJdTMyIHRtcDsKLQotCQkJLyogVGhlIGRhdGEgaXMgaW4gbGl0dGxlLWVuZGlhbiBmb3JtYXQgaW4gTlZSQU0uCi0JCQkgKiBVc2UgdGhlIGJpZy1lbmRpYW4gcmVhZCByb3V0aW5lcyB0byBwcmVzZXJ2ZQotCQkJICogdGhlIGJ5dGUgb3JkZXIgYXMgaXQgZXhpc3RzIGluIE5WUkFNLgotCQkJICovCi0JCQlpZiAodGczX252cmFtX3JlYWRfYmUzMih0cCwgVEczX05WTV9WUERfT0ZGICsgaSwgJnRtcCkpCi0JCQkJZ290byBvdXRfbm90X2ZvdW5kOwotCi0JCQltZW1jcHkoJnZwZF9kYXRhW2ldLCAmdG1wLCBzaXplb2YodG1wKSk7Ci0JCX0KLQl9IGVsc2UgewotCQlzc2l6ZV90IGNudDsKLQkJdW5zaWduZWQgaW50IHBvcyA9IDA7Ci0KLQkJZm9yICg7IHBvcyA8IFRHM19OVk1fVlBEX0xFTiAmJiBpIDwgMzsgaSsrLCBwb3MgKz0gY250KSB7Ci0JCQljbnQgPSBwY2lfcmVhZF92cGQodHAtPnBkZXYsIHBvcywKLQkJCQkJICAgVEczX05WTV9WUERfTEVOIC0gcG9zLAotCQkJCQkgICAmdnBkX2RhdGFbcG9zXSk7Ci0JCQlpZiAoY250ID09IC1FVElNRURPVVQgfHwgY250ID09IC1FSU5UUikKLQkJCQljbnQgPSAwOwotCQkJZWxzZSBpZiAoY250IDwgMCkKLQkJCQlnb3RvIG91dF9ub3RfZm91bmQ7Ci0JCX0KLQkJaWYgKHBvcyAhPSBURzNfTlZNX1ZQRF9MRU4pCi0JCQlnb3RvIG91dF9ub3RfZm91bmQ7Ci0JfQotCiAJaSA9IHBjaV92cGRfZmluZF90YWcodnBkX2RhdGEsIDAsIFRHM19OVk1fVlBEX0xFTiwKIAkJCSAgICAgUENJX1ZQRF9MUkRUX1JPX0RBVEEpOwogCWlmIChpIDwgMCkKQEAgLTEzMDE0LDcgKzEzMjU3LDcgQEAKIAlpZiAob2Zmc2V0ID09IFRHM19OVk1fRElSX0VORCkKIAkJcmV0dXJuOwogCi0JaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpKQorCWlmICghdGczX2ZsYWcodHAsIDU3MDVfUExVUykpCiAJCXN0YXJ0ID0gMHgwODAwMDAwMDsKIAllbHNlIGlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0IC0gNCwgJnN0YXJ0KSkKIAkJcmV0dXJuOwpAQCAtMTMwNTQsOCArMTMyOTcsNyBAQAogCXUzMiBhcGVkYXRhOwogCWNoYXIgKmZ3dHlwZTsKIAotCWlmICghKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX0FQRSkgfHwKLQkgICAgISh0cC0+dGczX2ZsYWdzICAmIFRHM19GTEFHX0VOQUJMRV9BU0YpKQorCWlmICghdGczX2ZsYWcodHAsIEVOQUJMRV9BUEUpIHx8ICF0ZzNfZmxhZyh0cCwgRU5BQkxFX0FTRikpCiAJCXJldHVybjsKIAogCWFwZWRhdGEgPSB0ZzNfYXBlX3JlYWQzMih0cCwgVEczX0FQRV9TRUdfU0lHKTsKQEAgLTEzMDY5LDcgKzEzMzExLDcgQEAKIAlhcGVkYXRhID0gdGczX2FwZV9yZWFkMzIodHAsIFRHM19BUEVfRldfVkVSU0lPTik7CiAKIAlpZiAodGczX2FwZV9yZWFkMzIodHAsIFRHM19BUEVfRldfRkVBVFVSRVMpICYgVEczX0FQRV9GV19GRUFUVVJFX05DU0kpIHsKLQkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfQVBFX0hBU19OQ1NJOworCQl0ZzNfZmxhZ19zZXQodHAsIEFQRV9IQVNfTkNTSSk7CiAJCWZ3dHlwZSA9ICJOQ1NJIjsKIAl9IGVsc2UgewogCQlmd3R5cGUgPSAiREFTSCI7CkBAIC0xMzA5Myw3ICsxMzMzNSw3IEBACiAJaWYgKHRwLT5md192ZXJbMF0gIT0gMCkKIAkJdnBkX3ZlcnMgPSB0cnVlOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTk9fTlZSQU0pIHsKKwlpZiAodGczX2ZsYWcodHAsIE5PX05WUkFNKSkgewogCQlzdHJjYXQodHAtPmZ3X3ZlciwgInNiIik7CiAJCXJldHVybjsKIAl9CkBAIC0xMzExMCw4ICsxMzM1Miw3IEBACiAJZWxzZQogCQlyZXR1cm47CiAKLQlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikgfHwKLQkgICAgICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9BUEUpIHx8IHZwZF92ZXJzKQorCWlmICghdGczX2ZsYWcodHAsIEVOQUJMRV9BU0YpIHx8IHRnM19mbGFnKHRwLCBFTkFCTEVfQVBFKSB8fCB2cGRfdmVycykKIAkJZ290byBkb25lOwogCiAJdGczX3JlYWRfbWdtdGZ3X3Zlcih0cCk7CkBAIC0xMzEyMiwyMSArMTMzNjMsMTQgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2ICogX19kZXZpbml0IHRnM19maW5kX3BlZXIoc3RydWN0IHRnMyAqKTsKIAotc3RhdGljIGlubGluZSB2b2lkIHZsYW5fZmVhdHVyZXNfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JZGV2LT52bGFuX2ZlYXR1cmVzIHw9IGZsYWdzOwotfQotCiBzdGF0aWMgaW5saW5lIHUzMiB0ZzNfcnhfcmV0X3Jpbmdfc2l6ZShzdHJ1Y3QgdGczICp0cCkKIHsKLQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcgfHwKLQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTkpCi0JCXJldHVybiA0MDk2OwotCWVsc2UgaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfSlVNQk9fQ0FQQUJMRSkgJiYKLQkJICEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzgwX0NMQVNTKSkKLQkJcmV0dXJuIDEwMjQ7CisJaWYgKHRnM19mbGFnKHRwLCBMUkdfUFJPRF9SSU5HX0NBUCkpCisJCXJldHVybiBURzNfUlhfUkVUX01BWF9TSVpFXzU3MTc7CisJZWxzZSBpZiAodGczX2ZsYWcodHAsIEpVTUJPX0NBUEFCTEUpICYmICF0ZzNfZmxhZyh0cCwgNTc4MF9DTEFTUykpCisJCXJldHVybiBURzNfUlhfUkVUX01BWF9TSVpFXzU3MDA7CiAJZWxzZQotCQlyZXR1cm4gNTEyOworCQlyZXR1cm4gVEczX1JYX1JFVF9NQVhfU0laRV81NzA1OwogfQogCiBzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUodGczX3dyaXRlX3Jlb3JkZXJfY2hpcHNldHMpID0gewpAQCAtMTMxODEsNyArMTM0MTUsOCBAQAogCiAJCWlmICh0cC0+cGRldi0+ZGV2aWNlID09IFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3MTcgfHwKIAkJICAgIHRwLT5wZGV2LT5kZXZpY2UgPT0gVEczUENJX0RFVklDRV9USUdPTjNfNTcxOCB8fAotCQkgICAgdHAtPnBkZXYtPmRldmljZSA9PSBURzNQQ0lfREVWSUNFX1RJR09OM181NzE5KQorCQkgICAgdHAtPnBkZXYtPmRldmljZSA9PSBURzNQQ0lfREVWSUNFX1RJR09OM181NzE5IHx8CisJCSAgICB0cC0+cGRldi0+ZGV2aWNlID09IFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3MjApCiAJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQodHAtPnBkZXYsCiAJCQkJCSAgICAgIFRHM1BDSV9HRU4yX1BST0RJRF9BU0lDUkVWLAogCQkJCQkgICAgICAmcHJvZF9pZF9hc2ljX3Jldik7CkBAIC0xMzI1OCwxNSArMTM0OTMsMTQgQEAKIAkJCWlmIChicmlkZ2UtPnN1Ym9yZGluYXRlICYmCiAJCQkgICAgKGJyaWRnZS0+c3Vib3JkaW5hdGUtPm51bWJlciA9PQogCQkJICAgICB0cC0+cGRldi0+YnVzLT5udW1iZXIpKSB7Ci0KLQkJCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9JQ0hfV09SS0FST1VORDsKKwkJCQl0ZzNfZmxhZ19zZXQodHAsIElDSF9XT1JLQVJPVU5EKTsKIAkJCQlwY2lfZGV2X3B1dChicmlkZ2UpOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CiAJfQogCi0JaWYgKChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwMSkpIHsKKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDEpIHsKIAkJc3RhdGljIHN0cnVjdCB0ZzNfZGV2X2lkIHsKIAkJCXUzMgl2ZW5kb3I7CiAJCQl1MzIJZGV2aWNlOwpAQCAtMTMyOTEsNyArMTM1MjUsNyBAQAogCQkJICAgICB0cC0+cGRldi0+YnVzLT5udW1iZXIpICYmCiAJCQkgICAgKGJyaWRnZS0+c3Vib3JkaW5hdGUtPnN1Ym9yZGluYXRlID49CiAJCQkgICAgIHRwLT5wZGV2LT5idXMtPm51bWJlcikpIHsKLQkJCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM181NzAxX0RNQV9CVUc7CisJCQkJdGczX2ZsYWdfc2V0KHRwLCA1NzAxX0RNQV9CVUcpOwogCQkJCXBjaV9kZXZfcHV0KGJyaWRnZSk7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0xMzMwNiw4ICsxMzU0MCw4IEBACiAJICovCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzgwIHx8CiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE0KSB7Ci0JCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyXzU3ODBfQ0xBU1M7Ci0JCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfNDBCSVRfRE1BX0JVRzsKKwkJdGczX2ZsYWdfc2V0KHRwLCA1NzgwX0NMQVNTKTsKKwkJdGczX2ZsYWdfc2V0KHRwLCA0MEJJVF9ETUFfQlVHKTsKIAkJdHAtPm1zaV9jYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHRwLT5wZGV2LCBQQ0lfQ0FQX0lEX01TSSk7CiAJfSBlbHNlIHsKIAkJc3RydWN0IHBjaV9kZXYgKmJyaWRnZSA9IE5VTEw7CkBAIC0xMzMyMSw3ICsxMzU1NSw3IEBACiAJCQkgICAgIHRwLT5wZGV2LT5idXMtPm51bWJlcikgJiYKIAkJCSAgICAoYnJpZGdlLT5zdWJvcmRpbmF0ZS0+c3Vib3JkaW5hdGUgPj0KIAkJCSAgICAgdHAtPnBkZXYtPmJ1cy0+bnVtYmVyKSkgewotCQkJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfNDBCSVRfRE1BX0JVRzsKKwkJCQl0ZzNfZmxhZ19zZXQodHAsIDQwQklUX0RNQV9CVUcpOwogCQkJCXBjaV9kZXZfcHV0KGJyaWRnZSk7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0xMzMzNiwxMyArMTM1NzAsMTggQEAKIAogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwNCB8fAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNCB8fAotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNykKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcgfHwKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MjApCiAJCXRwLT5wZGV2X3BlZXIgPSB0ZzNfZmluZF9wZWVyKHRwKTsKIAogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNyB8fAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxOSB8fAotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3NjUpCi0JCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczXzU3MTdfUExVUzsKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MjApCisJCXRnM19mbGFnX3NldCh0cCwgNTcxN19QTFVTKTsKKworCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3NjUgfHwKKwkgICAgdGczX2ZsYWcodHAsIDU3MTdfUExVUykpCisJCXRnM19mbGFnX3NldCh0cCwgNTc3NjVfUExVUyk7CiAKIAkvKiBJbnRlbnRpb25hbGx5IGV4Y2x1ZGUgQVNJQ19SRVZfNTkwNiAqLwogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1NSB8fApAQCAtMTMzNTEsOTcgKzEzNTkwLDEwMiBAQAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc2MSB8fAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NSB8fAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3ODAgfHwKLQkgICAgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTcxN19QTFVTKSkKLQkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfNTc1NV9QTFVTOworCSAgICB0ZzNfZmxhZyh0cCwgNTc3NjVfUExVUykpCisJCXRnM19mbGFnX3NldCh0cCwgNTc1NV9QTFVTKTsKIAogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1MCB8fAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1MiB8fAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNiB8fAotCSAgICAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM181NzU1X1BMVVMpIHx8Ci0JICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3ODBfQ0xBU1MpKQotCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl81NzUwX1BMVVM7CisJICAgIHRnM19mbGFnKHRwLCA1NzU1X1BMVVMpIHx8CisJICAgIHRnM19mbGFnKHRwLCA1NzgwX0NMQVNTKSkKKwkJdGczX2ZsYWdfc2V0KHRwLCA1NzUwX1BMVVMpOwogCi0JaWYgKChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwNSkgfHwKLQkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc1MF9QTFVTKSkKLQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfNTcwNV9QTFVTOwotCi0JLyogNTcwMCBCMCBjaGlwcyBkbyBub3Qgc3VwcG9ydCBjaGVja3N1bW1pbmcgY29ycmVjdGx5IGR1ZQotCSAqIHRvIGhhcmR3YXJlIGJ1Z3MuCi0JICovCi0JaWYgKHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81NzAwX0IwKQotCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0JST0tFTl9DSEVDS1NVTVM7Ci0JZWxzZSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmVhdHVyZXMgPSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1NHIHwgTkVUSUZfRl9HUk87Ci0KLQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19SWF9DSEVDS1NVTVM7Ci0JCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3NTVfUExVUykKLQkJCWZlYXR1cmVzIHw9IE5FVElGX0ZfSVBWNl9DU1VNOwotCQl0cC0+ZGV2LT5mZWF0dXJlcyB8PSBmZWF0dXJlczsKLQkJdmxhbl9mZWF0dXJlc19hZGQodHAtPmRldiwgZmVhdHVyZXMpOwotCX0KKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDUgfHwKKwkgICAgdGczX2ZsYWcodHAsIDU3NTBfUExVUykpCisJCXRnM19mbGFnX3NldCh0cCwgNTcwNV9QTFVTKTsKIAogCS8qIERldGVybWluZSBUU08gY2FwYWJpbGl0aWVzICovCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE5KQogCQk7IC8qIERvIG5vdGhpbmcuIEhXIGJ1Zy4gKi8KLQllbHNlIGlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3MTdfUExVUykKLQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfSFdfVFNPXzM7Ci0JZWxzZSBpZiAoKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTc1NV9QTFVTKSB8fAorCWVsc2UgaWYgKHRnM19mbGFnKHRwLCA1Nzc2NV9QTFVTKSkKKwkJdGczX2ZsYWdfc2V0KHRwLCBIV19UU09fMyk7CisJZWxzZSBpZiAodGczX2ZsYWcodHAsIDU3NTVfUExVUykgfHwKIAkJIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2KQotCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9IV19UU09fMjsKLQllbHNlIGlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3NTBfUExVUykgewotCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9IV19UU09fMSB8IFRHM19GTEcyX1RTT19CVUc7CisJCXRnM19mbGFnX3NldCh0cCwgSFdfVFNPXzIpOworCWVsc2UgaWYgKHRnM19mbGFnKHRwLCA1NzUwX1BMVVMpKSB7CisJCXRnM19mbGFnX3NldCh0cCwgSFdfVFNPXzEpOworCQl0ZzNfZmxhZ19zZXQodHAsIFRTT19CVUcpOwogCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTAgJiYKIAkJICAgIHRwLT5wY2lfY2hpcF9yZXZfaWQgPj0gQ0hJUFJFVl9JRF81NzUwX0MyKQotCQkJdHAtPnRnM19mbGFnczIgJj0gflRHM19GTEcyX1RTT19CVUc7CisJCQl0ZzNfZmxhZ19jbGVhcih0cCwgVFNPX0JVRyk7CiAJfSBlbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTcwMCAmJgogCQkgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTcwMSAmJgogCQkgICB0cC0+cGNpX2NoaXBfcmV2X2lkICE9IENISVBSRVZfSURfNTcwNV9BMCkgewotCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9UU09fQlVHOworCQkJdGczX2ZsYWdfc2V0KHRwLCBUU09fQlVHKTsKIAkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzA1KQogCQkJdHAtPmZ3X25lZWRlZCA9IEZJUk1XQVJFX1RHM1RTTzU7CiAJCWVsc2UKIAkJCXRwLT5md19uZWVkZWQgPSBGSVJNV0FSRV9URzNUU087CiAJfQogCisJLyogU2VsZWN0aXZlbHkgYWxsb3cgVFNPIGJhc2VkIG9uIG9wZXJhdGluZyBjb25kaXRpb25zICovCisJaWYgKHRnM19mbGFnKHRwLCBIV19UU09fMSkgfHwKKwkgICAgdGczX2ZsYWcodHAsIEhXX1RTT18yKSB8fAorCSAgICB0ZzNfZmxhZyh0cCwgSFdfVFNPXzMpIHx8CisJICAgICh0cC0+ZndfbmVlZGVkICYmICF0ZzNfZmxhZyh0cCwgRU5BQkxFX0FTRikpKQorCQl0ZzNfZmxhZ19zZXQodHAsIFRTT19DQVBBQkxFKTsKKwllbHNlIHsKKwkJdGczX2ZsYWdfY2xlYXIodHAsIFRTT19DQVBBQkxFKTsKKwkJdGczX2ZsYWdfY2xlYXIodHAsIFRTT19CVUcpOworCQl0cC0+ZndfbmVlZGVkID0gTlVMTDsKKwl9CisKKwlpZiAodHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3MDFfQTApCisJCXRwLT5md19uZWVkZWQgPSBGSVJNV0FSRV9URzM7CisKIAl0cC0+aXJxX21heCA9IDE7CiAKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzUwX1BMVVMpIHsKLQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19TVVBQT1JUX01TSTsKKwlpZiAodGczX2ZsYWcodHAsIDU3NTBfUExVUykpIHsKKwkJdGczX2ZsYWdfc2V0KHRwLCBTVVBQT1JUX01TSSk7CiAJCWlmIChHRVRfQ0hJUF9SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQ0hJUFJFVl81NzUwX0FYIHx8CiAJCSAgICBHRVRfQ0hJUF9SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQ0hJUFJFVl81NzUwX0JYIHx8CiAJCSAgICAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTQgJiYKIAkJICAgICB0cC0+cGNpX2NoaXBfcmV2X2lkIDw9IENISVBSRVZfSURfNTcxNF9BMiAmJgogCQkgICAgIHRwLT5wZGV2X3BlZXIgPT0gdHAtPnBkZXYpKQotCQkJdHAtPnRnM19mbGFncyAmPSB+VEczX0ZMQUdfU1VQUE9SVF9NU0k7CisJCQl0ZzNfZmxhZ19jbGVhcih0cCwgU1VQUE9SVF9NU0kpOwogCi0JCWlmICgodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM181NzU1X1BMVVMpIHx8CisJCWlmICh0ZzNfZmxhZyh0cCwgNTc1NV9QTFVTKSB8fAogCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYpIHsKLQkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyXzFTSE9UX01TSTsKKwkJCXRnM19mbGFnX3NldCh0cCwgMVNIT1RfTVNJKTsKIAkJfQogCi0JCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3MTdfUExVUykgewotCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19TVVBQT1JUX01TSVg7CisJCWlmICh0ZzNfZmxhZyh0cCwgNTc3NjVfUExVUykpIHsKKwkJCXRnM19mbGFnX3NldCh0cCwgU1VQUE9SVF9NU0lYKTsKIAkJCXRwLT5pcnFfbWF4ID0gVEczX0lSUV9NQVhfVkVDUzsKIAkJfQogCX0KIAotCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNyB8fAotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxOSB8fAotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikKLQkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfU0hPUlRfRE1BX0JVRzsKLQllbHNlIGlmICghKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTc1NV9QTFVTKSkgewotCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM180R19ETUFfQk5EUllfQlVHOwotCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM180MEJJVF9ETUFfTElNSVRfQlVHOwotCX0KKwkvKiBBbGwgY2hpcHMgY2FuIGdldCBjb25mdXNlZCBpZiBUWCBidWZmZXJzCisJICogc3RyYWRkbGUgdGhlIDRHQiBhZGRyZXNzIGJvdW5kYXJ5LgorCSAqLworCXRnM19mbGFnX3NldCh0cCwgNEdfRE1BX0JORFJZX0JVRyk7CiAKLQlpZiAoKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTcxN19QTFVTKSAmJgorCWlmICh0ZzNfZmxhZyh0cCwgNTc1NV9QTFVTKSkKKwkJdGczX2ZsYWdfc2V0KHRwLCBTSE9SVF9ETUFfQlVHKTsKKwllbHNlCisJCXRnM19mbGFnX3NldCh0cCwgNDBCSVRfRE1BX0xJTUlUX0JVRyk7CisKKwlpZiAodGczX2ZsYWcodHAsIDU3MTdfUExVUykpCisJCXRnM19mbGFnX3NldCh0cCwgTFJHX1BST0RfUklOR19DQVApOworCisJaWYgKHRnM19mbGFnKHRwLCA1Nzc2NV9QTFVTKSAmJgogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTcxOSkKLQkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfVVNFX0pVTUJPX0JERkxBRzsKKwkJdGczX2ZsYWdfc2V0KHRwLCBVU0VfSlVNQk9fQkRGTEFHKTsKIAotCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSB8fAotCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzgwX0NMQVNTKSB8fAotCSAgICAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19VU0VfSlVNQk9fQkRGTEFHKSkKLQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19KVU1CT19DQVBBQkxFOworCWlmICghdGczX2ZsYWcodHAsIDU3MDVfUExVUykgfHwKKwkgICAgdGczX2ZsYWcodHAsIDU3ODBfQ0xBU1MpIHx8CisJICAgIHRnM19mbGFnKHRwLCBVU0VfSlVNQk9fQkRGTEFHKSkKKwkJdGczX2ZsYWdfc2V0KHRwLCBKVU1CT19DQVBBQkxFKTsKIAogCXBjaV9yZWFkX2NvbmZpZ19kd29yZCh0cC0+cGRldiwgVEczUENJX1BDSVNUQVRFLAogCQkJICAgICAgJnBjaV9zdGF0ZV9yZWcpOwpAQCAtMTM0NTAsMTAgKzEzNjk0LDExIEBACiAJaWYgKHRwLT5wY2llX2NhcCAhPSAwKSB7CiAJCXUxNiBsbmtjdGw7CiAKLQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfUENJX0VYUFJFU1M7CisJCXRnM19mbGFnX3NldCh0cCwgUENJX0VYUFJFU1MpOwogCiAJCXRwLT5wY2llX3JlYWRycSA9IDQwOTY7Ci0JCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxOSkKKwkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE5IHx8CisJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcyMCkKIAkJCXRwLT5wY2llX3JlYWRycSA9IDIwNDg7CiAKIAkJcGNpZV9zZXRfcmVhZHJxKHRwLT5wZGV2LCB0cC0+cGNpZV9yZWFkcnEpOwpAQCAtMTM0NjIsMjAgKzEzNzA3LDIzIEBACiAJCQkJICAgICB0cC0+cGNpZV9jYXAgKyBQQ0lfRVhQX0xOS0NUTCwKIAkJCQkgICAgICZsbmtjdGwpOwogCQlpZiAobG5rY3RsICYgUENJX0VYUF9MTktDVExfQ0xLUkVRX0VOKSB7Ci0JCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYpCi0JCQkJdHAtPnRnM19mbGFnczIgJj0gflRHM19GTEcyX0hXX1RTT18yOworCQkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PQorCQkJICAgIEFTSUNfUkVWXzU5MDYpIHsKKwkJCQl0ZzNfZmxhZ19jbGVhcih0cCwgSFdfVFNPXzIpOworCQkJCXRnM19mbGFnX2NsZWFyKHRwLCBUU09fQ0FQQUJMRSk7CisJCQl9CiAJCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODQgfHwKIAkJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc2MSB8fAogCQkJICAgIHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81Nzc4MF9BMCB8fAogCQkJICAgIHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81Nzc4MF9BMSkKLQkJCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19DTEtSRVFfQlVHOworCQkJCXRnM19mbGFnX3NldCh0cCwgQ0xLUkVRX0JVRyk7CiAJCX0gZWxzZSBpZiAodHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3MTdfQTApIHsKLQkJCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX0wxUExMUERfRU47CisJCQl0ZzNfZmxhZ19zZXQodHAsIEwxUExMUERfRU4pOwogCQl9CiAJfSBlbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NSkgewotCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9QQ0lfRVhQUkVTUzsKLQl9IGVsc2UgaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpIHx8Ci0JCSAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3ODBfQ0xBU1MpKSB7CisJCXRnM19mbGFnX3NldCh0cCwgUENJX0VYUFJFU1MpOworCX0gZWxzZSBpZiAoIXRnM19mbGFnKHRwLCA1NzA1X1BMVVMpIHx8CisJCSAgIHRnM19mbGFnKHRwLCA1NzgwX0NMQVNTKSkgewogCQl0cC0+cGNpeF9jYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHRwLT5wZGV2LCBQQ0lfQ0FQX0lEX1BDSVgpOwogCQlpZiAoIXRwLT5wY2l4X2NhcCkgewogCQkJZGV2X2VycigmdHAtPnBkZXYtPmRldiwKQEAgLTEzNDg0LDcgKzEzNzMyLDcgQEAKIAkJfQogCiAJCWlmICghKHBjaV9zdGF0ZV9yZWcgJiBQQ0lTVEFURV9DT05WX1BDSV9NT0RFKSkKLQkJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfUENJWF9NT0RFOworCQkJdGczX2ZsYWdfc2V0KHRwLCBQQ0lYX01PREUpOwogCX0KIAogCS8qIElmIHdlIGhhdmUgYW4gQU1EIDc2MiBvciBWSUEgSzhUODAwIGNoaXBzZXQsIHdyaXRlCkBAIC0xMzQ5NCw4ICsxMzc0Miw4IEBACiAJICogcG9zdGVkIHRvIHRoZSBjaGlwIGluIG9yZGVyLgogCSAqLwogCWlmIChwY2lfZGV2X3ByZXNlbnQodGczX3dyaXRlX3Jlb3JkZXJfY2hpcHNldHMpICYmCi0JICAgICEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QQ0lfRVhQUkVTUykpCi0JCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTUJPWF9XUklURV9SRU9SREVSOworCSAgICAhdGczX2ZsYWcodHAsIFBDSV9FWFBSRVNTKSkKKwkJdGczX2ZsYWdfc2V0KHRwLCBNQk9YX1dSSVRFX1JFT1JERVIpOwogCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUodHAtPnBkZXYsIFBDSV9DQUNIRV9MSU5FX1NJWkUsCiAJCQkgICAgICZ0cC0+cGNpX2NhY2hlbGluZV9zeik7CkBAIC0xMzUxMiwxNyArMTM3NjAsMTcgQEAKIAkJLyogNTcwMCBCWCBjaGlwcyBuZWVkIHRvIGhhdmUgdGhlaXIgVFggcHJvZHVjZXIgaW5kZXgKIAkJICogbWFpbGJveGVzIHdyaXR0ZW4gdHdpY2UgdG8gd29ya2Fyb3VuZCBhIGJ1Zy4KIAkJICovCi0JCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfVFhEX01CT1hfSFdCVUc7CisJCXRnM19mbGFnX3NldCh0cCwgVFhEX01CT1hfSFdCVUcpOwogCiAJCS8qIElmIHdlIGFyZSBpbiBQQ0ktWCBtb2RlLCBlbmFibGUgcmVnaXN0ZXIgd3JpdGUgd29ya2Fyb3VuZC4KIAkJICoKIAkJICogVGhlIHdvcmthcm91bmQgaXMgdG8gdXNlIGluZGlyZWN0IHJlZ2lzdGVyIGFjY2Vzc2VzCiAJCSAqIGZvciBhbGwgY2hpcCB3cml0ZXMgbm90IHRvIG1haWxib3ggcmVnaXN0ZXJzLgogCQkgKi8KLQkJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19QQ0lYX01PREUpIHsKKwkJaWYgKHRnM19mbGFnKHRwLCBQQ0lYX01PREUpKSB7CiAJCQl1MzIgcG1fcmVnOwogCi0JCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX1BDSVhfVEFSR0VUX0hXQlVHOworCQkJdGczX2ZsYWdfc2V0KHRwLCBQQ0lYX1RBUkdFVF9IV0JVRyk7CiAKIAkJCS8qIFRoZSBjaGlwIGNhbiBoYXZlIGl0J3MgcG93ZXIgbWFuYWdlbWVudCBQQ0kgY29uZmlnCiAJCQkgKiBzcGFjZSByZWdpc3RlcnMgY2xvYmJlcmVkIGR1ZSB0byB0aGlzIGJ1Zy4KQEAgLTEzNTQ1LDkgKzEzNzkzLDkgQEAKIAl9CiAKIAlpZiAoKHBjaV9zdGF0ZV9yZWcgJiBQQ0lTVEFURV9CVVNfU1BFRURfSElHSCkgIT0gMCkKLQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19QQ0lfSElHSF9TUEVFRDsKKwkJdGczX2ZsYWdfc2V0KHRwLCBQQ0lfSElHSF9TUEVFRCk7CiAJaWYgKChwY2lfc3RhdGVfcmVnICYgUENJU1RBVEVfQlVTXzMyQklUKSAhPSAwKQotCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX1BDSV8zMkJJVDsKKwkJdGczX2ZsYWdfc2V0KHRwLCBQQ0lfMzJCSVQpOwogCiAJLyogQ2hpcC1zcGVjaWZpYyBmaXh1cCBmcm9tIEJyb2FkY29tIGRyaXZlciAqLwogCWlmICgodHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3MDRfQTApICYmCkBAIC0xMzU2NSwxMCArMTM4MTMsMTAgQEAKIAl0cC0+d3JpdGUzMl9yeF9tYm94ID0gdGczX3dyaXRlMzI7CiAKIAkvKiBWYXJpb3VzIHdvcmthcm91bmQgcmVnaXN0ZXIgYWNjZXNzIG1ldGhvZHMgKi8KLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1BDSVhfVEFSR0VUX0hXQlVHKQorCWlmICh0ZzNfZmxhZyh0cCwgUENJWF9UQVJHRVRfSFdCVUcpKQogCQl0cC0+d3JpdGUzMiA9IHRnM193cml0ZV9pbmRpcmVjdF9yZWczMjsKIAllbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwMSB8fAotCQkgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BDSV9FWFBSRVNTKSAmJgorCQkgKHRnM19mbGFnKHRwLCBQQ0lfRVhQUkVTUykgJiYKIAkJICB0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTc1MF9BMCkpIHsKIAkJLyoKIAkJICogQmFjayB0byBiYWNrIHJlZ2lzdGVyIHdyaXRlcyBjYW4gY2F1c2UgcHJvYmxlbXMgb24gdGhlc2UKQEAgLTEzNTgwLDE0ICsxMzgyOCwxMyBAQAogCQl0cC0+d3JpdGUzMiA9IHRnM193cml0ZV9mbHVzaF9yZWczMjsKIAl9CiAKLQlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19UWERfTUJPWF9IV0JVRykgfHwKLQkgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19NQk9YX1dSSVRFX1JFT1JERVIpKSB7CisJaWYgKHRnM19mbGFnKHRwLCBUWERfTUJPWF9IV0JVRykgfHwgdGczX2ZsYWcodHAsIE1CT1hfV1JJVEVfUkVPUkRFUikpIHsKIAkJdHAtPndyaXRlMzJfdHhfbWJveCA9IHRnM193cml0ZTMyX3R4X21ib3g7Ci0JCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTUJPWF9XUklURV9SRU9SREVSKQorCQlpZiAodGczX2ZsYWcodHAsIE1CT1hfV1JJVEVfUkVPUkRFUikpCiAJCQl0cC0+d3JpdGUzMl9yeF9tYm94ID0gdGczX3dyaXRlX2ZsdXNoX3JlZzMyOwogCX0KIAotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0lDSF9XT1JLQVJPVU5EKSB7CisJaWYgKHRnM19mbGFnKHRwLCBJQ0hfV09SS0FST1VORCkpIHsKIAkJdHAtPnJlYWQzMiA9IHRnM19yZWFkX2luZGlyZWN0X3JlZzMyOwogCQl0cC0+d3JpdGUzMiA9IHRnM193cml0ZV9pbmRpcmVjdF9yZWczMjsKIAkJdHAtPnJlYWQzMl9tYm94ID0gdGczX3JlYWRfaW5kaXJlY3RfbWJveDsKQEAgLTEzNjEwLDEzICsxMzg1NywxMyBAQAogCX0KIAogCWlmICh0cC0+d3JpdGUzMiA9PSB0ZzNfd3JpdGVfaW5kaXJlY3RfcmVnMzIgfHwKLQkgICAgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfUENJWF9NT0RFKSAmJgorCSAgICAodGczX2ZsYWcodHAsIFBDSVhfTU9ERSkgJiYKIAkgICAgIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwMCB8fAogCSAgICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzAxKSkpCi0JCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfU1JBTV9VU0VfQ09ORklHOworCQl0ZzNfZmxhZ19zZXQodHAsIFNSQU1fVVNFX0NPTkZJRyk7CiAKIAkvKiBHZXQgZWVwcm9tIGh3IGNvbmZpZyBiZWZvcmUgY2FsbGluZyB0ZzNfc2V0X3Bvd2VyX3N0YXRlKCkuCi0JICogSW4gcGFydGljdWxhciwgdGhlIFRHM19GTEcyX0lTX05JQyBmbGFnIG11c3QgYmUKKwkgKiBJbiBwYXJ0aWN1bGFyLCB0aGUgVEczX0ZMQUdfSVNfTklDIGZsYWcgbXVzdCBiZQogCSAqIGRldGVybWluZWQgYmVmb3JlIGNhbGxpbmcgdGczX3NldF9wb3dlcl9zdGF0ZSgpIHNvIHRoYXQKIAkgKiB3ZSBrbm93IHdoZXRoZXIgb3Igbm90IHRvIHN3aXRjaCBvdXQgb2YgVmF1eCBwb3dlci4KIAkgKiBXaGVuIHRoZSBmbGFnIGlzIHNldCwgaXQgbWVhbnMgdGhhdCBHUElPMSBpcyB1c2VkIGZvciBlZXByb20KQEAgLTEzNjI1LDcgKzEzODcyLDcgQEAKIAkgKi8KIAl0ZzNfZ2V0X2VlcHJvbV9od19jZmcodHApOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX0FQRSkgeworCWlmICh0ZzNfZmxhZyh0cCwgRU5BQkxFX0FQRSkpIHsKIAkJLyogQWxsb3cgcmVhZHMgYW5kIHdyaXRlcyB0byB0aGUKIAkJICogQVBFIHJlZ2lzdGVyIGFuZCBtZW1vcnkgc3BhY2UuCiAJCSAqLwpAQCAtMTM2NDAsMTYgKzEzODg3LDE2IEBACiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzYxIHx8CiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg1IHx8CiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc4MCB8fAotCSAgICAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM181NzE3X1BMVVMpKQotCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0NQTVVfUFJFU0VOVDsKKwkgICAgdGczX2ZsYWcodHAsIDU3NzY1X1BMVVMpKQorCQl0ZzNfZmxhZ19zZXQodHAsIENQTVVfUFJFU0VOVCk7CiAKLQkvKiBTZXQgdXAgdHAtPmdyY19sb2NhbF9jdHJsIGJlZm9yZSBjYWxsaW5nIHRnX3Bvd2VyX3VwKCkuCisJLyogU2V0IHVwIHRwLT5ncmNfbG9jYWxfY3RybCBiZWZvcmUgY2FsbGluZyB0ZzNfcG93ZXJfdXAoKS4KIAkgKiBHUElPMSBkcml2ZW4gaGlnaCB3aWxsIGJyaW5nIDU3MDAncyBleHRlcm5hbCBQSFkgb3V0IG9mIHJlc2V0LgogCSAqIEl0IGlzIGFsc28gdXNlZCBhcyBlZXByb20gd3JpdGUgcHJvdGVjdCBvbiBMT01zLgogCSAqLwogCXRwLT5ncmNfbG9jYWxfY3RybCA9IEdSQ19MQ0xDVFJMX0lOVF9PTl9BVFROIHwgR1JDX0xDTENUUkxfQVVUT19TRUVQUk9NOwotCWlmICgoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDApIHx8Ci0JICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRUVQUk9NX1dSSVRFX1BST1QpKQorCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwMCB8fAorCSAgICB0ZzNfZmxhZyh0cCwgRUVQUk9NX1dSSVRFX1BST1QpKQogCQl0cC0+Z3JjX2xvY2FsX2N0cmwgfD0gKEdSQ19MQ0xDVFJMX0dQSU9fT0UxIHwKIAkJCQkgICAgICAgR1JDX0xDTENUUkxfR1BJT19PVVRQVVQxKTsKIAkvKiBVbnVzZWQgR1BJTzMgbXVzdCBiZSBkcml2ZW4gYXMgb3V0cHV0IG9uIDU3NTIgYmVjYXVzZSB0aGVyZQpAQCAtMTM2NjcsNyArMTM5MTQsNyBAQAogCSAgICB0cC0+cGRldi0+ZGV2aWNlID09IFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3NjFTKSB7CiAJCS8qIFR1cm4gb2ZmIHRoZSBkZWJ1ZyBVQVJULiAqLwogCQl0cC0+Z3JjX2xvY2FsX2N0cmwgfD0gR1JDX0xDTENUUkxfR1BJT19VQVJUX1NFTDsKLQkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfSVNfTklDKQorCQlpZiAodGczX2ZsYWcodHAsIElTX05JQykpCiAJCQkvKiBLZWVwIFZNYWluIHBvd2VyLiAqLwogCQkJdHAtPmdyY19sb2NhbF9jdHJsIHw9IEdSQ19MQ0xDVFJMX0dQSU9fT0UwIHwKIAkJCQkJICAgICAgR1JDX0xDTENUUkxfR1BJT19PVVRQVVQwOwpAQCAtMTM2ODMsMjYgKzEzOTMwLDI1IEBACiAJLyogRGVyaXZlIGluaXRpYWwganVtYm8gbW9kZSBmcm9tIE1UVSBhc3NpZ25lZCBpbgogCSAqIGV0aGVyX3NldHVwKCkgdmlhIHRoZSBhbGxvY19ldGhlcmRldigpIGNhbGwKIAkgKi8KLQlpZiAodHAtPmRldi0+bXR1ID4gRVRIX0RBVEFfTEVOICYmCi0JICAgICEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzgwX0NMQVNTKSkKLQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19KVU1CT19SSU5HX0VOQUJMRTsKKwlpZiAodHAtPmRldi0+bXR1ID4gRVRIX0RBVEFfTEVOICYmICF0ZzNfZmxhZyh0cCwgNTc4MF9DTEFTUykpCisJCXRnM19mbGFnX3NldCh0cCwgSlVNQk9fUklOR19FTkFCTEUpOwogCiAJLyogRGV0ZXJtaW5lIFdha2VPbkxhbiBzcGVlZCB0byB1c2UuICovCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzAwIHx8CiAJICAgIHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81NzAxX0EwIHx8CiAJICAgIHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81NzAxX0IwIHx8CiAJICAgIHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81NzAxX0IyKSB7Ci0JCXRwLT50ZzNfZmxhZ3MgJj0gfihURzNfRkxBR19XT0xfU1BFRURfMTAwTUIpOworCQl0ZzNfZmxhZ19jbGVhcih0cCwgV09MX1NQRUVEXzEwME1CKTsKIAl9IGVsc2UgewotCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX1dPTF9TUEVFRF8xMDBNQjsKKwkJdGczX2ZsYWdfc2V0KHRwLCBXT0xfU1BFRURfMTAwTUIpOwogCX0KIAogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikKIAkJdHAtPnBoeV9mbGFncyB8PSBURzNfUEhZRkxHX0lTX0ZFVDsKIAogCS8qIEEgZmV3IGJvYXJkcyBkb24ndCB3YW50IEV0aGVybmV0QFdpcmVTcGVlZCBwaHkgZmVhdHVyZSAqLwotCWlmICgoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDApIHx8Ci0JICAgICgoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDUpICYmCisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzAwIHx8CisJICAgIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwNSAmJgogCSAgICAgKHRwLT5wY2lfY2hpcF9yZXZfaWQgIT0gQ0hJUFJFVl9JRF81NzA1X0EwKSAmJgogCSAgICAgKHRwLT5wY2lfY2hpcF9yZXZfaWQgIT0gQ0hJUFJFVl9JRF81NzA1X0ExKSkgfHwKIAkgICAgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0lTX0ZFVCkgfHwKQEAgLTEzNzE1LDExICsxMzk2MSwxMSBAQAogCWlmICh0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTcwNF9BMCkKIAkJdHAtPnBoeV9mbGFncyB8PSBURzNfUEhZRkxHXzU3MDRfQTBfQlVHOwogCi0JaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykgJiYKKwlpZiAodGczX2ZsYWcodHAsIDU3MDVfUExVUykgJiYKIAkgICAgISh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19JU19GRVQpICYmCiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81Nzg1ICYmCiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81Nzc4MCAmJgotCSAgICAhKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTcxN19QTFVTKSkgeworCSAgICAhdGczX2ZsYWcodHAsIDU3NzY1X1BMVVMpKSB7CiAJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1NSB8fAogCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODcgfHwKIAkJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg0IHx8CkBAIC0xMzc0MCw3ICsxMzk4Niw3IEBACiAJCQl0cC0+cGh5X290cCA9IFRHM19PVFBfREVGQVVMVDsKIAl9CiAKLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0NQTVVfUFJFU0VOVCkKKwlpZiAodGczX2ZsYWcodHAsIENQTVVfUFJFU0VOVCkpCiAJCXRwLT5taV9tb2RlID0gTUFDX01JX01PREVfNTAwS0haX0NPTlNUOwogCWVsc2UKIAkJdHAtPm1pX21vZGUgPSBNQUNfTUlfTU9ERV9CQVNFOwpAQCAtMTM3NTAsOSArMTM5OTYsMTcgQEAKIAkgICAgR0VUX0NISVBfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IENISVBSRVZfNTcwMF9CWCkKIAkJdHAtPmNvYWxlc2NlX21vZGUgfD0gSE9TVENDX01PREVfMzJCWVRFOwogCisJLyogU2V0IHRoZXNlIGJpdHMgdG8gZW5hYmxlIHN0YXRpc3RpY3Mgd29ya2Fyb3VuZC4gKi8KKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcgfHwKKwkgICAgdHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3MTlfQTAgfHwKKwkgICAgdHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3MjBfQTApIHsKKwkJdHAtPmNvYWxlc2NlX21vZGUgfD0gSE9TVENDX01PREVfQVRUTjsKKwkJdHAtPmdyY19tb2RlIHw9IEdSQ19NT0RFX0lSUV9PTl9GTE9XX0FUVE47CisJfQorCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg1IHx8CiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc4MCkKLQkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfVVNFX1BIWUxJQjsKKwkJdGczX2ZsYWdfc2V0KHRwLCBVU0VfUEhZTElCKTsKIAogCWVyciA9IHRnM19tZGlvX2luaXQodHApOwogCWlmIChlcnIpCkBAIC0xMzc2MCw3ICsxNDAxNCwxNSBAQAogCiAJLyogSW5pdGlhbGl6ZSBkYXRhL2Rlc2NyaXB0b3IgYnl0ZS93b3JkIHN3YXBwaW5nLiAqLwogCXZhbCA9IHRyMzIoR1JDX01PREUpOwotCXZhbCAmPSBHUkNfTU9ERV9IT1NUX1NUQUNLVVA7CisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzIwKQorCQl2YWwgJj0gKEdSQ19NT0RFX0JZVEVfU1dBUF9CMkhSWF9EQVRBIHwKKwkJCUdSQ19NT0RFX1dPUkRfU1dBUF9CMkhSWF9EQVRBIHwKKwkJCUdSQ19NT0RFX0IySFJYX0VOQUJMRSB8CisJCQlHUkNfTU9ERV9IVFgyQl9FTkFCTEUgfAorCQkJR1JDX01PREVfSE9TVF9TVEFDS1VQKTsKKwllbHNlCisJCXZhbCAmPSBHUkNfTU9ERV9IT1NUX1NUQUNLVVA7CisKIAl0dzMyKEdSQ19NT0RFLCB2YWwgfCB0cC0+Z3JjX21vZGUpOwogCiAJdGczX3N3aXRjaF9jbG9ja3ModHApOwpAQCAtMTM3NzEsNyArMTQwMzMsNyBAQAogCXBjaV9yZWFkX2NvbmZpZ19kd29yZCh0cC0+cGRldiwgVEczUENJX1BDSVNUQVRFLAogCQkJICAgICAgJnBjaV9zdGF0ZV9yZWcpOwogCWlmICgocGNpX3N0YXRlX3JlZyAmIFBDSVNUQVRFX0NPTlZfUENJX01PREUpID09IDAgJiYKLQkgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19QQ0lYX1RBUkdFVF9IV0JVRykgPT0gMCkgeworCSAgICAhdGczX2ZsYWcodHAsIFBDSVhfVEFSR0VUX0hXQlVHKSkgewogCQl1MzIgY2hpcHJldmlkID0gR0VUX0NISVBfUkVWX0lEKHRwLT5taXNjX2hvc3RfY3RybCk7CiAKIAkJaWYgKGNoaXByZXZpZCA9PSBDSElQUkVWX0lEXzU3MDFfQTAgfHwKQEAgLTEzNzkwLDcgKzE0MDUyLDcgQEAKIAkJCXdyaXRlbCgweDAwMDAwMDAwLCBzcmFtX2Jhc2UgKyA0KTsKIAkJCXdyaXRlbCgweGZmZmZmZmZmLCBzcmFtX2Jhc2UgKyA0KTsKIAkJCWlmIChyZWFkbChzcmFtX2Jhc2UpICE9IDB4MDAwMDAwMDApCi0JCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19QQ0lYX1RBUkdFVF9IV0JVRzsKKwkJCQl0ZzNfZmxhZ19zZXQodHAsIFBDSVhfVEFSR0VUX0hXQlVHKTsKIAkJfQogCX0KIApAQCAtMTM4MDMsMTIgKzE0MDY1LDEyIEBACiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzA1ICYmCiAJICAgIChncmNfbWlzY19jZmcgPT0gR1JDX01JU0NfQ0ZHX0JPQVJEX0lEXzU3ODggfHwKIAkgICAgIGdyY19taXNjX2NmZyA9PSBHUkNfTUlTQ19DRkdfQk9BUkRfSURfNTc4OE0pKQotCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9JU181Nzg4OworCQl0ZzNfZmxhZ19zZXQodHAsIElTXzU3ODgpOwogCi0JaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9JU181Nzg4KSAmJgotCSAgICAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MDApKQotCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX1RBR0dFRF9TVEFUVVM7Ci0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19UQUdHRURfU1RBVFVTKSB7CisJaWYgKCF0ZzNfZmxhZyh0cCwgSVNfNTc4OCkgJiYKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MDApCisJCXRnM19mbGFnX3NldCh0cCwgVEFHR0VEX1NUQVRVUyk7CisJaWYgKHRnM19mbGFnKHRwLCBUQUdHRURfU1RBVFVTKSkgewogCQl0cC0+Y29hbGVzY2VfbW9kZSB8PSAoSE9TVENDX01PREVfQ0xSVElDS19SWEJEIHwKIAkJCQkgICAgICBIT1NUQ0NfTU9ERV9DTFJUSUNLX1RYQkQpOwogCkBAIC0xMzgxOCw3ICsxNDA4MCw3IEBACiAJfQogCiAJLyogUHJlc2VydmUgdGhlIEFQRSBNQUNfTU9ERSBiaXRzICovCi0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX0FQRSkKKwlpZiAodGczX2ZsYWcodHAsIEVOQUJMRV9BUEUpKQogCQl0cC0+bWFjX21vZGUgPSBNQUNfTU9ERV9BUEVfVFhfRU4gfCBNQUNfTU9ERV9BUEVfUlhfRU47CiAJZWxzZQogCQl0cC0+bWFjX21vZGUgPSBURzNfREVGX01BQ19NT0RFOwpAQCAtMTM4NjUsOSArMTQxMjcsOSBAQAogCSAqIHN0YXR1cyByZWdpc3RlciBpbiB0aG9zZSBjYXNlcy4KIAkgKi8KIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDApCi0JCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfVVNFX0xJTktDSEdfUkVHOworCQl0ZzNfZmxhZ19zZXQodHAsIFVTRV9MSU5LQ0hHX1JFRyk7CiAJZWxzZQotCQl0cC0+dGczX2ZsYWdzICY9IH5URzNfRkxBR19VU0VfTElOS0NIR19SRUc7CisJCXRnM19mbGFnX2NsZWFyKHRwLCBVU0VfTElOS0NIR19SRUcpOwogCiAJLyogVGhlIGxlZF9jdHJsIGlzIHNldCBkdXJpbmcgdGczX3BoeV9wcm9iZSwgaGVyZSB3ZSBtaWdodAogCSAqIGhhdmUgdG8gZm9yY2UgdGhlIGxpbmsgc3RhdHVzIHBvbGxpbmcgbWVjaGFuaXNtIGJhc2VkCkBAIC0xMzg3NywxOSArMTQxMzksMTkgQEAKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDEgJiYKIAkgICAgISh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19QSFlfU0VSREVTKSkgewogCQl0cC0+cGh5X2ZsYWdzIHw9IFRHM19QSFlGTEdfVVNFX01JX0lOVEVSUlVQVDsKLQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19VU0VfTElOS0NIR19SRUc7CisJCXRnM19mbGFnX3NldCh0cCwgVVNFX0xJTktDSEdfUkVHKTsKIAl9CiAKIAkvKiBGb3IgYWxsIFNFUkRFUyB3ZSBwb2xsIHRoZSBNQUMgc3RhdHVzIHJlZ2lzdGVyLiAqLwogCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19QSFlfU0VSREVTKQotCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX1BPTExfU0VSREVTOworCQl0ZzNfZmxhZ19zZXQodHAsIFBPTExfU0VSREVTKTsKIAllbHNlCi0JCXRwLT50ZzNfZmxhZ3MgJj0gflRHM19GTEFHX1BPTExfU0VSREVTOworCQl0ZzNfZmxhZ19jbGVhcih0cCwgUE9MTF9TRVJERVMpOwogCiAJdHAtPnJ4X29mZnNldCA9IE5FVF9JUF9BTElHTjsKIAl0cC0+cnhfY29weV90aHJlc2ggPSBURzNfUlhfQ09QWV9USFJFU0hPTEQ7CiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzAxICYmCi0JICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfUENJWF9NT0RFKSAhPSAwKSB7CisJICAgIHRnM19mbGFnKHRwLCBQQ0lYX01PREUpKSB7CiAJCXRwLT5yeF9vZmZzZXQgPSAwOwogI2lmbmRlZiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUwogCQl0cC0+cnhfY29weV90aHJlc2ggPSB+KHUxNikwOwpAQCAtMTM5MTAsNyArMTQxNzIsNyBAQAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1NSkKIAkJdHAtPnJ4X3N0ZF9tYXhfcG9zdCA9IDg7CiAKLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0FTUE1fV09SS0FST1VORCkKKwlpZiAodGczX2ZsYWcodHAsIEFTUE1fV09SS0FST1VORCkpCiAJCXRwLT5wd3JtZ210X3RocmVzaCA9IHRyMzIoUENJRV9QV1JfTUdNVF9USFJFU0gpICYKIAkJCQkgICAgIFBDSUVfUFdSX01HTVRfTDFfVEhSRVNIX01TSzsKIApAQCAtMTM5NTcsMTYgKzE0MjE5LDE1IEBACiAjZW5kaWYKIAogCW1hY19vZmZzZXQgPSAweDdjOwotCWlmICgoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDQpIHx8Ci0JICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3ODBfQ0xBU1MpKSB7CisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzA0IHx8CisJICAgIHRnM19mbGFnKHRwLCA1NzgwX0NMQVNTKSkgewogCQlpZiAodHIzMihURzNQQ0lfRFVBTF9NQUNfQ1RSTCkgJiBEVUFMX01BQ19DVFJMX0lEKQogCQkJbWFjX29mZnNldCA9IDB4Y2M7CiAJCWlmICh0ZzNfbnZyYW1fbG9jayh0cCkpCiAJCQl0dzMyX2YoTlZSQU1fQ01ELCBOVlJBTV9DTURfUkVTRVQpOwogCQllbHNlCiAJCQl0ZzNfbnZyYW1fdW5sb2NrKHRwKTsKLQl9IGVsc2UgaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3IHx8Ci0JCSAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE5KSB7CisJfSBlbHNlIGlmICh0ZzNfZmxhZyh0cCwgNTcxN19QTFVTKSkgewogCQlpZiAoUENJX0ZVTkModHAtPnBkZXYtPmRldmZuKSAmIDEpCiAJCQltYWNfb2Zmc2V0ID0gMHhjYzsKIAkJaWYgKFBDSV9GVU5DKHRwLT5wZGV2LT5kZXZmbikgPiAxKQpAQCAtMTM5OTEsNyArMTQyNTIsNyBAQAogCX0KIAlpZiAoIWFkZHJfb2spIHsKIAkJLyogTmV4dCwgdHJ5IE5WUkFNLiAqLwotCQlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX05PX05WUkFNKSAmJgorCQlpZiAoIXRnM19mbGFnKHRwLCBOT19OVlJBTSkgJiYKIAkJICAgICF0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCBtYWNfb2Zmc2V0ICsgMCwgJmhpKSAmJgogCQkgICAgIXRnM19udnJhbV9yZWFkX2JlMzIodHAsIG1hY19vZmZzZXQgKyA0LCAmbG8pKSB7CiAJCQltZW1jcHkoJmRldi0+ZGV2X2FkZHJbMF0sICgoY2hhciAqKSZoaSkgKyAyLCAyKTsKQEAgLTE0MDQyLDcgKzE0MzAzLDcgQEAKIAkgKi8KIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MDAgJiYKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MDEgJiYKLQkgICAgISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BDSV9FWFBSRVNTKSkKKwkgICAgIXRnM19mbGFnKHRwLCBQQ0lfRVhQUkVTUykpCiAJCWdvdG8gb3V0OwogCiAjaWYgZGVmaW5lZChDT05GSUdfUFBDNjQpIHx8IGRlZmluZWQoQ09ORklHX0lBNjQpIHx8IGRlZmluZWQoQ09ORklHX1BBUklTQykKQEAgLTE0MDU1LDcgKzE0MzE2LDcgQEAKICNlbmRpZgogI2VuZGlmCiAKLQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM181NzE3X1BMVVMpIHsKKwlpZiAodGczX2ZsYWcodHAsIDU3NzY1X1BMVVMpKSB7CiAJCXZhbCA9IGdvYWwgPyAwIDogRE1BX1JXQ1RSTF9ESVNfQ0FDSEVfQUxJR05NRU5UOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xNDA3NCw4ICsxNDMzNSw3IEBACiAJICogb3RoZXIgdGhhbiA1NzAwIGFuZCA1NzAxIHdoaWNoIGRvIG5vdCBpbXBsZW1lbnQgdGhlCiAJICogYm91bmRhcnkgYml0cy4KIAkgKi8KLQlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19QQ0lYX01PREUpICYmCi0JICAgICEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QQ0lfRVhQUkVTUykpIHsKKwlpZiAodGczX2ZsYWcodHAsIFBDSVhfTU9ERSkgJiYgIXRnM19mbGFnKHRwLCBQQ0lfRVhQUkVTUykpIHsKIAkJc3dpdGNoIChjYWNoZWxpbmVfc2l6ZSkgewogCQljYXNlIDE2OgogCQljYXNlIDMyOgpAQCAtMTQxMDAsNyArMTQzNjAsNyBAQAogCQkJCURNQV9SV0NUUkxfV1JJVEVfQk5EUllfMzg0X1BDSVgpOwogCQkJYnJlYWs7CiAJCX0KLQl9IGVsc2UgaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUENJX0VYUFJFU1MpIHsKKwl9IGVsc2UgaWYgKHRnM19mbGFnKHRwLCBQQ0lfRVhQUkVTUykpIHsKIAkJc3dpdGNoIChjYWNoZWxpbmVfc2l6ZSkgewogCQljYXNlIDE2OgogCQljYXNlIDMyOgpAQCAtMTQyNzIsMTMgKzE0NTMyLDEzIEBACiAKIAl0cC0+ZG1hX3J3Y3RybCA9IHRnM19jYWxjX2RtYV9ibmRyeSh0cCwgdHAtPmRtYV9yd2N0cmwpOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTcxN19QTFVTKQorCWlmICh0ZzNfZmxhZyh0cCwgNTc3NjVfUExVUykpCiAJCWdvdG8gb3V0OwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUENJX0VYUFJFU1MpIHsKKwlpZiAodGczX2ZsYWcodHAsIFBDSV9FWFBSRVNTKSkgewogCQkvKiBETUEgcmVhZCB3YXRlcm1hcmsgbm90IHVzZWQgb24gUENJRSAqLwogCQl0cC0+ZG1hX3J3Y3RybCB8PSAweDAwMTgwMDAwOwotCX0gZWxzZSBpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfUENJWF9NT0RFKSkgeworCX0gZWxzZSBpZiAoIXRnM19mbGFnKHRwLCBQQ0lYX01PREUpKSB7CiAJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwNSB8fAogCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTApCiAJCQl0cC0+ZG1hX3J3Y3RybCB8PSAweDAwM2YwMDAwOwpAQCAtMTQyOTQsNyArMTQ1NTQsNyBAQAogCQkJICogZG8gdGhlIGxlc3MgcmVzdHJpY3RpdmUgT05FX0RNQSB3b3JrYXJvdW5kIGZvcgogCQkJICogYmV0dGVyIHBlcmZvcm1hbmNlLgogCQkJICovCi0JCQlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR180MEJJVF9ETUFfQlVHKSAmJgorCQkJaWYgKHRnM19mbGFnKHRwLCA0MEJJVF9ETUFfQlVHKSAmJgogCQkJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzA0KQogCQkJCXRwLT5kbWFfcndjdHJsIHw9IDB4ODAwMDsKIAkJCWVsc2UgaWYgKGNjdmFsID09IDB4NiB8fCBjY3ZhbCA9PSAweDcpCkBAIC0xNDQyMyw3ICsxNDY4Myw2IEBACiAJfQogCWlmICgodHAtPmRtYV9yd2N0cmwgJiBETUFfUldDVFJMX1dSSVRFX0JORFJZX01BU0spICE9CiAJICAgIERNQV9SV0NUUkxfV1JJVEVfQk5EUllfMTYpIHsKLQogCQkvKiBETUEgdGVzdCBwYXNzZWQgd2l0aG91dCBhZGp1c3RpbmcgRE1BIGJvdW5kYXJ5LAogCQkgKiBub3cgbG9vayBmb3IgY2hpcHNldHMgdGhhdCBhcmUga25vd24gdG8gZXhwb3NlIHRoZQogCQkgKiBETUEgYnVnIHdpdGhvdXQgZmFpbGluZyB0aGUgdGVzdC4KQEAgLTE0NDQ3LDcgKzE0NzA2LDcgQEAKIAogc3RhdGljIHZvaWQgX19kZXZpbml0IHRnM19pbml0X2J1Zm1ncl9jb25maWcoc3RydWN0IHRnMyAqdHApCiB7Ci0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTcxN19QTFVTKSB7CisJaWYgKHRnM19mbGFnKHRwLCA1Nzc2NV9QTFVTKSkgewogCQl0cC0+YnVmbWdyX2NvbmZpZy5tYnVmX3JlYWRfZG1hX2xvd193YXRlciA9CiAJCQlERUZBVUxUX01CX1JETUFfTE9XX1dBVEVSXzU3MDU7CiAJCXRwLT5idWZtZ3JfY29uZmlnLm1idWZfbWFjX3J4X2xvd193YXRlciA9CkBAIC0xNDQ2MSw3ICsxNDcyMCw3IEBACiAJCQlERUZBVUxUX01CX01BQ1JYX0xPV19XQVRFUl9KVU1CT181Nzc2NTsKIAkJdHAtPmJ1Zm1ncl9jb25maWcubWJ1Zl9oaWdoX3dhdGVyX2p1bWJvID0KIAkJCURFRkFVTFRfTUJfSElHSF9XQVRFUl9KVU1CT181Nzc2NTsKLQl9IGVsc2UgaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSB7CisJfSBlbHNlIGlmICh0ZzNfZmxhZyh0cCwgNTcwNV9QTFVTKSkgewogCQl0cC0+YnVmbWdyX2NvbmZpZy5tYnVmX3JlYWRfZG1hX2xvd193YXRlciA9CiAJCQlERUZBVUxUX01CX1JETUFfTE9XX1dBVEVSXzU3MDU7CiAJCXRwLT5idWZtZ3JfY29uZmlnLm1idWZfbWFjX3J4X2xvd193YXRlciA9CkBAIC0xNDUyNSw2ICsxNDc4NCw3IEBACiAJY2FzZSBURzNfUEhZX0lEX0JDTTU3MThTOglyZXR1cm4gIjU3MThTIjsKIAljYXNlIFRHM19QSFlfSURfQkNNNTc3NjU6CXJldHVybiAiNTc3NjUiOwogCWNhc2UgVEczX1BIWV9JRF9CQ001NzE5QzoJcmV0dXJuICI1NzE5QyI7CisJY2FzZSBURzNfUEhZX0lEX0JDTTU3MjBDOglyZXR1cm4gIjU3MjBDIjsKIAljYXNlIFRHM19QSFlfSURfQkNNODAwMjoJcmV0dXJuICI4MDAyL3NlcmRlcyI7CiAJY2FzZSAwOgkJCXJldHVybiAic2VyZGVzIjsKIAlkZWZhdWx0OgkJcmV0dXJuICJ1bmtub3duIjsKQEAgLTE0NTMzLDEwICsxNDc5MywxMCBAQAogCiBzdGF0aWMgY2hhciAqIF9fZGV2aW5pdCB0ZzNfYnVzX3N0cmluZyhzdHJ1Y3QgdGczICp0cCwgY2hhciAqc3RyKQogewotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BDSV9FWFBSRVNTKSB7CisJaWYgKHRnM19mbGFnKHRwLCBQQ0lfRVhQUkVTUykpIHsKIAkJc3RyY3B5KHN0ciwgIlBDSSBFeHByZXNzIik7CiAJCXJldHVybiBzdHI7Ci0JfSBlbHNlIGlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfUENJWF9NT0RFKSB7CisJfSBlbHNlIGlmICh0ZzNfZmxhZyh0cCwgUENJWF9NT0RFKSkgewogCQl1MzIgY2xvY2tfY3RybCA9IHRyMzIoVEczUENJX0NMT0NLX0NUUkwpICYgMHgxZjsKIAogCQlzdHJjcHkoc3RyLCAiUENJWDoiKTsKQEAgLTE0NTU1LDEyICsxNDgxNSwxMiBAQAogCQkJc3RyY2F0KHN0ciwgIjEwME1IeiIpOwogCX0gZWxzZSB7CiAJCXN0cmNweShzdHIsICJQQ0k6Iik7Ci0JCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfUENJX0hJR0hfU1BFRUQpCisJCWlmICh0ZzNfZmxhZyh0cCwgUENJX0hJR0hfU1BFRUQpKQogCQkJc3RyY2F0KHN0ciwgIjY2TUh6Iik7CiAJCWVsc2UKIAkJCXN0cmNhdChzdHIsICIzM01IeiIpOwogCX0KLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1BDSV8zMkJJVCkKKwlpZiAodGczX2ZsYWcodHAsIFBDSV8zMkJJVCkpCiAJCXN0cmNhdChzdHIsICI6MzItYml0Iik7CiAJZWxzZQogCQlzdHJjYXQoc3RyLCAiOjY0LWJpdCIpOwpAQCAtMTQ2MTksNyArMTQ4NzksNyBAQAogCQllYy0+dHhfY29hbGVzY2VfdXNlY3NfaXJxID0gREVGQVVMVF9UWENPQUxfVElDS19JTlRfQ0xSVENLUzsKIAl9CiAKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpIHsKKwlpZiAodGczX2ZsYWcodHAsIDU3MDVfUExVUykpIHsKIAkJZWMtPnJ4X2NvYWxlc2NlX3VzZWNzX2lycSA9IDA7CiAJCWVjLT50eF9jb2FsZXNjZV91c2Vjc19pcnEgPSAwOwogCQllYy0+c3RhdHNfYmxvY2tfY29hbGVzY2VfdXNlY3MgPSAwOwpAQCAtMTQ2MzcsMjIgKzE0ODk3LDggQEAKIAkubmRvX2RvX2lvY3RsCQk9IHRnM19pb2N0bCwKIAkubmRvX3R4X3RpbWVvdXQJCT0gdGczX3R4X3RpbWVvdXQsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IHRnM19jaGFuZ2VfbXR1LAotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JLm5kb19wb2xsX2NvbnRyb2xsZXIJPSB0ZzNfcG9sbF9jb250cm9sbGVyLAotI2VuZGlmCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHRnM19uZXRkZXZfb3BzX2RtYV9idWcgPSB7Ci0JLm5kb19vcGVuCQk9IHRnM19vcGVuLAotCS5uZG9fc3RvcAkJPSB0ZzNfY2xvc2UsCi0JLm5kb19zdGFydF94bWl0CQk9IHRnM19zdGFydF94bWl0X2RtYV9idWcsCi0JLm5kb19nZXRfc3RhdHM2NAk9IHRnM19nZXRfc3RhdHM2NCwKLQkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKLQkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHRnM19zZXRfcnhfbW9kZSwKLQkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHRnM19zZXRfbWFjX2FkZHIsCi0JLm5kb19kb19pb2N0bAkJPSB0ZzNfaW9jdGwsCi0JLm5kb190eF90aW1lb3V0CQk9IHRnM190eF90aW1lb3V0LAotCS5uZG9fY2hhbmdlX210dQkJPSB0ZzNfY2hhbmdlX210dSwKKwkubmRvX2ZpeF9mZWF0dXJlcwk9IHRnM19maXhfZmVhdHVyZXMsCisJLm5kb19zZXRfZmVhdHVyZXMJPSB0ZzNfc2V0X2ZlYXR1cmVzLAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSB0ZzNfcG9sbF9jb250cm9sbGVyLAogI2VuZGlmCkBAIC0xNDY2Nyw2ICsxNDkxMyw3IEBACiAJdTMyIHNuZG1ieCwgcmN2bWJ4LCBpbnRtYng7CiAJY2hhciBzdHJbNDBdOwogCXU2NCBkbWFfbWFzaywgcGVyc2lzdF9kbWFfbWFzazsKKwl1MzIgZmVhdHVyZXMgPSAwOwogCiAJcHJpbnRrX29uY2UoS0VSTl9JTkZPICIlc1xuIiwgdmVyc2lvbik7CiAKQEAgLTE0NzAyLDggKzE0OTQ5LDYgQEAKIAogCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CiAKLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWDsKLQogCXRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl0cC0+cGRldiA9IHBkZXY7CiAJdHAtPmRldiA9IGRldjsKQEAgLTE0NzUzLDYgKzE0OTk4LDcgQEAKIAogCWRldi0+ZXRodG9vbF9vcHMgPSAmdGczX2V0aHRvb2xfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBURzNfVFhfVElNRU9VVDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmdGczX25ldGRldl9vcHM7CiAJZGV2LT5pcnEgPSBwZGV2LT5pcnE7CiAKIAllcnIgPSB0ZzNfZ2V0X2ludmFyaWFudHModHApOwpAQCAtMTQ3NjIsMjMgKzE1MDA4LDE1IEBACiAJCWdvdG8gZXJyX291dF9pb3VubWFwOwogCX0KIAotCWlmICgodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM181NzU1X1BMVVMpICYmCi0JICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzE3ICYmCi0JICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzE5KQotCQlkZXYtPm5ldGRldl9vcHMgPSAmdGczX25ldGRldl9vcHM7Ci0JZWxzZQotCQlkZXYtPm5ldGRldl9vcHMgPSAmdGczX25ldGRldl9vcHNfZG1hX2J1ZzsKLQotCiAJLyogVGhlIEVQQiBicmlkZ2UgaW5zaWRlIDU3MTQsIDU3MTUsIGFuZCA1NzgwIGFuZCBhbnkKIAkgKiBkZXZpY2UgYmVoaW5kIHRoZSBFUEIgY2Fubm90IHN1cHBvcnQgRE1BIGFkZHJlc3NlcyA+IDQwLWJpdC4KIAkgKiBPbiA2NC1iaXQgc3lzdGVtcyB3aXRoIElPTU1VLCB1c2UgNDAtYml0IGRtYV9tYXNrLgogCSAqIE9uIDY0LWJpdCBzeXN0ZW1zIHdpdGhvdXQgSU9NTVUsIHVzZSA2NC1iaXQgZG1hX21hc2sgYW5kCiAJICogZG8gRE1BIGFkZHJlc3MgY2hlY2sgaW4gdGczX3N0YXJ0X3htaXQoKS4KIAkgKi8KLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9JU181Nzg4KQorCWlmICh0ZzNfZmxhZyh0cCwgSVNfNTc4OCkpCiAJCXBlcnNpc3RfZG1hX21hc2sgPSBkbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0JZWxzZSBpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHXzQwQklUX0RNQV9CVUcpIHsKKwllbHNlIGlmICh0ZzNfZmxhZyh0cCwgNDBCSVRfRE1BX0JVRykpIHsKIAkJcGVyc2lzdF9kbWFfbWFzayA9IGRtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDQwKTsKICNpZmRlZiBDT05GSUdfSElHSE1FTQogCQlkbWFfbWFzayA9IERNQV9CSVRfTUFTSyg2NCk7CkBAIC0xNDc5MCw3ICsxNTAyOCw3IEBACiAJaWYgKGRtYV9tYXNrID4gRE1BX0JJVF9NQVNLKDMyKSkgewogCQllcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIGRtYV9tYXNrKTsKIAkJaWYgKCFlcnIpIHsKLQkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOworCQkJZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwogCQkJZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsCiAJCQkJCQkJICBwZXJzaXN0X2RtYV9tYXNrKTsKIAkJCWlmIChlcnIgPCAwKSB7CkBAIC0xNDgxMSw0OCArMTUwNDksNTggQEAKIAogCXRnM19pbml0X2J1Zm1ncl9jb25maWcodHApOwogCi0JLyogU2VsZWN0aXZlbHkgYWxsb3cgVFNPIGJhc2VkIG9uIG9wZXJhdGluZyBjb25kaXRpb25zICovCi0JaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0hXX1RTTykgfHwKLQkgICAgKHRwLT5md19uZWVkZWQgJiYgISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikpKQotCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9UU09fQ0FQQUJMRTsKLQllbHNlIHsKLQkJdHAtPnRnM19mbGFnczIgJj0gfihURzNfRkxHMl9UU09fQ0FQQUJMRSB8IFRHM19GTEcyX1RTT19CVUcpOwotCQl0cC0+ZndfbmVlZGVkID0gTlVMTDsKLQl9CisJZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYOwogCi0JaWYgKHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81NzAxX0EwKQotCQl0cC0+ZndfbmVlZGVkID0gRklSTVdBUkVfVEczOworCS8qIDU3MDAgQjAgY2hpcHMgZG8gbm90IHN1cHBvcnQgY2hlY2tzdW1taW5nIGNvcnJlY3RseSBkdWUKKwkgKiB0byBoYXJkd2FyZSBidWdzLgorCSAqLworCWlmICh0cC0+cGNpX2NoaXBfcmV2X2lkICE9IENISVBSRVZfSURfNTcwMF9CMCkgeworCQlmZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9SWENTVU07CisKKwkJaWYgKHRnM19mbGFnKHRwLCA1NzU1X1BMVVMpKQorCQkJZmVhdHVyZXMgfD0gTkVUSUZfRl9JUFY2X0NTVU07CisJfQogCiAJLyogVFNPIGlzIG9uIGJ5IGRlZmF1bHQgb24gY2hpcHMgdGhhdCBzdXBwb3J0IGhhcmR3YXJlIFRTTy4KIAkgKiBGaXJtd2FyZSBUU08gb24gb2xkZXIgY2hpcHMgZ2l2ZXMgbG93ZXIgcGVyZm9ybWFuY2UsIHNvIGl0CiAJICogaXMgb2ZmIGJ5IGRlZmF1bHQsIGJ1dCBjYW4gYmUgZW5hYmxlZCB1c2luZyBldGh0b29sLgogCSAqLwotCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9IV19UU08pICYmCi0JICAgIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9JUF9DU1VNKSkgewotCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwotCQl2bGFuX2ZlYXR1cmVzX2FkZChkZXYsIE5FVElGX0ZfVFNPKTsKLQl9Ci0JaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0hXX1RTT18yKSB8fAotCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9IV19UU09fMykpIHsKLQkJaWYgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0lQVjZfQ1NVTSkgewotCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7Ci0JCQl2bGFuX2ZlYXR1cmVzX2FkZChkZXYsIE5FVElGX0ZfVFNPNik7Ci0JCX0KLQkJaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0hXX1RTT18zKSB8fAorCWlmICgodGczX2ZsYWcodHAsIEhXX1RTT18xKSB8fAorCSAgICAgdGczX2ZsYWcodHAsIEhXX1RTT18yKSB8fAorCSAgICAgdGczX2ZsYWcodHAsIEhXX1RTT18zKSkgJiYKKwkgICAgKGZlYXR1cmVzICYgTkVUSUZfRl9JUF9DU1VNKSkKKwkJZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CisJaWYgKHRnM19mbGFnKHRwLCBIV19UU09fMikgfHwgdGczX2ZsYWcodHAsIEhXX1RTT18zKSkgeworCQlpZiAoZmVhdHVyZXMgJiBORVRJRl9GX0lQVjZfQ1NVTSkKKwkJCWZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKKwkJaWYgKHRnM19mbGFnKHRwLCBIV19UU09fMykgfHwKIAkJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzYxIHx8CiAJCSAgICAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODQgJiYKIAkJICAgICBHRVRfQ0hJUF9SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQ0hJUFJFVl81Nzg0X0FYKSB8fAotCQkJR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODUgfHwKLQkJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc4MCkgewotCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTT19FQ047Ci0JCQl2bGFuX2ZlYXR1cmVzX2FkZChkZXYsIE5FVElGX0ZfVFNPX0VDTik7Ci0JCX0KKwkJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg1IHx8CisJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3ODApCisJCQlmZWF0dXJlcyB8PSBORVRJRl9GX1RTT19FQ047CiAJfQogCisJZGV2LT5mZWF0dXJlcyB8PSBmZWF0dXJlczsKKwlkZXYtPnZsYW5fZmVhdHVyZXMgfD0gZmVhdHVyZXM7CisKKwkvKgorCSAqIEFkZCBsb29wYmFjayBjYXBhYmlsaXR5IG9ubHkgZm9yIGEgc3Vic2V0IG9mIGRldmljZXMgdGhhdCBzdXBwb3J0CisJICogTUFDLUxPT1BCQUNLLiBFdmVudHVhbGx5IHRoaXMgbmVlZCB0byBiZSBlbmhhbmNlZCB0byBhbGxvdyBJTlQtUEhZCisJICogbG9vcGJhY2sgZm9yIHRoZSByZW1haW5pbmcgZGV2aWNlcy4KKwkgKi8KKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3ODAgJiYKKwkgICAgIXRnM19mbGFnKHRwLCBDUE1VX1BSRVNFTlQpKQorCQkvKiBBZGQgdGhlIGxvb3BiYWNrIGNhcGFiaWxpdHkgKi8KKwkJZmVhdHVyZXMgfD0gTkVUSUZfRl9MT09QQkFDSzsKKworCWRldi0+aHdfZmVhdHVyZXMgfD0gZmVhdHVyZXM7CisKIAlpZiAodHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3MDVfQTEgJiYKLQkgICAgISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1RTT19DQVBBQkxFKSAmJgorCSAgICAhdGczX2ZsYWcodHAsIFRTT19DQVBBQkxFKSAmJgogCSAgICAhKHRyMzIoVEczUENJX1BDSVNUQVRFKSAmIFBDSVNUQVRFX0JVU19TUEVFRF9ISUdIKSkgewotCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9NQVhfUlhQRU5EXzY0OworCQl0ZzNfZmxhZ19zZXQodHAsIE1BWF9SWFBFTkRfNjQpOwogCQl0cC0+cnhfcGVuZGluZyA9IDYzOwogCX0KIApAQCAtMTQ4NjMsNyArMTUxMTEsNyBAQAogCQlnb3RvIGVycl9vdXRfaW91bm1hcDsKIAl9CiAKLQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfQVBFKSB7CisJaWYgKHRnM19mbGFnKHRwLCBFTkFCTEVfQVBFKSkgewogCQl0cC0+YXBlcmVncyA9IHBjaV9pb3JlbWFwX2JhcihwZGV2LCBCQVJfMik7CiAJCWlmICghdHAtPmFwZXJlZ3MpIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwKQEAgLTE0ODc0LDcgKzE1MTIyLDcgQEAKIAogCQl0ZzNfYXBlX2xvY2tfaW5pdCh0cCk7CiAKLQkJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKQorCQlpZiAodGczX2ZsYWcodHAsIEVOQUJMRV9BU0YpKQogCQkJdGczX3JlYWRfZGFzaF92ZXIodHApOwogCX0KIApAQCAtMTQ5MTgsNyArMTUxNjYsNyBAQAogCQllbHNlCiAJCQl0bmFwaS0+Y29hbF9ub3cgPSBIT1NUQ0NfTU9ERV9OT1c7CiAKLQkJaWYgKCEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1NVUFBPUlRfTVNJWCkpCisJCWlmICghdGczX2ZsYWcodHAsIFNVUFBPUlRfTVNJWCkpCiAJCQlicmVhazsKIAogCQkvKgpAQCAtMTQ5NzIsMjEgKzE1MjIwLDI1IEBACiAJCQlldGh0eXBlID0gIjEwLzEwMC8xMDAwQmFzZS1UIjsKIAogCQluZXRkZXZfaW5mbyhkZXYsICJhdHRhY2hlZCBQSFkgaXMgJXMgKCVzIEV0aGVybmV0KSAiCi0JCQkgICAgIihXaXJlU3BlZWRbJWRdKVxuIiwgdGczX3BoeV9zdHJpbmcodHApLCBldGh0eXBlLAotCQkJICAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfTk9fRVRIX1dJUkVfU1BFRUQpID09IDApOworCQkJICAgICIoV2lyZVNwZWVkWyVkXSwgRUVFWyVkXSlcbiIsCisJCQkgICAgdGczX3BoeV9zdHJpbmcodHApLCBldGh0eXBlLAorCQkJICAgICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19OT19FVEhfV0lSRV9TUEVFRCkgPT0gMCwKKwkJCSAgICAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfRUVFX0NBUCkgIT0gMCk7CiAJfQogCiAJbmV0ZGV2X2luZm8oZGV2LCAiUlhjc3Vtc1slZF0gTGlua0NoZ1JFR1slZF0gTUlpcnFbJWRdIEFTRlslZF0gVFNPY2FwWyVkXVxuIiwKLQkJICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfUlhfQ0hFQ0tTVU1TKSAhPSAwLAotCQkgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19VU0VfTElOS0NIR19SRUcpICE9IDAsCisJCSAgICAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSAhPSAwLAorCQkgICAgdGczX2ZsYWcodHAsIFVTRV9MSU5LQ0hHX1JFRykgIT0gMCwKIAkJICAgICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19VU0VfTUlfSU5URVJSVVBUKSAhPSAwLAotCQkgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKSAhPSAwLAotCQkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVFNPX0NBUEFCTEUpICE9IDApOworCQkgICAgdGczX2ZsYWcodHAsIEVOQUJMRV9BU0YpICE9IDAsCisJCSAgICB0ZzNfZmxhZyh0cCwgVFNPX0NBUEFCTEUpICE9IDApOwogCW5ldGRldl9pbmZvKGRldiwgImRtYV9yd2N0cmxbJTA4eF0gZG1hX21hc2tbJWQtYml0XVxuIiwKIAkJICAgIHRwLT5kbWFfcndjdHJsLAogCQkgICAgcGRldi0+ZG1hX21hc2sgPT0gRE1BX0JJVF9NQVNLKDMyKSA/IDMyIDoKIAkJICAgICgodTY0KXBkZXYtPmRtYV9tYXNrKSA9PSBETUFfQklUX01BU0soNDApID8gNDAgOiA2NCk7CiAKKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwogCXJldHVybiAwOwogCiBlcnJfb3V0X2FwZXVubWFwOgpAQCAtMTUwMjUsNyArMTUyNzcsNyBAQAogCiAJCWNhbmNlbF93b3JrX3N5bmMoJnRwLT5yZXNldF90YXNrKTsKIAotCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19VU0VfUEhZTElCKSB7CisJCWlmICghdGczX2ZsYWcodHAsIFVTRV9QSFlMSUIpKSB7CiAJCQl0ZzNfcGh5X2ZpbmkodHApOwogCQkJdGczX21kaW9fZmluaSh0cCk7CiAJCX0KQEAgLTE1MDcxLDcgKzE1MzIzLDcgQEAKIAogCXRnM19mdWxsX2xvY2sodHAsIDApOwogCXRnM19oYWx0KHRwLCBSRVNFVF9LSU5EX1NIVVRET1dOLCAxKTsKLQl0cC0+dGczX2ZsYWdzICY9IH5URzNfRkxBR19JTklUX0NPTVBMRVRFOworCXRnM19mbGFnX2NsZWFyKHRwLCBJTklUX0NPTVBMRVRFKTsKIAl0ZzNfZnVsbF91bmxvY2sodHApOwogCiAJZXJyID0gdGczX3Bvd2VyX2Rvd25fcHJlcGFyZSh0cCk7CkBAIC0xNTA4MCw3ICsxNTMzMiw3IEBACiAKIAkJdGczX2Z1bGxfbG9jayh0cCwgMCk7CiAKLQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19JTklUX0NPTVBMRVRFOworCQl0ZzNfZmxhZ19zZXQodHAsIElOSVRfQ09NUExFVEUpOwogCQllcnIyID0gdGczX3Jlc3RhcnRfaHcodHAsIDEpOwogCQlpZiAoZXJyMikKIAkJCWdvdG8gb3V0OwpAQCAtMTUxMTUsNyArMTUzNjcsNyBAQAogCiAJdGczX2Z1bGxfbG9jayh0cCwgMCk7CiAKLQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0lOSVRfQ09NUExFVEU7CisJdGczX2ZsYWdfc2V0KHRwLCBJTklUX0NPTVBMRVRFKTsKIAllcnIgPSB0ZzNfcmVzdGFydF9odyh0cCwgMSk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CkBAIC0xNTE0MywxMSArMTUzOTUsMTU2IEBACiAKICNlbmRpZiAvKiBDT05GSUdfUE1fU0xFRVAgKi8KIAorLyoqCisgKiB0ZzNfaW9fZXJyb3JfZGV0ZWN0ZWQgLSBjYWxsZWQgd2hlbiBQQ0kgZXJyb3IgaXMgZGV0ZWN0ZWQKKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2UKKyAqIEBzdGF0ZTogVGhlIGN1cnJlbnQgcGNpIGNvbm5lY3Rpb24gc3RhdGUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBhIFBDSSBidXMgZXJyb3IgYWZmZWN0aW5nCisgKiB0aGlzIGRldmljZSBoYXMgYmVlbiBkZXRlY3RlZC4KKyAqLworc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgdGczX2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCQkgICAgICBwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXBjaV9lcnNfcmVzdWx0X3QgZXJyID0gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDsKKworCW5ldGRldl9pbmZvKG5ldGRldiwgIlBDSSBJL08gZXJyb3IgZGV0ZWN0ZWRcbiIpOworCisJcnRubF9sb2NrKCk7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJZ290byBkb25lOworCisJdGczX3BoeV9zdG9wKHRwKTsKKworCXRnM19uZXRpZl9zdG9wKHRwKTsKKworCWRlbF90aW1lcl9zeW5jKCZ0cC0+dGltZXIpOworCXRnM19mbGFnX2NsZWFyKHRwLCBSRVNUQVJUX1RJTUVSKTsKKworCS8qIFdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHJlc2V0IHRhc2sgZG9lc24ndCBydW4gKi8KKwljYW5jZWxfd29ya19zeW5jKCZ0cC0+cmVzZXRfdGFzayk7CisJdGczX2ZsYWdfY2xlYXIodHAsIFRYX1JFQ09WRVJZX1BFTkRJTkcpOworCXRnM19mbGFnX2NsZWFyKHRwLCBSRVNUQVJUX1RJTUVSKTsKKworCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKKworCS8qIENsZWFuIHVwIHNvZnR3YXJlIHN0YXRlLCBldmVuIGlmIE1NSU8gaXMgYmxvY2tlZCAqLworCXRnM19mdWxsX2xvY2sodHAsIDApOworCXRnM19oYWx0KHRwLCBSRVNFVF9LSU5EX1NIVVRET1dOLCAwKTsKKwl0ZzNfZnVsbF91bmxvY2sodHApOworCitkb25lOgorCWlmIChzdGF0ZSA9PSBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpCisJCWVyciA9IFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CisJZWxzZQorCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisKKwlydG5sX3VubG9jaygpOworCisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiB0ZzNfaW9fc2xvdF9yZXNldCAtIGNhbGxlZCBhZnRlciB0aGUgcGNpIGJ1cyBoYXMgYmVlbiByZXNldC4KKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2UKKyAqCisgKiBSZXN0YXJ0IHRoZSBjYXJkIGZyb20gc2NyYXRjaCwgYXMgaWYgZnJvbSBhIGNvbGQtYm9vdC4KKyAqIEF0IHRoaXMgcG9pbnQsIHRoZSBjYXJkIGhhcyBleHByaWVuY2VkIGEgaGFyZCByZXNldCwKKyAqIGZvbGxvd2VkIGJ5IGZpeHVwcyBieSBCSU9TLCBhbmQgaGFzIGl0cyBjb25maWcgc3BhY2UKKyAqIHNldCB1cCBpZGVudGljYWxseSB0byB3aGF0IGl0IHdhcyBhdCBjb2xkIGJvb3QuCisgKi8KK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHRnM19pb19zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXBjaV9lcnNfcmVzdWx0X3QgcmMgPSBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOworCWludCBlcnI7CisKKwlydG5sX2xvY2soKTsKKworCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgeworCQluZXRkZXZfZXJyKG5ldGRldiwgIkNhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cbiIpOworCQlnb3RvIGRvbmU7CisJfQorCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisJcGNpX3NhdmVfc3RhdGUocGRldik7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQlyYyA9IFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKKwkJZ290byBkb25lOworCX0KKworCWVyciA9IHRnM19wb3dlcl91cCh0cCk7CisJaWYgKGVycikgeworCQluZXRkZXZfZXJyKG5ldGRldiwgIkZhaWxlZCB0byByZXN0b3JlIHJlZ2lzdGVyIGFjY2Vzcy5cbiIpOworCQlnb3RvIGRvbmU7CisJfQorCisJcmMgPSBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7CisKK2RvbmU6CisJcnRubF91bmxvY2soKTsKKworCXJldHVybiByYzsKK30KKworLyoqCisgKiB0ZzNfaW9fcmVzdW1lIC0gY2FsbGVkIHdoZW4gdHJhZmZpYyBjYW4gc3RhcnQgZmxvd2luZyBhZ2Fpbi4KKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2UKKyAqCisgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBlcnJvciByZWNvdmVyeSBkcml2ZXIgdGVsbHMKKyAqIHVzIHRoYXQgaXRzIE9LIHRvIHJlc3VtZSBub3JtYWwgb3BlcmF0aW9uLgorICovCitzdGF0aWMgdm9pZCB0ZzNfaW9fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCBlcnI7CisKKwlydG5sX2xvY2soKTsKKworCWlmICghbmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQlnb3RvIGRvbmU7CisKKwl0ZzNfZnVsbF9sb2NrKHRwLCAwKTsKKwl0ZzNfZmxhZ19zZXQodHAsIElOSVRfQ09NUExFVEUpOworCWVyciA9IHRnM19yZXN0YXJ0X2h3KHRwLCAxKTsKKwl0ZzNfZnVsbF91bmxvY2sodHApOworCWlmIChlcnIpIHsKKwkJbmV0ZGV2X2VycihuZXRkZXYsICJDYW5ub3QgcmVzdGFydCBoYXJkd2FyZSBhZnRlciByZXNldC5cbiIpOworCQlnb3RvIGRvbmU7CisJfQorCisJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOworCisJdHAtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgdHAtPnRpbWVyX29mZnNldDsKKwlhZGRfdGltZXIoJnRwLT50aW1lcik7CisKKwl0ZzNfbmV0aWZfc3RhcnQodHApOworCisJdGczX3BoeV9zdGFydCh0cCk7CisKK2RvbmU6CisJcnRubF91bmxvY2soKTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgdGczX2Vycl9oYW5kbGVyID0geworCS5lcnJvcl9kZXRlY3RlZAk9IHRnM19pb19lcnJvcl9kZXRlY3RlZCwKKwkuc2xvdF9yZXNldAk9IHRnM19pb19zbG90X3Jlc2V0LAorCS5yZXN1bWUJCT0gdGczX2lvX3Jlc3VtZQorfTsKKwogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHRnM19kcml2ZXIgPSB7CiAJLm5hbWUJCT0gRFJWX01PRFVMRV9OQU1FLAogCS5pZF90YWJsZQk9IHRnM19wY2lfdGJsLAogCS5wcm9iZQkJPSB0ZzNfaW5pdF9vbmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh0ZzNfcmVtb3ZlX29uZSksCisJLmVycl9oYW5kbGVyCT0gJnRnM19lcnJfaGFuZGxlciwKIAkuZHJpdmVyLnBtCT0gVEczX1BNX09QUywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5oIGIvZHJpdmVycy9uZXQvdGczLmgKaW5kZXggNWU5NjcwNi4uNWIzZDJmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGczLmgKKysrIGIvZHJpdmVycy9uZXQvdGczLmgKQEAgLTIzLDExICsyMywxMyBAQAogI2RlZmluZSBURzNfQkRJTkZPX05JQ19BRERSCQkweGNVTCAvKiAzMi1iaXQgKi8KICNkZWZpbmUgVEczX0JESU5GT19TSVpFCQkJMHgxMFVMCiAKLSNkZWZpbmUgVEczX1JYX0lOVEVSTkFMX1JJTkdfU1pfNTkwNgkzMgotCi0jZGVmaW5lIFJYX1NURF9NQVhfU0laRV81NzA1CQk1MTIKLSNkZWZpbmUgUlhfU1REX01BWF9TSVpFXzU3MTcJCTIwNDgKLSNkZWZpbmUgUlhfSlVNQk9fTUFYX1NJWkUJCTB4ZGVhZGJlZWYgLyogWFhYICovCisjZGVmaW5lIFRHM19SWF9TVERfTUFYX1NJWkVfNTcwMAk1MTIKKyNkZWZpbmUgVEczX1JYX1NURF9NQVhfU0laRV81NzE3CTIwNDgKKyNkZWZpbmUgVEczX1JYX0pNQl9NQVhfU0laRV81NzAwCTI1NgorI2RlZmluZSBURzNfUlhfSk1CX01BWF9TSVpFXzU3MTcJMTAyNAorI2RlZmluZSBURzNfUlhfUkVUX01BWF9TSVpFXzU3MDAJMTAyNAorI2RlZmluZSBURzNfUlhfUkVUX01BWF9TSVpFXzU3MDUJNTEyCisjZGVmaW5lIFRHM19SWF9SRVRfTUFYX1NJWkVfNTcxNwk0MDk2CiAKIC8qIEZpcnN0IDI1NiBieXRlcyBhcmUgYSBtaXJyb3Igb2YgUENJIGNvbmZpZyBzcGFjZS4gKi8KICNkZWZpbmUgVEczUENJX1ZFTkRPUgkJCTB4MDAwMDAwMDAKQEAgLTU0LDYgKzU2LDcgQEAKICNkZWZpbmUgIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3NzkxCSAweDE2YjIKICNkZWZpbmUgIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3Nzk1CSAweDE2YjYKICNkZWZpbmUgIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3MTkJIDB4MTY1NworI2RlZmluZSAgVEczUENJX0RFVklDRV9USUdPTjNfNTcyMAkgMHgxNjVmCiAvKiAweDA0IC0tPiAweDJjIHVudXNlZCAqLwogI2RlZmluZSBURzNQQ0lfU1VCVkVORE9SX0lEX0JST0FEQ09NCQlQQ0lfVkVORE9SX0lEX0JST0FEQ09NCiAjZGVmaW5lIFRHM1BDSV9TVUJERVZJQ0VfSURfQlJPQURDT01fOTU3MDBBNgkweDE2NDQKQEAgLTE0Miw2ICsxNDUsNyBAQAogI2RlZmluZSAgQ0hJUFJFVl9JRF81NzE3X0EwCQkgMHgwNTcxNzAwMAogI2RlZmluZSAgQ0hJUFJFVl9JRF81Nzc2NV9BMAkJIDB4NTc3ODUwMDAKICNkZWZpbmUgIENISVBSRVZfSURfNTcxOV9BMAkJIDB4MDU3MTkwMDAKKyNkZWZpbmUgIENISVBSRVZfSURfNTcyMF9BMAkJIDB4MDU3MjAwMDAKICNkZWZpbmUgIEdFVF9BU0lDX1JFVihDSElQX1JFVl9JRCkJKChDSElQX1JFVl9JRCkgPj4gMTIpCiAjZGVmaW5lICAgQVNJQ19SRVZfNTcwMAkJCSAweDA3CiAjZGVmaW5lICAgQVNJQ19SRVZfNTcwMQkJCSAweDAwCkBAIC0xNjMsNiArMTY3LDcgQEAKICNkZWZpbmUgICBBU0lDX1JFVl81NzE3CQkJIDB4NTcxNwogI2RlZmluZSAgIEFTSUNfUkVWXzU3NzY1CQkgMHg1Nzc4NQogI2RlZmluZSAgIEFTSUNfUkVWXzU3MTkJCQkgMHg1NzE5CisjZGVmaW5lICAgQVNJQ19SRVZfNTcyMAkJCSAweDU3MjAKICNkZWZpbmUgIEdFVF9DSElQX1JFVihDSElQX1JFVl9JRCkJKChDSElQX1JFVl9JRCkgPj4gOCkKICNkZWZpbmUgICBDSElQUkVWXzU3MDBfQVgJCSAweDcwCiAjZGVmaW5lICAgQ0hJUFJFVl81NzAwX0JYCQkgMHg3MQpAQCAtMTc1LDYgKzE4MCw3IEBACiAjZGVmaW5lICAgQ0hJUFJFVl81NzUwX0JYCQkgMHg0MQogI2RlZmluZSAgIENISVBSRVZfNTc4NF9BWAkJIDB4NTc4NDAKICNkZWZpbmUgICBDSElQUkVWXzU3NjFfQVgJCSAweDU3NjEwCisjZGVmaW5lICAgQ0hJUFJFVl81Nzc2NV9BWAkJIDB4NTc3NjUwCiAjZGVmaW5lICBHRVRfTUVUQUxfUkVWKENISVBfUkVWX0lEKQkoKENISVBfUkVWX0lEKSAmIDB4ZmYpCiAjZGVmaW5lICAgTUVUQUxfUkVWX0EwCQkJIDB4MDAKICNkZWZpbmUgICBNRVRBTF9SRVZfQTEJCQkgMHgwMQpAQCAtMTgzLDYgKzE4OSw3IEBACiAjZGVmaW5lICAgTUVUQUxfUkVWX0IyCQkJIDB4MDIKICNkZWZpbmUgVEczUENJX0RNQV9SV19DVFJMCQkweDAwMDAwMDZjCiAjZGVmaW5lICBETUFfUldDVFJMX0RJU19DQUNIRV9BTElHTk1FTlQgIDB4MDAwMDAwMDEKKyNkZWZpbmUgIERNQV9SV0NUUkxfVEFHR0VEX1NUQVRfV0EJIDB4MDAwMDAwODAKICNkZWZpbmUgIERNQV9SV0NUUkxfQ1JEUkRSX1JETUFfTVJSU19NU0sgMHgwMDAwMDM4MAogI2RlZmluZSAgRE1BX1JXQ1RSTF9SRUFEX0JORFJZX01BU0sJIDB4MDAwMDA3MDAKICNkZWZpbmUgIERNQV9SV0NUUkxfUkVBRF9CTkRSWV9ESVNBQgkgMHgwMDAwMDAwMApAQCAtNDczLDYgKzQ4MCw4IEBACiAjZGVmaW5lICBUWF9NT0RFX0JJR19CQ0tPRkZfRU5BQkxFCSAweDAwMDAwMDIwCiAjZGVmaW5lICBUWF9NT0RFX0xPTkdfUEFVU0VfRU5BQkxFCSAweDAwMDAwMDQwCiAjZGVmaW5lICBUWF9NT0RFX01CVUZfTE9DS1VQX0ZJWAkgMHgwMDAwMDEwMAorI2RlZmluZSAgVFhfTU9ERV9KTUJfRlJNX0xFTgkJIDB4MDA0MDAwMDAKKyNkZWZpbmUgIFRYX01PREVfQ05UX0ROX01PREUJCSAweDAwODAwMDAwCiAjZGVmaW5lIE1BQ19UWF9TVEFUVVMJCQkweDAwMDAwNDYwCiAjZGVmaW5lICBUWF9TVEFUVVNfWE9GRkVECQkgMHgwMDAwMDAwMQogI2RlZmluZSAgVFhfU1RBVFVTX1NFTlRfWE9GRgkJIDB4MDAwMDAwMDIKQEAgLTQ4Nyw2ICs0OTYsOCBAQAogI2RlZmluZSAgVFhfTEVOR1RIU19JUEdfU0hJRlQJCSA4CiAjZGVmaW5lICBUWF9MRU5HVEhTX0lQR19DUlNfTUFTSwkgMHgwMDAwMzAwMAogI2RlZmluZSAgVFhfTEVOR1RIU19JUEdfQ1JTX1NISUZUCSAxMgorI2RlZmluZSAgVFhfTEVOR1RIU19KTUJfRlJNX0xFTl9NU0sJIDB4MDBmZjAwMDAKKyNkZWZpbmUgIFRYX0xFTkdUSFNfQ05UX0RXTl9WQUxfTVNLCSAweGZmMDAwMDAwCiAjZGVmaW5lIE1BQ19SWF9NT0RFCQkJMHgwMDAwMDQ2OAogI2RlZmluZSAgUlhfTU9ERV9SRVNFVAkJCSAweDAwMDAwMDAxCiAjZGVmaW5lICBSWF9NT0RFX0VOQUJMRQkJCSAweDAwMDAwMDAyCkBAIC0xMDc5LDYgKzEwOTAsOSBAQAogI2RlZmluZSAgQ1BNVV9IU1RfQUNDX01BQ0NMS182XzI1CSAweDAwMTMwMDAwCiAvKiAweDM2MjAgLS0+IDB4MzYzMCB1bnVzZWQgKi8KIAorI2RlZmluZSBURzNfQ1BNVV9DTENLX09SSURFCQkweDAwMDAzNjI0CisjZGVmaW5lICBDUE1VX0NMQ0tfT1JJREVfTUFDX09SSURFX0VOCSAweDgwMDAwMDAwCisKICNkZWZpbmUgVEczX0NQTVVfQ0xDS19TVEFUCQkweDAwMDAzNjMwCiAjZGVmaW5lICBDUE1VX0NMQ0tfU1RBVF9NQUNfQ0xDS19NQVNLCSAweDAwMWYwMDAwCiAjZGVmaW5lICBDUE1VX0NMQ0tfU1RBVF9NQUNfQ0xDS182Ml81CSAweDAwMDAwMDAwCkBAIC0xMTg4LDYgKzEyMDIsNyBAQAogI2RlZmluZSBIT1NUQ0NfU1RBVFNfQkxLX05JQ19BRERSCTB4MDAwMDNjNDAKICNkZWZpbmUgSE9TVENDX1NUQVRVU19CTEtfTklDX0FERFIJMHgwMDAwM2M0NAogI2RlZmluZSBIT1NUQ0NfRkxPV19BVFROCQkweDAwMDAzYzQ4CisjZGVmaW5lIEhPU1RDQ19GTE9XX0FUVE5fTUJVRl9MV00JIDB4MDAwMDAwNDAKIC8qIDB4M2M0YyAtLT4gMHgzYzUwIHVudXNlZCAqLwogI2RlZmluZSBIT1NUQ0NfSlVNQk9fQ09OX0lEWAkJMHgwMDAwM2M1MAogI2RlZmluZSBIT1NUQ0NfU1REX0NPTl9JRFgJCTB4MDAwMDNjNTQKQEAgLTEzMjEsNiArMTMzNiw3IEBACiAjZGVmaW5lICBSRE1BQ19NT0RFX01VTFRfRE1BX1JEX0RJUwkgMHgwMTAwMDAwMAogI2RlZmluZSAgUkRNQUNfTU9ERV9JUFY0X0xTT19FTgkJIDB4MDgwMDAwMDAKICNkZWZpbmUgIFJETUFDX01PREVfSVBWNl9MU09fRU4JCSAweDEwMDAwMDAwCisjZGVmaW5lICBSRE1BQ19NT0RFX0gyQk5DX1ZMQU5fREVUCSAweDIwMDAwMDAwCiAjZGVmaW5lIFJETUFDX1NUQVRVUwkJCTB4MDAwMDQ4MDQKICNkZWZpbmUgIFJETUFDX1NUQVRVU19UR1RBQk9SVAkJIDB4MDAwMDAwMDQKICNkZWZpbmUgIFJETUFDX1NUQVRVU19NU1RBQk9SVAkJIDB4MDAwMDAwMDgKQEAgLTE1OTcsNiArMTYxMyw3IEBACiAjZGVmaW5lICBNU0dJTlRfTU9ERV9PTkVfU0hPVF9ESVNBQkxFCSAweDAwMDAwMDIwCiAjZGVmaW5lICBNU0dJTlRfTU9ERV9NVUxUSVZFQ19FTgkgMHgwMDAwMDA4MAogI2RlZmluZSBNU0dJTlRfU1RBVFVTCQkJMHgwMDAwNjAwNAorI2RlZmluZSAgTVNHSU5UX1NUQVRVU19NU0lfUkVRCQkgMHgwMDAwMDAwMQogI2RlZmluZSBNU0dJTlRfRklGTwkJCTB4MDAwMDYwMDgKIC8qIDB4NjAwYyAtLT4gMHg2NDAwIHVudXNlZCAqLwogCkBAIC0xNjEzLDYgKzE2MzAsOCBAQAogI2RlZmluZSAgR1JDX01PREVfV1NXQVBfTk9ORlJNX0RBVEEJMHgwMDAwMDAwNAogI2RlZmluZSAgR1JDX01PREVfQlNXQVBfREFUQQkJMHgwMDAwMDAxMAogI2RlZmluZSAgR1JDX01PREVfV1NXQVBfREFUQQkJMHgwMDAwMDAyMAorI2RlZmluZSAgR1JDX01PREVfQllURV9TV0FQX0IySFJYX0RBVEEJMHgwMDAwMDA0MAorI2RlZmluZSAgR1JDX01PREVfV09SRF9TV0FQX0IySFJYX0RBVEEJMHgwMDAwMDA4MAogI2RlZmluZSAgR1JDX01PREVfU1BMSVRIRFIJCTB4MDAwMDAxMDAKICNkZWZpbmUgIEdSQ19NT0RFX05PRlJNX0NSQUNLSU5HCTB4MDAwMDAyMDAKICNkZWZpbmUgIEdSQ19NT0RFX0lOQ0xfQ1JDCQkweDAwMDAwNDAwCkBAIC0xNjIwLDggKzE2MzksMTAgQEAKICNkZWZpbmUgIEdSQ19NT0RFX05PSVJRX09OX1NFTkRTCTB4MDAwMDIwMDAKICNkZWZpbmUgIEdSQ19NT0RFX05PSVJRX09OX1JDVgkJMHgwMDAwNDAwMAogI2RlZmluZSAgR1JDX01PREVfRk9SQ0VfUENJMzJCSVQJMHgwMDAwODAwMAorI2RlZmluZSAgR1JDX01PREVfQjJIUlhfRU5BQkxFCQkweDAwMDA4MDAwCiAjZGVmaW5lICBHUkNfTU9ERV9IT1NUX1NUQUNLVVAJCTB4MDAwMTAwMDAKICNkZWZpbmUgIEdSQ19NT0RFX0hPU1RfU0VOREJEUwkJMHgwMDAyMDAwMAorI2RlZmluZSAgR1JDX01PREVfSFRYMkJfRU5BQkxFCQkweDAwMDQwMDAwCiAjZGVmaW5lICBHUkNfTU9ERV9OT19UWF9QSERSX0NTVU0JMHgwMDEwMDAwMAogI2RlZmluZSAgR1JDX01PREVfTlZSQU1fV1JfRU5BQkxFCTB4MDAyMDAwMDAKICNkZWZpbmUgIEdSQ19NT0RFX1BDSUVfVExfU0VMCQkweDAwMDAwMDAwCkBAIC0xODE4LDYgKzE4MzksMzggQEAKICNkZWZpbmUgIEZMQVNIXzU3MTdWRU5ET1JfQVRNRUxfNDVVU1BUCSAweDAzNDAwMDAwCiAjZGVmaW5lICBGTEFTSF81NzE3VkVORE9SX1NUXzI1VVNQVAkgMHgwMzQwMDAwMgogI2RlZmluZSAgRkxBU0hfNTcxN1ZFTkRPUl9TVF80NVVTUFQJIDB4MDM0MDAwMDEKKyNkZWZpbmUgIEZMQVNIXzU3MjBfRUVQUk9NX0hECQkgMHgwMDAwMDAwMQorI2RlZmluZSAgRkxBU0hfNTcyMF9FRVBST01fTEQJCSAweDAwMDAwMDAzCisjZGVmaW5lICBGTEFTSF81NzIwVkVORE9SX01fQVRNRUxfREIwMTFEIDB4MDEwMDAwMDAKKyNkZWZpbmUgIEZMQVNIXzU3MjBWRU5ET1JfTV9BVE1FTF9EQjAyMUQgMHgwMTAwMDAwMgorI2RlZmluZSAgRkxBU0hfNTcyMFZFTkRPUl9NX0FUTUVMX0RCMDQxRCAweDAxMDAwMDAxCisjZGVmaW5lICBGTEFTSF81NzIwVkVORE9SX01fQVRNRUxfREIwODFEIDB4MDEwMDAwMDMKKyNkZWZpbmUgIEZMQVNIXzU3MjBWRU5ET1JfTV9TVF9NMjVQRTEwCSAweDAyMDAwMDAwCisjZGVmaW5lICBGTEFTSF81NzIwVkVORE9SX01fU1RfTTI1UEUyMAkgMHgwMjAwMDAwMgorI2RlZmluZSAgRkxBU0hfNTcyMFZFTkRPUl9NX1NUX00yNVBFNDAJIDB4MDIwMDAwMDEKKyNkZWZpbmUgIEZMQVNIXzU3MjBWRU5ET1JfTV9TVF9NMjVQRTgwCSAweDAyMDAwMDAzCisjZGVmaW5lICBGTEFTSF81NzIwVkVORE9SX01fU1RfTTQ1UEUxMAkgMHgwMzAwMDAwMAorI2RlZmluZSAgRkxBU0hfNTcyMFZFTkRPUl9NX1NUX000NVBFMjAJIDB4MDMwMDAwMDIKKyNkZWZpbmUgIEZMQVNIXzU3MjBWRU5ET1JfTV9TVF9NNDVQRTQwCSAweDAzMDAwMDAxCisjZGVmaW5lICBGTEFTSF81NzIwVkVORE9SX01fU1RfTTQ1UEU4MAkgMHgwMzAwMDAwMworI2RlZmluZSAgRkxBU0hfNTcyMFZFTkRPUl9BX0FUTUVMX0RCMDExQiAweDAxODAwMDAwCisjZGVmaW5lICBGTEFTSF81NzIwVkVORE9SX0FfQVRNRUxfREIwMjFCIDB4MDE4MDAwMDIKKyNkZWZpbmUgIEZMQVNIXzU3MjBWRU5ET1JfQV9BVE1FTF9EQjA0MUIgMHgwMTgwMDAwMQorI2RlZmluZSAgRkxBU0hfNTcyMFZFTkRPUl9BX0FUTUVMX0RCMDExRCAweDAxYzAwMDAwCisjZGVmaW5lICBGTEFTSF81NzIwVkVORE9SX0FfQVRNRUxfREIwMjFEIDB4MDFjMDAwMDIKKyNkZWZpbmUgIEZMQVNIXzU3MjBWRU5ET1JfQV9BVE1FTF9EQjA0MUQgMHgwMWMwMDAwMQorI2RlZmluZSAgRkxBU0hfNTcyMFZFTkRPUl9BX0FUTUVMX0RCMDgxRCAweDAxYzAwMDAzCisjZGVmaW5lICBGTEFTSF81NzIwVkVORE9SX0FfU1RfTTI1UEUxMAkgMHgwMjgwMDAwMAorI2RlZmluZSAgRkxBU0hfNTcyMFZFTkRPUl9BX1NUX00yNVBFMjAJIDB4MDI4MDAwMDIKKyNkZWZpbmUgIEZMQVNIXzU3MjBWRU5ET1JfQV9TVF9NMjVQRTQwCSAweDAyODAwMDAxCisjZGVmaW5lICBGTEFTSF81NzIwVkVORE9SX0FfU1RfTTI1UEU4MAkgMHgwMjgwMDAwMworI2RlZmluZSAgRkxBU0hfNTcyMFZFTkRPUl9BX1NUX000NVBFMTAJIDB4MDJjMDAwMDAKKyNkZWZpbmUgIEZMQVNIXzU3MjBWRU5ET1JfQV9TVF9NNDVQRTIwCSAweDAyYzAwMDAyCisjZGVmaW5lICBGTEFTSF81NzIwVkVORE9SX0FfU1RfTTQ1UEU0MAkgMHgwMmMwMDAwMQorI2RlZmluZSAgRkxBU0hfNTcyMFZFTkRPUl9BX1NUX000NVBFODAJIDB4MDJjMDAwMDMKKyNkZWZpbmUgIEZMQVNIXzU3MjBWRU5ET1JfQVRNRUxfNDVVU1BUCSAweDAzYzAwMDAwCisjZGVmaW5lICBGTEFTSF81NzIwVkVORE9SX1NUXzI1VVNQVAkgMHgwM2MwMDAwMgorI2RlZmluZSAgRkxBU0hfNTcyMFZFTkRPUl9TVF80NVVTUFQJIDB4MDNjMDAwMDEKICNkZWZpbmUgIE5WUkFNX0NGRzFfNTc1MlBBR0VfU0laRV9NQVNLCSAweDcwMDAwMDAwCiAjZGVmaW5lICBGTEFTSF81NzUyUEFHRV9TSVpFXzI1NgkgMHgwMDAwMDAwMAogI2RlZmluZSAgRkxBU0hfNTc1MlBBR0VfU0laRV81MTIJIDB4MTAwMDAwMDAKQEAgLTE4OTksMTEgKzE5NTIsMTYgQEAKIAogLyogQWx0ZXJuYXRlIFBDSUUgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgVEczX1BDSUVfVExETFBMX1BPUlQJCTB4MDAwMDdjMDAKKyNkZWZpbmUgVEczX1BDSUVfRExfTE9fRlRTTUFYCQkweDAwMDAwMDBjCisjZGVmaW5lIFRHM19QQ0lFX0RMX0xPX0ZUU01BWF9NU0sJMHgwMDAwMDBmZgorI2RlZmluZSBURzNfUENJRV9ETF9MT19GVFNNQVhfVkFMCTB4MDAwMDAwMmMKICNkZWZpbmUgVEczX1BDSUVfUExfTE9fUEhZQ1RMMQkJIDB4MDAwMDAwMDQKICNkZWZpbmUgVEczX1BDSUVfUExfTE9fUEhZQ1RMMV9MMVBMTFBEX0VOCSAgMHgwMDAwMTAwMAogI2RlZmluZSBURzNfUENJRV9QTF9MT19QSFlDVEw1CQkgMHgwMDAwMDAxNAogI2RlZmluZSBURzNfUENJRV9QTF9MT19QSFlDVEw1X0RJU19MMkNMS1JFUQkgIDB4ODAwMDAwMDAKIAorI2RlZmluZSBURzNfUkVHX0JMS19TSVpFCQkweDAwMDA4MDAwCisKIC8qIE9UUCBiaXQgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgVEczX09UUF9BR0NUR1RfTUFTSwkJMHgwMDAwMDBlMAogI2RlZmluZSBURzNfT1RQX0FHQ1RHVF9TSElGVAkJMQpAQCAtMTk1NSw3ICsyMDEzLDkgQEAKICNkZWZpbmUgVEczX05WTV9ESVJfRU5ECQkJMHg3OAogI2RlZmluZSBURzNfTlZNX0RJUkVOVF9TSVpFCQkweGMKICNkZWZpbmUgVEczX05WTV9ESVJUWVBFX1NISUZUCQkyNAorI2RlZmluZSBURzNfTlZNX0RJUlRZUEVfTEVOTVNLCQkweDAwM2ZmZmZmCiAjZGVmaW5lIFRHM19OVk1fRElSVFlQRV9BU0ZJTkkJCTEKKyNkZWZpbmUgVEczX05WTV9ESVJUWVBFX0VYVFZQRAkJMjAKICNkZWZpbmUgVEczX05WTV9QVFJFVl9CQ1ZFUgkJMHg5NAogI2RlZmluZSBURzNfTlZNX0JDVkVSX01BSk1TSwkJMHgwMDAwZmYwMAogI2RlZmluZSBURzNfTlZNX0JDVkVSX01BSlNGVAkJOApAQCAtMjA3OSw2ICsyMTM5LDEzIEBACiAjZGVmaW5lICBOSUNfU1JBTV9NQlVGX1BPT0xfQkFTRTU3MDUJMHgwMDAxMDAwMAogI2RlZmluZSAgTklDX1NSQU1fTUJVRl9QT09MX1NJWkU1NzA1CTB4MDAwMGUwMDAKIAorI2RlZmluZSBURzNfU1JBTV9SWF9TVERfQkRDQUNIRV9TSVpFXzU3MDAJMTI4CisjZGVmaW5lIFRHM19TUkFNX1JYX1NURF9CRENBQ0hFX1NJWkVfNTc1NQk2NAorI2RlZmluZSBURzNfU1JBTV9SWF9TVERfQkRDQUNIRV9TSVpFXzU5MDYJMzIKKworI2RlZmluZSBURzNfU1JBTV9SWF9KTUJfQkRDQUNIRV9TSVpFXzU3MDAJNjQKKyNkZWZpbmUgVEczX1NSQU1fUlhfSk1CX0JEQ0FDSEVfU0laRV81NzE3CTE2CisKIAogLyogQ3VycmVudGx5IHRoaXMgaXMgZml4ZWQuICovCiAjZGVmaW5lIFRHM19QSFlfTUlJX0FERFIJCTB4MDEKQEAgLTIxMTksNyArMjE4Niw3IEBACiAjZGVmaW5lICBNSUlfVEczX0RTUF9UQVAyNl9PUENTSU5QVAkweDAwMDQKICNkZWZpbmUgTUlJX1RHM19EU1BfQUFESjFDSDAJCTB4MDAxZgogI2RlZmluZSBNSUlfVEczX0RTUF9DSDM0VFAyCQkweDQwMjIKLSNkZWZpbmUgTUlJX1RHM19EU1BfQ0gzNFRQMl9ISUJXMDEJMHgwMDEwCisjZGVmaW5lIE1JSV9URzNfRFNQX0NIMzRUUDJfSElCVzAxCTB4MDE3YgogI2RlZmluZSBNSUlfVEczX0RTUF9BQURKMUNIMwkJMHg2MDFmCiAjZGVmaW5lICBNSUlfVEczX0RTUF9BQURKMUNIM19BRENDS0FESgkweDAwMDIKICNkZWZpbmUgTUlJX1RHM19EU1BfRVhQMV9JTlRfU1RBVAkweDBmMDEKQEAgLTIxMzIsMTkgKzIxOTksMjYgQEAKIAogI2RlZmluZSBNSUlfVEczX0FVWF9DVFJMCQkweDE4IC8qIGF1eGlsaWFyeSBjb250cm9sIHJlZ2lzdGVyICovCiAKKyNkZWZpbmUgTUlJX1RHM19BVVhDVExfU0hEV1NFTF9BVVhDVEwJMHgwMDAwCisjZGVmaW5lIE1JSV9URzNfQVVYQ1RMX0FDVExfVFhfNkRCCTB4MDQwMAorI2RlZmluZSBNSUlfVEczX0FVWENUTF9BQ1RMX1NNRFNQX0VOQQkweDA4MDAKKyNkZWZpbmUgTUlJX1RHM19BVVhDVExfQUNUTF9FWFRQS1RMRU4JMHg0MDAwCisKKyNkZWZpbmUgTUlJX1RHM19BVVhDVExfU0hEV1NFTF9QV1JDVEwJMHgwMDAyCisjZGVmaW5lIE1JSV9URzNfQVVYQ1RMX1BDVExfV09MX0VOCTB4MDAwOAogI2RlZmluZSBNSUlfVEczX0FVWENUTF9QQ1RMXzEwMFRYX0xQV1IJMHgwMDEwCiAjZGVmaW5lIE1JSV9URzNfQVVYQ1RMX1BDVExfU1BSX0lTT0xBVEUJMHgwMDIwCisjZGVmaW5lIE1JSV9URzNfQVVYQ1RMX1BDVExfQ0xfQUJfVFhEQUMJMHgwMDQwCiAjZGVmaW5lIE1JSV9URzNfQVVYQ1RMX1BDVExfVlJFR18xMVYJMHgwMTgwCi0jZGVmaW5lIE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfUFdSQ1RMCTB4MDAwMgogCi0jZGVmaW5lIE1JSV9URzNfQVVYQ1RMX01JU0NfV1JFTgkweDgwMDAKLSNkZWZpbmUgTUlJX1RHM19BVVhDVExfTUlTQ19GT1JDRV9BTURJWAkweDAyMDAKLSNkZWZpbmUgTUlJX1RHM19BVVhDVExfTUlTQ19SRFNFTF9NSVNDCTB4NzAwMAorI2RlZmluZSBNSUlfVEczX0FVWENUTF9TSERXU0VMX01JU0NURVNUCTB4MDAwNAorCiAjZGVmaW5lIE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfTUlTQwkweDAwMDcKKyNkZWZpbmUgTUlJX1RHM19BVVhDVExfTUlTQ19XSVJFU1BEX0VOCTB4MDAxMAorI2RlZmluZSBNSUlfVEczX0FVWENUTF9NSVNDX0ZPUkNFX0FNRElYCTB4MDIwMAorI2RlZmluZSBNSUlfVEczX0FVWENUTF9NSVNDX1JEU0VMX1NISUZUCTEyCisjZGVmaW5lIE1JSV9URzNfQVVYQ1RMX01JU0NfV1JFTgkweDgwMDAKIAotI2RlZmluZSBNSUlfVEczX0FVWENUTF9BQ1RMX1NNRFNQX0VOQQkweDA4MDAKLSNkZWZpbmUgTUlJX1RHM19BVVhDVExfQUNUTF9UWF82REIJMHgwNDAwCi0jZGVmaW5lIE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfQVVYQ1RMCTB4MDAwMAogCiAjZGVmaW5lIE1JSV9URzNfQVVYX1NUQVQJCTB4MTkgLyogYXV4aWxpYXJ5IHN0YXR1cyByZWdpc3RlciAqLwogI2RlZmluZSBNSUlfVEczX0FVWF9TVEFUX0xQQVNTCQkweDAwMDQKQEAgLTI1NjQsNyArMjYzOCwxMiBAQAogCXRnM19zdGF0NjRfdAkJCW5pY19hdm9pZGVkX2lycXM7CiAJdGczX3N0YXQ2NF90CQkJbmljX3R4X3RocmVzaG9sZF9oaXQ7CiAKLQl1OAkJCQlfX3Jlc2VydmVkNFsweGIwMC0weDljMF07CisJLyogTk9UIGEgcGFydCBvZiB0aGUgaGFyZHdhcmUgc3RhdGlzdGljcyBibG9jayBmb3JtYXQuCisJICogVGhlc2Ugc3RhdHMgYXJlIGhlcmUgYXMgc3RvcmFnZSBmb3IgdGczX3BlcmlvZGljX2ZldGNoX3N0YXRzKCkuCisJICovCisJdGczX3N0YXQ2NF90CQkJbWJ1Zl9sd21fdGhyZXNoX2hpdDsKKworCXU4CQkJCV9fcmVzZXJ2ZWQ0WzB4YjAwLTB4OWM4XTsKIH07CiAKIC8qICdtYXBwaW5nJyBpcyBzdXBlcmZsdW91cyBhcyB0aGUgY2hpcCBkb2VzIG5vdCB3cml0ZSBpbnRvCkBAIC0yNjk2LDYgKzI3NzUsOCBAQAogCXU2NAkJbmljX2lycXM7CiAJdTY0CQluaWNfYXZvaWRlZF9pcnFzOwogCXU2NAkJbmljX3R4X3RocmVzaG9sZF9oaXQ7CisKKwl1NjQJCW1idWZfbHdtX3RocmVzaF9oaXQ7CiB9OwogCiBzdHJ1Y3QgdGczX3J4X3Byb2RyaW5nX3NldCB7CkBAIC0yNzQ1LDYgKzI4MjYsODYgQEAKIAl1bnNpZ25lZCBpbnQJCQlpcnFfdmVjOwogfTsKIAorZW51bSBURzNfRkxBR1MgeworCVRHM19GTEFHX1RBR0dFRF9TVEFUVVMgPSAwLAorCVRHM19GTEFHX1RYRF9NQk9YX0hXQlVHLAorCVRHM19GTEFHX1VTRV9MSU5LQ0hHX1JFRywKKwlURzNfRkxBR19FUlJPUl9QUk9DRVNTRUQsCisJVEczX0ZMQUdfRU5BQkxFX0FTRiwKKwlURzNfRkxBR19BU1BNX1dPUktBUk9VTkQsCisJVEczX0ZMQUdfUE9MTF9TRVJERVMsCisJVEczX0ZMQUdfTUJPWF9XUklURV9SRU9SREVSLAorCVRHM19GTEFHX1BDSVhfVEFSR0VUX0hXQlVHLAorCVRHM19GTEFHX1dPTF9TUEVFRF8xMDBNQiwKKwlURzNfRkxBR19XT0xfRU5BQkxFLAorCVRHM19GTEFHX0VFUFJPTV9XUklURV9QUk9ULAorCVRHM19GTEFHX05WUkFNLAorCVRHM19GTEFHX05WUkFNX0JVRkZFUkVELAorCVRHM19GTEFHX1NVUFBPUlRfTVNJLAorCVRHM19GTEFHX1NVUFBPUlRfTVNJWCwKKwlURzNfRkxBR19QQ0lYX01PREUsCisJVEczX0ZMQUdfUENJX0hJR0hfU1BFRUQsCisJVEczX0ZMQUdfUENJXzMyQklULAorCVRHM19GTEFHX1NSQU1fVVNFX0NPTkZJRywKKwlURzNfRkxBR19UWF9SRUNPVkVSWV9QRU5ESU5HLAorCVRHM19GTEFHX1dPTF9DQVAsCisJVEczX0ZMQUdfSlVNQk9fUklOR19FTkFCTEUsCisJVEczX0ZMQUdfUEFVU0VfQVVUT05FRywKKwlURzNfRkxBR19DUE1VX1BSRVNFTlQsCisJVEczX0ZMQUdfNDBCSVRfRE1BX0JVRywKKwlURzNfRkxBR19CUk9LRU5fQ0hFQ0tTVU1TLAorCVRHM19GTEFHX0pVTUJPX0NBUEFCTEUsCisJVEczX0ZMQUdfQ0hJUF9SRVNFVFRJTkcsCisJVEczX0ZMQUdfSU5JVF9DT01QTEVURSwKKwlURzNfRkxBR19SRVNUQVJUX1RJTUVSLAorCVRHM19GTEFHX1RTT19CVUcsCisJVEczX0ZMQUdfSVNfNTc4OCwKKwlURzNfRkxBR19NQVhfUlhQRU5EXzY0LAorCVRHM19GTEFHX1RTT19DQVBBQkxFLAorCVRHM19GTEFHX1BDSV9FWFBSRVNTLAorCVRHM19GTEFHX0FTRl9ORVdfSEFORFNIQUtFLAorCVRHM19GTEFHX0hXX0FVVE9ORUcsCisJVEczX0ZMQUdfSVNfTklDLAorCVRHM19GTEFHX0ZMQVNILAorCVRHM19GTEFHX0hXX1RTT18xLAorCVRHM19GTEFHXzU3MDVfUExVUywKKwlURzNfRkxBR181NzUwX1BMVVMsCisJVEczX0ZMQUdfSFdfVFNPXzMsCisJVEczX0ZMQUdfVVNJTkdfTVNJLAorCVRHM19GTEFHX1VTSU5HX01TSVgsCisJVEczX0ZMQUdfSUNIX1dPUktBUk9VTkQsCisJVEczX0ZMQUdfNTc4MF9DTEFTUywKKwlURzNfRkxBR19IV19UU09fMiwKKwlURzNfRkxBR18xU0hPVF9NU0ksCisJVEczX0ZMQUdfTk9fRldBUkVfUkVQT1JURUQsCisJVEczX0ZMQUdfTk9fTlZSQU1fQUREUl9UUkFOUywKKwlURzNfRkxBR19FTkFCTEVfQVBFLAorCVRHM19GTEFHX1BST1RFQ1RFRF9OVlJBTSwKKwlURzNfRkxBR181NzAxX0RNQV9CVUcsCisJVEczX0ZMQUdfVVNFX1BIWUxJQiwKKwlURzNfRkxBR19NRElPQlVTX0lOSVRFRCwKKwlURzNfRkxBR19MUkdfUFJPRF9SSU5HX0NBUCwKKwlURzNfRkxBR19SR01JSV9JTkJBTkRfRElTQUJMRSwKKwlURzNfRkxBR19SR01JSV9FWFRfSUJORF9SWF9FTiwKKwlURzNfRkxBR19SR01JSV9FWFRfSUJORF9UWF9FTiwKKwlURzNfRkxBR19DTEtSRVFfQlVHLAorCVRHM19GTEFHXzU3NTVfUExVUywKKwlURzNfRkxBR19OT19OVlJBTSwKKwlURzNfRkxBR19FTkFCTEVfUlNTLAorCVRHM19GTEFHX0VOQUJMRV9UU1MsCisJVEczX0ZMQUdfNEdfRE1BX0JORFJZX0JVRywKKwlURzNfRkxBR180MEJJVF9ETUFfTElNSVRfQlVHLAorCVRHM19GTEFHX1NIT1JUX0RNQV9CVUcsCisJVEczX0ZMQUdfVVNFX0pVTUJPX0JERkxBRywKKwlURzNfRkxBR19MMVBMTFBEX0VOLAorCVRHM19GTEFHXzU3NzY1X1BMVVMsCisJVEczX0ZMQUdfQVBFX0hBU19OQ1NJLAorCVRHM19GTEFHXzU3MTdfUExVUywKKworCS8qIEFkZCBuZXcgZmxhZ3MgYmVmb3JlIHRoaXMgY29tbWVudCBhbmQgVEczX0ZMQUdfTlVNQkVSX09GX0ZMQUdTICovCisJVEczX0ZMQUdfTlVNQkVSX09GX0ZMQUdTLAkvKiBMYXN0IGVudHJ5IGluIGVudW0gVEczX0ZMQUdTICovCit9OworCiBzdHJ1Y3QgdGczIHsKIAkvKiBiZWdpbiAiZ2VuZXJhbCwgZnJlcXVlbnRseS11c2VkIG1lbWJlcnMiIGNhY2hlbGluZSBzZWN0aW9uICovCiAKQEAgLTI3NjgsNyArMjkyOSw3IEBACiAJLyogU01QIGxvY2tpbmcgc3RyYXRlZ3k6CiAJICoKIAkgKiBsb2NrOiBIZWxkIGR1cmluZyByZXNldCwgUEhZIGFjY2VzcywgdGltZXIsIGFuZCB3aGVuCi0JICogICAgICAgdXBkYXRpbmcgdGczX2ZsYWdzIGFuZCB0ZzNfZmxhZ3MyLgorCSAqICAgICAgIHVwZGF0aW5nIHRnM19mbGFncy4KIAkgKgogCSAqIG5ldGlmX3R4X2xvY2s6IEhlbGQgZHVyaW5nIHRnM19zdGFydF94bWl0LiB0ZzNfdHggaG9sZHMKIAkgKiAgICAgICAgICAgICAgICBuZXRpZl90eF9sb2NrIHdoZW4gaXQgbmVlZHMgdG8gY2FsbApAQCAtMjgyNSw5NCArMjk4NiwxMyBAQAogCXN0cnVjdCB0ZzNfZXRodG9vbF9zdGF0cwllc3RhdHM7CiAJc3RydWN0IHRnM19ldGh0b29sX3N0YXRzCWVzdGF0c19wcmV2OwogCisJREVDTEFSRV9CSVRNQVAodGczX2ZsYWdzLCBURzNfRkxBR19OVU1CRVJfT0ZfRkxBR1MpOworCiAJdW5pb24gewogCXVuc2lnbmVkIGxvbmcJCQlwaHlfY3JjX2Vycm9yczsKIAl1bnNpZ25lZCBsb25nCQkJbGFzdF9ldmVudF9qaWZmaWVzOwogCX07CiAKLQl1MzIJCQkJdGczX2ZsYWdzOwotI2RlZmluZSBURzNfRkxBR19UQUdHRURfU1RBVFVTCQkweDAwMDAwMDAxCi0jZGVmaW5lIFRHM19GTEFHX1RYRF9NQk9YX0hXQlVHCQkweDAwMDAwMDAyCi0jZGVmaW5lIFRHM19GTEFHX1JYX0NIRUNLU1VNUwkJMHgwMDAwMDAwNAotI2RlZmluZSBURzNfRkxBR19VU0VfTElOS0NIR19SRUcJMHgwMDAwMDAwOAotI2RlZmluZSBURzNfRkxBR19FTkFCTEVfQVNGCQkweDAwMDAwMDIwCi0jZGVmaW5lIFRHM19GTEFHX0FTUE1fV09SS0FST1VORAkweDAwMDAwMDQwCi0jZGVmaW5lIFRHM19GTEFHX1BPTExfU0VSREVTCQkweDAwMDAwMDgwCi0jZGVmaW5lIFRHM19GTEFHX01CT1hfV1JJVEVfUkVPUkRFUgkweDAwMDAwMTAwCi0jZGVmaW5lIFRHM19GTEFHX1BDSVhfVEFSR0VUX0hXQlVHCTB4MDAwMDAyMDAKLSNkZWZpbmUgVEczX0ZMQUdfV09MX1NQRUVEXzEwME1CCTB4MDAwMDA0MDAKLSNkZWZpbmUgVEczX0ZMQUdfV09MX0VOQUJMRQkJMHgwMDAwMDgwMAotI2RlZmluZSBURzNfRkxBR19FRVBST01fV1JJVEVfUFJPVAkweDAwMDAxMDAwCi0jZGVmaW5lIFRHM19GTEFHX05WUkFNCQkJMHgwMDAwMjAwMAotI2RlZmluZSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRAkJMHgwMDAwNDAwMAotI2RlZmluZSBURzNfRkxBR19TVVBQT1JUX01TSQkJMHgwMDAwODAwMAotI2RlZmluZSBURzNfRkxBR19TVVBQT1JUX01TSVgJCTB4MDAwMTAwMDAKLSNkZWZpbmUgVEczX0ZMQUdfU1VQUE9SVF9NU0lfT1JfTVNJWAkoVEczX0ZMQUdfU1VQUE9SVF9NU0kgfCBcCi0JCQkJCSBURzNfRkxBR19TVVBQT1JUX01TSVgpCi0jZGVmaW5lIFRHM19GTEFHX1BDSVhfTU9ERQkJMHgwMDAyMDAwMAotI2RlZmluZSBURzNfRkxBR19QQ0lfSElHSF9TUEVFRAkJMHgwMDA0MDAwMAotI2RlZmluZSBURzNfRkxBR19QQ0lfMzJCSVQJCTB4MDAwODAwMDAKLSNkZWZpbmUgVEczX0ZMQUdfU1JBTV9VU0VfQ09ORklHCTB4MDAxMDAwMDAKLSNkZWZpbmUgVEczX0ZMQUdfVFhfUkVDT1ZFUllfUEVORElORwkweDAwMjAwMDAwCi0jZGVmaW5lIFRHM19GTEFHX1dPTF9DQVAJCTB4MDA0MDAwMDAKLSNkZWZpbmUgVEczX0ZMQUdfSlVNQk9fUklOR19FTkFCTEUJMHgwMDgwMDAwMAotI2RlZmluZSBURzNfRkxBR19QQVVTRV9BVVRPTkVHCQkweDAyMDAwMDAwCi0jZGVmaW5lIFRHM19GTEFHX0NQTVVfUFJFU0VOVAkJMHgwNDAwMDAwMAotI2RlZmluZSBURzNfRkxBR180MEJJVF9ETUFfQlVHCQkweDA4MDAwMDAwCi0jZGVmaW5lIFRHM19GTEFHX0JST0tFTl9DSEVDS1NVTVMJMHgxMDAwMDAwMAotI2RlZmluZSBURzNfRkxBR19KVU1CT19DQVBBQkxFCQkweDIwMDAwMDAwCi0jZGVmaW5lIFRHM19GTEFHX0NISVBfUkVTRVRUSU5HCQkweDQwMDAwMDAwCi0jZGVmaW5lIFRHM19GTEFHX0lOSVRfQ09NUExFVEUJCTB4ODAwMDAwMDAKLQl1MzIJCQkJdGczX2ZsYWdzMjsKLSNkZWZpbmUgVEczX0ZMRzJfUkVTVEFSVF9USU1FUgkJMHgwMDAwMDAwMQotI2RlZmluZSBURzNfRkxHMl9UU09fQlVHCQkweDAwMDAwMDAyCi0jZGVmaW5lIFRHM19GTEcyX0lTXzU3ODgJCTB4MDAwMDAwMDgKLSNkZWZpbmUgVEczX0ZMRzJfTUFYX1JYUEVORF82NAkJMHgwMDAwMDAxMAotI2RlZmluZSBURzNfRkxHMl9UU09fQ0FQQUJMRQkJMHgwMDAwMDAyMAotI2RlZmluZSBURzNfRkxHMl9QQ0lfRVhQUkVTUwkJMHgwMDAwMDIwMAotI2RlZmluZSBURzNfRkxHMl9BU0ZfTkVXX0hBTkRTSEFLRQkweDAwMDAwNDAwCi0jZGVmaW5lIFRHM19GTEcyX0hXX0FVVE9ORUcJCTB4MDAwMDA4MDAKLSNkZWZpbmUgVEczX0ZMRzJfSVNfTklDCQkJMHgwMDAwMTAwMAotI2RlZmluZSBURzNfRkxHMl9GTEFTSAkJCTB4MDAwMDgwMDAKLSNkZWZpbmUgVEczX0ZMRzJfSFdfVFNPXzEJCTB4MDAwMTAwMDAKLSNkZWZpbmUgVEczX0ZMRzJfNTcwNV9QTFVTCQkweDAwMDQwMDAwCi0jZGVmaW5lIFRHM19GTEcyXzU3NTBfUExVUwkJMHgwMDA4MDAwMAotI2RlZmluZSBURzNfRkxHMl9IV19UU09fMwkJMHgwMDEwMDAwMAotI2RlZmluZSBURzNfRkxHMl9VU0lOR19NU0kJCTB4MDAyMDAwMDAKLSNkZWZpbmUgVEczX0ZMRzJfVVNJTkdfTVNJWAkJMHgwMDQwMDAwMAotI2RlZmluZSBURzNfRkxHMl9VU0lOR19NU0lfT1JfTVNJWAkoVEczX0ZMRzJfVVNJTkdfTVNJIHwgXAotCQkJCQlURzNfRkxHMl9VU0lOR19NU0lYKQotI2RlZmluZSBURzNfRkxHMl9JQ0hfV09SS0FST1VORAkJMHgwMjAwMDAwMAotI2RlZmluZSBURzNfRkxHMl81NzgwX0NMQVNTCQkweDA0MDAwMDAwCi0jZGVmaW5lIFRHM19GTEcyX0hXX1RTT18yCQkweDA4MDAwMDAwCi0jZGVmaW5lIFRHM19GTEcyX0hXX1RTTwkJCShURzNfRkxHMl9IV19UU09fMSB8IFwKLQkJCQkJIFRHM19GTEcyX0hXX1RTT18yIHwgXAotCQkJCQkgVEczX0ZMRzJfSFdfVFNPXzMpCi0jZGVmaW5lIFRHM19GTEcyXzFTSE9UX01TSQkJMHgxMDAwMDAwMAotI2RlZmluZSBURzNfRkxHMl9OT19GV0FSRV9SRVBPUlRFRAkweDQwMDAwMDAwCi0JdTMyCQkJCXRnM19mbGFnczM7Ci0jZGVmaW5lIFRHM19GTEczX05PX05WUkFNX0FERFJfVFJBTlMJMHgwMDAwMDAwMQotI2RlZmluZSBURzNfRkxHM19FTkFCTEVfQVBFCQkweDAwMDAwMDAyCi0jZGVmaW5lIFRHM19GTEczX1BST1RFQ1RFRF9OVlJBTQkweDAwMDAwMDA0Ci0jZGVmaW5lIFRHM19GTEczXzU3MDFfRE1BX0JVRwkJMHgwMDAwMDAwOAotI2RlZmluZSBURzNfRkxHM19VU0VfUEhZTElCCQkweDAwMDAwMDEwCi0jZGVmaW5lIFRHM19GTEczX01ESU9CVVNfSU5JVEVECQkweDAwMDAwMDIwCi0jZGVmaW5lIFRHM19GTEczX1JHTUlJX0lOQkFORF9ESVNBQkxFCTB4MDAwMDAxMDAKLSNkZWZpbmUgVEczX0ZMRzNfUkdNSUlfRVhUX0lCTkRfUlhfRU4JMHgwMDAwMDIwMAotI2RlZmluZSBURzNfRkxHM19SR01JSV9FWFRfSUJORF9UWF9FTgkweDAwMDAwNDAwCi0jZGVmaW5lIFRHM19GTEczX0NMS1JFUV9CVUcJCTB4MDAwMDA4MDAKLSNkZWZpbmUgVEczX0ZMRzNfNTc1NV9QTFVTCQkweDAwMDAyMDAwCi0jZGVmaW5lIFRHM19GTEczX05PX05WUkFNCQkweDAwMDA0MDAwCi0jZGVmaW5lIFRHM19GTEczX0VOQUJMRV9SU1MJCTB4MDAwMjAwMDAKLSNkZWZpbmUgVEczX0ZMRzNfRU5BQkxFX1RTUwkJMHgwMDA0MDAwMAotI2RlZmluZSBURzNfRkxHM180R19ETUFfQk5EUllfQlVHCTB4MDAwODAwMDAKLSNkZWZpbmUgVEczX0ZMRzNfNDBCSVRfRE1BX0xJTUlUX0JVRwkweDAwMTAwMDAwCi0jZGVmaW5lIFRHM19GTEczX1NIT1JUX0RNQV9CVUcJCTB4MDAyMDAwMDAKLSNkZWZpbmUgVEczX0ZMRzNfVVNFX0pVTUJPX0JERkxBRwkweDAwNDAwMDAwCi0jZGVmaW5lIFRHM19GTEczX0wxUExMUERfRU4JCTB4MDA4MDAwMDAKLSNkZWZpbmUgVEczX0ZMRzNfNTcxN19QTFVTCQkweDAxMDAwMDAwCi0jZGVmaW5lIFRHM19GTEczX0FQRV9IQVNfTkNTSQkJMHgwMjAwMDAwMAotCiAJc3RydWN0IHRpbWVyX2xpc3QJCXRpbWVyOwogCXUxNgkJCQl0aW1lcl9jb3VudGVyOwogCXUxNgkJCQl0aW1lcl9tdWx0aXBsaWVyOwpAQCAtMjk4Myw2ICszMDYzLDcgQEAKICNkZWZpbmUgVEczX1BIWV9JRF9CQ001NzE4UwkJMHhiYzA1MGZmMAogI2RlZmluZSBURzNfUEhZX0lEX0JDTTU3NzY1CQkweDVjMGQ4YTQwCiAjZGVmaW5lIFRHM19QSFlfSURfQkNNNTcxOUMJCTB4NWMwZDhhMjAKKyNkZWZpbmUgVEczX1BIWV9JRF9CQ001NzIwQwkJMHg1YzBkOGI2MAogI2RlZmluZSBURzNfUEhZX0lEX0JDTTU5MDYJCTB4ZGMwMGFjNDAKICNkZWZpbmUgVEczX1BIWV9JRF9CQ004MDAyCQkweDYwMDEwMTQwCiAjZGVmaW5lIFRHM19QSFlfSURfSU5WQUxJRAkJMHhmZmZmZmZmZgpAQCAtMzA0OSw2ICszMTMwLDcgQEAKIAogCWludAkJCQludnJhbV9sb2NrX2NudDsKIAl1MzIJCQkJbnZyYW1fc2l6ZTsKKyNkZWZpbmUgVEczX05WUkFNX1NJWkVfMktCCQkweDAwMDAwODAwCiAjZGVmaW5lIFRHM19OVlJBTV9TSVpFXzY0S0IJCTB4MDAwMTAwMDAKICNkZWZpbmUgVEczX05WUkFNX1NJWkVfMTI4S0IJCTB4MDAwMjAwMDAKICNkZWZpbmUgVEczX05WUkFNX1NJWkVfMjU2S0IJCTB4MDAwNDAwMDAKQEAgLTMwNjQsNiArMzE0Niw5IEBACiAjZGVmaW5lIEpFREVDX1NBSUZVTgkJCTB4NGYKICNkZWZpbmUgSkVERUNfU1NUCQkJMHhiZgogCisjZGVmaW5lIEFUTUVMX0FUMjRDMDJfQ0hJUF9TSVpFCQlURzNfTlZSQU1fU0laRV8yS0IKKyNkZWZpbmUgQVRNRUxfQVQyNEMwMl9QQUdFX1NJWkUJCSg4KQorCiAjZGVmaW5lIEFUTUVMX0FUMjRDNjRfQ0hJUF9TSVpFCQlURzNfTlZSQU1fU0laRV82NEtCCiAjZGVmaW5lIEFUTUVMX0FUMjRDNjRfUEFHRV9TSVpFCQkoMzIpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RpbGUvdGlsZXByby5jIGIvZHJpdmVycy9uZXQvdGlsZS90aWxlcHJvLmMKaW5kZXggMDgyNWRiNi4uMWU5ODBmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGlsZS90aWxlcHJvLmMKKysrIGIvZHJpdmVycy9uZXQvdGlsZS90aWxlcHJvLmMKQEAgLTE5MzAsNyArMTkzMCw3IEBACiAJdW5zaWduZWQgaW50IGxlbiA9IHNrYi0+bGVuOwogCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSBza2ItPmRhdGE7CiAKLQl1bnNpZ25lZCBpbnQgY3N1bV9zdGFydCA9IHNrYi0+Y3N1bV9zdGFydCAtIHNrYl9oZWFkcm9vbShza2IpOworCXVuc2lnbmVkIGludCBjc3VtX3N0YXJ0ID0gc2tiX2NoZWNrc3VtX3N0YXJ0X29mZnNldChza2IpOwogCiAJbGVwcF9mcmFnX3QgZnJhZ3NbTEVQUF9NQVhfRlJBR1NdOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvbWFkZ2VtYy5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL21hZGdlbWMuYwppbmRleCAyYmVkYzBhLi4xMzEzYWExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvbWFkZ2VtYy5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9tYWRnZW1jLmMKQEAgLTcyNyw3ICs3MjcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc2hvcnQgbWFkZ2VtY19hZGFwdGVyX2lkc1tdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc2hvcnQgbWFkZ2VtY19hZGFwdGVyX2lkc1tdIF9fZGV2aW5pdGNvbnN0ID0gewogCTB4MDAyZCwKIAkweDAwMDAKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL29seW1waWMuYwppbmRleCAyNjg0MDAzLi5lMzg1NWFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmMKQEAgLTg2LDYgKzg2LDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CkBAIC0xOTMsNyArMTk0LDcgQEAKIHN0YXRpYyBpbnQgb2x5bXBpY19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBtdHUpOwogc3RhdGljIHZvaWQgb2x5bXBpY19zcmJfYmgoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgOyAKIHN0YXRpYyB2b2lkIG9seW1waWNfYXNiX2JoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIDsgCi1zdGF0aWMgaW50IG9seW1waWNfcHJvY19pbmZvKGNoYXIgKmJ1ZmZlciwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCBsZW5ndGgsIGludCAqZW9mLCB2b2lkICpkYXRhKSA7IAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb2x5bXBpY19wcm9jX29wczsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBvbHltcGljX25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuCQk9IG9seW1waWNfb3BlbiwKQEAgLTI3Miw3ICsyNzMsNyBAQAogCQljaGFyIHByb2NfbmFtZVsyMF0gOyAKIAkJc3RyY3B5KHByb2NfbmFtZSwib2x5bXBpY18iKSA7CiAJCXN0cmNhdChwcm9jX25hbWUsZGV2LT5uYW1lKSA7IAotCQljcmVhdGVfcHJvY19yZWFkX2VudHJ5KHByb2NfbmFtZSwwLGluaXRfbmV0LnByb2NfbmV0LG9seW1waWNfcHJvY19pbmZvLCh2b2lkICopZGV2KSA7CisJCXByb2NfY3JlYXRlX2RhdGEocHJvY19uYW1lLCAwLCBpbml0X25ldC5wcm9jX25ldCwgJm9seW1waWNfcHJvY19vcHMsIGRldik7CiAJCXByaW50aygiT2x5bXBpYzogTmV0d29yayBNb25pdG9yIGluZm9ybWF0aW9uOiAvcHJvYy8lc1xuIixwcm9jX25hbWUpOyAKIAl9CiAJcmV0dXJuICAwIDsKQEAgLTE2MTUsMjkgKzE2MTYsMjUgQEAKIAlyZXR1cm4gMCA7IAogfQogCi1zdGF0aWMgaW50IG9seW1waWNfcHJvY19pbmZvKGNoYXIgKmJ1ZmZlciwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCBsZW5ndGgsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBvbHltcGljX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRhdGEgOyAKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbS0+cHJpdmF0ZTsKIAlzdHJ1Y3Qgb2x5bXBpY19wcml2YXRlICpvbHltcGljX3ByaXY9bmV0ZGV2X3ByaXYoZGV2KTsKIAl1OCBfX2lvbWVtICpvYXQgPSAob2x5bXBpY19wcml2LT5vbHltcGljX2xhcCArIG9seW1waWNfcHJpdi0+b2x5bXBpY19hZGRyX3RhYmxlX2FkZHIpIDsgCiAJdTggX19pb21lbSAqb3B0ID0gKG9seW1waWNfcHJpdi0+b2x5bXBpY19sYXAgKyBvbHltcGljX3ByaXYtPm9seW1waWNfcGFybXNfYWRkcikgOyAKLQlpbnQgc2l6ZSA9IDAgOyAKLQlpbnQgbGVuPTA7Ci0Jb2ZmX3QgYmVnaW49MDsKLQlvZmZfdCBwb3M9MDsKIAl1OCBhZGRyWzZdOwogCXU4IGFkZHIyWzZdOwogCWludCBpOwogCi0Jc2l6ZSA9IHNwcmludGYoYnVmZmVyLCAKKwlzZXFfcHJpbnRmKG0sCiAJCSJJQk0gUGl0L1BpdC1QaHkvT2x5bXBpYyBDaGlwc2V0IFRva2VuIFJpbmcgQWRhcHRlciAlc1xuIixkZXYtPm5hbWUpOwotCXNpemUgKz0gc3ByaW50ZihidWZmZXIrc2l6ZSwgIlxuJTZzOiBBZGFwdGVyIEFkZHJlc3MgICA6IE5vZGUgQWRkcmVzcyAgICAgIDogRnVuY3Rpb25hbCBBZGRyXG4iLAorCXNlcV9wcmludGYobSwgIlxuJTZzOiBBZGFwdGVyIEFkZHJlc3MgICA6IE5vZGUgQWRkcmVzcyAgICAgIDogRnVuY3Rpb25hbCBBZGRyXG4iLAogIAkgICBkZXYtPm5hbWUpOyAKIAogCWZvciAoaSA9IDAgOyBpIDwgNiA7IGkrKykKIAkJYWRkcltpXSA9IHJlYWRiKG9hdCtvZmZzZXRvZihzdHJ1Y3Qgb2x5bXBpY19hZGFwdGVyX2FkZHJfdGFibGUsbm9kZV9hZGRyKSArIGkpOwogCi0Jc2l6ZSArPSBzcHJpbnRmKGJ1ZmZlcitzaXplLCAiJTZzOiAlcE0gOiAlcE0gOiAlMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCXNlcV9wcmludGYobSwgIiU2czogJXBNIDogJXBNIDogJTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKIAkgICBkZXYtPm5hbWUsCiAJICAgZGV2LT5kZXZfYWRkciwgYWRkciwKIAkgICByZWFkYihvYXQrb2Zmc2V0b2Yoc3RydWN0IG9seW1waWNfYWRhcHRlcl9hZGRyX3RhYmxlLGZ1bmNfYWRkcikpLCAKQEAgLTE2NDUsOSArMTY0Miw5IEBACiAJICAgcmVhZGIob2F0K29mZnNldG9mKHN0cnVjdCBvbHltcGljX2FkYXB0ZXJfYWRkcl90YWJsZSxmdW5jX2FkZHIpKzIpLAogCSAgIHJlYWRiKG9hdCtvZmZzZXRvZihzdHJ1Y3Qgb2x5bXBpY19hZGFwdGVyX2FkZHJfdGFibGUsZnVuY19hZGRyKSszKSk7CiAJIAotCXNpemUgKz0gc3ByaW50ZihidWZmZXIrc2l6ZSwgIlxuJTZzOiBUb2tlbiBSaW5nIFBhcmFtZXRlcnMgVGFibGU6XG4iLCBkZXYtPm5hbWUpOworCXNlcV9wcmludGYobSwgIlxuJTZzOiBUb2tlbiBSaW5nIFBhcmFtZXRlcnMgVGFibGU6XG4iLCBkZXYtPm5hbWUpOwogCi0Jc2l6ZSArPSBzcHJpbnRmKGJ1ZmZlcitzaXplLCAiJTZzOiBQaHlzaWNhbCBBZGRyIDogVXAgTm9kZSBBZGRyZXNzICAgOiBQb2xsIEFkZHJlc3MgICAgICA6IEFjY1ByaSA6IEF1dGggU3JjIDogQXR0IENvZGUgOlxuIiwKKwlzZXFfcHJpbnRmKG0sICIlNnM6IFBoeXNpY2FsIEFkZHIgOiBVcCBOb2RlIEFkZHJlc3MgICA6IFBvbGwgQWRkcmVzcyAgICAgIDogQWNjUHJpIDogQXV0aCBTcmMgOiBBdHQgQ29kZSA6XG4iLAogCSAgZGV2LT5uYW1lKSA7IAogCiAJZm9yIChpID0gMCA7IGkgPCA2IDsgaSsrKQpAQCAtMTY1NSw3ICsxNjUyLDcgQEAKIAlmb3IgKGkgPSAwIDsgaSA8IDYgOyBpKyspCiAJCWFkZHIyW2ldID0gIHJlYWRiKG9wdCtvZmZzZXRvZihzdHJ1Y3Qgb2x5bXBpY19wYXJhbWV0ZXJzX3RhYmxlLCBwb2xsX2FkZHIpICsgaSk7CiAKLQlzaXplICs9IHNwcmludGYoYnVmZmVyK3NpemUsICIlNnM6ICUwMng6JTAyeDolMDJ4OiUwMnggICA6ICVwTSA6ICVwTSA6ICUwNHggICA6ICUwNHggICAgIDogICUwNHggICAgOlxuIiwKKwlzZXFfcHJpbnRmKG0sICIlNnM6ICUwMng6JTAyeDolMDJ4OiUwMnggICA6ICVwTSA6ICVwTSA6ICUwNHggICA6ICUwNHggICAgIDogICUwNHggICAgOlxuIiwKIAkgIGRldi0+bmFtZSwKIAkgIHJlYWRiKG9wdCtvZmZzZXRvZihzdHJ1Y3Qgb2x5bXBpY19wYXJhbWV0ZXJzX3RhYmxlLCBwaHlzX2FkZHIpKSwKIAkgIHJlYWRiKG9wdCtvZmZzZXRvZihzdHJ1Y3Qgb2x5bXBpY19wYXJhbWV0ZXJzX3RhYmxlLCBwaHlzX2FkZHIpKzEpLApAQCAtMTY2NiwxMiArMTY2MywxMiBAQAogCSAgc3dhYjE2KHJlYWR3KG9wdCtvZmZzZXRvZihzdHJ1Y3Qgb2x5bXBpY19wYXJhbWV0ZXJzX3RhYmxlLCBhdXRoX3NvdXJjZV9jbGFzcykpKSwKIAkgIHN3YWIxNihyZWFkdyhvcHQrb2Zmc2V0b2Yoc3RydWN0IG9seW1waWNfcGFyYW1ldGVyc190YWJsZSwgYXR0X2NvZGUpKSkpOwogCi0Jc2l6ZSArPSBzcHJpbnRmKGJ1ZmZlcitzaXplLCAiJTZzOiBTb3VyY2UgQWRkcmVzcyAgICA6IEJjbiBUIDogTWFqLiBWIDogTGFuIFN0IDogTGNsIFJnIDogTW9uIEVyciA6IEZyYW1lIENvcnJlbCA6IFxuIiwKKwlzZXFfcHJpbnRmKG0sICIlNnM6IFNvdXJjZSBBZGRyZXNzICAgIDogQmNuIFQgOiBNYWouIFYgOiBMYW4gU3QgOiBMY2wgUmcgOiBNb24gRXJyIDogRnJhbWUgQ29ycmVsIDogXG4iLAogCSAgZGV2LT5uYW1lKSA7IAogCQogCWZvciAoaSA9IDAgOyBpIDwgNiA7IGkrKykKIAkJYWRkcltpXSA9IHJlYWRiKG9wdCtvZmZzZXRvZihzdHJ1Y3Qgb2x5bXBpY19wYXJhbWV0ZXJzX3RhYmxlLCBzb3VyY2VfYWRkcikgKyBpKTsKLQlzaXplICs9IHNwcmludGYoYnVmZmVyK3NpemUsICIlNnM6ICVwTSA6ICUwNHggIDogJTA0eCAgIDogJTA0eCAgIDogJTA0eCAgIDogJTA0eCAgICA6ICAgICAlMDR4ICAgICA6IFxuIiwKKwlzZXFfcHJpbnRmKG0sICIlNnM6ICVwTSA6ICUwNHggIDogJTA0eCAgIDogJTA0eCAgIDogJTA0eCAgIDogJTA0eCAgICA6ICAgICAlMDR4ICAgICA6IFxuIiwKIAkgIGRldi0+bmFtZSwgYWRkciwKIAkgIHN3YWIxNihyZWFkdyhvcHQrb2Zmc2V0b2Yoc3RydWN0IG9seW1waWNfcGFyYW1ldGVyc190YWJsZSwgYmVhY29uX3R5cGUpKSksCiAJICBzd2FiMTYocmVhZHcob3B0K29mZnNldG9mKHN0cnVjdCBvbHltcGljX3BhcmFtZXRlcnNfdGFibGUsIG1ham9yX3ZlY3RvcikpKSwKQEAgLTE2ODAsMTIgKzE2NzcsMTIgQEAKIAkgIHN3YWIxNihyZWFkdyhvcHQrb2Zmc2V0b2Yoc3RydWN0IG9seW1waWNfcGFyYW1ldGVyc190YWJsZSwgbW9uX2Vycm9yKSkpLAogCSAgc3dhYjE2KHJlYWR3KG9wdCtvZmZzZXRvZihzdHJ1Y3Qgb2x5bXBpY19wYXJhbWV0ZXJzX3RhYmxlLCBmcmFtZV9jb3JyZWwpKSkpOwogCi0Jc2l6ZSArPSBzcHJpbnRmKGJ1ZmZlcitzaXplLCAiJTZzOiBCZWFjb24gRGV0YWlscyA6ICBUeCAgOiAgUnggIDogTkFVTiBOb2RlIEFkZHJlc3MgOiBOQVVOIE5vZGUgUGh5cyA6IFxuIiwKKwlzZXFfcHJpbnRmKG0sICIlNnM6IEJlYWNvbiBEZXRhaWxzIDogIFR4ICA6ICBSeCAgOiBOQVVOIE5vZGUgQWRkcmVzcyA6IE5BVU4gTm9kZSBQaHlzIDogXG4iLAogCSAgZGV2LT5uYW1lKSA7IAogCiAJZm9yIChpID0gMCA7IGkgPCA2IDsgaSsrKQogCQlhZGRyW2ldID0gcmVhZGIob3B0K29mZnNldG9mKHN0cnVjdCBvbHltcGljX3BhcmFtZXRlcnNfdGFibGUsIGJlYWNvbl9uYXVuKSArIGkpOwotCXNpemUgKz0gc3ByaW50ZihidWZmZXIrc2l6ZSwgIiU2czogICAgICAgICAgICAgICAgOiAgJTAyeCAgOiAgJTAyeCAgOiAlcE0gOiAlMDJ4OiUwMng6JTAyeDolMDJ4ICAgIDogXG4iLAorCXNlcV9wcmludGYobSwgIiU2czogICAgICAgICAgICAgICAgOiAgJTAyeCAgOiAgJTAyeCAgOiAlcE0gOiAlMDJ4OiUwMng6JTAyeDolMDJ4ICAgIDogXG4iLAogCSAgZGV2LT5uYW1lLAogCSAgc3dhYjE2KHJlYWR3KG9wdCtvZmZzZXRvZihzdHJ1Y3Qgb2x5bXBpY19wYXJhbWV0ZXJzX3RhYmxlLCBiZWFjb25fdHJhbnNtaXQpKSksCiAJICBzd2FiMTYocmVhZHcob3B0K29mZnNldG9mKHN0cnVjdCBvbHltcGljX3BhcmFtZXRlcnNfdGFibGUsIGJlYWNvbl9yZWNlaXZlKSkpLApAQCAtMTY5NSwxOSArMTY5MiwyMSBAQAogCSAgcmVhZGIob3B0K29mZnNldG9mKHN0cnVjdCBvbHltcGljX3BhcmFtZXRlcnNfdGFibGUsIGJlYWNvbl9waHlzKSsyKSwKIAkgIHJlYWRiKG9wdCtvZmZzZXRvZihzdHJ1Y3Qgb2x5bXBpY19wYXJhbWV0ZXJzX3RhYmxlLCBiZWFjb25fcGh5cykrMykpOwogCi0JbGVuPXNpemU7Ci0JcG9zPWJlZ2luK3NpemU7Ci0JaWYgKHBvczxvZmZzZXQpIHsKLQkJbGVuPTA7Ci0JCWJlZ2luPXBvczsKLQl9Ci0JKnN0YXJ0PWJ1ZmZlcisob2Zmc2V0LWJlZ2luKTsJLyogU3RhcnQgb2Ygd2FudGVkIGRhdGEgKi8KLQlsZW4tPShvZmZzZXQtYmVnaW4pOwkJLyogU3RhcnQgc2xvcCAqLwotCWlmKGxlbj5sZW5ndGgpCi0JCWxlbj1sZW5ndGg7CQkvKiBFbmRpbmcgc2xvcCAqLwotCXJldHVybiBsZW47CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgb2x5bXBpY19wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIG9seW1waWNfcHJvY19zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb2x5bXBpY19wcm9jX29wcyA9IHsKKwkub3BlbgkJPSBvbHltcGljX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKwogc3RhdGljIHZvaWQgX19kZXZleGl0IG9seW1waWNfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikgCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KSA7IApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvMjExNDIuYyBiL2RyaXZlcnMvbmV0L3R1bGlwLzIxMTQyLmMKaW5kZXggMDA3ZDhlNy4uMDkyYzNmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvMjExNDIuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC8yMTE0Mi5jCkBAIC0xMjIsOCArMTIyLDggQEAKIAl0cC0+bndheSA9IHRwLT5tZWRpYXNlbnNlID0gMTsKIAl0cC0+bndheXNldCA9IHRwLT5scGFyID0gMDsKIAlpZiAodHVsaXBfZGVidWcgPiAxKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJlc3RhcnRpbmcgMjExNDMgYXV0b25lZ290aWF0aW9uLCBjc3IxND0lMDh4XG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBjc3IxNCk7CisJCW5ldGRldl9kYmcoZGV2LCAiUmVzdGFydGluZyAyMTE0MyBhdXRvbmVnb3RpYXRpb24sIGNzcjE0PSUwOHhcbiIsCisJCQkgICBjc3IxNCk7CiAJaW93cml0ZTMyKDB4MDAwMSwgaW9hZGRyICsgQ1NSMTMpOwogCXVkZWxheSgxMDApOwogCWlvd3JpdGUzMihjc3IxNCwgaW9hZGRyICsgQ1NSMTQpOwpAQCAtMjA2LDE0ICsyMDYsMTQgQEAKICNpZiAwCQkJCQkJCS8qIFJlc3RhcnQgc2hvdWxkbid0IGJlIG5lZWRlZC4gKi8KIAkJaW93cml0ZTMyKHRwLT5jc3I2IHwgUnhPbiwgaW9hZGRyICsgQ1NSNik7CiAJCWlmICh0dWxpcF9kZWJ1ZyA+IDIpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICBSZXN0YXJ0aW5nIFR4IGFuZCBSeCwgQ1NSNSBpcyAlMDh4XG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgaW9yZWFkMzIoaW9hZGRyICsgQ1NSNSkpOworCQkJbmV0ZGV2X2RiZyhkZXYsICIgUmVzdGFydGluZyBUeCBhbmQgUngsIENTUjUgaXMgJTA4eFxuIiwKKwkJCQkgICBpb3JlYWQzMihpb2FkZHIgKyBDU1I1KSk7CiAjZW5kaWYKIAkJdHVsaXBfc3RhcnRfcnh0eCh0cCk7CiAJCWlmICh0dWxpcF9kZWJ1ZyA+IDIpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICBTZXR0aW5nIENTUjYgJTA4eC8leCBDU1IxMiAlMDh4XG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgdHAtPmNzcjYsIGlvcmVhZDMyKGlvYWRkciArIENTUjYpLAotCQkJICAgICAgIGlvcmVhZDMyKGlvYWRkciArIENTUjEyKSk7CisJCQluZXRkZXZfZGJnKGRldiwgIiBTZXR0aW5nIENTUjYgJTA4eC8leCBDU1IxMiAlMDh4XG4iLAorCQkJCSAgIHRwLT5jc3I2LCBpb3JlYWQzMihpb2FkZHIgKyBDU1I2KSwKKwkJCQkgICBpb3JlYWQzMihpb2FkZHIgKyBDU1IxMikpOwogCX0gZWxzZSBpZiAoKHRwLT5ud2F5c2V0ICAmJiAgKGNzcjUgJiAweDA4MDAwMDAwKSAmJgogCQkgICAgKGRldi0+aWZfcG9ydCA9PSAzICB8fCAgZGV2LT5pZl9wb3J0ID09IDUpICYmCiAJCSAgICAoY3NyMTIgJiAyKSA9PSAyKSB8fApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC90dWxpcC9NYWtlZmlsZQppbmRleCAyMDBjYmY3Li41ZThiZTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC90dWxpcC9NYWtlZmlsZQpAQCAtMiw2ICsyLDggQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBMaW51eCAiVHVsaXAiIGZhbWlseSBuZXR3b3JrIGRldmljZSBkcml2ZXJzLgogIwogCitjY2ZsYWdzLSQoQ09ORklHX05FVF9UVUxJUCkJOj0gLURERUJVRworCiBvYmotJChDT05GSUdfUENNQ0lBX1hJUkNPTSkJKz0geGlyY29tX2NiLm8KIG9iai0kKENPTkZJR19ETTkxMDIpCQkrPSBkbWZlLm8KIG9iai0kKENPTkZJR19XSU5CT05EXzg0MCkJKz0gd2luYm9uZC04NDAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvZGUyMTA0eC5jIGIvZHJpdmVycy9uZXQvdHVsaXAvZGUyMTA0eC5jCmluZGV4IGIxM2M2YjAuLmUyZjY5MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlMjEwNHguYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9kZTIxMDR4LmMKQEAgLTI3LDYgKzI3LDggQEAKIAogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2RlZmluZSBEUlZfTkFNRQkJImRlMjEwNHgiCiAjZGVmaW5lIERSVl9WRVJTSU9OCQkiMC43IgogI2RlZmluZSBEUlZfUkVMREFURQkJIk1hciAxNywgMjAwNCIKQEAgLTUxLDcgKzUzLDcgQEAKIAogLyogVGhlc2UgaWRlbnRpZnkgdGhlIGRyaXZlciBiYXNlIHZlcnNpb24gYW5kIG1heSBub3QgYmUgcmVtb3ZlZC4gKi8KIHN0YXRpYyBjaGFyIHZlcnNpb25bXSA9Ci1LRVJOX0lORk8gRFJWX05BTUUgIiBQQ0kgRXRoZXJuZXQgZHJpdmVyIHYiIERSVl9WRVJTSU9OICIgKCIgRFJWX1JFTERBVEUgIilcbiI7CisiUENJIEV0aGVybmV0IGRyaXZlciB2IiBEUlZfVkVSU0lPTiAiICgiIERSVl9SRUxEQVRFICIpIjsKIAogTU9EVUxFX0FVVEhPUigiSmVmZiBHYXJ6aWsgPGpnYXJ6aWtAcG9ib3guY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJJbnRlbC9EaWdpdGFsIDIxMDQwLzEgc2VyaWVzIFBDSSBFdGhlcm5ldCBkcml2ZXIiKTsKQEAgLTczLDggKzc1LDYgQEAKIG1vZHVsZV9wYXJhbSAocnhfY29weWJyZWFrLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyAocnhfY29weWJyZWFrLCAiZGUyMTA0eCBCcmVha3BvaW50IGF0IHdoaWNoIFJ4IHBhY2tldHMgYXJlIGNvcGllZCIpOwogCi0jZGVmaW5lIFBGWAkJCURSVl9OQU1FICI6ICIKLQogI2RlZmluZSBERV9ERUZfTVNHX0VOQUJMRQkoTkVUSUZfTVNHX0RSVgkJfCBcCiAJCQkJIE5FVElGX01TR19QUk9CRSAJfCBcCiAJCQkJIE5FVElGX01TR19MSU5LCQl8IFwKQEAgLTM3NywxOCArMzc3LDE2IEBACiBzdGF0aWMgdm9pZCBkZV9yeF9lcnJfYWNjdCAoc3RydWN0IGRlX3ByaXZhdGUgKmRlLCB1bnNpZ25lZCByeF90YWlsLAogCQkJICAgIHUzMiBzdGF0dXMsIHUzMiBsZW4pCiB7Ci0JaWYgKG5ldGlmX21zZ19yeF9lcnIgKGRlKSkKLQkJcHJpbnRrIChLRVJOX0RFQlVHCi0JCQkiJXM6IHJ4IGVyciwgc2xvdCAlZCBzdGF0dXMgMHgleCBsZW4gJWRcbiIsCi0JCQlkZS0+ZGV2LT5uYW1lLCByeF90YWlsLCBzdGF0dXMsIGxlbik7CisJbmV0aWZfZGJnKGRlLCByeF9lcnIsIGRlLT5kZXYsCisJCSAgInJ4IGVyciwgc2xvdCAlZCBzdGF0dXMgMHgleCBsZW4gJWRcbiIsCisJCSAgcnhfdGFpbCwgc3RhdHVzLCBsZW4pOwogCiAJaWYgKChzdGF0dXMgJiAweDM4MDAwMzAwKSAhPSAweDAzMDApIHsKIAkJLyogSW5nb3JlIGVhcmxpZXIgYnVmZmVycy4gKi8KIAkJaWYgKChzdGF0dXMgJiAweGZmZmYpICE9IDB4N2ZmZikgewotCQkJaWYgKG5ldGlmX21zZ19yeF9lcnIoZGUpKQotCQkJCWRldl93YXJuKCZkZS0+ZGV2LT5kZXYsCi0JCQkJCSAiT3ZlcnNpemVkIEV0aGVybmV0IGZyYW1lIHNwYW5uZWQgbXVsdGlwbGUgYnVmZmVycywgc3RhdHVzICUwOHghXG4iLAotCQkJCQkgc3RhdHVzKTsKKwkJCW5ldGlmX3dhcm4oZGUsIHJ4X2VyciwgZGUtPmRldiwKKwkJCQkgICAiT3ZlcnNpemVkIEV0aGVybmV0IGZyYW1lIHNwYW5uZWQgbXVsdGlwbGUgYnVmZmVycywgc3RhdHVzICUwOHghXG4iLAorCQkJCSAgIHN0YXR1cyk7CiAJCQlkZS0+bmV0X3N0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJfQogCX0gZWxzZSBpZiAoc3RhdHVzICYgUnhFcnJvcikgewpAQCAtNDM1LDEwICs0MzMsOSBAQAogCiAJCWNvcHlpbmdfc2tiID0gKGxlbiA8PSByeF9jb3B5YnJlYWspOwogCi0JCWlmICh1bmxpa2VseShuZXRpZl9tc2dfcnhfc3RhdHVzKGRlKSkpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJ4IHNsb3QgJWQgc3RhdHVzIDB4JXggbGVuICVkIGNvcHlpbmc/ICVkXG4iLAotCQkJICAgICAgIGRlLT5kZXYtPm5hbWUsIHJ4X3RhaWwsIHN0YXR1cywgbGVuLAotCQkJICAgICAgIGNvcHlpbmdfc2tiKTsKKwkJbmV0aWZfZGJnKGRlLCByeF9zdGF0dXMsIGRlLT5kZXYsCisJCQkgICJyeCBzbG90ICVkIHN0YXR1cyAweCV4IGxlbiAlZCBjb3B5aW5nPyAlZFxuIiwKKwkJCSAgcnhfdGFpbCwgc3RhdHVzLCBsZW4sIGNvcHlpbmdfc2tiKTsKIAogCQlidWZsZW4gPSBjb3B5aW5nX3NrYiA/IChsZW4gKyBSWF9PRkZTRVQpIDogZGUtPnJ4X2J1Zl9zejsKIAkJY29weV9za2IgPSBkZXZfYWxsb2Nfc2tiIChidWZsZW4pOwpAQCAtNDkxLDcgKzQ4OCw3IEBACiAJfQogCiAJaWYgKCFyeF93b3JrKQotCQlkZXZfd2FybigmZGUtPmRldi0+ZGV2LCAicnggd29yayBsaW1pdCByZWFjaGVkXG4iKTsKKwkJbmV0ZGV2X3dhcm4oZGUtPmRldiwgInJ4IHdvcmsgbGltaXQgcmVhY2hlZFxuIik7CiAKIAlkZS0+cnhfdGFpbCA9IHJ4X3RhaWw7CiB9CkBAIC01MDYsMTAgKzUwMyw5IEBACiAJaWYgKCghKHN0YXR1cyAmIChJbnRyT0t8SW50ckVycikpKSB8fCAoc3RhdHVzID09IDB4RkZGRikpCiAJCXJldHVybiBJUlFfTk9ORTsKIAotCWlmIChuZXRpZl9tc2dfaW50cihkZSkpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogaW50ciwgc3RhdHVzICUwOHggbW9kZSAlMDh4IGRlc2MgJXUvJXUvJXVcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHN0YXR1cywgZHIzMihNYWNNb2RlKSwKLQkJICAgICAgIGRlLT5yeF90YWlsLCBkZS0+dHhfaGVhZCwgZGUtPnR4X3RhaWwpOworCW5ldGlmX2RiZyhkZSwgaW50ciwgZGV2LCAiaW50ciwgc3RhdHVzICUwOHggbW9kZSAlMDh4IGRlc2MgJXUvJXUvJXVcbiIsCisJCSAgc3RhdHVzLCBkcjMyKE1hY01vZGUpLAorCQkgIGRlLT5yeF90YWlsLCBkZS0+dHhfaGVhZCwgZGUtPnR4X3RhaWwpOwogCiAJZHczMihNYWNTdGF0dXMsIHN0YXR1cyk7CiAKQEAgLTUzNCw5ICs1MzAsOSBAQAogCiAJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRlLT5wZGV2LCBQQ0lfU1RBVFVTLCAmcGNpX3N0YXR1cyk7CiAJCXBjaV93cml0ZV9jb25maWdfd29yZChkZS0+cGRldiwgUENJX1NUQVRVUywgcGNpX3N0YXR1cyk7Ci0JCWRldl9lcnIoJmRlLT5kZXYtPmRldiwKLQkJCSJQQ0kgYnVzIGVycm9yLCBzdGF0dXM9JTA4eCwgUENJIHN0YXR1cz0lMDR4XG4iLAotCQkJc3RhdHVzLCBwY2lfc3RhdHVzKTsKKwkJbmV0ZGV2X2VycihkZS0+ZGV2LAorCQkJICAgIlBDSSBidXMgZXJyb3IsIHN0YXR1cz0lMDh4LCBQQ0kgc3RhdHVzPSUwNHhcbiIsCisJCQkgICBzdGF0dXMsIHBjaV9zdGF0dXMpOwogCX0KIAogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTU3Miw5ICs1NjgsOSBAQAogCiAJCWlmIChzdGF0dXMgJiBMYXN0RnJhZykgewogCQkJaWYgKHN0YXR1cyAmIFR4RXJyb3IpIHsKLQkJCQlpZiAobmV0aWZfbXNnX3R4X2VycihkZSkpCi0JCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdHggZXJyLCBzdGF0dXMgMHgleFxuIiwKLQkJCQkJICAgICAgIGRlLT5kZXYtPm5hbWUsIHN0YXR1cyk7CisJCQkJbmV0aWZfZGJnKGRlLCB0eF9lcnIsIGRlLT5kZXYsCisJCQkJCSAgInR4IGVyciwgc3RhdHVzIDB4JXhcbiIsCisJCQkJCSAgc3RhdHVzKTsKIAkJCQlkZS0+bmV0X3N0YXRzLnR4X2Vycm9ycysrOwogCQkJCWlmIChzdGF0dXMgJiBUeE9XQykKIAkJCQkJZGUtPm5ldF9zdGF0cy50eF93aW5kb3dfZXJyb3JzKys7CkBAIC01ODcsOSArNTgzLDggQEAKIAkJCX0gZWxzZSB7CiAJCQkJZGUtPm5ldF9zdGF0cy50eF9wYWNrZXRzKys7CiAJCQkJZGUtPm5ldF9zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKLQkJCQlpZiAobmV0aWZfbXNnX3R4X2RvbmUoZGUpKQotCQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHR4IGRvbmUsIHNsb3QgJWRcbiIsCi0JCQkJCSAgICAgICBkZS0+ZGV2LT5uYW1lLCB0eF90YWlsKTsKKwkJCQluZXRpZl9kYmcoZGUsIHR4X2RvbmUsIGRlLT5kZXYsCisJCQkJCSAgInR4IGRvbmUsIHNsb3QgJWRcbiIsIHR4X3RhaWwpOwogCQkJfQogCQkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKIAkJfQpAQCAtNjQ2LDkgKzY0MSw4IEBACiAJd21iKCk7CiAKIAlkZS0+dHhfaGVhZCA9IE5FWFRfVFgoZW50cnkpOwotCWlmIChuZXRpZl9tc2dfdHhfcXVldWVkKGRlKSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0eCBxdWV1ZWQsIHNsb3QgJWQsIHNrYmxlbiAlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZW50cnksIHNrYi0+bGVuKTsKKwluZXRpZl9kYmcoZGUsIHR4X3F1ZXVlZCwgZGV2LCAidHggcXVldWVkLCBzbG90ICVkLCBza2JsZW4gJWRcbiIsCisJCSAgZW50cnksIHNrYi0+bGVuKTsKIAogCWlmICh0eF9mcmVlID09IDApCiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKQEAgLTg3Myw3ICs4NjcsNyBAQAogCQl1ZGVsYXkoMTAwKTsKIAl9CiAKLQlkZXZfd2FybigmZGUtPmRldi0+ZGV2LCAidGltZW91dCBleHBpcmVkIHN0b3BwaW5nIERNQVxuIik7CisJbmV0ZGV2X3dhcm4oZGUtPmRldiwgInRpbWVvdXQgZXhwaXJlZCwgc3RvcHBpbmcgRE1BXG4iKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRlX3N0YXJ0X3J4dHggKHN0cnVjdCBkZV9wcml2YXRlICpkZSkKQEAgLTkwNyw5ICs5MDEsOCBAQAogewogCWlmICghbmV0aWZfY2Fycmllcl9vayhkZS0+ZGV2KSkgewogCQluZXRpZl9jYXJyaWVyX29uKGRlLT5kZXYpOwotCQlpZiAobmV0aWZfbXNnX2xpbmsoZGUpKQotCQkJZGV2X2luZm8oJmRlLT5kZXYtPmRldiwgImxpbmsgdXAsIG1lZGlhICVzXG4iLAotCQkJCSBtZWRpYV9uYW1lW2RlLT5tZWRpYV90eXBlXSk7CisJCW5ldGlmX2luZm8oZGUsIGxpbmssIGRlLT5kZXYsICJsaW5rIHVwLCBtZWRpYSAlc1xuIiwKKwkJCSAgIG1lZGlhX25hbWVbZGUtPm1lZGlhX3R5cGVdKTsKIAl9CiB9CiAKQEAgLTkxNyw4ICs5MTAsNyBAQAogewogCWlmIChuZXRpZl9jYXJyaWVyX29rKGRlLT5kZXYpKSB7CiAJCW5ldGlmX2NhcnJpZXJfb2ZmKGRlLT5kZXYpOwotCQlpZiAobmV0aWZfbXNnX2xpbmsoZGUpKQotCQkJZGV2X2luZm8oJmRlLT5kZXYtPmRldiwgImxpbmsgZG93blxuIik7CisJCW5ldGlmX2luZm8oZGUsIGxpbmssIGRlLT5kZXYsICJsaW5rIGRvd25cbiIpOwogCX0KIH0KIApAQCAtOTI4LDggKzkyMCw3IEBACiAJdTMyIG1hY21vZGUgPSBkcjMyKE1hY01vZGUpOwogCiAJaWYgKGRlX2lzX3J1bm5pbmcoZGUpKQotCQlkZXZfd2FybigmZGUtPmRldi0+ZGV2LAotCQkJICJjaGlwIGlzIHJ1bm5pbmcgd2hpbGUgY2hhbmdpbmcgbWVkaWEhXG4iKTsKKwkJbmV0ZGV2X3dhcm4oZGUtPmRldiwgImNoaXAgaXMgcnVubmluZyB3aGlsZSBjaGFuZ2luZyBtZWRpYSFcbiIpOwogCiAJaWYgKGRlLT5kZTIxMDQwKQogCQlkdzMyKENTUjExLCBGVUxMX0RVUExFWF9NQUdJQyk7CkBAIC05NDgsMTggKzkzOSwxMyBAQAogCWVsc2UKIAkJbWFjbW9kZSAmPSB+RnVsbER1cGxleDsKIAotCWlmIChuZXRpZl9tc2dfbGluayhkZSkpCi0JCWRldl9pbmZvKCZkZS0+ZGV2LT5kZXYsICJzZXQgbGluayAlc1xuIiwgbWVkaWFfbmFtZVttZWRpYV0pOwotCWlmIChuZXRpZl9tc2dfaHcoZGUpKSB7Ci0JCWRldl9pbmZvKCZkZS0+ZGV2LT5kZXYsICJtb2RlIDB4JXgsIHNpYSAweCV4LDB4JXgsMHgleCwweCV4XG4iLAotCQkJIGRyMzIoTWFjTW9kZSksIGRyMzIoU0lBU3RhdHVzKSwKLQkJCSBkcjMyKENTUjEzKSwgZHIzMihDU1IxNCksIGRyMzIoQ1NSMTUpKTsKLQotCQlkZXZfaW5mbygmZGUtPmRldi0+ZGV2LAotCQkJICJzZXQgbW9kZSAweCV4LCBzZXQgc2lhIDB4JXgsMHgleCwweCV4XG4iLAotCQkJIG1hY21vZGUsIGRlLT5tZWRpYVttZWRpYV0uY3NyMTMsCi0JCQkgZGUtPm1lZGlhW21lZGlhXS5jc3IxNCwgZGUtPm1lZGlhW21lZGlhXS5jc3IxNSk7Ci0JfQorCW5ldGlmX2luZm8oZGUsIGxpbmssIGRlLT5kZXYsICJzZXQgbGluayAlc1xuIiwgbWVkaWFfbmFtZVttZWRpYV0pOworCW5ldGlmX2luZm8oZGUsIGh3LCBkZS0+ZGV2LCAibW9kZSAweCV4LCBzaWEgMHgleCwweCV4LDB4JXgsMHgleFxuIiwKKwkJICAgZHIzMihNYWNNb2RlKSwgZHIzMihTSUFTdGF0dXMpLAorCQkgICBkcjMyKENTUjEzKSwgZHIzMihDU1IxNCksIGRyMzIoQ1NSMTUpKTsKKwluZXRpZl9pbmZvKGRlLCBodywgZGUtPmRldiwgInNldCBtb2RlIDB4JXgsIHNldCBzaWEgMHgleCwweCV4LDB4JXhcbiIsCisJCSAgIG1hY21vZGUsIGRlLT5tZWRpYVttZWRpYV0uY3NyMTMsCisJCSAgIGRlLT5tZWRpYVttZWRpYV0uY3NyMTQsIGRlLT5tZWRpYVttZWRpYV0uY3NyMTUpOwogCWlmIChtYWNtb2RlICE9IGRyMzIoTWFjTW9kZSkpCiAJCWR3MzIoTWFjTW9kZSwgbWFjbW9kZSk7CiB9CkBAIC05OTYsOSArOTgyLDggQEAKIAkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKGRldikpCiAJCQlkZV9saW5rX3VwKGRlKTsKIAkJZWxzZQotCQkJaWYgKG5ldGlmX21zZ190aW1lcihkZSkpCi0JCQkJZGV2X2luZm8oJmRldi0+ZGV2LCAiJXMgbGluayBvaywgc3RhdHVzICV4XG4iLAotCQkJCQkgbWVkaWFfbmFtZVtkZS0+bWVkaWFfdHlwZV0sIHN0YXR1cyk7CisJCQluZXRpZl9pbmZvKGRlLCB0aW1lciwgZGV2LCAiJXMgbGluayBvaywgc3RhdHVzICV4XG4iLAorCQkJCSAgIG1lZGlhX25hbWVbZGUtPm1lZGlhX3R5cGVdLCBzdGF0dXMpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMDI1LDkgKzEwMTAsOCBAQAogCWRlLT5tZWRpYV90aW1lci5leHBpcmVzID0gamlmZmllcyArIERFX1RJTUVSX05PX0xJTks7CiAJYWRkX3RpbWVyKCZkZS0+bWVkaWFfdGltZXIpOwogCi0JaWYgKG5ldGlmX21zZ190aW1lcihkZSkpCi0JCWRldl9pbmZvKCZkZXYtPmRldiwgIm5vIGxpbmssIHRyeWluZyBtZWRpYSAlcywgc3RhdHVzICV4XG4iLAotCQkJIG1lZGlhX25hbWVbZGUtPm1lZGlhX3R5cGVdLCBzdGF0dXMpOworCW5ldGlmX2luZm8oZGUsIHRpbWVyLCBkZXYsICJubyBsaW5rLCB0cnlpbmcgbWVkaWEgJXMsIHN0YXR1cyAleFxuIiwKKwkJICAgbWVkaWFfbmFtZVtkZS0+bWVkaWFfdHlwZV0sIHN0YXR1cyk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVfb2tfdG9fYWR2ZXJ0aXNlIChzdHJ1Y3QgZGVfcHJpdmF0ZSAqZGUsIHUzMiBuZXdfbWVkaWEpCkBAIC0xMDg1LDExICsxMDY5LDEwIEBACiAJCWlmICghbmV0aWZfY2Fycmllcl9vayhkZXYpKQogCQkJZGVfbGlua191cChkZSk7CiAJCWVsc2UKLQkJCWlmIChuZXRpZl9tc2dfdGltZXIoZGUpKQotCQkJCWRldl9pbmZvKCZkZXYtPmRldiwKLQkJCQkJICIlcyBsaW5rIG9rLCBtb2RlICV4IHN0YXR1cyAleFxuIiwKLQkJCQkJIG1lZGlhX25hbWVbZGUtPm1lZGlhX3R5cGVdLAotCQkJCQkgZHIzMihNYWNNb2RlKSwgc3RhdHVzKTsKKwkJCW5ldGlmX2luZm8oZGUsIHRpbWVyLCBkZXYsCisJCQkJICAgIiVzIGxpbmsgb2ssIG1vZGUgJXggc3RhdHVzICV4XG4iLAorCQkJCSAgIG1lZGlhX25hbWVbZGUtPm1lZGlhX3R5cGVdLAorCQkJCSAgIGRyMzIoTWFjTW9kZSksIHN0YXR1cyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTExNjMsOSArMTE0Niw4IEBACiAJZGUtPm1lZGlhX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgREVfVElNRVJfTk9fTElOSzsKIAlhZGRfdGltZXIoJmRlLT5tZWRpYV90aW1lcik7CiAKLQlpZiAobmV0aWZfbXNnX3RpbWVyKGRlKSkKLQkJZGV2X2luZm8oJmRldi0+ZGV2LCAibm8gbGluaywgdHJ5aW5nIG1lZGlhICVzLCBzdGF0dXMgJXhcbiIsCi0JCQkgbWVkaWFfbmFtZVtkZS0+bWVkaWFfdHlwZV0sIHN0YXR1cyk7CisJbmV0aWZfaW5mbyhkZSwgdGltZXIsIGRldiwgIm5vIGxpbmssIHRyeWluZyBtZWRpYSAlcywgc3RhdHVzICV4XG4iLAorCQkgICBtZWRpYV9uYW1lW2RlLT5tZWRpYV90eXBlXSwgc3RhdHVzKTsKIH0KIAogc3RhdGljIHZvaWQgZGVfbWVkaWFfaW50ZXJydXB0IChzdHJ1Y3QgZGVfcHJpdmF0ZSAqZGUsIHUzMiBzdGF0dXMpCkBAIC0xNDAxLDE0ICsxMzgzLDEzIEBACiAJc3RydWN0IGRlX3ByaXZhdGUgKmRlID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgcmM7CiAKLQlpZiAobmV0aWZfbXNnX2lmdXAoZGUpKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGVuYWJsaW5nIGludGVyZmFjZVxuIiwgZGV2LT5uYW1lKTsKKwluZXRpZl9kYmcoZGUsIGlmdXAsIGRldiwgImVuYWJsaW5nIGludGVyZmFjZVxuIik7CiAKIAlkZS0+cnhfYnVmX3N6ID0gKGRldi0+bXR1IDw9IDE1MDAgPyBQS1RfQlVGX1NaIDogZGV2LT5tdHUgKyAzMik7CiAKIAlyYyA9IGRlX2FsbG9jX3JpbmdzKGRlKTsKIAlpZiAocmMpIHsKLQkJZGV2X2VycigmZGV2LT5kZXYsICJyaW5nIGFsbG9jYXRpb24gZmFpbHVyZSwgZXJyPSVkXG4iLCByYyk7CisJCW5ldGRldl9lcnIoZGV2LCAicmluZyBhbGxvY2F0aW9uIGZhaWx1cmUsIGVycj0lZFxuIiwgcmMpOwogCQlyZXR1cm4gcmM7CiAJfQogCkBAIC0xNDE2LDE0ICsxMzk3LDE0IEBACiAKIAlyYyA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBkZV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldik7CiAJaWYgKHJjKSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiSVJRICVkIHJlcXVlc3QgZmFpbHVyZSwgZXJyPSVkXG4iLAotCQkJZGV2LT5pcnEsIHJjKTsKKwkJbmV0ZGV2X2VycihkZXYsICJJUlEgJWQgcmVxdWVzdCBmYWlsdXJlLCBlcnI9JWRcbiIsCisJCQkgICBkZXYtPmlycSwgcmMpOwogCQlnb3RvIGVycl9vdXRfZnJlZTsKIAl9CiAKIAlyYyA9IGRlX2luaXRfaHcoZGUpOwogCWlmIChyYykgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgImgvdyBpbml0IGZhaWx1cmUsIGVycj0lZFxuIiwgcmMpOworCQluZXRkZXZfZXJyKGRldiwgImgvdyBpbml0IGZhaWx1cmUsIGVycj0lZFxuIiwgcmMpOwogCQlnb3RvIGVycl9vdXRfZnJlZV9pcnE7CiAJfQogCkBAIC0xNDQ0LDggKzE0MjUsNyBAQAogCXN0cnVjdCBkZV9wcml2YXRlICpkZSA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChuZXRpZl9tc2dfaWZkb3duKGRlKSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkaXNhYmxpbmcgaW50ZXJmYWNlXG4iLCBkZXYtPm5hbWUpOworCW5ldGlmX2RiZyhkZSwgaWZkb3duLCBkZXYsICJkaXNhYmxpbmcgaW50ZXJmYWNlXG4iKTsKIAogCWRlbF90aW1lcl9zeW5jKCZkZS0+bWVkaWFfdGltZXIpOwogCkBAIC0xNDY2LDkgKzE0NDYsOSBAQAogewogCXN0cnVjdCBkZV9wcml2YXRlICpkZSA9IG5ldGRldl9wcml2KGRldik7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE5JQyBzdGF0dXMgJTA4eCBtb2RlICUwOHggc2lhICUwOHggZGVzYyAldS8ldS8ldVxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCBkcjMyKE1hY1N0YXR1cyksIGRyMzIoTWFjTW9kZSksIGRyMzIoU0lBU3RhdHVzKSwKLQkgICAgICAgZGUtPnJ4X3RhaWwsIGRlLT50eF9oZWFkLCBkZS0+dHhfdGFpbCk7CisJbmV0ZGV2X2RiZyhkZXYsICJOSUMgc3RhdHVzICUwOHggbW9kZSAlMDh4IHNpYSAlMDh4IGRlc2MgJXUvJXUvJXVcbiIsCisJCSAgIGRyMzIoTWFjU3RhdHVzKSwgZHIzMihNYWNNb2RlKSwgZHIzMihTSUFTdGF0dXMpLAorCQkgICBkZS0+cnhfdGFpbCwgZGUtPnR4X2hlYWQsIGRlLT50eF90YWlsKTsKIAogCWRlbF90aW1lcl9zeW5jKCZkZS0+bWVkaWFfdGltZXIpOwogCkBAIC0xNTE4LDE4ICsxNDk4LDE3IEBACiAJc3dpdGNoIChkZS0+bWVkaWFfdHlwZSkgewogCWNhc2UgREVfTUVESUFfQVVJOgogCQllY21kLT5wb3J0ID0gUE9SVF9BVUk7Ci0JCWVjbWQtPnNwZWVkID0gNTsKIAkJYnJlYWs7CiAJY2FzZSBERV9NRURJQV9CTkM6CiAJCWVjbWQtPnBvcnQgPSBQT1JUX0JOQzsKLQkJZWNtZC0+c3BlZWQgPSAyOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQllY21kLT5wb3J0ID0gUE9SVF9UUDsKLQkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDsKIAkJYnJlYWs7CiAJfQogCisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIDEwKTsKKwogCWlmIChkcjMyKE1hY01vZGUpICYgRnVsbER1cGxleCkKIAkJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CiAJZWxzZQpAQCAtMTU1MCw5ICsxNTI5LDcgQEAKIAl1MzIgbmV3X21lZGlhOwogCXVuc2lnbmVkIGludCBtZWRpYV9sb2NrOwogCi0JaWYgKGVjbWQtPnNwZWVkICE9IFNQRUVEXzEwICYmIGVjbWQtPnNwZWVkICE9IDUgJiYgZWNtZC0+c3BlZWQgIT0gMikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGRlLT5kZTIxMDQwICYmIGVjbWQtPnNwZWVkID09IDIpCisJaWYgKGV0aHRvb2xfY21kX3NwZWVkKGVjbWQpICE9IDEwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoZWNtZC0+ZHVwbGV4ICE9IERVUExFWF9IQUxGICYmIGVjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNjk2LDkgKzE2NzMsOCBAQAogCiAJc3RhdHVzID0gZHIzMihTSUFTdGF0dXMpOwogCWR3MzIoU0lBU3RhdHVzLCAoc3RhdHVzICYgfk5XYXlTdGF0ZSkgfCBOV2F5UmVzdGFydCk7Ci0JaWYgKG5ldGlmX21zZ19saW5rKGRlKSkKLQkJZGV2X2luZm8oJmRlLT5kZXYtPmRldiwgImxpbmsgbndheSByZXN0YXJ0LCBzdGF0dXMgJXgsJXhcbiIsCi0JCQkgc3RhdHVzLCBkcjMyKFNJQVN0YXR1cykpOworCW5ldGlmX2luZm8oZGUsIGxpbmssIGRldiwgImxpbmsgbndheSByZXN0YXJ0LCBzdGF0dXMgJXgsJXhcbiIsCisJCSAgIHN0YXR1cywgZHIzMihTSUFTdGF0dXMpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTc0Myw3ICsxNzE5LDggQEAKIAkJZGUtPmRldi0+ZGV2X2FkZHJbaV0gPSB2YWx1ZTsKIAkJdWRlbGF5KDEpOwogCQlpZiAoYm9ndXNjbnQgPD0gMCkKLQkJCXByX3dhcm5pbmcoUEZYICJ0aW1lb3V0IHJlYWRpbmcgMjEwNDAgTUFDIGFkZHJlc3MgYnl0ZSAldVxuIiwgaSk7CisJCQlwcl93YXJuKCJ0aW1lb3V0IHJlYWRpbmcgMjEwNDAgTUFDIGFkZHJlc3MgYnl0ZSAldVxuIiwKKwkJCQlpKTsKIAl9CiB9CiAKQEAgLTE5MjksOCArMTkwNiwxMCBAQAogCQkJCQlkZS0+bWVkaWFbaWR4XS5jc3IxNCwKIAkJCQkJZGUtPm1lZGlhW2lkeF0uY3NyMTUpOwogCi0JCX0gZWxzZSBpZiAobmV0aWZfbXNnX3Byb2JlKGRlKSkKLQkJCXByX2NvbnQoIlxuIik7CisJCX0gZWxzZSB7CisJCQlpZiAobmV0aWZfbXNnX3Byb2JlKGRlKSkKKwkJCQlwcl9jb250KCJcbiIpOworCQl9CiAKIAkJaWYgKGJ1ZnAgPiAoKHZvaWQgKikmZWVfZGF0YVtERV9FRVBST01fU0laRSAtIDNdKSkKIAkJCWJyZWFrOwpAQCAtMTk5OSw3ICsxOTc4LDcgQEAKIAogI2lmbmRlZiBNT0RVTEUKIAlpZiAoYm9hcmRfaWR4ID09IDApCi0JCXByaW50aygiJXMiLCB2ZXJzaW9uKTsKKwkJcHJfaW5mbygiJXNcbiIsIHZlcnNpb24pOwogI2VuZGlmCiAKIAkvKiBhbGxvY2F0ZSBhIG5ldyBldGhlcm5ldCBkZXZpY2Ugc3RydWN0dXJlLCBhbmQgZmlsbCBpbiBkZWZhdWx0cyAqLwpAQCAtMjA0MSw3ICsyMDIwLDcgQEAKIAkvKiBjaGVjayBmb3IgaW52YWxpZCBJUlEgdmFsdWUgKi8KIAlpZiAocGRldi0+aXJxIDwgMikgewogCQlyYyA9IC1FSU87Ci0JCXByX2VycihQRlggImludmFsaWQgaXJxICglZCkgZm9yIHBjaSBkZXYgJXNcbiIsCisJCXByX2VycigiaW52YWxpZCBpcnEgKCVkKSBmb3IgcGNpIGRldiAlc1xuIiwKIAkJICAgICAgIHBkZXYtPmlycSwgcGNpX25hbWUocGRldikpOwogCQlnb3RvIGVycl9vdXRfcmVzOwogCX0KQEAgLTIwNTIsMTIgKzIwMzEsMTIgQEAKIAlwY2lhZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpOwogCWlmICghcGNpYWRkcikgewogCQlyYyA9IC1FSU87Ci0JCXByX2VycihQRlggIm5vIE1NSU8gcmVzb3VyY2UgZm9yIHBjaSBkZXYgJXNcbiIsIHBjaV9uYW1lKHBkZXYpKTsKKwkJcHJfZXJyKCJubyBNTUlPIHJlc291cmNlIGZvciBwY2kgZGV2ICVzXG4iLCBwY2lfbmFtZShwZGV2KSk7CiAJCWdvdG8gZXJyX291dF9yZXM7CiAJfQogCWlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpIDwgREVfUkVHU19TSVpFKSB7CiAJCXJjID0gLUVJTzsKLQkJcHJfZXJyKFBGWCAiTU1JTyByZXNvdXJjZSAoJWxseCkgdG9vIHNtYWxsIG9uIHBjaSBkZXYgJXNcbiIsCisJCXByX2VycigiTU1JTyByZXNvdXJjZSAoJWxseCkgdG9vIHNtYWxsIG9uIHBjaSBkZXYgJXNcbiIsCiAJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSksCiAJCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CiAJCWdvdG8gZXJyX291dF9yZXM7CkBAIC0yMDY3LDcgKzIwNDYsNyBAQAogCXJlZ3MgPSBpb3JlbWFwX25vY2FjaGUocGNpYWRkciwgREVfUkVHU19TSVpFKTsKIAlpZiAoIXJlZ3MpIHsKIAkJcmMgPSAtRUlPOwotCQlwcl9lcnIoUEZYICJDYW5ub3QgbWFwIFBDSSBNTUlPICglbGx4QCVseCkgb24gcGNpIGRldiAlc1xuIiwKKwkJcHJfZXJyKCJDYW5ub3QgbWFwIFBDSSBNTUlPICglbGx4QCVseCkgb24gcGNpIGRldiAlc1xuIiwKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKSwKIAkJICAgICAgIHBjaWFkZHIsIHBjaV9uYW1lKHBkZXYpKTsKIAkJZ290byBlcnJfb3V0X3JlczsKQEAgLTIwODAsNyArMjA1OSw3IEBACiAJLyogbWFrZSBzdXJlIGhhcmR3YXJlIGlzIG5vdCBydW5uaW5nICovCiAJcmMgPSBkZV9yZXNldF9tYWMoZGUpOwogCWlmIChyYykgewotCQlwcl9lcnIoUEZYICJDYW5ub3QgcmVzZXQgTUFDLCBwY2kgZGV2ICVzXG4iLCBwY2lfbmFtZShwZGV2KSk7CisJCXByX2VycigiQ2Fubm90IHJlc2V0IE1BQywgcGNpIGRldiAlc1xuIiwgcGNpX25hbWUocGRldikpOwogCQlnb3RvIGVycl9vdXRfaW9tYXA7CiAJfQogCkBAIC0yMTAwLDExICsyMDc5LDExIEBACiAJCWdvdG8gZXJyX291dF9pb21hcDsKIAogCS8qIHByaW50IGluZm8gYWJvdXQgYm9hcmQgYW5kIGludGVyZmFjZSBqdXN0IHJlZ2lzdGVyZWQgKi8KLQlkZXZfaW5mbygmZGV2LT5kZXYsICIlcyBhdCAweCVseCwgJXBNLCBJUlEgJWRcbiIsCi0JCSBkZS0+ZGUyMTA0MCA/ICIyMTA0MCIgOiAiMjEwNDEiLAotCQkgZGV2LT5iYXNlX2FkZHIsCi0JCSBkZXYtPmRldl9hZGRyLAotCQkgZGV2LT5pcnEpOworCW5ldGRldl9pbmZvKGRldiwgIiVzIGF0IDB4JWx4LCAlcE0sIElSUSAlZFxuIiwKKwkJICAgIGRlLT5kZTIxMDQwID8gIjIxMDQwIiA6ICIyMTA0MSIsCisJCSAgICBkZXYtPmJhc2VfYWRkciwKKwkJICAgIGRldi0+ZGV2X2FkZHIsCisJCSAgICBkZXYtPmlycSk7CiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKIApAQCAtMjE5Miw3ICsyMTcxLDcgQEAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJZ290byBvdXRfYXR0YWNoOwogCWlmICgocmV0dmFsID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldikpKSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAicGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkIGluIHJlc3VtZVxuIik7CisJCW5ldGRldl9lcnIoZGV2LCAicGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkIGluIHJlc3VtZVxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKQEAgLTIyMjEsNyArMjIwMCw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBkZV9pbml0ICh2b2lkKQogewogI2lmZGVmIE1PRFVMRQotCXByaW50aygiJXMiLCB2ZXJzaW9uKTsKKwlwcl9pbmZvKCIlc1xuIiwgdmVyc2lvbik7CiAjZW5kaWYKIAlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZGVfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmMgYi9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5jCmluZGV4IGVmYWExZDYuLjQ1MTQ0ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvZGU0eDUuYwpAQCAtMTk5NSw3ICsxOTk1LDcgQEAKIAogc3RhdGljIHVfY2hhciBkZTR4NV9pcnFbXSA9IEVJU0FfQUxMT1dFRF9JUlFfTElTVDsKIAotc3RhdGljIGludCBfX2luaXQgZGU0eDVfZWlzYV9wcm9iZSAoc3RydWN0IGRldmljZSAqZ2VuZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgZGU0eDVfZWlzYV9wcm9iZSAoc3RydWN0IGRldmljZSAqZ2VuZGV2KQogewogCXN0cnVjdCBlaXNhX2RldmljZSAqZWRldjsKIAl1X2xvbmcgaW9iYXNlOwpAQCAtMjA5Nyw3ICsyMDk3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBlaXNhX2RldmljZV9pZCBkZTR4NV9laXNhX2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBlaXNhX2RldmljZV9pZCBkZTR4NV9laXNhX2lkc1tdIF9fZGV2aW5pdGNvbnN0ID0gewogICAgICAgICB7ICJERUM0MjUwIiwgMCB9LAkvKiAwIGlzIHRoZSBib2FyZCBuYW1lIGluZGV4Li4uICovCiAgICAgICAgIHsgIiIgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYwppbmRleCBmYjA3ZjQ4Li40Njg1MTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9kbWZlLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jCkBAIC0yOTUsOCArMjk1LDcgQEAKIC8qIEdsb2JhbCB2YXJpYWJsZSBkZWNsYXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogc3RhdGljIGludCBfX2RldmluaXRkYXRhIHByaW50ZWRfdmVyc2lvbjsKIHN0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9Ci0JS0VSTl9JTkZPIERSVl9OQU1FICI6IERhdmljb20gRE05eHh4IG5ldCBkcml2ZXIsIHZlcnNpb24gIgotCURSVl9WRVJTSU9OICIgKCIgRFJWX1JFTERBVEUgIilcbiI7CisJIkRhdmljb20gRE05eHh4IG5ldCBkcml2ZXIsIHZlcnNpb24gIiBEUlZfVkVSU0lPTiAiICgiIERSVl9SRUxEQVRFICIpIjsKIAogc3RhdGljIGludCBkbWZlX2RlYnVnOwogc3RhdGljIHVuc2lnbmVkIGNoYXIgZG1mZV9tZWRpYV9tb2RlID0gRE1GRV9BVVRPOwpAQCAtMzgxLDcgKzM4MCw3IEBACiAJRE1GRV9EQlVHKDAsICJkbWZlX2luaXRfb25lKCkiLCAwKTsKIAogCWlmICghcHJpbnRlZF92ZXJzaW9uKyspCi0JCXByaW50ayh2ZXJzaW9uKTsKKwkJcHJfaW5mbygiJXNcbiIsIHZlcnNpb24pOwogCiAJLyoKIAkgKglTUEFSQyBvbi1ib2FyZCBETTkxMHggY2hpcHMgc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIG1haW4KQEAgLTQwNiw3ICs0MDUsNyBAQAogCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CiAKIAlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKSkgewotCQlwcl93YXJuaW5nKCIzMi1iaXQgUENJIERNQSBub3QgYXZhaWxhYmxlXG4iKTsKKwkJcHJfd2FybigiMzItYml0IFBDSSBETUEgbm90IGF2YWlsYWJsZVxuIik7CiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX291dF9mcmVlOwogCX0KQEAgLTIyMDMsNyArMjIwMiw3IEBACiB7CiAJaW50IHJjOwogCi0JcHJpbnRrKHZlcnNpb24pOworCXByX2luZm8oIiVzXG4iLCB2ZXJzaW9uKTsKIAlwcmludGVkX3ZlcnNpb24gPSAxOwogCiAJRE1GRV9EQlVHKDAsICJpbml0X21vZHVsZSgpICIsIGRlYnVnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2VlcHJvbS5jIGIvZHJpdmVycy9uZXQvdHVsaXAvZWVwcm9tLmMKaW5kZXggMjk2NDg2Yi4uZmE1ZWVlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvZWVwcm9tLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvZWVwcm9tLmMKQEAgLTIyMiw4ICsyMjIsOCBAQAogCSAgICAgICAgLyogdGhlcmUgaXMgbm8gcGh5IGluZm9ybWF0aW9uLCBkb24ndCBldmVuIHRyeSB0byBidWlsZCBtdGFibGUgKi8KIAkgICAgICAgIGlmIChjb3VudCA9PSAwKSB7CiAJCQlpZiAodHVsaXBfZGVidWcgPiAwKQotCQkJCXByX3dhcm5pbmcoIiVzOiBubyBwaHkgaW5mbywgYWJvcnRpbmcgbXRhYmxlIGJ1aWxkXG4iLAotCQkJCQkgICBkZXYtPm5hbWUpOworCQkJCXByX3dhcm4oIiVzOiBubyBwaHkgaW5mbywgYWJvcnRpbmcgbXRhYmxlIGJ1aWxkXG4iLAorCQkJCQlkZXYtPm5hbWUpOwogCQkgICAgICAgIHJldHVybjsKIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9pbnRlcnJ1cHQuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL2ludGVycnVwdC5jCmluZGV4IDAwMTM2NDIuLjUzNTBkNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2ludGVycnVwdC5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2ludGVycnVwdC5jCkBAIC0xMjUsMTIgKzEyNSwxMiBAQAogI2VuZGlmCiAKIAlpZiAodHVsaXBfZGVidWcgPiA0KQotCQlwcmludGsoS0VSTl9ERUJVRyAiIEluIHR1bGlwX3J4KCksIGVudHJ5ICVkICUwOHhcbiIsCi0JCSAgICAgICBlbnRyeSwgdHAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cyk7CisJCW5ldGRldl9kYmcoZGV2LCAiIEluIHR1bGlwX3J4KCksIGVudHJ5ICVkICUwOHhcbiIsCisJCQkgICBlbnRyeSwgdHAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cyk7CiAKICAgICAgICBkbyB7CiAJCWlmIChpb3JlYWQzMih0cC0+YmFzZV9hZGRyICsgQ1NSNSkgPT0gMHhmZmZmZmZmZikgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiBJbiB0dWxpcF9wb2xsKCksIGhhcmR3YXJlIGRpc2FwcGVhcmVkXG4iKTsKKwkJCW5ldGRldl9kYmcoZGV2LCAiIEluIHR1bGlwX3BvbGwoKSwgaGFyZHdhcmUgZGlzYXBwZWFyZWRcbiIpOwogCQkJYnJlYWs7CiAJCX0KICAgICAgICAgICAgICAgIC8qIEFja25vd2xlZGdlIGN1cnJlbnQgUlggaW50ZXJydXB0IHNvdXJjZXMuICovCkBAIC0xNDUsOSArMTQ1LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRwLT5kaXJ0eV9yeCArIFJYX1JJTkdfU0laRSA9PSB0cC0+Y3VyX3J4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgICAgICAgIGlmICh0dWxpcF9kZWJ1ZyA+IDUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbiB0dWxpcF9yeCgpLCBlbnRyeSAlZCAlMDh4XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsIGVudHJ5LCBzdGF0dXMpOworCQkgICAgICAgaWYgKHR1bGlwX2RlYnVnID4gNSkKKwkJCQluZXRkZXZfZGJnKGRldiwgIkluIHR1bGlwX3J4KCksIGVudHJ5ICVkICUwOHhcbiIsCisJCQkJCSAgIGVudHJ5LCBzdGF0dXMpOwogCiAJCSAgICAgICBpZiAoKyt3b3JrX2RvbmUgPj0gYnVkZ2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbm90X2RvbmU7CkBAIC0xODQsOSArMTg0LDkgQEAKIAkJCQkJfQogCQkJICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZXJlIHdhcyBhIGZhdGFsIGVycm9yLiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR1bGlwX2RlYnVnID4gMikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZWNlaXZlIGVycm9yLCBSeCBzdGF0dXMgJTA4eFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSwgc3RhdHVzKTsKKwkJCQkgICAgICAgaWYgKHR1bGlwX2RlYnVnID4gMikKKwkJCQkJCW5ldGRldl9kYmcoZGV2LCAiUmVjZWl2ZSBlcnJvciwgUnggc3RhdHVzICUwOHhcbiIsCisJCQkJCQkJICAgc3RhdHVzKTsKIAkJCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsgLyogZW5kIG9mIGEgcGFja2V0LiovCiAJCQkJCWlmIChwa3RfbGVuID4gMTUxOCB8fAogCQkJCQkgICAgKHN0YXR1cyAmIFJ4RGVzY1J1bnQpKQpAQCAtMzY3LDE2ICszNjcsMTYgQEAKIAlpbnQgcmVjZWl2ZWQgPSAwOwogCiAJaWYgKHR1bGlwX2RlYnVnID4gNCkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiBJbiB0dWxpcF9yeCgpLCBlbnRyeSAlZCAlMDh4XG4iLAotCQkgICAgICAgZW50cnksIHRwLT5yeF9yaW5nW2VudHJ5XS5zdGF0dXMpOworCQluZXRkZXZfZGJnKGRldiwgIkluIHR1bGlwX3J4KCksIGVudHJ5ICVkICUwOHhcbiIsCisJCQkgICBlbnRyeSwgdHAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cyk7CiAJLyogSWYgd2Ugb3duIHRoZSBuZXh0IGVudHJ5LCBpdCBpcyBhIG5ldyBwYWNrZXQuIFNlbmQgaXQgdXAuICovCiAJd2hpbGUgKCAhICh0cC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzICYgY3B1X3RvX2xlMzIoRGVzY093bmVkKSkpIHsKIAkJczMyIHN0YXR1cyA9IGxlMzJfdG9fY3B1KHRwLT5yeF9yaW5nW2VudHJ5XS5zdGF0dXMpOwogCQlzaG9ydCBwa3RfbGVuOwogCiAJCWlmICh0dWxpcF9kZWJ1ZyA+IDUpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEluIHR1bGlwX3J4KCksIGVudHJ5ICVkICUwOHhcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlbnRyeSwgc3RhdHVzKTsKKwkJCW5ldGRldl9kYmcoZGV2LCAiSW4gdHVsaXBfcngoKSwgZW50cnkgJWQgJTA4eFxuIiwKKwkJCQkgICBlbnRyeSwgc3RhdHVzKTsKIAkJaWYgKC0tcnhfd29ya19saW1pdCA8IDApCiAJCQlicmVhazsKIApAQCAtNDA0LDE2ICs0MDQsMTYgQEAKIAkJCQkvKiBJbmdvcmUgZWFybGllciBidWZmZXJzLiAqLwogCQkJCWlmICgoc3RhdHVzICYgMHhmZmZmKSAhPSAweDdmZmYpIHsKIAkJCQkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCQkJCWRldl93YXJuKCZkZXYtPmRldiwKLQkJCQkJCQkgIk92ZXJzaXplZCBFdGhlcm5ldCBmcmFtZSBzcGFubmVkIG11bHRpcGxlIGJ1ZmZlcnMsIHN0YXR1cyAlMDh4IVxuIiwKLQkJCQkJCQkgc3RhdHVzKTsKKwkJCQkJCW5ldGRldl93YXJuKGRldiwKKwkJCQkJCQkgICAgIk92ZXJzaXplZCBFdGhlcm5ldCBmcmFtZSBzcGFubmVkIG11bHRpcGxlIGJ1ZmZlcnMsIHN0YXR1cyAlMDh4IVxuIiwKKwkJCQkJCQkgICAgc3RhdHVzKTsKIAkJCQkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCQkJfQogCQkJfSBlbHNlIHsKIAkJCQkvKiBUaGVyZSB3YXMgYSBmYXRhbCBlcnJvci4gKi8KIAkJCQlpZiAodHVsaXBfZGVidWcgPiAyKQotCQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJlY2VpdmUgZXJyb3IsIFJ4IHN0YXR1cyAlMDh4XG4iLAotCQkJCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMpOworCQkJCQluZXRkZXZfZGJnKGRldiwgIlJlY2VpdmUgZXJyb3IsIFJ4IHN0YXR1cyAlMDh4XG4iLAorCQkJCQkJICAgc3RhdHVzKTsKIAkJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOyAvKiBlbmQgb2YgYSBwYWNrZXQuKi8KIAkJCQlpZiAocGt0X2xlbiA+IDE1MTggfHwKIAkJCQkgICAgKHN0YXR1cyAmIFJ4RGVzY1J1bnQpKQpAQCAtNTczLDggKzU3Myw4IEBACiAjZW5kaWYgLyogIENPTkZJR19UVUxJUF9OQVBJICovCiAKIAkJaWYgKHR1bGlwX2RlYnVnID4gNCkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogaW50ZXJydXB0ICBjc3I1PSUjOC44eCBuZXcgY3NyNT0lIzguOHhcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBjc3I1LCBpb3JlYWQzMihpb2FkZHIgKyBDU1I1KSk7CisJCQluZXRkZXZfZGJnKGRldiwgImludGVycnVwdCAgY3NyNT0lIzguOHggbmV3IGNzcjU9JSM4Ljh4XG4iLAorCQkJCSAgIGNzcjUsIGlvcmVhZDMyKGlvYWRkciArIENTUjUpKTsKIAogCiAJCWlmIChjc3I1ICYgKFR4Tm9CdWYgfCBUeERpZWQgfCBUeEludHIgfCBUaW1lckludCkpIHsKQEAgLTYwNSw4ICs2MDUsOCBAQAogCQkJCQkvKiBUaGVyZSB3YXMgYW4gbWFqb3IgZXJyb3IsIGxvZyBpdC4gKi8KICNpZm5kZWYgZmluYWxfdmVyc2lvbgogCQkJCQlpZiAodHVsaXBfZGVidWcgPiAxKQotCQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUcmFuc21pdCBlcnJvciwgVHggc3RhdHVzICUwOHhcbiIsCi0JCQkJCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMpOworCQkJCQkJbmV0ZGV2X2RiZyhkZXYsICJUcmFuc21pdCBlcnJvciwgVHggc3RhdHVzICUwOHhcbiIsCisJCQkJCQkJICAgc3RhdHVzKTsKICNlbmRpZgogCQkJCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQkJCQlpZiAoc3RhdHVzICYgMHg0MTA0KQpAQCAtODA0LDggKzgwNCw4IEBACiAJfQogCiAJaWYgKHR1bGlwX2RlYnVnID4gNCkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBleGl0aW5nIGludGVycnVwdCwgY3NyNT0lIzA0eFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgaW9yZWFkMzIoaW9hZGRyICsgQ1NSNSkpOworCQluZXRkZXZfZGJnKGRldiwgImV4aXRpbmcgaW50ZXJydXB0LCBjc3I1PSUjMDR4XG4iLAorCQkJICAgaW9yZWFkMzIoaW9hZGRyICsgQ1NSNSkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvbWVkaWEuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL21lZGlhLmMKaW5kZXggYTBjNzcwZS4uNGJkMTM5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvbWVkaWEuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9tZWRpYS5jCkBAIC0xODIsOCArMTgyLDggQEAKIAkJc3dpdGNoIChtbGVhZi0+dHlwZSkgewogCQljYXNlIDA6CQkJCQkvKiAyMTE0MCBub24tTUlJIHhjdnIuICovCiAJCQlpZiAodHVsaXBfZGVidWcgPiAxKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogVXNpbmcgYSAyMTE0MCBub24tTUlJIHRyYW5zY2VpdmVyIHdpdGggY29udHJvbCBzZXR0aW5nICUwMnhcbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwgcFsxXSk7CisJCQkJbmV0ZGV2X2RiZyhkZXYsICJVc2luZyBhIDIxMTQwIG5vbi1NSUkgdHJhbnNjZWl2ZXIgd2l0aCBjb250cm9sIHNldHRpbmcgJTAyeFxuIiwKKwkJCQkJICAgcFsxXSk7CiAJCQlkZXYtPmlmX3BvcnQgPSBwWzBdOwogCQkJaWYgKHN0YXJ0dXApCiAJCQkJaW93cml0ZTMyKG10YWJsZS0+Y3NyMTJkaXIgfCAweDEwMCwgaW9hZGRyICsgQ1NSMTIpOwpAQCAtMjA0LDE1ICsyMDQsMTQgQEAKIAkJCQlzdHJ1Y3QgbWVkaWFsZWFmICpybGVhZiA9ICZtdGFibGUtPm1sZWFmW210YWJsZS0+aGFzX3Jlc2V0XTsKIAkJCQl1bnNpZ25lZCBjaGFyICpyc3QgPSBybGVhZi0+bGVhZmRhdGE7CiAJCQkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZXNldHRpbmcgdGhlIHRyYW5zY2VpdmVyXG4iLAotCQkJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCQkJbmV0ZGV2X2RiZyhkZXYsICJSZXNldHRpbmcgdGhlIHRyYW5zY2VpdmVyXG4iKTsKIAkJCQlmb3IgKGkgPSAwOyBpIDwgcnN0WzBdOyBpKyspCiAJCQkJCWlvd3JpdGUzMihnZXRfdTE2KHJzdCArIDEgKyAoaTw8MSkpIDw8IDE2LCBpb2FkZHIgKyBDU1IxNSk7CiAJCQl9CiAJCQlpZiAodHVsaXBfZGVidWcgPiAxKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogMjExNDMgbm9uLU1JSSAlcyB0cmFuc2NlaXZlciBjb250cm9sICUwNHgvJTA0eFxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lLCBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSwKLQkJCQkgICAgICAgc2V0dXBbMF0sIHNldHVwWzFdKTsKKwkJCQluZXRkZXZfZGJnKGRldiwgIjIxMTQzIG5vbi1NSUkgJXMgdHJhbnNjZWl2ZXIgY29udHJvbCAlMDR4LyUwNHhcbiIsCisJCQkJCSAgIG1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdLAorCQkJCQkgICBzZXR1cFswXSwgc2V0dXBbMV0pOwogCQkJaWYgKHBbMF0gJiAweDQwKSB7CS8qIFNJQSAoQ1NSMTMtMTUpIHNldHVwIHZhbHVlcyBhcmUgcHJvdmlkZWQuICovCiAJCQkJY3NyMTN2YWwgPSBzZXR1cFswXTsKIAkJCQljc3IxNHZhbCA9IHNldHVwWzFdOwpAQCAtMjM5LDggKzIzOCw4IEBACiAJCQkJaWYgKHN0YXJ0dXApIGlvd3JpdGUzMihjc3IxM3ZhbCwgaW9hZGRyICsgQ1NSMTMpOwogCQkJfQogCQkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICBTZXR0aW5nIENTUjE1IHRvICUwOHgvJTA4eFxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lLCBjc3IxNWRpciwgY3NyMTV2YWwpOworCQkJCW5ldGRldl9kYmcoZGV2LCAiU2V0dGluZyBDU1IxNSB0byAlMDh4LyUwOHhcbiIsCisJCQkJCSAgIGNzcjE1ZGlyLCBjc3IxNXZhbCk7CiAJCQlpZiAobWxlYWYtPnR5cGUgPT0gNCkKIAkJCQluZXdfY3NyNiA9IDB4ODIwMjAwMDAgfCAoKHNldHVwWzJdICYgMHg3MSkgPDwgMTgpOwogCQkJZWxzZQpAQCAtMzE2LDkgKzMxNSw5IEBACiAJCQkJaWYgKHRwLT5taWlfYWR2ZXJ0aXNlID09IDApCiAJCQkJCXRwLT5taWlfYWR2ZXJ0aXNlID0gdHAtPmFkdmVydGlzaW5nW3BoeV9udW1dOwogCQkJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogIEFkdmVydGlzaW5nICUwNHggb24gTUlJICVkXG4iLAotCQkJCQkgICAgICAgZGV2LT5uYW1lLCB0cC0+bWlpX2FkdmVydGlzZSwKLQkJCQkJICAgICAgIHRwLT5waHlzW3BoeV9udW1dKTsKKwkJCQkJbmV0ZGV2X2RiZyhkZXYsICIgQWR2ZXJ0aXNpbmcgJTA0eCBvbiBNSUkgJWRcbiIsCisJCQkJCQkgICB0cC0+bWlpX2FkdmVydGlzZSwKKwkJCQkJCSAgIHRwLT5waHlzW3BoeV9udW1dKTsKIAkJCQl0dWxpcF9tZGlvX3dyaXRlKGRldiwgdHAtPnBoeXNbcGh5X251bV0sIDQsIHRwLT5taWlfYWR2ZXJ0aXNlKTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMzM1LDggKzMzNCw3IEBACiAJCQkJc3RydWN0IG1lZGlhbGVhZiAqcmxlYWYgPSAmbXRhYmxlLT5tbGVhZlttdGFibGUtPmhhc19yZXNldF07CiAJCQkJdW5zaWduZWQgY2hhciAqcnN0ID0gcmxlYWYtPmxlYWZkYXRhOwogCQkJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogUmVzZXR0aW5nIHRoZSB0cmFuc2NlaXZlclxuIiwKLQkJCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQkJCW5ldGRldl9kYmcoZGV2LCAiUmVzZXR0aW5nIHRoZSB0cmFuc2NlaXZlclxuIik7CiAJCQkJZm9yIChpID0gMDsgaSA8IHJzdFswXTsgaSsrKQogCQkJCQlpb3dyaXRlMzIoZ2V0X3UxNihyc3QgKyAxICsgKGk8PDEpKSA8PCAxNiwgaW9hZGRyICsgQ1NSMTUpOwogCQkJfQpAQCAtMzQ0LDIwICszNDIsMjEgQEAKIAkJCWJyZWFrOwogCQl9CiAJCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICBJbnZhbGlkIG1lZGlhIHRhYmxlIHNlbGVjdGlvbiAlZFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIG1sZWFmLT50eXBlKTsKKwkJCW5ldGRldl9kYmcoZGV2LCAiIEludmFsaWQgbWVkaWEgdGFibGUgc2VsZWN0aW9uICVkXG4iLAorCQkJCSAgIG1sZWFmLT50eXBlKTsKIAkJCW5ld19jc3I2ID0gMHgwMjBFMDAwMDsKIAkJfQogCQlpZiAodHVsaXBfZGVidWcgPiAxKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBVc2luZyBtZWRpYSB0eXBlICVzLCBDU1IxMiBpcyAlMDJ4XG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sCisJCQluZXRkZXZfZGJnKGRldiwgIlVzaW5nIG1lZGlhIHR5cGUgJXMsIENTUjEyIGlzICUwMnhcbiIsCisJCQkJICAgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sCiAJCQkJICAgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTIpICYgMHhmZik7CiAJfSBlbHNlIGlmICh0cC0+Y2hpcF9pZCA9PSBMQzgyQzE2OCkgewogCQlpZiAoc3RhcnR1cCAmJiAhIHRwLT5tZWRpYWxvY2spCiAJCQlkZXYtPmlmX3BvcnQgPSB0cC0+bWlpX2NudCA/IDExIDogMDsKIAkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogUE5JQyBQSFkgc3RhdHVzIGlzICUzLjN4LCBtZWRpYSAlc1xuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGlvcmVhZDMyKGlvYWRkciArIDB4QjgpLCBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSk7CisJCQluZXRkZXZfZGJnKGRldiwgIlBOSUMgUEhZIHN0YXR1cyBpcyAlMy4zeCwgbWVkaWEgJXNcbiIsCisJCQkJICAgaW9yZWFkMzIoaW9hZGRyICsgMHhCOCksCisJCQkJICAgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0pOwogCQlpZiAodHAtPm1paV9jbnQpIHsKIAkJCW5ld19jc3I2ID0gMHg4MTBDMDAwMDsKIAkJCWlvd3JpdGUzMigweDAwMDEsIGlvYWRkciArIENTUjE1KTsKQEAgLTM4OCw5ICszODcsOSBAQAogCQl9IGVsc2UKIAkJCW5ld19jc3I2ID0gMHgwMzg2MDAwMDsKIAkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogTm8gbWVkaWEgZGVzY3JpcHRpb24gdGFibGUsIGFzc3VtaW5nICVzIHRyYW5zY2VpdmVyLCBDU1IxMiAlMDJ4XG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sCi0JCQkgICAgICAgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTIpKTsKKwkJCW5ldGRldl9kYmcoZGV2LCAiTm8gbWVkaWEgZGVzY3JpcHRpb24gdGFibGUsIGFzc3VtaW5nICVzIHRyYW5zY2VpdmVyLCBDU1IxMiAlMDJ4XG4iLAorCQkJCSAgIG1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdLAorCQkJCSAgIGlvcmVhZDMyKGlvYWRkciArIENTUjEyKSk7CiAJfQogCiAJdHAtPmNzcjYgPSBuZXdfY3NyNiB8ICh0cC0+Y3NyNiAmIDB4ZmRmZikgfCAodHAtPmZ1bGxfZHVwbGV4ID8gMHgwMjAwIDogMCk7CkBAIC01MDQsOCArNTAzLDggQEAKIAogCQkvKiBGaXh1cCBmb3IgRExpbmsgd2l0aCBtaXN3aXJlZCBQSFkuICovCiAJCWlmIChtaWlfYWR2ZXJ0ICE9IHRvX2FkdmVydCkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgInR1bGlwJWQ6ICBBZHZlcnRpc2luZyAlMDR4IG9uIFBIWSAlZCwgcHJldmlvdXNseSBhZHZlcnRpc2luZyAlMDR4XG4iLAotCQkJICAgICAgIGJvYXJkX2lkeCwgdG9fYWR2ZXJ0LCBwaHksIG1paV9hZHZlcnQpOworCQkJcHJfZGVidWcoInR1bGlwJWQ6ICBBZHZlcnRpc2luZyAlMDR4IG9uIFBIWSAlZCwgcHJldmlvdXNseSBhZHZlcnRpc2luZyAlMDR4XG4iLAorCQkJCSBib2FyZF9pZHgsIHRvX2FkdmVydCwgcGh5LCBtaWlfYWR2ZXJ0KTsKIAkJCXR1bGlwX21kaW9fd3JpdGUgKGRldiwgcGh5LCA0LCB0b19hZHZlcnQpOwogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3BuaWMuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3BuaWMuYwppbmRleCBhNjNlNjRiLi5hYTRkOWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9wbmljLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvcG5pYy5jCkBAIC00MCw4ICs0MCw4IEBACiAJCQluZXdfY3NyNiB8PSAweDAwMDAwMjAwOwogCQl9CiAJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFBOSUMgYXV0b25lZ290aWF0ZWQgc3RhdHVzICUwOHgsICVzXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgcGh5X3JlZywgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0pOworCQkJbmV0ZGV2X2RiZyhkZXYsICJQTklDIGF1dG9uZWdvdGlhdGVkIHN0YXR1cyAlMDh4LCAlc1xuIiwKKwkJCQkgICBwaHlfcmVnLCBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSk7CiAJCWlmICh0cC0+Y3NyNiAhPSBuZXdfY3NyNikgewogCQkJdHAtPmNzcjYgPSBuZXdfY3NyNjsKIAkJCS8qIFJlc3RhcnQgVHggKi8KQEAgLTU4LDggKzU4LDggQEAKIAlpbnQgcGh5X3JlZyA9IGlvcmVhZDMyKGlvYWRkciArIDB4QjgpOwogCiAJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBQTklDIGxpbmsgY2hhbmdlZCBzdGF0ZSAlMDh4LCBDU1I1ICUwOHhcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHBoeV9yZWcsIGNzcjUpOworCQluZXRkZXZfZGJnKGRldiwgIlBOSUMgbGluayBjaGFuZ2VkIHN0YXRlICUwOHgsIENTUjUgJTA4eFxuIiwKKwkJCSAgIHBoeV9yZWcsIGNzcjUpOwogCWlmIChpb3JlYWQzMihpb2FkZHIgKyBDU1I1KSAmIFRQTG5rRmFpbCkgewogCQlpb3dyaXRlMzIoKGlvcmVhZDMyKGlvYWRkciArIENTUjcpICYgflRQTG5rRmFpbCkgfCBUUExua1Bhc3MsIGlvYWRkciArIENTUjcpOwogCQkvKiBJZiB3ZSB1c2UgYW4gZXh0ZXJuYWwgTUlJLCB0aGVuIHdlIG11c3RuJ3QgdXNlIHRoZQpAQCAtMTE0LDggKzExNCw4IEBACiAJCWludCBjc3I1ID0gaW9yZWFkMzIoaW9hZGRyICsgQ1NSNSk7CiAKIAkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogUE5JQyB0aW1lciBQSFkgc3RhdHVzICUwOHgsICVzIENTUjUgJTA4eFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIHBoeV9yZWcsIG1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdLCBjc3I1KTsKKwkJCW5ldGRldl9kYmcoZGV2LCAiUE5JQyB0aW1lciBQSFkgc3RhdHVzICUwOHgsICVzIENTUjUgJTA4eFxuIiwKKwkJCQkgICBwaHlfcmVnLCBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSwgY3NyNSk7CiAJCWlmIChwaHlfcmVnICYgMHgwNDAwMDAwMCkgewkvKiBSZW1vdGUgbGluayBmYXVsdCAqLwogCQkJaW93cml0ZTMyKDB4MDIwMUYwNzgsIGlvYWRkciArIDB4QjgpOwogCQkJbmV4dF90aWNrID0gMSpIWjsKQEAgLTEyNSwxMSArMTI1LDExIEBACiAJCQluZXh0X3RpY2sgPSA2MCpIWjsKIAkJfSBlbHNlIGlmIChjc3I1ICYgVFBMbmtGYWlsKSB7IC8qIDEwMGJhc2VUeCBsaW5rIGJlYXQgKi8KIAkJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAlcyBsaW5rIGJlYXQgZmFpbGVkLCBDU1IxMiAlMDR4LCBDU1I1ICUwOHgsIFBIWSAlMDN4XG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIG1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdLAotCQkJCSAgICAgICBjc3IxMiwKLQkJCQkgICAgICAgaW9yZWFkMzIoaW9hZGRyICsgQ1NSNSksCi0JCQkJICAgICAgIGlvcmVhZDMyKGlvYWRkciArIDB4QjgpKTsKKwkJCQluZXRkZXZfZGJnKGRldiwgIiVzIGxpbmsgYmVhdCBmYWlsZWQsIENTUjEyICUwNHgsIENTUjUgJTA4eCwgUEhZICUwM3hcbiIsCisJCQkJCSAgIG1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdLAorCQkJCQkgICBjc3IxMiwKKwkJCQkJICAgaW9yZWFkMzIoaW9hZGRyICsgQ1NSNSksCisJCQkJCSAgIGlvcmVhZDMyKGlvYWRkciArIDB4QjgpKTsKIAkJCW5leHRfdGljayA9IDMqSFo7CiAJCQlpZiAodHAtPm1lZGlhbG9jaykgewogCQkJfSBlbHNlIGlmICh0cC0+bndheXNldCAgJiYgIChkZXYtPmlmX3BvcnQgJiAxKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvcG5pYzIuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3BuaWMyLmMKaW5kZXggNDY5MGM4ZS4uOTMzNThlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvcG5pYzIuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9wbmljMi5jCkBAIC0xMjUsOCArMTI1LDggQEAKICAgICAgICAgY3NyMTQgfD0gMHgwMDAwMTE4NDsKIAogCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogUmVzdGFydGluZyBQTklDMiBhdXRvbmVnb3RpYXRpb24sIGNzcjE0PSUwOHhcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGNzcjE0KTsKKwkJbmV0ZGV2X2RiZyhkZXYsICJSZXN0YXJ0aW5nIFBOSUMyIGF1dG9uZWdvdGlhdGlvbiwgY3NyMTQ9JTA4eFxuIiwKKwkJCSAgIGNzcjE0KTsKIAogICAgICAgICAvKiB0ZWxsIHBuaWMyX2xua19jaGFuZ2Ugd2UgYXJlIGRvaW5nIGFuIG53YXkgbmVnb3RpYXRpb24gKi8KIAlkZXYtPmlmX3BvcnQgPSAwOwpAQCAtMTM3LDggKzEzNyw3IEBACiAKIAl0cC0+Y3NyNiA9IGlvcmVhZDMyKGlvYWRkciArIENTUjYpOwogCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogT24gRW50cnkgdG8gTndheSwgY3NyNj0lMDh4XG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCB0cC0+Y3NyNik7CisJCW5ldGRldl9kYmcoZGV2LCAiT24gRW50cnkgdG8gTndheSwgY3NyNj0lMDh4XG4iLCB0cC0+Y3NyNik7CiAKICAgICAgICAgLyogbWFzayBvZmYgYW55IGJpdHMgbm90IHRvIHRvdWNoCiAgICAgICAgICAqIGNvbW1lbnQgYXQgdG9wIG9mIGZpbGUgZXhwbGFpbnMgbWFzayB2YWx1ZQpAQCAtMjcxLDkgKzI3MCwxMCBAQAogCQkJaW93cml0ZTMyKDEsIGlvYWRkciArIENTUjEzKTsKIAogCQkJaWYgKHR1bGlwX2RlYnVnID4gMikKLQkJCSAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTZXR0aW5nIENTUjYgJTA4eC8leCBDU1IxMiAlMDh4XG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIHRwLT5jc3I2LAotCQkJCSAgICAgICBpb3JlYWQzMihpb2FkZHIgKyBDU1I2KSwgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTIpKTsKKwkJCQluZXRkZXZfZGJnKGRldiwgIlNldHRpbmcgQ1NSNiAlMDh4LyV4IENTUjEyICUwOHhcbiIsCisJCQkJCSAgIHRwLT5jc3I2LAorCQkJCQkgICBpb3JlYWQzMihpb2FkZHIgKyBDU1I2KSwKKwkJCQkJICAgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTIpKTsKIAogCQkJLyogbm93IHRoZSBmb2xsb3dpbmcgYWN0dWFsbHkgd3JpdGVzIG91dCB0aGUKIAkJCSAqIG5ldyBjc3I2IHZhbHVlcwpAQCAtMzI0LDcgKzMyNCw3IEBACiAJCS8qIExpbmsgYmxldz8gTWF5YmUgcmVzdGFydCBOV2F5LiAqLwogCiAJCWlmICh0dWxpcF9kZWJ1ZyA+IDIpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFVnaCEgTGluayBibGV3P1xuIiwgZGV2LT5uYW1lKTsKKwkJCW5ldGRldl9kYmcoZGV2LCAiVWdoISBMaW5rIGJsZXc/XG4iKTsKIAogCQlkZWxfdGltZXJfc3luYygmdHAtPnRpbWVyKTsKIAkJcG5pYzJfc3RhcnRfbndheShkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvdGltZXIuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3RpbWVyLmMKaW5kZXggMzZjMjcyNS4uMjAxN2ZhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvdGltZXIuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC90aW1lci5jCkBAIC0yOCwxMSArMjgsMTEgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKHR1bGlwX2RlYnVnID4gMikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE1lZGlhIHNlbGVjdGlvbiB0aWNrLCAlcywgc3RhdHVzICUwOHggbW9kZSAlMDh4IFNJQSAlMDh4ICUwOHggJTA4eCAlMDh4XG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSwKLQkJICAgICAgIGlvcmVhZDMyKGlvYWRkciArIENTUjUpLCBpb3JlYWQzMihpb2FkZHIgKyBDU1I2KSwKLQkJICAgICAgIGNzcjEyLCBpb3JlYWQzMihpb2FkZHIgKyBDU1IxMyksCi0JCSAgICAgICBpb3JlYWQzMihpb2FkZHIgKyBDU1IxNCksIGlvcmVhZDMyKGlvYWRkciArIENTUjE1KSk7CisJCW5ldGRldl9kYmcoZGV2LCAiTWVkaWEgc2VsZWN0aW9uIHRpY2ssICVzLCBzdGF0dXMgJTA4eCBtb2RlICUwOHggU0lBICUwOHggJTA4eCAlMDh4ICUwOHhcbiIsCisJCQkgICBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSwKKwkJCSAgIGlvcmVhZDMyKGlvYWRkciArIENTUjUpLCBpb3JlYWQzMihpb2FkZHIgKyBDU1I2KSwKKwkJCSAgIGNzcjEyLCBpb3JlYWQzMihpb2FkZHIgKyBDU1IxMyksCisJCQkgICBpb3JlYWQzMihpb2FkZHIgKyBDU1IxNCksIGlvcmVhZDMyKGlvYWRkciArIENTUjE1KSk7CiAJfQogCXN3aXRjaCAodHAtPmNoaXBfaWQpIHsKIAljYXNlIERDMjExNDA6CkBAIC00OCw5ICs0OCw5IEBACiAJCQkgICBBc3N1bWUgdGhpcyBhIGdlbmVyaWMgTUlJIG9yIFNZTSB0cmFuc2NlaXZlci4gKi8KIAkJCW5leHRfdGljayA9IDYwKkhaOwogCQkJaWYgKHR1bGlwX2RlYnVnID4gMikKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG5ldHdvcmsgbWVkaWEgbW9uaXRvciBDU1I2ICUwOHggQ1NSMTIgMHglMDJ4XG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsCi0JCQkJICAgICAgIGlvcmVhZDMyKGlvYWRkciArIENTUjYpLCBjc3IxMiAmIDB4ZmYpOworCQkJCW5ldGRldl9kYmcoZGV2LCAibmV0d29yayBtZWRpYSBtb25pdG9yIENTUjYgJTA4eCBDU1IxMiAweCUwMnhcbiIsCisJCQkJCSAgIGlvcmVhZDMyKGlvYWRkciArIENTUjYpLAorCQkJCQkgICBjc3IxMiAmIDB4ZmYpOwogCQkJYnJlYWs7CiAJCX0KIAkJbWxlYWYgPSAmdHAtPm10YWJsZS0+bWxlYWZbdHAtPmN1cl9pbmRleF07CkBAIC02Miw4ICs2Miw4IEBACiAJCQlzOCBiaXRudW0gPSBwW29mZnNldF07CiAJCQlpZiAocFtvZmZzZXQrMV0gJiAweDgwKSB7CiAJCQkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUcmFuc2NlaXZlciBtb25pdG9yIHRpY2sgQ1NSMTI9JSMwMngsIG5vIG1lZGlhIHNlbnNlXG4iLAotCQkJCQkgICAgICAgZGV2LT5uYW1lLCBjc3IxMik7CisJCQkJCW5ldGRldl9kYmcoZGV2LCAiVHJhbnNjZWl2ZXIgbW9uaXRvciB0aWNrIENTUjEyPSUjMDJ4LCBubyBtZWRpYSBzZW5zZVxuIiwKKwkJCQkJCSAgIGNzcjEyKTsKIAkJCQlpZiAobWxlYWYtPnR5cGUgPT0gNCkgewogCQkJCQlpZiAobWxlYWYtPm1lZGlhID09IDMgJiYgKGNzcjEyICYgMHgwMikpCiAJCQkJCQlnb3RvIHNlbGVjdF9uZXh0X21lZGlhOwpAQCAtNzEsMTcgKzcxLDE2IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlpZiAodHVsaXBfZGVidWcgPiAyKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogVHJhbnNjZWl2ZXIgbW9uaXRvciB0aWNrOiBDU1IxMj0lIzAyeCBiaXQgJWQgaXMgJWQsIGV4cGVjdGluZyAlZFxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lLCBjc3IxMiwgKGJpdG51bSA+PiAxKSAmIDcsCi0JCQkJICAgICAgIChjc3IxMiAmICgxIDw8ICgoYml0bnVtID4+IDEpICYgNykpKSAhPSAwLAotCQkJCSAgICAgICAoYml0bnVtID49IDApKTsKKwkJCQluZXRkZXZfZGJnKGRldiwgIlRyYW5zY2VpdmVyIG1vbml0b3IgdGljazogQ1NSMTI9JSMwMnggYml0ICVkIGlzICVkLCBleHBlY3RpbmcgJWRcbiIsCisJCQkJCSAgIGNzcjEyLCAoYml0bnVtID4+IDEpICYgNywKKwkJCQkJICAgKGNzcjEyICYgKDEgPDwgKChiaXRudW0gPj4gMSkgJiA3KSkpICE9IDAsCisJCQkJCSAgIChiaXRudW0gPj0gMCkpOwogCQkJLyogQ2hlY2sgdGhhdCB0aGUgc3BlY2lmaWVkIGJpdCBoYXMgdGhlIHByb3BlciB2YWx1ZS4gKi8KIAkJCWlmICgoYml0bnVtIDwgMCkgIT0KIAkJCQkoKGNzcjEyICYgKDEgPDwgKChiaXRudW0gPj4gMSkgJiA3KSkpICE9IDApKSB7CiAJCQkJaWYgKHR1bGlwX2RlYnVnID4gMikKLQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBMaW5rIGJlYXQgZGV0ZWN0ZWQgZm9yICVzXG4iLAotCQkJCQkgICAgICAgZGV2LT5uYW1lLAotCQkJCQkgICAgICAgbWVkaWFuYW1lW21sZWFmLT5tZWRpYSAmIE1FRElBX01BU0tdKTsKKwkJCQkJbmV0ZGV2X2RiZyhkZXYsICJMaW5rIGJlYXQgZGV0ZWN0ZWQgZm9yICVzXG4iLAorCQkJCQkJICAgbWVkaWFuYW1lW21sZWFmLT5tZWRpYSAmIE1FRElBX01BU0tdKTsKIAkJCQlpZiAoKHBbMl0gJiAweDYxKSA9PSAweDAxKQkvKiBCb2d1cyBabnl4IGJvYXJkLiAqLwogCQkJCQlnb3RvIGFjdHVhbGx5X21paTsKIAkJCQluZXRpZl9jYXJyaWVyX29uKGRldik7CkBAIC05OSwxMCArOTgsOSBAQAogCQkJaWYgKHR1bGlwX21lZGlhX2NhcFtkZXYtPmlmX3BvcnRdICYgTWVkaWFJc0ZEKQogCQkJCWdvdG8gc2VsZWN0X25leHRfbWVkaWE7IC8qIFNraXAgRkQgZW50cmllcy4gKi8KIAkJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBObyBsaW5rIGJlYXQgb24gbWVkaWEgJXMsIHRyeWluZyB0cmFuc2NlaXZlciB0eXBlICVzXG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsCi0JCQkJICAgICAgIG1lZGlhbmFtZVttbGVhZi0+bWVkaWEgJiBNRURJQV9NQVNLXSwKLQkJCQkgICAgICAgbWVkaWFuYW1lW3RwLT5tdGFibGUtPm1sZWFmW3RwLT5jdXJfaW5kZXhdLm1lZGlhXSk7CisJCQkJbmV0ZGV2X2RiZyhkZXYsICJObyBsaW5rIGJlYXQgb24gbWVkaWEgJXMsIHRyeWluZyB0cmFuc2NlaXZlciB0eXBlICVzXG4iLAorCQkJCQkgICBtZWRpYW5hbWVbbWxlYWYtPm1lZGlhICYgTUVESUFfTUFTS10sCisJCQkJCSAgIG1lZGlhbmFtZVt0cC0+bXRhYmxlLT5tbGVhZlt0cC0+Y3VyX2luZGV4XS5tZWRpYV0pOwogCQkJdHVsaXBfc2VsZWN0X21lZGlhKGRldiwgMCk7CiAJCQkvKiBSZXN0YXJ0IHRoZSB0cmFuc21pdCBwcm9jZXNzLiAqLwogCQkJdHVsaXBfcmVzdGFydF9yeHR4KHRwKTsKQEAgLTE2NiwxMCArMTY0LDkgQEAKIAlpbnQgbmV4dF90aWNrID0gNjAqSFo7CiAKIAlpZiAodHVsaXBfZGVidWcgPiAxKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IENvbWV0IGxpbmsgc3RhdHVzICUwNHggcGFydG5lciBjYXBhYmlsaXR5ICUwNHhcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsCi0JCSAgICAgICB0dWxpcF9tZGlvX3JlYWQoZGV2LCB0cC0+cGh5c1swXSwgMSksCi0JCSAgICAgICB0dWxpcF9tZGlvX3JlYWQoZGV2LCB0cC0+cGh5c1swXSwgNSkpOworCQluZXRkZXZfZGJnKGRldiwgIkNvbWV0IGxpbmsgc3RhdHVzICUwNHggcGFydG5lciBjYXBhYmlsaXR5ICUwNHhcbiIsCisJCQkgICB0dWxpcF9tZGlvX3JlYWQoZGV2LCB0cC0+cGh5c1swXSwgMSksCisJCQkgICB0dWxpcF9tZGlvX3JlYWQoZGV2LCB0cC0+cGh5c1swXSwgNSkpOwogCS8qIG1vZF90aW1lciBzeW5jaHJvbml6ZXMgdXMgd2l0aCBwb3RlbnRpYWwgYWRkX3RpbWVyIGNhbGxzCiAJICogZnJvbSBpbnRlcnJ1cHRzLgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXAuaCBiL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwLmgKaW5kZXggZWQ2NmExNi4uOWRiNTI4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXAuaAorKysgYi9kcml2ZXJzL25ldC90dWxpcC90dWxpcC5oCkBAIC01NDcsMTEgKzU0Nyw5IEBACiAJCQl1ZGVsYXkoMTApOwogCiAJCWlmICghaSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdHVsaXBfc3RvcF9yeHR4KCkgZmFpbGVkIgotCQkJCQkiIChDU1I1IDB4JXggQ1NSNiAweCV4KVxuIiwKLQkJCQkJcGNpX25hbWUodHAtPnBkZXYpLAotCQkJCQlpb3JlYWQzMihpb2FkZHIgKyBDU1I1KSwKLQkJCQkJaW9yZWFkMzIoaW9hZGRyICsgQ1NSNikpOworCQkJbmV0ZGV2X2RiZyh0cC0+ZGV2LCAidHVsaXBfc3RvcF9yeHR4KCkgZmFpbGVkIChDU1I1IDB4JXggQ1NSNiAweCV4KVxuIiwKKwkJCQkgICBpb3JlYWQzMihpb2FkZHIgKyBDU1I1KSwKKwkJCQkgICBpb3JlYWQzMihpb2FkZHIgKyBDU1I2KSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC90dWxpcF9jb3JlLmMgYi9kcml2ZXJzL25ldC90dWxpcC90dWxpcF9jb3JlLmMKaW5kZXggNWMwMWUyNi4uODJmODc2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXBfY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwX2NvcmUuYwpAQCAtMTIsNiArMTIsNyBAQAogCVBsZWFzZSBzdWJtaXQgYnVncyB0byBodHRwOi8vYnVnemlsbGEua2VybmVsLm9yZy8gLgogKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSAidHVsaXA6ICIgZm10CiAKICNkZWZpbmUgRFJWX05BTUUJInR1bGlwIgogI2lmZGVmIENPTkZJR19UVUxJUF9OQVBJCkBAIC0xMTksOCArMTIwLDYgQEAKIG1vZHVsZV9wYXJhbV9hcnJheShvcHRpb25zLCBpbnQsIE5VTEwsIDApOwogbW9kdWxlX3BhcmFtX2FycmF5KGZ1bGxfZHVwbGV4LCBpbnQsIE5VTEwsIDApOwogCi0jZGVmaW5lIFBGWCBEUlZfTkFNRSAiOiAiCi0KICNpZmRlZiBUVUxJUF9ERUJVRwogaW50IHR1bGlwX2RlYnVnID0gVFVMSVBfREVCVUc7CiAjZWxzZQpAQCAtMzMxLDggKzMzMCw3IEBACiAJdWRlbGF5KDEwMCk7CiAKIAlpZiAodHVsaXBfZGVidWcgPiAxKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHR1bGlwX3VwKCksIGlycT09JWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGRldi0+aXJxKTsKKwkJbmV0ZGV2X2RiZyhkZXYsICJ0dWxpcF91cCgpLCBpcnE9PSVkXG4iLCBkZXYtPmlycSk7CiAKIAlpb3dyaXRlMzIodHAtPnJ4X3JpbmdfZG1hLCBpb2FkZHIgKyBDU1IzKTsKIAlpb3dyaXRlMzIodHAtPnR4X3JpbmdfZG1hLCBpb2FkZHIgKyBDU1I0KTsKQEAgLTQ5OSwxMCArNDk3LDEwIEBACiAJaW93cml0ZTMyKDAsIGlvYWRkciArIENTUjIpOwkJLyogUnggcG9sbCBkZW1hbmQgKi8KIAogCWlmICh0dWxpcF9kZWJ1ZyA+IDIpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBEb25lIHR1bGlwX3VwKCksIENTUjAgJTA4eCwgQ1NSNSAlMDh4IENTUjYgJTA4eFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMCksCi0JCSAgICAgICBpb3JlYWQzMihpb2FkZHIgKyBDU1I1KSwKLQkJICAgICAgIGlvcmVhZDMyKGlvYWRkciArIENTUjYpKTsKKwkJbmV0ZGV2X2RiZyhkZXYsICJEb25lIHR1bGlwX3VwKCksIENTUjAgJTA4eCwgQ1NSNSAlMDh4IENTUjYgJTA4eFxuIiwKKwkJCSAgIGlvcmVhZDMyKGlvYWRkciArIENTUjApLAorCQkJICAgaW9yZWFkMzIoaW9hZGRyICsgQ1NSNSksCisJCQkgICBpb3JlYWQzMihpb2FkZHIgKyBDU1I2KSk7CiAJfQogCiAJLyogU2V0IHRoZSB0aW1lciB0byBzd2l0Y2ggdG8gY2hlY2sgZm9yIGxpbmsgYmVhdCBhbmQgcGVyaGFwcyBzd2l0Y2gKQEAgLTg0Myw4ICs4NDEsNyBAQAogCXR1bGlwX2Rvd24gKGRldik7CiAKIAlpZiAodHVsaXBfZGVidWcgPiAxKQotCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwKLQkJCSAgICJTaHV0dGluZyBkb3duIGV0aGVyY2FyZCwgc3RhdHVzIHdhcyAlMDJ4XG4iLAorCQluZXRkZXZfZGJnKGRldiwgIlNodXR0aW5nIGRvd24gZXRoZXJjYXJkLCBzdGF0dXMgd2FzICUwMnhcbiIsCiAJCQkgICBpb3JlYWQzMiAoaW9hZGRyICsgQ1NSNSkpOwogCiAJZnJlZV9pcnEgKGRldi0+aXJxLCBkZXYpOwpAQCAtMTIwNyw3ICsxMjA0LDcgQEAKIAl1MzIgY3NyMDsKIAogCWlmICh0dWxpcF9kZWJ1ZyA+IDMpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogdHVsaXBfbXdpX2NvbmZpZygpXG4iLCBwY2lfbmFtZShwZGV2KSk7CisJCW5ldGRldl9kYmcoZGV2LCAidHVsaXBfbXdpX2NvbmZpZygpXG4iKTsKIAogCXRwLT5jc3IwID0gY3NyMCA9IDA7CiAKQEAgLTEyNjksOCArMTI2Niw4IEBACiBvdXQ6CiAJdHAtPmNzcjAgPSBjc3IwOwogCWlmICh0dWxpcF9kZWJ1ZyA+IDIpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogTVdJIGNvbmZpZyBjYWNoZWxpbmU9JWQsIGNzcjA9JTA4eFxuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBkZXYpLCBjYWNoZSwgY3NyMCk7CisJCW5ldGRldl9kYmcoZGV2LCAiTVdJIGNvbmZpZyBjYWNoZWxpbmU9JWQsIGNzcjA9JTA4eFxuIiwKKwkJCSAgIGNhY2hlLCBjc3IwKTsKIH0KICNlbmRpZgogCkBAIC0xMzQwLDEzICsxMzM3LDEzIEBACiAJICovCiAKICAgICAgICAgaWYgKHBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9MTUMpIHsKLQkJcHJfZXJyKFBGWCAic2tpcHBpbmcgTE1DIGNhcmRcbiIpOworCQlwcl9lcnIoInNraXBwaW5nIExNQyBjYXJkXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfSBlbHNlIGlmIChwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IFBDSV9WRU5ET1JfSURfU0JFICYmCiAJCSAgIChwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IFBDSV9TVUJERVZJQ0VfSURfU0JFX1QzRTMgfHwKIAkJICAgIHBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gUENJX1NVQkRFVklDRV9JRF9TQkVfMlQzRTNfUDAgfHwKIAkJICAgIHBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gUENJX1NVQkRFVklDRV9JRF9TQkVfMlQzRTNfUDEpKSB7Ci0JCXByX2VycihQRlggInNraXBwaW5nIFNCRSBUM0UzIHBvcnRcbiIpOworCQlwcl9lcnIoInNraXBwaW5nIFNCRSBUM0UzIHBvcnRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTEzNjIsMTMgKzEzNTksMTMgQEAKIAogCQlpZiAocGRldi0+dmVuZG9yID09IDB4MTI4MiAmJiBwZGV2LT5kZXZpY2UgPT0gMHg5MTAwICYmCiAJCSAgICBwZGV2LT5yZXZpc2lvbiA8IDB4MzApIHsKLQkJCXByX2luZm8oUEZYICJza2lwcGluZyBlYXJseSBETTkxMDAgd2l0aCBDcmMgYnVnICh1c2UgZG1mZSlcbiIpOworCQkJcHJfaW5mbygic2tpcHBpbmcgZWFybHkgRE05MTAwIHdpdGggQ3JjIGJ1ZyAodXNlIGRtZmUpXG4iKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAKIAkJZHAgPSBwY2lfZGV2aWNlX3RvX09GX25vZGUocGRldik7CiAJCWlmICghKGRwICYmIG9mX2dldF9wcm9wZXJ0eShkcCwgImxvY2FsLW1hYy1hZGRyZXNzIiwgTlVMTCkpKSB7Ci0JCQlwcl9pbmZvKFBGWCAic2tpcHBpbmcgRE05MTB4IGV4cGFuc2lvbiBjYXJkICh1c2UgZG1mZSlcbiIpOworCQkJcHJfaW5mbygic2tpcHBpbmcgRE05MTB4IGV4cGFuc2lvbiBjYXJkICh1c2UgZG1mZSlcbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9CkBAIC0xNDE1LDE2ICsxNDEyLDE0IEBACiAKIAlpID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKGkpIHsKLQkJcHJfZXJyKFBGWCAiQ2Fubm90IGVuYWJsZSB0dWxpcCBib2FyZCAjJWQsIGFib3J0aW5nXG4iLAotCQkgICAgICAgYm9hcmRfaWR4KTsKKwkJcHJfZXJyKCJDYW5ub3QgZW5hYmxlIHR1bGlwIGJvYXJkICMlZCwgYWJvcnRpbmdcbiIsIGJvYXJkX2lkeCk7CiAJCXJldHVybiBpOwogCX0KIAogCS8qIFRoZSBjaGlwIHdpbGwgZmFpbCB0byBlbnRlciBhIGxvdy1wb3dlciBzdGF0ZSBsYXRlciB1bmxlc3MKIAkgKiBmaXJzdCBleHBsaWNpdGx5IGNvbW1hbmRlZCBpbnRvIEQwICovCiAJaWYgKHBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKSkgewotCQlwcmludGsgKEtFUk5fTk9USUNFIFBGWAotCQkJIkZhaWxlZCB0byBzZXQgcG93ZXIgc3RhdGUgdG8gRDBcbiIpOworCQlwcl9ub3RpY2UoIkZhaWxlZCB0byBzZXQgcG93ZXIgc3RhdGUgdG8gRDBcbiIpOwogCX0KIAogCWlycSA9IHBkZXYtPmlycTsKQEAgLTE0MzIsMTMgKzE0MjcsMTMgQEAKIAkvKiBhbGxvY19ldGhlcmRldiBlbnN1cmVzIGFsaWduZWQgYW5kIHplcm9lZCBwcml2YXRlIHN0cnVjdHVyZXMgKi8KIAlkZXYgPSBhbGxvY19ldGhlcmRldiAoc2l6ZW9mICgqdHApKTsKIAlpZiAoIWRldikgewotCQlwcl9lcnIoUEZYICJldGhlciBkZXZpY2UgYWxsb2MgZmFpbGVkLCBhYm9ydGluZ1xuIik7CisJCXByX2VycigiZXRoZXIgZGV2aWNlIGFsbG9jIGZhaWxlZCwgYWJvcnRpbmdcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwogCWlmIChwY2lfcmVzb3VyY2VfbGVuIChwZGV2LCAwKSA8IHR1bGlwX3RibFtjaGlwX2lkeF0uaW9fc2l6ZSkgewotCQlwcl9lcnIoUEZYICIlczogSS9PIHJlZ2lvbiAoMHglbGx4QDB4JWxseCkgdG9vIHNtYWxsLCBhYm9ydGluZ1xuIiwKKwkJcHJfZXJyKCIlczogSS9PIHJlZ2lvbiAoMHglbGx4QDB4JWxseCkgdG9vIHNtYWxsLCBhYm9ydGluZ1xuIiwKIAkJICAgICAgIHBjaV9uYW1lKHBkZXYpLAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2VfbGVuIChwZGV2LCAwKSwKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0IChwZGV2LCAwKSk7CkBAIC0xNDgzLDcgKzE0NzgsOCBAQAogCQlpZiAoc2lnID09IDB4MDk4MTEzMTcpIHsKIAkJCXRwLT5mbGFncyB8PSBDT01FVF9QTTsKIAkJCXRwLT53b2xpbmZvLnN1cHBvcnRlZCA9IFdBS0VfUEhZIHwgV0FLRV9NQUdJQzsKLQkJCXByaW50ayhLRVJOX0lORk8gInR1bGlwX2luaXRfb25lOiBFbmFibGVkIFdPTCBzdXBwb3J0IGZvciBBTjk4M0JcbiIpOworCQkJcHJfaW5mbygiJXM6IEVuYWJsZWQgV09MIHN1cHBvcnQgZm9yIEFOOTgzQlxuIiwKKwkJCQlfX2Z1bmNfXyk7CiAJCX0KIAl9CiAJdHAtPnBkZXYgPSBwZGV2OwpAQCAtMTg3OSw3ICsxODc1LDcgQEAKIAkJdHVsaXBfc2V0X3dvbG9wdHMocGRldiwgdHAtPndvbGluZm8ud29sb3B0cyk7CiAJCXJjID0gcGNpX2VuYWJsZV93YWtlKHBkZXYsIHBzdGF0ZSwgdHAtPndvbGluZm8ud29sb3B0cyk7CiAJCWlmIChyYykKLQkJCXByaW50aygidHVsaXA6IHBjaV9lbmFibGVfd2FrZSBmYWlsZWQgKCVkKVxuIiwgcmMpOworCQkJcHJfZXJyKCJwY2lfZW5hYmxlX3dha2UgZmFpbGVkICglZClcbiIsIHJjKTsKIAl9CiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBwc3RhdGUpOwogCkBAIC0xOTA1LDEyICsxOTAxLDEyIEBACiAJCXJldHVybiAwOwogCiAJaWYgKChyZXR2YWwgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KSkpIHsKLQkJcHJfZXJyKFBGWCAicGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkIGluIHJlc3VtZVxuIik7CisJCXByX2VycigicGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkIGluIHJlc3VtZVxuIik7CiAJCXJldHVybiByZXR2YWw7CiAJfQogCiAJaWYgKChyZXR2YWwgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgdHVsaXBfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpKSkgewotCQlwcl9lcnIoUEZYICJyZXF1ZXN0X2lycSBmYWlsZWQgaW4gcmVzdW1lXG4iKTsKKwkJcHJfZXJyKCJyZXF1ZXN0X2lycSBmYWlsZWQgaW4gcmVzdW1lXG4iKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3VsaTUyNnguYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3VsaTUyNnguYwppbmRleCA3NDIxN2RiLi45ZTYzZjQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC91bGk1MjZ4LmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvdWxpNTI2eC5jCkBAIC0yMDksOCArMjA5LDcgQEAKIC8qIEdsb2JhbCB2YXJpYWJsZSBkZWNsYXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogc3RhdGljIGludCBfX2RldmluaXRkYXRhIHByaW50ZWRfdmVyc2lvbjsKIHN0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9Ci0JS0VSTl9JTkZPIERSVl9OQU1FICI6IFVMaSBNNTI2MS9NNTI2MyBuZXQgZHJpdmVyLCB2ZXJzaW9uICIKLQlEUlZfVkVSU0lPTiAiICgiIERSVl9SRUxEQVRFICIpXG4iOworCSJVTGkgTTUyNjEvTTUyNjMgbmV0IGRyaXZlciwgdmVyc2lvbiAiIERSVl9WRVJTSU9OICIgKCIgRFJWX1JFTERBVEUgIikiOwogCiBzdGF0aWMgaW50IHVsaTUyNnhfZGVidWc7CiBzdGF0aWMgdW5zaWduZWQgY2hhciB1bGk1MjZ4X21lZGlhX21vZGUgPSBVTEk1MjZYX0FVVE87CkBAIC0yODMsNyArMjgyLDcgQEAKIAlVTEk1MjZYX0RCVUcoMCwgInVsaTUyNnhfaW5pdF9vbmUoKSIsIDApOwogCiAJaWYgKCFwcmludGVkX3ZlcnNpb24rKykKLQkJcHJpbnRrKHZlcnNpb24pOworCQlwcl9pbmZvKCIlc1xuIiwgdmVyc2lvbik7CiAKIAkvKiBJbml0IG5ldHdvcmsgZGV2aWNlICovCiAJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKCpkYikpOwpAQCAtMjkyLDcgKzI5MSw3IEBACiAJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAogCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpKSB7Ci0JCXByX3dhcm5pbmcoIjMyLWJpdCBQQ0kgRE1BIG5vdCBhdmFpbGFibGVcbiIpOworCQlwcl93YXJuKCIzMi1iaXQgUENJIERNQSBub3QgYXZhaWxhYmxlXG4iKTsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBlcnJfb3V0X2ZyZWU7CiAJfQpAQCAtMzkwLDkgKzM4OSw5IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0X3JlczsKIAotCWRldl9pbmZvKCZkZXYtPmRldiwgIlVMaSBNJTA0bHggYXQgcGNpJXMsICVwTSwgaXJxICVkXG4iLAotCQkgZW50LT5kcml2ZXJfZGF0YSA+PiAxNiwgcGNpX25hbWUocGRldiksCi0JCSBkZXYtPmRldl9hZGRyLCBkZXYtPmlycSk7CisJbmV0ZGV2X2luZm8oZGV2LCAiVUxpIE0lMDRseCBhdCBwY2klcywgJXBNLCBpcnEgJWRcbiIsCisJCSAgICBlbnQtPmRyaXZlcl9kYXRhID4+IDE2LCBwY2lfbmFtZShwZGV2KSwKKwkJICAgIGRldi0+ZGV2X2FkZHIsIGRldi0+aXJxKTsKIAogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCkBAIC01MjQsNyArNTIzLDcgQEAKIAkJfQogCX0KIAlpZihwaHlfdG1wID09IDMyKQotCQlwcl93YXJuaW5nKCJDYW4gbm90IGZpbmQgdGhlIHBoeSBhZGRyZXNzISEhIik7CisJCXByX3dhcm4oIkNhbiBub3QgZmluZCB0aGUgcGh5IGFkZHJlc3MhISFcbiIpOwogCS8qIFBhcnNlciBTUk9NIGFuZCBtZWRpYSBtb2RlICovCiAJZGItPm1lZGlhX21vZGUgPSB1bGk1MjZ4X21lZGlhX21vZGU7CiAKQEAgLTU5MCw3ICs1ODksNyBAQAogCiAJLyogVG9vIGxhcmdlIHBhY2tldCBjaGVjayAqLwogCWlmIChza2ItPmxlbiA+IE1BWF9QQUNLRVRfU0laRSkgewotCQlwcl9lcnIoImJpZyBwYWNrZXQgPSAlZFxuIiwgKHUxNilza2ItPmxlbik7CisJCW5ldGRldl9lcnIoZGV2LCAiYmlnIHBhY2tldCA9ICVkXG4iLCAodTE2KXNrYi0+bGVuKTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KQEAgLTYwMCw3ICs1OTksNyBAQAogCS8qIE5vIFR4IHJlc291cmNlIGNoZWNrLCBpdCBuZXZlciBoYXBwZW4gbnJvbWFsbHkgKi8KIAlpZiAoZGItPnR4X3BhY2tldF9jbnQgPj0gVFhfRlJFRV9ERVNDX0NOVCkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYi0+bG9jaywgZmxhZ3MpOwotCQlwcl9lcnIoIk5vIFR4IHJlc291cmNlICVsZFxuIiwgZGItPnR4X3BhY2tldF9jbnQpOworCQluZXRkZXZfZXJyKGRldiwgIk5vIFR4IHJlc291cmNlICVsZFxuIiwgZGItPnR4X3BhY2tldF9jbnQpOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCkBAIC02NjcsMTUgKzY2Niw2IEBACiAJLyogZnJlZSBhbGxvY2F0ZWQgcnggYnVmZmVyICovCiAJdWxpNTI2eF9mcmVlX3J4YnVmZmVyKGRiKTsKIAotI2lmIDAKLQkvKiBzaG93IHN0YXRpc3RpYyBjb3VudGVyICovCi0JcHJpbnRrKERSVl9OQU1FICI6IEZVOiVseCBFQzolbHggTEM6JWx4IE5DOiVseCBMT0M6JWx4IFRYSlQ6JWx4IFJFU0VUOiVseCBSQ1I4OiVseCBGQUw6JWx4IFRUOiVseFxuIiwKLQkJZGItPnR4X2ZpZm9fdW5kZXJydW4sIGRiLT50eF9leGNlc3NpdmVfY29sbGlzaW9uLAotCQlkYi0+dHhfbGF0ZV9jb2xsaXNpb24sIGRiLT50eF9ub19jYXJyaWVyLCBkYi0+dHhfbG9zc19jYXJyaWVyLAotCQlkYi0+dHhfamFiYmVyX3RpbWVvdXQsIGRiLT5yZXNldF9jb3VudCwgZGItPnJlc2V0X2NyOCwKLQkJZGItPnJlc2V0X2ZhdGFsLCBkYi0+cmVzZXRfVFh0aW1lb3V0KTsKLSNlbmRpZgotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc1NSw3ICs3NDUsNiBAQAogCXR4cHRyID0gZGItPnR4X3JlbW92ZV9wdHI7CiAJd2hpbGUoZGItPnR4X3BhY2tldF9jbnQpIHsKIAkJdGRlczAgPSBsZTMyX3RvX2NwdSh0eHB0ci0+dGRlczApOwotCQkvKiBwcmludGsoRFJWX05BTUUgIjogdGRlczA9JXhcbiIsIHRkZXMwKTsgKi8KIAkJaWYgKHRkZXMwICYgMHg4MDAwMDAwMCkKIAkJCWJyZWFrOwogCkBAIC03NjUsNyArNzU0LDYgQEAKIAogCQkvKiBUcmFuc21pdCBzdGF0aXN0aWMgY291bnRlciAqLwogCQlpZiAoIHRkZXMwICE9IDB4N2ZmZmZmZmYgKSB7Ci0JCQkvKiBwcmludGsoRFJWX05BTUUgIjogdGRlczA9JXhcbiIsIHRkZXMwKTsgKi8KIAkJCWRldi0+c3RhdHMuY29sbGlzaW9ucyArPSAodGRlczAgPj4gMykgJiAweGY7CiAJCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IGxlMzJfdG9fY3B1KHR4cHRyLT50ZGVzMSkgJiAweDdmZjsKIAkJCWlmICh0ZGVzMCAmIFRERVMwX0VSUl9NQVNLKSB7CkBAIC04MzgsNyArODI2LDYgQEAKIAkJCS8qIGVycm9yIHN1bW1hcnkgYml0IGNoZWNrICovCiAJCQlpZiAocmRlczAgJiAweDgwMDApIHsKIAkJCQkvKiBUaGlzIGlzIGEgZXJyb3IgcGFja2V0ICovCi0JCQkJLy9wcmludGsoRFJWX05BTUUgIjogcmRlczA6ICVseFxuIiwgcmRlczApOwogCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQkJaWYgKHJkZXMwICYgMSkKIAkJCQkJZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOwpAQCAtOTQ1LDEyICs5MzIsMTIgQEAKIAogCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9FWFRFUk5BTDsKIAotCWVjbWQtPnNwZWVkID0gMTA7CisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIFNQRUVEXzEwKTsKIAllY21kLT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKIAogCWlmKGRiLT5vcF9tb2RlPT1VTEk1MjZYXzEwME1IRiB8fCBkYi0+b3BfbW9kZT09VUxJNTI2WF8xMDBNRkQpCiAJewotCQllY21kLT5zcGVlZCA9IDEwMDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIFNQRUVEXzEwMCk7CiAJfQogCWlmKGRiLT5vcF9tb2RlPT1VTEk1MjZYXzEwTUZEIHx8IGRiLT5vcF9tb2RlPT1VTEk1MjZYXzEwME1GRCkKIAl7CkBAIC05NTgsNyArOTQ1LDcgQEAKIAl9CiAJaWYoZGItPmxpbmtfZmFpbGVkKQogCXsKLQkJZWNtZC0+c3BlZWQgPSAtMTsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIC0xKTsKIAkJZWNtZC0+ZHVwbGV4ID0gLTE7CiAJfQogCkBAIC0xMDI0LDcgKzEwMTEsNiBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGF0YTsKIAlzdHJ1Y3QgdWxpNTI2eF9ib2FyZF9pbmZvICpkYiA9IG5ldGRldl9wcml2KGRldik7CiAgCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTggVG1wU3BlZWQ9MTA7CiAKIAkvL1VMSTUyNlhfREJVRygwLCAidWxpNTI2eF90aW1lcigpIiwgMCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRiLT5sb2NrLCBmbGFncyk7CkBAIC0xMDQ3LDggKzEwMzMsNyBAQAogCQlpZiAoIHRpbWVfYWZ0ZXIoamlmZmllcywgZGV2X3RyYW5zX3N0YXJ0KGRldikgKyBVTEk1MjZYX1RYX1RJTUVPVVQpICkgewogCQkJZGItPnJlc2V0X1RYdGltZW91dCsrOwogCQkJZGItPndhaXRfcmVzZXQgPSAxOwotCQkJcHJpbnRrKCAiJXM6IFR4IHRpbWVvdXQgLSByZXNldHRpbmdcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCW5ldGRldl9lcnIoZGV2LCAiIFR4IHRpbWVvdXQgLSByZXNldHRpbmdcbiIpOwogCQl9CiAJfQogCkBAIC0xMDcwLDcgKzEwNTUsNyBAQAogCQkvKiBMaW5rIEZhaWxlZCAqLwogCQlVTEk1MjZYX0RCVUcoMCwgIkxpbmsgRmFpbGVkIiwgdG1wX2NyMTIpOwogCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotCQlwcl9pbmZvKCIlcyBOSUMgTGluayBpcyBEb3duXG4iLGRldi0+bmFtZSk7CisJCW5ldGRldl9pbmZvKGRldiwgIk5JQyBMaW5rIGlzIERvd25cbiIpOwogCQlkYi0+bGlua19mYWlsZWQgPSAxOwogCiAJCS8qIEZvciBGb3JjZSAxMC8xMDBNIEhhbGYvRnVsbCBtb2RlOiBFbmFibGUgQXV0by1OZWdvIG1vZGUgKi8KQEAgLTEwOTYsMTggKzEwODEsMTMgQEAKIAogCQkJaWYoZGItPmxpbmtfZmFpbGVkPT0wKQogCQkJewotCQkJCWlmKGRiLT5vcF9tb2RlPT1VTEk1MjZYXzEwME1IRiB8fCBkYi0+b3BfbW9kZT09VUxJNTI2WF8xMDBNRkQpCi0JCQkJewotCQkJCQlUbXBTcGVlZCA9IDEwMDsKLQkJCQl9Ci0JCQkJaWYoZGItPm9wX21vZGU9PVVMSTUyNlhfMTBNRkQgfHwgZGItPm9wX21vZGU9PVVMSTUyNlhfMTAwTUZEKQotCQkJCXsKLQkJCQkJcHJfaW5mbygiJXMgTklDIExpbmsgaXMgVXAgJWQgTWJwcyBGdWxsIGR1cGxleFxuIixkZXYtPm5hbWUsVG1wU3BlZWQpOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJewotCQkJCQlwcl9pbmZvKCIlcyBOSUMgTGluayBpcyBVcCAlZCBNYnBzIEhhbGYgZHVwbGV4XG4iLGRldi0+bmFtZSxUbXBTcGVlZCk7Ci0JCQkJfQorCQkJCW5ldGRldl9pbmZvKGRldiwgIk5JQyBMaW5rIGlzIFVwICVkIE1icHMgJXMgZHVwbGV4XG4iLAorCQkJCQkgICAgKGRiLT5vcF9tb2RlID09IFVMSTUyNlhfMTAwTUhGIHx8CisJCQkJCSAgICAgZGItPm9wX21vZGUgPT0gVUxJNTI2WF8xMDBNRkQpCisJCQkJCSAgICA/IDEwMCA6IDEwLAorCQkJCQkgICAgKGRiLT5vcF9tb2RlID09IFVMSTUyNlhfMTBNRkQgfHwKKwkJCQkJICAgICBkYi0+b3BfbW9kZSA9PSBVTEk1MjZYXzEwME1GRCkKKwkJCQkJICAgID8gIkZ1bGwiIDogIkhhbGYiKTsKIAkJCQluZXRpZl9jYXJyaWVyX29uKGRldik7CiAJCQl9CiAJCQkvKiBTSE9XX01FRElBX1RZUEUoZGItPm9wX21vZGUpOyAqLwpAQCAtMTExNiw3ICsxMDk2LDcgQEAKIAkJewogCQkJaWYoZGItPmluaXQ9PTEpCiAJCQl7Ci0JCQkJcHJfaW5mbygiJXMgTklDIExpbmsgaXMgRG93blxuIixkZXYtPm5hbWUpOworCQkJCW5ldGRldl9pbmZvKGRldiwgIk5JQyBMaW5rIGlzIERvd25cbiIpOwogCQkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiAJCQl9CiAJCX0KQEAgLTEyNDIsNyArMTIyMiw3IEBACiAKIAllcnIgPSBwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CiAJaWYgKGVycikgewotCQlkZXZfd2FybigmZGV2LT5kZXYsICJDb3VsZCBub3QgcHV0IGRldmljZSBpbnRvIEQwXG4iKTsKKwkJbmV0ZGV2X3dhcm4oZGV2LCAiQ291bGQgbm90IHB1dCBkZXZpY2UgaW50byBEMFxuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC0xNDQzLDcgKzE0MjMsNyBAQAogCQl1cGRhdGVfY3I2KGRiLT5jcjZfZGF0YSwgZGV2LT5iYXNlX2FkZHIpOwogCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAl9IGVsc2UKLQkJcHJfZXJyKCJObyBUeCByZXNvdXJjZSAtIFNlbmRfZmlsdGVyX2ZyYW1lIVxuIik7CisJCW5ldGRldl9lcnIoZGV2LCAiTm8gVHggcmVzb3VyY2UgLSBTZW5kX2ZpbHRlcl9mcmFtZSFcbiIpOwogfQogCiAKQEAgLTE1NDAsNyArMTUyMCw2IEBACiAJCWVsc2UKIAkJCXBoeV9tb2RlID0gMHgxMDAwOwogCi0JCS8qIHByaW50ayhEUlZfTkFNRSAiOiBQaHlfbW9kZSAleCAiLHBoeV9tb2RlKTsgKi8KIAkJc3dpdGNoIChwaHlfbW9kZSkgewogCQljYXNlIDB4MTAwMDogZGItPm9wX21vZGUgPSBVTEk1MjZYXzEwTUhGOyBicmVhazsKIAkJY2FzZSAweDIwMDA6IGRiLT5vcF9tb2RlID0gVUxJNTI2WF8xME1GRDsgYnJlYWs7CkBAIC0xODI5LDcgKzE4MDgsNyBAQAogc3RhdGljIGludCBfX2luaXQgdWxpNTI2eF9pbml0X21vZHVsZSh2b2lkKQogewogCi0JcHJpbnRrKHZlcnNpb24pOworCXByX2luZm8oIiVzXG4iLCB2ZXJzaW9uKTsKIAlwcmludGVkX3ZlcnNpb24gPSAxOwogCiAJVUxJNTI2WF9EQlVHKDAsICJpbml0X21vZHVsZSgpICIsIGRlYnVnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMgYi9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jCmluZGV4IGYwYjIzMTAuLjg2MmVhZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvd2luYm9uZC04NDAuYwpAQCAtNDQsNiArNDQsOCBAQAogCSogV2FrZS1Pbi1MQU4KICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2RlZmluZSBEUlZfTkFNRQkid2luYm9uZC04NDAiCiAjZGVmaW5lIERSVl9WRVJTSU9OCSIxLjAxLWUiCiAjZGVmaW5lIERSVl9SRUxEQVRFCSJTZXAtMTEtMjAwNiIKQEAgLTEzOSw3ICsxNDEsNyBAQAogCiAvKiBUaGVzZSBpZGVudGlmeSB0aGUgZHJpdmVyIGJhc2UgdmVyc2lvbiBhbmQgbWF5IG5vdCBiZSByZW1vdmVkLiAqLwogc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9faW5pdGNvbnN0ID0KLQlLRVJOX0lORk8gRFJWX05BTUUgIi5jOnYiIERSVl9WRVJTSU9OICIgKDIuNCBwb3J0KSAiCisJInYiIERSVl9WRVJTSU9OICIgKDIuNCBwb3J0KSAiCiAJRFJWX1JFTERBVEUgIiAgRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT5cbiIKIAkiICBodHRwOi8vd3d3LnNjeWxkLmNvbS9uZXR3b3JrL2RyaXZlcnMuaHRtbFxuIjsKIApAQCAtMzc1LDggKzM3Nyw4IEBACiAJaXJxID0gcGRldi0+aXJxOwogCiAJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkpIHsKLQkJcHJfd2FybmluZygiV2luYm9uZC04NDA6IERldmljZSAlcyBkaXNhYmxlZCBkdWUgdG8gRE1BIGxpbWl0YXRpb25zXG4iLAotCQkJICAgcGNpX25hbWUocGRldikpOworCQlwcl93YXJuKCJEZXZpY2UgJXMgZGlzYWJsZWQgZHVlIHRvIERNQSBsaW1pdGF0aW9uc1xuIiwKKwkJCXBjaV9uYW1lKHBkZXYpKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZigqbnApKTsKQEAgLTY0Myw4ICs2NDUsNyBAQAogCQlnb3RvIG91dF9lcnI7CiAKIAlpZiAoZGVidWcgPiAxKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHc4OWM4NDBfb3BlbigpIGlycSAlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZGV2LT5pcnEpOworCQluZXRkZXZfZGJnKGRldiwgInc4OWM4NDBfb3BlbigpIGlycSAlZFxuIiwgZGV2LT5pcnEpOwogCiAJaWYoKGk9YWxsb2NfcmluZ2Rlc2MoZGV2KSkpCiAJCWdvdG8gb3V0X2VycjsKQEAgLTY1Niw3ICs2NTcsNyBAQAogCiAJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIAlpZiAoZGVidWcgPiAyKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IERvbmUgbmV0ZGV2X29wZW4oKVxuIiwgZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2RiZyhkZXYsICJEb25lIG5ldGRldl9vcGVuKClcbiIpOwogCiAJLyogU2V0IHRoZSB0aW1lciB0byBjaGVjayBmb3IgbGluayBiZWF0LiAqLwogCWluaXRfdGltZXIoJm5wLT50aW1lcik7CkBAIC03ODUsOSArNzg2LDkgQEAKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IG5wLT5iYXNlX2FkZHI7CiAKIAlpZiAoZGVidWcgPiAyKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE1lZGlhIHNlbGVjdGlvbiB0aW1lciB0aWNrLCBzdGF0dXMgJTA4eCBjb25maWcgJTA4eFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgaW9yZWFkMzIoaW9hZGRyICsgSW50clN0YXR1cyksCi0JCSAgICAgICBpb3JlYWQzMihpb2FkZHIgKyBOZXR3b3JrQ29uZmlnKSk7CisJCW5ldGRldl9kYmcoZGV2LCAiTWVkaWEgc2VsZWN0aW9uIHRpbWVyIHRpY2ssIHN0YXR1cyAlMDh4IGNvbmZpZyAlMDh4XG4iLAorCQkJICAgaW9yZWFkMzIoaW9hZGRyICsgSW50clN0YXR1cyksCisJCQkgICBpb3JlYWQzMihpb2FkZHIgKyBOZXR3b3JrQ29uZmlnKSk7CiAJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOwogCXVwZGF0ZV9jc3I2KGRldiwgdXBkYXRlX2xpbmsoZGV2KSk7CiAJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CkBAIC0xMDU0LDggKzEwNTUsOCBAQAogCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwogCiAJaWYgKGRlYnVnID4gNCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFRyYW5zbWl0IGZyYW1lICMlZCBxdWV1ZWQgaW4gc2xvdCAlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgbnAtPmN1cl90eCwgZW50cnkpOworCQluZXRkZXZfZGJnKGRldiwgIlRyYW5zbWl0IGZyYW1lICMlZCBxdWV1ZWQgaW4gc2xvdCAlZFxuIiwKKwkJCSAgIG5wLT5jdXJfdHgsIGVudHJ5KTsKIAl9CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KQEAgLTEwNzIsOCArMTA3Myw4IEBACiAJCWlmICh0eF9zdGF0dXMgJiAweDgwMDApIHsgCS8qIFRoZXJlIHdhcyBhbiBlcnJvciwgbG9nIGl0LiAqLwogI2lmbmRlZiBmaW5hbF92ZXJzaW9uCiAJCQlpZiAoZGVidWcgPiAxKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogVHJhbnNtaXQgZXJyb3IsIFR4IHN0YXR1cyAlMDh4XG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIHR4X3N0YXR1cyk7CisJCQkJbmV0ZGV2X2RiZyhkZXYsICJUcmFuc21pdCBlcnJvciwgVHggc3RhdHVzICUwOHhcbiIsCisJCQkJCSAgIHR4X3N0YXR1cyk7CiAjZW5kaWYKIAkJCW5wLT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJCWlmICh0eF9zdGF0dXMgJiAweDAxMDQpIG5wLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwpAQCAtMTA4NSw4ICsxMDg2LDggQEAKIAkJfSBlbHNlIHsKICNpZm5kZWYgZmluYWxfdmVyc2lvbgogCQkJaWYgKGRlYnVnID4gMykKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFRyYW5zbWl0IHNsb3QgJWQgb2ssIFR4IHN0YXR1cyAlMDh4XG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIGVudHJ5LCB0eF9zdGF0dXMpOworCQkJCW5ldGRldl9kYmcoZGV2LCAiVHJhbnNtaXQgc2xvdCAlZCBvaywgVHggc3RhdHVzICUwOHhcbiIsCisJCQkJCSAgIGVudHJ5LCB0eF9zdGF0dXMpOwogI2VuZGlmCiAJCQlucC0+c3RhdHMudHhfYnl0ZXMgKz0gbnAtPnR4X3NrYnVmZltlbnRyeV0tPmxlbjsKIAkJCW5wLT5zdGF0cy5jb2xsaXNpb25zICs9ICh0eF9zdGF0dXMgPj4gMykgJiAxNTsKQEAgLTExMjksOCArMTEzMCw3IEBACiAJCWlvd3JpdGUzMihpbnRyX3N0YXR1cyAmIDB4MDAxZmZmZiwgaW9hZGRyICsgSW50clN0YXR1cyk7CiAKIAkJaWYgKGRlYnVnID4gNCkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogSW50ZXJydXB0LCBzdGF0dXMgJTA0eFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGludHJfc3RhdHVzKTsKKwkJCW5ldGRldl9kYmcoZGV2LCAiSW50ZXJydXB0LCBzdGF0dXMgJTA0eFxuIiwgaW50cl9zdGF0dXMpOwogCiAJCWlmICgoaW50cl9zdGF0dXMgJiAoTm9ybWFsSW50cnxBYm5vcm1hbEludHIpKSA9PSAwKQogCQkJYnJlYWs7CkBAIC0xMTcxLDggKzExNzEsOCBAQAogCX0gd2hpbGUgKDEpOwogCiAJaWYgKGRlYnVnID4gMykKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBleGl0aW5nIGludGVycnVwdCwgc3RhdHVzPSUjNC40eFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgaW9yZWFkMzIoaW9hZGRyICsgSW50clN0YXR1cykpOworCQluZXRkZXZfZGJnKGRldiwgImV4aXRpbmcgaW50ZXJydXB0LCBzdGF0dXM9JSM0LjR4XG4iLAorCQkJICAgaW9yZWFkMzIoaW9hZGRyICsgSW50clN0YXR1cykpOwogCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwogfQogCkBAIC0xMTg1LDggKzExODUsOCBAQAogCWludCB3b3JrX2xpbWl0ID0gbnAtPmRpcnR5X3J4ICsgUlhfUklOR19TSVpFIC0gbnAtPmN1cl9yeDsKIAogCWlmIChkZWJ1ZyA+IDQpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiBJbiBuZXRkZXZfcngoKSwgZW50cnkgJWQgc3RhdHVzICUwNHhcbiIsCi0JCSAgICAgICBlbnRyeSwgbnAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cyk7CisJCW5ldGRldl9kYmcoZGV2LCAiIEluIG5ldGRldl9yeCgpLCBlbnRyeSAlZCBzdGF0dXMgJTA0eFxuIiwKKwkJCSAgIGVudHJ5LCBucC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzKTsKIAl9CiAKIAkvKiBJZiBFT1AgaXMgc2V0IG9uIHRoZSBuZXh0IGVudHJ5LCBpdCdzIGEgbmV3IHBhY2tldC4gU2VuZCBpdCB1cC4gKi8KQEAgLTExOTUsOCArMTE5NSw4IEBACiAJCXMzMiBzdGF0dXMgPSBkZXNjLT5zdGF0dXM7CiAKIAkJaWYgKGRlYnVnID4gNCkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIgIG5ldGRldl9yeCgpIHN0YXR1cyB3YXMgJTA4eFxuIiwKLQkJCSAgICAgICBzdGF0dXMpOworCQkJbmV0ZGV2X2RiZyhkZXYsICIgIG5ldGRldl9yeCgpIHN0YXR1cyB3YXMgJTA4eFxuIiwKKwkJCQkgICBzdGF0dXMpOwogCQlpZiAoc3RhdHVzIDwgMCkKIAkJCWJyZWFrOwogCQlpZiAoKHN0YXR1cyAmIDB4MzgwMDgzMDApICE9IDB4MDMwMCkgewpAQCAtMTIxMSw4ICsxMjExLDggQEAKIAkJCX0gZWxzZSBpZiAoc3RhdHVzICYgMHg4MDAwKSB7CiAJCQkJLyogVGhlcmUgd2FzIGEgZmF0YWwgZXJyb3IuICovCiAJCQkJaWYgKGRlYnVnID4gMikKLQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZWNlaXZlIGVycm9yLCBSeCBzdGF0dXMgJTA4eFxuIiwKLQkJCQkJICAgICAgIGRldi0+bmFtZSwgc3RhdHVzKTsKKwkJCQkJbmV0ZGV2X2RiZyhkZXYsICJSZWNlaXZlIGVycm9yLCBSeCBzdGF0dXMgJTA4eFxuIiwKKwkJCQkJCSAgIHN0YXR1cyk7CiAJCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOyAvKiBlbmQgb2YgYSBwYWNrZXQuKi8KIAkJCQlpZiAoc3RhdHVzICYgMHgwODkwKSBucC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQkJCWlmIChzdGF0dXMgJiAweDAwNEMpIG5wLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKQEAgLTEyMjUsOCArMTIyNSw4IEBACiAKICNpZm5kZWYgZmluYWxfdmVyc2lvbgogCQkJaWYgKGRlYnVnID4gNCkKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiICBuZXRkZXZfcngoKSBub3JtYWwgUnggcGt0IGxlbmd0aCAlZCBzdGF0dXMgJXhcbiIsCi0JCQkJICAgICAgIHBrdF9sZW4sIHN0YXR1cyk7CisJCQkJbmV0ZGV2X2RiZyhkZXYsICIgIG5ldGRldl9yeCgpIG5vcm1hbCBSeCBwa3QgbGVuZ3RoICVkIHN0YXR1cyAleFxuIiwKKwkJCQkJICAgcGt0X2xlbiwgc3RhdHVzKTsKICNlbmRpZgogCQkJLyogQ2hlY2sgaWYgdGhlIHBhY2tldCBpcyBsb25nIGVub3VnaCB0byBhY2NlcHQgd2l0aG91dCBjb3B5aW5nCiAJCQkgICB0byBhIG1pbmltYWxseS1zaXplZCBza2J1ZmYuICovCkBAIC0xMjUxLDEwICsxMjUxLDEwIEBACiAjaWZuZGVmIGZpbmFsX3ZlcnNpb24JCQkJLyogUmVtb3ZlIGFmdGVyIHRlc3RpbmcuICovCiAJCQkvKiBZb3Ugd2lsbCB3YW50IHRoaXMgaW5mbyBmb3IgdGhlIGluaXRpYWwgZGVidWcuICovCiAJCQlpZiAoZGVidWcgPiA1KQotCQkJCXByaW50ayhLRVJOX0RFQlVHICIgIFJ4IGRhdGEgJXBNICVwTSAlMDJ4JTAyeCAlcEk0XG4iLAotCQkJCSAgICAgICAmc2tiLT5kYXRhWzBdLCAmc2tiLT5kYXRhWzZdLAotCQkJCSAgICAgICBza2ItPmRhdGFbMTJdLCBza2ItPmRhdGFbMTNdLAotCQkJCSAgICAgICAmc2tiLT5kYXRhWzE0XSk7CisJCQkJbmV0ZGV2X2RiZyhkZXYsICIgIFJ4IGRhdGEgJXBNICVwTSAlMDJ4JTAyeCAlcEk0XG4iLAorCQkJCQkgICAmc2tiLT5kYXRhWzBdLCAmc2tiLT5kYXRhWzZdLAorCQkJCQkgICBza2ItPmRhdGFbMTJdLCBza2ItPmRhdGFbMTNdLAorCQkJCQkgICAmc2tiLT5kYXRhWzE0XSk7CiAjZW5kaWYKIAkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAJCQluZXRpZl9yeChza2IpOwpAQCAtMTI5Miw4ICsxMjkyLDcgQEAKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IG5wLT5iYXNlX2FkZHI7CiAKIAlpZiAoZGVidWcgPiAyKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFibm9ybWFsIGV2ZW50LCAlMDh4XG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBpbnRyX3N0YXR1cyk7CisJCW5ldGRldl9kYmcoZGV2LCAiQWJub3JtYWwgZXZlbnQsICUwOHhcbiIsIGludHJfc3RhdHVzKTsKIAlpZiAoaW50cl9zdGF0dXMgPT0gMHhmZmZmZmZmZikKIAkJcmV0dXJuOwogCXNwaW5fbG9jaygmbnAtPmxvY2spOwpAQCAtMTMxMyw4ICsxMzEyLDcgQEAKIAkJIAluZXcgPSAxMjc7IC8qIGxvYWQgZnVsbCBwYWNrZXQgYmVmb3JlIHN0YXJ0aW5nICovCiAJCW5ldyA9IChucC0+Y3NyNiAmIH4oMHg3RiA8PCAxNCkpIHwgKG5ldzw8MTQpOwogI2VuZGlmCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogVHggdW5kZXJmbG93LCBuZXcgY3NyNiAlMDh4XG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBuZXcpOworCQluZXRkZXZfZGJnKGRldiwgIlR4IHVuZGVyZmxvdywgbmV3IGNzcjYgJTA4eFxuIiwgbmV3KTsKIAkJdXBkYXRlX2NzcjYoZGV2LCBuZXcpOwogCX0KIAlpZiAoaW50cl9zdGF0dXMgJiBSeERpZWQpIHsJCS8qIE1pc3NlZCBhIFJ4IGZyYW1lLiAqLwpAQCAtMTQ4NywxMyArMTQ4NSwxMiBAQAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAogCWlmIChkZWJ1ZyA+IDEpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTaHV0dGluZyBkb3duIGV0aGVyY2FyZCwgc3RhdHVzIHdhcyAlMDh4IENvbmZpZyAlMDh4XG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBpb3JlYWQzMihpb2FkZHIgKyBJbnRyU3RhdHVzKSwKLQkJICAgICAgIGlvcmVhZDMyKGlvYWRkciArIE5ldHdvcmtDb25maWcpKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBRdWV1ZSBwb2ludGVycyB3ZXJlIFR4ICVkIC8gJWQsICBSeCAlZCAvICVkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLAotCQkgICAgICAgbnAtPmN1cl90eCwgbnAtPmRpcnR5X3R4LAotCQkgICAgICAgbnAtPmN1cl9yeCwgbnAtPmRpcnR5X3J4KTsKKwkJbmV0ZGV2X2RiZyhkZXYsICJTaHV0dGluZyBkb3duIGV0aGVyY2FyZCwgc3RhdHVzIHdhcyAlMDh4IENvbmZpZyAlMDh4XG4iLAorCQkJICAgaW9yZWFkMzIoaW9hZGRyICsgSW50clN0YXR1cyksCisJCQkgICBpb3JlYWQzMihpb2FkZHIgKyBOZXR3b3JrQ29uZmlnKSk7CisJCW5ldGRldl9kYmcoZGV2LCAiUXVldWUgcG9pbnRlcnMgd2VyZSBUeCAlZCAvICVkLCAgUnggJWQgLyAlZFxuIiwKKwkJCSAgIG5wLT5jdXJfdHgsIG5wLT5kaXJ0eV90eCwKKwkJCSAgIG5wLT5jdXJfcngsIG5wLT5kaXJ0eV9yeCk7CiAJfQogCiAgCS8qIFN0b3AgdGhlIGNoaXAncyBUeCBhbmQgUnggcHJvY2Vzc2VzLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAveGlyY29tX2NiLmMgYi9kcml2ZXJzL25ldC90dWxpcC94aXJjb21fY2IuYwppbmRleCA1YTczNzUyLi45ODhiOGViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC94aXJjb21fY2IuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC94aXJjb21fY2IuYwpAQCAtMzcsMTUgKzM3LDYgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjZW5kaWYKIAotI2lmZGVmIERFQlVHCi0jZGVmaW5lIGVudGVyKHgpICAgcHJpbnRrKCJFbnRlcjogJXMsICVzIGxpbmUgJWlcbiIseCxfX0ZJTEVfXyxfX0xJTkVfXykKLSNkZWZpbmUgbGVhdmUoeCkgICBwcmludGsoIkxlYXZlOiAlcywgJXMgbGluZSAlaVxuIix4LF9fRklMRV9fLF9fTElORV9fKQotI2Vsc2UKLSNkZWZpbmUgZW50ZXIoeCkgICBkbyB7fSB3aGlsZSAoMCkKLSNkZWZpbmUgbGVhdmUoeCkgICBkbyB7fSB3aGlsZSAoMCkKLSNlbmRpZgotCi0KIE1PRFVMRV9ERVNDUklQVElPTigiWGlyY29tIENhcmRidXMgZXRoZXJuZXQgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJBcmphbiB2YW4gZGUgVmVuIDxhcmphbnZAcmVkaGF0LmNvbT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKQEAgLTE2MSw3ICsxNTIsNyBAQAogfTsKIAogCi0jaWZkZWYgREVCVUcKKyNpZiBkZWZpbmVkIERFQlVHICYmIERFQlVHID4gMQogc3RhdGljIHZvaWQgcHJpbnRfYmluYXJ5KHVuc2lnbmVkIGludCBudW1iZXIpCiB7CiAJaW50IGksaTI7CkBAIC0xNzYsNyArMTY3LDcgQEAKIAkJaWYgKChpJjMpPT0wKQogCQkJYnVmZmVyW2kyKytdPScgJzsKIAl9Ci0JcHJpbnRrKCIlc1xuIixidWZmZXIpOworCXByX2RlYnVnKCIlc1xuIixidWZmZXIpOwogfQogI2VuZGlmCiAKQEAgLTIwNSw3ICsxOTYsNiBAQAogCXN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqcHJpdmF0ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIHNob3J0IHRtcDE2OwotCWVudGVyKCJ4aXJjb21fcHJvYmUiKTsKIAogCS8qIEZpcnN0IGRvIHRoZSBQQ0kgaW5pdGlhbGlzYXRpb24gKi8KIApAQCAtMjcyLDggKzI2Miw4IEBACiAJCWdvdG8gcmVnX2ZhaWw7CiAJfQogCi0JZGV2X2luZm8oJmRldi0+ZGV2LCAiWGlyY29tIGNhcmRidXMgcmV2aXNpb24gJWkgYXQgaXJxICVpXG4iLAotCQkgcGRldi0+cmV2aXNpb24sIHBkZXYtPmlycSk7CisJbmV0ZGV2X2luZm8oZGV2LCAiWGlyY29tIGNhcmRidXMgcmV2aXNpb24gJWkgYXQgaXJxICVpXG4iLAorCQkgICAgcGRldi0+cmV2aXNpb24sIHBkZXYtPmlycSk7CiAJLyogc3RhcnQgdGhlIHRyYW5zbWl0dGVyIHRvIGdldCBhIGhlYXJ0YmVhdCAqLwogCS8qIFRPRE86IHNlbmQgMiBkdW1teSBwYWNrZXRzIGhlcmUgKi8KIAl0cmFuc2NlaXZlcl92b29kb28ocHJpdmF0ZSk7CkBAIC0yODUsNyArMjc1LDYgQEAKIAogCXRyaWdnZXJfcmVjZWl2ZShwcml2YXRlKTsKIAotCWxlYXZlKCJ4aXJjb21fcHJvYmUiKTsKIAlyZXR1cm4gMDsKIAogcmVnX2ZhaWw6CkBAIC0zMTAsNyArMjk5LDYgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqY2FyZCA9IG5ldGRldl9wcml2KGRldik7CiAKLQllbnRlcigieGlyY29tX3JlbW92ZSIpOwogCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiw4MTkyLGNhcmQtPnJ4X2J1ZmZlcixjYXJkLT5yeF9kbWFfaGFuZGxlKTsKIAlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsODE5MixjYXJkLT50eF9idWZmZXIsY2FyZC0+dHhfZG1hX2hhbmRsZSk7CiAKQEAgLTMxOCw3ICszMDYsNiBAQAogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJZnJlZV9uZXRkZXYoZGV2KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0JbGVhdmUoInhpcmNvbV9yZW1vdmUiKTsKIH0KIAogc3RhdGljIGlycXJldHVybl90IHhpcmNvbV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQpAQCAtMzI4LDE3ICszMTUsMTUgQEAKIAl1bnNpZ25lZCBpbnQgc3RhdHVzOwogCWludCBpOwogCi0JZW50ZXIoInhpcmNvbV9pbnRlcnJ1cHRcbiIpOwotCiAJc3Bpbl9sb2NrKCZjYXJkLT5sb2NrKTsKIAlzdGF0dXMgPSBpbmwoY2FyZC0+aW9fcG9ydCtDU1I1KTsKIAotI2lmZGVmIERFQlVHCisjaWYgZGVmaW5lZCBERUJVRyAmJiBERUJVRyA+IDEKIAlwcmludF9iaW5hcnkoc3RhdHVzKTsKLQlwcmludGsoInR4IHN0YXR1cyAweCUwOHggMHglMDh4XG4iLAotCSAgICAgICBjYXJkLT50eF9idWZmZXJbMF0sIGNhcmQtPnR4X2J1ZmZlcls0XSk7Ci0JcHJpbnRrKCJyeCBzdGF0dXMgMHglMDh4IDB4JTA4eFxuIiwKLQkgICAgICAgY2FyZC0+cnhfYnVmZmVyWzBdLCBjYXJkLT5yeF9idWZmZXJbNF0pOworCXByX2RlYnVnKCJ0eCBzdGF0dXMgMHglMDh4IDB4JTA4eFxuIiwKKwkJIGNhcmQtPnR4X2J1ZmZlclswXSwgY2FyZC0+dHhfYnVmZmVyWzRdKTsKKwlwcl9kZWJ1Zygicnggc3RhdHVzIDB4JTA4eCAweCUwOHhcbiIsCisJCSBjYXJkLT5yeF9idWZmZXJbMF0sIGNhcmQtPnJ4X2J1ZmZlcls0XSk7CiAjZW5kaWYKIAkvKiBIYW5kbGUgc2hhcmVkIGlycSBhbmQgaG90cGx1ZyAqLwogCWlmIChzdGF0dXMgPT0gMCB8fCBzdGF0dXMgPT0gMHhmZmZmZmZmZikgewpAQCAtMzQ4LDkgKzMzMyw5IEBACiAKIAlpZiAobGlua19zdGF0dXNfY2hhbmdlZChjYXJkKSkgewogCQlpbnQgbmV3bGluazsKLQkJcHJpbnRrKEtFUk5fREVCVUcgInhpcmNvbV9jYjogTGluayBzdGF0dXMgaGFzIGNoYW5nZWRcbiIpOworCQluZXRkZXZfZGJnKGRldiwgIkxpbmsgc3RhdHVzIGhhcyBjaGFuZ2VkXG4iKTsKIAkJbmV3bGluayA9IGxpbmtfc3RhdHVzKGNhcmQpOwotCQlkZXZfaW5mbygmZGV2LT5kZXYsICJMaW5rIGlzICVpIG1iaXRcbiIsIG5ld2xpbmspOworCQluZXRkZXZfaW5mbyhkZXYsICJMaW5rIGlzICVkIG1iaXRcbiIsIG5ld2xpbmspOwogCQlpZiAobmV3bGluaykKIAkJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKIAkJZWxzZQpAQCAtMzY5LDkgKzM1NCw3IEBACiAJZm9yIChpPTA7aTxOVU1ERVNDUklQVE9SUztpKyspCiAJCWludmVzdGlnYXRlX3JlYWRfZGVzY3JpcHRvcihkZXYsY2FyZCxpLGJ1ZmZlcm9mZnNldHNbaV0pOwogCi0KIAlzcGluX3VubG9jaygmY2FyZC0+bG9jayk7Ci0JbGVhdmUoInhpcmNvbV9pbnRlcnJ1cHQiKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTM4Miw3ICszNjUsNiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IG5leHRkZXNjcmlwdG9yOwogCWludCBkZXNjOwotCWVudGVyKCJ4aXJjb21fc3RhcnRfeG1pdCIpOwogCiAJY2FyZCA9IG5ldGRldl9wcml2KGRldik7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssZmxhZ3MpOwpAQCAtNDI0LDEzICs0MDYsMTAgQEAKIAkJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCQl9CiAJCQljYXJkLT50cmFuc21pdF91c2VkID0gbmV4dGRlc2NyaXB0b3I7Ci0JCQlsZWF2ZSgieGlyY29tLXN0YXJ0X3htaXQgLSBzZW50Iik7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLGZsYWdzKTsKIAkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCi0KLQogCS8qIFVoIG9oLi4uIG5vIGZyZWUgZGVzY3JpcHRvci4uLiBkcm9wIHRoZSBwYWNrZXQgKi8KIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jayxmbGFncyk7CkBAIC00NDYsMTggKzQyNSwxNiBAQAogewogCXN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqeHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCByZXR2YWw7Ci0JZW50ZXIoInhpcmNvbV9vcGVuIik7Ci0JcHJfaW5mbygieGlyY29tIGNhcmRidXMgYWRhcHRvciBmb3VuZCwgcmVnaXN0ZXJpbmcgYXMgJXMsIHVzaW5nIGlycSAlaVxuIiwKLQkJZGV2LT5uYW1lLCBkZXYtPmlycSk7CisKKwluZXRkZXZfaW5mbyhkZXYsICJ4aXJjb20gY2FyZGJ1cyBhZGFwdG9yIGZvdW5kLCB1c2luZyBpcnEgJWlcbiIsCisJCSAgICBkZXYtPmlycSk7CiAJcmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIHhpcmNvbV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldik7Ci0JaWYgKHJldHZhbCkgewotCQlsZWF2ZSgieGlyY29tX29wZW4gLSBObyBJUlEiKTsKKwlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwotCX0KIAogCXhpcmNvbV91cCh4cCk7CiAJeHAtPm9wZW4gPSAxOwotCWxlYXZlKCJ4aXJjb21fb3BlbiIpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ2Niw3ICs0NDMsNiBAQAogCXN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqY2FyZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZW50ZXIoInhpcmNvbV9jbG9zZSIpOwogCWNhcmQgPSBuZXRkZXZfcHJpdihkZXYpOwogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsgLyogd2UgZG9uJ3Qgd2FudCBuZXcgcGFja2V0cyAqLwogCkBAIC00ODYsOCArNDYyLDYgQEAKIAljYXJkLT5vcGVuID0gMDsKIAlmcmVlX2lycShkZXYtPmlycSxkZXYpOwogCi0JbGVhdmUoInhpcmNvbV9jbG9zZSIpOwotCiAJcmV0dXJuIDA7CiAKIH0KQEAgLTUwNyw4ICs0ODEsNiBAQAogewogCXVuc2lnbmVkIGludCB2YWw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQllbnRlcigiaW5pdGlhbGl6ZV9jYXJkIik7Ci0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAKQEAgLTUzNCw4ICs1MDYsNiBAQAogCWRlYWN0aXZhdGVfdHJhbnNtaXR0ZXIoY2FyZCk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7Ci0KLQlsZWF2ZSgiaW5pdGlhbGl6ZV9jYXJkIik7CiB9CiAKIC8qCkBAIC01NDcsMTIgKzUxNyw5IEBACiBzdGF0aWMgdm9pZCB0cmlnZ2VyX3RyYW5zbWl0KHN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqY2FyZCkKIHsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCWVudGVyKCJ0cmlnZ2VyX3RyYW5zbWl0Iik7CiAKIAl2YWwgPSAwOwogCW91dGwodmFsLCBjYXJkLT5pb19wb3J0ICsgQ1NSMSk7Ci0KLQlsZWF2ZSgidHJpZ2dlcl90cmFuc21pdCIpOwogfQogCiAvKgpAQCAtNTY1LDEyICs1MzIsOSBAQAogc3RhdGljIHZvaWQgdHJpZ2dlcl9yZWNlaXZlKHN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqY2FyZCkKIHsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCWVudGVyKCJ0cmlnZ2VyX3JlY2VpdmUiKTsKIAogCXZhbCA9IDA7CiAJb3V0bCh2YWwsIGNhcmQtPmlvX3BvcnQgKyBDU1IyKTsKLQotCWxlYXZlKCJ0cmlnZ2VyX3JlY2VpdmUiKTsKIH0KIAogLyoKQEAgLTU4MSw4ICs1NDUsNiBAQAogewogCXUzMiBhZGRyZXNzOwogCWludCBpOwotCWVudGVyKCJzZXR1cF9kZXNjcmlwdG9ycyIpOwotCiAKIAlCVUdfT04oY2FyZC0+cnhfYnVmZmVyID09IE5VTEwpOwogCUJVR19PTihjYXJkLT50eF9idWZmZXIgPT0gTlVMTCk7CkBAIC02MzYsOCArNTk4LDYgQEAKIAkvKiB3aXRlIHRoZSB0cmFuc21pdCBkZXNjcmlwdG9yIHJpbmcgdG8gdGhlIGNhcmQgKi8KIAlhZGRyZXNzID0gY2FyZC0+dHhfZG1hX2hhbmRsZTsKIAlvdXRsKGFkZHJlc3MsIGNhcmQtPmlvX3BvcnQgKyBDU1I0KTsJLyogeG1pdCBkZXNjciBsaXN0IGFkZHJlc3MgKi8KLQotCWxlYXZlKCJzZXR1cF9kZXNjcmlwdG9ycyIpOwogfQogCiAvKgpAQCAtNjQ3LDEzICs2MDcsMTAgQEAKIHN0YXRpYyB2b2lkIHJlbW92ZV9kZXNjcmlwdG9ycyhzdHJ1Y3QgeGlyY29tX3ByaXZhdGUgKmNhcmQpCiB7CiAJdW5zaWduZWQgaW50IHZhbDsKLQllbnRlcigicmVtb3ZlX2Rlc2NyaXB0b3JzIik7CiAKIAl2YWwgPSAwOwogCW91dGwodmFsLCBjYXJkLT5pb19wb3J0ICsgQ1NSMyk7CS8qIFJlY2VpdmUgZGVzY3JpcHRvciBhZGRyZXNzICovCiAJb3V0bCh2YWwsIGNhcmQtPmlvX3BvcnQgKyBDU1I0KTsJLyogU2VuZCBkZXNjcmlwdG9yIGFkZHJlc3MgKi8KLQotCWxlYXZlKCJyZW1vdmVfZGVzY3JpcHRvcnMiKTsKIH0KIAogLyoKQEAgLTY2NSwyMSArNjIyLDE3IEBACiBzdGF0aWMgaW50IGxpbmtfc3RhdHVzX2NoYW5nZWQoc3RydWN0IHhpcmNvbV9wcml2YXRlICpjYXJkKQogewogCXVuc2lnbmVkIGludCB2YWw7Ci0JZW50ZXIoImxpbmtfc3RhdHVzX2NoYW5nZWQiKTsKIAogCXZhbCA9IGlubChjYXJkLT5pb19wb3J0ICsgQ1NSNSk7CS8qIFN0YXR1cyByZWdpc3RlciAqLwogCi0JaWYgKCh2YWwgJiAoMSA8PCAyNykpID09IDApIHsJLyogbm8gY2hhbmdlICovCi0JCWxlYXZlKCJsaW5rX3N0YXR1c19jaGFuZ2VkIC0gbm9jaGFuZ2UiKTsKKwlpZiAoKHZhbCAmICgxIDw8IDI3KSkgPT0gMCkJCS8qIG5vIGNoYW5nZSAqLwogCQlyZXR1cm4gMDsKLQl9CiAKIAkvKiBjbGVhciB0aGUgZXZlbnQgYnkgd3JpdGluZyBhIDEgdG8gdGhlIGJpdCBpbiB0aGUKIAkgICBzdGF0dXMgcmVnaXN0ZXIuICovCiAJdmFsID0gKDEgPDwgMjcpOwogCW91dGwodmFsLCBjYXJkLT5pb19wb3J0ICsgQ1NSNSk7CiAKLQlsZWF2ZSgibGlua19zdGF0dXNfY2hhbmdlZCAtIGNoYW5nZWQiKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtNjkxLDE2ICs2NDQsMTIgQEAKIHN0YXRpYyBpbnQgdHJhbnNtaXRfYWN0aXZlKHN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqY2FyZCkKIHsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCWVudGVyKCJ0cmFuc21pdF9hY3RpdmUiKTsKIAogCXZhbCA9IGlubChjYXJkLT5pb19wb3J0ICsgQ1NSNSk7CS8qIFN0YXR1cyByZWdpc3RlciAqLwogCi0JaWYgKCh2YWwgJiAoNyA8PCAyMCkpID09IDApIHsJLyogdHJhbnNtaXR0ZXIgZGlzYWJsZWQgKi8KLQkJbGVhdmUoInRyYW5zbWl0X2FjdGl2ZSAtIGluYWN0aXZlIik7CisJaWYgKCh2YWwgJiAoNyA8PCAyMCkpID09IDApCQkvKiB0cmFuc21pdHRlciBkaXNhYmxlZCAqLwogCQlyZXR1cm4gMDsKLQl9CiAKLQlsZWF2ZSgidHJhbnNtaXRfYWN0aXZlIC0gYWN0aXZlIik7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTcxMSwxNyArNjYwLDEyIEBACiBzdGF0aWMgaW50IHJlY2VpdmVfYWN0aXZlKHN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqY2FyZCkKIHsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCWVudGVyKCJyZWNlaXZlX2FjdGl2ZSIpOwotCiAKIAl2YWwgPSBpbmwoY2FyZC0+aW9fcG9ydCArIENTUjUpOwkvKiBTdGF0dXMgcmVnaXN0ZXIgKi8KIAotCWlmICgodmFsICYgKDcgPDwgMTcpKSA9PSAwKSB7CS8qIHJlY2VpdmVyIGRpc2FibGVkICovCi0JCWxlYXZlKCJyZWNlaXZlX2FjdGl2ZSAtIGluYWN0aXZlIik7CisJaWYgKCh2YWwgJiAoNyA8PCAxNykpID09IDApCQkvKiByZWNlaXZlciBkaXNhYmxlZCAqLwogCQlyZXR1cm4gMDsKLQl9CiAKLQlsZWF2ZSgicmVjZWl2ZV9hY3RpdmUgLSBhY3RpdmUiKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtNzM5LDggKzY4Myw2IEBACiB7CiAJdW5zaWduZWQgaW50IHZhbDsKIAlpbnQgY291bnRlcjsKLQllbnRlcigiYWN0aXZhdGVfcmVjZWl2ZXIiKTsKLQogCiAJdmFsID0gaW5sKGNhcmQtPmlvX3BvcnQgKyBDU1I2KTsJLyogT3BlcmF0aW9uIG1vZGUgKi8KIApAQCAtNzYxLDcgKzcwMyw3IEBACiAJCXVkZWxheSg1MCk7CiAJCWNvdW50ZXItLTsKIAkJaWYgKGNvdW50ZXIgPD0gMCkKLQkJCXByX2VycigiUmVjZWl2ZXIgZmFpbGVkIHRvIGRlYWN0aXZhdGVcbiIpOworCQkJbmV0ZGV2X2VycihjYXJkLT5kZXYsICJSZWNlaXZlciBmYWlsZWQgdG8gZGVhY3RpdmF0ZVxuIik7CiAJfQogCiAJLyogZW5hYmxlIHRoZSByZWNlaXZlciAqLwpAQCAtNzc4LDEwICs3MjAsOSBAQAogCQl1ZGVsYXkoNTApOwogCQljb3VudGVyLS07CiAJCWlmIChjb3VudGVyIDw9IDApCi0JCQlwcl9lcnIoIlJlY2VpdmVyIGZhaWxlZCB0byByZS1hY3RpdmF0ZVxuIik7CisJCQluZXRkZXZfZXJyKGNhcmQtPmRldiwKKwkJCQkgICAiUmVjZWl2ZXIgZmFpbGVkIHRvIHJlLWFjdGl2YXRlXG4iKTsKIAl9Ci0KLQlsZWF2ZSgiYWN0aXZhdGVfcmVjZWl2ZXIiKTsKIH0KIAogLyoKQEAgLTc5NSw3ICs3MzYsNiBAQAogewogCXVuc2lnbmVkIGludCB2YWw7CiAJaW50IGNvdW50ZXI7Ci0JZW50ZXIoImRlYWN0aXZhdGVfcmVjZWl2ZXIiKTsKIAogCXZhbCA9IGlubChjYXJkLT5pb19wb3J0ICsgQ1NSNik7CS8qIE9wZXJhdGlvbiBtb2RlICovCiAJdmFsID0gdmFsICYgfjI7CQkJCS8qIGRpc2FibGUgdGhlIHJlY2VpdmVyICovCkBAIC04MDksMTEgKzc0OSw4IEBACiAJCXVkZWxheSg1MCk7CiAJCWNvdW50ZXItLTsKIAkJaWYgKGNvdW50ZXIgPD0gMCkKLQkJCXByX2VycigiUmVjZWl2ZXIgZmFpbGVkIHRvIGRlYWN0aXZhdGVcbiIpOworCQkJbmV0ZGV2X2VycihjYXJkLT5kZXYsICJSZWNlaXZlciBmYWlsZWQgdG8gZGVhY3RpdmF0ZVxuIik7CiAJfQotCi0KLQlsZWF2ZSgiZGVhY3RpdmF0ZV9yZWNlaXZlciIpOwogfQogCiAKQEAgLTgzMSw4ICs3NjgsNiBAQAogewogCXVuc2lnbmVkIGludCB2YWw7CiAJaW50IGNvdW50ZXI7Ci0JZW50ZXIoImFjdGl2YXRlX3RyYW5zbWl0dGVyIik7Ci0KIAogCXZhbCA9IGlubChjYXJkLT5pb19wb3J0ICsgQ1NSNik7CS8qIE9wZXJhdGlvbiBtb2RlICovCiAKQEAgLTg1Miw3ICs3ODcsOCBAQAogCQl1ZGVsYXkoNTApOwogCQljb3VudGVyLS07CiAJCWlmIChjb3VudGVyIDw9IDApCi0JCQlwcl9lcnIoIlRyYW5zbWl0dGVyIGZhaWxlZCB0byBkZWFjdGl2YXRlXG4iKTsKKwkJCW5ldGRldl9lcnIoY2FyZC0+ZGV2LAorCQkJCSAgICJUcmFuc21pdHRlciBmYWlsZWQgdG8gZGVhY3RpdmF0ZVxuIik7CiAJfQogCiAJLyogZW5hYmxlIHRoZSB0cmFuc21pdHRlciAqLwpAQCAtODY5LDEwICs4MDUsOSBAQAogCQl1ZGVsYXkoNTApOwogCQljb3VudGVyLS07CiAJCWlmIChjb3VudGVyIDw9IDApCi0JCQlwcl9lcnIoIlRyYW5zbWl0dGVyIGZhaWxlZCB0byByZS1hY3RpdmF0ZVxuIik7CisJCQluZXRkZXZfZXJyKGNhcmQtPmRldiwKKwkJCQkgICAiVHJhbnNtaXR0ZXIgZmFpbGVkIHRvIHJlLWFjdGl2YXRlXG4iKTsKIAl9Ci0KLQlsZWF2ZSgiYWN0aXZhdGVfdHJhbnNtaXR0ZXIiKTsKIH0KIAogLyoKQEAgLTg4Niw3ICs4MjEsNiBAQAogewogCXVuc2lnbmVkIGludCB2YWw7CiAJaW50IGNvdW50ZXI7Ci0JZW50ZXIoImRlYWN0aXZhdGVfdHJhbnNtaXR0ZXIiKTsKIAogCXZhbCA9IGlubChjYXJkLT5pb19wb3J0ICsgQ1NSNik7CS8qIE9wZXJhdGlvbiBtb2RlICovCiAJdmFsID0gdmFsICYgfjI7CQkvKiBkaXNhYmxlIHRoZSB0cmFuc21pdHRlciAqLwpAQCAtOTAwLDExICs4MzQsOSBAQAogCQl1ZGVsYXkoNTApOwogCQljb3VudGVyLS07CiAJCWlmIChjb3VudGVyIDw9IDApCi0JCQlwcl9lcnIoIlRyYW5zbWl0dGVyIGZhaWxlZCB0byBkZWFjdGl2YXRlXG4iKTsKKwkJCW5ldGRldl9lcnIoY2FyZC0+ZGV2LAorCQkJCSAgICJUcmFuc21pdHRlciBmYWlsZWQgdG8gZGVhY3RpdmF0ZVxuIik7CiAJfQotCi0KLQlsZWF2ZSgiZGVhY3RpdmF0ZV90cmFuc21pdHRlciIpOwogfQogCiAKQEAgLTkxNiwxMyArODQ4LDEwIEBACiBzdGF0aWMgdm9pZCBlbmFibGVfdHJhbnNtaXRfaW50ZXJydXB0KHN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqY2FyZCkKIHsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCWVudGVyKCJlbmFibGVfdHJhbnNtaXRfaW50ZXJydXB0Iik7CiAKIAl2YWwgPSBpbmwoY2FyZC0+aW9fcG9ydCArIENTUjcpOwkvKiBJbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyICovCiAJdmFsIHw9IDE7CQkJCS8qIGVuYWJsZSB0aGUgdHJhbnNtaXQgaW50ZXJydXB0ICovCiAJb3V0bCh2YWwsIGNhcmQtPmlvX3BvcnQgKyBDU1I3KTsKLQotCWxlYXZlKCJlbmFibGVfdHJhbnNtaXRfaW50ZXJydXB0Iik7CiB9CiAKIApAQCAtOTM0LDEzICs4NjMsMTAgQEAKIHN0YXRpYyB2b2lkIGVuYWJsZV9yZWNlaXZlX2ludGVycnVwdChzdHJ1Y3QgeGlyY29tX3ByaXZhdGUgKmNhcmQpCiB7CiAJdW5zaWduZWQgaW50IHZhbDsKLQllbnRlcigiZW5hYmxlX3JlY2VpdmVfaW50ZXJydXB0Iik7CiAKIAl2YWwgPSBpbmwoY2FyZC0+aW9fcG9ydCArIENTUjcpOwkvKiBJbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyICovCiAJdmFsID0gdmFsIHwgKDEgPDwgNik7CQkJLyogZW5hYmxlIHRoZSByZWNlaXZlIGludGVycnVwdCAqLwogCW91dGwodmFsLCBjYXJkLT5pb19wb3J0ICsgQ1NSNyk7Ci0KLQlsZWF2ZSgiZW5hYmxlX3JlY2VpdmVfaW50ZXJydXB0Iik7CiB9CiAKIC8qCkBAIC05NTEsMTMgKzg3NywxMCBAQAogc3RhdGljIHZvaWQgZW5hYmxlX2xpbmtfaW50ZXJydXB0KHN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqY2FyZCkKIHsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCWVudGVyKCJlbmFibGVfbGlua19pbnRlcnJ1cHQiKTsKIAogCXZhbCA9IGlubChjYXJkLT5pb19wb3J0ICsgQ1NSNyk7CS8qIEludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIgKi8KIAl2YWwgPSB2YWwgfCAoMSA8PCAyNyk7CQkJLyogZW5hYmxlIHRoZSBsaW5rIHN0YXR1cyBjaGFnZSBpbnRlcnJ1cHQgKi8KIAlvdXRsKHZhbCwgY2FyZC0+aW9fcG9ydCArIENTUjcpOwotCi0JbGVhdmUoImVuYWJsZV9saW5rX2ludGVycnVwdCIpOwogfQogCiAKQEAgLTk3MCwxMiArODkzLDkgQEAKIHN0YXRpYyB2b2lkIGRpc2FibGVfYWxsX2ludGVycnVwdHMoc3RydWN0IHhpcmNvbV9wcml2YXRlICpjYXJkKQogewogCXVuc2lnbmVkIGludCB2YWw7Ci0JZW50ZXIoImVuYWJsZV9hbGxfaW50ZXJydXB0cyIpOwogCiAJdmFsID0gMDsJCQkJLyogZGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLwogCW91dGwodmFsLCBjYXJkLT5pb19wb3J0ICsgQ1NSNyk7Ci0KLQlsZWF2ZSgiZGlzYWJsZV9hbGxfaW50ZXJydXB0cyIpOwogfQogCiAvKgpAQCAtOTg2LDcgKzkwNiw2IEBACiBzdGF0aWMgdm9pZCBlbmFibGVfY29tbW9uX2ludGVycnVwdHMoc3RydWN0IHhpcmNvbV9wcml2YXRlICpjYXJkKQogewogCXVuc2lnbmVkIGludCB2YWw7Ci0JZW50ZXIoImVuYWJsZV9saW5rX2ludGVycnVwdCIpOwogCiAJdmFsID0gaW5sKGNhcmQtPmlvX3BvcnQgKyBDU1I3KTsJLyogSW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciAqLwogCXZhbCB8PSAoMTw8MTYpOyAvKiBOb3JtYWwgSW50ZXJydXB0IFN1bW1hcnkgKi8KQEAgLTk5OCw4ICs5MTcsNiBAQAogCXZhbCB8PSAoMTw8Mik7ICAvKiBUcmFuc21pdCBCdWZmZXIgVW5hdmFpbGFibGUgKi8KIAl2YWwgfD0gKDE8PDEpOyAgLyogVHJhbnNtaXQgUHJvY2VzcyBTdG9wcGVkICovCiAJb3V0bCh2YWwsIGNhcmQtPmlvX3BvcnQgKyBDU1I3KTsKLQotCWxlYXZlKCJlbmFibGVfbGlua19pbnRlcnJ1cHQiKTsKIH0KIAogLyoKQEAgLTEwMTAsMTMgKzkyNywxMSBAQAogc3RhdGljIGludCBlbmFibGVfcHJvbWlzYyhzdHJ1Y3QgeGlyY29tX3ByaXZhdGUgKmNhcmQpCiB7CiAJdW5zaWduZWQgaW50IHZhbDsKLQllbnRlcigiZW5hYmxlX3Byb21pc2MiKTsKIAogCXZhbCA9IGlubChjYXJkLT5pb19wb3J0ICsgQ1NSNik7CiAJdmFsID0gdmFsIHwgKDEgPDwgNik7CiAJb3V0bCh2YWwsIGNhcmQtPmlvX3BvcnQgKyBDU1I2KTsKIAotCWxlYXZlKCJlbmFibGVfcHJvbWlzYyIpOwogCXJldHVybiAxOwogfQogCkBAIC0xMDMxLDcgKzk0Niw2IEBACiBzdGF0aWMgaW50IGxpbmtfc3RhdHVzKHN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqY2FyZCkKIHsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCWVudGVyKCJsaW5rX3N0YXR1cyIpOwogCiAJdmFsID0gaW5iKGNhcmQtPmlvX3BvcnQgKyBDU1IxMik7CiAKQEAgLTEwNDIsNyArOTU2LDYgQEAKIAogCS8qIElmIHdlIGdldCBoZXJlIC0+IG5vIGxpbmsgYXQgYWxsICovCiAKLQlsZWF2ZSgibGlua19zdGF0dXMiKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA2MSw4ICs5NzQsNiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CiAKLQllbnRlcigicmVhZF9tYWNfYWRkcmVzcyIpOwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAogCW91dGwoMSA8PCAxMiwgY2FyZC0+aW9fcG9ydCArIENTUjkpOwkvKiBlbmFibGUgYm9vdCByb20gYWNjZXNzICovCkBAIC0xMDkwLDcgKzEwMDEsNiBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAJcHJfZGVidWcoIiAlcE1cbiIsIGNhcmQtPmRldi0+ZGV2X2FkZHIpOwotCWxlYXZlKCJyZWFkX21hY19hZGRyZXNzIik7CiB9CiAKIApAQCAtMTEwMyw4ICsxMDEzLDYgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZW50ZXIoInRyYW5zY2VpdmVyX3Zvb2RvbyIpOwotCiAJLyogZGlzYWJsZSBhbGwgcG93ZXJtYW5hZ2VtZW50ICovCiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChjYXJkLT5wZGV2LCBQQ0lfUE9XRVJNR01ULCAweDAwMDApOwogCkBAIC0xMTIyLDcgKzEwMzAsNiBAQAogICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAKIAluZXRpZl9zdGFydF9xdWV1ZShjYXJkLT5kZXYpOwotCWxlYXZlKCJ0cmFuc2NlaXZlcl92b29kb28iKTsKIH0KIAogCkBAIC0xMTMxLDggKzEwMzgsNiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CiAKLQllbnRlcigieGlyY29tX3VwIik7Ci0KIAkvKiBkaXNhYmxlIGFsbCBwb3dlcm1hbmFnZW1lbnQgKi8KIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGNhcmQtPnBkZXYsIFBDSV9QT1dFUk1HTVQsIDB4MDAwMCk7CiAKQEAgLTExNTYsODcgKzEwNjEsODQgQEAKIAl0cmlnZ2VyX3JlY2VpdmUoY2FyZCk7CiAJdHJpZ2dlcl90cmFuc21pdChjYXJkKTsKIAluZXRpZl9zdGFydF9xdWV1ZShjYXJkLT5kZXYpOwotCWxlYXZlKCJ4aXJjb21fdXAiKTsKIH0KIAogLyogQnVmZmVyb2Zmc2V0IGlzIGluIEJZVEVTICovCi1zdGF0aWMgdm9pZCBpbnZlc3RpZ2F0ZV9yZWFkX2Rlc2NyaXB0b3Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldixzdHJ1Y3QgeGlyY29tX3ByaXZhdGUgKmNhcmQsIGludCBkZXNjbnIsIHVuc2lnbmVkIGludCBidWZmZXJvZmZzZXQpCitzdGF0aWMgdm9pZAoraW52ZXN0aWdhdGVfcmVhZF9kZXNjcmlwdG9yKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqY2FyZCwKKwkJCSAgICBpbnQgZGVzY25yLCB1bnNpZ25lZCBpbnQgYnVmZmVyb2Zmc2V0KQogewotCQlpbnQgc3RhdHVzOworCWludCBzdGF0dXM7CiAKLQkJZW50ZXIoImludmVzdGlnYXRlX3JlYWRfZGVzY3JpcHRvciIpOwotCQlzdGF0dXMgPSBsZTMyX3RvX2NwdShjYXJkLT5yeF9idWZmZXJbNCpkZXNjbnJdKTsKKwlzdGF0dXMgPSBsZTMyX3RvX2NwdShjYXJkLT5yeF9idWZmZXJbNCpkZXNjbnJdKTsKIAotCQlpZiAoKHN0YXR1cyA+IDApKSB7CS8qIHBhY2tldCByZWNlaXZlZCAqLworCWlmIChzdGF0dXMgPiAwKSB7CQkvKiBwYWNrZXQgcmVjZWl2ZWQgKi8KIAotCQkJLyogVE9ETzogZGlzY2FyZCBlcnJvciBwYWNrZXRzICovCisJCS8qIFRPRE86IGRpc2NhcmQgZXJyb3IgcGFja2V0cyAqLwogCi0JCQlzaG9ydCBwa3RfbGVuID0gKChzdGF0dXMgPj4gMTYpICYgMHg3ZmYpIC0gNDsJLyogbWludXMgNCwgd2UgZG9uJ3Qgd2FudCB0aGUgQ1JDICovCi0JCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQlzaG9ydCBwa3RfbGVuID0gKChzdGF0dXMgPj4gMTYpICYgMHg3ZmYpIC0gNDsKKwkJCQkJLyogbWludXMgNCwgd2UgZG9uJ3Qgd2FudCB0aGUgQ1JDICovCisJCXN0cnVjdCBza19idWZmICpza2I7CiAKLQkJCWlmIChwa3RfbGVuID4gMTUxOCkgewotCQkJCXByX2VycigiUGFja2V0IGxlbmd0aCAlaSBpcyBib2d1c1xuIiwgcGt0X2xlbik7Ci0JCQkJcGt0X2xlbiA9IDE1MTg7Ci0JCQl9Ci0KLQkJCXNrYiA9IGRldl9hbGxvY19za2IocGt0X2xlbiArIDIpOwotCQkJaWYgKHNrYiA9PSBOVUxMKSB7Ci0JCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQlza2JfcmVzZXJ2ZShza2IsIDIpOwotCQkJc2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLCAodW5zaWduZWQgY2hhciopJmNhcmQtPnJ4X2J1ZmZlcltidWZmZXJvZmZzZXQgLyA0XSwgcGt0X2xlbik7Ci0JCQlza2JfcHV0KHNrYiwgcGt0X2xlbik7Ci0JCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwotCQkJbmV0aWZfcngoc2tiKTsKLQkJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwotCQkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOwotCi0JCSAgICAgIG91dDoKLQkJCS8qIGdpdmUgdGhlIGJ1ZmZlciBiYWNrIHRvIHRoZSBjYXJkICovCi0JCQljYXJkLT5yeF9idWZmZXJbNCpkZXNjbnJdID0gIGNwdV90b19sZTMyKDB4ODAwMDAwMDApOwotCQkJdHJpZ2dlcl9yZWNlaXZlKGNhcmQpOworCQlpZiAocGt0X2xlbiA+IDE1MTgpIHsKKwkJCW5ldGRldl9lcnIoZGV2LCAiUGFja2V0IGxlbmd0aCAlaSBpcyBib2d1c1xuIiwgcGt0X2xlbik7CisJCQlwa3RfbGVuID0gMTUxODsKIAkJfQogCi0JCWxlYXZlKCJpbnZlc3RpZ2F0ZV9yZWFkX2Rlc2NyaXB0b3IiKTsKKwkJc2tiID0gZGV2X2FsbG9jX3NrYihwa3RfbGVuICsgMik7CisJCWlmIChza2IgPT0gTlVMTCkgeworCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQlnb3RvIG91dDsKKwkJfQorCQlza2JfcmVzZXJ2ZShza2IsIDIpOworCQlza2JfY29weV90b19saW5lYXJfZGF0YShza2IsCisJCQkJCSZjYXJkLT5yeF9idWZmZXJbYnVmZmVyb2Zmc2V0IC8gNF0sCisJCQkJCXBrdF9sZW4pOworCQlza2JfcHV0KHNrYiwgcGt0X2xlbik7CisJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJCW5ldGlmX3J4KHNrYik7CisJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CiAKK291dDoKKwkJLyogZ2l2ZSB0aGUgYnVmZmVyIGJhY2sgdG8gdGhlIGNhcmQgKi8KKwkJY2FyZC0+cnhfYnVmZmVyWzQqZGVzY25yXSA9IGNwdV90b19sZTMyKDB4ODAwMDAwMDApOworCQl0cmlnZ2VyX3JlY2VpdmUoY2FyZCk7CisJfQogfQogCiAKIC8qIEJ1ZmZlcm9mZnNldCBpcyBpbiBCWVRFUyAqLwotc3RhdGljIHZvaWQgaW52ZXN0aWdhdGVfd3JpdGVfZGVzY3JpcHRvcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeGlyY29tX3ByaXZhdGUgKmNhcmQsIGludCBkZXNjbnIsIHVuc2lnbmVkIGludCBidWZmZXJvZmZzZXQpCitzdGF0aWMgdm9pZAoraW52ZXN0aWdhdGVfd3JpdGVfZGVzY3JpcHRvcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICBzdHJ1Y3QgeGlyY29tX3ByaXZhdGUgKmNhcmQsCisJCQkgICAgIGludCBkZXNjbnIsIHVuc2lnbmVkIGludCBidWZmZXJvZmZzZXQpCiB7Ci0JCWludCBzdGF0dXM7CisJaW50IHN0YXR1czsKIAotCQllbnRlcigiaW52ZXN0aWdhdGVfd3JpdGVfZGVzY3JpcHRvciIpOwotCi0JCXN0YXR1cyA9IGxlMzJfdG9fY3B1KGNhcmQtPnR4X2J1ZmZlcls0KmRlc2Nucl0pOworCXN0YXR1cyA9IGxlMzJfdG9fY3B1KGNhcmQtPnR4X2J1ZmZlcls0KmRlc2Nucl0pOwogI2lmIDAKLQkJaWYgKHN0YXR1cyAmIDB4ODAwMCkgewkvKiBNYWpvciBlcnJvciAqLwotCQkJcHJfZXJyKCJNYWpvciB0cmFuc21pdCBlcnJvciBzdGF0dXMgJXhcbiIsIHN0YXR1cyk7Ci0JCQljYXJkLT50eF9idWZmZXJbNCpkZXNjbnJdID0gMDsKLQkJCW5ldGlmX3dha2VfcXVldWUgKGRldik7Ci0JCX0KKwlpZiAoc3RhdHVzICYgMHg4MDAwKSB7CS8qIE1ham9yIGVycm9yICovCisJCXByX2VycigiTWFqb3IgdHJhbnNtaXQgZXJyb3Igc3RhdHVzICV4XG4iLCBzdGF0dXMpOworCQljYXJkLT50eF9idWZmZXJbNCpkZXNjbnJdID0gMDsKKwkJbmV0aWZfd2FrZV9xdWV1ZSAoZGV2KTsKKwl9CiAjZW5kaWYKLQkJaWYgKHN0YXR1cyA+IDApIHsJLyogYml0IDMxIGlzIDAgd2hlbiBkb25lICovCi0JCQlpZiAoY2FyZC0+dHhfc2tiW2Rlc2Nucl0hPU5VTEwpIHsKLQkJCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IGNhcmQtPnR4X3NrYltkZXNjbnJdLT5sZW47Ci0JCQkJZGV2X2tmcmVlX3NrYl9pcnEoY2FyZC0+dHhfc2tiW2Rlc2Nucl0pOwotCQkJfQotCQkJY2FyZC0+dHhfc2tiW2Rlc2Nucl0gPSBOVUxMOwotCQkJLyogQml0IDggaW4gdGhlIHN0YXR1cyBmaWVsZCBpcyAxIGlmIHRoZXJlIHdhcyBhIGNvbGxpc2lvbiAqLwotCQkJaWYgKHN0YXR1cyYoMTw8OCkpCi0JCQkJZGV2LT5zdGF0cy5jb2xsaXNpb25zKys7Ci0JCQljYXJkLT50eF9idWZmZXJbNCpkZXNjbnJdID0gMDsgLyogZGVzY3JpcHRvciBpcyBmcmVlIGFnYWluICovCi0JCQluZXRpZl93YWtlX3F1ZXVlIChkZXYpOwotCQkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJaWYgKHN0YXR1cyA+IDApIHsJLyogYml0IDMxIGlzIDAgd2hlbiBkb25lICovCisJCWlmIChjYXJkLT50eF9za2JbZGVzY25yXSE9TlVMTCkgeworCQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBjYXJkLT50eF9za2JbZGVzY25yXS0+bGVuOworCQkJZGV2X2tmcmVlX3NrYl9pcnEoY2FyZC0+dHhfc2tiW2Rlc2Nucl0pOwogCQl9Ci0KLQkJbGVhdmUoImludmVzdGlnYXRlX3dyaXRlX2Rlc2NyaXB0b3IiKTsKLQorCQljYXJkLT50eF9za2JbZGVzY25yXSA9IE5VTEw7CisJCS8qIEJpdCA4IGluIHRoZSBzdGF0dXMgZmllbGQgaXMgMSBpZiB0aGVyZSB3YXMgYSBjb2xsaXNpb24gKi8KKwkJaWYgKHN0YXR1cyAmICgxIDw8IDgpKQorCQkJZGV2LT5zdGF0cy5jb2xsaXNpb25zKys7CisJCWNhcmQtPnR4X2J1ZmZlcls0KmRlc2Nucl0gPSAwOyAvKiBkZXNjcmlwdG9yIGlzIGZyZWUgYWdhaW4gKi8KKwkJbmV0aWZfd2FrZV9xdWV1ZSAoZGV2KTsKKwkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJfQogfQogCi0KIHN0YXRpYyBpbnQgX19pbml0IHhpcmNvbV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnhpcmNvbV9vcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVuLmMgYi9kcml2ZXJzL25ldC90dW4uYwppbmRleCBmNWU5YWMwLi43NGU5NDA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dW4uYworKysgYi9kcml2ZXJzL25ldC90dW4uYwpAQCAtMTIzLDYgKzEyMyw5IEBACiAJZ2lkX3QJCQlncm91cDsKIAogCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7CisJdTMyCQkJc2V0X2ZlYXR1cmVzOworI2RlZmluZSBUVU5fVVNFUl9GRUFUVVJFUyAoTkVUSUZfRl9IV19DU1VNfE5FVElGX0ZfVFNPX0VDTnxORVRJRl9GX1RTT3wgXAorCQkJICBORVRJRl9GX1RTTzZ8TkVUSUZfRl9VRk8pCiAJc3RydWN0IGZhc3luY19zdHJ1Y3QJKmZhc3luYzsKIAogCXN0cnVjdCB0YXBfZmlsdGVyICAgICAgIHR4Zmx0OwpAQCAtNDUxLDEyICs0NTQsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHUzMiB0dW5fbmV0X2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmVhdHVyZXMpCit7CisJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IG5ldGRldl9wcml2KGRldik7CisKKwlyZXR1cm4gKGZlYXR1cmVzICYgdHVuLT5zZXRfZmVhdHVyZXMpIHwgKGZlYXR1cmVzICYgflRVTl9VU0VSX0ZFQVRVUkVTKTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0dW5fbmV0ZGV2X29wcyA9IHsKIAkubmRvX3VuaW5pdAkJPSB0dW5fbmV0X3VuaW5pdCwKIAkubmRvX29wZW4JCT0gdHVuX25ldF9vcGVuLAogCS5uZG9fc3RvcAkJPSB0dW5fbmV0X2Nsb3NlLAogCS5uZG9fc3RhcnRfeG1pdAkJPSB0dW5fbmV0X3htaXQsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IHR1bl9uZXRfY2hhbmdlX210dSwKKwkubmRvX2ZpeF9mZWF0dXJlcwk9IHR1bl9uZXRfZml4X2ZlYXR1cmVzLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0YXBfbmV0ZGV2X29wcyA9IHsKQEAgLTQ2NSw2ICs0NzYsNyBAQAogCS5uZG9fc3RvcAkJPSB0dW5fbmV0X2Nsb3NlLAogCS5uZG9fc3RhcnRfeG1pdAkJPSB0dW5fbmV0X3htaXQsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IHR1bl9uZXRfY2hhbmdlX210dSwKKwkubmRvX2ZpeF9mZWF0dXJlcwk9IHR1bl9uZXRfZml4X2ZlYXR1cmVzLAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gdHVuX25ldF9tY2xpc3QsCiAJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBldGhfbWFjX2FkZHIsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCkBAIC02MjgsOCArNjQwLDcgQEAKIAkJCWtmcmVlX3NrYihza2IpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQl9IGVsc2UgaWYgKHR1bi0+ZmxhZ3MgJiBUVU5fTk9DSEVDS1NVTSkKLQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwl9CiAKIAlzd2l0Y2ggKHR1bi0+ZmxhZ3MgJiBUVU5fVFlQRV9NQVNLKSB7CiAJY2FzZSBUVU5fVFVOX0RFVjoKQEAgLTEwODgsMTEgKzEwOTksOSBAQAogCiAJCXR1bl9uZXRfaW5pdChkZXYpOwogCi0JCWlmIChzdHJjaHIoZGV2LT5uYW1lLCAnJScpKSB7Ci0JCQllcnIgPSBkZXZfYWxsb2NfbmFtZShkZXYsIGRldi0+bmFtZSk7Ci0JCQlpZiAoZXJyIDwgMCkKLQkJCQlnb3RvIGVycl9mcmVlX3NrOwotCQl9CisJCWRldi0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9GUkFHTElTVCB8CisJCQlUVU5fVVNFUl9GRUFUVVJFUzsKKwkJZGV2LT5mZWF0dXJlcyA9IGRldi0+aHdfZmVhdHVyZXM7CiAKIAkJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKHR1bi0+ZGV2KTsKIAkJaWYgKGVyciA8IDApCkBAIC0xMTU4LDE4ICsxMTY3LDEyIEBACiAKIC8qIFRoaXMgaXMgbGlrZSBhIGN1dC1kb3duIGV0aHRvb2wgb3BzLCBleGNlcHQgZG9uZSB2aWEgdHVuIGZkIHNvIG5vCiAgKiBwcml2cyByZXF1aXJlZC4gKi8KLXN0YXRpYyBpbnQgc2V0X29mZmxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IHNldF9vZmZsb2FkKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXUzMiBvbGRfZmVhdHVyZXMsIGZlYXR1cmVzOwotCi0Jb2xkX2ZlYXR1cmVzID0gZGV2LT5mZWF0dXJlczsKLQkvKiBVbnNldCBmZWF0dXJlcywgc2V0IHRoZW0gYXMgd2UgY2hldyBvbiB0aGUgYXJnLiAqLwotCWZlYXR1cmVzID0gKG9sZF9mZWF0dXJlcyAmIH4oTkVUSUZfRl9IV19DU1VNfE5FVElGX0ZfU0d8TkVUSUZfRl9GUkFHTElTVAotCQkJCSAgICB8TkVUSUZfRl9UU09fRUNOfE5FVElGX0ZfVFNPfE5FVElGX0ZfVFNPNgotCQkJCSAgICB8TkVUSUZfRl9VRk8pKTsKKwl1MzIgZmVhdHVyZXMgPSAwOwogCiAJaWYgKGFyZyAmIFRVTl9GX0NTVU0pIHsKLQkJZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNfE5FVElGX0ZfU0d8TkVUSUZfRl9GUkFHTElTVDsKKwkJZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNOwogCQlhcmcgJj0gflRVTl9GX0NTVU07CiAKIAkJaWYgKGFyZyAmIChUVU5fRl9UU080fFRVTl9GX1RTTzYpKSB7CkBAIC0xMTk1LDkgKzExOTgsOCBAQAogCWlmIChhcmcpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZGV2LT5mZWF0dXJlcyA9IGZlYXR1cmVzOwotCWlmIChvbGRfZmVhdHVyZXMgIT0gZGV2LT5mZWF0dXJlcykKLQkJbmV0ZGV2X2ZlYXR1cmVzX2NoYW5nZShkZXYpOworCXR1bi0+c2V0X2ZlYXR1cmVzID0gZmVhdHVyZXM7CisJbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyh0dW4tPmRldik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyNjIsMTIgKzEyNjQsOSBAQAogCiAJY2FzZSBUVU5TRVROT0NTVU06CiAJCS8qIERpc2FibGUvRW5hYmxlIGNoZWNrc3VtICovCi0JCWlmIChhcmcpCi0JCQl0dW4tPmZsYWdzIHw9IFRVTl9OT0NIRUNLU1VNOwotCQllbHNlCi0JCQl0dW4tPmZsYWdzICY9IH5UVU5fTk9DSEVDS1NVTTsKIAotCQl0dW5fZGVidWcoS0VSTl9JTkZPLCB0dW4sICJjaGVja3N1bSAlc1xuIiwKKwkJLyogW3VuaW1wbGVtZW50ZWRdICovCisJCXR1bl9kZWJ1ZyhLRVJOX0lORk8sIHR1biwgImlnbm9yZWQ6IHNldCBjaGVja3N1bSAlc1xuIiwKIAkJCSAgYXJnID8gImRpc2FibGVkIiA6ICJlbmFibGVkIik7CiAJCWJyZWFrOwogCkBAIC0xMzE2LDcgKzEzMTUsNyBAQAogCQlicmVhazsKICNlbmRpZgogCWNhc2UgVFVOU0VUT0ZGTE9BRDoKLQkJcmV0ID0gc2V0X29mZmxvYWQodHVuLT5kZXYsIGFyZyk7CisJCXJldCA9IHNldF9vZmZsb2FkKHR1biwgYXJnKTsKIAkJYnJlYWs7CiAKIAljYXNlIFRVTlNFVFRYRklMVEVSOgpAQCAtMTU0OCw3ICsxNTQ3LDcgQEAKIHsKIAljbWQtPnN1cHBvcnRlZAkJPSAwOwogCWNtZC0+YWR2ZXJ0aXNpbmcJPSAwOwotCWNtZC0+c3BlZWQJCT0gU1BFRURfMTA7CisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgU1BFRURfMTApOwogCWNtZC0+ZHVwbGV4CQk9IERVUExFWF9GVUxMOwogCWNtZC0+cG9ydAkJPSBQT1JUX1RQOwogCWNtZC0+cGh5X2FkZHJlc3MJPSAwOwpAQCAtMTU5NSwzMCArMTU5NCwxMiBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyB1MzIgdHVuX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IG5ldGRldl9wcml2KGRldik7Ci0JcmV0dXJuICh0dW4tPmZsYWdzICYgVFVOX05PQ0hFQ0tTVU0pID09IDA7Ci19Ci0KLXN0YXRpYyBpbnQgdHVuX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBuZXRkZXZfcHJpdihkZXYpOwotCWlmIChkYXRhKQotCQl0dW4tPmZsYWdzICY9IH5UVU5fTk9DSEVDS1NVTTsKLQllbHNlCi0JCXR1bi0+ZmxhZ3MgfD0gVFVOX05PQ0hFQ0tTVU07Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdHVuX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MJPSB0dW5fZ2V0X3NldHRpbmdzLAogCS5nZXRfZHJ2aW5mbwk9IHR1bl9nZXRfZHJ2aW5mbywKIAkuZ2V0X21zZ2xldmVsCT0gdHVuX2dldF9tc2dsZXZlbCwKIAkuc2V0X21zZ2xldmVsCT0gdHVuX3NldF9tc2dsZXZlbCwKIAkuZ2V0X2xpbmsJPSBldGh0b29sX29wX2dldF9saW5rLAotCS5nZXRfcnhfY3N1bQk9IHR1bl9nZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0JPSB0dW5fc2V0X3J4X2NzdW0KIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHlwaG9vbi5jIGIvZHJpdmVycy9uZXQvdHlwaG9vbi5jCmluZGV4IDgyNjUzY2IuLjNkZTQyODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R5cGhvb24uYworKysgYi9kcml2ZXJzL25ldC90eXBob29uLmMKQEAgLTEwNTAsNyArMTA1MCw3IEBACiAKIAkvKiBuZWVkIHRvIGdldCBzdGF0cyB0byBtYWtlIHRoZXNlIGxpbmsgc3BlZWQvZHVwbGV4IHZhbGlkICovCiAJdHlwaG9vbl9kb19nZXRfc3RhdHModHApOwotCWNtZC0+c3BlZWQgPSB0cC0+c3BlZWQ7CisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgdHAtPnNwZWVkKTsKIAljbWQtPmR1cGxleCA9IHRwLT5kdXBsZXg7CiAJY21kLT5waHlfYWRkcmVzcyA9IDA7CiAJY21kLT50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7CkBAIC0xMDY4LDI1ICsxMDY4LDI2IEBACiB0eXBob29uX3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3QgdHlwaG9vbiAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiBzcGVlZCA9IGV0aHRvb2xfY21kX3NwZWVkKGNtZCk7CiAJc3RydWN0IGNtZF9kZXNjIHhwX2NtZDsKIAlfX2xlMTYgeGN2cjsKIAlpbnQgZXJyOwogCiAJZXJyID0gLUVJTlZBTDsKLQlpZihjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHsKKwlpZiAoY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSB7CiAJCXhjdnIgPSBUWVBIT09OX1hDVlJfQVVUT05FRzsKIAl9IGVsc2UgewotCQlpZihjbWQtPmR1cGxleCA9PSBEVVBMRVhfSEFMRikgewotCQkJaWYoY21kLT5zcGVlZCA9PSBTUEVFRF8xMCkKKwkJaWYgKGNtZC0+ZHVwbGV4ID09IERVUExFWF9IQUxGKSB7CisJCQlpZiAoc3BlZWQgPT0gU1BFRURfMTApCiAJCQkJeGN2ciA9IFRZUEhPT05fWENWUl8xMEhBTEY7Ci0JCQllbHNlIGlmKGNtZC0+c3BlZWQgPT0gU1BFRURfMTAwKQorCQkJZWxzZSBpZiAoc3BlZWQgPT0gU1BFRURfMTAwKQogCQkJCXhjdnIgPSBUWVBIT09OX1hDVlJfMTAwSEFMRjsKIAkJCWVsc2UKIAkJCQlnb3RvIG91dDsKLQkJfSBlbHNlIGlmKGNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKSB7Ci0JCQlpZihjbWQtPnNwZWVkID09IFNQRUVEXzEwKQorCQl9IGVsc2UgaWYgKGNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKSB7CisJCQlpZiAoc3BlZWQgPT0gU1BFRURfMTApCiAJCQkJeGN2ciA9IFRZUEhPT05fWENWUl8xMEZVTEw7Ci0JCQllbHNlIGlmKGNtZC0+c3BlZWQgPT0gU1BFRURfMTAwKQorCQkJZWxzZSBpZiAoc3BlZWQgPT0gU1BFRURfMTAwKQogCQkJCXhjdnIgPSBUWVBIT09OX1hDVlJfMTAwRlVMTDsKIAkJCWVsc2UKIAkJCQlnb3RvIG91dDsKQEAgLTExMDUsNyArMTEwNiw3IEBACiAJCXRwLT5zcGVlZCA9IDB4ZmY7CS8qIGludmFsaWQgKi8KIAkJdHAtPmR1cGxleCA9IDB4ZmY7CS8qIGludmFsaWQgKi8KIAl9IGVsc2UgewotCQl0cC0+c3BlZWQgPSBjbWQtPnNwZWVkOworCQl0cC0+c3BlZWQgPSBzcGVlZDsKIAkJdHAtPmR1cGxleCA9IGNtZC0+ZHVwbGV4OwogCX0KIApAQCAtMTE0NCwyOCArMTE0NSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1MzIKLXR5cGhvb25fZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQkvKiBGb3Igbm93LCB3ZSBkb24ndCBhbGxvdyB0dXJuaW5nIG9mZiBSWCBjaGVja3N1bXMuCi0JICovCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQKLXR5cGhvb25fc2V0X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCS8qIFRoZXJlJ3Mgbm8gd2F5IHRvIHR1cm4gb2ZmIHRoZSBSWCBWTEFOIG9mZmxvYWRpbmcgYW5kIHN0cmlwcGluZwotCSAqIG9uIHRoZSBjdXJyZW50IDNYUCBmaXJtd2FyZSAtLSBpdCBkb2VzIG5vdCByZXNwZWN0IHRoZSBvZmZsb2FkCi0JICogc2V0dGluZ3MgLS0gc28gd2Ugb25seSBhbGxvdyB0aGUgdXNlciB0byB0b2dnbGUgdGhlIFRYIHByb2Nlc3NpbmcuCi0JICovCi0JaWYgKCEoZGF0YSAmIEVUSF9GTEFHX1JYVkxBTikpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIGV0aHRvb2xfb3Bfc2V0X2ZsYWdzKGRldiwgZGF0YSwKLQkJCQkgICAgRVRIX0ZMQUdfUlhWTEFOIHwgRVRIX0ZMQUdfVFhWTEFOKTsKLX0KLQogc3RhdGljIHZvaWQKIHR5cGhvb25fZ2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKmVyaW5nKQogewpAQCAtMTE4NywxMyArMTE2Niw3IEBACiAJLmdldF93b2wJCT0gdHlwaG9vbl9nZXRfd29sLAogCS5zZXRfd29sCQk9IHR5cGhvb25fc2V0X3dvbCwKIAkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKLQkuZ2V0X3J4X2NzdW0JCT0gdHlwaG9vbl9nZXRfcnhfY3N1bSwKLQkuc2V0X3R4X2NzdW0JCT0gZXRodG9vbF9vcF9zZXRfdHhfY3N1bSwKLQkuc2V0X3NnCQkJPSBldGh0b29sX29wX3NldF9zZywKLQkuc2V0X3RzbwkJPSBldGh0b29sX29wX3NldF90c28sCiAJLmdldF9yaW5ncGFyYW0JCT0gdHlwaG9vbl9nZXRfcmluZ3BhcmFtLAotCS5zZXRfZmxhZ3MJCT0gdHlwaG9vbl9zZXRfZmxhZ3MsCi0JLmdldF9mbGFncwkJPSBldGh0b29sX29wX2dldF9mbGFncywKIH07CiAKIHN0YXRpYyBpbnQKQEAgLTI0ODIsMTAgKzI0NTUsMTUgQEAKIAogCS8qIFdlIGNhbiBoYW5kbGUgc2NhdHRlciBnYXRoZXIsIHVwIHRvIDE2IGVudHJpZXMsIGFuZAogCSAqIHdlIGNhbiBkbyBJUCBjaGVja3N1bW1pbmcgKG9ubHkgdmVyc2lvbiA0LCBkb2guLi4pCisJICoKKwkgKiBUaGVyZSdzIG5vIHdheSB0byB0dXJuIG9mZiB0aGUgUlggVkxBTiBvZmZsb2FkaW5nIGFuZCBzdHJpcHBpbmcKKwkgKiBvbiB0aGUgY3VycmVudCAzWFAgZmlybXdhcmUgLS0gaXQgZG9lcyBub3QgcmVzcGVjdCB0aGUgb2ZmbG9hZAorCSAqIHNldHRpbmdzIC0tIHNvIHdlIG9ubHkgYWxsb3cgdGhlIHVzZXIgdG8gdG9nZ2xlIHRoZSBUWCBwcm9jZXNzaW5nLgogCSAqLwotCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTTsKLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWDsKLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOworCWRldi0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9UU08gfAorCQlORVRJRl9GX0hXX1ZMQU5fVFg7CisJZGV2LT5mZWF0dXJlcyA9IGRldi0+aHdfZmVhdHVyZXMgfAorCQlORVRJRl9GX0hXX1ZMQU5fUlggfCBORVRJRl9GX1JYQ1NVTTsKIAogCWlmKHJlZ2lzdGVyX25ldGRldihkZXYpIDwgMCkgewogCQllcnJfbXNnID0gInVuYWJsZSB0byByZWdpc3RlciBuZXRkZXYiOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdWNjX2dldGhfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvdWNjX2dldGhfZXRodG9vbC5jCmluZGV4IDZmOTJlNDguLmE5NzI1N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VjY19nZXRoX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aF9ldGh0b29sLmMKQEAgLTYsNyArNiw3IEBACiAgKiBBdXRob3I6IExpIFlhbmcgPGxlb2xpQGZyZWVzY2FsZS5jb20+CiAgKgogICogTGltaXRhdGlvbjoKLSAqIENhbiBvbmx5IGdldC9zZXQgc2V0dHRpbmdzIG9mIHRoZSBmaXJzdCBxdWV1ZS4KKyAqIENhbiBvbmx5IGdldC9zZXQgc2V0dGluZ3Mgb2YgdGhlIGZpcnN0IHF1ZXVlLgogICogTmVlZCB0byByZS1vcGVuIHRoZSBpbnRlcmZhY2UgbWFudWFsbHkgYWZ0ZXIgY2hhbmdpbmcgc29tZSBwYXJhbWV0ZXJzLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdApAQCAtNDEwLDcgKzQxMCw2IEBACiAJLnNldF9yaW5ncGFyYW0gICAgICAgICAgPSB1ZWNfc2V0X3JpbmdwYXJhbSwKIAkuZ2V0X3BhdXNlcGFyYW0gICAgICAgICA9IHVlY19nZXRfcGF1c2VwYXJhbSwKIAkuc2V0X3BhdXNlcGFyYW0gICAgICAgICA9IHVlY19zZXRfcGF1c2VwYXJhbSwKLQkuc2V0X3NnICAgICAgICAgICAgICAgICA9IGV0aHRvb2xfb3Bfc2V0X3NnLAogCS5nZXRfc3NldF9jb3VudAkJPSB1ZWNfZ2V0X3NzZXRfY291bnQsCiAJLmdldF9zdHJpbmdzICAgICAgICAgICAgPSB1ZWNfZ2V0X3N0cmluZ3MsCiAJLmdldF9ldGh0b29sX3N0YXRzICAgICAgPSB1ZWNfZ2V0X2V0aHRvb2xfc3RhdHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnCmluZGV4IDNlYzIyYzMuLjlkNGY5MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnCkBAIC0yNTgsNyArMjU4LDcgQEAKIAkgIG9wdGlvbmFsbHkgd2l0aCBMRURzIHRoYXQgaW5kaWNhdGUgdHJhZmZpYwogCiBjb25maWcgVVNCX05FVF9QTFVTQgotCXRyaXN0YXRlICJQcm9saWZpYyBQTC0yMzAxLzIzMDIgYmFzZWQgY2FibGVzIgorCXRyaXN0YXRlICJQcm9saWZpYyBQTC0yMzAxLzIzMDIvMjVBMSBiYXNlZCBjYWJsZXMiCiAJIyBpZiB0aGUgaGFuZHNoYWtlL2luaXQvcmVzZXQgcHJvYmxlbXMsIGZyb20gb3JpZ2luYWwgJ3BsdXNiJywKIAkjIGFyZSBldmVyIHJlc29sdmVkIC4uLiB0aGVuIHJlbW92ZSAiZXhwZXJpbWVudGFsIgogCWRlcGVuZHMgb24gVVNCX1VTQk5FVCAmJiBFWFBFUklNRU5UQUwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9hc2l4LmMgYi9kcml2ZXJzL25ldC91c2IvYXNpeC5jCmluZGV4IDYxNDBiNTYuLjY5OThhYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9hc2l4LmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2FzaXguYwpAQCAtODQ3LDcgKzg0Nyw3IEBACiBzdGF0aWMgaW50IGF4ODgxNzJfbGlua19yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpCiB7CiAJdTggbW9kZTsKLQlzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZDsKKwlzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZCA9IHsgLmNtZCA9IEVUSFRPT0xfR1NFVCB9OwogCiAJbWlpX2NoZWNrX21lZGlhKCZkZXYtPm1paSwgMSwgMSk7CiAJbWlpX2V0aHRvb2xfZ3NldCgmZGV2LT5taWksICZlY21kKTsKQEAgLTg1Niw4ICs4NTYsOCBAQAogCWlmIChlY21kLmR1cGxleCAhPSBEVVBMRVhfRlVMTCkKIAkJbW9kZSB8PSB+QVg4ODE3Ml9NRURJVU1fRkQ7CiAKLQluZXRkZXZfZGJnKGRldi0+bmV0LCAiYXg4ODE3Ml9saW5rX3Jlc2V0KCkgc3BlZWQ6ICVkIGR1cGxleDogJWQgc2V0dGluZyBtb2RlIHRvIDB4JTA0eFxuIiwKLQkJICAgZWNtZC5zcGVlZCwgZWNtZC5kdXBsZXgsIG1vZGUpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJheDg4MTcyX2xpbmtfcmVzZXQoKSBzcGVlZDogJXUgZHVwbGV4OiAlZCBzZXR0aW5nIG1vZGUgdG8gMHglMDR4XG4iLAorCQkgICBldGh0b29sX2NtZF9zcGVlZCgmZWNtZCksIGVjbWQuZHVwbGV4LCBtb2RlKTsKIAogCWFzaXhfd3JpdGVfbWVkaXVtX21vZGUoZGV2LCBtb2RlKTsKIApAQCAtOTQ3LDIwICs5NDcsMjAgQEAKIHN0YXRpYyBpbnQgYXg4ODc3Ml9saW5rX3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldikKIHsKIAl1MTYgbW9kZTsKLQlzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZDsKKwlzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZCA9IHsgLmNtZCA9IEVUSFRPT0xfR1NFVCB9OwogCiAJbWlpX2NoZWNrX21lZGlhKCZkZXYtPm1paSwgMSwgMSk7CiAJbWlpX2V0aHRvb2xfZ3NldCgmZGV2LT5taWksICZlY21kKTsKIAltb2RlID0gQVg4ODc3Ml9NRURJVU1fREVGQVVMVDsKIAotCWlmIChlY21kLnNwZWVkICE9IFNQRUVEXzEwMCkKKwlpZiAoZXRodG9vbF9jbWRfc3BlZWQoJmVjbWQpICE9IFNQRUVEXzEwMCkKIAkJbW9kZSAmPSB+QVhfTUVESVVNX1BTOwogCiAJaWYgKGVjbWQuZHVwbGV4ICE9IERVUExFWF9GVUxMKQogCQltb2RlICY9IH5BWF9NRURJVU1fRkQ7CiAKLQluZXRkZXZfZGJnKGRldi0+bmV0LCAiYXg4ODc3Ml9saW5rX3Jlc2V0KCkgc3BlZWQ6ICVkIGR1cGxleDogJWQgc2V0dGluZyBtb2RlIHRvIDB4JTA0eFxuIiwKLQkJICAgZWNtZC5zcGVlZCwgZWNtZC5kdXBsZXgsIG1vZGUpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJheDg4NzcyX2xpbmtfcmVzZXQoKSBzcGVlZDogJXUgZHVwbGV4OiAlZCBzZXR0aW5nIG1vZGUgdG8gMHglMDR4XG4iLAorCQkgICBldGh0b29sX2NtZF9zcGVlZCgmZWNtZCksIGVjbWQuZHVwbGV4LCBtb2RlKTsKIAogCWFzaXhfd3JpdGVfbWVkaXVtX21vZGUoZGV2LCBtb2RlKTsKIApAQCAtMTE3MywxOCArMTE3MywyMCBAQAogc3RhdGljIGludCBheDg4MTc4X2xpbmtfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KQogewogCXUxNiBtb2RlOwotCXN0cnVjdCBldGh0b29sX2NtZCBlY21kOworCXN0cnVjdCBldGh0b29sX2NtZCBlY21kID0geyAuY21kID0gRVRIVE9PTF9HU0VUIH07CiAJc3RydWN0IGFzaXhfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgYXNpeF9kYXRhICopJmRldi0+ZGF0YTsKKwl1MzIgc3BlZWQ7CiAKIAluZXRkZXZfZGJnKGRldi0+bmV0LCAiYXg4ODE3OF9saW5rX3Jlc2V0KClcbiIpOwogCiAJbWlpX2NoZWNrX21lZGlhKCZkZXYtPm1paSwgMSwgMSk7CiAJbWlpX2V0aHRvb2xfZ3NldCgmZGV2LT5taWksICZlY21kKTsKIAltb2RlID0gQVg4ODE3OF9NRURJVU1fREVGQVVMVDsKKwlzcGVlZCA9IGV0aHRvb2xfY21kX3NwZWVkKCZlY21kKTsKIAotCWlmIChlY21kLnNwZWVkID09IFNQRUVEXzEwMDApCisJaWYgKHNwZWVkID09IFNQRUVEXzEwMDApCiAJCW1vZGUgfD0gQVhfTUVESVVNX0dNOwotCWVsc2UgaWYgKGVjbWQuc3BlZWQgPT0gU1BFRURfMTAwKQorCWVsc2UgaWYgKHNwZWVkID09IFNQRUVEXzEwMCkKIAkJbW9kZSB8PSBBWF9NRURJVU1fUFM7CiAJZWxzZQogCQltb2RlICY9IH4oQVhfTUVESVVNX1BTIHwgQVhfTUVESVVNX0dNKTsKQEAgLTExOTYsMTMgKzExOTgsMTMgQEAKIAllbHNlCiAJCW1vZGUgJj0gfkFYX01FRElVTV9GRDsKIAotCW5ldGRldl9kYmcoZGV2LT5uZXQsICJheDg4MTc4X2xpbmtfcmVzZXQoKSBzcGVlZDogJWQgZHVwbGV4OiAlZCBzZXR0aW5nIG1vZGUgdG8gMHglMDR4XG4iLAotCQkgICBlY21kLnNwZWVkLCBlY21kLmR1cGxleCwgbW9kZSk7CisJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgImF4ODgxNzhfbGlua19yZXNldCgpIHNwZWVkOiAldSBkdXBsZXg6ICVkIHNldHRpbmcgbW9kZSB0byAweCUwNHhcbiIsCisJCSAgIHNwZWVkLCBlY21kLmR1cGxleCwgbW9kZSk7CiAKIAlhc2l4X3dyaXRlX21lZGl1bV9tb2RlKGRldiwgbW9kZSk7CiAKIAlpZiAoZGF0YS0+cGh5bW9kZSA9PSBQSFlfTU9ERV9NQVJWRUxMICYmIGRhdGEtPmxlZG1vZGUpCi0JCW1hcnZlbGxfbGVkX3N0YXR1cyhkZXYsIGVjbWQuc3BlZWQpOworCQltYXJ2ZWxsX2xlZF9zdGF0dXMoZGV2LCBzcGVlZCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMgYi9kcml2ZXJzL25ldC91c2IvY2F0Yy5jCmluZGV4IDk3Njg3ZDMuLmQ3MjIxYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2NhdGMuYwpAQCAtNjg2LDcgKzY4Niw3IEBACiAKIAljbWQtPnN1cHBvcnRlZCA9IFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgfCBTVVBQT1JURURfVFA7CiAJY21kLT5hZHZlcnRpc2luZyA9IEFEVkVSVElTRURfMTBiYXNlVF9IYWxmIHwgQURWRVJUSVNFRF9UUDsKLQljbWQtPnNwZWVkID0gU1BFRURfMTA7CisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgU1BFRURfMTApOwogCWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0hBTEY7CiAJY21kLT5wb3J0ID0gUE9SVF9UUDsgCiAJY21kLT5waHlfYWRkcmVzcyA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jIGIvZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYwppbmRleCAxMDMzZWY2Li40YWI1NTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmMKQEAgLTU0LDEzICs1NCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYi91c2JuZXQuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvY2RjLmg+CiAKLSNkZWZpbmUJRFJJVkVSX1ZFUlNJT04JCQkJIjIzLUFwci0yMDExIgorI2RlZmluZQlEUklWRVJfVkVSU0lPTgkJCQkiMDYtTWF5LTIwMTEiCiAKIC8qIENEQyBOQ00gc3ViY2xhc3MgMy4yLjEgKi8KICNkZWZpbmUgVVNCX0NEQ19OQ01fTkRQMTZfTEVOR1RIX01JTgkJMHgxMAogCiAvKiBNYXhpbXVtIE5UQiBsZW5ndGggKi8KLSNkZWZpbmUJQ0RDX05DTV9OVEJfTUFYX1NJWkVfVFgJCQkoMTYzODQgKyA0KSAvKiBieXRlcywgbXVzdCBiZSBzaG9ydCB0ZXJtaW5hdGVkICovCisjZGVmaW5lCUNEQ19OQ01fTlRCX01BWF9TSVpFX1RYCQkJMTYzODQJLyogYnl0ZXMgKi8KICNkZWZpbmUJQ0RDX05DTV9OVEJfTUFYX1NJWkVfUlgJCQkxNjM4NAkvKiBieXRlcyAqLwogCiAvKiBNaW5pbXVtIHZhbHVlIGZvciBNYXhEYXRhZ3JhbVNpemUsIGNoLiA2LjIuOSAqLwpAQCAtNzIyLDcgKzcyMiw3IEBACiAKIAl9IGVsc2UgewogCQkvKiByZXNldCB2YXJpYWJsZXMgKi8KLQkJc2tiX291dCA9IGFsbG9jX3NrYihjdHgtPnR4X21heCwgR0ZQX0FUT01JQyk7CisJCXNrYl9vdXQgPSBhbGxvY19za2IoKGN0eC0+dHhfbWF4ICsgMSksIEdGUF9BVE9NSUMpOwogCQlpZiAoc2tiX291dCA9PSBOVUxMKSB7CiAJCQlpZiAoc2tiICE9IE5VTEwpIHsKIAkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwpAQCAtODYxLDggKzg2MSwxMSBAQAogCS8qIHN0b3JlIGxhc3Qgb2Zmc2V0ICovCiAJbGFzdF9vZmZzZXQgPSBvZmZzZXQ7CiAKLQlpZiAoKGxhc3Rfb2Zmc2V0IDwgY3R4LT50eF9tYXgpICYmICgobGFzdF9vZmZzZXQgJQotCQkJbGUxNl90b19jcHUoY3R4LT5vdXRfZXAtPmRlc2Mud01heFBhY2tldFNpemUpKSA9PSAwKSkgeworCWlmICgoKGxhc3Rfb2Zmc2V0IDwgY3R4LT50eF9tYXgpICYmICgobGFzdF9vZmZzZXQgJQorCQkJbGUxNl90b19jcHUoY3R4LT5vdXRfZXAtPmRlc2Mud01heFBhY2tldFNpemUpKSA9PSAwKSkgfHwKKwkgICAgKCgobGFzdF9vZmZzZXQgPT0gY3R4LT50eF9tYXgpICYmICgoY3R4LT50eF9tYXggJQorCQlsZTE2X3RvX2NwdShjdHgtPm91dF9lcC0+ZGVzYy53TWF4UGFja2V0U2l6ZSkpID09IDApKSAmJgorCQkoY3R4LT50eF9tYXggPCBsZTMyX3RvX2NwdShjdHgtPm5jbV9wYXJtLmR3TnRiT3V0TWF4U2l6ZSkpKSkgewogCQkvKiBmb3JjZSBzaG9ydCBwYWNrZXQgKi8KIAkJKigoKHU4ICopc2tiX291dC0+ZGF0YSkgKyBsYXN0X29mZnNldCkgPSAwOwogCQlsYXN0X29mZnNldCsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jIGIvZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jCmluZGV4IDUwMDJmNWIuLjFkOTMxMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYworKysgYi9kcml2ZXJzL25ldC91c2IvZG05NjAxLmMKQEAgLTU5OSwxMyArNTk5LDEzIEBACiAKIHN0YXRpYyBpbnQgZG05NjAxX2xpbmtfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KQogewotCXN0cnVjdCBldGh0b29sX2NtZCBlY21kOworCXN0cnVjdCBldGh0b29sX2NtZCBlY21kID0geyAuY21kID0gRVRIVE9PTF9HU0VUIH07CiAKIAltaWlfY2hlY2tfbWVkaWEoJmRldi0+bWlpLCAxLCAxKTsKIAltaWlfZXRodG9vbF9nc2V0KCZkZXYtPm1paSwgJmVjbWQpOwogCi0JbmV0ZGV2X2RiZyhkZXYtPm5ldCwgImxpbmtfcmVzZXQoKSBzcGVlZDogJWQgZHVwbGV4OiAlZFxuIiwKLQkJICAgZWNtZC5zcGVlZCwgZWNtZC5kdXBsZXgpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJsaW5rX3Jlc2V0KCkgc3BlZWQ6ICV1IGR1cGxleDogJWRcbiIsCisJCSAgIGV0aHRvb2xfY21kX3NwZWVkKCZlY21kKSwgZWNtZC5kdXBsZXgpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcGx1c2IuYyBiL2RyaXZlcnMvbmV0L3VzYi9wbHVzYi5jCmluZGV4IDgyM2M1MzcuLjIxN2FlYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9wbHVzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9wbHVzYi5jCkBAIC00NSw2ICs0NSwxNCBAQAogICogc2VlbXMgdG8gZ2V0IHdlZGdlZCB1bmRlciBsb2FkLiAgUHJvbGlmaWMgZG9jcyBhcmUgd2VhaywgYW5kCiAgKiBkb24ndCBpZGVudGlmeSBkaWZmZXJlbmNlcyBiZXR3ZWVuIFBMMjMwMSBhbmQgUEwyMzAyLCBtdWNoIGxlc3MKICAqIGFueXRoaW5nIHRvIGV4cGxhaW4gdGhlIGRpZmZlcmVudCBQTDIzMDIgdmVyc2lvbnMgb2JzZXJ2ZWQuCisgKgorICogTk9URTogIHBsMjUwMSBoYXMgc2V2ZXJhbCBtb2RlcywgaW5jbHVkaW5nIHBsMjMwMSBhbmQgcGwyMzAyCisgKiBjb21wYXRpYmlsaXR5LiAgIFNvbWUgZG9jcyBzdWdnZXN0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gMjMwMQorICogYW5kIDIzMDIgaXMgb25seSB0byBtYWtlIE1TLVdpbmRvd3MgdXNlIGEgZGlmZmVyZW50IGRyaXZlci4uLgorICoKKyAqIHBsMjVhMSBnbHVlIGJhc2VkIG9uIHBhdGNoIGZyb20gVG9ueSBHaWJicy4gIFByb2xpZmljICJkb2NzIiBvbgorICogdGhpcyBjaGlwIGFyZSBhcyB1c3VhbCBpbmNvbXBsZXRlIGFib3V0IHdoYXQgY29udHJvbCBtZXNzYWdlcworICogYXJlIHN1cHBvcnRlZC4KICAqLwogCiAvKgpAQCAtODYsMTYgKzk0LDIwIEBACiAKIHN0YXRpYyBpbnQgcGxfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KQogeworCWludCBzdGF0dXM7CisKIAkvKiBzb21lIHVuaXRzIHNlZW0gdG8gbmVlZCB0aGlzIHJlc2V0LCBvdGhlcnMgcmVqZWN0IGl0IHV0dGVybHkuCiAJICogRklYTUUgYmUgbW9yZSBsaWtlICJuYXBsaW5rIiBvciB3aW5kb3dzIGRyaXZlcnMuCiAJICovCi0JKHZvaWQpIHBsX3NldF9RdWlja0xpbmtfZmVhdHVyZXMoZGV2LAorCXN0YXR1cyA9IHBsX3NldF9RdWlja0xpbmtfZmVhdHVyZXMoZGV2LAogCQlQTF9TX0VOfFBMX1JFU0VUX09VVHxQTF9SRVNFVF9JTnxQTF9QRUVSX0UpOworCWlmIChzdGF0dXMgIT0gMCAmJiBuZXRpZl9tc2dfcHJvYmUoZGV2KSkKKwkJbmV0aWZfZGJnKGRldiwgbGluaywgZGV2LT5uZXQsICJwbF9yZXNldCAtLT4gJWRcbiIsIHN0YXR1cyk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8JcHJvbGlmaWNfaW5mbyA9IHsKLQkuZGVzY3JpcHRpb24gPQkiUHJvbGlmaWMgUEwtMjMwMS9QTC0yMzAyIiwKKwkuZGVzY3JpcHRpb24gPQkiUHJvbGlmaWMgUEwtMjMwMS9QTC0yMzAyL1BMLTI1QTEiLAogCS5mbGFncyA9CUZMQUdfUE9JTlRUT1BPSU5UIHwgRkxBR19OT19TRVRJTlQsCiAJCS8qIHNvbWUgUEwtMjMwMiB2ZXJzaW9ucyBzZWVtIHRvIGZhaWwgdXNiX3NldF9pbnRlcmZhY2UoKSAqLwogCS5yZXNldCA9CXBsX3Jlc2V0LApAQCAtMTExLDYgKzEyMyw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZAlwcm9kdWN0cyBbXSA9IHsKIAorLyogZnVsbCBzcGVlZCBjYWJsZXMgKi8KIHsKIAlVU0JfREVWSUNFKDB4MDY3YiwgMHgwMDAwKSwJLy8gUEwtMjMwMQogCS5kcml2ZXJfaW5mbyA9CSh1bnNpZ25lZCBsb25nKSAmcHJvbGlmaWNfaW5mbywKQEAgLTExOSw2ICsxMzIsMTUgQEAKIAkuZHJpdmVyX2luZm8gPQkodW5zaWduZWQgbG9uZykgJnByb2xpZmljX2luZm8sCiB9LAogCisvKiBoaWdoIHNwZWVkIGNhYmxlcyAqLworeworCVVTQl9ERVZJQ0UoMHgwNjdiLCAweDI1YTEpLCAgICAgLyogUEwtMjVBMSwgbm8gZWVwcm9tICovCisJLmRyaXZlcl9pbmZvID0gICh1bnNpZ25lZCBsb25nKSAmcHJvbGlmaWNfaW5mbywKK30sIHsKKwlVU0JfREVWSUNFKDB4MDUwZCwgMHgyNThhKSwgICAgIC8qIEJlbGtpbiBGNVUyNTgvRjVVMjc5IChQTC0yNUExKSAqLworCS5kcml2ZXJfaW5mbyA9ICAodW5zaWduZWQgbG9uZykgJnByb2xpZmljX2luZm8sCit9LAorCiAJeyB9LAkJLy8gRU5ECiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHByb2R1Y3RzKTsKQEAgLTEzNCwxNiArMTU2LDE2IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHBsdXNiX2luaXQodm9pZCkKIHsKLSAJcmV0dXJuIHVzYl9yZWdpc3RlcigmcGx1c2JfZHJpdmVyKTsKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZwbHVzYl9kcml2ZXIpOwogfQogbW9kdWxlX2luaXQocGx1c2JfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBwbHVzYl9leGl0KHZvaWQpCiB7Ci0gCXVzYl9kZXJlZ2lzdGVyKCZwbHVzYl9kcml2ZXIpOworCXVzYl9kZXJlZ2lzdGVyKCZwbHVzYl9kcml2ZXIpOwogfQogbW9kdWxlX2V4aXQocGx1c2JfZXhpdCk7CiAKIE1PRFVMRV9BVVRIT1IoIkRhdmlkIEJyb3duZWxsIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlByb2xpZmljIFBMLTIzMDEvMjMwMiBVU0IgSG9zdCB0byBIb3N0IExpbmsgRHJpdmVyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlByb2xpZmljIFBMLTIzMDEvMjMwMi8yNUExIFVTQiBIb3N0IHRvIEhvc3QgTGluayBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMgYi9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jCmluZGV4IDU5OTRhMjUuLjI1NWQ2YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYwpAQCAtMTA0LDggKzEwNCwxMCBAQAogaW50IHJuZGlzX2NvbW1hbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgcm5kaXNfbXNnX2hkciAqYnVmLCBpbnQgYnVmbGVuKQogewogCXN0cnVjdCBjZGNfc3RhdGUJKmluZm8gPSAodm9pZCAqKSAmZGV2LT5kYXRhOworCXN0cnVjdCB1c2JfY2RjX25vdGlmaWNhdGlvbiBub3RpZmljYXRpb247CiAJaW50CQkJbWFzdGVyX2lmbnVtOwogCWludAkJCXJldHZhbDsKKwlpbnQJCQlwYXJ0aWFsOwogCXVuc2lnbmVkCQljb3VudDsKIAlfX2xlMzIJCQlyc3A7CiAJdTMyCQkJeGlkID0gMCwgbXNnX2xlbiwgcmVxdWVzdF9pZDsKQEAgLTEzMywxMyArMTM1LDIwIEBACiAJaWYgKHVubGlrZWx5KHJldHZhbCA8IDAgfHwgeGlkID09IDApKQogCQlyZXR1cm4gcmV0dmFsOwogCi0JLy8gRklYTUUgU2VlbXMgbGlrZSBzb21lIGRldmljZXMgZGlzY2FyZCByZXNwb25zZXMgd2hlbgotCS8vIHdlIHRpbWUgb3V0IGFuZCBjYW5jZWwgb3VyICJnZXQgcmVzcG9uc2UiIHJlcXVlc3RzLi4uCi0JLy8gc28sIHRoaXMgaXMgZnJhZ2lsZS4gIFByb2JhYmx5IG5lZWQgdG8gcG9sbCBmb3Igc3RhdHVzLgorCS8qIFNvbWUgZGV2aWNlcyBkb24ndCByZXNwb25kIG9uIHRoZSBjb250cm9sIGNoYW5uZWwgdW50aWwKKwkgKiBwb2xsZWQgb24gdGhlIHN0YXR1cyBjaGFubmVsLCBzbyBkbyB0aGF0IGZpcnN0LiAqLworCWlmIChkZXYtPmRyaXZlcl9pbmZvLT5kYXRhICYgUk5ESVNfRFJJVkVSX0RBVEFfUE9MTF9TVEFUVVMpIHsKKwkJcmV0dmFsID0gdXNiX2ludGVycnVwdF9tc2coCisJCQlkZXYtPnVkZXYsCisJCQl1c2JfcmN2aW50cGlwZShkZXYtPnVkZXYsCisJCQkJICAgICAgIGRldi0+c3RhdHVzLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MpLAorCQkJJm5vdGlmaWNhdGlvbiwgc2l6ZW9mKG5vdGlmaWNhdGlvbiksICZwYXJ0aWFsLAorCQkJUk5ESVNfQ09OVFJPTF9USU1FT1VUX01TKTsKKwkJaWYgKHVubGlrZWx5KHJldHZhbCA8IDApKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CiAKLQkvKiBpZ25vcmUgc3RhdHVzIGVuZHBvaW50LCBqdXN0IHBvbGwgdGhlIGNvbnRyb2wgY2hhbm5lbDsKLQkgKiB0aGUgcmVxdWVzdCBwcm9iYWJseSBjb21wbGV0ZWQgaW1tZWRpYXRlbHkKLQkgKi8KKwkvKiBQb2xsIHRoZSBjb250cm9sIGNoYW5uZWw7IHRoZSByZXF1ZXN0IHByb2JhYmx5IGNvbXBsZXRlZCBpbW1lZGlhdGVseSAqLwogCXJzcCA9IGJ1Zi0+bXNnX3R5cGUgfCBSTkRJU19NU0dfQ09NUExFVElPTjsKIAlmb3IgKGNvdW50ID0gMDsgY291bnQgPCAxMDsgY291bnQrKykgewogCQltZW1zZXQoYnVmLCAwLCBDT05UUk9MX0JVRkZFUl9TSVpFKTsKQEAgLTU4MSwxNyArNTkwLDMzIEBACiAJLnR4X2ZpeHVwID0Jcm5kaXNfdHhfZml4dXAsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvCXJuZGlzX3BvbGxfc3RhdHVzX2luZm8gPSB7CisJLmRlc2NyaXB0aW9uID0JIlJORElTIGRldmljZSAocG9sbCBzdGF0dXMgYmVmb3JlIGNvbnRyb2wpIiwKKwkuZmxhZ3MgPQlGTEFHX0VUSEVSIHwgRkxBR19QT0lOVFRPUE9JTlQgfCBGTEFHX0ZSQU1JTkdfUk4gfCBGTEFHX05PX1NFVElOVCwKKwkuZGF0YSA9CQlSTkRJU19EUklWRVJfREFUQV9QT0xMX1NUQVRVUywKKwkuYmluZCA9CQlybmRpc19iaW5kLAorCS51bmJpbmQgPQlybmRpc191bmJpbmQsCisJLnN0YXR1cyA9CXJuZGlzX3N0YXR1cywKKwkucnhfZml4dXAgPQlybmRpc19yeF9maXh1cCwKKwkudHhfZml4dXAgPQlybmRpc190eF9maXh1cCwKK307CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZAlwcm9kdWN0cyBbXSA9IHsKIHsKKwkvKiAyV2lyZSBIb21lUG9ydGFsIDEwMDBTVyAqLworCVVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MTYzMCwgMHgwMDQyLAorCQkJCSAgICAgIFVTQl9DTEFTU19DT01NLCAyIC8qIEFDTSAqLywgMHgwZmYpLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmcm5kaXNfcG9sbF9zdGF0dXNfaW5mbywKK30sIHsKIAkvKiBSTkRJUyBpcyBNU0ZUJ3MgdW4tb2ZmaWNpYWwgdmFyaWFudCBvZiBDREMgQUNNICovCiAJVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19DT01NLCAyIC8qIEFDTSAqLywgMHgwZmYpLAogCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmcm5kaXNfaW5mbywKIH0sIHsKIAkvKiAiQWN0aXZlU3luYyIgaXMgYW4gdW5kb2N1bWVudGVkIHZhcmlhbnQgb2YgUk5ESVMsIHVzZWQgaW4gV001ICovCiAJVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NSVNDLCAxLCAxKSwKLQkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJnJuZGlzX2luZm8sCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZybmRpc19wb2xsX3N0YXR1c19pbmZvLAogfSwgewogCS8qIFJORElTIGZvciB0ZXRoZXJpbmcgKi8KIAlVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX1dJUkVMRVNTX0NPTlRST0xMRVIsIDEsIDMpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3J0bDgxNTAuYyBiL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMKaW5kZXggZTg1Yzg5Yy4uMDQxZmI3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3J0bDgxNTAuYworKysgYi9kcml2ZXJzL25ldC91c2IvcnRsODE1MC5jCkBAIC04NDMsMTAgKzg0MywxMSBAQAogCWdldF9yZWdpc3RlcnMoZGV2LCBCTUNSLCAyLCAmYm1jcik7CiAJZ2V0X3JlZ2lzdGVycyhkZXYsIEFOTFAsIDIsICZscGEpOwogCWlmIChibWNyICYgQk1DUl9BTkVOQUJMRSkgeworCQl1MzIgc3BlZWQgPSAoKGxwYSAmIChMUEFfMTAwSEFMRiB8IExQQV8xMDBGVUxMKSkgPworCQkJICAgICBTUEVFRF8xMDAgOiBTUEVFRF8xMCk7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBzcGVlZCk7CiAJCWVjbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0VOQUJMRTsKLQkJZWNtZC0+c3BlZWQgPSAobHBhICYgKExQQV8xMDBIQUxGIHwgTFBBXzEwMEZVTEwpKSA/Ci0JCQkgICAgIFNQRUVEXzEwMCA6IFNQRUVEXzEwOwotCQlpZiAoZWNtZC0+c3BlZWQgPT0gU1BFRURfMTAwKQorCQlpZiAoc3BlZWQgPT0gU1BFRURfMTAwKQogCQkJZWNtZC0+ZHVwbGV4ID0gKGxwYSAmIExQQV8xMDBGVUxMKSA/CiAJCQkgICAgRFVQTEVYX0ZVTEwgOiBEVVBMRVhfSEFMRjsKIAkJZWxzZQpAQCAtODU0LDggKzg1NSw4IEBACiAJCQkgICAgRFVQTEVYX0ZVTEwgOiBEVVBMRVhfSEFMRjsKIAl9IGVsc2UgewogCQllY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOwotCQllY21kLT5zcGVlZCA9IChibWNyICYgQk1DUl9TUEVFRDEwMCkgPwotCQkgICAgU1BFRURfMTAwIDogU1BFRURfMTA7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCAoKGJtY3IgJiBCTUNSX1NQRUVEMTAwKSA/CisJCQkJCSAgICAgU1BFRURfMTAwIDogU1BFRURfMTApKTsKIAkJZWNtZC0+ZHVwbGV4ID0gKGJtY3IgJiBCTUNSX0ZVTExEUExYKSA/CiAJCSAgICBEVVBMRVhfRlVMTCA6IERVUExFWF9IQUxGOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9zbXNjNzV4eC5jIGIvZHJpdmVycy9uZXQvdXNiL3Ntc2M3NXh4LmMKaW5kZXggNzUzZWU2ZS4uMTViM2Q2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3Ntc2M3NXh4LmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3Ntc2M3NXh4LmMKQEAgLTY1LDcgKzY1LDYgQEAKIAlzdHJ1Y3QgdXNibmV0ICpkZXY7CiAJdTMyIHJmZV9jdGw7CiAJdTMyIG11bHRpY2FzdF9oYXNoX3RhYmxlW0RQX1NFTF9WSEZfSEFTSF9MRU5dOwotCWJvb2wgdXNlX3J4X2NzdW07CiAJc3RydWN0IG11dGV4IGRhdGFwb3J0X211dGV4OwogCXNwaW5sb2NrX3QgcmZlX2N0bF9sb2NrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBzZXRfbXVsdGljYXN0OwpAQCAtNTA0LDcgKzUwMyw3IEBACiBzdGF0aWMgaW50IHNtc2M3NXh4X2xpbmtfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KQogewogCXN0cnVjdCBtaWlfaWZfaW5mbyAqbWlpID0gJmRldi0+bWlpOwotCXN0cnVjdCBldGh0b29sX2NtZCBlY21kOworCXN0cnVjdCBldGh0b29sX2NtZCBlY21kID0geyAuY21kID0gRVRIVE9PTF9HU0VUIH07CiAJdTE2IGxjbGFkdiwgcm10YWR2OwogCWludCByZXQ7CiAKQEAgLTUyMCw4ICs1MTksOSBAQAogCWxjbGFkdiA9IHNtc2M3NXh4X21kaW9fcmVhZChkZXYtPm5ldCwgbWlpLT5waHlfaWQsIE1JSV9BRFZFUlRJU0UpOwogCXJtdGFkdiA9IHNtc2M3NXh4X21kaW9fcmVhZChkZXYtPm5ldCwgbWlpLT5waHlfaWQsIE1JSV9MUEEpOwogCi0JbmV0aWZfZGJnKGRldiwgbGluaywgZGV2LT5uZXQsICJzcGVlZDogJWQgZHVwbGV4OiAlZCBsY2xhZHY6ICUwNHgiCi0JCSIgcm10YWR2OiAlMDR4IiwgZWNtZC5zcGVlZCwgZWNtZC5kdXBsZXgsIGxjbGFkdiwgcm10YWR2KTsKKwluZXRpZl9kYmcoZGV2LCBsaW5rLCBkZXYtPm5ldCwgInNwZWVkOiAldSBkdXBsZXg6ICVkIGxjbGFkdjogJTA0eCIKKwkJICAiIHJtdGFkdjogJTA0eCIsIGV0aHRvb2xfY21kX3NwZWVkKCZlY21kKSwKKwkJICBlY21kLmR1cGxleCwgbGNsYWR2LCBybXRhZHYpOwogCiAJcmV0dXJuIHNtc2M3NXh4X3VwZGF0ZV9mbG93Y29udHJvbChkZXYsIGVjbWQuZHVwbGV4LCBsY2xhZHYsIHJtdGFkdik7CiB9CkBAIC01NDgsMjggKzU0OCw2IEBACiAJCQkidW5leHBlY3RlZCBpbnRlcnJ1cHQsIGludGRhdGE9MHglMDhYIiwgaW50ZGF0YSk7CiB9CiAKLS8qIEVuYWJsZSBvciBkaXNhYmxlIFJ4IGNoZWNrc3VtIG9mZmxvYWQgZW5naW5lICovCi1zdGF0aWMgaW50IHNtc2M3NXh4X3NldF9yeF9jc3VtX29mZmxvYWQoc3RydWN0IHVzYm5ldCAqZGV2KQotewotCXN0cnVjdCBzbXNjNzV4eF9wcml2ICpwZGF0YSA9IChzdHJ1Y3Qgc21zYzc1eHhfcHJpdiAqKShkZXYtPmRhdGFbMF0pOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwZGF0YS0+cmZlX2N0bF9sb2NrLCBmbGFncyk7Ci0KLQlpZiAocGRhdGEtPnVzZV9yeF9jc3VtKQotCQlwZGF0YS0+cmZlX2N0bCB8PSBSRkVfQ1RMX1RDUFVEUF9DS00gfCBSRkVfQ1RMX0lQX0NLTTsKLQllbHNlCi0JCXBkYXRhLT5yZmVfY3RsICY9IH4oUkZFX0NUTF9UQ1BVRFBfQ0tNIHwgUkZFX0NUTF9JUF9DS00pOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGRhdGEtPnJmZV9jdGxfbG9jaywgZmxhZ3MpOwotCi0JcmV0ID0gc21zYzc1eHhfd3JpdGVfcmVnKGRldiwgUkZFX0NUTCwgcGRhdGEtPnJmZV9jdGwpOwotCWNoZWNrX3dhcm5fcmV0dXJuKHJldCwgIkVycm9yIHdyaXRpbmcgUkZFX0NUTCIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgc21zYzc1eHhfZXRodG9vbF9nZXRfZWVwcm9tX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQogewogCXJldHVybiBNQVhfRUVQUk9NX1NJWkU7CkBAIC01OTksMzQgKzU3Nyw2IEBACiAJcmV0dXJuIHNtc2M3NXh4X3dyaXRlX2VlcHJvbShkZXYsIGVlLT5vZmZzZXQsIGVlLT5sZW4sIGRhdGEpOwogfQogCi1zdGF0aWMgdTMyIHNtc2M3NXh4X2V0aHRvb2xfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKLXsKLQlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBzbXNjNzV4eF9wcml2ICpwZGF0YSA9IChzdHJ1Y3Qgc21zYzc1eHhfcHJpdiAqKShkZXYtPmRhdGFbMF0pOwotCi0JcmV0dXJuIHBkYXRhLT51c2VfcnhfY3N1bTsKLX0KLQotc3RhdGljIGludCBzbXNjNzV4eF9ldGh0b29sX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiB2YWwpCi17Ci0Jc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3Qgc21zYzc1eHhfcHJpdiAqcGRhdGEgPSAoc3RydWN0IHNtc2M3NXh4X3ByaXYgKikoZGV2LT5kYXRhWzBdKTsKLQotCXBkYXRhLT51c2VfcnhfY3N1bSA9ICEhdmFsOwotCi0JcmV0dXJuIHNtc2M3NXh4X3NldF9yeF9jc3VtX29mZmxvYWQoZGV2KTsKLX0KLQotc3RhdGljIGludCBzbXNjNzV4eF9ldGh0b29sX3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIGRhdGEpCi17Ci0JaWYgKGRhdGEpCi0JCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzY7Ci0JZWxzZQotCQluZXRkZXYtPmZlYXR1cmVzICY9IH4oTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgc21zYzc1eHhfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9saW5rCT0gdXNibmV0X2dldF9saW5rLAogCS5ud2F5X3Jlc2V0CT0gdXNibmV0X253YXlfcmVzZXQsCkBAIC02MzgsMTIgKzU4OCw2IEBACiAJLmdldF9lZXByb21fbGVuCT0gc21zYzc1eHhfZXRodG9vbF9nZXRfZWVwcm9tX2xlbiwKIAkuZ2V0X2VlcHJvbQk9IHNtc2M3NXh4X2V0aHRvb2xfZ2V0X2VlcHJvbSwKIAkuc2V0X2VlcHJvbQk9IHNtc2M3NXh4X2V0aHRvb2xfc2V0X2VlcHJvbSwKLQkuZ2V0X3R4X2NzdW0JPSBldGh0b29sX29wX2dldF90eF9jc3VtLAotCS5zZXRfdHhfY3N1bQk9IGV0aHRvb2xfb3Bfc2V0X3R4X2h3X2NzdW0sCi0JLmdldF9yeF9jc3VtCT0gc21zYzc1eHhfZXRodG9vbF9nZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0JPSBzbXNjNzV4eF9ldGh0b29sX3NldF9yeF9jc3VtLAotCS5nZXRfdHNvCT0gZXRodG9vbF9vcF9nZXRfdHNvLAotCS5zZXRfdHNvCT0gc21zYzc1eHhfZXRodG9vbF9zZXRfdHNvLAogfTsKIAogc3RhdGljIGludCBzbXNjNzV4eF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQpAQCAtNzgyLDYgKzcyNiwzMCBAQAogCXJldHVybiB1c2JuZXRfY2hhbmdlX210dShuZXRkZXYsIG5ld19tdHUpOwogfQogCisvKiBFbmFibGUgb3IgZGlzYWJsZSBSeCBjaGVja3N1bSBvZmZsb2FkIGVuZ2luZSAqLworc3RhdGljIGludCBzbXNjNzV4eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIGZlYXR1cmVzKQoreworCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IHNtc2M3NXh4X3ByaXYgKnBkYXRhID0gKHN0cnVjdCBzbXNjNzV4eF9wcml2ICopKGRldi0+ZGF0YVswXSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBkYXRhLT5yZmVfY3RsX2xvY2ssIGZsYWdzKTsKKworCWlmIChmZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKQorCQlwZGF0YS0+cmZlX2N0bCB8PSBSRkVfQ1RMX1RDUFVEUF9DS00gfCBSRkVfQ1RMX0lQX0NLTTsKKwllbHNlCisJCXBkYXRhLT5yZmVfY3RsICY9IH4oUkZFX0NUTF9UQ1BVRFBfQ0tNIHwgUkZFX0NUTF9JUF9DS00pOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGRhdGEtPnJmZV9jdGxfbG9jaywgZmxhZ3MpOworCS8qIGl0J3MgcmFjaW5nIGhlcmUhICovCisKKwlyZXQgPSBzbXNjNzV4eF93cml0ZV9yZWcoZGV2LCBSRkVfQ1RMLCBwZGF0YS0+cmZlX2N0bCk7CisJY2hlY2tfd2Fybl9yZXR1cm4ocmV0LCAiRXJyb3Igd3JpdGluZyBSRkVfQ1RMIik7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBzbXNjNzV4eF9yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpCiB7CiAJc3RydWN0IHNtc2M3NXh4X3ByaXYgKnBkYXRhID0gKHN0cnVjdCBzbXNjNzV4eF9wcml2ICopKGRldi0+ZGF0YVswXSk7CkBAIC05NjAsMTEgKzkyOCw3IEBACiAJbmV0aWZfZGJnKGRldiwgaWZ1cCwgZGV2LT5uZXQsICJSRkVfQ1RMIHNldCB0byAweCUwOHgiLCBwZGF0YS0+cmZlX2N0bCk7CiAKIAkvKiBFbmFibGUgb3IgZGlzYWJsZSBjaGVja3N1bSBvZmZsb2FkIGVuZ2luZXMgKi8KLQlldGh0b29sX29wX3NldF90eF9od19jc3VtKGRldi0+bmV0LCBERUZBVUxUX1RYX0NTVU1fRU5BQkxFKTsKLQlyZXQgPSBzbXNjNzV4eF9zZXRfcnhfY3N1bV9vZmZsb2FkKGRldik7Ci0JY2hlY2tfd2Fybl9yZXR1cm4ocmV0LCAiRmFpbGVkIHRvIHNldCByeCBjc3VtIG9mZmxvYWQ6ICVkIiwgcmV0KTsKLQotCXNtc2M3NXh4X2V0aHRvb2xfc2V0X3RzbyhkZXYtPm5ldCwgREVGQVVMVF9UU09fRU5BQkxFKTsKKwlzbXNjNzV4eF9zZXRfZmVhdHVyZXMoZGV2LT5uZXQsIGRldi0+bmV0LT5mZWF0dXJlcyk7CiAKIAlzbXNjNzV4eF9zZXRfbXVsdGljYXN0KGRldi0+bmV0KTsKIApAQCAtMTAzNyw2ICsxMDAxLDcgQEAKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKIAkubmRvX2RvX2lvY3RsIAkJPSBzbXNjNzV4eF9pb2N0bCwKIAkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNtc2M3NXh4X3NldF9tdWx0aWNhc3QsCisJLm5kb19zZXRfZmVhdHVyZXMJPSBzbXNjNzV4eF9zZXRfZmVhdHVyZXMsCiB9OwogCiBzdGF0aWMgaW50IHNtc2M3NXh4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKQEAgLTEwNjUsMTAgKzEwMzAsMTcgQEAKIAogCUlOSVRfV09SSygmcGRhdGEtPnNldF9tdWx0aWNhc3QsIHNtc2M3NXh4X2RlZmVycmVkX211bHRpY2FzdF93cml0ZSk7CiAKLQlwZGF0YS0+dXNlX3J4X2NzdW0gPSBERUZBVUxUX1JYX0NTVU1fRU5BQkxFOworCWlmIChERUZBVUxUX1RYX0NTVU1fRU5BQkxFKSB7CisJCWRldi0+bmV0LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTTsKKwkJaWYgKERFRkFVTFRfVFNPX0VOQUJMRSkKKwkJCWRldi0+bmV0LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwKKwkJCQlORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNjsKKwl9CisJaWYgKERFRkFVTFRfUlhfQ1NVTV9FTkFCTEUpCisJCWRldi0+bmV0LT5mZWF0dXJlcyB8PSBORVRJRl9GX1JYQ1NVTTsKIAotCS8qIFdlIGhhdmUgdG8gYWR2ZXJ0aXNlIFNHIG90aGVyd2lzZSBUU08gY2Fubm90IGJlIGVuYWJsZWQgKi8KLQlkZXYtPm5ldC0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRzsKKwlkZXYtPm5ldC0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSB8CisJCU5FVElGX0ZfU0cgfCBORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNiB8IE5FVElGX0ZfUlhDU1VNOwogCiAJLyogSW5pdCBhbGwgcmVnaXN0ZXJzICovCiAJcmV0ID0gc21zYzc1eHhfcmVzZXQoZGV2KTsKQEAgLTEwOTEsMTAgKzEwNjMsMTEgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHNtc2M3NXh4X3J4X2NzdW1fb2ZmbG9hZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcnhfY21kX2EsCi0JCQkJICAgICB1MzIgcnhfY21kX2IpCitzdGF0aWMgdm9pZCBzbXNjNzV4eF9yeF9jc3VtX29mZmxvYWQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgdTMyIHJ4X2NtZF9hLCB1MzIgcnhfY21kX2IpCiB7Ci0JaWYgKHVubGlrZWx5KHJ4X2NtZF9hICYgUlhfQ01EX0FfTENTTSkpIHsKKwlpZiAoIShkZXYtPm5ldC0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkgfHwKKwkgICAgdW5saWtlbHkocnhfY21kX2EgJiBSWF9DTURfQV9MQ1NNKSkgewogCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CiAJfSBlbHNlIHsKIAkJc2tiLT5jc3VtID0gbnRvaHMoKHUxNikocnhfY21kX2IgPj4gUlhfQ01EX0JfQ1NVTV9TSElGVCkpOwpAQCAtMTEwNCw4ICsxMDc3LDYgQEAKIAogc3RhdGljIGludCBzbXNjNzV4eF9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IHNtc2M3NXh4X3ByaXYgKnBkYXRhID0gKHN0cnVjdCBzbXNjNzV4eF9wcml2ICopKGRldi0+ZGF0YVswXSk7Ci0KIAl3aGlsZSAoc2tiLT5sZW4gPiAwKSB7CiAJCXUzMiByeF9jbWRfYSwgcnhfY21kX2IsIGFsaWduX2NvdW50LCBzaXplOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqYXhfc2tiOwpAQCAtMTE0NSwxMSArMTExNiw4IEBACiAKIAkJCS8qIGxhc3QgZnJhbWUgaW4gdGhpcyBiYXRjaCAqLwogCQkJaWYgKHNrYi0+bGVuID09IHNpemUpIHsKLQkJCQlpZiAocGRhdGEtPnVzZV9yeF9jc3VtKQotCQkJCQlzbXNjNzV4eF9yeF9jc3VtX29mZmxvYWQoc2tiLCByeF9jbWRfYSwKLQkJCQkJCXJ4X2NtZF9iKTsKLQkJCQllbHNlCi0JCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKwkJCQlzbXNjNzV4eF9yeF9jc3VtX29mZmxvYWQoZGV2LCBza2IsIHJ4X2NtZF9hLAorCQkJCQlyeF9jbWRfYik7CiAKIAkJCQlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gNCk7IC8qIHJlbW92ZSBmY3MgKi8KIAkJCQlza2ItPnRydWVzaXplID0gc2l6ZSArIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZik7CkBAIC0xMTY3LDExICsxMTM1LDggQEAKIAkJCWF4X3NrYi0+ZGF0YSA9IHBhY2tldDsKIAkJCXNrYl9zZXRfdGFpbF9wb2ludGVyKGF4X3NrYiwgc2l6ZSk7CiAKLQkJCWlmIChwZGF0YS0+dXNlX3J4X2NzdW0pCi0JCQkJc21zYzc1eHhfcnhfY3N1bV9vZmZsb2FkKGF4X3NrYiwgcnhfY21kX2EsCi0JCQkJCXJ4X2NtZF9iKTsKLQkJCWVsc2UKLQkJCQlheF9za2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJCQlzbXNjNzV4eF9yeF9jc3VtX29mZmxvYWQoZGV2LCBheF9za2IsIHJ4X2NtZF9hLAorCQkJCXJ4X2NtZF9iKTsKIAogCQkJc2tiX3RyaW0oYXhfc2tiLCBheF9za2ItPmxlbiAtIDQpOyAvKiByZW1vdmUgZmNzICovCiAJCQlheF9za2ItPnRydWVzaXplID0gc2l6ZSArIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYyBiL2RyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jCmluZGV4IDQ4ZDRlZmQuLmY3NGYzY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jCkBAIC01Miw4ICs1Miw2IEBACiAJdTMyIGhhc2hfaGk7CiAJdTMyIGhhc2hfbG87CiAJc3BpbmxvY2tfdCBtYWNfY3JfbG9jazsKLQlib29sIHVzZV90eF9jc3VtOwotCWJvb2wgdXNlX3J4X2NzdW07CiB9OwogCiBzdHJ1Y3QgdXNiX2NvbnRleHQgewpAQCAtNDU5LDcgKzQ1Nyw3IEBACiB7CiAJc3RydWN0IHNtc2M5NXh4X3ByaXYgKnBkYXRhID0gKHN0cnVjdCBzbXNjOTV4eF9wcml2ICopKGRldi0+ZGF0YVswXSk7CiAJc3RydWN0IG1paV9pZl9pbmZvICptaWkgPSAmZGV2LT5taWk7Ci0Jc3RydWN0IGV0aHRvb2xfY21kIGVjbWQ7CisJc3RydWN0IGV0aHRvb2xfY21kIGVjbWQgPSB7IC5jbWQgPSBFVEhUT09MX0dTRVQgfTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUxNiBsY2xhZHYsIHJtdGFkdjsKIAl1MzIgaW50ZGF0YTsKQEAgLTQ3NCw4ICs0NzIsOSBAQAogCWxjbGFkdiA9IHNtc2M5NXh4X21kaW9fcmVhZChkZXYtPm5ldCwgbWlpLT5waHlfaWQsIE1JSV9BRFZFUlRJU0UpOwogCXJtdGFkdiA9IHNtc2M5NXh4X21kaW9fcmVhZChkZXYtPm5ldCwgbWlpLT5waHlfaWQsIE1JSV9MUEEpOwogCi0JbmV0aWZfZGJnKGRldiwgbGluaywgZGV2LT5uZXQsICJzcGVlZDogJWQgZHVwbGV4OiAlZCBsY2xhZHY6ICUwNHggcm10YWR2OiAlMDR4XG4iLAotCQkgIGVjbWQuc3BlZWQsIGVjbWQuZHVwbGV4LCBsY2xhZHYsIHJtdGFkdik7CisJbmV0aWZfZGJnKGRldiwgbGluaywgZGV2LT5uZXQsCisJCSAgInNwZWVkOiAldSBkdXBsZXg6ICVkIGxjbGFkdjogJTA0eCBybXRhZHY6ICUwNHhcbiIsCisJCSAgZXRodG9vbF9jbWRfc3BlZWQoJmVjbWQpLCBlY21kLmR1cGxleCwgbGNsYWR2LCBybXRhZHYpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBkYXRhLT5tYWNfY3JfbG9jaywgZmxhZ3MpOwogCWlmIChlY21kLmR1cGxleCAhPSBEVVBMRVhfRlVMTCkgewpAQCAtNTE3LDIyICs1MTYsMjQgQEAKIH0KIAogLyogRW5hYmxlIG9yIGRpc2FibGUgVHggJiBSeCBjaGVja3N1bSBvZmZsb2FkIGVuZ2luZXMgKi8KLXN0YXRpYyBpbnQgc21zYzk1eHhfc2V0X2NzdW1zKHN0cnVjdCB1c2JuZXQgKmRldikKK3N0YXRpYyBpbnQgc21zYzk1eHhfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBmZWF0dXJlcykKIHsKLQlzdHJ1Y3Qgc21zYzk1eHhfcHJpdiAqcGRhdGEgPSAoc3RydWN0IHNtc2M5NXh4X3ByaXYgKikoZGV2LT5kYXRhWzBdKTsKKwlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXUzMiByZWFkX2J1ZjsKLQlpbnQgcmV0ID0gc21zYzk1eHhfcmVhZF9yZWcoZGV2LCBDT0VfQ1IsICZyZWFkX2J1Zik7CisJaW50IHJldDsKKworCXJldCA9IHNtc2M5NXh4X3JlYWRfcmVnKGRldiwgQ09FX0NSLCAmcmVhZF9idWYpOwogCWlmIChyZXQgPCAwKSB7CiAJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRmFpbGVkIHRvIHJlYWQgQ09FX0NSOiAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlpZiAocGRhdGEtPnVzZV90eF9jc3VtKQorCWlmIChmZWF0dXJlcyAmIE5FVElGX0ZfSFdfQ1NVTSkKIAkJcmVhZF9idWYgfD0gVHhfQ09FX0VOXzsKIAllbHNlCiAJCXJlYWRfYnVmICY9IH5UeF9DT0VfRU5fOwogCi0JaWYgKHBkYXRhLT51c2VfcnhfY3N1bSkKKwlpZiAoZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkKIAkJcmVhZF9idWYgfD0gUnhfQ09FX0VOXzsKIAllbHNlCiAJCXJlYWRfYnVmICY9IH5SeF9DT0VfRU5fOwpAQCAtNTc2LDQzICs1NzcsNiBAQAogCXJldHVybiBzbXNjOTV4eF93cml0ZV9lZXByb20oZGV2LCBlZS0+b2Zmc2V0LCBlZS0+bGVuLCBkYXRhKTsKIH0KIAotc3RhdGljIHUzMiBzbXNjOTV4eF9ldGh0b29sX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCi17Ci0Jc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3Qgc21zYzk1eHhfcHJpdiAqcGRhdGEgPSAoc3RydWN0IHNtc2M5NXh4X3ByaXYgKikoZGV2LT5kYXRhWzBdKTsKLQotCXJldHVybiBwZGF0YS0+dXNlX3J4X2NzdW07Ci19Ci0KLXN0YXRpYyBpbnQgc21zYzk1eHhfZXRodG9vbF9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgdmFsKQotewotCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IHNtc2M5NXh4X3ByaXYgKnBkYXRhID0gKHN0cnVjdCBzbXNjOTV4eF9wcml2ICopKGRldi0+ZGF0YVswXSk7Ci0KLQlwZGF0YS0+dXNlX3J4X2NzdW0gPSAhIXZhbDsKLQotCXJldHVybiBzbXNjOTV4eF9zZXRfY3N1bXMoZGV2KTsKLX0KLQotc3RhdGljIHUzMiBzbXNjOTV4eF9ldGh0b29sX2dldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCi17Ci0Jc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3Qgc21zYzk1eHhfcHJpdiAqcGRhdGEgPSAoc3RydWN0IHNtc2M5NXh4X3ByaXYgKikoZGV2LT5kYXRhWzBdKTsKLQotCXJldHVybiBwZGF0YS0+dXNlX3R4X2NzdW07Ci19Ci0KLXN0YXRpYyBpbnQgc21zYzk1eHhfZXRodG9vbF9zZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgdmFsKQotewotCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IHNtc2M5NXh4X3ByaXYgKnBkYXRhID0gKHN0cnVjdCBzbXNjOTV4eF9wcml2ICopKGRldi0+ZGF0YVswXSk7Ci0KLQlwZGF0YS0+dXNlX3R4X2NzdW0gPSAhIXZhbDsKLQotCWV0aHRvb2xfb3Bfc2V0X3R4X2h3X2NzdW0obmV0ZGV2LCBwZGF0YS0+dXNlX3R4X2NzdW0pOwotCXJldHVybiBzbXNjOTV4eF9zZXRfY3N1bXMoZGV2KTsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBzbXNjOTV4eF9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2xpbmsJPSB1c2JuZXRfZ2V0X2xpbmssCiAJLm53YXlfcmVzZXQJPSB1c2JuZXRfbndheV9yZXNldCwKQEAgLTYyNCwxMCArNTg4LDYgQEAKIAkuZ2V0X2VlcHJvbV9sZW4JPSBzbXNjOTV4eF9ldGh0b29sX2dldF9lZXByb21fbGVuLAogCS5nZXRfZWVwcm9tCT0gc21zYzk1eHhfZXRodG9vbF9nZXRfZWVwcm9tLAogCS5zZXRfZWVwcm9tCT0gc21zYzk1eHhfZXRodG9vbF9zZXRfZWVwcm9tLAotCS5nZXRfdHhfY3N1bQk9IHNtc2M5NXh4X2V0aHRvb2xfZ2V0X3R4X2NzdW0sCi0JLnNldF90eF9jc3VtCT0gc21zYzk1eHhfZXRodG9vbF9zZXRfdHhfY3N1bSwKLQkuZ2V0X3J4X2NzdW0JPSBzbXNjOTV4eF9ldGh0b29sX2dldF9yeF9jc3VtLAotCS5zZXRfcnhfY3N1bQk9IHNtc2M5NXh4X2V0aHRvb2xfc2V0X3J4X2NzdW0sCiB9OwogCiBzdGF0aWMgaW50IHNtc2M5NXh4X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCkBAIC03NTUsNyArNzE1LDYgQEAKIHN0YXRpYyBpbnQgc21zYzk1eHhfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KQogewogCXN0cnVjdCBzbXNjOTV4eF9wcml2ICpwZGF0YSA9IChzdHJ1Y3Qgc21zYzk1eHhfcHJpdiAqKShkZXYtPmRhdGFbMF0pOwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBkZXYtPm5ldDsKIAl1MzIgcmVhZF9idWYsIHdyaXRlX2J1ZiwgYnVyc3RfY2FwOwogCWludCByZXQgPSAwLCB0aW1lb3V0OwogCkBAIC05NzUsMTIgKzkzNCw3IEBACiAJfQogCiAJLyogRW5hYmxlIG9yIGRpc2FibGUgY2hlY2tzdW0gb2ZmbG9hZCBlbmdpbmVzICovCi0JZXRodG9vbF9vcF9zZXRfdHhfaHdfY3N1bShuZXRkZXYsIHBkYXRhLT51c2VfdHhfY3N1bSk7Ci0JcmV0ID0gc21zYzk1eHhfc2V0X2NzdW1zKGRldik7Ci0JaWYgKHJldCA8IDApIHsKLQkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJGYWlsZWQgdG8gc2V0IGNzdW0gb2ZmbG9hZDogJWRcbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQorCXNtc2M5NXh4X3NldF9mZWF0dXJlcyhkZXYtPm5ldCwgZGV2LT5uZXQtPmZlYXR1cmVzKTsKIAogCXNtc2M5NXh4X3NldF9tdWx0aWNhc3QoZGV2LT5uZXQpOwogCkBAIC0xMDE5LDYgKzk3Myw3IEBACiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiAJLm5kb19kb19pb2N0bCAJCT0gc21zYzk1eHhfaW9jdGwsCiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzbXNjOTV4eF9zZXRfbXVsdGljYXN0LAorCS5uZG9fc2V0X2ZlYXR1cmVzCT0gc21zYzk1eHhfc2V0X2ZlYXR1cmVzLAogfTsKIAogc3RhdGljIGludCBzbXNjOTV4eF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCkBAIC0xMDQ1LDggKzEwMDAsMTIgQEAKIAogCXNwaW5fbG9ja19pbml0KCZwZGF0YS0+bWFjX2NyX2xvY2spOwogCi0JcGRhdGEtPnVzZV90eF9jc3VtID0gREVGQVVMVF9UWF9DU1VNX0VOQUJMRTsKLQlwZGF0YS0+dXNlX3J4X2NzdW0gPSBERUZBVUxUX1JYX0NTVU1fRU5BQkxFOworCWlmIChERUZBVUxUX1RYX0NTVU1fRU5BQkxFKQorCQlkZXYtPm5ldC0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNOworCWlmIChERUZBVUxUX1JYX0NTVU1fRU5BQkxFKQorCQlkZXYtPm5ldC0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9SWENTVU07CisKKwlkZXYtPm5ldC0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX0hXX0NTVU0gfCBORVRJRl9GX1JYQ1NVTTsKIAogCXNtc2M5NXh4X2luaXRfbWFjX2FkZHJlc3MoZGV2KTsKIApAQCAtMTA1Niw3ICsxMDE1LDcgQEAKIAlkZXYtPm5ldC0+bmV0ZGV2X29wcyA9ICZzbXNjOTV4eF9uZXRkZXZfb3BzOwogCWRldi0+bmV0LT5ldGh0b29sX29wcyA9ICZzbXNjOTV4eF9ldGh0b29sX29wczsKIAlkZXYtPm5ldC0+ZmxhZ3MgfD0gSUZGX01VTFRJQ0FTVDsKLQlkZXYtPm5ldC0+aGFyZF9oZWFkZXJfbGVuICs9IFNNU0M5NVhYX1RYX09WRVJIRUFEOworCWRldi0+bmV0LT5oYXJkX2hlYWRlcl9sZW4gKz0gU01TQzk1WFhfVFhfT1ZFUkhFQURfQ1NVTTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA4MCw4ICsxMDM5LDYgQEAKIAogc3RhdGljIGludCBzbXNjOTV4eF9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IHNtc2M5NXh4X3ByaXYgKnBkYXRhID0gKHN0cnVjdCBzbXNjOTV4eF9wcml2ICopKGRldi0+ZGF0YVswXSk7Ci0KIAl3aGlsZSAoc2tiLT5sZW4gPiAwKSB7CiAJCXUzMiBoZWFkZXIsIGFsaWduX2NvdW50OwogCQlzdHJ1Y3Qgc2tfYnVmZiAqYXhfc2tiOwpAQCAtMTEyMyw3ICsxMDgwLDcgQEAKIAogCQkJLyogbGFzdCBmcmFtZSBpbiB0aGlzIGJhdGNoICovCiAJCQlpZiAoc2tiLT5sZW4gPT0gc2l6ZSkgewotCQkJCWlmIChwZGF0YS0+dXNlX3J4X2NzdW0pCisJCQkJaWYgKGRldi0+bmV0LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKQogCQkJCQlzbXNjOTV4eF9yeF9jc3VtX29mZmxvYWQoc2tiKTsKIAkJCQlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gNCk7IC8qIHJlbW92ZSBmY3MgKi8KIAkJCQlza2ItPnRydWVzaXplID0gc2l6ZSArIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZik7CkBAIC0xMTQxLDcgKzEwOTgsNyBAQAogCQkJYXhfc2tiLT5kYXRhID0gcGFja2V0OwogCQkJc2tiX3NldF90YWlsX3BvaW50ZXIoYXhfc2tiLCBzaXplKTsKIAotCQkJaWYgKHBkYXRhLT51c2VfcnhfY3N1bSkKKwkJCWlmIChkZXYtPm5ldC0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkKIAkJCQlzbXNjOTV4eF9yeF9jc3VtX29mZmxvYWQoYXhfc2tiKTsKIAkJCXNrYl90cmltKGF4X3NrYiwgYXhfc2tiLT5sZW4gLSA0KTsgLyogcmVtb3ZlIGZjcyAqLwogCQkJYXhfc2tiLT50cnVlc2l6ZSA9IHNpemUgKyBzaXplb2Yoc3RydWN0IHNrX2J1ZmYpOwpAQCAtMTE3NCw4ICsxMTMxLDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqc21zYzk1eHhfdHhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LAogCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZmxhZ3MpCiB7Ci0Jc3RydWN0IHNtc2M5NXh4X3ByaXYgKnBkYXRhID0gKHN0cnVjdCBzbXNjOTV4eF9wcml2ICopKGRldi0+ZGF0YVswXSk7Ci0JYm9vbCBjc3VtID0gcGRhdGEtPnVzZV90eF9jc3VtICYmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKTsKKwlib29sIGNzdW0gPSBza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMOwogCWludCBvdmVyaGVhZCA9IGNzdW0gPyBTTVNDOTVYWF9UWF9PVkVSSEVBRF9DU1VNIDogU01TQzk1WFhfVFhfT1ZFUkhFQUQ7CiAJdTMyIHR4X2NtZF9hLCB0eF9jbWRfYjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCmluZGV4IDlhYjQzOWQuLmNlMzk1ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYworKysgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKQEAgLTEwOSw3ICsxMDksNyBAQAogCiAJCS8qIHRha2UgdGhlIGZpcnN0IGFsdHNldHRpbmcgd2l0aCBpbi1idWxrICsgb3V0LWJ1bGs7CiAJCSAqIHJlbWVtYmVyIGFueSBzdGF0dXMgZW5kcG9pbnQsIGp1c3QgaW4gY2FzZTsKLQkJICogaWdub3JlIG90aGVyIGVuZHBvaW50cyBhbmQgYWx0c2V0dHRpbmdzLgorCQkgKiBpZ25vcmUgb3RoZXIgZW5kcG9pbnRzIGFuZCBhbHRzZXR0aW5ncy4KIAkJICovCiAJCWZvciAoZXAgPSAwOyBlcCA8IGFsdC0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBlcCsrKSB7CiAJCQlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQJKmU7CkBAIC0xNTQxLDkgKzE1NDEsOSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB1c2JuZXRfaW5pdCh2b2lkKQogewotCS8qIGNvbXBpbGVyIHNob3VsZCBvcHRpbWl6ZSB0aGlzIG91dCAqLwotCUJVSUxEX0JVR19PTiAoc2l6ZW9mICgoKHN0cnVjdCBza19idWZmICopMCktPmNiKQotCQkJPCBzaXplb2YgKHN0cnVjdCBza2JfZGF0YSkpOworCS8qIENvbXBpbGVyIHNob3VsZCBvcHRpbWl6ZSB0aGlzIG91dC4gKi8KKwlCVUlMRF9CVUdfT04oCisJCUZJRUxEX1NJWkVPRihzdHJ1Y3Qgc2tfYnVmZiwgY2IpIDwgc2l6ZW9mKHN0cnVjdCBza2JfZGF0YSkpOwogCiAJcmFuZG9tX2V0aGVyX2FkZHIobm9kZV9pZCk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92ZXRoLmMgYi9kcml2ZXJzL25ldC92ZXRoLmMKaW5kZXggM2I5OWY2NC4uODQ2MTU3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3ZldGguYwpAQCAtMjIsNyArMjIsNiBAQAogCiAjZGVmaW5lIE1JTl9NVFUgNjgJCS8qIE1pbiBMMyBNVFUgKi8KICNkZWZpbmUgTUFYX01UVSA2NTUzNQkJLyogTWF4IEwzIE1UVSAoYXJiaXRyYXJ5KSAqLwotI2RlZmluZSBNVFVfUEFEIChFVEhfSExFTiArIDQpICAvKiBNYXggZGlmZmVyZW5jZSBiZXR3ZWVuIEwyIGFuZCBMMyBzaXplIE1UVSAqLwogCiBzdHJ1Y3QgdmV0aF9uZXRfc3RhdHMgewogCXVuc2lnbmVkIGxvbmcJcnhfcGFja2V0czsKQEAgLTM2LDcgKzM1LDYgQEAKIHN0cnVjdCB2ZXRoX3ByaXYgewogCXN0cnVjdCBuZXRfZGV2aWNlICpwZWVyOwogCXN0cnVjdCB2ZXRoX25ldF9zdGF0cyBfX3BlcmNwdSAqc3RhdHM7Ci0JdW5zaWduZWQgaXBfc3VtbWVkOwogfTsKIAogLyoKQEAgLTUzLDcgKzUxLDcgQEAKIHsKIAljbWQtPnN1cHBvcnRlZAkJPSAwOwogCWNtZC0+YWR2ZXJ0aXNpbmcJPSAwOwotCWNtZC0+c3BlZWQJCT0gU1BFRURfMTAwMDA7CisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgU1BFRURfMTAwMDApOwogCWNtZC0+ZHVwbGV4CQk9IERVUExFWF9GVUxMOwogCWNtZC0+cG9ydAkJPSBQT1JUX1RQOwogCWNtZC0+cGh5X2FkZHJlc3MJPSAwOwpAQCAtOTksNDcgKzk3LDEwIEBACiAJZGF0YVswXSA9IHByaXYtPnBlZXItPmlmaW5kZXg7CiB9CiAKLXN0YXRpYyB1MzIgdmV0aF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCB2ZXRoX3ByaXYgKnByaXY7Ci0KLQlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gcHJpdi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotfQotCi1zdGF0aWMgaW50IHZldGhfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IHZldGhfcHJpdiAqcHJpdjsKLQotCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXByaXYtPmlwX3N1bW1lZCA9IGRhdGEgPyBDSEVDS1NVTV9VTk5FQ0VTU0FSWSA6IENIRUNLU1VNX05PTkU7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1MzIgdmV0aF9nZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXJldHVybiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTk9fQ1NVTSkgIT0gMDsKLX0KLQotc3RhdGljIGludCB2ZXRoX3NldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCWlmIChkYXRhKQotCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTk9fQ1NVTTsKLQllbHNlCi0JCWRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfTk9fQ1NVTTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB2ZXRoX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MJCT0gdmV0aF9nZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvCQk9IHZldGhfZ2V0X2RydmluZm8sCiAJLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCi0JLmdldF9yeF9jc3VtCQk9IHZldGhfZ2V0X3J4X2NzdW0sCi0JLnNldF9yeF9jc3VtCQk9IHZldGhfc2V0X3J4X2NzdW0sCi0JLmdldF90eF9jc3VtCQk9IHZldGhfZ2V0X3R4X2NzdW0sCi0JLnNldF90eF9jc3VtCQk9IHZldGhfc2V0X3R4X2NzdW0sCi0JLmdldF9zZwkJCT0gZXRodG9vbF9vcF9nZXRfc2csCi0JLnNldF9zZwkJCT0gZXRodG9vbF9vcF9zZXRfc2csCiAJLmdldF9zdHJpbmdzCQk9IHZldGhfZ2V0X3N0cmluZ3MsCiAJLmdldF9zc2V0X2NvdW50CQk9IHZldGhfZ2V0X3NzZXRfY291bnQsCiAJLmdldF9ldGh0b29sX3N0YXRzCT0gdmV0aF9nZXRfZXRodG9vbF9zdGF0cywKQEAgLTE2OCw4ICsxMjksOSBAQAogCiAJLyogZG9uJ3QgY2hhbmdlIGlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMLCBhcyB0aGF0CiAJICAgd2lsbCBjYXVzZSBiYWQgY2hlY2tzdW0gb24gZm9yd2FyZGVkIHBhY2tldHMgKi8KLQlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fTk9ORSkKLQkJc2tiLT5pcF9zdW1tZWQgPSByY3ZfcHJpdi0+aXBfc3VtbWVkOworCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9OT05FICYmCisJICAgIHJjdi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkKKwkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAogCWxlbmd0aCA9IHNrYi0+bGVuOwogCWlmIChkZXZfZm9yd2FyZF9za2IocmN2LCBza2IpICE9IE5FVF9SWF9TVUNDRVNTKQpAQCAtMzA0LDYgKzI2Niw4IEBACiAJZGV2LT5ldGh0b29sX29wcyA9ICZ2ZXRoX2V0aHRvb2xfb3BzOwogCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MTFRYOwogCWRldi0+ZGVzdHJ1Y3RvciA9IHZldGhfZGV2X2ZyZWU7CisKKwlkZXYtPmh3X2ZlYXR1cmVzID0gTkVUSUZfRl9OT19DU1VNIHwgTkVUSUZfRl9TRyB8IE5FVElGX0ZfUlhDU1VNOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMgYi9kcml2ZXJzL25ldC92aWEtcmhpbmUuYwppbmRleCBlYjVkNzVkLi43ZjIzYWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92aWEtcmhpbmUuYworKysgYi9kcml2ZXJzL25ldC92aWEtcmhpbmUuYwpAQCAtMjksNiArMjksOCBAQAogCiAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNkZWZpbmUgRFJWX05BTUUJInZpYS1yaGluZSIKICNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuNS4wIgogI2RlZmluZSBEUlZfUkVMREFURQkiMjAxMC0xMC0wOSIKQEAgLTM3LDYgKzM5LDcgQEAKIC8qIEEgZmV3IHVzZXItY29uZmlndXJhYmxlIHZhbHVlcy4KICAgIFRoZXNlIG1heSBiZSBtb2RpZmllZCB3aGVuIGEgZHJpdmVyIG1vZHVsZSBpcyBsb2FkZWQuICovCiAKKyNkZWZpbmUgREVCVUcKIHN0YXRpYyBpbnQgZGVidWcgPSAxOwkvKiAxIG5vcm1hbCBtZXNzYWdlcywgMCBxdWlldCAuLiA3IHZlcmJvc2UuICovCiBzdGF0aWMgaW50IG1heF9pbnRlcnJ1cHRfd29yayA9IDIwOwogCkBAIC0xMTEsOCArMTE0LDcgQEAKIAogLyogVGhlc2UgaWRlbnRpZnkgdGhlIGRyaXZlciBiYXNlIHZlcnNpb24gYW5kIG1heSBub3QgYmUgcmVtb3ZlZC4gKi8KIHN0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9Ci0JS0VSTl9JTkZPIERSVl9OQU1FICIuYzp2MS4xMC1MSyIgRFJWX1ZFUlNJT04gIiAiIERSVl9SRUxEQVRFCi0JIiBXcml0dGVuIGJ5IERvbmFsZCBCZWNrZXJcbiI7CisJInYxLjEwLUxLIiBEUlZfVkVSU0lPTiAiICIgRFJWX1JFTERBVEUgIiBXcml0dGVuIGJ5IERvbmFsZCBCZWNrZXIiOwogCiAvKiBUaGlzIGRyaXZlciB3YXMgd3JpdHRlbiB0byB1c2UgUENJIG1lbW9yeSBzcGFjZS4gU29tZSBlYXJseSB2ZXJzaW9ucwogICAgb2YgdGhlIFJoaW5lIG1heSBvbmx5IHdvcmsgY29ycmVjdGx5IHdpdGggSS9PIHNwYWNlIGFjY2Vzc2VzLiAqLwpAQCAtNDk1LDE0ICs0OTcsMTUgQEAKIHN0YXRpYyB2b2lkIHJoaW5lX2luaXRfY2FtX2ZpbHRlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHJoaW5lX3VwZGF0ZV92Y2FtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCi0jZGVmaW5lIFJISU5FX1dBSVRfRk9SKGNvbmRpdGlvbikgZG8gewkJCQkJXAotCWludCBpPTEwMjQ7CQkJCQkJCVwKLQl3aGlsZSAoIShjb25kaXRpb24pICYmIC0taSkJCQkJCVwKLQkJOwkJCQkJCQlcCi0JaWYgKGRlYnVnID4gMSAmJiBpIDwgNTEyKQkJCQkJXAotCQlwcmludGsoS0VSTl9JTkZPICIlczogJTRkIGN5Y2xlcyB1c2VkIEAgJXM6JWRcbiIsCVwKLQkJCQlEUlZfTkFNRSwgMTAyNC1pLCBfX2Z1bmNfXywgX19MSU5FX18pOwlcCi19IHdoaWxlKDApCisjZGVmaW5lIFJISU5FX1dBSVRfRk9SKGNvbmRpdGlvbikJCQkJXAorZG8gewkJCQkJCQkJXAorCWludCBpID0gMTAyNDsJCQkJCQlcCisJd2hpbGUgKCEoY29uZGl0aW9uKSAmJiAtLWkpCQkJCVwKKwkJOwkJCQkJCVwKKwlpZiAoZGVidWcgPiAxICYmIGkgPCA1MTIpCQkJCVwKKwkJcHJfaW5mbygiJTRkIGN5Y2xlcyB1c2VkIEAgJXM6JWRcbiIsCQlcCisJCQkxMDI0IC0gaSwgX19mdW5jX18sIF9fTElORV9fKTsJCVwKK30gd2hpbGUgKDApCiAKIHN0YXRpYyBpbmxpbmUgdTMyIGdldF9pbnRyX3N0YXR1cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtNTcxLDggKzU3NCw4IEBACiAJCQlkZWZhdWx0OgogCQkJCXJlYXNvbiA9ICJVbmtub3duIjsKIAkJCX0KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBXb2tlIHN5c3RlbSB1cC4gUmVhc29uOiAlcy5cbiIsCi0JCQkgICAgICAgRFJWX05BTUUsIHJlYXNvbik7CisJCQluZXRkZXZfaW5mbyhkZXYsICJXb2tlIHN5c3RlbSB1cC4gUmVhc29uOiAlc1xuIiwKKwkJCQkgICAgcmVhc29uKTsKIAkJfQogCX0KIH0KQEAgLTU4Niw4ICs1ODksNyBAQAogCUlPU1lOQzsKIAogCWlmIChpb3JlYWQ4KGlvYWRkciArIENoaXBDbWQxKSAmIENtZDFSZXNldCkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogUmVzZXQgbm90IGNvbXBsZXRlIHlldC4gIgotCQkJIlRyeWluZyBoYXJkZXIuXG4iLCBEUlZfTkFNRSk7CisJCW5ldGRldl9pbmZvKGRldiwgIlJlc2V0IG5vdCBjb21wbGV0ZSB5ZXQuIFRyeWluZyBoYXJkZXIuXG4iKTsKIAogCQkvKiBGb3JjZSByZXNldCAqLwogCQlpZiAocnAtPnF1aXJrcyAmIHJxRm9yY2VSZXNldCkKQEAgLTU5OCw5ICs2MDAsOSBAQAogCX0KIAogCWlmIChkZWJ1ZyA+IDEpCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZXNldCAlcy5cbiIsIGRldi0+bmFtZSwKLQkJCShpb3JlYWQ4KGlvYWRkciArIENoaXBDbWQxKSAmIENtZDFSZXNldCkgPwotCQkJImZhaWxlZCIgOiAic3VjY2VlZGVkIik7CisJCW5ldGRldl9pbmZvKGRldiwgIlJlc2V0ICVzXG4iLAorCQkJICAgIChpb3JlYWQ4KGlvYWRkciArIENoaXBDbWQxKSAmIENtZDFSZXNldCkgPworCQkJICAgICJmYWlsZWQiIDogInN1Y2NlZWRlZCIpOwogfQogCiAjaWZkZWYgVVNFX01NSU8KQEAgLTcyOCw5ICs3MzAsNyBAQAogCiAvKiB3aGVuIGJ1aWx0IGludG8gdGhlIGtlcm5lbCwgd2Ugb25seSBwcmludCB2ZXJzaW9uIGlmIGRldmljZSBpcyBmb3VuZCAqLwogI2lmbmRlZiBNT0RVTEUKLQlzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbjsKLQlpZiAoIXByaW50ZWRfdmVyc2lvbisrKQotCQlwcmludGsodmVyc2lvbik7CisJcHJfaW5mb19vbmNlKCIlc1xuIiwgdmVyc2lvbik7CiAjZW5kaWYKIAogCWlvX3NpemUgPSAyNTY7CkBAIC03NjUsOCArNzY1LDggQEAKIAkvKiB0aGlzIHNob3VsZCBhbHdheXMgYmUgc3VwcG9ydGVkICovCiAJcmMgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpOwogCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgIjMyLWJpdCBQQ0kgRE1BIGFkZHJlc3NlcyBub3Qgc3VwcG9ydGVkIGJ5ICIKLQkJICAgICAgICJ0aGUgY2FyZCE/XG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJIjMyLWJpdCBQQ0kgRE1BIGFkZHJlc3NlcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBjYXJkIT9cbiIpOwogCQlnb3RvIGVycl9vdXQ7CiAJfQogCkBAIC03NzQsNyArNzc0LDcgQEAKIAlpZiAoKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkgPCBpb19zaXplKSB8fAogCSAgICAocGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKSA8IGlvX3NpemUpKSB7CiAJCXJjID0gLUVJTzsKLQkJcHJpbnRrKEtFUk5fRVJSICJJbnN1ZmZpY2llbnQgUENJIHJlc291cmNlcywgYWJvcnRpbmdcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJbnN1ZmZpY2llbnQgUENJIHJlc291cmNlcywgYWJvcnRpbmdcbiIpOwogCQlnb3RvIGVycl9vdXQ7CiAJfQogCkBAIC03ODYsNyArNzg2LDcgQEAKIAlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IHJoaW5lX3ByaXZhdGUpKTsKIAlpZiAoIWRldikgewogCQlyYyA9IC1FTk9NRU07Ci0JCXByaW50ayhLRVJOX0VSUiAiYWxsb2NfZXRoZXJkZXYgZmFpbGVkXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiYWxsb2NfZXRoZXJkZXYgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJfb3V0OwogCX0KIAlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwpAQCAtODA0LDggKzgwNCw5IEBACiAJaW9hZGRyID0gcGNpX2lvbWFwKHBkZXYsIGJhciwgaW9fc2l6ZSk7CiAJaWYgKCFpb2FkZHIpIHsKIAkJcmMgPSAtRUlPOwotCQlwcmludGsoS0VSTl9FUlIgImlvcmVtYXAgZmFpbGVkIGZvciBkZXZpY2UgJXMsIHJlZ2lvbiAweCVYICIKLQkJICAgICAgICJAIDB4JWxYXG4iLCBwY2lfbmFtZShwZGV2KSwgaW9fc2l6ZSwgbWVtYWRkcik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJpb3JlbWFwIGZhaWxlZCBmb3IgZGV2aWNlICVzLCByZWdpb24gMHglWCBAIDB4JWxYXG4iLAorCQkJcGNpX25hbWUocGRldiksIGlvX3NpemUsIG1lbWFkZHIpOwogCQlnb3RvIGVycl9vdXRfZnJlZV9yZXM7CiAJfQogCkBAIC04MjAsOCArODIxLDkgQEAKIAkJdW5zaWduZWQgY2hhciBiID0gcmVhZGIoaW9hZGRyK3JlZyk7CiAJCWlmIChhICE9IGIpIHsKIAkJCXJjID0gLUVJTzsKLQkJCXByaW50ayhLRVJOX0VSUiAiTU1JTyBkbyBub3QgbWF0Y2ggUElPIFslMDJ4XSAiCi0JCQkgICAgICAgIiglMDJ4ICE9ICUwMngpXG4iLCByZWcsIGEsIGIpOworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJNTUlPIGRvIG5vdCBtYXRjaCBQSU8gWyUwMnhdICglMDJ4ICE9ICUwMngpXG4iLAorCQkJCXJlZywgYSwgYik7CiAJCQlnb3RvIGVycl9vdXRfdW5tYXA7CiAJCX0KIAl9CkBAIC04MzYsMTMgKzgzOCwxNSBAQAogCiAJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKIAkJZGV2LT5kZXZfYWRkcltpXSA9IGlvcmVhZDgoaW9hZGRyICsgU3RhdGlvbkFkZHIgKyBpKTsKLQltZW1jcHkoZGV2LT5wZXJtX2FkZHIsIGRldi0+ZGV2X2FkZHIsIGRldi0+YWRkcl9sZW4pOwogCi0JaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGRldi0+cGVybV9hZGRyKSkgewotCQlyYyA9IC1FSU87Ci0JCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBNQUMgYWRkcmVzc1xuIik7Ci0JCWdvdG8gZXJyX291dF91bm1hcDsKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcikpIHsKKwkJLyogUmVwb3J0IGl0IGFuZCB1c2UgYSByYW5kb20gZXRoZXJuZXQgYWRkcmVzcyBpbnN0ZWFkICovCisJCW5ldGRldl9lcnIoZGV2LCAiSW52YWxpZCBNQUMgYWRkcmVzczogJXBNXG4iLCBkZXYtPmRldl9hZGRyKTsKKwkJcmFuZG9tX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcik7CisJCW5ldGRldl9pbmZvKGRldiwgIlVzaW5nIHJhbmRvbSBNQUMgYWRkcmVzczogJXBNXG4iLAorCQkJICAgIGRldi0+ZGV2X2FkZHIpOwogCX0KKwltZW1jcHkoZGV2LT5wZXJtX2FkZHIsIGRldi0+ZGV2X2FkZHIsIGRldi0+YWRkcl9sZW4pOwogCiAJLyogRm9yIFJoaW5lLUkvSUksIHBoeV9pZCBpcyBsb2FkZWQgZnJvbSBFRVBST00gKi8KIAlpZiAoIXBoeV9pZCkKQEAgLTg3OCwxNCArODgyLDE0IEBACiAJaWYgKHJjKQogCQlnb3RvIGVycl9vdXRfdW5tYXA7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogVklBICVzIGF0IDB4JWx4LCAlcE0sIElSUSAlZC5cbiIsCi0JICAgICAgIGRldi0+bmFtZSwgbmFtZSwKKwluZXRkZXZfaW5mbyhkZXYsICJWSUEgJXMgYXQgMHglbHgsICVwTSwgSVJRICVkXG4iLAorCQkgICAgbmFtZSwKICNpZmRlZiBVU0VfTU1JTwotCSAgICAgICBtZW1hZGRyLAorCQkgICAgbWVtYWRkciwKICNlbHNlCi0JICAgICAgIChsb25nKWlvYWRkciwKKwkJICAgIChsb25nKWlvYWRkciwKICNlbmRpZgotCSAgICAgICBkZXYtPmRldl9hZGRyLCBwZGV2LT5pcnEpOworCQkgICAgZGV2LT5kZXZfYWRkciwgcGRldi0+aXJxKTsKIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCkBAIC04OTYsMTEgKzkwMCwxMSBAQAogCQltZGlvX3dyaXRlKGRldiwgcGh5X2lkLCBNSUlfQk1DUiwgbWlpX2NtZCk7CiAJCWlmIChtaWlfc3RhdHVzICE9IDB4ZmZmZiAmJiBtaWlfc3RhdHVzICE9IDB4MDAwMCkgewogCQkJcnAtPm1paV9pZi5hZHZlcnRpc2luZyA9IG1kaW9fcmVhZChkZXYsIHBoeV9pZCwgNCk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogTUlJIFBIWSBmb3VuZCBhdCBhZGRyZXNzICIKLQkJCSAgICAgICAiJWQsIHN0YXR1cyAweCU0LjR4IGFkdmVydGlzaW5nICU0LjR4ICIKLQkJCSAgICAgICAiTGluayAlNC40eC5cbiIsIGRldi0+bmFtZSwgcGh5X2lkLAotCQkJICAgICAgIG1paV9zdGF0dXMsIHJwLT5taWlfaWYuYWR2ZXJ0aXNpbmcsCi0JCQkgICAgICAgbWRpb19yZWFkKGRldiwgcGh5X2lkLCA1KSk7CisJCQluZXRkZXZfaW5mbyhkZXYsCisJCQkJICAgICJNSUkgUEhZIGZvdW5kIGF0IGFkZHJlc3MgJWQsIHN0YXR1cyAweCUwNHggYWR2ZXJ0aXNpbmcgJTA0eCBMaW5rICUwNHhcbiIsCisJCQkJICAgIHBoeV9pZCwKKwkJCQkgICAgbWlpX3N0YXR1cywgcnAtPm1paV9pZi5hZHZlcnRpc2luZywKKwkJCQkgICAgbWRpb19yZWFkKGRldiwgcGh5X2lkLCA1KSk7CiAKIAkJCS8qIHNldCBJRkZfUlVOTklORyAqLwogCQkJaWYgKG1paV9zdGF0dXMgJiBCTVNSX0xTVEFUVVMpCkBAIC05MTIsOCArOTE2LDcgQEAKIAl9CiAJcnAtPm1paV9pZi5waHlfaWQgPSBwaHlfaWQ7CiAJaWYgKGRlYnVnID4gMSAmJiBhdm9pZF9EMykKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE5vIEQzIHBvd2VyIHN0YXRlIGF0IHNodXRkb3duLlxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7CisJCW5ldGRldl9pbmZvKGRldiwgIk5vIEQzIHBvd2VyIHN0YXRlIGF0IHNodXRkb3duXG4iKTsKIAogCXJldHVybiAwOwogCkBAIC05MzgsNyArOTQxLDcgQEAKIAkJCQkgICAgVFhfUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCB0eF9kZXNjKSwKIAkJCQkgICAgJnJpbmdfZG1hKTsKIAlpZiAoIXJpbmcpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgYWxsb2NhdGUgRE1BIG1lbW9yeS5cbiIpOworCQluZXRkZXZfZXJyKGRldiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBETUEgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWlmIChycC0+cXVpcmtzICYgcnFSaGluZUkpIHsKQEAgLTEwOTgsOCArMTEwMSw4IEBACiAJICAgIGlvd3JpdGU4KGlvcmVhZDgoaW9hZGRyICsgQ2hpcENtZDEpICYgfkNtZDFGRHVwbGV4LAogCQkgICBpb2FkZHIgKyBDaGlwQ21kMSk7CiAJaWYgKGRlYnVnID4gMSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGZvcmNlX21lZGlhICVkLCBjYXJyaWVyICVkXG4iLCBkZXYtPm5hbWUsCi0JCQlycC0+bWlpX2lmLmZvcmNlX21lZGlhLCBuZXRpZl9jYXJyaWVyX29rKGRldikpOworCQluZXRkZXZfaW5mbyhkZXYsICJmb3JjZV9tZWRpYSAlZCwgY2FycmllciAlZFxuIiwKKwkJCSAgICBycC0+bWlpX2lmLmZvcmNlX21lZGlhLCBuZXRpZl9jYXJyaWVyX29rKGRldikpOwogfQogCiAvKiBDYWxsZWQgYWZ0ZXIgc3RhdHVzIG9mIGZvcmNlX21lZGlhIHBvc3NpYmx5IGNoYW5nZWQgKi8KQEAgLTExMTMsOSArMTExNiw4IEBACiAJZWxzZQkvKiBMZXQgTU1JIGxpYnJhcnkgdXBkYXRlIGNhcnJpZXIgc3RhdHVzICovCiAJCXJoaW5lX2NoZWNrX21lZGlhKG1paS0+ZGV2LCAwKTsKIAlpZiAoZGVidWcgPiAxKQotCQlwcmludGsoS0VSTl9JTkZPICIlczogZm9yY2VfbWVkaWEgJWQsIGNhcnJpZXIgJWRcbiIsCi0JCSAgICAgICBtaWktPmRldi0+bmFtZSwgbWlpLT5mb3JjZV9tZWRpYSwKLQkJICAgICAgIG5ldGlmX2NhcnJpZXJfb2sobWlpLT5kZXYpKTsKKwkJbmV0ZGV2X2luZm8obWlpLT5kZXYsICJmb3JjZV9tZWRpYSAlZCwgY2FycmllciAlZFxuIiwKKwkJCSAgICBtaWktPmZvcmNlX21lZGlhLCBuZXRpZl9jYXJyaWVyX29rKG1paS0+ZGV2KSk7CiB9CiAKIC8qKgpAQCAtMTQwMiw4ICsxNDA0LDcgQEAKIAkJcmV0dXJuIHJjOwogCiAJaWYgKGRlYnVnID4gMSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByaGluZV9vcGVuKCkgaXJxICVkLlxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgcnAtPnBkZXYtPmlycSk7CisJCW5ldGRldl9kYmcoZGV2LCAiJXMoKSBpcnEgJWRcbiIsIF9fZnVuY19fLCBycC0+cGRldi0+aXJxKTsKIAogCXJjID0gYWxsb2NfcmluZyhkZXYpOwogCWlmIChyYykgewpAQCAtMTQxNSwxMCArMTQxNiw5IEBACiAJcmhpbmVfY2hpcF9yZXNldChkZXYpOwogCWluaXRfcmVnaXN0ZXJzKGRldik7CiAJaWYgKGRlYnVnID4gMikKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBEb25lIHJoaW5lX29wZW4oKSwgc3RhdHVzICU0LjR4ICIKLQkJICAgICAgICJNSUkgc3RhdHVzOiAlNC40eC5cbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGlvcmVhZDE2KGlvYWRkciArIENoaXBDbWQpLAotCQkgICAgICAgbWRpb19yZWFkKGRldiwgcnAtPm1paV9pZi5waHlfaWQsIE1JSV9CTVNSKSk7CisJCW5ldGRldl9kYmcoZGV2LCAiJXMoKSBEb25lIC0gc3RhdHVzICUwNHggTUlJIHN0YXR1czogJTA0eFxuIiwKKwkJCSAgIF9fZnVuY19fLCBpb3JlYWQxNihpb2FkZHIgKyBDaGlwQ21kKSwKKwkJCSAgIG1kaW9fcmVhZChkZXYsIHJwLT5taWlfaWYucGh5X2lkLCBNSUlfQk1TUikpOwogCiAJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIApAQCAtMTQ2MSwxMCArMTQ2MSw5IEBACiAJc3RydWN0IHJoaW5lX3ByaXZhdGUgKnJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHJwLT5iYXNlOwogCi0JcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFRyYW5zbWl0IHRpbWVkIG91dCwgc3RhdHVzICU0LjR4LCBQSFkgc3RhdHVzICIKLQkgICAgICAgIiU0LjR4LCByZXNldHRpbmcuLi5cbiIsCi0JICAgICAgIGRldi0+bmFtZSwgaW9yZWFkMTYoaW9hZGRyICsgSW50clN0YXR1cyksCi0JICAgICAgIG1kaW9fcmVhZChkZXYsIHJwLT5taWlfaWYucGh5X2lkLCBNSUlfQk1TUikpOworCW5ldGRldl93YXJuKGRldiwgIlRyYW5zbWl0IHRpbWVkIG91dCwgc3RhdHVzICUwNHgsIFBIWSBzdGF0dXMgJTA0eCwgcmVzZXR0aW5nLi4uXG4iLAorCQkgICAgaW9yZWFkMTYoaW9hZGRyICsgSW50clN0YXR1cyksCisJCSAgICBtZGlvX3JlYWQoZGV2LCBycC0+bWlpX2lmLnBoeV9pZCwgTUlJX0JNU1IpKTsKIAogCXNjaGVkdWxlX3dvcmsoJnJwLT5yZXNldF90YXNrKTsKIH0KQEAgLTE1NTEsOCArMTU1MCw4IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnAtPmxvY2ssIGZsYWdzKTsKIAogCWlmIChkZWJ1ZyA+IDQpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUcmFuc21pdCBmcmFtZSAjJWQgcXVldWVkIGluIHNsb3QgJWQuXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBycC0+Y3VyX3R4LTEsIGVudHJ5KTsKKwkJbmV0ZGV2X2RiZyhkZXYsICJUcmFuc21pdCBmcmFtZSAjJWQgcXVldWVkIGluIHNsb3QgJWRcbiIsCisJCQkgICBycC0+Y3VyX3R4LTEsIGVudHJ5KTsKIAl9CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KQEAgLTE1NzgsOCArMTU3Nyw4IEBACiAJCUlPU1lOQzsKIAogCQlpZiAoZGVidWcgPiA0KQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbnRlcnJ1cHQsIHN0YXR1cyAlOC44eC5cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBpbnRyX3N0YXR1cyk7CisJCQluZXRkZXZfZGJnKGRldiwgIkludGVycnVwdCwgc3RhdHVzICUwOHhcbiIsCisJCQkJICAgaW50cl9zdGF0dXMpOwogCiAJCWlmIChpbnRyX3N0YXR1cyAmIChJbnRyUnhEb25lIHwgSW50clJ4RXJyIHwgSW50clJ4RHJvcHBlZCB8CiAJCQkJICAgSW50clJ4V2FrZVVwIHwgSW50clJ4RW1wdHkgfCBJbnRyUnhOb0J1ZikpIHsKQEAgLTE1OTcsOSArMTU5Niw5IEBACiAJCQkJUkhJTkVfV0FJVF9GT1IoIShpb3JlYWQ4KGlvYWRkcitDaGlwQ21kKSAmIENtZFR4T24pKTsKIAkJCQlpZiAoZGVidWcgPiAyICYmCiAJCQkJICAgIGlvcmVhZDgoaW9hZGRyK0NoaXBDbWQpICYgQ21kVHhPbikKLQkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICIKLQkJCQkJICAgICAgICJyaGluZV9pbnRlcnJ1cHQoKSBUeCBlbmdpbmUgIgotCQkJCQkgICAgICAgInN0aWxsIG9uLlxuIiwgZGV2LT5uYW1lKTsKKwkJCQkJbmV0ZGV2X3dhcm4oZGV2LAorCQkJCQkJICAgICIlczogVHggZW5naW5lIHN0aWxsIG9uXG4iLAorCQkJCQkJICAgIF9fZnVuY19fKTsKIAkJCX0KIAkJCXJoaW5lX3R4KGRldik7CiAJCX0KQEAgLTE2MTEsMTYgKzE2MTAsMTUgQEAKIAkJCXJoaW5lX2Vycm9yKGRldiwgaW50cl9zdGF0dXMpOwogCiAJCWlmICgtLWJvZ3VzY250IDwgMCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFRvbyBtdWNoIHdvcmsgYXQgaW50ZXJydXB0LCAiCi0JCQkgICAgICAgInN0YXR1cz0lIzguOHguXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgaW50cl9zdGF0dXMpOworCQkJbmV0ZGV2X3dhcm4oZGV2LCAiVG9vIG11Y2ggd29yayBhdCBpbnRlcnJ1cHQsIHN0YXR1cz0lIzA4eFxuIiwKKwkJCQkgICAgaW50cl9zdGF0dXMpOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKIAlpZiAoZGVidWcgPiAzKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGV4aXRpbmcgaW50ZXJydXB0LCBzdGF0dXM9JTguOHguXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBpb3JlYWQxNihpb2FkZHIgKyBJbnRyU3RhdHVzKSk7CisJCW5ldGRldl9kYmcoZGV2LCAiZXhpdGluZyBpbnRlcnJ1cHQsIHN0YXR1cz0lMDh4XG4iLAorCQkJICAgaW9yZWFkMTYoaW9hZGRyICsgSW50clN0YXR1cykpOwogCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwogfQogCkBAIC0xNjM3LDE1ICsxNjM1LDE0IEBACiAJd2hpbGUgKHJwLT5kaXJ0eV90eCAhPSBycC0+Y3VyX3R4KSB7CiAJCXR4c3RhdHVzID0gbGUzMl90b19jcHUocnAtPnR4X3JpbmdbZW50cnldLnR4X3N0YXR1cyk7CiAJCWlmIChkZWJ1ZyA+IDYpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiVHggc2NhdmVuZ2UgJWQgc3RhdHVzICU4Ljh4LlxuIiwKLQkJCSAgICAgICBlbnRyeSwgdHhzdGF0dXMpOworCQkJbmV0ZGV2X2RiZyhkZXYsICJUeCBzY2F2ZW5nZSAlZCBzdGF0dXMgJTA4eFxuIiwKKwkJCQkgICBlbnRyeSwgdHhzdGF0dXMpOwogCQlpZiAodHhzdGF0dXMgJiBEZXNjT3duKQogCQkJYnJlYWs7CiAJCWlmICh0eHN0YXR1cyAmIDB4ODAwMCkgewogCQkJaWYgKGRlYnVnID4gMSkKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFRyYW5zbWl0IGVycm9yLCAiCi0JCQkJICAgICAgICJUeCBzdGF0dXMgJTguOHguXG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIHR4c3RhdHVzKTsKKwkJCQluZXRkZXZfZGJnKGRldiwgIlRyYW5zbWl0IGVycm9yLCBUeCBzdGF0dXMgJTA4eFxuIiwKKwkJCQkJICAgdHhzdGF0dXMpOwogCQkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJCWlmICh0eHN0YXR1cyAmIDB4MDQwMCkKIAkJCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CkBAIC0xNjY4LDkgKzE2NjUsOSBAQAogCQkJZWxzZQogCQkJCWRldi0+c3RhdHMuY29sbGlzaW9ucyArPSB0eHN0YXR1cyAmIDB4MEY7CiAJCQlpZiAoZGVidWcgPiA2KQotCQkJCXByaW50ayhLRVJOX0RFQlVHICJjb2xsaXNpb25zOiAlMS4xeDolMS4xeFxuIiwKLQkJCQkgICAgICAgKHR4c3RhdHVzID4+IDMpICYgMHhGLAotCQkJCSAgICAgICB0eHN0YXR1cyAmIDB4Rik7CisJCQkJbmV0ZGV2X2RiZyhkZXYsICJjb2xsaXNpb25zOiAlMS4xeDolMS4xeFxuIiwKKwkJCQkJICAgKHR4c3RhdHVzID4+IDMpICYgMHhGLAorCQkJCQkgICB0eHN0YXR1cyAmIDB4Rik7CiAJCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHJwLT50eF9za2J1ZmZbZW50cnldLT5sZW47CiAJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJfQpAQCAtMTcwMyw3ICsxNzAwLDcgQEAKIHN0YXRpYyBpbmxpbmUgdTE2IHJoaW5lX2dldF92bGFuX3RjaShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZGF0YV9zaXplKQogewogCXU4ICp0cmFpbGVyID0gKHU4ICopc2tiLT5kYXRhICsgKChkYXRhX3NpemUgKyAzKSAmIH4zKSArIDI7Ci0JcmV0dXJuIG50b2hzKCoodTE2ICopdHJhaWxlcik7CisJcmV0dXJuIGJlMTZfdG9fY3B1cCgoX19iZTE2ICopdHJhaWxlcik7CiB9CiAKIC8qIFByb2Nlc3MgdXAgdG8gbGltaXQgZnJhbWVzIGZyb20gcmVjZWl2ZSByaW5nICovCkBAIC0xNzE0LDkgKzE3MTEsOSBAQAogCWludCBlbnRyeSA9IHJwLT5jdXJfcnggJSBSWF9SSU5HX1NJWkU7CiAKIAlpZiAoZGVidWcgPiA0KSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogcmhpbmVfcngoKSwgZW50cnkgJWQgc3RhdHVzICU4Ljh4LlxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZW50cnksCi0JCSAgICAgICBsZTMyX3RvX2NwdShycC0+cnhfaGVhZF9kZXNjLT5yeF9zdGF0dXMpKTsKKwkJbmV0ZGV2X2RiZyhkZXYsICIlcygpLCBlbnRyeSAlZCBzdGF0dXMgJTA4eFxuIiwKKwkJCSAgIF9fZnVuY19fLCBlbnRyeSwKKwkJCSAgIGxlMzJfdG9fY3B1KHJwLT5yeF9oZWFkX2Rlc2MtPnJ4X3N0YXR1cykpOwogCX0KIAogCS8qIElmIEVPUCBpcyBzZXQgb24gdGhlIG5leHQgZW50cnksIGl0J3MgYSBuZXcgcGFja2V0LiBTZW5kIGl0IHVwLiAqLwpAQCAtMTczMCwyNiArMTcyNywyNiBAQAogCQkJYnJlYWs7CiAKIAkJaWYgKGRlYnVnID4gNCkKLQkJCXByaW50ayhLRVJOX0RFQlVHICJyaGluZV9yeCgpIHN0YXR1cyBpcyAlOC44eC5cbiIsCi0JCQkgICAgICAgZGVzY19zdGF0dXMpOworCQkJbmV0ZGV2X2RiZyhkZXYsICIlcygpIHN0YXR1cyBpcyAlMDh4XG4iLAorCQkJCSAgIF9fZnVuY19fLCBkZXNjX3N0YXR1cyk7CiAKIAkJaWYgKChkZXNjX3N0YXR1cyAmIChSeFdob2xlUGt0IHwgUnhFcnIpKSAhPSBSeFdob2xlUGt0KSB7CiAJCQlpZiAoKGRlc2Nfc3RhdHVzICYgUnhXaG9sZVBrdCkgIT0gUnhXaG9sZVBrdCkgewotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBPdmVyc2l6ZWQgRXRoZXJuZXQgIgotCQkJCSAgICAgICAiZnJhbWUgc3Bhbm5lZCBtdWx0aXBsZSBidWZmZXJzLCBlbnRyeSAiCi0JCQkJICAgICAgICIlI3ggbGVuZ3RoICVkIHN0YXR1cyAlOC44eCFcbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwgZW50cnksIGRhdGFfc2l6ZSwKLQkJCQkgICAgICAgZGVzY19zdGF0dXMpOwotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBPdmVyc2l6ZWQgRXRoZXJuZXQgIgotCQkJCSAgICAgICAiZnJhbWUgJXAgdnMgJXAuXG4iLCBkZXYtPm5hbWUsCi0JCQkJICAgICAgIHJwLT5yeF9oZWFkX2Rlc2MsICZycC0+cnhfcmluZ1tlbnRyeV0pOworCQkJCW5ldGRldl93YXJuKGRldiwKKwkiT3ZlcnNpemVkIEV0aGVybmV0IGZyYW1lIHNwYW5uZWQgbXVsdGlwbGUgYnVmZmVycywgIgorCSJlbnRyeSAlI3ggbGVuZ3RoICVkIHN0YXR1cyAlMDh4IVxuIiwKKwkJCQkJICAgIGVudHJ5LCBkYXRhX3NpemUsCisJCQkJCSAgICBkZXNjX3N0YXR1cyk7CisJCQkJbmV0ZGV2X3dhcm4oZGV2LAorCQkJCQkgICAgIk92ZXJzaXplZCBFdGhlcm5ldCBmcmFtZSAlcCB2cyAlcFxuIiwKKwkJCQkJICAgIHJwLT5yeF9oZWFkX2Rlc2MsCisJCQkJCSAgICAmcnAtPnJ4X3JpbmdbZW50cnldKTsKIAkJCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJCX0gZWxzZSBpZiAoZGVzY19zdGF0dXMgJiBSeEVycikgewogCQkJCS8qIFRoZXJlIHdhcyBhIGVycm9yLiAqLwogCQkJCWlmIChkZWJ1ZyA+IDIpCi0JCQkJCXByaW50ayhLRVJOX0RFQlVHICJyaGluZV9yeCgpIFJ4ICIKLQkJCQkJICAgICAgICJlcnJvciB3YXMgJTguOHguXG4iLAotCQkJCQkgICAgICAgZGVzY19zdGF0dXMpOworCQkJCQluZXRkZXZfZGJnKGRldiwgIiVzKCkgUnggZXJyb3Igd2FzICUwOHhcbiIsCisJCQkJCQkgICBfX2Z1bmNfXywgZGVzY19zdGF0dXMpOwogCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQkJaWYgKGRlc2Nfc3RhdHVzICYgMHgwMDMwKQogCQkJCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKQEAgLTE3OTEsOSArMTc4OCw3IEBACiAJCQl9IGVsc2UgewogCQkJCXNrYiA9IHJwLT5yeF9za2J1ZmZbZW50cnldOwogCQkJCWlmIChza2IgPT0gTlVMTCkgewotCQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbmNvbnNpc3RlbnQgUnggIgotCQkJCQkgICAgICAgImRlc2NyaXB0b3IgY2hhaW4uXG4iLAotCQkJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCQkJbmV0ZGV2X2VycihkZXYsICJJbmNvbnNpc3RlbnQgUnggZGVzY3JpcHRvciBjaGFpblxuIik7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCQlycC0+cnhfc2tidWZmW2VudHJ5XSA9IE5VTEw7CkBAIC0xODg2LDkgKzE4ODEsOCBAQAogCWVsc2UgewogCQkvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KIAkJaWYgKGRlYnVnID4gMSkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiByaGluZV9yZXN0YXJ0X3R4KCkgIgotCQkJICAgICAgICJBbm90aGVyIGVycm9yIG9jY3VycmVkICU4Ljh4LlxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGludHJfc3RhdHVzKTsKKwkJCW5ldGRldl93YXJuKGRldiwgIiVzKCkgQW5vdGhlciBlcnJvciBvY2N1cnJlZCAlMDh4XG4iLAorCQkJCSAgIF9fZnVuY19fLCBpbnRyX3N0YXR1cyk7CiAJfQogCiB9CkBAIC0xOTA5LDIxICsxOTAzLDE5IEBACiAJfQogCWlmIChpbnRyX3N0YXR1cyAmIEludHJUeEFib3J0ZWQpIHsKIAkJaWYgKGRlYnVnID4gMSkKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBBYm9ydCAlOC44eCwgZnJhbWUgZHJvcHBlZC5cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBpbnRyX3N0YXR1cyk7CisJCQluZXRkZXZfaW5mbyhkZXYsICJBYm9ydCAlMDh4LCBmcmFtZSBkcm9wcGVkXG4iLAorCQkJCSAgICBpbnRyX3N0YXR1cyk7CiAJfQogCWlmIChpbnRyX3N0YXR1cyAmIEludHJUeFVuZGVycnVuKSB7CiAJCWlmIChycC0+dHhfdGhyZXNoIDwgMHhFMCkKIAkJCUJZVEVfUkVHX0JJVFNfU0VUKChycC0+dHhfdGhyZXNoICs9IDB4MjApLCAweDgwLCBpb2FkZHIgKyBUeENvbmZpZyk7CiAJCWlmIChkZWJ1ZyA+IDEpCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogVHJhbnNtaXR0ZXIgdW5kZXJydW4sIFR4ICIKLQkJCSAgICAgICAidGhyZXNob2xkIG5vdyAlMi4yeC5cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBycC0+dHhfdGhyZXNoKTsKKwkJCW5ldGRldl9pbmZvKGRldiwgIlRyYW5zbWl0dGVyIHVuZGVycnVuLCBUeCB0aHJlc2hvbGQgbm93ICUwMnhcbiIsCisJCQkJICAgIHJwLT50eF90aHJlc2gpOwogCX0KIAlpZiAoaW50cl9zdGF0dXMgJiBJbnRyVHhEZXNjUmFjZSkgewogCQlpZiAoZGVidWcgPiAyKQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFR4IGRlc2NyaXB0b3Igd3JpdGUtYmFjayByYWNlLlxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJbmV0ZGV2X2luZm8oZGV2LCAiVHggZGVzY3JpcHRvciB3cml0ZS1iYWNrIHJhY2VcbiIpOwogCX0KIAlpZiAoKGludHJfc3RhdHVzICYgSW50clR4RXJyb3IpICYmCiAJICAgIChpbnRyX3N0YXR1cyAmIChJbnRyVHhBYm9ydGVkIHwKQEAgLTE5MzIsOSArMTkyNCw4IEBACiAJCQlCWVRFX1JFR19CSVRTX1NFVCgocnAtPnR4X3RocmVzaCArPSAweDIwKSwgMHg4MCwgaW9hZGRyICsgVHhDb25maWcpOwogCQl9CiAJCWlmIChkZWJ1ZyA+IDEpCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogVW5zcGVjaWZpZWQgZXJyb3IuIFR4ICIKLQkJCSAgICAgICAidGhyZXNob2xkIG5vdyAlMi4yeC5cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBycC0+dHhfdGhyZXNoKTsKKwkJCW5ldGRldl9pbmZvKGRldiwgIlVuc3BlY2lmaWVkIGVycm9yLiBUeCB0aHJlc2hvbGQgbm93ICUwMnhcbiIsCisJCQkJICAgIHJwLT50eF90aHJlc2gpOwogCX0KIAlpZiAoaW50cl9zdGF0dXMgJiAoSW50clR4QWJvcnRlZCB8IEludHJUeFVuZGVycnVuIHwgSW50clR4RGVzY1JhY2UgfAogCQkJICAgSW50clR4RXJyb3IpKQpAQCAtMTk0NCw4ICsxOTM1LDggQEAKIAkJCSAgICBJbnRyVHhFcnJvciB8IEludHJUeEFib3J0ZWQgfCBJbnRyTm9ybWFsU3VtbWFyeSB8CiAJCQkgICAgSW50clR4RGVzY1JhY2UpKSB7CiAJCWlmIChkZWJ1ZyA+IDEpCi0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBTb21ldGhpbmcgV2lja2VkIGhhcHBlbmVkISAiCi0JCQkgICAgICAgIiU4Ljh4LlxuIiwgZGV2LT5uYW1lLCBpbnRyX3N0YXR1cyk7CisJCQluZXRkZXZfZXJyKGRldiwgIlNvbWV0aGluZyBXaWNrZWQgaGFwcGVuZWQhICUwOHhcbiIsCisJCQkJICAgaW50cl9zdGF0dXMpOwogCX0KIAogCXNwaW5fdW5sb2NrKCZycC0+bG9jayk7CkBAIC0yMTQ1LDkgKzIxMzYsOCBAQAogCXNwaW5fbG9ja19pcnEoJnJwLT5sb2NrKTsKIAogCWlmIChkZWJ1ZyA+IDEpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogU2h1dHRpbmcgZG93biBldGhlcmNhcmQsICIKLQkJICAgICAgICJzdGF0dXMgd2FzICU0LjR4LlxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgaW9yZWFkMTYoaW9hZGRyICsgQ2hpcENtZCkpOworCQluZXRkZXZfZGJnKGRldiwgIlNodXR0aW5nIGRvd24gZXRoZXJjYXJkLCBzdGF0dXMgd2FzICUwNHhcbiIsCisJCQkgICBpb3JlYWQxNihpb2FkZHIgKyBDaGlwQ21kKSk7CiAKIAkvKiBTd2l0Y2ggdG8gbG9vcGJhY2sgbW9kZSB0byBhdm9pZCBoYXJkd2FyZSByYWNlcy4gKi8KIAlpb3dyaXRlOChycC0+dHhfdGhyZXNoIHwgMHgwMiwgaW9hZGRyICsgVHhDb25maWcpOwpAQCAtMjI2NSwxMiArMjI1NSwxMiBAQAogCQlyZXR1cm4gMDsKIAogCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgcmhpbmVfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpKQotCQlwcmludGsoS0VSTl9FUlIgInZpYS1yaGluZSAlczogcmVxdWVzdF9pcnEgZmFpbGVkXG4iLCBkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGRldiwgInJlcXVlc3RfaXJxIGZhaWxlZFxuIik7CiAKIAlyZXQgPSBwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CiAJaWYgKGRlYnVnID4gMSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVudGVyaW5nIHBvd2VyIHN0YXRlIEQwICVzICglZCkuXG4iLAotCQkJZGV2LT5uYW1lLCByZXQgPyAiZmFpbGVkIiA6ICJzdWNjZWVkZWQiLCByZXQpOworCQluZXRkZXZfaW5mbyhkZXYsICJFbnRlcmluZyBwb3dlciBzdGF0ZSBEMCAlcyAoJWQpXG4iLAorCQkJICAgIHJldCA/ICJmYWlsZWQiIDogInN1Y2NlZWRlZCIsIHJldCk7CiAKIAlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKIApAQCAtMjMyNiwxNyArMjMxNiwxNSBAQAogewogLyogd2hlbiBhIG1vZHVsZSwgdGhpcyBpcyBwcmludGVkIHdoZXRoZXIgb3Igbm90IGRldmljZXMgYXJlIGZvdW5kIGluIHByb2JlICovCiAjaWZkZWYgTU9EVUxFCi0JcHJpbnRrKHZlcnNpb24pOworCXByX2luZm8oIiVzXG4iLCB2ZXJzaW9uKTsKICNlbmRpZgogCWlmIChkbWlfY2hlY2tfc3lzdGVtKHJoaW5lX2RtaV90YWJsZSkpIHsKIAkJLyogdGhlc2UgQklPU2VzIGZhaWwgYXQgUFhFIGJvb3QgaWYgY2hpcCBpcyBpbiBEMyAqLwogCQlhdm9pZF9EMyA9IDE7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBCcm9rZW4gQklPUyBkZXRlY3RlZCwgYXZvaWRfRDMgIgotCQkJCSAgICAiZW5hYmxlZC5cbiIsCi0JCSAgICAgICBEUlZfTkFNRSk7CisJCXByX3dhcm4oIkJyb2tlbiBCSU9TIGRldGVjdGVkLCBhdm9pZF9EMyBlbmFibGVkXG4iKTsKIAl9CiAJZWxzZSBpZiAoYXZvaWRfRDMpCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBhdm9pZF9EMyBzZXQuXG4iLCBEUlZfTkFNRSk7CisJCXByX2luZm8oImF2b2lkX0QzIHNldFxuIik7CiAKIAlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcmhpbmVfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMKaW5kZXggNGZlMDUxNy4uMDZkYWE5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMKKysrIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMKQEAgLTI2MDAsOCArMjYwMCw3IEBACiAJLyoKIAkgKglIYW5kbGUgaGFyZHdhcmUgY2hlY2tzdW0KIAkgKi8KLQlpZiAoKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0lQX0NTVU0pICYmCi0JICAgIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSkgeworCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CiAJCWNvbnN0IHN0cnVjdCBpcGhkciAqaXAgPSBpcF9oZHIoc2tiKTsKIAkJaWYgKGlwLT5wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkKIAkJCXRkX3B0ci0+dGRlc2MxLlRDUiB8PSBUQ1IwX1RDUENLOwpAQCAtMjg0MSw2ICsyODQwLDcgQEAKIAlkZXYtPmV0aHRvb2xfb3BzID0gJnZlbG9jaXR5X2V0aHRvb2xfb3BzOwogCW5ldGlmX25hcGlfYWRkKGRldiwgJnZwdHItPm5hcGksIHZlbG9jaXR5X3BvbGwsIFZFTE9DSVRZX05BUElfV0VJR0hUKTsKIAorCWRldi0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1NHIHwgTkVUSUZfRl9IV19WTEFOX1RYOwogCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX0ZJTFRFUiB8CiAJCU5FVElGX0ZfSFdfVkxBTl9SWCB8IE5FVElGX0ZfSVBfQ1NVTTsKIApAQCAtMzE4Miw3ICszMTgyLDggQEAKIAkJcGNpX3NldF9wb3dlcl9zdGF0ZSh2cHRyLT5wZGV2LCBQQ0lfRDNob3QpOwogfQogCi1zdGF0aWMgaW50IHZlbG9jaXR5X2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKK3N0YXRpYyBpbnQgdmVsb2NpdHlfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewogCXN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqcmVncyA9IHZwdHItPm1hY19yZWdzOwpAQCAtMzIyOCwxMiArMzIyOSwxNCBAQAogCQkJYnJlYWs7CiAJCX0KIAl9CisKIAlpZiAoc3RhdHVzICYgVkVMT0NJVFlfU1BFRURfMTAwMCkKLQkJY21kLT5zcGVlZCA9IFNQRUVEXzEwMDA7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIFNQRUVEXzEwMDApOwogCWVsc2UgaWYgKHN0YXR1cyAmIFZFTE9DSVRZX1NQRUVEXzEwMCkKLQkJY21kLT5zcGVlZCA9IFNQRUVEXzEwMDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgU1BFRURfMTAwKTsKIAllbHNlCi0JCWNtZC0+c3BlZWQgPSBTUEVFRF8xMDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgU1BFRURfMTApOworCiAJY21kLT5hdXRvbmVnID0gKHN0YXR1cyAmIFZFTE9DSVRZX0FVVE9ORUdfRU5BQkxFKSA/IEFVVE9ORUdfRU5BQkxFIDogQVVUT05FR19ESVNBQkxFOwogCWNtZC0+cG9ydCA9IFBPUlRfVFA7CiAJY21kLT50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7CkBAIC0zMjQ3LDkgKzMyNTAsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2ZWxvY2l0eV9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCitzdGF0aWMgaW50IHZlbG9jaXR5X3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIHNwZWVkID0gZXRodG9vbF9jbWRfc3BlZWQoY21kKTsKIAl1MzIgY3Vycl9zdGF0dXM7CiAJdTMyIG5ld19zdGF0dXMgPSAwOwogCWludCByZXQgPSAwOwpAQCAtMzI1OCw5ICszMjYzLDkgQEAKIAljdXJyX3N0YXR1cyAmPSAoflZFTE9DSVRZX0xJTktfRkFJTCk7CiAKIAluZXdfc3RhdHVzIHw9ICgoY21kLT5hdXRvbmVnKSA/IFZFTE9DSVRZX0FVVE9ORUdfRU5BQkxFIDogMCk7Ci0JbmV3X3N0YXR1cyB8PSAoKGNtZC0+c3BlZWQgPT0gU1BFRURfMTAwMCkgPyBWRUxPQ0lUWV9TUEVFRF8xMDAwIDogMCk7Ci0JbmV3X3N0YXR1cyB8PSAoKGNtZC0+c3BlZWQgPT0gU1BFRURfMTAwKSA/IFZFTE9DSVRZX1NQRUVEXzEwMCA6IDApOwotCW5ld19zdGF0dXMgfD0gKChjbWQtPnNwZWVkID09IFNQRUVEXzEwKSA/IFZFTE9DSVRZX1NQRUVEXzEwIDogMCk7CisJbmV3X3N0YXR1cyB8PSAoKHNwZWVkID09IFNQRUVEXzEwMDApID8gVkVMT0NJVFlfU1BFRURfMTAwMCA6IDApOworCW5ld19zdGF0dXMgfD0gKChzcGVlZCA9PSBTUEVFRF8xMDApID8gVkVMT0NJVFlfU1BFRURfMTAwIDogMCk7CisJbmV3X3N0YXR1cyB8PSAoKHNwZWVkID09IFNQRUVEXzEwKSA/IFZFTE9DSVRZX1NQRUVEXzEwIDogMCk7CiAJbmV3X3N0YXR1cyB8PSAoKGNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKSA/IFZFTE9DSVRZX0RVUExFWF9GVUxMIDogMCk7CiAKIAlpZiAoKG5ld19zdGF0dXMgJiBWRUxPQ0lUWV9BVVRPTkVHX0VOQUJMRSkgJiYKQEAgLTM0NTcsMTMgKzM0NjIsMTAgQEAKIAkuZ2V0X3NldHRpbmdzCT0JdmVsb2NpdHlfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MJPQl2ZWxvY2l0eV9zZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvCT0JdmVsb2NpdHlfZ2V0X2RydmluZm8sCi0JLnNldF90eF9jc3VtCT0JZXRodG9vbF9vcF9zZXRfdHhfY3N1bSwKLQkuZ2V0X3R4X2NzdW0JPQlldGh0b29sX29wX2dldF90eF9jc3VtLAogCS5nZXRfd29sCT0JdmVsb2NpdHlfZXRodG9vbF9nZXRfd29sLAogCS5zZXRfd29sCT0JdmVsb2NpdHlfZXRodG9vbF9zZXRfd29sLAogCS5nZXRfbXNnbGV2ZWwJPQl2ZWxvY2l0eV9nZXRfbXNnbGV2ZWwsCiAJLnNldF9tc2dsZXZlbAk9CXZlbG9jaXR5X3NldF9tc2dsZXZlbCwKLQkuc2V0X3NnIAk9CWV0aHRvb2xfb3Bfc2V0X3NnLAogCS5nZXRfbGluawk9CXZlbG9jaXR5X2dldF9saW5rLAogCS5nZXRfY29hbGVzY2UJPQl2ZWxvY2l0eV9nZXRfY29hbGVzY2UsCiAJLnNldF9jb2FsZXNjZQk9CXZlbG9jaXR5X3NldF9jb2FsZXNjZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYyBiL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwppbmRleCA4MmRiYTVhLi4wY2IwYjA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCkBAIC03MTAsMTcgKzcxMCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlydG5ldF9zZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYgPSB2aS0+dmRldjsKLQotCWlmIChkYXRhICYmICF2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX05FVF9GX0NTVU0pKQotCQlyZXR1cm4gLUVOT1NZUzsKLQotCXJldHVybiBldGh0b29sX29wX3NldF90eF9od19jc3VtKGRldiwgZGF0YSk7Ci19Ci0KIHN0YXRpYyB2b2lkIHZpcnRuZXRfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IG5ldGRldl9wcml2KGRldik7CkBAIC04MjIsMTAgKzgxMSw2IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdmlydG5ldF9ldGh0b29sX29wcyA9IHsKLQkuc2V0X3R4X2NzdW0gPSB2aXJ0bmV0X3NldF90eF9jc3VtLAotCS5zZXRfc2cgPSBldGh0b29sX29wX3NldF9zZywKLQkuc2V0X3RzbyA9IGV0aHRvb2xfb3Bfc2V0X3RzbywKLQkuc2V0X3VmbyA9IGV0aHRvb2xfb3Bfc2V0X3VmbywKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAogfTsKIApAQCAtOTEyLDIyICs4OTcsMjkgQEAKIAlTRVRfTkVUREVWX0RFVihkZXYsICZ2ZGV2LT5kZXYpOwogCiAJLyogRG8gd2Ugc3VwcG9ydCAiaGFyZHdhcmUiIGNoZWNrc3Vtcz8gKi8KLQlpZiAoY3N1bSAmJiB2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX05FVF9GX0NTVU0pKSB7CisJaWYgKHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fTkVUX0ZfQ1NVTSkpIHsKIAkJLyogVGhpcyBvcGVucyB1cCB0aGUgd29ybGQgb2YgZXh0cmEgZmVhdHVyZXMuICovCi0JCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNfE5FVElGX0ZfU0d8TkVUSUZfRl9GUkFHTElTVDsKLQkJaWYgKGdzbyAmJiB2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX05FVF9GX0dTTykpIHsKLQkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU08gfCBORVRJRl9GX1VGTworCQlkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTXxORVRJRl9GX1NHfE5FVElGX0ZfRlJBR0xJU1Q7CisJCWlmIChjc3VtKQorCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX0NTVU18TkVUSUZfRl9TR3xORVRJRl9GX0ZSQUdMSVNUOworCisJCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX05FVF9GX0dTTykpIHsKKwkJCWRldi0+aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9UU08gfCBORVRJRl9GX1VGTwogCQkJCXwgTkVUSUZfRl9UU09fRUNOIHwgTkVUSUZfRl9UU082OwogCQl9CiAJCS8qIEluZGl2aWR1YWwgZmVhdHVyZSBiaXRzOiB3aGF0IGNhbiBob3N0IGhhbmRsZT8gKi8KLQkJaWYgKGdzbyAmJiB2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX05FVF9GX0hPU1RfVFNPNCkpCi0JCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwotCQlpZiAoZ3NvICYmIHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fTkVUX0ZfSE9TVF9UU082KSkKLQkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwotCQlpZiAoZ3NvICYmIHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fTkVUX0ZfSE9TVF9FQ04pKQotCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTT19FQ047Ci0JCWlmIChnc28gJiYgdmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19ORVRfRl9IT1NUX1VGTykpCi0JCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVUZPOworCQlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19ORVRfRl9IT1NUX1RTTzQpKQorCQkJZGV2LT5od19mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKKwkJaWYgKHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fTkVUX0ZfSE9TVF9UU082KSkKKwkJCWRldi0+aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OworCQlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19ORVRfRl9IT1NUX0VDTikpCisJCQlkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPX0VDTjsKKwkJaWYgKHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fTkVUX0ZfSE9TVF9VRk8pKQorCQkJZGV2LT5od19mZWF0dXJlcyB8PSBORVRJRl9GX1VGTzsKKworCQlpZiAoZ3NvKQorCQkJZGV2LT5mZWF0dXJlcyB8PSBkZXYtPmh3X2ZlYXR1cmVzICYgKE5FVElGX0ZfQUxMX1RTT3xORVRJRl9GX1VGTyk7CisJCS8qICghY3N1bSAmJiBnc28pIGNhc2Ugd2lsbCBiZSBmaXhlZCBieSByZWdpc3Rlcl9uZXRkZXYoKSAqLwogCX0KIAogCS8qIENvbmZpZ3VyYXRpb24gbWF5IHNwZWNpZnkgd2hhdCBNQUMgdG8gdXNlLiAgT3RoZXJ3aXNlIHJhbmRvbS4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19kcnYuYyBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19kcnYuYwppbmRleCBjMTZlZDk2Li5mYTZlMmFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZHJ2LmMKKysrIGIvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2Rydi5jCkBAIC0xMDgzLDcgKzEwODMsNyBAQAogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQl1bmlvbiBWbXhuZXQzX0dlbmVyaWNEZXNjICpnZGVzYykKIHsKLQlpZiAoIWdkZXNjLT5yY2QuY25jICYmIGFkYXB0ZXItPnJ4Y3N1bSkgeworCWlmICghZ2Rlc2MtPnJjZC5jbmMgJiYgYWRhcHRlci0+bmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSB7CiAJCS8qIHR5cGljYWwgY2FzZTogVENQL1VEUCBvdmVyIElQIGFuZCBib3RoIGNzdW1zIGFyZSBjb3JyZWN0ICovCiAJCWlmICgobGUzMl90b19jcHUoZ2Rlc2MtPmR3b3JkWzNdKSAmIFZNWE5FVDNfUkNEX0NTVU1fT0spID09CiAJCQkJCQkJVk1YTkVUM19SQ0RfQ1NVTV9PSykgewpAQCAtMjA4MiwxMCArMjA4MiwxMCBAQAogCWRldlJlYWQtPm1pc2MuZGRMZW4gPSBjcHVfdG9fbGUzMihzaXplb2Yoc3RydWN0IHZteG5ldDNfYWRhcHRlcikpOwogCiAJLyogc2V0IHVwIGZlYXR1cmUgZmxhZ3MgKi8KLQlpZiAoYWRhcHRlci0+cnhjc3VtKQorCWlmIChhZGFwdGVyLT5uZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pCiAJCWRldlJlYWQtPm1pc2MudXB0RmVhdHVyZXMgfD0gVVBUMV9GX1JYQ1NVTTsKIAotCWlmIChhZGFwdGVyLT5scm8pIHsKKwlpZiAoYWRhcHRlci0+bmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPKSB7CiAJCWRldlJlYWQtPm1pc2MudXB0RmVhdHVyZXMgfD0gVVBUMV9GX0xSTzsKIAkJZGV2UmVhZC0+bWlzYy5tYXhOdW1SeFNHID0gY3B1X3RvX2xlMTYoMSArIE1BWF9TS0JfRlJBR1MpOwogCX0KQEAgLTI1OTQsOSArMjU5NCw2IEBACiAJaWYgKG5ld19tdHUgPCBWTVhORVQzX01JTl9NVFUgfHwgbmV3X210dSA+IFZNWE5FVDNfTUFYX01UVSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAobmV3X210dSA+IDE1MDAgJiYgIWFkYXB0ZXItPmp1bWJvX2ZyYW1lKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCW5ldGRldi0+bXR1ID0gbmV3X210dTsKIAogCS8qCkBAIC0yNjQyLDI4ICsyNjM5LDE4IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAotCW5ldGRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwKLQkJTkVUSUZfRl9IV19DU1VNIHwKLQkJTkVUSUZfRl9IV19WTEFOX1RYIHwKLQkJTkVUSUZfRl9IV19WTEFOX1JYIHwKLQkJTkVUSUZfRl9IV19WTEFOX0ZJTFRFUiB8Ci0JCU5FVElGX0ZfVFNPIHwKLQkJTkVUSUZfRl9UU082IHwKLQkJTkVUSUZfRl9MUk87Ci0KLQlwcmludGsoS0VSTl9JTkZPICJmZWF0dXJlczogc2cgY3N1bSB2bGFuIGpmIHRzbyB0c29JUHY2IGxybyIpOwotCi0JYWRhcHRlci0+cnhjc3VtID0gdHJ1ZTsKLQlhZGFwdGVyLT5qdW1ib19mcmFtZSA9IHRydWU7Ci0JYWRhcHRlci0+bHJvID0gdHJ1ZTsKLQotCWlmIChkbWE2NCkgeworCW5ldGRldi0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9SWENTVU0gfAorCQlORVRJRl9GX0hXX0NTVU0gfCBORVRJRl9GX0hXX1ZMQU5fVFggfAorCQlORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNiB8IE5FVElGX0ZfTFJPOworCWlmIChkbWE2NCkKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7Ci0JCXByaW50aygiIGhpZ2hETUEiKTsKLQl9CisJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzID0gbmV0ZGV2LT5od19mZWF0dXJlcyAmIH5ORVRJRl9GX0hXX1ZMQU5fVFg7CisJbmV0ZGV2LT5mZWF0dXJlcyA9IG5ldGRldi0+aHdfZmVhdHVyZXMgfAorCQlORVRJRl9GX0hXX1ZMQU5fUlggfCBORVRJRl9GX0hXX1ZMQU5fRklMVEVSOwogCi0JbmV0ZGV2LT52bGFuX2ZlYXR1cmVzID0gbmV0ZGV2LT5mZWF0dXJlczsKLQlwcmludGsoIlxuIik7CisJbmV0ZGV2X2luZm8oYWRhcHRlci0+bmV0ZGV2LAorCQkiZmVhdHVyZXM6IHNnIGNzdW0gdmxhbiBqZiB0c28gdHNvSVB2NiBscm8lc1xuIiwKKwkJZG1hNjQgPyAiIGhpZ2hETUEiIDogIiIpOwogfQogCiAKQEAgLTI4NzYsNiArMjg2Myw3IEBACiAJCS5uZG9fc3RhcnRfeG1pdCA9IHZteG5ldDNfeG1pdF9mcmFtZSwKIAkJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSB2bXhuZXQzX3NldF9tYWNfYWRkciwKIAkJLm5kb19jaGFuZ2VfbXR1ID0gdm14bmV0M19jaGFuZ2VfbXR1LAorCQkubmRvX3NldF9mZWF0dXJlcyA9IHZteG5ldDNfc2V0X2ZlYXR1cmVzLAogCQkubmRvX2dldF9zdGF0cyA9IHZteG5ldDNfZ2V0X3N0YXRzLAogCQkubmRvX3R4X3RpbWVvdXQgPSB2bXhuZXQzX3R4X3RpbWVvdXQsCiAJCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gdm14bmV0M19zZXRfbWMsCkBAIC0yODk2LDYgKzI4ODQsOSBAQAogCWludCBudW1fdHhfcXVldWVzOwogCWludCBudW1fcnhfcXVldWVzOwogCisJaWYgKCFwY2lfbXNpX2VuYWJsZWQoKSkKKwkJZW5hYmxlX21xID0gMDsKKwogI2lmZGVmIFZNWE5FVDNfUlNTCiAJaWYgKGVuYWJsZV9tcSkKIAkJbnVtX3J4X3F1ZXVlcyA9IG1pbihWTVhORVQzX0RFVklDRV9NQVhfUlhfUVVFVUVTLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19ldGh0b29sLmMKaW5kZXggOTc2NDY3Mi4uZGM5NTlmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZXRodG9vbC5jCkBAIC0zMyw0MCArMzMsNiBAQAogfTsKIAogCi1zdGF0aWMgdTMyCi12bXhuZXQzX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCi17Ci0Jc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JcmV0dXJuIGFkYXB0ZXItPnJ4Y3N1bTsKLX0KLQotCi1zdGF0aWMgaW50Ci12bXhuZXQzX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiB2YWwpCi17Ci0Jc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChhZGFwdGVyLT5yeGNzdW0gIT0gdmFsKSB7Ci0JCWFkYXB0ZXItPnJ4Y3N1bSA9IHZhbDsKLQkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewotCQkJaWYgKHZhbCkKLQkJCQlhZGFwdGVyLT5zaGFyZWQtPmRldlJlYWQubWlzYy51cHRGZWF0dXJlcyB8PQotCQkJCVVQVDFfRl9SWENTVU07Ci0JCQllbHNlCi0JCQkJYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLm1pc2MudXB0RmVhdHVyZXMgJj0KLQkJCQl+VVBUMV9GX1JYQ1NVTTsKLQotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmNtZF9sb2NrLCBmbGFncyk7Ci0JCQlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCwKLQkJCQkJICAgICAgIFZNWE5FVDNfQ01EX1VQREFURV9GRUFUVVJFKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmNtZF9sb2NrLCBmbGFncyk7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLQogLyogcGVyIHRxIHN0YXRzIG1haW50YWluZWQgYnkgdGhlIGRldmljZSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCB2bXhuZXQzX3N0YXRfZGVzYwogdm14bmV0M190cV9kZXZfc3RhdHNbXSA9IHsKQEAgLTI5NiwzMSArMjYyLDI4IEBACiAJfQogfQogCi1zdGF0aWMgaW50Ci12bXhuZXQzX3NldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKK2ludCB2bXhuZXQzX3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZmVhdHVyZXMpCiB7CiAJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JdTggbHJvX3JlcXVlc3RlZCA9IChkYXRhICYgRVRIX0ZMQUdfTFJPKSA9PSAwID8gMCA6IDE7Ci0JdTggbHJvX3ByZXNlbnQgPSAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPKSA9PSAwID8gMCA6IDE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgY2hhbmdlZCA9IGZlYXR1cmVzIF4gbmV0ZGV2LT5mZWF0dXJlczsKIAotCWlmIChldGh0b29sX2ludmFsaWRfZmxhZ3MobmV0ZGV2LCBkYXRhLCBFVEhfRkxBR19MUk8pKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChscm9fcmVxdWVzdGVkIF4gbHJvX3ByZXNlbnQpIHsKLQkJLyogdG9nZ2xlIHRoZSBMUk8gZmVhdHVyZSovCi0JCW5ldGRldi0+ZmVhdHVyZXMgXj0gTkVUSUZfRl9MUk87Ci0KLQkJLyogVXBkYXRlIHByaXZhdGUgTFJPIGZsYWcgKi8KLQkJYWRhcHRlci0+bHJvID0gbHJvX3JlcXVlc3RlZDsKKwlpZiAoY2hhbmdlZCAmIChORVRJRl9GX1JYQ1NVTXxORVRJRl9GX0xSTykpIHsKKwkJaWYgKGZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pCisJCQlhZGFwdGVyLT5zaGFyZWQtPmRldlJlYWQubWlzYy51cHRGZWF0dXJlcyB8PQorCQkJVVBUMV9GX1JYQ1NVTTsKKwkJZWxzZQorCQkJYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLm1pc2MudXB0RmVhdHVyZXMgJj0KKwkJCX5VUFQxX0ZfUlhDU1VNOwogCiAJCS8qIHVwZGF0ZSBoYXJ3YXJlIExSTyBjYXBhYmlsaXR5IGFjY29yZGluZ2x5ICovCi0JCWlmIChscm9fcmVxdWVzdGVkKQorCQlpZiAoZmVhdHVyZXMgJiBORVRJRl9GX0xSTykKIAkJCWFkYXB0ZXItPnNoYXJlZC0+ZGV2UmVhZC5taXNjLnVwdEZlYXR1cmVzIHw9CiAJCQkJCQkJVVBUMV9GX0xSTzsKIAkJZWxzZQogCQkJYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLm1pc2MudXB0RmVhdHVyZXMgJj0KIAkJCQkJCQl+VVBUMV9GX0xSTzsKKwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Y21kX2xvY2ssIGZsYWdzKTsKIAkJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQsCiAJCQkJICAgICAgIFZNWE5FVDNfQ01EX1VQREFURV9GRUFUVVJFKTsKQEAgLTQ2MiwxMCArNDI1LDEwIEBACiAJZWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0lOVEVSTkFMOwogCiAJaWYgKGFkYXB0ZXItPmxpbmtfc3BlZWQpIHsKLQkJZWNtZC0+c3BlZWQgPSBhZGFwdGVyLT5saW5rX3NwZWVkOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgYWRhcHRlci0+bGlua19zcGVlZCk7CiAJCWVjbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOwogCX0gZWxzZSB7Ci0JCWVjbWQtPnNwZWVkID0gLTE7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCAtMSk7CiAJCWVjbWQtPmR1cGxleCA9IC0xOwogCX0KIAlyZXR1cm4gMDsKQEAgLTY1NywxNyArNjIwLDcgQEAKIAkuZ2V0X3dvbCAgICAgICAgICAgPSB2bXhuZXQzX2dldF93b2wsCiAJLnNldF93b2wgICAgICAgICAgID0gdm14bmV0M19zZXRfd29sLAogCS5nZXRfbGluayAgICAgICAgICA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCi0JLmdldF9yeF9jc3VtICAgICAgID0gdm14bmV0M19nZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0gICAgICAgPSB2bXhuZXQzX3NldF9yeF9jc3VtLAotCS5nZXRfdHhfY3N1bSAgICAgICA9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCi0JLnNldF90eF9jc3VtICAgICAgID0gZXRodG9vbF9vcF9zZXRfdHhfaHdfY3N1bSwKLQkuZ2V0X3NnICAgICAgICAgICAgPSBldGh0b29sX29wX2dldF9zZywKLQkuc2V0X3NnICAgICAgICAgICAgPSBldGh0b29sX29wX3NldF9zZywKLQkuZ2V0X3RzbyAgICAgICAgICAgPSBldGh0b29sX29wX2dldF90c28sCi0JLnNldF90c28gICAgICAgICAgID0gZXRodG9vbF9vcF9zZXRfdHNvLAogCS5nZXRfc3RyaW5ncyAgICAgICA9IHZteG5ldDNfZ2V0X3N0cmluZ3MsCi0JLmdldF9mbGFncwkgICA9IGV0aHRvb2xfb3BfZ2V0X2ZsYWdzLAotCS5zZXRfZmxhZ3MJICAgPSB2bXhuZXQzX3NldF9mbGFncywKIAkuZ2V0X3NzZXRfY291bnQJICAgPSB2bXhuZXQzX2dldF9zc2V0X2NvdW50LAogCS5nZXRfZXRodG9vbF9zdGF0cyA9IHZteG5ldDNfZ2V0X2V0aHRvb2xfc3RhdHMsCiAJLmdldF9yaW5ncGFyYW0gICAgID0gdm14bmV0M19nZXRfcmluZ3BhcmFtLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2ludC5oIGIvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2ludC5oCmluZGV4IGZiNWQyNDUuLmY1MGQzNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19pbnQuaAorKysgYi9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfaW50LmgKQEAgLTY4LDEwICs2OCwxMCBAQAogLyoKICAqIFZlcnNpb24gbnVtYmVycwogICovCi0jZGVmaW5lIFZNWE5FVDNfRFJJVkVSX1ZFUlNJT05fU1RSSU5HICAgIjEuMC4yNS4wLWsiCisjZGVmaW5lIFZNWE5FVDNfRFJJVkVSX1ZFUlNJT05fU1RSSU5HICAgIjEuMS45LjAtayIKIAogLyogYSAzMi1iaXQgaW50LCBlYWNoIGJ5dGUgZW5jb2RlIGEgdmVyaW9uIG51bWJlciBpbiBWTVhORVQzX0RSSVZFUl9WRVJTSU9OICovCi0jZGVmaW5lIFZNWE5FVDNfRFJJVkVSX1ZFUlNJT05fTlVNICAgICAgMHgwMTAwMTkwMAorI2RlZmluZSBWTVhORVQzX0RSSVZFUl9WRVJTSU9OX05VTSAgICAgIDB4MDEwMTA5MDAKIAogI2lmIGRlZmluZWQoQ09ORklHX1BDSV9NU0kpCiAJLyogUlNTIG9ubHkgbWFrZXMgc2Vuc2UgaWYgTVNJLVggaXMgc3VwcG9ydGVkLiAqLwpAQCAtMzI5LDEwICszMjksNiBAQAogCXU4CQkJX19pb21lbSAqaHdfYWRkcjA7IC8qIGZvciBCQVIgMCAqLwogCXU4CQkJX19pb21lbSAqaHdfYWRkcjE7IC8qIGZvciBCQVIgMSAqLwogCi0JLyogZmVhdHVyZSBjb250cm9sICovCi0JYm9vbAkJCQlyeGNzdW07Ci0JYm9vbAkJCQlscm87Ci0JYm9vbAkJCQlqdW1ib19mcmFtZTsKICNpZmRlZiBWTVhORVQzX1JTUwogCXN0cnVjdCBVUFQxX1JTU0NvbmYJCSpyc3NfY29uZjsKIAlib29sCQkJCXJzczsKQEAgLTQwNCw2ICs0MDAsOSBAQAogdm14bmV0M19ycV9kZXN0cm95X2FsbChzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKTsKIAogaW50Cit2bXhuZXQzX3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZmVhdHVyZXMpOworCitpbnQKIHZteG5ldDNfY3JlYXRlX3F1ZXVlcyhzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyLAogCQkgICAgICB1MzIgdHhfcmluZ19zaXplLCB1MzIgcnhfcmluZ19zaXplLCB1MzIgcnhfcmluZzJfc2l6ZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuYyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuYwppbmRleCA0MDFiZWJmLi4zMjc2M2IyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmMKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5jCkBAIC0xNTksMTYgKzE1OSwxNSBAQAogCQkgICAgIHUzMiBmd19tZW1vLCB1MzIgb2Zmc2V0LCB1NjQgKmRhdGEwLCB1NjQgKmRhdGExLAogCQkgICAgIHU2NCAqc3RlZXJfY3RybCkKIHsKLQlzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBfcmVnOworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cF9yZWcgPSB2cGF0aC0+dnBfcmVnOwogCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOwogCXU2NCB2YWw2NDsKLQl1MzIgcmV0cnkgPSAwLCBtYXhfcmV0cnkgPSAxMDA7CisJdTMyIHJldHJ5ID0gMCwgbWF4X3JldHJ5ID0gMzsKIAotCXZwX3JlZyA9IHZwYXRoLT52cF9yZWc7Ci0KLQlpZiAodnBhdGgtPnZwX29wZW4pIHsKLQkJbWF4X3JldHJ5ID0gMzsKLQkJc3Bpbl9sb2NrKCZ2cGF0aC0+bG9jayk7CisJc3Bpbl9sb2NrKCZ2cGF0aC0+bG9jayk7CisJaWYgKCF2cGF0aC0+dnBfb3BlbikgeworCQlzcGluX3VubG9jaygmdnBhdGgtPmxvY2spOworCQltYXhfcmV0cnkgPSAxMDA7CiAJfQogCiAJd3JpdGVxKCpkYXRhMCwgJnZwX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9kYXRhMCk7CkBAIC0xMDAwLDcgKzk5OSw3IEBACiAvKioKICAqIHZ4Z2VfaHdfZGV2aWNlX2h3X2luZm9fZ2V0IC0gR2V0IHRoZSBodyBpbmZvcm1hdGlvbgogICogUmV0dXJucyB0aGUgdnBhdGggbWFzayB0aGF0IGhhcyB0aGUgYml0cyBzZXQgZm9yIGVhY2ggdnBhdGggYWxsb2NhdGVkCi0gKiBmb3IgdGhlIGRyaXZlciwgRlcgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgdGhlIGZpcnN0IG1hYyBhZGRyZXNzZSBmb3IKKyAqIGZvciB0aGUgZHJpdmVyLCBGVyB2ZXJzaW9uIGluZm9ybWF0aW9uLCBhbmQgdGhlIGZpcnN0IG1hYyBhZGRyZXNzIGZvcgogICogZWFjaCB2cGF0aAogICovCiBlbnVtIHZ4Z2VfaHdfc3RhdHVzIF9fZGV2aW5pdApAQCAtMTA2NCw5ICsxMDYzLDEwIEBACiAKIAkJdmFsNjQgPSByZWFkcSgmdG9jLT50b2NfdnBhdGhfcG9pbnRlcltpXSk7CiAKKwkJc3Bpbl9sb2NrX2luaXQoJnZwYXRoLmxvY2spOwogCQl2cGF0aC52cF9yZWcgPSAoc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKikKIAkJCSAgICAgICAoYmFyMCArIHZhbDY0KTsKLQkJdnBhdGgudnBfb3BlbiA9IDA7CisJCXZwYXRoLnZwX29wZW4gPSBWWEdFX0hXX1ZQX05PVF9PUEVOOwogCiAJCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9wY2lfZnVuY19tb2RlX2dldCgmdnBhdGgsIGh3X2luZm8pOwogCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCkBAIC0xMDkwLDcgKzEwOTAsNyBAQAogCQl2YWw2NCA9IHJlYWRxKCZ0b2MtPnRvY192cGF0aF9wb2ludGVyW2ldKTsKIAkJdnBhdGgudnBfcmVnID0gKHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICopCiAJCQkgICAgICAgKGJhcjAgKyB2YWw2NCk7Ci0JCXZwYXRoLnZwX29wZW4gPSAwOworCQl2cGF0aC52cF9vcGVuID0gVlhHRV9IV19WUF9OT1RfT1BFTjsKIAogCQlzdGF0dXMgPSAgX192eGdlX2h3X3ZwYXRoX2FkZHJfZ2V0KCZ2cGF0aCwKIAkJCQlod19pbmZvLT5tYWNfYWRkcnNbaV0sCkBAIC00NjQ2LDcgKzQ2NDYsMjcgQEAKIAkJdnBhdGgtPmhsZGV2LT50aW1faW50X21hc2sxLCB2cGF0aC0+dnBfaWQpOwogCWhsZGV2LT5zdGF0cy5od19kZXZfaW5mb19zdGF0cy52cGF0aF9pbmZvW3ZwYXRoLT52cF9pZF0gPSBOVUxMOwogCi0JbWVtc2V0KHZwYXRoLCAwLCBzaXplb2Yoc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCkpOworCS8qIElmIHRoZSB3aG9sZSBzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoIGlzIHplcm9lZCwgbm90aGluZyB3aWxsCisJICogd29yayBhZnRlciB0aGUgaW50ZXJmYWNlIGlzIGJyb3VnaHQgZG93bi4KKwkgKi8KKwlzcGluX2xvY2soJnZwYXRoLT5sb2NrKTsKKwl2cGF0aC0+dnBfb3BlbiA9IFZYR0VfSFdfVlBfTk9UX09QRU47CisJc3Bpbl91bmxvY2soJnZwYXRoLT5sb2NrKTsKKworCXZwYXRoLT52cG1nbXRfcmVnID0gTlVMTDsKKwl2cGF0aC0+bm9mbF9kYiA9IE5VTEw7CisJdnBhdGgtPm1heF9tdHUgPSAwOworCXZwYXRoLT52c3BvcnRfbnVtYmVyID0gMDsKKwl2cGF0aC0+bWF4X2tkZmNfZGIgPSAwOworCXZwYXRoLT5tYXhfbm9mbF9kYiA9IDA7CisJdnBhdGgtPnJpbmdoID0gTlVMTDsKKwl2cGF0aC0+Zmlmb2ggPSBOVUxMOworCW1lbXNldCgmdnBhdGgtPnZwYXRoX2hhbmRsZXMsIDAsIHNpemVvZihzdHJ1Y3QgbGlzdF9oZWFkKSk7CisJdnBhdGgtPnN0YXRzX2Jsb2NrID0gMDsKKwl2cGF0aC0+aHdfc3RhdHMgPSBOVUxMOworCXZwYXRoLT5od19zdGF0c19zYXYgPSBOVUxMOworCXZwYXRoLT5zd19zdGF0cyA9IE5VTEw7CisKIGV4aXQ6CiAJcmV0dXJuOwogfQpAQCAtNDY3MCw3ICs0NjkwLDcgQEAKIAogCXZwYXRoID0gJmhsZGV2LT52aXJ0dWFsX3BhdGhzW3ZwX2lkXTsKIAotCXNwaW5fbG9ja19pbml0KCZobGRldi0+dmlydHVhbF9wYXRoc1t2cF9pZF0ubG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnZwYXRoLT5sb2NrKTsKIAl2cGF0aC0+dnBfaWQgPSB2cF9pZDsKIAl2cGF0aC0+dnBfb3BlbiA9IFZYR0VfSFdfVlBfT1BFTjsKIAl2cGF0aC0+aGxkZXYgPSBobGRldjsKQEAgLTUwMTksMTAgKzUwMzksNiBAQAogCiAJX192eGdlX2h3X3ZwX3Rlcm1pbmF0ZShkZXZoLCB2cF9pZCk7CiAKLQlzcGluX2xvY2soJnZwYXRoLT5sb2NrKTsKLQl2cGF0aC0+dnBfb3BlbiA9IFZYR0VfSFdfVlBfTk9UX09QRU47Ci0Jc3Bpbl91bmxvY2soJnZwYXRoLT5sb2NrKTsKLQogdnBhdGhfY2xvc2VfZXhpdDoKIAlyZXR1cm4gc3RhdHVzOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5oIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5oCmluZGV4IDNjNTNhYTcuLjM1OWI5YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuaAorKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmgKQEAgLTQxMiw0NCArNDEyLDQ4IEBACiAgKiBTZWUgYWxzbzogc3RydWN0IHZ4Z2VfaHdfdGltX2ludHJfY29uZmlne30uCiAgKi8KIHN0cnVjdCB2eGdlX2h3X2RldmljZV9jb25maWcgewotCXUzMgkJCQlkbWFfYmxvY2twb29sX2luaXRpYWw7Ci0JdTMyCQkJCWRtYV9ibG9ja3Bvb2xfbWF4OwotI2RlZmluZSBWWEdFX0hXX01JTl9ETUFfQkxPQ0tfUE9PTF9TSVpFCQkJMAotI2RlZmluZSBWWEdFX0hXX0lOSVRJQUxfRE1BX0JMT0NLX1BPT0xfU0laRQkJMAotI2RlZmluZSBWWEdFX0hXX0lOQ1JfRE1BX0JMT0NLX1BPT0xfU0laRQkJNAotI2RlZmluZSBWWEdFX0hXX01BWF9ETUFfQkxPQ0tfUE9PTF9TSVpFCQkJNDA5NgorCXUzMgkJCQkJZGV2aWNlX3BvbGxfbWlsbGlzOworI2RlZmluZSBWWEdFX0hXX01JTl9ERVZJQ0VfUE9MTF9NSUxMSVMJCTEKKyNkZWZpbmUgVlhHRV9IV19NQVhfREVWSUNFX1BPTExfTUlMTElTCQkxMDAwMDAKKyNkZWZpbmUgVlhHRV9IV19ERUZfREVWSUNFX1BPTExfTUlMTElTCQkxMDAwCiAKLSNkZWZpbmUgICAgICAgIFZYR0VfSFdfTUFYX1BBWUxPQURfU0laRV81MTIJCTIKKwl1MzIJCQkJCWRtYV9ibG9ja3Bvb2xfaW5pdGlhbDsKKwl1MzIJCQkJCWRtYV9ibG9ja3Bvb2xfbWF4OworI2RlZmluZSBWWEdFX0hXX01JTl9ETUFfQkxPQ0tfUE9PTF9TSVpFCQkwCisjZGVmaW5lIFZYR0VfSFdfSU5JVElBTF9ETUFfQkxPQ0tfUE9PTF9TSVpFCTAKKyNkZWZpbmUgVlhHRV9IV19JTkNSX0RNQV9CTE9DS19QT09MX1NJWkUJNAorI2RlZmluZSBWWEdFX0hXX01BWF9ETUFfQkxPQ0tfUE9PTF9TSVpFCQk0MDk2CiAKLQl1MzIJCQkJaW50cl9tb2RlOwotI2RlZmluZSBWWEdFX0hXX0lOVFJfTU9ERV9JUlFMSU5FCQkJMAotI2RlZmluZSBWWEdFX0hXX0lOVFJfTU9ERV9NU0lYCQkJCTEKLSNkZWZpbmUgVlhHRV9IV19JTlRSX01PREVfTVNJWF9PTkVfU0hPVAkJCTIKKyNkZWZpbmUJVlhHRV9IV19NQVhfUEFZTE9BRF9TSVpFXzUxMgkJMgogCi0jZGVmaW5lIFZYR0VfSFdfSU5UUl9NT0RFX0RFRgkJCQkwCisJdTMyCQkJCQlpbnRyX21vZGU6MiwKKyNkZWZpbmUgVlhHRV9IV19JTlRSX01PREVfSVJRTElORQkJMAorI2RlZmluZSBWWEdFX0hXX0lOVFJfTU9ERV9NU0lYCQkJMQorI2RlZmluZSBWWEdFX0hXX0lOVFJfTU9ERV9NU0lYX09ORV9TSE9UCQkyCiAKLQl1MzIJCQkJcnRoX2VuOwotI2RlZmluZSBWWEdFX0hXX1JUSF9ESVNBQkxFCQkJCTAKLSNkZWZpbmUgVlhHRV9IV19SVEhfRU5BQkxFCQkJCTEKLSNkZWZpbmUgVlhHRV9IV19SVEhfREVGQVVMVAkJCQkwCisjZGVmaW5lIFZYR0VfSFdfSU5UUl9NT0RFX0RFRgkJCTAKIAotCXUzMgkJCQlydGhfaXRfdHlwZTsKLSNkZWZpbmUgVlhHRV9IV19SVEhfSVRfVFlQRV9TT0xPX0lUCQkJMAotI2RlZmluZSBWWEdFX0hXX1JUSF9JVF9UWVBFX01VTFRJX0lUCQkJMQotI2RlZmluZSBWWEdFX0hXX1JUSF9JVF9UWVBFX0RFRkFVTFQJCQkwCisJCQkJCQlydGhfZW46MSwKKyNkZWZpbmUgVlhHRV9IV19SVEhfRElTQUJMRQkJCTAKKyNkZWZpbmUgVlhHRV9IV19SVEhfRU5BQkxFCQkJMQorI2RlZmluZSBWWEdFX0hXX1JUSF9ERUZBVUxUCQkJMAogCi0JdTMyCQkJCXJ0c19tYWNfZW47CisJCQkJCQlydGhfaXRfdHlwZToxLAorI2RlZmluZSBWWEdFX0hXX1JUSF9JVF9UWVBFX1NPTE9fSVQJCTAKKyNkZWZpbmUgVlhHRV9IV19SVEhfSVRfVFlQRV9NVUxUSV9JVAkJMQorI2RlZmluZSBWWEdFX0hXX1JUSF9JVF9UWVBFX0RFRkFVTFQJCTAKKworCQkJCQkJcnRzX21hY19lbjoxLAogI2RlZmluZSBWWEdFX0hXX1JUU19NQUNfRElTQUJMRQkJCTAKICNkZWZpbmUgVlhHRV9IV19SVFNfTUFDX0VOQUJMRQkJCTEKICNkZWZpbmUgVlhHRV9IV19SVFNfTUFDX0RFRkFVTFQJCQkwCiAKLQlzdHJ1Y3QgdnhnZV9od192cF9jb25maWcJdnBfY29uZmlnW1ZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFNdOworCQkJCQkJaHd0c19lbjoxOworI2RlZmluZQlWWEdFX0hXX0hXVFNfRElTQUJMRQkJCTAKKyNkZWZpbmUJVlhHRV9IV19IV1RTX0VOQUJMRQkJCTEKKyNkZWZpbmUJVlhHRV9IV19IV1RTX0RFRkFVTFQJCQkxCiAKLQl1MzIJCQkJZGV2aWNlX3BvbGxfbWlsbGlzOwotI2RlZmluZSBWWEdFX0hXX01JTl9ERVZJQ0VfUE9MTF9NSUxMSVMJCQkxCi0jZGVmaW5lIFZYR0VfSFdfTUFYX0RFVklDRV9QT0xMX01JTExJUwkJCTEwMDAwMAotI2RlZmluZSBWWEdFX0hXX0RFRl9ERVZJQ0VfUE9MTF9NSUxMSVMJCQkxMDAwCi0KKwlzdHJ1Y3QgdnhnZV9od192cF9jb25maWcgdnBfY29uZmlnW1ZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFNdOwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLWV0aHRvb2wuYwppbmRleCBjNWViMDM0Li45MmRkNzJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1ldGh0b29sLmMKQEAgLTMzLDcgKzMzLDggQEAKIHsKIAkvKiBXZSBjdXJyZW50bHkgb25seSBzdXBwb3J0IDEwR2IvRlVMTCAqLwogCWlmICgoaW5mby0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgfHwKLQkgICAgKGluZm8tPnNwZWVkICE9IFNQRUVEXzEwMDAwKSB8fCAoaW5mby0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKSkKKwkgICAgKGV0aHRvb2xfY21kX3NwZWVkKGluZm8pICE9IFNQRUVEXzEwMDAwKSB8fAorCSAgICAoaW5mby0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXR1cm4gMDsKQEAgLTU4LDEwICs1OSwxMCBAQAogCWluZm8tPnRyYW5zY2VpdmVyID0gWENWUl9FWFRFUk5BTDsKIAogCWlmIChuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKLQkJaW5mby0+c3BlZWQgPSBTUEVFRF8xMDAwMDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGluZm8sIFNQRUVEXzEwMDAwKTsKIAkJaW5mby0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CiAJfSBlbHNlIHsKLQkJaW5mby0+c3BlZWQgPSAtMTsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGluZm8sIC0xKTsKIAkJaW5mby0+ZHVwbGV4ID0gLTE7CiAJfQogCkBAIC0xMzQsMjIgKzEzNSwyOSBAQAogLyoqCiAgKiB2eGdlX2V0aHRvb2xfaWRuaWMgLSBUbyBwaHlzaWNhbGx5IGlkZW50aWZ5IHRoZSBuaWMgb24gdGhlIHN5c3RlbS4KICAqIEBkZXYgOiBkZXZpY2UgcG9pbnRlci4KLSAqIEBpZCA6IHBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSB3aXRoIGlkZW50aWZpY2F0aW9uIHBhcmFtZXRlcnMgZ2l2ZW4gYnkKLSAqIGV0aHRvb2wuCisgKiBAc3RhdGUgOiByZXF1ZXN0ZWQgTEVEIHN0YXRlCiAgKgogICogVXNlZCB0byBwaHlzaWNhbGx5IGlkZW50aWZ5IHRoZSBOSUMgb24gdGhlIHN5c3RlbS4KLSAqIFRoZSBMaW5rIExFRCB3aWxsIGJsaW5rIGZvciBhIHRpbWUgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLgotICogUmV0dXJuIHZhbHVlOgogICogMCBvbiBzdWNjZXNzCiAgKi8KLXN0YXRpYyBpbnQgdnhnZV9ldGh0b29sX2lkbmljKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQorc3RhdGljIGludCB2eGdlX2V0aHRvb2xfaWRuaWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgIGVudW0gZXRodG9vbF9waHlzX2lkX3N0YXRlIHN0YXRlKQogewogCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYgPSB2ZGV2LT5kZXZoOwogCi0JdnhnZV9od19kZXZpY2VfZmxpY2tfbGlua19sZWQoaGxkZXYsIFZYR0VfRkxJQ0tFUl9PTik7Ci0JbXNsZWVwX2ludGVycnVwdGlibGUoZGF0YSA/IChkYXRhICogSFopIDogVlhHRV9NQVhfRkxJQ0tFUl9USU1FKTsKLQl2eGdlX2h3X2RldmljZV9mbGlja19saW5rX2xlZChobGRldiwgVlhHRV9GTElDS0VSX09GRik7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgRVRIVE9PTF9JRF9BQ1RJVkU6CisJCXZ4Z2VfaHdfZGV2aWNlX2ZsaWNrX2xpbmtfbGVkKGhsZGV2LCBWWEdFX0ZMSUNLRVJfT04pOworCQlicmVhazsKKworCWNhc2UgRVRIVE9PTF9JRF9JTkFDVElWRToKKwkJdnhnZV9od19kZXZpY2VfZmxpY2tfbGlua19sZWQoaGxkZXYsIFZYR0VfRkxJQ0tFUl9PRkYpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTA2NCwzNSArMTA3Miw2IEBACiAJcmV0dXJuIHNpemVvZihzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcpICogdmRldi0+bm9fb2ZfdnBhdGg7CiB9CiAKLXN0YXRpYyB1MzIgdnhnZV9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybiB2ZGV2LT5yeF9jc3VtOwotfQotCi1zdGF0aWMgaW50IHZ4Z2Vfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKGRhdGEpCi0JCXZkZXYtPnJ4X2NzdW0gPSAxOwotCWVsc2UKLQkJdmRldi0+cnhfY3N1bSA9IDA7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2eGdlX2V0aHRvb2xfb3Bfc2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlpZiAoZGF0YSkKLQkJZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYpOwotCWVsc2UKLQkJZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082KTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHZ4Z2VfZXRodG9vbF9nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3NldCkKIHsKIAlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xMTEyLDQwICsxMDkxLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgdnhnZV9zZXRfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOwotCi0JaWYgKGV0aHRvb2xfaW52YWxpZF9mbGFncyhkZXYsIGRhdGEsIEVUSF9GTEFHX1JYSEFTSCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCEhKGRhdGEgJiBFVEhfRkxBR19SWEhBU0gpID09IHZkZXYtPmRldmgtPmNvbmZpZy5ydGhfZW4pCi0JCXJldHVybiAwOwotCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSB8fCAodmRldi0+Y29uZmlnLnJ0aF9zdGVlcmluZyA9PSBOT19TVEVFUklORykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdmRldi0+ZGV2aC0+Y29uZmlnLnJ0aF9lbiA9ICEhKGRhdGEgJiBFVEhfRkxBR19SWEhBU0gpOwotCi0JLyogRW5hYmxpbmcgUlRIIHJlcXVpcmVzIHNvbWUgb2YgdGhlIGxvZ2ljIGluIHZ4Z2VfZGV2aWNlX3JlZ2lzdGVyIGFuZCBhCi0JICogdnBhdGggcmVzZXQuICBEdWUgdG8gdGhlc2UgcmVzdHJpY3Rpb25zLCBvbmx5IGFsbG93IG1vZGlmaWNhdGlvbgotCSAqIHdoaWxlIHRoZSBpbnRlcmZhY2UgaXMgZG93bi4KLQkgKi8KLQlzdGF0dXMgPSB2eGdlX3Jlc2V0X2FsbF92cGF0aHModmRldik7Ci0JaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7Ci0JCXZkZXYtPmRldmgtPmNvbmZpZy5ydGhfZW4gPSAhdmRldi0+ZGV2aC0+Y29uZmlnLnJ0aF9lbjsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JaWYgKHZkZXYtPmRldmgtPmNvbmZpZy5ydGhfZW4pCi0JCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9SWEhBU0g7Ci0JZWxzZQotCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1JYSEFTSDsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHZ4Z2VfZndfZmxhc2goc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfZmxhc2ggKnBhcm1zKQogewogCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTExNzQsMTkgKzExMTksMTAgQEAKIAkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKIAkuZ2V0X3BhdXNlcGFyYW0JCT0gdnhnZV9ldGh0b29sX2dldHBhdXNlX2RhdGEsCiAJLnNldF9wYXVzZXBhcmFtCQk9IHZ4Z2VfZXRodG9vbF9zZXRwYXVzZV9kYXRhLAotCS5nZXRfcnhfY3N1bQkJPSB2eGdlX2dldF9yeF9jc3VtLAotCS5zZXRfcnhfY3N1bQkJPSB2eGdlX3NldF9yeF9jc3VtLAotCS5nZXRfdHhfY3N1bQkJPSBldGh0b29sX29wX2dldF90eF9jc3VtLAotCS5zZXRfdHhfY3N1bQkJPSBldGh0b29sX29wX3NldF90eF9pcHY2X2NzdW0sCi0JLmdldF9zZwkJCT0gZXRodG9vbF9vcF9nZXRfc2csCi0JLnNldF9zZwkJCT0gZXRodG9vbF9vcF9zZXRfc2csCi0JLmdldF90c28JCT0gZXRodG9vbF9vcF9nZXRfdHNvLAotCS5zZXRfdHNvCQk9IHZ4Z2VfZXRodG9vbF9vcF9zZXRfdHNvLAogCS5nZXRfc3RyaW5ncwkJPSB2eGdlX2V0aHRvb2xfZ2V0X3N0cmluZ3MsCi0JLnBoeXNfaWQJCT0gdnhnZV9ldGh0b29sX2lkbmljLAorCS5zZXRfcGh5c19pZAkJPSB2eGdlX2V0aHRvb2xfaWRuaWMsCiAJLmdldF9zc2V0X2NvdW50CQk9IHZ4Z2VfZXRodG9vbF9nZXRfc3NldF9jb3VudCwKIAkuZ2V0X2V0aHRvb2xfc3RhdHMJPSB2eGdlX2dldF9ldGh0b29sX3N0YXRzLAotCS5zZXRfZmxhZ3MJCT0gdnhnZV9zZXRfZmxhZ3MsCiAJLmZsYXNoX2RldmljZQkJPSB2eGdlX2Z3X2ZsYXNoLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uYyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1tYWluLmMKaW5kZXggYWZmNjhjMS4uOGFiODcwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uYworKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5jCkBAIC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldF90c3RhbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2luY2x1ZGUgInZ4Z2UtbWFpbi5oIgogI2luY2x1ZGUgInZ4Z2UtcmVnLmgiCiAKQEAgLTMwNCwyMiArMzA1LDE0IEBACiAJCSIlczogJXM6JWQgIHNrYiBwcm90b2NvbCA9ICVkIiwKIAkJcmluZy0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fLCBza2ItPnByb3RvY29sKTsKIAotCWlmIChyaW5nLT5ncm9fZW5hYmxlKSB7Ci0JCWlmIChyaW5nLT52bGdycCAmJiBleHRfaW5mby0+dmxhbiAmJgotCQkJKHJpbmctPnZsYW5fdGFnX3N0cmlwID09Ci0JCQkJVlhHRV9IV19WUEFUSF9SUEFfU1RSSVBfVkxBTl9UQUdfRU5BQkxFKSkKLQkJCXZsYW5fZ3JvX3JlY2VpdmUocmluZy0+bmFwaV9wLCByaW5nLT52bGdycCwKLQkJCQkJZXh0X2luZm8tPnZsYW4sIHNrYik7Ci0JCWVsc2UKLQkJCW5hcGlfZ3JvX3JlY2VpdmUocmluZy0+bmFwaV9wLCBza2IpOwotCX0gZWxzZSB7Ci0JCWlmIChyaW5nLT52bGdycCAmJiB2bGFuICYmCi0JCQkocmluZy0+dmxhbl90YWdfc3RyaXAgPT0KLQkJCQlWWEdFX0hXX1ZQQVRIX1JQQV9TVFJJUF9WTEFOX1RBR19FTkFCTEUpKQotCQkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgcmluZy0+dmxncnAsIHZsYW4pOwotCQllbHNlCi0JCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwotCX0KKwlpZiAocmluZy0+dmxncnAgJiYgZXh0X2luZm8tPnZsYW4gJiYKKwkJKHJpbmctPnZsYW5fdGFnX3N0cmlwID09CisJCQlWWEdFX0hXX1ZQQVRIX1JQQV9TVFJJUF9WTEFOX1RBR19FTkFCTEUpKQorCQl2bGFuX2dyb19yZWNlaXZlKHJpbmctPm5hcGlfcCwgcmluZy0+dmxncnAsCisJCQkJZXh0X2luZm8tPnZsYW4sIHNrYik7CisJZWxzZQorCQluYXBpX2dyb19yZWNlaXZlKHJpbmctPm5hcGlfcCwgc2tiKTsKKwogCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsCiAJCSIlczogJXM6JWQgRXhpdGluZy4uLiIsIHJpbmctPm5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiB9CkBAIC00OTAsNyArNDgzLDcgQEAKIAogCQlpZiAoKGV4dF9pbmZvLnByb3RvICYgVlhHRV9IV19GUkFNRV9QUk9UT19UQ1BfT1JfVURQKSAmJgogCQkgICAgIShleHRfaW5mby5wcm90byAmIFZYR0VfSFdfRlJBTUVfUFJPVE9fSVBfRlJBRykgJiYKLQkJICAgIHJpbmctPnJ4X2NzdW0gJiYgLyogT2ZmbG9hZCBSeCBzaWRlIENTVU0gKi8KKwkJICAgIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pICYmIC8qIE9mZmxvYWQgUnggc2lkZSBDU1VNICovCiAJCSAgICBleHRfaW5mby5sM19ja3N1bSA9PSBWWEdFX0hXX0wzX0NLU1VNX09LICYmCiAJCSAgICBleHRfaW5mby5sNF9ja3N1bSA9PSBWWEdFX0hXX0w0X0NLU1VNX09LKQogCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKQEAgLTIwOTQsMTEgKzIwODcsOSBAQAogCQkJCXZkZXYtPmNvbmZpZy5maWZvX2luZGljYXRlX21heF9wa3RzOwogCQkJdnBhdGgtPmZpZm8udHhfdmVjdG9yX25vID0gMDsKIAkJCXZwYXRoLT5yaW5nLnJ4X3ZlY3Rvcl9ubyA9IDA7Ci0JCQl2cGF0aC0+cmluZy5yeF9jc3VtID0gdmRldi0+cnhfY3N1bTsKIAkJCXZwYXRoLT5yaW5nLnJ4X2h3dHMgPSB2ZGV2LT5yeF9od3RzOwogCQkJdnBhdGgtPmlzX29wZW4gPSAxOwogCQkJdmRldi0+dnBfaGFuZGxlc1tpXSA9IHZwYXRoLT5oYW5kbGU7Ci0JCQl2cGF0aC0+cmluZy5ncm9fZW5hYmxlID0gdmRldi0+Y29uZmlnLmdyb19lbmFibGU7CiAJCQl2cGF0aC0+cmluZy52bGFuX3RhZ19zdHJpcCA9IHZkZXYtPnZsYW5fdGFnX3N0cmlwOwogCQkJdmRldi0+c3RhdHMudnBhdGhzX29wZW4rKzsKIAkJfSBlbHNlIHsKQEAgLTI2NzAsNiArMjY2MSw0MCBAQAogCW1vZF90aW1lcigmdmRldi0+dnBfbG9ja3VwX3RpbWVyLCBqaWZmaWVzICsgSFogLyAxMDAwKTsKIH0KIAorc3RhdGljIHUzMiB2eGdlX2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmVhdHVyZXMpCit7CisJdTMyIGNoYW5nZWQgPSBkZXYtPmZlYXR1cmVzIF4gZmVhdHVyZXM7CisKKwkvKiBFbmFibGluZyBSVEggcmVxdWlyZXMgc29tZSBvZiB0aGUgbG9naWMgaW4gdnhnZV9kZXZpY2VfcmVnaXN0ZXIgYW5kIGEKKwkgKiB2cGF0aCByZXNldC4gIER1ZSB0byB0aGVzZSByZXN0cmljdGlvbnMsIG9ubHkgYWxsb3cgbW9kaWZpY2F0aW9uCisJICogd2hpbGUgdGhlIGludGVyZmFjZSBpcyBkb3duLgorCSAqLworCWlmICgoY2hhbmdlZCAmIE5FVElGX0ZfUlhIQVNIKSAmJiBuZXRpZl9ydW5uaW5nKGRldikpCisJCWZlYXR1cmVzIF49IE5FVElGX0ZfUlhIQVNIOworCisJcmV0dXJuIGZlYXR1cmVzOworfQorCitzdGF0aWMgaW50IHZ4Z2Vfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcykKK3sKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIGNoYW5nZWQgPSBkZXYtPmZlYXR1cmVzIF4gZmVhdHVyZXM7CisKKwlpZiAoIShjaGFuZ2VkICYgTkVUSUZfRl9SWEhBU0gpKQorCQlyZXR1cm4gMDsKKworCS8qICFuZXRpZl9ydW5uaW5nKCkgZW5zdXJlZCBieSB2eGdlX2ZpeF9mZWF0dXJlcygpICovCisKKwl2ZGV2LT5kZXZoLT5jb25maWcucnRoX2VuID0gISEoZmVhdHVyZXMgJiBORVRJRl9GX1JYSEFTSCk7CisJaWYgKHZ4Z2VfcmVzZXRfYWxsX3ZwYXRocyh2ZGV2KSAhPSBWWEdFX0hXX09LKSB7CisJCWRldi0+ZmVhdHVyZXMgPSBmZWF0dXJlcyBeIE5FVElGX0ZfUlhIQVNIOworCQl2ZGV2LT5kZXZoLT5jb25maWcucnRoX2VuID0gISEoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhIQVNIKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKIC8qKgogICogdnhnZV9vcGVuCiAgKiBAZGV2OiBwb2ludGVyIHRvIHRoZSBkZXZpY2Ugc3RydWN0dXJlLgpAQCAtMzExMiw4ICszMTM3LDcgQEAKIAlyZXR1cm4gbmV0X3N0YXRzOwogfQogCi1zdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX3RpbWVzdGFtcF9jb25maWcoc3RydWN0IHZ4Z2VkZXYgKnZkZXYsCi0JCQkJCQkgaW50IGVuYWJsZSkKK3N0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfdGltZXN0YW1wX2NvbmZpZyhzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCkKIHsKIAllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKIAl1NjQgdmFsNjQ7CkBAIC0zMTIzLDI3ICszMTQ3LDI0IEBACiAJICogcmVxdWlyZWQgZm9yIHRoZSBkcml2ZXIgdG8gbG9hZCAoZHVlIHRvIGEgaGFyZHdhcmUgYnVnKSwKIAkgKiB0aGVyZSBpcyBubyBuZWVkIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwgaGVyZS4KIAkgKi8KLQlpZiAoZW5hYmxlKQotCQl2YWw2NCA9IFZYR0VfSFdfWE1BQ19USU1FU1RBTVBfRU4gfAotCQkJVlhHRV9IV19YTUFDX1RJTUVTVEFNUF9VU0VfTElOS19JRCgwKSB8Ci0JCQlWWEdFX0hXX1hNQUNfVElNRVNUQU1QX0lOVEVSVkFMKDApOwotCWVsc2UKLQkJdmFsNjQgPSAwOworCXZhbDY0ID0gVlhHRV9IV19YTUFDX1RJTUVTVEFNUF9FTiB8CisJCVZYR0VfSFdfWE1BQ19USU1FU1RBTVBfVVNFX0xJTktfSUQoMCkgfAorCQlWWEdFX0hXX1hNQUNfVElNRVNUQU1QX0lOVEVSVkFMKDApOwogCi0Jc3RhdHVzID0gdnhnZV9od19tZ210X3JlZ193cml0ZSh2ZGV2LT5kZXZoLAorCXN0YXR1cyA9IHZ4Z2VfaHdfbWdtdF9yZWdfd3JpdGUoZGV2aCwKIAkJCQkJdnhnZV9od19tZ210X3JlZ190eXBlX21ycGNpbSwKIAkJCQkJMCwKIAkJCQkJb2Zmc2V0b2Yoc3RydWN0IHZ4Z2VfaHdfbXJwY2ltX3JlZywKIAkJCQkJCSB4bWFjX3RpbWVzdGFtcCksCiAJCQkJCXZhbDY0KTsKLQl2eGdlX2h3X2RldmljZV9mbHVzaF9pbyh2ZGV2LT5kZXZoKTsKKwl2eGdlX2h3X2RldmljZV9mbHVzaF9pbyhkZXZoKTsKKwlkZXZoLT5jb25maWcuaHd0c19lbiA9IFZYR0VfSFdfSFdUU19FTkFCTEU7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAogc3RhdGljIGludCB2eGdlX2h3dHN0YW1wX2lvY3RsKHN0cnVjdCB2eGdlZGV2ICp2ZGV2LCB2b2lkIF9fdXNlciAqZGF0YSkKIHsKIAlzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnIGNvbmZpZzsKLQllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKIAlpbnQgaTsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmY29uZmlnLCBkYXRhLCBzaXplb2YoY29uZmlnKSkpCkBAIC0zMTY0LDEwICszMTg1LDYgQEAKIAogCXN3aXRjaCAoY29uZmlnLnJ4X2ZpbHRlcikgewogCWNhc2UgSFdUU1RBTVBfRklMVEVSX05PTkU6Ci0JCXN0YXR1cyA9IHZ4Z2VfdGltZXN0YW1wX2NvbmZpZyh2ZGV2LCAwKTsKLQkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KIAkJdmRldi0+cnhfaHd0cyA9IDA7CiAJCWNvbmZpZy5yeF9maWx0ZXIgPSBIV1RTVEFNUF9GSUxURVJfTk9ORTsKIAkJYnJlYWs7CkBAIC0zMTg2LDggKzMyMDMsNyBAQAogCWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9FVkVOVDoKIAljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfU1lOQzoKIAljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfREVMQVlfUkVROgotCQlzdGF0dXMgPSB2eGdlX3RpbWVzdGFtcF9jb25maWcodmRldiwgMSk7Ci0JCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJaWYgKHZkZXYtPmRldmgtPmNvbmZpZy5od3RzX2VuICE9IFZYR0VfSFdfSFdUU19FTkFCTEUpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQl2ZGV2LT5yeF9od3RzID0gMTsKQEAgLTMzNzgsNiArMzM5NCw4IEBACiAJLm5kb19kb19pb2N0bCAgICAgICAgICAgPSB2eGdlX2lvY3RsLAogCS5uZG9fc2V0X21hY19hZGRyZXNzICAgID0gdnhnZV9zZXRfbWFjX2FkZHIsCiAJLm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB2eGdlX2NoYW5nZV9tdHUsCisJLm5kb19maXhfZmVhdHVyZXMJPSB2eGdlX2ZpeF9mZWF0dXJlcywKKwkubmRvX3NldF9mZWF0dXJlcwk9IHZ4Z2Vfc2V0X2ZlYXR1cmVzLAogCS5uZG9fdmxhbl9yeF9yZWdpc3RlciAgID0gdnhnZV92bGFuX3J4X3JlZ2lzdGVyLAogCS5uZG9fdmxhbl9yeF9raWxsX3ZpZCAgID0gdnhnZV92bGFuX3J4X2tpbGxfdmlkLAogCS5uZG9fdmxhbl9yeF9hZGRfdmlkCT0gdnhnZV92bGFuX3J4X2FkZF92aWQsCkBAIC0zNDI0LDE0ICszNDQyLDIxIEBACiAJdmRldi0+ZGV2aCA9IGhsZGV2OwogCXZkZXYtPnBkZXYgPSBobGRldi0+cGRldjsKIAltZW1jcHkoJnZkZXYtPmNvbmZpZywgY29uZmlnLCBzaXplb2Yoc3RydWN0IHZ4Z2VfY29uZmlnKSk7Ci0JdmRldi0+cnhfY3N1bSA9IDE7CS8qIEVuYWJsZSBSeCBDU1VNIGJ5IGRlZmF1bHQuICovCiAJdmRldi0+cnhfaHd0cyA9IDA7CiAJdmRldi0+dGl0YW4xID0gKHZkZXYtPnBkZXYtPnJldmlzaW9uID09IFZYR0VfSFdfVElUQU4xX1BDSV9SRVZJU0lPTik7CiAKIAlTRVRfTkVUREVWX0RFVihuZGV2LCAmdmRldi0+cGRldi0+ZGV2KTsKIAotCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWCB8Ci0JCQkJTkVUSUZfRl9IV19WTEFOX0ZJTFRFUjsKKwluZGV2LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfUlhDU1VNIHwgTkVUSUZfRl9TRyB8CisJCU5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNIHwKKwkJTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfAorCQlORVRJRl9GX0hXX1ZMQU5fVFg7CisJaWYgKHZkZXYtPmNvbmZpZy5ydGhfc3RlZXJpbmcgIT0gTk9fU1RFRVJJTkcpCisJCW5kZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfUlhIQVNIOworCisJbmRldi0+ZmVhdHVyZXMgfD0gbmRldi0+aHdfZmVhdHVyZXMgfAorCQlORVRJRl9GX0hXX1ZMQU5fUlggfCBORVRJRl9GX0hXX1ZMQU5fRklMVEVSOworCiAJLyogIERyaXZlciBlbnRyeSBwb2ludHMgKi8KIAluZGV2LT5pcnEgPSB2ZGV2LT5wZGV2LT5pcnE7CiAJbmRldi0+YmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpIGhsZGV2LT5iYXIwOwpAQCAtMzQ0MywxMSArMzQ2OCw2IEBACiAKIAl2eGdlX2luaXRpYWxpemVfZXRodG9vbF9vcHMobmRldik7CiAKLQlpZiAodmRldi0+Y29uZmlnLnJ0aF9zdGVlcmluZyAhPSBOT19TVEVFUklORykgewotCQluZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1JYSEFTSDsKLQkJaGxkZXYtPmNvbmZpZy5ydGhfZW4gPSBWWEdFX0hXX1JUSF9FTkFCTEU7Ci0JfQotCiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB2cGF0aCAqLwogCXZkZXYtPnZwYXRocyA9IGt6YWxsb2MoKHNpemVvZihzdHJ1Y3QgdnhnZV92cGF0aCkpICoKIAkJCQlub19vZl92cGF0aCwgR0ZQX0tFUk5FTCk7CkBAIC0zNDU5LDkgKzM0NzksNiBAQAogCQlnb3RvIF9vdXQxOwogCX0KIAotCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0c7Ci0KLQluZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTTsKIAl2eGdlX2RlYnVnX2luaXQodnhnZV9od19kZXZpY2VfdHJhY2VfbGV2ZWxfZ2V0KGhsZGV2KSwKIAkJIiVzIDogY2hlY2tzdW1pbmcgZW5hYmxlZCIsIF9fZnVuY19fKTsKIApAQCAtMzQ3MSwxMSArMzQ4OCw2IEBACiAJCQkiJXMgOiB1c2luZyBIaWdoIERNQSIsIF9fZnVuY19fKTsKIAl9CiAKLQluZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNjsKLQotCWlmICh2ZGV2LT5jb25maWcuZ3JvX2VuYWJsZSkKLQkJbmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9HUk87Ci0KIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7CiAJaWYgKHJldCkgewogCQl2eGdlX2RlYnVnX2luaXQodnhnZV9od19kZXZpY2VfdHJhY2VfbGV2ZWxfZ2V0KGhsZGV2KSwKQEAgLTQwMDUsMTUgKzQwMTcsNiBAQAogCQl2ZGV2LT5jb25maWcudHhfc3RlZXJpbmdfdHlwZSA9IDA7CiAJfQogCi0JaWYgKHZkZXYtPmNvbmZpZy5ncm9fZW5hYmxlKSB7Ci0JCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKLQkJCSIlczogR2VuZXJpYyByZWNlaXZlIG9mZmxvYWQgZW5hYmxlZCIsCi0JCQl2ZGV2LT5uZGV2LT5uYW1lKTsKLQl9IGVsc2UKLQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsCi0JCQkiJXM6IEdlbmVyaWMgcmVjZWl2ZSBvZmZsb2FkIGRpc2FibGVkIiwKLQkJCXZkZXYtPm5kZXYtPm5hbWUpOwotCiAJaWYgKHZkZXYtPmNvbmZpZy5hZGRyX2xlYXJuX2VuKQogCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwKIAkJCSIlczogTUFDIEFkZHJlc3MgbGVhcm5pbmcgZW5hYmxlZCIsIHZkZXYtPm5kZXYtPm5hbWUpOwpAQCAtNDU3NSwxMiArNDU3OCwyOSBAQAogCQlnb3RvIF9leGl0NDsKIAl9CiAKKwkvKiBBbHdheXMgZW5hYmxlIEhXVFMuICBUaGlzIHdpbGwgYWx3YXlzIGNhdXNlIHRoZSBGQ1MgdG8gYmUgaW52YWxpZCwKKwkgKiBkdWUgdG8gdGhlIGZhY3QgdGhhdCBIV1RTIGlzIHVzaW5nIHRoZSBGQ1MgYXMgdGhlIGxvY2F0aW9uIG9mIHRoZQorCSAqIHRpbWVzdGFtcC4gIFRoZSBIVyBGQ1MgY2hlY2tpbmcgd2lsbCBzdGlsbCBjb3JyZWN0bHkgZGV0ZXJtaW5lIGlmCisJICogdGhlcmUgaXMgYSB2YWxpZCBjaGVja3N1bSwgYW5kIHRoZSBGQ1MgaXMgYmVpbmcgcmVtb3ZlZCBieSB0aGUgZHJpdmVyCisJICogYW55d2F5LiAgU28gbm8gZnVjbnRpb25hbGl0eSBpcyBiZWluZyBsb3N0LiAgU2luY2UgaXQgaXMgYWx3YXlzCisJICogZW5hYmxlZCwgd2Ugbm93IHNpbXBseSB1c2UgdGhlIGlvY3RsIGNhbGwgdG8gc2V0IHdoZXRoZXIgb3Igbm90IHRoZQorCSAqIGRyaXZlciBzaG91bGQgYmUgcGF5aW5nIGF0dGVudGlvbiB0byB0aGUgSFdUUy4KKwkgKi8KKwlpZiAoaXNfcHJpdmlsZWdlZCA9PSBWWEdFX0hXX09LKSB7CisJCXN0YXR1cyA9IHZ4Z2VfdGltZXN0YW1wX2NvbmZpZyhobGRldik7CisJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLCAiJXM6IEhXVFMgZW5hYmxlIGZhaWxlZCIsCisJCQkJCVZYR0VfRFJJVkVSX05BTUUpOworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWdvdG8gX2V4aXQ0OworCQl9CisJfQorCiAJdnhnZV9od19kZXZpY2VfZGVidWdfc2V0KGhsZGV2LCBWWEdFX0VSUiwgVlhHRV9DT01QT05FTlRfTEwpOwogCiAJLyogc2V0IHByaXZhdGUgZGV2aWNlIGluZm8gKi8KIAlwY2lfc2V0X2RydmRhdGEocGRldiwgaGxkZXYpOwogCi0JbGxfY29uZmlnLT5ncm9fZW5hYmxlID0gVlhHRV9HUk9fQUxXQVlTX0FHR1JFR0FURTsKIAlsbF9jb25maWctPmZpZm9faW5kaWNhdGVfbWF4X3BrdHMgPSBWWEdFX0ZJRk9fSU5ESUNBVEVfTUFYX1BLVFM7CiAJbGxfY29uZmlnLT5hZGRyX2xlYXJuX2VuID0gYWRkcl9sZWFybl9lbjsKIAlsbF9jb25maWctPnJ0aF9hbGdvcml0aG0gPSBSVEhfQUxHX0pFTktJTlM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5oIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uaAppbmRleCA0MDQ3NGYwLi5lZDEyMGFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5oCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1tYWluLmgKQEAgLTE2OCw5ICsxNjgsNiBAQAogCiAjZGVmaW5lCU5FV19OQVBJX1dFSUdIVAk2NAogCWludAkJbmFwaV93ZWlnaHQ7Ci0jZGVmaW5lIFZYR0VfR1JPX0RPTk9UX0FHR1JFR0FURQkJMAotI2RlZmluZSBWWEdFX0dST19BTFdBWVNfQUdHUkVHQVRFCQkxCi0JaW50CQlncm9fZW5hYmxlOwogCWludAkJaW50cl90eXBlOwogI2RlZmluZSBJTlRBCTAKICNkZWZpbmUgTVNJCTEKQEAgLTI5MCwxMyArMjg3LDExIEBACiAJdW5zaWduZWQgbG9uZyBpbnRlcnJ1cHRfY291bnQ7CiAJdW5zaWduZWQgbG9uZyBqaWZmaWVzOwogCi0JLyogY29weSBvZiB0aGUgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgcnhfY3N1bSBpcyB0byBiZSB1c2VkICovCi0JdTMyIHJ4X2NzdW06MSwKLQkgICAgcnhfaHd0czoxOworCS8qIGNvcHkgb2YgdGhlIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHJ4X2h3dHMgaXMgdG8gYmUgdXNlZCAqLworCXUzMiByeF9od3RzOjE7CiAKIAlpbnQgcGt0c19wcm9jZXNzZWQ7CiAJaW50IGJ1ZGdldDsKLQlpbnQgZ3JvX2VuYWJsZTsKIAogCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOwogCXN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaV9wOwpAQCAtMzY5LDkgKzM2NCw4IEBACiAJICovCiAJdTE2CQlhbGxfbXVsdGlfZmxnOwogCi0JIC8qIEEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgcnhfY3N1bSBpcyB0byBiZSB1c2VkIG9yIG5vdC4gKi8KLQl1MzIJcnhfY3N1bToxLAotCQlyeF9od3RzOjEsCisJLyogQSBmbGFnIGluZGljYXRpbmcgd2hldGhlciByeF9od3RzIGlzIHRvIGJlIHVzZWQgb3Igbm90LiAqLworCXUzMglyeF9od3RzOjEsCiAJCXRpdGFuMToxOwogCiAJc3RydWN0IHZ4Z2VfbXNpeF9lbnRyeSAqdnhnZV9lbnRyaWVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLXRyYWZmaWMuYyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS10cmFmZmljLmMKaW5kZXggMjYzOGI4ZC4uZjkzNTE3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLXRyYWZmaWMuYworKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdHJhZmZpYy5jCkBAIC0xMiw2ICsxMiw3IEBACiAgKiBDb3B5cmlnaHQoYykgMjAwMi0yMDEwIEV4YXIgQ29ycC4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAjaW5jbHVkZSAidnhnZS10cmFmZmljLmgiCiAjaW5jbHVkZSAidnhnZS1jb25maWcuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS10cmFmZmljLmggYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdHJhZmZpYy5oCmluZGV4IDZjMmZjMGIuLjRhNTE4YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS10cmFmZmljLmgKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLXRyYWZmaWMuaApAQCAtMjQwLDcgKzI0MCw3IEBACiAJdTMyCQkJCWJ0aW1lcl92YWw7CiAjZGVmaW5lIFZYR0VfSFdfTUlOX1RJTV9CVElNRVJfVkFMCQkJCTAKICNkZWZpbmUgVlhHRV9IV19NQVhfVElNX0JUSU1FUl9WQUwJCQkJNjcxMDg4NjQKLSNkZWZpbmUgVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVAkJCQkweGZmZmZmZmZmCisjZGVmaW5lIFZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQJCQkJKH4wKQogCiAJdTMyCQkJCXRpbWVyX2FjX2VuOwogI2RlZmluZSBWWEdFX0hXX1RJTV9USU1FUl9BQ19FTkFCTEUJCQkJMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLXZlcnNpb24uaCBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS12ZXJzaW9uLmgKaW5kZXggNTgxZTIxNS4uYjllZmEyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLXZlcnNpb24uaAorKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdmVyc2lvbi5oCkBAIC0xNiw4ICsxNiw4IEBACiAKICNkZWZpbmUgVlhHRV9WRVJTSU9OX01BSk9SCSIyIgogI2RlZmluZSBWWEdFX1ZFUlNJT05fTUlOT1IJIjUiCi0jZGVmaW5lIFZYR0VfVkVSU0lPTl9GSVgJIjIiCi0jZGVmaW5lIFZYR0VfVkVSU0lPTl9CVUlMRAkiMjIyNTkiCisjZGVmaW5lIFZYR0VfVkVSU0lPTl9GSVgJIjMiCisjZGVmaW5lIFZYR0VfVkVSU0lPTl9CVUlMRAkiMjI2NDAiCiAjZGVmaW5lIFZYR0VfVkVSU0lPTl9GT1IJImsiCiAKICNkZWZpbmUgVlhHRV9GV19WRVIobWFqLCBtaW4sIGJsZCkgKCgobWFqKSA8PCAxNikgKyAoKG1pbikgPDwgOCkgKyAoYmxkKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9kbGNpLmMgYi9kcml2ZXJzL25ldC93YW4vZGxjaS5jCmluZGV4IDE0ODFhNDQuLjIxYjEwNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9kbGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2RsY2kuYwpAQCAtMzQxLDEwICszNDEsNiBAQAogCQl9CiAJfQogCi0JZXJyID0gZGV2X2FsbG9jX25hbWUobWFzdGVyLCBtYXN0ZXItPm5hbWUpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIGVycjI7Ci0KIAkqKHNob3J0ICopKG1hc3Rlci0+ZGV2X2FkZHIpID0gZGxjaS0+ZGxjaTsKIAogCWRscCA9IG5ldGRldl9wcml2KG1hc3Rlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaGRsY19mci5jIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfZnIuYwppbmRleCAwZWRiNTM1Li5mYzQzM2YyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGRsY19mci5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2ZyLmMKQEAgLTEwNzAsNyArMTA3MCw3IEBACiAJaGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhmcmFkKTsKIAlwdmNfZGV2aWNlICpwdmM7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlpbnQgcmVzdWx0LCB1c2VkOworCWludCB1c2VkOwogCiAJaWYgKChwdmMgPSBhZGRfcHZjKGZyYWQsIGRsY2kpKSA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBNZW1vcnkgc3F1ZWV6ZSBvbiBmcl9hZGRfcHZjKClcbiIsCkBAIC0xMTA2LDEzICsxMTA2LDYgQEAKIAlkZXYtPnR4X3F1ZXVlX2xlbiA9IDA7CiAJZGV2LT5tbF9wcml2ID0gcHZjOwogCi0JcmVzdWx0ID0gZGV2X2FsbG9jX25hbWUoZGV2LCBkZXYtPm5hbWUpOwotCWlmIChyZXN1bHQgPCAwKSB7Ci0JCWZyZWVfbmV0ZGV2KGRldik7Ci0JCWRlbGV0ZV91bnVzZWRfcHZjcyhoZGxjKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KIAlpZiAocmVnaXN0ZXJfbmV0ZGV2aWNlKGRldikgIT0gMCkgewogCQlmcmVlX25ldGRldihkZXYpOwogCQlkZWxldGVfdW51c2VkX3B2Y3MoaGRsYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMgYi9kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMKaW5kZXggN2Y1YmI5MS4uZWVjNDYzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYwpAQCAtMzM4LDEwICszMzgsNiBAQAogCWRldl9ob2xkKGRldik7CiAJbGFwYmV0aC0+ZXRoZGV2ID0gZGV2OwogCi0JcmMgPSBkZXZfYWxsb2NfbmFtZShuZGV2LCBuZGV2LT5uYW1lKTsKLQlpZiAocmMgPCAwKSAKLQkJZ290byBmYWlsOwotCiAJcmMgPSAtRUlPOwogCWlmIChyZWdpc3Rlcl9uZXRkZXZpY2UobmRldikpCiAJCWdvdG8gZmFpbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9wYzMwMF9kcnYuYyBiL2RyaXZlcnMvbmV0L3dhbi9wYzMwMF9kcnYuYwppbmRleCBmODc1Y2ZhLi43MzdiNTlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vcGMzMDBfZHJ2LmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3BjMzAwX2Rydi5jCkBAIC0xNDQ1LDcgKzE0NDUsNyBAQAogICogRGVzY3JpcHRpb246CUluIHRoZSByZW1vdGUgbG9vcGJhY2sgbW9kZSB0aGUgY2xvY2sgYW5kIGRhdGEgcmVjb3ZlcmVkCiAgKgkJZnJvbSB0aGUgbGluZSBpbnB1dHMgUkwxLzIgb3IgUkRJUC9SRElOIGFyZSByb3V0ZWQgYmFjawogICoJCXRvIHRoZSBsaW5lIG91dHB1dHMgWEwxLzIgb3IgWERPUC9YRE9OIHZpYSB0aGUgYW5hbG9nCi0gKgkJdHJhbnNtaXR0ZXIuIEFzIGluIG5vcm1hbCBtb2RlIHRoZXkgYXJlIHByb2Nlc3NzZWQgYnkKKyAqCQl0cmFuc21pdHRlci4gQXMgaW4gbm9ybWFsIG1vZGUgdGhleSBhcmUgcHJvY2Vzc2VkIGJ5CiAgKgkJdGhlIHN5bmNocm9uaXplciBhbmQgdGhlbiBzZW50IHRvIHRoZSBzeXN0ZW0gaW50ZXJmYWNlLgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi94MjVfYXN5LmMgYi9kcml2ZXJzL25ldC93YW4veDI1X2FzeS5jCmluZGV4IDI0Mjk3YjIuLjQwMzk4YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi94MjVfYXN5LmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3gyNV9hc3kuYwpAQCAtNTE3LDE3ICs1MTcsMTggQEAKICAqIGFuZCBzZW50IG9uIHRvIHNvbWUgSVAgbGF5ZXIgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy4KICAqLwogCi1zdGF0aWMgdm9pZCB4MjVfYXN5X3JlY2VpdmVfYnVmKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCitzdGF0aWMgdW5zaWduZWQgaW50IHgyNV9hc3lfcmVjZWl2ZV9idWYoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpjcCwgY2hhciAqZnAsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3QgeDI1X2FzeSAqc2wgPSB0dHktPmRpc2NfZGF0YTsKKwlpbnQgYnl0ZXMgPSBjb3VudDsKIAogCWlmICghc2wgfHwgc2wtPm1hZ2ljICE9IFgyNV9BU1lfTUFHSUMgfHwgIW5ldGlmX3J1bm5pbmcoc2wtPmRldikpCiAJCXJldHVybjsKIAogCiAJLyogUmVhZCB0aGUgY2hhcmFjdGVycyBvdXQgb2YgdGhlIGJ1ZmZlciAqLwotCXdoaWxlIChjb3VudC0tKSB7CisJd2hpbGUgKGJ5dGVzLS0pIHsKIAkJaWYgKGZwICYmICpmcCsrKSB7CiAJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoU0xGX0VSUk9SLCAmc2wtPmZsYWdzKSkKIAkJCQlzbC0+ZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKQEAgLTUzNiw2ICs1MzcsOCBAQAogCQl9CiAJCXgyNV9hc3lfdW5lc2Moc2wsICpjcCsrKTsKIAl9CisKKwlyZXR1cm4gY291bnQ7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZwppbmRleCA3YWViMTEzLi5mMzU0YmQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcKQEAgLTI4NCw1ICsyODQsNiBAQAogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L0tjb25maWciCitzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvS2NvbmZpZyIKIAogZW5kaWYgIyBXTEFOCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlCmluZGV4IGRkZDNmYjYuLjdiYmE2YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlCkBAIC01NiwzICs1Niw1IEBACiBvYmotJChDT05GSUdfV0wxMlhYX1BMQVRGT1JNX0RBVEEpCSs9IHdsMTJ4eC8KIAogb2JqLSQoQ09ORklHX0lXTSkJKz0gaXdtYzMyMDB3aWZpLworCitvYmotJChDT05GSUdfTVdJRklFWCkJKz0gbXdpZmlleC8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYwppbmRleCA0ZTVjN2ExLi5hNzBjNTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCkBAIC0yNDIsOSArMjQyLDggQEAKIHN0YXRpYyBpbnQgcHJvY19wZXJtID0gMDY0NDsKIAogTU9EVUxFX0FVVEhPUigiQmVuamFtaW4gUmVlZCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJTdXBwb3J0IGZvciBDaXNjby9BaXJvbmV0IDgwMi4xMSB3aXJlbGVzcyBldGhlcm5ldCBcCi1jYXJkcy4gIERpcmVjdCBzdXBwb3J0IGZvciBJU0EvUENJL01QSSBjYXJkcyBhbmQgc3VwcG9ydCBcCi1mb3IgUENNQ0lBIHdoZW4gdXNlZCB3aXRoIGFpcm9fY3MuIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlN1cHBvcnQgZm9yIENpc2NvL0Fpcm9uZXQgODAyLjExIHdpcmVsZXNzIGV0aGVybmV0IGNhcmRzLiAgIgorCQkgICAiRGlyZWN0IHN1cHBvcnQgZm9yIElTQS9QQ0kvTVBJIGNhcmRzIGFuZCBzdXBwb3J0IGZvciBQQ01DSUEgd2hlbiB1c2VkIHdpdGggYWlyb19jcy4iKTsKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJBaXJvbmV0IDQ1MDAsIDQ4MDAgYW5kIENpc2NvIDM0MC8zNTAiKTsKIG1vZHVsZV9wYXJhbV9hcnJheShpbywgaW50LCBOVUxMLCAwKTsKQEAgLTI1MiwxOCArMjUxLDIwIEBACiBtb2R1bGVfcGFyYW1fYXJyYXkocmF0ZXMsIGludCwgTlVMTCwgMCk7CiBtb2R1bGVfcGFyYW1fYXJyYXkoc3NpZHMsIGNoYXJwLCBOVUxMLCAwKTsKIG1vZHVsZV9wYXJhbShhdXRvX3dlcCwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoYXV0b193ZXAsICJJZiBub24temVybywgdGhlIGRyaXZlciB3aWxsIGtlZXAgbG9vcGluZyB0aHJvdWdoIFwKLXRoZSBhdXRoZW50aWNhdGlvbiBvcHRpb25zIHVudGlsIGFuIGFzc29jaWF0aW9uIGlzIG1hZGUuICBUaGUgdmFsdWUgb2YgXAotYXV0b193ZXAgaXMgbnVtYmVyIG9mIHRoZSB3ZXAga2V5cyB0byBjaGVjay4gIEEgdmFsdWUgb2YgMiB3aWxsIHRyeSB1c2luZyBcCi10aGUga2V5IGF0IGluZGV4IDAgYW5kIGluZGV4IDEuIik7CitNT0RVTEVfUEFSTV9ERVNDKGF1dG9fd2VwLAorCQkgIklmIG5vbi16ZXJvLCB0aGUgZHJpdmVyIHdpbGwga2VlcCBsb29waW5nIHRocm91Z2ggdGhlIGF1dGhlbnRpY2F0aW9uIG9wdGlvbnMgdW50aWwgYW4gYXNzb2NpYXRpb24gaXMgbWFkZS4gICIKKwkJICJUaGUgdmFsdWUgb2YgYXV0b193ZXAgaXMgbnVtYmVyIG9mIHRoZSB3ZXAga2V5cyB0byBjaGVjay4gICIKKwkJICJBIHZhbHVlIG9mIDIgd2lsbCB0cnkgdXNpbmcgdGhlIGtleSBhdCBpbmRleCAwIGFuZCBpbmRleCAxLiIpOwogbW9kdWxlX3BhcmFtKGF1eF9iYXAsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGF1eF9iYXAsICJJZiBub24temVybywgdGhlIGRyaXZlciB3aWxsIHN3aXRjaCBpbnRvIGEgbW9kZSBcCi10aGFuIHNlZW1zIHRvIHdvcmsgYmV0dGVyIGZvciBvbGRlciBjYXJkcyB3aXRoIHNvbWUgb2xkZXIgYnVzZXMuICBCZWZvcmUgXAotc3dpdGNoaW5nIGl0IGNoZWNrcyB0aGF0IHRoZSBzd2l0Y2ggaXMgbmVlZGVkLiIpOworTU9EVUxFX1BBUk1fREVTQyhhdXhfYmFwLAorCQkgIklmIG5vbi16ZXJvLCB0aGUgZHJpdmVyIHdpbGwgc3dpdGNoIGludG8gYSBtb2RlIHRoYXQgc2VlbXMgdG8gd29yayBiZXR0ZXIgZm9yIG9sZGVyIGNhcmRzIHdpdGggc29tZSBvbGRlciBidXNlcy4gICIKKwkJICJCZWZvcmUgc3dpdGNoaW5nIGl0IGNoZWNrcyB0aGF0IHRoZSBzd2l0Y2ggaXMgbmVlZGVkLiIpOwogbW9kdWxlX3BhcmFtKG1heGVuY3J5cHQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG1heGVuY3J5cHQsICJUaGUgbWF4aW11bSBzcGVlZCB0aGF0IHRoZSBjYXJkIGNhbiBkbyBcCi1lbmNyeXB0aW9uLiAgVW5pdHMgYXJlIGluIDUxMmticy4gIFplcm8gKGRlZmF1bHQpIG1lYW5zIHRoZXJlIGlzIG5vIGxpbWl0LiBcCi1PbGRlciBjYXJkcyB1c2VkIHRvIGJlIGxpbWl0ZWQgdG8gMm1icyAoNCkuIik7CitNT0RVTEVfUEFSTV9ERVNDKG1heGVuY3J5cHQsCisJCSAiVGhlIG1heGltdW0gc3BlZWQgdGhhdCB0aGUgY2FyZCBjYW4gZG8gZW5jcnlwdGlvbi4gICIKKwkJICJVbml0cyBhcmUgaW4gNTEya2JzLiAgIgorCQkgIlplcm8gKGRlZmF1bHQpIG1lYW5zIHRoZXJlIGlzIG5vIGxpbWl0LiAgIgorCQkgIk9sZGVyIGNhcmRzIHVzZWQgdG8gYmUgbGltaXRlZCB0byAybWJzICg0KS4iKTsKIG1vZHVsZV9wYXJhbShhZGhvYywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoYWRob2MsICJJZiBub24temVybywgdGhlIGNhcmQgd2lsbCBzdGFydCBpbiBhZGhvYyBtb2RlLiIpOwogbW9kdWxlX3BhcmFtKHByb2JlLCBpbnQsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZwppbmRleCA5MmMyMTYyLi5kMWIyMzA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZwpAQCAtMjQsNyArMjQsNiBAQAogCiBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZyIKLXNvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvS2NvbmZpZyIKIAogZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9NYWtlZmlsZQppbmRleCA2ZDcxMWVjLi4wZThmNTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL01ha2VmaWxlCkBAIC0xLDYgKzEsNSBAQAogb2JqLSQoQ09ORklHX0FUSDVLKQkJKz0gYXRoNWsvCiBvYmotJChDT05GSUdfQVRIOUtfSFcpCQkrPSBhdGg5ay8KLW9iai0kKENPTkZJR19BUjkxNzBfVVNCKSAgICAgICAgKz0gYXI5MTcwLwogb2JqLSQoQ09ORklHX0NBUkw5MTcwKQkJKz0gY2FybDkxNzAvCiAKIG9iai0kKENPTkZJR19BVEhfQ09NTU9OKQkrPSBhdGgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Yjk2NzJiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLWNvbmZpZyBBUjkxNzBfVVNCCi0JdHJpc3RhdGUgIkF0aGVyb3MgQVI5MTcwIDgwMi4xMW4gVVNCIHN1cHBvcnQgKE9CU09MRVRFKSIKLQlkZXBlbmRzIG9uIFVTQiAmJiBNQUM4MDIxMQotCXNlbGVjdCBGV19MT0FERVIKLQloZWxwCi0JICBUaGlzIGRyaXZlciBpcyBnb2luZyB0byBnZXQgcmVwbGFjZWQgYnkgY2FybDkxNzAuCi0KLQkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSBBdGhlcm9zICJvdHVzIiA4MDIuMTFuIFVTQiBkZXZpY2VzLgotCi0JICBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgYWRkaXRpb25hbCBmaXJtd2FyZSAoMiBmaWxlcykuCi0JICBGb3Igbm93LCB0aGVzZSBmaWxlcyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIGhlcmU6Ci0KLQkgIGh0dHA6Ly93aXJlbGVzcy5rZXJuZWwub3JnL2VuL3VzZXJzL0RyaXZlcnMvYXI5MTcwCi0KLQkgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZCBhcjkxNzB1c2IuCi0KLWNvbmZpZyBBUjkxNzBfTEVEUwotCWJvb2wKLQlkZXBlbmRzIG9uIEFSOTE3MF9VU0IgJiYgTUFDODAyMTFfTEVEUyAmJiAoTEVEU19DTEFTUyA9IHkgfHwgTEVEU19DTEFTUyA9IEFSOTE3MF9VU0IpCi0JZGVmYXVsdCB5CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ5MWM3ZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1hcjkxNzB1c2Itb2JqcyA6PSB1c2IubyBtYWluLm8gY21kLm8gbWFjLm8gcGh5Lm8gbGVkLm8KLQotb2JqLSQoQ09ORklHX0FSOTE3MF9VU0IpICs9IGFyOTE3MHVzYi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2FyOTE3MC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9hcjkxNzAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzcxZTRjZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2FyOTE3MC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjU4ICswLDAgQEAKLS8qCi0gKiBBdGhlcm9zIEFSOTE3MCBkcml2ZXIKLSAqCi0gKiBEcml2ZXIgc3BlY2lmaWMgZGVmaW5pdGlvbnMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgc2VlCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgotICoKLSAqIFRoaXMgZmlsZSBpbmNvcnBvcmF0ZXMgd29yayBjb3ZlcmVkIGJ5IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAotICogcGVybWlzc2lvbiBub3RpY2U6Ci0gKiAgICBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCi0gKgotICogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogICAgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLSAqICAgIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqICAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotICogICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLSAqICAgIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLSNpZm5kZWYgX19BUjkxNzBfSAotI2RlZmluZSBfX0FSOTE3MF9ICi0KLSNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KLSNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KLSNpZmRlZiBDT05GSUdfQVI5MTcwX0xFRFMKLSNpbmNsdWRlIDxsaW51eC9sZWRzLmg+Ci0jZW5kaWYgLyogQ09ORklHX0FSOTE3MF9MRURTICovCi0jaW5jbHVkZSAiZWVwcm9tLmgiCi0jaW5jbHVkZSAiaHcuaCIKLQotI2luY2x1ZGUgIi4uL3JlZ2QuaCIKLQotI2RlZmluZSBQQVlMT0FEX01BWAkoQVI5MTcwX01BWF9DTURfTEVOLzQgLSAxKQotCi1lbnVtIGFyOTE3MF9idyB7Ci0JQVI5MTcwX0JXXzIwLAotCUFSOTE3MF9CV180MF9CRUxPVywKLQlBUjkxNzBfQldfNDBfQUJPVkUsCi0KLQlfX0FSOTE3MF9OVU1fQlcsCi19OwotCi1zdGF0aWMgaW5saW5lIGVudW0gYXI5MTcwX2J3IG5sODAyMTFfdG9fYXI5MTcwKGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgdHlwZSkKLXsKLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIE5MODAyMTFfQ0hBTl9OT19IVDoKLQljYXNlIE5MODAyMTFfQ0hBTl9IVDIwOgotCQlyZXR1cm4gQVI5MTcwX0JXXzIwOwotCWNhc2UgTkw4MDIxMV9DSEFOX0hUNDBNSU5VUzoKLQkJcmV0dXJuIEFSOTE3MF9CV180MF9CRUxPVzsKLQljYXNlIE5MODAyMTFfQ0hBTl9IVDQwUExVUzoKLQkJcmV0dXJuIEFSOTE3MF9CV180MF9BQk9WRTsKLQlkZWZhdWx0OgotCQlCVUcoKTsKLQl9Ci19Ci0KLWVudW0gYXI5MTcwX3JmX2luaXRfbW9kZSB7Ci0JQVI5MTcwX1JGSV9OT05FLAotCUFSOTE3MF9SRklfV0FSTSwKLQlBUjkxNzBfUkZJX0NPTEQsCi19OwotCi0jZGVmaW5lIEFSOTE3MF9NQVhfUlhfQlVGRkVSX1NJWkUJCTgxOTIKLQotI2lmZGVmIENPTkZJR19BUjkxNzBfTEVEUwotc3RydWN0IGFyOTE3MDsKLQotc3RydWN0IGFyOTE3MF9sZWQgewotCXN0cnVjdCBhcjkxNzAgKmFyOwotCXN0cnVjdCBsZWRfY2xhc3NkZXYgbDsKLQljaGFyIG5hbWVbMzJdOwotCXVuc2lnbmVkIGludCB0b2dnbGVkOwotCWJvb2wgbGFzdF9zdGF0ZTsKLQlib29sIHJlZ2lzdGVyZWQ7Ci19OwotCi0jZW5kaWYgLyogQ09ORklHX0FSOTE3MF9MRURTICovCi0KLWVudW0gYXI5MTcwX2RldmljZV9zdGF0ZSB7Ci0JQVI5MTcwX1VOS05PV05fU1RBVEUsCi0JQVI5MTcwX1NUT1BQRUQsCi0JQVI5MTcwX0lETEUsCi0JQVI5MTcwX1NUQVJURUQsCi19OwotCi1zdHJ1Y3QgYXI5MTcwX3J4c3RyZWFtX21wZHVfbWVyZ2UgewotCXN0cnVjdCBhcjkxNzBfcnhfaGVhZCBwbGNwOwotCWJvb2wgaGFzX3BsY3A7Ci19OwotCi1zdHJ1Y3QgYXI5MTcwX3R4X3F1ZXVlX3N0YXRzIHsKLQl1bnNpZ25lZCBpbnQgbGVuOwotCXVuc2lnbmVkIGludCBsaW1pdDsKLQl1bnNpZ25lZCBpbnQgY291bnQ7Ci19OwotCi0jZGVmaW5lIEFSOTE3MF9RVUVVRV9USU1FT1VUCQk2NAotI2RlZmluZSBBUjkxNzBfVFhfVElNRU9VVAkJOAotI2RlZmluZSBBUjkxNzBfSkFOSVRPUl9ERUxBWQkJMTI4Ci0jZGVmaW5lIEFSOTE3MF9UWF9JTlZBTElEX1JBVEUJCTB4ZmZmZmZmZmYKLQotI2RlZmluZSBBUjkxNzBfTlVNX1RYX0xJTUlUX0hBUkQJQVI5MTcwX1RYUV9ERVBUSAotI2RlZmluZSBBUjkxNzBfTlVNX1RYX0xJTUlUX1NPRlQJKEFSOTE3MF9UWFFfREVQVEggLSAxMCkKLQotc3RydWN0IGFyOTE3MCB7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0Jc3RydWN0IGF0aF9jb21tb24gY29tbW9uOwotCXN0cnVjdCBtdXRleCBtdXRleDsKLQllbnVtIGFyOTE3MF9kZXZpY2Vfc3RhdGUgc3RhdGU7Ci0JYm9vbCByZWdpc3RlcmVkOwotCXVuc2lnbmVkIGxvbmcgYmFkX2h3X25hZ2dlcjsKLQotCWludCAoKm9wZW4pKHN0cnVjdCBhcjkxNzAgKik7Ci0Jdm9pZCAoKnN0b3ApKHN0cnVjdCBhcjkxNzAgKik7Ci0JaW50ICgqdHgpKHN0cnVjdCBhcjkxNzAgKiwgc3RydWN0IHNrX2J1ZmYgKik7Ci0JaW50ICgqZXhlY19jbWQpKHN0cnVjdCBhcjkxNzAgKiwgZW51bSBhcjkxNzBfY21kLCB1MzIgLAotCQkJdm9pZCAqLCB1MzIgLCB2b2lkICopOwotCXZvaWQgKCpjYWxsYmFja19jbWQpKHN0cnVjdCBhcjkxNzAgKiwgdTMyICwgdm9pZCAqKTsKLQlpbnQgKCpmbHVzaCkoc3RydWN0IGFyOTE3MCAqKTsKLQotCS8qIGludGVyZmFjZSBtb2RlIHNldHRpbmdzICovCi0Jc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKLQotCS8qIGJlYWNvbmluZyAqLwotCXN0cnVjdCBza19idWZmICpiZWFjb247Ci0Jc3RydWN0IHdvcmtfc3RydWN0IGJlYWNvbl93b3JrOwotCWJvb2wgZW5hYmxlX2JlYWNvbjsKLQotCS8qIGNyeXB0b2dyYXBoaWMgZW5naW5lICovCi0JdTY0IHVzZWRrZXlzOwotCWJvb2wgcnhfc29mdHdhcmVfZGVjcnlwdGlvbjsKLQlib29sIGRpc2FibGVfb2ZmbG9hZDsKLQotCS8qIGZpbHRlciBzZXR0aW5ncyAqLwotCXU2NCBjdXJfbWNfaGFzaDsKLQl1MzIgY3VyX2ZpbHRlcjsKLQl1bnNpZ25lZCBpbnQgZmlsdGVyX3N0YXRlOwotCWJvb2wgc25pZmZlcl9lbmFibGVkOwotCi0JLyogUEhZICovCi0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsOwotCWludCBub2lzZVs0XTsKLQotCS8qIHBvd2VyIGNhbGlicmF0aW9uIGRhdGEgKi8KLQl1OCBwb3dlcl81R19sZWdbNF07Ci0JdTggcG93ZXJfMkdfY2NrWzRdOwotCXU4IHBvd2VyXzJHX29mZG1bNF07Ci0JdTggcG93ZXJfNUdfaHQyMFs4XTsKLQl1OCBwb3dlcl81R19odDQwWzhdOwotCXU4IHBvd2VyXzJHX2h0MjBbOF07Ci0JdTggcG93ZXJfMkdfaHQ0MFs4XTsKLQotCXU4IHBoeV9oZWF2eV9jbGlwOwotCi0jaWZkZWYgQ09ORklHX0FSOTE3MF9MRURTCi0Jc3RydWN0IGRlbGF5ZWRfd29yayBsZWRfd29yazsKLQlzdHJ1Y3QgYXI5MTcwX2xlZCBsZWRzW0FSOTE3MF9OVU1fTEVEU107Ci0jZW5kaWYgLyogQ09ORklHX0FSOTE3MF9MRURTICovCi0KLQkvKiBxb3MgcXVldWUgc2V0dGluZ3MgKi8KLQlzcGlubG9ja190IHR4X3N0YXRzX2xvY2s7Ci0Jc3RydWN0IGFyOTE3MF90eF9xdWV1ZV9zdGF0cyB0eF9zdGF0c1s1XTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyBlZGNmWzVdOwotCi0Jc3BpbmxvY2tfdCBjbWRsb2NrOwotCV9fbGUzMiBjbWRidWZbUEFZTE9BRF9NQVggKyAxXTsKLQotCS8qIE1BQyBzdGF0aXN0aWNzICovCi0Jc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgc3RhdHM7Ci0KLQkvKiBFRVBST00gKi8KLQlzdHJ1Y3QgYXI5MTcwX2VlcHJvbSBlZXByb207Ci0KLQkvKiB0eCBxdWV1ZXMgLSBhcyBzZWVuIGJ5IGh3IC0gKi8KLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3BlbmRpbmdbX19BUjkxNzBfTlVNX1RYUV07Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZCB0eF9zdGF0dXNbX19BUjkxNzBfTlVNX1RYUV07Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayB0eF9qYW5pdG9yOwotCi0JLyogcnhzdHJlYW0gbXBkdSBtZXJnZSAqLwotCXN0cnVjdCBhcjkxNzBfcnhzdHJlYW1fbXBkdV9tZXJnZSByeF9tcGR1OwotCXN0cnVjdCBza19idWZmICpyeF9mYWlsb3ZlcjsKLQlpbnQgcnhfZmFpbG92ZXJfbWlzc2luZzsKLQotCS8qIChjYWNoZWQpIEhXIEEtTVBEVSBzZXR0aW5ncyAqLwotCXU4IGdsb2JhbF9hbXBkdV9kZW5zaXR5OwotCXU4IGdsb2JhbF9hbXBkdV9mYWN0b3I7Ci19OwotCi1zdHJ1Y3QgYXI5MTcwX3R4X2luZm8gewotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKLX07Ci0KLSNkZWZpbmUgSVNfU1RBUlRFRChhKQkJKCgoc3RydWN0IGFyOTE3MCAqKWEpLT5zdGF0ZSA+PSBBUjkxNzBfU1RBUlRFRCkKLSNkZWZpbmUgSVNfQUNDRVBUSU5HX0NNRChhKQkoKChzdHJ1Y3QgYXI5MTcwICopYSktPnN0YXRlID49IEFSOTE3MF9JRExFKQotCi0vKiBleHBvcnRlZCBpbnRlcmZhY2UgKi8KLXZvaWQgKmFyOTE3MF9hbGxvYyhzaXplX3QgcHJpdl9zaXplKTsKLWludCBhcjkxNzBfcmVnaXN0ZXIoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBkZXZpY2UgKnBkZXYpOwotdm9pZCBhcjkxNzBfcngoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBza19idWZmICpza2IpOwotdm9pZCBhcjkxNzBfdW5yZWdpc3RlcihzdHJ1Y3QgYXI5MTcwICphcik7Ci12b2lkIGFyOTE3MF90eF9jYWxsYmFjayhzdHJ1Y3QgYXI5MTcwICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci12b2lkIGFyOTE3MF9oYW5kbGVfY29tbWFuZF9yZXNwb25zZShzdHJ1Y3QgYXI5MTcwICphciwgdm9pZCAqYnVmLCB1MzIgbGVuKTsKLWludCBhcjkxNzBfbmFnX2xpbWl0ZXIoc3RydWN0IGFyOTE3MCAqYXIpOwotCi0vKiBNQUMgKi8KLXZvaWQgYXI5MTcwX29wX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLWludCBhcjkxNzBfaW5pdF9tYWMoc3RydWN0IGFyOTE3MCAqYXIpOwotaW50IGFyOTE3MF9zZXRfcW9zKHN0cnVjdCBhcjkxNzAgKmFyKTsKLWludCBhcjkxNzBfdXBkYXRlX211bHRpY2FzdChzdHJ1Y3QgYXI5MTcwICphciwgY29uc3QgdTY0IG1jX2hhc3QpOwotaW50IGFyOTE3MF91cGRhdGVfZnJhbWVfZmlsdGVyKHN0cnVjdCBhcjkxNzAgKmFyLCBjb25zdCB1MzIgZmlsdGVyKTsKLWludCBhcjkxNzBfc2V0X29wZXJhdGluZ19tb2RlKHN0cnVjdCBhcjkxNzAgKmFyKTsKLWludCBhcjkxNzBfc2V0X2JlYWNvbl90aW1lcnMoc3RydWN0IGFyOTE3MCAqYXIpOwotaW50IGFyOTE3MF9zZXRfZHluX3NpZnNfYWNrKHN0cnVjdCBhcjkxNzAgKmFyKTsKLWludCBhcjkxNzBfc2V0X3Nsb3RfdGltZShzdHJ1Y3QgYXI5MTcwICphcik7Ci1pbnQgYXI5MTcwX3NldF9iYXNpY19yYXRlcyhzdHJ1Y3QgYXI5MTcwICphcik7Ci1pbnQgYXI5MTcwX3NldF9od3JldHJ5X2xpbWl0KHN0cnVjdCBhcjkxNzAgKmFyLCB1MzIgbWF4X3JldHJ5KTsKLWludCBhcjkxNzBfdXBkYXRlX2JlYWNvbihzdHJ1Y3QgYXI5MTcwICphcik7Ci12b2lkIGFyOTE3MF9uZXdfYmVhY29uKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci1pbnQgYXI5MTcwX3VwbG9hZF9rZXkoc3RydWN0IGFyOTE3MCAqYXIsIHU4IGlkLCBjb25zdCB1OCAqbWFjLCB1OCBrdHlwZSwKLQkJICAgICAgdTgga2V5aWR4LCB1OCAqa2V5ZGF0YSwgaW50IGtleWxlbik7Ci1pbnQgYXI5MTcwX2Rpc2FibGVfa2V5KHN0cnVjdCBhcjkxNzAgKmFyLCB1OCBpZCk7Ci0KLS8qIExFRHMgKi8KLSNpZmRlZiBDT05GSUdfQVI5MTcwX0xFRFMKLWludCBhcjkxNzBfcmVnaXN0ZXJfbGVkcyhzdHJ1Y3QgYXI5MTcwICphcik7Ci12b2lkIGFyOTE3MF91bnJlZ2lzdGVyX2xlZHMoc3RydWN0IGFyOTE3MCAqYXIpOwotI2VuZGlmIC8qIENPTkZJR19BUjkxNzBfTEVEUyAqLwotaW50IGFyOTE3MF9pbml0X2xlZHMoc3RydWN0IGFyOTE3MCAqYXIpOwotaW50IGFyOTE3MF9zZXRfbGVkc19zdGF0ZShzdHJ1Y3QgYXI5MTcwICphciwgdTMyIGxlZF9zdGF0ZSk7Ci0KLS8qIFBIWSAvIFJGICovCi1pbnQgYXI5MTcwX2luaXRfcGh5KHN0cnVjdCBhcjkxNzAgKmFyLCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpOwotaW50IGFyOTE3MF9pbml0X3JmKHN0cnVjdCBhcjkxNzAgKmFyKTsKLWludCBhcjkxNzBfc2V0X2NoYW5uZWwoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKLQkJICAgICAgIGVudW0gYXI5MTcwX3JmX2luaXRfbW9kZSByZmksIGVudW0gYXI5MTcwX2J3IGJ3KTsKLQotI2VuZGlmIC8qIF9fQVI5MTcwX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2NtZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDUyYzUwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvY21kLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoKLSAqIEF0aGVyb3MgQVI5MTcwIGRyaXZlcgotICoKLSAqIEJhc2ljIEhXIHJlZ2lzdGVyL21lbW9yeS9jb21tYW5kIGFjY2VzcyBmdW5jdGlvbnMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgc2VlCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgotICoKLSAqIFRoaXMgZmlsZSBpbmNvcnBvcmF0ZXMgd29yayBjb3ZlcmVkIGJ5IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAotICogcGVybWlzc2lvbiBub3RpY2U6Ci0gKiAgICBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCi0gKgotICogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogICAgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLSAqICAgIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqICAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotICogICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLSAqICAgIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLQotI2luY2x1ZGUgImFyOTE3MC5oIgotI2luY2x1ZGUgImNtZC5oIgotCi1pbnQgYXI5MTcwX3dyaXRlX21lbShzdHJ1Y3QgYXI5MTcwICphciwgY29uc3QgX19sZTMyICpkYXRhLCBzaXplX3QgbGVuKQotewotCWludCBlcnI7Ci0KLQlpZiAodW5saWtlbHkoIUlTX0FDQ0VQVElOR19DTUQoYXIpKSkKLQkJcmV0dXJuIDA7Ci0KLQllcnIgPSBhci0+ZXhlY19jbWQoYXIsIEFSOTE3MF9DTURfV01FTSwgbGVuLCAodTggKikgZGF0YSwgMCwgTlVMTCk7Ci0JaWYgKGVycikKLQkJd2lwaHlfZGVidWcoYXItPmh3LT53aXBoeSwgIndyaXRpbmcgbWVtb3J5IGZhaWxlZFxuIik7Ci0JcmV0dXJuIGVycjsKLX0KLQotaW50IGFyOTE3MF93cml0ZV9yZWcoc3RydWN0IGFyOTE3MCAqYXIsIGNvbnN0IHUzMiByZWcsIGNvbnN0IHUzMiB2YWwpCi17Ci0JY29uc3QgX19sZTMyIGJ1ZlsyXSA9IHsKLQkJY3B1X3RvX2xlMzIocmVnKSwKLQkJY3B1X3RvX2xlMzIodmFsKSwKLQl9OwotCWludCBlcnI7Ci0KLQlpZiAodW5saWtlbHkoIUlTX0FDQ0VQVElOR19DTUQoYXIpKSkKLQkJcmV0dXJuIDA7Ci0KLQllcnIgPSBhci0+ZXhlY19jbWQoYXIsIEFSOTE3MF9DTURfV1JFRywgc2l6ZW9mKGJ1ZiksCi0JCQkgICAodTggKikgYnVmLCAwLCBOVUxMKTsKLQlpZiAoZXJyKQotCQl3aXBoeV9kZWJ1Zyhhci0+aHctPndpcGh5LCAid3JpdGluZyByZWcgJSN4ICh2YWwgJSN4KSBmYWlsZWRcbiIsCi0JCQkgICAgcmVnLCB2YWwpOwotCXJldHVybiBlcnI7Ci19Ci0KLWludCBhcjkxNzBfcmVhZF9tcmVnKHN0cnVjdCBhcjkxNzAgKmFyLCBpbnQgbnJlZ3MsIGNvbnN0IHUzMiAqcmVncywgdTMyICpvdXQpCi17Ci0JaW50IGksIGVycjsKLQlfX2xlMzIgKm9mZnMsICpyZXM7Ci0KLQlpZiAodW5saWtlbHkoIUlTX0FDQ0VQVElOR19DTUQoYXIpKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBhYnVzZSAib3V0IiBmb3IgdGhlIHJlZ2lzdGVyIG9mZnNldHMsIG11c3QgYmUgc2FtZSBsZW5ndGggKi8KLQlvZmZzID0gKF9fbGUzMiAqKW91dDsKLQlmb3IgKGkgPSAwOyBpIDwgbnJlZ3M7IGkrKykKLQkJb2Zmc1tpXSA9IGNwdV90b19sZTMyKHJlZ3NbaV0pOwotCi0JLyogYWxzbyB1c2UgdGhlIHNhbWUgYnVmZmVyIGZvciB0aGUgaW5wdXQgKi8KLQlyZXMgPSAoX19sZTMyICopb3V0OwotCi0JZXJyID0gYXItPmV4ZWNfY21kKGFyLCBBUjkxNzBfQ01EX1JSRUcsCi0JCQkgICA0ICogbnJlZ3MsICh1OCAqKW9mZnMsCi0JCQkgICA0ICogbnJlZ3MsICh1OCAqKXJlcyk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCS8qIGNvbnZlcnQgcmVzdWx0IHRvIGNwdSBlbmRpYW4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnJlZ3M7IGkrKykKLQkJb3V0W2ldID0gbGUzMl90b19jcHUocmVzW2ldKTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgYXI5MTcwX3JlYWRfcmVnKHN0cnVjdCBhcjkxNzAgKmFyLCB1MzIgcmVnLCB1MzIgKnZhbCkKLXsKLQlyZXR1cm4gYXI5MTcwX3JlYWRfbXJlZyhhciwgMSwgJnJlZywgdmFsKTsKLX0KLQotaW50IGFyOTE3MF9lY2hvX3Rlc3Qoc3RydWN0IGFyOTE3MCAqYXIsIHUzMiB2KQotewotCV9fbGUzMiBlY2hvYnVmID0gY3B1X3RvX2xlMzIodik7Ci0JX19sZTMyIGVjaG9yZXM7Ci0JaW50IGVycjsKLQotCWlmICh1bmxpa2VseSghSVNfQUNDRVBUSU5HX0NNRChhcikpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWVyciA9IGFyLT5leGVjX2NtZChhciwgQVI5MTcwX0NNRF9FQ0hPLAotCQkJICAgNCwgKHU4ICopJmVjaG9idWYsCi0JCQkgICA0LCAodTggKikmZWNob3Jlcyk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWlmIChlY2hvYnVmICE9IGVjaG9yZXMpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2NtZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9jbWQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWM4MTM0YjQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9jbWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8qCi0gKiBBdGhlcm9zIEFSOTE3MCBkcml2ZXIKLSAqCi0gKiBCYXNpYyBIVyByZWdpc3Rlci9tZW1vcnkvY29tbWFuZCBhY2Nlc3MgZnVuY3Rpb25zCi0gKgotICogQ29weXJpZ2h0IDIwMDgsIEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHNlZQotICogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KLSAqCi0gKiBUaGlzIGZpbGUgaW5jb3Jwb3JhdGVzIHdvcmsgY292ZXJlZCBieSB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQKLSAqIHBlcm1pc3Npb24gbm90aWNlOgotICogICAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSW5jLgotICoKLSAqICAgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogICAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSAqCi0gKiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSAqICAgIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICAgIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0gKiAgICBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0gKiAgICBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLSAqICAgIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0gKiAgICBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotICovCi0jaWZuZGVmIF9fQ01EX0gKLSNkZWZpbmUgX19DTURfSAotCi0jaW5jbHVkZSAiYXI5MTcwLmgiCi0KLS8qIGJhc2ljIEhXIGFjY2VzcyAqLwotaW50IGFyOTE3MF93cml0ZV9tZW0oc3RydWN0IGFyOTE3MCAqYXIsIGNvbnN0IF9fbGUzMiAqZGF0YSwgc2l6ZV90IGxlbik7Ci1pbnQgYXI5MTcwX3dyaXRlX3JlZyhzdHJ1Y3QgYXI5MTcwICphciwgY29uc3QgdTMyIHJlZywgY29uc3QgdTMyIHZhbCk7Ci1pbnQgYXI5MTcwX3JlYWRfcmVnKHN0cnVjdCBhcjkxNzAgKmFyLCB1MzIgcmVnLCB1MzIgKnZhbCk7Ci1pbnQgYXI5MTcwX3JlYWRfbXJlZyhzdHJ1Y3QgYXI5MTcwICphciwgaW50IG5yZWdzLCBjb25zdCB1MzIgKnJlZ3MsIHUzMiAqb3V0KTsKLWludCBhcjkxNzBfZWNob190ZXN0KHN0cnVjdCBhcjkxNzAgKmFyLCB1MzIgdik7Ci0KLS8qCi0gKiBNYWNyb3MgdG8gZmFjaWxpdGF0ZSB3cml0aW5nIG11bHRpcGxlIHJlZ2lzdGVycyBpbiBhIHNpbmdsZQotICogd3JpdGUtY29tYmluaW5nIFVTQiBjb21tYW5kLiBOb3RlIHRoYXQgd2hlbiB0aGUgZmlyc3QgZ3JvdXAKLSAqIGZhaWxzIHRoZSB3aG9sZSB0aGluZyB3aWxsIGZhaWwgd2l0aG91dCBhbnkgb3RoZXJzIGF0dGVtcHRlZCwKLSAqIGJ1dCB5b3Ugd29uJ3Qga25vdyB3aGljaCB3cml0ZSBpbiB0aGUgZ3JvdXAgZmFpbGVkLgotICovCi0jZGVmaW5lIGFyOTE3MF9yZWd3cml0ZV9iZWdpbihhcikJCQkJCVwKLWRvIHsJCQkJCQkJCQlcCi0JaW50IF9fbnJlZyA9IDAsIF9fZXJyID0gMDsJCQkJCVwKLQlzdHJ1Y3QgYXI5MTcwICpfX2FyID0gYXI7Ci0KLSNkZWZpbmUgYXI5MTcwX3JlZ3dyaXRlKHIsIHYpIGRvIHsJCQkJCVwKLQlfX2FyLT5jbWRidWZbMiAqIF9fbnJlZyArIDFdID0gY3B1X3RvX2xlMzIocik7CQkJXAotCV9fYXItPmNtZGJ1ZlsyICogX19ucmVnICsgMl0gPSBjcHVfdG9fbGUzMih2KTsJCQlcCi0JX19ucmVnKys7CQkJCQkJCVwKLQlpZiAoKF9fbnJlZyA+PSBQQVlMT0FEX01BWC8yKSkgewkJCQlcCi0JCWlmIChJU19BQ0NFUFRJTkdfQ01EKF9fYXIpKQkJCQlcCi0JCQlfX2VyciA9IGFyLT5leGVjX2NtZChfX2FyLCBBUjkxNzBfQ01EX1dSRUcsCVwKLQkJCQkJICAgICA4ICogX19ucmVnLAkJXAotCQkJCQkgICAgICh1OCAqKSAmX19hci0+Y21kYnVmWzFdLAlcCi0JCQkJCSAgICAgMCwgTlVMTCk7CQkJXAotCQlfX25yZWcgPSAwOwkJCQkJCVwKLQkJaWYgKF9fZXJyKQkJCQkJCVwKLQkJCWdvdG8gX19yZWd3cml0ZV9vdXQ7CQkJCVwKLQl9CQkJCQkJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIGFyOTE3MF9yZWd3cml0ZV9maW5pc2goKQkJCQkJXAotX19yZWd3cml0ZV9vdXQgOgkJCQkJCQlcCi0JaWYgKF9fbnJlZykgewkJCQkJCQlcCi0JCWlmIChJU19BQ0NFUFRJTkdfQ01EKF9fYXIpKQkJCQlcCi0JCQlfX2VyciA9IGFyLT5leGVjX2NtZChfX2FyLCBBUjkxNzBfQ01EX1dSRUcsCVwKLQkJCQkJICAgICA4ICogX19ucmVnLAkJXAotCQkJCQkgICAgICh1OCAqKSAmX19hci0+Y21kYnVmWzFdLAlcCi0JCQkJCSAgICAgMCwgTlVMTCk7CQkJXAotCQlfX25yZWcgPSAwOwkJCQkJCVwKLQl9Ci0KLSNkZWZpbmUgYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpCQkJCQlcCi0JX19lcnI7CQkJCQkJCQlcCi19IHdoaWxlICgwKTsKLQotI2VuZGlmIC8qIF9fQ01EX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvZWVwcm9tLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2VlcHJvbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzQ2NjM4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvZWVwcm9tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzkgKzAsMCBAQAotLyoKLSAqIEF0aGVyb3MgQVI5MTcwIGRyaXZlcgotICoKLSAqIEVFUFJPTSBsYXlvdXQKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgc2VlCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgotICoKLSAqIFRoaXMgZmlsZSBpbmNvcnBvcmF0ZXMgd29yayBjb3ZlcmVkIGJ5IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAotICogcGVybWlzc2lvbiBub3RpY2U6Ci0gKiAgICBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCi0gKgotICogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogICAgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLSAqICAgIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqICAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotICogICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLSAqICAgIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLSNpZm5kZWYgX19BUjkxNzBfRUVQUk9NX0gKLSNkZWZpbmUgX19BUjkxNzBfRUVQUk9NX0gKLQotI2RlZmluZSBBUjU0MTZfTUFYX0NIQUlOUwkJMgotI2RlZmluZSBBUjU0MTZfTU9EQUxfU1BVUlMJCTUKLQotc3RydWN0IGFyOTE3MF9lZXByb21fbW9kYWwgewotCV9fbGUzMglhbnRDdHJsQ2hhaW5bQVI1NDE2X01BWF9DSEFJTlNdOwotCV9fbGUzMglhbnRDdHJsQ29tbW9uOwotCXM4CWFudGVubmFHYWluQ2hbQVI1NDE2X01BWF9DSEFJTlNdOwotCXU4CXN3aXRjaFNldHRsaW5nOwotCXU4CXR4UnhBdHRlbkNoW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQl1OAlyeFR4TWFyZ2luQ2hbQVI1NDE2X01BWF9DSEFJTlNdOwotCXM4CWFkY0Rlc2lyZWRTaXplOwotCXM4CXBnYURlc2lyZWRTaXplOwotCXU4CXhsbmFHYWluQ2hbQVI1NDE2X01BWF9DSEFJTlNdOwotCXU4CXR4RW5kVG9YcGFPZmY7Ci0JdTgJdHhFbmRUb1J4T247Ci0JdTgJdHhGcmFtZVRvWHBhT247Ci0JdTgJdGhyZXNoNjI7Ci0JczgJbm9pc2VGbG9vclRocmVzaENoW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQl1OAl4cGRHYWluOwotCXU4CXhwZDsKLQlzOAlpcUNhbElDaFtBUjU0MTZfTUFYX0NIQUlOU107Ci0JczgJaXFDYWxRQ2hbQVI1NDE2X01BWF9DSEFJTlNdOwotCXU4CXBkR2Fpbk92ZXJsYXA7Ci0JdTgJb2I7Ci0JdTgJZGI7Ci0JdTgJeHBhQmlhc0x2bDsKLQl1OAlwd3JEZWNyZWFzZUZvcjJDaGFpbjsKLQl1OAlwd3JEZWNyZWFzZUZvcjNDaGFpbjsKLQl1OAl0eEZyYW1lVG9EYXRhU3RhcnQ7Ci0JdTgJdHhGcmFtZVRvUGFPbjsKLQl1OAlodDQwUG93ZXJJbmNGb3JQZGFkYzsKLQl1OAlic3dBdHRlbltBUjU0MTZfTUFYX0NIQUlOU107Ci0JdTgJYnN3TWFyZ2luW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQl1OAlzd1NldHRsZUh0NDA7Ci0JdTgJcmVzZXJ2ZWRbMjJdOwotCXN0cnVjdCBzcHVyX2NoYW5uZWwgewotCQlfX2xlMTYgc3B1ckNoYW47Ci0JCXU4CXNwdXJSYW5nZUxvdzsKLQkJdTgJc3B1clJhbmdlSGlnaDsKLQl9IF9fcGFja2VkIHNwdXJfY2hhbm5lbHNbQVI1NDE2X01PREFMX1NQVVJTXTsKLX0gX19wYWNrZWQ7Ci0KLSNkZWZpbmUgQVI1NDE2X05VTV9QRF9HQUlOUwkJNAotI2RlZmluZSBBUjU0MTZfUERfR0FJTl9JQ0VQVFMJCTUKLQotc3RydWN0IGFyOTE3MF9jYWxpYnJhdGlvbl9kYXRhX3Blcl9mcmVxIHsKLQl1OAlwd3JfcGRnW0FSNTQxNl9OVU1fUERfR0FJTlNdW0FSNTQxNl9QRF9HQUlOX0lDRVBUU107Ci0JdTgJdnBkX3BkZ1tBUjU0MTZfTlVNX1BEX0dBSU5TXVtBUjU0MTZfUERfR0FJTl9JQ0VQVFNdOwotfSBfX3BhY2tlZDsKLQotI2RlZmluZSBBUjU0MTZfTlVNXzVHX0NBTF9QSUVSUwkJOAotI2RlZmluZSBBUjU0MTZfTlVNXzJHX0NBTF9QSUVSUwkJNAotCi0jZGVmaW5lIEFSNTQxNl9OVU1fNUdfVEFSR0VUX1BXUlMJOAotI2RlZmluZSBBUjU0MTZfTlVNXzJHX0NDS19UQVJHRVRfUFdSUwkzCi0jZGVmaW5lIEFSNTQxNl9OVU1fMkdfT0ZETV9UQVJHRVRfUFdSUwk0Ci0jZGVmaW5lIEFSNTQxNl9NQVhfTlVNX1RHVF9QV1JTCQk4Ci0KLXN0cnVjdCBhcjkxNzBfY2FsaWJyYXRpb25fdGFyZ2V0X3Bvd2VyX2xlZ2FjeSB7Ci0JdTgJZnJlcTsKLQl1OAlwb3dlcls0XTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBhcjkxNzBfY2FsaWJyYXRpb25fdGFyZ2V0X3Bvd2VyX2h0IHsKLQl1OAlmcmVxOwotCXU4CXBvd2VyWzhdOwotfSBfX3BhY2tlZDsKLQotI2RlZmluZSBBUjU0MTZfTlVNX0NUTFMJCQkyNAotCi1zdHJ1Y3QgYXI5MTcwX2NhbGN0bF9lZGdlcyB7Ci0JdTgJY2hhbm5lbDsKLSNkZWZpbmUgQVI5MTcwX0NBTENUTF9FREdFX0ZMQUdTCTB4QzAKLQl1OAlwb3dlcl9mbGFnczsKLX0gX19wYWNrZWQ7Ci0KLSNkZWZpbmUgQVI1NDE2X05VTV9CQU5EX0VER0VTCQk4Ci0KLXN0cnVjdCBhcjkxNzBfY2FsY3RsX2RhdGEgewotCXN0cnVjdCBhcjkxNzBfY2FsY3RsX2VkZ2VzCi0JCWNvbnRyb2xfZWRnZXNbQVI1NDE2X01BWF9DSEFJTlNdW0FSNTQxNl9OVU1fQkFORF9FREdFU107Ci19IF9fcGFja2VkOwotCi0KLXN0cnVjdCBhcjkxNzBfZWVwcm9tIHsKLQlfX2xlMTYJbGVuZ3RoOwotCV9fbGUxNgljaGVja3N1bTsKLQlfX2xlMTYJdmVyc2lvbjsKLQl1OAlvcGVyYXRpbmdfZmxhZ3M7Ci0jZGVmaW5lIEFSOTE3MF9PUEZMQUdfNUdIWgkJMQotI2RlZmluZSBBUjkxNzBfT1BGTEFHXzJHSFoJCTIKLQl1OAltaXNjOwotCV9fbGUxNglyZWdfZG9tYWluWzJdOwotCXU4CW1hY19hZGRyZXNzWzZdOwotCXU4CXJ4X21hc2s7Ci0JdTgJdHhfbWFzazsKLQlfX2xlMTYJcmZfc2lsZW50OwotCV9fbGUxNglibHVldG9vdGhfb3B0aW9uczsKLQlfX2xlMTYJZGV2aWNlX2NhcGFiaWxpdGllczsKLQlfX2xlMzIJYnVpbGRfbnVtYmVyOwotCXU4CWRldmljZVR5cGU7Ci0JdTgJcmVzZXJ2ZWRbMzNdOwotCi0JdTgJY3VzdG9tZXJfZGF0YVs2NF07Ci0KLQlzdHJ1Y3QgYXI5MTcwX2VlcHJvbV9tb2RhbAotCQltb2RhbF9oZWFkZXJbMl07Ci0KLQl1OAljYWxfZnJlcV9waWVyXzVHW0FSNTQxNl9OVU1fNUdfQ0FMX1BJRVJTXTsKLQl1OAljYWxfZnJlcV9waWVyXzJHW0FSNTQxNl9OVU1fMkdfQ0FMX1BJRVJTXTsKLQotCXN0cnVjdCBhcjkxNzBfY2FsaWJyYXRpb25fZGF0YV9wZXJfZnJlcQotCQljYWxfcGllcl9kYXRhXzVHW0FSNTQxNl9NQVhfQ0hBSU5TXVtBUjU0MTZfTlVNXzVHX0NBTF9QSUVSU10sCi0JCWNhbF9waWVyX2RhdGFfMkdbQVI1NDE2X01BWF9DSEFJTlNdW0FSNTQxNl9OVU1fMkdfQ0FMX1BJRVJTXTsKLQotCS8qIHBvd2VyIGNhbGlicmF0aW9uIGRhdGEgKi8KLQlzdHJ1Y3QgYXI5MTcwX2NhbGlicmF0aW9uX3RhcmdldF9wb3dlcl9sZWdhY3kKLQkJY2FsX3RndF9wd3JfNUdbQVI1NDE2X05VTV81R19UQVJHRVRfUFdSU107Ci0Jc3RydWN0IGFyOTE3MF9jYWxpYnJhdGlvbl90YXJnZXRfcG93ZXJfaHQKLQkJY2FsX3RndF9wd3JfNUdfaHQyMFtBUjU0MTZfTlVNXzVHX1RBUkdFVF9QV1JTXSwKLQkJY2FsX3RndF9wd3JfNUdfaHQ0MFtBUjU0MTZfTlVNXzVHX1RBUkdFVF9QV1JTXTsKLQotCXN0cnVjdCBhcjkxNzBfY2FsaWJyYXRpb25fdGFyZ2V0X3Bvd2VyX2xlZ2FjeQotCQljYWxfdGd0X3B3cl8yR19jY2tbQVI1NDE2X05VTV8yR19DQ0tfVEFSR0VUX1BXUlNdLAotCQljYWxfdGd0X3B3cl8yR19vZmRtW0FSNTQxNl9OVU1fMkdfT0ZETV9UQVJHRVRfUFdSU107Ci0Jc3RydWN0IGFyOTE3MF9jYWxpYnJhdGlvbl90YXJnZXRfcG93ZXJfaHQKLQkJY2FsX3RndF9wd3JfMkdfaHQyMFtBUjU0MTZfTlVNXzJHX09GRE1fVEFSR0VUX1BXUlNdLAotCQljYWxfdGd0X3B3cl8yR19odDQwW0FSNTQxNl9OVU1fMkdfT0ZETV9UQVJHRVRfUFdSU107Ci0KLQkvKiBjb25mb3JtYW5jZSB0ZXN0aW5nIGxpbWl0cyAqLwotCXU4CWN0bF9pbmRleFtBUjU0MTZfTlVNX0NUTFNdOwotCXN0cnVjdCBhcjkxNzBfY2FsY3RsX2RhdGEKLQkJY3RsX2RhdGFbQVI1NDE2X05VTV9DVExTXTsKLQotCXU4CXBhZDsKLQlfX2xlMTYJc3Vic3lzdGVtX2lkOwotfSBfX3BhY2tlZDsKLQotI2VuZGlmIC8qIF9fQVI5MTcwX0VFUFJPTV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2h3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2h3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2ZjFmM2MuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9ody5oCisrKyAvZGV2L251bGwKQEAgLTEsNDMwICswLDAgQEAKLS8qCi0gKiBBdGhlcm9zIEFSOTE3MCBkcml2ZXIKLSAqCi0gKiBIYXJkd2FyZS1zcGVjaWZpYyBkZWZpbml0aW9ucwotICoKLSAqIENvcHlyaWdodCAyMDA4LCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCBzZWUKLSAqIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCi0gKgotICogVGhpcyBmaWxlIGluY29ycG9yYXRlcyB3b3JrIGNvdmVyZWQgYnkgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCi0gKiBwZXJtaXNzaW9uIG5vdGljZToKLSAqICAgIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KLSAqCi0gKiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiAgICBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgotICogICAgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogICAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiAgICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgotICogICAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotI2lmbmRlZiBfX0FSOTE3MF9IV19ICi0jZGVmaW5lIF9fQVI5MTcwX0hXX0gKLQotI2RlZmluZSBBUjkxNzBfTUFYX0NNRF9MRU4JNjQKLQotZW51bSBhcjkxNzBfY21kIHsKLQlBUjkxNzBfQ01EX1JSRUcJCT0gMHgwMCwKLQlBUjkxNzBfQ01EX1dSRUcJCT0gMHgwMSwKLQlBUjkxNzBfQ01EX1JNRU0JCT0gMHgwMiwKLQlBUjkxNzBfQ01EX1dNRU0JCT0gMHgwMywKLQlBUjkxNzBfQ01EX0JJVEFORAk9IDB4MDQsCi0JQVI5MTcwX0NNRF9CSVRPUgk9IDB4MDUsCi0JQVI5MTcwX0NNRF9FS0VZCQk9IDB4MjgsCi0JQVI5MTcwX0NNRF9ES0VZCQk9IDB4MjksCi0JQVI5MTcwX0NNRF9GUkVRVUVOQ1kJPSAweDMwLAotCUFSOTE3MF9DTURfUkZfSU5JVAk9IDB4MzEsCi0JQVI5MTcwX0NNRF9TWU5USAk9IDB4MzIsCi0JQVI5MTcwX0NNRF9GUkVRX1NUQVJUCT0gMHgzMywKLQlBUjkxNzBfQ01EX0VDSE8JCT0gMHg4MCwKLQlBUjkxNzBfQ01EX1RBTExZCT0gMHg4MSwKLQlBUjkxNzBfQ01EX1RBTExZX0FQRAk9IDB4ODIsCi0JQVI5MTcwX0NNRF9DT05GSUcJPSAweDgzLAotCUFSOTE3MF9DTURfUkVTRVQJPSAweDkwLAotCUFSOTE3MF9DTURfREtSRVNFVAk9IDB4OTEsCi0JQVI5MTcwX0NNRF9ES1RYX1NUQVRVUwk9IDB4OTIsCi0JQVI5MTcwX0NNRF9GREMJCT0gMHhBMCwKLQlBUjkxNzBfQ01EX1dSRUVQUk9NCT0gMHhCMCwKLQlBUjkxNzBfQ01EX1dGTEFTSAk9IDB4QjAsCi0JQVI5MTcwX0NNRF9GTEFTSF9FUkFTRQk9IDB4QjEsCi0JQVI5MTcwX0NNRF9GTEFTSF9QUk9HCT0gMHhCMiwKLQlBUjkxNzBfQ01EX0ZMQVNIX0NIS1NVTQk9IDB4QjMsCi0JQVI5MTcwX0NNRF9GTEFTSF9SRUFECT0gMHhCNCwKLQlBUjkxNzBfQ01EX0ZXX0RMX0lOSVQJPSAweEI1LAotCUFSOTE3MF9DTURfTUVNX1dSRUVQUk9NCT0gMHhCQiwKLX07Ci0KLS8qIGVuZHBvaW50cyAqLwotI2RlZmluZSBBUjkxNzBfRVBfVFgJCQkJMQotI2RlZmluZSBBUjkxNzBfRVBfUlgJCQkJMgotI2RlZmluZSBBUjkxNzBfRVBfSVJRCQkJCTMKLSNkZWZpbmUgQVI5MTcwX0VQX0NNRAkJCQk0Ci0KLSNkZWZpbmUgQVI5MTcwX0VFUFJPTV9TVEFSVAkJCTB4MTYwMAotCi0jZGVmaW5lIEFSOTE3MF9HUElPX1JFR19CQVNFCQkJMHgxZDAxMDAKLSNkZWZpbmUgQVI5MTcwX0dQSU9fUkVHX1BPUlRfVFlQRQkJQVI5MTcwX0dQSU9fUkVHX0JBU0UKLSNkZWZpbmUgQVI5MTcwX0dQSU9fUkVHX0RBVEEJCQkoQVI5MTcwX0dQSU9fUkVHX0JBU0UgKyA0KQotI2RlZmluZSBBUjkxNzBfTlVNX0xFRFMJCQkJMgotCi0KLSNkZWZpbmUgQVI5MTcwX1VTQl9SRUdfQkFTRQkJCTB4MWUxMDAwCi0jZGVmaW5lIEFSOTE3MF9VU0JfUkVHX0RNQV9DVEwJCQkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MTA4KQotI2RlZmluZQkJQVI5MTcwX0RNQV9DVExfRU5BQkxFX1RPX0RFVklDRQkJMHgxCi0jZGVmaW5lCQlBUjkxNzBfRE1BX0NUTF9FTkFCTEVfRlJPTV9ERVZJQ0UJMHgyCi0jZGVmaW5lCQlBUjkxNzBfRE1BX0NUTF9ISUdIX1NQRUVECQkweDQKLSNkZWZpbmUJCUFSOTE3MF9ETUFfQ1RMX1BBQ0tFVF9NT0RFCQkweDgKLQotI2RlZmluZSBBUjkxNzBfVVNCX1JFR19NQVhfQUdHX1VQTE9BRAkJKEFSOTE3MF9VU0JfUkVHX0JBU0UgKyAweDExMCkKLSNkZWZpbmUgQVI5MTcwX1VTQl9SRUdfVVBMT0FEX1RJTUVfQ1RMCQkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MTE0KQotCi0KLQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19CQVNFCQkJMHgxYzMwMDAKLQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19UU0ZfTAkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg1MTQpCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1RTRl9ICQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDUxOCkKLQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19BVElNX1dJTkRPVwkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDUxQykKLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQkNOX1BFUklPRAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDUyMCkKLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfUFJFVEJUVAkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg1MjQpCi0KLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfTUFDX0FERFJfTAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDYxMCkKLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfTUFDX0FERFJfSAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDYxNCkKLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQlNTSURfTAkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2MTgpCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0JTU0lEX0gJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjFjKQotCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0dST1VQX0hBU0hfVEJMX0wJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2MjQpCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0dST1VQX0hBU0hfVEJMX0gJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2MjgpCi0KLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfUlhfVElNRU9VVAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDYyQykKLQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19CQVNJQ19SQVRFCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjMwKQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19NQU5EQVRPUllfUkFURQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDYzNCkKLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfUlRTX0NUU19SQVRFCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjM4KQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19CQUNLT0ZGX1BST1RFQ1QJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2M2MpCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1JYX1RIUkVTSE9MRAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDY0MCkKLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfUlhfUEVfREVMQVkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2NEMpCi0KLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfRFlOQU1JQ19TSUZTX0FDSwkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDY1OCkKLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfU05JRkZFUgkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2NzQpCi0jZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19TTklGRkVSX0VOQUJMRV9QUk9NSVNDCUJJVCgwKQotI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfU05JRkZFUl9ERUZBVUxUUwkJMHgwMjAwMDAwMAotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19FTkNSWVBUSU9OCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4Njc4KQotI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRU5DUllQVElPTl9SWF9TT0ZUV0FSRQlCSVQoMykKLSNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0VOQ1JZUFRJT05fREVGQVVMVFMJMHg3MAotCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX01JU0NfNjgwCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDY4MCkKLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfVFhfVU5ERVJSVU4JCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2ODgpCi0KLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfRlJBTUVUWVBFX0ZJTFRFUgkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDY4YykKLSNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9BU1NPQ19SRVEJCUJJVCgwKQotI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0FTU09DX1JFU1AJCUJJVCgxKQotI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX1JFQVNTT0NfUkVRCQlCSVQoMikKLSNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9SRUFTU09DX1JFU1AJCUJJVCgzKQotI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX1BSQl9SRVEJCUJJVCg0KQotI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX1BSQl9SRVNQCQlCSVQoNSkKLSNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9CSVQ2CQkJQklUKDYpCi0jZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfQklUNwkJCUJJVCg3KQotI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0JFQUNPTgkJQklUKDgpCi0jZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfQVRJTQkJCUJJVCg5KQotI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0RFQVNTT0MJCUJJVCgxMCkKLSNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9BVVRICQkJQklUKDExKQotI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0RFQVVUSAkJQklUKDEyKQotI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0JJVDEzCQlCSVQoMTMpCi0jZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfQklUMTQJCUJJVCgxNCkKLSNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9CSVQxNQkJQklUKDE1KQotI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0JBUgkJCUJJVCgyNCkKLSNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9CQQkJCUJJVCgyNSkKLSNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9QU1BPTEwJCUJJVCgyNikKLSNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9SVFMJCQlCSVQoMjcpCi0jZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfQ1RTCQkJQklUKDI4KQotI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0FDSwkJCUJJVCgyOSkKLSNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9DRkUJCQlCSVQoMzApCi0jZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfQ0ZFX0FDSwkJQklUKDMxKQotI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0RFRkFVTFRTCQkweDA3MDBmZmZmCi0jZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfTU9OSVRPUgkJMHhmZDAwZmZmZgotCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1JYX1RPVEFMCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDZBMCkKLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfUlhfQ1JDMzIJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NkE0KQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19SWF9DUkMxNgkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2QTgpCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1JYX0VSUl9ERUNSWVBUSU9OX1VOSQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NkFDKQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19SWF9PVkVSUlVOCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NkIwKQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19SWF9FUlJfREVDUllQVElPTl9NVUwJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDZCQykKLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfVFhfUkVUUlkJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NkNDKQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19UWF9UT1RBTAkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2RjQpCi0KLQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19BQ0tfRVhURU5TSU9OCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjkwKQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19FSUZTX0FORF9TSUZTCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4Njk4KQotCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1NMT1RfVElNRQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDZGMCkKLQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19QT1dFUk1BTkFHRU1FTlQJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg3MDApCi0jZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19QT1dFUk1HVF9JQlNTCQkweGUwCi0jZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19QT1dFUk1HVF9BUAkJMHhhMQotI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfUE9XRVJNR1RfU1RBCQkweDIKLSNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX1BPV0VSTUdUX0FQX1dEUwkJMHgzCi0jZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19QT1dFUk1HVF9ERUZBVUxUUwkoMHhmIDw8IDI0KQotCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1JPTExfQ0FMTF9UQkxfTAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDcwNCkKLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfUk9MTF9DQUxMX1RCTF9ICQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NzA4KQotCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FDMF9DVwkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhCMDApCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FDMV9DVwkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhCMDQpCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FDMl9DVwkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhCMDgpCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FDM19DVwkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhCMEMpCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FDNF9DVwkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhCMTApCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FDMV9BQzBfQUlGUwkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweEIxNCkKLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQUMzX0FDMl9BSUZTCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4QjE4KQotCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1JFVFJZX01BWAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweEIyOCkKLQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19GQ1NfU0VMRUNUCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4QkIwKQotI2RlZmluZQkJQVI5MTcwX01BQ19GQ1NfU1dGQ1MJCTB4MQotI2RlZmluZQkJQVI5MTcwX01BQ19GQ1NfRklGT19QUk9UCTB4NAotCi0KLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfVFhPUF9OT1RfRU5PVUdIX0lORAkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4QjMwKQotCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FDMV9BQzBfVFhPUAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweEI0NCkKLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQUMzX0FDMl9UWE9QCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4QjQ4KQotCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FNUERVX0ZBQ1RPUgkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweEI5QykKLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQU1QRFVfREVOU0lUWQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweEJBMCkKLQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19BQ0tfVEFCTEUJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhDMDApCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FNUERVX1JYX1RIUkVTSAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweEM1MCkKLQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19UWFJYX01QSQkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhEN0MpCi0jZGVmaW5lCQlBUjkxNzBfTUFDX1RYUlhfTVBJX1RYX01QSV9NQVNLCTB4MDAwMDAwMGYKLSNkZWZpbmUJCUFSOTE3MF9NQUNfVFhSWF9NUElfVFhfVE9fTUFTSwkweDAwMDBmZmYwCi0jZGVmaW5lCQlBUjkxNzBfTUFDX1RYUlhfTVBJX1JYX01QSV9NQVNLCTB4MDAwZjAwMDAKLSNkZWZpbmUJCUFSOTE3MF9NQUNfVFhSWF9NUElfUlhfVE9fTUFTSwkweGZmZjAwMDAwCi0KLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQkNOX0FERFIJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4RDg0KQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19CQ05fTEVOR1RICQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4RDg4KQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19CQ05fUExDUAkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhEOTApCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0JDTl9DVFJMCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweEQ5NCkKLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQkNOX0hUMQkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhEQTApCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0JDTl9IVDIJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4REE0KQotCi0KLSNkZWZpbmUgQVI5MTcwX1BXUl9SRUdfQkFTRQkJCTB4MUQ0MDAwCi0KLSNkZWZpbmUgQVI5MTcwX1BXUl9SRUdfQ0xPQ0tfU0VMCQkoQVI5MTcwX1BXUl9SRUdfQkFTRSArIDB4MDA4KQotI2RlZmluZQkJQVI5MTcwX1BXUl9DTEtfQUhCXzQwTUhaCTAKLSNkZWZpbmUJCUFSOTE3MF9QV1JfQ0xLX0FIQl8yMF8yMk1IWgkxCi0jZGVmaW5lCQlBUjkxNzBfUFdSX0NMS19BSEJfNDBfNDRNSFoJMgotI2RlZmluZQkJQVI5MTcwX1BXUl9DTEtfQUhCXzgwXzg4TUhaCTMKLSNkZWZpbmUJCUFSOTE3MF9QV1JfQ0xLX0RBQ18xNjBfSU5WX0RMWQkweDcwCi0KLQotLyogcHV0IGJlYWNvbiBoZXJlIGluIG1lbW9yeSAqLwotI2RlZmluZSBBUjkxNzBfQkVBQ09OX0JVRkZFUl9BRERSRVNTCQkweDExNzkwMAotCi0KLXN0cnVjdCBhcjkxNzBfdHhfY29udHJvbCB7Ci0JX19sZTE2IGxlbmd0aDsKLQlfX2xlMTYgbWFjX2NvbnRyb2w7Ci0JX19sZTMyIHBoeV9jb250cm9sOwotCXU4IGZyYW1lX2RhdGFbMF07Ci19IF9fcGFja2VkOwotCi0vKiB0aGVzZSBhcmUgZWl0aGVyLW9yICovCi0jZGVmaW5lIEFSOTE3MF9UWF9NQUNfUFJPVF9SVFMJCQkweDAwMDEKLSNkZWZpbmUgQVI5MTcwX1RYX01BQ19QUk9UX0NUUwkJCTB4MDAwMgotCi0jZGVmaW5lIEFSOTE3MF9UWF9NQUNfTk9fQUNLCQkJMHgwMDA0Ci0vKiBpZiB1bnNldCwgTUFDIHdpbGwgb25seSBkbyBTSUZTIHNwYWNlIGJlZm9yZSBmcmFtZSAqLwotI2RlZmluZSBBUjkxNzBfVFhfTUFDX0JBQ0tPRkYJCQkweDAwMDgKLSNkZWZpbmUgQVI5MTcwX1RYX01BQ19CVVJTVAkJCTB4MDAxMAotI2RlZmluZSBBUjkxNzBfVFhfTUFDX0FHR1IJCQkweDAwMjAKLQotLyogZW5jcnlwdGlvbiBpcyBhIHR3by1iaXQgZmllbGQgKi8KLSNkZWZpbmUgQVI5MTcwX1RYX01BQ19FTkNSX05PTkUJCQkweDAwMDAKLSNkZWZpbmUgQVI5MTcwX1RYX01BQ19FTkNSX1JDNAkJCTB4MDA0MAotI2RlZmluZSBBUjkxNzBfVFhfTUFDX0VOQ1JfQ0VOQwkJCTB4MDA4MAotI2RlZmluZSBBUjkxNzBfVFhfTUFDX0VOQ1JfQUVTCQkJMHgwMGMwCi0KLSNkZWZpbmUgQVI5MTcwX1RYX01BQ19NTUlDCQkJMHgwMTAwCi0jZGVmaW5lIEFSOTE3MF9UWF9NQUNfSFdfRFVSQVRJT04JCTB4MDIwMAotI2RlZmluZSBBUjkxNzBfVFhfTUFDX1FPU19TSElGVAkJCTEwCi0jZGVmaW5lIEFSOTE3MF9UWF9NQUNfUU9TX01BU0sJCQkoMyA8PCBBUjkxNzBfVFhfTUFDX1FPU19TSElGVCkKLSNkZWZpbmUgQVI5MTcwX1RYX01BQ19BR0dSX1FPU19CSVQxCQkweDA0MDAKLSNkZWZpbmUgQVI5MTcwX1RYX01BQ19BR0dSX1FPU19CSVQyCQkweDA4MDAKLSNkZWZpbmUgQVI5MTcwX1RYX01BQ19ESVNBQkxFX1RYT1AJCTB4MTAwMAotI2RlZmluZSBBUjkxNzBfVFhfTUFDX1RYT1BfUklGUwkJCTB4MjAwMAotI2RlZmluZSBBUjkxNzBfVFhfTUFDX0lNTV9BTVBEVQkJCTB4NDAwMAotI2RlZmluZSBBUjkxNzBfVFhfTUFDX1JBVEVfUFJPQkUJCTB4ODAwMAotCi0vKiBlaXRoZXItb3IgKi8KLSNkZWZpbmUgQVI5MTcwX1RYX1BIWV9NT0RfTUFTSwkJCTB4MDAwMDAwMDMKLSNkZWZpbmUgQVI5MTcwX1RYX1BIWV9NT0RfQ0NLCQkJMHgwMDAwMDAwMAotI2RlZmluZSBBUjkxNzBfVFhfUEhZX01PRF9PRkRNCQkJMHgwMDAwMDAwMQotI2RlZmluZSBBUjkxNzBfVFhfUEhZX01PRF9IVAkJCTB4MDAwMDAwMDIKLQotLyogZGVwZW5kcyBvbiBtb2R1bGF0aW9uICovCi0jZGVmaW5lIEFSOTE3MF9UWF9QSFlfU0hPUlRfUFJFQU1CTEUJCTB4MDAwMDAwMDQKLSNkZWZpbmUgQVI5MTcwX1RYX1BIWV9HUkVFTkZJRUxECQkweDAwMDAwMDA0Ci0KLSNkZWZpbmUgQVI5MTcwX1RYX1BIWV9CV19TSElGVAkJCTMKLSNkZWZpbmUgQVI5MTcwX1RYX1BIWV9CV19NQVNLCQkJKDMgPDwgQVI5MTcwX1RYX1BIWV9CV19TSElGVCkKLSNkZWZpbmUgQVI5MTcwX1RYX1BIWV9CV18yME1IWgkJCTAKLSNkZWZpbmUgQVI5MTcwX1RYX1BIWV9CV180ME1IWgkJCTIKLSNkZWZpbmUgQVI5MTcwX1RYX1BIWV9CV180ME1IWl9EVVAJCTMKLQotI2RlZmluZSBBUjkxNzBfVFhfUEhZX1RYX0hFQVZZX0NMSVBfU0hJRlQJNgotI2RlZmluZSBBUjkxNzBfVFhfUEhZX1RYX0hFQVZZX0NMSVBfTUFTSwkoNyA8PCBBUjkxNzBfVFhfUEhZX1RYX0hFQVZZX0NMSVBfU0hJRlQpCi0KLSNkZWZpbmUgQVI5MTcwX1RYX1BIWV9UWF9QV1JfU0hJRlQJCTkKLSNkZWZpbmUgQVI5MTcwX1RYX1BIWV9UWF9QV1JfTUFTSwkJKDB4M2YgPDwgQVI5MTcwX1RYX1BIWV9UWF9QV1JfU0hJRlQpCi0KLS8qIG5vdCBwYXJ0IG9mIHRoZSBody1zcGVjICovCi0jZGVmaW5lIEFSOTE3MF9UWF9QSFlfUU9TX1NISUZUCQkJMjUKLSNkZWZpbmUgQVI5MTcwX1RYX1BIWV9RT1NfTUFTSwkJCSgzIDw8IEFSOTE3MF9UWF9QSFlfUU9TX1NISUZUKQotCi0jZGVmaW5lIEFSOTE3MF9UWF9QSFlfVFhDSEFJTl9TSElGVAkJMTUKLSNkZWZpbmUgQVI5MTcwX1RYX1BIWV9UWENIQUlOX01BU0sJCSg3IDw8IEFSOTE3MF9UWF9QSFlfVFhDSEFJTl9TSElGVCkKLSNkZWZpbmUgQVI5MTcwX1RYX1BIWV9UWENIQUlOXzEJCQkxCi0vKiB1c2UgZm9yIGNjaywgb2ZkbSA2LzkvMTIvMTgvMjQgYW5kIEhUIGlmIGNhcGFibGUgKi8KLSNkZWZpbmUgQVI5MTcwX1RYX1BIWV9UWENIQUlOXzIJCQk1Ci0KLSNkZWZpbmUgQVI5MTcwX1RYX1BIWV9NQ1NfU0hJRlQJCQkxOAotI2RlZmluZSBBUjkxNzBfVFhfUEhZX01DU19NQVNLCQkJKDB4N2YgPDwgQVI5MTcwX1RYX1BIWV9NQ1NfU0hJRlQpCi0KLSNkZWZpbmUgQVI5MTcwX1RYX1BIWV9TSE9SVF9HSQkJCTB4ODAwMDAwMDAKLQotI2RlZmluZSBBUjU0MTZfTUFYX1JBVEVfUE9XRVIgICAgICAgICAgICAgICAgICAgNjMKLQotc3RydWN0IGFyOTE3MF9yeF9oZWFkIHsKLQl1OCBwbGNwWzEyXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBhcjkxNzBfcnhfcGh5c3RhdHVzIHsKLQl1bmlvbiB7Ci0JCXN0cnVjdCB7Ci0JCQl1OCByc3NpX2FudDAsIHJzc2lfYW50MSwgcnNzaV9hbnQyLAotCQkJICAgcnNzaV9hbnQweCwgcnNzaV9hbnQxeCwgcnNzaV9hbnQyeCwKLQkJCSAgIHJzc2lfY29tYmluZWQ7Ci0JCX0gX19wYWNrZWQ7Ci0JCXU4IHJzc2lbN107Ci0JfSBfX3BhY2tlZDsKLQotCXU4IGV2bV9zdHJlYW0wWzZdLCBldm1fc3RyZWFtMVs2XTsKLQl1OCBwaHlfZXJyOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGFyOTE3MF9yeF9tYWNzdGF0dXMgewotCXU4IFNBaWR4LCBEQWlkeDsKLQl1OCBlcnJvcjsKLQl1OCBzdGF0dXM7Ci19IF9fcGFja2VkOwotCi0jZGVmaW5lIEFSOTE3MF9FTkNfQUxHX05PTkUJCQkweDAKLSNkZWZpbmUgQVI5MTcwX0VOQ19BTEdfV0VQNjQJCQkweDEKLSNkZWZpbmUgQVI5MTcwX0VOQ19BTEdfVEtJUAkJCTB4MgotI2RlZmluZSBBUjkxNzBfRU5DX0FMR19BRVNDQ01QCQkJMHg0Ci0jZGVmaW5lIEFSOTE3MF9FTkNfQUxHX1dFUDEyOAkJCTB4NQotI2RlZmluZSBBUjkxNzBfRU5DX0FMR19XRVAyNTYJCQkweDYKLSNkZWZpbmUgQVI5MTcwX0VOQ19BTEdfQ0VOQwkJCTB4NwotCi0jZGVmaW5lIEFSOTE3MF9SWF9FTkNfU09GVFdBUkUJCQkweDgKLQotc3RhdGljIGlubGluZSB1OCBhcjkxNzBfZ2V0X2RlY3J5cHRfdHlwZShzdHJ1Y3QgYXI5MTcwX3J4X21hY3N0YXR1cyAqdCkKLXsKLQlyZXR1cm4gKHQtPlNBaWR4ICYgMHhjMCkgPj4gNCB8Ci0JICAgICAgICh0LT5EQWlkeCAmIDB4YzApID4+IDY7Ci19Ci0KLSNkZWZpbmUgQVI5MTcwX1JYX1NUQVRVU19NT0RVTEFUSU9OX01BU0sJMHgwMwotI2RlZmluZSBBUjkxNzBfUlhfU1RBVFVTX01PRFVMQVRJT05fQ0NLCQkweDAwCi0jZGVmaW5lIEFSOTE3MF9SWF9TVEFUVVNfTU9EVUxBVElPTl9PRkRNCTB4MDEKLSNkZWZpbmUgQVI5MTcwX1JYX1NUQVRVU19NT0RVTEFUSU9OX0hUCQkweDAyCi0jZGVmaW5lIEFSOTE3MF9SWF9TVEFUVVNfTU9EVUxBVElPTl9EVVBPRkRNCTB4MDMKLQotLyogZGVwZW5kcyBvbiBtb2R1bGF0aW9uICovCi0jZGVmaW5lIEFSOTE3MF9SWF9TVEFUVVNfU0hPUlRfUFJFQU1CTEUJCTB4MDgKLSNkZWZpbmUgQVI5MTcwX1JYX1NUQVRVU19HUkVFTkZJRUxECQkweDA4Ci0KLSNkZWZpbmUgQVI5MTcwX1JYX1NUQVRVU19NUERVX01BU0sJCTB4MzAKLSNkZWZpbmUgQVI5MTcwX1JYX1NUQVRVU19NUERVX1NJTkdMRQkJMHgwMAotI2RlZmluZSBBUjkxNzBfUlhfU1RBVFVTX01QRFVfRklSU1QJCTB4MjAKLSNkZWZpbmUgQVI5MTcwX1JYX1NUQVRVU19NUERVX01JRERMRQkJMHgzMAotI2RlZmluZSBBUjkxNzBfUlhfU1RBVFVTX01QRFVfTEFTVAkJMHgxMAotCi0jZGVmaW5lIEFSOTE3MF9SWF9FUlJPUl9SWFRPCQkJMHgwMQotI2RlZmluZSBBUjkxNzBfUlhfRVJST1JfT1ZFUlJVTgkJCTB4MDIKLSNkZWZpbmUgQVI5MTcwX1JYX0VSUk9SX0RFQ1JZUFQJCQkweDA0Ci0jZGVmaW5lIEFSOTE3MF9SWF9FUlJPUl9GQ1MJCQkweDA4Ci0jZGVmaW5lIEFSOTE3MF9SWF9FUlJPUl9XUk9OR19SQQkJMHgxMAotI2RlZmluZSBBUjkxNzBfUlhfRVJST1JfUExDUAkJCTB4MjAKLSNkZWZpbmUgQVI5MTcwX1JYX0VSUk9SX01NSUMJCQkweDQwCi0jZGVmaW5lIEFSOTE3MF9SWF9FUlJPUl9GQVRBTAkJCTB4ODAKLQotc3RydWN0IGFyOTE3MF9jbWRfdHhfc3RhdHVzIHsKLQl1OCBkc3RbRVRIX0FMRU5dOwotCV9fbGUzMiByYXRlOwotCV9fbGUxNiBzdGF0dXM7Ci19IF9fcGFja2VkOwotCi0jZGVmaW5lIEFSOTE3MF9UWF9TVEFUVVNfQ09NUExFVEUJCTB4MDAKLSNkZWZpbmUgQVI5MTcwX1RYX1NUQVRVU19SRVRSWQkJCTB4MDEKLSNkZWZpbmUgQVI5MTcwX1RYX1NUQVRVU19GQUlMRUQJCQkweDAyCi0KLXN0cnVjdCBhcjkxNzBfY21kX2JhX2ZhaWxlZF9jb3VudCB7Ci0JX19sZTE2IGZhaWxlZDsKLQlfX2xlMTYgcmF0ZTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBhcjkxNzBfY21kX3Jlc3BvbnNlIHsKLQl1OCBmbGFnOwotCXU4IHR5cGU7Ci0JX19sZTE2IHBhZGRpbmc7Ci0KLQl1bmlvbiB7Ci0JCXN0cnVjdCBhcjkxNzBfY21kX3R4X3N0YXR1cwkJdHhfc3RhdHVzOwotCQlzdHJ1Y3QgYXI5MTcwX2NtZF9iYV9mYWlsZWRfY291bnQJYmFfZmFpbF9jbnQ7Ci0JCXU4IGRhdGFbMF07Ci0JfTsKLX0gX19wYWNrZWQ7Ci0KLS8qIFFvUyAqLwotCi0vKiBtYWM4MDIxMSBxdWV1ZSB0byBIVy9GVyBtYXAgKi8KLXN0YXRpYyBjb25zdCB1OCBhcjkxNzBfcW9zX2h3bWFwWzRdID0geyAzLCAyLCAwLCAxIH07Ci0KLS8qIEhXL0ZXIHF1ZXVlIHRvIG1hYzgwMjExIG1hcCAqLwotc3RhdGljIGNvbnN0IHU4IGFyOTE3MF9xb3NfbWFjODAyMTFtYXBbNF0gPSB7IDIsIDMsIDEsIDAgfTsKLQotZW51bSBhcjkxNzBfdHhxIHsKLQlBUjkxNzBfVFhRX0JFLAotCUFSOTE3MF9UWFFfQkssCi0JQVI5MTcwX1RYUV9WSSwKLQlBUjkxNzBfVFhRX1ZPLAotCi0JX19BUjkxNzBfTlVNX1RYUSwKLX07Ci0KLSNkZWZpbmUgQVI5MTcwX1RYUV9ERVBUSAkzMgotI2RlZmluZSBBUjkxNzBfVFhfTUFYX1BFTkRJTkcJMTI4Ci0jZGVmaW5lIEFSOTE3MF9SWF9TVFJFQU1fTUFYX1NJWkUgNjU1MzUKLQotI2VuZGlmIC8qIF9fQVI5MTcwX0hXX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvbGVkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2xlZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzJkOTAwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvbGVkLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODEgKzAsMCBAQAotLyoKLSAqIEF0aGVyb3MgQVI5MTcwIGRyaXZlcgotICoKLSAqIExFRCBoYW5kbGluZwotICoKLSAqIENvcHlyaWdodCAyMDA4LCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCBzZWUKLSAqIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCi0gKgotICogVGhpcyBmaWxlIGluY29ycG9yYXRlcyB3b3JrIGNvdmVyZWQgYnkgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCi0gKiBwZXJtaXNzaW9uIG5vdGljZToKLSAqICAgIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KLSAqCi0gKiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiAgICBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgotICogICAgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogICAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiAgICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgotICogICAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0jaW5jbHVkZSAiYXI5MTcwLmgiCi0jaW5jbHVkZSAiY21kLmgiCi0KLWludCBhcjkxNzBfc2V0X2xlZHNfc3RhdGUoc3RydWN0IGFyOTE3MCAqYXIsIHUzMiBsZWRfc3RhdGUpCi17Ci0JcmV0dXJuIGFyOTE3MF93cml0ZV9yZWcoYXIsIEFSOTE3MF9HUElPX1JFR19EQVRBLCBsZWRfc3RhdGUpOwotfQotCi1pbnQgYXI5MTcwX2luaXRfbGVkcyhzdHJ1Y3QgYXI5MTcwICphcikKLXsKLQlpbnQgZXJyOwotCi0JLyogZGlzYWJsZSBMRURzICovCi0JLyogR1BJTyBbMC8xIG1vZGU6IG91dHB1dCwgMi8zOiBpbnB1dF0gKi8KLQllcnIgPSBhcjkxNzBfd3JpdGVfcmVnKGFyLCBBUjkxNzBfR1BJT19SRUdfUE9SVF9UWVBFLCAzKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCS8qIEdQSU8gMC8xIHZhbHVlOiBvZmYgKi8KLQllcnIgPSBhcjkxNzBfc2V0X2xlZHNfc3RhdGUoYXIsIDApOwotCi1vdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotI2lmZGVmIENPTkZJR19BUjkxNzBfTEVEUwotc3RhdGljIHZvaWQgYXI5MTcwX3VwZGF0ZV9sZWRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgYXI5MTcwICphciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXI5MTcwLCBsZWRfd29yay53b3JrKTsKLQlpbnQgaSwgdG1wLCBibGlua19kZWxheSA9IDEwMDA7Ci0JdTMyIGxlZF92YWwgPSAwOwotCWJvb2wgcmVydW4gPSBmYWxzZTsKLQotCWlmICh1bmxpa2VseSghSVNfQUNDRVBUSU5HX0NNRChhcikpKQotCQlyZXR1cm4gOwotCi0JbXV0ZXhfbG9jaygmYXItPm11dGV4KTsKLQlmb3IgKGkgPSAwOyBpIDwgQVI5MTcwX05VTV9MRURTOyBpKyspCi0JCWlmIChhci0+bGVkc1tpXS5yZWdpc3RlcmVkICYmIGFyLT5sZWRzW2ldLnRvZ2dsZWQpIHsKLQkJCWxlZF92YWwgfD0gMSA8PCBpOwotCi0JCQl0bXAgPSA3MCArIDIwMCAvIChhci0+bGVkc1tpXS50b2dnbGVkKTsKLQkJCWlmICh0bXAgPCBibGlua19kZWxheSkKLQkJCQlibGlua19kZWxheSA9IHRtcDsKLQotCQkJaWYgKGFyLT5sZWRzW2ldLnRvZ2dsZWQgPiAxKQotCQkJCWFyLT5sZWRzW2ldLnRvZ2dsZWQgPSAwOwotCi0JCQlyZXJ1biA9IHRydWU7Ci0JCX0KLQotCWFyOTE3MF9zZXRfbGVkc19zdGF0ZShhciwgbGVkX3ZhbCk7Ci0JbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOwotCi0JaWYgKCFyZXJ1bikKLQkJcmV0dXJuOwotCi0JaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhhci0+aHcsCi0JCQkJICAgICAmYXItPmxlZF93b3JrLAotCQkJCSAgICAgbXNlY3NfdG9famlmZmllcyhibGlua19kZWxheSkpOwotfQotCi1zdGF0aWMgdm9pZCBhcjkxNzBfbGVkX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZCwKLQkJCQkgICAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCi17Ci0Jc3RydWN0IGFyOTE3MF9sZWQgKmFybCA9IGNvbnRhaW5lcl9vZihsZWQsIHN0cnVjdCBhcjkxNzBfbGVkLCBsKTsKLQlzdHJ1Y3QgYXI5MTcwICphciA9IGFybC0+YXI7Ci0KLQlpZiAodW5saWtlbHkoIWFybC0+cmVnaXN0ZXJlZCkpCi0JCXJldHVybiA7Ci0KLQlpZiAoYXJsLT5sYXN0X3N0YXRlICE9ICEhYnJpZ2h0bmVzcykgewotCQlhcmwtPnRvZ2dsZWQrKzsKLQkJYXJsLT5sYXN0X3N0YXRlID0gISFicmlnaHRuZXNzOwotCX0KLQotCWlmIChsaWtlbHkoSVNfQUNDRVBUSU5HX0NNRChhcikgJiYgYXJsLT50b2dnbGVkKSkKLQkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhhci0+aHcsICZhci0+bGVkX3dvcmssIEhaLzEwKTsKLX0KLQotc3RhdGljIGludCBhcjkxNzBfcmVnaXN0ZXJfbGVkKHN0cnVjdCBhcjkxNzAgKmFyLCBpbnQgaSwgY2hhciAqbmFtZSwKLQkJCSAgICAgICBjaGFyICp0cmlnZ2VyKQotewotCWludCBlcnI7Ci0KLQlzbnByaW50Zihhci0+bGVkc1tpXS5uYW1lLCBzaXplb2YoYXItPmxlZHNbaV0ubmFtZSksCi0JCSAiYXI5MTcwLSVzOjolcyIsIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIG5hbWUpOwotCi0JYXItPmxlZHNbaV0uYXIgPSBhcjsKLQlhci0+bGVkc1tpXS5sLm5hbWUgPSBhci0+bGVkc1tpXS5uYW1lOwotCWFyLT5sZWRzW2ldLmwuYnJpZ2h0bmVzc19zZXQgPSBhcjkxNzBfbGVkX2JyaWdodG5lc3Nfc2V0OwotCWFyLT5sZWRzW2ldLmwuYnJpZ2h0bmVzcyA9IDA7Ci0JYXItPmxlZHNbaV0ubC5kZWZhdWx0X3RyaWdnZXIgPSB0cmlnZ2VyOwotCi0JZXJyID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKHdpcGh5X2Rldihhci0+aHctPndpcGh5KSwKLQkJCQkgICAgJmFyLT5sZWRzW2ldLmwpOwotCWlmIChlcnIpCi0JCXdpcGh5X2Vycihhci0+aHctPndpcGh5LCAiZmFpbGVkIHRvIHJlZ2lzdGVyICVzIExFRCAoJWQpLlxuIiwKLQkJCSAgYXItPmxlZHNbaV0ubmFtZSwgZXJyKTsKLQllbHNlCi0JCWFyLT5sZWRzW2ldLnJlZ2lzdGVyZWQgPSB0cnVlOwotCi0JcmV0dXJuIGVycjsKLX0KLQotdm9pZCBhcjkxNzBfdW5yZWdpc3Rlcl9sZWRzKHN0cnVjdCBhcjkxNzAgKmFyKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSOTE3MF9OVU1fTEVEUzsgaSsrKQotCQlpZiAoYXItPmxlZHNbaV0ucmVnaXN0ZXJlZCkgewotCQkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmFyLT5sZWRzW2ldLmwpOwotCQkJYXItPmxlZHNbaV0ucmVnaXN0ZXJlZCA9IGZhbHNlOwotCQkJYXItPmxlZHNbaV0udG9nZ2xlZCA9IDA7Ci0JCX0KLQotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYXItPmxlZF93b3JrKTsKLX0KLQotaW50IGFyOTE3MF9yZWdpc3Rlcl9sZWRzKHN0cnVjdCBhcjkxNzAgKmFyKQotewotCWludCBlcnI7Ci0KLQlJTklUX0RFTEFZRURfV09SSygmYXItPmxlZF93b3JrLCBhcjkxNzBfdXBkYXRlX2xlZHMpOwotCi0JZXJyID0gYXI5MTcwX3JlZ2lzdGVyX2xlZChhciwgMCwgInR4IiwKLQkJCQkgIGllZWU4MDIxMV9nZXRfdHhfbGVkX25hbWUoYXItPmh3KSk7Ci0JaWYgKGVycikKLQkJZ290byBmYWlsOwotCi0JZXJyID0gYXI5MTcwX3JlZ2lzdGVyX2xlZChhciwgMSwgImFzc29jIiwKLQkJCQkgaWVlZTgwMjExX2dldF9hc3NvY19sZWRfbmFtZShhci0+aHcpKTsKLQlpZiAoZXJyKQotCQlnb3RvIGZhaWw7Ci0KLQlyZXR1cm4gMDsKLQotZmFpbDoKLQlhcjkxNzBfdW5yZWdpc3Rlcl9sZWRzKGFyKTsKLQlyZXR1cm4gZXJyOwotfQotCi0jZW5kaWYgLyogQ09ORklHX0FSOTE3MF9MRURTICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9tYWMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU3ZTg2MS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL21hYy5jCisrKyAvZGV2L251bGwKQEAgLTEsNTE5ICswLDAgQEAKLS8qCi0gKiBBdGhlcm9zIEFSOTE3MCBkcml2ZXIKLSAqCi0gKiBNQUMgcHJvZ3JhbW1pbmcKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgc2VlCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgotICoKLSAqIFRoaXMgZmlsZSBpbmNvcnBvcmF0ZXMgd29yayBjb3ZlcmVkIGJ5IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAotICogcGVybWlzc2lvbiBub3RpY2U6Ci0gKiAgICBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCi0gKgotICogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogICAgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLSAqICAgIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqICAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotICogICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLSAqICAgIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLQotI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KLQotI2luY2x1ZGUgImFyOTE3MC5oIgotI2luY2x1ZGUgImNtZC5oIgotCi1pbnQgYXI5MTcwX3NldF9keW5fc2lmc19hY2soc3RydWN0IGFyOTE3MCAqYXIpCi17Ci0JdTMyIHZhbDsKLQotCWlmIChjb25mX2lzX2h0NDAoJmFyLT5ody0+Y29uZikpCi0JCXZhbCA9IDB4MDEwYTsKLQllbHNlIHsKLQkJaWYgKGFyLT5ody0+Y29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopCi0JCQl2YWwgPSAweDEwNTsKLQkJZWxzZQotCQkJdmFsID0gMHgxMDQ7Ci0JfQotCi0JcmV0dXJuIGFyOTE3MF93cml0ZV9yZWcoYXIsIEFSOTE3MF9NQUNfUkVHX0RZTkFNSUNfU0lGU19BQ0ssIHZhbCk7Ci19Ci0KLWludCBhcjkxNzBfc2V0X3Nsb3RfdGltZShzdHJ1Y3QgYXI5MTcwICphcikKLXsKLQl1MzIgc2xvdHRpbWUgPSAyMDsKLQotCWlmICghYXItPnZpZikKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoKGFyLT5ody0+Y29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopIHx8Ci0JICAgIGFyLT52aWYtPmJzc19jb25mLnVzZV9zaG9ydF9zbG90KQotCQlzbG90dGltZSA9IDk7Ci0KLQlyZXR1cm4gYXI5MTcwX3dyaXRlX3JlZyhhciwgQVI5MTcwX01BQ19SRUdfU0xPVF9USU1FLCBzbG90dGltZSA8PCAxMCk7Ci19Ci0KLWludCBhcjkxNzBfc2V0X2Jhc2ljX3JhdGVzKHN0cnVjdCBhcjkxNzAgKmFyKQotewotCXU4IGNjaywgb2ZkbTsKLQotCWlmICghYXItPnZpZikKLQkJcmV0dXJuIDA7Ci0KLQlvZmRtID0gYXItPnZpZi0+YnNzX2NvbmYuYmFzaWNfcmF0ZXMgPj4gNDsKLQotCS8qIEZJWE1FOiBpcyBzdGlsbCBuZWNlc3Nhcnk/ICovCi0JaWYgKGFyLT5ody0+Y29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCi0JCWNjayA9IDA7Ci0JZWxzZQotCQljY2sgPSBhci0+dmlmLT5ic3NfY29uZi5iYXNpY19yYXRlcyAmIDB4ZjsKLQotCXJldHVybiBhcjkxNzBfd3JpdGVfcmVnKGFyLCBBUjkxNzBfTUFDX1JFR19CQVNJQ19SQVRFLAotCQkJCW9mZG0gPDwgOCB8IGNjayk7Ci19Ci0KLWludCBhcjkxNzBfc2V0X3FvcyhzdHJ1Y3QgYXI5MTcwICphcikKLXsKLQlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOwotCi0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0FDMF9DVywgYXItPmVkY2ZbMF0uY3dfbWluIHwKLQkJCShhci0+ZWRjZlswXS5jd19tYXggPDwgMTYpKTsKLQlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQUMxX0NXLCBhci0+ZWRjZlsxXS5jd19taW4gfAotCQkJKGFyLT5lZGNmWzFdLmN3X21heCA8PCAxNikpOwotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19BQzJfQ1csIGFyLT5lZGNmWzJdLmN3X21pbiB8Ci0JCQkoYXItPmVkY2ZbMl0uY3dfbWF4IDw8IDE2KSk7Ci0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0FDM19DVywgYXItPmVkY2ZbM10uY3dfbWluIHwKLQkJCShhci0+ZWRjZlszXS5jd19tYXggPDwgMTYpKTsKLQlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQUM0X0NXLCBhci0+ZWRjZls0XS5jd19taW4gfAotCQkJKGFyLT5lZGNmWzRdLmN3X21heCA8PCAxNikpOwotCi0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0FDMV9BQzBfQUlGUywKLQkJCSgoYXItPmVkY2ZbMF0uYWlmcyAqIDkgKyAxMCkpIHwKLQkJCSgoYXItPmVkY2ZbMV0uYWlmcyAqIDkgKyAxMCkgPDwgMTIpIHwKLQkJCSgoYXItPmVkY2ZbMl0uYWlmcyAqIDkgKyAxMCkgPDwgMjQpKTsKLQlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQUMzX0FDMl9BSUZTLAotCQkJKChhci0+ZWRjZlsyXS5haWZzICogOSArIDEwKSA+PiA4KSB8Ci0JCQkoKGFyLT5lZGNmWzNdLmFpZnMgKiA5ICsgMTApIDw8IDQpIHwKLQkJCSgoYXItPmVkY2ZbNF0uYWlmcyAqIDkgKyAxMCkgPDwgMTYpKTsKLQotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19BQzFfQUMwX1RYT1AsCi0JCQlhci0+ZWRjZlswXS50eG9wIHwgYXItPmVkY2ZbMV0udHhvcCA8PCAxNik7Ci0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0FDM19BQzJfVFhPUCwKLQkJCWFyLT5lZGNmWzJdLnR4b3AgfCBhci0+ZWRjZlszXS50eG9wIDw8IDE2KTsKLQotCWFyOTE3MF9yZWd3cml0ZV9maW5pc2goKTsKLQotCXJldHVybiBhcjkxNzBfcmVnd3JpdGVfcmVzdWx0KCk7Ci19Ci0KLXN0YXRpYyBpbnQgYXI5MTcwX3NldF9hbXBkdV9kZW5zaXR5KHN0cnVjdCBhcjkxNzAgKmFyLCB1OCBtcGR1ZGVuc2l0eSkKLXsKLQl1MzIgdmFsOwotCi0JLyogZG9uJ3QgYWxsb3cgQU1QRFUgZGVuc2l0eSA+IDh1cyAqLwotCWlmIChtcGR1ZGVuc2l0eSA+IDYpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogV2F0Y2ggb3V0ISBPdHVzIHVzZXMgc2xpZ2h0bHkgZGlmZmVyZW50IGRlbnNpdHkgdmFsdWVzLiAqLwotCXZhbCA9IDB4MTQwYTAwIHwgKG1wZHVkZW5zaXR5ID8gKG1wZHVkZW5zaXR5ICsgMSkgOiAwKTsKLQotCWFyOTE3MF9yZWd3cml0ZV9iZWdpbihhcik7Ci0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0FNUERVX0RFTlNJVFksIHZhbCk7Ci0JYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOwotCi0JcmV0dXJuIGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKTsKLX0KLQotaW50IGFyOTE3MF9pbml0X21hYyhzdHJ1Y3QgYXI5MTcwICphcikKLXsKLQlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOwotCi0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0FDS19FWFRFTlNJT04sIDB4NDApOwotCi0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX1JFVFJZX01BWCwgMCk7Ci0KLQkvKiBlbmFibGUgTU1JQyAqLwotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19TTklGRkVSLAotCQkJQVI5MTcwX01BQ19SRUdfU05JRkZFUl9ERUZBVUxUUyk7Ci0KLQlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfUlhfVEhSRVNIT0xELCAweGMxZjgwKTsKLQotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19SWF9QRV9ERUxBWSwgMHg3MCk7Ci0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0VJRlNfQU5EX1NJRlMsIDB4YTE0NDAwMCk7Ci0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX1NMT1RfVElNRSwgOSA8PCAxMCk7Ci0KLQkvKiBDRi1FTkQgbW9kZSAqLwotCWFyOTE3MF9yZWd3cml0ZSgweDFjM2IyYywgMHgxOTAwMDAwMCk7Ci0KLQkvKiBOQVYgcHJvdGVjdHMgQUNLIG9ubHkgKGluIFRYT1ApICovCi0JYXI5MTcwX3JlZ3dyaXRlKDB4MWMzYjM4LCAweDIwMSk7Ci0KLQkvKiBTZXQgQmVhY29uIFBIWSBDVFJMJ3MgVFBDIHRvIDB4NywgVEExPTEgKi8KLQkvKiBPVFVTIHNldCBBTSB0byAweDEgKi8KLQlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQkNOX0hUMSwgMHg4MDAwMTcwKTsKLQotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19CQUNLT0ZGX1BST1RFQ1QsIDB4MTA1KTsKLQotCS8qIEFHRyB0ZXN0IGNvZGUqLwotCS8qIEFnZ3JlZ2F0aW9uIE1BWCBudW1iZXIgYW5kIHRpbWVvdXQgKi8KLQlhcjkxNzBfcmVnd3JpdGUoMHgxYzNiOWMsIDB4MTAwMDBhKTsKLQotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19GUkFNRVRZUEVfRklMVEVSLAotCQkJQVI5MTcwX01BQ19SRUdfRlRGX0RFRkFVTFRTKTsKLQotCS8qIEVuYWJsZSBkZWFnZ3JlZ2F0b3IsIHJlc3BvbnNlIGluIHNuaWZmZXIgbW9kZSAqLwotCWFyOTE3MF9yZWd3cml0ZSgweDFjM2M0MCwgMHgxIHwgMTw8MzApOwotCi0JLyogcmF0ZSBzZXRzICovCi0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0JBU0lDX1JBVEUsIDB4MTUwZik7Ci0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX01BTkRBVE9SWV9SQVRFLCAweDE1MGYpOwotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19SVFNfQ1RTX1JBVEUsIDB4MTBiMDFiYik7Ci0KLQkvKiBNSU1PIHJlc3BvbnNlIGNvbnRyb2wgKi8KLQlhcjkxNzBfcmVnd3JpdGUoMHgxYzM2OTQsIDB4NDAwM0MxRSk7LyogYml0IDI2fjI4ICBvdHVzLUFNICovCi0KLQkvKiBzd2l0Y2ggTUFDIHRvIE9UVVMgaW50ZXJmYWNlICovCi0JYXI5MTcwX3JlZ3dyaXRlKDB4MWMzNjAwLCAweDMpOwotCi0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0FNUERVX1JYX1RIUkVTSCwgMHhmZmZmKTsKLQotCS8qIHNldCBQSFkgcmVnaXN0ZXIgcmVhZCB0aW1lb3V0ICg/PykgKi8KLQlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfTUlTQ182ODAsIDB4ZjAwMDA4KTsKLQotCS8qIERpc2FibGUgUnggVGltZU91dCwgd29ya2Fyb3VuZCBmb3IgQkIuICovCi0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX1JYX1RJTUVPVVQsIDB4MCk7Ci0KLQkvKiBTZXQgQ1BVIGNsb2NrIGZyZXF1ZW5jeSB0byA4OC84ME1IeiAqLwotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfUFdSX1JFR19DTE9DS19TRUwsCi0JCQlBUjkxNzBfUFdSX0NMS19BSEJfODBfODhNSFogfAotCQkJQVI5MTcwX1BXUl9DTEtfREFDXzE2MF9JTlZfRExZKTsKLQotCS8qIFNldCBXTEFOIERNQSBpbnRlcnJ1cHQgbW9kZTogZ2VuZXJhdGUgaW50IHBlciBwYWNrZXQgKi8KLQlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfVFhSWF9NUEksIDB4MTEwMDExKTsKLQotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19GQ1NfU0VMRUNULAotCQkJQVI5MTcwX01BQ19GQ1NfRklGT19QUk9UKTsKLQotCS8qIERpc2FibGVzIHRoZSBDRl9FTkQgZnJhbWUsIHVuZG9jdW1lbnRlZCByZWdpc3RlciAqLwotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19UWE9QX05PVF9FTk9VR0hfSU5ELAotCQkJMHgxNDFFMEY0OCk7Ci0KLQlhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCk7Ci0KLQlyZXR1cm4gYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpOwotfQotCi1zdGF0aWMgaW50IGFyOTE3MF9zZXRfbWFjX3JlZyhzdHJ1Y3QgYXI5MTcwICphciwgY29uc3QgdTMyIHJlZywgY29uc3QgdTggKm1hYykKLXsKLQlzdGF0aWMgY29uc3QgdTggemVyb1tFVEhfQUxFTl0gPSB7IDAgfTsKLQotCWlmICghbWFjKQotCQltYWMgPSB6ZXJvOwotCi0JYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKLQotCWFyOTE3MF9yZWd3cml0ZShyZWcsIGdldF91bmFsaWduZWRfbGUzMihtYWMpKTsKLQlhcjkxNzBfcmVnd3JpdGUocmVnICsgNCwgZ2V0X3VuYWxpZ25lZF9sZTE2KG1hYyArIDQpKTsKLQotCWFyOTE3MF9yZWd3cml0ZV9maW5pc2goKTsKLQotCXJldHVybiBhcjkxNzBfcmVnd3JpdGVfcmVzdWx0KCk7Ci19Ci0KLWludCBhcjkxNzBfdXBkYXRlX211bHRpY2FzdChzdHJ1Y3QgYXI5MTcwICphciwgY29uc3QgdTY0IG1jX2hhc2gpCi17Ci0JaW50IGVycjsKLQotCWFyOTE3MF9yZWd3cml0ZV9iZWdpbihhcik7Ci0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0dST1VQX0hBU0hfVEJMX0gsIG1jX2hhc2ggPj4gMzIpOwotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19HUk9VUF9IQVNIX1RCTF9MLCBtY19oYXNoKTsKLQlhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCk7Ci0JZXJyID0gYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlhci0+Y3VyX21jX2hhc2ggPSBtY19oYXNoOwotCXJldHVybiAwOwotfQotCi1pbnQgYXI5MTcwX3VwZGF0ZV9mcmFtZV9maWx0ZXIoc3RydWN0IGFyOTE3MCAqYXIsIGNvbnN0IHUzMiBmaWx0ZXIpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IGFyOTE3MF93cml0ZV9yZWcoYXIsIEFSOTE3MF9NQUNfUkVHX0ZSQU1FVFlQRV9GSUxURVIsIGZpbHRlcik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWFyLT5jdXJfZmlsdGVyID0gZmlsdGVyOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFyOTE3MF9zZXRfcHJvbWlzY291b3VzKHN0cnVjdCBhcjkxNzAgKmFyKQotewotCXUzMiBlbmNyX21vZGUsIHNuaWZmZXI7Ci0JaW50IGVycjsKLQotCWVyciA9IGFyOTE3MF9yZWFkX3JlZyhhciwgQVI5MTcwX01BQ19SRUdfU05JRkZFUiwgJnNuaWZmZXIpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBhcjkxNzBfcmVhZF9yZWcoYXIsIEFSOTE3MF9NQUNfUkVHX0VOQ1JZUFRJT04sICZlbmNyX21vZGUpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlpZiAoYXItPnNuaWZmZXJfZW5hYmxlZCkgewotCQlzbmlmZmVyIHw9IEFSOTE3MF9NQUNfUkVHX1NOSUZGRVJfRU5BQkxFX1BST01JU0M7Ci0KLQkJLyoKLQkJICogUnggZGVjcnlwdGlvbiB3b3JrcyBpbiBwbGFjZS4KLQkJICoKLQkJICogSWYgd2UgZG9uJ3QgZGlzYWJsZSBpdCwgdGhlIGhhcmR3YXJlIHdpbGwgcmVuZGVyIGFsbAotCQkgKiBlbmNyeXB0ZWQgZnJhbWVzIHdoaWNoIGFyZSBlbmNyeXB0ZWQgd2l0aCBhbiB1bmtub3duCi0JCSAqIGtleSB1c2VsZXNzLgotCQkgKi8KLQotCQllbmNyX21vZGUgfD0gQVI5MTcwX01BQ19SRUdfRU5DUllQVElPTl9SWF9TT0ZUV0FSRTsKLQkJYXItPnNuaWZmZXJfZW5hYmxlZCA9IHRydWU7Ci0JfSBlbHNlIHsKLQkJc25pZmZlciAmPSB+QVI5MTcwX01BQ19SRUdfU05JRkZFUl9FTkFCTEVfUFJPTUlTQzsKLQotCQlpZiAoYXItPnJ4X3NvZnR3YXJlX2RlY3J5cHRpb24pCi0JCQllbmNyX21vZGUgfD0gQVI5MTcwX01BQ19SRUdfRU5DUllQVElPTl9SWF9TT0ZUV0FSRTsKLQkJZWxzZQotCQkJZW5jcl9tb2RlICY9IH5BUjkxNzBfTUFDX1JFR19FTkNSWVBUSU9OX1JYX1NPRlRXQVJFOwotCX0KLQotCWFyOTE3MF9yZWd3cml0ZV9iZWdpbihhcik7Ci0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0VOQ1JZUFRJT04sIGVuY3JfbW9kZSk7Ci0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX1NOSUZGRVIsIHNuaWZmZXIpOwotCWFyOTE3MF9yZWd3cml0ZV9maW5pc2goKTsKLQotCXJldHVybiBhcjkxNzBfcmVnd3JpdGVfcmVzdWx0KCk7Ci19Ci0KLWludCBhcjkxNzBfc2V0X29wZXJhdGluZ19tb2RlKHN0cnVjdCBhcjkxNzAgKmFyKQotewotCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSAmYXItPmNvbW1vbjsKLQl1MzIgcG1fbW9kZSA9IEFSOTE3MF9NQUNfUkVHX1BPV0VSTUdUX0RFRkFVTFRTOwotCXU4ICptYWNfYWRkciwgKmJzc2lkOwotCWludCBlcnI7Ci0KLQlpZiAoYXItPnZpZikgewotCQltYWNfYWRkciA9IGNvbW1vbi0+bWFjYWRkcjsKLQkJYnNzaWQgPSBjb21tb24tPmN1cmJzc2lkOwotCi0JCXN3aXRjaCAoYXItPnZpZi0+dHlwZSkgewotCQljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6Ci0JCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6Ci0JCQlwbV9tb2RlIHw9IEFSOTE3MF9NQUNfUkVHX1BPV0VSTUdUX0lCU1M7Ci0JCQlicmVhazsKLQkJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKLQkJCXBtX21vZGUgfD0gQVI5MTcwX01BQ19SRUdfUE9XRVJNR1RfQVA7Ci0JCQlicmVhazsKLQkJY2FzZSBOTDgwMjExX0lGVFlQRV9XRFM6Ci0JCQlwbV9tb2RlIHw9IEFSOTE3MF9NQUNfUkVHX1BPV0VSTUdUX0FQX1dEUzsKLQkJCWJyZWFrOwotCQljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6Ci0JCQlhci0+c25pZmZlcl9lbmFibGVkID0gdHJ1ZTsKLQkJCWFyLT5yeF9zb2Z0d2FyZV9kZWNyeXB0aW9uID0gdHJ1ZTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcG1fbW9kZSB8PSBBUjkxNzBfTUFDX1JFR19QT1dFUk1HVF9TVEE7Ci0JCQlicmVhazsKLQkJfQotCX0gZWxzZSB7Ci0JCW1hY19hZGRyID0gTlVMTDsKLQkJYnNzaWQgPSBOVUxMOwotCX0KLQotCWVyciA9IGFyOTE3MF9zZXRfbWFjX3JlZyhhciwgQVI5MTcwX01BQ19SRUdfTUFDX0FERFJfTCwgbWFjX2FkZHIpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBhcjkxNzBfc2V0X21hY19yZWcoYXIsIEFSOTE3MF9NQUNfUkVHX0JTU0lEX0wsIGJzc2lkKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gYXI5MTcwX3NldF9wcm9taXNjb3VvdXMoYXIpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQkvKiBzZXQgQU1QRFUgZGVuc2l0eSB0byA4dXMuICovCi0JZXJyID0gYXI5MTcwX3NldF9hbXBkdV9kZW5zaXR5KGFyLCA2KTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKLQotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19QT1dFUk1BTkFHRU1FTlQsIHBtX21vZGUpOwotCWFyOTE3MF9yZWd3cml0ZV9maW5pc2goKTsKLQotCXJldHVybiBhcjkxNzBfcmVnd3JpdGVfcmVzdWx0KCk7Ci19Ci0KLWludCBhcjkxNzBfc2V0X2h3cmV0cnlfbGltaXQoc3RydWN0IGFyOTE3MCAqYXIsIHVuc2lnbmVkIGludCBtYXhfcmV0cnkpCi17Ci0JdTMyIHRtcCA9IG1pbl90KHUzMiwgMHgzMzMzMywgbWF4X3JldHJ5ICogMHgxMTExMSk7Ci0KLQlyZXR1cm4gYXI5MTcwX3dyaXRlX3JlZyhhciwgQVI5MTcwX01BQ19SRUdfUkVUUllfTUFYLCB0bXApOwotfQotCi1pbnQgYXI5MTcwX3NldF9iZWFjb25fdGltZXJzKHN0cnVjdCBhcjkxNzAgKmFyKQotewotCXUzMiB2ID0gMDsKLQl1MzIgcHJldGJ0dCA9IDA7Ci0KLQlpZiAoYXItPnZpZikgewotCQl2IHw9IGFyLT52aWYtPmJzc19jb25mLmJlYWNvbl9pbnQ7Ci0KLQkJaWYgKGFyLT5lbmFibGVfYmVhY29uKSB7Ci0JCQlzd2l0Y2ggKGFyLT52aWYtPnR5cGUpIHsKLQkJCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKLQkJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6Ci0JCQkJdiB8PSBCSVQoMjUpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKLQkJCQl2IHw9IEJJVCgyNCk7Ci0JCQkJcHJldGJ0dCA9IChhci0+dmlmLT5ic3NfY29uZi5iZWFjb25faW50IC0gNikgPDwKLQkJCQkJICAxNjsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCXYgfD0gYXItPnZpZi0+YnNzX2NvbmYuZHRpbV9wZXJpb2QgPDwgMTY7Ci0JfQotCi0JYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKLQlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfUFJFVEJUVCwgcHJldGJ0dCk7Ci0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0JDTl9QRVJJT0QsIHYpOwotCWFyOTE3MF9yZWd3cml0ZV9maW5pc2goKTsKLQlyZXR1cm4gYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpOwotfQotCi1pbnQgYXI5MTcwX3VwZGF0ZV9iZWFjb24oc3RydWN0IGFyOTE3MCAqYXIpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlfX2xlMzIgKmRhdGEsICpvbGQgPSBOVUxMOwotCXUzMiB3b3JkOwotCWludCBpOwotCi0Jc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoYXItPmh3LCBhci0+dmlmKTsKLQlpZiAoIXNrYikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlkYXRhID0gKF9fbGUzMiAqKXNrYi0+ZGF0YTsKLQlpZiAoYXItPmJlYWNvbikKLQkJb2xkID0gKF9fbGUzMiAqKWFyLT5iZWFjb24tPmRhdGE7Ci0KLQlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOwotCWZvciAoaSA9IDA7IGkgPCBESVZfUk9VTkRfVVAoc2tiLT5sZW4sIDQpOyBpKyspIHsKLQkJLyoKLQkJICogWFhYOiBUaGlzIGFjY2Vzc2VzIGJleW9uZCBza2IgZGF0YSBmb3IgdXAKLQkJICoJdG8gdGhlIGxhc3QgMyBieXRlcyEhCi0JCSAqLwotCi0JCWlmIChvbGQgJiYgKGRhdGFbaV0gPT0gb2xkW2ldKSkKLQkJCWNvbnRpbnVlOwotCi0JCXdvcmQgPSBsZTMyX3RvX2NwdShkYXRhW2ldKTsKLQkJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9CRUFDT05fQlVGRkVSX0FERFJFU1MgKyA0ICogaSwgd29yZCk7Ci0JfQotCi0JLyogWFhYOiB1c2Ugc2tiLT5jYiBpbmZvICovCi0JaWYgKGFyLT5ody0+Y29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopCi0JCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19CQ05fUExDUCwKLQkJCQkoKHNrYi0+bGVuICsgNCkgPDwgKDMgKyAxNikpICsgMHgwNDAwKTsKLQllbHNlCi0JCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19CQ05fUExDUCwKLQkJCQkoKHNrYi0+bGVuICsgNCkgPDwgMTYpICsgMHgwMDFiKTsKLQotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19CQ05fTEVOR1RILCBza2ItPmxlbiArIDQpOwotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19CQ05fQUREUiwgQVI5MTcwX0JFQUNPTl9CVUZGRVJfQUREUkVTUyk7Ci0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0JDTl9DVFJMLCAxKTsKLQotCWFyOTE3MF9yZWd3cml0ZV9maW5pc2goKTsKLQotCWRldl9rZnJlZV9za2IoYXItPmJlYWNvbik7Ci0JYXItPmJlYWNvbiA9IHNrYjsKLQotCXJldHVybiBhcjkxNzBfcmVnd3JpdGVfcmVzdWx0KCk7Ci19Ci0KLXZvaWQgYXI5MTcwX25ld19iZWFjb24oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBhcjkxNzAgKmFyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhcjkxNzAsCi0JCQkJCSBiZWFjb25fd29yayk7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCWlmICh1bmxpa2VseSghSVNfU1RBUlRFRChhcikpKQotCQlyZXR1cm4gOwotCi0JbXV0ZXhfbG9jaygmYXItPm11dGV4KTsKLQotCWlmICghYXItPnZpZikKLQkJZ290byBvdXQ7Ci0KLQlhcjkxNzBfdXBkYXRlX2JlYWNvbihhcik7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0Jd2hpbGUgKChza2IgPSBpZWVlODAyMTFfZ2V0X2J1ZmZlcmVkX2JjKGFyLT5odywgYXItPnZpZikpKQotCQlhcjkxNzBfb3BfdHgoYXItPmh3LCBza2IpOwotCi0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLSBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOwotfQotCi1pbnQgYXI5MTcwX3VwbG9hZF9rZXkoc3RydWN0IGFyOTE3MCAqYXIsIHU4IGlkLCBjb25zdCB1OCAqbWFjLCB1OCBrdHlwZSwKLQkJICAgICAgdTgga2V5aWR4LCB1OCAqa2V5ZGF0YSwgaW50IGtleWxlbikKLXsKLQlfX2xlMzIgdmFsc1s3XTsKLQlzdGF0aWMgY29uc3QgdTggYmNhc3RbRVRIX0FMRU5dID0KLQkJeyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH07Ci0JdTggZHVtbXk7Ci0KLQltYWMgPSBtYWMgPyA6IGJjYXN0OwotCi0JdmFsc1swXSA9IGNwdV90b19sZTMyKChrZXlpZHggPDwgMTYpICsgaWQpOwotCXZhbHNbMV0gPSBjcHVfdG9fbGUzMihtYWNbMV0gPDwgMjQgfCBtYWNbMF0gPDwgMTYgfCBrdHlwZSk7Ci0JdmFsc1syXSA9IGNwdV90b19sZTMyKG1hY1s1XSA8PCAyNCB8IG1hY1s0XSA8PCAxNiB8Ci0JCQkgICAgICBtYWNbM10gPDwgOCB8IG1hY1syXSk7Ci0JbWVtc2V0KCZ2YWxzWzNdLCAwLCAxNik7Ci0JaWYgKGtleWRhdGEpCi0JCW1lbWNweSgmdmFsc1szXSwga2V5ZGF0YSwga2V5bGVuKTsKLQotCXJldHVybiBhci0+ZXhlY19jbWQoYXIsIEFSOTE3MF9DTURfRUtFWSwKLQkJCSAgICBzaXplb2YodmFscyksICh1OCAqKXZhbHMsCi0JCQkgICAgMSwgJmR1bW15KTsKLX0KLQotaW50IGFyOTE3MF9kaXNhYmxlX2tleShzdHJ1Y3QgYXI5MTcwICphciwgdTggaWQpCi17Ci0JX19sZTMyIHZhbCA9IGNwdV90b19sZTMyKGlkKTsKLQl1OCBkdW1teTsKLQotCXJldHVybiBhci0+ZXhlY19jbWQoYXIsIEFSOTE3MF9DTURfRUtFWSwKLQkJCSAgICBzaXplb2YodmFsKSwgKHU4ICopJnZhbCwKLQkJCSAgICAxLCAmZHVtbXkpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL21haW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NjMmVkYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL21haW4uYworKysgL2Rldi9udWxsCkBAIC0xLDIxOTAgKzAsMCBAQAotLyoKLSAqIEF0aGVyb3MgQVI5MTcwIGRyaXZlcgotICoKLSAqIG1hYzgwMjExIGludGVyYWN0aW9uIGNvZGUKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KLSAqIENvcHlyaWdodCAyMDA5LCBDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUB3ZWIuZGU+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHNlZQotICogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KLSAqCi0gKiBUaGlzIGZpbGUgaW5jb3Jwb3JhdGVzIHdvcmsgY292ZXJlZCBieSB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQKLSAqIHBlcm1pc3Npb24gbm90aWNlOgotICogICAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSW5jLgotICoKLSAqICAgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogICAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSAqCi0gKiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSAqICAgIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICAgIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0gKiAgICBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0gKiAgICBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLSAqICAgIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0gKiAgICBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+Ci0jaW5jbHVkZSAiYXI5MTcwLmgiCi0jaW5jbHVkZSAiaHcuaCIKLSNpbmNsdWRlICJjbWQuaCIKLQotc3RhdGljIGludCBtb2RwYXJhbV9ub2h3Y3J5cHQ7Ci1tb2R1bGVfcGFyYW1fbmFtZWQobm9od2NyeXB0LCBtb2RwYXJhbV9ub2h3Y3J5cHQsIGJvb2wsIFNfSVJVR08pOwotTU9EVUxFX1BBUk1fREVTQyhub2h3Y3J5cHQsICJEaXNhYmxlIGhhcmR3YXJlIGVuY3J5cHRpb24uIik7Ci0KLSNkZWZpbmUgUkFURShfYml0cmF0ZSwgX2h3X3JhdGUsIF90eHBpZHgsIF9mbGFncykgewlcCi0JLmJpdHJhdGUJPSAoX2JpdHJhdGUpLAkJCVwKLQkuZmxhZ3MJCT0gKF9mbGFncyksCQkJXAotCS5od192YWx1ZQk9IChfaHdfcmF0ZSkgfCAoX3R4cGlkeCkgPDwgNCwJXAotfQotCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yYXRlIF9fYXI5MTcwX3JhdGV0YWJsZVtdID0gewotCVJBVEUoMTAsIDAsIDAsIDApLAotCVJBVEUoMjAsIDEsIDEsIElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFKSwKLQlSQVRFKDU1LCAyLCAyLCBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSksCi0JUkFURSgxMTAsIDMsIDMsIElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFKSwKLQlSQVRFKDYwLCAweGIsIDAsIDApLAotCVJBVEUoOTAsIDB4ZiwgMCwgMCksCi0JUkFURSgxMjAsIDB4YSwgMCwgMCksCi0JUkFURSgxODAsIDB4ZSwgMCwgMCksCi0JUkFURSgyNDAsIDB4OSwgMCwgMCksCi0JUkFURSgzNjAsIDB4ZCwgMSwgMCksCi0JUkFURSg0ODAsIDB4OCwgMiwgMCksCi0JUkFURSg1NDAsIDB4YywgMywgMCksCi19OwotI3VuZGVmIFJBVEUKLQotI2RlZmluZSBhcjkxNzBfZ19yYXRldGFibGUJKF9fYXI5MTcwX3JhdGV0YWJsZSArIDApCi0jZGVmaW5lIGFyOTE3MF9nX3JhdGV0YWJsZV9zaXplCTEyCi0jZGVmaW5lIGFyOTE3MF9hX3JhdGV0YWJsZQkoX19hcjkxNzBfcmF0ZXRhYmxlICsgNCkKLSNkZWZpbmUgYXI5MTcwX2FfcmF0ZXRhYmxlX3NpemUJOAotCi0vKgotICogTkI6IFRoZSBod192YWx1ZSBpcyB1c2VkIGFzIGFuIGluZGV4IGludG8gdGhlIGFyOTE3MF9waHlfZnJlcV9wYXJhbXMKLSAqICAgICBhcnJheSBpbiBwaHkuYyBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gZG8gZnJlcXVlbmN5IGxvb2t1cHMhCi0gKi8KLSNkZWZpbmUgQ0hBTihfZnJlcSwgX2lkeCkgewkJXAotCS5jZW50ZXJfZnJlcQk9IChfZnJlcSksCVwKLQkuaHdfdmFsdWUJPSAoX2lkeCksCVwKLQkubWF4X3Bvd2VyCT0gMTgsIC8qIFhYWCAqLwlcCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgYXI5MTcwXzJnaHpfY2hhbnRhYmxlW10gPSB7Ci0JQ0hBTigyNDEyLCAgMCksCi0JQ0hBTigyNDE3LCAgMSksCi0JQ0hBTigyNDIyLCAgMiksCi0JQ0hBTigyNDI3LCAgMyksCi0JQ0hBTigyNDMyLCAgNCksCi0JQ0hBTigyNDM3LCAgNSksCi0JQ0hBTigyNDQyLCAgNiksCi0JQ0hBTigyNDQ3LCAgNyksCi0JQ0hBTigyNDUyLCAgOCksCi0JQ0hBTigyNDU3LCAgOSksCi0JQ0hBTigyNDYyLCAxMCksCi0JQ0hBTigyNDY3LCAxMSksCi0JQ0hBTigyNDcyLCAxMiksCi0JQ0hBTigyNDg0LCAxMyksCi19OwotCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGFyOTE3MF81Z2h6X2NoYW50YWJsZVtdID0gewotCUNIQU4oNDkyMCwgMTQpLAotCUNIQU4oNDk0MCwgMTUpLAotCUNIQU4oNDk2MCwgMTYpLAotCUNIQU4oNDk4MCwgMTcpLAotCUNIQU4oNTA0MCwgMTgpLAotCUNIQU4oNTA2MCwgMTkpLAotCUNIQU4oNTA4MCwgMjApLAotCUNIQU4oNTE4MCwgMjEpLAotCUNIQU4oNTIwMCwgMjIpLAotCUNIQU4oNTIyMCwgMjMpLAotCUNIQU4oNTI0MCwgMjQpLAotCUNIQU4oNTI2MCwgMjUpLAotCUNIQU4oNTI4MCwgMjYpLAotCUNIQU4oNTMwMCwgMjcpLAotCUNIQU4oNTMyMCwgMjgpLAotCUNIQU4oNTUwMCwgMjkpLAotCUNIQU4oNTUyMCwgMzApLAotCUNIQU4oNTU0MCwgMzEpLAotCUNIQU4oNTU2MCwgMzIpLAotCUNIQU4oNTU4MCwgMzMpLAotCUNIQU4oNTYwMCwgMzQpLAotCUNIQU4oNTYyMCwgMzUpLAotCUNIQU4oNTY0MCwgMzYpLAotCUNIQU4oNTY2MCwgMzcpLAotCUNIQU4oNTY4MCwgMzgpLAotCUNIQU4oNTcwMCwgMzkpLAotCUNIQU4oNTc0NSwgNDApLAotCUNIQU4oNTc2NSwgNDEpLAotCUNIQU4oNTc4NSwgNDIpLAotCUNIQU4oNTgwNSwgNDMpLAotCUNIQU4oNTgyNSwgNDQpLAotCUNIQU4oNTE3MCwgNDUpLAotCUNIQU4oNTE5MCwgNDYpLAotCUNIQU4oNTIxMCwgNDcpLAotCUNIQU4oNTIzMCwgNDgpLAotfTsKLSN1bmRlZiBDSEFOCi0KLSNkZWZpbmUgQVI5MTcwX0hUX0NBUAkJCQkJCQlcCi17CQkJCQkJCQkJXAotCS5odF9zdXBwb3J0ZWQJPSB0cnVlLAkJCQkJCVwKLQkuY2FwCQk9IElFRUU4MDIxMV9IVF9DQVBfTUFYX0FNU0RVIHwJCQlcCi0JCQkgIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwIHwJCVwKLQkJCSAgSUVFRTgwMjExX0hUX0NBUF9TR0lfNDAgfAkJCVwKLQkJCSAgSUVFRTgwMjExX0hUX0NBUF9HUk5fRkxEIHwJCQlcCi0JCQkgIElFRUU4MDIxMV9IVF9DQVBfRFNTU0NDSzQwIHwJCQlcCi0JCQkgIElFRUU4MDIxMV9IVF9DQVBfU01fUFMsCQkJXAotCS5hbXBkdV9mYWN0b3IJPSAzLAkJCQkJCVwKLQkuYW1wZHVfZGVuc2l0eQk9IDYsCQkJCQkJXAotCS5tY3MJCT0gewkJCQkJCVwKLQkJLnJ4X21hc2sgPSB7IDB4ZmYsIDB4ZmYsIDAsIDAsIDB4MSwgMCwgMCwgMCwgMCwgMCwgfSwJXAotCQkucnhfaGlnaGVzdCA9IGNwdV90b19sZTE2KDMwMCksCQkJCVwKLQkJLnR4X3BhcmFtcyA9IElFRUU4MDIxMV9IVF9NQ1NfVFhfREVGSU5FRCwJCVwKLQl9LAkJCQkJCQkJXAotfQotCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBhcjkxNzBfYmFuZF8yR0h6ID0gewotCS5jaGFubmVscwk9IGFyOTE3MF8yZ2h6X2NoYW50YWJsZSwKLQkubl9jaGFubmVscwk9IEFSUkFZX1NJWkUoYXI5MTcwXzJnaHpfY2hhbnRhYmxlKSwKLQkuYml0cmF0ZXMJPSBhcjkxNzBfZ19yYXRldGFibGUsCi0JLm5fYml0cmF0ZXMJPSBhcjkxNzBfZ19yYXRldGFibGVfc2l6ZSwKLQkuaHRfY2FwCQk9IEFSOTE3MF9IVF9DQVAsCi19OwotCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBhcjkxNzBfYmFuZF81R0h6ID0gewotCS5jaGFubmVscwk9IGFyOTE3MF81Z2h6X2NoYW50YWJsZSwKLQkubl9jaGFubmVscwk9IEFSUkFZX1NJWkUoYXI5MTcwXzVnaHpfY2hhbnRhYmxlKSwKLQkuYml0cmF0ZXMJPSBhcjkxNzBfYV9yYXRldGFibGUsCi0JLm5fYml0cmF0ZXMJPSBhcjkxNzBfYV9yYXRldGFibGVfc2l6ZSwKLQkuaHRfY2FwCQk9IEFSOTE3MF9IVF9DQVAsCi19OwotCi1zdGF0aWMgdm9pZCBhcjkxNzBfdHgoc3RydWN0IGFyOTE3MCAqYXIpOwotCi1zdGF0aWMgaW5saW5lIHUxNiBhcjkxNzBfZ2V0X3NlcV9oKHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCi17Ci0JcmV0dXJuIGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpID4+IDQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTE2IGFyOTE3MF9nZXRfc2VxKHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IGFyOTE3MF90eF9jb250cm9sICp0eGMgPSAodm9pZCAqKSBza2ItPmRhdGE7Ci0JcmV0dXJuIGFyOTE3MF9nZXRfc2VxX2goKHZvaWQgKikgdHhjLT5mcmFtZV9kYXRhKTsKLX0KLQotI2lmZGVmIEFSOTE3MF9RVUVVRV9ERUJVRwotc3RhdGljIHZvaWQgYXI5MTcwX3ByaW50X3R4aGVhZGVyKHN0cnVjdCBhcjkxNzAgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBhcjkxNzBfdHhfY29udHJvbCAqdHhjID0gKHZvaWQgKikgc2tiLT5kYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXN0cnVjdCBhcjkxNzBfdHhfaW5mbyAqYXJpbmZvID0gKHZvaWQgKikgdHhpbmZvLT5yYXRlX2RyaXZlcl9kYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKSB0eGMtPmZyYW1lX2RhdGE7Ci0KLQl3aXBoeV9kZWJ1Zyhhci0+aHctPndpcGh5LAotCQkgICAgIj0+IEZSQU1FIFtza2I6JXAsIHE6JWQsIERBOlslcE1dIHM6JWQgIgotCQkgICAgIm1hY19jdHJsOiUwNHgsIHBoeV9jdHJsOiUwOHgsIHRpbWVvdXQ6WyVkIG1zXV1cbiIsCi0JCSAgICBza2IsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpLAotCQkgICAgaWVlZTgwMjExX2dldF9EQShoZHIpLCBhcjkxNzBfZ2V0X3NlcV9oKGhkciksCi0JCSAgICBsZTE2X3RvX2NwdSh0eGMtPm1hY19jb250cm9sKSwgbGUzMl90b19jcHUodHhjLT5waHlfY29udHJvbCksCi0JCSAgICBqaWZmaWVzX3RvX21zZWNzKGFyaW5mby0+dGltZW91dCAtIGppZmZpZXMpKTsKLX0KLQotc3RhdGljIHZvaWQgX19hcjkxNzBfZHVtcF90eHF1ZXVlKHN0cnVjdCBhcjkxNzAgKmFyLAotCQkJCXN0cnVjdCBza19idWZmX2hlYWQgKnF1ZXVlKQotewotCXN0cnVjdCBza19idWZmICpza2I7Ci0JaW50IGkgPSAwOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIi0tLVsgY3V0IGhlcmUgXS0tLVxuIik7Ci0Jd2lwaHlfZGVidWcoYXItPmh3LT53aXBoeSwgIiVkIGVudHJpZXMgaW4gcXVldWUuXG4iLAotCQkgICAgc2tiX3F1ZXVlX2xlbihxdWV1ZSkpOwotCi0Jc2tiX3F1ZXVlX3dhbGsocXVldWUsIHNrYikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiaW5kZXg6JWQgPT5cbiIsIGkrKyk7Ci0JCWFyOTE3MF9wcmludF90eGhlYWRlcihhciwgc2tiKTsKLQl9Ci0JaWYgKGkgIT0gc2tiX3F1ZXVlX2xlbihxdWV1ZSkpCi0JCXByaW50ayhLRVJOX0RFQlVHICJXQVJOSU5HOiBxdWV1ZSBmcmFtZSBjb3VudGVyICIKLQkJICAgICAgICJtaXNtYXRjaCAlZCAhPSAlZFxuIiwgc2tiX3F1ZXVlX2xlbihxdWV1ZSksIGkpOwotCXByaW50ayhLRVJOX0RFQlVHICItLS1bIGVuZCBdLS0tXG4iKTsKLX0KLSNlbmRpZiAvKiBBUjkxNzBfUVVFVUVfREVCVUcgKi8KLQotI2lmZGVmIEFSOTE3MF9RVUVVRV9ERUJVRwotc3RhdGljIHZvaWQgYXI5MTcwX2R1bXBfdHhxdWV1ZShzdHJ1Y3QgYXI5MTcwICphciwKLQkJCQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnF1ZXVlLT5sb2NrLCBmbGFncyk7Ci0JX19hcjkxNzBfZHVtcF90eHF1ZXVlKGFyLCBxdWV1ZSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXVldWUtPmxvY2ssIGZsYWdzKTsKLX0KLSNlbmRpZiAvKiBBUjkxNzBfUVVFVUVfREVCVUcgKi8KLQotI2lmZGVmIEFSOTE3MF9RVUVVRV9TVE9QX0RFQlVHCi1zdGF0aWMgdm9pZCBfX2FyOTE3MF9kdW1wX3R4c3RhdHMoc3RydWN0IGFyOTE3MCAqYXIpCi17Ci0JaW50IGk7Ci0KLQl3aXBoeV9kZWJ1Zyhhci0+aHctPndpcGh5LCAiUW9TIHF1ZXVlIHN0YXRzXG4iKTsKLQotCWZvciAoaSA9IDA7IGkgPCBfX0FSOTE3MF9OVU1fVFhROyBpKyspCi0JCXdpcGh5X2RlYnVnKGFyLT5ody0+d2lwaHksCi0JCQkgICAgInF1ZXVlOiVkIGxpbWl0OiVkIGxlbjolZCB3YWl0YWNrOiVkIHN0b3BwZWQ6JWRcbiIsCi0JCQkgICAgaSwgYXItPnR4X3N0YXRzW2ldLmxpbWl0LCBhci0+dHhfc3RhdHNbaV0ubGVuLAotCQkJICAgIHNrYl9xdWV1ZV9sZW4oJmFyLT50eF9zdGF0dXNbaV0pLAotCQkJICAgIGllZWU4MDIxMV9xdWV1ZV9zdG9wcGVkKGFyLT5odywgaSkpOwotfQotI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9TVE9QX0RFQlVHICovCi0KLS8qIGNhbGxlciBtdXN0IGd1YXJhbnRlZSBleGNsdXNpdmUgYWNjZXNzIGZvciBfYmluXyBxdWV1ZS4gKi8KLXN0YXRpYyB2b2lkIGFyOTE3MF9yZWN5Y2xlX2V4cGlyZWQoc3RydWN0IGFyOTE3MCAqYXIsCi0JCQkJICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUsCi0JCQkJICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqYmluKQotewotCXN0cnVjdCBza19idWZmICpza2IsICpvbGQgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcXVldWUtPmxvY2ssIGZsYWdzKTsKLQl3aGlsZSAoKHNrYiA9IHNrYl9wZWVrKHF1ZXVlKSkpIHsKLQkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eGluZm87Ci0JCXN0cnVjdCBhcjkxNzBfdHhfaW5mbyAqYXJpbmZvOwotCi0JCXR4aW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQkJYXJpbmZvID0gKHZvaWQgKikgdHhpbmZvLT5yYXRlX2RyaXZlcl9kYXRhOwotCi0JCWlmICh0aW1lX2lzX2JlZm9yZV9qaWZmaWVzKGFyaW5mby0+dGltZW91dCkpIHsKLSNpZmRlZiBBUjkxNzBfUVVFVUVfREVCVUcKLQkJCXdpcGh5X2RlYnVnKGFyLT5ody0+d2lwaHksCi0JCQkJICAgICJbJWxkID4gJWxkXSBmcmFtZSBleHBpcmVkID0+IHJlY3ljbGVcbiIsCi0JCQkJICAgIGppZmZpZXMsIGFyaW5mby0+dGltZW91dCk7Ci0JCQlhcjkxNzBfcHJpbnRfdHhoZWFkZXIoYXIsIHNrYik7Ci0jZW5kaWYgLyogQVI5MTcwX1FVRVVFX0RFQlVHICovCi0JCQlfX3NrYl91bmxpbmsoc2tiLCBxdWV1ZSk7Ci0JCQlfX3NrYl9xdWV1ZV90YWlsKGJpbiwgc2tiKTsKLQkJfSBlbHNlIHsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKHVubGlrZWx5KG9sZCA9PSBza2IpKSB7Ci0JCQkvKiBiYWlsIG91dCAtIHF1ZXVlIGlzIHNob3QuICovCi0KLQkJCVdBUk5fT04oMSk7Ci0JCQlicmVhazsKLQkJfQotCQlvbGQgPSBza2I7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnF1ZXVlLT5sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFyOTE3MF90eF9zdGF0dXMoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgIHUxNiB0eF9zdGF0dXMpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eGluZm87Ci0JdW5zaWduZWQgaW50IHJldHJpZXMgPSAwOwotCi0JdHhpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCWllZWU4MDIxMV90eF9pbmZvX2NsZWFyX3N0YXR1cyh0eGluZm8pOwotCi0Jc3dpdGNoICh0eF9zdGF0dXMpIHsKLQljYXNlIEFSOTE3MF9UWF9TVEFUVVNfUkVUUlk6Ci0JCXJldHJpZXMgPSAyOwotCWNhc2UgQVI5MTcwX1RYX1NUQVRVU19DT01QTEVURToKLQkJdHhpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7Ci0JCWJyZWFrOwotCi0JY2FzZSBBUjkxNzBfVFhfU1RBVFVTX0ZBSUxFRDoKLQkJcmV0cmllcyA9IGFyLT5ody0+Y29uZi5sb25nX2ZyYW1lX21heF90eF9jb3VudDsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQl3aXBoeV9lcnIoYXItPmh3LT53aXBoeSwKLQkJCSAgImludmFsaWQgdHhfc3RhdHVzIHJlc3BvbnNlICgleClcbiIsIHR4X3N0YXR1cyk7Ci0JCWJyZWFrOwotCX0KLQotCXR4aW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50ID0gcmV0cmllcyArIDE7Ci0Jc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGFyOTE3MF90eF9jb250cm9sKSk7Ci0JaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGFyLT5odywgc2tiKTsKLX0KLQotdm9pZCBhcjkxNzBfdHhfY2FsbGJhY2soc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXN0cnVjdCBhcjkxNzBfdHhfaW5mbyAqYXJpbmZvID0gKHZvaWQgKikgaW5mby0+cmF0ZV9kcml2ZXJfZGF0YTsKLQl1bnNpZ25lZCBpbnQgcXVldWUgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFyLT50eF9zdGF0c19sb2NrLCBmbGFncyk7Ci0JYXItPnR4X3N0YXRzW3F1ZXVlXS5sZW4tLTsKLQotCWlmIChhci0+dHhfc3RhdHNbcXVldWVdLmxlbiA8IEFSOTE3MF9OVU1fVFhfTElNSVRfU09GVCkgewotI2lmZGVmIEFSOTE3MF9RVUVVRV9TVE9QX0RFQlVHCi0JCXdpcGh5X2RlYnVnKGFyLT5ody0+d2lwaHksICJ3YWtlIHF1ZXVlICVkXG4iLCBxdWV1ZSk7Ci0JCV9fYXI5MTcwX2R1bXBfdHhzdGF0cyhhcik7Ci0jZW5kaWYgLyogQVI5MTcwX1FVRVVFX1NUT1BfREVCVUcgKi8KLQkJaWVlZTgwMjExX3dha2VfcXVldWUoYXItPmh3LCBxdWV1ZSk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFyLT50eF9zdGF0c19sb2NrLCBmbGFncyk7Ci0KLQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykgewotCQlhcjkxNzBfdHhfc3RhdHVzKGFyLCBza2IsIEFSOTE3MF9UWF9TVEFUVVNfRkFJTEVEKTsKLQl9IGVsc2UgewotCQlhcmluZm8tPnRpbWVvdXQgPSBqaWZmaWVzICsKLQkJCSAgbXNlY3NfdG9famlmZmllcyhBUjkxNzBfVFhfVElNRU9VVCk7Ci0KLQkJc2tiX3F1ZXVlX3RhaWwoJmFyLT50eF9zdGF0dXNbcXVldWVdLCBza2IpOwotCX0KLQotCWlmICghYXItPnR4X3N0YXRzW3F1ZXVlXS5sZW4gJiYKLQkgICAgIXNrYl9xdWV1ZV9lbXB0eSgmYXItPnR4X3BlbmRpbmdbcXVldWVdKSkgewotCQlhcjkxNzBfdHgoYXIpOwotCX0KLX0KLQotc3RhdGljIHN0cnVjdCBza19idWZmICphcjkxNzBfZ2V0X3F1ZXVlZF9za2Ioc3RydWN0IGFyOTE3MCAqYXIsCi0JCQkJCSAgICAgY29uc3QgdTggKm1hYywKLQkJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZSwKLQkJCQkJICAgICBjb25zdCB1MzIgcmF0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0KLQkvKgotCSAqIFVuZm9ydHVuYXRlbHksIHRoZSBmaXJtd2FyZSBkb2VzIG5vdCB0ZWxsIHRvIHdoaWNoIChxdWV1ZWQpIGZyYW1lCi0JICogdGhpcyB0cmFuc21pc3Npb24gc3RhdHVzIHJlcG9ydCBiZWxvbmdzIHRvLgotCSAqCi0JICogU28gd2UgaGF2ZSB0byBtYWtlIHJpc2t5IGd1ZXNzZXMgLSB3aXRoIHRoZSBzY2FyY2UgaW5mb3JtYXRpb24KLQkgKiB0aGUgZmlybXdhcmUgcHJvdmlkZWQgKC0+IGRlc3RpbmF0aW9uIE1BQywgYW5kIHBoeV9jb250cm9sKSAtCi0JICogYW5kIGhvcGUgdGhhdCB3ZSBwaWNrZWQgdGhlIHJpZ2h0IG9uZS4uLgotCSAqLwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnF1ZXVlLT5sb2NrLCBmbGFncyk7Ci0Jc2tiX3F1ZXVlX3dhbGsocXVldWUsIHNrYikgewotCQlzdHJ1Y3QgYXI5MTcwX3R4X2NvbnRyb2wgKnR4YyA9ICh2b2lkICopIHNrYi0+ZGF0YTsKLQkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopIHR4Yy0+ZnJhbWVfZGF0YTsKLQkJdTMyIHI7Ci0KLQkJaWYgKG1hYyAmJiBjb21wYXJlX2V0aGVyX2FkZHIoaWVlZTgwMjExX2dldF9EQShoZHIpLCBtYWMpKSB7Ci0jaWZkZWYgQVI5MTcwX1FVRVVFX0RFQlVHCi0JCQl3aXBoeV9kZWJ1Zyhhci0+aHctPndpcGh5LAotCQkJCSAgICAic2tpcCBmcmFtZSA9PiBEQSAlcE0gIT0gJXBNXG4iLAotCQkJCSAgICBtYWMsIGllZWU4MDIxMV9nZXRfREEoaGRyKSk7Ci0JCQlhcjkxNzBfcHJpbnRfdHhoZWFkZXIoYXIsIHNrYik7Ci0jZW5kaWYgLyogQVI5MTcwX1FVRVVFX0RFQlVHICovCi0JCQljb250aW51ZTsKLQkJfQotCi0JCXIgPSAobGUzMl90b19jcHUodHhjLT5waHlfY29udHJvbCkgJiBBUjkxNzBfVFhfUEhZX01DU19NQVNLKSA+PgotCQkgICAgQVI5MTcwX1RYX1BIWV9NQ1NfU0hJRlQ7Ci0KLQkJaWYgKChyYXRlICE9IEFSOTE3MF9UWF9JTlZBTElEX1JBVEUpICYmIChyICE9IHJhdGUpKSB7Ci0jaWZkZWYgQVI5MTcwX1FVRVVFX0RFQlVHCi0JCQl3aXBoeV9kZWJ1Zyhhci0+aHctPndpcGh5LAotCQkJCSAgICAic2tpcCBmcmFtZSA9PiByYXRlICVkICE9ICVkXG4iLCByYXRlLCByKTsKLQkJCWFyOTE3MF9wcmludF90eGhlYWRlcihhciwgc2tiKTsKLSNlbmRpZiAvKiBBUjkxNzBfUVVFVUVfREVCVUcgKi8KLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJX19za2JfdW5saW5rKHNrYiwgcXVldWUpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxdWV1ZS0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gc2tiOwotCX0KLQotI2lmZGVmIEFSOTE3MF9RVUVVRV9ERUJVRwotCXdpcGh5X2Vycihhci0+aHctPndpcGh5LAotCQkgICJFU1M6WyVwTV0gZG9lcyBub3QgaGF2ZSBhbnkgb3V0c3RhbmRpbmcgZnJhbWVzIGluIHF1ZXVlLlxuIiwKLQkJICBtYWMpOwotCV9fYXI5MTcwX2R1bXBfdHhxdWV1ZShhciwgcXVldWUpOwotI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9ERUJVRyAqLwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnF1ZXVlLT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotLyoKLSAqIFRoaXMgd29ya2VyIHRyaWVzIHRvIGtlZXBzIGFuIG1haW50YWluIHR4X3N0YXR1cyBxdWV1ZXMuCi0gKiBTbyB3ZSBjYW4gZ3VhcmFudGVlIHRoYXQgaW5jb21pbmcgdHhfc3RhdHVzIHJlcG9ydHMgYXJlCi0gKiBhY3R1YWxseSBmb3IgYSBwZW5kaW5nIGZyYW1lLgotICovCi0KLXN0YXRpYyB2b2lkIGFyOTE3MF90eF9qYW5pdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgYXI5MTcwICphciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXI5MTcwLAotCQkJCQkgdHhfamFuaXRvci53b3JrKTsKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHdhc3RlOwotCXVuc2lnbmVkIGludCBpOwotCWJvb2wgcmVzY2hlZCA9IGZhbHNlOwotCi0JaWYgKHVubGlrZWx5KCFJU19TVEFSVEVEKGFyKSkpCi0JCXJldHVybiA7Ci0KLQlza2JfcXVldWVfaGVhZF9pbml0KCZ3YXN0ZSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgX19BUjkxNzBfTlVNX1RYUTsgaSsrKSB7Ci0jaWZkZWYgQVI5MTcwX1FVRVVFX0RFQlVHCi0JCXdpcGh5X2RlYnVnKGFyLT5ody0+d2lwaHksICJnYXJiYWdlIGNvbGxlY3RvciBzY2FucyBxdWV1ZTolZFxuIiwKLQkJCSAgICBpKTsKLQkJYXI5MTcwX2R1bXBfdHhxdWV1ZShhciwgJmFyLT50eF9wZW5kaW5nW2ldKTsKLQkJYXI5MTcwX2R1bXBfdHhxdWV1ZShhciwgJmFyLT50eF9zdGF0dXNbaV0pOwotI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9ERUJVRyAqLwotCi0JCWFyOTE3MF9yZWN5Y2xlX2V4cGlyZWQoYXIsICZhci0+dHhfc3RhdHVzW2ldLCAmd2FzdGUpOwotCQlhcjkxNzBfcmVjeWNsZV9leHBpcmVkKGFyLCAmYXItPnR4X3BlbmRpbmdbaV0sICZ3YXN0ZSk7Ci0JCXNrYl9xdWV1ZV9wdXJnZSgmd2FzdGUpOwotCi0JCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZhci0+dHhfc3RhdHVzW2ldKSB8fAotCQkgICAgIXNrYl9xdWV1ZV9lbXB0eSgmYXItPnR4X3BlbmRpbmdbaV0pKQotCQkJcmVzY2hlZCA9IHRydWU7Ci0JfQotCi0JaWYgKCFyZXNjaGVkKQotCQlyZXR1cm47Ci0KLQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKGFyLT5odywKLQkJCQkgICAgICZhci0+dHhfamFuaXRvciwKLQkJCQkgICAgIG1zZWNzX3RvX2ppZmZpZXMoQVI5MTcwX0pBTklUT1JfREVMQVkpKTsKLX0KLQotdm9pZCBhcjkxNzBfaGFuZGxlX2NvbW1hbmRfcmVzcG9uc2Uoc3RydWN0IGFyOTE3MCAqYXIsIHZvaWQgKmJ1ZiwgdTMyIGxlbikKLXsKLQlzdHJ1Y3QgYXI5MTcwX2NtZF9yZXNwb25zZSAqY21kID0gKHZvaWQgKikgYnVmOwotCi0JaWYgKChjbWQtPnR5cGUgJiAweGMwKSAhPSAweGMwKSB7Ci0JCWFyLT5jYWxsYmFja19jbWQoYXIsIGxlbiwgYnVmKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIGhhcmR3YXJlIGV2ZW50IGhhbmRsZXJzICovCi0Jc3dpdGNoIChjbWQtPnR5cGUpIHsKLQljYXNlIDB4YzE6IHsKLQkJLyoKLQkJICogVFggc3RhdHVzIG5vdGlmaWNhdGlvbjoKLQkJICogYnl0ZXM6IDBjIGMxIFhYIFlZIE0xIE0yIE0zIE00IE01IE02IFI0IFIzIFIyIFIxIFMyIFMxCi0JCSAqCi0JCSAqIFhYIGFsd2F5cyA4MQotCQkgKiBZWSBhbHdheXMgMDAKLQkJICogTTEtTTYgaXMgdGhlIE1BQyBhZGRyZXNzCi0JCSAqIFIxLVI0IGlzIHRoZSB0cmFuc21pdCByYXRlCi0JCSAqIFMxLVMyIGlzIHRoZSB0cmFuc21pdCBzdGF0dXMKLQkJICovCi0KLQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQkJdTMyIHBoeSA9IGxlMzJfdG9fY3B1KGNtZC0+dHhfc3RhdHVzLnJhdGUpOwotCQl1MzIgcSA9IChwaHkgJiBBUjkxNzBfVFhfUEhZX1FPU19NQVNLKSA+PgotCQkJQVI5MTcwX1RYX1BIWV9RT1NfU0hJRlQ7Ci0jaWZkZWYgQVI5MTcwX1FVRVVFX0RFQlVHCi0JCXdpcGh5X2RlYnVnKGFyLT5ody0+d2lwaHksCi0JCQkgICAgInJlY3YgdHhfc3RhdHVzIGZvciAlcG0sIHA6JTA4eCwgcTolZFxuIiwKLQkJCSAgICBjbWQtPnR4X3N0YXR1cy5kc3QsIHBoeSwgcSk7Ci0jZW5kaWYgLyogQVI5MTcwX1FVRVVFX0RFQlVHICovCi0KLQkJc2tiID0gYXI5MTcwX2dldF9xdWV1ZWRfc2tiKGFyLCBjbWQtPnR4X3N0YXR1cy5kc3QsCi0JCQkJCSAgICAmYXItPnR4X3N0YXR1c1txXSwKLQkJCQkJICAgIEFSOTE3MF9UWF9JTlZBTElEX1JBVEUpOwotCQlpZiAodW5saWtlbHkoIXNrYikpCi0JCQlyZXR1cm4gOwotCi0JCWFyOTE3MF90eF9zdGF0dXMoYXIsIHNrYiwgbGUxNl90b19jcHUoY21kLT50eF9zdGF0dXMuc3RhdHVzKSk7Ci0JCWJyZWFrOwotCQl9Ci0KLQljYXNlIDB4YzA6Ci0JCS8qCi0JCSAqIHByZS1UQlRUIGV2ZW50Ci0JCSAqLwotCQlpZiAoYXItPnZpZiAmJiBhci0+dmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKQotCQkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoYXItPmh3LCAmYXItPmJlYWNvbl93b3JrKTsKLQkJYnJlYWs7Ci0KLQljYXNlIDB4YzI6Ci0JCS8qCi0JCSAqIChJQlNTKSBiZWFjb24gc2VuZCBub3RpZmljYXRpb24KLQkJICogYnl0ZXM6IDA0IGMyIFhYIFlZIEI0IEIzIEIyIEIxCi0JCSAqCi0JCSAqIFhYIGFsd2F5cyA4MAotCQkgKiBZWSBhbHdheXMgMDAKLQkJICogQjEtQjQgInNob3VsZCIgYmUgdGhlIG51bWJlciBvZiBzZW5kIG91dCBiZWFjb25zLgotCQkgKi8KLQkJYnJlYWs7Ci0KLQljYXNlIDB4YzM6Ci0JCS8qIEVuZCBvZiBBdGltIFdpbmRvdyAqLwotCQlicmVhazsKLQotCWNhc2UgMHhjNDoKLQkJLyogQmxvY2tBQ0sgYml0bWFwICovCi0JCWJyZWFrOwotCi0JY2FzZSAweGM1OgotCQkvKiBCbG9ja0FDSyBldmVudHMgKi8KLQkJYnJlYWs7Ci0KLQljYXNlIDB4YzY6Ci0JCS8qIFdhdGNoZG9nIEludGVycnVwdCAqLwotCQlicmVhazsKLQotCWNhc2UgMHhjOToKLQkJLyogcmV0cmFuc21pc3Npb24gaXNzdWUgLyBTSUZTL0VJRlMgY29sbGlzaW9uID8hICovCi0JCWJyZWFrOwotCi0JLyogZmlybXdhcmUgZGVidWcgKi8KLQljYXNlIDB4Y2E6Ci0JCXByaW50ayhLRVJOX0RFQlVHICJhcjkxNzAgRlc6ICUuKnNcbiIsIGxlbiAtIDQsCi0JCQkJKGNoYXIgKilidWYgKyA0KTsKLQkJYnJlYWs7Ci0JY2FzZSAweGNiOgotCQlsZW4gLT0gNDsKLQotCQlzd2l0Y2ggKGxlbikgewotCQljYXNlIDE6Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiYXI5MTcwIEZXOiB1ODogJSMuMnhcbiIsCi0JCQkJKigoY2hhciAqKWJ1ZiArIDQpKTsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiYXI5MTcwIEZXOiB1ODogJSMuNHhcbiIsCi0JCQkJbGUxNl90b19jcHVwKChfX2xlMTYgKikoKGNoYXIgKilidWYgKyA0KSkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgNDoKLQkJCXByaW50ayhLRVJOX0RFQlVHICJhcjkxNzAgRlc6IHU4OiAlIy44eFxuIiwKLQkJCQlsZTMyX3RvX2NwdXAoKF9fbGUzMiAqKSgoY2hhciAqKWJ1ZiArIDQpKSk7Ci0JCQlicmVhazsKLQkJY2FzZSA4OgotCQkJcHJpbnRrKEtFUk5fREVCVUcgImFyOTE3MCBGVzogdTg6ICUjLjE2bHhcbiIsCi0JCQkJKHVuc2lnbmVkIGxvbmcpbGU2NF90b19jcHVwKAotCQkJCQkJKF9fbGU2NCAqKSgoY2hhciAqKWJ1ZiArIDQpKSk7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQljYXNlIDB4Y2M6Ci0JCXByaW50X2hleF9kdW1wX2J5dGVzKCJhcjkxNzAgRlc6IiwgRFVNUF9QUkVGSVhfTk9ORSwKLQkJCQkgICAgIChjaGFyICopYnVmICsgNCwgbGVuIC0gNCk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcHJfaW5mbygicmVjZWl2ZWQgdW5oYW5kbGVkIGV2ZW50ICV4XG4iLCBjbWQtPnR5cGUpOwotCQlwcmludF9oZXhfZHVtcF9ieXRlcygiZHVtcDoiLCBEVU1QX1BSRUZJWF9OT05FLCBidWYsIGxlbik7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYXI5MTcwX3J4X3Jlc2V0X3J4X21wZHUoc3RydWN0IGFyOTE3MCAqYXIpCi17Ci0JbWVtc2V0KCZhci0+cnhfbXBkdS5wbGNwLCAwLCBzaXplb2Yoc3RydWN0IGFyOTE3MF9yeF9oZWFkKSk7Ci0JYXItPnJ4X21wZHUuaGFzX3BsY3AgPSBmYWxzZTsKLX0KLQotaW50IGFyOTE3MF9uYWdfbGltaXRlcihzdHJ1Y3QgYXI5MTcwICphcikKLXsKLQlib29sIHByaW50X21lc3NhZ2U7Ci0KLQkvKgotCSAqIHdlIGV4cGVjdCBhbGwgc29ydHMgb2YgZXJyb3JzIGluIHByb21pc2N1b3VzIG1vZGUuCi0JICogZG9uJ3QgYm90aGVyIHdpdGggaXQsIGl0J3MgT0shCi0JICovCi0JaWYgKGFyLT5zbmlmZmVyX2VuYWJsZWQpCi0JCXJldHVybiBmYWxzZTsKLQotCS8qCi0JICogb25seSBnbyBmb3IgZnJlcXVlbnQgZXJyb3JzISBUaGUgaGFyZHdhcmUgdGVuZHMgdG8KLQkgKiBkbyBzb21lIHN0dXBpZCB0aGluZyBvbmNlIGluIGEgd2hpbGUgdW5kZXIgbG9hZCwgaW4KLQkgKiBub2lzeSBlbnZpcm9ubWVudHMgb3IganVzdCBmb3IgZnVuIQotCSAqLwotCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBhci0+YmFkX2h3X25hZ2dlcikgJiYgbmV0X3JhdGVsaW1pdCgpKQotCQlwcmludF9tZXNzYWdlID0gdHJ1ZTsKLQllbHNlCi0JCXByaW50X21lc3NhZ2UgPSBmYWxzZTsKLQotCS8qIHJlc2V0IHRocmVzaG9sZCBmb3IgIm9uY2UgaW4gYSB3aGlsZSIgKi8KLQlhci0+YmFkX2h3X25hZ2dlciA9IGppZmZpZXMgKyBIWiAvIDQ7Ci0JcmV0dXJuIHByaW50X21lc3NhZ2U7Ci19Ci0KLXN0YXRpYyBpbnQgYXI5MTcwX3J4X21hY19zdGF0dXMoc3RydWN0IGFyOTE3MCAqYXIsCi0JCQkJc3RydWN0IGFyOTE3MF9yeF9oZWFkICpoZWFkLAotCQkJCXN0cnVjdCBhcjkxNzBfcnhfbWFjc3RhdHVzICptYWMsCi0JCQkJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cykKLXsKLQl1OCBlcnJvciwgZGVjcnlwdDsKLQotCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGFyOTE3MF9yeF9oZWFkKSAhPSAxMik7Ci0JQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgYXI5MTcwX3J4X21hY3N0YXR1cykgIT0gNCk7Ci0KLQllcnJvciA9IG1hYy0+ZXJyb3I7Ci0JaWYgKGVycm9yICYgQVI5MTcwX1JYX0VSUk9SX01NSUMpIHsKLQkJc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfTU1JQ19FUlJPUjsKLQkJZXJyb3IgJj0gfkFSOTE3MF9SWF9FUlJPUl9NTUlDOwotCX0KLQotCWlmIChlcnJvciAmIEFSOTE3MF9SWF9FUlJPUl9QTENQKSB7Ci0JCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX0ZBSUxFRF9QTENQX0NSQzsKLQkJZXJyb3IgJj0gfkFSOTE3MF9SWF9FUlJPUl9QTENQOwotCi0JCWlmICghKGFyLT5maWx0ZXJfc3RhdGUgJiBGSUZfUExDUEZBSUwpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGVycm9yICYgQVI5MTcwX1JYX0VSUk9SX0ZDUykgewotCQlzdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19GQUlMRURfRkNTX0NSQzsKLQkJZXJyb3IgJj0gfkFSOTE3MF9SWF9FUlJPUl9GQ1M7Ci0KLQkJaWYgKCEoYXItPmZpbHRlcl9zdGF0ZSAmIEZJRl9GQ1NGQUlMKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWRlY3J5cHQgPSBhcjkxNzBfZ2V0X2RlY3J5cHRfdHlwZShtYWMpOwotCWlmICghKGRlY3J5cHQgJiBBUjkxNzBfUlhfRU5DX1NPRlRXQVJFKSAmJgotCSAgICBkZWNyeXB0ICE9IEFSOTE3MF9FTkNfQUxHX05PTkUpCi0JCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX0RFQ1JZUFRFRDsKLQotCS8qIGlnbm9yZSB3cm9uZyBSQSBlcnJvcnMgKi8KLQllcnJvciAmPSB+QVI5MTcwX1JYX0VSUk9SX1dST05HX1JBOwotCi0JaWYgKGVycm9yICYgQVI5MTcwX1JYX0VSUk9SX0RFQ1JZUFQpIHsKLQkJZXJyb3IgJj0gfkFSOTE3MF9SWF9FUlJPUl9ERUNSWVBUOwotCQkvKgotCQkgKiBSeCBkZWNyeXB0aW9uIGlzIGRvbmUgaW4gcGxhY2UsCi0JCSAqIHRoZSBvcmlnaW5hbCBkYXRhIGlzIGxvc3QgYW55d2F5LgotCQkgKi8KLQotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBkcm9wIGFueSBvdGhlciBlcnJvciBmcmFtZXMgKi8KLQlpZiAodW5saWtlbHkoZXJyb3IpKSB7Ci0JCS8qIFRPRE86IHVwZGF0ZSBuZXRkZXZpY2UncyBSWCBkcm9wcGVkL2Vycm9ycyBzdGF0aXN0aWNzICovCi0KLQkJaWYgKGFyOTE3MF9uYWdfbGltaXRlcihhcikpCi0JCQl3aXBoeV9kZWJ1Zyhhci0+aHctPndpcGh5LAotCQkJCSAgICAicmVjZWl2ZWQgZnJhbWUgd2l0aCBzdXNwaWNpb3VzIGVycm9yIGNvZGUgKCUjeCkuXG4iLAotCQkJCSAgICBlcnJvcik7Ci0KLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jc3RhdHVzLT5iYW5kID0gYXItPmNoYW5uZWwtPmJhbmQ7Ci0Jc3RhdHVzLT5mcmVxID0gYXItPmNoYW5uZWwtPmNlbnRlcl9mcmVxOwotCi0Jc3dpdGNoIChtYWMtPnN0YXR1cyAmIEFSOTE3MF9SWF9TVEFUVVNfTU9EVUxBVElPTl9NQVNLKSB7Ci0JY2FzZSBBUjkxNzBfUlhfU1RBVFVTX01PRFVMQVRJT05fQ0NLOgotCQlpZiAobWFjLT5zdGF0dXMgJiBBUjkxNzBfUlhfU1RBVFVTX1NIT1JUX1BSRUFNQkxFKQotCQkJc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfU0hPUlRQUkU7Ci0JCXN3aXRjaCAoaGVhZC0+cGxjcFswXSkgewotCQljYXNlIDB4MGE6Ci0JCQlzdGF0dXMtPnJhdGVfaWR4ID0gMDsKLQkJCWJyZWFrOwotCQljYXNlIDB4MTQ6Ci0JCQlzdGF0dXMtPnJhdGVfaWR4ID0gMTsKLQkJCWJyZWFrOwotCQljYXNlIDB4Mzc6Ci0JCQlzdGF0dXMtPnJhdGVfaWR4ID0gMjsKLQkJCWJyZWFrOwotCQljYXNlIDB4NmU6Ci0JCQlzdGF0dXMtPnJhdGVfaWR4ID0gMzsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJaWYgKGFyOTE3MF9uYWdfbGltaXRlcihhcikpCi0JCQkJd2lwaHlfZXJyKGFyLT5ody0+d2lwaHksCi0JCQkJCSAgImludmFsaWQgcGxjcCBjY2sgcmF0ZSAoJXgpLlxuIiwKLQkJCQkJICBoZWFkLT5wbGNwWzBdKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBBUjkxNzBfUlhfU1RBVFVTX01PRFVMQVRJT05fRFVQT0ZETToKLQljYXNlIEFSOTE3MF9SWF9TVEFUVVNfTU9EVUxBVElPTl9PRkRNOgotCQlzd2l0Y2ggKGhlYWQtPnBsY3BbMF0gJiAweGYpIHsKLQkJY2FzZSAweGI6Ci0JCQlzdGF0dXMtPnJhdGVfaWR4ID0gMDsKLQkJCWJyZWFrOwotCQljYXNlIDB4ZjoKLQkJCXN0YXR1cy0+cmF0ZV9pZHggPSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgMHhhOgotCQkJc3RhdHVzLT5yYXRlX2lkeCA9IDI7Ci0JCQlicmVhazsKLQkJY2FzZSAweGU6Ci0JCQlzdGF0dXMtPnJhdGVfaWR4ID0gMzsKLQkJCWJyZWFrOwotCQljYXNlIDB4OToKLQkJCXN0YXR1cy0+cmF0ZV9pZHggPSA0OwotCQkJYnJlYWs7Ci0JCWNhc2UgMHhkOgotCQkJc3RhdHVzLT5yYXRlX2lkeCA9IDU7Ci0JCQlicmVhazsKLQkJY2FzZSAweDg6Ci0JCQlzdGF0dXMtPnJhdGVfaWR4ID0gNjsKLQkJCWJyZWFrOwotCQljYXNlIDB4YzoKLQkJCXN0YXR1cy0+cmF0ZV9pZHggPSA3OwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlpZiAoYXI5MTcwX25hZ19saW1pdGVyKGFyKSkKLQkJCQl3aXBoeV9lcnIoYXItPmh3LT53aXBoeSwKLQkJCQkJICAiaW52YWxpZCBwbGNwIG9mZG0gcmF0ZSAoJXgpLlxuIiwKLQkJCQkJICBoZWFkLT5wbGNwWzBdKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWlmIChzdGF0dXMtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikKLQkJCXN0YXR1cy0+cmF0ZV9pZHggKz0gNDsKLQkJYnJlYWs7Ci0KLQljYXNlIEFSOTE3MF9SWF9TVEFUVVNfTU9EVUxBVElPTl9IVDoKLQkJaWYgKGhlYWQtPnBsY3BbM10gJiAweDgwKQotCQkJc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfNDBNSFo7Ci0JCWlmIChoZWFkLT5wbGNwWzZdICYgMHg4MCkKLQkJCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX1NIT1JUX0dJOwotCi0JCXN0YXR1cy0+cmF0ZV9pZHggPSBjbGFtcCgwLCA3NSwgaGVhZC0+cGxjcFs2XSAmIDB4N2YpOwotCQlzdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19IVDsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlpZiAoYXI5MTcwX25hZ19saW1pdGVyKGFyKSkKLQkJCXdpcGh5X2Vycihhci0+aHctPndpcGh5LCAiaW52YWxpZCBtb2R1bGF0aW9uXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGFyOTE3MF9yeF9waHlfc3RhdHVzKHN0cnVjdCBhcjkxNzAgKmFyLAotCQkJCSBzdHJ1Y3QgYXI5MTcwX3J4X3BoeXN0YXR1cyAqcGh5LAotCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKQotewotCWludCBpOwotCi0JQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgYXI5MTcwX3J4X3BoeXN0YXR1cykgIT0gMjApOwotCi0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykKLQkJaWYgKHBoeS0+cnNzaVtpXSAhPSAweDgwKQotCQkJc3RhdHVzLT5hbnRlbm5hIHw9IEJJVChpKTsKLQotCS8qIHBvc3QtcHJvY2VzcyBSU1NJICovCi0JZm9yIChpID0gMDsgaSA8IDc7IGkrKykKLQkJaWYgKHBoeS0+cnNzaVtpXSAmIDB4ODApCi0JCQlwaHktPnJzc2lbaV0gPSAoKHBoeS0+cnNzaVtpXSAmIDB4N2YpICsgMSkgJiAweDdmOwotCi0JLyogVE9ETzogd2UgY291bGQgZG8gc29tZXRoaW5nIHdpdGggcGh5X2Vycm9ycyAqLwotCXN0YXR1cy0+c2lnbmFsID0gYXItPm5vaXNlWzBdICsgcGh5LT5yc3NpX2NvbWJpbmVkOwotfQotCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmFyOTE3MF9yeF9jb3B5X2RhdGEodTggKmJ1ZiwgaW50IGxlbikKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWludCByZXNlcnZlZCA9IDA7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopIGJ1ZjsKLQotCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLT5mcmFtZV9jb250cm9sKSkgewotCQl1OCAqcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKLQkJcmVzZXJ2ZWQgKz0gTkVUX0lQX0FMSUdOOwotCi0JCWlmICgqcWMgJiBJRUVFODAyMTFfUU9TX0NPTlRST0xfQV9NU0RVX1BSRVNFTlQpCi0JCQlyZXNlcnZlZCArPSBORVRfSVBfQUxJR047Ci0JfQotCi0JaWYgKGllZWU4MDIxMV9oYXNfYTQoaGRyLT5mcmFtZV9jb250cm9sKSkKLQkJcmVzZXJ2ZWQgKz0gTkVUX0lQX0FMSUdOOwotCi0JcmVzZXJ2ZWQgPSAzMiArIChyZXNlcnZlZCAmIE5FVF9JUF9BTElHTik7Ci0KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbiArIHJlc2VydmVkKTsKLQlpZiAobGlrZWx5KHNrYikpIHsKLQkJc2tiX3Jlc2VydmUoc2tiLCByZXNlcnZlZCk7Ci0JCW1lbWNweShza2JfcHV0KHNrYiwgbGVuKSwgYnVmLCBsZW4pOwotCX0KLQotCXJldHVybiBza2I7Ci19Ci0KLS8qCi0gKiBJZiB0aGUgZnJhbWUgYWxpZ25tZW50IGlzIHJpZ2h0IChvciB0aGUga2VybmVsIGhhcwotICogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MpLCBhbmQgdGhlcmUKLSAqIGlzIG9ubHkgYSBzaW5nbGUgTVBEVSBpbiB0aGUgVVNCIGZyYW1lLCB0aGVuIHdlIGNvdWxkCi0gKiBzdWJtaXQgdG8gbWFjODAyMTEgdGhlIFNLQiBkaXJlY3RseS4gSG93ZXZlciwgc2luY2UKLSAqIHRoZXJlIG1heSBiZSBtdWx0aXBsZSBwYWNrZXRzIGluIG9uZSBTS0IgaW4gc3RyZWFtCi0gKiBtb2RlLCBhbmQgd2UgbmVlZCB0byBvYnNlcnZlIHRoZSBwcm9wZXIgb3JkZXJpbmcsCi0gKiB0aGlzIGlzIG5vbi10cml2aWFsLgotICovCi0KLXN0YXRpYyB2b2lkIGFyOTE3MF9oYW5kbGVfbXBkdShzdHJ1Y3QgYXI5MTcwICphciwgdTggKmJ1ZiwgaW50IGxlbikKLXsKLQlzdHJ1Y3QgYXI5MTcwX3J4X2hlYWQgKmhlYWQ7Ci0Jc3RydWN0IGFyOTE3MF9yeF9tYWNzdGF0dXMgKm1hYzsKLQlzdHJ1Y3QgYXI5MTcwX3J4X3BoeXN0YXR1cyAqcGh5ID0gTlVMTDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyBzdGF0dXM7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgbXBkdV9sZW47Ci0KLQlpZiAodW5saWtlbHkoIUlTX1NUQVJURUQoYXIpIHx8IGxlbiA8IChzaXplb2YoKm1hYykpKSkKLQkJcmV0dXJuIDsKLQotCS8qIFJlY2VpdmVkIE1QRFUgKi8KLQltcGR1X2xlbiA9IGxlbiAtIHNpemVvZigqbWFjKTsKLQotCW1hYyA9ICh2b2lkICopKGJ1ZiArIG1wZHVfbGVuKTsKLQlpZiAodW5saWtlbHkobWFjLT5lcnJvciAmIEFSOTE3MF9SWF9FUlJPUl9GQVRBTCkpIHsKLQkJLyogdGhpcyBmcmFtZSBpcyB0b28gZGFtYWdlZCBhbmQgY2FuJ3QgYmUgdXNlZCAtIGRyb3AgaXQgKi8KLQotCQlyZXR1cm4gOwotCX0KLQotCXN3aXRjaCAobWFjLT5zdGF0dXMgJiBBUjkxNzBfUlhfU1RBVFVTX01QRFVfTUFTSykgewotCWNhc2UgQVI5MTcwX1JYX1NUQVRVU19NUERVX0ZJUlNUOgotCQkvKiBmaXJzdCBtcGR1IHBhY2tldCBoYXMgdGhlIHBsY3AgaGVhZGVyICovCi0JCWlmIChsaWtlbHkobXBkdV9sZW4gPj0gc2l6ZW9mKHN0cnVjdCBhcjkxNzBfcnhfaGVhZCkpKSB7Ci0JCQloZWFkID0gKHZvaWQgKikgYnVmOwotCQkJbWVtY3B5KCZhci0+cnhfbXBkdS5wbGNwLCAodm9pZCAqKSBidWYsCi0JCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBhcjkxNzBfcnhfaGVhZCkpOwotCi0JCQltcGR1X2xlbiAtPSBzaXplb2Yoc3RydWN0IGFyOTE3MF9yeF9oZWFkKTsKLQkJCWJ1ZiArPSBzaXplb2Yoc3RydWN0IGFyOTE3MF9yeF9oZWFkKTsKLQkJCWFyLT5yeF9tcGR1Lmhhc19wbGNwID0gdHJ1ZTsKLQkJfSBlbHNlIHsKLQkJCWlmIChhcjkxNzBfbmFnX2xpbWl0ZXIoYXIpKQotCQkJCXdpcGh5X2Vycihhci0+aHctPndpcGh5LAotCQkJCQkgICJwbGNwIGluZm8gaXMgY2xpcHBlZC5cbiIpOwotCQkJcmV0dXJuIDsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgQVI5MTcwX1JYX1NUQVRVU19NUERVX0xBU1Q6Ci0JCS8qIGxhc3QgbXBkdSBoYXMgYSBleHRyYSB0YWlsIHdpdGggcGh5IHN0YXR1cyBpbmZvcm1hdGlvbiAqLwotCi0JCWlmIChsaWtlbHkobXBkdV9sZW4gPj0gc2l6ZW9mKHN0cnVjdCBhcjkxNzBfcnhfcGh5c3RhdHVzKSkpIHsKLQkJCW1wZHVfbGVuIC09IHNpemVvZihzdHJ1Y3QgYXI5MTcwX3J4X3BoeXN0YXR1cyk7Ci0JCQlwaHkgPSAodm9pZCAqKShidWYgKyBtcGR1X2xlbik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoYXI5MTcwX25hZ19saW1pdGVyKGFyKSkKLQkJCQl3aXBoeV9lcnIoYXItPmh3LT53aXBoeSwKLQkJCQkJICAiZnJhbWUgdGFpbCBpcyBjbGlwcGVkLlxuIik7Ci0JCQlyZXR1cm4gOwotCQl9Ci0KLQljYXNlIEFSOTE3MF9SWF9TVEFUVVNfTVBEVV9NSURETEU6Ci0JCS8qIG1pZGRsZSBtcGR1cyBhcmUganVzdCBkYXRhICovCi0JCWlmICh1bmxpa2VseSghYXItPnJ4X21wZHUuaGFzX3BsY3ApKSB7Ci0JCQlpZiAoIWFyOTE3MF9uYWdfbGltaXRlcihhcikpCi0JCQkJcmV0dXJuIDsKLQotCQkJd2lwaHlfZXJyKGFyLT5ody0+d2lwaHksCi0JCQkJICAicnggc3RyZWFtIGRpZCBub3Qgc3RhcnQgd2l0aCBhIGZpcnN0X21wZHUgZnJhbWUgdGFnLlxuIik7Ci0KLQkJCXJldHVybiA7Ci0JCX0KLQotCQloZWFkID0gJmFyLT5yeF9tcGR1LnBsY3A7Ci0JCWJyZWFrOwotCi0JY2FzZSBBUjkxNzBfUlhfU1RBVFVTX01QRFVfU0lOR0xFOgotCQkvKiBzaW5nbGUgbXBkdSAtIGhhcyBwbGNwIChoZWFkKSBhbmQgcGh5IHN0YXR1cyAodGFpbCkgKi8KLQkJaGVhZCA9ICh2b2lkICopIGJ1ZjsKLQotCQltcGR1X2xlbiAtPSBzaXplb2Yoc3RydWN0IGFyOTE3MF9yeF9oZWFkKTsKLQkJbXBkdV9sZW4gLT0gc2l6ZW9mKHN0cnVjdCBhcjkxNzBfcnhfcGh5c3RhdHVzKTsKLQotCQlidWYgKz0gc2l6ZW9mKHN0cnVjdCBhcjkxNzBfcnhfaGVhZCk7Ci0JCXBoeSA9ICh2b2lkICopKGJ1ZiArIG1wZHVfbGVuKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlCVUdfT04oMSk7Ci0JCWJyZWFrOwotCX0KLQotCWlmICh1bmxpa2VseShtcGR1X2xlbiA8IEZDU19MRU4pKQotCQlyZXR1cm4gOwotCi0JbWVtc2V0KCZzdGF0dXMsIDAsIHNpemVvZihzdGF0dXMpKTsKLQlpZiAodW5saWtlbHkoYXI5MTcwX3J4X21hY19zdGF0dXMoYXIsIGhlYWQsIG1hYywgJnN0YXR1cykpKQotCQlyZXR1cm4gOwotCi0JaWYgKHBoeSkKLQkJYXI5MTcwX3J4X3BoeV9zdGF0dXMoYXIsIHBoeSwgJnN0YXR1cyk7Ci0KLQlza2IgPSBhcjkxNzBfcnhfY29weV9kYXRhKGJ1ZiwgbXBkdV9sZW4pOwotCWlmIChsaWtlbHkoc2tiKSkgewotCQltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksICZzdGF0dXMsIHNpemVvZihzdGF0dXMpKTsKLQkJaWVlZTgwMjExX3J4X2lycXNhZmUoYXItPmh3LCBza2IpOwotCX0KLX0KLQotdm9pZCBhcjkxNzBfcngoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JdW5zaWduZWQgaW50IGksIHRsZW4sIHJlc3BsZW4sIHdsZW4gPSAwLCBjbGVuID0gMDsKLQl1OCAqdGJ1ZiwgKnJlc3BidWY7Ci0KLQl0YnVmID0gc2tiLT5kYXRhOwotCXRsZW4gPSBza2ItPmxlbjsKLQotCXdoaWxlICh0bGVuID49IDQpIHsKLQkJY2xlbiA9IHRidWZbMV0gPDwgOCB8IHRidWZbMF07Ci0JCXdsZW4gPSBBTElHTihjbGVuLCA0KTsKLQotCQkvKiBjaGVjayBpZiB0aGlzIGlzIHN0cmVhbSBoYXMgYSB2YWxpZCB0YWcuKi8KLQkJaWYgKHRidWZbMl0gIT0gMCB8fCB0YnVmWzNdICE9IDB4NGUpIHsKLQkJCS8qCi0JCQkgKiBUT0RPOiBoYW5kbGUgdGhlIGhpZ2hseSB1bmxpa2VseSBldmVudCB0aGF0IHRoZQotCQkJICogY29ycnVwdGVkIHN0cmVhbSBoYXMgdGhlIFRBRyBhdCB0aGUgcmlnaHQgcG9zaXRpb24uCi0JCQkgKi8KLQotCQkJLyogY2hlY2sgaWYgdGhlIGZyYW1lIGNhbiBiZSByZXBhaXJlZC4gKi8KLQkJCWlmICghYXItPnJ4X2ZhaWxvdmVyX21pc3NpbmcpIHsKLQkJCQkvKiB0aGlzIGlzIG5vICJzaG9ydCByZWFkIi4gKi8KLQkJCQlpZiAoYXI5MTcwX25hZ19saW1pdGVyKGFyKSkgewotCQkJCQl3aXBoeV9lcnIoYXItPmh3LT53aXBoeSwKLQkJCQkJCSAgIm1pc3NpbmcgdGFnIVxuIik7Ci0JCQkJCWdvdG8gZXJyX3RlbGx1c2VyOwotCQkJCX0gZWxzZQotCQkJCQlnb3RvIGVycl9zaWxlbnQ7Ci0JCQl9Ci0KLQkJCWlmIChhci0+cnhfZmFpbG92ZXJfbWlzc2luZyA+IHRsZW4pIHsKLQkJCQlpZiAoYXI5MTcwX25hZ19saW1pdGVyKGFyKSkgewotCQkJCQl3aXBoeV9lcnIoYXItPmh3LT53aXBoeSwKLQkJCQkJCSAgInBvc3NpYmxlIG11bHRpIHN0cmVhbSBjb3JydXB0aW9uIVxuIik7Ci0JCQkJCWdvdG8gZXJyX3RlbGx1c2VyOwotCQkJCX0gZWxzZQotCQkJCQlnb3RvIGVycl9zaWxlbnQ7Ci0JCQl9Ci0KLQkJCW1lbWNweShza2JfcHV0KGFyLT5yeF9mYWlsb3ZlciwgdGxlbiksIHRidWYsIHRsZW4pOwotCQkJYXItPnJ4X2ZhaWxvdmVyX21pc3NpbmcgLT0gdGxlbjsKLQotCQkJaWYgKGFyLT5yeF9mYWlsb3Zlcl9taXNzaW5nIDw9IDApIHsKLQkJCQkvKgotCQkJCSAqIG5lc3RlZCBhcjkxNzBfcnggY2FsbCEKLQkJCQkgKiB0ZXJtaW5hdGlvbiBpcyBndWFyYW50ZWVkLCBldmVuIHdoZW4gdGhlCi0JCQkJICogY29tYmluZWQgZnJhbWUgYWxzbyBoYXZlIGEgZWxlbWVudCB3aXRoCi0JCQkJICogYSBiYWQgdGFnLgotCQkJCSAqLwotCi0JCQkJYXItPnJ4X2ZhaWxvdmVyX21pc3NpbmcgPSAwOwotCQkJCWFyOTE3MF9yeChhciwgYXItPnJ4X2ZhaWxvdmVyKTsKLQotCQkJCXNrYl9yZXNldF90YWlsX3BvaW50ZXIoYXItPnJ4X2ZhaWxvdmVyKTsKLQkJCQlza2JfdHJpbShhci0+cnhfZmFpbG92ZXIsIDApOwotCQkJfQotCi0JCQlyZXR1cm4gOwotCQl9Ci0KLQkJLyogY2hlY2sgaWYgc3RyZWFtIGlzIGNsaXBwZWQgKi8KLQkJaWYgKHdsZW4gPiB0bGVuIC0gNCkgewotCQkJaWYgKGFyLT5yeF9mYWlsb3Zlcl9taXNzaW5nKSB7Ci0JCQkJLyogVE9ETzogaGFuZGxlIGRvdWJsZSBzdHJlYW0gY29ycnVwdGlvbi4gKi8KLQkJCQlpZiAoYXI5MTcwX25hZ19saW1pdGVyKGFyKSkgewotCQkJCQl3aXBoeV9lcnIoYXItPmh3LT53aXBoeSwKLQkJCQkJCSAgImRvdWJsZSByeCBzdHJlYW0gY29ycnVwdGlvbiFcbiIpOwotCQkJCQlnb3RvIGVycl90ZWxsdXNlcjsKLQkJCQl9IGVsc2UKLQkJCQkJZ290byBlcnJfc2lsZW50OwotCQkJfQotCi0JCQkvKgotCQkJICogc2F2ZSBpbmNvbXBsZXRlIGRhdGEgc2V0LgotCQkJICogdGhlIGZpcm13YXJlIHdpbGwgcmVzZW5kIHRoZSBtaXNzaW5nIGJpdHMgd2hlbgotCQkJICogdGhlIHJ4IC0gZGVzY3JpcHRvciBjb21lcyByb3VuZCBhZ2Fpbi4KLQkJCSAqLwotCi0JCQltZW1jcHkoc2tiX3B1dChhci0+cnhfZmFpbG92ZXIsIHRsZW4pLCB0YnVmLCB0bGVuKTsKLQkJCWFyLT5yeF9mYWlsb3Zlcl9taXNzaW5nID0gY2xlbiAtIHRsZW47Ci0JCQlyZXR1cm4gOwotCQl9Ci0JCXJlc3BsZW4gPSBjbGVuOwotCQlyZXNwYnVmID0gdGJ1ZiArIDQ7Ci0JCXRidWYgKz0gd2xlbiArIDQ7Ci0JCXRsZW4gLT0gd2xlbiArIDQ7Ci0KLQkJaSA9IDA7Ci0KLQkJLyogd2VpcmQgdGhpbmcsIGJ1dCB0aGlzIGlzIHRoZSBzYW1lIGluIHRoZSBvcmlnaW5hbCBkcml2ZXIgKi8KLQkJd2hpbGUgKHJlc3BsZW4gPiAyICYmIGkgPCAxMiAmJgotCQkgICAgICAgcmVzcGJ1ZlswXSA9PSAweGZmICYmIHJlc3BidWZbMV0gPT0gMHhmZikgewotCQkJaSArPSAyOwotCQkJcmVzcGxlbiAtPSAyOwotCQkJcmVzcGJ1ZiArPSAyOwotCQl9Ci0KLQkJaWYgKHJlc3BsZW4gPCA0KQotCQkJY29udGludWU7Ci0KLQkJLyogZm91bmQgdGhlIDYgKiAweGZmZmYgbWFya2VyPyAqLwotCQlpZiAoaSA9PSAxMikKLQkJCWFyOTE3MF9oYW5kbGVfY29tbWFuZF9yZXNwb25zZShhciwgcmVzcGJ1ZiwgcmVzcGxlbik7Ci0JCWVsc2UKLQkJCWFyOTE3MF9oYW5kbGVfbXBkdShhciwgcmVzcGJ1ZiwgY2xlbik7Ci0JfQotCi0JaWYgKHRsZW4pIHsKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXdpcGh5X2Vycihhci0+aHctPndpcGh5LAotCQkJCSAgIiVkIGJ5dGVzIG9mIHVucHJvY2Vzc2VkIGRhdGEgbGVmdCBpbiByeCBzdHJlYW0hXG4iLAotCQkJCSAgdGxlbik7Ci0KLQkJZ290byBlcnJfdGVsbHVzZXI7Ci0JfQotCi0JcmV0dXJuIDsKLQotZXJyX3RlbGx1c2VyOgotCXdpcGh5X2Vycihhci0+aHctPndpcGh5LAotCQkgICJkYW1hZ2VkIFJYIHN0cmVhbSBkYXRhIFt3YW50OiVkLCBkYXRhOiVkLCByeDolZCwgcGVuZGluZzolZCBdXG4iLAotCQkgIGNsZW4sIHdsZW4sIHRsZW4sIGFyLT5yeF9mYWlsb3Zlcl9taXNzaW5nKTsKLQotCWlmIChhci0+cnhfZmFpbG92ZXJfbWlzc2luZykKLQkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoInJ4YnVmOiIsIERVTVBfUFJFRklYX09GRlNFVCwKLQkJCQkgICAgIGFyLT5yeF9mYWlsb3Zlci0+ZGF0YSwKLQkJCQkgICAgIGFyLT5yeF9mYWlsb3Zlci0+bGVuKTsKLQotCXByaW50X2hleF9kdW1wX2J5dGVzKCJzdHJlYW06IiwgRFVNUF9QUkVGSVhfT0ZGU0VULAotCQkJICAgICBza2ItPmRhdGEsIHNrYi0+bGVuKTsKLQotCXdpcGh5X2Vycihhci0+aHctPndpcGh5LAotCQkgICJJZiB5b3Ugc2VlIHRoaXMgbWVzc2FnZSBmcmVxdWVudGx5LCBwbGVhc2UgY2hlY2sgeW91ciBoYXJkd2FyZSBhbmQgY2FibGVzLlxuIik7Ci0KLWVycl9zaWxlbnQ6Ci0JaWYgKGFyLT5yeF9mYWlsb3Zlcl9taXNzaW5nKSB7Ci0JCXNrYl9yZXNldF90YWlsX3BvaW50ZXIoYXItPnJ4X2ZhaWxvdmVyKTsKLQkJc2tiX3RyaW0oYXItPnJ4X2ZhaWxvdmVyLCAwKTsKLQkJYXItPnJ4X2ZhaWxvdmVyX21pc3NpbmcgPSAwOwotCX0KLX0KLQotI2RlZmluZSBBUjkxNzBfRklMTF9RVUVVRShxdWV1ZSwgYWlfZnMsIGN3bWluLCBjd21heCwgX3R4b3ApCQlcCi1kbyB7CQkJCQkJCQkJXAotCXF1ZXVlLmFpZnMgPSBhaV9mczsJCQkJCQlcCi0JcXVldWUuY3dfbWluID0gY3dtaW47CQkJCQkJXAotCXF1ZXVlLmN3X21heCA9IGN3bWF4OwkJCQkJCVwKLQlxdWV1ZS50eG9wID0gX3R4b3A7CQkJCQkJXAotfSB3aGlsZSAoMCkKLQotc3RhdGljIGludCBhcjkxNzBfb3Bfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCi17Ci0Jc3RydWN0IGFyOTE3MCAqYXIgPSBody0+cHJpdjsKLQlpbnQgZXJyLCBpOwotCi0JbXV0ZXhfbG9jaygmYXItPm11dGV4KTsKLQotCS8qIHJlaW5pdGlhbGl6ZSBxdWV1ZXMgc3RhdGlzdGljcyAqLwotCW1lbXNldCgmYXItPnR4X3N0YXRzLCAwLCBzaXplb2YoYXItPnR4X3N0YXRzKSk7Ci0JZm9yIChpID0gMDsgaSA8IF9fQVI5MTcwX05VTV9UWFE7IGkrKykKLQkJYXItPnR4X3N0YXRzW2ldLmxpbWl0ID0gQVI5MTcwX1RYUV9ERVBUSDsKLQotCS8qIHJlc2V0IFFvUyBkZWZhdWx0cyAqLwotCUFSOTE3MF9GSUxMX1FVRVVFKGFyLT5lZGNmWzBdLCAzLCAxNSwgMTAyMywgIDApOyAvKiBCRVNUIEVGRk9SVCovCi0JQVI5MTcwX0ZJTExfUVVFVUUoYXItPmVkY2ZbMV0sIDcsIDE1LCAxMDIzLCAgMCk7IC8qIEJBQ0tHUk9VTkQgKi8KLQlBUjkxNzBfRklMTF9RVUVVRShhci0+ZWRjZlsyXSwgMiwgNywgICAgMTUsIDk0KTsgLyogVklERU8gKi8KLQlBUjkxNzBfRklMTF9RVUVVRShhci0+ZWRjZlszXSwgMiwgMywgICAgIDcsIDQ3KTsgLyogVk9JQ0UgKi8KLQlBUjkxNzBfRklMTF9RVUVVRShhci0+ZWRjZls0XSwgMiwgMywgICAgIDcsICAwKTsgLyogU1BFQ0lBTCAqLwotCi0JLyogc2V0IHNhbmUgQU1QRFUgZGVmYXVsdHMgKi8KLQlhci0+Z2xvYmFsX2FtcGR1X2RlbnNpdHkgPSA2OwotCWFyLT5nbG9iYWxfYW1wZHVfZmFjdG9yID0gMzsKLQotCWFyLT5iYWRfaHdfbmFnZ2VyID0gamlmZmllczsKLQotCWVyciA9IGFyLT5vcGVuKGFyKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCWVyciA9IGFyOTE3MF9pbml0X21hYyhhcik7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSBhcjkxNzBfc2V0X3Fvcyhhcik7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSBhcjkxNzBfaW5pdF9waHkoYXIsIElFRUU4MDIxMV9CQU5EXzJHSFopOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gYXI5MTcwX2luaXRfcmYoYXIpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0JLyogc3RhcnQgRE1BICovCi0JZXJyID0gYXI5MTcwX3dyaXRlX3JlZyhhciwgMHgxYzNkMzAsIDB4MTAwKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCWFyLT5zdGF0ZSA9IEFSOTE3MF9TVEFSVEVEOwotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIGFyOTE3MF9vcF9zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewotCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlpZiAoSVNfU1RBUlRFRChhcikpCi0JCWFyLT5zdGF0ZSA9IEFSOTE3MF9JRExFOwotCi0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhci0+dHhfamFuaXRvcik7Ci0jaWZkZWYgQ09ORklHX0FSOTE3MF9MRURTCi0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhci0+bGVkX3dvcmspOwotI2VuZGlmCi0JY2FuY2VsX3dvcmtfc3luYygmYXItPmJlYWNvbl93b3JrKTsKLQotCW11dGV4X2xvY2soJmFyLT5tdXRleCk7Ci0KLQlpZiAoSVNfQUNDRVBUSU5HX0NNRChhcikpIHsKLQkJYXI5MTcwX3NldF9sZWRzX3N0YXRlKGFyLCAwKTsKLQotCQkvKiBzdG9wIERNQSAqLwotCQlhcjkxNzBfd3JpdGVfcmVnKGFyLCAweDFjM2QzMCwgMCk7Ci0JCWFyLT5zdG9wKGFyKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgX19BUjkxNzBfTlVNX1RYUTsgaSsrKSB7Ci0JCXNrYl9xdWV1ZV9wdXJnZSgmYXItPnR4X3BlbmRpbmdbaV0pOwotCQlza2JfcXVldWVfcHVyZ2UoJmFyLT50eF9zdGF0dXNbaV0pOwotCX0KLQotCW11dGV4X3VubG9jaygmYXItPm11dGV4KTsKLX0KLQotc3RhdGljIGludCBhcjkxNzBfdHhfcHJlcGFyZShzdHJ1Y3QgYXI5MTcwICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwotCXN0cnVjdCBhcjkxNzBfdHhfY29udHJvbCAqdHhjOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnR4cmF0ZTsKLQlzdHJ1Y3QgYXI5MTcwX3R4X2luZm8gKmFyaW5mbzsKLQl1bnNpZ25lZCBpbnQgcXVldWUgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKLQl1MTYga2V5dHlwZSA9IDA7Ci0JdTE2IGxlbiwgaWN2ID0gMDsKLQotCUJVSUxEX0JVR19PTihzaXplb2YoKmFyaW5mbykgPiBzaXplb2YoaW5mby0+cmF0ZV9kcml2ZXJfZGF0YSkpOwotCi0JaGRyID0gKHZvaWQgKilza2ItPmRhdGE7Ci0JaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlsZW4gPSBza2ItPmxlbjsKLQotCXR4YyA9ICh2b2lkICopc2tiX3B1c2goc2tiLCBzaXplb2YoKnR4YykpOwotCi0JaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5KSB7Ci0JCWljdiA9IGluZm8tPmNvbnRyb2wuaHdfa2V5LT5pY3ZfbGVuOwotCi0JCXN3aXRjaCAoaW5mby0+Y29udHJvbC5od19rZXktPmNpcGhlcikgewotCQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwOgotCQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDoKLQkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9US0lQOgotCQkJa2V5dHlwZSA9IEFSOTE3MF9UWF9NQUNfRU5DUl9SQzQ7Ci0JCQlicmVhazsKLQkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QOgotCQkJa2V5dHlwZSA9IEFSOTE3MF9UWF9NQUNfRU5DUl9BRVM7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCVdBUk5fT04oMSk7Ci0JCQlnb3RvIGVycl9vdXQ7Ci0JCX0KLQl9Ci0KLQkvKiBMZW5ndGggKi8KLQl0eGMtPmxlbmd0aCA9IGNwdV90b19sZTE2KGxlbiArIGljdiArIDQpOwotCi0JdHhjLT5tYWNfY29udHJvbCA9IGNwdV90b19sZTE2KEFSOTE3MF9UWF9NQUNfSFdfRFVSQVRJT04gfAotCQkJCSAgICAgICBBUjkxNzBfVFhfTUFDX0JBQ0tPRkYpOwotCXR4Yy0+bWFjX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoYXI5MTcwX3Fvc19od21hcFtxdWV1ZV0gPDwKLQkJCQkJQVI5MTcwX1RYX01BQ19RT1NfU0hJRlQpOwotCXR4Yy0+bWFjX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoa2V5dHlwZSk7Ci0JdHhjLT5waHlfY29udHJvbCA9IGNwdV90b19sZTMyKDApOwotCi0JaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spCi0JCXR4Yy0+bWFjX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoQVI5MTcwX1RYX01BQ19OT19BQ0spOwotCi0JdHhyYXRlID0gJmluZm8tPmNvbnRyb2wucmF0ZXNbMF07Ci0JaWYgKHR4cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUKQotCQl0eGMtPm1hY19jb250cm9sIHw9IGNwdV90b19sZTE2KEFSOTE3MF9UWF9NQUNfUFJPVF9DVFMpOwotCWVsc2UgaWYgKHR4cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFMpCi0JCXR4Yy0+bWFjX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoQVI5MTcwX1RYX01BQ19QUk9UX1JUUyk7Ci0KLQlhcmluZm8gPSAodm9pZCAqKWluZm8tPnJhdGVfZHJpdmVyX2RhdGE7Ci0JYXJpbmZvLT50aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoQVI5MTcwX1FVRVVFX1RJTUVPVVQpOwotCi0JaWYgKCEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykgJiYKLQkgICAgIChpc192YWxpZF9ldGhlcl9hZGRyKGllZWU4MDIxMV9nZXRfREEoaGRyKSkpKSB7Ci0JCS8qCi0JCSAqIFdBUk5JTkc6Ci0JCSAqIFB1dHRpbmcgdGhlIFFvUyBxdWV1ZSBiaXRzIGludG8gYW4gdW5leHBsb3JlZCB0ZXJyaXRvcnkgaXMKLQkJICogY2VydGFpbmx5IG5vdCBlbGVnYW50LgotCQkgKgotCQkgKiBJbiBteSBkZWZlbnNlOiBUaGlzIGlkZWEgcHJvdmlkZXMgYSByZWFzb25hYmxlIHdheSB0bwotCQkgKiBzbXVnZ2xlIHZhbHVhYmxlIGluZm9ybWF0aW9uIHRvIHRoZSB0eF9zdGF0dXMgY2FsbGJhY2suCi0JCSAqIEFsc28sIHRoZSBpZGVhIGJlaGluZCB0aGlzIGJpdC1hYnVzZSBjYW1lIHN0cmFpZ2h0IGZyb20KLQkJICogdGhlIG9yaWdpbmFsIGRyaXZlciBjb2RlLgotCQkgKi8KLQotCQl0eGMtPnBoeV9jb250cm9sIHw9Ci0JCQljcHVfdG9fbGUzMihxdWV1ZSA8PCBBUjkxNzBfVFhfUEhZX1FPU19TSElGVCk7Ci0KLQkJdHhjLT5tYWNfY29udHJvbCB8PSBjcHVfdG9fbGUxNihBUjkxNzBfVFhfTUFDX1JBVEVfUFJPQkUpOwotCX0KLQotCXJldHVybiAwOwotCi1lcnJfb3V0OgotCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCp0eGMpKTsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIHZvaWQgYXI5MTcwX3R4X3ByZXBhcmVfcGh5KHN0cnVjdCBhcjkxNzAgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBhcjkxNzBfdHhfY29udHJvbCAqdHhjOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUgPSBOVUxMOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqdHhyYXRlOwotCXUzMiBwb3dlciwgY2hhaW5zOwotCi0JdHhjID0gKHZvaWQgKikgc2tiLT5kYXRhOwotCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0JdHhyYXRlID0gJmluZm8tPmNvbnRyb2wucmF0ZXNbMF07Ci0KLQlpZiAodHhyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19HUkVFTl9GSUVMRCkKLQkJdHhjLT5waHlfY29udHJvbCB8PSBjcHVfdG9fbGUzMihBUjkxNzBfVFhfUEhZX0dSRUVORklFTEQpOwotCi0JaWYgKHR4cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFKQotCQl0eGMtPnBoeV9jb250cm9sIHw9IGNwdV90b19sZTMyKEFSOTE3MF9UWF9QSFlfU0hPUlRfUFJFQU1CTEUpOwotCi0JaWYgKHR4cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIKQotCQl0eGMtPnBoeV9jb250cm9sIHw9IGNwdV90b19sZTMyKEFSOTE3MF9UWF9QSFlfQldfNDBNSFopOwotCS8qIHRoaXMgd29ya3MgYmVjYXVzZSA0MCBNSHogaXMgMiBhbmQgZHVwIGlzIDMgKi8KLQlpZiAodHhyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19EVVBfREFUQSkKLQkJdHhjLT5waHlfY29udHJvbCB8PSBjcHVfdG9fbGUzMihBUjkxNzBfVFhfUEhZX0JXXzQwTUhaX0RVUCk7Ci0KLQlpZiAodHhyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSSkKLQkJdHhjLT5waHlfY29udHJvbCB8PSBjcHVfdG9fbGUzMihBUjkxNzBfVFhfUEhZX1NIT1JUX0dJKTsKLQotCWlmICh0eHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX01DUykgewotCQl1MzIgciA9IHR4cmF0ZS0+aWR4OwotCQl1OCAqdHhwb3dlcjsKLQotCQkvKiBoZWF2eSBjbGlwIGNvbnRyb2wgKi8KLQkJdHhjLT5waHlfY29udHJvbCB8PSBjcHVfdG9fbGUzMigociAmIDB4NykgPDwgNyk7Ci0KLQkJciA8PD0gQVI5MTcwX1RYX1BIWV9NQ1NfU0hJRlQ7Ci0JCUJVR19PTihyICYgfkFSOTE3MF9UWF9QSFlfTUNTX01BU0spOwotCi0JCXR4Yy0+cGh5X2NvbnRyb2wgfD0gY3B1X3RvX2xlMzIociAmIEFSOTE3MF9UWF9QSFlfTUNTX01BU0spOwotCQl0eGMtPnBoeV9jb250cm9sIHw9IGNwdV90b19sZTMyKEFSOTE3MF9UWF9QSFlfTU9EX0hUKTsKLQotCQlpZiAodHhyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ180MF9NSFpfV0lEVEgpIHsKLQkJCWlmIChpbmZvLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCi0JCQkJdHhwb3dlciA9IGFyLT5wb3dlcl81R19odDQwOwotCQkJZWxzZQotCQkJCXR4cG93ZXIgPSBhci0+cG93ZXJfMkdfaHQ0MDsKLQkJfSBlbHNlIHsKLQkJCWlmIChpbmZvLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCi0JCQkJdHhwb3dlciA9IGFyLT5wb3dlcl81R19odDIwOwotCQkJZWxzZQotCQkJCXR4cG93ZXIgPSBhci0+cG93ZXJfMkdfaHQyMDsKLQkJfQotCi0JCXBvd2VyID0gdHhwb3dlclsodHhyYXRlLT5pZHgpICYgN107Ci0JfSBlbHNlIHsKLQkJdTggKnR4cG93ZXI7Ci0JCXUzMiBtb2Q7Ci0JCXUzMiBwaHlyYXRlOwotCQl1OCBpZHggPSB0eHJhdGUtPmlkeDsKLQotCQlpZiAoaW5mby0+YmFuZCAhPSBJRUVFODAyMTFfQkFORF8yR0haKSB7Ci0JCQlpZHggKz0gNDsKLQkJCXR4cG93ZXIgPSBhci0+cG93ZXJfNUdfbGVnOwotCQkJbW9kID0gQVI5MTcwX1RYX1BIWV9NT0RfT0ZETTsKLQkJfSBlbHNlIHsKLQkJCWlmIChpZHggPCA0KSB7Ci0JCQkJdHhwb3dlciA9IGFyLT5wb3dlcl8yR19jY2s7Ci0JCQkJbW9kID0gQVI5MTcwX1RYX1BIWV9NT0RfQ0NLOwotCQkJfSBlbHNlIHsKLQkJCQltb2QgPSBBUjkxNzBfVFhfUEhZX01PRF9PRkRNOwotCQkJCXR4cG93ZXIgPSBhci0+cG93ZXJfMkdfb2ZkbTsKLQkJCX0KLQkJfQotCi0JCXJhdGUgPSAmX19hcjkxNzBfcmF0ZXRhYmxlW2lkeF07Ci0KLQkJcGh5cmF0ZSA9IHJhdGUtPmh3X3ZhbHVlICYgMHhGOwotCQlwb3dlciA9IHR4cG93ZXJbKHJhdGUtPmh3X3ZhbHVlICYgMHgzMCkgPj4gNF07Ci0JCXBoeXJhdGUgPDw9IEFSOTE3MF9UWF9QSFlfTUNTX1NISUZUOwotCi0JCXR4Yy0+cGh5X2NvbnRyb2wgfD0gY3B1X3RvX2xlMzIobW9kKTsKLQkJdHhjLT5waHlfY29udHJvbCB8PSBjcHVfdG9fbGUzMihwaHlyYXRlKTsKLQl9Ci0KLQlwb3dlciA8PD0gQVI5MTcwX1RYX1BIWV9UWF9QV1JfU0hJRlQ7Ci0JcG93ZXIgJj0gQVI5MTcwX1RYX1BIWV9UWF9QV1JfTUFTSzsKLQl0eGMtPnBoeV9jb250cm9sIHw9IGNwdV90b19sZTMyKHBvd2VyKTsKLQotCS8qIHNldCBUWCBjaGFpbnMgKi8KLQlpZiAoYXItPmVlcHJvbS50eF9tYXNrID09IDEpIHsKLQkJY2hhaW5zID0gQVI5MTcwX1RYX1BIWV9UWENIQUlOXzE7Ci0JfSBlbHNlIHsKLQkJY2hhaW5zID0gQVI5MTcwX1RYX1BIWV9UWENIQUlOXzI7Ci0KLQkJLyogPj0gMzZNIGxlZ2FjeSBPRkRNIC0gdXNlIG9ubHkgb25lIGNoYWluICovCi0JCWlmIChyYXRlICYmIHJhdGUtPmJpdHJhdGUgPj0gMzYwKQotCQkJY2hhaW5zID0gQVI5MTcwX1RYX1BIWV9UWENIQUlOXzE7Ci0JfQotCXR4Yy0+cGh5X2NvbnRyb2wgfD0gY3B1X3RvX2xlMzIoY2hhaW5zIDw8IEFSOTE3MF9UWF9QSFlfVFhDSEFJTl9TSElGVCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFyOTE3MF90eChzdHJ1Y3QgYXI5MTcwICphcikKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwotCXN0cnVjdCBhcjkxNzBfdHhfaW5mbyAqYXJpbmZvOwotCXVuc2lnbmVkIGludCBpLCBmcmFtZXMsIGZyYW1lc19mYWlsZWQsIHJlbWFpbmluZ19zcGFjZTsKLQlpbnQgZXJyOwotCWJvb2wgc2NoZWR1bGVfZ2FyYmFnZWNvbGxlY3RvciA9IGZhbHNlOwotCi0JQlVJTERfQlVHX09OKHNpemVvZigqYXJpbmZvKSA+IHNpemVvZihpbmZvLT5yYXRlX2RyaXZlcl9kYXRhKSk7Ci0KLQlpZiAodW5saWtlbHkoIUlTX1NUQVJURUQoYXIpKSkKLQkJcmV0dXJuIDsKLQotCXJlbWFpbmluZ19zcGFjZSA9IEFSOTE3MF9UWF9NQVhfUEVORElORzsKLQotCWZvciAoaSA9IDA7IGkgPCBfX0FSOTE3MF9OVU1fVFhROyBpKyspIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFyLT50eF9zdGF0c19sb2NrLCBmbGFncyk7Ci0JCWZyYW1lcyA9IG1pbihhci0+dHhfc3RhdHNbaV0ubGltaXQgLSBhci0+dHhfc3RhdHNbaV0ubGVuLAotCQkJICAgICBza2JfcXVldWVfbGVuKCZhci0+dHhfcGVuZGluZ1tpXSkpOwotCi0JCWlmIChyZW1haW5pbmdfc3BhY2UgPCBmcmFtZXMpIHsKLSNpZmRlZiBBUjkxNzBfUVVFVUVfREVCVUcKLQkJCXdpcGh5X2RlYnVnKGFyLT5ody0+d2lwaHksCi0JCQkJICAgICJ0eCBxdW90YSByZWFjaGVkIHF1ZXVlOiVkLCAiCi0JCQkJICAgICJyZW1haW5pbmcgc2xvdHM6JWQsIG5lZWRlZDolZFxuIiwKLQkJCQkgICAgaSwgcmVtYWluaW5nX3NwYWNlLCBmcmFtZXMpOwotI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9ERUJVRyAqLwotCQkJZnJhbWVzID0gcmVtYWluaW5nX3NwYWNlOwotCQl9Ci0KLQkJYXItPnR4X3N0YXRzW2ldLmxlbiArPSBmcmFtZXM7Ci0JCWFyLT50eF9zdGF0c1tpXS5jb3VudCArPSBmcmFtZXM7Ci0JCWlmIChhci0+dHhfc3RhdHNbaV0ubGVuID49IGFyLT50eF9zdGF0c1tpXS5saW1pdCkgewotI2lmZGVmIEFSOTE3MF9RVUVVRV9ERUJVRwotCQkJd2lwaHlfZGVidWcoYXItPmh3LT53aXBoeSwgInF1ZXVlICVkIGZ1bGxcbiIsIGkpOwotCQkJd2lwaHlfZGVidWcoYXItPmh3LT53aXBoeSwgInN0dWNrIGZyYW1lczogPT09PlxuIik7Ci0JCQlhcjkxNzBfZHVtcF90eHF1ZXVlKGFyLCAmYXItPnR4X3BlbmRpbmdbaV0pOwotCQkJYXI5MTcwX2R1bXBfdHhxdWV1ZShhciwgJmFyLT50eF9zdGF0dXNbaV0pOwotI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9ERUJVRyAqLwotCi0jaWZkZWYgQVI5MTcwX1FVRVVFX1NUT1BfREVCVUcKLQkJCXdpcGh5X2RlYnVnKGFyLT5ody0+d2lwaHksICJzdG9wIHF1ZXVlICVkXG4iLCBpKTsKLQkJCV9fYXI5MTcwX2R1bXBfdHhzdGF0cyhhcik7Ci0jZW5kaWYgLyogQVI5MTcwX1FVRVVFX1NUT1BfREVCVUcgKi8KLQkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKGFyLT5odywgaSk7Ci0JCX0KLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhci0+dHhfc3RhdHNfbG9jaywgZmxhZ3MpOwotCi0JCWlmICghZnJhbWVzKQotCQkJY29udGludWU7Ci0KLQkJZnJhbWVzX2ZhaWxlZCA9IDA7Ci0JCXdoaWxlIChmcmFtZXMpIHsKLQkJCXNrYiA9IHNrYl9kZXF1ZXVlKCZhci0+dHhfcGVuZGluZ1tpXSk7Ci0JCQlpZiAodW5saWtlbHkoIXNrYikpIHsKLQkJCQlmcmFtZXNfZmFpbGVkICs9IGZyYW1lczsKLQkJCQlmcmFtZXMgPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCQkJYXJpbmZvID0gKHZvaWQgKikgaW5mby0+cmF0ZV9kcml2ZXJfZGF0YTsKLQotCQkJLyogVE9ETzogY2FuY2VsIHN0dWNrIGZyYW1lcyAqLwotCQkJYXJpbmZvLT50aW1lb3V0ID0gamlmZmllcyArCi0JCQkJCSAgbXNlY3NfdG9famlmZmllcyhBUjkxNzBfVFhfVElNRU9VVCk7Ci0KLSNpZmRlZiBBUjkxNzBfUVVFVUVfREVCVUcKLQkJCXdpcGh5X2RlYnVnKGFyLT5ody0+d2lwaHksICJzZW5kIGZyYW1lIHE6JWQgPT5cbiIsIGkpOwotCQkJYXI5MTcwX3ByaW50X3R4aGVhZGVyKGFyLCBza2IpOwotI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9ERUJVRyAqLwotCi0JCQllcnIgPSBhci0+dHgoYXIsIHNrYik7Ci0JCQlpZiAodW5saWtlbHkoZXJyKSkgewotCQkJCWZyYW1lc19mYWlsZWQrKzsKLQkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQkJfSBlbHNlIHsKLQkJCQlyZW1haW5pbmdfc3BhY2UtLTsKLQkJCQlzY2hlZHVsZV9nYXJiYWdlY29sbGVjdG9yID0gdHJ1ZTsKLQkJCX0KLQotCQkJZnJhbWVzLS07Ci0JCX0KLQotI2lmZGVmIEFSOTE3MF9RVUVVRV9ERUJVRwotCQl3aXBoeV9kZWJ1Zyhhci0+aHctPndpcGh5LAotCQkJICAgICJhcjkxNzBfdHggcmVwb3J0IGZvciBxdWV1ZSAlZFxuIiwgaSk7Ci0KLQkJd2lwaHlfZGVidWcoYXItPmh3LT53aXBoeSwKLQkJCSAgICAidW5wcm9jZXNzZWQgcGVuZGluZyBmcmFtZXMgbGVmdDpcbiIpOwotCQlhcjkxNzBfZHVtcF90eHF1ZXVlKGFyLCAmYXItPnR4X3BlbmRpbmdbaV0pOwotI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9ERUJVRyAqLwotCi0JCWlmICh1bmxpa2VseShmcmFtZXNfZmFpbGVkKSkgewotI2lmZGVmIEFSOTE3MF9RVUVVRV9ERUJVRwotCQkJd2lwaHlfZGVidWcoYXItPmh3LT53aXBoeSwKLQkJCQkgICAgImZyYW1lcyBmYWlsZWQgJWQgPT5cbiIsIGZyYW1lc19mYWlsZWQpOwotI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9ERUJVRyAqLwotCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXItPnR4X3N0YXRzX2xvY2ssIGZsYWdzKTsKLQkJCWFyLT50eF9zdGF0c1tpXS5sZW4gLT0gZnJhbWVzX2ZhaWxlZDsKLQkJCWFyLT50eF9zdGF0c1tpXS5jb3VudCAtPSBmcmFtZXNfZmFpbGVkOwotI2lmZGVmIEFSOTE3MF9RVUVVRV9TVE9QX0RFQlVHCi0JCQl3aXBoeV9kZWJ1Zyhhci0+aHctPndpcGh5LCAid2FrZSBxdWV1ZSAlZFxuIiwgaSk7Ci0JCQlfX2FyOTE3MF9kdW1wX3R4c3RhdHMoYXIpOwotI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9TVE9QX0RFQlVHICovCi0JCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShhci0+aHcsIGkpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXItPnR4X3N0YXRzX2xvY2ssIGZsYWdzKTsKLQkJfQotCX0KLQotCWlmICghc2NoZWR1bGVfZ2FyYmFnZWNvbGxlY3RvcikKLQkJcmV0dXJuOwotCi0JaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhhci0+aHcsCi0JCQkJICAgICAmYXItPnR4X2phbml0b3IsCi0JCQkJICAgICBtc2Vjc190b19qaWZmaWVzKEFSOTE3MF9KQU5JVE9SX0RFTEFZKSk7Ci19Ci0KLXZvaWQgYXI5MTcwX29wX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwotCXVuc2lnbmVkIGludCBxdWV1ZTsKLQotCWlmICh1bmxpa2VseSghSVNfU1RBUlRFRChhcikpKQotCQlnb3RvIGVycl9mcmVlOwotCi0JaWYgKHVubGlrZWx5KGFyOTE3MF90eF9wcmVwYXJlKGFyLCBza2IpKSkKLQkJZ290byBlcnJfZnJlZTsKLQotCXF1ZXVlID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7Ci0JaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlhcjkxNzBfdHhfcHJlcGFyZV9waHkoYXIsIHNrYik7Ci0Jc2tiX3F1ZXVlX3RhaWwoJmFyLT50eF9wZW5kaW5nW3F1ZXVlXSwgc2tiKTsKLQotCWFyOTE3MF90eChhcik7Ci0JcmV0dXJuOwotCi1lcnJfZnJlZToKLQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotfQotCi1zdGF0aWMgaW50IGFyOTE3MF9vcF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCi17Ci0Jc3RydWN0IGFyOTE3MCAqYXIgPSBody0+cHJpdjsKLQlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gJmFyLT5jb21tb247Ci0JaW50IGVyciA9IDA7Ci0KLQltdXRleF9sb2NrKCZhci0+bXV0ZXgpOwotCi0JaWYgKGFyLT52aWYpIHsKLQkJZXJyID0gLUVCVVNZOwotCQlnb3RvIHVubG9jazsKLQl9Ci0KLQlhci0+dmlmID0gdmlmOwotCW1lbWNweShjb21tb24tPm1hY2FkZHIsIHZpZi0+YWRkciwgRVRIX0FMRU4pOwotCi0JaWYgKG1vZHBhcmFtX25vaHdjcnlwdCB8fCAoYXItPnZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSkgewotCQlhci0+cnhfc29mdHdhcmVfZGVjcnlwdGlvbiA9IHRydWU7Ci0JCWFyLT5kaXNhYmxlX29mZmxvYWQgPSB0cnVlOwotCX0KLQotCWFyLT5jdXJfZmlsdGVyID0gMDsKLQllcnIgPSBhcjkxNzBfdXBkYXRlX2ZyYW1lX2ZpbHRlcihhciwgQVI5MTcwX01BQ19SRUdfRlRGX0RFRkFVTFRTKTsKLQlpZiAoZXJyKQotCQlnb3RvIHVubG9jazsKLQotCWVyciA9IGFyOTE3MF9zZXRfb3BlcmF0aW5nX21vZGUoYXIpOwotCi11bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIGFyOTE3MF9vcF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQotewotCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7Ci0KLQltdXRleF9sb2NrKCZhci0+bXV0ZXgpOwotCWFyLT52aWYgPSBOVUxMOwotCWFyOTE3MF91cGRhdGVfZnJhbWVfZmlsdGVyKGFyLCAwKTsKLQlhcjkxNzBfc2V0X2JlYWNvbl90aW1lcnMoYXIpOwotCWRldl9rZnJlZV9za2IoYXItPmJlYWNvbik7Ci0JYXItPmJlYWNvbiA9IE5VTEw7Ci0JYXItPnNuaWZmZXJfZW5hYmxlZCA9IGZhbHNlOwotCWFyLT5yeF9zb2Z0d2FyZV9kZWNyeXB0aW9uID0gZmFsc2U7Ci0JYXI5MTcwX3NldF9vcGVyYXRpbmdfbW9kZShhcik7Ci0JbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOwotfQotCi1zdGF0aWMgaW50IGFyOTE3MF9vcF9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKQotewotCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7Ci0JaW50IGVyciA9IDA7Ci0KLQltdXRleF9sb2NrKCZhci0+bXV0ZXgpOwotCi0JaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfTElTVEVOX0lOVEVSVkFMKSB7Ci0JCS8qIFRPRE8gKi8KLQkJZXJyID0gMDsKLQl9Ci0KLQlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUykgewotCQkvKiBUT0RPICovCi0JCWVyciA9IDA7Ci0JfQotCi0JaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUE9XRVIpIHsKLQkJLyogVE9ETyAqLwotCQllcnIgPSAwOwotCX0KLQotCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JFVFJZX0xJTUlUUykgewotCQkvKgotCQkgKiBpcyBpdCBsb25nX2ZyYW1lX21heF90eF9jb3VudCBvciBzaG9ydF9mcmFtZV9tYXhfdHhfY291bnQ/Ci0JCSAqLwotCi0JCWVyciA9IGFyOTE3MF9zZXRfaHdyZXRyeV9saW1pdChhciwKLQkJCWFyLT5ody0+Y29uZi5sb25nX2ZyYW1lX21heF90eF9jb3VudCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMKSB7Ci0KLQkJLyogYWRqdXN0IHNsb3QgdGltZSBmb3IgNSBHSHogKi8KLQkJZXJyID0gYXI5MTcwX3NldF9zbG90X3RpbWUoYXIpOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXQ7Ci0KLQkJZXJyID0gYXI5MTcwX3NldF9keW5fc2lmc19hY2soYXIpOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXQ7Ci0KLQkJZXJyID0gYXI5MTcwX3NldF9jaGFubmVsKGFyLCBody0+Y29uZi5jaGFubmVsLAotCQkJCUFSOTE3MF9SRklfTk9ORSwKLQkJCQlubDgwMjExX3RvX2FyOTE3MChody0+Y29uZi5jaGFubmVsX3R5cGUpKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gb3V0OwotCX0KLQotb3V0OgotCW11dGV4X3VubG9jaygmYXItPm11dGV4KTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdTY0IGFyOTE3MF9vcF9wcmVwYXJlX211bHRpY2FzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKm1jX2xpc3QpCi17Ci0JdTY0IG1jaGFzaDsKLQlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOwotCi0JLyogYWx3YXlzIGdldCBicm9hZGNhc3QgZnJhbWVzICovCi0JbWNoYXNoID0gMVVMTCA8PCAoMHhmZiA+PiAyKTsKLQotCW5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIG1jX2xpc3QpCi0JCW1jaGFzaCB8PSAxVUxMIDw8IChoYS0+YWRkcls1XSA+PiAyKTsKLQotCXJldHVybiBtY2hhc2g7Ci19Ci0KLXN0YXRpYyB2b2lkIGFyOTE3MF9vcF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKLQkJCQkgICAgICAgdW5zaWduZWQgaW50ICpuZXdfZmxhZ3MsCi0JCQkJICAgICAgIHU2NCBtdWx0aWNhc3QpCi17Ci0Jc3RydWN0IGFyOTE3MCAqYXIgPSBody0+cHJpdjsKLQotCWlmICh1bmxpa2VseSghSVNfQUNDRVBUSU5HX0NNRChhcikpKQotCQlyZXR1cm4gOwotCi0JbXV0ZXhfbG9jaygmYXItPm11dGV4KTsKLQotCS8qIG1hc2sgc3VwcG9ydGVkIGZsYWdzICovCi0JKm5ld19mbGFncyAmPSBGSUZfQUxMTVVMVEkgfCBGSUZfQ09OVFJPTCB8IEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDIHwKLQkJICAgICAgRklGX1BST01JU0NfSU5fQlNTIHwgRklGX0ZDU0ZBSUwgfCBGSUZfUExDUEZBSUw7Ci0JYXItPmZpbHRlcl9zdGF0ZSA9ICpuZXdfZmxhZ3M7Ci0JLyoKLQkgKiBXZSBjYW4gc3VwcG9ydCBtb3JlIGJ5IHNldHRpbmcgdGhlIHNuaWZmZXIgYml0IGFuZAotCSAqIHRoZW4gY2hlY2tpbmcgdGhlIGVycm9yIGZsYWdzLCBsYXRlci4KLQkgKi8KLQotCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0FMTE1VTFRJICYmICpuZXdfZmxhZ3MgJiBGSUZfQUxMTVVMVEkpCi0JCW11bHRpY2FzdCA9IH4wVUxMOwotCi0JaWYgKG11bHRpY2FzdCAhPSBhci0+Y3VyX21jX2hhc2gpCi0JCWFyOTE3MF91cGRhdGVfbXVsdGljYXN0KGFyLCBtdWx0aWNhc3QpOwotCi0JaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfQ09OVFJPTCkgewotCQl1MzIgZmlsdGVyID0gQVI5MTcwX01BQ19SRUdfRlRGX1BTUE9MTCB8Ci0JCQkgICAgIEFSOTE3MF9NQUNfUkVHX0ZURl9SVFMgfAotCQkJICAgICBBUjkxNzBfTUFDX1JFR19GVEZfQ1RTIHwKLQkJCSAgICAgQVI5MTcwX01BQ19SRUdfRlRGX0FDSyB8Ci0JCQkgICAgIEFSOTE3MF9NQUNfUkVHX0ZURl9DRkUgfAotCQkJICAgICBBUjkxNzBfTUFDX1JFR19GVEZfQ0ZFX0FDSzsKLQotCQlpZiAoKm5ld19mbGFncyAmIEZJRl9DT05UUk9MKQotCQkJZmlsdGVyIHw9IGFyLT5jdXJfZmlsdGVyOwotCQllbHNlCi0JCQlmaWx0ZXIgJj0gKH5hci0+Y3VyX2ZpbHRlcik7Ci0KLQkJYXI5MTcwX3VwZGF0ZV9mcmFtZV9maWx0ZXIoYXIsIGZpbHRlcik7Ci0JfQotCi0JaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpIHsKLQkJYXItPnNuaWZmZXJfZW5hYmxlZCA9ICgoKm5ld19mbGFncykgJiBGSUZfUFJPTUlTQ19JTl9CU1MpICE9IDA7Ci0JCWFyOTE3MF9zZXRfb3BlcmF0aW5nX21vZGUoYXIpOwotCX0KLQotCW11dGV4X3VubG9jaygmYXItPm11dGV4KTsKLX0KLQotCi1zdGF0aWMgdm9pZCBhcjkxNzBfb3BfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYsCi0JCQkJICAgICAgIHUzMiBjaGFuZ2VkKQotewotCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7Ci0Jc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9ICZhci0+Y29tbW9uOwotCWludCBlcnIgPSAwOwotCi0JbXV0ZXhfbG9jaygmYXItPm11dGV4KTsKLQotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQlNTSUQpIHsKLQkJbWVtY3B5KGNvbW1vbi0+Y3VyYnNzaWQsIGJzc19jb25mLT5ic3NpZCwgRVRIX0FMRU4pOwotCQllcnIgPSBhcjkxNzBfc2V0X29wZXJhdGluZ19tb2RlKGFyKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gb3V0OwotCX0KLQotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQpCi0JCWFyLT5lbmFibGVfYmVhY29uID0gYnNzX2NvbmYtPmVuYWJsZV9iZWFjb247Ci0KLQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTikgewotCQllcnIgPSBhcjkxNzBfdXBkYXRlX2JlYWNvbihhcik7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoY2hhbmdlZCAmIChCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCB8IEJTU19DSEFOR0VEX0JFQUNPTiB8Ci0JCSAgICAgICBCU1NfQ0hBTkdFRF9CRUFDT05fSU5UKSkgewotCQllcnIgPSBhcjkxNzBfc2V0X2JlYWNvbl90aW1lcnMoYXIpOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9BU1NPQykgewotI2lmbmRlZiBDT05GSUdfQVI5MTcwX0xFRFMKLQkJLyogZW5hYmxlIGFzc29jIExFRC4gKi8KLQkJZXJyID0gYXI5MTcwX3NldF9sZWRzX3N0YXRlKGFyLCBic3NfY29uZi0+YXNzb2MgPyAyIDogMCk7Ci0jZW5kaWYgLyogQ09ORklHX0FSOTE3MF9MRURTICovCi0JfQotCi0JaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9IVCkgewotCQkvKiBUT0RPICovCi0JCWVyciA9IDA7Ci0JfQotCi0JaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9FUlBfU0xPVCkgewotCQllcnIgPSBhcjkxNzBfc2V0X3Nsb3RfdGltZShhcik7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JBU0lDX1JBVEVTKSB7Ci0JCWVyciA9IGFyOTE3MF9zZXRfYmFzaWNfcmF0ZXMoYXIpOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXQ7Ci0JfQotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOwotfQotCi1zdGF0aWMgdTY0IGFyOTE3MF9vcF9nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewotCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7Ci0JaW50IGVycjsKLQl1NjQgdHNmOwotI2RlZmluZSBOUiAzCi0Jc3RhdGljIGNvbnN0IHUzMiBhZGRyW05SXSA9IHsgQVI5MTcwX01BQ19SRUdfVFNGX0gsCi0JCQkJICAgIEFSOTE3MF9NQUNfUkVHX1RTRl9MLAotCQkJCSAgICBBUjkxNzBfTUFDX1JFR19UU0ZfSCB9OwotCXUzMiB2YWxbTlJdOwotCWludCBsb29wcyA9IDA7Ci0KLQltdXRleF9sb2NrKCZhci0+bXV0ZXgpOwotCi0Jd2hpbGUgKGxvb3BzKysgPCAxMCkgewotCQllcnIgPSBhcjkxNzBfcmVhZF9tcmVnKGFyLCBOUiwgYWRkciwgdmFsKTsKLQkJaWYgKGVyciB8fCB2YWxbMF0gPT0gdmFsWzJdKQotCQkJYnJlYWs7Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOwotCi0JaWYgKFdBUk5fT04oZXJyKSkKLQkJcmV0dXJuIDA7Ci0JdHNmID0gdmFsWzBdOwotCXRzZiA9ICh0c2YgPDwgMzIpIHwgdmFsWzFdOwotCXJldHVybiB0c2Y7Ci0jdW5kZWYgTlIKLX0KLQotc3RhdGljIGludCBhcjkxNzBfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsCi0JCQkgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCi0JCQkgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKLXsKLQlzdHJ1Y3QgYXI5MTcwICphciA9IGh3LT5wcml2OwotCWludCBlcnIgPSAwLCBpOwotCXU4IGt0eXBlOwotCi0JaWYgKCghYXItPnZpZikgfHwgKGFyLT5kaXNhYmxlX29mZmxvYWQpKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlzd2l0Y2ggKGtleS0+Y2lwaGVyKSB7Ci0JY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDoKLQkJa3R5cGUgPSBBUjkxNzBfRU5DX0FMR19XRVA2NDsKLQkJYnJlYWs7Ci0JY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ6Ci0JCWt0eXBlID0gQVI5MTcwX0VOQ19BTEdfV0VQMTI4OwotCQlicmVhazsKLQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVA6Ci0JCWt0eXBlID0gQVI5MTcwX0VOQ19BTEdfVEtJUDsKLQkJYnJlYWs7Ci0JY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QOgotCQlrdHlwZSA9IEFSOTE3MF9FTkNfQUxHX0FFU0NDTVA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0KLQltdXRleF9sb2NrKCZhci0+bXV0ZXgpOwotCWlmIChjbWQgPT0gU0VUX0tFWSkgewotCQlpZiAodW5saWtlbHkoIUlTX1NUQVJURUQoYXIpKSkgewotCQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCS8qIGdyb3VwIGtleXMgbmVlZCBhbGwtemVyb2VzIGFkZHJlc3MgKi8KLQkJaWYgKCEoa2V5LT5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSkpCi0JCQlzdGEgPSBOVUxMOwotCi0JCWlmIChrZXktPmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFKSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykKLQkJCQlpZiAoIShhci0+dXNlZGtleXMgJiBCSVQoaSkpKQotCQkJCQlicmVhazsKLQkJCWlmIChpID09IDY0KSB7Ci0JCQkJYXItPnJ4X3NvZnR3YXJlX2RlY3J5cHRpb24gPSB0cnVlOwotCQkJCWFyOTE3MF9zZXRfb3BlcmF0aW5nX21vZGUoYXIpOwotCQkJCWVyciA9IC1FTk9TUEM7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpID0gNjQgKyBrZXktPmtleWlkeDsKLQkJfQotCi0JCWtleS0+aHdfa2V5X2lkeCA9IGk7Ci0KLQkJZXJyID0gYXI5MTcwX3VwbG9hZF9rZXkoYXIsIGksIHN0YSA/IHN0YS0+YWRkciA6IE5VTEwsIGt0eXBlLCAwLAotCQkJCQlrZXktPmtleSwgbWluX3QodTgsIDE2LCBrZXktPmtleWxlbikpOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXQ7Ci0KLQkJaWYgKGtleS0+Y2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVApIHsKLQkJCWVyciA9IGFyOTE3MF91cGxvYWRfa2V5KGFyLCBpLCBzdGEgPyBzdGEtPmFkZHIgOiBOVUxMLAotCQkJCQkJa3R5cGUsIDEsIGtleS0+a2V5ICsgMTYsIDE2KTsKLQkJCWlmIChlcnIpCi0JCQkJZ290byBvdXQ7Ci0KLQkJCS8qCi0JCQkgKiBoYXJkd2FyZSBpcyBub3QgY2FwYWJsZSBnZW5lcmF0aW5nIHRoZSBNTUlDCi0JCQkgKiBmb3IgZnJhZ21lbnRlZCBmcmFtZXMhCi0JCQkgKi8KLQkJCWtleS0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUM7Ci0JCX0KLQotCQlpZiAoaSA8IDY0KQotCQkJYXItPnVzZWRrZXlzIHw9IEJJVChpKTsKLQotCQlrZXktPmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVjsKLQl9IGVsc2UgewotCQlpZiAodW5saWtlbHkoIUlTX1NUQVJURUQoYXIpKSkgewotCQkJLyogVGhlIGRldmljZSBpcyBnb25lLi4uIHRvZ2V0aGVyIHdpdGggdGhlIGtleSA7LSkgKi8KLQkJCWVyciA9IDA7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCWVyciA9IGFyOTE3MF9kaXNhYmxlX2tleShhciwga2V5LT5od19rZXlfaWR4KTsKLQkJaWYgKGVycikKLQkJCWdvdG8gb3V0OwotCi0JCWlmIChrZXktPmh3X2tleV9pZHggPCA2NCkgewotCQkJYXItPnVzZWRrZXlzICY9IH5CSVQoa2V5LT5od19rZXlfaWR4KTsKLQkJfSBlbHNlIHsKLQkJCWVyciA9IGFyOTE3MF91cGxvYWRfa2V5KGFyLCBrZXktPmh3X2tleV9pZHgsIE5VTEwsCi0JCQkJCQlBUjkxNzBfRU5DX0FMR19OT05FLCAwLAotCQkJCQkJTlVMTCwgMCk7Ci0JCQlpZiAoZXJyKQotCQkJCWdvdG8gb3V0OwotCi0JCQlpZiAoa2V5LT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUCkgewotCQkJCWVyciA9IGFyOTE3MF91cGxvYWRfa2V5KGFyLCBrZXktPmh3X2tleV9pZHgsCi0JCQkJCQkJTlVMTCwKLQkJCQkJCQlBUjkxNzBfRU5DX0FMR19OT05FLCAxLAotCQkJCQkJCU5VTEwsIDApOwotCQkJCWlmIChlcnIpCi0JCQkJCWdvdG8gb3V0OwotCQkJfQotCi0JCX0KLQl9Ci0KLQlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOwotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19ST0xMX0NBTExfVEJMX0wsIGFyLT51c2Vka2V5cyk7Ci0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX1JPTExfQ0FMTF9UQkxfSCwgYXItPnVzZWRrZXlzID4+IDMyKTsKLQlhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCk7Ci0JZXJyID0gYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpOwotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBhcjkxNzBfZ2V0X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cykKLXsKLQlzdHJ1Y3QgYXI5MTcwICphciA9IGh3LT5wcml2OwotCXUzMiB2YWw7Ci0JaW50IGVycjsKLQotCW11dGV4X2xvY2soJmFyLT5tdXRleCk7Ci0JZXJyID0gYXI5MTcwX3JlYWRfcmVnKGFyLCBBUjkxNzBfTUFDX1JFR19UWF9SRVRSWSwgJnZhbCk7Ci0JYXItPnN0YXRzLmRvdDExQUNLRmFpbHVyZUNvdW50ICs9IHZhbDsKLQotCW1lbWNweShzdGF0cywgJmFyLT5zdGF0cywgc2l6ZW9mKCpzdGF0cykpOwotCW11dGV4X3VubG9jaygmYXItPm11dGV4KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFyOTE3MF9nZXRfc3VydmV5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgaWR4LAotCQkJCXN0cnVjdCBzdXJ2ZXlfaW5mbyAqc3VydmV5KQotewotCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmh3LT5jb25mOwotCi0JaWYgKGlkeCAhPSAwKQotCQlyZXR1cm4gLUVOT0VOVDsKLQotCS8qIFRPRE86IHVwZGF0ZSBub2lzZSB2YWx1ZSwgZS5nLiBjYWxsIGFyOTE3MF9zZXRfY2hhbm5lbCAqLwotCi0Jc3VydmV5LT5jaGFubmVsID0gY29uZi0+Y2hhbm5lbDsKLQlzdXJ2ZXktPmZpbGxlZCA9IFNVUlZFWV9JTkZPX05PSVNFX0RCTTsKLQlzdXJ2ZXktPm5vaXNlID0gYXItPm5vaXNlWzBdOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYXI5MTcwX2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBxdWV1ZSwKLQkJCSAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtKQotewotCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7Ci0JaW50IHJldDsKLQotCW11dGV4X2xvY2soJmFyLT5tdXRleCk7Ci0JaWYgKHF1ZXVlIDwgX19BUjkxNzBfTlVNX1RYUSkgewotCQltZW1jcHkoJmFyLT5lZGNmW2FyOTE3MF9xb3NfaHdtYXBbcXVldWVdXSwKLQkJICAgICAgIHBhcmFtLCBzaXplb2YoKnBhcmFtKSk7Ci0KLQkJcmV0ID0gYXI5MTcwX3NldF9xb3MoYXIpOwotCX0gZWxzZSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgYXI5MTcwX2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQkJICAgICAgIGVudW0gaWVlZTgwMjExX2FtcGR1X21sbWVfYWN0aW9uIGFjdGlvbiwKLQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkLCB1MTYgKnNzbiwKLQkJCSAgICAgICB1OCBidWZfc2l6ZSkKLXsKLQlzd2l0Y2ggKGFjdGlvbikgewotCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUQVJUOgotCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUT1A6Ci0JCS8qIEhhbmRsZWQgYnkgZmlybXdhcmUgKi8KLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBhcjkxNzBfb3BzID0gewotCS5zdGFydAkJCT0gYXI5MTcwX29wX3N0YXJ0LAotCS5zdG9wCQkJPSBhcjkxNzBfb3Bfc3RvcCwKLQkudHgJCQk9IGFyOTE3MF9vcF90eCwKLQkuYWRkX2ludGVyZmFjZQkJPSBhcjkxNzBfb3BfYWRkX2ludGVyZmFjZSwKLQkucmVtb3ZlX2ludGVyZmFjZQk9IGFyOTE3MF9vcF9yZW1vdmVfaW50ZXJmYWNlLAotCS5jb25maWcJCQk9IGFyOTE3MF9vcF9jb25maWcsCi0JLnByZXBhcmVfbXVsdGljYXN0CT0gYXI5MTcwX29wX3ByZXBhcmVfbXVsdGljYXN0LAotCS5jb25maWd1cmVfZmlsdGVyCT0gYXI5MTcwX29wX2NvbmZpZ3VyZV9maWx0ZXIsCi0JLmNvbmZfdHgJCT0gYXI5MTcwX2NvbmZfdHgsCi0JLmJzc19pbmZvX2NoYW5nZWQJPSBhcjkxNzBfb3BfYnNzX2luZm9fY2hhbmdlZCwKLQkuZ2V0X3RzZgkJPSBhcjkxNzBfb3BfZ2V0X3RzZiwKLQkuc2V0X2tleQkJPSBhcjkxNzBfc2V0X2tleSwKLQkuZ2V0X3N0YXRzCQk9IGFyOTE3MF9nZXRfc3RhdHMsCi0JLmdldF9zdXJ2ZXkJCT0gYXI5MTcwX2dldF9zdXJ2ZXksCi0JLmFtcGR1X2FjdGlvbgkJPSBhcjkxNzBfYW1wZHVfYWN0aW9uLAotfTsKLQotdm9pZCAqYXI5MTcwX2FsbG9jKHNpemVfdCBwcml2X3NpemUpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0Jc3RydWN0IGFyOTE3MCAqYXI7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgaTsKLQotCS8qCi0JICogdGhpcyBidWZmZXIgaXMgdXNlZCBmb3Igcnggc3RyZWFtIHJlY29uc3RydWN0aW9uLgotCSAqIFVuZGVyIGhlYXZ5IGxvYWQgdGhpcyBkZXZpY2UgKG9yIHRoZSB0cmFuc3BvcnQgbGF5ZXI/KQotCSAqIHRlbmRzIHRvIHNwbGl0IHRoZSBzdHJlYW1zIGludG8gc2VwYXJhdGUgcnggZGVzY3JpcHRvcnMuCi0JICovCi0KLQlza2IgPSBfX2Rldl9hbGxvY19za2IoQVI5MTcwX1JYX1NUUkVBTV9NQVhfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFza2IpCi0JCWdvdG8gZXJyX25vbWVtOwotCi0JaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcocHJpdl9zaXplLCAmYXI5MTcwX29wcyk7Ci0JaWYgKCFodykKLQkJZ290byBlcnJfbm9tZW07Ci0KLQlhciA9IGh3LT5wcml2OwotCWFyLT5odyA9IGh3OwotCWFyLT5yeF9mYWlsb3ZlciA9IHNrYjsKLQotCW11dGV4X2luaXQoJmFyLT5tdXRleCk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmFyLT5jbWRsb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmYXItPnR4X3N0YXRzX2xvY2spOwotCWZvciAoaSA9IDA7IGkgPCBfX0FSOTE3MF9OVU1fVFhROyBpKyspIHsKLQkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYXItPnR4X3N0YXR1c1tpXSk7Ci0JCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFyLT50eF9wZW5kaW5nW2ldKTsKLQl9Ci0JYXI5MTcwX3J4X3Jlc2V0X3J4X21wZHUoYXIpOwotCUlOSVRfV09SSygmYXItPmJlYWNvbl93b3JrLCBhcjkxNzBfbmV3X2JlYWNvbik7Ci0JSU5JVF9ERUxBWUVEX1dPUksoJmFyLT50eF9qYW5pdG9yLCBhcjkxNzBfdHhfamFuaXRvcik7Ci0KLQkvKiBhbGwgaHcgc3VwcG9ydHMgMi40IEdIeiwgc28gc2V0IGNoYW5uZWwgdG8gMSBieSBkZWZhdWx0ICovCi0JYXItPmNoYW5uZWwgPSAmYXI5MTcwXzJnaHpfY2hhbnRhYmxlWzBdOwotCi0JLyogZmlyc3QgcGFydCBvZiB3aXBoeSBpbml0ICovCi0JYXItPmh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKLQkJCQkJIEJJVChOTDgwMjExX0lGVFlQRV9XRFMpIHwKLQkJCQkJIEJJVChOTDgwMjExX0lGVFlQRV9BREhPQyk7Ci0JYXItPmh3LT5mbGFncyB8PSBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTIHwKLQkJCSBJRUVFODAyMTFfSFdfSE9TVF9CUk9BRENBU1RfUFNfQlVGRkVSSU5HIHwKLQkJCSBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTTsKLQotCWFyLT5ody0+cXVldWVzID0gX19BUjkxNzBfTlVNX1RYUTsKLQlhci0+aHctPmV4dHJhX3R4X2hlYWRyb29tID0gODsKLQotCWFyLT5ody0+bWF4X3JhdGVzID0gMTsKLQlhci0+aHctPm1heF9yYXRlX3RyaWVzID0gMzsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFyLT5ub2lzZSk7IGkrKykKLQkJYXItPm5vaXNlW2ldID0gLTk1OyAvKiBBVEhfREVGQVVMVF9OT0lTRV9GTE9PUiAqLwotCi0JcmV0dXJuIGFyOwotCi1lcnJfbm9tZW06Ci0Ja2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci19Ci0KLXN0YXRpYyBpbnQgYXI5MTcwX3JlYWRfZWVwcm9tKHN0cnVjdCBhcjkxNzAgKmFyKQotewotI2RlZmluZSBSVwk4CS8qIG51bWJlciBvZiB3b3JkcyB0byByZWFkIGF0IG9uY2UgKi8KLSNkZWZpbmUgUkIJKHNpemVvZih1MzIpICogUlcpCi0Jc3RydWN0IGF0aF9yZWd1bGF0b3J5ICpyZWd1bGF0b3J5ID0gJmFyLT5jb21tb24ucmVndWxhdG9yeTsKLQl1OCAqZWVwcm9tID0gKHZvaWQgKikmYXItPmVlcHJvbTsKLQl1OCAqYWRkciA9IGFyLT5lZXByb20ubWFjX2FkZHJlc3M7Ci0JX19sZTMyIG9mZnNldHNbUlddOwotCXVuc2lnbmVkIGludCByeF9zdHJlYW1zLCB0eF9zdHJlYW1zLCB0eF9wYXJhbXMgPSAwOwotCWludCBpLCBqLCBlcnIsIGJhbmRzID0gMDsKLQotCUJVSUxEX0JVR19PTihzaXplb2YoYXItPmVlcHJvbSkgJiAzKTsKLQotCUJVSUxEX0JVR19PTihSQiA+IEFSOTE3MF9NQVhfQ01EX0xFTiAtIDQpOwotI2lmbmRlZiBfX0NIRUNLRVJfXwotCS8qIGRvbid0IHdhbnQgdG8gaGFuZGxlIHRyYWlsaW5nIHJlbWFpbnMgKi8KLQlCVUlMRF9CVUdfT04oc2l6ZW9mKGFyLT5lZXByb20pICUgUkIpOwotI2VuZGlmCi0KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGFyLT5lZXByb20pL1JCOyBpKyspIHsKLQkJZm9yIChqID0gMDsgaiA8IFJXOyBqKyspCi0JCQlvZmZzZXRzW2pdID0gY3B1X3RvX2xlMzIoQVI5MTcwX0VFUFJPTV9TVEFSVCArCi0JCQkJCQkgUkIgKiBpICsgNCAqIGopOwotCi0JCWVyciA9IGFyLT5leGVjX2NtZChhciwgQVI5MTcwX0NNRF9SUkVHLAotCQkJCSAgIFJCLCAodTggKikgJm9mZnNldHMsCi0JCQkJICAgUkIsIGVlcHJvbSArIFJCICogaSk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotI3VuZGVmIFJXCi0jdW5kZWYgUkIKLQotCWlmIChhci0+ZWVwcm9tLmxlbmd0aCA9PSBjcHVfdG9fbGUxNigweEZGRkYpKQotCQlyZXR1cm4gLUVOT0RBVEE7Ci0KLQlpZiAoYXItPmVlcHJvbS5vcGVyYXRpbmdfZmxhZ3MgJiBBUjkxNzBfT1BGTEFHXzJHSFopIHsKLQkJYXItPmh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSAmYXI5MTcwX2JhbmRfMkdIejsKLQkJYmFuZHMrKzsKLQl9Ci0JaWYgKGFyLT5lZXByb20ub3BlcmF0aW5nX2ZsYWdzICYgQVI5MTcwX09QRkxBR181R0haKSB7Ci0JCWFyLT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0gJmFyOTE3MF9iYW5kXzVHSHo7Ci0JCWJhbmRzKys7Ci0JfQotCi0Jcnhfc3RyZWFtcyA9IGh3ZWlnaHQ4KGFyLT5lZXByb20ucnhfbWFzayk7Ci0JdHhfc3RyZWFtcyA9IGh3ZWlnaHQ4KGFyLT5lZXByb20udHhfbWFzayk7Ci0KLQlpZiAocnhfc3RyZWFtcyAhPSB0eF9zdHJlYW1zKQotCQl0eF9wYXJhbXMgPSBJRUVFODAyMTFfSFRfTUNTX1RYX1JYX0RJRkY7Ci0KLQlpZiAodHhfc3RyZWFtcyA+PSAxICYmIHR4X3N0cmVhbXMgPD0gSUVFRTgwMjExX0hUX01DU19UWF9NQVhfU1RSRUFNUykKLQkJdHhfcGFyYW1zID0gKHR4X3N0cmVhbXMgLSAxKSA8PAotCQkJICAgIElFRUU4MDIxMV9IVF9NQ1NfVFhfTUFYX1NUUkVBTVNfU0hJRlQ7Ci0KLQlhcjkxNzBfYmFuZF8yR0h6Lmh0X2NhcC5tY3MudHhfcGFyYW1zIHw9IHR4X3BhcmFtczsKLQlhcjkxNzBfYmFuZF81R0h6Lmh0X2NhcC5tY3MudHhfcGFyYW1zIHw9IHR4X3BhcmFtczsKLQotCS8qCi0JICogSSBtZWFzdXJlZCB0aGlzLCBhIGJhbmRzd2l0Y2ggdGFrZXMgcm91Z2hseQotCSAqIDEzNSBtcyBhbmQgYSBmcmVxdWVuY3kgc3dpdGNoIGFib3V0IDgwLgotCSAqCi0JICogRklYTUU6IG1lYXN1cmUgdGhlc2UgdmFsdWVzIGFnYWluIG9uY2UgRUVQUk9NIHNldHRpbmdzCi0JICoJICBhcmUgdXNlZCwgdGhhdCB3aWxsIGluZmx1ZW5jZSB0aGVtIQotCSAqLwotCWlmIChiYW5kcyA9PSAyKQotCQlhci0+aHctPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSAxMzUgKiAxMDAwOwotCWVsc2UKLQkJYXItPmh3LT5jaGFubmVsX2NoYW5nZV90aW1lID0gODAgKiAxMDAwOwotCi0JcmVndWxhdG9yeS0+Y3VycmVudF9yZCA9IGxlMTZfdG9fY3B1KGFyLT5lZXByb20ucmVnX2RvbWFpblswXSk7Ci0JcmVndWxhdG9yeS0+Y3VycmVudF9yZF9leHQgPSBsZTE2X3RvX2NwdShhci0+ZWVwcm9tLnJlZ19kb21haW5bMV0pOwotCi0JLyogc2Vjb25kIHBhcnQgb2Ygd2lwaHkgaW5pdCAqLwotCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGFyLT5odywgYWRkcik7Ci0KLQlyZXR1cm4gYmFuZHMgPyAwIDogLUVJTlZBTDsKLX0KLQotc3RhdGljIGludCBhcjkxNzBfcmVnX25vdGlmaWVyKHN0cnVjdCB3aXBoeSAqd2lwaHksCi0JCQlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0KQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gd2lwaHlfdG9faWVlZTgwMjExX2h3KHdpcGh5KTsKLQlzdHJ1Y3QgYXI5MTcwICphciA9IGh3LT5wcml2OwotCi0JcmV0dXJuIGF0aF9yZWdfbm90aWZpZXJfYXBwbHkod2lwaHksIHJlcXVlc3QsICZhci0+Y29tbW9uLnJlZ3VsYXRvcnkpOwotfQotCi1pbnQgYXI5MTcwX3JlZ2lzdGVyKHN0cnVjdCBhcjkxNzAgKmFyLCBzdHJ1Y3QgZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBhdGhfcmVndWxhdG9yeSAqcmVndWxhdG9yeSA9ICZhci0+Y29tbW9uLnJlZ3VsYXRvcnk7Ci0JaW50IGVycjsKLQotCS8qIHRyeSB0byByZWFkIEVFUFJPTSwgaW5pdCBNQUMgYWRkciAqLwotCWVyciA9IGFyOTE3MF9yZWFkX2VlcHJvbShhcik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0OwotCi0JZXJyID0gYXRoX3JlZ2RfaW5pdChyZWd1bGF0b3J5LCBhci0+aHctPndpcGh5LAotCQkJICAgIGFyOTE3MF9yZWdfbm90aWZpZXIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dDsKLQotCWVyciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhhci0+aHcpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dDsKLQotCWlmICghYXRoX2lzX3dvcmxkX3JlZ2QocmVndWxhdG9yeSkpCi0JCXJlZ3VsYXRvcnlfaGludChhci0+aHctPndpcGh5LCByZWd1bGF0b3J5LT5hbHBoYTIpOwotCi0JZXJyID0gYXI5MTcwX2luaXRfbGVkcyhhcik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfdW5yZWc7Ci0KLSNpZmRlZiBDT05GSUdfQVI5MTcwX0xFRFMKLQllcnIgPSBhcjkxNzBfcmVnaXN0ZXJfbGVkcyhhcik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfdW5yZWc7Ci0jZW5kaWYgLyogQ09ORklHX0FSOTE3MF9MRURTICovCi0KLQlkZXZfaW5mbyhwZGV2LCAiQXRoZXJvcyBBUjkxNzAgaXMgcmVnaXN0ZXJlZCBhcyAnJXMnXG4iLAotCQkgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSk7Ci0KLQlhci0+cmVnaXN0ZXJlZCA9IHRydWU7Ci0JcmV0dXJuIDA7Ci0KLWVycl91bnJlZzoKLQlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhhci0+aHcpOwotCi1lcnJfb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KLXZvaWQgYXI5MTcwX3VucmVnaXN0ZXIoc3RydWN0IGFyOTE3MCAqYXIpCi17Ci0JaWYgKGFyLT5yZWdpc3RlcmVkKSB7Ci0jaWZkZWYgQ09ORklHX0FSOTE3MF9MRURTCi0JCWFyOTE3MF91bnJlZ2lzdGVyX2xlZHMoYXIpOwotI2VuZGlmIC8qIENPTkZJR19BUjkxNzBfTEVEUyAqLwotCi0JaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoYXItPmh3KTsKLQl9Ci0KLQlrZnJlZV9za2IoYXItPnJ4X2ZhaWxvdmVyKTsKLQltdXRleF9kZXN0cm95KCZhci0+bXV0ZXgpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvcGh5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhOGQwNmIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9waHkuYworKysgL2Rldi9udWxsCkBAIC0xLDE3MTkgKzAsMCBAQAotLyoKLSAqIEF0aGVyb3MgQVI5MTcwIGRyaXZlcgotICoKLSAqIFBIWSBhbmQgUkYgY29kZQotICoKLSAqIENvcHlyaWdodCAyMDA4LCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCBzZWUKLSAqIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCi0gKgotICogVGhpcyBmaWxlIGluY29ycG9yYXRlcyB3b3JrIGNvdmVyZWQgYnkgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCi0gKiBwZXJtaXNzaW9uIG5vdGljZToKLSAqICAgIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KLSAqCi0gKiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiAgICBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgotICogICAgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogICAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiAgICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgotICogICAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvYml0cmV2Lmg+Ci0jaW5jbHVkZSAiYXI5MTcwLmgiCi0jaW5jbHVkZSAiY21kLmgiCi0KLXN0YXRpYyBpbnQgYXI5MTcwX2luaXRfcG93ZXJfY2FsKHN0cnVjdCBhcjkxNzAgKmFyKQotewotCWFyOTE3MF9yZWd3cml0ZV9iZWdpbihhcik7Ci0KLQlhcjkxNzBfcmVnd3JpdGUoMHgxYmMwMDAgKyAweDk5M2MsIDB4N2YpOwotCWFyOTE3MF9yZWd3cml0ZSgweDFiYzAwMCArIDB4OTkzNCwgMHgzZjNmM2YzZik7Ci0JYXI5MTcwX3JlZ3dyaXRlKDB4MWJjMDAwICsgMHg5OTM4LCAweDNmM2YzZjNmKTsKLQlhcjkxNzBfcmVnd3JpdGUoMHgxYmMwMDAgKyAweGEyMzQsIDB4M2YzZjNmM2YpOwotCWFyOTE3MF9yZWd3cml0ZSgweDFiYzAwMCArIDB4YTIzOCwgMHgzZjNmM2YzZik7Ci0JYXI5MTcwX3JlZ3dyaXRlKDB4MWJjMDAwICsgMHhhMzhjLCAweDNmM2YzZjNmKTsKLQlhcjkxNzBfcmVnd3JpdGUoMHgxYmMwMDAgKyAweGEzOTAsIDB4M2YzZjNmM2YpOwotCWFyOTE3MF9yZWd3cml0ZSgweDFiYzAwMCArIDB4YTNjYywgMHgzZjNmM2YzZik7Ci0JYXI5MTcwX3JlZ3dyaXRlKDB4MWJjMDAwICsgMHhhM2QwLCAweDNmM2YzZjNmKTsKLQlhcjkxNzBfcmVnd3JpdGUoMHgxYmMwMDAgKyAweGEzZDQsIDB4M2YzZjNmM2YpOwotCi0JYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOwotCXJldHVybiBhcjkxNzBfcmVnd3JpdGVfcmVzdWx0KCk7Ci19Ci0KLXN0cnVjdCBhcjkxNzBfcGh5X2luaXQgewotCXUzMiByZWcsIF81Z2h6XzIwLCBfNWdoel80MCwgXzJnaHpfNDAsIF8yZ2h6XzIwOwotfTsKLQotc3RhdGljIHN0cnVjdCBhcjkxNzBfcGh5X2luaXQgYXI1NDE2X3BoeV9pbml0W10gPSB7Ci0JeyAweDFjNTgwMCwgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgfSwKLQl7IDB4MWM1ODA0LCAweDAwMDAwMzAwLCAweDAwMDAwM2M0LCAweDAwMDAwM2M0LCAweDAwMDAwMzAwLCB9LAotCXsgMHgxYzU4MDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNTgwYywgMHhhZDg0OGUxOSwgMHhhZDg0OGUxOSwgMHhhZDg0OGUxOSwgMHhhZDg0OGUxOSwgfSwKLQl7IDB4MWM1ODEwLCAweDdkMTRlMDAwLCAweDdkMTRlMDAwLCAweDdkMTRlMDAwLCAweDdkMTRlMDAwLCB9LAotCXsgMHgxYzU4MTQsIDB4OWMwYTlmNmIsIDB4OWMwYTlmNmIsIDB4OWMwYTlmNmIsIDB4OWMwYTlmNmIsIH0sCi0JeyAweDFjNTgxOCwgMHgwMDAwMDA5MCwgMHgwMDAwMDA5MCwgMHgwMDAwMDA5MCwgMHgwMDAwMDA5MCwgfSwKLQl7IDB4MWM1ODFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzU4MjAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIH0sCi0JeyAweDFjNTgyNCwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgfSwKLQl7IDB4MWM1ODI4LCAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCB9LAotCXsgMHgxYzU4MmMsIDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAsIH0sCi0JeyAweDFjNTgzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM1ODM0LCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCB9LAotCXsgMHgxYzU4MzgsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIH0sCi0JeyAweDFjNTgzYywgMHgwMDIwMDQwMCwgMHgwMDIwMDQwMCwgMHgwMDIwMDQwMCwgMHgwMDIwMDQwMCwgfSwKLQl7IDB4MWM1ODQwLCAweDIwNmEwMDJlLCAweDIwNmEwMDJlLCAweDIwNmEwMDJlLCAweDIwNmEwMDJlLCB9LAotCXsgMHgxYzU4NDQsIDB4MTM3MjE2MWUsIDB4MTM3MjFjMWUsIDB4MTM3MjFjMjQsIDB4MTM3MjE2YTQsIH0sCi0JeyAweDFjNTg0OCwgMHgwMDFhNmE2NSwgMHgwMDFhNmE2NSwgMHgwMDE5N2E2OCwgMHgwMDE5N2E2OCwgfSwKLQl7IDB4MWM1ODRjLCAweDEyODQyMzNjLCAweDEyODQyMzNjLCAweDEyODQyMzNjLCAweDEyODQyMzNjLCB9LAotCXsgMHgxYzU4NTAsIDB4NmM0OGI0ZTQsIDB4NmM0OGI0ZTQsIDB4NmM0OGIwZTQsIDB4NmM0OGIwZTQsIH0sCi0JeyAweDFjNTg1NCwgMHgwMDAwMDg1OSwgMHgwMDAwMDg1OSwgMHgwMDAwMDg1OSwgMHgwMDAwMDg1OSwgfSwKLQl7IDB4MWM1ODU4LCAweDdlYzgwZDJlLCAweDdlYzgwZDJlLCAweDdlYzgwZDJlLCAweDdlYzgwZDJlLCB9LAotCXsgMHgxYzU4NWMsIDB4MzEzOTVjNWUsIDB4MzEzOTVjNWUsIDB4MzEzOTVjNWUsIDB4MzEzOTVjNWUsIH0sCi0JeyAweDFjNTg2MCwgMHgwMDA0ZGQxMCwgMHgwMDA0ZGQxMCwgMHgwMDA0ZGQyMCwgMHgwMDA0ZGQyMCwgfSwKLQl7IDB4MWM1ODY4LCAweDQwOWE0MTkwLCAweDQwOWE0MTkwLCAweDQwOWE0MTkwLCAweDQwOWE0MTkwLCB9LAotCXsgMHgxYzU4NmMsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIH0sCi0JeyAweDFjNTkwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM1OTA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzU5MDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNTkwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM1OTE0LCAweDAwMDAwN2QwLCAweDAwMDAwN2QwLCAweDAwMDAwODk4LCAweDAwMDAwODk4LCB9LAotCXsgMHgxYzU5MTgsIDB4MDAwMDAxMTgsIDB4MDAwMDAyMzAsIDB4MDAwMDAyNjgsIDB4MDAwMDAxMzQsIH0sCi0JeyAweDFjNTkxYywgMHgxMDAwMGZmZiwgMHgxMDAwMGZmZiwgMHgxMDAwMGZmZiwgMHgxMDAwMGZmZiwgfSwKLQl7IDB4MWM1OTIwLCAweDA1MTAwODFjLCAweDA1MTAwODFjLCAweDA1MTAwMDFjLCAweDA1MTAwMDFjLCB9LAotCXsgMHgxYzU5MjQsIDB4ZDAwNThhMTUsIDB4ZDAwNThhMTUsIDB4ZDAwNThhMTUsIDB4ZDAwNThhMTUsIH0sCi0JeyAweDFjNTkyOCwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgfSwKLQl7IDB4MWM1OTJjLCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCB9LAotCXsgMHgxYzU5MzQsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIH0sCi0JeyAweDFjNTkzOCwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgfSwKLQl7IDB4MWM1OTNjLCAweDAwMDAwMDdmLCAweDAwMDAwMDdmLCAweDAwMDAwMDdmLCAweDAwMDAwMDdmLCB9LAotCXsgMHgxYzU5NDQsIDB4ZGZiODEwMjAsIDB4ZGZiODEwMjAsIDB4ZGZiODEwMjAsIDB4ZGZiODEwMjAsIH0sCi0JeyAweDFjNTk0OCwgMHg5MjgwYjIxMiwgMHg5MjgwYjIxMiwgMHg5MjgwYjIxMiwgMHg5MjgwYjIxMiwgfSwKLQl7IDB4MWM1OTRjLCAweDAwMDIwMDI4LCAweDAwMDIwMDI4LCAweDAwMDIwMDI4LCAweDAwMDIwMDI4LCB9LAotCXsgMHgxYzU5NTQsIDB4NWQ1MGUxODgsIDB4NWQ1MGUxODgsIDB4NWQ1MGUxODgsIDB4NWQ1MGUxODgsIH0sCi0JeyAweDFjNTk1OCwgMHgwMDA4MWZmZiwgMHgwMDA4MWZmZiwgMHgwMDA4MWZmZiwgMHgwMDA4MWZmZiwgfSwKLQl7IDB4MWM1OTYwLCAweDAwMDA5YjQwLCAweDAwMDA5YjQwLCAweDAwMDA5YjQwLCAweDAwMDA5YjQwLCB9LAotCXsgMHgxYzU5NjQsIDB4MDAwMDExMjAsIDB4MDAwMDExMjAsIDB4MDAwMDExMjAsIDB4MDAwMDExMjAsIH0sCi0JeyAweDFjNTk3MCwgMHgxOTBmYjUxNSwgMHgxOTBmYjUxNSwgMHgxOTBmYjUxNSwgMHgxOTBmYjUxNSwgfSwKLQl7IDB4MWM1OTc0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzU5NzgsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIH0sCi0JeyAweDFjNTk3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM1OTgwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzU5ODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNTk4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM1OThjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzU5OTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNTk5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM1OTk4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzU5OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNTlhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM1OWE0LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCB9LAotCXsgMHgxYzU5YTgsIDB4MDAxZmZmMDAsIDB4MDAxZmZmMDAsIDB4MDAxZmZmMDAsIDB4MDAxZmZmMDAsIH0sCi0JeyAweDFjNTlhYywgMHgwMDZmMDBjNCwgMHgwMDZmMDBjNCwgMHgwMDZmMDBjNCwgMHgwMDZmMDBjNCwgfSwKLQl7IDB4MWM1OWIwLCAweDAzMDUxMDAwLCAweDAzMDUxMDAwLCAweDAzMDUxMDAwLCAweDAzMDUxMDAwLCB9LAotCXsgMHgxYzU5YjQsIDB4MDAwMDA4MjAsIDB4MDAwMDA4MjAsIDB4MDAwMDA4MjAsIDB4MDAwMDA4MjAsIH0sCi0JeyAweDFjNTljMCwgMHgwMzg5MTliZSwgMHgwMzg5MTliZSwgMHgwMzg5MTliZSwgMHgwMzg5MTliZSwgfSwKLQl7IDB4MWM1OWM0LCAweDA2MzM2Zjc3LCAweDA2MzM2Zjc3LCAweDA2MzM2Zjc3LCAweDA2MzM2Zjc3LCB9LAotCXsgMHgxYzU5YzgsIDB4NjBmNjUzMmMsIDB4NjBmNjUzMmMsIDB4NjBmNjUzMmMsIDB4NjBmNjUzMmMsIH0sCi0JeyAweDFjNTljYywgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgfSwKLQl7IDB4MWM1OWQwLCAweDAwMDQ2Mzg0LCAweDAwMDQ2Mzg0LCAweDAwMDQ2Mzg0LCAweDAwMDQ2Mzg0LCB9LAotCXsgMHgxYzU5ZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNTlkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM1OWRjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzU5ZTAsIDB4MDAwMDAyMDAsIDB4MDAwMDAyMDAsIDB4MDAwMDAyMDAsIDB4MDAwMDAyMDAsIH0sCi0JeyAweDFjNTllNCwgMHg2NDY0NjQ2NCwgMHg2NDY0NjQ2NCwgMHg2NDY0NjQ2NCwgMHg2NDY0NjQ2NCwgfSwKLQl7IDB4MWM1OWU4LCAweDNjNzg3ODc4LCAweDNjNzg3ODc4LCAweDNjNzg3ODc4LCAweDNjNzg3ODc4LCB9LAotCXsgMHgxYzU5ZWMsIDB4MDAwMDAwYWEsIDB4MDAwMDAwYWEsIDB4MDAwMDAwYWEsIDB4MDAwMDAwYWEsIH0sCi0JeyAweDFjNTlmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM1OWZjLCAweDAwMDAxMDQyLCAweDAwMDAxMDQyLCAweDAwMDAxMDQyLCAweDAwMDAxMDQyLCB9LAotCXsgMHgxYzVhMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNWEwNCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MCwgfSwKLQl7IDB4MWM1YTA4LCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCB9LAotCXsgMHgxYzVhMGMsIDB4MDAwMDAxYTEsIDB4MDAwMDAxYTEsIDB4MDAwMDAxNDEsIDB4MDAwMDAxNDEsIH0sCi0JeyAweDFjNWExMCwgMHgwMDAwMDFlMSwgMHgwMDAwMDFlMSwgMHgwMDAwMDE4MSwgMHgwMDAwMDE4MSwgfSwKLQl7IDB4MWM1YTE0LCAweDAwMDAwMDIxLCAweDAwMDAwMDIxLCAweDAwMDAwMWMxLCAweDAwMDAwMWMxLCB9LAotCXsgMHgxYzVhMTgsIDB4MDAwMDAwNjEsIDB4MDAwMDAwNjEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIH0sCi0JeyAweDFjNWExYywgMHgwMDAwMDE2OCwgMHgwMDAwMDE2OCwgMHgwMDAwMDA0MSwgMHgwMDAwMDA0MSwgfSwKLQl7IDB4MWM1YTIwLCAweDAwMDAwMWE4LCAweDAwMDAwMWE4LCAweDAwMDAwMWE4LCAweDAwMDAwMWE4LCB9LAotCXsgMHgxYzVhMjQsIDB4MDAwMDAxZTgsIDB4MDAwMDAxZTgsIDB4MDAwMDAxZTgsIDB4MDAwMDAxZTgsIH0sCi0JeyAweDFjNWEyOCwgMHgwMDAwMDAyOCwgMHgwMDAwMDAyOCwgMHgwMDAwMDAyOCwgMHgwMDAwMDAyOCwgfSwKLQl7IDB4MWM1YTJjLCAweDAwMDAwMDY4LCAweDAwMDAwMDY4LCAweDAwMDAwMDY4LCAweDAwMDAwMDY4LCB9LAotCXsgMHgxYzVhMzAsIDB4MDAwMDAxODksIDB4MDAwMDAxODksIDB4MDAwMDAwYTgsIDB4MDAwMDAwYTgsIH0sCi0JeyAweDFjNWEzNCwgMHgwMDAwMDFjOSwgMHgwMDAwMDFjOSwgMHgwMDAwMDE2OSwgMHgwMDAwMDE2OSwgfSwKLQl7IDB4MWM1YTM4LCAweDAwMDAwMDA5LCAweDAwMDAwMDA5LCAweDAwMDAwMWE5LCAweDAwMDAwMWE5LCB9LAotCXsgMHgxYzVhM2MsIDB4MDAwMDAwNDksIDB4MDAwMDAwNDksIDB4MDAwMDAxZTksIDB4MDAwMDAxZTksIH0sCi0JeyAweDFjNWE0MCwgMHgwMDAwMDA4OSwgMHgwMDAwMDA4OSwgMHgwMDAwMDAyOSwgMHgwMDAwMDAyOSwgfSwKLQl7IDB4MWM1YTQ0LCAweDAwMDAwMTcwLCAweDAwMDAwMTcwLCAweDAwMDAwMDY5LCAweDAwMDAwMDY5LCB9LAotCXsgMHgxYzVhNDgsIDB4MDAwMDAxYjAsIDB4MDAwMDAxYjAsIDB4MDAwMDAxOTAsIDB4MDAwMDAxOTAsIH0sCi0JeyAweDFjNWE0YywgMHgwMDAwMDFmMCwgMHgwMDAwMDFmMCwgMHgwMDAwMDFkMCwgMHgwMDAwMDFkMCwgfSwKLQl7IDB4MWM1YTUwLCAweDAwMDAwMDMwLCAweDAwMDAwMDMwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCB9LAotCXsgMHgxYzVhNTQsIDB4MDAwMDAwNzAsIDB4MDAwMDAwNzAsIDB4MDAwMDAwNTAsIDB4MDAwMDAwNTAsIH0sCi0JeyAweDFjNWE1OCwgMHgwMDAwMDE5MSwgMHgwMDAwMDE5MSwgMHgwMDAwMDA5MCwgMHgwMDAwMDA5MCwgfSwKLQl7IDB4MWM1YTVjLCAweDAwMDAwMWQxLCAweDAwMDAwMWQxLCAweDAwMDAwMTUxLCAweDAwMDAwMTUxLCB9LAotCXsgMHgxYzVhNjAsIDB4MDAwMDAwMTEsIDB4MDAwMDAwMTEsIDB4MDAwMDAxOTEsIDB4MDAwMDAxOTEsIH0sCi0JeyAweDFjNWE2NCwgMHgwMDAwMDA1MSwgMHgwMDAwMDA1MSwgMHgwMDAwMDFkMSwgMHgwMDAwMDFkMSwgfSwKLQl7IDB4MWM1YTY4LCAweDAwMDAwMDkxLCAweDAwMDAwMDkxLCAweDAwMDAwMDExLCAweDAwMDAwMDExLCB9LAotCXsgMHgxYzVhNmMsIDB4MDAwMDAxYjgsIDB4MDAwMDAxYjgsIDB4MDAwMDAwNTEsIDB4MDAwMDAwNTEsIH0sCi0JeyAweDFjNWE3MCwgMHgwMDAwMDFmOCwgMHgwMDAwMDFmOCwgMHgwMDAwMDE5OCwgMHgwMDAwMDE5OCwgfSwKLQl7IDB4MWM1YTc0LCAweDAwMDAwMDM4LCAweDAwMDAwMDM4LCAweDAwMDAwMWQ4LCAweDAwMDAwMWQ4LCB9LAotCXsgMHgxYzVhNzgsIDB4MDAwMDAwNzgsIDB4MDAwMDAwNzgsIDB4MDAwMDAwMTgsIDB4MDAwMDAwMTgsIH0sCi0JeyAweDFjNWE3YywgMHgwMDAwMDE5OSwgMHgwMDAwMDE5OSwgMHgwMDAwMDA1OCwgMHgwMDAwMDA1OCwgfSwKLQl7IDB4MWM1YTgwLCAweDAwMDAwMWQ5LCAweDAwMDAwMWQ5LCAweDAwMDAwMDk4LCAweDAwMDAwMDk4LCB9LAotCXsgMHgxYzVhODQsIDB4MDAwMDAwMTksIDB4MDAwMDAwMTksIDB4MDAwMDAxNTksIDB4MDAwMDAxNTksIH0sCi0JeyAweDFjNWE4OCwgMHgwMDAwMDA1OSwgMHgwMDAwMDA1OSwgMHgwMDAwMDE5OSwgMHgwMDAwMDE5OSwgfSwKLQl7IDB4MWM1YThjLCAweDAwMDAwMDk5LCAweDAwMDAwMDk5LCAweDAwMDAwMWQ5LCAweDAwMDAwMWQ5LCB9LAotCXsgMHgxYzVhOTAsIDB4MDAwMDAwZDksIDB4MDAwMDAwZDksIDB4MDAwMDAwMTksIDB4MDAwMDAwMTksIH0sCi0JeyAweDFjNWE5NCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDA1OSwgMHgwMDAwMDA1OSwgfSwKLQl7IDB4MWM1YTk4LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMDk5LCAweDAwMDAwMDk5LCB9LAotCXsgMHgxYzVhOWMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZDksIDB4MDAwMDAwZDksIH0sCi0JeyAweDFjNWFhMCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKLQl7IDB4MWM1YWE0LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAotCXsgMHgxYzVhYTgsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCi0JeyAweDFjNWFhYywgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKLQl7IDB4MWM1YWIwLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAotCXsgMHgxYzVhYjQsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCi0JeyAweDFjNWFiOCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKLQl7IDB4MWM1YWJjLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAotCXsgMHgxYzVhYzAsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCi0JeyAweDFjNWFjNCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKLQl7IDB4MWM1YWM4LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAotCXsgMHgxYzVhY2MsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCi0JeyAweDFjNWFkMCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKLQl7IDB4MWM1YWQ0LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAotCXsgMHgxYzVhZDgsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCi0JeyAweDFjNWFkYywgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKLQl7IDB4MWM1YWUwLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAotCXsgMHgxYzVhZTQsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCi0JeyAweDFjNWFlOCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKLQl7IDB4MWM1YWVjLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAotCXsgMHgxYzVhZjAsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCi0JeyAweDFjNWFmNCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKLQl7IDB4MWM1YWY4LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAotCXsgMHgxYzVhZmMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCi0JeyAweDFjNWIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM1YjA0LCAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCB9LAotCXsgMHgxYzViMDgsIDB4MDAwMDAwMDIsIDB4MDAwMDAwMDIsIDB4MDAwMDAwMDIsIDB4MDAwMDAwMDIsIH0sCi0JeyAweDFjNWIwYywgMHgwMDAwMDAwMywgMHgwMDAwMDAwMywgMHgwMDAwMDAwMywgMHgwMDAwMDAwMywgfSwKLQl7IDB4MWM1YjEwLCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCB9LAotCXsgMHgxYzViMTQsIDB4MDAwMDAwMDUsIDB4MDAwMDAwMDUsIDB4MDAwMDAwMDUsIDB4MDAwMDAwMDUsIH0sCi0JeyAweDFjNWIxOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgfSwKLQl7IDB4MWM1YjFjLCAweDAwMDAwMDA5LCAweDAwMDAwMDA5LCAweDAwMDAwMDA5LCAweDAwMDAwMDA5LCB9LAotCXsgMHgxYzViMjAsIDB4MDAwMDAwMGEsIDB4MDAwMDAwMGEsIDB4MDAwMDAwMGEsIDB4MDAwMDAwMGEsIH0sCi0JeyAweDFjNWIyNCwgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiwgfSwKLQl7IDB4MWM1YjI4LCAweDAwMDAwMDBjLCAweDAwMDAwMDBjLCAweDAwMDAwMDBjLCAweDAwMDAwMDBjLCB9LAotCXsgMHgxYzViMmMsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMGQsIH0sCi0JeyAweDFjNWIzMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgfSwKLQl7IDB4MWM1YjM0LCAweDAwMDAwMDExLCAweDAwMDAwMDExLCAweDAwMDAwMDExLCAweDAwMDAwMDExLCB9LAotCXsgMHgxYzViMzgsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIH0sCi0JeyAweDFjNWIzYywgMHgwMDAwMDAxMywgMHgwMDAwMDAxMywgMHgwMDAwMDAxMywgMHgwMDAwMDAxMywgfSwKLQl7IDB4MWM1YjQwLCAweDAwMDAwMDE0LCAweDAwMDAwMDE0LCAweDAwMDAwMDE0LCAweDAwMDAwMDE0LCB9LAotCXsgMHgxYzViNDQsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIH0sCi0JeyAweDFjNWI0OCwgMHgwMDAwMDAxOCwgMHgwMDAwMDAxOCwgMHgwMDAwMDAxOCwgMHgwMDAwMDAxOCwgfSwKLQl7IDB4MWM1YjRjLCAweDAwMDAwMDE5LCAweDAwMDAwMDE5LCAweDAwMDAwMDE5LCAweDAwMDAwMDE5LCB9LAotCXsgMHgxYzViNTAsIDB4MDAwMDAwMWEsIDB4MDAwMDAwMWEsIDB4MDAwMDAwMWEsIDB4MDAwMDAwMWEsIH0sCi0JeyAweDFjNWI1NCwgMHgwMDAwMDAxYiwgMHgwMDAwMDAxYiwgMHgwMDAwMDAxYiwgMHgwMDAwMDAxYiwgfSwKLQl7IDB4MWM1YjU4LCAweDAwMDAwMDFjLCAweDAwMDAwMDFjLCAweDAwMDAwMDFjLCAweDAwMDAwMDFjLCB9LAotCXsgMHgxYzViNWMsIDB4MDAwMDAwMWQsIDB4MDAwMDAwMWQsIDB4MDAwMDAwMWQsIDB4MDAwMDAwMWQsIH0sCi0JeyAweDFjNWI2MCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgfSwKLQl7IDB4MWM1YjY0LCAweDAwMDAwMDIxLCAweDAwMDAwMDIxLCAweDAwMDAwMDIxLCAweDAwMDAwMDIxLCB9LAotCXsgMHgxYzViNjgsIDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIsIH0sCi0JeyAweDFjNWI2YywgMHgwMDAwMDAyMywgMHgwMDAwMDAyMywgMHgwMDAwMDAyMywgMHgwMDAwMDAyMywgfSwKLQl7IDB4MWM1YjcwLCAweDAwMDAwMDI0LCAweDAwMDAwMDI0LCAweDAwMDAwMDI0LCAweDAwMDAwMDI0LCB9LAotCXsgMHgxYzViNzQsIDB4MDAwMDAwMjUsIDB4MDAwMDAwMjUsIDB4MDAwMDAwMjUsIDB4MDAwMDAwMjUsIH0sCi0JeyAweDFjNWI3OCwgMHgwMDAwMDAyOCwgMHgwMDAwMDAyOCwgMHgwMDAwMDAyOCwgMHgwMDAwMDAyOCwgfSwKLQl7IDB4MWM1YjdjLCAweDAwMDAwMDI5LCAweDAwMDAwMDI5LCAweDAwMDAwMDI5LCAweDAwMDAwMDI5LCB9LAotCXsgMHgxYzViODAsIDB4MDAwMDAwMmEsIDB4MDAwMDAwMmEsIDB4MDAwMDAwMmEsIDB4MDAwMDAwMmEsIH0sCi0JeyAweDFjNWI4NCwgMHgwMDAwMDAyYiwgMHgwMDAwMDAyYiwgMHgwMDAwMDAyYiwgMHgwMDAwMDAyYiwgfSwKLQl7IDB4MWM1Yjg4LCAweDAwMDAwMDJjLCAweDAwMDAwMDJjLCAweDAwMDAwMDJjLCAweDAwMDAwMDJjLCB9LAotCXsgMHgxYzViOGMsIDB4MDAwMDAwMmQsIDB4MDAwMDAwMmQsIDB4MDAwMDAwMmQsIDB4MDAwMDAwMmQsIH0sCi0JeyAweDFjNWI5MCwgMHgwMDAwMDAzMCwgMHgwMDAwMDAzMCwgMHgwMDAwMDAzMCwgMHgwMDAwMDAzMCwgfSwKLQl7IDB4MWM1Yjk0LCAweDAwMDAwMDMxLCAweDAwMDAwMDMxLCAweDAwMDAwMDMxLCAweDAwMDAwMDMxLCB9LAotCXsgMHgxYzViOTgsIDB4MDAwMDAwMzIsIDB4MDAwMDAwMzIsIDB4MDAwMDAwMzIsIDB4MDAwMDAwMzIsIH0sCi0JeyAweDFjNWI5YywgMHgwMDAwMDAzMywgMHgwMDAwMDAzMywgMHgwMDAwMDAzMywgMHgwMDAwMDAzMywgfSwKLQl7IDB4MWM1YmEwLCAweDAwMDAwMDM0LCAweDAwMDAwMDM0LCAweDAwMDAwMDM0LCAweDAwMDAwMDM0LCB9LAotCXsgMHgxYzViYTQsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCi0JeyAweDFjNWJhOCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKLQl7IDB4MWM1YmFjLCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAotCXsgMHgxYzViYjAsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCi0JeyAweDFjNWJiNCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKLQl7IDB4MWM1YmI4LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAotCXsgMHgxYzViYmMsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCi0JeyAweDFjNWJjMCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKLQl7IDB4MWM1YmM0LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAotCXsgMHgxYzViYzgsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCi0JeyAweDFjNWJjYywgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKLQl7IDB4MWM1YmQwLCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAotCXsgMHgxYzViZDQsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCi0JeyAweDFjNWJkOCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKLQl7IDB4MWM1YmRjLCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAotCXsgMHgxYzViZTAsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCi0JeyAweDFjNWJlNCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKLQl7IDB4MWM1YmU4LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAotCXsgMHgxYzViZWMsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCi0JeyAweDFjNWJmMCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKLQl7IDB4MWM1YmY0LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAotCXsgMHgxYzViZjgsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIH0sCi0JeyAweDFjNWJmYywgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSwgfSwKLQl7IDB4MWM1YzAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzVjMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNWMxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM1YzE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzVjMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNWMxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM1YzIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzVjMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNWMyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM1YzJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzVjMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNWMzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM1YzM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzVjM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNWNmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM1Y2Y0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzVjZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNWNmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM2MjAwLCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCB9LAotCXsgMHgxYzYyMDQsIDB4MDAwMDA0NDAsIDB4MDAwMDA0NDAsIDB4MDAwMDA0NDAsIDB4MDAwMDA0NDAsIH0sCi0JeyAweDFjNjIwOCwgMHhkNmJlNDc4OCwgMHhkNmJlNDc4OCwgMHhkMDNlNDc4OCwgMHhkMDNlNDc4OCwgfSwKLQl7IDB4MWM2MjBjLCAweDAxMmU4MTYwLCAweDAxMmU4MTYwLCAweDAxMmE4MTYwLCAweDAxMmE4MTYwLCB9LAotCXsgMHgxYzYyMTAsIDB4NDA4MDYzMzMsIDB4NDA4MDYzMzMsIDB4NDA4MDYzMzMsIDB4NDA4MDYzMzMsIH0sCi0JeyAweDFjNjIxNCwgMHgwMDEwNmMxMCwgMHgwMDEwNmMxMCwgMHgwMDEwNmMxMCwgMHgwMDEwNmMxMCwgfSwKLQl7IDB4MWM2MjE4LCAweDAwOWM0MDYwLCAweDAwOWM0MDYwLCAweDAwOWM0MDYwLCAweDAwOWM0MDYwLCB9LAotCXsgMHgxYzYyMWMsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIH0sCi0JeyAweDFjNjIyMCwgMHgwMTg4MzBjNiwgMHgwMTg4MzBjNiwgMHgwMTg4MzBjNiwgMHgwMTg4MzBjNiwgfSwKLQl7IDB4MWM2MjI0LCAweDAwMDAwNDAwLCAweDAwMDAwNDAwLCAweDAwMDAwNDAwLCAweDAwMDAwNDAwLCB9LAotCXsgMHgxYzYyMjgsIDB4MDAwMDA5YjUsIDB4MDAwMDA5YjUsIDB4MDAwMDA5YjUsIDB4MDAwMDA5YjUsIH0sCi0JeyAweDFjNjIyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM2MjMwLCAweDAwMDAwMTA4LCAweDAwMDAwMjEwLCAweDAwMDAwMjEwLCAweDAwMDAwMTA4LCB9LAotCXsgMHgxYzYyMzQsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIH0sCi0JeyAweDFjNjIzOCwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgfSwKLQl7IDB4MWM2MjNjLCAweDEzYzg4OWFmLCAweDEzYzg4OWFmLCAweDEzYzg4OWFmLCAweDEzYzg4OWFmLCB9LAotCXsgMHgxYzYyNDAsIDB4Mzg0OTBhMjAsIDB4Mzg0OTBhMjAsIDB4Mzg0OTBhMjAsIDB4Mzg0OTBhMjAsIH0sCi0JeyAweDFjNjI0NCwgMHgwMDAwN2JiNiwgMHgwMDAwN2JiNiwgMHgwMDAwN2JiNiwgMHgwMDAwN2JiNiwgfSwKLQl7IDB4MWM2MjQ4LCAweDBmZmYzZmZjLCAweDBmZmYzZmZjLCAweDBmZmYzZmZjLCAweDBmZmYzZmZjLCB9LAotCXsgMHgxYzYyNGMsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIH0sCi0JeyAweDFjNjI1MCwgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCwgfSwKLQl7IDB4MWM2MjU0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzYyNTgsIDB4MGNjNzUzODAsIDB4MGNjNzUzODAsIDB4MGNjNzUzODAsIDB4MGNjNzUzODAsIH0sCi0JeyAweDFjNjI1YywgMHgwZjBmMGYwMSwgMHgwZjBmMGYwMSwgMHgwZjBmMGYwMSwgMHgwZjBmMGYwMSwgfSwKLQl7IDB4MWM2MjYwLCAweGRmYTkxZjAxLCAweGRmYTkxZjAxLCAweGRmYTkxZjAxLCAweGRmYTkxZjAxLCB9LAotCXsgMHgxYzYyNjQsIDB4MDA0MThhMTEsIDB4MDA0MThhMTEsIDB4MDA0MThhMTEsIDB4MDA0MThhMTEsIH0sCi0JeyAweDFjNjI2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM2MjZjLCAweDA5MjQ5MTI2LCAweDA5MjQ5MTI2LCAweDA5MjQ5MTI2LCAweDA5MjQ5MTI2LCB9LAotCXsgMHgxYzYyNzQsIDB4MGExYTljYWEsIDB4MGExYTljYWEsIDB4MGExYTdjYWEsIDB4MGExYTdjYWEsIH0sCi0JeyAweDFjNjI3OCwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgfSwKLQl7IDB4MWM2MjdjLCAweDA1MTcwMWNlLCAweDA1MTcwMWNlLCAweDA1MTcwMWNlLCAweDA1MTcwMWNlLCB9LAotCXsgMHgxYzYzMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAsIH0sCi0JeyAweDFjNjMwNCwgMHgzMDAzMjYwMiwgMHgzMDAzMjYwMiwgMHgyZTAzMjQwMiwgMHgyZTAzMjQwMiwgfSwKLQl7IDB4MWM2MzA4LCAweDQ4MDczZTA2LCAweDQ4MDczZTA2LCAweDRhMGEzYzA2LCAweDRhMGEzYzA2LCB9LAotCXsgMHgxYzYzMGMsIDB4NTYwYjRjMGEsIDB4NTYwYjRjMGEsIDB4NjIxYTU0MGIsIDB4NjIxYTU0MGIsIH0sCi0JeyAweDFjNjMxMCwgMHg2NDFhNjAwZiwgMHg2NDFhNjAwZiwgMHg3NjRmNmMxYiwgMHg3NjRmNmMxYiwgfSwKLQl7IDB4MWM2MzE0LCAweDdhNGY2ZTFiLCAweDdhNGY2ZTFiLCAweDg0NWI3YTVhLCAweDg0NWI3YTVhLCB9LAotCXsgMHgxYzYzMTgsIDB4OGM1YjdlNWEsIDB4OGM1YjdlNWEsIDB4OTUwZjhjY2YsIDB4OTUwZjhjY2YsIH0sCi0JeyAweDFjNjMxYywgMHg5ZDBmOTZjZiwgMHg5ZDBmOTZjZiwgMHhhNWNmOWI0ZiwgMHhhNWNmOWI0ZiwgfSwKLQl7IDB4MWM2MzIwLCAweGI1MWZhNjlmLCAweGI1MWZhNjlmLCAweGJkZGZhZjFmLCAweGJkZGZhZjFmLCB9LAotCXsgMHgxYzYzMjQsIDB4Y2IzZmJkMDcsIDB4Y2IzZmJjYmYsIDB4ZDFmZmM5M2YsIDB4ZDFmZmM5M2YsIH0sCi0JeyAweDFjNjMyOCwgMHgwMDAwZDdiZiwgMHgwMDAwZDdiZiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM2MzJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzYzMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNjMzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM2MzM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzYzM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNjM0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM2MzQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzYzNDgsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIH0sCi0JeyAweDFjNjM0YywgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgfSwKLQl7IDB4MWM2MzUwLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCB9LAotCXsgMHgxYzYzNTQsIDB4MDAwM2ZmZmYsIDB4MDAwM2ZmZmYsIDB4MDAwM2ZmZmYsIDB4MDAwM2ZmZmYsIH0sCi0JeyAweDFjNjM1OCwgMHg3OWE4YWExZiwgMHg3OWE4YWExZiwgMHg3OWE4YWExZiwgMHg3OWE4YWExZiwgfSwKLQl7IDB4MWM2Mzg4LCAweDA4MDAwMDAwLCAweDA4MDAwMDAwLCAweDA4MDAwMDAwLCAweDA4MDAwMDAwLCB9LAotCXsgMHgxYzYzOGMsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIH0sCi0JeyAweDFjNjM5MCwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgfSwKLQl7IDB4MWM2Mzk0LCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCB9LAotCXsgMHgxYzYzOTgsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIH0sCi0JeyAweDFjNjM5YywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgfSwKLQl7IDB4MWM2M2EwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzYzYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNjNhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM2M2FjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzYzYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNjNiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM2M2I4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzYzYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNjNjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM2M2M0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzYzYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNjNjYywgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgfSwKLQl7IDB4MWM2M2QwLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCB9LAotCXsgMHgxYzYzZDQsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIH0sCi0JeyAweDFjNjNkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM2M2RjLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCB9LAotCXsgMHgxYzYzZTAsIDB4MDAwMDAwYzAsIDB4MDAwMDAwYzAsIDB4MDAwMDAwYzAsIDB4MDAwMDAwYzAsIH0sCi0JeyAweDFjNjg0OCwgMHgwMDE4MGE2NSwgMHgwMDE4MGE2NSwgMHgwMDE4MGE2OCwgMHgwMDE4MGE2OCwgfSwKLQl7IDB4MWM2OTIwLCAweDA1MTAwMDFjLCAweDA1MTAwMDFjLCAweDA1MTAwMDFjLCAweDA1MTAwMDFjLCB9LAotCXsgMHgxYzY5NjAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIH0sCi0JeyAweDFjNzIwYywgMHgwMTJlODE2MCwgMHgwMTJlODE2MCwgMHgwMTJhODE2MCwgMHgwMTJhODE2MCwgfSwKLQl7IDB4MWM3MjZjLCAweDA5MjQ5MTI2LCAweDA5MjQ5MTI2LCAweDA5MjQ5MTI2LCAweDA5MjQ5MTI2LCB9LAotCXsgMHgxYzc4NDgsIDB4MDAxODBhNjUsIDB4MDAxODBhNjUsIDB4MDAxODBhNjgsIDB4MDAxODBhNjgsIH0sCi0JeyAweDFjNzkyMCwgMHgwNTEwMDAxYywgMHgwNTEwMDAxYywgMHgwNTEwMDAxYywgMHgwNTEwMDAxYywgfSwKLQl7IDB4MWM3OTYwLCAweDAwMDA5YjQwLCAweDAwMDA5YjQwLCAweDAwMDA5YjQwLCAweDAwMDA5YjQwLCB9LAotCXsgMHgxYzgyMGMsIDB4MDEyZTgxNjAsIDB4MDEyZTgxNjAsIDB4MDEyYTgxNjAsIDB4MDEyYTgxNjAsIH0sCi0JeyAweDFjODI2YywgMHgwOTI0OTEyNiwgMHgwOTI0OTEyNiwgMHgwOTI0OTEyNiwgMHgwOTI0OTEyNiwgfSwKLS8qCXsgMHgxYzg4NjQsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIH0sICovCi0JeyAweDFjODg2NCwgMHgwMDAxYzYwMCwgMHgwMDAxYzYwMCwgMHgwMDAxYzYwMCwgMHgwMDAxYzYwMCwgfSwKLQl7IDB4MWM4OTVjLCAweDAwNGI2YThlLCAweDAwNGI2YThlLCAweDAwNGI2YThlLCAweDAwNGI2YThlLCB9LAotCXsgMHgxYzg5NjgsIDB4MDAwMDAzY2UsIDB4MDAwMDAzY2UsIDB4MDAwMDAzY2UsIDB4MDAwMDAzY2UsIH0sCi0JeyAweDFjODliYywgMHgwMDE4MTQwMCwgMHgwMDE4MTQwMCwgMHgwMDE4MTQwMCwgMHgwMDE4MTQwMCwgfSwKLQl7IDB4MWM5MjcwLCAweDAwODIwODIwLCAweDAwODIwODIwLCAweDAwODIwODIwLCAweDAwODIwODIwLCB9LAotCXsgMHgxYzkzNWMsIDB4MDY2YzQyMGYsIDB4MDY2YzQyMGYsIDB4MDY2YzQyMGYsIDB4MDY2YzQyMGYsIH0sCi0JeyAweDFjOTM2MCwgMHgwZjI4MjIwNywgMHgwZjI4MjIwNywgMHgwZjI4MjIwNywgMHgwZjI4MjIwNywgfSwKLQl7IDB4MWM5MzY0LCAweDE3NjAxNjg1LCAweDE3NjAxNjg1LCAweDE3NjAxNjg1LCAweDE3NjAxNjg1LCB9LAotCXsgMHgxYzkzNjgsIDB4MWY4MDExMDQsIDB4MWY4MDExMDQsIDB4MWY4MDExMDQsIDB4MWY4MDExMDQsIH0sCi0JeyAweDFjOTM2YywgMHgzN2EwMGMwMywgMHgzN2EwMGMwMywgMHgzN2EwMGMwMywgMHgzN2EwMGMwMywgfSwKLQl7IDB4MWM5MzcwLCAweDNmYzQwODgzLCAweDNmYzQwODgzLCAweDNmYzQwODgzLCAweDNmYzQwODgzLCB9LAotCXsgMHgxYzkzNzQsIDB4NTdjMDA4MDMsIDB4NTdjMDA4MDMsIDB4NTdjMDA4MDMsIDB4NTdjMDA4MDMsIH0sCi0JeyAweDFjOTM3OCwgMHg1ZmQ4MDY4MiwgMHg1ZmQ4MDY4MiwgMHg1ZmQ4MDY4MiwgMHg1ZmQ4MDY4MiwgfSwKLQl7IDB4MWM5MzdjLCAweDdmZTAwNDgyLCAweDdmZTAwNDgyLCAweDdmZTAwNDgyLCAweDdmZTAwNDgyLCB9LAotCXsgMHgxYzkzODAsIDB4N2YzYzdiYmEsIDB4N2YzYzdiYmEsIDB4N2YzYzdiYmEsIDB4N2YzYzdiYmEsIH0sCi0JeyAweDFjOTM4NCwgMHhmMzMwN2ZmMCwgMHhmMzMwN2ZmMCwgMHhmMzMwN2ZmMCwgMHhmMzMwN2ZmMCwgfQotfTsKLQotLyoKLSAqIGxvb2sgdXAgYSBjZXJ0YWluIHJlZ2lzdGVyIGluIGFyNTQxNl9waHlfaW5pdFtdIGFuZCByZXR1cm4gdGhlIGluaXQuIHZhbHVlCi0gKiBmb3IgdGhlIGJhbmQgYW5kIGJhbmR3aWR0aCBnaXZlbi4gUmV0dXJuIDAgaWYgcmVnaXN0ZXIgYWRkcmVzcyBub3QgZm91bmQuCi0gKi8KLXN0YXRpYyB1MzIgYXI5MTcwX2dldF9kZWZhdWx0X3BoeV9yZWdfdmFsKHUzMiByZWcsIGJvb2wgaXNfMmdoeiwgYm9vbCBpc180MG1oeikKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhcjU0MTZfcGh5X2luaXQpOyBpKyspIHsKLQkJaWYgKGFyNTQxNl9waHlfaW5pdFtpXS5yZWcgIT0gcmVnKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGlzXzJnaHopIHsKLQkJCWlmIChpc180MG1oeikKLQkJCQlyZXR1cm4gYXI1NDE2X3BoeV9pbml0W2ldLl8yZ2h6XzQwOwotCQkJZWxzZQotCQkJCXJldHVybiBhcjU0MTZfcGh5X2luaXRbaV0uXzJnaHpfMjA7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoaXNfNDBtaHopCi0JCQkJcmV0dXJuIGFyNTQxNl9waHlfaW5pdFtpXS5fNWdoel80MDsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gYXI1NDE2X3BoeV9pbml0W2ldLl81Z2h6XzIwOwotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi0vKgotICogaW5pdGlhbGl6ZSBzb21lIHBoeSByZWdzIGZyb20gZWVwcm9tIHZhbHVlcyBpbiBtb2RhbF9oZWFkZXJbXQotICogYWNjLiB0byBiYW5kIGFuZCBiYW5kd2lkdGgKLSAqLwotc3RhdGljIGludCBhcjkxNzBfaW5pdF9waHlfZnJvbV9lZXByb20oc3RydWN0IGFyOTE3MCAqYXIsCi0JCQkJYm9vbCBpc18yZ2h6LCBib29sIGlzXzQwbWh6KQotewotCXN0YXRpYyBjb25zdCB1OCB4cGQycGRbMTZdID0gewotCQkweDIsIDB4MiwgMHgyLCAweDEsIDB4MiwgMHgyLCAweDYsIDB4MiwKLQkJMHgyLCAweDMsIDB4NywgMHgyLCAweEIsIDB4MiwgMHgyLCAweDIKLQl9OwotCXUzMiBkZWZ2YWwsIG5ld3ZhbDsKLQkvKiBwb2ludGVyIHRvIHRoZSBtb2RhbF9oZWFkZXIgYWNjLiB0byBiYW5kICovCi0Jc3RydWN0IGFyOTE3MF9lZXByb21fbW9kYWwgKm0gPSAmYXItPmVlcHJvbS5tb2RhbF9oZWFkZXJbaXNfMmdoel07Ci0KLQlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOwotCi0JLyogYW50IGNvbW1vbiBjb250cm9sIChpbmRleCAwKSAqLwotCW5ld3ZhbCA9IGxlMzJfdG9fY3B1KG0tPmFudEN0cmxDb21tb24pOwotCWFyOTE3MF9yZWd3cml0ZSgweDFjNTk2NCwgbmV3dmFsKTsKLQotCS8qIGFudCBjb250cm9sIGNoYWluIDAgKGluZGV4IDEpICovCi0JbmV3dmFsID0gbGUzMl90b19jcHUobS0+YW50Q3RybENoYWluWzBdKTsKLQlhcjkxNzBfcmVnd3JpdGUoMHgxYzU5NjAsIG5ld3ZhbCk7Ci0KLQkvKiBhbnQgY29udHJvbCBjaGFpbiAyIChpbmRleCAyKSAqLwotCW5ld3ZhbCA9IGxlMzJfdG9fY3B1KG0tPmFudEN0cmxDaGFpblsxXSk7Ci0JYXI5MTcwX3JlZ3dyaXRlKDB4MWM3OTYwLCBuZXd2YWwpOwotCi0JLyogU3dTZXR0bGUgKGluZGV4IDMpICovCi0JaWYgKCFpc180MG1oeikgewotCQlkZWZ2YWwgPSBhcjkxNzBfZ2V0X2RlZmF1bHRfcGh5X3JlZ192YWwoMHgxYzU4NDQsCi0JCQkJCQkJaXNfMmdoeiwgaXNfNDBtaHopOwotCQluZXd2YWwgPSAoZGVmdmFsICYgfjB4M2Y4MCkgfAotCQkJKChtLT5zd2l0Y2hTZXR0bGluZyAmIDB4N2YpIDw8IDcpOwotCQlhcjkxNzBfcmVnd3JpdGUoMHgxYzU4NDQsIG5ld3ZhbCk7Ci0JfQotCi0JLyogYWRjRGVzaXJlZCwgcGRhRGVzaXJlZCAoaW5kZXggNCkgKi8KLQlkZWZ2YWwgPSBhcjkxNzBfZ2V0X2RlZmF1bHRfcGh5X3JlZ192YWwoMHgxYzU4NTAsIGlzXzJnaHosIGlzXzQwbWh6KTsKLQluZXd2YWwgPSAoZGVmdmFsICYgfjB4ZmZmZikgfCAoKHU4KW0tPnBnYURlc2lyZWRTaXplIDw8IDgpIHwKLQkJKCh1OCltLT5hZGNEZXNpcmVkU2l6ZSk7Ci0JYXI5MTcwX3JlZ3dyaXRlKDB4MWM1ODUwLCBuZXd2YWwpOwotCi0JLyogVHhFbmRUb1hwYU9mZiwgVHhGcmFtZVRvWHBhT24gKGluZGV4IDUpICovCi0JZGVmdmFsID0gYXI5MTcwX2dldF9kZWZhdWx0X3BoeV9yZWdfdmFsKDB4MWM1ODM0LCBpc18yZ2h6LCBpc180MG1oeik7Ci0JbmV3dmFsID0gKG0tPnR4RW5kVG9YcGFPZmYgPDwgMjQpIHwgKG0tPnR4RW5kVG9YcGFPZmYgPDwgMTYpIHwKLQkJKG0tPnR4RnJhbWVUb1hwYU9uIDw8IDgpIHwgbS0+dHhGcmFtZVRvWHBhT247Ci0JYXI5MTcwX3JlZ3dyaXRlKDB4MWM1ODM0LCBuZXd2YWwpOwotCi0JLyogVHhFbmRUb1J4T24gKGluZGV4IDYpICovCi0JZGVmdmFsID0gYXI5MTcwX2dldF9kZWZhdWx0X3BoeV9yZWdfdmFsKDB4MWM1ODI4LCBpc18yZ2h6LCBpc180MG1oeik7Ci0JbmV3dmFsID0gKGRlZnZhbCAmIH4weGZmMDAwMCkgfCAobS0+dHhFbmRUb1J4T24gPDwgMTYpOwotCWFyOTE3MF9yZWd3cml0ZSgweDFjNTgyOCwgbmV3dmFsKTsKLQotCS8qIHRocmVzaDYyIChpbmRleCA3KSAqLwotCWRlZnZhbCA9IGFyOTE3MF9nZXRfZGVmYXVsdF9waHlfcmVnX3ZhbCgweDFjODg2NCwgaXNfMmdoeiwgaXNfNDBtaHopOwotCW5ld3ZhbCA9IChkZWZ2YWwgJiB+MHg3ZjAwMCkgfCAobS0+dGhyZXNoNjIgPDwgMTIpOwotCWFyOTE3MF9yZWd3cml0ZSgweDFjODg2NCwgbmV3dmFsKTsKLQotCS8qIHR4L3J4IGF0dGVudWF0aW9uIGNoYWluIDAgKGluZGV4IDgpICovCi0JZGVmdmFsID0gYXI5MTcwX2dldF9kZWZhdWx0X3BoeV9yZWdfdmFsKDB4MWM1ODQ4LCBpc18yZ2h6LCBpc180MG1oeik7Ci0JbmV3dmFsID0gKGRlZnZhbCAmIH4weDNmMDAwKSB8ICgobS0+dHhSeEF0dGVuQ2hbMF0gJiAweDNmKSA8PCAxMik7Ci0JYXI5MTcwX3JlZ3dyaXRlKDB4MWM1ODQ4LCBuZXd2YWwpOwotCi0JLyogdHgvcnggYXR0ZW51YXRpb24gY2hhaW4gMiAoaW5kZXggOSkgKi8KLQlkZWZ2YWwgPSBhcjkxNzBfZ2V0X2RlZmF1bHRfcGh5X3JlZ192YWwoMHgxYzc4NDgsIGlzXzJnaHosIGlzXzQwbWh6KTsKLQluZXd2YWwgPSAoZGVmdmFsICYgfjB4M2YwMDApIHwgKChtLT50eFJ4QXR0ZW5DaFsxXSAmIDB4M2YpIDw8IDEyKTsKLQlhcjkxNzBfcmVnd3JpdGUoMHgxYzc4NDgsIG5ld3ZhbCk7Ci0KLQkvKiB0eC9yeCBtYXJnaW4gY2hhaW4gMCAoaW5kZXggMTApICovCi0JZGVmdmFsID0gYXI5MTcwX2dldF9kZWZhdWx0X3BoeV9yZWdfdmFsKDB4MWM2MjBjLCBpc18yZ2h6LCBpc180MG1oeik7Ci0JbmV3dmFsID0gKGRlZnZhbCAmIH4weGZjMDAwMCkgfCAoKG0tPnJ4VHhNYXJnaW5DaFswXSAmIDB4M2YpIDw8IDE4KTsKLQkvKiBic3cgbWFyZ2luIGNoYWluIDAgZm9yIDVHSHogb25seSAqLwotCWlmICghaXNfMmdoeikKLQkJbmV3dmFsID0gKG5ld3ZhbCAmIH4weDNjMDApIHwgKChtLT5ic3dNYXJnaW5bMF0gJiAweGYpIDw8IDEwKTsKLQlhcjkxNzBfcmVnd3JpdGUoMHgxYzYyMGMsIG5ld3ZhbCk7Ci0KLQkvKiB0eC9yeCBtYXJnaW4gY2hhaW4gMiAoaW5kZXggMTEpICovCi0JZGVmdmFsID0gYXI5MTcwX2dldF9kZWZhdWx0X3BoeV9yZWdfdmFsKDB4MWM4MjBjLCBpc18yZ2h6LCBpc180MG1oeik7Ci0JbmV3dmFsID0gKGRlZnZhbCAmIH4weGZjMDAwMCkgfCAoKG0tPnJ4VHhNYXJnaW5DaFsxXSAmIDB4M2YpIDw8IDE4KTsKLQlhcjkxNzBfcmVnd3JpdGUoMHgxYzgyMGMsIG5ld3ZhbCk7Ci0KLQkvKiBpcUNhbGwsIGlxQ2FsbHEgY2hhaW4gMCAoaW5kZXggMTIpICovCi0JZGVmdmFsID0gYXI5MTcwX2dldF9kZWZhdWx0X3BoeV9yZWdfdmFsKDB4MWM1OTIwLCBpc18yZ2h6LCBpc180MG1oeik7Ci0JbmV3dmFsID0gKGRlZnZhbCAmIH4weDdmZikgfCAoKCh1OCltLT5pcUNhbElDaFswXSAmIDB4M2YpIDw8IDUpIHwKLQkJKCh1OCltLT5pcUNhbFFDaFswXSAmIDB4MWYpOwotCWFyOTE3MF9yZWd3cml0ZSgweDFjNTkyMCwgbmV3dmFsKTsKLQotCS8qIGlxQ2FsbCwgaXFDYWxscSBjaGFpbiAyIChpbmRleCAxMykgKi8KLQlkZWZ2YWwgPSBhcjkxNzBfZ2V0X2RlZmF1bHRfcGh5X3JlZ192YWwoMHgxYzc5MjAsIGlzXzJnaHosIGlzXzQwbWh6KTsKLQluZXd2YWwgPSAoZGVmdmFsICYgfjB4N2ZmKSB8ICgoKHU4KW0tPmlxQ2FsSUNoWzFdICYgMHgzZikgPDwgNSkgfAotCQkoKHU4KW0tPmlxQ2FsUUNoWzFdICYgMHgxZik7Ci0JYXI5MTcwX3JlZ3dyaXRlKDB4MWM3OTIwLCBuZXd2YWwpOwotCi0JLyogeHBkIGdhaW4gbWFzayAoaW5kZXggMTQpICovCi0JZGVmdmFsID0gYXI5MTcwX2dldF9kZWZhdWx0X3BoeV9yZWdfdmFsKDB4MWM2MjU4LCBpc18yZ2h6LCBpc180MG1oeik7Ci0JbmV3dmFsID0gKGRlZnZhbCAmIH4weGYwMDAwKSB8ICh4cGQycGRbbS0+eHBkR2FpbiAmIDB4Zl0gPDwgMTYpOwotCWFyOTE3MF9yZWd3cml0ZSgweDFjNjI1OCwgbmV3dmFsKTsKLQlhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCk7Ci0KLQlyZXR1cm4gYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpOwotfQotCi1pbnQgYXI5MTcwX2luaXRfcGh5KHN0cnVjdCBhcjkxNzAgKmFyLCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCi17Ci0JaW50IGksIGVycjsKLQl1MzIgdmFsOwotCWJvb2wgaXNfMmdoeiA9IGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWjsKLQlib29sIGlzXzQwbWh6ID0gY29uZl9pc19odDQwKCZhci0+aHctPmNvbmYpOwotCi0JYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFyNTQxNl9waHlfaW5pdCk7IGkrKykgewotCQlpZiAoaXNfNDBtaHopIHsKLQkJCWlmIChpc18yZ2h6KQotCQkJCXZhbCA9IGFyNTQxNl9waHlfaW5pdFtpXS5fMmdoel80MDsKLQkJCWVsc2UKLQkJCQl2YWwgPSBhcjU0MTZfcGh5X2luaXRbaV0uXzVnaHpfNDA7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoaXNfMmdoeikKLQkJCQl2YWwgPSBhcjU0MTZfcGh5X2luaXRbaV0uXzJnaHpfMjA7Ci0JCQllbHNlCi0JCQkJdmFsID0gYXI1NDE2X3BoeV9pbml0W2ldLl81Z2h6XzIwOwotCQl9Ci0KLQkJYXI5MTcwX3JlZ3dyaXRlKGFyNTQxNl9waHlfaW5pdFtpXS5yZWcsIHZhbCk7Ci0JfQotCi0JYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOwotCWVyciA9IGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gYXI5MTcwX2luaXRfcGh5X2Zyb21fZWVwcm9tKGFyLCBpc18yZ2h6LCBpc180MG1oeik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IGFyOTE3MF9pbml0X3Bvd2VyX2NhbChhcik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCS8qIFhYWDogcmVtb3ZlIG1hZ2ljISAqLwotCWlmIChpc18yZ2h6KQotCQllcnIgPSBhcjkxNzBfd3JpdGVfcmVnKGFyLCAweDFkNDAxNCwgMHg1MTYzKTsKLQllbHNlCi0JCWVyciA9IGFyOTE3MF93cml0ZV9yZWcoYXIsIDB4MWQ0MDE0LCAweDUxNDMpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RydWN0IGFyOTE3MF9yZl9pbml0IHsKLQl1MzIgcmVnLCBfNWdoeiwgXzJnaHo7Ci19OwotCi1zdGF0aWMgc3RydWN0IGFyOTE3MF9yZl9pbml0IGFyOTE3MF9yZl9pbml0W10gPSB7Ci0gICAgIC8qIGJhbmsgMCAqLwotICAgICB7IDB4MWM1OGIwLCAgMHgxZTU3OTVlNSwgIDB4MWU1Nzk1ZTV9LAotICAgICB7IDB4MWM1OGUwLCAgMHgwMjAwODAyMCwgIDB4MDIwMDgwMjB9LAotICAgICAvKiBiYW5rIDEgKi8KLSAgICAgeyAweDFjNThiMCwgIDB4MDIxMDg0MjEsICAweDAyMTA4NDIxfSwKLSAgICAgeyAweDFjNThlYywgIDB4MDAwMDAwMDgsICAweDAwMDAwMDA4fSwKLSAgICAgLyogYmFuayAyICovCi0gICAgIHsgMHgxYzU4YjAsICAweDBlNzNmZjE3LCAgMHgwZTczZmYxN30sCi0gICAgIHsgMHgxYzU4ZTAsICAweDAwMDAwNDIwLCAgMHgwMDAwMDQyMH0sCi0gICAgIC8qIGJhbmsgMyAqLwotICAgICB7IDB4MWM1OGYwLCAgMHgwMTQwMDAxOCwgIDB4MDFjMDAwMTh9LAotICAgICAvKiBiYW5rIDQgKi8KLSAgICAgeyAweDFjNThiMCwgIDB4MDAwMDAxYTEsICAweDAwMDAwMWExfSwKLSAgICAgeyAweDFjNThlOCwgIDB4MDAwMDAwMDEsICAweDAwMDAwMDAxfSwKLSAgICAgLyogYmFuayA1ICovCi0gICAgIHsgMHgxYzU4YjAsICAweDAwMDAwMDEzLCAgMHgwMDAwMDAxM30sCi0gICAgIHsgMHgxYzU4ZTQsICAweDAwMDAwMDAyLCAgMHgwMDAwMDAwMn0sCi0gICAgIC8qIGJhbmsgNiAqLwotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAwMCwgIDB4MDAwMDAwMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAwMCwgIDB4MDAwMDAwMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAwMCwgIDB4MDAwMDAwMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAwMCwgIDB4MDAwMDAwMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAwMCwgIDB4MDAwMDAwMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNDAwMCwgIDB4MDAwMDQwMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNmMwMCwgIDB4MDAwMDZjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMmMwMCwgIDB4MDAwMDJjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNDgwMCwgIDB4MDAwMDQ4MDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNDAwMCwgIDB4MDAwMDQwMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNjAwMCwgIDB4MDAwMDYwMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMTAwMCwgIDB4MDAwMDEwMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNDAwMCwgIDB4MDAwMDQwMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwN2MwMCwgIDB4MDAwMDdjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwN2MwMCwgIDB4MDAwMDdjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwN2MwMCwgIDB4MDAwMDdjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwN2MwMCwgIDB4MDAwMDdjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwN2MwMCwgIDB4MDAwMDdjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDA4N2MwMCwgIDB4MDAwODdjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwN2MwMCwgIDB4MDAwMDdjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNTQwMCwgIDB4MDAwMDU0MDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMGMwMCwgIDB4MDAwMDBjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMTgwMCwgIDB4MDAwMDE4MDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwN2MwMCwgIDB4MDAwMDdjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNmMwMCwgIDB4MDAwMDZjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNmMwMCwgIDB4MDAwMDZjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwN2MwMCwgIDB4MDAwMDdjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMmMwMCwgIDB4MDAwMDJjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwM2MwMCwgIDB4MDAwMDNjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMzgwMCwgIDB4MDAwMDM4MDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMWMwMCwgIDB4MDAwMDFjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDgwMCwgIDB4MDAwMDA4MDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDQwOCwgIDB4MDAwMDA0MDh9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNGMxNSwgIDB4MDAwMDRjMTV9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNDE4OCwgIDB4MDAwMDQxODh9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMjAxZSwgIDB4MDAwMDIwMWV9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAxMDQwOCwgIDB4MDAwMTA0MDh9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDgwMSwgIDB4MDAwMDA4MDF9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMGMwOCwgIDB4MDAwMDBjMDh9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMTgxZSwgIDB4MDAwMDE4MWV9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMTAxNiwgIDB4MDAwMDEwMTZ9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMjgwMCwgIDB4MDAwMDI4MDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNDAxMCwgIDB4MDAwMDQwMTB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDgxYywgIDB4MDAwMDA4MWN9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDExNSwgIDB4MDAwMDAxMTV9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAxNSwgIDB4MDAwMDAwMTV9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDA2NiwgIDB4MDAwMDAwNjZ9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAxYywgIDB4MDAwMDAwMWN9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAwMCwgIDB4MDAwMDAwMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAwNCwgIDB4MDAwMDAwMDR9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAxNSwgIDB4MDAwMDAwMTV9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAxZiwgIDB4MDAwMDAwMWZ9LAotICAgICB7IDB4MWM1OGUwLCAgMHgwMDAwMDAwMCwgIDB4MDAwMDA0MDB9LAotICAgICAvKiBiYW5rIDcgKi8KLSAgICAgeyAweDFjNThiMCwgIDB4MDAwMDAwYTAsICAweDAwMDAwMGEwfSwKLSAgICAgeyAweDFjNThiMCwgIDB4MDAwMDAwMDAsICAweDAwMDAwMDAwfSwKLSAgICAgeyAweDFjNThiMCwgIDB4MDAwMDAwNDAsICAweDAwMDAwMDQwfSwKLSAgICAgeyAweDFjNThmMCwgIDB4MDAwMDAwMWMsICAweDAwMDAwMDFjfSwKLX07Ci0KLXN0YXRpYyBpbnQgYXI5MTcwX2luaXRfcmZfYmFua3NfMF83KHN0cnVjdCBhcjkxNzAgKmFyLCBib29sIGJhbmQ1Z2h6KQotewotCWludCBlcnIsIGk7Ci0KLQlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXI5MTcwX3JmX2luaXQpOyBpKyspCi0JCWFyOTE3MF9yZWd3cml0ZShhcjkxNzBfcmZfaW5pdFtpXS5yZWcsCi0JCQkJYmFuZDVnaHogPyBhcjkxNzBfcmZfaW5pdFtpXS5fNWdoegotCQkJCQkgOiBhcjkxNzBfcmZfaW5pdFtpXS5fMmdoeik7Ci0KLQlhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCk7Ci0JZXJyID0gYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpOwotCWlmIChlcnIpCi0JCXdpcGh5X2Vycihhci0+aHctPndpcGh5LCAicmYgaW5pdCBmYWlsZWRcbiIpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgYXI5MTcwX2luaXRfcmZfYmFuazRfcHdyKHN0cnVjdCBhcjkxNzAgKmFyLCBib29sIGJhbmQ1Z2h6LAotCQkJCSAgICB1MzIgZnJlcSwgZW51bSBhcjkxNzBfYncgYncpCi17Ci0JaW50IGVycjsKLQl1MzIgZDAsIGQxLCB0ZDAsIHRkMSwgZmQwLCBmZDE7Ci0JdTggY2hhbnNlbDsKLQl1OCByZWZzZWwwID0gMSwgcmVmc2VsMSA9IDA7Ci0JdTggbGZfc3ludGggPSAwOwotCi0Jc3dpdGNoIChidykgewotCWNhc2UgQVI5MTcwX0JXXzQwX0FCT1ZFOgotCQlmcmVxICs9IDEwOwotCQlicmVhazsKLQljYXNlIEFSOTE3MF9CV180MF9CRUxPVzoKLQkJZnJlcSAtPSAxMDsKLQkJYnJlYWs7Ci0JY2FzZSBBUjkxNzBfQldfMjA6Ci0JCWJyZWFrOwotCWNhc2UgX19BUjkxNzBfTlVNX0JXOgotCQlCVUcoKTsKLQl9Ci0KLQlpZiAoYmFuZDVnaHopIHsKLQkJaWYgKGZyZXEgJSAxMCkgewotCQkJY2hhbnNlbCA9IChmcmVxIC0gNDgwMCkgLyA1OwotCQl9IGVsc2UgewotCQkJY2hhbnNlbCA9ICgoZnJlcSAtIDQ4MDApIC8gMTApICogMjsKLQkJCXJlZnNlbDAgPSAwOwotCQkJcmVmc2VsMSA9IDE7Ci0JCX0KLQkJY2hhbnNlbCA9IGJ5dGVfcmV2X3RhYmxlW2NoYW5zZWxdOwotCX0gZWxzZSB7Ci0JCWlmIChmcmVxID09IDI0ODQpIHsKLQkJCWNoYW5zZWwgPSAxMCArIChmcmVxIC0gMjI3NCkgLyA1OwotCQkJbGZfc3ludGggPSAxOwotCQl9IGVsc2UKLQkJCWNoYW5zZWwgPSAxNiArIChmcmVxIC0gMjI3MikgLyA1OwotCQljaGFuc2VsICo9IDQ7Ci0JCWNoYW5zZWwgPSBieXRlX3Jldl90YWJsZVtjaGFuc2VsXTsKLQl9Ci0KLQlkMSA9CWNoYW5zZWw7Ci0JZDAgPQkweDIxIHwKLQkJcmVmc2VsMCA8PCAzIHwKLQkJcmVmc2VsMSA8PCAyIHwKLQkJbGZfc3ludGggPDwgMTsKLQl0ZDAgPQlkMCAmIDB4MWY7Ci0JdGQxID0JZDEgJiAweDFmOwotCWZkMCA9CXRkMSA8PCA1IHwgdGQwOwotCi0JdGQwID0JKGQwID4+IDUpICYgMHg3OwotCXRkMSA9CShkMSA+PiA1KSAmIDB4NzsKLQlmZDEgPQl0ZDEgPDwgNSB8IHRkMDsKLQotCWFyOTE3MF9yZWd3cml0ZV9iZWdpbihhcik7Ci0KLQlhcjkxNzBfcmVnd3JpdGUoMHgxYzU4YjAsIGZkMCk7Ci0JYXI5MTcwX3JlZ3dyaXRlKDB4MWM1OGU4LCBmZDEpOwotCi0JYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOwotCWVyciA9IGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JbXNsZWVwKDEwKTsKLQotCXJldHVybiAwOwotfQotCi1zdHJ1Y3QgYXI5MTcwX3BoeV9mcmVxX3BhcmFtcyB7Ci0JdTggY29lZmZfZXhwOwotCXUxNiBjb2VmZl9tYW47Ci0JdTggY29lZmZfZXhwX3NoZ2k7Ci0JdTE2IGNvZWZmX21hbl9zaGdpOwotfTsKLQotc3RydWN0IGFyOTE3MF9waHlfZnJlcV9lbnRyeSB7Ci0JdTE2IGZyZXE7Ci0Jc3RydWN0IGFyOTE3MF9waHlfZnJlcV9wYXJhbXMgcGFyYW1zW19fQVI5MTcwX05VTV9CV107Ci19OwotCi0vKiBOQjogbXVzdCBiZSBpbiBzeW5jIHdpdGggY2hhbm5lbCB0YWJsZXMgaW4gbWFpbiEgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXI5MTcwX3BoeV9mcmVxX2VudHJ5IGFyOTE3MF9waHlfZnJlcV9wYXJhbXNbXSA9IHsKLS8qCi0gKglmcmVxLAotICoJCTIwTUh6LAotICoJCTQwTUh6IChiZWxvdyksCi0gKgkJNDBNaHogKGFib3ZlKSwKLSAqLwotCXsgMjQxMiwgewotCQl7IDMsIDIxNzM3LCAzLCAxOTU2MywgfSwKLQkJeyAzLCAyMTgyNywgMywgMTk2NDQsIH0sCi0JCXsgMywgMjE2NDcsIDMsIDE5NDgyLCB9LAotCX0gfSwKLQl7IDI0MTcsIHsKLQkJeyAzLCAyMTY5MiwgMywgMTk1MjMsIH0sCi0JCXsgMywgMjE3ODIsIDMsIDE5NjA0LCB9LAotCQl7IDMsIDIxNjAyLCAzLCAxOTQ0MiwgfSwKLQl9IH0sCi0JeyAyNDIyLCB7Ci0JCXsgMywgMjE2NDcsIDMsIDE5NDgyLCB9LAotCQl7IDMsIDIxNzM3LCAzLCAxOTU2MywgfSwKLQkJeyAzLCAyMTU1OCwgMywgMTk0MDIsIH0sCi0JfSB9LAotCXsgMjQyNywgewotCQl7IDMsIDIxNjAyLCAzLCAxOTQ0MiwgfSwKLQkJeyAzLCAyMTY5MiwgMywgMTk1MjMsIH0sCi0JCXsgMywgMjE1MTQsIDMsIDE5MzYyLCB9LAotCX0gfSwKLQl7IDI0MzIsIHsKLQkJeyAzLCAyMTU1OCwgMywgMTk0MDIsIH0sCi0JCXsgMywgMjE2NDcsIDMsIDE5NDgyLCB9LAotCQl7IDMsIDIxNDcwLCAzLCAxOTMyMywgfSwKLQl9IH0sCi0JeyAyNDM3LCB7Ci0JCXsgMywgMjE1MTQsIDMsIDE5MzYyLCB9LAotCQl7IDMsIDIxNjAyLCAzLCAxOTQ0MiwgfSwKLQkJeyAzLCAyMTQyNiwgMywgMTkyODMsIH0sCi0JfSB9LAotCXsgMjQ0MiwgewotCQl7IDMsIDIxNDcwLCAzLCAxOTMyMywgfSwKLQkJeyAzLCAyMTU1OCwgMywgMTk0MDIsIH0sCi0JCXsgMywgMjEzODIsIDMsIDE5MjQ0LCB9LAotCX0gfSwKLQl7IDI0NDcsIHsKLQkJeyAzLCAyMTQyNiwgMywgMTkyODMsIH0sCi0JCXsgMywgMjE1MTQsIDMsIDE5MzYyLCB9LAotCQl7IDMsIDIxMzM5LCAzLCAxOTIwNSwgfSwKLQl9IH0sCi0JeyAyNDUyLCB7Ci0JCXsgMywgMjEzODIsIDMsIDE5MjQ0LCB9LAotCQl7IDMsIDIxNDcwLCAzLCAxOTMyMywgfSwKLQkJeyAzLCAyMTI5NSwgMywgMTkxNjYsIH0sCi0JfSB9LAotCXsgMjQ1NywgewotCQl7IDMsIDIxMzM5LCAzLCAxOTIwNSwgfSwKLQkJeyAzLCAyMTQyNiwgMywgMTkyODMsIH0sCi0JCXsgMywgMjEyNTIsIDMsIDE5MTI3LCB9LAotCX0gfSwKLQl7IDI0NjIsIHsKLQkJeyAzLCAyMTI5NSwgMywgMTkxNjYsIH0sCi0JCXsgMywgMjEzODIsIDMsIDE5MjQ0LCB9LAotCQl7IDMsIDIxMjA5LCAzLCAxOTA4OCwgfSwKLQl9IH0sCi0JeyAyNDY3LCB7Ci0JCXsgMywgMjEyNTIsIDMsIDE5MTI3LCB9LAotCQl7IDMsIDIxMzM5LCAzLCAxOTIwNSwgfSwKLQkJeyAzLCAyMTE2NiwgMywgMTkwNTAsIH0sCi0JfSB9LAotCXsgMjQ3MiwgewotCQl7IDMsIDIxMjA5LCAzLCAxOTA4OCwgfSwKLQkJeyAzLCAyMTI5NSwgMywgMTkxNjYsIH0sCi0JCXsgMywgMjExMjQsIDMsIDE5MDExLCB9LAotCX0gfSwKLQl7IDI0ODQsIHsKLQkJeyAzLCAyMTEwNywgMywgMTg5OTYsIH0sCi0JCXsgMywgMjExOTIsIDMsIDE5MDczLCB9LAotCQl7IDMsIDIxMDIyLCAzLCAxODkyMCwgfSwKLQl9IH0sCi0JeyA0OTIwLCB7Ci0JCXsgNCwgMjEzMTMsIDQsIDE5MTgxLCB9LAotCQl7IDQsIDIxMzU2LCA0LCAxOTIyMCwgfSwKLQkJeyA0LCAyMTI2OSwgNCwgMTkxNDIsIH0sCi0JfSB9LAotCXsgNDk0MCwgewotCQl7IDQsIDIxMjI2LCA0LCAxOTEwNCwgfSwKLQkJeyA0LCAyMTI2OSwgNCwgMTkxNDIsIH0sCi0JCXsgNCwgMjExODMsIDQsIDE5MDY1LCB9LAotCX0gfSwKLQl7IDQ5NjAsIHsKLQkJeyA0LCAyMTE0MSwgNCwgMTkwMjcsIH0sCi0JCXsgNCwgMjExODMsIDQsIDE5MDY1LCB9LAotCQl7IDQsIDIxMDk4LCA0LCAxODk4OCwgfSwKLQl9IH0sCi0JeyA0OTgwLCB7Ci0JCXsgNCwgMjEwNTYsIDQsIDE4OTUwLCB9LAotCQl7IDQsIDIxMDk4LCA0LCAxODk4OCwgfSwKLQkJeyA0LCAyMTAxNCwgNCwgMTg5MTIsIH0sCi0JfSB9LAotCXsgNTA0MCwgewotCQl7IDQsIDIwODA1LCA0LCAxODcyNSwgfSwKLQkJeyA0LCAyMDg0NiwgNCwgMTg3NjIsIH0sCi0JCXsgNCwgMjA3NjQsIDQsIDE4Njg3LCB9LAotCX0gfSwKLQl7IDUwNjAsIHsKLQkJeyA0LCAyMDcyMywgNCwgMTg2NTEsIH0sCi0JCXsgNCwgMjA3NjQsIDQsIDE4Njg3LCB9LAotCQl7IDQsIDIwNjgyLCA0LCAxODYxNCwgfSwKLQl9IH0sCi0JeyA1MDgwLCB7Ci0JCXsgNCwgMjA2NDEsIDQsIDE4NTc3LCB9LAotCQl7IDQsIDIwNjgyLCA0LCAxODYxNCwgfSwKLQkJeyA0LCAyMDYwMSwgNCwgMTg1NDEsIH0sCi0JfSB9LAotCXsgNTE4MCwgewotCQl7IDQsIDIwMjQzLCA0LCAxODIxOSwgfSwKLQkJeyA0LCAyMDI4MiwgNCwgMTgyNTQsIH0sCi0JCXsgNCwgMjAyMDQsIDQsIDE4MTgzLCB9LAotCX0gfSwKLQl7IDUyMDAsIHsKLQkJeyA0LCAyMDE2NSwgNCwgMTgxNDgsIH0sCi0JCXsgNCwgMjAyMDQsIDQsIDE4MTgzLCB9LAotCQl7IDQsIDIwMTI2LCA0LCAxODExNCwgfSwKLQl9IH0sCi0JeyA1MjIwLCB7Ci0JCXsgNCwgMjAwODgsIDQsIDE4MDc5LCB9LAotCQl7IDQsIDIwMTI2LCA0LCAxODExNCwgfSwKLQkJeyA0LCAyMDA0OSwgNCwgMTgwNDQsIH0sCi0JfSB9LAotCXsgNTI0MCwgewotCQl7IDQsIDIwMDExLCA0LCAxODAxMCwgfSwKLQkJeyA0LCAyMDA0OSwgNCwgMTgwNDQsIH0sCi0JCXsgNCwgMTk5NzMsIDQsIDE3OTc2LCB9LAotCX0gfSwKLQl7IDUyNjAsIHsKLQkJeyA0LCAxOTkzNSwgNCwgMTc5NDEsIH0sCi0JCXsgNCwgMTk5NzMsIDQsIDE3OTc2LCB9LAotCQl7IDQsIDE5ODk3LCA0LCAxNzkwNywgfSwKLQl9IH0sCi0JeyA1MjgwLCB7Ci0JCXsgNCwgMTk4NTksIDQsIDE3ODczLCB9LAotCQl7IDQsIDE5ODk3LCA0LCAxNzkwNywgfSwKLQkJeyA0LCAxOTgyMiwgNCwgMTc4NDAsIH0sCi0JfSB9LAotCXsgNTMwMCwgewotCQl7IDQsIDE5Nzg0LCA0LCAxNzgwNiwgfSwKLQkJeyA0LCAxOTgyMiwgNCwgMTc4NDAsIH0sCi0JCXsgNCwgMTk3NDcsIDQsIDE3NzcyLCB9LAotCX0gfSwKLQl7IDUzMjAsIHsKLQkJeyA0LCAxOTcxMCwgNCwgMTc3MzksIH0sCi0JCXsgNCwgMTk3NDcsIDQsIDE3NzcyLCB9LAotCQl7IDQsIDE5NjczLCA0LCAxNzcwNiwgfSwKLQl9IH0sCi0JeyA1NTAwLCB7Ci0JCXsgNCwgMTkwNjUsIDQsIDE3MTU5LCB9LAotCQl7IDQsIDE5MTAwLCA0LCAxNzE5MCwgfSwKLQkJeyA0LCAxOTAzMCwgNCwgMTcxMjcsIH0sCi0JfSB9LAotCXsgNTUyMCwgewotCQl7IDQsIDE4OTk2LCA0LCAxNzA5NiwgfSwKLQkJeyA0LCAxOTAzMCwgNCwgMTcxMjcsIH0sCi0JCXsgNCwgMTg5NjIsIDQsIDE3MDY1LCB9LAotCX0gfSwKLQl7IDU1NDAsIHsKLQkJeyA0LCAxODkyNywgNCwgMTcwMzUsIH0sCi0JCXsgNCwgMTg5NjIsIDQsIDE3MDY1LCB9LAotCQl7IDQsIDE4ODkzLCA0LCAxNzAwNCwgfSwKLQl9IH0sCi0JeyA1NTYwLCB7Ci0JCXsgNCwgMTg4NTksIDQsIDE2OTczLCB9LAotCQl7IDQsIDE4ODkzLCA0LCAxNzAwNCwgfSwKLQkJeyA0LCAxODgyNSwgNCwgMTY5NDMsIH0sCi0JfSB9LAotCXsgNTU4MCwgewotCQl7IDQsIDE4NzkyLCA0LCAxNjkxMywgfSwKLQkJeyA0LCAxODgyNSwgNCwgMTY5NDMsIH0sCi0JCXsgNCwgMTg3NTgsIDQsIDE2ODgyLCB9LAotCX0gfSwKLQl7IDU2MDAsIHsKLQkJeyA0LCAxODcyNSwgNCwgMTY4NTIsIH0sCi0JCXsgNCwgMTg3NTgsIDQsIDE2ODgyLCB9LAotCQl7IDQsIDE4NjkxLCA0LCAxNjgyMiwgfSwKLQl9IH0sCi0JeyA1NjIwLCB7Ci0JCXsgNCwgMTg2NTgsIDQsIDE2NzkyLCB9LAotCQl7IDQsIDE4NjkxLCA0LCAxNjgyMiwgfSwKLQkJeyA0LCAxODYyNSwgNCwgMTY3NjIsIH0sCi0JfSB9LAotCXsgNTY0MCwgewotCQl7IDQsIDE4NTkyLCA0LCAxNjczMywgfSwKLQkJeyA0LCAxODYyNSwgNCwgMTY3NjIsIH0sCi0JCXsgNCwgMTg1NTksIDQsIDE2NzAzLCB9LAotCX0gfSwKLQl7IDU2NjAsIHsKLQkJeyA0LCAxODUyNiwgNCwgMTY2NzMsIH0sCi0JCXsgNCwgMTg1NTksIDQsIDE2NzAzLCB9LAotCQl7IDQsIDE4NDkzLCA0LCAxNjY0NCwgfSwKLQl9IH0sCi0JeyA1NjgwLCB7Ci0JCXsgNCwgMTg0NjEsIDQsIDE2NjE1LCB9LAotCQl7IDQsIDE4NDkzLCA0LCAxNjY0NCwgfSwKLQkJeyA0LCAxODQyOCwgNCwgMTY1ODYsIH0sCi0JfSB9LAotCXsgNTcwMCwgewotCQl7IDQsIDE4Mzk2LCA0LCAxNjU1NiwgfSwKLQkJeyA0LCAxODQyOCwgNCwgMTY1ODYsIH0sCi0JCXsgNCwgMTgzNjQsIDQsIDE2NTI3LCB9LAotCX0gfSwKLQl7IDU3NDUsIHsKLQkJeyA0LCAxODI1MiwgNCwgMTY0MjcsIH0sCi0JCXsgNCwgMTgyODQsIDQsIDE2NDU1LCB9LAotCQl7IDQsIDE4MjIwLCA0LCAxNjM5OCwgfSwKLQl9IH0sCi0JeyA1NzY1LCB7Ci0JCXsgNCwgMTgxODksIDUsIDMyNzQwLCB9LAotCQl7IDQsIDE4MjIwLCA0LCAxNjM5OCwgfSwKLQkJeyA0LCAxODE1NywgNSwgMzI2ODMsIH0sCi0JfSB9LAotCXsgNTc4NSwgewotCQl7IDQsIDE4MTI2LCA1LCAzMjYyNiwgfSwKLQkJeyA0LCAxODE1NywgNSwgMzI2ODMsIH0sCi0JCXsgNCwgMTgwOTQsIDUsIDMyNTcwLCB9LAotCX0gfSwKLQl7IDU4MDUsIHsKLQkJeyA0LCAxODA2MywgNSwgMzI1MTQsIH0sCi0JCXsgNCwgMTgwOTQsIDUsIDMyNTcwLCB9LAotCQl7IDQsIDE4MDMyLCA1LCAzMjQ1OCwgfSwKLQl9IH0sCi0JeyA1ODI1LCB7Ci0JCXsgNCwgMTgwMDEsIDUsIDMyNDAyLCB9LAotCQl7IDQsIDE4MDMyLCA1LCAzMjQ1OCwgfSwKLQkJeyA0LCAxNzk3MCwgNSwgMzIzNDcsIH0sCi0JfSB9LAotCXsgNTE3MCwgewotCQl7IDQsIDIwMjgyLCA0LCAxODI1NCwgfSwKLQkJeyA0LCAyMDMyMSwgNCwgMTgyODksIH0sCi0JCXsgNCwgMjAyNDMsIDQsIDE4MjE5LCB9LAotCX0gfSwKLQl7IDUxOTAsIHsKLQkJeyA0LCAyMDIwNCwgNCwgMTgxODMsIH0sCi0JCXsgNCwgMjAyNDMsIDQsIDE4MjE5LCB9LAotCQl7IDQsIDIwMTY1LCA0LCAxODE0OCwgfSwKLQl9IH0sCi0JeyA1MjEwLCB7Ci0JCXsgNCwgMjAxMjYsIDQsIDE4MTE0LCB9LAotCQl7IDQsIDIwMTY1LCA0LCAxODE0OCwgfSwKLQkJeyA0LCAyMDA4OCwgNCwgMTgwNzksIH0sCi0JfSB9LAotCXsgNTIzMCwgewotCQl7IDQsIDIwMDQ5LCA0LCAxODA0NCwgfSwKLQkJeyA0LCAyMDA4OCwgNCwgMTgwNzksIH0sCi0JCXsgNCwgMjAwMTEsIDQsIDE4MDEwLCB9LAotCX0gfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXI5MTcwX3BoeV9mcmVxX3BhcmFtcyAqCi1hcjkxNzBfZ2V0X2h3X2R5bl9wYXJhbXMoc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAotCQkJIGVudW0gYXI5MTcwX2J3IGJ3KQotewotCXVuc2lnbmVkIGludCBjaGFuaWR4ID0gMDsKLQl1MTYgZnJlcSA9IDI0MTI7Ci0KLQlpZiAoY2hhbm5lbCkgewotCQljaGFuaWR4ID0gY2hhbm5lbC0+aHdfdmFsdWU7Ci0JCWZyZXEgPSBjaGFubmVsLT5jZW50ZXJfZnJlcTsKLQl9Ci0KLQlCVUdfT04oY2hhbmlkeCA+PSBBUlJBWV9TSVpFKGFyOTE3MF9waHlfZnJlcV9wYXJhbXMpKTsKLQotCUJVSUxEX0JVR19PTihfX0FSOTE3MF9OVU1fQlcgIT0gMyk7Ci0KLQlXQVJOX09OKGFyOTE3MF9waHlfZnJlcV9wYXJhbXNbY2hhbmlkeF0uZnJlcSAhPSBmcmVxKTsKLQotCXJldHVybiAmYXI5MTcwX3BoeV9mcmVxX3BhcmFtc1tjaGFuaWR4XS5wYXJhbXNbYnddOwotfQotCi0KLWludCBhcjkxNzBfaW5pdF9yZihzdHJ1Y3QgYXI5MTcwICphcikKLXsKLQljb25zdCBzdHJ1Y3QgYXI5MTcwX3BoeV9mcmVxX3BhcmFtcyAqZnJlcXBhcjsKLQlfX2xlMzIgY21kWzddOwotCWludCBlcnI7Ci0KLQllcnIgPSBhcjkxNzBfaW5pdF9yZl9iYW5rc18wXzcoYXIsIGZhbHNlKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gYXI5MTcwX2luaXRfcmZfYmFuazRfcHdyKGFyLCBmYWxzZSwgMjQxMiwgQVI5MTcwX0JXXzIwKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZnJlcXBhciA9IGFyOTE3MF9nZXRfaHdfZHluX3BhcmFtcyhOVUxMLCBBUjkxNzBfQldfMjApOwotCi0JY21kWzBdID0gY3B1X3RvX2xlMzIoMjQxMiAqIDEwMDApOwotCWNtZFsxXSA9IGNwdV90b19sZTMyKDApOwotCWNtZFsyXSA9IGNwdV90b19sZTMyKDEpOwotCWNtZFszXSA9IGNwdV90b19sZTMyKGZyZXFwYXItPmNvZWZmX2V4cCk7Ci0JY21kWzRdID0gY3B1X3RvX2xlMzIoZnJlcXBhci0+Y29lZmZfbWFuKTsKLQljbWRbNV0gPSBjcHVfdG9fbGUzMihmcmVxcGFyLT5jb2VmZl9leHBfc2hnaSk7Ci0JY21kWzZdID0gY3B1X3RvX2xlMzIoZnJlcXBhci0+Y29lZmZfbWFuX3NoZ2kpOwotCi0JLyogUkZfSU5JVCBlY2hvZXMgdGhlIGNvbW1hbmQgYmFjayB0byB1cyAqLwotCWVyciA9IGFyLT5leGVjX2NtZChhciwgQVI5MTcwX0NNRF9SRl9JTklULAotCQkJICAgc2l6ZW9mKGNtZCksICh1OCAqKWNtZCwKLQkJCSAgIHNpemVvZihjbWQpLCAodTggKiljbWQpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQltc2xlZXAoMTAwMCk7Ci0KLQlyZXR1cm4gYXI5MTcwX2VjaG9fdGVzdChhciwgMHhhYWJiY2NkZCk7Ci19Ci0KLXN0YXRpYyBpbnQgYXI5MTcwX2ZpbmRfZnJlcV9pZHgoaW50IG5mcmVxcywgdTggKmZyZXFzLCB1OCBmKQotewotCWludCBpZHggPSBuZnJlcXMgLSAyOwotCi0Jd2hpbGUgKGlkeCA+PSAwKSB7Ci0JCWlmIChmID49IGZyZXFzW2lkeF0pCi0JCQlyZXR1cm4gaWR4OwotCQlpZHgtLTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHMzMiBhcjkxNzBfaW50ZXJwb2xhdGVfczMyKHMzMiB4LCBzMzIgeDEsIHMzMiB5MSwgczMyIHgyLCBzMzIgeTIpCi17Ci0JLyogbm90aGluZyB0byBpbnRlcnBvbGF0ZSwgaXQncyBob3Jpem9udGFsICovCi0JaWYgKHkyID09IHkxKQotCQlyZXR1cm4geTE7Ci0KLQkvKiBjaGVjayBpZiB3ZSBoaXQgb25lIG9mIHRoZSBlZGdlcyAqLwotCWlmICh4ID09IHgxKQotCQlyZXR1cm4geTE7Ci0JaWYgKHggPT0geDIpCi0JCXJldHVybiB5MjsKLQotCS8qIHgxID09IHgyIGlzIGJhZCwgaG9wZWZ1bGx5ID09IHggKi8KLQlpZiAoeDIgPT0geDEpCi0JCXJldHVybiB5MTsKLQotCXJldHVybiB5MSArICgoKHkyIC0geTEpICogKHggLSB4MSkpIC8gKHgyIC0geDEpKTsKLX0KLQotc3RhdGljIHU4IGFyOTE3MF9pbnRlcnBvbGF0ZV91OCh1OCB4LCB1OCB4MSwgdTggeTEsIHU4IHgyLCB1OCB5MikKLXsKLSNkZWZpbmUgU0hJRlQJCTgKLQlzMzIgeTsKLQotCXkgPSBhcjkxNzBfaW50ZXJwb2xhdGVfczMyKHggPDwgU0hJRlQsCi0JCQkJICAgeDEgPDwgU0hJRlQsIHkxIDw8IFNISUZULAotCQkJCSAgIHgyIDw8IFNISUZULCB5MiA8PCBTSElGVCk7Ci0KLQkvKgotCSAqIFhYWDogdW53cmFwIHRoaXMgZXhwcmVzc2lvbgotCSAqCUlzbid0IGl0IGp1c3QgRElWX1JPVU5EX1VQKHksIDE8PFNISUZUKT8KLQkgKglDYW4gd2UgcmVseSBvbiB0aGUgY29tcGlsZXIgdG8gb3B0aW1pc2UgYXdheSB0aGUgZGl2PwotCSAqLwotCXJldHVybiAoeSA+PiBTSElGVCkgKyAoKHkgJiAoMTw8KFNISUZULTEpKSkgPj4gKFNISUZUIC0gMSkpOwotI3VuZGVmIFNISUZUCi19Ci0KLXN0YXRpYyB1OCBhcjkxNzBfaW50ZXJwb2xhdGVfdmFsKHU4IHgsIHU4ICp4X2FycmF5LCB1OCAqeV9hcnJheSkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0JCWlmICh4IDw9IHhfYXJyYXlbaSArIDFdKQotCQkJYnJlYWs7Ci0KLQlyZXR1cm4gYXI5MTcwX2ludGVycG9sYXRlX3U4KHgsCi0JCQkJICAgICB4X2FycmF5W2ldLAotCQkJCSAgICAgeV9hcnJheVtpXSwKLQkJCQkgICAgIHhfYXJyYXlbaSArIDFdLAotCQkJCSAgICAgeV9hcnJheVtpICsgMV0pOwotfQotCi1zdGF0aWMgaW50IGFyOTE3MF9zZXRfZnJlcV9jYWxfZGF0YShzdHJ1Y3QgYXI5MTcwICphciwKLQkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKQotewotCXU4ICpjYWxfZnJlcV9waWVyOwotCXU4IHZwZHNbMl1bQVI1NDE2X1BEX0dBSU5fSUNFUFRTXTsKLQl1OCBwd3JzWzJdW0FSNTQxNl9QRF9HQUlOX0lDRVBUU107Ci0JaW50IGNoYWluLCBpZHgsIGk7Ci0JdTMyIHBoeV9kYXRhID0gMDsKLQl1OCBmLCB0bXA7Ci0KLQlzd2l0Y2ggKGNoYW5uZWwtPmJhbmQpIHsKLQljYXNlIElFRUU4MDIxMV9CQU5EXzJHSFo6Ci0JCWYgPSBjaGFubmVsLT5jZW50ZXJfZnJlcSAtIDIzMDA7Ci0JCWNhbF9mcmVxX3BpZXIgPSBhci0+ZWVwcm9tLmNhbF9mcmVxX3BpZXJfMkc7Ci0JCWkgPSBBUjU0MTZfTlVNXzJHX0NBTF9QSUVSUyAtIDE7Ci0JCWJyZWFrOwotCi0JY2FzZSBJRUVFODAyMTFfQkFORF81R0haOgotCQlmID0gKGNoYW5uZWwtPmNlbnRlcl9mcmVxIC0gNDgwMCkgLyA1OwotCQljYWxfZnJlcV9waWVyID0gYXItPmVlcHJvbS5jYWxfZnJlcV9waWVyXzVHOwotCQlpID0gQVI1NDE2X05VTV81R19DQUxfUElFUlMgLSAxOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0KLQlmb3IgKDsgaSA+PSAwOyBpLS0pIHsKLQkJaWYgKGNhbF9mcmVxX3BpZXJbaV0gIT0gMHhmZikKLQkJCWJyZWFrOwotCX0KLQlpZiAoaSA8IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWR4ID0gYXI5MTcwX2ZpbmRfZnJlcV9pZHgoaSwgY2FsX2ZyZXFfcGllciwgZik7Ci0KLQlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOwotCi0JZm9yIChjaGFpbiA9IDA7IGNoYWluIDwgQVI1NDE2X01BWF9DSEFJTlM7IGNoYWluKyspIHsKLQkJZm9yIChpID0gMDsgaSA8IEFSNTQxNl9QRF9HQUlOX0lDRVBUUzsgaSsrKSB7Ci0JCQlzdHJ1Y3QgYXI5MTcwX2NhbGlicmF0aW9uX2RhdGFfcGVyX2ZyZXEgKmNhbF9waWVyX2RhdGE7Ci0JCQlpbnQgajsKLQotCQkJc3dpdGNoIChjaGFubmVsLT5iYW5kKSB7Ci0JCQljYXNlIElFRUU4MDIxMV9CQU5EXzJHSFo6Ci0JCQkJY2FsX3BpZXJfZGF0YSA9ICZhci0+ZWVwcm9tLgotCQkJCQljYWxfcGllcl9kYXRhXzJHW2NoYWluXVtpZHhdOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIElFRUU4MDIxMV9CQU5EXzVHSFo6Ci0JCQkJY2FsX3BpZXJfZGF0YSA9ICZhci0+ZWVwcm9tLgotCQkJCQljYWxfcGllcl9kYXRhXzVHW2NoYWluXVtpZHhdOwotCQkJCWJyZWFrOwotCi0JCQlkZWZhdWx0OgotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCi0JCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7Ci0JCQkJdnBkc1tqXVtpXSA9IGFyOTE3MF9pbnRlcnBvbGF0ZV91OChmLAotCQkJCQljYWxfZnJlcV9waWVyW2lkeF0sCi0JCQkJCWNhbF9waWVyX2RhdGEtPnZwZF9wZGdbal1baV0sCi0JCQkJCWNhbF9mcmVxX3BpZXJbaWR4ICsgMV0sCi0JCQkJCWNhbF9waWVyX2RhdGFbMV0udnBkX3BkZ1tqXVtpXSk7Ci0KLQkJCQlwd3JzW2pdW2ldID0gYXI5MTcwX2ludGVycG9sYXRlX3U4KGYsCi0JCQkJCWNhbF9mcmVxX3BpZXJbaWR4XSwKLQkJCQkJY2FsX3BpZXJfZGF0YS0+cHdyX3BkZ1tqXVtpXSwKLQkJCQkJY2FsX2ZyZXFfcGllcltpZHggKyAxXSwKLQkJCQkJY2FsX3BpZXJfZGF0YVsxXS5wd3JfcGRnW2pdW2ldKSAvIDI7Ci0JCQl9Ci0JCX0KLQotCQlmb3IgKGkgPSAwOyBpIDwgNzY7IGkrKykgewotCQkJaWYgKGkgPCAyNSkgewotCQkJCXRtcCA9IGFyOTE3MF9pbnRlcnBvbGF0ZV92YWwoaSwgJnB3cnNbMF1bMF0sCi0JCQkJCQkJICAgICAmdnBkc1swXVswXSk7Ci0JCQl9IGVsc2UgewotCQkJCXRtcCA9IGFyOTE3MF9pbnRlcnBvbGF0ZV92YWwoaSAtIDEyLAotCQkJCQkJCSAgICAgJnB3cnNbMV1bMF0sCi0JCQkJCQkJICAgICAmdnBkc1sxXVswXSk7Ci0JCQl9Ci0KLQkJCXBoeV9kYXRhIHw9IHRtcCA8PCAoKGkgJiAzKSA8PCAzKTsKLQkJCWlmICgoaSAmIDMpID09IDMpIHsKLQkJCQlhcjkxNzBfcmVnd3JpdGUoMHgxYzYyODAgKyBjaGFpbiAqIDB4MTAwMCArCi0JCQkJCQkoaSAmIH4zKSwgcGh5X2RhdGEpOwotCQkJCXBoeV9kYXRhID0gMDsKLQkJCX0KLQkJfQotCi0JCWZvciAoaSA9IDE5OyBpIDwgMzI7IGkrKykKLQkJCWFyOTE3MF9yZWd3cml0ZSgweDFjNjI4MCArIGNoYWluICogMHgxMDAwICsgKGkgPDwgMiksCi0JCQkJCTB4MCk7Ci0JfQotCi0JYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOwotCXJldHVybiBhcjkxNzBfcmVnd3JpdGVfcmVzdWx0KCk7Ci19Ci0KLXN0YXRpYyB1OCBhcjkxNzBfZ2V0X21heF9lZGdlX3Bvd2VyKHN0cnVjdCBhcjkxNzAgKmFyLAotCQkJCSAgICBzdHJ1Y3QgYXI5MTcwX2NhbGN0bF9lZGdlcyBlZGdlc1tdLAotCQkJCSAgICB1MzIgZnJlcSkKLXsKLQlpbnQgaTsKLQl1OCByYyA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKLQl1OCBmOwotCWlmIChmcmVxIDwgMzAwMCkKLQkJZiA9IGZyZXEgLSAyMzAwOwotCWVsc2UKLQkJZiA9IChmcmVxIC0gNDgwMCkgLyA1OwotCi0JZm9yIChpID0gMDsgaSA8IEFSNTQxNl9OVU1fQkFORF9FREdFUzsgaSsrKSB7Ci0JCWlmIChlZGdlc1tpXS5jaGFubmVsID09IDB4ZmYpCi0JCQlicmVhazsKLQkJaWYgKGYgPT0gZWRnZXNbaV0uY2hhbm5lbCkgewotCQkJLyogZXhhY3QgZnJlcSBtYXRjaCAqLwotCQkJcmMgPSBlZGdlc1tpXS5wb3dlcl9mbGFncyAmIH5BUjkxNzBfQ0FMQ1RMX0VER0VfRkxBR1M7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoaSA+IDAgJiYgZiA8IGVkZ2VzW2ldLmNoYW5uZWwpIHsKLQkJCWlmIChmID4gZWRnZXNbaSAtIDFdLmNoYW5uZWwgJiYKLQkJCSAgICBlZGdlc1tpIC0gMV0ucG93ZXJfZmxhZ3MgJgotCQkJICAgIEFSOTE3MF9DQUxDVExfRURHRV9GTEFHUykgewotCQkJCS8qIGxvd2VyIGNoYW5uZWwgaGFzIHRoZSBpbmJhbmQgZmxhZyBzZXQgKi8KLQkJCQlyYyA9IGVkZ2VzW2kgLSAxXS5wb3dlcl9mbGFncyAmCi0JCQkJCX5BUjkxNzBfQ0FMQ1RMX0VER0VfRkxBR1M7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmIChpID09IEFSNTQxNl9OVU1fQkFORF9FREdFUykgewotCQlpZiAoZiA+IGVkZ2VzW2kgLSAxXS5jaGFubmVsICYmCi0JCSAgICBlZGdlc1tpIC0gMV0ucG93ZXJfZmxhZ3MgJiBBUjkxNzBfQ0FMQ1RMX0VER0VfRkxBR1MpIHsKLQkJCS8qIGxvd2VyIGNoYW5uZWwgaGFzIHRoZSBpbmJhbmQgZmxhZyBzZXQgKi8KLQkJCXJjID0gZWRnZXNbaSAtIDFdLnBvd2VyX2ZsYWdzICYKLQkJCQl+QVI5MTcwX0NBTENUTF9FREdFX0ZMQUdTOwotCQl9Ci0JfQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHU4IGFyOTE3MF9nZXRfaGVhdnlfY2xpcChzdHJ1Y3QgYXI5MTcwICphciwKLQkJCQlzdHJ1Y3QgYXI5MTcwX2NhbGN0bF9lZGdlcyBlZGdlc1tdLAotCQkJCXUzMiBmcmVxLCBlbnVtIGFyOTE3MF9idyBidykKLXsKLQl1OCBmOwotCWludCBpOwotCXU4IHJjID0gMDsKLQotCWlmIChmcmVxIDwgMzAwMCkKLQkJZiA9IGZyZXEgLSAyMzAwOwotCWVsc2UKLQkJZiA9IChmcmVxIC0gNDgwMCkgLyA1OwotCi0JaWYgKGJ3ID09IEFSOTE3MF9CV180MF9CRUxPVyB8fCBidyA9PSBBUjkxNzBfQldfNDBfQUJPVkUpCi0JCXJjIHw9IDB4ZjA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X05VTV9CQU5EX0VER0VTOyBpKyspIHsKLQkJaWYgKGVkZ2VzW2ldLmNoYW5uZWwgPT0gMHhmZikKLQkJCWJyZWFrOwotCQlpZiAoZiA9PSBlZGdlc1tpXS5jaGFubmVsKSB7Ci0JCQlpZiAoIShlZGdlc1tpXS5wb3dlcl9mbGFncyAmIEFSOTE3MF9DQUxDVExfRURHRV9GTEFHUykpCi0JCQkJcmMgfD0gMHgwZjsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi0vKgotICogY2FsY3VsYXRlIHRoZSBjb25mb3JtYW5jZSB0ZXN0IGxpbWl0cyBhbmQgdGhlIGhlYXZ5IGNsaXAgcGFyYW1ldGVyCi0gKiBhbmQgYXBwbHkgdGhlbSB0byBhci0+cG93ZXIqIChkZXJpdmVkIGZyb20gb3R1cyBoYWwvaHBtYWluLmMsIGxpbmUgMzcwNikKLSAqLwotc3RhdGljIHZvaWQgYXI5MTcwX2NhbGNfY3RsKHN0cnVjdCBhcjkxNzAgKmFyLCB1MzIgZnJlcSwgZW51bSBhcjkxNzBfYncgYncpCi17Ci0JdTggY3RsX2dycDsgLyogQ1RMIGdyb3VwICovCi0JdTggY3RsX2lkeDsgLyogQ1RMIGluZGV4ICovCi0JaW50IGksIGo7Ci0Jc3RydWN0IGN0bF9tb2RlcyB7Ci0JCXU4IGN0bF9tb2RlOwotCQl1OCBtYXhfcG93ZXI7Ci0JCXU4ICpwd3JfY2FsX2RhdGE7Ci0JCWludCBwd3JfY2FsX2xlbjsKLQl9ICptb2RlczsKLQotCS8qCi0JICogb3JkZXIgaXMgcmVsZXZhbnQgaW4gdGhlIG1vZGVfbGlzdF8qOiB3ZSBmYWxsIGJhY2sgdG8gdGhlCi0JICogbG93ZXIgaW5kaWNlcyBpZiBhbnkgbW9kZSBpcyBtaXNzZWQgaW4gdGhlIEVFUFJPTS4KLQkgKi8KLQlzdHJ1Y3QgY3RsX21vZGVzIG1vZGVfbGlzdF8yZ2h6W10gPSB7Ci0JCXsgQ1RMXzExQiwgMCwgYXItPnBvd2VyXzJHX2NjaywgNCB9LAotCQl7IENUTF8xMUcsIDAsIGFyLT5wb3dlcl8yR19vZmRtLCA0IH0sCi0JCXsgQ1RMXzJHSFQyMCwgMCwgYXItPnBvd2VyXzJHX2h0MjAsIDggfSwKLQkJeyBDVExfMkdIVDQwLCAwLCBhci0+cG93ZXJfMkdfaHQ0MCwgOCB9LAotCX07Ci0Jc3RydWN0IGN0bF9tb2RlcyBtb2RlX2xpc3RfNWdoeltdID0gewotCQl7IENUTF8xMUEsIDAsIGFyLT5wb3dlcl81R19sZWcsIDQgfSwKLQkJeyBDVExfNUdIVDIwLCAwLCBhci0+cG93ZXJfNUdfaHQyMCwgOCB9LAotCQl7IENUTF81R0hUNDAsIDAsIGFyLT5wb3dlcl81R19odDQwLCA4IH0sCi0JfTsKLQlpbnQgbnJfbW9kZXM7Ci0KLSNkZWZpbmUgRURHRVMoYywgbikgKGFyLT5lZXByb20uY3RsX2RhdGFbY10uY29udHJvbF9lZGdlc1tuXSkKLQotCWFyLT5waHlfaGVhdnlfY2xpcCA9IDA7Ci0KLQkvKgotCSAqIFRPRE86IGludmVzdGlnYXRlIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIE9UVVMnCi0JICogaHByZWcuYzo6emZIcEdldFJlZ3VsYXRvcnlEb21haW4oKSBhbmQKLQkgKiBhdGgvcmVnZC5jOjphdGhfcmVnZF9nZXRfYmFuZF9jdGwoKSAtCi0JICogZS5nLiBmb3IgRkNDM19XT1JMRCB0aGUgT1RVUyBwcm9jZWR1cmUKLQkgKiBhbHdheXMgcmV0dXJucyBDVExfRkNDLCB3aGlsZSB0aGUgb25lIGluIGF0aC8gZGVsaXZlcnMKLQkgKiBDVExfRVRTSSBmb3IgMkdIeiBhbmQgQ1RMX0ZDQyBmb3IgNUdIei4KLQkgKi8KLQljdGxfZ3JwID0gYXRoX3JlZ2RfZ2V0X2JhbmRfY3RsKCZhci0+Y29tbW9uLnJlZ3VsYXRvcnksCi0JCQkJCWFyLT5ody0+Y29uZi5jaGFubmVsLT5iYW5kKTsKLQotCS8qIGN0bCBncm91cCBub3QgZm91bmQgLSBlaXRoZXIgaW52YWxpZCBiYW5kIChOT19DVEwpIG9yIHd3IHJvYW1pbmcgKi8KLQlpZiAoY3RsX2dycCA9PSBOT19DVEwgfHwgY3RsX2dycCA9PSBTRF9OT19DVEwpCi0JCWN0bF9ncnAgPSBDVExfRkNDOwotCi0JaWYgKGN0bF9ncnAgIT0gQ1RMX0ZDQykKLQkJLyogc2tpcCBDVEwgYW5kIGhlYXZ5IGNsaXAgZm9yIENUTF9NS0sgYW5kIENUTF9FVFNJICovCi0JCXJldHVybjsKLQotCWlmIChhci0+aHctPmNvbmYuY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7Ci0JCW1vZGVzID0gbW9kZV9saXN0XzJnaHo7Ci0JCW5yX21vZGVzID0gQVJSQVlfU0laRShtb2RlX2xpc3RfMmdoeik7Ci0JfSBlbHNlIHsKLQkJbW9kZXMgPSBtb2RlX2xpc3RfNWdoejsKLQkJbnJfbW9kZXMgPSBBUlJBWV9TSVpFKG1vZGVfbGlzdF81Z2h6KTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfbW9kZXM7IGkrKykgewotCQl1OCBjID0gY3RsX2dycCB8IG1vZGVzW2ldLmN0bF9tb2RlOwotCQlmb3IgKGN0bF9pZHggPSAwOyBjdGxfaWR4IDwgQVI1NDE2X05VTV9DVExTOyBjdGxfaWR4KyspCi0JCQlpZiAoYyA9PSBhci0+ZWVwcm9tLmN0bF9pbmRleFtjdGxfaWR4XSkKLQkJCQlicmVhazsKLQkJaWYgKGN0bF9pZHggPCBBUjU0MTZfTlVNX0NUTFMpIHsKLQkJCWludCBmX29mZiA9IDA7Ci0KLQkJCS8qIGRldGVybWluZSBoZWF2IGNsaXAgcGFyYW1ldGVyIGZyb20KLQkJCSAgIHRoZSAxMUcgZWRnZXMgYXJyYXkgKi8KLQkJCWlmIChtb2Rlc1tpXS5jdGxfbW9kZSA9PSBDVExfMTFHKSB7Ci0JCQkJYXItPnBoeV9oZWF2eV9jbGlwID0KLQkJCQkJYXI5MTcwX2dldF9oZWF2eV9jbGlwKGFyLAotCQkJCQkJCSAgICAgIEVER0VTKGN0bF9pZHgsIDEpLAotCQkJCQkJCSAgICAgIGZyZXEsIGJ3KTsKLQkJCX0KLQotCQkJLyogYWRqdXN0IGZyZXEgZm9yIDQwTUh6ICovCi0JCQlpZiAobW9kZXNbaV0uY3RsX21vZGUgPT0gQ1RMXzJHSFQ0MCB8fAotCQkJICAgIG1vZGVzW2ldLmN0bF9tb2RlID09IENUTF81R0hUNDApIHsKLQkJCQlpZiAoYncgPT0gQVI5MTcwX0JXXzQwX0JFTE9XKQotCQkJCQlmX29mZiA9IC0xMDsKLQkJCQllbHNlCi0JCQkJCWZfb2ZmID0gMTA7Ci0JCQl9Ci0KLQkJCW1vZGVzW2ldLm1heF9wb3dlciA9Ci0JCQkJYXI5MTcwX2dldF9tYXhfZWRnZV9wb3dlcihhciwgRURHRVMoY3RsX2lkeCwgMSksCi0JCQkJCQkJICBmcmVxK2Zfb2ZmKTsKLQotCQkJLyoKLQkJCSAqIFRPRE86IGNoZWNrIGlmIHRoZSByZWd1bGF0b3J5IG1heC4gcG93ZXIgaXMKLQkJCSAqICBjb250cm9sbGVkIGJ5IGNmZzgwMjExIGZvciBERlMKLQkJCSAqIChocG1haW4gYXBwbGllcyBpdCB0byBtYXhfcG93ZXIgaXRzZWxmIGZvciBERlMgZnJlcSkKLQkJCSAqLwotCi0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogV29ya2Fyb3VuZCBpbiBvdHVzIGRyaXZlciwgaHBtYWluLmMsIGxpbmUgMzkwNjoKLQkJCSAqIGlmIG5vIGRhdGEgZm9yIDVHSFQyMCBhcmUgZm91bmQsIHRha2UgdGhlCi0JCQkgKiBsZWdhY3kgNUcgdmFsdWUuCi0JCQkgKiBXZSBleHRlbmQgdGhpcyBoZXJlIHRvIGZhbGxiYWNrIGZyb20gYW55IG90aGVyICpIVCBvcgotCQkJICogMTFHLCB0b28uCi0JCQkgKi8KLQkJCWludCBrID0gaTsKLQotCQkJbW9kZXNbaV0ubWF4X3Bvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOwotCQkJd2hpbGUgKGstLSA+IDApIHsKLQkJCQlpZiAobW9kZXNba10ubWF4X3Bvd2VyICE9Ci0JCQkJICAgIEFSNTQxNl9NQVhfUkFURV9QT1dFUikgewotCQkJCQltb2Rlc1tpXS5tYXhfcG93ZXIgPSBtb2Rlc1trXS5tYXhfcG93ZXI7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCS8qIGFwcGx5IG1heCBwb3dlciB0byBwd3JfY2FsX2RhdGEgKGFyLT5wb3dlcl8qKSAqLwotCQlmb3IgKGogPSAwOyBqIDwgbW9kZXNbaV0ucHdyX2NhbF9sZW47IGorKykgewotCQkJbW9kZXNbaV0ucHdyX2NhbF9kYXRhW2pdID0gbWluKG1vZGVzW2ldLnB3cl9jYWxfZGF0YVtqXSwKLQkJCQkJCSAgICAgICBtb2Rlc1tpXS5tYXhfcG93ZXIpOwotCQl9Ci0JfQotCi0JaWYgKGFyLT5waHlfaGVhdnlfY2xpcCAmIDB4ZjApIHsKLQkJYXItPnBvd2VyXzJHX2h0NDBbMF0tLTsKLQkJYXItPnBvd2VyXzJHX2h0NDBbMV0tLTsKLQkJYXItPnBvd2VyXzJHX2h0NDBbMl0tLTsKLQl9Ci0JaWYgKGFyLT5waHlfaGVhdnlfY2xpcCAmIDB4ZikgewotCQlhci0+cG93ZXJfMkdfaHQyMFswXSsrOwotCQlhci0+cG93ZXJfMkdfaHQyMFsxXSsrOwotCQlhci0+cG93ZXJfMkdfaHQyMFsyXSsrOwotCX0KLQotCi0jdW5kZWYgRURHRVMKLX0KLQotc3RhdGljIGludCBhcjkxNzBfc2V0X3Bvd2VyX2NhbChzdHJ1Y3QgYXI5MTcwICphciwgdTMyIGZyZXEsIGVudW0gYXI5MTcwX2J3IGJ3KQotewotCXN0cnVjdCBhcjkxNzBfY2FsaWJyYXRpb25fdGFyZ2V0X3Bvd2VyX2xlZ2FjeSAqY3RwbDsKLQlzdHJ1Y3QgYXI5MTcwX2NhbGlicmF0aW9uX3RhcmdldF9wb3dlcl9odCAqY3RwaDsKLQl1OCAqY3RwcmVzOwotCWludCBudGFyZ2V0czsKLQlpbnQgaWR4LCBpLCBuOwotCXU4IGFja3Bvd2VyLCBhY2tjaGFpbnMsIGY7Ci0JdTggcHdyX2ZyZXFzW0FSNTQxNl9NQVhfTlVNX1RHVF9QV1JTXTsKLQotCWlmIChmcmVxIDwgMzAwMCkKLQkJZiA9IGZyZXEgLSAyMzAwOwotCWVsc2UKLQkJZiA9IChmcmVxIC0gNDgwMCkvNTsKLQotCS8qCi0JICogY3ljbGUgdGhyb3VnaCB0aGUgdmFyaW91cyBtb2RlcwotCSAqCi0JICogbGVnYWN5IG1vZGVzIGZpcnN0OiA1RywgMkcgQ0NLLCAyRyBPRkRNCi0JICovCi0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewotCQlzd2l0Y2ggKGkpIHsKLQkJY2FzZSAwOiAvKiA1IEdIeiBsZWdhY3kgKi8KLQkJCWN0cGwgPSAmYXItPmVlcHJvbS5jYWxfdGd0X3B3cl81R1swXTsKLQkJCW50YXJnZXRzID0gQVI1NDE2X05VTV81R19UQVJHRVRfUFdSUzsKLQkJCWN0cHJlcyA9IGFyLT5wb3dlcl81R19sZWc7Ci0JCQlicmVhazsKLQkJY2FzZSAxOiAvKiAyLjQgR0h6IENDSyAqLwotCQkJY3RwbCA9ICZhci0+ZWVwcm9tLmNhbF90Z3RfcHdyXzJHX2Nja1swXTsKLQkJCW50YXJnZXRzID0gQVI1NDE2X05VTV8yR19DQ0tfVEFSR0VUX1BXUlM7Ci0JCQljdHByZXMgPSBhci0+cG93ZXJfMkdfY2NrOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjogLyogMi40IEdIeiBPRkRNICovCi0JCQljdHBsID0gJmFyLT5lZXByb20uY2FsX3RndF9wd3JfMkdfb2ZkbVswXTsKLQkJCW50YXJnZXRzID0gQVI1NDE2X05VTV8yR19PRkRNX1RBUkdFVF9QV1JTOwotCQkJY3RwcmVzID0gYXItPnBvd2VyXzJHX29mZG07Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCUJVRygpOwotCQl9Ci0KLQkJZm9yIChuID0gMDsgbiA8IG50YXJnZXRzOyBuKyspIHsKLQkJCWlmIChjdHBsW25dLmZyZXEgPT0gMHhmZikKLQkJCQlicmVhazsKLQkJCXB3cl9mcmVxc1tuXSA9IGN0cGxbbl0uZnJlcTsKLQkJfQotCQludGFyZ2V0cyA9IG47Ci0JCWlkeCA9IGFyOTE3MF9maW5kX2ZyZXFfaWR4KG50YXJnZXRzLCBwd3JfZnJlcXMsIGYpOwotCQlmb3IgKG4gPSAwOyBuIDwgNDsgbisrKQotCQkJY3RwcmVzW25dID0gYXI5MTcwX2ludGVycG9sYXRlX3U4KAotCQkJCQlmLAotCQkJCQljdHBsW2lkeCArIDBdLmZyZXEsCi0JCQkJCWN0cGxbaWR4ICsgMF0ucG93ZXJbbl0sCi0JCQkJCWN0cGxbaWR4ICsgMV0uZnJlcSwKLQkJCQkJY3RwbFtpZHggKyAxXS5wb3dlcltuXSk7Ci0JfQotCi0JLyoKLQkgKiBIVCBtb2RlcyBub3c6IDVHIEhUMjAsIDVHIEhUNDAsIDJHIENDSywgMkcgT0ZETSwgMkcgSFQyMCwgMkcgSFQ0MAotCSAqLwotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJc3dpdGNoIChpKSB7Ci0JCWNhc2UgMDogLyogNSBHSHogSFQgMjAgKi8KLQkJCWN0cGggPSAmYXItPmVlcHJvbS5jYWxfdGd0X3B3cl81R19odDIwWzBdOwotCQkJbnRhcmdldHMgPSBBUjU0MTZfTlVNXzVHX1RBUkdFVF9QV1JTOwotCQkJY3RwcmVzID0gYXItPnBvd2VyXzVHX2h0MjA7Ci0JCQlicmVhazsKLQkJY2FzZSAxOiAvKiA1IEdIeiBIVCA0MCAqLwotCQkJY3RwaCA9ICZhci0+ZWVwcm9tLmNhbF90Z3RfcHdyXzVHX2h0NDBbMF07Ci0JCQludGFyZ2V0cyA9IEFSNTQxNl9OVU1fNUdfVEFSR0VUX1BXUlM7Ci0JCQljdHByZXMgPSBhci0+cG93ZXJfNUdfaHQ0MDsKLQkJCWJyZWFrOwotCQljYXNlIDI6IC8qIDIuNCBHSHogSFQgMjAgKi8KLQkJCWN0cGggPSAmYXItPmVlcHJvbS5jYWxfdGd0X3B3cl8yR19odDIwWzBdOwotCQkJbnRhcmdldHMgPSBBUjU0MTZfTlVNXzJHX09GRE1fVEFSR0VUX1BXUlM7Ci0JCQljdHByZXMgPSBhci0+cG93ZXJfMkdfaHQyMDsKLQkJCWJyZWFrOwotCQljYXNlIDM6IC8qIDIuNCBHSHogSFQgNDAgKi8KLQkJCWN0cGggPSAmYXItPmVlcHJvbS5jYWxfdGd0X3B3cl8yR19odDQwWzBdOwotCQkJbnRhcmdldHMgPSBBUjU0MTZfTlVNXzJHX09GRE1fVEFSR0VUX1BXUlM7Ci0JCQljdHByZXMgPSBhci0+cG93ZXJfMkdfaHQ0MDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJQlVHKCk7Ci0JCX0KLQotCQlmb3IgKG4gPSAwOyBuIDwgbnRhcmdldHM7IG4rKykgewotCQkJaWYgKGN0cGhbbl0uZnJlcSA9PSAweGZmKQotCQkJCWJyZWFrOwotCQkJcHdyX2ZyZXFzW25dID0gY3RwaFtuXS5mcmVxOwotCQl9Ci0JCW50YXJnZXRzID0gbjsKLQkJaWR4ID0gYXI5MTcwX2ZpbmRfZnJlcV9pZHgobnRhcmdldHMsIHB3cl9mcmVxcywgZik7Ci0JCWZvciAobiA9IDA7IG4gPCA4OyBuKyspCi0JCQljdHByZXNbbl0gPSBhcjkxNzBfaW50ZXJwb2xhdGVfdTgoCi0JCQkJCWYsCi0JCQkJCWN0cGhbaWR4ICsgMF0uZnJlcSwKLQkJCQkJY3RwaFtpZHggKyAwXS5wb3dlcltuXSwKLQkJCQkJY3RwaFtpZHggKyAxXS5mcmVxLAotCQkJCQljdHBoW2lkeCArIDFdLnBvd2VyW25dKTsKLQl9Ci0KLQotCS8qIGNhbGMuIGNvbmZvcm1hbmNlIHRlc3QgbGltaXRzIGFuZCBhcHBseSB0byBhci0+cG93ZXIqW10gKi8KLQlhcjkxNzBfY2FsY19jdGwoYXIsIGZyZXEsIGJ3KTsKLQotCS8qIHNldCBBQ0svQ1RTIFRYIHBvd2VyICovCi0JYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKLQotCWlmIChhci0+ZWVwcm9tLnR4X21hc2sgIT0gMSkKLQkJYWNrY2hhaW5zID0gQVI5MTcwX1RYX1BIWV9UWENIQUlOXzI7Ci0JZWxzZQotCQlhY2tjaGFpbnMgPSBBUjkxNzBfVFhfUEhZX1RYQ0hBSU5fMTsKLQotCWlmIChmcmVxIDwgMzAwMCkKLQkJYWNrcG93ZXIgPSBhci0+cG93ZXJfMkdfb2ZkbVswXSAmIDB4M2Y7Ci0JZWxzZQotCQlhY2twb3dlciA9IGFyLT5wb3dlcl81R19sZWdbMF0gJiAweDNmOwotCi0JYXI5MTcwX3JlZ3dyaXRlKDB4MWMzNjk0LCBhY2twb3dlciA8PCAyMCB8IGFja2NoYWlucyA8PCAyNik7Ci0JYXI5MTcwX3JlZ3dyaXRlKDB4MWMzYmI0LCBhY2twb3dlciA8PCA1IHwgYWNrY2hhaW5zIDw8IDExIHwKLQkJCQkgIGFja3Bvd2VyIDw8IDIxIHwgYWNrY2hhaW5zIDw8IDI3KTsKLQotCWFyOTE3MF9yZWd3cml0ZV9maW5pc2goKTsKLQlyZXR1cm4gYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpOwotfQotCi1zdGF0aWMgaW50IGFyOTE3MF9jYWxjX25vaXNlX2RibSh1MzIgcmF3X25vaXNlKQotewotCWlmIChyYXdfbm9pc2UgJiAweDEwMCkKLQkJcmV0dXJuIH4oKHJhd19ub2lzZSAmIDB4MGZmKSA+PiAxKTsKLQllbHNlCi0JCXJldHVybiAocmF3X25vaXNlICYgMHhmZikgPj4gMTsKLX0KLQotaW50IGFyOTE3MF9zZXRfY2hhbm5lbChzdHJ1Y3QgYXI5MTcwICphciwgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAotCQkgICAgICAgZW51bSBhcjkxNzBfcmZfaW5pdF9tb2RlIHJmaSwgZW51bSBhcjkxNzBfYncgYncpCi17Ci0JY29uc3Qgc3RydWN0IGFyOTE3MF9waHlfZnJlcV9wYXJhbXMgKmZyZXFwYXI7Ci0JdTMyIGNtZCwgdG1wLCBvZmZzOwotCV9fbGUzMiB2YWxzWzhdOwotCWludCBpLCBlcnI7Ci0JYm9vbCBiYW5kc3dpdGNoOwotCi0JLyogY2xlYXIgQkIgaGVhdnkgY2xpcCBlbmFibGUgKi8KLQllcnIgPSBhcjkxNzBfd3JpdGVfcmVnKGFyLCAweDFjNTllMCwgMHgyMDApOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQkvKiBtYXkgYmUgTlVMTCBhdCBmaXJzdCBzZXR1cCAqLwotCWlmIChhci0+Y2hhbm5lbCkKLQkJYmFuZHN3aXRjaCA9IGFyLT5jaGFubmVsLT5iYW5kICE9IGNoYW5uZWwtPmJhbmQ7Ci0JZWxzZQotCQliYW5kc3dpdGNoID0gdHJ1ZTsKLQotCS8qIEhXIHdvcmthcm91bmQgKi8KLQlpZiAoIWFyLT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdICYmCi0JICAgIGNoYW5uZWwtPmNlbnRlcl9mcmVxIDw9IDI0MTcpCi0JCWJhbmRzd2l0Y2ggPSB0cnVlOwotCi0JZXJyID0gYXItPmV4ZWNfY21kKGFyLCBBUjkxNzBfQ01EX0ZSRVFfU1RBUlQsIDAsIE5VTEwsIDAsIE5VTEwpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlpZiAocmZpICE9IEFSOTE3MF9SRklfTk9ORSB8fCBiYW5kc3dpdGNoKSB7Ci0JCXUzMiB2YWwgPSAweDQwMDsKLQotCQlpZiAocmZpID09IEFSOTE3MF9SRklfQ09MRCkKLQkJCXZhbCA9IDB4ODAwOwotCi0JCS8qIHdhcm0vY29sZCByZXNldCBCQi9BRERBICovCi0JCWVyciA9IGFyOTE3MF93cml0ZV9yZWcoYXIsIDB4MWQ0MDA0LCB2YWwpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQotCQllcnIgPSBhcjkxNzBfd3JpdGVfcmVnKGFyLCAweDFkNDAwNCwgMHgwKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0KLQkJZXJyID0gYXI5MTcwX2luaXRfcGh5KGFyLCBjaGFubmVsLT5iYW5kKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0KLQkJZXJyID0gYXI5MTcwX2luaXRfcmZfYmFua3NfMF83KGFyLAotCQkJY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0KLQkJY21kID0gQVI5MTcwX0NNRF9SRl9JTklUOwotCX0gZWxzZSB7Ci0JCWNtZCA9IEFSOTE3MF9DTURfRlJFUVVFTkNZOwotCX0KLQotCWVyciA9IGFyOTE3MF9pbml0X3JmX2Jhbms0X3B3cihhciwKLQkJY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haLAotCQljaGFubmVsLT5jZW50ZXJfZnJlcSwgYncpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlzd2l0Y2ggKGJ3KSB7Ci0JY2FzZSBBUjkxNzBfQldfMjA6Ci0JCXRtcCA9IDB4MjQwOwotCQlvZmZzID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSBBUjkxNzBfQldfNDBfQkVMT1c6Ci0JCXRtcCA9IDB4MmM0OwotCQlvZmZzID0gMzsKLQkJYnJlYWs7Ci0JY2FzZSBBUjkxNzBfQldfNDBfQUJPVkU6Ci0JCXRtcCA9IDB4MmQ0OwotCQlvZmZzID0gMTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JCXJldHVybiAtRU5PU1lTOwotCX0KLQotCWlmIChhci0+ZWVwcm9tLnR4X21hc2sgIT0gMSkKLQkJdG1wIHw9IDB4MTAwOwotCi0JZXJyID0gYXI5MTcwX3dyaXRlX3JlZyhhciwgMHgxYzU4MDQsIHRtcCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IGFyOTE3MF9zZXRfZnJlcV9jYWxfZGF0YShhciwgY2hhbm5lbCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IGFyOTE3MF9zZXRfcG93ZXJfY2FsKGFyLCBjaGFubmVsLT5jZW50ZXJfZnJlcSwgYncpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlmcmVxcGFyID0gYXI5MTcwX2dldF9od19keW5fcGFyYW1zKGNoYW5uZWwsIGJ3KTsKLQotCXZhbHNbMF0gPSBjcHVfdG9fbGUzMihjaGFubmVsLT5jZW50ZXJfZnJlcSAqIDEwMDApOwotCXZhbHNbMV0gPSBjcHVfdG9fbGUzMihjb25mX2lzX2h0NDAoJmFyLT5ody0+Y29uZikpOwotCXZhbHNbMl0gPSBjcHVfdG9fbGUzMihvZmZzIDw8IDIgfCAxKTsKLQl2YWxzWzNdID0gY3B1X3RvX2xlMzIoZnJlcXBhci0+Y29lZmZfZXhwKTsKLQl2YWxzWzRdID0gY3B1X3RvX2xlMzIoZnJlcXBhci0+Y29lZmZfbWFuKTsKLQl2YWxzWzVdID0gY3B1X3RvX2xlMzIoZnJlcXBhci0+Y29lZmZfZXhwX3NoZ2kpOwotCXZhbHNbNl0gPSBjcHVfdG9fbGUzMihmcmVxcGFyLT5jb2VmZl9tYW5fc2hnaSk7Ci0JdmFsc1s3XSA9IGNwdV90b19sZTMyKDEwMDApOwotCi0JZXJyID0gYXItPmV4ZWNfY21kKGFyLCBjbWQsIHNpemVvZih2YWxzKSwgKHU4ICopdmFscywKLQkJCSAgIHNpemVvZih2YWxzKSwgKHU4ICopdmFscyk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWlmIChhci0+cGh5X2hlYXZ5X2NsaXApIHsKLQkJZXJyID0gYXI5MTcwX3dyaXRlX3JlZyhhciwgMHgxYzU5ZTAsCi0JCQkJICAgICAgIDB4MjAwIHwgYXItPnBoeV9oZWF2eV9jbGlwKTsKLQkJaWYgKGVycikgewotCQkJaWYgKGFyOTE3MF9uYWdfbGltaXRlcihhcikpCi0JCQkJd2lwaHlfZXJyKGFyLT5ody0+d2lwaHksCi0JCQkJCSAgImZhaWxlZCB0byBzZXQgaGVhdnkgY2xpcFxuIik7Ci0JCX0KLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0JCWFyLT5ub2lzZVtpXSA9IGFyOTE3MF9jYWxjX25vaXNlX2RibSgKLQkJCQkobGUzMl90b19jcHUodmFsc1syICsgaV0pID4+IDE5KSAmIDB4MWZmKTsKLQotCQlhci0+bm9pc2VbaSArIDJdID0gYXI5MTcwX2NhbGNfbm9pc2VfZGJtKAotCQkJCSAgICAobGUzMl90b19jcHUodmFsc1s1ICsgaV0pID4+IDIzKSAmIDB4MWZmKTsKLQl9Ci0KLQlhci0+Y2hhbm5lbCA9IGNoYW5uZWw7Ci0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC91c2IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNiZTZmOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL3VzYi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAwOCArMCwwIEBACi0vKgotICogQXRoZXJvcyBBUjkxNzAgZHJpdmVyCi0gKgotICogVVNCIC0gZnJvbnRlbmQKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KLSAqIENvcHlyaWdodCAyMDA5LCBDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUB3ZWIuZGU+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHNlZQotICogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KLSAqCi0gKiBUaGlzIGZpbGUgaW5jb3Jwb3JhdGVzIHdvcmsgY292ZXJlZCBieSB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQKLSAqIHBlcm1pc3Npb24gbm90aWNlOgotICogICAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSW5jLgotICoKLSAqICAgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogICAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSAqCi0gKiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSAqICAgIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICAgIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0gKiAgICBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0gKiAgICBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLSAqICAgIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0gKiAgICBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0jaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotI2luY2x1ZGUgImFyOTE3MC5oIgotI2luY2x1ZGUgImNtZC5oIgotI2luY2x1ZGUgImh3LmgiCi0jaW5jbHVkZSAidXNiLmgiCi0KLU1PRFVMRV9BVVRIT1IoIkpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+Iik7Ci1NT0RVTEVfQVVUSE9SKCJDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUB3ZWIuZGU+Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkF0aGVyb3MgQVI5MTcwIDgwMi4xMW4gVVNCIHdpcmVsZXNzIik7Ci1NT0RVTEVfRklSTVdBUkUoImFyOTE3MC5mdyIpOwotCi1lbnVtIGFyOTE3MF9yZXF1aXJlbWVudHMgewotCUFSOTE3MF9SRVFfRlcxX09OTFkgPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGFyOTE3MF91c2JfaWRzW10gPSB7Ci0JLyogQXRoZXJvcyA5MTcwICovCi0JeyBVU0JfREVWSUNFKDB4MGNmMywgMHg5MTcwKSB9LAotCS8qIEF0aGVyb3MgVEcxMjFOICovCi0JeyBVU0JfREVWSUNFKDB4MGNmMywgMHgxMDAxKSB9LAotCS8qIFRQLUxpbmsgVEwtV044MjFOIHYyICovCi0JeyBVU0JfREVWSUNFKDB4MGNmMywgMHgxMDAyKSB9LAotCS8qIDNDb20gRHVhbCBCYW5kIDgwMi4xMW4gVVNCIEFkYXB0ZXIgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwY2YzLCAweDEwMTApIH0sCi0JLyogSDNDIER1YWwgQmFuZCA4MDIuMTFuIFVTQiBBZGFwdGVyICovCi0JeyBVU0JfREVWSUNFKDB4MGNmMywgMHgxMDExKSB9LAotCS8qIENhY2UgQWlycGNhcCBOWCAqLwotCXsgVVNCX0RFVklDRSgweGNhY2UsIDB4MDMwMCkgfSwKLQkvKiBELUxpbmsgRFdBIDE2MCBBMSAqLwotCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MxMCkgfSwKLQkvKiBELUxpbmsgRFdBIDE2MCBBMiAqLwotCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2EwOSkgfSwKLQkvKiBOZXRnZWFyIFdOQTEwMDAgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwODQ2LCAweDkwNDApIH0sCi0JLyogTmV0Z2VhciBXTkRBMzEwMCAqLwotCXsgVVNCX0RFVklDRSgweDA4NDYsIDB4OTAxMCkgfSwKLQkvKiBOZXRnZWFyIFdOMTExIHYyICovCi0JeyBVU0JfREVWSUNFKDB4MDg0NiwgMHg5MDAxKSB9LAotCS8qIFp5ZGFzIFpEMTIyMSAqLwotCXsgVVNCX0RFVklDRSgweDBhY2UsIDB4MTIyMSkgfSwKLQkvKiBQcm94aW0gT1JpTk9DTyA4MDIuMTFuIFVTQiAqLwotCXsgVVNCX0RFVklDRSgweDE0MzUsIDB4MDgwNCkgfSwKLQkvKiBXTkMgR2VuZXJpYyAxMW4gVVNCIERvbmdsZSAqLwotCXsgVVNCX0RFVklDRSgweDE0MzUsIDB4MDMyNikgfSwKLQkvKiBaeVhFTCBOV0QyNzFOICovCi0JeyBVU0JfREVWSUNFKDB4MDU4NiwgMHgzNDE3KSB9LAotCS8qIFotQ29tIFVCODEgQkcgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwY2RlLCAweDAwMjMpIH0sCi0JLyogWi1Db20gVUI4MiBBQkcgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwY2RlLCAweDAwMjYpIH0sCi0JLyogU3BoYWlyb24gSG9tZWxpbmsgMTIwMiAqLwotCXsgVVNCX0RFVklDRSgweDBjZGUsIDB4MDAyNykgfSwKLQkvKiBBcmNhZHlhbiBXTjc1MTIgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweGY1MjIpIH0sCi0JLyogUGxhbmV4IEdXVVMzMDAgKi8KLQl7IFVTQl9ERVZJQ0UoMHgyMDE5LCAweDUzMDQpIH0sCi0JLyogSU8tRGF0YSBXTkdETlVTMiAqLwotCXsgVVNCX0RFVklDRSgweDA0YmIsIDB4MDkzZikgfSwKLQkvKiBBVk0gRlJJVFohV0xBTiBVU0IgU3RpY2sgTiAqLwotCXsgVVNCX0RFVklDRSgweDA1N0MsIDB4ODQwMSkgfSwKLQkvKiBORUMgV0wzMDBOVS1HICovCi0JeyBVU0JfREVWSUNFKDB4MDQwOSwgMHgwMjQ5KSB9LAotCS8qIEFWTSBGUklUWiFXTEFOIFVTQiBTdGljayBOIDIuNCAqLwotCXsgVVNCX0RFVklDRSgweDA1N0MsIDB4ODQwMiksIC5kcml2ZXJfaW5mbyA9IEFSOTE3MF9SRVFfRlcxX09OTFkgfSwKLQkvKiBRd2VzdC9BY3Rpb250ZWMgODAyQUlOIFdpcmVsZXNzIE4gVVNCIE5ldHdvcmsgQWRhcHRlciAqLwotCXsgVVNCX0RFVklDRSgweDE2NjgsIDB4MTIwMCkgfSwKLQotCS8qIHRlcm1pbmF0ZSAqLwotCXt9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGFyOTE3MF91c2JfaWRzKTsKLQotc3RhdGljIHZvaWQgYXI5MTcwX3VzYl9zdWJtaXRfdXJiKHN0cnVjdCBhcjkxNzBfdXNiICphcnUpCi17Ci0Jc3RydWN0IHVyYiAqdXJiOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGVycjsKLQotCWlmICh1bmxpa2VseSghSVNfU1RBUlRFRCgmYXJ1LT5jb21tb24pKSkKLQkJcmV0dXJuIDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhcnUtPnR4X3VyYl9sb2NrLCBmbGFncyk7Ci0JaWYgKGF0b21pY19yZWFkKCZhcnUtPnR4X3N1Ym1pdHRlZF91cmJzKSA+PSBBUjkxNzBfTlVNX1RYX1VSQlMpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXJ1LT50eF91cmJfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gOwotCX0KLQlhdG9taWNfaW5jKCZhcnUtPnR4X3N1Ym1pdHRlZF91cmJzKTsKLQotCXVyYiA9IHVzYl9nZXRfZnJvbV9hbmNob3IoJmFydS0+dHhfcGVuZGluZyk7Ci0JaWYgKCF1cmIpIHsKLQkJYXRvbWljX2RlYygmYXJ1LT50eF9zdWJtaXR0ZWRfdXJicyk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFydS0+dHhfdXJiX2xvY2ssIGZsYWdzKTsKLQotCQlyZXR1cm4gOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcnUtPnR4X3VyYl9sb2NrLCBmbGFncyk7Ci0KLQlhcnUtPnR4X3BlbmRpbmdfdXJicy0tOwotCXVzYl9hbmNob3JfdXJiKHVyYiwgJmFydS0+dHhfc3VibWl0dGVkKTsKLQotCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKHVubGlrZWx5KGVycikpIHsKLQkJaWYgKGFyOTE3MF9uYWdfbGltaXRlcigmYXJ1LT5jb21tb24pKQotCQkJZGV2X2VycigmYXJ1LT51ZGV2LT5kZXYsICJzdWJtaXRfdXJiIGZhaWxlZCAoJWQpLlxuIiwKLQkJCQllcnIpOwotCi0JCXVzYl91bmFuY2hvcl91cmIodXJiKTsKLQkJYXRvbWljX2RlYygmYXJ1LT50eF9zdWJtaXR0ZWRfdXJicyk7Ci0JCWFyOTE3MF90eF9jYWxsYmFjaygmYXJ1LT5jb21tb24sIHVyYi0+Y29udGV4dCk7Ci0JfQotCi0JdXNiX2ZyZWVfdXJiKHVyYik7Ci19Ci0KLXN0YXRpYyB2b2lkIGFyOTE3MF91c2JfdHhfdXJiX2NvbXBsZXRlX2ZyYW1lKHN0cnVjdCB1cmIgKnVyYikKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdXJiLT5jb250ZXh0OwotCXN0cnVjdCBhcjkxNzBfdXNiICphcnUgPSB1c2JfZ2V0X2ludGZkYXRhKHVzYl9pZm51bV90b19pZih1cmItPmRldiwgMCkpOwotCi0JaWYgKHVubGlrZWx5KCFhcnUpKSB7Ci0JCWRldl9rZnJlZV9za2JfaXJxKHNrYik7Ci0JCXJldHVybiA7Ci0JfQotCi0JYXRvbWljX2RlYygmYXJ1LT50eF9zdWJtaXR0ZWRfdXJicyk7Ci0KLQlhcjkxNzBfdHhfY2FsbGJhY2soJmFydS0+Y29tbW9uLCBza2IpOwotCi0JYXI5MTcwX3VzYl9zdWJtaXRfdXJiKGFydSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFyOTE3MF91c2JfdHhfdXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKLXsKLX0KLQotc3RhdGljIHZvaWQgYXI5MTcwX3VzYl9pcnFfY29tcGxldGVkKHN0cnVjdCB1cmIgKnVyYikKLXsKLQlzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1ID0gdXJiLT5jb250ZXh0OwotCi0Jc3dpdGNoICh1cmItPnN0YXR1cykgewotCS8qIGV2ZXJ5dGhpbmcgaXMgZmluZSAqLwotCWNhc2UgMDoKLQkJYnJlYWs7Ci0KLQkvKiBkaXNjb25uZWN0ICovCi0JY2FzZSAtRU5PRU5UOgotCWNhc2UgLUVDT05OUkVTRVQ6Ci0JY2FzZSAtRU5PREVWOgotCWNhc2UgLUVTSFVURE9XTjoKLQkJZ290byBmcmVlOwotCi0JZGVmYXVsdDoKLQkJZ290byByZXN1Ym1pdDsKLQl9Ci0KLQlhcjkxNzBfaGFuZGxlX2NvbW1hbmRfcmVzcG9uc2UoJmFydS0+Y29tbW9uLCB1cmItPnRyYW5zZmVyX2J1ZmZlciwKLQkJCQkgICAgICAgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKLQotcmVzdWJtaXQ6Ci0JdXNiX2FuY2hvcl91cmIodXJiLCAmYXJ1LT5yeF9zdWJtaXR0ZWQpOwotCWlmICh1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSB7Ci0JCXVzYl91bmFuY2hvcl91cmIodXJiKTsKLQkJZ290byBmcmVlOwotCX0KLQotCXJldHVybjsKLQotZnJlZToKLQl1c2JfZnJlZV9jb2hlcmVudChhcnUtPnVkZXYsIDY0LCB1cmItPnRyYW5zZmVyX2J1ZmZlciwgdXJiLT50cmFuc2Zlcl9kbWEpOwotfQotCi1zdGF0aWMgdm9pZCBhcjkxNzBfdXNiX3J4X2NvbXBsZXRlZChzdHJ1Y3QgdXJiICp1cmIpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHVyYi0+Y29udGV4dDsKLQlzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1ID0gdXNiX2dldF9pbnRmZGF0YSh1c2JfaWZudW1fdG9faWYodXJiLT5kZXYsIDApKTsKLQlpbnQgZXJyOwotCi0JaWYgKCFhcnUpCi0JCWdvdG8gZnJlZTsKLQotCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKLQkvKiBldmVyeXRoaW5nIGlzIGZpbmUgKi8KLQljYXNlIDA6Ci0JCWJyZWFrOwotCi0JLyogZGlzY29ubmVjdCAqLwotCWNhc2UgLUVOT0VOVDoKLQljYXNlIC1FQ09OTlJFU0VUOgotCWNhc2UgLUVOT0RFVjoKLQljYXNlIC1FU0hVVERPV046Ci0JCWdvdG8gZnJlZTsKLQotCWRlZmF1bHQ6Ci0JCWdvdG8gcmVzdWJtaXQ7Ci0JfQotCi0Jc2tiX3B1dChza2IsIHVyYi0+YWN0dWFsX2xlbmd0aCk7Ci0JYXI5MTcwX3J4KCZhcnUtPmNvbW1vbiwgc2tiKTsKLQotcmVzdWJtaXQ6Ci0Jc2tiX3Jlc2V0X3RhaWxfcG9pbnRlcihza2IpOwotCXNrYl90cmltKHNrYiwgMCk7Ci0KLQl1c2JfYW5jaG9yX3VyYih1cmIsICZhcnUtPnJ4X3N1Ym1pdHRlZCk7Ci0JZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKLQlpZiAodW5saWtlbHkoZXJyKSkgewotCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7Ci0JCWdvdG8gZnJlZTsKLQl9Ci0KLQlyZXR1cm4gOwotCi1mcmVlOgotCWRldl9rZnJlZV9za2JfaXJxKHNrYik7Ci19Ci0KLXN0YXRpYyBpbnQgYXI5MTcwX3VzYl9wcmVwX3J4X3VyYihzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1LAotCQkJCSAgc3RydWN0IHVyYiAqdXJiLCBnZnBfdCBnZnApCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCXNrYiA9IF9fZGV2X2FsbG9jX3NrYihBUjkxNzBfTUFYX1JYX0JVRkZFUl9TSVpFICsgMzIsIGdmcCk7Ci0JaWYgKCFza2IpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JLyogcmVzZXJ2ZSBzb21lIHNwYWNlIGZvciBtYWM4MDIxMSdzIHJhZGlvdGFwICovCi0Jc2tiX3Jlc2VydmUoc2tiLCAzMik7Ci0KLQl1c2JfZmlsbF9idWxrX3VyYih1cmIsIGFydS0+dWRldiwKLQkJCSAgdXNiX3JjdmJ1bGtwaXBlKGFydS0+dWRldiwgQVI5MTcwX0VQX1JYKSwKLQkJCSAgc2tiLT5kYXRhLCBtaW4oc2tiX3RhaWxyb29tKHNrYiksCi0JCQkgIEFSOTE3MF9NQVhfUlhfQlVGRkVSX1NJWkUpLAotCQkJICBhcjkxNzBfdXNiX3J4X2NvbXBsZXRlZCwgc2tiKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFyOTE3MF91c2JfYWxsb2NfcnhfaXJxX3VyYihzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1KQotewotCXN0cnVjdCB1cmIgKnVyYiA9IE5VTEw7Ci0Jdm9pZCAqaWJ1ZjsKLQlpbnQgZXJyID0gLUVOT01FTTsKLQotCS8qIGluaXRpYWxpemUgaW50ZXJydXB0IGVuZHBvaW50ICovCi0JdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXVyYikKLQkJZ290byBvdXQ7Ci0KLQlpYnVmID0gdXNiX2FsbG9jX2NvaGVyZW50KGFydS0+dWRldiwgNjQsIEdGUF9LRVJORUwsICZ1cmItPnRyYW5zZmVyX2RtYSk7Ci0JaWYgKCFpYnVmKQotCQlnb3RvIG91dDsKLQotCXVzYl9maWxsX2ludF91cmIodXJiLCBhcnUtPnVkZXYsCi0JCQkgdXNiX3JjdmludHBpcGUoYXJ1LT51ZGV2LCBBUjkxNzBfRVBfSVJRKSwgaWJ1ZiwKLQkJCSA2NCwgYXI5MTcwX3VzYl9pcnFfY29tcGxldGVkLCBhcnUsIDEpOwotCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7Ci0KLQl1c2JfYW5jaG9yX3VyYih1cmIsICZhcnUtPnJ4X3N1Ym1pdHRlZCk7Ci0JZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKLQlpZiAoZXJyKSB7Ci0JCXVzYl91bmFuY2hvcl91cmIodXJiKTsKLQkJdXNiX2ZyZWVfY29oZXJlbnQoYXJ1LT51ZGV2LCA2NCwgdXJiLT50cmFuc2Zlcl9idWZmZXIsCi0JCQkJICB1cmItPnRyYW5zZmVyX2RtYSk7Ci0JfQotCi1vdXQ6Ci0JdXNiX2ZyZWVfdXJiKHVyYik7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBhcjkxNzBfdXNiX2FsbG9jX3J4X2J1bGtfdXJicyhzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1KQotewotCXN0cnVjdCB1cmIgKnVyYjsKLQlpbnQgaTsKLQlpbnQgZXJyID0gLUVJTlZBTDsKLQotCWZvciAoaSA9IDA7IGkgPCBBUjkxNzBfTlVNX1JYX1VSQlM7IGkrKykgewotCQllcnIgPSAtRU5PTUVNOwotCQl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwotCQlpZiAoIXVyYikKLQkJCWdvdG8gZXJyX291dDsKLQotCQllcnIgPSBhcjkxNzBfdXNiX3ByZXBfcnhfdXJiKGFydSwgdXJiLCBHRlBfS0VSTkVMKTsKLQkJaWYgKGVycikgewotCQkJdXNiX2ZyZWVfdXJiKHVyYik7Ci0JCQlnb3RvIGVycl9vdXQ7Ci0JCX0KLQotCQl1c2JfYW5jaG9yX3VyYih1cmIsICZhcnUtPnJ4X3N1Ym1pdHRlZCk7Ci0JCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChlcnIpIHsKLQkJCXVzYl91bmFuY2hvcl91cmIodXJiKTsKLQkJCWRldl9rZnJlZV9za2JfYW55KCh2b2lkICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKLQkJCXVzYl9mcmVlX3VyYih1cmIpOwotCQkJZ290byBlcnJfb3V0OwotCQl9Ci0JCXVzYl9mcmVlX3VyYih1cmIpOwotCX0KLQotCS8qIHRoZSBkZXZpY2Ugbm93IHdhaXRpbmcgZm9yIGEgZmlybXdhcmUuICovCi0JYXJ1LT5jb21tb24uc3RhdGUgPSBBUjkxNzBfSURMRTsKLQlyZXR1cm4gMDsKLQotZXJyX291dDoKLQotCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJmFydS0+cnhfc3VibWl0dGVkKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IGFyOTE3MF91c2JfZmx1c2goc3RydWN0IGFyOTE3MCAqYXIpCi17Ci0Jc3RydWN0IGFyOTE3MF91c2IgKmFydSA9ICh2b2lkICopIGFyOwotCXN0cnVjdCB1cmIgKnVyYjsKLQlpbnQgcmV0LCBlcnIgPSAwOwotCi0JaWYgKElTX1NUQVJURUQoYXIpKQotCQlhcnUtPmNvbW1vbi5zdGF0ZSA9IEFSOTE3MF9JRExFOwotCi0JdXNiX3dhaXRfYW5jaG9yX2VtcHR5X3RpbWVvdXQoJmFydS0+dHhfcGVuZGluZywKLQkJCQkJICAgIG1zZWNzX3RvX2ppZmZpZXMoODAwKSk7Ci0Jd2hpbGUgKCh1cmIgPSB1c2JfZ2V0X2Zyb21fYW5jaG9yKCZhcnUtPnR4X3BlbmRpbmcpKSkgewotCQlhcjkxNzBfdHhfY2FsbGJhY2soJmFydS0+Y29tbW9uLCAodm9pZCAqKSB1cmItPmNvbnRleHQpOwotCQl1c2JfZnJlZV91cmIodXJiKTsKLQl9Ci0KLQkvKiBsZXRzIHdhaXQgYSB3aGlsZSB1bnRpbCB0aGUgdHggLSBxdWV1ZXMgYXJlIGRyaWVkIG91dCAqLwotCXJldCA9IHVzYl93YWl0X2FuY2hvcl9lbXB0eV90aW1lb3V0KCZhcnUtPnR4X3N1Ym1pdHRlZCwKLQkJCQkJICAgIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7Ci0JaWYgKHJldCA9PSAwKQotCQllcnIgPSAtRVRJTUVET1VUOwotCi0JdXNiX2tpbGxfYW5jaG9yZWRfdXJicygmYXJ1LT50eF9zdWJtaXR0ZWQpOwotCi0JaWYgKElTX0FDQ0VQVElOR19DTUQoYXIpKQotCQlhcnUtPmNvbW1vbi5zdGF0ZSA9IEFSOTE3MF9TVEFSVEVEOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgYXI5MTcwX3VzYl9jYW5jZWxfdXJicyhzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1KQotewotCWludCBlcnI7Ci0KLQlhcnUtPmNvbW1vbi5zdGF0ZSA9IEFSOTE3MF9VTktOT1dOX1NUQVRFOwotCi0JZXJyID0gYXI5MTcwX3VzYl9mbHVzaCgmYXJ1LT5jb21tb24pOwotCWlmIChlcnIpCi0JCWRldl9lcnIoJmFydS0+dWRldi0+ZGV2LCAic3R1Y2sgdHggdXJicyFcbiIpOwotCi0JdXNiX3BvaXNvbl9hbmNob3JlZF91cmJzKCZhcnUtPnR4X3N1Ym1pdHRlZCk7Ci0JdXNiX3BvaXNvbl9hbmNob3JlZF91cmJzKCZhcnUtPnJ4X3N1Ym1pdHRlZCk7Ci19Ci0KLXN0YXRpYyBpbnQgYXI5MTcwX3VzYl9leGVjX2NtZChzdHJ1Y3QgYXI5MTcwICphciwgZW51bSBhcjkxNzBfY21kIGNtZCwKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcGxlbiwgdm9pZCAqcGF5bG9hZCwKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgb3V0bGVuLCB2b2lkICpvdXQpCi17Ci0Jc3RydWN0IGFyOTE3MF91c2IgKmFydSA9ICh2b2lkICopIGFyOwotCXN0cnVjdCB1cmIgKnVyYiA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZXJyID0gLUVOT01FTTsKLQotCWlmICh1bmxpa2VseSghSVNfQUNDRVBUSU5HX0NNRChhcikpKQotCQlyZXR1cm4gLUVQRVJNOwotCi0JaWYgKFdBUk5fT04ocGxlbiA+IEFSOTE3MF9NQVhfQ01EX0xFTiAtIDQpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7Ci0JaWYgKHVubGlrZWx5KCF1cmIpKQotCQlnb3RvIGVycl9mcmVlOwotCi0JYXItPmNtZGJ1ZlswXSA9IGNwdV90b19sZTMyKHBsZW4pOwotCWFyLT5jbWRidWZbMF0gfD0gY3B1X3RvX2xlMzIoY21kIDw8IDgpOwotCS8qIHdyaXRpbmcgbXVsdGlwbGUgcmVncyBmaWxscyB0aGlzIGJ1ZmZlciBhbHJlYWR5ICovCi0JaWYgKHBsZW4gJiYgcGF5bG9hZCAhPSAodTggKikoJmFyLT5jbWRidWZbMV0pKQotCQltZW1jcHkoJmFyLT5jbWRidWZbMV0sIHBheWxvYWQsIHBsZW4pOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFydS0+Y29tbW9uLmNtZGxvY2ssIGZsYWdzKTsKLQlhcnUtPnJlYWRidWYgPSAodTggKilvdXQ7Ci0JYXJ1LT5yZWFkbGVuID0gb3V0bGVuOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFydS0+Y29tbW9uLmNtZGxvY2ssIGZsYWdzKTsKLQotCXVzYl9maWxsX2ludF91cmIodXJiLCBhcnUtPnVkZXYsCi0JCQkgdXNiX3NuZGludHBpcGUoYXJ1LT51ZGV2LCBBUjkxNzBfRVBfQ01EKSwKLQkJCSBhcnUtPmNvbW1vbi5jbWRidWYsIHBsZW4gKyA0LAotCQkJIGFyOTE3MF91c2JfdHhfdXJiX2NvbXBsZXRlLCBOVUxMLCAxKTsKLQotCXVzYl9hbmNob3JfdXJiKHVyYiwgJmFydS0+dHhfc3VibWl0dGVkKTsKLQllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwotCWlmICh1bmxpa2VseShlcnIpKSB7Ci0JCXVzYl91bmFuY2hvcl91cmIodXJiKTsKLQkJdXNiX2ZyZWVfdXJiKHVyYik7Ci0JCWdvdG8gZXJyX3VuYnVmOwotCX0KLQl1c2JfZnJlZV91cmIodXJiKTsKLQotCWVyciA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmYXJ1LT5jbWRfd2FpdCwgSFopOwotCWlmIChlcnIgPT0gMCkgewotCQllcnIgPSAtRVRJTUVET1VUOwotCQlnb3RvIGVycl91bmJ1ZjsKLQl9Ci0KLQlpZiAoYXJ1LT5yZWFkbGVuICE9IG91dGxlbikgewotCQllcnIgPSAtRU1TR1NJWkU7Ci0JCWdvdG8gZXJyX3VuYnVmOwotCX0KLQotCXJldHVybiAwOwotCi1lcnJfdW5idWY6Ci0JLyogTWF5YmUgdGhlIGRldmljZSB3YXMgcmVtb3ZlZCBpbiB0aGUgc2Vjb25kIHdlIHdlcmUgd2FpdGluZz8gKi8KLQlpZiAoSVNfU1RBUlRFRChhcikpIHsKLQkJZGV2X2VycigmYXJ1LT51ZGV2LT5kZXYsICJubyBjb21tYW5kIGZlZWRiYWNrICIKLQkJCQkJICJyZWNlaXZlZCAoJWQpLlxuIiwgZXJyKTsKLQotCQkvKiBwcm92aWRlIHNvbWUgbWF5YmUgdXNlZnVsIGRlYnVnIGluZm9ybWF0aW9uICovCi0JCXByaW50X2hleF9kdW1wX2J5dGVzKCJhcjkxNzAgY21kOiAiLCBEVU1QX1BSRUZJWF9OT05FLAotCQkJCSAgICAgYXJ1LT5jb21tb24uY21kYnVmLCBwbGVuICsgNCk7Ci0JCWR1bXBfc3RhY2soKTsKLQl9Ci0KLQkvKiBpbnZhbGlkYXRlIHRvIGF2b2lkIGNvbXBsZXRpbmcgdGhlIG5leHQgcHJlbWF0dXJlbHkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYXJ1LT5jb21tb24uY21kbG9jaywgZmxhZ3MpOwotCWFydS0+cmVhZGJ1ZiA9IE5VTEw7Ci0JYXJ1LT5yZWFkbGVuID0gMDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcnUtPmNvbW1vbi5jbWRsb2NrLCBmbGFncyk7Ci0KLWVycl9mcmVlOgotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBhcjkxNzBfdXNiX3R4KHN0cnVjdCBhcjkxNzAgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBhcjkxNzBfdXNiICphcnUgPSAoc3RydWN0IGFyOTE3MF91c2IgKikgYXI7Ci0Jc3RydWN0IHVyYiAqdXJiOwotCi0JaWYgKHVubGlrZWx5KCFJU19TVEFSVEVEKGFyKSkpIHsKLQkJLyogU2VyaW91c2x5LCB3aGF0IHdlcmUgeW91IGRyaW5rLi4uIGVyci4uLiB0aGlua2luZyE/ICovCi0JCXJldHVybiAtRVBFUk07Ci0JfQotCi0JdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKLQlpZiAodW5saWtlbHkoIXVyYikpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JdXNiX2ZpbGxfYnVsa191cmIodXJiLCBhcnUtPnVkZXYsCi0JCQkgIHVzYl9zbmRidWxrcGlwZShhcnUtPnVkZXYsIEFSOTE3MF9FUF9UWCksCi0JCQkgIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCi0JCQkgIGFyOTE3MF91c2JfdHhfdXJiX2NvbXBsZXRlX2ZyYW1lLCBza2IpOwotCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX1pFUk9fUEFDS0VUOwotCi0JdXNiX2FuY2hvcl91cmIodXJiLCAmYXJ1LT50eF9wZW5kaW5nKTsKLQlhcnUtPnR4X3BlbmRpbmdfdXJicysrOwotCi0JdXNiX2ZyZWVfdXJiKHVyYik7Ci0KLQlhcjkxNzBfdXNiX3N1Ym1pdF91cmIoYXJ1KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgYXI5MTcwX3VzYl9jYWxsYmFja19jbWQoc3RydWN0IGFyOTE3MCAqYXIsIHUzMiBsZW4gLCB2b2lkICpidWZmZXIpCi17Ci0Jc3RydWN0IGFyOTE3MF91c2IgKmFydSA9ICh2b2lkICopIGFyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTMyIGluLCBvdXQ7Ci0KLQlpZiAodW5saWtlbHkoIWJ1ZmZlcikpCi0JCXJldHVybiA7Ci0KLQlpbiA9IGxlMzJfdG9fY3B1cCgoX19sZTMyICopYnVmZmVyKTsKLQlvdXQgPSBsZTMyX3RvX2NwdShhci0+Y21kYnVmWzBdKTsKLQotCS8qIG1hc2sgb2ZmIGxlbmd0aCBieXRlICovCi0Jb3V0ICY9IH4weEZGOwotCi0JaWYgKGFydS0+cmVhZGxlbiA+PSAwKSB7Ci0JCS8qIGFkZCBleHBlY3RlZCBsZW5ndGggKi8KLQkJb3V0IHw9IGFydS0+cmVhZGxlbjsKLQl9IGVsc2UgewotCQkvKiBhZGQgb2J0YWluZWQgbGVuZ3RoICovCi0JCW91dCB8PSBpbiAmIDB4RkY7Ci0JfQotCi0JLyoKLQkgKiBTb21lIGNvbW1hbmRzIChlLmc6IEFSOTE3MF9DTURfRlJFUVVFTkNZKSBoYXZlIGEgdmFyaWFibGUgcmVzcG9uc2UKLQkgKiBsZW5ndGggYW5kIHdlIGNhbm5vdCBwcmVkaWN0IHRoZSBjb3JyZWN0IGxlbmd0aCBpbiBhZHZhbmNlLgotCSAqIFNvIHdlIG9ubHkgY2hlY2sgaWYgd2UgcHJvdmlkZWQgZW5vdWdoIHNwYWNlIGZvciB0aGUgZGF0YS4KLQkgKi8KLQlpZiAodW5saWtlbHkob3V0IDwgaW4pKSB7Ci0JCWRldl93YXJuKCZhcnUtPnVkZXYtPmRldiwgInJlY2VpdmVkIGludmFsaWQgY29tbWFuZCByZXNwb25zZSAiCi0JCQkJCSAgImdvdCAlZCBieXRlcywgaW5zdGVhZCBvZiAlZCBieXRlcyAiCi0JCQkJCSAgImFuZCB0aGUgcmVzcCBsZW5ndGggaXMgJWQgYnl0ZXNcbiIsCi0JCQkgaW4sIG91dCwgbGVuKTsKLQkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoImFyOTE3MCBpbnZhbGlkIHJlc3A6ICIsCi0JCQkJICAgICBEVU1QX1BSRUZJWF9PRkZTRVQsIGJ1ZmZlciwgbGVuKTsKLQkJLyoKLQkJICogRG8gbm90IGNvbXBsZXRlLCB0aGVuIHRoZSBjb21tYW5kIHRpbWVzIG91dCwKLQkJICogYW5kIHdlIGdldCBhIHN0YWNrIHRyYWNlIGZyb20gdGhlcmUuCi0JCSAqLwotCQlyZXR1cm4gOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhcnUtPmNvbW1vbi5jbWRsb2NrLCBmbGFncyk7Ci0JaWYgKGFydS0+cmVhZGJ1ZiAmJiBsZW4gPiAwKSB7Ci0JCW1lbWNweShhcnUtPnJlYWRidWYsIGJ1ZmZlciArIDQsIGxlbiAtIDQpOwotCQlhcnUtPnJlYWRidWYgPSBOVUxMOwotCX0KLQljb21wbGV0ZSgmYXJ1LT5jbWRfd2FpdCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXJ1LT5jb21tb24uY21kbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgaW50IGFyOTE3MF91c2JfdXBsb2FkKHN0cnVjdCBhcjkxNzBfdXNiICphcnUsIGNvbnN0IHZvaWQgKmRhdGEsCi0JCQkgICAgIHNpemVfdCBsZW4sIHUzMiBhZGRyLCBib29sIGNvbXBsZXRlKQotewotCWludCB0cmFuc2ZlciwgZXJyOwotCXU4ICpidWYgPSBrbWFsbG9jKDQwOTYsIEdGUF9LRVJORUwpOwotCi0JaWYgKCFidWYpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jd2hpbGUgKGxlbikgewotCQl0cmFuc2ZlciA9IG1pbl90KGludCwgbGVuLCA0MDk2KTsKLQkJbWVtY3B5KGJ1ZiwgZGF0YSwgdHJhbnNmZXIpOwotCi0JCWVyciA9IHVzYl9jb250cm9sX21zZyhhcnUtPnVkZXYsIHVzYl9zbmRjdHJscGlwZShhcnUtPnVkZXYsIDApLAotCQkJCSAgICAgIDB4MzAgLyogRlcgREwgKi8sIDB4NDAgfCBVU0JfRElSX09VVCwKLQkJCQkgICAgICBhZGRyID4+IDgsIDAsIGJ1ZiwgdHJhbnNmZXIsIDEwMDApOwotCi0JCWlmIChlcnIgPCAwKSB7Ci0JCQlrZnJlZShidWYpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCi0JCWxlbiAtPSB0cmFuc2ZlcjsKLQkJZGF0YSArPSB0cmFuc2ZlcjsKLQkJYWRkciArPSB0cmFuc2ZlcjsKLQl9Ci0Ja2ZyZWUoYnVmKTsKLQotCWlmIChjb21wbGV0ZSkgewotCQllcnIgPSB1c2JfY29udHJvbF9tc2coYXJ1LT51ZGV2LCB1c2Jfc25kY3RybHBpcGUoYXJ1LT51ZGV2LCAwKSwKLQkJCQkgICAgICAweDMxIC8qIEZXIERMIENPTVBMRVRFICovLAotCQkJCSAgICAgIDB4NDAgfCBVU0JfRElSX09VVCwgMCwgMCwgTlVMTCwgMCwgNTAwMCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYXI5MTcwX3VzYl9yZXNldChzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1KQotewotCWludCByZXQsIGxvY2sgPSAoYXJ1LT5pbnRmLT5jb25kaXRpb24gIT0gVVNCX0lOVEVSRkFDRV9CSU5ESU5HKTsKLQotCWlmIChsb2NrKSB7Ci0JCXJldCA9IHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQoYXJ1LT51ZGV2LCBhcnUtPmludGYpOwotCQlpZiAocmV0IDwgMCkgewotCQkJZGV2X2VycigmYXJ1LT51ZGV2LT5kZXYsICJ1bmFibGUgdG8gbG9jayBkZXZpY2UgIgotCQkJCSJmb3IgcmVzZXQgKCVkKS5cbiIsIHJldCk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQotCi0JcmV0ID0gdXNiX3Jlc2V0X2RldmljZShhcnUtPnVkZXYpOwotCWlmIChsb2NrKQotCQl1c2JfdW5sb2NrX2RldmljZShhcnUtPnVkZXYpOwotCi0JLyogbGV0IGl0IHJlc3QgLSBmb3IgYSBzZWNvbmQgLSAqLwotCW1zbGVlcCgxMDAwKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgYXI5MTcwX3VzYl91cGxvYWRfZmlybXdhcmUoc3RydWN0IGFyOTE3MF91c2IgKmFydSkKLXsKLQlpbnQgZXJyOwotCi0JaWYgKCFhcnUtPmluaXRfdmFsdWVzKQotCQlnb3RvIHVwbG9hZF9md19zdGFydDsKLQotCS8qIEZpcnN0LCB1cGxvYWQgaW5pdGlhbCB2YWx1ZXMgdG8gZGV2aWNlIFJBTSAqLwotCWVyciA9IGFyOTE3MF91c2JfdXBsb2FkKGFydSwgYXJ1LT5pbml0X3ZhbHVlcy0+ZGF0YSwKLQkJCQlhcnUtPmluaXRfdmFsdWVzLT5zaXplLCAweDEwMjgwMCwgZmFsc2UpOwotCWlmIChlcnIpIHsKLQkJZGV2X2VycigmYXJ1LT51ZGV2LT5kZXYsICJmaXJtd2FyZSBwYXJ0IDEgIgotCQkJInVwbG9hZCBmYWlsZWQgKCVkKS5cbiIsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi11cGxvYWRfZndfc3RhcnQ6Ci0KLQkvKiBUaGVuLCB1cGxvYWQgdGhlIGZpcm13YXJlIGl0c2VsZiBhbmQgc3RhcnQgaXQgKi8KLQlyZXR1cm4gYXI5MTcwX3VzYl91cGxvYWQoYXJ1LCBhcnUtPmZpcm13YXJlLT5kYXRhLCBhcnUtPmZpcm13YXJlLT5zaXplLAotCQkJCTB4MjAwMDAwLCB0cnVlKTsKLX0KLQotc3RhdGljIGludCBhcjkxNzBfdXNiX2luaXRfdHJhbnNwb3J0KHN0cnVjdCBhcjkxNzBfdXNiICphcnUpCi17Ci0Jc3RydWN0IGFyOTE3MCAqYXIgPSAodm9pZCAqKSAmYXJ1LT5jb21tb247Ci0JaW50IGVycjsKLQotCWFyOTE3MF9yZWd3cml0ZV9iZWdpbihhcik7Ci0KLQkvKiBTZXQgVVNCIFJ4IHN0cmVhbSBtb2RlIE1BWCBwYWNrZXQgbnVtYmVyIHRvIDIgKi8KLQlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX1VTQl9SRUdfTUFYX0FHR19VUExPQUQsIDB4NCk7Ci0KLQkvKiBTZXQgVVNCIFJ4IHN0cmVhbSBtb2RlIHRpbWVvdXQgdG8gMTB1cyAqLwotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfVVNCX1JFR19VUExPQURfVElNRV9DVEwsIDB4ODApOwotCi0JYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOwotCi0JZXJyID0gYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpOwotCWlmIChlcnIpCi0JCWRldl9lcnIoJmFydS0+dWRldi0+ZGV2LCAiVVNCIHNldHVwIGZhaWxlZCAoJWQpLlxuIiwgZXJyKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIGFyOTE3MF91c2Jfc3RvcChzdHJ1Y3QgYXI5MTcwICphcikKLXsKLQlzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1ID0gKHZvaWQgKikgYXI7Ci0JaW50IHJldDsKLQotCWlmIChJU19BQ0NFUFRJTkdfQ01EKGFyKSkKLQkJYXJ1LT5jb21tb24uc3RhdGUgPSBBUjkxNzBfU1RPUFBFRDsKLQotCXJldCA9IGFyOTE3MF91c2JfZmx1c2goYXIpOwotCWlmIChyZXQpCi0JCWRldl9lcnIoJmFydS0+dWRldi0+ZGV2LCAia2lsbCBwZW5kaW5nIHR4IHVyYnMuXG4iKTsKLQotCXVzYl9wb2lzb25fYW5jaG9yZWRfdXJicygmYXJ1LT50eF9zdWJtaXR0ZWQpOwotCi0JLyoKLQkgKiBOb3RlOgotCSAqIFNvIGZhciB3ZSBmcmVlZCBhbGwgdHggdXJicywgYnV0IHdlIHdvbid0IGRhcmUgdG8gdG91Y2ggYW55IHJ4IHVyYnMuCi0JICogRWxzZSB3ZSB3b3VsZCBlbmQgdXAgd2l0aCBhIHVucmVzcG9uc2l2ZSBkZXZpY2UuLi4KLQkgKi8KLX0KLQotc3RhdGljIGludCBhcjkxNzBfdXNiX29wZW4oc3RydWN0IGFyOTE3MCAqYXIpCi17Ci0Jc3RydWN0IGFyOTE3MF91c2IgKmFydSA9ICh2b2lkICopIGFyOwotCWludCBlcnI7Ci0KLQl1c2JfdW5wb2lzb25fYW5jaG9yZWRfdXJicygmYXJ1LT50eF9zdWJtaXR0ZWQpOwotCWVyciA9IGFyOTE3MF91c2JfaW5pdF90cmFuc3BvcnQoYXJ1KTsKLQlpZiAoZXJyKSB7Ci0JCXVzYl9wb2lzb25fYW5jaG9yZWRfdXJicygmYXJ1LT50eF9zdWJtaXR0ZWQpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCWFydS0+Y29tbW9uLnN0YXRlID0gQVI5MTcwX0lETEU7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYXI5MTcwX3VzYl9pbml0X2RldmljZShzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1KQotewotCWludCBlcnI7Ci0KLQllcnIgPSBhcjkxNzBfdXNiX2FsbG9jX3J4X2lycV91cmIoYXJ1KTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXQ7Ci0KLQllcnIgPSBhcjkxNzBfdXNiX2FsbG9jX3J4X2J1bGtfdXJicyhhcnUpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3Vucng7Ci0KLQllcnIgPSBhcjkxNzBfdXNiX3VwbG9hZF9maXJtd2FyZShhcnUpOwotCWlmIChlcnIpIHsKLQkJZXJyID0gYXI5MTcwX2VjaG9fdGVzdCgmYXJ1LT5jb21tb24sIDB4NjBkNDMxMTApOwotCQlpZiAoZXJyKSB7Ci0JCQkvKiBmb3JjZSB1c2VyIGludmVudGlvbiwgYnkgZGlzYWJsaW5nIHRoZSBkZXZpY2UgKi8KLQkJCWVyciA9IHVzYl9kcml2ZXJfc2V0X2NvbmZpZ3VyYXRpb24oYXJ1LT51ZGV2LCAtMSk7Ci0JCQlkZXZfZXJyKCZhcnUtPnVkZXYtPmRldiwgImRldmljZSBpcyBpbiBhIGJhZCBzdGF0ZS4gIgotCQkJCQkJICJwbGVhc2UgcmVjb25uZWN0IGl0IVxuIik7Ci0JCQlnb3RvIGVycl91bnJ4OwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWVycl91bnJ4OgotCWFyOTE3MF91c2JfY2FuY2VsX3VyYnMoYXJ1KTsKLQotZXJyX291dDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBhcjkxNzBfdXNiX2Zpcm13YXJlX2ZhaWxlZChzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1KQotewotCXN0cnVjdCBkZXZpY2UgKnBhcmVudCA9IGFydS0+dWRldi0+ZGV2LnBhcmVudDsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKLQotCS8qCi0JICogU3RvcmUgYSBjb3B5IG9mIHRoZSB1c2JfZGV2aWNlIHBvaW50ZXIgbG9jYWxseS4KLQkgKiBUaGlzIGlzIGJlY2F1c2UgZGV2aWNlX3JlbGVhc2VfZHJpdmVyIGluaXRpYXRlcwotCSAqIGFyOTE3MF91c2JfZGlzY29ubmVjdCwgd2hpY2ggaW4gdHVybiBmcmVlcyBvdXIKLQkgKiBkcml2ZXIgY29udGV4dCAoYXJ1KS4KLQkgKi8KLQl1ZGV2ID0gYXJ1LT51ZGV2OwotCi0JY29tcGxldGUoJmFydS0+ZmlybXdhcmVfbG9hZGluZ19jb21wbGV0ZSk7Ci0KLQkvKiB1bmJpbmQgYW55dGhpbmcgZmFpbGVkICovCi0JaWYgKHBhcmVudCkKLQkJZGV2aWNlX2xvY2socGFyZW50KTsKLQotCWRldmljZV9yZWxlYXNlX2RyaXZlcigmdWRldi0+ZGV2KTsKLQlpZiAocGFyZW50KQotCQlkZXZpY2VfdW5sb2NrKHBhcmVudCk7Ci0KLQl1c2JfcHV0X2Rldih1ZGV2KTsKLX0KLQotc3RhdGljIHZvaWQgYXI5MTcwX3VzYl9maXJtd2FyZV9maW5pc2goY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgdm9pZCAqY29udGV4dCkKLXsKLQlzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1ID0gY29udGV4dDsKLQlpbnQgZXJyOwotCi0JYXJ1LT5maXJtd2FyZSA9IGZ3OwotCi0JaWYgKCFmdykgewotCQlkZXZfZXJyKCZhcnUtPnVkZXYtPmRldiwgImZpcm13YXJlIGZpbGUgbm90IGZvdW5kLlxuIik7Ci0JCWdvdG8gZXJyX2ZyZWVmdzsKLQl9Ci0KLQllcnIgPSBhcjkxNzBfdXNiX2luaXRfZGV2aWNlKGFydSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfZnJlZWZ3OwotCi0JZXJyID0gYXI5MTcwX3VzYl9vcGVuKCZhcnUtPmNvbW1vbik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfdW5yeDsKLQotCWVyciA9IGFyOTE3MF9yZWdpc3RlcigmYXJ1LT5jb21tb24sICZhcnUtPnVkZXYtPmRldik7Ci0KLQlhcjkxNzBfdXNiX3N0b3AoJmFydS0+Y29tbW9uKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl91bnJ4OwotCi0JY29tcGxldGUoJmFydS0+ZmlybXdhcmVfbG9hZGluZ19jb21wbGV0ZSk7Ci0JdXNiX3B1dF9kZXYoYXJ1LT51ZGV2KTsKLQlyZXR1cm47Ci0KLSBlcnJfdW5yeDoKLQlhcjkxNzBfdXNiX2NhbmNlbF91cmJzKGFydSk7Ci0KLSBlcnJfZnJlZWZ3OgotCWFyOTE3MF91c2JfZmlybXdhcmVfZmFpbGVkKGFydSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFyOTE3MF91c2JfZmlybXdhcmVfaW5pdHMoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywKLQkJCQkgICAgICB2b2lkICpjb250ZXh0KQotewotCXN0cnVjdCBhcjkxNzBfdXNiICphcnUgPSBjb250ZXh0OwotCWludCBlcnI7Ci0KLQlpZiAoIWZ3KSB7Ci0JCWRldl9lcnIoJmFydS0+dWRldi0+ZGV2LCAiZmlsZSB3aXRoIGluaXQgdmFsdWVzIG5vdCBmb3VuZC5cbiIpOwotCQlhcjkxNzBfdXNiX2Zpcm13YXJlX2ZhaWxlZChhcnUpOwotCQlyZXR1cm47Ci0JfQotCi0JYXJ1LT5pbml0X3ZhbHVlcyA9IGZ3OwotCi0JLyogb2sgc28gd2UgaGF2ZSB0aGUgaW5pdCB2YWx1ZXMgLS0gZ2V0IGNvZGUgZm9yIHR3by1zdGFnZSAqLwotCi0JZXJyID0gcmVxdWVzdF9maXJtd2FyZV9ub3dhaXQoVEhJU19NT0RVTEUsIDEsICJhcjkxNzAtMi5mdyIsCi0JCQkJICAgICAgJmFydS0+dWRldi0+ZGV2LCBHRlBfS0VSTkVMLCBhcnUsCi0JCQkJICAgICAgYXI5MTcwX3VzYl9maXJtd2FyZV9maW5pc2gpOwotCWlmIChlcnIpCi0JCWFyOTE3MF91c2JfZmlybXdhcmVfZmFpbGVkKGFydSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFyOTE3MF91c2JfZmlybXdhcmVfc3RlcDIoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgdm9pZCAqY29udGV4dCkKLXsKLQlzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1ID0gY29udGV4dDsKLQlpbnQgZXJyOwotCi0JaWYgKGZ3KSB7Ci0JCWFyOTE3MF91c2JfZmlybXdhcmVfZmluaXNoKGZ3LCBjb250ZXh0KTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChhcnUtPnJlcV9vbmVfc3RhZ2VfZncpIHsKLQkJZGV2X2VycigmYXJ1LT51ZGV2LT5kZXYsICJhcjkxNzAuZncgZmlybXdhcmUgZmlsZSAiCi0JCQkibm90IGZvdW5kIGFuZCBpcyByZXF1aXJlZCBmb3IgdGhpcyBkZXZpY2VcbiIpOwotCQlhcjkxNzBfdXNiX2Zpcm13YXJlX2ZhaWxlZChhcnUpOwotCQlyZXR1cm47Ci0JfQotCi0JZGV2X2VycigmYXJ1LT51ZGV2LT5kZXYsICJhcjkxNzAuZncgZmlybXdhcmUgZmlsZSAiCi0JCSJub3QgZm91bmQsIHRyeWluZyBvbGQgZmlybXdhcmUuLi5cbiIpOwotCi0JZXJyID0gcmVxdWVzdF9maXJtd2FyZV9ub3dhaXQoVEhJU19NT0RVTEUsIDEsICJhcjkxNzAtMS5mdyIsCi0JCQkJICAgICAgJmFydS0+dWRldi0+ZGV2LCBHRlBfS0VSTkVMLCBhcnUsCi0JCQkJICAgICAgYXI5MTcwX3VzYl9maXJtd2FyZV9pbml0cyk7Ci0JaWYgKGVycikKLQkJYXI5MTcwX3VzYl9maXJtd2FyZV9mYWlsZWQoYXJ1KTsKLX0KLQotc3RhdGljIGJvb2wgYXI5MTcwX3JlcXVpcmVzX29uZV9zdGFnZShjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCi17Ci0JaWYgKCFpZC0+ZHJpdmVyX2luZm8pCi0JCXJldHVybiBmYWxzZTsKLQlpZiAoaWQtPmRyaXZlcl9pbmZvID09IEFSOTE3MF9SRVFfRlcxX09OTFkpCi0JCXJldHVybiB0cnVlOwotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGludCBhcjkxNzBfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAotCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCBhcjkxNzBfdXNiICphcnU7Ci0Jc3RydWN0IGFyOTE3MCAqYXI7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7Ci0JaW50IGVycjsKLQotCWFydSA9IGFyOTE3MF9hbGxvYyhzaXplb2YoKmFydSkpOwotCWlmIChJU19FUlIoYXJ1KSkgewotCQllcnIgPSBQVFJfRVJSKGFydSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwotCXVzYl9nZXRfZGV2KHVkZXYpOwotCWFydS0+dWRldiA9IHVkZXY7Ci0JYXJ1LT5pbnRmID0gaW50ZjsKLQlhciA9ICZhcnUtPmNvbW1vbjsKLQotCWFydS0+cmVxX29uZV9zdGFnZV9mdyA9IGFyOTE3MF9yZXF1aXJlc19vbmVfc3RhZ2UoaWQpOwotCi0JdXNiX3NldF9pbnRmZGF0YShpbnRmLCBhcnUpOwotCVNFVF9JRUVFODAyMTFfREVWKGFyLT5odywgJmludGYtPmRldik7Ci0KLQlpbml0X3VzYl9hbmNob3IoJmFydS0+cnhfc3VibWl0dGVkKTsKLQlpbml0X3VzYl9hbmNob3IoJmFydS0+dHhfcGVuZGluZyk7Ci0JaW5pdF91c2JfYW5jaG9yKCZhcnUtPnR4X3N1Ym1pdHRlZCk7Ci0JaW5pdF9jb21wbGV0aW9uKCZhcnUtPmNtZF93YWl0KTsKLQlpbml0X2NvbXBsZXRpb24oJmFydS0+ZmlybXdhcmVfbG9hZGluZ19jb21wbGV0ZSk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmFydS0+dHhfdXJiX2xvY2spOwotCi0JYXJ1LT50eF9wZW5kaW5nX3VyYnMgPSAwOwotCWF0b21pY19zZXQoJmFydS0+dHhfc3VibWl0dGVkX3VyYnMsIDApOwotCi0JYXJ1LT5jb21tb24uc3RvcCA9IGFyOTE3MF91c2Jfc3RvcDsKLQlhcnUtPmNvbW1vbi5mbHVzaCA9IGFyOTE3MF91c2JfZmx1c2g7Ci0JYXJ1LT5jb21tb24ub3BlbiA9IGFyOTE3MF91c2Jfb3BlbjsKLQlhcnUtPmNvbW1vbi50eCA9IGFyOTE3MF91c2JfdHg7Ci0JYXJ1LT5jb21tb24uZXhlY19jbWQgPSBhcjkxNzBfdXNiX2V4ZWNfY21kOwotCWFydS0+Y29tbW9uLmNhbGxiYWNrX2NtZCA9IGFyOTE3MF91c2JfY2FsbGJhY2tfY21kOwotCi0jaWZkZWYgQ09ORklHX1BNCi0JdWRldi0+cmVzZXRfcmVzdW1lID0gMTsKLSNlbmRpZiAvKiBDT05GSUdfUE0gKi8KLQllcnIgPSBhcjkxNzBfdXNiX3Jlc2V0KGFydSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfZnJlZWh3OwotCi0JdXNiX2dldF9kZXYoYXJ1LT51ZGV2KTsKLQlyZXR1cm4gcmVxdWVzdF9maXJtd2FyZV9ub3dhaXQoVEhJU19NT0RVTEUsIDEsICJhcjkxNzAuZnciLAotCQkJCSAgICAgICAmYXJ1LT51ZGV2LT5kZXYsIEdGUF9LRVJORUwsIGFydSwKLQkJCQkgICAgICAgYXI5MTcwX3VzYl9maXJtd2FyZV9zdGVwMik7Ci1lcnJfZnJlZWh3OgotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7Ci0JdXNiX3B1dF9kZXYodWRldik7Ci0JaWVlZTgwMjExX2ZyZWVfaHcoYXItPmh3KTsKLW91dDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBhcjkxNzBfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCi17Ci0Jc3RydWN0IGFyOTE3MF91c2IgKmFydSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Ci0KLQlpZiAoIWFydSkKLQkJcmV0dXJuOwotCi0JYXJ1LT5jb21tb24uc3RhdGUgPSBBUjkxNzBfSURMRTsKLQotCXdhaXRfZm9yX2NvbXBsZXRpb24oJmFydS0+ZmlybXdhcmVfbG9hZGluZ19jb21wbGV0ZSk7Ci0KLQlhcjkxNzBfdW5yZWdpc3RlcigmYXJ1LT5jb21tb24pOwotCWFyOTE3MF91c2JfY2FuY2VsX3VyYnMoYXJ1KTsKLQotCXVzYl9wdXRfZGV2KGFydS0+dWRldik7Ci0JdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKLQlpZWVlODAyMTFfZnJlZV9odyhhcnUtPmNvbW1vbi5odyk7Ci0KLQlyZWxlYXNlX2Zpcm13YXJlKGFydS0+aW5pdF92YWx1ZXMpOwotCXJlbGVhc2VfZmlybXdhcmUoYXJ1LT5maXJtd2FyZSk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgYXI5MTcwX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCi0JCQkgIHBtX21lc3NhZ2VfdCAgbWVzc2FnZSkKLXsKLQlzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKLQotCWlmICghYXJ1KQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWFydS0+Y29tbW9uLnN0YXRlID0gQVI5MTcwX0lETEU7Ci0JYXI5MTcwX3VzYl9jYW5jZWxfdXJicyhhcnUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYXI5MTcwX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKLXsKLQlzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKLQlpbnQgZXJyOwotCi0JaWYgKCFhcnUpCi0JCXJldHVybiAtRU5PREVWOwotCi0JdXNiX3VucG9pc29uX2FuY2hvcmVkX3VyYnMoJmFydS0+cnhfc3VibWl0dGVkKTsKLQl1c2JfdW5wb2lzb25fYW5jaG9yZWRfdXJicygmYXJ1LT50eF9zdWJtaXR0ZWQpOwotCi0JZXJyID0gYXI5MTcwX3VzYl9pbml0X2RldmljZShhcnUpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3Vucng7Ci0KLQllcnIgPSBhcjkxNzBfdXNiX29wZW4oJmFydS0+Y29tbW9uKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl91bnJ4OwotCi0JcmV0dXJuIDA7Ci0KLWVycl91bnJ4OgotCWFydS0+Y29tbW9uLnN0YXRlID0gQVI5MTcwX0lETEU7Ci0JYXI5MTcwX3VzYl9jYW5jZWxfdXJicyhhcnUpOwotCi0JcmV0dXJuIGVycjsKLX0KLSNlbmRpZiAvKiBDT05GSUdfUE0gKi8KLQotc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGFyOTE3MF9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiYXI5MTcwdXNiIiwKLQkucHJvYmUgPSBhcjkxNzBfdXNiX3Byb2JlLAotCS5kaXNjb25uZWN0ID0gYXI5MTcwX3VzYl9kaXNjb25uZWN0LAotCS5pZF90YWJsZSA9IGFyOTE3MF91c2JfaWRzLAotCS5zb2Z0X3VuYmluZCA9IDEsCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQgPSBhcjkxNzBfc3VzcGVuZCwKLQkucmVzdW1lID0gYXI5MTcwX3Jlc3VtZSwKLQkucmVzZXRfcmVzdW1lID0gYXI5MTcwX3Jlc3VtZSwKLSNlbmRpZiAvKiBDT05GSUdfUE0gKi8KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGFyOTE3MF9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHVzYl9yZWdpc3RlcigmYXI5MTcwX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBhcjkxNzBfZXhpdCh2b2lkKQotewotCXVzYl9kZXJlZ2lzdGVyKCZhcjkxNzBfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQoYXI5MTcwX2luaXQpOwotbW9kdWxlX2V4aXQoYXI5MTcwX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC91c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvdXNiLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxOWIwNjAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC91c2IuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiBBdGhlcm9zIEFSOTE3MCBVU0IgZHJpdmVyCi0gKgotICogRHJpdmVyIHNwZWNpZmljIGRlZmluaXRpb25zCi0gKgotICogQ29weXJpZ2h0IDIwMDgsIEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+Ci0gKiBDb3B5cmlnaHQgMjAwOSwgQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAd2ViLmRlPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCBzZWUKLSAqIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCi0gKgotICogVGhpcyBmaWxlIGluY29ycG9yYXRlcyB3b3JrIGNvdmVyZWQgYnkgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCi0gKiBwZXJtaXNzaW9uIG5vdGljZToKLSAqICAgIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KLSAqCi0gKiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiAgICBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgotICogICAgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogICAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiAgICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgotICogICAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotI2lmbmRlZiBfX1VTQl9ICi0jZGVmaW5lIF9fVVNCX0gKLQotI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KLSNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KLSNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KLSNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgotI2luY2x1ZGUgImVlcHJvbS5oIgotI2luY2x1ZGUgImh3LmgiCi0jaW5jbHVkZSAiYXI5MTcwLmgiCi0KLSNkZWZpbmUgQVI5MTcwX05VTV9SWF9VUkJTCQkJMTYKLSNkZWZpbmUgQVI5MTcwX05VTV9UWF9VUkJTCQkJOAotCi1zdHJ1Y3QgZmlybXdhcmU7Ci0KLXN0cnVjdCBhcjkxNzBfdXNiIHsKLQlzdHJ1Y3QgYXI5MTcwIGNvbW1vbjsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKLQotCXN0cnVjdCB1c2JfYW5jaG9yIHJ4X3N1Ym1pdHRlZDsKLQlzdHJ1Y3QgdXNiX2FuY2hvciB0eF9wZW5kaW5nOwotCXN0cnVjdCB1c2JfYW5jaG9yIHR4X3N1Ym1pdHRlZDsKLQotCWJvb2wgcmVxX29uZV9zdGFnZV9mdzsKLQotCXNwaW5sb2NrX3QgdHhfdXJiX2xvY2s7Ci0JYXRvbWljX3QgdHhfc3VibWl0dGVkX3VyYnM7Ci0JdW5zaWduZWQgaW50IHR4X3BlbmRpbmdfdXJiczsKLQotCXN0cnVjdCBjb21wbGV0aW9uIGNtZF93YWl0OwotCXN0cnVjdCBjb21wbGV0aW9uIGZpcm13YXJlX2xvYWRpbmdfY29tcGxldGU7Ci0JaW50IHJlYWRsZW47Ci0JdTggKnJlYWRidWY7Ci0KLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmluaXRfdmFsdWVzOwotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmU7Ci19OwotCi0jZW5kaWYgLyogX19VU0JfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aC5oCmluZGV4IGE2YzZhNDYuLjdjZjQzMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoLmgKQEAgLTExOSwxNyArMTE5LDExIEBACiAJdm9pZCAoKndyaXRlKSh2b2lkICosIHUzMiB2YWwsIHUzMiByZWdfb2Zmc2V0KTsKIAl2b2lkICgqZW5hYmxlX3dyaXRlX2J1ZmZlcikodm9pZCAqKTsKIAl2b2lkICgqd3JpdGVfZmx1c2gpICh2b2lkICopOworCXUzMiAoKnJtdykodm9pZCAqLCB1MzIgcmVnX29mZnNldCwgdTMyIHNldCwgdTMyIGNscik7CiB9OwogCiBzdHJ1Y3QgYXRoX2NvbW1vbjsKLQotc3RydWN0IGF0aF9idXNfb3BzIHsKLQllbnVtIGF0aF9idXNfdHlwZSBhdGhfYnVzX3R5cGU7Ci0Jdm9pZCAoKnJlYWRfY2FjaGVzaXplKShzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLCBpbnQgKmNzeik7Ci0JYm9vbCAoKmVlcHJvbV9yZWFkKShzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLCB1MzIgb2ZmLCB1MTYgKmRhdGEpOwotCXZvaWQgKCpidF9jb2V4X3ByZXApKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24pOwotCXZvaWQgKCpleHRuX3N5bmNoX2VuKShzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uKTsKLX07CitzdHJ1Y3QgYXRoX2J1c19vcHM7CiAKIHN0cnVjdCBhdGhfY29tbW9uIHsKIAl2b2lkICphaDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9haGIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9haGIuYwppbmRleCA4MjMyNGU5Li5lYTk5ODI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYWhiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2FoYi5jCkBAIC0xOCw2ICsxOCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9ubDgwMjExLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxhcjIzMXhfcGxhdGZvcm0uaD4KICNpbmNsdWRlICJhdGg1ay5oIgogI2luY2x1ZGUgImRlYnVnLmgiCkBAIC02MiwxMCArNjMsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBhdGg1a19haGJfZWVwcm9tX3JlYWRfbWFjKHN0cnVjdCBhdGg1a19odyAqYWgsIHU4ICptYWMpCit7CisJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGFoLT5haF9zYzsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKHNjLT5kZXYpOworCXN0cnVjdCBhcjIzMXhfYm9hcmRfY29uZmlnICpiY2ZnID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJdTggKmNmZ19tYWM7CisKKwlpZiAodG9fcGxhdGZvcm1fZGV2aWNlKHNjLT5kZXYpLT5pZCA9PSAwKQorCQljZmdfbWFjID0gYmNmZy0+Y29uZmlnLT53bGFuMF9tYWM7CisJZWxzZQorCQljZmdfbWFjID0gYmNmZy0+Y29uZmlnLT53bGFuMV9tYWM7CisKKwltZW1jcHkobWFjLCBjZmdfbWFjLCBFVEhfQUxFTik7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoX2J1c19vcHMgYXRoX2FoYl9idXNfb3BzID0gewogCS5hdGhfYnVzX3R5cGUgPSBBVEhfQUhCLAogCS5yZWFkX2NhY2hlc2l6ZSA9IGF0aDVrX2FoYl9yZWFkX2NhY2hlc2l6ZSwKIAkuZWVwcm9tX3JlYWQgPSBhdGg1a19haGJfZWVwcm9tX3JlYWQsCisJLmVlcHJvbV9yZWFkX21hYyA9IGF0aDVrX2FoYl9lZXByb21fcmVhZF9tYWMsCiB9OwogCiAvKkluaXRpYWxpemF0aW9uKi8KQEAgLTE0Miw2ICsxNjAsMTYgQEAKIAkJZWxzZQogCQkJcmVnIHw9IEFSNUtfQVI1MzEyX0VOQUJMRV9XTEFOMTsKIAkJX19yYXdfd3JpdGVsKHJlZywgKHZvaWQgX19pb21lbSAqKSBBUjVLX0FSNTMxMl9FTkFCTEUpOworCisJCS8qCisJCSAqIE9uIGEgZHVhbC1iYW5kIEFSNTMxMiwgdGhlIG11bHRpYmFuZCByYWRpbyBpcyBvbmx5CisJCSAqIHVzZWQgYXMgcGFzcy10aHJvdWdoLiBEaXNhYmxlIDIgR0h6IHN1cHBvcnQgaW4gdGhlCisJCSAqIGRyaXZlciBmb3IgaXQKKwkJICovCisJCWlmICh0b19wbGF0Zm9ybV9kZXZpY2Uoc2MtPmRldiktPmlkID09IDAgJiYKKwkJICAgIChiY2ZnLT5jb25maWctPmZsYWdzICYgKEJEX1dMQU4wfEJEX1dMQU4xKSkgPT0KKwkJICAgICAoQkRfV0xBTjF8QkRfV0xBTjApKQorCQkJX19zZXRfYml0KEFUSF9TVEFUXzJHX0RJU0FCTEVELCBzYy0+c3RhdHVzKTsKIAl9CiAKIAlyZXQgPSBhdGg1a19pbml0X3NvZnRjKHNjLCAmYXRoX2FoYl9idXNfb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hdGg1ay5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2F0aDVrLmgKaW5kZXggOGEwNmRiZC4uYmI1MDcwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2F0aDVrLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2F0aDVrLmgKQEAgLTIyNCw4ICsyMjQsNyBAQAogCiAvKiBTSUZTICovCiAjZGVmaW5lCUFSNUtfSU5JVF9TSUZTX1RVUkJPCQkJNgotLyogWFhYOiA4IGZyb20gaW5pdHZhbHMgMTAgZnJvbSBzdGFuZGFyZCAqLwotI2RlZmluZQlBUjVLX0lOSVRfU0lGU19ERUZBVUxUX0JHCQk4CisjZGVmaW5lCUFSNUtfSU5JVF9TSUZTX0RFRkFVTFRfQkcJCTEwCiAjZGVmaW5lCUFSNUtfSU5JVF9TSUZTX0RFRkFVTFRfQQkJMTYKICNkZWZpbmUJQVI1S19JTklUX1NJRlNfSEFMRl9SQVRFCQkzMgogI2RlZmluZSBBUjVLX0lOSVRfU0lGU19RVUFSVEVSX1JBVEUJCTY0CkBAIC00NTMsMTIgKzQ1MiwxMCBAQAogCXUxNgl0c19zZXFudW07CiAJdTE2CXRzX3RzdGFtcDsKIAl1OAl0c19zdGF0dXM7Ci0JdTgJdHNfcmF0ZVs0XTsKLQl1OAl0c19yZXRyeVs0XTsKIAl1OAl0c19maW5hbF9pZHg7CisJdTgJdHNfZmluYWxfcmV0cnk7CiAJczgJdHNfcnNzaTsKIAl1OAl0c19zaG9ydHJldHJ5OwotCXU4CXRzX2xvbmdyZXRyeTsKIAl1OAl0c192aXJ0Y29sOwogCXU4CXRzX2FudGVubmE7CiB9OwpAQCAtODc1LDYgKzg3MiwxOSBAQAogCUFSNUtfSU5UX1FUUklHCT0JMHg0MDAwMDAwMCwgLyogTm9uIGNvbW1vbiAqLwogCUFSNUtfSU5UX0dMT0JBTCA9CTB4ODAwMDAwMDAsCiAKKwlBUjVLX0lOVF9UWF9BTEwgPSBBUjVLX0lOVF9UWE9LCisJCXwgQVI1S19JTlRfVFhERVNDCisJCXwgQVI1S19JTlRfVFhFUlIKKwkJfCBBUjVLX0lOVF9UWEVPTAorCQl8IEFSNUtfSU5UX1RYVVJOLAorCisJQVI1S19JTlRfUlhfQUxMID0gQVI1S19JTlRfUlhPSworCQl8IEFSNUtfSU5UX1JYREVTQworCQl8IEFSNUtfSU5UX1JYRVJSCisJCXwgQVI1S19JTlRfUlhOT0ZSTQorCQl8IEFSNUtfSU5UX1JYRU9MCisJCXwgQVI1S19JTlRfUlhPUk4sCisKIAlBUjVLX0lOVF9DT01NT04gID0gQVI1S19JTlRfUlhPSwogCQl8IEFSNUtfSU5UX1JYREVTQwogCQl8IEFSNUtfSU5UX1JYRVJSCkBAIC0xMDU4LDYgKzEwNjgsNyBAQAogCXU4CQkJYWhfY292ZXJhZ2VfY2xhc3M7CiAJYm9vbAkJCWFoX2Fja19iaXRyYXRlX2hpZ2g7CiAJdTgJCQlhaF9id21vZGU7CisJYm9vbAkJCWFoX3Nob3J0X3Nsb3Q7CiAKIAkvKiBBbnRlbm5hIENvbnRyb2wgKi8KIAl1MzIJCQlhaF9hbnRfY3RsW0FSNUtfRUVQUk9NX05fTU9ERVNdW0FSNUtfQU5UX01BWF07CkBAIC0xMTQ0LDYgKzExNTUsMTMgQEAKIAkJc3RydWN0IGF0aDVrX3J4X3N0YXR1cyAqKTsKIH07CiAKK3N0cnVjdCBhdGhfYnVzX29wcyB7CisJZW51bSBhdGhfYnVzX3R5cGUgYXRoX2J1c190eXBlOworCXZvaWQgKCpyZWFkX2NhY2hlc2l6ZSkoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiwgaW50ICpjc3opOworCWJvb2wgKCplZXByb21fcmVhZCkoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiwgdTMyIG9mZiwgdTE2ICpkYXRhKTsKKwlpbnQgKCplZXByb21fcmVhZF9tYWMpKHN0cnVjdCBhdGg1a19odyAqYWgsIHU4ICptYWMpOworfTsKKwogLyoKICAqIFByb3RvdHlwZXMKICAqLwpAQCAtMTIyNywxMyArMTI0NSwxMiBAQAogLyogRUVQUk9NIGFjY2VzcyBmdW5jdGlvbnMgKi8KIGludCBhdGg1a19lZXByb21faW5pdChzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKIHZvaWQgYXRoNWtfZWVwcm9tX2RldGFjaChzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKLWludCBhdGg1a19lZXByb21fcmVhZF9tYWMoc3RydWN0IGF0aDVrX2h3ICphaCwgdTggKm1hYyk7CiAKIAogLyogUHJvdG9jb2wgQ29udHJvbCBVbml0IEZ1bmN0aW9ucyAqLwogLyogSGVscGVycyAqLwogaW50IGF0aDVrX2h3X2dldF9mcmFtZV9kdXJhdGlvbihzdHJ1Y3QgYXRoNWtfaHcgKmFoLAotCQlpbnQgbGVuLCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUpOworCQlpbnQgbGVuLCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUsIGJvb2wgc2hvcnRwcmUpOwogdW5zaWduZWQgaW50IGF0aDVrX2h3X2dldF9kZWZhdWx0X3Nsb3R0aW1lKHN0cnVjdCBhdGg1a19odyAqYWgpOwogdW5zaWduZWQgaW50IGF0aDVrX2h3X2dldF9kZWZhdWx0X3NpZnMoc3RydWN0IGF0aDVrX2h3ICphaCk7CiBleHRlcm4gaW50IGF0aDVrX2h3X3NldF9vcG1vZGUoc3RydWN0IGF0aDVrX2h3ICphaCwgZW51bSBubDgwMjExX2lmdHlwZSBvcG1vZGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2F0dGFjaC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2F0dGFjaC5jCmluZGV4IGJjODI0MDUuLjE1ODg0MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hdHRhY2guYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYXR0YWNoLmMKQEAgLTMxMywxMiArMzEzLDE3IEBACiAJCWdvdG8gZXJyOwogCX0KIAorCWlmICh0ZXN0X2JpdChBVEhfU1RBVF8yR19ESVNBQkxFRCwgc2MtPnN0YXR1cykpIHsKKwkJX19jbGVhcl9iaXQoQVI1S19NT0RFXzExQiwgYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfbW9kZSk7CisJCV9fY2xlYXJfYml0KEFSNUtfTU9ERV8xMUcsIGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX21vZGUpOworCX0KKwogCS8qIENyeXB0byBzZXR0aW5ncyAqLwogCWNvbW1vbi0+a2V5bWF4ID0gKHNjLT5haC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMCA/CiAJCQkgIEFSNUtfS0VZVEFCTEVfU0laRV81MjEwIDogQVI1S19LRVlUQUJMRV9TSVpFXzUyMTEpOwogCiAJaWYgKHNyZXYgPj0gQVI1S19TUkVWX0FSNTIxMl9WNCAmJgotCSAgICAoZWUtPmVlX3ZlcnNpb24gPj0gQVI1S19FRVBST01fVkVSU0lPTl81XzAgJiYKKwkgICAgKGVlLT5lZV92ZXJzaW9uIDwgQVI1S19FRVBST01fVkVSU0lPTl81XzAgfHwKIAkgICAgIUFSNUtfRUVQUk9NX0FFU19ESVMoZWUtPmVlX21pc2M1KSkpCiAJCWNvbW1vbi0+Y3J5cHRfY2FwcyB8PSBBVEhfQ1JZUFRfQ0FQX0NJUEhFUl9BRVNDQ007CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jCmluZGV4IDM0OWE1OTYuLjIyMDQ3NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuYwpAQCAtMTQ0NCw2ICsxNDQ0LDIxIEBACiB9CiAKIHN0YXRpYyB2b2lkCithdGg1a19zZXRfY3VycmVudF9pbWFzayhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQoreworCWVudW0gYXRoNWtfaW50IGltYXNrID0gc2MtPmltYXNrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2MtPmlycWxvY2ssIGZsYWdzKTsKKwlpZiAoc2MtPnJ4X3BlbmRpbmcpCisJCWltYXNrICY9IH5BUjVLX0lOVF9SWF9BTEw7CisJaWYgKHNjLT50eF9wZW5kaW5nKQorCQlpbWFzayAmPSB+QVI1S19JTlRfVFhfQUxMOworCWF0aDVrX2h3X3NldF9pbXIoc2MtPmFoLCBpbWFzayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPmlycWxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQKIGF0aDVrX3Rhc2tsZXRfcngodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBhdGg1a19yeF9zdGF0dXMgcnMgPSB7fTsKQEAgLTE1MDYsNiArMTUyMSw4IEBACiAJfSB3aGlsZSAoYXRoNWtfcnhidWZfc2V0dXAoc2MsIGJmKSA9PSAwKTsKIHVubG9jazoKIAlzcGluX3VubG9jaygmc2MtPnJ4YnVmbG9jayk7CisJc2MtPnJ4X3BlbmRpbmcgPSBmYWxzZTsKKwlhdGg1a19zZXRfY3VycmVudF9pbWFzayhzYyk7CiB9CiAKIApAQCAtMTU3MywyOCArMTU5MCwyOCBAQAogCQkJIHN0cnVjdCBhdGg1a190eHEgKnR4cSwgc3RydWN0IGF0aDVrX3R4X3N0YXR1cyAqdHMpCiB7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOworCXU4IHRyaWVzWzNdOwogCWludCBpOwogCiAJc2MtPnN0YXRzLnR4X2FsbF9jb3VudCsrOwogCXNjLT5zdGF0cy50eF9ieXRlc19jb3VudCArPSBza2ItPmxlbjsKIAlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCisJdHJpZXNbMF0gPSBpbmZvLT5zdGF0dXMucmF0ZXNbMF0uY291bnQ7CisJdHJpZXNbMV0gPSBpbmZvLT5zdGF0dXMucmF0ZXNbMV0uY291bnQ7CisJdHJpZXNbMl0gPSBpbmZvLT5zdGF0dXMucmF0ZXNbMl0uY291bnQ7CisKIAlpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXMoaW5mbyk7Ci0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCisJZm9yIChpID0gMDsgaSA8IHRzLT50c19maW5hbF9pZHg7IGkrKykgewogCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnIgPQogCQkJJmluZm8tPnN0YXR1cy5yYXRlc1tpXTsKIAotCQlpZiAodHMtPnRzX3JhdGVbaV0pIHsKLQkJCXItPmlkeCA9IGF0aDVrX2h3X3RvX2RyaXZlcl9yaXgoc2MsIHRzLT50c19yYXRlW2ldKTsKLQkJCXItPmNvdW50ID0gdHMtPnRzX3JldHJ5W2ldOwotCQl9IGVsc2UgewotCQkJci0+aWR4ID0gLTE7Ci0JCQlyLT5jb3VudCA9IDA7Ci0JCX0KKwkJci0+Y291bnQgPSB0cmllc1tpXTsKIAl9CiAKLQkvKiBjb3VudCB0aGUgc3VjY2Vzc2Z1bCBhdHRlbXB0IGFzIHdlbGwgKi8KLQlpbmZvLT5zdGF0dXMucmF0ZXNbdHMtPnRzX2ZpbmFsX2lkeF0uY291bnQrKzsKKwlpbmZvLT5zdGF0dXMucmF0ZXNbdHMtPnRzX2ZpbmFsX2lkeF0uY291bnQgPSB0cy0+dHNfZmluYWxfcmV0cnk7CisJaW5mby0+c3RhdHVzLnJhdGVzW3RzLT50c19maW5hbF9pZHggKyAxXS5pZHggPSAtMTsKIAogCWlmICh1bmxpa2VseSh0cy0+dHNfc3RhdHVzKSkgewogCQlzYy0+c3RhdHMuYWNrX2ZhaWwrKzsKQEAgLTE2MDksNiArMTYyNiw5IEBACiAJfSBlbHNlIHsKIAkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOwogCQlpbmZvLT5zdGF0dXMuYWNrX3NpZ25hbCA9IHRzLT50c19yc3NpOworCisJCS8qIGNvdW50IHRoZSBzdWNjZXNzZnVsIGF0dGVtcHQgYXMgd2VsbCAqLworCQlpbmZvLT5zdGF0dXMucmF0ZXNbdHMtPnRzX2ZpbmFsX2lkeF0uY291bnQrKzsKIAl9CiAKIAkvKgpAQCAtMTY5MCw2ICsxNzEwLDkgQEAKIAlmb3IgKGk9MDsgaSA8IEFSNUtfTlVNX1RYX1FVRVVFUzsgaSsrKQogCQlpZiAoc2MtPnR4cXNbaV0uc2V0dXAgJiYgKHNjLT5haC0+YWhfdHhxX2lzciAmIEJJVChpKSkpCiAJCQlhdGg1a190eF9wcm9jZXNzcShzYywgJnNjLT50eHFzW2ldKTsKKworCXNjLT50eF9wZW5kaW5nID0gZmFsc2U7CisJYXRoNWtfc2V0X2N1cnJlbnRfaW1hc2soc2MpOwogfQogCiAKQEAgLTIxMTksNiArMjE0MiwyMCBAQAogCSAqIEFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX0NSLCBBUjVLX0NSX1NXSSk7ICovCiB9CiAKK3N0YXRpYyB2b2lkCithdGg1a19zY2hlZHVsZV9yeChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQoreworCXNjLT5yeF9wZW5kaW5nID0gdHJ1ZTsKKwl0YXNrbGV0X3NjaGVkdWxlKCZzYy0+cnh0cSk7Cit9CisKK3N0YXRpYyB2b2lkCithdGg1a19zY2hlZHVsZV90eChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQoreworCXNjLT50eF9wZW5kaW5nID0gdHJ1ZTsKKwl0YXNrbGV0X3NjaGVkdWxlKCZzYy0+dHh0cSk7Cit9CisKIGlycXJldHVybl90CiBhdGg1a19pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKQEAgLTIxNjEsNyArMjE5OCw3IEBACiAJCQkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoc2MtPmh3LCAmc2MtPnJlc2V0X3dvcmspOwogCQkJfQogCQkJZWxzZQotCQkJCXRhc2tsZXRfc2NoZWR1bGUoJnNjLT5yeHRxKTsKKwkJCQlhdGg1a19zY2hlZHVsZV9yeChzYyk7CiAJCX0gZWxzZSB7CiAJCQlpZiAoc3RhdHVzICYgQVI1S19JTlRfU1dCQSkgewogCQkJCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnNjLT5iZWFjb250cSk7CkBAIC0yMTc5LDEwICsyMjE2LDEwIEBACiAJCQkJYXRoNWtfaHdfdXBkYXRlX3R4X3RyaWdsZXZlbChhaCwgdHJ1ZSk7CiAJCQl9CiAJCQlpZiAoc3RhdHVzICYgKEFSNUtfSU5UX1JYT0sgfCBBUjVLX0lOVF9SWEVSUikpCi0JCQkJdGFza2xldF9zY2hlZHVsZSgmc2MtPnJ4dHEpOworCQkJCWF0aDVrX3NjaGVkdWxlX3J4KHNjKTsKIAkJCWlmIChzdGF0dXMgJiAoQVI1S19JTlRfVFhPSyB8IEFSNUtfSU5UX1RYREVTQwogCQkJCQl8IEFSNUtfSU5UX1RYRVJSIHwgQVI1S19JTlRfVFhFT0wpKQotCQkJCXRhc2tsZXRfc2NoZWR1bGUoJnNjLT50eHRxKTsKKwkJCQlhdGg1a19zY2hlZHVsZV90eChzYyk7CiAJCQlpZiAoc3RhdHVzICYgQVI1S19JTlRfQk1JU1MpIHsKIAkJCQkvKiBUT0RPICovCiAJCQl9CkBAIC0yMjAxLDYgKzIyMzgsOSBAQAogCiAJfSB3aGlsZSAoYXRoNWtfaHdfaXNfaW50cl9wZW5kaW5nKGFoKSAmJiAtLWNvdW50ZXIgPiAwKTsKIAorCWlmIChzYy0+cnhfcGVuZGluZyB8fCBzYy0+dHhfcGVuZGluZykKKwkJYXRoNWtfc2V0X2N1cnJlbnRfaW1hc2soc2MpOworCiAJaWYgKHVubGlrZWx5KCFjb3VudGVyKSkKIAkJQVRINUtfV0FSTihzYywgInRvbyBtYW55IGludGVycnVwdHMsIGdpdmluZyB1cCBmb3Igbm93XG4iKTsKIApAQCAtMjM1NCw3ICsyMzk0LDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmc2MtPnJ4YnVmbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnNjLT50eGJ1ZmxvY2spOwogCXNwaW5fbG9ja19pbml0KCZzYy0+YmxvY2spOwotCisJc3Bpbl9sb2NrX2luaXQoJnNjLT5pcnFsb2NrKTsKIAogCS8qIFNldHVwIGludGVycnVwdCBoYW5kbGVyICovCiAJcmV0ID0gcmVxdWVzdF9pcnEoc2MtPmlycSwgYXRoNWtfaW50ciwgSVJRRl9TSEFSRUQsICJhdGgiLCBzYyk7CkBAIC0yNTcyLDYgKzI2MTIsOCBAQAogCiBzdGF0aWMgdm9pZCBzdG9wX3Rhc2tsZXRzKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCiB7CisJc2MtPnJ4X3BlbmRpbmcgPSBmYWxzZTsKKwlzYy0+dHhfcGVuZGluZyA9IGZhbHNlOwogCXRhc2tsZXRfa2lsbCgmc2MtPnJ4dHEpOwogCXRhc2tsZXRfa2lsbCgmc2MtPnR4dHEpOwogCXRhc2tsZXRfa2lsbCgmc2MtPmNhbGliKTsKQEAgLTI4MzgsNyArMjg4MCw3IEBACiAJSU5JVF9XT1JLKCZzYy0+cmVzZXRfd29yaywgYXRoNWtfcmVzZXRfd29yayk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnNjLT50eF9jb21wbGV0ZV93b3JrLCBhdGg1a190eF9jb21wbGV0ZV9wb2xsX3dvcmspOwogCi0JcmV0ID0gYXRoNWtfZWVwcm9tX3JlYWRfbWFjKGFoLCBtYWMpOworCXJldCA9IGF0aDVrX2h3X2NvbW1vbihhaCktPmJ1c19vcHMtPmVlcHJvbV9yZWFkX21hYyhhaCwgbWFjKTsKIAlpZiAocmV0KSB7CiAJCUFUSDVLX0VSUihzYywgInVuYWJsZSB0byByZWFkIGFkZHJlc3MgZnJvbSBFRVBST01cbiIpOwogCQlnb3RvIGVycl9xdWV1ZXM7CkBAIC0yODk4LDcgKzI5NDAsNiBAQAogCSAqIFhYWDogPz8/IGRldGFjaCBhdGg1a19odyA/Pz8KIAkgKiBPdGhlciB0aGFuIHRoYXQsIGl0J3Mgc3RyYWlnaHRmb3J3YXJkLi4uCiAJICovCi0JYXRoNWtfZGVidWdfZmluaXNoX2RldmljZShzYyk7CiAJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoaHcpOwogCWF0aDVrX2Rlc2NfZnJlZShzYyk7CiAJYXRoNWtfdHhxX3JlbGVhc2Uoc2MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmgKaW5kZXggOTc4ZjFmNC4uYjI5NGYzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5oCkBAIC0xOTMsMTIgKzE5MywxMyBAQAogCWRtYV9hZGRyX3QJCWRlc2NfZGFkZHI7CS8qIERNQSAocGh5c2ljYWwpIGFkZHJlc3MgKi8KIAlzaXplX3QJCQlkZXNjX2xlbjsJLyogc2l6ZSBvZiBUWC9SWCBkZXNjcmlwdG9ycyAqLwogCi0JREVDTEFSRV9CSVRNQVAoc3RhdHVzLCA1KTsKKwlERUNMQVJFX0JJVE1BUChzdGF0dXMsIDYpOwogI2RlZmluZSBBVEhfU1RBVF9JTlZBTElECTAJCS8qIGRpc2FibGUgaGFyZHdhcmUgYWNjZXNzZXMgKi8KICNkZWZpbmUgQVRIX1NUQVRfTVJSRVRSWQkxCQkvKiBtdWx0aS1yYXRlIHJldHJ5IHN1cHBvcnQgKi8KICNkZWZpbmUgQVRIX1NUQVRfUFJPTUlTQwkyCiAjZGVmaW5lIEFUSF9TVEFUX0xFRFNPRlQJMwkJLyogZW5hYmxlIExFRCBncGlvIHN0YXR1cyAqLwogI2RlZmluZSBBVEhfU1RBVF9TVEFSVEVECTQJCS8qIG9wZW5lZCAmIGlycXMgZW5hYmxlZCAqLworI2RlZmluZSBBVEhfU1RBVF8yR19ESVNBQkxFRAk1CQkvKiBtdWx0aWJhbmQgcmFkaW8gd2l0aG91dCAyRyAqLwogCiAJdW5zaWduZWQgaW50CQlmaWx0ZXJfZmxhZ3M7CS8qIEhXIGZsYWdzLCBBUjVLX1JYX0ZJTFRFUl8qICovCiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjdXJjaGFuOwkvKiBjdXJyZW50IGgvdyBjaGFubmVsICovCkBAIC0yMDcsNiArMjA4LDEwIEBACiAKIAllbnVtIGF0aDVrX2ludAkJaW1hc2s7CQkvKiBpbnRlcnJ1cHQgbWFzayBjb3B5ICovCiAKKwlzcGlubG9ja190CQlpcnFsb2NrOworCWJvb2wJCQlyeF9wZW5kaW5nOwkvKiByeCB0YXNrbGV0IHBlbmRpbmcgKi8KKwlib29sCQkJdHhfcGVuZGluZzsJLyogdHggdGFza2xldCBwZW5kaW5nICovCisKIAl1OAkJCWxsYWRkcltFVEhfQUxFTl07CiAJdTgJCQlic3NpZG1hc2tbRVRIX0FMRU5dOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvY2Fwcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2NhcHMuYwppbmRleCBmNzdlOGE3Li43ZGQ4OGUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvY2Fwcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9jYXBzLmMKQEAgLTk0LDYgKzk0LDkgQEAKIAkJfQogCX0KIAorCWlmICgoYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gJiAweGYwKSA9PSBBUjVLX1NSRVZfUkFEXzIxMTIpCisJCV9fY2xlYXJfYml0KEFSNUtfTU9ERV8xMUEsIGNhcHMtPmNhcF9tb2RlKTsKKwogCS8qIFNldCBudW1iZXIgb2Ygc3VwcG9ydGVkIFRYIHF1ZXVlcyAqLwogCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMCkKIAkJY2Fwcy0+Y2FwX3F1ZXVlcy5xX3R4X251bSA9IEFSNUtfTlVNX1RYX1FVRVVFU19OT1FDVTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kZWJ1Zy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2RlYnVnLmMKaW5kZXggMDIzMGYzMC4uMGJmNzMxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2RlYnVnLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2RlYnVnLmMKQEAgLTg4OCw2NSArODg4LDM4IEBACiB2b2lkCiBhdGg1a19kZWJ1Z19pbml0X2RldmljZShzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQogeworCXN0cnVjdCBkZW50cnkgKnBoeWRpcjsKKwogCXNjLT5kZWJ1Zy5sZXZlbCA9IGF0aDVrX2RlYnVnOwogCi0Jc2MtPmRlYnVnLmRlYnVnZnNfcGh5ZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJhdGg1ayIsCi0JCQkJc2MtPmh3LT53aXBoeS0+ZGVidWdmc2Rpcik7CisJcGh5ZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJhdGg1ayIsIHNjLT5ody0+d2lwaHktPmRlYnVnZnNkaXIpOworCWlmICghcGh5ZGlyKQorCSAgICByZXR1cm47CiAKLQlzYy0+ZGVidWcuZGVidWdmc19kZWJ1ZyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImRlYnVnIiwKLQkJCQlTX0lXVVNSIHwgU19JUlVTUiwKLQkJCQlzYy0+ZGVidWcuZGVidWdmc19waHlkaXIsIHNjLCAmZm9wc19kZWJ1Zyk7CisJZGVidWdmc19jcmVhdGVfZmlsZSgiZGVidWciLCBTX0lXVVNSIHwgU19JUlVTUiwgcGh5ZGlyLCBzYywKKwkJCSAgICAmZm9wc19kZWJ1Zyk7CiAKLQlzYy0+ZGVidWcuZGVidWdmc19yZWdpc3RlcnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyZWdpc3RlcnMiLCBTX0lSVVNSLAotCQkJCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeWRpciwgc2MsICZmb3BzX3JlZ2lzdGVycyk7CisJZGVidWdmc19jcmVhdGVfZmlsZSgicmVnaXN0ZXJzIiwgU19JUlVTUiwgcGh5ZGlyLCBzYywgJmZvcHNfcmVnaXN0ZXJzKTsKIAotCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX2JlYWNvbiA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImJlYWNvbiIsCi0JCQkJU19JV1VTUiB8IFNfSVJVU1IsCi0JCQkJc2MtPmRlYnVnLmRlYnVnZnNfcGh5ZGlyLCBzYywgJmZvcHNfYmVhY29uKTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJiZWFjb24iLCBTX0lXVVNSIHwgU19JUlVTUiwgcGh5ZGlyLCBzYywKKwkJCSAgICAmZm9wc19iZWFjb24pOwogCi0Jc2MtPmRlYnVnLmRlYnVnZnNfcmVzZXQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyZXNldCIsIFNfSVdVU1IsCi0JCQkJc2MtPmRlYnVnLmRlYnVnZnNfcGh5ZGlyLCBzYywgJmZvcHNfcmVzZXQpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInJlc2V0IiwgU19JV1VTUiwgcGh5ZGlyLCBzYywgJmZvcHNfcmVzZXQpOwogCi0Jc2MtPmRlYnVnLmRlYnVnZnNfYW50ZW5uYSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImFudGVubmEiLAotCQkJCVNfSVdVU1IgfCBTX0lSVVNSLAotCQkJCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeWRpciwgc2MsICZmb3BzX2FudGVubmEpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImFudGVubmEiLCBTX0lXVVNSIHwgU19JUlVTUiwgcGh5ZGlyLCBzYywKKwkJCSAgICAmZm9wc19hbnRlbm5hKTsKIAotCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX21pc2MgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJtaXNjIiwKLQkJCQlTX0lSVVNSLAotCQkJCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeWRpciwgc2MsICZmb3BzX21pc2MpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoIm1pc2MiLCBTX0lSVVNSLCBwaHlkaXIsIHNjLCAmZm9wc19taXNjKTsKIAotCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX2ZyYW1lZXJyb3JzID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZnJhbWVlcnJvcnMiLAotCQkJCVNfSVdVU1IgfCBTX0lSVVNSLAotCQkJCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeWRpciwgc2MsCi0JCQkJJmZvcHNfZnJhbWVlcnJvcnMpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImZyYW1lZXJyb3JzIiwgU19JV1VTUiB8IFNfSVJVU1IsIHBoeWRpciwgc2MsCisJCQkgICAgJmZvcHNfZnJhbWVlcnJvcnMpOwogCi0Jc2MtPmRlYnVnLmRlYnVnZnNfYW5pID0gZGVidWdmc19jcmVhdGVfZmlsZSgiYW5pIiwKLQkJCQlTX0lXVVNSIHwgU19JUlVTUiwKLQkJCQlzYy0+ZGVidWcuZGVidWdmc19waHlkaXIsIHNjLAotCQkJCSZmb3BzX2FuaSk7CisJZGVidWdmc19jcmVhdGVfZmlsZSgiYW5pIiwgU19JV1VTUiB8IFNfSVJVU1IsIHBoeWRpciwgc2MsICZmb3BzX2FuaSk7CiAKLQlzYy0+ZGVidWcuZGVidWdmc19xdWV1ZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInF1ZXVlIiwKLQkJCQlTX0lXVVNSIHwgU19JUlVTUiwKLQkJCQlzYy0+ZGVidWcuZGVidWdmc19waHlkaXIsIHNjLAotCQkJCSZmb3BzX3F1ZXVlKTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJxdWV1ZSIsIFNfSVdVU1IgfCBTX0lSVVNSLCBwaHlkaXIsIHNjLAorCQkJICAgICZmb3BzX3F1ZXVlKTsKIH0KIAotdm9pZAotYXRoNWtfZGVidWdfZmluaXNoX2RldmljZShzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQotewotCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX2RlYnVnKTsKLQlkZWJ1Z2ZzX3JlbW92ZShzYy0+ZGVidWcuZGVidWdmc19yZWdpc3RlcnMpOwotCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX2JlYWNvbik7Ci0JZGVidWdmc19yZW1vdmUoc2MtPmRlYnVnLmRlYnVnZnNfcmVzZXQpOwotCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX2FudGVubmEpOwotCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX21pc2MpOwotCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX2ZyYW1lZXJyb3JzKTsKLQlkZWJ1Z2ZzX3JlbW92ZShzYy0+ZGVidWcuZGVidWdmc19hbmkpOwotCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3F1ZXVlKTsKLQlkZWJ1Z2ZzX3JlbW92ZShzYy0+ZGVidWcuZGVidWdmc19waHlkaXIpOwotfQotCi0KIC8qIGZ1bmN0aW9ucyB1c2VkIGluIG90aGVyIHBsYWNlcyAqLwogCiB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZGVidWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kZWJ1Zy5oCmluZGV4IGIwMzU1YWUuLjE5M2RkMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kZWJ1Zy5oCkBAIC02OCwxNyArNjgsNiBAQAogCiBzdHJ1Y3QgYXRoNWtfZGJnX2luZm8gewogCXVuc2lnbmVkIGludAkJbGV2ZWw7CQkvKiBkZWJ1ZyBsZXZlbCAqLwotCS8qIGRlYnVnZnMgZW50cmllcyAqLwotCXN0cnVjdCBkZW50cnkJCSpkZWJ1Z2ZzX3BoeWRpcjsKLQlzdHJ1Y3QgZGVudHJ5CQkqZGVidWdmc19kZWJ1ZzsKLQlzdHJ1Y3QgZGVudHJ5CQkqZGVidWdmc19yZWdpc3RlcnM7Ci0Jc3RydWN0IGRlbnRyeQkJKmRlYnVnZnNfYmVhY29uOwotCXN0cnVjdCBkZW50cnkJCSpkZWJ1Z2ZzX3Jlc2V0OwotCXN0cnVjdCBkZW50cnkJCSpkZWJ1Z2ZzX2FudGVubmE7Ci0Jc3RydWN0IGRlbnRyeQkJKmRlYnVnZnNfbWlzYzsKLQlzdHJ1Y3QgZGVudHJ5CQkqZGVidWdmc19mcmFtZWVycm9yczsKLQlzdHJ1Y3QgZGVudHJ5CQkqZGVidWdmc19hbmk7Ci0Jc3RydWN0IGRlbnRyeQkJKmRlYnVnZnNfcXVldWU7CiB9OwogCiAvKioKQEAgLTE0MSw5ICsxMzAsNiBAQAogYXRoNWtfZGVidWdfaW5pdF9kZXZpY2Uoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7CiAKIHZvaWQKLWF0aDVrX2RlYnVnX2ZpbmlzaF9kZXZpY2Uoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7Ci0KLXZvaWQKIGF0aDVrX2RlYnVnX3ByaW50cnhidWZmcyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKIAogdm9pZApAQCAtMTY3LDkgKzE1Myw2IEBACiBhdGg1a19kZWJ1Z19pbml0X2RldmljZShzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKSB7fQogCiBzdGF0aWMgaW5saW5lIHZvaWQKLWF0aDVrX2RlYnVnX2ZpbmlzaF9kZXZpY2Uoc3RydWN0IGF0aDVrX3NvZnRjICpzYykge30KLQotc3RhdGljIGlubGluZSB2b2lkCiBhdGg1a19kZWJ1Z19wcmludHJ4YnVmZnMoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgc3RydWN0IGF0aDVrX2h3ICphaCkge30KIAogc3RhdGljIGlubGluZSB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZGVzYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Rlc2MuYwppbmRleCBhOGZjYzk0Li42MjE3MmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZGVzYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kZXNjLmMKQEAgLTE4NSw2ICsxODUsMTIgQEAKIAlzdHJ1Y3QgYXRoNWtfaHdfNHdfdHhfY3RsICp0eF9jdGw7CiAJdW5zaWduZWQgaW50IGZyYW1lX2xlbjsKIAorCS8qCisJICogVXNlIGxvY2FsIHZhcmlhYmxlcyBmb3IgdGhlc2UgdG8gcmVkdWNlIGxvYWQvc3RvcmUgYWNjZXNzIG9uCisJICogdW5jYWNoZWQgbWVtb3J5CisJICovCisJdTMyIHR4Y3RsMCA9IDAsIHR4Y3RsMSA9IDAsIHR4Y3RsMiA9IDAsIHR4Y3RsMyA9IDA7CisKIAl0eF9jdGwgPSAmZGVzYy0+dWQuZHNfdHg1MjEyLnR4X2N0bDsKIAogCS8qCkBAIC0yMDgsOCArMjE0LDkgQEAKIAlpZiAodHhfcG93ZXIgPiBBUjVLX1RVTkVfTUFYX1RYUE9XRVIpCiAJCXR4X3Bvd2VyID0gQVI1S19UVU5FX01BWF9UWFBPV0VSOwogCi0JLyogQ2xlYXIgZGVzY3JpcHRvciAqLwotCW1lbXNldCgmZGVzYy0+dWQuZHNfdHg1MjEyLCAwLCBzaXplb2Yoc3RydWN0IGF0aDVrX2h3XzUyMTJfdHhfZGVzYykpOworCS8qIENsZWFyIGRlc2NyaXB0b3Igc3RhdHVzIGFyZWEgKi8KKwltZW1zZXQoJmRlc2MtPnVkLmRzX3R4NTIxMi50eF9zdGF0LCAwLAorCSAgICAgICBzaXplb2YoZGVzYy0+dWQuZHNfdHg1MjEyLnR4X3N0YXQpKTsKIAogCS8qIFNldHVwIGNvbnRyb2wgZGVzY3JpcHRvciAqLwogCkBAIC0yMjEsNyArMjI4LDcgQEAKIAlpZiAoZnJhbWVfbGVuICYgfkFSNUtfNFdfVFhfREVTQ19DVEwwX0ZSQU1FX0xFTikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQl0eF9jdGwtPnR4X2NvbnRyb2xfMCA9IGZyYW1lX2xlbiAmIEFSNUtfNFdfVFhfREVTQ19DVEwwX0ZSQU1FX0xFTjsKKwl0eGN0bDAgPSBmcmFtZV9sZW4gJiBBUjVLXzRXX1RYX0RFU0NfQ1RMMF9GUkFNRV9MRU47CiAKIAkvKiBWZXJpZnkgYW5kIHNldCBidWZmZXIgbGVuZ3RoICovCiAKQEAgLTIzMiwyMSArMjM5LDE3IEBACiAJaWYgKHBrdF9sZW4gJiB+QVI1S180V19UWF9ERVNDX0NUTDFfQlVGX0xFTikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQl0eF9jdGwtPnR4X2NvbnRyb2xfMSA9IHBrdF9sZW4gJiBBUjVLXzRXX1RYX0RFU0NfQ1RMMV9CVUZfTEVOOworCXR4Y3RsMSA9IHBrdF9sZW4gJiBBUjVLXzRXX1RYX0RFU0NfQ1RMMV9CVUZfTEVOOwogCi0JdHhfY3RsLT50eF9jb250cm9sXzAgfD0KLQkJQVI1S19SRUdfU00odHhfcG93ZXIsIEFSNUtfNFdfVFhfREVTQ19DVEwwX1hNSVRfUE9XRVIpIHwKLQkJQVI1S19SRUdfU00oYW50ZW5uYV9tb2RlLCBBUjVLXzRXX1RYX0RFU0NfQ1RMMF9BTlRfTU9ERV9YTUlUKTsKLQl0eF9jdGwtPnR4X2NvbnRyb2xfMSB8PSBBUjVLX1JFR19TTSh0eXBlLAotCQkJCQlBUjVLXzRXX1RYX0RFU0NfQ1RMMV9GUkFNRV9UWVBFKTsKLQl0eF9jdGwtPnR4X2NvbnRyb2xfMiA9IEFSNUtfUkVHX1NNKHR4X3RyaWVzMCwKLQkJCQkJQVI1S180V19UWF9ERVNDX0NUTDJfWE1JVF9UUklFUzApOwotCXR4X2N0bC0+dHhfY29udHJvbF8zID0gdHhfcmF0ZTAgJiBBUjVLXzRXX1RYX0RFU0NfQ1RMM19YTUlUX1JBVEUwOworCXR4Y3RsMCB8PSBBUjVLX1JFR19TTSh0eF9wb3dlciwgQVI1S180V19UWF9ERVNDX0NUTDBfWE1JVF9QT1dFUikgfAorCQkgIEFSNUtfUkVHX1NNKGFudGVubmFfbW9kZSwgQVI1S180V19UWF9ERVNDX0NUTDBfQU5UX01PREVfWE1JVCk7CisJdHhjdGwxIHw9IEFSNUtfUkVHX1NNKHR5cGUsIEFSNUtfNFdfVFhfREVTQ19DVEwxX0ZSQU1FX1RZUEUpOworCXR4Y3RsMiA9IEFSNUtfUkVHX1NNKHR4X3RyaWVzMCwgQVI1S180V19UWF9ERVNDX0NUTDJfWE1JVF9UUklFUzApOworCXR4Y3RsMyA9IHR4X3JhdGUwICYgQVI1S180V19UWF9ERVNDX0NUTDNfWE1JVF9SQVRFMDsKIAogI2RlZmluZSBfVFhfRkxBR1MoX2MsIF9mbGFnKQkJCQkJXAogCWlmIChmbGFncyAmIEFSNUtfVFhERVNDXyMjX2ZsYWcpIHsJCQlcCi0JCXR4X2N0bC0+dHhfY29udHJvbF8jI19jIHw9CQkJXAotCQkJQVI1S180V19UWF9ERVNDX0NUTCMjX2MjI18jI19mbGFnOwlcCisJCXR4Y3RsIyNfYyB8PSBBUjVLXzRXX1RYX0RFU0NfQ1RMIyNfYyMjXyMjX2ZsYWc7CVwKIAl9CiAKIAlfVFhfRkxBR1MoMCwgQ0xSRE1BU0spOwpAQCAtMjYyLDggKzI2NSw4IEBACiAJICogV0VQIGNyYXAKIAkgKi8KIAlpZiAoa2V5X2luZGV4ICE9IEFSNUtfVFhLRVlJWF9JTlZBTElEKSB7Ci0JCXR4X2N0bC0+dHhfY29udHJvbF8wIHw9IEFSNUtfNFdfVFhfREVTQ19DVEwwX0VOQ1JZUFRfS0VZX1ZBTElEOwotCQl0eF9jdGwtPnR4X2NvbnRyb2xfMSB8PSBBUjVLX1JFR19TTShrZXlfaW5kZXgsCisJCXR4Y3RsMCB8PSBBUjVLXzRXX1RYX0RFU0NfQ1RMMF9FTkNSWVBUX0tFWV9WQUxJRDsKKwkJdHhjdGwxIHw9IEFSNUtfUkVHX1NNKGtleV9pbmRleCwKIAkJCQlBUjVLXzRXX1RYX0RFU0NfQ1RMMV9FTkNSWVBUX0tFWV9JRFgpOwogCX0KIApAQCAtMjc0LDEyICsyNzcsMTYgQEAKIAkJaWYgKChmbGFncyAmIEFSNUtfVFhERVNDX1JUU0VOQSkgJiYKIAkJCQkoZmxhZ3MgJiBBUjVLX1RYREVTQ19DVFNFTkEpKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXR4X2N0bC0+dHhfY29udHJvbF8yIHw9IHJ0c2N0c19kdXJhdGlvbiAmCi0JCQkJQVI1S180V19UWF9ERVNDX0NUTDJfUlRTX0RVUkFUSU9OOwotCQl0eF9jdGwtPnR4X2NvbnRyb2xfMyB8PSBBUjVLX1JFR19TTShydHNjdHNfcmF0ZSwKKwkJdHhjdGwyIHw9IHJ0c2N0c19kdXJhdGlvbiAmIEFSNUtfNFdfVFhfREVTQ19DVEwyX1JUU19EVVJBVElPTjsKKwkJdHhjdGwzIHw9IEFSNUtfUkVHX1NNKHJ0c2N0c19yYXRlLAogCQkJCUFSNUtfNFdfVFhfREVTQ19DVEwzX1JUU19DVFNfUkFURSk7CiAJfQogCisJdHhfY3RsLT50eF9jb250cm9sXzAgPSB0eGN0bDA7CisJdHhfY3RsLT50eF9jb250cm9sXzEgPSB0eGN0bDE7CisJdHhfY3RsLT50eF9jb250cm9sXzIgPSB0eGN0bDI7CisJdHhfY3RsLT50eF9jb250cm9sXzMgPSB0eGN0bDM7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzY0LDcgKzM3MSw3IEBACiAJCUFSNUtfREVTQ19UWF9TVEFUVVMwX1NFTkRfVElNRVNUQU1QKTsKIAl0cy0+dHNfc2hvcnRyZXRyeSA9IEFSNUtfUkVHX01TKHR4X3N0YXR1cy0+dHhfc3RhdHVzXzAsCiAJCUFSNUtfREVTQ19UWF9TVEFUVVMwX1NIT1JUX1JFVFJZX0NPVU5UKTsKLQl0cy0+dHNfbG9uZ3JldHJ5ID0gQVI1S19SRUdfTVModHhfc3RhdHVzLT50eF9zdGF0dXNfMCwKKwl0cy0+dHNfZmluYWxfcmV0cnkgPSBBUjVLX1JFR19NUyh0eF9zdGF0dXMtPnR4X3N0YXR1c18wLAogCQlBUjVLX0RFU0NfVFhfU1RBVFVTMF9MT05HX1JFVFJZX0NPVU5UKTsKIAkvKlRPRE86IHRzLT50c192aXJ0Y29sICsgdGVzdCovCiAJdHMtPnRzX3NlcW51bSA9IEFSNUtfUkVHX01TKHR4X3N0YXR1cy0+dHhfc3RhdHVzXzEsCkBAIC0zNzMsOSArMzgwLDYgQEAKIAkJQVI1S19ERVNDX1RYX1NUQVRVUzFfQUNLX1NJR19TVFJFTkdUSCk7CiAJdHMtPnRzX2FudGVubmEgPSAxOwogCXRzLT50c19zdGF0dXMgPSAwOwotCXRzLT50c19yYXRlWzBdID0gQVI1S19SRUdfTVModHhfY3RsLT50eF9jb250cm9sXzAsCi0JCUFSNUtfMldfVFhfREVTQ19DVEwwX1hNSVRfUkFURSk7Ci0JdHMtPnRzX3JldHJ5WzBdID0gdHMtPnRzX2xvbmdyZXRyeTsKIAl0cy0+dHNfZmluYWxfaWR4ID0gMDsKIAogCWlmICghKHR4X3N0YXR1cy0+dHhfc3RhdHVzXzAgJiBBUjVLX0RFU0NfVFhfU1RBVFVTMF9GUkFNRV9YTUlUX09LKSkgewpAQCAtNDAxLDgxICs0MDUsNDggQEAKIHsKIAlzdHJ1Y3QgYXRoNWtfaHdfNHdfdHhfY3RsICp0eF9jdGw7CiAJc3RydWN0IGF0aDVrX2h3X3R4X3N0YXR1cyAqdHhfc3RhdHVzOworCXUzMiB0eHN0YXQwLCB0eHN0YXQxOwogCiAJdHhfY3RsID0gJmRlc2MtPnVkLmRzX3R4NTIxMi50eF9jdGw7CiAJdHhfc3RhdHVzID0gJmRlc2MtPnVkLmRzX3R4NTIxMi50eF9zdGF0OwogCisJdHhzdGF0MSA9IEFDQ0VTU19PTkNFKHR4X3N0YXR1cy0+dHhfc3RhdHVzXzEpOworCiAJLyogTm8gZnJhbWUgaGFzIGJlZW4gc2VuZCBvciBlcnJvciAqLwotCWlmICh1bmxpa2VseSghKHR4X3N0YXR1cy0+dHhfc3RhdHVzXzEgJiBBUjVLX0RFU0NfVFhfU1RBVFVTMV9ET05FKSkpCisJaWYgKHVubGlrZWx5KCEodHhzdGF0MSAmIEFSNUtfREVTQ19UWF9TVEFUVVMxX0RPTkUpKSkKIAkJcmV0dXJuIC1FSU5QUk9HUkVTUzsKIAorCXR4c3RhdDAgPSBBQ0NFU1NfT05DRSh0eF9zdGF0dXMtPnR4X3N0YXR1c18wKTsKKwogCS8qCiAJICogR2V0IGRlc2NyaXB0b3Igc3RhdHVzCiAJICovCi0JdHMtPnRzX3RzdGFtcCA9IEFSNUtfUkVHX01TKHR4X3N0YXR1cy0+dHhfc3RhdHVzXzAsCisJdHMtPnRzX3RzdGFtcCA9IEFSNUtfUkVHX01TKHR4c3RhdDAsCiAJCUFSNUtfREVTQ19UWF9TVEFUVVMwX1NFTkRfVElNRVNUQU1QKTsKLQl0cy0+dHNfc2hvcnRyZXRyeSA9IEFSNUtfUkVHX01TKHR4X3N0YXR1cy0+dHhfc3RhdHVzXzAsCisJdHMtPnRzX3Nob3J0cmV0cnkgPSBBUjVLX1JFR19NUyh0eHN0YXQwLAogCQlBUjVLX0RFU0NfVFhfU1RBVFVTMF9TSE9SVF9SRVRSWV9DT1VOVCk7Ci0JdHMtPnRzX2xvbmdyZXRyeSA9IEFSNUtfUkVHX01TKHR4X3N0YXR1cy0+dHhfc3RhdHVzXzAsCisJdHMtPnRzX2ZpbmFsX3JldHJ5ID0gQVI1S19SRUdfTVModHhzdGF0MCwKIAkJQVI1S19ERVNDX1RYX1NUQVRVUzBfTE9OR19SRVRSWV9DT1VOVCk7Ci0JdHMtPnRzX3NlcW51bSA9IEFSNUtfUkVHX01TKHR4X3N0YXR1cy0+dHhfc3RhdHVzXzEsCisJdHMtPnRzX3NlcW51bSA9IEFSNUtfUkVHX01TKHR4c3RhdDEsCiAJCUFSNUtfREVTQ19UWF9TVEFUVVMxX1NFUV9OVU0pOwotCXRzLT50c19yc3NpID0gQVI1S19SRUdfTVModHhfc3RhdHVzLT50eF9zdGF0dXNfMSwKKwl0cy0+dHNfcnNzaSA9IEFSNUtfUkVHX01TKHR4c3RhdDEsCiAJCUFSNUtfREVTQ19UWF9TVEFUVVMxX0FDS19TSUdfU1RSRU5HVEgpOwotCXRzLT50c19hbnRlbm5hID0gKHR4X3N0YXR1cy0+dHhfc3RhdHVzXzEgJgorCXRzLT50c19hbnRlbm5hID0gKHR4c3RhdDEgJgogCQlBUjVLX0RFU0NfVFhfU1RBVFVTMV9YTUlUX0FOVEVOTkFfNTIxMikgPyAyIDogMTsKIAl0cy0+dHNfc3RhdHVzID0gMDsKIAotCXRzLT50c19maW5hbF9pZHggPSBBUjVLX1JFR19NUyh0eF9zdGF0dXMtPnR4X3N0YXR1c18xLAorCXRzLT50c19maW5hbF9pZHggPSBBUjVLX1JFR19NUyh0eHN0YXQxLAogCQkJQVI1S19ERVNDX1RYX1NUQVRVUzFfRklOQUxfVFNfSVhfNTIxMik7CiAKLQkvKiBUaGUgbG9uZ3JldHJ5IGNvdW50ZXIgaGFzIHRoZSBudW1iZXIgb2YgdW4tYWNrZWQgcmV0cmllcwotCSAqIGZvciB0aGUgZmluYWwgcmF0ZS4gVG8gZ2V0IHRoZSB0b3RhbCBudW1iZXIgb2YgcmV0cmllcwotCSAqIHdlIGhhdmUgdG8gYWRkIHRoZSByZXRyeSBjb3VudGVycyBmb3IgdGhlIG90aGVyIHJhdGVzCi0JICogYXMgd2VsbAotCSAqLwotCXRzLT50c19yZXRyeVt0cy0+dHNfZmluYWxfaWR4XSA9IHRzLT50c19sb25ncmV0cnk7Ci0Jc3dpdGNoICh0cy0+dHNfZmluYWxfaWR4KSB7Ci0JY2FzZSAzOgotCQl0cy0+dHNfcmF0ZVszXSA9IEFSNUtfUkVHX01TKHR4X2N0bC0+dHhfY29udHJvbF8zLAotCQkJQVI1S180V19UWF9ERVNDX0NUTDNfWE1JVF9SQVRFMyk7Ci0KLQkJdHMtPnRzX3JldHJ5WzJdID0gQVI1S19SRUdfTVModHhfY3RsLT50eF9jb250cm9sXzIsCi0JCQlBUjVLXzRXX1RYX0RFU0NfQ1RMMl9YTUlUX1RSSUVTMik7Ci0JCXRzLT50c19sb25ncmV0cnkgKz0gdHMtPnRzX3JldHJ5WzJdOwotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQljYXNlIDI6Ci0JCXRzLT50c19yYXRlWzJdID0gQVI1S19SRUdfTVModHhfY3RsLT50eF9jb250cm9sXzMsCi0JCQlBUjVLXzRXX1RYX0RFU0NfQ1RMM19YTUlUX1JBVEUyKTsKLQotCQl0cy0+dHNfcmV0cnlbMV0gPSBBUjVLX1JFR19NUyh0eF9jdGwtPnR4X2NvbnRyb2xfMiwKLQkJCUFSNUtfNFdfVFhfREVTQ19DVEwyX1hNSVRfVFJJRVMxKTsKLQkJdHMtPnRzX2xvbmdyZXRyeSArPSB0cy0+dHNfcmV0cnlbMV07Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2UgMToKLQkJdHMtPnRzX3JhdGVbMV0gPSBBUjVLX1JFR19NUyh0eF9jdGwtPnR4X2NvbnRyb2xfMywKLQkJCUFSNUtfNFdfVFhfREVTQ19DVEwzX1hNSVRfUkFURTEpOwotCi0JCXRzLT50c19yZXRyeVswXSA9IEFSNUtfUkVHX01TKHR4X2N0bC0+dHhfY29udHJvbF8yLAotCQkJQVI1S180V19UWF9ERVNDX0NUTDJfWE1JVF9UUklFUzEpOwotCQl0cy0+dHNfbG9uZ3JldHJ5ICs9IHRzLT50c19yZXRyeVswXTsKLQkJLyogZmFsbCB0aHJvdWdoICovCi0JY2FzZSAwOgotCQl0cy0+dHNfcmF0ZVswXSA9IHR4X2N0bC0+dHhfY29udHJvbF8zICYKLQkJCUFSNUtfNFdfVFhfREVTQ19DVEwzX1hNSVRfUkFURTA7Ci0JCWJyZWFrOwotCX0KLQogCS8qIFRYIGVycm9yICovCi0JaWYgKCEodHhfc3RhdHVzLT50eF9zdGF0dXNfMCAmIEFSNUtfREVTQ19UWF9TVEFUVVMwX0ZSQU1FX1hNSVRfT0spKSB7Ci0JCWlmICh0eF9zdGF0dXMtPnR4X3N0YXR1c18wICYKLQkJCQlBUjVLX0RFU0NfVFhfU1RBVFVTMF9FWENFU1NJVkVfUkVUUklFUykKKwlpZiAoISh0eHN0YXQwICYgQVI1S19ERVNDX1RYX1NUQVRVUzBfRlJBTUVfWE1JVF9PSykpIHsKKwkJaWYgKHR4c3RhdDAgJiBBUjVLX0RFU0NfVFhfU1RBVFVTMF9FWENFU1NJVkVfUkVUUklFUykKIAkJCXRzLT50c19zdGF0dXMgfD0gQVI1S19UWEVSUl9YUkVUUlk7CiAKLQkJaWYgKHR4X3N0YXR1cy0+dHhfc3RhdHVzXzAgJiBBUjVLX0RFU0NfVFhfU1RBVFVTMF9GSUZPX1VOREVSUlVOKQorCQlpZiAodHhzdGF0MCAmIEFSNUtfREVTQ19UWF9TVEFUVVMwX0ZJRk9fVU5ERVJSVU4pCiAJCQl0cy0+dHNfc3RhdHVzIHw9IEFSNUtfVFhFUlJfRklGTzsKIAotCQlpZiAodHhfc3RhdHVzLT50eF9zdGF0dXNfMCAmIEFSNUtfREVTQ19UWF9TVEFUVVMwX0ZJTFRFUkVEKQorCQlpZiAodHhzdGF0MCAmIEFSNUtfREVTQ19UWF9TVEFUVVMwX0ZJTFRFUkVEKQogCQkJdHMtPnRzX3N0YXR1cyB8PSBBUjVLX1RYRVJSX0ZJTFQ7CiAJfQogCkBAIC02MDksMzcgKzU4MCwzNyBAQAogCQkJCQlzdHJ1Y3QgYXRoNWtfcnhfc3RhdHVzICpycykKIHsKIAlzdHJ1Y3QgYXRoNWtfaHdfcnhfc3RhdHVzICpyeF9zdGF0dXM7CisJdTMyIHJ4c3RhdDAsIHJ4c3RhdDE7CiAKIAlyeF9zdGF0dXMgPSAmZGVzYy0+dWQuZHNfcngucnhfc3RhdDsKKwlyeHN0YXQxID0gQUNDRVNTX09OQ0Uocnhfc3RhdHVzLT5yeF9zdGF0dXNfMSk7CiAKIAkvKiBObyBmcmFtZSByZWNlaXZlZCAvIG5vdCByZWFkeSAqLwotCWlmICh1bmxpa2VseSghKHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzEgJgotCQkJCUFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzFfRE9ORSkpKQorCWlmICh1bmxpa2VseSghKHJ4c3RhdDEgJiBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX0RPTkUpKSkKIAkJcmV0dXJuIC1FSU5QUk9HUkVTUzsKIAogCW1lbXNldChycywgMCwgc2l6ZW9mKHN0cnVjdCBhdGg1a19yeF9zdGF0dXMpKTsKKwlyeHN0YXQwID0gQUNDRVNTX09OQ0Uocnhfc3RhdHVzLT5yeF9zdGF0dXNfMCk7CiAKIAkvKgogCSAqIEZyYW1lIHJlY2VpdmUgc3RhdHVzCiAJICovCi0JcnMtPnJzX2RhdGFsZW4gPSByeF9zdGF0dXMtPnJ4X3N0YXR1c18wICYKLQkJQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMF9EQVRBX0xFTjsKLQlycy0+cnNfcnNzaSA9IEFSNUtfUkVHX01TKHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzAsCisJcnMtPnJzX2RhdGFsZW4gPSByeHN0YXQwICYgQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMF9EQVRBX0xFTjsKKwlycy0+cnNfcnNzaSA9IEFSNUtfUkVHX01TKHJ4c3RhdDAsCiAJCUFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzBfUkVDRUlWRV9TSUdOQUwpOwotCXJzLT5yc19yYXRlID0gQVI1S19SRUdfTVMocnhfc3RhdHVzLT5yeF9zdGF0dXNfMCwKKwlycy0+cnNfcmF0ZSA9IEFSNUtfUkVHX01TKHJ4c3RhdDAsCiAJCUFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzBfUkVDRUlWRV9SQVRFKTsKLQlycy0+cnNfYW50ZW5uYSA9IEFSNUtfUkVHX01TKHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzAsCisJcnMtPnJzX2FudGVubmEgPSBBUjVLX1JFR19NUyhyeHN0YXQwLAogCQlBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMwX1JFQ0VJVkVfQU5URU5OQSk7Ci0JcnMtPnJzX21vcmUgPSAhIShyeF9zdGF0dXMtPnJ4X3N0YXR1c18wICYKLQkJQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMF9NT1JFKTsKLQlycy0+cnNfdHN0YW1wID0gQVI1S19SRUdfTVMocnhfc3RhdHVzLT5yeF9zdGF0dXNfMSwKKwlycy0+cnNfbW9yZSA9ICEhKHJ4c3RhdDAgJiBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMwX01PUkUpOworCXJzLT5yc190c3RhbXAgPSBBUjVLX1JFR19NUyhyeHN0YXQxLAogCQlBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX1JFQ0VJVkVfVElNRVNUQU1QKTsKIAogCS8qCiAJICogS2V5IHRhYmxlIHN0YXR1cwogCSAqLwotCWlmIChyeF9zdGF0dXMtPnJ4X3N0YXR1c18xICYgQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMV9LRVlfSU5ERVhfVkFMSUQpCi0JCXJzLT5yc19rZXlpeCA9IEFSNUtfUkVHX01TKHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzEsCisJaWYgKHJ4c3RhdDEgJiBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX0tFWV9JTkRFWF9WQUxJRCkKKwkJcnMtPnJzX2tleWl4ID0gQVI1S19SRUdfTVMocnhzdGF0MSwKIAkJCQkJICAgQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMV9LRVlfSU5ERVgpOwogCWVsc2UKIAkJcnMtPnJzX2tleWl4ID0gQVI1S19SWEtFWUlYX0lOVkFMSUQ7CkBAIC02NDcsMjcgKzYxOCwyMiBAQAogCS8qCiAJICogUmVjZWl2ZS9kZXNjcmlwdG9yIGVycm9ycwogCSAqLwotCWlmICghKHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzEgJgotCSAgICBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX0ZSQU1FX1JFQ0VJVkVfT0spKSB7Ci0JCWlmIChyeF9zdGF0dXMtPnJ4X3N0YXR1c18xICYKLQkJCQlBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX0NSQ19FUlJPUikKKwlpZiAoIShyeHN0YXQxICYgQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMV9GUkFNRV9SRUNFSVZFX09LKSkgeworCQlpZiAocnhzdGF0MSAmIEFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzFfQ1JDX0VSUk9SKQogCQkJcnMtPnJzX3N0YXR1cyB8PSBBUjVLX1JYRVJSX0NSQzsKIAotCQlpZiAocnhfc3RhdHVzLT5yeF9zdGF0dXNfMSAmCi0JCQkJQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMV9QSFlfRVJST1IpIHsKKwkJaWYgKHJ4c3RhdDEgJiBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX1BIWV9FUlJPUikgewogCQkJcnMtPnJzX3N0YXR1cyB8PSBBUjVLX1JYRVJSX1BIWTsKLQkJCXJzLT5yc19waHllcnIgPSBBUjVLX1JFR19NUyhyeF9zdGF0dXMtPnJ4X3N0YXR1c18xLAorCQkJcnMtPnJzX3BoeWVyciA9IEFSNUtfUkVHX01TKHJ4c3RhdDEsCiAJCQkJQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMV9QSFlfRVJST1JfQ09ERSk7CiAJCQlpZiAoIWFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2hhc19waHllcnJfY291bnRlcnMpCiAJCQkJYXRoNWtfYW5pX3BoeV9lcnJvcl9yZXBvcnQoYWgsIHJzLT5yc19waHllcnIpOwogCQl9CiAKLQkJaWYgKHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzEgJgotCQkJCUFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzFfREVDUllQVF9DUkNfRVJST1IpCisJCWlmIChyeHN0YXQxICYgQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMV9ERUNSWVBUX0NSQ19FUlJPUikKIAkJCXJzLT5yc19zdGF0dXMgfD0gQVI1S19SWEVSUl9ERUNSWVBUOwogCi0JCWlmIChyeF9zdGF0dXMtPnJ4X3N0YXR1c18xICYKLQkJCQlBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX01JQ19FUlJPUikKKwkJaWYgKHJ4c3RhdDEgJiBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX01JQ19FUlJPUikKIAkJCXJzLT5yc19zdGF0dXMgfD0gQVI1S19SWEVSUl9NSUM7CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2VlcHJvbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2VlcHJvbS5jCmluZGV4IGVmYjY3MmMuLjFmZWY4NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9lZXByb20uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZWVwcm9tLmMKQEAgLTY2MCw2ICs2NjAsNTMgQEAKIAkJdnBbaV0gPSAoaXBbaV0gKiBtYXggKyAoMTAwIC0gaXBbaV0pICogbWluKSAvIDEwMDsKIH0KIAorc3RhdGljIGludAorYXRoNWtfZWVwcm9tX2ZyZWVfcGNhbF9pbmZvKHN0cnVjdCBhdGg1a19odyAqYWgsIGludCBtb2RlKQoreworCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOworCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mbyAqY2hpbmZvOworCXU4IHBpZXIsIHBkZzsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQVI1S19FRVBST01fTU9ERV8xMUE6CisJCWlmICghQVI1S19FRVBST01fSERSXzExQShlZS0+ZWVfaGVhZGVyKSkKKwkJCXJldHVybiAwOworCQljaGluZm8gPSBlZS0+ZWVfcHdyX2NhbF9hOworCQlicmVhazsKKwljYXNlIEFSNUtfRUVQUk9NX01PREVfMTFCOgorCQlpZiAoIUFSNUtfRUVQUk9NX0hEUl8xMUIoZWUtPmVlX2hlYWRlcikpCisJCQlyZXR1cm4gMDsKKwkJY2hpbmZvID0gZWUtPmVlX3B3cl9jYWxfYjsKKwkJYnJlYWs7CisJY2FzZSBBUjVLX0VFUFJPTV9NT0RFXzExRzoKKwkJaWYgKCFBUjVLX0VFUFJPTV9IRFJfMTFHKGVlLT5lZV9oZWFkZXIpKQorCQkJcmV0dXJuIDA7CisJCWNoaW5mbyA9IGVlLT5lZV9wd3JfY2FsX2c7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZvciAocGllciA9IDA7IHBpZXIgPCBlZS0+ZWVfbl9waWVyc1ttb2RlXTsgcGllcisrKSB7CisJCWlmICghY2hpbmZvW3BpZXJdLnBkX2N1cnZlcykKKwkJCWNvbnRpbnVlOworCisJCWZvciAocGRnID0gMDsgcGRnIDwgZWUtPmVlX3BkX2dhaW5zW21vZGVdOyBwZGcrKykgeworCQkJc3RydWN0IGF0aDVrX3BkZ2Fpbl9pbmZvICpwZCA9CisJCQkJCSZjaGluZm9bcGllcl0ucGRfY3VydmVzW3BkZ107CisKKwkJCWlmIChwZCAhPSBOVUxMKSB7CisJCQkJa2ZyZWUocGQtPnBkX3N0ZXApOworCQkJCWtmcmVlKHBkLT5wZF9wd3IpOworCQkJfQorCQl9CisKKwkJa2ZyZWUoY2hpbmZvW3BpZXJdLnBkX2N1cnZlcyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIC8qIENvbnZlcnQgUkY1MTExIHNwZWNpZmljIGRhdGEgdG8gZ2VuZXJpYyByYXcgZGF0YQogICogdXNlZCBieSBpbnRlcnBvbGF0aW9uIGNvZGUgKi8KIHN0YXRpYyBpbnQKQEAgLTY4NCw3ICs3MzEsNyBAQAogCQkJCUdGUF9LRVJORUwpOwogCiAJCWlmICghY2hpbmZvW3BpZXJdLnBkX2N1cnZlcykKLQkJCXJldHVybiAtRU5PTUVNOworCQkJZ290byBlcnJfb3V0OwogCiAJCS8qIE9ubHkgb25lIGN1cnZlIGZvciBSRjUxMTEKIAkJICogZmluZCBvdXQgd2hpY2ggb25lIGFuZCBwbGFjZQpAQCAtNzA4LDEyICs3NTUsMTIgQEAKIAkJcGQtPnBkX3N0ZXAgPSBrY2FsbG9jKEFSNUtfRUVQUk9NX05fUFdSX1BPSU5UU181MTExLAogCQkJCQlzaXplb2YodTgpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFwZC0+cGRfc3RlcCkKLQkJCXJldHVybiAtRU5PTUVNOworCQkJZ290byBlcnJfb3V0OwogCiAJCXBkLT5wZF9wd3IgPSBrY2FsbG9jKEFSNUtfRUVQUk9NX05fUFdSX1BPSU5UU181MTExLAogCQkJCQlzaXplb2YoczE2KSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghcGQtPnBkX3B3cikKLQkJCXJldHVybiAtRU5PTUVNOworCQkJZ290byBlcnJfb3V0OwogCiAJCS8qIEZpbGwgcmF3IGRhdGFzZXQKIAkJICogKGNvbnZlcnQgcG93ZXIgdG8gMC4yNWRCIHVuaXRzCkBAIC03MzQsNiArNzgxLDEwIEBACiAJfQogCiAJcmV0dXJuIDA7CisKK2Vycl9vdXQ6CisJYXRoNWtfZWVwcm9tX2ZyZWVfcGNhbF9pbmZvKGFoLCBtb2RlKTsKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAogLyogUGFyc2UgRUVQUk9NIGRhdGEgKi8KQEAgLTg2Nyw3ICs5MTgsNyBAQAogCQkJCQlHRlBfS0VSTkVMKTsKIAogCQlpZiAoIWNoaW5mb1twaWVyXS5wZF9jdXJ2ZXMpCi0JCQlyZXR1cm4gLUVOT01FTTsKKwkJCWdvdG8gZXJyX291dDsKIAogCQkvKiBGaWxsIHBkX2N1cnZlcyAqLwogCQlmb3IgKHBkZyA9IDA7IHBkZyA8IGVlLT5lZV9wZF9nYWluc1ttb2RlXTsgcGRnKyspIHsKQEAgLTg4NiwxNCArOTM3LDEzIEBACiAJCQkJCQlzaXplb2YodTgpLCBHRlBfS0VSTkVMKTsKIAogCQkJCWlmICghcGQtPnBkX3N0ZXApCi0JCQkJCXJldHVybiAtRU5PTUVNOworCQkJCQlnb3RvIGVycl9vdXQ7CiAKIAkJCQlwZC0+cGRfcHdyID0ga2NhbGxvYyhwZC0+cGRfcG9pbnRzLAogCQkJCQkJc2l6ZW9mKHMxNiksIEdGUF9LRVJORUwpOwogCiAJCQkJaWYgKCFwZC0+cGRfcHdyKQotCQkJCQlyZXR1cm4gLUVOT01FTTsKLQorCQkJCQlnb3RvIGVycl9vdXQ7CiAKIAkJCQkvKiBGaWxsIHJhdyBkYXRhc2V0CiAJCQkJICogKGFsbCBwb3dlciBsZXZlbHMgYXJlIGluIDAuMjVkQiB1bml0cykgKi8KQEAgLTkyNSwxMyArOTc1LDEzIEBACiAJCQkJCQlzaXplb2YodTgpLCBHRlBfS0VSTkVMKTsKIAogCQkJCWlmICghcGQtPnBkX3N0ZXApCi0JCQkJCXJldHVybiAtRU5PTUVNOworCQkJCQlnb3RvIGVycl9vdXQ7CiAKIAkJCQlwZC0+cGRfcHdyID0ga2NhbGxvYyhwZC0+cGRfcG9pbnRzLAogCQkJCQkJc2l6ZW9mKHMxNiksIEdGUF9LRVJORUwpOwogCiAJCQkJaWYgKCFwZC0+cGRfcHdyKQotCQkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCQkJZ290byBlcnJfb3V0OwogCiAJCQkJLyogRmlsbCByYXcgZGF0YXNldAogCQkJCSAqIChhbGwgcG93ZXIgbGV2ZWxzIGFyZSBpbiAwLjI1ZEIgdW5pdHMpICovCkBAIC05NTQsNiArMTAwNCwxMCBAQAogCX0KIAogCXJldHVybiAwOworCitlcnJfb3V0OgorCWF0aDVrX2VlcHJvbV9mcmVlX3BjYWxfaW5mbyhhaCwgbW9kZSk7CisJcmV0dXJuIC1FTk9NRU07CiB9CiAKIC8qIFBhcnNlIEVFUFJPTSBkYXRhICovCkBAIC0xMTU2LDcgKzEyMTAsNyBAQAogCQkJCQlHRlBfS0VSTkVMKTsKIAogCQlpZiAoIWNoaW5mb1twaWVyXS5wZF9jdXJ2ZXMpCi0JCQlyZXR1cm4gLUVOT01FTTsKKwkJCWdvdG8gZXJyX291dDsKIAogCQkvKiBGaWxsIHBkX2N1cnZlcyAqLwogCQlmb3IgKHBkZyA9IDA7IHBkZyA8IGVlLT5lZV9wZF9nYWluc1ttb2RlXTsgcGRnKyspIHsKQEAgLTExNzcsMTMgKzEyMzEsMTMgQEAKIAkJCQkJc2l6ZW9mKHU4KSwgR0ZQX0tFUk5FTCk7CiAKIAkJCWlmICghcGQtPnBkX3N0ZXApCi0JCQkJcmV0dXJuIC1FTk9NRU07CisJCQkJZ290byBlcnJfb3V0OwogCiAJCQlwZC0+cGRfcHdyID0ga2NhbGxvYyhwZC0+cGRfcG9pbnRzLAogCQkJCQlzaXplb2YoczE2KSwgR0ZQX0tFUk5FTCk7CiAKIAkJCWlmICghcGQtPnBkX3B3cikKLQkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCQlnb3RvIGVycl9vdXQ7CiAKIAkJCS8qIEZpbGwgcmF3IGRhdGFzZXQKIAkJCSAqIGNvbnZlcnQgYWxsIHB3ciBsZXZlbHMgdG8KQEAgLTEyMTMsNiArMTI2NywxMCBAQAogCX0KIAogCXJldHVybiAwOworCitlcnJfb3V0OgorCWF0aDVrX2VlcHJvbV9mcmVlX3BjYWxfaW5mbyhhaCwgbW9kZSk7CisJcmV0dXJuIC1FTk9NRU07CiB9CiAKIC8qIFBhcnNlIEVFUFJPTSBkYXRhICovCkBAIC0xNTM0LDUzICsxNTkyLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotYXRoNWtfZWVwcm9tX2ZyZWVfcGNhbF9pbmZvKHN0cnVjdCBhdGg1a19odyAqYWgsIGludCBtb2RlKQotewotCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOwotCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mbyAqY2hpbmZvOwotCXU4IHBpZXIsIHBkZzsKLQotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgQVI1S19FRVBST01fTU9ERV8xMUE6Ci0JCWlmICghQVI1S19FRVBST01fSERSXzExQShlZS0+ZWVfaGVhZGVyKSkKLQkJCXJldHVybiAwOwotCQljaGluZm8gPSBlZS0+ZWVfcHdyX2NhbF9hOwotCQlicmVhazsKLQljYXNlIEFSNUtfRUVQUk9NX01PREVfMTFCOgotCQlpZiAoIUFSNUtfRUVQUk9NX0hEUl8xMUIoZWUtPmVlX2hlYWRlcikpCi0JCQlyZXR1cm4gMDsKLQkJY2hpbmZvID0gZWUtPmVlX3B3cl9jYWxfYjsKLQkJYnJlYWs7Ci0JY2FzZSBBUjVLX0VFUFJPTV9NT0RFXzExRzoKLQkJaWYgKCFBUjVLX0VFUFJPTV9IRFJfMTFHKGVlLT5lZV9oZWFkZXIpKQotCQkJcmV0dXJuIDA7Ci0JCWNoaW5mbyA9IGVlLT5lZV9wd3JfY2FsX2c7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWZvciAocGllciA9IDA7IHBpZXIgPCBlZS0+ZWVfbl9waWVyc1ttb2RlXTsgcGllcisrKSB7Ci0JCWlmICghY2hpbmZvW3BpZXJdLnBkX2N1cnZlcykKLQkJCWNvbnRpbnVlOwotCi0JCWZvciAocGRnID0gMDsgcGRnIDwgZWUtPmVlX3BkX2dhaW5zW21vZGVdOyBwZGcrKykgewotCQkJc3RydWN0IGF0aDVrX3BkZ2Fpbl9pbmZvICpwZCA9Ci0JCQkJCSZjaGluZm9bcGllcl0ucGRfY3VydmVzW3BkZ107Ci0KLQkJCWlmIChwZCAhPSBOVUxMKSB7Ci0JCQkJa2ZyZWUocGQtPnBkX3N0ZXApOwotCQkJCWtmcmVlKHBkLT5wZF9wd3IpOwotCQkJfQotCQl9Ci0KLQkJa2ZyZWUoY2hpbmZvW3BpZXJdLnBkX2N1cnZlcyk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qIFJlYWQgY29uZm9ybWFuY2UgdGVzdCBsaW1pdHMgdXNlZCBmb3IgcmVndWxhdG9yeSBjb250cm9sICovCiBzdGF0aWMgaW50CiBhdGg1a19lZXByb21fcmVhZF9jdGxfaW5mbyhzdHJ1Y3QgYXRoNWtfaHcgKmFoKQpAQCAtMTcyMSwzNSArMTczMiw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIFJlYWQgdGhlIE1BQyBhZGRyZXNzIGZyb20gZWVwcm9tCi0gKi8KLWludCBhdGg1a19lZXByb21fcmVhZF9tYWMoc3RydWN0IGF0aDVrX2h3ICphaCwgdTggKm1hYykKLXsKLQl1OCBtYWNfZFtFVEhfQUxFTl0gPSB7fTsKLQl1MzIgdG90YWwsIG9mZnNldDsKLQl1MTYgZGF0YTsKLQlpbnQgb2N0ZXQ7Ci0KLQlBUjVLX0VFUFJPTV9SRUFEKDB4MjAsIGRhdGEpOwotCi0JZm9yIChvZmZzZXQgPSAweDFmLCBvY3RldCA9IDAsIHRvdGFsID0gMDsgb2Zmc2V0ID49IDB4MWQ7IG9mZnNldC0tKSB7Ci0JCUFSNUtfRUVQUk9NX1JFQUQob2Zmc2V0LCBkYXRhKTsKLQotCQl0b3RhbCArPSBkYXRhOwotCQltYWNfZFtvY3RldCArIDFdID0gZGF0YSAmIDB4ZmY7Ci0JCW1hY19kW29jdGV0XSA9IGRhdGEgPj4gODsKLQkJb2N0ZXQgKz0gMjsKLQl9Ci0KLQlpZiAoIXRvdGFsIHx8IHRvdGFsID09IDMgKiAweGZmZmYpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbWVtY3B5KG1hYywgbWFjX2QsIEVUSF9BTEVOKTsKLQotCXJldHVybiAwOwotfQotCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKlwKICogSW5pdC9EZXRhY2ggZnVuY3Rpb25zICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9tYWM4MDIxMS1vcHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9tYWM4MDIxMS1vcHMuYwppbmRleCA5YmUyOWI3Li44MDdiZDY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvbWFjODAyMTEtb3BzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL21hYzgwMjExLW9wcy5jCkBAIC0yODIsNiArMjgyLDE1IEBACiAJaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9CRUFDT05fSU5UKQogCQlzYy0+YmludHZhbCA9IGJzc19jb25mLT5iZWFjb25faW50OwogCisJaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9FUlBfU0xPVCkgeworCQlpbnQgc2xvdF90aW1lOworCisJCWFoLT5haF9zaG9ydF9zbG90ID0gYnNzX2NvbmYtPnVzZV9zaG9ydF9zbG90OworCQlzbG90X3RpbWUgPSBhdGg1a19od19nZXRfZGVmYXVsdF9zbG90dGltZShhaCkgKworCQkJICAgIDMgKiBhaC0+YWhfY292ZXJhZ2VfY2xhc3M7CisJCWF0aDVrX2h3X3NldF9pZnNfaW50ZXJ2YWxzKGFoLCBzbG90X3RpbWUpOworCX0KKwogCWlmIChjaGFuZ2VzICYgQlNTX0NIQU5HRURfQVNTT0MpIHsKIAkJYXZmLT5hc3NvYyA9IGJzc19jb25mLT5hc3NvYzsKIAkJaWYgKGJzc19jb25mLT5hc3NvYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9wY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9wY2kuYwppbmRleCAzYzQ0Njg5Li4yOTZjMzE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BjaS5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbmw4MDIxMS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS1hc3BtLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlICIuLi9hdGguaCIKICNpbmNsdWRlICJhdGg1ay5oIgogI2luY2x1ZGUgImRlYnVnLmgiCkBAIC0xMDgsMTEgKzEwOSw0MiBAQAogCXJldHVybiAwOwogfQogCisvKgorICogUmVhZCB0aGUgTUFDIGFkZHJlc3MgZnJvbSBlZXByb20gb3IgcGxhdGZvcm1fZGF0YQorICovCitzdGF0aWMgaW50IGF0aDVrX3BjaV9lZXByb21fcmVhZF9tYWMoc3RydWN0IGF0aDVrX2h3ICphaCwgdTggKm1hYykKK3sKKwl1OCBtYWNfZFtFVEhfQUxFTl0gPSB7fTsKKwl1MzIgdG90YWwsIG9mZnNldDsKKwl1MTYgZGF0YTsKKwlpbnQgb2N0ZXQ7CisKKwlBUjVLX0VFUFJPTV9SRUFEKDB4MjAsIGRhdGEpOworCisJZm9yIChvZmZzZXQgPSAweDFmLCBvY3RldCA9IDAsIHRvdGFsID0gMDsgb2Zmc2V0ID49IDB4MWQ7IG9mZnNldC0tKSB7CisJCUFSNUtfRUVQUk9NX1JFQUQob2Zmc2V0LCBkYXRhKTsKKworCQl0b3RhbCArPSBkYXRhOworCQltYWNfZFtvY3RldCArIDFdID0gZGF0YSAmIDB4ZmY7CisJCW1hY19kW29jdGV0XSA9IGRhdGEgPj4gODsKKwkJb2N0ZXQgKz0gMjsKKwl9CisKKwlpZiAoIXRvdGFsIHx8IHRvdGFsID09IDMgKiAweGZmZmYpCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtY3B5KG1hYywgbWFjX2QsIEVUSF9BTEVOKTsKKworCXJldHVybiAwOworfQorCisKIC8qIENvbW1vbiBhdGhfYnVzX29wdHMgc3RydWN0dXJlICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aF9idXNfb3BzIGF0aF9wY2lfYnVzX29wcyA9IHsKIAkuYXRoX2J1c190eXBlID0gQVRIX1BDSSwKIAkucmVhZF9jYWNoZXNpemUgPSBhdGg1a19wY2lfcmVhZF9jYWNoZXNpemUsCiAJLmVlcHJvbV9yZWFkID0gYXRoNWtfcGNpX2VlcHJvbV9yZWFkLAorCS5lZXByb21fcmVhZF9tYWMgPSBhdGg1a19wY2lfZWVwcm9tX3JlYWRfbWFjLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BjdS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BjdS5jCmluZGV4IGQ5YjNmODIuLjcxMmE5YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9wY3UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGN1LmMKQEAgLTc1LDcgKzc1LDcgQEAKICAqIGJ3bW9kZXMuCiAgKi8KIGludCBhdGg1a19od19nZXRfZnJhbWVfZHVyYXRpb24oc3RydWN0IGF0aDVrX2h3ICphaCwKLQkJaW50IGxlbiwgc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlKQorCQlpbnQgbGVuLCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUsIGJvb2wgc2hvcnRwcmUpCiB7CiAJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGFoLT5haF9zYzsKIAlpbnQgc2lmcywgcHJlYW1ibGUsIHBsY3BfYml0cywgc3ltX3RpbWU7CkBAIC04NCw5ICs4NCwxNSBAQAogCiAJLyogRmFsbGJhY2sgKi8KIAlpZiAoIWFoLT5haF9id21vZGUpIHsKLQkJZHVyID0gaWVlZTgwMjExX2dlbmVyaWNfZnJhbWVfZHVyYXRpb24oc2MtPmh3LAotCQkJCQkJTlVMTCwgbGVuLCByYXRlKTsKLQkJcmV0dXJuIGxlMTZfdG9fY3B1KGR1cik7CisJCV9fbGUxNiByYXdfZHVyID0gaWVlZTgwMjExX2dlbmVyaWNfZnJhbWVfZHVyYXRpb24oc2MtPmh3LAorCQkJCQlOVUxMLCBsZW4sIHJhdGUpOworCisJCS8qIHN1YnRyYWN0IGRpZmZlcmVuY2UgYmV0d2VlbiBsb25nIGFuZCBzaG9ydCBwcmVhbWJsZSAqLworCQlkdXIgPSBsZTE2X3RvX2NwdShyYXdfZHVyKTsKKwkJaWYgKHNob3J0cHJlKQorCQkJZHVyIC09IDk2OworCisJCXJldHVybiBkdXI7CiAJfQogCiAJYml0cmF0ZSA9IHJhdGUtPmJpdHJhdGU7CkBAIC0xNDUsOSArMTUxLDkgQEAKIAkJc2xvdF90aW1lID0gQVI1S19JTklUX1NMT1RfVElNRV9RVUFSVEVSX1JBVEU7CiAJCWJyZWFrOwogCWNhc2UgQVI1S19CV01PREVfREVGQVVMVDoKLQkJc2xvdF90aW1lID0gQVI1S19JTklUX1NMT1RfVElNRV9ERUZBVUxUOwogCWRlZmF1bHQ6Ci0JCWlmIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfQ0NLKQorCQlzbG90X3RpbWUgPSBBUjVLX0lOSVRfU0xPVF9USU1FX0RFRkFVTFQ7CisJCWlmICgoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX0NDSykgJiYgIWFoLT5haF9zaG9ydF9zbG90KQogCQkJc2xvdF90aW1lID0gQVI1S19JTklUX1NMT1RfVElNRV9COwogCQlicmVhazsKIAl9CkBAIC0yNjMsMjcgKzI2OSwxNCBAQAogCQkgKiBhY3R1YWwgcmF0ZSBmb3IgdGhpcyByYXRlLiBTZWUgbWFjODAyMTEgdHguYwogCQkgKiBpZWVlODAyMTFfZHVyYXRpb24oKSBmb3IgYSBicmllZiBkZXNjcmlwdGlvbiBvZgogCQkgKiB3aGF0IHJhdGUgd2Ugc2hvdWxkIGNob29zZSB0byBUWCBBQ0tzLiAqLwotCQl0eF90aW1lID0gYXRoNWtfaHdfZ2V0X2ZyYW1lX2R1cmF0aW9uKGFoLCAxMCwgcmF0ZSk7CisJCXR4X3RpbWUgPSBhdGg1a19od19nZXRfZnJhbWVfZHVyYXRpb24oYWgsIDEwLCByYXRlLCBmYWxzZSk7CiAKIAkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCB0eF90aW1lLCByZWcpOwogCiAJCWlmICghKHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUpKQogCQkJY29udGludWU7CiAKLQkJLyoKLQkJICogV2UncmUgbm90IGRpc3Rpbmd1aXNoaW5nIHNob3J0IHByZWFtYmxlIGhlcmUsCi0JCSAqIFRoaXMgaXMgdHJ1ZSwgYWxsIHdlJ2xsIGdldCBpcyBhIGxvbmdlciB2YWx1ZSBoZXJlCi0JCSAqIHdoaWNoIGlzIG5vdCBuZWNlc3NhcmlsbHkgYmFkLiBXZSBjb3VsZCB1c2UKLQkJICogZXhwb3J0IGllZWU4MDIxMV9mcmFtZV9kdXJhdGlvbigpIGJ1dCB0aGF0IG5lZWRzIHRvIGJlCi0JCSAqIGZpeGVkIGZpcnN0IHRvIGJlIHByb3Blcmx5IHVzZWQgYnkgbWFjODAyMTExIGRyaXZlcnM6Ci0JCSAqCi0JCSAqICAtIHJlbW92ZSBlcnAgc3R1ZmYgYW5kIGxldCB0aGUgcm91dGluZSBmaWd1cmUgb2ZkbQotCQkgKiAgICBlcnAgcmF0ZXMKLQkJICogIC0gcmVtb3ZlIHBhc3NpbmcgYXJndW1lbnQgaWVlZTgwMjExX2xvY2FsIGFzCi0JCSAqICAgIGRyaXZlcnMgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gaXQKLQkJICogIC0gbW92ZSBkcml2ZXJzIHVzaW5nIGllZWU4MDIxMV9nZW5lcmljX2ZyYW1lX2R1cmF0aW9uKCkKLQkJICogICAgdG8gdGhpcwotCQkgKi8KKwkJdHhfdGltZSA9IGF0aDVrX2h3X2dldF9mcmFtZV9kdXJhdGlvbihhaCwgMTAsIHJhdGUsIHRydWUpOwogCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHR4X3RpbWUsCiAJCQlyZWcgKyAoQVI1S19TRVRfU0hPUlRfUFJFQU1CTEUgPDwgMikpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9xY3UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9xY3UuYwppbmRleCAzMzQzZmI5Li5iMThjNTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcWN1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3FjdS5jCkBAIC01MTksNyArNTE5LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzaWZzID0gYXRoNWtfaHdfZ2V0X2RlZmF1bHRfc2lmcyhhaCk7Ci0Jc2lmc19jbG9jayA9IGF0aDVrX2h3X2h0b2Nsb2NrKGFoLCBzaWZzKTsKKwlzaWZzX2Nsb2NrID0gYXRoNWtfaHdfaHRvY2xvY2soYWgsIHNpZnMgLSAyKTsKIAogCS8qIEVJRlMKIAkgKiBUeHRpbWUgb2YgYWNrIGF0IGxvd2VzdCByYXRlICsgU0lGUyArIERJRlMKQEAgLTU1MCw3ICs1NTAsNyBAQAogCWVsc2UKIAkJcmF0ZSA9ICZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmJpdHJhdGVzWzBdOwogCi0JYWNrX3R4X3RpbWUgPSBhdGg1a19od19nZXRfZnJhbWVfZHVyYXRpb24oYWgsIDEwLCByYXRlKTsKKwlhY2tfdHhfdGltZSA9IGF0aDVrX2h3X2dldF9mcmFtZV9kdXJhdGlvbihhaCwgMTAsIHJhdGUsIGZhbHNlKTsKIAogCS8qIGFja190eF90aW1lIGluY2x1ZGVzIGFuIFNJRlMgYWxyZWFkeSAqLwogCWVpZnMgPSBhY2tfdHhfdGltZSArIHNpZnMgKyAyICogc2xvdF90aW1lOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3Jlc2V0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVzZXQuYwppbmRleCA4NDIwNjg5Li4zNTEwZGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVzZXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVzZXQuYwpAQCAtMTU5LDYgKzE1OSwxMSBAQAogCXJ4bGF0ID0gQVI1S19SRUdfTVModXNlY19yZWcsIEFSNUtfVVNFQ19SWF9MQVRFTkNZXzUyMTEpOwogCiAJLyoKKwkgKiBTZXQgZGVmYXVsdCBUeCBmcmFtZSB0byBUeCBkYXRhIHN0YXJ0IGRlbGF5CisJICovCisJdHhmMnR4cyA9IEFSNUtfSU5JVF9UWEYyVFhEX1NUQVJUX0RFRkFVTFQ7CisKKwkvKgogCSAqIDUyMTAgaW5pdHZhbHMgZG9uJ3QgaW5jbHVkZSB1c2VjIHNldHRpbmdzCiAJICogc28gd2UgbmVlZCB0byB1c2UgbWFnaWMgdmFsdWVzIGhlcmUgZm9yCiAJICogdHgvcnggbGF0ZW5jaWVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnCmluZGV4IGFkNTdhNmQuLmQ5ZmY4NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnCkBAIC01LDcgKzUsNyBAQAogCiBjb25maWcgQVRIOUsKIAl0cmlzdGF0ZSAiQXRoZXJvcyA4MDIuMTFuIHdpcmVsZXNzIGNhcmRzIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgTUFDODAyMTEKKwlkZXBlbmRzIG9uIE1BQzgwMjExCiAJc2VsZWN0IEFUSDlLX0hXCiAJc2VsZWN0IE1BQzgwMjExX0xFRFMKIAlzZWxlY3QgTEVEU19DTEFTUwpAQCAtMjMsNiArMjMsMjUgQEAKIAogCSAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIGF0aDlrLgogCitjb25maWcgQVRIOUtfUENJCisJYm9vbCAiQXRoZXJvcyBhdGg5ayBQQ0kvUENJZSBidXMgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFUSDlLICYmIFBDSQorCWRlZmF1bHQgUENJCisJLS0taGVscC0tLQorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgUENJIGJ1cyBzdXBwb3J0IGluIGF0aDlrLgorCisJICBTYXkgWSwgaWYgeW91IGhhdmUgYSBjb21wYXRpYmxlIFBDSS9QQ0llIHdpcmVsZXNzIGNhcmQuCisKK2NvbmZpZyBBVEg5S19BSEIKKwlib29sICJBdGhlcm9zIGF0aDlrIEFIQiBidXMgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFUSDlLCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgQUhCIGJ1cyBzdXBwb3J0IGluIGF0aDlrLgorCisJICBTYXkgWSwgaWYgeW91IGhhdmUgYSBTb0Mgd2l0aCBhIGNvbXBhdGlibGUgYnVpbHQtaW4KKwkgIHdpcmVsZXNzIE1BQy4gU2F5IE4gaWYgdW5zdXJlLgorCiBjb25maWcgQVRIOUtfREVCVUdGUwogCWJvb2wgIkF0aGVyb3MgYXRoOWsgZGVidWdnaW5nIgogCWRlcGVuZHMgb24gQVRIOUsgJiYgREVCVUdfRlMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZQppbmRleCA0ZDY2Y2E4Li4wNWE2ZmFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlCkBAIC02LDggKzYsOCBAQAogCQl4bWl0Lm8gXAogCiBhdGg5ay0kKENPTkZJR19BVEg5S19SQVRFX0NPTlRST0wpICs9IHJjLm8KLWF0aDlrLSQoQ09ORklHX1BDSSkgKz0gcGNpLm8KLWF0aDlrLSQoQ09ORklHX0FUSEVST1NfQVI3MVhYKSArPSBhaGIubworYXRoOWstJChDT05GSUdfQVRIOUtfUENJKSArPSBwY2kubworYXRoOWstJChDT05GSUdfQVRIOUtfQUhCKSArPSBhaGIubwogYXRoOWstJChDT05GSUdfQVRIOUtfREVCVUdGUykgKz0gZGVidWcubwogCiBvYmotJChDT05GSUdfQVRIOUspICs9IGF0aDlrLm8KQEAgLTQ4LDQgKzQ4LDYgQEAKIAkJaHRjX2Rydl9pbml0Lm8gXAogCQlodGNfZHJ2X2dwaW8ubwogCithdGg5a19odGMtJChDT05GSUdfQVRIOUtfSFRDX0RFQlVHRlMpICs9IGh0Y19kcnZfZGVidWcubworCiBvYmotJChDT05GSUdfQVRIOUtfSFRDKSArPSBhdGg5a19odGMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FoYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FoYi5jCmluZGV4IDljYjBlZmEuLjYxOTU2MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9haGIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYWhiLmMKQEAgLTIxLDYgKzIxLDE4IEBACiAjaW5jbHVkZSA8bGludXgvYXRoOWtfcGxhdGZvcm0uaD4KICNpbmNsdWRlICJhdGg5ay5oIgogCitzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCBhdGg5a19wbGF0Zm9ybV9pZF90YWJsZVtdID0geworCXsKKwkJLm5hbWUgPSAiYXRoOWsiLAorCQkuZHJpdmVyX2RhdGEgPSBBUjU0MTZfQVI5MTAwX0RFVklELAorCX0sCisJeworCQkubmFtZSA9ICJhcjkzNHhfd21hYyIsCisJCS5kcml2ZXJfZGF0YSA9IEFSOTMwMF9ERVZJRF9BUjkzNDAsCisJfSwKKwl7fSwKK307CisKIC8qIHJldHVybiBidXMgY2FjaGVzaXplIGluIDRCIHdvcmQgdW5pdHMgKi8KIHN0YXRpYyB2b2lkIGF0aF9haGJfcmVhZF9jYWNoZXNpemUoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiwgaW50ICpjc3opCiB7CkBAIC01Nyw2ICs2OSw3IEBACiAJc3RydWN0IGF0aF9zb2Z0YyAqc2M7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CisJY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCAqaWQgPSBwbGF0Zm9ybV9nZXRfZGV2aWNlX2lkKHBkZXYpOwogCWludCBpcnE7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGF0aF9odyAqYWg7CkBAIC0xMTYsNyArMTI5LDcgQEAKIAkJZ290byBlcnJfZnJlZV9odzsKIAl9CiAKLQlyZXQgPSBhdGg5a19pbml0X2RldmljZShBUjU0MTZfQVI5MTAwX0RFVklELCBzYywgMHgwLCAmYXRoX2FoYl9idXNfb3BzKTsKKwlyZXQgPSBhdGg5a19pbml0X2RldmljZShpZC0+ZHJpdmVyX2RhdGEsIHNjLCAweDAsICZhdGhfYWhiX2J1c19vcHMpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgZGV2aWNlXG4iKTsKIAkJZ290byBlcnJfaXJxOwpAQCAtMTY1LDggKzE3OCwxMSBAQAogCQkubmFtZQk9ICJhdGg5ayIsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCisJLmlkX3RhYmxlICAgID0gYXRoOWtfcGxhdGZvcm1faWRfdGFibGUsCiB9OwogCitNT0RVTEVfREVWSUNFX1RBQkxFKHBsYXRmb3JtLCBhdGg5a19wbGF0Zm9ybV9pZF90YWJsZSk7CisKIGludCBhdGhfYWhiX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhdGhfYWhiX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYW5pLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYW5pLmMKaW5kZXggMmUzMWM3Ny4uNWExZjRmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FuaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hbmkuYwpAQCAtODk5LDEyICs4OTksNiBAQAogCSAqIGNoZWNrIGhlcmUgZGVmYXVsdCBsZXZlbCBzaG91bGQgbm90IG1vZGlmeSBJTkkgc2V0dGluZy4KIAkgKi8KIAlpZiAodXNlX25ld19hbmkoYWgpKSB7Ci0JCWNvbnN0IHN0cnVjdCBhbmlfb2ZkbV9sZXZlbF9lbnRyeSAqZW50cnlfb2ZkbTsKLQkJY29uc3Qgc3RydWN0IGFuaV9jY2tfbGV2ZWxfZW50cnkgKmVudHJ5X2NjazsKLQotCQllbnRyeV9vZmRtID0gJm9mZG1fbGV2ZWxfdGFibGVbQVRIOUtfQU5JX09GRE1fREVGX0xFVkVMXTsKLQkJZW50cnlfY2NrID0gJmNja19sZXZlbF90YWJsZVtBVEg5S19BTklfQ0NLX0RFRl9MRVZFTF07Ci0KIAkJYWgtPmFuaXBlcmlvZCA9IEFUSDlLX0FOSV9QRVJJT0RfTkVXOwogCQlhaC0+Y29uZmlnLmFuaV9wb2xsX2ludGVydmFsID0gQVRIOUtfQU5JX1BPTExJTlRFUlZBTF9ORVc7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjUwMDhfcGh5LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI1MDA4X3BoeS5jCmluZGV4IDEwNmMwYjAuLjRiZjlkYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjUwMDhfcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyNTAwOF9waHkuYwpAQCAtNDQsNiArNDQsMzQgQEAKIHN0YXRpYyBjb25zdCBpbnQgbTJUaHJlc2hFeHRfb2ZmID0gMTI3OwogCiAKK3N0YXRpYyB2b2lkIGFyNTAwOF9yZl9iYW5rX3NldHVwKHUzMiAqYmFuaywgc3RydWN0IGFyNTQxNkluaUFycmF5ICphcnJheSwKKwkJCQkgaW50IGNvbCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBhcnJheS0+aWFfcm93czsgaSsrKQorCQliYW5rW2ldID0gSU5JX1JBKGFycmF5LCBpLCBjb2wpOworfQorCisKKyNkZWZpbmUgUkVHX1dSSVRFX1JGX0FSUkFZKGluaWFycmF5LCByZWdEYXRhLCByZWdXcikgXAorCWFyNTAwOF93cml0ZV9yZl9hcnJheShhaCwgaW5pYXJyYXksIHJlZ0RhdGEsICYocmVnV3IpKQorCitzdGF0aWMgdm9pZCBhcjUwMDhfd3JpdGVfcmZfYXJyYXkoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhcjU0MTZJbmlBcnJheSAqYXJyYXksCisJCQkJICB1MzIgKmRhdGEsIHVuc2lnbmVkIGludCAqd3JpdGVjbnQpCit7CisJaW50IHI7CisKKwlFTkFCTEVfUkVHV1JJVEVfQlVGRkVSKGFoKTsKKworCWZvciAociA9IDA7IHIgPCBhcnJheS0+aWFfcm93czsgcisrKSB7CisJCVJFR19XUklURShhaCwgSU5JX1JBKGFycmF5LCByLCAwKSwgZGF0YVtyXSk7CisJCURPX0RFTEFZKCp3cml0ZWNudCk7CisJfQorCisJUkVHV1JJVEVfQlVGRkVSX0ZMVVNIKGFoKTsKK30KKwogLyoqCiAgKiBhcjUwMDhfaHdfcGh5X21vZGlmeV9yeF9idWZmZXIoKSAtIHBlcmZvcm0gYW5hbG9nIHN3aXp6bGluZyBvZiBwYXJhbWV0ZXJzCiAgKiBAcmZidWY6CkBAIC01MzAsMTYgKzU1OCwxNiBAQAogCWVlcE1pbm9yUmV2ID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9NSU5PUl9SRVYpOwogCiAJLyogU2V0dXAgQmFuayAwIFdyaXRlICovCi0JUkZfQkFOS19TRVRVUChhaC0+YW5hbG9nQmFuazBEYXRhLCAmYWgtPmluaUJhbmswLCAxKTsKKwlhcjUwMDhfcmZfYmFua19zZXR1cChhaC0+YW5hbG9nQmFuazBEYXRhLCAmYWgtPmluaUJhbmswLCAxKTsKIAogCS8qIFNldHVwIEJhbmsgMSBXcml0ZSAqLwotCVJGX0JBTktfU0VUVVAoYWgtPmFuYWxvZ0JhbmsxRGF0YSwgJmFoLT5pbmlCYW5rMSwgMSk7CisJYXI1MDA4X3JmX2Jhbmtfc2V0dXAoYWgtPmFuYWxvZ0JhbmsxRGF0YSwgJmFoLT5pbmlCYW5rMSwgMSk7CiAKIAkvKiBTZXR1cCBCYW5rIDIgV3JpdGUgKi8KLQlSRl9CQU5LX1NFVFVQKGFoLT5hbmFsb2dCYW5rMkRhdGEsICZhaC0+aW5pQmFuazIsIDEpOworCWFyNTAwOF9yZl9iYW5rX3NldHVwKGFoLT5hbmFsb2dCYW5rMkRhdGEsICZhaC0+aW5pQmFuazIsIDEpOwogCiAJLyogU2V0dXAgQmFuayA2IFdyaXRlICovCi0JUkZfQkFOS19TRVRVUChhaC0+YW5hbG9nQmFuazNEYXRhLCAmYWgtPmluaUJhbmszLAorCWFyNTAwOF9yZl9iYW5rX3NldHVwKGFoLT5hbmFsb2dCYW5rM0RhdGEsICZhaC0+aW5pQmFuazMsCiAJCSAgICAgIG1vZGVzSW5kZXgpOwogCXsKIAkJaW50IGk7CkBAIC01NjksNyArNTk3LDcgQEAKIAl9CiAKIAkvKiBTZXR1cCBCYW5rIDcgU2V0dXAgKi8KLQlSRl9CQU5LX1NFVFVQKGFoLT5hbmFsb2dCYW5rN0RhdGEsICZhaC0+aW5pQmFuazcsIDEpOworCWFyNTAwOF9yZl9iYW5rX3NldHVwKGFoLT5hbmFsb2dCYW5rN0RhdGEsICZhaC0+aW5pQmFuazcsIDEpOwogCiAJLyogV3JpdGUgQW5hbG9nIHJlZ2lzdGVycyAqLwogCVJFR19XUklURV9SRl9BUlJBWSgmYWgtPmluaUJhbmswLCBhaC0+YW5hbG9nQmFuazBEYXRhLApAQCAtNzI5LDYgKzc1Nyw3IEBACiAJCQkJIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCXN0cnVjdCBhdGhfcmVndWxhdG9yeSAqcmVndWxhdG9yeSA9IGF0aDlrX2h3X3JlZ3VsYXRvcnkoYWgpOworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwogCWludCBpLCByZWdXcml0ZXMgPSAwOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IGNoYW4tPmNoYW47CiAJdTMyIG1vZGVzSW5kZXgsIGZyZXFJbmRleDsKQEAgLTgwNSw3ICs4MzQsOCBAQAogCQlSRUdfV1JJVEUoYWgsIHJlZywgdmFsKTsKIAogCQlpZiAocmVnID49IDB4NzgwMCAmJiByZWcgPCAweDc4YTAKLQkJICAgICYmIGFoLT5jb25maWcuYW5hbG9nX3NoaWZ0cmVnKSB7CisJCSAgICAmJiBhaC0+Y29uZmlnLmFuYWxvZ19zaGlmdHJlZworCQkgICAgJiYgKGNvbW1vbi0+YnVzX29wcy0+YXRoX2J1c190eXBlICE9IEFUSF9VU0IpKSB7CiAJCQl1ZGVsYXkoMTAwKTsKIAkJfQogCkBAIC04MzUsNyArODY1LDggQEAKIAkJUkVHX1dSSVRFKGFoLCByZWcsIHZhbCk7CiAKIAkJaWYgKHJlZyA+PSAweDc4MDAgJiYgcmVnIDwgMHg3OGEwCi0JCSAgICAmJiBhaC0+Y29uZmlnLmFuYWxvZ19zaGlmdHJlZykgeworCQkgICAgJiYgYWgtPmNvbmZpZy5hbmFsb2dfc2hpZnRyZWcKKwkJICAgICYmIChjb21tb24tPmJ1c19vcHMtPmF0aF9idXNfdHlwZSAhPSBBVEhfVVNCKSkgewogCQkJdWRlbGF5KDEwMCk7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9jYWxpYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9jYWxpYi5jCmluZGV4IDc2Mzg4YzYuLmNiNjExYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfY2FsaWIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX2NhbGliLmMKQEAgLTI2LDYgKzI2LDI3IEBACiAJSVFfTUlTTUFUQ0hfQ0FMID0gQklUKDIpLAogfTsKIAorc3RhdGljIGJvb2wgYXI5MDAyX2h3X2lzX2NhbF9zdXBwb3J0ZWQoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQkJZW51bSBhcjkwMDJfY2FsX3R5cGVzIGNhbF90eXBlKQoreworCWJvb2wgc3VwcG9ydGVkID0gZmFsc2U7CisJc3dpdGNoIChhaC0+c3VwcF9jYWxzICYgY2FsX3R5cGUpIHsKKwljYXNlIElRX01JU01BVENIX0NBTDoKKwkJLyogUnVuIElRIE1pc21hdGNoIGZvciBub24tQ0NLIG9ubHkgKi8KKwkJaWYgKCFJU19DSEFOX0IoY2hhbikpCisJCQlzdXBwb3J0ZWQgPSB0cnVlOworCQlicmVhazsKKwljYXNlIEFEQ19HQUlOX0NBTDoKKwljYXNlIEFEQ19EQ19DQUw6CisJCS8qIFJ1biBBREMgR2FpbiBDYWwgZm9yIG5vbi1DQ0sgJiBub24gMkdIei1IVDIwIG9ubHkgKi8KKwkJaWYgKCFJU19DSEFOX0IoY2hhbikgJiYKKwkJICAgICEoSVNfQ0hBTl8yR0haKGNoYW4pICYmIElTX0NIQU5fSFQyMChjaGFuKSkpCisJCQlzdXBwb3J0ZWQgPSB0cnVlOworCQlicmVhazsKKwl9CisJcmV0dXJuIHN1cHBvcnRlZDsKK30KIAogc3RhdGljIHZvaWQgYXI5MDAyX2h3X3NldHVwX2NhbGlicmF0aW9uKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCQlzdHJ1Y3QgYXRoOWtfY2FsX2xpc3QgKmN1cnJDYWwpCkBAIC04NTgsMjYgKzg3OSwzMiBAQAogCWlmIChBUl9TUkVWXzkxMDAoYWgpIHx8IEFSX1NSRVZfOTE2MF8xMF9PUl9MQVRFUihhaCkpIHsKIAkJYWgtPnN1cHBfY2FscyA9IElRX01JU01BVENIX0NBTDsKIAotCQlpZiAoQVJfU1JFVl85MTYwXzEwX09SX0xBVEVSKGFoKSAmJgotCQkgICAgIShJU19DSEFOXzJHSFooY2hhbikgJiYgSVNfQ0hBTl9IVDIwKGNoYW4pKSkgeworCQlpZiAoQVJfU1JFVl85MTYwXzEwX09SX0xBVEVSKGFoKSkKIAkJCWFoLT5zdXBwX2NhbHMgfD0gQURDX0dBSU5fQ0FMIHwgQURDX0RDX0NBTDsKIAorCQlpZiAoQVJfU1JFVl85Mjg3KGFoKSkKKwkJCWFoLT5zdXBwX2NhbHMgJj0gfkFEQ19HQUlOX0NBTDsKIAorCQlpZiAoYXI5MDAyX2h3X2lzX2NhbF9zdXBwb3J0ZWQoYWgsIGNoYW4sIEFEQ19HQUlOX0NBTCkpIHsKIAkJCUlOSVRfQ0FMKCZhaC0+YWRjZ2Fpbl9jYWxkYXRhKTsKIAkJCUlOU0VSVF9DQUwoYWgsICZhaC0+YWRjZ2Fpbl9jYWxkYXRhKTsKIAkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCQkiZW5hYmxpbmcgQURDIEdhaW4gQ2FsaWJyYXRpb24uXG4iKTsKKwkJCQkJImVuYWJsaW5nIEFEQyBHYWluIENhbGlicmF0aW9uLlxuIik7CisJCX0KIAorCQlpZiAoYXI5MDAyX2h3X2lzX2NhbF9zdXBwb3J0ZWQoYWgsIGNoYW4sIEFEQ19EQ19DQUwpKSB7CiAJCQlJTklUX0NBTCgmYWgtPmFkY2RjX2NhbGRhdGEpOwogCQkJSU5TRVJUX0NBTChhaCwgJmFoLT5hZGNkY19jYWxkYXRhKTsKIAkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCQkiZW5hYmxpbmcgQURDIERDIENhbGlicmF0aW9uLlxuIik7CisJCQkJCSJlbmFibGluZyBBREMgREMgQ2FsaWJyYXRpb24uXG4iKTsKIAkJfQogCi0JCUlOSVRfQ0FMKCZhaC0+aXFfY2FsZGF0YSk7Ci0JCUlOU0VSVF9DQUwoYWgsICZhaC0+aXFfY2FsZGF0YSk7Ci0JCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCSJlbmFibGluZyBJUSBDYWxpYnJhdGlvbi5cbiIpOworCQlpZiAoYXI5MDAyX2h3X2lzX2NhbF9zdXBwb3J0ZWQoYWgsIGNoYW4sIElRX01JU01BVENIX0NBTCkpIHsKKwkJCUlOSVRfQ0FMKCZhaC0+aXFfY2FsZGF0YSk7CisJCQlJTlNFUlRfQ0FMKGFoLCAmYWgtPmlxX2NhbGRhdGEpOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJCQkiZW5hYmxpbmcgSVEgQ2FsaWJyYXRpb24uXG4iKTsKKwkJfQogCiAJCWFoLT5jYWxfbGlzdF9jdXJyID0gYWgtPmNhbF9saXN0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9tYWMuYwppbmRleCAzOTlhYjNiLi43YTMzMmYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfbWFjLmMKQEAgLTI5MCw3ICsyOTAsNiBAQAogCQl8IChmbGFncyAmIEFUSDlLX1RYREVTQ19WTUYgPyBBUl9WaXJ0TW9yZUZyYWcgOiAwKQogCQl8IFNNKHR4UG93ZXIsIEFSX1htaXRQb3dlcikKIAkJfCAoZmxhZ3MgJiBBVEg5S19UWERFU0NfVkVPTCA/IEFSX1ZFT0wgOiAwKQotCQl8IChmbGFncyAmIEFUSDlLX1RYREVTQ19DTFJETUFTSyA/IEFSX0NsckRlc3RNYXNrIDogMCkKIAkJfCAoZmxhZ3MgJiBBVEg5S19UWERFU0NfSU5UUkVRID8gQVJfVHhJbnRyUmVxIDogMCkKIAkJfCAoa2V5SXggIT0gQVRIOUtfVFhLRVlJWF9JTlZBTElEID8gQVJfRGVzdElkeFZhbGlkIDogMCk7CiAKQEAgLTMxMSw2ICszMTAsMTYgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGFyOTAwMl9od19zZXRfY2xyZG1hc2soc3RydWN0IGF0aF9odyAqYWgsIHZvaWQgKmRzLCBib29sIHZhbCkKK3sKKwlzdHJ1Y3QgYXI1NDE2X2Rlc2MgKmFkcyA9IEFSNTQxNkRFU0MoZHMpOworCisJaWYgKHZhbCkKKwkJYWRzLT5kc19jdGwwIHw9IEFSX0NsckRlc3RNYXNrOworCWVsc2UKKwkJYWRzLT5kc19jdGwwICY9IH5BUl9DbHJEZXN0TWFzazsKK30KKwogc3RhdGljIHZvaWQgYXI5MDAyX2h3X3NldDExbl9yYXRlc2NlbmFyaW8oc3RydWN0IGF0aF9odyAqYWgsIHZvaWQgKmRzLAogCQkJCQkgIHZvaWQgKmxhc3RkcywKIAkJCQkJICB1MzIgZHVyVXBkYXRlRW4sIHUzMiBydHNjdHNSYXRlLApAQCAtNDA2LDI2ICs0MTUsNiBAQAogCWFkcy0+ZHNfY3RsMSAmPSAofkFSX0lzQWdnciAmIH5BUl9Nb3JlQWdncik7CiB9CiAKLXN0YXRpYyB2b2lkIGFyOTAwMl9od19zZXQxMW5fYnVyc3RkdXJhdGlvbihzdHJ1Y3QgYXRoX2h3ICphaCwgdm9pZCAqZHMsCi0JCQkJCSAgIHUzMiBidXJzdER1cmF0aW9uKQotewotCXN0cnVjdCBhcjU0MTZfZGVzYyAqYWRzID0gQVI1NDE2REVTQyhkcyk7Ci0KLQlhZHMtPmRzX2N0bDIgJj0gfkFSX0J1cnN0RHVyOwotCWFkcy0+ZHNfY3RsMiB8PSBTTShidXJzdER1cmF0aW9uLCBBUl9CdXJzdER1cik7Ci19Ci0KLXN0YXRpYyB2b2lkIGFyOTAwMl9od19zZXQxMW5fdmlydHVhbG1vcmVmcmFnKHN0cnVjdCBhdGhfaHcgKmFoLCB2b2lkICpkcywKLQkJCQkJICAgIHUzMiB2bWYpCi17Ci0Jc3RydWN0IGFyNTQxNl9kZXNjICphZHMgPSBBUjU0MTZERVNDKGRzKTsKLQotCWlmICh2bWYpCi0JCWFkcy0+ZHNfY3RsMCB8PSBBUl9WaXJ0TW9yZUZyYWc7Ci0JZWxzZQotCQlhZHMtPmRzX2N0bDAgJj0gfkFSX1ZpcnRNb3JlRnJhZzsKLX0KLQogdm9pZCBhdGg5a19od19zZXR1cHJ4ZGVzYyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKIAkJCSAgdTMyIHNpemUsIHUzMiBmbGFncykKIHsKQEAgLTQ1OCw2ICs0NDcsNSBAQAogCW9wcy0+c2V0MTFuX2FnZ3JfbWlkZGxlID0gYXI5MDAyX2h3X3NldDExbl9hZ2dyX21pZGRsZTsKIAlvcHMtPnNldDExbl9hZ2dyX2xhc3QgPSBhcjkwMDJfaHdfc2V0MTFuX2FnZ3JfbGFzdDsKIAlvcHMtPmNscjExbl9hZ2dyID0gYXI5MDAyX2h3X2NscjExbl9hZ2dyOwotCW9wcy0+c2V0MTFuX2J1cnN0ZHVyYXRpb24gPSBhcjkwMDJfaHdfc2V0MTFuX2J1cnN0ZHVyYXRpb247Ci0Jb3BzLT5zZXQxMW5fdmlydHVhbG1vcmVmcmFnID0gYXI5MDAyX2h3X3NldDExbl92aXJ0dWFsbW9yZWZyYWc7CisJb3BzLT5zZXRfY2xyZG1hc2sgPSBhcjkwMDJfaHdfc2V0X2NscmRtYXNrOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfcGh5LmMKaW5kZXggN2Q2OGQ2MS4uYTU3ZTk2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9waHkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX3BoeS5jCkBAIC01MTcsMjMgKzUxNyw3IEBACiAJfQogfQogCi12b2lkIGFyOTAwMl9od19hdHRhY2hfcGh5X29wcyhzdHJ1Y3QgYXRoX2h3ICphaCkKLXsKLQlzdHJ1Y3QgYXRoX2h3X3ByaXZhdGVfb3BzICpwcml2X29wcyA9IGF0aDlrX2h3X3ByaXZhdGVfb3BzKGFoKTsKLQotCXByaXZfb3BzLT5zZXRfcmZfcmVncyA9IE5VTEw7Ci0JcHJpdl9vcHMtPnJmX2FsbG9jX2V4dF9iYW5rcyA9IE5VTEw7Ci0JcHJpdl9vcHMtPnJmX2ZyZWVfZXh0X2JhbmtzID0gTlVMTDsKLQlwcml2X29wcy0+cmZfc2V0X2ZyZXEgPSBhcjkwMDJfaHdfc2V0X2NoYW5uZWw7Ci0JcHJpdl9vcHMtPnNwdXJfbWl0aWdhdGVfZnJlcSA9IGFyOTAwMl9od19zcHVyX21pdGlnYXRlOwotCXByaXZfb3BzLT5vbGNfaW5pdCA9IGFyOTAwMl9vbGNfaW5pdDsKLQlwcml2X29wcy0+Y29tcHV0ZV9wbGxfY29udHJvbCA9IGFyOTAwMl9od19jb21wdXRlX3BsbF9jb250cm9sOwotCXByaXZfb3BzLT5kb19nZXRuZiA9IGFyOTAwMl9od19kb19nZXRuZjsKLQotCWFyOTAwMl9od19zZXRfbmZfbGltaXRzKGFoKTsKLX0KLQotdm9pZCBhdGg5a19od19hbnRkaXZfY29tYl9jb25mX2dldChzdHJ1Y3QgYXRoX2h3ICphaCwKK3N0YXRpYyB2b2lkIGFyOTAwMl9od19hbnRkaXZfY29tYl9jb25mX2dldChzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgICBzdHJ1Y3QgYXRoX2h3X2FudGNvbWJfY29uZiAqYW50Y29uZikKIHsKIAl1MzIgcmVndmFsOwpAQCAtNTQ1LDEwICs1MjksMTEgQEAKIAkJCQkgQVJfUEhZXzkyODVfQU5UX0RJVl9BTFRfTE5BQ09ORl9TOwogCWFudGNvbmYtPmZhc3RfZGl2X2JpYXMgPSAocmVndmFsICYgQVJfUEhZXzkyODVfRkFTVF9ESVZfQklBUykgPj4KIAkJCQkgIEFSX1BIWV85Mjg1X0ZBU1RfRElWX0JJQVNfUzsKKwlhbnRjb25mLT5sbmExX2xuYTJfZGVsdGEgPSAtMzsKKwlhbnRjb25mLT5kaXZfZ3JvdXAgPSAwOwogfQotRVhQT1JUX1NZTUJPTChhdGg5a19od19hbnRkaXZfY29tYl9jb25mX2dldCk7CiAKLXZvaWQgYXRoOWtfaHdfYW50ZGl2X2NvbWJfY29uZl9zZXQoc3RydWN0IGF0aF9odyAqYWgsCitzdGF0aWMgdm9pZCBhcjkwMDJfaHdfYW50ZGl2X2NvbWJfY29uZl9zZXQoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJICAgc3RydWN0IGF0aF9od19hbnRjb21iX2NvbmYgKmFudGNvbmYpCiB7CiAJdTMyIHJlZ3ZhbDsKQEAgLTU2Niw0ICs1NTEsMjMgQEAKIAogCVJFR19XUklURShhaCwgQVJfUEhZX01VTFRJQ0hBSU5fR0FJTl9DVEwsIHJlZ3ZhbCk7CiB9Ci1FWFBPUlRfU1lNQk9MKGF0aDlrX2h3X2FudGRpdl9jb21iX2NvbmZfc2V0KTsKKwordm9pZCBhcjkwMDJfaHdfYXR0YWNoX3BoeV9vcHMoc3RydWN0IGF0aF9odyAqYWgpCit7CisJc3RydWN0IGF0aF9od19wcml2YXRlX29wcyAqcHJpdl9vcHMgPSBhdGg5a19od19wcml2YXRlX29wcyhhaCk7CisJc3RydWN0IGF0aF9od19vcHMgKm9wcyA9IGF0aDlrX2h3X29wcyhhaCk7CisKKwlwcml2X29wcy0+c2V0X3JmX3JlZ3MgPSBOVUxMOworCXByaXZfb3BzLT5yZl9hbGxvY19leHRfYmFua3MgPSBOVUxMOworCXByaXZfb3BzLT5yZl9mcmVlX2V4dF9iYW5rcyA9IE5VTEw7CisJcHJpdl9vcHMtPnJmX3NldF9mcmVxID0gYXI5MDAyX2h3X3NldF9jaGFubmVsOworCXByaXZfb3BzLT5zcHVyX21pdGlnYXRlX2ZyZXEgPSBhcjkwMDJfaHdfc3B1cl9taXRpZ2F0ZTsKKwlwcml2X29wcy0+b2xjX2luaXQgPSBhcjkwMDJfb2xjX2luaXQ7CisJcHJpdl9vcHMtPmNvbXB1dGVfcGxsX2NvbnRyb2wgPSBhcjkwMDJfaHdfY29tcHV0ZV9wbGxfY29udHJvbDsKKwlwcml2X29wcy0+ZG9fZ2V0bmYgPSBhcjkwMDJfaHdfZG9fZ2V0bmY7CisKKwlvcHMtPmFudGRpdl9jb21iX2NvbmZfZ2V0ID0gYXI5MDAyX2h3X2FudGRpdl9jb21iX2NvbmZfZ2V0OworCW9wcy0+YW50ZGl2X2NvbWJfY29uZl9zZXQgPSBhcjkwMDJfaHdfYW50ZGl2X2NvbWJfY29uZl9zZXQ7CisKKwlhcjkwMDJfaHdfc2V0X25mX2xpbWl0cyhhaCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX3BoeS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9waHkuaAppbmRleCAzNzY2M2RiLi40Nzc4MGVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX3BoeS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfcGh5LmgKQEAgLTQ4Myw3ICs0ODMsMTEgQEAKICNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkxfSU5JVF9UWF9HQUlOICAgICAweDAxRjgwMDAwCiAjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMX0lOSVRfVFhfR0FJTl9TICAgMTkKIAorI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTDggICAgICAgMHhhMjc4CisKICNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkw5ICAgICAgIDB4YTI3QworCisjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMMTAgICAgICAgMHhhMzk0CiAjZGVmaW5lIEFSX1BIWV9UWF9ERVNJUkVEX1NDQUxFX0NDSyAgICAgICAgMHgwMDAwN0MwMAogI2RlZmluZSBBUl9QSFlfVFhfREVTSVJFRF9TQ0FMRV9DQ0tfUyAgICAgIDEwCiAjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMOV9SRVNfRENfUkVNT1ZBTCAgMHg4MDAwMDAwMApAQCAtNDk1LDYgKzQ5OSw4IEBACiAKICNkZWZpbmUgQVJfUEhZX0NIMF9UWF9QV1JDVFJMMTEgIDB4YTM5OAogI2RlZmluZSBBUl9QSFlfQ0gxX1RYX1BXUkNUUkwxMSAgMHhiMzk4CisjZGVmaW5lIEFSX1BIWV9DSDBfVFhfUFdSQ1RSTDEyICAweGEzZGMKKyNkZWZpbmUgQVJfUEhZX0NIMF9UWF9QV1JDVFJMMTMgIDB4YTNlMAogI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTF9PTFBDX1RFTVBfQ09NUCAgIDB4MDAwMEZDMDAKICNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkxfT0xQQ19URU1QX0NPTVBfUyAxMAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzXzJwMl9pbml0dmFscy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM18ycDJfaW5pdHZhbHMuaAppbmRleCA5ZWNjYTkzLi5mOTE1YTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzXzJwMl9pbml0dmFscy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfMnAyX2luaXR2YWxzLmgKQEAgLTM0LDEwICszNCwxMCBAQAogCiBzdGF0aWMgY29uc3QgdTMyIGFyOTMwME1vZGVzX2xvd2VzdF9vYl9kYl90eF9nYWluX3RhYmxlXzJwMltdWzVdID0gewogCS8qIEFkZHIgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgICAyR19IVDIwICAgKi8KLQl7MHgwMDAwYTJkYywgMHgwMDAzMzgwMCwgMHgwMDAzMzgwMCwgMHgwMDYzNzgwMCwgMHgwMDYzNzgwMH0sCi0JezB4MDAwMGEyZTAsIDB4MDAwM2MwMDAsIDB4MDAwM2MwMDAsIDB4MDM4MzgwMDAsIDB4MDM4MzgwMDB9LAotCXsweDAwMDBhMmU0LCAweDAzZmMwMDAwLCAweDAzZmMwMDAwLCAweDAzZmMwMDAwLCAweDAzZmMwMDAwfSwKLQl7MHgwMDAwYTJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyZGMsIDB4MDAwMzM4MDAsIDB4MDAwMzM4MDAsIDB4MDNhYWEzNTIsIDB4MDNhYWEzNTJ9LAorCXsweDAwMDBhMmUwLCAweDAwMDNjMDAwLCAweDAwMDNjMDAwLCAweDAzY2NjNTg0LCAweDAzY2NjNTg0fSwKKwl7MHgwMDAwYTJlNCwgMHgwM2ZjMDAwMCwgMHgwM2ZjMDAwMCwgMHgwM2YwZjgwMCwgMHgwM2YwZjgwMH0sCisJezB4MDAwMGEyZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDNmZjAwMDAsIDB4MDNmZjAwMDB9LAogCXsweDAwMDBhNDEwLCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5fSwKIAl7MHgwMDAwYTUwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCiAJezB4MDAwMGE1MDQsIDB4MDYwMDAwMDMsIDB4MDYwMDAwMDMsIDB4MDQwMDAwMDIsIDB4MDQwMDAwMDJ9LApAQCAtMTE5LDE0ICsxMTksMTQgQEAKIAl7MHgwMDAwYTYzNCwgMHgwNDQxMTEwNCwgMHgwNDQxMTEwNCwgMHgwNDAxNTAwNSwgMHgwNDAxNTAwNX0sCiAJezB4MDAwMGE2MzgsIDB4MDQ0MTExMDQsIDB4MDQ0MTExMDQsIDB4MDQwMTUwMDUsIDB4MDQwMTUwMDV9LAogCXsweDAwMDBhNjNjLCAweDA0NDExMTA0LCAweDA0NDExMTA0LCAweDA0MDE1MDA1LCAweDA0MDE1MDA1fSwKLQl7MHgwMDAwYjJkYywgMHgwMDAzMzgwMCwgMHgwMDAzMzgwMCwgMHgwMDYzNzgwMCwgMHgwMDYzNzgwMH0sCi0JezB4MDAwMGIyZTAsIDB4MDAwM2MwMDAsIDB4MDAwM2MwMDAsIDB4MDM4MzgwMDAsIDB4MDM4MzgwMDB9LAotCXsweDAwMDBiMmU0LCAweDAzZmMwMDAwLCAweDAzZmMwMDAwLCAweDAzZmMwMDAwLCAweDAzZmMwMDAwfSwKLQl7MHgwMDAwYjJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGMyZGMsIDB4MDAwMzM4MDAsIDB4MDAwMzM4MDAsIDB4MDA2Mzc4MDAsIDB4MDA2Mzc4MDB9LAotCXsweDAwMDBjMmUwLCAweDAwMDNjMDAwLCAweDAwMDNjMDAwLCAweDAzODM4MDAwLCAweDAzODM4MDAwfSwKLQl7MHgwMDAwYzJlNCwgMHgwM2ZjMDAwMCwgMHgwM2ZjMDAwMCwgMHgwM2ZjMDAwMCwgMHgwM2ZjMDAwMH0sCi0JezB4MDAwMGMyZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMmRjLCAweDAwMDMzODAwLCAweDAwMDMzODAwLCAweDAzYWFhMzUyLCAweDAzYWFhMzUyfSwKKwl7MHgwMDAwYjJlMCwgMHgwMDAzYzAwMCwgMHgwMDAzYzAwMCwgMHgwM2NjYzU4NCwgMHgwM2NjYzU4NH0sCisJezB4MDAwMGIyZTQsIDB4MDNmYzAwMDAsIDB4MDNmYzAwMDAsIDB4MDNmMGY4MDAsIDB4MDNmMGY4MDB9LAorCXsweDAwMDBiMmU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAzZmYwMDAwLCAweDAzZmYwMDAwfSwKKwl7MHgwMDAwYzJkYywgMHgwMDAzMzgwMCwgMHgwMDAzMzgwMCwgMHgwM2FhYTM1MiwgMHgwM2FhYTM1Mn0sCisJezB4MDAwMGMyZTAsIDB4MDAwM2MwMDAsIDB4MDAwM2MwMDAsIDB4MDNjY2M1ODQsIDB4MDNjY2M1ODR9LAorCXsweDAwMDBjMmU0LCAweDAzZmMwMDAwLCAweDAzZmMwMDAwLCAweDAzZjBmODAwLCAweDAzZjBmODAwfSwKKwl7MHgwMDAwYzJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwM2ZmMDAwMCwgMHgwM2ZmMDAwMH0sCiAJezB4MDAwMTYwNDQsIDB4MDEyNDkyZDQsIDB4MDEyNDkyZDQsIDB4MDEyNDkyZDQsIDB4MDEyNDkyZDR9LAogCXsweDAwMDE2MDQ4LCAweDYyNDgwMDAxLCAweDYyNDgwMDAxLCAweDYyNDgwMDAxLCAweDYyNDgwMDAxfSwKIAl7MHgwMDAxNjA2OCwgMHg2ZGI2ZGI2YywgMHg2ZGI2ZGI2YywgMHg2ZGI2ZGI2YywgMHg2ZGI2ZGI2Y30sCkBAIC04MzUsMTAgKzgzNSwxMCBAQAogCiBzdGF0aWMgY29uc3QgdTMyIGFyOTMwME1vZGVzX2hpZ2hfcG93ZXJfdHhfZ2Fpbl90YWJsZV8ycDJbXVs1XSA9IHsKIAkvKiBBZGRyICAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgICAgMkdfSFQ0MCAgICAgMkdfSFQyMCAgICovCi0JezB4MDAwMGEyZGMsIDB4MDM4MGM3ZmMsIDB4MDM4MGM3ZmMsIDB4MDA2Mzc4MDAsIDB4MDA2Mzc4MDB9LAotCXsweDAwMDBhMmUwLCAweDAwMDBmODAwLCAweDAwMDBmODAwLCAweDAzODM4MDAwLCAweDAzODM4MDAwfSwKLQl7MHgwMDAwYTJlNCwgMHgwM2ZmMDAwMCwgMHgwM2ZmMDAwMCwgMHgwM2ZjMDAwMCwgMHgwM2ZjMDAwMH0sCi0JezB4MDAwMGEyZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMmRjLCAweDAzODBjN2ZjLCAweDAzODBjN2ZjLCAweDAzYWFhMzUyLCAweDAzYWFhMzUyfSwKKwl7MHgwMDAwYTJlMCwgMHgwMDAwZjgwMCwgMHgwMDAwZjgwMCwgMHgwM2NjYzU4NCwgMHgwM2NjYzU4NH0sCisJezB4MDAwMGEyZTQsIDB4MDNmZjAwMDAsIDB4MDNmZjAwMDAsIDB4MDNmMGY4MDAsIDB4MDNmMGY4MDB9LAorCXsweDAwMDBhMmU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAzZmYwMDAwLCAweDAzZmYwMDAwfSwKIAl7MHgwMDAwYTQxMCwgMHgwMDAwNTBkOCwgMHgwMDAwNTBkOCwgMHgwMDAwNTBkOSwgMHgwMDAwNTBkOX0sCiAJezB4MDAwMGE1MDAsIDB4MDAwMDIyMjAsIDB4MDAwMDIyMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAogCXsweDAwMDBhNTA0LCAweDA0MDAyMjIyLCAweDA0MDAyMjIyLCAweDA0MDAwMDAyLCAweDA0MDAwMDAyfSwKQEAgLTkyMCwxNCArOTIwLDE0IEBACiAJezB4MDAwMGE2MzQsIDB4MDRjMTUzMDUsIDB4MDRjMTUzMDUsIDB4MDQwMTUwMDUsIDB4MDQwMTUwMDV9LAogCXsweDAwMDBhNjM4LCAweDA0YzE1MzA1LCAweDA0YzE1MzA1LCAweDA0MDE1MDA1LCAweDA0MDE1MDA1fSwKIAl7MHgwMDAwYTYzYywgMHgwNGMxNTMwNSwgMHgwNGMxNTMwNSwgMHgwNDAxNTAwNSwgMHgwNDAxNTAwNX0sCi0JezB4MDAwMGIyZGMsIDB4MDM4MGM3ZmMsIDB4MDM4MGM3ZmMsIDB4MDA2Mzc4MDAsIDB4MDA2Mzc4MDB9LAotCXsweDAwMDBiMmUwLCAweDAwMDBmODAwLCAweDAwMDBmODAwLCAweDAzODM4MDAwLCAweDAzODM4MDAwfSwKLQl7MHgwMDAwYjJlNCwgMHgwM2ZmMDAwMCwgMHgwM2ZmMDAwMCwgMHgwM2ZjMDAwMCwgMHgwM2ZjMDAwMH0sCi0JezB4MDAwMGIyZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBjMmRjLCAweDAzODBjN2ZjLCAweDAzODBjN2ZjLCAweDAwNjM3ODAwLCAweDAwNjM3ODAwfSwKLQl7MHgwMDAwYzJlMCwgMHgwMDAwZjgwMCwgMHgwMDAwZjgwMCwgMHgwMzgzODAwMCwgMHgwMzgzODAwMH0sCi0JezB4MDAwMGMyZTQsIDB4MDNmZjAwMDAsIDB4MDNmZjAwMDAsIDB4MDNmYzAwMDAsIDB4MDNmYzAwMDB9LAotCXsweDAwMDBjMmU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjJkYywgMHgwMzgwYzdmYywgMHgwMzgwYzdmYywgMHgwM2FhYTM1MiwgMHgwM2FhYTM1Mn0sCisJezB4MDAwMGIyZTAsIDB4MDAwMGY4MDAsIDB4MDAwMGY4MDAsIDB4MDNjY2M1ODQsIDB4MDNjY2M1ODR9LAorCXsweDAwMDBiMmU0LCAweDAzZmYwMDAwLCAweDAzZmYwMDAwLCAweDAzZjBmODAwLCAweDAzZjBmODAwfSwKKwl7MHgwMDAwYjJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwM2ZmMDAwMCwgMHgwM2ZmMDAwMH0sCisJezB4MDAwMGMyZGMsIDB4MDM4MGM3ZmMsIDB4MDM4MGM3ZmMsIDB4MDNhYWEzNTIsIDB4MDNhYWEzNTJ9LAorCXsweDAwMDBjMmUwLCAweDAwMDBmODAwLCAweDAwMDBmODAwLCAweDAzY2NjNTg0LCAweDAzY2NjNTg0fSwKKwl7MHgwMDAwYzJlNCwgMHgwM2ZmMDAwMCwgMHgwM2ZmMDAwMCwgMHgwM2YwZjgwMCwgMHgwM2YwZjgwMH0sCisJezB4MDAwMGMyZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDNmZjAwMDAsIDB4MDNmZjAwMDB9LAogCXsweDAwMDE2MDQ0LCAweDA1NmRiMmU2LCAweDA1NmRiMmU2LCAweDA1NmRiMmU2LCAweDA1NmRiMmU2fSwKIAl7MHgwMDAxNjA0OCwgMHhhZTQ4MDAwMSwgMHhhZTQ4MDAwMSwgMHhhZTQ4MDAwMSwgMHhhZTQ4MDAwMX0sCiAJezB4MDAwMTYwNjgsIDB4NmViNmRiNmMsIDB4NmViNmRiNmMsIDB4NmViNmRiNmMsIDB4NmViNmRiNmN9LApAQCAtOTQxLDEwICs5NDEsMTAgQEAKIAogc3RhdGljIGNvbnN0IHUzMiBhcjkzMDBNb2Rlc19oaWdoX29iX2RiX3R4X2dhaW5fdGFibGVfMnAyW11bNV0gPSB7CiAJLyogQWRkciAgICAgIDVHX0hUMjAgICAgIDVHX0hUNDAgICAgIDJHX0hUNDAgICAgIDJHX0hUMjAgICAqLwotCXsweDAwMDBhMmRjLCAweDAxZmVlZTAwLCAweDAxZmVlZTAwLCAweDAwNjM3ODAwLCAweDAwNjM3ODAwfSwKLQl7MHgwMDAwYTJlMCwgMHgwMDAwZjAwMCwgMHgwMDAwZjAwMCwgMHgwMzgzODAwMCwgMHgwMzgzODAwMH0sCi0JezB4MDAwMGEyZTQsIDB4MDFmZjAwMDAsIDB4MDFmZjAwMDAsIDB4MDNmYzAwMDAsIDB4MDNmYzAwMDB9LAotCXsweDAwMDBhMmU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTJkYywgMHgwMWZlZWUwMCwgMHgwMWZlZWUwMCwgMHgwM2FhYTM1MiwgMHgwM2FhYTM1Mn0sCisJezB4MDAwMGEyZTAsIDB4MDAwMGYwMDAsIDB4MDAwMGYwMDAsIDB4MDNjY2M1ODQsIDB4MDNjY2M1ODR9LAorCXsweDAwMDBhMmU0LCAweDAxZmYwMDAwLCAweDAxZmYwMDAwLCAweDAzZjBmODAwLCAweDAzZjBmODAwfSwKKwl7MHgwMDAwYTJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwM2ZmMDAwMCwgMHgwM2ZmMDAwMH0sCiAJezB4MDAwMGE0MTAsIDB4MDAwMDUwZDgsIDB4MDAwMDUwZDgsIDB4MDAwMDUwZDksIDB4MDAwMDUwZDl9LAogCXsweDAwMDBhNTAwLCAweDAwMDAyMjIwLCAweDAwMDAyMjIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKIAl7MHgwMDAwYTUwNCwgMHgwNDAwMjIyMiwgMHgwNDAwMjIyMiwgMHgwNDAwMDAwMiwgMHgwNDAwMDAwMn0sCkBAIC0xMDI2LDE0ICsxMDI2LDE0IEBACiAJezB4MDAwMGE2MzQsIDB4MDRjMTUzMDUsIDB4MDRjMTUzMDUsIDB4MDQwMTUwMDUsIDB4MDQwMTUwMDV9LAogCXsweDAwMDBhNjM4LCAweDA0YzE1MzA1LCAweDA0YzE1MzA1LCAweDA0MDE1MDA1LCAweDA0MDE1MDA1fSwKIAl7MHgwMDAwYTYzYywgMHgwNGMxNTMwNSwgMHgwNGMxNTMwNSwgMHgwNDAxNTAwNSwgMHgwNDAxNTAwNX0sCi0JezB4MDAwMGIyZGMsIDB4MDFmZWVlMDAsIDB4MDFmZWVlMDAsIDB4MDA2Mzc4MDAsIDB4MDA2Mzc4MDB9LAotCXsweDAwMDBiMmUwLCAweDAwMDBmMDAwLCAweDAwMDBmMDAwLCAweDAzODM4MDAwLCAweDAzODM4MDAwfSwKLQl7MHgwMDAwYjJlNCwgMHgwMWZmMDAwMCwgMHgwMWZmMDAwMCwgMHgwM2ZjMDAwMCwgMHgwM2ZjMDAwMH0sCi0JezB4MDAwMGIyZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBjMmRjLCAweDAxZmVlZTAwLCAweDAxZmVlZTAwLCAweDAwNjM3ODAwLCAweDAwNjM3ODAwfSwKLQl7MHgwMDAwYzJlMCwgMHgwMDAwZjAwMCwgMHgwMDAwZjAwMCwgMHgwMzgzODAwMCwgMHgwMzgzODAwMH0sCi0JezB4MDAwMGMyZTQsIDB4MDFmZjAwMDAsIDB4MDFmZjAwMDAsIDB4MDNmYzAwMDAsIDB4MDNmYzAwMDB9LAotCXsweDAwMDBjMmU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjJkYywgMHgwMWZlZWUwMCwgMHgwMWZlZWUwMCwgMHgwM2FhYTM1MiwgMHgwM2FhYTM1Mn0sCisJezB4MDAwMGIyZTAsIDB4MDAwMGYwMDAsIDB4MDAwMGYwMDAsIDB4MDNjY2M1ODQsIDB4MDNjY2M1ODR9LAorCXsweDAwMDBiMmU0LCAweDAxZmYwMDAwLCAweDAxZmYwMDAwLCAweDAzZjBmODAwLCAweDAzZjBmODAwfSwKKwl7MHgwMDAwYjJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwM2ZmMDAwMCwgMHgwM2ZmMDAwMH0sCisJezB4MDAwMGMyZGMsIDB4MDFmZWVlMDAsIDB4MDFmZWVlMDAsIDB4MDNhYWEzNTIsIDB4MDNhYWEzNTJ9LAorCXsweDAwMDBjMmUwLCAweDAwMDBmMDAwLCAweDAwMDBmMDAwLCAweDAzY2NjNTg0LCAweDAzY2NjNTg0fSwKKwl7MHgwMDAwYzJlNCwgMHgwMWZmMDAwMCwgMHgwMWZmMDAwMCwgMHgwM2YwZjgwMCwgMHgwM2YwZjgwMH0sCisJezB4MDAwMGMyZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDNmZjAwMDAsIDB4MDNmZjAwMDB9LAogCXsweDAwMDE2MDQ0LCAweDA1NmRiMmU0LCAweDA1NmRiMmU0LCAweDA1NmRiMmU0LCAweDA1NmRiMmU0fSwKIAl7MHgwMDAxNjA0OCwgMHg4ZTQ4MDAwMSwgMHg4ZTQ4MDAwMSwgMHg4ZTQ4MDAwMSwgMHg4ZTQ4MDAwMX0sCiAJezB4MDAwMTYwNjgsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmN9LApAQCAtMTMwNywxMCArMTMwNywxMCBAQAogCiBzdGF0aWMgY29uc3QgdTMyIGFyOTMwME1vZGVzX2xvd19vYl9kYl90eF9nYWluX3RhYmxlXzJwMltdWzVdID0gewogCS8qIEFkZHIgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgICAyR19IVDIwICAgKi8KLQl7MHgwMDAwYTJkYywgMHgwMzgwYzdmYywgMHgwMzgwYzdmYywgMHgwMDYzNzgwMCwgMHgwMDYzNzgwMH0sCi0JezB4MDAwMGEyZTAsIDB4MDAwMGY4MDAsIDB4MDAwMGY4MDAsIDB4MDM4MzgwMDAsIDB4MDM4MzgwMDB9LAotCXsweDAwMDBhMmU0LCAweDAzZmYwMDAwLCAweDAzZmYwMDAwLCAweDAzZmMwMDAwLCAweDAzZmMwMDAwfSwKLQl7MHgwMDAwYTJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyZGMsIDB4MDAwMzM4MDAsIDB4MDAwMzM4MDAsIDB4MDNhYWEzNTIsIDB4MDNhYWEzNTJ9LAorCXsweDAwMDBhMmUwLCAweDAwMDNjMDAwLCAweDAwMDNjMDAwLCAweDAzY2NjNTg0LCAweDAzY2NjNTg0fSwKKwl7MHgwMDAwYTJlNCwgMHgwM2ZjMDAwMCwgMHgwM2ZjMDAwMCwgMHgwM2YwZjgwMCwgMHgwM2YwZjgwMH0sCisJezB4MDAwMGEyZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDNmZjAwMDAsIDB4MDNmZjAwMDB9LAogCXsweDAwMDBhNDEwLCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5fSwKIAl7MHgwMDAwYTUwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCiAJezB4MDAwMGE1MDQsIDB4MDYwMDAwMDMsIDB4MDYwMDAwMDMsIDB4MDQwMDAwMDIsIDB4MDQwMDAwMDJ9LApAQCAtMTMyOSwyMSArMTMyOSwyMSBAQAogCXsweDAwMDBhNTM4LCAweDQ3MDIyNDRhLCAweDQ3MDIyNDRhLCAweDM0MDAwZTI0LCAweDM0MDAwZTI0fSwKIAl7MHgwMDAwYTUzYywgMHg0YjAyMjQ0YywgMHg0YjAyMjQ0YywgMHgzODAwMTY0MCwgMHgzODAwMTY0MH0sCiAJezB4MDAwMGE1NDAsIDB4NGUwMjI0NmMsIDB4NGUwMjI0NmMsIDB4M2MwMDE2NjAsIDB4M2MwMDE2NjB9LAotCXsweDAwMDBhNTQ0LCAweDUzMDIyNjZjLCAweDUzMDIyNjZjLCAweDNmMDAxODYxLCAweDNmMDAxODYxfSwKLQl7MHgwMDAwYTU0OCwgMHg1NzAyMjg2YywgMHg1NzAyMjg2YywgMHg0MzAwMWE4MSwgMHg0MzAwMWE4MX0sCi0JezB4MDAwMGE1NGMsIDB4NWMwMjQ4NmIsIDB4NWMwMjQ4NmIsIDB4NDcwMDFhODMsIDB4NDcwMDFhODN9LAotCXsweDAwMDBhNTUwLCAweDYxMDI0YTZjLCAweDYxMDI0YTZjLCAweDRhMDAxYzg0LCAweDRhMDAxYzg0fSwKLQl7MHgwMDAwYTU1NCwgMHg2NjAyNmE2YywgMHg2NjAyNmE2YywgMHg0ZTAwMWNlMywgMHg0ZTAwMWNlM30sCi0JezB4MDAwMGE1NTgsIDB4NmIwMjZlNmMsIDB4NmIwMjZlNmMsIDB4NTIwMDFjZTUsIDB4NTIwMDFjZTV9LAotCXsweDAwMDBhNTVjLCAweDcwMDI3MDhjLCAweDcwMDI3MDhjLCAweDU2MDAxY2U5LCAweDU2MDAxY2U5fSwKLQl7MHgwMDAwYTU2MCwgMHg3MzAyYjA4YSwgMHg3MzAyYjA4YSwgMHg1YTAwMWNlYiwgMHg1YTAwMWNlYn0sCi0JezB4MDAwMGE1NjQsIDB4NzcwMmIwOGMsIDB4NzcwMmIwOGMsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAotCXsweDAwMDBhNTY4LCAweDc3MDJiMDhjLCAweDc3MDJiMDhjLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKLQl7MHgwMDAwYTU2YywgMHg3NzAyYjA4YywgMHg3NzAyYjA4YywgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCi0JezB4MDAwMGE1NzAsIDB4NzcwMmIwOGMsIDB4NzcwMmIwOGMsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAotCXsweDAwMDBhNTc0LCAweDc3MDJiMDhjLCAweDc3MDJiMDhjLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKLQl7MHgwMDAwYTU3OCwgMHg3NzAyYjA4YywgMHg3NzAyYjA4YywgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCi0JezB4MDAwMGE1N2MsIDB4NzcwMmIwOGMsIDB4NzcwMmIwOGMsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAorCXsweDAwMDBhNTQ0LCAweDUyMDIyNDcwLCAweDUyMDIyNDcwLCAweDNmMDAxODYxLCAweDNmMDAxODYxfSwKKwl7MHgwMDAwYTU0OCwgMHg1NTAyMjQ5MCwgMHg1NTAyMjQ5MCwgMHg0MzAwMWE4MSwgMHg0MzAwMWE4MX0sCisJezB4MDAwMGE1NGMsIDB4NTkwMjI0OTIsIDB4NTkwMjI0OTIsIDB4NDcwMDFhODMsIDB4NDcwMDFhODN9LAorCXsweDAwMDBhNTUwLCAweDVkMDIyNjkyLCAweDVkMDIyNjkyLCAweDRhMDAxYzg0LCAweDRhMDAxYzg0fSwKKwl7MHgwMDAwYTU1NCwgMHg2MTAyMjg5MiwgMHg2MTAyMjg5MiwgMHg0ZTAwMWNlMywgMHg0ZTAwMWNlM30sCisJezB4MDAwMGE1NTgsIDB4NjUwMjQ4OTAsIDB4NjUwMjQ4OTAsIDB4NTIwMDFjZTUsIDB4NTIwMDFjZTV9LAorCXsweDAwMDBhNTVjLCAweDY5MDI0ODkyLCAweDY5MDI0ODkyLCAweDU2MDAxY2U5LCAweDU2MDAxY2U5fSwKKwl7MHgwMDAwYTU2MCwgMHg2ZTAyNGM5MiwgMHg2ZTAyNGM5MiwgMHg1YTAwMWNlYiwgMHg1YTAwMWNlYn0sCisJezB4MDAwMGE1NjQsIDB4NzQwMjZlOTIsIDB4NzQwMjZlOTIsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAorCXsweDAwMDBhNTY4LCAweDc0MDI2ZTkyLCAweDc0MDI2ZTkyLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKKwl7MHgwMDAwYTU2YywgMHg3NDAyNmU5MiwgMHg3NDAyNmU5MiwgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCisJezB4MDAwMGE1NzAsIDB4NzQwMjZlOTIsIDB4NzQwMjZlOTIsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAorCXsweDAwMDBhNTc0LCAweDc0MDI2ZTkyLCAweDc0MDI2ZTkyLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKKwl7MHgwMDAwYTU3OCwgMHg3NDAyNmU5MiwgMHg3NDAyNmU5MiwgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCisJezB4MDAwMGE1N2MsIDB4NzQwMjZlOTIsIDB4NzQwMjZlOTIsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAogCXsweDAwMDBhNTgwLCAweDAwODAwMDAwLCAweDAwODAwMDAwLCAweDAwODAwMDAwLCAweDAwODAwMDAwfSwKIAl7MHgwMDAwYTU4NCwgMHgwNjgwMDAwMywgMHgwNjgwMDAwMywgMHgwNDgwMDAwMiwgMHgwNDgwMDAwMn0sCiAJezB4MDAwMGE1ODgsIDB4MGE4MDAwMjAsIDB4MGE4MDAwMjAsIDB4MDg4MDAwMDQsIDB4MDg4MDAwMDR9LApAQCAtMTM2MSw0NSArMTM2MSw0NSBAQAogCXsweDAwMDBhNWI4LCAweDQ3ODIyNDRhLCAweDQ3ODIyNDRhLCAweDM0ODAwZTI0LCAweDM0ODAwZTI0fSwKIAl7MHgwMDAwYTViYywgMHg0YjgyMjQ0YywgMHg0YjgyMjQ0YywgMHgzODgwMTY0MCwgMHgzODgwMTY0MH0sCiAJezB4MDAwMGE1YzAsIDB4NGU4MjI0NmMsIDB4NGU4MjI0NmMsIDB4M2M4MDE2NjAsIDB4M2M4MDE2NjB9LAotCXsweDAwMDBhNWM0LCAweDUzODIyNjZjLCAweDUzODIyNjZjLCAweDNmODAxODYxLCAweDNmODAxODYxfSwKLQl7MHgwMDAwYTVjOCwgMHg1NzgyMjg2YywgMHg1NzgyMjg2YywgMHg0MzgwMWE4MSwgMHg0MzgwMWE4MX0sCi0JezB4MDAwMGE1Y2MsIDB4NWM4MjQ4NmIsIDB4NWM4MjQ4NmIsIDB4NDc4MDFhODMsIDB4NDc4MDFhODN9LAotCXsweDAwMDBhNWQwLCAweDYxODI0YTZjLCAweDYxODI0YTZjLCAweDRhODAxYzg0LCAweDRhODAxYzg0fSwKLQl7MHgwMDAwYTVkNCwgMHg2NjgyNmE2YywgMHg2NjgyNmE2YywgMHg0ZTgwMWNlMywgMHg0ZTgwMWNlM30sCi0JezB4MDAwMGE1ZDgsIDB4NmI4MjZlNmMsIDB4NmI4MjZlNmMsIDB4NTI4MDFjZTUsIDB4NTI4MDFjZTV9LAotCXsweDAwMDBhNWRjLCAweDcwODI3MDhjLCAweDcwODI3MDhjLCAweDU2ODAxY2U5LCAweDU2ODAxY2U5fSwKLQl7MHgwMDAwYTVlMCwgMHg3MzgyYjA4YSwgMHg3MzgyYjA4YSwgMHg1YTgwMWNlYiwgMHg1YTgwMWNlYn0sCi0JezB4MDAwMGE1ZTQsIDB4Nzc4MmIwOGMsIDB4Nzc4MmIwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAotCXsweDAwMDBhNWU4LCAweDc3ODJiMDhjLCAweDc3ODJiMDhjLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKLQl7MHgwMDAwYTVlYywgMHg3NzgyYjA4YywgMHg3NzgyYjA4YywgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCi0JezB4MDAwMGE1ZjAsIDB4Nzc4MmIwOGMsIDB4Nzc4MmIwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAotCXsweDAwMDBhNWY0LCAweDc3ODJiMDhjLCAweDc3ODJiMDhjLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKLQl7MHgwMDAwYTVmOCwgMHg3NzgyYjA4YywgMHg3NzgyYjA4YywgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCi0JezB4MDAwMGE1ZmMsIDB4Nzc4MmIwOGMsIDB4Nzc4MmIwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAorCXsweDAwMDBhNWM0LCAweDUyODIyNDcwLCAweDUyODIyNDcwLCAweDNmODAxODYxLCAweDNmODAxODYxfSwKKwl7MHgwMDAwYTVjOCwgMHg1NTgyMjQ5MCwgMHg1NTgyMjQ5MCwgMHg0MzgwMWE4MSwgMHg0MzgwMWE4MX0sCisJezB4MDAwMGE1Y2MsIDB4NTk4MjI0OTIsIDB4NTk4MjI0OTIsIDB4NDc4MDFhODMsIDB4NDc4MDFhODN9LAorCXsweDAwMDBhNWQwLCAweDVkODIyNjkyLCAweDVkODIyNjkyLCAweDRhODAxYzg0LCAweDRhODAxYzg0fSwKKwl7MHgwMDAwYTVkNCwgMHg2MTgyMjg5MiwgMHg2MTgyMjg5MiwgMHg0ZTgwMWNlMywgMHg0ZTgwMWNlM30sCisJezB4MDAwMGE1ZDgsIDB4NjU4MjQ4OTAsIDB4NjU4MjQ4OTAsIDB4NTI4MDFjZTUsIDB4NTI4MDFjZTV9LAorCXsweDAwMDBhNWRjLCAweDY5ODI0ODkyLCAweDY5ODI0ODkyLCAweDU2ODAxY2U5LCAweDU2ODAxY2U5fSwKKwl7MHgwMDAwYTVlMCwgMHg2ZTgyNGM5MiwgMHg2ZTgyNGM5MiwgMHg1YTgwMWNlYiwgMHg1YTgwMWNlYn0sCisJezB4MDAwMGE1ZTQsIDB4NzQ4MjZlOTIsIDB4NzQ4MjZlOTIsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAorCXsweDAwMDBhNWU4LCAweDc0ODI2ZTkyLCAweDc0ODI2ZTkyLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKKwl7MHgwMDAwYTVlYywgMHg3NDgyNmU5MiwgMHg3NDgyNmU5MiwgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCisJezB4MDAwMGE1ZjAsIDB4NzQ4MjZlOTIsIDB4NzQ4MjZlOTIsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAorCXsweDAwMDBhNWY0LCAweDc0ODI2ZTkyLCAweDc0ODI2ZTkyLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKKwl7MHgwMDAwYTVmOCwgMHg3NDgyNmU5MiwgMHg3NDgyNmU5MiwgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCisJezB4MDAwMGE1ZmMsIDB4NzQ4MjZlOTIsIDB4NzQ4MjZlOTIsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAogCXsweDAwMDBhNjAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKIAl7MHgwMDAwYTYwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCiAJezB4MDAwMGE2MDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAogCXsweDAwMDBhNjBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKIAl7MHgwMDAwYTYxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE2MTQsIDB4MDE0MDQwMDAsIDB4MDE0MDQwMDAsIDB4MDE0MDQwMDAsIDB4MDE0MDQwMDB9LAotCXsweDAwMDBhNjE4LCAweDAxNDA0NTAxLCAweDAxNDA0NTAxLCAweDAxNDA0NTAxLCAweDAxNDA0NTAxfSwKLQl7MHgwMDAwYTYxYywgMHgwMjAwODgwMiwgMHgwMjAwODgwMiwgMHgwMjAwODUwMSwgMHgwMjAwODUwMX0sCi0JezB4MDAwMGE2MjAsIDB4MDMwMGNjMDMsIDB4MDMwMGNjMDMsIDB4MDI4MGNhMDMsIDB4MDI4MGNhMDN9LAotCXsweDAwMDBhNjI0LCAweDAzMDBjYzAzLCAweDAzMDBjYzAzLCAweDAzMDEwYzA0LCAweDAzMDEwYzA0fSwKLQl7MHgwMDAwYTYyOCwgMHgwMzAwY2MwMywgMHgwMzAwY2MwMywgMHgwNDAxNGMwNCwgMHgwNDAxNGMwNH0sCi0JezB4MDAwMGE2MmMsIDB4MDM4MTBjMDMsIDB4MDM4MTBjMDMsIDB4MDQwMTUwMDUsIDB4MDQwMTUwMDV9LAotCXsweDAwMDBhNjMwLCAweDAzODEwZTA0LCAweDAzODEwZTA0LCAweDA0MDE1MDA1LCAweDA0MDE1MDA1fSwKLQl7MHgwMDAwYTYzNCwgMHgwMzgxMGUwNCwgMHgwMzgxMGUwNCwgMHgwNDAxNTAwNSwgMHgwNDAxNTAwNX0sCi0JezB4MDAwMGE2MzgsIDB4MDM4MTBlMDQsIDB4MDM4MTBlMDQsIDB4MDQwMTUwMDUsIDB4MDQwMTUwMDV9LAotCXsweDAwMDBhNjNjLCAweDAzODEwZTA0LCAweDAzODEwZTA0LCAweDA0MDE1MDA1LCAweDA0MDE1MDA1fSwKLQl7MHgwMDAwYjJkYywgMHgwMzgwYzdmYywgMHgwMzgwYzdmYywgMHgwMDYzNzgwMCwgMHgwMDYzNzgwMH0sCi0JezB4MDAwMGIyZTAsIDB4MDAwMGY4MDAsIDB4MDAwMGY4MDAsIDB4MDM4MzgwMDAsIDB4MDM4MzgwMDB9LAotCXsweDAwMDBiMmU0LCAweDAzZmYwMDAwLCAweDAzZmYwMDAwLCAweDAzZmMwMDAwLCAweDAzZmMwMDAwfSwKLQl7MHgwMDAwYjJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGMyZGMsIDB4MDM4MGM3ZmMsIDB4MDM4MGM3ZmMsIDB4MDA2Mzc4MDAsIDB4MDA2Mzc4MDB9LAotCXsweDAwMDBjMmUwLCAweDAwMDBmODAwLCAweDAwMDBmODAwLCAweDAzODM4MDAwLCAweDAzODM4MDAwfSwKLQl7MHgwMDAwYzJlNCwgMHgwM2ZmMDAwMCwgMHgwM2ZmMDAwMCwgMHgwM2ZjMDAwMCwgMHgwM2ZjMDAwMH0sCi0JezB4MDAwMGMyZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjE0LCAweDAyMDA0MDAwLCAweDAyMDA0MDAwLCAweDAxNDA0MDAwLCAweDAxNDA0MDAwfSwKKwl7MHgwMDAwYTYxOCwgMHgwMjAwNDgwMSwgMHgwMjAwNDgwMSwgMHgwMTQwNDUwMSwgMHgwMTQwNDUwMX0sCisJezB4MDAwMGE2MWMsIDB4MDI4MDhhMDIsIDB4MDI4MDhhMDIsIDB4MDIwMDg1MDEsIDB4MDIwMDg1MDF9LAorCXsweDAwMDBhNjIwLCAweDAzODBjZTAzLCAweDAzODBjZTAzLCAweDAyODBjYTAzLCAweDAyODBjYTAzfSwKKwl7MHgwMDAwYTYyNCwgMHgwNDQxMTEwNCwgMHgwNDQxMTEwNCwgMHgwMzAxMGMwNCwgMHgwMzAxMGMwNH0sCisJezB4MDAwMGE2MjgsIDB4MDQ0MTExMDQsIDB4MDQ0MTExMDQsIDB4MDQwMTRjMDQsIDB4MDQwMTRjMDR9LAorCXsweDAwMDBhNjJjLCAweDA0NDExMTA0LCAweDA0NDExMTA0LCAweDA0MDE1MDA1LCAweDA0MDE1MDA1fSwKKwl7MHgwMDAwYTYzMCwgMHgwNDQxMTEwNCwgMHgwNDQxMTEwNCwgMHgwNDAxNTAwNSwgMHgwNDAxNTAwNX0sCisJezB4MDAwMGE2MzQsIDB4MDQ0MTExMDQsIDB4MDQ0MTExMDQsIDB4MDQwMTUwMDUsIDB4MDQwMTUwMDV9LAorCXsweDAwMDBhNjM4LCAweDA0NDExMTA0LCAweDA0NDExMTA0LCAweDA0MDE1MDA1LCAweDA0MDE1MDA1fSwKKwl7MHgwMDAwYTYzYywgMHgwNDQxMTEwNCwgMHgwNDQxMTEwNCwgMHgwNDAxNTAwNSwgMHgwNDAxNTAwNX0sCisJezB4MDAwMGIyZGMsIDB4MDAwMzM4MDAsIDB4MDAwMzM4MDAsIDB4MDNhYWEzNTIsIDB4MDNhYWEzNTJ9LAorCXsweDAwMDBiMmUwLCAweDAwMDNjMDAwLCAweDAwMDNjMDAwLCAweDAzY2NjNTg0LCAweDAzY2NjNTg0fSwKKwl7MHgwMDAwYjJlNCwgMHgwM2ZjMDAwMCwgMHgwM2ZjMDAwMCwgMHgwM2YwZjgwMCwgMHgwM2YwZjgwMH0sCisJezB4MDAwMGIyZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDNmZjAwMDAsIDB4MDNmZjAwMDB9LAorCXsweDAwMDBjMmRjLCAweDAwMDMzODAwLCAweDAwMDMzODAwLCAweDAzYWFhMzUyLCAweDAzYWFhMzUyfSwKKwl7MHgwMDAwYzJlMCwgMHgwMDAzYzAwMCwgMHgwMDAzYzAwMCwgMHgwM2NjYzU4NCwgMHgwM2NjYzU4NH0sCisJezB4MDAwMGMyZTQsIDB4MDNmYzAwMDAsIDB4MDNmYzAwMDAsIDB4MDNmMGY4MDAsIDB4MDNmMGY4MDB9LAorCXsweDAwMDBjMmU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAzZmYwMDAwLCAweDAzZmYwMDAwfSwKIAl7MHgwMDAxNjA0NCwgMHgwMTI0OTJkNCwgMHgwMTI0OTJkNCwgMHgwMTI0OTJkNCwgMHgwMTI0OTJkNH0sCiAJezB4MDAwMTYwNDgsIDB4NjY0ODAwMDEsIDB4NjY0ODAwMDEsIDB4NjY0ODAwMDEsIDB4NjY0ODAwMDF9LAogCXsweDAwMDE2MDY4LCAweDZkYjZkYjZjLCAweDZkYjZkYjZjLCAweDZkYjZkYjZjLCAweDZkYjZkYjZjfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfY2FsaWIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfY2FsaWIuYwppbmRleCA0YTRjZDg4Li5mMjc2Y2I5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2NhbGliLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19jYWxpYi5jCkBAIC0xOCwxMyArMTgsMTMgQEAKICNpbmNsdWRlICJody1vcHMuaCIKICNpbmNsdWRlICJhcjkwMDNfcGh5LmgiCiAKLSNkZWZpbmUgTVBBU1MJMwogI2RlZmluZSBNQVhfTUVBU1VSRU1FTlQJOAotI2RlZmluZSBNQVhfRElGRkVSRU5DRQkxMAorI2RlZmluZSBNQVhfTUFHX0RFTFRBCTExCisjZGVmaW5lIE1BWF9QSFNfREVMVEEJMTAKIAogc3RydWN0IGNvZWZmIHsKLQlpbnQgbWFnX2NvZWZmW0FSOTMwMF9NQVhfQ0hBSU5TXVtNQVhfTUVBU1VSRU1FTlRdW01QQVNTXTsKLQlpbnQgcGhzX2NvZWZmW0FSOTMwMF9NQVhfQ0hBSU5TXVtNQVhfTUVBU1VSRU1FTlRdW01QQVNTXTsKKwlpbnQgbWFnX2NvZWZmW0FSOTMwMF9NQVhfQ0hBSU5TXVtNQVhfTUVBU1VSRU1FTlRdOworCWludCBwaHNfY29lZmZbQVI5MzAwX01BWF9DSEFJTlNdW01BWF9NRUFTVVJFTUVOVF07CiAJaW50IGlxY19jb2VmZlsyXTsKIH07CiAKQEAgLTE4NSwxNyArMTg1LDE5IEBACiAKIAkvKiBBY2N1bXVsYXRlIElRIGNhbCBtZWFzdXJlcyBmb3IgYWN0aXZlIGNoYWlucyAqLwogCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7Ci0JCWFoLT50b3RhbFBvd2VyTWVhc0lbaV0gKz0KLQkJCVJFR19SRUFEKGFoLCBBUl9QSFlfQ0FMX01FQVNfMChpKSk7Ci0JCWFoLT50b3RhbFBvd2VyTWVhc1FbaV0gKz0KLQkJCVJFR19SRUFEKGFoLCBBUl9QSFlfQ0FMX01FQVNfMShpKSk7Ci0JCWFoLT50b3RhbElxQ29yck1lYXNbaV0gKz0KLQkJCShpbnQzMl90KSBSRUdfUkVBRChhaCwgQVJfUEhZX0NBTF9NRUFTXzIoaSkpOwotCQlhdGhfZGJnKGF0aDlrX2h3X2NvbW1vbihhaCksIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJIiVkOiBDaG4gJWQgcG1pPTB4JTA4eDtwbXE9MHglMDh4O2lxY209MHglMDh4O1xuIiwKLQkJCWFoLT5jYWxfc2FtcGxlcywgaSwgYWgtPnRvdGFsUG93ZXJNZWFzSVtpXSwKLQkJCWFoLT50b3RhbFBvd2VyTWVhc1FbaV0sCi0JCQlhaC0+dG90YWxJcUNvcnJNZWFzW2ldKTsKKwkJaWYgKGFoLT50eGNoYWlubWFzayAmIEJJVChpKSkgeworCQkJYWgtPnRvdGFsUG93ZXJNZWFzSVtpXSArPQorCQkJCVJFR19SRUFEKGFoLCBBUl9QSFlfQ0FMX01FQVNfMChpKSk7CisJCQlhaC0+dG90YWxQb3dlck1lYXNRW2ldICs9CisJCQkJUkVHX1JFQUQoYWgsIEFSX1BIWV9DQUxfTUVBU18xKGkpKTsKKwkJCWFoLT50b3RhbElxQ29yck1lYXNbaV0gKz0KKwkJCQkoaW50MzJfdCkgUkVHX1JFQUQoYWgsIEFSX1BIWV9DQUxfTUVBU18yKGkpKTsKKwkJCWF0aF9kYmcoYXRoOWtfaHdfY29tbW9uKGFoKSwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkJIiVkOiBDaG4gJWQgcG1pPTB4JTA4eDtwbXE9MHglMDh4O2lxY209MHglMDh4O1xuIiwKKwkJCQlhaC0+Y2FsX3NhbXBsZXMsIGksIGFoLT50b3RhbFBvd2VyTWVhc0lbaV0sCisJCQkJYWgtPnRvdGFsUG93ZXJNZWFzUVtpXSwKKwkJCQlhaC0+dG90YWxJcUNvcnJNZWFzW2ldKTsKKwkJfQogCX0KIH0KIApAQCAtNjA4LDM2ICs2MTAsNDggQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgYXI5MDAzX2h3X2NvbXB1dGVfY2xvc2VzdF9wYXNzX2FuZF9hdmcoaW50ICptcF9jb2VmZiwgaW50ICptcF9hdmcpCitzdGF0aWMgdm9pZCBhcjkwMDNfaHdfZGV0ZWN0X291dGxpZXIoaW50ICptcF9jb2VmZiwgaW50IG5tZWFzdXJlbWVudCwKKwkJCQkgICAgIGludCBtYXhfZGVsdGEpCiB7Ci0JaW50IGRpZmZbTVBBU1NdOworCWludCBtcF9tYXggPSAtNjQsIG1heF9pZHggPSAwOworCWludCBtcF9taW4gPSA2MywgbWluX2lkeCA9IDA7CisJaW50IG1wX2F2ZyA9IDAsIGksIG91dGxpZXJfaWR4ID0gMDsKIAotCWRpZmZbMF0gPSBhYnMobXBfY29lZmZbMF0gLSBtcF9jb2VmZlsxXSk7Ci0JZGlmZlsxXSA9IGFicyhtcF9jb2VmZlsxXSAtIG1wX2NvZWZmWzJdKTsKLQlkaWZmWzJdID0gYWJzKG1wX2NvZWZmWzJdIC0gbXBfY29lZmZbMF0pOworCS8qIGZpbmQgbWluL21heCBtaXNtYXRjaCBhY3Jvc3MgYWxsIGNhbGlicmF0ZWQgZ2FpbnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbm1lYXN1cmVtZW50OyBpKyspIHsKKwkJbXBfYXZnICs9IG1wX2NvZWZmW2ldOworCQlpZiAobXBfY29lZmZbaV0gPiBtcF9tYXgpIHsKKwkJCW1wX21heCA9IG1wX2NvZWZmW2ldOworCQkJbWF4X2lkeCA9IGk7CisJCX0gZWxzZSBpZiAobXBfY29lZmZbaV0gPCBtcF9taW4pIHsKKwkJCW1wX21pbiA9IG1wX2NvZWZmW2ldOworCQkJbWluX2lkeCA9IGk7CisJCX0KKwl9CiAKLQlpZiAoZGlmZlswXSA+IE1BWF9ESUZGRVJFTkNFICYmCi0JICAgIGRpZmZbMV0gPiBNQVhfRElGRkVSRU5DRSAmJgotCSAgICBkaWZmWzJdID4gTUFYX0RJRkZFUkVOQ0UpCi0JCXJldHVybiBmYWxzZTsKKwkvKiBmaW5kIGF2ZXJhZ2UgKGV4Y2x1ZGUgbWF4IGFicyB2YWx1ZSkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbm1lYXN1cmVtZW50OyBpKyspIHsKKwkJaWYgKChhYnMobXBfY29lZmZbaV0pIDwgYWJzKG1wX21heCkpIHx8CisJCSAgICAoYWJzKG1wX2NvZWZmW2ldKSA8IGFicyhtcF9taW4pKSkKKwkJCW1wX2F2ZyArPSBtcF9jb2VmZltpXTsKKwl9CisJbXBfYXZnIC89IChubWVhc3VyZW1lbnQgLSAxKTsKIAotCWlmIChkaWZmWzBdIDw9IGRpZmZbMV0gJiYgZGlmZlswXSA8PSBkaWZmWzJdKQotCQkqbXBfYXZnID0gKG1wX2NvZWZmWzBdICsgbXBfY29lZmZbMV0pIC8gMjsKLQllbHNlIGlmIChkaWZmWzFdIDw9IGRpZmZbMl0pCi0JCSptcF9hdmcgPSAobXBfY29lZmZbMV0gKyBtcF9jb2VmZlsyXSkgLyAyOwotCWVsc2UKLQkJKm1wX2F2ZyA9IChtcF9jb2VmZlsyXSArIG1wX2NvZWZmWzBdKSAvIDI7Ci0KLQlyZXR1cm4gdHJ1ZTsKKwkvKiBkZXRlY3Qgb3V0bGllciAqLworCWlmIChhYnMobXBfbWF4IC0gbXBfbWluKSA+IG1heF9kZWx0YSkgeworCQlpZiAoYWJzKG1wX21heCAtIG1wX2F2ZykgPiBhYnMobXBfbWluIC0gbXBfYXZnKSkKKwkJCW91dGxpZXJfaWR4ID0gbWF4X2lkeDsKKwkJZWxzZQorCQkJb3V0bGllcl9pZHggPSBtaW5faWR4OworCX0KKwltcF9jb2VmZltvdXRsaWVyX2lkeF0gPSBtcF9hdmc7CiB9CiAKIHN0YXRpYyB2b2lkIGFyOTAwM19od190eF9pcWNhbF9sb2FkX2F2Z18yX3Bhc3NlcyhzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkJCSB1OCBudW1fY2hhaW5zLAogCQkJCQkJIHN0cnVjdCBjb2VmZiAqY29lZmYpCiB7Ci0Jc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CiAJaW50IGksIGltLCBubWVhc3VyZW1lbnQ7Ci0JaW50IG1hZ25pdHVkZSwgcGhhc2U7CiAJdTMyIHR4X2NvcnJfY29lZmZbTUFYX01FQVNVUkVNRU5UXVtBUjkzMDBfTUFYX0NIQUlOU107CiAKIAltZW1zZXQodHhfY29ycl9jb2VmZiwgMCwgc2l6ZW9mKHR4X2NvcnJfY29lZmYpKTsKQEAgLTY1NywzNyArNjcxLDI4IEBACiAKIAkvKiBMb2FkIHRoZSBhdmVyYWdlIG9mIDIgcGFzc2VzICovCiAJZm9yIChpID0gMDsgaSA8IG51bV9jaGFpbnM7IGkrKykgewotCQlpZiAoQVJfU1JFVl85NDg1KGFoKSkKLQkJCW5tZWFzdXJlbWVudCA9IFJFR19SRUFEX0ZJRUxEKGFoLAotCQkJCQlBUl9QSFlfVFhfSVFDQUxfU1RBVFVTX0IwXzk0ODUsCi0JCQkJCUFSX1BIWV9DQUxJQlJBVEVEX0dBSU5TXzApOwotCQllbHNlCi0JCQlubWVhc3VyZW1lbnQgPSBSRUdfUkVBRF9GSUVMRChhaCwKLQkJCQkJQVJfUEhZX1RYX0lRQ0FMX1NUQVRVU19CMCwKLQkJCQkJQVJfUEhZX0NBTElCUkFURURfR0FJTlNfMCk7CisJCW5tZWFzdXJlbWVudCA9IFJFR19SRUFEX0ZJRUxEKGFoLAorCQkJCUFSX1BIWV9UWF9JUUNBTF9TVEFUVVNfQjAsCisJCQkJQVJfUEhZX0NBTElCUkFURURfR0FJTlNfMCk7CiAKIAkJaWYgKG5tZWFzdXJlbWVudCA+IE1BWF9NRUFTVVJFTUVOVCkKIAkJCW5tZWFzdXJlbWVudCA9IE1BWF9NRUFTVVJFTUVOVDsKIAorCQkvKiBkZXRlY3Qgb3V0bGllciBvbmx5IGlmIG5tZWFzdXJlbWVudCA+IDEgKi8KKwkJaWYgKG5tZWFzdXJlbWVudCA+IDEpIHsKKwkJCS8qIERldGVjdCBtYWduaXR1ZGUgb3V0bGllciAqLworCQkJYXI5MDAzX2h3X2RldGVjdF9vdXRsaWVyKGNvZWZmLT5tYWdfY29lZmZbaV0sCisJCQkJCW5tZWFzdXJlbWVudCwgTUFYX01BR19ERUxUQSk7CisKKwkJCS8qIERldGVjdCBwaGFzZSBvdXRsaWVyICovCisJCQlhcjkwMDNfaHdfZGV0ZWN0X291dGxpZXIoY29lZmYtPnBoc19jb2VmZltpXSwKKwkJCQkJbm1lYXN1cmVtZW50LCBNQVhfUEhTX0RFTFRBKTsKKwkJfQorCiAJCWZvciAoaW0gPSAwOyBpbSA8IG5tZWFzdXJlbWVudDsgaW0rKykgewotCQkJLyoKLQkJCSAqIERldGVybWluZSB3aGljaCAyIHBhc3NlcyBhcmUgY2xvc2VzdCBhbmQgY29tcHV0ZSBhdmcKLQkJCSAqIG1hZ25pdHVkZQotCQkJICovCi0JCQlpZiAoIWFyOTAwM19od19jb21wdXRlX2Nsb3Nlc3RfcGFzc19hbmRfYXZnKGNvZWZmLT5tYWdfY29lZmZbaV1baW1dLAotCQkJCQkJCQkgICAgJm1hZ25pdHVkZSkpCi0JCQkJZ290byBkaXNhYmxlX3R4aXFjYWw7CiAKLQkJCS8qCi0JCQkgKiBEZXRlcm1pbmUgd2hpY2ggMiBwYXNzZXMgYXJlIGNsb3Nlc3QgYW5kIGNvbXB1dGUgYXZnCi0JCQkgKiBwaGFzZQotCQkJICovCi0JCQlpZiAoIWFyOTAwM19od19jb21wdXRlX2Nsb3Nlc3RfcGFzc19hbmRfYXZnKGNvZWZmLT5waHNfY29lZmZbaV1baW1dLAotCQkJCQkJCQkgICAgJnBoYXNlKSkKLQkJCQlnb3RvIGRpc2FibGVfdHhpcWNhbDsKLQotCQkJY29lZmYtPmlxY19jb2VmZlswXSA9IChtYWduaXR1ZGUgJiAweDdmKSB8Ci0JCQkJCSAgICAgICgocGhhc2UgJiAweDdmKSA8PCA3KTsKKwkJCWNvZWZmLT5pcWNfY29lZmZbMF0gPSAoY29lZmYtPm1hZ19jb2VmZltpXVtpbV0gJiAweDdmKSB8CisJCQkJKChjb2VmZi0+cGhzX2NvZWZmW2ldW2ltXSAmIDB4N2YpIDw8IDcpOwogCiAJCQlpZiAoKGltICUgMikgPT0gMCkKIAkJCQlSRUdfUk1XX0ZJRUxEKGFoLCB0eF9jb3JyX2NvZWZmW2ltXVtpXSwKQEAgLTcwNywxNDEgKzcxMiwzNyBAQAogCiAJcmV0dXJuOwogCi1kaXNhYmxlX3R4aXFjYWw6Ci0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RYX0lRQ0FMX0NPTlRST0xfMywKLQkJICAgICAgQVJfUEhZX1RYX0lRQ0FMX0NPTlRST0xfM19JUUNPUlJfRU4sIDB4MCk7Ci0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JYX0lRQ0FMX0NPUlJfQjAsCi0JCSAgICAgIEFSX1BIWV9SWF9JUUNBTF9DT1JSX0IwX0xPT1BCQUNLX0lRQ09SUl9FTiwgMHgwKTsKLQotCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwgIlRYIElRIENhbCBkaXNhYmxlZFxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIGFyOTAwM19od190eF9pcV9jYWwoc3RydWN0IGF0aF9odyAqYWgpCitzdGF0aWMgYm9vbCBhcjkwMDNfaHdfdHhfaXFfY2FsX3J1bihzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKLQlzdGF0aWMgY29uc3QgdTMyIHR4aXFjYWxfc3RhdHVzW0FSOTMwMF9NQVhfQ0hBSU5TXSA9IHsKLQkJQVJfUEhZX1RYX0lRQ0FMX1NUQVRVU19CMCwKLQkJQVJfUEhZX1RYX0lRQ0FMX1NUQVRVU19CMSwKLQkJQVJfUEhZX1RYX0lRQ0FMX1NUQVRVU19CMiwKLQl9OwotCXN0YXRpYyBjb25zdCB1MzIgY2hhbl9pbmZvX3RhYltdID0gewotCQlBUl9QSFlfQ0hBTl9JTkZPX1RBQl8wLAotCQlBUl9QSFlfQ0hBTl9JTkZPX1RBQl8xLAotCQlBUl9QSFlfQ0hBTl9JTkZPX1RBQl8yLAotCX07Ci0Jc3RydWN0IGNvZWZmIGNvZWZmOwotCXMzMiBpcV9yZXNbNl07Ci0JczMyIGksIGosIGlwLCBpbSwgbm1lYXN1cmVtZW50OwotCXU4IG5jaGFpbnMgPSBnZXRfc3RyZWFtcyhjb21tb24tPnR4X2NoYWlubWFzayk7Ci0KLQlmb3IgKGlwID0gMDsgaXAgPCBNUEFTUzsgaXArKykgewotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFhfSVFDQUxfQ09OVFJPTF8xLAotCQkJICAgICAgQVJfUEhZX1RYX0lRQ0FRTF9DT05UUk9MXzFfSVFDT1JSX0lfUV9DT0ZGX0RFTFBULAotCQkJICAgICAgREVMUFQpOwotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFhfSVFDQUxfU1RBUlQsCi0JCQkgICAgICBBUl9QSFlfVFhfSVFDQUxfU1RBUlRfRE9fQ0FMLAotCQkJICAgICAgQVJfUEhZX1RYX0lRQ0FMX1NUQVJUX0RPX0NBTCk7Ci0KLQkJaWYgKCFhdGg5a19od193YWl0KGFoLCBBUl9QSFlfVFhfSVFDQUxfU1RBUlQsCi0JCQkJICAgQVJfUEhZX1RYX0lRQ0FMX1NUQVJUX0RPX0NBTCwKLQkJCQkgICAwLCBBSF9XQUlUX1RJTUVPVVQpKSB7Ci0JCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkJIlR4IElRIENhbCBub3QgY29tcGxldGUuXG4iKTsKLQkJCWdvdG8gVFhfSVFfQ0FMX0ZBSUxFRDsKLQkJfQotCi0JCW5tZWFzdXJlbWVudCA9IFJFR19SRUFEX0ZJRUxEKGFoLCBBUl9QSFlfVFhfSVFDQUxfU1RBVFVTX0IwLAotCQkJCQkgICAgICBBUl9QSFlfQ0FMSUJSQVRFRF9HQUlOU18wKTsKLQkJCWlmIChubWVhc3VyZW1lbnQgPiBNQVhfTUVBU1VSRU1FTlQpCi0JCQkJbm1lYXN1cmVtZW50ID0gTUFYX01FQVNVUkVNRU5UOwotCi0JCWZvciAoaSA9IDA7IGkgPCBuY2hhaW5zOyBpKyspIHsKLQkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCQkiRG9pbmcgVHggSVEgQ2FsIGZvciBjaGFpbiAlZC5cbiIsIGkpOwotCQkJZm9yIChpbSA9IDA7IGltIDwgbm1lYXN1cmVtZW50OyBpbSsrKSB7Ci0JCQkJaWYgKFJFR19SRUFEKGFoLCB0eGlxY2FsX3N0YXR1c1tpXSkgJgotCQkJCQkgICAgIEFSX1BIWV9UWF9JUUNBTF9TVEFUVVNfRkFJTEVEKSB7Ci0JCQkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCQkJCSJUeCBJUSBDYWwgZmFpbGVkIGZvciBjaGFpbiAlZC5cbiIsIGkpOwotCQkJCQlnb3RvIFRYX0lRX0NBTF9GQUlMRUQ7Ci0JCQkJfQotCi0JCQkJZm9yIChqID0gMDsgaiA8IDM7IGorKykgewotCQkJCQl1OCBpZHggPSAyICogaiwKLQkJCQkJICAgb2Zmc2V0ID0gNCAqICgzICogaW0gKyBqKTsKLQotCQkJCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfQ0hBTl9JTkZPX01FTU9SWSwKLQkJCQkJCSAgICAgIEFSX1BIWV9DSEFOX0lORk9fVEFCX1MyX1JFQUQsCi0JCQkJCQkgICAgICAwKTsKLQotCQkJCQkvKiAzMiBiaXRzICovCi0JCQkJCWlxX3Jlc1tpZHhdID0gUkVHX1JFQUQoYWgsCi0JCQkJCQkJY2hhbl9pbmZvX3RhYltpXSArCi0JCQkJCQkJb2Zmc2V0KTsKLQotCQkJCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfQ0hBTl9JTkZPX01FTU9SWSwKLQkJCQkJCSAgICAgIEFSX1BIWV9DSEFOX0lORk9fVEFCX1MyX1JFQUQsCi0JCQkJCQkgICAgICAxKTsKLQotCQkJCQkvKiAxNiBiaXRzICovCi0JCQkJCWlxX3Jlc1tpZHgrMV0gPSAweGZmZmYgJiBSRUdfUkVBRChhaCwKLQkJCQkJCQkJY2hhbl9pbmZvX3RhYltpXSArCi0JCQkJCQkJCW9mZnNldCk7Ci0KLQkJCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJCQkJIklRIFJFU1slZF09MHgleCBJUV9SRVNbJWRdPTB4JXhcbiIsCi0JCQkJCQlpZHgsIGlxX3Jlc1tpZHhdLCBpZHgrMSwgaXFfcmVzW2lkeCsxXSk7Ci0JCQkJfQotCi0JCQkJaWYgKCFhcjkwMDNfaHdfY2FsY19pcV9jb3JyKGFoLCBpLCBpcV9yZXMsCi0JCQkJCQkJICAgIGNvZWZmLmlxY19jb2VmZikpIHsKLQkJCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJCQkJIkZhaWxlZCBpbiBjYWxjdWxhdGlvbiBvZiBJUSBjb3JyZWN0aW9uLlxuIik7Ci0JCQkJCWdvdG8gVFhfSVFfQ0FMX0ZBSUxFRDsKLQkJCQl9Ci0JCQkJY29lZmYubWFnX2NvZWZmW2ldW2ltXVtpcF0gPQotCQkJCQkJY29lZmYuaXFjX2NvZWZmWzBdICYgMHg3ZjsKLQkJCQljb2VmZi5waHNfY29lZmZbaV1baW1dW2lwXSA9Ci0JCQkJCQkoY29lZmYuaXFjX2NvZWZmWzBdID4+IDcpICYgMHg3ZjsKLQotCQkJCWlmIChjb2VmZi5tYWdfY29lZmZbaV1baW1dW2lwXSA+IDYzKQotCQkJCQljb2VmZi5tYWdfY29lZmZbaV1baW1dW2lwXSAtPSAxMjg7Ci0JCQkJaWYgKGNvZWZmLnBoc19jb2VmZltpXVtpbV1baXBdID4gNjMpCi0JCQkJCWNvZWZmLnBoc19jb2VmZltpXVtpbV1baXBdIC09IDEyODsKLQotCQkJfQotCQl9Ci0JfQotCi0JYXI5MDAzX2h3X3R4X2lxY2FsX2xvYWRfYXZnXzJfcGFzc2VzKGFoLCBuY2hhaW5zLCAmY29lZmYpOwotCi0JcmV0dXJuOwotCi1UWF9JUV9DQUxfRkFJTEVEOgotCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwgIlR4IElRIENhbCBmYWlsZWRcbiIpOwotfQotCi1zdGF0aWMgdm9pZCBhcjkwMDNfaHdfdHhfaXFfY2FsX3J1bihzdHJ1Y3QgYXRoX2h3ICphaCkKLXsKIAl1OCB0eF9nYWluX2ZvcmNlZDsKIAotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UWF9JUUNBTF9DT05UUk9MXzFfOTQ4NSwKLQkJICAgICAgQVJfUEhZX1RYX0lRQ0FRTF9DT05UUk9MXzFfSVFDT1JSX0lfUV9DT0ZGX0RFTFBULCBERUxQVCk7CiAJdHhfZ2Fpbl9mb3JjZWQgPSBSRUdfUkVBRF9GSUVMRChhaCwgQVJfUEhZX1RYX0ZPUkNFRF9HQUlOLAogCQkJCQlBUl9QSFlfVFhHQUlOX0ZPUkNFKTsKIAlpZiAodHhfZ2Fpbl9mb3JjZWQpCiAJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UWF9GT1JDRURfR0FJTiwKIAkJCSAgICAgIEFSX1BIWV9UWEdBSU5fRk9SQ0UsIDApOwogCi0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RYX0lRQ0FMX1NUQVJUXzk0ODUsCi0JCSAgICAgIEFSX1BIWV9UWF9JUUNBTF9TVEFSVF9ET19DQUxfOTQ4NSwgMSk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RYX0lRQ0FMX1NUQVJULAorCQkgICAgICBBUl9QSFlfVFhfSVFDQUxfU1RBUlRfRE9fQ0FMLCAxKTsKKworCWlmICghYXRoOWtfaHdfd2FpdChhaCwgQVJfUEhZX1RYX0lRQ0FMX1NUQVJULAorCQkJQVJfUEhZX1RYX0lRQ0FMX1NUQVJUX0RPX0NBTCwgMCwKKwkJCUFIX1dBSVRfVElNRU9VVCkpIHsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJIlR4IElRIENhbCBpcyBub3QgY29tcGxldGVkLlxuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyB2b2lkIGFyOTAwM19od190eF9pcV9jYWxfcG9zdF9wcm9jKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwogCWNvbnN0IHUzMiB0eGlxY2FsX3N0YXR1c1tBUjkzMDBfTUFYX0NIQUlOU10gPSB7Ci0JCUFSX1BIWV9UWF9JUUNBTF9TVEFUVVNfQjBfOTQ4NSwKKwkJQVJfUEhZX1RYX0lRQ0FMX1NUQVRVU19CMCwKIAkJQVJfUEhZX1RYX0lRQ0FMX1NUQVRVU19CMSwKIAkJQVJfUEhZX1RYX0lRQ0FMX1NUQVRVU19CMiwKIAl9OwpAQCAtODUzLDcgKzc1NCw3IEBACiAJc3RydWN0IGNvZWZmIGNvZWZmOwogCXMzMiBpcV9yZXNbNl07CiAJdTggbnVtX2NoYWlucyA9IDA7Ci0JaW50IGksIGlwLCBpbSwgajsKKwlpbnQgaSwgaW0sIGo7CiAJaW50IG5tZWFzdXJlbWVudDsKIAogCWZvciAoaSA9IDA7IGkgPCBBUjkzMDBfTUFYX0NIQUlOUzsgaSsrKSB7CkBAIC04NjEsNzEgKzc2Miw2OSBAQAogCQkJbnVtX2NoYWlucysrOwogCX0KIAotCWZvciAoaXAgPSAwOyBpcCA8IE1QQVNTOyBpcCsrKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBudW1fY2hhaW5zOyBpKyspIHsKLQkJCW5tZWFzdXJlbWVudCA9IFJFR19SRUFEX0ZJRUxEKGFoLAotCQkJCQlBUl9QSFlfVFhfSVFDQUxfU1RBVFVTX0IwXzk0ODUsCi0JCQkJCUFSX1BIWV9DQUxJQlJBVEVEX0dBSU5TXzApOwotCQkJaWYgKG5tZWFzdXJlbWVudCA+IE1BWF9NRUFTVVJFTUVOVCkKLQkJCQlubWVhc3VyZW1lbnQgPSBNQVhfTUVBU1VSRU1FTlQ7CisJZm9yIChpID0gMDsgaSA8IG51bV9jaGFpbnM7IGkrKykgeworCQlubWVhc3VyZW1lbnQgPSBSRUdfUkVBRF9GSUVMRChhaCwKKwkJCQlBUl9QSFlfVFhfSVFDQUxfU1RBVFVTX0IwLAorCQkJCUFSX1BIWV9DQUxJQlJBVEVEX0dBSU5TXzApOworCQlpZiAobm1lYXN1cmVtZW50ID4gTUFYX01FQVNVUkVNRU5UKQorCQkJbm1lYXN1cmVtZW50ID0gTUFYX01FQVNVUkVNRU5UOwogCi0JCQlmb3IgKGltID0gMDsgaW0gPCBubWVhc3VyZW1lbnQ7IGltKyspIHsKKwkJZm9yIChpbSA9IDA7IGltIDwgbm1lYXN1cmVtZW50OyBpbSsrKSB7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkJIkRvaW5nIFR4IElRIENhbCBmb3IgY2hhaW4gJWQuXG4iLCBpKTsKKworCQkJaWYgKFJFR19SRUFEKGFoLCB0eGlxY2FsX3N0YXR1c1tpXSkgJgorCQkJCQlBUl9QSFlfVFhfSVFDQUxfU1RBVFVTX0ZBSUxFRCkgewogCQkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCQkJIkRvaW5nIFR4IElRIENhbCBmb3IgY2hhaW4gJWQuXG4iLCBpKTsKLQotCQkJCWlmIChSRUdfUkVBRChhaCwgdHhpcWNhbF9zdGF0dXNbaV0pICYKLQkJCQkgICAgQVJfUEhZX1RYX0lRQ0FMX1NUQVRVU19GQUlMRUQpIHsKLQkJCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAogCQkJCQkiVHggSVEgQ2FsIGZhaWxlZCBmb3IgY2hhaW4gJWQuXG4iLCBpKTsKLQkJCQkJZ290byB0eF9pcWNhbF9mYWlsOwotCQkJCX0KKwkJCQlnb3RvIHR4X2lxY2FsX2ZhaWw7CisJCQl9CiAKLQkJCQlmb3IgKGogPSAwOyBqIDwgMzsgaisrKSB7Ci0JCQkJCXUzMiBpZHggPSAyICogaiwgb2Zmc2V0ID0gNCAqICgzICogaW0gKyBqKTsKKwkJCWZvciAoaiA9IDA7IGogPCAzOyBqKyspIHsKKwkJCQl1MzIgaWR4ID0gMiAqIGosIG9mZnNldCA9IDQgKiAoMyAqIGltICsgaik7CiAKLQkJCQkJUkVHX1JNV19GSUVMRChhaCwKKwkJCQlSRUdfUk1XX0ZJRUxEKGFoLAogCQkJCQkJQVJfUEhZX0NIQU5fSU5GT19NRU1PUlksCiAJCQkJCQlBUl9QSFlfQ0hBTl9JTkZPX1RBQl9TMl9SRUFELAogCQkJCQkJMCk7CiAKLQkJCQkJLyogMzIgYml0cyAqLwotCQkJCQlpcV9yZXNbaWR4XSA9IFJFR19SRUFEKGFoLAotCQkJCQkJCWNoYW5faW5mb190YWJbaV0gKwotCQkJCQkJCW9mZnNldCk7CisJCQkJLyogMzIgYml0cyAqLworCQkJCWlxX3Jlc1tpZHhdID0gUkVHX1JFQUQoYWgsCisJCQkJCQljaGFuX2luZm9fdGFiW2ldICsKKwkJCQkJCW9mZnNldCk7CiAKLQkJCQkJUkVHX1JNV19GSUVMRChhaCwKKwkJCQlSRUdfUk1XX0ZJRUxEKGFoLAogCQkJCQkJQVJfUEhZX0NIQU5fSU5GT19NRU1PUlksCiAJCQkJCQlBUl9QSFlfQ0hBTl9JTkZPX1RBQl9TMl9SRUFELAogCQkJCQkJMSk7CiAKLQkJCQkJLyogMTYgYml0cyAqLwotCQkJCQlpcV9yZXNbaWR4ICsgMV0gPSAweGZmZmYgJiBSRUdfUkVBRChhaCwKLQkJCQkJCQkgIGNoYW5faW5mb190YWJbaV0gKyBvZmZzZXQpOworCQkJCS8qIDE2IGJpdHMgKi8KKwkJCQlpcV9yZXNbaWR4ICsgMV0gPSAweGZmZmYgJiBSRUdfUkVBRChhaCwKKwkJCQkJCWNoYW5faW5mb190YWJbaV0gKyBvZmZzZXQpOwogCi0JCQkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCQkJCSJJUSBSRVNbJWRdPTB4JXgiCi0JCQkJCQkiSVFfUkVTWyVkXT0weCV4XG4iLAotCQkJCQkJaWR4LCBpcV9yZXNbaWR4XSwgaWR4ICsgMSwKLQkJCQkJCWlxX3Jlc1tpZHggKyAxXSk7Ci0JCQkJfQotCi0JCQkJaWYgKCFhcjkwMDNfaHdfY2FsY19pcV9jb3JyKGFoLCBpLCBpcV9yZXMsCi0JCQkJCQkJICAgIGNvZWZmLmlxY19jb2VmZikpIHsKLQkJCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJCQkgIkZhaWxlZCBpbiBjYWxjdWxhdGlvbiBvZiBJUSBjb3JyZWN0aW9uLlxuIik7Ci0JCQkJCWdvdG8gdHhfaXFjYWxfZmFpbDsKLQkJCQl9Ci0KLQkJCQljb2VmZi5tYWdfY29lZmZbaV1baW1dW2lwXSA9Ci0JCQkJCQljb2VmZi5pcWNfY29lZmZbMF0gJiAweDdmOwotCQkJCWNvZWZmLnBoc19jb2VmZltpXVtpbV1baXBdID0KLQkJCQkJCShjb2VmZi5pcWNfY29lZmZbMF0gPj4gNykgJiAweDdmOwotCi0JCQkJaWYgKGNvZWZmLm1hZ19jb2VmZltpXVtpbV1baXBdID4gNjMpCi0JCQkJCWNvZWZmLm1hZ19jb2VmZltpXVtpbV1baXBdIC09IDEyODsKLQkJCQlpZiAoY29lZmYucGhzX2NvZWZmW2ldW2ltXVtpcF0gPiA2MykKLQkJCQkJY29lZmYucGhzX2NvZWZmW2ldW2ltXVtpcF0gLT0gMTI4OworCQkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKKwkJCQkJIklRIFJFU1slZF09MHgleCIKKwkJCQkJIklRX1JFU1slZF09MHgleFxuIiwKKwkJCQkJaWR4LCBpcV9yZXNbaWR4XSwgaWR4ICsgMSwKKwkJCQkJaXFfcmVzW2lkeCArIDFdKTsKIAkJCX0KKworCQkJaWYgKCFhcjkwMDNfaHdfY2FsY19pcV9jb3JyKGFoLCBpLCBpcV9yZXMsCisJCQkJCQljb2VmZi5pcWNfY29lZmYpKSB7CisJCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJCQkiRmFpbGVkIGluIGNhbGN1bGF0aW9uIG9mIFwKKwkJCQkJSVEgY29ycmVjdGlvbi5cbiIpOworCQkJCWdvdG8gdHhfaXFjYWxfZmFpbDsKKwkJCX0KKworCQkJY29lZmYubWFnX2NvZWZmW2ldW2ltXSA9IGNvZWZmLmlxY19jb2VmZlswXSAmIDB4N2Y7CisJCQljb2VmZi5waHNfY29lZmZbaV1baW1dID0KKwkJCQkoY29lZmYuaXFjX2NvZWZmWzBdID4+IDcpICYgMHg3ZjsKKworCQkJaWYgKGNvZWZmLm1hZ19jb2VmZltpXVtpbV0gPiA2MykKKwkJCQljb2VmZi5tYWdfY29lZmZbaV1baW1dIC09IDEyODsKKwkJCWlmIChjb2VmZi5waHNfY29lZmZbaV1baW1dID4gNjMpCisJCQkJY29lZmYucGhzX2NvZWZmW2ldW2ltXSAtPSAxMjg7CiAJCX0KIAl9CiAJYXI5MDAzX2h3X3R4X2lxY2FsX2xvYWRfYXZnXzJfcGFzc2VzKGFoLCBudW1fY2hhaW5zLCAmY29lZmYpOwpAQCAtOTQwLDMxICs4MzksMzcgQEAKIAkJCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKKwlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5jYXBzOwogCWludCB2YWw7CisJYm9vbCB0eGlxY2FsX2RvbmUgPSBmYWxzZTsKIAogCXZhbCA9IFJFR19SRUFEKGFoLCBBUl9FTlRfT1RQKTsKIAlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsICJhdGg5azogQVJfRU5UX09UUCAweCV4XG4iLCB2YWwpOwogCi0JaWYgKEFSX1NSRVZfOTQ4NShhaCkpCi0JCWFyOTAwM19od19zZXRfY2hhaW5fbWFza3MoYWgsIDB4MSwgMHgxKTsKLQllbHNlIGlmICh2YWwgJiBBUl9FTlRfT1RQX0NIQUlOMl9ESVNBQkxFKQorCS8qIENvbmZpZ3VyZSByeC90eCBjaGFpbnMgYmVmb3JlIHJ1bm5pbmcgQUdDL1R4aVEgY2FscyAqLworCWlmICh2YWwgJiBBUl9FTlRfT1RQX0NIQUlOMl9ESVNBQkxFKQogCQlhcjkwMDNfaHdfc2V0X2NoYWluX21hc2tzKGFoLCAweDMsIDB4Myk7CiAJZWxzZQotCQkvKgotCQkgKiAweDcgPSAwYjExMSAsIEFSOTAwMyBuZWVkcyB0byBiZSBjb25maWd1cmVkIGZvciAzLWNoYWluCi0JCSAqIG1vZGUgYmVmb3JlIHJ1bm5pbmcgQUdDL1R4SVEgY2FscwotCQkgKi8KLQkJYXI5MDAzX2h3X3NldF9jaGFpbl9tYXNrcyhhaCwgMHg3LCAweDcpOworCQlhcjkwMDNfaHdfc2V0X2NoYWluX21hc2tzKGFoLCBwQ2FwLT5yeF9jaGFpbm1hc2ssCisJCQkJCSAgcENhcC0+dHhfY2hhaW5tYXNrKTsKIAogCS8qIERvIFR4IElRIENhbGlicmF0aW9uICovCi0JaWYgKEFSX1NSRVZfOTQ4NShhaCkpCi0JCWFyOTAwM19od190eF9pcV9jYWxfcnVuKGFoKTsKLQllbHNlCi0JCWFyOTAwM19od190eF9pcV9jYWwoYWgpOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UWF9JUUNBTF9DT05UUk9MXzEsCisJCSAgICAgIEFSX1BIWV9UWF9JUUNBTF9DT05UUk9MXzFfSVFDT1JSX0lfUV9DT0ZGX0RFTFBULAorCQkgICAgICBERUxQVCk7CiAKLQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9BQ1RJVkUsIEFSX1BIWV9BQ1RJVkVfRElTKTsKLQl1ZGVsYXkoNSk7Ci0JUkVHX1dSSVRFKGFoLCBBUl9QSFlfQUNUSVZFLCBBUl9QSFlfQUNUSVZFX0VOKTsKKwkvKgorCSAqIEZvciBBUjk0ODUgb3IgbGF0ZXIgY2hpcHMsIFR4SVEgY2FsIHJ1bnMgYXMgcGFydCBvZgorCSAqIEFHQyBjYWxpYnJhdGlvbgorCSAqLworCWlmIChBUl9TUkVWXzk0ODVfT1JfTEFURVIoYWgpKQorCQl0eGlxY2FsX2RvbmUgPSB0cnVlOworCWVsc2UgeworCQl0eGlxY2FsX2RvbmUgPSBhcjkwMDNfaHdfdHhfaXFfY2FsX3J1bihhaCk7CisJCVJFR19XUklURShhaCwgQVJfUEhZX0FDVElWRSwgQVJfUEhZX0FDVElWRV9ESVMpOworCQl1ZGVsYXkoNSk7CisJCVJFR19XUklURShhaCwgQVJfUEhZX0FDVElWRSwgQVJfUEhZX0FDVElWRV9FTik7CisJfQogCiAJLyogQ2FsaWJyYXRlIHRoZSBBR0MgKi8KIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwKQEAgLTk3OSw3ICs4ODQsNyBAQAogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JaWYgKEFSX1NSRVZfOTQ4NShhaCkpCisJaWYgKHR4aXFjYWxfZG9uZSkKIAkJYXI5MDAzX2h3X3R4X2lxX2NhbF9wb3N0X3Byb2MoYWgpOwogCiAJLyogUmV2ZXJ0IGNoYWlubWFza3MgdG8gdGhlaXIgb3JpZ2luYWwgdmFsdWVzIGJlZm9yZSBORiBjYWwgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfZWVwcm9tLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2VlcHJvbS5jCmluZGV4IDZlYWRmOTcuLmQ5ODU4NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfZWVwcm9tLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19lZXByb20uYwpAQCAtNjUyLDcgKzY1Miw3IEBACiAJCS5yZWdEbW4gPSB7IExFMTYoMCksIExFMTYoMHgxZikgfSwKIAkJLnR4cnhNYXNrID0gIDB4NzcsIC8qIDQgYml0cyB0eCBhbmQgNCBiaXRzIHJ4ICovCiAJCS5vcENhcEZsYWdzID0gewotCQkJLm9wRmxhZ3MgPSBBUjU0MTZfT1BGTEFHU18xMUcgfCBBUjU0MTZfT1BGTEFHU18xMUEsCisJCQkub3BGbGFncyA9IEFSNTQxNl9PUEZMQUdTXzExQSwKIAkJCS5lZXBNaXNjID0gMCwKIAkJfSwKIAkJLnJmU2lsZW50ID0gMCwKQEAgLTkyMiw3ICs5MjIsNyBAQAogCQkuZGJfc3RhZ2UyID0gezMsIDMsIDN9LCAvKiAzIGNoYWluICovCiAJCS5kYl9zdGFnZTMgPSB7MywgMywgM30sIC8qIGRvZXNuJ3QgZXhpc3QgZm9yIDJHICovCiAJCS5kYl9zdGFnZTQgPSB7MywgMywgM30sCSAvKiBkb24ndCBleGlzdCBmb3IgMkcgKi8KLQkJLnhwYUJpYXNMdmwgPSAwLAorCQkueHBhQmlhc0x2bCA9IDB4ZiwKIAkJLnR4RnJhbWVUb0RhdGFTdGFydCA9IDB4MGUsCiAJCS50eEZyYW1lVG9QYU9uID0gMHgwZSwKIAkJLnR4Q2xpcCA9IDMsIC8qIDQgYml0cyB0eF9jbGlwLCA0IGJpdHMgZGFjX3NjYWxlX2NjayAqLwpAQCAtMzIxNyw3ICszMjE3LDYgQEAKIAkJCQkgICAgdTggKndvcmQsIGludCBsZW5ndGgsIGludCBtZGF0YV9zaXplKQogewogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwotCXU4ICpkcHRyOwogCWNvbnN0IHN0cnVjdCBhcjkzMDBfZWVwcm9tICplZXAgPSBOVUxMOwogCiAJc3dpdGNoIChjb2RlKSB7CkBAIC0zMjM1LDcgKzMyMzQsNiBAQAogCQlicmVhazsKIAljYXNlIF9Db21wcmVzc0Jsb2NrOgogCQlpZiAocmVmZXJlbmNlID09IDApIHsKLQkJCWRwdHIgPSBtcHRyOwogCQl9IGVsc2UgewogCQkJZWVwID0gYXI5MDAzX2VlcHJvbV9zdHJ1Y3RfZmluZF9ieV9pZChyZWZlcmVuY2UpOwogCQkJaWYgKGVlcCA9PSBOVUxMKSB7CkBAIC0zMzI5LDI2ICszMzI3LDI2IEBACiAJZWxzZQogCQljcHRyID0gQVI5MzAwX0JBU0VfQUREUjsKIAlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19FRVBST00sCi0JCSJUcnlpbmcgRUVQUk9NIGFjY2Vzc3MgYXQgQWRkcmVzcyAweCUwNHhcbiIsIGNwdHIpOworCQkiVHJ5aW5nIEVFUFJPTSBhY2Nlc3MgYXQgQWRkcmVzcyAweCUwNHhcbiIsIGNwdHIpOwogCWlmIChhcjkzMDBfY2hlY2tfZWVwcm9tX2hlYWRlcihhaCwgcmVhZCwgY3B0cikpCiAJCWdvdG8gZm91bmQ7CiAKIAljcHRyID0gQVI5MzAwX0JBU0VfQUREUl81MTI7CiAJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfRUVQUk9NLAotCQkiVHJ5aW5nIEVFUFJPTSBhY2Nlc3NzIGF0IEFkZHJlc3MgMHglMDR4XG4iLCBjcHRyKTsKKwkJIlRyeWluZyBFRVBST00gYWNjZXNzIGF0IEFkZHJlc3MgMHglMDR4XG4iLCBjcHRyKTsKIAlpZiAoYXI5MzAwX2NoZWNrX2VlcHJvbV9oZWFkZXIoYWgsIHJlYWQsIGNwdHIpKQogCQlnb3RvIGZvdW5kOwogCiAJcmVhZCA9IGFyOTMwMF9yZWFkX290cDsKIAljcHRyID0gQVI5MzAwX0JBU0VfQUREUjsKIAlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19FRVBST00sCi0JCSJUcnlpbmcgT1RQIGFjY2Vzc3MgYXQgQWRkcmVzcyAweCUwNHhcbiIsIGNwdHIpOworCQkiVHJ5aW5nIE9UUCBhY2Nlc3MgYXQgQWRkcmVzcyAweCUwNHhcbiIsIGNwdHIpOwogCWlmIChhcjkzMDBfY2hlY2tfZWVwcm9tX2hlYWRlcihhaCwgcmVhZCwgY3B0cikpCiAJCWdvdG8gZm91bmQ7CiAKIAljcHRyID0gQVI5MzAwX0JBU0VfQUREUl81MTI7CiAJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfRUVQUk9NLAotCQkiVHJ5aW5nIE9UUCBhY2Nlc3NzIGF0IEFkZHJlc3MgMHglMDR4XG4iLCBjcHRyKTsKKwkJIlRyeWluZyBPVFAgYWNjZXNzIGF0IEFkZHJlc3MgMHglMDR4XG4iLCBjcHRyKTsKIAlpZiAoYXI5MzAwX2NoZWNrX2VlcHJvbV9oZWFkZXIoYWgsIHJlYWQsIGNwdHIpKQogCQlnb3RvIGZvdW5kOwogCkBAIC0zNDQ0LDEzICszNDQyLDE1IEBACiB7CiAJaW50IGJpYXMgPSBhcjkwMDNfaHdfeHBhX2JpYXNfbGV2ZWxfZ2V0KGFoLCBpczJnaHopOwogCi0JaWYgKEFSX1NSRVZfOTQ4NShhaCkpCisJaWYgKEFSX1NSRVZfOTQ4NShhaCkgfHwgQVJfU1JFVl85MzQwKGFoKSkKIAkJUkVHX1JNV19GSUVMRChhaCwgQVJfQ0gwX1RPUDIsIEFSX0NIMF9UT1AyX1hQQUJJQVNMVkwsIGJpYXMpOwogCWVsc2UgewogCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9DSDBfVE9QLCBBUl9DSDBfVE9QX1hQQUJJQVNMVkwsIGJpYXMpOwotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9DSDBfVEhFUk0sIEFSX0NIMF9USEVSTV9YUEFCSUFTTFZMX01TQiwKLQkJCSAgICAgIGJpYXMgPj4gMik7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX0NIMF9USEVSTSwgQVJfQ0gwX1RIRVJNX1hQQVNIT1JUMkdORCwgMSk7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX0NIMF9USEVSTSwKKwkJCQlBUl9DSDBfVEhFUk1fWFBBQklBU0xWTF9NU0IsCisJCQkJYmlhcyA+PiAyKTsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfQ0gwX1RIRVJNLAorCQkJCUFSX0NIMF9USEVSTV9YUEFTSE9SVDJHTkQsIDEpOwogCX0KIH0KIApAQCAtMzQ5NywzNCArMzQ5Nyw3NyBAQAogCiBzdGF0aWMgdm9pZCBhcjkwMDNfaHdfYW50X2N0cmxfYXBwbHkoc3RydWN0IGF0aF9odyAqYWgsIGJvb2wgaXMyZ2h6KQogeworCWludCBjaGFpbjsKKwl1MzIgcmVndmFsOworCXUzMiBhbnRfZGl2X2N0bDE7CisJc3RhdGljIGNvbnN0IHUzMiBzd2l0Y2hfY2hhaW5fcmVnW0FSOTMwMF9NQVhfQ0hBSU5TXSA9IHsKKwkJCUFSX1BIWV9TV0lUQ0hfQ0hBSU5fMCwKKwkJCUFSX1BIWV9TV0lUQ0hfQ0hBSU5fMSwKKwkJCUFSX1BIWV9TV0lUQ0hfQ0hBSU5fMiwKKwl9OworCiAJdTMyIHZhbHVlID0gYXI5MDAzX2h3X2FudF9jdHJsX2NvbW1vbl9nZXQoYWgsIGlzMmdoeik7CisKIAlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfU1dJVENIX0NPTSwgQVJfU1dJVENIX1RBQkxFX0NPTV9BTEwsIHZhbHVlKTsKIAogCXZhbHVlID0gYXI5MDAzX2h3X2FudF9jdHJsX2NvbW1vbl8yX2dldChhaCwgaXMyZ2h6KTsKIAlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfU1dJVENIX0NPTV8yLCBBUl9TV0lUQ0hfVEFCTEVfQ09NMl9BTEwsIHZhbHVlKTsKIAotCXZhbHVlID0gYXI5MDAzX2h3X2FudF9jdHJsX2NoYWluX2dldChhaCwgMCwgaXMyZ2h6KTsKLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfU1dJVENIX0NIQUlOXzAsIEFSX1NXSVRDSF9UQUJMRV9BTEwsIHZhbHVlKTsKLQotCWlmICghQVJfU1JFVl85NDg1KGFoKSkgewotCQl2YWx1ZSA9IGFyOTAwM19od19hbnRfY3RybF9jaGFpbl9nZXQoYWgsIDEsIGlzMmdoeik7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9TV0lUQ0hfQ0hBSU5fMSwgQVJfU1dJVENIX1RBQkxFX0FMTCwKLQkJCSAgICAgIHZhbHVlKTsKLQotCQl2YWx1ZSA9IGFyOTAwM19od19hbnRfY3RybF9jaGFpbl9nZXQoYWgsIDIsIGlzMmdoeik7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9TV0lUQ0hfQ0hBSU5fMiwgQVJfU1dJVENIX1RBQkxFX0FMTCwKLQkJCSAgICAgIHZhbHVlKTsKKwlmb3IgKGNoYWluID0gMDsgY2hhaW4gPCBBUjkzMDBfTUFYX0NIQUlOUzsgY2hhaW4rKykgeworCQlpZiAoKGFoLT5yeGNoYWlubWFzayAmIEJJVChjaGFpbikpIHx8CisJCSAgICAoYWgtPnR4Y2hhaW5tYXNrICYgQklUKGNoYWluKSkpIHsKKwkJCXZhbHVlID0gYXI5MDAzX2h3X2FudF9jdHJsX2NoYWluX2dldChhaCwgY2hhaW4sCisJCQkJCQkJICAgICBpczJnaHopOworCQkJUkVHX1JNV19GSUVMRChhaCwgc3dpdGNoX2NoYWluX3JlZ1tjaGFpbl0sCisJCQkJICAgICAgQVJfU1dJVENIX1RBQkxFX0FMTCwgdmFsdWUpOworCQl9CiAJfQogCiAJaWYgKEFSX1NSRVZfOTQ4NShhaCkpIHsKIAkJdmFsdWUgPSBhdGg5a19od19hcjkzMDBfZ2V0X2VlcHJvbShhaCwgRUVQX0FOVF9ESVZfQ1RMMSk7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9NQ19HQUlOX0NUUkwsIEFSX0FOVF9ESVZfQ1RSTF9BTEwsCi0JCQkgICAgICB2YWx1ZSk7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9NQ19HQUlOX0NUUkwsIEFSX0FOVF9ESVZfRU5BQkxFLAotCQkJICAgICAgdmFsdWUgPj4gNik7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9DQ0tfREVURUNULCBBUl9GQVNUX0RJVl9FTkFCTEUsCi0JCQkgICAgICB2YWx1ZSA+PiA3KTsKKwkJLyoKKwkJICogbWFpbl9sbmFjb25mLCBhbHRfbG5hY29uZiwgbWFpbl90YiwgYWx0X3RiCisJCSAqIGFyZSB0aGUgZmllbGRzIHByZXNlbnQKKwkJICovCisJCXJlZ3ZhbCA9IFJFR19SRUFEKGFoLCBBUl9QSFlfTUNfR0FJTl9DVFJMKTsKKwkJcmVndmFsICY9ICh+QVJfQU5UX0RJVl9DVFJMX0FMTCk7CisJCXJlZ3ZhbCB8PSAodmFsdWUgJiAweDNmKSA8PCBBUl9BTlRfRElWX0NUUkxfQUxMX1M7CisJCS8qIGVuYWJsZV9sbmFkaXYgKi8KKwkJcmVndmFsICY9ICh+QVJfUEhZXzk0ODVfQU5UX0RJVl9MTkFESVYpOworCQlyZWd2YWwgfD0gKCh2YWx1ZSA+PiA2KSAmIDB4MSkgPDwKKwkJCQlBUl9QSFlfOTQ4NV9BTlRfRElWX0xOQURJVl9TOworCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9NQ19HQUlOX0NUUkwsIHJlZ3ZhbCk7CisKKwkJLyplbmFibGUgZmFzdF9kaXYgKi8KKwkJcmVndmFsID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9DQ0tfREVURUNUKTsKKwkJcmVndmFsICY9ICh+QVJfRkFTVF9ESVZfRU5BQkxFKTsKKwkJcmVndmFsIHw9ICgodmFsdWUgPj4gNykgJiAweDEpIDw8CisJCQkJQVJfRkFTVF9ESVZfRU5BQkxFX1M7CisJCVJFR19XUklURShhaCwgQVJfUEhZX0NDS19ERVRFQ1QsIHJlZ3ZhbCk7CisJCWFudF9kaXZfY3RsMSA9CisJCQlhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX0FOVF9ESVZfQ1RMMSk7CisJCS8qIGNoZWNrIHdoZXRoZXIgYW50ZW5uYSBkaXZlcnNpdHkgaXMgZW5hYmxlZCAqLworCQlpZiAoKGFudF9kaXZfY3RsMSA+PiAweDYpID09IDB4MykgeworCQkJcmVndmFsID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9NQ19HQUlOX0NUUkwpOworCQkJLyoKKwkJCSAqIGNsZWFyIGJpdHMgMjUtMzAgbWFpbl9sbmFjb25mLCBhbHRfbG5hY29uZiwKKwkJCSAqIG1haW5fdGIsIGFsdF90YgorCQkJICovCisJCQlyZWd2YWwgJj0gKH4oQVJfUEhZXzk0ODVfQU5UX0RJVl9NQUlOX0xOQUNPTkYgfAorCQkJCQlBUl9QSFlfOTQ4NV9BTlRfRElWX0FMVF9MTkFDT05GIHwKKwkJCQkJQVJfUEhZXzk0ODVfQU5UX0RJVl9BTFRfR0FJTlRCIHwKKwkJCQkJQVJfUEhZXzk0ODVfQU5UX0RJVl9NQUlOX0dBSU5UQikpOworCQkJLyogYnkgZGVmYXVsdCB1c2UgTE5BMSBmb3IgdGhlIG1haW4gYW50ZW5uYSAqLworCQkJcmVndmFsIHw9IChBUl9QSFlfOTQ4NV9BTlRfRElWX0xOQTEgPDwKKwkJCQkJQVJfUEhZXzk0ODVfQU5UX0RJVl9NQUlOX0xOQUNPTkZfUyk7CisJCQlyZWd2YWwgfD0gKEFSX1BIWV85NDg1X0FOVF9ESVZfTE5BMiA8PAorCQkJCQlBUl9QSFlfOTQ4NV9BTlRfRElWX0FMVF9MTkFDT05GX1MpOworCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfTUNfR0FJTl9DVFJMLCByZWd2YWwpOworCQl9CisKKwogCX0KKwogfQogCiBzdGF0aWMgdm9pZCBhcjkwMDNfaHdfZHJpdmVfc3RyZW5ndGhfYXBwbHkoc3RydWN0IGF0aF9odyAqYWgpCkBAIC0zNjM0LDEzICszNjc3LDE2IEBACiAKIAkvKiBUZXN0IHZhbHVlLiBpZiAwIHRoZW4gYXR0ZW51YXRpb24gaXMgdW51c2VkLiBEb24ndCBsb2FkIGFueXRoaW5nLiAqLwogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJdmFsdWUgPSBhcjkwMDNfaHdfYXR0ZW5fY2hhaW5fZ2V0KGFoLCBpLCBjaGFuKTsKLQkJUkVHX1JNV19GSUVMRChhaCwgZXh0X2F0dGVuX3JlZ1tpXSwKLQkJCSAgICAgIEFSX1BIWV9FWFRfQVRURU5fQ1RMX1hBVFRFTjFfREIsIHZhbHVlKTsKKwkJaWYgKGFoLT50eGNoYWlubWFzayAmIEJJVChpKSkgeworCQkJdmFsdWUgPSBhcjkwMDNfaHdfYXR0ZW5fY2hhaW5fZ2V0KGFoLCBpLCBjaGFuKTsKKwkJCVJFR19STVdfRklFTEQoYWgsIGV4dF9hdHRlbl9yZWdbaV0sCisJCQkJICAgICAgQVJfUEhZX0VYVF9BVFRFTl9DVExfWEFUVEVOMV9EQiwgdmFsdWUpOwogCi0JCXZhbHVlID0gYXI5MDAzX2h3X2F0dGVuX2NoYWluX2dldF9tYXJnaW4oYWgsIGksIGNoYW4pOwotCQlSRUdfUk1XX0ZJRUxEKGFoLCBleHRfYXR0ZW5fcmVnW2ldLAotCQkJICAgICAgQVJfUEhZX0VYVF9BVFRFTl9DVExfWEFUVEVOMV9NQVJHSU4sIHZhbHVlKTsKKwkJCXZhbHVlID0gYXI5MDAzX2h3X2F0dGVuX2NoYWluX2dldF9tYXJnaW4oYWgsIGksIGNoYW4pOworCQkJUkVHX1JNV19GSUVMRChhaCwgZXh0X2F0dGVuX3JlZ1tpXSwKKwkJCQkgICAgICBBUl9QSFlfRVhUX0FUVEVOX0NUTF9YQVRURU4xX01BUkdJTiwKKwkJCQkgICAgICB2YWx1ZSk7CisJCX0KIAl9CiB9CiAKQEAgLTM3NDksOCArMzc5NSw5IEBACiAJYXI5MDAzX2h3X2FudF9jdHJsX2FwcGx5KGFoLCBJU19DSEFOXzJHSFooY2hhbikpOwogCWFyOTAwM19od19kcml2ZV9zdHJlbmd0aF9hcHBseShhaCk7CiAJYXI5MDAzX2h3X2F0dGVuX2FwcGx5KGFoLCBjaGFuKTsKLQlhcjkwMDNfaHdfaW50ZXJuYWxfcmVndWxhdG9yX2FwcGx5KGFoKTsKLQlpZiAoQVJfU1JFVl85NDg1KGFoKSkKKwlpZiAoIUFSX1NSRVZfOTM0MChhaCkpCisJCWFyOTAwM19od19pbnRlcm5hbF9yZWd1bGF0b3JfYXBwbHkoYWgpOworCWlmIChBUl9TUkVWXzk0ODUoYWgpIHx8IEFSX1NSRVZfOTM0MChhaCkpCiAJCWFyOTAwM19od19hcHBseV90dW5pbmdfY2FwcyhhaCk7CiB9CiAKQEAgLTM5OTQsNiArNDA0MSwxNiBAQAogCQkgIFBPV19TTShwUHdyQXJyYXlbQUxMX1RBUkdFVF9MRUdBQ1lfMUxfNUxdLCAwKQogCSAgICApOwogCisgICAgICAgIC8qIFdyaXRlIHRoZSBwb3dlciBmb3IgZHVwbGljYXRlZCBmcmFtZXMgLSBIVDQwICovCisKKyAgICAgICAgLyogZHVwNDBfY2NrIChMU0IpLCBkdXA0MF9vZmRtLCBleHQyMF9jY2ssIGV4dDIwX29mZG0gKE1TQikgKi8KKwlSRUdfV1JJVEUoYWgsIDB4YTNlMCwKKwkJICBQT1dfU00ocFB3ckFycmF5W0FMTF9UQVJHRVRfTEVHQUNZXzZfMjRdLCAyNCkgfAorCQkgIFBPV19TTShwUHdyQXJyYXlbQUxMX1RBUkdFVF9MRUdBQ1lfMUxfNUxdLCAxNikgfAorCQkgIFBPV19TTShwUHdyQXJyYXlbQUxMX1RBUkdFVF9MRUdBQ1lfNl8yNF0sICA4KSB8CisJCSAgUE9XX1NNKHBQd3JBcnJheVtBTExfVEFSR0VUX0xFR0FDWV8xTF81TF0sICAwKQorCSAgICApOworCiAJLyogV3JpdGUgdGhlIEhUMjAgcG93ZXIgcGVyIHJhdGUgc2V0ICovCiAKIAkvKiAwLzgvMTYgKExTQiksIDEtMy85LTExLzE3LTE5LCA0LCA1IChNU0IpICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2h3LmMKaW5kZXggN2Y1ZGU2ZS4uYTU1ZWRkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19ody5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfaHcuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgImFyOTAwM19tYWMuaCIKICNpbmNsdWRlICJhcjkwMDNfMnAyX2luaXR2YWxzLmgiCiAjaW5jbHVkZSAiYXI5NDg1X2luaXR2YWxzLmgiCisjaW5jbHVkZSAiYXI5MzQwX2luaXR2YWxzLmgiCiAKIC8qIEdlbmVyYWwgaGFyZHdhcmUgY29kZSBmb3IgdGhlIEFSOTAwMyBoYWR3YXJlIGZhbWlseSAqLwogCkBAIC0yOCw3ICsyOSw2MyBAQAogICovCiBzdGF0aWMgdm9pZCBhcjkwMDNfaHdfaW5pdF9tb2RlX3JlZ3Moc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0JaWYgKEFSX1NSRVZfOTQ4NV8xMShhaCkpIHsKKwlpZiAoQVJfU1JFVl85MzQwKGFoKSkgeworCQkvKiBtYWMgKi8KKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNYWNbQVRIX0lOSV9QUkVdLCBOVUxMLCAwLCAwKTsKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNYWNbQVRIX0lOSV9DT1JFXSwKKwkJCQlhcjkzNDBfMXAwX21hY19jb3JlLAorCQkJCUFSUkFZX1NJWkUoYXI5MzQwXzFwMF9tYWNfY29yZSksIDIpOworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1hY1tBVEhfSU5JX1BPU1RdLAorCQkJCWFyOTM0MF8xcDBfbWFjX3Bvc3RhbWJsZSwKKwkJCQlBUlJBWV9TSVpFKGFyOTM0MF8xcDBfbWFjX3Bvc3RhbWJsZSksIDUpOworCisJCS8qIGJiICovCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQkJbQVRIX0lOSV9QUkVdLCBOVUxMLCAwLCAwKTsKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCQltBVEhfSU5JX0NPUkVdLAorCQkJCWFyOTM0MF8xcDBfYmFzZWJhbmRfY29yZSwKKwkJCQlBUlJBWV9TSVpFKGFyOTM0MF8xcDBfYmFzZWJhbmRfY29yZSksIDIpOworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJCW0FUSF9JTklfUE9TVF0sCisJCQkJYXI5MzQwXzFwMF9iYXNlYmFuZF9wb3N0YW1ibGUsCisJCQkJQVJSQVlfU0laRShhcjkzNDBfMXAwX2Jhc2ViYW5kX3Bvc3RhbWJsZSksIDUpOworCisJCS8qIHJhZGlvICovCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pUmFkaW9bQVRIX0lOSV9QUkVdLCBOVUxMLCAwLCAwKTsKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlSYWRpb1tBVEhfSU5JX0NPUkVdLAorCQkJCWFyOTM0MF8xcDBfcmFkaW9fY29yZSwKKwkJCQlBUlJBWV9TSVpFKGFyOTM0MF8xcDBfcmFkaW9fY29yZSksIDIpOworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVJhZGlvW0FUSF9JTklfUE9TVF0sCisJCQkJYXI5MzQwXzFwMF9yYWRpb19wb3N0YW1ibGUsCisJCQkJQVJSQVlfU0laRShhcjkzNDBfMXAwX3JhZGlvX3Bvc3RhbWJsZSksIDUpOworCisJCS8qIHNvYyAqLworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVNPQ1tBVEhfSU5JX1BSRV0sCisJCQkJYXI5MzQwXzFwMF9zb2NfcHJlYW1ibGUsCisJCQkJQVJSQVlfU0laRShhcjkzNDBfMXAwX3NvY19wcmVhbWJsZSksIDIpOworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVNPQ1tBVEhfSU5JX0NPUkVdLCBOVUxMLCAwLCAwKTsKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlTT0NbQVRIX0lOSV9QT1NUXSwKKwkJCQlhcjkzNDBfMXAwX3NvY19wb3N0YW1ibGUsCisJCQkJQVJSQVlfU0laRShhcjkzNDBfMXAwX3NvY19wb3N0YW1ibGUpLCA1KTsKKworCQkvKiByeC90eCBnYWluICovCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNSeEdhaW4sCisJCQkJYXI5MzQwQ29tbW9uX3dvX3hsbmFfcnhfZ2Fpbl90YWJsZV8xcDAsCisJCQkJQVJSQVlfU0laRShhcjkzNDBDb21tb25fd29feGxuYV9yeF9nYWluX3RhYmxlXzFwMCksCisJCQkJNSk7CisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCisJCQkJYXI5MzQwTW9kZXNfaGlnaF9vYl9kYl90eF9nYWluX3RhYmxlXzFwMCwKKwkJCQlBUlJBWV9TSVpFKGFyOTM0ME1vZGVzX2hpZ2hfb2JfZGJfdHhfZ2Fpbl90YWJsZV8xcDApLAorCQkJCTUpOworCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNBZGRpdGlvbmFsLAorCQkJCWFyOTM0ME1vZGVzX2Zhc3RfY2xvY2tfMXAwLAorCQkJCUFSUkFZX1NJWkUoYXI5MzQwTW9kZXNfZmFzdF9jbG9ja18xcDApLAorCQkJCTMpOworCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNBZGRpdGlvbmFsXzQwTSwKKwkJCQlhcjkzNDBfMXAwX3JhZGlvX2NvcmVfNDBNLAorCQkJCUFSUkFZX1NJWkUoYXI5MzQwXzFwMF9yYWRpb19jb3JlXzQwTSksCisJCQkJMik7CisJfSBlbHNlIGlmIChBUl9TUkVWXzk0ODVfMTEoYWgpKSB7CiAJCS8qIG1hYyAqLwogCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1hY1tBVEhfSU5JX1BSRV0sIE5VTEwsIDAsIDApOwogCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1hY1tBVEhfSU5JX0NPUkVdLApAQCAtNjYsOCArMTIzLDggQEAKIAogCQkvKiByeC90eCBnYWluICovCiAJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNSeEdhaW4sCi0JCQkJYXI5NDg1X2NvbW1vbl9yeF9nYWluXzFfMSwKLQkJCQlBUlJBWV9TSVpFKGFyOTQ4NV9jb21tb25fcnhfZ2Fpbl8xXzEpLCAyKTsKKwkJCQlhcjk0ODVDb21tb25fd29feGxuYV9yeF9nYWluXzFfMSwKKwkJCQlBUlJBWV9TSVpFKGFyOTQ4NUNvbW1vbl93b194bG5hX3J4X2dhaW5fMV8xKSwgMik7CiAJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCiAJCQkJYXI5NDg1X21vZGVzX2xvd2VzdF9vYl9kYl90eF9nYWluXzFfMSwKIAkJCQlBUlJBWV9TSVpFKGFyOTQ4NV9tb2Rlc19sb3dlc3Rfb2JfZGJfdHhfZ2Fpbl8xXzEpLApAQCAtODgsNjYgKzE0NSw2IEBACiAJCQkJYXI5NDg1XzFfMV9wY2llX3BoeV9jbGtyZXFfZGlzYWJsZV9MMSwKIAkJCQlBUlJBWV9TSVpFKGFyOTQ4NV8xXzFfcGNpZV9waHlfY2xrcmVxX2Rpc2FibGVfTDEpLAogCQkJCTIpOwotCX0gZWxzZSBpZiAoQVJfU1JFVl85NDg1KGFoKSkgewotCQkvKiBtYWMgKi8KLQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNYWNbQVRIX0lOSV9QUkVdLCBOVUxMLCAwLCAwKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNYWNbQVRIX0lOSV9DT1JFXSwKLQkJCQlhcjk0ODVfMV8wX21hY19jb3JlLAotCQkJCUFSUkFZX1NJWkUoYXI5NDg1XzFfMF9tYWNfY29yZSksIDIpOwotCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1hY1tBVEhfSU5JX1BPU1RdLAotCQkJCWFyOTQ4NV8xXzBfbWFjX3Bvc3RhbWJsZSwKLQkJCQlBUlJBWV9TSVpFKGFyOTQ4NV8xXzBfbWFjX3Bvc3RhbWJsZSksIDUpOwotCi0JCS8qIGJiICovCi0JCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQkJbQVRIX0lOSV9QUkVdLCBhcjk0ODVfMV8wLAotCQkJCUFSUkFZX1NJWkUoYXI5NDg1XzFfMCksIDIpOwotCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJCW0FUSF9JTklfQ09SRV0sCi0JCQkJYXI5NDg1XzFfMF9iYXNlYmFuZF9jb3JlLAotCQkJCUFSUkFZX1NJWkUoYXI5NDg1XzFfMF9iYXNlYmFuZF9jb3JlKSwgMik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQkJbQVRIX0lOSV9QT1NUXSwKLQkJCQlhcjk0ODVfMV8wX2Jhc2ViYW5kX3Bvc3RhbWJsZSwKLQkJCQlBUlJBWV9TSVpFKGFyOTQ4NV8xXzBfYmFzZWJhbmRfcG9zdGFtYmxlKSwgNSk7Ci0KLQkJLyogcmFkaW8gKi8KLQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlSYWRpb1tBVEhfSU5JX1BSRV0sIE5VTEwsIDAsIDApOwotCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVJhZGlvW0FUSF9JTklfQ09SRV0sCi0JCQkJYXI5NDg1XzFfMF9yYWRpb19jb3JlLAotCQkJCUFSUkFZX1NJWkUoYXI5NDg1XzFfMF9yYWRpb19jb3JlKSwgMik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pUmFkaW9bQVRIX0lOSV9QT1NUXSwKLQkJCQlhcjk0ODVfMV8wX3JhZGlvX3Bvc3RhbWJsZSwKLQkJCQlBUlJBWV9TSVpFKGFyOTQ4NV8xXzBfcmFkaW9fcG9zdGFtYmxlKSwgMik7Ci0KLQkJLyogc29jICovCi0JCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pU09DW0FUSF9JTklfUFJFXSwKLQkJCQlhcjk0ODVfMV8wX3NvY19wcmVhbWJsZSwKLQkJCQlBUlJBWV9TSVpFKGFyOTQ4NV8xXzBfc29jX3ByZWFtYmxlKSwgMik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pU09DW0FUSF9JTklfQ09SRV0sIE5VTEwsIDAsIDApOwotCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVNPQ1tBVEhfSU5JX1BPU1RdLCBOVUxMLCAwLCAwKTsKLQotCQkvKiByeC90eCBnYWluICovCi0JCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNSeEdhaW4sCi0JCQkJYXI5NDg1Q29tbW9uX3J4X2dhaW5fMV8wLAotCQkJCUFSUkFZX1NJWkUoYXI5NDg1Q29tbW9uX3J4X2dhaW5fMV8wKSwgMik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCi0JCQkJYXI5NDg1TW9kZXNfbG93ZXN0X29iX2RiX3R4X2dhaW5fMV8wLAotCQkJCUFSUkFZX1NJWkUoYXI5NDg1TW9kZXNfbG93ZXN0X29iX2RiX3R4X2dhaW5fMV8wKSwKLQkJCQk1KTsKLQotCQkvKiBMb2FkIFBDSUUgU0VSREVTIHNldHRpbmdzIGZyb20gSU5JICovCi0KLQkJLyogQXdha2UgU2V0dGluZyAqLwotCi0JCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pUGNpZVNlcmRlcywKLQkJCQlhcjk0ODVfMV8wX3BjaWVfcGh5X3BsbF9vbl9jbGtyZXFfZGlzYWJsZV9MMSwKLQkJCQlBUlJBWV9TSVpFKGFyOTQ4NV8xXzBfcGNpZV9waHlfcGxsX29uX2Nsa3JlcV9kaXNhYmxlX0wxKSwKLQkJCQkyKTsKLQotCQkvKiBTbGVlcCBTZXR0aW5nICovCi0KLQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlQY2llU2VyZGVzTG93UG93ZXIsCi0JCQkJYXI5NDg1XzFfMF9wY2llX3BoeV9wbGxfb25fY2xrcmVxX2Rpc2FibGVfTDEsCi0JCQkJQVJSQVlfU0laRShhcjk0ODVfMV8wX3BjaWVfcGh5X3BsbF9vbl9jbGtyZXFfZGlzYWJsZV9MMSksCi0JCQkJMik7CiAJfSBlbHNlIHsKIAkJLyogbWFjICovCiAJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTWFjW0FUSF9JTklfUFJFXSwgTlVMTCwgMCwgMCk7CkBAIC0yMjMsMTYgKzIyMCwxNiBAQAogCXN3aXRjaCAoYXI5MDAzX2h3X2dldF90eF9nYWluX2lkeChhaCkpIHsKIAljYXNlIDA6CiAJZGVmYXVsdDoKLQkJaWYgKEFSX1NSRVZfOTQ4NV8xMShhaCkpCisJCWlmIChBUl9TUkVWXzkzNDAoYWgpKQorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1R4R2FpbiwKKwkJCQkJYXI5MzQwTW9kZXNfbG93ZXN0X29iX2RiX3R4X2dhaW5fdGFibGVfMXAwLAorCQkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTM0ME1vZGVzX2xvd2VzdF9vYl9kYl90eF9nYWluX3RhYmxlXzFwMCksCisJCQkJICAgICAgIDUpOworCQllbHNlIGlmIChBUl9TUkVWXzk0ODVfMTEoYWgpKQogCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1R4R2FpbiwKIAkJCQkgICAgICAgYXI5NDg1X21vZGVzX2xvd2VzdF9vYl9kYl90eF9nYWluXzFfMSwKIAkJCQkgICAgICAgQVJSQVlfU0laRShhcjk0ODVfbW9kZXNfbG93ZXN0X29iX2RiX3R4X2dhaW5fMV8xKSwKIAkJCQkgICAgICAgNSk7Ci0JCWVsc2UgaWYgKEFSX1NSRVZfOTQ4NShhaCkpCi0JCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzVHhHYWluLAotCQkJCSAgICAgICBhcjk0ODVNb2Rlc19sb3dlc3Rfb2JfZGJfdHhfZ2Fpbl8xXzAsCi0JCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5NDg1TW9kZXNfbG93ZXN0X29iX2RiX3R4X2dhaW5fMV8wKSwKLQkJCQkgICAgICAgNSk7CiAJCWVsc2UKIAkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCiAJCQkJICAgICAgIGFyOTMwME1vZGVzX2xvd2VzdF9vYl9kYl90eF9nYWluX3RhYmxlXzJwMiwKQEAgLTI0MCwxNiArMjM3LDE2IEBACiAJCQkJICAgICAgIDUpOwogCQlicmVhazsKIAljYXNlIDE6Ci0JCWlmIChBUl9TUkVWXzk0ODVfMTEoYWgpKQorCQlpZiAoQVJfU1JFVl85MzQwKGFoKSkKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCisJCQkJCWFyOTM0ME1vZGVzX2xvd2VzdF9vYl9kYl90eF9nYWluX3RhYmxlXzFwMCwKKwkJCQkgICAgICAgQVJSQVlfU0laRShhcjkzNDBNb2Rlc19sb3dlc3Rfb2JfZGJfdHhfZ2Fpbl90YWJsZV8xcDApLAorCQkJCSAgICAgICA1KTsKKwkJZWxzZSBpZiAoQVJfU1JFVl85NDg1XzExKGFoKSkKIAkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCiAJCQkJICAgICAgIGFyOTQ4NU1vZGVzX2hpZ2hfb2JfZGJfdHhfZ2Fpbl8xXzEsCiAJCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5NDg1TW9kZXNfaGlnaF9vYl9kYl90eF9nYWluXzFfMSksCiAJCQkJICAgICAgIDUpOwotCQllbHNlIGlmIChBUl9TUkVWXzk0ODUoYWgpKQotCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1R4R2FpbiwKLQkJCQkgICAgICAgYXI5NDg1TW9kZXNfaGlnaF9vYl9kYl90eF9nYWluXzFfMCwKLQkJCQkgICAgICAgQVJSQVlfU0laRShhcjk0ODVNb2Rlc19oaWdoX29iX2RiX3R4X2dhaW5fMV8wKSwKLQkJCQkgICAgICAgNSk7CiAJCWVsc2UKIAkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCiAJCQkJICAgICAgIGFyOTMwME1vZGVzX2hpZ2hfb2JfZGJfdHhfZ2Fpbl90YWJsZV8ycDIsCkBAIC0yNTcsMTYgKzI1NCwxNiBAQAogCQkJCSAgICAgICA1KTsKIAkJYnJlYWs7CiAJY2FzZSAyOgotCQlpZiAoQVJfU1JFVl85NDg1XzExKGFoKSkKKwkJaWYgKEFSX1NSRVZfOTM0MChhaCkpCisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzVHhHYWluLAorCQkJCQlhcjkzNDBNb2Rlc19sb3dlc3Rfb2JfZGJfdHhfZ2Fpbl90YWJsZV8xcDAsCisJCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5MzQwTW9kZXNfbG93ZXN0X29iX2RiX3R4X2dhaW5fdGFibGVfMXAwKSwKKwkJCQkgICAgICAgNSk7CisJCWVsc2UgaWYgKEFSX1NSRVZfOTQ4NV8xMShhaCkpCiAJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzVHhHYWluLAogCQkJCSAgICAgICBhcjk0ODVNb2Rlc19sb3dfb2JfZGJfdHhfZ2Fpbl8xXzEsCiAJCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5NDg1TW9kZXNfbG93X29iX2RiX3R4X2dhaW5fMV8xKSwKIAkJCQkgICAgICAgNSk7Ci0JCWVsc2UgaWYgKEFSX1NSRVZfOTQ4NShhaCkpCi0JCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzVHhHYWluLAotCQkJCSAgICAgICBhcjk0ODVNb2Rlc19sb3dfb2JfZGJfdHhfZ2Fpbl8xXzAsCi0JCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5NDg1TW9kZXNfbG93X29iX2RiX3R4X2dhaW5fMV8wKSwKLQkJCQkgICAgICAgNSk7CiAJCWVsc2UKIAkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCiAJCQkJICAgICAgIGFyOTMwME1vZGVzX2xvd19vYl9kYl90eF9nYWluX3RhYmxlXzJwMiwKQEAgLTI3NCwxNiArMjcxLDE2IEBACiAJCQkJICAgICAgIDUpOwogCQlicmVhazsKIAljYXNlIDM6Ci0JCWlmIChBUl9TUkVWXzk0ODVfMTEoYWgpKQorCQlpZiAoQVJfU1JFVl85MzQwKGFoKSkKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCisJCQkJCWFyOTM0ME1vZGVzX2xvd2VzdF9vYl9kYl90eF9nYWluX3RhYmxlXzFwMCwKKwkJCQkgICAgICAgQVJSQVlfU0laRShhcjkzNDBNb2Rlc19sb3dlc3Rfb2JfZGJfdHhfZ2Fpbl90YWJsZV8xcDApLAorCQkJCSAgICAgICA1KTsKKwkJZWxzZSBpZiAoQVJfU1JFVl85NDg1XzExKGFoKSkKIAkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCiAJCQkJICAgICAgIGFyOTQ4NU1vZGVzX2hpZ2hfcG93ZXJfdHhfZ2Fpbl8xXzEsCiAJCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5NDg1TW9kZXNfaGlnaF9wb3dlcl90eF9nYWluXzFfMSksCiAJCQkJICAgICAgIDUpOwotCQllbHNlIGlmIChBUl9TUkVWXzk0ODUoYWgpKQotCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1R4R2FpbiwKLQkJCQkgICAgICAgYXI5NDg1TW9kZXNfaGlnaF9wb3dlcl90eF9nYWluXzFfMCwKLQkJCQkgICAgICAgQVJSQVlfU0laRShhcjk0ODVNb2Rlc19oaWdoX3Bvd2VyX3R4X2dhaW5fMV8wKSwKLQkJCQkgICAgICAgNSk7CiAJCWVsc2UKIAkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCiAJCQkJICAgICAgIGFyOTMwME1vZGVzX2hpZ2hfcG93ZXJfdHhfZ2Fpbl90YWJsZV8ycDIsCkBAIC0yOTgsMTUgKzI5NSwxNSBAQAogCXN3aXRjaCAoYXI5MDAzX2h3X2dldF9yeF9nYWluX2lkeChhaCkpIHsKIAljYXNlIDA6CiAJZGVmYXVsdDoKLQkJaWYgKEFSX1NSRVZfOTQ4NV8xMShhaCkpCisJCWlmIChBUl9TUkVWXzkzNDAoYWgpKQogCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1J4R2FpbiwKLQkJCQkgICAgICAgYXI5NDg1X2NvbW1vbl9yeF9nYWluXzFfMSwKLQkJCQkgICAgICAgQVJSQVlfU0laRShhcjk0ODVfY29tbW9uX3J4X2dhaW5fMV8xKSwKKwkJCQkgICAgICAgYXI5MzQwQ29tbW9uX3J4X2dhaW5fdGFibGVfMXAwLAorCQkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTM0MENvbW1vbl9yeF9nYWluX3RhYmxlXzFwMCksCiAJCQkJICAgICAgIDIpOwotCQllbHNlIGlmIChBUl9TUkVWXzk0ODUoYWgpKQorCQllbHNlIGlmIChBUl9TUkVWXzk0ODVfMTEoYWgpKQogCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1J4R2FpbiwKLQkJCQkgICAgICAgYXI5NDg1Q29tbW9uX3J4X2dhaW5fMV8wLAotCQkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTQ4NUNvbW1vbl9yeF9nYWluXzFfMCksCisJCQkJICAgICAgIGFyOTQ4NUNvbW1vbl93b194bG5hX3J4X2dhaW5fMV8xLAorCQkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTQ4NUNvbW1vbl93b194bG5hX3J4X2dhaW5fMV8xKSwKIAkJCQkgICAgICAgMik7CiAJCWVsc2UKIAkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNSeEdhaW4sCkBAIC0zMTUsMTYgKzMxMiwxNiBAQAogCQkJCSAgICAgICAyKTsKIAkJYnJlYWs7CiAJY2FzZSAxOgotCQlpZiAoQVJfU1JFVl85NDg1XzExKGFoKSkKKwkJaWYgKEFSX1NSRVZfOTM0MChhaCkpCisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzUnhHYWluLAorCQkJCSAgICAgICBhcjkzNDBDb21tb25fd29feGxuYV9yeF9nYWluX3RhYmxlXzFwMCwKKwkJCQkgICAgICAgQVJSQVlfU0laRShhcjkzNDBDb21tb25fd29feGxuYV9yeF9nYWluX3RhYmxlXzFwMCksCisJCQkJICAgICAgIDIpOworCQllbHNlIGlmIChBUl9TUkVWXzk0ODVfMTEoYWgpKQogCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1J4R2FpbiwKIAkJCQkgICAgICAgYXI5NDg1Q29tbW9uX3dvX3hsbmFfcnhfZ2Fpbl8xXzEsCiAJCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5NDg1Q29tbW9uX3dvX3hsbmFfcnhfZ2Fpbl8xXzEpLAogCQkJCSAgICAgICAyKTsKLQkJZWxzZSBpZiAoQVJfU1JFVl85NDg1KGFoKSkKLQkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNSeEdhaW4sCi0JCQkJICAgICAgIGFyOTQ4NUNvbW1vbl93b194bG5hX3J4X2dhaW5fMV8wLAotCQkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTQ4NUNvbW1vbl93b194bG5hX3J4X2dhaW5fMV8wKSwKLQkJCQkgICAgICAgMik7CiAJCWVsc2UKIAkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNSeEdhaW4sCiAJCQkJICAgICAgIGFyOTMwMENvbW1vbl93b194bG5hX3J4X2dhaW5fdGFibGVfMnAyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfbWFjLmMKaW5kZXggMDM4YTBjYi4uYmU2YWRlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19tYWMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX21hYy5jCkBAIC0zMjksNyArMzI5LDYgQEAKIAkJfCAoZmxhZ3MgJiBBVEg5S19UWERFU0NfVk1GID8gQVJfVmlydE1vcmVGcmFnIDogMCkKIAkJfCBTTSh0eHBvd2VyLCBBUl9YbWl0UG93ZXIpCiAJCXwgKGZsYWdzICYgQVRIOUtfVFhERVNDX1ZFT0wgPyBBUl9WRU9MIDogMCkKLQkJfCAoZmxhZ3MgJiBBVEg5S19UWERFU0NfQ0xSRE1BU0sgPyBBUl9DbHJEZXN0TWFzayA6IDApCiAJCXwgKGtleUl4ICE9IEFUSDlLX1RYS0VZSVhfSU5WQUxJRCA/IEFSX0Rlc3RJZHhWYWxpZCA6IDApCiAJCXwgKGZsYWdzICYgQVRIOUtfVFhERVNDX0xPV1JYQ0hBSU4gPyBBUl9Mb3dSeENoYWluIDogMCk7CiAKQEAgLTM1MCw2ICszNDksMTYgQEAKIAlhZHMtPmN0bDIyID0gMDsKIH0KIAorc3RhdGljIHZvaWQgYXI5MDAzX2h3X3NldF9jbHJkbWFzayhzdHJ1Y3QgYXRoX2h3ICphaCwgdm9pZCAqZHMsIGJvb2wgdmFsKQoreworCXN0cnVjdCBhcjkwMDNfdHhjICphZHMgPSAoc3RydWN0IGFyOTAwM190eGMgKikgZHM7CisKKwlpZiAodmFsKQorCQlhZHMtPmN0bDExIHw9IEFSX0NsckRlc3RNYXNrOworCWVsc2UKKwkJYWRzLT5jdGwxMSAmPSB+QVJfQ2xyRGVzdE1hc2s7Cit9CisKIHN0YXRpYyB2b2lkIGFyOTAwM19od19zZXQxMW5fcmF0ZXNjZW5hcmlvKHN0cnVjdCBhdGhfaHcgKmFoLCB2b2lkICpkcywKIAkJCQkJICB2b2lkICpsYXN0ZHMsCiAJCQkJCSAgdTMyIGR1clVwZGF0ZUVuLCB1MzIgcnRzY3RzUmF0ZSwKQEAgLTQ3NSwyNyArNDg0LDYgQEAKIAlhZHMtPmN0bDEyICY9ICh+QVJfSXNBZ2dyICYgfkFSX01vcmVBZ2dyKTsKIH0KIAotc3RhdGljIHZvaWQgYXI5MDAzX2h3X3NldDExbl9idXJzdGR1cmF0aW9uKHN0cnVjdCBhdGhfaHcgKmFoLCB2b2lkICpkcywKLQkJCQkJICAgdTMyIGJ1cnN0RHVyYXRpb24pCi17Ci0Jc3RydWN0IGFyOTAwM190eGMgKmFkcyA9IChzdHJ1Y3QgYXI5MDAzX3R4YyAqKSBkczsKLQotCWFkcy0+Y3RsMTMgJj0gfkFSX0J1cnN0RHVyOwotCWFkcy0+Y3RsMTMgfD0gU00oYnVyc3REdXJhdGlvbiwgQVJfQnVyc3REdXIpOwotCi19Ci0KLXN0YXRpYyB2b2lkIGFyOTAwM19od19zZXQxMW5fdmlydHVhbG1vcmVmcmFnKHN0cnVjdCBhdGhfaHcgKmFoLCB2b2lkICpkcywKLQkJCQkJICAgICB1MzIgdm1mKQotewotCXN0cnVjdCBhcjkwMDNfdHhjICphZHMgPSAoc3RydWN0IGFyOTAwM190eGMgKikgZHM7Ci0KLQlpZiAodm1mKQotCQlhZHMtPmN0bDExIHw9ICBBUl9WaXJ0TW9yZUZyYWc7Ci0JZWxzZQotCQlhZHMtPmN0bDExICY9IH5BUl9WaXJ0TW9yZUZyYWc7Ci19Ci0KIHZvaWQgYXI5MDAzX2h3X3NldF9wYXByZF90eGRlc2Moc3RydWN0IGF0aF9odyAqYWgsIHZvaWQgKmRzLCB1OCBjaGFpbnMpCiB7CiAJc3RydWN0IGFyOTAwM190eGMgKmFkcyA9IGRzOwpAQCAtNTIwLDggKzUwOCw3IEBACiAJb3BzLT5zZXQxMW5fYWdncl9taWRkbGUgPSBhcjkwMDNfaHdfc2V0MTFuX2FnZ3JfbWlkZGxlOwogCW9wcy0+c2V0MTFuX2FnZ3JfbGFzdCA9IGFyOTAwM19od19zZXQxMW5fYWdncl9sYXN0OwogCW9wcy0+Y2xyMTFuX2FnZ3IgPSBhcjkwMDNfaHdfY2xyMTFuX2FnZ3I7Ci0Jb3BzLT5zZXQxMW5fYnVyc3RkdXJhdGlvbiA9IGFyOTAwM19od19zZXQxMW5fYnVyc3RkdXJhdGlvbjsKLQlvcHMtPnNldDExbl92aXJ0dWFsbW9yZWZyYWcgPSBhcjkwMDNfaHdfc2V0MTFuX3ZpcnR1YWxtb3JlZnJhZzsKKwlvcHMtPnNldF9jbHJkbWFzayA9IGFyOTAwM19od19zZXRfY2xyZG1hc2s7CiB9CiAKIHZvaWQgYXRoOWtfaHdfc2V0X3J4X2J1ZnNpemUoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBidWZfc2l6ZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfcGh5LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX3BoeS5jCmluZGV4IGViMjUwZDYuLjI1ZjNjMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19waHkuYwpAQCAtNzUsMTYgKzc1LDQyIEBACiAJZnJlcSA9IGNlbnRlcnMuc3ludGhfY2VudGVyOwogCiAJaWYgKGZyZXEgPCA0ODAwKSB7ICAgICAvKiAyIEdIeiwgZnJhY3Rpb25hbCBtb2RlICovCi0JCWlmIChBUl9TUkVWXzk0ODUoYWgpKQotCQkJY2hhbm5lbFNlbCA9IENIQU5TRUxfMkdfOTQ4NShmcmVxKTsKLQkJZWxzZQorCQlpZiAoQVJfU1JFVl85NDg1KGFoKSkgeworCQkJdTMyIGNoYW5fZnJhYzsKKworCQkJLyoKKwkJCSAqIGZyZXFfcmVmID0gNDAgLyAocmVmZGl2YSA+PiBhbW9kZXJlZnNlbCk7IHdoZXJlIHJlZmRpdmE9MSBhbmQgYW1vZGVyZWZzZWw9MAorCQkJICogbmRpdiA9ICgoY2hhbl9taHogKiA0KSAvIDMpIC8gZnJlcV9yZWY7CisJCQkgKiBjaGFuc2VsID0gaW50KG5kaXYpLCBjaGFuZnJhYyA9IChuZGl2IC0gY2hhbnNlbCkgKiAweDIwMDAwCisJCQkgKi8KKwkJCWNoYW5uZWxTZWwgPSAoZnJlcSAqIDQpIC8gMTIwOworCQkJY2hhbl9mcmFjID0gKCgoZnJlcSAqIDQpICUgMTIwKSAqIDB4MjAwMDApIC8gMTIwOworCQkJY2hhbm5lbFNlbCA9IChjaGFubmVsU2VsIDw8IDE3KSB8IGNoYW5fZnJhYzsKKwkJfSBlbHNlIGlmIChBUl9TUkVWXzkzNDAoYWgpKSB7CisJCQlpZiAoYWgtPmlzX2Nsa18yNW1oeikgeworCQkJCXUzMiBjaGFuX2ZyYWM7CisKKwkJCQljaGFubmVsU2VsID0gKGZyZXEgKiAyKSAvIDc1OworCQkJCWNoYW5fZnJhYyA9ICgoKGZyZXEgKiAyKSAlIDc1KSAqIDB4MjAwMDApIC8gNzU7CisJCQkJY2hhbm5lbFNlbCA9IChjaGFubmVsU2VsIDw8IDE3KSB8IGNoYW5fZnJhYzsKKwkJCX0gZWxzZQorCQkJCWNoYW5uZWxTZWwgPSBDSEFOU0VMXzJHKGZyZXEpID4+IDE7CisJCX0gZWxzZQogCQkJY2hhbm5lbFNlbCA9IENIQU5TRUxfMkcoZnJlcSk7CiAJCS8qIFNldCB0byAyRyBtb2RlICovCiAJCWJNb2RlID0gMTsKIAl9IGVsc2UgewotCQljaGFubmVsU2VsID0gQ0hBTlNFTF81RyhmcmVxKTsKLQkJLyogRG91YmxlciBpcyBPTiwgc28sIGRpdmlkZSBjaGFubmVsU2VsIGJ5IDIuICovCi0JCWNoYW5uZWxTZWwgPj49IDE7CisJCWlmIChBUl9TUkVWXzkzNDAoYWgpICYmIGFoLT5pc19jbGtfMjVtaHopIHsKKwkJCXUzMiBjaGFuX2ZyYWM7CisKKwkJCWNoYW5uZWxTZWwgPSAoZnJlcSAqIDIpIC8gNzU7CisJCQljaGFuX2ZyYWMgPSAoKGZyZXEgJSA3NSkgKiAweDIwMDAwKSAvIDc1OworCQkJY2hhbm5lbFNlbCA9IChjaGFubmVsU2VsIDw8IDE3KSB8IGNoYW5fZnJhYzsKKwkJfSBlbHNlIHsKKwkJCWNoYW5uZWxTZWwgPSBDSEFOU0VMXzVHKGZyZXEpOworCQkJLyogRG91YmxlciBpcyBPTiwgc28sIGRpdmlkZSBjaGFubmVsU2VsIGJ5IDIuICovCisJCQljaGFubmVsU2VsID4+PSAxOworCQl9CiAJCS8qIFNldCB0byA1RyBtb2RlICovCiAJCWJNb2RlID0gMDsKIAl9CkBAIC0xNDIsNyArMTY4LDcgQEAKIAkgKiBpcyBvdXQtb2YtYmFuZCBhbmQgY2FuIGJlIGlnbm9yZWQuCiAJICovCiAKLQlpZiAoQVJfU1JFVl85NDg1KGFoKSkgeworCWlmIChBUl9TUkVWXzk0ODUoYWgpIHx8IEFSX1NSRVZfOTM0MChhaCkpIHsKIAkJc3B1cl9mYmluX3B0ciA9IGFyOTAwM19nZXRfc3B1cl9jaGFuX3B0cihhaCwKIAkJCQkJCQkgSVNfQ0hBTl8yR0haKGNoYW4pKTsKIAkJaWYgKHNwdXJfZmJpbl9wdHJbMF0gPT0gMCkgLyogTm8gc3B1ciAqLwpAQCAtMTY3LDcgKzE5Myw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgbWF4X3NwdXJfY250czsgaSsrKSB7CiAJCW5lZ2F0aXZlID0gMDsKLQkJaWYgKEFSX1NSRVZfOTQ4NShhaCkpCisJCWlmIChBUl9TUkVWXzk0ODUoYWgpIHx8IEFSX1NSRVZfOTM0MChhaCkpCiAJCQljdXJfYmJfc3B1ciA9IEZCSU4yRlJFUShzcHVyX2ZiaW5fcHRyW2ldLAogCQkJCQlJU19DSEFOXzJHSFooY2hhbikpIC0gc3ludGhfZnJlcTsKIAkJZWxzZQpAQCAtNDAxLDcgKzQyNyw3IEBACiAKIAlhcjkwMDNfaHdfc3B1cl9vZmRtX2NsZWFyKGFoKTsKIAotCWZvciAoaSA9IDA7IHNwdXJDaGFuc1B0cltpXSAmJiBpIDwgNTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IEFSX0VFUFJPTV9NT0RBTF9TUFVSUyAmJiBzcHVyQ2hhbnNQdHJbaV07IGkrKykgewogCQlmcmVxX29mZnNldCA9IEZCSU4yRlJFUShzcHVyQ2hhbnNQdHJbaV0sIG1vZGUpIC0gc3ludGhfZnJlcTsKIAkJaWYgKGFicyhmcmVxX29mZnNldCkgPCByYW5nZSkgewogCQkJYXI5MDAzX2h3X3NwdXJfb2ZkbV93b3JrKGFoLCBjaGFuLCBmcmVxX29mZnNldCk7CkBAIC01OTAsMjkgKzYxNiwyNSBAQAogCXN0cnVjdCBhdGhfcmVndWxhdG9yeSAqcmVndWxhdG9yeSA9IGF0aDlrX2h3X3JlZ3VsYXRvcnkoYWgpOwogCXVuc2lnbmVkIGludCByZWdXcml0ZXMgPSAwLCBpOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IGNoYW4tPmNoYW47Ci0JdTMyIG1vZGVzSW5kZXgsIGZyZXFJbmRleDsKKwl1MzIgbW9kZXNJbmRleDsKIAogCXN3aXRjaCAoY2hhbi0+Y2hhbm1vZGUpIHsKIAljYXNlIENIQU5ORUxfQToKIAljYXNlIENIQU5ORUxfQV9IVDIwOgogCQltb2Rlc0luZGV4ID0gMTsKLQkJZnJlcUluZGV4ID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBDSEFOTkVMX0FfSFQ0MFBMVVM6CiAJY2FzZSBDSEFOTkVMX0FfSFQ0ME1JTlVTOgogCQltb2Rlc0luZGV4ID0gMjsKLQkJZnJlcUluZGV4ID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBDSEFOTkVMX0c6CiAJY2FzZSBDSEFOTkVMX0dfSFQyMDoKIAljYXNlIENIQU5ORUxfQjoKIAkJbW9kZXNJbmRleCA9IDQ7Ci0JCWZyZXFJbmRleCA9IDI7CiAJCWJyZWFrOwogCWNhc2UgQ0hBTk5FTF9HX0hUNDBQTFVTOgogCWNhc2UgQ0hBTk5FTF9HX0hUNDBNSU5VUzoKIAkJbW9kZXNJbmRleCA9IDM7Ci0JCWZyZXFJbmRleCA9IDI7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTYzNyw2ICs2NTksOSBAQAogCQlSRUdfV1JJVEVfQVJSQVkoJmFoLT5pbmlNb2Rlc0FkZGl0aW9uYWwsCiAJCQkJbW9kZXNJbmRleCwgcmVnV3JpdGVzKTsKIAorCWlmIChBUl9TUkVWXzkzNDAoYWgpICYmICFhaC0+aXNfY2xrXzI1bWh6KQorCQlSRUdfV1JJVEVfQVJSQVkoJmFoLT5pbmlNb2Rlc0FkZGl0aW9uYWxfNDBNLCAxLCByZWdXcml0ZXMpOworCiAJYXI5MDAzX2h3X292ZXJyaWRlX2luaShhaCk7CiAJYXI5MDAzX2h3X3NldF9jaGFubmVsX3JlZ3MoYWgsIGNoYW4pOwogCWFyOTAwM19od19zZXRfY2hhaW5fbWFza3MoYWgsIGFoLT5yeGNoYWlubWFzaywgYWgtPnR4Y2hhaW5tYXNrKTsKQEAgLTExNTksOSArMTE4NCw1MiBAQAogCWNvbmYtPnJhZGFyX2luYmFuZCA9IDg7CiB9CiAKK3N0YXRpYyB2b2lkIGFyOTAwM19od19hbnRkaXZfY29tYl9jb25mX2dldChzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgICBzdHJ1Y3QgYXRoX2h3X2FudGNvbWJfY29uZiAqYW50Y29uZikKK3sKKwl1MzIgcmVndmFsOworCisJcmVndmFsID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9NQ19HQUlOX0NUUkwpOworCWFudGNvbmYtPm1haW5fbG5hX2NvbmYgPSAocmVndmFsICYgQVJfUEhZXzk0ODVfQU5UX0RJVl9NQUlOX0xOQUNPTkYpID4+CisJCQkJICBBUl9QSFlfOTQ4NV9BTlRfRElWX01BSU5fTE5BQ09ORl9TOworCWFudGNvbmYtPmFsdF9sbmFfY29uZiA9IChyZWd2YWwgJiBBUl9QSFlfOTQ4NV9BTlRfRElWX0FMVF9MTkFDT05GKSA+PgorCQkJCSBBUl9QSFlfOTQ4NV9BTlRfRElWX0FMVF9MTkFDT05GX1M7CisJYW50Y29uZi0+ZmFzdF9kaXZfYmlhcyA9IChyZWd2YWwgJiBBUl9QSFlfOTQ4NV9BTlRfRkFTVF9ESVZfQklBUykgPj4KKwkJCQkgIEFSX1BIWV85NDg1X0FOVF9GQVNUX0RJVl9CSUFTX1M7CisJYW50Y29uZi0+bG5hMV9sbmEyX2RlbHRhID0gLTk7CisJYW50Y29uZi0+ZGl2X2dyb3VwID0gMjsKK30KKworc3RhdGljIHZvaWQgYXI5MDAzX2h3X2FudGRpdl9jb21iX2NvbmZfc2V0KHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgIHN0cnVjdCBhdGhfaHdfYW50Y29tYl9jb25mICphbnRjb25mKQoreworCXUzMiByZWd2YWw7CisKKwlyZWd2YWwgPSBSRUdfUkVBRChhaCwgQVJfUEhZX01DX0dBSU5fQ1RSTCk7CisJcmVndmFsICY9IH4oQVJfUEhZXzk0ODVfQU5UX0RJVl9NQUlOX0xOQUNPTkYgfAorCQkgICAgQVJfUEhZXzk0ODVfQU5UX0RJVl9BTFRfTE5BQ09ORiB8CisJCSAgICBBUl9QSFlfOTQ4NV9BTlRfRkFTVF9ESVZfQklBUyB8CisJCSAgICBBUl9QSFlfOTQ4NV9BTlRfRElWX01BSU5fR0FJTlRCIHwKKwkJICAgIEFSX1BIWV85NDg1X0FOVF9ESVZfQUxUX0dBSU5UQik7CisJcmVndmFsIHw9ICgoYW50Y29uZi0+bWFpbl9sbmFfY29uZiA8PAorCQkJCQlBUl9QSFlfOTQ4NV9BTlRfRElWX01BSU5fTE5BQ09ORl9TKQorCQkgICAmIEFSX1BIWV85NDg1X0FOVF9ESVZfTUFJTl9MTkFDT05GKTsKKwlyZWd2YWwgfD0gKChhbnRjb25mLT5hbHRfbG5hX2NvbmYgPDwgQVJfUEhZXzk0ODVfQU5UX0RJVl9BTFRfTE5BQ09ORl9TKQorCQkgICAmIEFSX1BIWV85NDg1X0FOVF9ESVZfQUxUX0xOQUNPTkYpOworCXJlZ3ZhbCB8PSAoKGFudGNvbmYtPmZhc3RfZGl2X2JpYXMgPDwgQVJfUEhZXzk0ODVfQU5UX0ZBU1RfRElWX0JJQVNfUykKKwkJICAgJiBBUl9QSFlfOTQ4NV9BTlRfRkFTVF9ESVZfQklBUyk7CisJcmVndmFsIHw9ICgoYW50Y29uZi0+bWFpbl9nYWludGIgPDwgQVJfUEhZXzk0ODVfQU5UX0RJVl9NQUlOX0dBSU5UQl9TKQorCQkgICAmIEFSX1BIWV85NDg1X0FOVF9ESVZfTUFJTl9HQUlOVEIpOworCXJlZ3ZhbCB8PSAoKGFudGNvbmYtPmFsdF9nYWludGIgPDwgQVJfUEhZXzk0ODVfQU5UX0RJVl9BTFRfR0FJTlRCX1MpCisJCSAgICYgQVJfUEhZXzk0ODVfQU5UX0RJVl9BTFRfR0FJTlRCKTsKKworCVJFR19XUklURShhaCwgQVJfUEhZX01DX0dBSU5fQ1RSTCwgcmVndmFsKTsKK30KKwogdm9pZCBhcjkwMDNfaHdfYXR0YWNoX3BoeV9vcHMoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJc3RydWN0IGF0aF9od19wcml2YXRlX29wcyAqcHJpdl9vcHMgPSBhdGg5a19od19wcml2YXRlX29wcyhhaCk7CisJc3RydWN0IGF0aF9od19vcHMgKm9wcyA9IGF0aDlrX2h3X29wcyhhaCk7CiAJc3RhdGljIGNvbnN0IHUzMiBhcjkzMDBfY2NhX3JlZ3NbNl0gPSB7CiAJCUFSX1BIWV9DQ0FfMCwKIAkJQVJfUEhZX0NDQV8xLApAQCAtMTE4OCw2ICsxMjU2LDkgQEAKIAlwcml2X29wcy0+YW5pX2NhY2hlX2luaV9yZWdzID0gYXI5MDAzX2h3X2FuaV9jYWNoZV9pbmlfcmVnczsKIAlwcml2X29wcy0+c2V0X3JhZGFyX3BhcmFtcyA9IGFyOTAwM19od19zZXRfcmFkYXJfcGFyYW1zOwogCisJb3BzLT5hbnRkaXZfY29tYl9jb25mX2dldCA9IGFyOTAwM19od19hbnRkaXZfY29tYl9jb25mX2dldDsKKwlvcHMtPmFudGRpdl9jb21iX2NvbmZfc2V0ID0gYXI5MDAzX2h3X2FudGRpdl9jb21iX2NvbmZfc2V0OworCiAJYXI5MDAzX2h3X3NldF9uZl9saW1pdHMoYWgpOwogCWFyOTAwM19od19zZXRfcmFkYXJfY29uZihhaCk7CiAJbWVtY3B5KGFoLT5uZl9yZWdzLCBhcjkzMDBfY2NhX3JlZ3MsIHNpemVvZihhaC0+bmZfcmVncykpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19waHkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfcGh5LmgKaW5kZXggOGJkZGEyYy4uYzc1MDViNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19waHkuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX3BoeS5oCkBAIC0yNjEsMTIgKzI2MSwzNCBAQAogI2RlZmluZSBBUl9QSFlfRVhUX0NDQTAgICAgICAgICAoQVJfQUdDX0JBU0UgKyAweDIwKQogI2RlZmluZSBBUl9QSFlfUkVTVEFSVCAgICAgICAgICAoQVJfQUdDX0JBU0UgKyAweDI0KQogCisvKgorICogQW50ZW5uYSBEaXZlcnNpdHkgIHNldHRpbmdzCisgKi8KICNkZWZpbmUgQVJfUEhZX01DX0dBSU5fQ1RSTCAgICAgKEFSX0FHQ19CQVNFICsgMHgyOCkKICNkZWZpbmUgQVJfQU5UX0RJVl9DVFJMX0FMTAkweDdlMDAwMDAwCiAjZGVmaW5lIEFSX0FOVF9ESVZfQ1RSTF9BTExfUwkyNQogI2RlZmluZSBBUl9BTlRfRElWX0VOQUJMRQkweDEwMDAwMDAKICNkZWZpbmUgQVJfQU5UX0RJVl9FTkFCTEVfUwkyNAogCisKKyNkZWZpbmUgQVJfUEhZXzk0ODVfQU5UX0ZBU1RfRElWX0JJQVMJCQkweDAwMDA3ZTAwCisjZGVmaW5lIEFSX1BIWV85NDg1X0FOVF9GQVNUX0RJVl9CSUFTX1MgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIEFSX1BIWV85NDg1X0FOVF9ESVZfTE5BRElWCQkJMHgwMTAwMDAwMAorI2RlZmluZSBBUl9QSFlfOTQ4NV9BTlRfRElWX0xOQURJVl9TCQkJMjQKKyNkZWZpbmUgQVJfUEhZXzk0ODVfQU5UX0RJVl9BTFRfTE5BQ09ORgkJCTB4MDYwMDAwMDAKKyNkZWZpbmUgQVJfUEhZXzk0ODVfQU5UX0RJVl9BTFRfTE5BQ09ORl9TCQkyNQorI2RlZmluZSBBUl9QSFlfOTQ4NV9BTlRfRElWX01BSU5fTE5BQ09ORgkJMHgxODAwMDAwMAorI2RlZmluZSBBUl9QSFlfOTQ4NV9BTlRfRElWX01BSU5fTE5BQ09ORl9TCQkyNworI2RlZmluZSBBUl9QSFlfOTQ4NV9BTlRfRElWX0FMVF9HQUlOVEIJCQkweDIwMDAwMDAwCisjZGVmaW5lIEFSX1BIWV85NDg1X0FOVF9ESVZfQUxUX0dBSU5UQl9TCQkyOQorI2RlZmluZSBBUl9QSFlfOTQ4NV9BTlRfRElWX01BSU5fR0FJTlRCCQkJMHg0MDAwMDAwMAorI2RlZmluZSBBUl9QSFlfOTQ4NV9BTlRfRElWX01BSU5fR0FJTlRCX1MJCTMwCisKKyNkZWZpbmUgQVJfUEhZXzk0ODVfQU5UX0RJVl9MTkExX01JTlVTX0xOQTIJCTB4MAorI2RlZmluZSBBUl9QSFlfOTQ4NV9BTlRfRElWX0xOQTIJCQkweDEKKyNkZWZpbmUgQVJfUEhZXzk0ODVfQU5UX0RJVl9MTkExCQkJMHgyCisjZGVmaW5lIEFSX1BIWV85NDg1X0FOVF9ESVZfTE5BMV9QTFVTX0xOQTIJCTB4MworCiAjZGVmaW5lIEFSX1BIWV9FWFRDSE5fUFdSVEhSMSAgIChBUl9BR0NfQkFTRSArIDB4MmMpCiAjZGVmaW5lIEFSX1BIWV9FWFRfQ0hOX1dJTiAgICAgIChBUl9BR0NfQkFTRSArIDB4MzApCiAjZGVmaW5lIEFSX1BIWV8yMF80MF9ERVRfVEhSICAgIChBUl9BR0NfQkFTRSArIDB4MzQpCkBAIC01NDgsMTUgKzU3MCwxMiBAQAogCiAjZGVmaW5lIEFSX1BIWV9UWEdBSU5fVEFCTEUgICAgICAoQVJfU01fQkFTRSArIDB4MzAwKQogCi0jZGVmaW5lIEFSX1BIWV9UWF9JUUNBTF9TVEFSVF85NDg1CQkoQVJfU01fQkFTRSArIDB4M2M0KQotI2RlZmluZSBBUl9QSFlfVFhfSVFDQUxfU1RBUlRfRE9fQ0FMXzk0ODUJMHg4MDAwMDAwMAotI2RlZmluZSBBUl9QSFlfVFhfSVFDQUxfU1RBUlRfRE9fQ0FMXzk0ODVfUwkzMQotI2RlZmluZSBBUl9QSFlfVFhfSVFDQUxfQ09OVFJPTF8xXzk0ODUJCShBUl9TTV9CQVNFICsgMHgzYzgpCi0jZGVmaW5lIEFSX1BIWV9UWF9JUUNBTF9TVEFUVVNfQjBfOTQ4NQkJKEFSX1NNX0JBU0UgKyAweDNmMCkKLQotI2RlZmluZSBBUl9QSFlfVFhfSVFDQUxfQ09OVFJPTF8xICAgKEFSX1NNX0JBU0UgKyAweDQ0OCkKLSNkZWZpbmUgQVJfUEhZX1RYX0lRQ0FMX1NUQVJUICAgICAgIChBUl9TTV9CQVNFICsgMHg0NDApCi0jZGVmaW5lIEFSX1BIWV9UWF9JUUNBTF9TVEFUVVNfQjAgICAoQVJfU01fQkFTRSArIDB4NDhjKQorI2RlZmluZSBBUl9QSFlfVFhfSVFDQUxfQ09OVFJPTF8xICAgKEFSX1NNX0JBU0UgKyBBUl9TUkVWXzk0ODUoYWgpID8gXAorCQkJCQkJIDB4M2M4IDogMHg0NDgpCisjZGVmaW5lIEFSX1BIWV9UWF9JUUNBTF9TVEFSVCAgICAgICAoQVJfU01fQkFTRSArIEFSX1NSRVZfOTQ4NShhaCkgPyBcCisJCQkJCQkgMHgzYzQgOiAweDQ0MCkKKyNkZWZpbmUgQVJfUEhZX1RYX0lRQ0FMX1NUQVRVU19CMCAgIChBUl9TTV9CQVNFICsgQVJfU1JFVl85NDg1KGFoKSA/IFwKKwkJCQkJCSAweDNmMCA6IDB4NDhjKQogI2RlZmluZSBBUl9QSFlfVFhfSVFDQUxfQ09SUl9DT0VGRl9CMChfaSkgICAgKEFSX1NNX0JBU0UgKyBcCiAJCQkJCSAgICAgKEFSX1NSRVZfOTQ4NShhaCkgPyBcCiAJCQkJCSAgICAgIDB4M2QwIDogMHg0NTApICsgKChfaSkgPDwgMikpCkBAIC01ODgsNyArNjA3LDcgQEAKICNkZWZpbmUgQVJfUEhZXzY1Tk1fQ0gwX0JJQVMyICAgICAgIDB4MTYwYzQKICNkZWZpbmUgQVJfUEhZXzY1Tk1fQ0gwX0JJQVM0ICAgICAgIDB4MTYwY2MKICNkZWZpbmUgQVJfUEhZXzY1Tk1fQ0gwX1JYVFg0ICAgICAgIDB4MTYxMGMKLSNkZWZpbmUgQVJfUEhZXzY1Tk1fQ0gwX1RIRVJNICAgICAgIChBUl9TUkVWXzk0ODUoYWgpID8gMHgxNjI4YyA6IDB4MTYyOTApCisjZGVmaW5lIEFSX1BIWV82NU5NX0NIMF9USEVSTSAgICAgICAoQVJfU1JFVl85MzAwKGFoKSA/IDB4MTYyOTAgOiAweDE2MjhjKQogCiAjZGVmaW5lIEFSX1BIWV82NU5NX0NIMF9USEVSTV9MT0NBTCAgIDB4ODAwMDAwMDAKICNkZWZpbmUgQVJfUEhZXzY1Tk1fQ0gwX1RIRVJNX0xPQ0FMX1MgMzEKQEAgLTc1OCwxMCArNzc3LDEwIEBACiAjZGVmaW5lIEFSX1BIWV9TUEVDVFJBTF9TQ0FOX1NIT1JUX1JFUEVBVCAgIDB4MDEwMDAwMDAKICNkZWZpbmUgQVJfUEhZX1NQRUNUUkFMX1NDQU5fU0hPUlRfUkVQRUFUX1MgMjQKICNkZWZpbmUgQVJfUEhZX0NIQU5ORUxfU1RBVFVTX1JYX0NMRUFSICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBBUl9QSFlfVFhfSVFDQVFMX0NPTlRST0xfMV9JUUNPUlJfSV9RX0NPRkZfREVMUFQgICAgICAgICAgICAgMHgwMWZjMDAwMAotI2RlZmluZSBBUl9QSFlfVFhfSVFDQVFMX0NPTlRST0xfMV9JUUNPUlJfSV9RX0NPRkZfREVMUFRfUyAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBBUl9QSFlfVFhfSVFDQUxfU1RBUlRfRE9fQ0FMICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIEFSX1BIWV9UWF9JUUNBTF9TVEFSVF9ET19DQUxfUyAgICAgIDAKKyNkZWZpbmUgQVJfUEhZX1RYX0lRQ0FMX0NPTlRST0xfMV9JUUNPUlJfSV9RX0NPRkZfREVMUFQgICAgICAgICAgICAgMHgwMWZjMDAwMAorI2RlZmluZSBBUl9QSFlfVFhfSVFDQUxfQ09OVFJPTF8xX0lRQ09SUl9JX1FfQ09GRl9ERUxQVF9TICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIEFSX1BIWV9UWF9JUUNBTF9TVEFSVF9ET19DQUwJICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVJfUEhZX1RYX0lRQ0FMX1NUQVJUX0RPX0NBTF9TCSAgICAwCiAKICNkZWZpbmUgQVJfUEhZX1RYX0lRQ0FMX1NUQVRVU19GQUlMRUQgICAgMHgwMDAwMDAwMQogI2RlZmluZSBBUl9QSFlfQ0FMSUJSQVRFRF9HQUlOU18wCSAweDNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MzQwX2luaXR2YWxzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MzQwX2luaXR2YWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE1YThhZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkzNDBfaW5pdHZhbHMuaApAQCAtMCwwICsxLDE1MjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBJTklUVkFMU185MzQwX0gKKyNkZWZpbmUgSU5JVFZBTFNfOTM0MF9ICisKK3N0YXRpYyBjb25zdCB1MzIgYXI5MzQwXzFwMF9yYWRpb19wb3N0YW1ibGVbXVs1XSA9IHsKKwkvKiAgQWRkciAgICAgIDVHX0hUMjAgICAgIDVHX0hUNDAgICAgIDJHX0hUNDAgICAgIDJHX0hUMjAgICovCisJezB4MDAwMTYwYWMsIDB4YTQ2NDY4MDAsIDB4YTQ2NDY4MDAsIDB4YTQ2NDY4MDAsIDB4YTQ2NDY4MDB9LAorCXsweDAwMDE2MTBjLCAweDA4MDAwMDAwLCAweDA4MDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjE0MCwgMHgxMDgwNDAwMCwgMHgxMDgwNDAwMCwgMHg1MDgwNDAwMCwgMHg1MDgwNDAwMH0sCisJezB4MDAwMTY1MGMsIDB4MDgwMDAwMDAsIDB4MDgwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2NTQwLCAweDEwODA0MDAwLCAweDEwODA0MDAwLCAweDUwODA0MDAwLCAweDUwODA0MDAwfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5MzQwTW9kZXNfbG93ZXN0X29iX2RiX3R4X2dhaW5fdGFibGVfMXAwW11bNV0gPSB7CisJLyogICBBZGRyICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgICAyR19IVDIwICAqLworCXsweDAwMDBhNDEwLCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5fSwKKwl7MHgwMDAwYTUwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE1MDQsIDB4MDYwMDAwMDMsIDB4MDYwMDAwMDMsIDB4MDQwMDAwMDIsIDB4MDQwMDAwMDJ9LAorCXsweDAwMDBhNTA4LCAweDBhMDAwMDIwLCAweDBhMDAwMDIwLCAweDA4MDAwMDA0LCAweDA4MDAwMDA0fSwKKwl7MHgwMDAwYTUwYywgMHgxMDAwMDAyMywgMHgxMDAwMDAyMywgMHgwYjAwMDIwMCwgMHgwYjAwMDIwMH0sCisJezB4MDAwMGE1MTAsIDB4MTYwMDAyMjAsIDB4MTYwMDAyMjAsIDB4MGYwMDAyMDIsIDB4MGYwMDAyMDJ9LAorCXsweDAwMDBhNTE0LCAweDFjMDAwMjIzLCAweDFjMDAwMjIzLCAweDEyMDAwNDAwLCAweDEyMDAwNDAwfSwKKwl7MHgwMDAwYTUxOCwgMHgyMTAyMDIyMCwgMHgyMTAyMDIyMCwgMHgxNjAwMDQwMiwgMHgxNjAwMDQwMn0sCisJezB4MDAwMGE1MWMsIDB4MjcwMjAyMjMsIDB4MjcwMjAyMjMsIDB4MTkwMDA0MDQsIDB4MTkwMDA0MDR9LAorCXsweDAwMDBhNTIwLCAweDJiMDIyMjIwLCAweDJiMDIyMjIwLCAweDFjMDAwNjAzLCAweDFjMDAwNjAzfSwKKwl7MHgwMDAwYTUyNCwgMHgyZjAyMjIyMiwgMHgyZjAyMjIyMiwgMHgyMTAwMGEwMiwgMHgyMTAwMGEwMn0sCisJezB4MDAwMGE1MjgsIDB4MzQwMjIyMjUsIDB4MzQwMjIyMjUsIDB4MjUwMDBhMDQsIDB4MjUwMDBhMDR9LAorCXsweDAwMDBhNTJjLCAweDNhMDIyMjJhLCAweDNhMDIyMjJhLCAweDI4MDAwYTIwLCAweDI4MDAwYTIwfSwKKwl7MHgwMDAwYTUzMCwgMHgzZTAyMjIyYywgMHgzZTAyMjIyYywgMHgyYzAwMGUyMCwgMHgyYzAwMGUyMH0sCisJezB4MDAwMGE1MzQsIDB4NDIwMjI0MmEsIDB4NDIwMjI0MmEsIDB4MzAwMDBlMjIsIDB4MzAwMDBlMjJ9LAorCXsweDAwMDBhNTM4LCAweDQ3MDIyNDRhLCAweDQ3MDIyNDRhLCAweDM0MDAwZTI0LCAweDM0MDAwZTI0fSwKKwl7MHgwMDAwYTUzYywgMHg0YjAyMjQ0YywgMHg0YjAyMjQ0YywgMHgzODAwMTY0MCwgMHgzODAwMTY0MH0sCisJezB4MDAwMGE1NDAsIDB4NGUwMjI0NmMsIDB4NGUwMjI0NmMsIDB4M2MwMDE2NjAsIDB4M2MwMDE2NjB9LAorCXsweDAwMDBhNTQ0LCAweDUzMDIyNjZjLCAweDUzMDIyNjZjLCAweDNmMDAxODYxLCAweDNmMDAxODYxfSwKKwl7MHgwMDAwYTU0OCwgMHg1NzAyMjg2YywgMHg1NzAyMjg2YywgMHg0MzAwMWE4MSwgMHg0MzAwMWE4MX0sCisJezB4MDAwMGE1NGMsIDB4NWMwNDI4NmIsIDB4NWMwNDI4NmIsIDB4NDcwMDFhODMsIDB4NDcwMDFhODN9LAorCXsweDAwMDBhNTUwLCAweDYxMDQyYTZjLCAweDYxMDQyYTZjLCAweDRhMDAxYzg0LCAweDRhMDAxYzg0fSwKKwl7MHgwMDAwYTU1NCwgMHg2NjA2MmE2YywgMHg2NjA2MmE2YywgMHg0ZTAwMWNlMywgMHg0ZTAwMWNlM30sCisJezB4MDAwMGE1NTgsIDB4NmIwNjJlNmMsIDB4NmIwNjJlNmMsIDB4NTIwMDFjZTUsIDB4NTIwMDFjZTV9LAorCXsweDAwMDBhNTVjLCAweDcwMDYzMDhjLCAweDcwMDYzMDhjLCAweDU2MDAxY2U5LCAweDU2MDAxY2U5fSwKKwl7MHgwMDAwYTU2MCwgMHg3MzBhMzA4YSwgMHg3MzBhMzA4YSwgMHg1YTAwMWNlYiwgMHg1YTAwMWNlYn0sCisJezB4MDAwMGE1NjQsIDB4NzcwYTMwOGMsIDB4NzcwYTMwOGMsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAorCXsweDAwMDBhNTY4LCAweDc3MGEzMDhjLCAweDc3MGEzMDhjLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKKwl7MHgwMDAwYTU2YywgMHg3NzBhMzA4YywgMHg3NzBhMzA4YywgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCisJezB4MDAwMGE1NzAsIDB4NzcwYTMwOGMsIDB4NzcwYTMwOGMsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAorCXsweDAwMDBhNTc0LCAweDc3MGEzMDhjLCAweDc3MGEzMDhjLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKKwl7MHgwMDAwYTU3OCwgMHg3NzBhMzA4YywgMHg3NzBhMzA4YywgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCisJezB4MDAwMGE1N2MsIDB4NzcwYTMwOGMsIDB4NzcwYTMwOGMsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAorCXsweDAwMDBhNTgwLCAweDAwODAwMDAwLCAweDAwODAwMDAwLCAweDAwODAwMDAwLCAweDAwODAwMDAwfSwKKwl7MHgwMDAwYTU4NCwgMHgwNjgwMDAwMywgMHgwNjgwMDAwMywgMHgwNDgwMDAwMiwgMHgwNDgwMDAwMn0sCisJezB4MDAwMGE1ODgsIDB4MGE4MDAwMjAsIDB4MGE4MDAwMjAsIDB4MDg4MDAwMDQsIDB4MDg4MDAwMDR9LAorCXsweDAwMDBhNThjLCAweDEwODAwMDIzLCAweDEwODAwMDIzLCAweDBiODAwMjAwLCAweDBiODAwMjAwfSwKKwl7MHgwMDAwYTU5MCwgMHgxNjgwMDIyMCwgMHgxNjgwMDIyMCwgMHgwZjgwMDIwMiwgMHgwZjgwMDIwMn0sCisJezB4MDAwMGE1OTQsIDB4MWM4MDAyMjMsIDB4MWM4MDAyMjMsIDB4MTI4MDA0MDAsIDB4MTI4MDA0MDB9LAorCXsweDAwMDBhNTk4LCAweDIxODIwMjIwLCAweDIxODIwMjIwLCAweDE2ODAwNDAyLCAweDE2ODAwNDAyfSwKKwl7MHgwMDAwYTU5YywgMHgyNzgyMDIyMywgMHgyNzgyMDIyMywgMHgxOTgwMDQwNCwgMHgxOTgwMDQwNH0sCisJezB4MDAwMGE1YTAsIDB4MmI4MjIyMjAsIDB4MmI4MjIyMjAsIDB4MWM4MDA2MDMsIDB4MWM4MDA2MDN9LAorCXsweDAwMDBhNWE0LCAweDJmODIyMjIyLCAweDJmODIyMjIyLCAweDIxODAwYTAyLCAweDIxODAwYTAyfSwKKwl7MHgwMDAwYTVhOCwgMHgzNDgyMjIyNSwgMHgzNDgyMjIyNSwgMHgyNTgwMGEwNCwgMHgyNTgwMGEwNH0sCisJezB4MDAwMGE1YWMsIDB4M2E4MjIyMmEsIDB4M2E4MjIyMmEsIDB4Mjg4MDBhMjAsIDB4Mjg4MDBhMjB9LAorCXsweDAwMDBhNWIwLCAweDNlODIyMjJjLCAweDNlODIyMjJjLCAweDJjODAwZTIwLCAweDJjODAwZTIwfSwKKwl7MHgwMDAwYTViNCwgMHg0MjgyMjQyYSwgMHg0MjgyMjQyYSwgMHgzMDgwMGUyMiwgMHgzMDgwMGUyMn0sCisJezB4MDAwMGE1YjgsIDB4NDc4MjI0NGEsIDB4NDc4MjI0NGEsIDB4MzQ4MDBlMjQsIDB4MzQ4MDBlMjR9LAorCXsweDAwMDBhNWJjLCAweDRiODIyNDRjLCAweDRiODIyNDRjLCAweDM4ODAxNjQwLCAweDM4ODAxNjQwfSwKKwl7MHgwMDAwYTVjMCwgMHg0ZTgyMjQ2YywgMHg0ZTgyMjQ2YywgMHgzYzgwMTY2MCwgMHgzYzgwMTY2MH0sCisJezB4MDAwMGE1YzQsIDB4NTM4MjI2NmMsIDB4NTM4MjI2NmMsIDB4M2Y4MDE4NjEsIDB4M2Y4MDE4NjF9LAorCXsweDAwMDBhNWM4LCAweDU3ODIyODZjLCAweDU3ODIyODZjLCAweDQzODAxYTgxLCAweDQzODAxYTgxfSwKKwl7MHgwMDAwYTVjYywgMHg1Yzg0Mjg2YiwgMHg1Yzg0Mjg2YiwgMHg0NzgwMWE4MywgMHg0NzgwMWE4M30sCisJezB4MDAwMGE1ZDAsIDB4NjE4NDJhNmMsIDB4NjE4NDJhNmMsIDB4NGE4MDFjODQsIDB4NGE4MDFjODR9LAorCXsweDAwMDBhNWQ0LCAweDY2ODYyYTZjLCAweDY2ODYyYTZjLCAweDRlODAxY2UzLCAweDRlODAxY2UzfSwKKwl7MHgwMDAwYTVkOCwgMHg2Yjg2MmU2YywgMHg2Yjg2MmU2YywgMHg1MjgwMWNlNSwgMHg1MjgwMWNlNX0sCisJezB4MDAwMGE1ZGMsIDB4NzA4NjMwOGMsIDB4NzA4NjMwOGMsIDB4NTY4MDFjZTksIDB4NTY4MDFjZTl9LAorCXsweDAwMDBhNWUwLCAweDczOGEzMDhhLCAweDczOGEzMDhhLCAweDVhODAxY2ViLCAweDVhODAxY2VifSwKKwl7MHgwMDAwYTVlNCwgMHg3NzhhMzA4YywgMHg3NzhhMzA4YywgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCisJezB4MDAwMGE1ZTgsIDB4Nzc4YTMwOGMsIDB4Nzc4YTMwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAorCXsweDAwMDBhNWVjLCAweDc3OGEzMDhjLCAweDc3OGEzMDhjLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKKwl7MHgwMDAwYTVmMCwgMHg3NzhhMzA4YywgMHg3NzhhMzA4YywgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCisJezB4MDAwMGE1ZjQsIDB4Nzc4YTMwOGMsIDB4Nzc4YTMwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAorCXsweDAwMDBhNWY4LCAweDc3OGEzMDhjLCAweDc3OGEzMDhjLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKKwl7MHgwMDAwYTVmYywgMHg3NzhhMzA4YywgMHg3NzhhMzA4YywgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCisJezB4MDAwMTYwNDQsIDB4MDU2ZGIyZGIsIDB4MDU2ZGIyZGIsIDB4MDU2ZGIyZGIsIDB4MDU2ZGIyZGJ9LAorCXsweDAwMDE2MDQ4LCAweDI0OTI1MjY2LCAweDI0OTI1MjY2LCAweDI0OTI1MjY2LCAweDI0OTI1MjY2fSwKKwl7MHgwMDAxNjQ0NCwgMHgwNTZkYjJkYiwgMHgwNTZkYjJkYiwgMHgwNTZkYjJkYiwgMHgwNTZkYjJkYn0sCisJezB4MDAwMTY0NDgsIDB4MjQ5MjUyNjYsIDB4MjQ5MjUyNjYsIDB4MjQ5MjUyNjYsIDB4MjQ5MjUyNjZ9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhcjkzNDBNb2Rlc19mYXN0X2Nsb2NrXzFwMFtdWzNdID0geworCS8qICBBZGRyICAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgKi8KKwl7MHgwMDAwMTAzMCwgMHgwMDAwMDI2OCwgMHgwMDAwMDRkMH0sCisJezB4MDAwMDEwNzAsIDB4MDAwMDAxOGMsIDB4MDAwMDAzMTh9LAorCXsweDAwMDAxMGIwLCAweDAwMDAwZmQwLCAweDAwMDAxZmEwfSwKKwl7MHgwMDAwODAxNCwgMHgwNDRjMDQ0YywgMHgwODk4MDg5OH0sCisJezB4MDAwMDgwMWMsIDB4MTQ4ZWMwMmIsIDB4MTQ4ZWMwNTd9LAorCXsweDAwMDA4MzE4LCAweDAwMDA0NGMwLCAweDAwMDA4OTgwfSwKKwl7MHgwMDAwOWUwMCwgMHgwMzcyMTgyMSwgMHgwMzcyMTgyMX0sCisJezB4MDAwMGEyMzAsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMTZ9LAorCXsweDAwMDBhMjU0LCAweDAwMDAwODk4LCAweDAwMDAxMTMwfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5MzQwXzFwMF9yYWRpb19jb3JlW11bMl0gPSB7CisJLyogIEFkZHIgICAgIGFsbG1vZGVzICAqLworCXsweDAwMDE2MDAwLCAweDM2ZGI2ZGI2fSwKKwl7MHgwMDAxNjAwNCwgMHg2ZGI2ZGI0MH0sCisJezB4MDAwMTYwMDgsIDB4NzNmMDAwMDB9LAorCXsweDAwMDE2MDBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjA0MCwgMHg3ZjgwZmZmOH0sCisJezB4MDAwMTYwNDQsIDB4MDNiNmQyZGJ9LAorCXsweDAwMDE2MDQ4LCAweDI0OTI1MjY2fSwKKwl7MHgwMDAxNjA0YywgMHgwMDBmMDI3OH0sCisJezB4MDAwMTYwNTAsIDB4NmRiNmRiNmN9LAorCXsweDAwMDE2MDU0LCAweDZkYjYwMDAwfSwKKwl7MHgwMDAxNjA4MCwgMHgwMDA4MDAwMH0sCisJezB4MDAwMTYwODQsIDB4MGU0ODA0OGN9LAorCXsweDAwMDE2MDg4LCAweDE0MjE0NTE0fSwKKwl7MHgwMDAxNjA4YywgMHgxMTlmMDgxY30sCisJezB4MDAwMTYwOTAsIDB4MjQ5MjY0OTB9LAorCXsweDAwMDE2MDk0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjA5OCwgMHhkNDExZWI4NH0sCisJezB4MDAwMTYwOWMsIDB4MDNlNDdmMzJ9LAorCXsweDAwMDE2MGEwLCAweGMyMTA4ZmZlfSwKKwl7MHgwMDAxNjBhNCwgMHg4MTJmYzM3MH0sCisJezB4MDAwMTYwYTgsIDB4NDIzYzgwMDB9LAorCXsweDAwMDE2MGFjLCAweGE0NjQ2ODAwfSwKKwl7MHgwMDAxNjBiMCwgMHgwMGZlN2Y0Nn0sCisJezB4MDAwMTYwYjQsIDB4OTI0ODAwMDB9LAorCXsweDAwMDE2MGMwLCAweDAwNmRiNmRifSwKKwl7MHgwMDAxNjBjNCwgMHg2ZGI2ZGI2MH0sCisJezB4MDAwMTYwYzgsIDB4NmRiNmRiNmN9LAorCXsweDAwMDE2MGNjLCAweDZkZTZkYjZjfSwKKwl7MHgwMDAxNjBkMCwgMHhiNmRhNDkyNH0sCisJezB4MDAwMTYxMDAsIDB4MDRjYjAwMDF9LAorCXsweDAwMDE2MTA0LCAweGZmZjgwMDAwfSwKKwl7MHgwMDAxNjEwOCwgMHgwMDA4MDAxMH0sCisJezB4MDAwMTYxMGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2MTQwLCAweDUwODA0MDA4fSwKKwl7MHgwMDAxNjE0NCwgMHgwMTg4NDA4MH0sCisJezB4MDAwMTYxNDgsIDB4MDAwMDgwYzB9LAorCXsweDAwMDE2MjgwLCAweDAxMDAwMDE1fSwKKwl7MHgwMDAxNjI4NCwgMHgwNTUzMDAwMH0sCisJezB4MDAwMTYyODgsIDB4MDAzMTgwMDB9LAorCXsweDAwMDE2MjhjLCAweDUwMDAwMDAwfSwKKwl7MHgwMDAxNjI5MCwgMHg0MDgwMjk0Zn0sCisJezB4MDAwMTYzODAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2Mzg0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjM4OCwgMHgwMDgwMDcwMH0sCisJezB4MDAwMTYzOGMsIDB4MDA4MDA3MDB9LAorCXsweDAwMDE2MzkwLCAweDAwODAwNzAwfSwKKwl7MHgwMDAxNjM5NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTYzOTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2MzljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjNhMCwgMHgwMDAwMDAwMX0sCisJezB4MDAwMTYzYTQsIDB4MDAwMDAwMDF9LAorCXsweDAwMDE2M2E4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjNhYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMTYzYjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2M2I0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjNiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTYzYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2M2MwLCAweDAwMDAwMGEwfSwKKwl7MHgwMDAxNjNjNCwgMHgwMDBjMDAwMH0sCisJezB4MDAwMTYzYzgsIDB4MTQwMjE0MDJ9LAorCXsweDAwMDE2M2NjLCAweDAwMDAxNDAyfSwKKwl7MHgwMDAxNjNkMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTYzZDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2NDAwLCAweDM2ZGI2ZGI2fSwKKwl7MHgwMDAxNjQwNCwgMHg2ZGI2ZGI0MH0sCisJezB4MDAwMTY0MDgsIDB4NzNmMDAwMDB9LAorCXsweDAwMDE2NDBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjQ0MCwgMHg3ZjgwZmZmOH0sCisJezB4MDAwMTY0NDQsIDB4MDNiNmQyZGJ9LAorCXsweDAwMDE2NDQ4LCAweDI0OTI3MjY2fSwKKwl7MHgwMDAxNjQ0YywgMHgwMDBmMDI3OH0sCisJezB4MDAwMTY0NTAsIDB4NmRiNmRiNmN9LAorCXsweDAwMDE2NDU0LCAweDZkYjYwMDAwfSwKKwl7MHgwMDAxNjUwMCwgMHgwNGNiMDAwMX0sCisJezB4MDAwMTY1MDQsIDB4ZmZmODAwMDB9LAorCXsweDAwMDE2NTA4LCAweDAwMDgwMDEwfSwKKwl7MHgwMDAxNjUwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMTY1NDAsIDB4NTA4MDQwMDh9LAorCXsweDAwMDE2NTQ0LCAweDAxODg0MDgwfSwKKwl7MHgwMDAxNjU0OCwgMHgwMDAwODBjMH0sCisJezB4MDAwMTY3ODAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2Nzg0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjc4OCwgMHgwMDgwMDcwMH0sCisJezB4MDAwMTY3OGMsIDB4MDA4MDA3MDB9LAorCXsweDAwMDE2NzkwLCAweDAwODAwNzAwfSwKKwl7MHgwMDAxNjc5NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTY3OTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2NzljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjdhMCwgMHgwMDAwMDAwMX0sCisJezB4MDAwMTY3YTQsIDB4MDAwMDAwMDF9LAorCXsweDAwMDE2N2E4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjdhYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMTY3YjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2N2I0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjdiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTY3YmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2N2MwLCAweDAwMDAwMGEwfSwKKwl7MHgwMDAxNjdjNCwgMHgwMDBjMDAwMH0sCisJezB4MDAwMTY3YzgsIDB4MTQwMjE0MDJ9LAorCXsweDAwMDE2N2NjLCAweDAwMDAxNDAyfSwKKwl7MHgwMDAxNjdkMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTY3ZDQsIDB4MDAwMDAwMDB9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhcjkzNDBfMXAwX3JhZGlvX2NvcmVfNDBNW11bMl0gPSB7CisJezB4MDAwMTYwOWMsIDB4MDI1NjZmM2F9LAorCXsweDAwMDE2MGFjLCAweGE0NjQ3YzAwfSwKKwl7MHgwMDAxNjBiMCwgMHgwMTg4NWY1YX0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIGFyOTM0MF8xcDBfbWFjX3Bvc3RhbWJsZVtdWzVdID0geworCS8qIEFkZHIgICAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgICAgMkdfSFQ0MCAgICAyR19IVDIwICAqLworCXsweDAwMDAxMDMwLCAweDAwMDAwMjMwLCAweDAwMDAwNDYwLCAweDAwMDAwMmMwLCAweDAwMDAwMTYwfSwKKwl7MHgwMDAwMTA3MCwgMHgwMDAwMDE2OCwgMHgwMDAwMDJkMCwgMHgwMDAwMDMxOCwgMHgwMDAwMDE4Y30sCisJezB4MDAwMDEwYjAsIDB4MDAwMDBlNjAsIDB4MDAwMDFjYzAsIDB4MDAwMDdjNzAsIDB4MDAwMDNlMzh9LAorCXsweDAwMDA4MDE0LCAweDAzZTgwM2U4LCAweDA3ZDAwN2QwLCAweDEwODAxNjAwLCAweDA4NDAwYjAwfSwKKwl7MHgwMDAwODAxYywgMHgxMjhkODAyNywgMHgxMjhkODA0ZiwgMHgxMmUwMDA1NywgMHgxMmUwMDAyYn0sCisJezB4MDAwMDgxMjAsIDB4MDhmMDQ4MDAsIDB4MDhmMDQ4MDAsIDB4MDhmMDQ4MTAsIDB4MDhmMDQ4MTB9LAorCXsweDAwMDA4MWQwLCAweDAwMDAzMjEwLCAweDAwMDAzMjEwLCAweDAwMDAzMjBhLCAweDAwMDAzMjBhfSwKKwl7MHgwMDAwODMxOCwgMHgwMDAwM2U4MCwgMHgwMDAwN2QwMCwgMHgwMDAwNjg4MCwgMHgwMDAwMzQ0MH0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIGFyOTM0MF8xcDBfc29jX3Bvc3RhbWJsZVtdWzVdID0geworCS8qICAgQWRkciAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgICAgMkdfSFQ0MCAgICAgMkdfSFQyMCAgKi8KKwl7MHgwMDAwNzAxMCwgMHgwMDAwMDAyMywgMHgwMDAwMDAyMywgMHgwMDAwMDAyMywgMHgwMDAwMDAyM30sCit9OworCitzdGF0aWMgY29uc3QgdTMyIGFyOTM0MF8xcDBfYmFzZWJhbmRfcG9zdGFtYmxlW11bNV0gPSB7CisJLyogIEFkZHIgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgICAyR19IVDIwICAqLworCXsweDAwMDA5ODEwLCAweGQwMGE4MDA1LCAweGQwMGE4MDA1LCAweGQwMGE4MDExLCAweGQwMGE4MDExfSwKKwl7MHgwMDAwOTgyMCwgMHgyMDZhMDIyZSwgMHgyMDZhMDIyZSwgMHgyMDZhMDIyZSwgMHgyMDZhMDIyZX0sCisJezB4MDAwMDk4MjQsIDB4NWFjNjQwZDAsIDB4NWFjNjQwZDAsIDB4NWFjNjQwZDAsIDB4NWFjNjQwZDB9LAorCXsweDAwMDA5ODI4LCAweDA2OTAzMDgxLCAweDA2OTAzMDgxLCAweDA2OTAzODgxLCAweDA2OTAzODgxfSwKKwl7MHgwMDAwOTgyYywgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNH0sCisJezB4MDAwMDk4MzAsIDB4MDAwMDA1OWMsIDB4MDAwMDA1OWMsIDB4MDAwMDExOWMsIDB4MDAwMDExOWN9LAorCXsweDAwMDA5YzAwLCAweDAwMDAwMDQ0LCAweDAwMDAwMGM0LCAweDAwMDAwMGM0LCAweDAwMDAwMDQ0fSwKKwl7MHgwMDAwOWUwMCwgMHgwMzcyMTYxZSwgMHgwMzcyMTYxZSwgMHgwMzcyMTZhMCwgMHgwMzcyMTZhMH0sCisJezB4MDAwMDllMDQsIDB4MDAxODIwMjAsIDB4MDAxODIwMjAsIDB4MDAxODIwMjAsIDB4MDAxODIwMjB9LAorCXsweDAwMDA5ZTBjLCAweDZjNDAwMGUyLCAweDZkNDAwMGUyLCAweDZkNDAwMGUyLCAweDZjNDAwMGUyfSwKKwl7MHgwMDAwOWUxMCwgMHg3ZWM4OGQyZSwgMHg3ZWM4OGQyZSwgMHg3ZWM4OGQyZSwgMHg3ZWM4OGQyZX0sCisJezB4MDAwMDllMTQsIDB4MzEzOTVkNWUsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUsIDB4MzEzOTVkNWV9LAorCXsweDAwMDA5ZTE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWUxYywgMHgwMDAxY2Y5YywgMHgwMDAxY2Y5YywgMHgwMDAyMWY5YywgMHgwMDAyMWY5Y30sCisJezB4MDAwMDllMjAsIDB4MDAwMDAzYjUsIDB4MDAwMDAzYjUsIDB4MDAwMDAzY2UsIDB4MDAwMDAzY2V9LAorCXsweDAwMDA5ZTJjLCAweDAwMDAwMDFjLCAweDAwMDAwMDFjLCAweDAwMDAwMDIxLCAweDAwMDAwMDIxfSwKKwl7MHgwMDAwOWU0NCwgMHgwMjMyMWUyNywgMHgwMjMyMWUyNywgMHgwMjI5MWUyNywgMHgwMjI5MWUyN30sCisJezB4MDAwMDllNDgsIDB4NTAzMDIwMWEsIDB4NTAzMDIwMWEsIDB4NTAzMDIwMTIsIDB4NTAzMDIwMTJ9LAorCXsweDAwMDA5ZmM4LCAweDAwMDNmMDAwLCAweDAwMDNmMDAwLCAweDAwMDFhMDAwLCAweDAwMDFhMDAwfSwKKwl7MHgwMDAwYTIwNCwgMHgwMDAwM2ZjMCwgMHgwMDAwM2ZjNCwgMHgwMDAwM2ZjNCwgMHgwMDAwM2ZjMH0sCisJezB4MDAwMGEyMDgsIDB4MDAwMDAxMDQsIDB4MDAwMDAxMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDR9LAorCXsweDAwMDBhMjMwLCAweDAwMDAwMDBhLCAweDAwMDAwMDE0LCAweDAwMDAwMDE2LCAweDAwMDAwMDBifSwKKwl7MHgwMDAwYTIzOCwgMHhmZmI4MTAxOCwgMHhmZmI4MTAxOCwgMHhmZmI4MTAxOCwgMHhmZmI4MTAxOH0sCisJezB4MDAwMGEyNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAyMTAsIDB4MDAwMDAxMDh9LAorCXsweDAwMDBhMjU0LCAweDAwMDAwN2QwLCAweDAwMDAwZmEwLCAweDAwMDAxMTMwLCAweDAwMDAwODk4fSwKKwl7MHgwMDAwYTI1OCwgMHgwMjAyMDAwMiwgMHgwMjAyMDAwMiwgMHgwMjAyMDAwMiwgMHgwMjAyMDAwMn0sCisJezB4MDAwMGEyNWMsIDB4MDEwMDBlMGUsIDB4MDEwMDBlMGUsIDB4MDEwMDBlMGUsIDB4MDEwMDBlMGV9LAorCXsweDAwMDBhMjYwLCAweDBhMDIxNTAxLCAweDBhMDIxNTAxLCAweDNhMDIxNTAxLCAweDNhMDIxNTAxfSwKKwl7MHgwMDAwYTI2NCwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZX0sCisJezB4MDAwMGEyODAsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMGJ9LAorCXsweDAwMDBhMjg0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMTUwLCAweDAwMDAwMTUwfSwKKwl7MHgwMDAwYTI4OCwgMHgwMDAwMDIyMCwgMHgwMDAwMDIyMCwgMHgwMDAwMDExMCwgMHgwMDAwMDExMH0sCisJezB4MDAwMGEyOGMsIDB4MDAwMTExMTEsIDB4MDAwMTExMTEsIDB4MDAwMjIyMjIsIDB4MDAwMjIyMjJ9LAorCXsweDAwMDBhMmM0LCAweDAwMTU4ZDE4LCAweDAwMTU4ZDE4LCAweDAwMTU4ZDE4LCAweDAwMTU4ZDE4fSwKKwl7MHgwMDAwYTJkMCwgMHgwMDA3MTk4MSwgMHgwMDA3MTk4MSwgMHgwMDA3MTk4MSwgMHgwMDA3MTk4Mn0sCisJezB4MDAwMGEyZDgsIDB4Zjk5OWE4M2EsIDB4Zjk5OWE4M2EsIDB4Zjk5OWE4M2EsIDB4Zjk5OWE4M2F9LAorCXsweDAwMDBhMzU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTgzMCwgMHgwMDAwMDE5YywgMHgwMDAwMDE5YywgMHgwMDAwMDE5YywgMHgwMDAwMDE5Y30sCisJezB4MDAwMGFlMDQsIDB4MDAxODAwMDAsIDB4MDAxODAwMDAsIDB4MDAxODAwMDAsIDB4MDAxODAwMDB9LAorCXsweDAwMDBhZTE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWUxYywgMHgwMDAwMDE5YywgMHgwMDAwMDE5YywgMHgwMDAwMDE5YywgMHgwMDAwMDE5Y30sCisJezB4MDAwMGFlMjAsIDB4MDAwMDAxYjUsIDB4MDAwMDAxYjUsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2V9LAorCXsweDAwMDBiMjg0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMTUwLCAweDAwMDAwMTUwfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5MzQwXzFwMF9iYXNlYmFuZF9jb3JlW11bMl0gPSB7CisJLyogIEFkZHIgICAgIGFsbG1vZGVzICAqLworCXsweDAwMDA5ODAwLCAweGFmZTY4ZTMwfSwKKwl7MHgwMDAwOTgwNCwgMHhmZDE0ZTAwMH0sCisJezB4MDAwMDk4MDgsIDB4OWMwYTlmNmJ9LAorCXsweDAwMDA5ODBjLCAweDA0OTAwMDAwfSwKKwl7MHgwMDAwOTgxNCwgMHhiMjgwYzAwYX0sCisJezB4MDAwMDk4MTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODFjLCAweDAwMDIwMDI4fSwKKwl7MHgwMDAwOTgzNCwgMHg1ZjNjYTNkZX0sCisJezB4MDAwMDk4MzgsIDB4MDEwOGVjZmZ9LAorCXsweDAwMDA5ODNjLCAweDE0NzUwNjAwfSwKKwl7MHgwMDAwOTg4MCwgMHgyMDFmZmYwMH0sCisJezB4MDAwMDk4ODQsIDB4MDAwMDEwNDJ9LAorCXsweDAwMDA5OGE0LCAweDAwMjAwNDAwfSwKKwl7MHgwMDAwOThiMCwgMHg1MjQ0MGJiZX0sCisJezB4MDAwMDk4ZDAsIDB4MDA0YjZhOGV9LAorCXsweDAwMDA5OGQ0LCAweDAwMDAwODIwfSwKKwl7MHgwMDAwOThkYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4ZjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OGY0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWMwNCwgMHhmZjU1ZmY1NX0sCisJezB4MDAwMDljMDgsIDB4MDMyMGZmNTV9LAorCXsweDAwMDA5YzBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWMxMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDljMTQsIDB4MDAwNDYzODR9LAorCXsweDAwMDA5YzE4LCAweDA1YjZiNDQwfSwKKwl7MHgwMDAwOWMxYywgMHgwMGI2YjQ0MH0sCisJezB4MDAwMDlkMDAsIDB4YzA4MGEzMzN9LAorCXsweDAwMDA5ZDA0LCAweDQwMjA2YzEwfSwKKwl7MHgwMDAwOWQwOCwgMHgwMDljNDA2MH0sCisJezB4MDAwMDlkMGMsIDB4OTg4MzgwMGF9LAorCXsweDAwMDA5ZDEwLCAweDAxODM0MDYxfSwKKwl7MHgwMDAwOWQxNCwgMHgwMGMwMDQwYn0sCisJezB4MDAwMDlkMTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ZTA4LCAweDAwMzgyMzBjfSwKKwl7MHgwMDAwOWUyNCwgMHg5OTBiYjUxNX0sCisJezB4MDAwMDllMjgsIDB4MGM2ZjAwMDB9LAorCXsweDAwMDA5ZTMwLCAweDA2MzM2Zjc3fSwKKwl7MHgwMDAwOWUzNCwgMHg2YWY2NTMyZn0sCisJezB4MDAwMDllMzgsIDB4MGNjODBjMDB9LAorCXsweDAwMDA5ZTNjLCAweGNmOTQ2MjIyfSwKKwl7MHgwMDAwOWU0MCwgMHgwZDI2MTgyMH0sCisJezB4MDAwMDllNGMsIDB4MDAwMDEwMDR9LAorCXsweDAwMDA5ZTUwLCAweDAwZmYwM2YxfSwKKwl7MHgwMDAwOWU1NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlmYzAsIDB4ODAzZTQ3ODh9LAorCXsweDAwMDA5ZmM0LCAweDAwMDFlZmI1fSwKKwl7MHgwMDAwOWZjYywgMHg0MDAwMDAxNH0sCisJezB4MDAwMDlmZDAsIDB4MDExOTNiOTN9LAorCXsweDAwMDBhMjBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTIyMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyMjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMjI4LCAweDEwMDAyMzEwfSwKKwl7MHgwMDAwYTIyYywgMHgwMTAzNmExZX0sCisJezB4MDAwMGEyMzQsIDB4MTAwMDBmZmZ9LAorCXsweDAwMDBhMjNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTI0NCwgMHgwYzAwMDAwMH0sCisJezB4MDAwMGEyYTAsIDB4MDAwMDAwMDF9LAorCXsweDAwMDBhMmMwLCAweDAwMDAwMDAxfSwKKwl7MHgwMDAwYTJjOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyY2MsIDB4MThjNDM0MzN9LAorCXsweDAwMDBhMmQ0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTJkYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyZTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMmU0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTJlOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyZWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMmYwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTJmNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzQ0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTM0YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzNTAsIDB4MDAwMGEwMDB9LAorCXsweDAwMDBhMzY0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTM3MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzOTAsIDB4MDAwMDAwMDF9LAorCXsweDAwMDBhMzk0LCAweDAwMDAwNDQ0fSwKKwl7MHgwMDAwYTM5OCwgMHgwMDFmMGUwZn0sCisJezB4MDAwMGEzOWMsIDB4MDA3NTM5M2Z9LAorCXsweDAwMDBhM2EwLCAweGI3OWY2NDI3fSwKKwl7MHgwMDAwYTNhNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzYTgsIDB4YWFhYWFhYWF9LAorCXsweDAwMDBhM2FjLCAweDNjNDY2NDc4fSwKKwl7MHgwMDAwYTNjMCwgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzYzQsIDB4MjIyMjIyMjB9LAorCXsweDAwMDBhM2M4LCAweDIwMjAwMDIwfSwKKwl7MHgwMDAwYTNjYywgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzZDAsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhM2Q0LCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTNkOCwgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzZGMsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhM2UwLCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTNlNCwgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzZTgsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhM2VjLCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTNmMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzZjQsIDB4MDAwMDAyNDZ9LAorCXsweDAwMDBhM2Y4LCAweDBjZGJkMzgwfSwKKwl7MHgwMDAwYTNmYywgMHgwMDBmMGYwMX0sCisJezB4MDAwMGE0MDAsIDB4OGZhOTFmMDF9LAorCXsweDAwMDBhNDA0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTQwOCwgMHgwZTc5ZTVjNn0sCisJezB4MDAwMGE0MGMsIDB4MDA4MjA4MjB9LAorCXsweDAwMDBhNDE0LCAweDFjZTczOWNlfSwKKwl7MHgwMDAwYTQxOCwgMHgyZDAwMWRjZX0sCisJezB4MDAwMGE0MWMsIDB4MWNlNzM5Y2V9LAorCXsweDAwMDBhNDIwLCAweDAwMDAwMWNlfSwKKwl7MHgwMDAwYTQyNCwgMHgxY2U3MzljZX0sCisJezB4MDAwMGE0MjgsIDB4MDAwMDAxY2V9LAorCXsweDAwMDBhNDJjLCAweDFjZTczOWNlfSwKKwl7MHgwMDAwYTQzMCwgMHgxY2U3MzljZX0sCisJezB4MDAwMGE0MzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNDM4LCAweDAwMDAxODAxfSwKKwl7MHgwMDAwYTQzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE0NDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNDQ0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTQ0OCwgMHgwNDAwMDA4MH0sCisJezB4MDAwMGE0NGMsIDB4MDAwMDAwMDF9LAorCXsweDAwMDBhNDUwLCAweDAwMDEwMDAwfSwKKwl7MHgwMDAwYTQ1OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE2MDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjA0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTYwOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE2MGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTYxNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE2MTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjFjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTYyMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE2MjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTYyYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE2MzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjM0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTYzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE2M2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjQwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTY0NCwgMHgzZmFkOWQ3NH0sCisJezB4MDAwMGE2NDgsIDB4MDA0ODA2MGF9LAorCXsweDAwMDBhNjRjLCAweDAwMDAwNjM3fSwKKwl7MHgwMDAwYTY3MCwgMHgwMzAyMDEwMH0sCisJezB4MDAwMGE2NzQsIDB4MDkwODA1MDR9LAorCXsweDAwMDBhNjc4LCAweDBkMGMwYjBhfSwKKwl7MHgwMDAwYTY3YywgMHgxMzEyMTExMH0sCisJezB4MDAwMGE2ODAsIDB4MzEzMDE1MTR9LAorCXsweDAwMDBhNjg0LCAweDM1MzQzMzMyfSwKKwl7MHgwMDAwYTY4OCwgMHgwMDAwMDAzNn0sCisJezB4MDAwMGE2OTAsIDB4MDAwMDA4Mzh9LAorCXsweDAwMDBhN2MwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTdjNCwgMHhmZmZmZmZmY30sCisJezB4MDAwMGE3YzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhN2NjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTdkMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE3ZDQsIDB4MDAwMDAwMDR9LAorCXsweDAwMDBhN2RjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYThkMCwgMHgwMDRiNmE4ZX0sCisJezB4MDAwMGE4ZDQsIDB4MDAwMDA4MjB9LAorCXsweDAwMDBhOGRjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYThmMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE4ZjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMmQwLCAweDAwMDAwMDgwfSwKKwl7MHgwMDAwYjJkNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIyZGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMmUwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjJlNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIyZTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMmVjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjJmMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIyZjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMmY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjQwOCwgMHgwZTc5ZTVjMH0sCisJezB4MDAwMGI0MGMsIDB4MDA4MjA4MjB9LAorCXsweDAwMDBiNDIwLCAweDAwMDAwMDAwfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5MzQwTW9kZXNfaGlnaF9wb3dlcl90eF9nYWluX3RhYmxlXzFwMFtdWzVdID0geworCS8qICBBZGRyICAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgICAgMkdfSFQ0MCAgICAgMkdfSFQyMCAgKi8KKwl7MHgwMDAwYTQxMCwgMHgwMDAwNTBkOCwgMHgwMDAwNTBkOCwgMHgwMDAwNTBkOSwgMHgwMDAwNTBkOX0sCisJezB4MDAwMGE1MDAsIDB4MDAwMDIyMjAsIDB4MDAwMDIyMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNTA0LCAweDA0MDAyMjIyLCAweDA0MDAyMjIyLCAweDA0MDAwMDAyLCAweDA0MDAwMDAyfSwKKwl7MHgwMDAwYTUwOCwgMHgwOTAwMjQyMSwgMHgwOTAwMjQyMSwgMHgwODAwMDAwNCwgMHgwODAwMDAwNH0sCisJezB4MDAwMGE1MGMsIDB4MGQwMDI2MjEsIDB4MGQwMDI2MjEsIDB4MGIwMDAyMDAsIDB4MGIwMDAyMDB9LAorCXsweDAwMDBhNTEwLCAweDEzMDA0NjIwLCAweDEzMDA0NjIwLCAweDBmMDAwMjAyLCAweDBmMDAwMjAyfSwKKwl7MHgwMDAwYTUxNCwgMHgxOTAwNGEyMCwgMHgxOTAwNGEyMCwgMHgxMTAwMDQwMCwgMHgxMTAwMDQwMH0sCisJezB4MDAwMGE1MTgsIDB4MWQwMDRlMjAsIDB4MWQwMDRlMjAsIDB4MTUwMDA0MDIsIDB4MTUwMDA0MDJ9LAorCXsweDAwMDBhNTFjLCAweDIxMDA1NDIwLCAweDIxMDA1NDIwLCAweDE5MDAwNDA0LCAweDE5MDAwNDA0fSwKKwl7MHgwMDAwYTUyMCwgMHgyNjAwNWUyMCwgMHgyNjAwNWUyMCwgMHgxYjAwMDYwMywgMHgxYjAwMDYwM30sCisJezB4MDAwMGE1MjQsIDB4MmIwMDVlNDAsIDB4MmIwMDVlNDAsIDB4MWYwMDBhMDIsIDB4MWYwMDBhMDJ9LAorCXsweDAwMDBhNTI4LCAweDJmMDA1ZTQyLCAweDJmMDA1ZTQyLCAweDIzMDAwYTA0LCAweDIzMDAwYTA0fSwKKwl7MHgwMDAwYTUyYywgMHgzMzAwNWU0NCwgMHgzMzAwNWU0NCwgMHgyNjAwMGEyMCwgMHgyNjAwMGEyMH0sCisJezB4MDAwMGE1MzAsIDB4MzgwMDVlNjUsIDB4MzgwMDVlNjUsIDB4MmEwMDBlMjAsIDB4MmEwMDBlMjB9LAorCXsweDAwMDBhNTM0LCAweDNjMDA1ZTY5LCAweDNjMDA1ZTY5LCAweDJlMDAwZTIyLCAweDJlMDAwZTIyfSwKKwl7MHgwMDAwYTUzOCwgMHg0MDAwNWU2YiwgMHg0MDAwNWU2YiwgMHgzMTAwMGUyNCwgMHgzMTAwMGUyNH0sCisJezB4MDAwMGE1M2MsIDB4NDQwMDVlNmQsIDB4NDQwMDVlNmQsIDB4MzQwMDE2NDAsIDB4MzQwMDE2NDB9LAorCXsweDAwMDBhNTQwLCAweDQ5MDA1ZTcyLCAweDQ5MDA1ZTcyLCAweDM4MDAxNjYwLCAweDM4MDAxNjYwfSwKKwl7MHgwMDAwYTU0NCwgMHg0ZTAwNWViMiwgMHg0ZTAwNWViMiwgMHgzYjAwMTg2MSwgMHgzYjAwMTg2MX0sCisJezB4MDAwMGE1NDgsIDB4NTMwMDVmMTIsIDB4NTMwMDVmMTIsIDB4M2UwMDFhODEsIDB4M2UwMDFhODF9LAorCXsweDAwMDBhNTRjLCAweDU5MDI1ZWI1LCAweDU5MDI1ZWI1LCAweDQyMDAxYTgzLCAweDQyMDAxYTgzfSwKKwl7MHgwMDAwYTU1MCwgMHg1ZTAyNWYxMiwgMHg1ZTAyNWYxMiwgMHg0NDAwMWM4NCwgMHg0NDAwMWM4NH0sCisJezB4MDAwMGE1NTQsIDB4NjEwMjdmMTIsIDB4NjEwMjdmMTIsIDB4NDgwMDFjZTMsIDB4NDgwMDFjZTN9LAorCXsweDAwMDBhNTU4LCAweDY3MDJiZjEyLCAweDY3MDJiZjEyLCAweDRjMDAxY2U1LCAweDRjMDAxY2U1fSwKKwl7MHgwMDAwYTU1YywgMHg2YjAyYmYxNCwgMHg2YjAyYmYxNCwgMHg1MDAwMWNlOSwgMHg1MDAwMWNlOX0sCisJezB4MDAwMGE1NjAsIDB4NmYwMmJmMTYsIDB4NmYwMmJmMTYsIDB4NTQwMDFjZWIsIDB4NTQwMDFjZWJ9LAorCXsweDAwMDBhNTY0LCAweDZmMDJiZjE2LCAweDZmMDJiZjE2LCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKKwl7MHgwMDAwYTU2OCwgMHg2ZjAyYmYxNiwgMHg2ZjAyYmYxNiwgMHg1NjAwMWVlYywgMHg1NjAwMWVlY30sCisJezB4MDAwMGE1NmMsIDB4NmYwMmJmMTYsIDB4NmYwMmJmMTYsIDB4NTYwMDFlZWMsIDB4NTYwMDFlZWN9LAorCXsweDAwMDBhNTcwLCAweDZmMDJiZjE2LCAweDZmMDJiZjE2LCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKKwl7MHgwMDAwYTU3NCwgMHg2ZjAyYmYxNiwgMHg2ZjAyYmYxNiwgMHg1NjAwMWVlYywgMHg1NjAwMWVlY30sCisJezB4MDAwMGE1NzgsIDB4NmYwMmJmMTYsIDB4NmYwMmJmMTYsIDB4NTYwMDFlZWMsIDB4NTYwMDFlZWN9LAorCXsweDAwMDBhNTdjLCAweDZmMDJiZjE2LCAweDZmMDJiZjE2LCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKKwl7MHgwMDAwYTU4MCwgMHgwMDgwMjIyMCwgMHgwMDgwMjIyMCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMH0sCisJezB4MDAwMGE1ODQsIDB4MDQ4MDIyMjIsIDB4MDQ4MDIyMjIsIDB4MDQ4MDAwMDIsIDB4MDQ4MDAwMDJ9LAorCXsweDAwMDBhNTg4LCAweDA5ODAyNDIxLCAweDA5ODAyNDIxLCAweDA4ODAwMDA0LCAweDA4ODAwMDA0fSwKKwl7MHgwMDAwYTU4YywgMHgwZDgwMjYyMSwgMHgwZDgwMjYyMSwgMHgwYjgwMDIwMCwgMHgwYjgwMDIwMH0sCisJezB4MDAwMGE1OTAsIDB4MTM4MDQ2MjAsIDB4MTM4MDQ2MjAsIDB4MGY4MDAyMDIsIDB4MGY4MDAyMDJ9LAorCXsweDAwMDBhNTk0LCAweDE5ODA0YTIwLCAweDE5ODA0YTIwLCAweDExODAwNDAwLCAweDExODAwNDAwfSwKKwl7MHgwMDAwYTU5OCwgMHgxZDgwNGUyMCwgMHgxZDgwNGUyMCwgMHgxNTgwMDQwMiwgMHgxNTgwMDQwMn0sCisJezB4MDAwMGE1OWMsIDB4MjE4MDU0MjAsIDB4MjE4MDU0MjAsIDB4MTk4MDA0MDQsIDB4MTk4MDA0MDR9LAorCXsweDAwMDBhNWEwLCAweDI2ODA1ZTIwLCAweDI2ODA1ZTIwLCAweDFiODAwNjAzLCAweDFiODAwNjAzfSwKKwl7MHgwMDAwYTVhNCwgMHgyYjgwNWU0MCwgMHgyYjgwNWU0MCwgMHgxZjgwMGEwMiwgMHgxZjgwMGEwMn0sCisJezB4MDAwMGE1YTgsIDB4MmY4MDVlNDIsIDB4MmY4MDVlNDIsIDB4MjM4MDBhMDQsIDB4MjM4MDBhMDR9LAorCXsweDAwMDBhNWFjLCAweDMzODA1ZTQ0LCAweDMzODA1ZTQ0LCAweDI2ODAwYTIwLCAweDI2ODAwYTIwfSwKKwl7MHgwMDAwYTViMCwgMHgzODgwNWU2NSwgMHgzODgwNWU2NSwgMHgyYTgwMGUyMCwgMHgyYTgwMGUyMH0sCisJezB4MDAwMGE1YjQsIDB4M2M4MDVlNjksIDB4M2M4MDVlNjksIDB4MmU4MDBlMjIsIDB4MmU4MDBlMjJ9LAorCXsweDAwMDBhNWI4LCAweDQwODA1ZTZiLCAweDQwODA1ZTZiLCAweDMxODAwZTI0LCAweDMxODAwZTI0fSwKKwl7MHgwMDAwYTViYywgMHg0NDgwNWU2ZCwgMHg0NDgwNWU2ZCwgMHgzNDgwMTY0MCwgMHgzNDgwMTY0MH0sCisJezB4MDAwMGE1YzAsIDB4NDk4MDVlNzIsIDB4NDk4MDVlNzIsIDB4Mzg4MDE2NjAsIDB4Mzg4MDE2NjB9LAorCXsweDAwMDBhNWM0LCAweDRlODA1ZWIyLCAweDRlODA1ZWIyLCAweDNiODAxODYxLCAweDNiODAxODYxfSwKKwl7MHgwMDAwYTVjOCwgMHg1MzgwNWYxMiwgMHg1MzgwNWYxMiwgMHgzZTgwMWE4MSwgMHgzZTgwMWE4MX0sCisJezB4MDAwMGE1Y2MsIDB4NTk4MjVlYjIsIDB4NTk4MjVlYjIsIDB4NDI4MDFhODMsIDB4NDI4MDFhODN9LAorCXsweDAwMDBhNWQwLCAweDVlODI1ZjEyLCAweDVlODI1ZjEyLCAweDQ0ODAxYzg0LCAweDQ0ODAxYzg0fSwKKwl7MHgwMDAwYTVkNCwgMHg2MTgyN2YxMiwgMHg2MTgyN2YxMiwgMHg0ODgwMWNlMywgMHg0ODgwMWNlM30sCisJezB4MDAwMGE1ZDgsIDB4Njc4MmJmMTIsIDB4Njc4MmJmMTIsIDB4NGM4MDFjZTUsIDB4NGM4MDFjZTV9LAorCXsweDAwMDBhNWRjLCAweDZiODJiZjE0LCAweDZiODJiZjE0LCAweDUwODAxY2U5LCAweDUwODAxY2U5fSwKKwl7MHgwMDAwYTVlMCwgMHg2ZjgyYmYxNiwgMHg2ZjgyYmYxNiwgMHg1NDgwMWNlYiwgMHg1NDgwMWNlYn0sCisJezB4MDAwMGE1ZTQsIDB4NmY4MmJmMTYsIDB4NmY4MmJmMTYsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAorCXsweDAwMDBhNWU4LCAweDZmODJiZjE2LCAweDZmODJiZjE2LCAweDU2ODAxZWVjLCAweDU2ODAxZWVjfSwKKwl7MHgwMDAwYTVlYywgMHg2ZjgyYmYxNiwgMHg2ZjgyYmYxNiwgMHg1NjgwMWVlYywgMHg1NjgwMWVlY30sCisJezB4MDAwMGE1ZjAsIDB4NmY4MmJmMTYsIDB4NmY4MmJmMTYsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAorCXsweDAwMDBhNWY0LCAweDZmODJiZjE2LCAweDZmODJiZjE2LCAweDU2ODAxZWVjLCAweDU2ODAxZWVjfSwKKwl7MHgwMDAwYTVmOCwgMHg2ZjgyYmYxNiwgMHg2ZjgyYmYxNiwgMHg1NjgwMWVlYywgMHg1NjgwMWVlY30sCisJezB4MDAwMGE1ZmMsIDB4NmY4MmJmMTYsIDB4NmY4MmJmMTYsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAorCXsweDAwMDE2MDQ0LCAweDA1NmRiMmRiLCAweDA1NmRiMmRiLCAweDA1NmRiMmRiLCAweDA1NmRiMmRifSwKKwl7MHgwMDAxNjA0OCwgMHgyNDkyNTI2NiwgMHgyNDkyNTI2NiwgMHgyNDkyNTI2NiwgMHgyNDkyNTI2Nn0sCisJezB4MDAwMTY0NDQsIDB4MDU2ZGIyZGIsIDB4MDU2ZGIyZGIsIDB4MDU2ZGIyZGIsIDB4MDU2ZGIyZGJ9LAorCXsweDAwMDE2NDQ4LCAweDI0OTI1MjY2LCAweDI0OTI1MjY2LCAweDI0OTI1MjY2LCAweDI0OTI1MjY2fSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5MzQwTW9kZXNfaGlnaF9vYl9kYl90eF9nYWluX3RhYmxlXzFwMFtdWzVdID0geworCS8qICBBZGRyICAgICAgIDVHX0hUMjAgICAgNUdfSFQ0MCAgICAgMkdfSFQ0MCAgICAgMkdfSFQyMCAgKi8KKwl7MHgwMDAwYTQxMCwgMHgwMDAwNTBkOCwgMHgwMDAwNTBkOCwgMHgwMDAwNTBkOSwgMHgwMDAwNTBkOX0sCisJezB4MDAwMGE1MDAsIDB4MDAwMDIyMjAsIDB4MDAwMDIyMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNTA0LCAweDA0MDAyMjIyLCAweDA0MDAyMjIyLCAweDA0MDAwMDAyLCAweDA0MDAwMDAyfSwKKwl7MHgwMDAwYTUwOCwgMHgwOTAwMjQyMSwgMHgwOTAwMjQyMSwgMHgwODAwMDAwNCwgMHgwODAwMDAwNH0sCisJezB4MDAwMGE1MGMsIDB4MGQwMDI2MjEsIDB4MGQwMDI2MjEsIDB4MGIwMDAyMDAsIDB4MGIwMDAyMDB9LAorCXsweDAwMDBhNTEwLCAweDEzMDA0NjIwLCAweDEzMDA0NjIwLCAweDBmMDAwMjAyLCAweDBmMDAwMjAyfSwKKwl7MHgwMDAwYTUxNCwgMHgxOTAwNGEyMCwgMHgxOTAwNGEyMCwgMHgxMTAwMDQwMCwgMHgxMTAwMDQwMH0sCisJezB4MDAwMGE1MTgsIDB4MWQwMDRlMjAsIDB4MWQwMDRlMjAsIDB4MTUwMDA0MDIsIDB4MTUwMDA0MDJ9LAorCXsweDAwMDBhNTFjLCAweDIxMDA1NDIwLCAweDIxMDA1NDIwLCAweDE5MDAwNDA0LCAweDE5MDAwNDA0fSwKKwl7MHgwMDAwYTUyMCwgMHgyNjAwNWUyMCwgMHgyNjAwNWUyMCwgMHgxYjAwMDYwMywgMHgxYjAwMDYwM30sCisJezB4MDAwMGE1MjQsIDB4MmIwMDVlNDAsIDB4MmIwMDVlNDAsIDB4MWYwMDBhMDIsIDB4MWYwMDBhMDJ9LAorCXsweDAwMDBhNTI4LCAweDJmMDA1ZTQyLCAweDJmMDA1ZTQyLCAweDIzMDAwYTA0LCAweDIzMDAwYTA0fSwKKwl7MHgwMDAwYTUyYywgMHgzMzAwNWU0NCwgMHgzMzAwNWU0NCwgMHgyNjAwMGEyMCwgMHgyNjAwMGEyMH0sCisJezB4MDAwMGE1MzAsIDB4MzgwMDVlNjUsIDB4MzgwMDVlNjUsIDB4MmEwMDBlMjAsIDB4MmEwMDBlMjB9LAorCXsweDAwMDBhNTM0LCAweDNjMDA1ZTY5LCAweDNjMDA1ZTY5LCAweDJlMDAwZTIyLCAweDJlMDAwZTIyfSwKKwl7MHgwMDAwYTUzOCwgMHg0MDAwNWU2YiwgMHg0MDAwNWU2YiwgMHgzMTAwMGUyNCwgMHgzMTAwMGUyNH0sCisJezB4MDAwMGE1M2MsIDB4NDQwMDVlNmQsIDB4NDQwMDVlNmQsIDB4MzQwMDE2NDAsIDB4MzQwMDE2NDB9LAorCXsweDAwMDBhNTQwLCAweDQ5MDA1ZTcyLCAweDQ5MDA1ZTcyLCAweDM4MDAxNjYwLCAweDM4MDAxNjYwfSwKKwl7MHgwMDAwYTU0NCwgMHg0ZTAwNWViMiwgMHg0ZTAwNWViMiwgMHgzYjAwMTg2MSwgMHgzYjAwMTg2MX0sCisJezB4MDAwMGE1NDgsIDB4NTMwMDVmMTIsIDB4NTMwMDVmMTIsIDB4M2UwMDFhODEsIDB4M2UwMDFhODF9LAorCXsweDAwMDBhNTRjLCAweDU5MDI1ZWI1LCAweDU5MDI1ZWI1LCAweDQyMDAxYTgzLCAweDQyMDAxYTgzfSwKKwl7MHgwMDAwYTU1MCwgMHg1ZTAyNWYxMiwgMHg1ZTAyNWYxMiwgMHg0NDAwMWM4NCwgMHg0NDAwMWM4NH0sCisJezB4MDAwMGE1NTQsIDB4NjEwMjdmMTIsIDB4NjEwMjdmMTIsIDB4NDgwMDFjZTMsIDB4NDgwMDFjZTN9LAorCXsweDAwMDBhNTU4LCAweDY3MDJiZjEyLCAweDY3MDJiZjEyLCAweDRjMDAxY2U1LCAweDRjMDAxY2U1fSwKKwl7MHgwMDAwYTU1YywgMHg2YjAyYmYxNCwgMHg2YjAyYmYxNCwgMHg1MDAwMWNlOSwgMHg1MDAwMWNlOX0sCisJezB4MDAwMGE1NjAsIDB4NmYwMmJmMTYsIDB4NmYwMmJmMTYsIDB4NTQwMDFjZWIsIDB4NTQwMDFjZWJ9LAorCXsweDAwMDBhNTY0LCAweDZmMDJiZjE2LCAweDZmMDJiZjE2LCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKKwl7MHgwMDAwYTU2OCwgMHg2ZjAyYmYxNiwgMHg2ZjAyYmYxNiwgMHg1NjAwMWVlYywgMHg1NjAwMWVlY30sCisJezB4MDAwMGE1NmMsIDB4NmYwMmJmMTYsIDB4NmYwMmJmMTYsIDB4NTYwMDFlZWMsIDB4NTYwMDFlZWN9LAorCXsweDAwMDBhNTcwLCAweDZmMDJiZjE2LCAweDZmMDJiZjE2LCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKKwl7MHgwMDAwYTU3NCwgMHg2ZjAyYmYxNiwgMHg2ZjAyYmYxNiwgMHg1NjAwMWVlYywgMHg1NjAwMWVlY30sCisJezB4MDAwMGE1NzgsIDB4NmYwMmJmMTYsIDB4NmYwMmJmMTYsIDB4NTYwMDFlZWMsIDB4NTYwMDFlZWN9LAorCXsweDAwMDBhNTdjLCAweDZmMDJiZjE2LCAweDZmMDJiZjE2LCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKKwl7MHgwMDAwYTU4MCwgMHgwMDgwMjIyMCwgMHgwMDgwMjIyMCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMH0sCisJezB4MDAwMGE1ODQsIDB4MDQ4MDIyMjIsIDB4MDQ4MDIyMjIsIDB4MDQ4MDAwMDIsIDB4MDQ4MDAwMDJ9LAorCXsweDAwMDBhNTg4LCAweDA5ODAyNDIxLCAweDA5ODAyNDIxLCAweDA4ODAwMDA0LCAweDA4ODAwMDA0fSwKKwl7MHgwMDAwYTU4YywgMHgwZDgwMjYyMSwgMHgwZDgwMjYyMSwgMHgwYjgwMDIwMCwgMHgwYjgwMDIwMH0sCisJezB4MDAwMGE1OTAsIDB4MTM4MDQ2MjAsIDB4MTM4MDQ2MjAsIDB4MGY4MDAyMDIsIDB4MGY4MDAyMDJ9LAorCXsweDAwMDBhNTk0LCAweDE5ODA0YTIwLCAweDE5ODA0YTIwLCAweDExODAwNDAwLCAweDExODAwNDAwfSwKKwl7MHgwMDAwYTU5OCwgMHgxZDgwNGUyMCwgMHgxZDgwNGUyMCwgMHgxNTgwMDQwMiwgMHgxNTgwMDQwMn0sCisJezB4MDAwMGE1OWMsIDB4MjE4MDU0MjAsIDB4MjE4MDU0MjAsIDB4MTk4MDA0MDQsIDB4MTk4MDA0MDR9LAorCXsweDAwMDBhNWEwLCAweDI2ODA1ZTIwLCAweDI2ODA1ZTIwLCAweDFiODAwNjAzLCAweDFiODAwNjAzfSwKKwl7MHgwMDAwYTVhNCwgMHgyYjgwNWU0MCwgMHgyYjgwNWU0MCwgMHgxZjgwMGEwMiwgMHgxZjgwMGEwMn0sCisJezB4MDAwMGE1YTgsIDB4MmY4MDVlNDIsIDB4MmY4MDVlNDIsIDB4MjM4MDBhMDQsIDB4MjM4MDBhMDR9LAorCXsweDAwMDBhNWFjLCAweDMzODA1ZTQ0LCAweDMzODA1ZTQ0LCAweDI2ODAwYTIwLCAweDI2ODAwYTIwfSwKKwl7MHgwMDAwYTViMCwgMHgzODgwNWU2NSwgMHgzODgwNWU2NSwgMHgyYTgwMGUyMCwgMHgyYTgwMGUyMH0sCisJezB4MDAwMGE1YjQsIDB4M2M4MDVlNjksIDB4M2M4MDVlNjksIDB4MmU4MDBlMjIsIDB4MmU4MDBlMjJ9LAorCXsweDAwMDBhNWI4LCAweDQwODA1ZTZiLCAweDQwODA1ZTZiLCAweDMxODAwZTI0LCAweDMxODAwZTI0fSwKKwl7MHgwMDAwYTViYywgMHg0NDgwNWU2ZCwgMHg0NDgwNWU2ZCwgMHgzNDgwMTY0MCwgMHgzNDgwMTY0MH0sCisJezB4MDAwMGE1YzAsIDB4NDk4MDVlNzIsIDB4NDk4MDVlNzIsIDB4Mzg4MDE2NjAsIDB4Mzg4MDE2NjB9LAorCXsweDAwMDBhNWM0LCAweDRlODA1ZWIyLCAweDRlODA1ZWIyLCAweDNiODAxODYxLCAweDNiODAxODYxfSwKKwl7MHgwMDAwYTVjOCwgMHg1MzgwNWYxMiwgMHg1MzgwNWYxMiwgMHgzZTgwMWE4MSwgMHgzZTgwMWE4MX0sCisJezB4MDAwMGE1Y2MsIDB4NTk4MjVlYjIsIDB4NTk4MjVlYjIsIDB4NDI4MDFhODMsIDB4NDI4MDFhODN9LAorCXsweDAwMDBhNWQwLCAweDVlODI1ZjEyLCAweDVlODI1ZjEyLCAweDQ0ODAxYzg0LCAweDQ0ODAxYzg0fSwKKwl7MHgwMDAwYTVkNCwgMHg2MTgyN2YxMiwgMHg2MTgyN2YxMiwgMHg0ODgwMWNlMywgMHg0ODgwMWNlM30sCisJezB4MDAwMGE1ZDgsIDB4Njc4MmJmMTIsIDB4Njc4MmJmMTIsIDB4NGM4MDFjZTUsIDB4NGM4MDFjZTV9LAorCXsweDAwMDBhNWRjLCAweDZiODJiZjE0LCAweDZiODJiZjE0LCAweDUwODAxY2U5LCAweDUwODAxY2U5fSwKKwl7MHgwMDAwYTVlMCwgMHg2ZjgyYmYxNiwgMHg2ZjgyYmYxNiwgMHg1NDgwMWNlYiwgMHg1NDgwMWNlYn0sCisJezB4MDAwMGE1ZTQsIDB4NmY4MmJmMTYsIDB4NmY4MmJmMTYsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAorCXsweDAwMDBhNWU4LCAweDZmODJiZjE2LCAweDZmODJiZjE2LCAweDU2ODAxZWVjLCAweDU2ODAxZWVjfSwKKwl7MHgwMDAwYTVlYywgMHg2ZjgyYmYxNiwgMHg2ZjgyYmYxNiwgMHg1NjgwMWVlYywgMHg1NjgwMWVlY30sCisJezB4MDAwMGE1ZjAsIDB4NmY4MmJmMTYsIDB4NmY4MmJmMTYsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAorCXsweDAwMDBhNWY0LCAweDZmODJiZjE2LCAweDZmODJiZjE2LCAweDU2ODAxZWVjLCAweDU2ODAxZWVjfSwKKwl7MHgwMDAwYTVmOCwgMHg2ZjgyYmYxNiwgMHg2ZjgyYmYxNiwgMHg1NjgwMWVlYywgMHg1NjgwMWVlY30sCisJezB4MDAwMGE1ZmMsIDB4NmY4MmJmMTYsIDB4NmY4MmJmMTYsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAorCXsweDAwMDE2MDQ0LCAweDAzYjZkMmU0LCAweDAzYjZkMmU0LCAweDAzYjZkMmU0LCAweDAzYjZkMmU0fSwKKwl7MHgwMDAxNjA0OCwgMHg4ZTQ4MTI2NiwgMHg4ZTQ4MTI2NiwgMHg4ZTQ4MTI2NiwgMHg4ZTQ4MTI2Nn0sCisJezB4MDAwMTY0NDQsIDB4MDNiNmQyZTQsIDB4MDNiNmQyZTQsIDB4MDNiNmQyZTQsIDB4MDNiNmQyZTR9LAorCXsweDAwMDE2NDQ4LCAweDhlNDgxMjY2LCAweDhlNDgxMjY2LCAweDhlNDgxMjY2LCAweDhlNDgxMjY2fSwKK307CitzdGF0aWMgY29uc3QgdTMyIGFyOTM0ME1vZGVzX3ViMTI0X3R4X2dhaW5fdGFibGVfMXAwW11bNV0gPSB7CisJLyogIEFkZHIgICAgICA1R19IVDIwICAgICAgNUdfSFQ0MCAgICAgMkdfSFQ0MCAgICAyR19IVDIwICAqLworCXsweDAwMDBhNDEwLCAweDAwMDA1MGQ4LCAweDAwMDA1MGQ4LCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5fSwKKwl7MHgwMDAwYTUwMCwgMHgwMDAwMjIyMCwgMHgwMDAwMjIyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE1MDQsIDB4MDQwMDIyMjIsIDB4MDQwMDIyMjIsIDB4MDQwMDAwMDIsIDB4MDQwMDAwMDJ9LAorCXsweDAwMDBhNTA4LCAweDA5MDAyNDIxLCAweDA5MDAyNDIxLCAweDA4MDAwMDA0LCAweDA4MDAwMDA0fSwKKwl7MHgwMDAwYTUwYywgMHgwZDAwMjYyMSwgMHgwZDAwMjYyMSwgMHgwYjAwMDIwMCwgMHgwYjAwMDIwMH0sCisJezB4MDAwMGE1MTAsIDB4MTMwMDQ2MjAsIDB4MTMwMDQ2MjAsIDB4MGYwMDAyMDIsIDB4MGYwMDAyMDJ9LAorCXsweDAwMDBhNTE0LCAweDE5MDA0YTIwLCAweDE5MDA0YTIwLCAweDExMDAwNDAwLCAweDExMDAwNDAwfSwKKwl7MHgwMDAwYTUxOCwgMHgxZDAwNGUyMCwgMHgxZDAwNGUyMCwgMHgxNTAwMDQwMiwgMHgxNTAwMDQwMn0sCisJezB4MDAwMGE1MWMsIDB4MjEwMDU0MjAsIDB4MjEwMDU0MjAsIDB4MTkwMDA0MDQsIDB4MTkwMDA0MDR9LAorCXsweDAwMDBhNTIwLCAweDI2MDA1ZTIwLCAweDI2MDA1ZTIwLCAweDFiMDAwNjAzLCAweDFiMDAwNjAzfSwKKwl7MHgwMDAwYTUyNCwgMHgyYjAwNWU0MCwgMHgyYjAwNWU0MCwgMHgxZjAwMGEwMiwgMHgxZjAwMGEwMn0sCisJezB4MDAwMGE1MjgsIDB4MmYwMDVlNDIsIDB4MmYwMDVlNDIsIDB4MjMwMDBhMDQsIDB4MjMwMDBhMDR9LAorCXsweDAwMDBhNTJjLCAweDMzMDA1ZTQ0LCAweDMzMDA1ZTQ0LCAweDI2MDAwYTIwLCAweDI2MDAwYTIwfSwKKwl7MHgwMDAwYTUzMCwgMHgzODAwNWU2NSwgMHgzODAwNWU2NSwgMHgyYTAwMGUyMCwgMHgyYTAwMGUyMH0sCisJezB4MDAwMGE1MzQsIDB4M2MwMDVlNjksIDB4M2MwMDVlNjksIDB4MmUwMDBlMjIsIDB4MmUwMDBlMjJ9LAorCXsweDAwMDBhNTM4LCAweDQwMDA1ZTZiLCAweDQwMDA1ZTZiLCAweDMxMDAwZTI0LCAweDMxMDAwZTI0fSwKKwl7MHgwMDAwYTUzYywgMHg0NDAwNWU2ZCwgMHg0NDAwNWU2ZCwgMHgzNDAwMTY0MCwgMHgzNDAwMTY0MH0sCisJezB4MDAwMGE1NDAsIDB4NDkwMDVlNzIsIDB4NDkwMDVlNzIsIDB4MzgwMDE2NjAsIDB4MzgwMDE2NjB9LAorCXsweDAwMDBhNTQ0LCAweDRlMDA1ZWIyLCAweDRlMDA1ZWIyLCAweDNiMDAxODYxLCAweDNiMDAxODYxfSwKKwl7MHgwMDAwYTU0OCwgMHg1MzAwNWYxMiwgMHg1MzAwNWYxMiwgMHgzZTAwMWE4MSwgMHgzZTAwMWE4MX0sCisJezB4MDAwMGE1NGMsIDB4NTkwMjVlYjUsIDB4NTkwMjVlYjUsIDB4NDIwMDFhODMsIDB4NDIwMDFhODN9LAorCXsweDAwMDBhNTUwLCAweDVlMDI1ZjEyLCAweDVlMDI1ZjEyLCAweDQ0MDAxYzg0LCAweDQ0MDAxYzg0fSwKKwl7MHgwMDAwYTU1NCwgMHg2MTAyN2YxMiwgMHg2MTAyN2YxMiwgMHg0ODAwMWNlMywgMHg0ODAwMWNlM30sCisJezB4MDAwMGE1NTgsIDB4NjcwMmJmMTIsIDB4NjcwMmJmMTIsIDB4NGMwMDFjZTUsIDB4NGMwMDFjZTV9LAorCXsweDAwMDBhNTVjLCAweDZiMDJiZjE0LCAweDZiMDJiZjE0LCAweDUwMDAxY2U5LCAweDUwMDAxY2U5fSwKKwl7MHgwMDAwYTU2MCwgMHg2ZjAyYmYxNiwgMHg2ZjAyYmYxNiwgMHg1NDAwMWNlYiwgMHg1NDAwMWNlYn0sCisJezB4MDAwMGE1NjQsIDB4NmYwMmJmMTYsIDB4NmYwMmJmMTYsIDB4NTYwMDFlZWMsIDB4NTYwMDFlZWN9LAorCXsweDAwMDBhNTY4LCAweDZmMDJiZjE2LCAweDZmMDJiZjE2LCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKKwl7MHgwMDAwYTU2YywgMHg2ZjAyYmYxNiwgMHg2ZjAyYmYxNiwgMHg1NjAwMWVlYywgMHg1NjAwMWVlY30sCisJezB4MDAwMGE1NzAsIDB4NmYwMmJmMTYsIDB4NmYwMmJmMTYsIDB4NTYwMDFlZWMsIDB4NTYwMDFlZWN9LAorCXsweDAwMDBhNTc0LCAweDZmMDJiZjE2LCAweDZmMDJiZjE2LCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKKwl7MHgwMDAwYTU3OCwgMHg2ZjAyYmYxNiwgMHg2ZjAyYmYxNiwgMHg1NjAwMWVlYywgMHg1NjAwMWVlY30sCisJezB4MDAwMGE1N2MsIDB4NmYwMmJmMTYsIDB4NmYwMmJmMTYsIDB4NTYwMDFlZWMsIDB4NTYwMDFlZWN9LAorCXsweDAwMDBhNTgwLCAweDAwODAyMjIwLCAweDAwODAyMjIwLCAweDAwODAwMDAwLCAweDAwODAwMDAwfSwKKwl7MHgwMDAwYTU4NCwgMHgwNDgwMjIyMiwgMHgwNDgwMjIyMiwgMHgwNDgwMDAwMiwgMHgwNDgwMDAwMn0sCisJezB4MDAwMGE1ODgsIDB4MDk4MDI0MjEsIDB4MDk4MDI0MjEsIDB4MDg4MDAwMDQsIDB4MDg4MDAwMDR9LAorCXsweDAwMDBhNThjLCAweDBkODAyNjIxLCAweDBkODAyNjIxLCAweDBiODAwMjAwLCAweDBiODAwMjAwfSwKKwl7MHgwMDAwYTU5MCwgMHgxMzgwNDYyMCwgMHgxMzgwNDYyMCwgMHgwZjgwMDIwMiwgMHgwZjgwMDIwMn0sCisJezB4MDAwMGE1OTQsIDB4MTk4MDRhMjAsIDB4MTk4MDRhMjAsIDB4MTE4MDA0MDAsIDB4MTE4MDA0MDB9LAorCXsweDAwMDBhNTk4LCAweDFkODA0ZTIwLCAweDFkODA0ZTIwLCAweDE1ODAwNDAyLCAweDE1ODAwNDAyfSwKKwl7MHgwMDAwYTU5YywgMHgyMTgwNTQyMCwgMHgyMTgwNTQyMCwgMHgxOTgwMDQwNCwgMHgxOTgwMDQwNH0sCisJezB4MDAwMGE1YTAsIDB4MjY4MDVlMjAsIDB4MjY4MDVlMjAsIDB4MWI4MDA2MDMsIDB4MWI4MDA2MDN9LAorCXsweDAwMDBhNWE0LCAweDJiODA1ZTQwLCAweDJiODA1ZTQwLCAweDFmODAwYTAyLCAweDFmODAwYTAyfSwKKwl7MHgwMDAwYTVhOCwgMHgyZjgwNWU0MiwgMHgyZjgwNWU0MiwgMHgyMzgwMGEwNCwgMHgyMzgwMGEwNH0sCisJezB4MDAwMGE1YWMsIDB4MzM4MDVlNDQsIDB4MzM4MDVlNDQsIDB4MjY4MDBhMjAsIDB4MjY4MDBhMjB9LAorCXsweDAwMDBhNWIwLCAweDM4ODA1ZTY1LCAweDM4ODA1ZTY1LCAweDJhODAwZTIwLCAweDJhODAwZTIwfSwKKwl7MHgwMDAwYTViNCwgMHgzYzgwNWU2OSwgMHgzYzgwNWU2OSwgMHgyZTgwMGUyMiwgMHgyZTgwMGUyMn0sCisJezB4MDAwMGE1YjgsIDB4NDA4MDVlNmIsIDB4NDA4MDVlNmIsIDB4MzE4MDBlMjQsIDB4MzE4MDBlMjR9LAorCXsweDAwMDBhNWJjLCAweDQ0ODA1ZTZkLCAweDQ0ODA1ZTZkLCAweDM0ODAxNjQwLCAweDM0ODAxNjQwfSwKKwl7MHgwMDAwYTVjMCwgMHg0OTgwNWU3MiwgMHg0OTgwNWU3MiwgMHgzODgwMTY2MCwgMHgzODgwMTY2MH0sCisJezB4MDAwMGE1YzQsIDB4NGU4MDVlYjIsIDB4NGU4MDVlYjIsIDB4M2I4MDE4NjEsIDB4M2I4MDE4NjF9LAorCXsweDAwMDBhNWM4LCAweDUzODA1ZjEyLCAweDUzODA1ZjEyLCAweDNlODAxYTgxLCAweDNlODAxYTgxfSwKKwl7MHgwMDAwYTVjYywgMHg1OTgyNWViMiwgMHg1OTgyNWViMiwgMHg0MjgwMWE4MywgMHg0MjgwMWE4M30sCisJezB4MDAwMGE1ZDAsIDB4NWU4MjVmMTIsIDB4NWU4MjVmMTIsIDB4NDQ4MDFjODQsIDB4NDQ4MDFjODR9LAorCXsweDAwMDBhNWQ0LCAweDYxODI3ZjEyLCAweDYxODI3ZjEyLCAweDQ4ODAxY2UzLCAweDQ4ODAxY2UzfSwKKwl7MHgwMDAwYTVkOCwgMHg2NzgyYmYxMiwgMHg2NzgyYmYxMiwgMHg0YzgwMWNlNSwgMHg0YzgwMWNlNX0sCisJezB4MDAwMGE1ZGMsIDB4NmI4MmJmMTQsIDB4NmI4MmJmMTQsIDB4NTA4MDFjZTksIDB4NTA4MDFjZTl9LAorCXsweDAwMDBhNWUwLCAweDZmODJiZjE2LCAweDZmODJiZjE2LCAweDU0ODAxY2ViLCAweDU0ODAxY2VifSwKKwl7MHgwMDAwYTVlNCwgMHg2ZjgyYmYxNiwgMHg2ZjgyYmYxNiwgMHg1NjgwMWVlYywgMHg1NjgwMWVlY30sCisJezB4MDAwMGE1ZTgsIDB4NmY4MmJmMTYsIDB4NmY4MmJmMTYsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAorCXsweDAwMDBhNWVjLCAweDZmODJiZjE2LCAweDZmODJiZjE2LCAweDU2ODAxZWVjLCAweDU2ODAxZWVjfSwKKwl7MHgwMDAwYTVmMCwgMHg2ZjgyYmYxNiwgMHg2ZjgyYmYxNiwgMHg1NjgwMWVlYywgMHg1NjgwMWVlY30sCisJezB4MDAwMGE1ZjQsIDB4NmY4MmJmMTYsIDB4NmY4MmJmMTYsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAorCXsweDAwMDBhNWY4LCAweDZmODJiZjE2LCAweDZmODJiZjE2LCAweDU2ODAxZWVjLCAweDU2ODAxZWVjfSwKKwl7MHgwMDAwYTVmYywgMHg2ZjgyYmYxNiwgMHg2ZjgyYmYxNiwgMHg1NjgwMWVlYywgMHg1NjgwMWVlY30sCisJezB4MDAwMTYwNDQsIDB4MDM2ZGIyZGIsIDB4MDM2ZGIyZGIsIDB4MDM2ZGIyZGIsIDB4MDM2ZGIyZGJ9LAorCXsweDAwMDE2MDQ4LCAweDY5YjY1MjY2LCAweDY5YjY1MjY2LCAweDY5YjY1MjY2LCAweDY5YjY1MjY2fSwKKwl7MHgwMDAxNjQ0NCwgMHgwMzZkYjJkYiwgMHgwMzZkYjJkYiwgMHgwMzZkYjJkYiwgMHgwMzZkYjJkYn0sCisJezB4MDAwMTY0NDgsIDB4NjliNjUyNjYsIDB4NjliNjUyNjYsIDB4NjliNjUyNjYsIDB4NjliNjUyNjZ9LAorfTsKKworCitzdGF0aWMgY29uc3QgdTMyIGFyOTM0MENvbW1vbl9yeF9nYWluX3RhYmxlXzFwMFtdWzJdID0geworCS8qICAgQWRkciAgICAgYWxsbW9kZXMgKi8KKwl7MHgwMDAwYTAwMCwgMHgwMDAxMDAwMH0sCisJezB4MDAwMGEwMDQsIDB4MDAwMzAwMDJ9LAorCXsweDAwMDBhMDA4LCAweDAwMDUwMDA0fSwKKwl7MHgwMDAwYTAwYywgMHgwMDgxMDA4MH0sCisJezB4MDAwMGEwMTAsIDB4MDA4MzAwODJ9LAorCXsweDAwMDBhMDE0LCAweDAxODEwMTgwfSwKKwl7MHgwMDAwYTAxOCwgMHgwMTgzMDE4Mn0sCisJezB4MDAwMGEwMWMsIDB4MDE4NTAxODR9LAorCXsweDAwMDBhMDIwLCAweDAxODkwMTg4fSwKKwl7MHgwMDAwYTAyNCwgMHgwMThiMDE4YX0sCisJezB4MDAwMGEwMjgsIDB4MDE4ZDAxOGN9LAorCXsweDAwMDBhMDJjLCAweDAxOTEwMTkwfSwKKwl7MHgwMDAwYTAzMCwgMHgwMTkzMDE5Mn0sCisJezB4MDAwMGEwMzQsIDB4MDE5NTAxOTR9LAorCXsweDAwMDBhMDM4LCAweDAzOGEwMTk2fSwKKwl7MHgwMDAwYTAzYywgMHgwMzhjMDM4Yn0sCisJezB4MDAwMGEwNDAsIDB4MDM5MDAzOGR9LAorCXsweDAwMDBhMDQ0LCAweDAzOTIwMzkxfSwKKwl7MHgwMDAwYTA0OCwgMHgwMzk0MDM5M30sCisJezB4MDAwMGEwNGMsIDB4MDM5NjAzOTV9LAorCXsweDAwMDBhMDUwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA1NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDVjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA2MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA2YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDc0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwN2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDgwLCAweDIyMjIyMjI5fSwKKwl7MHgwMDAwYTA4NCwgMHgxZDFkMWQxZH0sCisJezB4MDAwMGEwODgsIDB4MWQxZDFkMWR9LAorCXsweDAwMDBhMDhjLCAweDFkMWQxZDFkfSwKKwl7MHgwMDAwYTA5MCwgMHgxNzFkMWQxZH0sCisJezB4MDAwMGEwOTQsIDB4MTExMTE3MTd9LAorCXsweDAwMDBhMDk4LCAweDAwMDMwMzExfSwKKwl7MHgwMDAwYTA5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwYTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMGE0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTBhOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwYWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMGIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTBiNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwYjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMGJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTBjMCwgMHgwMDFmMDAwMH0sCisJezB4MDAwMGEwYzQsIDB4MDEwMDAxMDF9LAorCXsweDAwMDBhMGM4LCAweDAxMWUwMTFmfSwKKwl7MHgwMDAwYTBjYywgMHgwMTFjMDExZH0sCisJezB4MDAwMGEwZDAsIDB4MDIwMzAyMDR9LAorCXsweDAwMDBhMGQ0LCAweDAyMDEwMjAyfSwKKwl7MHgwMDAwYTBkOCwgMHgwMjFmMDIwMH0sCisJezB4MDAwMGEwZGMsIDB4MDMwMjAyMWV9LAorCXsweDAwMDBhMGUwLCAweDAzMDAwMzAxfSwKKwl7MHgwMDAwYTBlNCwgMHgwMzFlMDMxZn0sCisJezB4MDAwMGEwZTgsIDB4MDQwMjAzMWR9LAorCXsweDAwMDBhMGVjLCAweDA0MDAwNDAxfSwKKwl7MHgwMDAwYTBmMCwgMHgwNDFlMDQxZn0sCisJezB4MDAwMGEwZjQsIDB4MDUwMjA0MWR9LAorCXsweDAwMDBhMGY4LCAweDA1MDAwNTAxfSwKKwl7MHgwMDAwYTBmYywgMHgwNTFlMDUxZn0sCisJezB4MDAwMGExMDAsIDB4MDYwMTA2MDJ9LAorCXsweDAwMDBhMTA0LCAweDA2MWYwNjAwfSwKKwl7MHgwMDAwYTEwOCwgMHgwNjFkMDYxZX0sCisJezB4MDAwMGExMGMsIDB4MDcwMjA3MDN9LAorCXsweDAwMDBhMTEwLCAweDA3MDAwNzAxfSwKKwl7MHgwMDAwYTExNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTFjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTEyMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTEyYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTM0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTEzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTQwLCAweDAwMWYwMDAwfSwKKwl7MHgwMDAwYTE0NCwgMHgwMTAwMDEwMX0sCisJezB4MDAwMGExNDgsIDB4MDExZTAxMWZ9LAorCXsweDAwMDBhMTRjLCAweDAxMWMwMTFkfSwKKwl7MHgwMDAwYTE1MCwgMHgwMjAzMDIwNH0sCisJezB4MDAwMGExNTQsIDB4MDIwMTAyMDJ9LAorCXsweDAwMDBhMTU4LCAweDAyMWYwMjAwfSwKKwl7MHgwMDAwYTE1YywgMHgwMzAyMDIxZX0sCisJezB4MDAwMGExNjAsIDB4MDMwMDAzMDF9LAorCXsweDAwMDBhMTY0LCAweDAzMWUwMzFmfSwKKwl7MHgwMDAwYTE2OCwgMHgwNDAyMDMxZH0sCisJezB4MDAwMGExNmMsIDB4MDQwMDA0MDF9LAorCXsweDAwMDBhMTcwLCAweDA0MWUwNDFmfSwKKwl7MHgwMDAwYTE3NCwgMHgwNTAyMDQxZH0sCisJezB4MDAwMGExNzgsIDB4MDUwMDA1MDF9LAorCXsweDAwMDBhMTdjLCAweDA1MWUwNTFmfSwKKwl7MHgwMDAwYTE4MCwgMHgwNjAxMDYwMn0sCisJezB4MDAwMGExODQsIDB4MDYxZjA2MDB9LAorCXsweDAwMDBhMTg4LCAweDA2MWQwNjFlfSwKKwl7MHgwMDAwYTE4YywgMHgwNzAyMDcwM30sCisJezB4MDAwMGExOTAsIDB4MDcwMDA3MDF9LAorCXsweDAwMDBhMTk0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTE5OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExOWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFhNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWFjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFiMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFiYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWM0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFjOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExY2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWQwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFkNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWRjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFlMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWU4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFlYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZjAsIDB4MDAwMDAzOTZ9LAorCXsweDAwMDBhMWY0LCAweDAwMDAwMzk2fSwKKwl7MHgwMDAwYTFmOCwgMHgwMDAwMDM5Nn0sCisJezB4MDAwMGExZmMsIDB4MDAwMDAxOTZ9LAorCXsweDAwMDBiMDAwLCAweDAwMDEwMDAwfSwKKwl7MHgwMDAwYjAwNCwgMHgwMDAzMDAwMn0sCisJezB4MDAwMGIwMDgsIDB4MDAwNTAwMDR9LAorCXsweDAwMDBiMDBjLCAweDAwODEwMDgwfSwKKwl7MHgwMDAwYjAxMCwgMHgwMDgzMDA4Mn0sCisJezB4MDAwMGIwMTQsIDB4MDE4MTAxODB9LAorCXsweDAwMDBiMDE4LCAweDAxODMwMTgyfSwKKwl7MHgwMDAwYjAxYywgMHgwMTg1MDE4NH0sCisJezB4MDAwMGIwMjAsIDB4MDI4MTAyODB9LAorCXsweDAwMDBiMDI0LCAweDAyODMwMjgyfSwKKwl7MHgwMDAwYjAyOCwgMHgwMjg1MDI4NH0sCisJezB4MDAwMGIwMmMsIDB4MDI4OTAyODh9LAorCXsweDAwMDBiMDMwLCAweDAyOGIwMjhhfSwKKwl7MHgwMDAwYjAzNCwgMHgwMzg4MDI4Y30sCisJezB4MDAwMGIwMzgsIDB4MDM4YTAzODl9LAorCXsweDAwMDBiMDNjLCAweDAzOGMwMzhifSwKKwl7MHgwMDAwYjA0MCwgMHgwMzkwMDM4ZH0sCisJezB4MDAwMGIwNDQsIDB4MDM5MjAzOTF9LAorCXsweDAwMDBiMDQ4LCAweDAzOTQwMzkzfSwKKwl7MHgwMDAwYjA0YywgMHgwMzk2MDM5NX0sCisJezB4MDAwMGIwNTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDU0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA1OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwNWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDYwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA2NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwNjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDZjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA3MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwNzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDc4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA3YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwODAsIDB4MzIzMjMyMzJ9LAorCXsweDAwMDBiMDg0LCAweDJmMmYzMjMyfSwKKwl7MHgwMDAwYjA4OCwgMHgyMzI4MmEyZH0sCisJezB4MDAwMGIwOGMsIDB4MWMxZTIxMjN9LAorCXsweDAwMDBiMDkwLCAweDE0MTcxOTE5fSwKKwl7MHgwMDAwYjA5NCwgMHgwZTBlMTIxNH0sCisJezB4MDAwMGIwOTgsIDB4MDMwNTA3MDd9LAorCXsweDAwMDBiMDljLCAweDAwMDMwMzAzfSwKKwl7MHgwMDAwYjBhMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwYTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMGE4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjBhYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwYjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMGI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjBiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMGMwLCAweDAwM2YwMDIwfSwKKwl7MHgwMDAwYjBjNCwgMHgwMDQwMDA0MX0sCisJezB4MDAwMGIwYzgsIDB4MDE0MDAwNWZ9LAorCXsweDAwMDBiMGNjLCAweDAxNjAwMTVmfSwKKwl7MHgwMDAwYjBkMCwgMHgwMTdlMDE3Zn0sCisJezB4MDAwMGIwZDQsIDB4MDI0MTAyNDJ9LAorCXsweDAwMDBiMGQ4LCAweDAyNWYwMjQwfSwKKwl7MHgwMDAwYjBkYywgMHgwMjdmMDI2MH0sCisJezB4MDAwMGIwZTAsIDB4MDM0MTAyN2V9LAorCXsweDAwMDBiMGU0LCAweDAzNWYwMzQwfSwKKwl7MHgwMDAwYjBlOCwgMHgwMzdmMDM2MH0sCisJezB4MDAwMGIwZWMsIDB4MDQ0MDA0NDF9LAorCXsweDAwMDBiMGYwLCAweDA0NjAwNDVmfSwKKwl7MHgwMDAwYjBmNCwgMHgwNTQxMDQ3Zn0sCisJezB4MDAwMGIwZjgsIDB4MDU1ZjA1NDB9LAorCXsweDAwMDBiMGZjLCAweDA1N2YwNTYwfSwKKwl7MHgwMDAwYjEwMCwgMHgwNjQwMDY0MX0sCisJezB4MDAwMGIxMDQsIDB4MDY2MDA2NWZ9LAorCXsweDAwMDBiMTA4LCAweDA2N2UwNjdmfSwKKwl7MHgwMDAwYjEwYywgMHgwNzQxMDc0Mn0sCisJezB4MDAwMGIxMTAsIDB4MDc1ZjA3NDB9LAorCXsweDAwMDBiMTE0LCAweDA3N2YwNzYwfSwKKwl7MHgwMDAwYjExOCwgMHgwNzgwMDc4MX0sCisJezB4MDAwMGIxMWMsIDB4MDdhMDA3OWZ9LAorCXsweDAwMDBiMTIwLCAweDA3YzEwN2JmfSwKKwl7MHgwMDAwYjEyNCwgMHgwMDAwMDdjMH0sCisJezB4MDAwMGIxMjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMTJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjEzMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxMzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMTM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjEzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxNDAsIDB4MDAzZjAwMjB9LAorCXsweDAwMDBiMTQ0LCAweDAwNDAwMDQxfSwKKwl7MHgwMDAwYjE0OCwgMHgwMTQwMDA1Zn0sCisJezB4MDAwMGIxNGMsIDB4MDE2MDAxNWZ9LAorCXsweDAwMDBiMTUwLCAweDAxN2UwMTdmfSwKKwl7MHgwMDAwYjE1NCwgMHgwMjQxMDI0Mn0sCisJezB4MDAwMGIxNTgsIDB4MDI1ZjAyNDB9LAorCXsweDAwMDBiMTVjLCAweDAyN2YwMjYwfSwKKwl7MHgwMDAwYjE2MCwgMHgwMzQxMDI3ZX0sCisJezB4MDAwMGIxNjQsIDB4MDM1ZjAzNDB9LAorCXsweDAwMDBiMTY4LCAweDAzN2YwMzYwfSwKKwl7MHgwMDAwYjE2YywgMHgwNDQwMDQ0MX0sCisJezB4MDAwMGIxNzAsIDB4MDQ2MDA0NWZ9LAorCXsweDAwMDBiMTc0LCAweDA1NDEwNDdmfSwKKwl7MHgwMDAwYjE3OCwgMHgwNTVmMDU0MH0sCisJezB4MDAwMGIxN2MsIDB4MDU3ZjA1NjB9LAorCXsweDAwMDBiMTgwLCAweDA2NDAwNjQxfSwKKwl7MHgwMDAwYjE4NCwgMHgwNjYwMDY1Zn0sCisJezB4MDAwMGIxODgsIDB4MDY3ZTA2N2Z9LAorCXsweDAwMDBiMThjLCAweDA3NDEwNzQyfSwKKwl7MHgwMDAwYjE5MCwgMHgwNzVmMDc0MH0sCisJezB4MDAwMGIxOTQsIDB4MDc3ZjA3NjB9LAorCXsweDAwMDBiMTk4LCAweDA3ODAwNzgxfSwKKwl7MHgwMDAwYjE5YywgMHgwN2EwMDc5Zn0sCisJezB4MDAwMGIxYTAsIDB4MDdjMTA3YmZ9LAorCXsweDAwMDBiMWE0LCAweDAwMDAwN2MwfSwKKwl7MHgwMDAwYjFhOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxYWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFiNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxYjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFjMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxYzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFjYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxZDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWQ0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFkOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxZGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWUwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFlNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxZTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWVjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFmMCwgMHgwMDAwMDM5Nn0sCisJezB4MDAwMGIxZjQsIDB4MDAwMDAzOTZ9LAorCXsweDAwMDBiMWY4LCAweDAwMDAwMzk2fSwKKwl7MHgwMDAwYjFmYywgMHgwMDAwMDE5Nn0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIGFyOTM0ME1vZGVzX2xvd19vYl9kYl90eF9nYWluX3RhYmxlXzFwMFtdWzVdID0geworCS8qICBBZGRyICAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgICAgMkdfSFQ0MCAgICAgMkdfSFQyMCAgKi8KKwl7MHgwMDAwYTQxMCwgMHgwMDAwNTBkOSwgMHgwMDAwNTBkOSwgMHgwMDAwNTBkOSwgMHgwMDAwNTBkOX0sCisJezB4MDAwMGE1MDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNTA0LCAweDA2MDAwMDAzLCAweDA2MDAwMDAzLCAweDA0MDAwMDAyLCAweDA0MDAwMDAyfSwKKwl7MHgwMDAwYTUwOCwgMHgwYTAwMDAyMCwgMHgwYTAwMDAyMCwgMHgwODAwMDAwNCwgMHgwODAwMDAwNH0sCisJezB4MDAwMGE1MGMsIDB4MTAwMDAwMjMsIDB4MTAwMDAwMjMsIDB4MGIwMDAyMDAsIDB4MGIwMDAyMDB9LAorCXsweDAwMDBhNTEwLCAweDE2MDAwMjIwLCAweDE2MDAwMjIwLCAweDBmMDAwMjAyLCAweDBmMDAwMjAyfSwKKwl7MHgwMDAwYTUxNCwgMHgxYzAwMDIyMywgMHgxYzAwMDIyMywgMHgxMjAwMDQwMCwgMHgxMjAwMDQwMH0sCisJezB4MDAwMGE1MTgsIDB4MjEwMjAyMjAsIDB4MjEwMjAyMjAsIDB4MTYwMDA0MDIsIDB4MTYwMDA0MDJ9LAorCXsweDAwMDBhNTFjLCAweDI3MDIwMjIzLCAweDI3MDIwMjIzLCAweDE5MDAwNDA0LCAweDE5MDAwNDA0fSwKKwl7MHgwMDAwYTUyMCwgMHgyYjAyMjIyMCwgMHgyYjAyMjIyMCwgMHgxYzAwMDYwMywgMHgxYzAwMDYwM30sCisJezB4MDAwMGE1MjQsIDB4MmYwMjIyMjIsIDB4MmYwMjIyMjIsIDB4MjEwMDBhMDIsIDB4MjEwMDBhMDJ9LAorCXsweDAwMDBhNTI4LCAweDM0MDIyMjI1LCAweDM0MDIyMjI1LCAweDI1MDAwYTA0LCAweDI1MDAwYTA0fSwKKwl7MHgwMDAwYTUyYywgMHgzYTAyMjIyYSwgMHgzYTAyMjIyYSwgMHgyODAwMGEyMCwgMHgyODAwMGEyMH0sCisJezB4MDAwMGE1MzAsIDB4M2UwMjIyMmMsIDB4M2UwMjIyMmMsIDB4MmMwMDBlMjAsIDB4MmMwMDBlMjB9LAorCXsweDAwMDBhNTM0LCAweDQyMDIyNDJhLCAweDQyMDIyNDJhLCAweDMwMDAwZTIyLCAweDMwMDAwZTIyfSwKKwl7MHgwMDAwYTUzOCwgMHg0NzAyMjQ0YSwgMHg0NzAyMjQ0YSwgMHgzNDAwMGUyNCwgMHgzNDAwMGUyNH0sCisJezB4MDAwMGE1M2MsIDB4NGIwMjI0NGMsIDB4NGIwMjI0NGMsIDB4MzgwMDE2NDAsIDB4MzgwMDE2NDB9LAorCXsweDAwMDBhNTQwLCAweDRlMDIyNDZjLCAweDRlMDIyNDZjLCAweDNjMDAxNjYwLCAweDNjMDAxNjYwfSwKKwl7MHgwMDAwYTU0NCwgMHg1MzAyMjY2YywgMHg1MzAyMjY2YywgMHgzZjAwMTg2MSwgMHgzZjAwMTg2MX0sCisJezB4MDAwMGE1NDgsIDB4NTcwMjI4NmMsIDB4NTcwMjI4NmMsIDB4NDMwMDFhODEsIDB4NDMwMDFhODF9LAorCXsweDAwMDBhNTRjLCAweDVjMDQyODZiLCAweDVjMDQyODZiLCAweDQ3MDAxYTgzLCAweDQ3MDAxYTgzfSwKKwl7MHgwMDAwYTU1MCwgMHg2MTA0MmE2YywgMHg2MTA0MmE2YywgMHg0YTAwMWM4NCwgMHg0YTAwMWM4NH0sCisJezB4MDAwMGE1NTQsIDB4NjYwNjJhNmMsIDB4NjYwNjJhNmMsIDB4NGUwMDFjZTMsIDB4NGUwMDFjZTN9LAorCXsweDAwMDBhNTU4LCAweDZiMDYyZTZjLCAweDZiMDYyZTZjLCAweDUyMDAxY2U1LCAweDUyMDAxY2U1fSwKKwl7MHgwMDAwYTU1YywgMHg3MDA2MzA4YywgMHg3MDA2MzA4YywgMHg1NjAwMWNlOSwgMHg1NjAwMWNlOX0sCisJezB4MDAwMGE1NjAsIDB4NzMwYTMwOGEsIDB4NzMwYTMwOGEsIDB4NWEwMDFjZWIsIDB4NWEwMDFjZWJ9LAorCXsweDAwMDBhNTY0LCAweDc3MGEzMDhjLCAweDc3MGEzMDhjLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKKwl7MHgwMDAwYTU2OCwgMHg3NzBhMzA4YywgMHg3NzBhMzA4YywgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCisJezB4MDAwMGE1NmMsIDB4NzcwYTMwOGMsIDB4NzcwYTMwOGMsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAorCXsweDAwMDBhNTcwLCAweDc3MGEzMDhjLCAweDc3MGEzMDhjLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKKwl7MHgwMDAwYTU3NCwgMHg3NzBhMzA4YywgMHg3NzBhMzA4YywgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCisJezB4MDAwMGE1NzgsIDB4NzcwYTMwOGMsIDB4NzcwYTMwOGMsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAorCXsweDAwMDBhNTdjLCAweDc3MGEzMDhjLCAweDc3MGEzMDhjLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKKwl7MHgwMDAwYTU4MCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMH0sCisJezB4MDAwMGE1ODQsIDB4MDY4MDAwMDMsIDB4MDY4MDAwMDMsIDB4MDQ4MDAwMDIsIDB4MDQ4MDAwMDJ9LAorCXsweDAwMDBhNTg4LCAweDBhODAwMDIwLCAweDBhODAwMDIwLCAweDA4ODAwMDA0LCAweDA4ODAwMDA0fSwKKwl7MHgwMDAwYTU4YywgMHgxMDgwMDAyMywgMHgxMDgwMDAyMywgMHgwYjgwMDIwMCwgMHgwYjgwMDIwMH0sCisJezB4MDAwMGE1OTAsIDB4MTY4MDAyMjAsIDB4MTY4MDAyMjAsIDB4MGY4MDAyMDIsIDB4MGY4MDAyMDJ9LAorCXsweDAwMDBhNTk0LCAweDFjODAwMjIzLCAweDFjODAwMjIzLCAweDEyODAwNDAwLCAweDEyODAwNDAwfSwKKwl7MHgwMDAwYTU5OCwgMHgyMTgyMDIyMCwgMHgyMTgyMDIyMCwgMHgxNjgwMDQwMiwgMHgxNjgwMDQwMn0sCisJezB4MDAwMGE1OWMsIDB4Mjc4MjAyMjMsIDB4Mjc4MjAyMjMsIDB4MTk4MDA0MDQsIDB4MTk4MDA0MDR9LAorCXsweDAwMDBhNWEwLCAweDJiODIyMjIwLCAweDJiODIyMjIwLCAweDFjODAwNjAzLCAweDFjODAwNjAzfSwKKwl7MHgwMDAwYTVhNCwgMHgyZjgyMjIyMiwgMHgyZjgyMjIyMiwgMHgyMTgwMGEwMiwgMHgyMTgwMGEwMn0sCisJezB4MDAwMGE1YTgsIDB4MzQ4MjIyMjUsIDB4MzQ4MjIyMjUsIDB4MjU4MDBhMDQsIDB4MjU4MDBhMDR9LAorCXsweDAwMDBhNWFjLCAweDNhODIyMjJhLCAweDNhODIyMjJhLCAweDI4ODAwYTIwLCAweDI4ODAwYTIwfSwKKwl7MHgwMDAwYTViMCwgMHgzZTgyMjIyYywgMHgzZTgyMjIyYywgMHgyYzgwMGUyMCwgMHgyYzgwMGUyMH0sCisJezB4MDAwMGE1YjQsIDB4NDI4MjI0MmEsIDB4NDI4MjI0MmEsIDB4MzA4MDBlMjIsIDB4MzA4MDBlMjJ9LAorCXsweDAwMDBhNWI4LCAweDQ3ODIyNDRhLCAweDQ3ODIyNDRhLCAweDM0ODAwZTI0LCAweDM0ODAwZTI0fSwKKwl7MHgwMDAwYTViYywgMHg0YjgyMjQ0YywgMHg0YjgyMjQ0YywgMHgzODgwMTY0MCwgMHgzODgwMTY0MH0sCisJezB4MDAwMGE1YzAsIDB4NGU4MjI0NmMsIDB4NGU4MjI0NmMsIDB4M2M4MDE2NjAsIDB4M2M4MDE2NjB9LAorCXsweDAwMDBhNWM0LCAweDUzODIyNjZjLCAweDUzODIyNjZjLCAweDNmODAxODYxLCAweDNmODAxODYxfSwKKwl7MHgwMDAwYTVjOCwgMHg1NzgyMjg2YywgMHg1NzgyMjg2YywgMHg0MzgwMWE4MSwgMHg0MzgwMWE4MX0sCisJezB4MDAwMGE1Y2MsIDB4NWM4NDI4NmIsIDB4NWM4NDI4NmIsIDB4NDc4MDFhODMsIDB4NDc4MDFhODN9LAorCXsweDAwMDBhNWQwLCAweDYxODQyYTZjLCAweDYxODQyYTZjLCAweDRhODAxYzg0LCAweDRhODAxYzg0fSwKKwl7MHgwMDAwYTVkNCwgMHg2Njg2MmE2YywgMHg2Njg2MmE2YywgMHg0ZTgwMWNlMywgMHg0ZTgwMWNlM30sCisJezB4MDAwMGE1ZDgsIDB4NmI4NjJlNmMsIDB4NmI4NjJlNmMsIDB4NTI4MDFjZTUsIDB4NTI4MDFjZTV9LAorCXsweDAwMDBhNWRjLCAweDcwODYzMDhjLCAweDcwODYzMDhjLCAweDU2ODAxY2U5LCAweDU2ODAxY2U5fSwKKwl7MHgwMDAwYTVlMCwgMHg3MzhhMzA4YSwgMHg3MzhhMzA4YSwgMHg1YTgwMWNlYiwgMHg1YTgwMWNlYn0sCisJezB4MDAwMGE1ZTQsIDB4Nzc4YTMwOGMsIDB4Nzc4YTMwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAorCXsweDAwMDBhNWU4LCAweDc3OGEzMDhjLCAweDc3OGEzMDhjLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKKwl7MHgwMDAwYTVlYywgMHg3NzhhMzA4YywgMHg3NzhhMzA4YywgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCisJezB4MDAwMGE1ZjAsIDB4Nzc4YTMwOGMsIDB4Nzc4YTMwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAorCXsweDAwMDBhNWY0LCAweDc3OGEzMDhjLCAweDc3OGEzMDhjLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKKwl7MHgwMDAwYTVmOCwgMHg3NzhhMzA4YywgMHg3NzhhMzA4YywgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCisJezB4MDAwMGE1ZmMsIDB4Nzc4YTMwOGMsIDB4Nzc4YTMwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAorCXsweDAwMDE2MDQ0LCAweDA1NmRiMmRiLCAweDA1NmRiMmRiLCAweDA1NmRiMmRiLCAweDA1NmRiMmRifSwKKwl7MHgwMDAxNjA0OCwgMHgyNDkyNTI2NiwgMHgyNDkyNTI2NiwgMHgyNDkyNTI2NiwgMHgyNDkyNTI2Nn0sCisJezB4MDAwMTY0NDQsIDB4MDU2ZGIyZGIsIDB4MDU2ZGIyZGIsIDB4MDU2ZGIyZGIsIDB4MDU2ZGIyZGJ9LAorCXsweDAwMDE2NDQ4LCAweDI0OTI1MjY2LCAweDI0OTI1MjY2LCAweDI0OTI1MjY2LCAweDI0OTI1MjY2fSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5MzQwTW9kZXNfbWl4ZWRfb2JfZGJfdHhfZ2Fpbl90YWJsZV8xcDBbXVs1XSA9IHsKKwkvKiAgQWRkciAgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgIDJHX0hUMjAgICovCisJezB4MDAwMGE0MTAsIDB4MDAwMDUwZDksIDB4MDAwMDUwZDksIDB4MDAwMDUwZDksIDB4MDAwMDUwZDl9LAorCXsweDAwMDBhNTAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTUwNCwgMHgwNjAwMDAwMywgMHgwNjAwMDAwMywgMHgwNDAwMDAwMiwgMHgwNDAwMDAwMn0sCisJezB4MDAwMGE1MDgsIDB4MGEwMDAwMjAsIDB4MGEwMDAwMjAsIDB4MDgwMDAwMDQsIDB4MDgwMDAwMDR9LAorCXsweDAwMDBhNTBjLCAweDEwMDAwMDIzLCAweDEwMDAwMDIzLCAweDBiMDAwMjAwLCAweDBiMDAwMjAwfSwKKwl7MHgwMDAwYTUxMCwgMHgxNjAwMDIyMCwgMHgxNjAwMDIyMCwgMHgwZjAwMDIwMiwgMHgwZjAwMDIwMn0sCisJezB4MDAwMGE1MTQsIDB4MWMwMDAyMjMsIDB4MWMwMDAyMjMsIDB4MTEwMDA0MDAsIDB4MTEwMDA0MDB9LAorCXsweDAwMDBhNTE4LCAweDIxMDIwMjIwLCAweDIxMDIwMjIwLCAweDE1MDAwNDAyLCAweDE1MDAwNDAyfSwKKwl7MHgwMDAwYTUxYywgMHgyNzAyMDIyMywgMHgyNzAyMDIyMywgMHgxOTAwMDQwNCwgMHgxOTAwMDQwNH0sCisJezB4MDAwMGE1MjAsIDB4MmIwMjIyMjAsIDB4MmIwMjIyMjAsIDB4MWIwMDA2MDMsIDB4MWIwMDA2MDN9LAorCXsweDAwMDBhNTI0LCAweDJmMDIyMjIyLCAweDJmMDIyMjIyLCAweDFmMDAwYTAyLCAweDFmMDAwYTAyfSwKKwl7MHgwMDAwYTUyOCwgMHgzNDAyMjIyNSwgMHgzNDAyMjIyNSwgMHgyMzAwMGEwNCwgMHgyMzAwMGEwNH0sCisJezB4MDAwMGE1MmMsIDB4M2EwMjIyMmEsIDB4M2EwMjIyMmEsIDB4MjYwMDBhMjAsIDB4MjYwMDBhMjB9LAorCXsweDAwMDBhNTMwLCAweDNlMDIyMjJjLCAweDNlMDIyMjJjLCAweDJhMDAwZTIwLCAweDJhMDAwZTIwfSwKKwl7MHgwMDAwYTUzNCwgMHg0MjAyMjQyYSwgMHg0MjAyMjQyYSwgMHgyZTAwMGUyMiwgMHgyZTAwMGUyMn0sCisJezB4MDAwMGE1MzgsIDB4NDcwMjI0NGEsIDB4NDcwMjI0NGEsIDB4MzEwMDBlMjQsIDB4MzEwMDBlMjR9LAorCXsweDAwMDBhNTNjLCAweDRiMDIyNDRjLCAweDRiMDIyNDRjLCAweDM0MDAxNjQwLCAweDM0MDAxNjQwfSwKKwl7MHgwMDAwYTU0MCwgMHg0ZTAyMjQ2YywgMHg0ZTAyMjQ2YywgMHgzODAwMTY2MCwgMHgzODAwMTY2MH0sCisJezB4MDAwMGE1NDQsIDB4NTMwMjI2NmMsIDB4NTMwMjI2NmMsIDB4M2IwMDE4NjEsIDB4M2IwMDE4NjF9LAorCXsweDAwMDBhNTQ4LCAweDU3MDIyODZjLCAweDU3MDIyODZjLCAweDNlMDAxYTgxLCAweDNlMDAxYTgxfSwKKwl7MHgwMDAwYTU0YywgMHg1YzA0Mjg2YiwgMHg1YzA0Mjg2YiwgMHg0MjAwMWE4MywgMHg0MjAwMWE4M30sCisJezB4MDAwMGE1NTAsIDB4NjEwNDJhNmMsIDB4NjEwNDJhNmMsIDB4NDQwMDFjODQsIDB4NDQwMDFjODR9LAorCXsweDAwMDBhNTU0LCAweDY2MDYyYTZjLCAweDY2MDYyYTZjLCAweDQ4MDAxY2UzLCAweDQ4MDAxY2UzfSwKKwl7MHgwMDAwYTU1OCwgMHg2YjA2MmU2YywgMHg2YjA2MmU2YywgMHg0YzAwMWNlNSwgMHg0YzAwMWNlNX0sCisJezB4MDAwMGE1NWMsIDB4NzAwNjMwOGMsIDB4NzAwNjMwOGMsIDB4NTAwMDFjZTksIDB4NTAwMDFjZTl9LAorCXsweDAwMDBhNTYwLCAweDczMGEzMDhhLCAweDczMGEzMDhhLCAweDU0MDAxY2ViLCAweDU0MDAxY2VifSwKKwl7MHgwMDAwYTU2NCwgMHg3NzBhMzA4YywgMHg3NzBhMzA4YywgMHg1NjAwMWVlYywgMHg1NjAwMWVlY30sCisJezB4MDAwMGE1NjgsIDB4NzcwYTMwOGMsIDB4NzcwYTMwOGMsIDB4NTYwMDFlZWMsIDB4NTYwMDFlZWN9LAorCXsweDAwMDBhNTZjLCAweDc3MGEzMDhjLCAweDc3MGEzMDhjLCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKKwl7MHgwMDAwYTU3MCwgMHg3NzBhMzA4YywgMHg3NzBhMzA4YywgMHg1NjAwMWVlYywgMHg1NjAwMWVlY30sCisJezB4MDAwMGE1NzQsIDB4NzcwYTMwOGMsIDB4NzcwYTMwOGMsIDB4NTYwMDFlZWMsIDB4NTYwMDFlZWN9LAorCXsweDAwMDBhNTc4LCAweDc3MGEzMDhjLCAweDc3MGEzMDhjLCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKKwl7MHgwMDAwYTU3YywgMHg3NzBhMzA4YywgMHg3NzBhMzA4YywgMHg1NjAwMWVlYywgMHg1NjAwMWVlY30sCisJezB4MDAwMGE1ODAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDB9LAorCXsweDAwMDBhNTg0LCAweDA2ODAwMDAzLCAweDA2ODAwMDAzLCAweDA0ODAwMDAyLCAweDA0ODAwMDAyfSwKKwl7MHgwMDAwYTU4OCwgMHgwYTgwMDAyMCwgMHgwYTgwMDAyMCwgMHgwODgwMDAwNCwgMHgwODgwMDAwNH0sCisJezB4MDAwMGE1OGMsIDB4MTA4MDAwMjMsIDB4MTA4MDAwMjMsIDB4MGI4MDAyMDAsIDB4MGI4MDAyMDB9LAorCXsweDAwMDBhNTkwLCAweDE2ODAwMjIwLCAweDE2ODAwMjIwLCAweDBmODAwMjAyLCAweDBmODAwMjAyfSwKKwl7MHgwMDAwYTU5NCwgMHgxYzgwMDIyMywgMHgxYzgwMDIyMywgMHgxMTgwMDQwMCwgMHgxMTgwMDQwMH0sCisJezB4MDAwMGE1OTgsIDB4MjE4MjAyMjAsIDB4MjE4MjAyMjAsIDB4MTU4MDA0MDIsIDB4MTU4MDA0MDJ9LAorCXsweDAwMDBhNTljLCAweDI3ODIwMjIzLCAweDI3ODIwMjIzLCAweDE5ODAwNDA0LCAweDE5ODAwNDA0fSwKKwl7MHgwMDAwYTVhMCwgMHgyYjgyMjIyMCwgMHgyYjgyMjIyMCwgMHgxYjgwMDYwMywgMHgxYjgwMDYwM30sCisJezB4MDAwMGE1YTQsIDB4MmY4MjIyMjIsIDB4MmY4MjIyMjIsIDB4MWY4MDBhMDIsIDB4MWY4MDBhMDJ9LAorCXsweDAwMDBhNWE4LCAweDM0ODIyMjI1LCAweDM0ODIyMjI1LCAweDIzODAwYTA0LCAweDIzODAwYTA0fSwKKwl7MHgwMDAwYTVhYywgMHgzYTgyMjIyYSwgMHgzYTgyMjIyYSwgMHgyNjgwMGEyMCwgMHgyNjgwMGEyMH0sCisJezB4MDAwMGE1YjAsIDB4M2U4MjIyMmMsIDB4M2U4MjIyMmMsIDB4MmE4MDBlMjAsIDB4MmE4MDBlMjB9LAorCXsweDAwMDBhNWI0LCAweDQyODIyNDJhLCAweDQyODIyNDJhLCAweDJlODAwZTIyLCAweDJlODAwZTIyfSwKKwl7MHgwMDAwYTViOCwgMHg0NzgyMjQ0YSwgMHg0NzgyMjQ0YSwgMHgzMTgwMGUyNCwgMHgzMTgwMGUyNH0sCisJezB4MDAwMGE1YmMsIDB4NGI4MjI0NGMsIDB4NGI4MjI0NGMsIDB4MzQ4MDE2NDAsIDB4MzQ4MDE2NDB9LAorCXsweDAwMDBhNWMwLCAweDRlODIyNDZjLCAweDRlODIyNDZjLCAweDM4ODAxNjYwLCAweDM4ODAxNjYwfSwKKwl7MHgwMDAwYTVjNCwgMHg1MzgyMjY2YywgMHg1MzgyMjY2YywgMHgzYjgwMTg2MSwgMHgzYjgwMTg2MX0sCisJezB4MDAwMGE1YzgsIDB4NTc4MjI4NmMsIDB4NTc4MjI4NmMsIDB4M2U4MDFhODEsIDB4M2U4MDFhODF9LAorCXsweDAwMDBhNWNjLCAweDVjODQyODZiLCAweDVjODQyODZiLCAweDQyODAxYTgzLCAweDQyODAxYTgzfSwKKwl7MHgwMDAwYTVkMCwgMHg2MTg0MmE2YywgMHg2MTg0MmE2YywgMHg0NDgwMWM4NCwgMHg0NDgwMWM4NH0sCisJezB4MDAwMGE1ZDQsIDB4NjY4NjJhNmMsIDB4NjY4NjJhNmMsIDB4NDg4MDFjZTMsIDB4NDg4MDFjZTN9LAorCXsweDAwMDBhNWQ4LCAweDZiODYyZTZjLCAweDZiODYyZTZjLCAweDRjODAxY2U1LCAweDRjODAxY2U1fSwKKwl7MHgwMDAwYTVkYywgMHg3MDg2MzA4YywgMHg3MDg2MzA4YywgMHg1MDgwMWNlOSwgMHg1MDgwMWNlOX0sCisJezB4MDAwMGE1ZTAsIDB4NzM4YTMwOGEsIDB4NzM4YTMwOGEsIDB4NTQ4MDFjZWIsIDB4NTQ4MDFjZWJ9LAorCXsweDAwMDBhNWU0LCAweDc3OGEzMDhjLCAweDc3OGEzMDhjLCAweDU2ODAxZWVjLCAweDU2ODAxZWVjfSwKKwl7MHgwMDAwYTVlOCwgMHg3NzhhMzA4YywgMHg3NzhhMzA4YywgMHg1NjgwMWVlYywgMHg1NjgwMWVlY30sCisJezB4MDAwMGE1ZWMsIDB4Nzc4YTMwOGMsIDB4Nzc4YTMwOGMsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAorCXsweDAwMDBhNWYwLCAweDc3OGEzMDhjLCAweDc3OGEzMDhjLCAweDU2ODAxZWVjLCAweDU2ODAxZWVjfSwKKwl7MHgwMDAwYTVmNCwgMHg3NzhhMzA4YywgMHg3NzhhMzA4YywgMHg1NjgwMWVlYywgMHg1NjgwMWVlY30sCisJezB4MDAwMGE1ZjgsIDB4Nzc4YTMwOGMsIDB4Nzc4YTMwOGMsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAorCXsweDAwMDBhNWZjLCAweDc3OGEzMDhjLCAweDc3OGEzMDhjLCAweDU2ODAxZWVjLCAweDU2ODAxZWVjfSwKKwl7MHgwMDAxNjA0NCwgMHgwNTZkYjJkYiwgMHgwNTZkYjJkYiwgMHgwM2I2ZDJlNCwgMHgwM2I2ZDJlNH0sCisJezB4MDAwMTYwNDgsIDB4MjQ5MjcyNjYsIDB4MjQ5MjcyNjYsIDB4OGU0ODMyNjYsIDB4OGU0ODMyNjZ9LAorCXsweDAwMDE2NDQ0LCAweDA1NmRiMmRiLCAweDA1NmRiMmRiLCAweDAzYjZkMmU0LCAweDAzYjZkMmU0fSwKKwl7MHgwMDAxNjQ0OCwgMHgyNDkyNzI2NiwgMHgyNDkyNzI2NiwgMHg4ZTQ4MjI2NiwgMHg4ZTQ4MjI2Nn0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIGFyOTM0MF8xcDBfbWFjX2NvcmVbXVsyXSA9IHsKKwkvKiAgICBBZGRyICAgICAgICBhbGxtb2RlcyAgICAgICAgKi8KKwl7MHgwMDAwMDAwOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDAwMzAsIDB4MDAwMjAwODV9LAorCXsweDAwMDAwMDM0LCAweDAwMDAwMDA1fSwKKwl7MHgwMDAwMDA0MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDAwNDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAwMDQ4LCAweDAwMDAwMDA4fSwKKwl7MHgwMDAwMDA0YywgMHgwMDAwMDAxMH0sCisJezB4MDAwMDAwNTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMDQwLCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA0NCwgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNDgsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDRjLCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA1MCwgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNTQsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDU4LCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA1YywgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNjAsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDY0LCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTBmMCwgMHgwMDAwMDEwMH0sCisJezB4MDAwMDEyNzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMmIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTJmMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE0M2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNDdjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwMDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDA4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODAwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwMTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODAzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDQwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODA0NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwNDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDRjLCAweGZmZmZmZmZmfSwKKwl7MHgwMDAwODA1NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwNTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDVjLCAweDAwMGZjNzhmfSwKKwl7MHgwMDAwODA2MCwgMHgwMDAwMDAwZn0sCisJezB4MDAwMDgwNjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDcwLCAweDAwMDAwMzEwfSwKKwl7MHgwMDAwODA3NCwgMHgwMDAwMDAyMH0sCisJezB4MDAwMDgwNzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDljLCAweDAwMDAwMDBmfSwKKwl7MHgwMDAwODBhMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwYTQsIDB4MDJmZjAwMDB9LAorCXsweDAwMDA4MGE4LCAweDBlMDcwNjA1fSwKKwl7MHgwMDAwODBhYywgMHgwMDAwMDAwZH0sCisJezB4MDAwMDgwYjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MGI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODBiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MGMwLCAweDJhODAwMDAwfSwKKwl7MHgwMDAwODBjNCwgMHgwNjkwMDE2OH0sCisJezB4MDAwMDgwYzgsIDB4MTM4ODFjMjB9LAorCXsweDAwMDA4MGNjLCAweDAxZjQwMDAwfSwKKwl7MHgwMDAwODBkMCwgMHgwMDI1MjUwMH0sCisJezB4MDAwMDgwZDQsIDB4MDBhMDAwMDB9LAorCXsweDAwMDA4MGQ4LCAweDAwNDAwMDAwfSwKKwl7MHgwMDAwODBkYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwZTAsIDB4ZmZmZmZmZmZ9LAorCXsweDAwMDA4MGU0LCAweDAwMDBmZmZmfSwKKwl7MHgwMDAwODBlOCwgMHgzZjNmM2YzZn0sCisJezB4MDAwMDgwZWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MGYwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODBmNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwZmMsIDB4MDAwMjAwMDB9LAorCXsweDAwMDA4MTAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODEwOCwgMHgwMDAwMDA1Mn0sCisJezB4MDAwMDgxMGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODExNCwgMHgwMDAwMDdmZn0sCisJezB4MDAwMDgxMTgsIDB4MDAwMDAwYWF9LAorCXsweDAwMDA4MTFjLCAweDAwMDAzMjEwfSwKKwl7MHgwMDAwODEyNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxMjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODEzMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxMzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODEzYywgMHgwMDAwZmZmZn0sCisJezB4MDAwMDgxNDQsIDB4ZmZmZmZmZmZ9LAorCXsweDAwMDA4MTY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODE2YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxNzAsIDB4MTg0ODYyMDB9LAorCXsweDAwMDA4MTc0LCAweDMzMzMyMjEwfSwKKwl7MHgwMDAwODE3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxN2MsIDB4MDAwMjAwMDB9LAorCXsweDAwMDA4MWMwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODFjNCwgMHgzMzMzMjIxMH0sCisJezB4MDAwMDgxYzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MWNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODFkNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxZWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MWYwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODFmNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MWZjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI0MCwgMHgwMDEwMDAwMH0sCisJezB4MDAwMDgyNDQsIDB4MDAxMGY0MjR9LAorCXsweDAwMDA4MjQ4LCAweDAwMDAwODAwfSwKKwl7MHgwMDAwODI0YywgMHgwMDAxZTg0OH0sCisJezB4MDAwMDgyNTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjU0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI1OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyNWMsIDB4NDAwMDAwMDB9LAorCXsweDAwMDA4MjYwLCAweDAwMDgwOTIyfSwKKwl7MHgwMDAwODI2NCwgMHg5ZDQwMDAxMH0sCisJezB4MDAwMDgyNjgsIDB4ZmZmZmZmZmZ9LAorCXsweDAwMDA4MjZjLCAweDAwMDBmZmZmfSwKKwl7MHgwMDAwODI3MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyNzQsIDB4NDAwMDAwMDB9LAorCXsweDAwMDA4Mjc4LCAweDAwM2U0MTgwfSwKKwl7MHgwMDAwODI3YywgMHgwMDAwMDAwNH0sCisJezB4MDAwMDgyODQsIDB4MDAwMDAwMmN9LAorCXsweDAwMDA4Mjg4LCAweDAwMDAwMDJjfSwKKwl7MHgwMDAwODI4YywgMHgwMDAwMDBmZn0sCisJezB4MDAwMDgyOTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4Mjk4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzMDAsIDB4MDAwMDAxNDB9LAorCXsweDAwMDA4MzE0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODMxYywgMHgwMDAwMDEwZH0sCisJezB4MDAwMDgzMjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzJjLCAweDAwMDAwMDA3fSwKKwl7MHgwMDAwODMzMCwgMHgwMDAwMDMwMn0sCisJezB4MDAwMDgzMzQsIDB4MDAwMDA3MDB9LAorCXsweDAwMDA4MzM4LCAweDAwZmYwMDAwfSwKKwl7MHgwMDAwODMzYywgMHgwMjQwMDAwMH0sCisJezB4MDAwMDgzNDAsIDB4MDAwMTA3ZmZ9LAorCXsweDAwMDA4MzQ0LCAweGFhNDgxMDVifSwKKwl7MHgwMDAwODM0OCwgMHgwMDhmMDAwMH0sCisJezB4MDAwMDgzNWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzYwLCAweGZmZmZmZmZmfSwKKwl7MHgwMDAwODM2NCwgMHhmZmZmZmZmZn0sCisJezB4MDAwMDgzNjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzcwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODM3NCwgMHgwMDAwMDBmZn0sCisJezB4MDAwMDgzNzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzdjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODM4MCwgMHhmZmZmZmZmZn0sCisJezB4MDAwMDgzODQsIDB4ZmZmZmZmZmZ9LAorCXsweDAwMDA4MzkwLCAweGZmZmZmZmZmfSwKKwl7MHgwMDAwODM5NCwgMHhmZmZmZmZmZn0sCisJezB4MDAwMDgzOTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODNhMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzYTQsIDB4MDAwMGZhMTR9LAorCXsweDAwMDA4M2E4LCAweDAwMGYwYzAwfSwKKwl7MHgwMDAwODNhYywgMHgzMzMzMjIxMH0sCisJezB4MDAwMDgzYjAsIDB4MzMzMzIyMTB9LAorCXsweDAwMDA4M2I0LCAweDMzMzMyMjEwfSwKKwl7MHgwMDAwODNiOCwgMHgzMzMzMjIxMH0sCisJezB4MDAwMDgzYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4M2MwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODNjNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzYzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4M2NjLCAweDAwMDAwMjAwfSwKKwl7MHgwMDAwODNkMCwgMHgwMDAzMDFmZn0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIGFyOTM0MENvbW1vbl93b194bG5hX3J4X2dhaW5fdGFibGVfMXAwW11bMl0gPSB7CisJLyogICAgQWRkciAgICAgICAgYWxsbW9kZXMgICAgICAgICovCisJezB4MDAwMGEwMDAsIDB4MDAwMTAwMDB9LAorCXsweDAwMDBhMDA0LCAweDAwMDMwMDAyfSwKKwl7MHgwMDAwYTAwOCwgMHgwMDA1MDAwNH0sCisJezB4MDAwMGEwMGMsIDB4MDA4MTAwODB9LAorCXsweDAwMDBhMDEwLCAweDAwODMwMDgyfSwKKwl7MHgwMDAwYTAxNCwgMHgwMTgxMDE4MH0sCisJezB4MDAwMGEwMTgsIDB4MDE4MzAxODJ9LAorCXsweDAwMDBhMDFjLCAweDAxODUwMTg0fSwKKwl7MHgwMDAwYTAyMCwgMHgwMTg5MDE4OH0sCisJezB4MDAwMGEwMjQsIDB4MDE4YjAxOGF9LAorCXsweDAwMDBhMDI4LCAweDAxOGQwMThjfSwKKwl7MHgwMDAwYTAyYywgMHgwMzgyMDE5MH0sCisJezB4MDAwMGEwMzAsIDB4MDM4NDAzODN9LAorCXsweDAwMDBhMDM0LCAweDAzODgwMzg1fSwKKwl7MHgwMDAwYTAzOCwgMHgwMzhhMDM4OX0sCisJezB4MDAwMGEwM2MsIDB4MDM4YzAzOGJ9LAorCXsweDAwMDBhMDQwLCAweDAzOTAwMzhkfSwKKwl7MHgwMDAwYTA0NCwgMHgwMzkyMDM5MX0sCisJezB4MDAwMGEwNDgsIDB4MDM5NDAzOTN9LAorCXsweDAwMDBhMDRjLCAweDAzOTYwMzk1fSwKKwl7MHgwMDAwYTA1MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDU4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA1YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDY0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA2OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDcwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA3NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDdjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA4MCwgMHgyOTI5MjkyOX0sCisJezB4MDAwMGEwODQsIDB4MjkyOTI5Mjl9LAorCXsweDAwMDBhMDg4LCAweDI5MjkyOTI5fSwKKwl7MHgwMDAwYTA4YywgMHgyOTI5MjkyOX0sCisJezB4MDAwMGEwOTAsIDB4MjIyOTI5Mjl9LAorCXsweDAwMDBhMDk0LCAweDFkMWQyMjIyfSwKKwl7MHgwMDAwYTA5OCwgMHgwYzExMTExN30sCisJezB4MDAwMGEwOWMsIDB4MDAwMzAzMDN9LAorCXsweDAwMDBhMGEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTBhNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwYTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMGFjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTBiMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwYjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMGI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTBiYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwYzAsIDB4MDAxZjAwMDB9LAorCXsweDAwMDBhMGM0LCAweDAxMDAwMTAxfSwKKwl7MHgwMDAwYTBjOCwgMHgwMTFlMDExZn0sCisJezB4MDAwMGEwY2MsIDB4MDExYzAxMWR9LAorCXsweDAwMDBhMGQwLCAweDAyMDMwMjA0fSwKKwl7MHgwMDAwYTBkNCwgMHgwMjAxMDIwMn0sCisJezB4MDAwMGEwZDgsIDB4MDIxZjAyMDB9LAorCXsweDAwMDBhMGRjLCAweDAzMDIwMjFlfSwKKwl7MHgwMDAwYTBlMCwgMHgwMzAwMDMwMX0sCisJezB4MDAwMGEwZTQsIDB4MDMxZTAzMWZ9LAorCXsweDAwMDBhMGU4LCAweDA0MDIwMzFkfSwKKwl7MHgwMDAwYTBlYywgMHgwNDAwMDQwMX0sCisJezB4MDAwMGEwZjAsIDB4MDQxZTA0MWZ9LAorCXsweDAwMDBhMGY0LCAweDA1MDIwNDFkfSwKKwl7MHgwMDAwYTBmOCwgMHgwNTAwMDUwMX0sCisJezB4MDAwMGEwZmMsIDB4MDUxZTA1MWZ9LAorCXsweDAwMDBhMTAwLCAweDA2MDEwNjAyfSwKKwl7MHgwMDAwYTEwNCwgMHgwNjFmMDYwMH0sCisJezB4MDAwMGExMDgsIDB4MDYxZDA2MWV9LAorCXsweDAwMDBhMTBjLCAweDA3MDIwNzAzfSwKKwl7MHgwMDAwYTExMCwgMHgwNzAwMDcwMX0sCisJezB4MDAwMGExMTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTE4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTExYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTEyOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTMwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTEzNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTE0MCwgMHgwMDFmMDAwMH0sCisJezB4MDAwMGExNDQsIDB4MDEwMDAxMDF9LAorCXsweDAwMDBhMTQ4LCAweDAxMWUwMTFmfSwKKwl7MHgwMDAwYTE0YywgMHgwMTFjMDExZH0sCisJezB4MDAwMGExNTAsIDB4MDIwMzAyMDR9LAorCXsweDAwMDBhMTU0LCAweDAyMDEwMjAyfSwKKwl7MHgwMDAwYTE1OCwgMHgwMjFmMDIwMH0sCisJezB4MDAwMGExNWMsIDB4MDMwMjAyMWV9LAorCXsweDAwMDBhMTYwLCAweDAzMDAwMzAxfSwKKwl7MHgwMDAwYTE2NCwgMHgwMzFlMDMxZn0sCisJezB4MDAwMGExNjgsIDB4MDQwMjAzMWR9LAorCXsweDAwMDBhMTZjLCAweDA0MDAwNDAxfSwKKwl7MHgwMDAwYTE3MCwgMHgwNDFlMDQxZn0sCisJezB4MDAwMGExNzQsIDB4MDUwMjA0MWR9LAorCXsweDAwMDBhMTc4LCAweDA1MDAwNTAxfSwKKwl7MHgwMDAwYTE3YywgMHgwNTFlMDUxZn0sCisJezB4MDAwMGExODAsIDB4MDYwMTA2MDJ9LAorCXsweDAwMDBhMTg0LCAweDA2MWYwNjAwfSwKKwl7MHgwMDAwYTE4OCwgMHgwNjFkMDYxZX0sCisJezB4MDAwMGExOGMsIDB4MDcwMjA3MDN9LAorCXsweDAwMDBhMTkwLCAweDA3MDAwNzAxfSwKKwl7MHgwMDAwYTE5NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExOTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFhMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWE4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFhYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWMwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFjNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFkMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWQ4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFkYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWU0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFlOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWYwLCAweDAwMDAwMzk2fSwKKwl7MHgwMDAwYTFmNCwgMHgwMDAwMDM5Nn0sCisJezB4MDAwMGExZjgsIDB4MDAwMDAzOTZ9LAorCXsweDAwMDBhMWZjLCAweDAwMDAwMTk2fSwKKwl7MHgwMDAwYjAwMCwgMHgwMDAxMDAwMH0sCisJezB4MDAwMGIwMDQsIDB4MDAwMzAwMDJ9LAorCXsweDAwMDBiMDA4LCAweDAwMDUwMDA0fSwKKwl7MHgwMDAwYjAwYywgMHgwMDgxMDA4MH0sCisJezB4MDAwMGIwMTAsIDB4MDA4MzAwODJ9LAorCXsweDAwMDBiMDE0LCAweDAxODEwMTgwfSwKKwl7MHgwMDAwYjAxOCwgMHgwMTgzMDE4Mn0sCisJezB4MDAwMGIwMWMsIDB4MDE4NTAxODR9LAorCXsweDAwMDBiMDIwLCAweDAyODEwMjgwfSwKKwl7MHgwMDAwYjAyNCwgMHgwMjgzMDI4Mn0sCisJezB4MDAwMGIwMjgsIDB4MDI4NTAyODR9LAorCXsweDAwMDBiMDJjLCAweDAyODkwMjg4fSwKKwl7MHgwMDAwYjAzMCwgMHgwMjhiMDI4YX0sCisJezB4MDAwMGIwMzQsIDB4MDM4ODAyOGN9LAorCXsweDAwMDBiMDM4LCAweDAzOGEwMzg5fSwKKwl7MHgwMDAwYjAzYywgMHgwMzhjMDM4Yn0sCisJezB4MDAwMGIwNDAsIDB4MDM5MDAzOGR9LAorCXsweDAwMDBiMDQ0LCAweDAzOTIwMzkxfSwKKwl7MHgwMDAwYjA0OCwgMHgwMzk0MDM5M30sCisJezB4MDAwMGIwNGMsIDB4MDM5NjAzOTV9LAorCXsweDAwMDBiMDUwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA1NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwNTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDVjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA2MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwNjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA2YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwNzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDc0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwN2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDgwLCAweDMyMzIzMjMyfSwKKwl7MHgwMDAwYjA4NCwgMHgyZjJmMzIzMn0sCisJezB4MDAwMGIwODgsIDB4MjMyODJhMmR9LAorCXsweDAwMDBiMDhjLCAweDFjMWUyMTIzfSwKKwl7MHgwMDAwYjA5MCwgMHgxNDE3MTkxOX0sCisJezB4MDAwMGIwOTQsIDB4MGUwZTEyMTR9LAorCXsweDAwMDBiMDk4LCAweDAzMDUwNzA3fSwKKwl7MHgwMDAwYjA5YywgMHgwMDAzMDMwM30sCisJezB4MDAwMGIwYTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMGE0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjBhOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwYWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMGIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjBiNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwYjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMGJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjBjMCwgMHgwMDNmMDAyMH0sCisJezB4MDAwMGIwYzQsIDB4MDA0MDAwNDF9LAorCXsweDAwMDBiMGM4LCAweDAxNDAwMDVmfSwKKwl7MHgwMDAwYjBjYywgMHgwMTYwMDE1Zn0sCisJezB4MDAwMGIwZDAsIDB4MDE3ZTAxN2Z9LAorCXsweDAwMDBiMGQ0LCAweDAyNDEwMjQyfSwKKwl7MHgwMDAwYjBkOCwgMHgwMjVmMDI0MH0sCisJezB4MDAwMGIwZGMsIDB4MDI3ZjAyNjB9LAorCXsweDAwMDBiMGUwLCAweDAzNDEwMjdlfSwKKwl7MHgwMDAwYjBlNCwgMHgwMzVmMDM0MH0sCisJezB4MDAwMGIwZTgsIDB4MDM3ZjAzNjB9LAorCXsweDAwMDBiMGVjLCAweDA0NDAwNDQxfSwKKwl7MHgwMDAwYjBmMCwgMHgwNDYwMDQ1Zn0sCisJezB4MDAwMGIwZjQsIDB4MDU0MTA0N2Z9LAorCXsweDAwMDBiMGY4LCAweDA1NWYwNTQwfSwKKwl7MHgwMDAwYjBmYywgMHgwNTdmMDU2MH0sCisJezB4MDAwMGIxMDAsIDB4MDY0MDA2NDF9LAorCXsweDAwMDBiMTA0LCAweDA2NjAwNjVmfSwKKwl7MHgwMDAwYjEwOCwgMHgwNjdlMDY3Zn0sCisJezB4MDAwMGIxMGMsIDB4MDc0MTA3NDJ9LAorCXsweDAwMDBiMTEwLCAweDA3NWYwNzQwfSwKKwl7MHgwMDAwYjExNCwgMHgwNzdmMDc2MH0sCisJezB4MDAwMGIxMTgsIDB4MDc4MDA3ODF9LAorCXsweDAwMDBiMTFjLCAweDA3YTAwNzlmfSwKKwl7MHgwMDAwYjEyMCwgMHgwN2MxMDdiZn0sCisJezB4MDAwMGIxMjQsIDB4MDAwMDA3YzB9LAorCXsweDAwMDBiMTI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjEyYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxMzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMTM0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjEzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMTQwLCAweDAwM2YwMDIwfSwKKwl7MHgwMDAwYjE0NCwgMHgwMDQwMDA0MX0sCisJezB4MDAwMGIxNDgsIDB4MDE0MDAwNWZ9LAorCXsweDAwMDBiMTRjLCAweDAxNjAwMTVmfSwKKwl7MHgwMDAwYjE1MCwgMHgwMTdlMDE3Zn0sCisJezB4MDAwMGIxNTQsIDB4MDI0MTAyNDJ9LAorCXsweDAwMDBiMTU4LCAweDAyNWYwMjQwfSwKKwl7MHgwMDAwYjE1YywgMHgwMjdmMDI2MH0sCisJezB4MDAwMGIxNjAsIDB4MDM0MTAyN2V9LAorCXsweDAwMDBiMTY0LCAweDAzNWYwMzQwfSwKKwl7MHgwMDAwYjE2OCwgMHgwMzdmMDM2MH0sCisJezB4MDAwMGIxNmMsIDB4MDQ0MDA0NDF9LAorCXsweDAwMDBiMTcwLCAweDA0NjAwNDVmfSwKKwl7MHgwMDAwYjE3NCwgMHgwNTQxMDQ3Zn0sCisJezB4MDAwMGIxNzgsIDB4MDU1ZjA1NDB9LAorCXsweDAwMDBiMTdjLCAweDA1N2YwNTYwfSwKKwl7MHgwMDAwYjE4MCwgMHgwNjQwMDY0MX0sCisJezB4MDAwMGIxODQsIDB4MDY2MDA2NWZ9LAorCXsweDAwMDBiMTg4LCAweDA2N2UwNjdmfSwKKwl7MHgwMDAwYjE4YywgMHgwNzQxMDc0Mn0sCisJezB4MDAwMGIxOTAsIDB4MDc1ZjA3NDB9LAorCXsweDAwMDBiMTk0LCAweDA3N2YwNzYwfSwKKwl7MHgwMDAwYjE5OCwgMHgwNzgwMDc4MX0sCisJezB4MDAwMGIxOWMsIDB4MDdhMDA3OWZ9LAorCXsweDAwMDBiMWEwLCAweDA3YzEwN2JmfSwKKwl7MHgwMDAwYjFhNCwgMHgwMDAwMDdjMH0sCisJezB4MDAwMGIxYTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWFjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFiMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxYjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFiYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxYzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWM0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFjOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxY2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWQwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFkNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxZDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWRjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFlMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxZTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWU4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFlYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxZjAsIDB4MDAwMDAzOTZ9LAorCXsweDAwMDBiMWY0LCAweDAwMDAwMzk2fSwKKwl7MHgwMDAwYjFmOCwgMHgwMDAwMDM5Nn0sCisJezB4MDAwMGIxZmMsIDB4MDAwMDAxOTZ9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhcjkzNDBfMXAwX3NvY19wcmVhbWJsZVtdWzJdID0geworCS8qICAgIEFkZHIgICAgICAgIGFsbG1vZGVzICAgICAgICAqLworCXsweDAwMDA0MGE0LCAweDAwYTBjMWM5fSwKKwl7MHgwMDAwNzAwOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDcwMjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA3MDM0LCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwNzAzOCwgMHgwMDAwMDRjMn0sCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjk0ODVfaW5pdHZhbHMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjk0ODVfaW5pdHZhbHMuaAppbmRleCA3MWNjMGEzLi5mYmRkZTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5NDg1X2luaXR2YWxzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTQ4NV9pbml0dmFscy5oCkBAIC0xNyw5MzEgKzE3LDYgQEAKICNpZm5kZWYgSU5JVFZBTFNfOTQ4NV9ICiAjZGVmaW5lIElOSVRWQUxTXzk0ODVfSAogCi1zdGF0aWMgY29uc3QgdTMyIGFyOTQ4NUNvbW1vbl8xXzBbXVsyXSA9IHsKLQkvKiAgIEFkZHIgICAgIGFsbG1vZGVzICovCi0JezB4MDAwMDcwMTAsIDB4MDAwMDAwMjJ9LAotCXsweDAwMDA3MDIwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwNzAzNCwgMHgwMDAwMDAwMn0sCi0JezB4MDAwMDcwMzgsIDB4MDAwMDA0YzJ9LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBhcjk0ODVfMV8wX21hY19wb3N0YW1ibGVbXVs1XSA9IHsKLQkvKiBBZGRyICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgICAyR19IVDIwICAgICovCi0JezB4MDAwMDEwMzAsIDB4MDAwMDAyMzAsIDB4MDAwMDA0NjAsIDB4MDAwMDAyYzAsIDB4MDAwMDAxNjB9LAotCXsweDAwMDAxMDcwLCAweDAwMDAwMTY4LCAweDAwMDAwMmQwLCAweDAwMDAwMzE4LCAweDAwMDAwMThjfSwKLQl7MHgwMDAwMTBiMCwgMHgwMDAwMGU2MCwgMHgwMDAwMWNjMCwgMHgwMDAwN2M3MCwgMHgwMDAwM2UzOH0sCi0JezB4MDAwMDgwMTQsIDB4MDNlODAzZTgsIDB4MDdkMDA3ZDAsIDB4MTA4MDE2MDAsIDB4MDg0MDBiMDB9LAotCXsweDAwMDA4MDFjLCAweDEyOGQ4MDI3LCAweDEyOGQ4MDRmLCAweDEyZTAwMDU3LCAweDEyZTAwMDJifSwKLQl7MHgwMDAwODEyMCwgMHgwOGYwNDgwMCwgMHgwOGYwNDgwMCwgMHgwOGYwNDgxMCwgMHgwOGYwNDgxMH0sCi0JezB4MDAwMDgxZDAsIDB4MDAwMDMyMTAsIDB4MDAwMDMyMTAsIDB4MDAwMDMyMGEsIDB4MDAwMDMyMGF9LAotCXsweDAwMDA4MzE4LCAweDAwMDAzZTgwLCAweDAwMDA3ZDAwLCAweDAwMDA2ODgwLCAweDAwMDAzNDQwfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgYXI5NDg1XzFfMF9wY2llX3BoeV9wbGxfb25fY2xrcmVxX2Rpc2FibGVfTDFbXVsyXSA9IHsKLQkvKiAgIEFkZHIgICAgIGFsbG1vZGVzICovCi0JezB4MDAwMThjMDAsIDB4MTAyMTJlNWV9LAotCXsweDAwMDE4YzA0LCAweDAwMDgwMWQ4fSwKLQl7MHgwMDAxOGMwOCwgMHgwMDAwNTgwY30sCi19OwotCi1zdGF0aWMgY29uc3QgdTMyIGFyOTQ4NUNvbW1vbl93b194bG5hX3J4X2dhaW5fMV8wW11bMl0gPSB7Ci0JLyogICBBZGRyICAgICBhbGxtb2RlcyAqLwotCXsweDAwMDBhMDAwLCAweDAwMDEwMDAwfSwKLQl7MHgwMDAwYTAwNCwgMHgwMDAzMDAwMn0sCi0JezB4MDAwMGEwMDgsIDB4MDAwNTAwMDR9LAotCXsweDAwMDBhMDBjLCAweDAwODEwMDgwfSwKLQl7MHgwMDAwYTAxMCwgMHgwMTgwMDA4Mn0sCi0JezB4MDAwMGEwMTQsIDB4MDE4MjAxODF9LAotCXsweDAwMDBhMDE4LCAweDAxODQwMTgzfSwKLQl7MHgwMDAwYTAxYywgMHgwMTg4MDE4NX0sCi0JezB4MDAwMGEwMjAsIDB4MDE4YTAxODl9LAotCXsweDAwMDBhMDI0LCAweDAyODUwMjg0fSwKLQl7MHgwMDAwYTAyOCwgMHgwMjg5MDI4OH0sCi0JezB4MDAwMGEwMmMsIDB4MDM4NTAzODR9LAotCXsweDAwMDBhMDMwLCAweDAzODkwMzg4fSwKLQl7MHgwMDAwYTAzNCwgMHgwMzhiMDM4YX0sCi0JezB4MDAwMGEwMzgsIDB4MDM4ZDAzOGN9LAotCXsweDAwMDBhMDNjLCAweDAzOTEwMzkwfSwKLQl7MHgwMDAwYTA0MCwgMHgwMzkzMDM5Mn0sCi0JezB4MDAwMGEwNDQsIDB4MDM5NTAzOTR9LAotCXsweDAwMDBhMDQ4LCAweDAwMDAwMzk2fSwKLQl7MHgwMDAwYTA0YywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwNTAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMDU0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTA1OCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwNWMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMDYwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTA2NCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwNjgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMDZjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTA3MCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwNzQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMDc4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTA3YywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwODAsIDB4MjgyODI4Mjh9LAotCXsweDAwMDBhMDg0LCAweDI4MjgyODI4fSwKLQl7MHgwMDAwYTA4OCwgMHgyODI4MjgyOH0sCi0JezB4MDAwMGEwOGMsIDB4MjgyODI4Mjh9LAotCXsweDAwMDBhMDkwLCAweDI4MjgyODI4fSwKLQl7MHgwMDAwYTA5NCwgMHgyMTIxMjEyOH0sCi0JezB4MDAwMGEwOTgsIDB4MTcxYzFjMWN9LAotCXsweDAwMDBhMDljLCAweDAyMDIwMjEyfSwKLQl7MHgwMDAwYTBhMCwgMHgwMDAwMDIwMn0sCi0JezB4MDAwMGEwYTQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMGE4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTBhYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwYjAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMGI0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTBiOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwYmMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMGMwLCAweDAwMWYwMDAwfSwKLQl7MHgwMDAwYTBjNCwgMHgxMTFmMTEwMH0sCi0JezB4MDAwMGEwYzgsIDB4MTExZDExMWV9LAotCXsweDAwMDBhMGNjLCAweDExMWIxMTFjfSwKLQl7MHgwMDAwYTBkMCwgMHgyMjAzMjIwNH0sCi0JezB4MDAwMGEwZDQsIDB4MjIwMTIyMDJ9LAotCXsweDAwMDBhMGQ4LCAweDIyMWYyMjAwfSwKLQl7MHgwMDAwYTBkYywgMHgyMjFkMjIxZX0sCi0JezB4MDAwMGEwZTAsIDB4MzMwMTMzMDJ9LAotCXsweDAwMDBhMGU0LCAweDMzMWYzMzAwfSwKLQl7MHgwMDAwYTBlOCwgMHg0NDAyMzMxZX0sCi0JezB4MDAwMGEwZWMsIDB4NDQwMDQ0MDF9LAotCXsweDAwMDBhMGYwLCAweDQ0MWU0NDFmfSwKLQl7MHgwMDAwYTBmNCwgMHg1NTAxNTUwMn0sCi0JezB4MDAwMGEwZjgsIDB4NTUxZjU1MDB9LAotCXsweDAwMDBhMGZjLCAweDY2MDI1NTFlfSwKLQl7MHgwMDAwYTEwMCwgMHg2NjAwNjYwMX0sCi0JezB4MDAwMGExMDQsIDB4NjYxZTY2MWZ9LAotCXsweDAwMDBhMTA4LCAweDc3MDM2NjFkfSwKLQl7MHgwMDAwYTEwYywgMHg3NzAxNzcwMn0sCi0JezB4MDAwMGExMTAsIDB4MDAwMDc3MDB9LAotCXsweDAwMDBhMTE0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTExOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExMWMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMTIwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTEyNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExMjgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMTJjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTEzMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExMzQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMTM4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTEzYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExNDAsIDB4MDAxZjAwMDB9LAotCXsweDAwMDBhMTQ0LCAweDExMWYxMTAwfSwKLQl7MHgwMDAwYTE0OCwgMHgxMTFkMTExZX0sCi0JezB4MDAwMGExNGMsIDB4MTExYjExMWN9LAotCXsweDAwMDBhMTUwLCAweDIyMDMyMjA0fSwKLQl7MHgwMDAwYTE1NCwgMHgyMjAxMjIwMn0sCi0JezB4MDAwMGExNTgsIDB4MjIxZjIyMDB9LAotCXsweDAwMDBhMTVjLCAweDIyMWQyMjFlfSwKLQl7MHgwMDAwYTE2MCwgMHgzMzAxMzMwMn0sCi0JezB4MDAwMGExNjQsIDB4MzMxZjMzMDB9LAotCXsweDAwMDBhMTY4LCAweDQ0MDIzMzFlfSwKLQl7MHgwMDAwYTE2YywgMHg0NDAwNDQwMX0sCi0JezB4MDAwMGExNzAsIDB4NDQxZTQ0MWZ9LAotCXsweDAwMDBhMTc0LCAweDU1MDE1NTAyfSwKLQl7MHgwMDAwYTE3OCwgMHg1NTFmNTUwMH0sCi0JezB4MDAwMGExN2MsIDB4NjYwMjU1MWV9LAotCXsweDAwMDBhMTgwLCAweDY2MDA2NjAxfSwKLQl7MHgwMDAwYTE4NCwgMHg2NjFlNjYxZn0sCi0JezB4MDAwMGExODgsIDB4NzcwMzY2MWR9LAotCXsweDAwMDBhMThjLCAweDc3MDE3NzAyfSwKLQl7MHgwMDAwYTE5MCwgMHgwMDAwNzcwMH0sCi0JezB4MDAwMGExOTQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMTk4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTE5YywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExYTAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWE0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFhOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExYWMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWIwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFiNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExYjgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWJjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFjMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExYzQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWM4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFjYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExZDAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWQ0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFkOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExZGMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWUwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFlNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExZTgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWVjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFmMCwgMHgwMDAwMDM5Nn0sCi0JezB4MDAwMGExZjQsIDB4MDAwMDAzOTZ9LAotCXsweDAwMDBhMWY4LCAweDAwMDAwMzk2fSwKLQl7MHgwMDAwYTFmYywgMHgwMDAwMDI5Nn0sCi19OwotCi1zdGF0aWMgY29uc3QgdTMyIGFyOTQ4NU1vZGVzX2hpZ2hfcG93ZXJfdHhfZ2Fpbl8xXzBbXVs1XSA9IHsKLQkvKiAgIEFkZHIgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgICAyR19IVDIwICovCi0JezB4MDAwMGE0MTAsIDB4MDAwMDUwZDksIDB4MDAwMDUwZDksIDB4MDAwMDUwZDgsIDB4MDAwMDUwZDh9LAotCXsweDAwMDBhNTAwLCAweDAwMDIyMjAwLCAweDAwMDIyMjAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTUwNCwgMHgwNTA2MjAwMiwgMHgwNTA2MjAwMiwgMHgwNDAwMDAwMiwgMHgwNDAwMDAwMn0sCi0JezB4MDAwMGE1MDgsIDB4MGMwMDJlMDAsIDB4MGMwMDJlMDAsIDB4MDgwMDAwMDQsIDB4MDgwMDAwMDR9LAotCXsweDAwMDBhNTBjLCAweDExMDYyMjAyLCAweDExMDYyMjAyLCAweDBkMDAwMjAwLCAweDBkMDAwMjAwfSwKLQl7MHgwMDAwYTUxMCwgMHgxNzAyMmUwMCwgMHgxNzAyMmUwMCwgMHgxMTAwMDIwMiwgMHgxMTAwMDIwMn0sCi0JezB4MDAwMGE1MTQsIDB4MWQwMDBlYzIsIDB4MWQwMDBlYzIsIDB4MTUwMDA0MDAsIDB4MTUwMDA0MDB9LAotCXsweDAwMDBhNTE4LCAweDI1MDIwZWMwLCAweDI1MDIwZWMwLCAweDE5MDAwNDAyLCAweDE5MDAwNDAyfSwKLQl7MHgwMDAwYTUxYywgMHgyYjAyMGVjMywgMHgyYjAyMGVjMywgMHgxZDAwMDQwNCwgMHgxZDAwMDQwNH0sCi0JezB4MDAwMGE1MjAsIDB4MmYwMDFmMDQsIDB4MmYwMDFmMDQsIDB4MjEwMDA2MDMsIDB4MjEwMDA2MDN9LAotCXsweDAwMDBhNTI0LCAweDM1MDAxZmM0LCAweDM1MDAxZmM0LCAweDI1MDAwNjA1LCAweDI1MDAwNjA1fSwKLQl7MHgwMDAwYTUyOCwgMHgzYzAyMmYwNCwgMHgzYzAyMmYwNCwgMHgyYTAwMGEwMywgMHgyYTAwMGEwM30sCi0JezB4MDAwMGE1MmMsIDB4NDEwMjNlODUsIDB4NDEwMjNlODUsIDB4MmMwMDBhMDQsIDB4MmMwMDBhMDR9LAotCXsweDAwMDBhNTMwLCAweDQ4MDIzZWM2LCAweDQ4MDIzZWM2LCAweDJlMDAwYTIwLCAweDJlMDAwYTIwfSwKLQl7MHgwMDAwYTUzNCwgMHg0ZDAyM2YwMSwgMHg0ZDAyM2YwMSwgMHgzNDAwMGUyMCwgMHgzNDAwMGUyMH0sCi0JezB4MDAwMGE1MzgsIDB4NTMwMjNmNGIsIDB4NTMwMjNmNGIsIDB4MzgwMDBlMjIsIDB4MzgwMDBlMjJ9LAotCXsweDAwMDBhNTNjLCAweDVhMDI3ZjA5LCAweDVhMDI3ZjA5LCAweDNjMDAwZTI0LCAweDNjMDAwZTI0fSwKLQl7MHgwMDAwYTU0MCwgMHg1ZjAyN2ZjOSwgMHg1ZjAyN2ZjOSwgMHg0MDAwMGUyNiwgMHg0MDAwMGUyNn0sCi0JezB4MDAwMGE1NDQsIDB4NjUwMmZlY2EsIDB4NjUwMmZlY2EsIDB4NDMwMDE2NDAsIDB4NDMwMDE2NDB9LAotCXsweDAwMDBhNTQ4LCAweDZiMDJmZjRhLCAweDZiMDJmZjRhLCAweDQ2MDAxNjYwLCAweDQ2MDAxNjYwfSwKLQl7MHgwMDAwYTU0YywgMHg3MjAzZmVjYSwgMHg3MjAzZmVjYSwgMHg0OTAwMTg2MSwgMHg0OTAwMTg2MX0sCi0JezB4MDAwMGE1NTAsIDB4NzcwM2ZmMGIsIDB4NzcwM2ZmMGIsIDB4NGMwMDFhODEsIDB4NGMwMDFhODF9LAotCXsweDAwMDBhNTU0LCAweDdkMDZmZmNiLCAweDdkMDZmZmNiLCAweDRmMDAxYTgzLCAweDRmMDAxYTgzfSwKLQl7MHgwMDAwYTU1OCwgMHg4NDA3ZmYwYiwgMHg4NDA3ZmYwYiwgMHg1NDAwMWM4NSwgMHg1NDAwMWM4NX0sCi0JezB4MDAwMGE1NWMsIDB4ODkwN2ZmY2IsIDB4ODkwN2ZmY2IsIDB4NTgwMDFjZTUsIDB4NTgwMDFjZTV9LAotCXsweDAwMDBhNTYwLCAweDkwMGZmZjBiLCAweDkwMGZmZjBiLCAweDViMDAxY2U5LCAweDViMDAxY2U5fSwKLQl7MHgwMDAwYTU2NCwgMHg5NjBmZmZjYiwgMHg5NjBmZmZjYiwgMHg2MDAwMWVlYiwgMHg2MDAwMWVlYn0sCi0JezB4MDAwMGE1NjgsIDB4OWMxZmZmMGIsIDB4OWMxZmZmMGIsIDB4NjAwMDFlZWIsIDB4NjAwMDFlZWJ9LAotCXsweDAwMDBhNTZjLCAweDljMWZmZjBiLCAweDljMWZmZjBiLCAweDYwMDAxZWViLCAweDYwMDAxZWVifSwKLQl7MHgwMDAwYTU3MCwgMHg5YzFmZmYwYiwgMHg5YzFmZmYwYiwgMHg2MDAwMWVlYiwgMHg2MDAwMWVlYn0sCi0JezB4MDAwMGE1NzQsIDB4OWMxZmZmMGIsIDB4OWMxZmZmMGIsIDB4NjAwMDFlZWIsIDB4NjAwMDFlZWJ9LAotCXsweDAwMDBhNTc4LCAweDljMWZmZjBiLCAweDljMWZmZjBiLCAweDYwMDAxZWViLCAweDYwMDAxZWVifSwKLQl7MHgwMDAwYTU3YywgMHg5YzFmZmYwYiwgMHg5YzFmZmYwYiwgMHg2MDAwMWVlYiwgMHg2MDAwMWVlYn0sCi0JezB4MDAwMTYwNDQsIDB4MDViNmIyZGIsIDB4MDViNmIyZGIsIDB4MDViNmIyZGIsIDB4MDViNmIyZGJ9LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBhcjk0ODVfMV8wW11bMl0gPSB7Ci0JLyogIEFkZHIgICAgICBhbGxtb2RlcyAqLwotCXsweDAwMDBhNTgwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTU4NCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE1ODgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhNThjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTU5MCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE1OTQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhNTk4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTU5YywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE1YTAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhNWE0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTVhOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE1YWMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhNWIwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTViNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE1YjgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhNWJjLCAweDAwMDAwMDAwfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgYXI5NDg1XzFfMF9yYWRpb19jb3JlW11bMl0gPSB7Ci0JLyogICBBZGRyICAgICBhbGxtb2RlcyAqLwotCXsweDAwMDE2MDAwLCAweDM2ZGI2ZGI2fSwKLQl7MHgwMDAxNjAwNCwgMHg2ZGI2ZGI0MH0sCi0JezB4MDAwMTYwMDgsIDB4NzM4MDAwMDB9LAotCXsweDAwMDE2MDBjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAxNjA0MCwgMHg3ZjgwZmZmOH0sCi0JezB4MDAwMTYwNDgsIDB4NmM5MjQyNmV9LAotCXsweDAwMDE2MDRjLCAweDAwMGYwMjc4fSwKLQl7MHgwMDAxNjA1MCwgMHg2ZGI2ZGI2Y30sCi0JezB4MDAwMTYwNTQsIDB4NmRiNjAwMDB9LAotCXsweDAwMDE2MDgwLCAweDAwMDgwMDAwfSwKLQl7MHgwMDAxNjA4NCwgMHgwZTQ4MDQ4Y30sCi0JezB4MDAwMTYwODgsIDB4MTQyMTQ1MTR9LAotCXsweDAwMDE2MDhjLCAweDExOWYwODFlfSwKLQl7MHgwMDAxNjA5MCwgMHgyNDkyNjQ5MH0sCi0JezB4MDAwMTYwOTgsIDB4ZDI4YjMzMzB9LAotCXsweDAwMDE2MGEwLCAweGMyMTA4ZmZlfSwKLQl7MHgwMDAxNjBhNCwgMHg4MTJmYzM3MH0sCi0JezB4MDAwMTYwYTgsIDB4NDIzYzgwMDB9LAotCXsweDAwMDE2MGI0LCAweDkyNDgwMDQwfSwKLQl7MHgwMDAxNjBjMCwgMHgwMDZkYjZkYn0sCi0JezB4MDAwMTYwYzQsIDB4MDE4NmRiNjB9LAotCXsweDAwMDE2MGM4LCAweDZkYjZkYjZjfSwKLQl7MHgwMDAxNjBjYywgMHg2ZGU2ZmJlMH0sCi0JezB4MDAwMTYwZDAsIDB4ZjdkZmNmM2N9LAotCXsweDAwMDE2MTAwLCAweDA0Y2IwMDAxfSwKLQl7MHgwMDAxNjEwNCwgMHhmZmY4MDAxNX0sCi0JezB4MDAwMTYxMDgsIDB4MDAwODAwMTB9LAotCXsweDAwMDE2MTQ0LCAweDAxODg0MDgwfSwKLQl7MHgwMDAxNjE0OCwgMHgwMDAwODA0MH0sCi0JezB4MDAwMTYxODAsIDB4MDg0NTMzMzN9LAotCXsweDAwMDE2MTg0LCAweDE4ZTgyZjAxfSwKLQl7MHgwMDAxNjE4OCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMTYxOGMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDE2MjQwLCAweDA4NDAwMDAwfSwKLQl7MHgwMDAxNjI0NCwgMHgxYmY5MGYwMH0sCi0JezB4MDAwMTYyNDgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDE2MjRjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAxNjI4MCwgMHgwMTAwMDAxNX0sCi0JezB4MDAwMTYyODQsIDB4MDBkMzAwMDB9LAotCXsweDAwMDE2Mjg4LCAweDAwMzE4MDAwfSwKLQl7MHgwMDAxNjI4YywgMHg1MDAwMDAwMH0sCi0JezB4MDAwMTYyOTAsIDB4NGI5NjIxMGZ9LAotCXsweDAwMDE2MzgwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAxNjM4NCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMTYzODgsIDB4MDA4MDA3MDB9LAotCXsweDAwMDE2MzhjLCAweDAwODAwNzAwfSwKLQl7MHgwMDAxNjM5MCwgMHgwMDgwMDcwMH0sCi0JezB4MDAwMTYzOTQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDE2Mzk4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAxNjM5YywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMTYzYTAsIDB4MDAwMDAwMDF9LAotCXsweDAwMDE2M2E0LCAweDAwMDAwMDAxfSwKLQl7MHgwMDAxNjNhOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMTYzYWMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDE2M2IwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAxNjNiNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMTYzYjgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDE2M2JjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAxNjNjMCwgMHgwMDAwMDBhMH0sCi0JezB4MDAwMTYzYzQsIDB4MDAwYzAwMDB9LAotCXsweDAwMDE2M2M4LCAweDE0MDIxNDAyfSwKLQl7MHgwMDAxNjNjYywgMHgwMDAwMTQwMn0sCi0JezB4MDAwMTYzZDAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDE2M2Q0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAxNmM0MCwgMHgxMzE5YzE3OH0sCi0JezB4MDAwMTZjNDQsIDB4MTAwMDAwMDB9LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBhcjk0ODVNb2Rlc19sb3dlc3Rfb2JfZGJfdHhfZ2Fpbl8xXzBbXVs1XSA9IHsKLQkvKiAgQWRkciAgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgICAyR19IVDIwICovCi0JezB4MDAwMGE0MTAsIDB4MDAwMDUwZDksIDB4MDAwMDUwZDksIDB4MDAwMDUwZDgsIDB4MDAwMDUwZDh9LAotCXsweDAwMDBhNTAwLCAweDAwMDIyMjAwLCAweDAwMDIyMjAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTUwNCwgMHgwNTA2MjAwMiwgMHgwNTA2MjAwMiwgMHgwNDAwMDAwMiwgMHgwNDAwMDAwMn0sCi0JezB4MDAwMGE1MDgsIDB4MGMwMDJlMDAsIDB4MGMwMDJlMDAsIDB4MDgwMDAwMDQsIDB4MDgwMDAwMDR9LAotCXsweDAwMDBhNTBjLCAweDExMDYyMjAyLCAweDExMDYyMjAyLCAweDBkMDAwMjAwLCAweDBkMDAwMjAwfSwKLQl7MHgwMDAwYTUxMCwgMHgxNzAyMmUwMCwgMHgxNzAyMmUwMCwgMHgxMTAwMDIwMiwgMHgxMTAwMDIwMn0sCi0JezB4MDAwMGE1MTQsIDB4MWQwMDBlYzIsIDB4MWQwMDBlYzIsIDB4MTUwMDA0MDAsIDB4MTUwMDA0MDB9LAotCXsweDAwMDBhNTE4LCAweDI1MDIwZWMwLCAweDI1MDIwZWMwLCAweDE5MDAwNDAyLCAweDE5MDAwNDAyfSwKLQl7MHgwMDAwYTUxYywgMHgyYjAyMGVjMywgMHgyYjAyMGVjMywgMHgxZDAwMDQwNCwgMHgxZDAwMDQwNH0sCi0JezB4MDAwMGE1MjAsIDB4MmYwMDFmMDQsIDB4MmYwMDFmMDQsIDB4MjEwMDA2MDMsIDB4MjEwMDA2MDN9LAotCXsweDAwMDBhNTI0LCAweDM1MDAxZmM0LCAweDM1MDAxZmM0LCAweDI1MDAwNjA1LCAweDI1MDAwNjA1fSwKLQl7MHgwMDAwYTUyOCwgMHgzYzAyMmYwNCwgMHgzYzAyMmYwNCwgMHgyYTAwMGEwMywgMHgyYTAwMGEwM30sCi0JezB4MDAwMGE1MmMsIDB4NDEwMjNlODUsIDB4NDEwMjNlODUsIDB4MmMwMDBhMDQsIDB4MmMwMDBhMDR9LAotCXsweDAwMDBhNTMwLCAweDQ4MDIzZWM2LCAweDQ4MDIzZWM2LCAweDJlMDAwYTIwLCAweDJlMDAwYTIwfSwKLQl7MHgwMDAwYTUzNCwgMHg0ZDAyM2YwMSwgMHg0ZDAyM2YwMSwgMHgzNDAwMGUyMCwgMHgzNDAwMGUyMH0sCi0JezB4MDAwMGE1MzgsIDB4NTMwMjNmNGIsIDB4NTMwMjNmNGIsIDB4MzgwMDBlMjIsIDB4MzgwMDBlMjJ9LAotCXsweDAwMDBhNTNjLCAweDVhMDI3ZjA5LCAweDVhMDI3ZjA5LCAweDNjMDAwZTI0LCAweDNjMDAwZTI0fSwKLQl7MHgwMDAwYTU0MCwgMHg1ZjAyN2ZjOSwgMHg1ZjAyN2ZjOSwgMHg0MDAwMGUyNiwgMHg0MDAwMGUyNn0sCi0JezB4MDAwMGE1NDQsIDB4NjUwMmZlY2EsIDB4NjUwMmZlY2EsIDB4NDMwMDE2NDAsIDB4NDMwMDE2NDB9LAotCXsweDAwMDBhNTQ4LCAweDZiMDJmZjRhLCAweDZiMDJmZjRhLCAweDQ2MDAxNjYwLCAweDQ2MDAxNjYwfSwKLQl7MHgwMDAwYTU0YywgMHg3MjAzZmVjYSwgMHg3MjAzZmVjYSwgMHg0OTAwMTg2MSwgMHg0OTAwMTg2MX0sCi0JezB4MDAwMGE1NTAsIDB4NzcwM2ZmMGIsIDB4NzcwM2ZmMGIsIDB4NGMwMDFhODEsIDB4NGMwMDFhODF9LAotCXsweDAwMDBhNTU0LCAweDdkMDZmZmNiLCAweDdkMDZmZmNiLCAweDRmMDAxYTgzLCAweDRmMDAxYTgzfSwKLQl7MHgwMDAwYTU1OCwgMHg4NDA3ZmYwYiwgMHg4NDA3ZmYwYiwgMHg1NDAwMWM4NSwgMHg1NDAwMWM4NX0sCi0JezB4MDAwMGE1NWMsIDB4ODkwN2ZmY2IsIDB4ODkwN2ZmY2IsIDB4NTgwMDFjZTUsIDB4NTgwMDFjZTV9LAotCXsweDAwMDBhNTYwLCAweDkwMGZmZjBiLCAweDkwMGZmZjBiLCAweDViMDAxY2U5LCAweDViMDAxY2U5fSwKLQl7MHgwMDAwYTU2NCwgMHg5NjBmZmZjYiwgMHg5NjBmZmZjYiwgMHg2MDAwMWVlYiwgMHg2MDAwMWVlYn0sCi0JezB4MDAwMGE1NjgsIDB4OWMxZmZmMGIsIDB4OWMxZmZmMGIsIDB4NjAwMDFlZWIsIDB4NjAwMDFlZWJ9LAotCXsweDAwMDBhNTZjLCAweDljMWZmZjBiLCAweDljMWZmZjBiLCAweDYwMDAxZWViLCAweDYwMDAxZWVifSwKLQl7MHgwMDAwYTU3MCwgMHg5YzFmZmYwYiwgMHg5YzFmZmYwYiwgMHg2MDAwMWVlYiwgMHg2MDAwMWVlYn0sCi0JezB4MDAwMGE1NzQsIDB4OWMxZmZmMGIsIDB4OWMxZmZmMGIsIDB4NjAwMDFlZWIsIDB4NjAwMDFlZWJ9LAotCXsweDAwMDBhNTc4LCAweDljMWZmZjBiLCAweDljMWZmZjBiLCAweDYwMDAxZWViLCAweDYwMDAxZWVifSwKLQl7MHgwMDAwYTU3YywgMHg5YzFmZmYwYiwgMHg5YzFmZmYwYiwgMHg2MDAwMWVlYiwgMHg2MDAwMWVlYn0sCi0JezB4MDAwMTYwNDQsIDB4MDViNmIyZGIsIDB4MDViNmIyZGIsIDB4MDViNmIyZGIsIDB4MDViNmIyZGJ9LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBhcjk0ODVfMV8wX2Jhc2ViYW5kX2NvcmVbXVsyXSA9IHsKLQkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCi0JezB4MDAwMDk4MDAsIDB4YWZlNjhlMzB9LAotCXsweDAwMDA5ODA0LCAweGZkMTRlMDAwfSwKLQl7MHgwMDAwOTgwOCwgMHg5YzBhOGY2Yn0sCi0JezB4MDAwMDk4MGMsIDB4MDQ4MDAwMDB9LAotCXsweDAwMDA5ODE0LCAweDkyODBjMDBhfSwKLQl7MHgwMDAwOTgxOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDk4MWMsIDB4MDAwMjAwMjh9LAotCXsweDAwMDA5ODM0LCAweDVmM2NhM2RlfSwKLQl7MHgwMDAwOTgzOCwgMHgwMTA4ZWNmZn0sCi0JezB4MDAwMDk4M2MsIDB4MTQ3NTA2MDB9LAotCXsweDAwMDA5ODgwLCAweDIwMWZmZjAwfSwKLQl7MHgwMDAwOTg4NCwgMHgwMDAwMTA0Mn0sCi0JezB4MDAwMDk4YTQsIDB4MDAyMDA0MDB9LAotCXsweDAwMDA5OGIwLCAweDUyNDQwYmJlfSwKLQl7MHgwMDAwOThiYywgMHgwMDAwMDAwMn0sCi0JezB4MDAwMDk4ZDAsIDB4MDA0YjZhOGV9LAotCXsweDAwMDA5OGQ0LCAweDAwMDAwODIwfSwKLQl7MHgwMDAwOThkYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDk4ZjAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA5OGY0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwOWMwNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDljMDgsIDB4MDMyMDAwMDB9LAotCXsweDAwMDA5YzBjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwOWMxMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDljMTQsIDB4MDAwNDYzODR9LAotCXsweDAwMDA5YzE4LCAweDA1YjZiNDQwfSwKLQl7MHgwMDAwOWMxYywgMHgwMGI2YjQ0MH0sCi0JezB4MDAwMDlkMDAsIDB4YzA4MGEzMzN9LAotCXsweDAwMDA5ZDA0LCAweDQwMjA2YzEwfSwKLQl7MHgwMDAwOWQwOCwgMHgwMDljNDA2MH0sCi0JezB4MDAwMDlkMGMsIDB4MTg4MzgwMGF9LAotCXsweDAwMDA5ZDEwLCAweDAxODM0MDYxfSwKLQl7MHgwMDAwOWQxNCwgMHgwMGMwMDQwMH0sCi0JezB4MDAwMDlkMTgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA5ZDFjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwOWUwOCwgMHgwMDM4MjMzY30sCi0JezB4MDAwMDllMjQsIDB4OTkwYmI1MTV9LAotCXsweDAwMDA5ZTI4LCAweDBhNmYwMDAwfSwKLQl7MHgwMDAwOWUzMCwgMHgwNjMzNmY3N30sCi0JezB4MDAwMDllMzQsIDB4NmFmNjUzMmZ9LAotCXsweDAwMDA5ZTM4LCAweDBjYzgwYzAwfSwKLQl7MHgwMDAwOWU0MCwgMHgwZDI2MTgyMH0sCi0JezB4MDAwMDllNGMsIDB4MDAwMDEwMDR9LAotCXsweDAwMDA5ZTUwLCAweDAwZmYwM2YxfSwKLQl7MHgwMDAwOWZjMCwgMHg4MGJlNDc4OH0sCi0JezB4MDAwMDlmYzQsIDB4MDAwMWVmYjV9LAotCXsweDAwMDA5ZmNjLCAweDQwMDAwMDE0fSwKLQl7MHgwMDAwYTIwYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEyMTAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMjIwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTIyNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEyMjgsIDB4MTAwMDIzMTB9LAotCXsweDAwMDBhMjNjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTI0NCwgMHgwYzAwMDAwMH0sCi0JezB4MDAwMGEyYTAsIDB4MDAwMDAwMDF9LAotCXsweDAwMDBhMmMwLCAweDAwMDAwMDAxfSwKLQl7MHgwMDAwYTJjOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEyY2MsIDB4MThjNDM0MzN9LAotCXsweDAwMDBhMmQ0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTJkYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEyZTAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMmU0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTJlOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEyZWMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMmYwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTJmNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEyZjgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMzQ0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTM0YywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEzNTAsIDB4MDAwMGEwMDB9LAotCXsweDAwMDBhMzY0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTM3MCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEzOTAsIDB4MDAwMDAwMDF9LAotCXsweDAwMDBhMzk0LCAweDAwMDAwNDQ0fSwKLQl7MHgwMDAwYTM5OCwgMHgwMDFmMGUwZn0sCi0JezB4MDAwMGEzOWMsIDB4MDA3NTM5M2Z9LAotCXsweDAwMDBhM2EwLCAweGI3OWY2NDI3fSwKLQl7MHgwMDAwYTNhNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEzYTgsIDB4YWFhYWFhYWF9LAotCXsweDAwMDBhM2FjLCAweDNjNDY2NDc4fSwKLQl7MHgwMDAwYTNjMCwgMHgyMDIwMjAyMH0sCi0JezB4MDAwMGEzYzQsIDB4MjIyMjIyMjB9LAotCXsweDAwMDBhM2M4LCAweDIwMjAwMDIwfSwKLQl7MHgwMDAwYTNjYywgMHgyMDIwMjAyMH0sCi0JezB4MDAwMGEzZDAsIDB4MjAyMDIwMjB9LAotCXsweDAwMDBhM2Q0LCAweDIwMjAyMDIwfSwKLQl7MHgwMDAwYTNkOCwgMHgyMDIwMjAyMH0sCi0JezB4MDAwMGEzZGMsIDB4MjAyMDIwMjB9LAotCXsweDAwMDBhM2UwLCAweDIwMjAyMDIwfSwKLQl7MHgwMDAwYTNlNCwgMHgyMDIwMjAyMH0sCi0JezB4MDAwMGEzZTgsIDB4MjAyMDIwMjB9LAotCXsweDAwMDBhM2VjLCAweDIwMjAyMDIwfSwKLQl7MHgwMDAwYTNmMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEzZjQsIDB4MDAwMDAwMDZ9LAotCXsweDAwMDBhM2Y4LCAweDBjZGJkMzgwfSwKLQl7MHgwMDAwYTNmYywgMHgwMDBmMGYwMX0sCi0JezB4MDAwMGE0MDAsIDB4OGZhOTFmMDF9LAotCXsweDAwMDBhNDA0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTQwOCwgMHgwZTc5ZTVjNn0sCi0JezB4MDAwMGE0MGMsIDB4MDA4MjA4MjB9LAotCXsweDAwMDBhNDE0LCAweDFjZTczOWNlfSwKLQl7MHgwMDAwYTQxOCwgMHgyZDAwMTFjZX0sCi0JezB4MDAwMGE0MWMsIDB4MWNlNzM5Y2V9LAotCXsweDAwMDBhNDIwLCAweDAwMDAwMWNlfSwKLQl7MHgwMDAwYTQyNCwgMHgxY2U3MzljZX0sCi0JezB4MDAwMGE0MjgsIDB4MDAwMDAxY2V9LAotCXsweDAwMDBhNDJjLCAweDFjZTczOWNlfSwKLQl7MHgwMDAwYTQzMCwgMHgxY2U3MzljZX0sCi0JezB4MDAwMGE0MzQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhNDM4LCAweDAwMDAxODAxfSwKLQl7MHgwMDAwYTQzYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE0NDAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhNDQ0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTQ0OCwgMHgwNDAwMDAwMH0sCi0JezB4MDAwMGE0NGMsIDB4MDAwMDAwMDF9LAotCXsweDAwMDBhNDUwLCAweDAwMDEwMDAwfSwKLQl7MHgwMDAwYTQ1OCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE1YzQsIDB4M2ZhZDlkNzR9LAotCXsweDAwMDBhNWM4LCAweDAwNDgwNjBhfSwKLQl7MHgwMDAwYTVjYywgMHgwMDAwMDYzN30sCi0JezB4MDAwMGE3NjAsIDB4MDMwMjAxMDB9LAotCXsweDAwMDBhNzY0LCAweDA5MDgwNTA0fSwKLQl7MHgwMDAwYTc2OCwgMHgwZDBjMGIwYX0sCi0JezB4MDAwMGE3NmMsIDB4MTMxMjExMTB9LAotCXsweDAwMDBhNzcwLCAweDMxMzAxNTE0fSwKLQl7MHgwMDAwYTc3NCwgMHgzNTM0MzMzMn0sCi0JezB4MDAwMGE3NzgsIDB4MDAwMDAwMzZ9LAotCXsweDAwMDBhNzgwLCAweDAwMDAwODM4fSwKLQl7MHgwMDAwYTdjMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE3YzQsIDB4ZmZmZmZmZmN9LAotCXsweDAwMDBhN2M4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTdjYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE3ZDAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhN2Q0LCAweDAwMDAwMDA0fSwKLQl7MHgwMDAwYTdkYywgMHgwMDAwMDAwMX0sCi19OwotCi1zdGF0aWMgY29uc3QgdTMyIGFyOTQ4NU1vZGVzX2hpZ2hfb2JfZGJfdHhfZ2Fpbl8xXzBbXVs1XSA9IHsKLQkvKiBBZGRyICAgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgIDJHX0hUMjAgICovCi0JezB4MDAwMGE0MTAsIDB4MDAwMDUwZDksIDB4MDAwMDUwZDksIDB4MDAwMDUwZDgsIDB4MDAwMDUwZDh9LAotCXsweDAwMDBhNTAwLCAweDAwMDIyMjAwLCAweDAwMDIyMjAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTUwNCwgMHgwNTA2MjAwMiwgMHgwNTA2MjAwMiwgMHgwNDAwMDAwMiwgMHgwNDAwMDAwMn0sCi0JezB4MDAwMGE1MDgsIDB4MGMwMDJlMDAsIDB4MGMwMDJlMDAsIDB4MDgwMDAwMDQsIDB4MDgwMDAwMDR9LAotCXsweDAwMDBhNTBjLCAweDExMDYyMjAyLCAweDExMDYyMjAyLCAweDBkMDAwMjAwLCAweDBkMDAwMjAwfSwKLQl7MHgwMDAwYTUxMCwgMHgxNzAyMmUwMCwgMHgxNzAyMmUwMCwgMHgxMTAwMDIwMiwgMHgxMTAwMDIwMn0sCi0JezB4MDAwMGE1MTQsIDB4MWQwMDBlYzIsIDB4MWQwMDBlYzIsIDB4MTUwMDA0MDAsIDB4MTUwMDA0MDB9LAotCXsweDAwMDBhNTE4LCAweDI1MDIwZWMwLCAweDI1MDIwZWMwLCAweDE5MDAwNDAyLCAweDE5MDAwNDAyfSwKLQl7MHgwMDAwYTUxYywgMHgyYjAyMGVjMywgMHgyYjAyMGVjMywgMHgxZDAwMDQwNCwgMHgxZDAwMDQwNH0sCi0JezB4MDAwMGE1MjAsIDB4MmYwMDFmMDQsIDB4MmYwMDFmMDQsIDB4MjEwMDA2MDMsIDB4MjEwMDA2MDN9LAotCXsweDAwMDBhNTI0LCAweDM1MDAxZmM0LCAweDM1MDAxZmM0LCAweDI1MDAwNjA1LCAweDI1MDAwNjA1fSwKLQl7MHgwMDAwYTUyOCwgMHgzYzAyMmYwNCwgMHgzYzAyMmYwNCwgMHgyYTAwMGEwMywgMHgyYTAwMGEwM30sCi0JezB4MDAwMGE1MmMsIDB4NDEwMjNlODUsIDB4NDEwMjNlODUsIDB4MmMwMDBhMDQsIDB4MmMwMDBhMDR9LAotCXsweDAwMDBhNTMwLCAweDQ4MDIzZWM2LCAweDQ4MDIzZWM2LCAweDJlMDAwYTIwLCAweDJlMDAwYTIwfSwKLQl7MHgwMDAwYTUzNCwgMHg0ZDAyM2YwMSwgMHg0ZDAyM2YwMSwgMHgzNDAwMGUyMCwgMHgzNDAwMGUyMH0sCi0JezB4MDAwMGE1MzgsIDB4NTMwMjNmNGIsIDB4NTMwMjNmNGIsIDB4MzgwMDBlMjIsIDB4MzgwMDBlMjJ9LAotCXsweDAwMDBhNTNjLCAweDVhMDI3ZjA5LCAweDVhMDI3ZjA5LCAweDNjMDAwZTI0LCAweDNjMDAwZTI0fSwKLQl7MHgwMDAwYTU0MCwgMHg1ZjAyN2ZjOSwgMHg1ZjAyN2ZjOSwgMHg0MDAwMGUyNiwgMHg0MDAwMGUyNn0sCi0JezB4MDAwMGE1NDQsIDB4NjUwMmZlY2EsIDB4NjUwMmZlY2EsIDB4NDMwMDE2NDAsIDB4NDMwMDE2NDB9LAotCXsweDAwMDBhNTQ4LCAweDZiMDJmZjRhLCAweDZiMDJmZjRhLCAweDQ2MDAxNjYwLCAweDQ2MDAxNjYwfSwKLQl7MHgwMDAwYTU0YywgMHg3MjAzZmVjYSwgMHg3MjAzZmVjYSwgMHg0OTAwMTg2MSwgMHg0OTAwMTg2MX0sCi0JezB4MDAwMGE1NTAsIDB4NzcwM2ZmMGIsIDB4NzcwM2ZmMGIsIDB4NGMwMDFhODEsIDB4NGMwMDFhODF9LAotCXsweDAwMDBhNTU0LCAweDdkMDZmZmNiLCAweDdkMDZmZmNiLCAweDRmMDAxYTgzLCAweDRmMDAxYTgzfSwKLQl7MHgwMDAwYTU1OCwgMHg4NDA3ZmYwYiwgMHg4NDA3ZmYwYiwgMHg1NDAwMWM4NSwgMHg1NDAwMWM4NX0sCi0JezB4MDAwMGE1NWMsIDB4ODkwN2ZmY2IsIDB4ODkwN2ZmY2IsIDB4NTgwMDFjZTUsIDB4NTgwMDFjZTV9LAotCXsweDAwMDBhNTYwLCAweDkwMGZmZjBiLCAweDkwMGZmZjBiLCAweDViMDAxY2U5LCAweDViMDAxY2U5fSwKLQl7MHgwMDAwYTU2NCwgMHg5NjBmZmZjYiwgMHg5NjBmZmZjYiwgMHg2MDAwMWVlYiwgMHg2MDAwMWVlYn0sCi0JezB4MDAwMGE1NjgsIDB4OWMxZmZmMGIsIDB4OWMxZmZmMGIsIDB4NjAwMDFlZWIsIDB4NjAwMDFlZWJ9LAotCXsweDAwMDBhNTZjLCAweDljMWZmZjBiLCAweDljMWZmZjBiLCAweDYwMDAxZWViLCAweDYwMDAxZWVifSwKLQl7MHgwMDAwYTU3MCwgMHg5YzFmZmYwYiwgMHg5YzFmZmYwYiwgMHg2MDAwMWVlYiwgMHg2MDAwMWVlYn0sCi0JezB4MDAwMGE1NzQsIDB4OWMxZmZmMGIsIDB4OWMxZmZmMGIsIDB4NjAwMDFlZWIsIDB4NjAwMDFlZWJ9LAotCXsweDAwMDBhNTc4LCAweDljMWZmZjBiLCAweDljMWZmZjBiLCAweDYwMDAxZWViLCAweDYwMDAxZWVifSwKLQl7MHgwMDAwYTU3YywgMHg5YzFmZmYwYiwgMHg5YzFmZmYwYiwgMHg2MDAwMWVlYiwgMHg2MDAwMWVlYn0sCi0JezB4MDAwMTYwNDQsIDB4MDViNmIyZGIsIDB4MDViNmIyZGIsIDB4MDViNmIyZGIsIDB4MDViNmIyZGJ9LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBhcjk0ODVDb21tb25fcnhfZ2Fpbl8xXzBbXVsyXSA9IHsKLQkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCi0JezB4MDAwMGEwMDAsIDB4MDAwMTAwMDB9LAotCXsweDAwMDBhMDA0LCAweDAwMDMwMDAyfSwKLQl7MHgwMDAwYTAwOCwgMHgwMDA1MDAwNH0sCi0JezB4MDAwMGEwMGMsIDB4MDA4MTAwODB9LAotCXsweDAwMDBhMDEwLCAweDAxODAwMDgyfSwKLQl7MHgwMDAwYTAxNCwgMHgwMTgyMDE4MX0sCi0JezB4MDAwMGEwMTgsIDB4MDE4NDAxODN9LAotCXsweDAwMDBhMDFjLCAweDAxODgwMTg1fSwKLQl7MHgwMDAwYTAyMCwgMHgwMThhMDE4OX0sCi0JezB4MDAwMGEwMjQsIDB4MDI4NTAyODR9LAotCXsweDAwMDBhMDI4LCAweDAyODkwMjg4fSwKLQl7MHgwMDAwYTAyYywgMHgwMzg1MDM4NH0sCi0JezB4MDAwMGEwMzAsIDB4MDM4OTAzODh9LAotCXsweDAwMDBhMDM0LCAweDAzOGIwMzhhfSwKLQl7MHgwMDAwYTAzOCwgMHgwMzhkMDM4Y30sCi0JezB4MDAwMGEwM2MsIDB4MDM5MTAzOTB9LAotCXsweDAwMDBhMDQwLCAweDAzOTMwMzkyfSwKLQl7MHgwMDAwYTA0NCwgMHgwMzk1MDM5NH0sCi0JezB4MDAwMGEwNDgsIDB4MDAwMDAzOTZ9LAotCXsweDAwMDBhMDRjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTA1MCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwNTQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMDU4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTA1YywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwNjAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMDY0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTA2OCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwNmMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMDcwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTA3NCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwNzgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMDdjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTA4MCwgMHgyODI4MjgyOH0sCi0JezB4MDAwMGEwODQsIDB4MjgyODI4Mjh9LAotCXsweDAwMDBhMDg4LCAweDI4MjgyODI4fSwKLQl7MHgwMDAwYTA4YywgMHgyODI4MjgyOH0sCi0JezB4MDAwMGEwOTAsIDB4MjgyODI4Mjh9LAotCXsweDAwMDBhMDk0LCAweDIxMjEyMTI4fSwKLQl7MHgwMDAwYTA5OCwgMHgxNzFjMWMxY30sCi0JezB4MDAwMGEwOWMsIDB4MDIwMjAyMTJ9LAotCXsweDAwMDBhMGEwLCAweDAwMDAwMjAyfSwKLQl7MHgwMDAwYTBhNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwYTgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMGFjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTBiMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwYjQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMGI4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTBiYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwYzAsIDB4MDAxZjAwMDB9LAotCXsweDAwMDBhMGM0LCAweDExMWYxMTAwfSwKLQl7MHgwMDAwYTBjOCwgMHgxMTFkMTExZX0sCi0JezB4MDAwMGEwY2MsIDB4MTExYjExMWN9LAotCXsweDAwMDBhMGQwLCAweDIyMDMyMjA0fSwKLQl7MHgwMDAwYTBkNCwgMHgyMjAxMjIwMn0sCi0JezB4MDAwMGEwZDgsIDB4MjIxZjIyMDB9LAotCXsweDAwMDBhMGRjLCAweDIyMWQyMjFlfSwKLQl7MHgwMDAwYTBlMCwgMHgzMzAxMzMwMn0sCi0JezB4MDAwMGEwZTQsIDB4MzMxZjMzMDB9LAotCXsweDAwMDBhMGU4LCAweDQ0MDIzMzFlfSwKLQl7MHgwMDAwYTBlYywgMHg0NDAwNDQwMX0sCi0JezB4MDAwMGEwZjAsIDB4NDQxZTQ0MWZ9LAotCXsweDAwMDBhMGY0LCAweDU1MDE1NTAyfSwKLQl7MHgwMDAwYTBmOCwgMHg1NTFmNTUwMH0sCi0JezB4MDAwMGEwZmMsIDB4NjYwMjU1MWV9LAotCXsweDAwMDBhMTAwLCAweDY2MDA2NjAxfSwKLQl7MHgwMDAwYTEwNCwgMHg2NjFlNjYxZn0sCi0JezB4MDAwMGExMDgsIDB4NzcwMzY2MWR9LAotCXsweDAwMDBhMTBjLCAweDc3MDE3NzAyfSwKLQl7MHgwMDAwYTExMCwgMHgwMDAwNzcwMH0sCi0JezB4MDAwMGExMTQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMTE4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTExYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExMjAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMTI0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTEyOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExMmMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMTMwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTEzNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExMzgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMTNjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTE0MCwgMHgwMDFmMDAwMH0sCi0JezB4MDAwMGExNDQsIDB4MTExZjExMDB9LAotCXsweDAwMDBhMTQ4LCAweDExMWQxMTFlfSwKLQl7MHgwMDAwYTE0YywgMHgxMTFiMTExY30sCi0JezB4MDAwMGExNTAsIDB4MjIwMzIyMDR9LAotCXsweDAwMDBhMTU0LCAweDIyMDEyMjAyfSwKLQl7MHgwMDAwYTE1OCwgMHgyMjFmMjIwMH0sCi0JezB4MDAwMGExNWMsIDB4MjIxZDIyMWV9LAotCXsweDAwMDBhMTYwLCAweDMzMDEzMzAyfSwKLQl7MHgwMDAwYTE2NCwgMHgzMzFmMzMwMH0sCi0JezB4MDAwMGExNjgsIDB4NDQwMjMzMWV9LAotCXsweDAwMDBhMTZjLCAweDQ0MDA0NDAxfSwKLQl7MHgwMDAwYTE3MCwgMHg0NDFlNDQxZn0sCi0JezB4MDAwMGExNzQsIDB4NTUwMTU1MDJ9LAotCXsweDAwMDBhMTc4LCAweDU1MWY1NTAwfSwKLQl7MHgwMDAwYTE3YywgMHg2NjAyNTUxZX0sCi0JezB4MDAwMGExODAsIDB4NjYwMDY2MDF9LAotCXsweDAwMDBhMTg0LCAweDY2MWU2NjFmfSwKLQl7MHgwMDAwYTE4OCwgMHg3NzAzNjYxZH0sCi0JezB4MDAwMGExOGMsIDB4NzcwMTc3MDJ9LAotCXsweDAwMDBhMTkwLCAweDAwMDA3NzAwfSwKLQl7MHgwMDAwYTE5NCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExOTgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMTljLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFhMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExYTQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWE4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFhYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExYjAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWI0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFiOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExYmMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWMwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFjNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExYzgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWNjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFkMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExZDQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWQ4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFkYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExZTAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWU0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFlOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExZWMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWYwLCAweDAwMDAwMzk2fSwKLQl7MHgwMDAwYTFmNCwgMHgwMDAwMDM5Nn0sCi0JezB4MDAwMGExZjgsIDB4MDAwMDAzOTZ9LAotCXsweDAwMDBhMWZjLCAweDAwMDAwMjk2fSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgYXI5NDg1XzFfMF9wY2llX3BoeV9wbGxfb25fY2xrcmVxX2VuYWJsZV9MMVtdWzJdID0gewotCS8qICAgQWRkciAgICBhbGxtb2RlcyAgKi8KLQl7MHgwMDAxOGMwMCwgMHgxMDI1MmU1ZX0sCi0JezB4MDAwMThjMDQsIDB4MDAwODAxZDh9LAotCXsweDAwMDE4YzA4LCAweDAwMDA1ODBjfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgYXI5NDg1XzFfMF9wY2llX3BoeV9jbGtyZXFfZW5hYmxlX0wxW11bMl0gPSB7Ci0JLyogIEFkZHIgICAgYWxsbW9kZXMgICAqLwotCXsweDAwMDE4YzAwLCAweDEwMjUzZTVlfSwKLQl7MHgwMDAxOGMwNCwgMHgwMDA4MDFkOH0sCi0JezB4MDAwMThjMDgsIDB4MDAwMDU4MGN9LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBhcjk0ODVfMV8wX3NvY19wcmVhbWJsZVtdWzJdID0gewotCS8qICAgQWRkciAgICAgYWxsbW9kZXMgKi8KLQl7MHgwMDAwNDA5MCwgMHgwMGFhMTBhYX0sCi0JezB4MDAwMDQwYTQsIDB4MDBhMGM5Yzl9LAotCXsweDAwMDA3MDQ4LCAweDAwMDAwMDA0fSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgYXI5NDg1X2Zhc3RfY2xvY2tfMV8wX2Jhc2ViYW5kX3Bvc3RhbWJsZVtdWzNdID0gewotCS8qICAgQWRkciAgICAgIDVHX0hUMjAgICAgIDVHX0hUNDAgKi8KLQl7MHgwMDAwOWUwMCwgMHgwMzcyMTgyMSwgMHgwMzcyMTgyMX0sCi0JezB4MDAwMGEyMzAsIDB4MDAwMDQwMGIsIDB4MDAwMDQwMTZ9LAotCXsweDAwMDBhMjU0LCAweDAwMDAwODk4LCAweDAwMDAxMTMwfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgYXI5NDg1XzFfMF9iYXNlYmFuZF9wb3N0YW1ibGVbXVs1XSA9IHsKLQkvKiBBZGRyICAgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgICAyR19IVDIwICovCi0JezB4MDAwMDk4MTAsIDB4ZDAwYTgwMDUsIDB4ZDAwYTgwMDUsIDB4ZDAwYTgwMDUsIDB4ZDAwYTgwMDV9LAotCXsweDAwMDA5ODIwLCAweDIwNmEwMDJlLCAweDIwNmEwMDJlLCAweDIwNmEwMDJlLCAweDIwNmEwMDJlfSwKLQl7MHgwMDAwOTgyNCwgMHg1YWM2NDBkMCwgMHg1YWM2NDBkMCwgMHg1YWM2NDBkMCwgMHg1YWM2NDBkMH0sCi0JezB4MDAwMDk4MjgsIDB4MDY5MDMwODEsIDB4MDY5MDMwODEsIDB4MDY5MDM4ODEsIDB4MDY5MDM4ODF9LAotCXsweDAwMDA5ODJjLCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0fSwKLQl7MHgwMDAwOTgzMCwgMHgwMDAwMDU5YywgMHgwMDAwMDU5YywgMHgwMDAwMDU5YywgMHgwMDAwMDU5Y30sCi0JezB4MDAwMDljMDAsIDB4MDAwMDAwNDQsIDB4MDAwMDAwNDQsIDB4MDAwMDAwNDQsIDB4MDAwMDAwNDR9LAotCXsweDAwMDA5ZTAwLCAweDAzNzIxNjFlLCAweDAzNzIxNjFlLCAweDAzNzIxNmEwLCAweDAzNzIxNmEwfSwKLQl7MHgwMDAwOWUwNCwgMHgwMDE4MjAyMCwgMHgwMDE4MjAyMCwgMHgwMDE4MjAyMCwgMHgwMDE4MjAyMH0sCi0JezB4MDAwMDllMGMsIDB4NmM0MDAwZTIsIDB4NmQ0MDAwZTIsIDB4NmQ0MDAwZTIsIDB4NmM0MDAwZTJ9LAotCXsweDAwMDA5ZTEwLCAweDdlYzg4ZDJlLCAweDdlYzg4ZDJlLCAweDdlYzgwZDJlLCAweDdlYzgwZDJlfSwKLQl7MHgwMDAwOWUxNCwgMHgzMTM5NWQ1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM5NWQ1ZX0sCi0JezB4MDAwMDllMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA5ZTFjLCAweDAwMDFjZjljLCAweDAwMDFjZjljLCAweDAwMDIxZjljLCAweDAwMDIxZjljfSwKLQl7MHgwMDAwOWUyMCwgMHgwMDAwMDNiNSwgMHgwMDAwMDNiNSwgMHgwMDAwMDNjZSwgMHgwMDAwMDNjZX0sCi0JezB4MDAwMDllMmMsIDB4MDAwMDAwMWMsIDB4MDAwMDAwMWMsIDB4MDAwMDAwMjEsIDB4MDAwMDAwMjF9LAotCXsweDAwMDA5ZTNjLCAweGNmOTQ2MjIwLCAweGNmOTQ2MjIwLCAweGNmOTQ2MjIyLCAweGNmOTQ2MjIyfSwKLQl7MHgwMDAwOWU0NCwgMHgwMjMyMWUyNywgMHgwMjMyMWUyNywgMHgwMjI4MjMyNCwgMHgwMjI4MjMyNH0sCi0JezB4MDAwMDllNDgsIDB4NTAzMDIwMWEsIDB4NTAzMDIwMWEsIDB4NTAzMDIwMTAsIDB4NTAzMDIwMTB9LAotCXsweDAwMDA5ZmM4LCAweDAwMDNmMDAwLCAweDAwMDNmMDAwLCAweDAwMDFhMDAwLCAweDAwMDFhMDAwfSwKLQl7MHgwMDAwYTIwNCwgMHgwMTMwM2ZjMCwgMHgwMTMwM2ZjNCwgMHgwMTMwM2ZjNCwgMHgwMTMwM2ZjMH0sCi0JezB4MDAwMGEyMDgsIDB4MDAwMDAxMDQsIDB4MDAwMDAxMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDR9LAotCXsweDAwMDBhMjMwLCAweDAwMDA0MDBhLCAweDAwMDA0MDE0LCAweDAwMDA0MDE2LCAweDAwMDA0MDBifSwKLQl7MHgwMDAwYTIzNCwgMHgxMDAwMGZmZiwgMHgxMDAwMGZmZiwgMHgxMDAwMGZmZiwgMHgxMDAwMGZmZn0sCi0JezB4MDAwMGEyMzgsIDB4ZmZiODEwMTgsIDB4ZmZiODEwMTgsIDB4ZmZiODEwMTgsIDB4ZmZiODEwMTh9LAotCXsweDAwMDBhMjUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMjEwLCAweDAwMDAwMTA4fSwKLQl7MHgwMDAwYTI1NCwgMHgwMDAwMDdkMCwgMHgwMDAwMGZhMCwgMHgwMDAwMTEzMCwgMHgwMDAwMDg5OH0sCi0JezB4MDAwMGEyNTgsIDB4MDIwMjAwMDIsIDB4MDIwMjAwMDIsIDB4MDIwMjAwMDIsIDB4MDIwMjAwMDJ9LAotCXsweDAwMDBhMjVjLCAweDAxMDAwZTBlLCAweDAxMDAwZTBlLCAweDAxMDAwZTBlLCAweDAxMDAwZTBlfSwKLQl7MHgwMDAwYTI2MCwgMHgzYTAyMTUwMSwgMHgzYTAyMTUwMSwgMHgzYTAyMTUwMSwgMHgzYTAyMTUwMX0sCi0JezB4MDAwMGEyNjQsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGV9LAotCXsweDAwMDBhMjgwLCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDBiLCAweDAwMDAwMDBifSwKLQl7MHgwMDAwYTI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDJhMCwgMHgwMDAwMDJhMH0sCi0JezB4MDAwMGEyODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMjhjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTJjNCwgMHgwMDE1OGQxOCwgMHgwMDE1OGQxOCwgMHgwMDE1OGQxOCwgMHgwMDE1OGQxOH0sCi0JezB4MDAwMGEyZDAsIDB4MDAwNzE5ODEsIDB4MDAwNzE5ODEsIDB4MDAwNzE5ODEsIDB4MDAwNzE5ODJ9LAotCXsweDAwMDBhMmQ4LCAweGY5OTlhODNhLCAweGY5OTlhODNhLCAweGY5OTlhODNhLCAweGY5OTlhODNhfSwKLQl7MHgwMDAwYTM1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGJlMDQsIDB4MDA4MDIwMjAsIDB4MDA4MDIwMjAsIDB4MDA4MDIwMjAsIDB4MDA4MDIwMjB9LAotCXsweDAwMDBiZTE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgYXI5NDg1TW9kZXNfbG93X29iX2RiX3R4X2dhaW5fMV8wW11bNV0gPSB7Ci0JLyogIEFkZHIgICAgICA1R19IVDIwICAgIDVHX0hUNDAgICAgIDJHX0hUNDAgICAgIDJHX0hUMjAgICAqLwotCXsweDAwMDBhNDEwLCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ4LCAweDAwMDA1MGQ4fSwKLQl7MHgwMDAwYTUwMCwgMHgwMDAyMjIwMCwgMHgwMDAyMjIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE1MDQsIDB4MDUwNjIwMDIsIDB4MDUwNjIwMDIsIDB4MDQwMDAwMDIsIDB4MDQwMDAwMDJ9LAotCXsweDAwMDBhNTA4LCAweDBjMDAyZTAwLCAweDBjMDAyZTAwLCAweDA4MDAwMDA0LCAweDA4MDAwMDA0fSwKLQl7MHgwMDAwYTUwYywgMHgxMTA2MjIwMiwgMHgxMTA2MjIwMiwgMHgwZDAwMDIwMCwgMHgwZDAwMDIwMH0sCi0JezB4MDAwMGE1MTAsIDB4MTcwMjJlMDAsIDB4MTcwMjJlMDAsIDB4MTEwMDAyMDIsIDB4MTEwMDAyMDJ9LAotCXsweDAwMDBhNTE0LCAweDFkMDAwZWMyLCAweDFkMDAwZWMyLCAweDE1MDAwNDAwLCAweDE1MDAwNDAwfSwKLQl7MHgwMDAwYTUxOCwgMHgyNTAyMGVjMCwgMHgyNTAyMGVjMCwgMHgxOTAwMDQwMiwgMHgxOTAwMDQwMn0sCi0JezB4MDAwMGE1MWMsIDB4MmIwMjBlYzMsIDB4MmIwMjBlYzMsIDB4MWQwMDA0MDQsIDB4MWQwMDA0MDR9LAotCXsweDAwMDBhNTIwLCAweDJmMDAxZjA0LCAweDJmMDAxZjA0LCAweDIxMDAwNjAzLCAweDIxMDAwNjAzfSwKLQl7MHgwMDAwYTUyNCwgMHgzNTAwMWZjNCwgMHgzNTAwMWZjNCwgMHgyNTAwMDYwNSwgMHgyNTAwMDYwNX0sCi0JezB4MDAwMGE1MjgsIDB4M2MwMjJmMDQsIDB4M2MwMjJmMDQsIDB4MmEwMDBhMDMsIDB4MmEwMDBhMDN9LAotCXsweDAwMDBhNTJjLCAweDQxMDIzZTg1LCAweDQxMDIzZTg1LCAweDJjMDAwYTA0LCAweDJjMDAwYTA0fSwKLQl7MHgwMDAwYTUzMCwgMHg0ODAyM2VjNiwgMHg0ODAyM2VjNiwgMHgyZTAwMGEyMCwgMHgyZTAwMGEyMH0sCi0JezB4MDAwMGE1MzQsIDB4NGQwMjNmMDEsIDB4NGQwMjNmMDEsIDB4MzQwMDBlMjAsIDB4MzQwMDBlMjB9LAotCXsweDAwMDBhNTM4LCAweDUzMDIzZjRiLCAweDUzMDIzZjRiLCAweDM4MDAwZTIyLCAweDM4MDAwZTIyfSwKLQl7MHgwMDAwYTUzYywgMHg1YTAyN2YwOSwgMHg1YTAyN2YwOSwgMHgzYzAwMGUyNCwgMHgzYzAwMGUyNH0sCi0JezB4MDAwMGE1NDAsIDB4NWYwMjdmYzksIDB4NWYwMjdmYzksIDB4NDAwMDBlMjYsIDB4NDAwMDBlMjZ9LAotCXsweDAwMDBhNTQ0LCAweDY1MDJmZWNhLCAweDY1MDJmZWNhLCAweDQzMDAxNjQwLCAweDQzMDAxNjQwfSwKLQl7MHgwMDAwYTU0OCwgMHg2YjAyZmY0YSwgMHg2YjAyZmY0YSwgMHg0NjAwMTY2MCwgMHg0NjAwMTY2MH0sCi0JezB4MDAwMGE1NGMsIDB4NzIwM2ZlY2EsIDB4NzIwM2ZlY2EsIDB4NDkwMDE4NjEsIDB4NDkwMDE4NjF9LAotCXsweDAwMDBhNTUwLCAweDc3MDNmZjBiLCAweDc3MDNmZjBiLCAweDRjMDAxYTgxLCAweDRjMDAxYTgxfSwKLQl7MHgwMDAwYTU1NCwgMHg3ZDA2ZmZjYiwgMHg3ZDA2ZmZjYiwgMHg0ZjAwMWE4MywgMHg0ZjAwMWE4M30sCi0JezB4MDAwMGE1NTgsIDB4ODQwN2ZmMGIsIDB4ODQwN2ZmMGIsIDB4NTQwMDFjODUsIDB4NTQwMDFjODV9LAotCXsweDAwMDBhNTVjLCAweDg5MDdmZmNiLCAweDg5MDdmZmNiLCAweDU4MDAxY2U1LCAweDU4MDAxY2U1fSwKLQl7MHgwMDAwYTU2MCwgMHg5MDBmZmYwYiwgMHg5MDBmZmYwYiwgMHg1YjAwMWNlOSwgMHg1YjAwMWNlOX0sCi0JezB4MDAwMGE1NjQsIDB4OTYwZmZmY2IsIDB4OTYwZmZmY2IsIDB4NjAwMDFlZWIsIDB4NjAwMDFlZWJ9LAotCXsweDAwMDBhNTY4LCAweDljMWZmZjBiLCAweDljMWZmZjBiLCAweDYwMDAxZWViLCAweDYwMDAxZWVifSwKLQl7MHgwMDAwYTU2YywgMHg5YzFmZmYwYiwgMHg5YzFmZmYwYiwgMHg2MDAwMWVlYiwgMHg2MDAwMWVlYn0sCi0JezB4MDAwMGE1NzAsIDB4OWMxZmZmMGIsIDB4OWMxZmZmMGIsIDB4NjAwMDFlZWIsIDB4NjAwMDFlZWJ9LAotCXsweDAwMDBhNTc0LCAweDljMWZmZjBiLCAweDljMWZmZjBiLCAweDYwMDAxZWViLCAweDYwMDAxZWVifSwKLQl7MHgwMDAwYTU3OCwgMHg5YzFmZmYwYiwgMHg5YzFmZmYwYiwgMHg2MDAwMWVlYiwgMHg2MDAwMWVlYn0sCi0JezB4MDAwMGE1N2MsIDB4OWMxZmZmMGIsIDB4OWMxZmZmMGIsIDB4NjAwMDFlZWIsIDB4NjAwMDFlZWJ9LAotCXsweDAwMDE2MDQ0LCAweDA1YjZiMmRiLCAweDA1YjZiMmRiLCAweDA1YjZiMmRiLCAweDA1YjZiMmRifSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgYXI5NDg1XzFfMF9wY2llX3BoeV9jbGtyZXFfZGlzYWJsZV9MMVtdWzJdID0gewotCS8qICAgQWRkciAgICAgYWxsbW9kZXMgKi8KLQl7MHgwMDAxOGMwMCwgMHgxMDIxM2U1ZX0sCi0JezB4MDAwMThjMDQsIDB4MDAwODAxZDh9LAotCXsweDAwMDE4YzA4LCAweDAwMDA1ODBjfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgYXI5NDg1XzFfMF9yYWRpb19wb3N0YW1ibGVbXVsyXSA9IHsKLQkvKiAgIEFkZHIgICAgIGFsbG1vZGVzICovCi0JezB4MDAwMTYwOWMsIDB4MGIyODNmMzF9LAotCXsweDAwMDE2MGFjLCAweDI0NjExODAwfSwKLQl7MHgwMDAxNjBiMCwgMHgwMzI4NGYzZX0sCi0JezB4MDAwMTYxMGMsIDB4MDAxNzAwMDB9LAotCXsweDAwMDE2MTQwLCAweDEwODA0MDA4fSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgYXI5NDg1XzFfMF9tYWNfY29yZVtdWzJdID0gewotCS8qICBBZGRyICAgICAgYWxsbW9kZXMgKi8KLQl7MHgwMDAwMDAwOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDAwMzAsIDB4MDAwMjAwODV9LAotCXsweDAwMDAwMDM0LCAweDAwMDAwMDA1fSwKLQl7MHgwMDAwMDA0MCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDAwNDQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDAwMDQ4LCAweDAwMDAwMDA4fSwKLQl7MHgwMDAwMDA0YywgMHgwMDAwMDAxMH0sCi0JezB4MDAwMDAwNTAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDAxMDQwLCAweDAwMmZmYzBmfSwKLQl7MHgwMDAwMTA0NCwgMHgwMDJmZmMwZn0sCi0JezB4MDAwMDEwNDgsIDB4MDAyZmZjMGZ9LAotCXsweDAwMDAxMDRjLCAweDAwMmZmYzBmfSwKLQl7MHgwMDAwMTA1MCwgMHgwMDJmZmMwZn0sCi0JezB4MDAwMDEwNTQsIDB4MDAyZmZjMGZ9LAotCXsweDAwMDAxMDU4LCAweDAwMmZmYzBmfSwKLQl7MHgwMDAwMTA1YywgMHgwMDJmZmMwZn0sCi0JezB4MDAwMDEwNjAsIDB4MDAyZmZjMGZ9LAotCXsweDAwMDAxMDY0LCAweDAwMmZmYzBmfSwKLQl7MHgwMDAwMTBmMCwgMHgwMDAwMDEwMH0sCi0JezB4MDAwMDEyNzAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDAxMmIwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwMTJmMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDE0M2MsIDB4MDAwMDAwMDB9LAotCXsweDAwMDAxNDdjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODAwMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgwMDQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MDA4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODAwYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgwMTgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MDIwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODAzOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgwM2MsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MDQwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODA0NCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgwNDgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MDRjLCAweGZmZmZmZmZmfSwKLQl7MHgwMDAwODA1NCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgwNTgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MDVjLCAweDAwMGZjNzhmfSwKLQl7MHgwMDAwODA2MCwgMHgwMDAwMDAwZn0sCi0JezB4MDAwMDgwNjQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MDcwLCAweDAwMDAwMzEwfSwKLQl7MHgwMDAwODA3NCwgMHgwMDAwMDAyMH0sCi0JezB4MDAwMDgwNzgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MDljLCAweDAwMDAwMDBmfSwKLQl7MHgwMDAwODBhMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgwYTQsIDB4MDJmZjAwMDB9LAotCXsweDAwMDA4MGE4LCAweDBlMDcwNjA1fSwKLQl7MHgwMDAwODBhYywgMHgwMDAwMDAwZH0sCi0JezB4MDAwMDgwYjAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MGI0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODBiOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgwYmMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MGMwLCAweDJhODAwMDAwfSwKLQl7MHgwMDAwODBjNCwgMHgwNjkwMDE2OH0sCi0JezB4MDAwMDgwYzgsIDB4MTM4ODFjMjB9LAotCXsweDAwMDA4MGNjLCAweDAxZjQwMDAwfSwKLQl7MHgwMDAwODBkMCwgMHgwMDI1MjUwMH0sCi0JezB4MDAwMDgwZDQsIDB4MDBhMDAwMDB9LAotCXsweDAwMDA4MGQ4LCAweDAwNDAwMDAwfSwKLQl7MHgwMDAwODBkYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgwZTAsIDB4ZmZmZmZmZmZ9LAotCXsweDAwMDA4MGU0LCAweDAwMDBmZmZmfSwKLQl7MHgwMDAwODBlOCwgMHgzZjNmM2YzZn0sCi0JezB4MDAwMDgwZWMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MGYwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODBmNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgwZmMsIDB4MDAwMjAwMDB9LAotCXsweDAwMDA4MTAwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODEwOCwgMHgwMDAwMDA1Mn0sCi0JezB4MDAwMDgxMGMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MTEwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODExNCwgMHgwMDAwMDdmZn0sCi0JezB4MDAwMDgxMTgsIDB4MDAwMDAwYWF9LAotCXsweDAwMDA4MTFjLCAweDAwMDAzMjEwfSwKLQl7MHgwMDAwODEyNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgxMjgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MTJjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODEzMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgxMzQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MTM4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODEzYywgMHgwMDAwZmZmZn0sCi0JezB4MDAwMDgxNDQsIDB4ZmZmZmZmZmZ9LAotCXsweDAwMDA4MTY4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODE2YywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgxNzAsIDB4MTg0ODYyMDB9LAotCXsweDAwMDA4MTc0LCAweDMzMzMyMjEwfSwKLQl7MHgwMDAwODE3OCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgxN2MsIDB4MDAwMjAwMDB9LAotCXsweDAwMDA4MWMwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODFjNCwgMHgzMzMzMjIxMH0sCi0JezB4MDAwMDgxYzgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MWNjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODFkNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgxZWMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MWYwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODFmNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgxZjgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MWZjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODI0MCwgMHgwMDEwMDAwMH0sCi0JezB4MDAwMDgyNDQsIDB4MDAxMGY0MDB9LAotCXsweDAwMDA4MjQ4LCAweDAwMDAwODAwfSwKLQl7MHgwMDAwODI0YywgMHgwMDAxZTgwMH0sCi0JezB4MDAwMDgyNTAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MjU0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODI1OCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgyNWMsIDB4NDAwMDAwMDB9LAotCXsweDAwMDA4MjYwLCAweDAwMDgwOTIyfSwKLQl7MHgwMDAwODI2NCwgMHg5Y2EwMDAxMH0sCi0JezB4MDAwMDgyNjgsIDB4ZmZmZmZmZmZ9LAotCXsweDAwMDA4MjZjLCAweDAwMDBmZmZmfSwKLQl7MHgwMDAwODI3MCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgyNzQsIDB4NDAwMDAwMDB9LAotCXsweDAwMDA4Mjc4LCAweDAwM2U0MTgwfSwKLQl7MHgwMDAwODI3YywgMHgwMDAwMDAwNH0sCi0JezB4MDAwMDgyODQsIDB4MDAwMDAwMmN9LAotCXsweDAwMDA4Mjg4LCAweDAwMDAwMDJjfSwKLQl7MHgwMDAwODI4YywgMHgwMDAwMDBmZn0sCi0JezB4MDAwMDgyOTQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4Mjk4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODI5YywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgzMDAsIDB4MDAwMDAxNDB9LAotCXsweDAwMDA4MzE0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODMxYywgMHgwMDAwMDEwZH0sCi0JezB4MDAwMDgzMjgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MzJjLCAweDAwMDAwMDA3fSwKLQl7MHgwMDAwODMzMCwgMHgwMDAwMDMwMn0sCi0JezB4MDAwMDgzMzQsIDB4MDAwMDA3MDB9LAotCXsweDAwMDA4MzM4LCAweDAwZmYwMDAwfSwKLQl7MHgwMDAwODMzYywgMHgwMjQwMDAwMH0sCi0JezB4MDAwMDgzNDAsIDB4MDAwMTA3ZmZ9LAotCXsweDAwMDA4MzQ0LCAweGEyNDgxMDVifSwKLQl7MHgwMDAwODM0OCwgMHgwMDhmMDAwMH0sCi0JezB4MDAwMDgzNWMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MzYwLCAweGZmZmZmZmZmfSwKLQl7MHgwMDAwODM2NCwgMHhmZmZmZmZmZn0sCi0JezB4MDAwMDgzNjgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MzcwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODM3NCwgMHgwMDAwMDBmZn0sCi0JezB4MDAwMDgzNzgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MzdjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODM4MCwgMHhmZmZmZmZmZn0sCi0JezB4MDAwMDgzODQsIDB4ZmZmZmZmZmZ9LAotCXsweDAwMDA4MzkwLCAweGZmZmZmZmZmfSwKLQl7MHgwMDAwODM5NCwgMHhmZmZmZmZmZn0sCi0JezB4MDAwMDgzOTgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MzljLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODNhMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgzYTQsIDB4MDAwMGZhMTR9LAotCXsweDAwMDA4M2E4LCAweDAwMGYwYzAwfSwKLQl7MHgwMDAwODNhYywgMHgzMzMzMjIxMH0sCi0JezB4MDAwMDgzYjAsIDB4MzMzMzIyMTB9LAotCXsweDAwMDA4M2I0LCAweDMzMzMyMjEwfSwKLQl7MHgwMDAwODNiOCwgMHgzMzMzMjIxMH0sCi0JezB4MDAwMDgzYmMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4M2MwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODNjNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgzYzgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4M2NjLCAweDAwMDAwMjAwfSwKLQl7MHgwMDAwODNkMCwgMHgwMDAzMDFmZn0sCi19OwotCiBzdGF0aWMgY29uc3QgdTMyIGFyOTQ4NV8xXzFfbWFjX2NvcmVbXVsyXSA9IHsKIAkvKiAgQWRkciAgICAgICBhbGxtb2RlcyAqLwogCXsweDAwMDAwMDA4LCAweDAwMDAwMDAwfSwKQEAgLTEzMjEsNyArMzk2LDcgQEAKIAl7MHgwMDAwYTU0YywgMHg3MjAzZmVjYSwgMHg3MjAzZmVjYSwgMHg1MTAwMTg2NSwgMHg1MTAwMTg2NX0sCiAJezB4MDAwMGE1NTAsIDB4NzcwM2ZmMGIsIDB4NzcwM2ZmMGIsIDB4NTUwMDFhODYsIDB4NTUwMDFhODZ9LAogCXsweDAwMDBhNTU0LCAweDdkMDZmZmNiLCAweDdkMDZmZmNiLCAweDU3MDAxY2U5LCAweDU3MDAxY2U5fSwKLQl7MHgwMDAwYTU1OCwgMHg4NDA3ZmYwYiwgMHg4NDA3ZmYwYiwgMHg1YTAwMWVlYiwgMHg1YTAwMWVlYn0sCisJezB4MDAwMGE1NTgsIDB4ODQwN2ZmMGIsIDB4ODQwN2ZmMGIsIDB4NWEwMDFjZWIsIDB4NWEwMDFjZWJ9LAogCXsweDAwMDBhNTVjLCAweDg5MDdmZmNiLCAweDg5MDdmZmNiLCAweDVlMDAxZWViLCAweDVlMDAxZWVifSwKIAl7MHgwMDAwYTU2MCwgMHg5MDBmZmYwYiwgMHg5MDBmZmYwYiwgMHg1ZTAwMWVlYiwgMHg1ZTAwMWVlYn0sCiAJezB4MDAwMGE1NjQsIDB4OTYwZmZmY2IsIDB4OTYwZmZmY2IsIDB4NWUwMDFlZWIsIDB4NWUwMDFlZWJ9LApAQCAtMTM5NCw3ICs0NjksNyBAQAogCXsweDAwMDBhNTRjLCAweDcyMDNmZWNhLCAweDcyMDNmZWNhLCAweDUxMDAxODY1LCAweDUxMDAxODY1fSwKIAl7MHgwMDAwYTU1MCwgMHg3NzAzZmYwYiwgMHg3NzAzZmYwYiwgMHg1NTAwMWE4NiwgMHg1NTAwMWE4Nn0sCiAJezB4MDAwMGE1NTQsIDB4N2QwNmZmY2IsIDB4N2QwNmZmY2IsIDB4NTcwMDFjZTksIDB4NTcwMDFjZTl9LAotCXsweDAwMDBhNTU4LCAweDg0MDdmZjBiLCAweDg0MDdmZjBiLCAweDVhMDAxZWViLCAweDVhMDAxZWVifSwKKwl7MHgwMDAwYTU1OCwgMHg4NDA3ZmYwYiwgMHg4NDA3ZmYwYiwgMHg1YTAwMWNlYiwgMHg1YTAwMWNlYn0sCiAJezB4MDAwMGE1NWMsIDB4ODkwN2ZmY2IsIDB4ODkwN2ZmY2IsIDB4NWUwMDFlZWIsIDB4NWUwMDFlZWJ9LAogCXsweDAwMDBhNTYwLCAweDkwMGZmZjBiLCAweDkwMGZmZjBiLCAweDVlMDAxZWViLCAweDVlMDAxZWVifSwKIAl7MHgwMDAwYTU2NCwgMHg5NjBmZmZjYiwgMHg5NjBmZmZjYiwgMHg1ZTAwMWVlYiwgMHg1ZTAwMWVlYn0sCkBAIC0xNTYwLDcgKzYzNSw3IEBACiAJezB4MDAwMGE1NGMsIDB4NzIwM2ZlY2EsIDB4NzIwM2ZlY2EsIDB4NTEwMDE4NjUsIDB4NTEwMDE4NjV9LAogCXsweDAwMDBhNTUwLCAweDc3MDNmZjBiLCAweDc3MDNmZjBiLCAweDU1MDAxYTg2LCAweDU1MDAxYTg2fSwKIAl7MHgwMDAwYTU1NCwgMHg3ZDA2ZmZjYiwgMHg3ZDA2ZmZjYiwgMHg1NzAwMWNlOSwgMHg1NzAwMWNlOX0sCi0JezB4MDAwMGE1NTgsIDB4ODQwN2ZmMGIsIDB4ODQwN2ZmMGIsIDB4NWEwMDFlZWIsIDB4NWEwMDFlZWJ9LAorCXsweDAwMDBhNTU4LCAweDg0MDdmZjBiLCAweDg0MDdmZjBiLCAweDVhMDAxY2ViLCAweDVhMDAxY2VifSwKIAl7MHgwMDAwYTU1YywgMHg4OTA3ZmZjYiwgMHg4OTA3ZmZjYiwgMHg1ZTAwMWVlYiwgMHg1ZTAwMWVlYn0sCiAJezB4MDAwMGE1NjAsIDB4OTAwZmZmMGIsIDB4OTAwZmZmMGIsIDB4NWUwMDFlZWIsIDB4NWUwMDFlZWJ9LAogCXsweDAwMDBhNTY0LCAweDk2MGZmZmNiLCAweDk2MGZmZmNiLCAweDVlMDAxZWViLCAweDVlMDAxZWVifSwKQEAgLTE2NTMsNyArNzI4LDcgQEAKIAl7MHgwMDAwYTU0YywgMHg3MjAzZmVjYSwgMHg3MjAzZmVjYSwgMHg1MTAwMTg2NSwgMHg1MTAwMTg2NX0sCiAJezB4MDAwMGE1NTAsIDB4NzcwM2ZmMGIsIDB4NzcwM2ZmMGIsIDB4NTUwMDFhODYsIDB4NTUwMDFhODZ9LAogCXsweDAwMDBhNTU0LCAweDdkMDZmZmNiLCAweDdkMDZmZmNiLCAweDU3MDAxY2U5LCAweDU3MDAxY2U5fSwKLQl7MHgwMDAwYTU1OCwgMHg4NDA3ZmYwYiwgMHg4NDA3ZmYwYiwgMHg1YTAwMWVlYiwgMHg1YTAwMWVlYn0sCisJezB4MDAwMGE1NTgsIDB4ODQwN2ZmMGIsIDB4ODQwN2ZmMGIsIDB4NWEwMDFjZWIsIDB4NWEwMDFjZWJ9LAogCXsweDAwMDBhNTVjLCAweDg5MDdmZmNiLCAweDg5MDdmZmNiLCAweDVlMDAxZWViLCAweDVlMDAxZWVifSwKIAl7MHgwMDAwYTU2MCwgMHg5MDBmZmYwYiwgMHg5MDBmZmYwYiwgMHg1ZTAwMWVlYiwgMHg1ZTAwMWVlYn0sCiAJezB4MDAwMGE1NjQsIDB4OTYwZmZmY2IsIDB4OTYwZmZmY2IsIDB4NWUwMDFlZWIsIDB4NWUwMDFlZWJ9LApAQCAtMTc1Miw3ICs4MjcsNyBAQAogCXsweDAwMDBhNTRjLCAweDcyMDNmZWNhLCAweDcyMDNmZWNhLCAweDUxMDAxODY1LCAweDUxMDAxODY1fSwKIAl7MHgwMDAwYTU1MCwgMHg3NzAzZmYwYiwgMHg3NzAzZmYwYiwgMHg1NTAwMWE4NiwgMHg1NTAwMWE4Nn0sCiAJezB4MDAwMGE1NTQsIDB4N2QwNmZmY2IsIDB4N2QwNmZmY2IsIDB4NTcwMDFjZTksIDB4NTcwMDFjZTl9LAotCXsweDAwMDBhNTU4LCAweDg0MDdmZjBiLCAweDg0MDdmZjBiLCAweDVhMDAxZWViLCAweDVhMDAxZWVifSwKKwl7MHgwMDAwYTU1OCwgMHg4NDA3ZmYwYiwgMHg4NDA3ZmYwYiwgMHg1YTAwMWNlYiwgMHg1YTAwMWNlYn0sCiAJezB4MDAwMGE1NWMsIDB4ODkwN2ZmY2IsIDB4ODkwN2ZmY2IsIDB4NWUwMDFlZWIsIDB4NWUwMDFlZWJ9LAogCXsweDAwMDBhNTYwLCAweDkwMGZmZjBiLCAweDkwMGZmZjBiLCAweDVlMDAxZWViLCAweDVlMDAxZWVifSwKIAl7MHgwMDAwYTU2NCwgMHg5NjBmZmZjYiwgMHg5NjBmZmZjYiwgMHg1ZTAwMWVlYiwgMHg1ZTAwMWVlYn0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXRoOWsuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hdGg5ay5oCmluZGV4IDA5OWJkNDEuLjAzYjM3ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hdGg5ay5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hdGg5ay5oCkBAIC02Miw3ICs2Miw2IEBACiAjZGVmaW5lCUFUSF9UWFFfU0VUVVAoc2MsIGkpICAgICAgICAoKHNjKS0+dHgudHhxc2V0dXAgJiAoMTw8aSkpCiAKIHN0cnVjdCBhdGhfY29uZmlnIHsKLQl1MzIgYXRoX2FnZ3JfcHJvdDsKIAl1MTYgdHhwb3dsaW1pdDsKIAl1OCBjYWJxUmVhZHl0aW1lOwogfTsKQEAgLTEyMCwxMyArMTE5LDExIEBACiAvKiBSWCAvIFRYICovCiAvKioqKioqKioqKiovCiAKLSNkZWZpbmUgQVRIX01BWF9BTlRFTk5BICAgICAgICAgMwogI2RlZmluZSBBVEhfUlhCVUYgICAgICAgICAgICAgICA1MTIKICNkZWZpbmUgQVRIX1RYQlVGICAgICAgICAgICAgICAgNTEyCiAjZGVmaW5lIEFUSF9UWEJVRl9SRVNFUlZFICAgICAgIDUKICNkZWZpbmUgQVRIX01BWF9RREVQVEggICAgICAgICAgKEFUSF9UWEJVRiAvIDQgLSBBVEhfVFhCVUZfUkVTRVJWRSkKICNkZWZpbmUgQVRIX1RYTUFYVFJZICAgICAgICAgICAgMTMKLSNkZWZpbmUgQVRIX01HVF9UWE1BWFRSWSAgICAgICAgNAogCiAjZGVmaW5lIFRJRF9UT19XTUVfQUMoX3RpZCkJCQkJXAogCSgoKChfdGlkKSA9PSAwKSB8fCAoKF90aWQpID09IDMpKSA/IFdNRV9BQ19CRSA6CVwKQEAgLTIwMiw2ICsxOTksNyBAQAogCWludCBzY2hlZDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCB0aWRfcTsKKwlib29sIGNsZWFyX3BzX2ZpbHRlcjsKIH07CiAKIHN0cnVjdCBhdGhfZnJhbWVfaW5mbyB7CkBAIC0yNTcsOCArMjU1LDEyIEBACiAjZW5kaWYKIAlzdHJ1Y3QgYXRoX2F0eF90aWQgdGlkW1dNRV9OVU1fVElEXTsKIAlzdHJ1Y3QgYXRoX2F0eF9hYyBhY1tXTUVfTlVNX0FDXTsKKwlpbnQgcHNfa2V5OworCiAJdTE2IG1heGFtcGR1OwogCXU4IG1wZHVkZW5zaXR5OworCisJYm9vbCBzbGVlcGluZzsKIH07CiAKICNkZWZpbmUgQUdHUl9DTEVBTlVQICAgICAgICAgQklUKDEpCkBAIC0zNDAsMTcgKzM0MiwxOCBAQAogdm9pZCBhdGhfdHhfYWdncl9zdG9wKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKTsKIHZvaWQgYXRoX3R4X2FnZ3JfcmVzdW1lKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKTsKIAordm9pZCBhdGhfdHhfYWdncl93YWtldXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4pOworYm9vbCBhdGhfdHhfYWdncl9zbGVlcChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9ub2RlICphbik7CisKIC8qKioqKioqKi8KIC8qIFZJRnMgKi8KIC8qKioqKioqKi8KIAogc3RydWN0IGF0aF92aWYgewogCWludCBhdl9ic2xvdDsKLQlib29sIGlzX2JzbG90X2FjdGl2ZTsKKwlib29sIGlzX2JzbG90X2FjdGl2ZSwgcHJpbWFyeV9zdGFfdmlmOwogCV9fbGU2NCB0c2ZfYWRqdXN0OyAvKiBUU0YgYWRqdXN0bWVudCBmb3Igc3RhZ2dlcmVkIGJlYWNvbnMgKi8KLQllbnVtIG5sODAyMTFfaWZ0eXBlIGF2X29wbW9kZTsKIAlzdHJ1Y3QgYXRoX2J1ZiAqYXZfYmNidWY7Ci0JdTggYnNzaWRbRVRIX0FMRU5dOyAvKiBjdXJyZW50IEJTU0lEIGZyb20gY29uZmlnX2ludGVyZmFjZSAqLwogfTsKIAogLyoqKioqKioqKioqKioqKioqKiovCkBAIC0zNjIsNyArMzY1LDcgQEAKICAqIG51bWJlciBvZiBCU1NJRHMpIGlmIGEgZ2l2ZW4gYmVhY29uIGRvZXMgbm90IGdvIG91dCBldmVuIGFmdGVyIHdhaXRpbmcgdGhpcwogICogbnVtYmVyIG9mIGJlYWNvbiBpbnRlcnZhbHMsIHRoZSBnYW1lJ3MgdXAuCiAgKi8KLSNkZWZpbmUgQlNUVUNLX1RIUkVTSCAgICAgICAgICAgCSg5ICogQVRIX0JDQlVGKQorI2RlZmluZSBCU1RVQ0tfVEhSRVNIICAgICAgICAgICAJOQogI2RlZmluZQlBVEhfQkNCVUYgICAgICAgICAgICAgICAJNAogI2RlZmluZSBBVEhfREVGQVVMVF9CSU5UVkFMICAgICAJMTAwIC8qIFRVICovCiAjZGVmaW5lIEFUSF9ERUZBVUxUX0JNSVNTX0xJTUlUIAkxMApAQCAtMzg2LDcgKzM4OSw3IEBACiAJdTMyIGJlYWNvbnE7CiAJdTMyIGJtaXNzY250OwogCXUzMiBhc3RfYmVfeG1pdDsKLQl1NjQgYmNfdHN0YW1wOworCXUzMiBiY190c3RhbXA7CiAJc3RydWN0IGllZWU4MDIxMV92aWYgKmJzbG90W0FUSF9CQ0JVRl07CiAJaW50IHNsb3R0aW1lOwogCWludCBzbG90dXBkYXRlOwpAQCAtNDAxLDYgKzQwNCw3IEBACiBpbnQgYXRoX2JlYWNvbl9hbGxvYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7CiB2b2lkIGF0aF9iZWFjb25fcmV0dXJuKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3ZpZiAqYXZwKTsKIGludCBhdGhfYmVhY29ucV9jb25maWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwordm9pZCBhdGhfc2V0X2JlYWNvbihzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CiB2b2lkIGF0aDlrX3NldF9iZWFjb25pbmdfc3RhdHVzKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBib29sIHN0YXR1cyk7CiAKIC8qKioqKioqLwpAQCAtNDE4LDYgKzQyMiw3IEBACiAjZGVmaW5lIEFUSF9QQVBSRF9USU1FT1VUCTEwMCAvKiBtc2VjcyAqLwogCiB2b2lkIGF0aF9od19jaGVjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwordm9pZCBhdGhfaHdfcGxsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHZvaWQgYXRoX3BhcHJkX2NhbGlicmF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogdm9pZCBhdGhfYW5pX2NhbGlicmF0ZSh1bnNpZ25lZCBsb25nIGRhdGEpOwogCkBAIC00NDgsNiArNDUzLDcgQEAKIAogI2RlZmluZSBBVEhfTEVEX1BJTl9ERUYgCQkxCiAjZGVmaW5lIEFUSF9MRURfUElOXzkyODcJCTgKKyNkZWZpbmUgQVRIX0xFRF9QSU5fOTMwMAkJMTAKICNkZWZpbmUgQVRIX0xFRF9QSU5fOTQ4NQkJNgogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFMKQEAgLTQ3Nyw3ICs0ODMsNiBAQAogI2RlZmluZSBBVEhfQU5UX0RJVl9DT01CX0FMVF9BTlRfUkFUSU8gMzAKICNkZWZpbmUgQVRIX0FOVF9ESVZfQ09NQl9BTFRfQU5UX1JBVElPMiAyMAogCi0jZGVmaW5lIEFUSF9BTlRfRElWX0NPTUJfTE5BMV9MTkEyX0RFTFRBIC0zCiAjZGVmaW5lIEFUSF9BTlRfRElWX0NPTUJfTE5BMV9MTkEyX1NXSVRDSF9ERUxUQSAtMQogI2RlZmluZSBBVEhfQU5UX0RJVl9DT01CX0xOQTFfREVMVEFfSEkgLTQKICNkZWZpbmUgQVRIX0FOVF9ESVZfQ09NQl9MTkExX0RFTFRBX01JRCAtMgpAQCAtNTUwLDYgKzU1NSw3IEBACiAjZGVmaW5lIFNDX09QX0JUX1NDQU4JCSAgICAgQklUKDEzKQogI2RlZmluZSBTQ19PUF9BTklfUlVOCQkgICAgIEJJVCgxNCkKICNkZWZpbmUgU0NfT1BfRU5BQkxFX0FQTQkgICAgIEJJVCgxNSkKKyNkZWZpbmUgU0NfT1BfUFJJTV9TVEFfVklGCSAgICAgQklUKDE2KQogCiAvKiBQb3dlcnNhdmUgZmxhZ3MgKi8KICNkZWZpbmUgUFNfV0FJVF9GT1JfQkVBQ09OICAgICAgICBCSVQoMCkKQEAgLTU1Nyw2ICs1NjMsNyBAQAogI2RlZmluZSBQU19XQUlUX0ZPUl9QU1BPTExfREFUQSAgIEJJVCgyKQogI2RlZmluZSBQU19XQUlUX0ZPUl9UWF9BQ0sgICAgICAgIEJJVCgzKQogI2RlZmluZSBQU19CRUFDT05fU1lOQyAgICAgICAgICAgIEJJVCg0KQorI2RlZmluZSBQU19UU0ZPT1JfU1lOQyAgICAgICAgICAgIEJJVCg1KQogCiBzdHJ1Y3QgYXRoX3JhdGVfdGFibGU7CiAKQEAgLTY2Nyw3ICs2NzQsNyBAQAogYm9vbCBhdGg5a19zZXRwb3dlcihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgZW51bSBhdGg5a19wb3dlcl9tb2RlIG1vZGUpOwogYm9vbCBhdGg5a191c2VzX2JlYWNvbnMoaW50IHR5cGUpOwogCi0jaWZkZWYgQ09ORklHX1BDSQorI2lmZGVmIENPTkZJR19BVEg5S19QQ0kKIGludCBhdGhfcGNpX2luaXQodm9pZCk7CiB2b2lkIGF0aF9wY2lfZXhpdCh2b2lkKTsKICNlbHNlCkBAIC02NzUsNyArNjgyLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhdGhfcGNpX2V4aXQodm9pZCkge307CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BVEhFUk9TX0FSNzFYWAorI2lmZGVmIENPTkZJR19BVEg5S19BSEIKIGludCBhdGhfYWhiX2luaXQodm9pZCk7CiB2b2lkIGF0aF9haGJfZXhpdCh2b2lkKTsKICNlbHNlCkBAIC02ODgsOCArNjk1LDYgQEAKIAogdTggYXRoX3R4Y2hhaW5tYXNrX3JlZHVjdGlvbihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgdTggY2hhaW5tYXNrLCB1MzIgcmF0ZSk7CiAKLXZvaWQgYXRoOWtfc2V0X2Jzc2lkX21hc2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwotCiB2b2lkIGF0aF9zdGFydF9yZmtpbGxfcG9sbChzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CiBleHRlcm4gdm9pZCBhdGg5a19yZmtpbGxfcG9sbF9zdGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiB2b2lkIGF0aDlrX2NhbGN1bGF0ZV9pdGVyX2RhdGEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYmVhY29uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYmVhY29uLmMKaW5kZXggNmQyYTU0NWYuLjYzN2RiYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9iZWFjb24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYmVhY29uLmMKQEAgLTU3LDggKzU3LDggQEAKIAogLyoKICAqICBBc3NvY2lhdGVzIHRoZSBiZWFjb24gZnJhbWUgYnVmZmVyIHdpdGggYSB0cmFuc21pdCBkZXNjcmlwdG9yLiAgV2lsbCBzZXQKLSAqICB1cCBhbGwgcmVxdWlyZWQgYW50ZW5uYSBzd2l0Y2ggcGFyYW1ldGVycywgcmF0ZSBjb2RlcywgYW5kIGNoYW5uZWwgZmxhZ3MuCi0gKiAgQmVhY29ucyBhcmUgYWx3YXlzIHNlbnQgb3V0IGF0IHRoZSBsb3dlc3QgcmF0ZSwgYW5kIGFyZSBub3QgcmV0cmllZC4KKyAqICB1cCByYXRlIGNvZGVzLCBhbmQgY2hhbm5lbCBmbGFncy4gQmVhY29ucyBhcmUgYWx3YXlzIHNlbnQgb3V0IGF0IHRoZQorICogIGxvd2VzdCByYXRlLCBhbmQgYXJlIG5vdCByZXRyaWVkLgogKi8KIHN0YXRpYyB2b2lkIGF0aF9iZWFjb25fc2V0dXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdmlmICphdnAsCiAJCQkgICAgIHN0cnVjdCBhdGhfYnVmICpiZiwgaW50IHJhdGVpZHgpCkBAIC02OCw3ICs2OCw3IEBACiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CiAJc3RydWN0IGF0aF9kZXNjICpkczsKIAlzdHJ1Y3QgYXRoOWtfMTFuX3JhdGVfc2VyaWVzIHNlcmllc1s0XTsKLQlpbnQgZmxhZ3MsIGFudGVubmEsIGN0c3JhdGUgPSAwLCBjdHNkdXJhdGlvbiA9IDA7CisJaW50IGZsYWdzLCBjdHNyYXRlID0gMCwgY3RzZHVyYXRpb24gPSAwOwogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwogCXU4IHJhdGUgPSAwOwogCkBAIC03NiwxMiArNzYsNiBAQAogCWZsYWdzID0gQVRIOUtfVFhERVNDX05PQUNLOwogCiAJZHMtPmRzX2xpbmsgPSAwOwotCS8qCi0JICogU3dpdGNoIGFudGVubmEgZXZlcnkgYmVhY29uLgotCSAqIFNob3VsZCBvbmx5IHN3aXRjaCBldmVyeSBiZWFjb24gcGVyaW9kLCBub3QgZm9yIGV2ZXJ5IFNXQkEKLQkgKiBYWFggYXNzdW1lcyB0d28gYW50ZW5uYWUKLQkgKi8KLQlhbnRlbm5hID0gKChzYy0+YmVhY29uLmFzdF9iZV94bWl0IC8gc2MtPm5iY252aWZzKSAmIDEgPyAyIDogMSk7CiAKIAlzYmFuZCA9ICZzYy0+c2JhbmRzW2NvbW1vbi0+aHctPmNvbmYuY2hhbm5lbC0+YmFuZF07CiAJcmF0ZSA9IHNiYW5kLT5iaXRyYXRlc1tyYXRlaWR4XS5od192YWx1ZTsKQEAgLTI3OCw3ICsyNzIsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCXRzdGFtcCA9ICgoc3RydWN0IGllZWU4MDIxMV9tZ210ICopc2tiLT5kYXRhKS0+dS5iZWFjb24udGltZXN0YW1wOwotCXNjLT5iZWFjb24uYmNfdHN0YW1wID0gbGU2NF90b19jcHUodHN0YW1wKTsKKwlzYy0+YmVhY29uLmJjX3RzdGFtcCA9ICh1MzIpIGxlNjRfdG9fY3B1KHRzdGFtcCk7CiAJLyogQ2FsY3VsYXRlIGEgVFNGIGFkanVzdG1lbnQgZmFjdG9yIHJlcXVpcmVkIGZvciBzdGFnZ2VyZWQgYmVhY29ucy4gKi8KIAlpZiAoYXZwLT5hdl9ic2xvdCA+IDApIHsKIAkJdTY0IHRzZmFkanVzdDsKQEAgLTI5NCw4ICsyODgsOCBAQAogCQkgKiBhZGp1c3RtZW50LiBPdGhlciBzbG90cyBhcmUgYWRqdXN0ZWQgdG8gZ2V0IHRoZSB0aW1lc3RhbXAKIAkJICogY2xvc2UgdG8gdGhlIFRCVFQgZm9yIHRoZSBCU1MuCiAJCSAqLwotCQl0c2ZhZGp1c3QgPSBpbnR2YWwgKiBhdnAtPmF2X2JzbG90IC8gQVRIX0JDQlVGOwotCQlhdnAtPnRzZl9hZGp1c3QgPSBjcHVfdG9fbGU2NChUVV9UT19VU0VDKHRzZmFkanVzdCkpOworCQl0c2ZhZGp1c3QgPSBUVV9UT19VU0VDKGludHZhbCAqIGF2cC0+YXZfYnNsb3QpIC8gQVRIX0JDQlVGOworCQlhdnAtPnRzZl9hZGp1c3QgPSBjcHVfdG9fbGU2NCh0c2ZhZGp1c3QpOwogCiAJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0JFQUNPTiwKIAkJCSJzdGFnZ2VyIGJlYWNvbnMsIGJzbG90ICVkIGludHZhbCAldSB0c2ZhZGp1c3QgJWxsdVxuIiwKQEAgLTMyNiw5ICszMjAsMTEgQEAKIAlpZiAoYXZwLT5hdl9iY2J1ZiAhPSBOVUxMKSB7CiAJCXN0cnVjdCBhdGhfYnVmICpiZjsKIAorCQlhdnAtPmlzX2JzbG90X2FjdGl2ZSA9IGZhbHNlOwogCQlpZiAoYXZwLT5hdl9ic2xvdCAhPSAtMSkgewogCQkJc2MtPmJlYWNvbi5ic2xvdFthdnAtPmF2X2JzbG90XSA9IE5VTEw7CiAJCQlzYy0+bmJjbnZpZnMtLTsKKwkJCWF2cC0+YXZfYnNsb3QgPSAtMTsKIAkJfQogCiAJCWJmID0gYXZwLT5hdl9iY2J1ZjsKQEAgLTM2OSwxMiArMzY1LDEzIEBACiAJaWYgKGF0aDlrX2h3X251bXR4cGVuZGluZyhhaCwgc2MtPmJlYWNvbi5iZWFjb25xKSAhPSAwKSB7CiAJCXNjLT5iZWFjb24uYm1pc3NjbnQrKzsKIAotCQlpZiAoc2MtPmJlYWNvbi5ibWlzc2NudCA8IEJTVFVDS19USFJFU0gpIHsKKwkJaWYgKHNjLT5iZWFjb24uYm1pc3NjbnQgPCBCU1RVQ0tfVEhSRVNIICogc2MtPm5iY252aWZzKSB7CiAJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19CU1RVQ0ssCiAJCQkJIm1pc3NlZCAldSBjb25zZWN1dGl2ZSBiZWFjb25zXG4iLAogCQkJCXNjLT5iZWFjb24uYm1pc3NjbnQpOwogCQkJYXRoOWtfaHdfc3RvcF9kbWFfcXVldWUoYWgsIHNjLT5iZWFjb24uYmVhY29ucSk7Ci0JCQlhdGg5a19od19ic3R1Y2tfbmZjYWwoYWgpOworCQkJaWYgKHNjLT5iZWFjb24uYm1pc3NjbnQgPiAzKQorCQkJCWF0aDlrX2h3X2JzdHVja19uZmNhbChhaCk7CiAJCX0gZWxzZSBpZiAoc2MtPmJlYWNvbi5ibWlzc2NudCA+PSBCU1RVQ0tfVEhSRVNIKSB7CiAJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19CU1RVQ0ssCiAJCQkJImJlYWNvbiBpcyBvZmZpY2lhbGx5IHN0dWNrXG4iKTsKQEAgLTM4NSwxMyArMzgyLDYgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChzYy0+YmVhY29uLmJtaXNzY250ICE9IDApIHsKLQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQlNUVUNLLAotCQkJInJlc3VtZSBiZWFjb24geG1pdCBhZnRlciAldSBtaXNzZXNcbiIsCi0JCQlzYy0+YmVhY29uLmJtaXNzY250KTsKLQkJc2MtPmJlYWNvbi5ibWlzc2NudCA9IDA7Ci0JfQotCiAJLyoKIAkgKiBHZW5lcmF0ZSBiZWFjb24gZnJhbWVzLiB3ZSBhcmUgc2VuZGluZyBmcmFtZXMKIAkgKiBzdGFnZ2VyZWQgc28gY2FsY3VsYXRlIHRoZSBzbG90IGZvciB0aGlzIGZyYW1lIGJhc2VkCkBAIC00MDEsMjEgKzM5MSwxNCBAQAogCWludHZhbCA9IGN1cl9jb25mLT5iZWFjb25faW50ZXJ2YWwgPyA6IEFUSF9ERUZBVUxUX0JJTlRWQUw7CiAKIAl0c2YgPSBhdGg5a19od19nZXR0c2Y2NChhaCk7Ci0JdHNmdHUgPSBUU0ZfVE9fVFUodHNmPj4zMiwgdHNmKTsKLQlzbG90ID0gKCh0c2Z0dSAlIGludHZhbCkgKiBBVEhfQkNCVUYpIC8gaW50dmFsOwotCS8qCi0JICogUmV2ZXJzZSB0aGUgc2xvdCBvcmRlciB0byBnZXQgc2xvdCAwIG9uIHRoZSBUQlRUIG9mZnNldCB0aGF0IGRvZXMKLQkgKiBub3QgcmVxdWlyZSBUU0YgYWRqdXN0bWVudCBhbmQgb3RoZXIgc2xvdHMgYWRkaW5nCi0JICogc2xvdC9BVEhfQkNCVUYgKiBiZWFjb25faW50IHRvIHRpbWVzdGFtcC4gRm9yIGV4YW1wbGUsIHdpdGgKLQkgKiBBVEhfQkNCVUYgPSA0LCB3ZSBwcm9jZXNzIGJlYWNvbiBzbG90cyBhcyBmb2xsb3dzOiAzIDIgMSAwIDMgMiAxIC4uCi0JICogYW5kIHNsb3QgMCBpcyBhdCBjb3JyZWN0IG9mZnNldCB0byBUQlRULgotCSAqLwotCXNsb3QgPSBBVEhfQkNCVUYgLSBzbG90IC0gMTsKKwl0c2YgKz0gVFVfVE9fVVNFQyhhaC0+Y29uZmlnLnN3X2JlYWNvbl9yZXNwb25zZV90aW1lKTsKKwl0c2Z0dSA9IFRTRl9UT19UVSgodHNmICogQVRIX0JDQlVGKSA+PjMyLCB0c2YgKiBBVEhfQkNCVUYpOworCXNsb3QgPSAodHNmdHUgJSAoaW50dmFsICogQVRIX0JDQlVGKSkgLyBpbnR2YWw7CiAJdmlmID0gc2MtPmJlYWNvbi5ic2xvdFtzbG90XTsKIAogCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0JFQUNPTiwKIAkJInNsb3QgJWQgW3RzZiAlbGx1IHRzZnR1ICV1IGludHZhbCAldV0gdmlmICVwXG4iLAotCQlzbG90LCB0c2YsIHRzZnR1LCBpbnR2YWwsIHZpZik7CisJCXNsb3QsIHRzZiwgdHNmdHUgLyBBVEhfQkNCVUYsIGludHZhbCwgdmlmKTsKIAogCWJmYWRkciA9IDA7CiAJaWYgKHZpZikgewpAQCAtNDI0LDYgKzQwNywxMyBAQAogCQkJYmZhZGRyID0gYmYtPmJmX2RhZGRyOwogCQkJYmMgPSAxOwogCQl9CisKKwkJaWYgKHNjLT5iZWFjb24uYm1pc3NjbnQgIT0gMCkgeworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQlNUVUNLLAorCQkJCSJyZXN1bWUgYmVhY29uIHhtaXQgYWZ0ZXIgJXUgbWlzc2VzXG4iLAorCQkJCXNjLT5iZWFjb24uYm1pc3NjbnQpOworCQkJc2MtPmJlYWNvbi5ibWlzc2NudCA9IDA7CisJCX0KIAl9CiAKIAkvKgpAQCAtNDYzLDEzICs0NTMsMTcgQEAKIAkJCSAgICAgIHUzMiBuZXh0X2JlYWNvbiwKIAkJCSAgICAgIHUzMiBiZWFjb25fcGVyaW9kKQogewotCWlmIChiZWFjb25fcGVyaW9kICYgQVRIOUtfQkVBQ09OX1JFU0VUX1RTRikKKwlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfVFNGX1JFU0VUKSB7CiAJCWF0aDlrX3BzX3dha2V1cChzYyk7CisJCWF0aDlrX2h3X3Jlc2V0X3RzZihzYy0+c2NfYWgpOworCX0KIAogCWF0aDlrX2h3X2JlYWNvbmluaXQoc2MtPnNjX2FoLCBuZXh0X2JlYWNvbiwgYmVhY29uX3BlcmlvZCk7CiAKLQlpZiAoYmVhY29uX3BlcmlvZCAmIEFUSDlLX0JFQUNPTl9SRVNFVF9UU0YpCisJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX1RTRl9SRVNFVCkgewogCQlhdGg5a19wc19yZXN0b3JlKHNjKTsKKwkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9UU0ZfUkVTRVQ7CisJfQogfQogCiAvKgpAQCAtNDg0LDE4ICs0NzgsMTQgQEAKIAl1MzIgbmV4dHRidHQsIGludHZhbDsKIAogCS8qIE5COiB0aGUgYmVhY29uIGludGVydmFsIGlzIGtlcHQgaW50ZXJuYWxseSBpbiBUVSdzICovCi0JaW50dmFsID0gY29uZi0+YmVhY29uX2ludGVydmFsICYgQVRIOUtfQkVBQ09OX1BFUklPRDsKKwlpbnR2YWwgPSBUVV9UT19VU0VDKGNvbmYtPmJlYWNvbl9pbnRlcnZhbCAmIEFUSDlLX0JFQUNPTl9QRVJJT0QpOwogCWludHZhbCAvPSBBVEhfQkNCVUY7ICAgIC8qIGZvciBzdGFnZ2VyZWQgYmVhY29ucyAqLwogCW5leHR0YnR0ID0gaW50dmFsOwogCi0JaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX1RTRl9SRVNFVCkKLQkJaW50dmFsIHw9IEFUSDlLX0JFQUNPTl9SRVNFVF9UU0Y7Ci0KIAkvKgogCSAqIEluIEFQIG1vZGUgd2UgZW5hYmxlIHRoZSBiZWFjb24gdGltZXJzIGFuZCBTV0JBIGludGVycnVwdHMgdG8KIAkgKiBwcmVwYXJlIGJlYWNvbiBmcmFtZXMuCiAJICovCi0JaW50dmFsIHw9IEFUSDlLX0JFQUNPTl9FTkE7CiAJYWgtPmltYXNrIHw9IEFUSDlLX0lOVF9TV0JBOwogCWF0aF9iZWFjb25xX2NvbmZpZyhzYyk7CiAKQEAgLTUwNSwxMSArNDk1LDYgQEAKIAlhdGg5a19iZWFjb25faW5pdChzYywgbmV4dHRidHQsIGludHZhbCk7CiAJc2MtPmJlYWNvbi5ibWlzc2NudCA9IDA7CiAJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIGFoLT5pbWFzayk7Ci0KLQkvKiBDbGVhciB0aGUgcmVzZXQgVFNGIGZsYWcsIHNvIHRoYXQgc3Vic2VxdWVudCBiZWFjb24gdXBkYXRpb24KLQkgICB3aWxsIG5vdCByZXNldCB0aGUgSFcgVFNGLiAqLwotCi0Jc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9UU0ZfUkVTRVQ7CiB9CiAKIC8qCkBAIC02MzUsNyArNjIwLDEzIEBACiAJYXRoOWtfaHdfZGlzYWJsZV9pbnRlcnJ1cHRzKGFoKTsKIAlhdGg5a19od19zZXRfc3RhX2JlYWNvbl90aW1lcnMoYWgsICZicyk7CiAJYWgtPmltYXNrIHw9IEFUSDlLX0lOVF9CTUlTUzsKLQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgYWgtPmltYXNrKTsKKworCS8qCisJICogSWYgdGhlIGJlYWNvbiBjb25maWcgaXMgY2FsbGVkIGJlYWNhdXNlIG9mIFRTRk9PUiwKKwkgKiBJbnRlcnJ1cHRzIHdpbGwgYmUgZW5hYmxlZCBiYWNrIGF0IHRoZSBlbmQgb2YgYXRoOWtfdGFza2xldAorCSAqLworCWlmICghKHNjLT5wc19mbGFncyAmIFBTX1RTRk9PUl9TWU5DKSkKKwkJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIGFoLT5pbWFzayk7CiB9CiAKIHN0YXRpYyB2b2lkIGF0aF9iZWFjb25fY29uZmlnX2FkaG9jKHN0cnVjdCBhdGhfc29mdGMgKnNjLApAQCAtNjQzLDI1ICs2MzQsMjAgQEAKIHsKIAlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKLQl1NjQgdHNmOwotCXUzMiB0c2Z0dSwgaW50dmFsLCBuZXh0dGJ0dDsKKwl1MzIgdHNmLCBkZWx0YSwgaW50dmFsLCBuZXh0dGJ0dDsKIAotCWludHZhbCA9IGNvbmYtPmJlYWNvbl9pbnRlcnZhbCAmIEFUSDlLX0JFQUNPTl9QRVJJT0Q7CisJdHNmID0gYXRoOWtfaHdfZ2V0dHNmMzIoYWgpICsgVFVfVE9fVVNFQyhGVURHRSk7CisJaW50dmFsID0gVFVfVE9fVVNFQyhjb25mLT5iZWFjb25faW50ZXJ2YWwgJiBBVEg5S19CRUFDT05fUEVSSU9EKTsKIAotCi0JLyogUHVsbCBuZXh0dGJ0dCBmb3J3YXJkIHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQgVFNGICovCi0KLQluZXh0dGJ0dCA9IFRTRl9UT19UVShzYy0+YmVhY29uLmJjX3RzdGFtcCA+PiAzMiwgc2MtPmJlYWNvbi5iY190c3RhbXApOwotCWlmIChuZXh0dGJ0dCA9PSAwKQotICAgICAgICAgICAgICAgIG5leHR0YnR0ID0gaW50dmFsOwotICAgICAgICBlbHNlIGlmIChpbnR2YWwpCi0gICAgICAgICAgICAgICAgbmV4dHRidHQgPSByb3VuZHVwKG5leHR0YnR0LCBpbnR2YWwpOwotCi0JdHNmID0gYXRoOWtfaHdfZ2V0dHNmNjQoYWgpOwotCXRzZnR1ID0gVFNGX1RPX1RVKCh1MzIpKHRzZj4+MzIpLCAodTMyKXRzZikgKyBGVURHRTsKLQlkbyB7Ci0JCW5leHR0YnR0ICs9IGludHZhbDsKLQl9IHdoaWxlIChuZXh0dGJ0dCA8IHRzZnR1KTsKKwlpZiAoIXNjLT5iZWFjb24uYmNfdHN0YW1wKQorCQluZXh0dGJ0dCA9IHRzZiArIGludHZhbDsKKwllbHNlIHsKKwkJaWYgKHRzZiA+IHNjLT5iZWFjb24uYmNfdHN0YW1wKQorCQkJZGVsdGEgPSAodHNmIC0gc2MtPmJlYWNvbi5iY190c3RhbXApOworCQllbHNlCisJCQlkZWx0YSA9ICh0c2YgKyAxICsgKH4wVSAtIHNjLT5iZWFjb24uYmNfdHN0YW1wKSk7CisJCW5leHR0YnR0ID0gdHNmICsgcm91bmR1cChkZWx0YSwgaW50dmFsKTsKKwl9CiAKIAlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19CRUFDT04sCiAJCSJJQlNTIG5leHR0YnR0ICV1IGludHZhbCAldSAoJXUpXG4iLApAQCAtNjcyLDcgKzY1OCw2IEBACiAJICogaWYgd2UgbmVlZCB0byBtYW51YWxseSBwcmVwYXJlIGJlYWNvbiBmcmFtZXMuICBPdGhlcndpc2Ugd2UgdXNlIGEKIAkgKiBzZWxmLWxpbmtlZCB0eCBkZXNjcmlwdG9yIGFuZCBsZXQgdGhlIGhhcmR3YXJlIGRlYWwgd2l0aCB0aGluZ3MuCiAJICovCi0JaW50dmFsIHw9IEFUSDlLX0JFQUNPTl9FTkE7CiAJYWgtPmltYXNrIHw9IEFUSDlLX0lOVF9TV0JBOwogCiAJYXRoX2JlYWNvbnFfY29uZmlnKHNjKTsKQEAgLTY4MiwyNSArNjY3LDcxIEBACiAJYXRoOWtfaHdfZGlzYWJsZV9pbnRlcnJ1cHRzKGFoKTsKIAlhdGg5a19iZWFjb25faW5pdChzYywgbmV4dHRidHQsIGludHZhbCk7CiAJc2MtPmJlYWNvbi5ibWlzc2NudCA9IDA7Ci0JYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIGFoLT5pbWFzayk7CisJLyoKKwkgKiBJZiB0aGUgYmVhY29uIGNvbmZpZyBpcyBjYWxsZWQgYmVhY2F1c2Ugb2YgVFNGT09SLAorCSAqIEludGVycnVwdHMgd2lsbCBiZSBlbmFibGVkIGJhY2sgYXQgdGhlIGVuZCBvZiBhdGg5a190YXNrbGV0CisJICovCisJaWYgKCEoc2MtPnBzX2ZsYWdzICYgUFNfVFNGT09SX1NZTkMpKQorCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgYWgtPmltYXNrKTsKK30KKworc3RhdGljIGJvb2wgYXRoOWtfYWxsb3dfYmVhY29uX2NvbmZpZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXN0cnVjdCBhdGhfYmVhY29uX2NvbmZpZyAqY3VyX2NvbmYgPSAmc2MtPmN1cl9iZWFjb25fY29uZjsKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHNjLT5zY19haCk7CisJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYgPSAmdmlmLT5ic3NfY29uZjsKKwlzdHJ1Y3QgYXRoX3ZpZiAqYXZwID0gKHZvaWQgKil2aWYtPmRydl9wcml2OworCisJLyoKKwkgKiBDYW4gbm90IGhhdmUgZGlmZmVyZW50IGJlYWNvbiBpbnRlcnZhbCBvbiBtdWx0aXBsZQorCSAqIEFQIGludGVyZmFjZSBjYXNlCisJICovCisJaWYgKChzYy0+c2NfYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgJiYKKwkgICAgKHNjLT5uYmNudmlmcyA+IDEpICYmCisJICAgICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApICYmCisJICAgIChjdXJfY29uZi0+YmVhY29uX2ludGVydmFsICE9IGJzc19jb25mLT5iZWFjb25faW50KSkgeworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DT05GSUcsCisJCQkiQ2hhbmdpbmcgYmVhY29uIGludGVydmFsIG9mIG11bHRpcGxlIFwKKwkJCUFQIGludGVyZmFjZXMgIVxuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisJLyoKKwkgKiBDYW4gbm90IGNvbmZpZ3VyZSBzdGF0aW9uIHZpZidzIGJlYWNvbiBjb25maWcKKwkgKiB3aGlsZSBvbiBBUCBvcG1vZGUKKwkgKi8KKwlpZiAoKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSAmJgorCSAgICAodmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKSkgeworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DT05GSUcsCisJCQkiU1RBIHZpZidzIGJlYWNvbiBub3QgYWxsb3dlZCBvbiBBUCBtb2RlXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwkvKgorCSAqIERvIG5vdCBhbGxvdyBiZWFjb24gY29uZmlnIGlmIEhXIHdhcyBhbHJlYWR5IGNvbmZpZ3VyZWQKKwkgKiB3aXRoIGFub3RoZXIgU1RBIHZpZgorCSAqLworCWlmICgoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgJiYKKwkgICAgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSAmJgorCSAgICAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfQkVBQ09OUykgJiYKKwkgICAgIWF2cC0+cHJpbWFyeV9zdGFfdmlmKSB7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKKwkJCSJCZWFjb24gYWxyZWFkeSBjb25maWd1cmVkIGZvciBhIHN0YXRpb24gaW50ZXJmYWNlXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlyZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBhdGhfYmVhY29uX2NvbmZpZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3QgYXRoX2JlYWNvbl9jb25maWcgKmN1cl9jb25mID0gJnNjLT5jdXJfYmVhY29uX2NvbmY7Ci0Jc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpOwotCWVudW0gbmw4MDIxMV9pZnR5cGUgaWZ0eXBlOworCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mID0gJnZpZi0+YnNzX2NvbmY7CisKKwlpZiAoIWF0aDlrX2FsbG93X2JlYWNvbl9jb25maWcoc2MsIHZpZikpCisJCXJldHVybjsKIAogCS8qIFNldHVwIHRoZSBiZWFjb24gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzICovCi0JaWYgKHZpZikgewotCQlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiA9ICZ2aWYtPmJzc19jb25mOwotCQlpZnR5cGUgPSB2aWYtPnR5cGU7Ci0JCWN1cl9jb25mLT5iZWFjb25faW50ZXJ2YWwgPSBic3NfY29uZi0+YmVhY29uX2ludDsKLQkJY3VyX2NvbmYtPmR0aW1fcGVyaW9kID0gYnNzX2NvbmYtPmR0aW1fcGVyaW9kOwotCX0gZWxzZSB7Ci0JCWlmdHlwZSA9IHNjLT5zY19haC0+b3Btb2RlOwotCX0KLQorCWN1cl9jb25mLT5iZWFjb25faW50ZXJ2YWwgPSBic3NfY29uZi0+YmVhY29uX2ludDsKKwljdXJfY29uZi0+ZHRpbV9wZXJpb2QgPSBic3NfY29uZi0+ZHRpbV9wZXJpb2Q7CiAJY3VyX2NvbmYtPmxpc3Rlbl9pbnRlcnZhbCA9IDE7CiAJY3VyX2NvbmYtPmR0aW1fY291bnQgPSAxOwogCWN1cl9jb25mLT5ibWlzc190aW1lb3V0ID0KQEAgLTcyMyw5ICs3NTQsMzcgQEAKIAlpZiAoY3VyX2NvbmYtPmR0aW1fcGVyaW9kID09IDApCiAJCWN1cl9jb25mLT5kdGltX3BlcmlvZCA9IDE7CiAKLQlzd2l0Y2ggKGlmdHlwZSkgeworCWF0aF9zZXRfYmVhY29uKHNjKTsKK30KKworc3RhdGljIGJvb2wgYXRoX2hhc192YWxpZF9ic2xvdChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgYXRoX3ZpZiAqYXZwOworCWludCBzbG90OworCWJvb2wgZm91bmQgPSBmYWxzZTsKKworCWZvciAoc2xvdCA9IDA7IHNsb3QgPCBBVEhfQkNCVUY7IHNsb3QrKykgeworCQlpZiAoc2MtPmJlYWNvbi5ic2xvdFtzbG90XSkgeworCQkJYXZwID0gKHZvaWQgKilzYy0+YmVhY29uLmJzbG90W3Nsb3RdLT5kcnZfcHJpdjsKKwkJCWlmIChhdnAtPmlzX2JzbG90X2FjdGl2ZSkgeworCQkJCWZvdW5kID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gZm91bmQ7Cit9CisKKwordm9pZCBhdGhfc2V0X2JlYWNvbihzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHNjLT5zY19haCk7CisJc3RydWN0IGF0aF9iZWFjb25fY29uZmlnICpjdXJfY29uZiA9ICZzYy0+Y3VyX2JlYWNvbl9jb25mOworCisJc3dpdGNoIChzYy0+c2NfYWgtPm9wbW9kZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6Ci0JCWF0aF9iZWFjb25fY29uZmlnX2FwKHNjLCBjdXJfY29uZik7CisJCWlmIChhdGhfaGFzX3ZhbGlkX2JzbG90KHNjKSkKKwkJCWF0aF9iZWFjb25fY29uZmlnX2FwKHNjLCBjdXJfY29uZik7CiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgpAQCAtNzQ2LDI2ICs4MDUsMTUgQEAKIHZvaWQgYXRoOWtfc2V0X2JlYWNvbmluZ19zdGF0dXMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgc3RhdHVzKQogewogCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwotCXN0cnVjdCBhdGhfdmlmICphdnA7Ci0JaW50IHNsb3Q7Ci0JYm9vbCBmb3VuZCA9IGZhbHNlOworCisJaWYgKCFhdGhfaGFzX3ZhbGlkX2JzbG90KHNjKSkKKwkJcmV0dXJuOwogCiAJYXRoOWtfcHNfd2FrZXVwKHNjKTsKIAlpZiAoc3RhdHVzKSB7Ci0JCWZvciAoc2xvdCA9IDA7IHNsb3QgPCBBVEhfQkNCVUY7IHNsb3QrKykgewotCQkJaWYgKHNjLT5iZWFjb24uYnNsb3Rbc2xvdF0pIHsKLQkJCQlhdnAgPSAodm9pZCAqKXNjLT5iZWFjb24uYnNsb3Rbc2xvdF0tPmRydl9wcml2OwotCQkJCWlmIChhdnAtPmlzX2JzbG90X2FjdGl2ZSkgewotCQkJCQlmb3VuZCA9IHRydWU7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCQlpZiAoZm91bmQpIHsKLQkJCS8qIFJlLWVuYWJsZSBiZWFjb25pbmcgKi8KLQkJCWFoLT5pbWFzayB8PSBBVEg5S19JTlRfU1dCQTsKLQkJCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBhaC0+aW1hc2spOwotCQl9CisJCS8qIFJlLWVuYWJsZSBiZWFjb25pbmcgKi8KKwkJYWgtPmltYXNrIHw9IEFUSDlLX0lOVF9TV0JBOworCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgYWgtPmltYXNrKTsKIAl9IGVsc2UgewogCQkvKiBEaXNhYmxlIFNXQkEgaW50ZXJydXB0ICovCiAJCWFoLT5pbWFzayAmPSB+QVRIOUtfSU5UX1NXQkE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYnRjb2V4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYnRjb2V4LmMKaW5kZXggZDMzYmYyMC4uMjNmMTVhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2J0Y29leC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9idGNvZXguYwpAQCAtNTEsNiArNTEsMTAgQEAKIAkJLmJ0X2hvbGRfcnhfY2xlYXIgPSB0cnVlLAogCX07CiAJdTMyIGk7CisJYm9vbCByeGNsZWFyX3BvbGFyaXR5ID0gYXRoX2J0X2NvbmZpZy5idF9yeGNsZWFyX3BvbGFyaXR5OworCisJaWYgKEFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkpCisJCXJ4Y2xlYXJfcG9sYXJpdHkgPSAhYXRoX2J0X2NvbmZpZy5idF9yeGNsZWFyX3BvbGFyaXR5OwogCiAJYnRjb2V4X2h3LT5idF9jb2V4X21vZGUgPQogCQkoYnRjb2V4X2h3LT5idF9jb2V4X21vZGUgJiBBUl9CVF9RQ1VfVEhSRVNIKSB8CkBAIC01OSw3ICs2Myw3IEBACiAJCVNNKGF0aF9idF9jb25maWcuYnRfdHhmcmFtZV9leHRlbmQsIEFSX0JUX1RYX0ZSQU1FX0VYVEVORCkgfAogCQlTTShhdGhfYnRfY29uZmlnLmJ0X21vZGUsIEFSX0JUX01PREUpIHwKIAkJU00oYXRoX2J0X2NvbmZpZy5idF9xdWlldF9jb2xsaXNpb24sIEFSX0JUX1FVSUVUKSB8Ci0JCVNNKGF0aF9idF9jb25maWcuYnRfcnhjbGVhcl9wb2xhcml0eSwgQVJfQlRfUlhfQ0xFQVJfUE9MQVJJVFkpIHwKKwkJU00ocnhjbGVhcl9wb2xhcml0eSwgQVJfQlRfUlhfQ0xFQVJfUE9MQVJJVFkpIHwKIAkJU00oYXRoX2J0X2NvbmZpZy5idF9wcmlvcml0eV90aW1lLCBBUl9CVF9QUklPUklUWV9USU1FKSB8CiAJCVNNKGF0aF9idF9jb25maWcuYnRfZmlyc3Rfc2xvdF90aW1lLCBBUl9CVF9GSVJTVF9TTE9UX1RJTUUpIHwKIAkJU00ocW51bSwgQVJfQlRfUUNVX1RIUkVTSCk7CkBAIC0xNDIsNiArMTQ2LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woYXRoOWtfaHdfYnRjb2V4X3NldF93ZWlnaHQpOwogCisKIHN0YXRpYyB2b2lkIGF0aDlrX2h3X2J0Y29leF9lbmFibGVfM3dpcmUoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJc3RydWN0IGF0aF9idGNvZXhfaHcgKmJ0Y29leF9odyA9ICZhaC0+YnRjb2V4X2h3OwpAQCAtMTUyLDkgKzE1NywyMiBAQAogCSAqIGVuYWJsZSBjb2V4IDMtd2lyZQogCSAqLwogCVJFR19XUklURShhaCwgQVJfQlRfQ09FWF9NT0RFLCBidGNvZXhfaHctPmJ0X2NvZXhfbW9kZSk7Ci0JUkVHX1dSSVRFKGFoLCBBUl9CVF9DT0VYX1dFSUdIVCwgYnRjb2V4X2h3LT5idF9jb2V4X3dlaWdodHMpOwogCVJFR19XUklURShhaCwgQVJfQlRfQ09FWF9NT0RFMiwgYnRjb2V4X2h3LT5idF9jb2V4X21vZGUyKTsKIAorCisJaWYgKEFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkpIHsKKwkJUkVHX1dSSVRFKGFoLCBBUl9CVF9DT0VYX1dMX1dFSUdIVFMwLCBhaC0+YnRfY29leF93bGFuX3dlaWdodFswXSk7CisJCVJFR19XUklURShhaCwgQVJfQlRfQ09FWF9XTF9XRUlHSFRTMSwgYWgtPmJ0X2NvZXhfd2xhbl93ZWlnaHRbMV0pOworCQlSRUdfV1JJVEUoYWgsIEFSX0JUX0NPRVhfQlRfV0VJR0hUUzAsIGFoLT5idF9jb2V4X2J0X3dlaWdodFswXSk7CisJCVJFR19XUklURShhaCwgQVJfQlRfQ09FWF9CVF9XRUlHSFRTMSwgYWgtPmJ0X2NvZXhfYnRfd2VpZ2h0WzFdKTsKKwkJUkVHX1dSSVRFKGFoLCBBUl9CVF9DT0VYX0JUX1dFSUdIVFMyLCBhaC0+YnRfY29leF9idF93ZWlnaHRbMl0pOworCQlSRUdfV1JJVEUoYWgsIEFSX0JUX0NPRVhfQlRfV0VJR0hUUzMsIGFoLT5idF9jb2V4X2J0X3dlaWdodFszXSk7CisKKwl9IGVsc2UKKwkJUkVHX1dSSVRFKGFoLCBBUl9CVF9DT0VYX1dFSUdIVCwgYnRjb2V4X2h3LT5idF9jb2V4X3dlaWdodHMpOworCisKKwogCWlmIChBUl9TUkVWXzkyNzEoYWgpKSB7CiAJCXZhbCA9IFJFR19SRUFEKGFoLCAweDUwMDQwKTsKIAkJdmFsICY9IDB4RkZGRkZFRkY7CkBAIC0yMDIsMTAgKzIyMCw4NiBAQAogCiAJaWYgKGJ0Y29leF9ody0+c2NoZW1lID09IEFUSF9CVENPRVhfQ0ZHXzNXSVJFKSB7CiAJCVJFR19XUklURShhaCwgQVJfQlRfQ09FWF9NT0RFLCBBUl9CVF9RVUlFVCB8IEFSX0JUX01PREUpOwotCQlSRUdfV1JJVEUoYWgsIEFSX0JUX0NPRVhfV0VJR0hULCAwKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9CVF9DT0VYX01PREUyLCAwKTsKKworCQlpZiAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSkgeworCQkJUkVHX1dSSVRFKGFoLCBBUl9CVF9DT0VYX1dMX1dFSUdIVFMwLCAwKTsKKwkJCVJFR19XUklURShhaCwgQVJfQlRfQ09FWF9XTF9XRUlHSFRTMSwgMCk7CisJCQlSRUdfV1JJVEUoYWgsIEFSX0JUX0NPRVhfQlRfV0VJR0hUUzAsIDApOworCQkJUkVHX1dSSVRFKGFoLCBBUl9CVF9DT0VYX0JUX1dFSUdIVFMxLCAwKTsKKwkJCVJFR19XUklURShhaCwgQVJfQlRfQ09FWF9CVF9XRUlHSFRTMiwgMCk7CisJCQlSRUdfV1JJVEUoYWgsIEFSX0JUX0NPRVhfQlRfV0VJR0hUUzMsIDApOworCQl9IGVsc2UKKwkJCVJFR19XUklURShhaCwgQVJfQlRfQ09FWF9XRUlHSFQsIDApOworCiAJfQogCiAJYWgtPmJ0Y29leF9ody5lbmFibGVkID0gZmFsc2U7CiB9CiBFWFBPUlRfU1lNQk9MKGF0aDlrX2h3X2J0Y29leF9kaXNhYmxlKTsKKworc3RhdGljIHZvaWQgYXI5MDAzX2J0Y29leF9idF9zdG9tcChzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCSBlbnVtIGF0aF9zdG9tcF90eXBlIHN0b21wX3R5cGUpCit7CisJYWgtPmJ0X2NvZXhfYnRfd2VpZ2h0WzBdID0gQVI5MzAwX0JUX1dHSFQ7CisJYWgtPmJ0X2NvZXhfYnRfd2VpZ2h0WzFdID0gQVI5MzAwX0JUX1dHSFQ7CisJYWgtPmJ0X2NvZXhfYnRfd2VpZ2h0WzJdID0gQVI5MzAwX0JUX1dHSFQ7CisJYWgtPmJ0X2NvZXhfYnRfd2VpZ2h0WzNdID0gQVI5MzAwX0JUX1dHSFQ7CisKKworCXN3aXRjaCAoc3RvbXBfdHlwZSkgeworCWNhc2UgQVRIX0JUQ09FWF9TVE9NUF9BTEw6CisJCWFoLT5idF9jb2V4X3dsYW5fd2VpZ2h0WzBdID0gQVI5MzAwX1NUT01QX0FMTF9XTEFOX1dHSFQwOworCQlhaC0+YnRfY29leF93bGFuX3dlaWdodFsxXSA9IEFSOTMwMF9TVE9NUF9BTExfV0xBTl9XR0hUMTsKKwkJYnJlYWs7CisJY2FzZSBBVEhfQlRDT0VYX1NUT01QX0xPVzoKKwkJYWgtPmJ0X2NvZXhfd2xhbl93ZWlnaHRbMF0gPSBBUjkzMDBfU1RPTVBfTE9XX1dMQU5fV0dIVDA7CisJCWFoLT5idF9jb2V4X3dsYW5fd2VpZ2h0WzFdID0gQVI5MzAwX1NUT01QX0xPV19XTEFOX1dHSFQxOworCQlicmVhazsKKwljYXNlIEFUSF9CVENPRVhfU1RPTVBfTk9ORToKKwkJYWgtPmJ0X2NvZXhfd2xhbl93ZWlnaHRbMF0gPSBBUjkzMDBfU1RPTVBfTk9ORV9XTEFOX1dHSFQwOworCQlhaC0+YnRfY29leF93bGFuX3dlaWdodFsxXSA9IEFSOTMwMF9TVE9NUF9OT05FX1dMQU5fV0dIVDE7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYXRoX2RiZyhhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX0JUQ09FWCwKKwkJCQkiSW52YWxpZCBTdG9tcHR5cGVcbiIpOworCQlicmVhazsKKwl9CisKKwlhdGg5a19od19idGNvZXhfZW5hYmxlKGFoKTsKK30KKworLyoKKyAqIENvbmZpZ3VyZXMgYXBwcm9wcmlhdGUgd2VpZ2h0IGJhc2VkIG9uIHN0b21wIHR5cGUuCisgKi8KK3ZvaWQgYXRoOWtfaHdfYnRjb2V4X2J0X3N0b21wKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJICAgICAgZW51bSBhdGhfc3RvbXBfdHlwZSBzdG9tcF90eXBlKQoreworCWlmIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpKSB7CisJCWFyOTAwM19idGNvZXhfYnRfc3RvbXAoYWgsIHN0b21wX3R5cGUpOworCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChzdG9tcF90eXBlKSB7CisJY2FzZSBBVEhfQlRDT0VYX1NUT01QX0FMTDoKKwkJYXRoOWtfaHdfYnRjb2V4X3NldF93ZWlnaHQoYWgsIEFSX0JUX0NPRVhfV0dIVCwKKwkJCQlBUl9TVE9NUF9BTExfV0xBTl9XR0hUKTsKKwkJYnJlYWs7CisJY2FzZSBBVEhfQlRDT0VYX1NUT01QX0xPVzoKKwkJYXRoOWtfaHdfYnRjb2V4X3NldF93ZWlnaHQoYWgsIEFSX0JUX0NPRVhfV0dIVCwKKwkJCQlBUl9TVE9NUF9MT1dfV0xBTl9XR0hUKTsKKwkJYnJlYWs7CisJY2FzZSBBVEhfQlRDT0VYX1NUT01QX05PTkU6CisJCWF0aDlrX2h3X2J0Y29leF9zZXRfd2VpZ2h0KGFoLCBBUl9CVF9DT0VYX1dHSFQsCisJCQkJQVJfU1RPTVBfTk9ORV9XTEFOX1dHSFQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlhdGhfZGJnKGF0aDlrX2h3X2NvbW1vbihhaCksIEFUSF9EQkdfQlRDT0VYLAorCQkJCSJJbnZhbGlkIFN0b21wdHlwZVxuIik7CisJCWJyZWFrOworCX0KKworCWF0aDlrX2h3X2J0Y29leF9lbmFibGUoYWgpOworfQorRVhQT1JUX1NZTUJPTChhdGg5a19od19idGNvZXhfYnRfc3RvbXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2J0Y29leC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2J0Y29leC5oCmluZGV4IDU4OGRmZDQuLmE5ZWZjYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9idGNvZXguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYnRjb2V4LmgKQEAgLTE5LDkgKzE5LDEzIEBACiAKICNpbmNsdWRlICJody5oIgogCi0jZGVmaW5lIEFUSF9XTEFOQUNUSVZFX0dQSU8JNQotI2RlZmluZSBBVEhfQlRBQ1RJVkVfR1BJTwk2Ci0jZGVmaW5lIEFUSF9CVFBSSU9SSVRZX0dQSU8JNworI2RlZmluZSBBVEhfV0xBTkFDVElWRV9HUElPXzkyODAgICAgIDUKKyNkZWZpbmUgQVRIX0JUQUNUSVZFX0dQSU9fOTI4MCAgICAgICA2CisjZGVmaW5lIEFUSF9CVFBSSU9SSVRZX0dQSU9fOTI4NSAgICAgNworCisjZGVmaW5lIEFUSF9XTEFOQUNUSVZFX0dQSU9fOTMwMCAgICAgNQorI2RlZmluZSBBVEhfQlRBQ1RJVkVfR1BJT185MzAwICAgICAgIDQKKyNkZWZpbmUgQVRIX0JUUFJJT1JJVFlfR1BJT185MzAwICAgICA4CiAKICNkZWZpbmUgQVRIX0JUQ09FWF9ERUZfQlRfUEVSSU9EICA0NQogI2RlZmluZSBBVEhfQlRDT0VYX0RFRl9EVVRZX0NZQ0xFIDU1CkBAIC0zMiw2ICszNiwxNCBAQAogI2RlZmluZSBBVEhfQlRfQ05UX1RIUkVTSE9MRAkgICAgICAgMwogI2RlZmluZSBBVEhfQlRfQ05UX1NDQU5fVEhSRVNIT0xEICAgICAgMTUKIAorLyogRGVmaW5lcyB0aGUgQlQgQVJfQlRfQ09FWF9XR0hUIHVzZWQgKi8KK2VudW0gYXRoX3N0b21wX3R5cGUgeworCUFUSF9CVENPRVhfTk9fU1RPTVAsCisJQVRIX0JUQ09FWF9TVE9NUF9BTEwsCisJQVRIX0JUQ09FWF9TVE9NUF9MT1csCisJQVRIX0JUQ09FWF9TVE9NUF9OT05FCit9OworCiBlbnVtIGF0aF9idGNvZXhfc2NoZW1lIHsKIAlBVEhfQlRDT0VYX0NGR19OT05FLAogCUFUSF9CVENPRVhfQ0ZHXzJXSVJFLApAQCAtNTcsNSArNjksNyBAQAogCQkJCXUzMiB3bGFuX3dlaWdodCk7CiB2b2lkIGF0aDlrX2h3X2J0Y29leF9lbmFibGUoc3RydWN0IGF0aF9odyAqYWgpOwogdm9pZCBhdGg5a19od19idGNvZXhfZGlzYWJsZShzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGF0aDlrX2h3X2J0Y29leF9idF9zdG9tcChzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCSAgICAgIGVudW0gYXRoX3N0b21wX3R5cGUgc3RvbXBfdHlwZSk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NhbGliLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY2FsaWIuYwppbmRleCA4NjQ5NTgxLi41NThiMjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY2FsaWIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY2FsaWIuYwpAQCAtNjksMTUgKzY5LDIxIEBACiAJCQkJCSAgICAgIGludDE2X3QgKm5mYXJyYXkpCiB7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmNvbW1vbi0+aHctPmNvbmY7CiAJc3RydWN0IGF0aF9uZl9saW1pdHMgKmxpbWl0OwogCXN0cnVjdCBhdGg5a19uZmNhbF9oaXN0ICpoOwogCWJvb2wgaGlnaF9uZl9taWQgPSBmYWxzZTsKKwl1OCBjaGFpbm1hc2sgPSAoYWgtPnJ4Y2hhaW5tYXNrIDw8IDMpIHwgYWgtPnJ4Y2hhaW5tYXNrOwogCWludCBpOwogCiAJaCA9IGNhbC0+bmZDYWxIaXN0OwogCWxpbWl0ID0gYXRoOWtfaHdfZ2V0X25mX2xpbWl0cyhhaCwgYWgtPmN1cmNoYW4pOwogCiAJZm9yIChpID0gMDsgaSA8IE5VTV9ORl9SRUFESU5HUzsgaSsrKSB7CisJCWlmICghKGNoYWlubWFzayAmICgxIDw8IGkpKSB8fAorCQkgICAgKChpID49IEFSNTQxNl9NQVhfQ0hBSU5TKSAmJiAhY29uZl9pc19odDQwKGNvbmYpKSkKKwkJCWNvbnRpbnVlOworCiAJCWhbaV0ubmZDYWxCdWZmZXJbaFtpXS5jdXJySW5kZXhdID0gbmZhcnJheVtpXTsKIAogCQlpZiAoKytoW2ldLmN1cnJJbmRleCA+PSBBVEg5S19ORl9DQUxfSElTVF9NQVgpCkBAIC0yMjUsNiArMjMxLDcgQEAKIAlpbnQzMl90IHZhbDsKIAl1OCBjaGFpbm1hc2sgPSAoYWgtPnJ4Y2hhaW5tYXNrIDw8IDMpIHwgYWgtPnJ4Y2hhaW5tYXNrOwogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZjb21tb24tPmh3LT5jb25mOwogCXMxNiBkZWZhdWx0X25mID0gYXRoOWtfaHdfZ2V0X2RlZmF1bHRfbmYoYWgsIGNoYW4pOwogCiAJaWYgKGFoLT5jYWxkYXRhKQpAQCAtMjM0LDYgKzI0MSw5IEBACiAJCWlmIChjaGFpbm1hc2sgJiAoMSA8PCBpKSkgewogCQkJczE2IG5mdmFsOwogCisJCQlpZiAoKGkgPj0gQVI1NDE2X01BWF9DSEFJTlMpICYmICFjb25mX2lzX2h0NDAoY29uZikpCisJCQkJY29udGludWU7CisKIAkJCWlmIChoKQogCQkJCW5mdmFsID0gaFtpXS5wcml2TkY7CiAJCQllbHNlCkBAIC0yOTMsNiArMzAzLDkgQEAKIAlFTkFCTEVfUkVHV1JJVEVfQlVGRkVSKGFoKTsKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX05GX1JFQURJTkdTOyBpKyspIHsKIAkJaWYgKGNoYWlubWFzayAmICgxIDw8IGkpKSB7CisJCQlpZiAoKGkgPj0gQVI1NDE2X01BWF9DSEFJTlMpICYmICFjb25mX2lzX2h0NDAoY29uZikpCisJCQkJY29udGludWU7CisKIAkJCXZhbCA9IFJFR19SRUFEKGFoLCBhaC0+bmZfcmVnc1tpXSk7CiAJCQl2YWwgJj0gMHhGRkZGRkUwMDsKIAkJCXZhbCB8PSAoKCh1MzIpICgtNTApIDw8IDEpICYgMHgxZmYpOwpAQCAtMzk2LDE0ICs0MDksNiBAQAogCX0KIH0KIAotczE2IGF0aDlrX2h3X2dldGNoYW5fbm9pc2Uoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotCWlmICghYWgtPmN1cmNoYW4gfHwgIWFoLT5jdXJjaGFuLT5ub2lzZWZsb29yKQotCQlyZXR1cm4gYXRoOWtfaHdfZ2V0X2RlZmF1bHRfbmYoYWgsIGNoYW4pOwotCi0JcmV0dXJuIGFoLT5jdXJjaGFuLT5ub2lzZWZsb29yOwotfQotRVhQT1JUX1NZTUJPTChhdGg5a19od19nZXRjaGFuX25vaXNlKTsKIAogdm9pZCBhdGg5a19od19ic3R1Y2tfbmZjYWwoc3RydWN0IGF0aF9odyAqYWgpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY2FsaWIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jYWxpYi5oCmluZGV4IGI4OTczZWIuLjQ0MjA3ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jYWxpYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jYWxpYi5oCkBAIC0xMDYsNyArMTA2LDYgQEAKIHZvaWQgYXRoOWtfaW5pdF9uZmNhbF9oaXN0X2J1ZmZlcihzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKIHZvaWQgYXRoOWtfaHdfYnN0dWNrX25mY2FsKHN0cnVjdCBhdGhfaHcgKmFoKTsKLXMxNiBhdGg5a19od19nZXRjaGFuX25vaXNlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7CiB2b2lkIGF0aDlrX2h3X3Jlc2V0X2NhbGlicmF0aW9uKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCXN0cnVjdCBhdGg5a19jYWxfbGlzdCAqY3VyckNhbCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24uYwppbmRleCA2MTVlNjgyLi43NDUzNWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIAogCWlmIChjaGFuLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKIAkJaWNoYW4tPmNoYW5tb2RlID0gQ0hBTk5FTF9HOwotCQlpY2hhbi0+Y2hhbm5lbEZsYWdzID0gQ0hBTk5FTF8yR0haIHwgQ0hBTk5FTF9PRkRNIHwgQ0hBTk5FTF9HOworCQlpY2hhbi0+Y2hhbm5lbEZsYWdzID0gQ0hBTk5FTF8yR0haIHwgQ0hBTk5FTF9PRkRNOwogCX0gZWxzZSB7CiAJCWljaGFuLT5jaGFubW9kZSA9IENIQU5ORUxfQTsKIAkJaWNoYW4tPmNoYW5uZWxGbGFncyA9IENIQU5ORUxfNUdIWiB8IENIQU5ORUxfT0ZETTsKQEAgLTE1OCwzNyArMTU4LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woYXRoOWtfY21uX2NvdW50X3N0cmVhbXMpOwogCi0vKgotICogQ29uZmlndXJlcyBhcHByb3ByaWF0ZSB3ZWlnaHQgYmFzZWQgb24gc3RvbXAgdHlwZS4KLSAqLwotdm9pZCBhdGg5a19jbW5fYnRjb2V4X2J0X3N0b21wKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sCi0JCQkJICBlbnVtIGF0aF9zdG9tcF90eXBlIHN0b21wX3R5cGUpCi17Ci0Jc3RydWN0IGF0aF9odyAqYWggPSBjb21tb24tPmFoOwotCi0Jc3dpdGNoIChzdG9tcF90eXBlKSB7Ci0JY2FzZSBBVEhfQlRDT0VYX1NUT01QX0FMTDoKLQkJYXRoOWtfaHdfYnRjb2V4X3NldF93ZWlnaHQoYWgsIEFSX0JUX0NPRVhfV0dIVCwKLQkJCQkJICAgQVJfU1RPTVBfQUxMX1dMQU5fV0dIVCk7Ci0JCWJyZWFrOwotCWNhc2UgQVRIX0JUQ09FWF9TVE9NUF9MT1c6Ci0JCWF0aDlrX2h3X2J0Y29leF9zZXRfd2VpZ2h0KGFoLCBBUl9CVF9DT0VYX1dHSFQsCi0JCQkJCSAgIEFSX1NUT01QX0xPV19XTEFOX1dHSFQpOwotCQlicmVhazsKLQljYXNlIEFUSF9CVENPRVhfU1RPTVBfTk9ORToKLQkJYXRoOWtfaHdfYnRjb2V4X3NldF93ZWlnaHQoYWgsIEFSX0JUX0NPRVhfV0dIVCwKLQkJCQkJICAgQVJfU1RPTVBfTk9ORV9XTEFOX1dHSFQpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19CVENPRVgsCi0JCQkiSW52YWxpZCBTdG9tcHR5cGVcbiIpOwotCQlicmVhazsKLQl9Ci0KLQlhdGg5a19od19idGNvZXhfZW5hYmxlKGFoKTsKLX0KLUVYUE9SVF9TWU1CT0woYXRoOWtfY21uX2J0Y29leF9idF9zdG9tcCk7Ci0KIHZvaWQgYXRoOWtfY21uX3VwZGF0ZV90eHBvdyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGN1cl90eHBvdywKIAkJCSAgICB1MTYgbmV3X3R4cG93LCB1MTYgKnR4cG93ZXIpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmgKaW5kZXggYjJmN2I1Zi4uNTEyNGYxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24uaApAQCAtNTAsMTQgKzUwLDYgQEAKICNkZWZpbmUgQVRIX0VQX1JORCh4LCBtdWwpIAkJCQkJCVwKIAkoKCgoeCklKG11bCkpID49ICgobXVsKS8yKSkgPyAoKHgpICsgKChtdWwpIC0gMSkpIC8gKG11bCkgOiAoeCkvKG11bCkpCiAKLS8qIERlZmluZXMgdGhlIEJUIEFSX0JUX0NPRVhfV0dIVCB1c2VkICovCi1lbnVtIGF0aF9zdG9tcF90eXBlIHsKLQlBVEhfQlRDT0VYX05PX1NUT01QLAotCUFUSF9CVENPRVhfU1RPTVBfQUxMLAotCUFUSF9CVENPRVhfU1RPTVBfTE9XLAotCUFUSF9CVENPRVhfU1RPTVBfTk9ORQotfTsKLQogaW50IGF0aDlrX2Ntbl9wYWRwb3MoX19sZTE2IGZyYW1lX2NvbnRyb2wpOwogaW50IGF0aDlrX2Ntbl9nZXRfaHdfY3J5cHRvX2tleXR5cGUoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB2b2lkIGF0aDlrX2Ntbl91cGRhdGVfaWNoYW5uZWwoc3RydWN0IGF0aDlrX2NoYW5uZWwgKmljaGFuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZGVidWcuYwppbmRleCA4ZGY1YTkyLi5iYWQxYTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZGVidWcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZGVidWcuYwpAQCAtMzI2LDYgKzMyNiw4IEBACiAJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuZHRpbXN5bmMrKzsKIAlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX0RUSU0pCiAJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuZHRpbSsrOworCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfVFNGT09SKQorCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnRzZm9vcisrOwogfQogCiBzdGF0aWMgc3NpemVfdCByZWFkX2ZpbGVfaW50ZXJydXB0KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCkBAIC0zODAsOCArMzgyLDExIEBACiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCiAJCSIlOHM6ICUxMHVcbiIsICJEVElNIiwgc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy5kdGltKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJIiU4czogJTEwdVxuIiwgIlRTRk9PUiIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMudHNmb29yKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKIAkJIiU4czogJTEwdVxuIiwgIlRPVEFMIiwgc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy50b3RhbCk7CiAKKwogCWlmIChsZW4gPiBzaXplb2YoYnVmKSkKIAkJbGVuID0gc2l6ZW9mKGJ1Zik7CiAKQEAgLTg0NSw3ICs4NTAsNyBAQAogCiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJY2hhciAqYnVmOwotCXVuc2lnbmVkIGludCBsZW4gPSAwLCBzaXplID0gMTE1MjsKKwl1bnNpZ25lZCBpbnQgbGVuID0gMCwgc2l6ZSA9IDE0MDA7CiAJc3NpemVfdCByZXR2YWwgPSAwOwogCiAJYnVmID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKQEAgLTg3NCw2ICs4NzksMzQgQEAKIAkJCSIlMThzIDogJTEwdVxuIiwgIkRFQ1JZUFQgQlVTWSBFUlIiLAogCQkJc2MtPmRlYnVnLnN0YXRzLnJ4c3RhdHMuZGVjcnlwdF9idXN5X2Vycik7CiAKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUxOHMgOiAlMTBkXG4iLCAiUlNTSS1DVEwwIiwKKwkJCXNjLT5kZWJ1Zy5zdGF0cy5yeHN0YXRzLnJzX3Jzc2lfY3RsMCk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUxOHMgOiAlMTBkXG4iLCAiUlNTSS1DVEwxIiwKKwkJCXNjLT5kZWJ1Zy5zdGF0cy5yeHN0YXRzLnJzX3Jzc2lfY3RsMSk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUxOHMgOiAlMTBkXG4iLCAiUlNTSS1DVEwyIiwKKwkJCXNjLT5kZWJ1Zy5zdGF0cy5yeHN0YXRzLnJzX3Jzc2lfY3RsMik7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUxOHMgOiAlMTBkXG4iLCAiUlNTSS1FWFQwIiwKKwkJCXNjLT5kZWJ1Zy5zdGF0cy5yeHN0YXRzLnJzX3Jzc2lfZXh0MCk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUxOHMgOiAlMTBkXG4iLCAiUlNTSS1FWFQxIiwKKwkJCXNjLT5kZWJ1Zy5zdGF0cy5yeHN0YXRzLnJzX3Jzc2lfZXh0MSk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUxOHMgOiAlMTBkXG4iLCAiUlNTSS1FWFQyIiwKKwkJCXNjLT5kZWJ1Zy5zdGF0cy5yeHN0YXRzLnJzX3Jzc2lfZXh0Mik7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUxOHMgOiAlMTBkXG4iLCAiUnggQW50ZW5uYSIsCisJCQlzYy0+ZGVidWcuc3RhdHMucnhzdGF0cy5yc19hbnRlbm5hKTsKKwogCVBIWV9FUlIoIlVOREVSUlVOIiwgQVRIOUtfUEhZRVJSX1VOREVSUlVOKTsKIAlQSFlfRVJSKCJUSU1JTkciLCBBVEg5S19QSFlFUlJfVElNSU5HKTsKIAlQSFlfRVJSKCJQQVJJVFkiLCBBVEg5S19QSFlFUlJfUEFSSVRZKTsKQEAgLTk0OCw2ICs5ODEsMTYgQEAKIAkJUlhfUEhZX0VSUl9JTkMocGh5ZXJyKTsKIAl9CiAKKwlzYy0+ZGVidWcuc3RhdHMucnhzdGF0cy5yc19yc3NpX2N0bDAgPSBycy0+cnNfcnNzaV9jdGwwOworCXNjLT5kZWJ1Zy5zdGF0cy5yeHN0YXRzLnJzX3Jzc2lfY3RsMSA9IHJzLT5yc19yc3NpX2N0bDE7CisJc2MtPmRlYnVnLnN0YXRzLnJ4c3RhdHMucnNfcnNzaV9jdGwyID0gcnMtPnJzX3Jzc2lfY3RsMjsKKworCXNjLT5kZWJ1Zy5zdGF0cy5yeHN0YXRzLnJzX3Jzc2lfZXh0MCA9IHJzLT5yc19yc3NpX2V4dDA7CisJc2MtPmRlYnVnLnN0YXRzLnJ4c3RhdHMucnNfcnNzaV9leHQxID0gcnMtPnJzX3Jzc2lfZXh0MTsKKwlzYy0+ZGVidWcuc3RhdHMucnhzdGF0cy5yc19yc3NpX2V4dDIgPSBycy0+cnNfcnNzaV9leHQyOworCisJc2MtPmRlYnVnLnN0YXRzLnJ4c3RhdHMucnNfYW50ZW5uYSA9IHJzLT5yc19hbnRlbm5hOworCiAjdW5kZWYgUlhfU1RBVF9JTkMKICN1bmRlZiBSWF9QSFlfRVJSX0lOQwogfQpAQCAtMTA4OCw2NyArMTEzMSw0MyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogI2lmZGVmIENPTkZJR19BVEhfREVCVUcKLQlpZiAoIWRlYnVnZnNfY3JlYXRlX2ZpbGUoImRlYnVnIiwgU19JUlVTUiB8IFNfSVdVU1IsCi0JCQlzYy0+ZGVidWcuZGVidWdmc19waHksIHNjLCAmZm9wc19kZWJ1ZykpCi0JCWdvdG8gZXJyOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImRlYnVnIiwgU19JUlVTUiB8IFNfSVdVU1IsIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwKKwkJCSAgICBzYywgJmZvcHNfZGVidWcpOwogI2VuZGlmCisJZGVidWdmc19jcmVhdGVfZmlsZSgiZG1hIiwgU19JUlVTUiwgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LCBzYywKKwkJCSAgICAmZm9wc19kbWEpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImludGVycnVwdCIsIFNfSVJVU1IsIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgc2MsCisJCQkgICAgJmZvcHNfaW50ZXJydXB0KTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ3aXBoeSIsIFNfSVJVU1IgfCBTX0lXVVNSLCBzYy0+ZGVidWcuZGVidWdmc19waHksCisJCQkgICAgc2MsICZmb3BzX3dpcGh5KTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ4bWl0IiwgU19JUlVTUiwgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LCBzYywKKwkJCSAgICAmZm9wc194bWl0KTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJzdGF0aW9ucyIsIFNfSVJVU1IsIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgc2MsCisJCQkgICAgJmZvcHNfc3RhdGlvbnMpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoIm1pc2MiLCBTX0lSVVNSLCBzYy0+ZGVidWcuZGVidWdmc19waHksIHNjLAorCQkJICAgICZmb3BzX21pc2MpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInJlY3YiLCBTX0lSVVNSLCBzYy0+ZGVidWcuZGVidWdmc19waHksIHNjLAorCQkJICAgICZmb3BzX3JlY3YpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInJ4X2NoYWlubWFzayIsIFNfSVJVU1IgfCBTX0lXVVNSLAorCQkJICAgIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgc2MsICZmb3BzX3J4X2NoYWlubWFzayk7CisJZGVidWdmc19jcmVhdGVfZmlsZSgidHhfY2hhaW5tYXNrIiwgU19JUlVTUiB8IFNfSVdVU1IsCisJCQkgICAgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LCBzYywgJmZvcHNfdHhfY2hhaW5tYXNrKTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyZWdpZHgiLCBTX0lSVVNSIHwgU19JV1VTUiwgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LAorCQkJICAgIHNjLCAmZm9wc19yZWdpZHgpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInJlZ3ZhbCIsIFNfSVJVU1IgfCBTX0lXVVNSLCBzYy0+ZGVidWcuZGVidWdmc19waHksCisJCQkgICAgc2MsICZmb3BzX3JlZ3ZhbCk7CisJZGVidWdmc19jcmVhdGVfYm9vbCgiaWdub3JlX2V4dGNjYSIsIFNfSVJVU1IgfCBTX0lXVVNSLAorCQkJICAgIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwKKwkJCSAgICAmYWgtPmNvbmZpZy5jd21faWdub3JlX2V4dGNjYSk7CisJZGVidWdmc19jcmVhdGVfZmlsZSgicmVnZHVtcCIsIFNfSVJVU1IsIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgc2MsCisJCQkgICAgJmZvcHNfcmVnZHVtcCk7CiAKLQlpZiAoIWRlYnVnZnNfY3JlYXRlX2ZpbGUoImRtYSIsIFNfSVJVU1IsIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwKLQkJCXNjLCAmZm9wc19kbWEpKQotCQlnb3RvIGVycjsKKwlkZWJ1Z2ZzX2NyZWF0ZV91MzIoImdwaW9fbWFzayIsIFNfSVJVU1IgfCBTX0lXVVNSLAorCQkJICAgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LCAmc2MtPnNjX2FoLT5ncGlvX21hc2spOwogCi0JaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJpbnRlcnJ1cHQiLCBTX0lSVVNSLCBzYy0+ZGVidWcuZGVidWdmc19waHksCi0JCQlzYywgJmZvcHNfaW50ZXJydXB0KSkKLQkJZ290byBlcnI7Ci0KLQlpZiAoIWRlYnVnZnNfY3JlYXRlX2ZpbGUoIndpcGh5IiwgU19JUlVTUiB8IFNfSVdVU1IsCi0JCQlzYy0+ZGVidWcuZGVidWdmc19waHksIHNjLCAmZm9wc193aXBoeSkpCi0JCWdvdG8gZXJyOwotCi0JaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ4bWl0IiwgU19JUlVTUiwgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LAotCQkJc2MsICZmb3BzX3htaXQpKQotCQlnb3RvIGVycjsKLQotCWlmICghZGVidWdmc19jcmVhdGVfZmlsZSgic3RhdGlvbnMiLCBTX0lSVVNSLCBzYy0+ZGVidWcuZGVidWdmc19waHksCi0JCQlzYywgJmZvcHNfc3RhdGlvbnMpKQotCQlnb3RvIGVycjsKLQotCWlmICghZGVidWdmc19jcmVhdGVfZmlsZSgibWlzYyIsIFNfSVJVU1IsIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwKLQkJCXNjLCAmZm9wc19taXNjKSkKLQkJZ290byBlcnI7Ci0KLQlpZiAoIWRlYnVnZnNfY3JlYXRlX2ZpbGUoInJlY3YiLCBTX0lSVVNSLCBzYy0+ZGVidWcuZGVidWdmc19waHksCi0JCQlzYywgJmZvcHNfcmVjdikpCi0JCWdvdG8gZXJyOwotCi0JaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyeF9jaGFpbm1hc2siLCBTX0lSVVNSIHwgU19JV1VTUiwKLQkJCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgc2MsICZmb3BzX3J4X2NoYWlubWFzaykpCi0JCWdvdG8gZXJyOwotCi0JaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ0eF9jaGFpbm1hc2siLCBTX0lSVVNSIHwgU19JV1VTUiwKLQkJCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgc2MsICZmb3BzX3R4X2NoYWlubWFzaykpCi0JCWdvdG8gZXJyOwotCi0JaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyZWdpZHgiLCBTX0lSVVNSIHwgU19JV1VTUiwKLQkJCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgc2MsICZmb3BzX3JlZ2lkeCkpCi0JCWdvdG8gZXJyOwotCi0JaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyZWd2YWwiLCBTX0lSVVNSIHwgU19JV1VTUiwKLQkJCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgc2MsICZmb3BzX3JlZ3ZhbCkpCi0JCWdvdG8gZXJyOwotCi0JaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9ib29sKCJpZ25vcmVfZXh0Y2NhIiwgU19JUlVTUiB8IFNfSVdVU1IsCi0JCQlzYy0+ZGVidWcuZGVidWdmc19waHksICZhaC0+Y29uZmlnLmN3bV9pZ25vcmVfZXh0Y2NhKSkKLQkJZ290byBlcnI7Ci0KLQlpZiAoIWRlYnVnZnNfY3JlYXRlX2ZpbGUoInJlZ2R1bXAiLCBTX0lSVVNSLCBzYy0+ZGVidWcuZGVidWdmc19waHksCi0JCQlzYywgJmZvcHNfcmVnZHVtcCkpCi0JCWdvdG8gZXJyOworCWRlYnVnZnNfY3JlYXRlX3UzMigiZ3Bpb192YWwiLCBTX0lSVVNSIHwgU19JV1VTUiwKKwkJCSAgIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgJnNjLT5zY19haC0+Z3Bpb192YWwpOwogCiAJc2MtPmRlYnVnLnJlZ2lkeCA9IDA7CiAJcmV0dXJuIDA7Ci1lcnI6Ci0JZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSk7Ci0Jc2MtPmRlYnVnLmRlYnVnZnNfcGh5ID0gTlVMTDsKLQlyZXR1cm4gLUVOT01FTTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmgKaW5kZXggNTkzMzhkZS4uNTQ4OGEzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmgKQEAgLTU0LDYgKzU0LDkgQEAKICAqIEBkdGltc3luYzogRFRJTSBzeW5jIGxvc3NhZ2UKICAqIEBkdGltOiBSWCBCZWFjb24gd2l0aCBEVElNCiAgKiBAYmJfd2F0Y2hkb2c6IEJhc2ViYW5kIHdhdGNoZG9nCisgKiBAdHNmb29yOiBUU0Ygb3V0IG9mIHJhbmdlLCBpbmRpY2F0ZXMgdGhhdCB0aGUgY29ycmVjdGVkIFRTRiByZWNlaXZlZAorICogZnJvbSBhIGJlYWNvbiBkaWZmZXJzIGZyb20gdGhlIFBDVSdzIGludGVybmFsIFRTRiBieSBtb3JlIHRoYW4gYQorICogKHByb2dyYW1tYWJsZSkgdGhyZXNob2xkCiAgKi8KIHN0cnVjdCBhdGhfaW50ZXJydXB0X3N0YXRzIHsKIAl1MzIgdG90YWw7CkBAIC03OCw2ICs4MSw3IEBACiAJdTMyIGR0aW1zeW5jOwogCXUzMiBkdGltOwogCXUzMiBiYl93YXRjaGRvZzsKKwl1MzIgdHNmb29yOwogfTsKIAogLyoqCkBAIC0xNTcsNiArMTYxLDEzIEBACiAJdTMyIHBvc3RfZGVsaW1fY3JjX2VycjsKIAl1MzIgZGVjcnlwdF9idXN5X2VycjsKIAl1MzIgcGh5X2Vycl9zdGF0c1tBVEg5S19QSFlFUlJfTUFYXTsKKwlpbnQ4X3QgcnNfcnNzaV9jdGwwOworCWludDhfdCByc19yc3NpX2N0bDE7CisJaW50OF90IHJzX3Jzc2lfY3RsMjsKKwlpbnQ4X3QgcnNfcnNzaV9leHQwOworCWludDhfdCByc19yc3NpX2V4dDE7CisJaW50OF90IHJzX3Jzc2lfZXh0MjsKKwl1OCByc19hbnRlbm5hOwogfTsKIAogc3RydWN0IGF0aF9zdGF0cyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tLmgKaW5kZXggYmQ4MjQ0Ny4uM2UzMTYxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb20uaApAQCAtNDM2LDcgKzQzNiwxMSBAQAogCXU4IGRiMl8yOjQsIGRiMl8zOjQ7CiAJdTggZGIyXzQ6NCwgcmVzZXJ2ZWQ6NDsKICNlbmRpZgotCXU4IGZ1dHVyZU1vZGFsWzRdOworCXU4IHR4X2RpdmVyc2l0eTsKKwl1OCBmbGNfcHdyX3RocmVzaDsKKwl1OCBiYl9zY2FsZV9zbXJ0X2FudGVubmE7CisjZGVmaW5lIEVFUF80S19CQl9ERVNJUkVEX1NDQUxFX01BU0sJMHgxZgorCXU4IGZ1dHVyZU1vZGFsWzFdOwogCXN0cnVjdCBzcHVyX2NoYW4gc3B1ckNoYW5zW0FSX0VFUFJPTV9NT0RBTF9TUFVSU107CiB9IF9fcGFja2VkOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tXzRrLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tXzRrLmMKaW5kZXggYmM3N2EzMC4uNmY3MTRkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbV80ay5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb21fNGsuYwpAQCAtNzgxLDYgKzc4MSw3IEBACiB7CiAJc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgKnBNb2RhbDsKIAlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqZWVwID0gJmFoLT5lZXByb20ubWFwNGs7CisJc3RydWN0IGJhc2VfZWVwX2hlYWRlcl80ayAqcEJhc2UgPSAmZWVwLT5iYXNlRWVwSGVhZGVyOwogCXU4IHR4UnhBdHRlbkxvY2FsOwogCXU4IG9iWzVdLCBkYjFbNV0sIGRiMls1XTsKIAl1OCBhbnRfZGl2X2NvbnRyb2wxLCBhbnRfZGl2X2NvbnRyb2wyOwpAQCAtMTAwMyw2ICsxMDA0LDMxIEBACiAJCQkJICAgICAgQVJfUEhZX1NFVFRMSU5HX1NXSVRDSCwKIAkJCQkgICAgICBwTW9kYWwtPnN3U2V0dGxlSHQ0MCk7CiAJfQorCWlmIChBUl9TUkVWXzkyNzEoYWgpIHx8IEFSX1NSRVZfOTI4NShhaCkpIHsKKwkJdTggYmJfZGVzaXJlZF9zY2FsZSA9IChwTW9kYWwtPmJiX3NjYWxlX3NtcnRfYW50ZW5uYSAmCisJCQkJRUVQXzRLX0JCX0RFU0lSRURfU0NBTEVfTUFTSyk7CisJCWlmICgocEJhc2UtPnR4R2FpblR5cGUgPT0gMCkgJiYgKGJiX2Rlc2lyZWRfc2NhbGUgIT0gMCkpIHsKKwkJCXUzMiBwd3JjdHJsLCBtYXNrLCBjbHI7CisKKwkJCW1hc2sgPSBCSVQoMCl8QklUKDUpfEJJVCgxMCl8QklUKDE1KXxCSVQoMjApfEJJVCgyNSk7CisJCQlwd3JjdHJsID0gbWFzayAqIGJiX2Rlc2lyZWRfc2NhbGU7CisJCQljbHIgPSBtYXNrICogMHgxZjsKKwkJCVJFR19STVcoYWgsIEFSX1BIWV9UWF9QV1JDVFJMOCwgcHdyY3RybCwgY2xyKTsKKwkJCVJFR19STVcoYWgsIEFSX1BIWV9UWF9QV1JDVFJMMTAsIHB3cmN0cmwsIGNscik7CisJCQlSRUdfUk1XKGFoLCBBUl9QSFlfQ0gwX1RYX1BXUkNUUkwxMiwgcHdyY3RybCwgY2xyKTsKKworCQkJbWFzayA9IEJJVCgwKXxCSVQoNSl8QklUKDE1KTsKKwkJCXB3cmN0cmwgPSBtYXNrICogYmJfZGVzaXJlZF9zY2FsZTsKKwkJCWNsciA9IG1hc2sgKiAweDFmOworCQkJUkVHX1JNVyhhaCwgQVJfUEhZX1RYX1BXUkNUUkw5LCBwd3JjdHJsLCBjbHIpOworCisJCQltYXNrID0gQklUKDApfEJJVCg1KTsKKwkJCXB3cmN0cmwgPSBtYXNrICogYmJfZGVzaXJlZF9zY2FsZTsKKwkJCWNsciA9IG1hc2sgKiAweDFmOworCQkJUkVHX1JNVyhhaCwgQVJfUEhZX0NIMF9UWF9QV1JDVFJMMTEsIHB3cmN0cmwsIGNscik7CisJCQlSRUdfUk1XKGFoLCBBUl9QSFlfQ0gwX1RYX1BXUkNUUkwxMywgcHdyY3RybCwgY2xyKTsKKwkJfQorCX0KIH0KIAogc3RhdGljIHUxNiBhdGg5a19od180a19nZXRfc3B1cl9jaGFubmVsKHN0cnVjdCBhdGhfaHcgKmFoLCB1MTYgaSwgYm9vbCBpczJHSHopCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tXzkyODcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb21fOTI4Ny5jCmluZGV4IDhjZDgzMzMuLmI4N2RiNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb21fOTI4Ny5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb21fOTI4Ny5jCkBAIC0zMTksMTAgKzMxOSw5IEBACiAJdTE2IG51bVhwZEdhaW4sIHhwZE1hc2s7CiAJdTE2IHhwZEdhaW5WYWx1ZXNbQVI1NDE2X05VTV9QRF9HQUlOU10gPSB7MCwgMCwgMCwgMH07CiAJdTMyIHJlZzMyLCByZWdPZmZzZXQsIHJlZ0NoYWluT2Zmc2V0LCByZWd2YWw7Ci0JaW50MTZfdCBtb2RhbElkeCwgZGlmZiA9IDA7CisJaW50MTZfdCBkaWZmID0gMDsKIAlzdHJ1Y3QgYXI5Mjg3X2VlcHJvbSAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5tYXA5Mjg3OwogCi0JbW9kYWxJZHggPSBJU19DSEFOXzJHSFooY2hhbikgPyAxIDogMDsKIAl4cGRNYXNrID0gcEVlcERhdGEtPm1vZGFsSGVhZGVyLnhwZEdhaW47CiAKIAlpZiAoKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJiBBUjkyODdfRUVQX1ZFUl9NSU5PUl9NQVNLKSA+PQpAQCAtMzkyLDYgKzM5MSw4IEBACiAJCQkJCQkJICAgbnVtWHBkR2Fpbik7CiAJCQl9CiAKKwkJCUVOQUJMRV9SRUdXUklURV9CVUZGRVIoYWgpOworCiAJCQlpZiAoaSA9PSAwKSB7CiAJCQkJaWYgKCFhdGg5a19od19hcjkyODdfZ2V0X2VlcHJvbShhaCwKIAkJCQkJCQlFRVBfT0xfUFdSQ1RSTCkpIHsKQEAgLTQ0Miw2ICs0NDMsNyBAQAogCQkJCQlyZWdPZmZzZXQgKz0gNDsKIAkJCQl9CiAJCQl9CisJCQlSRUdXUklURV9CVUZGRVJfRkxVU0goYWgpOwogCQl9CiAJfQogCkBAIC03NTcsNiArNzU5LDggQEAKIAkJCXJhdGVzQXJyYXlbaV0gLT0gQVI5Mjg3X1BXUl9UQUJMRV9PRkZTRVRfREIgKiAyOwogCX0KIAorCUVOQUJMRV9SRUdXUklURV9CVUZGRVIoYWgpOworCiAJLyogT0ZETSBwb3dlciBwZXIgcmF0ZSAqLwogCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUxLAogCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxOG1iXSwgMjQpCkBAIC04NDAsNiArODQ0LDcgQEAKIAkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRHVwT2ZkbV0sIDgpCiAJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUR1cENja10sIDApKTsKIAl9CisJUkVHV1JJVEVfQlVGRkVSX0ZMVVNIKGFoKTsKIH0KIAogc3RhdGljIHZvaWQgYXRoOWtfaHdfYXI5Mjg3X3NldF9hZGRhYyhzdHJ1Y3QgYXRoX2h3ICphaCwKQEAgLTg1MiwzNSArODU3LDEyIEBACiB7CiAJc3RydWN0IGFyOTI4N19lZXByb20gKmVlcCA9ICZhaC0+ZWVwcm9tLm1hcDkyODc7CiAJc3RydWN0IG1vZGFsX2VlcF9hcjkyODdfaGVhZGVyICpwTW9kYWwgPSAmZWVwLT5tb2RhbEhlYWRlcjsKLQl1MTYgYW50V3JpdGVzW0FSOTI4N19BTlRfMTZTXTsKIAl1MzIgcmVnQ2hhaW5PZmZzZXQsIHJlZ3ZhbDsKIAl1OCB0eFJ4QXR0ZW5Mb2NhbDsKLQlpbnQgaSwgaiwgb2Zmc2V0X251bTsKKwlpbnQgaTsKIAogCXBNb2RhbCA9ICZlZXAtPm1vZGFsSGVhZGVyOwogCi0JYW50V3JpdGVzWzBdID0gKHUxNikoKHBNb2RhbC0+YW50Q3RybENvbW1vbiA+PiAyOCkgJiAweEYpOwotCWFudFdyaXRlc1sxXSA9ICh1MTYpKChwTW9kYWwtPmFudEN0cmxDb21tb24gPj4gMjQpICYgMHhGKTsKLQlhbnRXcml0ZXNbMl0gPSAodTE2KSgocE1vZGFsLT5hbnRDdHJsQ29tbW9uID4+IDIwKSAmIDB4Rik7Ci0JYW50V3JpdGVzWzNdID0gKHUxNikoKHBNb2RhbC0+YW50Q3RybENvbW1vbiA+PiAxNikgJiAweEYpOwotCWFudFdyaXRlc1s0XSA9ICh1MTYpKChwTW9kYWwtPmFudEN0cmxDb21tb24gPj4gMTIpICYgMHhGKTsKLQlhbnRXcml0ZXNbNV0gPSAodTE2KSgocE1vZGFsLT5hbnRDdHJsQ29tbW9uID4+IDgpICYgMHhGKTsKLQlhbnRXcml0ZXNbNl0gPSAodTE2KSgocE1vZGFsLT5hbnRDdHJsQ29tbW9uID4+IDQpICAmIDB4Rik7Ci0JYW50V3JpdGVzWzddID0gKHUxNikocE1vZGFsLT5hbnRDdHJsQ29tbW9uICYgMHhGKTsKLQotCW9mZnNldF9udW0gPSA4OwotCi0JZm9yIChpID0gMCwgaiA9IG9mZnNldF9udW07IGkgPCBBUjkyODdfTUFYX0NIQUlOUzsgaSsrKSB7Ci0JCWFudFdyaXRlc1tqKytdID0gKHUxNikoKHBNb2RhbC0+YW50Q3RybENoYWluW2ldID4+IDI4KSAmIDB4Zik7Ci0JCWFudFdyaXRlc1tqKytdID0gKHUxNikoKHBNb2RhbC0+YW50Q3RybENoYWluW2ldID4+IDEwKSAmIDB4Myk7Ci0JCWFudFdyaXRlc1tqKytdID0gKHUxNikoKHBNb2RhbC0+YW50Q3RybENoYWluW2ldID4+IDgpICYgMHgzKTsKLQkJYW50V3JpdGVzW2orK10gPSAwOwotCQlhbnRXcml0ZXNbaisrXSA9ICh1MTYpKChwTW9kYWwtPmFudEN0cmxDaGFpbltpXSA+PiA2KSAmIDB4Myk7Ci0JCWFudFdyaXRlc1tqKytdID0gKHUxNikoKHBNb2RhbC0+YW50Q3RybENoYWluW2ldID4+IDQpICYgMHgzKTsKLQkJYW50V3JpdGVzW2orK10gPSAodTE2KSgocE1vZGFsLT5hbnRDdHJsQ2hhaW5baV0gPj4gMikgJiAweDMpOwotCQlhbnRXcml0ZXNbaisrXSA9ICh1MTYpKHBNb2RhbC0+YW50Q3RybENoYWluW2ldICYgMHgzKTsKLQl9Ci0KIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9TV0lUQ0hfQ09NLCBwTW9kYWwtPmFudEN0cmxDb21tb24pOwogCiAJZm9yIChpID0gMDsgaSA8IEFSOTI4N19NQVhfQ0hBSU5TOyBpKyspCXsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb21fZGVmLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tX2RlZi5jCmluZGV4IGZjY2Q4N2QuLmMwMzE4NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb21fZGVmLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbV9kZWYuYwpAQCAtMjMxLDYgKzIzMSwxMCBAQAogCQkJCWludGVnZXIgPSBzd2FiMzIocE1vZGFsLT5hbnRDdHJsQ2hhaW5baV0pOwogCQkJCXBNb2RhbC0+YW50Q3RybENoYWluW2ldID0gaW50ZWdlcjsKIAkJCX0KKwkJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJCQl3b3JkID0gc3dhYjE2KHBNb2RhbC0+eHBhQmlhc0x2bEZyZXFbaV0pOworCQkJCXBNb2RhbC0+eHBhQmlhc0x2bEZyZXFbaV0gPSB3b3JkOworCQkJfQogCiAJCQlmb3IgKGkgPSAwOyBpIDwgQVJfRUVQUk9NX01PREFMX1NQVVJTOyBpKyspIHsKIAkJCQl3b3JkID0gc3dhYjE2KHBNb2RhbC0+c3B1ckNoYW5zW2ldLnNwdXJDaGFuKTsKQEAgLTc5OSw2ICs4MDMsOCBAQAogCQkJCQkJCSAgIHB3cl90YWJsZV9vZmZzZXQsCiAJCQkJCQkJICAgJmRpZmYpOwogCisJCQlFTkFCTEVfUkVHV1JJVEVfQlVGRkVSKGFoKTsKKwogCQkJaWYgKChpID09IDApIHx8IEFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkpIHsKIAkJCQlpZiAoT0xDX0ZPUl9BUjkyODBfMjBfTEFURVIpIHsKIAkJCQkJUkVHX1dSSVRFKGFoLApAQCAtODQ3LDYgKzg1Myw3IEBACiAKIAkJCQlyZWdPZmZzZXQgKz0gNDsKIAkJCX0KKwkJCVJFR1dSSVRFX0JVRkZFUl9GTFVTSChhaCk7CiAJCX0KIAl9CiAKQEAgLTEyMDUsNiArMTIxMiw4IEBACiAJCX0KIAl9CiAKKwlFTkFCTEVfUkVHV1JJVEVfQlVGRkVSKGFoKTsKKwogCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUxLAogCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxOG1iXSwgMjQpCiAJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMTJtYl0sIDE2KQpAQCAtMTI5MSw2ICsxMzAwLDggQEAKIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9TVUIsCiAJCSAgQVRIOUtfUE9XX1NNKHBNb2RhbC0+cHdyRGVjcmVhc2VGb3IzQ2hhaW4sIDYpCiAJCSAgfCBBVEg5S19QT1dfU00ocE1vZGFsLT5wd3JEZWNyZWFzZUZvcjJDaGFpbiwgMCkpOworCisJUkVHV1JJVEVfQlVGRkVSX0ZMVVNIKGFoKTsKIH0KIAogc3RhdGljIHUxNiBhdGg5a19od19kZWZfZ2V0X3NwdXJfY2hhbm5lbChzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGksIGJvb2wgaXMyR0h6KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2dwaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ncGlvLmMKaW5kZXggMGZiOGY4YS4uMDM0OWIzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2dwaW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZ3Bpby5jCkBAIC00MSwxMiArNDEsMTYgQEAKIHsKIAlpbnQgcmV0OwogCi0JaWYgKEFSX1NSRVZfOTI4NyhzYy0+c2NfYWgpKQotCQlzYy0+c2NfYWgtPmxlZF9waW4gPSBBVEhfTEVEX1BJTl85Mjg3OwotCWVsc2UgaWYgKEFSX1NSRVZfOTQ4NShzYy0+c2NfYWgpKQotCQlzYy0+c2NfYWgtPmxlZF9waW4gPSBBVEhfTEVEX1BJTl85NDg1OwotCWVsc2UKLQkJc2MtPnNjX2FoLT5sZWRfcGluID0gQVRIX0xFRF9QSU5fREVGOworCWlmIChzYy0+c2NfYWgtPmxlZF9waW4gPCAwKSB7CisJCWlmIChBUl9TUkVWXzkyODcoc2MtPnNjX2FoKSkKKwkJCXNjLT5zY19haC0+bGVkX3BpbiA9IEFUSF9MRURfUElOXzkyODc7CisJCWVsc2UgaWYgKEFSX1NSRVZfOTQ4NShzYy0+c2NfYWgpKQorCQkJc2MtPnNjX2FoLT5sZWRfcGluID0gQVRIX0xFRF9QSU5fOTQ4NTsKKwkJZWxzZSBpZiAoQVJfU1JFVl85MzAwKHNjLT5zY19haCkpCisJCQlzYy0+c2NfYWgtPmxlZF9waW4gPSBBVEhfTEVEX1BJTl85MzAwOworCQllbHNlCisJCQlzYy0+c2NfYWgtPmxlZF9waW4gPSBBVEhfTEVEX1BJTl9ERUY7CisJfQogCiAJLyogQ29uZmlndXJlIGdwaW8gMSBmb3Igb3V0cHV0ICovCiAJYXRoOWtfaHdfY2ZnX291dHB1dChzYy0+c2NfYWgsIHNjLT5zY19haC0+bGVkX3BpbiwKQEAgLTEzNiwxMCArMTQwLDEwIEBACiAKIHN0YXRpYyB2b2lkIGF0aDlrX2dlbl90aW1lcl9zdGFydChzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgIHN0cnVjdCBhdGhfZ2VuX3RpbWVyICp0aW1lciwKLQkJCQkgIHUzMiB0aW1lcl9uZXh0LAorCQkJCSAgdTMyIHRyaWdfdGltZW91dCwKIAkJCQkgIHUzMiB0aW1lcl9wZXJpb2QpCiB7Ci0JYXRoOWtfaHdfZ2VuX3RpbWVyX3N0YXJ0KGFoLCB0aW1lciwgdGltZXJfbmV4dCwgdGltZXJfcGVyaW9kKTsKKwlhdGg5a19od19nZW5fdGltZXJfc3RhcnQoYWgsIHRpbWVyLCB0cmlnX3RpbWVvdXQsIHRpbWVyX3BlcmlvZCk7CiAKIAlpZiAoKGFoLT5pbWFzayAmIEFUSDlLX0lOVF9HRU5USU1FUikgPT0gMCkgewogCQlhdGg5a19od19kaXNhYmxlX2ludGVycnVwdHMoYWgpOwpAQCAtMTcyLDE3ICsxNzYsMTcgQEAKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IChzdHJ1Y3QgYXRoX3NvZnRjICopIGRhdGE7CiAJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CiAJc3RydWN0IGF0aF9idGNvZXggKmJ0Y29leCA9ICZzYy0+YnRjb2V4OwotCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwogCXUzMiB0aW1lcl9wZXJpb2Q7CiAJYm9vbCBpc19idHNjYW47CiAKKwlhdGg5a19wc193YWtldXAoc2MpOwogCWF0aF9kZXRlY3RfYnRfcHJpb3JpdHkoc2MpOwogCiAJaXNfYnRzY2FuID0gc2MtPnNjX2ZsYWdzICYgU0NfT1BfQlRfU0NBTjsKIAogCXNwaW5fbG9ja19iaCgmYnRjb2V4LT5idGNvZXhfbG9jayk7CiAKLQlhdGg5a19jbW5fYnRjb2V4X2J0X3N0b21wKGNvbW1vbiwgaXNfYnRzY2FuID8gQVRIX0JUQ09FWF9TVE9NUF9BTEwgOgorCWF0aDlrX2h3X2J0Y29leF9idF9zdG9tcChhaCwgaXNfYnRzY2FuID8gQVRIX0JUQ09FWF9TVE9NUF9BTEwgOgogCQkJICAgICAgYnRjb2V4LT5idF9zdG9tcF90eXBlKTsKIAogCXNwaW5fdW5sb2NrX2JoKCZidGNvZXgtPmJ0Y29leF9sb2NrKTsKQEAgLTE5MywxMSArMTk3LDEyIEBACiAKIAkJdGltZXJfcGVyaW9kID0gaXNfYnRzY2FuID8gYnRjb2V4LT5idHNjYW5fbm9fc3RvbXAgOgogCQkJCQkgICBidGNvZXgtPmJ0Y29leF9ub19zdG9tcDsKLQkJYXRoOWtfZ2VuX3RpbWVyX3N0YXJ0KGFoLCBidGNvZXgtPm5vX3N0b21wX3RpbWVyLCAwLAorCQlhdGg5a19nZW5fdGltZXJfc3RhcnQoYWgsIGJ0Y29leC0+bm9fc3RvbXBfdGltZXIsIHRpbWVyX3BlcmlvZCwKIAkJCQkgICAgICB0aW1lcl9wZXJpb2QgKiAxMCk7CiAJCWJ0Y29leC0+aHdfdGltZXJfZW5hYmxlZCA9IHRydWU7CiAJfQogCisJYXRoOWtfcHNfcmVzdG9yZShzYyk7CiAJbW9kX3RpbWVyKCZidGNvZXgtPnBlcmlvZF90aW1lciwgamlmZmllcyArCiAJCQkJICBtc2Vjc190b19qaWZmaWVzKEFUSF9CVENPRVhfREVGX0JUX1BFUklPRCkpOwogfQpAQCAtMjE3LDE0ICsyMjIsMTYgQEAKIAlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19CVENPRVgsCiAJCSJubyBzdG9tcCB0aW1lciBydW5uaW5nXG4iKTsKIAorCWF0aDlrX3BzX3dha2V1cChzYyk7CiAJc3Bpbl9sb2NrX2JoKCZidGNvZXgtPmJ0Y29leF9sb2NrKTsKIAogCWlmIChidGNvZXgtPmJ0X3N0b21wX3R5cGUgPT0gQVRIX0JUQ09FWF9TVE9NUF9MT1cgfHwgaXNfYnRzY2FuKQotCQlhdGg5a19jbW5fYnRjb2V4X2J0X3N0b21wKGNvbW1vbiwgQVRIX0JUQ09FWF9TVE9NUF9OT05FKTsKKwkJYXRoOWtfaHdfYnRjb2V4X2J0X3N0b21wKGFoLCBBVEhfQlRDT0VYX1NUT01QX05PTkUpOwogCSBlbHNlIGlmIChidGNvZXgtPmJ0X3N0b21wX3R5cGUgPT0gQVRIX0JUQ09FWF9TVE9NUF9BTEwpCi0JCWF0aDlrX2Ntbl9idGNvZXhfYnRfc3RvbXAoY29tbW9uLCBBVEhfQlRDT0VYX1NUT01QX0xPVyk7CisJCWF0aDlrX2h3X2J0Y29leF9idF9zdG9tcChhaCwgQVRIX0JUQ09FWF9TVE9NUF9MT1cpOwogCiAJc3Bpbl91bmxvY2tfYmgoJmJ0Y29leC0+YnRjb2V4X2xvY2spOworCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogfQogCiBpbnQgYXRoX2luaXRfYnRjb2V4X3RpbWVyKHN0cnVjdCBhdGhfc29mdGMgKnNjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmMKaW5kZXggMmQxMDIzOS4uMmUzYTMzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jCkBAIC0xNywxMSArMTcsOSBAQAogI2luY2x1ZGUgImh0Yy5oIgogCiAvKiBpZGVudGlmeSBmaXJtd2FyZSBpbWFnZXMgKi8KLSNkZWZpbmUgRklSTVdBUkVfQVI3MDEwCQkiYXI3MDEwLmZ3IgotI2RlZmluZSBGSVJNV0FSRV9BUjcwMTBfMV8xCSJhcjcwMTBfMV8xLmZ3IgotI2RlZmluZSBGSVJNV0FSRV9BUjkyNzEJCSJhcjkyNzEuZnciCisjZGVmaW5lIEZJUk1XQVJFX0FSNzAxMF8xXzEgICAgICJodGNfNzAxMC5mdyIKKyNkZWZpbmUgRklSTVdBUkVfQVI5MjcxICAgICAgICAgImh0Y185MjcxLmZ3IgogCi1NT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfQVI3MDEwKTsKIE1PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV9BUjcwMTBfMV8xKTsKIE1PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV9BUjkyNzEpOwogCkBAIC04MCw3ICs3OCw3IEBACiAKIAlpZiAoY21kKSB7CiAJCWF0aDlrX2h0Y190eGNvbXBsZXRpb25fY2IoY21kLT5oaWZfZGV2LT5odGNfaGFuZGxlLAotCQkJCQkgIGNtZC0+c2tiLCAxKTsKKwkJCQkJICBjbWQtPnNrYiwgdHJ1ZSk7CiAJCWtmcmVlKGNtZCk7CiAJfQogCkBAIC0xMjYsNiArMTI0LDkwIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgaGlmX3VzYl9tZ210X2NiKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgY21kX2J1ZiAqY21kID0gKHN0cnVjdCBjbWRfYnVmICopdXJiLT5jb250ZXh0OworCXN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqaGlmX2RldiA9IGNtZC0+aGlmX2RldjsKKwlib29sIHR4b2sgPSB0cnVlOworCisJaWYgKCFjbWQgfHwgIWNtZC0+c2tiIHx8ICFjbWQtPmhpZl9kZXYpCisJCXJldHVybjsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0RFVjoKKwljYXNlIC1FU0hVVERPV046CisJCXR4b2sgPSBmYWxzZTsKKworCQkvKgorCQkgKiBJZiB0aGUgVVJCcyBhcmUgYmVpbmcgZmx1c2hlZCwgbm8gbmVlZCB0byBjb21wbGV0ZQorCQkgKiB0aGlzIHBhY2tldC4KKwkJICovCisJCXNwaW5fbG9jaygmaGlmX2Rldi0+dHgudHhfbG9jayk7CisJCWlmIChoaWZfZGV2LT50eC5mbGFncyAmIEhJRl9VU0JfVFhfRkxVU0gpIHsKKwkJCXNwaW5fdW5sb2NrKCZoaWZfZGV2LT50eC50eF9sb2NrKTsKKwkJCWRldl9rZnJlZV9za2JfYW55KGNtZC0+c2tiKTsKKwkJCWtmcmVlKGNtZCk7CisJCQlyZXR1cm47CisJCX0KKwkJc3Bpbl91bmxvY2soJmhpZl9kZXYtPnR4LnR4X2xvY2spOworCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXR4b2sgPSBmYWxzZTsKKwkJYnJlYWs7CisJfQorCisJc2tiX3B1bGwoY21kLT5za2IsIDQpOworCWF0aDlrX2h0Y190eGNvbXBsZXRpb25fY2IoY21kLT5oaWZfZGV2LT5odGNfaGFuZGxlLAorCQkJCSAgY21kLT5za2IsIHR4b2spOworCWtmcmVlKGNtZCk7Cit9CisKK3N0YXRpYyBpbnQgaGlmX3VzYl9zZW5kX21nbXQoc3RydWN0IGhpZl9kZXZpY2VfdXNiICpoaWZfZGV2LAorCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCB1cmIgKnVyYjsKKwlzdHJ1Y3QgY21kX2J1ZiAqY21kOworCWludCByZXQgPSAwOworCV9fbGUxNiAqaGRyOworCisJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKKwlpZiAodXJiID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9BVE9NSUMpOworCWlmIChjbWQgPT0gTlVMTCkgeworCQl1c2JfZnJlZV91cmIodXJiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJY21kLT5za2IgPSBza2I7CisJY21kLT5oaWZfZGV2ID0gaGlmX2RldjsKKworCWhkciA9IChfX2xlMTYgKikgc2tiX3B1c2goc2tiLCA0KTsKKwkqaGRyKysgPSBjcHVfdG9fbGUxNihza2ItPmxlbiAtIDQpOworCSpoZHIrKyA9IGNwdV90b19sZTE2KEFUSF9VU0JfVFhfU1RSRUFNX01PREVfVEFHKTsKKworCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgaGlmX2Rldi0+dWRldiwKKwkJCSB1c2Jfc25kYnVsa3BpcGUoaGlmX2Rldi0+dWRldiwgVVNCX1dMQU5fVFhfUElQRSksCisJCQkgc2tiLT5kYXRhLCBza2ItPmxlbiwKKwkJCSBoaWZfdXNiX21nbXRfY2IsIGNtZCk7CisKKwl1c2JfYW5jaG9yX3VyYih1cmIsICZoaWZfZGV2LT5tZ210X3N1Ym1pdHRlZCk7CisJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0KSB7CisJCXVzYl91bmFuY2hvcl91cmIodXJiKTsKKwkJa2ZyZWUoY21kKTsKKwl9CisJdXNiX2ZyZWVfdXJiKHVyYik7CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfc2tiX3F1ZXVlX3B1cmdlKHN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqaGlmX2RldiwKIAkJCQkJIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpCiB7CkBAIC0xMzMsNyArMjE1LDIyIEBACiAKIAl3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUobGlzdCkpICE9IE5VTEwpIHsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJVFhfU1RBVF9JTkMoc2tiX2Ryb3BwZWQpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX3NrYl9xdWV1ZV9jb21wbGV0ZShzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYsCisJCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZSwKKwkJCQkJICAgIGJvb2wgdHhvaykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJd2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKHF1ZXVlKSkgIT0gTlVMTCkgeworCQlhdGg5a19odGNfdHhjb21wbGV0aW9uX2NiKGhpZl9kZXYtPmh0Y19oYW5kbGUsCisJCQkJCSAgc2tiLCB0eG9rKTsKKwkJaWYgKHR4b2spCisJCQlUWF9TVEFUX0lOQyhza2Jfc3VjY2Vzcyk7CisJCWVsc2UKKwkJCVRYX1NUQVRfSU5DKHNrYl9mYWlsZWQpOwogCX0KIH0KIApAQCAtMTQxLDcgKzIzOCw3IEBACiB7CiAJc3RydWN0IHR4X2J1ZiAqdHhfYnVmID0gKHN0cnVjdCB0eF9idWYgKikgdXJiLT5jb250ZXh0OwogCXN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqaGlmX2RldjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWJvb2wgdHhvayA9IHRydWU7CiAKIAlpZiAoIXR4X2J1ZiB8fCAhdHhfYnVmLT5oaWZfZGV2KQogCQlyZXR1cm47CkBAIC0xNTUsMTAgKzI1Miw3IEBACiAJY2FzZSAtRUNPTk5SRVNFVDoKIAljYXNlIC1FTk9ERVY6CiAJY2FzZSAtRVNIVVRET1dOOgotCQkvKgotCQkgKiBUaGUgVVJCIGhhcyBiZWVuIGtpbGxlZCwgZnJlZSB0aGUgU0tCcy4KLQkJICovCi0JCWF0aDlrX3NrYl9xdWV1ZV9wdXJnZShoaWZfZGV2LCAmdHhfYnVmLT5za2JfcXVldWUpOworCQl0eG9rID0gZmFsc2U7CiAKIAkJLyoKIAkJICogSWYgdGhlIFVSQnMgYXJlIGJlaW5nIGZsdXNoZWQsIG5vIG5lZWQgdG8gYWRkIHRoaXMKQEAgLTE2Nyw0MSArMjYxLDE5IEBACiAJCXNwaW5fbG9jaygmaGlmX2Rldi0+dHgudHhfbG9jayk7CiAJCWlmIChoaWZfZGV2LT50eC5mbGFncyAmIEhJRl9VU0JfVFhfRkxVU0gpIHsKIAkJCXNwaW5fdW5sb2NrKCZoaWZfZGV2LT50eC50eF9sb2NrKTsKKwkJCWF0aDlrX3NrYl9xdWV1ZV9wdXJnZShoaWZfZGV2LCAmdHhfYnVmLT5za2JfcXVldWUpOwogCQkJcmV0dXJuOwogCQl9CiAJCXNwaW5fdW5sb2NrKCZoaWZfZGV2LT50eC50eF9sb2NrKTsKIAotCQkvKgotCQkgKiBJbiB0aGUgc3RvcCgpIGNhc2UsIHRoaXMgVVJCIGhhcyB0byBiZSBhZGRlZCB0bwotCQkgKiB0aGUgZnJlZSBsaXN0LgotCQkgKi8KLQkJZ290byBhZGRfZnJlZTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKKwkJdHhvayA9IGZhbHNlOwogCQlicmVhazsKIAl9CiAKLQkvKgotCSAqIENoZWNrIGlmIFRYIGhhcyBiZWVuIHN0b3BwZWQsIHRoaXMgaXMgbmVlZGVkIGJlY2F1c2UKLQkgKiB0aGlzIENCIGNvdWxkIGhhdmUgYmVlbiBpbnZva2VkIGp1c3QgYWZ0ZXIgdGhlIFRYIGxvY2sKLQkgKiB3YXMgcmVsZWFzZWQgaW4gaGlmX3N0b3AoKSBhbmQga2lsbF91cmIoKSBoYXNuJ3QgYmVlbgotCSAqIGNhbGxlZCB5ZXQuCi0JICovCi0Jc3Bpbl9sb2NrKCZoaWZfZGV2LT50eC50eF9sb2NrKTsKLQlpZiAoaGlmX2Rldi0+dHguZmxhZ3MgJiBISUZfVVNCX1RYX1NUT1ApIHsKLQkJc3Bpbl91bmxvY2soJmhpZl9kZXYtPnR4LnR4X2xvY2spOwotCQlhdGg5a19za2JfcXVldWVfcHVyZ2UoaGlmX2RldiwgJnR4X2J1Zi0+c2tiX3F1ZXVlKTsKLQkJZ290byBhZGRfZnJlZTsKLQl9Ci0Jc3Bpbl91bmxvY2soJmhpZl9kZXYtPnR4LnR4X2xvY2spOworCWF0aDlrX3NrYl9xdWV1ZV9jb21wbGV0ZShoaWZfZGV2LCAmdHhfYnVmLT5za2JfcXVldWUsIHR4b2spOwogCi0JLyogQ29tcGxldGUgdGhlIHF1ZXVlZCBTS0JzLiAqLwotCXdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZSgmdHhfYnVmLT5za2JfcXVldWUpKSAhPSBOVUxMKSB7Ci0JCWF0aDlrX2h0Y190eGNvbXBsZXRpb25fY2IoaGlmX2Rldi0+aHRjX2hhbmRsZSwKLQkJCQkJICBza2IsIDEpOwotCQlUWF9TVEFUX0lOQyhza2JfY29tcGxldGVkKTsKLQl9Ci0KLWFkZF9mcmVlOgogCS8qIFJlLWluaXRpYWxpemUgdGhlIFNLQiBxdWV1ZSAqLwogCXR4X2J1Zi0+bGVuID0gdHhfYnVmLT5vZmZzZXQgPSAwOwogCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmdHhfYnVmLT5za2JfcXVldWUpOwpAQCAtMjc0LDcgKzM0Niw3IEBACiAJcmV0ID0gdXNiX3N1Ym1pdF91cmIodHhfYnVmLT51cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXQpIHsKIAkJdHhfYnVmLT5sZW4gPSB0eF9idWYtPm9mZnNldCA9IDA7Ci0JCWF0aDlrX3NrYl9xdWV1ZV9wdXJnZShoaWZfZGV2LCAmdHhfYnVmLT5za2JfcXVldWUpOworCQlhdGg5a19za2JfcXVldWVfY29tcGxldGUoaGlmX2RldiwgJnR4X2J1Zi0+c2tiX3F1ZXVlLCBmYWxzZSk7CiAJCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmdHhfYnVmLT5za2JfcXVldWUpOwogCQlsaXN0X21vdmVfdGFpbCgmdHhfYnVmLT5saXN0LCAmaGlmX2Rldi0+dHgudHhfYnVmKTsKIAkJaGlmX2Rldi0+dHgudHhfYnVmX2NudCsrOwpAQCAtMjg2LDEwICszNTgsMTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGhpZl91c2Jfc2VuZF90eChzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICBzdHJ1Y3QgYXRoOWtfaHRjX3R4X2N0bCAqdHhfY3RsKQorc3RhdGljIGludCBoaWZfdXNiX3NlbmRfdHgoc3RydWN0IGhpZl9kZXZpY2VfdXNiICpoaWZfZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCXN0cnVjdCBhdGg5a19odGNfdHhfY3RsICp0eF9jdGw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZoaWZfZGV2LT50eC50eF9sb2NrLCBmbGFncyk7CiAKQEAgLTMwNCwyNiArMzc3LDM2IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCV9fc2tiX3F1ZXVlX3RhaWwoJmhpZl9kZXYtPnR4LnR4X3NrYl9xdWV1ZSwgc2tiKTsKLQloaWZfZGV2LT50eC50eF9za2JfY250Kys7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGlmX2Rldi0+dHgudHhfbG9jaywgZmxhZ3MpOwogCi0JLyogU2VuZCBub3JtYWwgZnJhbWVzIGltbWVkaWF0ZWx5ICovCi0JaWYgKCF0eF9jdGwgfHwgKHR4X2N0bCAmJiAodHhfY3RsLT50eXBlID09IEFUSDlLX0hUQ19OT1JNQUwpKSkKLQkJX19oaWZfdXNiX3R4KGhpZl9kZXYpOworCXR4X2N0bCA9IEhUQ19TS0JfQ0Ioc2tiKTsKKworCS8qIE1nbXQvQmVhY29uIGZyYW1lcyBkb24ndCB1c2UgdGhlIFRYIGJ1ZmZlciBwb29sICovCisJaWYgKCh0eF9jdGwtPnR5cGUgPT0gQVRIOUtfSFRDX01HTVQpIHx8CisJICAgICh0eF9jdGwtPnR5cGUgPT0gQVRIOUtfSFRDX0JFQUNPTikpIHsKKwkJcmV0ID0gaGlmX3VzYl9zZW5kX21nbXQoaGlmX2Rldiwgc2tiKTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaGlmX2Rldi0+dHgudHhfbG9jaywgZmxhZ3MpOworCisJaWYgKCh0eF9jdGwtPnR5cGUgPT0gQVRIOUtfSFRDX05PUk1BTCkgfHwKKwkgICAgKHR4X2N0bC0+dHlwZSA9PSBBVEg5S19IVENfQU1QRFUpKSB7CisJCV9fc2tiX3F1ZXVlX3RhaWwoJmhpZl9kZXYtPnR4LnR4X3NrYl9xdWV1ZSwgc2tiKTsKKwkJaGlmX2Rldi0+dHgudHhfc2tiX2NudCsrOworCX0KIAogCS8qIENoZWNrIGlmIEFNUERVcyBoYXZlIHRvIGJlIHNlbnQgaW1tZWRpYXRlbHkgKi8KLQlpZiAodHhfY3RsICYmICh0eF9jdGwtPnR5cGUgPT0gQVRIOUtfSFRDX0FNUERVKSAmJgotCSAgICAoaGlmX2Rldi0+dHgudHhfYnVmX2NudCA9PSBNQVhfVFhfVVJCX05VTSkgJiYKKwlpZiAoKGhpZl9kZXYtPnR4LnR4X2J1Zl9jbnQgPT0gTUFYX1RYX1VSQl9OVU0pICYmCiAJICAgIChoaWZfZGV2LT50eC50eF9za2JfY250IDwgMikpIHsKIAkJX19oaWZfdXNiX3R4KGhpZl9kZXYpOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhpZl9kZXYtPnR4LnR4X2xvY2ssIGZsYWdzKTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGhpZl91c2Jfc3RhcnQodm9pZCAqaGlmX2hhbmRsZSwgdTggcGlwZV9pZCkKK3N0YXRpYyB2b2lkIGhpZl91c2Jfc3RhcnQodm9pZCAqaGlmX2hhbmRsZSkKIHsKIAlzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYgPSAoc3RydWN0IGhpZl9kZXZpY2VfdXNiICopaGlmX2hhbmRsZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMzM1LDE0ICs0MTgsMTQgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoaWZfZGV2LT50eC50eF9sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIGhpZl91c2Jfc3RvcCh2b2lkICpoaWZfaGFuZGxlLCB1OCBwaXBlX2lkKQorc3RhdGljIHZvaWQgaGlmX3VzYl9zdG9wKHZvaWQgKmhpZl9oYW5kbGUpCiB7CiAJc3RydWN0IGhpZl9kZXZpY2VfdXNiICpoaWZfZGV2ID0gKHN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqKWhpZl9oYW5kbGU7CiAJc3RydWN0IHR4X2J1ZiAqdHhfYnVmID0gTlVMTCwgKnR4X2J1Zl90bXAgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaGlmX2Rldi0+dHgudHhfbG9jaywgZmxhZ3MpOwotCWF0aDlrX3NrYl9xdWV1ZV9wdXJnZShoaWZfZGV2LCAmaGlmX2Rldi0+dHgudHhfc2tiX3F1ZXVlKTsKKwlhdGg5a19za2JfcXVldWVfY29tcGxldGUoaGlmX2RldiwgJmhpZl9kZXYtPnR4LnR4X3NrYl9xdWV1ZSwgZmFsc2UpOwogCWhpZl9kZXYtPnR4LnR4X3NrYl9jbnQgPSAwOwogCWhpZl9kZXYtPnR4LmZsYWdzIHw9IEhJRl9VU0JfVFhfU1RPUDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoaWZfZGV2LT50eC50eF9sb2NrLCBmbGFncyk7CkBAIC0zNTIsMTcgKzQzNSwxOCBAQAogCQkJCSAmaGlmX2Rldi0+dHgudHhfcGVuZGluZywgbGlzdCkgewogCQl1c2Jfa2lsbF91cmIodHhfYnVmLT51cmIpOwogCX0KKworCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJmhpZl9kZXYtPm1nbXRfc3VibWl0dGVkKTsKIH0KIAotc3RhdGljIGludCBoaWZfdXNiX3NlbmQodm9pZCAqaGlmX2hhbmRsZSwgdTggcGlwZV9pZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCXN0cnVjdCBhdGg5a19odGNfdHhfY3RsICp0eF9jdGwpCitzdGF0aWMgaW50IGhpZl91c2Jfc2VuZCh2b2lkICpoaWZfaGFuZGxlLCB1OCBwaXBlX2lkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqaGlmX2RldiA9IChzdHJ1Y3QgaGlmX2RldmljZV91c2IgKiloaWZfaGFuZGxlOwogCWludCByZXQgPSAwOwogCiAJc3dpdGNoIChwaXBlX2lkKSB7CiAJY2FzZSBVU0JfV0xBTl9UWF9QSVBFOgotCQlyZXQgPSBoaWZfdXNiX3NlbmRfdHgoaGlmX2Rldiwgc2tiLCB0eF9jdGwpOworCQlyZXQgPSBoaWZfdXNiX3NlbmRfdHgoaGlmX2Rldiwgc2tiKTsKIAkJYnJlYWs7CiAJY2FzZSBVU0JfUkVHX09VVF9QSVBFOgogCQlyZXQgPSBoaWZfdXNiX3NlbmRfcmVnb3V0KGhpZl9kZXYsIHNrYik7CkBAIC0zNzcsNiArNDYxLDQwIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGNoZWNrX2luZGV4KHN0cnVjdCBza19idWZmICpza2IsIHU4IGlkeCkKK3sKKwlzdHJ1Y3QgYXRoOWtfaHRjX3R4X2N0bCAqdHhfY3RsOworCisJdHhfY3RsID0gSFRDX1NLQl9DQihza2IpOworCisJaWYgKCh0eF9jdGwtPnR5cGUgPT0gQVRIOUtfSFRDX0FNUERVKSAmJgorCSAgICAodHhfY3RsLT5zdGFfaWR4ID09IGlkeCkpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBoaWZfdXNiX3N0YV9kcmFpbih2b2lkICpoaWZfaGFuZGxlLCB1OCBpZHgpCit7CisJc3RydWN0IGhpZl9kZXZpY2VfdXNiICpoaWZfZGV2ID0gKHN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqKWhpZl9oYW5kbGU7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKnRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhpZl9kZXYtPnR4LnR4X2xvY2ssIGZsYWdzKTsKKworCXNrYl9xdWV1ZV93YWxrX3NhZmUoJmhpZl9kZXYtPnR4LnR4X3NrYl9xdWV1ZSwgc2tiLCB0bXApIHsKKwkJaWYgKGNoZWNrX2luZGV4KHNrYiwgaWR4KSkgeworCQkJX19za2JfdW5saW5rKHNrYiwgJmhpZl9kZXYtPnR4LnR4X3NrYl9xdWV1ZSk7CisJCQlhdGg5a19odGNfdHhjb21wbGV0aW9uX2NiKGhpZl9kZXYtPmh0Y19oYW5kbGUsCisJCQkJCQkgIHNrYiwgZmFsc2UpOworCQkJaGlmX2Rldi0+dHgudHhfc2tiX2NudC0tOworCQkJVFhfU1RBVF9JTkMoc2tiX2ZhaWxlZCk7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoaWZfZGV2LT50eC50eF9sb2NrLCBmbGFncyk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgYXRoOWtfaHRjX2hpZiBoaWZfdXNiID0gewogCS50cmFuc3BvcnQgPSBBVEg5S19ISUZfVVNCLAogCS5uYW1lID0gImF0aDlrX2hpZl91c2IiLApAQCAtMzg2LDYgKzUwNCw3IEBACiAKIAkuc3RhcnQgPSBoaWZfdXNiX3N0YXJ0LAogCS5zdG9wID0gaGlmX3VzYl9zdG9wLAorCS5zdGFfZHJhaW4gPSBoaWZfdXNiX3N0YV9kcmFpbiwKIAkuc2VuZCA9IGhpZl91c2Jfc2VuZCwKIH07CiAKQEAgLTU2Nyw2ICs2ODYsOSBAQAogCWNhc2UgLUVTSFVURE9XTjoKIAkJZ290byBmcmVlOwogCWRlZmF1bHQ6CisJCXNrYl9yZXNldF90YWlsX3BvaW50ZXIoc2tiKTsKKwkJc2tiX3RyaW0oc2tiLCAwKTsKKwogCQlnb3RvIHJlc3VibWl0OwogCX0KIApAQCAtNTkxLDIzICs3MTMsMTUgQEAKIAkJCQkJCSBVU0JfUkVHX0lOX1BJUEUpLAogCQkJCSBuc2tiLT5kYXRhLCBNQVhfUkVHX0lOX0JVRl9TSVpFLAogCQkJCSBhdGg5a19oaWZfdXNiX3JlZ19pbl9jYiwgbnNrYik7Ci0KLQkJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKLQkJaWYgKHJldCkgewotCQkJa2ZyZWVfc2tiKG5za2IpOwotCQkJdXJiLT5jb250ZXh0ID0gTlVMTDsKLQkJfQotCi0JCXJldHVybjsKIAl9CiAKIHJlc3VibWl0OgotCXNrYl9yZXNldF90YWlsX3BvaW50ZXIoc2tiKTsKLQlza2JfdHJpbShza2IsIDApOwotCisJdXNiX2FuY2hvcl91cmIodXJiLCAmaGlmX2Rldi0+cmVnX2luX3N1Ym1pdHRlZCk7CiAJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKLQlpZiAocmV0KQorCWlmIChyZXQpIHsKKwkJdXNiX3VuYW5jaG9yX3VyYih1cmIpOwogCQlnb3RvIGZyZWU7CisJfQogCiAJcmV0dXJuOwogZnJlZToKQEAgLTY0MSw2ICs3NTUsOCBAQAogCQlrZnJlZSh0eF9idWYtPmJ1Zik7CiAJCWtmcmVlKHR4X2J1Zik7CiAJfQorCisJdXNiX2tpbGxfYW5jaG9yZWRfdXJicygmaGlmX2Rldi0+bWdtdF9zdWJtaXR0ZWQpOwogfQogCiBzdGF0aWMgaW50IGF0aDlrX2hpZl91c2JfYWxsb2NfdHhfdXJicyhzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYpCkBAIC02NTIsNiArNzY4LDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmaGlmX2Rldi0+dHgudHhfcGVuZGluZyk7CiAJc3Bpbl9sb2NrX2luaXQoJmhpZl9kZXYtPnR4LnR4X2xvY2spOwogCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmaGlmX2Rldi0+dHgudHhfc2tiX3F1ZXVlKTsKKwlpbml0X3VzYl9hbmNob3IoJmhpZl9kZXYtPm1nbXRfc3VibWl0dGVkKTsKIAogCWZvciAoaSA9IDA7IGkgPCBNQVhfVFhfVVJCX05VTTsgaSsrKSB7CiAJCXR4X2J1ZiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0eF9idWYpLCBHRlBfS0VSTkVMKTsKQEAgLTc0OCw0MyArODY1LDY3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaGlmX3VzYl9kZWFsbG9jX3JlZ19pbl91cmIoc3RydWN0IGhpZl9kZXZpY2VfdXNiICpoaWZfZGV2KQorc3RhdGljIHZvaWQgYXRoOWtfaGlmX3VzYl9kZWFsbG9jX3JlZ19pbl91cmJzKHN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqaGlmX2RldikKIHsKLQlpZiAoaGlmX2Rldi0+cmVnX2luX3VyYikgewotCQl1c2Jfa2lsbF91cmIoaGlmX2Rldi0+cmVnX2luX3VyYik7Ci0JCWlmIChoaWZfZGV2LT5yZWdfaW5fdXJiLT5jb250ZXh0KQotCQkJa2ZyZWVfc2tiKCh2b2lkICopaGlmX2Rldi0+cmVnX2luX3VyYi0+Y29udGV4dCk7Ci0JCXVzYl9mcmVlX3VyYihoaWZfZGV2LT5yZWdfaW5fdXJiKTsKLQkJaGlmX2Rldi0+cmVnX2luX3VyYiA9IE5VTEw7Ci0JfQorCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJmhpZl9kZXYtPnJlZ19pbl9zdWJtaXR0ZWQpOwogfQogCi1zdGF0aWMgaW50IGF0aDlrX2hpZl91c2JfYWxsb2NfcmVnX2luX3VyYihzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYpCitzdGF0aWMgaW50IGF0aDlrX2hpZl91c2JfYWxsb2NfcmVnX2luX3VyYnMoc3RydWN0IGhpZl9kZXZpY2VfdXNiICpoaWZfZGV2KQogewotCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHVyYiAqdXJiID0gTlVMTDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKKwlpbnQgaSwgcmV0OwogCi0JaGlmX2Rldi0+cmVnX2luX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGhpZl9kZXYtPnJlZ19pbl91cmIgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJaW5pdF91c2JfYW5jaG9yKCZoaWZfZGV2LT5yZWdfaW5fc3VibWl0dGVkKTsKIAotCXNrYiA9IGFsbG9jX3NrYihNQVhfUkVHX0lOX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNrYikKLQkJZ290byBlcnI7CisJZm9yIChpID0gMDsgaSA8IE1BWF9SRUdfSU5fVVJCX05VTTsgaSsrKSB7CiAKLQl1c2JfZmlsbF9idWxrX3VyYihoaWZfZGV2LT5yZWdfaW5fdXJiLCBoaWZfZGV2LT51ZGV2LAotCQkJIHVzYl9yY3ZidWxrcGlwZShoaWZfZGV2LT51ZGV2LAotCQkJCQkgVVNCX1JFR19JTl9QSVBFKSwKLQkJCSBza2ItPmRhdGEsIE1BWF9SRUdfSU5fQlVGX1NJWkUsCi0JCQkgYXRoOWtfaGlmX3VzYl9yZWdfaW5fY2IsIHNrYik7CisJCS8qIEFsbG9jYXRlIFVSQiAqLworCQl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCQlpZiAodXJiID09IE5VTEwpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGVycl91cmI7CisJCX0KIAotCWlmICh1c2Jfc3VibWl0X3VyYihoaWZfZGV2LT5yZWdfaW5fdXJiLCBHRlBfS0VSTkVMKSAhPSAwKQotCQlnb3RvIGVycjsKKwkJLyogQWxsb2NhdGUgYnVmZmVyICovCisJCXNrYiA9IGFsbG9jX3NrYihNQVhfUkVHX0lOX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFza2IpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9za2I7CisJCX0KKworCQl1c2JfZmlsbF9idWxrX3VyYih1cmIsIGhpZl9kZXYtPnVkZXYsCisJCQkJICB1c2JfcmN2YnVsa3BpcGUoaGlmX2Rldi0+dWRldiwKKwkJCQkJCSAgVVNCX1JFR19JTl9QSVBFKSwKKwkJCQkgIHNrYi0+ZGF0YSwgTUFYX1JFR19JTl9CVUZfU0laRSwKKwkJCQkgIGF0aDlrX2hpZl91c2JfcmVnX2luX2NiLCBza2IpOworCisJCS8qIEFuY2hvciBVUkIgKi8KKwkJdXNiX2FuY2hvcl91cmIodXJiLCAmaGlmX2Rldi0+cmVnX2luX3N1Ym1pdHRlZCk7CisKKwkJLyogU3VibWl0IFVSQiAqLworCQlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOworCQlpZiAocmV0KSB7CisJCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7CisJCQlnb3RvIGVycl9zdWJtaXQ7CisJCX0KKworCQkvKgorCQkgKiBEcm9wIHJlZmVyZW5jZSBjb3VudC4KKwkJICogVGhpcyBlbnN1cmVzIHRoYXQgdGhlIFVSQiBpcyBmcmVlZCB3aGVuIGtpbGxpbmcgdGhlbS4KKwkJICovCisJCXVzYl9mcmVlX3VyYih1cmIpOworCX0KIAogCXJldHVybiAwOwogCi1lcnI6Ci0JYXRoOWtfaGlmX3VzYl9kZWFsbG9jX3JlZ19pbl91cmIoaGlmX2Rldik7Ci0JcmV0dXJuIC1FTk9NRU07CitlcnJfc3VibWl0OgorCWtmcmVlX3NrYihza2IpOworZXJyX3NrYjoKKwl1c2JfZnJlZV91cmIodXJiKTsKK2Vycl91cmI6CisJYXRoOWtfaGlmX3VzYl9kZWFsbG9jX3JlZ19pbl91cmJzKGhpZl9kZXYpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgYXRoOWtfaGlmX3VzYl9hbGxvY191cmJzKHN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqaGlmX2RldikKQEAgLTgwMSw3ICs5NDIsNyBAQAogCQlnb3RvIGVycl9yeDsKIAogCS8qIFJlZ2lzdGVyIFJlYWQgKi8KLQlpZiAoYXRoOWtfaGlmX3VzYl9hbGxvY19yZWdfaW5fdXJiKGhpZl9kZXYpIDwgMCkKKwlpZiAoYXRoOWtfaGlmX3VzYl9hbGxvY19yZWdfaW5fdXJicyhoaWZfZGV2KSA8IDApCiAJCWdvdG8gZXJyX3JlZzsKIAogCXJldHVybiAwOwpAQCAtODE2LDcgKzk1Nyw3IEBACiBzdGF0aWMgdm9pZCBhdGg5a19oaWZfdXNiX2RlYWxsb2NfdXJicyhzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYpCiB7CiAJdXNiX2tpbGxfYW5jaG9yZWRfdXJicygmaGlmX2Rldi0+cmVnb3V0X3N1Ym1pdHRlZCk7Ci0JYXRoOWtfaGlmX3VzYl9kZWFsbG9jX3JlZ19pbl91cmIoaGlmX2Rldik7CisJYXRoOWtfaGlmX3VzYl9kZWFsbG9jX3JlZ19pbl91cmJzKGhpZl9kZXYpOwogCWF0aDlrX2hpZl91c2JfZGVhbGxvY190eF91cmJzKGhpZl9kZXYpOwogCWF0aDlrX2hpZl91c2JfZGVhbGxvY19yeF91cmJzKGhpZl9kZXYpOwogfQpAQCAtMTAyNiwxMCArMTE2Nyw3IEBACiAJLyogRmluZCBvdXQgd2hpY2ggZmlybXdhcmUgdG8gbG9hZCAqLwogCiAJaWYgKElTX0FSNzAxMF9ERVZJQ0UoaWQtPmRyaXZlcl9pbmZvKSkKLQkJaWYgKGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSA9PSAweDAyMDIpCi0JCQloaWZfZGV2LT5md19uYW1lID0gRklSTVdBUkVfQVI3MDEwXzFfMTsKLQkJZWxzZQotCQkJaGlmX2Rldi0+ZndfbmFtZSA9IEZJUk1XQVJFX0FSNzAxMDsKKwkJaGlmX2Rldi0+ZndfbmFtZSA9IEZJUk1XQVJFX0FSNzAxMF8xXzE7CiAJZWxzZQogCQloaWZfZGV2LT5md19uYW1lID0gRklSTVdBUkVfQVI5MjcxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuaAppbmRleCA3YjlkODYzLi4yYmRjZGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmgKQEAgLTE3LDYgKzE3LDkgQEAKICNpZm5kZWYgSFRDX1VTQl9ICiAjZGVmaW5lIEhUQ19VU0JfSAogCisjZGVmaW5lIE1BSk9SX1ZFUlNJT05fUkVRIDEKKyNkZWZpbmUgTUlOT1JfVkVSU0lPTl9SRVEgMgorCiAjZGVmaW5lIElTX0FSNzAxMF9ERVZJQ0UoX3YpICgoKF92KSA9PSBBUjkyODBfVVNCKSB8fCAoKF92KSA9PSBBUjkyODdfVVNCKSkKIAogI2RlZmluZSBBUjkyNzFfRklSTVdBUkUgICAgICAgMHg1MDEwMDAKQEAgLTMxLDcgKzM0LDcgQEAKIAogLyogRklYTUU6IFZlcmlmeSB0aGVzZSBudW1iZXJzICh3aXRoIFdpbmRvd3MpICovCiAjZGVmaW5lIE1BWF9UWF9VUkJfTlVNICA4Ci0jZGVmaW5lIE1BWF9UWF9CVUZfTlVNICAxMDI0CisjZGVmaW5lIE1BWF9UWF9CVUZfTlVNICAyNTYKICNkZWZpbmUgTUFYX1RYX0JVRl9TSVpFIDMyNzY4CiAjZGVmaW5lIE1BWF9UWF9BR0dSX05VTSAyMAogCkBAIC00MCw3ICs0Myw3IEBACiAjZGVmaW5lIE1BWF9QS1RfTlVNX0lOX1RSQU5TRkVSIDEwCiAKICNkZWZpbmUgTUFYX1JFR19PVVRfVVJCX05VTSAgMQotI2RlZmluZSBNQVhfUkVHX09VVF9CVUZfTlVNICA4CisjZGVmaW5lIE1BWF9SRUdfSU5fVVJCX05VTSAgIDY0CiAKICNkZWZpbmUgTUFYX1JFR19JTl9CVUZfU0laRSA2NAogCkBAIC05MCw5ICs5MywxMCBAQAogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmU7CiAJc3RydWN0IGh0Y190YXJnZXQgKmh0Y19oYW5kbGU7CiAJc3RydWN0IGhpZl91c2JfdHggdHg7Ci0Jc3RydWN0IHVyYiAqcmVnX2luX3VyYjsKIAlzdHJ1Y3QgdXNiX2FuY2hvciByZWdvdXRfc3VibWl0dGVkOwogCXN0cnVjdCB1c2JfYW5jaG9yIHJ4X3N1Ym1pdHRlZDsKKwlzdHJ1Y3QgdXNiX2FuY2hvciByZWdfaW5fc3VibWl0dGVkOworCXN0cnVjdCB1c2JfYW5jaG9yIG1nbXRfc3VibWl0dGVkOwogCXN0cnVjdCBza19idWZmICpyZW1haW5fc2tiOwogCWNvbnN0IGNoYXIgKmZ3X25hbWU7CiAJaW50IHJ4X3JlbWFpbl9sZW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgKaW5kZXggNzUzYTI0NS4uZGZjN2E5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaApAQCAtNjYsMTMgKzY2LDEzIEBACiAJSFRDX01fV0RTCT0gMgogfTsKIAotI2RlZmluZSBBVEg5S19IVENfSERSU1BBQ0Ugc2l6ZW9mKHN0cnVjdCBodGNfZnJhbWVfaGRyKQotI2RlZmluZSBBVEg5S19IVENfQU1QRFUJMQorI2RlZmluZSBBVEg5S19IVENfQU1QRFUgIDEKICNkZWZpbmUgQVRIOUtfSFRDX05PUk1BTCAyCisjZGVmaW5lIEFUSDlLX0hUQ19CRUFDT04gMworI2RlZmluZSBBVEg5S19IVENfTUdNVCAgIDQKIAogI2RlZmluZSBBVEg5S19IVENfVFhfQ1RTT05MWSAgICAgIDB4MQogI2RlZmluZSBBVEg5S19IVENfVFhfUlRTQ1RTICAgICAgIDB4MgotI2RlZmluZSBBVEg5S19IVENfVFhfVVNFX01JTl9SQVRFIDB4MTAwCiAKIHN0cnVjdCB0eF9mcmFtZV9oZHIgewogCXU4IGRhdGFfdHlwZTsKQEAgLTgyLDcgKzgyLDggQEAKIAlfX2JlMzIgZmxhZ3M7IC8qIEFUSDlLX0hUQ19UWF8qICovCiAJdTgga2V5X3R5cGU7CiAJdTgga2V5aXg7Ci0JdTggcmVzZXJ2ZWRbMjZdOworCXU4IGNvb2tpZTsKKwl1OCBwYWQ7CiB9IF9fcGFja2VkOwogCiBzdHJ1Y3QgdHhfbWdtdF9oZHIgewpAQCAtOTIsNTAgKzkzLDM0IEBACiAJdTggZmxhZ3M7CiAJdTgga2V5X3R5cGU7CiAJdTgga2V5aXg7Ci0JdTE2IHJlc2VydmVkOworCXU4IGNvb2tpZTsKKwl1OCBwYWQ7CiB9IF9fcGFja2VkOwogCiBzdHJ1Y3QgdHhfYmVhY29uX2hlYWRlciB7Ci0JdTggbGVuX2NoYW5nZWQ7CiAJdTggdmlmX2luZGV4OworCXU4IGxlbl9jaGFuZ2VkOwogCXUxNiByZXY7CiB9IF9fcGFja2VkOwogCi1zdHJ1Y3QgYXRoOWtfaHRjX3RhcmdldF9odyB7Ci0JdTMyIGZsYWdzOwotCXUzMiBmbGFnc19leHQ7Ci0JdTMyIGFtcGR1X2xpbWl0OwotCXU4IGFtcGR1X3N1YmZyYW1lczsKLQl1OCB0eF9jaGFpbm1hc2s7Ci0JdTggdHhfY2hhaW5tYXNrX2xlZ2FjeTsKLQl1OCBydHNjdHNfcmF0ZWNvZGU7Ci0JdTggcHJvdG1vZGU7Ci19IF9fcGFja2VkOworI2RlZmluZSBNQVhfVFhfQU1QRFVfU1VCRlJBTUVTXzkyNzEgMTcKKyNkZWZpbmUgTUFYX1RYX0FNUERVX1NVQkZSQU1FU183MDEwIDIyCiAKIHN0cnVjdCBhdGg5a19odGNfY2FwX3RhcmdldCB7Ci0JdTMyIGZsYWdzOwotCXUzMiBmbGFnc19leHQ7Ci0JdTMyIGFtcGR1X2xpbWl0OworCV9fYmUzMiBhbXBkdV9saW1pdDsKIAl1OCBhbXBkdV9zdWJmcmFtZXM7CisJdTggZW5hYmxlX2NvZXg7CiAJdTggdHhfY2hhaW5tYXNrOwotCXU4IHR4X2NoYWlubWFza19sZWdhY3k7Ci0JdTggcnRzY3RzX3JhdGVjb2RlOwotCXU4IHByb3Rtb2RlOworCXU4IHBhZDsKIH0gX19wYWNrZWQ7CiAKIHN0cnVjdCBhdGg5a19odGNfdGFyZ2V0X3ZpZiB7CiAJdTggaW5kZXg7Ci0JdTggZGVzX2Jzc2lkW0VUSF9BTEVOXTsKLQlfX2JlMzIgb3Btb2RlOworCXU4IG9wbW9kZTsKIAl1OCBteWFkZHJbRVRIX0FMRU5dOwotCXU4IGJzc2lkW0VUSF9BTEVOXTsKLQl1MzIgZmxhZ3M7Ci0JdTMyIGZsYWdzX2V4dDsKLQl1MTYgcHNfc3RhOwotCV9fYmUxNiBydHN0aHJlc2hvbGQ7CiAJdTggYXRoX2NhcDsKLQl1OCBub2RlOwotCXM4IG1jYXN0X3JhdGU7CisJX19iZTE2IHJ0c3RocmVzaG9sZDsKKwl1OCBwYWQ7CiB9IF9fcGFja2VkOwogCiAjZGVmaW5lIEFUSF9IVENfU1RBX0FVVEggIDB4MDAwMQpAQCAtMTQzLDI3ICsxMjgsMTYgQEAKICNkZWZpbmUgQVRIX0hUQ19TVEFfRVJQICAgMHgwMDA0CiAjZGVmaW5lIEFUSF9IVENfU1RBX0hUICAgIDB4MDAwOAogCi0vKiBGSVhNRTogVUFQU0QgdmFyaWFibGVzICovCiBzdHJ1Y3QgYXRoOWtfaHRjX3RhcmdldF9zdGEgewotCXUxNiBhc3NvY2lkOwotCXUxNiB0eHBvd2VyOwotCXUzMiB1Y2FzdGtleTsKIAl1OCBtYWNhZGRyW0VUSF9BTEVOXTsKIAl1OCBic3NpZFtFVEhfQUxFTl07CiAJdTggc3RhX2luZGV4OwogCXU4IHZpZl9pbmRleDsKLQl1OCB2aWZfc3RhOwotCV9fYmUxNiBmbGFnczsgLyogQVRIX0hUQ19TVEFfKiAqLwotCXUxNiBodGNhcDsKLQl1OCB2YWxpZDsKLQl1MTYgY2FwaW5mbzsKLQlzdHJ1Y3QgYXRoOWtfaHRjX3RhcmdldF9odyAqaHc7Ci0Jc3RydWN0IGF0aDlrX2h0Y190YXJnZXRfdmlmICp2aWY7Ci0JdTE2IHR4c2VxbWdtdDsKIAl1OCBpc192aWZfc3RhOwotCXUxNiBtYXhhbXBkdTsKLQl1MTYgaXYxNjsKLQl1MzIgaXYzMjsKKwlfX2JlMTYgZmxhZ3M7IC8qIEFUSF9IVENfU1RBXyogKi8KKwlfX2JlMTYgaHRjYXA7CisJX19iZTE2IG1heGFtcGR1OworCXU4IHBhZDsKIH0gX19wYWNrZWQ7CiAKIHN0cnVjdCBhdGg5a19odGNfdGFyZ2V0X2FnZ3IgewpAQCAtMTk3LDEyICsxNzEsMzggQEAKIAlzdHJ1Y3QgYXRoOWtfaHRjX3JhdGUgcmF0ZXM7CiB9OwogCi1zdHJ1Y3QgYXRoOWtfaHRjX3RhcmdldF9zdGF0cyB7Ci0JX19iZTMyIHR4X3Nob3J0cmV0cnk7Ci0JX19iZTMyIHR4X2xvbmdyZXRyeTsKLQlfX2JlMzIgdHhfeHJldHJpZXM7Ci0JX19iZTMyIGh0X3R4dW5hZ2dyX3hyZXRyeTsKLQlfX2JlMzIgaHRfdHhfeHJldHJpZXM7CitzdHJ1Y3QgYXRoOWtfaHRjX3RhcmdldF9yYXRlX21hc2sgeworCXU4IHZpZl9pbmRleDsKKwl1OCBiYW5kOworCV9fYmUzMiBtYXNrOworCXUxNiBwYWQ7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYXRoOWtfaHRjX3RhcmdldF9pbnRfc3RhdHMgeworCV9fYmUzMiByeDsKKwlfX2JlMzIgcnhvcm47CisJX19iZTMyIHJ4ZW9sOworCV9fYmUzMiB0eHVybjsKKwlfX2JlMzIgdHh0bzsKKwlfX2JlMzIgY3N0OworfSBfX3BhY2tlZDsKKworc3RydWN0IGF0aDlrX2h0Y190YXJnZXRfdHhfc3RhdHMgeworCV9fYmUzMiB4cmV0cmllczsKKwlfX2JlMzIgZmlmb2VycjsKKwlfX2JlMzIgZmlsdGVyZWQ7CisJX19iZTMyIHRpbWVyX2V4cDsKKwlfX2JlMzIgc2hvcnRyZXRyaWVzOworCV9fYmUzMiBsb25ncmV0cmllczsKKwlfX2JlMzIgcW51bGw7CisJX19iZTMyIGVuY2FwX2ZhaWw7CisJX19iZTMyIG5vYnVmOworfSBfX3BhY2tlZDsKKworc3RydWN0IGF0aDlrX2h0Y190YXJnZXRfcnhfc3RhdHMgeworCV9fYmUzMiBub2J1ZjsKKwlfX2JlMzIgaG9zdF9zZW5kOworCV9fYmUzMiBob3N0X2RvbmU7CiB9IF9fcGFja2VkOwogCiAjZGVmaW5lIEFUSDlLX0hUQ19NQVhfVklGIDIKQEAgLTI0NCw2ICsyNDQsOCBAQAogCXU4IGluZGV4OwogCXUxNiBzZXFfbm87CiAJYm9vbCBiZWFjb25fY29uZmlndXJlZDsKKwlpbnQgYnNsb3Q7CisJX19sZTY0IHRzZmFkanVzdDsKIH07CiAKIHN0cnVjdCBhdGg5a192aWZfaXRlcl9kYXRhIHsKQEAgLTI4MiwyMyArMjg0LDY1IEBACiAJc3BpbmxvY2tfdCByeGJ1ZmxvY2s7CiB9OwogCisjZGVmaW5lIEFUSDlLX0hUQ19UWF9DTEVBTlVQX0lOVEVSVkFMIDUwIC8qIG1zICovCisjZGVmaW5lIEFUSDlLX0hUQ19UWF9USU1FT1VUX0lOVEVSVkFMIDI1MDAgLyogbXMgKi8KKyNkZWZpbmUgQVRIOUtfSFRDX1RYX1JFU0VSVkUgMTAKKyNkZWZpbmUgQVRIOUtfSFRDX1RYX1RJTUVPVVRfQ09VTlQgMjAKKyNkZWZpbmUgQVRIOUtfSFRDX1RYX1RIUkVTSE9MRCAoTUFYX1RYX0JVRl9OVU0gLSBBVEg5S19IVENfVFhfUkVTRVJWRSkKKworI2RlZmluZSBBVEg5S19IVENfT1BfVFhfUVVFVUVTX1NUT1AgQklUKDApCisjZGVmaW5lIEFUSDlLX0hUQ19PUF9UWF9EUkFJTiAgICAgICBCSVQoMSkKKworc3RydWN0IGF0aDlrX2h0Y190eCB7CisJdTggZmxhZ3M7CisJaW50IHF1ZXVlZF9jbnQ7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCBtZ210X2VwX3F1ZXVlOworCXN0cnVjdCBza19idWZmX2hlYWQgY2FiX2VwX3F1ZXVlOworCXN0cnVjdCBza19idWZmX2hlYWQgZGF0YV9iZV9xdWV1ZTsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGRhdGFfYmtfcXVldWU7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCBkYXRhX3ZpX3F1ZXVlOworCXN0cnVjdCBza19idWZmX2hlYWQgZGF0YV92b19xdWV1ZTsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X2ZhaWxlZDsKKwlERUNMQVJFX0JJVE1BUCh0eF9zbG90LCBNQVhfVFhfQlVGX05VTSk7CisJc3RydWN0IHRpbWVyX2xpc3QgY2xlYW51cF90aW1lcjsKKwlzcGlubG9ja190IHR4X2xvY2s7Cit9OworCiBzdHJ1Y3QgYXRoOWtfaHRjX3R4X2N0bCB7CiAJdTggdHlwZTsgLyogQVRIOUtfSFRDXyogKi8KKwl1OCBlcGlkOworCXU4IHR4b2s7CisJdTggc3RhX2lkeDsKKwl1bnNpZ25lZCBsb25nIHRpbWVzdGFtcDsKIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGF0aDlrX2h0Y190eF9jdGwgKkhUQ19TS0JfQ0Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBhdGg5a19odGNfdHhfY3RsKSA+CisJCSAgICAgSUVFRTgwMjExX1RYX0lORk9fRFJJVkVSX0RBVEFfU0laRSk7CisJcmV0dXJuIChzdHJ1Y3QgYXRoOWtfaHRjX3R4X2N0bCAqKSAmdHhfaW5mby0+ZHJpdmVyX2RhdGE7Cit9CisKICNpZmRlZiBDT05GSUdfQVRIOUtfSFRDX0RFQlVHRlMKIAogI2RlZmluZSBUWF9TVEFUX0lOQyhjKSAoaGlmX2Rldi0+aHRjX2hhbmRsZS0+ZHJ2X3ByaXYtPmRlYnVnLnR4X3N0YXRzLmMrKykKICNkZWZpbmUgUlhfU1RBVF9JTkMoYykgKGhpZl9kZXYtPmh0Y19oYW5kbGUtPmRydl9wcml2LT5kZWJ1Zy5yeF9zdGF0cy5jKyspCisjZGVmaW5lIENBQl9TVEFUX0lOQyAgIHByaXYtPmRlYnVnLnR4X3N0YXRzLmNhYl9xdWV1ZWQrKwogCiAjZGVmaW5lIFRYX1FTVEFUX0lOQyhxKSAocHJpdi0+ZGVidWcudHhfc3RhdHMucXVldWVfc3RhdHNbcV0rKykKIAordm9pZCBhdGg5a19odGNfZXJyX3N0YXRfcngoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAorCQkJICAgc3RydWN0IGF0aF9odGNfcnhfc3RhdHVzICpyeHMpOworCiBzdHJ1Y3QgYXRoX3R4X3N0YXRzIHsKIAl1MzIgYnVmX3F1ZXVlZDsKIAl1MzIgYnVmX2NvbXBsZXRlZDsKIAl1MzIgc2tiX3F1ZXVlZDsKLQl1MzIgc2tiX2NvbXBsZXRlZDsKLQl1MzIgc2tiX2Ryb3BwZWQ7CisJdTMyIHNrYl9zdWNjZXNzOworCXUzMiBza2JfZmFpbGVkOworCXUzMiBjYWJfcXVldWVkOwogCXUzMiBxdWV1ZV9zdGF0c1tXTUVfTlVNX0FDXTsKIH07CiAKQEAgLTMwNiw1NSArMzUwLDU3IEBACiAJdTMyIHNrYl9hbGxvY2F0ZWQ7CiAJdTMyIHNrYl9jb21wbGV0ZWQ7CiAJdTMyIHNrYl9kcm9wcGVkOworCXUzMiBlcnJfY3JjOworCXUzMiBlcnJfZGVjcnlwdF9jcmM7CisJdTMyIGVycl9taWM7CisJdTMyIGVycl9wcmVfZGVsaW07CisJdTMyIGVycl9wb3N0X2RlbGltOworCXUzMiBlcnJfZGVjcnlwdF9idXN5OworCXUzMiBlcnJfcGh5OworCXUzMiBlcnJfcGh5X3N0YXRzW0FUSDlLX1BIWUVSUl9NQVhdOwogfTsKIAogc3RydWN0IGF0aDlrX2RlYnVnIHsKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3BoeTsKLQlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3RndF9zdGF0czsKLQlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3htaXQ7Ci0Jc3RydWN0IGRlbnRyeSAqZGVidWdmc19yZWN2OwogCXN0cnVjdCBhdGhfdHhfc3RhdHMgdHhfc3RhdHM7CiAJc3RydWN0IGF0aF9yeF9zdGF0cyByeF9zdGF0czsKLQl1MzIgdHhyYXRlOwogfTsKIAogI2Vsc2UKIAogI2RlZmluZSBUWF9TVEFUX0lOQyhjKSBkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIFJYX1NUQVRfSU5DKGMpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgQ0FCX1NUQVRfSU5DICAgZG8geyB9IHdoaWxlICgwKQogCiAjZGVmaW5lIFRYX1FTVEFUX0lOQyhjKSBkbyB7IH0gd2hpbGUgKDApCiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19odGNfZXJyX3N0YXRfcngoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAorCQkJCQkgc3RydWN0IGF0aF9odGNfcnhfc3RhdHVzICpyeHMpCit7Cit9CisKICNlbmRpZiAvKiBDT05GSUdfQVRIOUtfSFRDX0RFQlVHRlMgKi8KIAogI2RlZmluZSBBVEhfTEVEX1BJTl9ERUYgICAgICAgICAgICAgMQotI2RlZmluZSBBVEhfTEVEX1BJTl85Mjg3ICAgICAgICAgICAgOAorI2RlZmluZSBBVEhfTEVEX1BJTl85Mjg3ICAgICAgICAgICAgMTAKICNkZWZpbmUgQVRIX0xFRF9QSU5fOTI3MSAgICAgICAgICAgIDE1CiAjZGVmaW5lIEFUSF9MRURfUElOXzcwMTAgICAgICAgICAgICAxMgotI2RlZmluZSBBVEhfTEVEX09OX0RVUkFUSU9OX0lETEUgICAgMzUwCS8qIGluIG1zZWNzICovCi0jZGVmaW5lIEFUSF9MRURfT0ZGX0RVUkFUSU9OX0lETEUgICAyNTAJLyogaW4gbXNlY3MgKi8KIAotZW51bSBhdGhfbGVkX3R5cGUgewotCUFUSF9MRURfUkFESU8sCi0JQVRIX0xFRF9BU1NPQywKLQlBVEhfTEVEX1RYLAotCUFUSF9MRURfUlgKLX07CisjZGVmaW5lIEJTVFVDS19USFJFU0hPTEQgMTAKIAotc3RydWN0IGF0aF9sZWQgewotCXN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdjsKLQlzdHJ1Y3QgbGVkX2NsYXNzZGV2IGxlZF9jZGV2OwotCWVudW0gYXRoX2xlZF90eXBlIGxlZF90eXBlOwotCXN0cnVjdCBkZWxheWVkX3dvcmsgYnJpZ2h0bmVzc193b3JrOwotCWNoYXIgbmFtZVszMl07Ci0JYm9vbCByZWdpc3RlcmVkOwotCWludCBicmlnaHRuZXNzOwotfTsKKy8qCisgKiBBZGp1c3QgdGhlc2Ugd2hlbiB0aGUgbWF4LiBubyBvZiBiZWFjb25pbmcgaW50ZXJmYWNlcyBpcworICogaW5jcmVhc2VkLgorICovCisjZGVmaW5lIERFRkFVTFRfU1dCQV9SRVNQT05TRSA0MCAvKiBpbiBUVXMgKi8KKyNkZWZpbmUgTUlOX1NXQkFfUkVTUE9OU0UgICAgIDEwIC8qIGluIFRVcyAqLwogCiBzdHJ1Y3QgaHRjX2JlYWNvbl9jb25maWcgeworCXN0cnVjdCBpZWVlODAyMTFfdmlmICpic2xvdFtBVEg5S19IVENfTUFYX0JDTl9WSUZdOwogCXUxNiBiZWFjb25faW50ZXJ2YWw7CiAJdTE2IGR0aW1fcGVyaW9kOwogCXUxNiBibWlzc190aW1lb3V0OworCXUzMiBibWlzc19jbnQ7CiB9OwogCiBzdHJ1Y3QgYXRoX2J0Y29leCB7CkBAIC0zNzIsMTQgKzQxOCwxMSBAQAogCiAjZGVmaW5lIE9QX0lOVkFMSUQJCSAgIEJJVCgwKQogI2RlZmluZSBPUF9TQ0FOTklORwkJICAgQklUKDEpCi0jZGVmaW5lIE9QX0xFRF9BU1NPQ0lBVEVECSAgIEJJVCgyKQotI2RlZmluZSBPUF9MRURfT04JCSAgIEJJVCgzKQotI2RlZmluZSBPUF9FTkFCTEVfQkVBQ09OCSAgIEJJVCg0KQotI2RlZmluZSBPUF9MRURfREVJTklUCQkgICBCSVQoNSkKLSNkZWZpbmUgT1BfQlRfUFJJT1JJVFlfREVURUNURUQgICAgQklUKDYpCi0jZGVmaW5lIE9QX0JUX1NDQU4gICAgICAgICAgICAgICAgIEJJVCg3KQotI2RlZmluZSBPUF9BTklfUlVOTklORyAgICAgICAgICAgICBCSVQoOCkKLSNkZWZpbmUgT1BfVFNGX1JFU0VUICAgICAgICAgICAgICAgQklUKDkpCisjZGVmaW5lIE9QX0VOQUJMRV9CRUFDT04gICAgICAgICAgIEJJVCgyKQorI2RlZmluZSBPUF9CVF9QUklPUklUWV9ERVRFQ1RFRCAgICBCSVQoMykKKyNkZWZpbmUgT1BfQlRfU0NBTiAgICAgICAgICAgICAgICAgQklUKDQpCisjZGVmaW5lIE9QX0FOSV9SVU5OSU5HICAgICAgICAgICAgIEJJVCg1KQorI2RlZmluZSBPUF9UU0ZfUkVTRVQgICAgICAgICAgICAgICBCSVQoNikKIAogc3RydWN0IGF0aDlrX2h0Y19wcml2IHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CkBAIC0zODgsNiArNDMxLDkgQEAKIAlzdHJ1Y3QgaHRjX3RhcmdldCAqaHRjOwogCXN0cnVjdCB3bWkgKndtaTsKIAorCXUxNiBmd192ZXJzaW9uX21ham9yOworCXUxNiBmd192ZXJzaW9uX21pbm9yOworCiAJZW51bSBodGNfZW5kcG9pbnRfaWQgd21pX2NtZF9lcDsKIAllbnVtIGh0Y19lbmRwb2ludF9pZCBiZWFjb25fZXA7CiAJZW51bSBodGNfZW5kcG9pbnRfaWQgY2FiX2VwOwpAQCAtNDExLDI3ICs0NTcsMjMgQEAKIAl1MTYgdHhwb3dsaW1pdDsKIAl1MTYgbnZpZnM7CiAJdTE2IG5zdGF0aW9uczsKLQl1MzIgYm1pc3NfY250OwogCWJvb2wgcmVhcm1fYW5pOwogCWJvb2wgcmVjb25maWdfYmVhY29uOworCXVuc2lnbmVkIGludCByeGZpbHRlcjsKIAogCXN0cnVjdCBhdGg5a19od19jYWxfZGF0YSBjYWxkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgc2JhbmRzW0lFRUU4MDIxMV9OVU1fQkFORFNdOwogCiAJc3BpbmxvY2tfdCBiZWFjb25fbG9jazsKLQotCWJvb2wgdHhfcXVldWVzX3N0b3A7Ci0Jc3BpbmxvY2tfdCB0eF9sb2NrOwotCi0Jc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKIAlzdHJ1Y3QgaHRjX2JlYWNvbl9jb25maWcgY3VyX2JlYWNvbl9jb25mOwotCXVuc2lnbmVkIGludCByeGZpbHRlcjsKKworCXN0cnVjdCBhdGg5a19odGNfcnggcng7CisJc3RydWN0IGF0aDlrX2h0Y190eCB0eDsKKwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBzd2JhX3Rhc2tsZXQ7CiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IHJ4X3Rhc2tsZXQ7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBzYmFuZHNbSUVFRTgwMjExX05VTV9CQU5EU107Ci0Jc3RydWN0IGF0aDlrX2h0Y19yeCByeDsKLQlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdHhfdGFza2xldDsKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgYW5pX3dvcms7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHR4X2ZhaWxlZF90YXNrbGV0OwogCXN0cnVjdCB3b3JrX3N0cnVjdCBwc193b3JrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBmYXRhbF93b3JrOwogCkBAIC00NDAsMTUgKzQ4MiwxMyBAQAogCWJvb2wgcHNfZW5hYmxlZDsKIAlib29sIHBzX2lkbGU7CiAKLQlzdHJ1Y3QgYXRoX2xlZCByYWRpb19sZWQ7Ci0Jc3RydWN0IGF0aF9sZWQgYXNzb2NfbGVkOwotCXN0cnVjdCBhdGhfbGVkIHR4X2xlZDsKLQlzdHJ1Y3QgYXRoX2xlZCByeF9sZWQ7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayBhdGg5a19sZWRfYmxpbmtfd29yazsKLQlpbnQgbGVkX29uX2R1cmF0aW9uOwotCWludCBsZWRfb2ZmX2R1cmF0aW9uOwotCWludCBsZWRfb25fY250OwotCWludCBsZWRfb2ZmX2NudDsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTEVEUworCWVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzczsKKwlib29sIGxlZF9yZWdpc3RlcmVkOworCWNoYXIgbGVkX25hbWVbMzJdOworCXN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkX2NkZXY7CisJc3RydWN0IHdvcmtfc3RydWN0IGxlZF93b3JrOworI2VuZGlmCiAKIAlpbnQgYmVhY29ucTsKIAlpbnQgY2FicTsKQEAgLTQ3MCwxMSArNTEwLDE4IEBACiAKIHZvaWQgYXRoOWtfaHRjX3Jlc2V0KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdik7CiAKK3ZvaWQgYXRoOWtfaHRjX2Fzc2lnbl9ic2xvdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsCisJCQkgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7Cit2b2lkIGF0aDlrX2h0Y19yZW1vdmVfYnNsb3Qoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAorCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwordm9pZCBhdGg5a19odGNfc2V0X3RzZmFkanVzdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwogdm9pZCBhdGg5a19odGNfYmVhY29ucV9jb25maWcoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KTsKIHZvaWQgYXRoOWtfaHRjX2JlYWNvbl9jb25maWcoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAogCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKIHZvaWQgYXRoOWtfaHRjX2JlYWNvbl9yZWNvbmZpZyhzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpOwotdm9pZCBhdGg5a19odGNfc3diYShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsIHU4IGJlYWNvbl9wZW5kaW5nKTsKK3ZvaWQgYXRoOWtfaHRjX3N3YmEoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAorCQkgICAgc3RydWN0IHdtaV9ldmVudF9zd2JhICpzd2JhKTsKIAogdm9pZCBhdGg5a19odGNfcnhlcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgZW51bSBodGNfZW5kcG9pbnRfaWQgZXBfaWQpOwpAQCAtNDgzLDcgKzUzMCw4IEBACiB2b2lkIGF0aDlrX2h0Y19iZWFjb25lcCh2b2lkICpkcnZfcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCWVudW0gaHRjX2VuZHBvaW50X2lkIGVwX2lkLCBib29sIHR4b2spOwogCi1pbnQgYXRoOWtfaHRjX3VwZGF0ZV9jYXBfdGFyZ2V0KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdik7CitpbnQgYXRoOWtfaHRjX3VwZGF0ZV9jYXBfdGFyZ2V0KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwKKwkJCQl1OCBlbmFibGVfY29leCk7CiB2b2lkIGF0aDlrX2h0Y19zdGF0aW9uX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHZvaWQgYXRoOWtfaHRjX2FnZ3Jfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogdm9pZCBhdGg5a19odGNfYW5pX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKQEAgLTQ5MSwxNCArNTM5LDIzIEBACiB2b2lkIGF0aDlrX2h0Y19zdG9wX2FuaShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpOwogCiBpbnQgYXRoOWtfdHhfaW5pdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpOwotdm9pZCBhdGg5a190eF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci1pbnQgYXRoOWtfaHRjX3R4X3N0YXJ0KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitpbnQgYXRoOWtfaHRjX3R4X3N0YXJ0KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwKKwkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHU4IHNsb3QsIGJvb2wgaXNfY2FiKTsKIHZvaWQgYXRoOWtfdHhfY2xlYW51cChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpOwogYm9vbCBhdGg5a19odGNfdHhxX3NldHVwKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwgaW50IHN1YnR5cGUpOwogaW50IGF0aDlrX2h0Y19jYWJxX3NldHVwKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdik7CiBpbnQgZ2V0X2h3X3FudW0odTE2IHF1ZXVlLCBpbnQgKmh3cV9tYXApOwogaW50IGF0aF9odGNfdHhxX3VwZGF0ZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsIGludCBxbnVtLAogCQkgICAgICAgc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpbmZvKTsKK3ZvaWQgYXRoOWtfaHRjX2NoZWNrX3N0b3BfcXVldWVzKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdik7Cit2b2lkIGF0aDlrX2h0Y19jaGVja193YWtlX3F1ZXVlcyhzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpOworaW50IGF0aDlrX2h0Y190eF9nZXRfc2xvdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpOwordm9pZCBhdGg5a19odGNfdHhfY2xlYXJfc2xvdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsIGludCBzbG90KTsKK3ZvaWQgYXRoOWtfaHRjX3R4X2RyYWluKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdik7Cit2b2lkIGF0aDlrX2h0Y190eHN0YXR1cyhzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsIHZvaWQgKndtaV9ldmVudCk7Cit2b2lkIGF0aDlrX2h0Y190eF9mYWlsZWQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KTsKK3ZvaWQgYXRoOWtfdHhfZmFpbGVkX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKK3ZvaWQgYXRoOWtfaHRjX3R4X2NsZWFudXBfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKTsKIAogaW50IGF0aDlrX3J4X2luaXQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KTsKIHZvaWQgYXRoOWtfcnhfY2xlYW51cChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpOwpAQCAtNTE2LDkgKzU3MywyNCBAQAogdm9pZCBhdGg5a19odGNfcmZraWxsX3BvbGxfc3RhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogdm9pZCBhdGg5a19odGNfcmFkaW9fZW5hYmxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIHZvaWQgYXRoOWtfaHRjX3JhZGlvX2Rpc2FibGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwotdm9pZCBhdGg5a19sZWRfc3RvcF9icmlnaHRuZXNzKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdik7CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTEVEUwogdm9pZCBhdGg5a19pbml0X2xlZHMoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KTsKIHZvaWQgYXRoOWtfZGVpbml0X2xlZHMoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KTsKK3ZvaWQgYXRoOWtfbGVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfaW5pdF9sZWRzKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2RlaW5pdF9sZWRzKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2xlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKK30KKyNlbmRpZgogCiBpbnQgYXRoOWtfaHRjX3Byb2JlX2RldmljZShzdHJ1Y3QgaHRjX3RhcmdldCAqaHRjX2hhbmRsZSwgc3RydWN0IGRldmljZSAqZGV2LAogCQkJICAgdTE2IGRldmlkLCBjaGFyICpwcm9kdWN0LCB1MzIgZHJ2X2luZm8pOwpAQCAtNTI4LDE1ICs2MDAsOSBAQAogaW50IGF0aDlrX2h0Y19yZXN1bWUoc3RydWN0IGh0Y190YXJnZXQgKmh0Y19oYW5kbGUpOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FUSDlLX0hUQ19ERUJVR0ZTCi1pbnQgYXRoOWtfaHRjX2RlYnVnX2NyZWF0ZV9yb290KHZvaWQpOwotdm9pZCBhdGg5a19odGNfZGVidWdfcmVtb3ZlX3Jvb3Qodm9pZCk7CiBpbnQgYXRoOWtfaHRjX2luaXRfZGVidWcoc3RydWN0IGF0aF9odyAqYWgpOwotdm9pZCBhdGg5a19odGNfZXhpdF9kZWJ1ZyhzdHJ1Y3QgYXRoX2h3ICphaCk7CiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgYXRoOWtfaHRjX2RlYnVnX2NyZWF0ZV9yb290KHZvaWQpIHsgcmV0dXJuIDA7IH07Ci1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfaHRjX2RlYnVnX3JlbW92ZV9yb290KHZvaWQpIHt9Owogc3RhdGljIGlubGluZSBpbnQgYXRoOWtfaHRjX2luaXRfZGVidWcoc3RydWN0IGF0aF9odyAqYWgpIHsgcmV0dXJuIDA7IH07Ci1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfaHRjX2V4aXRfZGVidWcoc3RydWN0IGF0aF9odyAqYWgpIHt9OwogI2VuZGlmIC8qIENPTkZJR19BVEg5S19IVENfREVCVUdGUyAqLwogCiAjZW5kaWYgLyogSFRDX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmMKaW5kZXggOGQxZDg3OS4uMGRlZDJjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmMKQEAgLTE4LDYgKzE4LDUwIEBACiAKICNkZWZpbmUgRlVER0UgMgogCit2b2lkIGF0aDlrX2h0Y19iZWFjb25xX2NvbmZpZyhzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpCit7CisJc3RydWN0IGF0aF9odyAqYWggPSBwcml2LT5haDsKKwlzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyBxaSwgcWlfYmU7CisKKwltZW1zZXQoJnFpLCAwLCBzaXplb2Yoc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8pKTsKKwltZW1zZXQoJnFpX2JlLCAwLCBzaXplb2Yoc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8pKTsKKworCWF0aDlrX2h3X2dldF90eHFfcHJvcHMoYWgsIHByaXYtPmJlYWNvbnEsICZxaSk7CisKKwlpZiAocHJpdi0+YWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgeworCQlxaS50cWlfYWlmcyA9IDE7CisJCXFpLnRxaV9jd21pbiA9IDA7CisJCXFpLnRxaV9jd21heCA9IDA7CisJfSBlbHNlIGlmIChwcml2LT5haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCWludCBxbnVtID0gcHJpdi0+aHdxX21hcFtXTUVfQUNfQkVdOworCisJCWF0aDlrX2h3X2dldF90eHFfcHJvcHMoYWgsIHFudW0sICZxaV9iZSk7CisKKwkJcWkudHFpX2FpZnMgPSBxaV9iZS50cWlfYWlmczsKKworCQkvKgorCQkgKiBGb3IgV0lGSSBCZWFjb24gRGlzdHJpYnV0aW9uCisJCSAqIExvbmcgc2xvdCB0aW1lICA6IDJ4IGN3bWluCisJCSAqIFNob3J0IHNsb3QgdGltZSA6IDR4IGN3bWluCisJCSAqLworCQlpZiAoYWgtPnNsb3R0aW1lID09IEFUSDlLX1NMT1RfVElNRV8yMCkKKwkJCXFpLnRxaV9jd21pbiA9IDIqcWlfYmUudHFpX2N3bWluOworCQllbHNlCisJCQlxaS50cWlfY3dtaW4gPSA0KnFpX2JlLnRxaV9jd21pbjsKKworCQlxaS50cWlfY3dtYXggPSBxaV9iZS50cWlfY3dtYXg7CisKKwl9CisKKwlpZiAoIWF0aDlrX2h3X3NldF90eHFfcHJvcHMoYWgsIHByaXYtPmJlYWNvbnEsICZxaSkpIHsKKwkJYXRoX2VycihhdGg5a19od19jb21tb24oYWgpLAorCQkJIlVuYWJsZSB0byB1cGRhdGUgYmVhY29uIHF1ZXVlICV1IVxuIiwgcHJpdi0+YmVhY29ucSk7CisJfSBlbHNlIHsKKwkJYXRoOWtfaHdfcmVzZXR0eHF1ZXVlKGFoLCBwcml2LT5iZWFjb25xKTsKKwl9Cit9CisKKwogc3RhdGljIHZvaWQgYXRoOWtfaHRjX2JlYWNvbl9jb25maWdfc3RhKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwKIAkJCQkJc3RydWN0IGh0Y19iZWFjb25fY29uZmlnICpic3NfY29uZikKIHsKQEAgLTMwLDcgKzc0LDcgQEAKIAlfX2JlMzIgaHRjX2ltYXNrID0gMDsKIAl1NjQgdHNmOwogCWludCBudW1fYmVhY29ucywgb2Zmc2V0LCBkdGltX2RlY19jb3VudCwgY2ZwX2RlY19jb3VudDsKLQlpbnQgcmV0OworCWludCByZXQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOwogCXU4IGNtZF9yc3A7CiAKIAltZW1zZXQoJmJzLCAwLCBzaXplb2YoYnMpKTsKQEAgLTE0Niw3ICsxOTAsNyBAQAogCWVudW0gYXRoOWtfaW50IGltYXNrID0gMDsKIAl1MzIgbmV4dHRidHQsIGludHZhbCwgdHNmdHU7CiAJX19iZTMyIGh0Y19pbWFzayA9IDA7Ci0JaW50IHJldDsKKwlpbnQgcmV0IF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKIAl1OCBjbWRfcnNwOwogCXU2NCB0c2Y7CiAKQEAgLTE1NCw4ICsxOTgsMTcgQEAKIAlpbnR2YWwgLz0gQVRIOUtfSFRDX01BWF9CQ05fVklGOwogCW5leHR0YnR0ID0gaW50dmFsOwogCisJLyoKKwkgKiBUbyByZWR1Y2UgYmVhY29uIG1pc3NlcyB1bmRlciBoZWF2eSBUWCBsb2FkLAorCSAqIHNldCB0aGUgYmVhY29uIHJlc3BvbnNlIHRpbWUgdG8gYSBsYXJnZXIgdmFsdWUuCisJICovCisJaWYgKGludHZhbCA+IERFRkFVTFRfU1dCQV9SRVNQT05TRSkKKwkJcHJpdi0+YWgtPmNvbmZpZy5zd19iZWFjb25fcmVzcG9uc2VfdGltZSA9IERFRkFVTFRfU1dCQV9SRVNQT05TRTsKKwllbHNlCisJCXByaXYtPmFoLT5jb25maWcuc3dfYmVhY29uX3Jlc3BvbnNlX3RpbWUgPSBNSU5fU1dCQV9SRVNQT05TRTsKKwogCWlmIChwcml2LT5vcF9mbGFncyAmIE9QX1RTRl9SRVNFVCkgewotCQlpbnR2YWwgfD0gQVRIOUtfQkVBQ09OX1JFU0VUX1RTRjsKKwkJYXRoOWtfaHdfcmVzZXRfdHNmKHByaXYtPmFoKTsKIAkJcHJpdi0+b3BfZmxhZ3MgJj0gfk9QX1RTRl9SRVNFVDsKIAl9IGVsc2UgewogCQkvKgpAQCAtMTY4LDE4ICsyMjEsMjAgQEAKIAkJfSB3aGlsZSAobmV4dHRidHQgPCB0c2Z0dSk7CiAJfQogCi0JaW50dmFsIHw9IEFUSDlLX0JFQUNPTl9FTkE7Ci0KIAlpZiAocHJpdi0+b3BfZmxhZ3MgJiBPUF9FTkFCTEVfQkVBQ09OKQogCQlpbWFzayB8PSBBVEg5S19JTlRfU1dCQTsKIAogCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKLQkJIkFQIEJlYWNvbiBjb25maWcsIGludHZhbDogJWQsIG5leHR0YnR0OiAldSBpbWFzazogMHgleFxuIiwKLQkJYnNzX2NvbmYtPmJlYWNvbl9pbnRlcnZhbCwgbmV4dHRidHQsIGltYXNrKTsKKwkJIkFQIEJlYWNvbiBjb25maWcsIGludHZhbDogJWQsIG5leHR0YnR0OiAldSwgcmVzcF90aW1lOiAlZCAiCisJCSJpbWFzazogMHgleFxuIiwKKwkJYnNzX2NvbmYtPmJlYWNvbl9pbnRlcnZhbCwgbmV4dHRidHQsCisJCXByaXYtPmFoLT5jb25maWcuc3dfYmVhY29uX3Jlc3BvbnNlX3RpbWUsIGltYXNrKTsKKworCWF0aDlrX2h0Y19iZWFjb25xX2NvbmZpZyhwcml2KTsKIAogCVdNSV9DTUQoV01JX0RJU0FCTEVfSU5UUl9DTURJRCk7Ci0JYXRoOWtfaHdfYmVhY29uaW5pdChwcml2LT5haCwgbmV4dHRidHQsIGludHZhbCk7Ci0JcHJpdi0+Ym1pc3NfY250ID0gMDsKKwlhdGg5a19od19iZWFjb25pbml0KHByaXYtPmFoLCBUVV9UT19VU0VDKG5leHR0YnR0KSwgVFVfVE9fVVNFQyhpbnR2YWwpKTsKKwlwcml2LT5jdXJfYmVhY29uX2NvbmYuYm1pc3NfY250ID0gMDsKIAlodGNfaW1hc2sgPSBjcHVfdG9fYmUzMihpbWFzayk7CiAJV01JX0NNRF9CVUYoV01JX0VOQUJMRV9JTlRSX0NNRElELCAmaHRjX2ltYXNrKTsKIH0KQEAgLTE5MSw3ICsyNDYsNyBAQAogCWVudW0gYXRoOWtfaW50IGltYXNrID0gMDsKIAl1MzIgbmV4dHRidHQsIGludHZhbCwgdHNmdHU7CiAJX19iZTMyIGh0Y19pbWFzayA9IDA7Ci0JaW50IHJldDsKKwlpbnQgcmV0IF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKIAl1OCBjbWRfcnNwOwogCXU2NCB0c2Y7CiAKQEAgLTIwNywxNyArMjYyLDI2IEBACiAJCW5leHR0YnR0ICs9IGludHZhbDsKIAl9IHdoaWxlIChuZXh0dGJ0dCA8IHRzZnR1KTsKIAotCWludHZhbCB8PSBBVEg5S19CRUFDT05fRU5BOworCS8qCisJICogT25seSBvbmUgSUJTUyBpbnRlcmZjZSBpcyBhbGxvd2VkLgorCSAqLworCWlmIChpbnR2YWwgPiBERUZBVUxUX1NXQkFfUkVTUE9OU0UpCisJCXByaXYtPmFoLT5jb25maWcuc3dfYmVhY29uX3Jlc3BvbnNlX3RpbWUgPSBERUZBVUxUX1NXQkFfUkVTUE9OU0U7CisJZWxzZQorCQlwcml2LT5haC0+Y29uZmlnLnN3X2JlYWNvbl9yZXNwb25zZV90aW1lID0gTUlOX1NXQkFfUkVTUE9OU0U7CisKIAlpZiAocHJpdi0+b3BfZmxhZ3MgJiBPUF9FTkFCTEVfQkVBQ09OKQogCQlpbWFzayB8PSBBVEg5S19JTlRfU1dCQTsKIAogCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKLQkJIklCU1MgQmVhY29uIGNvbmZpZywgaW50dmFsOiAlZCwgbmV4dHRidHQ6ICV1LCBpbWFzazogMHgleFxuIiwKLQkJYnNzX2NvbmYtPmJlYWNvbl9pbnRlcnZhbCwgbmV4dHRidHQsIGltYXNrKTsKKwkJIklCU1MgQmVhY29uIGNvbmZpZywgaW50dmFsOiAlZCwgbmV4dHRidHQ6ICV1LCAiCisJCSJyZXNwX3RpbWU6ICVkLCBpbWFzazogMHgleFxuIiwKKwkJYnNzX2NvbmYtPmJlYWNvbl9pbnRlcnZhbCwgbmV4dHRidHQsCisJCXByaXYtPmFoLT5jb25maWcuc3dfYmVhY29uX3Jlc3BvbnNlX3RpbWUsIGltYXNrKTsKIAogCVdNSV9DTUQoV01JX0RJU0FCTEVfSU5UUl9DTURJRCk7Ci0JYXRoOWtfaHdfYmVhY29uaW5pdChwcml2LT5haCwgbmV4dHRidHQsIGludHZhbCk7Ci0JcHJpdi0+Ym1pc3NfY250ID0gMDsKKwlhdGg5a19od19iZWFjb25pbml0KHByaXYtPmFoLCBUVV9UT19VU0VDKG5leHR0YnR0KSwgVFVfVE9fVVNFQyhpbnR2YWwpKTsKKwlwcml2LT5jdXJfYmVhY29uX2NvbmYuYm1pc3NfY250ID0gMDsKIAlodGNfaW1hc2sgPSBjcHVfdG9fYmUzMihpbWFzayk7CiAJV01JX0NNRF9CVUYoV01JX0VOQUJMRV9JTlRSX0NNRElELCAmaHRjX2ltYXNrKTsKIH0KQEAgLTIyOCwzOCArMjkyLDEwMSBAQAogCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiB9CiAKLXZvaWQgYXRoOWtfaHRjX3N3YmEoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LCB1OCBiZWFjb25fcGVuZGluZykKK3N0YXRpYyB2b2lkIGF0aDlrX2h0Y19zZW5kX2J1ZmZlcmVkKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwKKwkJCQkgICAgaW50IHNsb3QpCiB7Ci0Jc3RydWN0IGF0aDlrX2h0Y192aWYgKmF2cCA9ICh2b2lkICopcHJpdi0+dmlmLT5kcnZfcHJpdjsKLQlzdHJ1Y3QgdHhfYmVhY29uX2hlYWRlciBiZWFjb25faGRyOwotCXN0cnVjdCBhdGg5a19odGNfdHhfY3RsIHR4X2N0bDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87Ci0Jc3RydWN0IHNrX2J1ZmYgKmJlYWNvbjsKLQl1OCAqdHhfZmhkcjsKLQotCW1lbXNldCgmYmVhY29uX2hkciwgMCwgc2l6ZW9mKHN0cnVjdCB0eF9iZWFjb25faGVhZGVyKSk7Ci0JbWVtc2V0KCZ0eF9jdGwsIDAsIHNpemVvZihzdHJ1Y3QgYXRoOWtfaHRjX3R4X2N0bCkpOwotCi0JLyogRklYTUU6IEhhbmRsZSBCTUlTUyAqLwotCWlmIChiZWFjb25fcGVuZGluZyAhPSAwKSB7Ci0JCXByaXYtPmJtaXNzX2NudCsrOwotCQlyZXR1cm47Ci0JfQorCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24ocHJpdi0+YWgpOworCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCWludCBwYWRwb3MsIHBhZHNpemUsIHJldCwgdHhfc2xvdDsKIAogCXNwaW5fbG9ja19iaCgmcHJpdi0+YmVhY29uX2xvY2spOwogCisJdmlmID0gcHJpdi0+Y3VyX2JlYWNvbl9jb25mLmJzbG90W3Nsb3RdOworCisJc2tiID0gaWVlZTgwMjExX2dldF9idWZmZXJlZF9iYyhwcml2LT5odywgdmlmKTsKKworCXdoaWxlKHNrYikgeworCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCisJCXBhZHBvcyA9IGF0aDlrX2Ntbl9wYWRwb3MoaGRyLT5mcmFtZV9jb250cm9sKTsKKwkJcGFkc2l6ZSA9IHBhZHBvcyAmIDM7CisJCWlmIChwYWRzaXplICYmIHNrYi0+bGVuID4gcGFkcG9zKSB7CisJCQlpZiAoc2tiX2hlYWRyb29tKHNrYikgPCBwYWRzaXplKSB7CisJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCQlnb3RvIG5leHQ7CisJCQl9CisJCQlza2JfcHVzaChza2IsIHBhZHNpemUpOworCQkJbWVtbW92ZShza2ItPmRhdGEsIHNrYi0+ZGF0YSArIHBhZHNpemUsIHBhZHBvcyk7CisJCX0KKworCQl0eF9zbG90ID0gYXRoOWtfaHRjX3R4X2dldF9zbG90KHByaXYpOworCQlpZiAodHhfc2xvdCA8IDApIHsKKwkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1hNSVQsICJObyBmcmVlIENBQiBzbG90XG4iKTsKKwkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCQlnb3RvIG5leHQ7CisJCX0KKworCQlyZXQgPSBhdGg5a19odGNfdHhfc3RhcnQocHJpdiwgc2tiLCB0eF9zbG90LCB0cnVlKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlhdGg5a19odGNfdHhfY2xlYXJfc2xvdChwcml2LCB0eF9zbG90KTsKKwkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisKKwkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1hNSVQsCisJCQkJIkZhaWxlZCB0byBzZW5kIENBQiBmcmFtZVxuIik7CisJCX0gZWxzZSB7CisJCQlzcGluX2xvY2tfYmgoJnByaXYtPnR4LnR4X2xvY2spOworCQkJcHJpdi0+dHgucXVldWVkX2NudCsrOworCQkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4LnR4X2xvY2spOworCQl9CisJbmV4dDoKKwkJc2tiID0gaWVlZTgwMjExX2dldF9idWZmZXJlZF9iYyhwcml2LT5odywgdmlmKTsKKwl9CisKKwlzcGluX3VubG9ja19iaCgmcHJpdi0+YmVhY29uX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBhdGg5a19odGNfc2VuZF9iZWFjb24oc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAorCQkJCSAgaW50IHNsb3QpCit7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihwcml2LT5haCk7CisJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKKwlzdHJ1Y3QgYXRoOWtfaHRjX3ZpZiAqYXZwOworCXN0cnVjdCB0eF9iZWFjb25faGVhZGVyIGJlYWNvbl9oZHI7CisJc3RydWN0IGF0aDlrX2h0Y190eF9jdGwgKnR4X2N0bDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCXN0cnVjdCBza19idWZmICpiZWFjb247CisJdTggKnR4X2ZoZHI7CisJaW50IHJldDsKKworCW1lbXNldCgmYmVhY29uX2hkciwgMCwgc2l6ZW9mKHN0cnVjdCB0eF9iZWFjb25faGVhZGVyKSk7CisKKwlzcGluX2xvY2tfYmgoJnByaXYtPmJlYWNvbl9sb2NrKTsKKworCXZpZiA9IHByaXYtPmN1cl9iZWFjb25fY29uZi5ic2xvdFtzbG90XTsKKwlhdnAgPSAoc3RydWN0IGF0aDlrX2h0Y192aWYgKil2aWYtPmRydl9wcml2OworCiAJaWYgKHVubGlrZWx5KHByaXYtPm9wX2ZsYWdzICYgT1BfU0NBTk5JTkcpKSB7CiAJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5iZWFjb25fbG9jayk7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBHZXQgYSBuZXcgYmVhY29uICovCi0JYmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQocHJpdi0+aHcsIHByaXYtPnZpZik7CisJYmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQocHJpdi0+aHcsIHZpZik7CiAJaWYgKCFiZWFjb24pIHsKIAkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmJlYWNvbl9sb2NrKTsKIAkJcmV0dXJuOwogCX0KIAorCS8qCisJICogVXBkYXRlIHRoZSBUU0YgYWRqdXN0IHZhbHVlIGhlcmUsIHRoZSBIVyB3aWxsCisJICogYWRkIHRoaXMgdmFsdWUgZm9yIGV2ZXJ5IGJlYWNvbi4KKwkgKi8KKwltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKWJlYWNvbi0+ZGF0YTsKKwltZ210LT51LmJlYWNvbi50aW1lc3RhbXAgPSBhdnAtPnRzZmFkanVzdDsKKwogCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKGJlYWNvbik7CiAJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BU1NJR05fU0VRKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPQpAQCAtMjY5LDQ1ICszOTYsMTQ5IEBACiAJCWhkci0+c2VxX2N0cmwgfD0gY3B1X3RvX2xlMTYoYXZwLT5zZXFfbm8pOwogCX0KIAotCXR4X2N0bC50eXBlID0gQVRIOUtfSFRDX05PUk1BTDsKKwl0eF9jdGwgPSBIVENfU0tCX0NCKGJlYWNvbik7CisJbWVtc2V0KHR4X2N0bCwgMCwgc2l6ZW9mKCp0eF9jdGwpKTsKKworCXR4X2N0bC0+dHlwZSA9IEFUSDlLX0hUQ19CRUFDT047CisJdHhfY3RsLT5lcGlkID0gcHJpdi0+YmVhY29uX2VwOworCiAJYmVhY29uX2hkci52aWZfaW5kZXggPSBhdnAtPmluZGV4OwogCXR4X2ZoZHIgPSBza2JfcHVzaChiZWFjb24sIHNpemVvZihiZWFjb25faGRyKSk7CiAJbWVtY3B5KHR4X2ZoZHIsICh1OCAqKSAmYmVhY29uX2hkciwgc2l6ZW9mKGJlYWNvbl9oZHIpKTsKIAotCWh0Y19zZW5kKHByaXYtPmh0YywgYmVhY29uLCBwcml2LT5iZWFjb25fZXAsICZ0eF9jdGwpOworCXJldCA9IGh0Y19zZW5kKHByaXYtPmh0YywgYmVhY29uKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJaWYgKHJldCA9PSAtRU5PTUVNKSB7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19CU1RVQ0ssCisJCQkJIkZhaWxlZCB0byBzZW5kIGJlYWNvbiwgbm8gZnJlZSBUWCBidWZmZXJcbiIpOworCQl9CisJCWRldl9rZnJlZV9za2JfYW55KGJlYWNvbik7CisJfQogCiAJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmJlYWNvbl9sb2NrKTsKIH0KIAotLyogQ3VycmVudGx5LCBvbmx5IGZvciBJQlNTICovCi12b2lkIGF0aDlrX2h0Y19iZWFjb25xX2NvbmZpZyhzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGF0aDlrX2h0Y19jaG9vc2VfYnNsb3Qoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAorCQkJCSAgc3RydWN0IHdtaV9ldmVudF9zd2JhICpzd2JhKQogewotCXN0cnVjdCBhdGhfaHcgKmFoID0gcHJpdi0+YWg7Ci0Jc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gcWksIHFpX2JlOwotCWludCBxbnVtID0gcHJpdi0+aHdxX21hcFtXTUVfQUNfQkVdOworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24ocHJpdi0+YWgpOworCXU2NCB0c2Y7CisJdTMyIHRzZnR1OworCXUxNiBpbnR2YWw7CisJaW50IHNsb3Q7CiAKLQltZW1zZXQoJnFpLCAwLCBzaXplb2Yoc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8pKTsKLQltZW1zZXQoJnFpX2JlLCAwLCBzaXplb2Yoc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8pKTsKKwlpbnR2YWwgPSBwcml2LT5jdXJfYmVhY29uX2NvbmYuYmVhY29uX2ludGVydmFsICYgQVRIOUtfQkVBQ09OX1BFUklPRDsKIAotCWF0aDlrX2h3X2dldF90eHFfcHJvcHMoYWgsIHFudW0sICZxaV9iZSk7CisJdHNmID0gYmU2NF90b19jcHUoc3diYS0+dHNmKTsKKwl0c2Z0dSA9IFRTRl9UT19UVSh0c2YgPj4gMzIsIHRzZik7CisJc2xvdCA9ICgodHNmdHUgJSBpbnR2YWwpICogQVRIOUtfSFRDX01BWF9CQ05fVklGKSAvIGludHZhbDsKKwlzbG90ID0gQVRIOUtfSFRDX01BWF9CQ05fVklGIC0gc2xvdCAtIDE7CiAKLQlxaS50cWlfYWlmcyA9IHFpX2JlLnRxaV9haWZzOwotCS8qIEZvciBXSUZJIEJlYWNvbiBEaXN0cmlidXRpb24KLQkgKiBMb25nIHNsb3QgdGltZSAgOiAyeCBjd21pbgotCSAqIFNob3J0IHNsb3QgdGltZSA6IDR4IGN3bWluCi0JICovCi0JaWYgKGFoLT5zbG90dGltZSA9PSBBVEg5S19TTE9UX1RJTUVfMjApCi0JCXFpLnRxaV9jd21pbiA9IDIqcWlfYmUudHFpX2N3bWluOwotCWVsc2UKLQkJcWkudHFpX2N3bWluID0gNCpxaV9iZS50cWlfY3dtaW47Ci0JcWkudHFpX2N3bWF4ID0gcWlfYmUudHFpX2N3bWF4OworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0JFQUNPTiwKKwkJIkNob29zZSBzbG90OiAlZCwgdHNmOiAlbGx1LCB0c2Z0dTogJXUsIGludHZhbDogJXVcbiIsCisJCXNsb3QsIHRzZiwgdHNmdHUsIGludHZhbCk7CiAKLQlpZiAoIWF0aDlrX2h3X3NldF90eHFfcHJvcHMoYWgsIHByaXYtPmJlYWNvbnEsICZxaSkpIHsKLQkJYXRoX2VycihhdGg5a19od19jb21tb24oYWgpLAotCQkJIlVuYWJsZSB0byB1cGRhdGUgYmVhY29uIHF1ZXVlICV1IVxuIiwgcW51bSk7Ci0JfSBlbHNlIHsKLQkJYXRoOWtfaHdfcmVzZXR0eHF1ZXVlKGFoLCBwcml2LT5iZWFjb25xKTsKKwlyZXR1cm4gc2xvdDsKK30KKwordm9pZCBhdGg5a19odGNfc3diYShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsCisJCSAgICBzdHJ1Y3Qgd21pX2V2ZW50X3N3YmEgKnN3YmEpCit7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihwcml2LT5haCk7CisJaW50IHNsb3Q7CisKKwlpZiAoc3diYS0+YmVhY29uX3BlbmRpbmcgIT0gMCkgeworCQlwcml2LT5jdXJfYmVhY29uX2NvbmYuYm1pc3NfY250Kys7CisJCWlmIChwcml2LT5jdXJfYmVhY29uX2NvbmYuYm1pc3NfY250ID4gQlNUVUNLX1RIUkVTSE9MRCkgeworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQlNUVUNLLAorCQkJCSJCZWFjb24gc3R1Y2ssIEhXIHJlc2V0XG4iKTsKKwkJCWllZWU4MDIxMV9xdWV1ZV93b3JrKHByaXYtPmh3LAorCQkJCQkgICAgICZwcml2LT5mYXRhbF93b3JrKTsKKwkJfQorCQlyZXR1cm47CiAJfQorCisJaWYgKHByaXYtPmN1cl9iZWFjb25fY29uZi5ibWlzc19jbnQpIHsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQlNUVUNLLAorCQkJIlJlc3VtaW5nIGJlYWNvbiB4bWl0IGFmdGVyICV1IG1pc3Nlc1xuIiwKKwkJCXByaXYtPmN1cl9iZWFjb25fY29uZi5ibWlzc19jbnQpOworCQlwcml2LT5jdXJfYmVhY29uX2NvbmYuYm1pc3NfY250ID0gMDsKKwl9CisKKwlzbG90ID0gYXRoOWtfaHRjX2Nob29zZV9ic2xvdChwcml2LCBzd2JhKTsKKwlzcGluX2xvY2tfYmgoJnByaXYtPmJlYWNvbl9sb2NrKTsKKwlpZiAocHJpdi0+Y3VyX2JlYWNvbl9jb25mLmJzbG90W3Nsb3RdID09IE5VTEwpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmJlYWNvbl9sb2NrKTsKKwkJcmV0dXJuOworCX0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+YmVhY29uX2xvY2spOworCisJYXRoOWtfaHRjX3NlbmRfYnVmZmVyZWQocHJpdiwgc2xvdCk7CisJYXRoOWtfaHRjX3NlbmRfYmVhY29uKHByaXYsIHNsb3QpOworfQorCit2b2lkIGF0aDlrX2h0Y19hc3NpZ25fYnNsb3Qoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAorCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihwcml2LT5haCk7CisJc3RydWN0IGF0aDlrX2h0Y192aWYgKmF2cCA9IChzdHJ1Y3QgYXRoOWtfaHRjX3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7CisJaW50IGkgPSAwOworCisJc3Bpbl9sb2NrX2JoKCZwcml2LT5iZWFjb25fbG9jayk7CisJZm9yIChpID0gMDsgaSA8IEFUSDlLX0hUQ19NQVhfQkNOX1ZJRjsgaSsrKSB7CisJCWlmIChwcml2LT5jdXJfYmVhY29uX2NvbmYuYnNsb3RbaV0gPT0gTlVMTCkgeworCQkJYXZwLT5ic2xvdCA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXByaXYtPmN1cl9iZWFjb25fY29uZi5ic2xvdFthdnAtPmJzbG90XSA9IHZpZjsKKwlzcGluX3VubG9ja19iaCgmcHJpdi0+YmVhY29uX2xvY2spOworCisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLAorCQkiQWRkZWQgaW50ZXJmYWNlIGF0IGJlYWNvbiBzbG90OiAlZFxuIiwgYXZwLT5ic2xvdCk7Cit9CisKK3ZvaWQgYXRoOWtfaHRjX3JlbW92ZV9ic2xvdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsCisJCQkgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHByaXYtPmFoKTsKKwlzdHJ1Y3QgYXRoOWtfaHRjX3ZpZiAqYXZwID0gKHN0cnVjdCBhdGg5a19odGNfdmlmICopdmlmLT5kcnZfcHJpdjsKKworCXNwaW5fbG9ja19iaCgmcHJpdi0+YmVhY29uX2xvY2spOworCXByaXYtPmN1cl9iZWFjb25fY29uZi5ic2xvdFthdnAtPmJzbG90XSA9IE5VTEw7CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmJlYWNvbl9sb2NrKTsKKworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKKwkJIlJlbW92ZWQgaW50ZXJmYWNlIGF0IGJlYWNvbiBzbG90OiAlZFxuIiwgYXZwLT5ic2xvdCk7Cit9CisKKy8qCisgKiBDYWxjdWxhdGUgdGhlIFRTRiBhZGp1c3RtZW50IHZhbHVlIGZvciBhbGwgc2xvdHMKKyAqIG90aGVyIHRoYW4gemVyby4KKyAqLwordm9pZCBhdGg5a19odGNfc2V0X3RzZmFkanVzdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihwcml2LT5haCk7CisJc3RydWN0IGF0aDlrX2h0Y192aWYgKmF2cCA9IChzdHJ1Y3QgYXRoOWtfaHRjX3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7CisJc3RydWN0IGh0Y19iZWFjb25fY29uZmlnICpjdXJfY29uZiA9ICZwcml2LT5jdXJfYmVhY29uX2NvbmY7CisJdTY0IHRzZmFkanVzdDsKKworCWlmIChhdnAtPmJzbG90ID09IDApCisJCXJldHVybjsKKworCS8qCisJICogVGhlIGJlYWNvbiBpbnRlcnZhbCBjYW5ub3QgYmUgZGlmZmVyZW50IGZvciBtdWx0aS1BUCBtb2RlLAorCSAqIGFuZCB3ZSByZWFjaCBoZXJlIG9ubHkgZm9yIFZJRiBzbG90cyBncmVhdGVyIHRoYW4gemVybywKKwkgKiBzbyBiZWFjb25faW50ZXJ2YWwgaXMgZ3VhcmFudGVlZCB0byBiZSBzZXQgaW4gY3VyX2NvbmYuCisJICovCisJdHNmYWRqdXN0ID0gY3VyX2NvbmYtPmJlYWNvbl9pbnRlcnZhbCAqIGF2cC0+YnNsb3QgLyBBVEg5S19IVENfTUFYX0JDTl9WSUY7CisJYXZwLT50c2ZhZGp1c3QgPSBjcHVfdG9fbGU2NChUVV9UT19VU0VDKHRzZmFkanVzdCkpOworCisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLAorCQkidHNmYWRqdXN0IGlzOiAlbGx1IGZvciBic2xvdDogJWRcbiIsCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpdHNmYWRqdXN0LCBhdnAtPmJzbG90KTsKIH0KIAogc3RhdGljIHZvaWQgYXRoOWtfaHRjX2JlYWNvbl9pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9kZWJ1Zy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTQ4YjNhYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2RlYnVnLmMKQEAgLTAsMCArMSw5NjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAiaHRjLmgiCisKK3N0YXRpYyBpbnQgYXRoOWtfZGVidWdmc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJlYWRfZmlsZV90Z3RfaW50X3N0YXRzKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYXRoOWtfaHRjX3RhcmdldF9pbnRfc3RhdHMgY21kX3JzcDsKKwljaGFyIGJ1Zls1MTJdOworCXVuc2lnbmVkIGludCBsZW4gPSAwOworCWludCByZXQgPSAwOworCisJbWVtc2V0KCZjbWRfcnNwLCAwLCBzaXplb2YoY21kX3JzcCkpOworCisJYXRoOWtfaHRjX3BzX3dha2V1cChwcml2KTsKKworCVdNSV9DTUQoV01JX0lOVF9TVEFUU19DTURJRCk7CisJaWYgKHJldCkgeworCQlhdGg5a19odGNfcHNfcmVzdG9yZShwcml2KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYXRoOWtfaHRjX3BzX3Jlc3RvcmUocHJpdik7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwdVxuIiwgIlJYIiwKKwkJCWJlMzJfdG9fY3B1KGNtZF9yc3AucngpKTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCQkJIiUyMHMgOiAlMTB1XG4iLCAiUlhPUk4iLAorCQkJYmUzMl90b19jcHUoY21kX3JzcC5yeG9ybikpOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJCQkiJTIwcyA6ICUxMHVcbiIsICJSWEVPTCIsCisJCQliZTMyX3RvX2NwdShjbWRfcnNwLnJ4ZW9sKSk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwdVxuIiwgIlRYVVJOIiwKKwkJCWJlMzJfdG9fY3B1KGNtZF9yc3AudHh1cm4pKTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCQkJIiUyMHMgOiAlMTB1XG4iLCAiVFhUTyIsCisJCQliZTMyX3RvX2NwdShjbWRfcnNwLnR4dG8pKTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCQkJIiUyMHMgOiAlMTB1XG4iLCAiQ1NUIiwKKwkJCWJlMzJfdG9fY3B1KGNtZF9yc3AuY3N0KSk7CisKKwlpZiAobGVuID4gc2l6ZW9mKGJ1ZikpCisJCWxlbiA9IHNpemVvZihidWYpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX3RndF9pbnRfc3RhdHMgPSB7CisJLnJlYWQgPSByZWFkX2ZpbGVfdGd0X2ludF9zdGF0cywKKwkub3BlbiA9IGF0aDlrX2RlYnVnZnNfb3BlbiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubGxzZWVrID0gZGVmYXVsdF9sbHNlZWssCit9OworCitzdGF0aWMgc3NpemVfdCByZWFkX2ZpbGVfdGd0X3R4X3N0YXRzKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhdGg5a19odGNfdGFyZ2V0X3R4X3N0YXRzIGNtZF9yc3A7CisJY2hhciBidWZbNTEyXTsKKwl1bnNpZ25lZCBpbnQgbGVuID0gMDsKKwlpbnQgcmV0ID0gMDsKKworCW1lbXNldCgmY21kX3JzcCwgMCwgc2l6ZW9mKGNtZF9yc3ApKTsKKworCWF0aDlrX2h0Y19wc193YWtldXAocHJpdik7CisKKwlXTUlfQ01EKFdNSV9UWF9TVEFUU19DTURJRCk7CisJaWYgKHJldCkgeworCQlhdGg5a19odGNfcHNfcmVzdG9yZShwcml2KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYXRoOWtfaHRjX3BzX3Jlc3RvcmUocHJpdik7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwdVxuIiwgIlhyZXRyaWVzIiwKKwkJCWJlMzJfdG9fY3B1KGNtZF9yc3AueHJldHJpZXMpKTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCQkJIiUyMHMgOiAlMTB1XG4iLCAiRmlmb0VyciIsCisJCQliZTMyX3RvX2NwdShjbWRfcnNwLmZpZm9lcnIpKTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCQkJIiUyMHMgOiAlMTB1XG4iLCAiRmlsdGVyZWQiLAorCQkJYmUzMl90b19jcHUoY21kX3JzcC5maWx0ZXJlZCkpOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJCQkiJTIwcyA6ICUxMHVcbiIsICJUaW1lckV4cCIsCisJCQliZTMyX3RvX2NwdShjbWRfcnNwLnRpbWVyX2V4cCkpOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJCQkiJTIwcyA6ICUxMHVcbiIsICJTaG9ydFJldHJpZXMiLAorCQkJYmUzMl90b19jcHUoY21kX3JzcC5zaG9ydHJldHJpZXMpKTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCQkJIiUyMHMgOiAlMTB1XG4iLCAiTG9uZ1JldHJpZXMiLAorCQkJYmUzMl90b19jcHUoY21kX3JzcC5sb25ncmV0cmllcykpOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJCQkiJTIwcyA6ICUxMHVcbiIsICJRdWV1ZU51bGwiLAorCQkJYmUzMl90b19jcHUoY21kX3JzcC5xbnVsbCkpOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJCQkiJTIwcyA6ICUxMHVcbiIsICJFbmNhcEZhaWwiLAorCQkJYmUzMl90b19jcHUoY21kX3JzcC5lbmNhcF9mYWlsKSk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwdVxuIiwgIk5vQnVmIiwKKwkJCWJlMzJfdG9fY3B1KGNtZF9yc3Aubm9idWYpKTsKKworCWlmIChsZW4gPiBzaXplb2YoYnVmKSkKKwkJbGVuID0gc2l6ZW9mKGJ1Zik7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfdGd0X3R4X3N0YXRzID0geworCS5yZWFkID0gcmVhZF9maWxlX3RndF90eF9zdGF0cywKKwkub3BlbiA9IGF0aDlrX2RlYnVnZnNfb3BlbiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubGxzZWVrID0gZGVmYXVsdF9sbHNlZWssCit9OworCitzdGF0aWMgc3NpemVfdCByZWFkX2ZpbGVfdGd0X3J4X3N0YXRzKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhdGg5a19odGNfdGFyZ2V0X3J4X3N0YXRzIGNtZF9yc3A7CisJY2hhciBidWZbNTEyXTsKKwl1bnNpZ25lZCBpbnQgbGVuID0gMDsKKwlpbnQgcmV0ID0gMDsKKworCW1lbXNldCgmY21kX3JzcCwgMCwgc2l6ZW9mKGNtZF9yc3ApKTsKKworCWF0aDlrX2h0Y19wc193YWtldXAocHJpdik7CisKKwlXTUlfQ01EKFdNSV9SWF9TVEFUU19DTURJRCk7CisJaWYgKHJldCkgeworCQlhdGg5a19odGNfcHNfcmVzdG9yZShwcml2KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYXRoOWtfaHRjX3BzX3Jlc3RvcmUocHJpdik7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwdVxuIiwgIk5vQnVmIiwKKwkJCWJlMzJfdG9fY3B1KGNtZF9yc3Aubm9idWYpKTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCQkJIiUyMHMgOiAlMTB1XG4iLCAiSG9zdFNlbmQiLAorCQkJYmUzMl90b19jcHUoY21kX3JzcC5ob3N0X3NlbmQpKTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCQkJIiUyMHMgOiAlMTB1XG4iLCAiSG9zdERvbmUiLAorCQkJYmUzMl90b19jcHUoY21kX3JzcC5ob3N0X2RvbmUpKTsKKworCWlmIChsZW4gPiBzaXplb2YoYnVmKSkKKwkJbGVuID0gc2l6ZW9mKGJ1Zik7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfdGd0X3J4X3N0YXRzID0geworCS5yZWFkID0gcmVhZF9maWxlX3RndF9yeF9zdGF0cywKKwkub3BlbiA9IGF0aDlrX2RlYnVnZnNfb3BlbiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubGxzZWVrID0gZGVmYXVsdF9sbHNlZWssCit9OworCitzdGF0aWMgc3NpemVfdCByZWFkX2ZpbGVfeG1pdChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzUxMl07CisJdW5zaWduZWQgaW50IGxlbiA9IDA7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwdVxuIiwgIkJ1ZmZlcnMgcXVldWVkIiwKKwkJCXByaXYtPmRlYnVnLnR4X3N0YXRzLmJ1Zl9xdWV1ZWQpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCQkJIiUyMHMgOiAlMTB1XG4iLCAiQnVmZmVycyBjb21wbGV0ZWQiLAorCQkJcHJpdi0+ZGVidWcudHhfc3RhdHMuYnVmX2NvbXBsZXRlZCk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJCQkiJTIwcyA6ICUxMHVcbiIsICJTS0JzIHF1ZXVlZCIsCisJCQlwcml2LT5kZWJ1Zy50eF9zdGF0cy5za2JfcXVldWVkKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwdVxuIiwgIlNLQnMgc3VjY2VzcyIsCisJCQlwcml2LT5kZWJ1Zy50eF9zdGF0cy5za2Jfc3VjY2Vzcyk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJCQkiJTIwcyA6ICUxMHVcbiIsICJTS0JzIGZhaWxlZCIsCisJCQlwcml2LT5kZWJ1Zy50eF9zdGF0cy5za2JfZmFpbGVkKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwdVxuIiwgIkNBQiBxdWV1ZWQiLAorCQkJcHJpdi0+ZGVidWcudHhfc3RhdHMuY2FiX3F1ZXVlZCk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwdVxuIiwgIkJFIHF1ZXVlZCIsCisJCQlwcml2LT5kZWJ1Zy50eF9zdGF0cy5xdWV1ZV9zdGF0c1tXTUVfQUNfQkVdKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwdVxuIiwgIkJLIHF1ZXVlZCIsCisJCQlwcml2LT5kZWJ1Zy50eF9zdGF0cy5xdWV1ZV9zdGF0c1tXTUVfQUNfQktdKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwdVxuIiwgIlZJIHF1ZXVlZCIsCisJCQlwcml2LT5kZWJ1Zy50eF9zdGF0cy5xdWV1ZV9zdGF0c1tXTUVfQUNfVkldKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwdVxuIiwgIlZPIHF1ZXVlZCIsCisJCQlwcml2LT5kZWJ1Zy50eF9zdGF0cy5xdWV1ZV9zdGF0c1tXTUVfQUNfVk9dKTsKKworCWlmIChsZW4gPiBzaXplb2YoYnVmKSkKKwkJbGVuID0gc2l6ZW9mKGJ1Zik7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfeG1pdCA9IHsKKwkucmVhZCA9IHJlYWRfZmlsZV94bWl0LAorCS5vcGVuID0gYXRoOWtfZGVidWdmc19vcGVuLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywKK307CisKK3ZvaWQgYXRoOWtfaHRjX2Vycl9zdGF0X3J4KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwKKwkJCSAgIHN0cnVjdCBhdGhfaHRjX3J4X3N0YXR1cyAqcnhzKQoreworI2RlZmluZSBSWF9QSFlfRVJSX0lOQyhjKSBwcml2LT5kZWJ1Zy5yeF9zdGF0cy5lcnJfcGh5X3N0YXRzW2NdKysKKworCWlmIChyeHMtPnJzX3N0YXR1cyAmIEFUSDlLX1JYRVJSX0NSQykKKwkJcHJpdi0+ZGVidWcucnhfc3RhdHMuZXJyX2NyYysrOworCWlmIChyeHMtPnJzX3N0YXR1cyAmIEFUSDlLX1JYRVJSX0RFQ1JZUFQpCisJCXByaXYtPmRlYnVnLnJ4X3N0YXRzLmVycl9kZWNyeXB0X2NyYysrOworCWlmIChyeHMtPnJzX3N0YXR1cyAmIEFUSDlLX1JYRVJSX01JQykKKwkJcHJpdi0+ZGVidWcucnhfc3RhdHMuZXJyX21pYysrOworCWlmIChyeHMtPnJzX3N0YXR1cyAmIEFUSDlLX1JYX0RFTElNX0NSQ19QUkUpCisJCXByaXYtPmRlYnVnLnJ4X3N0YXRzLmVycl9wcmVfZGVsaW0rKzsKKwlpZiAocnhzLT5yc19zdGF0dXMgJiBBVEg5S19SWF9ERUxJTV9DUkNfUE9TVCkKKwkJcHJpdi0+ZGVidWcucnhfc3RhdHMuZXJyX3Bvc3RfZGVsaW0rKzsKKwlpZiAocnhzLT5yc19zdGF0dXMgJiBBVEg5S19SWF9ERUNSWVBUX0JVU1kpCisJCXByaXYtPmRlYnVnLnJ4X3N0YXRzLmVycl9kZWNyeXB0X2J1c3krKzsKKworCWlmIChyeHMtPnJzX3N0YXR1cyAmIEFUSDlLX1JYRVJSX1BIWSkgeworCQlwcml2LT5kZWJ1Zy5yeF9zdGF0cy5lcnJfcGh5Kys7CisJCWlmIChyeHMtPnJzX3BoeWVyciA8IEFUSDlLX1BIWUVSUl9NQVgpCisJCQlSWF9QSFlfRVJSX0lOQyhyeHMtPnJzX3BoeWVycik7CisJfQorCisjdW5kZWYgUlhfUEhZX0VSUl9JTkMKK30KKworc3RhdGljIHNzaXplX3QgcmVhZF9maWxlX3JlY3Yoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCSAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworI2RlZmluZSBQSFlfRVJSKHMsIHApCQkJCQkJCVwKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLCAiJTIwcyA6ICUxMHVcbiIsIHMsCVwKKwkJCXByaXYtPmRlYnVnLnJ4X3N0YXRzLmVycl9waHlfc3RhdHNbcF0pOworCisJc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgKmJ1ZjsKKwl1bnNpZ25lZCBpbnQgbGVuID0gMCwgc2l6ZSA9IDE1MDA7CisJc3NpemVfdCByZXR2YWwgPSAwOworCisJYnVmID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVmID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwdVxuIiwgIlNLQnMgYWxsb2NhdGVkIiwKKwkJCXByaXYtPmRlYnVnLnJ4X3N0YXRzLnNrYl9hbGxvY2F0ZWQpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sCisJCQkiJTIwcyA6ICUxMHVcbiIsICJTS0JzIGNvbXBsZXRlZCIsCisJCQlwcml2LT5kZWJ1Zy5yeF9zdGF0cy5za2JfY29tcGxldGVkKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUyMHMgOiAlMTB1XG4iLCAiU0tCcyBEcm9wcGVkIiwKKwkJCXByaXYtPmRlYnVnLnJ4X3N0YXRzLnNrYl9kcm9wcGVkKTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sCisJCQkiJTIwcyA6ICUxMHVcbiIsICJDUkMgRVJSIiwKKwkJCXByaXYtPmRlYnVnLnJ4X3N0YXRzLmVycl9jcmMpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sCisJCQkiJTIwcyA6ICUxMHVcbiIsICJERUNSWVBUIENSQyBFUlIiLAorCQkJcHJpdi0+ZGVidWcucnhfc3RhdHMuZXJyX2RlY3J5cHRfY3JjKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUyMHMgOiAlMTB1XG4iLCAiTUlDIEVSUiIsCisJCQlwcml2LT5kZWJ1Zy5yeF9zdGF0cy5lcnJfbWljKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUyMHMgOiAlMTB1XG4iLCAiUFJFLURFTElNIENSQyBFUlIiLAorCQkJcHJpdi0+ZGVidWcucnhfc3RhdHMuZXJyX3ByZV9kZWxpbSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwdVxuIiwgIlBPU1QtREVMSU0gQ1JDIEVSUiIsCisJCQlwcml2LT5kZWJ1Zy5yeF9zdGF0cy5lcnJfcG9zdF9kZWxpbSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwdVxuIiwgIkRFQ1JZUFQgQlVTWSBFUlIiLAorCQkJcHJpdi0+ZGVidWcucnhfc3RhdHMuZXJyX2RlY3J5cHRfYnVzeSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwdVxuIiwgIlRPVEFMIFBIWSBFUlIiLAorCQkJcHJpdi0+ZGVidWcucnhfc3RhdHMuZXJyX3BoeSk7CisKKworCVBIWV9FUlIoIlVOREVSUlVOIiwgQVRIOUtfUEhZRVJSX1VOREVSUlVOKTsKKwlQSFlfRVJSKCJUSU1JTkciLCBBVEg5S19QSFlFUlJfVElNSU5HKTsKKwlQSFlfRVJSKCJQQVJJVFkiLCBBVEg5S19QSFlFUlJfUEFSSVRZKTsKKwlQSFlfRVJSKCJSQVRFIiwgQVRIOUtfUEhZRVJSX1JBVEUpOworCVBIWV9FUlIoIkxFTkdUSCIsIEFUSDlLX1BIWUVSUl9MRU5HVEgpOworCVBIWV9FUlIoIlJBREFSIiwgQVRIOUtfUEhZRVJSX1JBREFSKTsKKwlQSFlfRVJSKCJTRVJWSUNFIiwgQVRIOUtfUEhZRVJSX1NFUlZJQ0UpOworCVBIWV9FUlIoIlRPUiIsIEFUSDlLX1BIWUVSUl9UT1IpOworCVBIWV9FUlIoIk9GRE0tVElNSU5HIiwgQVRIOUtfUEhZRVJSX09GRE1fVElNSU5HKTsKKwlQSFlfRVJSKCJPRkRNLVNJR05BTC1QQVJJVFkiLCBBVEg5S19QSFlFUlJfT0ZETV9TSUdOQUxfUEFSSVRZKTsKKwlQSFlfRVJSKCJPRkRNLVJBVEUiLCBBVEg5S19QSFlFUlJfT0ZETV9SQVRFX0lMTEVHQUwpOworCVBIWV9FUlIoIk9GRE0tTEVOR1RIIiwgQVRIOUtfUEhZRVJSX09GRE1fTEVOR1RIX0lMTEVHQUwpOworCVBIWV9FUlIoIk9GRE0tUE9XRVItRFJPUCIsIEFUSDlLX1BIWUVSUl9PRkRNX1BPV0VSX0RST1ApOworCVBIWV9FUlIoIk9GRE0tU0VSVklDRSIsIEFUSDlLX1BIWUVSUl9PRkRNX1NFUlZJQ0UpOworCVBIWV9FUlIoIk9GRE0tUkVTVEFSVCIsIEFUSDlLX1BIWUVSUl9PRkRNX1JFU1RBUlQpOworCVBIWV9FUlIoIkZBTFNFLVJBREFSLUVYVCIsIEFUSDlLX1BIWUVSUl9GQUxTRV9SQURBUl9FWFQpOworCVBIWV9FUlIoIkNDSy1USU1JTkciLCBBVEg5S19QSFlFUlJfQ0NLX1RJTUlORyk7CisJUEhZX0VSUigiQ0NLLUhFQURFUi1DUkMiLCBBVEg5S19QSFlFUlJfQ0NLX0hFQURFUl9DUkMpOworCVBIWV9FUlIoIkNDSy1SQVRFIiwgQVRIOUtfUEhZRVJSX0NDS19SQVRFX0lMTEVHQUwpOworCVBIWV9FUlIoIkNDSy1TRVJWSUNFIiwgQVRIOUtfUEhZRVJSX0NDS19TRVJWSUNFKTsKKwlQSFlfRVJSKCJDQ0stUkVTVEFSVCIsIEFUSDlLX1BIWUVSUl9DQ0tfUkVTVEFSVCk7CisJUEhZX0VSUigiQ0NLLUxFTkdUSCIsIEFUSDlLX1BIWUVSUl9DQ0tfTEVOR1RIX0lMTEVHQUwpOworCVBIWV9FUlIoIkNDSy1QT1dFUi1EUk9QIiwgQVRIOUtfUEhZRVJSX0NDS19QT1dFUl9EUk9QKTsKKwlQSFlfRVJSKCJIVC1DUkMiLCBBVEg5S19QSFlFUlJfSFRfQ1JDX0VSUk9SKTsKKwlQSFlfRVJSKCJIVC1MRU5HVEgiLCBBVEg5S19QSFlFUlJfSFRfTEVOR1RIX0lMTEVHQUwpOworCVBIWV9FUlIoIkhULVJBVEUiLCBBVEg5S19QSFlFUlJfSFRfUkFURV9JTExFR0FMKTsKKworCWlmIChsZW4gPiBzaXplKQorCQlsZW4gPSBzaXplOworCisJcmV0dmFsID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7CisJa2ZyZWUoYnVmKTsKKworCXJldHVybiByZXR2YWw7CisKKyN1bmRlZiBQSFlfRVJSCit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfcmVjdiA9IHsKKwkucmVhZCA9IHJlYWRfZmlsZV9yZWN2LAorCS5vcGVuID0gYXRoOWtfZGVidWdmc19vcGVuLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywKK307CisKK3N0YXRpYyBzc2l6ZV90IHJlYWRfZmlsZV9zbG90KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbNTEyXTsKKwl1bnNpZ25lZCBpbnQgbGVuID0gMDsKKworCXNwaW5fbG9ja19iaCgmcHJpdi0+dHgudHhfbG9jayk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwgIlRYIHNsb3QgYml0bWFwIDogIik7CisKKwlsZW4gKz0gYml0bWFwX3NjbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCQkJICAgICAgIHByaXYtPnR4LnR4X3Nsb3QsIE1BWF9UWF9CVUZfTlVNKTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLCAiXG4iKTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCQkJIlVzZWQgc2xvdHMgICAgIDogJWRcbiIsCisJCQliaXRtYXBfd2VpZ2h0KHByaXYtPnR4LnR4X3Nsb3QsIE1BWF9UWF9CVUZfTlVNKSk7CisKKwlzcGluX3VubG9ja19iaCgmcHJpdi0+dHgudHhfbG9jayk7CisKKwlpZiAobGVuID4gc2l6ZW9mKGJ1ZikpCisJCWxlbiA9IHNpemVvZihidWYpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX3Nsb3QgPSB7CisJLnJlYWQgPSByZWFkX2ZpbGVfc2xvdCwKKwkub3BlbiA9IGF0aDlrX2RlYnVnZnNfb3BlbiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubGxzZWVrID0gZGVmYXVsdF9sbHNlZWssCit9OworCitzdGF0aWMgc3NpemVfdCByZWFkX2ZpbGVfcXVldWUoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbNTEyXTsKKwl1bnNpZ25lZCBpbnQgbGVuID0gMDsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLCAiJTIwcyA6ICUxMHVcbiIsCisJCQkiTWdtdCBlbmRwb2ludCIsIHNrYl9xdWV1ZV9sZW4oJnByaXYtPnR4Lm1nbXRfZXBfcXVldWUpKTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLCAiJTIwcyA6ICUxMHVcbiIsCisJCQkiQ2FiIGVuZHBvaW50Iiwgc2tiX3F1ZXVlX2xlbigmcHJpdi0+dHguY2FiX2VwX3F1ZXVlKSk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwgIiUyMHMgOiAlMTB1XG4iLAorCQkJIkRhdGEgQkUgZW5kcG9pbnQiLCBza2JfcXVldWVfbGVuKCZwcml2LT50eC5kYXRhX2JlX3F1ZXVlKSk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwgIiUyMHMgOiAlMTB1XG4iLAorCQkJIkRhdGEgQksgZW5kcG9pbnQiLCBza2JfcXVldWVfbGVuKCZwcml2LT50eC5kYXRhX2JrX3F1ZXVlKSk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwgIiUyMHMgOiAlMTB1XG4iLAorCQkJIkRhdGEgVkkgZW5kcG9pbnQiLCBza2JfcXVldWVfbGVuKCZwcml2LT50eC5kYXRhX3ZpX3F1ZXVlKSk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwgIiUyMHMgOiAlMTB1XG4iLAorCQkJIkRhdGEgVk8gZW5kcG9pbnQiLCBza2JfcXVldWVfbGVuKCZwcml2LT50eC5kYXRhX3ZvX3F1ZXVlKSk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwgIiUyMHMgOiAlMTB1XG4iLAorCQkJIkZhaWxlZCBxdWV1ZSIsIHNrYl9xdWV1ZV9sZW4oJnByaXYtPnR4LnR4X2ZhaWxlZCkpOworCisJc3Bpbl9sb2NrX2JoKCZwcml2LT50eC50eF9sb2NrKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwgIiUyMHMgOiAlMTB1XG4iLAorCQkJIlF1ZXVlZCBjb3VudCIsIHByaXYtPnR4LnF1ZXVlZF9jbnQpOworCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eC50eF9sb2NrKTsKKworCWlmIChsZW4gPiBzaXplb2YoYnVmKSkKKwkJbGVuID0gc2l6ZW9mKGJ1Zik7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7CisKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc19xdWV1ZSA9IHsKKwkucmVhZCA9IHJlYWRfZmlsZV9xdWV1ZSwKKwkub3BlbiA9IGF0aDlrX2RlYnVnZnNfb3BlbiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubGxzZWVrID0gZGVmYXVsdF9sbHNlZWssCit9OworCitzdGF0aWMgc3NpemVfdCByZWFkX2ZpbGVfZGVidWcoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihwcml2LT5haCk7CisJY2hhciBidWZbMzJdOworCXVuc2lnbmVkIGludCBsZW47CisKKwlsZW4gPSBzcHJpbnRmKGJ1ZiwgIjB4JTA4eFxuIiwgY29tbW9uLT5kZWJ1Z19tYXNrKTsKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHdyaXRlX2ZpbGVfZGVidWcoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihwcml2LT5haCk7CisJdW5zaWduZWQgbG9uZyBtYXNrOworCWNoYXIgYnVmWzMyXTsKKwlzc2l6ZV90IGxlbjsKKworCWxlbiA9IG1pbihjb3VudCwgc2l6ZW9mKGJ1ZikgLSAxKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlidWZbbGVuXSA9ICdcMCc7CisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJm1hc2spKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNvbW1vbi0+ZGVidWdfbWFzayA9IG1hc2s7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX2RlYnVnID0geworCS5yZWFkID0gcmVhZF9maWxlX2RlYnVnLAorCS53cml0ZSA9IHdyaXRlX2ZpbGVfZGVidWcsCisJLm9wZW4gPSBhdGg5a19kZWJ1Z2ZzX29wZW4sCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmxsc2VlayA9IGRlZmF1bHRfbGxzZWVrLAorfTsKKworc3RhdGljIHNzaXplX3QgcmVhZF9maWxlX2Jhc2VfZWVwcm9tKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihwcml2LT5haCk7CisJc3RydWN0IGJhc2VfZWVwX2hlYWRlciAqcEJhc2UgPSBOVUxMOworCXVuc2lnbmVkIGludCBsZW4gPSAwLCBzaXplID0gMTUwMDsKKwlzc2l6ZV90IHJldHZhbCA9IDA7CisJY2hhciAqYnVmOworCisJLyoKKwkgKiBUaGlzIGNhbiBiZSBkb25lIHNpbmNlIGFsbCB0aGUgMyBFRVBST00gZmFtaWxpZXMgaGF2ZSB0aGUKKwkgKiBzYW1lIGJhc2UgaGVhZGVyIHVwdG8gYSBjZXJ0YWluIHBvaW50LCBhbmQgd2UgYXJlIGludGVyZXN0ZWQgaW4KKwkgKiB0aGUgZGF0YSBvbmx5IHVwdG8gdGhhdCBwb2ludC4KKwkgKi8KKworCWlmIChBUl9TUkVWXzkyNzEocHJpdi0+YWgpKQorCQlwQmFzZSA9IChzdHJ1Y3QgYmFzZV9lZXBfaGVhZGVyICopCisJCQkmcHJpdi0+YWgtPmVlcHJvbS5tYXA0ay5iYXNlRWVwSGVhZGVyOworCWVsc2UgaWYgKHByaXYtPmFoLT5od192ZXJzaW9uLnVzYmRldiA9PSBBUjkyODBfVVNCKQorCQlwQmFzZSA9IChzdHJ1Y3QgYmFzZV9lZXBfaGVhZGVyICopCisJCQkmcHJpdi0+YWgtPmVlcHJvbS5kZWYuYmFzZUVlcEhlYWRlcjsKKwllbHNlIGlmIChwcml2LT5haC0+aHdfdmVyc2lvbi51c2JkZXYgPT0gQVI5Mjg3X1VTQikKKwkJcEJhc2UgPSAoc3RydWN0IGJhc2VfZWVwX2hlYWRlciAqKQorCQkJJnByaXYtPmFoLT5lZXByb20ubWFwOTI4Ny5iYXNlRWVwSGVhZGVyOworCisJaWYgKHBCYXNlID09IE5VTEwpIHsKKwkJYXRoX2Vycihjb21tb24sICJVbmtub3duIEVFUFJPTSB0eXBlXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJYnVmID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVmID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwZFxuIiwgIk1ham9yIFZlcnNpb24iLAorCQkJcEJhc2UtPnZlcnNpb24gPj4gMTIpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sCisJCQkiJTIwcyA6ICUxMGRcbiIsICJNaW5vciBWZXJzaW9uIiwKKwkJCXBCYXNlLT52ZXJzaW9uICYgMHhGRkYpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sCisJCQkiJTIwcyA6ICUxMGRcbiIsICJDaGVja3N1bSIsCisJCQlwQmFzZS0+Y2hlY2tzdW0pOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sCisJCQkiJTIwcyA6ICUxMGRcbiIsICJMZW5ndGgiLAorCQkJcEJhc2UtPmxlbmd0aCk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwZFxuIiwgIlJlZ0RvbWFpbjEiLAorCQkJcEJhc2UtPnJlZ0RtblswXSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwZFxuIiwgIlJlZ0RvbWFpbjIiLAorCQkJcEJhc2UtPnJlZ0RtblsxXSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwZFxuIiwKKwkJCSJUWCBNYXNrIiwgcEJhc2UtPnR4TWFzayk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwZFxuIiwKKwkJCSJSWCBNYXNrIiwgcEJhc2UtPnJ4TWFzayk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwZFxuIiwKKwkJCSJBbGxvdyA1R0h6IiwKKwkJCSEhKHBCYXNlLT5vcENhcEZsYWdzICYgQVI1NDE2X09QRkxBR1NfMTFBKSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwZFxuIiwKKwkJCSJBbGxvdyAyR0h6IiwKKwkJCSEhKHBCYXNlLT5vcENhcEZsYWdzICYgQVI1NDE2X09QRkxBR1NfMTFHKSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwZFxuIiwKKwkJCSJEaXNhYmxlIDJHSHogSFQyMCIsCisJCQkhIShwQmFzZS0+b3BDYXBGbGFncyAmIEFSNTQxNl9PUEZMQUdTX05fMkdfSFQyMCkpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sCisJCQkiJTIwcyA6ICUxMGRcbiIsCisJCQkiRGlzYWJsZSAyR0h6IEhUNDAiLAorCQkJISEocEJhc2UtPm9wQ2FwRmxhZ3MgJiBBUjU0MTZfT1BGTEFHU19OXzJHX0hUNDApKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUyMHMgOiAlMTBkXG4iLAorCQkJIkRpc2FibGUgNUdoeiBIVDIwIiwKKwkJCSEhKHBCYXNlLT5vcENhcEZsYWdzICYgQVI1NDE2X09QRkxBR1NfTl81R19IVDIwKSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwZFxuIiwKKwkJCSJEaXNhYmxlIDVHaHogSFQ0MCIsCisJCQkhIShwQmFzZS0+b3BDYXBGbGFncyAmIEFSNTQxNl9PUEZMQUdTX05fNUdfSFQ0MCkpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sCisJCQkiJTIwcyA6ICUxMGRcbiIsCisJCQkiQmlnIEVuZGlhbiIsCisJCQkhIShwQmFzZS0+ZWVwTWlzYyAmIDB4MDEpKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUyMHMgOiAlMTBkXG4iLAorCQkJIkNhbCBCaW4gTWFqb3IgVmVyIiwKKwkJCShwQmFzZS0+YmluQnVpbGROdW1iZXIgPj4gMjQpICYgMHhGRik7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwZFxuIiwKKwkJCSJDYWwgQmluIE1pbm9yIFZlciIsCisJCQkocEJhc2UtPmJpbkJ1aWxkTnVtYmVyID4+IDE2KSAmIDB4RkYpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sCisJCQkiJTIwcyA6ICUxMGRcbiIsCisJCQkiQ2FsIEJpbiBCdWlsZCIsCisJCQkocEJhc2UtPmJpbkJ1aWxkTnVtYmVyID4+IDgpICYgMHhGRik7CisKKwkvKgorCSAqIFVCOTEgc3BlY2lmaWMgZGF0YS4KKwkgKi8KKwlpZiAoQVJfU1JFVl85MjcxKHByaXYtPmFoKSkgeworCQlzdHJ1Y3QgYmFzZV9lZXBfaGVhZGVyXzRrICpwQmFzZTRrID0KKwkJCSZwcml2LT5haC0+ZWVwcm9tLm1hcDRrLmJhc2VFZXBIZWFkZXI7CisKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCQkiJTIwcyA6ICUxMGRcbiIsCisJCQkJIlRYIEdhaW4gdHlwZSIsCisJCQkJcEJhc2U0ay0+dHhHYWluVHlwZSk7CisJfQorCisJLyoKKwkgKiBVQjk1IHNwZWNpZmljIGRhdGEuCisJICovCisJaWYgKHByaXYtPmFoLT5od192ZXJzaW9uLnVzYmRldiA9PSBBUjkyODdfVVNCKSB7CisJCXN0cnVjdCBiYXNlX2VlcF9hcjkyODdfaGVhZGVyICpwQmFzZTkyODcgPQorCQkJJnByaXYtPmFoLT5lZXByb20ubWFwOTI4Ny5iYXNlRWVwSGVhZGVyOworCisJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sCisJCQkJIiUyMHMgOiAlMTBkZEJcbiIsCisJCQkJIlBvd2VyIFRhYmxlIE9mZnNldCIsCisJCQkJcEJhc2U5Mjg3LT5wd3JUYWJsZU9mZnNldCk7CisKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCQkiJTIwcyA6ICUxMGRcbiIsCisJCQkJIk9wZW5Mb29wIFBvd2VyIEN0cmwiLAorCQkJCXBCYXNlOTI4Ny0+b3Blbkxvb3BQd3JDbnRsKTsKKwl9CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUyMHMgOiAlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWFxuIiwKKwkJCSJNYWNBZGRyZXNzIiwKKwkJCXBCYXNlLT5tYWNBZGRyWzBdLCBwQmFzZS0+bWFjQWRkclsxXSwgcEJhc2UtPm1hY0FkZHJbMl0sCisJCQlwQmFzZS0+bWFjQWRkclszXSwgcEJhc2UtPm1hY0FkZHJbNF0sIHBCYXNlLT5tYWNBZGRyWzVdKTsKKwlpZiAobGVuID4gc2l6ZSkKKwkJbGVuID0gc2l6ZTsKKworCXJldHZhbCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOworCWtmcmVlKGJ1Zik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX2Jhc2VfZWVwcm9tID0geworCS5yZWFkID0gcmVhZF9maWxlX2Jhc2VfZWVwcm9tLAorCS5vcGVuID0gYXRoOWtfZGVidWdmc19vcGVuLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywKK307CisKK3N0YXRpYyBzc2l6ZV90IHJlYWRfNGtfbW9kYWxfZWVwcm9tKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCSAgICBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworI2RlZmluZSBQUl9FRVAoX3MsIF92YWwpCQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwgIiUyMHMgOiAlMTBkXG4iLAlcCisJCQkJX3MsIChfdmFsKSk7CQkJCVwKKwl9IHdoaWxlICgwKQorCisJc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBtb2RhbF9lZXBfNGtfaGVhZGVyICpwTW9kYWwgPSAmcHJpdi0+YWgtPmVlcHJvbS5tYXA0ay5tb2RhbEhlYWRlcjsKKwl1bnNpZ25lZCBpbnQgbGVuID0gMCwgc2l6ZSA9IDIwNDg7CisJc3NpemVfdCByZXR2YWwgPSAwOworCWNoYXIgKmJ1ZjsKKworCWJ1ZiA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1ZiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCVBSX0VFUCgiQ2hhaW4wIEFudC4gQ29udHJvbCIsIHBNb2RhbC0+YW50Q3RybENoYWluWzBdKTsKKwlQUl9FRVAoIkFudC4gQ29tbW9uIENvbnRyb2wiLCBwTW9kYWwtPmFudEN0cmxDb21tb24pOworCVBSX0VFUCgiQ2hhaW4wIEFudC4gR2FpbiIsIHBNb2RhbC0+YW50ZW5uYUdhaW5DaFswXSk7CisJUFJfRUVQKCJTd2l0Y2ggU2V0dGxlIiwgcE1vZGFsLT5zd2l0Y2hTZXR0bGluZyk7CisJUFJfRUVQKCJDaGFpbjAgVHhSeEF0dGVuIiwgcE1vZGFsLT50eFJ4QXR0ZW5DaFswXSk7CisJUFJfRUVQKCJDaGFpbjAgUnhUeE1hcmdpbiIsIHBNb2RhbC0+cnhUeE1hcmdpbkNoWzBdKTsKKwlQUl9FRVAoIkFEQyBEZXNpcmVkIHNpemUiLCBwTW9kYWwtPmFkY0Rlc2lyZWRTaXplKTsKKwlQUl9FRVAoIlBHQSBEZXNpcmVkIHNpemUiLCBwTW9kYWwtPnBnYURlc2lyZWRTaXplKTsKKwlQUl9FRVAoIkNoYWluMCB4bG5hIEdhaW4iLCBwTW9kYWwtPnhsbmFHYWluQ2hbMF0pOworCVBSX0VFUCgidHhFbmRUb1hwYU9mZiIsIHBNb2RhbC0+dHhFbmRUb1hwYU9mZik7CisJUFJfRUVQKCJ0eEVuZFRvUnhPbiIsIHBNb2RhbC0+dHhFbmRUb1J4T24pOworCVBSX0VFUCgidHhGcmFtZVRvWHBhT24iLCBwTW9kYWwtPnR4RnJhbWVUb1hwYU9uKTsKKwlQUl9FRVAoIkNDQSBUaHJlc2hvbGQpIiwgcE1vZGFsLT50aHJlc2g2Mik7CisJUFJfRUVQKCJDaGFpbjAgTkYgVGhyZXNob2xkIiwgcE1vZGFsLT5ub2lzZUZsb29yVGhyZXNoQ2hbMF0pOworCVBSX0VFUCgieHBkR2FpbiIsIHBNb2RhbC0+eHBkR2Fpbik7CisJUFJfRUVQKCJFeHRlcm5hbCBQRCIsIHBNb2RhbC0+eHBkKTsKKwlQUl9FRVAoIkNoYWluMCBJIENvZWZmaWNpZW50IiwgcE1vZGFsLT5pcUNhbElDaFswXSk7CisJUFJfRUVQKCJDaGFpbjAgUSBDb2VmZmljaWVudCIsIHBNb2RhbC0+aXFDYWxRQ2hbMF0pOworCVBSX0VFUCgicGRHYWluT3ZlcmxhcCIsIHBNb2RhbC0+cGRHYWluT3ZlcmxhcCk7CisJUFJfRUVQKCJPL0QgQmlhcyBWZXJzaW9uIiwgcE1vZGFsLT52ZXJzaW9uKTsKKwlQUl9FRVAoIkNDSyBPdXRwdXRCaWFzIiwgcE1vZGFsLT5vYl8wKTsKKwlQUl9FRVAoIkJQU0sgT3V0cHV0QmlhcyIsIHBNb2RhbC0+b2JfMSk7CisJUFJfRUVQKCJRUFNLIE91dHB1dEJpYXMiLCBwTW9kYWwtPm9iXzIpOworCVBSX0VFUCgiMTZRQU0gT3V0cHV0QmlhcyIsIHBNb2RhbC0+b2JfMyk7CisJUFJfRUVQKCI2NFFBTSBPdXRwdXRCaWFzIiwgcE1vZGFsLT5vYl80KTsKKwlQUl9FRVAoIkNDSyBEcml2ZXIxX0JpYXMiLCBwTW9kYWwtPmRiMV8wKTsKKwlQUl9FRVAoIkJQU0sgRHJpdmVyMV9CaWFzIiwgcE1vZGFsLT5kYjFfMSk7CisJUFJfRUVQKCJRUFNLIERyaXZlcjFfQmlhcyIsIHBNb2RhbC0+ZGIxXzIpOworCVBSX0VFUCgiMTZRQU0gRHJpdmVyMV9CaWFzIiwgcE1vZGFsLT5kYjFfMyk7CisJUFJfRUVQKCI2NFFBTSBEcml2ZXIxX0JpYXMiLCBwTW9kYWwtPmRiMV80KTsKKwlQUl9FRVAoIkNDSyBEcml2ZXIyX0JpYXMiLCBwTW9kYWwtPmRiMl8wKTsKKwlQUl9FRVAoIkJQU0sgRHJpdmVyMl9CaWFzIiwgcE1vZGFsLT5kYjJfMSk7CisJUFJfRUVQKCJRUFNLIERyaXZlcjJfQmlhcyIsIHBNb2RhbC0+ZGIyXzIpOworCVBSX0VFUCgiMTZRQU0gRHJpdmVyMl9CaWFzIiwgcE1vZGFsLT5kYjJfMyk7CisJUFJfRUVQKCI2NFFBTSBEcml2ZXIyX0JpYXMiLCBwTW9kYWwtPmRiMl80KTsKKwlQUl9FRVAoInhQQSBCaWFzIExldmVsIiwgcE1vZGFsLT54cGFCaWFzTHZsKTsKKwlQUl9FRVAoInR4RnJhbWVUb0RhdGFTdGFydCIsIHBNb2RhbC0+dHhGcmFtZVRvRGF0YVN0YXJ0KTsKKwlQUl9FRVAoInR4RnJhbWVUb1BhT24iLCBwTW9kYWwtPnR4RnJhbWVUb1BhT24pOworCVBSX0VFUCgiSFQ0MCBQb3dlciBJbmMuIiwgcE1vZGFsLT5odDQwUG93ZXJJbmNGb3JQZGFkYyk7CisJUFJfRUVQKCJDaGFpbjAgYnN3QXR0ZW4iLCBwTW9kYWwtPmJzd0F0dGVuWzBdKTsKKwlQUl9FRVAoIkNoYWluMCBic3dNYXJnaW4iLCBwTW9kYWwtPmJzd01hcmdpblswXSk7CisJUFJfRUVQKCJIVDQwIFN3aXRjaCBTZXR0bGUiLCBwTW9kYWwtPnN3U2V0dGxlSHQ0MCk7CisJUFJfRUVQKCJDaGFpbjAgeGF0dGVuMkRiIiwgcE1vZGFsLT54YXR0ZW4yRGJbMF0pOworCVBSX0VFUCgiQ2hhaW4wIHhhdHRlbjJNYXJnaW4iLCBwTW9kYWwtPnhhdHRlbjJNYXJnaW5bMF0pOworCVBSX0VFUCgiQW50LiBEaXZlcnNpdHkgY3RsMSIsIHBNb2RhbC0+YW50ZGl2X2N0bDEpOworCVBSX0VFUCgiQW50LiBEaXZlcnNpdHkgY3RsMiIsIHBNb2RhbC0+YW50ZGl2X2N0bDIpOworCVBSX0VFUCgiVFggRGl2ZXJzaXR5IiwgcE1vZGFsLT50eF9kaXZlcnNpdHkpOworCisJaWYgKGxlbiA+IHNpemUpCisJCWxlbiA9IHNpemU7CisKKwlyZXR2YWwgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKKwlrZnJlZShidWYpOworCisJcmV0dXJuIHJldHZhbDsKKworI3VuZGVmIFBSX0VFUAorfQorCitzdGF0aWMgc3NpemVfdCByZWFkX2RlZl9tb2RhbF9lZXByb20oc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJICAgICBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKyNkZWZpbmUgUFJfRUVQKF9zLCBfdmFsKQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmIChwQmFzZS0+b3BDYXBGbGFncyAmIEFSNTQxNl9PUEZMQUdTXzExRykgewkJXAorCQkJcE1vZGFsID0gJnByaXYtPmFoLT5lZXByb20uZGVmLm1vZGFsSGVhZGVyWzFdOwlcCisJCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLCAiJTIwcyA6ICU4ZCU3cyIsIFwKKwkJCQkJX3MsIChfdmFsKSwgInwiKTsJCVwKKwkJfQkJCQkJCQlcCisJCWlmIChwQmFzZS0+b3BDYXBGbGFncyAmIEFSNTQxNl9PUEZMQUdTXzExQSkgewkJXAorCQkJcE1vZGFsID0gJnByaXYtPmFoLT5lZXByb20uZGVmLm1vZGFsSGVhZGVyWzBdOwlcCisJCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLCAiJTlkXG4iLCBcCisJCQkJCShfdmFsKSk7CQkJXAorCQl9CQkJCQkJCVwKKwl9IHdoaWxlICgwKQorCisJc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBiYXNlX2VlcF9oZWFkZXIgKnBCYXNlID0gJnByaXYtPmFoLT5lZXByb20uZGVmLmJhc2VFZXBIZWFkZXI7CisJc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbCA9IE5VTEw7CisJdW5zaWduZWQgaW50IGxlbiA9IDAsIHNpemUgPSAzNTAwOworCXNzaXplX3QgcmV0dmFsID0gMDsKKwljaGFyICpidWY7CisKKwlidWYgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmIChidWYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUzMXMgJTE1c1xuIiwgIjJHIiwgIjVHIik7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCSIlMzJzICUxNnNcbiIsICI9PT09IiwgIj09PT1cbiIpOworCisJUFJfRUVQKCJDaGFpbjAgQW50LiBDb250cm9sIiwgcE1vZGFsLT5hbnRDdHJsQ2hhaW5bMF0pOworCVBSX0VFUCgiQ2hhaW4xIEFudC4gQ29udHJvbCIsIHBNb2RhbC0+YW50Q3RybENoYWluWzFdKTsKKwlQUl9FRVAoIkNoYWluMiBBbnQuIENvbnRyb2wiLCBwTW9kYWwtPmFudEN0cmxDaGFpblsyXSk7CisJUFJfRUVQKCJBbnQuIENvbW1vbiBDb250cm9sIiwgcE1vZGFsLT5hbnRDdHJsQ29tbW9uKTsKKwlQUl9FRVAoIkNoYWluMCBBbnQuIEdhaW4iLCBwTW9kYWwtPmFudGVubmFHYWluQ2hbMF0pOworCVBSX0VFUCgiQ2hhaW4xIEFudC4gR2FpbiIsIHBNb2RhbC0+YW50ZW5uYUdhaW5DaFsxXSk7CisJUFJfRUVQKCJDaGFpbjIgQW50LiBHYWluIiwgcE1vZGFsLT5hbnRlbm5hR2FpbkNoWzJdKTsKKwlQUl9FRVAoIlN3aXRjaCBTZXR0bGUiLCBwTW9kYWwtPnN3aXRjaFNldHRsaW5nKTsKKwlQUl9FRVAoIkNoYWluMCBUeFJ4QXR0ZW4iLCBwTW9kYWwtPnR4UnhBdHRlbkNoWzBdKTsKKwlQUl9FRVAoIkNoYWluMSBUeFJ4QXR0ZW4iLCBwTW9kYWwtPnR4UnhBdHRlbkNoWzFdKTsKKwlQUl9FRVAoIkNoYWluMiBUeFJ4QXR0ZW4iLCBwTW9kYWwtPnR4UnhBdHRlbkNoWzJdKTsKKwlQUl9FRVAoIkNoYWluMCBSeFR4TWFyZ2luIiwgcE1vZGFsLT5yeFR4TWFyZ2luQ2hbMF0pOworCVBSX0VFUCgiQ2hhaW4xIFJ4VHhNYXJnaW4iLCBwTW9kYWwtPnJ4VHhNYXJnaW5DaFsxXSk7CisJUFJfRUVQKCJDaGFpbjIgUnhUeE1hcmdpbiIsIHBNb2RhbC0+cnhUeE1hcmdpbkNoWzJdKTsKKwlQUl9FRVAoIkFEQyBEZXNpcmVkIHNpemUiLCBwTW9kYWwtPmFkY0Rlc2lyZWRTaXplKTsKKwlQUl9FRVAoIlBHQSBEZXNpcmVkIHNpemUiLCBwTW9kYWwtPnBnYURlc2lyZWRTaXplKTsKKwlQUl9FRVAoIkNoYWluMCB4bG5hIEdhaW4iLCBwTW9kYWwtPnhsbmFHYWluQ2hbMF0pOworCVBSX0VFUCgiQ2hhaW4xIHhsbmEgR2FpbiIsIHBNb2RhbC0+eGxuYUdhaW5DaFsxXSk7CisJUFJfRUVQKCJDaGFpbjIgeGxuYSBHYWluIiwgcE1vZGFsLT54bG5hR2FpbkNoWzJdKTsKKwlQUl9FRVAoInR4RW5kVG9YcGFPZmYiLCBwTW9kYWwtPnR4RW5kVG9YcGFPZmYpOworCVBSX0VFUCgidHhFbmRUb1J4T24iLCBwTW9kYWwtPnR4RW5kVG9SeE9uKTsKKwlQUl9FRVAoInR4RnJhbWVUb1hwYU9uIiwgcE1vZGFsLT50eEZyYW1lVG9YcGFPbik7CisJUFJfRUVQKCJDQ0EgVGhyZXNob2xkKSIsIHBNb2RhbC0+dGhyZXNoNjIpOworCVBSX0VFUCgiQ2hhaW4wIE5GIFRocmVzaG9sZCIsIHBNb2RhbC0+bm9pc2VGbG9vclRocmVzaENoWzBdKTsKKwlQUl9FRVAoIkNoYWluMSBORiBUaHJlc2hvbGQiLCBwTW9kYWwtPm5vaXNlRmxvb3JUaHJlc2hDaFsxXSk7CisJUFJfRUVQKCJDaGFpbjIgTkYgVGhyZXNob2xkIiwgcE1vZGFsLT5ub2lzZUZsb29yVGhyZXNoQ2hbMl0pOworCVBSX0VFUCgieHBkR2FpbiIsIHBNb2RhbC0+eHBkR2Fpbik7CisJUFJfRUVQKCJFeHRlcm5hbCBQRCIsIHBNb2RhbC0+eHBkKTsKKwlQUl9FRVAoIkNoYWluMCBJIENvZWZmaWNpZW50IiwgcE1vZGFsLT5pcUNhbElDaFswXSk7CisJUFJfRUVQKCJDaGFpbjEgSSBDb2VmZmljaWVudCIsIHBNb2RhbC0+aXFDYWxJQ2hbMV0pOworCVBSX0VFUCgiQ2hhaW4yIEkgQ29lZmZpY2llbnQiLCBwTW9kYWwtPmlxQ2FsSUNoWzJdKTsKKwlQUl9FRVAoIkNoYWluMCBRIENvZWZmaWNpZW50IiwgcE1vZGFsLT5pcUNhbFFDaFswXSk7CisJUFJfRUVQKCJDaGFpbjEgUSBDb2VmZmljaWVudCIsIHBNb2RhbC0+aXFDYWxRQ2hbMV0pOworCVBSX0VFUCgiQ2hhaW4yIFEgQ29lZmZpY2llbnQiLCBwTW9kYWwtPmlxQ2FsUUNoWzJdKTsKKwlQUl9FRVAoInBkR2Fpbk92ZXJsYXAiLCBwTW9kYWwtPnBkR2Fpbk92ZXJsYXApOworCVBSX0VFUCgiQ2hhaW4wIE91dHB1dEJpYXMiLCBwTW9kYWwtPm9iKTsKKwlQUl9FRVAoIkNoYWluMCBEcml2ZXJCaWFzIiwgcE1vZGFsLT5kYik7CisJUFJfRUVQKCJ4UEEgQmlhcyBMZXZlbCIsIHBNb2RhbC0+eHBhQmlhc0x2bCk7CisJUFJfRUVQKCIyY2hhaW4gcHdyIGRlY3JlYXNlIiwgcE1vZGFsLT5wd3JEZWNyZWFzZUZvcjJDaGFpbik7CisJUFJfRUVQKCIzY2hhaW4gcHdyIGRlY3JlYXNlIiwgcE1vZGFsLT5wd3JEZWNyZWFzZUZvcjNDaGFpbik7CisJUFJfRUVQKCJ0eEZyYW1lVG9EYXRhU3RhcnQiLCBwTW9kYWwtPnR4RnJhbWVUb0RhdGFTdGFydCk7CisJUFJfRUVQKCJ0eEZyYW1lVG9QYU9uIiwgcE1vZGFsLT50eEZyYW1lVG9QYU9uKTsKKwlQUl9FRVAoIkhUNDAgUG93ZXIgSW5jLiIsIHBNb2RhbC0+aHQ0MFBvd2VySW5jRm9yUGRhZGMpOworCVBSX0VFUCgiQ2hhaW4wIGJzd0F0dGVuIiwgcE1vZGFsLT5ic3dBdHRlblswXSk7CisJUFJfRUVQKCJDaGFpbjEgYnN3QXR0ZW4iLCBwTW9kYWwtPmJzd0F0dGVuWzFdKTsKKwlQUl9FRVAoIkNoYWluMiBic3dBdHRlbiIsIHBNb2RhbC0+YnN3QXR0ZW5bMl0pOworCVBSX0VFUCgiQ2hhaW4wIGJzd01hcmdpbiIsIHBNb2RhbC0+YnN3TWFyZ2luWzBdKTsKKwlQUl9FRVAoIkNoYWluMSBic3dNYXJnaW4iLCBwTW9kYWwtPmJzd01hcmdpblsxXSk7CisJUFJfRUVQKCJDaGFpbjIgYnN3TWFyZ2luIiwgcE1vZGFsLT5ic3dNYXJnaW5bMl0pOworCVBSX0VFUCgiSFQ0MCBTd2l0Y2ggU2V0dGxlIiwgcE1vZGFsLT5zd1NldHRsZUh0NDApOworCVBSX0VFUCgiQ2hhaW4wIHhhdHRlbjJEYiIsIHBNb2RhbC0+eGF0dGVuMkRiWzBdKTsKKwlQUl9FRVAoIkNoYWluMSB4YXR0ZW4yRGIiLCBwTW9kYWwtPnhhdHRlbjJEYlsxXSk7CisJUFJfRUVQKCJDaGFpbjIgeGF0dGVuMkRiIiwgcE1vZGFsLT54YXR0ZW4yRGJbMl0pOworCVBSX0VFUCgiQ2hhaW4wIHhhdHRlbjJNYXJnaW4iLCBwTW9kYWwtPnhhdHRlbjJNYXJnaW5bMF0pOworCVBSX0VFUCgiQ2hhaW4xIHhhdHRlbjJNYXJnaW4iLCBwTW9kYWwtPnhhdHRlbjJNYXJnaW5bMV0pOworCVBSX0VFUCgiQ2hhaW4yIHhhdHRlbjJNYXJnaW4iLCBwTW9kYWwtPnhhdHRlbjJNYXJnaW5bMl0pOworCVBSX0VFUCgiQ2hhaW4xIE91dHB1dEJpYXMiLCBwTW9kYWwtPm9iX2NoMSk7CisJUFJfRUVQKCJDaGFpbjEgRHJpdmVyQmlhcyIsIHBNb2RhbC0+ZGJfY2gxKTsKKwlQUl9FRVAoIkxOQSBDb250cm9sIiwgcE1vZGFsLT5sbmFfY3RsKTsKKwlQUl9FRVAoIlhQQSBCaWFzIEZyZXEwIiwgcE1vZGFsLT54cGFCaWFzTHZsRnJlcVswXSk7CisJUFJfRUVQKCJYUEEgQmlhcyBGcmVxMSIsIHBNb2RhbC0+eHBhQmlhc0x2bEZyZXFbMV0pOworCVBSX0VFUCgiWFBBIEJpYXMgRnJlcTIiLCBwTW9kYWwtPnhwYUJpYXNMdmxGcmVxWzJdKTsKKworCWlmIChsZW4gPiBzaXplKQorCQlsZW4gPSBzaXplOworCisJcmV0dmFsID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7CisJa2ZyZWUoYnVmKTsKKworCXJldHVybiByZXR2YWw7CisKKyN1bmRlZiBQUl9FRVAKK30KKworc3RhdGljIHNzaXplX3QgcmVhZF85Mjg3X21vZGFsX2VlcHJvbShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkgICAgICBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisjZGVmaW5lIFBSX0VFUChfcywgX3ZhbCkJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLCAiJTIwcyA6ICUxMGRcbiIsCVwKKwkJCQlfcywgKF92YWwpKTsJCQkJXAorCX0gd2hpbGUgKDApCisKKwlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG1vZGFsX2VlcF9hcjkyODdfaGVhZGVyICpwTW9kYWwgPSAmcHJpdi0+YWgtPmVlcHJvbS5tYXA5Mjg3Lm1vZGFsSGVhZGVyOworCXVuc2lnbmVkIGludCBsZW4gPSAwLCBzaXplID0gMzAwMDsKKwlzc2l6ZV90IHJldHZhbCA9IDA7CisJY2hhciAqYnVmOworCisJYnVmID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVmID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJUFJfRUVQKCJDaGFpbjAgQW50LiBDb250cm9sIiwgcE1vZGFsLT5hbnRDdHJsQ2hhaW5bMF0pOworCVBSX0VFUCgiQ2hhaW4xIEFudC4gQ29udHJvbCIsIHBNb2RhbC0+YW50Q3RybENoYWluWzFdKTsKKwlQUl9FRVAoIkFudC4gQ29tbW9uIENvbnRyb2wiLCBwTW9kYWwtPmFudEN0cmxDb21tb24pOworCVBSX0VFUCgiQ2hhaW4wIEFudC4gR2FpbiIsIHBNb2RhbC0+YW50ZW5uYUdhaW5DaFswXSk7CisJUFJfRUVQKCJDaGFpbjEgQW50LiBHYWluIiwgcE1vZGFsLT5hbnRlbm5hR2FpbkNoWzFdKTsKKwlQUl9FRVAoIlN3aXRjaCBTZXR0bGUiLCBwTW9kYWwtPnN3aXRjaFNldHRsaW5nKTsKKwlQUl9FRVAoIkNoYWluMCBUeFJ4QXR0ZW4iLCBwTW9kYWwtPnR4UnhBdHRlbkNoWzBdKTsKKwlQUl9FRVAoIkNoYWluMSBUeFJ4QXR0ZW4iLCBwTW9kYWwtPnR4UnhBdHRlbkNoWzFdKTsKKwlQUl9FRVAoIkNoYWluMCBSeFR4TWFyZ2luIiwgcE1vZGFsLT5yeFR4TWFyZ2luQ2hbMF0pOworCVBSX0VFUCgiQ2hhaW4xIFJ4VHhNYXJnaW4iLCBwTW9kYWwtPnJ4VHhNYXJnaW5DaFsxXSk7CisJUFJfRUVQKCJBREMgRGVzaXJlZCBzaXplIiwgcE1vZGFsLT5hZGNEZXNpcmVkU2l6ZSk7CisJUFJfRUVQKCJ0eEVuZFRvWHBhT2ZmIiwgcE1vZGFsLT50eEVuZFRvWHBhT2ZmKTsKKwlQUl9FRVAoInR4RW5kVG9SeE9uIiwgcE1vZGFsLT50eEVuZFRvUnhPbik7CisJUFJfRUVQKCJ0eEZyYW1lVG9YcGFPbiIsIHBNb2RhbC0+dHhGcmFtZVRvWHBhT24pOworCVBSX0VFUCgiQ0NBIFRocmVzaG9sZCkiLCBwTW9kYWwtPnRocmVzaDYyKTsKKwlQUl9FRVAoIkNoYWluMCBORiBUaHJlc2hvbGQiLCBwTW9kYWwtPm5vaXNlRmxvb3JUaHJlc2hDaFswXSk7CisJUFJfRUVQKCJDaGFpbjEgTkYgVGhyZXNob2xkIiwgcE1vZGFsLT5ub2lzZUZsb29yVGhyZXNoQ2hbMV0pOworCVBSX0VFUCgieHBkR2FpbiIsIHBNb2RhbC0+eHBkR2Fpbik7CisJUFJfRUVQKCJFeHRlcm5hbCBQRCIsIHBNb2RhbC0+eHBkKTsKKwlQUl9FRVAoIkNoYWluMCBJIENvZWZmaWNpZW50IiwgcE1vZGFsLT5pcUNhbElDaFswXSk7CisJUFJfRUVQKCJDaGFpbjEgSSBDb2VmZmljaWVudCIsIHBNb2RhbC0+aXFDYWxJQ2hbMV0pOworCVBSX0VFUCgiQ2hhaW4wIFEgQ29lZmZpY2llbnQiLCBwTW9kYWwtPmlxQ2FsUUNoWzBdKTsKKwlQUl9FRVAoIkNoYWluMSBRIENvZWZmaWNpZW50IiwgcE1vZGFsLT5pcUNhbFFDaFsxXSk7CisJUFJfRUVQKCJwZEdhaW5PdmVybGFwIiwgcE1vZGFsLT5wZEdhaW5PdmVybGFwKTsKKwlQUl9FRVAoInhQQSBCaWFzIExldmVsIiwgcE1vZGFsLT54cGFCaWFzTHZsKTsKKwlQUl9FRVAoInR4RnJhbWVUb0RhdGFTdGFydCIsIHBNb2RhbC0+dHhGcmFtZVRvRGF0YVN0YXJ0KTsKKwlQUl9FRVAoInR4RnJhbWVUb1BhT24iLCBwTW9kYWwtPnR4RnJhbWVUb1BhT24pOworCVBSX0VFUCgiSFQ0MCBQb3dlciBJbmMuIiwgcE1vZGFsLT5odDQwUG93ZXJJbmNGb3JQZGFkYyk7CisJUFJfRUVQKCJDaGFpbjAgYnN3QXR0ZW4iLCBwTW9kYWwtPmJzd0F0dGVuWzBdKTsKKwlQUl9FRVAoIkNoYWluMSBic3dBdHRlbiIsIHBNb2RhbC0+YnN3QXR0ZW5bMV0pOworCVBSX0VFUCgiQ2hhaW4wIGJzd01hcmdpbiIsIHBNb2RhbC0+YnN3TWFyZ2luWzBdKTsKKwlQUl9FRVAoIkNoYWluMSBic3dNYXJnaW4iLCBwTW9kYWwtPmJzd01hcmdpblsxXSk7CisJUFJfRUVQKCJIVDQwIFN3aXRjaCBTZXR0bGUiLCBwTW9kYWwtPnN3U2V0dGxlSHQ0MCk7CisJUFJfRUVQKCJBUjkyeDcgVmVyc2lvbiIsIHBNb2RhbC0+dmVyc2lvbik7CisJUFJfRUVQKCJEcml2ZXJCaWFzMSIsIHBNb2RhbC0+ZGIxKTsKKwlQUl9FRVAoIkRyaXZlckJpYXMyIiwgcE1vZGFsLT5kYjEpOworCVBSX0VFUCgiQ0NLIE91dHB1dEJpYXMiLCBwTW9kYWwtPm9iX2Njayk7CisJUFJfRUVQKCJQU0sgT3V0cHV0QmlhcyIsIHBNb2RhbC0+b2JfcHNrKTsKKwlQUl9FRVAoIlFBTSBPdXRwdXRCaWFzIiwgcE1vZGFsLT5vYl9xYW0pOworCVBSX0VFUCgiUEFMX09GRiBPdXRwdXRCaWFzIiwgcE1vZGFsLT5vYl9wYWxfb2ZmKTsKKworCWlmIChsZW4gPiBzaXplKQorCQlsZW4gPSBzaXplOworCisJcmV0dmFsID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7CisJa2ZyZWUoYnVmKTsKKworCXJldHVybiByZXR2YWw7CisKKyN1bmRlZiBQUl9FRVAKK30KKworc3RhdGljIHNzaXplX3QgcmVhZF9maWxlX21vZGFsX2VlcHJvbShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCSAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWlmIChBUl9TUkVWXzkyNzEocHJpdi0+YWgpKQorCQlyZXR1cm4gcmVhZF80a19tb2RhbF9lZXByb20oZmlsZSwgdXNlcl9idWYsIGNvdW50LCBwcG9zKTsKKwllbHNlIGlmIChwcml2LT5haC0+aHdfdmVyc2lvbi51c2JkZXYgPT0gQVI5MjgwX1VTQikKKwkJcmV0dXJuIHJlYWRfZGVmX21vZGFsX2VlcHJvbShmaWxlLCB1c2VyX2J1ZiwgY291bnQsIHBwb3MpOworCWVsc2UgaWYgKHByaXYtPmFoLT5od192ZXJzaW9uLnVzYmRldiA9PSBBUjkyODdfVVNCKQorCQlyZXR1cm4gcmVhZF85Mjg3X21vZGFsX2VlcHJvbShmaWxlLCB1c2VyX2J1ZiwgY291bnQsIHBwb3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfbW9kYWxfZWVwcm9tID0geworCS5yZWFkID0gcmVhZF9maWxlX21vZGFsX2VlcHJvbSwKKwkub3BlbiA9IGF0aDlrX2RlYnVnZnNfb3BlbiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubGxzZWVrID0gZGVmYXVsdF9sbHNlZWssCit9OworCitpbnQgYXRoOWtfaHRjX2luaXRfZGVidWcoc3RydWN0IGF0aF9odyAqYWgpCit7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CisJc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2ID0gKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqKSBjb21tb24tPnByaXY7CisKKwlwcml2LT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSA9IGRlYnVnZnNfY3JlYXRlX2RpcihLQlVJTERfTU9ETkFNRSwKKwkJCQkJICAgICBwcml2LT5ody0+d2lwaHktPmRlYnVnZnNkaXIpOworCWlmICghcHJpdi0+ZGVidWcuZGVidWdmc19waHkpCisJCXJldHVybiAtRU5PTUVNOworCisJZGVidWdmc19jcmVhdGVfZmlsZSgidGd0X2ludF9zdGF0cyIsIFNfSVJVU1IsIHByaXYtPmRlYnVnLmRlYnVnZnNfcGh5LAorCQkJICAgIHByaXYsICZmb3BzX3RndF9pbnRfc3RhdHMpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInRndF90eF9zdGF0cyIsIFNfSVJVU1IsIHByaXYtPmRlYnVnLmRlYnVnZnNfcGh5LAorCQkJICAgIHByaXYsICZmb3BzX3RndF90eF9zdGF0cyk7CisJZGVidWdmc19jcmVhdGVfZmlsZSgidGd0X3J4X3N0YXRzIiwgU19JUlVTUiwgcHJpdi0+ZGVidWcuZGVidWdmc19waHksCisJCQkgICAgcHJpdiwgJmZvcHNfdGd0X3J4X3N0YXRzKTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ4bWl0IiwgU19JUlVTUiwgcHJpdi0+ZGVidWcuZGVidWdmc19waHksCisJCQkgICAgcHJpdiwgJmZvcHNfeG1pdCk7CisJZGVidWdmc19jcmVhdGVfZmlsZSgicmVjdiIsIFNfSVJVU1IsIHByaXYtPmRlYnVnLmRlYnVnZnNfcGh5LAorCQkJICAgIHByaXYsICZmb3BzX3JlY3YpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInNsb3QiLCBTX0lSVVNSLCBwcml2LT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwKKwkJCSAgICBwcml2LCAmZm9wc19zbG90KTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJxdWV1ZSIsIFNfSVJVU1IsIHByaXYtPmRlYnVnLmRlYnVnZnNfcGh5LAorCQkJICAgIHByaXYsICZmb3BzX3F1ZXVlKTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJkZWJ1ZyIsIFNfSVJVU1IgfCBTX0lXVVNSLCBwcml2LT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwKKwkJCSAgICBwcml2LCAmZm9wc19kZWJ1Zyk7CisJZGVidWdmc19jcmVhdGVfZmlsZSgiYmFzZV9lZXByb20iLCBTX0lSVVNSLCBwcml2LT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwKKwkJCSAgICBwcml2LCAmZm9wc19iYXNlX2VlcHJvbSk7CisJZGVidWdmc19jcmVhdGVfZmlsZSgibW9kYWxfZWVwcm9tIiwgU19JUlVTUiwgcHJpdi0+ZGVidWcuZGVidWdmc19waHksCisJCQkgICAgcHJpdiwgJmZvcHNfbW9kYWxfZWVwcm9tKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZ3Bpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZ3Bpby5jCmluZGV4IDdlNjMwYTguLmFmNTdmZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2dwaW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9ncGlvLmMKQEAgLTY1LDE3ICs2NSwxOSBAQAogCXUzMiB0aW1lcl9wZXJpb2Q7CiAJYm9vbCBpc19idHNjYW47CiAJaW50IHJldDsKLQl1OCBjbWRfcnNwLCBhZ2dyOwogCiAJYXRoX2RldGVjdF9idF9wcmlvcml0eShwcml2KTsKIAogCWlzX2J0c2NhbiA9ICEhKHByaXYtPm9wX2ZsYWdzICYgT1BfQlRfU0NBTik7CiAKLQlhZ2dyID0gcHJpdi0+b3BfZmxhZ3MgJiBPUF9CVF9QUklPUklUWV9ERVRFQ1RFRDsKKwlyZXQgPSBhdGg5a19odGNfdXBkYXRlX2NhcF90YXJnZXQocHJpdiwKKwkJCQkgICEhKHByaXYtPm9wX2ZsYWdzICYgT1BfQlRfUFJJT1JJVFlfREVURUNURUQpKTsKKwlpZiAocmV0KSB7CisJCWF0aF9lcnIoY29tbW9uLCAiVW5hYmxlIHRvIHNldCBCVENPRVggcGFyYW1ldGVyc1xuIik7CisJCXJldHVybjsKKwl9CiAKLQlXTUlfQ01EX0JVRihXTUlfQUdHUl9MSU1JVF9DTUQsICZhZ2dyKTsKLQotCWF0aDlrX2Ntbl9idGNvZXhfYnRfc3RvbXAoY29tbW9uLCBpc19idHNjYW4gPyBBVEhfQlRDT0VYX1NUT01QX0FMTCA6CisJYXRoOWtfaHdfYnRjb2V4X2J0X3N0b21wKHByaXYtPmFoLCBpc19idHNjYW4gPyBBVEhfQlRDT0VYX1NUT01QX0FMTCA6CiAJCQlidGNvZXgtPmJ0X3N0b21wX3R5cGUpOwogCiAJdGltZXJfcGVyaW9kID0gaXNfYnRzY2FuID8gYnRjb2V4LT5idHNjYW5fbm9fc3RvbXAgOgpAQCAtMTAzLDkgKzEwNSw5IEBACiAJCSJ0aW1lIHNsaWNlIHdvcmsgZm9yIGJ0IGFuZCB3bGFuXG4iKTsKIAogCWlmIChidGNvZXgtPmJ0X3N0b21wX3R5cGUgPT0gQVRIX0JUQ09FWF9TVE9NUF9MT1cgfHwgaXNfYnRzY2FuKQotCQlhdGg5a19jbW5fYnRjb2V4X2J0X3N0b21wKGNvbW1vbiwgQVRIX0JUQ09FWF9TVE9NUF9OT05FKTsKKwkJYXRoOWtfaHdfYnRjb2V4X2J0X3N0b21wKGFoLCBBVEhfQlRDT0VYX1NUT01QX05PTkUpOwogCWVsc2UgaWYgKGJ0Y29leC0+YnRfc3RvbXBfdHlwZSA9PSBBVEhfQlRDT0VYX1NUT01QX0FMTCkKLQkJYXRoOWtfY21uX2J0Y29leF9idF9zdG9tcChjb21tb24sIEFUSF9CVENPRVhfU1RPTVBfTE9XKTsKKwkJYXRoOWtfaHdfYnRjb2V4X2J0X3N0b21wKGFoLCBBVEhfQlRDT0VYX1NUT01QX0xPVyk7CiB9CiAKIHZvaWQgYXRoX2h0Y19pbml0X2J0Y29leF93b3JrKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdikKQEAgLTE1MiwxNDAgKzE1NCw0MSBAQAogLyogTEVEICovCiAvKioqKioqKi8KIAotc3RhdGljIHZvaWQgYXRoOWtfbGVkX2JsaW5rX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorI2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTCit2b2lkIGF0aDlrX2xlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF0aDlrX2h0Y19wcml2LAotCQkJCQkJICAgYXRoOWtfbGVkX2JsaW5rX3dvcmsud29yayk7CisJc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssCisJCQkJCQkgICBzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYsCisJCQkJCQkgICBsZWRfd29yayk7CiAKLQlpZiAoIShwcml2LT5vcF9mbGFncyAmIE9QX0xFRF9BU1NPQ0lBVEVEKSkKLQkJcmV0dXJuOwotCi0JaWYgKChwcml2LT5sZWRfb25fZHVyYXRpb24gPT0gQVRIX0xFRF9PTl9EVVJBVElPTl9JRExFKSB8fAotCSAgICAocHJpdi0+bGVkX29mZl9kdXJhdGlvbiA9PSBBVEhfTEVEX09GRl9EVVJBVElPTl9JRExFKSkKLQkJYXRoOWtfaHdfc2V0X2dwaW8ocHJpdi0+YWgsIHByaXYtPmFoLT5sZWRfcGluLCAwKTsKLQllbHNlCi0JCWF0aDlrX2h3X3NldF9ncGlvKHByaXYtPmFoLCBwcml2LT5haC0+bGVkX3BpbiwKLQkJCQkgIChwcml2LT5vcF9mbGFncyAmIE9QX0xFRF9PTikgPyAxIDogMCk7Ci0KLQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHByaXYtPmh3LAotCQkJCSAgICAgJnByaXYtPmF0aDlrX2xlZF9ibGlua193b3JrLAotCQkJCSAgICAgKHByaXYtPm9wX2ZsYWdzICYgT1BfTEVEX09OKSA/Ci0JCQkJICAgICBtc2Vjc190b19qaWZmaWVzKHByaXYtPmxlZF9vZmZfZHVyYXRpb24pIDoKLQkJCQkgICAgIG1zZWNzX3RvX2ppZmZpZXMocHJpdi0+bGVkX29uX2R1cmF0aW9uKSk7Ci0KLQlwcml2LT5sZWRfb25fZHVyYXRpb24gPSBwcml2LT5sZWRfb25fY250ID8KLQkJbWF4KChBVEhfTEVEX09OX0RVUkFUSU9OX0lETEUgLSBwcml2LT5sZWRfb25fY250KSwgMjUpIDoKLQkJQVRIX0xFRF9PTl9EVVJBVElPTl9JRExFOwotCXByaXYtPmxlZF9vZmZfZHVyYXRpb24gPSBwcml2LT5sZWRfb2ZmX2NudCA/Ci0JCW1heCgoQVRIX0xFRF9PRkZfRFVSQVRJT05fSURMRSAtIHByaXYtPmxlZF9vZmZfY250KSwgMTApIDoKLQkJQVRIX0xFRF9PRkZfRFVSQVRJT05fSURMRTsKLQlwcml2LT5sZWRfb25fY250ID0gcHJpdi0+bGVkX29mZl9jbnQgPSAwOwotCi0JaWYgKHByaXYtPm9wX2ZsYWdzICYgT1BfTEVEX09OKQotCQlwcml2LT5vcF9mbGFncyAmPSB+T1BfTEVEX09OOwotCWVsc2UKLQkJcHJpdi0+b3BfZmxhZ3MgfD0gT1BfTEVEX09OOwotfQotCi1zdGF0aWMgdm9pZCBhdGg5a19sZWRfYnJpZ2h0bmVzc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgYXRoX2xlZCAqbGVkID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdGhfbGVkLAotCQkJCQkgICBicmlnaHRuZXNzX3dvcmsud29yayk7Ci0Jc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2ID0gbGVkLT5wcml2OwotCi0Jc3dpdGNoIChsZWQtPmJyaWdodG5lc3MpIHsKLQljYXNlIExFRF9PRkY6Ci0JCWlmIChsZWQtPmxlZF90eXBlID09IEFUSF9MRURfQVNTT0MgfHwKLQkJICAgIGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9SQURJTykgewotCQkJYXRoOWtfaHdfc2V0X2dwaW8ocHJpdi0+YWgsIHByaXYtPmFoLT5sZWRfcGluLAotCQkJCQkgIChsZWQtPmxlZF90eXBlID09IEFUSF9MRURfUkFESU8pKTsKLQkJCXByaXYtPm9wX2ZsYWdzICY9IH5PUF9MRURfQVNTT0NJQVRFRDsKLQkJCWlmIChsZWQtPmxlZF90eXBlID09IEFUSF9MRURfUkFESU8pCi0JCQkJcHJpdi0+b3BfZmxhZ3MgJj0gfk9QX0xFRF9PTjsKLQkJfSBlbHNlIHsKLQkJCXByaXYtPmxlZF9vZmZfY250Kys7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBMRURfRlVMTDoKLQkJaWYgKGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9BU1NPQykgewotCQkJcHJpdi0+b3BfZmxhZ3MgfD0gT1BfTEVEX0FTU09DSUFURUQ7Ci0JCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHByaXYtPmh3LAotCQkJCQkgICAgICZwcml2LT5hdGg5a19sZWRfYmxpbmtfd29yaywgMCk7Ci0JCX0gZWxzZSBpZiAobGVkLT5sZWRfdHlwZSA9PSBBVEhfTEVEX1JBRElPKSB7Ci0JCQlhdGg5a19od19zZXRfZ3Bpbyhwcml2LT5haCwgcHJpdi0+YWgtPmxlZF9waW4sIDApOwotCQkJcHJpdi0+b3BfZmxhZ3MgfD0gT1BfTEVEX09OOwotCQl9IGVsc2UgewotCQkJcHJpdi0+bGVkX29uX2NudCsrOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KKwlhdGg5a19od19zZXRfZ3Bpbyhwcml2LT5haCwgcHJpdi0+YWgtPmxlZF9waW4sCisJCQkgIChwcml2LT5icmlnaHRuZXNzID09IExFRF9PRkYpKTsKIH0KIAogc3RhdGljIHZvaWQgYXRoOWtfbGVkX2JyaWdodG5lc3Moc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCiAJCQkJIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKIHsKLQlzdHJ1Y3QgYXRoX2xlZCAqbGVkID0gY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgYXRoX2xlZCwgbGVkX2NkZXYpOwotCXN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiA9IGxlZC0+cHJpdjsKKwlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YobGVkX2NkZXYsCisJCQkJCQkgICBzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYsCisJCQkJCQkgICBsZWRfY2Rldik7CiAKLQlsZWQtPmJyaWdodG5lc3MgPSBicmlnaHRuZXNzOwotCWlmICghKHByaXYtPm9wX2ZsYWdzICYgT1BfTEVEX0RFSU5JVCkpCi0JCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+aHcsCi0JCQkJCSAgICAgJmxlZC0+YnJpZ2h0bmVzc193b3JrLCAwKTsKLX0KLQotdm9pZCBhdGg5a19sZWRfc3RvcF9icmlnaHRuZXNzKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdikKLXsKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPnJhZGlvX2xlZC5icmlnaHRuZXNzX3dvcmspOwotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+YXNzb2NfbGVkLmJyaWdodG5lc3Nfd29yayk7Ci0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT50eF9sZWQuYnJpZ2h0bmVzc193b3JrKTsKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPnJ4X2xlZC5icmlnaHRuZXNzX3dvcmspOwotfQotCi1zdGF0aWMgaW50IGF0aDlrX3JlZ2lzdGVyX2xlZChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsIHN0cnVjdCBhdGhfbGVkICpsZWQsCi0JCQkgICAgICBjaGFyICp0cmlnZ2VyKQotewotCWludCByZXQ7Ci0KLQlsZWQtPnByaXYgPSBwcml2OwotCWxlZC0+bGVkX2NkZXYubmFtZSA9IGxlZC0+bmFtZTsKLQlsZWQtPmxlZF9jZGV2LmRlZmF1bHRfdHJpZ2dlciA9IHRyaWdnZXI7Ci0JbGVkLT5sZWRfY2Rldi5icmlnaHRuZXNzX3NldCA9IGF0aDlrX2xlZF9icmlnaHRuZXNzOwotCi0JcmV0ID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKHdpcGh5X2Rldihwcml2LT5ody0+d2lwaHkpLCAmbGVkLT5sZWRfY2Rldik7Ci0JaWYgKHJldCkKLQkJYXRoX2VycihhdGg5a19od19jb21tb24ocHJpdi0+YWgpLAotCQkJIkZhaWxlZCB0byByZWdpc3RlciBsZWQ6JXMiLCBsZWQtPm5hbWUpOwotCWVsc2UKLQkJbGVkLT5yZWdpc3RlcmVkID0gMTsKLQotCUlOSVRfREVMQVlFRF9XT1JLKCZsZWQtPmJyaWdodG5lc3Nfd29yaywgYXRoOWtfbGVkX2JyaWdodG5lc3Nfd29yayk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBhdGg5a191bnJlZ2lzdGVyX2xlZChzdHJ1Y3QgYXRoX2xlZCAqbGVkKQotewotCWlmIChsZWQtPnJlZ2lzdGVyZWQpIHsKLQkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmxlZC0+bGVkX2NkZXYpOwotCQlsZWQtPnJlZ2lzdGVyZWQgPSAwOwotCX0KKwkvKiBOb3QgbG9ja2VkLCBidXQgaXQncyBqdXN0IGEgdGlueSBncmVlbiBsaWdodC4uKi8KKwlwcml2LT5icmlnaHRuZXNzID0gYnJpZ2h0bmVzczsKKwlpZWVlODAyMTFfcXVldWVfd29yayhwcml2LT5odywgJnByaXYtPmxlZF93b3JrKTsKIH0KIAogdm9pZCBhdGg5a19kZWluaXRfbGVkcyhzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpCiB7Ci0JcHJpdi0+b3BfZmxhZ3MgfD0gT1BfTEVEX0RFSU5JVDsKLQlhdGg5a191bnJlZ2lzdGVyX2xlZCgmcHJpdi0+YXNzb2NfbGVkKTsKLQlwcml2LT5vcF9mbGFncyAmPSB+T1BfTEVEX0FTU09DSUFURUQ7Ci0JYXRoOWtfdW5yZWdpc3Rlcl9sZWQoJnByaXYtPnR4X2xlZCk7Ci0JYXRoOWtfdW5yZWdpc3Rlcl9sZWQoJnByaXYtPnJ4X2xlZCk7Ci0JYXRoOWtfdW5yZWdpc3Rlcl9sZWQoJnByaXYtPnJhZGlvX2xlZCk7CisJaWYgKCFwcml2LT5sZWRfcmVnaXN0ZXJlZCkKKwkJcmV0dXJuOworCisJYXRoOWtfbGVkX2JyaWdodG5lc3MoJnByaXYtPmxlZF9jZGV2LCBMRURfT0ZGKTsKKwlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmcHJpdi0+bGVkX2NkZXYpOworCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPmxlZF93b3JrKTsKIH0KIAogdm9pZCBhdGg5a19pbml0X2xlZHMoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KQogewotCWNoYXIgKnRyaWdnZXI7CiAJaW50IHJldDsKIAogCWlmIChBUl9TUkVWXzkyODcocHJpdi0+YWgpKQpAQCAtMzAzLDQ4ICsyMDYsMjEgQEAKIAkvKiBMRUQgb2ZmLCBhY3RpdmUgbG93ICovCiAJYXRoOWtfaHdfc2V0X2dwaW8ocHJpdi0+YWgsIHByaXYtPmFoLT5sZWRfcGluLCAxKTsKIAotCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5hdGg5a19sZWRfYmxpbmtfd29yaywgYXRoOWtfbGVkX2JsaW5rX3dvcmspOworCXNucHJpbnRmKHByaXYtPmxlZF9uYW1lLCBzaXplb2YocHJpdi0+bGVkX25hbWUpLAorCQkiYXRoOWtfaHRjLSVzIiwgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKKwlwcml2LT5sZWRfY2Rldi5uYW1lID0gcHJpdi0+bGVkX25hbWU7CisJcHJpdi0+bGVkX2NkZXYuYnJpZ2h0bmVzc19zZXQgPSBhdGg5a19sZWRfYnJpZ2h0bmVzczsKIAotCXRyaWdnZXIgPSBpZWVlODAyMTFfZ2V0X3JhZGlvX2xlZF9uYW1lKHByaXYtPmh3KTsKLQlzbnByaW50Zihwcml2LT5yYWRpb19sZWQubmFtZSwgc2l6ZW9mKHByaXYtPnJhZGlvX2xlZC5uYW1lKSwKLQkJImF0aDlrLSVzOjpyYWRpbyIsIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7Ci0JcmV0ID0gYXRoOWtfcmVnaXN0ZXJfbGVkKHByaXYsICZwcml2LT5yYWRpb19sZWQsIHRyaWdnZXIpOwotCXByaXYtPnJhZGlvX2xlZC5sZWRfdHlwZSA9IEFUSF9MRURfUkFESU87Ci0JaWYgKHJldCkKLQkJZ290byBmYWlsOworCXJldCA9IGxlZF9jbGFzc2Rldl9yZWdpc3Rlcih3aXBoeV9kZXYocHJpdi0+aHctPndpcGh5KSwgJnByaXYtPmxlZF9jZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuOwogCi0JdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfYXNzb2NfbGVkX25hbWUocHJpdi0+aHcpOwotCXNucHJpbnRmKHByaXYtPmFzc29jX2xlZC5uYW1lLCBzaXplb2YocHJpdi0+YXNzb2NfbGVkLm5hbWUpLAotCQkiYXRoOWstJXM6OmFzc29jIiwgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKLQlyZXQgPSBhdGg5a19yZWdpc3Rlcl9sZWQocHJpdiwgJnByaXYtPmFzc29jX2xlZCwgdHJpZ2dlcik7Ci0JcHJpdi0+YXNzb2NfbGVkLmxlZF90eXBlID0gQVRIX0xFRF9BU1NPQzsKLQlpZiAocmV0KQotCQlnb3RvIGZhaWw7Ci0KLQl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF90eF9sZWRfbmFtZShwcml2LT5odyk7Ci0Jc25wcmludGYocHJpdi0+dHhfbGVkLm5hbWUsIHNpemVvZihwcml2LT50eF9sZWQubmFtZSksCi0JCSJhdGg5ay0lczo6dHgiLCB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOwotCXJldCA9IGF0aDlrX3JlZ2lzdGVyX2xlZChwcml2LCAmcHJpdi0+dHhfbGVkLCB0cmlnZ2VyKTsKLQlwcml2LT50eF9sZWQubGVkX3R5cGUgPSBBVEhfTEVEX1RYOwotCWlmIChyZXQpCi0JCWdvdG8gZmFpbDsKLQotCXRyaWdnZXIgPSBpZWVlODAyMTFfZ2V0X3J4X2xlZF9uYW1lKHByaXYtPmh3KTsKLQlzbnByaW50Zihwcml2LT5yeF9sZWQubmFtZSwgc2l6ZW9mKHByaXYtPnJ4X2xlZC5uYW1lKSwKLQkJImF0aDlrLSVzOjpyeCIsIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7Ci0JcmV0ID0gYXRoOWtfcmVnaXN0ZXJfbGVkKHByaXYsICZwcml2LT5yeF9sZWQsIHRyaWdnZXIpOwotCXByaXYtPnJ4X2xlZC5sZWRfdHlwZSA9IEFUSF9MRURfUlg7Ci0JaWYgKHJldCkKLQkJZ290byBmYWlsOwotCi0JcHJpdi0+b3BfZmxhZ3MgJj0gfk9QX0xFRF9ERUlOSVQ7CisJSU5JVF9XT1JLKCZwcml2LT5sZWRfd29yaywgYXRoOWtfbGVkX3dvcmspOworCXByaXYtPmxlZF9yZWdpc3RlcmVkID0gdHJ1ZTsKIAogCXJldHVybjsKLQotZmFpbDoKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPmF0aDlrX2xlZF9ibGlua193b3JrKTsKLQlhdGg5a19kZWluaXRfbGVkcyhwcml2KTsKIH0KKyNlbmRpZgogCiAvKioqKioqKioqKioqKioqKioqKi8KIC8qCVJma2lsbAkgICAqLwpAQCAtMzk4LDkgKzI3NCw5IEBACiAKIAkvKiBTdGFydCBUWCAqLwogCWh0Y19zdGFydChwcml2LT5odGMpOwotCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfbG9jayk7Ci0JcHJpdi0+dHhfcXVldWVzX3N0b3AgPSBmYWxzZTsKLQlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZwcml2LT50eC50eF9sb2NrKTsKKwlwcml2LT50eC5mbGFncyAmPSB+QVRIOUtfSFRDX09QX1RYX1FVRVVFU19TVE9QOworCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eC50eF9sb2NrKTsKIAlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoaHcpOwogCiAJV01JX0NNRChXTUlfRU5BQkxFX0lOVFJfQ01ESUQpOwpAQCAtNDI5LDEzICszMDUsMTUgQEAKIAogCS8qIFN0b3AgVFggKi8KIAlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoaHcpOwotCWh0Y19zdG9wKHByaXYtPmh0Yyk7CisJYXRoOWtfaHRjX3R4X2RyYWluKHByaXYpOwogCVdNSV9DTUQoV01JX0RSQUlOX1RYUV9BTExfQ01ESUQpOwotCXNrYl9xdWV1ZV9wdXJnZSgmcHJpdi0+dHhfcXVldWUpOwogCiAJLyogU3RvcCBSWCAqLwogCVdNSV9DTUQoV01JX1NUT1BfUkVDVl9DTURJRCk7CiAKKwkvKiBDbGVhciB0aGUgV01JIGV2ZW50IHF1ZXVlICovCisJYXRoOWtfd21pX2V2ZW50X2RyYWluKHByaXYpOworCiAJLyoKIAkgKiBUaGUgTUlCIGNvdW50ZXJzIGhhdmUgdG8gYmUgZGlzYWJsZWQgaGVyZSwKIAkgKiBzaW5jZSB0aGUgdGFyZ2V0IGRvZXNuJ3QgZG8gaXQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9pbml0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9pbml0LmMKaW5kZXggZmM2N2M5My4uYmZkYzhhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfaW5pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2luaXQuYwpAQCAtMTE3LDYgKzExNywyMSBAQAogCVJBVEUoNTQwLCAweDBjLCAwKSwKIH07CiAKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTEVEUworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHB0X2JsaW5rIGF0aDlrX2h0Y190cHRfYmxpbmtbXSA9IHsKKwl7IC50aHJvdWdocHV0ID0gMCAqIDEwMjQsIC5ibGlua190aW1lID0gMzM0IH0sCisJeyAudGhyb3VnaHB1dCA9IDEgKiAxMDI0LCAuYmxpbmtfdGltZSA9IDI2MCB9LAorCXsgLnRocm91Z2hwdXQgPSA1ICogMTAyNCwgLmJsaW5rX3RpbWUgPSAyMjAgfSwKKwl7IC50aHJvdWdocHV0ID0gMTAgKiAxMDI0LCAuYmxpbmtfdGltZSA9IDE5MCB9LAorCXsgLnRocm91Z2hwdXQgPSAyMCAqIDEwMjQsIC5ibGlua190aW1lID0gMTcwIH0sCisJeyAudGhyb3VnaHB1dCA9IDUwICogMTAyNCwgLmJsaW5rX3RpbWUgPSAxNTAgfSwKKwl7IC50aHJvdWdocHV0ID0gNzAgKiAxMDI0LCAuYmxpbmtfdGltZSA9IDEzMCB9LAorCXsgLnRocm91Z2hwdXQgPSAxMDAgKiAxMDI0LCAuYmxpbmtfdGltZSA9IDExMCB9LAorCXsgLnRocm91Z2hwdXQgPSAyMDAgKiAxMDI0LCAuYmxpbmtfdGltZSA9IDgwIH0sCisJeyAudGhyb3VnaHB1dCA9IDMwMCAqIDEwMjQsIC5ibGlua190aW1lID0gNTAgfSwKK307CisjZW5kaWYKKwogc3RhdGljIGludCBhdGg5a19odGNfd2FpdF9mb3JfdGFyZ2V0KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdikKIHsKIAlpbnQgdGltZV9sZWZ0OwpAQCAtMTQwLDcgKzE1NSw2IEBACiAKIHN0YXRpYyB2b2lkIGF0aDlrX2RlaW5pdF9wcml2KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdikKIHsKLQlhdGg5a19odGNfZXhpdF9kZWJ1Zyhwcml2LT5haCk7CiAJYXRoOWtfaHdfZGVpbml0KHByaXYtPmFoKTsKIAlrZnJlZShwcml2LT5haCk7CiAJcHJpdi0+YWggPSBOVUxMOwpAQCAtMjQ0LDcgKzI1OCw3IEBACiAJICovCiAKIAlpZiAoSVNfQVI3MDEwX0RFVklDRShkcnZfaW5mbykpCi0JCXByaXYtPmh0Yy0+Y3JlZGl0cyA9IDQ1OworCQlwcml2LT5odGMtPmNyZWRpdHMgPSA0ODsKIAllbHNlCiAJCXByaXYtPmh0Yy0+Y3JlZGl0cyA9IDMzOwogCkBAIC00MzAsMTMgKzQ0NCwxNiBAQAogCW11dGV4X3VubG9jaygmcHJpdi0+d21pLT5tdWx0aV93cml0ZV9tdXRleCk7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoX29wcyBhdGg5a19jb21tb25fb3BzID0gewotCS5yZWFkID0gYXRoOWtfcmVncmVhZCwKLQkubXVsdGlfcmVhZCA9IGF0aDlrX211bHRpX3JlZ3JlYWQsCi0JLndyaXRlID0gYXRoOWtfcmVnd3JpdGUsCi0JLmVuYWJsZV93cml0ZV9idWZmZXIgPSBhdGg5a19lbmFibGVfcmVnd3JpdGVfYnVmZmVyLAotCS53cml0ZV9mbHVzaCA9IGF0aDlrX3JlZ3dyaXRlX2ZsdXNoLAotfTsKK3N0YXRpYyB1MzIgYXRoOWtfcmVnX3Jtdyh2b2lkICpod19wcml2LCB1MzIgcmVnX29mZnNldCwgdTMyIHNldCwgdTMyIGNscikKK3sKKwl1MzIgdmFsOworCisJdmFsID0gYXRoOWtfcmVncmVhZChod19wcml2LCByZWdfb2Zmc2V0KTsKKwl2YWwgJj0gfmNscjsKKwl2YWwgfD0gc2V0OworCWF0aDlrX3JlZ3dyaXRlKGh3X3ByaXYsIHZhbCwgcmVnX29mZnNldCk7CisJcmV0dXJuIHZhbDsKK30KIAogc3RhdGljIHZvaWQgYXRoX3VzYl9yZWFkX2NhY2hlc2l6ZShzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLCBpbnQgKmNzeikKIHsKQEAgLTU2MSwxMyArNTc4LDcgQEAKIAlpbnQgaSA9IDA7CiAKIAkvKiBHZXQgdGhlIGhhcmR3YXJlIGtleSBjYWNoZSBzaXplLiAqLwotCWNvbW1vbi0+a2V5bWF4ID0gcHJpdi0+YWgtPmNhcHMua2V5Y2FjaGVfc2l6ZTsKLQlpZiAoY29tbW9uLT5rZXltYXggPiBBVEhfS0VZTUFYKSB7Ci0JCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0FOWSwKLQkJCSJXYXJuaW5nLCB1c2luZyBvbmx5ICV1IGVudHJpZXMgaW4gJXUga2V5IGNhY2hlXG4iLAotCQkJQVRIX0tFWU1BWCwgY29tbW9uLT5rZXltYXgpOwotCQljb21tb24tPmtleW1heCA9IEFUSF9LRVlNQVg7Ci0JfQorCWNvbW1vbi0+a2V5bWF4ID0gQVJfS0VZVEFCTEVfU0laRTsKIAogCWlmIChwcml2LT5haC0+bWlzY19tb2RlICYgQVJfUENVX01JQ19ORVdfTE9DX0VOQSkKIAkJY29tbW9uLT5jcnlwdF9jYXBzIHw9IEFUSF9DUllQVF9DQVBfTUlDX0NPTUJJTkVEOwpAQCAtNjQ2LDcgKzY1Nyw3IEBACiB7CiAJc3RydWN0IGF0aF9odyAqYWggPSBOVUxMOwogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb247Ci0JaW50IHJldCA9IDAsIGNzeiA9IDA7CisJaW50IGksIHJldCA9IDAsIGNzeiA9IDA7CiAKIAlwcml2LT5vcF9mbGFncyB8PSBPUF9JTlZBTElEOwogCkBAIC02NTgsMzAgKzY2OSwzNSBAQAogCWFoLT5od192ZXJzaW9uLnN1YnN5c2lkID0gMDsgLyogRklYTUUgKi8KIAlhaC0+aHdfdmVyc2lvbi51c2JkZXYgPSBkcnZfaW5mbzsKIAlhaC0+YWhfZmxhZ3MgfD0gQUhfVVNFX0VFUFJPTTsKKwlhaC0+cmVnX29wcy5yZWFkID0gYXRoOWtfcmVncmVhZDsKKwlhaC0+cmVnX29wcy5tdWx0aV9yZWFkID0gYXRoOWtfbXVsdGlfcmVncmVhZDsKKwlhaC0+cmVnX29wcy53cml0ZSA9IGF0aDlrX3JlZ3dyaXRlOworCWFoLT5yZWdfb3BzLmVuYWJsZV93cml0ZV9idWZmZXIgPSBhdGg5a19lbmFibGVfcmVnd3JpdGVfYnVmZmVyOworCWFoLT5yZWdfb3BzLndyaXRlX2ZsdXNoID0gYXRoOWtfcmVnd3JpdGVfZmx1c2g7CisJYWgtPnJlZ19vcHMucm13ID0gYXRoOWtfcmVnX3JtdzsKIAlwcml2LT5haCA9IGFoOwogCiAJY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKLQljb21tb24tPm9wcyA9ICZhdGg5a19jb21tb25fb3BzOworCWNvbW1vbi0+b3BzID0gJmFoLT5yZWdfb3BzOwogCWNvbW1vbi0+YnVzX29wcyA9ICZhdGg5a191c2JfYnVzX29wczsKIAljb21tb24tPmFoID0gYWg7CiAJY29tbW9uLT5odyA9IHByaXYtPmh3OwogCWNvbW1vbi0+cHJpdiA9IHByaXY7CiAJY29tbW9uLT5kZWJ1Z19tYXNrID0gYXRoOWtfZGVidWc7CiAKLQlzcGluX2xvY2tfaW5pdCgmcHJpdi0+d21pLT53bWlfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmJlYWNvbl9sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmcHJpdi0+dHhfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnR4LnR4X2xvY2spOwogCW11dGV4X2luaXQoJnByaXYtPm11dGV4KTsKIAltdXRleF9pbml0KCZwcml2LT5odGNfcG1fbG9jayk7Ci0JdGFza2xldF9pbml0KCZwcml2LT5zd2JhX3Rhc2tsZXQsIGF0aDlrX3N3YmFfdGFza2xldCwKLQkJICAgICAodW5zaWduZWQgbG9uZylwcml2KTsKIAl0YXNrbGV0X2luaXQoJnByaXYtPnJ4X3Rhc2tsZXQsIGF0aDlrX3J4X3Rhc2tsZXQsCiAJCSAgICAgKHVuc2lnbmVkIGxvbmcpcHJpdik7Ci0JdGFza2xldF9pbml0KCZwcml2LT50eF90YXNrbGV0LCBhdGg5a190eF90YXNrbGV0LAorCXRhc2tsZXRfaW5pdCgmcHJpdi0+dHhfZmFpbGVkX3Rhc2tsZXQsIGF0aDlrX3R4X2ZhaWxlZF90YXNrbGV0LAogCQkgICAgICh1bnNpZ25lZCBsb25nKXByaXYpOwogCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5hbmlfd29yaywgYXRoOWtfaHRjX2FuaV93b3JrKTsKIAlJTklUX1dPUksoJnByaXYtPnBzX3dvcmssIGF0aDlrX3BzX3dvcmspOwogCUlOSVRfV09SSygmcHJpdi0+ZmF0YWxfd29yaywgYXRoOWtfZmF0YWxfd29yayk7CisJc2V0dXBfdGltZXIoJnByaXYtPnR4LmNsZWFudXBfdGltZXIsIGF0aDlrX2h0Y190eF9jbGVhbnVwX3RpbWVyLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpcHJpdik7CiAKIAkvKgogCSAqIENhY2hlIGxpbmUgc2l6ZSBpcyB1c2VkIHRvIHNpemUgYW5kIGFsaWduIHZhcmlvdXMKQEAgLTY5OCwxNiArNzE0LDEzIEBACiAJCWdvdG8gZXJyX2h3OwogCX0KIAotCXJldCA9IGF0aDlrX2h0Y19pbml0X2RlYnVnKGFoKTsKLQlpZiAocmV0KSB7Ci0JCWF0aF9lcnIoY29tbW9uLCAiVW5hYmxlIHRvIGNyZWF0ZSBkZWJ1Z2ZzIGZpbGVzXG4iKTsKLQkJZ290byBlcnJfZGVidWc7Ci0JfQotCiAJcmV0ID0gYXRoOWtfaW5pdF9xdWV1ZXMocHJpdik7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfcXVldWVzOwogCisJZm9yIChpID0gMDsgaSA8IEFUSDlLX0hUQ19NQVhfQkNOX1ZJRjsgaSsrKQorCQlwcml2LT5jdXJfYmVhY29uX2NvbmYuYnNsb3RbaV0gPSBOVUxMOworCiAJYXRoOWtfaW5pdF9jcnlwdG8ocHJpdik7CiAJYXRoOWtfaW5pdF9jaGFubmVsc19yYXRlcyhwcml2KTsKIAlhdGg5a19pbml0X21pc2MocHJpdik7CkBAIC03MjAsOCArNzMzLDYgQEAKIAlyZXR1cm4gMDsKIAogZXJyX3F1ZXVlczoKLQlhdGg5a19odGNfZXhpdF9kZWJ1ZyhhaCk7Ci1lcnJfZGVidWc6CiAJYXRoOWtfaHdfZGVpbml0KGFoKTsKIGVycl9odzoKIApAQCAtNzQyLDE3ICs3NTMsMjcgQEAKIAkJSUVFRTgwMjExX0hXX0hBU19SQVRFX0NPTlRST0wgfAogCQlJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTIHwKIAkJSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKLQkJSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLOworCQlJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0sgfAorCQlJRUVFODAyMTFfSFdfSE9TVF9CUk9BRENBU1RfUFNfQlVGRkVSSU5HOwogCiAJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPQogCQlCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfAotCQlCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpOworCQlCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpIHwKKwkJQklUKE5MODAyMTFfSUZUWVBFX0FQKSB8CisJCUJJVChOTDgwMjExX0lGVFlQRV9QMlBfR08pIHwKKwkJQklUKE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQpOwogCiAJaHctPndpcGh5LT5mbGFncyAmPSB+V0lQSFlfRkxBR19QU19PTl9CWV9ERUZBVUxUOwogCiAJaHctPnF1ZXVlcyA9IDQ7CiAJaHctPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSA1MDAwOwogCWh3LT5tYXhfbGlzdGVuX2ludGVydmFsID0gMTA7CisKKwlpZiAoQVJfU1JFVl85MjcxKHByaXYtPmFoKSkKKwkJaHctPm1heF90eF9hZ2dyZWdhdGlvbl9zdWJmcmFtZXMgPSBNQVhfVFhfQU1QRFVfU1VCRlJBTUVTXzkyNzE7CisJZWxzZQorCQlody0+bWF4X3R4X2FnZ3JlZ2F0aW9uX3N1YmZyYW1lcyA9IE1BWF9UWF9BTVBEVV9TVUJGUkFNRVNfNzAxMDsKKwogCWh3LT52aWZfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhdGg5a19odGNfdmlmKTsKIAlody0+c3RhX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXRoOWtfaHRjX3N0YSk7CiAKQEAgLTc3OSw2ICs4MDAsNDMgQEAKIAlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihodywgY29tbW9uLT5tYWNhZGRyKTsKIH0KIAorc3RhdGljIGludCBhdGg5a19pbml0X2Zpcm13YXJlX3ZlcnNpb24oc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcHJpdi0+aHc7CisJc3RydWN0IHdtaV9md192ZXJzaW9uIGNtZF9yc3A7CisJaW50IHJldDsKKworCW1lbXNldCgmY21kX3JzcCwgMCwgc2l6ZW9mKGNtZF9yc3ApKTsKKworCVdNSV9DTUQoV01JX0dFVF9GV19WRVJTSU9OKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByaXYtPmZ3X3ZlcnNpb25fbWFqb3IgPSBiZTE2X3RvX2NwdShjbWRfcnNwLm1ham9yKTsKKwlwcml2LT5md192ZXJzaW9uX21pbm9yID0gYmUxNl90b19jcHUoY21kX3JzcC5taW5vcik7CisKKwlzbnByaW50Zihody0+d2lwaHktPmZ3X3ZlcnNpb24sIEVUSFRPT0xfQlVTSU5GT19MRU4sICIlZC4lZCIsCisJCSBwcml2LT5md192ZXJzaW9uX21ham9yLAorCQkgcHJpdi0+ZndfdmVyc2lvbl9taW5vcik7CisKKwlkZXZfaW5mbyhwcml2LT5kZXYsICJhdGg5a19odGM6IEZXIFZlcnNpb246ICVkLiVkXG4iLAorCQkgcHJpdi0+ZndfdmVyc2lvbl9tYWpvciwKKwkJIHByaXYtPmZ3X3ZlcnNpb25fbWlub3IpOworCisJLyoKKwkgKiBDaGVjayBpZiB0aGUgYXZhaWxhYmxlIEZXIG1hdGNoZXMgdGhlIGRyaXZlcidzCisJICogcmVxdWlyZWQgdmVyc2lvbi4KKwkgKi8KKwlpZiAocHJpdi0+ZndfdmVyc2lvbl9tYWpvciAhPSBNQUpPUl9WRVJTSU9OX1JFUSB8fAorCSAgICBwcml2LT5md192ZXJzaW9uX21pbm9yICE9IE1JTk9SX1ZFUlNJT05fUkVRKSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAiYXRoOWtfaHRjOiBQbGVhc2UgdXBncmFkZSB0byBGVyB2ZXJzaW9uICVkLiVkXG4iLAorCQkJTUFKT1JfVkVSU0lPTl9SRVEsIE1JTk9SX1ZFUlNJT05fUkVRKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgYXRoOWtfaW5pdF9kZXZpY2Uoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAogCQkJICAgICB1MTYgZGV2aWQsIGNoYXIgKnByb2R1Y3QsIHUzMiBkcnZfaW5mbykKIHsKQEAgLTc5OCw2ICs4NTYsMTAgQEAKIAljb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwogCWF0aDlrX3NldF9od19jYXBhYihwcml2LCBodyk7CiAKKwllcnJvciA9IGF0aDlrX2luaXRfZmlybXdhcmVfdmVyc2lvbihwcml2KTsKKwlpZiAoZXJyb3IgIT0gMCkKKwkJZ290byBlcnJfZnc7CisKIAkvKiBJbml0aWFsaXplIHJlZ3VsYXRvcnkgKi8KIAllcnJvciA9IGF0aF9yZWdkX2luaXQoJmNvbW1vbi0+cmVndWxhdG9yeSwgcHJpdi0+aHctPndpcGh5LAogCQkJICAgICAgYXRoOWtfcmVnX25vdGlmaWVyKTsKQEAgLTgxNiw2ICs4NzgsMTMgQEAKIAlpZiAoZXJyb3IgIT0gMCkKIAkJZ290byBlcnJfcng7CiAKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTEVEUworCS8qIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGllZWU4MDIxMV9yZWdpc3Rlcl9odyAqLworCXByaXYtPmxlZF9jZGV2LmRlZmF1bHRfdHJpZ2dlciA9IGllZWU4MDIxMV9jcmVhdGVfdHB0X2xlZF90cmlnZ2VyKHByaXYtPmh3LAorCQlJRUVFODAyMTFfVFBUX0xFRFRSSUdfRkxfUkFESU8sIGF0aDlrX2h0Y190cHRfYmxpbmssCisJCUFSUkFZX1NJWkUoYXRoOWtfaHRjX3RwdF9ibGluaykpOworI2VuZGlmCisKIAkvKiBSZWdpc3RlciB3aXRoIG1hYzgwMjExICovCiAJZXJyb3IgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoaHcpOwogCWlmIChlcnJvcikKQEAgLTgyOCw2ICs4OTcsMTIgQEAKIAkJCWdvdG8gZXJyX3dvcmxkOwogCX0KIAorCWVycm9yID0gYXRoOWtfaHRjX2luaXRfZGVidWcocHJpdi0+YWgpOworCWlmIChlcnJvcikgeworCQlhdGhfZXJyKGNvbW1vbiwgIlVuYWJsZSB0byBjcmVhdGUgZGVidWdmcyBmaWxlc1xuIik7CisJCWdvdG8gZXJyX3dvcmxkOworCX0KKwogCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKIAkJIldNSTolZCwgQkNOOiVkLCBDQUI6JWQsIFVBUFNEOiVkLCBNR01UOiVkLCAiCiAJCSJCRTolZCwgQks6JWQsIFZJOiVkLCBWTzolZFxuIiwKQEAgLTg1OCw2ICs5MzMsOCBAQAogZXJyX3R4OgogCS8qIE5vdGhpbmcgKi8KIGVycl9yZWdkOgorCS8qIE5vdGhpbmcgKi8KK2Vycl9mdzoKIAlhdGg5a19kZWluaXRfcHJpdihwcml2KTsKIGVycl9pbml0OgogCXJldHVybiBlcnJvcjsKQEAgLTk0NiwzOCArMTAyMywyMCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBhdGg5a19odGNfaW5pdCh2b2lkKQogewotCWludCBlcnJvcjsKLQotCWVycm9yID0gYXRoOWtfaHRjX2RlYnVnX2NyZWF0ZV9yb290KCk7Ci0JaWYgKGVycm9yIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJCSJhdGg5a19odGM6IFVuYWJsZSB0byBjcmVhdGUgZGVidWdmcyByb290OiAlZFxuIiwKLQkJCWVycm9yKTsKLQkJZ290byBlcnJfZGJnOwotCX0KLQotCWVycm9yID0gYXRoOWtfaGlmX3VzYl9pbml0KCk7Ci0JaWYgKGVycm9yIDwgMCkgeworCWlmIChhdGg5a19oaWZfdXNiX2luaXQoKSA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCQkiYXRoOWtfaHRjOiBObyBVU0IgZGV2aWNlcyBmb3VuZCwiCiAJCQkiIGRyaXZlciBub3QgaW5zdGFsbGVkLlxuIik7Ci0JCWVycm9yID0gLUVOT0RFVjsKLQkJZ290byBlcnJfdXNiOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlyZXR1cm4gMDsKLQotZXJyX3VzYjoKLQlhdGg5a19odGNfZGVidWdfcmVtb3ZlX3Jvb3QoKTsKLWVycl9kYmc6Ci0JcmV0dXJuIGVycm9yOwogfQogbW9kdWxlX2luaXQoYXRoOWtfaHRjX2luaXQpOwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYXRoOWtfaHRjX2V4aXQodm9pZCkKIHsKIAlhdGg5a19oaWZfdXNiX2V4aXQoKTsKLQlhdGg5a19odGNfZGVidWdfcmVtb3ZlX3Jvb3QoKTsKIAlwcmludGsoS0VSTl9JTkZPICJhdGg5a19odGM6IERyaXZlciB1bmxvYWRlZFxuIik7CiB9CiBtb2R1bGVfZXhpdChhdGg5a19odGNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMKaW5kZXggZGI4YzBjMC4uNWFhMTA0ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMKQEAgLTE2LDEwICsxNiw2IEBACiAKICNpbmNsdWRlICJodGMuaCIKIAotI2lmZGVmIENPTkZJR19BVEg5S19IVENfREVCVUdGUwotc3RhdGljIHN0cnVjdCBkZW50cnkgKmF0aDlrX2RlYnVnZnNfcm9vdDsKLSNlbmRpZgotCiAvKioqKioqKioqKioqKi8KIC8qIFV0aWxpdGllcyAqLwogLyoqKioqKioqKioqKiovCkBAIC0xOTcsMTEgKzE5MywxNiBAQAogCiAJYXRoOWtfaHRjX3N0b3BfYW5pKHByaXYpOwogCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhwcml2LT5odyk7Ci0JaHRjX3N0b3AocHJpdi0+aHRjKTsKKworCWRlbF90aW1lcl9zeW5jKCZwcml2LT50eC5jbGVhbnVwX3RpbWVyKTsKKwlhdGg5a19odGNfdHhfZHJhaW4ocHJpdik7CisKIAlXTUlfQ01EKFdNSV9ESVNBQkxFX0lOVFJfQ01ESUQpOwogCVdNSV9DTUQoV01JX0RSQUlOX1RYUV9BTExfQ01ESUQpOwogCVdNSV9DTUQoV01JX1NUT1BfUkVDVl9DTURJRCk7CiAKKwlhdGg5a193bWlfZXZlbnRfZHJhaW4ocHJpdik7CisKIAljYWxkYXRhID0gJnByaXYtPmNhbGRhdGE7CiAJcmV0ID0gYXRoOWtfaHdfcmVzZXQoYWgsIGFoLT5jdXJjaGFuLCBjYWxkYXRhLCBmYWxzZSk7CiAJaWYgKHJldCkgewpAQCAtMjI1LDYgKzIyNiw5IEBACiAJYXRoOWtfaHRjX3ZpZl9yZWNvbmZpZyhwcml2KTsKIAlpZWVlODAyMTFfd2FrZV9xdWV1ZXMocHJpdi0+aHcpOwogCisJbW9kX3RpbWVyKCZwcml2LT50eC5jbGVhbnVwX3RpbWVyLAorCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEFUSDlLX0hUQ19UWF9DTEVBTlVQX0lOVEVSVkFMKSk7CisKIAlhdGg5a19odGNfcHNfcmVzdG9yZShwcml2KTsKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KQEAgLTI1MCwxMSArMjU0LDE2IEBACiAJZmFzdGNjID0gISEoaHctPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9PRkZDSEFOTkVMKTsKIAogCWF0aDlrX2h0Y19wc193YWtldXAocHJpdik7Ci0JaHRjX3N0b3AocHJpdi0+aHRjKTsKKworCWRlbF90aW1lcl9zeW5jKCZwcml2LT50eC5jbGVhbnVwX3RpbWVyKTsKKwlhdGg5a19odGNfdHhfZHJhaW4ocHJpdik7CisKIAlXTUlfQ01EKFdNSV9ESVNBQkxFX0lOVFJfQ01ESUQpOwogCVdNSV9DTUQoV01JX0RSQUlOX1RYUV9BTExfQ01ESUQpOwogCVdNSV9DTUQoV01JX1NUT1BfUkVDVl9DTURJRCk7CiAKKwlhdGg5a193bWlfZXZlbnRfZHJhaW4ocHJpdik7CisKIAlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DT05GSUcsCiAJCSIoJXUgTUh6KSAtPiAoJXUgTUh6KSwgSFQ6ICVkLCBIVDQwOiAlZCBmYXN0Y2M6ICVkXG4iLAogCQlwcml2LT5haC0+Y3VyY2hhbi0+Y2hhbm5lbCwKQEAgLTI2Myw2ICsyNzIsNyBAQAogCiAJaWYgKCFmYXN0Y2MpCiAJCWNhbGRhdGEgPSAmcHJpdi0+Y2FsZGF0YTsKKwogCXJldCA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBoY2hhbiwgY2FsZGF0YSwgZmFzdGNjKTsKIAlpZiAocmV0KSB7CiAJCWF0aF9lcnIoY29tbW9uLApAQCAtMjk2LDYgKzMwNiw5IEBACiAJICAgICEoaHctPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9PRkZDSEFOTkVMKSkKIAkJYXRoOWtfaHRjX3ZpZl9yZWNvbmZpZyhwcml2KTsKIAorCW1vZF90aW1lcigmcHJpdi0+dHguY2xlYW51cF90aW1lciwKKwkJICBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhBVEg5S19IVENfVFhfQ0xFQU5VUF9JTlRFUlZBTCkpOworCiBlcnI6CiAJYXRoOWtfaHRjX3BzX3Jlc3RvcmUocHJpdik7CiAJcmV0dXJuIHJldDsKQEAgLTMxOSw2ICszMzIsMTEgQEAKIAltZW1jcHkoJmh2aWYubXlhZGRyLCBjb21tb24tPm1hY2FkZHIsIEVUSF9BTEVOKTsKIAlodmlmLmluZGV4ID0gcHJpdi0+bW9uX3ZpZl9pZHg7CiAJV01JX0NNRF9CVUYoV01JX1ZBUF9SRU1PVkVfQ01ESUQsICZodmlmKTsKKwlpZiAocmV0KSB7CisJCWF0aF9lcnIoY29tbW9uLCAiVW5hYmxlIHRvIHJlbW92ZSBtb25pdG9yIGludGVyZmFjZSBhdCBpZHg6ICVkXG4iLAorCQkJcHJpdi0+bW9uX3ZpZl9pZHgpOworCX0KKwogCXByaXYtPm52aWZzLS07CiAJcHJpdi0+dmlmX3Nsb3QgJj0gfigxIDw8IHByaXYtPm1vbl92aWZfaWR4KTsKIH0KQEAgLTM0OSw3ICszNjcsNyBAQAogCW1lbXNldCgmaHZpZiwgMCwgc2l6ZW9mKHN0cnVjdCBhdGg5a19odGNfdGFyZ2V0X3ZpZikpOwogCW1lbWNweSgmaHZpZi5teWFkZHIsIGNvbW1vbi0+bWFjYWRkciwgRVRIX0FMRU4pOwogCi0JaHZpZi5vcG1vZGUgPSBjcHVfdG9fYmUzMihIVENfTV9NT05JVE9SKTsKKwlodmlmLm9wbW9kZSA9IEhUQ19NX01PTklUT1I7CiAJaHZpZi5pbmRleCA9IGZmeihwcml2LT52aWZfc2xvdCk7CiAKIAlXTUlfQ01EX0JVRihXTUlfVkFQX0NSRUFURV9DTURJRCwgJmh2aWYpOwpAQCAtMzgyLDcgKzQwMCw3IEBACiAJdHN0YS5pc192aWZfc3RhID0gMTsKIAl0c3RhLnN0YV9pbmRleCA9IHN0YV9pZHg7CiAJdHN0YS52aWZfaW5kZXggPSBodmlmLmluZGV4OwotCXRzdGEubWF4YW1wZHUgPSAweGZmZmY7CisJdHN0YS5tYXhhbXBkdSA9IGNwdV90b19iZTE2KDB4ZmZmZik7CiAKIAlXTUlfQ01EX0JVRihXTUlfTk9ERV9DUkVBVEVfQ01ESUQsICZ0c3RhKTsKIAlpZiAocmV0KSB7CkBAIC00NDksNiArNDY3LDcgQEAKIAlzdHJ1Y3QgYXRoOWtfaHRjX3N0YSAqaXN0YTsKIAlpbnQgcmV0LCBzdGFfaWR4OwogCXU4IGNtZF9yc3A7CisJdTE2IG1heGFtcGR1OwogCiAJaWYgKHByaXYtPm5zdGF0aW9ucyA+PSBBVEg5S19IVENfTUFYX1NUQSkKIAkJcmV0dXJuIC1FTk9CVUZTOwpAQCAtNDYzLDkgKzQ4Miw3IEBACiAJCWlzdGEgPSAoc3RydWN0IGF0aDlrX2h0Y19zdGEgKikgc3RhLT5kcnZfcHJpdjsKIAkJbWVtY3B5KCZ0c3RhLm1hY2FkZHIsIHN0YS0+YWRkciwgRVRIX0FMRU4pOwogCQltZW1jcHkoJnRzdGEuYnNzaWQsIGNvbW1vbi0+Y3VyYnNzaWQsIEVUSF9BTEVOKTsKLQkJdHN0YS5hc3NvY2lkID0gY29tbW9uLT5jdXJhaWQ7CiAJCXRzdGEuaXNfdmlmX3N0YSA9IDA7Ci0JCXRzdGEudmFsaWQgPSB0cnVlOwogCQlpc3RhLT5pbmRleCA9IHN0YV9pZHg7CiAJfSBlbHNlIHsKIAkJbWVtY3B5KCZ0c3RhLm1hY2FkZHIsIHZpZi0+YWRkciwgRVRIX0FMRU4pOwpAQCAtNDc0LDcgKzQ5MSwxNSBAQAogCiAJdHN0YS5zdGFfaW5kZXggPSBzdGFfaWR4OwogCXRzdGEudmlmX2luZGV4ID0gYXZwLT5pbmRleDsKLQl0c3RhLm1heGFtcGR1ID0gMHhmZmZmOworCisJaWYgKCFzdGEpIHsKKwkJdHN0YS5tYXhhbXBkdSA9IGNwdV90b19iZTE2KDB4ZmZmZik7CisJfSBlbHNlIHsKKwkJbWF4YW1wZHUgPSAxIDw8IChJRUVFODAyMTFfSFRfTUFYX0FNUERVX0ZBQ1RPUiArCisJCQkJIHN0YS0+aHRfY2FwLmFtcGR1X2ZhY3Rvcik7CisJCXRzdGEubWF4YW1wZHUgPSBjcHVfdG9fYmUxNihtYXhhbXBkdSk7CisJfQorCiAJaWYgKHN0YSAmJiBzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpCiAJCXRzdGEuZmxhZ3MgPSBjcHVfdG9fYmUxNihBVEhfSFRDX1NUQV9IVCk7CiAKQEAgLTU0Nyw3ICs1NzIsOCBAQAogCXJldHVybiAwOwogfQogCi1pbnQgYXRoOWtfaHRjX3VwZGF0ZV9jYXBfdGFyZ2V0KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdikKK2ludCBhdGg5a19odGNfdXBkYXRlX2NhcF90YXJnZXQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAorCQkJCXU4IGVuYWJsZV9jb2V4KQogewogCXN0cnVjdCBhdGg5a19odGNfY2FwX3RhcmdldCB0Y2FwOwogCWludCByZXQ7CkBAIC01NTUsMTMgKzU4MSw5IEBACiAKIAltZW1zZXQoJnRjYXAsIDAsIHNpemVvZihzdHJ1Y3QgYXRoOWtfaHRjX2NhcF90YXJnZXQpKTsKIAotCS8qIEZJWE1FOiBWYWx1ZXMgYXJlIGhhcmRjb2RlZCAqLwotCXRjYXAuZmxhZ3MgPSAweDI0MGM0MDsKLQl0Y2FwLmZsYWdzX2V4dCA9IDB4ODA2MDEwMDA7Ci0JdGNhcC5hbXBkdV9saW1pdCA9IDB4ZmZmZjAwMDA7Ci0JdGNhcC5hbXBkdV9zdWJmcmFtZXMgPSAyMDsKLQl0Y2FwLnR4X2NoYWlubWFza19sZWdhY3kgPSBwcml2LT5haC0+Y2Fwcy50eF9jaGFpbm1hc2s7Ci0JdGNhcC5wcm90bW9kZSA9IDE7CisJdGNhcC5hbXBkdV9saW1pdCA9IGNwdV90b19iZTMyKDB4ZmZmZik7CisJdGNhcC5hbXBkdV9zdWJmcmFtZXMgPSBwcml2LT5ody0+bWF4X3R4X2FnZ3JlZ2F0aW9uX3N1YmZyYW1lczsKKwl0Y2FwLmVuYWJsZV9jb2V4ID0gZW5hYmxlX2NvZXg7CiAJdGNhcC50eF9jaGFpbm1hc2sgPSBwcml2LT5haC0+Y2Fwcy50eF9jaGFpbm1hc2s7CiAKIAlXTUlfQ01EX0JVRihXTUlfVEFSR0VUX0lDX1VQREFURV9DTURJRCwgJnRjYXApOwpAQCAtNzA5LDIxOCArNzMxLDEzIEBACiAJCQkoYWdnci5hZ2dyX2VuYWJsZSkgPyAiU3RhcnRpbmciIDogIlN0b3BwaW5nIiwKIAkJCXN0YS0+YWRkciwgdGlkKTsKIAotCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZwcml2LT50eC50eF9sb2NrKTsKIAlpc3RhLT50aWRfc3RhdGVbdGlkXSA9IChhZ2dyLmFnZ3JfZW5hYmxlICYmICFyZXQpID8gQUdHUl9TVEFSVCA6IEFHR1JfU1RPUDsKLQlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4LnR4X2xvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KIAotLyoqKioqKioqKi8KLS8qIERFQlVHICovCi0vKioqKioqKioqLwotCi0jaWZkZWYgQ09ORklHX0FUSDlLX0hUQ19ERUJVR0ZTCi0KLXN0YXRpYyBpbnQgYXRoOWtfZGVidWdmc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCWZpbGUtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHJlYWRfZmlsZV90Z3Rfc3RhdHMoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGF0aDlrX2h0Y190YXJnZXRfc3RhdHMgY21kX3JzcDsKLQljaGFyIGJ1Zls1MTJdOwotCXVuc2lnbmVkIGludCBsZW4gPSAwOwotCWludCByZXQgPSAwOwotCi0JbWVtc2V0KCZjbWRfcnNwLCAwLCBzaXplb2YoY21kX3JzcCkpOwotCi0JV01JX0NNRChXTUlfVEdUX1NUQVRTX0NNRElEKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCi0JbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCQkiJTE5cyA6ICUxMHVcbiIsICJUWCBTaG9ydCBSZXRyaWVzIiwKLQkJCWJlMzJfdG9fY3B1KGNtZF9yc3AudHhfc2hvcnRyZXRyeSkpOwotCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAotCQkJIiUxOXMgOiAlMTB1XG4iLCAiVFggTG9uZyBSZXRyaWVzIiwKLQkJCWJlMzJfdG9fY3B1KGNtZF9yc3AudHhfbG9uZ3JldHJ5KSk7Ci0JbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCQkiJTE5cyA6ICUxMHVcbiIsICJUWCBYcmV0cmllcyIsCi0JCQliZTMyX3RvX2NwdShjbWRfcnNwLnR4X3hyZXRyaWVzKSk7Ci0JbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCQkiJTE5cyA6ICUxMHVcbiIsICJUWCBVbmFnZ3IuIFhyZXRyaWVzIiwKLQkJCWJlMzJfdG9fY3B1KGNtZF9yc3AuaHRfdHh1bmFnZ3JfeHJldHJ5KSk7Ci0JbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCQkiJTE5cyA6ICUxMHVcbiIsICJUWCBYcmV0cmllcyAoSFQpIiwKLQkJCWJlMzJfdG9fY3B1KGNtZF9yc3AuaHRfdHhfeHJldHJpZXMpKTsKLQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJCSIlMTlzIDogJTEwdVxuIiwgIlRYIFJhdGUiLCBwcml2LT5kZWJ1Zy50eHJhdGUpOwotCi0JaWYgKGxlbiA+IHNpemVvZihidWYpKQotCQlsZW4gPSBzaXplb2YoYnVmKTsKLQotCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc190Z3Rfc3RhdHMgPSB7Ci0JLnJlYWQgPSByZWFkX2ZpbGVfdGd0X3N0YXRzLAotCS5vcGVuID0gYXRoOWtfZGVidWdmc19vcGVuLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywKLX07Ci0KLXN0YXRpYyBzc2l6ZV90IHJlYWRfZmlsZV94bWl0KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCi0JCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JY2hhciBidWZbNTEyXTsKLQl1bnNpZ25lZCBpbnQgbGVuID0gMDsKLQotCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAotCQkJIiUyMHMgOiAlMTB1XG4iLCAiQnVmZmVycyBxdWV1ZWQiLAotCQkJcHJpdi0+ZGVidWcudHhfc3RhdHMuYnVmX3F1ZXVlZCk7Ci0JbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCQkiJTIwcyA6ICUxMHVcbiIsICJCdWZmZXJzIGNvbXBsZXRlZCIsCi0JCQlwcml2LT5kZWJ1Zy50eF9zdGF0cy5idWZfY29tcGxldGVkKTsKLQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJCSIlMjBzIDogJTEwdVxuIiwgIlNLQnMgcXVldWVkIiwKLQkJCXByaXYtPmRlYnVnLnR4X3N0YXRzLnNrYl9xdWV1ZWQpOwotCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAotCQkJIiUyMHMgOiAlMTB1XG4iLCAiU0tCcyBjb21wbGV0ZWQiLAotCQkJcHJpdi0+ZGVidWcudHhfc3RhdHMuc2tiX2NvbXBsZXRlZCk7Ci0JbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCQkiJTIwcyA6ICUxMHVcbiIsICJTS0JzIGRyb3BwZWQiLAotCQkJcHJpdi0+ZGVidWcudHhfc3RhdHMuc2tiX2Ryb3BwZWQpOwotCi0JbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCQkiJTIwcyA6ICUxMHVcbiIsICJCRSBxdWV1ZWQiLAotCQkJcHJpdi0+ZGVidWcudHhfc3RhdHMucXVldWVfc3RhdHNbV01FX0FDX0JFXSk7Ci0JbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCQkiJTIwcyA6ICUxMHVcbiIsICJCSyBxdWV1ZWQiLAotCQkJcHJpdi0+ZGVidWcudHhfc3RhdHMucXVldWVfc3RhdHNbV01FX0FDX0JLXSk7Ci0JbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCQkiJTIwcyA6ICUxMHVcbiIsICJWSSBxdWV1ZWQiLAotCQkJcHJpdi0+ZGVidWcudHhfc3RhdHMucXVldWVfc3RhdHNbV01FX0FDX1ZJXSk7Ci0JbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCQkiJTIwcyA6ICUxMHVcbiIsICJWTyBxdWV1ZWQiLAotCQkJcHJpdi0+ZGVidWcudHhfc3RhdHMucXVldWVfc3RhdHNbV01FX0FDX1ZPXSk7Ci0KLQlpZiAobGVuID4gc2l6ZW9mKGJ1ZikpCi0JCWxlbiA9IHNpemVvZihidWYpOwotCi0JcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX3htaXQgPSB7Ci0JLnJlYWQgPSByZWFkX2ZpbGVfeG1pdCwKLQkub3BlbiA9IGF0aDlrX2RlYnVnZnNfb3BlbiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkubGxzZWVrID0gZGVmYXVsdF9sbHNlZWssCi19OwotCi1zdGF0aWMgc3NpemVfdCByZWFkX2ZpbGVfcmVjdihzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAotCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgYnVmWzUxMl07Ci0JdW5zaWduZWQgaW50IGxlbiA9IDA7Ci0KLQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJCSIlMjBzIDogJTEwdVxuIiwgIlNLQnMgYWxsb2NhdGVkIiwKLQkJCXByaXYtPmRlYnVnLnJ4X3N0YXRzLnNrYl9hbGxvY2F0ZWQpOwotCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAotCQkJIiUyMHMgOiAlMTB1XG4iLCAiU0tCcyBjb21wbGV0ZWQiLAotCQkJcHJpdi0+ZGVidWcucnhfc3RhdHMuc2tiX2NvbXBsZXRlZCk7Ci0JbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCQkiJTIwcyA6ICUxMHVcbiIsICJTS0JzIERyb3BwZWQiLAotCQkJcHJpdi0+ZGVidWcucnhfc3RhdHMuc2tiX2Ryb3BwZWQpOwotCi0JaWYgKGxlbiA+IHNpemVvZihidWYpKQotCQlsZW4gPSBzaXplb2YoYnVmKTsKLQotCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc19yZWN2ID0gewotCS5yZWFkID0gcmVhZF9maWxlX3JlY3YsCi0JLm9wZW4gPSBhdGg5a19kZWJ1Z2ZzX29wZW4sCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLmxsc2VlayA9IGRlZmF1bHRfbGxzZWVrLAotfTsKLQotaW50IGF0aDlrX2h0Y19pbml0X2RlYnVnKHN0cnVjdCBhdGhfaHcgKmFoKQotewotCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwotCXN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKikgY29tbW9uLT5wcml2OwotCi0JaWYgKCFhdGg5a19kZWJ1Z2ZzX3Jvb3QpCi0JCXJldHVybiAtRU5PRU5UOwotCi0JcHJpdi0+ZGVidWcuZGVidWdmc19waHkgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIod2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLAotCQkJCQkJICAgICBhdGg5a19kZWJ1Z2ZzX3Jvb3QpOwotCWlmICghcHJpdi0+ZGVidWcuZGVidWdmc19waHkpCi0JCWdvdG8gZXJyOwotCi0JcHJpdi0+ZGVidWcuZGVidWdmc190Z3Rfc3RhdHMgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ0Z3Rfc3RhdHMiLCBTX0lSVVNSLAotCQkJCQkJICAgIHByaXYtPmRlYnVnLmRlYnVnZnNfcGh5LAotCQkJCQkJICAgIHByaXYsICZmb3BzX3RndF9zdGF0cyk7Ci0JaWYgKCFwcml2LT5kZWJ1Zy5kZWJ1Z2ZzX3RndF9zdGF0cykKLQkJZ290byBlcnI7Ci0KLQotCXByaXYtPmRlYnVnLmRlYnVnZnNfeG1pdCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInhtaXQiLCBTX0lSVVNSLAotCQkJCQkJICAgICAgIHByaXYtPmRlYnVnLmRlYnVnZnNfcGh5LAotCQkJCQkJICAgICAgIHByaXYsICZmb3BzX3htaXQpOwotCWlmICghcHJpdi0+ZGVidWcuZGVidWdmc194bWl0KQotCQlnb3RvIGVycjsKLQotCXByaXYtPmRlYnVnLmRlYnVnZnNfcmVjdiA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInJlY3YiLCBTX0lSVVNSLAotCQkJCQkJICAgICAgIHByaXYtPmRlYnVnLmRlYnVnZnNfcGh5LAotCQkJCQkJICAgICAgIHByaXYsICZmb3BzX3JlY3YpOwotCWlmICghcHJpdi0+ZGVidWcuZGVidWdmc19yZWN2KQotCQlnb3RvIGVycjsKLQotCXJldHVybiAwOwotCi1lcnI6Ci0JYXRoOWtfaHRjX2V4aXRfZGVidWcoYWgpOwotCXJldHVybiAtRU5PTUVNOwotfQotCi12b2lkIGF0aDlrX2h0Y19leGl0X2RlYnVnKHN0cnVjdCBhdGhfaHcgKmFoKQotewotCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwotCXN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKikgY29tbW9uLT5wcml2OwotCi0JZGVidWdmc19yZW1vdmUocHJpdi0+ZGVidWcuZGVidWdmc19yZWN2KTsKLQlkZWJ1Z2ZzX3JlbW92ZShwcml2LT5kZWJ1Zy5kZWJ1Z2ZzX3htaXQpOwotCWRlYnVnZnNfcmVtb3ZlKHByaXYtPmRlYnVnLmRlYnVnZnNfdGd0X3N0YXRzKTsKLQlkZWJ1Z2ZzX3JlbW92ZShwcml2LT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSk7Ci19Ci0KLWludCBhdGg5a19odGNfZGVidWdfY3JlYXRlX3Jvb3Qodm9pZCkKLXsKLQlhdGg5a19kZWJ1Z2ZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoS0JVSUxEX01PRE5BTUUsIE5VTEwpOwotCWlmICghYXRoOWtfZGVidWdmc19yb290KQotCQlyZXR1cm4gLUVOT0VOVDsKLQotCXJldHVybiAwOwotfQotCi12b2lkIGF0aDlrX2h0Y19kZWJ1Z19yZW1vdmVfcm9vdCh2b2lkKQotewotCWRlYnVnZnNfcmVtb3ZlKGF0aDlrX2RlYnVnZnNfcm9vdCk7Ci0JYXRoOWtfZGVidWdmc19yb290ID0gTlVMTDsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19BVEg5S19IVENfREVCVUdGUyAqLwotCiAvKioqKioqKi8KIC8qIEFOSSAqLwogLyoqKioqKiovCkBAIC0xMDQwLDcgKzg1Nyw4IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlpbnQgcGFkcG9zLCBwYWRzaXplLCByZXQ7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihwcml2LT5haCk7CisJaW50IHBhZHBvcywgcGFkc2l6ZSwgcmV0LCBzbG90OwogCiAJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIApAQCAtMTA0OCwzMCArODY2LDMyIEBACiAJcGFkcG9zID0gYXRoOWtfY21uX3BhZHBvcyhoZHItPmZyYW1lX2NvbnRyb2wpOwogCXBhZHNpemUgPSBwYWRwb3MgJiAzOwogCWlmIChwYWRzaXplICYmIHNrYi0+bGVuID4gcGFkcG9zKSB7Ci0JCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IHBhZHNpemUpCisJCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IHBhZHNpemUpIHsKKwkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1hNSVQsICJObyByb29tIGZvciBwYWRkaW5nXG4iKTsKIAkJCWdvdG8gZmFpbF90eDsKKwkJfQogCQlza2JfcHVzaChza2IsIHBhZHNpemUpOwogCQltZW1tb3ZlKHNrYi0+ZGF0YSwgc2tiLT5kYXRhICsgcGFkc2l6ZSwgcGFkcG9zKTsKIAl9CiAKLQlyZXQgPSBhdGg5a19odGNfdHhfc3RhcnQocHJpdiwgc2tiKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJaWYgKHJldCA9PSAtRU5PTUVNKSB7Ci0JCQlhdGhfZGJnKGF0aDlrX2h3X2NvbW1vbihwcml2LT5haCksIEFUSF9EQkdfWE1JVCwKLQkJCQkiU3RvcHBpbmcgVFggcXVldWVzXG4iKTsKLQkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhodyk7Ci0JCQlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOwotCQkJcHJpdi0+dHhfcXVldWVzX3N0b3AgPSB0cnVlOwotCQkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOwotCQl9IGVsc2UgewotCQkJYXRoX2RiZyhhdGg5a19od19jb21tb24ocHJpdi0+YWgpLCBBVEhfREJHX1hNSVQsCi0JCQkJIlR4IGZhaWxlZFxuIik7Ci0JCX0KKwlzbG90ID0gYXRoOWtfaHRjX3R4X2dldF9zbG90KHByaXYpOworCWlmIChzbG90IDwgMCkgeworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19YTUlULCAiTm8gZnJlZSBUWCBzbG90XG4iKTsKIAkJZ290byBmYWlsX3R4OwogCX0KIAorCXJldCA9IGF0aDlrX2h0Y190eF9zdGFydChwcml2LCBza2IsIHNsb3QsIGZhbHNlKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfWE1JVCwgIlR4IGZhaWxlZFxuIik7CisJCWdvdG8gY2xlYXJfc2xvdDsKKwl9CisKKwlhdGg5a19odGNfY2hlY2tfc3RvcF9xdWV1ZXMocHJpdik7CisKIAlyZXR1cm47CiAKK2NsZWFyX3Nsb3Q6CisJYXRoOWtfaHRjX3R4X2NsZWFyX3Nsb3QocHJpdiwgc2xvdCk7CiBmYWlsX3R4OgogCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiB9CkBAIC0xMTIyLDcgKzk0Miw3IEBACiAKIAlhdGg5a19ob3N0X3J4X2luaXQocHJpdik7CiAKLQlyZXQgPSBhdGg5a19odGNfdXBkYXRlX2NhcF90YXJnZXQocHJpdik7CisJcmV0ID0gYXRoOWtfaHRjX3VwZGF0ZV9jYXBfdGFyZ2V0KHByaXYsIDApOwogCWlmIChyZXQpCiAJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKIAkJCSJGYWlsZWQgdG8gdXBkYXRlIGNhcGFiaWxpdHkgaW4gdGFyZ2V0XG4iKTsKQEAgLTExMzAsMTIgKzk1MCwxNSBAQAogCXByaXYtPm9wX2ZsYWdzICY9IH5PUF9JTlZBTElEOwogCWh0Y19zdGFydChwcml2LT5odGMpOwogCi0Jc3Bpbl9sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKLQlwcml2LT50eF9xdWV1ZXNfc3RvcCA9IGZhbHNlOwotCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJnByaXYtPnR4LnR4X2xvY2spOworCXByaXYtPnR4LmZsYWdzICY9IH5BVEg5S19IVENfT1BfVFhfUVVFVUVTX1NUT1A7CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4LnR4X2xvY2spOwogCiAJaWVlZTgwMjExX3dha2VfcXVldWVzKGh3KTsKIAorCW1vZF90aW1lcigmcHJpdi0+dHguY2xlYW51cF90aW1lciwKKwkJICBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhBVEg5S19IVENfVFhfQ0xFQU5VUF9JTlRFUlZBTCkpOworCiAJaWYgKGFoLT5idGNvZXhfaHcuc2NoZW1lID09IEFUSF9CVENPRVhfQ0ZHXzNXSVJFKSB7CiAJCWF0aDlrX2h3X2J0Y29leF9zZXRfd2VpZ2h0KGFoLCBBUl9CVF9DT0VYX1dHSFQsCiAJCQkJCSAgIEFSX1NUT01QX0xPV19XTEFOX1dHSFQpOwpAQCAtMTE1Miw3ICs5NzUsNyBAQAogCXN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCXN0cnVjdCBhdGhfaHcgKmFoID0gcHJpdi0+YWg7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7Ci0JaW50IHJldCA9IDA7CisJaW50IHJldCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CiAJdTggY21kX3JzcDsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKQEAgLTExNjQsMjUgKzk4NywyNyBAQAogCX0KIAogCWF0aDlrX2h0Y19wc193YWtldXAocHJpdik7Ci0JaHRjX3N0b3AocHJpdi0+aHRjKTsKKwogCVdNSV9DTUQoV01JX0RJU0FCTEVfSU5UUl9DTURJRCk7CiAJV01JX0NNRChXTUlfRFJBSU5fVFhRX0FMTF9DTURJRCk7CiAJV01JX0NNRChXTUlfU1RPUF9SRUNWX0NNRElEKTsKIAotCXRhc2tsZXRfa2lsbCgmcHJpdi0+c3diYV90YXNrbGV0KTsKIAl0YXNrbGV0X2tpbGwoJnByaXYtPnJ4X3Rhc2tsZXQpOwotCXRhc2tsZXRfa2lsbCgmcHJpdi0+dHhfdGFza2xldCk7CiAKLQlza2JfcXVldWVfcHVyZ2UoJnByaXYtPnR4X3F1ZXVlKTsKKwlkZWxfdGltZXJfc3luYygmcHJpdi0+dHguY2xlYW51cF90aW1lcik7CisJYXRoOWtfaHRjX3R4X2RyYWluKHByaXYpOworCWF0aDlrX3dtaV9ldmVudF9kcmFpbihwcml2KTsKIAogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJLyogQ2FuY2VsIGFsbCB0aGUgcnVubmluZyB0aW1lcnMvd29yayAuLiAqLwogCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPmZhdGFsX3dvcmspOwogCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPnBzX3dvcmspOwotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+YXRoOWtfbGVkX2JsaW5rX3dvcmspOworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFMKKwljYW5jZWxfd29ya19zeW5jKCZwcml2LT5sZWRfd29yayk7CisjZW5kaWYKIAlhdGg5a19odGNfc3RvcF9hbmkocHJpdik7Ci0JYXRoOWtfbGVkX3N0b3BfYnJpZ2h0bmVzcyhwcml2KTsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIApAQCAtMTI0NSwxMyArMTA3MCwxMyBAQAogCiAJc3dpdGNoICh2aWYtPnR5cGUpIHsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046Ci0JCWh2aWYub3Btb2RlID0gY3B1X3RvX2JlMzIoSFRDX01fU1RBKTsKKwkJaHZpZi5vcG1vZGUgPSBIVENfTV9TVEE7CiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6Ci0JCWh2aWYub3Btb2RlID0gY3B1X3RvX2JlMzIoSFRDX01fSUJTUyk7CisJCWh2aWYub3Btb2RlID0gSFRDX01fSUJTUzsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKLQkJaHZpZi5vcG1vZGUgPSBjcHVfdG9fYmUzMihIVENfTV9IT1NUQVApOworCQlodmlmLm9wbW9kZSA9IEhUQ19NX0hPU1RBUDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYXRoX2Vycihjb21tb24sCkBAIC0xMjgxLDE0ICsxMTA2LDIwIEBACiAKIAlwcml2LT52aWZfc2xvdCB8PSAoMSA8PCBhdnAtPmluZGV4KTsKIAlwcml2LT5udmlmcysrOwotCXByaXYtPnZpZiA9IHZpZjsKIAogCUlOQ19WSUYocHJpdiwgdmlmLT50eXBlKTsKKworCWlmICgodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB8fAorCSAgICAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSkKKwkJYXRoOWtfaHRjX2Fzc2lnbl9ic2xvdChwcml2LCB2aWYpOworCiAJYXRoOWtfaHRjX3NldF9vcG1vZGUocHJpdik7CiAKIAlpZiAoKHByaXYtPmFoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApICYmCi0JICAgICEocHJpdi0+b3BfZmxhZ3MgJiBPUF9BTklfUlVOTklORykpCisJICAgICEocHJpdi0+b3BfZmxhZ3MgJiBPUF9BTklfUlVOTklORykpIHsKKwkJYXRoOWtfaHdfc2V0X3RzZmFkanVzdChwcml2LT5haCwgMSk7CiAJCWF0aDlrX2h0Y19zdGFydF9hbmkocHJpdik7CisJfQogCiAJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLAogCQkiQXR0YWNoIGEgVklGIG9mIHR5cGU6ICVkIGF0IGlkeDogJWRcbiIsIHZpZi0+dHlwZSwgYXZwLT5pbmRleCk7CkBAIC0xMzE3LDEzICsxMTQ4LDIxIEBACiAJbWVtY3B5KCZodmlmLm15YWRkciwgdmlmLT5hZGRyLCBFVEhfQUxFTik7CiAJaHZpZi5pbmRleCA9IGF2cC0+aW5kZXg7CiAJV01JX0NNRF9CVUYoV01JX1ZBUF9SRU1PVkVfQ01ESUQsICZodmlmKTsKKwlpZiAocmV0KSB7CisJCWF0aF9lcnIoY29tbW9uLCAiVW5hYmxlIHRvIHJlbW92ZSBpbnRlcmZhY2UgYXQgaWR4OiAlZFxuIiwKKwkJCWF2cC0+aW5kZXgpOworCX0KIAlwcml2LT5udmlmcy0tOwogCXByaXYtPnZpZl9zbG90ICY9IH4oMSA8PCBhdnAtPmluZGV4KTsKIAogCWF0aDlrX2h0Y19yZW1vdmVfc3RhdGlvbihwcml2LCB2aWYsIE5VTEwpOwotCXByaXYtPnZpZiA9IE5VTEw7CiAKIAlERUNfVklGKHByaXYsIHZpZi0+dHlwZSk7CisKKwlpZiAoKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgfHwKKwkgICAgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykpCisJCWF0aDlrX2h0Y19yZW1vdmVfYnNsb3QocHJpdiwgdmlmKTsKKwogCWF0aDlrX2h0Y19zZXRfb3Btb2RlKHByaXYpOwogCiAJLyoKQEAgLTE0OTMsMTAgKzEzMzIsMTMgQEAKIAkJCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQogewogCXN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBhdGg5a19odGNfc3RhICppc3RhOwogCWludCByZXQ7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJYXRoOWtfaHRjX3BzX3dha2V1cChwcml2KTsKKwlpc3RhID0gKHN0cnVjdCBhdGg5a19odGNfc3RhICopIHN0YS0+ZHJ2X3ByaXY7CisJaHRjX3N0YV9kcmFpbihwcml2LT5odGMsIGlzdGEtPmluZGV4KTsKIAlyZXQgPSBhdGg5a19odGNfcmVtb3ZlX3N0YXRpb24ocHJpdiwgdmlmLCBzdGEpOwogCWF0aDlrX2h0Y19wc19yZXN0b3JlKHByaXYpOwogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwpAQCAtMTY0NCw2ICsxNDg2LDcgQEAKIAlpZiAoKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCkgJiYgYnNzX2NvbmYtPmVuYWJsZV9iZWFjb24pIHsKIAkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLAogCQkJIkJlYWNvbiBlbmFibGVkIGZvciBCU1M6ICVwTVxuIiwgYnNzX2NvbmYtPmJzc2lkKTsKKwkJYXRoOWtfaHRjX3NldF90c2ZhZGp1c3QocHJpdiwgdmlmKTsKIAkJcHJpdi0+b3BfZmxhZ3MgfD0gT1BfRU5BQkxFX0JFQUNPTjsKIAkJYXRoOWtfaHRjX2JlYWNvbl9jb25maWcocHJpdiwgdmlmKTsKIAl9CkBAIC0xNzQxLDYgKzE1ODQsNyBAQAogCWludCByZXQgPSAwOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCWF0aDlrX2h0Y19wc193YWtldXAocHJpdik7CiAKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUQVJUOgpAQCAtMTc1OCwxNCArMTYwMiwxNSBAQAogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9PUEVSQVRJT05BTDoKIAkJaXN0YSA9IChzdHJ1Y3QgYXRoOWtfaHRjX3N0YSAqKSBzdGEtPmRydl9wcml2OwotCQlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCQlzcGluX2xvY2tfYmgoJnByaXYtPnR4LnR4X2xvY2spOwogCQlpc3RhLT50aWRfc3RhdGVbdGlkXSA9IEFHR1JfT1BFUkFUSU9OQUw7Ci0JCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4LnR4X2xvY2spOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlhdGhfZXJyKGF0aDlrX2h3X2NvbW1vbihwcml2LT5haCksICJVbmtub3duIEFNUERVIGFjdGlvblxuIik7CiAJfQogCisJYXRoOWtfaHRjX3BzX3Jlc3RvcmUocHJpdik7CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMTgxNiw2ICsxNjYxLDU1IEBACiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CiAKKy8qCisgKiBDdXJyZW50bHksIHRoaXMgaXMgdXNlZCBvbmx5IGZvciBzZWxlY3RpbmcgdGhlIG1pbmltdW0gcmF0ZQorICogZm9yIG1hbmFnZW1lbnQgZnJhbWVzLCByYXRlIHNlbGVjdGlvbiBmb3IgZGF0YSBmcmFtZXMgcmVtYWluCisgKiB1bmFmZmVjdGVkLgorICovCitzdGF0aWMgaW50IGF0aDlrX2h0Y19zZXRfYml0cmF0ZV9tYXNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGNmZzgwMjExX2JpdHJhdGVfbWFzayAqbWFzaykKK3sKKwlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHByaXYtPmFoKTsKKwlzdHJ1Y3QgYXRoOWtfaHRjX3RhcmdldF9yYXRlX21hc2sgdG1hc2s7CisJc3RydWN0IGF0aDlrX2h0Y192aWYgKmF2cCA9ICh2b2lkICopdmlmLT5kcnZfcHJpdjsKKwlpbnQgcmV0ID0gMDsKKwl1OCBjbWRfcnNwOworCisJbWVtc2V0KCZ0bWFzaywgMCwgc2l6ZW9mKHN0cnVjdCBhdGg5a19odGNfdGFyZ2V0X3JhdGVfbWFzaykpOworCisJdG1hc2sudmlmX2luZGV4ID0gYXZwLT5pbmRleDsKKwl0bWFzay5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKKwl0bWFzay5tYXNrID0gY3B1X3RvX2JlMzIobWFzay0+Y29udHJvbFtJRUVFODAyMTFfQkFORF8yR0haXS5sZWdhY3kpOworCisJV01JX0NNRF9CVUYoV01JX0JJVFJBVEVfTUFTS19DTURJRCwgJnRtYXNrKTsKKwlpZiAocmV0KSB7CisJCWF0aF9lcnIoY29tbW9uLAorCQkJIlVuYWJsZSB0byBzZXQgMkcgcmF0ZSBtYXNrIGZvciAiCisJCQkiaW50ZXJmYWNlIGF0IGlkeDogJWRcbiIsIGF2cC0+aW5kZXgpOworCQlnb3RvIG91dDsKKwl9CisKKwl0bWFzay5iYW5kID0gSUVFRTgwMjExX0JBTkRfNUdIWjsKKwl0bWFzay5tYXNrID0gY3B1X3RvX2JlMzIobWFzay0+Y29udHJvbFtJRUVFODAyMTFfQkFORF81R0haXS5sZWdhY3kpOworCisJV01JX0NNRF9CVUYoV01JX0JJVFJBVEVfTUFTS19DTURJRCwgJnRtYXNrKTsKKwlpZiAocmV0KSB7CisJCWF0aF9lcnIoY29tbW9uLAorCQkJIlVuYWJsZSB0byBzZXQgNUcgcmF0ZSBtYXNrIGZvciAiCisJCQkiaW50ZXJmYWNlIGF0IGlkeDogJWRcbiIsIGF2cC0+aW5kZXgpOworCQlnb3RvIG91dDsKKwl9CisKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DT05GSUcsCisJCSJTZXQgYml0cmF0ZSBtYXNrczogMHgleCwgMHgleFxuIiwKKwkJbWFzay0+Y29udHJvbFtJRUVFODAyMTFfQkFORF8yR0haXS5sZWdhY3ksCisJCW1hc2stPmNvbnRyb2xbSUVFRTgwMjExX0JBTkRfNUdIWl0ubGVnYWN5KTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCiBzdHJ1Y3QgaWVlZTgwMjExX29wcyBhdGg5a19odGNfb3BzID0gewogCS50eCAgICAgICAgICAgICAgICAgPSBhdGg5a19odGNfdHgsCiAJLnN0YXJ0ICAgICAgICAgICAgICA9IGF0aDlrX2h0Y19zdGFydCwKQEAgLTE4MzgsNCArMTczMiw1IEBACiAJLnNldF9ydHNfdGhyZXNob2xkICA9IGF0aDlrX2h0Y19zZXRfcnRzX3RocmVzaG9sZCwKIAkucmZraWxsX3BvbGwgICAgICAgID0gYXRoOWtfaHRjX3Jma2lsbF9wb2xsX3N0YXRlLAogCS5zZXRfY292ZXJhZ2VfY2xhc3MgPSBhdGg5a19odGNfc2V0X2NvdmVyYWdlX2NsYXNzLAorCS5zZXRfYml0cmF0ZV9tYXNrICAgPSBhdGg5a19odGNfc2V0X2JpdHJhdGVfbWFzaywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMKaW5kZXggNGE0ZjI3Yi4uYTg5OGRhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYwpAQCAtNTMsNiArNTMsMTM4IEBACiAJfQogfQogCit2b2lkIGF0aDlrX2h0Y19jaGVja19zdG9wX3F1ZXVlcyhzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpCit7CisJc3Bpbl9sb2NrX2JoKCZwcml2LT50eC50eF9sb2NrKTsKKwlwcml2LT50eC5xdWV1ZWRfY250Kys7CisJaWYgKChwcml2LT50eC5xdWV1ZWRfY250ID49IEFUSDlLX0hUQ19UWF9USFJFU0hPTEQpICYmCisJICAgICEocHJpdi0+dHguZmxhZ3MgJiBBVEg5S19IVENfT1BfVFhfUVVFVUVTX1NUT1ApKSB7CisJCXByaXYtPnR4LmZsYWdzIHw9IEFUSDlLX0hUQ19PUF9UWF9RVUVVRVNfU1RPUDsKKwkJaWVlZTgwMjExX3N0b3BfcXVldWVzKHByaXYtPmh3KTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4LnR4X2xvY2spOworfQorCit2b2lkIGF0aDlrX2h0Y19jaGVja193YWtlX3F1ZXVlcyhzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpCit7CisJc3Bpbl9sb2NrX2JoKCZwcml2LT50eC50eF9sb2NrKTsKKwlpZiAoKHByaXYtPnR4LnF1ZXVlZF9jbnQgPCBBVEg5S19IVENfVFhfVEhSRVNIT0xEKSAmJgorCSAgICAocHJpdi0+dHguZmxhZ3MgJiBBVEg5S19IVENfT1BfVFhfUVVFVUVTX1NUT1ApKSB7CisJCXByaXYtPnR4LmZsYWdzICY9IH5BVEg5S19IVENfT1BfVFhfUVVFVUVTX1NUT1A7CisJCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhwcml2LT5odyk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eC50eF9sb2NrKTsKK30KKworaW50IGF0aDlrX2h0Y190eF9nZXRfc2xvdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpCit7CisJaW50IHNsb3Q7CisKKwlzcGluX2xvY2tfYmgoJnByaXYtPnR4LnR4X2xvY2spOworCXNsb3QgPSBmaW5kX2ZpcnN0X3plcm9fYml0KHByaXYtPnR4LnR4X3Nsb3QsIE1BWF9UWF9CVUZfTlVNKTsKKwlpZiAoc2xvdCA+PSBNQVhfVFhfQlVGX05VTSkgeworCQlzcGluX3VubG9ja19iaCgmcHJpdi0+dHgudHhfbG9jayk7CisJCXJldHVybiAtRU5PQlVGUzsKKwl9CisJX19zZXRfYml0KHNsb3QsIHByaXYtPnR4LnR4X3Nsb3QpOworCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eC50eF9sb2NrKTsKKworCXJldHVybiBzbG90OworfQorCit2b2lkIGF0aDlrX2h0Y190eF9jbGVhcl9zbG90KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwgaW50IHNsb3QpCit7CisJc3Bpbl9sb2NrX2JoKCZwcml2LT50eC50eF9sb2NrKTsKKwlfX2NsZWFyX2JpdChzbG90LCBwcml2LT50eC50eF9zbG90KTsKKwlzcGluX3VubG9ja19iaCgmcHJpdi0+dHgudHhfbG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSBodGNfZW5kcG9pbnRfaWQgZ2V0X2h0Y19lcGlkKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwKKwkJCQkJCXUxNiBxbnVtKQoreworCWVudW0gaHRjX2VuZHBvaW50X2lkIGVwaWQ7CisKKwlzd2l0Y2ggKHFudW0pIHsKKwljYXNlIDA6CisJCVRYX1FTVEFUX0lOQyhXTUVfQUNfVk8pOworCQllcGlkID0gcHJpdi0+ZGF0YV92b19lcDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlUWF9RU1RBVF9JTkMoV01FX0FDX1ZJKTsKKwkJZXBpZCA9IHByaXYtPmRhdGFfdmlfZXA7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJVFhfUVNUQVRfSU5DKFdNRV9BQ19CRSk7CisJCWVwaWQgPSBwcml2LT5kYXRhX2JlX2VwOworCQlicmVhazsKKwljYXNlIDM6CisJZGVmYXVsdDoKKwkJVFhfUVNUQVRfSU5DKFdNRV9BQ19CSyk7CisJCWVwaWQgPSBwcml2LT5kYXRhX2JrX2VwOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZXBpZDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZl9oZWFkKgorZ2V0X2h0Y19lcGlkX3F1ZXVlKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwgdTggZXBpZCkKK3sKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHByaXYtPmFoKTsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICplcGlkX3F1ZXVlID0gTlVMTDsKKworCWlmIChlcGlkID09IHByaXYtPm1nbXRfZXApCisJCWVwaWRfcXVldWUgPSAmcHJpdi0+dHgubWdtdF9lcF9xdWV1ZTsKKwllbHNlIGlmIChlcGlkID09IHByaXYtPmNhYl9lcCkKKwkJZXBpZF9xdWV1ZSA9ICZwcml2LT50eC5jYWJfZXBfcXVldWU7CisJZWxzZSBpZiAoZXBpZCA9PSBwcml2LT5kYXRhX2JlX2VwKQorCQllcGlkX3F1ZXVlID0gJnByaXYtPnR4LmRhdGFfYmVfcXVldWU7CisJZWxzZSBpZiAoZXBpZCA9PSBwcml2LT5kYXRhX2JrX2VwKQorCQllcGlkX3F1ZXVlID0gJnByaXYtPnR4LmRhdGFfYmtfcXVldWU7CisJZWxzZSBpZiAoZXBpZCA9PSBwcml2LT5kYXRhX3ZpX2VwKQorCQllcGlkX3F1ZXVlID0gJnByaXYtPnR4LmRhdGFfdmlfcXVldWU7CisJZWxzZSBpZiAoZXBpZCA9PSBwcml2LT5kYXRhX3ZvX2VwKQorCQllcGlkX3F1ZXVlID0gJnByaXYtPnR4LmRhdGFfdm9fcXVldWU7CisJZWxzZQorCQlhdGhfZXJyKGNvbW1vbiwgIkludmFsaWQgRVBJRDogJWRcbiIsIGVwaWQpOworCisJcmV0dXJuIGVwaWRfcXVldWU7Cit9CisKKy8qCisgKiBSZW1vdmVzIHRoZSBkcml2ZXIgaGVhZGVyIGFuZCByZXR1cm5zIHRoZSBUWCBzbG90IG51bWJlcgorICovCitzdGF0aWMgaW5saW5lIGludCBzdHJpcF9kcnZfaGVhZGVyKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwKKwkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24ocHJpdi0+YWgpOworCXN0cnVjdCBhdGg5a19odGNfdHhfY3RsICp0eF9jdGw7CisJaW50IHNsb3Q7CisKKwl0eF9jdGwgPSBIVENfU0tCX0NCKHNrYik7CisKKwlpZiAodHhfY3RsLT5lcGlkID09IHByaXYtPm1nbXRfZXApIHsKKwkJc3RydWN0IHR4X21nbXRfaGRyICp0eF9taGRyID0KKwkJCShzdHJ1Y3QgdHhfbWdtdF9oZHIgKilza2ItPmRhdGE7CisJCXNsb3QgPSB0eF9taGRyLT5jb29raWU7CisJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCB0eF9tZ210X2hkcikpOworCX0gZWxzZSBpZiAoKHR4X2N0bC0+ZXBpZCA9PSBwcml2LT5kYXRhX2JrX2VwKSB8fAorCQkgICAodHhfY3RsLT5lcGlkID09IHByaXYtPmRhdGFfYmVfZXApIHx8CisJCSAgICh0eF9jdGwtPmVwaWQgPT0gcHJpdi0+ZGF0YV92aV9lcCkgfHwKKwkJICAgKHR4X2N0bC0+ZXBpZCA9PSBwcml2LT5kYXRhX3ZvX2VwKSB8fAorCQkgICAodHhfY3RsLT5lcGlkID09IHByaXYtPmNhYl9lcCkpIHsKKwkJc3RydWN0IHR4X2ZyYW1lX2hkciAqdHhfZmhkciA9CisJCQkoc3RydWN0IHR4X2ZyYW1lX2hkciAqKXNrYi0+ZGF0YTsKKwkJc2xvdCA9IHR4X2ZoZHItPmNvb2tpZTsKKwkJc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHR4X2ZyYW1lX2hkcikpOworCX0gZWxzZSB7CisJCWF0aF9lcnIoY29tbW9uLCAiVW5zdXBwb3J0ZWQgRVBJRDogJWRcbiIsIHR4X2N0bC0+ZXBpZCk7CisJCXNsb3QgPSAtRUlOVkFMOworCX0KKworCXJldHVybiBzbG90OworfQorCiBpbnQgYXRoX2h0Y190eHFfdXBkYXRlKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwgaW50IHFudW0sCiAJCSAgICAgICBzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcWluZm8pCiB7CkBAIC03OSwyMyArMjExLDE0MCBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotaW50IGF0aDlrX2h0Y190eF9zdGFydChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgdm9pZCBhdGg5a19odGNfdHhfbWdtdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgYXRoOWtfaHRjX3ZpZiAqYXZwLAorCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgIHU4IHN0YV9pZHgsIHU4IHZpZl9pZHgsIHU4IHNsb3QpCit7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCXN0cnVjdCB0eF9tZ210X2hkciBtZ210X2hkcjsKKwlzdHJ1Y3QgYXRoOWtfaHRjX3R4X2N0bCAqdHhfY3RsOworCXU4ICp0eF9maGRyOworCisJdHhfY3RsID0gSFRDX1NLQl9DQihza2IpOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisKKwltZW1zZXQodHhfY3RsLCAwLCBzaXplb2YoKnR4X2N0bCkpOworCW1lbXNldCgmbWdtdF9oZHIsIDAsIHNpemVvZihzdHJ1Y3QgdHhfbWdtdF9oZHIpKTsKKworCS8qCisJICogU2V0IHRoZSBUU0YgYWRqdXN0IHZhbHVlIGZvciBwcm9iZSByZXNwb25zZQorCSAqIGZyYW1lIGFsc28uCisJICovCisJaWYgKGF2cCAmJiB1bmxpa2VseShpZWVlODAyMTFfaXNfcHJvYmVfcmVzcChoZHItPmZyYW1lX2NvbnRyb2wpKSkgeworCQltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKXNrYi0+ZGF0YTsKKwkJbWdtdC0+dS5wcm9iZV9yZXNwLnRpbWVzdGFtcCA9IGF2cC0+dHNmYWRqdXN0OworCX0KKworCXR4X2N0bC0+dHlwZSA9IEFUSDlLX0hUQ19NR01UOworCisJbWdtdF9oZHIubm9kZV9pZHggPSBzdGFfaWR4OworCW1nbXRfaGRyLnZpZl9pZHggPSB2aWZfaWR4OworCW1nbXRfaGRyLnRpZG5vID0gMDsKKwltZ210X2hkci5mbGFncyA9IDA7CisJbWdtdF9oZHIuY29va2llID0gc2xvdDsKKworCW1nbXRfaGRyLmtleV90eXBlID0gYXRoOWtfY21uX2dldF9od19jcnlwdG9fa2V5dHlwZShza2IpOworCWlmIChtZ210X2hkci5rZXlfdHlwZSA9PSBBVEg5S19LRVlfVFlQRV9DTEVBUikKKwkJbWdtdF9oZHIua2V5aXggPSAodTgpIEFUSDlLX1RYS0VZSVhfSU5WQUxJRDsKKwllbHNlCisJCW1nbXRfaGRyLmtleWl4ID0gdHhfaW5mby0+Y29udHJvbC5od19rZXktPmh3X2tleV9pZHg7CisKKwl0eF9maGRyID0gc2tiX3B1c2goc2tiLCBzaXplb2YobWdtdF9oZHIpKTsKKwltZW1jcHkodHhfZmhkciwgKHU4ICopICZtZ210X2hkciwgc2l6ZW9mKG1nbXRfaGRyKSk7CisJdHhfY3RsLT5lcGlkID0gcHJpdi0+bWdtdF9lcDsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfaHRjX3R4X2RhdGEoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgICB1OCBzdGFfaWR4LCB1OCB2aWZfaWR4LCB1OCBzbG90LAorCQkJICAgICAgYm9vbCBpc19jYWIpCit7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CisJc3RydWN0IGF0aDlrX2h0Y190eF9jdGwgKnR4X2N0bDsKKwlzdHJ1Y3QgdHhfZnJhbWVfaGRyIHR4X2hkcjsKKwl1MzIgZmxhZ3MgPSAwOworCXU4ICpxYywgKnR4X2ZoZHI7CisJdTE2IHFudW07CisKKwl0eF9jdGwgPSBIVENfU0tCX0NCKHNrYik7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKworCW1lbXNldCh0eF9jdGwsIDAsIHNpemVvZigqdHhfY3RsKSk7CisJbWVtc2V0KCZ0eF9oZHIsIDAsIHNpemVvZihzdHJ1Y3QgdHhfZnJhbWVfaGRyKSk7CisKKwl0eF9oZHIubm9kZV9pZHggPSBzdGFfaWR4OworCXR4X2hkci52aWZfaWR4ID0gdmlmX2lkeDsKKwl0eF9oZHIuY29va2llID0gc2xvdDsKKworCS8qCisJICogVGhpcyBpcyBhIGJpdCByZWR1bmRhbnQgYnV0IGl0IGhlbHBzIHRvIGdldAorCSAqIHRoZSBwZXItcGFja2V0IGluZGV4IHF1aWNrbHkgd2hlbiBkcmFpbmluZyB0aGUKKwkgKiBUWCBxdWV1ZSBpbiB0aGUgSElGIGxheWVyLiBPdGhlcndpc2Ugd2Ugd291bGQKKwkgKiBoYXZlIHRvIHBhcnNlIHRoZSBwYWNrZXQgY29udGVudHMgLi4uCisJICovCisJdHhfY3RsLT5zdGFfaWR4ID0gc3RhX2lkeDsKKworCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpIHsKKwkJdHhfY3RsLT50eXBlID0gQVRIOUtfSFRDX0FNUERVOworCQl0eF9oZHIuZGF0YV90eXBlID0gQVRIOUtfSFRDX0FNUERVOworCX0gZWxzZSB7CisJCXR4X2N0bC0+dHlwZSA9IEFUSDlLX0hUQ19OT1JNQUw7CisJCXR4X2hkci5kYXRhX3R5cGUgPSBBVEg5S19IVENfTk9STUFMOworCX0KKworCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLT5mcmFtZV9jb250cm9sKSkgeworCQlxYyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpOworCQl0eF9oZHIudGlkbm8gPSBxY1swXSAmIElFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLOworCX0KKworCS8qIENoZWNrIGZvciBSVFMgcHJvdGVjdGlvbiAqLworCWlmIChwcml2LT5ody0+d2lwaHktPnJ0c190aHJlc2hvbGQgIT0gKHUzMikgLTEpCisJCWlmIChza2ItPmxlbiA+IHByaXYtPmh3LT53aXBoeS0+cnRzX3RocmVzaG9sZCkKKwkJCWZsYWdzIHw9IEFUSDlLX0hUQ19UWF9SVFNDVFM7CisKKwkvKiBDVFMtdG8tc2VsZiAqLworCWlmICghKGZsYWdzICYgQVRIOUtfSFRDX1RYX1JUU0NUUykgJiYKKwkgICAgKHZpZiAmJiB2aWYtPmJzc19jb25mLnVzZV9jdHNfcHJvdCkpCisJCWZsYWdzIHw9IEFUSDlLX0hUQ19UWF9DVFNPTkxZOworCisJdHhfaGRyLmZsYWdzID0gY3B1X3RvX2JlMzIoZmxhZ3MpOworCXR4X2hkci5rZXlfdHlwZSA9IGF0aDlrX2Ntbl9nZXRfaHdfY3J5cHRvX2tleXR5cGUoc2tiKTsKKwlpZiAodHhfaGRyLmtleV90eXBlID09IEFUSDlLX0tFWV9UWVBFX0NMRUFSKQorCQl0eF9oZHIua2V5aXggPSAodTgpIEFUSDlLX1RYS0VZSVhfSU5WQUxJRDsKKwllbHNlCisJCXR4X2hkci5rZXlpeCA9IHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5LT5od19rZXlfaWR4OworCisJdHhfZmhkciA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHR4X2hkcikpOworCW1lbWNweSh0eF9maGRyLCAodTggKikgJnR4X2hkciwgc2l6ZW9mKHR4X2hkcikpOworCisJaWYgKGlzX2NhYikgeworCQlDQUJfU1RBVF9JTkM7CisJCXR4X2N0bC0+ZXBpZCA9IHByaXYtPmNhYl9lcDsKKwkJcmV0dXJuOworCX0KKworCXFudW0gPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKKwl0eF9jdGwtPmVwaWQgPSBnZXRfaHRjX2VwaWQocHJpdiwgcW51bSk7Cit9CisKK2ludCBhdGg5a19odGNfdHhfc3RhcnQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAorCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICAgIHU4IHNsb3QsIGJvb2wgaXNfY2FiKQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEgPSB0eF9pbmZvLT5jb250cm9sLnN0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmID0gdHhfaW5mby0+Y29udHJvbC52aWY7CiAJc3RydWN0IGF0aDlrX2h0Y19zdGEgKmlzdGE7Ci0Jc3RydWN0IGF0aDlrX2h0Y192aWYgKmF2cDsKLQlzdHJ1Y3QgYXRoOWtfaHRjX3R4X2N0bCB0eF9jdGw7Ci0JZW51bSBodGNfZW5kcG9pbnRfaWQgZXBpZDsKLQl1MTYgcW51bTsKLQlfX2xlMTYgZmM7Ci0JdTggKnR4X2ZoZHI7CisJc3RydWN0IGF0aDlrX2h0Y192aWYgKmF2cCA9IE5VTEw7CiAJdTggc3RhX2lkeCwgdmlmX2lkeDsKIAogCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7Ci0JZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CiAKIAkvKgogCSAqIEZpbmQgb3V0IG9uIHdoaWNoIGludGVyZmFjZSB0aGlzIHBhY2tldCBoYXMgdG8gYmUKQEAgLTEyNCwyMTggKzM3Myw0MzAgQEAKIAkJc3RhX2lkeCA9IHByaXYtPnZpZl9zdGFfcG9zW3ZpZl9pZHhdOwogCX0KIAotCW1lbXNldCgmdHhfY3RsLCAwLCBzaXplb2Yoc3RydWN0IGF0aDlrX2h0Y190eF9jdGwpKTsKKwlpZiAoaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJYXRoOWtfaHRjX3R4X2RhdGEocHJpdiwgdmlmLCBza2IsCisJCQkJICBzdGFfaWR4LCB2aWZfaWR4LCBzbG90LCBpc19jYWIpOworCWVsc2UKKwkJYXRoOWtfaHRjX3R4X21nbXQocHJpdiwgYXZwLCBza2IsCisJCQkJICBzdGFfaWR4LCB2aWZfaWR4LCBzbG90KTsKIAotCWlmIChpZWVlODAyMTFfaXNfZGF0YShmYykpIHsKLQkJc3RydWN0IHR4X2ZyYW1lX2hkciB0eF9oZHI7Ci0JCXUzMiBmbGFncyA9IDA7Ci0JCXU4ICpxYzsKIAotCQltZW1zZXQoJnR4X2hkciwgMCwgc2l6ZW9mKHN0cnVjdCB0eF9mcmFtZV9oZHIpKTsKLQotCQl0eF9oZHIubm9kZV9pZHggPSBzdGFfaWR4OwotCQl0eF9oZHIudmlmX2lkeCA9IHZpZl9pZHg7Ci0KLQkJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkgewotCQkJdHhfY3RsLnR5cGUgPSBBVEg5S19IVENfQU1QRFU7Ci0JCQl0eF9oZHIuZGF0YV90eXBlID0gQVRIOUtfSFRDX0FNUERVOwotCQl9IGVsc2UgewotCQkJdHhfY3RsLnR5cGUgPSBBVEg5S19IVENfTk9STUFMOwotCQkJdHhfaGRyLmRhdGFfdHlwZSA9IEFUSDlLX0hUQ19OT1JNQUw7Ci0JCX0KLQotCQlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgewotCQkJcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKLQkJCXR4X2hkci50aWRubyA9IHFjWzBdICYgSUVFRTgwMjExX1FPU19DVExfVElEX01BU0s7Ci0JCX0KLQotCQkvKiBDaGVjayBmb3IgUlRTIHByb3RlY3Rpb24gKi8KLQkJaWYgKHByaXYtPmh3LT53aXBoeS0+cnRzX3RocmVzaG9sZCAhPSAodTMyKSAtMSkKLQkJCWlmIChza2ItPmxlbiA+IHByaXYtPmh3LT53aXBoeS0+cnRzX3RocmVzaG9sZCkKLQkJCQlmbGFncyB8PSBBVEg5S19IVENfVFhfUlRTQ1RTOwotCi0JCS8qIENUUy10by1zZWxmICovCi0JCWlmICghKGZsYWdzICYgQVRIOUtfSFRDX1RYX1JUU0NUUykgJiYKLQkJICAgICh2aWYgJiYgdmlmLT5ic3NfY29uZi51c2VfY3RzX3Byb3QpKQotCQkJZmxhZ3MgfD0gQVRIOUtfSFRDX1RYX0NUU09OTFk7Ci0KLQkJdHhfaGRyLmZsYWdzID0gY3B1X3RvX2JlMzIoZmxhZ3MpOwotCQl0eF9oZHIua2V5X3R5cGUgPSBhdGg5a19jbW5fZ2V0X2h3X2NyeXB0b19rZXl0eXBlKHNrYik7Ci0JCWlmICh0eF9oZHIua2V5X3R5cGUgPT0gQVRIOUtfS0VZX1RZUEVfQ0xFQVIpCi0JCQl0eF9oZHIua2V5aXggPSAodTgpIEFUSDlLX1RYS0VZSVhfSU5WQUxJRDsKLQkJZWxzZQotCQkJdHhfaGRyLmtleWl4ID0gdHhfaW5mby0+Y29udHJvbC5od19rZXktPmh3X2tleV9pZHg7Ci0KLQkJdHhfZmhkciA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHR4X2hkcikpOwotCQltZW1jcHkodHhfZmhkciwgKHU4ICopICZ0eF9oZHIsIHNpemVvZih0eF9oZHIpKTsKLQotCQlxbnVtID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7Ci0KLQkJc3dpdGNoIChxbnVtKSB7Ci0JCWNhc2UgMDoKLQkJCVRYX1FTVEFUX0lOQyhXTUVfQUNfVk8pOwotCQkJZXBpZCA9IHByaXYtPmRhdGFfdm9fZXA7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJVFhfUVNUQVRfSU5DKFdNRV9BQ19WSSk7Ci0JCQllcGlkID0gcHJpdi0+ZGF0YV92aV9lcDsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQlUWF9RU1RBVF9JTkMoV01FX0FDX0JFKTsKLQkJCWVwaWQgPSBwcml2LT5kYXRhX2JlX2VwOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzoKLQkJZGVmYXVsdDoKLQkJCVRYX1FTVEFUX0lOQyhXTUVfQUNfQkspOwotCQkJZXBpZCA9IHByaXYtPmRhdGFfYmtfZXA7Ci0JCQlicmVhazsKLQkJfQotCX0gZWxzZSB7Ci0JCXN0cnVjdCB0eF9tZ210X2hkciBtZ210X2hkcjsKLQotCQltZW1zZXQoJm1nbXRfaGRyLCAwLCBzaXplb2Yoc3RydWN0IHR4X21nbXRfaGRyKSk7Ci0KLQkJdHhfY3RsLnR5cGUgPSBBVEg5S19IVENfTk9STUFMOwotCi0JCW1nbXRfaGRyLm5vZGVfaWR4ID0gc3RhX2lkeDsKLQkJbWdtdF9oZHIudmlmX2lkeCA9IHZpZl9pZHg7Ci0JCW1nbXRfaGRyLnRpZG5vID0gMDsKLQkJbWdtdF9oZHIuZmxhZ3MgPSAwOwotCi0JCW1nbXRfaGRyLmtleV90eXBlID0gYXRoOWtfY21uX2dldF9od19jcnlwdG9fa2V5dHlwZShza2IpOwotCQlpZiAobWdtdF9oZHIua2V5X3R5cGUgPT0gQVRIOUtfS0VZX1RZUEVfQ0xFQVIpCi0JCQltZ210X2hkci5rZXlpeCA9ICh1OCkgQVRIOUtfVFhLRVlJWF9JTlZBTElEOwotCQllbHNlCi0JCQltZ210X2hkci5rZXlpeCA9IHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5LT5od19rZXlfaWR4OwotCi0JCXR4X2ZoZHIgPSBza2JfcHVzaChza2IsIHNpemVvZihtZ210X2hkcikpOwotCQltZW1jcHkodHhfZmhkciwgKHU4ICopICZtZ210X2hkciwgc2l6ZW9mKG1nbXRfaGRyKSk7Ci0JCWVwaWQgPSBwcml2LT5tZ210X2VwOwotCX0KLQotCXJldHVybiBodGNfc2VuZChwcml2LT5odGMsIHNrYiwgZXBpZCwgJnR4X2N0bCk7CisJcmV0dXJuIGh0Y19zZW5kKHByaXYtPmh0Yywgc2tiKTsKIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHRjX2NoZWNrX3R4X2FnZ3Ioc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAotCQkJCSAgICBzdHJ1Y3QgYXRoOWtfaHRjX3N0YSAqaXN0YSwgdTggdGlkKQorc3RhdGljIGlubGluZSBib29sIF9fYXRoOWtfaHRjX2NoZWNrX3R4X2FnZ3Ioc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAorCQkJCQkgICAgIHN0cnVjdCBhdGg5a19odGNfc3RhICppc3RhLCB1OCB0aWQpCiB7CiAJYm9vbCByZXQgPSBmYWxzZTsKIAotCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZwcml2LT50eC50eF9sb2NrKTsKIAlpZiAoKHRpZCA8IEFUSDlLX0hUQ19NQVhfVElEKSAmJiAoaXN0YS0+dGlkX3N0YXRlW3RpZF0gPT0gQUdHUl9TVE9QKSkKIAkJcmV0ID0gdHJ1ZTsKLQlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4LnR4X2xvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KIAotdm9pZCBhdGg5a190eF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyB2b2lkIGF0aDlrX2h0Y19jaGVja190eF9hZ2dyKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwKKwkJCQkgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSAoc3RydWN0IGF0aDlrX2h0Y19wcml2ICopZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOwogCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm87Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CiAJX19sZTE2IGZjOwogCi0Jd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmcHJpdi0+dHhfcXVldWUpKSAhPSBOVUxMKSB7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKIAotCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwotCQlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKLQkJdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQkJdmlmID0gdHhfaW5mby0+Y29udHJvbC52aWY7CisJcmN1X3JlYWRfbG9jaygpOwogCi0JCW1lbXNldCgmdHhfaW5mby0+c3RhdHVzLCAwLCBzaXplb2YodHhfaW5mby0+c3RhdHVzKSk7CisJc3RhID0gaWVlZTgwMjExX2ZpbmRfc3RhKHZpZiwgaGRyLT5hZGRyMSk7CisJaWYgKCFzdGEpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybjsKKwl9CiAKLQkJaWYgKCF2aWYpCi0JCQlnb3RvIHNlbmRfbWFjODAyMTE7CisJaWYgKHN0YSAmJiBjb25mX2lzX2h0KCZwcml2LT5ody0+Y29uZikgJiYKKwkgICAgIShza2ItPnByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX1BBRSkpKSB7CisJCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKSB7CisJCQl1OCAqcWMsIHRpZDsKKwkJCXN0cnVjdCBhdGg5a19odGNfc3RhICppc3RhOwogCi0JCXJjdV9yZWFkX2xvY2soKTsKKwkJCXFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7CisJCQl0aWQgPSBxY1swXSAmIDB4ZjsKKwkJCWlzdGEgPSAoc3RydWN0IGF0aDlrX2h0Y19zdGEgKilzdGEtPmRydl9wcml2OworCQkJaWYgKF9fYXRoOWtfaHRjX2NoZWNrX3R4X2FnZ3IocHJpdiwgaXN0YSwgdGlkKSkgeworCQkJCWllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKHN0YSwgdGlkLCAwKTsKKwkJCQlzcGluX2xvY2tfYmgoJnByaXYtPnR4LnR4X2xvY2spOworCQkJCWlzdGEtPnRpZF9zdGF0ZVt0aWRdID0gQUdHUl9QUk9HUkVTUzsKKwkJCQlzcGluX3VubG9ja19iaCgmcHJpdi0+dHgudHhfbG9jayk7CisJCQl9CisJCX0KKwl9CiAKLQkJc3RhID0gaWVlZTgwMjExX2ZpbmRfc3RhKHZpZiwgaGRyLT5hZGRyMSk7Ci0JCWlmICghc3RhKSB7Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJCWllZWU4MDIxMV90eF9zdGF0dXMocHJpdi0+aHcsIHNrYik7CisJcmN1X3JlYWRfdW5sb2NrKCk7Cit9CisKK3N0YXRpYyB2b2lkIGF0aDlrX2h0Y190eF9wcm9jZXNzKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwKKwkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgc3RydWN0IF9fd21pX2V2ZW50X3R4c3RhdHVzICp0eHMpCit7CisJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKKwlzdHJ1Y3QgYXRoOWtfaHRjX3R4X2N0bCAqdHhfY3RsOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbzsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGU7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjdXJfY29uZiA9ICZwcml2LT5ody0+Y29uZjsKKwlib29sIHR4b2s7CisJaW50IHNsb3Q7CisKKwlzbG90ID0gc3RyaXBfZHJ2X2hlYWRlcihwcml2LCBza2IpOworCWlmIChzbG90IDwgMCkgeworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQlyZXR1cm47CisJfQorCisJdHhfY3RsID0gSFRDX1NLQl9DQihza2IpOworCXR4b2sgPSB0eF9jdGwtPnR4b2s7CisJdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwl2aWYgPSB0eF9pbmZvLT5jb250cm9sLnZpZjsKKwlyYXRlID0gJnR4X2luZm8tPnN0YXR1cy5yYXRlc1swXTsKKworCW1lbXNldCgmdHhfaW5mby0+c3RhdHVzLCAwLCBzaXplb2YodHhfaW5mby0+c3RhdHVzKSk7CisKKwkvKgorCSAqIFVSQiBzdWJtaXNzaW9uIGZhaWxlZCBmb3IgdGhpcyBmcmFtZSwgaXQgbmV2ZXIgcmVhY2hlZAorCSAqIHRoZSB0YXJnZXQuCisJICovCisJaWYgKCF0eG9rIHx8ICF2aWYgfHwgIXR4cykKKwkJZ290byBzZW5kX21hYzgwMjExOworCisJaWYgKHR4cy0+dHNfZmxhZ3MgJiBBVEg5S19IVENfVFhTVEFUX0FDSykKKwkJdHhfaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOworCisJaWYgKHR4cy0+dHNfZmxhZ3MgJiBBVEg5S19IVENfVFhTVEFUX0ZJTFQpCisJCXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX1RYX0ZJTFRFUkVEOworCisJaWYgKHR4cy0+dHNfZmxhZ3MgJiBBVEg5S19IVENfVFhTVEFUX1JUQ19DVFMpCisJCXJhdGUtPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUzsKKworCXJhdGUtPmNvdW50ID0gMTsKKwlyYXRlLT5pZHggPSBNUyh0eHMtPnRzX3JhdGUsIEFUSDlLX0hUQ19UWFNUQVRfUkFURSk7CisKKwlpZiAodHhzLT50c19mbGFncyAmIEFUSDlLX0hUQ19UWFNUQVRfTUNTKSB7CisJCXJhdGUtPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ19NQ1M7CisKKwkJaWYgKHR4cy0+dHNfZmxhZ3MgJiBBVEg5S19IVENfVFhTVEFUX0NXNDApCisJCQlyYXRlLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIOworCQlpZiAodHhzLT50c19mbGFncyAmIEFUSDlLX0hUQ19UWFNUQVRfU0dJKQorCQkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJOworCX0gZWxzZSB7CisJCWlmIChjdXJfY29uZi0+Y2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQorCQkJcmF0ZS0+aWR4ICs9IDQ7IC8qIE5vIENDSyByYXRlcyAqLworCX0KKworCWF0aDlrX2h0Y19jaGVja190eF9hZ2dyKHByaXYsIHZpZiwgc2tiKTsKKworc2VuZF9tYWM4MDIxMToKKwlzcGluX2xvY2tfYmgoJnByaXYtPnR4LnR4X2xvY2spOworCWlmIChXQVJOX09OKC0tcHJpdi0+dHgucXVldWVkX2NudCA8IDApKQorCQlwcml2LT50eC5xdWV1ZWRfY250ID0gMDsKKwlzcGluX3VubG9ja19iaCgmcHJpdi0+dHgudHhfbG9jayk7CisKKwlhdGg5a19odGNfdHhfY2xlYXJfc2xvdChwcml2LCBzbG90KTsKKworCS8qIFNlbmQgc3RhdHVzIHRvIG1hYzgwMjExICovCisJaWVlZTgwMjExX3R4X3N0YXR1cyhwcml2LT5odywgc2tiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2h0Y190eF9kcmFpbnEoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAorCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZShxdWV1ZSkpICE9IE5VTEwpIHsKKwkJYXRoOWtfaHRjX3R4X3Byb2Nlc3MocHJpdiwgc2tiLCBOVUxMKTsKKwl9Cit9CisKK3ZvaWQgYXRoOWtfaHRjX3R4X2RyYWluKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgYXRoOWtfaHRjX3R4X2V2ZW50ICpldmVudCwgKnRtcDsKKworCXNwaW5fbG9ja19iaCgmcHJpdi0+dHgudHhfbG9jayk7CisJcHJpdi0+dHguZmxhZ3MgfD0gQVRIOUtfSFRDX09QX1RYX0RSQUlOOworCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eC50eF9sb2NrKTsKKworCS8qCisJICogRW5zdXJlIHRoYXQgYWxsIHBlbmRpbmcgVFggZnJhbWVzIGFyZSBmbHVzaGVkLAorCSAqIGFuZCB0aGF0IHRoZSBUWCBjb21wbGV0aW9uL2ZhaWxlZCB0YXNrbGV0cyBpcyBraWxsZWQuCisJICovCisJaHRjX3N0b3AocHJpdi0+aHRjKTsKKwl0YXNrbGV0X2tpbGwoJnByaXYtPndtaS0+d21pX2V2ZW50X3Rhc2tsZXQpOworCXRhc2tsZXRfa2lsbCgmcHJpdi0+dHhfZmFpbGVkX3Rhc2tsZXQpOworCisJYXRoOWtfaHRjX3R4X2RyYWlucShwcml2LCAmcHJpdi0+dHgubWdtdF9lcF9xdWV1ZSk7CisJYXRoOWtfaHRjX3R4X2RyYWlucShwcml2LCAmcHJpdi0+dHguY2FiX2VwX3F1ZXVlKTsKKwlhdGg5a19odGNfdHhfZHJhaW5xKHByaXYsICZwcml2LT50eC5kYXRhX2JlX3F1ZXVlKTsKKwlhdGg5a19odGNfdHhfZHJhaW5xKHByaXYsICZwcml2LT50eC5kYXRhX2JrX3F1ZXVlKTsKKwlhdGg5a19odGNfdHhfZHJhaW5xKHByaXYsICZwcml2LT50eC5kYXRhX3ZpX3F1ZXVlKTsKKwlhdGg5a19odGNfdHhfZHJhaW5xKHByaXYsICZwcml2LT50eC5kYXRhX3ZvX3F1ZXVlKTsKKwlhdGg5a19odGNfdHhfZHJhaW5xKHByaXYsICZwcml2LT50eC50eF9mYWlsZWQpOworCisJLyoKKwkgKiBUaGUgVFggY2xlYW51cCB0aW1lciBoYXMgYWxyZWFkeSBiZWVuIGtpbGxlZC4KKwkgKi8KKwlzcGluX2xvY2tfYmgoJnByaXYtPndtaS0+ZXZlbnRfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2ZW50LCB0bXAsICZwcml2LT53bWktPnBlbmRpbmdfdHhfZXZlbnRzLCBsaXN0KSB7CisJCWxpc3RfZGVsKCZldmVudC0+bGlzdCk7CisJCWtmcmVlKGV2ZW50KTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPndtaS0+ZXZlbnRfbG9jayk7CisKKwlzcGluX2xvY2tfYmgoJnByaXYtPnR4LnR4X2xvY2spOworCXByaXYtPnR4LmZsYWdzICY9IH5BVEg5S19IVENfT1BfVFhfRFJBSU47CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4LnR4X2xvY2spOworfQorCit2b2lkIGF0aDlrX3R4X2ZhaWxlZF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSAoc3RydWN0IGF0aDlrX2h0Y19wcml2ICopZGF0YTsKKworCXNwaW5fbG9ja19iaCgmcHJpdi0+dHgudHhfbG9jayk7CisJaWYgKHByaXYtPnR4LmZsYWdzICYgQVRIOUtfSFRDX09QX1RYX0RSQUlOKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eC50eF9sb2NrKTsKKwkJcmV0dXJuOworCX0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+dHgudHhfbG9jayk7CisKKwlhdGg5a19odGNfdHhfZHJhaW5xKHByaXYsICZwcml2LT50eC50eF9mYWlsZWQpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgY2hlY2tfY29va2llKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwKKwkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCXU4IGNvb2tpZSwgdTggZXBpZCkKK3sKKwl1OCBmY29va2llID0gMDsKKworCWlmIChlcGlkID09IHByaXYtPm1nbXRfZXApIHsKKwkJc3RydWN0IHR4X21nbXRfaGRyICpoZHI7CisJCWhkciA9IChzdHJ1Y3QgdHhfbWdtdF9oZHIgKikgc2tiLT5kYXRhOworCQlmY29va2llID0gaGRyLT5jb29raWU7CisJfSBlbHNlIGlmICgoZXBpZCA9PSBwcml2LT5kYXRhX2JrX2VwKSB8fAorCQkgICAoZXBpZCA9PSBwcml2LT5kYXRhX2JlX2VwKSB8fAorCQkgICAoZXBpZCA9PSBwcml2LT5kYXRhX3ZpX2VwKSB8fAorCQkgICAoZXBpZCA9PSBwcml2LT5kYXRhX3ZvX2VwKSB8fAorCQkgICAoZXBpZCA9PSBwcml2LT5jYWJfZXApKSB7CisJCXN0cnVjdCB0eF9mcmFtZV9oZHIgKmhkcjsKKwkJaGRyID0gKHN0cnVjdCB0eF9mcmFtZV9oZHIgKikgc2tiLT5kYXRhOworCQlmY29va2llID0gaGRyLT5jb29raWU7CisJfQorCisJaWYgKGZjb29raWUgPT0gY29va2llKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmKiBhdGg5a19odGNfdHhfZ2V0X3BhY2tldChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsCisJCQkJCSAgICAgICBzdHJ1Y3QgX193bWlfZXZlbnRfdHhzdGF0dXMgKnR4cykKK3sKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHByaXYtPmFoKTsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICplcGlkX3F1ZXVlOworCXN0cnVjdCBza19idWZmICpza2IsICp0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1OCBlcGlkID0gTVModHhzLT50c19yYXRlLCBBVEg5S19IVENfVFhTVEFUX0VQSUQpOworCisJZXBpZF9xdWV1ZSA9IGdldF9odGNfZXBpZF9xdWV1ZShwcml2LCBlcGlkKTsKKwlpZiAoIWVwaWRfcXVldWUpCisJCXJldHVybiBOVUxMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVwaWRfcXVldWUtPmxvY2ssIGZsYWdzKTsKKwlza2JfcXVldWVfd2Fsa19zYWZlKGVwaWRfcXVldWUsIHNrYiwgdG1wKSB7CisJCWlmIChjaGVja19jb29raWUocHJpdiwgc2tiLCB0eHMtPmNvb2tpZSwgZXBpZCkpIHsKKwkJCV9fc2tiX3VubGluayhza2IsIGVwaWRfcXVldWUpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXBpZF9xdWV1ZS0+bG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIHNrYjsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcGlkX3F1ZXVlLT5sb2NrLCBmbGFncyk7CisKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19YTUlULAorCQkiTm8gbWF0Y2hpbmcgcGFja2V0IGZvciBjb29raWU6ICVkLCBlcGlkOiAlZFxuIiwKKwkJdHhzLT5jb29raWUsIGVwaWQpOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgYXRoOWtfaHRjX3R4c3RhdHVzKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwgdm9pZCAqd21pX2V2ZW50KQoreworCXN0cnVjdCB3bWlfZXZlbnRfdHhzdGF0dXMgKnR4cyA9IChzdHJ1Y3Qgd21pX2V2ZW50X3R4c3RhdHVzICopd21pX2V2ZW50OworCXN0cnVjdCBfX3dtaV9ldmVudF90eHN0YXR1cyAqX190eHM7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgYXRoOWtfaHRjX3R4X2V2ZW50ICp0eF9wZW5kOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHR4cy0+Y250OyBpKyspIHsKKwkJV0FSTl9PTih0eHMtPmNudCA+IEhUQ19NQVhfVFhfU1RBVFVTKTsKKworCQlfX3R4cyA9ICZ0eHMtPnR4c3RhdHVzW2ldOworCisJCXNrYiA9IGF0aDlrX2h0Y190eF9nZXRfcGFja2V0KHByaXYsIF9fdHhzKTsKKwkJaWYgKCFza2IpIHsKKwkJCS8qCisJCQkgKiBTdG9yZSB0aGlzIGV2ZW50LCBzbyB0aGF0IHRoZSBUWCBjbGVhbnVwCisJCQkgKiByb3V0aW5lIGNhbiBjaGVjayBsYXRlciBmb3IgdGhlIG5lZWRlZCBwYWNrZXQuCisJCQkgKi8KKwkJCXR4X3BlbmQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYXRoOWtfaHRjX3R4X2V2ZW50KSwKKwkJCQkJICBHRlBfQVRPTUlDKTsKKwkJCWlmICghdHhfcGVuZCkKKwkJCQljb250aW51ZTsKKworCQkJbWVtY3B5KCZ0eF9wZW5kLT50eHMsIF9fdHhzLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgX193bWlfZXZlbnRfdHhzdGF0dXMpKTsKKworCQkJc3Bpbl9sb2NrKCZwcml2LT53bWktPmV2ZW50X2xvY2spOworCQkJbGlzdF9hZGRfdGFpbCgmdHhfcGVuZC0+bGlzdCwKKwkJCQkgICAgICAmcHJpdi0+d21pLT5wZW5kaW5nX3R4X2V2ZW50cyk7CisJCQlzcGluX3VubG9jaygmcHJpdi0+d21pLT5ldmVudF9sb2NrKTsKKwogCQkJY29udGludWU7CiAJCX0KIAotCQkvKiBDaGVjayBpZiB3ZSBuZWVkIHRvIHN0YXJ0IGFnZ3JlZ2F0aW9uICovCi0KLQkJaWYgKHN0YSAmJiBjb25mX2lzX2h0KCZwcml2LT5ody0+Y29uZikgJiYKLQkJICAgICEoc2tiLT5wcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9QQUUpKSkgewotCQkJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpIHsKLQkJCQl1OCAqcWMsIHRpZDsKLQkJCQlzdHJ1Y3QgYXRoOWtfaHRjX3N0YSAqaXN0YTsKLQotCQkJCXFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7Ci0JCQkJdGlkID0gcWNbMF0gJiAweGY7Ci0JCQkJaXN0YSA9IChzdHJ1Y3QgYXRoOWtfaHRjX3N0YSAqKXN0YS0+ZHJ2X3ByaXY7Ci0KLQkJCQlpZiAoYXRoOWtfaHRjX2NoZWNrX3R4X2FnZ3IocHJpdiwgaXN0YSwgdGlkKSkgewotCQkJCQlpZWVlODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbihzdGEsIHRpZCwgMCk7Ci0JCQkJCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfbG9jayk7Ci0JCQkJCWlzdGEtPnRpZF9zdGF0ZVt0aWRdID0gQUdHUl9QUk9HUkVTUzsKLQkJCQkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXJjdV9yZWFkX3VubG9jaygpOwotCi0Jc2VuZF9tYWM4MDIxMToKLQkJLyogU2VuZCBzdGF0dXMgdG8gbWFjODAyMTEgKi8KLQkJaWVlZTgwMjExX3R4X3N0YXR1cyhwcml2LT5odywgc2tiKTsKKwkJYXRoOWtfaHRjX3R4X3Byb2Nlc3MocHJpdiwgc2tiLCBfX3R4cyk7CiAJfQogCiAJLyogV2FrZSBUWCBxdWV1ZXMgaWYgbmVlZGVkICovCi0Jc3Bpbl9sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKLQlpZiAocHJpdi0+dHhfcXVldWVzX3N0b3ApIHsKLQkJcHJpdi0+dHhfcXVldWVzX3N0b3AgPSBmYWxzZTsKLQkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOwotCQlhdGhfZGJnKGF0aDlrX2h3X2NvbW1vbihwcml2LT5haCksIEFUSF9EQkdfWE1JVCwKLQkJCSJXYWtpbmcgdXAgVFggcXVldWVzXG4iKTsKLQkJaWVlZTgwMjExX3dha2VfcXVldWVzKHByaXYtPmh3KTsKLQkJcmV0dXJuOwotCX0KLQlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisJYXRoOWtfaHRjX2NoZWNrX3dha2VfcXVldWVzKHByaXYpOwogfQogCiB2b2lkIGF0aDlrX2h0Y190eGVwKHZvaWQgKmRydl9wcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgZW51bSBodGNfZW5kcG9pbnRfaWQgZXBfaWQsIGJvb2wgdHhvaykKIHsKIAlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSAoc3RydWN0IGF0aDlrX2h0Y19wcml2ICopIGRydl9wcml2OwotCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24ocHJpdi0+YWgpOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbzsKKwlzdHJ1Y3QgYXRoOWtfaHRjX3R4X2N0bCAqdHhfY3RsOworCXN0cnVjdCBza19idWZmX2hlYWQgKmVwaWRfcXVldWU7CiAKLQlpZiAoIXNrYikKKwl0eF9jdGwgPSBIVENfU0tCX0NCKHNrYik7CisJdHhfY3RsLT50eG9rID0gdHhvazsKKwl0eF9jdGwtPnRpbWVzdGFtcCA9IGppZmZpZXM7CisKKwlpZiAoIXR4b2spIHsKKwkJc2tiX3F1ZXVlX3RhaWwoJnByaXYtPnR4LnR4X2ZhaWxlZCwgc2tiKTsKKwkJdGFza2xldF9zY2hlZHVsZSgmcHJpdi0+dHhfZmFpbGVkX3Rhc2tsZXQpOwogCQlyZXR1cm47CisJfQogCi0JaWYgKGVwX2lkID09IHByaXYtPm1nbXRfZXApIHsKLQkJc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHR4X21nbXRfaGRyKSk7Ci0JfSBlbHNlIGlmICgoZXBfaWQgPT0gcHJpdi0+ZGF0YV9ia19lcCkgfHwKLQkJICAgKGVwX2lkID09IHByaXYtPmRhdGFfYmVfZXApIHx8Ci0JCSAgIChlcF9pZCA9PSBwcml2LT5kYXRhX3ZpX2VwKSB8fAotCQkgICAoZXBfaWQgPT0gcHJpdi0+ZGF0YV92b19lcCkpIHsKLQkJc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHR4X2ZyYW1lX2hkcikpOwotCX0gZWxzZSB7Ci0JCWF0aF9lcnIoY29tbW9uLCAiVW5zdXBwb3J0ZWQgVFggRVBJRDogJWRcbiIsIGVwX2lkKTsKKwllcGlkX3F1ZXVlID0gZ2V0X2h0Y19lcGlkX3F1ZXVlKHByaXYsIGVwX2lkKTsKKwlpZiAoIWVwaWRfcXVldWUpIHsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJcmV0dXJuOwogCX0KIAotCXR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc2tiX3F1ZXVlX3RhaWwoZXBpZF9xdWV1ZSwgc2tiKTsKK30KIAotCWlmICh0eG9rKQotCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7CitzdGF0aWMgaW5saW5lIGJvb2wgY2hlY2tfcGFja2V0KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHByaXYtPmFoKTsKKwlzdHJ1Y3QgYXRoOWtfaHRjX3R4X2N0bCAqdHhfY3RsOwogCi0Jc2tiX3F1ZXVlX3RhaWwoJnByaXYtPnR4X3F1ZXVlLCBza2IpOwotCXRhc2tsZXRfc2NoZWR1bGUoJnByaXYtPnR4X3Rhc2tsZXQpOworCXR4X2N0bCA9IEhUQ19TS0JfQ0Ioc2tiKTsKKworCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsCisJCSAgICAgICB0eF9jdGwtPnRpbWVzdGFtcCArCisJCSAgICAgICBtc2Vjc190b19qaWZmaWVzKEFUSDlLX0hUQ19UWF9USU1FT1VUX0lOVEVSVkFMKSkpIHsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfWE1JVCwKKwkJCSJEcm9wcGluZyBhIHBhY2tldCBkdWUgdG8gVFggdGltZW91dFxuIik7CisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfaHRjX3R4X2NsZWFudXBfcXVldWUoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAorCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICplcGlkX3F1ZXVlKQoreworCWJvb2wgcHJvY2VzcyA9IGZhbHNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKnRtcDsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHF1ZXVlOworCisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcXVldWUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVwaWRfcXVldWUtPmxvY2ssIGZsYWdzKTsKKwlza2JfcXVldWVfd2Fsa19zYWZlKGVwaWRfcXVldWUsIHNrYiwgdG1wKSB7CisJCWlmIChjaGVja19wYWNrZXQocHJpdiwgc2tiKSkgeworCQkJX19za2JfdW5saW5rKHNrYiwgZXBpZF9xdWV1ZSk7CisJCQlfX3NrYl9xdWV1ZV90YWlsKCZxdWV1ZSwgc2tiKTsKKwkJCXByb2Nlc3MgPSB0cnVlOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwaWRfcXVldWUtPmxvY2ssIGZsYWdzKTsKKworCWlmIChwcm9jZXNzKSB7CisJCXNrYl9xdWV1ZV93YWxrX3NhZmUoJnF1ZXVlLCBza2IsIHRtcCkgeworCQkJX19za2JfdW5saW5rKHNrYiwgJnF1ZXVlKTsKKwkJCWF0aDlrX2h0Y190eF9wcm9jZXNzKHByaXYsIHNrYiwgTlVMTCk7CisJCX0KKwl9Cit9CisKK3ZvaWQgYXRoOWtfaHRjX3R4X2NsZWFudXBfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKikgZGF0YTsKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHByaXYtPmFoKTsKKwlzdHJ1Y3QgYXRoOWtfaHRjX3R4X2V2ZW50ICpldmVudCwgKnRtcDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJc3Bpbl9sb2NrKCZwcml2LT53bWktPmV2ZW50X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldmVudCwgdG1wLCAmcHJpdi0+d21pLT5wZW5kaW5nX3R4X2V2ZW50cywgbGlzdCkgeworCisJCXNrYiA9IGF0aDlrX2h0Y190eF9nZXRfcGFja2V0KHByaXYsICZldmVudC0+dHhzKTsKKwkJaWYgKHNrYikgeworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfWE1JVCwKKwkJCQkiRm91bmQgcGFja2V0IGZvciBjb29raWU6ICVkLCBlcGlkOiAlZFxuIiwKKwkJCQlldmVudC0+dHhzLmNvb2tpZSwKKwkJCQlNUyhldmVudC0+dHhzLnRzX3JhdGUsIEFUSDlLX0hUQ19UWFNUQVRfRVBJRCkpOworCisJCQlhdGg5a19odGNfdHhfcHJvY2Vzcyhwcml2LCBza2IsICZldmVudC0+dHhzKTsKKwkJCWxpc3RfZGVsKCZldmVudC0+bGlzdCk7CisJCQlrZnJlZShldmVudCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICgrK2V2ZW50LT5jb3VudCA+PSBBVEg5S19IVENfVFhfVElNRU9VVF9DT1VOVCkgeworCQkJbGlzdF9kZWwoJmV2ZW50LT5saXN0KTsKKwkJCWtmcmVlKGV2ZW50KTsKKwkJfQorCX0KKwlzcGluX3VubG9jaygmcHJpdi0+d21pLT5ldmVudF9sb2NrKTsKKworCS8qCisJICogQ2hlY2sgaWYgc3RhdHVzLXBlbmRpbmcgcGFja2V0cyBoYXZlIHRvIGJlIGNsZWFuZWQgdXAuCisJICovCisJYXRoOWtfaHRjX3R4X2NsZWFudXBfcXVldWUocHJpdiwgJnByaXYtPnR4Lm1nbXRfZXBfcXVldWUpOworCWF0aDlrX2h0Y190eF9jbGVhbnVwX3F1ZXVlKHByaXYsICZwcml2LT50eC5jYWJfZXBfcXVldWUpOworCWF0aDlrX2h0Y190eF9jbGVhbnVwX3F1ZXVlKHByaXYsICZwcml2LT50eC5kYXRhX2JlX3F1ZXVlKTsKKwlhdGg5a19odGNfdHhfY2xlYW51cF9xdWV1ZShwcml2LCAmcHJpdi0+dHguZGF0YV9ia19xdWV1ZSk7CisJYXRoOWtfaHRjX3R4X2NsZWFudXBfcXVldWUocHJpdiwgJnByaXYtPnR4LmRhdGFfdmlfcXVldWUpOworCWF0aDlrX2h0Y190eF9jbGVhbnVwX3F1ZXVlKHByaXYsICZwcml2LT50eC5kYXRhX3ZvX3F1ZXVlKTsKKworCS8qIFdha2UgVFggcXVldWVzIGlmIG5lZWRlZCAqLworCWF0aDlrX2h0Y19jaGVja193YWtlX3F1ZXVlcyhwcml2KTsKKworCW1vZF90aW1lcigmcHJpdi0+dHguY2xlYW51cF90aW1lciwKKwkJICBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhBVEg5S19IVENfVFhfQ0xFQU5VUF9JTlRFUlZBTCkpOwogfQogCiBpbnQgYXRoOWtfdHhfaW5pdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpCiB7Ci0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcHJpdi0+dHhfcXVldWUpOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnByaXYtPnR4Lm1nbXRfZXBfcXVldWUpOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnByaXYtPnR4LmNhYl9lcF9xdWV1ZSk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcHJpdi0+dHguZGF0YV9iZV9xdWV1ZSk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcHJpdi0+dHguZGF0YV9ia19xdWV1ZSk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcHJpdi0+dHguZGF0YV92aV9xdWV1ZSk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcHJpdi0+dHguZGF0YV92b19xdWV1ZSk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcHJpdi0+dHgudHhfZmFpbGVkKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTA3LDggKzk2OCw5IEBACiAJaW50IGxhc3RfcnNzaSA9IEFUSF9SU1NJX0RVTU1ZX01BUktFUjsKIAlfX2xlMTYgZmM7CiAKLQlpZiAoc2tiLT5sZW4gPD0gSFRDX1JYX0ZSQU1FX0hFQURFUl9TSVpFKSB7Ci0JCWF0aF9lcnIoY29tbW9uLCAiQ29ycnVwdGVkIFJYIGZyYW1lLCBkcm9wcGluZ1xuIik7CisJaWYgKHNrYi0+bGVuIDwgSFRDX1JYX0ZSQU1FX0hFQURFUl9TSVpFKSB7CisJCWF0aF9lcnIoY29tbW9uLCAiQ29ycnVwdGVkIFJYIGZyYW1lLCBkcm9wcGluZyAobGVuOiAlZClcbiIsCisJCQlza2ItPmxlbik7CiAJCWdvdG8gcnhfbmV4dDsKIAl9CiAKQEAgLTUyMiw2ICs5ODQsOCBAQAogCQlnb3RvIHJ4X25leHQ7CiAJfQogCisJYXRoOWtfaHRjX2Vycl9zdGF0X3J4KHByaXYsIHJ4c3RhdHVzKTsKKwogCS8qIEdldCB0aGUgUlggc3RhdHVzIGluZm9ybWF0aW9uICovCiAJbWVtY3B5KCZyeGJ1Zi0+cnhzdGF0dXMsIHJ4c3RhdHVzLCBIVENfUlhfRlJBTUVfSEVBREVSX1NJWkUpOwogCXNrYl9wdWxsKHNrYiwgSFRDX1JYX0ZSQU1FX0hFQURFUl9TSVpFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfaHN0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2hzdC5jCmluZGV4IDYyZTEzOWEuLmNlZTk3MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfaHN0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19oc3QuYwpAQCAtMTcsOCArMTcsOCBAQAogI2luY2x1ZGUgImh0Yy5oIgogCiBzdGF0aWMgaW50IGh0Y19pc3N1ZV9zZW5kKHN0cnVjdCBodGNfdGFyZ2V0ICp0YXJnZXQsIHN0cnVjdCBza19idWZmKiBza2IsCi0JCQkgIHUxNiBsZW4sIHU4IGZsYWdzLCB1OCBlcGlkLAotCQkJICBzdHJ1Y3QgYXRoOWtfaHRjX3R4X2N0bCAqdHhfY3RsKQorCQkJICB1MTYgbGVuLCB1OCBmbGFncywgdTggZXBpZCkKKwogewogCXN0cnVjdCBodGNfZnJhbWVfaGRyICpoZHI7CiAJc3RydWN0IGh0Y19lbmRwb2ludCAqZW5kcG9pbnQgPSAmdGFyZ2V0LT5lbmRwb2ludFtlcGlkXTsKQEAgLTMwLDggKzMwLDggQEAKIAloZHItPmZsYWdzID0gZmxhZ3M7CiAJaGRyLT5wYXlsb2FkX2xlbiA9IGNwdV90b19iZTE2KGxlbik7CiAKLQlzdGF0dXMgPSB0YXJnZXQtPmhpZi0+c2VuZCh0YXJnZXQtPmhpZl9kZXYsIGVuZHBvaW50LT51bF9waXBlaWQsIHNrYiwKLQkJCQkgICB0eF9jdGwpOworCXN0YXR1cyA9IHRhcmdldC0+aGlmLT5zZW5kKHRhcmdldC0+aGlmX2RldiwgZW5kcG9pbnQtPnVsX3BpcGVpZCwgc2tiKTsKKwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTE2Miw3ICsxNjIsNyBAQAogCiAJdGFyZ2V0LT5odGNfZmxhZ3MgfD0gSFRDX09QX0NPTkZJR19QSVBFX0NSRURJVFM7CiAKLQlyZXQgPSBodGNfaXNzdWVfc2VuZCh0YXJnZXQsIHNrYiwgc2tiLT5sZW4sIDAsIEVORFBPSU5UMCwgTlVMTCk7CisJcmV0ID0gaHRjX2lzc3VlX3NlbmQodGFyZ2V0LCBza2IsIHNrYi0+bGVuLCAwLCBFTkRQT0lOVDApOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCkBAIC0xOTcsNyArMTk3LDcgQEAKIAogCXRhcmdldC0+aHRjX2ZsYWdzIHw9IEhUQ19PUF9TVEFSVF9XQUlUOwogCi0JcmV0ID0gaHRjX2lzc3VlX3NlbmQodGFyZ2V0LCBza2IsIHNrYi0+bGVuLCAwLCBFTkRQT0lOVDAsIE5VTEwpOworCXJldCA9IGh0Y19pc3N1ZV9zZW5kKHRhcmdldCwgc2tiLCBza2ItPmxlbiwgMCwgRU5EUE9JTlQwKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIApAQCAtMjY4LDcgKzI2OCw3IEBACiAJY29ubl9tc2ctPmRsX3BpcGVpZCA9IGVuZHBvaW50LT5kbF9waXBlaWQ7CiAJY29ubl9tc2ctPnVsX3BpcGVpZCA9IGVuZHBvaW50LT51bF9waXBlaWQ7CiAKLQlyZXQgPSBodGNfaXNzdWVfc2VuZCh0YXJnZXQsIHNrYiwgc2tiLT5sZW4sIDAsIEVORFBPSU5UMCwgTlVMTCk7CisJcmV0ID0gaHRjX2lzc3VlX3NlbmQodGFyZ2V0LCBza2IsIHNrYi0+bGVuLCAwLCBFTkRQT0lOVDApOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCkBAIC0yODYsMzUgKzI4NiwzMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBodGNfc2VuZChzdHJ1Y3QgaHRjX3RhcmdldCAqdGFyZ2V0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCSAgICAgZW51bSBodGNfZW5kcG9pbnRfaWQgZXBpZCwgc3RydWN0IGF0aDlrX2h0Y190eF9jdGwgKnR4X2N0bCkKK2ludCBodGNfc2VuZChzdHJ1Y3QgaHRjX3RhcmdldCAqdGFyZ2V0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXJldHVybiBodGNfaXNzdWVfc2VuZCh0YXJnZXQsIHNrYiwgc2tiLT5sZW4sIDAsIGVwaWQsIHR4X2N0bCk7CisJc3RydWN0IGF0aDlrX2h0Y190eF9jdGwgKnR4X2N0bDsKKworCXR4X2N0bCA9IEhUQ19TS0JfQ0Ioc2tiKTsKKwlyZXR1cm4gaHRjX2lzc3VlX3NlbmQodGFyZ2V0LCBza2IsIHNrYi0+bGVuLCAwLCB0eF9jdGwtPmVwaWQpOworfQorCitpbnQgaHRjX3NlbmRfZXBpZChzdHJ1Y3QgaHRjX3RhcmdldCAqdGFyZ2V0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgIGVudW0gaHRjX2VuZHBvaW50X2lkIGVwaWQpCit7CisJcmV0dXJuIGh0Y19pc3N1ZV9zZW5kKHRhcmdldCwgc2tiLCBza2ItPmxlbiwgMCwgZXBpZCk7CiB9CiAKIHZvaWQgaHRjX3N0b3Aoc3RydWN0IGh0Y190YXJnZXQgKnRhcmdldCkKIHsKLQllbnVtIGh0Y19lbmRwb2ludF9pZCBlcGlkOwotCXN0cnVjdCBodGNfZW5kcG9pbnQgKmVuZHBvaW50OwotCi0JZm9yIChlcGlkID0gRU5EUE9JTlQwOyBlcGlkIDwgRU5EUE9JTlRfTUFYOyBlcGlkKyspIHsKLQkJZW5kcG9pbnQgPSAmdGFyZ2V0LT5lbmRwb2ludFtlcGlkXTsKLQkJaWYgKGVuZHBvaW50LT5zZXJ2aWNlX2lkICE9IDApCi0JCQl0YXJnZXQtPmhpZi0+c3RvcCh0YXJnZXQtPmhpZl9kZXYsIGVuZHBvaW50LT51bF9waXBlaWQpOwotCX0KKwl0YXJnZXQtPmhpZi0+c3RvcCh0YXJnZXQtPmhpZl9kZXYpOwogfQogCiB2b2lkIGh0Y19zdGFydChzdHJ1Y3QgaHRjX3RhcmdldCAqdGFyZ2V0KQogewotCWVudW0gaHRjX2VuZHBvaW50X2lkIGVwaWQ7Ci0Jc3RydWN0IGh0Y19lbmRwb2ludCAqZW5kcG9pbnQ7CisJdGFyZ2V0LT5oaWYtPnN0YXJ0KHRhcmdldC0+aGlmX2Rldik7Cit9CiAKLQlmb3IgKGVwaWQgPSBFTkRQT0lOVDA7IGVwaWQgPCBFTkRQT0lOVF9NQVg7IGVwaWQrKykgewotCQllbmRwb2ludCA9ICZ0YXJnZXQtPmVuZHBvaW50W2VwaWRdOwotCQlpZiAoZW5kcG9pbnQtPnNlcnZpY2VfaWQgIT0gMCkKLQkJCXRhcmdldC0+aGlmLT5zdGFydCh0YXJnZXQtPmhpZl9kZXYsCi0JCQkJCSAgIGVuZHBvaW50LT51bF9waXBlaWQpOwotCX0KK3ZvaWQgaHRjX3N0YV9kcmFpbihzdHJ1Y3QgaHRjX3RhcmdldCAqdGFyZ2V0LCB1OCBpZHgpCit7CisJdGFyZ2V0LT5oaWYtPnN0YV9kcmFpbih0YXJnZXQtPmhpZl9kZXYsIGlkeCk7CiB9CiAKIHZvaWQgYXRoOWtfaHRjX3R4Y29tcGxldGlvbl9jYihzdHJ1Y3QgaHRjX3RhcmdldCAqaHRjX2hhbmRsZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfaHN0LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2hzdC5oCmluZGV4IGVjZDAxODcuLjkxYTUzMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfaHN0LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19oc3QuaApAQCAtMzMsMTAgKzMzLDEwIEBACiAJdTggY29udHJvbF9kbF9waXBlOwogCXU4IGNvbnRyb2xfdWxfcGlwZTsKIAotCXZvaWQgKCpzdGFydCkgKHZvaWQgKmhpZl9oYW5kbGUsIHU4IHBpcGUpOwotCXZvaWQgKCpzdG9wKSAodm9pZCAqaGlmX2hhbmRsZSwgdTggcGlwZSk7Ci0JaW50ICgqc2VuZCkgKHZvaWQgKmhpZl9oYW5kbGUsIHU4IHBpcGUsIHN0cnVjdCBza19idWZmICpidWYsCi0JCSAgICAgc3RydWN0IGF0aDlrX2h0Y190eF9jdGwgKnR4X2N0bCk7CisJdm9pZCAoKnN0YXJ0KSAodm9pZCAqaGlmX2hhbmRsZSk7CisJdm9pZCAoKnN0b3ApICh2b2lkICpoaWZfaGFuZGxlKTsKKwl2b2lkICgqc3RhX2RyYWluKSAodm9pZCAqaGlmX2hhbmRsZSwgdTggaWR4KTsKKwlpbnQgKCpzZW5kKSAodm9pZCAqaGlmX2hhbmRsZSwgdTggcGlwZSwgc3RydWN0IHNrX2J1ZmYgKmJ1Zik7CiB9OwogCiBlbnVtIGh0Y19lbmRwb2ludF9pZCB7CkBAIC04MywyMSArODMsMTAgQEAKIAl2b2lkICgqcngpICh2b2lkICosIHN0cnVjdCBza19idWZmICosIGVudW0gaHRjX2VuZHBvaW50X2lkKTsKIH07CiAKLSNkZWZpbmUgSFRDX1RYX1FVRVVFX1NJWkUgMjU2Ci0KLXN0cnVjdCBodGNfdHhxIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqYnVmW0hUQ19UWF9RVUVVRV9TSVpFXTsKLQl1MzIgdHhxZGVwdGg7Ci0JdTE2IHR4YnVmX2NudDsKLQl1MTYgdHhxX2hlYWQ7Ci0JdTE2IHR4cV90YWlsOwotfTsKLQogc3RydWN0IGh0Y19lbmRwb2ludCB7CiAJdTE2IHNlcnZpY2VfaWQ7CiAKIAlzdHJ1Y3QgaHRjX2VwX2NhbGxiYWNrcyBlcF9jYWxsYmFja3M7Ci0Jc3RydWN0IGh0Y190eHEgaHRjX3R4cTsKIAl1MzIgbWF4X3R4cWRlcHRoOwogCWludCBtYXhfbXNnbGVuOwogCkBAIC0yMDUsMTAgKzE5NCwxMiBAQAogaW50IGh0Y19jb25uZWN0X3NlcnZpY2Uoc3RydWN0IGh0Y190YXJnZXQgKnRhcmdldCwKIAkJCSAgc3RydWN0IGh0Y19zZXJ2aWNlX2Nvbm5yZXEgKnNlcnZpY2VfY29ubnJlcSwKIAkJCSAgZW51bSBodGNfZW5kcG9pbnRfaWQgKmNvbm5fcnNwX2VpZCk7Ci1pbnQgaHRjX3NlbmQoc3RydWN0IGh0Y190YXJnZXQgKnRhcmdldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkgICAgIGVudW0gaHRjX2VuZHBvaW50X2lkIGVpZCwgc3RydWN0IGF0aDlrX2h0Y190eF9jdGwgKnR4X2N0bCk7CitpbnQgaHRjX3NlbmQoc3RydWN0IGh0Y190YXJnZXQgKnRhcmdldCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitpbnQgaHRjX3NlbmRfZXBpZChzdHJ1Y3QgaHRjX3RhcmdldCAqdGFyZ2V0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgIGVudW0gaHRjX2VuZHBvaW50X2lkIGVwaWQpOwogdm9pZCBodGNfc3RvcChzdHJ1Y3QgaHRjX3RhcmdldCAqdGFyZ2V0KTsKIHZvaWQgaHRjX3N0YXJ0KHN0cnVjdCBodGNfdGFyZ2V0ICp0YXJnZXQpOwordm9pZCBodGNfc3RhX2RyYWluKHN0cnVjdCBodGNfdGFyZ2V0ICp0YXJnZXQsIHU4IGlkeCk7CiAKIHZvaWQgYXRoOWtfaHRjX3J4X21zZyhzdHJ1Y3QgaHRjX3RhcmdldCAqaHRjX2hhbmRsZSwKIAkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGxlbiwgdTggcGlwZV9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHctb3BzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHctb3BzLmgKaW5kZXggYzhmMjU0Zi4uOGI4ZjA0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LW9wcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody1vcHMuaApAQCAtMTE2LDE2ICsxMTYsMjEgQEAKIAlhdGg5a19od19vcHMoYWgpLT5jbHIxMW5fYWdncihhaCwgZHMpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfaHdfc2V0MTFuX2J1cnN0ZHVyYXRpb24oc3RydWN0IGF0aF9odyAqYWgsIHZvaWQgKmRzLAotCQkJCQkJIHUzMiBidXJzdER1cmF0aW9uKQorc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2h3X3NldF9jbHJkbWFzayhzdHJ1Y3QgYXRoX2h3ICphaCwgdm9pZCAqZHMsIGJvb2wgdmFsKQogewotCWF0aDlrX2h3X29wcyhhaCktPnNldDExbl9idXJzdGR1cmF0aW9uKGFoLCBkcywgYnVyc3REdXJhdGlvbik7CisJYXRoOWtfaHdfb3BzKGFoKS0+c2V0X2NscmRtYXNrKGFoLCBkcywgdmFsKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2h3X3NldDExbl92aXJ0dWFsbW9yZWZyYWcoc3RydWN0IGF0aF9odyAqYWgsIHZvaWQgKmRzLAotCQkJCQkJICAgdTMyIHZtZikKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19od19hbnRkaXZfY29tYl9jb25mX2dldChzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJc3RydWN0IGF0aF9od19hbnRjb21iX2NvbmYgKmFudGNvbmYpCiB7Ci0JYXRoOWtfaHdfb3BzKGFoKS0+c2V0MTFuX3ZpcnR1YWxtb3JlZnJhZyhhaCwgZHMsIHZtZik7CisJYXRoOWtfaHdfb3BzKGFoKS0+YW50ZGl2X2NvbWJfY29uZl9nZXQoYWgsIGFudGNvbmYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfaHdfYW50ZGl2X2NvbWJfY29uZl9zZXQoc3RydWN0IGF0aF9odyAqYWgsCisJCXN0cnVjdCBhdGhfaHdfYW50Y29tYl9jb25mICphbnRjb25mKQoreworCWF0aDlrX2h3X29wcyhhaCktPmFudGRpdl9jb21iX2NvbmZfc2V0KGFoLCBhbnRjb25mKTsKIH0KIAogLyogUHJpdmF0ZSBoYXJkd2FyZSBjYWxsIG9wcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYwppbmRleCBjOTViYzVjLi5iNzViNWRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYwpAQCAtMTMwLDYgKzEzMCwyMCBAQAogfQogRVhQT1JUX1NZTUJPTChhdGg5a19od193YWl0KTsKIAordm9pZCBhdGg5a19od193cml0ZV9hcnJheShzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGFyNTQxNkluaUFycmF5ICphcnJheSwKKwkJCSAgaW50IGNvbHVtbiwgdW5zaWduZWQgaW50ICp3cml0ZWNudCkKK3sKKwlpbnQgcjsKKworCUVOQUJMRV9SRUdXUklURV9CVUZGRVIoYWgpOworCWZvciAociA9IDA7IHIgPCBhcnJheS0+aWFfcm93czsgcisrKSB7CisJCVJFR19XUklURShhaCwgSU5JX1JBKGFycmF5LCByLCAwKSwKKwkJCSAgSU5JX1JBKGFycmF5LCByLCBjb2x1bW4pKTsKKwkJRE9fREVMQVkoKndyaXRlY250KTsKKwl9CisJUkVHV1JJVEVfQlVGRkVSX0ZMVVNIKGFoKTsKK30KKwogdTMyIGF0aDlrX2h3X3JldmVyc2VfYml0cyh1MzIgdmFsLCB1MzIgbikKIHsKIAl1MzIgcmV0dmFsOwpAQCAtMTQyLDI1ICsxNTYsNiBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLWJvb2wgYXRoOWtfZ2V0X2NoYW5uZWxfZWRnZXMoc3RydWN0IGF0aF9odyAqYWgsCi0JCQkgICAgIHUxNiBmbGFncywgdTE2ICpsb3csCi0JCQkgICAgIHUxNiAqaGlnaCkKLXsKLQlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5jYXBzOwotCi0JaWYgKGZsYWdzICYgQ0hBTk5FTF81R0haKSB7Ci0JCSpsb3cgPSBwQ2FwLT5sb3dfNWdoel9jaGFuOwotCQkqaGlnaCA9IHBDYXAtPmhpZ2hfNWdoel9jaGFuOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JaWYgKChmbGFncyAmIENIQU5ORUxfMkdIWikpIHsKLQkJKmxvdyA9IHBDYXAtPmxvd18yZ2h6X2NoYW47Ci0JCSpoaWdoID0gcENhcC0+aGlnaF8yZ2h6X2NoYW47Ci0JCXJldHVybiB0cnVlOwotCX0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KIHUxNiBhdGg5a19od19jb21wdXRldHh0aW1lKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJICAgdTggcGh5LCBpbnQga2JwcywKIAkJCSAgIHUzMiBmcmFtZUxlbiwgdTE2IHJhdGVpeCwKQEAgLTI1Miw2ICsyNDcsMTcgQEAKIHsKIAl1MzIgdmFsOwogCisJc3dpdGNoIChhaC0+aHdfdmVyc2lvbi5kZXZpZCkgeworCWNhc2UgQVI1NDE2X0FSOTEwMF9ERVZJRDoKKwkJYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9IEFSX1NSRVZfVkVSU0lPTl85MTAwOworCQlicmVhazsKKwljYXNlIEFSOTMwMF9ERVZJRF9BUjkzNDA6CisJCWFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPSBBUl9TUkVWX1ZFUlNJT05fOTM0MDsKKwkJdmFsID0gUkVHX1JFQUQoYWgsIEFSX1NSRVYpOworCQlhaC0+aHdfdmVyc2lvbi5tYWNSZXYgPSBNUyh2YWwsIEFSX1NSRVZfUkVWSVNJT04yKTsKKwkJcmV0dXJuOworCX0KKwogCXZhbCA9IFJFR19SRUFEKGFoLCBBUl9TUkVWKSAmIEFSX1NSRVZfSUQ7CiAKIAlpZiAodmFsID09IDB4RkYpIHsKQEAgLTM2NCwxMSArMzcwLDYgQEAKIAkJYWgtPmNvbmZpZy5zcHVyY2hhbnNbaV1bMV0gPSBBUl9OT19TUFVSOwogCX0KIAotCWlmIChhaC0+aHdfdmVyc2lvbi5kZXZpZCAhPSBBUjI0MjdfREVWSURfUENJRSkKLQkJYWgtPmNvbmZpZy5odF9lbmFibGUgPSAxOwotCWVsc2UKLQkJYWgtPmNvbmZpZy5odF9lbmFibGUgPSAwOwotCiAJLyogUEFQUkQgbmVlZHMgc29tZSBtb3JlIHdvcmsgdG8gYmUgZW5hYmxlZCAqLwogCWFoLT5jb25maWcucGFwcmRfZGlzYWJsZSA9IDE7CiAKQEAgLTQxMCw2ICs0MTEsOCBAQAogCWFoLT5zdGFfaWQxX2RlZmF1bHRzID0KIAkJQVJfU1RBX0lEMV9DUlBUX01JQ19FTkFCTEUgfAogCQlBUl9TVEFfSUQxX01DQVNUX0tTUkNIOworCWlmIChBUl9TUkVWXzkxMDAoYWgpKQorCQlhaC0+c3RhX2lkMV9kZWZhdWx0cyB8PSBBUl9TVEFfSUQxX0FSOTEwMF9CQV9GSVg7CiAJYWgtPmVuYWJsZV8zMmtIel9jbG9jayA9IERPTlRfVVNFXzMyS0haOwogCWFoLT5zbG90dGltZSA9IDIwOwogCWFoLT5nbG9iYWx0eHRpbWVvdXQgPSAodTMyKSAtMTsKQEAgLTQ3MCw3ICs0NzMsNyBAQAogCQlyZXR1cm4gZWNvZGU7CiAJfQogCi0JaWYgKCFBUl9TUkVWXzkxMDAoYWgpKSB7CisJaWYgKCFBUl9TUkVWXzkxMDAoYWgpICYmICFBUl9TUkVWXzkzNDAoYWgpKSB7CiAJCWF0aDlrX2h3X2FuaV9zZXR1cChhaCk7CiAJCWF0aDlrX2h3X2FuaV9pbml0KGFoKTsKIAl9CkBAIC00OTIsOSArNDk1LDYgQEAKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKIAlpbnQgciA9IDA7CiAKLQlpZiAoYWgtPmh3X3ZlcnNpb24uZGV2aWQgPT0gQVI1NDE2X0FSOTEwMF9ERVZJRCkKLQkJYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9IEFSX1NSRVZfVkVSU0lPTl85MTAwOwotCiAJYXRoOWtfaHdfcmVhZF9yZXZpc2lvbnMoYWgpOwogCiAJLyoKQEAgLTU1Miw2ICs1NTIsNyBAQAogCWNhc2UgQVJfU1JFVl9WRVJTSU9OXzkyNzE6CiAJY2FzZSBBUl9TUkVWX1ZFUlNJT05fOTMwMDoKIAljYXNlIEFSX1NSRVZfVkVSU0lPTl85NDg1OgorCWNhc2UgQVJfU1JFVl9WRVJTSU9OXzkzNDA6CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWF0aF9lcnIoY29tbW9uLApAQCAtNTYwLDcgKzU2MSw3IEBACiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKLQlpZiAoQVJfU1JFVl85MjcxKGFoKSB8fCBBUl9TUkVWXzkxMDAoYWgpKQorCWlmIChBUl9TUkVWXzkyNzEoYWgpIHx8IEFSX1NSRVZfOTEwMChhaCkgfHwgQVJfU1JFVl85MzQwKGFoKSkKIAkJYWgtPmlzX3BjaWV4cHJlc3MgPSBmYWxzZTsKIAogCWFoLT5od192ZXJzaW9uLnBoeVJldiA9IFJFR19SRUFEKGFoLCBBUl9QSFlfQ0hJUF9JRCk7CkBAIC02MjksNiArNjMwLDcgQEAKIAljYXNlIEFSMjQyN19ERVZJRF9QQ0lFOgogCWNhc2UgQVI5MzAwX0RFVklEX1BDSUU6CiAJY2FzZSBBUjkzMDBfREVWSURfQVI5NDg1X1BDSUU6CisJY2FzZSBBUjkzMDBfREVWSURfQVI5MzQwOgogCQlicmVhazsKIAlkZWZhdWx0OgogCQlpZiAoY29tbW9uLT5idXNfb3BzLT5hdGhfYnVzX3R5cGUgPT0gQVRIX1VTQikKQEAgLTY3MSw0OCArNjczLDg5IEBACiAJUkVHV1JJVEVfQlVGRkVSX0ZMVVNIKGFoKTsKIH0KIAotdW5zaWduZWQgbG9uZyBhcjkwMDNfZ2V0X3BsbF9zcXN1bV9kdmMoc3RydWN0IGF0aF9odyAqYWgpCit1MzIgYXI5MDAzX2dldF9wbGxfc3FzdW1fZHZjKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCQlSRUdfV1JJVEUoYWgsIFBMTDMsIChSRUdfUkVBRChhaCwgUExMMykgJiB+KFBMTDNfRE9fTUVBU19NQVNLKSkpOworCVJFR19DTFJfQklUKGFoLCBQTEwzLCBQTEwzX0RPX01FQVNfTUFTSyk7CisJdWRlbGF5KDEwMCk7CisJUkVHX1NFVF9CSVQoYWgsIFBMTDMsIFBMTDNfRE9fTUVBU19NQVNLKTsKKworCXdoaWxlICgoUkVHX1JFQUQoYWgsIFBMTDQpICYgUExMNF9NRUFTX0RPTkUpID09IDApCiAJCXVkZWxheSgxMDApOwotCQlSRUdfV1JJVEUoYWgsIFBMTDMsIChSRUdfUkVBRChhaCwgUExMMykgfCBQTEwzX0RPX01FQVNfTUFTSykpOwogCi0JCXdoaWxlICgoUkVHX1JFQUQoYWgsIFBMTDQpICYgUExMNF9NRUFTX0RPTkUpID09IDApCi0JCQl1ZGVsYXkoMTAwKTsKLQotCQlyZXR1cm4gKFJFR19SRUFEKGFoLCBQTEwzKSAmIFNRU1VNX0RWQ19NQVNLKSA+PiAzOworCXJldHVybiAoUkVHX1JFQUQoYWgsIFBMTDMpICYgU1FTVU1fRFZDX01BU0spID4+IDM7CiB9CiBFWFBPUlRfU1lNQk9MKGFyOTAwM19nZXRfcGxsX3Nxc3VtX2R2Yyk7CiAKLSNkZWZpbmUgRFBMTDJfS0RfVkFMICAgICAgICAgICAgMHgzRAotI2RlZmluZSBEUExMMl9LSV9WQUwgICAgICAgICAgICAweDA2Ci0jZGVmaW5lIERQTEwzX1BIQVNFX1NISUZUX1ZBTCAgIDB4MQotCiBzdGF0aWMgdm9pZCBhdGg5a19od19pbml0X3BsbChzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCSAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCXUzMiBwbGw7CiAKIAlpZiAoQVJfU1JFVl85NDg1KGFoKSkgewotCQlSRUdfV1JJVEUoYWgsIEFSX1JUQ19QTExfQ09OVFJPTDIsIDB4ODg2NjY2KTsKLQkJUkVHX1dSSVRFKGFoLCBBUl9DSDBfRERSX0RQTEwyLCAweDE5ZTgyZjAxKTsKIAotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9DSDBfRERSX0RQTEwzLAotCQkJICAgICAgQVJfQ0gwX0RQTEwzX1BIQVNFX1NISUZULCBEUExMM19QSEFTRV9TSElGVF9WQUwpOworCQkvKiBwcm9ncmFtIEJCIFBMTCBraSBhbmQga2QgdmFsdWUsIGtpPTB4NCwga2Q9MHg0MCAqLworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9DSDBfQkJfRFBMTDIsCisJCQkgICAgICBBUl9DSDBfQkJfRFBMTDJfUExMX1BXRCwgMHgxKTsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfQ0gwX0JCX0RQTEwyLAorCQkJICAgICAgQVJfQ0gwX0RQTEwyX0tELCAweDQwKTsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfQ0gwX0JCX0RQTEwyLAorCQkJICAgICAgQVJfQ0gwX0RQTEwyX0tJLCAweDQpOworCisJCVJFR19STVdfRklFTEQoYWgsIEFSX0NIMF9CQl9EUExMMSwKKwkJCSAgICAgIEFSX0NIMF9CQl9EUExMMV9SRUZESVYsIDB4NSk7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX0NIMF9CQl9EUExMMSwKKwkJCSAgICAgIEFSX0NIMF9CQl9EUExMMV9OSU5JLCAweDU4KTsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfQ0gwX0JCX0RQTEwxLAorCQkJICAgICAgQVJfQ0gwX0JCX0RQTEwxX05GUkFDLCAweDApOworCisJCVJFR19STVdfRklFTEQoYWgsIEFSX0NIMF9CQl9EUExMMiwKKwkJCSAgICAgIEFSX0NIMF9CQl9EUExMMl9PVVRESVYsIDB4MSk7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX0NIMF9CQl9EUExMMiwKKwkJCSAgICAgIEFSX0NIMF9CQl9EUExMMl9MT0NBTF9QTEwsIDB4MSk7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX0NIMF9CQl9EUExMMiwKKwkJCSAgICAgIEFSX0NIMF9CQl9EUExMMl9FTl9ORUdUUklHLCAweDEpOworCisJCS8qIHByb2dyYW0gQkIgUExMIHBoYXNlX3NoaWZ0IHRvIDB4NiAqLworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9DSDBfQkJfRFBMTDMsCisJCQkgICAgICBBUl9DSDBfQkJfRFBMTDNfUEhBU0VfU0hJRlQsIDB4Nik7CisKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfQ0gwX0JCX0RQTEwyLAorCQkJICAgICAgQVJfQ0gwX0JCX0RQTEwyX1BMTF9QV0QsIDB4MCk7CisJCXVkZWxheSgxMDAwKTsKKwl9IGVsc2UgaWYgKEFSX1NSRVZfOTM0MChhaCkpIHsKKwkJdTMyIHJlZ3ZhbCwgcGxsMl9kaXZpbnQsIHBsbDJfZGl2ZnJhYywgcmVmZGl2OwogCiAJCVJFR19XUklURShhaCwgQVJfUlRDX1BMTF9DT05UUk9MLCAweDExNDJjKTsKIAkJdWRlbGF5KDEwMDApOwogCi0JCVJFR19XUklURShhaCwgQVJfUlRDX1BMTF9DT05UUk9MMiwgMHg4ODY2NjYpOworCQlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX1BMTF9NT0RFLCAweDEgPDwgMTYpOworCQl1ZGVsYXkoMTAwKTsKIAotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9DSDBfQkJfRFBMTDIsCi0JCQkgICAgICBBUl9DSDBfRFBMTDJfS0QsIERQTEwyX0tEX1ZBTCk7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX0NIMF9CQl9EUExMMiwKLQkJCSAgICAgIEFSX0NIMF9EUExMMl9LSSwgRFBMTDJfS0lfVkFMKTsKKwkJaWYgKGFoLT5pc19jbGtfMjVtaHopIHsKKwkJCXBsbDJfZGl2aW50ID0gMHg1NDsKKwkJCXBsbDJfZGl2ZnJhYyA9IDB4MWViODU7CisJCQlyZWZkaXYgPSAzOworCQl9IGVsc2UgeworCQkJcGxsMl9kaXZpbnQgPSA4ODsKKwkJCXBsbDJfZGl2ZnJhYyA9IDA7CisJCQlyZWZkaXYgPSA1OworCQl9CiAKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfQ0gwX0JCX0RQTEwzLAotCQkJICAgICAgQVJfQ0gwX0RQTEwzX1BIQVNFX1NISUZULCBEUExMM19QSEFTRV9TSElGVF9WQUwpOwotCQlSRUdfV1JJVEUoYWgsIEFSX1JUQ19QTExfQ09OVFJPTCwgMHgxNDJjKTsKKwkJcmVndmFsID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9QTExfTU9ERSk7CisJCXJlZ3ZhbCB8PSAoMHgxIDw8IDE2KTsKKwkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUExMX01PREUsIHJlZ3ZhbCk7CisJCXVkZWxheSgxMDApOworCisJCVJFR19XUklURShhaCwgQVJfUEhZX1BMTF9DT05UUk9MLCAocmVmZGl2IDw8IDI3KSB8CisJCQkgIChwbGwyX2RpdmludCA8PCAxOCkgfCBwbGwyX2RpdmZyYWMpOworCQl1ZGVsYXkoMTAwKTsKKworCQlyZWd2YWwgPSBSRUdfUkVBRChhaCwgQVJfUEhZX1BMTF9NT0RFKTsKKwkJcmVndmFsID0gKHJlZ3ZhbCAmIDB4ODAwNzFmZmYpIHwgKDB4MSA8PCAzMCkgfCAoMHgxIDw8IDEzKSB8CisJCQkgKDB4NCA8PCAyNikgfCAoMHgxOCA8PCAxOSk7CisJCVJFR19XUklURShhaCwgQVJfUEhZX1BMTF9NT0RFLCByZWd2YWwpOworCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QTExfTU9ERSwKKwkJCSAgUkVHX1JFQUQoYWgsIEFSX1BIWV9QTExfTU9ERSkgJiAweGZmZmVmZmZmKTsKIAkJdWRlbGF5KDEwMDApOwogCX0KIApAQCAtNzIwLDYgKzc2Myw5IEBACiAKIAlSRUdfV1JJVEUoYWgsIEFSX1JUQ19QTExfQ09OVFJPTCwgcGxsKTsKIAorCWlmIChBUl9TUkVWXzk0ODUoYWgpIHx8IEFSX1NSRVZfOTM0MChhaCkpCisJCXVkZWxheSgxMDAwKTsKKwogCS8qIFN3aXRjaCB0aGUgY29yZSBjbG9jayBmb3IgYXI5MjcxIHRvIDExN01oeiAqLwogCWlmIChBUl9TUkVWXzkyNzEoYWgpKSB7CiAJCXVkZWxheSg1MDApOwpAQCAtNzI5LDE3ICs3NzUsMzQgQEAKIAl1ZGVsYXkoUlRDX1BMTF9TRVRUTEVfREVMQVkpOwogCiAJUkVHX1dSSVRFKGFoLCBBUl9SVENfU0xFRVBfQ0xLLCBBUl9SVENfRk9SQ0VfREVSSVZFRF9DTEspOworCisJaWYgKEFSX1NSRVZfOTM0MChhaCkpIHsKKwkJaWYgKGFoLT5pc19jbGtfMjVtaHopIHsKKwkJCVJFR19XUklURShhaCwgQVJfUlRDX0RFUklWRURfQ0xLLCAweDE3YyA8PCAxKTsKKwkJCVJFR19XUklURShhaCwgQVJfU0xQMzJfTU9ERSwgMHgwMDEwZjNkNyk7CisJCQlSRUdfV1JJVEUoYWgsICBBUl9TTFAzMl9JTkMsIDB4MDAwMWU3YWUpOworCQl9IGVsc2UgeworCQkJUkVHX1dSSVRFKGFoLCBBUl9SVENfREVSSVZFRF9DTEssIDB4MjYxIDw8IDEpOworCQkJUkVHX1dSSVRFKGFoLCBBUl9TTFAzMl9NT0RFLCAweDAwMTBmNDAwKTsKKwkJCVJFR19XUklURShhaCwgIEFSX1NMUDMyX0lOQywgMHgwMDAxZTgwMCk7CisJCX0KKwkJdWRlbGF5KDEwMCk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBhdGg5a19od19pbml0X2ludGVycnVwdF9tYXNrcyhzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkJICBlbnVtIG5sODAyMTFfaWZ0eXBlIG9wbW9kZSkKIHsKKwl1MzIgc3luY19kZWZhdWx0ID0gQVJfSU5UUl9TWU5DX0RFRkFVTFQ7CiAJdTMyIGltcl9yZWcgPSBBUl9JTVJfVFhFUlIgfAogCQlBUl9JTVJfVFhVUk4gfAogCQlBUl9JTVJfUlhFUlIgfAogCQlBUl9JTVJfUlhPUk4gfAogCQlBUl9JTVJfQkNOTUlTQzsKIAorCWlmIChBUl9TUkVWXzkzNDAoYWgpKQorCQlzeW5jX2RlZmF1bHQgJj0gfkFSX0lOVFJfU1lOQ19IT1NUMV9GQVRBTDsKKwogCWlmIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpKSB7CiAJCWltcl9yZWcgfD0gQVJfSU1SX1JYT0tfSFA7CiAJCWlmIChhaC0+Y29uZmlnLnJ4X2ludHJfbWl0aWdhdGlvbikKQEAgLTc3MCw3ICs4MzMsNyBAQAogCiAJaWYgKCFBUl9TUkVWXzkxMDAoYWgpKSB7CiAJCVJFR19XUklURShhaCwgQVJfSU5UUl9TWU5DX0NBVVNFLCAweEZGRkZGRkZGKTsKLQkJUkVHX1dSSVRFKGFoLCBBUl9JTlRSX1NZTkNfRU5BQkxFLCBBUl9JTlRSX1NZTkNfREVGQVVMVCk7CisJCVJFR19XUklURShhaCwgQVJfSU5UUl9TWU5DX0VOQUJMRSwgc3luY19kZWZhdWx0KTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9JTlRSX1NZTkNfTUFTSywgMCk7CiAJfQogCkBAIC04MzAsOCArODkzLDcgQEAKIAkJYWgtPm1pc2NfbW9kZSk7CiAKIAlpZiAoYWgtPm1pc2NfbW9kZSAhPSAwKQotCQlSRUdfV1JJVEUoYWgsIEFSX1BDVV9NSVNDLAotCQkJICBSRUdfUkVBRChhaCwgQVJfUENVX01JU0MpIHwgYWgtPm1pc2NfbW9kZSk7CisJCVJFR19TRVRfQklUKGFoLCBBUl9QQ1VfTUlTQywgYWgtPm1pc2NfbW9kZSk7CiAKIAlpZiAoY29uZi0+Y2hhbm5lbCAmJiBjb25mLT5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCiAJCXNpZnN0aW1lID0gMTY7CkBAIC04OTksMjMgKzk2MSwxOSBAQAogc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2h3X3NldF9kbWEoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7Ci0JdTMyIHJlZ3ZhbDsKIAogCUVOQUJMRV9SRUdXUklURV9CVUZGRVIoYWgpOwogCiAJLyoKIAkgKiBzZXQgQUhCX01PREUgbm90IHRvIGRvIGNhY2hlbGluZSBwcmVmZXRjaGVzCiAJKi8KLQlpZiAoIUFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkpIHsKLQkJcmVndmFsID0gUkVHX1JFQUQoYWgsIEFSX0FIQl9NT0RFKTsKLQkJUkVHX1dSSVRFKGFoLCBBUl9BSEJfTU9ERSwgcmVndmFsIHwgQVJfQUhCX1BSRUZFVENIX1JEX0VOKTsKLQl9CisJaWYgKCFBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpKQorCQlSRUdfU0VUX0JJVChhaCwgQVJfQUhCX01PREUsIEFSX0FIQl9QUkVGRVRDSF9SRF9FTik7CiAKIAkvKgogCSAqIGxldCBtYWMgZG1hIHJlYWRzIGJlIGluIDEyOCBieXRlIGNodW5rcwogCSAqLwotCXJlZ3ZhbCA9IFJFR19SRUFEKGFoLCBBUl9UWENGRykgJiB+QVJfVFhDRkdfRE1BU1pfTUFTSzsKLQlSRUdfV1JJVEUoYWgsIEFSX1RYQ0ZHLCByZWd2YWwgfCBBUl9UWENGR19ETUFTWl8xMjhCKTsKKwlSRUdfUk1XKGFoLCBBUl9UWENGRywgQVJfVFhDRkdfRE1BU1pfMTI4QiwgQVJfVFhDRkdfRE1BU1pfTUFTSyk7CiAKIAlSRUdXUklURV9CVUZGRVJfRkxVU0goYWgpOwogCkBAIC05MzIsOCArOTkwLDcgQEAKIAkvKgogCSAqIGxldCBtYWMgZG1hIHdyaXRlcyBiZSBpbiAxMjggYnl0ZSBjaHVua3MKIAkgKi8KLQlyZWd2YWwgPSBSRUdfUkVBRChhaCwgQVJfUlhDRkcpICYgfkFSX1JYQ0ZHX0RNQVNaX01BU0s7Ci0JUkVHX1dSSVRFKGFoLCBBUl9SWENGRywgcmVndmFsIHwgQVJfUlhDRkdfRE1BU1pfMTI4Qik7CisJUkVHX1JNVyhhaCwgQVJfUlhDRkcsIEFSX1JYQ0ZHX0RNQVNaXzEyOEIsIEFSX1JYQ0ZHX0RNQVNaX01BU0spOwogCiAJLyoKIAkgKiBTZXR1cCByZWNlaXZlIEZJRk8gdGhyZXNob2xkIHRvIGhvbGQgb2ZmIFRYIGFjdGl2aXRpZXMKQEAgLTk3MiwzMCArMTAyOSwyNyBAQAogCiBzdGF0aWMgdm9pZCBhdGg5a19od19zZXRfb3BlcmF0aW5nX21vZGUoc3RydWN0IGF0aF9odyAqYWgsIGludCBvcG1vZGUpCiB7Ci0JdTMyIHZhbDsKKwl1MzIgbWFzayA9IEFSX1NUQV9JRDFfU1RBX0FQIHwgQVJfU1RBX0lEMV9BREhPQzsKKwl1MzIgc2V0ID0gQVJfU1RBX0lEMV9LU1JDSF9NT0RFOwogCi0JdmFsID0gUkVHX1JFQUQoYWgsIEFSX1NUQV9JRDEpOwotCXZhbCAmPSB+KEFSX1NUQV9JRDFfU1RBX0FQIHwgQVJfU1RBX0lEMV9BREhPQyk7CiAJc3dpdGNoIChvcG1vZGUpIHsKLQljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgotCQlSRUdfV1JJVEUoYWgsIEFSX1NUQV9JRDEsIHZhbCB8IEFSX1NUQV9JRDFfU1RBX0FQCi0JCQkgIHwgQVJfU1RBX0lEMV9LU1JDSF9NT0RFKTsKLQkJUkVHX0NMUl9CSVQoYWgsIEFSX0NGRywgQVJfQ0ZHX0FQX0FESE9DX0lORElDQVRJT04pOwotCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKLQkJUkVHX1dSSVRFKGFoLCBBUl9TVEFfSUQxLCB2YWwgfCBBUl9TVEFfSUQxX0FESE9DCi0JCQkgIHwgQVJfU1RBX0lEMV9LU1JDSF9NT0RFKTsKKwkJc2V0IHw9IEFSX1NUQV9JRDFfQURIT0M7CiAJCVJFR19TRVRfQklUKGFoLCBBUl9DRkcsIEFSX0NGR19BUF9BREhPQ19JTkRJQ0FUSU9OKTsKIAkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwkJc2V0IHw9IEFSX1NUQV9JRDFfU1RBX0FQOworCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046Ci0JCVJFR19XUklURShhaCwgQVJfU1RBX0lEMSwgdmFsIHwgQVJfU1RBX0lEMV9LU1JDSF9NT0RFKTsKKwkJUkVHX0NMUl9CSVQoYWgsIEFSX0NGRywgQVJfQ0ZHX0FQX0FESE9DX0lORElDQVRJT04pOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlpZiAoYWgtPmlzX21vbml0b3JpbmcpCi0JCQlSRUdfV1JJVEUoYWgsIEFSX1NUQV9JRDEsIHZhbCB8IEFSX1NUQV9JRDFfS1NSQ0hfTU9ERSk7CisJCWlmICghYWgtPmlzX21vbml0b3JpbmcpCisJCQlzZXQgPSAwOwogCQlicmVhazsKIAl9CisJUkVHX1JNVyhhaCwgQVJfU1RBX0lEMSwgc2V0LCBtYXNrKTsKIH0KIAogdm9pZCBhdGg5a19od19nZXRfZGVsdGFfc2xvcGVfdmFscyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGNvZWZfc2NhbGVkLApAQCAtMTAyMSwxMCArMTA3NSw4IEBACiAJdTMyIHRtcFJlZzsKIAogCWlmIChBUl9TUkVWXzkxMDAoYWgpKSB7Ci0JCXUzMiB2YWwgPSBSRUdfUkVBRChhaCwgQVJfUlRDX0RFUklWRURfQ0xLKTsKLQkJdmFsICY9IH5BUl9SVENfREVSSVZFRF9DTEtfUEVSSU9EOwotCQl2YWwgfD0gU00oMSwgQVJfUlRDX0RFUklWRURfQ0xLX1BFUklPRCk7Ci0JCVJFR19XUklURShhaCwgQVJfUlRDX0RFUklWRURfQ0xLLCB2YWwpOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9SVENfREVSSVZFRF9DTEssCisJCQkgICAgICBBUl9SVENfREVSSVZFRF9DTEtfUEVSSU9ELCAxKTsKIAkJKHZvaWQpUkVHX1JFQUQoYWgsIEFSX1JUQ19ERVJJVkVEX0NMSyk7CiAJfQogCkBAIC0xMjEyLDYgKzEyNjQsMjAgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIHZvaWQgYXRoOWtfaHdfYXBwbHlfZ3Bpb19vdmVycmlkZShzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwl1MzIgZ3Bpb19tYXNrID0gYWgtPmdwaW9fbWFzazsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGdwaW9fbWFzazsgaSsrLCBncGlvX21hc2sgPj49IDEpIHsKKwkJaWYgKCEoZ3Bpb19tYXNrICYgMSkpCisJCQljb250aW51ZTsKKworCQlhdGg5a19od19jZmdfb3V0cHV0KGFoLCBpLCBBUl9HUElPX09VVFBVVF9NVVhfQVNfT1VUUFVUKTsKKwkJYXRoOWtfaHdfc2V0X2dwaW8oYWgsIGksICEhKGFoLT5ncGlvX3ZhbCAmIEJJVChpKSkpOworCX0KK30KKwogYm9vbCBhdGg5a19od19jaGVja19hbGl2ZShzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlpbnQgY291bnQgPSA1MDsKQEAgLTE0MDksNyArMTQ3NSw3IEBACiAJUkVHV1JJVEVfQlVGRkVSX0ZMVVNIKGFoKTsKIAogCWFoLT5pbnRyX3R4cXMgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBhaC0+Y2Fwcy50b3RhbF9xdWV1ZXM7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgQVRIOUtfTlVNX1RYX1FVRVVFUzsgaSsrKQogCQlhdGg5a19od19yZXNldHR4cXVldWUoYWgsIGkpOwogCiAJYXRoOWtfaHdfaW5pdF9pbnRlcnJ1cHRfbWFza3MoYWgsIGFoLT5vcG1vZGUpOwpAQCAtMTQyNiw4ICsxNDkyLDcgQEAKIAkJYXI5MDAyX2h3X2VuYWJsZV93ZXBfYWdncmVnYXRpb24oYWgpOwogCX0KIAotCVJFR19XUklURShhaCwgQVJfU1RBX0lEMSwKLQkJICBSRUdfUkVBRChhaCwgQVJfU1RBX0lEMSkgfCBBUl9TVEFfSUQxX1BSRVNFUlZFX1NFUU5VTSk7CisJUkVHX1NFVF9CSVQoYWgsIEFSX1NUQV9JRDEsIEFSX1NUQV9JRDFfUFJFU0VSVkVfU0VRTlVNKTsKIAogCWF0aDlrX2h3X3NldF9kbWEoYWgpOwogCkBAIC0xNDgwLDcgKzE1NDUsOSBAQAogCQkJCVJFR19XUklURShhaCwgQVJfQ0ZHLCBBUl9DRkdfU1dURCB8IEFSX0NGR19TV1JEKTsKIAkJfQogI2lmZGVmIF9fQklHX0VORElBTgotICAgICAgICAgICAgICAgIGVsc2UKKwkJZWxzZSBpZiAoQVJfU1JFVl85MzQwKGFoKSkKKwkJCVJFR19STVcoYWgsIEFSX0NGRywgQVJfQ0ZHX1NXUkIgfCBBUl9DRkdfU1dUQiwgMCk7CisJCWVsc2UKIAkJCVJFR19XUklURShhaCwgQVJfQ0ZHLCBBUl9DRkdfU1dURCB8IEFSX0NGR19TV1JEKTsKICNlbmRpZgogCX0KQEAgLTE0OTEsNiArMTU1OCw4IEBACiAJaWYgKEFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkpCiAJCWFyOTAwM19od19iYl93YXRjaGRvZ19jb25maWcoYWgpOwogCisJYXRoOWtfaHdfYXBwbHlfZ3Bpb19vdmVycmlkZShhaCk7CisKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woYXRoOWtfaHdfcmVzZXQpOwpAQCAtMTY3MCwyMSArMTczOSwxNSBAQAogCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKIAkJUkVHX1NFVF9CSVQoYWgsIEFSX1RYQ0ZHLAogCQkJICAgIEFSX1RYQ0ZHX0FESE9DX0JFQUNPTl9BVElNX1RYX1BPTElDWSk7Ci0JCVJFR19XUklURShhaCwgQVJfTkVYVF9ORFBfVElNRVIsCi0JCQkgIFRVX1RPX1VTRUMobmV4dF9iZWFjb24gKwotCQkJCSAgICAgKGFoLT5hdGltX3dpbmRvdyA/IGFoLT4KLQkJCQkgICAgICBhdGltX3dpbmRvdyA6IDEpKSk7CisJCVJFR19XUklURShhaCwgQVJfTkVYVF9ORFBfVElNRVIsIG5leHRfYmVhY29uICsKKwkJCSAgVFVfVE9fVVNFQyhhaC0+YXRpbV93aW5kb3cgPyBhaC0+YXRpbV93aW5kb3cgOiAxKSk7CiAJCWZsYWdzIHw9IEFSX05EUF9USU1FUl9FTjsKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgotCQlSRUdfV1JJVEUoYWgsIEFSX05FWFRfVEJUVF9USU1FUiwgVFVfVE9fVVNFQyhuZXh0X2JlYWNvbikpOwotCQlSRUdfV1JJVEUoYWgsIEFSX05FWFRfRE1BX0JFQUNPTl9BTEVSVCwKLQkJCSAgVFVfVE9fVVNFQyhuZXh0X2JlYWNvbiAtCi0JCQkJICAgICBhaC0+Y29uZmlnLgotCQkJCSAgICAgZG1hX2JlYWNvbl9yZXNwb25zZV90aW1lKSk7Ci0JCVJFR19XUklURShhaCwgQVJfTkVYVF9TV0JBLAotCQkJICBUVV9UT19VU0VDKG5leHRfYmVhY29uIC0KLQkJCQkgICAgIGFoLT5jb25maWcuCi0JCQkJICAgICBzd19iZWFjb25fcmVzcG9uc2VfdGltZSkpOworCQlSRUdfV1JJVEUoYWgsIEFSX05FWFRfVEJUVF9USU1FUiwgbmV4dF9iZWFjb24pOworCQlSRUdfV1JJVEUoYWgsIEFSX05FWFRfRE1BX0JFQUNPTl9BTEVSVCwgbmV4dF9iZWFjb24gLQorCQkJICBUVV9UT19VU0VDKGFoLT5jb25maWcuZG1hX2JlYWNvbl9yZXNwb25zZV90aW1lKSk7CisJCVJFR19XUklURShhaCwgQVJfTkVYVF9TV0JBLCBuZXh0X2JlYWNvbiAtCisJCQkgIFRVX1RPX1VTRUMoYWgtPmNvbmZpZy5zd19iZWFjb25fcmVzcG9uc2VfdGltZSkpOwogCQlmbGFncyB8PQogCQkJQVJfVEJUVF9USU1FUl9FTiB8IEFSX0RCQV9USU1FUl9FTiB8IEFSX1NXQkFfVElNRVJfRU47CiAJCWJyZWFrOwpAQCAtMTY5NiwxOCArMTc1OSwxMyBAQAogCQlicmVhazsKIAl9CiAKLQlSRUdfV1JJVEUoYWgsIEFSX0JFQUNPTl9QRVJJT0QsIFRVX1RPX1VTRUMoYmVhY29uX3BlcmlvZCkpOwotCVJFR19XUklURShhaCwgQVJfRE1BX0JFQUNPTl9QRVJJT0QsIFRVX1RPX1VTRUMoYmVhY29uX3BlcmlvZCkpOwotCVJFR19XUklURShhaCwgQVJfU1dCQV9QRVJJT0QsIFRVX1RPX1VTRUMoYmVhY29uX3BlcmlvZCkpOwotCVJFR19XUklURShhaCwgQVJfTkRQX1BFUklPRCwgVFVfVE9fVVNFQyhiZWFjb25fcGVyaW9kKSk7CisJUkVHX1dSSVRFKGFoLCBBUl9CRUFDT05fUEVSSU9ELCBiZWFjb25fcGVyaW9kKTsKKwlSRUdfV1JJVEUoYWgsIEFSX0RNQV9CRUFDT05fUEVSSU9ELCBiZWFjb25fcGVyaW9kKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1NXQkFfUEVSSU9ELCBiZWFjb25fcGVyaW9kKTsKKwlSRUdfV1JJVEUoYWgsIEFSX05EUF9QRVJJT0QsIGJlYWNvbl9wZXJpb2QpOwogCiAJUkVHV1JJVEVfQlVGRkVSX0ZMVVNIKGFoKTsKIAotCWJlYWNvbl9wZXJpb2QgJj0gfkFUSDlLX0JFQUNPTl9FTkE7Ci0JaWYgKGJlYWNvbl9wZXJpb2QgJiBBVEg5S19CRUFDT05fUkVTRVRfVFNGKSB7Ci0JCWF0aDlrX2h3X3Jlc2V0X3RzZihhaCk7Ci0JfQotCiAJUkVHX1NFVF9CSVQoYWgsIEFSX1RJTUVSX01PREUsIGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0woYXRoOWtfaHdfYmVhY29uaW5pdCk7CkBAIC0xNzk1LDcgKzE4NTMsNyBAQAogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwogCXN0cnVjdCBhdGhfYnRjb2V4X2h3ICpidGNvZXhfaHcgPSAmYWgtPmJ0Y29leF9odzsKIAotCXUxNiBjYXBGaWVsZCA9IDAsIGVldmFsOworCXUxNiBlZXZhbDsKIAl1OCBhbnRfZGl2X2N0bDEsIHR4X2NoYWlubWFzaywgcnhfY2hhaW5tYXNrOwogCiAJZWV2YWwgPSBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX1JFR18wKTsKQEAgLTE4MDYsOCArMTg2NCw2IEBACiAJCWVldmFsIHw9IEFSOTI4NV9SREVYVF9ERUZBVUxUOwogCXJlZ3VsYXRvcnktPmN1cnJlbnRfcmRfZXh0ID0gZWV2YWw7CiAKLQljYXBGaWVsZCA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfT1BfQ0FQKTsKLQogCWlmIChhaC0+b3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX0FQICYmCiAJICAgIGFoLT5od192ZXJzaW9uLnN1YnZlbmRvcmlkID09IEFSX1NVQlZFTkRPUl9JRF9ORVdfQSkgewogCQlpZiAocmVndWxhdG9yeS0+Y3VycmVudF9yZCA9PSAweDY0IHx8CkBAIC0xODQyLDYgKzE4OTgsOCBAQAogCSAgICAhKEFSX1NSRVZfOTI3MShhaCkpKQogCQkvKiBDQjcxOiBHUElPIDAgaXMgcHVsbGVkIGRvd24gdG8gaW5kaWNhdGUgMyByeCBjaGFpbnMgKi8KIAkJcENhcC0+cnhfY2hhaW5tYXNrID0gYXRoOWtfaHdfZ3Bpb19nZXQoYWgsIDApID8gMHg1IDogMHg3OworCWVsc2UgaWYgKEFSX1NSRVZfOTEwMChhaCkpCisJCXBDYXAtPnJ4X2NoYWlubWFzayA9IDB4NzsKIAllbHNlCiAJCS8qIFVzZSByeF9jaGFpbm1hc2sgZnJvbSBFRVBST00uICovCiAJCXBDYXAtPnJ4X2NoYWlubWFzayA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfUlhfTUFTSyk7CkBAIC0xODUyLDM2ICsxOTEwLDEzIEBACiAJaWYgKEFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkpCiAJCWFoLT5taXNjX21vZGUgfD0gQVJfUENVX0FMV0FZU19QRVJGT1JNX0tFWVNFQVJDSDsKIAotCXBDYXAtPmxvd18yZ2h6X2NoYW4gPSAyMzEyOwotCXBDYXAtPmhpZ2hfMmdoel9jaGFuID0gMjczMjsKLQotCXBDYXAtPmxvd181Z2h6X2NoYW4gPSA0OTIwOwotCXBDYXAtPmhpZ2hfNWdoel9jaGFuID0gNjEwMDsKLQogCWNvbW1vbi0+Y3J5cHRfY2FwcyB8PSBBVEhfQ1JZUFRfQ0FQX0NJUEhFUl9BRVNDQ007CiAKLQlpZiAoYWgtPmNvbmZpZy5odF9lbmFibGUpCisJaWYgKGFoLT5od192ZXJzaW9uLmRldmlkICE9IEFSMjQyN19ERVZJRF9QQ0lFKQogCQlwQ2FwLT5od19jYXBzIHw9IEFUSDlLX0hXX0NBUF9IVDsKIAllbHNlCiAJCXBDYXAtPmh3X2NhcHMgJj0gfkFUSDlLX0hXX0NBUF9IVDsKIAotCWlmIChjYXBGaWVsZCAmIEFSX0VFUFJPTV9FRVBDQVBfTUFYUUNVKQotCQlwQ2FwLT50b3RhbF9xdWV1ZXMgPQotCQkJTVMoY2FwRmllbGQsIEFSX0VFUFJPTV9FRVBDQVBfTUFYUUNVKTsKLQllbHNlCi0JCXBDYXAtPnRvdGFsX3F1ZXVlcyA9IEFUSDlLX05VTV9UWF9RVUVVRVM7Ci0KLQlpZiAoY2FwRmllbGQgJiBBUl9FRVBST01fRUVQQ0FQX0tDX0VOVFJJRVMpCi0JCXBDYXAtPmtleWNhY2hlX3NpemUgPQotCQkJMSA8PCBNUyhjYXBGaWVsZCwgQVJfRUVQUk9NX0VFUENBUF9LQ19FTlRSSUVTKTsKLQllbHNlCi0JCXBDYXAtPmtleWNhY2hlX3NpemUgPSBBUl9LRVlUQUJMRV9TSVpFOwotCi0JaWYgKEFSX1NSRVZfOTI4NShhaCkgfHwgQVJfU1JFVl85MjcxKGFoKSkKLQkJcENhcC0+dHhfdHJpZ2xldmVsX21heCA9IE1BWF9UWF9GSUZPX1RIUkVTSE9MRCA+PiAxOwotCWVsc2UKLQkJcENhcC0+dHhfdHJpZ2xldmVsX21heCA9IE1BWF9UWF9GSUZPX1RIUkVTSE9MRDsKLQogCWlmIChBUl9TUkVWXzkyNzEoYWgpKQogCQlwQ2FwLT5udW1fZ3Bpb19waW5zID0gQVI5MjcxX05VTV9HUElPOwogCWVsc2UgaWYgKEFSX0RFVklEXzcwMTAoYWgpKQpAQCAtMTkwMCw4ICsxOTM1LDYgQEAKIAkJcENhcC0+cnRzX2FnZ3JfbGltaXQgPSAoOCAqIDEwMjQpOwogCX0KIAotCXBDYXAtPmh3X2NhcHMgfD0gQVRIOUtfSFdfQ0FQX0VOSEFOQ0VEUE07Ci0KICNpZiBkZWZpbmVkKENPTkZJR19SRktJTEwpIHx8IGRlZmluZWQoQ09ORklHX1JGS0lMTF9NT0RVTEUpCiAJYWgtPnJmc2lsZW50ID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9SRl9TSUxFTlQpOwogCWlmIChhaC0+cmZzaWxlbnQgJiBFRVBfUkZTSUxFTlRfRU5BQkxFRCkgewpAQCAtMTkyMywzMiArMTk1NiwyMyBAQAogCWVsc2UKIAkJcENhcC0+aHdfY2FwcyB8PSBBVEg5S19IV19DQVBfNEtCX1NQTElUVFJBTlM7CiAKLQlpZiAocmVndWxhdG9yeS0+Y3VycmVudF9yZF9leHQgJiAoMSA8PCBSRUdfRVhUX0pBUEFOX01JREJBTkQpKSB7Ci0JCXBDYXAtPnJlZ19jYXAgPQotCQkJQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX05FV18xMUEgfAotCQkJQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX1UxX0VWRU4gfAotCQkJQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX1UyIHwKLQkJCUFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19NSURCQU5EOwotCX0gZWxzZSB7Ci0JCXBDYXAtPnJlZ19jYXAgPQotCQkJQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX05FV18xMUEgfAotCQkJQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX1UxX0VWRU47Ci0JfQotCi0JLyogQWR2ZXJ0aXNlIG1pZGJhbmQgZm9yIEFSNTQxNiB3aXRoIEZDQyBtaWRiYW5kIHNldCBpbiBlZXByb20gKi8KLQlpZiAocmVndWxhdG9yeS0+Y3VycmVudF9yZF9leHQgJiAoMSA8PCBSRUdfRVhUX0ZDQ19NSURCQU5EKSAmJgotCSAgICBBUl9TUkVWXzU0MTYoYWgpKQotCQlwQ2FwLT5yZWdfY2FwIHw9IEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9GQ0NfTUlEQkFORDsKLQotCWlmIChBUl9TUkVWXzkyODBfMjBfT1JfTEFURVIoYWgpICYmIGNvbW1vbi0+YnRjb2V4X2VuYWJsZWQpIHsKLQkJYnRjb2V4X2h3LT5idGFjdGl2ZV9ncGlvID0gQVRIX0JUQUNUSVZFX0dQSU87Ci0JCWJ0Y29leF9ody0+d2xhbmFjdGl2ZV9ncGlvID0gQVRIX1dMQU5BQ1RJVkVfR1BJTzsKLQotCQlpZiAoQVJfU1JFVl85Mjg1KGFoKSkgeworCWlmIChjb21tb24tPmJ0Y29leF9lbmFibGVkKSB7CisJCWlmIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpKSB7CiAJCQlidGNvZXhfaHctPnNjaGVtZSA9IEFUSF9CVENPRVhfQ0ZHXzNXSVJFOwotCQkJYnRjb2V4X2h3LT5idHByaW9yaXR5X2dwaW8gPSBBVEhfQlRQUklPUklUWV9HUElPOwotCQl9IGVsc2UgewotCQkJYnRjb2V4X2h3LT5zY2hlbWUgPSBBVEhfQlRDT0VYX0NGR18yV0lSRTsKKwkJCWJ0Y29leF9ody0+YnRhY3RpdmVfZ3BpbyA9IEFUSF9CVEFDVElWRV9HUElPXzkzMDA7CisJCQlidGNvZXhfaHctPndsYW5hY3RpdmVfZ3BpbyA9IEFUSF9XTEFOQUNUSVZFX0dQSU9fOTMwMDsKKwkJCWJ0Y29leF9ody0+YnRwcmlvcml0eV9ncGlvID0gQVRIX0JUUFJJT1JJVFlfR1BJT185MzAwOworCQl9IGVsc2UgaWYgKEFSX1NSRVZfOTI4MF8yMF9PUl9MQVRFUihhaCkpIHsKKwkJCWJ0Y29leF9ody0+YnRhY3RpdmVfZ3BpbyA9IEFUSF9CVEFDVElWRV9HUElPXzkyODA7CisJCQlidGNvZXhfaHctPndsYW5hY3RpdmVfZ3BpbyA9IEFUSF9XTEFOQUNUSVZFX0dQSU9fOTI4MDsKKworCQkJaWYgKEFSX1NSRVZfOTI4NShhaCkpIHsKKwkJCQlidGNvZXhfaHctPnNjaGVtZSA9IEFUSF9CVENPRVhfQ0ZHXzNXSVJFOworCQkJCWJ0Y29leF9ody0+YnRwcmlvcml0eV9ncGlvID0KKwkJCQkJCUFUSF9CVFBSSU9SSVRZX0dQSU9fOTI4NTsKKwkJCX0gZWxzZSB7CisJCQkJYnRjb2V4X2h3LT5zY2hlbWUgPSBBVEhfQlRDT0VYX0NGR18yV0lSRTsKKwkJCX0KIAkJfQogCX0gZWxzZSB7CiAJCWJ0Y29leF9ody0+c2NoZW1lID0gQVRIX0JUQ09FWF9DRkdfTk9ORTsKQEAgLTE5OTgsNiArMjAyMiwyMiBAQAogCX0KIAogCisJaWYgKEFSX1NSRVZfOTQ4NShhaCkpIHsKKwkJYW50X2Rpdl9jdGwxID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9BTlRfRElWX0NUTDEpOworCQkvKgorCQkgKiBlbmFibGUgdGhlIGRpdmVyc2l0eS1jb21iaW5pbmcgYWxnb3JpdGhtIG9ubHkgd2hlbgorCQkgKiBib3RoIGVuYWJsZV9sbmFfZGl2IGFuZCBlbmFibGVfZmFzdF9kaXYgYXJlIHNldAorCQkgKgkJVGFibGUgZm9yIERpdmVyc2l0eQorCQkgKiBhbnRfZGl2X2FsdF9sbmFjb25mCQliaXQgMC0xCisJCSAqIGFudF9kaXZfbWFpbl9sbmFjb25mCQliaXQgMi0zCisJCSAqIGFudF9kaXZfYWx0X2dhaW50YgkJYml0IDQKKwkJICogYW50X2Rpdl9tYWluX2dhaW50YgkJYml0IDUKKwkJICogZW5hYmxlX2FudF9kaXZfbG5hZGl2CWJpdCA2CisJCSAqIGVuYWJsZV9hbnRfZmFzdF9kaXYJCWJpdCA3CisJCSAqLworCQlpZiAoKGFudF9kaXZfY3RsMSA+PiAweDYpID09IDB4MykKKwkJCXBDYXAtPmh3X2NhcHMgfD0gQVRIOUtfSFdfQ0FQX0FOVF9ESVZfQ09NQjsKKwl9CiAKIAlpZiAoQVJfU1JFVl85NDg1XzEwKGFoKSkgewogCQlwQ2FwLT5wY2llX2xjcl9leHRzeW5jX2VuID0gdHJ1ZTsKQEAgLTIxODYsMTEgKzIyMjYsOSBAQAogCVJFR19XUklURShhaCwgQVJfUEhZX0VSUiwgcGh5Yml0cyk7CiAKIAlpZiAocGh5Yml0cykKLQkJUkVHX1dSSVRFKGFoLCBBUl9SWENGRywKLQkJCSAgUkVHX1JFQUQoYWgsIEFSX1JYQ0ZHKSB8IEFSX1JYQ0ZHX1pMRkRNQSk7CisJCVJFR19TRVRfQklUKGFoLCBBUl9SWENGRywgQVJfUlhDRkdfWkxGRE1BKTsKIAllbHNlCi0JCVJFR19XUklURShhaCwgQVJfUlhDRkcsCi0JCQkgIFJFR19SRUFEKGFoLCBBUl9SWENGRykgJiB+QVJfUlhDRkdfWkxGRE1BKTsKKwkJUkVHX0NMUl9CSVQoYWgsIEFSX1JYQ0ZHLCBBUl9SWENGR19aTEZETUEpOwogCiAJUkVHV1JJVEVfQlVGRkVSX0ZMVVNIKGFoKTsKIH0KQEAgLTIzNjYsMTAgKzI0MDQsMTEgQEAKIAlyZXR1cm4gdGltZXJfdGFibGUtPmdlbl90aW1lcl9pbmRleFtiXTsKIH0KIAotc3RhdGljIHUzMiBhdGg5a19od19nZXR0c2YzMihzdHJ1Y3QgYXRoX2h3ICphaCkKK3UzMiBhdGg5a19od19nZXR0c2YzMihzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlyZXR1cm4gUkVHX1JFQUQoYWgsIEFSX1RTRl9MMzIpOwogfQorRVhQT1JUX1NZTUJPTChhdGg5a19od19nZXR0c2YzMik7CiAKIHN0cnVjdCBhdGhfZ2VuX3RpbWVyICphdGhfZ2VuX3RpbWVyX2FsbG9jKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCQkgIHZvaWQgKCp0cmlnZ2VyKSh2b2lkICopLApAQCAtMjQwMiwxMSArMjQ0MSwxMSBAQAogCiB2b2lkIGF0aDlrX2h3X2dlbl90aW1lcl9zdGFydChzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCSAgICAgIHN0cnVjdCBhdGhfZ2VuX3RpbWVyICp0aW1lciwKLQkJCSAgICAgIHUzMiB0aW1lcl9uZXh0LAorCQkJICAgICAgdTMyIHRyaWdfdGltZW91dCwKIAkJCSAgICAgIHUzMiB0aW1lcl9wZXJpb2QpCiB7CiAJc3RydWN0IGF0aF9nZW5fdGltZXJfdGFibGUgKnRpbWVyX3RhYmxlID0gJmFoLT5od19nZW5fdGltZXJzOwotCXUzMiB0c2Y7CisJdTMyIHRzZiwgdGltZXJfbmV4dDsKIAogCUJVR19PTighdGltZXJfcGVyaW9kKTsKIApAQCAtMjQxNCwxOCArMjQ1MywxMyBAQAogCiAJdHNmID0gYXRoOWtfaHdfZ2V0dHNmMzIoYWgpOwogCisJdGltZXJfbmV4dCA9IHRzZiArIHRyaWdfdGltZW91dDsKKwogCWF0aF9kYmcoYXRoOWtfaHdfY29tbW9uKGFoKSwgQVRIX0RCR19IV1RJTUVSLAogCQkiY3VycmVudCB0c2YgJXggcGVyaW9kICV4IHRpbWVyX25leHQgJXhcbiIsCiAJCXRzZiwgdGltZXJfcGVyaW9kLCB0aW1lcl9uZXh0KTsKIAogCS8qCi0JICogUHVsbCB0aW1lcl9uZXh0IGZvcndhcmQgaWYgdGhlIGN1cnJlbnQgVFNGIGFscmVhZHkgcGFzc2VkIGl0Ci0JICogYmVjYXVzZSBvZiBzb2Z0d2FyZSBsYXRlbmN5Ci0JICovCi0JaWYgKHRpbWVyX25leHQgPCB0c2YpCi0JCXRpbWVyX25leHQgPSB0c2YgKyB0aW1lcl9wZXJpb2Q7Ci0KLQkvKgogCSAqIFByb2dyYW0gZ2VuZXJpYyB0aW1lciByZWdpc3RlcnMKIAkgKi8KIAlSRUdfV1JJVEUoYWgsIGdlbl90bXJfY29uZmlndXJhdGlvblt0aW1lci0+aW5kZXhdLm5leHRfYWRkciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmgKaW5kZXggNjY1MGZkNC4uN2FmMjc3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmgKQEAgLTQzLDYgKzQzLDcgQEAKICNkZWZpbmUgQVI5Mjg3X0RFVklEX1BDSQkweDAwMmQKICNkZWZpbmUgQVI5Mjg3X0RFVklEX1BDSUUJMHgwMDJlCiAjZGVmaW5lIEFSOTMwMF9ERVZJRF9QQ0lFCTB4MDAzMAorI2RlZmluZSBBUjkzMDBfREVWSURfQVI5MzQwCTB4MDAzMQogI2RlZmluZSBBUjkzMDBfREVWSURfQVI5NDg1X1BDSUUgMHgwMDMyCiAKICNkZWZpbmUgQVI1NDE2X0FSOTEwMF9ERVZJRAkweDAwMGIKQEAgLTU1LDYgKzU2LDkgQEAKICNkZWZpbmUgQVQ5Mjg1X0NPRVgzV0lSRV9TQV9TVUJTWVNJRAkweDMwYWEKICNkZWZpbmUgQVQ5Mjg1X0NPRVgzV0lSRV9EQV9TVUJTWVNJRAkweDMwYWIKIAorI2RlZmluZSBBUjkzMDBfTlVNX0JUX1dFSUdIVFMgICA0CisjZGVmaW5lIEFSOTMwMF9OVU1fV0xBTl9XRUlHSFRTIDQKKwogI2RlZmluZSBBVEhfQU1QRFVfTElNSVRfTUFYICAgICAgICAoNjQgKiAxMDI0IC0gMSkKIAogI2RlZmluZQlBVEhfREVGQVVMVF9OT0lTRV9GTE9PUiAtOTUKQEAgLTY1LDUzICs2OSw0OSBAQAogCiAvKiBSZWdpc3RlciByZWFkL3dyaXRlIHByaW1pdGl2ZXMgKi8KICNkZWZpbmUgUkVHX1dSSVRFKF9haCwgX3JlZywgX3ZhbCkgXAotCWF0aDlrX2h3X2NvbW1vbihfYWgpLT5vcHMtPndyaXRlKChfYWgpLCAoX3ZhbCksIChfcmVnKSkKKwkoX2FoKS0+cmVnX29wcy53cml0ZSgoX2FoKSwgKF92YWwpLCAoX3JlZykpCiAKICNkZWZpbmUgUkVHX1JFQUQoX2FoLCBfcmVnKSBcCi0JYXRoOWtfaHdfY29tbW9uKF9haCktPm9wcy0+cmVhZCgoX2FoKSwgKF9yZWcpKQorCShfYWgpLT5yZWdfb3BzLnJlYWQoKF9haCksIChfcmVnKSkKIAogI2RlZmluZSBSRUdfUkVBRF9NVUxUSShfYWgsIF9hZGRyLCBfdmFsLCBfY250KQkJXAotCWF0aDlrX2h3X2NvbW1vbihfYWgpLT5vcHMtPm11bHRpX3JlYWQoKF9haCksIChfYWRkciksIChfdmFsKSwgKF9jbnQpKQorCShfYWgpLT5yZWdfb3BzLm11bHRpX3JlYWQoKF9haCksIChfYWRkciksIChfdmFsKSwgKF9jbnQpKQorCisjZGVmaW5lIFJFR19STVcoX2FoLCBfcmVnLCBfc2V0LCBfY2xyKSBcCisJKF9haCktPnJlZ19vcHMucm13KChfYWgpLCAoX3JlZyksIChfc2V0KSwgKF9jbHIpKQogCiAjZGVmaW5lIEVOQUJMRV9SRUdXUklURV9CVUZGRVIoX2FoKQkJCQkJXAogCWRvIHsJCQkJCQkJCVwKLQkJaWYgKGF0aDlrX2h3X2NvbW1vbihfYWgpLT5vcHMtPmVuYWJsZV93cml0ZV9idWZmZXIpCVwKLQkJCWF0aDlrX2h3X2NvbW1vbihfYWgpLT5vcHMtPmVuYWJsZV93cml0ZV9idWZmZXIoKF9haCkpOyBcCisJCWlmICgoX2FoKS0+cmVnX29wcy5lbmFibGVfd3JpdGVfYnVmZmVyKQlcCisJCQkoX2FoKS0+cmVnX29wcy5lbmFibGVfd3JpdGVfYnVmZmVyKChfYWgpKTsgXAogCX0gd2hpbGUgKDApCiAKICNkZWZpbmUgUkVHV1JJVEVfQlVGRkVSX0ZMVVNIKF9haCkJCQkJCVwKIAlkbyB7CQkJCQkJCQlcCi0JCWlmIChhdGg5a19od19jb21tb24oX2FoKS0+b3BzLT53cml0ZV9mbHVzaCkJCVwKLQkJCWF0aDlrX2h3X2NvbW1vbihfYWgpLT5vcHMtPndyaXRlX2ZsdXNoKChfYWgpKTsJXAorCQlpZiAoKF9haCktPnJlZ19vcHMud3JpdGVfZmx1c2gpCQlcCisJCQkoX2FoKS0+cmVnX29wcy53cml0ZV9mbHVzaCgoX2FoKSk7CVwKIAl9IHdoaWxlICgwKQogCiAjZGVmaW5lIFNNKF92LCBfZikgICgoKF92KSA8PCBfZiMjX1MpICYgX2YpCiAjZGVmaW5lIE1TKF92LCBfZikgICgoKF92KSAmIF9mKSA+PiBfZiMjX1MpCi0jZGVmaW5lIFJFR19STVcoX2EsIF9yLCBfc2V0LCBfY2xyKSAgICBcCi0JUkVHX1dSSVRFKF9hLCBfciwgKFJFR19SRUFEKF9hLCBfcikgJiB+KF9jbHIpKSB8IChfc2V0KSkKICNkZWZpbmUgUkVHX1JNV19GSUVMRChfYSwgX3IsIF9mLCBfdikgXAotCVJFR19XUklURShfYSwgX3IsIFwKLQkoUkVHX1JFQUQoX2EsIF9yKSAmIH5fZikgfCAoKChfdikgPDwgX2YjI19TKSAmIF9mKSkKKwlSRUdfUk1XKF9hLCBfciwgKCgoX3YpIDw8IF9mIyNfUykgJiBfZiksIChfZikpCiAjZGVmaW5lIFJFR19SRUFEX0ZJRUxEKF9hLCBfciwgX2YpIFwKIAkoKChSRUdfUkVBRChfYSwgX3IpICYgX2YpID4+IF9mIyNfUykpCiAjZGVmaW5lIFJFR19TRVRfQklUKF9hLCBfciwgX2YpIFwKLQlSRUdfV1JJVEUoX2EsIF9yLCBSRUdfUkVBRChfYSwgX3IpIHwgKF9mKSkKKwlSRUdfUk1XKF9hLCBfciwgKF9mKSwgMCkKICNkZWZpbmUgUkVHX0NMUl9CSVQoX2EsIF9yLCBfZikgXAotCVJFR19XUklURShfYSwgX3IsIFJFR19SRUFEKF9hLCBfcikgJiB+KF9mKSkKKwlSRUdfUk1XKF9hLCBfciwgMCwgKF9mKSkKIAotI2RlZmluZSBET19ERUxBWSh4KSBkbyB7CQkJXAotCQlpZiAoKCsrKHgpICUgNjQpID09IDApICAgICAgICAgIFwKLQkJCXVkZWxheSgxKTsJCVwKKyNkZWZpbmUgRE9fREVMQVkoeCkgZG8gewkJCQkJXAorCQlpZiAoKCgrKyh4KSAlIDY0KSA9PSAwKSAmJgkJCVwKKwkJICAgIChhdGg5a19od19jb21tb24oYWgpLT5idXNfb3BzLT5hdGhfYnVzX3R5cGUJXAorCQkJIT0gQVRIX1VTQikpCQkJCVwKKwkJCXVkZWxheSgxKTsJCQkJXAogCX0gd2hpbGUgKDApCiAKLSNkZWZpbmUgUkVHX1dSSVRFX0FSUkFZKGluaWFycmF5LCBjb2x1bW4sIHJlZ1dyKSBkbyB7ICAgICAgICAgICAgICAgICAgIFwKLQkJaW50IHI7CQkJCQkJCVwKLQkJZm9yIChyID0gMDsgciA8ICgoaW5pYXJyYXkpLT5pYV9yb3dzKTsgcisrKSB7CQlcCi0JCQlSRUdfV1JJVEUoYWgsIElOSV9SQSgoaW5pYXJyYXkpLCAociksIDApLAlcCi0JCQkJICBJTklfUkEoKGluaWFycmF5KSwgciwgKGNvbHVtbikpKTsJXAotCQkJRE9fREVMQVkocmVnV3IpOwkJCQlcCi0JCX0JCQkJCQkJXAotCX0gd2hpbGUgKDApCisjZGVmaW5lIFJFR19XUklURV9BUlJBWShpbmlhcnJheSwgY29sdW1uLCByZWdXcikgXAorCWF0aDlrX2h3X3dyaXRlX2FycmF5KGFoLCBpbmlhcnJheSwgY29sdW1uLCAmKHJlZ1dyKSkKIAogI2RlZmluZSBBUl9HUElPX09VVFBVVF9NVVhfQVNfT1VUUFVUICAgICAgICAgICAgIDAKICNkZWZpbmUgQVJfR1BJT19PVVRQVVRfTVVYX0FTX1BDSUVfQVRURU5USU9OX0xFRCAxCkBAIC0xMjUsNyArMTI1LDcgQEAKICNkZWZpbmUgQVJfR1BJT19CSVQoX2dwaW8pICAgICAgICAgICgxIDw8IChfZ3BpbykpCiAKICNkZWZpbmUgQkFTRV9BQ1RJVkFURV9ERUxBWSAgICAgICAgIDEwMAotI2RlZmluZSBSVENfUExMX1NFVFRMRV9ERUxBWSAgICAgICAgMTAwCisjZGVmaW5lIFJUQ19QTExfU0VUVExFX0RFTEFZICAgICAgICAoQVJfU1JFVl85MzQwKGFoKSA/IDEwMDAgOiAxMDApCiAjZGVmaW5lIENPRUZfU0NBTEVfUyAgICAgICAgICAgICAgICAyNAogI2RlZmluZSBIVDQwX0NIQU5ORUxfQ0VOVEVSX1NISUZUICAgMTAKIApAQCAtMTc4LDcgKzE3OCw2IEBACiAJQVRIOUtfSFdfQ0FQX0hUICAgICAgICAgICAgICAgICAgICAgICAgID0gQklUKDApLAogCUFUSDlLX0hXX0NBUF9SRlNJTEVOVCAgICAgICAgICAgICAgICAgICA9IEJJVCgxKSwKIAlBVEg5S19IV19DQVBfQ1NUICAgICAgICAgICAgICAgICAgICAgICAgPSBCSVQoMiksCi0JQVRIOUtfSFdfQ0FQX0VOSEFOQ0VEUE0gICAgICAgICAgICAgICAgID0gQklUKDMpLAogCUFUSDlLX0hXX0NBUF9BVVRPU0xFRVAgICAgICAgICAgICAgICAgICA9IEJJVCg0KSwKIAlBVEg5S19IV19DQVBfNEtCX1NQTElUVFJBTlMgICAgICAgICAgICAgPSBCSVQoNSksCiAJQVRIOUtfSFdfQ0FQX0VETUEJCQk9IEJJVCg2KSwKQEAgLTE5NSwxNyArMTk0LDExIEBACiAKIHN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgewogCXUzMiBod19jYXBzOyAvKiBBVEg5S19IV19DQVBfKiBmcm9tIGF0aDlrX2h3X2NhcHMgKi8KLQl1MTYgdG90YWxfcXVldWVzOwotCXUxNiBrZXljYWNoZV9zaXplOwotCXUxNiBsb3dfNWdoel9jaGFuLCBoaWdoXzVnaHpfY2hhbjsKLQl1MTYgbG93XzJnaHpfY2hhbiwgaGlnaF8yZ2h6X2NoYW47CiAJdTE2IHJ0c19hZ2dyX2xpbWl0OwogCXU4IHR4X2NoYWlubWFzazsKIAl1OCByeF9jaGFpbm1hc2s7CiAJdTggbWF4X3R4Y2hhaW5zOwogCXU4IG1heF9yeGNoYWluczsKLQl1MTYgdHhfdHJpZ2xldmVsX21heDsKLQl1MTYgcmVnX2NhcDsKIAl1OCBudW1fZ3Bpb19waW5zOwogCXU4IHJ4X2hwX3FkZXB0aDsKIAl1OCByeF9scF9xZGVwdGg7CkBAIC0yMjcsNyArMjIwLDYgQEAKIAl1OCBwY2llX2Nsb2NrX3JlcTsKIAl1MzIgcGNpZV93YWVuOwogCXU4IGFuYWxvZ19zaGlmdHJlZzsKLQl1OCBodF9lbmFibGU7CiAJdTggcGFwcmRfZGlzYWJsZTsKIAl1MzIgb2ZkbV90cmlnX2xvdzsKIAl1MzIgb2ZkbV90cmlnX2hpZ2g7CkBAIC00MTIsOCArNDA0LDYgQEAKIAl1MzIgYnNfbmV4dGR0aW07CiAJdTMyIGJzX2ludHZhbDsKICNkZWZpbmUgQVRIOUtfQkVBQ09OX1BFUklPRCAgICAgICAweDAwMDBmZmZmCi0jZGVmaW5lIEFUSDlLX0JFQUNPTl9FTkEgICAgICAgICAgMHgwMDgwMDAwMAotI2RlZmluZSBBVEg5S19CRUFDT05fUkVTRVRfVFNGICAgIDB4MDEwMDAwMDAKICNkZWZpbmUgQVRIOUtfVFNGT09SX1RIUkVTSE9MRCAgICAweDAwMDA0MjQwIC8qIDE2ayB1cyAqLwogCXUzMiBic19kdGltcGVyaW9kOwogCXUxNiBic19jZnBwZXJpb2Q7CkBAIC00ODksNiArNDc5LDEwIEBACiAJdTggbWFpbl9sbmFfY29uZjsKIAl1OCBhbHRfbG5hX2NvbmY7CiAJdTggZmFzdF9kaXZfYmlhczsKKwl1OCBtYWluX2dhaW50YjsKKwl1OCBhbHRfZ2FpbnRiOworCWludCBsbmExX2xuYTJfZGVsdGE7CisJdTggZGl2X2dyb3VwOwogfTsKIAogLyoqCkBAIC02MzgsMTAgKzYzMiwxMiBAQAogCQkJCSAgIHUzMiBudW1EZWxpbXMpOwogCXZvaWQgKCpzZXQxMW5fYWdncl9sYXN0KShzdHJ1Y3QgYXRoX2h3ICphaCwgdm9pZCAqZHMpOwogCXZvaWQgKCpjbHIxMW5fYWdncikoc3RydWN0IGF0aF9odyAqYWgsIHZvaWQgKmRzKTsKLQl2b2lkICgqc2V0MTFuX2J1cnN0ZHVyYXRpb24pKHN0cnVjdCBhdGhfaHcgKmFoLCB2b2lkICpkcywKLQkJCQkgICAgIHUzMiBidXJzdER1cmF0aW9uKTsKLQl2b2lkICgqc2V0MTFuX3ZpcnR1YWxtb3JlZnJhZykoc3RydWN0IGF0aF9odyAqYWgsIHZvaWQgKmRzLAotCQkJCSAgICAgICB1MzIgdm1mKTsKKwl2b2lkICgqc2V0X2NscmRtYXNrKShzdHJ1Y3QgYXRoX2h3ICphaCwgdm9pZCAqZHMsIGJvb2wgdmFsKTsKKwl2b2lkICgqYW50ZGl2X2NvbWJfY29uZl9nZXQpKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJc3RydWN0IGF0aF9od19hbnRjb21iX2NvbmYgKmFudGNvbmYpOworCXZvaWQgKCphbnRkaXZfY29tYl9jb25mX3NldCkoc3RydWN0IGF0aF9odyAqYWgsCisJCQlzdHJ1Y3QgYXRoX2h3X2FudGNvbWJfY29uZiAqYW50Y29uZik7CisKIH07CiAKIHN0cnVjdCBhdGhfbmZfbGltaXRzIHsKQEAgLTY1NSw2ICs2NTEsOCBAQAogI2RlZmluZSBBSF9VTlBMVUdHRUQgICAgMHgyIC8qIFRoZSBjYXJkIGhhcyBiZWVuIHBoeXNpY2FsbHkgcmVtb3ZlZC4gKi8KIAogc3RydWN0IGF0aF9odyB7CisJc3RydWN0IGF0aF9vcHMgcmVnX29wczsKKwogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwogCXN0cnVjdCBhdGhfY29tbW9uIGNvbW1vbjsKIAlzdHJ1Y3QgYXRoOWtfaHdfdmVyc2lvbiBod192ZXJzaW9uOwpAQCAtNzg0LDYgKzc4Miw4IEBACiAKIAkvKiBCbHVldG9vdGggY29leGlzdGFuY2UgKi8KIAlzdHJ1Y3QgYXRoX2J0Y29leF9odyBidGNvZXhfaHc7CisJdTMyIGJ0X2NvZXhfYnRfd2VpZ2h0W0FSOTMwMF9OVU1fQlRfV0VJR0hUU107CisJdTMyIGJ0X2NvZXhfd2xhbl93ZWlnaHRbQVI5MzAwX05VTV9XTEFOX1dFSUdIVFNdOwogCiAJdTMyIGludHJfdHhxczsKIAl1OCB0eGNoYWlubWFzazsKQEAgLTc5NCw3ICs3OTQsOSBAQAogCXUzMiBvcmlnaW5hbEdhaW5bMjJdOwogCWludCBpbml0UERBREM7CiAJaW50IFBEQURDZGVsdGE7Ci0JdTggbGVkX3BpbjsKKwlpbnQgbGVkX3BpbjsKKwl1MzIgZ3Bpb19tYXNrOworCXUzMiBncGlvX3ZhbDsKIAogCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlNb2RlczsKIAlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgaW5pQ29tbW9uOwpAQCAtODEwLDYgKzgxMiw3IEBACiAJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaVBjaWVTZXJkZXM7CiAJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaVBjaWVTZXJkZXNMb3dQb3dlcjsKIAlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgaW5pTW9kZXNBZGRpdGlvbmFsOworCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlNb2Rlc0FkZGl0aW9uYWxfNDBNOwogCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlNb2Rlc1J4R2FpbjsKIAlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgaW5pTW9kZXNUeEdhaW47CiAJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaU1vZGVzXzkyNzFfMV8wX29ubHk7CkBAIC04NTYsNiArODU5LDE2IEBACiAKIAkvKiBFbnRlcnByaXNlIG1vZGUgY2FwICovCiAJdTMyIGVudF9tb2RlOworCisJYm9vbCBpc19jbGtfMjVtaHo7Cit9OworCitzdHJ1Y3QgYXRoX2J1c19vcHMgeworCWVudW0gYXRoX2J1c190eXBlIGF0aF9idXNfdHlwZTsKKwl2b2lkICgqcmVhZF9jYWNoZXNpemUpKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sIGludCAqY3N6KTsKKwlib29sICgqZWVwcm9tX3JlYWQpKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sIHUzMiBvZmYsIHUxNiAqZGF0YSk7CisJdm9pZCAoKmJ0X2NvZXhfcHJlcCkoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbik7CisJdm9pZCAoKmV4dG5fc3luY2hfZW4pKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24pOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgYXRoX2NvbW1vbiAqYXRoOWtfaHdfY29tbW9uKHN0cnVjdCBhdGhfaHcgKmFoKQpAQCAtOTAwLDE1ICs5MTMsMTIgQEAKIHZvaWQgYXRoOWtfaHdfc2V0X2dwaW8oc3RydWN0IGF0aF9odyAqYWgsIHUzMiBncGlvLCB1MzIgdmFsKTsKIHUzMiBhdGg5a19od19nZXRkZWZhbnRlbm5hKHN0cnVjdCBhdGhfaHcgKmFoKTsKIHZvaWQgYXRoOWtfaHdfc2V0YW50ZW5uYShzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGFudGVubmEpOwotdm9pZCBhdGg5a19od19hbnRkaXZfY29tYl9jb25mX2dldChzdHJ1Y3QgYXRoX2h3ICphaCwKLQkJCQkgICBzdHJ1Y3QgYXRoX2h3X2FudGNvbWJfY29uZiAqYW50Y29uZik7Ci12b2lkIGF0aDlrX2h3X2FudGRpdl9jb21iX2NvbmZfc2V0KHN0cnVjdCBhdGhfaHcgKmFoLAotCQkJCSAgIHN0cnVjdCBhdGhfaHdfYW50Y29tYl9jb25mICphbnRjb25mKTsKIAogLyogR2VuZXJhbCBPcGVyYXRpb24gKi8KIGJvb2wgYXRoOWtfaHdfd2FpdChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwsIHUzMiB0aW1lb3V0KTsKK3ZvaWQgYXRoOWtfaHdfd3JpdGVfYXJyYXkoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhcjU0MTZJbmlBcnJheSAqYXJyYXksCisJCQkgIGludCBjb2x1bW4sIHVuc2lnbmVkIGludCAqd3JpdGVjbnQpOwogdTMyIGF0aDlrX2h3X3JldmVyc2VfYml0cyh1MzIgdmFsLCB1MzIgbik7Ci1ib29sIGF0aDlrX2dldF9jaGFubmVsX2VkZ2VzKHN0cnVjdCBhdGhfaHcgKmFoLCB1MTYgZmxhZ3MsIHUxNiAqbG93LCB1MTYgKmhpZ2gpOwogdTE2IGF0aDlrX2h3X2NvbXB1dGV0eHRpbWUoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkgICB1OCBwaHksIGludCBrYnBzLAogCQkJICAgdTMyIGZyYW1lTGVuLCB1MTYgcmF0ZWl4LCBib29sIHNob3J0UHJlYW1ibGUpOwpAQCAtOTI0LDEyICs5MzQsMTMgQEAKIHZvaWQgYXRoOWtfaHdfc2V0bWNhc3RmaWx0ZXIoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBmaWx0ZXIwLCB1MzIgZmlsdGVyMSk7CiB2b2lkIGF0aDlrX2h3X3NldGJzc2lkbWFzayhzdHJ1Y3QgYXRoX2h3ICphaCk7CiB2b2lkIGF0aDlrX2h3X3dyaXRlX2Fzc29jaWQoc3RydWN0IGF0aF9odyAqYWgpOwordTMyIGF0aDlrX2h3X2dldHRzZjMyKHN0cnVjdCBhdGhfaHcgKmFoKTsKIHU2NCBhdGg5a19od19nZXR0c2Y2NChzdHJ1Y3QgYXRoX2h3ICphaCk7CiB2b2lkIGF0aDlrX2h3X3NldHRzZjY0KHN0cnVjdCBhdGhfaHcgKmFoLCB1NjQgdHNmNjQpOwogdm9pZCBhdGg5a19od19yZXNldF90c2Yoc3RydWN0IGF0aF9odyAqYWgpOwogdm9pZCBhdGg5a19od19zZXRfdHNmYWRqdXN0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgc2V0dGluZyk7CiB2b2lkIGF0aDlrX2h3X2luaXRfZ2xvYmFsX3NldHRpbmdzKHN0cnVjdCBhdGhfaHcgKmFoKTsKLXVuc2lnbmVkIGxvbmcgYXI5MDAzX2dldF9wbGxfc3FzdW1fZHZjKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3UzMiBhcjkwMDNfZ2V0X3BsbF9zcXN1bV9kdmMoc3RydWN0IGF0aF9odyAqYWgpOwogdm9pZCBhdGg5a19od19zZXQxMW5tYWMyMDQwKHN0cnVjdCBhdGhfaHcgKmFoKTsKIHZvaWQgYXRoOWtfaHdfYmVhY29uaW5pdChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIG5leHRfYmVhY29uLCB1MzIgYmVhY29uX3BlcmlvZCk7CiB2b2lkIGF0aDlrX2h3X3NldF9zdGFfYmVhY29uX3RpbWVycyhzdHJ1Y3QgYXRoX2h3ICphaCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9pbml0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaW5pdC5jCmluZGV4IDc5YWVjOTgzLi5iMTcyZDE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaW5pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9pbml0LmMKQEAgLTE1LDYgKzE1LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2F0aDlrX3BsYXRmb3JtLmg+CiAKICNpbmNsdWRlICJhdGg5ay5oIgogCkBAIC0xOTUsMTAgKzE5NiwyNyBAQAogCXJldHVybiB2YWw7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoX29wcyBhdGg5a19jb21tb25fb3BzID0gewotCS5yZWFkID0gYXRoOWtfaW9yZWFkMzIsCi0JLndyaXRlID0gYXRoOWtfaW93cml0ZTMyLAotfTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXRoOWtfcmVnX3Jtdyh2b2lkICpod19wcml2LCB1MzIgcmVnX29mZnNldCwgdTMyIHNldCwgdTMyIGNscikKK3sKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IChzdHJ1Y3QgYXRoX2h3ICopIGh3X3ByaXY7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSAoc3RydWN0IGF0aF9zb2Z0YyAqKSBjb21tb24tPnByaXY7CisJdW5zaWduZWQgbG9uZyB1bmluaXRpYWxpemVkX3ZhcihmbGFncyk7CisJdTMyIHZhbDsKKworCWlmIChhaC0+Y29uZmlnLnNlcmlhbGl6ZV9yZWdtb2RlID09IFNFUl9SRUdfTU9ERV9PTikKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5zY19zZXJpYWxfcncsIGZsYWdzKTsKKworCXZhbCA9IGlvcmVhZDMyKHNjLT5tZW0gKyByZWdfb2Zmc2V0KTsKKwl2YWwgJj0gfmNscjsKKwl2YWwgfD0gc2V0OworCWlvd3JpdGUzMih2YWwsIHNjLT5tZW0gKyByZWdfb2Zmc2V0KTsKKworCWlmIChhaC0+Y29uZmlnLnNlcmlhbGl6ZV9yZWdtb2RlID09IFNFUl9SRUdfTU9ERV9PTikKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPnNjX3NlcmlhbF9ydywgZmxhZ3MpOworCisJcmV0dXJuIHZhbDsKK30KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgIEluaXRpYWxpemF0aW9uICAgICAqLwpAQCAtMzg5LDEzICs0MDcsNyBAQAogCWludCBpID0gMDsKIAogCS8qIEdldCB0aGUgaGFyZHdhcmUga2V5IGNhY2hlIHNpemUuICovCi0JY29tbW9uLT5rZXltYXggPSBzYy0+c2NfYWgtPmNhcHMua2V5Y2FjaGVfc2l6ZTsKLQlpZiAoY29tbW9uLT5rZXltYXggPiBBVEhfS0VZTUFYKSB7Ci0JCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0FOWSwKLQkJCSJXYXJuaW5nLCB1c2luZyBvbmx5ICV1IGVudHJpZXMgaW4gJXUga2V5IGNhY2hlXG4iLAotCQkJQVRIX0tFWU1BWCwgY29tbW9uLT5rZXltYXgpOwotCQljb21tb24tPmtleW1heCA9IEFUSF9LRVlNQVg7Ci0JfQorCWNvbW1vbi0+a2V5bWF4ID0gQVJfS0VZVEFCTEVfU0laRTsKIAogCS8qCiAJICogUmVzZXQgdGhlIGtleSBjYWNoZSBzaW5jZSBzb21lIHBhcnRzIGRvIG5vdApAQCAtNTM3LDYgKzU0OSw3IEBACiBzdGF0aWMgaW50IGF0aDlrX2luaXRfc29mdGModTE2IGRldmlkLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYywgdTE2IHN1YnN5c2lkLAogCQkJICAgIGNvbnN0IHN0cnVjdCBhdGhfYnVzX29wcyAqYnVzX29wcykKIHsKKwlzdHJ1Y3QgYXRoOWtfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBzYy0+ZGV2LT5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBhdGhfaHcgKmFoID0gTlVMTDsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uOwogCWludCByZXQgPSAwLCBpOwpAQCAtNTQ5LDEzICs1NjIsMjMgQEAKIAlhaC0+aHcgPSBzYy0+aHc7CiAJYWgtPmh3X3ZlcnNpb24uZGV2aWQgPSBkZXZpZDsKIAlhaC0+aHdfdmVyc2lvbi5zdWJzeXNpZCA9IHN1YnN5c2lkOworCWFoLT5yZWdfb3BzLnJlYWQgPSBhdGg5a19pb3JlYWQzMjsKKwlhaC0+cmVnX29wcy53cml0ZSA9IGF0aDlrX2lvd3JpdGUzMjsKKwlhaC0+cmVnX29wcy5ybXcgPSBhdGg5a19yZWdfcm13OwogCXNjLT5zY19haCA9IGFoOwogCi0JaWYgKCFzYy0+ZGV2LT5wbGF0Zm9ybV9kYXRhKQorCWlmICghcGRhdGEpIHsKIAkJYWgtPmFoX2ZsYWdzIHw9IEFIX1VTRV9FRVBST007CisJCXNjLT5zY19haC0+bGVkX3BpbiA9IC0xOworCX0gZWxzZSB7CisJCXNjLT5zY19haC0+Z3Bpb19tYXNrID0gcGRhdGEtPmdwaW9fbWFzazsKKwkJc2MtPnNjX2FoLT5ncGlvX3ZhbCA9IHBkYXRhLT5ncGlvX3ZhbDsKKwkJc2MtPnNjX2FoLT5sZWRfcGluID0gcGRhdGEtPmxlZF9waW47CisJCWFoLT5pc19jbGtfMjVtaHogPSBwZGF0YS0+aXNfY2xrXzI1bWh6OworCX0KIAogCWNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7Ci0JY29tbW9uLT5vcHMgPSAmYXRoOWtfY29tbW9uX29wczsKKwljb21tb24tPm9wcyA9ICZhaC0+cmVnX29wczsKIAljb21tb24tPmJ1c19vcHMgPSBidXNfb3BzOwogCWNvbW1vbi0+YWggPSBhaDsKIAljb21tb24tPmh3ID0gc2MtPmh3OwpAQCAtNTg3LDYgKzYxMCw5IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJfaHc7CiAKKwlpZiAocGRhdGEgJiYgcGRhdGEtPm1hY2FkZHIpCisJCW1lbWNweShjb21tb24tPm1hY2FkZHIsIHBkYXRhLT5tYWNhZGRyLCBFVEhfQUxFTik7CisKIAlyZXQgPSBhdGg5a19pbml0X3F1ZXVlcyhzYyk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfcXVldWVzOwpAQCAtNjc5LDYgKzcwNSw4IEBACiAJaWYgKEFSX1NSRVZfNTQxNihzYy0+c2NfYWgpKQogCQlody0+d2lwaHktPmZsYWdzICY9IH5XSVBIWV9GTEFHX1BTX09OX0JZX0RFRkFVTFQ7CiAKKwlody0+d2lwaHktPmZsYWdzIHw9IFdJUEhZX0ZMQUdfSUJTU19SU047CisKIAlody0+cXVldWVzID0gNDsKIAlody0+bWF4X3JhdGVzID0gNDsKIAlody0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDUwMDA7CkBAIC03NzMsNiArODAxLDcgQEAKIAogCUlOSVRfV09SSygmc2MtPmh3X2NoZWNrX3dvcmssIGF0aF9od19jaGVjayk7CiAJSU5JVF9XT1JLKCZzYy0+cGFwcmRfd29yaywgYXRoX3BhcHJkX2NhbGlicmF0ZSk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnNjLT5od19wbGxfd29yaywgYXRoX2h3X3BsbF93b3JrKTsKIAlzYy0+bGFzdF9yc3NpID0gQVRIX1JTU0lfRFVNTVlfTUFSS0VSOwogCiAJYXRoX2luaXRfbGVkcyhzYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmMKaW5kZXggZWRjMWNiYi4uYmQ2ZDJiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuYwpAQCAtMjA5LDE1ICsyMDksOCBAQAogewogCXUzMiBjdzsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKLQlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5jYXBzOwogCXN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvICpxaTsKIAotCWlmIChxID49IHBDYXAtPnRvdGFsX3F1ZXVlcykgewotCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19RVUVVRSwKLQkJCSJTZXQgVFhRIHByb3BlcnRpZXMsIGludmFsaWQgcXVldWU6ICV1XG4iLCBxKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQogCXFpID0gJmFoLT50eHFbcV07CiAJaWYgKHFpLT50cWlfdHlwZSA9PSBBVEg5S19UWF9RVUVVRV9JTkFDVElWRSkgewogCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19RVUVVRSwKQEAgLTI4MCwxNSArMjczLDggQEAKIAkJCSAgICBzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcWluZm8pCiB7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7Ci0Jc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+Y2FwczsKIAlzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcWk7CiAKLQlpZiAocSA+PSBwQ2FwLT50b3RhbF9xdWV1ZXMpIHsKLQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfUVVFVUUsCi0JCQkiR2V0IFRYUSBwcm9wZXJ0aWVzLCBpbnZhbGlkIHF1ZXVlOiAldVxuIiwgcSk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KIAlxaSA9ICZhaC0+dHhxW3FdOwogCWlmIChxaS0+dHFpX3R5cGUgPT0gQVRIOUtfVFhfUVVFVUVfSU5BQ1RJVkUpIHsKIAkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfUVVFVUUsCkBAIC0zMjAsMjggKzMwNiwyNyBAQAogewogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwogCXN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvICpxaTsKLQlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5jYXBzOwogCWludCBxOwogCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBBVEg5S19UWF9RVUVVRV9CRUFDT046Ci0JCXEgPSBwQ2FwLT50b3RhbF9xdWV1ZXMgLSAxOworCQlxID0gQVRIOUtfTlVNX1RYX1FVRVVFUyAtIDE7CiAJCWJyZWFrOwogCWNhc2UgQVRIOUtfVFhfUVVFVUVfQ0FCOgotCQlxID0gcENhcC0+dG90YWxfcXVldWVzIC0gMjsKKwkJcSA9IEFUSDlLX05VTV9UWF9RVUVVRVMgLSAyOwogCQlicmVhazsKIAljYXNlIEFUSDlLX1RYX1FVRVVFX1BTUE9MTDoKIAkJcSA9IDE7CiAJCWJyZWFrOwogCWNhc2UgQVRIOUtfVFhfUVVFVUVfVUFQU0Q6Ci0JCXEgPSBwQ2FwLT50b3RhbF9xdWV1ZXMgLSAzOworCQlxID0gQVRIOUtfTlVNX1RYX1FVRVVFUyAtIDM7CiAJCWJyZWFrOwogCWNhc2UgQVRIOUtfVFhfUVVFVUVfREFUQToKLQkJZm9yIChxID0gMDsgcSA8IHBDYXAtPnRvdGFsX3F1ZXVlczsgcSsrKQorCQlmb3IgKHEgPSAwOyBxIDwgQVRIOUtfTlVNX1RYX1FVRVVFUzsgcSsrKQogCQkJaWYgKGFoLT50eHFbcV0udHFpX3R5cGUgPT0KIAkJCSAgICBBVEg5S19UWF9RVUVVRV9JTkFDVElWRSkKIAkJCQlicmVhazsKLQkJaWYgKHEgPT0gcENhcC0+dG90YWxfcXVldWVzKSB7CisJCWlmIChxID09IEFUSDlLX05VTV9UWF9RVUVVRVMpIHsKIAkJCWF0aF9lcnIoY29tbW9uLCAiTm8gYXZhaWxhYmxlIFRYIHF1ZXVlXG4iKTsKIAkJCXJldHVybiAtMTsKIAkJfQpAQCAtMzgyLDE1ICszNjcsOSBAQAogCiBib29sIGF0aDlrX2h3X3JlbGVhc2V0eHF1ZXVlKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSkKIHsKLQlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5jYXBzOwogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwogCXN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvICpxaTsKIAotCWlmIChxID49IHBDYXAtPnRvdGFsX3F1ZXVlcykgewotCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19RVUVVRSwKLQkJCSJSZWxlYXNlIFRYUSwgaW52YWxpZCBxdWV1ZTogJXVcbiIsIHEpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQogCXFpID0gJmFoLT50eHFbcV07CiAJaWYgKHFpLT50cWlfdHlwZSA9PSBBVEg5S19UWF9RVUVVRV9JTkFDVElWRSkgewogCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19RVUVVRSwKQEAgLTQxNCwxOCArMzkzLDExIEBACiAKIGJvb2wgYXRoOWtfaHdfcmVzZXR0eHF1ZXVlKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSkKIHsKLQlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5jYXBzOwogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwogCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuID0gYWgtPmN1cmNoYW47CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpOwogCXUzMiBjd01pbiwgY2hhbkN3TWluLCB2YWx1ZTsKIAotCWlmIChxID49IHBDYXAtPnRvdGFsX3F1ZXVlcykgewotCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19RVUVVRSwKLQkJCSJSZXNldCBUWFEsIGludmFsaWQgcXVldWU6ICV1XG4iLCBxKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQogCXFpID0gJmFoLT50eHFbcV07CiAJaWYgKHFpLT50cWlfdHlwZSA9PSBBVEg5S19UWF9RVUVVRV9JTkFDVElWRSkgewogCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19RVUVVRSwKQEAgLTQ1OCwxNyArNDMwLDIxIEBACiAJCSAgU00ocWktPnRxaV9zaHJldHJ5LCBBUl9EX1JFVFJZX0xJTUlUX0ZSX1NIKSk7CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1FNSVNDKHEpLCBBUl9RX01JU0NfRENVX0VBUkxZX1RFUk1fUkVRKTsKLQlSRUdfV1JJVEUoYWgsIEFSX0RNSVNDKHEpLAotCQkgIEFSX0RfTUlTQ19DV19CS09GRl9FTiB8IEFSX0RfTUlTQ19GUkFHX1dBSVRfRU4gfCAweDIpOworCisJaWYgKEFSX1NSRVZfOTM0MChhaCkpCisJCVJFR19XUklURShhaCwgQVJfRE1JU0MocSksCisJCQkgIEFSX0RfTUlTQ19DV19CS09GRl9FTiB8IEFSX0RfTUlTQ19GUkFHX1dBSVRfRU4gfCAweDEpOworCWVsc2UKKwkJUkVHX1dSSVRFKGFoLCBBUl9ETUlTQyhxKSwKKwkJCSAgQVJfRF9NSVNDX0NXX0JLT0ZGX0VOIHwgQVJfRF9NSVNDX0ZSQUdfV0FJVF9FTiB8IDB4Mik7CiAKIAlpZiAocWktPnRxaV9jYnJQZXJpb2QpIHsKIAkJUkVHX1dSSVRFKGFoLCBBUl9RQ0JSQ0ZHKHEpLAogCQkJICBTTShxaS0+dHFpX2NiclBlcmlvZCwgQVJfUV9DQlJDRkdfSU5URVJWQUwpIHwKIAkJCSAgU00ocWktPnRxaV9jYnJPdmVyZmxvd0xpbWl0LCBBUl9RX0NCUkNGR19PVkZfVEhSRVNIKSk7Ci0JCVJFR19XUklURShhaCwgQVJfUU1JU0MocSksCi0JCQkgIFJFR19SRUFEKGFoLCBBUl9RTUlTQyhxKSkgfCBBUl9RX01JU0NfRlNQX0NCUiB8Ci0JCQkgIChxaS0+dHFpX2Nick92ZXJmbG93TGltaXQgPwotCQkJICAgQVJfUV9NSVNDX0NCUl9FWFBfQ05UUl9MSU1JVF9FTiA6IDApKTsKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX1FNSVNDKHEpLCBBUl9RX01JU0NfRlNQX0NCUiB8CisJCQkgICAgKHFpLT50cWlfY2JyT3ZlcmZsb3dMaW1pdCA/CisJCQkgICAgIEFSX1FfTUlTQ19DQlJfRVhQX0NOVFJfTElNSVRfRU4gOiAwKSk7CiAJfQogCWlmIChxaS0+dHFpX3JlYWR5VGltZSAmJiAocWktPnRxaV90eXBlICE9IEFUSDlLX1RYX1FVRVVFX0NBQikpIHsKIAkJUkVHX1dSSVRFKGFoLCBBUl9RUkRZVElNRUNGRyhxKSwKQEAgLTQ4MSw0MCArNDU3LDMxIEBACiAJCSAgKHFpLT50cWlfYnVyc3RUaW1lID8gQVJfRF9DSE5USU1FX0VOIDogMCkpOwogCiAJaWYgKHFpLT50cWlfYnVyc3RUaW1lCi0JICAgICYmIChxaS0+dHFpX3FmbGFncyAmIFRYUV9GTEFHX1JEWVRJTUVfRVhQX1BPTElDWV9FTkFCTEUpKSB7Ci0JCVJFR19XUklURShhaCwgQVJfUU1JU0MocSksCi0JCQkgIFJFR19SRUFEKGFoLCBBUl9RTUlTQyhxKSkgfAotCQkJICBBUl9RX01JU0NfUkRZVElNRV9FWFBfUE9MSUNZKTsKKwkgICAgJiYgKHFpLT50cWlfcWZsYWdzICYgVFhRX0ZMQUdfUkRZVElNRV9FWFBfUE9MSUNZX0VOQUJMRSkpCisJCVJFR19TRVRfQklUKGFoLCBBUl9RTUlTQyhxKSwgQVJfUV9NSVNDX1JEWVRJTUVfRVhQX1BPTElDWSk7CiAKLQl9Ci0KLQlpZiAocWktPnRxaV9xZmxhZ3MgJiBUWFFfRkxBR19CQUNLT0ZGX0RJU0FCTEUpIHsKLQkJUkVHX1dSSVRFKGFoLCBBUl9ETUlTQyhxKSwKLQkJCSAgUkVHX1JFQUQoYWgsIEFSX0RNSVNDKHEpKSB8Ci0JCQkgIEFSX0RfTUlTQ19QT1NUX0ZSX0JLT0ZGX0RJUyk7Ci0JfQorCWlmIChxaS0+dHFpX3FmbGFncyAmIFRYUV9GTEFHX0JBQ0tPRkZfRElTQUJMRSkKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX0RNSVNDKHEpLCBBUl9EX01JU0NfUE9TVF9GUl9CS09GRl9ESVMpOwogCiAJUkVHV1JJVEVfQlVGRkVSX0ZMVVNIKGFoKTsKIAotCWlmIChxaS0+dHFpX3FmbGFncyAmIFRYUV9GTEFHX0ZSQUdfQlVSU1RfQkFDS09GRl9FTkFCTEUpIHsKLQkJUkVHX1dSSVRFKGFoLCBBUl9ETUlTQyhxKSwKLQkJCSAgUkVHX1JFQUQoYWgsIEFSX0RNSVNDKHEpKSB8Ci0JCQkgIEFSX0RfTUlTQ19GUkFHX0JLT0ZGX0VOKTsKLQl9CisJaWYgKHFpLT50cWlfcWZsYWdzICYgVFhRX0ZMQUdfRlJBR19CVVJTVF9CQUNLT0ZGX0VOQUJMRSkKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX0RNSVNDKHEpLCBBUl9EX01JU0NfRlJBR19CS09GRl9FTik7CisKIAlzd2l0Y2ggKHFpLT50cWlfdHlwZSkgewogCWNhc2UgQVRIOUtfVFhfUVVFVUVfQkVBQ09OOgogCQlFTkFCTEVfUkVHV1JJVEVfQlVGRkVSKGFoKTsKIAotCQlSRUdfV1JJVEUoYWgsIEFSX1FNSVNDKHEpLCBSRUdfUkVBRChhaCwgQVJfUU1JU0MocSkpCi0JCQkgIHwgQVJfUV9NSVNDX0ZTUF9EQkFfR0FURUQKLQkJCSAgfCBBUl9RX01JU0NfQkVBQ09OX1VTRQotCQkJICB8IEFSX1FfTUlTQ19DQlJfSU5DUl9ESVMxKTsKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX1FNSVNDKHEpLAorCQkJICAgIEFSX1FfTUlTQ19GU1BfREJBX0dBVEVECisJCQkgICAgfCBBUl9RX01JU0NfQkVBQ09OX1VTRQorCQkJICAgIHwgQVJfUV9NSVNDX0NCUl9JTkNSX0RJUzEpOwogCi0JCVJFR19XUklURShhaCwgQVJfRE1JU0MocSksIFJFR19SRUFEKGFoLCBBUl9ETUlTQyhxKSkKLQkJCSAgfCAoQVJfRF9NSVNDX0FSQl9MT0NLT1VUX0NOVFJMX0dMT0JBTCA8PAorCQlSRUdfU0VUX0JJVChhaCwgQVJfRE1JU0MocSksCisJCQkgICAgKEFSX0RfTUlTQ19BUkJfTE9DS09VVF9DTlRSTF9HTE9CQUwgPDwKIAkJCSAgICAgQVJfRF9NSVNDX0FSQl9MT0NLT1VUX0NOVFJMX1MpCi0JCQkgIHwgQVJfRF9NSVNDX0JFQUNPTl9VU0UKLQkJCSAgfCBBUl9EX01JU0NfUE9TVF9GUl9CS09GRl9ESVMpOworCQkJICAgIHwgQVJfRF9NSVNDX0JFQUNPTl9VU0UKKwkJCSAgICB8IEFSX0RfTUlTQ19QT1NUX0ZSX0JLT0ZGX0RJUyk7CiAKIAkJUkVHV1JJVEVfQlVGRkVSX0ZMVVNIKGFoKTsKIApAQCAtNTMzLDQxICs1MDAsMzggQEAKIAljYXNlIEFUSDlLX1RYX1FVRVVFX0NBQjoKIAkJRU5BQkxFX1JFR1dSSVRFX0JVRkZFUihhaCk7CiAKLQkJUkVHX1dSSVRFKGFoLCBBUl9RTUlTQyhxKSwgUkVHX1JFQUQoYWgsIEFSX1FNSVNDKHEpKQotCQkJICB8IEFSX1FfTUlTQ19GU1BfREJBX0dBVEVECi0JCQkgIHwgQVJfUV9NSVNDX0NCUl9JTkNSX0RJUzEKLQkJCSAgfCBBUl9RX01JU0NfQ0JSX0lOQ1JfRElTMCk7CisJCVJFR19TRVRfQklUKGFoLCBBUl9RTUlTQyhxKSwKKwkJCSAgICBBUl9RX01JU0NfRlNQX0RCQV9HQVRFRAorCQkJICAgIHwgQVJfUV9NSVNDX0NCUl9JTkNSX0RJUzEKKwkJCSAgICB8IEFSX1FfTUlTQ19DQlJfSU5DUl9ESVMwKTsKIAkJdmFsdWUgPSAocWktPnRxaV9yZWFkeVRpbWUgLQogCQkJIChhaC0+Y29uZmlnLnN3X2JlYWNvbl9yZXNwb25zZV90aW1lIC0KIAkJCSAgYWgtPmNvbmZpZy5kbWFfYmVhY29uX3Jlc3BvbnNlX3RpbWUpIC0KIAkJCSBhaC0+Y29uZmlnLmFkZGl0aW9uYWxfc3diYV9iYWNrb2ZmKSAqIDEwMjQ7CiAJCVJFR19XUklURShhaCwgQVJfUVJEWVRJTUVDRkcocSksCiAJCQkgIHZhbHVlIHwgQVJfUV9SRFlUSU1FQ0ZHX0VOKTsKLQkJUkVHX1dSSVRFKGFoLCBBUl9ETUlTQyhxKSwgUkVHX1JFQUQoYWgsIEFSX0RNSVNDKHEpKQotCQkJICB8IChBUl9EX01JU0NfQVJCX0xPQ0tPVVRfQ05UUkxfR0xPQkFMIDw8CisJCVJFR19TRVRfQklUKGFoLCBBUl9ETUlTQyhxKSwKKwkJCSAgICAoQVJfRF9NSVNDX0FSQl9MT0NLT1VUX0NOVFJMX0dMT0JBTCA8PAogCQkJICAgICBBUl9EX01JU0NfQVJCX0xPQ0tPVVRfQ05UUkxfUykpOwogCiAJCVJFR1dSSVRFX0JVRkZFUl9GTFVTSChhaCk7CiAKIAkJYnJlYWs7CiAJY2FzZSBBVEg5S19UWF9RVUVVRV9QU1BPTEw6Ci0JCVJFR19XUklURShhaCwgQVJfUU1JU0MocSksCi0JCQkgIFJFR19SRUFEKGFoLCBBUl9RTUlTQyhxKSkgfCBBUl9RX01JU0NfQ0JSX0lOQ1JfRElTMSk7CisJCVJFR19TRVRfQklUKGFoLCBBUl9RTUlTQyhxKSwgQVJfUV9NSVNDX0NCUl9JTkNSX0RJUzEpOwogCQlicmVhazsKIAljYXNlIEFUSDlLX1RYX1FVRVVFX1VBUFNEOgotCQlSRUdfV1JJVEUoYWgsIEFSX0RNSVNDKHEpLCBSRUdfUkVBRChhaCwgQVJfRE1JU0MocSkpIHwKLQkJCSAgQVJfRF9NSVNDX1BPU1RfRlJfQktPRkZfRElTKTsKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX0RNSVNDKHEpLCBBUl9EX01JU0NfUE9TVF9GUl9CS09GRl9ESVMpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CiAKIAlpZiAocWktPnRxaV9pbnRGbGFncyAmIEFUSDlLX1RYUV9VU0VfTE9DS09VVF9CS09GRl9ESVMpIHsKLQkJUkVHX1dSSVRFKGFoLCBBUl9ETUlTQyhxKSwKLQkJCSAgUkVHX1JFQUQoYWgsIEFSX0RNSVNDKHEpKSB8Ci0JCQkgIFNNKEFSX0RfTUlTQ19BUkJfTE9DS09VVF9DTlRSTF9HTE9CQUwsCi0JCQkgICAgIEFSX0RfTUlTQ19BUkJfTE9DS09VVF9DTlRSTCkgfAotCQkJICBBUl9EX01JU0NfUE9TVF9GUl9CS09GRl9ESVMpOworCQlSRUdfU0VUX0JJVChhaCwgQVJfRE1JU0MocSksCisJCQkgICAgU00oQVJfRF9NSVNDX0FSQl9MT0NLT1VUX0NOVFJMX0dMT0JBTCwKKwkJCSAgICAgICBBUl9EX01JU0NfQVJCX0xPQ0tPVVRfQ05UUkwpIHwKKwkJCSAgICBBUl9EX01JU0NfUE9TVF9GUl9CS09GRl9ESVMpOwogCX0KIAogCWlmIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpKQpAQCAtNzU0LDcgKzcxOCw2IEBACiBib29sIGF0aDlrX2h3X3N0b3BkbWFyZWN2KHN0cnVjdCBhdGhfaHcgKmFoLCBib29sICpyZXNldCkKIHsKICNkZWZpbmUgQUhfUlhfU1RPUF9ETUFfVElNRU9VVCAxMDAwMCAgIC8qIHVzZWMgKi8KLSNkZWZpbmUgQUhfUlhfVElNRV9RVUFOVFVNICAgICAxMDAgICAgIC8qIHVzZWMgKi8KIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKIAl1MzIgbWFjX3N0YXR1cywgbGFzdF9tYWNfc3RhdHVzID0gMDsKIAlpbnQgaTsKQEAgLTc5Nyw3ICs3NjAsNiBAQAogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKLSN1bmRlZiBBSF9SWF9USU1FX1FVQU5UVU0KICN1bmRlZiBBSF9SWF9TVE9QX0RNQV9USU1FT1VUCiB9CiBFWFBPUlRfU1lNQk9MKGF0aDlrX2h3X3N0b3BkbWFyZWN2KTsKQEAgLTg1NSwxMCArODE3LDE0IEBACiB2b2lkIGF0aDlrX2h3X2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOworCXUzMiBzeW5jX2RlZmF1bHQgPSBBUl9JTlRSX1NZTkNfREVGQVVMVDsKIAogCWlmICghKGFoLT5pbWFzayAmIEFUSDlLX0lOVF9HTE9CQUwpKQogCQlyZXR1cm47CiAKKwlpZiAoQVJfU1JFVl85MzQwKGFoKSkKKwkJc3luY19kZWZhdWx0ICY9IH5BUl9JTlRSX1NZTkNfSE9TVDFfRkFUQUw7CisKIAlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19JTlRFUlJVUFQsICJlbmFibGUgSUVSXG4iKTsKIAlSRUdfV1JJVEUoYWgsIEFSX0lFUiwgQVJfSUVSX0VOQUJMRSk7CiAJaWYgKCFBUl9TUkVWXzkxMDAoYWgpKSB7CkBAIC04NjcsMTAgKzgzMyw4IEBACiAJCVJFR19XUklURShhaCwgQVJfSU5UUl9BU1lOQ19NQVNLLCBBUl9JTlRSX01BQ19JUlEpOwogCiAKLQkJUkVHX1dSSVRFKGFoLCBBUl9JTlRSX1NZTkNfRU5BQkxFLAotCQkJICBBUl9JTlRSX1NZTkNfREVGQVVMVCk7Ci0JCVJFR19XUklURShhaCwgQVJfSU5UUl9TWU5DX01BU0ssCi0JCQkgIEFSX0lOVFJfU1lOQ19ERUZBVUxUKTsKKwkJUkVHX1dSSVRFKGFoLCBBUl9JTlRSX1NZTkNfRU5BQkxFLCBzeW5jX2RlZmF1bHQpOworCQlSRUdfV1JJVEUoYWgsIEFSX0lOVFJfU1lOQ19NQVNLLCBzeW5jX2RlZmF1bHQpOwogCX0KIAlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19JTlRFUlJVUFQsICJBUl9JTVIgMHgleCBJRVIgMHgleFxuIiwKIAkJUkVHX1JFQUQoYWgsIEFSX0lNUiksIFJFR19SRUFEKGFoLCBBUl9JRVIpKTsKQEAgLTkyNiw2ICs4OTAsOSBAQAogCQkJbWFzayB8PSBBUl9JTVJfR0VOVE1SOwogCX0KIAorCWlmIChpbnRzICYgQVRIOUtfSU5UX0dFTlRJTUVSKQorCQltYXNrIHw9IEFSX0lNUl9HRU5UTVI7CisKIAlpZiAoaW50cyAmIChBVEg5S19JTlRfQk1JU0MpKSB7CiAJCW1hc2sgfD0gQVJfSU1SX0JDTk1JU0M7CiAJCWlmIChpbnRzICYgQVRIOUtfSU5UX1RJTSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuaAppbmRleCBjMmE1OTM4Li5iNjBjMTMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5oCkBAIC0yMzksNyArMjM5LDYgQEAKIAl2b2lkICpkc192ZGF0YTsKIH0gX19wYWNrZWQgX19hbGlnbmVkKDQpOwogCi0jZGVmaW5lIEFUSDlLX1RYREVTQ19DTFJETUFTSwkJMHgwMDAxCiAjZGVmaW5lIEFUSDlLX1RYREVTQ19OT0FDSwkJMHgwMDAyCiAjZGVmaW5lIEFUSDlLX1RYREVTQ19SVFNFTkEJCTB4MDAwNAogI2RlZmluZSBBVEg5S19UWERFU0NfQ1RTRU5BCQkweDAwMDgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jCmluZGV4IDE0ODJmYTYuLjE3ZWJkZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYwpAQCAtMjk5LDcgKzI5OSw3IEBACiAKIAlpZiAoIShzYy0+c2NfZmxhZ3MgJiAoU0NfT1BfT0ZGQ0hBTk5FTCkpKSB7CiAJCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9CRUFDT05TKQotCQkJYXRoX2JlYWNvbl9jb25maWcoc2MsIE5VTEwpOworCQkJYXRoX3NldF9iZWFjb24oc2MpOwogCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHNjLT5odywgJnNjLT50eF9jb21wbGV0ZV93b3JrLCAwKTsKIAkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhzYy0+aHcsICZzYy0+aHdfcGxsX3dvcmssIEhaLzIpOwogCQlhdGhfc3RhcnRfYW5pKGNvbW1vbik7CkBAIC02MjQsNiArNjI0LDQzIEBACiAJYXRoOWtfcHNfcmVzdG9yZShzYyk7CiB9CiAKK3N0YXRpYyB2b2lkIGF0aF9od19wbGxfcnhfaGFuZ19jaGVjayhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgdTMyIHBsbF9zcXN1bSkKK3sKKwlzdGF0aWMgaW50IGNvdW50OworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc2MtPnNjX2FoKTsKKworCWlmIChwbGxfc3FzdW0gPj0gMHg0MDAwMCkgeworCQljb3VudCsrOworCQlpZiAoY291bnQgPT0gMykgeworCQkJLyogUnggaXMgaHVuZyBmb3IgbW9yZSB0aGFuIDUwMG1zLiBSZXNldCBpdCAqLworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfUkVTRVQsCisJCQkJIlBvc3NpYmxlIFJYIGhhbmcsIHJlc2V0dGluZyIpOworCQkJYXRoX3Jlc2V0KHNjLCB0cnVlKTsKKwkJCWNvdW50ID0gMDsKKwkJfQorCX0gZWxzZQorCQljb3VudCA9IDA7Cit9CisKK3ZvaWQgYXRoX2h3X3BsbF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXRoX3NvZnRjLAorCQkJCQkgICAgaHdfcGxsX3dvcmsud29yayk7CisJdTMyIHBsbF9zcXN1bTsKKworCWlmIChBUl9TUkVWXzk0ODUoc2MtPnNjX2FoKSkgeworCisJCWF0aDlrX3BzX3dha2V1cChzYyk7CisJCXBsbF9zcXN1bSA9IGFyOTAwM19nZXRfcGxsX3Nxc3VtX2R2YyhzYy0+c2NfYWgpOworCQlhdGg5a19wc19yZXN0b3JlKHNjKTsKKworCQlhdGhfaHdfcGxsX3J4X2hhbmdfY2hlY2soc2MsIHBsbF9zcXN1bSk7CisKKwkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhzYy0+aHcsICZzYy0+aHdfcGxsX3dvcmssIEhaLzUpOworCX0KK30KKworCiB2b2lkIGF0aDlrX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gKHN0cnVjdCBhdGhfc29mdGMgKilkYXRhOwpAQCAtNjUyLDYgKzY4OSwxNyBAQAogCSAgICAhYXRoOWtfaHdfY2hlY2tfYWxpdmUoYWgpKQogCQlpZWVlODAyMTFfcXVldWVfd29yayhzYy0+aHcsICZzYy0+aHdfY2hlY2tfd29yayk7CiAKKwlpZiAoKHN0YXR1cyAmIEFUSDlLX0lOVF9UU0ZPT1IpICYmIHNjLT5wc19lbmFibGVkKSB7CisJCS8qCisJCSAqIFRTRiBzeW5jIGRvZXMgbm90IGxvb2sgY29ycmVjdDsgcmVtYWluIGF3YWtlIHRvIHN5bmMgd2l0aAorCQkgKiB0aGUgbmV4dCBCZWFjb24uCisJCSAqLworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19QUywKKwkJCSJUU0ZPT1IgLSBTeW5jIHdpdGggbmV4dCBCZWFjb25cbiIpOworCQlzYy0+cHNfZmxhZ3MgfD0gUFNfV0FJVF9GT1JfQkVBQ09OIHwgUFNfQkVBQ09OX1NZTkMgfAorCQkJCVBTX1RTRk9PUl9TWU5DOworCX0KKwogCWlmIChhaC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0VETUEpCiAJCXJ4bWFzayA9IChBVEg5S19JTlRfUlhIUCB8IEFUSDlLX0lOVF9SWExQIHwgQVRIOUtfSU5UX1JYRU9MIHwKIAkJCSAgQVRIOUtfSU5UX1JYT1JOKTsKQEAgLTY3NCwxNiArNzIyLDYgQEAKIAkJCWF0aF90eF90YXNrbGV0KHNjKTsKIAl9CiAKLQlpZiAoKHN0YXR1cyAmIEFUSDlLX0lOVF9UU0ZPT1IpICYmIHNjLT5wc19lbmFibGVkKSB7Ci0JCS8qCi0JCSAqIFRTRiBzeW5jIGRvZXMgbm90IGxvb2sgY29ycmVjdDsgcmVtYWluIGF3YWtlIHRvIHN5bmMgd2l0aAotCQkgKiB0aGUgbmV4dCBCZWFjb24uCi0JCSAqLwotCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19QUywKLQkJCSJUU0ZPT1IgLSBTeW5jIHdpdGggbmV4dCBCZWFjb25cbiIpOwotCQlzYy0+cHNfZmxhZ3MgfD0gUFNfV0FJVF9GT1JfQkVBQ09OIHwgUFNfQkVBQ09OX1NZTkM7Ci0JfQotCiAJaWYgKGFoLT5idGNvZXhfaHcuc2NoZW1lID09IEFUSF9CVENPRVhfQ0ZHXzNXSVJFKQogCQlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX0dFTlRJTUVSKQogCQkJYXRoX2dlbl90aW1lcl9pc3Ioc2MtPnNjX2FoKTsKQEAgLTgyOCw0OCArODY2LDYgQEAKICN1bmRlZiBTQ0hFRF9JTlRSCiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2Jzc19hc3NvY19pbmZvKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCQkgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYpCi17Ci0Jc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7Ci0Jc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7Ci0KLQlpZiAoYnNzX2NvbmYtPmFzc29jKSB7Ci0JCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKLQkJCSJCc3MgSW5mbyBBU1NPQyAlZCwgYnNzaWQ6ICVwTVxuIiwKLQkJCWJzc19jb25mLT5haWQsIGNvbW1vbi0+Y3VyYnNzaWQpOwotCi0JCS8qIE5ldyBhc3NvY2lhdGlvbiwgc3RvcmUgYWlkICovCi0JCWNvbW1vbi0+Y3VyYWlkID0gYnNzX2NvbmYtPmFpZDsKLQkJYXRoOWtfaHdfd3JpdGVfYXNzb2NpZChhaCk7Ci0KLQkJLyoKLQkJICogUmVxdWVzdCBhIHJlLWNvbmZpZ3VyYXRpb24gb2YgQmVhY29uIHJlbGF0ZWQgdGltZXJzCi0JCSAqIG9uIHRoZSByZWNlaXB0IG9mIHRoZSBmaXJzdCBCZWFjb24gZnJhbWUgKGkuZS4sCi0JCSAqIGFmdGVyIHRpbWUgc3luYyB3aXRoIHRoZSBBUCkuCi0JCSAqLwotCQlzYy0+cHNfZmxhZ3MgfD0gUFNfQkVBQ09OX1NZTkM7Ci0KLQkJLyogQ29uZmlndXJlIHRoZSBiZWFjb24gKi8KLQkJYXRoX2JlYWNvbl9jb25maWcoc2MsIHZpZik7Ci0KLQkJLyogUmVzZXQgcnNzaSBzdGF0cyAqLwotCQlzYy0+bGFzdF9yc3NpID0gQVRIX1JTU0lfRFVNTVlfTUFSS0VSOwotCQlzYy0+c2NfYWgtPnN0YXRzLmF2Z2Jyc3NpID0gQVRIX1JTU0lfRFVNTVlfTUFSS0VSOwotCi0JCXNjLT5zY19mbGFncyB8PSBTQ19PUF9BTklfUlVOOwotCQlhdGhfc3RhcnRfYW5pKGNvbW1vbik7Ci0JfSBlbHNlIHsKLQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLCAiQnNzIEluZm8gRElTQVNTT0NcbiIpOwotCQljb21tb24tPmN1cmFpZCA9IDA7Ci0JCS8qIFN0b3AgQU5JICovCi0JCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfQU5JX1JVTjsKLQkJZGVsX3RpbWVyX3N5bmMoJmNvbW1vbi0+YW5pLnRpbWVyKTsKLQl9Ci19Ci0KIHZvaWQgYXRoX3JhZGlvX2VuYWJsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CkBAIC04OTksNyArODk1LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9CRUFDT05TKQotCQlhdGhfYmVhY29uX2NvbmZpZyhzYywgTlVMTCk7CS8qIHJlc3RhcnQgYmVhY29ucyAqLworCQlhdGhfc2V0X2JlYWNvbihzYyk7CS8qIHJlc3RhcnQgYmVhY29ucyAqLwogCiAJLyogUmUtRW5hYmxlICBpbnRlcnJ1cHRzICovCiAJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIGFoLT5pbWFzayk7CkBAIC0xMDA2LDcgKzEwMDIsNyBAQAogCQkJICAgICAgIHNjLT5jb25maWcudHhwb3dsaW1pdCwgJnNjLT5jdXJ0eHBvdyk7CiAKIAlpZiAoKHNjLT5zY19mbGFncyAmIFNDX09QX0JFQUNPTlMpIHx8ICEoc2MtPnNjX2ZsYWdzICYgKFNDX09QX09GRkNIQU5ORUwpKSkKLQkJYXRoX2JlYWNvbl9jb25maWcoc2MsIE5VTEwpOwkvKiByZXN0YXJ0IGJlYWNvbnMgKi8KKwkJYXRoX3NldF9iZWFjb24oc2MpOwkvKiByZXN0YXJ0IGJlYWNvbnMgKi8KIAogCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBhaC0+aW1hc2spOwogCkBAIC0xMzg5LDcgKzEzODUsOSBAQAogCQlhdGg5a19od19zZXRfdHNmYWRqdXN0KGFoLCAwKTsKIAkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9UU0ZfUkVTRVQ7CiAKLQkJaWYgKGl0ZXJfZGF0YS5ud2RzICsgaXRlcl9kYXRhLm5tZXNoZXMpCisJCWlmIChpdGVyX2RhdGEubm1lc2hlcykKKwkJCWFoLT5vcG1vZGUgPSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOworCQllbHNlIGlmIChpdGVyX2RhdGEubndkcykKIAkJCWFoLT5vcG1vZGUgPSBOTDgwMjExX0lGVFlQRV9BUDsKIAkJZWxzZSBpZiAoaXRlcl9kYXRhLm5hZGhvY3MpCiAJCQlhaC0+b3Btb2RlID0gTkw4MDIxMV9JRlRZUEVfQURIT0M7CkBAIC0xNDEzLDYgKzE0MTEsNyBAQAogCiAJLyogU2V0IHVwIEFOSSAqLwogCWlmICgoaXRlcl9kYXRhLm5hcHMgKyBpdGVyX2RhdGEubmFkaG9jcykgPiAwKSB7CisJCXNjLT5zY19haC0+c3RhdHMuYXZnYnJzc2kgPSBBVEhfUlNTSV9EVU1NWV9NQVJLRVI7CiAJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9BTklfUlVOOwogCQlhdGhfc3RhcnRfYW5pKGNvbW1vbik7CiAJfSBlbHNlIHsKQEAgLTE0NTIsNyArMTQ1MSw2IEBACiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKIAlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKLQlzdHJ1Y3QgYXRoX3ZpZiAqYXZwID0gKHZvaWQgKil2aWYtPmRydl9wcml2OwogCWludCByZXQgPSAwOwogCiAJYXRoOWtfcHNfd2FrZXVwKHNjKTsKQEAgLTE0ODIsOCArMTQ4MCw5IEBACiAJCX0KIAl9CiAKLQlpZiAoKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgJiYKLQkgICAgc2MtPm52aWZzID4gMCkgeworCWlmICgoYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgfHwKKwkgICAgKCh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpICYmCisJICAgICBzYy0+bnZpZnMgPiAwKSkgewogCQlhdGhfZXJyKGNvbW1vbiwgIkNhbm5vdCBjcmVhdGUgQURIT0MgaW50ZXJmYWNlIHdoZW4gb3RoZXIiCiAJCQkiIGludGVyZmFjZXMgYWxyZWFkeSBleGlzdC5cbiIpOwogCQlyZXQgPSAtRUlOVkFMOwpAQCAtMTQ5MywxMCArMTQ5Miw2IEBACiAJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLAogCQkiQXR0YWNoIGEgVklGIG9mIHR5cGU6ICVkXG4iLCB2aWYtPnR5cGUpOwogCi0JLyogU2V0IHRoZSBWSUYgb3Btb2RlICovCi0JYXZwLT5hdl9vcG1vZGUgPSB2aWYtPnR5cGU7Ci0JYXZwLT5hdl9ic2xvdCA9IC0xOwotCiAJc2MtPm52aWZzKys7CiAKIAlhdGg5a19kb192aWZfYWRkX3NldHVwKGh3LCB2aWYpOwpAQCAtMTc4MiwyMyArMTc3Nyw2OCBAQAogCQkJIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCiB7CiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHNjLT5zY19haCk7CisJc3RydWN0IGF0aF9ub2RlICphbiA9IChzdHJ1Y3QgYXRoX25vZGUgKikgc3RhLT5kcnZfcHJpdjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mIHBzX2tleSA9IHsgfTsKIAogCWF0aF9ub2RlX2F0dGFjaChzYywgc3RhKTsKIAorCWlmICh2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVAgJiYKKwkgICAgdmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCisJCXJldHVybiAwOworCisJYW4tPnBzX2tleSA9IGF0aF9rZXlfY29uZmlnKGNvbW1vbiwgdmlmLCBzdGEsICZwc19rZXkpOworCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGF0aDlrX2RlbF9wc19rZXkoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCit7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpOworCXN0cnVjdCBhdGhfbm9kZSAqYW4gPSAoc3RydWN0IGF0aF9ub2RlICopIHN0YS0+ZHJ2X3ByaXY7CisJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiBwc19rZXkgPSB7IC5od19rZXlfaWR4ID0gYW4tPnBzX2tleSB9OworCisJaWYgKCFhbi0+cHNfa2V5KQorCSAgICByZXR1cm47CisKKwlhdGhfa2V5X2RlbGV0ZShjb21tb24sICZwc19rZXkpOworfQorCiBzdGF0aWMgaW50IGF0aDlrX3N0YV9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQogewogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7CiAKKwlhdGg5a19kZWxfcHNfa2V5KHNjLCB2aWYsIHN0YSk7CiAJYXRoX25vZGVfZGV0YWNoKHNjLCBzdGEpOwogCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGF0aDlrX3N0YV9ub3RpZnkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSBlbnVtIHN0YV9ub3RpZnlfY21kIGNtZCwKKwkJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9ub2RlICphbiA9IChzdHJ1Y3QgYXRoX25vZGUgKikgc3RhLT5kcnZfcHJpdjsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTVEFfTk9USUZZX1NMRUVQOgorCQlhbi0+c2xlZXBpbmcgPSB0cnVlOworCQlpZiAoYXRoX3R4X2FnZ3Jfc2xlZXAoc2MsIGFuKSkKKwkJCWllZWU4MDIxMV9zdGFfc2V0X3RpbShzdGEpOworCQlicmVhazsKKwljYXNlIFNUQV9OT1RJRllfQVdBS0U6CisJCWFuLT5zbGVlcGluZyA9IGZhbHNlOworCQlhdGhfdHhfYWdncl93YWtldXAoc2MsIGFuKTsKKwkJYnJlYWs7CisJfQorfQorCiBzdGF0aWMgaW50IGF0aDlrX2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBxdWV1ZSwKIAkJCSBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW1zKQogewpAQCAtMTg1NSwxMiArMTg5NSwyOSBAQAogCWlmIChhdGg5a19tb2RwYXJhbV9ub2h3Y3J5cHQpCiAJCXJldHVybiAtRU5PU1BDOwogCisJaWYgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgorCSAgICAoa2V5LT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUCB8fAorCSAgICAga2V5LT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUCkgJiYKKwkgICAgIShrZXktPmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFKSkgeworCQkvKgorCQkgKiBGb3Igbm93LCBkaXNhYmxlIGh3IGNyeXB0byBmb3IgdGhlIFJTTiBJQlNTIGdyb3VwIGtleXMuIFRoaXMKKwkJICogY291bGQgYmUgb3B0aW1pemVkIGluIHRoZSBmdXR1cmUgdG8gdXNlIGEgbW9kaWZpZWQga2V5IGNhY2hlCisJCSAqIGRlc2lnbiB0byBzdXBwb3J0IHBlci1TVEEgUlggR1RLLCBidXQgdW50aWwgdGhhdCBnZXRzCisJCSAqIGltcGxlbWVudGVkLCB1c2Ugb2Ygc29mdHdhcmUgY3J5cHRvIGZvciBncm91cCBhZGRyZXNzZWQKKwkJICogZnJhbWVzIGlzIGEgYWNjZXB0YWJsZSB0byBhbGxvdyBSU04gSUJTUyB0byBiZSB1c2VkLgorCQkgKi8KKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKwogCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CiAJYXRoOWtfcHNfd2FrZXVwKHNjKTsKIAlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DT05GSUcsICJTZXQgSFcgS2V5XG4iKTsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTRVRfS0VZOgorCQlpZiAoc3RhKQorCQkJYXRoOWtfZGVsX3BzX2tleShzYywgdmlmLCBzdGEpOworCiAJCXJldCA9IGF0aF9rZXlfY29uZmlnKGNvbW1vbiwgdmlmLCBzdGEsIGtleSk7CiAJCWlmIChyZXQgPj0gMCkgewogCQkJa2V5LT5od19rZXlfaWR4ID0gcmV0OwpAQCAtMTg4Niw2ICsxOTQzLDkyIEBACiAKIAlyZXR1cm4gcmV0OwogfQorc3RhdGljIHZvaWQgYXRoOWtfYnNzX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGRhdGE7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpOworCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mID0gJnZpZi0+YnNzX2NvbmY7CisJc3RydWN0IGF0aF92aWYgKmF2cCA9ICh2b2lkICopdmlmLT5kcnZfcHJpdjsKKworCXN3aXRjaCAoc2MtPnNjX2FoLT5vcG1vZGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQkvKiBUaGVyZSBjYW4gYmUgb25seSBvbmUgdmlmIGF2YWlsYWJsZSAqLworCQltZW1jcHkoY29tbW9uLT5jdXJic3NpZCwgYnNzX2NvbmYtPmJzc2lkLCBFVEhfQUxFTik7CisJCWNvbW1vbi0+Y3VyYWlkID0gYnNzX2NvbmYtPmFpZDsKKwkJYXRoOWtfaHdfd3JpdGVfYXNzb2NpZChzYy0+c2NfYWgpOworCQkvKiBjb25maWd1cmUgYmVhY29uICovCisJCWlmIChic3NfY29uZi0+ZW5hYmxlX2JlYWNvbikKKwkJCWF0aF9iZWFjb25fY29uZmlnKHNjLCB2aWYpOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCS8qCisJCSAqIFNraXAgaXRlcmF0aW9uIGlmIHByaW1hcnkgc3RhdGlvbiB2aWYncyBic3MgaW5mbworCQkgKiB3YXMgbm90IGNoYW5nZWQKKwkJICovCisJCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9QUklNX1NUQV9WSUYpCisJCQlicmVhazsKKworCQlpZiAoYnNzX2NvbmYtPmFzc29jKSB7CisJCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfUFJJTV9TVEFfVklGOworCQkJYXZwLT5wcmltYXJ5X3N0YV92aWYgPSB0cnVlOworCQkJbWVtY3B5KGNvbW1vbi0+Y3VyYnNzaWQsIGJzc19jb25mLT5ic3NpZCwgRVRIX0FMRU4pOworCQkJY29tbW9uLT5jdXJhaWQgPSBic3NfY29uZi0+YWlkOworCQkJYXRoOWtfaHdfd3JpdGVfYXNzb2NpZChzYy0+c2NfYWgpOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLAorCQkJCSJCc3MgSW5mbyBBU1NPQyAlZCwgYnNzaWQ6ICVwTVxuIiwKKwkJCQlic3NfY29uZi0+YWlkLCBjb21tb24tPmN1cmJzc2lkKTsKKwkJCWF0aF9iZWFjb25fY29uZmlnKHNjLCB2aWYpOworCQkJLyoKKwkJCSAqIFJlcXVlc3QgYSByZS1jb25maWd1cmF0aW9uIG9mIEJlYWNvbiByZWxhdGVkIHRpbWVycworCQkJICogb24gdGhlIHJlY2VpcHQgb2YgdGhlIGZpcnN0IEJlYWNvbiBmcmFtZSAoaS5lLiwKKwkJCSAqIGFmdGVyIHRpbWUgc3luYyB3aXRoIHRoZSBBUCkuCisJCQkgKi8KKwkJCXNjLT5wc19mbGFncyB8PSBQU19CRUFDT05fU1lOQyB8IFBTX1dBSVRfRk9SX0JFQUNPTjsKKwkJCS8qIFJlc2V0IHJzc2kgc3RhdHMgKi8KKwkJCXNjLT5sYXN0X3Jzc2kgPSBBVEhfUlNTSV9EVU1NWV9NQVJLRVI7CisJCQlzYy0+c2NfYWgtPnN0YXRzLmF2Z2Jyc3NpID0gQVRIX1JTU0lfRFVNTVlfTUFSS0VSOworCisJCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfQU5JX1JVTjsKKwkJCWF0aF9zdGFydF9hbmkoY29tbW9uKTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGF0aDlrX2NvbmZpZ19ic3Moc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpOworCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mID0gJnZpZi0+YnNzX2NvbmY7CisJc3RydWN0IGF0aF92aWYgKmF2cCA9ICh2b2lkICopdmlmLT5kcnZfcHJpdjsKKworCS8qIFJlY29uZmlndXJlIGJzcyBpbmZvICovCisJaWYgKGF2cC0+cHJpbWFyeV9zdGFfdmlmICYmICFic3NfY29uZi0+YXNzb2MpIHsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLAorCQkJIkJzcyBJbmZvIERJU0FTU09DICVkLCBic3NpZCAlcE1cbiIsCisJCQljb21tb24tPmN1cmFpZCwgY29tbW9uLT5jdXJic3NpZCk7CisJCXNjLT5zY19mbGFncyAmPSB+KFNDX09QX1BSSU1fU1RBX1ZJRiB8IFNDX09QX0JFQUNPTlMpOworCQlhdnAtPnByaW1hcnlfc3RhX3ZpZiA9IGZhbHNlOworCQltZW1zZXQoY29tbW9uLT5jdXJic3NpZCwgMCwgRVRIX0FMRU4pOworCQljb21tb24tPmN1cmFpZCA9IDA7CisJfQorCisJaWVlZTgwMjExX2l0ZXJhdGVfYWN0aXZlX2ludGVyZmFjZXNfYXRvbWljKAorCQkJc2MtPmh3LCBhdGg5a19ic3NfaXRlciwgc2MpOworCisJLyoKKwkgKiBOb25lIG9mIHN0YXRpb24gdmlmcyBhcmUgYXNzb2NpYXRlZC4KKwkgKiBDbGVhciBic3NpZCAmIGFpZAorCSAqLworCWlmICgoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgJiYKKwkgICAgIShzYy0+c2NfZmxhZ3MgJiBTQ19PUF9QUklNX1NUQV9WSUYpKSB7CisJCWF0aDlrX2h3X3dyaXRlX2Fzc29jaWQoc2MtPnNjX2FoKTsKKwkJLyogU3RvcCBBTkkgKi8KKwkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9BTklfUlVOOworCQlkZWxfdGltZXJfc3luYygmY29tbW9uLT5hbmkudGltZXIpOworCX0KK30KIAogc3RhdGljIHZvaWQgYXRoOWtfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLApAQCAtMTg5Myw3ICsyMDM2LDYgQEAKIAkJCQkgICB1MzIgY2hhbmdlZCkKIHsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OwotCXN0cnVjdCBhdGhfYmVhY29uX2NvbmZpZyAqY3VyX2NvbmYgPSAmc2MtPmN1cl9iZWFjb25fY29uZjsKIAlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKIAlzdHJ1Y3QgYXRoX3ZpZiAqYXZwID0gKHZvaWQgKil2aWYtPmRydl9wcml2OwpAQCAtMTkwNCwyMCArMjA0NiwxMCBAQAogCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CiAKIAlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JTU0lEKSB7Ci0JCS8qIFNldCBCU1NJRCAqLwotCQltZW1jcHkoY29tbW9uLT5jdXJic3NpZCwgYnNzX2NvbmYtPmJzc2lkLCBFVEhfQUxFTik7Ci0JCW1lbWNweShhdnAtPmJzc2lkLCBic3NfY29uZi0+YnNzaWQsIEVUSF9BTEVOKTsKLQkJY29tbW9uLT5jdXJhaWQgPSAwOwotCQlhdGg5a19od193cml0ZV9hc3NvY2lkKGFoKTsKLQotCQkvKiBTZXQgYWdncmVnYXRpb24gcHJvdGVjdGlvbiBtb2RlIHBhcmFtZXRlcnMgKi8KLQkJc2MtPmNvbmZpZy5hdGhfYWdncl9wcm90ID0gMDsKKwkJYXRoOWtfY29uZmlnX2JzcyhzYywgdmlmKTsKIAogCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DT05GSUcsICJCU1NJRDogJXBNIGFpZDogMHgleFxuIiwKIAkJCWNvbW1vbi0+Y3VyYnNzaWQsIGNvbW1vbi0+Y3VyYWlkKTsKLQotCQkvKiBuZWVkIHRvIHJlY29uZmlndXJlIHRoZSBiZWFjb24gKi8KLQkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9CRUFDT05TIDsKIAl9CiAKIAkvKiBFbmFibGUgdHJhbnNtaXNzaW9uIG9mIGJlYWNvbnMgKEFQLCBJQlNTLCBNRVNIKSAqLwpAQCAtMTk1OCw3ICsyMDkwLDYgQEAKIAl9CiAKIAlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTl9JTlQpIHsKLQkJY3VyX2NvbmYtPmJlYWNvbl9pbnRlcnZhbCA9IGJzc19jb25mLT5iZWFjb25faW50OwogCQkvKgogCQkgKiBJbiBjYXNlIG9mIEFQIG1vZGUsIHRoZSBIVyBUU0YgaGFzIHRvIGJlIHJlc2V0CiAJCSAqIHdoZW4gdGhlIGJlYWNvbiBpbnRlcnZhbCBjaGFuZ2VzLgpAQCAtMTk3MCw5ICsyMTAxLDggQEAKIAkJCWlmICghZXJyb3IpCiAJCQkJYXRoX2JlYWNvbl9jb25maWcoc2MsIHZpZik7CiAJCQlhdGg5a19zZXRfYmVhY29uaW5nX3N0YXR1cyhzYywgdHJ1ZSk7Ci0JCX0gZWxzZSB7CisJCX0gZWxzZQogCQkJYXRoX2JlYWNvbl9jb25maWcoc2MsIHZpZik7Ci0JCX0KIAl9CiAKIAlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0VSUF9QUkVBTUJMRSkgewpAQCAtMTk5NCwxMiArMjEyNCw2IEBACiAJCQlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX1BST1RFQ1RfRU5BQkxFOwogCX0KIAotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQVNTT0MpIHsKLQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLCAiQlNTIENoYW5nZWQgQVNTT0MgJWRcbiIsCi0JCQlic3NfY29uZi0+YXNzb2MpOwotCQlhdGg5a19ic3NfYXNzb2NfaW5mbyhzYywgaHcsIHZpZiwgYnNzX2NvbmYpOwotCX0KLQogCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKIAlhdGg5a19wc19yZXN0b3JlKHNjKTsKIH0KQEAgLTIxNDUsMTAgKzIyNjksOSBAQAogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwogCWludCB0aW1lb3V0ID0gMjAwOyAvKiBtcyAqLwogCWludCBpLCBqOworCWJvb2wgZHJhaW5fdHhxOwogCi0JYXRoOWtfcHNfd2FrZXVwKHNjKTsKIAltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOwotCiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZzYy0+dHhfY29tcGxldGVfd29yayk7CiAKIAlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfSU5WQUxJRCkgewpAQCAtMjE2MSw3ICsyMjg0LDcgQEAKIAkJdGltZW91dCA9IDE7CiAKIAlmb3IgKGogPSAwOyBqIDwgdGltZW91dDsgaisrKSB7Ci0JCWludCBucGVuZCA9IDA7CisJCWJvb2wgbnBlbmQgPSBmYWxzZTsKIAogCQlpZiAoaikKIAkJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKQEAgLTIxNzAsMjIgKzIyOTMsNDMgQEAKIAkJCWlmICghQVRIX1RYUV9TRVRVUChzYywgaSkpCiAJCQkJY29udGludWU7CiAKLQkJCW5wZW5kICs9IGF0aDlrX2hhc19wZW5kaW5nX2ZyYW1lcyhzYywgJnNjLT50eC50eHFbaV0pOworCQkJbnBlbmQgPSBhdGg5a19oYXNfcGVuZGluZ19mcmFtZXMoc2MsICZzYy0+dHgudHhxW2ldKTsKKworCQkJaWYgKG5wZW5kKQorCQkJCWJyZWFrOwogCQl9CiAKIAkJaWYgKCFucGVuZCkKIAkJICAgIGdvdG8gb3V0OwogCX0KIAotCWlmICghYXRoX2RyYWluX2FsbF90eHEoc2MsIGZhbHNlKSkKKwlhdGg5a19wc193YWtldXAoc2MpOworCXNwaW5fbG9ja19iaCgmc2MtPnNjX3BjdV9sb2NrKTsKKwlkcmFpbl90eHEgPSBhdGhfZHJhaW5fYWxsX3R4cShzYywgZmFsc2UpOworCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcGN1X2xvY2spOworCWlmICghZHJhaW5fdHhxKQogCQlhdGhfcmVzZXQoc2MsIGZhbHNlKTsKLQorCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhodyk7CiAKIG91dDoKIAlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKGh3LCAmc2MtPnR4X2NvbXBsZXRlX3dvcmssIDApOwogCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKLQlhdGg5a19wc19yZXN0b3JlKHNjKTsKK30KKworc3RhdGljIGJvb2wgYXRoOWtfdHhfZnJhbWVzX3BlbmRpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBVEg5S19OVU1fVFhfUVVFVUVTOyBpKyspIHsKKwkJaWYgKCFBVEhfVFhRX1NFVFVQKHNjLCBpKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChhdGg5a19oYXNfcGVuZGluZ19mcmFtZXMoc2MsICZzYy0+dHgudHhxW2ldKSkKKwkJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7CiB9CiAKIHN0cnVjdCBpZWVlODAyMTFfb3BzIGF0aDlrX29wcyA9IHsKQEAgLTIxOTksNiArMjM0Myw3IEBACiAJLmNvbmZpZ3VyZV9maWx0ZXIgICA9IGF0aDlrX2NvbmZpZ3VyZV9maWx0ZXIsCiAJLnN0YV9hZGQJICAgID0gYXRoOWtfc3RhX2FkZCwKIAkuc3RhX3JlbW92ZQkgICAgPSBhdGg5a19zdGFfcmVtb3ZlLAorCS5zdGFfbm90aWZ5ICAgICAgICAgPSBhdGg5a19zdGFfbm90aWZ5LAogCS5jb25mX3R4IAkgICAgPSBhdGg5a19jb25mX3R4LAogCS5ic3NfaW5mb19jaGFuZ2VkICAgPSBhdGg5a19ic3NfaW5mb19jaGFuZ2VkLAogCS5zZXRfa2V5ICAgICAgICAgICAgPSBhdGg5a19zZXRfa2V5LApAQCAtMjIxMCw0ICsyMzU1LDUgQEAKIAkucmZraWxsX3BvbGwgICAgICAgID0gYXRoOWtfcmZraWxsX3BvbGxfc3RhdGUsCiAJLnNldF9jb3ZlcmFnZV9jbGFzcyA9IGF0aDlrX3NldF9jb3ZlcmFnZV9jbGFzcywKIAkuZmx1c2gJCSAgICA9IGF0aDlrX2ZsdXNoLAorCS50eF9mcmFtZXNfcGVuZGluZyAgPSBhdGg5a190eF9mcmFtZXNfcGVuZGluZywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcGh5LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcGh5LmgKaW5kZXggNWUzZDc0OS4uOTQ0MWJmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3BoeS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9waHkuaApAQCAtMTksNyArMTksNiBAQAogCiAjZGVmaW5lIENIQU5TRUxfRElWCQkxNQogI2RlZmluZSBDSEFOU0VMXzJHKF9mcmVxKQkoKChfZnJlcSkgKiAweDEwMDAwKSAvIENIQU5TRUxfRElWKQotI2RlZmluZSBDSEFOU0VMXzJHXzk0ODUoX2ZyZXEpCSgoKChfZnJlcSkgKiAweDEwMDAwKSAtIDIxNSkgLyBDSEFOU0VMX0RJVikKICNkZWZpbmUgQ0hBTlNFTF81RyhfZnJlcSkJKCgoX2ZyZXEpICogMHg4MDAwKSAvIENIQU5TRUxfRElWKQogCiAjZGVmaW5lIEFSX1BIWV9CQVNFICAgICAweDk4MDAKQEAgLTM4LDI2ICszNywxNSBAQAogI2RlZmluZSBBUl9QSFlfQ0xDX1EwICAgICAgICAweDAwMDBmZmQwCiAjZGVmaW5lIEFSX1BIWV9DTENfUTBfUyAgICAgIDUKIAotI2RlZmluZSBSRUdfV1JJVEVfUkZfQVJSQVkoaW5pYXJyYXksIHJlZ0RhdGEsIHJlZ1dyKSBkbyB7ICAgICAgICAgICAgICAgXAotCQlpbnQgcjsJCQkJCQkJXAotCQlmb3IgKHIgPSAwOyByIDwgKChpbmlhcnJheSktPmlhX3Jvd3MpOyByKyspIHsJCVwKLQkJCVJFR19XUklURShhaCwgSU5JX1JBKChpbmlhcnJheSksIHIsIDApLCAocmVnRGF0YSlbcl0pOyBcCi0JCQlET19ERUxBWShyZWdXcik7CQkJCVwKLQkJfQkJCQkJCQlcCi0JfSB3aGlsZSAoMCkKLQogI2RlZmluZSBBTlRTV0FQX0FCIDB4MDAwMQogI2RlZmluZSBSRURVQ0VfQ0hBSU5fMCAweDAwMDAwMDUwCiAjZGVmaW5lIFJFRFVDRV9DSEFJTl8xIDB4MDAwMDAwNTEKICNkZWZpbmUgQVJfUEhZX0NISVBfSUQgMHg5ODE4CiAKLSNkZWZpbmUgUkZfQkFOS19TRVRVUChfYmFuaywgX2luaWFycmF5LCBfY29sKSBkbyB7CQkJXAotCQlpbnQgaTsJCQkJCQkJXAotCQlmb3IgKGkgPSAwOyBpIDwgKF9pbmlhcnJheSktPmlhX3Jvd3M7IGkrKykJCVwKLQkJCShfYmFuaylbaV0gPSBJTklfUkEoKF9pbmlhcnJheSksIGksIF9jb2wpOzsJXAotCX0gd2hpbGUgKDApCi0KICNkZWZpbmUJQVJfUEhZX1RJTUlORzExX1NQVVJfRlJFUV9TRAkJMHgzRkYwMDAwMAogI2RlZmluZQlBUl9QSFlfVElNSU5HMTFfU1BVUl9GUkVRX1NEX1MJCTIwCiAKKyNkZWZpbmUgQVJfUEhZX1BMTF9DT05UUk9MIDB4MTYxODAKKyNkZWZpbmUgQVJfUEhZX1BMTF9NT0RFIDB4MTYxODQKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5jCmluZGV4IDRjMGQzNmEuLjRjY2JmMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5jCkBAIC04NTQsMTQgKzg1NCwxMyBAQAogCWF0aF9yY19yYXRlX3NldF9ydHNjdHMoc2MsIHJhdGVfdGFibGUsIHR4X2luZm8pOwogfQogCi1zdGF0aWMgYm9vbCBhdGhfcmNfdXBkYXRlX3BlcihzdHJ1Y3QgYXRoX3NvZnRjICpzYywKK3N0YXRpYyB2b2lkIGF0aF9yY191cGRhdGVfcGVyKHN0cnVjdCBhdGhfc29mdGMgKnNjLAogCQkJICAgICAgY29uc3Qgc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlLAogCQkJICAgICAgc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2LAogCQkJCSAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvLAogCQkJICAgICAgaW50IHR4X3JhdGUsIGludCB4cmV0cmllcywgaW50IHJldHJpZXMsCiAJCQkgICAgICB1MzIgbm93X21zZWMpCiB7Ci0JYm9vbCBzdGF0ZV9jaGFuZ2UgPSBmYWxzZTsKIAlpbnQgY291bnQsIG5fYmFkX2ZyYW1lczsKIAl1OCBsYXN0X3BlcjsKIAlzdGF0aWMgY29uc3QgdTMyIG5yZXRyeV90b19wZXJfbG9va3VwWzEwXSA9IHsKQEAgLTk5Miw4ICs5OTEsNiBAQAogCiAJCX0KIAl9Ci0KLQlyZXR1cm4gc3RhdGVfY2hhbmdlOwogfQogCiBzdGF0aWMgdm9pZCBhdGhfZGVidWdfc3RhdF9yZXRyaWVzKHN0cnVjdCBhdGhfcmF0ZV9wcml2ICpyYywgaW50IHJpeCwKQEAgLTEwMTcsNyArMTAxNCw2IEBACiAJdTMyIG5vd19tc2VjID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzKTsKIAlpbnQgcmF0ZTsKIAl1OCBsYXN0X3BlcjsKLQlib29sIHN0YXRlX2NoYW5nZSA9IGZhbHNlOwogCWNvbnN0IHN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcmF0ZV90YWJsZSA9IGF0aF9yY19wcml2LT5yYXRlX3RhYmxlOwogCWludCBzaXplID0gYXRoX3JjX3ByaXYtPnJhdGVfdGFibGVfc2l6ZTsKIApAQCAtMTAyNyw5ICsxMDIzLDkgQEAKIAlsYXN0X3BlciA9IGF0aF9yY19wcml2LT5wZXJbdHhfcmF0ZV07CiAKIAkvKiBVcGRhdGUgUEVSIGZpcnN0ICovCi0Jc3RhdGVfY2hhbmdlID0gYXRoX3JjX3VwZGF0ZV9wZXIoc2MsIHJhdGVfdGFibGUsIGF0aF9yY19wcml2LAotCQkJCQkgdHhfaW5mbywgdHhfcmF0ZSwgeHJldHJpZXMsCi0JCQkJCSByZXRyaWVzLCBub3dfbXNlYyk7CisJYXRoX3JjX3VwZGF0ZV9wZXIoc2MsIHJhdGVfdGFibGUsIGF0aF9yY19wcml2LAorCQkJICB0eF9pbmZvLCB0eF9yYXRlLCB4cmV0cmllcywKKwkJCSAgcmV0cmllcywgbm93X21zZWMpOwogCiAJLyoKIAkgKiBJZiB0aGlzIHJhdGUgbG9va3MgYmFkIChoaWdoIFBFUikgdGhlbiBzdG9wIHVzaW5nIGl0IGZvcgpAQCAtMTA5Miw4ICsxMDg4LDcgQEAKIAlpZiAoIShyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19NQ1MpKQogCQlyZXR1cm4gcmF0ZS0+aWR4OwogCi0Jd2hpbGUgKHJhdGUtPmlkeCA+IG1jc19yaXhfb2ZmW2ldICYmCi0JICAgICAgIGkgPCBBUlJBWV9TSVpFKG1jc19yaXhfb2ZmKSkgeworCXdoaWxlIChpIDwgQVJSQVlfU0laRShtY3Nfcml4X29mZikgJiYgcmF0ZS0+aWR4ID4gbWNzX3JpeF9vZmZbaV0pIHsKIAkJcml4Kys7IGkrKzsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jCmluZGV4IGIyOWM4MGQuLjRmNTJlMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYwpAQCAtMjgsNiArMjgsMzMgQEAKIAkJKGFsdF9yc3NpX2F2ZyA+IG1haW5fcnNzaV9hdmcgKyBtaW5kZWx0YSkpICYmIChwa3RfY291bnQgPiA1MCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBhdGhfYW50X2Rpdl9jb21iX2FsdF9jaGVjayh1OCBkaXZfZ3JvdXAsIGludCBhbHRfcmF0aW8sCisJCQkJCWludCBjdXJyX21haW5fc2V0LCBpbnQgY3Vycl9hbHRfc2V0LAorCQkJCQlpbnQgYWx0X3Jzc2lfYXZnLCBpbnQgbWFpbl9yc3NpX2F2ZykKK3sKKwlib29sIHJlc3VsdCA9IGZhbHNlOworCXN3aXRjaCAoZGl2X2dyb3VwKSB7CisJY2FzZSAwOgorCQlpZiAoYWx0X3JhdGlvID4gQVRIX0FOVF9ESVZfQ09NQl9BTFRfQU5UX1JBVElPKQorCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlpZiAoKCgoY3Vycl9tYWluX3NldCA9PSBBVEhfQU5UX0RJVl9DT01CX0xOQTIpICYmCisJCQkoY3Vycl9hbHRfc2V0ID09IEFUSF9BTlRfRElWX0NPTUJfTE5BMSkgJiYKKwkJCQkoYWx0X3Jzc2lfYXZnID49IChtYWluX3Jzc2lfYXZnIC0gNSkpKSB8fAorCQkJKChjdXJyX21haW5fc2V0ID09IEFUSF9BTlRfRElWX0NPTUJfTE5BMSkgJiYKKwkJCShjdXJyX2FsdF9zZXQgPT0gQVRIX0FOVF9ESVZfQ09NQl9MTkEyKSAmJgorCQkJCShhbHRfcnNzaV9hdmcgPj0gKG1haW5fcnNzaV9hdmcgLSAyKSkpKSAmJgorCQkJCQkJCShhbHRfcnNzaV9hdmcgPj0gNCkpCisJCQlyZXN1bHQgPSB0cnVlOworCQllbHNlCisJCQlyZXN1bHQgPSBmYWxzZTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKwogc3RhdGljIGlubGluZSBib29sIGF0aDlrX2NoZWNrX2F1dG9fc2xlZXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7CiAJcmV0dXJuIHNjLT5wc19lbmFibGVkICYmCkBAIC03NSw3ICsxMDIsNiBAQAogCQkqc2MtPnJ4LnJ4bGluayA9IGJmLT5iZl9kYWRkcjsKIAogCXNjLT5yeC5yeGxpbmsgPSAmZHMtPmRzX2xpbms7Ci0JYXRoOWtfaHdfcnhlbmEoYWgpOwogfQogCiBzdGF0aWMgdm9pZCBhdGhfc2V0ZGVmYW50ZW5uYShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgdTMyIGFudGVubmEpCkBAIC00MjYsOSArNDUyLDcgQEAKIAllbHNlCiAJCXJmaWx0IHw9IEFUSDlLX1JYX0ZJTFRFUl9CRUFDT047CiAKLQlpZiAoKEFSX1NSRVZfOTI4MF8yMF9PUl9MQVRFUihzYy0+c2NfYWgpIHx8Ci0JICAgIEFSX1NSRVZfOTI4NV8xMl9PUl9MQVRFUihzYy0+c2NfYWgpKSAmJgotCSAgICAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApICYmCisJaWYgKChzYy0+c2NfYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgfHwKIAkgICAgKHNjLT5yeC5yeGZpbHRlciAmIEZJRl9QU1BPTEwpKQogCQlyZmlsdCB8PSBBVEg5S19SWF9GSUxURVJfUFNQT0xMOwogCkBAIC01NzQsNyArNTk4LDggQEAKIAkJc2MtPnBzX2ZsYWdzICY9IH5QU19CRUFDT05fU1lOQzsKIAkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfUFMsCiAJCQkiUmVjb25maWd1cmUgQmVhY29uIHRpbWVycyBiYXNlZCBvbiB0aW1lc3RhbXAgZnJvbSB0aGUgQVBcbiIpOwotCQlhdGhfYmVhY29uX2NvbmZpZyhzYywgTlVMTCk7CisJCWF0aF9zZXRfYmVhY29uKHNjKTsKKwkJc2MtPnBzX2ZsYWdzICY9IH5QU19UU0ZPT1JfU1lOQzsKIAl9CiAKIAlpZiAoYXRoX2JlYWNvbl9kdGltX3BlbmRpbmdfY2FiKHNrYikpIHsKQEAgLTkxOSw3ICs5NDQsOCBAQAogCWludCBsYXN0X3Jzc2k7CiAJX19sZTE2IGZjOwogCi0JaWYgKGFoLT5vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwlpZiAoKGFoLT5vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgJiYKKwkgICAgKGFoLT5vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpKQogCQlyZXR1cm47CiAKIAlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKQEAgLTEyOTEsNDkgKzEzMTcsMTM4IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGhfYW50X2Rpdl9jb25mX2Zhc3RfZGl2YmlhcyhzdHJ1Y3QgYXRoX2h3X2FudGNvbWJfY29uZiAqYW50X2NvbmYpCitzdGF0aWMgdm9pZCBhdGhfYW50X2Rpdl9jb25mX2Zhc3RfZGl2YmlhcyhzdHJ1Y3QgYXRoX2h3X2FudGNvbWJfY29uZiAqYW50X2NvbmYsCisJCXN0cnVjdCBhdGhfYW50X2NvbWIgKmFudGNvbWIsIGludCBhbHRfcmF0aW8pCiB7Ci0JLyogQWRqdXN0IHRoZSBmYXN0X2Rpdl9iaWFzIGJhc2VkIG9uIG1haW4gYW5kIGFsdCBsbmEgY29uZiAqLwotCXN3aXRjaCAoKGFudF9jb25mLT5tYWluX2xuYV9jb25mIDw8IDQpIHwgYW50X2NvbmYtPmFsdF9sbmFfY29uZikgewotCWNhc2UgKDB4MDEpOiAvKiBBLUIgTE5BMiAqLwotCQlhbnRfY29uZi0+ZmFzdF9kaXZfYmlhcyA9IDB4M2I7Ci0JCWJyZWFrOwotCWNhc2UgKDB4MDIpOiAvKiBBLUIgTE5BMSAqLwotCQlhbnRfY29uZi0+ZmFzdF9kaXZfYmlhcyA9IDB4M2Q7Ci0JCWJyZWFrOwotCWNhc2UgKDB4MDMpOiAvKiBBLUIgQStCICovCi0JCWFudF9jb25mLT5mYXN0X2Rpdl9iaWFzID0gMHgxOwotCQlicmVhazsKLQljYXNlICgweDEwKTogLyogTE5BMiBBLUIgKi8KLQkJYW50X2NvbmYtPmZhc3RfZGl2X2JpYXMgPSAweDc7Ci0JCWJyZWFrOwotCWNhc2UgKDB4MTIpOiAvKiBMTkEyIExOQTEgKi8KLQkJYW50X2NvbmYtPmZhc3RfZGl2X2JpYXMgPSAweDI7Ci0JCWJyZWFrOwotCWNhc2UgKDB4MTMpOiAvKiBMTkEyIEErQiAqLwotCQlhbnRfY29uZi0+ZmFzdF9kaXZfYmlhcyA9IDB4NzsKLQkJYnJlYWs7Ci0JY2FzZSAoMHgyMCk6IC8qIExOQTEgQS1CICovCi0JCWFudF9jb25mLT5mYXN0X2Rpdl9iaWFzID0gMHg2OwotCQlicmVhazsKLQljYXNlICgweDIxKTogLyogTE5BMSBMTkEyICovCi0JCWFudF9jb25mLT5mYXN0X2Rpdl9iaWFzID0gMHgwOwotCQlicmVhazsKLQljYXNlICgweDIzKTogLyogTE5BMSBBK0IgKi8KLQkJYW50X2NvbmYtPmZhc3RfZGl2X2JpYXMgPSAweDY7Ci0JCWJyZWFrOwotCWNhc2UgKDB4MzApOiAvKiBBK0IgQS1CICovCi0JCWFudF9jb25mLT5mYXN0X2Rpdl9iaWFzID0gMHgxOwotCQlicmVhazsKLQljYXNlICgweDMxKTogLyogQStCIExOQTIgKi8KLQkJYW50X2NvbmYtPmZhc3RfZGl2X2JpYXMgPSAweDNiOwotCQlicmVhazsKLQljYXNlICgweDMyKTogLyogQStCIExOQTEgKi8KLQkJYW50X2NvbmYtPmZhc3RfZGl2X2JpYXMgPSAweDNkOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKKwlpZiAoYW50X2NvbmYtPmRpdl9ncm91cCA9PSAwKSB7CisJCS8qIEFkanVzdCB0aGUgZmFzdF9kaXZfYmlhcyBiYXNlZCBvbiBtYWluIGFuZCBhbHQgbG5hIGNvbmYgKi8KKwkJc3dpdGNoICgoYW50X2NvbmYtPm1haW5fbG5hX2NvbmYgPDwgNCkgfAorCQkJCWFudF9jb25mLT5hbHRfbG5hX2NvbmYpIHsKKwkJY2FzZSAoMHgwMSk6IC8qIEEtQiBMTkEyICovCisJCQlhbnRfY29uZi0+ZmFzdF9kaXZfYmlhcyA9IDB4M2I7CisJCQlicmVhazsKKwkJY2FzZSAoMHgwMik6IC8qIEEtQiBMTkExICovCisJCQlhbnRfY29uZi0+ZmFzdF9kaXZfYmlhcyA9IDB4M2Q7CisJCQlicmVhazsKKwkJY2FzZSAoMHgwMyk6IC8qIEEtQiBBK0IgKi8KKwkJCWFudF9jb25mLT5mYXN0X2Rpdl9iaWFzID0gMHgxOworCQkJYnJlYWs7CisJCWNhc2UgKDB4MTApOiAvKiBMTkEyIEEtQiAqLworCQkJYW50X2NvbmYtPmZhc3RfZGl2X2JpYXMgPSAweDc7CisJCQlicmVhazsKKwkJY2FzZSAoMHgxMik6IC8qIExOQTIgTE5BMSAqLworCQkJYW50X2NvbmYtPmZhc3RfZGl2X2JpYXMgPSAweDI7CisJCQlicmVhazsKKwkJY2FzZSAoMHgxMyk6IC8qIExOQTIgQStCICovCisJCQlhbnRfY29uZi0+ZmFzdF9kaXZfYmlhcyA9IDB4NzsKKwkJCWJyZWFrOworCQljYXNlICgweDIwKTogLyogTE5BMSBBLUIgKi8KKwkJCWFudF9jb25mLT5mYXN0X2Rpdl9iaWFzID0gMHg2OworCQkJYnJlYWs7CisJCWNhc2UgKDB4MjEpOiAvKiBMTkExIExOQTIgKi8KKwkJCWFudF9jb25mLT5mYXN0X2Rpdl9iaWFzID0gMHgwOworCQkJYnJlYWs7CisJCWNhc2UgKDB4MjMpOiAvKiBMTkExIEErQiAqLworCQkJYW50X2NvbmYtPmZhc3RfZGl2X2JpYXMgPSAweDY7CisJCQlicmVhazsKKwkJY2FzZSAoMHgzMCk6IC8qIEErQiBBLUIgKi8KKwkJCWFudF9jb25mLT5mYXN0X2Rpdl9iaWFzID0gMHgxOworCQkJYnJlYWs7CisJCWNhc2UgKDB4MzEpOiAvKiBBK0IgTE5BMiAqLworCQkJYW50X2NvbmYtPmZhc3RfZGl2X2JpYXMgPSAweDNiOworCQkJYnJlYWs7CisJCWNhc2UgKDB4MzIpOiAvKiBBK0IgTE5BMSAqLworCQkJYW50X2NvbmYtPmZhc3RfZGl2X2JpYXMgPSAweDNkOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSBpZiAoYW50X2NvbmYtPmRpdl9ncm91cCA9PSAyKSB7CisJCS8qIEFkanVzdCB0aGUgZmFzdF9kaXZfYmlhcyBiYXNlZCBvbiBtYWluIGFuZCBhbHRfbG5hX2NvbmYgKi8KKwkJc3dpdGNoICgoYW50X2NvbmYtPm1haW5fbG5hX2NvbmYgPDwgNCkgfAorCQkJCWFudF9jb25mLT5hbHRfbG5hX2NvbmYpIHsKKwkJY2FzZSAoMHgwMSk6IC8qIEEtQiBMTkEyICovCisJCQlhbnRfY29uZi0+ZmFzdF9kaXZfYmlhcyA9IDB4MTsKKwkJCWFudF9jb25mLT5tYWluX2dhaW50YiA9IDA7CisJCQlhbnRfY29uZi0+YWx0X2dhaW50YiA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAoMHgwMik6IC8qIEEtQiBMTkExICovCisJCQlhbnRfY29uZi0+ZmFzdF9kaXZfYmlhcyA9IDB4MTsKKwkJCWFudF9jb25mLT5tYWluX2dhaW50YiA9IDA7CisJCQlhbnRfY29uZi0+YWx0X2dhaW50YiA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAoMHgwMyk6IC8qIEEtQiBBK0IgKi8KKwkJCWFudF9jb25mLT5mYXN0X2Rpdl9iaWFzID0gMHgxOworCQkJYW50X2NvbmYtPm1haW5fZ2FpbnRiID0gMDsKKwkJCWFudF9jb25mLT5hbHRfZ2FpbnRiID0gMDsKKwkJCWJyZWFrOworCQljYXNlICgweDEwKTogLyogTE5BMiBBLUIgKi8KKwkJCWlmICghKGFudGNvbWItPnNjYW4pICYmCisJCQkJKGFsdF9yYXRpbyA+IEFUSF9BTlRfRElWX0NPTUJfQUxUX0FOVF9SQVRJTykpCisJCQkJYW50X2NvbmYtPmZhc3RfZGl2X2JpYXMgPSAweDE7CisJCQllbHNlCisJCQkJYW50X2NvbmYtPmZhc3RfZGl2X2JpYXMgPSAweDI7CisJCQlhbnRfY29uZi0+bWFpbl9nYWludGIgPSAwOworCQkJYW50X2NvbmYtPmFsdF9nYWludGIgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgKDB4MTIpOiAvKiBMTkEyIExOQTEgKi8KKwkJCWFudF9jb25mLT5mYXN0X2Rpdl9iaWFzID0gMHgxOworCQkJYW50X2NvbmYtPm1haW5fZ2FpbnRiID0gMDsKKwkJCWFudF9jb25mLT5hbHRfZ2FpbnRiID0gMDsKKwkJCWJyZWFrOworCQljYXNlICgweDEzKTogLyogTE5BMiBBK0IgKi8KKwkJCWlmICghKGFudGNvbWItPnNjYW4pICYmCisJCQkJKGFsdF9yYXRpbyA+IEFUSF9BTlRfRElWX0NPTUJfQUxUX0FOVF9SQVRJTykpCisJCQkJYW50X2NvbmYtPmZhc3RfZGl2X2JpYXMgPSAweDE7CisJCQllbHNlCisJCQkJYW50X2NvbmYtPmZhc3RfZGl2X2JpYXMgPSAweDI7CisJCQlhbnRfY29uZi0+bWFpbl9nYWludGIgPSAwOworCQkJYW50X2NvbmYtPmFsdF9nYWludGIgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgKDB4MjApOiAvKiBMTkExIEEtQiAqLworCQkJaWYgKCEoYW50Y29tYi0+c2NhbikgJiYKKwkJCQkoYWx0X3JhdGlvID4gQVRIX0FOVF9ESVZfQ09NQl9BTFRfQU5UX1JBVElPKSkKKwkJCQlhbnRfY29uZi0+ZmFzdF9kaXZfYmlhcyA9IDB4MTsKKwkJCWVsc2UKKwkJCQlhbnRfY29uZi0+ZmFzdF9kaXZfYmlhcyA9IDB4MjsKKwkJCWFudF9jb25mLT5tYWluX2dhaW50YiA9IDA7CisJCQlhbnRfY29uZi0+YWx0X2dhaW50YiA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAoMHgyMSk6IC8qIExOQTEgTE5BMiAqLworCQkJYW50X2NvbmYtPmZhc3RfZGl2X2JpYXMgPSAweDE7CisJCQlhbnRfY29uZi0+bWFpbl9nYWludGIgPSAwOworCQkJYW50X2NvbmYtPmFsdF9nYWludGIgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgKDB4MjMpOiAvKiBMTkExIEErQiAqLworCQkJaWYgKCEoYW50Y29tYi0+c2NhbikgJiYKKwkJCQkoYWx0X3JhdGlvID4gQVRIX0FOVF9ESVZfQ09NQl9BTFRfQU5UX1JBVElPKSkKKwkJCQlhbnRfY29uZi0+ZmFzdF9kaXZfYmlhcyA9IDB4MTsKKwkJCWVsc2UKKwkJCQlhbnRfY29uZi0+ZmFzdF9kaXZfYmlhcyA9IDB4MjsKKwkJCWFudF9jb25mLT5tYWluX2dhaW50YiA9IDA7CisJCQlhbnRfY29uZi0+YWx0X2dhaW50YiA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAoMHgzMCk6IC8qIEErQiBBLUIgKi8KKwkJCWFudF9jb25mLT5mYXN0X2Rpdl9iaWFzID0gMHgxOworCQkJYW50X2NvbmYtPm1haW5fZ2FpbnRiID0gMDsKKwkJCWFudF9jb25mLT5hbHRfZ2FpbnRiID0gMDsKKwkJCWJyZWFrOworCQljYXNlICgweDMxKTogLyogQStCIExOQTIgKi8KKwkJCWFudF9jb25mLT5mYXN0X2Rpdl9iaWFzID0gMHgxOworCQkJYW50X2NvbmYtPm1haW5fZ2FpbnRiID0gMDsKKwkJCWFudF9jb25mLT5hbHRfZ2FpbnRiID0gMDsKKwkJCWJyZWFrOworCQljYXNlICgweDMyKTogLyogQStCIExOQTEgKi8KKwkJCWFudF9jb25mLT5mYXN0X2Rpdl9iaWFzID0gMHgxOworCQkJYW50X2NvbmYtPm1haW5fZ2FpbnRiID0gMDsKKwkJCWFudF9jb25mLT5hbHRfZ2FpbnRiID0gMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwogCX0KKwogfQogCiAvKiBBbnRlbm5hIGRpdmVyc2l0eSBhbmQgY29tYmluaW5nICovCkBAIC0xMzQyLDcgKzE0NTcsNyBAQAogCXN0cnVjdCBhdGhfaHdfYW50Y29tYl9jb25mIGRpdl9hbnRfY29uZjsKIAlzdHJ1Y3QgYXRoX2FudF9jb21iICphbnRjb21iID0gJnNjLT5hbnRfY29tYjsKIAlpbnQgYWx0X3JhdGlvID0gMCwgYWx0X3Jzc2lfYXZnID0gMCwgbWFpbl9yc3NpX2F2ZyA9IDAsIGN1cnJfYWx0X3NldDsKLQlpbnQgY3Vycl9tYWluX3NldCwgY3Vycl9iaWFzOworCWludCBjdXJyX21haW5fc2V0OwogCWludCBtYWluX3Jzc2kgPSBycy0+cnNfcnNzaV9jdGwwOwogCWludCBhbHRfcnNzaSA9IHJzLT5yc19yc3NpX2N0bDE7CiAJaW50IHJ4X2FudF9jb25mLCAgbWFpbl9hbnRfY29uZjsKQEAgLTEzNTMsOCArMTQ2OCw4IEBACiAJbWFpbl9hbnRfY29uZiA9IChycy0+cnNfcnNzaV9jdGwyID4+IEFUSF9BTlRfUlhfTUFJTl9TSElGVCkgJgogCQkJIEFUSF9BTlRfUlhfTUFTSzsKIAotCS8qIFJlY29yZCBwYWNrZXQgb25seSB3aGVuIGFsdF9yc3NpIGlzIHBvc2l0aXZlICovCi0JaWYgKGFsdF9yc3NpID4gMCkgeworCS8qIFJlY29yZCBwYWNrZXQgb25seSB3aGVuIGJvdGggbWFpbl9yc3NpIGFuZCAgYWx0X3Jzc2kgaXMgcG9zaXRpdmUgKi8KKwlpZiAobWFpbl9yc3NpID4gMCAmJiBhbHRfcnNzaSA+IDApIHsKIAkJYW50Y29tYi0+dG90YWxfcGt0X2NvdW50Kys7CiAJCWFudGNvbWItPm1haW5fdG90YWxfcnNzaSArPSBtYWluX3Jzc2k7CiAJCWFudGNvbWItPmFsdF90b3RhbF9yc3NpICArPSBhbHRfcnNzaTsKQEAgLTEzOTYsNyArMTUxMSw2IEBACiAJYXRoOWtfaHdfYW50ZGl2X2NvbWJfY29uZl9nZXQoc2MtPnNjX2FoLCAmZGl2X2FudF9jb25mKTsKIAljdXJyX2FsdF9zZXQgPSBkaXZfYW50X2NvbmYuYWx0X2xuYV9jb25mOwogCWN1cnJfbWFpbl9zZXQgPSBkaXZfYW50X2NvbmYubWFpbl9sbmFfY29uZjsKLQljdXJyX2JpYXMgPSBkaXZfYW50X2NvbmYuZmFzdF9kaXZfYmlhczsKIAogCWFudGNvbWItPmNvdW50Kys7CiAKQEAgLTE0MTUsNyArMTUyOSw5IEBACiAJfQogCiAJaWYgKCFhbnRjb21iLT5zY2FuKSB7Ci0JCWlmIChhbHRfcmF0aW8gPiBBVEhfQU5UX0RJVl9DT01CX0FMVF9BTlRfUkFUSU8pIHsKKwkJaWYgKGF0aF9hbnRfZGl2X2NvbWJfYWx0X2NoZWNrKGRpdl9hbnRfY29uZi5kaXZfZ3JvdXAsCisJCQkJCWFsdF9yYXRpbywgY3Vycl9tYWluX3NldCwgY3Vycl9hbHRfc2V0LAorCQkJCQlhbHRfcnNzaV9hdmcsIG1haW5fcnNzaV9hdmcpKSB7CiAJCQlpZiAoY3Vycl9hbHRfc2V0ID09IEFUSF9BTlRfRElWX0NPTUJfTE5BMikgewogCQkJCS8qIFN3aXRjaCBtYWluIGFuZCBhbHQgTE5BICovCiAJCQkJZGl2X2FudF9jb25mLm1haW5fbG5hX2NvbmYgPQpAQCAtMTQ0NCw3ICsxNTYwLDcgQEAKIAkJfQogCiAJCWlmICgoYWx0X3Jzc2lfYXZnIDwgKG1haW5fcnNzaV9hdmcgKwotCQkgICAgQVRIX0FOVF9ESVZfQ09NQl9MTkExX0xOQTJfREVMVEEpKSkKKwkJCQkJCWRpdl9hbnRfY29uZi5sbmExX2xuYTJfZGVsdGEpKSkKIAkJCWdvdG8gZGl2X2NvbWJfZG9uZTsKIAl9CiAKQEAgLTE1NTgsOCArMTY3NCw3IEBACiAJYW50Y29tYi0+cXVpY2tfc2Nhbl9jbnQrKzsKIAogZGl2X2NvbWJfZG9uZToKLQlhdGhfYW50X2Rpdl9jb25mX2Zhc3RfZGl2YmlhcygmZGl2X2FudF9jb25mKTsKLQorCWF0aF9hbnRfZGl2X2NvbmZfZmFzdF9kaXZiaWFzKCZkaXZfYW50X2NvbmYsIGFudGNvbWIsIGFsdF9yYXRpbyk7CiAJYXRoOWtfaHdfYW50ZGl2X2NvbWJfY29uZl9zZXQoc2MtPnNjX2FoLCAmZGl2X2FudF9jb25mKTsKIAogCWFudGNvbWItPnNjYW5fc3RhcnRfdGltZSA9IGppZmZpZXM7CkBAIC0xNzQ2LDcgKzE4NjEsNyBAQAogCQlpZiAoKHNjLT5wc19mbGFncyAmIChQU19XQUlUX0ZPUl9CRUFDT04gfAogCQkJCQkgICAgICBQU19XQUlUX0ZPUl9DQUIgfAogCQkJCQkgICAgICBQU19XQUlUX0ZPUl9QU1BPTExfREFUQSkpIHx8Ci0JCQkJCXVubGlrZWx5KGF0aDlrX2NoZWNrX2F1dG9fc2xlZXAoc2MpKSkKKwkJCQkJCWF0aDlrX2NoZWNrX2F1dG9fc2xlZXAoc2MpKQogCQkJYXRoX3J4X3BzKHNjLCBza2IpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+c2NfcG1fbG9jaywgZmxhZ3MpOwogCkBAIC0xNzY3LDYgKzE4ODIsNyBAQAogCQl9IGVsc2UgewogCQkJbGlzdF9tb3ZlX3RhaWwoJmJmLT5saXN0LCAmc2MtPnJ4LnJ4YnVmKTsKIAkJCWF0aF9yeF9idWZfbGluayhzYywgYmYpOworCQkJYXRoOWtfaHdfcnhlbmEoYWgpOwogCQl9CiAJfSB3aGlsZSAoMSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWcuaAppbmRleCA4ZmE4YWNmLi40NTZmM2VjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlZy5oCkBAIC02OTMsNyArNjkzLDcgQEAKICNkZWZpbmUgQVJfUkNfQVBCICAgICAgICAgICAgMHgwMDAwMDAwMgogI2RlZmluZSBBUl9SQ19IT1NUSUYgICAgICAgICAweDAwMDAwMTAwCiAKLSNkZWZpbmUgQVJfV0EgICAgICAgICAgICAgICAgCQkweDQwMDQKKyNkZWZpbmUgQVJfV0EJCQkoQVJfU1JFVl85MzQwKGFoKSA/IDB4NDBjNCA6IDB4NDAwNCkKICNkZWZpbmUgQVJfV0FfQklUNgkJCSgxIDw8IDYpCiAjZGVmaW5lIEFSX1dBX0JJVDcJCQkoMSA8PCA3KQogI2RlZmluZSBBUl9XQV9CSVQyMwkJCSgxIDw8IDIzKQpAQCAtNzEyLDcgKzcxMiw3IEBACiAjZGVmaW5lIEFSX1BNX1NUQVRFICAgICAgICAgICAgICAgICAweDQwMDgKICNkZWZpbmUgQVJfUE1fU1RBVEVfUE1FX0QzQ09MRF9WQVVYIDB4MDAxMDAwMDAKIAotI2RlZmluZSBBUl9IT1NUX1RJTUVPVVQgICAgICAgICAgICAgMHg0MDE4CisjZGVmaW5lIEFSX0hPU1RfVElNRU9VVCAgICAgICAgICAgICAoQVJfU1JFVl85MzQwKGFoKSA/IDB4NDAwOCA6IDB4NDAxOCkKICNkZWZpbmUgQVJfSE9TVF9USU1FT1VUX0FQQl9DTlRSICAgIDB4MDAwMEZGRkYKICNkZWZpbmUgQVJfSE9TVF9USU1FT1VUX0FQQl9DTlRSX1MgIDAKICNkZWZpbmUgQVJfSE9TVF9USU1FT1VUX0xDTF9DTlRSICAgIDB4RkZGRjAwMDAKQEAgLTc0Miw3ICs3NDIsOCBAQAogI2RlZmluZSBFRVBST01fUFJPVEVDVF9XUF8xMDI0XzIwNDcgICAweDgwMDAKIAogI2RlZmluZSBBUl9TUkVWIFwKLQkoKEFSX1NSRVZfOTEwMChhaCkpID8gMHgwNjAwIDogMHg0MDIwKQorCSgoQVJfU1JFVl85MTAwKGFoKSkgPyAweDA2MDAgOiAoQVJfU1JFVl85MzQwKGFoKSBcCisJCQkJCT8gMHg0MDBjIDogMHg0MDIwKSkKIAogI2RlZmluZSBBUl9TUkVWX0lEIFwKIAkoKEFSX1NSRVZfOTEwMChhaCkpID8gMHgwMDAwMEZGRiA6IDB4MDAwMDAwRkYpCkBAIC03OTAsNiArNzkxLDcgQEAKICNkZWZpbmUgQVJfU1JFVl9WRVJTSU9OXzk0ODUJCTB4MjQwCiAjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTQ4NV8xMAkwCiAjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTQ4NV8xMSAgICAgICAgMQorI2RlZmluZSBBUl9TUkVWX1ZFUlNJT05fOTM0MAkJMHgzMDAKIAogI2RlZmluZSBBUl9TUkVWXzU0MTYoX2FoKSBcCiAJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl81NDE2X1BDSSkgfHwgXApAQCAtODU4LDkgKzg2MCw3IEBACiAjZGVmaW5lIEFSX1NSRVZfOTMwMChfYWgpIFwKIAkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkzMDApKQogI2RlZmluZSBBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoX2FoKSBcCi0JKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID4gQVJfU1JFVl9WRVJTSU9OXzkzMDApIHx8IFwKLQkgKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MzAwKSAmJiBcCi0JICAoKF9haCktPmh3X3ZlcnNpb24ubWFjUmV2ID49IEFSX1NSRVZfUkVWSVNJT05fOTMwMF8yMCkpKQorCSgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID49IEFSX1NSRVZfVkVSU0lPTl85MzAwKQogCiAjZGVmaW5lIEFSX1NSRVZfOTQ4NShfYWgpIFwKIAkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzk0ODUpKQpAQCAtODcwLDYgKzg3MCwxMSBAQAogI2RlZmluZSBBUl9TUkVWXzk0ODVfMTEoX2FoKSBcCiAJKEFSX1NSRVZfOTQ4NShfYWgpICYmIFwKIAkgKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA9PSBBUl9TUkVWX1JFVklTSU9OXzk0ODVfMTEpKQorI2RlZmluZSBBUl9TUkVWXzk0ODVfT1JfTEFURVIoX2FoKSBcCisJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID49IEFSX1NSRVZfVkVSU0lPTl85NDg1KSkKKworI2RlZmluZSBBUl9TUkVWXzkzNDAoX2FoKSBcCisJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MzQwKSkKIAogI2RlZmluZSBBUl9TUkVWXzkyODVFXzIwKF9haCkgXAogICAgIChBUl9TUkVWXzkyODVfMTJfT1JfTEFURVIoX2FoKSAmJiBcCkBAIC05MTIsMTEgKzkxNywxMSBAQAogI2RlZmluZSBBUl9JTlRSX1NQVVJJT1VTICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKIAogCi0jZGVmaW5lIEFSX0lOVFJfU1lOQ19DQVVTRV9DTFIgICAgICAgICAgICAgICAgMHg0MDI4CisjZGVmaW5lIEFSX0lOVFJfU1lOQ19DQVVTRSAgICAgICAgICAgICAgICAgICAgKEFSX1NSRVZfOTM0MChhaCkgPyAweDQwMTAgOiAweDQwMjgpCisjZGVmaW5lIEFSX0lOVFJfU1lOQ19DQVVTRV9DTFIgICAgICAgICAgICAgICAgKEFSX1NSRVZfOTM0MChhaCkgPyAweDQwMTAgOiAweDQwMjgpCiAKLSNkZWZpbmUgQVJfSU5UUl9TWU5DX0NBVVNFICAgICAgICAgICAgICAgICAgICAweDQwMjgKIAotI2RlZmluZSBBUl9JTlRSX1NZTkNfRU5BQkxFICAgICAgICAgICAgICAgICAgIDB4NDAyYworI2RlZmluZSBBUl9JTlRSX1NZTkNfRU5BQkxFICAgICAgICAgICAgICAgICAgIChBUl9TUkVWXzkzNDAoYWgpID8gMHg0MDE0IDogMHg0MDJjKQogI2RlZmluZSBBUl9JTlRSX1NZTkNfRU5BQkxFX0dQSU8gICAgICAgICAgICAgIDB4RkZGQzAwMDAKICNkZWZpbmUgQVJfSU5UUl9TWU5DX0VOQUJMRV9HUElPX1MgICAgICAgICAgICAxOAogCkBAIC05NTYsMjQgKzk2MSwyNCBAQAogCiB9OwogCi0jZGVmaW5lIEFSX0lOVFJfQVNZTkNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHg0MDMwCisjZGVmaW5lIEFSX0lOVFJfQVNZTkNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKEFSX1NSRVZfOTM0MChhaCkgPyAweDQwMTggOiAweDQwMzApCiAjZGVmaW5lIEFSX0lOVFJfQVNZTkNfTUFTS19HUElPICAgICAgICAgICAgICAgICAgMHhGRkZDMDAwMAogI2RlZmluZSBBUl9JTlRSX0FTWU5DX01BU0tfR1BJT19TICAgICAgICAgICAgICAgIDE4CiAKLSNkZWZpbmUgQVJfSU5UUl9TWU5DX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDQwMzQKKyNkZWZpbmUgQVJfSU5UUl9TWU5DX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAoQVJfU1JFVl85MzQwKGFoKSA/IDB4NDAxYyA6IDB4NDAzNCkKICNkZWZpbmUgQVJfSU5UUl9TWU5DX01BU0tfR1BJTyAgICAgICAgICAgICAgICAgICAweEZGRkMwMDAwCiAjZGVmaW5lIEFSX0lOVFJfU1lOQ19NQVNLX0dQSU9fUyAgICAgICAgICAgICAgICAgMTgKIAotI2RlZmluZSBBUl9JTlRSX0FTWU5DX0NBVVNFX0NMUiAgICAgICAgICAgICAgICAgIDB4NDAzOAotI2RlZmluZSBBUl9JTlRSX0FTWU5DX0NBVVNFICAgICAgICAgICAgICAgICAgICAgIDB4NDAzOAorI2RlZmluZSBBUl9JTlRSX0FTWU5DX0NBVVNFX0NMUiAgICAgICAgICAgICAgICAgIChBUl9TUkVWXzkzNDAoYWgpID8gMHg0MDIwIDogMHg0MDM4KQorI2RlZmluZSBBUl9JTlRSX0FTWU5DX0NBVVNFICAgICAgICAgICAgICAgICAgICAgIChBUl9TUkVWXzkzNDAoYWgpID8gMHg0MDIwIDogMHg0MDM4KQogCi0jZGVmaW5lIEFSX0lOVFJfQVNZTkNfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgMHg0MDNjCisjZGVmaW5lIEFSX0lOVFJfQVNZTkNfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgKEFSX1NSRVZfOTM0MChhaCkgPyAweDQwMjQgOiAweDQwM2MpCiAjZGVmaW5lIEFSX0lOVFJfQVNZTkNfRU5BQkxFX0dQSU8gICAgICAgICAgICAgICAgMHhGRkZDMDAwMAogI2RlZmluZSBBUl9JTlRSX0FTWU5DX0VOQUJMRV9HUElPX1MgICAgICAgICAgICAgIDE4CiAKICNkZWZpbmUgQVJfUENJRV9TRVJERVMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwNDAKICNkZWZpbmUgQVJfUENJRV9TRVJERVMyICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwNDQKLSNkZWZpbmUgQVJfUENJRV9QTV9DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMTQKKyNkZWZpbmUgQVJfUENJRV9QTV9DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAoQVJfU1JFVl85MzQwKGFoKSA/IDB4NDAwNCA6IDB4NDAxNCkKICNkZWZpbmUgQVJfUENJRV9QTV9DVFJMX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCiAKICNkZWZpbmUgQVJfTlVNX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNApAQCAtOTg0LDcgKzk4OSw3IEBACiAjZGVmaW5lIEFSOTMwMF9OVU1fR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKICNkZWZpbmUgQVI3MDEwX05VTV9HUElPICAgICAgICAgICAgICAgICAgICAgICAgICAxNgogCi0jZGVmaW5lIEFSX0dQSU9fSU5fT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDQ4CisjZGVmaW5lIEFSX0dQSU9fSU5fT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFSX1NSRVZfOTM0MChhaCkgPyAweDQwMjggOiAweDQwNDgpCiAjZGVmaW5lIEFSX0dQSU9fSU5fVkFMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRkZGQzAwMAogI2RlZmluZSBBUl9HUElPX0lOX1ZBTF9TICAgICAgICAgICAgICAgICAgICAgICAgIDE0CiAjZGVmaW5lIEFSOTI4WF9HUElPX0lOX1ZBTCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGRkMwMApAQCAtOTk4LDExICsxMDAzLDEyIEBACiAjZGVmaW5lIEFSNzAxMF9HUElPX0lOX1ZBTCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgogI2RlZmluZSBBUjcwMTBfR1BJT19JTl9WQUxfUyAgICAgICAgICAgICAgICAgICAgIDAKIAotI2RlZmluZSBBUl9HUElPX0lOCQkJCSAweDQwNGMKKyNkZWZpbmUgQVJfR1BJT19JTgkJCQkgKEFSX1NSRVZfOTM0MChhaCkgPyAweDQwMmMgOiAweDQwNGMpCiAjZGVmaW5lIEFSOTMwMF9HUElPX0lOX1ZBTCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxRkZGRgogI2RlZmluZSBBUjkzMDBfR1BJT19JTl9WQUxfUyAgICAgICAgICAgICAgICAgICAgIDAKIAotI2RlZmluZSBBUl9HUElPX09FX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpID8gMHg0MDUwIDogMHg0MDRjKQorI2RlZmluZSBBUl9HUElPX09FX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIChBUl9TUkVWXzkzNDAoYWgpID8gMHg0MDMwIDogXAorCQkJCQkJICAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSA/IDB4NDA1MCA6IDB4NDA0YykpCiAjZGVmaW5lIEFSX0dQSU9fT0VfT1VUX0RSViAgICAgICAgICAgICAgICAgICAgICAgMHgzCiAjZGVmaW5lIEFSX0dQSU9fT0VfT1VUX0RSVl9OTyAgICAgICAgICAgICAgICAgICAgMHgwCiAjZGVmaW5lIEFSX0dQSU9fT0VfT1VUX0RSVl9MT1cgICAgICAgICAgICAgICAgICAgMHgxCkBAIC0xMDI0LDExICsxMDMwLDEzIEBACiAjZGVmaW5lIEFSNzAxMF9HUElPX0lOVF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHg1MjAyNAogI2RlZmluZSBBUjcwMTBfR1BJT19GVU5DVElPTiAgICAgICAgICAgICAgICAgICAgIDB4NTIwMjgKIAotI2RlZmluZSBBUl9HUElPX0lOVFJfUE9MICAgICAgICAgICAgICAgICAgICAgICAgIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpID8gMHg0MDU4IDogMHg0MDUwKQorI2RlZmluZSBBUl9HUElPX0lOVFJfUE9MICAgICAgICAgICAgICAgICAgICAgICAgIChBUl9TUkVWXzkzNDAoYWgpID8gMHg0MDM4IDogXAorCQkJCQkJICAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSA/IDB4NDA1OCA6IDB4NDA1MCkpCiAjZGVmaW5lIEFSX0dQSU9fSU5UUl9QT0xfVkFMICAgICAgICAgICAgICAgICAgICAgMHgwMDAxRkZGRgogI2RlZmluZSBBUl9HUElPX0lOVFJfUE9MX1ZBTF9TICAgICAgICAgICAgICAgICAgIDAKIAotI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTCAgICAgICAgICAgICAgICAgICAgIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpID8gMHg0MDVjIDogMHg0MDU0KQorI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTCAgICAgICAgICAgICAgICAgICAgIChBUl9TUkVWXzkzNDAoYWgpID8gMHg0MDNjIDogXAorCQkJCQkJICAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSA/IDB4NDA1YyA6IDB4NDA1NCkpCiAjZGVmaW5lIEFSX0dQSU9fSU5QVVRfRU5fVkFMX0JUX1BSSU9SSVRZX0RFRiAgICAgMHgwMDAwMDAwNAogI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9QUklPUklUWV9TICAgICAgIDIKICNkZWZpbmUgQVJfR1BJT19JTlBVVF9FTl9WQUxfQlRfRlJFUVVFTkNZX0RFRiAgICAweDAwMDAwMDA4CkBAIC0xMDQ2LDEzICsxMDU0LDE1IEBACiAjZGVmaW5lIEFSX0dQSU9fUlRDX1JFU0VUX09WRVJSSURFX0VOQUJMRSAgICAgICAgMHgwMDAxMDAwMAogI2RlZmluZSBBUl9HUElPX0pUQUdfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKIAotI2RlZmluZSBBUl9HUElPX0lOUFVUX01VWDEgICAgICAgICAgICAgICAgICAgICAgIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpID8gMHg0MDYwIDogMHg0MDU4KQorI2RlZmluZSBBUl9HUElPX0lOUFVUX01VWDEgICAgICAgICAgICAgICAgICAgICAgIChBUl9TUkVWXzkzNDAoYWgpID8gMHg0MDQwIDogXAorCQkJCQkJICAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSA/IDB4NDA2MCA6IDB4NDA1OCkpCiAjZGVmaW5lIEFSX0dQSU9fSU5QVVRfTVVYMV9CVF9BQ1RJVkUgICAgICAgICAgICAgMHgwMDBmMDAwMAogI2RlZmluZSBBUl9HUElPX0lOUFVUX01VWDFfQlRfQUNUSVZFX1MgICAgICAgICAgIDE2CiAjZGVmaW5lIEFSX0dQSU9fSU5QVVRfTVVYMV9CVF9QUklPUklUWSAgICAgICAgICAgMHgwMDAwMGYwMAogI2RlZmluZSBBUl9HUElPX0lOUFVUX01VWDFfQlRfUFJJT1JJVFlfUyAgICAgICAgIDgKIAotI2RlZmluZSBBUl9HUElPX0lOUFVUX01VWDIgICAgICAgICAgICAgICAgICAgICAgIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpID8gMHg0MDY0IDogMHg0MDVjKQorI2RlZmluZSBBUl9HUElPX0lOUFVUX01VWDIgICAgICAgICAgICAgICAgICAgICAgIChBUl9TUkVWXzkzNDAoYWgpID8gMHg0MDQ0IDogXAorCQkJCQkJICAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSA/IDB4NDA2NCA6IDB4NDA1YykpCiAjZGVmaW5lIEFSX0dQSU9fSU5QVVRfTVVYMl9DTEsyNSAgICAgICAgICAgICAgICAgMHgwMDAwMDAwZgogI2RlZmluZSBBUl9HUElPX0lOUFVUX01VWDJfQ0xLMjVfUyAgICAgICAgICAgICAgIDAKICNkZWZpbmUgQVJfR1BJT19JTlBVVF9NVVgyX1JGU0lMRU5UICAgICAgICAgICAgICAweDAwMDAwMGYwCkBAIC0xMDYwLDEzICsxMDcwLDE4IEBACiAjZGVmaW5lIEFSX0dQSU9fSU5QVVRfTVVYMl9SVENfUkVTRVQgICAgICAgICAgICAgMHgwMDAwMGYwMAogI2RlZmluZSBBUl9HUElPX0lOUFVUX01VWDJfUlRDX1JFU0VUX1MgICAgICAgICAgIDgKIAotI2RlZmluZSBBUl9HUElPX09VVFBVVF9NVVgxICAgICAgICAgICAgICAgICAgICAgIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpID8gMHg0MDY4IDogMHg0MDYwKQotI2RlZmluZSBBUl9HUElPX09VVFBVVF9NVVgyICAgICAgICAgICAgICAgICAgICAgIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpID8gMHg0MDZjIDogMHg0MDY0KQotI2RlZmluZSBBUl9HUElPX09VVFBVVF9NVVgzICAgICAgICAgICAgICAgICAgICAgIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpID8gMHg0MDcwIDogMHg0MDY4KQorI2RlZmluZSBBUl9HUElPX09VVFBVVF9NVVgxICAgICAgICAgICAgICAgICAgICAgIChBUl9TUkVWXzkzNDAoYWgpID8gMHg0MDQ4IDogXAorCQkJCQkJICAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSA/IDB4NDA2OCA6IDB4NDA2MCkpCisjZGVmaW5lIEFSX0dQSU9fT1VUUFVUX01VWDIgICAgICAgICAgICAgICAgICAgICAgKEFSX1NSRVZfOTM0MChhaCkgPyAweDQwNGMgOiBcCisJCQkJCQkgIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpID8gMHg0MDZjIDogMHg0MDY0KSkKKyNkZWZpbmUgQVJfR1BJT19PVVRQVVRfTVVYMyAgICAgICAgICAgICAgICAgICAgICAoQVJfU1JFVl85MzQwKGFoKSA/IDB4NDA1MCA6IFwKKwkJCQkJCSAgKEFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkgPyAweDQwNzAgOiAweDQwNjgpKQogCi0jZGVmaW5lIEFSX0lOUFVUX1NUQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkgPyAweDQwNzQgOiAweDQwNmMpCisjZGVmaW5lIEFSX0lOUFVUX1NUQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFSX1NSRVZfOTM0MChhaCkgPyAweDQwNTQgOiBcCisJCQkJCQkgIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpID8gMHg0MDc0IDogMHg0MDZjKSkKIAotI2RlZmluZSBBUl9FRVBST01fU1RBVFVTX0RBVEEgICAgICAgICAgICAgICAgICAgIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpID8gMHg0MDg0IDogMHg0MDdjKQorI2RlZmluZSBBUl9FRVBST01fU1RBVFVTX0RBVEEgICAgICAgICAgICAgICAgICAgIChBUl9TUkVWXzkzNDAoYWgpID8gMHg0MGM4IDogXAorCQkJCQkJICAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSA/IDB4NDA4NCA6IDB4NDA3YykpCiAjZGVmaW5lIEFSX0VFUFJPTV9TVEFUVVNfREFUQV9WQUwgICAgICAgICAgICAgICAgMHgwMDAwZmZmZgogI2RlZmluZSBBUl9FRVBST01fU1RBVFVTX0RBVEFfVkFMX1MgICAgICAgICAgICAgIDAKICNkZWZpbmUgQVJfRUVQUk9NX1NUQVRVU19EQVRBX0JVU1kgICAgICAgICAgICAgICAweDAwMDEwMDAwCkBAIC0xMDc0LDI4ICsxMDg5LDUxIEBACiAjZGVmaW5lIEFSX0VFUFJPTV9TVEFUVVNfREFUQV9QUk9UX0FDQ0VTUyAgICAgICAgMHgwMDA0MDAwMAogI2RlZmluZSBBUl9FRVBST01fU1RBVFVTX0RBVEFfQUJTRU5UX0FDQ0VTUyAgICAgIDB4MDAwODAwMDAKIAotI2RlZmluZSBBUl9PQlMgICAgICAgICAgICAgICAgICAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSA/IDB4NDA4OCA6IDB4NDA4MCkKKyNkZWZpbmUgQVJfT0JTICAgICAgICAgICAgICAgICAgKEFSX1NSRVZfOTM0MChhaCkgPyAweDQwNWMgOiBcCisJCQkJIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpID8gMHg0MDg4IDogMHg0MDgwKSkKIAogI2RlZmluZSBBUl9HUElPX1BEUFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpID8gMHg0MDkwIDogMHg0MDg4KQogCi0jZGVmaW5lIEFSX1BDSUVfTVNJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkgPyAweDQwYTQgOiAweDQwOTQpCisjZGVmaW5lIEFSX1BDSUVfTVNJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQVJfU1JFVl85MzQwKGFoKSA/IDB4NDBkOCA6IFwKKwkJCQkJCSAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSA/IDB4NDBhNCA6IDB4NDA5NCkpCiAjZGVmaW5lIEFSX1BDSUVfTVNJX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQogCi0jZGVmaW5lIEFSX0lOVFJfUFJJT19TWU5DX0VOQUJMRSAgMHg0MGM0Ci0jZGVmaW5lIEFSX0lOVFJfUFJJT19BU1lOQ19NQVNLICAgMHg0MGM4Ci0jZGVmaW5lIEFSX0lOVFJfUFJJT19TWU5DX01BU0sgICAgMHg0MGNjCi0jZGVmaW5lIEFSX0lOVFJfUFJJT19BU1lOQ19FTkFCTEUgMHg0MGQ0CisjZGVmaW5lIEFSX0lOVFJfUFJJT19TWU5DX0VOQUJMRSAgKEFSX1NSRVZfOTM0MChhaCkgPyAweDQwODggOiAweDQwYzQpCisjZGVmaW5lIEFSX0lOVFJfUFJJT19BU1lOQ19NQVNLICAgKEFSX1NSRVZfOTM0MChhaCkgPyAweDQwOGMgOiAweDQwYzgpCisjZGVmaW5lIEFSX0lOVFJfUFJJT19TWU5DX01BU0sgICAgKEFSX1NSRVZfOTM0MChhaCkgPyAweDQwOTAgOiAweDQwY2MpCisjZGVmaW5lIEFSX0lOVFJfUFJJT19BU1lOQ19FTkFCTEUgKEFSX1NSRVZfOTM0MChhaCkgPyAweDQwOTQgOiAweDQwZDQpCiAjZGVmaW5lIEFSX0VOVF9PVFAJCSAgMHg0MGQ4CiAjZGVmaW5lIEFSX0VOVF9PVFBfQ0hBSU4yX0RJU0FCTEUgICAgICAgICAgICAgICAweDAwMDIwMDAwCiAjZGVmaW5lIEFSX0VOVF9PVFBfTVBTRAkJMHgwMDgwMDAwMAotI2RlZmluZSBBUl9DSDBfQkJfRFBMTDIgICAgICAgICAgMHgxNjE4NAotI2RlZmluZSBBUl9DSDBfQkJfRFBMTDMgICAgICAgICAgMHgxNjE4OAotI2RlZmluZSBBUl9DSDBfRERSX0RQTEwyICAgICAgICAgMHgxNjI0NAotI2RlZmluZSBBUl9DSDBfRERSX0RQTEwzICAgICAgICAgMHgxNjI0OAotI2RlZmluZSBBUl9DSDBfRFBMTDJfS0QgICAgICAgICAgICAgIDB4MDNGODAwMDAKLSNkZWZpbmUgQVJfQ0gwX0RQTEwyX0tEX1MgICAgICAgICAgICAxOQorCisjZGVmaW5lIEFSX0NIMF9CQl9EUExMMQkJIDB4MTYxODAKKyNkZWZpbmUgQVJfQ0gwX0JCX0RQTEwxX1JFRkRJVgkgMHhGODAwMDAwMAorI2RlZmluZSBBUl9DSDBfQkJfRFBMTDFfUkVGRElWX1MgMjcKKyNkZWZpbmUgQVJfQ0gwX0JCX0RQTEwxX05JTkkJIDB4MDdGQzAwMDAKKyNkZWZpbmUgQVJfQ0gwX0JCX0RQTEwxX05JTklfUwkgMTgKKyNkZWZpbmUgQVJfQ0gwX0JCX0RQTEwxX05GUkFDCSAweDAwMDNGRkZGCisjZGVmaW5lIEFSX0NIMF9CQl9EUExMMV9ORlJBQ19TCSAwCisKKyNkZWZpbmUgQVJfQ0gwX0JCX0RQTEwyCQkgICAgIDB4MTYxODQKKyNkZWZpbmUgQVJfQ0gwX0JCX0RQTEwyX0xPQ0FMX1BMTCAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIEFSX0NIMF9CQl9EUExMMl9MT0NBTF9QTExfUyAgICAgMzAKICNkZWZpbmUgQVJfQ0gwX0RQTEwyX0tJICAgICAgICAgICAgICAweDNDMDAwMDAwCiAjZGVmaW5lIEFSX0NIMF9EUExMMl9LSV9TICAgICAgICAgICAgMjYKKyNkZWZpbmUgQVJfQ0gwX0RQTEwyX0tEICAgICAgICAgICAgICAweDAzRjgwMDAwCisjZGVmaW5lIEFSX0NIMF9EUExMMl9LRF9TICAgICAgICAgICAgMTkKKyNkZWZpbmUgQVJfQ0gwX0JCX0RQTEwyX0VOX05FR1RSSUcgICAweDAwMDQwMDAwCisjZGVmaW5lIEFSX0NIMF9CQl9EUExMMl9FTl9ORUdUUklHX1MgMTgKKyNkZWZpbmUgQVJfQ0gwX0JCX0RQTEwyX1BMTF9QV0QJICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEFSX0NIMF9CQl9EUExMMl9QTExfUFdEX1MgICAgMTYKKyNkZWZpbmUgQVJfQ0gwX0JCX0RQTEwyX09VVERJVgkgICAgIDB4MDAwMEUwMDAKKyNkZWZpbmUgQVJfQ0gwX0JCX0RQTEwyX09VVERJVl9TICAgICAxMworCisjZGVmaW5lIEFSX0NIMF9CQl9EUExMMyAgICAgICAgICAweDE2MTg4CisjZGVmaW5lIEFSX0NIMF9CQl9EUExMM19QSEFTRV9TSElGVAkweDNGODAwMDAwCisjZGVmaW5lIEFSX0NIMF9CQl9EUExMM19QSEFTRV9TSElGVF9TCTIzCisKKyNkZWZpbmUgQVJfQ0gwX0REUl9EUExMMiAgICAgICAgIDB4MTYyNDQKKyNkZWZpbmUgQVJfQ0gwX0REUl9EUExMMyAgICAgICAgIDB4MTYyNDgKICNkZWZpbmUgQVJfQ0gwX0RQTEwzX1BIQVNFX1NISUZUICAgICAweDNGODAwMDAwCiAjZGVmaW5lIEFSX0NIMF9EUExMM19QSEFTRV9TSElGVF9TICAgMjMKICNkZWZpbmUgQVJfUEhZX0NDQV9OT01fVkFMXzJHSFogICAgICAtMTE4CkBAIC0xMTQ0LDYgKzExODIsNyBAQAogI2RlZmluZSBBUl9SVENfUExMX1JFRkRJVl81ICAgICAweDAwMDAwMGMwCiAjZGVmaW5lIEFSX1JUQ19QTExfQ0xLU0VMICAgICAgIDB4MDAwMDAzMDAKICNkZWZpbmUgQVJfUlRDX1BMTF9DTEtTRUxfUyAgICAgOAorI2RlZmluZSBBUl9SVENfUExMX0JZUEFTUwkweDAwMDEwMDAwCiAKICNkZWZpbmUgUExMMyAweDE2MTg4CiAjZGVmaW5lIFBMTDNfRE9fTUVBU19NQVNLIDB4NDAwMDAwMDAKQEAgLTExOTAsNyArMTIyOSw4IEBACiAKIC8qIFJUQ19ERVJJVkVEXyogLSBvbmx5IGZvciBBUjkxMDAgKi8KIAotI2RlZmluZSBBUl9SVENfREVSSVZFRF9DTEsgICAgICAgICAgIChBUl9SVENfQkFTRSArIDB4MDAzOCkKKyNkZWZpbmUgQVJfUlRDX0RFUklWRURfQ0xLIFwKKwkoQVJfU1JFVl85MTAwKGFoKSA/IChBUl9SVENfQkFTRSArIDB4MDAzOCkgOiAweDcwMzgpCiAjZGVmaW5lIEFSX1JUQ19ERVJJVkVEX0NMS19QRVJJT0QgICAgMHgwMDAwZmZmZQogI2RlZmluZSBBUl9SVENfREVSSVZFRF9DTEtfUEVSSU9EX1MgIDEKIApAQCAtMTM5Niw2ICsxNDM2LDcgQEAKICNkZWZpbmUgQVJfU1RBX0lEMV9QQ0YgICAgICAgICAgICAgMHgwMDEwMDAwMAogI2RlZmluZSBBUl9TVEFfSUQxX1VTRV9ERUZBTlQgICAgICAweDAwMjAwMDAwCiAjZGVmaW5lIEFSX1NUQV9JRDFfREVGQU5UX1VQREFURSAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgQVJfU1RBX0lEMV9BUjkxMDBfQkFfRklYICAgMHgwMDQwMDAwMAogI2RlZmluZSBBUl9TVEFfSUQxX1JUU19VU0VfREVGICAgICAweDAwODAwMDAwCiAjZGVmaW5lIEFSX1NUQV9JRDFfQUNLQ1RTXzZNQiAgICAgIDB4MDEwMDAwMDAKICNkZWZpbmUgQVJfU1RBX0lEMV9CQVNFX1JBVEVfMTFCICAgMHgwMjAwMDAwMApAQCAtMTY2OCw2ICsxNzA5LDIyIEBACiAjZGVmaW5lIEFSX0JUQ09FWF9XTF9XR0hUICAgICAgICAgIDB4ZmZmZjAwMDAKICNkZWZpbmUgQVJfQlRDT0VYX1dMX1dHSFRfUyAgICAgICAgMTYKIAorI2RlZmluZSBBUl9CVF9DT0VYX1dMX1dFSUdIVFMwICAgICAweDgxNzQKKyNkZWZpbmUgQVJfQlRfQ09FWF9XTF9XRUlHSFRTMSAgICAgMHg4MWM0CisKKyNkZWZpbmUgQVJfQlRfQ09FWF9CVF9XRUlHSFRTMCAgICAgMHg4M2FjCisjZGVmaW5lIEFSX0JUX0NPRVhfQlRfV0VJR0hUUzEgICAgIDB4ODNiMAorI2RlZmluZSBBUl9CVF9DT0VYX0JUX1dFSUdIVFMyICAgICAweDgzYjQKKyNkZWZpbmUgQVJfQlRfQ09FWF9CVF9XRUlHSFRTMyAgICAgMHg4M2I4CisKKyNkZWZpbmUgQVI5MzAwX0JUX1dHSFQgICAgICAgICAgICAgICAgICAgICAweGNjY2M0NDQ0CisjZGVmaW5lIEFSOTMwMF9TVE9NUF9BTExfV0xBTl9XR0hUMCAgICAgICAgMHhmZmZmZmZmMAorI2RlZmluZSBBUjkzMDBfU1RPTVBfQUxMX1dMQU5fV0dIVDEgICAgICAgIDB4ZmZmZmZmZjAKKyNkZWZpbmUgQVI5MzAwX1NUT01QX0xPV19XTEFOX1dHSFQwICAgICAgICAweDg4ODg4ODgwCisjZGVmaW5lIEFSOTMwMF9TVE9NUF9MT1dfV0xBTl9XR0hUMSAgICAgICAgMHg4ODg4ODg4MAorI2RlZmluZSBBUjkzMDBfU1RPTVBfTk9ORV9XTEFOX1dHSFQwICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgQVI5MzAwX1NUT01QX05PTkVfV0xBTl9XR0hUMSAgICAgICAweDAwMDAwMDAwCisKICNkZWZpbmUgQVJfQlRfQ09FWF9NT0RFMiAgICAgICAgICAgMHg4MTdjCiAjZGVmaW5lIEFSX0JUX0JDTl9NSVNTX1RIUkVTSCAgICAgIDB4MDAwMDAwZmYKICNkZWZpbmUgQVJfQlRfQkNOX01JU1NfVEhSRVNIX1MgICAgMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5jCmluZGV4IGQzZDI0OTAuLmY5YjFlYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay93bWkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmMKQEAgLTIzLDIwICsyMywxOCBAQAogCQlyZXR1cm4gIldNSV9FQ0hPX0NNRElEIjsKIAljYXNlIFdNSV9BQ0NFU1NfTUVNT1JZX0NNRElEOgogCQlyZXR1cm4gIldNSV9BQ0NFU1NfTUVNT1JZX0NNRElEIjsKKwljYXNlIFdNSV9HRVRfRldfVkVSU0lPTjoKKwkJcmV0dXJuICJXTUlfR0VUX0ZXX1ZFUlNJT04iOwogCWNhc2UgV01JX0RJU0FCTEVfSU5UUl9DTURJRDoKIAkJcmV0dXJuICJXTUlfRElTQUJMRV9JTlRSX0NNRElEIjsKIAljYXNlIFdNSV9FTkFCTEVfSU5UUl9DTURJRDoKIAkJcmV0dXJuICJXTUlfRU5BQkxFX0lOVFJfQ01ESUQiOwotCWNhc2UgV01JX1JYX0xJTktfQ01ESUQ6Ci0JCXJldHVybiAiV01JX1JYX0xJTktfQ01ESUQiOwogCWNhc2UgV01JX0FUSF9JTklUX0NNRElEOgogCQlyZXR1cm4gIldNSV9BVEhfSU5JVF9DTURJRCI7CiAJY2FzZSBXTUlfQUJPUlRfVFhRX0NNRElEOgogCQlyZXR1cm4gIldNSV9BQk9SVF9UWFFfQ01ESUQiOwogCWNhc2UgV01JX1NUT1BfVFhfRE1BX0NNRElEOgogCQlyZXR1cm4gIldNSV9TVE9QX1RYX0RNQV9DTURJRCI7Ci0JY2FzZSBXTUlfU1RPUF9ETUFfUkVDVl9DTURJRDoKLQkJcmV0dXJuICJXTUlfU1RPUF9ETUFfUkVDVl9DTURJRCI7CiAJY2FzZSBXTUlfQUJPUlRfVFhfRE1BX0NNRElEOgogCQlyZXR1cm4gIldNSV9BQk9SVF9UWF9ETUFfQ01ESUQiOwogCWNhc2UgV01JX0RSQUlOX1RYUV9DTURJRDoKQEAgLTUxLDggKzQ5LDYgQEAKIAkJcmV0dXJuICJXTUlfRkxVU0hfUkVDVl9DTURJRCI7CiAJY2FzZSBXTUlfU0VUX01PREVfQ01ESUQ6CiAJCXJldHVybiAiV01JX1NFVF9NT0RFX0NNRElEIjsKLQljYXNlIFdNSV9SRVNFVF9DTURJRDoKLQkJcmV0dXJuICJXTUlfUkVTRVRfQ01ESUQiOwogCWNhc2UgV01JX05PREVfQ1JFQVRFX0NNRElEOgogCQlyZXR1cm4gIldNSV9OT0RFX0NSRUFURV9DTURJRCI7CiAJY2FzZSBXTUlfTk9ERV9SRU1PVkVfQ01ESUQ6CkBAIC02MSw4ICs1Nyw2IEBACiAJCXJldHVybiAiV01JX1ZBUF9SRU1PVkVfQ01ESUQiOwogCWNhc2UgV01JX1ZBUF9DUkVBVEVfQ01ESUQ6CiAJCXJldHVybiAiV01JX1ZBUF9DUkVBVEVfQ01ESUQiOwotCWNhc2UgV01JX0JFQUNPTl9VUERBVEVfQ01ESUQ6Ci0JCXJldHVybiAiV01JX0JFQUNPTl9VUERBVEVfQ01ESUQiOwogCWNhc2UgV01JX1JFR19SRUFEX0NNRElEOgogCQlyZXR1cm4gIldNSV9SRUdfUkVBRF9DTURJRCI7CiAJY2FzZSBXTUlfUkVHX1dSSVRFX0NNRElEOgpAQCAtNzEsMjIgKzY1LDIyIEBACiAJCXJldHVybiAiV01JX1JDX1NUQVRFX0NIQU5HRV9DTURJRCI7CiAJY2FzZSBXTUlfUkNfUkFURV9VUERBVEVfQ01ESUQ6CiAJCXJldHVybiAiV01JX1JDX1JBVEVfVVBEQVRFX0NNRElEIjsKLQljYXNlIFdNSV9ERUJVR19JTkZPX0NNRElEOgotCQlyZXR1cm4gIldNSV9ERUJVR19JTkZPX0NNRElEIjsKLQljYXNlIFdNSV9IT1NUX0FUVEFDSDoKLQkJcmV0dXJuICJXTUlfSE9TVF9BVFRBQ0giOwogCWNhc2UgV01JX1RBUkdFVF9JQ19VUERBVEVfQ01ESUQ6CiAJCXJldHVybiAiV01JX1RBUkdFVF9JQ19VUERBVEVfQ01ESUQiOwotCWNhc2UgV01JX1RHVF9TVEFUU19DTURJRDoKLQkJcmV0dXJuICJXTUlfVEdUX1NUQVRTX0NNRElEIjsKIAljYXNlIFdNSV9UWF9BR0dSX0VOQUJMRV9DTURJRDoKIAkJcmV0dXJuICJXTUlfVFhfQUdHUl9FTkFCTEVfQ01ESUQiOwogCWNhc2UgV01JX1RHVF9ERVRBQ0hfQ01ESUQ6CiAJCXJldHVybiAiV01JX1RHVF9ERVRBQ0hfQ01ESUQiOwotCWNhc2UgV01JX1RHVF9UWFFfRU5BQkxFX0NNRElEOgotCQlyZXR1cm4gIldNSV9UR1RfVFhRX0VOQUJMRV9DTURJRCI7Ci0JY2FzZSBXTUlfQUdHUl9MSU1JVF9DTUQ6Ci0JCXJldHVybiAiV01JX0FHR1JfTElNSVRfQ01EIjsKKwljYXNlIFdNSV9OT0RFX1VQREFURV9DTURJRDoKKwkJcmV0dXJuICJXTUlfTk9ERV9VUERBVEVfQ01ESUQiOworCWNhc2UgV01JX0lOVF9TVEFUU19DTURJRDoKKwkJcmV0dXJuICJXTUlfSU5UX1NUQVRTX0NNRElEIjsKKwljYXNlIFdNSV9UWF9TVEFUU19DTURJRDoKKwkJcmV0dXJuICJXTUlfVFhfU1RBVFNfQ01ESUQiOworCWNhc2UgV01JX1JYX1NUQVRTX0NNRElEOgorCQlyZXR1cm4gIldNSV9SWF9TVEFUU19DTURJRCI7CisJY2FzZSBXTUlfQklUUkFURV9NQVNLX0NNRElEOgorCQlyZXR1cm4gIldNSV9CSVRSQVRFX01BU0tfQ01ESUQiOwogCX0KIAogCXJldHVybiAiQm9ndXMiOwpAQCAtMTAyLDkgKzk2LDE1IEBACiAKIAl3bWktPmRydl9wcml2ID0gcHJpdjsKIAl3bWktPnN0b3BwZWQgPSBmYWxzZTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZ3bWktPndtaV9ldmVudF9xdWV1ZSk7CisJc3Bpbl9sb2NrX2luaXQoJndtaS0+d21pX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZ3bWktPmV2ZW50X2xvY2spOwogCW11dGV4X2luaXQoJndtaS0+b3BfbXV0ZXgpOwogCW11dGV4X2luaXQoJndtaS0+bXVsdGlfd3JpdGVfbXV0ZXgpOwogCWluaXRfY29tcGxldGlvbigmd21pLT5jbWRfd2FpdCk7CisJSU5JVF9MSVNUX0hFQUQoJndtaS0+cGVuZGluZ190eF9ldmVudHMpOworCXRhc2tsZXRfaW5pdCgmd21pLT53bWlfZXZlbnRfdGFza2xldCwgYXRoOWtfd21pX2V2ZW50X3Rhc2tsZXQsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcpd21pKTsKIAogCXJldHVybiB3bWk7CiB9CkBAIC0xMjAsMTEgKzEyMCw2NSBAQAogCWtmcmVlKHByaXYtPndtaSk7CiB9CiAKLXZvaWQgYXRoOWtfc3diYV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3ZvaWQgYXRoOWtfd21pX2V2ZW50X2RyYWluKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdikKIHsKLQlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSAoc3RydWN0IGF0aDlrX2h0Y19wcml2ICopZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JYXRoOWtfaHRjX3N3YmEocHJpdiwgcHJpdi0+d21pLT5iZWFjb25fcGVuZGluZyk7CisJdGFza2xldF9raWxsKCZwcml2LT53bWktPndtaV9ldmVudF90YXNrbGV0KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+d21pLT53bWlfbG9jaywgZmxhZ3MpOworCV9fc2tiX3F1ZXVlX3B1cmdlKCZwcml2LT53bWktPndtaV9ldmVudF9xdWV1ZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+d21pLT53bWlfbG9jaywgZmxhZ3MpOworfQorCit2b2lkIGF0aDlrX3dtaV9ldmVudF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3Qgd21pICp3bWkgPSAoc3RydWN0IHdtaSAqKWRhdGE7CisJc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2ID0gd21pLT5kcnZfcHJpdjsKKwlzdHJ1Y3Qgd21pX2NtZF9oZHIgKmhkcjsKKwl2b2lkICp3bWlfZXZlbnQ7CisJc3RydWN0IHdtaV9ldmVudF9zd2JhICpzd2JhOworCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTE2IGNtZF9pZDsKKworCWRvIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJndtaS0+d21pX2xvY2ssIGZsYWdzKTsKKwkJc2tiID0gX19za2JfZGVxdWV1ZSgmd21pLT53bWlfZXZlbnRfcXVldWUpOworCQlpZiAoIXNrYikgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd21pLT53bWlfbG9jaywgZmxhZ3MpOworCQkJcmV0dXJuOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndtaS0+d21pX2xvY2ssIGZsYWdzKTsKKworCQloZHIgPSAoc3RydWN0IHdtaV9jbWRfaGRyICopIHNrYi0+ZGF0YTsKKwkJY21kX2lkID0gYmUxNl90b19jcHUoaGRyLT5jb21tYW5kX2lkKTsKKwkJd21pX2V2ZW50ID0gc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHdtaV9jbWRfaGRyKSk7CisKKwkJc3dpdGNoIChjbWRfaWQpIHsKKwkJY2FzZSBXTUlfU1dCQV9FVkVOVElEOgorCQkJc3diYSA9IChzdHJ1Y3Qgd21pX2V2ZW50X3N3YmEgKikgd21pX2V2ZW50OworCQkJYXRoOWtfaHRjX3N3YmEocHJpdiwgc3diYSk7CisJCQlicmVhazsKKwkJY2FzZSBXTUlfRkFUQUxfRVZFTlRJRDoKKwkJCWllZWU4MDIxMV9xdWV1ZV93b3JrKHdtaS0+ZHJ2X3ByaXYtPmh3LAorCQkJCQkgICAgICZ3bWktPmRydl9wcml2LT5mYXRhbF93b3JrKTsKKwkJCWJyZWFrOworCQljYXNlIFdNSV9UWFNUQVRVU19FVkVOVElEOgorCQkJc3Bpbl9sb2NrX2JoKCZwcml2LT50eC50eF9sb2NrKTsKKwkJCWlmIChwcml2LT50eC5mbGFncyAmIEFUSDlLX0hUQ19PUF9UWF9EUkFJTikgeworCQkJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eC50eF9sb2NrKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eC50eF9sb2NrKTsKKworCQkJYXRoOWtfaHRjX3R4c3RhdHVzKHByaXYsIHdtaV9ldmVudCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJa2ZyZWVfc2tiKHNrYik7CisJfSB3aGlsZSAoMSk7CiB9CiAKIHZvaWQgYXRoOWtfZmF0YWxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC0xNTMsMTAgKzIwNyw2IEBACiAJc3RydWN0IHdtaSAqd21pID0gKHN0cnVjdCB3bWkgKikgcHJpdjsKIAlzdHJ1Y3Qgd21pX2NtZF9oZHIgKmhkcjsKIAl1MTYgY21kX2lkOwotCXZvaWQgKndtaV9ldmVudDsKLSNpZmRlZiBDT05GSUdfQVRIOUtfSFRDX0RFQlVHRlMKLQlfX2JlMzIgdHhyYXRlOwotI2VuZGlmCiAKIAlpZiAodW5saWtlbHkod21pLT5zdG9wcGVkKSkKIAkJZ290byBmcmVlX3NrYjsKQEAgLTE2NSwyNiArMjE1LDEwIEBACiAJY21kX2lkID0gYmUxNl90b19jcHUoaGRyLT5jb21tYW5kX2lkKTsKIAogCWlmIChjbWRfaWQgJiAweDEwMDApIHsKLQkJd21pX2V2ZW50ID0gc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHdtaV9jbWRfaGRyKSk7Ci0JCXN3aXRjaCAoY21kX2lkKSB7Ci0JCWNhc2UgV01JX1NXQkFfRVZFTlRJRDoKLQkJCXdtaS0+YmVhY29uX3BlbmRpbmcgPSAqKHU4ICopd21pX2V2ZW50OwotCQkJdGFza2xldF9zY2hlZHVsZSgmd21pLT5kcnZfcHJpdi0+c3diYV90YXNrbGV0KTsKLQkJCWJyZWFrOwotCQljYXNlIFdNSV9GQVRBTF9FVkVOVElEOgotCQkJaWVlZTgwMjExX3F1ZXVlX3dvcmsod21pLT5kcnZfcHJpdi0+aHcsCi0JCQkJCSAgICAgJndtaS0+ZHJ2X3ByaXYtPmZhdGFsX3dvcmspOwotCQkJYnJlYWs7Ci0JCWNhc2UgV01JX1RYUkFURV9FVkVOVElEOgotI2lmZGVmIENPTkZJR19BVEg5S19IVENfREVCVUdGUwotCQkJdHhyYXRlID0gKChzdHJ1Y3Qgd21pX2V2ZW50X3R4cmF0ZSAqKXdtaV9ldmVudCktPnR4cmF0ZTsKLQkJCXdtaS0+ZHJ2X3ByaXYtPmRlYnVnLnR4cmF0ZSA9IGJlMzJfdG9fY3B1KHR4cmF0ZSk7Ci0jZW5kaWYKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQkJa2ZyZWVfc2tiKHNrYik7CisJCXNwaW5fbG9jaygmd21pLT53bWlfbG9jayk7CisJCV9fc2tiX3F1ZXVlX3RhaWwoJndtaS0+d21pX2V2ZW50X3F1ZXVlLCBza2IpOworCQlzcGluX3VubG9jaygmd21pLT53bWlfbG9jayk7CisJCXRhc2tsZXRfc2NoZWR1bGUoJndtaS0+d21pX2V2ZW50X3Rhc2tsZXQpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yNDMsNyArMjc3LDcgQEAKIAloZHItPmNvbW1hbmRfaWQgPSBjcHVfdG9fYmUxNihjbWQpOwogCWhkci0+c2VxX25vID0gY3B1X3RvX2JlMTYoKyt3bWktPnR4X3NlcV9pZCk7CiAKLQlyZXR1cm4gaHRjX3NlbmQod21pLT5odGMsIHNrYiwgd21pLT5jdHJsX2VwaWQsIE5VTEwpOworCXJldHVybiBodGNfc2VuZF9lcGlkKHdtaS0+aHRjLCBza2IsIHdtaS0+Y3RybF9lcGlkKTsKIH0KIAogaW50IGF0aDlrX3dtaV9jbWQoc3RydWN0IHdtaSAqd21pLCBlbnVtIHdtaV9jbWRfaWQgY21kX2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5oCmluZGV4IDQyMDg0MjcuLjYwOTVlZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay93bWkuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmgKQEAgLTE3LDcgKzE3LDYgQEAKICNpZm5kZWYgV01JX0gKICNkZWZpbmUgV01JX0gKIAotCiBzdHJ1Y3Qgd21pX2V2ZW50X3R4cmF0ZSB7CiAJX19iZTMyIHR4cmF0ZTsKIAlzdHJ1Y3QgewpAQCAtMzEsMTggKzMwLDY1IEBACiAJX19iZTE2IHNlcV9ubzsKIH0gX19wYWNrZWQ7CiAKK3N0cnVjdCB3bWlfZndfdmVyc2lvbiB7CisJX19iZTE2IG1ham9yOworCV9fYmUxNiBtaW5vcjsKKworfSBfX3BhY2tlZDsKKworc3RydWN0IHdtaV9ldmVudF9zd2JhIHsKKwlfX2JlNjQgdHNmOworCXU4IGJlYWNvbl9wZW5kaW5nOworfTsKKworLyoKKyAqIDY0IC0gSFRDIGhlYWRlciAtIFdNSSBoZWFkZXIgLSAxIC8gdHhzdGF0dXMKKyAqIEFuZCBzb21lIG90aGVyIGhkci4gc3BhY2UgaXMgYWxzbyBhY2NvdW50ZWQgZm9yLgorICogMTIgc2VlbXMgdG8gYmUgdGhlIG1hZ2ljIG51bWJlci4KKyAqLworI2RlZmluZSBIVENfTUFYX1RYX1NUQVRVUyAxMgorCisjZGVmaW5lIEFUSDlLX0hUQ19UWFNUQVRfQUNLICAgICAgICBCSVQoMCkKKyNkZWZpbmUgQVRIOUtfSFRDX1RYU1RBVF9GSUxUICAgICAgIEJJVCgxKQorI2RlZmluZSBBVEg5S19IVENfVFhTVEFUX1JUQ19DVFMgICAgQklUKDIpCisjZGVmaW5lIEFUSDlLX0hUQ19UWFNUQVRfTUNTICAgICAgICBCSVQoMykKKyNkZWZpbmUgQVRIOUtfSFRDX1RYU1RBVF9DVzQwICAgICAgIEJJVCg0KQorI2RlZmluZSBBVEg5S19IVENfVFhTVEFUX1NHSSAgICAgICAgQklUKDUpCisKKy8qCisgKiBMZWdhY3kgcmF0ZXMgYXJlIGluZGljYXRlZCBhcyBpbmRpY2VzLgorICogSFQgcmF0ZXMgYXJlIGluZGljYXRlZCBhcyBkb3QxMSBudW1iZXJzLgorICogVGhpcyBhbGxvd3MgdXMgdG8gcmVzcmljdCB0aGUgcmF0ZSBmaWVsZAorICogdG8gNCBiaXRzLgorICovCisjZGVmaW5lIEFUSDlLX0hUQ19UWFNUQVRfUkFURSAgICAgICAweDBmCisjZGVmaW5lIEFUSDlLX0hUQ19UWFNUQVRfUkFURV9TICAgICAwCisKKyNkZWZpbmUgQVRIOUtfSFRDX1RYU1RBVF9FUElEICAgICAgIDB4ZjAKKyNkZWZpbmUgQVRIOUtfSFRDX1RYU1RBVF9FUElEX1MgICAgIDQKKworc3RydWN0IF9fd21pX2V2ZW50X3R4c3RhdHVzIHsKKwl1OCBjb29raWU7CisJdTggdHNfcmF0ZTsgLyogQWxzbyBob2xkcyBFUCBJRCAqLworCXU4IHRzX2ZsYWdzOworfTsKKworc3RydWN0IHdtaV9ldmVudF90eHN0YXR1cyB7CisJdTggY250OworCXN0cnVjdCBfX3dtaV9ldmVudF90eHN0YXR1cyB0eHN0YXR1c1tIVENfTUFYX1RYX1NUQVRVU107Cit9IF9fcGFja2VkOworCiBlbnVtIHdtaV9jbWRfaWQgewogCVdNSV9FQ0hPX0NNRElEID0gMHgwMDAxLAogCVdNSV9BQ0NFU1NfTUVNT1JZX0NNRElELAogCiAJLyogQ29tbWFuZHMgdG8gVGFyZ2V0ICovCisJV01JX0dFVF9GV19WRVJTSU9OLAogCVdNSV9ESVNBQkxFX0lOVFJfQ01ESUQsCiAJV01JX0VOQUJMRV9JTlRSX0NNRElELAotCVdNSV9SWF9MSU5LX0NNRElELAogCVdNSV9BVEhfSU5JVF9DTURJRCwKIAlXTUlfQUJPUlRfVFhRX0NNRElELAogCVdNSV9TVE9QX1RYX0RNQV9DTURJRCwKLQlXTUlfU1RPUF9ETUFfUkVDVl9DTURJRCwKIAlXTUlfQUJPUlRfVFhfRE1BX0NNRElELAogCVdNSV9EUkFJTl9UWFFfQ01ESUQsCiAJV01JX0RSQUlOX1RYUV9BTExfQ01ESUQsCkBAIC01MCwyNCArOTYsMjIgQEAKIAlXTUlfU1RPUF9SRUNWX0NNRElELAogCVdNSV9GTFVTSF9SRUNWX0NNRElELAogCVdNSV9TRVRfTU9ERV9DTURJRCwKLQlXTUlfUkVTRVRfQ01ESUQsCiAJV01JX05PREVfQ1JFQVRFX0NNRElELAogCVdNSV9OT0RFX1JFTU9WRV9DTURJRCwKIAlXTUlfVkFQX1JFTU9WRV9DTURJRCwKIAlXTUlfVkFQX0NSRUFURV9DTURJRCwKLQlXTUlfQkVBQ09OX1VQREFURV9DTURJRCwKIAlXTUlfUkVHX1JFQURfQ01ESUQsCiAJV01JX1JFR19XUklURV9DTURJRCwKIAlXTUlfUkNfU1RBVEVfQ0hBTkdFX0NNRElELAogCVdNSV9SQ19SQVRFX1VQREFURV9DTURJRCwKLQlXTUlfREVCVUdfSU5GT19DTURJRCwKLQlXTUlfSE9TVF9BVFRBQ0gsCiAJV01JX1RBUkdFVF9JQ19VUERBVEVfQ01ESUQsCi0JV01JX1RHVF9TVEFUU19DTURJRCwKIAlXTUlfVFhfQUdHUl9FTkFCTEVfQ01ESUQsCiAJV01JX1RHVF9ERVRBQ0hfQ01ESUQsCi0JV01JX1RHVF9UWFFfRU5BQkxFX0NNRElELAotCVdNSV9BR0dSX0xJTUlUX0NNRCA9IDB4MDAyNiwKKwlXTUlfTk9ERV9VUERBVEVfQ01ESUQsCisJV01JX0lOVF9TVEFUU19DTURJRCwKKwlXTUlfVFhfU1RBVFNfQ01ESUQsCisJV01JX1JYX1NUQVRTX0NNRElELAorCVdNSV9CSVRSQVRFX01BU0tfQ01ESUQsCiB9OwogCiBlbnVtIHdtaV9ldmVudF9pZCB7CkBAIC03Niw5ICsxMjAsOCBAQAogCVdNSV9GQVRBTF9FVkVOVElELAogCVdNSV9UWFRPX0VWRU5USUQsCiAJV01JX0JNSVNTX0VWRU5USUQsCi0JV01JX1dMQU5fVFhDT01QX0VWRU5USUQsCiAJV01JX0RFTEJBX0VWRU5USUQsCi0JV01JX1RYUkFURV9FVkVOVElELAorCVdNSV9UWFNUQVRVU19FVkVOVElELAogfTsKIAogI2RlZmluZSBNQVhfQ01EX05VTUJFUiA2MgpAQCAtODgsNiArMTMxLDEyIEBACiAJX19iZTMyIHZhbDsKIH07CiAKK3N0cnVjdCBhdGg5a19odGNfdHhfZXZlbnQgeworCWludCBjb3VudDsKKwlzdHJ1Y3QgX193bWlfZXZlbnRfdHhzdGF0dXMgdHhzOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKIHN0cnVjdCB3bWkgewogCXN0cnVjdCBhdGg5a19odGNfcHJpdiAqZHJ2X3ByaXY7CiAJc3RydWN0IGh0Y190YXJnZXQgKmh0YzsKQEAgLTk1LDEyICsxNDQsMTYgQEAKIAlzdHJ1Y3QgbXV0ZXggb3BfbXV0ZXg7CiAJc3RydWN0IGNvbXBsZXRpb24gY21kX3dhaXQ7CiAJZW51bSB3bWlfY21kX2lkIGxhc3RfY21kX2lkOworCXN0cnVjdCBza19idWZmX2hlYWQgd21pX2V2ZW50X3F1ZXVlOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB3bWlfZXZlbnRfdGFza2xldDsKIAl1MTYgdHhfc2VxX2lkOwogCXU4ICpjbWRfcnNwX2J1ZjsKIAl1MzIgY21kX3JzcF9sZW47CiAJYm9vbCBzdG9wcGVkOwogCi0JdTggYmVhY29uX3BlbmRpbmc7CisJc3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nX3R4X2V2ZW50czsKKwlzcGlubG9ja190IGV2ZW50X2xvY2s7CisKIAlzcGlubG9ja190IHdtaV9sb2NrOwogCiAJYXRvbWljX3QgbXdyaXRlX2NudDsKQEAgLTExNyw4ICsxNzAsOSBAQAogCQkgIHU4ICpjbWRfYnVmLCB1MzIgY21kX2xlbiwKIAkJICB1OCAqcnNwX2J1ZiwgdTMyIHJzcF9sZW4sCiAJCSAgdTMyIHRpbWVvdXQpOwotdm9pZCBhdGg5a19zd2JhX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKK3ZvaWQgYXRoOWtfd21pX2V2ZW50X3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKIHZvaWQgYXRoOWtfZmF0YWxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwordm9pZCBhdGg5a193bWlfZXZlbnRfZHJhaW4oc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KTsKIAogI2RlZmluZSBXTUlfQ01EKF93bWlfY21kKQkJCQkJCVwKIAlkbyB7CQkJCQkJCQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYwppbmRleCA4OGZhN2ZkLi45N2RkMWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMKQEAgLTM1Nyw2ICszNTcsNyBAQAogCXN0cnVjdCBhdGhfZnJhbWVfaW5mbyAqZmk7CiAJaW50IG5mcmFtZXM7CiAJdTggdGlkbm87CisJYm9vbCBjbGVhcl9maWx0ZXI7CiAKIAlza2IgPSBiZi0+YmZfbXBkdTsKIAloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CkBAIC00NDEsMjIgKzQ0MiwyNCBAQAogCQkJLyogdHJhbnNtaXQgY29tcGxldGlvbiAqLwogCQkJYWNrZWRfY250Kys7CiAJCX0gZWxzZSB7Ci0JCQlpZiAoISh0aWQtPnN0YXRlICYgQUdHUl9DTEVBTlVQKSAmJiByZXRyeSkgewotCQkJCWlmIChmaS0+cmV0cmllcyA8IEFUSF9NQVhfU1dfUkVUUklFUykgewotCQkJCQlhdGhfdHhfc2V0X3JldHJ5KHNjLCB0eHEsIGJmLT5iZl9tcGR1KTsKLQkJCQkJdHhwZW5kaW5nID0gMTsKLQkJCQl9IGVsc2UgewotCQkJCQliZi0+YmZfc3RhdGUuYmZfdHlwZSB8PSBCVUZfWFJFVFJZOwotCQkJCQl0eGZhaWwgPSAxOwotCQkJCQlzZW5kYmFyID0gMTsKLQkJCQkJdHhmYWlsX2NudCsrOwotCQkJCX0KLQkJCX0gZWxzZSB7CisJCQlpZiAoKHRpZC0+c3RhdGUgJiBBR0dSX0NMRUFOVVApIHx8ICFyZXRyeSkgewogCQkJCS8qCiAJCQkJICogY2xlYW51cCBpbiBwcm9ncmVzcywganVzdCBmYWlsCiAJCQkJICogdGhlIHVuLWFja2VkIHN1Yi1mcmFtZXMKIAkJCQkgKi8KIAkJCQl0eGZhaWwgPSAxOworCQkJfSBlbHNlIGlmIChmaS0+cmV0cmllcyA8IEFUSF9NQVhfU1dfUkVUUklFUykgeworCQkJCWlmICghKHRzLT50c19zdGF0dXMgJiBBVEg5S19UWEVSUl9GSUxUKSB8fAorCQkJCSAgICAhYW4tPnNsZWVwaW5nKQorCQkJCQlhdGhfdHhfc2V0X3JldHJ5KHNjLCB0eHEsIGJmLT5iZl9tcGR1KTsKKworCQkJCWNsZWFyX2ZpbHRlciA9IHRydWU7CisJCQkJdHhwZW5kaW5nID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX1hSRVRSWTsKKwkJCQl0eGZhaWwgPSAxOworCQkJCXNlbmRiYXIgPSAxOworCQkJCXR4ZmFpbF9jbnQrKzsKIAkJCX0KIAkJfQogCkBAIC00OTYsNiArNDk5LDcgQEAKIAkJCQkhdHhmYWlsLCBzZW5kYmFyKTsKIAkJfSBlbHNlIHsKIAkJCS8qIHJldHJ5IHRoZSB1bi1hY2tlZCBvbmVzICovCisJCQlhdGg5a19od19zZXRfY2xyZG1hc2soc2MtPnNjX2FoLCBiZi0+YmZfZGVzYywgZmFsc2UpOwogCQkJaWYgKCEoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfRURNQSkpIHsKIAkJCQlpZiAoYmYtPmJmX25leHQgPT0gTlVMTCAmJiBiZl9sYXN0LT5iZl9zdGFsZSkgewogCQkJCQlzdHJ1Y3QgYXRoX2J1ZiAqdGJmOwpAQCAtNTQ2LDcgKzU1MCwxMiBAQAogCiAJLyogcHJlcGVuZCB1bi1hY2tlZCBmcmFtZXMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcGVuZGluZyBmcmFtZSBxdWV1ZSAqLwogCWlmICghbGlzdF9lbXB0eSgmYmZfcGVuZGluZykpIHsKKwkJaWYgKGFuLT5zbGVlcGluZykKKwkJCWllZWU4MDIxMV9zdGFfc2V0X3RpbShzdGEpOworCiAJCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisJCWlmIChjbGVhcl9maWx0ZXIpCisJCQl0aWQtPmFjLT5jbGVhcl9wc19maWx0ZXIgPSB0cnVlOwogCQlsaXN0X3NwbGljZSgmYmZfcGVuZGluZywgJnRpZC0+YnVmX3EpOwogCQlhdGhfdHhfcXVldWVfdGlkKHR4cSwgdGlkKTsKIAkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwpAQCAtODE2LDYgKzgyNSwxMSBAQAogCQliZiA9IGxpc3RfZmlyc3RfZW50cnkoJmJmX3EsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKIAkJYmYtPmJmX2xhc3RiZiA9IGxpc3RfZW50cnkoYmZfcS5wcmV2LCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CiAKKwkJaWYgKHRpZC0+YWMtPmNsZWFyX3BzX2ZpbHRlcikgeworCQkJdGlkLT5hYy0+Y2xlYXJfcHNfZmlsdGVyID0gZmFsc2U7CisJCQlhdGg5a19od19zZXRfY2xyZG1hc2soc2MtPnNjX2FoLCBiZi0+YmZfZGVzYywgdHJ1ZSk7CisJCX0KKwogCQkvKiBpZiBvbmx5IG9uZSBmcmFtZSwgc2VuZCBhcyBub24tYWdncmVnYXRlICovCiAJCWlmIChiZiA9PSBiZi0+YmZfbGFzdGJmKSB7CiAJCQlmaSA9IGdldF9mcmFtZV9pbmZvKGJmLT5iZl9tcGR1KTsKQEAgLTg5Niw2ICs5MTAsNjcgQEAKIAlhdGhfdHhfZmx1c2hfdGlkKHNjLCB0eHRpZCk7CiB9CiAKK2Jvb2wgYXRoX3R4X2FnZ3Jfc2xlZXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4pCit7CisJc3RydWN0IGF0aF9hdHhfdGlkICp0aWQ7CisJc3RydWN0IGF0aF9hdHhfYWMgKmFjOworCXN0cnVjdCBhdGhfdHhxICp0eHE7CisJYm9vbCBidWZmZXJlZCA9IGZhbHNlOworCWludCB0aWRubzsKKworCWZvciAodGlkbm8gPSAwLCB0aWQgPSAmYW4tPnRpZFt0aWRub107CisJICAgICB0aWRubyA8IFdNRV9OVU1fVElEOyB0aWRubysrLCB0aWQrKykgeworCisJCWlmICghdGlkLT5zY2hlZCkKKwkJCWNvbnRpbnVlOworCisJCWFjID0gdGlkLT5hYzsKKwkJdHhxID0gYWMtPnR4cTsKKworCQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCisJCWlmICghbGlzdF9lbXB0eSgmdGlkLT5idWZfcSkpCisJCQlidWZmZXJlZCA9IHRydWU7CisKKwkJdGlkLT5zY2hlZCA9IGZhbHNlOworCQlsaXN0X2RlbCgmdGlkLT5saXN0KTsKKworCQlpZiAoYWMtPnNjaGVkKSB7CisJCQlhYy0+c2NoZWQgPSBmYWxzZTsKKwkJCWxpc3RfZGVsKCZhYy0+bGlzdCk7CisJCX0KKworCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisJfQorCisJcmV0dXJuIGJ1ZmZlcmVkOworfQorCit2b2lkIGF0aF90eF9hZ2dyX3dha2V1cChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9ub2RlICphbikKK3sKKwlzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZDsKKwlzdHJ1Y3QgYXRoX2F0eF9hYyAqYWM7CisJc3RydWN0IGF0aF90eHEgKnR4cTsKKwlpbnQgdGlkbm87CisKKwlmb3IgKHRpZG5vID0gMCwgdGlkID0gJmFuLT50aWRbdGlkbm9dOworCSAgICAgdGlkbm8gPCBXTUVfTlVNX1RJRDsgdGlkbm8rKywgdGlkKyspIHsKKworCQlhYyA9IHRpZC0+YWM7CisJCXR4cSA9IGFjLT50eHE7CisKKwkJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKwkJYWMtPmNsZWFyX3BzX2ZpbHRlciA9IHRydWU7CisKKwkJaWYgKCFsaXN0X2VtcHR5KCZ0aWQtPmJ1Zl9xKSAmJiAhdGlkLT5wYXVzZWQpIHsKKwkJCWF0aF90eF9xdWV1ZV90aWQodHhxLCB0aWQpOworCQkJYXRoX3R4cV9zY2hlZHVsZShzYywgdHhxKTsKKwkJfQorCisJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKwl9Cit9CisKIHZvaWQgYXRoX3R4X2FnZ3JfcmVzdW1lKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKQogewogCXN0cnVjdCBhdGhfYXR4X3RpZCAqdHh0aWQ7CkBAIC0xNDUxLDcgKzE1MjYsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmh3X2tleSA9IHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5OwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJc3RydWN0IGF0aF9mcmFtZV9pbmZvICpmaSA9IGdldF9mcmFtZV9pbmZvKHNrYik7Ci0Jc3RydWN0IGF0aF9ub2RlICphbjsKKwlzdHJ1Y3QgYXRoX25vZGUgKmFuID0gTlVMTDsKIAlzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZDsKIAllbnVtIGF0aDlrX2tleV90eXBlIGtleXR5cGU7CiAJdTE2IHNlcW5vID0gMDsKQEAgLTE0NTksMTEgKzE1MzQsMTMgQEAKIAogCWtleXR5cGUgPSBhdGg5a19jbW5fZ2V0X2h3X2NyeXB0b19rZXl0eXBlKHNrYik7CiAKKwlpZiAoc3RhKQorCQlhbiA9IChzdHJ1Y3QgYXRoX25vZGUgKikgc3RhLT5kcnZfcHJpdjsKKwogCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKLQlpZiAoc3RhICYmIGllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItPmZyYW1lX2NvbnRyb2wpICYmCisJaWYgKGFuICYmIGllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItPmZyYW1lX2NvbnRyb2wpICYmCiAJCWNvbmZfaXNfaHQoJmh3LT5jb25mKSAmJiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfVFhBR0dSKSkgewogCi0JCWFuID0gKHN0cnVjdCBhdGhfbm9kZSAqKSBzdGEtPmRydl9wcml2OwogCQl0aWRubyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpWzBdICYgSUVFRTgwMjExX1FPU19DVExfVElEX01BU0s7CiAKIAkJLyoKQEAgLTE0NzksNiArMTU1Niw4IEBACiAJbWVtc2V0KGZpLCAwLCBzaXplb2YoKmZpKSk7CiAJaWYgKGh3X2tleSkKIAkJZmktPmtleWl4ID0gaHdfa2V5LT5od19rZXlfaWR4OworCWVsc2UgaWYgKGFuICYmIGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkgJiYgYW4tPnBzX2tleSA+IDApCisJCWZpLT5rZXlpeCA9IGFuLT5wc19rZXk7CiAJZWxzZQogCQlmaS0+a2V5aXggPSBBVEg5S19UWEtFWUlYX0lOVkFMSUQ7CiAJZmktPmtleXR5cGUgPSBrZXl0eXBlOwpAQCAtMTQ5MSw3ICsxNTcwLDYgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJaW50IGZsYWdzID0gMDsKIAotCWZsYWdzIHw9IEFUSDlLX1RYREVTQ19DTFJETUFTSzsgLyogbmVlZGVkIGZvciBjcnlwdG8gZXJyb3JzICovCiAJZmxhZ3MgfD0gQVRIOUtfVFhERVNDX0lOVFJFUTsKIAogCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKQpAQCAtMTU4NSw4ICsxNjYzLDcgQEAKIAkJcml4ID0gcmF0ZXNbaV0uaWR4OwogCQlzZXJpZXNbaV0uVHJpZXMgPSByYXRlc1tpXS5jb3VudDsKIAotCQlpZiAoKHNjLT5jb25maWcuYXRoX2FnZ3JfcHJvdCAmJiBiZl9pc2FnZ3IoYmYpKSB8fAotCQkgICAgKHJhdGVzW2ldLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTKSkgeworCQkgICAgaWYgKHJhdGVzW2ldLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTKSB7CiAJCQlzZXJpZXNbaV0uUmF0ZUZsYWdzIHw9IEFUSDlLX1JBVEVTRVJJRVNfUlRTX0NUUzsKIAkJCWZsYWdzIHw9IEFUSDlLX1RYREVTQ19SVFNFTkE7CiAJCX0gZWxzZSBpZiAocmF0ZXNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUKSB7CkBAIC0xNjU1LDggKzE3MzIsNiBAQAogCQkJCSAgICAgIWlzX3BzcG9sbCwgY3RzcmF0ZSwKIAkJCQkgICAgIDAsIHNlcmllcywgNCwgZmxhZ3MpOwogCi0JaWYgKHNjLT5jb25maWcuYXRoX2FnZ3JfcHJvdCAmJiBmbGFncykKLQkJYXRoOWtfaHdfc2V0MTFuX2J1cnN0ZHVyYXRpb24oc2MtPnNjX2FoLCBiZi0+YmZfZGVzYywgODE5Mik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYXRoX2J1ZiAqYXRoX3R4X3NldHVwX2J1ZmZlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKQEAgLTE3NTQsNiArMTgyOSw5IEBACiAJCWlmICh0eGN0bC0+cGFwcmQpCiAJCQliZi0+YmZfc3RhdGUuYmZzX3BhcHJkX3RpbWVzdGFtcCA9IGppZmZpZXM7CiAKKwkJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9DTEVBUl9QU19GSUxUKQorCQkJYXRoOWtfaHdfc2V0X2NscmRtYXNrKHNjLT5zY19haCwgYmYtPmJmX2Rlc2MsIHRydWUpOworCiAJCWF0aF90eF9zZW5kX25vcm1hbChzYywgdHhjdGwtPnR4cSwgdGlkLCAmYmZfaGVhZCk7CiAJfQogCkBAIC0xNzY3LDYgKzE4NDUsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhID0gaW5mby0+Y29udHJvbC5zdGE7CisJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiA9IGluZm8tPmNvbnRyb2wudmlmOwogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7CiAJc3RydWN0IGF0aF90eHEgKnR4cSA9IHR4Y3RsLT50eHE7CiAJc3RydWN0IGF0aF9idWYgKmJmOwpAQCAtMTgwNCw2ICsxODgzLDExIEBACiAJCW1lbW1vdmUoc2tiLT5kYXRhLCBza2ItPmRhdGEgKyBwYWRzaXplLCBwYWRwb3MpOwogCX0KIAorCWlmICgodmlmICYmIHZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCAmJgorCSAgICAgICAgICAgIHZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKSB8fAorCSAgICAhaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9DTEVBUl9QU19GSUxUOworCiAJc2V0dXBfZnJhbWVfaW5mbyhodywgc2tiLCBmcm1sZW4pOwogCiAJLyoKQEAgLTE5ODAsNyArMjA2NCw3IEBACiAJCWlmIChpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpICYmCiAJCSAgICAodHMtPnRzX2ZsYWdzICYgKEFUSDlLX1RYX0RBVEFfVU5ERVJSVU4gfAogCQkgICAgICAgICAgICAgICAgICAgICBBVEg5S19UWF9ERUxJTV9VTkRFUlJVTikpICYmCi0JCSAgICBhaC0+dHhfdHJpZ19sZXZlbCA+PSBzYy0+c2NfYWgtPmNhcHMudHhfdHJpZ2xldmVsX21heCkKKwkJICAgIGFoLT50eF90cmlnX2xldmVsID49IHNjLT5zY19haC0+Y29uZmlnLm1heF90eHRyaWdfbGV2ZWwpCiAJCQl0eF9pbmZvLT5zdGF0dXMucmF0ZXNbdHhfcmF0ZWluZGV4XS5jb3VudCA9CiAJCQkJaHctPm1heF9yYXRlX3RyaWVzOwogCX0KQEAgLTIwOTksMjggKzIxODMsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYXRoX2h3X3BsbF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXRoX3NvZnRjLAotCQkJCQkgICAgaHdfcGxsX3dvcmsud29yayk7Ci0Jc3RhdGljIGludCBjb3VudDsKLQotCWlmIChBUl9TUkVWXzk0ODUoc2MtPnNjX2FoKSkgewotCQlpZiAoYXI5MDAzX2dldF9wbGxfc3FzdW1fZHZjKHNjLT5zY19haCkgPj0gMHg0MDAwMCkgewotCQkJY291bnQrKzsKLQotCQkJaWYgKGNvdW50ID09IDMpIHsKLQkJCQkvKiBSeCBpcyBodW5nIGZvciBtb3JlIHRoYW4gNTAwbXMuIFJlc2V0IGl0ICovCi0JCQkJYXRoX3Jlc2V0KHNjLCB0cnVlKTsKLQkJCQljb3VudCA9IDA7Ci0JCQl9Ci0JCX0gZWxzZQotCQkJY291bnQgPSAwOwotCi0JCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LCAmc2MtPmh3X3BsbF93b3JrLCBIWi81KTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIGF0aF90eF9jb21wbGV0ZV9wb2xsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdGhfc29mdGMsCkBAIC0yMTQ0LDMzICsyMjA2LDYgQEAKIAkJCQl9IGVsc2UgewogCQkJCQl0eHEtPmF4cV90eF9pbnByb2dyZXNzID0gdHJ1ZTsKIAkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCS8qIElmIHRoZSBxdWV1ZSBoYXMgcGVuZGluZyBidWZmZXJzLCB0aGVuIGl0Ci0JCQkJICogc2hvdWxkIGJlIGRvaW5nIHR4IHdvcmsgKGFuZCBoYXZlIGF4cV9kZXB0aCkuCi0JCQkJICogU2hvdWxkbid0IGdldCB0byB0aGlzIHN0YXRlIEkgdGhpbmsuLmJ1dAotCQkJCSAqIHdlIGRvLgotCQkJCSAqLwotCQkJCWlmICghKHNjLT5zY19mbGFncyAmIChTQ19PUF9PRkZDSEFOTkVMKSkgJiYKLQkJCQkgICAgKHR4cS0+cGVuZGluZ19mcmFtZXMgPiAwIHx8Ci0JCQkJICAgICAhbGlzdF9lbXB0eSgmdHhxLT5heHFfYWNxKSB8fAotCQkJCSAgICAgdHhxLT5zdG9wcGVkKSkgewotCQkJCQlhdGhfZXJyKGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpLAotCQkJCQkJInR4cTogJXAgYXhxX3FudW06ICV1LCIKLQkJCQkJCSIgbWFjODAyMTFfcW51bTogJWkiCi0JCQkJCQkiIGF4cV9saW5rOiAlcCIKLQkJCQkJCSIgcGVuZGluZyBmcmFtZXM6ICVpIgotCQkJCQkJIiBheHFfYWNxIGVtcHR5OiAlaSIKLQkJCQkJCSIgc3RvcHBlZDogJWkiCi0JCQkJCQkiIGF4cV9kZXB0aDogMCAgQXR0ZW1wdGluZyB0byIKLQkJCQkJCSIgcmVzdGFydCB0eCBsb2dpYy5cbiIsCi0JCQkJCQl0eHEsIHR4cS0+YXhxX3FudW0sCi0JCQkJCQl0eHEtPm1hYzgwMjExX3FudW0sCi0JCQkJCQl0eHEtPmF4cV9saW5rLAotCQkJCQkJdHhxLT5wZW5kaW5nX2ZyYW1lcywKLQkJCQkJCWxpc3RfZW1wdHkoJnR4cS0+YXhxX2FjcSksCi0JCQkJCQl0eHEtPnN0b3BwZWQpOwotCQkJCQlhdGhfdHhxX3NjaGVkdWxlKHNjLCB0eHEpOwotCQkJCX0KIAkJCX0KIAkJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKIAkJfQpAQCAtMjM0Miw3ICsyMzc3LDYgQEAKIAl9CiAKIAlJTklUX0RFTEFZRURfV09SSygmc2MtPnR4X2NvbXBsZXRlX3dvcmssIGF0aF90eF9jb21wbGV0ZV9wb2xsX3dvcmspOwotCUlOSVRfREVMQVlFRF9XT1JLKCZzYy0+aHdfcGxsX3dvcmssIGF0aF9od19wbGxfd29yayk7CiAKIAlpZiAoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfRURNQSkgewogCQllcnJvciA9IGF0aF90eF9lZG1hX2luaXQoc2MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL2Nhcmw5MTcwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvY2FybDkxNzAuaAppbmRleCAzZDRlZDU4Li5iYjU3ODY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvY2FybDkxNzAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvY2FybDkxNzAuaApAQCAtNDQ4LDYgKzQ0OCw4IEBACiAKIHN0cnVjdCBjYXJsOTE3MF9zdGFfaW5mbyB7CiAJYm9vbCBodF9zdGE7CisJYm9vbCBzbGVlcGluZzsKKwlhdG9taWNfdCBwZW5kaW5nX2ZyYW1lczsKIAl1bnNpZ25lZCBpbnQgYW1wZHVfbWF4X2xlbjsKIAlzdHJ1Y3QgY2FybDkxNzBfc3RhX3RpZCAqYWdnW0NBUkw5MTcwX05VTV9USURdOwogCXN0cnVjdCBjYXJsOTE3MF9iYV9zdGF0cyBzdGF0c1tDQVJMOTE3MF9OVU1fVElEXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvbWFpbi5jCmluZGV4IDg5ZmU2MGEuLjdkNWM2NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL21haW4uYwpAQCAtODgzLDcgKzg4Myw3IEBACiAJICogdGhlbiBjaGVja2luZyB0aGUgZXJyb3IgZmxhZ3MsIGxhdGVyLgogCSAqLwogCi0JaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfQUxMTVVMVEkgJiYgKm5ld19mbGFncyAmIEZJRl9BTExNVUxUSSkKKwlpZiAoKm5ld19mbGFncyAmIEZJRl9BTExNVUxUSSkKIAkJbXVsdGljYXN0ID0gfjBVTEw7CiAKIAlpZiAobXVsdGljYXN0ICE9IGFyLT5jdXJfbWNfaGFzaCkKQEAgLTExOTMsNiArMTE5Myw4IEBACiAJc3RydWN0IGNhcmw5MTcwX3N0YV9pbmZvICpzdGFfaW5mbyA9ICh2b2lkICopIHN0YS0+ZHJ2X3ByaXY7CiAJdW5zaWduZWQgaW50IGk7CiAKKwlhdG9taWNfc2V0KCZzdGFfaW5mby0+cGVuZGluZ19mcmFtZXMsIDApOworCiAJaWYgKHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkgewogCQlpZiAoc3RhLT5odF9jYXAuYW1wZHVfZGVuc2l0eSA+IDYpIHsKIAkJCS8qCkBAIC0xNDY3LDk5ICsxNDY5LDE3IEBACiAJCQkJICAgZW51bSBzdGFfbm90aWZ5X2NtZCBjbWQsCiAJCQkJICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKIHsKLQlzdHJ1Y3QgYXI5MTcwICphciA9IGh3LT5wcml2OwogCXN0cnVjdCBjYXJsOTE3MF9zdGFfaW5mbyAqc3RhX2luZm8gPSAodm9pZCAqKSBzdGEtPmRydl9wcml2OwotCXN0cnVjdCBza19idWZmICpza2IsICp0bXA7Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZCBmcmVlOwotCWludCBpOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNUQV9OT1RJRllfU0xFRVA6Ci0JCS8qCi0JCSAqIFNpbmNlIHRoZSBwZWVyIGlzIG5vIGxvbmdlciBsaXN0ZW5pbmcsIHdlIGhhdmUgdG8gcmV0dXJuCi0JCSAqIGFzIG1hbnkgU0tCcyBhcyBwb3NzaWJsZSBiYWNrIHRvIHRoZSBtYWM4MDIxMSBzdGFjay4KLQkJICogSXQgd2lsbCBkZWFsIHdpdGggdGhlIHJldHJ5IHByb2NlZHVyZSwgb25jZSB0aGUgcGVlcgotCQkgKiBoYXMgYmVjb21lIGF2YWlsYWJsZSBhZ2Fpbi4KLQkJICoKLQkJICogTkI6IElkZWFsbHksIHRoZSBkcml2ZXIgc2hvdWxkIHJldHVybiB0aGUgYWxsIGZyYW1lcyBpbgotCQkgKiB0aGUgY29ycmVjdCwgYXNjZW5kaW5nIG9yZGVyLiBIb3dldmVyLCBJIHRoaW5rIHRoYXQgdGhpcwotCQkgKiBmdW5jdGlvbmFsaXR5IHNob3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgc3RhY2sgYW5kIG5vdAotCQkgKiBoZXJlLi4uCi0JCSAqLwotCi0JCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmZnJlZSk7Ci0KLQkJaWYgKHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkgewotCQkJcmN1X3JlYWRfbG9jaygpOwotCQkJZm9yIChpID0gMDsgaSA8IENBUkw5MTcwX05VTV9USUQ7IGkrKykgewotCQkJCXN0cnVjdCBjYXJsOTE3MF9zdGFfdGlkICp0aWRfaW5mbzsKLQotCQkJCXRpZF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlKHN0YV9pbmZvLT5hZ2dbaV0pOwotCi0JCQkJaWYgKCF0aWRfaW5mbykKLQkJCQkJY29udGludWU7Ci0KLQkJCQlzcGluX2xvY2tfYmgoJmFyLT50eF9hbXBkdV9saXN0X2xvY2spOwotCQkJCWlmICh0aWRfaW5mby0+c3RhdGUgPgotCQkJCSAgICBDQVJMOTE3MF9USURfU1RBVEVfU1VTUEVORCkKLQkJCQkJdGlkX2luZm8tPnN0YXRlID0KLQkJCQkJCUNBUkw5MTcwX1RJRF9TVEFURV9TVVNQRU5EOwotCQkJCXNwaW5fdW5sb2NrX2JoKCZhci0+dHhfYW1wZHVfbGlzdF9sb2NrKTsKLQotCQkJCXNwaW5fbG9ja19iaCgmdGlkX2luZm8tPmxvY2spOwotCQkJCXdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZSgmdGlkX2luZm8tPnF1ZXVlKSkpCi0JCQkJCV9fc2tiX3F1ZXVlX3RhaWwoJmZyZWUsIHNrYik7Ci0JCQkJc3Bpbl91bmxvY2tfYmgoJnRpZF9pbmZvLT5sb2NrKTsKLQkJCX0KLQkJCXJjdV9yZWFkX3VubG9jaygpOwotCQl9Ci0KLQkJZm9yIChpID0gMDsgaSA8IGFyLT5ody0+cXVldWVzOyBpKyspIHsKLQkJCXNwaW5fbG9ja19iaCgmYXItPnR4X3BlbmRpbmdbaV0ubG9jayk7Ci0JCQlza2JfcXVldWVfd2Fsa19zYWZlKCZhci0+dHhfcGVuZGluZ1tpXSwgc2tiLCB0bXApIHsKLQkJCQlzdHJ1Y3QgX2Nhcmw5MTcwX3R4X3N1cGVyZnJhbWUgKnN1cGVyOwotCQkJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7Ci0JCQkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwotCi0JCQkJc3VwZXIgPSAodm9pZCAqKSBza2ItPmRhdGE7Ci0JCQkJaGRyID0gKHZvaWQgKikgc3VwZXItPmZyYW1lX2RhdGE7Ci0KLQkJCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGhkci0+YWRkcjEsIHN0YS0+YWRkcikpCi0JCQkJCWNvbnRpbnVlOwotCi0JCQkJX19za2JfdW5saW5rKHNrYiwgJmFyLT50eF9wZW5kaW5nW2ldKTsKLQotCQkJCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0JCQkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkKLQkJCQkJYXRvbWljX2RlYygmYXItPnR4X2FtcGR1X3VwbG9hZCk7Ci0KLQkJCQljYXJsOTE3MF90eF9zdGF0dXMoYXIsIHNrYiwgZmFsc2UpOwotCQkJfQotCQkJc3Bpbl91bmxvY2tfYmgoJmFyLT50eF9wZW5kaW5nW2ldLmxvY2spOwotCQl9Ci0KLQkJd2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKCZmcmVlKSkpCi0JCQljYXJsOTE3MF90eF9zdGF0dXMoYXIsIHNrYiwgZmFsc2UpOwotCisJCXN0YV9pbmZvLT5zbGVlcGluZyA9IHRydWU7CisJCWlmIChhdG9taWNfcmVhZCgmc3RhX2luZm8tPnBlbmRpbmdfZnJhbWVzKSkKKwkJCWllZWU4MDIxMV9zdGFfYmxvY2tfYXdha2UoaHcsIHN0YSwgdHJ1ZSk7CiAJCWJyZWFrOwogCiAJY2FzZSBTVEFfTk9USUZZX0FXQUtFOgotCQlpZiAoIXN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkKLQkJCXJldHVybjsKLQotCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCWZvciAoaSA9IDA7IGkgPCBDQVJMOTE3MF9OVU1fVElEOyBpKyspIHsKLQkJCXN0cnVjdCBjYXJsOTE3MF9zdGFfdGlkICp0aWRfaW5mbzsKLQotCQkJdGlkX2luZm8gPSByY3VfZGVyZWZlcmVuY2Uoc3RhX2luZm8tPmFnZ1tpXSk7Ci0KLQkJCWlmICghdGlkX2luZm8pCi0JCQkJY29udGludWU7Ci0KLQkJCWlmICgodGlkX2luZm8tPnN0YXRlID09IENBUkw5MTcwX1RJRF9TVEFURV9TVVNQRU5EKSkKLQkJCQl0aWRfaW5mby0+c3RhdGUgPSBDQVJMOTE3MF9USURfU1RBVEVfSURMRTsKLQkJfQotCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJc3RhX2luZm8tPnNsZWVwaW5nID0gZmFsc2U7CiAJCWJyZWFrOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL3R4LmMKaW5kZXggY2I3MGVkNy4uZTk0MDg0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL3R4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL3R4LmMKQEAgLTEwNCwxMiArMTA0LDYwIEBACiAJc3Bpbl91bmxvY2tfYmgoJmFyLT50eF9zdGF0c19sb2NrKTsKIH0KIAorLyogbmVlZHMgcmN1X3JlYWRfbG9jayAqLworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3RhICpfX2Nhcmw5MTcwX2dldF90eF9zdGEoc3RydWN0IGFyOTE3MCAqYXIsCisJCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBfY2FybDkxNzBfdHhfc3VwZXJmcmFtZSAqc3VwZXIgPSAodm9pZCAqKSBza2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopIHN1cGVyLT5mcmFtZV9kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7CisJdW5zaWduZWQgaW50IHZpZl9pZDsKKworCXZpZl9pZCA9IChzdXBlci0+cy5taXNjICYgQ0FSTDkxNzBfVFhfU1VQRVJfTUlTQ19WSUZfSUQpID4+CisJCSBDQVJMOTE3MF9UWF9TVVBFUl9NSVNDX1ZJRl9JRF9TOworCisJaWYgKFdBUk5fT05fT05DRSh2aWZfaWQgPj0gQVI5MTcwX01BWF9WSVJUVUFMX01BQykpCisJCXJldHVybiBOVUxMOworCisJdmlmID0gcmN1X2RlcmVmZXJlbmNlKGFyLT52aWZfcHJpdlt2aWZfaWRdLnZpZik7CisJaWYgKHVubGlrZWx5KCF2aWYpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogTm9ybWFsbHkgd2Ugc2hvdWxkIHVzZSB3cmFwcGVycyBsaWtlIGllZWU4MDIxMV9nZXRfREEgdG8gZ2V0CisJICogdGhlIGNvcnJlY3QgcGVlciBpZWVlODAyMTFfc3RhLgorCSAqCisJICogQnV0IHRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIGluZGlyZWN0IHRyYWZmaWMgKGJyb2FkY2FzdHMsIG9yCisJICogZGF0YSB3aGljaCBpcyBkZXNpZ25hdGVkIGZvciBvdGhlciBzdGF0aW9ucykgaW4gc3RhdGlvbiBtb2RlLgorCSAqIFRoZSBmcmFtZSB3aWxsIGJlIGRpcmVjdGVkIHRvIHRoZSBBUCBmb3IgZGlzdHJpYnV0aW9uIGFuZCBub3QKKwkgKiB0byB0aGUgYWN0dWFsIGRlc3RpbmF0aW9uLgorCSAqLworCisJcmV0dXJuIGllZWU4MDIxMV9maW5kX3N0YSh2aWYsIGhkci0+YWRkcjEpOworfQorCitzdGF0aWMgdm9pZCBjYXJsOTE3MF90eF9wc191bmJsb2NrKHN0cnVjdCBhcjkxNzAgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7CisJc3RydWN0IGNhcmw5MTcwX3N0YV9pbmZvICpzdGFfaW5mbzsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlzdGEgPSBfX2Nhcmw5MTcwX2dldF90eF9zdGEoYXIsIHNrYik7CisJaWYgKHVubGlrZWx5KCFzdGEpKQorCQlnb3RvIG91dF9yY3U7CisKKwlzdGFfaW5mbyA9IChzdHJ1Y3QgY2FybDkxNzBfc3RhX2luZm8gKikgc3RhLT5kcnZfcHJpdjsKKwlpZiAoYXRvbWljX2RlY19yZXR1cm4oJnN0YV9pbmZvLT5wZW5kaW5nX2ZyYW1lcykgPT0gMCkKKwkJaWVlZTgwMjExX3N0YV9ibG9ja19hd2FrZShhci0+aHcsIHN0YSwgZmFsc2UpOworCitvdXRfcmN1OgorCXJjdV9yZWFkX3VubG9jaygpOworfQorCiBzdGF0aWMgdm9pZCBjYXJsOTE3MF90eF9hY2NvdW50aW5nX2ZyZWUoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eGluZm87CiAJaW50IHF1ZXVlOwogCi0JdHhpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCXF1ZXVlID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CiAKIAlzcGluX2xvY2tfYmgoJmFyLT50eF9zdGF0c19sb2NrKTsKQEAgLTEzNSw2ICsxODMsNyBAQAogCX0KIAogCXNwaW5fdW5sb2NrX2JoKCZhci0+dHhfc3RhdHNfbG9jayk7CisKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmYXItPnR4X3RvdGFsX3F1ZXVlZCkpCiAJCWNvbXBsZXRlKCZhci0+dHhfZmx1c2gpOwogfQpAQCAtMzI5LDEzICszNzgsOSBAQAogewogCXN0cnVjdCBfY2FybDkxNzBfdHhfc3VwZXJmcmFtZSAqc3VwZXIgPSAodm9pZCAqKSBza2ItPmRhdGE7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopIHN1cGVyLT5mcmFtZV9kYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbzsKLQlzdHJ1Y3QgY2FybDkxNzBfdHhfaW5mbyAqYXJfaW5mbzsKLQlzdHJ1Y3QgY2FybDkxNzBfc3RhX2luZm8gKnN0YV9pbmZvOwogCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7CisJc3RydWN0IGNhcmw5MTcwX3N0YV9pbmZvICpzdGFfaW5mbzsKIAlzdHJ1Y3QgY2FybDkxNzBfc3RhX3RpZCAqdGlkX2luZm87Ci0Jc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKLQl1bnNpZ25lZCBpbnQgdmlmX2lkOwogCXU4IHRpZDsKIAogCWlmICghKHR4aW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSB8fApAQCAtMzQzLDMwICszODgsOCBAQAogCSAgICghKHN1cGVyLT5mLm1hY19jb250cm9sICYgY3B1X3RvX2xlMTYoQVI5MTcwX1RYX01BQ19BR0dSKSkpKQogCQlyZXR1cm47CiAKLQl0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCWFyX2luZm8gPSAodm9pZCAqKSB0eF9pbmZvLT5yYXRlX2RyaXZlcl9kYXRhOwotCi0JdmlmX2lkID0gKHN1cGVyLT5zLm1pc2MgJiBDQVJMOTE3MF9UWF9TVVBFUl9NSVNDX1ZJRl9JRCkgPj4KLQkJIENBUkw5MTcwX1RYX1NVUEVSX01JU0NfVklGX0lEX1M7Ci0KLQlpZiAoV0FSTl9PTl9PTkNFKHZpZl9pZCA+PSBBUjkxNzBfTUFYX1ZJUlRVQUxfTUFDKSkKLQkJcmV0dXJuOwotCiAJcmN1X3JlYWRfbG9jaygpOwotCXZpZiA9IHJjdV9kZXJlZmVyZW5jZShhci0+dmlmX3ByaXZbdmlmX2lkXS52aWYpOwotCWlmICh1bmxpa2VseSghdmlmKSkKLQkJZ290byBvdXRfcmN1OwotCi0JLyoKLQkgKiBOb3JtYWxseSB3ZSBzaG91bGQgdXNlIHdyYXBwZXJzIGxpa2UgaWVlZTgwMjExX2dldF9EQSB0byBnZXQKLQkgKiB0aGUgY29ycmVjdCBwZWVyIGllZWU4MDIxMV9zdGEuCi0JICoKLQkgKiBCdXQgdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggaW5kaXJlY3QgdHJhZmZpYyAoYnJvYWRjYXN0cywgb3IKLQkgKiBkYXRhIHdoaWNoIGlzIGRlc2lnbmF0ZWQgZm9yIG90aGVyIHN0YXRpb25zKSBpbiBzdGF0aW9uIG1vZGUuCi0JICogVGhlIGZyYW1lIHdpbGwgYmUgZGlyZWN0ZWQgdG8gdGhlIEFQIGZvciBkaXN0cmlidXRpb24gYW5kIG5vdAotCSAqIHRvIHRoZSBhY3R1YWwgZGVzdGluYXRpb24uCi0JICovCi0Jc3RhID0gaWVlZTgwMjExX2ZpbmRfc3RhKHZpZiwgaGRyLT5hZGRyMSk7CisJc3RhID0gX19jYXJsOTE3MF9nZXRfdHhfc3RhKGFyLCBza2IpOwogCWlmICh1bmxpa2VseSghc3RhKSkKIAkJZ290byBvdXRfcmN1OwogCkBAIC00MjcsNiArNDUwLDcgQEAKIAlpZiAodHhpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpCiAJCWNhcmw5MTcwX3R4X3N0YXR1c19wcm9jZXNzX2FtcGR1KGFyLCBza2IsIHR4aW5mbyk7CiAKKwljYXJsOTE3MF90eF9wc191bmJsb2NrKGFyLCBza2IpOwogCWNhcmw5MTcwX3R4X3B1dF9za2Ioc2tiKTsKIH0KIApAQCAtNTQwLDExICs1NjQsNyBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eGluZm87CiAJc3RydWN0IGNhcmw5MTcwX3R4X2luZm8gKmFyaW5mbzsKLQlzdHJ1Y3QgX2Nhcmw5MTcwX3R4X3N1cGVyZnJhbWUgKnN1cGVyOwogCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwotCXVuc2lnbmVkIGludCB2aWZfaWQ7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaXRlciwgJmFyLT50eF9hbXBkdV9saXN0LCBsaXN0KSB7CkBAIC01NjIsMjAgKzU4Miw3IEBACiAJCSAgICBtc2Vjc190b19qaWZmaWVzKENBUkw5MTcwX1FVRVVFX1RJTUVPVVQpKSkKIAkJCWdvdG8gdW5sb2NrOwogCi0JCXN1cGVyID0gKHZvaWQgKikgc2tiLT5kYXRhOwotCQloZHIgPSAodm9pZCAqKSBzdXBlci0+ZnJhbWVfZGF0YTsKLQotCQl2aWZfaWQgPSAoc3VwZXItPnMubWlzYyAmIENBUkw5MTcwX1RYX1NVUEVSX01JU0NfVklGX0lEKSA+PgotCQkJIENBUkw5MTcwX1RYX1NVUEVSX01JU0NfVklGX0lEX1M7Ci0KLQkJaWYgKFdBUk5fT04odmlmX2lkID49IEFSOTE3MF9NQVhfVklSVFVBTF9NQUMpKQotCQkJZ290byB1bmxvY2s7Ci0KLQkJdmlmID0gcmN1X2RlcmVmZXJlbmNlKGFyLT52aWZfcHJpdlt2aWZfaWRdLnZpZik7Ci0JCWlmIChXQVJOX09OKCF2aWYpKQotCQkJZ290byB1bmxvY2s7Ci0KLQkJc3RhID0gaWVlZTgwMjExX2ZpbmRfc3RhKHZpZiwgaGRyLT5hZGRyMSk7CisJCXN0YSA9IF9fY2FybDkxNzBfZ2V0X3R4X3N0YShhciwgc2tiKTsKIAkJaWYgKFdBUk5fT04oIXN0YSkpCiAJCQlnb3RvIHVubG9jazsKIApAQCAtNjExLDcgKzYxOCw2IEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4aW5mbzsKLQlzdHJ1Y3QgY2FybDkxNzBfdHhfaW5mbyAqYXJpbmZvOwogCXVuc2lnbmVkIGludCByLCB0LCBxOwogCWJvb2wgc3VjY2VzcyA9IHRydWU7CiAKQEAgLTYyNyw3ICs2MzMsNiBAQAogCX0KIAogCXR4aW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlhcmluZm8gPSAodm9pZCAqKSB0eGluZm8tPnJhdGVfZHJpdmVyX2RhdGE7CiAKIAlpZiAoIShpbmZvICYgQ0FSTDkxNzBfVFhfU1RBVFVTX1NVQ0NFU1MpKQogCQlzdWNjZXNzID0gZmFsc2U7CkBAIC0xMTk5LDE1ICsxMjA0LDYgQEAKIAlhcmluZm8gPSAodm9pZCAqKSBpbmZvLT5yYXRlX2RyaXZlcl9kYXRhOwogCiAJYXJpbmZvLT50aW1lb3V0ID0gamlmZmllczsKLQotCS8qCi0JICogaW5jcmVhc2UgcmVmIGNvdW50IHRvICIyIi4KLQkgKiBSZWYgY291bnRpbmcgaXMgdGhlIGVhc2llc3Qgd2F5IHRvIHNvbHZlIHRoZSByYWNlIGJldHdlZW4KLQkgKiB0aGUgdGhlIHVyYidzIGNvbXBsZXRpb24gcm91dGluZTogY2FybDkxNzBfdHhfY2FsbGJhY2sgYW5kCi0JICogd2xhbiB0eCBzdGF0dXMgZnVuY3Rpb25zOiBjYXJsOTE3MF90eF9zdGF0dXMvamFuaXRvci4KLQkgKi8KLQljYXJsOTE3MF90eF9nZXRfc2tiKHNrYik7Ci0KIAlyZXR1cm4gc2tiOwogCiBlcnJfdW5sb2NrOgpAQCAtMTIyOCw2ICsxMjI0LDM2IEBACiAJX19jYXJsOTE3MF90eF9wcm9jZXNzX3N0YXR1cyhhciwgc3VwZXItPnMuY29va2llLCBxKTsKIH0KIAorc3RhdGljIGJvb2wgY2FybDkxNzBfdHhfcHNfZHJvcChzdHJ1Y3QgYXI5MTcwICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhOworCXN0cnVjdCBjYXJsOTE3MF9zdGFfaW5mbyAqc3RhX2luZm87CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJc3RhID0gX19jYXJsOTE3MF9nZXRfdHhfc3RhKGFyLCBza2IpOworCWlmICghc3RhKQorCQlnb3RvIG91dF9yY3U7CisKKwlzdGFfaW5mbyA9ICh2b2lkICopIHN0YS0+ZHJ2X3ByaXY7CisJaWYgKHVubGlrZWx5KHN0YV9pbmZvLT5zbGVlcGluZykpIHsKKwkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvOworCisJCXJjdV9yZWFkX3VubG9jaygpOworCisJCXR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpCisJCQlhdG9taWNfZGVjKCZhci0+dHhfYW1wZHVfdXBsb2FkKTsKKworCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9UWF9GSUxURVJFRDsKKwkJY2FybDkxNzBfdHhfc3RhdHVzKGFyLCBza2IsIGZhbHNlKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCitvdXRfcmN1OgorCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiBmYWxzZTsKK30KKwogc3RhdGljIHZvaWQgY2FybDkxNzBfdHgoc3RydWN0IGFyOTE3MCAqYXIpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTEyNDcsNiArMTI3Myw5IEBACiAJCQlpZiAodW5saWtlbHkoIXNrYikpCiAJCQkJYnJlYWs7CiAKKwkJCWlmICh1bmxpa2VseShjYXJsOTE3MF90eF9wc19kcm9wKGFyLCBza2IpKSkKKwkJCQljb250aW51ZTsKKwogCQkJYXRvbWljX2luYygmYXItPnR4X3RvdGFsX3BlbmRpbmcpOwogCiAJCQlxID0gX19jYXJsOTE3MF9nZXRfcXVldWUoYXIsIGkpOwpAQCAtMTI1Niw2ICsxMjg1LDE2IEBACiAJCQkgKi8KIAkJCXNrYl9xdWV1ZV90YWlsKCZhci0+dHhfc3RhdHVzW3FdLCBza2IpOwogCisJCQkvKgorCQkJICogaW5jcmVhc2UgcmVmIGNvdW50IHRvICIyIi4KKwkJCSAqIFJlZiBjb3VudGluZyBpcyB0aGUgZWFzaWVzdCB3YXkgdG8gc29sdmUgdGhlCisJCQkgKiByYWNlIGJldHdlZW4gdGhlIHVyYidzIGNvbXBsZXRpb24gcm91dGluZToKKwkJCSAqCWNhcmw5MTcwX3R4X2NhbGxiYWNrCisJCQkgKiBhbmQgd2xhbiB0eCBzdGF0dXMgZnVuY3Rpb25zOgorCQkJICoJY2FybDkxNzBfdHhfc3RhdHVzL2phbml0b3IuCisJCQkgKi8KKwkJCWNhcmw5MTcwX3R4X2dldF9za2Ioc2tiKTsKKwogCQkJY2FybDkxNzBfdXNiX3R4KGFyLCBza2IpOwogCQkJc2NoZWR1bGVfZ2FyYmFnZWNvbGxlY3RvciA9IHRydWU7CiAJCX0KQEAgLTEyNzUsNyArMTMxNCw2IEBACiAJc3RydWN0IGNhcmw5MTcwX3N0YV9pbmZvICpzdGFfaW5mbzsKIAlzdHJ1Y3QgY2FybDkxNzBfc3RhX3RpZCAqYWdnOwogCXN0cnVjdCBza19idWZmICppdGVyOwotCXVuc2lnbmVkIGludCBtYXg7CiAJdTE2IHRpZCwgc2VxLCBxc2VxLCBvZmY7CiAJYm9vbCBydW4gPSBmYWxzZTsKIApAQCAtMTI4NSw3ICsxMzIzLDYgQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlhZ2cgPSByY3VfZGVyZWZlcmVuY2Uoc3RhX2luZm8tPmFnZ1t0aWRdKTsKLQltYXggPSBzdGFfaW5mby0+YW1wZHVfbWF4X2xlbjsKIAogCWlmICghYWdnKQogCQlnb3RvIGVycl91bmxvY2tfcmN1OwpAQCAtMTM2OCw2ICsxNDA1LDExIEBACiAJICogYWxsIHJlc3NvdWNlcyB3aGljaCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBmcmFtZS4KIAkgKi8KIAorCWlmIChzdGEpIHsKKwkJc3RydWN0IGNhcmw5MTcwX3N0YV9pbmZvICpzdGFpID0gKHZvaWQgKikgc3RhLT5kcnZfcHJpdjsKKwkJYXRvbWljX2luYygmc3RhaS0+cGVuZGluZ19mcmFtZXMpOworCX0KKwogCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpIHsKIAkJcnVuID0gY2FybDkxNzBfdHhfYW1wZHVfcXVldWUoYXIsIHN0YSwgc2tiKTsKIAkJaWYgKHJ1bikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9rZXkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9rZXkuYwppbmRleCAzN2I4ZTExLi5hNjFlZjNkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2tleS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9rZXkuYwpAQCAtMjMsNiArMjMsMTQgQEAKIAogI2RlZmluZSBSRUdfUkVBRAkJCShjb21tb24tPm9wcy0+cmVhZCkKICNkZWZpbmUgUkVHX1dSSVRFKF9haCwgX3JlZywgX3ZhbCkJKGNvbW1vbi0+b3BzLT53cml0ZSkoX2FoLCBfdmFsLCBfcmVnKQorI2RlZmluZSBFTkFCTEVfUkVHV1JJVEVfQlVGRkVSKF9haCkJCQlcCisJaWYgKGNvbW1vbi0+b3BzLT5lbmFibGVfd3JpdGVfYnVmZmVyKQkJXAorCQljb21tb24tPm9wcy0+ZW5hYmxlX3dyaXRlX2J1ZmZlcigoX2FoKSk7CisKKyNkZWZpbmUgUkVHV1JJVEVfQlVGRkVSX0ZMVVNIKF9haCkJCQlcCisJaWYgKGNvbW1vbi0+b3BzLT53cml0ZV9mbHVzaCkJCQlcCisJCWNvbW1vbi0+b3BzLT53cml0ZV9mbHVzaCgoX2FoKSk7CisKIAogI2RlZmluZSBJRUVFODAyMTFfV0VQX05LSUQgICAgICA0ICAgICAgIC8qIG51bWJlciBvZiBrZXkgaWRzICovCiAKQEAgLTQyLDYgKzUwLDggQEAKIAogCWtleVR5cGUgPSBSRUdfUkVBRChhaCwgQVJfS0VZVEFCTEVfVFlQRShlbnRyeSkpOwogCisJRU5BQkxFX1JFR1dSSVRFX0JVRkZFUihhaCk7CisKIAlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTAoZW50cnkpLCAwKTsKIAlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTEoZW50cnkpLCAwKTsKIAlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTIoZW50cnkpLCAwKTsKQEAgLTY2LDYgKzc2LDggQEAKIAogCX0KIAorCVJFR1dSSVRFX0JVRkZFUl9GTFVTSChhaCk7CisKIAlyZXR1cm4gdHJ1ZTsKIH0KIEVYUE9SVF9TWU1CT0woYXRoX2h3X2tleXJlc2V0KTsKQEAgLTEwNCw5ICsxMTYsMTMgQEAKIAl9IGVsc2UgewogCQltYWNMbyA9IG1hY0hpID0gMDsKIAl9CisJRU5BQkxFX1JFR1dSSVRFX0JVRkZFUihhaCk7CisKIAlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX01BQzAoZW50cnkpLCBtYWNMbyk7CiAJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9NQUMxKGVudHJ5KSwgbWFjSGkgfCB1bmljYXN0X2ZsYWcpOwogCisJUkVHV1JJVEVfQlVGRkVSX0ZMVVNIKGFoKTsKKwogCXJldHVybiB0cnVlOwogfQogCkBAIC0yMjMsNiArMjM5LDggQEAKIAkJCW1pYzMgPSBnZXRfdW5hbGlnbmVkX2xlMTYoay0+a3ZfdHhtaWMgKyAwKSAmIDB4ZmZmZjsKIAkJCW1pYzQgPSBnZXRfdW5hbGlnbmVkX2xlMzIoay0+a3ZfdHhtaWMgKyA0KTsKIAorCQkJRU5BQkxFX1JFR1dSSVRFX0JVRkZFUihhaCk7CisKIAkJCS8qIFdyaXRlIFJYWzMxOjBdIGFuZCBUWFszMToxNl0gKi8KIAkJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZMChtaWNlbnRyeSksIG1pYzApOwogCQkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkxKG1pY2VudHJ5KSwgbWljMSk7CkBAIC0yMzYsNiArMjU0LDggQEAKIAkJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfVFlQRShtaWNlbnRyeSksCiAJCQkJICBBUl9LRVlUQUJMRV9UWVBFX0NMUik7CiAKKwkJCVJFR1dSSVRFX0JVRkZFUl9GTFVTSChhaCk7CisKIAkJfSBlbHNlIHsKIAkJCS8qCiAJCQkgKiBUS0lQIHVzZXMgZm91ciBrZXkgY2FjaGUgZW50cmllcyAodHdvIGZvciBncm91cApAQCAtMjU4LDYgKzI3OCw4IEBACiAJCQltaWMwID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGstPmt2X21pYyArIDApOwogCQkJbWljMiA9IGdldF91bmFsaWduZWRfbGUzMihrLT5rdl9taWMgKyA0KTsKIAorCQkJRU5BQkxFX1JFR1dSSVRFX0JVRkZFUihhaCk7CisKIAkJCS8qIFdyaXRlIE1JQyBrZXlbMzE6MF0gKi8KIAkJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZMChtaWNlbnRyeSksIG1pYzApOwogCQkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkxKG1pY2VudHJ5KSwgMCk7CkBAIC0yNzAsOCArMjkyLDEyIEBACiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTQobWljZW50cnkpLCAwKTsKIAkJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfVFlQRShtaWNlbnRyeSksCiAJCQkJICBBUl9LRVlUQUJMRV9UWVBFX0NMUik7CisKKwkJCVJFR1dSSVRFX0JVRkZFUl9GTFVTSChhaCk7CiAJCX0KIAorCQlFTkFCTEVfUkVHV1JJVEVfQlVGRkVSKGFoKTsKKwogCQkvKiBNQUMgYWRkcmVzcyByZWdpc3RlcnMgYXJlIHJlc2VydmVkIGZvciB0aGUgTUlDIGVudHJ5ICovCiAJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfTUFDMChtaWNlbnRyeSksIDApOwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX01BQzEobWljZW50cnkpLCAwKTsKQEAgLTI4Myw3ICszMDksMTEgQEAKIAkJICovCiAJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZMChlbnRyeSksIGtleTApOwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTEoZW50cnkpLCBrZXkxKTsKKworCQlSRUdXUklURV9CVUZGRVJfRkxVU0goYWgpOwogCX0gZWxzZSB7CisJCUVOQUJMRV9SRUdXUklURV9CVUZGRVIoYWgpOworCiAJCS8qIFdyaXRlIGtleVs0NzowXSAqLwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTAoZW50cnkpLCBrZXkwKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkxKGVudHJ5KSwga2V5MSk7CkBAIC0yOTYsNiArMzI2LDggQEAKIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVk0KGVudHJ5KSwga2V5NCk7CiAJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfVFlQRShlbnRyeSksIGtleVR5cGUpOwogCisJCVJFR1dSSVRFX0JVRkZFUl9GTFVTSChhaCk7CisKIAkJLyogV3JpdGUgTUFDIGFkZHJlc3MgZm9yIHRoZSBlbnRyeSAqLwogCQkodm9pZCkgYXRoX2h3X2tleXNldG1hYyhjb21tb24sIGVudHJ5LCBtYWMpOwogCX0KQEAgLTQ1MSw2ICs0ODMsOSBAQAogCW1lbXNldCgmaGssIDAsIHNpemVvZihoaykpOwogCiAJc3dpdGNoIChrZXktPmNpcGhlcikgeworCWNhc2UgMDoKKwkJaGsua3ZfdHlwZSA9IEFUSF9DSVBIRVJfQ0xSOworCQlicmVhazsKIAljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwOgogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OgogCQloay5rdl90eXBlID0gQVRIX0NJUEhFUl9XRVA7CkBAIC00NjYsNyArNTAxLDggQEAKIAl9CiAKIAloay5rdl9sZW4gPSBrZXktPmtleWxlbjsKLQltZW1jcHkoaGsua3ZfdmFsLCBrZXktPmtleSwga2V5LT5rZXlsZW4pOworCWlmIChrZXktPmtleWxlbikKKwkJbWVtY3B5KGhrLmt2X3ZhbCwga2V5LT5rZXksIGtleS0+a2V5bGVuKTsKIAogCWlmICghKGtleS0+ZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0UpKSB7CiAJCXN3aXRjaCAodmlmLT50eXBlKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvcmVnZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3JlZ2QuYwppbmRleCAwZTFiODc5Li4wMjgzMTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvcmVnZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9yZWdkLmMKQEAgLTk3LDggKzk3LDggQEAKIAl9CiB9OwogCi0vKiBDYW4gYmUgdXNlZCBieSAweDY3LCAweDZBIGFuZCAweDY4ICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gYXRoX3dvcmxkX3JlZ2RvbV82N182OF82QSA9IHsKKy8qIENhbiBiZSB1c2VkIGJ5IDB4NjcsIDB4NjgsIDB4NkEgYW5kIDB4NkMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiBhdGhfd29ybGRfcmVnZG9tXzY3XzY4XzZBXzZDID0gewogCS5uX3JlZ19ydWxlcyA9IDQsCiAJLmFscGhhMiA9ICAiOTkiLAogCS5yZWdfcnVsZXMgPSB7CkBAIC0xNTEsNyArMTUxLDggQEAKIAljYXNlIDB4Njc6CiAJY2FzZSAweDY4OgogCWNhc2UgMHg2QToKLQkJcmV0dXJuICZhdGhfd29ybGRfcmVnZG9tXzY3XzY4XzZBOworCWNhc2UgMHg2QzoKKwkJcmV0dXJuICZhdGhfd29ybGRfcmVnZG9tXzY3XzY4XzZBXzZDOwogCWRlZmF1bHQ6CiAJCVdBUk5fT04oMSk7CiAJCXJldHVybiBhdGhfZGVmYXVsdF93b3JsZF9yZWdkb21haW4oKTsKQEAgLTMzMyw2ICszMzQsNyBAQAogCWNhc2UgMHg2MzoKIAljYXNlIDB4NjY6CiAJY2FzZSAweDY3OgorCWNhc2UgMHg2QzoKIAkJYXRoX3JlZ19hcHBseV9iZWFjb25pbmdfZmxhZ3Mod2lwaHksIGluaXRpYXRvcik7CiAJCWJyZWFrOwogCWNhc2UgMHg2ODoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9yZWdkX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3JlZ2RfY29tbW9uLmgKaW5kZXggNWMyY2ZlNi4uMjRiNTM4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3JlZ2RfY29tbW9uLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3JlZ2RfY29tbW9uLmgKQEAgLTg2LDYgKzg2LDcgQEAKIAlXT1I5X1dPUkxEID0gMHg2OSwKIAlXT1JBX1dPUkxEID0gMHg2QSwKIAlXT1JCX1dPUkxEID0gMHg2QiwKKwlXT1JDX1dPUkxEID0gMHg2QywKIAogCU1LSzNfTUtLQiA9IDB4ODAsCiAJTUtLM19NS0tBMiA9IDB4ODEsCkBAIC0yODIsNiArMjgzLDcgQEAKIAl7V09SOV9XT1JMRCwgTk9fQ1RMLCBOT19DVEx9LAogCXtXT1JBX1dPUkxELCBOT19DVEwsIE5PX0NUTH0sCiAJe1dPUkJfV09STEQsIE5PX0NUTCwgTk9fQ1RMfSwKKwl7V09SQ19XT1JMRCwgTk9fQ1RMLCBOT19DVEx9LAogfTsKIAogc3RhdGljIHN0cnVjdCBjb3VudHJ5X2NvZGVfdG9fZW51bV9yZCBhbGxDb3VudHJpZXNbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9iNDMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9iNDMuaAppbmRleCAyMjlmNDM4Li5lYmM5M2MxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2I0My5oCkBAIC02NDgsOCArNjQ4LDggQEAKIAljaGFyIGVycm9yc1tCNDNfTlJfRldUWVBFU11bMTI4XTsKIAkvKiBUZW1wb3JhcnkgYnVmZmVyIGZvciBzdG9yaW5nIHRoZSBmaXJtd2FyZSBuYW1lLiAqLwogCWNoYXIgZnduYW1lWzY0XTsKLQkvKiBBIGZhdGFsIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlcXVlc3RpbmcuIEZpcm13YXJlIHJlcWVzdAotCSAqIGNhbiBub3QgY29udGludWUsIGFzIGFueSBvdGhlciByZXFlc3Qgd2lsbCBhbHNvIGZhaWwuICovCisJLyogQSBmYXRhbCBlcnJvciBvY2N1cnJlZCB3aGlsZSByZXF1ZXN0aW5nLiBGaXJtd2FyZSByZXF1ZXN0CisJICogY2FuIG5vdCBjb250aW51ZSwgYXMgYW55IG90aGVyIHJlcXVlc3Qgd2lsbCBhbHNvIGZhaWwuICovCiAJaW50IGZhdGFsX2ZhaWx1cmU7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYwppbmRleCA1YWY0MGQ5Li41YTQzOTg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMKQEAgLTI2ODYsNiArMjY4NiwxNyBAQAogCWRldi0+bWFjX3N1c3BlbmRlZCsrOwogfQogCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL01hY1BoeUNsa1NldCAqLwordm9pZCBiNDNfbWFjX3BoeV9jbG9ja19zZXQoc3RydWN0IGI0M193bGRldiAqZGV2LCBib29sIG9uKQoreworCXUzMiB0bXNsb3cgPSBzc2JfcmVhZDMyKGRldi0+ZGV2LCBTU0JfVE1TTE9XKTsKKwlpZiAob24pCisJCXRtc2xvdyB8PSBCNDNfVE1TTE9XX01BQ1BIWUNMS0VOOworCWVsc2UKKwkJdG1zbG93ICY9IH5CNDNfVE1TTE9XX01BQ1BIWUNMS0VOOworCXNzYl93cml0ZTMyKGRldi0+ZGV2LCBTU0JfVE1TTE9XLCB0bXNsb3cpOworfQorCiBzdGF0aWMgdm9pZCBiNDNfYWRqdXN0X29wbW9kZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7CiAJc3RydWN0IGI0M193bCAqd2wgPSBkZXYtPndsOwpAQCAtMjg0Miw3ICsyODUzLDcgQEAKIHsKIAlzdHJ1Y3QgYjQzX3BoeSAqcGh5ID0gJmRldi0+cGh5OwogCWludCBlcnI7Ci0JdTMyIHZhbHVlMzIsIG1hY2N0bDsKKwl1MzIgbWFjY3RsOwogCXUxNiB2YWx1ZTE2OwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgTUFDIGNvbnRyb2wgKi8KQEAgLTI5MjAsOSArMjkzMSw3IEBACiAJYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19ETUE0X0lSUV9NQVNLLCAweDAwMDBEQzAwKTsKIAliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX0RNQTVfSVJRX01BU0ssIDB4MDAwMERDMDApOwogCi0JdmFsdWUzMiA9IHNzYl9yZWFkMzIoZGV2LT5kZXYsIFNTQl9UTVNMT1cpOwotCXZhbHVlMzIgfD0gMHgwMDEwMDAwMDsKLQlzc2Jfd3JpdGUzMihkZXYtPmRldiwgU1NCX1RNU0xPVywgdmFsdWUzMik7CisJYjQzX21hY19waHlfY2xvY2tfc2V0KGRldiwgdHJ1ZSk7CiAKIAliNDNfd3JpdGUxNihkZXYsIEI0M19NTUlPX1BPV0VSVVBfREVMQVksCiAJCSAgICBkZXYtPmRldi0+YnVzLT5jaGlwY28uZmFzdF9wd3J1cF9kZWxheSk7CkBAIC00MjEzLDMzICs0MjIyLDE4IEBACiAKIHN0YXRpYyB2b2lkIGI0M19pbWNmZ2xvX3RpbWVvdXRzX3dvcmthcm91bmQoc3RydWN0IGI0M193bGRldiAqZGV2KQogewotI2lmZGVmIENPTkZJR19TU0JfRFJJVkVSX1BDSUNPUkUKIAlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gZGV2LT5kZXYtPmJ1czsKIAl1MzIgdG1wOwogCi0JaWYgKGJ1cy0+cGNpY29yZS5kZXYgJiYKLQkgICAgYnVzLT5wY2ljb3JlLmRldi0+aWQuY29yZWlkID09IFNTQl9ERVZfUENJICYmCi0JICAgIGJ1cy0+cGNpY29yZS5kZXYtPmlkLnJldmlzaW9uIDw9IDUpIHsKLQkJLyogSU1DRkdMTyB0aW1lb3V0cyB3b3JrYXJvdW5kLiAqLworCWlmICgoYnVzLT5jaGlwX2lkID09IDB4NDMxMSAmJiBidXMtPmNoaXBfcmV2ID09IDIpIHx8CisJICAgIChidXMtPmNoaXBfaWQgPT0gMHg0MzEyKSkgewogCQl0bXAgPSBzc2JfcmVhZDMyKGRldi0+ZGV2LCBTU0JfSU1DRkdMTyk7Ci0JCXN3aXRjaCAoYnVzLT5idXN0eXBlKSB7Ci0JCWNhc2UgU1NCX0JVU1RZUEVfUENJOgotCQljYXNlIFNTQl9CVVNUWVBFX1BDTUNJQToKLQkJCXRtcCAmPSB+U1NCX0lNQ0ZHTE9fUkVRVE87Ci0JCQl0bXAgJj0gflNTQl9JTUNGR0xPX1NFUlRPOwotCQkJdG1wIHw9IDB4MzI7Ci0JCQlicmVhazsKLQkJY2FzZSBTU0JfQlVTVFlQRV9TU0I6Ci0JCQl0bXAgJj0gflNTQl9JTUNGR0xPX1JFUVRPOwotCQkJdG1wICY9IH5TU0JfSU1DRkdMT19TRVJUTzsKLQkJCXRtcCB8PSAweDUzOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQorCQl0bXAgJj0gflNTQl9JTUNGR0xPX1JFUVRPOworCQl0bXAgJj0gflNTQl9JTUNGR0xPX1NFUlRPOworCQl0bXAgfD0gMHgzOwogCQlzc2Jfd3JpdGUzMihkZXYtPmRldiwgU1NCX0lNQ0ZHTE8sIHRtcCk7CisJCXNzYl9jb21taXRfc2V0dGluZ3MoYnVzKTsKIAl9Ci0jZW5kaWYgLyogQ09ORklHX1NTQl9EUklWRVJfUENJQ09SRSAqLwogfQogCiBzdGF0aWMgdm9pZCBiNDNfc2V0X3N5bnRoX3B1X2RlbGF5KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgYm9vbCBpZGxlKQpAQCAtNDg2MywyNSArNDg1Nyw4IEBACiBzdGF0aWMgaW50IGI0M19vbmVfY29yZV9hdHRhY2goc3RydWN0IHNzYl9kZXZpY2UgKmRldiwgc3RydWN0IGI0M193bCAqd2wpCiB7CiAJc3RydWN0IGI0M193bGRldiAqd2xkZXY7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJaW50IGVyciA9IC1FTk9NRU07CiAKLQlpZiAoIWxpc3RfZW1wdHkoJndsLT5kZXZsaXN0KSkgewotCQkvKiBXZSBhcmUgbm90IHRoZSBmaXJzdCBjb3JlIG9uIHRoaXMgY2hpcC4gKi8KLQkJcGRldiA9IChkZXYtPmJ1cy0+YnVzdHlwZSA9PSBTU0JfQlVTVFlQRV9QQ0kpID8gZGV2LT5idXMtPmhvc3RfcGNpIDogTlVMTDsKLQkJLyogT25seSBzcGVjaWFsIGNoaXBzIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSB3aXJlbGVzcwotCQkgKiBjb3JlLCBhbHRob3VnaCBzb21lIG9mIHRoZSBvdGhlciBjaGlwcyBoYXZlIG1vcmUgdGhhbgotCQkgKiBvbmUgd2lyZWxlc3MgY29yZSBhcyB3ZWxsLiBDaGVjayBmb3IgdGhpcyBhbmQKLQkJICogYmFpbCBvdXQgZWFybHkuCi0JCSAqLwotCQlpZiAoIXBkZXYgfHwKLQkJICAgICgocGRldi0+ZGV2aWNlICE9IDB4NDMyMSkgJiYKLQkJICAgICAocGRldi0+ZGV2aWNlICE9IDB4NDMxMykgJiYgKHBkZXYtPmRldmljZSAhPSAweDQzMUEpKSkgewotCQkJYjQzZGJnKHdsLCAiSWdub3JpbmcgdW5jb25uZWN0ZWQgODAyLjExIGNvcmVcbiIpOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KLQl9Ci0KIAl3bGRldiA9IGt6YWxsb2Moc2l6ZW9mKCp3bGRldiksIEdGUF9LRVJORUwpOwogCWlmICghd2xkZXYpCiAJCWdvdG8gb3V0OwpAQCAtNTAwMiw3ICs0OTc5LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGI0M19wcm9iZShzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3Qgc3NiX2RldmljZV9pZCAqaWQpCitzdGF0aWMgaW50IGI0M19zc2JfcHJvYmUoc3RydWN0IHNzYl9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IHNzYl9kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBiNDNfd2wgKndsOwogCWludCBlcnI7CkBAIC01MDQwLDcgKzUwMTcsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIGI0M19yZW1vdmUoc3RydWN0IHNzYl9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIGI0M19zc2JfcmVtb3ZlKHN0cnVjdCBzc2JfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGI0M193bCAqd2wgPSBzc2JfZ2V0X2RldnR5cGVkYXRhKGRldik7CiAJc3RydWN0IGI0M193bGRldiAqd2xkZXYgPSBzc2JfZ2V0X2RydmRhdGEoZGV2KTsKQEAgLTUwODMsOCArNTA2MCw4IEBACiBzdGF0aWMgc3RydWN0IHNzYl9kcml2ZXIgYjQzX3NzYl9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gS0JVSUxEX01PRE5BTUUsCiAJLmlkX3RhYmxlCT0gYjQzX3NzYl90YmwsCi0JLnByb2JlCQk9IGI0M19wcm9iZSwKLQkucmVtb3ZlCQk9IGI0M19yZW1vdmUsCisJLnByb2JlCQk9IGI0M19zc2JfcHJvYmUsCisJLnJlbW92ZQkJPSBiNDNfc3NiX3JlbW92ZSwKIH07CiAKIHN0YXRpYyB2b2lkIGI0M19wcmludF9kcml2ZXJpbmZvKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uaAppbmRleCA0MGRiMDM2Li5hMGQzMjdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmgKQEAgLTEzMyw2ICsxMzMsNyBAQAogCiB2b2lkIGI0M19tYWNfc3VzcGVuZChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwogdm9pZCBiNDNfbWFjX2VuYWJsZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwordm9pZCBiNDNfbWFjX3BoeV9jbG9ja19zZXQoc3RydWN0IGI0M193bGRldiAqZGV2LCBib29sIG9uKTsKIAogCiBzdHJ1Y3QgYjQzX3JlcXVlc3RfZndfY29udGV4dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9uLmMKaW5kZXggOGEwMGY5YS4uYjA3NWEzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9uLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9uLmMKQEAgLTIyODEsNiArMjI4MSw3IEBACiAJCXNhdmVfcmVnc19waHlbNV0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9BRkVDVExfT1ZFUik7CiAJCXNhdmVfcmVnc19waHlbNl0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9UWEZfNDBDT19CMVMwKTsKIAkJc2F2ZV9yZWdzX3BoeVs3XSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX1RYRl80MENPX0IzMlMxKTsKKwkJc2F2ZV9yZWdzX3BoeVs4XSA9IDA7CiAJfSBlbHNlIHsKIAkJc2F2ZV9yZWdzX3BoeVswXSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0FGRUNUTF9DMSk7CiAJCXNhdmVfcmVnc19waHlbMV0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9BRkVDVExfQzIpOwpAQCAtMjI4OSw2ICsyMjkwLDggQEAKIAkJc2F2ZV9yZWdzX3BoeVs0XSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX1JGQ1RMX09WRVIpOwogCQlzYXZlX3JlZ3NfcGh5WzVdID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfUkZDVExfUlNTSU8xKTsKIAkJc2F2ZV9yZWdzX3BoeVs2XSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX1JGQ1RMX1JTU0lPMik7CisJCXNhdmVfcmVnc19waHlbN10gPSAwOworCQlzYXZlX3JlZ3NfcGh5WzhdID0gMDsKIAl9CiAKIAliNDNfbnBoeV9yc3NpX3NlbGVjdChkZXYsIDUsIHR5cGUpOwpAQCAtMzUzNywxNyArMzU0MCw2IEBACiAJCXJldHVybiBiNDNfbnBoeV9yZXYyX2NhbF9yeF9pcShkZXYsIHRhcmdldCwgdHlwZSwgZGVidWcpOwogfQogCi0vKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL01hY1BoeUNsa1NldCAqLwotc3RhdGljIHZvaWQgYjQzX25waHlfbWFjX3BoeV9jbG9ja19zZXQoc3RydWN0IGI0M193bGRldiAqZGV2LCBib29sIG9uKQotewotCXUzMiB0bXNsb3cgPSBzc2JfcmVhZDMyKGRldi0+ZGV2LCBTU0JfVE1TTE9XKTsKLQlpZiAob24pCi0JCXRtc2xvdyB8PSBCNDNfVE1TTE9XX01BQ1BIWUNMS0VOOwotCWVsc2UKLQkJdG1zbG93ICY9IH5CNDNfVE1TTE9XX01BQ1BIWUNMS0VOOwotCXNzYl93cml0ZTMyKGRldi0+ZGV2LCBTU0JfVE1TTE9XLCB0bXNsb3cpOwotfQotCiAvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL1J4Q29yZVNldFN0YXRlICovCiBzdGF0aWMgdm9pZCBiNDNfbnBoeV9zZXRfcnhfY29yZV9zdGF0ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU4IG1hc2spCiB7CkBAIC0zNjg4LDcgKzM2ODAsNyBAQAogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9CQkNGRywgdG1wICYgfkI0M19OUEhZX0JCQ0ZHX1JTVENDQSk7CiAJYjQzX25waHlfYm1hY19jbG9ja19mZ2MoZGV2LCAwKTsKIAotCWI0M19ucGh5X21hY19waHlfY2xvY2tfc2V0KGRldiwgdHJ1ZSk7CisJYjQzX21hY19waHlfY2xvY2tfc2V0KGRldiwgdHJ1ZSk7CiAKIAliNDNfbnBoeV9wYV9vdmVycmlkZShkZXYsIGZhbHNlKTsKIAliNDNfbnBoeV9mb3JjZV9yZl9zZXF1ZW5jZShkZXYsIEI0M19SRlNFUV9SWDJUWCk7CkBAIC0zODQ1LDggKzM4MzcsOCBAQAogewogCXN0cnVjdCBiNDNfcGh5ICpwaHkgPSAmZGV2LT5waHk7CiAKLQljb25zdCBzdHJ1Y3QgYjQzX25waHlfY2hhbm5lbHRhYl9lbnRyeV9yZXYyICp0YWJlbnRfcjI7Ci0JY29uc3Qgc3RydWN0IGI0M19ucGh5X2NoYW5uZWx0YWJfZW50cnlfcmV2MyAqdGFiZW50X3IzOworCWNvbnN0IHN0cnVjdCBiNDNfbnBoeV9jaGFubmVsdGFiX2VudHJ5X3JldjIgKnRhYmVudF9yMiA9IE5VTEw7CisJY29uc3Qgc3RydWN0IGI0M19ucGh5X2NoYW5uZWx0YWJfZW50cnlfcmV2MyAqdGFiZW50X3IzID0gTlVMTDsKIAogCXU4IHRtcDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9tYWluLmMKaW5kZXggYzdmZDczZS4uMWFiODg2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbWFpbi5jCkBAIC0yMjM0LDcgKzIyMzQsNyBAQAogCWI0M2xlZ2FjeV93cml0ZTMyKGRldiwgQjQzbGVnYWN5X01NSU9fRE1BNV9JUlFfTUFTSywgMHgwMDAwREMwMCk7CiAKIAl2YWx1ZTMyID0gc3NiX3JlYWQzMihkZXYtPmRldiwgU1NCX1RNU0xPVyk7Ci0JdmFsdWUzMiB8PSAweDAwMTAwMDAwOworCXZhbHVlMzIgfD0gQjQzbGVnYWN5X1RNU0xPV19NQUNQSFlDTEtFTjsKIAlzc2Jfd3JpdGUzMihkZXYtPmRldiwgU1NCX1RNU0xPVywgdmFsdWUzMik7CiAKIAliNDNsZWdhY3lfd3JpdGUxNihkZXYsIEI0M2xlZ2FjeV9NTUlPX1BPV0VSVVBfREVMQVksCkBAIC0zMTA0LDM3ICszMTA0LDYgQEAKIAltZW1zZXQoJmRldi0+bm9pc2VjYWxjLCAwLCBzaXplb2YoZGV2LT5ub2lzZWNhbGMpKTsKIH0KIAotc3RhdGljIHZvaWQgYjQzbGVnYWN5X2ltY2ZnbG9fdGltZW91dHNfd29ya2Fyb3VuZChzdHJ1Y3QgYjQzbGVnYWN5X3dsZGV2ICpkZXYpCi17Ci0jaWZkZWYgQ09ORklHX1NTQl9EUklWRVJfUENJQ09SRQotCXN0cnVjdCBzc2JfYnVzICpidXMgPSBkZXYtPmRldi0+YnVzOwotCXUzMiB0bXA7Ci0KLQlpZiAoYnVzLT5wY2ljb3JlLmRldiAmJgotCSAgICBidXMtPnBjaWNvcmUuZGV2LT5pZC5jb3JlaWQgPT0gU1NCX0RFVl9QQ0kgJiYKLQkgICAgYnVzLT5wY2ljb3JlLmRldi0+aWQucmV2aXNpb24gPD0gNSkgewotCQkvKiBJTUNGR0xPIHRpbWVvdXRzIHdvcmthcm91bmQuICovCi0JCXRtcCA9IHNzYl9yZWFkMzIoZGV2LT5kZXYsIFNTQl9JTUNGR0xPKTsKLQkJc3dpdGNoIChidXMtPmJ1c3R5cGUpIHsKLQkJY2FzZSBTU0JfQlVTVFlQRV9QQ0k6Ci0JCWNhc2UgU1NCX0JVU1RZUEVfUENNQ0lBOgotCQkJdG1wICY9IH5TU0JfSU1DRkdMT19SRVFUTzsKLQkJCXRtcCAmPSB+U1NCX0lNQ0ZHTE9fU0VSVE87Ci0JCQl0bXAgfD0gMHgzMjsKLQkJCWJyZWFrOwotCQljYXNlIFNTQl9CVVNUWVBFX1NTQjoKLQkJCXRtcCAmPSB+U1NCX0lNQ0ZHTE9fUkVRVE87Ci0JCQl0bXAgJj0gflNTQl9JTUNGR0xPX1NFUlRPOwotCQkJdG1wIHw9IDB4NTM7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JCXNzYl93cml0ZTMyKGRldi0+ZGV2LCBTU0JfSU1DRkdMTywgdG1wKTsKLQl9Ci0jZW5kaWYgLyogQ09ORklHX1NTQl9EUklWRVJfUENJQ09SRSAqLwotfQotCiBzdGF0aWMgdm9pZCBiNDNsZWdhY3lfc2V0X3N5bnRoX3B1X2RlbGF5KHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldiwKIAkJCQkJICBib29sIGlkbGUpIHsKIAl1MTYgcHVfZGVsYXkgPSAxMDUwOwpAQCAtMzI3OCw3ICszMjQ3LDYgQEAKIAkvKiBFbmFibGUgSVJRIHJvdXRpbmcgdG8gdGhpcyBkZXZpY2UuICovCiAJc3NiX3BjaWNvcmVfZGV2X2lycXZlY3NfZW5hYmxlKCZidXMtPnBjaWNvcmUsIGRldi0+ZGV2KTsKIAotCWI0M2xlZ2FjeV9pbWNmZ2xvX3RpbWVvdXRzX3dvcmthcm91bmQoZGV2KTsKIAlwcmVwYXJlX3BoeV9kYXRhX2Zvcl9pbml0KGRldik7CiAJYjQzbGVnYWN5X3BoeV9jYWxpYnJhdGUoZGV2KTsKIAllcnIgPSBiNDNsZWdhY3lfY2hpcF9pbml0KGRldik7CkBAIC0zNzI4LDI2ICszNjk2LDggQEAKIAkJCQkgICAgIHN0cnVjdCBiNDNsZWdhY3lfd2wgKndsKQogewogCXN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKndsZGV2OwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCWludCBlcnIgPSAtRU5PTUVNOwogCi0JaWYgKCFsaXN0X2VtcHR5KCZ3bC0+ZGV2bGlzdCkpIHsKLQkJLyogV2UgYXJlIG5vdCB0aGUgZmlyc3QgY29yZSBvbiB0aGlzIGNoaXAuICovCi0JCXBkZXYgPSAoZGV2LT5idXMtPmJ1c3R5cGUgPT0gU1NCX0JVU1RZUEVfUENJKSA/IGRldi0+YnVzLT5ob3N0X3BjaSA6IE5VTEw7Ci0JCS8qIE9ubHkgc3BlY2lhbCBjaGlwcyBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgd2lyZWxlc3MKLQkJICogY29yZSwgYWx0aG91Z2ggc29tZSBvZiB0aGUgb3RoZXIgY2hpcHMgaGF2ZSBtb3JlIHRoYW4KLQkJICogb25lIHdpcmVsZXNzIGNvcmUgYXMgd2VsbC4gQ2hlY2sgZm9yIHRoaXMgYW5kCi0JCSAqIGJhaWwgb3V0IGVhcmx5LgotCQkgKi8KLQkJaWYgKCFwZGV2IHx8Ci0JCSAgICAoKHBkZXYtPmRldmljZSAhPSAweDQzMjEpICYmCi0JCSAgICAgKHBkZXYtPmRldmljZSAhPSAweDQzMTMpICYmCi0JCSAgICAgKHBkZXYtPmRldmljZSAhPSAweDQzMUEpKSkgewotCQkJYjQzbGVnYWN5ZGJnKHdsLCAiSWdub3JpbmcgdW5jb25uZWN0ZWQgODAyLjExIGNvcmVcbiIpOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KLQl9Ci0KIAl3bGRldiA9IGt6YWxsb2Moc2l6ZW9mKCp3bGRldiksIEdGUF9LRVJORUwpOwogCWlmICghd2xkZXYpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX21haW4uYwppbmRleCAxZDlhZWQ2Li5kNTA4NDgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX21haW4uYwpAQCAtNzksMTMgKzc5LDggQEAKIAlpZiAoIXJ0bmxfbG9ja2VkKQogCQlydG5sX2xvY2soKTsKIAotCXJldCA9IDA7Ci0JaWYgKHN0cmNocihkZXYtPm5hbWUsICclJykpCi0JCXJldCA9IGRldl9hbGxvY19uYW1lKGRldiwgZGV2LT5uYW1lKTsKLQogCVNFVF9ORVRERVZfREVWKGRldiwgbWRldi0+ZGV2LnBhcmVudCk7Ci0JaWYgKHJldCA+PSAwKQotCQlyZXQgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKKwlyZXQgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKIAogCWlmICghcnRubF9sb2NrZWQpCiAJCXJ0bmxfdW5sb2NrKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjIwMC5jCmluZGV4IDQyYzNmZTMuLjg3ODEzYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjIwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjIwMC5jCkBAIC03NDMwLDcgKzc0MzAsNyBAQAogCQlwcml2LT5hc3NvY19yZXF1ZXN0LmNhcGFiaWxpdHkgJj0KIAkJICAgIH5jcHVfdG9fbGUxNihXTEFOX0NBUEFCSUxJVFlfU0hPUlRfU0xPVF9USU1FKTsKIAotCUlQV19ERUJVR19BU1NPQygiJXNzc29jYXRpb24gYXR0ZW1wdDogJyVzJywgY2hhbm5lbCAlZCwgIgorCUlQV19ERUJVR19BU1NPQygiJXNzb2NpYXRpb24gYXR0ZW1wdDogJyVzJywgY2hhbm5lbCAlZCwgIgogCQkJIjgwMi4xMSVjIFslZF0sICVzWzolc10sIGVuYz0lcyVzJXMlYyVjXG4iLAogCQkJcm9hbWluZyA/ICJSZWEiIDogIkEiLAogCQkJcHJpbnRfc3NpZChzc2lkLCBwcml2LT5lc3NpZCwgcHJpdi0+ZXNzaWRfbGVuKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC00OTY1LWNhbGliLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtNDk2NS1jYWxpYi5jCmluZGV4IDgxZDZhMjUuLjE2MmQ4NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC00OTY1LWNhbGliLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTQ5NjUtY2FsaWIuYwpAQCAtNzEzLDggKzcxMyw4IEBACiAJCQlpd2w0OTY1X2ZpbmRfZmlyc3RfY2hhaW4ocHJpdi0+Y2ZnLT52YWxpZF90eF9hbnQpOwogCQkJZGF0YS0+ZGlzY29ubl9hcnJheVtmaXJzdF9jaGFpbl0gPSAwOwogCQkJYWN0aXZlX2NoYWlucyB8PSBCSVQoZmlyc3RfY2hhaW4pOwotCQkJSVdMX0RFQlVHX0NBTElCKHByaXYsICJBbGwgVHggY2hhaW5zIGFyZSBkaXNjb25uZWN0ZWQgXAotCQkJCQlXL0EgLSBkZWNsYXJlICVkIGFzIGNvbm5lY3RlZFxuIiwKKwkJCUlXTF9ERUJVR19DQUxJQihwcml2LAorCQkJCQkiQWxsIFR4IGNoYWlucyBhcmUgZGlzY29ubmVjdGVkIFcvQSAtIGRlY2xhcmUgJWQgYXMgY29ubmVjdGVkXG4iLAogCQkJCQlmaXJzdF9jaGFpbik7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTQ5NjUtbGliLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtNDk2NS1saWIuYwppbmRleCA1YThhM2NjLi43ZTVlODVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtNDk2NS1saWIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtNDk2NS1saWIuYwpAQCAtOTU1LDkgKzk1NSw2IEBACiAJaWYgKHByaXYtPmNmZy0+c2Nhbl9yeF9hbnRlbm5hc1tiYW5kXSkKIAkJcnhfYW50ID0gcHJpdi0+Y2ZnLT5zY2FuX3J4X2FudGVubmFzW2JhbmRdOwogCi0JaWYgKHByaXYtPmNmZy0+c2Nhbl90eF9hbnRlbm5hc1tiYW5kXSkKLQkJc2Nhbl90eF9hbnRlbm5hcyA9IHByaXYtPmNmZy0+c2Nhbl90eF9hbnRlbm5hc1tiYW5kXTsKLQogCXByaXYtPnNjYW5fdHhfYW50W2JhbmRdID0gaXdsNDk2NV90b2dnbGVfdHhfYW50KHByaXYsCiAJCQkJCQlwcml2LT5zY2FuX3R4X2FudFtiYW5kXSwKIAkJCQkJCSAgICBzY2FuX3R4X2FudGVubmFzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC00OTY1LXJzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtNDk2NS1ycy5jCmluZGV4IDMxYWM2NzIuLjI0ZDE0OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC00OTY1LXJzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTQ5NjUtcnMuYwpAQCAtMjYwNCw3ICsyNjA0LDcgQEAKIAlzdHJ1Y3QgaXdsX2xxX3N0YSAqbHFfc3RhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdjsKIAljaGFyIGJ1Zls2NF07Ci0JaW50IGJ1Zl9zaXplOworCXNpemVfdCBidWZfc2l6ZTsKIAl1MzIgcGFyc2VkX3JhdGU7CiAJc3RydWN0IGl3bF9zdGF0aW9uX3ByaXYgKnN0YV9wcml2ID0KIAkJY29udGFpbmVyX29mKGxxX3N0YSwgc3RydWN0IGl3bF9zdGF0aW9uX3ByaXYsIGxxX3N0YSk7CkBAIC0yODYwLDcgKzI4NjAsNiBAQAogCiBpbnQgaXdsNDk2NV9yYXRlX2NvbnRyb2xfcmVnaXN0ZXIodm9pZCkKIHsKLQlwcl9lcnIoIlJlZ2lzdGVyaW5nIDQ5NjUgcmF0ZSBjb250cm9sIG9wZXJhdGlvbnNcbiIpOwogCXJldHVybiBpZWVlODAyMTFfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKCZyc180OTY1X29wcyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1jb3JlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtY29yZS5jCmluZGV4IDQyZGIwZmMuLjQyZGY4MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWNvcmUuYwpAQCAtMjExLDEwICsyMTEsNyBAQAogCQlpZiAoIWl3bF9sZWdhY3lfaXNfY2hhbm5lbF92YWxpZChjaCkpCiAJCQljb250aW51ZTsKIAotCQlpZiAoaXdsX2xlZ2FjeV9pc19jaGFubmVsX2FfYmFuZChjaCkpCi0JCQlzYmFuZCA9ICAmcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl07Ci0JCWVsc2UKLQkJCXNiYW5kID0gICZwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXTsKKwkJc2JhbmQgPSAmcHJpdi0+YmFuZHNbY2gtPmJhbmRdOwogCiAJCWdlb19jaCA9ICZzYmFuZC0+Y2hhbm5lbHNbc2JhbmQtPm5fY2hhbm5lbHMrK107CiAKQEAgLTIxMTcsMTAgKzIxMTQsOSBAQAogCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXIgdG8gY2hhbm5lbCAlZCBjaGFuZ2VkIDB4JVhcbiIsCiAJCQkJCWNoYW5uZWwtPmh3X3ZhbHVlLCBjaGFuZ2VkKTsKIAotCWlmICh1bmxpa2VseSghcHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5kaXNhYmxlX2h3X3NjYW4gJiYKLQkJCXRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpKSB7CisJaWYgKHVubGlrZWx5KHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpKSB7CiAJCXNjYW5fYWN0aXZlID0gMTsKLQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIHNjYW5uaW5nXG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJzY2FuIGFjdGl2ZVxuIik7CiAJfQogCiAJaWYgKGNoYW5nZWQgJiAoSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1NNUFMgfApAQCAtMjQ0MCwxMSArMjQzNiwxMyBAQAogCiAJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJjaGFuZ2VzID0gMHglWFxuIiwgY2hhbmdlcyk7CiAKLQlpZiAoIWl3bF9sZWdhY3lfaXNfYWxpdmUocHJpdikpCi0JCXJldHVybjsKLQogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAorCWlmICghaXdsX2xlZ2FjeV9pc19hbGl2ZShwcml2KSkgeworCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKKwkJcmV0dXJuOworCX0KKwogCWlmIChjaGFuZ2VzICYgQlNTX0NIQU5HRURfUU9TKSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTI2NTMsNyArMjY1MSw3IEBACiAKIG5vbmU6CiAJLyogcmUtZW5hYmxlIGludGVycnVwdHMgaGVyZSBzaW5jZSB3ZSBkb24ndCBoYXZlIGFueXRoaW5nIHRvIHNlcnZpY2UuICovCi0JLyogb25seSBSZS1lbmFibGUgaWYgZGlhYmxlZCBieSBpcnEgKi8KKwkvKiBvbmx5IFJlLWVuYWJsZSBpZiBkaXNhYmxlZCBieSBpcnEgKi8KIAlpZiAodGVzdF9iaXQoU1RBVFVTX0lOVF9FTkFCTEVELCAmcHJpdi0+c3RhdHVzKSkKIAkJaXdsX2xlZ2FjeV9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtY29yZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWNvcmUuaAppbmRleCBmMDNiNDYzLi5iYzY2YzYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtY29yZS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1jb3JlLmgKQEAgLTI4Nyw3ICsyODcsNiBAQAogCXN0cnVjdCBpd2xfYmFzZV9wYXJhbXMgKmJhc2VfcGFyYW1zOwogCS8qIHBhcmFtcyBsaWtlbHkgdG8gY2hhbmdlIHdpdGhpbiBhIGRldmljZSBmYW1pbHkgKi8KIAl1OCBzY2FuX3J4X2FudGVubmFzW0lFRUU4MDIxMV9OVU1fQkFORFNdOwotCXU4IHNjYW5fdHhfYW50ZW5uYXNbSUVFRTgwMjExX05VTV9CQU5EU107CiAJZW51bSBpd2xfbGVkX21vZGUgbGVkX21vZGU7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtZGV2LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtZGV2LmgKaW5kZXggZjQzYWMxZS4uYmUwMTA2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWRldi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1kZXYuaApAQCAtMTM0LDcgKzEzNCw3IEBACiAJCQkJKiBzcGFjZSBtb3JlIHRoYW4gdGhpcyAqLwogCWludCBoaWdoX21hcms7ICAgICAgICAgLyogaGlnaCB3YXRlcm1hcmssIHN0b3AgcXVldWUgaWYgZnJlZQogCQkJCSogc3BhY2UgbGVzcyB0aGFuIHRoaXMgKi8KLX0gX19wYWNrZWQ7Cit9OwogCiAvKiBPbmUgZm9yIGVhY2ggVEZEICovCiBzdHJ1Y3QgaXdsX3R4X2luZm8gewpAQCAtMjkwLDYgKzI5MCw3IEBACiAJQ01EX1NJWkVfSFVHRSA9ICgxIDw8IDApLAogCUNNRF9BU1lOQyA9ICgxIDw8IDEpLAogCUNNRF9XQU5UX1NLQiA9ICgxIDw8IDIpLAorCUNNRF9NQVBQRUQgPSAoMSA8PCAzKSwKIH07CiAKICNkZWZpbmUgREVGX0NNRF9QQVlMT0FEX1NJWkUgMzIwCkBAIC0xMDc2LDcgKzEwNzcsNiBAQAogCXNwaW5sb2NrX3QgaGNtZF9sb2NrOwkvKiBwcm90ZWN0IGhjbWQgKi8KIAlzcGlubG9ja190IHJlZ19sb2NrOwkvKiBwcm90ZWN0IGh3IHJlZ2lzdGVyIGFjY2VzcyAqLwogCXN0cnVjdCBtdXRleCBtdXRleDsKLQlzdHJ1Y3QgbXV0ZXggc3luY19jbWRfbXV0ZXg7IC8qIGVuYWJsZSBzZXJpYWxpemF0aW9uIG9mIHN5bmMgY29tbWFuZHMgKi8KIAogCS8qIGJhc2ljIHBjaS1uZXR3b3JrIGRyaXZlciBzdHVmZiAqLwogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWhjbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1oY21kLmMKaW5kZXggOWQ3MjFjYi4uNjJiNGIwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWhjbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtaGNtZC5jCkBAIC0xNDUsNiArMTQ1LDggQEAKIAlpbnQgY21kX2lkeDsKIAlpbnQgcmV0OwogCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmcHJpdi0+bXV0ZXgpOworCiAJQlVHX09OKGNtZC0+ZmxhZ3MgJiBDTURfQVNZTkMpOwogCiAJIC8qIEEgc3luY2hyb25vdXMgY29tbWFuZCBjYW4gbm90IGhhdmUgYSBjYWxsYmFjayBzZXQuICovCkBAIC0xNTIsNyArMTU0LDYgQEAKIAogCUlXTF9ERUJVR19JTkZPKHByaXYsICJBdHRlbXB0aW5nIHRvIHNlbmQgc3luYyBjb21tYW5kICVzXG4iLAogCQkJaXdsX2xlZ2FjeV9nZXRfY21kX3N0cmluZyhjbWQtPmlkKSk7Ci0JbXV0ZXhfbG9jaygmcHJpdi0+c3luY19jbWRfbXV0ZXgpOwogCiAJc2V0X2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOwogCUlXTF9ERUJVR19JTkZPKHByaXYsICJTZXR0aW5nIEhDTURfQUNUSVZFIGZvciBjb21tYW5kICVzXG4iLApAQCAtMjI0LDcgKzIyNSw2IEBACiAJCWNtZC0+cmVwbHlfcGFnZSA9IDA7CiAJfQogb3V0OgotCW11dGV4X3VubG9jaygmcHJpdi0+c3luY19jbWRfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9sZWdhY3lfc2VuZF9jbWRfc3luYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtaGVscGVycy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWhlbHBlcnMuaAppbmRleCAwMjEzMmU3Li5hNmVmZmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtaGVscGVycy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1oZWxwZXJzLmgKQEAgLTE0OSw2ICsxNDksMTIgQEAKIAlJV0xfREVCVUdfSVNSKHByaXYsICJEaXNhYmxlZCBpbnRlcnJ1cHRzXG4iKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGl3bF9sZWdhY3lfZW5hYmxlX3Jma2lsbF9pbnQoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCUlXTF9ERUJVR19JU1IocHJpdiwgIkVuYWJsaW5nIHJma2lsbCBpbnRlcnJ1cHRcbiIpOworCWl3bF93cml0ZTMyKHByaXYsIENTUl9JTlRfTUFTSywgQ1NSX0lOVF9CSVRfUkZfS0lMTCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfbGVnYWN5X2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlJV0xfREVCVUdfSVNSKHByaXYsICJFbmFibGluZyBpbnRlcnJ1cHRzXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC10eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLXR4LmMKaW5kZXggYTIyNzc3My4uNGZmZjk5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLXR4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLXR4LmMKQEAgLTE0NiwzMyArMTQ2LDMyIEBACiB7CiAJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxID0gJnByaXYtPnR4cVtwcml2LT5jbWRfcXVldWVdOwogCXN0cnVjdCBpd2xfcXVldWUgKnEgPSAmdHhxLT5xOwotCWJvb2wgaHVnZSA9IGZhbHNlOwogCWludCBpOwogCiAJaWYgKHEtPm5fYmQgPT0gMCkKIAkJcmV0dXJuOwogCiAJd2hpbGUgKHEtPnJlYWRfcHRyICE9IHEtPndyaXRlX3B0cikgewotCQkvKiB3ZSBoYXZlIG5vIHdheSB0byB0ZWxsIGlmIGl0IGlzIGEgaHVnZSBjbWQgQVRNICovCiAJCWkgPSBpd2xfbGVnYWN5X2dldF9jbWRfaW5kZXgocSwgcS0+cmVhZF9wdHIsIDApOwogCi0JCWlmICh0eHEtPm1ldGFbaV0uZmxhZ3MgJiBDTURfU0laRV9IVUdFKQotCQkJaHVnZSA9IHRydWU7Ci0JCWVsc2UKKwkJaWYgKHR4cS0+bWV0YVtpXS5mbGFncyAmIENNRF9NQVBQRUQpIHsKIAkJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwKIAkJCQkJIGRtYV91bm1hcF9hZGRyKCZ0eHEtPm1ldGFbaV0sIG1hcHBpbmcpLAogCQkJCQkgZG1hX3VubWFwX2xlbigmdHhxLT5tZXRhW2ldLCBsZW4pLAogCQkJCQkgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKwkJCXR4cS0+bWV0YVtpXS5mbGFncyA9IDA7CisJCX0KIAogCQlxLT5yZWFkX3B0ciA9IGl3bF9sZWdhY3lfcXVldWVfaW5jX3dyYXAocS0+cmVhZF9wdHIsIHEtPm5fYmQpOwogCX0KIAotCWlmIChodWdlKSB7Ci0JCWkgPSBxLT5uX3dpbmRvdzsKKwlpID0gcS0+bl93aW5kb3c7CisJaWYgKHR4cS0+bWV0YVtpXS5mbGFncyAmIENNRF9NQVBQRUQpIHsKIAkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wY2lfZGV2LAogCQkJCSBkbWFfdW5tYXBfYWRkcigmdHhxLT5tZXRhW2ldLCBtYXBwaW5nKSwKIAkJCQkgZG1hX3VubWFwX2xlbigmdHhxLT5tZXRhW2ldLCBsZW4pLAogCQkJCSBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCQl0eHEtPm1ldGFbaV0uZmxhZ3MgPSAwOwogCX0KIH0KIEVYUE9SVF9TWU1CT0woaXdsX2xlZ2FjeV9jbWRfcXVldWVfdW5tYXApOwpAQCAtNDY3LDI5ICs0NjYsMjcgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JaWYgKGl3bF9sZWdhY3lfcXVldWVfc3BhY2UocSkgPCAoKGNtZC0+ZmxhZ3MgJiBDTURfQVNZTkMpID8gMiA6IDEpKSB7Ci0JCUlXTF9FUlIocHJpdiwgIk5vIHNwYWNlIGluIGNvbW1hbmQgcXVldWVcbiIpOwotCQlJV0xfRVJSKHByaXYsICJSZXN0YXJ0aW5nIGFkYXB0ZXIgZHVlIHRvIHF1ZXVlIGZ1bGxcbiIpOwotCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJlc3RhcnQpOwotCQlyZXR1cm4gLUVOT1NQQzsKLQl9Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+aGNtZF9sb2NrLCBmbGFncyk7CiAKLQkvKiBJZiB0aGlzIGlzIGEgaHVnZSBjbWQsIG1hcmsgdGhlIGh1Z2UgZmxhZyBhbHNvIG9uIHRoZSBtZXRhLmZsYWdzCi0JICogb2YgdGhlIF9vcmlnaW5hbF8gY21kLiBUaGlzIGlzIHVzZWQgZm9yIERNQSBtYXBwaW5nIGNsZWFuIHVwLgotCSAqLwotCWlmIChjbWQtPmZsYWdzICYgQ01EX1NJWkVfSFVHRSkgewotCQlpZHggPSBpd2xfbGVnYWN5X2dldF9jbWRfaW5kZXgocSwgcS0+d3JpdGVfcHRyLCAwKTsKLQkJdHhxLT5tZXRhW2lkeF0uZmxhZ3MgPSBDTURfU0laRV9IVUdFOworCWlmIChpd2xfbGVnYWN5X3F1ZXVlX3NwYWNlKHEpIDwgKChjbWQtPmZsYWdzICYgQ01EX0FTWU5DKSA/IDIgOiAxKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5oY21kX2xvY2ssIGZsYWdzKTsKKworCQlJV0xfRVJSKHByaXYsICJSZXN0YXJ0aW5nIGFkYXB0ZXIgZHVlIHRvIGNvbW1hbmQgcXVldWUgZnVsbFxuIik7CisJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7CisJCXJldHVybiAtRU5PU1BDOwogCX0KIAogCWlkeCA9IGl3bF9sZWdhY3lfZ2V0X2NtZF9pbmRleChxLCBxLT53cml0ZV9wdHIsIGNtZC0+ZmxhZ3MgJiBDTURfU0laRV9IVUdFKTsKIAlvdXRfY21kID0gdHhxLT5jbWRbaWR4XTsKIAlvdXRfbWV0YSA9ICZ0eHEtPm1ldGFbaWR4XTsKIAorCWlmIChXQVJOX09OKG91dF9tZXRhLT5mbGFncyAmIENNRF9NQVBQRUQpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmhjbWRfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVOT1NQQzsKKwl9CisKIAltZW1zZXQob3V0X21ldGEsIDAsIHNpemVvZigqb3V0X21ldGEpKTsJLyogcmUtaW5pdGlhbGl6ZSB0byBOVUxMICovCi0Jb3V0X21ldGEtPmZsYWdzID0gY21kLT5mbGFnczsKKwlvdXRfbWV0YS0+ZmxhZ3MgPSBjbWQtPmZsYWdzIHwgQ01EX01BUFBFRDsKIAlpZiAoY21kLT5mbGFncyAmIENNRF9XQU5UX1NLQikKIAkJb3V0X21ldGEtPnNvdXJjZSA9IGNtZDsKIAlpZiAoY21kLT5mbGFncyAmIENNRF9BU1lOQykKQEAgLTYxMCw2ICs2MDcsNyBAQAogCXN0cnVjdCBpd2xfZGV2aWNlX2NtZCAqY21kOwogCXN0cnVjdCBpd2xfY21kX21ldGEgKm1ldGE7CiAJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxID0gJnByaXYtPnR4cVtwcml2LT5jbWRfcXVldWVdOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiBJZiBhIFR4IGNvbW1hbmQgaXMgYmVpbmcgaGFuZGxlZCBhbmQgaXQgaXNuJ3QgaW4gdGhlIGFjdHVhbAogCSAqIGNvbW1hbmQgcXVldWUgdGhlbiB0aGVyZSBhIGNvbW1hbmQgcm91dGluZyBidWcgaGFzIGJlZW4gaW50cm9kdWNlZApAQCAtNjIzLDE0ICs2MjEsNiBAQAogCQlyZXR1cm47CiAJfQogCi0JLyogSWYgdGhpcyBpcyBhIGh1Z2UgY21kLCBjbGVhciB0aGUgaHVnZSBmbGFnIG9uIHRoZSBtZXRhLmZsYWdzCi0JICogb2YgdGhlIF9vcmlnaW5hbF8gY21kLiBTbyB0aGF0IGl3bF9sZWdhY3lfY21kX3F1ZXVlX2ZyZWUgd29uJ3QgdW5tYXAKLQkgKiB0aGUgRE1BIGJ1ZmZlciBmb3IgdGhlIHNjYW4gKGh1Z2UpIGNvbW1hbmQuCi0JICovCi0JaWYgKGh1Z2UpIHsKLQkJY21kX2luZGV4ID0gaXdsX2xlZ2FjeV9nZXRfY21kX2luZGV4KCZ0eHEtPnEsIGluZGV4LCAwKTsKLQkJdHhxLT5tZXRhW2NtZF9pbmRleF0uZmxhZ3MgPSAwOwotCX0KIAljbWRfaW5kZXggPSBpd2xfbGVnYWN5X2dldF9jbWRfaW5kZXgoJnR4cS0+cSwgaW5kZXgsIGh1Z2UpOwogCWNtZCA9IHR4cS0+Y21kW2NtZF9pbmRleF07CiAJbWV0YSA9ICZ0eHEtPm1ldGFbY21kX2luZGV4XTsKQEAgLTY0Nyw2ICs2MzcsOCBAQAogCX0gZWxzZSBpZiAobWV0YS0+Y2FsbGJhY2spCiAJCW1ldGEtPmNhbGxiYWNrKHByaXYsIGNtZCwgcGt0KTsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5oY21kX2xvY2ssIGZsYWdzKTsKKwogCWl3bF9sZWdhY3lfaGNtZF9xdWV1ZV9yZWNsYWltKHByaXYsIHR4cV9pZCwgaW5kZXgsIGNtZF9pbmRleCk7CiAKIAlpZiAoIShtZXRhLT5mbGFncyAmIENNRF9BU1lOQykpIHsKQEAgLTY1NSw2ICs2NDcsMTAgQEAKIAkJCSAgICAgICBpd2xfbGVnYWN5X2dldF9jbWRfc3RyaW5nKGNtZC0+aGRyLmNtZCkpOwogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7CiAJfQorCisJLyogTWFyayBhcyB1bm1hcHBlZCAqLwogCW1ldGEtPmZsYWdzID0gMDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmhjbWRfbG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTChpd2xfbGVnYWN5X3R4X2NtZF9jb21wbGV0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wzOTQ1LWJhc2UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bDM5NDUtYmFzZS5jCmluZGV4IGNjN2ViY2UuLjBlZTZiZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bDM5NDUtYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bDM5NDUtYmFzZS5jCkBAIC0yNzQ4LDExICsyNzQ4LDEyIEBACiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0KIAkgICAgY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2xfcHJpdiwgaW5pdF9hbGl2ZV9zdGFydC53b3JrKTsKIAotCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJcmV0dXJuOwotCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKKwkJZ290byBvdXQ7CisKIAlpd2wzOTQ1X2luaXRfYWxpdmVfc3RhcnQocHJpdik7CitvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CiAKQEAgLTI3NjEsMTEgKzI3NjIsMTIgQEAKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPQogCSAgICBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bF9wcml2LCBhbGl2ZV9zdGFydC53b3JrKTsKIAotCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJcmV0dXJuOwotCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKKwkJZ290byBvdXQ7CisKIAlpd2wzOTQ1X2FsaXZlX3N0YXJ0KHByaXYpOworb3V0OgogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQogCkBAIC0yOTk1LDEwICsyOTk3LDEyIEBACiAJfSBlbHNlIHsKIAkJaXdsMzk0NV9kb3duKHByaXYpOwogCi0JCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJCXJldHVybjsKLQogCQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisJCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkgeworCQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CisJCQlyZXR1cm47CisJCX0KKwogCQlfX2l3bDM5NDVfdXAocHJpdik7CiAJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCX0KQEAgLTMwMDksMTEgKzMwMTMsMTIgQEAKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPQogCSAgICBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bF9wcml2LCByeF9yZXBsZW5pc2gpOwogCi0JaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQlyZXR1cm47Ci0KIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQorCQlnb3RvIG91dDsKKwogCWl3bDM5NDVfcnhfcmVwbGVuaXNoKHByaXYpOworb3V0OgogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQogCkBAIC0zODEwLDcgKzM4MTUsNiBAQAogCUlOSVRfTElTVF9IRUFEKCZwcml2LT5mcmVlX2ZyYW1lcyk7CiAKIAltdXRleF9pbml0KCZwcml2LT5tdXRleCk7Ci0JbXV0ZXhfaW5pdCgmcHJpdi0+c3luY19jbWRfbXV0ZXgpOwogCiAJcHJpdi0+aWVlZV9jaGFubmVscyA9IE5VTEw7CiAJcHJpdi0+aWVlZV9yYXRlcyA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2w0OTY1LWJhc2UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bDQ5NjUtYmFzZS5jCmluZGV4IGE2MmZlMjQuLmFmMmFlMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bDQ5NjUtYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bDQ5NjUtYmFzZS5jCkBAIC0xMDY5LDkgKzEwNjksMTIgQEAKIAl9CiAKIAkvKiBSZS1lbmFibGUgYWxsIGludGVycnVwdHMgKi8KLQkvKiBvbmx5IFJlLWVuYWJsZSBpZiBkaWFibGVkIGJ5IGlycSAqLworCS8qIG9ubHkgUmUtZW5hYmxlIGlmIGRpc2FibGVkIGJ5IGlycSAqLwogCWlmICh0ZXN0X2JpdChTVEFUVVNfSU5UX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpKQogCQlpd2xfbGVnYWN5X2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOworCS8qIFJlLWVuYWJsZSBSRl9LSUxMIGlmIGl0IG9jY3VycmVkICovCisJZWxzZSBpZiAoaGFuZGxlZCAmIENTUl9JTlRfQklUX1JGX0tJTEwpCisJCWl3bF9sZWdhY3lfZW5hYmxlX3Jma2lsbF9pbnQocHJpdik7CiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9MRUdBQ1lfREVCVUcKIAlpZiAoaXdsX2xlZ2FjeV9nZXRfZGVidWdfbGV2ZWwocHJpdikgJiAoSVdMX0RMX0lTUikpIHsKQEAgLTIxMzksNyArMjE0Miw3IEBACiBzdGF0aWMgdm9pZCBfX2l3bDQ5NjVfZG93bihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZXhpdF9wZW5kaW5nID0gdGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cyk7CisJaW50IGV4aXRfcGVuZGluZzsKIAogCUlXTF9ERUJVR19JTkZPKHByaXYsIERSVl9OQU1FICIgaXMgZ29pbmcgZG93blxuIik7CiAKQEAgLTI0MDEsMTEgKzI0MDQsMTIgQEAKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPQogCSAgICBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bF9wcml2LCBpbml0X2FsaXZlX3N0YXJ0LndvcmspOwogCi0JaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQlyZXR1cm47Ci0KIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQorCQlnb3RvIG91dDsKKwogCXByaXYtPmNmZy0+b3BzLT5saWItPmluaXRfYWxpdmVfc3RhcnQocHJpdik7CitvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CiAKQEAgLTI0MTQsMTEgKzI0MTgsMTIgQEAKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPQogCSAgICBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bF9wcml2LCBhbGl2ZV9zdGFydC53b3JrKTsKIAotCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJcmV0dXJuOwotCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKKwkJZ290byBvdXQ7CisKIAlpd2w0OTY1X2FsaXZlX3N0YXJ0KHByaXYpOworb3V0OgogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQogCkBAIC0yNDY4LDEwICsyNDczLDEyIEBACiAJfSBlbHNlIHsKIAkJaXdsNDk2NV9kb3duKHByaXYpOwogCi0JCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJCXJldHVybjsKLQogCQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisJCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkgeworCQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CisJCQlyZXR1cm47CisJCX0KKwogCQlfX2l3bDQ5NjVfdXAocHJpdik7CiAJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCX0KQEAgLTI2MjQsOSArMjYzMSwxMCBAQAogCiAJZmx1c2hfd29ya3F1ZXVlKHByaXYtPndvcmtxdWV1ZSk7CiAKLQkvKiBlbmFibGUgaW50ZXJydXB0cyBhZ2FpbiBpbiBvcmRlciB0byByZWNlaXZlIHJma2lsbCBjaGFuZ2VzICovCisJLyogVXNlciBzcGFjZSBzb2Z0d2FyZSBtYXkgZXhwZWN0IGdldHRpbmcgcmZraWxsIGNoYW5nZXMKKwkgKiBldmVuIGlmIGludGVyZmFjZSBpcyBkb3duICovCiAJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVCwgMHhGRkZGRkZGRik7Ci0JaXdsX2xlZ2FjeV9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKKwlpd2xfbGVnYWN5X2VuYWJsZV9yZmtpbGxfaW50KHByaXYpOwogCiAJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiB9CkBAIC0yODQ3LDIxICsyODU1LDIyIEBACiAKIAlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAorCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwogCWlmIChpd2xfbGVnYWN5X2lzX3Jma2lsbChwcml2KSkKLQkJZ290byBvdXRfZXhpdDsKKwkJZ290byBvdXQ7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykgfHwKIAkgICAgdGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJZ290byBvdXRfZXhpdDsKKwkJZ290byBvdXQ7CiAKIAlpZiAoIWl3bF9sZWdhY3lfaXNfYXNzb2NpYXRlZF9jdHgoY3R4KSkKLQkJZ290byBvdXRfZXhpdDsKKwkJZ290byBvdXQ7CiAKIAkvKiBjaGFubmVsIHN3aXRjaCBpbiBwcm9ncmVzcyAqLwogCWlmIChwcml2LT5zd2l0Y2hfcnhvbi5zd2l0Y2hfaW5fcHJvZ3Jlc3MgPT0gdHJ1ZSkKLQkJZ290byBvdXRfZXhpdDsKKwkJZ290byBvdXQ7CiAKLQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnNldF9jaGFubmVsX3N3aXRjaCkgewogCiAJCWNoID0gY2hhbm5lbC0+aHdfdmFsdWU7CkBAIC0yOTE3LDcgKzI5MjYsNiBAQAogCX0KIG91dDoKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLW91dF9leGl0OgogCWlmICghcHJpdi0+c3dpdGNoX3J4b24uc3dpdGNoX2luX3Byb2dyZXNzKQogCQlpZWVlODAyMTFfY2hzd2l0Y2hfZG9uZShjdHgtPnZpZiwgZmFsc2UpOwogCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwpAQCAtMzExNiw3ICszMTI0LDYgQEAKIAlJTklUX0xJU1RfSEVBRCgmcHJpdi0+ZnJlZV9mcmFtZXMpOwogCiAJbXV0ZXhfaW5pdCgmcHJpdi0+bXV0ZXgpOwotCW11dGV4X2luaXQoJnByaXYtPnN5bmNfY21kX211dGV4KTsKIAogCXByaXYtPmllZWVfY2hhbm5lbHMgPSBOVUxMOwogCXByaXYtPmllZWVfcmF0ZXMgPSBOVUxMOwpAQCAtMzE3Myw3ICszMTgwLDcgQEAKIHsKIAlwcml2LT5od19yZXYgPSBfaXdsX2xlZ2FjeV9yZWFkMzIocHJpdiwgQ1NSX0hXX1JFVik7CiAJcHJpdi0+aHdfd2FfcmV2ID0gX2l3bF9sZWdhY3lfcmVhZDMyKHByaXYsIENTUl9IV19SRVZfV0FfUkVHKTsKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShwcml2LT5wY2lfZGV2LCBQQ0lfUkVWSVNJT05fSUQsICZwcml2LT5yZXZfaWQpOworCXByaXYtPnJldl9pZCA9IHByaXYtPnBjaV9kZXYtPnJldmlzaW9uOwogCUlXTF9ERUJVR19JTkZPKHByaXYsICJIVyBSZXZpc2lvbiBJRCA9IDB4JVhcbiIsIHByaXYtPnJldl9pZCk7CiB9CiAKQEAgLTM0MDYsMTQgKzM0MTMsMTQgQEAKIAkgKiA4LiBFbmFibGUgaW50ZXJydXB0cyBhbmQgcmVhZCBSRktJTEwgc3RhdGUKIAkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0JLyogZW5hYmxlIGludGVycnVwdHMgaWYgbmVlZGVkOiBodyBidWcgdy9hICovCisJLyogZW5hYmxlIHJma2lsbCBpbnRlcnJ1cHQ6IGh3IGJ1ZyB3L2EgKi8KIAlwY2lfcmVhZF9jb25maWdfd29yZChwcml2LT5wY2lfZGV2LCBQQ0lfQ09NTUFORCwgJnBjaV9jbWQpOwogCWlmIChwY2lfY21kICYgUENJX0NPTU1BTkRfSU5UWF9ESVNBQkxFKSB7CiAJCXBjaV9jbWQgJj0gflBDSV9DT01NQU5EX0lOVFhfRElTQUJMRTsKIAkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHByaXYtPnBjaV9kZXYsIFBDSV9DT01NQU5ELCBwY2lfY21kKTsKIAl9CiAKLQlpd2xfbGVnYWN5X2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOworCWl3bF9sZWdhY3lfZW5hYmxlX3Jma2lsbF9pbnQocHJpdik7CiAKIAkvKiBJZiBwbGF0Zm9ybSdzIFJGX0tJTEwgc3dpdGNoIGlzIE5PVCBzZXQgdG8gS0lMTCAqLwogCWlmIChpd2xfcmVhZDMyKHByaXYsIENTUl9HUF9DTlRSTCkgJgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9LY29uZmlnCmluZGV4IDE3ZDU1NWYuLmFkM2JkYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL0tjb25maWcKQEAgLTEwMiw2ICsxMDIsMTYgQEAKIAkgIG9jY3VyLgogZW5kbWVudQogCitjb25maWcgSVdMV0lGSV9ERVZJQ0VfU1ZUT09MCisJYm9vbCAiaXdsd2lmaSBkZXZpY2Ugc3Z0b29sIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBJV0xBR04KKwlzZWxlY3QgTkw4MDIxMV9URVNUTU9ERQorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIHN2dG9vbCBzdXBwb3J0IGZvciBpd2x3aWZpIGRldmljZSB0aHJvdWdoCisJICBOTDgwMjExX1RFU1RNT0RFLiBzdnRvb2wgaXMgYSBzb2Z0d2FyZSB2YWxpZGF0aW9uIHRvb2wgdGhhdCBydW5zIGluCisJICB0aGUgdXNlciBzcGFjZSBhbmQgaW50ZXJhY3RzIHdpdGggdGhlIGRldmljZSBpbiB0aGUga2VybmVsIHNwYWNlCisJICB0aHJvdWdoIHRoZSBnZW5lcmljIG5ldGxpbmsgbWVzc2FnZSB2aWEgTkw4MDIxMV9URVNUTU9ERSBjaGFubmVsLgorCiBjb25maWcgSVdMX1AyUAogCWJvb2wgIml3bHdpZmkgZXhwZXJpbWVudGFsIFAyUCBzdXBwb3J0IgogCWRlcGVuZHMgb24gSVdMQUdOCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9NYWtlZmlsZQppbmRleCA5ZDZlZTgzLi44MjI2NjA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvTWFrZWZpbGUKQEAgLTEsOCArMSw4IEBACiAjIEFHTgogb2JqLSQoQ09ORklHX0lXTEFHTikJKz0gaXdsYWduLm8KLWl3bGFnbi1vYmpzCQk6PSBpd2wtYWduLm8gaXdsLWFnbi1ycy5vIGl3bC1hZ24tbGVkLm8KK2l3bGFnbi1vYmpzCQk6PSBpd2wtYWduLm8gaXdsLWFnbi1ycy5vCiBpd2xhZ24tb2JqcwkJKz0gaXdsLWFnbi11Y29kZS5vIGl3bC1hZ24tdHgubwotaXdsYWduLW9ianMJCSs9IGl3bC1hZ24tbGliLm8gaXdsLWFnbi1jYWxpYi5vCitpd2xhZ24tb2JqcwkJKz0gaXdsLWFnbi1saWIubyBpd2wtYWduLWNhbGliLm8gaXdsLWlvLm8KIGl3bGFnbi1vYmpzCQkrPSBpd2wtYWduLXR0Lm8gaXdsLWFnbi1zdGEubyBpd2wtYWduLWVlcHJvbS5vCiAKIGl3bGFnbi1vYmpzIAkJKz0gaXdsLWNvcmUubyBpd2wtZWVwcm9tLm8gaXdsLWhjbWQubyBpd2wtcG93ZXIubwpAQCAtMTQsOSArMTQsOSBAQAogaXdsYWduLW9ianMgICAgICAgICAgICAgKz0gaXdsLTEwMDAubwogaXdsYWduLW9ianMgICAgICAgICAgICAgKz0gaXdsLTIwMDAubwogCi1pd2xhZ24tJChDT05GSUdfSVdMV0lGSV9ERUJVR0ZTKSArPSBpd2wtYWduLWRlYnVnZnMubwogaXdsYWduLSQoQ09ORklHX0lXTFdJRklfREVCVUdGUykgKz0gaXdsLWRlYnVnZnMubwogaXdsYWduLSQoQ09ORklHX0lXTFdJRklfREVWSUNFX1RSQUNJTkcpICs9IGl3bC1kZXZ0cmFjZS5vCitpd2xhZ24tJChDT05GSUdfSVdMV0lGSV9ERVZJQ0VfU1ZUT09MKSArPSBpd2wtc3Ytb3Blbi5vCiAKIENGTEFHU19pd2wtZGV2dHJhY2UubyA6PSAtSSQoc3JjKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0xMDAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0xMDAwLmMKaW5kZXggMjdjNTAwNy4uYjRjODE5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTEwMDAuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC00NSw4ICs0NSw2IEBACiAjaW5jbHVkZSAiaXdsLWFnbi5oIgogI2luY2x1ZGUgIml3bC1oZWxwZXJzLmgiCiAjaW5jbHVkZSAiaXdsLWFnbi1ody5oIgotI2luY2x1ZGUgIml3bC1hZ24tbGVkLmgiCi0jaW5jbHVkZSAiaXdsLWFnbi1kZWJ1Z2ZzLmgiCiAKIC8qIEhpZ2hlc3QgZmlybXdhcmUgQVBJIHZlcnNpb24gc3VwcG9ydGVkICovCiAjZGVmaW5lIElXTDEwMDBfVUNPREVfQVBJX01BWCA1CkBAIC01NywxMiArNTUsMTAgQEAKICNkZWZpbmUgSVdMMTAwX1VDT0RFX0FQSV9NSU4gNQogCiAjZGVmaW5lIElXTDEwMDBfRldfUFJFICJpd2x3aWZpLTEwMDAtIgotI2RlZmluZSBfSVdMMTAwMF9NT0RVTEVfRklSTVdBUkUoYXBpKSBJV0wxMDAwX0ZXX1BSRSAjYXBpICIudWNvZGUiCi0jZGVmaW5lIElXTDEwMDBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgX0lXTDEwMDBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkKKyNkZWZpbmUgSVdMMTAwMF9NT0RVTEVfRklSTVdBUkUoYXBpKSBJV0wxMDAwX0ZXX1BSRSAjYXBpICIudWNvZGUiCiAKICNkZWZpbmUgSVdMMTAwX0ZXX1BSRSAiaXdsd2lmaS0xMDAtIgotI2RlZmluZSBfSVdMMTAwX01PRFVMRV9GSVJNV0FSRShhcGkpIElXTDEwMF9GV19QUkUgI2FwaSAiLnVjb2RlIgotI2RlZmluZSBJV0wxMDBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgX0lXTDEwMF9NT0RVTEVfRklSTVdBUkUoYXBpKQorI2RlZmluZSBJV0wxMDBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgSVdMMTAwX0ZXX1BSRSAjYXBpICIudWNvZGUiCiAKIAogLyoKQEAgLTEyNCwxMCArMTIwLDEwIEBACiAKIHN0YXRpYyBpbnQgaXdsMTAwMF9od19zZXRfaHdfcGFyYW1zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlpZiAocHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5udW1fb2ZfcXVldWVzID49IElXTF9NSU5fTlVNX1FVRVVFUyAmJgotCSAgICBwcml2LT5jZmctPm1vZF9wYXJhbXMtPm51bV9vZl9xdWV1ZXMgPD0gSVdMQUdOX05VTV9RVUVVRVMpCisJaWYgKGl3bGFnbl9tb2RfcGFyYW1zLm51bV9vZl9xdWV1ZXMgPj0gSVdMX01JTl9OVU1fUVVFVUVTICYmCisJICAgIGl3bGFnbl9tb2RfcGFyYW1zLm51bV9vZl9xdWV1ZXMgPD0gSVdMQUdOX05VTV9RVUVVRVMpCiAJCXByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPm51bV9vZl9xdWV1ZXMgPQotCQkJcHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5udW1fb2ZfcXVldWVzOworCQkJaXdsYWduX21vZF9wYXJhbXMubnVtX29mX3F1ZXVlczsKIAogCXByaXYtPmh3X3BhcmFtcy5tYXhfdHhxX251bSA9IHByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPm51bV9vZl9xdWV1ZXM7CiAJcHJpdi0+aHdfcGFyYW1zLmRtYV9jaG5sX251bSA9IEZINTBfVENTUl9DSE5MX05VTTsKQEAgLTE0MSw3ICsxMzcsNiBAQAogCXByaXYtPmh3X3BhcmFtcy5tYXhfZGF0YV9zaXplID0gSVdMQUdOX1JUQ19EQVRBX1NJWkU7CiAJcHJpdi0+aHdfcGFyYW1zLm1heF9pbnN0X3NpemUgPSBJV0xBR05fUlRDX0lOU1RfU0laRTsKIAotCXByaXYtPmh3X3BhcmFtcy5tYXhfYnNtX3NpemUgPSAwOwogCXByaXYtPmh3X3BhcmFtcy5odDQwX2NoYW5uZWwgPSAgQklUKElFRUU4MDIxMV9CQU5EXzJHSFopIHwKIAkJCQkJQklUKElFRUU4MDIxMV9CQU5EXzVHSFopOwogCXByaXYtPmh3X3BhcmFtcy5yeF93cnRfcHRyX3JlZyA9IEZIX1JTQ1NSX0NITkwwX1dQVFI7CkBAIC0xNzYsMjQgKzE3MSwxMyBAQAogCiBzdGF0aWMgc3RydWN0IGl3bF9saWJfb3BzIGl3bDEwMDBfbGliID0gewogCS5zZXRfaHdfcGFyYW1zID0gaXdsMTAwMF9od19zZXRfaHdfcGFyYW1zLAotCS50eHFfdXBkYXRlX2J5dGVfY250X3RibCA9IGl3bGFnbl90eHFfdXBkYXRlX2J5dGVfY250X3RibCwKLQkudHhxX2ludmFsX2J5dGVfY250X3RibCA9IGl3bGFnbl90eHFfaW52YWxfYnl0ZV9jbnRfdGJsLAogCS50eHFfc2V0X3NjaGVkID0gaXdsYWduX3R4cV9zZXRfc2NoZWQsCi0JLnR4cV9hZ2dfZW5hYmxlID0gaXdsYWduX3R4cV9hZ2dfZW5hYmxlLAotCS50eHFfYWdnX2Rpc2FibGUgPSBpd2xhZ25fdHhxX2FnZ19kaXNhYmxlLAogCS50eHFfYXR0YWNoX2J1Zl90b190ZmQgPSBpd2xfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkLAogCS50eHFfZnJlZV90ZmQgPSBpd2xfaHdfdHhxX2ZyZWVfdGZkLAogCS50eHFfaW5pdCA9IGl3bF9od190eF9xdWV1ZV9pbml0LAogCS5yeF9oYW5kbGVyX3NldHVwID0gaXdsYWduX3J4X2hhbmRsZXJfc2V0dXAsCiAJLnNldHVwX2RlZmVycmVkX3dvcmsgPSBpd2xhZ25fc2V0dXBfZGVmZXJyZWRfd29yaywKIAkuaXNfdmFsaWRfcnRjX2RhdGFfYWRkciA9IGl3bGFnbl9od192YWxpZF9ydGNfZGF0YV9hZGRyLAotCS5sb2FkX3Vjb2RlID0gaXdsYWduX2xvYWRfdWNvZGUsCi0JLmR1bXBfbmljX2V2ZW50X2xvZyA9IGl3bF9kdW1wX25pY19ldmVudF9sb2csCi0JLmR1bXBfbmljX2Vycm9yX2xvZyA9IGl3bF9kdW1wX25pY19lcnJvcl9sb2csCi0JLmR1bXBfY3NyID0gaXdsX2R1bXBfY3NyLAotCS5kdW1wX2ZoID0gaXdsX2R1bXBfZmgsCi0JLmluaXRfYWxpdmVfc3RhcnQgPSBpd2xhZ25faW5pdF9hbGl2ZV9zdGFydCwKLQkuYWxpdmVfbm90aWZ5ID0gaXdsYWduX2FsaXZlX25vdGlmeSwKIAkuc2VuZF90eF9wb3dlciA9IGl3bGFnbl9zZW5kX3R4X3Bvd2VyLAogCS51cGRhdGVfY2hhaW5fZmxhZ3MgPSBpd2xfdXBkYXRlX2NoYWluX2ZsYWdzLAogCS5hcG1fb3BzID0gewpAQCAtMjA4LDQ1ICsxOTIsMjEgQEAKIAkJCUVFUFJPTV9SRUdfQkFORF80X0NIQU5ORUxTLAogCQkJRUVQUk9NX1JFR19CQU5EXzVfQ0hBTk5FTFMsCiAJCQlFRVBST01fUkVHX0JBTkRfMjRfSFQ0MF9DSEFOTkVMUywKLQkJCUVFUFJPTV9SRUdfQkFORF81Ml9IVDQwX0NIQU5ORUxTCisJCQlFRVBST01fUkVHVUxBVE9SWV9CQU5EX05PX0hUNDAsCiAJCX0sCi0JCS5hY3F1aXJlX3NlbWFwaG9yZSA9IGl3bGNvcmVfZWVwcm9tX2FjcXVpcmVfc2VtYXBob3JlLAotCQkucmVsZWFzZV9zZW1hcGhvcmUgPSBpd2xjb3JlX2VlcHJvbV9yZWxlYXNlX3NlbWFwaG9yZSwKLQkJLmNhbGliX3ZlcnNpb24JPSBpd2xhZ25fZWVwcm9tX2NhbGliX3ZlcnNpb24sCiAJCS5xdWVyeV9hZGRyID0gaXdsYWduX2VlcHJvbV9xdWVyeV9hZGRyLAogCX0sCi0JLmlzcl9vcHMgPSB7Ci0JCS5pc3IgPSBpd2xfaXNyX2ljdCwKLQkJLmZyZWUgPSBpd2xfZnJlZV9pc3JfaWN0LAotCQkuYWxsb2MgPSBpd2xfYWxsb2NfaXNyX2ljdCwKLQkJLnJlc2V0ID0gaXdsX3Jlc2V0X2ljdCwKLQkJLmRpc2FibGUgPSBpd2xfZGlzYWJsZV9pY3QsCi0JfSwKIAkudGVtcF9vcHMgPSB7CiAJCS50ZW1wZXJhdHVyZSA9IGl3bGFnbl90ZW1wZXJhdHVyZSwKIAkgfSwKLQkuZGVidWdmc19vcHMgPSB7Ci0JCS5yeF9zdGF0c19yZWFkID0gaXdsX3Vjb2RlX3J4X3N0YXRzX3JlYWQsCi0JCS50eF9zdGF0c19yZWFkID0gaXdsX3Vjb2RlX3R4X3N0YXRzX3JlYWQsCi0JCS5nZW5lcmFsX3N0YXRzX3JlYWQgPSBpd2xfdWNvZGVfZ2VuZXJhbF9zdGF0c19yZWFkLAotCQkuYnRfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV9idF9zdGF0c19yZWFkLAotCQkucmVwbHlfdHhfZXJyb3IgPSBpd2xfcmVwbHlfdHhfZXJyb3JfcmVhZCwKLQl9LAogCS50eGZpZm9fZmx1c2ggPSBpd2xhZ25fdHhmaWZvX2ZsdXNoLAogCS5kZXZfdHhmaWZvX2ZsdXNoID0gaXdsYWduX2Rldl90eGZpZm9fZmx1c2gsCi0JLnR0X29wcyA9IHsKLQkJLmxvd2VyX3Bvd2VyX2RldGVjdGlvbiA9IGl3bF90dF9pc19sb3dfcG93ZXJfc3RhdGUsCi0JCS50dF9wb3dlcl9tb2RlID0gaXdsX3R0X2N1cnJlbnRfcG93ZXJfbW9kZSwKLQkJLmN0X2tpbGxfY2hlY2sgPSBpd2xfY2hlY2tfZm9yX2N0X2tpbGwsCi0JfQogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpd2xfb3BzIGl3bDEwMDBfb3BzID0gewogCS5saWIgPSAmaXdsMTAwMF9saWIsCiAJLmhjbWQgPSAmaXdsYWduX2hjbWQsCiAJLnV0aWxzID0gJml3bGFnbl9oY21kX3V0aWxzLAotCS5sZWQgPSAmaXdsYWduX2xlZF9vcHMsCi0JLmllZWU4MDIxMV9vcHMgPSAmaXdsYWduX2h3X29wcywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXdsX2Jhc2VfcGFyYW1zIGl3bDEwMDBfYmFzZV9wYXJhbXMgPSB7CkBAIC0yNTQsOCArMjE0LDYgQEAKIAkubnVtX29mX2FtcGR1X3F1ZXVlcyA9IElXTEFHTl9OVU1fQU1QRFVfUVVFVUVTLAogCS5lZXByb21fc2l6ZSA9IE9UUF9MT1dfSU1BR0VfU0laRSwKIAkucGxsX2NmZ192YWwgPSBDU1I1MF9BTkFfUExMX0NGR19WQUwsCi0JLnNldF9sMHMgPSB0cnVlLAotCS51c2VfYnNtID0gZmFsc2UsCiAJLm1heF9sbF9pdGVtcyA9IE9UUF9NQVhfTExfSVRFTVNfMTAwMCwKIAkuc2hhZG93X3JhbV9zdXBwb3J0ID0gZmFsc2UsCiAJLmxlZF9jb21wZW5zYXRpb24gPSA1MSwKQEAgLTI2NSw5ICsyMjMsNiBAQAogCS5jaGFpbl9ub2lzZV9zY2FsZSA9IDEwMDAsCiAJLndkX3RpbWVvdXQgPSBJV0xfREVGX1dEX1RJTUVPVVQsCiAJLm1heF9ldmVudF9sb2dfc2l6ZSA9IDEyOCwKLQkudWNvZGVfdHJhY2luZyA9IHRydWUsCi0JLnNlbnNpdGl2aXR5X2NhbGliX2J5X2RyaXZlciA9IHRydWUsCi0JLmNoYWluX25vaXNlX2NhbGliX2J5X2RyaXZlciA9IHRydWUsCiB9Owogc3RhdGljIHN0cnVjdCBpd2xfaHRfcGFyYW1zIGl3bDEwMDBfaHRfcGFyYW1zID0gewogCS5odF9ncmVlbmZpZWxkX3N1cHBvcnQgPSB0cnVlLApAQCAtMjgxLDcgKzIzNiw2IEBACiAJLmVlcHJvbV92ZXIgPSBFRVBST01fMTAwMF9FRVBST01fVkVSU0lPTiwJCVwKIAkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV8xMDAwX1RYX1BPV0VSX1ZFUlNJT04sCVwKIAkub3BzID0gJml3bDEwMDBfb3BzLAkJCQkJXAotCS5tb2RfcGFyYW1zID0gJml3bGFnbl9tb2RfcGFyYW1zLAkJCVwKIAkuYmFzZV9wYXJhbXMgPSAmaXdsMTAwMF9iYXNlX3BhcmFtcywJCQlcCiAJLmxlZF9tb2RlID0gSVdMX0xFRF9CTElOSwogCkBAIC0zMDMsNyArMjU3LDYgQEAKIAkuZWVwcm9tX3ZlciA9IEVFUFJPTV8xMDAwX0VFUFJPTV9WRVJTSU9OLAkJXAogCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzEwMDBfVFhfUE9XRVJfVkVSU0lPTiwJXAogCS5vcHMgPSAmaXdsMTAwMF9vcHMsCQkJCQlcCi0JLm1vZF9wYXJhbXMgPSAmaXdsYWduX21vZF9wYXJhbXMsCQkJXAogCS5iYXNlX3BhcmFtcyA9ICZpd2wxMDAwX2Jhc2VfcGFyYW1zLAkJCVwKIAkubGVkX21vZGUgPSBJV0xfTEVEX1JGX1NUQVRFLAkJCQlcCiAJLnJ4X3dpdGhfc2lzb19kaXZlcnNpdHkgPSB0cnVlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0yMDAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0yMDAwLmMKaW5kZXggZDdiNjEyNi4uODliOGRhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMjAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTIwMDAuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC00NiwzMCArNDYsMjUgQEAKICNpbmNsdWRlICJpd2wtaGVscGVycy5oIgogI2luY2x1ZGUgIml3bC1hZ24taHcuaCIKICNpbmNsdWRlICJpd2wtNjAwMC1ody5oIgotI2luY2x1ZGUgIml3bC1hZ24tbGVkLmgiCi0jaW5jbHVkZSAiaXdsLWFnbi1kZWJ1Z2ZzLmgiCiAKIC8qIEhpZ2hlc3QgZmlybXdhcmUgQVBJIHZlcnNpb24gc3VwcG9ydGVkICovCiAjZGVmaW5lIElXTDIwMzBfVUNPREVfQVBJX01BWCA1CiAjZGVmaW5lIElXTDIwMDBfVUNPREVfQVBJX01BWCA1Ci0jZGVmaW5lIElXTDIwMF9VQ09ERV9BUElfTUFYIDUKKyNkZWZpbmUgSVdMMTA1X1VDT0RFX0FQSV9NQVggNQogCiAvKiBMb3dlc3QgZmlybXdhcmUgQVBJIHZlcnNpb24gc3VwcG9ydGVkICovCiAjZGVmaW5lIElXTDIwMzBfVUNPREVfQVBJX01JTiA1CiAjZGVmaW5lIElXTDIwMDBfVUNPREVfQVBJX01JTiA1Ci0jZGVmaW5lIElXTDIwMF9VQ09ERV9BUElfTUlOIDUKKyNkZWZpbmUgSVdMMTA1X1VDT0RFX0FQSV9NSU4gNQogCiAjZGVmaW5lIElXTDIwMzBfRldfUFJFICJpd2x3aWZpLTIwMzAtIgotI2RlZmluZSBfSVdMMjAzMF9NT0RVTEVfRklSTVdBUkUoYXBpKSBJV0wyMDMwX0ZXX1BSRSAjYXBpICIudWNvZGUiCi0jZGVmaW5lIElXTDIwMzBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgX0lXTDIwMzBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkKKyNkZWZpbmUgSVdMMjAzMF9NT0RVTEVfRklSTVdBUkUoYXBpKSBJV0wyMDMwX0ZXX1BSRSAjYXBpICIudWNvZGUiCiAKICNkZWZpbmUgSVdMMjAwMF9GV19QUkUgIml3bHdpZmktMjAwMC0iCi0jZGVmaW5lIF9JV0wyMDAwX01PRFVMRV9GSVJNV0FSRShhcGkpIElXTDIwMDBfRldfUFJFICNhcGkgIi51Y29kZSIKLSNkZWZpbmUgSVdMMjAwMF9NT0RVTEVfRklSTVdBUkUoYXBpKSBfSVdMMjAwMF9NT0RVTEVfRklSTVdBUkUoYXBpKQorI2RlZmluZSBJV0wyMDAwX01PRFVMRV9GSVJNV0FSRShhcGkpIElXTDIwMDBfRldfUFJFICNhcGkgIi51Y29kZSIKIAotI2RlZmluZSBJV0wyMDBfRldfUFJFICJpd2x3aWZpLTIwMC0iCi0jZGVmaW5lIF9JV0wyMDBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgSVdMMjAwX0ZXX1BSRSAjYXBpICIudWNvZGUiCi0jZGVmaW5lIElXTDIwMF9NT0RVTEVfRklSTVdBUkUoYXBpKSBfSVdMMjAwX01PRFVMRV9GSVJNV0FSRShhcGkpCisjZGVmaW5lIElXTDEwNV9GV19QUkUgIml3bHdpZmktMTA1LSIKKyNkZWZpbmUgSVdMMTA1X01PRFVMRV9GSVJNV0FSRShhcGkpIElXTDEwNV9GV19QUkUgI2FwaSAiLnVjb2RlIgogCiBzdGF0aWMgdm9pZCBpd2wyMDAwX3NldF9jdF90aHJlc2hvbGQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewpAQCAtMTAxLDYgKzk2LDggQEAKIAkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0dQX0RSSVZFUl9SRUcsCiAJCQkgICAgQ1NSX0dQX0RSSVZFUl9SRUdfQklUX1JBRElPX0lRX0lOVkVSKTsKIAorCWlmIChwcml2LT5jZmctPmRpc2FibGVfb3RwX3JlZnJlc2gpCisJCWl3bF93cml0ZV9wcnBoKHByaXYsIEFQTUdfQU5BTE9HX1NWUl9SRUcsIDB4ODAwMDAwMTApOwogfQogCiBzdGF0aWMgc3RydWN0IGl3bF9zZW5zaXRpdml0eV9yYW5nZXMgaXdsMjAwMF9zZW5zaXRpdml0eSA9IHsKQEAgLTEzMCwxMCArMTI3LDEwIEBACiAKIHN0YXRpYyBpbnQgaXdsMjAwMF9od19zZXRfaHdfcGFyYW1zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlpZiAocHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5udW1fb2ZfcXVldWVzID49IElXTF9NSU5fTlVNX1FVRVVFUyAmJgotCSAgICBwcml2LT5jZmctPm1vZF9wYXJhbXMtPm51bV9vZl9xdWV1ZXMgPD0gSVdMQUdOX05VTV9RVUVVRVMpCisJaWYgKGl3bGFnbl9tb2RfcGFyYW1zLm51bV9vZl9xdWV1ZXMgPj0gSVdMX01JTl9OVU1fUVVFVUVTICYmCisJICAgIGl3bGFnbl9tb2RfcGFyYW1zLm51bV9vZl9xdWV1ZXMgPD0gSVdMQUdOX05VTV9RVUVVRVMpCiAJCXByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPm51bV9vZl9xdWV1ZXMgPQotCQkJcHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5udW1fb2ZfcXVldWVzOworCQkJaXdsYWduX21vZF9wYXJhbXMubnVtX29mX3F1ZXVlczsKIAogCXByaXYtPmh3X3BhcmFtcy5tYXhfdHhxX251bSA9IHByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPm51bV9vZl9xdWV1ZXM7CiAJcHJpdi0+aHdfcGFyYW1zLmRtYV9jaG5sX251bSA9IEZINTBfVENTUl9DSE5MX05VTTsKQEAgLTE0Nyw3ICsxNDQsNiBAQAogCXByaXYtPmh3X3BhcmFtcy5tYXhfZGF0YV9zaXplID0gSVdMNjBfUlRDX0RBVEFfU0laRTsKIAlwcml2LT5od19wYXJhbXMubWF4X2luc3Rfc2l6ZSA9IElXTDYwX1JUQ19JTlNUX1NJWkU7CiAKLQlwcml2LT5od19wYXJhbXMubWF4X2JzbV9zaXplID0gMDsKIAlwcml2LT5od19wYXJhbXMuaHQ0MF9jaGFubmVsID0gIEJJVChJRUVFODAyMTFfQkFORF8yR0haKSB8CiAJCQkJCUJJVChJRUVFODAyMTFfQkFORF81R0haKTsKIAlwcml2LT5od19wYXJhbXMucnhfd3J0X3B0cl9yZWcgPSBGSF9SU0NTUl9DSE5MMF9XUFRSOwpAQCAtMjU2LDExICsyNTIsNyBAQAogCiBzdGF0aWMgc3RydWN0IGl3bF9saWJfb3BzIGl3bDIwMDBfbGliID0gewogCS5zZXRfaHdfcGFyYW1zID0gaXdsMjAwMF9od19zZXRfaHdfcGFyYW1zLAotCS50eHFfdXBkYXRlX2J5dGVfY250X3RibCA9IGl3bGFnbl90eHFfdXBkYXRlX2J5dGVfY250X3RibCwKLQkudHhxX2ludmFsX2J5dGVfY250X3RibCA9IGl3bGFnbl90eHFfaW52YWxfYnl0ZV9jbnRfdGJsLAogCS50eHFfc2V0X3NjaGVkID0gaXdsYWduX3R4cV9zZXRfc2NoZWQsCi0JLnR4cV9hZ2dfZW5hYmxlID0gaXdsYWduX3R4cV9hZ2dfZW5hYmxlLAotCS50eHFfYWdnX2Rpc2FibGUgPSBpd2xhZ25fdHhxX2FnZ19kaXNhYmxlLAogCS50eHFfYXR0YWNoX2J1Zl90b190ZmQgPSBpd2xfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkLAogCS50eHFfZnJlZV90ZmQgPSBpd2xfaHdfdHhxX2ZyZWVfdGZkLAogCS50eHFfaW5pdCA9IGl3bF9od190eF9xdWV1ZV9pbml0LApAQCAtMjY4LDEzICsyNjAsNiBAQAogCS5zZXR1cF9kZWZlcnJlZF93b3JrID0gaXdsYWduX2J0X3NldHVwX2RlZmVycmVkX3dvcmssCiAJLmNhbmNlbF9kZWZlcnJlZF93b3JrID0gaXdsYWduX2J0X2NhbmNlbF9kZWZlcnJlZF93b3JrLAogCS5pc192YWxpZF9ydGNfZGF0YV9hZGRyID0gaXdsYWduX2h3X3ZhbGlkX3J0Y19kYXRhX2FkZHIsCi0JLmxvYWRfdWNvZGUgPSBpd2xhZ25fbG9hZF91Y29kZSwKLQkuZHVtcF9uaWNfZXZlbnRfbG9nID0gaXdsX2R1bXBfbmljX2V2ZW50X2xvZywKLQkuZHVtcF9uaWNfZXJyb3JfbG9nID0gaXdsX2R1bXBfbmljX2Vycm9yX2xvZywKLQkuZHVtcF9jc3IgPSBpd2xfZHVtcF9jc3IsCi0JLmR1bXBfZmggPSBpd2xfZHVtcF9maCwKLQkuaW5pdF9hbGl2ZV9zdGFydCA9IGl3bGFnbl9pbml0X2FsaXZlX3N0YXJ0LAotCS5hbGl2ZV9ub3RpZnkgPSBpd2xhZ25fYWxpdmVfbm90aWZ5LAogCS5zZW5kX3R4X3Bvd2VyID0gaXdsYWduX3NlbmRfdHhfcG93ZXIsCiAJLnVwZGF0ZV9jaGFpbl9mbGFncyA9IGl3bF91cGRhdGVfY2hhaW5fZmxhZ3MsCiAJLnNldF9jaGFubmVsX3N3aXRjaCA9IGl3bDIwMzBfaHdfY2hhbm5lbF9zd2l0Y2gsCkBAIC0yOTAsNzAgKzI3NSw0MCBAQAogCQkJRUVQUk9NX1JFR19CQU5EXzRfQ0hBTk5FTFMsCiAJCQlFRVBST01fUkVHX0JBTkRfNV9DSEFOTkVMUywKIAkJCUVFUFJPTV82MDAwX1JFR19CQU5EXzI0X0hUNDBfQ0hBTk5FTFMsCi0JCQlFRVBST01fUkVHX0JBTkRfNTJfSFQ0MF9DSEFOTkVMUworCQkJRUVQUk9NX1JFR1VMQVRPUllfQkFORF9OT19IVDQwLAogCQl9LAotCQkuYWNxdWlyZV9zZW1hcGhvcmUgPSBpd2xjb3JlX2VlcHJvbV9hY3F1aXJlX3NlbWFwaG9yZSwKLQkJLnJlbGVhc2Vfc2VtYXBob3JlID0gaXdsY29yZV9lZXByb21fcmVsZWFzZV9zZW1hcGhvcmUsCi0JCS5jYWxpYl92ZXJzaW9uICA9IGl3bGFnbl9lZXByb21fY2FsaWJfdmVyc2lvbiwKIAkJLnF1ZXJ5X2FkZHIgPSBpd2xhZ25fZWVwcm9tX3F1ZXJ5X2FkZHIsCiAJCS51cGRhdGVfZW5oYW5jZWRfdHhwb3dlciA9IGl3bGNvcmVfZWVwcm9tX2VuaGFuY2VkX3R4cG93ZXIsCiAJfSwKLQkuaXNyX29wcyA9IHsKLQkJLmlzciA9IGl3bF9pc3JfaWN0LAotCQkuZnJlZSA9IGl3bF9mcmVlX2lzcl9pY3QsCi0JCS5hbGxvYyA9IGl3bF9hbGxvY19pc3JfaWN0LAotCQkucmVzZXQgPSBpd2xfcmVzZXRfaWN0LAotCQkuZGlzYWJsZSA9IGl3bF9kaXNhYmxlX2ljdCwKLQl9LAogCS50ZW1wX29wcyA9IHsKIAkJLnRlbXBlcmF0dXJlID0gaXdsYWduX3RlbXBlcmF0dXJlLAogCX0sCi0JLmRlYnVnZnNfb3BzID0gewotCQkucnhfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV9yeF9zdGF0c19yZWFkLAotCQkudHhfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV90eF9zdGF0c19yZWFkLAotCQkuZ2VuZXJhbF9zdGF0c19yZWFkID0gaXdsX3Vjb2RlX2dlbmVyYWxfc3RhdHNfcmVhZCwKLQkJLmJ0X3N0YXRzX3JlYWQgPSBpd2xfdWNvZGVfYnRfc3RhdHNfcmVhZCwKLQkJLnJlcGx5X3R4X2Vycm9yID0gaXdsX3JlcGx5X3R4X2Vycm9yX3JlYWQsCi0JfSwKIAkudHhmaWZvX2ZsdXNoID0gaXdsYWduX3R4Zmlmb19mbHVzaCwKIAkuZGV2X3R4Zmlmb19mbHVzaCA9IGl3bGFnbl9kZXZfdHhmaWZvX2ZsdXNoLAotCS50dF9vcHMgPSB7Ci0JCS5sb3dlcl9wb3dlcl9kZXRlY3Rpb24gPSBpd2xfdHRfaXNfbG93X3Bvd2VyX3N0YXRlLAotCQkudHRfcG93ZXJfbW9kZSA9IGl3bF90dF9jdXJyZW50X3Bvd2VyX21vZGUsCi0JCS5jdF9raWxsX2NoZWNrID0gaXdsX2NoZWNrX2Zvcl9jdF9raWxsLAotCX0KIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX29wcyBpd2wyMDAwX29wcyA9IHsKIAkubGliID0gJml3bDIwMDBfbGliLAogCS5oY21kID0gJml3bGFnbl9oY21kLAogCS51dGlscyA9ICZpd2xhZ25faGNtZF91dGlscywKLQkubGVkID0gJml3bGFnbl9sZWRfb3BzLAotCS5pZWVlODAyMTFfb3BzID0gJml3bGFnbl9od19vcHMsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGl3bF9vcHMgaXdsMjAzMF9vcHMgPSB7CiAJLmxpYiA9ICZpd2wyMDAwX2xpYiwKIAkuaGNtZCA9ICZpd2xhZ25fYnRfaGNtZCwKIAkudXRpbHMgPSAmaXdsYWduX2hjbWRfdXRpbHMsCi0JLmxlZCA9ICZpd2xhZ25fbGVkX29wcywKLQkuaWVlZTgwMjExX29wcyA9ICZpd2xhZ25faHdfb3BzLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpd2xfb3BzIGl3bDIwMF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGl3bF9vcHMgaXdsMTA1X29wcyA9IHsKIAkubGliID0gJml3bDIwMDBfbGliLAogCS5oY21kID0gJml3bGFnbl9oY21kLAogCS51dGlscyA9ICZpd2xhZ25faGNtZF91dGlscywKLQkubGVkID0gJml3bGFnbl9sZWRfb3BzLAotCS5pZWVlODAyMTFfb3BzID0gJml3bGFnbl9od19vcHMsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGl3bF9vcHMgaXdsMjMwX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX29wcyBpd2wxMzVfb3BzID0gewogCS5saWIgPSAmaXdsMjAwMF9saWIsCiAJLmhjbWQgPSAmaXdsYWduX2J0X2hjbWQsCiAJLnV0aWxzID0gJml3bGFnbl9oY21kX3V0aWxzLAotCS5sZWQgPSAmaXdsYWduX2xlZF9vcHMsCi0JLmllZWU4MDIxMV9vcHMgPSAmaXdsYWduX2h3X29wcywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXdsX2Jhc2VfcGFyYW1zIGl3bDIwMDBfYmFzZV9wYXJhbXMgPSB7CkBAIC0zNjEsOCArMzE2LDYgQEAKIAkubnVtX29mX3F1ZXVlcyA9IElXTEFHTl9OVU1fUVVFVUVTLAogCS5udW1fb2ZfYW1wZHVfcXVldWVzID0gSVdMQUdOX05VTV9BTVBEVV9RVUVVRVMsCiAJLnBsbF9jZmdfdmFsID0gMCwKLQkuc2V0X2wwcyA9IHRydWUsCi0JLnVzZV9ic20gPSBmYWxzZSwKIAkubWF4X2xsX2l0ZW1zID0gT1RQX01BWF9MTF9JVEVNU18yeDAwLAogCS5zaGFkb3dfcmFtX3N1cHBvcnQgPSB0cnVlLAogCS5sZWRfY29tcGVuc2F0aW9uID0gNTEsCkBAIC0zNzMsOSArMzI2LDYgQEAKIAkuY2hhaW5fbm9pc2Vfc2NhbGUgPSAxMDAwLAogCS53ZF90aW1lb3V0ID0gSVdMX0RFRl9XRF9USU1FT1VULAogCS5tYXhfZXZlbnRfbG9nX3NpemUgPSA1MTIsCi0JLnVjb2RlX3RyYWNpbmcgPSB0cnVlLAotCS5zZW5zaXRpdml0eV9jYWxpYl9ieV9kcml2ZXIgPSB0cnVlLAotCS5jaGFpbl9ub2lzZV9jYWxpYl9ieV9kcml2ZXIgPSB0cnVlLAogCS5zaGFkb3dfcmVnX2VuYWJsZSA9IHRydWUsCiB9OwogCkBAIC0zODUsOCArMzM1LDYgQEAKIAkubnVtX29mX3F1ZXVlcyA9IElXTEFHTl9OVU1fUVVFVUVTLAogCS5udW1fb2ZfYW1wZHVfcXVldWVzID0gSVdMQUdOX05VTV9BTVBEVV9RVUVVRVMsCiAJLnBsbF9jZmdfdmFsID0gMCwKLQkuc2V0X2wwcyA9IHRydWUsCi0JLnVzZV9ic20gPSBmYWxzZSwKIAkubWF4X2xsX2l0ZW1zID0gT1RQX01BWF9MTF9JVEVNU18yeDAwLAogCS5zaGFkb3dfcmFtX3N1cHBvcnQgPSB0cnVlLAogCS5sZWRfY29tcGVuc2F0aW9uID0gNTcsCkBAIC0zOTcsOSArMzQ1LDYgQEAKIAkuY2hhaW5fbm9pc2Vfc2NhbGUgPSAxMDAwLAogCS53ZF90aW1lb3V0ID0gSVdMX0xPTkdfV0RfVElNRU9VVCwKIAkubWF4X2V2ZW50X2xvZ19zaXplID0gNTEyLAotCS51Y29kZV90cmFjaW5nID0gdHJ1ZSwKLQkuc2Vuc2l0aXZpdHlfY2FsaWJfYnlfZHJpdmVyID0gdHJ1ZSwKLQkuY2hhaW5fbm9pc2VfY2FsaWJfYnlfZHJpdmVyID0gdHJ1ZSwKIAkuc2hhZG93X3JlZ19lbmFibGUgPSB0cnVlLAogfTsKIApAQCAtNDA5LDcgKzM1NCw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGl3bF9idF9wYXJhbXMgaXdsMjAzMF9idF9wYXJhbXMgPSB7Ci0JLmJ0X3N0YXRpc3RpY3MgPSB0cnVlLAogCS8qIER1ZSB0byBibHVldG9vdGgsIHdlIHRyYW5zbWl0IDIuNCBHSHogcHJvYmVzIG9ubHkgb24gYW50ZW5uYSBBICovCiAJLmFkdmFuY2VkX2J0X2NvZXhpc3QgPSB0cnVlLAogCS5hZ2dfdGltZV9saW1pdCA9IEJUX0FHR19USFJFU0hPTERfREVGLApAQCAtNDI2LDEyICszNzAsMTIgQEAKIAkuZWVwcm9tX3ZlciA9IEVFUFJPTV8yMDAwX0VFUFJPTV9WRVJTSU9OLAkJXAogCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzIwMDBfVFhfUE9XRVJfVkVSU0lPTiwJXAogCS5vcHMgPSAmaXdsMjAwMF9vcHMsCQkJCQlcCi0JLm1vZF9wYXJhbXMgPSAmaXdsYWduX21vZF9wYXJhbXMsCQkJXAogCS5iYXNlX3BhcmFtcyA9ICZpd2wyMDAwX2Jhc2VfcGFyYW1zLAkJCVwKIAkubmVlZF9kY19jYWxpYiA9IHRydWUsCQkJCQlcCiAJLm5lZWRfdGVtcF9vZmZzZXRfY2FsaWIgPSB0cnVlLAkJCQlcCiAJLmxlZF9tb2RlID0gSVdMX0xFRF9SRl9TVEFURSwJCQkJXAotCS5pcV9pbnZlcnQgPSB0cnVlCQkJCQlcCisJLmlxX2ludmVydCA9IHRydWUsCQkJCQlcCisJLmRpc2FibGVfb3RwX3JlZnJlc2ggPSB0cnVlCQkJCVwKIAogc3RydWN0IGl3bF9jZmcgaXdsMjAwMF8yYmduX2NmZyA9IHsKIAkubmFtZSA9ICIyMDAwIFNlcmllcyAyeDIgQkdOIiwKQEAgLTQ1MSw3ICszOTUsNiBAQAogCS5lZXByb21fdmVyID0gRUVQUk9NXzIwMDBfRUVQUk9NX1ZFUlNJT04sCQlcCiAJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fMjAwMF9UWF9QT1dFUl9WRVJTSU9OLAlcCiAJLm9wcyA9ICZpd2wyMDMwX29wcywJCQkJCVwKLQkubW9kX3BhcmFtcyA9ICZpd2xhZ25fbW9kX3BhcmFtcywJCQlcCiAJLmJhc2VfcGFyYW1zID0gJml3bDIwMzBfYmFzZV9wYXJhbXMsCQkJXAogCS5idF9wYXJhbXMgPSAmaXdsMjAzMF9idF9wYXJhbXMsCQkJXAogCS5uZWVkX2RjX2NhbGliID0gdHJ1ZSwJCQkJCVwKQEAgLTQ3MSw0NSArNDE0LDEzIEBACiAJSVdMX0RFVklDRV8yMDMwLAogfTsKIAotI2RlZmluZSBJV0xfREVWSUNFXzYwMzUJCQkJCQlcCi0JLmZ3X25hbWVfcHJlID0gSVdMMjAzMF9GV19QUkUsCQkJCVwKLQkudWNvZGVfYXBpX21heCA9IElXTDIwMzBfVUNPREVfQVBJX01BWCwJCQlcCi0JLnVjb2RlX2FwaV9taW4gPSBJV0wyMDMwX1VDT0RFX0FQSV9NSU4sCQkJXAotCS5lZXByb21fdmVyID0gRUVQUk9NXzYwMzVfRUVQUk9NX1ZFUlNJT04sCQlcCi0JLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNjAzNV9UWF9QT1dFUl9WRVJTSU9OLAlcCi0JLm9wcyA9ICZpd2wyMDMwX29wcywJCQkJCVwKLQkubW9kX3BhcmFtcyA9ICZpd2xhZ25fbW9kX3BhcmFtcywJCQlcCi0JLmJhc2VfcGFyYW1zID0gJml3bDIwMzBfYmFzZV9wYXJhbXMsCQkJXAotCS5idF9wYXJhbXMgPSAmaXdsMjAzMF9idF9wYXJhbXMsCQkJXAotCS5uZWVkX2RjX2NhbGliID0gdHJ1ZSwJCQkJCVwKLQkubmVlZF90ZW1wX29mZnNldF9jYWxpYiA9IHRydWUsCQkJCVwKLQkubGVkX21vZGUgPSBJV0xfTEVEX1JGX1NUQVRFLAkJCQlcCi0JLmFkdl9wbSA9IHRydWUJCQkJCQlcCi0KLXN0cnVjdCBpd2xfY2ZnIGl3bDYwMzVfMmFnbl9jZmcgPSB7Ci0JLm5hbWUgPSAiMjAwMCBTZXJpZXMgMngyIEFHTi9CVCIsCi0JSVdMX0RFVklDRV82MDM1LAotCS5odF9wYXJhbXMgPSAmaXdsMjAwMF9odF9wYXJhbXMsCi19OwotCi1zdHJ1Y3QgaXdsX2NmZyBpd2w2MDM1XzJhYmdfY2ZnID0gewotCS5uYW1lID0gIjIwMDAgU2VyaWVzIDJ4MiBBQkcvQlQiLAotCUlXTF9ERVZJQ0VfNjAzNSwKLX07Ci0KLXN0cnVjdCBpd2xfY2ZnIGl3bDYwMzVfMmJnX2NmZyA9IHsKLQkubmFtZSA9ICIyMDAwIFNlcmllcyAyeDIgQkcvQlQiLAotCUlXTF9ERVZJQ0VfNjAzNSwKLX07Ci0KLSNkZWZpbmUgSVdMX0RFVklDRV8yMDAJCQkJCQlcCi0JLmZ3X25hbWVfcHJlID0gSVdMMjAwX0ZXX1BSRSwJCQkJXAotCS51Y29kZV9hcGlfbWF4ID0gSVdMMjAwX1VDT0RFX0FQSV9NQVgsCQkJXAotCS51Y29kZV9hcGlfbWluID0gSVdMMjAwX1VDT0RFX0FQSV9NSU4sCQkJXAorI2RlZmluZSBJV0xfREVWSUNFXzEwNQkJCQkJCVwKKwkuZndfbmFtZV9wcmUgPSBJV0wxMDVfRldfUFJFLAkJCQlcCisJLnVjb2RlX2FwaV9tYXggPSBJV0wxMDVfVUNPREVfQVBJX01BWCwJCQlcCisJLnVjb2RlX2FwaV9taW4gPSBJV0wxMDVfVUNPREVfQVBJX01JTiwJCQlcCiAJLmVlcHJvbV92ZXIgPSBFRVBST01fMjAwMF9FRVBST01fVkVSU0lPTiwJCVwKIAkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV8yMDAwX1RYX1BPV0VSX1ZFUlNJT04sCVwKLQkub3BzID0gJml3bDIwMF9vcHMsCQkJCQlcCi0JLm1vZF9wYXJhbXMgPSAmaXdsYWduX21vZF9wYXJhbXMsCQkJXAorCS5vcHMgPSAmaXdsMTA1X29wcywJCQkJCVwKIAkuYmFzZV9wYXJhbXMgPSAmaXdsMjAwMF9iYXNlX3BhcmFtcywJCQlcCiAJLm5lZWRfZGNfY2FsaWIgPSB0cnVlLAkJCQkJXAogCS5uZWVkX3RlbXBfb2Zmc2V0X2NhbGliID0gdHJ1ZSwJCQkJXApAQCAtNTE3LDI1ICs0MjgsMjQgQEAKIAkuYWR2X3BtID0gdHJ1ZSwJCQkJCQlcCiAJLnJ4X3dpdGhfc2lzb19kaXZlcnNpdHkgPSB0cnVlCQkJCVwKIAotc3RydWN0IGl3bF9jZmcgaXdsMjAwX2JnX2NmZyA9IHsKLQkubmFtZSA9ICIyMDAgU2VyaWVzIDF4MSBCRyIsCi0JSVdMX0RFVklDRV8yMDAsCitzdHJ1Y3QgaXdsX2NmZyBpd2wxMDVfYmdfY2ZnID0geworCS5uYW1lID0gIjEwNSBTZXJpZXMgMXgxIEJHIiwKKwlJV0xfREVWSUNFXzEwNSwKIH07CiAKLXN0cnVjdCBpd2xfY2ZnIGl3bDIwMF9iZ25fY2ZnID0gewotCS5uYW1lID0gIjIwMCBTZXJpZXMgMXgxIEJHTiIsCi0JSVdMX0RFVklDRV8yMDAsCitzdHJ1Y3QgaXdsX2NmZyBpd2wxMDVfYmduX2NmZyA9IHsKKwkubmFtZSA9ICIxMDUgU2VyaWVzIDF4MSBCR04iLAorCUlXTF9ERVZJQ0VfMTA1LAogCS5odF9wYXJhbXMgPSAmaXdsMjAwMF9odF9wYXJhbXMsCiB9OwogCi0jZGVmaW5lIElXTF9ERVZJQ0VfMjMwCQkJCQkJXAotCS5md19uYW1lX3ByZSA9IElXTDIwMF9GV19QUkUsCQkJCVwKLQkudWNvZGVfYXBpX21heCA9IElXTDIwMF9VQ09ERV9BUElfTUFYLAkJCVwKLQkudWNvZGVfYXBpX21pbiA9IElXTDIwMF9VQ09ERV9BUElfTUlOLAkJCVwKKyNkZWZpbmUgSVdMX0RFVklDRV8xMzUJCQkJCQlcCisJLmZ3X25hbWVfcHJlID0gSVdMMTA1X0ZXX1BSRSwJCQkJXAorCS51Y29kZV9hcGlfbWF4ID0gSVdMMTA1X1VDT0RFX0FQSV9NQVgsCQkJXAorCS51Y29kZV9hcGlfbWluID0gSVdMMTA1X1VDT0RFX0FQSV9NSU4sCQkJXAogCS5lZXByb21fdmVyID0gRUVQUk9NXzIwMDBfRUVQUk9NX1ZFUlNJT04sCQlcCiAJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fMjAwMF9UWF9QT1dFUl9WRVJTSU9OLAlcCi0JLm9wcyA9ICZpd2wyMzBfb3BzLAkJCQkJXAotCS5tb2RfcGFyYW1zID0gJml3bGFnbl9tb2RfcGFyYW1zLAkJCVwKKwkub3BzID0gJml3bDEzNV9vcHMsCQkJCQlcCiAJLmJhc2VfcGFyYW1zID0gJml3bDIwMzBfYmFzZV9wYXJhbXMsCQkJXAogCS5idF9wYXJhbXMgPSAmaXdsMjAzMF9idF9wYXJhbXMsCQkJXAogCS5uZWVkX2RjX2NhbGliID0gdHJ1ZSwJCQkJCVwKQEAgLTU0NCwxNyArNDU0LDE3IEBACiAJLmFkdl9wbSA9IHRydWUsCQkJCQkJXAogCS5yeF93aXRoX3Npc29fZGl2ZXJzaXR5ID0gdHJ1ZQkJCQlcCiAKLXN0cnVjdCBpd2xfY2ZnIGl3bDIzMF9iZ19jZmcgPSB7Ci0JLm5hbWUgPSAiMjAwIFNlcmllcyAxeDEgQkcvQlQiLAotCUlXTF9ERVZJQ0VfMjMwLAorc3RydWN0IGl3bF9jZmcgaXdsMTM1X2JnX2NmZyA9IHsKKwkubmFtZSA9ICIxMDUgU2VyaWVzIDF4MSBCRy9CVCIsCisJSVdMX0RFVklDRV8xMzUsCiB9OwogCi1zdHJ1Y3QgaXdsX2NmZyBpd2wyMzBfYmduX2NmZyA9IHsKLQkubmFtZSA9ICIyMDAgU2VyaWVzIDF4MSBCR04vQlQiLAotCUlXTF9ERVZJQ0VfMjMwLAorc3RydWN0IGl3bF9jZmcgaXdsMTM1X2Jnbl9jZmcgPSB7CisJLm5hbWUgPSAiMTA1IFNlcmllcyAxeDEgQkdOL0JUIiwKKwlJV0xfREVWSUNFXzEzNSwKIAkuaHRfcGFyYW1zID0gJml3bDIwMDBfaHRfcGFyYW1zLAogfTsKIAogTU9EVUxFX0ZJUk1XQVJFKElXTDIwMDBfTU9EVUxFX0ZJUk1XQVJFKElXTDIwMDBfVUNPREVfQVBJX01BWCkpOwogTU9EVUxFX0ZJUk1XQVJFKElXTDIwMzBfTU9EVUxFX0ZJUk1XQVJFKElXTDIwMzBfVUNPREVfQVBJX01BWCkpOwotTU9EVUxFX0ZJUk1XQVJFKElXTDIwMF9NT0RVTEVfRklSTVdBUkUoSVdMMjAwX1VDT0RFX0FQSV9NQVgpKTsKK01PRFVMRV9GSVJNV0FSRShJV0wxMDVfTU9EVUxFX0ZJUk1XQVJFKElXTDEwNV9VQ09ERV9BUElfTUFYKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLWh3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLWh3LmgKaW5kZXggMzk3NWU0NS4uMDVhZDQ3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC1ody5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAtaHcuaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYwppbmRleCAyMmUwNDViLi45OGY4MWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTQ1LDEwICs0NSw4IEBACiAjaW5jbHVkZSAiaXdsLXN0YS5oIgogI2luY2x1ZGUgIml3bC1oZWxwZXJzLmgiCiAjaW5jbHVkZSAiaXdsLWFnbi5oIgotI2luY2x1ZGUgIml3bC1hZ24tbGVkLmgiCiAjaW5jbHVkZSAiaXdsLWFnbi1ody5oIgogI2luY2x1ZGUgIml3bC01MDAwLWh3LmgiCi0jaW5jbHVkZSAiaXdsLWFnbi1kZWJ1Z2ZzLmgiCiAKIC8qIEhpZ2hlc3QgZmlybXdhcmUgQVBJIHZlcnNpb24gc3VwcG9ydGVkICovCiAjZGVmaW5lIElXTDUwMDBfVUNPREVfQVBJX01BWCA1CkBAIC01OSwxMiArNTcsMTAgQEAKICNkZWZpbmUgSVdMNTE1MF9VQ09ERV9BUElfTUlOIDEKIAogI2RlZmluZSBJV0w1MDAwX0ZXX1BSRSAiaXdsd2lmaS01MDAwLSIKLSNkZWZpbmUgX0lXTDUwMDBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgSVdMNTAwMF9GV19QUkUgI2FwaSAiLnVjb2RlIgotI2RlZmluZSBJV0w1MDAwX01PRFVMRV9GSVJNV0FSRShhcGkpIF9JV0w1MDAwX01PRFVMRV9GSVJNV0FSRShhcGkpCisjZGVmaW5lIElXTDUwMDBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgSVdMNTAwMF9GV19QUkUgI2FwaSAiLnVjb2RlIgogCiAjZGVmaW5lIElXTDUxNTBfRldfUFJFICJpd2x3aWZpLTUxNTAtIgotI2RlZmluZSBfSVdMNTE1MF9NT0RVTEVfRklSTVdBUkUoYXBpKSBJV0w1MTUwX0ZXX1BSRSAjYXBpICIudWNvZGUiCi0jZGVmaW5lIElXTDUxNTBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgX0lXTDUxNTBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkKKyNkZWZpbmUgSVdMNTE1MF9NT0RVTEVfRklSTVdBUkUoYXBpKSBJV0w1MTUwX0ZXX1BSRSAjYXBpICIudWNvZGUiCiAKIC8qIE5JQyBjb25maWd1cmF0aW9uIGZvciA1MDAwIHNlcmllcyAqLwogc3RhdGljIHZvaWQgaXdsNTAwMF9uaWNfY29uZmlnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKQEAgLTE2OCwxMCArMTY0LDEwIEBACiAKIHN0YXRpYyBpbnQgaXdsNTAwMF9od19zZXRfaHdfcGFyYW1zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlpZiAocHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5udW1fb2ZfcXVldWVzID49IElXTF9NSU5fTlVNX1FVRVVFUyAmJgotCSAgICBwcml2LT5jZmctPm1vZF9wYXJhbXMtPm51bV9vZl9xdWV1ZXMgPD0gSVdMQUdOX05VTV9RVUVVRVMpCisJaWYgKGl3bGFnbl9tb2RfcGFyYW1zLm51bV9vZl9xdWV1ZXMgPj0gSVdMX01JTl9OVU1fUVVFVUVTICYmCisJICAgIGl3bGFnbl9tb2RfcGFyYW1zLm51bV9vZl9xdWV1ZXMgPD0gSVdMQUdOX05VTV9RVUVVRVMpCiAJCXByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPm51bV9vZl9xdWV1ZXMgPQotCQkJcHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5udW1fb2ZfcXVldWVzOworCQkJaXdsYWduX21vZF9wYXJhbXMubnVtX29mX3F1ZXVlczsKIAogCXByaXYtPmh3X3BhcmFtcy5tYXhfdHhxX251bSA9IHByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPm51bV9vZl9xdWV1ZXM7CiAJcHJpdi0+aHdfcGFyYW1zLmRtYV9jaG5sX251bSA9IEZINTBfVENTUl9DSE5MX05VTTsKQEAgLTE4NSw3ICsxODEsNiBAQAogCXByaXYtPmh3X3BhcmFtcy5tYXhfZGF0YV9zaXplID0gSVdMQUdOX1JUQ19EQVRBX1NJWkU7CiAJcHJpdi0+aHdfcGFyYW1zLm1heF9pbnN0X3NpemUgPSBJV0xBR05fUlRDX0lOU1RfU0laRTsKIAotCXByaXYtPmh3X3BhcmFtcy5tYXhfYnNtX3NpemUgPSAwOwogCXByaXYtPmh3X3BhcmFtcy5odDQwX2NoYW5uZWwgPSAgQklUKElFRUU4MDIxMV9CQU5EXzJHSFopIHwKIAkJCQkJQklUKElFRUU4MDIxMV9CQU5EXzVHSFopOwogCXByaXYtPmh3X3BhcmFtcy5yeF93cnRfcHRyX3JlZyA9IEZIX1JTQ1NSX0NITkwwX1dQVFI7CkBAIC0yMTQsMTAgKzIwOSwxMCBAQAogCiBzdGF0aWMgaW50IGl3bDUxNTBfaHdfc2V0X2h3X3BhcmFtcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JaWYgKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+bnVtX29mX3F1ZXVlcyA+PSBJV0xfTUlOX05VTV9RVUVVRVMgJiYKLQkgICAgcHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5udW1fb2ZfcXVldWVzIDw9IElXTEFHTl9OVU1fUVVFVUVTKQorCWlmIChpd2xhZ25fbW9kX3BhcmFtcy5udW1fb2ZfcXVldWVzID49IElXTF9NSU5fTlVNX1FVRVVFUyAmJgorCSAgICBpd2xhZ25fbW9kX3BhcmFtcy5udW1fb2ZfcXVldWVzIDw9IElXTEFHTl9OVU1fUVVFVUVTKQogCQlwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5udW1fb2ZfcXVldWVzID0KLQkJCXByaXYtPmNmZy0+bW9kX3BhcmFtcy0+bnVtX29mX3F1ZXVlczsKKwkJCWl3bGFnbl9tb2RfcGFyYW1zLm51bV9vZl9xdWV1ZXM7CiAKIAlwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW0gPSBwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5udW1fb2ZfcXVldWVzOwogCXByaXYtPmh3X3BhcmFtcy5kbWFfY2hubF9udW0gPSBGSDUwX1RDU1JfQ0hOTF9OVU07CkBAIC0yMzEsNyArMjI2LDYgQEAKIAlwcml2LT5od19wYXJhbXMubWF4X2RhdGFfc2l6ZSA9IElXTEFHTl9SVENfREFUQV9TSVpFOwogCXByaXYtPmh3X3BhcmFtcy5tYXhfaW5zdF9zaXplID0gSVdMQUdOX1JUQ19JTlNUX1NJWkU7CiAKLQlwcml2LT5od19wYXJhbXMubWF4X2JzbV9zaXplID0gMDsKIAlwcml2LT5od19wYXJhbXMuaHQ0MF9jaGFubmVsID0gIEJJVChJRUVFODAyMTFfQkFORF8yR0haKSB8CiAJCQkJCUJJVChJRUVFODAyMTFfQkFORF81R0haKTsKIAlwcml2LT5od19wYXJhbXMucnhfd3J0X3B0cl9yZWcgPSBGSF9SU0NTUl9DSE5MMF9XUFRSOwpAQCAtMjYzLDcgKzI1Nyw3IEBACiAJdTMyIHZ0ID0gMDsKIAlzMzIgb2Zmc2V0ID0gIGl3bF90ZW1wX2NhbGliX3RvX29mZnNldChwcml2KTsKIAotCXZ0ID0gbGUzMl90b19jcHUocHJpdi0+X2Fnbi5zdGF0aXN0aWNzLmdlbmVyYWwuY29tbW9uLnRlbXBlcmF0dXJlKTsKKwl2dCA9IGxlMzJfdG9fY3B1KHByaXYtPnN0YXRpc3RpY3MuY29tbW9uLnRlbXBlcmF0dXJlKTsKIAl2dCA9IHZ0IC8gSVdMXzUxNTBfVk9MVEFHRV9UT19URU1QRVJBVFVSRV9DT0VGRiArIG9mZnNldDsKIAkvKiBub3cgdnQgaG9sZCB0aGUgdGVtcGVyYXR1cmUgaW4gS2VsdmluICovCiAJcHJpdi0+dGVtcGVyYXR1cmUgPSBLRUxWSU5fVE9fQ0VMU0lVUyh2dCk7CkBAIC0zNDUsMjQgKzMzOSwxMyBAQAogCiBzdGF0aWMgc3RydWN0IGl3bF9saWJfb3BzIGl3bDUwMDBfbGliID0gewogCS5zZXRfaHdfcGFyYW1zID0gaXdsNTAwMF9od19zZXRfaHdfcGFyYW1zLAotCS50eHFfdXBkYXRlX2J5dGVfY250X3RibCA9IGl3bGFnbl90eHFfdXBkYXRlX2J5dGVfY250X3RibCwKLQkudHhxX2ludmFsX2J5dGVfY250X3RibCA9IGl3bGFnbl90eHFfaW52YWxfYnl0ZV9jbnRfdGJsLAogCS50eHFfc2V0X3NjaGVkID0gaXdsYWduX3R4cV9zZXRfc2NoZWQsCi0JLnR4cV9hZ2dfZW5hYmxlID0gaXdsYWduX3R4cV9hZ2dfZW5hYmxlLAotCS50eHFfYWdnX2Rpc2FibGUgPSBpd2xhZ25fdHhxX2FnZ19kaXNhYmxlLAogCS50eHFfYXR0YWNoX2J1Zl90b190ZmQgPSBpd2xfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkLAogCS50eHFfZnJlZV90ZmQgPSBpd2xfaHdfdHhxX2ZyZWVfdGZkLAogCS50eHFfaW5pdCA9IGl3bF9od190eF9xdWV1ZV9pbml0LAogCS5yeF9oYW5kbGVyX3NldHVwID0gaXdsYWduX3J4X2hhbmRsZXJfc2V0dXAsCiAJLnNldHVwX2RlZmVycmVkX3dvcmsgPSBpd2xhZ25fc2V0dXBfZGVmZXJyZWRfd29yaywKIAkuaXNfdmFsaWRfcnRjX2RhdGFfYWRkciA9IGl3bGFnbl9od192YWxpZF9ydGNfZGF0YV9hZGRyLAotCS5kdW1wX25pY19ldmVudF9sb2cgPSBpd2xfZHVtcF9uaWNfZXZlbnRfbG9nLAotCS5kdW1wX25pY19lcnJvcl9sb2cgPSBpd2xfZHVtcF9uaWNfZXJyb3JfbG9nLAotCS5kdW1wX2NzciA9IGl3bF9kdW1wX2NzciwKLQkuZHVtcF9maCA9IGl3bF9kdW1wX2ZoLAotCS5sb2FkX3Vjb2RlID0gaXdsYWduX2xvYWRfdWNvZGUsCi0JLmluaXRfYWxpdmVfc3RhcnQgPSBpd2xhZ25faW5pdF9hbGl2ZV9zdGFydCwKLQkuYWxpdmVfbm90aWZ5ID0gaXdsYWduX2FsaXZlX25vdGlmeSwKIAkuc2VuZF90eF9wb3dlciA9IGl3bGFnbl9zZW5kX3R4X3Bvd2VyLAogCS51cGRhdGVfY2hhaW5fZmxhZ3MgPSBpd2xfdXBkYXRlX2NoYWluX2ZsYWdzLAogCS5zZXRfY2hhbm5lbF9zd2l0Y2ggPSBpd2w1MDAwX2h3X2NoYW5uZWxfc3dpdGNoLApAQCAtMzgwLDU2ICszNjMsMjQgQEAKIAkJCUVFUFJPTV9SRUdfQkFORF8yNF9IVDQwX0NIQU5ORUxTLAogCQkJRUVQUk9NX1JFR19CQU5EXzUyX0hUNDBfQ0hBTk5FTFMKIAkJfSwKLQkJLmFjcXVpcmVfc2VtYXBob3JlID0gaXdsY29yZV9lZXByb21fYWNxdWlyZV9zZW1hcGhvcmUsCi0JCS5yZWxlYXNlX3NlbWFwaG9yZSA9IGl3bGNvcmVfZWVwcm9tX3JlbGVhc2Vfc2VtYXBob3JlLAotCQkuY2FsaWJfdmVyc2lvbgk9IGl3bGFnbl9lZXByb21fY2FsaWJfdmVyc2lvbiwKIAkJLnF1ZXJ5X2FkZHIgPSBpd2xhZ25fZWVwcm9tX3F1ZXJ5X2FkZHIsCiAJfSwKLQkuaXNyX29wcyA9IHsKLQkJLmlzciA9IGl3bF9pc3JfaWN0LAotCQkuZnJlZSA9IGl3bF9mcmVlX2lzcl9pY3QsCi0JCS5hbGxvYyA9IGl3bF9hbGxvY19pc3JfaWN0LAotCQkucmVzZXQgPSBpd2xfcmVzZXRfaWN0LAotCQkuZGlzYWJsZSA9IGl3bF9kaXNhYmxlX2ljdCwKLQl9LAogCS50ZW1wX29wcyA9IHsKIAkJLnRlbXBlcmF0dXJlID0gaXdsYWduX3RlbXBlcmF0dXJlLAogCSB9LAotCS5kZWJ1Z2ZzX29wcyA9IHsKLQkJLnJ4X3N0YXRzX3JlYWQgPSBpd2xfdWNvZGVfcnhfc3RhdHNfcmVhZCwKLQkJLnR4X3N0YXRzX3JlYWQgPSBpd2xfdWNvZGVfdHhfc3RhdHNfcmVhZCwKLQkJLmdlbmVyYWxfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV9nZW5lcmFsX3N0YXRzX3JlYWQsCi0JCS5idF9zdGF0c19yZWFkID0gaXdsX3Vjb2RlX2J0X3N0YXRzX3JlYWQsCi0JCS5yZXBseV90eF9lcnJvciA9IGl3bF9yZXBseV90eF9lcnJvcl9yZWFkLAotCX0sCiAJLnR4Zmlmb19mbHVzaCA9IGl3bGFnbl90eGZpZm9fZmx1c2gsCiAJLmRldl90eGZpZm9fZmx1c2ggPSBpd2xhZ25fZGV2X3R4Zmlmb19mbHVzaCwKLQkudHRfb3BzID0gewotCQkubG93ZXJfcG93ZXJfZGV0ZWN0aW9uID0gaXdsX3R0X2lzX2xvd19wb3dlcl9zdGF0ZSwKLQkJLnR0X3Bvd2VyX21vZGUgPSBpd2xfdHRfY3VycmVudF9wb3dlcl9tb2RlLAotCQkuY3Rfa2lsbF9jaGVjayA9IGl3bF9jaGVja19mb3JfY3Rfa2lsbCwKLQl9CiB9OwogCiBzdGF0aWMgc3RydWN0IGl3bF9saWJfb3BzIGl3bDUxNTBfbGliID0gewogCS5zZXRfaHdfcGFyYW1zID0gaXdsNTE1MF9od19zZXRfaHdfcGFyYW1zLAotCS50eHFfdXBkYXRlX2J5dGVfY250X3RibCA9IGl3bGFnbl90eHFfdXBkYXRlX2J5dGVfY250X3RibCwKLQkudHhxX2ludmFsX2J5dGVfY250X3RibCA9IGl3bGFnbl90eHFfaW52YWxfYnl0ZV9jbnRfdGJsLAogCS50eHFfc2V0X3NjaGVkID0gaXdsYWduX3R4cV9zZXRfc2NoZWQsCi0JLnR4cV9hZ2dfZW5hYmxlID0gaXdsYWduX3R4cV9hZ2dfZW5hYmxlLAotCS50eHFfYWdnX2Rpc2FibGUgPSBpd2xhZ25fdHhxX2FnZ19kaXNhYmxlLAogCS50eHFfYXR0YWNoX2J1Zl90b190ZmQgPSBpd2xfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkLAogCS50eHFfZnJlZV90ZmQgPSBpd2xfaHdfdHhxX2ZyZWVfdGZkLAogCS50eHFfaW5pdCA9IGl3bF9od190eF9xdWV1ZV9pbml0LAogCS5yeF9oYW5kbGVyX3NldHVwID0gaXdsYWduX3J4X2hhbmRsZXJfc2V0dXAsCiAJLnNldHVwX2RlZmVycmVkX3dvcmsgPSBpd2xhZ25fc2V0dXBfZGVmZXJyZWRfd29yaywKIAkuaXNfdmFsaWRfcnRjX2RhdGFfYWRkciA9IGl3bGFnbl9od192YWxpZF9ydGNfZGF0YV9hZGRyLAotCS5kdW1wX25pY19ldmVudF9sb2cgPSBpd2xfZHVtcF9uaWNfZXZlbnRfbG9nLAotCS5kdW1wX25pY19lcnJvcl9sb2cgPSBpd2xfZHVtcF9uaWNfZXJyb3JfbG9nLAotCS5kdW1wX2NzciA9IGl3bF9kdW1wX2NzciwKLQkubG9hZF91Y29kZSA9IGl3bGFnbl9sb2FkX3Vjb2RlLAotCS5pbml0X2FsaXZlX3N0YXJ0ID0gaXdsYWduX2luaXRfYWxpdmVfc3RhcnQsCi0JLmFsaXZlX25vdGlmeSA9IGl3bGFnbl9hbGl2ZV9ub3RpZnksCiAJLnNlbmRfdHhfcG93ZXIgPSBpd2xhZ25fc2VuZF90eF9wb3dlciwKIAkudXBkYXRlX2NoYWluX2ZsYWdzID0gaXdsX3VwZGF0ZV9jaGFpbl9mbGFncywKIAkuc2V0X2NoYW5uZWxfc3dpdGNoID0gaXdsNTAwMF9od19jaGFubmVsX3N3aXRjaCwKQEAgLTQ0Nyw1MSArMzk4LDI1IEBACiAJCQlFRVBST01fUkVHX0JBTkRfMjRfSFQ0MF9DSEFOTkVMUywKIAkJCUVFUFJPTV9SRUdfQkFORF81Ml9IVDQwX0NIQU5ORUxTCiAJCX0sCi0JCS5hY3F1aXJlX3NlbWFwaG9yZSA9IGl3bGNvcmVfZWVwcm9tX2FjcXVpcmVfc2VtYXBob3JlLAotCQkucmVsZWFzZV9zZW1hcGhvcmUgPSBpd2xjb3JlX2VlcHJvbV9yZWxlYXNlX3NlbWFwaG9yZSwKLQkJLmNhbGliX3ZlcnNpb24JPSBpd2xhZ25fZWVwcm9tX2NhbGliX3ZlcnNpb24sCiAJCS5xdWVyeV9hZGRyID0gaXdsYWduX2VlcHJvbV9xdWVyeV9hZGRyLAogCX0sCi0JLmlzcl9vcHMgPSB7Ci0JCS5pc3IgPSBpd2xfaXNyX2ljdCwKLQkJLmZyZWUgPSBpd2xfZnJlZV9pc3JfaWN0LAotCQkuYWxsb2MgPSBpd2xfYWxsb2NfaXNyX2ljdCwKLQkJLnJlc2V0ID0gaXdsX3Jlc2V0X2ljdCwKLQkJLmRpc2FibGUgPSBpd2xfZGlzYWJsZV9pY3QsCi0JfSwKIAkudGVtcF9vcHMgPSB7CiAJCS50ZW1wZXJhdHVyZSA9IGl3bDUxNTBfdGVtcGVyYXR1cmUsCiAJIH0sCi0JLmRlYnVnZnNfb3BzID0gewotCQkucnhfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV9yeF9zdGF0c19yZWFkLAotCQkudHhfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV90eF9zdGF0c19yZWFkLAotCQkuZ2VuZXJhbF9zdGF0c19yZWFkID0gaXdsX3Vjb2RlX2dlbmVyYWxfc3RhdHNfcmVhZCwKLQkJLmJ0X3N0YXRzX3JlYWQgPSBpd2xfdWNvZGVfYnRfc3RhdHNfcmVhZCwKLQkJLnJlcGx5X3R4X2Vycm9yID0gaXdsX3JlcGx5X3R4X2Vycm9yX3JlYWQsCi0JfSwKIAkudHhmaWZvX2ZsdXNoID0gaXdsYWduX3R4Zmlmb19mbHVzaCwKIAkuZGV2X3R4Zmlmb19mbHVzaCA9IGl3bGFnbl9kZXZfdHhmaWZvX2ZsdXNoLAotCS50dF9vcHMgPSB7Ci0JCS5sb3dlcl9wb3dlcl9kZXRlY3Rpb24gPSBpd2xfdHRfaXNfbG93X3Bvd2VyX3N0YXRlLAotCQkudHRfcG93ZXJfbW9kZSA9IGl3bF90dF9jdXJyZW50X3Bvd2VyX21vZGUsCi0JCS5jdF9raWxsX2NoZWNrID0gaXdsX2NoZWNrX2Zvcl9jdF9raWxsLAotCX0KIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX29wcyBpd2w1MDAwX29wcyA9IHsKIAkubGliID0gJml3bDUwMDBfbGliLAogCS5oY21kID0gJml3bGFnbl9oY21kLAogCS51dGlscyA9ICZpd2xhZ25faGNtZF91dGlscywKLQkubGVkID0gJml3bGFnbl9sZWRfb3BzLAotCS5pZWVlODAyMTFfb3BzID0gJml3bGFnbl9od19vcHMsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGl3bF9vcHMgaXdsNTE1MF9vcHMgPSB7CiAJLmxpYiA9ICZpd2w1MTUwX2xpYiwKIAkuaGNtZCA9ICZpd2xhZ25faGNtZCwKIAkudXRpbHMgPSAmaXdsYWduX2hjbWRfdXRpbHMsCi0JLmxlZCA9ICZpd2xhZ25fbGVkX29wcywKLQkuaWVlZTgwMjExX29wcyA9ICZpd2xhZ25faHdfb3BzLAogfTsKIAogc3RhdGljIHN0cnVjdCBpd2xfYmFzZV9wYXJhbXMgaXdsNTAwMF9iYXNlX3BhcmFtcyA9IHsKQEAgLTQ5OSwxNyArNDI0LDEyIEBACiAJLm51bV9vZl9xdWV1ZXMgPSBJV0xBR05fTlVNX1FVRVVFUywKIAkubnVtX29mX2FtcGR1X3F1ZXVlcyA9IElXTEFHTl9OVU1fQU1QRFVfUVVFVUVTLAogCS5wbGxfY2ZnX3ZhbCA9IENTUjUwX0FOQV9QTExfQ0ZHX1ZBTCwKLQkuc2V0X2wwcyA9IHRydWUsCi0JLnVzZV9ic20gPSBmYWxzZSwKIAkubGVkX2NvbXBlbnNhdGlvbiA9IDUxLAogCS5jaGFpbl9ub2lzZV9udW1fYmVhY29ucyA9IElXTF9DQUxfTlVNX0JFQUNPTlMsCiAJLnBsY3BfZGVsdGFfdGhyZXNob2xkID0gSVdMX01BWF9QTENQX0VSUl9MT05HX1RIUkVTSE9MRF9ERUYsCiAJLmNoYWluX25vaXNlX3NjYWxlID0gMTAwMCwKIAkud2RfdGltZW91dCA9IElXTF9MT05HX1dEX1RJTUVPVVQsCiAJLm1heF9ldmVudF9sb2dfc2l6ZSA9IDUxMiwKLQkudWNvZGVfdHJhY2luZyA9IHRydWUsCi0JLnNlbnNpdGl2aXR5X2NhbGliX2J5X2RyaXZlciA9IHRydWUsCi0JLmNoYWluX25vaXNlX2NhbGliX2J5X2RyaXZlciA9IHRydWUsCiB9Owogc3RhdGljIHN0cnVjdCBpd2xfaHRfcGFyYW1zIGl3bDUwMDBfaHRfcGFyYW1zID0gewogCS5odF9ncmVlbmZpZWxkX3N1cHBvcnQgPSB0cnVlLApAQCAtNTIzLDcgKzQ0Myw2IEBACiAJLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwJCVwKIAkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCVwKIAkub3BzID0gJml3bDUwMDBfb3BzLAkJCQkJXAotCS5tb2RfcGFyYW1zID0gJml3bGFnbl9tb2RfcGFyYW1zLAkJCVwKIAkuYmFzZV9wYXJhbXMgPSAmaXdsNTAwMF9iYXNlX3BhcmFtcywJCQlcCiAJLmxlZF9tb2RlID0gSVdMX0xFRF9CTElOSwogCkBAIC01NjcsNyArNDg2LDYgQEAKIAkuZWVwcm9tX3ZlciA9IEVFUFJPTV81MDUwX0VFUFJPTV9WRVJTSU9OLAogCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzUwNTBfVFhfUE9XRVJfVkVSU0lPTiwKIAkub3BzID0gJml3bDUwMDBfb3BzLAotCS5tb2RfcGFyYW1zID0gJml3bGFnbl9tb2RfcGFyYW1zLAogCS5iYXNlX3BhcmFtcyA9ICZpd2w1MDAwX2Jhc2VfcGFyYW1zLAogCS5odF9wYXJhbXMgPSAmaXdsNTAwMF9odF9wYXJhbXMsCiAJLmxlZF9tb2RlID0gSVdMX0xFRF9CTElOSywKQEAgLTU4MSw3ICs0OTksNiBAQAogCS5lZXByb21fdmVyID0gRUVQUk9NXzUwNTBfRUVQUk9NX1ZFUlNJT04sCQlcCiAJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNTA1MF9UWF9QT1dFUl9WRVJTSU9OLAlcCiAJLm9wcyA9ICZpd2w1MTUwX29wcywJCQkJCVwKLQkubW9kX3BhcmFtcyA9ICZpd2xhZ25fbW9kX3BhcmFtcywJCQlcCiAJLmJhc2VfcGFyYW1zID0gJml3bDUwMDBfYmFzZV9wYXJhbXMsCQkJXAogCS5uZWVkX2RjX2NhbGliID0gdHJ1ZSwJCQkJCVwKIAkubGVkX21vZGUgPSBJV0xfTEVEX0JMSU5LLAkJCQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC02MDAwLWh3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC02MDAwLWh3LmgKaW5kZXggNDc4OTFlMS4uYjI3OTg2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC1ody5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAtaHcuaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAuYwppbmRleCBhNzQ1YjAxLi5hNzkyMWY5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC00Niw4ICs0Niw2IEBACiAjaW5jbHVkZSAiaXdsLWhlbHBlcnMuaCIKICNpbmNsdWRlICJpd2wtYWduLWh3LmgiCiAjaW5jbHVkZSAiaXdsLTYwMDAtaHcuaCIKLSNpbmNsdWRlICJpd2wtYWduLWxlZC5oIgotI2luY2x1ZGUgIml3bC1hZ24tZGVidWdmcy5oIgogCiAvKiBIaWdoZXN0IGZpcm13YXJlIEFQSSB2ZXJzaW9uIHN1cHBvcnRlZCAqLwogI2RlZmluZSBJV0w2MDAwX1VDT0RFX0FQSV9NQVggNApAQCAtNjAsMjAgKzU4LDE2IEBACiAjZGVmaW5lIElXTDYwMDBHMl9VQ09ERV9BUElfTUlOIDQKIAogI2RlZmluZSBJV0w2MDAwX0ZXX1BSRSAiaXdsd2lmaS02MDAwLSIKLSNkZWZpbmUgX0lXTDYwMDBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgSVdMNjAwMF9GV19QUkUgI2FwaSAiLnVjb2RlIgotI2RlZmluZSBJV0w2MDAwX01PRFVMRV9GSVJNV0FSRShhcGkpIF9JV0w2MDAwX01PRFVMRV9GSVJNV0FSRShhcGkpCisjZGVmaW5lIElXTDYwMDBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgSVdMNjAwMF9GV19QUkUgI2FwaSAiLnVjb2RlIgogCiAjZGVmaW5lIElXTDYwNTBfRldfUFJFICJpd2x3aWZpLTYwNTAtIgotI2RlZmluZSBfSVdMNjA1MF9NT0RVTEVfRklSTVdBUkUoYXBpKSBJV0w2MDUwX0ZXX1BSRSAjYXBpICIudWNvZGUiCi0jZGVmaW5lIElXTDYwNTBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgX0lXTDYwNTBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkKKyNkZWZpbmUgSVdMNjA1MF9NT0RVTEVfRklSTVdBUkUoYXBpKSBJV0w2MDUwX0ZXX1BSRSAjYXBpICIudWNvZGUiCiAKICNkZWZpbmUgSVdMNjAwNV9GV19QUkUgIml3bHdpZmktNjAwMGcyYS0iCi0jZGVmaW5lIF9JV0w2MDA1X01PRFVMRV9GSVJNV0FSRShhcGkpIElXTDYwMDVfRldfUFJFICNhcGkgIi51Y29kZSIKLSNkZWZpbmUgSVdMNjAwNV9NT0RVTEVfRklSTVdBUkUoYXBpKSBfSVdMNjAwNV9NT0RVTEVfRklSTVdBUkUoYXBpKQorI2RlZmluZSBJV0w2MDA1X01PRFVMRV9GSVJNV0FSRShhcGkpIElXTDYwMDVfRldfUFJFICNhcGkgIi51Y29kZSIKIAogI2RlZmluZSBJV0w2MDMwX0ZXX1BSRSAiaXdsd2lmaS02MDAwZzJiLSIKLSNkZWZpbmUgX0lXTDYwMzBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgSVdMNjAzMF9GV19QUkUgI2FwaSAiLnVjb2RlIgotI2RlZmluZSBJV0w2MDMwX01PRFVMRV9GSVJNV0FSRShhcGkpIF9JV0w2MDMwX01PRFVMRV9GSVJNV0FSRShhcGkpCisjZGVmaW5lIElXTDYwMzBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgSVdMNjAzMF9GV19QUkUgI2FwaSAiLnVjb2RlIgogCiBzdGF0aWMgdm9pZCBpd2w2MDAwX3NldF9jdF90aHJlc2hvbGQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewpAQCAtODUsNyArNzksNyBAQAogc3RhdGljIHZvaWQgaXdsNjA1MF9hZGRpdGlvbmFsX25pY19jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCS8qIEluZGljYXRlIGNhbGlicmF0aW9uIHZlcnNpb24gdG8gdUNvZGUuICovCi0JaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPmVlcHJvbV9vcHMuY2FsaWJfdmVyc2lvbihwcml2KSA+PSA2KQorCWlmIChpd2xhZ25fZWVwcm9tX2NhbGliX3ZlcnNpb24ocHJpdikgPj0gNikKIAkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0dQX0RSSVZFUl9SRUcsCiAJCQkJQ1NSX0dQX0RSSVZFUl9SRUdfQklUX0NBTElCX1ZFUlNJT042KTsKIH0KQEAgLTkzLDcgKzg3LDcgQEAKIHN0YXRpYyB2b2lkIGl3bDYxNTBfYWRkaXRpb25hbF9uaWNfY29uZmlnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAkvKiBJbmRpY2F0ZSBjYWxpYnJhdGlvbiB2ZXJzaW9uIHRvIHVDb2RlLiAqLwotCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5lZXByb21fb3BzLmNhbGliX3ZlcnNpb24ocHJpdikgPj0gNikKKwlpZiAoaXdsYWduX2VlcHJvbV9jYWxpYl92ZXJzaW9uKHByaXYpID49IDYpCiAJCWl3bF9zZXRfYml0KHByaXYsIENTUl9HUF9EUklWRVJfUkVHLAogCQkJCUNTUl9HUF9EUklWRVJfUkVHX0JJVF9DQUxJQl9WRVJTSU9ONik7CiAJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0dQX0RSSVZFUl9SRUcsCkBAIC0xNTksMTAgKzE1MywxMCBAQAogCiBzdGF0aWMgaW50IGl3bDYwMDBfaHdfc2V0X2h3X3BhcmFtcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JaWYgKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+bnVtX29mX3F1ZXVlcyA+PSBJV0xfTUlOX05VTV9RVUVVRVMgJiYKLQkgICAgcHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5udW1fb2ZfcXVldWVzIDw9IElXTEFHTl9OVU1fUVVFVUVTKQorCWlmIChpd2xhZ25fbW9kX3BhcmFtcy5udW1fb2ZfcXVldWVzID49IElXTF9NSU5fTlVNX1FVRVVFUyAmJgorCSAgICBpd2xhZ25fbW9kX3BhcmFtcy5udW1fb2ZfcXVldWVzIDw9IElXTEFHTl9OVU1fUVVFVUVTKQogCQlwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5udW1fb2ZfcXVldWVzID0KLQkJCXByaXYtPmNmZy0+bW9kX3BhcmFtcy0+bnVtX29mX3F1ZXVlczsKKwkJCWl3bGFnbl9tb2RfcGFyYW1zLm51bV9vZl9xdWV1ZXM7CiAKIAlwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW0gPSBwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5udW1fb2ZfcXVldWVzOwogCXByaXYtPmh3X3BhcmFtcy5kbWFfY2hubF9udW0gPSBGSDUwX1RDU1JfQ0hOTF9OVU07CkBAIC0xNzYsNyArMTcwLDYgQEAKIAlwcml2LT5od19wYXJhbXMubWF4X2RhdGFfc2l6ZSA9IElXTDYwX1JUQ19EQVRBX1NJWkU7CiAJcHJpdi0+aHdfcGFyYW1zLm1heF9pbnN0X3NpemUgPSBJV0w2MF9SVENfSU5TVF9TSVpFOwogCi0JcHJpdi0+aHdfcGFyYW1zLm1heF9ic21fc2l6ZSA9IDA7CiAJcHJpdi0+aHdfcGFyYW1zLmh0NDBfY2hhbm5lbCA9ICBCSVQoSUVFRTgwMjExX0JBTkRfMkdIWikgfAogCQkJCQlCSVQoSUVFRTgwMjExX0JBTkRfNUdIWik7CiAJcHJpdi0+aHdfcGFyYW1zLnJ4X3dydF9wdHJfcmVnID0gRkhfUlNDU1JfQ0hOTDBfV1BUUjsKQEAgLTI4NSwyNCArMjc4LDEzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXdsX2xpYl9vcHMgaXdsNjAwMF9saWIgPSB7CiAJLnNldF9od19wYXJhbXMgPSBpd2w2MDAwX2h3X3NldF9od19wYXJhbXMsCi0JLnR4cV91cGRhdGVfYnl0ZV9jbnRfdGJsID0gaXdsYWduX3R4cV91cGRhdGVfYnl0ZV9jbnRfdGJsLAotCS50eHFfaW52YWxfYnl0ZV9jbnRfdGJsID0gaXdsYWduX3R4cV9pbnZhbF9ieXRlX2NudF90YmwsCiAJLnR4cV9zZXRfc2NoZWQgPSBpd2xhZ25fdHhxX3NldF9zY2hlZCwKLQkudHhxX2FnZ19lbmFibGUgPSBpd2xhZ25fdHhxX2FnZ19lbmFibGUsCi0JLnR4cV9hZ2dfZGlzYWJsZSA9IGl3bGFnbl90eHFfYWdnX2Rpc2FibGUsCiAJLnR4cV9hdHRhY2hfYnVmX3RvX3RmZCA9IGl3bF9od190eHFfYXR0YWNoX2J1Zl90b190ZmQsCiAJLnR4cV9mcmVlX3RmZCA9IGl3bF9od190eHFfZnJlZV90ZmQsCiAJLnR4cV9pbml0ID0gaXdsX2h3X3R4X3F1ZXVlX2luaXQsCiAJLnJ4X2hhbmRsZXJfc2V0dXAgPSBpd2xhZ25fcnhfaGFuZGxlcl9zZXR1cCwKIAkuc2V0dXBfZGVmZXJyZWRfd29yayA9IGl3bGFnbl9zZXR1cF9kZWZlcnJlZF93b3JrLAogCS5pc192YWxpZF9ydGNfZGF0YV9hZGRyID0gaXdsYWduX2h3X3ZhbGlkX3J0Y19kYXRhX2FkZHIsCi0JLmxvYWRfdWNvZGUgPSBpd2xhZ25fbG9hZF91Y29kZSwKLQkuZHVtcF9uaWNfZXZlbnRfbG9nID0gaXdsX2R1bXBfbmljX2V2ZW50X2xvZywKLQkuZHVtcF9uaWNfZXJyb3JfbG9nID0gaXdsX2R1bXBfbmljX2Vycm9yX2xvZywKLQkuZHVtcF9jc3IgPSBpd2xfZHVtcF9jc3IsCi0JLmR1bXBfZmggPSBpd2xfZHVtcF9maCwKLQkuaW5pdF9hbGl2ZV9zdGFydCA9IGl3bGFnbl9pbml0X2FsaXZlX3N0YXJ0LAotCS5hbGl2ZV9ub3RpZnkgPSBpd2xhZ25fYWxpdmVfbm90aWZ5LAogCS5zZW5kX3R4X3Bvd2VyID0gaXdsYWduX3NlbmRfdHhfcG93ZXIsCiAJLnVwZGF0ZV9jaGFpbl9mbGFncyA9IGl3bF91cGRhdGVfY2hhaW5fZmxhZ3MsCiAJLnNldF9jaGFubmVsX3N3aXRjaCA9IGl3bDYwMDBfaHdfY2hhbm5lbF9zd2l0Y2gsCkBAIC0zMjAsNDUgKzMwMiwxOSBAQAogCQkJRUVQUk9NXzYwMDBfUkVHX0JBTkRfMjRfSFQ0MF9DSEFOTkVMUywKIAkJCUVFUFJPTV9SRUdfQkFORF81Ml9IVDQwX0NIQU5ORUxTCiAJCX0sCi0JCS5hY3F1aXJlX3NlbWFwaG9yZSA9IGl3bGNvcmVfZWVwcm9tX2FjcXVpcmVfc2VtYXBob3JlLAotCQkucmVsZWFzZV9zZW1hcGhvcmUgPSBpd2xjb3JlX2VlcHJvbV9yZWxlYXNlX3NlbWFwaG9yZSwKLQkJLmNhbGliX3ZlcnNpb24JPSBpd2xhZ25fZWVwcm9tX2NhbGliX3ZlcnNpb24sCiAJCS5xdWVyeV9hZGRyID0gaXdsYWduX2VlcHJvbV9xdWVyeV9hZGRyLAogCQkudXBkYXRlX2VuaGFuY2VkX3R4cG93ZXIgPSBpd2xjb3JlX2VlcHJvbV9lbmhhbmNlZF90eHBvd2VyLAogCX0sCi0JLmlzcl9vcHMgPSB7Ci0JCS5pc3IgPSBpd2xfaXNyX2ljdCwKLQkJLmZyZWUgPSBpd2xfZnJlZV9pc3JfaWN0LAotCQkuYWxsb2MgPSBpd2xfYWxsb2NfaXNyX2ljdCwKLQkJLnJlc2V0ID0gaXdsX3Jlc2V0X2ljdCwKLQkJLmRpc2FibGUgPSBpd2xfZGlzYWJsZV9pY3QsCi0JfSwKIAkudGVtcF9vcHMgPSB7CiAJCS50ZW1wZXJhdHVyZSA9IGl3bGFnbl90ZW1wZXJhdHVyZSwKIAkgfSwKLQkuZGVidWdmc19vcHMgPSB7Ci0JCS5yeF9zdGF0c19yZWFkID0gaXdsX3Vjb2RlX3J4X3N0YXRzX3JlYWQsCi0JCS50eF9zdGF0c19yZWFkID0gaXdsX3Vjb2RlX3R4X3N0YXRzX3JlYWQsCi0JCS5nZW5lcmFsX3N0YXRzX3JlYWQgPSBpd2xfdWNvZGVfZ2VuZXJhbF9zdGF0c19yZWFkLAotCQkuYnRfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV9idF9zdGF0c19yZWFkLAotCQkucmVwbHlfdHhfZXJyb3IgPSBpd2xfcmVwbHlfdHhfZXJyb3JfcmVhZCwKLQl9LAogCS50eGZpZm9fZmx1c2ggPSBpd2xhZ25fdHhmaWZvX2ZsdXNoLAogCS5kZXZfdHhmaWZvX2ZsdXNoID0gaXdsYWduX2Rldl90eGZpZm9fZmx1c2gsCi0JLnR0X29wcyA9IHsKLQkJLmxvd2VyX3Bvd2VyX2RldGVjdGlvbiA9IGl3bF90dF9pc19sb3dfcG93ZXJfc3RhdGUsCi0JCS50dF9wb3dlcl9tb2RlID0gaXdsX3R0X2N1cnJlbnRfcG93ZXJfbW9kZSwKLQkJLmN0X2tpbGxfY2hlY2sgPSBpd2xfY2hlY2tfZm9yX2N0X2tpbGwsCi0JfQogfTsKIAogc3RhdGljIHN0cnVjdCBpd2xfbGliX29wcyBpd2w2MDMwX2xpYiA9IHsKIAkuc2V0X2h3X3BhcmFtcyA9IGl3bDYwMDBfaHdfc2V0X2h3X3BhcmFtcywKLQkudHhxX3VwZGF0ZV9ieXRlX2NudF90YmwgPSBpd2xhZ25fdHhxX3VwZGF0ZV9ieXRlX2NudF90YmwsCi0JLnR4cV9pbnZhbF9ieXRlX2NudF90YmwgPSBpd2xhZ25fdHhxX2ludmFsX2J5dGVfY250X3RibCwKIAkudHhxX3NldF9zY2hlZCA9IGl3bGFnbl90eHFfc2V0X3NjaGVkLAotCS50eHFfYWdnX2VuYWJsZSA9IGl3bGFnbl90eHFfYWdnX2VuYWJsZSwKLQkudHhxX2FnZ19kaXNhYmxlID0gaXdsYWduX3R4cV9hZ2dfZGlzYWJsZSwKIAkudHhxX2F0dGFjaF9idWZfdG9fdGZkID0gaXdsX2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZCwKIAkudHhxX2ZyZWVfdGZkID0gaXdsX2h3X3R4cV9mcmVlX3RmZCwKIAkudHhxX2luaXQgPSBpd2xfaHdfdHhfcXVldWVfaW5pdCwKQEAgLTM2NiwxMyArMzIyLDYgQEAKIAkuc2V0dXBfZGVmZXJyZWRfd29yayA9IGl3bGFnbl9idF9zZXR1cF9kZWZlcnJlZF93b3JrLAogCS5jYW5jZWxfZGVmZXJyZWRfd29yayA9IGl3bGFnbl9idF9jYW5jZWxfZGVmZXJyZWRfd29yaywKIAkuaXNfdmFsaWRfcnRjX2RhdGFfYWRkciA9IGl3bGFnbl9od192YWxpZF9ydGNfZGF0YV9hZGRyLAotCS5sb2FkX3Vjb2RlID0gaXdsYWduX2xvYWRfdWNvZGUsCi0JLmR1bXBfbmljX2V2ZW50X2xvZyA9IGl3bF9kdW1wX25pY19ldmVudF9sb2csCi0JLmR1bXBfbmljX2Vycm9yX2xvZyA9IGl3bF9kdW1wX25pY19lcnJvcl9sb2csCi0JLmR1bXBfY3NyID0gaXdsX2R1bXBfY3NyLAotCS5kdW1wX2ZoID0gaXdsX2R1bXBfZmgsCi0JLmluaXRfYWxpdmVfc3RhcnQgPSBpd2xhZ25faW5pdF9hbGl2ZV9zdGFydCwKLQkuYWxpdmVfbm90aWZ5ID0gaXdsYWduX2FsaXZlX25vdGlmeSwKIAkuc2VuZF90eF9wb3dlciA9IGl3bGFnbl9zZW5kX3R4X3Bvd2VyLAogCS51cGRhdGVfY2hhaW5fZmxhZ3MgPSBpd2xfdXBkYXRlX2NoYWluX2ZsYWdzLAogCS5zZXRfY2hhbm5lbF9zd2l0Y2ggPSBpd2w2MDAwX2h3X2NoYW5uZWxfc3dpdGNoLApAQCAtMzkwLDM2ICszMzksMTQgQEAKIAkJCUVFUFJPTV82MDAwX1JFR19CQU5EXzI0X0hUNDBfQ0hBTk5FTFMsCiAJCQlFRVBST01fUkVHX0JBTkRfNTJfSFQ0MF9DSEFOTkVMUwogCQl9LAotCQkuYWNxdWlyZV9zZW1hcGhvcmUgPSBpd2xjb3JlX2VlcHJvbV9hY3F1aXJlX3NlbWFwaG9yZSwKLQkJLnJlbGVhc2Vfc2VtYXBob3JlID0gaXdsY29yZV9lZXByb21fcmVsZWFzZV9zZW1hcGhvcmUsCi0JCS5jYWxpYl92ZXJzaW9uCT0gaXdsYWduX2VlcHJvbV9jYWxpYl92ZXJzaW9uLAogCQkucXVlcnlfYWRkciA9IGl3bGFnbl9lZXByb21fcXVlcnlfYWRkciwKIAkJLnVwZGF0ZV9lbmhhbmNlZF90eHBvd2VyID0gaXdsY29yZV9lZXByb21fZW5oYW5jZWRfdHhwb3dlciwKIAl9LAotCS5pc3Jfb3BzID0gewotCQkuaXNyID0gaXdsX2lzcl9pY3QsCi0JCS5mcmVlID0gaXdsX2ZyZWVfaXNyX2ljdCwKLQkJLmFsbG9jID0gaXdsX2FsbG9jX2lzcl9pY3QsCi0JCS5yZXNldCA9IGl3bF9yZXNldF9pY3QsCi0JCS5kaXNhYmxlID0gaXdsX2Rpc2FibGVfaWN0LAotCX0sCiAJLnRlbXBfb3BzID0gewogCQkudGVtcGVyYXR1cmUgPSBpd2xhZ25fdGVtcGVyYXR1cmUsCiAJIH0sCi0JLmRlYnVnZnNfb3BzID0gewotCQkucnhfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV9yeF9zdGF0c19yZWFkLAotCQkudHhfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV90eF9zdGF0c19yZWFkLAotCQkuZ2VuZXJhbF9zdGF0c19yZWFkID0gaXdsX3Vjb2RlX2dlbmVyYWxfc3RhdHNfcmVhZCwKLQkJLmJ0X3N0YXRzX3JlYWQgPSBpd2xfdWNvZGVfYnRfc3RhdHNfcmVhZCwKLQkJLnJlcGx5X3R4X2Vycm9yID0gaXdsX3JlcGx5X3R4X2Vycm9yX3JlYWQsCi0JfSwKIAkudHhmaWZvX2ZsdXNoID0gaXdsYWduX3R4Zmlmb19mbHVzaCwKIAkuZGV2X3R4Zmlmb19mbHVzaCA9IGl3bGFnbl9kZXZfdHhmaWZvX2ZsdXNoLAotCS50dF9vcHMgPSB7Ci0JCS5sb3dlcl9wb3dlcl9kZXRlY3Rpb24gPSBpd2xfdHRfaXNfbG93X3Bvd2VyX3N0YXRlLAotCQkudHRfcG93ZXJfbW9kZSA9IGl3bF90dF9jdXJyZW50X3Bvd2VyX21vZGUsCi0JCS5jdF9raWxsX2NoZWNrID0gaXdsX2NoZWNrX2Zvcl9jdF9raWxsLAotCX0KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXdsX25pY19vcHMgaXdsNjA1MF9uaWNfb3BzID0gewpAQCAtNDM0LDM0ICszNjEsMjYgQEAKIAkubGliID0gJml3bDYwMDBfbGliLAogCS5oY21kID0gJml3bGFnbl9oY21kLAogCS51dGlscyA9ICZpd2xhZ25faGNtZF91dGlscywKLQkubGVkID0gJml3bGFnbl9sZWRfb3BzLAotCS5pZWVlODAyMTFfb3BzID0gJml3bGFnbl9od19vcHMsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGl3bF9vcHMgaXdsNjA1MF9vcHMgPSB7CiAJLmxpYiA9ICZpd2w2MDAwX2xpYiwKIAkuaGNtZCA9ICZpd2xhZ25faGNtZCwKIAkudXRpbHMgPSAmaXdsYWduX2hjbWRfdXRpbHMsCi0JLmxlZCA9ICZpd2xhZ25fbGVkX29wcywKIAkubmljID0gJml3bDYwNTBfbmljX29wcywKLQkuaWVlZTgwMjExX29wcyA9ICZpd2xhZ25faHdfb3BzLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpd2xfb3BzIGl3bDYxNTBfb3BzID0gewogCS5saWIgPSAmaXdsNjAwMF9saWIsCiAJLmhjbWQgPSAmaXdsYWduX2hjbWQsCiAJLnV0aWxzID0gJml3bGFnbl9oY21kX3V0aWxzLAotCS5sZWQgPSAmaXdsYWduX2xlZF9vcHMsCiAJLm5pYyA9ICZpd2w2MTUwX25pY19vcHMsCi0JLmllZWU4MDIxMV9vcHMgPSAmaXdsYWduX2h3X29wcywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX29wcyBpd2w2MDMwX29wcyA9IHsKIAkubGliID0gJml3bDYwMzBfbGliLAogCS5oY21kID0gJml3bGFnbl9idF9oY21kLAogCS51dGlscyA9ICZpd2xhZ25faGNtZF91dGlscywKLQkubGVkID0gJml3bGFnbl9sZWRfb3BzLAotCS5pZWVlODAyMTFfb3BzID0gJml3bGFnbl9od19vcHMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGl3bF9iYXNlX3BhcmFtcyBpd2w2MDAwX2Jhc2VfcGFyYW1zID0gewpAQCAtNDY5LDggKzM4OCw2IEBACiAJLm51bV9vZl9xdWV1ZXMgPSBJV0xBR05fTlVNX1FVRVVFUywKIAkubnVtX29mX2FtcGR1X3F1ZXVlcyA9IElXTEFHTl9OVU1fQU1QRFVfUVVFVUVTLAogCS5wbGxfY2ZnX3ZhbCA9IDAsCi0JLnNldF9sMHMgPSB0cnVlLAotCS51c2VfYnNtID0gZmFsc2UsCiAJLm1heF9sbF9pdGVtcyA9IE9UUF9NQVhfTExfSVRFTVNfNngwMCwKIAkuc2hhZG93X3JhbV9zdXBwb3J0ID0gdHJ1ZSwKIAkubGVkX2NvbXBlbnNhdGlvbiA9IDUxLApAQCAtNDgxLDkgKzM5OCw2IEBACiAJLmNoYWluX25vaXNlX3NjYWxlID0gMTAwMCwKIAkud2RfdGltZW91dCA9IElXTF9ERUZfV0RfVElNRU9VVCwKIAkubWF4X2V2ZW50X2xvZ19zaXplID0gNTEyLAotCS51Y29kZV90cmFjaW5nID0gdHJ1ZSwKLQkuc2Vuc2l0aXZpdHlfY2FsaWJfYnlfZHJpdmVyID0gdHJ1ZSwKLQkuY2hhaW5fbm9pc2VfY2FsaWJfYnlfZHJpdmVyID0gdHJ1ZSwKIAkuc2hhZG93X3JlZ19lbmFibGUgPSB0cnVlLAogfTsKIApAQCAtNDkyLDggKzQwNiw2IEBACiAJLm51bV9vZl9xdWV1ZXMgPSBJV0xBR05fTlVNX1FVRVVFUywKIAkubnVtX29mX2FtcGR1X3F1ZXVlcyA9IElXTEFHTl9OVU1fQU1QRFVfUVVFVUVTLAogCS5wbGxfY2ZnX3ZhbCA9IDAsCi0JLnNldF9sMHMgPSB0cnVlLAotCS51c2VfYnNtID0gZmFsc2UsCiAJLm1heF9sbF9pdGVtcyA9IE9UUF9NQVhfTExfSVRFTVNfNng1MCwKIAkuc2hhZG93X3JhbV9zdXBwb3J0ID0gdHJ1ZSwKIAkubGVkX2NvbXBlbnNhdGlvbiA9IDUxLApAQCAtNTA0LDkgKzQxNiw2IEBACiAJLmNoYWluX25vaXNlX3NjYWxlID0gMTUwMCwKIAkud2RfdGltZW91dCA9IElXTF9ERUZfV0RfVElNRU9VVCwKIAkubWF4X2V2ZW50X2xvZ19zaXplID0gMTAyNCwKLQkudWNvZGVfdHJhY2luZyA9IHRydWUsCi0JLnNlbnNpdGl2aXR5X2NhbGliX2J5X2RyaXZlciA9IHRydWUsCi0JLmNoYWluX25vaXNlX2NhbGliX2J5X2RyaXZlciA9IHRydWUsCiAJLnNoYWRvd19yZWdfZW5hYmxlID0gdHJ1ZSwKIH07CiBzdGF0aWMgc3RydWN0IGl3bF9iYXNlX3BhcmFtcyBpd2w2MDAwX2cyX2Jhc2VfcGFyYW1zID0gewpAQCAtNTE0LDggKzQyMyw2IEBACiAJLm51bV9vZl9xdWV1ZXMgPSBJV0xBR05fTlVNX1FVRVVFUywKIAkubnVtX29mX2FtcGR1X3F1ZXVlcyA9IElXTEFHTl9OVU1fQU1QRFVfUVVFVUVTLAogCS5wbGxfY2ZnX3ZhbCA9IDAsCi0JLnNldF9sMHMgPSB0cnVlLAotCS51c2VfYnNtID0gZmFsc2UsCiAJLm1heF9sbF9pdGVtcyA9IE9UUF9NQVhfTExfSVRFTVNfNngwMCwKIAkuc2hhZG93X3JhbV9zdXBwb3J0ID0gdHJ1ZSwKIAkubGVkX2NvbXBlbnNhdGlvbiA9IDU3LApAQCAtNTI2LDkgKzQzMyw2IEBACiAJLmNoYWluX25vaXNlX3NjYWxlID0gMTAwMCwKIAkud2RfdGltZW91dCA9IElXTF9MT05HX1dEX1RJTUVPVVQsCiAJLm1heF9ldmVudF9sb2dfc2l6ZSA9IDUxMiwKLQkudWNvZGVfdHJhY2luZyA9IHRydWUsCi0JLnNlbnNpdGl2aXR5X2NhbGliX2J5X2RyaXZlciA9IHRydWUsCi0JLmNoYWluX25vaXNlX2NhbGliX2J5X2RyaXZlciA9IHRydWUsCiAJLnNoYWRvd19yZWdfZW5hYmxlID0gdHJ1ZSwKIH07CiAKQEAgLTUzOCw3ICs0NDIsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBpd2xfYnRfcGFyYW1zIGl3bDYwMDBfYnRfcGFyYW1zID0gewotCS5idF9zdGF0aXN0aWNzID0gdHJ1ZSwKIAkvKiBEdWUgdG8gYmx1ZXRvb3RoLCB3ZSB0cmFuc21pdCAyLjQgR0h6IHByb2JlcyBvbmx5IG9uIGFudGVubmEgQSAqLwogCS5hZHZhbmNlZF9idF9jb2V4aXN0ID0gdHJ1ZSwKIAkuYWdnX3RpbWVfbGltaXQgPSBCVF9BR0dfVEhSRVNIT0xEX0RFRiwKQEAgLTU1NCw3ICs0NTcsNiBAQAogCS5lZXByb21fdmVyID0gRUVQUk9NXzYwMDVfRUVQUk9NX1ZFUlNJT04sCQlcCiAJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNjAwNV9UWF9QT1dFUl9WRVJTSU9OLAlcCiAJLm9wcyA9ICZpd2w2MDAwX29wcywJCQkJCVwKLQkubW9kX3BhcmFtcyA9ICZpd2xhZ25fbW9kX3BhcmFtcywJCQlcCiAJLmJhc2VfcGFyYW1zID0gJml3bDYwMDBfZzJfYmFzZV9wYXJhbXMsCQkJXAogCS5uZWVkX2RjX2NhbGliID0gdHJ1ZSwJCQkJCVwKIAkubmVlZF90ZW1wX29mZnNldF9jYWxpYiA9IHRydWUsCQkJCVwKQEAgLTU4Myw3ICs0ODUsNiBAQAogCS5lZXByb21fdmVyID0gRUVQUk9NXzYwMzBfRUVQUk9NX1ZFUlNJT04sCQlcCiAJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNjAzMF9UWF9QT1dFUl9WRVJTSU9OLAlcCiAJLm9wcyA9ICZpd2w2MDMwX29wcywJCQkJCVwKLQkubW9kX3BhcmFtcyA9ICZpd2xhZ25fbW9kX3BhcmFtcywJCQlcCiAJLmJhc2VfcGFyYW1zID0gJml3bDYwMDBfZzJfYmFzZV9wYXJhbXMsCQkJXAogCS5idF9wYXJhbXMgPSAmaXdsNjAwMF9idF9wYXJhbXMsCQkJXAogCS5uZWVkX2RjX2NhbGliID0gdHJ1ZSwJCQkJCVwKQEAgLTYxMyw2ICs1MTQsMjIgQEAKIAlJV0xfREVWSUNFXzYwMzAsCiB9OwogCitzdHJ1Y3QgaXdsX2NmZyBpd2w2MDM1XzJhZ25fY2ZnID0geworCS5uYW1lID0gIjYwMzUgU2VyaWVzIDJ4MiBBR04vQlQiLAorCUlXTF9ERVZJQ0VfNjAzMCwKKwkuaHRfcGFyYW1zID0gJml3bDYwMDBfaHRfcGFyYW1zLAorfTsKKworc3RydWN0IGl3bF9jZmcgaXdsNjAzNV8yYWJnX2NmZyA9IHsKKwkubmFtZSA9ICI2MDM1IFNlcmllcyAyeDIgQUJHL0JUIiwKKwlJV0xfREVWSUNFXzYwMzAsCit9OworCitzdHJ1Y3QgaXdsX2NmZyBpd2w2MDM1XzJiZ19jZmcgPSB7CisJLm5hbWUgPSAiNjAzNSBTZXJpZXMgMngyIEJHL0JUIiwKKwlJV0xfREVWSUNFXzYwMzAsCit9OworCiBzdHJ1Y3QgaXdsX2NmZyBpd2wxMDMwX2Jnbl9jZmcgPSB7CiAJLm5hbWUgPSAiSW50ZWwoUikgQ2VudHJpbm8oUikgV2lyZWxlc3MtTiAxMDMwIEJHTiIsCiAJSVdMX0RFVklDRV82MDMwLApAQCAtNjQ5LDcgKzU2Niw2IEBACiAJLmVlcHJvbV92ZXIgPSBFRVBST01fNjAwMF9FRVBST01fVkVSU0lPTiwJCVwKIAkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV82MDAwX1RYX1BPV0VSX1ZFUlNJT04sCVwKIAkub3BzID0gJml3bDYwMDBfb3BzLAkJCQkJXAotCS5tb2RfcGFyYW1zID0gJml3bGFnbl9tb2RfcGFyYW1zLAkJCVwKIAkuYmFzZV9wYXJhbXMgPSAmaXdsNjAwMF9iYXNlX3BhcmFtcywJCQlcCiAJLnBhX3R5cGUgPSBJV0xfUEFfSU5URVJOQUwsCQkJCVwKIAkubGVkX21vZGUgPSBJV0xfTEVEX0JMSU5LCkBAIC02NzksNyArNTk1LDYgQEAKIAkub3BzID0gJml3bDYwNTBfb3BzLAkJCQkJXAogCS5lZXByb21fdmVyID0gRUVQUk9NXzYwNTBfRUVQUk9NX1ZFUlNJT04sCQlcCiAJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNjA1MF9UWF9QT1dFUl9WRVJTSU9OLAlcCi0JLm1vZF9wYXJhbXMgPSAmaXdsYWduX21vZF9wYXJhbXMsCQkJXAogCS5iYXNlX3BhcmFtcyA9ICZpd2w2MDUwX2Jhc2VfcGFyYW1zLAkJCVwKIAkubmVlZF9kY19jYWxpYiA9IHRydWUsCQkJCQlcCiAJLmxlZF9tb2RlID0gSVdMX0xFRF9CTElOSywJCQkJXApAQCAtNzA0LDcgKzYxOSw2IEBACiAJLmVlcHJvbV92ZXIgPSBFRVBST01fNjE1MF9FRVBST01fVkVSU0lPTiwKIAkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV82MTUwX1RYX1BPV0VSX1ZFUlNJT04sCiAJLm9wcyA9ICZpd2w2MTUwX29wcywKLQkubW9kX3BhcmFtcyA9ICZpd2xhZ25fbW9kX3BhcmFtcywKIAkuYmFzZV9wYXJhbXMgPSAmaXdsNjA1MF9iYXNlX3BhcmFtcywKIAkuaHRfcGFyYW1zID0gJml3bDYwMDBfaHRfcGFyYW1zLAogCS5uZWVkX2RjX2NhbGliID0gdHJ1ZSwKQEAgLTcyMCw3ICs2MzQsNiBAQAogCS5lZXByb21fdmVyID0gRUVQUk9NXzYwMDBfRUVQUk9NX1ZFUlNJT04sCiAJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNjAwMF9UWF9QT1dFUl9WRVJTSU9OLAogCS5vcHMgPSAmaXdsNjAwMF9vcHMsCi0JLm1vZF9wYXJhbXMgPSAmaXdsYWduX21vZF9wYXJhbXMsCiAJLmJhc2VfcGFyYW1zID0gJml3bDYwMDBfYmFzZV9wYXJhbXMsCiAJLmh0X3BhcmFtcyA9ICZpd2w2MDAwX2h0X3BhcmFtcywKIAkubmVlZF9kY19jYWxpYiA9IHRydWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tY2FsaWIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1jYWxpYi5jCmluZGV4IDkwMDYyOTMuLjM5ZDFlNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1jYWxpYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1jYWxpYi5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogQlNEIExJQ0VOU0UKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNjA1LDcgKzYwNSw3IEBACiAJSVdMX0RFQlVHX0NBTElCKHByaXYsICI8PHJldHVybiAweCVYXG4iLCByZXQpOwogfQogCi12b2lkIGl3bF9zZW5zaXRpdml0eV9jYWxpYnJhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHZvaWQgKnJlc3ApCit2b2lkIGl3bF9zZW5zaXRpdml0eV9jYWxpYnJhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJdTMyIHJ4X2VuYWJsZV90aW1lOwogCXUzMiBmYV9jY2s7CkBAIC02MzEsMTYgKzYzMSw5IEBACiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlpZiAoaXdsX2J0X3N0YXRpc3RpY3MocHJpdikpIHsKLQkJcnhfaW5mbyA9ICYoKChzdHJ1Y3QgaXdsX2J0X25vdGlmX3N0YXRpc3RpY3MgKilyZXNwKS0+Ci0JCQkgICAgICByeC5nZW5lcmFsLmNvbW1vbik7Ci0JCW9mZG0gPSAmKCgoc3RydWN0IGl3bF9idF9ub3RpZl9zdGF0aXN0aWNzICopcmVzcCktPnJ4Lm9mZG0pOwotCQljY2sgPSAmKCgoc3RydWN0IGl3bF9idF9ub3RpZl9zdGF0aXN0aWNzICopcmVzcCktPnJ4LmNjayk7Ci0JfSBlbHNlIHsKLQkJcnhfaW5mbyA9ICYoKChzdHJ1Y3QgaXdsX25vdGlmX3N0YXRpc3RpY3MgKilyZXNwKS0+cnguZ2VuZXJhbCk7Ci0JCW9mZG0gPSAmKCgoc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzICopcmVzcCktPnJ4Lm9mZG0pOwotCQljY2sgPSAmKCgoc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzICopcmVzcCktPnJ4LmNjayk7Ci0JfQorCXJ4X2luZm8gPSAmcHJpdi0+c3RhdGlzdGljcy5yeF9ub25fcGh5OworCW9mZG0gPSAmcHJpdi0+c3RhdGlzdGljcy5yeF9vZmRtOworCWNjayA9ICZwcml2LT5zdGF0aXN0aWNzLnJ4X2NjazsKIAlpZiAocnhfaW5mby0+aW50ZXJmZXJlbmNlX2RhdGFfZmxhZyAhPSBJTlRFUkZFUkVOQ0VfREFUQV9BVkFJTEFCTEUpIHsKIAkJSVdMX0RFQlVHX0NBTElCKHByaXYsICI8PCBpbnZhbGlkIGRhdGEuXG4iKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwpAQCAtODI0LDggKzgxNyw4IEBACiAJCQkJZmluZF9maXJzdF9jaGFpbihwcml2LT5jZmctPnZhbGlkX3R4X2FudCk7CiAJCQlkYXRhLT5kaXNjb25uX2FycmF5W2ZpcnN0X2NoYWluXSA9IDA7CiAJCQlhY3RpdmVfY2hhaW5zIHw9IEJJVChmaXJzdF9jaGFpbik7Ci0JCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIkFsbCBUeCBjaGFpbnMgYXJlIGRpc2Nvbm5lY3RlZCBcCi0JCQkJCVcvQSAtIGRlY2xhcmUgJWQgYXMgY29ubmVjdGVkXG4iLAorCQkJSVdMX0RFQlVHX0NBTElCKHByaXYsCisJCQkJCSJBbGwgVHggY2hhaW5zIGFyZSBkaXNjb25uZWN0ZWQgVy9BIC0gZGVjbGFyZSAlZCBhcyBjb25uZWN0ZWRcbiIsCiAJCQkJCWZpcnN0X2NoYWluKTsKIAkJCWJyZWFrOwogCQl9CkBAIC04NTEsNyArODQ0LDcgQEAKICAqIDEpICBXaGljaCBhbnRlbm5hcyBhcmUgY29ubmVjdGVkLgogICogMikgIERpZmZlcmVudGlhbCByeCBnYWluIHNldHRpbmdzIHRvIGJhbGFuY2UgdGhlIDMgcmVjZWl2ZXJzLgogICovCi12b2lkIGl3bF9jaGFpbl9ub2lzZV9jYWxpYnJhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHZvaWQgKnN0YXRfcmVzcCkKK3ZvaWQgaXdsX2NoYWluX25vaXNlX2NhbGlicmF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgaXdsX2NoYWluX25vaXNlX2RhdGEgKmRhdGEgPSBOVUxMOwogCkBAIC04OTYsMTMgKzg4OSw5IEBACiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlpZiAoaXdsX2J0X3N0YXRpc3RpY3MocHJpdikpIHsKLQkJcnhfaW5mbyA9ICYoKChzdHJ1Y3QgaXdsX2J0X25vdGlmX3N0YXRpc3RpY3MgKilzdGF0X3Jlc3ApLT4KLQkJCSAgICAgIHJ4LmdlbmVyYWwuY29tbW9uKTsKLQl9IGVsc2UgewotCQlyeF9pbmZvID0gJigoKHN0cnVjdCBpd2xfbm90aWZfc3RhdGlzdGljcyAqKXN0YXRfcmVzcCktPgotCQkJICAgICAgcnguZ2VuZXJhbCk7Ci0JfQorCisJcnhfaW5mbyA9ICZwcml2LT5zdGF0aXN0aWNzLnJ4X25vbl9waHk7CisKIAlpZiAocnhfaW5mby0+aW50ZXJmZXJlbmNlX2RhdGFfZmxhZyAhPSBJTlRFUkZFUkVOQ0VfREFUQV9BVkFJTEFCTEUpIHsKIAkJSVdMX0RFQlVHX0NBTElCKHByaXYsICIgPDwgSW50ZXJmZXJlbmNlIGRhdGEgdW5hdmFpbGFibGVcbiIpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CkBAIC05MTEsMTkgKzkwMCw5IEBACiAKIAlyeG9uX2JhbmQyNCA9ICEhKGN0eC0+c3RhZ2luZy5mbGFncyAmIFJYT05fRkxHX0JBTkRfMjRHX01TSyk7CiAJcnhvbl9jaG51bSA9IGxlMTZfdG9fY3B1KGN0eC0+c3RhZ2luZy5jaGFubmVsKTsKLQlpZiAoaXdsX2J0X3N0YXRpc3RpY3MocHJpdikpIHsKLQkJc3RhdF9iYW5kMjQgPSAhISgoKHN0cnVjdCBpd2xfYnRfbm90aWZfc3RhdGlzdGljcyAqKQotCQkJCSBzdGF0X3Jlc3ApLT5mbGFnICYKLQkJCQkgU1RBVElTVElDU19SRVBMWV9GTEdfQkFORF8yNEdfTVNLKTsKLQkJc3RhdF9jaG51bSA9IGxlMzJfdG9fY3B1KCgoc3RydWN0IGl3bF9idF9ub3RpZl9zdGF0aXN0aWNzICopCi0JCQkJCSBzdGF0X3Jlc3ApLT5mbGFnKSA+PiAxNjsKLQl9IGVsc2UgewotCQlzdGF0X2JhbmQyNCA9ICEhKCgoc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzICopCi0JCQkJIHN0YXRfcmVzcCktPmZsYWcgJgotCQkJCSBTVEFUSVNUSUNTX1JFUExZX0ZMR19CQU5EXzI0R19NU0spOwotCQlzdGF0X2NobnVtID0gbGUzMl90b19jcHUoKChzdHJ1Y3QgaXdsX25vdGlmX3N0YXRpc3RpY3MgKikKLQkJCQkJIHN0YXRfcmVzcCktPmZsYWcpID4+IDE2OwotCX0KKwlzdGF0X2JhbmQyNCA9CisJCSEhKHByaXYtPnN0YXRpc3RpY3MuZmxhZyAmIFNUQVRJU1RJQ1NfUkVQTFlfRkxHX0JBTkRfMjRHX01TSyk7CisJc3RhdF9jaG51bSA9IGxlMzJfdG9fY3B1KHByaXYtPnN0YXRpc3RpY3MuZmxhZykgPj4gMTY7CiAKIAkvKiBNYWtlIHN1cmUgd2UgYWNjdW11bGF0ZSBkYXRhIGZvciBqdXN0IHRoZSBhc3NvY2lhdGVkIGNoYW5uZWwKIAkgKiAgIChldmVuIGlmIHNjYW5uaW5nKS4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1jYWxpYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWNhbGliLmgKaW5kZXggZTM3YWU3MjYuLjRlZjRkZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1jYWxpYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1jYWxpYi5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogQlNEIExJQ0VOU0UKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNjYsOCArNjYsOCBAQAogI2luY2x1ZGUgIml3bC1jb3JlLmgiCiAjaW5jbHVkZSAiaXdsLWNvbW1hbmRzLmgiCiAKLXZvaWQgaXdsX2NoYWluX25vaXNlX2NhbGlicmF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdm9pZCAqc3RhdF9yZXNwKTsKLXZvaWQgaXdsX3NlbnNpdGl2aXR5X2NhbGlicmF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdm9pZCAqcmVzcCk7Cit2b2lkIGl3bF9jaGFpbl9ub2lzZV9jYWxpYnJhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwordm9pZCBpd2xfc2Vuc2l0aXZpdHlfY2FsaWJyYXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIAogdm9pZCBpd2xfaW5pdF9zZW5zaXRpdml0eShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogdm9pZCBpd2xfcmVzZXRfcnVuX3RpbWVfY2FsaWIoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tZGVidWdmcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTAwYWFhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1kZWJ1Z2ZzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoKLSogR1BMIExJQ0VOU0UgU1VNTUFSWQotKgotKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0qCi0qIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0qIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0qIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0qIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKgotKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLAotKiBVU0EKLSoKLSogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KLSogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuR1BMLgotKgotKiBDb250YWN0IEluZm9ybWF0aW9uOgotKiAgSW50ZWwgTGludXggV2lyZWxlc3MgPGlsd0BsaW51eC5pbnRlbC5jb20+Ci0qIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2luY2x1ZGUgIml3bC1hZ24uaCIKLSNpbmNsdWRlICJpd2wtYWduLWRlYnVnZnMuaCIKLQotc3RhdGljIGNvbnN0IGNoYXIgKmZtdF92YWx1ZSA9ICIgICUtMzBzICUxMHVcbiI7Ci1zdGF0aWMgY29uc3QgY2hhciAqZm10X2hleCAgID0gIiAgJS0zMHMgICAgICAgMHglMDJYXG4iOwotc3RhdGljIGNvbnN0IGNoYXIgKmZtdF90YWJsZSA9ICIgICUtMzBzICUxMHUgICUxMHUgICUxMHUgICUxMHVcbiI7Ci1zdGF0aWMgY29uc3QgY2hhciAqZm10X2hlYWRlciA9Ci0JIiUtMzJzICAgIGN1cnJlbnQgIGN1bXVsYXRpdmUgICAgICAgZGVsdGEgICAgICAgICBtYXhcbiI7Ci0KLXN0YXRpYyBpbnQgaXdsX3N0YXRpc3RpY3NfZmxhZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNoYXIgKmJ1ZiwgaW50IGJ1ZnN6KQotewotCWludCBwID0gMDsKLQl1MzIgZmxhZzsKLQotCWlmIChpd2xfYnRfc3RhdGlzdGljcyhwcml2KSkKLQkJZmxhZyA9IGxlMzJfdG9fY3B1KHByaXYtPl9hZ24uc3RhdGlzdGljc19idC5mbGFnKTsKLQllbHNlCi0JCWZsYWcgPSBsZTMyX3RvX2NwdShwcml2LT5fYWduLnN0YXRpc3RpY3MuZmxhZyk7Ci0KLQlwICs9IHNjbnByaW50ZihidWYgKyBwLCBidWZzeiAtIHAsICJTdGF0aXN0aWNzIEZsYWcoMHglWCk6XG4iLCBmbGFnKTsKLQlpZiAoZmxhZyAmIFVDT0RFX1NUQVRJU1RJQ1NfQ0xFQVJfTVNLKQotCQlwICs9IHNjbnByaW50ZihidWYgKyBwLCBidWZzeiAtIHAsCi0JCSJcdFN0YXRpc3RpY3MgaGF2ZSBiZWVuIGNsZWFyZWRcbiIpOwotCXAgKz0gc2NucHJpbnRmKGJ1ZiArIHAsIGJ1ZnN6IC0gcCwgIlx0T3BlcmF0aW9uYWwgRnJlcXVlbmN5OiAlc1xuIiwKLQkJKGZsYWcgJiBVQ09ERV9TVEFUSVNUSUNTX0ZSRVFVRU5DWV9NU0spCi0JCT8gIjIuNCBHSHoiIDogIjUuMiBHSHoiKTsKLQlwICs9IHNjbnByaW50ZihidWYgKyBwLCBidWZzeiAtIHAsICJcdFRHaiBOYXJyb3cgQmFuZDogJXNcbiIsCi0JCShmbGFnICYgVUNPREVfU1RBVElTVElDU19OQVJST1dfQkFORF9NU0spCi0JCSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOwotCi0JcmV0dXJuIHA7Ci19Ci0KLXNzaXplX3QgaXdsX3Vjb2RlX3J4X3N0YXRzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLSAgewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlpbnQgcG9zID0gMDsKLQljaGFyICpidWY7Ci0JaW50IGJ1ZnN6ID0gc2l6ZW9mKHN0cnVjdCBzdGF0aXN0aWNzX3J4X3BoeSkgKiA0MCArCi0JCSAgICBzaXplb2Yoc3RydWN0IHN0YXRpc3RpY3Nfcnhfbm9uX3BoeSkgKiA0MCArCi0JCSAgICBzaXplb2Yoc3RydWN0IHN0YXRpc3RpY3NfcnhfaHRfcGh5KSAqIDQwICsgNDAwOwotCXNzaXplX3QgcmV0OwotCXN0cnVjdCBzdGF0aXN0aWNzX3J4X3BoeSAqb2ZkbSwgKmFjY3VtX29mZG0sICpkZWx0YV9vZmRtLCAqbWF4X29mZG07Ci0Jc3RydWN0IHN0YXRpc3RpY3NfcnhfcGh5ICpjY2ssICphY2N1bV9jY2ssICpkZWx0YV9jY2ssICptYXhfY2NrOwotCXN0cnVjdCBzdGF0aXN0aWNzX3J4X25vbl9waHkgKmdlbmVyYWwsICphY2N1bV9nZW5lcmFsOwotCXN0cnVjdCBzdGF0aXN0aWNzX3J4X25vbl9waHkgKmRlbHRhX2dlbmVyYWwsICptYXhfZ2VuZXJhbDsKLQlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9odF9waHkgKmh0LCAqYWNjdW1faHQsICpkZWx0YV9odCwgKm1heF9odDsKLQotCWlmICghaXdsX2lzX2FsaXZlKHByaXYpKQotCQlyZXR1cm4gLUVBR0FJTjsKLQotCWJ1ZiA9IGt6YWxsb2MoYnVmc3osIEdGUF9LRVJORUwpOwotCWlmICghYnVmKSB7Ci0JCUlXTF9FUlIocHJpdiwgIkNhbiBub3QgYWxsb2NhdGUgQnVmZmVyXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JLyoKLQkgKiB0aGUgc3RhdGlzdGljIGluZm9ybWF0aW9uIGRpc3BsYXkgaGVyZSBpcyBiYXNlZCBvbgotCSAqIHRoZSBsYXN0IHN0YXRpc3RpY3Mgbm90aWZpY2F0aW9uIGZyb20gdUNvZGUKLQkgKiBtaWdodCBub3QgcmVmbGVjdCB0aGUgY3VycmVudCB1Q29kZSBhY3Rpdml0eQotCSAqLwotCWlmIChpd2xfYnRfc3RhdGlzdGljcyhwcml2KSkgewotCQlvZmRtID0gJnByaXYtPl9hZ24uc3RhdGlzdGljc19idC5yeC5vZmRtOwotCQljY2sgPSAmcHJpdi0+X2Fnbi5zdGF0aXN0aWNzX2J0LnJ4LmNjazsKLQkJZ2VuZXJhbCA9ICZwcml2LT5fYWduLnN0YXRpc3RpY3NfYnQucnguZ2VuZXJhbC5jb21tb247Ci0JCWh0ID0gJnByaXYtPl9hZ24uc3RhdGlzdGljc19idC5yeC5vZmRtX2h0OwotCQlhY2N1bV9vZmRtID0gJnByaXYtPl9hZ24uYWNjdW1fc3RhdGlzdGljc19idC5yeC5vZmRtOwotCQlhY2N1bV9jY2sgPSAmcHJpdi0+X2Fnbi5hY2N1bV9zdGF0aXN0aWNzX2J0LnJ4LmNjazsKLQkJYWNjdW1fZ2VuZXJhbCA9Ci0JCQkmcHJpdi0+X2Fnbi5hY2N1bV9zdGF0aXN0aWNzX2J0LnJ4LmdlbmVyYWwuY29tbW9uOwotCQlhY2N1bV9odCA9ICZwcml2LT5fYWduLmFjY3VtX3N0YXRpc3RpY3NfYnQucngub2ZkbV9odDsKLQkJZGVsdGFfb2ZkbSA9ICZwcml2LT5fYWduLmRlbHRhX3N0YXRpc3RpY3NfYnQucngub2ZkbTsKLQkJZGVsdGFfY2NrID0gJnByaXYtPl9hZ24uZGVsdGFfc3RhdGlzdGljc19idC5yeC5jY2s7Ci0JCWRlbHRhX2dlbmVyYWwgPQotCQkJJnByaXYtPl9hZ24uZGVsdGFfc3RhdGlzdGljc19idC5yeC5nZW5lcmFsLmNvbW1vbjsKLQkJZGVsdGFfaHQgPSAmcHJpdi0+X2Fnbi5kZWx0YV9zdGF0aXN0aWNzX2J0LnJ4Lm9mZG1faHQ7Ci0JCW1heF9vZmRtID0gJnByaXYtPl9hZ24ubWF4X2RlbHRhX2J0LnJ4Lm9mZG07Ci0JCW1heF9jY2sgPSAmcHJpdi0+X2Fnbi5tYXhfZGVsdGFfYnQucnguY2NrOwotCQltYXhfZ2VuZXJhbCA9ICZwcml2LT5fYWduLm1heF9kZWx0YV9idC5yeC5nZW5lcmFsLmNvbW1vbjsKLQkJbWF4X2h0ID0gJnByaXYtPl9hZ24ubWF4X2RlbHRhX2J0LnJ4Lm9mZG1faHQ7Ci0JfSBlbHNlIHsKLQkJb2ZkbSA9ICZwcml2LT5fYWduLnN0YXRpc3RpY3Mucngub2ZkbTsKLQkJY2NrID0gJnByaXYtPl9hZ24uc3RhdGlzdGljcy5yeC5jY2s7Ci0JCWdlbmVyYWwgPSAmcHJpdi0+X2Fnbi5zdGF0aXN0aWNzLnJ4LmdlbmVyYWw7Ci0JCWh0ID0gJnByaXYtPl9hZ24uc3RhdGlzdGljcy5yeC5vZmRtX2h0OwotCQlhY2N1bV9vZmRtID0gJnByaXYtPl9hZ24uYWNjdW1fc3RhdGlzdGljcy5yeC5vZmRtOwotCQlhY2N1bV9jY2sgPSAmcHJpdi0+X2Fnbi5hY2N1bV9zdGF0aXN0aWNzLnJ4LmNjazsKLQkJYWNjdW1fZ2VuZXJhbCA9ICZwcml2LT5fYWduLmFjY3VtX3N0YXRpc3RpY3MucnguZ2VuZXJhbDsKLQkJYWNjdW1faHQgPSAmcHJpdi0+X2Fnbi5hY2N1bV9zdGF0aXN0aWNzLnJ4Lm9mZG1faHQ7Ci0JCWRlbHRhX29mZG0gPSAmcHJpdi0+X2Fnbi5kZWx0YV9zdGF0aXN0aWNzLnJ4Lm9mZG07Ci0JCWRlbHRhX2NjayA9ICZwcml2LT5fYWduLmRlbHRhX3N0YXRpc3RpY3MucnguY2NrOwotCQlkZWx0YV9nZW5lcmFsID0gJnByaXYtPl9hZ24uZGVsdGFfc3RhdGlzdGljcy5yeC5nZW5lcmFsOwotCQlkZWx0YV9odCA9ICZwcml2LT5fYWduLmRlbHRhX3N0YXRpc3RpY3Mucngub2ZkbV9odDsKLQkJbWF4X29mZG0gPSAmcHJpdi0+X2Fnbi5tYXhfZGVsdGEucngub2ZkbTsKLQkJbWF4X2NjayA9ICZwcml2LT5fYWduLm1heF9kZWx0YS5yeC5jY2s7Ci0JCW1heF9nZW5lcmFsID0gJnByaXYtPl9hZ24ubWF4X2RlbHRhLnJ4LmdlbmVyYWw7Ci0JCW1heF9odCA9ICZwcml2LT5fYWduLm1heF9kZWx0YS5yeC5vZmRtX2h0OwotCX0KLQotCXBvcyArPSBpd2xfc3RhdGlzdGljc19mbGFnKHByaXYsIGJ1ZiwgYnVmc3opOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfaGVhZGVyLCAiU3RhdGlzdGljc19SeCAtIE9GRE06Iik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImluYV9jbnQ6IiwKLQkJCSBsZTMyX3RvX2NwdShvZmRtLT5pbmFfY250KSwKLQkJCSBhY2N1bV9vZmRtLT5pbmFfY250LAotCQkJIGRlbHRhX29mZG0tPmluYV9jbnQsIG1heF9vZmRtLT5pbmFfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiZmluYV9jbnQ6IiwKLQkJCSBsZTMyX3RvX2NwdShvZmRtLT5maW5hX2NudCksIGFjY3VtX29mZG0tPmZpbmFfY250LAotCQkJIGRlbHRhX29mZG0tPmZpbmFfY250LCBtYXhfb2ZkbS0+ZmluYV9jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJwbGNwX2VycjoiLAotCQkJIGxlMzJfdG9fY3B1KG9mZG0tPnBsY3BfZXJyKSwgYWNjdW1fb2ZkbS0+cGxjcF9lcnIsCi0JCQkgZGVsdGFfb2ZkbS0+cGxjcF9lcnIsIG1heF9vZmRtLT5wbGNwX2Vycik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImNyYzMyX2VycjoiLAotCQkJIGxlMzJfdG9fY3B1KG9mZG0tPmNyYzMyX2VyciksIGFjY3VtX29mZG0tPmNyYzMyX2VyciwKLQkJCSBkZWx0YV9vZmRtLT5jcmMzMl9lcnIsIG1heF9vZmRtLT5jcmMzMl9lcnIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJvdmVycnVuX2VycjoiLAotCQkJIGxlMzJfdG9fY3B1KG9mZG0tPm92ZXJydW5fZXJyKSwKLQkJCSBhY2N1bV9vZmRtLT5vdmVycnVuX2VyciwgZGVsdGFfb2ZkbS0+b3ZlcnJ1bl9lcnIsCi0JCQkgbWF4X29mZG0tPm92ZXJydW5fZXJyKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiZWFybHlfb3ZlcnJ1bl9lcnI6IiwKLQkJCSBsZTMyX3RvX2NwdShvZmRtLT5lYXJseV9vdmVycnVuX2VyciksCi0JCQkgYWNjdW1fb2ZkbS0+ZWFybHlfb3ZlcnJ1bl9lcnIsCi0JCQkgZGVsdGFfb2ZkbS0+ZWFybHlfb3ZlcnJ1bl9lcnIsCi0JCQkgbWF4X29mZG0tPmVhcmx5X292ZXJydW5fZXJyKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiY3JjMzJfZ29vZDoiLAotCQkJIGxlMzJfdG9fY3B1KG9mZG0tPmNyYzMyX2dvb2QpLAotCQkJIGFjY3VtX29mZG0tPmNyYzMyX2dvb2QsIGRlbHRhX29mZG0tPmNyYzMyX2dvb2QsCi0JCQkgbWF4X29mZG0tPmNyYzMyX2dvb2QpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJmYWxzZV9hbGFybV9jbnQ6IiwKLQkJCSBsZTMyX3RvX2NwdShvZmRtLT5mYWxzZV9hbGFybV9jbnQpLAotCQkJIGFjY3VtX29mZG0tPmZhbHNlX2FsYXJtX2NudCwKLQkJCSBkZWx0YV9vZmRtLT5mYWxzZV9hbGFybV9jbnQsCi0JCQkgbWF4X29mZG0tPmZhbHNlX2FsYXJtX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImZpbmFfc3luY19lcnJfY250OiIsCi0JCQkgbGUzMl90b19jcHUob2ZkbS0+ZmluYV9zeW5jX2Vycl9jbnQpLAotCQkJIGFjY3VtX29mZG0tPmZpbmFfc3luY19lcnJfY250LAotCQkJIGRlbHRhX29mZG0tPmZpbmFfc3luY19lcnJfY250LAotCQkJIG1heF9vZmRtLT5maW5hX3N5bmNfZXJyX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgInNmZF90aW1lb3V0OiIsCi0JCQkgbGUzMl90b19jcHUob2ZkbS0+c2ZkX3RpbWVvdXQpLAotCQkJIGFjY3VtX29mZG0tPnNmZF90aW1lb3V0LCBkZWx0YV9vZmRtLT5zZmRfdGltZW91dCwKLQkJCSBtYXhfb2ZkbS0+c2ZkX3RpbWVvdXQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJmaW5hX3RpbWVvdXQ6IiwKLQkJCSBsZTMyX3RvX2NwdShvZmRtLT5maW5hX3RpbWVvdXQpLAotCQkJIGFjY3VtX29mZG0tPmZpbmFfdGltZW91dCwgZGVsdGFfb2ZkbS0+ZmluYV90aW1lb3V0LAotCQkJIG1heF9vZmRtLT5maW5hX3RpbWVvdXQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJ1bnJlc3BvbmRlZF9ydHM6IiwKLQkJCSBsZTMyX3RvX2NwdShvZmRtLT51bnJlc3BvbmRlZF9ydHMpLAotCQkJIGFjY3VtX29mZG0tPnVucmVzcG9uZGVkX3J0cywKLQkJCSBkZWx0YV9vZmRtLT51bnJlc3BvbmRlZF9ydHMsCi0JCQkgbWF4X29mZG0tPnVucmVzcG9uZGVkX3J0cyk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgInJ4ZV9mcmFtZV9sbXRfb3ZydW46IiwKLQkJCSBsZTMyX3RvX2NwdShvZmRtLT5yeGVfZnJhbWVfbGltaXRfb3ZlcnJ1biksCi0JCQkgYWNjdW1fb2ZkbS0+cnhlX2ZyYW1lX2xpbWl0X292ZXJydW4sCi0JCQkgZGVsdGFfb2ZkbS0+cnhlX2ZyYW1lX2xpbWl0X292ZXJydW4sCi0JCQkgbWF4X29mZG0tPnJ4ZV9mcmFtZV9saW1pdF9vdmVycnVuKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAic2VudF9hY2tfY250OiIsCi0JCQkgbGUzMl90b19jcHUob2ZkbS0+c2VudF9hY2tfY250KSwKLQkJCSBhY2N1bV9vZmRtLT5zZW50X2Fja19jbnQsIGRlbHRhX29mZG0tPnNlbnRfYWNrX2NudCwKLQkJCSBtYXhfb2ZkbS0+c2VudF9hY2tfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAic2VudF9jdHNfY250OiIsCi0JCQkgbGUzMl90b19jcHUob2ZkbS0+c2VudF9jdHNfY250KSwKLQkJCSBhY2N1bV9vZmRtLT5zZW50X2N0c19jbnQsIGRlbHRhX29mZG0tPnNlbnRfY3RzX2NudCwKLQkJCSBtYXhfb2ZkbS0+c2VudF9jdHNfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAic2VudF9iYV9yc3BfY250OiIsCi0JCQkgbGUzMl90b19jcHUob2ZkbS0+c2VudF9iYV9yc3BfY250KSwKLQkJCSBhY2N1bV9vZmRtLT5zZW50X2JhX3JzcF9jbnQsCi0JCQkgZGVsdGFfb2ZkbS0+c2VudF9iYV9yc3BfY250LAotCQkJIG1heF9vZmRtLT5zZW50X2JhX3JzcF9jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJkc3Bfc2VsZl9raWxsOiIsCi0JCQkgbGUzMl90b19jcHUob2ZkbS0+ZHNwX3NlbGZfa2lsbCksCi0JCQkgYWNjdW1fb2ZkbS0+ZHNwX3NlbGZfa2lsbCwKLQkJCSBkZWx0YV9vZmRtLT5kc3Bfc2VsZl9raWxsLAotCQkJIG1heF9vZmRtLT5kc3Bfc2VsZl9raWxsKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAibWhfZm9ybWF0X2VycjoiLAotCQkJIGxlMzJfdG9fY3B1KG9mZG0tPm1oX2Zvcm1hdF9lcnIpLAotCQkJIGFjY3VtX29mZG0tPm1oX2Zvcm1hdF9lcnIsCi0JCQkgZGVsdGFfb2ZkbS0+bWhfZm9ybWF0X2VyciwKLQkJCSBtYXhfb2ZkbS0+bWhfZm9ybWF0X2Vycik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgInJlX2FjcV9tYWluX3Jzc2lfc3VtOiIsCi0JCQkgbGUzMl90b19jcHUob2ZkbS0+cmVfYWNxX21haW5fcnNzaV9zdW0pLAotCQkJIGFjY3VtX29mZG0tPnJlX2FjcV9tYWluX3Jzc2lfc3VtLAotCQkJIGRlbHRhX29mZG0tPnJlX2FjcV9tYWluX3Jzc2lfc3VtLAotCQkJIG1heF9vZmRtLT5yZV9hY3FfbWFpbl9yc3NpX3N1bSk7Ci0KLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X2hlYWRlciwgIlN0YXRpc3RpY3NfUnggLSBDQ0s6Iik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImluYV9jbnQ6IiwKLQkJCSBsZTMyX3RvX2NwdShjY2stPmluYV9jbnQpLCBhY2N1bV9jY2stPmluYV9jbnQsCi0JCQkgZGVsdGFfY2NrLT5pbmFfY250LCBtYXhfY2NrLT5pbmFfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiZmluYV9jbnQ6IiwKLQkJCSBsZTMyX3RvX2NwdShjY2stPmZpbmFfY250KSwgYWNjdW1fY2NrLT5maW5hX2NudCwKLQkJCSBkZWx0YV9jY2stPmZpbmFfY250LCBtYXhfY2NrLT5maW5hX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgInBsY3BfZXJyOiIsCi0JCQkgbGUzMl90b19jcHUoY2NrLT5wbGNwX2VyciksIGFjY3VtX2Njay0+cGxjcF9lcnIsCi0JCQkgZGVsdGFfY2NrLT5wbGNwX2VyciwgbWF4X2Njay0+cGxjcF9lcnIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJjcmMzMl9lcnI6IiwKLQkJCSBsZTMyX3RvX2NwdShjY2stPmNyYzMyX2VyciksIGFjY3VtX2Njay0+Y3JjMzJfZXJyLAotCQkJIGRlbHRhX2Njay0+Y3JjMzJfZXJyLCBtYXhfY2NrLT5jcmMzMl9lcnIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJvdmVycnVuX2VycjoiLAotCQkJIGxlMzJfdG9fY3B1KGNjay0+b3ZlcnJ1bl9lcnIpLAotCQkJIGFjY3VtX2Njay0+b3ZlcnJ1bl9lcnIsIGRlbHRhX2Njay0+b3ZlcnJ1bl9lcnIsCi0JCQkgbWF4X2Njay0+b3ZlcnJ1bl9lcnIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJlYXJseV9vdmVycnVuX2VycjoiLAotCQkJIGxlMzJfdG9fY3B1KGNjay0+ZWFybHlfb3ZlcnJ1bl9lcnIpLAotCQkJIGFjY3VtX2Njay0+ZWFybHlfb3ZlcnJ1bl9lcnIsCi0JCQkgZGVsdGFfY2NrLT5lYXJseV9vdmVycnVuX2VyciwKLQkJCSBtYXhfY2NrLT5lYXJseV9vdmVycnVuX2Vycik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImNyYzMyX2dvb2Q6IiwKLQkJCSBsZTMyX3RvX2NwdShjY2stPmNyYzMyX2dvb2QpLCBhY2N1bV9jY2stPmNyYzMyX2dvb2QsCi0JCQkgZGVsdGFfY2NrLT5jcmMzMl9nb29kLCBtYXhfY2NrLT5jcmMzMl9nb29kKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiZmFsc2VfYWxhcm1fY250OiIsCi0JCQkgbGUzMl90b19jcHUoY2NrLT5mYWxzZV9hbGFybV9jbnQpLAotCQkJIGFjY3VtX2Njay0+ZmFsc2VfYWxhcm1fY250LAotCQkJIGRlbHRhX2Njay0+ZmFsc2VfYWxhcm1fY250LCBtYXhfY2NrLT5mYWxzZV9hbGFybV9jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJmaW5hX3N5bmNfZXJyX2NudDoiLAotCQkJIGxlMzJfdG9fY3B1KGNjay0+ZmluYV9zeW5jX2Vycl9jbnQpLAotCQkJIGFjY3VtX2Njay0+ZmluYV9zeW5jX2Vycl9jbnQsCi0JCQkgZGVsdGFfY2NrLT5maW5hX3N5bmNfZXJyX2NudCwKLQkJCSBtYXhfY2NrLT5maW5hX3N5bmNfZXJyX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgInNmZF90aW1lb3V0OiIsCi0JCQkgbGUzMl90b19jcHUoY2NrLT5zZmRfdGltZW91dCksCi0JCQkgYWNjdW1fY2NrLT5zZmRfdGltZW91dCwgZGVsdGFfY2NrLT5zZmRfdGltZW91dCwKLQkJCSBtYXhfY2NrLT5zZmRfdGltZW91dCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImZpbmFfdGltZW91dDoiLAotCQkJIGxlMzJfdG9fY3B1KGNjay0+ZmluYV90aW1lb3V0KSwKLQkJCSBhY2N1bV9jY2stPmZpbmFfdGltZW91dCwgZGVsdGFfY2NrLT5maW5hX3RpbWVvdXQsCi0JCQkgbWF4X2Njay0+ZmluYV90aW1lb3V0KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAidW5yZXNwb25kZWRfcnRzOiIsCi0JCQkgbGUzMl90b19jcHUoY2NrLT51bnJlc3BvbmRlZF9ydHMpLAotCQkJIGFjY3VtX2Njay0+dW5yZXNwb25kZWRfcnRzLCBkZWx0YV9jY2stPnVucmVzcG9uZGVkX3J0cywKLQkJCSBtYXhfY2NrLT51bnJlc3BvbmRlZF9ydHMpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJyeGVfZnJhbWVfbG10X292cnVuOiIsCi0JCQkgbGUzMl90b19jcHUoY2NrLT5yeGVfZnJhbWVfbGltaXRfb3ZlcnJ1biksCi0JCQkgYWNjdW1fY2NrLT5yeGVfZnJhbWVfbGltaXRfb3ZlcnJ1biwKLQkJCSBkZWx0YV9jY2stPnJ4ZV9mcmFtZV9saW1pdF9vdmVycnVuLAotCQkJIG1heF9jY2stPnJ4ZV9mcmFtZV9saW1pdF9vdmVycnVuKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAic2VudF9hY2tfY250OiIsCi0JCQkgbGUzMl90b19jcHUoY2NrLT5zZW50X2Fja19jbnQpLAotCQkJIGFjY3VtX2Njay0+c2VudF9hY2tfY250LCBkZWx0YV9jY2stPnNlbnRfYWNrX2NudCwKLQkJCSBtYXhfY2NrLT5zZW50X2Fja19jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJzZW50X2N0c19jbnQ6IiwKLQkJCSBsZTMyX3RvX2NwdShjY2stPnNlbnRfY3RzX2NudCksCi0JCQkgYWNjdW1fY2NrLT5zZW50X2N0c19jbnQsIGRlbHRhX2Njay0+c2VudF9jdHNfY250LAotCQkJIG1heF9jY2stPnNlbnRfY3RzX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgInNlbnRfYmFfcnNwX2NudDoiLAotCQkJIGxlMzJfdG9fY3B1KGNjay0+c2VudF9iYV9yc3BfY250KSwKLQkJCSBhY2N1bV9jY2stPnNlbnRfYmFfcnNwX2NudCwKLQkJCSBkZWx0YV9jY2stPnNlbnRfYmFfcnNwX2NudCwKLQkJCSBtYXhfY2NrLT5zZW50X2JhX3JzcF9jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJkc3Bfc2VsZl9raWxsOiIsCi0JCQkgbGUzMl90b19jcHUoY2NrLT5kc3Bfc2VsZl9raWxsKSwKLQkJCSBhY2N1bV9jY2stPmRzcF9zZWxmX2tpbGwsIGRlbHRhX2Njay0+ZHNwX3NlbGZfa2lsbCwKLQkJCSBtYXhfY2NrLT5kc3Bfc2VsZl9raWxsKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAibWhfZm9ybWF0X2VycjoiLAotCQkJIGxlMzJfdG9fY3B1KGNjay0+bWhfZm9ybWF0X2VyciksCi0JCQkgYWNjdW1fY2NrLT5taF9mb3JtYXRfZXJyLCBkZWx0YV9jY2stPm1oX2Zvcm1hdF9lcnIsCi0JCQkgbWF4X2Njay0+bWhfZm9ybWF0X2Vycik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgInJlX2FjcV9tYWluX3Jzc2lfc3VtOiIsCi0JCQkgbGUzMl90b19jcHUoY2NrLT5yZV9hY3FfbWFpbl9yc3NpX3N1bSksCi0JCQkgYWNjdW1fY2NrLT5yZV9hY3FfbWFpbl9yc3NpX3N1bSwKLQkJCSBkZWx0YV9jY2stPnJlX2FjcV9tYWluX3Jzc2lfc3VtLAotCQkJIG1heF9jY2stPnJlX2FjcV9tYWluX3Jzc2lfc3VtKTsKLQotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfaGVhZGVyLCAiU3RhdGlzdGljc19SeCAtIEdFTkVSQUw6Iik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImJvZ3VzX2N0czoiLAotCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmJvZ3VzX2N0cyksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+Ym9ndXNfY3RzLCBkZWx0YV9nZW5lcmFsLT5ib2d1c19jdHMsCi0JCQkgbWF4X2dlbmVyYWwtPmJvZ3VzX2N0cyk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImJvZ3VzX2FjazoiLAotCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmJvZ3VzX2FjayksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+Ym9ndXNfYWNrLCBkZWx0YV9nZW5lcmFsLT5ib2d1c19hY2ssCi0JCQkgbWF4X2dlbmVyYWwtPmJvZ3VzX2Fjayk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgIm5vbl9ic3NpZF9mcmFtZXM6IiwKLQkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5ub25fYnNzaWRfZnJhbWVzKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5ub25fYnNzaWRfZnJhbWVzLAotCQkJIGRlbHRhX2dlbmVyYWwtPm5vbl9ic3NpZF9mcmFtZXMsCi0JCQkgbWF4X2dlbmVyYWwtPm5vbl9ic3NpZF9mcmFtZXMpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJmaWx0ZXJlZF9mcmFtZXM6IiwKLQkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5maWx0ZXJlZF9mcmFtZXMpLAotCQkJIGFjY3VtX2dlbmVyYWwtPmZpbHRlcmVkX2ZyYW1lcywKLQkJCSBkZWx0YV9nZW5lcmFsLT5maWx0ZXJlZF9mcmFtZXMsCi0JCQkgbWF4X2dlbmVyYWwtPmZpbHRlcmVkX2ZyYW1lcyk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgIm5vbl9jaGFubmVsX2JlYWNvbnM6IiwKLQkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5ub25fY2hhbm5lbF9iZWFjb25zKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5ub25fY2hhbm5lbF9iZWFjb25zLAotCQkJIGRlbHRhX2dlbmVyYWwtPm5vbl9jaGFubmVsX2JlYWNvbnMsCi0JCQkgbWF4X2dlbmVyYWwtPm5vbl9jaGFubmVsX2JlYWNvbnMpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJjaGFubmVsX2JlYWNvbnM6IiwKLQkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5jaGFubmVsX2JlYWNvbnMpLAotCQkJIGFjY3VtX2dlbmVyYWwtPmNoYW5uZWxfYmVhY29ucywKLQkJCSBkZWx0YV9nZW5lcmFsLT5jaGFubmVsX2JlYWNvbnMsCi0JCQkgbWF4X2dlbmVyYWwtPmNoYW5uZWxfYmVhY29ucyk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgIm51bV9taXNzZWRfYmNvbjoiLAotCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPm51bV9taXNzZWRfYmNvbiksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+bnVtX21pc3NlZF9iY29uLAotCQkJIGRlbHRhX2dlbmVyYWwtPm51bV9taXNzZWRfYmNvbiwKLQkJCSBtYXhfZ2VuZXJhbC0+bnVtX21pc3NlZF9iY29uKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiYWRjX3J4X3NhdHVyYXRpb25fdGltZToiLAotCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmFkY19yeF9zYXR1cmF0aW9uX3RpbWUpLAotCQkJIGFjY3VtX2dlbmVyYWwtPmFkY19yeF9zYXR1cmF0aW9uX3RpbWUsCi0JCQkgZGVsdGFfZ2VuZXJhbC0+YWRjX3J4X3NhdHVyYXRpb25fdGltZSwKLQkJCSBtYXhfZ2VuZXJhbC0+YWRjX3J4X3NhdHVyYXRpb25fdGltZSk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImluYV9kZXRlY3Rfc2VhcmNoX3RtOiIsCi0JCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+aW5hX2RldGVjdGlvbl9zZWFyY2hfdGltZSksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+aW5hX2RldGVjdGlvbl9zZWFyY2hfdGltZSwKLQkJCSBkZWx0YV9nZW5lcmFsLT5pbmFfZGV0ZWN0aW9uX3NlYXJjaF90aW1lLAotCQkJIG1heF9nZW5lcmFsLT5pbmFfZGV0ZWN0aW9uX3NlYXJjaF90aW1lKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiYmVhY29uX3NpbGVuY2VfcnNzaV9hOiIsCi0JCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+YmVhY29uX3NpbGVuY2VfcnNzaV9hKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5iZWFjb25fc2lsZW5jZV9yc3NpX2EsCi0JCQkgZGVsdGFfZ2VuZXJhbC0+YmVhY29uX3NpbGVuY2VfcnNzaV9hLAotCQkJIG1heF9nZW5lcmFsLT5iZWFjb25fc2lsZW5jZV9yc3NpX2EpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJiZWFjb25fc2lsZW5jZV9yc3NpX2I6IiwKLQkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5iZWFjb25fc2lsZW5jZV9yc3NpX2IpLAotCQkJIGFjY3VtX2dlbmVyYWwtPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYiwKLQkJCSBkZWx0YV9nZW5lcmFsLT5iZWFjb25fc2lsZW5jZV9yc3NpX2IsCi0JCQkgbWF4X2dlbmVyYWwtPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImJlYWNvbl9zaWxlbmNlX3Jzc2lfYzoiLAotCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYyksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+YmVhY29uX3NpbGVuY2VfcnNzaV9jLAotCQkJIGRlbHRhX2dlbmVyYWwtPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYywKLQkJCSBtYXhfZ2VuZXJhbC0+YmVhY29uX3NpbGVuY2VfcnNzaV9jKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiaW50ZXJmZXJlbmNlX2RhdGFfZmxhZzoiLAotCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmludGVyZmVyZW5jZV9kYXRhX2ZsYWcpLAotCQkJIGFjY3VtX2dlbmVyYWwtPmludGVyZmVyZW5jZV9kYXRhX2ZsYWcsCi0JCQkgZGVsdGFfZ2VuZXJhbC0+aW50ZXJmZXJlbmNlX2RhdGFfZmxhZywKLQkJCSBtYXhfZ2VuZXJhbC0+aW50ZXJmZXJlbmNlX2RhdGFfZmxhZyk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImNoYW5uZWxfbG9hZDoiLAotCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmNoYW5uZWxfbG9hZCksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+Y2hhbm5lbF9sb2FkLAotCQkJIGRlbHRhX2dlbmVyYWwtPmNoYW5uZWxfbG9hZCwKLQkJCSBtYXhfZ2VuZXJhbC0+Y2hhbm5lbF9sb2FkKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiZHNwX2ZhbHNlX2FsYXJtczoiLAotCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmRzcF9mYWxzZV9hbGFybXMpLAotCQkJIGFjY3VtX2dlbmVyYWwtPmRzcF9mYWxzZV9hbGFybXMsCi0JCQkgZGVsdGFfZ2VuZXJhbC0+ZHNwX2ZhbHNlX2FsYXJtcywKLQkJCSBtYXhfZ2VuZXJhbC0+ZHNwX2ZhbHNlX2FsYXJtcyk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImJlYWNvbl9yc3NpX2E6IiwKLQkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5iZWFjb25fcnNzaV9hKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5iZWFjb25fcnNzaV9hLAotCQkJIGRlbHRhX2dlbmVyYWwtPmJlYWNvbl9yc3NpX2EsCi0JCQkgbWF4X2dlbmVyYWwtPmJlYWNvbl9yc3NpX2EpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJiZWFjb25fcnNzaV9iOiIsCi0JCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+YmVhY29uX3Jzc2lfYiksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+YmVhY29uX3Jzc2lfYiwKLQkJCSBkZWx0YV9nZW5lcmFsLT5iZWFjb25fcnNzaV9iLAotCQkJIG1heF9nZW5lcmFsLT5iZWFjb25fcnNzaV9iKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiYmVhY29uX3Jzc2lfYzoiLAotCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmJlYWNvbl9yc3NpX2MpLAotCQkJIGFjY3VtX2dlbmVyYWwtPmJlYWNvbl9yc3NpX2MsCi0JCQkgZGVsdGFfZ2VuZXJhbC0+YmVhY29uX3Jzc2lfYywKLQkJCSBtYXhfZ2VuZXJhbC0+YmVhY29uX3Jzc2lfYyk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImJlYWNvbl9lbmVyZ3lfYToiLAotCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmJlYWNvbl9lbmVyZ3lfYSksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+YmVhY29uX2VuZXJneV9hLAotCQkJIGRlbHRhX2dlbmVyYWwtPmJlYWNvbl9lbmVyZ3lfYSwKLQkJCSBtYXhfZ2VuZXJhbC0+YmVhY29uX2VuZXJneV9hKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiYmVhY29uX2VuZXJneV9iOiIsCi0JCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+YmVhY29uX2VuZXJneV9iKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5iZWFjb25fZW5lcmd5X2IsCi0JCQkgZGVsdGFfZ2VuZXJhbC0+YmVhY29uX2VuZXJneV9iLAotCQkJIG1heF9nZW5lcmFsLT5iZWFjb25fZW5lcmd5X2IpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJiZWFjb25fZW5lcmd5X2M6IiwKLQkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5iZWFjb25fZW5lcmd5X2MpLAotCQkJIGFjY3VtX2dlbmVyYWwtPmJlYWNvbl9lbmVyZ3lfYywKLQkJCSBkZWx0YV9nZW5lcmFsLT5iZWFjb25fZW5lcmd5X2MsCi0JCQkgbWF4X2dlbmVyYWwtPmJlYWNvbl9lbmVyZ3lfYyk7Ci0KLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X2hlYWRlciwgIlN0YXRpc3RpY3NfUnggLSBPRkRNX0hUOiIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJwbGNwX2VycjoiLAotCQkJIGxlMzJfdG9fY3B1KGh0LT5wbGNwX2VyciksIGFjY3VtX2h0LT5wbGNwX2VyciwKLQkJCSBkZWx0YV9odC0+cGxjcF9lcnIsIG1heF9odC0+cGxjcF9lcnIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJvdmVycnVuX2VycjoiLAotCQkJIGxlMzJfdG9fY3B1KGh0LT5vdmVycnVuX2VyciksIGFjY3VtX2h0LT5vdmVycnVuX2VyciwKLQkJCSBkZWx0YV9odC0+b3ZlcnJ1bl9lcnIsIG1heF9odC0+b3ZlcnJ1bl9lcnIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJlYXJseV9vdmVycnVuX2VycjoiLAotCQkJIGxlMzJfdG9fY3B1KGh0LT5lYXJseV9vdmVycnVuX2VyciksCi0JCQkgYWNjdW1faHQtPmVhcmx5X292ZXJydW5fZXJyLAotCQkJIGRlbHRhX2h0LT5lYXJseV9vdmVycnVuX2VyciwKLQkJCSBtYXhfaHQtPmVhcmx5X292ZXJydW5fZXJyKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiY3JjMzJfZ29vZDoiLAotCQkJIGxlMzJfdG9fY3B1KGh0LT5jcmMzMl9nb29kKSwgYWNjdW1faHQtPmNyYzMyX2dvb2QsCi0JCQkgZGVsdGFfaHQtPmNyYzMyX2dvb2QsIG1heF9odC0+Y3JjMzJfZ29vZCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImNyYzMyX2VycjoiLAotCQkJIGxlMzJfdG9fY3B1KGh0LT5jcmMzMl9lcnIpLCBhY2N1bV9odC0+Y3JjMzJfZXJyLAotCQkJIGRlbHRhX2h0LT5jcmMzMl9lcnIsIG1heF9odC0+Y3JjMzJfZXJyKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAibWhfZm9ybWF0X2VycjoiLAotCQkJIGxlMzJfdG9fY3B1KGh0LT5taF9mb3JtYXRfZXJyKSwKLQkJCSBhY2N1bV9odC0+bWhfZm9ybWF0X2VyciwKLQkJCSBkZWx0YV9odC0+bWhfZm9ybWF0X2VyciwgbWF4X2h0LT5taF9mb3JtYXRfZXJyKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiYWdnX2NyYzMyX2dvb2Q6IiwKLQkJCSBsZTMyX3RvX2NwdShodC0+YWdnX2NyYzMyX2dvb2QpLAotCQkJIGFjY3VtX2h0LT5hZ2dfY3JjMzJfZ29vZCwKLQkJCSBkZWx0YV9odC0+YWdnX2NyYzMyX2dvb2QsIG1heF9odC0+YWdnX2NyYzMyX2dvb2QpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJhZ2dfbXBkdV9jbnQ6IiwKLQkJCSBsZTMyX3RvX2NwdShodC0+YWdnX21wZHVfY250KSwKLQkJCSBhY2N1bV9odC0+YWdnX21wZHVfY250LAotCQkJIGRlbHRhX2h0LT5hZ2dfbXBkdV9jbnQsIG1heF9odC0+YWdnX21wZHVfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiYWdnX2NudDoiLAotCQkJIGxlMzJfdG9fY3B1KGh0LT5hZ2dfY250KSwgYWNjdW1faHQtPmFnZ19jbnQsCi0JCQkgZGVsdGFfaHQtPmFnZ19jbnQsIG1heF9odC0+YWdnX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgInVuc3VwcG9ydF9tY3M6IiwKLQkJCSBsZTMyX3RvX2NwdShodC0+dW5zdXBwb3J0X21jcyksCi0JCQkgYWNjdW1faHQtPnVuc3VwcG9ydF9tY3MsCi0JCQkgZGVsdGFfaHQtPnVuc3VwcG9ydF9tY3MsIG1heF9odC0+dW5zdXBwb3J0X21jcyk7Ci0KLQlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKLQlrZnJlZShidWYpOwotCXJldHVybiByZXQ7Ci19Ci0KLXNzaXplX3QgaXdsX3Vjb2RlX3R4X3N0YXRzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJY2hhciBfX3VzZXIgKnVzZXJfYnVmLAotCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlpbnQgcG9zID0gMDsKLQljaGFyICpidWY7Ci0JaW50IGJ1ZnN6ID0gKHNpemVvZihzdHJ1Y3Qgc3RhdGlzdGljc190eCkgKiA0OCkgKyAyNTA7Ci0Jc3NpemVfdCByZXQ7Ci0Jc3RydWN0IHN0YXRpc3RpY3NfdHggKnR4LCAqYWNjdW1fdHgsICpkZWx0YV90eCwgKm1heF90eDsKLQotCWlmICghaXdsX2lzX2FsaXZlKHByaXYpKQotCQlyZXR1cm4gLUVBR0FJTjsKLQotCWJ1ZiA9IGt6YWxsb2MoYnVmc3osIEdGUF9LRVJORUwpOwotCWlmICghYnVmKSB7Ci0JCUlXTF9FUlIocHJpdiwgIkNhbiBub3QgYWxsb2NhdGUgQnVmZmVyXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JLyogdGhlIHN0YXRpc3RpYyBpbmZvcm1hdGlvbiBkaXNwbGF5IGhlcmUgaXMgYmFzZWQgb24KLQkgICogdGhlIGxhc3Qgc3RhdGlzdGljcyBub3RpZmljYXRpb24gZnJvbSB1Q29kZQotCSAgKiBtaWdodCBub3QgcmVmbGVjdCB0aGUgY3VycmVudCB1Q29kZSBhY3Rpdml0eQotCSAgKi8KLQlpZiAoaXdsX2J0X3N0YXRpc3RpY3MocHJpdikpIHsKLQkJdHggPSAmcHJpdi0+X2Fnbi5zdGF0aXN0aWNzX2J0LnR4OwotCQlhY2N1bV90eCA9ICZwcml2LT5fYWduLmFjY3VtX3N0YXRpc3RpY3NfYnQudHg7Ci0JCWRlbHRhX3R4ID0gJnByaXYtPl9hZ24uZGVsdGFfc3RhdGlzdGljc19idC50eDsKLQkJbWF4X3R4ID0gJnByaXYtPl9hZ24ubWF4X2RlbHRhX2J0LnR4OwotCX0gZWxzZSB7Ci0JCXR4ID0gJnByaXYtPl9hZ24uc3RhdGlzdGljcy50eDsKLQkJYWNjdW1fdHggPSAmcHJpdi0+X2Fnbi5hY2N1bV9zdGF0aXN0aWNzLnR4OwotCQlkZWx0YV90eCA9ICZwcml2LT5fYWduLmRlbHRhX3N0YXRpc3RpY3MudHg7Ci0JCW1heF90eCA9ICZwcml2LT5fYWduLm1heF9kZWx0YS50eDsKLQl9Ci0KLQlwb3MgKz0gaXdsX3N0YXRpc3RpY3NfZmxhZyhwcml2LCBidWYsIGJ1ZnN6KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X2hlYWRlciwgIlN0YXRpc3RpY3NfVHg6Iik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgInByZWFtYmxlOiIsCi0JCQkgbGUzMl90b19jcHUodHgtPnByZWFtYmxlX2NudCksCi0JCQkgYWNjdW1fdHgtPnByZWFtYmxlX2NudCwKLQkJCSBkZWx0YV90eC0+cHJlYW1ibGVfY250LCBtYXhfdHgtPnByZWFtYmxlX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgInJ4X2RldGVjdGVkX2NudDoiLAotCQkJIGxlMzJfdG9fY3B1KHR4LT5yeF9kZXRlY3RlZF9jbnQpLAotCQkJIGFjY3VtX3R4LT5yeF9kZXRlY3RlZF9jbnQsCi0JCQkgZGVsdGFfdHgtPnJ4X2RldGVjdGVkX2NudCwgbWF4X3R4LT5yeF9kZXRlY3RlZF9jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJidF9wcmlvX2RlZmVyX2NudDoiLAotCQkJIGxlMzJfdG9fY3B1KHR4LT5idF9wcmlvX2RlZmVyX2NudCksCi0JCQkgYWNjdW1fdHgtPmJ0X3ByaW9fZGVmZXJfY250LAotCQkJIGRlbHRhX3R4LT5idF9wcmlvX2RlZmVyX2NudCwKLQkJCSBtYXhfdHgtPmJ0X3ByaW9fZGVmZXJfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiYnRfcHJpb19raWxsX2NudDoiLAotCQkJIGxlMzJfdG9fY3B1KHR4LT5idF9wcmlvX2tpbGxfY250KSwKLQkJCSBhY2N1bV90eC0+YnRfcHJpb19raWxsX2NudCwKLQkJCSBkZWx0YV90eC0+YnRfcHJpb19raWxsX2NudCwKLQkJCSBtYXhfdHgtPmJ0X3ByaW9fa2lsbF9jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJmZXdfYnl0ZXNfY250OiIsCi0JCQkgbGUzMl90b19jcHUodHgtPmZld19ieXRlc19jbnQpLAotCQkJIGFjY3VtX3R4LT5mZXdfYnl0ZXNfY250LAotCQkJIGRlbHRhX3R4LT5mZXdfYnl0ZXNfY250LCBtYXhfdHgtPmZld19ieXRlc19jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJjdHNfdGltZW91dDoiLAotCQkJIGxlMzJfdG9fY3B1KHR4LT5jdHNfdGltZW91dCksIGFjY3VtX3R4LT5jdHNfdGltZW91dCwKLQkJCSBkZWx0YV90eC0+Y3RzX3RpbWVvdXQsIG1heF90eC0+Y3RzX3RpbWVvdXQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJhY2tfdGltZW91dDoiLAotCQkJIGxlMzJfdG9fY3B1KHR4LT5hY2tfdGltZW91dCksCi0JCQkgYWNjdW1fdHgtPmFja190aW1lb3V0LAotCQkJIGRlbHRhX3R4LT5hY2tfdGltZW91dCwgbWF4X3R4LT5hY2tfdGltZW91dCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImV4cGVjdGVkX2Fja19jbnQ6IiwKLQkJCSBsZTMyX3RvX2NwdSh0eC0+ZXhwZWN0ZWRfYWNrX2NudCksCi0JCQkgYWNjdW1fdHgtPmV4cGVjdGVkX2Fja19jbnQsCi0JCQkgZGVsdGFfdHgtPmV4cGVjdGVkX2Fja19jbnQsCi0JCQkgbWF4X3R4LT5leHBlY3RlZF9hY2tfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiYWN0dWFsX2Fja19jbnQ6IiwKLQkJCSBsZTMyX3RvX2NwdSh0eC0+YWN0dWFsX2Fja19jbnQpLAotCQkJIGFjY3VtX3R4LT5hY3R1YWxfYWNrX2NudCwKLQkJCSBkZWx0YV90eC0+YWN0dWFsX2Fja19jbnQsCi0JCQkgbWF4X3R4LT5hY3R1YWxfYWNrX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImR1bXBfbXNkdV9jbnQ6IiwKLQkJCSBsZTMyX3RvX2NwdSh0eC0+ZHVtcF9tc2R1X2NudCksCi0JCQkgYWNjdW1fdHgtPmR1bXBfbXNkdV9jbnQsCi0JCQkgZGVsdGFfdHgtPmR1bXBfbXNkdV9jbnQsCi0JCQkgbWF4X3R4LT5kdW1wX21zZHVfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiYWJvcnRfbnh0X2ZyYW1lX21pc21hdGNoOiIsCi0JCQkgbGUzMl90b19jcHUodHgtPmJ1cnN0X2Fib3J0X25leHRfZnJhbWVfbWlzbWF0Y2hfY250KSwKLQkJCSBhY2N1bV90eC0+YnVyc3RfYWJvcnRfbmV4dF9mcmFtZV9taXNtYXRjaF9jbnQsCi0JCQkgZGVsdGFfdHgtPmJ1cnN0X2Fib3J0X25leHRfZnJhbWVfbWlzbWF0Y2hfY250LAotCQkJIG1heF90eC0+YnVyc3RfYWJvcnRfbmV4dF9mcmFtZV9taXNtYXRjaF9jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJhYm9ydF9taXNzaW5nX254dF9mcmFtZToiLAotCQkJIGxlMzJfdG9fY3B1KHR4LT5idXJzdF9hYm9ydF9taXNzaW5nX25leHRfZnJhbWVfY250KSwKLQkJCSBhY2N1bV90eC0+YnVyc3RfYWJvcnRfbWlzc2luZ19uZXh0X2ZyYW1lX2NudCwKLQkJCSBkZWx0YV90eC0+YnVyc3RfYWJvcnRfbWlzc2luZ19uZXh0X2ZyYW1lX2NudCwKLQkJCSBtYXhfdHgtPmJ1cnN0X2Fib3J0X21pc3NpbmdfbmV4dF9mcmFtZV9jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJjdHNfdGltZW91dF9jb2xsaXNpb246IiwKLQkJCSBsZTMyX3RvX2NwdSh0eC0+Y3RzX3RpbWVvdXRfY29sbGlzaW9uKSwKLQkJCSBhY2N1bV90eC0+Y3RzX3RpbWVvdXRfY29sbGlzaW9uLAotCQkJIGRlbHRhX3R4LT5jdHNfdGltZW91dF9jb2xsaXNpb24sCi0JCQkgbWF4X3R4LT5jdHNfdGltZW91dF9jb2xsaXNpb24pOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJhY2tfYmFfdGltZW91dF9jb2xsaXNpb246IiwKLQkJCSBsZTMyX3RvX2NwdSh0eC0+YWNrX29yX2JhX3RpbWVvdXRfY29sbGlzaW9uKSwKLQkJCSBhY2N1bV90eC0+YWNrX29yX2JhX3RpbWVvdXRfY29sbGlzaW9uLAotCQkJIGRlbHRhX3R4LT5hY2tfb3JfYmFfdGltZW91dF9jb2xsaXNpb24sCi0JCQkgbWF4X3R4LT5hY2tfb3JfYmFfdGltZW91dF9jb2xsaXNpb24pOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJhZ2cgYmFfdGltZW91dDoiLAotCQkJIGxlMzJfdG9fY3B1KHR4LT5hZ2cuYmFfdGltZW91dCksCi0JCQkgYWNjdW1fdHgtPmFnZy5iYV90aW1lb3V0LAotCQkJIGRlbHRhX3R4LT5hZ2cuYmFfdGltZW91dCwKLQkJCSBtYXhfdHgtPmFnZy5iYV90aW1lb3V0KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiYWdnIGJhX3Jlc2NoZWRfZnJhbWVzOiIsCi0JCQkgbGUzMl90b19jcHUodHgtPmFnZy5iYV9yZXNjaGVkdWxlX2ZyYW1lcyksCi0JCQkgYWNjdW1fdHgtPmFnZy5iYV9yZXNjaGVkdWxlX2ZyYW1lcywKLQkJCSBkZWx0YV90eC0+YWdnLmJhX3Jlc2NoZWR1bGVfZnJhbWVzLAotCQkJIG1heF90eC0+YWdnLmJhX3Jlc2NoZWR1bGVfZnJhbWVzKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiYWdnIHNjZF9xdWVyeV9hZ2dfZnJhbWU6IiwKLQkJCSBsZTMyX3RvX2NwdSh0eC0+YWdnLnNjZF9xdWVyeV9hZ2dfZnJhbWVfY250KSwKLQkJCSBhY2N1bV90eC0+YWdnLnNjZF9xdWVyeV9hZ2dfZnJhbWVfY250LAotCQkJIGRlbHRhX3R4LT5hZ2cuc2NkX3F1ZXJ5X2FnZ19mcmFtZV9jbnQsCi0JCQkgbWF4X3R4LT5hZ2cuc2NkX3F1ZXJ5X2FnZ19mcmFtZV9jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJhZ2cgc2NkX3F1ZXJ5X25vX2FnZzoiLAotCQkJIGxlMzJfdG9fY3B1KHR4LT5hZ2cuc2NkX3F1ZXJ5X25vX2FnZyksCi0JCQkgYWNjdW1fdHgtPmFnZy5zY2RfcXVlcnlfbm9fYWdnLAotCQkJIGRlbHRhX3R4LT5hZ2cuc2NkX3F1ZXJ5X25vX2FnZywKLQkJCSBtYXhfdHgtPmFnZy5zY2RfcXVlcnlfbm9fYWdnKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiYWdnIHNjZF9xdWVyeV9hZ2c6IiwKLQkJCSBsZTMyX3RvX2NwdSh0eC0+YWdnLnNjZF9xdWVyeV9hZ2cpLAotCQkJIGFjY3VtX3R4LT5hZ2cuc2NkX3F1ZXJ5X2FnZywKLQkJCSBkZWx0YV90eC0+YWdnLnNjZF9xdWVyeV9hZ2csCi0JCQkgbWF4X3R4LT5hZ2cuc2NkX3F1ZXJ5X2FnZyk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImFnZyBzY2RfcXVlcnlfbWlzbWF0Y2g6IiwKLQkJCSBsZTMyX3RvX2NwdSh0eC0+YWdnLnNjZF9xdWVyeV9taXNtYXRjaCksCi0JCQkgYWNjdW1fdHgtPmFnZy5zY2RfcXVlcnlfbWlzbWF0Y2gsCi0JCQkgZGVsdGFfdHgtPmFnZy5zY2RfcXVlcnlfbWlzbWF0Y2gsCi0JCQkgbWF4X3R4LT5hZ2cuc2NkX3F1ZXJ5X21pc21hdGNoKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiYWdnIGZyYW1lX25vdF9yZWFkeToiLAotCQkJIGxlMzJfdG9fY3B1KHR4LT5hZ2cuZnJhbWVfbm90X3JlYWR5KSwKLQkJCSBhY2N1bV90eC0+YWdnLmZyYW1lX25vdF9yZWFkeSwKLQkJCSBkZWx0YV90eC0+YWdnLmZyYW1lX25vdF9yZWFkeSwKLQkJCSBtYXhfdHgtPmFnZy5mcmFtZV9ub3RfcmVhZHkpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJhZ2cgdW5kZXJydW46IiwKLQkJCSBsZTMyX3RvX2NwdSh0eC0+YWdnLnVuZGVycnVuKSwKLQkJCSBhY2N1bV90eC0+YWdnLnVuZGVycnVuLAotCQkJIGRlbHRhX3R4LT5hZ2cudW5kZXJydW4sIG1heF90eC0+YWdnLnVuZGVycnVuKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiYWdnIGJ0X3ByaW9fa2lsbDoiLAotCQkJIGxlMzJfdG9fY3B1KHR4LT5hZ2cuYnRfcHJpb19raWxsKSwKLQkJCSBhY2N1bV90eC0+YWdnLmJ0X3ByaW9fa2lsbCwKLQkJCSBkZWx0YV90eC0+YWdnLmJ0X3ByaW9fa2lsbCwKLQkJCSBtYXhfdHgtPmFnZy5idF9wcmlvX2tpbGwpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJhZ2cgcnhfYmFfcnNwX2NudDoiLAotCQkJIGxlMzJfdG9fY3B1KHR4LT5hZ2cucnhfYmFfcnNwX2NudCksCi0JCQkgYWNjdW1fdHgtPmFnZy5yeF9iYV9yc3BfY250LAotCQkJIGRlbHRhX3R4LT5hZ2cucnhfYmFfcnNwX2NudCwKLQkJCSBtYXhfdHgtPmFnZy5yeF9iYV9yc3BfY250KTsKLQotCWlmICh0eC0+dHhfcG93ZXIuYW50X2EgfHwgdHgtPnR4X3Bvd2VyLmFudF9iIHx8IHR4LT50eF9wb3dlci5hbnRfYykgewotCQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkidHggcG93ZXI6ICgxLzIgZEIgc3RlcClcbiIpOwotCQlpZiAoKHByaXYtPmNmZy0+dmFsaWRfdHhfYW50ICYgQU5UX0EpICYmIHR4LT50eF9wb3dlci5hbnRfYSkKLQkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCQkJZm10X2hleCwgImFudGVubmEgQToiLAotCQkJCQl0eC0+dHhfcG93ZXIuYW50X2EpOwotCQlpZiAoKHByaXYtPmNmZy0+dmFsaWRfdHhfYW50ICYgQU5UX0IpICYmIHR4LT50eF9wb3dlci5hbnRfYikKLQkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCQkJZm10X2hleCwgImFudGVubmEgQjoiLAotCQkJCQl0eC0+dHhfcG93ZXIuYW50X2IpOwotCQlpZiAoKHByaXYtPmNmZy0+dmFsaWRfdHhfYW50ICYgQU5UX0MpICYmIHR4LT50eF9wb3dlci5hbnRfYykKLQkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCQkJZm10X2hleCwgImFudGVubmEgQzoiLAotCQkJCQl0eC0+dHhfcG93ZXIuYW50X2MpOwotCX0KLQlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKLQlrZnJlZShidWYpOwotCXJldHVybiByZXQ7Ci19Ci0KLXNzaXplX3QgaXdsX3Vjb2RlX2dlbmVyYWxfc3RhdHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAotCQkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWludCBwb3MgPSAwOwotCWNoYXIgKmJ1ZjsKLQlpbnQgYnVmc3ogPSBzaXplb2Yoc3RydWN0IHN0YXRpc3RpY3NfZ2VuZXJhbCkgKiAxMCArIDMwMDsKLQlzc2l6ZV90IHJldDsKLQlzdHJ1Y3Qgc3RhdGlzdGljc19nZW5lcmFsX2NvbW1vbiAqZ2VuZXJhbCwgKmFjY3VtX2dlbmVyYWw7Ci0Jc3RydWN0IHN0YXRpc3RpY3NfZ2VuZXJhbF9jb21tb24gKmRlbHRhX2dlbmVyYWwsICptYXhfZ2VuZXJhbDsKLQlzdHJ1Y3Qgc3RhdGlzdGljc19kYmcgKmRiZywgKmFjY3VtX2RiZywgKmRlbHRhX2RiZywgKm1heF9kYmc7Ci0Jc3RydWN0IHN0YXRpc3RpY3NfZGl2ICpkaXYsICphY2N1bV9kaXYsICpkZWx0YV9kaXYsICptYXhfZGl2OwotCi0JaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCi0JCXJldHVybiAtRUFHQUlOOwotCi0JYnVmID0ga3phbGxvYyhidWZzeiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWYpIHsKLQkJSVdMX0VSUihwcml2LCAiQ2FuIG5vdCBhbGxvY2F0ZSBCdWZmZXJcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQkvKiB0aGUgc3RhdGlzdGljIGluZm9ybWF0aW9uIGRpc3BsYXkgaGVyZSBpcyBiYXNlZCBvbgotCSAgKiB0aGUgbGFzdCBzdGF0aXN0aWNzIG5vdGlmaWNhdGlvbiBmcm9tIHVDb2RlCi0JICAqIG1pZ2h0IG5vdCByZWZsZWN0IHRoZSBjdXJyZW50IHVDb2RlIGFjdGl2aXR5Ci0JICAqLwotCWlmIChpd2xfYnRfc3RhdGlzdGljcyhwcml2KSkgewotCQlnZW5lcmFsID0gJnByaXYtPl9hZ24uc3RhdGlzdGljc19idC5nZW5lcmFsLmNvbW1vbjsKLQkJZGJnID0gJnByaXYtPl9hZ24uc3RhdGlzdGljc19idC5nZW5lcmFsLmNvbW1vbi5kYmc7Ci0JCWRpdiA9ICZwcml2LT5fYWduLnN0YXRpc3RpY3NfYnQuZ2VuZXJhbC5jb21tb24uZGl2OwotCQlhY2N1bV9nZW5lcmFsID0gJnByaXYtPl9hZ24uYWNjdW1fc3RhdGlzdGljc19idC5nZW5lcmFsLmNvbW1vbjsKLQkJYWNjdW1fZGJnID0gJnByaXYtPl9hZ24uYWNjdW1fc3RhdGlzdGljc19idC5nZW5lcmFsLmNvbW1vbi5kYmc7Ci0JCWFjY3VtX2RpdiA9ICZwcml2LT5fYWduLmFjY3VtX3N0YXRpc3RpY3NfYnQuZ2VuZXJhbC5jb21tb24uZGl2OwotCQlkZWx0YV9nZW5lcmFsID0gJnByaXYtPl9hZ24uZGVsdGFfc3RhdGlzdGljc19idC5nZW5lcmFsLmNvbW1vbjsKLQkJbWF4X2dlbmVyYWwgPSAmcHJpdi0+X2Fnbi5tYXhfZGVsdGFfYnQuZ2VuZXJhbC5jb21tb247Ci0JCWRlbHRhX2RiZyA9ICZwcml2LT5fYWduLmRlbHRhX3N0YXRpc3RpY3NfYnQuZ2VuZXJhbC5jb21tb24uZGJnOwotCQltYXhfZGJnID0gJnByaXYtPl9hZ24ubWF4X2RlbHRhX2J0LmdlbmVyYWwuY29tbW9uLmRiZzsKLQkJZGVsdGFfZGl2ID0gJnByaXYtPl9hZ24uZGVsdGFfc3RhdGlzdGljc19idC5nZW5lcmFsLmNvbW1vbi5kaXY7Ci0JCW1heF9kaXYgPSAmcHJpdi0+X2Fnbi5tYXhfZGVsdGFfYnQuZ2VuZXJhbC5jb21tb24uZGl2OwotCX0gZWxzZSB7Ci0JCWdlbmVyYWwgPSAmcHJpdi0+X2Fnbi5zdGF0aXN0aWNzLmdlbmVyYWwuY29tbW9uOwotCQlkYmcgPSAmcHJpdi0+X2Fnbi5zdGF0aXN0aWNzLmdlbmVyYWwuY29tbW9uLmRiZzsKLQkJZGl2ID0gJnByaXYtPl9hZ24uc3RhdGlzdGljcy5nZW5lcmFsLmNvbW1vbi5kaXY7Ci0JCWFjY3VtX2dlbmVyYWwgPSAmcHJpdi0+X2Fnbi5hY2N1bV9zdGF0aXN0aWNzLmdlbmVyYWwuY29tbW9uOwotCQlhY2N1bV9kYmcgPSAmcHJpdi0+X2Fnbi5hY2N1bV9zdGF0aXN0aWNzLmdlbmVyYWwuY29tbW9uLmRiZzsKLQkJYWNjdW1fZGl2ID0gJnByaXYtPl9hZ24uYWNjdW1fc3RhdGlzdGljcy5nZW5lcmFsLmNvbW1vbi5kaXY7Ci0JCWRlbHRhX2dlbmVyYWwgPSAmcHJpdi0+X2Fnbi5kZWx0YV9zdGF0aXN0aWNzLmdlbmVyYWwuY29tbW9uOwotCQltYXhfZ2VuZXJhbCA9ICZwcml2LT5fYWduLm1heF9kZWx0YS5nZW5lcmFsLmNvbW1vbjsKLQkJZGVsdGFfZGJnID0gJnByaXYtPl9hZ24uZGVsdGFfc3RhdGlzdGljcy5nZW5lcmFsLmNvbW1vbi5kYmc7Ci0JCW1heF9kYmcgPSAmcHJpdi0+X2Fnbi5tYXhfZGVsdGEuZ2VuZXJhbC5jb21tb24uZGJnOwotCQlkZWx0YV9kaXYgPSAmcHJpdi0+X2Fnbi5kZWx0YV9zdGF0aXN0aWNzLmdlbmVyYWwuY29tbW9uLmRpdjsKLQkJbWF4X2RpdiA9ICZwcml2LT5fYWduLm1heF9kZWx0YS5nZW5lcmFsLmNvbW1vbi5kaXY7Ci0JfQotCi0JcG9zICs9IGl3bF9zdGF0aXN0aWNzX2ZsYWcocHJpdiwgYnVmLCBidWZzeik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF9oZWFkZXIsICJTdGF0aXN0aWNzX0dlbmVyYWw6Iik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF92YWx1ZSwgInRlbXBlcmF0dXJlOiIsCi0JCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+dGVtcGVyYXR1cmUpKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3ZhbHVlLCAidGVtcGVyYXR1cmVfbToiLAotCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPnRlbXBlcmF0dXJlX20pKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3ZhbHVlLCAidHRsX3RpbWVzdGFtcDoiLAotCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPnR0bF90aW1lc3RhbXApKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiYnVyc3RfY2hlY2s6IiwKLQkJCSBsZTMyX3RvX2NwdShkYmctPmJ1cnN0X2NoZWNrKSwKLQkJCSBhY2N1bV9kYmctPmJ1cnN0X2NoZWNrLAotCQkJIGRlbHRhX2RiZy0+YnVyc3RfY2hlY2ssIG1heF9kYmctPmJ1cnN0X2NoZWNrKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiYnVyc3RfY291bnQ6IiwKLQkJCSBsZTMyX3RvX2NwdShkYmctPmJ1cnN0X2NvdW50KSwKLQkJCSBhY2N1bV9kYmctPmJ1cnN0X2NvdW50LAotCQkJIGRlbHRhX2RiZy0+YnVyc3RfY291bnQsIG1heF9kYmctPmJ1cnN0X2NvdW50KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAid2FpdF9mb3Jfc2lsZW5jZV90aW1lb3V0X2NvdW50OiIsCi0JCQkgbGUzMl90b19jcHUoZGJnLT53YWl0X2Zvcl9zaWxlbmNlX3RpbWVvdXRfY250KSwKLQkJCSBhY2N1bV9kYmctPndhaXRfZm9yX3NpbGVuY2VfdGltZW91dF9jbnQsCi0JCQkgZGVsdGFfZGJnLT53YWl0X2Zvcl9zaWxlbmNlX3RpbWVvdXRfY250LAotCQkJIG1heF9kYmctPndhaXRfZm9yX3NpbGVuY2VfdGltZW91dF9jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJzbGVlcF90aW1lOiIsCi0JCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+c2xlZXBfdGltZSksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+c2xlZXBfdGltZSwKLQkJCSBkZWx0YV9nZW5lcmFsLT5zbGVlcF90aW1lLCBtYXhfZ2VuZXJhbC0+c2xlZXBfdGltZSk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgInNsb3RzX291dDoiLAotCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPnNsb3RzX291dCksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+c2xvdHNfb3V0LAotCQkJIGRlbHRhX2dlbmVyYWwtPnNsb3RzX291dCwgbWF4X2dlbmVyYWwtPnNsb3RzX291dCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgInNsb3RzX2lkbGU6IiwKLQkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5zbG90c19pZGxlKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5zbG90c19pZGxlLAotCQkJIGRlbHRhX2dlbmVyYWwtPnNsb3RzX2lkbGUsIG1heF9nZW5lcmFsLT5zbG90c19pZGxlKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAidHhfb25fYToiLAotCQkJIGxlMzJfdG9fY3B1KGRpdi0+dHhfb25fYSksIGFjY3VtX2Rpdi0+dHhfb25fYSwKLQkJCSBkZWx0YV9kaXYtPnR4X29uX2EsIG1heF9kaXYtPnR4X29uX2EpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJ0eF9vbl9iOiIsCi0JCQkgbGUzMl90b19jcHUoZGl2LT50eF9vbl9iKSwgYWNjdW1fZGl2LT50eF9vbl9iLAotCQkJIGRlbHRhX2Rpdi0+dHhfb25fYiwgbWF4X2Rpdi0+dHhfb25fYik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImV4ZWNfdGltZToiLAotCQkJIGxlMzJfdG9fY3B1KGRpdi0+ZXhlY190aW1lKSwgYWNjdW1fZGl2LT5leGVjX3RpbWUsCi0JCQkgZGVsdGFfZGl2LT5leGVjX3RpbWUsIG1heF9kaXYtPmV4ZWNfdGltZSk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgInByb2JlX3RpbWU6IiwKLQkJCSBsZTMyX3RvX2NwdShkaXYtPnByb2JlX3RpbWUpLCBhY2N1bV9kaXYtPnByb2JlX3RpbWUsCi0JCQkgZGVsdGFfZGl2LT5wcm9iZV90aW1lLCBtYXhfZGl2LT5wcm9iZV90aW1lKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAicnhfZW5hYmxlX2NvdW50ZXI6IiwKLQkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5yeF9lbmFibGVfY291bnRlciksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+cnhfZW5hYmxlX2NvdW50ZXIsCi0JCQkgZGVsdGFfZ2VuZXJhbC0+cnhfZW5hYmxlX2NvdW50ZXIsCi0JCQkgbWF4X2dlbmVyYWwtPnJ4X2VuYWJsZV9jb3VudGVyKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAibnVtX29mX3Nvc19zdGF0ZXM6IiwKLQkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5udW1fb2Zfc29zX3N0YXRlcyksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+bnVtX29mX3Nvc19zdGF0ZXMsCi0JCQkgZGVsdGFfZ2VuZXJhbC0+bnVtX29mX3Nvc19zdGF0ZXMsCi0JCQkgbWF4X2dlbmVyYWwtPm51bV9vZl9zb3Nfc3RhdGVzKTsKLQlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKLQlrZnJlZShidWYpOwotCXJldHVybiByZXQ7Ci19Ci0KLXNzaXplX3QgaXdsX3Vjb2RlX2J0X3N0YXRzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJY2hhciBfX3VzZXIgKnVzZXJfYnVmLAotCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0JaW50IHBvcyA9IDA7Ci0JY2hhciAqYnVmOwotCWludCBidWZzeiA9IChzaXplb2Yoc3RydWN0IHN0YXRpc3RpY3NfYnRfYWN0aXZpdHkpICogMjQpICsgMjAwOwotCXNzaXplX3QgcmV0OwotCXN0cnVjdCBzdGF0aXN0aWNzX2J0X2FjdGl2aXR5ICpidCwgKmFjY3VtX2J0OwotCi0JaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCi0JCXJldHVybiAtRUFHQUlOOwotCi0JaWYgKCFwcml2LT5idF9lbmFibGVfZmxhZykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBtYWtlIHJlcXVlc3QgdG8gdUNvZGUgdG8gcmV0cmlldmUgc3RhdGlzdGljcyBpbmZvcm1hdGlvbiAqLwotCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQlyZXQgPSBpd2xfc2VuZF9zdGF0aXN0aWNzX3JlcXVlc3QocHJpdiwgQ01EX1NZTkMsIGZhbHNlKTsKLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQotCWlmIChyZXQpIHsKLQkJSVdMX0VSUihwcml2LAotCQkJIkVycm9yIHNlbmRpbmcgc3RhdGlzdGljcyByZXF1ZXN0OiAlemRcbiIsIHJldCk7Ci0JCXJldHVybiAtRUFHQUlOOwotCX0KLQlidWYgPSBremFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZikgewotCQlJV0xfRVJSKHByaXYsICJDYW4gbm90IGFsbG9jYXRlIEJ1ZmZlclxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCS8qCi0JICogdGhlIHN0YXRpc3RpYyBpbmZvcm1hdGlvbiBkaXNwbGF5IGhlcmUgaXMgYmFzZWQgb24KLQkgKiB0aGUgbGFzdCBzdGF0aXN0aWNzIG5vdGlmaWNhdGlvbiBmcm9tIHVDb2RlCi0JICogbWlnaHQgbm90IHJlZmxlY3QgdGhlIGN1cnJlbnQgdUNvZGUgYWN0aXZpdHkKLQkgKi8KLQlidCA9ICZwcml2LT5fYWduLnN0YXRpc3RpY3NfYnQuZ2VuZXJhbC5hY3Rpdml0eTsKLQlhY2N1bV9idCA9ICZwcml2LT5fYWduLmFjY3VtX3N0YXRpc3RpY3NfYnQuZ2VuZXJhbC5hY3Rpdml0eTsKLQotCXBvcyArPSBpd2xfc3RhdGlzdGljc19mbGFnKHByaXYsIGJ1ZiwgYnVmc3opOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlN0YXRpc3RpY3NfQlQ6XG4iKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkiXHRcdFx0Y3VycmVudFx0XHRcdGFjY3VtdWxhdGl2ZVxuIik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJoaV9wcmlvcml0eV90eF9yZXFfY250Olx0XHQldVx0XHRcdCV1XG4iLAotCQkJIGxlMzJfdG9fY3B1KGJ0LT5oaV9wcmlvcml0eV90eF9yZXFfY250KSwKLQkJCSBhY2N1bV9idC0+aGlfcHJpb3JpdHlfdHhfcmVxX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJoaV9wcmlvcml0eV90eF9kZW5pZWRfY250Olx0JXVcdFx0XHQldVxuIiwKLQkJCSBsZTMyX3RvX2NwdShidC0+aGlfcHJpb3JpdHlfdHhfZGVuaWVkX2NudCksCi0JCQkgYWNjdW1fYnQtPmhpX3ByaW9yaXR5X3R4X2RlbmllZF9jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAibG9fcHJpb3JpdHlfdHhfcmVxX2NudDpcdFx0JXVcdFx0XHQldVxuIiwKLQkJCSBsZTMyX3RvX2NwdShidC0+bG9fcHJpb3JpdHlfdHhfcmVxX2NudCksCi0JCQkgYWNjdW1fYnQtPmxvX3ByaW9yaXR5X3R4X3JlcV9jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAibG9fcHJpb3JpdHlfdHhfZGVuaWVkX2NudDpcdCV1XHRcdFx0JXVcbiIsCi0JCQkgbGUzMl90b19jcHUoYnQtPmxvX3ByaW9yaXR5X3R4X2RlbmllZF9jbnQpLAotCQkJIGFjY3VtX2J0LT5sb19wcmlvcml0eV90eF9kZW5pZWRfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImhpX3ByaW9yaXR5X3J4X3JlcV9jbnQ6XHRcdCV1XHRcdFx0JXVcbiIsCi0JCQkgbGUzMl90b19jcHUoYnQtPmhpX3ByaW9yaXR5X3J4X3JlcV9jbnQpLAotCQkJIGFjY3VtX2J0LT5oaV9wcmlvcml0eV9yeF9yZXFfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImhpX3ByaW9yaXR5X3J4X2RlbmllZF9jbnQ6XHQldVx0XHRcdCV1XG4iLAotCQkJIGxlMzJfdG9fY3B1KGJ0LT5oaV9wcmlvcml0eV9yeF9kZW5pZWRfY250KSwKLQkJCSBhY2N1bV9idC0+aGlfcHJpb3JpdHlfcnhfZGVuaWVkX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJsb19wcmlvcml0eV9yeF9yZXFfY250Olx0XHQldVx0XHRcdCV1XG4iLAotCQkJIGxlMzJfdG9fY3B1KGJ0LT5sb19wcmlvcml0eV9yeF9yZXFfY250KSwKLQkJCSBhY2N1bV9idC0+bG9fcHJpb3JpdHlfcnhfcmVxX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJsb19wcmlvcml0eV9yeF9kZW5pZWRfY250Olx0JXVcdFx0XHQldVxuIiwKLQkJCSBsZTMyX3RvX2NwdShidC0+bG9fcHJpb3JpdHlfcnhfZGVuaWVkX2NudCksCi0JCQkgYWNjdW1fYnQtPmxvX3ByaW9yaXR5X3J4X2RlbmllZF9jbnQpOwotCi0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICIocngpbnVtX2J0X2tpbGxzOlx0XHQldVx0XHRcdCV1XG4iLAotCQkJIGxlMzJfdG9fY3B1KHByaXYtPl9hZ24uc3RhdGlzdGljc19idC5yeC4KLQkJCQlnZW5lcmFsLm51bV9idF9raWxscyksCi0JCQkgcHJpdi0+X2Fnbi5hY2N1bV9zdGF0aXN0aWNzX2J0LnJ4LgotCQkJCWdlbmVyYWwubnVtX2J0X2tpbGxzKTsKLQotCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOwotCWtmcmVlKGJ1Zik7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3NpemVfdCBpd2xfcmVwbHlfdHhfZXJyb3JfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQljaGFyIF9fdXNlciAqdXNlcl9idWYsCi0JCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQlpbnQgcG9zID0gMDsKLQljaGFyICpidWY7Ci0JaW50IGJ1ZnN6ID0gKHNpemVvZihzdHJ1Y3QgcmVwbHlfdHhfZXJyb3Jfc3RhdGlzdGljcykgKiAyNCkgKwotCQkoc2l6ZW9mKHN0cnVjdCByZXBseV9hZ2dfdHhfZXJyb3Jfc3RhdGlzdGljcykgKiAyNCkgKyAyMDA7Ci0Jc3NpemVfdCByZXQ7Ci0KLQlpZiAoIWl3bF9pc19hbGl2ZShwcml2KSkKLQkJcmV0dXJuIC1FQUdBSU47Ci0KLQlidWYgPSBremFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZikgewotCQlJV0xfRVJSKHByaXYsICJDYW4gbm90IGFsbG9jYXRlIEJ1ZmZlclxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlN0YXRpc3RpY3NfVFhfRXJyb3I6XG4iKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIlczpcdFx0XHRcdCV1XG4iLAotCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX1BPU1RQT05FX0RFTEFZKSwKLQkJCSBwcml2LT5fYWduLnJlcGx5X3R4X3N0YXRzLnBwX2RlbGF5KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIlczpcdFx0XHQldVxuIiwKLQkJCSBpd2xfZ2V0X3R4X2ZhaWxfcmVhc29uKFRYX1NUQVRVU19QT1NUUE9ORV9GRVdfQllURVMpLAotCQkJIHByaXYtPl9hZ24ucmVwbHlfdHhfc3RhdHMucHBfZmV3X2J5dGVzKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIlczpcdFx0XHQldVxuIiwKLQkJCSBpd2xfZ2V0X3R4X2ZhaWxfcmVhc29uKFRYX1NUQVRVU19QT1NUUE9ORV9CVF9QUklPKSwKLQkJCSBwcml2LT5fYWduLnJlcGx5X3R4X3N0YXRzLnBwX2J0X3ByaW8pOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAotCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX1BPU1RQT05FX1FVSUVUX1BFUklPRCksCi0JCQkgcHJpdi0+X2Fnbi5yZXBseV90eF9zdGF0cy5wcF9xdWlldF9wZXJpb2QpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAotCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX1BPU1RQT05FX0NBTENfVFRBSyksCi0JCQkgcHJpdi0+X2Fnbi5yZXBseV90eF9zdGF0cy5wcF9jYWxjX3R0YWspOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHQldVxuIiwKLQkJCSBpd2xfZ2V0X3R4X2ZhaWxfcmVhc29uKAotCQkJCVRYX1NUQVRVU19GQUlMX0lOVEVSTkFMX0NST1NTRURfUkVUUlkpLAotCQkJIHByaXYtPl9hZ24ucmVwbHlfdHhfc3RhdHMuaW50X2Nyb3NzZWRfcmV0cnkpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAotCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX0ZBSUxfU0hPUlRfTElNSVQpLAotCQkJIHByaXYtPl9hZ24ucmVwbHlfdHhfc3RhdHMuc2hvcnRfbGltaXQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAotCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX0ZBSUxfTE9OR19MSU1JVCksCi0JCQkgcHJpdi0+X2Fnbi5yZXBseV90eF9zdGF0cy5sb25nX2xpbWl0KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIlczpcdFx0XHQldVxuIiwKLQkJCSBpd2xfZ2V0X3R4X2ZhaWxfcmVhc29uKFRYX1NUQVRVU19GQUlMX0ZJRk9fVU5ERVJSVU4pLAotCQkJIHByaXYtPl9hZ24ucmVwbHlfdHhfc3RhdHMuZmlmb191bmRlcnJ1bik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCi0JCQkgaXdsX2dldF90eF9mYWlsX3JlYXNvbihUWF9TVEFUVVNfRkFJTF9EUkFJTl9GTE9XKSwKLQkJCSBwcml2LT5fYWduLnJlcGx5X3R4X3N0YXRzLmRyYWluX2Zsb3cpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAotCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX0ZBSUxfUkZLSUxMX0ZMVVNIKSwKLQkJCSBwcml2LT5fYWduLnJlcGx5X3R4X3N0YXRzLnJma2lsbF9mbHVzaCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCi0JCQkgaXdsX2dldF90eF9mYWlsX3JlYXNvbihUWF9TVEFUVVNfRkFJTF9MSUZFX0VYUElSRSksCi0JCQkgcHJpdi0+X2Fnbi5yZXBseV90eF9zdGF0cy5saWZlX2V4cGlyZSk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCi0JCQkgaXdsX2dldF90eF9mYWlsX3JlYXNvbihUWF9TVEFUVVNfRkFJTF9ERVNUX1BTKSwKLQkJCSBwcml2LT5fYWduLnJlcGx5X3R4X3N0YXRzLmRlc3RfcHMpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAotCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX0ZBSUxfSE9TVF9BQk9SVEVEKSwKLQkJCSBwcml2LT5fYWduLnJlcGx5X3R4X3N0YXRzLmhvc3RfYWJvcnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAotCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX0ZBSUxfQlRfUkVUUlkpLAotCQkJIHByaXYtPl9hZ24ucmVwbHlfdHhfc3RhdHMucHBfZGVsYXkpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAotCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX0ZBSUxfU1RBX0lOVkFMSUQpLAotCQkJIHByaXYtPl9hZ24ucmVwbHlfdHhfc3RhdHMuc3RhX2ludmFsaWQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAotCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX0ZBSUxfRlJBR19EUk9QUEVEKSwKLQkJCSBwcml2LT5fYWduLnJlcGx5X3R4X3N0YXRzLmZyYWdfZHJvcCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCi0JCQkgaXdsX2dldF90eF9mYWlsX3JlYXNvbihUWF9TVEFUVVNfRkFJTF9USURfRElTQUJMRSksCi0JCQkgcHJpdi0+X2Fnbi5yZXBseV90eF9zdGF0cy50aWRfZGlzYWJsZSk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCi0JCQkgaXdsX2dldF90eF9mYWlsX3JlYXNvbihUWF9TVEFUVVNfRkFJTF9GSUZPX0ZMVVNIRUQpLAotCQkJIHByaXYtPl9hZ24ucmVwbHlfdHhfc3RhdHMuZmlmb19mbHVzaCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdCV1XG4iLAotCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oCi0JCQkJVFhfU1RBVFVTX0ZBSUxfSU5TVUZGSUNJRU5UX0NGX1BPTEwpLAotCQkJIHByaXYtPl9hZ24ucmVwbHlfdHhfc3RhdHMuaW5zdWZmX2NmX3BvbGwpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAotCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX0ZBSUxfUEFTU0lWRV9OT19SWCksCi0JCQkgcHJpdi0+X2Fnbi5yZXBseV90eF9zdGF0cy5mYWlsX2h3X2Ryb3ApOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHQldVxuIiwKLQkJCSBpd2xfZ2V0X3R4X2ZhaWxfcmVhc29uKAotCQkJCVRYX1NUQVRVU19GQUlMX05PX0JFQUNPTl9PTl9SQURBUiksCi0JCQkgcHJpdi0+X2Fnbi5yZXBseV90eF9zdGF0cy5zdGFfY29sb3JfbWlzbWF0Y2gpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlVOS05PV046XHRcdFx0JXVcbiIsCi0JCQkgcHJpdi0+X2Fnbi5yZXBseV90eF9zdGF0cy51bmtub3duKTsKLQotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiXG5TdGF0aXN0aWNzX0FnZ19UWF9FcnJvcjpcbiIpOwotCi0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCi0JCQkgaXdsX2dldF9hZ2dfdHhfZmFpbF9yZWFzb24oQUdHX1RYX1NUQVRFX1VOREVSUlVOX01TSyksCi0JCQkgcHJpdi0+X2Fnbi5yZXBseV9hZ2dfdHhfc3RhdHMudW5kZXJydW4pOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAotCQkJIGl3bF9nZXRfYWdnX3R4X2ZhaWxfcmVhc29uKEFHR19UWF9TVEFURV9CVF9QUklPX01TSyksCi0JCQkgcHJpdi0+X2Fnbi5yZXBseV9hZ2dfdHhfc3RhdHMuYnRfcHJpbyk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCi0JCQkgaXdsX2dldF9hZ2dfdHhfZmFpbF9yZWFzb24oQUdHX1RYX1NUQVRFX0ZFV19CWVRFU19NU0spLAotCQkJIHByaXYtPl9hZ24ucmVwbHlfYWdnX3R4X3N0YXRzLmZld19ieXRlcyk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCi0JCQkgaXdsX2dldF9hZ2dfdHhfZmFpbF9yZWFzb24oQUdHX1RYX1NUQVRFX0FCT1JUX01TSyksCi0JCQkgcHJpdi0+X2Fnbi5yZXBseV9hZ2dfdHhfc3RhdHMuYWJvcnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHQldVxuIiwKLQkJCSBpd2xfZ2V0X2FnZ190eF9mYWlsX3JlYXNvbigKLQkJCQlBR0dfVFhfU1RBVEVfTEFTVF9TRU5UX1RUTF9NU0spLAotCQkJIHByaXYtPl9hZ24ucmVwbHlfYWdnX3R4X3N0YXRzLmxhc3Rfc2VudF90dGwpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHQldVxuIiwKLQkJCSBpd2xfZ2V0X2FnZ190eF9mYWlsX3JlYXNvbigKLQkJCQlBR0dfVFhfU1RBVEVfTEFTVF9TRU5UX1RSWV9DTlRfTVNLKSwKLQkJCSBwcml2LT5fYWduLnJlcGx5X2FnZ190eF9zdGF0cy5sYXN0X3NlbnRfdHJ5KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIlczpcdFx0JXVcbiIsCi0JCQkgaXdsX2dldF9hZ2dfdHhfZmFpbF9yZWFzb24oCi0JCQkJQUdHX1RYX1NUQVRFX0xBU1RfU0VOVF9CVF9LSUxMX01TSyksCi0JCQkgcHJpdi0+X2Fnbi5yZXBseV9hZ2dfdHhfc3RhdHMubGFzdF9zZW50X2J0X2tpbGwpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAotCQkJIGl3bF9nZXRfYWdnX3R4X2ZhaWxfcmVhc29uKEFHR19UWF9TVEFURV9TQ0RfUVVFUllfTVNLKSwKLQkJCSBwcml2LT5fYWduLnJlcGx5X2FnZ190eF9zdGF0cy5zY2RfcXVlcnkpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHQldVxuIiwKLQkJCSBpd2xfZ2V0X2FnZ190eF9mYWlsX3JlYXNvbigKLQkJCQlBR0dfVFhfU1RBVEVfVEVTVF9CQURfQ1JDMzJfTVNLKSwKLQkJCSBwcml2LT5fYWduLnJlcGx5X2FnZ190eF9zdGF0cy5iYWRfY3JjMzIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAotCQkJIGl3bF9nZXRfYWdnX3R4X2ZhaWxfcmVhc29uKEFHR19UWF9TVEFURV9SRVNQT05TRV9NU0spLAotCQkJIHByaXYtPl9hZ24ucmVwbHlfYWdnX3R4X3N0YXRzLnJlc3BvbnNlKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIlczpcdFx0XHQldVxuIiwKLQkJCSBpd2xfZ2V0X2FnZ190eF9mYWlsX3JlYXNvbihBR0dfVFhfU1RBVEVfRFVNUF9UWF9NU0spLAotCQkJIHByaXYtPl9hZ24ucmVwbHlfYWdnX3R4X3N0YXRzLmR1bXBfdHgpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAotCQkJIGl3bF9nZXRfYWdnX3R4X2ZhaWxfcmVhc29uKEFHR19UWF9TVEFURV9ERUxBWV9UWF9NU0spLAotCQkJIHByaXYtPl9hZ24ucmVwbHlfYWdnX3R4X3N0YXRzLmRlbGF5X3R4KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJVTktOT1dOOlx0XHRcdCV1XG4iLAotCQkJIHByaXYtPl9hZ24ucmVwbHlfYWdnX3R4X3N0YXRzLnVua25vd24pOwotCi0JcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7Ci0Ja2ZyZWUoYnVmKTsKLQlyZXR1cm4gcmV0OwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWRlYnVnZnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1kZWJ1Z2ZzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyNTczYjUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWRlYnVnZnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBHUEwgTElDRU5TRSBTVU1NQVJZCi0gKgotICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsCi0gKiBVU0EKLSAqCi0gKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgotICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuR1BMLgotICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiAgSW50ZWwgTGludXggV2lyZWxlc3MgPGlsd0BsaW51eC5pbnRlbC5jb20+Ci0gKiBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlICJpd2wtZGV2LmgiCi0jaW5jbHVkZSAiaXdsLWNvcmUuaCIKLSNpbmNsdWRlICJpd2wtZGVidWcuaCIKLQotI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHRlMKLXNzaXplX3QgaXdsX3Vjb2RlX3J4X3N0YXRzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcyk7Ci1zc2l6ZV90IGl3bF91Y29kZV90eF9zdGF0c19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCi0JCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpOwotc3NpemVfdCBpd2xfdWNvZGVfZ2VuZXJhbF9zdGF0c19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCi0JCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcyk7Ci1zc2l6ZV90IGl3bF91Y29kZV9idF9zdGF0c19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCi0JCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpOwotc3NpemVfdCBpd2xfcmVwbHlfdHhfZXJyb3JfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAotCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKTsKLSNlbHNlCi1zdGF0aWMgc3NpemVfdCBpd2xfdWNvZGVfcnhfc3RhdHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAotCQkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyBzc2l6ZV90IGl3bF91Y29kZV90eF9zdGF0c19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCi0JCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXJldHVybiAwOwotfQotc3RhdGljIHNzaXplX3QgaXdsX3Vjb2RlX2dlbmVyYWxfc3RhdHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAotCQkJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgc3NpemVfdCBpd2xfdWNvZGVfYnRfc3RhdHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAotCQkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyBzc2l6ZV90IGl3bF9yZXBseV90eF9lcnJvcl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCi0JCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXJldHVybiAwOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tZWVwcm9tLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tZWVwcm9tLmMKaW5kZXggMjdiNWEzZS4uMmVmOTQ0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWVlcHJvbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1lZXByb20uYwpAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTgxLDUyICs4MSwxMyBAQAogICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyoKLSAqIFRoZSBkZXZpY2UncyBFRVBST00gc2VtYXBob3JlIHByZXZlbnRzIGNvbmZsaWN0cyBiZXR3ZWVuIGRyaXZlciBhbmQgdUNvZGUKLSAqIHdoZW4gYWNjZXNzaW5nIHRoZSBFRVBST007IGVhY2ggYWNjZXNzIGlzIGEgc2VyaWVzIG9mIHB1bHNlcyB0by9mcm9tIHRoZQotICogRUVQUk9NIGNoaXAsIG5vdCBhIHNpbmdsZSBldmVudCwgc28gZXZlbiByZWFkcyBjb3VsZCBjb25mbGljdCBpZiB0aGV5Ci0gKiB3ZXJlbid0IGFyYml0cmF0ZWQgYnkgdGhlIHNlbWFwaG9yZS4KLSAqLwotaW50IGl3bGNvcmVfZWVwcm9tX2FjcXVpcmVfc2VtYXBob3JlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQl1MTYgY291bnQ7Ci0JaW50IHJldDsKLQotCWZvciAoY291bnQgPSAwOyBjb3VudCA8IEVFUFJPTV9TRU1fUkVUUllfTElNSVQ7IGNvdW50KyspIHsKLQkJLyogUmVxdWVzdCBzZW1hcGhvcmUgKi8KLQkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCi0JCQkgICAgQ1NSX0hXX0lGX0NPTkZJR19SRUdfQklUX0VFUFJPTV9PV05fU0VNKTsKLQotCQkvKiBTZWUgaWYgd2UgZ290IGl0ICovCi0JCXJldCA9IGl3bF9wb2xsX2JpdChwcml2LCBDU1JfSFdfSUZfQ09ORklHX1JFRywKLQkJCQlDU1JfSFdfSUZfQ09ORklHX1JFR19CSVRfRUVQUk9NX09XTl9TRU0sCi0JCQkJQ1NSX0hXX0lGX0NPTkZJR19SRUdfQklUX0VFUFJPTV9PV05fU0VNLAotCQkJCUVFUFJPTV9TRU1fVElNRU9VVCk7Ci0JCWlmIChyZXQgPj0gMCkgewotCQkJSVdMX0RFQlVHX0lPKHByaXYsCi0JCQkJIkFjcXVpcmVkIHNlbWFwaG9yZSBhZnRlciAlZCB0cmllcy5cbiIsCi0JCQkJY291bnQrMSk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotdm9pZCBpd2xjb3JlX2VlcHJvbV9yZWxlYXNlX3NlbWFwaG9yZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCi17Ci0JaXdsX2NsZWFyX2JpdChwcml2LCBDU1JfSFdfSUZfQ09ORklHX1JFRywKLQkJQ1NSX0hXX0lGX0NPTkZJR19SRUdfQklUX0VFUFJPTV9PV05fU0VNKTsKLQotfQotCiBpbnQgaXdsX2VlcHJvbV9jaGVja192ZXJzaW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAl1MTYgZWVwcm9tX3ZlcjsKIAl1MTYgY2FsaWJfdmVyOwogCiAJZWVwcm9tX3ZlciA9IGl3bF9lZXByb21fcXVlcnkxNihwcml2LCBFRVBST01fVkVSU0lPTik7Ci0JY2FsaWJfdmVyID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZWVwcm9tX29wcy5jYWxpYl92ZXJzaW9uKHByaXYpOworCWNhbGliX3ZlciA9IGl3bGFnbl9lZXByb21fY2FsaWJfdmVyc2lvbihwcml2KTsKIAogCWlmIChlZXByb21fdmVyIDwgcHJpdi0+Y2ZnLT5lZXByb21fdmVyIHx8CiAJICAgIGNhbGliX3ZlciA8IHByaXYtPmNmZy0+ZWVwcm9tX2NhbGliX3ZlcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1oY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24taGNtZC5jCmluZGV4IDQxNTQzYWQuLmIxMmM3MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1oY21kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWhjbWQuYwpAQCAtMiw3ICsyLDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzcsNTQgKzM3LDYgQEAKICNpbmNsdWRlICJpd2wtaW8uaCIKICNpbmNsdWRlICJpd2wtYWduLmgiCiAKLWludCBpd2xhZ25fc2VuZF9yeG9uX2Fzc29jKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCSAgIHN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHgpCi17Ci0JaW50IHJldCA9IDA7Ci0Jc3RydWN0IGl3bDUwMDBfcnhvbl9hc3NvY19jbWQgcnhvbl9hc3NvYzsKLQljb25zdCBzdHJ1Y3QgaXdsX3J4b25fY21kICpyeG9uMSA9ICZjdHgtPnN0YWdpbmc7Ci0JY29uc3Qgc3RydWN0IGl3bF9yeG9uX2NtZCAqcnhvbjIgPSAmY3R4LT5hY3RpdmU7Ci0KLQlpZiAoKHJ4b24xLT5mbGFncyA9PSByeG9uMi0+ZmxhZ3MpICYmCi0JICAgIChyeG9uMS0+ZmlsdGVyX2ZsYWdzID09IHJ4b24yLT5maWx0ZXJfZmxhZ3MpICYmCi0JICAgIChyeG9uMS0+Y2NrX2Jhc2ljX3JhdGVzID09IHJ4b24yLT5jY2tfYmFzaWNfcmF0ZXMpICYmCi0JICAgIChyeG9uMS0+b2ZkbV9odF9zaW5nbGVfc3RyZWFtX2Jhc2ljX3JhdGVzID09Ci0JICAgICByeG9uMi0+b2ZkbV9odF9zaW5nbGVfc3RyZWFtX2Jhc2ljX3JhdGVzKSAmJgotCSAgICAocnhvbjEtPm9mZG1faHRfZHVhbF9zdHJlYW1fYmFzaWNfcmF0ZXMgPT0KLQkgICAgIHJ4b24yLT5vZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzKSAmJgotCSAgICAocnhvbjEtPm9mZG1faHRfdHJpcGxlX3N0cmVhbV9iYXNpY19yYXRlcyA9PQotCSAgICAgcnhvbjItPm9mZG1faHRfdHJpcGxlX3N0cmVhbV9iYXNpY19yYXRlcykgJiYKLQkgICAgKHJ4b24xLT5hY3F1aXNpdGlvbl9kYXRhID09IHJ4b24yLT5hY3F1aXNpdGlvbl9kYXRhKSAmJgotCSAgICAocnhvbjEtPnJ4X2NoYWluID09IHJ4b24yLT5yeF9jaGFpbikgJiYKLQkgICAgKHJ4b24xLT5vZmRtX2Jhc2ljX3JhdGVzID09IHJ4b24yLT5vZmRtX2Jhc2ljX3JhdGVzKSkgewotCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiVXNpbmcgY3VycmVudCBSWE9OX0FTU09DLiAgTm90IHJlc2VuZGluZy5cbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyeG9uX2Fzc29jLmZsYWdzID0gY3R4LT5zdGFnaW5nLmZsYWdzOwotCXJ4b25fYXNzb2MuZmlsdGVyX2ZsYWdzID0gY3R4LT5zdGFnaW5nLmZpbHRlcl9mbGFnczsKLQlyeG9uX2Fzc29jLm9mZG1fYmFzaWNfcmF0ZXMgPSBjdHgtPnN0YWdpbmcub2ZkbV9iYXNpY19yYXRlczsKLQlyeG9uX2Fzc29jLmNja19iYXNpY19yYXRlcyA9IGN0eC0+c3RhZ2luZy5jY2tfYmFzaWNfcmF0ZXM7Ci0Jcnhvbl9hc3NvYy5yZXNlcnZlZDEgPSAwOwotCXJ4b25fYXNzb2MucmVzZXJ2ZWQyID0gMDsKLQlyeG9uX2Fzc29jLnJlc2VydmVkMyA9IDA7Ci0Jcnhvbl9hc3NvYy5vZmRtX2h0X3NpbmdsZV9zdHJlYW1fYmFzaWNfcmF0ZXMgPQotCSAgICBjdHgtPnN0YWdpbmcub2ZkbV9odF9zaW5nbGVfc3RyZWFtX2Jhc2ljX3JhdGVzOwotCXJ4b25fYXNzb2Mub2ZkbV9odF9kdWFsX3N0cmVhbV9iYXNpY19yYXRlcyA9Ci0JICAgIGN0eC0+c3RhZ2luZy5vZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzOwotCXJ4b25fYXNzb2MucnhfY2hhaW5fc2VsZWN0X2ZsYWdzID0gY3R4LT5zdGFnaW5nLnJ4X2NoYWluOwotCXJ4b25fYXNzb2Mub2ZkbV9odF90cmlwbGVfc3RyZWFtX2Jhc2ljX3JhdGVzID0KLQkJIGN0eC0+c3RhZ2luZy5vZmRtX2h0X3RyaXBsZV9zdHJlYW1fYmFzaWNfcmF0ZXM7Ci0Jcnhvbl9hc3NvYy5hY3F1aXNpdGlvbl9kYXRhID0gY3R4LT5zdGFnaW5nLmFjcXVpc2l0aW9uX2RhdGE7Ci0KLQlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1X2FzeW5jKHByaXYsIGN0eC0+cnhvbl9hc3NvY19jbWQsCi0JCQkJICAgICBzaXplb2Yocnhvbl9hc3NvYyksICZyeG9uX2Fzc29jLCBOVUxMKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIHJldDsKLX0KLQogaW50IGl3bGFnbl9zZW5kX3R4X2FudF9jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCB2YWxpZF90eF9hbnQpCiB7CiAJc3RydWN0IGl3bF90eF9hbnRfY29uZmlnX2NtZCB0eF9hbnRfY21kID0gewpAQCAtMTAyLDEyICs1NCw2IEBACiAJfQogfQogCi0vKiBDdXJyZW50bHkgdGhpcyBpcyB0aGUgc3VwZXJzZXQgb2YgZXZlcnl0aGluZyAqLwotc3RhdGljIHUxNiBpd2xhZ25fZ2V0X2hjbWRfc2l6ZSh1OCBjbWRfaWQsIHUxNiBsZW4pCi17Ci0JcmV0dXJuIGxlbjsKLX0KLQogc3RhdGljIHUxNiBpd2xhZ25fYnVpbGRfYWRkc3RhX2hjbWQoY29uc3Qgc3RydWN0IGl3bF9hZGRzdGFfY21kICpjbWQsIHU4ICpkYXRhKQogewogCXUxNiBzaXplID0gKHUxNilzaXplb2Yoc3RydWN0IGl3bF9hZGRzdGFfY21kKTsKQEAgLTM2NCw3ICszMTAsNiBAQAogfQogCiBzdHJ1Y3QgaXdsX2hjbWRfb3BzIGl3bGFnbl9oY21kID0gewotCS5yeG9uX2Fzc29jID0gaXdsYWduX3NlbmRfcnhvbl9hc3NvYywKIAkuY29tbWl0X3J4b24gPSBpd2xhZ25fY29tbWl0X3J4b24sCiAJLnNldF9yeG9uX2NoYWluID0gaXdsYWduX3NldF9yeG9uX2NoYWluLAogCS5zZXRfdHhfYW50ID0gaXdsYWduX3NlbmRfdHhfYW50X2NvbmZpZywKQEAgLTM3Myw3ICszMTgsNiBAQAogfTsKIAogc3RydWN0IGl3bF9oY21kX29wcyBpd2xhZ25fYnRfaGNtZCA9IHsKLQkucnhvbl9hc3NvYyA9IGl3bGFnbl9zZW5kX3J4b25fYXNzb2MsCiAJLmNvbW1pdF9yeG9uID0gaXdsYWduX2NvbW1pdF9yeG9uLAogCS5zZXRfcnhvbl9jaGFpbiA9IGl3bGFnbl9zZXRfcnhvbl9jaGFpbiwKIAkuc2V0X3R4X2FudCA9IGl3bGFnbl9zZW5kX3R4X2FudF9jb25maWcsCkBAIC0zODIsNyArMzI2LDYgQEAKIH07CiAKIHN0cnVjdCBpd2xfaGNtZF91dGlsc19vcHMgaXdsYWduX2hjbWRfdXRpbHMgPSB7Ci0JLmdldF9oY21kX3NpemUgPSBpd2xhZ25fZ2V0X2hjbWRfc2l6ZSwKIAkuYnVpbGRfYWRkc3RhX2hjbWQgPSBpd2xhZ25fYnVpbGRfYWRkc3RhX2hjbWQsCiAJLmdhaW5fY29tcHV0YXRpb24gPSBpd2xhZ25fZ2Fpbl9jb21wdXRhdGlvbiwKIAkuY2hhaW5fbm9pc2VfcmVzZXQgPSBpd2xhZ25fY2hhaW5fbm9pc2VfcmVzZXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24taHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ody5oCmluZGV4IGE1MmI4MmMuLjdiZDE5ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ody5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ody5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogQlNEIExJQ0VOU0UKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWljdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWljdC5jCmluZGV4IGVkMDE0OGQuLjBkNWZkYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1pY3QuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24taWN0LmMKQEAgLTIsNyArMiw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTU5LDggKzU5LDYgQEAKIGludCBpd2xfYWxsb2NfaXNyX2ljdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAKLQlpZiAocHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+dXNlX2lzcl9sZWdhY3kpCi0JCXJldHVybiAwOwogCS8qIGFsbG9jYXRlIHNocmFyZWQgZGF0YSB0YWJsZSAqLwogCXByaXYtPl9hZ24uaWN0X3RibF92aXIgPQogCQlkbWFfYWxsb2NfY29oZXJlbnQoJnByaXYtPnBjaV9kZXYtPmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1sZWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1sZWQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzExOTBkOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tbGVkLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi0gKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQotICoKLSAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQotICogZmlsZSBjYWxsZWQgTElDRU5TRS4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgotICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KLSNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KLQotI2luY2x1ZGUgIml3bC1jb21tYW5kcy5oIgotI2luY2x1ZGUgIml3bC1kZXYuaCIKLSNpbmNsdWRlICJpd2wtY29yZS5oIgotI2luY2x1ZGUgIml3bC1pby5oIgotI2luY2x1ZGUgIml3bC1hZ24tbGVkLmgiCi0KLS8qIFNlbmQgbGVkIGNvbW1hbmQgKi8KLXN0YXRpYyBpbnQgaXdsX3NlbmRfbGVkX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfbGVkX2NtZCAqbGVkX2NtZCkKLXsKLQlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKLQkJLmlkID0gUkVQTFlfTEVEU19DTUQsCi0JCS5sZW4gPSBzaXplb2Yoc3RydWN0IGl3bF9sZWRfY21kKSwKLQkJLmRhdGEgPSBsZWRfY21kLAotCQkuZmxhZ3MgPSBDTURfQVNZTkMsCi0JCS5jYWxsYmFjayA9IE5VTEwsCi0JfTsKLQl1MzIgcmVnOwotCi0JcmVnID0gaXdsX3JlYWQzMihwcml2LCBDU1JfTEVEX1JFRyk7Ci0JaWYgKHJlZyAhPSAocmVnICYgQ1NSX0xFRF9CU01fQ1RSTF9NU0spKQotCQlpd2xfd3JpdGUzMihwcml2LCBDU1JfTEVEX1JFRywgcmVnICYgQ1NSX0xFRF9CU01fQ1RSTF9NU0spOwotCi0JcmV0dXJuIGl3bF9zZW5kX2NtZChwcml2LCAmY21kKTsKLX0KLQotLyogU2V0IGxlZCByZWdpc3RlciBvZmYgKi8KLXZvaWQgaXdsYWduX2xlZF9lbmFibGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCWl3bF93cml0ZTMyKHByaXYsIENTUl9MRURfUkVHLCBDU1JfTEVEX1JFR19UUlVOX09OKTsKLX0KLQotY29uc3Qgc3RydWN0IGl3bF9sZWRfb3BzIGl3bGFnbl9sZWRfb3BzID0gewotCS5jbWQgPSBpd2xfc2VuZF9sZWRfY21kLAotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1saWIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1saWIuYwppbmRleCAwOGNjYjk0Li44ZTc5NjUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tbGliLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWxpYi5jCkBAIC0yLDcgKzIsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0xNzIsNiArMTcyLDcgQEAKIAogc3RhdGljIHZvaWQgaXdsYWduX3NldF90eF9zdGF0dXMoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCisJCQkJIHN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHgsCiAJCQkJIHN0cnVjdCBpd2xhZ25fdHhfcmVzcCAqdHhfcmVzcCwKIAkJCQkgaW50IHR4cV9pZCwgYm9vbCBpc19hZ2cpCiB7CkBAIC0xODYsNiArMTg3LDEzIEBACiAJaWYgKCFpd2xfaXNfdHhfc3VjY2VzcyhzdGF0dXMpKQogCQlpd2xhZ25fY291bnRfdHhfZXJyX3N0YXR1cyhwcml2LCBzdGF0dXMpOwogCisJaWYgKHN0YXR1cyA9PSBUWF9TVEFUVVNfRkFJTF9QQVNTSVZFX05PX1JYICYmCisJICAgIGl3bF9pc19hc3NvY2lhdGVkX2N0eChjdHgpICYmIGN0eC0+dmlmICYmCisJICAgIGN0eC0+dmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKKwkJY3R4LT5sYXN0X3R4X3JlamVjdGVkID0gdHJ1ZTsKKwkJaXdsX3N0b3BfcXVldWUocHJpdiwgJnByaXYtPnR4cVt0eHFfaWRdKTsKKwl9CisKIAlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIlRYUSAlZCBzdGF0dXMgJXMgKDB4JTA4eCkgcmF0ZV9uX2ZsYWdzICIKIAkJCSAgICIweCV4IHJldHJpZXMgJWRcbiIsCiAJCQkgICB0eHFfaWQsCkBAIC0yNDIsMTUgKzI1MCwxNiBAQAogCiAJLyogIyBmcmFtZXMgYXR0ZW1wdGVkIGJ5IFR4IGNvbW1hbmQgKi8KIAlpZiAoYWdnLT5mcmFtZV9jb3VudCA9PSAxKSB7CisJCXN0cnVjdCBpd2xfdHhfaW5mbyAqdHhiOworCiAJCS8qIE9ubHkgb25lIGZyYW1lIHdhcyBhdHRlbXB0ZWQ7IG5vIGJsb2NrLWFjayB3aWxsIGFycml2ZSAqLwogCQlpZHggPSBzdGFydF9pZHg7CiAKIAkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJGcmFtZUNudCA9ICVkLCBTdGFydElkeD0lZCBpZHg9JWRcbiIsCiAJCQkJICAgYWdnLT5mcmFtZV9jb3VudCwgYWdnLT5zdGFydF9pZHgsIGlkeCk7Ci0JCWl3bGFnbl9zZXRfdHhfc3RhdHVzKHByaXYsCi0JCQkJICAgICBJRUVFODAyMTFfU0tCX0NCKAotCQkJCQlwcml2LT50eHFbdHhxX2lkXS50eGJbaWR4XS5za2IpLAotCQkJCSAgICAgdHhfcmVzcCwgdHhxX2lkLCB0cnVlKTsKKwkJdHhiID0gJnByaXYtPnR4cVt0eHFfaWRdLnR4YltpZHhdOworCQlpd2xhZ25fc2V0X3R4X3N0YXR1cyhwcml2LCBJRUVFODAyMTFfU0tCX0NCKHR4Yi0+c2tiKSwKKwkJCQkgICAgIHR4Yi0+Y3R4LCB0eF9yZXNwLCB0eHFfaWQsIHRydWUpOwogCQlhZ2ctPndhaXRfZm9yX2JhID0gMDsKIAl9IGVsc2UgewogCQkvKiBUd28gb3IgbW9yZSBmcmFtZXMgd2VyZSBhdHRlbXB0ZWQ7IGV4cGVjdCBibG9jay1hY2sgKi8KQEAgLTM5MSw3ICs0MDAsOCBAQAogCXN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSA9ICZwcml2LT50eHFbdHhxX2lkXTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CiAJc3RydWN0IGl3bGFnbl90eF9yZXNwICp0eF9yZXNwID0gKHZvaWQgKikmcGt0LT51LnJhd1swXTsKLQl1MzIgIHN0YXR1cyA9IGxlMTZfdG9fY3B1KHR4X3Jlc3AtPnN0YXR1cy5zdGF0dXMpOworCXN0cnVjdCBpd2xfdHhfaW5mbyAqdHhiOworCXUzMiBzdGF0dXMgPSBsZTE2X3RvX2NwdSh0eF9yZXNwLT5zdGF0dXMuc3RhdHVzKTsKIAlpbnQgdGlkOwogCWludCBzdGFfaWQ7CiAJaW50IGZyZWVkOwpAQCAtNDA2LDcgKzQxNiw4IEBACiAJfQogCiAJdHhxLT50aW1lX3N0YW1wID0gamlmZmllczsKLQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQih0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdLnNrYik7CisJdHhiID0gJnR4cS0+dHhiW3R4cS0+cS5yZWFkX3B0cl07CisJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHhiLT5za2IpOwogCW1lbXNldCgmaW5mby0+c3RhdHVzLCAwLCBzaXplb2YoaW5mby0+c3RhdHVzKSk7CiAKIAl0aWQgPSAodHhfcmVzcC0+cmFfdGlkICYgSVdMQUdOX1RYX1JFU19USURfTVNLKSA+PgpAQCAtNDUwLDEyICs0NjEsMTQgQEAKIAkJCQlpd2xfd2FrZV9xdWV1ZShwcml2LCB0eHEpOwogCQl9CiAJfSBlbHNlIHsKLQkJaXdsYWduX3NldF90eF9zdGF0dXMocHJpdiwgaW5mbywgdHhfcmVzcCwgdHhxX2lkLCBmYWxzZSk7CisJCWl3bGFnbl9zZXRfdHhfc3RhdHVzKHByaXYsIGluZm8sIHR4Yi0+Y3R4LCB0eF9yZXNwLAorCQkJCSAgICAgdHhxX2lkLCBmYWxzZSk7CiAJCWZyZWVkID0gaXdsYWduX3R4X3F1ZXVlX3JlY2xhaW0ocHJpdiwgdHhxX2lkLCBpbmRleCk7CiAJCWl3bF9mcmVlX3RmZHNfaW5fcXVldWUocHJpdiwgc3RhX2lkLCB0aWQsIGZyZWVkKTsKIAogCQlpZiAocHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCAmJgotCQkgICAgKGl3bF9xdWV1ZV9zcGFjZSgmdHhxLT5xKSA+IHR4cS0+cS5sb3dfbWFyaykpCisJCSAgICBpd2xfcXVldWVfc3BhY2UoJnR4cS0+cSkgPiB0eHEtPnEubG93X21hcmsgJiYKKwkJICAgIHN0YXR1cyAhPSBUWF9TVEFUVVNfRkFJTF9QQVNTSVZFX05PX1JYKQogCQkJaXdsX3dha2VfcXVldWUocHJpdiwgdHhxKTsKIAl9CiAKQEAgLTQ3MCw4ICs0ODMsNiBAQAogCS8qIGluaXQgY2FsaWJyYXRpb24gaGFuZGxlcnMgKi8KIAlwcml2LT5yeF9oYW5kbGVyc1tDQUxJQlJBVElPTl9SRVNfTk9USUZJQ0FUSU9OXSA9CiAJCQkJCWl3bGFnbl9yeF9jYWxpYl9yZXN1bHQ7Ci0JcHJpdi0+cnhfaGFuZGxlcnNbQ0FMSUJSQVRJT05fQ09NUExFVEVfTk9USUZJQ0FUSU9OXSA9Ci0JCQkJCWl3bGFnbl9yeF9jYWxpYl9jb21wbGV0ZTsKIAlwcml2LT5yeF9oYW5kbGVyc1tSRVBMWV9UWF0gPSBpd2xhZ25fcnhfcmVwbHlfdHg7CiAKIAkvKiBzZXQgdXAgbm90aWZpY2F0aW9uIHdhaXQgc3VwcG9ydCAqLwpAQCAtNDgyLDggKzQ5MywxMCBAQAogCiB2b2lkIGl3bGFnbl9zZXR1cF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQkvKiBpbiBhZ24sIHRoZSB0eCBwb3dlciBjYWxpYnJhdGlvbiBpcyBkb25lIGluIHVDb2RlICovCi0JcHJpdi0+ZGlzYWJsZV90eF9wb3dlcl9jYWwgPSAxOworCS8qCisJICogbm90aGluZyBuZWVkIHRvIGJlIGRvbmUgaGVyZSBhbnltb3JlCisJICogc3RpbGwga2VlcCBmb3IgZnV0dXJlIHVzZSBpZiBuZWVkZWQKKwkgKi8KIH0KIAogaW50IGl3bGFnbl9od192YWxpZF9ydGNfZGF0YV9hZGRyKHUzMiBhZGRyKQpAQCAtNTM0LDkgKzU0Nyw3IEBACiB2b2lkIGl3bGFnbl90ZW1wZXJhdHVyZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJLyogc3RvcmUgdGVtcGVyYXR1cmUgZnJvbSBjb3JyZWN0IHN0YXRpc3RpY3MgKGluIENlbHNpdXMpICovCi0JcHJpdi0+dGVtcGVyYXR1cmUgPSBsZTMyX3RvX2NwdSgoaXdsX2J0X3N0YXRpc3RpY3MocHJpdikpID8KLQkJcHJpdi0+X2Fnbi5zdGF0aXN0aWNzX2J0LmdlbmVyYWwuY29tbW9uLnRlbXBlcmF0dXJlIDoKLQkJcHJpdi0+X2Fnbi5zdGF0aXN0aWNzLmdlbmVyYWwuY29tbW9uLnRlbXBlcmF0dXJlKTsKKwlwcml2LT50ZW1wZXJhdHVyZSA9IGxlMzJfdG9fY3B1KHByaXYtPnN0YXRpc3RpY3MuY29tbW9uLnRlbXBlcmF0dXJlKTsKIAlpd2xfdHRfaGFuZGxlcihwcml2KTsKIH0KIApAQCAtNjUyLDEwICs2NjMsOSBAQAogCWNvbnN0IHUzMiByZmRubG9nID0gUlhfUVVFVUVfU0laRV9MT0c7IC8qIDI1NiBSQkRzICovCiAJdTMyIHJiX3RpbWVvdXQgPSAwOyAvKiBGSVhNRTogUlhfUkJfVElNRU9VVCBmb3IgYWxsIGRldmljZXM/ICovCiAKLQlpZiAoIXByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPnVzZV9pc3JfbGVnYWN5KQotCQlyYl90aW1lb3V0ID0gUlhfUkJfVElNRU9VVDsKKwlyYl90aW1lb3V0ID0gUlhfUkJfVElNRU9VVDsKIAotCWlmIChwcml2LT5jZmctPm1vZF9wYXJhbXMtPmFtc2R1X3NpemVfOEspCisJaWYgKGl3bGFnbl9tb2RfcGFyYW1zLmFtc2R1X3NpemVfOEspCiAJCXJiX3NpemUgPSBGSF9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX1JCX1NJWkVfOEs7CiAJZWxzZQogCQlyYl9zaXplID0gRkhfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9SQl9TSVpFXzRLOwpAQCAtOTEzLDcgKzkyMyw2IEBACiAKIAkJbGlzdF9hZGRfdGFpbCgmcnhiLT5saXN0LCAmcnhxLT5yeF9mcmVlKTsKIAkJcnhxLT5mcmVlX2NvdW50Kys7Ci0JCXByaXYtPmFsbG9jX3J4Yl9wYWdlKys7CiAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnhxLT5sb2NrLCBmbGFncyk7CiAJfQpAQCAtMTI4NSw5ICsxMjk0LDE3IEBACiAJICogbWVhbiB3ZSBuZXZlciByZWFjaCBpdCwgYnV0IGF0IHRoZSBzYW1lIHRpbWUgd29yayBhcm91bmQKIAkgKiB0aGUgYWZvcmVtZW50aW9uZWQgaXNzdWUuIFRodXMgdXNlIElXTF9HT09EX0NSQ19USF9ORVZFUgogCSAqIGhlcmUgaW5zdGVhZCBvZiBJV0xfR09PRF9DUkNfVEhfRElTQUJMRUQuCisJICoKKwkgKiBUaGlzIHdhcyBmaXhlZCBpbiBsYXRlciB2ZXJzaW9ucyBhbG9uZyB3aXRoIHNvbWUgb3RoZXIKKwkgKiBzY2FuIGNoYW5nZXMsIGFuZCB0aGUgdGhyZXNob2xkIGJlaGF2ZXMgYXMgYSBmbGFnIGluIHRob3NlCisJICogdmVyc2lvbnMuCiAJICovCi0Jc2Nhbi0+Z29vZF9DUkNfdGggPSBpc19hY3RpdmUgPyBJV0xfR09PRF9DUkNfVEhfREVGQVVMVCA6Ci0JCQkJCUlXTF9HT09EX0NSQ19USF9ORVZFUjsKKwlpZiAocHJpdi0+bmV3X3NjYW5fdGhyZXNob2xkX2JlaGF2aW91cikKKwkJc2Nhbi0+Z29vZF9DUkNfdGggPSBpc19hY3RpdmUgPyBJV0xfR09PRF9DUkNfVEhfREVGQVVMVCA6CisJCQkJCQlJV0xfR09PRF9DUkNfVEhfRElTQUJMRUQ7CisJZWxzZQorCQlzY2FuLT5nb29kX0NSQ190aCA9IGlzX2FjdGl2ZSA/IElXTF9HT09EX0NSQ19USF9ERUZBVUxUIDoKKwkJCQkJCUlXTF9HT09EX0NSQ19USF9ORVZFUjsKIAogCWJhbmQgPSBwcml2LT5zY2FuX2JhbmQ7CiAKQEAgLTIyNDUsMzQgKzIyNjIsNDQgQEAKIC8qIG5vdGlmaWNhdGlvbiB3YWl0IHN1cHBvcnQgKi8KIHZvaWQgaXdsYWduX2luaXRfbm90aWZpY2F0aW9uX3dhaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCSAgIHN0cnVjdCBpd2xfbm90aWZpY2F0aW9uX3dhaXQgKndhaXRfZW50cnksCisJCQkJICAgdTggY21kLAogCQkJCSAgIHZvaWQgKCpmbikoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCQkgICAgICBzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0KSwKLQkJCQkgICB1OCBjbWQpCisJCQkJCSAgICAgIHN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QsCisJCQkJCSAgICAgIHZvaWQgKmRhdGEpLAorCQkJCSAgIHZvaWQgKmZuX2RhdGEpCiB7CiAJd2FpdF9lbnRyeS0+Zm4gPSBmbjsKKwl3YWl0X2VudHJ5LT5mbl9kYXRhID0gZm5fZGF0YTsKIAl3YWl0X2VudHJ5LT5jbWQgPSBjbWQ7CiAJd2FpdF9lbnRyeS0+dHJpZ2dlcmVkID0gZmFsc2U7CisJd2FpdF9lbnRyeS0+YWJvcnRlZCA9IGZhbHNlOwogCiAJc3Bpbl9sb2NrX2JoKCZwcml2LT5fYWduLm5vdGlmX3dhaXRfbG9jayk7CiAJbGlzdF9hZGQoJndhaXRfZW50cnktPmxpc3QsICZwcml2LT5fYWduLm5vdGlmX3dhaXRzKTsKIAlzcGluX3VubG9ja19iaCgmcHJpdi0+X2Fnbi5ub3RpZl93YWl0X2xvY2spOwogfQogCi1zaWduZWQgbG9uZyBpd2xhZ25fd2FpdF9ub3RpZmljYXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgICAgc3RydWN0IGl3bF9ub3RpZmljYXRpb25fd2FpdCAqd2FpdF9lbnRyeSwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKK2ludCBpd2xhZ25fd2FpdF9ub3RpZmljYXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgICBzdHJ1Y3QgaXdsX25vdGlmaWNhdGlvbl93YWl0ICp3YWl0X2VudHJ5LAorCQkJICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCiB7CiAJaW50IHJldDsKIAogCXJldCA9IHdhaXRfZXZlbnRfdGltZW91dChwcml2LT5fYWduLm5vdGlmX3dhaXRxLAotCQkJCSB3YWl0X2VudHJ5LT50cmlnZ2VyZWQsCisJCQkJIHdhaXRfZW50cnktPnRyaWdnZXJlZCB8fCB3YWl0X2VudHJ5LT5hYm9ydGVkLAogCQkJCSB0aW1lb3V0KTsKIAogCXNwaW5fbG9ja19iaCgmcHJpdi0+X2Fnbi5ub3RpZl93YWl0X2xvY2spOwogCWxpc3RfZGVsKCZ3YWl0X2VudHJ5LT5saXN0KTsKIAlzcGluX3VubG9ja19iaCgmcHJpdi0+X2Fnbi5ub3RpZl93YWl0X2xvY2spOwogCi0JcmV0dXJuIHJldDsKKwlpZiAod2FpdF9lbnRyeS0+YWJvcnRlZCkKKwkJcmV0dXJuIC1FSU87CisKKwkvKiByZXR1cm4gdmFsdWUgaXMgYWx3YXlzID49IDAgKi8KKwlpZiAocmV0IDw9IDApCisJCXJldHVybiAtRVRJTUVET1VUOworCXJldHVybiAwOwogfQogCiB2b2lkIGl3bGFnbl9yZW1vdmVfbm90aWZpY2F0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKQEAgLTIyODIsMyArMjMwOSw4NyBAQAogCWxpc3RfZGVsKCZ3YWl0X2VudHJ5LT5saXN0KTsKIAlzcGluX3VubG9ja19iaCgmcHJpdi0+X2Fnbi5ub3RpZl93YWl0X2xvY2spOwogfQorCitpbnQgaXdsYWduX3N0YXJ0X2RldmljZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaW50IHJldDsKKworCWlmIChpd2xfcHJlcGFyZV9jYXJkX2h3KHByaXYpKSB7CisJCUlXTF9XQVJOKHByaXYsICJFeGl0IEhXIG5vdCByZWFkeVxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIElmIHBsYXRmb3JtJ3MgUkZfS0lMTCBzd2l0Y2ggaXMgTk9UIHNldCB0byBLSUxMICovCisJaWYgKGl3bF9yZWFkMzIocHJpdiwgQ1NSX0dQX0NOVFJMKSAmIENTUl9HUF9DTlRSTF9SRUdfRkxBR19IV19SRl9LSUxMX1NXKQorCQljbGVhcl9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOworCWVsc2UKKwkJc2V0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cyk7CisKKwlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkgeworCQl3aXBoeV9yZmtpbGxfc2V0X2h3X3N0YXRlKHByaXYtPmh3LT53aXBoeSwgdHJ1ZSk7CisJCWl3bF9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKKwkJcmV0dXJuIC1FUkZLSUxMOworCX0KKworCWl3bF93cml0ZTMyKHByaXYsIENTUl9JTlQsIDB4RkZGRkZGRkYpOworCisJcmV0ID0gaXdsYWduX2h3X25pY19pbml0KHByaXYpOworCWlmIChyZXQpIHsKKwkJSVdMX0VSUihwcml2LCAiVW5hYmxlIHRvIGluaXQgbmljXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBtYWtlIHN1cmUgcmZraWxsIGhhbmRzaGFrZSBiaXRzIGFyZSBjbGVhcmVkICovCisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDFfQ0xSLCBDU1JfVUNPREVfU1dfQklUX1JGS0lMTCk7CisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDFfQ0xSLAorCQkgICAgQ1NSX1VDT0RFX0RSVl9HUDFfQklUX0NNRF9CTE9DS0VEKTsKKworCS8qIGNsZWFyIChhZ2FpbiksIHRoZW4gZW5hYmxlIGhvc3QgaW50ZXJydXB0cyAqLworCWl3bF93cml0ZTMyKHByaXYsIENTUl9JTlQsIDB4RkZGRkZGRkYpOworCWl3bF9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKKworCS8qIHJlYWxseSBtYWtlIHN1cmUgcmZraWxsIGhhbmRzaGFrZSBiaXRzIGFyZSBjbGVhcmVkICovCisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDFfQ0xSLCBDU1JfVUNPREVfU1dfQklUX1JGS0lMTCk7CisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDFfQ0xSLCBDU1JfVUNPREVfU1dfQklUX1JGS0lMTCk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBpd2xhZ25fc3RvcF9kZXZpY2Uoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBzdG9wIGFuZCByZXNldCB0aGUgb24tYm9hcmQgcHJvY2Vzc29yICovCisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX1JFU0VULCBDU1JfUkVTRVRfUkVHX0ZMQUdfTkVWT19SRVNFVCk7CisKKwkvKiB0ZWxsIHRoZSBkZXZpY2UgdG8gc3RvcCBzZW5kaW5nIGludGVycnVwdHMgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWl3bF9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWl3bF9zeW5jaHJvbml6ZV9pcnEocHJpdik7CisKKwkvKiBkZXZpY2UgZ29pbmcgZG93biwgU3RvcCB1c2luZyBJQ1QgdGFibGUgKi8KKwlpd2xfZGlzYWJsZV9pY3QocHJpdik7CisKKwkvKgorCSAqIElmIGEgSFcgcmVzdGFydCBoYXBwZW5zIGR1cmluZyBmaXJtd2FyZSBsb2FkaW5nLAorCSAqIHRoZW4gdGhlIGZpcm13YXJlIGxvYWRpbmcgbWlnaHQgY2FsbCB0aGlzIGZ1bmN0aW9uCisJICogYW5kIGxhdGVyIGl0IG1pZ2h0IGJlIGNhbGxlZCBhZ2FpbiBkdWUgdG8gdGhlCisJICogcmVzdGFydC4gU28gZG9uJ3QgcHJvY2VzcyBhZ2FpbiBpZiB0aGUgZGV2aWNlIGlzCisJICogYWxyZWFkeSBkZWFkLgorCSAqLworCWlmICh0ZXN0X2JpdChTVEFUVVNfREVWSUNFX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgaXdsYWduX3R4cV9jdHhfc3RvcChwcml2KTsKKyAgICAgICAgICAgICAgICBpd2xhZ25fcnhxX3N0b3AocHJpdik7CisKKyAgICAgICAgICAgICAgICAvKiBQb3dlci1kb3duIGRldmljZSdzIGJ1c21hc3RlciBETUEgY2xvY2tzICovCisgICAgICAgICAgICAgICAgaXdsX3dyaXRlX3BycGgocHJpdiwgQVBNR19DTEtfRElTX1JFRywgQVBNR19DTEtfVkFMX0RNQV9DTEtfUlFUKTsKKyAgICAgICAgICAgICAgICB1ZGVsYXkoNSk7CisgICAgICAgIH0KKworCS8qIE1ha2Ugc3VyZSAocmVkdW5kYW50KSB3ZSd2ZSByZWxlYXNlZCBvdXIgcmVxdWVzdCB0byBzdGF5IGF3YWtlICovCisJaXdsX2NsZWFyX2JpdChwcml2LCBDU1JfR1BfQ05UUkwsIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQUNDRVNTX1JFUSk7CisKKwkvKiBTdG9wIHRoZSBkZXZpY2UsIGFuZCBwdXQgaXQgaW4gbG93IHBvd2VyIHN0YXRlICovCisJaXdsX2FwbV9zdG9wKHByaXYpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuYwppbmRleCBkMDNiNDczLi45MWYyNjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0xMTUsMTMgKzExNSwxOCBAQAogCS8qIEZJWE1FOlJTOiAgICAgICAgICBeXiAgICBzaG91bGQgYmUgSU5WIChsZWdhY3kpICovCiB9OwogCitzdGF0aWMgaW5saW5lIHU4IHJzX2V4dHJhY3RfcmF0ZSh1MzIgcmF0ZV9uX2ZsYWdzKQoreworCXJldHVybiAodTgpKHJhdGVfbl9mbGFncyAmIFJBVEVfTUNTX1JBVEVfTVNLKTsKK30KKwogc3RhdGljIGludCBpd2xfaHdyYXRlX3RvX3BsY3BfaWR4KHUzMiByYXRlX25fZmxhZ3MpCiB7CiAJaW50IGlkeCA9IDA7CiAKIAkvKiBIVCByYXRlIGZvcm1hdCAqLwogCWlmIChyYXRlX25fZmxhZ3MgJiBSQVRFX01DU19IVF9NU0spIHsKLQkJaWR4ID0gKHJhdGVfbl9mbGFncyAmIDB4ZmYpOworCQlpZHggPSByc19leHRyYWN0X3JhdGUocmF0ZV9uX2ZsYWdzKTsKIAogCQlpZiAoaWR4ID49IElXTF9SQVRFX01JTU8zXzZNX1BMQ1ApCiAJCQlpZHggPSBpZHggLSBJV0xfUkFURV9NSU1PM182TV9QTENQOwpAQCAtMTM4LDcgKzE0Myw4IEBACiAJLyogbGVnYWN5IHJhdGUgZm9ybWF0LCBzZWFyY2ggZm9yIG1hdGNoIGluIHRhYmxlICovCiAJfSBlbHNlIHsKIAkJZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKGl3bF9yYXRlcyk7IGlkeCsrKQotCQkJaWYgKGl3bF9yYXRlc1tpZHhdLnBsY3AgPT0gKHJhdGVfbl9mbGFncyAmIDB4RkYpKQorCQkJaWYgKGl3bF9yYXRlc1tpZHhdLnBsY3AgPT0KKwkJCQkJcnNfZXh0cmFjdF9yYXRlKHJhdGVfbl9mbGFncykpCiAJCQkJcmV0dXJuIGlkeDsKIAl9CiAKQEAgLTIzOSwxMSArMjQ1LDYgQEAKIAogI2RlZmluZSBNQ1NfSU5ERVhfUEVSX1NUUkVBTQkoOCkKIAotc3RhdGljIGlubGluZSB1OCByc19leHRyYWN0X3JhdGUodTMyIHJhdGVfbl9mbGFncykKLXsKLQlyZXR1cm4gKHU4KShyYXRlX25fZmxhZ3MgJiAweEZGKTsKLX0KLQogc3RhdGljIHZvaWQgcnNfcmF0ZV9zY2FsZV9jbGVhcl93aW5kb3coc3RydWN0IGl3bF9yYXRlX3NjYWxlX2RhdGEgKndpbmRvdykKIHsKIAl3aW5kb3ctPmRhdGEgPSAwOwpAQCAtMjc3MCwxNiArMjc3MSwxMyBAQAogc3RhdGljIHZvaWQgKnJzX2FsbG9jX3N0YSh2b2lkICpwcml2X3JhdGUsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCQkgIGdmcF90IGdmcCkKIHsKLQlzdHJ1Y3QgaXdsX2xxX3N0YSAqbHFfc3RhOwogCXN0cnVjdCBpd2xfc3RhdGlvbl9wcml2ICpzdGFfcHJpdiA9IChzdHJ1Y3QgaXdsX3N0YXRpb25fcHJpdiAqKSBzdGEtPmRydl9wcml2OwogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdjsKIAogCXByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopcHJpdl9yYXRlOwogCUlXTF9ERUJVR19SQVRFKHByaXYsICJjcmVhdGUgc3RhdGlvbiByYXRlIHNjYWxlIHdpbmRvd1xuIik7CiAKLQlscV9zdGEgPSAmc3RhX3ByaXYtPmxxX3N0YTsKLQotCXJldHVybiBscV9zdGE7CisJcmV0dXJuICZzdGFfcHJpdi0+bHFfc3RhOwogfQogCiAvKgpAQCAtMjkxMiw3ICsyOTEwLDggQEAKIAkJYW50X3RvZ2dsZV9jbnQgPSAxOwogCQlyZXBlYXRfcmF0ZSA9IElXTF9OVU1CRVJfVFJZOwogCX0gZWxzZSB7Ci0JCXJlcGVhdF9yYXRlID0gSVdMX0hUX05VTUJFUl9UUlk7CisJCXJlcGVhdF9yYXRlID0gbWluKElXTF9IVF9OVU1CRVJfVFJZLAorCQkJCSAgTElOS19RVUFMX0FHR19ESVNBQkxFX1NUQVJUX0RFRiAtIDEpOwogCX0KIAogCWxxX2NtZC0+Z2VuZXJhbF9wYXJhbXMubWltb19kZWxpbWl0ZXIgPQpAQCAtMzA4Nyw3ICszMDg2LDcgQEAKIAlzdHJ1Y3QgaXdsX2xxX3N0YSAqbHFfc3RhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdjsKIAljaGFyIGJ1Zls2NF07Ci0JaW50IGJ1Zl9zaXplOworCXNpemVfdCBidWZfc2l6ZTsKIAl1MzIgcGFyc2VkX3JhdGU7CiAJc3RydWN0IGl3bF9zdGF0aW9uX3ByaXYgKnN0YV9wcml2ID0KIAkJY29udGFpbmVyX29mKGxxX3N0YSwgc3RydWN0IGl3bF9zdGF0aW9uX3ByaXYsIGxxX3N0YSk7CkBAIC0zMjU3LDcgKzMyNTYsNiBAQAogewogCWNoYXIgYnVmZlsxMjBdOwogCWludCBkZXNjID0gMDsKLQlzc2l6ZV90IHJldDsKIAogCXN0cnVjdCBpd2xfbHFfc3RhICpscV9zdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2OwpAQCAtMzI3NCw4ICszMjcyLDcgQEAKIAkJCQkiQml0IFJhdGU9ICVkIE1iL3NcbiIsCiAJCQkJaXdsX3JhdGVzW2xxX3N0YS0+bGFzdF90eHJhdGVfaWR4XS5pZWVlID4+IDEpOwogCi0JcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWZmLCBkZXNjKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZmYsIGRlc2MpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByc19zdGFfZGJnZnNfcmF0ZV9zY2FsZV9kYXRhX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmgKaW5kZXggMTg0ODI4Yy4uYmRhZTgyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtNDEsMjAgKzQxLDYgQEAKIAl1OCBuZXh0X3JzX3RnZzsgIC8qIG5leHQgcmF0ZSB1c2VkIGluIFRHRyBycyBhbGdvICovCiB9OwogCi1zdHJ1Y3QgaXdsMzk0NV9yYXRlX2luZm8gewotCXU4IHBsY3A7CQkvKiB1Q29kZSBBUEk6ICBJV0xfUkFURV82TV9QTENQLCBldGMuICovCi0JdTggaWVlZTsJCS8qIE1BQyBoZWFkZXI6ICBJV0xfUkFURV82TV9JRUVFLCBldGMuICovCi0JdTggcHJldl9pZWVlOwkJLyogcHJldmlvdXMgcmF0ZSBpbiBJRUVFIHNwZWVkcyAqLwotCXU4IG5leHRfaWVlZTsJCS8qIG5leHQgcmF0ZSBpbiBJRUVFIHNwZWVkcyAqLwotCXU4IHByZXZfcnM7CQkvKiBwcmV2aW91cyByYXRlIHVzZWQgaW4gcnMgYWxnbyAqLwotCXU4IG5leHRfcnM7CQkvKiBuZXh0IHJhdGUgdXNlZCBpbiBycyBhbGdvICovCi0JdTggcHJldl9yc190Z2c7CQkvKiBwcmV2aW91cyByYXRlIHVzZWQgaW4gVEdHIHJzIGFsZ28gKi8KLQl1OCBuZXh0X3JzX3RnZzsJCS8qIG5leHQgcmF0ZSB1c2VkIGluIFRHRyBycyBhbGdvICovCi0JdTggdGFibGVfcnNfaW5kZXg7CS8qIGluZGV4IGluIHJhdGUgc2NhbGUgdGFibGUgY21kICovCi0JdTggcHJldl90YWJsZV9yczsJLyogcHJldiBpbiByYXRlIHRhYmxlIGNtZCAqLwotfTsKLQotCiAvKgogICogVGhlc2Ugc2VydmUgYXMgaW5kZXhlcyBpbnRvCiAgKiBzdHJ1Y3QgaXdsX3JhdGVfaW5mbyBpd2xfcmF0ZXNbSVdMX1JBVEVfQ09VTlRdOwpAQCAtNzUsNyArNjEsNiBAQAogCUlXTF9SQVRFXzYwTV9JTkRFWCwKIAlJV0xfUkFURV9DT1VOVCwgLypGSVhNRTpSUzpjaGFuZ2UgdG8gSVdMX1JBVEVfSU5ERVhfQ09VTlQsKi8KIAlJV0xfUkFURV9DT1VOVF9MRUdBQ1kgPSBJV0xfUkFURV9DT1VOVCAtIDEsCS8qIEV4Y2x1ZGluZyA2ME0gKi8KLQlJV0xfUkFURV9DT1VOVF8zOTQ1ID0gSVdMX1JBVEVfQ09VTlQgLSAxLAogCUlXTF9SQVRFX0lOVk1fSU5ERVggPSBJV0xfUkFURV9DT1VOVCwKIAlJV0xfUkFURV9JTlZBTElEID0gSVdMX1JBVEVfQ09VTlQsCiB9OwpAQCAtOTgsNyArODMsNiBAQAogCiBlbnVtIHsKIAlJV0xfRklSU1RfT0ZETV9SQVRFID0gSVdMX1JBVEVfNk1fSU5ERVgsCi0JSVdMMzlfTEFTVF9PRkRNX1JBVEUgPSBJV0xfUkFURV81NE1fSU5ERVgsCiAJSVdMX0xBU1RfT0ZETV9SQVRFID0gSVdMX1JBVEVfNjBNX0lOREVYLAogCUlXTF9GSVJTVF9DQ0tfUkFURSA9IElXTF9SQVRFXzFNX0lOREVYLAogCUlXTF9MQVNUX0NDS19SQVRFID0gSVdMX1JBVEVfMTFNX0lOREVYLApAQCAtMjEzLDcgKzE5Nyw2IEBACiAJIElXTF9DQ0tfQkFTSUNfUkFURVNfTUFTSykKIAogI2RlZmluZSBJV0xfUkFURVNfTUFTSyAoKDEgPDwgSVdMX1JBVEVfQ09VTlQpIC0gMSkKLSNkZWZpbmUgSVdMX1JBVEVTX01BU0tfMzk0NSAoKDEgPDwgSVdMX1JBVEVfQ09VTlRfMzk0NSkgLSAxKQogCiAjZGVmaW5lIElXTF9JTlZBTElEX1ZBTFVFICAgIC0xCiAKQEAgLTQ1MywxOSArNDM2LDkgQEAKIH0KIAogCi0vKioKLSAqIGl3bDM5NDVfcmF0ZV9zY2FsZV9pbml0IC0gSW5pdGlhbGl6ZSB0aGUgcmF0ZSBzY2FsZSB0YWJsZSBiYXNlZCBvbiBhc3NvYyBpbmZvCi0gKgotICogVGhlIHNwZWNpZmljIHRocm91Z2hwdXQgdGFibGUgdXNlZCBpcyBiYXNlZCBvbiB0aGUgdHlwZSBvZiBuZXR3b3JrCi0gKiB0aGUgYXNzb2NpYXRlZCB3aXRoLCBpbmNsdWRpbmcgQSwgQiwgRywgYW5kIEcgdy8gVEdHIHByb3RlY3Rpb24KLSAqLwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9yYXRlX3NjYWxlX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHMzMiBzdGFfaWQpOwotCiAvKiBJbml0aWFsaXplIHN0YXRpb24ncyByYXRlIHNjYWxpbmcgaW5mb3JtYXRpb24gYWZ0ZXIgYWRkaW5nIHN0YXRpb24gKi8KIGV4dGVybiB2b2lkIGl3bF9yc19yYXRlX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1OCBzdGFfaWQpOwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9yc19yYXRlX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1OCBzdGFfaWQpOwogCiAvKioKICAqIGl3bF9yYXRlX2NvbnRyb2xfcmVnaXN0ZXIgLSBSZWdpc3RlciB0aGUgcmF0ZSBjb250cm9sIGFsZ29yaXRobSBjYWxsYmFja3MKQEAgLTQ3OCw3ICs0NTEsNiBAQAogICoKICAqLwogZXh0ZXJuIGludCBpd2xhZ25fcmF0ZV9jb250cm9sX3JlZ2lzdGVyKHZvaWQpOwotZXh0ZXJuIGludCBpd2wzOTQ1X3JhdGVfY29udHJvbF9yZWdpc3Rlcih2b2lkKTsKIAogLyoqCiAgKiBpd2xfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIgLSBVbnJlZ2lzdGVyIHRoZSByYXRlIGNvbnRyb2wgY2FsbGJhY2tzCkBAIC00ODcsNiArNDU5LDUgQEAKICAqIHRoZSBkcml2ZXIgaXMgdW5sb2FkZWQuCiAgKi8KIGV4dGVybiB2b2lkIGl3bGFnbl9yYXRlX2NvbnRyb2xfdW5yZWdpc3Rlcih2b2lkKTsKLWV4dGVybiB2b2lkIGl3bDM5NDVfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIodm9pZCk7CiAKICNlbmRpZiAvKiBfX2l3bF9hZ25fX3JzX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1yeG9uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnhvbi5jCmluZGV4IGZiYmRlMDcxLi4wMjM4NzQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnhvbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1yeG9uLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIml3bC1zdGEuaCIKICNpbmNsdWRlICJpd2wtY29yZS5oIgogI2luY2x1ZGUgIml3bC1hZ24tY2FsaWIuaCIKKyNpbmNsdWRlICJpd2wtaGVscGVycy5oIgogCiBzdGF0aWMgaW50IGl3bGFnbl9kaXNhYmxlX2JzcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICAgICBzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4LApAQCAtNTcsOCArNTgsOSBAQAogCXU4IG9sZF9kZXZfdHlwZSA9IHNlbmQtPmRldl90eXBlOwogCWludCByZXQ7CiAKLQlpd2xhZ25faW5pdF9ub3RpZmljYXRpb25fd2FpdChwcml2LCAmZGlzYWJsZV93YWl0LCBOVUxMLAotCQkJCSAgICAgIFJFUExZX1dJUEFOX0RFQUNUSVZBVElPTl9DT01QTEVURSk7CisJaXdsYWduX2luaXRfbm90aWZpY2F0aW9uX3dhaXQocHJpdiwgJmRpc2FibGVfd2FpdCwKKwkJCQkgICAgICBSRVBMWV9XSVBBTl9ERUFDVElWQVRJT05fQ09NUExFVEUsCisJCQkJICAgICAgTlVMTCwgTlVMTCk7CiAKIAlzZW5kLT5maWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0FTU09DX01TSzsKIAlzZW5kLT5kZXZfdHlwZSA9IFJYT05fREVWX1RZUEVfUDJQOwpAQCAtNzEsMTMgKzczLDkgQEAKIAkJSVdMX0VSUihwcml2LCAiRXJyb3IgZGlzYWJsaW5nIFBBTiAoJWQpXG4iLCByZXQpOwogCQlpd2xhZ25fcmVtb3ZlX25vdGlmaWNhdGlvbihwcml2LCAmZGlzYWJsZV93YWl0KTsKIAl9IGVsc2UgewotCQlzaWduZWQgbG9uZyB3YWl0X3JlczsKLQotCQl3YWl0X3JlcyA9IGl3bGFnbl93YWl0X25vdGlmaWNhdGlvbihwcml2LCAmZGlzYWJsZV93YWl0LCBIWik7Ci0JCWlmICh3YWl0X3JlcyA9PSAwKSB7CisJCXJldCA9IGl3bGFnbl93YWl0X25vdGlmaWNhdGlvbihwcml2LCAmZGlzYWJsZV93YWl0LCBIWik7CisJCWlmIChyZXQpCiAJCQlJV0xfRVJSKHByaXYsICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgUEFOIGRpc2FibGVcbiIpOwotCQkJcmV0ID0gLUVJTzsKLQkJfQogCX0KIAogCXJldHVybiByZXQ7CkBAIC0xMjMsNiArMTIxLDE1MSBAQAogCXJldHVybiBpd2xhZ25fc2VuZF9iZWFjb25fY21kKHByaXYpOwogfQogCitzdGF0aWMgaW50IGl3bGFnbl9zZW5kX3J4b25fYXNzb2Moc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgaXdsX3J4b25fYXNzb2NfY21kIHJ4b25fYXNzb2M7CisJY29uc3Qgc3RydWN0IGl3bF9yeG9uX2NtZCAqcnhvbjEgPSAmY3R4LT5zdGFnaW5nOworCWNvbnN0IHN0cnVjdCBpd2xfcnhvbl9jbWQgKnJ4b24yID0gJmN0eC0+YWN0aXZlOworCisJaWYgKChyeG9uMS0+ZmxhZ3MgPT0gcnhvbjItPmZsYWdzKSAmJgorCSAgICAocnhvbjEtPmZpbHRlcl9mbGFncyA9PSByeG9uMi0+ZmlsdGVyX2ZsYWdzKSAmJgorCSAgICAocnhvbjEtPmNja19iYXNpY19yYXRlcyA9PSByeG9uMi0+Y2NrX2Jhc2ljX3JhdGVzKSAmJgorCSAgICAocnhvbjEtPm9mZG1faHRfc2luZ2xlX3N0cmVhbV9iYXNpY19yYXRlcyA9PQorCSAgICAgcnhvbjItPm9mZG1faHRfc2luZ2xlX3N0cmVhbV9iYXNpY19yYXRlcykgJiYKKwkgICAgKHJ4b24xLT5vZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzID09CisJICAgICByeG9uMi0+b2ZkbV9odF9kdWFsX3N0cmVhbV9iYXNpY19yYXRlcykgJiYKKwkgICAgKHJ4b24xLT5vZmRtX2h0X3RyaXBsZV9zdHJlYW1fYmFzaWNfcmF0ZXMgPT0KKwkgICAgIHJ4b24yLT5vZmRtX2h0X3RyaXBsZV9zdHJlYW1fYmFzaWNfcmF0ZXMpICYmCisJICAgIChyeG9uMS0+YWNxdWlzaXRpb25fZGF0YSA9PSByeG9uMi0+YWNxdWlzaXRpb25fZGF0YSkgJiYKKwkgICAgKHJ4b24xLT5yeF9jaGFpbiA9PSByeG9uMi0+cnhfY2hhaW4pICYmCisJICAgIChyeG9uMS0+b2ZkbV9iYXNpY19yYXRlcyA9PSByeG9uMi0+b2ZkbV9iYXNpY19yYXRlcykpIHsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlVzaW5nIGN1cnJlbnQgUlhPTl9BU1NPQy4gIE5vdCByZXNlbmRpbmcuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcnhvbl9hc3NvYy5mbGFncyA9IGN0eC0+c3RhZ2luZy5mbGFnczsKKwlyeG9uX2Fzc29jLmZpbHRlcl9mbGFncyA9IGN0eC0+c3RhZ2luZy5maWx0ZXJfZmxhZ3M7CisJcnhvbl9hc3NvYy5vZmRtX2Jhc2ljX3JhdGVzID0gY3R4LT5zdGFnaW5nLm9mZG1fYmFzaWNfcmF0ZXM7CisJcnhvbl9hc3NvYy5jY2tfYmFzaWNfcmF0ZXMgPSBjdHgtPnN0YWdpbmcuY2NrX2Jhc2ljX3JhdGVzOworCXJ4b25fYXNzb2MucmVzZXJ2ZWQxID0gMDsKKwlyeG9uX2Fzc29jLnJlc2VydmVkMiA9IDA7CisJcnhvbl9hc3NvYy5yZXNlcnZlZDMgPSAwOworCXJ4b25fYXNzb2Mub2ZkbV9odF9zaW5nbGVfc3RyZWFtX2Jhc2ljX3JhdGVzID0KKwkgICAgY3R4LT5zdGFnaW5nLm9mZG1faHRfc2luZ2xlX3N0cmVhbV9iYXNpY19yYXRlczsKKwlyeG9uX2Fzc29jLm9mZG1faHRfZHVhbF9zdHJlYW1fYmFzaWNfcmF0ZXMgPQorCSAgICBjdHgtPnN0YWdpbmcub2ZkbV9odF9kdWFsX3N0cmVhbV9iYXNpY19yYXRlczsKKwlyeG9uX2Fzc29jLnJ4X2NoYWluX3NlbGVjdF9mbGFncyA9IGN0eC0+c3RhZ2luZy5yeF9jaGFpbjsKKwlyeG9uX2Fzc29jLm9mZG1faHRfdHJpcGxlX3N0cmVhbV9iYXNpY19yYXRlcyA9CisJCSBjdHgtPnN0YWdpbmcub2ZkbV9odF90cmlwbGVfc3RyZWFtX2Jhc2ljX3JhdGVzOworCXJ4b25fYXNzb2MuYWNxdWlzaXRpb25fZGF0YSA9IGN0eC0+c3RhZ2luZy5hY3F1aXNpdGlvbl9kYXRhOworCisJcmV0ID0gaXdsX3NlbmRfY21kX3BkdV9hc3luYyhwcml2LCBjdHgtPnJ4b25fYXNzb2NfY21kLAorCQkJCSAgICAgc2l6ZW9mKHJ4b25fYXNzb2MpLCAmcnhvbl9hc3NvYywgTlVMTCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXdsYWduX3J4b25fZGlzY29ubihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgICAgc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBpd2xfcnhvbl9jbWQgKmFjdGl2ZSA9ICh2b2lkICopJmN0eC0+YWN0aXZlOworCisJaWYgKGN0eC0+Y3R4aWQgPT0gSVdMX1JYT05fQ1RYX0JTUykKKwkJcmV0ID0gaXdsYWduX2Rpc2FibGVfYnNzKHByaXYsIGN0eCwgJmN0eC0+c3RhZ2luZyk7CisJZWxzZQorCQlyZXQgPSBpd2xhZ25fZGlzYWJsZV9wYW4ocHJpdiwgY3R4LCAmY3R4LT5zdGFnaW5nKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyoKKwkgKiBVbi1hc3NvYyBSWE9OIGNsZWFycyB0aGUgc3RhdGlvbiB0YWJsZSBhbmQgV0VQCisJICoga2V5cywgc28gd2UgaGF2ZSB0byByZXN0b3JlIHRob3NlIGFmdGVyd2FyZHMuCisJICovCisJaXdsX2NsZWFyX3Vjb2RlX3N0YXRpb25zKHByaXYsIGN0eCk7CisJaXdsX3Jlc3RvcmVfc3RhdGlvbnMocHJpdiwgY3R4KTsKKwlyZXQgPSBpd2xfcmVzdG9yZV9kZWZhdWx0X3dlcF9rZXlzKHByaXYsIGN0eCk7CisJaWYgKHJldCkgeworCQlJV0xfRVJSKHByaXYsICJGYWlsZWQgdG8gcmVzdG9yZSBXRVAga2V5cyAoJWQpXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCW1lbWNweShhY3RpdmUsICZjdHgtPnN0YWdpbmcsIHNpemVvZigqYWN0aXZlKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXdsYWduX3J4b25fY29ubmVjdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgICAgc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBpd2xfcnhvbl9jbWQgKmFjdGl2ZSA9ICh2b2lkICopJmN0eC0+YWN0aXZlOworCisJLyogUlhPTiB0aW1pbmcgbXVzdCBiZSBiZWZvcmUgYXNzb2NpYXRlZCBSWE9OICovCisJcmV0ID0gaXdsX3NlbmRfcnhvbl90aW1pbmcocHJpdiwgY3R4KTsKKwlpZiAocmV0KSB7CisJCUlXTF9FUlIocHJpdiwgIkZhaWxlZCB0byBzZW5kIHRpbWluZyAoJWQpIVxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJLyogUW9TIGluZm8gbWF5IGJlIGNsZWFyZWQgYnkgcHJldmlvdXMgdW4tYXNzb2MgUlhPTiAqLworCWl3bGFnbl91cGRhdGVfcW9zKHByaXYsIGN0eCk7CisKKwkvKgorCSAqIFdlJ2xsIHJ1biBpbnRvIHRoaXMgY29kZSBwYXRoIHdoZW4gYmVhY29uaW5nIGlzCisJICogZW5hYmxlZCwgYnV0IHRoZW4gd2UgYWxzbyBuZWVkIHRvIHNlbmQgdGhlIGJlYWNvbgorCSAqIHRvIHRoZSBkZXZpY2UuCisJICovCisJaWYgKGN0eC0+dmlmICYmIChjdHgtPnZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkpIHsKKwkJcmV0ID0gaXdsYWduX3VwZGF0ZV9iZWFjb24ocHJpdiwgY3R4LT52aWYpOworCQlpZiAocmV0KSB7CisJCQlJV0xfRVJSKHByaXYsCisJCQkJIkVycm9yIHNlbmRpbmcgcmVxdWlyZWQgYmVhY29uICglZCkhXG4iLAorCQkJCXJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcHJpdi0+c3RhcnRfY2FsaWIgPSAwOworCS8qCisJICogQXBwbHkgdGhlIG5ldyBjb25maWd1cmF0aW9uLgorCSAqCisJICogQXNzb2NpYXRlZCBSWE9OIGRvZXNuJ3QgY2xlYXIgdGhlIHN0YXRpb24gdGFibGUgaW4gdUNvZGUsCisJICogc28gd2UgZG9uJ3QgbmVlZCB0byByZXN0b3JlIHN0YXRpb25zIGV0Yy4gYWZ0ZXIgdGhpcy4KKwkgKi8KKwlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIGN0eC0+cnhvbl9jbWQsCisJCSAgICAgIHNpemVvZihzdHJ1Y3QgaXdsX3J4b25fY21kKSwgJmN0eC0+c3RhZ2luZyk7CisJaWYgKHJldCkgeworCQlJV0xfRVJSKHByaXYsICJFcnJvciBzZXR0aW5nIG5ldyBSWE9OICglZClcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCW1lbWNweShhY3RpdmUsICZjdHgtPnN0YWdpbmcsIHNpemVvZigqYWN0aXZlKSk7CisKKwlpd2xfcmVwcm9ncmFtX2FwX3N0YShwcml2LCBjdHgpOworCisJLyogSUJTUyBiZWFjb24gbmVlZHMgdG8gYmUgc2VudCBhZnRlciBzZXR0aW5nIGFzc29jICovCisJaWYgKGN0eC0+dmlmICYmIChjdHgtPnZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykpCisJCWlmIChpd2xhZ25fdXBkYXRlX2JlYWNvbihwcml2LCBjdHgtPnZpZikpCisJCQlJV0xfRVJSKHByaXYsICJFcnJvciBzZW5kaW5nIElCU1MgYmVhY29uXG4iKTsKKwlpd2xfaW5pdF9zZW5zaXRpdml0eShwcml2KTsKKworCS8qCisJICogSWYgd2UgaXNzdWUgYSBuZXcgUlhPTiBjb21tYW5kIHdoaWNoIHJlcXVpcmVkIGEgdHVuZSB0aGVuCisJICogd2UgbXVzdCBzZW5kIGEgbmV3IFRYUE9XRVIgY29tbWFuZCBvciB3ZSB3b24ndCBiZSBhYmxlIHRvCisJICogVHggYW55IGZyYW1lcy4KKwkgKgorCSAqIEl0J3MgZXhwZWN0ZWQgd2Ugc2V0IHBvd2VyIGhlcmUgaWYgY2hhbm5lbCBpcyBjaGFuZ2luZy4KKwkgKi8KKwlyZXQgPSBpd2xfc2V0X3R4X3Bvd2VyKHByaXYsIHByaXYtPnR4X3Bvd2VyX25leHQsIHRydWUpOworCWlmIChyZXQpIHsKKwkJSVdMX0VSUihwcml2LCAiRXJyb3Igc2VuZGluZyBUWCBwb3dlciAoJWQpXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKwogLyoqCiAgKiBpd2xhZ25fY29tbWl0X3J4b24gLSBjb21taXQgc3RhZ2luZ19yeG9uIHRvIGhhcmR3YXJlCiAgKgpAQCAtMTMwLDYgKzI3MywxNiBAQAogICogdGhlIGFjdGl2ZV9yeG9uIHN0cnVjdHVyZSBpcyB1cGRhdGVkIHdpdGggdGhlIG5ldyBkYXRhLiAgVGhpcwogICogZnVuY3Rpb24gY29ycmVjdGx5IHRyYW5zaXRpb25zIG91dCBvZiB0aGUgUlhPTl9BU1NPQ19NU0sgc3RhdGUgaWYKICAqIGEgSFcgdHVuZSBpcyByZXF1aXJlZCBiYXNlZCBvbiB0aGUgUlhPTiBzdHJ1Y3R1cmUgY2hhbmdlcy4KKyAqCisgKiBUaGUgY29ubmVjdC9kaXNjb25uZWN0IGZsb3cgc2hvdWxkIGJlIGFzIHRoZSBmb2xsb3dpbmc6CisgKgorICogMS4gbWFrZSBzdXJlIHNlbmQgUlhPTiBjb21tYW5kIHdpdGggYXNzb2NpYXRpb24gYml0IHVuc2V0IGlmIG5vdCBjb25uZWN0CisgKgl0aGlzIHNob3VsZCBpbmNsdWRlIHRoZSBjaGFubmVsIGFuZCB0aGUgYmFuZCBmb3IgdGhlIGNhbmRpZGF0ZQorICoJdG8gYmUgY29ubmVjdGVkIHRvCisgKiAyLiBBZGQgU3RhdGlvbiBiZWZvcmUgUlhPTiBhc3NvY2lhdGlvbiB3aXRoIHRoZSBBUAorICogMy4gUlhPTl90aW1pbmcgaGFzIHRvIHNlbmQgYmVmb3JlIFJYT04gZm9yIGNvbm5lY3Rpb24KKyAqIDQuIGZ1bGwgUlhPTiBjb21tYW5kIC0gYXNzb2NpYXRlZCBiaXQgc2V0CisgKiA1LiB1c2UgUlhPTl9BU1NPQyBjb21tYW5kIHRvIHVwZGF0ZSBhbnkgZmxhZ3MgY2hhbmdlcwogICovCiBpbnQgaXdsYWduX2NvbW1pdF9yeG9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eCkKIHsKQEAgLTE3OSw2ICszMzIsNyBAQAogCWVsc2UKIAkJY3R4LT5zdGFnaW5nLmZsYWdzICY9IH5SWE9OX0ZMR19TSE9SVF9TTE9UX01TSzsKIAorCWl3bF9wcmludF9yeF9jb25maWdfY21kKHByaXYsIGN0eCk7CiAJcmV0ID0gaXdsX2NoZWNrX3J4b25fY21kKHByaXYsIGN0eCk7CiAJaWYgKHJldCkgewogCQlJV0xfRVJSKHByaXYsICJJbnZhbGlkIFJYT04gY29uZmlndXJhdGlvbi4gTm90IGNvbW1pdHRpbmcuXG4iKTsKQEAgLTIwMiwxNCArMzU2LDEzIEBACiAJICogYW5kIG90aGVyIGZsYWdzIGZvciB0aGUgY3VycmVudCByYWRpbyBjb25maWd1cmF0aW9uLgogCSAqLwogCWlmICghaXdsX2Z1bGxfcnhvbl9yZXF1aXJlZChwcml2LCBjdHgpKSB7Ci0JCXJldCA9IGl3bF9zZW5kX3J4b25fYXNzb2MocHJpdiwgY3R4KTsKKwkJcmV0ID0gaXdsYWduX3NlbmRfcnhvbl9hc3NvYyhwcml2LCBjdHgpOwogCQlpZiAocmV0KSB7CiAJCQlJV0xfRVJSKHByaXYsICJFcnJvciBzZXR0aW5nIFJYT05fQVNTT0MgKCVkKVxuIiwgcmV0KTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAogCQltZW1jcHkoYWN0aXZlLCAmY3R4LT5zdGFnaW5nLCBzaXplb2YoKmFjdGl2ZSkpOwotCQlpd2xfcHJpbnRfcnhfY29uZmlnX2NtZChwcml2LCBjdHgpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTIxOSw3ICszNzIsNyBAQAogCQkJcmV0dXJuIHJldDsKIAl9CiAKLQlpd2xfc2V0X3J4b25faHdjcnlwdG8ocHJpdiwgY3R4LCAhcHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5zd19jcnlwdG8pOworCWl3bF9zZXRfcnhvbl9od2NyeXB0byhwcml2LCBjdHgsICFpd2xhZ25fbW9kX3BhcmFtcy5zd19jcnlwdG8pOwogCiAJSVdMX0RFQlVHX0lORk8ocHJpdiwKIAkJICAgICAgICJHb2luZyB0byBjb21taXQgUlhPTlxuIgpAQCAtMjM3LDkyICszOTAsMTMgQEAKIAkgKiBzZXQgdXAgZmlsdGVycyBpbiB0aGUgZGV2aWNlLgogCSAqLwogCWlmICgob2xkX2Fzc29jICYmIG5ld19hc3NvYykgfHwgIW5ld19hc3NvYykgewotCQlpZiAoY3R4LT5jdHhpZCA9PSBJV0xfUlhPTl9DVFhfQlNTKQotCQkJcmV0ID0gaXdsYWduX2Rpc2FibGVfYnNzKHByaXYsIGN0eCwgJmN0eC0+c3RhZ2luZyk7Ci0JCWVsc2UKLQkJCXJldCA9IGl3bGFnbl9kaXNhYmxlX3Bhbihwcml2LCBjdHgsICZjdHgtPnN0YWdpbmcpOworCQlyZXQgPSBpd2xhZ25fcnhvbl9kaXNjb25uKHByaXYsIGN0eCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwotCi0JCW1lbWNweShhY3RpdmUsICZjdHgtPnN0YWdpbmcsIHNpemVvZigqYWN0aXZlKSk7Ci0KLQkJLyoKLQkJICogVW4tYXNzb2MgUlhPTiBjbGVhcnMgdGhlIHN0YXRpb24gdGFibGUgYW5kIFdFUAotCQkgKiBrZXlzLCBzbyB3ZSBoYXZlIHRvIHJlc3RvcmUgdGhvc2UgYWZ0ZXJ3YXJkcy4KLQkJICovCi0JCWl3bF9jbGVhcl91Y29kZV9zdGF0aW9ucyhwcml2LCBjdHgpOwotCQlpd2xfcmVzdG9yZV9zdGF0aW9ucyhwcml2LCBjdHgpOwotCQlyZXQgPSBpd2xfcmVzdG9yZV9kZWZhdWx0X3dlcF9rZXlzKHByaXYsIGN0eCk7Ci0JCWlmIChyZXQpIHsKLQkJCUlXTF9FUlIocHJpdiwgIkZhaWxlZCB0byByZXN0b3JlIFdFUCBrZXlzICglZClcbiIsIHJldCk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9CiAJfQogCi0JLyogUlhPTiB0aW1pbmcgbXVzdCBiZSBiZWZvcmUgYXNzb2NpYXRlZCBSWE9OICovCi0JcmV0ID0gaXdsX3NlbmRfcnhvbl90aW1pbmcocHJpdiwgY3R4KTsKLQlpZiAocmV0KSB7Ci0JCUlXTF9FUlIocHJpdiwgIkZhaWxlZCB0byBzZW5kIHRpbWluZyAoJWQpIVxuIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlpZiAobmV3X2Fzc29jKSB7Ci0JCS8qIFFvUyBpbmZvIG1heSBiZSBjbGVhcmVkIGJ5IHByZXZpb3VzIHVuLWFzc29jIFJYT04gKi8KLQkJaXdsYWduX3VwZGF0ZV9xb3MocHJpdiwgY3R4KTsKLQotCQkvKgotCQkgKiBXZSdsbCBydW4gaW50byB0aGlzIGNvZGUgcGF0aCB3aGVuIGJlYWNvbmluZyBpcwotCQkgKiBlbmFibGVkLCBidXQgdGhlbiB3ZSBhbHNvIG5lZWQgdG8gc2VuZCB0aGUgYmVhY29uCi0JCSAqIHRvIHRoZSBkZXZpY2UuCi0JCSAqLwotCQlpZiAoY3R4LT52aWYgJiYgKGN0eC0+dmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSkgewotCQkJcmV0ID0gaXdsYWduX3VwZGF0ZV9iZWFjb24ocHJpdiwgY3R4LT52aWYpOwotCQkJaWYgKHJldCkgewotCQkJCUlXTF9FUlIocHJpdiwKLQkJCQkJIkVycm9yIHNlbmRpbmcgcmVxdWlyZWQgYmVhY29uICglZCkhXG4iLAotCQkJCQlyZXQpOwotCQkJCXJldHVybiByZXQ7Ci0JCQl9Ci0JCX0KLQotCQlwcml2LT5zdGFydF9jYWxpYiA9IDA7Ci0JCS8qCi0JCSAqIEFwcGx5IHRoZSBuZXcgY29uZmlndXJhdGlvbi4KLQkJICoKLQkJICogQXNzb2NpYXRlZCBSWE9OIGRvZXNuJ3QgY2xlYXIgdGhlIHN0YXRpb24gdGFibGUgaW4gdUNvZGUsCi0JCSAqIHNvIHdlIGRvbid0IG5lZWQgdG8gcmVzdG9yZSBzdGF0aW9ucyBldGMuIGFmdGVyIHRoaXMuCi0JCSAqLwotCQlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIGN0eC0+cnhvbl9jbWQsCi0JCQkgICAgICBzaXplb2Yoc3RydWN0IGl3bF9yeG9uX2NtZCksICZjdHgtPnN0YWdpbmcpOwotCQlpZiAocmV0KSB7Ci0JCQlJV0xfRVJSKHByaXYsICJFcnJvciBzZXR0aW5nIG5ldyBSWE9OICglZClcbiIsIHJldCk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JCW1lbWNweShhY3RpdmUsICZjdHgtPnN0YWdpbmcsIHNpemVvZigqYWN0aXZlKSk7Ci0KLQkJaXdsX3JlcHJvZ3JhbV9hcF9zdGEocHJpdiwgY3R4KTsKLQotCQkvKiBJQlNTIGJlYWNvbiBuZWVkcyB0byBiZSBzZW50IGFmdGVyIHNldHRpbmcgYXNzb2MgKi8KLQkJaWYgKGN0eC0+dmlmICYmIChjdHgtPnZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykpCi0JCQlpZiAoaXdsYWduX3VwZGF0ZV9iZWFjb24ocHJpdiwgY3R4LT52aWYpKQotCQkJCUlXTF9FUlIocHJpdiwgIkVycm9yIHNlbmRpbmcgSUJTUyBiZWFjb25cbiIpOwotCX0KLQotCWl3bF9wcmludF9yeF9jb25maWdfY21kKHByaXYsIGN0eCk7Ci0KLQlpd2xfaW5pdF9zZW5zaXRpdml0eShwcml2KTsKLQotCS8qCi0JICogSWYgd2UgaXNzdWUgYSBuZXcgUlhPTiBjb21tYW5kIHdoaWNoIHJlcXVpcmVkIGEgdHVuZSB0aGVuIHdlIG11c3QKLQkgKiBzZW5kIGEgbmV3IFRYUE9XRVIgY29tbWFuZCBvciB3ZSB3b24ndCBiZSBhYmxlIHRvIFR4IGFueSBmcmFtZXMuCi0JICoKLQkgKiBJdCdzIGV4cGVjdGVkIHdlIHNldCBwb3dlciBoZXJlIGlmIGNoYW5uZWwgaXMgY2hhbmdpbmcuCi0JICovCi0JcmV0ID0gaXdsX3NldF90eF9wb3dlcihwcml2LCBwcml2LT50eF9wb3dlcl9uZXh0LCB0cnVlKTsKLQlpZiAocmV0KSB7Ci0JCUlXTF9FUlIocHJpdiwgIkVycm9yIHNlbmRpbmcgVFggcG93ZXIgKCVkKVxuIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9CisJaWYgKG5ld19hc3NvYykKKwkJcmV0dXJuIGl3bGFnbl9yeG9uX2Nvbm5lY3QocHJpdiwgY3R4KTsKIAogCXJldHVybiAwOwogfQpAQCAtNTk1LDYgKzY2OSwxOCBAQAogCQkJcHJpdi0+dGltZXN0YW1wID0gYnNzX2NvbmYtPnRpbWVzdGFtcDsKIAkJCWN0eC0+c3RhZ2luZy5maWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfQVNTT0NfTVNLOwogCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIElmIHdlIGRpc2Fzc29jaWF0ZSB3aGlsZSB0aGVyZSBhcmUgcGVuZGluZworCQkJICogZnJhbWVzLCBqdXN0IHdha2UgdXAgdGhlIHF1ZXVlcyBhbmQgbGV0IHRoZQorCQkJICogZnJhbWVzICJlc2NhcGUiIC4uLiBUaGlzIHNob3VsZG4ndCByZWFsbHkKKwkJCSAqIGJlIGhhcHBlbmluZyB0byBzdGFydCB3aXRoLCBidXQgd2Ugc2hvdWxkCisJCQkgKiBub3QgZ2V0IHN0dWNrIGluIHRoaXMgY2FzZSBlaXRoZXIgc2luY2UgaXQKKwkJCSAqIGNhbiBoYXBwZW4gaWYgdXNlcnNwYWNlIGdldHMgY29uZnVzZWQuCisJCQkgKi8KKwkJCWlmIChjdHgtPmxhc3RfdHhfcmVqZWN0ZWQpIHsKKwkJCQljdHgtPmxhc3RfdHhfcmVqZWN0ZWQgPSBmYWxzZTsKKwkJCQlpd2xfd2FrZV9hbnlfcXVldWUocHJpdiwgY3R4KTsKKwkJCX0KIAkJCWN0eC0+c3RhZ2luZy5maWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0FTU09DX01TSzsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1zdGEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1zdGEuYwppbmRleCAzNWYwODVhLi4wNzkyNzVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tc3RhLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXN0YS5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCkBAIC00NzQsNyArNDc0LDcgQEAKIAltZW1zZXQoJnByaXYtPnN0YXRpb25zW3N0YV9pZF0ua2V5aW5mbywgMCwKIAkJCQkJc2l6ZW9mKHN0cnVjdCBpd2xfaHdfa2V5KSk7CiAJbWVtc2V0KCZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXksIDAsCi0JCQkJCXNpemVvZihzdHJ1Y3QgaXdsNDk2NV9rZXlpbmZvKSk7CisJCQkJCXNpemVvZihzdHJ1Y3QgaXdsX2tleWluZm8pKTsKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X2ZsYWdzID0KIAkJCVNUQV9LRVlfRkxHX05PX0VOQyB8IFNUQV9LRVlfRkxHX0lOVkFMSUQ7CiAJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LmtleV9vZmZzZXQgPSBXRVBfSU5WQUxJRF9PRkZTRVQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tdHQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi10dC5jCmluZGV4IGUzYTgyMTYuLjM0OGY3NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi10dC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi10dC5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tdHQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi10dC5oCmluZGV4IGQ1NTA2MDQuLmQxMThlZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi10dC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi10dC5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi10eC5jCmluZGV4IDA3MTJiNjcyLi4zNDJkZTc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tdHguYwpAQCAtMiw3ICsyLDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtOTgsOSArOTgsOSBAQAogLyoqCiAgKiBpd2xhZ25fdHhxX3VwZGF0ZV9ieXRlX2NudF90YmwgLSBTZXQgdXAgZW50cnkgaW4gVHggYnl0ZS1jb3VudCBhcnJheQogICovCi12b2lkIGl3bGFnbl90eHFfdXBkYXRlX2J5dGVfY250X3RibChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJCSAgICBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEsCi0JCQkJCSAgICB1MTYgYnl0ZV9jbnQpCitzdGF0aWMgdm9pZCBpd2xhZ25fdHhxX3VwZGF0ZV9ieXRlX2NudF90Ymwoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCQkgICBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEsCisJCQkJCSAgIHUxNiBieXRlX2NudCkKIHsKIAlzdHJ1Y3QgaXdsYWduX3NjZF9iY190YmwgKnNjZF9iY190YmwgPSBwcml2LT5zY2RfYmNfdGJscy5hZGRyOwogCWludCB3cml0ZV9wdHIgPSB0eHEtPnEud3JpdGVfcHRyOwpAQCAtMTEyLDIxICsxMTIsMTkgQEAKIAogCVdBUk5fT04obGVuID4gMHhGRkYgfHwgd3JpdGVfcHRyID49IFRGRF9RVUVVRV9TSVpFX01BWCk7CiAKLQlpZiAodHhxX2lkICE9IHByaXYtPmNtZF9xdWV1ZSkgewotCQlzdGFfaWQgPSB0eHEtPmNtZFt0eHEtPnEud3JpdGVfcHRyXS0+Y21kLnR4LnN0YV9pZDsKLQkJc2VjX2N0bCA9IHR4cS0+Y21kW3R4cS0+cS53cml0ZV9wdHJdLT5jbWQudHguc2VjX2N0bDsKKwlzdGFfaWQgPSB0eHEtPmNtZFt0eHEtPnEud3JpdGVfcHRyXS0+Y21kLnR4LnN0YV9pZDsKKwlzZWNfY3RsID0gdHhxLT5jbWRbdHhxLT5xLndyaXRlX3B0cl0tPmNtZC50eC5zZWNfY3RsOwogCi0JCXN3aXRjaCAoc2VjX2N0bCAmIFRYX0NNRF9TRUNfTVNLKSB7Ci0JCWNhc2UgVFhfQ01EX1NFQ19DQ006Ci0JCQlsZW4gKz0gQ0NNUF9NSUNfTEVOOwotCQkJYnJlYWs7Ci0JCWNhc2UgVFhfQ01EX1NFQ19US0lQOgotCQkJbGVuICs9IFRLSVBfSUNWX0xFTjsKLQkJCWJyZWFrOwotCQljYXNlIFRYX0NNRF9TRUNfV0VQOgotCQkJbGVuICs9IFdFUF9JVl9MRU4gKyBXRVBfSUNWX0xFTjsKLQkJCWJyZWFrOwotCQl9CisJc3dpdGNoIChzZWNfY3RsICYgVFhfQ01EX1NFQ19NU0spIHsKKwljYXNlIFRYX0NNRF9TRUNfQ0NNOgorCQlsZW4gKz0gQ0NNUF9NSUNfTEVOOworCQlicmVhazsKKwljYXNlIFRYX0NNRF9TRUNfVEtJUDoKKwkJbGVuICs9IFRLSVBfSUNWX0xFTjsKKwkJYnJlYWs7CisJY2FzZSBUWF9DTURfU0VDX1dFUDoKKwkJbGVuICs9IFdFUF9JVl9MRU4gKyBXRVBfSUNWX0xFTjsKKwkJYnJlYWs7CiAJfQogCiAJYmNfZW50ID0gY3B1X3RvX2xlMTYoKGxlbiAmIDB4RkZGKSB8IChzdGFfaWQgPDwgMTIpKTsKQEAgLTEzOCw4ICsxMzYsOCBAQAogCQkJdGZkX29mZnNldFtURkRfUVVFVUVfU0laRV9NQVggKyB3cml0ZV9wdHJdID0gYmNfZW50OwogfQogCi12b2lkIGl3bGFnbl90eHFfaW52YWxfYnl0ZV9jbnRfdGJsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkJICAgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKQorc3RhdGljIHZvaWQgaXdsYWduX3R4cV9pbnZhbF9ieXRlX2NudF90Ymwoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCQkgIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSkKIHsKIAlzdHJ1Y3QgaXdsYWduX3NjZF9iY190YmwgKnNjZF9iY190YmwgPSBwcml2LT5zY2RfYmNfdGJscy5hZGRyOwogCWludCB0eHFfaWQgPSB0eHEtPnEuaWQ7CkBAIC0yMjIsMTMgKzIyMCw4IEBACiAJCSAgICAgICBzY2RfcmV0cnkgPyAiQkEiIDogIkFDL0NNRCIsIHR4cV9pZCwgdHhfZmlmb19pZCk7CiB9CiAKLWludCBpd2xhZ25fdHhxX2FnZ19lbmFibGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgdHhxX2lkLAotCQkJICBpbnQgdHhfZmlmbywgaW50IHN0YV9pZCwgaW50IHRpZCwgdTE2IHNzbl9pZHgpCitzdGF0aWMgaW50IGl3bGFnbl90eHFfYWdnX2VuYWJsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCB0eHFfaWQsIGludCBzdGFfaWQsIGludCB0aWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1MTYgcmFfdGlkOwotCWludCByZXQ7Ci0KIAlpZiAoKElXTEFHTl9GSVJTVF9BTVBEVV9RVUVVRSA+IHR4cV9pZCkgfHwKIAkgICAgKElXTEFHTl9GSVJTVF9BTVBEVV9RVUVVRSArCiAJCXByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPm51bV9vZl9hbXBkdV9xdWV1ZXMgPD0gdHhxX2lkKSkgewpAQCAtMjQwLDEyICsyMzMsMzMgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmFfdGlkID0gQlVJTERfUkF4VElEKHN0YV9pZCwgdGlkKTsKLQogCS8qIE1vZGlmeSBkZXZpY2UncyBzdGF0aW9uIHRhYmxlIHRvIFR4IHRoaXMgVElEICovCi0JcmV0ID0gaXdsX3N0YV90eF9tb2RpZnlfZW5hYmxlX3RpZChwcml2LCBzdGFfaWQsIHRpZCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwlyZXR1cm4gaXdsX3N0YV90eF9tb2RpZnlfZW5hYmxlX3RpZChwcml2LCBzdGFfaWQsIHRpZCk7Cit9CisKK3ZvaWQgaXdsYWduX3R4cV9hZ2dfcXVldWVfc2V0dXAoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCQkJaW50IHRpZCwgaW50IGZyYW1lX2xpbWl0KQoreworCWludCBzdGFfaWQsIHR4X2ZpZm8sIHR4cV9pZCwgc3NuX2lkeDsKKwl1MTYgcmFfdGlkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGl3bF90aWRfZGF0YSAqdGlkX2RhdGE7CisKKwlzdGFfaWQgPSBpd2xfc3RhX2lkKHN0YSk7CisJaWYgKFdBUk5fT04oc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pKQorCQlyZXR1cm47CisJaWYgKFdBUk5fT04odGlkID49IE1BWF9USURfQ09VTlQpKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKKwl0aWRfZGF0YSA9ICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdOworCXNzbl9pZHggPSBTRVFfVE9fU04odGlkX2RhdGEtPnNlcV9udW1iZXIpOworCXR4cV9pZCA9IHRpZF9kYXRhLT5hZ2cudHhxX2lkOworCXR4X2ZpZm8gPSB0aWRfZGF0YS0+YWdnLnR4X2ZpZm87CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKKworCXJhX3RpZCA9IEJVSUxEX1JBeFRJRChzdGFfaWQsIHRpZCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCkBAIC0yNzEsMTAgKzI4NSwxMCBAQAogCWl3bF93cml0ZV90YXJnX21lbShwcml2LCBwcml2LT5zY2RfYmFzZV9hZGRyICsKIAkJCUlXTEFHTl9TQ0RfQ09OVEVYVF9RVUVVRV9PRkZTRVQodHhxX2lkKSArCiAJCQlzaXplb2YodTMyKSwKLQkJCSgoU0NEX1dJTl9TSVpFIDw8CisJCQkoKGZyYW1lX2xpbWl0IDw8CiAJCQlJV0xBR05fU0NEX1FVRVVFX0NUWF9SRUcyX1dJTl9TSVpFX1BPUykgJgogCQkJSVdMQUdOX1NDRF9RVUVVRV9DVFhfUkVHMl9XSU5fU0laRV9NU0spIHwKLQkJCSgoU0NEX0ZSQU1FX0xJTUlUIDw8CisJCQkoKGZyYW1lX2xpbWl0IDw8CiAJCQlJV0xBR05fU0NEX1FVRVVFX0NUWF9SRUcyX0ZSQU1FX0xJTUlUX1BPUykgJgogCQkJSVdMQUdOX1NDRF9RVUVVRV9DVFhfUkVHMl9GUkFNRV9MSU1JVF9NU0spKTsKIApAQCAtMjg0LDEyICsyOTgsMTAgQEAKIAlpd2xhZ25fdHhfcXVldWVfc2V0X3N0YXR1cyhwcml2LCAmcHJpdi0+dHhxW3R4cV9pZF0sIHR4X2ZpZm8sIDEpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIDA7CiB9CiAKLWludCBpd2xhZ25fdHhxX2FnZ19kaXNhYmxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTE2IHR4cV9pZCwKLQkJCSAgIHUxNiBzc25faWR4LCB1OCB0eF9maWZvKQorc3RhdGljIGludCBpd2xhZ25fdHhxX2FnZ19kaXNhYmxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTE2IHR4cV9pZCwKKwkJCQkgIHUxNiBzc25faWR4LCB1OCB0eF9maWZvKQogewogCWlmICgoSVdMQUdOX0ZJUlNUX0FNUERVX1FVRVVFID4gdHhxX2lkKSB8fAogCSAgICAoSVdMQUdOX0ZJUlNUX0FNUERVX1FVRVVFICsKQEAgLTUyNSw3ICs1MzcsNyBAQAogCXN0cnVjdCBpd2xfdHhfY21kICp0eF9jbWQ7CiAJc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eCA9ICZwcml2LT5jb250ZXh0c1tJV0xfUlhPTl9DVFhfQlNTXTsKIAlpbnQgdHhxX2lkOwotCWRtYV9hZGRyX3QgcGh5c19hZGRyOworCWRtYV9hZGRyX3QgcGh5c19hZGRyID0gMDsKIAlkbWFfYWRkcl90IHR4Y21kX3BoeXM7CiAJZG1hX2FkZHJfdCBzY3JhdGNoX3BoeXM7CiAJdTE2IGxlbiwgZmlyc3RsZW4sIHNlY29uZGxlbjsKQEAgLTU1Miw3ICs1NjQsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJaWYgKGl3bF9pc19yZmtpbGwocHJpdikpIHsKIAkJSVdMX0RFQlVHX0RST1AocHJpdiwgIkRyb3BwaW5nIC0gUkYgS0lMTFxuIik7Ci0JCWdvdG8gZHJvcF91bmxvY2s7CisJCWdvdG8gZHJvcF91bmxvY2tfcHJpdjsKIAl9CiAKIAlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKQEAgLTU3Nyw3ICs1ODksNyBAQAogCQlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKIAkJCUlXTF9ERUJVR19EUk9QKHByaXYsICJEcm9wcGluZyAtIElOVkFMSUQgU1RBVElPTjogJXBNXG4iLAogCQkJCSAgICAgICBoZHItPmFkZHIxKTsKLQkJCWdvdG8gZHJvcF91bmxvY2s7CisJCQlnb3RvIGRyb3BfdW5sb2NrX3ByaXY7CiAJCX0KIAl9CiAKQEAgLTYyMSwxMCArNjMzLDEwIEBACiAJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpIHsKIAkJcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKIAkJdGlkID0gcWNbMF0gJiBJRUVFODAyMTFfUU9TX0NUTF9USURfTUFTSzsKLQkJaWYgKFdBUk5fT05fT05DRSh0aWQgPj0gTUFYX1RJRF9DT1VOVCkpIHsKLQkJCXNwaW5fdW5sb2NrKCZwcml2LT5zdGFfbG9jayk7Ci0JCQlnb3RvIGRyb3BfdW5sb2NrOwotCQl9CisKKwkJaWYgKFdBUk5fT05fT05DRSh0aWQgPj0gTUFYX1RJRF9DT1VOVCkpCisJCQlnb3RvIGRyb3BfdW5sb2NrX3N0YTsKKwogCQlzZXFfbnVtYmVyID0gcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5zZXFfbnVtYmVyOwogCQlzZXFfbnVtYmVyICY9IElFRUU4MDIxMV9TQ1RMX1NFUTsKIAkJaGRyLT5zZXFfY3RybCA9IGhkci0+c2VxX2N0cmwgJgpAQCAtNjQyLDE4ICs2NTQsOCBAQAogCXR4cSA9ICZwcml2LT50eHFbdHhxX2lkXTsKIAlxID0gJnR4cS0+cTsKIAotCWlmICh1bmxpa2VseShpd2xfcXVldWVfc3BhY2UocSkgPCBxLT5oaWdoX21hcmspKSB7Ci0JCXNwaW5fdW5sb2NrKCZwcml2LT5zdGFfbG9jayk7Ci0JCWdvdG8gZHJvcF91bmxvY2s7Ci0JfQotCi0JaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpIHsKLQkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS50ZmRzX2luX3F1ZXVlKys7Ci0JCWlmICghaWVlZTgwMjExX2hhc19tb3JlZnJhZ3MoZmMpKQotCQkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5zZXFfbnVtYmVyID0gc2VxX251bWJlcjsKLQl9Ci0KLQlzcGluX3VubG9jaygmcHJpdi0+c3RhX2xvY2spOworCWlmICh1bmxpa2VseShpd2xfcXVldWVfc3BhY2UocSkgPCBxLT5oaWdoX21hcmspKQorCQlnb3RvIGRyb3BfdW5sb2NrX3N0YTsKIAogCS8qIFNldCB1cCBkcml2ZXIgZGF0YSBmb3IgdGhpcyBURkQgKi8KIAltZW1zZXQoJih0eHEtPnR4YltxLT53cml0ZV9wdHJdKSwgMCwgc2l6ZW9mKHN0cnVjdCBpd2xfdHhfaW5mbykpOwpAQCAtNzE3LDEyICs3MTksMTAgQEAKIAl0eGNtZF9waHlzID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwKIAkJCQkgICAgJm91dF9jbWQtPmhkciwgZmlyc3RsZW4sCiAJCQkJICAgIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7CisJaWYgKHVubGlrZWx5KHBjaV9kbWFfbWFwcGluZ19lcnJvcihwcml2LT5wY2lfZGV2LCB0eGNtZF9waHlzKSkpCisJCWdvdG8gZHJvcF91bmxvY2tfc3RhOwogCWRtYV91bm1hcF9hZGRyX3NldChvdXRfbWV0YSwgbWFwcGluZywgdHhjbWRfcGh5cyk7CiAJZG1hX3VubWFwX2xlbl9zZXQob3V0X21ldGEsIGxlbiwgZmlyc3RsZW4pOwotCS8qIEFkZCBidWZmZXIgY29udGFpbmluZyBUeCBjb21tYW5kIGFuZCBNQUMoISkgaGVhZGVyIHRvIFRGRCdzCi0JICogZmlyc3QgZW50cnkgKi8KLQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfYXR0YWNoX2J1Zl90b190ZmQocHJpdiwgdHhxLAotCQkJCQkJICAgdHhjbWRfcGh5cywgZmlyc3RsZW4sIDEsIDApOwogCiAJaWYgKCFpZWVlODAyMTFfaGFzX21vcmVmcmFncyhoZHItPmZyYW1lX2NvbnRyb2wpKSB7CiAJCXR4cS0+bmVlZF91cGRhdGUgPSAxOwpAQCAtNzM3LDEwICs3MzcsMzAgQEAKIAlpZiAoc2Vjb25kbGVuID4gMCkgewogCQlwaHlzX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wY2lfZGV2LCBza2ItPmRhdGEgKyBoZHJfbGVuLAogCQkJCQkgICBzZWNvbmRsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCQlpZiAodW5saWtlbHkocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHByaXYtPnBjaV9kZXYsIHBoeXNfYWRkcikpKSB7CisJCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsCisJCQkJCSBkbWFfdW5tYXBfYWRkcihvdXRfbWV0YSwgbWFwcGluZyksCisJCQkJCSBkbWFfdW5tYXBfbGVuKG91dF9tZXRhLCBsZW4pLAorCQkJCQkgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKwkJCWdvdG8gZHJvcF91bmxvY2tfc3RhOworCQl9CisJfQorCisJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpIHsKKwkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS50ZmRzX2luX3F1ZXVlKys7CisJCWlmICghaWVlZTgwMjExX2hhc19tb3JlZnJhZ3MoZmMpKQorCQkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5zZXFfbnVtYmVyID0gc2VxX251bWJlcjsKKwl9CisKKwlzcGluX3VubG9jaygmcHJpdi0+c3RhX2xvY2spOworCisJLyogQXR0YWNoIGJ1ZmZlcnMgdG8gVEZEICovCisJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX2F0dGFjaF9idWZfdG9fdGZkKHByaXYsIHR4cSwKKwkJCQkJCSAgIHR4Y21kX3BoeXMsIGZpcnN0bGVuLCAxLCAwKTsKKwlpZiAoc2Vjb25kbGVuID4gMCkKIAkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX2F0dGFjaF9idWZfdG9fdGZkKHByaXYsIHR4cSwKIAkJCQkJCQkgICBwaHlzX2FkZHIsIHNlY29uZGxlbiwKIAkJCQkJCQkgICAwLCAwKTsKLQl9CiAKIAlzY3JhdGNoX3BoeXMgPSB0eGNtZF9waHlzICsgc2l6ZW9mKHN0cnVjdCBpd2xfY21kX2hlYWRlcikgKwogCQkJCW9mZnNldG9mKHN0cnVjdCBpd2xfdHhfY21kLCBzY3JhdGNoKTsKQEAgLTc1OSw4ICs3NzksOCBAQAogCiAJLyogU2V0IHVwIGVudHJ5IGZvciB0aGlzIFRGRCBpbiBUeCBieXRlLWNvdW50IGFycmF5ICovCiAJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkKLQkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX3VwZGF0ZV9ieXRlX2NudF90YmwocHJpdiwgdHhxLAotCQkJCQkJICAgICBsZTE2X3RvX2NwdSh0eF9jbWQtPmxlbikpOworCQlpd2xhZ25fdHhxX3VwZGF0ZV9ieXRlX2NudF90YmwocHJpdiwgdHhxLAorCQkJCQkgICAgICAgbGUxNl90b19jcHUodHhfY21kLT5sZW4pKTsKIAogCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShwcml2LT5wY2lfZGV2LCB0eGNtZF9waHlzLAogCQkJCSAgICAgICBmaXJzdGxlbiwgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKQEAgLTgwNiw3ICs4MjYsOSBAQAogCiAJcmV0dXJuIDA7CiAKLWRyb3BfdW5sb2NrOgorZHJvcF91bmxvY2tfc3RhOgorCXNwaW5fdW5sb2NrKCZwcml2LT5zdGFfbG9jayk7Citkcm9wX3VubG9ja19wcml2OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gLTE7CiB9CkBAIC0xMDM5LDExICsxMDYxLDExIEBACiAJdGlkX2RhdGEgPSAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXTsKIAkqc3NuID0gU0VRX1RPX1NOKHRpZF9kYXRhLT5zZXFfbnVtYmVyKTsKIAl0aWRfZGF0YS0+YWdnLnR4cV9pZCA9IHR4cV9pZDsKKwl0aWRfZGF0YS0+YWdnLnR4X2ZpZm8gPSB0eF9maWZvOwogCWl3bF9zZXRfc3dxX2lkKCZwcml2LT50eHFbdHhxX2lkXSwgZ2V0X2FjX2Zyb21fdGlkKHRpZCksIHR4cV9pZCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIAotCXJldCA9IHByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9hZ2dfZW5hYmxlKHByaXYsIHR4cV9pZCwgdHhfZmlmbywKLQkJCQkJCSAgc3RhX2lkLCB0aWQsICpzc24pOworCXJldCA9IGl3bGFnbl90eHFfYWdnX2VuYWJsZShwcml2LCB0eHFfaWQsIHN0YV9pZCwgdGlkKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC0xMTMwLDggKzExNTIsNyBAQAogCSAqIHRvIGRlYWN0aXZhdGUgdGhlIHVDb2RlIHF1ZXVlLCBqdXN0IHJldHVybiAic3VjY2VzcyIgdG8gYWxsb3cKIAkgKiAgbWFjODAyMTEgdG8gY2xlYW4gdXAgaXQgb3duIGRhdGEuCiAJICovCi0JcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX2FnZ19kaXNhYmxlKHByaXYsIHR4cV9pZCwgc3NuLAotCQkJCQkJICAgdHhfZmlmb19pZCk7CisJaXdsYWduX3R4cV9hZ2dfZGlzYWJsZShwcml2LCB0eHFfaWQsIHNzbiwgdHhfZmlmb19pZCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZSh2aWYsIHN0YS0+YWRkciwgdGlkKTsKQEAgLTExNjAsOCArMTE4MSw3IEBACiAJCQl1MTYgc3NuID0gU0VRX1RPX1NOKHRpZF9kYXRhLT5zZXFfbnVtYmVyKTsKIAkJCWludCB0eF9maWZvID0gZ2V0X2ZpZm9fZnJvbV90aWQoY3R4LCB0aWQpOwogCQkJSVdMX0RFQlVHX0hUKHByaXYsICJIVyBxdWV1ZSBlbXB0eTogY29udGludWUgREVMQkEgZmxvd1xuIik7Ci0JCQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfYWdnX2Rpc2FibGUocHJpdiwgdHhxX2lkLAotCQkJCQkJCSAgICAgc3NuLCB0eF9maWZvKTsKKwkJCWl3bGFnbl90eHFfYWdnX2Rpc2FibGUocHJpdiwgdHhxX2lkLCBzc24sIHR4X2ZpZm8pOwogCQkJdGlkX2RhdGEtPmFnZy5zdGF0ZSA9IElXTF9BR0dfT0ZGOwogCQkJaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZShjdHgtPnZpZiwgYWRkciwgdGlkKTsKIAkJfQpAQCAtMTI0MSw4ICsxMjYxLDcgQEAKIAkJCQkgdHhxX2lkID49IElXTEFHTl9GSVJTVF9BTVBEVV9RVUVVRSk7CiAJCXR4X2luZm8tPnNrYiA9IE5VTEw7CiAKLQkJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9pbnZhbF9ieXRlX2NudF90YmwpCi0JCQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfaW52YWxfYnl0ZV9jbnRfdGJsKHByaXYsIHR4cSk7CisJCWl3bGFnbl90eHFfaW52YWxfYnl0ZV9jbnRfdGJsKHByaXYsIHR4cSk7CiAKIAkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX2ZyZWVfdGZkKHByaXYsIHR4cSk7CiAJfQpAQCAtMTI2MCwxMSArMTI3OSwxMSBAQAogCQkJCSBzdHJ1Y3QgaXdsX2NvbXByZXNzZWRfYmFfcmVzcCAqYmFfcmVzcCkKIAogewotCWludCBpLCBzaCwgYWNrOworCWludCBzaDsKIAl1MTYgc2VxX2N0bCA9IGxlMTZfdG9fY3B1KGJhX3Jlc3AtPnNlcV9jdGwpOwogCXUxNiBzY2RfZmxvdyA9IGxlMTZfdG9fY3B1KGJhX3Jlc3AtPnNjZF9mbG93KTsKLQlpbnQgc3VjY2Vzc2VzID0gMDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CisJdTY0IGJpdG1hcCwgc2VudF9iaXRtYXA7CiAKIAlpZiAodW5saWtlbHkoIWFnZy0+d2FpdF9mb3JfYmEpKSAgewogCQlpZiAodW5saWtlbHkoYmFfcmVzcC0+Yml0bWFwKSkKQEAgLTEyNzgsNzAgKzEyOTcsNDIgQEAKIAogCS8qIENhbGN1bGF0ZSBzaGlmdCB0byBhbGlnbiBibG9jay1hY2sgYml0cyB3aXRoIG91ciBUeCB3aW5kb3cgYml0cyAqLwogCXNoID0gYWdnLT5zdGFydF9pZHggLSBTRVFfVE9fSU5ERVgoc2VxX2N0bCA+PiA0KTsKLQlpZiAoc2ggPCAwKSAvKiB0Yncgc29tZXRoaW5nIGlzIHdyb25nIHdpdGggaW5kaWNlcyAqLworCWlmIChzaCA8IDApCiAJCXNoICs9IDB4MTAwOwogCi0JaWYgKGFnZy0+ZnJhbWVfY291bnQgPiAoNjQgLSBzaCkpIHsKLQkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJtb3JlIGZyYW1lcyB0aGFuIGJpdG1hcCBzaXplIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JaWYgKCFwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5ub19hZ2dfZnJhbWVjbnRfaW5mbyAmJiBiYV9yZXNwLT50eGVkKSB7CisJLyoKKwkgKiBDaGVjayBmb3Igc3VjY2VzcyBvciBmYWlsdXJlIGFjY29yZGluZyB0byB0aGUKKwkgKiB0cmFuc21pdHRlZCBiaXRtYXAgYW5kIGJsb2NrLWFjayBiaXRtYXAKKwkgKi8KKwliaXRtYXAgPSBsZTY0X3RvX2NwdShiYV9yZXNwLT5iaXRtYXApID4+IHNoOworCXNlbnRfYml0bWFwID0gYml0bWFwICYgYWdnLT5iaXRtYXA7CisKKwkvKiBTYW5pdHkgY2hlY2sgdmFsdWVzIHJlcG9ydGVkIGJ5IHVDb2RlICovCisJaWYgKGJhX3Jlc3AtPnR4ZWRfMl9kb25lID4gYmFfcmVzcC0+dHhlZCkgeworCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwKKwkJCSJib2d1cyBzZW50KCVkKSBhbmQgYWNrKCVkKSBjb3VudFxuIiwKKwkJCWJhX3Jlc3AtPnR4ZWQsIGJhX3Jlc3AtPnR4ZWRfMl9kb25lKTsKIAkJLyoKLQkJICogc2VudCBhbmQgYWNrIGluZm9ybWF0aW9uIHByb3ZpZGVkIGJ5IHVDb2RlCi0JCSAqIHVzZSBpdCBpbnN0ZWFkIG9mIGZpZ3VyZSBvdXQgb3Vyc2VsZgorCQkgKiBzZXQgdHhlZF8yX2RvbmUgPSB0eGVkLAorCQkgKiBzbyBpdCB3b24ndCBpbXBhY3QgcmF0ZSBzY2FsZQogCQkgKi8KLQkJaWYgKGJhX3Jlc3AtPnR4ZWRfMl9kb25lID4gYmFfcmVzcC0+dHhlZCkgewotCQkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsCi0JCQkJImJvZ3VzIHNlbnQoJWQpIGFuZCBhY2soJWQpIGNvdW50XG4iLAotCQkJCWJhX3Jlc3AtPnR4ZWQsIGJhX3Jlc3AtPnR4ZWRfMl9kb25lKTsKLQkJCS8qCi0JCQkgKiBzZXQgdHhlZF8yX2RvbmUgPSB0eGVkLAotCQkJICogc28gaXQgd29uJ3QgaW1wYWN0IHJhdGUgc2NhbGUKLQkJCSAqLwotCQkJYmFfcmVzcC0+dHhlZCA9IGJhX3Jlc3AtPnR4ZWRfMl9kb25lOwotCQl9Ci0JCUlXTF9ERUJVR19IVChwcml2LCAiYWdnIGZyYW1lcyBzZW50OiVkLCBhY2tlZDolZFxuIiwKLQkJCQliYV9yZXNwLT50eGVkLCBiYV9yZXNwLT50eGVkXzJfZG9uZSk7Ci0JfSBlbHNlIHsKLQkJdTY0IGJpdG1hcCwgc2VudF9iaXRtYXA7CisJCWJhX3Jlc3AtPnR4ZWQgPSBiYV9yZXNwLT50eGVkXzJfZG9uZTsKKwl9CisJSVdMX0RFQlVHX0hUKHByaXYsICJhZ2cgZnJhbWVzIHNlbnQ6JWQsIGFja2VkOiVkXG4iLAorCQkJYmFfcmVzcC0+dHhlZCwgYmFfcmVzcC0+dHhlZF8yX2RvbmUpOwogCi0JCS8qIGRvbid0IHVzZSA2NC1iaXQgdmFsdWVzIGZvciBub3cgKi8KLQkJYml0bWFwID0gbGU2NF90b19jcHUoYmFfcmVzcC0+Yml0bWFwKSA+PiBzaDsKLQotCQkvKiBjaGVjayBmb3Igc3VjY2VzcyBvciBmYWlsdXJlIGFjY29yZGluZyB0byB0aGUKLQkJICogdHJhbnNtaXR0ZWQgYml0bWFwIGFuZCBibG9jay1hY2sgYml0bWFwICovCi0JCXNlbnRfYml0bWFwID0gYml0bWFwICYgYWdnLT5iaXRtYXA7Ci0KLQkJLyogRm9yIGVhY2ggZnJhbWUgYXR0ZW1wdGVkIGluIGFnZ3JlZ2F0aW9uLAotCQkgKiB1cGRhdGUgZHJpdmVyJ3MgcmVjb3JkIG9mIHR4IGZyYW1lJ3Mgc3RhdHVzLiAqLwotCQlpID0gMDsKLQkJd2hpbGUgKHNlbnRfYml0bWFwKSB7Ci0JCQlhY2sgPSBzZW50X2JpdG1hcCAmIDFVTEw7Ci0JCQlzdWNjZXNzZXMgKz0gYWNrOwotCQkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICIlcyBPTiBpPSVkIGlkeD0lZCByYXc9JWRcbiIsCi0JCQkJYWNrID8gIkFDSyIgOiAiTkFDSyIsIGksCi0JCQkJKGFnZy0+c3RhcnRfaWR4ICsgaSkgJiAweGZmLAotCQkJCWFnZy0+c3RhcnRfaWR4ICsgaSk7Ci0JCQlzZW50X2JpdG1hcCA+Pj0gMTsKLQkJCSsraTsKLQkJfQotCi0JCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiQml0bWFwICVsbHhcbiIsCi0JCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZyliaXRtYXApOworCS8qIEZpbmQgdGhlIGZpcnN0IEFDS2VkIGZyYW1lIHRvIHN0b3JlIHRoZSBUWCBzdGF0dXMgKi8KKwl3aGlsZSAoc2VudF9iaXRtYXAgJiYgIShzZW50X2JpdG1hcCAmIDEpKSB7CisJCWFnZy0+c3RhcnRfaWR4ID0gKGFnZy0+c3RhcnRfaWR4ICsgMSkgJiAweGZmOworCQlzZW50X2JpdG1hcCA+Pj0gMTsKIAl9CiAKIAlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihwcml2LT50eHFbc2NkX2Zsb3ddLnR4YlthZ2ctPnN0YXJ0X2lkeF0uc2tiKTsKIAltZW1zZXQoJmluZm8tPnN0YXR1cywgMCwgc2l6ZW9mKGluZm8tPnN0YXR1cykpOwogCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKIAlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BTVBEVTsKLQlpZiAoIXByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPm5vX2FnZ19mcmFtZWNudF9pbmZvICYmIGJhX3Jlc3AtPnR4ZWQpIHsKLQkJaW5mby0+c3RhdHVzLmFtcGR1X2Fja19sZW4gPSBiYV9yZXNwLT50eGVkXzJfZG9uZTsKLQkJaW5mby0+c3RhdHVzLmFtcGR1X2xlbiA9IGJhX3Jlc3AtPnR4ZWQ7Ci0KLQl9IGVsc2UgewotCQlpbmZvLT5zdGF0dXMuYW1wZHVfYWNrX2xlbiA9IHN1Y2Nlc3NlczsKLQkJaW5mby0+c3RhdHVzLmFtcGR1X2xlbiA9IGFnZy0+ZnJhbWVfY291bnQ7Ci0JfQorCWluZm8tPnN0YXR1cy5hbXBkdV9hY2tfbGVuID0gYmFfcmVzcC0+dHhlZF8yX2RvbmU7CisJaW5mby0+c3RhdHVzLmFtcGR1X2xlbiA9IGJhX3Jlc3AtPnR4ZWQ7CiAJaXdsYWduX2h3cmF0ZV90b190eF9jb250cm9sKHByaXYsIGFnZy0+cmF0ZV9uX2ZsYWdzLCBpbmZvKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXVjb2RlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tdWNvZGUuYwppbmRleCBkODA3ZTVlLi44YmRhMGU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tdWNvZGUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tdWNvZGUuYwpAQCAtMiw3ICsyLDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMTYxLDQ3ICsxNjEsMTkgQEAKIH0KIAogc3RhdGljIGludCBpd2xhZ25fbG9hZF9naXZlbl91Y29kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCXN0cnVjdCBmd19kZXNjICppbnN0X2ltYWdlLAotCQlzdHJ1Y3QgZndfZGVzYyAqZGF0YV9pbWFnZSkKKwkJCQkgICBzdHJ1Y3QgZndfaW1nICppbWFnZSkKIHsKIAlpbnQgcmV0ID0gMDsKIAotCXJldCA9IGl3bGFnbl9sb2FkX3NlY3Rpb24ocHJpdiwgIklOU1QiLCBpbnN0X2ltYWdlLAorCXJldCA9IGl3bGFnbl9sb2FkX3NlY3Rpb24ocHJpdiwgIklOU1QiLCAmaW1hZ2UtPmNvZGUsCiAJCQkJICAgSVdMQUdOX1JUQ19JTlNUX0xPV0VSX0JPVU5EKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0dXJuIGl3bGFnbl9sb2FkX3NlY3Rpb24ocHJpdiwgIkRBVEEiLCBkYXRhX2ltYWdlLAorCXJldHVybiBpd2xhZ25fbG9hZF9zZWN0aW9uKHByaXYsICJEQVRBIiwgJmltYWdlLT5kYXRhLAogCQkJCSAgICBJV0xBR05fUlRDX0RBVEFfTE9XRVJfQk9VTkQpOwogfQogCi1pbnQgaXdsYWduX2xvYWRfdWNvZGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCWludCByZXQgPSAwOwotCi0JLyogY2hlY2sgd2hldGhlciBpbml0IHVjb2RlIHNob3VsZCBiZSBsb2FkZWQsIG9yIHJhdGhlciBydW50aW1lIHVjb2RlICovCi0JaWYgKHByaXYtPnVjb2RlX2luaXQubGVuICYmIChwcml2LT51Y29kZV90eXBlID09IFVDT0RFX05PTkUpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKHByaXYsICJJbml0IHVjb2RlIGZvdW5kLiBMb2FkaW5nIGluaXQgdWNvZGUuLi5cbiIpOwotCQlyZXQgPSBpd2xhZ25fbG9hZF9naXZlbl91Y29kZShwcml2LAotCQkJJnByaXYtPnVjb2RlX2luaXQsICZwcml2LT51Y29kZV9pbml0X2RhdGEpOwotCQlpZiAoIXJldCkgewotCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkluaXQgdWNvZGUgbG9hZCBjb21wbGV0ZS5cbiIpOwotCQkJcHJpdi0+dWNvZGVfdHlwZSA9IFVDT0RFX0lOSVQ7Ci0JCX0KLQl9IGVsc2UgewotCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdCB1Y29kZSBub3QgZm91bmQsIG9yIGFscmVhZHkgbG9hZGVkLiAiCi0JCQkiTG9hZGluZyBydW50aW1lIHVjb2RlLi4uXG4iKTsKLQkJcmV0ID0gaXdsYWduX2xvYWRfZ2l2ZW5fdWNvZGUocHJpdiwKLQkJCSZwcml2LT51Y29kZV9jb2RlLCAmcHJpdi0+dWNvZGVfZGF0YSk7Ci0JCWlmICghcmV0KSB7Ci0JCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUnVudGltZSB1Y29kZSBsb2FkIGNvbXBsZXRlLlxuIik7Ci0JCQlwcml2LT51Y29kZV90eXBlID0gVUNPREVfUlQ7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCiAvKgogICogIENhbGlicmF0aW9uCiAgKi8KQEAgLTI5NywzMyArMjY5LDkgQEAKIAlpd2xfY2FsaWJfc2V0KCZwcml2LT5jYWxpYl9yZXN1bHRzW2luZGV4XSwgcGt0LT51LnJhdywgbGVuKTsKIH0KIAotdm9pZCBpd2xhZ25fcnhfY2FsaWJfY29tcGxldGUoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJICAgICAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQoraW50IGl3bGFnbl9pbml0X2FsaXZlX3N0YXJ0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdC4gY2FsaWJyYXRpb24gaXMgY29tcGxldGVkLCByZXN0YXJ0aW5nIGZ3LlxuIik7Ci0JcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKLX0KLQotdm9pZCBpd2xhZ25faW5pdF9hbGl2ZV9zdGFydChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQkvKiBpbml0aWFsaXplIHVDb2RlIHdhcyBsb2FkZWQuLi4gdmVyaWZ5IGluc3QgaW1hZ2UuCi0JICogVGhpcyBpcyBhIHBhcmFub2lkIGNoZWNrLCBiZWNhdXNlIHdlIHdvdWxkIG5vdCBoYXZlIGdvdHRlbiB0aGUKLQkgKiAiaW5pdGlhbGl6ZSIgYWxpdmUgaWYgY29kZSB3ZXJlbid0IHByb3Blcmx5IGxvYWRlZC4gICovCi0JaWYgKGl3bF92ZXJpZnlfdWNvZGUocHJpdikpIHsKLQkJLyogUnVudGltZSBpbnN0cnVjdGlvbiBsb2FkIHdhcyBiYWQ7Ci0JCSAqIHRha2UgaXQgYWxsIHRoZSB3YXkgYmFjayBkb3duIHNvIHdlIGNhbiB0cnkgYWdhaW4gKi8KLQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkJhZCBcImluaXRpYWxpemVcIiB1Q29kZSBsb2FkLlxuIik7Ci0JCWdvdG8gcmVzdGFydDsKLQl9Ci0KLQlyZXQgPSBwcml2LT5jZmctPm9wcy0+bGliLT5hbGl2ZV9ub3RpZnkocHJpdik7Ci0JaWYgKHJldCkgewotCQlJV0xfV0FSTihwcml2LAotCQkJIkNvdWxkIG5vdCBjb21wbGV0ZSBBTElWRSB0cmFuc2l0aW9uOiAlZFxuIiwgcmV0KTsKLQkJZ290byByZXN0YXJ0OwotCX0KKwlpbnQgcmV0OwogCiAJaWYgKHByaXYtPmNmZy0+YnRfcGFyYW1zICYmCiAJICAgIHByaXYtPmNmZy0+YnRfcGFyYW1zLT5hZHZhbmNlZF9idF9jb2V4aXN0KSB7CkBAIC0zMzMsMjQgKzI4MSwyNSBAQAogCQkgKiBubyBuZWVkIHRvIGNsb3NlIHRoZSBlbnZsb3BlIHNpbmNlIHdlIGFyZSBnb2luZwogCQkgKiB0byBsb2FkIHRoZSBydW50aW1lIHVDb2RlIGxhdGVyLgogCQkgKi8KLQkJaXdsYWduX3NlbmRfYnRfZW52KHByaXYsIElXTF9CVF9DT0VYX0VOVl9PUEVOLAorCQlyZXQgPSBpd2xhZ25fc2VuZF9idF9lbnYocHJpdiwgSVdMX0JUX0NPRVhfRU5WX09QRU4sCiAJCQlCVF9DT0VYX1BSSU9fVEJMX0VWVF9JTklUX0NBTElCMik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OwogCiAJfQotCWl3bGFnbl9zZW5kX2NhbGliX2NmZyhwcml2KTsKKworCXJldCA9IGl3bGFnbl9zZW5kX2NhbGliX2NmZyhwcml2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJLyoqCiAJICogdGVtcGVyYXR1cmUgb2Zmc2V0IGNhbGlicmF0aW9uIGlzIG9ubHkgbmVlZGVkIGZvciBydW50aW1lIHVjb2RlLAogCSAqIHNvIHByZXBhcmUgdGhlIHZhbHVlIG5vdy4KIAkgKi8KIAlpZiAocHJpdi0+Y2ZnLT5uZWVkX3RlbXBfb2Zmc2V0X2NhbGliKQotCQlpd2xhZ25fc2V0X3RlbXBlcmF0dXJlX29mZnNldF9jYWxpYihwcml2KTsKKwkJcmV0dXJuIGl3bGFnbl9zZXRfdGVtcGVyYXR1cmVfb2Zmc2V0X2NhbGliKHByaXYpOwogCi0JcmV0dXJuOwotCi1yZXN0YXJ0OgotCS8qIHJlYWwgcmVzdGFydCAoZmlyc3QgbG9hZCBpbml0X3Vjb2RlKSAqLwotCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaXdsYWduX3NlbmRfd2ltYXhfY29leChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCkBAIC00MTMsMjUgKzM2MiwzMCBAQAogCQlJV0xfRVJSKHByaXYsICJmYWlsZWQgdG8gc2VuZCBCVCBwcmlvIHRibCBjb21tYW5kXG4iKTsKIH0KIAotdm9pZCBpd2xhZ25fc2VuZF9idF9lbnYoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBhY3Rpb24sIHU4IHR5cGUpCitpbnQgaXdsYWduX3NlbmRfYnRfZW52KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggYWN0aW9uLCB1OCB0eXBlKQogewogCXN0cnVjdCBpd2xfYnRfY29leF9wcm90X2Vudl9jbWQgZW52X2NtZDsKKwlpbnQgcmV0OwogCiAJZW52X2NtZC5hY3Rpb24gPSBhY3Rpb247CiAJZW52X2NtZC50eXBlID0gdHlwZTsKLQlpZiAoaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9CVF9DT0VYX1BST1RfRU5WLAotCQkJICAgICBzaXplb2YoZW52X2NtZCksICZlbnZfY21kKSkKKwlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX0JUX0NPRVhfUFJPVF9FTlYsCisJCQkgICAgICAgc2l6ZW9mKGVudl9jbWQpLCAmZW52X2NtZCk7CisJaWYgKHJldCkKIAkJSVdMX0VSUihwcml2LCAiZmFpbGVkIHRvIHNlbmQgQlQgZW52IGNvbW1hbmRcbiIpOworCXJldHVybiByZXQ7CiB9CiAKIAotaW50IGl3bGFnbl9hbGl2ZV9ub3RpZnkoc3RydWN0IGl3bF9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2xhZ25fYWxpdmVfbm90aWZ5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAljb25zdCBzdHJ1Y3QgcXVldWVfdG9fZmlmb19hYyAqcXVldWVfdG9fZmlmbzsKKwlzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4OwogCXUzMiBhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGksIGNoYW47CiAJdTMyIHJlZ192YWw7CisJaW50IHJldDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKQEAgLTUwMCw2ICs0NTQsOCBAQAogCW1lbXNldCgmcHJpdi0+cXVldWVfc3RvcHBlZFswXSwgMCwgc2l6ZW9mKHByaXYtPnF1ZXVlX3N0b3BwZWQpKTsKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQogCQlhdG9taWNfc2V0KCZwcml2LT5xdWV1ZV9zdG9wX2NvdW50W2ldLCAwKTsKKwlmb3JfZWFjaF9jb250ZXh0KHByaXYsIGN0eCkKKwkJY3R4LT5sYXN0X3R4X3JlamVjdGVkID0gZmFsc2U7CiAKIAkvKiByZXNldCB0byAwIHRvIGVuYWJsZSBhbGwgdGhlIHF1ZXVlIGZpcnN0ICovCiAJcHJpdi0+dHhxX2N0eF9hY3RpdmVfbXNrID0gMDsKQEAgLTUyNywxMiArNDgzLDE1IEBACiAJaXdsX2NsZWFyX2JpdHNfcHJwaChwcml2LCBBUE1HX1BDSURFVl9TVFRfUkVHLAogCQkJICBBUE1HX1BDSURFVl9TVFRfVkFMX0wxX0FDVF9ESVMpOwogCi0JaXdsYWduX3NlbmRfd2ltYXhfY29leChwcml2KTsKKwlyZXQgPSBpd2xhZ25fc2VuZF93aW1heF9jb2V4KHByaXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKLQlpd2xhZ25fc2V0X1h0YWxfY2FsaWIocHJpdik7Ci0JaXdsX3NlbmRfY2FsaWJfcmVzdWx0cyhwcml2KTsKKwlyZXQgPSBpd2xhZ25fc2V0X1h0YWxfY2FsaWIocHJpdik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAotCXJldHVybiAwOworCXJldHVybiBpd2xfc2VuZF9jYWxpYl9yZXN1bHRzKHByaXYpOwogfQogCiAKQEAgLTU0MSwxMSArNTAwLDEyIEBACiAgKiAgIHVzaW5nIHNhbXBsZSBkYXRhIDEwMCBieXRlcyBhcGFydC4gIElmIHRoZXNlIHNhbXBsZSBwb2ludHMgYXJlIGdvb2QsCiAgKiAgIGl0J3MgYSBwcmV0dHkgZ29vZCBiZXQgdGhhdCBldmVyeXRoaW5nIGJldHdlZW4gdGhlbSBpcyBnb29kLCB0b28uCiAgKi8KLXN0YXRpYyBpbnQgaXdsY29yZV92ZXJpZnlfaW5zdF9zcGFyc2Uoc3RydWN0IGl3bF9wcml2ICpwcml2LCBfX2xlMzIgKmltYWdlLCB1MzIgbGVuKQorc3RhdGljIGludCBpd2xjb3JlX3ZlcmlmeV9pbnN0X3NwYXJzZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgICAgc3RydWN0IGZ3X2Rlc2MgKmZ3X2Rlc2MpCiB7CisJX19sZTMyICppbWFnZSA9IChfX2xlMzIgKilmd19kZXNjLT52X2FkZHI7CisJdTMyIGxlbiA9IGZ3X2Rlc2MtPmxlbjsKIAl1MzIgdmFsOwotCWludCByZXQgPSAwOwotCXUzMiBlcnJjbnQgPSAwOwogCXUzMiBpOwogCiAJSVdMX0RFQlVHX0lORk8ocHJpdiwgInVjb2RlIGluc3QgaW1hZ2Ugc2l6ZSBpcyAldVxuIiwgbGVuKTsKQEAgLTU1NiwxMDQgKzUxNiwyMDQgQEAKIAkJICogaWYgSVdMX0RMX0lPIGlzIHNldCAqLwogCQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SQUREUiwKIAkJCWkgKyBJV0xBR05fUlRDX0lOU1RfTE9XRVJfQk9VTkQpOwotCQl2YWwgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKLQkJaWYgKHZhbCAhPSBsZTMyX3RvX2NwdSgqaW1hZ2UpKSB7Ci0JCQlyZXQgPSAtRUlPOwotCQkJZXJyY250Kys7Ci0JCQlpZiAoZXJyY250ID49IDMpCi0JCQkJYnJlYWs7Ci0JCX0KKwkJdmFsID0gaXdsX3JlYWQzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOworCQlpZiAodmFsICE9IGxlMzJfdG9fY3B1KCppbWFnZSkpCisJCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCi0vKioKLSAqIGl3bGNvcmVfdmVyaWZ5X2luc3RfZnVsbCAtIHZlcmlmeSBydW50aW1lIHVDb2RlIGltYWdlIGluIGNhcmQgdnMuIGhvc3QsCi0gKiAgICAgbG9va2luZyBhdCBhbGwgZGF0YS4KLSAqLwotc3RhdGljIGludCBpd2xfdmVyaWZ5X2luc3RfZnVsbChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIF9fbGUzMiAqaW1hZ2UsCi0JCQkJIHUzMiBsZW4pCitzdGF0aWMgdm9pZCBpd2xfcHJpbnRfbWlzbWF0Y2hfaW5zdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgIHN0cnVjdCBmd19kZXNjICpmd19kZXNjKQogeworCV9fbGUzMiAqaW1hZ2UgPSAoX19sZTMyICopZndfZGVzYy0+dl9hZGRyOworCXUzMiBsZW4gPSBmd19kZXNjLT5sZW47CiAJdTMyIHZhbDsKLQl1MzIgc2F2ZV9sZW4gPSBsZW47Ci0JaW50IHJldCA9IDA7Ci0JdTMyIGVycmNudDsKKwl1MzIgb2ZmczsKKwlpbnQgZXJyb3JzID0gMDsKIAogCUlXTF9ERUJVR19JTkZPKHByaXYsICJ1Y29kZSBpbnN0IGltYWdlIHNpemUgaXMgJXVcbiIsIGxlbik7CiAKIAlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SQUREUiwKIAkJCSAgIElXTEFHTl9SVENfSU5TVF9MT1dFUl9CT1VORCk7CiAKLQllcnJjbnQgPSAwOwotCWZvciAoOyBsZW4gPiAwOyBsZW4gLT0gc2l6ZW9mKHUzMiksIGltYWdlKyspIHsKKwlmb3IgKG9mZnMgPSAwOworCSAgICAgb2ZmcyA8IGxlbiAmJiBlcnJvcnMgPCAyMDsKKwkgICAgIG9mZnMgKz0gc2l6ZW9mKHUzMiksIGltYWdlKyspIHsKIAkJLyogcmVhZCBkYXRhIGNvbWVzIHRocm91Z2ggc2luZ2xlIHBvcnQsIGF1dG8taW5jciBhZGRyICovCi0JCS8qIE5PVEU6IFVzZSB0aGUgZGVidWdsZXNzIHJlYWQgc28gd2UgZG9uJ3QgZmxvb2Qga2VybmVsIGxvZwotCQkgKiBpZiBJV0xfRExfSU8gaXMgc2V0ICovCi0JCXZhbCA9IF9pd2xfcmVhZF9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOworCQl2YWwgPSBpd2xfcmVhZDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7CiAJCWlmICh2YWwgIT0gbGUzMl90b19jcHUoKmltYWdlKSkgewotCQkJSVdMX0VSUihwcml2LCAidUNvZGUgSU5TVCBzZWN0aW9uIGlzIGludmFsaWQgYXQgIgotCQkJCSAgIm9mZnNldCAweCV4LCBpcyAweCV4LCBzL2IgMHgleFxuIiwKLQkJCQkgIHNhdmVfbGVuIC0gbGVuLCB2YWwsIGxlMzJfdG9fY3B1KCppbWFnZSkpOwotCQkJcmV0ID0gLUVJTzsKLQkJCWVycmNudCsrOwotCQkJaWYgKGVycmNudCA+PSAyMCkKLQkJCQlicmVhazsKKwkJCUlXTF9FUlIocHJpdiwgInVDb2RlIElOU1Qgc2VjdGlvbiBhdCAiCisJCQkJIm9mZnNldCAweCV4LCBpcyAweCV4LCBzL2IgMHgleFxuIiwKKwkJCQlvZmZzLCB2YWwsIGxlMzJfdG9fY3B1KCppbWFnZSkpOworCQkJZXJyb3JzKys7CiAJCX0KIAl9Ci0KLQlpZiAoIWVycmNudCkKLQkJSVdMX0RFQlVHX0lORk8ocHJpdiwKLQkJICAgICJ1Y29kZSBpbWFnZSBpbiBJTlNUUlVDVElPTiBtZW1vcnkgaXMgZ29vZFxuIik7Ci0KLQlyZXR1cm4gcmV0OwogfQogCiAvKioKICAqIGl3bF92ZXJpZnlfdWNvZGUgLSBkZXRlcm1pbmUgd2hpY2ggaW5zdHJ1Y3Rpb24gaW1hZ2UgaXMgaW4gU1JBTSwKICAqICAgIGFuZCB2ZXJpZnkgaXRzIGNvbnRlbnRzCiAgKi8KLWludCBpd2xfdmVyaWZ5X3Vjb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3N0YXRpYyBpbnQgaXdsX3ZlcmlmeV91Y29kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBmd19pbWcgKmltZykKIHsKLQlfX2xlMzIgKmltYWdlOwotCXUzMiBsZW47CisJaWYgKCFpd2xjb3JlX3ZlcmlmeV9pbnN0X3NwYXJzZShwcml2LCAmaW1nLT5jb2RlKSkgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAidUNvZGUgaXMgZ29vZCBpbiBpbnN0IFNSQU1cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlJV0xfRVJSKHByaXYsICJVQ09ERSBJTUFHRSBJTiBJTlNUUlVDVElPTiBTUkFNIE5PVCBWQUxJRCEhXG4iKTsKKworCWl3bF9wcmludF9taXNtYXRjaF9pbnN0KHByaXYsICZpbWctPmNvZGUpOworCXJldHVybiAtRUlPOworfQorCitzdHJ1Y3QgaXdsYWduX2FsaXZlX2RhdGEgeworCWJvb2wgdmFsaWQ7CisJdTggc3VidHlwZTsKK307CisKK3N0YXRpYyB2b2lkIGl3bGFnbl9hbGl2ZV9mbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCwKKwkJCSAgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBpd2xhZ25fYWxpdmVfZGF0YSAqYWxpdmVfZGF0YSA9IGRhdGE7CisJc3RydWN0IGl3bF9hbGl2ZV9yZXNwICpwYWxpdmU7CisKKwlwYWxpdmUgPSAmcGt0LT51LmFsaXZlX2ZyYW1lOworCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkFsaXZlIHVjb2RlIHN0YXR1cyAweCUwOFggcmV2aXNpb24gIgorCQkgICAgICAgIjB4JTAxWCAweCUwMVhcbiIsCisJCSAgICAgICBwYWxpdmUtPmlzX3ZhbGlkLCBwYWxpdmUtPnZlcl90eXBlLAorCQkgICAgICAgcGFsaXZlLT52ZXJfc3VidHlwZSk7CisKKwlwcml2LT5kZXZpY2VfcG9pbnRlcnMuZXJyb3JfZXZlbnRfdGFibGUgPQorCQlsZTMyX3RvX2NwdShwYWxpdmUtPmVycm9yX2V2ZW50X3RhYmxlX3B0cik7CisJcHJpdi0+ZGV2aWNlX3BvaW50ZXJzLmxvZ19ldmVudF90YWJsZSA9CisJCWxlMzJfdG9fY3B1KHBhbGl2ZS0+bG9nX2V2ZW50X3RhYmxlX3B0cik7CisKKwlhbGl2ZV9kYXRhLT5zdWJ0eXBlID0gcGFsaXZlLT52ZXJfc3VidHlwZTsKKwlhbGl2ZV9kYXRhLT52YWxpZCA9IHBhbGl2ZS0+aXNfdmFsaWQgPT0gVUNPREVfVkFMSURfT0s7Cit9CisKKyNkZWZpbmUgVUNPREVfQUxJVkVfVElNRU9VVAlIWgorI2RlZmluZSBVQ09ERV9DQUxJQl9USU1FT1VUCSgyKkhaKQorCitpbnQgaXdsYWduX2xvYWRfdWNvZGVfd2FpdF9hbGl2ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJIHN0cnVjdCBmd19pbWcgKmltYWdlLAorCQkJCSBpbnQgc3VidHlwZSwgaW50IGFsdGVybmF0ZV9zdWJ0eXBlKQoreworCXN0cnVjdCBpd2xfbm90aWZpY2F0aW9uX3dhaXQgYWxpdmVfd2FpdDsKKwlzdHJ1Y3QgaXdsYWduX2FsaXZlX2RhdGEgYWxpdmVfZGF0YTsKKwlpbnQgcmV0OworCWVudW0gaXdsYWduX3Vjb2RlX3N1YnR5cGUgb2xkX3R5cGU7CisKKwlyZXQgPSBpd2xhZ25fc3RhcnRfZGV2aWNlKHByaXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpd2xhZ25faW5pdF9ub3RpZmljYXRpb25fd2FpdChwcml2LCAmYWxpdmVfd2FpdCwgUkVQTFlfQUxJVkUsCisJCQkJICAgICAgaXdsYWduX2FsaXZlX2ZuLCAmYWxpdmVfZGF0YSk7CisKKwlvbGRfdHlwZSA9IHByaXYtPnVjb2RlX3R5cGU7CisJcHJpdi0+dWNvZGVfdHlwZSA9IHN1YnR5cGU7CisKKwlyZXQgPSBpd2xhZ25fbG9hZF9naXZlbl91Y29kZShwcml2LCBpbWFnZSk7CisJaWYgKHJldCkgeworCQlwcml2LT51Y29kZV90eXBlID0gb2xkX3R5cGU7CisJCWl3bGFnbl9yZW1vdmVfbm90aWZpY2F0aW9uKHByaXYsICZhbGl2ZV93YWl0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBSZW1vdmUgYWxsIHJlc2V0cyB0byBhbGxvdyBOSUMgdG8gb3BlcmF0ZSAqLworCWl3bF93cml0ZTMyKHByaXYsIENTUl9SRVNFVCwgMCk7CisKKwkvKgorCSAqIFNvbWUgdGhpbmdzIG1heSBydW4gaW4gdGhlIGJhY2tncm91bmQgbm93LCBidXQgd2UKKwkgKiBqdXN0IHdhaXQgZm9yIHRoZSBBTElWRSBub3RpZmljYXRpb24gaGVyZS4KKwkgKi8KKwlyZXQgPSBpd2xhZ25fd2FpdF9ub3RpZmljYXRpb24ocHJpdiwgJmFsaXZlX3dhaXQsIFVDT0RFX0FMSVZFX1RJTUVPVVQpOworCWlmIChyZXQpIHsKKwkJcHJpdi0+dWNvZGVfdHlwZSA9IG9sZF90eXBlOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmICghYWxpdmVfZGF0YS52YWxpZCkgeworCQlJV0xfRVJSKHByaXYsICJMb2FkZWQgdWNvZGUgaXMgbm90IHZhbGlkIVxuIik7CisJCXByaXYtPnVjb2RlX3R5cGUgPSBvbGRfdHlwZTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGFsaXZlX2RhdGEuc3VidHlwZSAhPSBzdWJ0eXBlICYmCisJICAgIGFsaXZlX2RhdGEuc3VidHlwZSAhPSBhbHRlcm5hdGVfc3VidHlwZSkgeworCQlJV0xfRVJSKHByaXYsCisJCQkiTG9hZGVkIHVjb2RlIGlzIG5vdCBleHBlY3RlZCB0eXBlIChnb3QgJWQsIGV4cGVjdGVkICVkKSFcbiIsCisJCQlhbGl2ZV9kYXRhLnN1YnR5cGUsIHN1YnR5cGUpOworCQlwcml2LT51Y29kZV90eXBlID0gb2xkX3R5cGU7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldCA9IGl3bF92ZXJpZnlfdWNvZGUocHJpdiwgaW1hZ2UpOworCWlmIChyZXQpIHsKKwkJcHJpdi0+dWNvZGVfdHlwZSA9IG9sZF90eXBlOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIGRlbGF5IGEgYml0IHRvIGdpdmUgcmZraWxsIHRpbWUgdG8gcnVuICovCisJbXNsZWVwKDUpOworCisJcmV0ID0gaXdsYWduX2FsaXZlX25vdGlmeShwcml2KTsKKwlpZiAocmV0KSB7CisJCUlXTF9XQVJOKHByaXYsCisJCQkiQ291bGQgbm90IGNvbXBsZXRlIEFMSVZFIHRyYW5zaXRpb246ICVkXG4iLCByZXQpOworCQlwcml2LT51Y29kZV90eXBlID0gb2xkX3R5cGU7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBpd2xhZ25fcnVuX2luaXRfdWNvZGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXN0cnVjdCBpd2xfbm90aWZpY2F0aW9uX3dhaXQgY2FsaWJfd2FpdDsKIAlpbnQgcmV0OwogCi0JLyogVHJ5IGJvb3RzdHJhcCAqLwotCWltYWdlID0gKF9fbGUzMiAqKXByaXYtPnVjb2RlX2Jvb3Qudl9hZGRyOwotCWxlbiA9IHByaXYtPnVjb2RlX2Jvb3QubGVuOwotCXJldCA9IGl3bGNvcmVfdmVyaWZ5X2luc3Rfc3BhcnNlKHByaXYsIGltYWdlLCBsZW4pOwotCWlmICghcmV0KSB7Ci0JCUlXTF9ERUJVR19JTkZPKHByaXYsICJCb290c3RyYXAgdUNvZGUgaXMgZ29vZCBpbiBpbnN0IFNSQU1cbiIpOworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnByaXYtPm11dGV4KTsKKworCS8qIE5vIGluaXQgdWNvZGUgcmVxdWlyZWQ/IEN1cmlvdXMsIGJ1dCBtYXliZSBvayAqLworCWlmICghcHJpdi0+dWNvZGVfaW5pdC5jb2RlLmxlbikKIAkJcmV0dXJuIDA7Ci0JfQogCi0JLyogVHJ5IGluaXRpYWxpemUgKi8KLQlpbWFnZSA9IChfX2xlMzIgKilwcml2LT51Y29kZV9pbml0LnZfYWRkcjsKLQlsZW4gPSBwcml2LT51Y29kZV9pbml0LmxlbjsKLQlyZXQgPSBpd2xjb3JlX3ZlcmlmeV9pbnN0X3NwYXJzZShwcml2LCBpbWFnZSwgbGVuKTsKLQlpZiAoIXJldCkgewotCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdGlhbGl6ZSB1Q29kZSBpcyBnb29kIGluIGluc3QgU1JBTVxuIik7CisJaWYgKHByaXYtPnVjb2RlX3R5cGUgIT0gVUNPREVfU1VCVFlQRV9OT05FX0xPQURFRCkKIAkJcmV0dXJuIDA7Ci0JfQogCi0JLyogVHJ5IHJ1bnRpbWUvcHJvdG9jb2wgKi8KLQlpbWFnZSA9IChfX2xlMzIgKilwcml2LT51Y29kZV9jb2RlLnZfYWRkcjsKLQlsZW4gPSBwcml2LT51Y29kZV9jb2RlLmxlbjsKLQlyZXQgPSBpd2xjb3JlX3ZlcmlmeV9pbnN0X3NwYXJzZShwcml2LCBpbWFnZSwgbGVuKTsKLQlpZiAoIXJldCkgewotCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUnVudGltZSB1Q29kZSBpcyBnb29kIGluIGluc3QgU1JBTVxuIik7Ci0JCXJldHVybiAwOwotCX0KKwlpd2xhZ25faW5pdF9ub3RpZmljYXRpb25fd2FpdChwcml2LCAmY2FsaWJfd2FpdCwKKwkJCQkgICAgICBDQUxJQlJBVElPTl9DT01QTEVURV9OT1RJRklDQVRJT04sCisJCQkJICAgICAgTlVMTCwgTlVMTCk7CiAKLQlJV0xfRVJSKHByaXYsICJOTyBWQUxJRCBVQ09ERSBJTUFHRSBJTiBJTlNUUlVDVElPTiBTUkFNISFcbiIpOworCS8qIFdpbGwgYWxzbyBzdGFydCB0aGUgZGV2aWNlICovCisJcmV0ID0gaXdsYWduX2xvYWRfdWNvZGVfd2FpdF9hbGl2ZShwcml2LCAmcHJpdi0+dWNvZGVfaW5pdCwKKwkJCQkJICAgVUNPREVfU1VCVFlQRV9JTklULCAtMSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKIAotCS8qIFNpbmNlIG5vdGhpbmcgc2VlbXMgdG8gbWF0Y2gsIHNob3cgZmlyc3Qgc2V2ZXJhbCBkYXRhIGVudHJpZXMgaW4KLQkgKiBpbnN0cnVjdGlvbiBTUkFNLCBzbyBtYXliZSB2aXN1YWwgaW5zcGVjdGlvbiB3aWxsIGdpdmUgYSBjbHVlLgotCSAqIFNlbGVjdGlvbiBvZiBib290c3RyYXAgaW1hZ2UgKHZzLiBvdGhlciBpbWFnZXMpIGlzIGFyYml0cmFyeS4gKi8KLQlpbWFnZSA9IChfX2xlMzIgKilwcml2LT51Y29kZV9ib290LnZfYWRkcjsKLQlsZW4gPSBwcml2LT51Y29kZV9ib290LmxlbjsKLQlyZXQgPSBpd2xfdmVyaWZ5X2luc3RfZnVsbChwcml2LCBpbWFnZSwgbGVuKTsKKwlyZXQgPSBpd2xhZ25faW5pdF9hbGl2ZV9zdGFydChwcml2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOwogCisJLyoKKwkgKiBTb21lIHRoaW5ncyBtYXkgcnVuIGluIHRoZSBiYWNrZ3JvdW5kIG5vdywgYnV0IHdlCisJICoganVzdCB3YWl0IGZvciB0aGUgY2FsaWJyYXRpb24gY29tcGxldGUgbm90aWZpY2F0aW9uLgorCSAqLworCXJldCA9IGl3bGFnbl93YWl0X25vdGlmaWNhdGlvbihwcml2LCAmY2FsaWJfd2FpdCwgVUNPREVfQ0FMSUJfVElNRU9VVCk7CisKKwlnb3RvIG91dDsKKworIGVycm9yOgorCWl3bGFnbl9yZW1vdmVfbm90aWZpY2F0aW9uKHByaXYsICZjYWxpYl93YWl0KTsKKyBvdXQ6CisJLyogV2hhdGV2ZXIgaGFwcGVuZWQsIHN0b3AgdGhlIGRldmljZSAqLworCWl3bGFnbl9zdG9wX2RldmljZShwcml2KTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYwppbmRleCAzMjFiMThiLi4wOGUzY2FlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdCwgYXMgd2VsbAogICogYXMgcG9ydGlvbnMgb2YgdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgpAQCAtNTksNyArNTksNiBAQAogI2luY2x1ZGUgIml3bC1zdGEuaCIKICNpbmNsdWRlICJpd2wtYWduLWNhbGliLmgiCiAjaW5jbHVkZSAiaXdsLWFnbi5oIgotI2luY2x1ZGUgIml3bC1hZ24tbGVkLmgiCiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTAzLDcwICsxMDIsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgaXdsX2NsZWFyX2ZyZWVfZnJhbWVzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICplbGVtZW50OwotCi0JSVdMX0RFQlVHX0lORk8ocHJpdiwgIiVkIGZyYW1lcyBvbiBwcmUtYWxsb2NhdGVkIGhlYXAgb24gY2xlYXIuXG4iLAotCQkgICAgICAgcHJpdi0+ZnJhbWVzX2NvdW50KTsKLQotCXdoaWxlICghbGlzdF9lbXB0eSgmcHJpdi0+ZnJlZV9mcmFtZXMpKSB7Ci0JCWVsZW1lbnQgPSBwcml2LT5mcmVlX2ZyYW1lcy5uZXh0OwotCQlsaXN0X2RlbChlbGVtZW50KTsKLQkJa2ZyZWUobGlzdF9lbnRyeShlbGVtZW50LCBzdHJ1Y3QgaXdsX2ZyYW1lLCBsaXN0KSk7Ci0JCXByaXYtPmZyYW1lc19jb3VudC0tOwotCX0KLQotCWlmIChwcml2LT5mcmFtZXNfY291bnQpIHsKLQkJSVdMX1dBUk4ocHJpdiwgIiVkIGZyYW1lcyBzdGlsbCBpbiB1c2UuICBEaWQgd2UgbG9zZSBvbmU/XG4iLAotCQkJICAgIHByaXYtPmZyYW1lc19jb3VudCk7Ci0JCXByaXYtPmZyYW1lc19jb3VudCA9IDA7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IGl3bF9mcmFtZSAqaXdsX2dldF9mcmVlX2ZyYW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQlzdHJ1Y3QgaXdsX2ZyYW1lICpmcmFtZTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICplbGVtZW50OwotCWlmIChsaXN0X2VtcHR5KCZwcml2LT5mcmVlX2ZyYW1lcykpIHsKLQkJZnJhbWUgPSBremFsbG9jKHNpemVvZigqZnJhbWUpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFmcmFtZSkgewotCQkJSVdMX0VSUihwcml2LCAiQ291bGQgbm90IGFsbG9jYXRlIGZyYW1lIVxuIik7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCi0JCXByaXYtPmZyYW1lc19jb3VudCsrOwotCQlyZXR1cm4gZnJhbWU7Ci0JfQotCi0JZWxlbWVudCA9IHByaXYtPmZyZWVfZnJhbWVzLm5leHQ7Ci0JbGlzdF9kZWwoZWxlbWVudCk7Ci0JcmV0dXJuIGxpc3RfZW50cnkoZWxlbWVudCwgc3RydWN0IGl3bF9mcmFtZSwgbGlzdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGl3bF9mcmVlX2ZyYW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9mcmFtZSAqZnJhbWUpCi17Ci0JbWVtc2V0KGZyYW1lLCAwLCBzaXplb2YoKmZyYW1lKSk7Ci0JbGlzdF9hZGQoJmZyYW1lLT5saXN0LCAmcHJpdi0+ZnJlZV9mcmFtZXMpOwotfQotCi1zdGF0aWMgdTMyIGl3bF9maWxsX2JlYWNvbl9mcmFtZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCi0JCQkJIGludCBsZWZ0KQotewotCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnByaXYtPm11dGV4KTsKLQotCWlmICghcHJpdi0+YmVhY29uX3NrYikKLQkJcmV0dXJuIDA7Ci0KLQlpZiAocHJpdi0+YmVhY29uX3NrYi0+bGVuID4gbGVmdCkKLQkJcmV0dXJuIDA7Ci0KLQltZW1jcHkoaGRyLCBwcml2LT5iZWFjb25fc2tiLT5kYXRhLCBwcml2LT5iZWFjb25fc2tiLT5sZW4pOwotCi0JcmV0dXJuIHByaXYtPmJlYWNvbl9za2ItPmxlbjsKLX0KLQogLyogUGFyc2UgdGhlIGJlYWNvbiBmcmFtZSB0byBmaW5kIHRoZSBUSU0gZWxlbWVudCBhbmQgc2V0IHRpbV9pZHggJiB0aW1fc2l6ZSAqLwogc3RhdGljIHZvaWQgaXdsX3NldF9iZWFjb25fdGltKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICAgICBzdHJ1Y3QgaXdsX3R4X2JlYWNvbl9jbWQgKnR4X2JlYWNvbl9jbWQsCkBAIC0xOTQsMTMgKzEyOSwxOCBAQAogCQlJV0xfV0FSTihwcml2LCAiVW5hYmxlIHRvIGZpbmQgVElNIEVsZW1lbnQgaW4gYmVhY29uXG4iKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBpd2xfaHdfZ2V0X2JlYWNvbl9jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgICAgICBzdHJ1Y3QgaXdsX2ZyYW1lICpmcmFtZSkKK2ludCBpd2xhZ25fc2VuZF9iZWFjb25fY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgaXdsX3R4X2JlYWNvbl9jbWQgKnR4X2JlYWNvbl9jbWQ7CisJc3RydWN0IGl3bF9ob3N0X2NtZCBjbWQgPSB7CisJCS5pZCA9IFJFUExZX1RYX0JFQUNPTiwKKwkJLmZsYWdzID0gQ01EX1NJWkVfSFVHRSwKKwl9OwogCXUzMiBmcmFtZV9zaXplOwogCXUzMiByYXRlX2ZsYWdzOwogCXUzMiByYXRlOworCWludCBlcnI7CisKIAkvKgogCSAqIFdlIGhhdmUgdG8gc2V0IHVwIHRoZSBUWCBjb21tYW5kLCB0aGUgVFggQmVhY29uIGNvbW1hbmQsIGFuZCB0aGUKIAkgKiBiZWFjb24gY29udGVudHMuCkBAIC0yMTMsMTcgKzE1MywxOSBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQkvKiBJbml0aWFsaXplIG1lbW9yeSAqLwotCXR4X2JlYWNvbl9jbWQgPSAmZnJhbWUtPnUuYmVhY29uOwotCW1lbXNldCh0eF9iZWFjb25fY21kLCAwLCBzaXplb2YoKnR4X2JlYWNvbl9jbWQpKTsKKwlpZiAoV0FSTl9PTighcHJpdi0+YmVhY29uX3NrYikpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogQWxsb2NhdGUgYmVhY29uIG1lbW9yeSAqLworCXR4X2JlYWNvbl9jbWQgPSBremFsbG9jKHNpemVvZigqdHhfYmVhY29uX2NtZCkgKyBwcml2LT5iZWFjb25fc2tiLT5sZW4sCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCF0eF9iZWFjb25fY21kKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZyYW1lX3NpemUgPSBwcml2LT5iZWFjb25fc2tiLT5sZW47CiAKIAkvKiBTZXQgdXAgVFggYmVhY29uIGNvbnRlbnRzICovCi0JZnJhbWVfc2l6ZSA9IGl3bF9maWxsX2JlYWNvbl9mcmFtZShwcml2LCB0eF9iZWFjb25fY21kLT5mcmFtZSwKLQkJCQlzaXplb2YoZnJhbWUtPnUpIC0gc2l6ZW9mKCp0eF9iZWFjb25fY21kKSk7Ci0JaWYgKFdBUk5fT05fT05DRShmcmFtZV9zaXplID4gTUFYX01QRFVfU0laRSkpCi0JCXJldHVybiAwOwotCWlmICghZnJhbWVfc2l6ZSkKLQkJcmV0dXJuIDA7CisJbWVtY3B5KHR4X2JlYWNvbl9jbWQtPmZyYW1lLCBwcml2LT5iZWFjb25fc2tiLT5kYXRhLCBmcmFtZV9zaXplKTsKIAogCS8qIFNldCB1cCBUWCBjb21tYW5kIGZpZWxkcyAqLwogCXR4X2JlYWNvbl9jbWQtPnR4LmxlbiA9IGNwdV90b19sZTE2KCh1MTYpZnJhbWVfc2l6ZSk7CkBAIC0yNDYsMzUgKzE4OCwxNiBAQAogCXR4X2JlYWNvbl9jbWQtPnR4LnJhdGVfbl9mbGFncyA9IGl3bF9od19zZXRfcmF0ZV9uX2ZsYWdzKHJhdGUsCiAJCQlyYXRlX2ZsYWdzKTsKIAotCXJldHVybiBzaXplb2YoKnR4X2JlYWNvbl9jbWQpICsgZnJhbWVfc2l6ZTsKLX0KKwkvKiBTdWJtaXQgY29tbWFuZCAqLworCWNtZC5sZW4gPSBzaXplb2YoKnR4X2JlYWNvbl9jbWQpICsgZnJhbWVfc2l6ZTsKKwljbWQuZGF0YSA9IHR4X2JlYWNvbl9jbWQ7CiAKLWludCBpd2xhZ25fc2VuZF9iZWFjb25fY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQlzdHJ1Y3QgaXdsX2ZyYW1lICpmcmFtZTsKLQl1bnNpZ25lZCBpbnQgZnJhbWVfc2l6ZTsKLQlpbnQgcmM7CisJZXJyID0gaXdsX3NlbmRfY21kX3N5bmMocHJpdiwgJmNtZCk7CiAKLQlmcmFtZSA9IGl3bF9nZXRfZnJlZV9mcmFtZShwcml2KTsKLQlpZiAoIWZyYW1lKSB7Ci0JCUlXTF9FUlIocHJpdiwgIkNvdWxkIG5vdCBvYnRhaW4gZnJlZSBmcmFtZSBidWZmZXIgZm9yIGJlYWNvbiAiCi0JCQkgICJjb21tYW5kLlxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KKwkvKiBGcmVlIHRlbXBvcmFyeSBzdG9yYWdlICovCisJa2ZyZWUodHhfYmVhY29uX2NtZCk7CiAKLQlmcmFtZV9zaXplID0gaXdsX2h3X2dldF9iZWFjb25fY21kKHByaXYsIGZyYW1lKTsKLQlpZiAoIWZyYW1lX3NpemUpIHsKLQkJSVdMX0VSUihwcml2LCAiRXJyb3IgY29uZmlndXJpbmcgdGhlIGJlYWNvbiBjb21tYW5kXG4iKTsKLQkJaXdsX2ZyZWVfZnJhbWUocHJpdiwgZnJhbWUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyYyA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfVFhfQkVBQ09OLCBmcmFtZV9zaXplLAotCQkJICAgICAgJmZyYW1lLT51LmNtZFswXSk7Ci0KLQlpd2xfZnJlZV9mcmFtZShwcml2LCBmcmFtZSk7Ci0KLQlyZXR1cm4gcmM7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGl3bF90ZmRfdGJfZ2V0X2FkZHIoc3RydWN0IGl3bF90ZmQgKnRmZCwgdTggaWR4KQpAQCAtMzk1LDcgKzMxOCw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCUJVR19PTihhZGRyICYgfkRNQV9CSVRfTUFTSygzNikpOworCWlmIChXQVJOX09OKGFkZHIgJiB+RE1BX0JJVF9NQVNLKDM2KSkpCisJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKHVubGlrZWx5KGFkZHIgJiB+SVdMX1RYX0RNQV9NQVNLKSkKIAkJSVdMX0VSUihwcml2LCAiVW5hbGlnbmVkIGFkZHJlc3MgPSAlbGx4XG4iLAogCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWFkZHIpOwpAQCAtNDA5LDcgKzMzNCw3IEBACiAgKiBUZWxsIG5pYyB3aGVyZSB0byBmaW5kIGNpcmN1bGFyIGJ1ZmZlciBvZiBUeCBGcmFtZSBEZXNjcmlwdG9ycyBmb3IKICAqIGdpdmVuIFR4IHF1ZXVlLCBhbmQgZW5hYmxlIHRoZSBETUEgY2hhbm5lbCB1c2VkIGZvciB0aGF0IHF1ZXVlLgogICoKLSAqIDQ5NjUgc3VwcG9ydHMgdXAgdG8gMTYgVHggcXVldWVzIGluIERSQU0sIG1hcHBlZCB0byB1cCB0byA4IFR4IERNQQorICogc3VwcG9ydHMgdXAgdG8gMTYgVHggcXVldWVzIGluIERSQU0sIG1hcHBlZCB0byB1cCB0byA4IFR4IERNQQogICogY2hhbm5lbHMgc3VwcG9ydGVkIGluIGhhcmR3YXJlLgogICovCiBpbnQgaXdsX2h3X3R4X3F1ZXVlX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LApAQCAtNDgzLDEyICs0MDgsMTQgQEAKIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpd2xfcHJpdiwgYnRfZnVsbF9jb25jdXJyZW5jeSk7CiAJc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eDsKIAorCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJcmV0dXJuOworCQlnb3RvIG91dDsKIAogCS8qIGRvbnQgc2VuZCBob3N0IGNvbW1hbmQgaWYgcmYta2lsbCBpcyBvbiAqLwogCWlmICghaXdsX2lzX3JlYWR5X3JmKHByaXYpKQotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCiAJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkJUIGNvZXggaW4gJXMgbW9kZVxuIiwKIAkJICAgICAgIHByaXYtPmJ0X2Z1bGxfY29uY3VycmVudCA/CkBAIC00OTgsMTUgKzQyNSwxNSBAQAogCSAqIExRICYgUlhPTiB1cGRhdGVkIGNtZHMgbXVzdCBiZSBzZW50IGJlZm9yZSBCVCBDb25maWcgY21kCiAJICogdG8gYXZvaWQgMy13aXJlIGNvbGxpc2lvbnMKIAkgKi8KLQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJZm9yX2VhY2hfY29udGV4dChwcml2LCBjdHgpIHsKIAkJaWYgKHByaXYtPmNmZy0+b3BzLT5oY21kLT5zZXRfcnhvbl9jaGFpbikKIAkJCXByaXYtPmNmZy0+b3BzLT5oY21kLT5zZXRfcnhvbl9jaGFpbihwcml2LCBjdHgpOwogCQlpd2xjb3JlX2NvbW1pdF9yeG9uKHByaXYsIGN0eCk7CiAJfQotCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJcHJpdi0+Y2ZnLT5vcHMtPmhjbWQtPnNlbmRfYnRfY29uZmlnKHByaXYpOworb3V0OgorCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQogCiAvKioKQEAgLTU1Niw3ICs0ODMsNyBAQAogCX0KIAogCS8qIFNldCBzdGFydGluZyBhZGRyZXNzOyByZWFkcyB3aWxsIGF1dG8taW5jcmVtZW50ICovCi0JX2l3bF93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JBRERSLCBwdHIpOworCWl3bF93cml0ZTMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkFERFIsIHB0cik7CiAJcm1iKCk7CiAKIAkvKgpAQCAtNTY0LDEzICs0OTEsMTMgQEAKIAkgKiBwbGFjZSBldmVudCBpZCAjIGF0IGZhciByaWdodCBmb3IgZWFzaWVyIHZpc3VhbCBwYXJzaW5nLgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1fZXZlbnRzOyBpKyspIHsKLQkJZXYgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKLQkJdGltZSA9IF9pd2xfcmVhZF9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOworCQlldiA9IGl3bF9yZWFkMzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKKwkJdGltZSA9IGl3bF9yZWFkMzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKIAkJaWYgKG1vZGUgPT0gMCkgewogCQkJdHJhY2VfaXdsd2lmaV9kZXZfdWNvZGVfY29udF9ldmVudChwcml2LAogCQkJCQkJCTAsIHRpbWUsIGV2KTsKIAkJfSBlbHNlIHsKLQkJCWRhdGEgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKKwkJCWRhdGEgPSBpd2xfcmVhZDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7CiAJCQl0cmFjZV9pd2x3aWZpX2Rldl91Y29kZV9jb250X2V2ZW50KHByaXYsCiAJCQkJCQl0aW1lLCBkYXRhLCBldik7CiAJCX0KQEAgLTU4OCwxMCArNTE1LDcgQEAKIAl1MzIgbnVtX3dyYXBzOyAgLyogIyB0aW1lcyB1Q29kZSB3cmFwcGVkIHRvIHRvcCBvZiBsb2cgKi8KIAl1MzIgbmV4dF9lbnRyeTsgLyogaW5kZXggb2YgbmV4dCBlbnRyeSB0byBiZSB3cml0dGVuIGJ5IHVDb2RlICovCiAKLQlpZiAocHJpdi0+dWNvZGVfdHlwZSA9PSBVQ09ERV9JTklUKQotCQliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LmVycm9yX2V2ZW50X3RhYmxlX3B0cik7Ci0JZWxzZQotCQliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZS5sb2dfZXZlbnRfdGFibGVfcHRyKTsKKwliYXNlID0gcHJpdi0+ZGV2aWNlX3BvaW50ZXJzLmVycm9yX2V2ZW50X3RhYmxlOwogCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5pc192YWxpZF9ydGNfZGF0YV9hZGRyKGJhc2UpKSB7CiAJCWNhcGFjaXR5ID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSk7CiAJCW51bV93cmFwcyA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAoMiAqIHNpemVvZih1MzIpKSk7CkBAIC03MjAsNyArNjQ0LDEwIEBACiAJCS8qIElmIGFuIFJYQiBkb2Vzbid0IGhhdmUgYSBSeCBxdWV1ZSBzbG90IGFzc29jaWF0ZWQgd2l0aCBpdCwKIAkJICogdGhlbiBhIGJ1ZyBoYXMgYmVlbiBpbnRyb2R1Y2VkIGluIHRoZSBxdWV1ZSByZWZpbGxpbmcKIAkJICogcm91dGluZXMgLS0gY2F0Y2ggaXQgaGVyZSAqLwotCQlCVUdfT04ocnhiID09IE5VTEwpOworCQlpZiAoV0FSTl9PTihyeGIgPT0gTlVMTCkpIHsKKwkJCWkgPSAoaSArIDEpICYgUlhfUVVFVUVfTUFTSzsKKwkJCWNvbnRpbnVlOworCQl9CiAKIAkJcnhxLT5xdWV1ZVtpXSA9IE5VTEw7CiAKQEAgLTc2MCwxMyArNjg3LDE1IEBACiAJCQkJaWYgKHctPmNtZCA9PSBwa3QtPmhkci5jbWQpIHsKIAkJCQkJdy0+dHJpZ2dlcmVkID0gdHJ1ZTsKIAkJCQkJaWYgKHctPmZuKQotCQkJCQkJdy0+Zm4ocHJpdiwgcGt0KTsKKwkJCQkJCXctPmZuKHByaXYsIHBrdCwgdy0+Zm5fZGF0YSk7CiAJCQkJfQogCQkJfQogCQkJc3Bpbl91bmxvY2soJnByaXYtPl9hZ24ubm90aWZfd2FpdF9sb2NrKTsKIAogCQkJd2FrZV91cF9hbGwoJnByaXYtPl9hZ24ubm90aWZfd2FpdHEpOwogCQl9CisJCWlmIChwcml2LT5wcmVfcnhfaGFuZGxlcikKKwkJCXByaXYtPnByZV9yeF9oYW5kbGVyKHByaXYsIHJ4Yik7CiAKIAkJLyogQmFzZWQgb24gdHlwZSBvZiBjb21tYW5kIHJlc3BvbnNlIG9yIG5vdGlmaWNhdGlvbiwKIAkJICogICBoYW5kbGUgdGhvc2UgdGhhdCBuZWVkIGhhbmRsaW5nIHZpYSBmdW5jdGlvbiBpbgpAQCAtODM3LDE5OSArNzY2LDYgQEAKIAkJaXdsYWduX3J4X3F1ZXVlX3Jlc3RvY2socHJpdik7CiB9CiAKLS8qIGNhbGwgdGhpcyBmdW5jdGlvbiB0byBmbHVzaCBhbnkgc2NoZWR1bGVkIHRhc2tsZXQgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfc3luY2hyb25pemVfaXJxKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQkvKiB3YWl0IHRvIG1ha2Ugc3VyZSB3ZSBmbHVzaCBwZW5kaW5nIHRhc2tsZXQqLwotCXN5bmNocm9uaXplX2lycShwcml2LT5wY2lfZGV2LT5pcnEpOwotCXRhc2tsZXRfa2lsbCgmcHJpdi0+aXJxX3Rhc2tsZXQpOwotfQotCi1zdGF0aWMgdm9pZCBpd2xfaXJxX3Rhc2tsZXRfbGVnYWN5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQl1MzIgaW50YSwgaGFuZGxlZCA9IDA7Ci0JdTMyIGludGFfZmg7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1MzIgaTsKLSNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotCXUzMiBpbnRhX21hc2s7Ci0jZW5kaWYKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQkvKiBBY2svY2xlYXIvcmVzZXQgcGVuZGluZyB1Q29kZSBpbnRlcnJ1cHRzLgotCSAqIE5vdGU6ICBTb21lIGJpdHMgaW4gQ1NSX0lOVCBhcmUgIk9SIiBvZiBiaXRzIGluIENTUl9GSF9JTlRfU1RBVFVTLAotCSAqICBhbmQgd2lsbCBjbGVhciBvbmx5IHdoZW4gQ1NSX0ZIX0lOVF9TVEFUVVMgZ2V0cyBjbGVhcmVkLiAqLwotCWludGEgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9JTlQpOwotCWl3bF93cml0ZTMyKHByaXYsIENTUl9JTlQsIGludGEpOwotCi0JLyogQWNrL2NsZWFyL3Jlc2V0IHBlbmRpbmcgZmxvdy1oYW5kbGVyIChETUEpIGludGVycnVwdHMuCi0JICogQW55IG5ldyBpbnRlcnJ1cHRzIHRoYXQgaGFwcGVuIGFmdGVyIHRoaXMsIGVpdGhlciB3aGlsZSB3ZSdyZQotCSAqIGluIHRoaXMgdGFza2xldCwgb3IgbGF0ZXIsIHdpbGwgc2hvdyB1cCBpbiBuZXh0IElTUi90YXNrbGV0LiAqLwotCWludGFfZmggPSBpd2xfcmVhZDMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTKTsKLQlpd2xfd3JpdGUzMihwcml2LCBDU1JfRkhfSU5UX1NUQVRVUywgaW50YV9maCk7Ci0KLSNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotCWlmIChpd2xfZ2V0X2RlYnVnX2xldmVsKHByaXYpICYgSVdMX0RMX0lTUikgewotCQkvKiBqdXN0IGZvciBkZWJ1ZyAqLwotCQlpbnRhX21hc2sgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9JTlRfTUFTSyk7Ci0JCUlXTF9ERUJVR19JU1IocHJpdiwgImludGEgMHglMDh4LCBlbmFibGVkIDB4JTA4eCwgZmggMHglMDh4XG4iLAotCQkJICAgICAgaW50YSwgaW50YV9tYXNrLCBpbnRhX2ZoKTsKLQl9Ci0jZW5kaWYKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCS8qIFNpbmNlIENTUl9JTlQgYW5kIENTUl9GSF9JTlRfU1RBVFVTIHJlYWRzIGFuZCBjbGVhcnMgYXJlIG5vdAotCSAqIGF0b21pYywgbWFrZSBzdXJlIHRoYXQgaW50YSBjb3ZlcnMgYWxsIHRoZSBpbnRlcnJ1cHRzIHRoYXQKLQkgKiB3ZSd2ZSBkaXNjb3ZlcmVkLCBldmVuIGlmIEZIIGludGVycnVwdCBjYW1lIGluIGp1c3QgYWZ0ZXIKLQkgKiByZWFkaW5nIENTUl9JTlQuICovCi0JaWYgKGludGFfZmggJiBDU1I0OV9GSF9JTlRfUlhfTUFTSykKLQkJaW50YSB8PSBDU1JfSU5UX0JJVF9GSF9SWDsKLQlpZiAoaW50YV9maCAmIENTUjQ5X0ZIX0lOVF9UWF9NQVNLKQotCQlpbnRhIHw9IENTUl9JTlRfQklUX0ZIX1RYOwotCi0JLyogTm93IHNlcnZpY2UgYWxsIGludGVycnVwdCBiaXRzIGRpc2NvdmVyZWQgYWJvdmUuICovCi0JaWYgKGludGEgJiBDU1JfSU5UX0JJVF9IV19FUlIpIHsKLQkJSVdMX0VSUihwcml2LCAiSGFyZHdhcmUgZXJyb3IgZGV0ZWN0ZWQuICBSZXN0YXJ0aW5nLlxuIik7Ci0KLQkJLyogVGVsbCB0aGUgZGV2aWNlIHRvIHN0b3Agc2VuZGluZyBpbnRlcnJ1cHRzICovCi0JCWl3bF9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7Ci0KLQkJcHJpdi0+aXNyX3N0YXRzLmh3Kys7Ci0JCWl3bF9pcnFfaGFuZGxlX2Vycm9yKHByaXYpOwotCi0JCWhhbmRsZWQgfD0gQ1NSX0lOVF9CSVRfSFdfRVJSOwotCi0JCXJldHVybjsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotCWlmIChpd2xfZ2V0X2RlYnVnX2xldmVsKHByaXYpICYgKElXTF9ETF9JU1IpKSB7Ci0JCS8qIE5JQyBmaXJlcyB0aGlzLCBidXQgd2UgZG9uJ3QgdXNlIGl0LCByZWR1bmRhbnQgd2l0aCBXQUtFVVAgKi8KLQkJaWYgKGludGEgJiBDU1JfSU5UX0JJVF9TQ0QpIHsKLQkJCUlXTF9ERUJVR19JU1IocHJpdiwgIlNjaGVkdWxlciBmaW5pc2hlZCB0byB0cmFuc21pdCAiCi0JCQkJICAgICAgInRoZSBmcmFtZS9mcmFtZXMuXG4iKTsKLQkJCXByaXYtPmlzcl9zdGF0cy5zY2grKzsKLQkJfQotCi0JCS8qIEFsaXZlIG5vdGlmaWNhdGlvbiB2aWEgUnggaW50ZXJydXB0IHdpbGwgZG8gdGhlIHJlYWwgd29yayAqLwotCQlpZiAoaW50YSAmIENTUl9JTlRfQklUX0FMSVZFKSB7Ci0JCQlJV0xfREVCVUdfSVNSKHByaXYsICJBbGl2ZSBpbnRlcnJ1cHRcbiIpOwotCQkJcHJpdi0+aXNyX3N0YXRzLmFsaXZlKys7Ci0JCX0KLQl9Ci0jZW5kaWYKLQkvKiBTYWZlbHkgaWdub3JlIHRoZXNlIGJpdHMgZm9yIGRlYnVnIGNoZWNrcyBiZWxvdyAqLwotCWludGEgJj0gfihDU1JfSU5UX0JJVF9TQ0QgfCBDU1JfSU5UX0JJVF9BTElWRSk7Ci0KLQkvKiBIVyBSRiBLSUxMIHN3aXRjaCB0b2dnbGVkICovCi0JaWYgKGludGEgJiBDU1JfSU5UX0JJVF9SRl9LSUxMKSB7Ci0JCWludCBod19yZl9raWxsID0gMDsKLQkJaWYgKCEoaXdsX3JlYWQzMihwcml2LCBDU1JfR1BfQ05UUkwpICYKLQkJCQlDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSFdfUkZfS0lMTF9TVykpCi0JCQlod19yZl9raWxsID0gMTsKLQotCQlJV0xfV0FSTihwcml2LCAiUkZfS0lMTCBiaXQgdG9nZ2xlZCB0byAlcy5cbiIsCi0JCQkJaHdfcmZfa2lsbCA/ICJkaXNhYmxlIHJhZGlvIiA6ICJlbmFibGUgcmFkaW8iKTsKLQotCQlwcml2LT5pc3Jfc3RhdHMucmZraWxsKys7Ci0KLQkJLyogZHJpdmVyIG9ubHkgbG9hZHMgdWNvZGUgb25jZSBzZXR0aW5nIHRoZSBpbnRlcmZhY2UgdXAuCi0JCSAqIHRoZSBkcml2ZXIgYWxsb3dzIGxvYWRpbmcgdGhlIHVjb2RlIGV2ZW4gaWYgdGhlIHJhZGlvCi0JCSAqIGlzIGtpbGxlZC4gSGVuY2UgdXBkYXRlIHRoZSBraWxsc3dpdGNoIHN0YXRlIGhlcmUuIFRoZQotCQkgKiByZmtpbGwgaGFuZGxlciB3aWxsIGNhcmUgYWJvdXQgcmVzdGFydGluZyBpZiBuZWVkZWQuCi0JCSAqLwotCQlpZiAoIXRlc3RfYml0KFNUQVRVU19BTElWRSwgJnByaXYtPnN0YXR1cykpIHsKLQkJCWlmIChod19yZl9raWxsKQotCQkJCXNldF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOwotCQkJZWxzZQotCQkJCWNsZWFyX2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cyk7Ci0JCQl3aXBoeV9yZmtpbGxfc2V0X2h3X3N0YXRlKHByaXYtPmh3LT53aXBoeSwgaHdfcmZfa2lsbCk7Ci0JCX0KLQotCQloYW5kbGVkIHw9IENTUl9JTlRfQklUX1JGX0tJTEw7Ci0JfQotCi0JLyogQ2hpcCBnb3QgdG9vIGhvdCBhbmQgc3RvcHBlZCBpdHNlbGYgKi8KLQlpZiAoaW50YSAmIENTUl9JTlRfQklUX0NUX0tJTEwpIHsKLQkJSVdMX0VSUihwcml2LCAiTWljcm9jb2RlIENUIGtpbGwgZXJyb3IgZGV0ZWN0ZWQuXG4iKTsKLQkJcHJpdi0+aXNyX3N0YXRzLmN0a2lsbCsrOwotCQloYW5kbGVkIHw9IENTUl9JTlRfQklUX0NUX0tJTEw7Ci0JfQotCi0JLyogRXJyb3IgZGV0ZWN0ZWQgYnkgdUNvZGUgKi8KLQlpZiAoaW50YSAmIENTUl9JTlRfQklUX1NXX0VSUikgewotCQlJV0xfRVJSKHByaXYsICJNaWNyb2NvZGUgU1cgZXJyb3IgZGV0ZWN0ZWQuICIKLQkJCSIgUmVzdGFydGluZyAweCVYLlxuIiwgaW50YSk7Ci0JCXByaXYtPmlzcl9zdGF0cy5zdysrOwotCQlpd2xfaXJxX2hhbmRsZV9lcnJvcihwcml2KTsKLQkJaGFuZGxlZCB8PSBDU1JfSU5UX0JJVF9TV19FUlI7Ci0JfQotCi0JLyoKLQkgKiB1Q29kZSB3YWtlcyB1cCBhZnRlciBwb3dlci1kb3duIHNsZWVwLgotCSAqIFRlbGwgZGV2aWNlIGFib3V0IGFueSBuZXcgdHggb3IgaG9zdCBjb21tYW5kcyBlbnF1ZXVlZCwKLQkgKiBhbmQgYWJvdXQgYW55IFJ4IGJ1ZmZlcnMgbWFkZSBhdmFpbGFibGUgd2hpbGUgYXNsZWVwLgotCSAqLwotCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfV0FLRVVQKSB7Ci0JCUlXTF9ERUJVR19JU1IocHJpdiwgIldha2V1cCBpbnRlcnJ1cHRcbiIpOwotCQlpd2xfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+cnhxKTsKLQkJZm9yIChpID0gMDsgaSA8IHByaXYtPmh3X3BhcmFtcy5tYXhfdHhxX251bTsgaSsrKQotCQkJaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT50eHFbaV0pOwotCQlwcml2LT5pc3Jfc3RhdHMud2FrZXVwKys7Ci0JCWhhbmRsZWQgfD0gQ1NSX0lOVF9CSVRfV0FLRVVQOwotCX0KLQotCS8qIEFsbCB1Q29kZSBjb21tYW5kIHJlc3BvbnNlcywgaW5jbHVkaW5nIFR4IGNvbW1hbmQgcmVzcG9uc2VzLAotCSAqIFJ4ICJyZXNwb25zZXMiIChmcmFtZS1yZWNlaXZlZCBub3RpZmljYXRpb24pLCBhbmQgb3RoZXIKLQkgKiBub3RpZmljYXRpb25zIGZyb20gdUNvZGUgY29tZSB0aHJvdWdoIGhlcmUqLwotCWlmIChpbnRhICYgKENTUl9JTlRfQklUX0ZIX1JYIHwgQ1NSX0lOVF9CSVRfU1dfUlgpKSB7Ci0JCWl3bF9yeF9oYW5kbGUocHJpdik7Ci0JCXByaXYtPmlzcl9zdGF0cy5yeCsrOwotCQloYW5kbGVkIHw9IChDU1JfSU5UX0JJVF9GSF9SWCB8IENTUl9JTlRfQklUX1NXX1JYKTsKLQl9Ci0KLQkvKiBUaGlzICJUeCIgRE1BIGNoYW5uZWwgaXMgdXNlZCBvbmx5IGZvciBsb2FkaW5nIHVDb2RlICovCi0JaWYgKGludGEgJiBDU1JfSU5UX0JJVF9GSF9UWCkgewotCQlJV0xfREVCVUdfSVNSKHByaXYsICJ1Q29kZSBsb2FkIGludGVycnVwdFxuIik7Ci0JCXByaXYtPmlzcl9zdGF0cy50eCsrOwotCQloYW5kbGVkIHw9IENTUl9JTlRfQklUX0ZIX1RYOwotCQkvKiBXYWtlIHVwIHVDb2RlIGxvYWQgcm91dGluZSwgbm93IHRoYXQgbG9hZCBpcyBjb21wbGV0ZSAqLwotCQlwcml2LT51Y29kZV93cml0ZV9jb21wbGV0ZSA9IDE7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKLQl9Ci0KLQlpZiAoaW50YSAmIH5oYW5kbGVkKSB7Ci0JCUlXTF9FUlIocHJpdiwgIlVuaGFuZGxlZCBJTlRBIGJpdHMgMHglMDh4XG4iLCBpbnRhICYgfmhhbmRsZWQpOwotCQlwcml2LT5pc3Jfc3RhdHMudW5oYW5kbGVkKys7Ci0JfQotCi0JaWYgKGludGEgJiB+KHByaXYtPmludGFfbWFzaykpIHsKLQkJSVdMX1dBUk4ocHJpdiwgIkRpc2FibGVkIElOVEEgYml0cyAweCUwOHggd2VyZSBwZW5kaW5nXG4iLAotCQkJIGludGEgJiB+cHJpdi0+aW50YV9tYXNrKTsKLQkJSVdMX1dBUk4ocHJpdiwgIiAgIHdpdGggRkhfSU5UID0gMHglMDh4XG4iLCBpbnRhX2ZoKTsKLQl9Ci0KLQkvKiBSZS1lbmFibGUgYWxsIGludGVycnVwdHMgKi8KLQkvKiBvbmx5IFJlLWVuYWJsZSBpZiBkaXNhYmxlZCBieSBpcnEgKi8KLQlpZiAodGVzdF9iaXQoU1RBVFVTX0lOVF9FTkFCTEVELCAmcHJpdi0+c3RhdHVzKSkKLQkJaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwotCS8qIFJlLWVuYWJsZSBSRl9LSUxMIGlmIGl0IG9jY3VycmVkICovCi0JZWxzZSBpZiAoaGFuZGxlZCAmIENTUl9JTlRfQklUX1JGX0tJTEwpCi0JCWl3bF9lbmFibGVfcmZraWxsX2ludChwcml2KTsKLQotI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCi0JaWYgKGl3bF9nZXRfZGVidWdfbGV2ZWwocHJpdikgJiAoSVdMX0RMX0lTUikpIHsKLQkJaW50YSA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVCk7Ci0JCWludGFfbWFzayA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsKLQkJaW50YV9maCA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMpOwotCQlJV0xfREVCVUdfSVNSKHByaXYsICJFbmQgaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCBmaCAweCUwOHgsICIKLQkJCSJmbGFncyAweCUwOGx4XG4iLCBpbnRhLCBpbnRhX21hc2ssIGludGFfZmgsIGZsYWdzKTsKLQl9Ci0jZW5kaWYKLX0KLQogLyogdGFza2xldCBmb3IgaXdsYWduIGludGVycnVwdCAqLwogc3RhdGljIHZvaWQgaXdsX2lycV90YXNrbGV0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKQEAgLTExNzEsNyArOTA3LDcgQEAKIAkJaWYgKGludGEgJiAoQ1NSX0lOVF9CSVRfRkhfUlggfCBDU1JfSU5UX0JJVF9TV19SWCkpIHsKIAkJCWhhbmRsZWQgfD0gKENTUl9JTlRfQklUX0ZIX1JYIHwgQ1NSX0lOVF9CSVRfU1dfUlgpOwogCQkJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMsCi0JCQkJCUNTUjQ5X0ZIX0lOVF9SWF9NQVNLKTsKKwkJCQkJQ1NSX0ZIX0lOVF9SWF9NQVNLKTsKIAkJfQogCQlpZiAoaW50YSAmIENTUl9JTlRfQklUX1JYX1BFUklPRElDKSB7CiAJCQloYW5kbGVkIHw9IENTUl9JTlRfQklUX1JYX1BFUklPRElDOwpAQCAtMTIwOSw3ICs5NDUsNyBAQAogCiAJLyogVGhpcyAiVHgiIERNQSBjaGFubmVsIGlzIHVzZWQgb25seSBmb3IgbG9hZGluZyB1Q29kZSAqLwogCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfRkhfVFgpIHsKLQkJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMsIENTUjQ5X0ZIX0lOVF9UWF9NQVNLKTsKKwkJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMsIENTUl9GSF9JTlRfVFhfTUFTSyk7CiAJCUlXTF9ERUJVR19JU1IocHJpdiwgInVDb2RlIGxvYWQgaW50ZXJydXB0XG4iKTsKIAkJcHJpdi0+aXNyX3N0YXRzLnR4Kys7CiAJCWhhbmRsZWQgfD0gQ1NSX0lOVF9CSVRfRkhfVFg7CkBAIC0xMzU3LDI2ICsxMDkzLDQ4IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgaXdsX2RlYWxsb2NfdWNvZGVfcGNpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bF9mcmVlX2Z3X2Rlc2Moc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsIHN0cnVjdCBmd19kZXNjICpkZXNjKQogewotCWl3bF9mcmVlX2Z3X2Rlc2MocHJpdi0+cGNpX2RldiwgJnByaXYtPnVjb2RlX2NvZGUpOwotCWl3bF9mcmVlX2Z3X2Rlc2MocHJpdi0+cGNpX2RldiwgJnByaXYtPnVjb2RlX2RhdGEpOwotCWl3bF9mcmVlX2Z3X2Rlc2MocHJpdi0+cGNpX2RldiwgJnByaXYtPnVjb2RlX2RhdGFfYmFja3VwKTsKLQlpd2xfZnJlZV9md19kZXNjKHByaXYtPnBjaV9kZXYsICZwcml2LT51Y29kZV9pbml0KTsKLQlpd2xfZnJlZV9md19kZXNjKHByaXYtPnBjaV9kZXYsICZwcml2LT51Y29kZV9pbml0X2RhdGEpOwotCWl3bF9mcmVlX2Z3X2Rlc2MocHJpdi0+cGNpX2RldiwgJnByaXYtPnVjb2RlX2Jvb3QpOworCWlmIChkZXNjLT52X2FkZHIpCisJCWRtYV9mcmVlX2NvaGVyZW50KCZwY2lfZGV2LT5kZXYsIGRlc2MtPmxlbiwKKwkJCQkgIGRlc2MtPnZfYWRkciwgZGVzYy0+cF9hZGRyKTsKKwlkZXNjLT52X2FkZHIgPSBOVUxMOworCWRlc2MtPmxlbiA9IDA7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bF9uaWNfc3RhcnQoc3RydWN0IGl3bF9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsX2ZyZWVfZndfaW1nKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LCBzdHJ1Y3QgZndfaW1nICppbWcpCiB7Ci0JLyogUmVtb3ZlIGFsbCByZXNldHMgdG8gYWxsb3cgTklDIHRvIG9wZXJhdGUgKi8KLQlpd2xfd3JpdGUzMihwcml2LCBDU1JfUkVTRVQsIDApOworCWl3bF9mcmVlX2Z3X2Rlc2MocGNpX2RldiwgJmltZy0+Y29kZSk7CisJaXdsX2ZyZWVfZndfZGVzYyhwY2lfZGV2LCAmaW1nLT5kYXRhKTsKK30KKworc3RhdGljIGludCBpd2xfYWxsb2NfZndfZGVzYyhzdHJ1Y3QgcGNpX2RldiAqcGNpX2Rldiwgc3RydWN0IGZ3X2Rlc2MgKmRlc2MsCisJCQkgICAgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pCit7CisJaWYgKCFsZW4pIHsKKwkJZGVzYy0+dl9hZGRyID0gTlVMTDsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGVzYy0+dl9hZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KCZwY2lfZGV2LT5kZXYsIGxlbiwKKwkJCQkJICAmZGVzYy0+cF9hZGRyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRlc2MtPnZfYWRkcikKKwkJcmV0dXJuIC1FTk9NRU07CisJZGVzYy0+bGVuID0gbGVuOworCW1lbWNweShkZXNjLT52X2FkZHIsIGRhdGEsIGxlbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGl3bF9kZWFsbG9jX3Vjb2RlX3BjaShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaXdsX2ZyZWVfZndfaW1nKHByaXYtPnBjaV9kZXYsICZwcml2LT51Y29kZV9ydCk7CisJaXdsX2ZyZWVfZndfaW1nKHByaXYtPnBjaV9kZXYsICZwcml2LT51Y29kZV9pbml0KTsKIH0KIAogc3RydWN0IGl3bGFnbl91Y29kZV9jYXBhYmlsaXRpZXMgewogCXUzMiBtYXhfcHJvYmVfbGVuZ3RoOwogCXUzMiBzdGFuZGFyZF9waHlfY2FsaWJyYXRpb25fc2l6ZTsKLQlib29sIHBhbjsKKwl1MzIgZmxhZ3M7CiB9OwogCiBzdGF0aWMgdm9pZCBpd2xfdWNvZGVfY2FsbGJhY2soY29uc3Qgc3RydWN0IGZpcm13YXJlICp1Y29kZV9yYXcsIHZvaWQgKmNvbnRleHQpOwpAQCAtMTQyMiw4ICsxMTgwLDggQEAKIH0KIAogc3RydWN0IGl3bGFnbl9maXJtd2FyZV9waWVjZXMgewotCWNvbnN0IHZvaWQgKmluc3QsICpkYXRhLCAqaW5pdCwgKmluaXRfZGF0YSwgKmJvb3Q7Ci0Jc2l6ZV90IGluc3Rfc2l6ZSwgZGF0YV9zaXplLCBpbml0X3NpemUsIGluaXRfZGF0YV9zaXplLCBib290X3NpemU7CisJY29uc3Qgdm9pZCAqaW5zdCwgKmRhdGEsICppbml0LCAqaW5pdF9kYXRhOworCXNpemVfdCBpbnN0X3NpemUsIGRhdGFfc2l6ZSwgaW5pdF9zaXplLCBpbml0X2RhdGFfc2l6ZTsKIAogCXUzMiBidWlsZDsKIApAQCAtMTQ0NCwyOCArMTIwMiwxOCBAQAogCiAJc3dpdGNoIChhcGlfdmVyKSB7CiAJZGVmYXVsdDoKLQkJLyoKLQkJICogNDk2NSBkb2Vzbid0IHJldmlzaW9uIHRoZSBmaXJtd2FyZSBmaWxlIGZvcm1hdAotCQkgKiBhbG9uZyB3aXRoIHRoZSBBUEkgdmVyc2lvbiwgaXQgYWx3YXlzIHVzZXMgdjEKLQkJICogZmlsZSBmb3JtYXQuCi0JCSAqLwotCQlpZiAoKHByaXYtPmh3X3JldiAmIENTUl9IV19SRVZfVFlQRV9NU0spICE9Ci0JCQkJQ1NSX0hXX1JFVl9UWVBFXzQ5NjUpIHsKLQkJCWhkcl9zaXplID0gMjg7Ci0JCQlpZiAodWNvZGVfcmF3LT5zaXplIDwgaGRyX3NpemUpIHsKLQkJCQlJV0xfRVJSKHByaXYsICJGaWxlIHNpemUgdG9vIHNtYWxsIVxuIik7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCQlwaWVjZXMtPmJ1aWxkID0gbGUzMl90b19jcHUodWNvZGUtPnUudjIuYnVpbGQpOwotCQkJcGllY2VzLT5pbnN0X3NpemUgPSBsZTMyX3RvX2NwdSh1Y29kZS0+dS52Mi5pbnN0X3NpemUpOwotCQkJcGllY2VzLT5kYXRhX3NpemUgPSBsZTMyX3RvX2NwdSh1Y29kZS0+dS52Mi5kYXRhX3NpemUpOwotCQkJcGllY2VzLT5pbml0X3NpemUgPSBsZTMyX3RvX2NwdSh1Y29kZS0+dS52Mi5pbml0X3NpemUpOwotCQkJcGllY2VzLT5pbml0X2RhdGFfc2l6ZSA9IGxlMzJfdG9fY3B1KHVjb2RlLT51LnYyLmluaXRfZGF0YV9zaXplKTsKLQkJCXBpZWNlcy0+Ym9vdF9zaXplID0gbGUzMl90b19jcHUodWNvZGUtPnUudjIuYm9vdF9zaXplKTsKLQkJCXNyYyA9IHVjb2RlLT51LnYyLmRhdGE7Ci0JCQlicmVhazsKKwkJaGRyX3NpemUgPSAyODsKKwkJaWYgKHVjb2RlX3Jhdy0+c2l6ZSA8IGhkcl9zaXplKSB7CisJCQlJV0xfRVJSKHByaXYsICJGaWxlIHNpemUgdG9vIHNtYWxsIVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQkvKiBmYWxsIHRocm91Z2ggZm9yIDQ5NjUgKi8KKwkJcGllY2VzLT5idWlsZCA9IGxlMzJfdG9fY3B1KHVjb2RlLT51LnYyLmJ1aWxkKTsKKwkJcGllY2VzLT5pbnN0X3NpemUgPSBsZTMyX3RvX2NwdSh1Y29kZS0+dS52Mi5pbnN0X3NpemUpOworCQlwaWVjZXMtPmRhdGFfc2l6ZSA9IGxlMzJfdG9fY3B1KHVjb2RlLT51LnYyLmRhdGFfc2l6ZSk7CisJCXBpZWNlcy0+aW5pdF9zaXplID0gbGUzMl90b19jcHUodWNvZGUtPnUudjIuaW5pdF9zaXplKTsKKwkJcGllY2VzLT5pbml0X2RhdGFfc2l6ZSA9IGxlMzJfdG9fY3B1KHVjb2RlLT51LnYyLmluaXRfZGF0YV9zaXplKTsKKwkJc3JjID0gdWNvZGUtPnUudjIuZGF0YTsKKwkJYnJlYWs7CiAJY2FzZSAwOgogCWNhc2UgMToKIAljYXNlIDI6CkBAIC0xNDc5LDcgKzEyMjcsNiBAQAogCQlwaWVjZXMtPmRhdGFfc2l6ZSA9IGxlMzJfdG9fY3B1KHVjb2RlLT51LnYxLmRhdGFfc2l6ZSk7CiAJCXBpZWNlcy0+aW5pdF9zaXplID0gbGUzMl90b19jcHUodWNvZGUtPnUudjEuaW5pdF9zaXplKTsKIAkJcGllY2VzLT5pbml0X2RhdGFfc2l6ZSA9IGxlMzJfdG9fY3B1KHVjb2RlLT51LnYxLmluaXRfZGF0YV9zaXplKTsKLQkJcGllY2VzLT5ib290X3NpemUgPSBsZTMyX3RvX2NwdSh1Y29kZS0+dS52MS5ib290X3NpemUpOwogCQlzcmMgPSB1Y29kZS0+dS52MS5kYXRhOwogCQlicmVhazsKIAl9CkBAIC0xNDg3LDcgKzEyMzQsNyBAQAogCS8qIFZlcmlmeSBzaXplIG9mIGZpbGUgdnMuIGltYWdlIHNpemUgaW5mbyBpbiBmaWxlJ3MgaGVhZGVyICovCiAJaWYgKHVjb2RlX3Jhdy0+c2l6ZSAhPSBoZHJfc2l6ZSArIHBpZWNlcy0+aW5zdF9zaXplICsKIAkJCQlwaWVjZXMtPmRhdGFfc2l6ZSArIHBpZWNlcy0+aW5pdF9zaXplICsKLQkJCQlwaWVjZXMtPmluaXRfZGF0YV9zaXplICsgcGllY2VzLT5ib290X3NpemUpIHsKKwkJCQlwaWVjZXMtPmluaXRfZGF0YV9zaXplKSB7CiAKIAkJSVdMX0VSUihwcml2LAogCQkJInVDb2RlIGZpbGUgc2l6ZSAlZCBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBzaXplXG4iLApAQCAtMTUwMyw4ICsxMjUwLDYgQEAKIAlzcmMgKz0gcGllY2VzLT5pbml0X3NpemU7CiAJcGllY2VzLT5pbml0X2RhdGEgPSBzcmM7CiAJc3JjICs9IHBpZWNlcy0+aW5pdF9kYXRhX3NpemU7Ci0JcGllY2VzLT5ib290ID0gc3JjOwotCXNyYyArPSBwaWVjZXMtPmJvb3Rfc2l6ZTsKIAogCXJldHVybiAwOwogfQpAQCAtMTYwNSw4ICsxMzUwLDcgQEAKIAkJCXBpZWNlcy0+aW5pdF9kYXRhX3NpemUgPSB0bHZfbGVuOwogCQkJYnJlYWs7CiAJCWNhc2UgSVdMX1VDT0RFX1RMVl9CT09UOgotCQkJcGllY2VzLT5ib290ID0gdGx2X2RhdGE7Ci0JCQlwaWVjZXMtPmJvb3Rfc2l6ZSA9IHRsdl9sZW47CisJCQlJV0xfRVJSKHByaXYsICJGb3VuZCB1bmV4cGVjdGVkIEJPT1QgdWNvZGVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgSVdMX1VDT0RFX1RMVl9QUk9CRV9NQVhfTEVOOgogCQkJaWYgKHRsdl9sZW4gIT0gc2l6ZW9mKHUzMikpCkBAIC0xNjE3LDcgKzEzNjEsMjMgQEAKIAkJY2FzZSBJV0xfVUNPREVfVExWX1BBTjoKIAkJCWlmICh0bHZfbGVuKQogCQkJCWdvdG8gaW52YWxpZF90bHZfbGVuOwotCQkJY2FwYS0+cGFuID0gdHJ1ZTsKKwkJCWNhcGEtPmZsYWdzIHw9IElXTF9VQ09ERV9UTFZfRkxBR1NfUEFOOworCQkJYnJlYWs7CisJCWNhc2UgSVdMX1VDT0RFX1RMVl9GTEFHUzoKKwkJCS8qIG11c3QgYmUgYXQgbGVhc3Qgb25lIHUzMiAqLworCQkJaWYgKHRsdl9sZW4gPCBzaXplb2YodTMyKSkKKwkJCQlnb3RvIGludmFsaWRfdGx2X2xlbjsKKwkJCS8qIGFuZCBhIHByb3BlciBudW1iZXIgb2YgdTMycyAqLworCQkJaWYgKHRsdl9sZW4gJSBzaXplb2YodTMyKSkKKwkJCQlnb3RvIGludmFsaWRfdGx2X2xlbjsKKwkJCS8qCisJCQkgKiBUaGlzIGRyaXZlciBvbmx5IHJlYWRzIHRoZSBmaXJzdCB1MzIgYXMKKwkJCSAqIHJpZ2h0IG5vdyBubyBtb3JlIGZlYXR1cmVzIGFyZSBkZWZpbmVkLAorCQkJICogaWYgdGhhdCBjaGFuZ2VzIHRoZW4gZWl0aGVyIHRoZSBkcml2ZXIKKwkJCSAqIHdpbGwgbm90IHdvcmsgd2l0aCB0aGUgbmV3IGZpcm13YXJlLCBvcgorCQkJICogaXQnbGwgbm90IHRha2UgYWR2YW50YWdlIG9mIG5ldyBmZWF0dXJlcy4KKwkJCSAqLworCQkJY2FwYS0+ZmxhZ3MgPSBsZTMyX3RvX2NwdXAoKF9fbGUzMiAqKXRsdl9kYXRhKTsKIAkJCWJyZWFrOwogCQljYXNlIElXTF9VQ09ERV9UTFZfSU5JVF9FVlRMT0dfUFRSOgogCQkJaWYgKHRsdl9sZW4gIT0gc2l6ZW9mKHUzMikpCkBAIC0xNjY3LDcgKzE0MjcsNyBAQAogCQkJCQlsZTMyX3RvX2NwdXAoKF9fbGUzMiAqKXRsdl9kYXRhKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJSVdMX1dBUk4ocHJpdiwgInVua25vd24gVExWOiAlZFxuIiwgdGx2X3R5cGUpOworCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgInVua25vd24gVExWOiAlZFxuIiwgdGx2X3R5cGUpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0xODA2LDggKzE1NjYsNiBAQAogCQkgICAgICAgcGllY2VzLmluaXRfc2l6ZSk7CiAJSVdMX0RFQlVHX0lORk8ocHJpdiwgImYvdyBwYWNrYWdlIGhkciBpbml0IGRhdGEgc2l6ZSA9ICVaZFxuIiwKIAkJICAgICAgIHBpZWNlcy5pbml0X2RhdGFfc2l6ZSk7Ci0JSVdMX0RFQlVHX0lORk8ocHJpdiwgImYvdyBwYWNrYWdlIGhkciBib290IGluc3Qgc2l6ZSA9ICVaZFxuIiwKLQkJICAgICAgIHBpZWNlcy5ib290X3NpemUpOwogCiAJLyogVmVyaWZ5IHRoYXQgdUNvZGUgaW1hZ2VzIHdpbGwgZml0IGluIGNhcmQncyBTUkFNICovCiAJaWYgKHBpZWNlcy5pbnN0X3NpemUgPiBwcml2LT5od19wYXJhbXMubWF4X2luc3Rfc2l6ZSkgewpAQCAtMTgzNCw0OCArMTU5MiwyNSBAQAogCQlnb3RvIHRyeV9hZ2FpbjsKIAl9CiAKLQlpZiAocGllY2VzLmJvb3Rfc2l6ZSA+IHByaXYtPmh3X3BhcmFtcy5tYXhfYnNtX3NpemUpIHsKLQkJSVdMX0VSUihwcml2LCAidUNvZGUgYm9vdCBpbnN0ciBsZW4gJVpkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCi0JCQlwaWVjZXMuYm9vdF9zaXplKTsKLQkJZ290byB0cnlfYWdhaW47Ci0JfQotCiAJLyogQWxsb2NhdGUgdWNvZGUgYnVmZmVycyBmb3IgY2FyZCdzIGJ1cy1tYXN0ZXIgbG9hZGluZyAuLi4gKi8KIAogCS8qIFJ1bnRpbWUgaW5zdHJ1Y3Rpb25zIGFuZCAyIGNvcGllcyBvZiBkYXRhOgogCSAqIDEpIHVubW9kaWZpZWQgZnJvbSBkaXNrCiAJICogMikgYmFja3VwIGNhY2hlIGZvciBzYXZlL3Jlc3RvcmUgZHVyaW5nIHBvd2VyLWRvd25zICovCi0JcHJpdi0+dWNvZGVfY29kZS5sZW4gPSBwaWVjZXMuaW5zdF9zaXplOwotCWl3bF9hbGxvY19md19kZXNjKHByaXYtPnBjaV9kZXYsICZwcml2LT51Y29kZV9jb2RlKTsKLQotCXByaXYtPnVjb2RlX2RhdGEubGVuID0gcGllY2VzLmRhdGFfc2l6ZTsKLQlpd2xfYWxsb2NfZndfZGVzYyhwcml2LT5wY2lfZGV2LCAmcHJpdi0+dWNvZGVfZGF0YSk7Ci0KLQlwcml2LT51Y29kZV9kYXRhX2JhY2t1cC5sZW4gPSBwaWVjZXMuZGF0YV9zaXplOwotCWl3bF9hbGxvY19md19kZXNjKHByaXYtPnBjaV9kZXYsICZwcml2LT51Y29kZV9kYXRhX2JhY2t1cCk7Ci0KLQlpZiAoIXByaXYtPnVjb2RlX2NvZGUudl9hZGRyIHx8ICFwcml2LT51Y29kZV9kYXRhLnZfYWRkciB8fAotCSAgICAhcHJpdi0+dWNvZGVfZGF0YV9iYWNrdXAudl9hZGRyKQorCWlmIChpd2xfYWxsb2NfZndfZGVzYyhwcml2LT5wY2lfZGV2LCAmcHJpdi0+dWNvZGVfcnQuY29kZSwKKwkJCSAgICAgIHBpZWNlcy5pbnN0LCBwaWVjZXMuaW5zdF9zaXplKSkKKwkJZ290byBlcnJfcGNpX2FsbG9jOworCWlmIChpd2xfYWxsb2NfZndfZGVzYyhwcml2LT5wY2lfZGV2LCAmcHJpdi0+dWNvZGVfcnQuZGF0YSwKKwkJCSAgICAgIHBpZWNlcy5kYXRhLCBwaWVjZXMuZGF0YV9zaXplKSkKIAkJZ290byBlcnJfcGNpX2FsbG9jOwogCiAJLyogSW5pdGlhbGl6YXRpb24gaW5zdHJ1Y3Rpb25zIGFuZCBkYXRhICovCiAJaWYgKHBpZWNlcy5pbml0X3NpemUgJiYgcGllY2VzLmluaXRfZGF0YV9zaXplKSB7Ci0JCXByaXYtPnVjb2RlX2luaXQubGVuID0gcGllY2VzLmluaXRfc2l6ZTsKLQkJaXdsX2FsbG9jX2Z3X2Rlc2MocHJpdi0+cGNpX2RldiwgJnByaXYtPnVjb2RlX2luaXQpOwotCi0JCXByaXYtPnVjb2RlX2luaXRfZGF0YS5sZW4gPSBwaWVjZXMuaW5pdF9kYXRhX3NpemU7Ci0JCWl3bF9hbGxvY19md19kZXNjKHByaXYtPnBjaV9kZXYsICZwcml2LT51Y29kZV9pbml0X2RhdGEpOwotCi0JCWlmICghcHJpdi0+dWNvZGVfaW5pdC52X2FkZHIgfHwgIXByaXYtPnVjb2RlX2luaXRfZGF0YS52X2FkZHIpCisJCWlmIChpd2xfYWxsb2NfZndfZGVzYyhwcml2LT5wY2lfZGV2LCAmcHJpdi0+dWNvZGVfaW5pdC5jb2RlLAorCQkJCSAgICAgIHBpZWNlcy5pbml0LCBwaWVjZXMuaW5pdF9zaXplKSkKIAkJCWdvdG8gZXJyX3BjaV9hbGxvYzsKLQl9Ci0KLQkvKiBCb290c3RyYXAgKGluc3RydWN0aW9ucyBvbmx5LCBubyBkYXRhKSAqLwotCWlmIChwaWVjZXMuYm9vdF9zaXplKSB7Ci0JCXByaXYtPnVjb2RlX2Jvb3QubGVuID0gcGllY2VzLmJvb3Rfc2l6ZTsKLQkJaXdsX2FsbG9jX2Z3X2Rlc2MocHJpdi0+cGNpX2RldiwgJnByaXYtPnVjb2RlX2Jvb3QpOwotCi0JCWlmICghcHJpdi0+dWNvZGVfYm9vdC52X2FkZHIpCisJCWlmIChpd2xfYWxsb2NfZndfZGVzYyhwcml2LT5wY2lfZGV2LCAmcHJpdi0+dWNvZGVfaW5pdC5kYXRhLAorCQkJCSAgICAgIHBpZWNlcy5pbml0X2RhdGEsIHBpZWNlcy5pbml0X2RhdGFfc2l6ZSkpCiAJCQlnb3RvIGVycl9wY2lfYWxsb2M7CiAJfQogCkBAIC0xOTAxLDUwICsxNjM2LDE5IEBACiAJCQlwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5tYXhfZXZlbnRfbG9nX3NpemU7CiAJcHJpdi0+X2Fnbi5pbnN0X2VycmxvZ19wdHIgPSBwaWVjZXMuaW5zdF9lcnJsb2dfcHRyOwogCi0JaWYgKHVjb2RlX2NhcGEucGFuKSB7CisJcHJpdi0+bmV3X3NjYW5fdGhyZXNob2xkX2JlaGF2aW91ciA9CisJCSEhKHVjb2RlX2NhcGEuZmxhZ3MgJiBJV0xfVUNPREVfVExWX0ZMQUdTX05FV1NDQU4pOworCisJaWYgKHVjb2RlX2NhcGEuZmxhZ3MgJiBJV0xfVUNPREVfVExWX0ZMQUdTX1BBTikgewogCQlwcml2LT52YWxpZF9jb250ZXh0cyB8PSBCSVQoSVdMX1JYT05fQ1RYX1BBTik7CiAJCXByaXYtPnN0YV9rZXlfbWF4X251bSA9IFNUQV9LRVlfTUFYX05VTV9QQU47CiAJfSBlbHNlCiAJCXByaXYtPnN0YV9rZXlfbWF4X251bSA9IFNUQV9LRVlfTUFYX05VTTsKIAotCS8qIENvcHkgaW1hZ2VzIGludG8gYnVmZmVycyBmb3IgY2FyZCdzIGJ1cy1tYXN0ZXIgcmVhZHMgLi4uICovCi0KLQkvKiBSdW50aW1lIGluc3RydWN0aW9ucyAoZmlyc3QgYmxvY2sgb2YgZGF0YSBpbiBmaWxlKSAqLwotCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIHVDb2RlIGluc3RyIGxlbiAlWmRcbiIsCi0JCQlwaWVjZXMuaW5zdF9zaXplKTsKLQltZW1jcHkocHJpdi0+dWNvZGVfY29kZS52X2FkZHIsIHBpZWNlcy5pbnN0LCBwaWVjZXMuaW5zdF9zaXplKTsKLQotCUlXTF9ERUJVR19JTkZPKHByaXYsICJ1Q29kZSBpbnN0ciBidWYgdmFkZHIgPSAweCVwLCBwYWRkciA9IDB4JTA4eFxuIiwKLQkJcHJpdi0+dWNvZGVfY29kZS52X2FkZHIsICh1MzIpcHJpdi0+dWNvZGVfY29kZS5wX2FkZHIpOwotCi0JLyoKLQkgKiBSdW50aW1lIGRhdGEKLQkgKiBOT1RFOiAgQ29weSBpbnRvIGJhY2t1cCBidWZmZXIgd2lsbCBiZSBkb25lIGluIGl3bF91cCgpCi0JICovCi0JSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgdUNvZGUgZGF0YSBsZW4gJVpkXG4iLAotCQkJcGllY2VzLmRhdGFfc2l6ZSk7Ci0JbWVtY3B5KHByaXYtPnVjb2RlX2RhdGEudl9hZGRyLCBwaWVjZXMuZGF0YSwgcGllY2VzLmRhdGFfc2l6ZSk7Ci0JbWVtY3B5KHByaXYtPnVjb2RlX2RhdGFfYmFja3VwLnZfYWRkciwgcGllY2VzLmRhdGEsIHBpZWNlcy5kYXRhX3NpemUpOwotCi0JLyogSW5pdGlhbGl6YXRpb24gaW5zdHJ1Y3Rpb25zICovCi0JaWYgKHBpZWNlcy5pbml0X3NpemUpIHsKLQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgaW5pdCBpbnN0ciBsZW4gJVpkXG4iLAotCQkJCXBpZWNlcy5pbml0X3NpemUpOwotCQltZW1jcHkocHJpdi0+dWNvZGVfaW5pdC52X2FkZHIsIHBpZWNlcy5pbml0LCBwaWVjZXMuaW5pdF9zaXplKTsKLQl9Ci0KLQkvKiBJbml0aWFsaXphdGlvbiBkYXRhICovCi0JaWYgKHBpZWNlcy5pbml0X2RhdGFfc2l6ZSkgewotCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSBpbml0IGRhdGEgbGVuICVaZFxuIiwKLQkJCSAgICAgICBwaWVjZXMuaW5pdF9kYXRhX3NpemUpOwotCQltZW1jcHkocHJpdi0+dWNvZGVfaW5pdF9kYXRhLnZfYWRkciwgcGllY2VzLmluaXRfZGF0YSwKLQkJICAgICAgIHBpZWNlcy5pbml0X2RhdGFfc2l6ZSk7Ci0JfQotCi0JLyogQm9vdHN0cmFwIGluc3RydWN0aW9ucyAqLwotCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIGJvb3QgaW5zdHIgbGVuICVaZFxuIiwKLQkJCXBpZWNlcy5ib290X3NpemUpOwotCW1lbWNweShwcml2LT51Y29kZV9ib290LnZfYWRkciwgcGllY2VzLmJvb3QsIHBpZWNlcy5ib290X3NpemUpOworCWlmIChwcml2LT52YWxpZF9jb250ZXh0cyAhPSBCSVQoSVdMX1JYT05fQ1RYX0JTUykpCisJCXByaXYtPmNtZF9xdWV1ZSA9IElXTF9JUEFOX0NNRF9RVUVVRV9OVU07CisJZWxzZQorCQlwcml2LT5jbWRfcXVldWUgPSBJV0xfREVGQVVMVF9DTURfUVVFVUVfTlVNOwogCiAJLyoKIAkgKiBmaWd1cmUgb3V0IHRoZSBvZmZzZXQgb2YgY2hhaW4gbm9pc2UgcmVzZXQgYW5kIGdhaW4gY29tbWFuZHMKQEAgLTIwNjIsNyArMTc2Niw3IEBACiAJbWF4ID0gQVJSQVlfU0laRShhZHZhbmNlZF9sb29rdXApIC0gMTsKIAlmb3IgKGkgPSAwOyBpIDwgbWF4OyBpKyspIHsKIAkJaWYgKGFkdmFuY2VkX2xvb2t1cFtpXS5udW0gPT0gbnVtKQotCQkJYnJlYWs7OworCQkJYnJlYWs7CiAJfQogCXJldHVybiBhZHZhbmNlZF9sb29rdXBbaV0ubmFtZTsKIH0KQEAgLTIwNzYsMTMgKzE3ODAsMTMgQEAKIAl1MzIgZGVzYywgdGltZSwgY291bnQsIGJhc2UsIGRhdGExOwogCXUzMiBibGluazEsIGJsaW5rMiwgaWxpbmsxLCBpbGluazI7CiAJdTMyIHBjLCBoY21kOworCXN0cnVjdCBpd2xfZXJyb3JfZXZlbnRfdGFibGUgdGFibGU7CiAKLQlpZiAocHJpdi0+dWNvZGVfdHlwZSA9PSBVQ09ERV9JTklUKSB7Ci0JCWJhc2UgPSBsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlX2luaXQuZXJyb3JfZXZlbnRfdGFibGVfcHRyKTsKKwliYXNlID0gcHJpdi0+ZGV2aWNlX3BvaW50ZXJzLmVycm9yX2V2ZW50X3RhYmxlOworCWlmIChwcml2LT51Y29kZV90eXBlID09IFVDT0RFX1NVQlRZUEVfSU5JVCkgewogCQlpZiAoIWJhc2UpCiAJCQliYXNlID0gcHJpdi0+X2Fnbi5pbml0X2VycmxvZ19wdHI7CiAJfSBlbHNlIHsKLQkJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmUuZXJyb3JfZXZlbnRfdGFibGVfcHRyKTsKIAkJaWYgKCFiYXNlKQogCQkJYmFzZSA9IHByaXYtPl9hZ24uaW5zdF9lcnJsb2dfcHRyOwogCX0KQEAgLTIwOTAsMTEgKzE3OTQsMTUgQEAKIAlpZiAoIXByaXYtPmNmZy0+b3BzLT5saWItPmlzX3ZhbGlkX3J0Y19kYXRhX2FkZHIoYmFzZSkpIHsKIAkJSVdMX0VSUihwcml2LAogCQkJIk5vdCB2YWxpZCBlcnJvciBsb2cgcG9pbnRlciAweCUwOFggZm9yICVzIHVDb2RlXG4iLAotCQkJYmFzZSwgKHByaXYtPnVjb2RlX3R5cGUgPT0gVUNPREVfSU5JVCkgPyAiSW5pdCIgOiAiUlQiKTsKKwkJCWJhc2UsCisJCQkocHJpdi0+dWNvZGVfdHlwZSA9PSBVQ09ERV9TVUJUWVBFX0lOSVQpCisJCQkJCT8gIkluaXQiIDogIlJUIik7CiAJCXJldHVybjsKIAl9CiAKLQljb3VudCA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UpOworCWl3bF9yZWFkX3RhcmdfbWVtX3dvcmRzKHByaXYsIGJhc2UsICZ0YWJsZSwgc2l6ZW9mKHRhYmxlKSk7CisKKwljb3VudCA9IHRhYmxlLnZhbGlkOwogCiAJaWYgKEVSUk9SX1NUQVJUX09GRlNFVCA8PSBjb3VudCAqIEVSUk9SX0VMRU1fU0laRSkgewogCQlJV0xfRVJSKHByaXYsICJTdGFydCBJV0wgRXJyb3IgTG9nIER1bXA6XG4iKTsKQEAgLTIxMDIsMTggKzE4MTAsMTggQEAKIAkJCXByaXYtPnN0YXR1cywgY291bnQpOwogCX0KIAotCWRlc2MgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgMSAqIHNpemVvZih1MzIpKTsKKwlkZXNjID0gdGFibGUuZXJyb3JfaWQ7CiAJcHJpdi0+aXNyX3N0YXRzLmVycl9jb2RlID0gZGVzYzsKLQlwYyA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAyICogc2l6ZW9mKHUzMikpOwotCWJsaW5rMSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAzICogc2l6ZW9mKHUzMikpOwotCWJsaW5rMiA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyA0ICogc2l6ZW9mKHUzMikpOwotCWlsaW5rMSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyA1ICogc2l6ZW9mKHUzMikpOwotCWlsaW5rMiA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyA2ICogc2l6ZW9mKHUzMikpOwotCWRhdGExID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDcgKiBzaXplb2YodTMyKSk7Ci0JZGF0YTIgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgOCAqIHNpemVvZih1MzIpKTsKLQlsaW5lID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDkgKiBzaXplb2YodTMyKSk7Ci0JdGltZSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAxMSAqIHNpemVvZih1MzIpKTsKLQloY21kID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDIyICogc2l6ZW9mKHUzMikpOworCXBjID0gdGFibGUucGM7CisJYmxpbmsxID0gdGFibGUuYmxpbmsxOworCWJsaW5rMiA9IHRhYmxlLmJsaW5rMjsKKwlpbGluazEgPSB0YWJsZS5pbGluazE7CisJaWxpbmsyID0gdGFibGUuaWxpbmsyOworCWRhdGExID0gdGFibGUuZGF0YTE7CisJZGF0YTIgPSB0YWJsZS5kYXRhMjsKKwlsaW5lID0gdGFibGUubGluZTsKKwl0aW1lID0gdGFibGUudHNmX2xvdzsKKwloY21kID0gdGFibGUuaGNtZDsKIAogCXRyYWNlX2l3bHdpZmlfZGV2X3Vjb2RlX2Vycm9yKHByaXYsIGRlc2MsIHRpbWUsIGRhdGExLCBkYXRhMiwgbGluZSwKIAkJCQkgICAgICBibGluazEsIGJsaW5rMiwgaWxpbmsxLCBpbGluazIpOwpAQCAtMjE0NywxMiArMTg1NSwxMSBAQAogCWlmIChudW1fZXZlbnRzID09IDApCiAJCXJldHVybiBwb3M7CiAKLQlpZiAocHJpdi0+dWNvZGVfdHlwZSA9PSBVQ09ERV9JTklUKSB7Ci0JCWJhc2UgPSBsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlX2luaXQubG9nX2V2ZW50X3RhYmxlX3B0cik7CisJYmFzZSA9IHByaXYtPmRldmljZV9wb2ludGVycy5sb2dfZXZlbnRfdGFibGU7CisJaWYgKHByaXYtPnVjb2RlX3R5cGUgPT0gVUNPREVfU1VCVFlQRV9JTklUKSB7CiAJCWlmICghYmFzZSkKIAkJCWJhc2UgPSBwcml2LT5fYWduLmluaXRfZXZ0bG9nX3B0cjsKIAl9IGVsc2UgewotCQliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZS5sb2dfZXZlbnRfdGFibGVfcHRyKTsKIAkJaWYgKCFiYXNlKQogCQkJYmFzZSA9IHByaXYtPl9hZ24uaW5zdF9ldnRsb2dfcHRyOwogCX0KQEAgLTIxNjksMTQgKzE4NzYsMTQgQEAKIAlpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCiAJLyogU2V0IHN0YXJ0aW5nIGFkZHJlc3M7IHJlYWRzIHdpbGwgYXV0by1pbmNyZW1lbnQgKi8KLQlfaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkFERFIsIHB0cik7CisJaXdsX3dyaXRlMzIocHJpdiwgSEJVU19UQVJHX01FTV9SQUREUiwgcHRyKTsKIAlybWIoKTsKIAogCS8qICJ0aW1lIiBpcyBhY3R1YWxseSAiZGF0YSIgZm9yIG1vZGUgMCAobm8gdGltZXN0YW1wKS4KIAkqIHBsYWNlIGV2ZW50IGlkICMgYXQgZmFyIHJpZ2h0IGZvciBlYXNpZXIgdmlzdWFsIHBhcnNpbmcuICovCiAJZm9yIChpID0gMDsgaSA8IG51bV9ldmVudHM7IGkrKykgewotCQlldiA9IF9pd2xfcmVhZF9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOwotCQl0aW1lID0gX2l3bF9yZWFkX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7CisJCWV2ID0gaXdsX3JlYWQzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOworCQl0aW1lID0gaXdsX3JlYWQzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOwogCQlpZiAobW9kZSA9PSAwKSB7CiAJCQkvKiBkYXRhLCBldiAqLwogCQkJaWYgKGJ1ZnN6KSB7CkBAIC0yMTkwLDcgKzE4OTcsNyBAQAogCQkJCQl0aW1lLCBldik7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQlkYXRhID0gX2l3bF9yZWFkX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7CisJCQlkYXRhID0gaXdsX3JlYWQzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOwogCQkJaWYgKGJ1ZnN6KSB7CiAJCQkJcG9zICs9IHNjbnByaW50ZigqYnVmICsgcG9zLCBidWZzeiAtIHBvcywKIAkJCQkJCSJFVlRfTE9HVDolMDEwdToweCUwOHg6JTA0dVxuIiwKQEAgLTIyNjEsMTMgKzE5NjgsMTIgQEAKIAlpbnQgcG9zID0gMDsKIAlzaXplX3QgYnVmc3ogPSAwOwogCi0JaWYgKHByaXYtPnVjb2RlX3R5cGUgPT0gVUNPREVfSU5JVCkgewotCQliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LmxvZ19ldmVudF90YWJsZV9wdHIpOworCWJhc2UgPSBwcml2LT5kZXZpY2VfcG9pbnRlcnMubG9nX2V2ZW50X3RhYmxlOworCWlmIChwcml2LT51Y29kZV90eXBlID09IFVDT0RFX1NVQlRZUEVfSU5JVCkgewogCQlsb2dzaXplID0gcHJpdi0+X2Fnbi5pbml0X2V2dGxvZ19zaXplOwogCQlpZiAoIWJhc2UpCiAJCQliYXNlID0gcHJpdi0+X2Fnbi5pbml0X2V2dGxvZ19wdHI7CiAJfSBlbHNlIHsKLQkJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmUubG9nX2V2ZW50X3RhYmxlX3B0cik7CiAJCWxvZ3NpemUgPSBwcml2LT5fYWduLmluc3RfZXZ0bG9nX3NpemU7CiAJCWlmICghYmFzZSkKIAkJCWJhc2UgPSBwcml2LT5fYWduLmluc3RfZXZ0bG9nX3B0cjsKQEAgLTIyNzYsNyArMTk4Miw5IEBACiAJaWYgKCFwcml2LT5jZmctPm9wcy0+bGliLT5pc192YWxpZF9ydGNfZGF0YV9hZGRyKGJhc2UpKSB7CiAJCUlXTF9FUlIocHJpdiwKIAkJCSJJbnZhbGlkIGV2ZW50IGxvZyBwb2ludGVyIDB4JTA4WCBmb3IgJXMgdUNvZGVcbiIsCi0JCQliYXNlLCAocHJpdi0+dWNvZGVfdHlwZSA9PSBVQ09ERV9JTklUKSA/ICJJbml0IiA6ICJSVCIpOworCQkJYmFzZSwKKwkJCShwcml2LT51Y29kZV90eXBlID09IFVDT0RFX1NVQlRZUEVfSU5JVCkKKwkJCQkJPyAiSW5pdCIgOiAiUlQiKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0yNDIzLDMxICsyMTMxLDE1IEBACiAgKiAgICAgICAgICAgICAgICAgICBmcm9tIHByb3RvY29sL3J1bnRpbWUgdUNvZGUgKGluaXRpYWxpemF0aW9uIHVDb2RlJ3MKICAqICAgICAgICAgICAgICAgICAgIEFsaXZlIGdldHMgaGFuZGxlZCBieSBpd2xfaW5pdF9hbGl2ZV9zdGFydCgpKS4KICAqLwotc3RhdGljIHZvaWQgaXdsX2FsaXZlX3N0YXJ0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK2ludCBpd2xfYWxpdmVfc3RhcnQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByZXQgPSAwOwogCXN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHggPSAmcHJpdi0+Y29udGV4dHNbSVdMX1JYT05fQ1RYX0JTU107CiAKKwlpd2xfcmVzZXRfaWN0KHByaXYpOworCiAJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJ1bnRpbWUgQWxpdmUgcmVjZWl2ZWQuXG4iKTsKIAotCS8qIEluaXRpYWxpemUgdUNvZGUgaGFzIGxvYWRlZCBSdW50aW1lIHVDb2RlIC4uLiB2ZXJpZnkgaW5zdCBpbWFnZS4KLQkgKiBUaGlzIGlzIGEgcGFyYW5vaWQgY2hlY2ssIGJlY2F1c2Ugd2Ugd291bGQgbm90IGhhdmUgZ290dGVuIHRoZQotCSAqICJydW50aW1lIiBhbGl2ZSBpZiBjb2RlIHdlcmVuJ3QgcHJvcGVybHkgbG9hZGVkLiAgKi8KLQlpZiAoaXdsX3ZlcmlmeV91Y29kZShwcml2KSkgewotCQkvKiBSdW50aW1lIGluc3RydWN0aW9uIGxvYWQgd2FzIGJhZDsKLQkJICogdGFrZSBpdCBhbGwgdGhlIHdheSBiYWNrIGRvd24gc28gd2UgY2FuIHRyeSBhZ2FpbiAqLwotCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQmFkIHJ1bnRpbWUgdUNvZGUgbG9hZC5cbiIpOwotCQlnb3RvIHJlc3RhcnQ7Ci0JfQotCi0JcmV0ID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YWxpdmVfbm90aWZ5KHByaXYpOwotCWlmIChyZXQpIHsKLQkJSVdMX1dBUk4ocHJpdiwKLQkJCSJDb3VsZCBub3QgY29tcGxldGUgQUxJVkUgdHJhbnNpdGlvbiBbbnRmXTogJWRcbiIsIHJldCk7Ci0JCWdvdG8gcmVzdGFydDsKLQl9Ci0KLQogCS8qIEFmdGVyIHRoZSBBTElWRSByZXNwb25zZSwgd2UgY2FuIHNlbmQgaG9zdCBjb21tYW5kcyB0byB0aGUgdUNvZGUgKi8KIAlzZXRfYml0KFNUQVRVU19BTElWRSwgJnByaXYtPnN0YXR1cyk7CiAKQEAgLTI0NTUsNyArMjE0Nyw3IEBACiAJaXdsX3NldHVwX3dhdGNoZG9nKHByaXYpOwogCiAJaWYgKGl3bF9pc19yZmtpbGwocHJpdikpCi0JCXJldHVybjsKKwkJcmV0dXJuIC1FUkZLSUxMOwogCiAJLyogZG93bmxvYWQgcHJpb3JpdHkgdGFibGUgYmVmb3JlIGFueSBjYWxpYnJhdGlvbiByZXF1ZXN0ICovCiAJaWYgKHByaXYtPmNmZy0+YnRfcGFyYW1zICYmCkBAIC0yNDY5LDEwICsyMTYxLDE0IEBACiAJCWl3bGFnbl9zZW5kX3ByaW9fdGJsKHByaXYpOwogCiAJCS8qIEZJWE1FOiB3L2EgdG8gZm9yY2UgY2hhbmdlIHVDb2RlIEJUIHN0YXRlIG1hY2hpbmUgKi8KLQkJaXdsYWduX3NlbmRfYnRfZW52KHByaXYsIElXTF9CVF9DT0VYX0VOVl9PUEVOLAotCQkJQlRfQ09FWF9QUklPX1RCTF9FVlRfSU5JVF9DQUxJQjIpOwotCQlpd2xhZ25fc2VuZF9idF9lbnYocHJpdiwgSVdMX0JUX0NPRVhfRU5WX0NMT1NFLAotCQkJQlRfQ09FWF9QUklPX1RCTF9FVlRfSU5JVF9DQUxJQjIpOworCQlyZXQgPSBpd2xhZ25fc2VuZF9idF9lbnYocHJpdiwgSVdMX0JUX0NPRVhfRU5WX09QRU4sCisJCQkJCSBCVF9DT0VYX1BSSU9fVEJMX0VWVF9JTklUX0NBTElCMik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlyZXQgPSBpd2xhZ25fc2VuZF9idF9lbnYocHJpdiwgSVdMX0JUX0NPRVhfRU5WX0NMT1NFLAorCQkJCQkgQlRfQ09FWF9QUklPX1RCTF9FVlRfSU5JVF9DQUxJQjIpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKIAl9CiAJaWYgKHByaXYtPmh3X3BhcmFtcy5jYWxpYl9ydF9jZmcpCiAJCWl3bGFnbl9zZW5kX2NhbGliX2NmZ19ydChwcml2LCBwcml2LT5od19wYXJhbXMuY2FsaWJfcnRfY2ZnKTsKQEAgLTI1MTQsMzAgKzIyMTAsMjMgQEAKIAlzZXRfYml0KFNUQVRVU19SRUFEWSwgJnByaXYtPnN0YXR1cyk7CiAKIAkvKiBDb25maWd1cmUgdGhlIGFkYXB0ZXIgZm9yIHVuYXNzb2NpYXRlZCBvcGVyYXRpb24gKi8KLQlpd2xjb3JlX2NvbW1pdF9yeG9uKHByaXYsIGN0eCk7CisJcmV0ID0gaXdsY29yZV9jb21taXRfcnhvbihwcml2LCBjdHgpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAkvKiBBdCB0aGlzIHBvaW50LCB0aGUgTklDIGlzIGluaXRpYWxpemVkIGFuZCBvcGVyYXRpb25hbCAqLwogCWl3bF9yZl9raWxsX2N0X2NvbmZpZyhwcml2KTsKIAogCUlXTF9ERUJVR19JTkZPKHByaXYsICJBTElWRSBwcm9jZXNzaW5nIGNvbXBsZXRlLlxuIik7Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOwogCi0JaXdsX3Bvd2VyX3VwZGF0ZV9tb2RlKHByaXYsIHRydWUpOwotCUlXTF9ERUJVR19JTkZPKHByaXYsICJVcGRhdGVkIHBvd2VyIG1vZGVcbiIpOwotCi0KLQlyZXR1cm47Ci0KLSByZXN0YXJ0OgotCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7CisJcmV0dXJuIGl3bF9wb3dlcl91cGRhdGVfbW9kZShwcml2LCB0cnVlKTsKIH0KIAogc3RhdGljIHZvaWQgaXdsX2NhbmNlbF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKIHN0YXRpYyB2b2lkIF9faXdsX2Rvd24oc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGV4aXRfcGVuZGluZyA9IHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpOworCWludCBleGl0X3BlbmRpbmc7CiAKIAlJV0xfREVCVUdfSU5GTyhwcml2LCBEUlZfTkFNRSAiIGlzIGdvaW5nIGRvd25cbiIpOwogCkBAIC0yNTYzLDQwICsyMjUyLDE1IEBACiAJcHJpdi0+YnRfZnVsbF9jb25jdXJyZW50ID0gZmFsc2U7CiAJcHJpdi0+YnRfY2lfY29tcGxpYW5jZSA9IDA7CiAKLQkvKiBVbmJsb2NrIGFueSB3YWl0aW5nIGNhbGxzICovCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlX2FsbCgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKLQogCS8qIFdpcGUgb3V0IHRoZSBFWElUX1BFTkRJTkcgc3RhdHVzIGJpdCBpZiB3ZSBhcmUgbm90IGFjdHVhbGx5CiAJICogZXhpdGluZyB0aGUgbW9kdWxlICovCiAJaWYgKCFleGl0X3BlbmRpbmcpCiAJCWNsZWFyX2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKTsKIAotCS8qIHN0b3AgYW5kIHJlc2V0IHRoZSBvbi1ib2FyZCBwcm9jZXNzb3IgKi8KLQlpd2xfd3JpdGUzMihwcml2LCBDU1JfUkVTRVQsIENTUl9SRVNFVF9SRUdfRkxBR19ORVZPX1JFU0VUKTsKLQotCS8qIHRlbGwgdGhlIGRldmljZSB0byBzdG9wIHNlbmRpbmcgaW50ZXJydXB0cyAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaXdsX2Rpc2FibGVfaW50ZXJydXB0cyhwcml2KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaXdsX3N5bmNocm9uaXplX2lycShwcml2KTsKLQogCWlmIChwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkKQogCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMocHJpdi0+aHcpOwogCi0JLyogSWYgd2UgaGF2ZSBub3QgcHJldmlvdXNseSBjYWxsZWQgaXdsX2luaXQoKSB0aGVuCi0JICogY2xlYXIgYWxsIGJpdHMgYnV0IHRoZSBSRiBLaWxsIGJpdCBhbmQgcmV0dXJuICovCi0JaWYgKCFpd2xfaXNfaW5pdChwcml2KSkgewotCQlwcml2LT5zdGF0dXMgPSB0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykgPDwKLQkJCQkJU1RBVFVTX1JGX0tJTExfSFcgfAotCQkJICAgICAgIHRlc3RfYml0KFNUQVRVU19HRU9fQ09ORklHVVJFRCwgJnByaXYtPnN0YXR1cykgPDwKLQkJCQkJU1RBVFVTX0dFT19DT05GSUdVUkVEIHwKLQkJCSAgICAgICB0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSA8PAotCQkJCQlTVEFUVVNfRVhJVF9QRU5ESU5HOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JLyogLi4ub3RoZXJ3aXNlIGNsZWFyIG91dCBhbGwgdGhlIHN0YXR1cyBiaXRzIGJ1dCB0aGUgUkYgS2lsbAotCSAqIGJpdCBhbmQgY29udGludWUgdGFraW5nIHRoZSBOSUMgZG93bi4gKi8KKwkvKiBDbGVhciBvdXQgYWxsIHN0YXR1cyBiaXRzIGJ1dCBhIGZldyB0aGF0IGFyZSBzdGFibGUgYWNyb3NzIHJlc2V0ICovCiAJcHJpdi0+c3RhdHVzICY9IHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKSA8PAogCQkJCVNUQVRVU19SRl9LSUxMX0hXIHwKIAkJCXRlc3RfYml0KFNUQVRVU19HRU9fQ09ORklHVVJFRCwgJnByaXYtPnN0YXR1cykgPDwKQEAgLTI2MDYsMzEgKzIyNzAsMTAgQEAKIAkJICAgICAgIHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpIDw8CiAJCQkJU1RBVFVTX0VYSVRfUEVORElORzsKIAotCS8qIGRldmljZSBnb2luZyBkb3duLCBTdG9wIHVzaW5nIElDVCB0YWJsZSAqLwotCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5pc3Jfb3BzLmRpc2FibGUpCi0JCXByaXYtPmNmZy0+b3BzLT5saWItPmlzcl9vcHMuZGlzYWJsZShwcml2KTsKLQotCWl3bGFnbl90eHFfY3R4X3N0b3AocHJpdik7Ci0JaXdsYWduX3J4cV9zdG9wKHByaXYpOwotCi0JLyogUG93ZXItZG93biBkZXZpY2UncyBidXNtYXN0ZXIgRE1BIGNsb2NrcyAqLwotCWl3bF93cml0ZV9wcnBoKHByaXYsIEFQTUdfQ0xLX0RJU19SRUcsIEFQTUdfQ0xLX1ZBTF9ETUFfQ0xLX1JRVCk7Ci0JdWRlbGF5KDUpOwotCi0JLyogTWFrZSBzdXJlIChyZWR1bmRhbnQpIHdlJ3ZlIHJlbGVhc2VkIG91ciByZXF1ZXN0IHRvIHN0YXkgYXdha2UgKi8KLQlpd2xfY2xlYXJfYml0KHByaXYsIENTUl9HUF9DTlRSTCwgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKLQotCS8qIFN0b3AgdGhlIGRldmljZSwgYW5kIHB1dCBpdCBpbiBsb3cgcG93ZXIgc3RhdGUgKi8KLQlpd2xfYXBtX3N0b3AocHJpdik7Ci0KLSBleGl0OgotCW1lbXNldCgmcHJpdi0+Y2FyZF9hbGl2ZSwgMCwgc2l6ZW9mKHN0cnVjdCBpd2xfYWxpdmVfcmVzcCkpOworCWl3bGFnbl9zdG9wX2RldmljZShwcml2KTsKIAogCWRldl9rZnJlZV9za2IocHJpdi0+YmVhY29uX3NrYik7CiAJcHJpdi0+YmVhY29uX3NrYiA9IE5VTEw7Ci0KLQkvKiBjbGVhciBvdXQgYW55IGZyZWUgZnJhbWVzICovCi0JaXdsX2NsZWFyX2ZyZWVfZnJhbWVzKHByaXYpOwogfQogCiBzdGF0aWMgdm9pZCBpd2xfZG93bihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCkBAIC0yNjQ0LDkgKzIyODcsMTAgQEAKIAogI2RlZmluZSBIV19SRUFEWV9USU1FT1VUICg1MCkKIAorLyogTm90ZTogcmV0dXJucyBwb2xsX2JpdCByZXR1cm4gdmFsdWUsIHdoaWNoIGlzID49IDAgaWYgc3VjY2VzcyAqLwogc3RhdGljIGludCBpd2xfc2V0X2h3X3JlYWR5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0OwogCiAJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCiAJCUNTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9OSUNfUkVBRFkpOwpAQCAtMjY1NiwyNSArMjMwMCwyMSBAQAogCQkJCUNTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9OSUNfUkVBRFksCiAJCQkJQ1NSX0hXX0lGX0NPTkZJR19SRUdfQklUX05JQ19SRUFEWSwKIAkJCQlIV19SRUFEWV9USU1FT1VUKTsKLQlpZiAocmV0ICE9IC1FVElNRURPVVQpCi0JCXByaXYtPmh3X3JlYWR5ID0gdHJ1ZTsKLQllbHNlCi0JCXByaXYtPmh3X3JlYWR5ID0gZmFsc2U7CiAKLQlJV0xfREVCVUdfSU5GTyhwcml2LCAiaGFyZHdhcmUgJXNcbiIsCi0JCSAgICAgIChwcml2LT5od19yZWFkeSA9PSAxKSA/ICJyZWFkeSIgOiAibm90IHJlYWR5Iik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgImhhcmR3YXJlJXMgcmVhZHlcbiIsIHJldCA8IDAgPyAiIG5vdCIgOiAiIik7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpd2xfcHJlcGFyZV9jYXJkX2h3KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKKy8qIE5vdGU6IHJldHVybnMgc3RhbmRhcmQgMC8tRVJST1IgY29kZSAqLworaW50IGl3bF9wcmVwYXJlX2NhcmRfaHcoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCWludCByZXQgPSAwOworCWludCByZXQ7CiAKIAlJV0xfREVCVUdfSU5GTyhwcml2LCAiaXdsX3ByZXBhcmVfY2FyZF9odyBlbnRlclxuIik7CiAKIAlyZXQgPSBpd2xfc2V0X2h3X3JlYWR5KHByaXYpOwotCWlmIChwcml2LT5od19yZWFkeSkKLQkJcmV0dXJuIHJldDsKKwlpZiAocmV0ID49IDApCisJCXJldHVybiAwOwogCiAJLyogSWYgSFcgaXMgbm90IHJlYWR5LCBwcmVwYXJlIHRoZSBjb25kaXRpb25zIHRvIGNoZWNrIGFnYWluICovCiAJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCkBAIC0yNjg0LDEwICsyMzI0LDEzIEBACiAJCQl+Q1NSX0hXX0lGX0NPTkZJR19SRUdfQklUX05JQ19QUkVQQVJFX0RPTkUsCiAJCQlDU1JfSFdfSUZfQ09ORklHX1JFR19CSVRfTklDX1BSRVBBUkVfRE9ORSwgMTUwMDAwKTsKIAotCS8qIEhXIHNob3VsZCBiZSByZWFkeSBieSBub3csIGNoZWNrIGFnYWluLiAqLwotCWlmIChyZXQgIT0gLUVUSU1FRE9VVCkKLQkJaXdsX3NldF9od19yZWFkeShwcml2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAorCS8qIEhXIHNob3VsZCBiZSByZWFkeSBieSBub3csIGNoZWNrIGFnYWluLiAqLworCXJldCA9IGl3bF9zZXRfaHdfcmVhZHkocHJpdik7CisJaWYgKHJldCA+PSAwKQorCQlyZXR1cm4gMDsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNjk2LDE5ICsyMzM5LDE1IEBACiBzdGF0aWMgaW50IF9faXdsX3VwKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4OwotCWludCBpOwogCWludCByZXQ7CiAKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZwcml2LT5tdXRleCk7CisKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpIHsKIAkJSVdMX1dBUk4ocHJpdiwgIkV4aXQgcGVuZGluZzsgd2lsbCBub3QgYnJpbmcgdGhlIE5JQyB1cFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIAotCWlmICghcHJpdi0+dWNvZGVfZGF0YV9iYWNrdXAudl9hZGRyIHx8ICFwcml2LT51Y29kZV9kYXRhLnZfYWRkcikgewotCQlJV0xfRVJSKHByaXYsICJ1Y29kZSBub3QgYXZhaWxhYmxlIGZvciBkZXZpY2UgYnJpbmd1cFxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQogCWZvcl9lYWNoX2NvbnRleHQocHJpdiwgY3R4KSB7CiAJCXJldCA9IGl3bGFnbl9hbGxvY19iY2FzdF9zdGF0aW9uKHByaXYsIGN0eCk7CiAJCWlmIChyZXQpIHsKQEAgLTI3MTcsODkgKzIzNTYsMzMgQEAKIAkJfQogCX0KIAotCWl3bF9wcmVwYXJlX2NhcmRfaHcocHJpdik7Ci0KLQlpZiAoIXByaXYtPmh3X3JlYWR5KSB7Ci0JCUlXTF9XQVJOKHByaXYsICJFeGl0IEhXIG5vdCByZWFkeVxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCS8qIElmIHBsYXRmb3JtJ3MgUkZfS0lMTCBzd2l0Y2ggaXMgTk9UIHNldCB0byBLSUxMICovCi0JaWYgKGl3bF9yZWFkMzIocHJpdiwgQ1NSX0dQX0NOVFJMKSAmIENTUl9HUF9DTlRSTF9SRUdfRkxBR19IV19SRl9LSUxMX1NXKQotCQljbGVhcl9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOwotCWVsc2UKLQkJc2V0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cyk7Ci0KLQlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkgewotCQl3aXBoeV9yZmtpbGxfc2V0X2h3X3N0YXRlKHByaXYtPmh3LT53aXBoeSwgdHJ1ZSk7Ci0KLQkJaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwotCQlJV0xfV0FSTihwcml2LCAiUmFkaW8gZGlzYWJsZWQgYnkgSFcgUkYgS2lsbCBzd2l0Y2hcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpd2xfd3JpdGUzMihwcml2LCBDU1JfSU5ULCAweEZGRkZGRkZGKTsKLQotCS8qIG11c3QgYmUgaW5pdGlhbGlzZWQgYmVmb3JlIGl3bF9od19uaWNfaW5pdCAqLwotCWlmIChwcml2LT52YWxpZF9jb250ZXh0cyAhPSBCSVQoSVdMX1JYT05fQ1RYX0JTUykpCi0JCXByaXYtPmNtZF9xdWV1ZSA9IElXTF9JUEFOX0NNRF9RVUVVRV9OVU07Ci0JZWxzZQotCQlwcml2LT5jbWRfcXVldWUgPSBJV0xfREVGQVVMVF9DTURfUVVFVUVfTlVNOwotCi0JcmV0ID0gaXdsYWduX2h3X25pY19pbml0KHByaXYpOworCXJldCA9IGl3bGFnbl9ydW5faW5pdF91Y29kZShwcml2KTsKIAlpZiAocmV0KSB7Ci0JCUlXTF9FUlIocHJpdiwgIlVuYWJsZSB0byBpbml0IG5pY1xuIik7Ci0JCXJldHVybiByZXQ7CisJCUlXTF9FUlIocHJpdiwgIkZhaWxlZCB0byBydW4gSU5JVCB1Y29kZTogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyb3I7CiAJfQogCi0JLyogbWFrZSBzdXJlIHJma2lsbCBoYW5kc2hha2UgYml0cyBhcmUgY2xlYXJlZCAqLwotCWl3bF93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX0NMUiwgQ1NSX1VDT0RFX1NXX0JJVF9SRktJTEwpOwotCWl3bF93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX0NMUiwKLQkJICAgIENTUl9VQ09ERV9EUlZfR1AxX0JJVF9DTURfQkxPQ0tFRCk7Ci0KLQkvKiBjbGVhciAoYWdhaW4pLCB0aGVuIGVuYWJsZSBob3N0IGludGVycnVwdHMgKi8KLQlpd2xfd3JpdGUzMihwcml2LCBDU1JfSU5ULCAweEZGRkZGRkZGKTsKLQlpd2xfZW5hYmxlX2ludGVycnVwdHMocHJpdik7Ci0KLQkvKiByZWFsbHkgbWFrZSBzdXJlIHJma2lsbCBoYW5kc2hha2UgYml0cyBhcmUgY2xlYXJlZCAqLwotCWl3bF93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX0NMUiwgQ1NSX1VDT0RFX1NXX0JJVF9SRktJTEwpOwotCWl3bF93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX0NMUiwgQ1NSX1VDT0RFX1NXX0JJVF9SRktJTEwpOwotCi0JLyogQ29weSBvcmlnaW5hbCB1Y29kZSBkYXRhIGltYWdlIGZyb20gZGlzayBpbnRvIGJhY2t1cCBjYWNoZS4KLQkgKiBUaGlzIHdpbGwgYmUgdXNlZCB0byBpbml0aWFsaXplIHRoZSBvbi1ib2FyZCBwcm9jZXNzb3IncwotCSAqIGRhdGEgU1JBTSBmb3IgYSBjbGVhbiBzdGFydCB3aGVuIHRoZSBydW50aW1lIHByb2dyYW0gZmlyc3QgbG9hZHMuICovCi0JbWVtY3B5KHByaXYtPnVjb2RlX2RhdGFfYmFja3VwLnZfYWRkciwgcHJpdi0+dWNvZGVfZGF0YS52X2FkZHIsCi0JICAgICAgIHByaXYtPnVjb2RlX2RhdGEubGVuKTsKLQotCWZvciAoaSA9IDA7IGkgPCBNQVhfSFdfUkVTVEFSVFM7IGkrKykgewotCi0JCS8qIGxvYWQgYm9vdHN0cmFwIHN0YXRlIG1hY2hpbmUsCi0JCSAqIGxvYWQgYm9vdHN0cmFwIHByb2dyYW0gaW50byBwcm9jZXNzb3IncyBtZW1vcnksCi0JCSAqIHByZXBhcmUgdG8gbG9hZCB0aGUgImluaXRpYWxpemUiIHVDb2RlICovCi0JCXJldCA9IHByaXYtPmNmZy0+b3BzLT5saWItPmxvYWRfdWNvZGUocHJpdik7Ci0KLQkJaWYgKHJldCkgewotCQkJSVdMX0VSUihwcml2LCAiVW5hYmxlIHRvIHNldCB1cCBib290c3RyYXAgdUNvZGU6ICVkXG4iLAotCQkJCXJldCk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qIHN0YXJ0IGNhcmQ7ICJpbml0aWFsaXplIiB3aWxsIGxvYWQgcnVudGltZSB1Y29kZSAqLwotCQlpd2xfbmljX3N0YXJ0KHByaXYpOwotCi0JCUlXTF9ERUJVR19JTkZPKHByaXYsIERSVl9OQU1FICIgaXMgY29taW5nIHVwXG4iKTsKLQotCQlyZXR1cm4gMDsKKwlyZXQgPSBpd2xhZ25fbG9hZF91Y29kZV93YWl0X2FsaXZlKHByaXYsCisJCQkJCSAgICZwcml2LT51Y29kZV9ydCwKKwkJCQkJICAgVUNPREVfU1VCVFlQRV9SRUdVTEFSLAorCQkJCQkgICBVQ09ERV9TVUJUWVBFX1JFR1VMQVJfTkVXKTsKKwlpZiAocmV0KSB7CisJCUlXTF9FUlIocHJpdiwgIkZhaWxlZCB0byBzdGFydCBSVCB1Y29kZTogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyb3I7CiAJfQogCisJcmV0ID0gaXdsX2FsaXZlX3N0YXJ0KHByaXYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisJcmV0dXJuIDA7CisKKyBlcnJvcjoKIAlzZXRfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpOwogCV9faXdsX2Rvd24ocHJpdik7CiAJY2xlYXJfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpOwogCi0JLyogdHJpZWQgdG8gcmVzdGFydCBhbmQgY29uZmlnIHRoZSBkZXZpY2UgZm9yIGFzIGxvbmcgYXMgb3VyCi0JICogcGF0aWVuY2UgY291bGQgd2l0aHN0YW5kICovCi0JSVdMX0VSUihwcml2LCAiVW5hYmxlIHRvIGluaXRpYWxpemUgZGV2aWNlIGFmdGVyICVkIGF0dGVtcHRzLlxuIiwgaSk7Ci0JcmV0dXJuIC1FSU87CisJSVdMX0VSUihwcml2LCAiVW5hYmxlIHRvIGluaXRpYWxpemUgZGV2aWNlLlxuIik7CisJcmV0dXJuIHJldDsKIH0KIAogCkBAIC0yODA5LDM2ICsyMzkyLDYgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIGl3bF9iZ19pbml0X2FsaXZlX3N0YXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKLXsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPQotCSAgICBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bF9wcml2LCBpbml0X2FsaXZlX3N0YXJ0LndvcmspOwotCi0JaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQlyZXR1cm47Ci0KLQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+aW5pdF9hbGl2ZV9zdGFydChwcml2KTsKLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLX0KLQotc3RhdGljIHZvaWQgaXdsX2JnX2FsaXZlX3N0YXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKLXsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPQotCSAgICBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bF9wcml2LCBhbGl2ZV9zdGFydC53b3JrKTsKLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJcmV0dXJuOwotCi0JLyogZW5hYmxlIGRyYW0gaW50ZXJydXB0ICovCi0JaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPmlzcl9vcHMucmVzZXQpCi0JCXByaXYtPmNmZy0+b3BzLT5saWItPmlzcl9vcHMucmVzZXQocHJpdik7Ci0KLQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JaXdsX2FsaXZlX3N0YXJ0KHByaXYpOwotCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotfQotCiBzdGF0aWMgdm9pZCBpd2xfYmdfcnVuX3RpbWVfY2FsaWJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpd2xfcHJpdiwKQEAgLTI4NTMsMjIgKzI0MDYsNDkgQEAKIAl9CiAKIAlpZiAocHJpdi0+c3RhcnRfY2FsaWIpIHsKLQkJaWYgKGl3bF9idF9zdGF0aXN0aWNzKHByaXYpKSB7Ci0JCQlpd2xfY2hhaW5fbm9pc2VfY2FsaWJyYXRpb24ocHJpdiwKLQkJCQkJKHZvaWQgKikmcHJpdi0+X2Fnbi5zdGF0aXN0aWNzX2J0KTsKLQkJCWl3bF9zZW5zaXRpdml0eV9jYWxpYnJhdGlvbihwcml2LAotCQkJCQkodm9pZCAqKSZwcml2LT5fYWduLnN0YXRpc3RpY3NfYnQpOwotCQl9IGVsc2UgewotCQkJaXdsX2NoYWluX25vaXNlX2NhbGlicmF0aW9uKHByaXYsCi0JCQkJCSh2b2lkICopJnByaXYtPl9hZ24uc3RhdGlzdGljcyk7Ci0JCQlpd2xfc2Vuc2l0aXZpdHlfY2FsaWJyYXRpb24ocHJpdiwKLQkJCQkJKHZvaWQgKikmcHJpdi0+X2Fnbi5zdGF0aXN0aWNzKTsKLQkJfQorCQlpd2xfY2hhaW5fbm9pc2VfY2FsaWJyYXRpb24ocHJpdik7CisJCWl3bF9zZW5zaXRpdml0eV9jYWxpYnJhdGlvbihwcml2KTsKIAl9CiAKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KIAorc3RhdGljIHZvaWQgaXdsYWduX3ByZXBhcmVfcmVzdGFydChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eDsKKwlib29sIGJ0X2Z1bGxfY29uY3VycmVudDsKKwl1OCBidF9jaV9jb21wbGlhbmNlOworCXU4IGJ0X2xvYWQ7CisJdTggYnRfc3RhdHVzOworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmcHJpdi0+bXV0ZXgpOworCisJZm9yX2VhY2hfY29udGV4dChwcml2LCBjdHgpCisJCWN0eC0+dmlmID0gTlVMTDsKKwlwcml2LT5pc19vcGVuID0gMDsKKworCS8qCisJICogX19pd2xfZG93bigpIHdpbGwgY2xlYXIgdGhlIEJUIHN0YXR1cyB2YXJpYWJsZXMsCisJICogd2hpY2ggaXMgY29ycmVjdCwgYnV0IHdoZW4gd2UgcmVzdGFydCB3ZSByZWFsbHkKKwkgKiB3YW50IHRvIGtlZXAgdGhlbSBzbyByZXN0b3JlIHRoZW0gYWZ0ZXJ3YXJkcy4KKwkgKgorCSAqIFRoZSByZXN0YXJ0IHByb2Nlc3Mgd2lsbCBsYXRlciBwaWNrIHRoZW0gdXAgYW5kCisJICogcmUtY29uZmlndXJlIHRoZSBodyB3aGVuIHdlIHJlY29uZmlndXJlIHRoZSBCVAorCSAqIGNvbW1hbmQuCisJICovCisJYnRfZnVsbF9jb25jdXJyZW50ID0gcHJpdi0+YnRfZnVsbF9jb25jdXJyZW50OworCWJ0X2NpX2NvbXBsaWFuY2UgPSBwcml2LT5idF9jaV9jb21wbGlhbmNlOworCWJ0X2xvYWQgPSBwcml2LT5idF90cmFmZmljX2xvYWQ7CisJYnRfc3RhdHVzID0gcHJpdi0+YnRfc3RhdHVzOworCisJX19pd2xfZG93bihwcml2KTsKKworCXByaXYtPmJ0X2Z1bGxfY29uY3VycmVudCA9IGJ0X2Z1bGxfY29uY3VycmVudDsKKwlwcml2LT5idF9jaV9jb21wbGlhbmNlID0gYnRfY2lfY29tcGxpYW5jZTsKKwlwcml2LT5idF90cmFmZmljX2xvYWQgPSBidF9sb2FkOworCXByaXYtPmJ0X3N0YXR1cyA9IGJ0X3N0YXR1czsKK30KKwogc3RhdGljIHZvaWQgaXdsX2JnX3Jlc3RhcnQoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsX3ByaXYsIHJlc3RhcnQpOwpAQCAtMjg3Nyw1MCArMjQ1NywxMyBAQAogCQlyZXR1cm47CiAKIAlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFNUQVRVU19GV19FUlJPUiwgJnByaXYtPnN0YXR1cykpIHsKLQkJc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eDsKLQkJYm9vbCBidF9mdWxsX2NvbmN1cnJlbnQ7Ci0JCXU4IGJ0X2NpX2NvbXBsaWFuY2U7Ci0JCXU4IGJ0X2xvYWQ7Ci0JCXU4IGJ0X3N0YXR1czsKLQogCQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JCWZvcl9lYWNoX2NvbnRleHQocHJpdiwgY3R4KQotCQkJY3R4LT52aWYgPSBOVUxMOwotCQlwcml2LT5pc19vcGVuID0gMDsKLQotCQkvKgotCQkgKiBfX2l3bF9kb3duKCkgd2lsbCBjbGVhciB0aGUgQlQgc3RhdHVzIHZhcmlhYmxlcywKLQkJICogd2hpY2ggaXMgY29ycmVjdCwgYnV0IHdoZW4gd2UgcmVzdGFydCB3ZSByZWFsbHkKLQkJICogd2FudCB0byBrZWVwIHRoZW0gc28gcmVzdG9yZSB0aGVtIGFmdGVyd2FyZHMuCi0JCSAqCi0JCSAqIFRoZSByZXN0YXJ0IHByb2Nlc3Mgd2lsbCBsYXRlciBwaWNrIHRoZW0gdXAgYW5kCi0JCSAqIHJlLWNvbmZpZ3VyZSB0aGUgaHcgd2hlbiB3ZSByZWNvbmZpZ3VyZSB0aGUgQlQKLQkJICogY29tbWFuZC4KLQkJICovCi0JCWJ0X2Z1bGxfY29uY3VycmVudCA9IHByaXYtPmJ0X2Z1bGxfY29uY3VycmVudDsKLQkJYnRfY2lfY29tcGxpYW5jZSA9IHByaXYtPmJ0X2NpX2NvbXBsaWFuY2U7Ci0JCWJ0X2xvYWQgPSBwcml2LT5idF90cmFmZmljX2xvYWQ7Ci0JCWJ0X3N0YXR1cyA9IHByaXYtPmJ0X3N0YXR1czsKLQotCQlfX2l3bF9kb3duKHByaXYpOwotCi0JCXByaXYtPmJ0X2Z1bGxfY29uY3VycmVudCA9IGJ0X2Z1bGxfY29uY3VycmVudDsKLQkJcHJpdi0+YnRfY2lfY29tcGxpYW5jZSA9IGJ0X2NpX2NvbXBsaWFuY2U7Ci0JCXByaXYtPmJ0X3RyYWZmaWNfbG9hZCA9IGJ0X2xvYWQ7Ci0JCXByaXYtPmJ0X3N0YXR1cyA9IGJ0X3N0YXR1czsKLQorCQlpd2xhZ25fcHJlcGFyZV9yZXN0YXJ0KHByaXYpOwogCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAkJaXdsX2NhbmNlbF9kZWZlcnJlZF93b3JrKHByaXYpOwogCQlpZWVlODAyMTFfcmVzdGFydF9odyhwcml2LT5odyk7CiAJfSBlbHNlIHsKLQkJaXdsX2Rvd24ocHJpdik7Ci0KLQkJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQkJcmV0dXJuOwotCi0JCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQkJX19pd2xfdXAocHJpdik7Ci0JCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCQlXQVJOX09OKDEpOwogCX0KIH0KIApAQCAtMzAzMSw4ICsyNTc0LDYgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNkZWZpbmUgVUNPREVfUkVBRFlfVElNRU9VVAkoNCAqIEhaKQotCiAvKgogICogTm90IGEgbWFjODAyMTEgZW50cnkgcG9pbnQgZnVuY3Rpb24sIGJ1dCBpdCBmaXRzIGluIHdpdGggYWxsIHRoZQogICogb3RoZXIgbWFjODAyMTEgZnVuY3Rpb25zIGdyb3VwZWQgaGVyZS4KQEAgLTMwNTUsMTQgKzI1OTYsMTYgQEAKIAogCWh3LT5tYXhfdHhfYWdncmVnYXRpb25fc3ViZnJhbWVzID0gTElOS19RVUFMX0FHR19GUkFNRV9MSU1JVF9ERUY7CiAKLQlpZiAoIXByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPmJyb2tlbl9wb3dlcnNhdmUpCi0JCWh3LT5mbGFncyB8PSBJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMgfAotCQkJICAgICBJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUzsKKwlody0+ZmxhZ3MgfD0gSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKKwkJICAgICBJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUzsKIAogCWlmIChwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfTikKIAkJaHctPmZsYWdzIHw9IElFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1NNUFMgfAogCQkJICAgICBJRUVFODAyMTFfSFdfU1VQUE9SVFNfU1RBVElDX1NNUFM7CiAKKwlpZiAoY2FwYS0+ZmxhZ3MgJiBJV0xfVUNPREVfVExWX0ZMQUdTX01GUCkKKwkJaHctPmZsYWdzIHw9IElFRUU4MDIxMV9IV19NRlBfQ0FQQUJMRTsKKwogCWh3LT5zdGFfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBpd2xfc3RhdGlvbl9wcml2KTsKIAlody0+dmlmX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXdsX3ZpZl9wcml2KTsKIApAQCAtMzExMiw3ICsyNjU1LDcgQEAKIH0KIAogCi1pbnQgaXdsYWduX21hY19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3N0YXRpYyBpbnQgaXdsYWduX21hY19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlpbnQgcmV0OwpAQCAtMzEyMywzNyArMjY2NiwyMyBAQAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlyZXQgPSBfX2l3bF91cChwcml2KTsKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkKLQkJZ290byBvdXQ7Ci0KIAlJV0xfREVCVUdfSU5GTyhwcml2LCAiU3RhcnQgVVAgd29yayBkb25lLlxuIik7CiAKLQkvKiBXYWl0IGZvciBTVEFSVF9BTElWRSBmcm9tIFJ1biBUaW1lIHVjb2RlLiBPdGhlcndpc2UgY2FsbGJhY2tzIGZyb20KLQkgKiBtYWM4MDIxMSB3aWxsIG5vdCBiZSBydW4gc3VjY2Vzc2Z1bGx5LiAqLwotCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSwKLQkJCXRlc3RfYml0KFNUQVRVU19SRUFEWSwgJnByaXYtPnN0YXR1cyksCi0JCQlVQ09ERV9SRUFEWV9USU1FT1VUKTsKLQlpZiAoIXJldCkgewotCQlpZiAoIXRlc3RfYml0KFNUQVRVU19SRUFEWSwgJnByaXYtPnN0YXR1cykpIHsKLQkJCUlXTF9FUlIocHJpdiwgIlNUQVJUX0FMSVZFIHRpbWVvdXQgYWZ0ZXIgJWRtcy5cbiIsCi0JCQkJamlmZmllc190b19tc2VjcyhVQ09ERV9SRUFEWV9USU1FT1VUKSk7Ci0JCQlyZXR1cm4gLUVUSU1FRE9VVDsKLQkJfQotCX0KKwkvKiBOb3cgd2Ugc2hvdWxkIGJlIGRvbmUsIGFuZCB0aGUgUkVBRFkgYml0IHNob3VsZCBiZSBzZXQuICovCisJaWYgKFdBUk5fT04oIXRlc3RfYml0KFNUQVRVU19SRUFEWSwgJnByaXYtPnN0YXR1cykpKQorCQlyZXQgPSAtRUlPOwogCiAJaXdsYWduX2xlZF9lbmFibGUocHJpdik7CiAKLW91dDoKIAlwcml2LT5pc19vcGVuID0gMTsKIAlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBpd2xhZ25fbWFjX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCitzdGF0aWMgdm9pZCBpd2xhZ25fbWFjX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAKQEAgLTMxNzYsNyArMjcwNSw3IEBACiAJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiB9CiAKLXZvaWQgaXdsYWduX21hY190eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lkIGl3bGFnbl9tYWNfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAKQEAgLTMxOTEsMTEgKzI3MjAsMTEgQEAKIAlJV0xfREVCVUdfTUFDRFVNUChwcml2LCAibGVhdmVcbiIpOwogfQogCi12b2lkIGl3bGFnbl9tYWNfdXBkYXRlX3RraXBfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5Y29uZiwKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAotCQkJCXUzMiBpdjMyLCB1MTYgKnBoYXNlMWtleSkKK3N0YXRpYyB2b2lkIGl3bGFnbl9tYWNfdXBkYXRlX3RraXBfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mLAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJCSAgICAgICB1MzIgaXYzMiwgdTE2ICpwaGFzZTFrZXkpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJc3RydWN0IGl3bF92aWZfcHJpdiAqdmlmX3ByaXYgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CkBAIC0zMjA4LDkgKzI3MzcsMTAgQEAKIAlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIH0KIAotaW50IGl3bGFnbl9tYWNfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsCi0JCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAotCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQorc3RhdGljIGludCBpd2xhZ25fbWFjX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJc3RydWN0IGl3bF92aWZfcHJpdiAqdmlmX3ByaXYgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CkBAIC0zMjIxLDcgKzI3NTEsNyBAQAogCiAJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKLQlpZiAocHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5zd19jcnlwdG8pIHsKKwlpZiAoaXdsYWduX21vZF9wYXJhbXMuc3dfY3J5cHRvKSB7CiAJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBod2NyeXB0byBkaXNhYmxlZFxuIik7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CkBAIC0zMjg1LDExICsyODE1LDExIEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGl3bGFnbl9tYWNfYW1wZHVfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCQkgICAgZW51bSBpZWVlODAyMTFfYW1wZHVfbWxtZV9hY3Rpb24gYWN0aW9uLAotCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQsIHUxNiAqc3NuLAotCQkJICAgIHU4IGJ1Zl9zaXplKQorc3RhdGljIGludCBpd2xhZ25fbWFjX2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCSAgIGVudW0gaWVlZTgwMjExX2FtcGR1X21sbWVfYWN0aW9uIGFjdGlvbiwKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkLCB1MTYgKnNzbiwKKwkJCQkgICB1OCBidWZfc2l6ZSkKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKQEAgLTMzNDgsNiArMjg3OCwxMCBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX09QRVJBVElPTkFMOgorCQlidWZfc2l6ZSA9IG1pbl90KGludCwgYnVmX3NpemUsIExJTktfUVVBTF9BR0dfRlJBTUVfTElNSVRfREVGKTsKKworCQlpd2xhZ25fdHhxX2FnZ19xdWV1ZV9zZXR1cChwcml2LCBzdGEsIHRpZCwgYnVmX3NpemUpOworCiAJCS8qCiAJCSAqIElmIHRoZSBsaW1pdCBpcyAwLCB0aGVuIGl0IHdhc24ndCBpbml0aWFsaXNlZCB5ZXQsCiAJCSAqIHVzZSB0aGUgZGVmYXVsdC4gV2UgY2FuIGRvIHRoYXQgc2luY2Ugd2UgdGFrZSB0aGUKQEAgLTMzOTIsOSArMjkyNiw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGl3bGFnbl9tYWNfc3RhX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQorc3RhdGljIGludCBpd2xhZ25fbWFjX3N0YV9hZGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlzdHJ1Y3QgaXdsX3N0YXRpb25fcHJpdiAqc3RhX3ByaXYgPSAodm9pZCAqKXN0YS0+ZHJ2X3ByaXY7CkBAIC0zNDM1LDggKzI5NjksOCBAQAogCXJldHVybiAwOwogfQogCi12b2lkIGl3bGFnbl9tYWNfY2hhbm5lbF9zd2l0Y2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3N3aXRjaCAqY2hfc3dpdGNoKQorc3RhdGljIHZvaWQgaXdsYWduX21hY19jaGFubmVsX3N3aXRjaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfc3dpdGNoICpjaF9zd2l0Y2gpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CkBAIC0zNDU3LDIxICsyOTkxLDIyIEBACiAKIAlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAorCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwogCWlmIChpd2xfaXNfcmZraWxsKHByaXYpKQotCQlnb3RvIG91dF9leGl0OworCQlnb3RvIG91dDsKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSB8fAogCSAgICB0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKQotCQlnb3RvIG91dF9leGl0OworCQlnb3RvIG91dDsKIAogCWlmICghaXdsX2lzX2Fzc29jaWF0ZWRfY3R4KGN0eCkpCi0JCWdvdG8gb3V0X2V4aXQ7CisJCWdvdG8gb3V0OwogCiAJLyogY2hhbm5lbCBzd2l0Y2ggaW4gcHJvZ3Jlc3MgKi8KIAlpZiAocHJpdi0+c3dpdGNoX3J4b24uc3dpdGNoX2luX3Byb2dyZXNzID09IHRydWUpCi0JCWdvdG8gb3V0X2V4aXQ7CisJCWdvdG8gb3V0OwogCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5zZXRfY2hhbm5lbF9zd2l0Y2gpIHsKIAogCQljaCA9IGNoYW5uZWwtPmh3X3ZhbHVlOwpAQCAtMzUyNywxNiArMzA2MiwxNSBAQAogCX0KIG91dDoKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLW91dF9leGl0OgogCWlmICghcHJpdi0+c3dpdGNoX3J4b24uc3dpdGNoX2luX3Byb2dyZXNzKQogCQlpZWVlODAyMTFfY2hzd2l0Y2hfZG9uZShjdHgtPnZpZiwgZmFsc2UpOwogCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogfQogCi12b2lkIGl3bGFnbl9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKLQkJCSAgICAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKLQkJCSAgICAgdTY0IG11bHRpY2FzdCkKK3N0YXRpYyB2b2lkIGl3bGFnbl9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKKwkJCQkgICAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKKwkJCQkgICAgdTY0IG11bHRpY2FzdCkKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlfX2xlMzIgZmlsdGVyX29yID0gMCwgZmlsdGVyX25hbmQgPSAwOwpAQCAtMzU4Myw3ICszMTE3LDcgQEAKIAkJCUZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDIHwgRklGX0NPTlRST0w7CiB9CiAKLXZvaWQgaXdsYWduX21hY19mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBkcm9wKQorc3RhdGljIHZvaWQgaXdsYWduX21hY19mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBkcm9wKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCkBAIC0zNzI5LDggKzMyNjMsNiBAQAogCUlOSVRfV09SSygmcHJpdi0+dHhfZmx1c2gsIGl3bF9iZ190eF9mbHVzaCk7CiAJSU5JVF9XT1JLKCZwcml2LT5idF9mdWxsX2NvbmN1cnJlbmN5LCBpd2xfYmdfYnRfZnVsbF9jb25jdXJyZW5jeSk7CiAJSU5JVF9XT1JLKCZwcml2LT5idF9ydW50aW1lX2NvbmZpZywgaXdsX2JnX2J0X3J1bnRpbWVfY29uZmlnKTsKLQlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+aW5pdF9hbGl2ZV9zdGFydCwgaXdsX2JnX2luaXRfYWxpdmVfc3RhcnQpOwotCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5hbGl2ZV9zdGFydCwgaXdsX2JnX2FsaXZlX3N0YXJ0KTsKIAlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+X2Fnbi5od19yb2Nfd29yaywgaXdsYWduX2JnX3JvY19kb25lKTsKIAogCWl3bF9zZXR1cF9zY2FuX2RlZmVycmVkX3dvcmsocHJpdik7CkBAIC0zNzUwLDEyICszMjgyLDggQEAKIAlwcml2LT53YXRjaGRvZy5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcHJpdjsKIAlwcml2LT53YXRjaGRvZy5mdW5jdGlvbiA9IGl3bF9iZ193YXRjaGRvZzsKIAotCWlmICghcHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+dXNlX2lzcl9sZWdhY3kpCi0JCXRhc2tsZXRfaW5pdCgmcHJpdi0+aXJxX3Rhc2tsZXQsICh2b2lkICgqKSh1bnNpZ25lZCBsb25nKSkKLQkJCWl3bF9pcnFfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpcHJpdik7Ci0JZWxzZQotCQl0YXNrbGV0X2luaXQoJnByaXYtPmlycV90YXNrbGV0LCAodm9pZCAoKikodW5zaWduZWQgbG9uZykpCi0JCQlpd2xfaXJxX3Rhc2tsZXRfbGVnYWN5LCAodW5zaWduZWQgbG9uZylwcml2KTsKKwl0YXNrbGV0X2luaXQoJnByaXYtPmlycV90YXNrbGV0LCAodm9pZCAoKikodW5zaWduZWQgbG9uZykpCisJCWl3bF9pcnFfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpcHJpdik7CiB9CiAKIHN0YXRpYyB2b2lkIGl3bF9jYW5jZWxfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCkBAIC0zNzYzLDggKzMyOTEsNiBAQAogCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5jYW5jZWxfZGVmZXJyZWRfd29yaykKIAkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+Y2FuY2VsX2RlZmVycmVkX3dvcmsocHJpdik7CiAKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPmluaXRfYWxpdmVfc3RhcnQpOwotCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmFsaXZlX3N0YXJ0KTsKIAljYW5jZWxfd29ya19zeW5jKCZwcml2LT5ydW5fdGltZV9jYWxpYl93b3JrKTsKIAljYW5jZWxfd29ya19zeW5jKCZwcml2LT5iZWFjb25fdXBkYXRlKTsKIApAQCAtMzgwNSwxMCArMzMzMSw3IEBACiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnN0YV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+aGNtZF9sb2NrKTsKIAotCUlOSVRfTElTVF9IRUFEKCZwcml2LT5mcmVlX2ZyYW1lcyk7Ci0KIAltdXRleF9pbml0KCZwcml2LT5tdXRleCk7Ci0JbXV0ZXhfaW5pdCgmcHJpdi0+c3luY19jbWRfbXV0ZXgpOwogCiAJcHJpdi0+aWVlZV9jaGFubmVscyA9IE5VTEw7CiAJcHJpdi0+aWVlZV9yYXRlcyA9IE5VTEw7CkBAIC0zODQ1LDEyICszMzY4LDYgQEAKIAkJcHJpdi0+ZHluYW1pY19mcmFnX3RocmVzaCA9IEJUX0ZSQUdfVEhSRVNIT0xEX0RFRjsKIAl9CiAKLQkvKiBTZXQgdGhlIHR4X3Bvd2VyX3VzZXJfbG10IHRvIHRoZSBsb3dlc3QgcG93ZXIgbGV2ZWwKLQkgKiB0aGlzIHZhbHVlIHdpbGwgZ2V0IG92ZXJ3cml0dGVuIGJ5IGNoYW5uZWwgbWF4IHBvd2VyIGF2ZwotCSAqIGZyb20gZWVwcm9tICovCi0JcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQgPSBJV0xBR05fVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01JTjsKLQlwcml2LT50eF9wb3dlcl9uZXh0ID0gSVdMQUdOX1RYX1BPV0VSX1RBUkdFVF9QT1dFUl9NSU47Ci0KIAlyZXQgPSBpd2xfaW5pdF9jaGFubmVsX21hcChwcml2KTsKIAlpZiAocmV0KSB7CiAJCUlXTF9FUlIocHJpdiwgImluaXRpYWxpemluZyByZWd1bGF0b3J5IGZhaWxlZDogJWRcbiIsIHJldCk7CkBAIC0zOTA1LDI4ICszNDIyLDMwIEBACiAJLmNhbmNlbF9yZW1haW5fb25fY2hhbm5lbCA9IGl3bF9tYWNfY2FuY2VsX3JlbWFpbl9vbl9jaGFubmVsLAogCS5vZmZjaGFubmVsX3R4ID0gaXdsX21hY19vZmZjaGFubmVsX3R4LAogCS5vZmZjaGFubmVsX3R4X2NhbmNlbF93YWl0ID0gaXdsX21hY19vZmZjaGFubmVsX3R4X2NhbmNlbF93YWl0LAorCUNGRzgwMjExX1RFU1RNT0RFX0NNRChpd2xfdGVzdG1vZGVfY21kKQogfTsKIAotc3RhdGljIHZvaWQgaXdsX2h3X2RldGVjdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCitzdGF0aWMgdTMyIGl3bF9od19kZXRlY3Qoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCXByaXYtPmh3X3JldiA9IF9pd2xfcmVhZDMyKHByaXYsIENTUl9IV19SRVYpOwotCXByaXYtPmh3X3dhX3JldiA9IF9pd2xfcmVhZDMyKHByaXYsIENTUl9IV19SRVZfV0FfUkVHKTsKLQlwcml2LT5yZXZfaWQgPSBwcml2LT5wY2lfZGV2LT5yZXZpc2lvbjsKLQlJV0xfREVCVUdfSU5GTyhwcml2LCAiSFcgUmV2aXNpb24gSUQgPSAweCVYXG4iLCBwcml2LT5yZXZfaWQpOworCXU4IHJldl9pZDsKKworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHByaXYtPnBjaV9kZXYsIFBDSV9SRVZJU0lPTl9JRCwgJnJldl9pZCk7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkhXIFJldmlzaW9uIElEID0gMHglWFxuIiwgcmV2X2lkKTsKKwlyZXR1cm4gaXdsX3JlYWQzMihwcml2LCBDU1JfSFdfUkVWKTsKIH0KIAogc3RhdGljIGludCBpd2xfc2V0X2h3X3BhcmFtcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJcHJpdi0+aHdfcGFyYW1zLm1heF9yeHFfc2l6ZSA9IFJYX1FVRVVFX1NJWkU7CiAJcHJpdi0+aHdfcGFyYW1zLm1heF9yeHFfbG9nID0gUlhfUVVFVUVfU0laRV9MT0c7Ci0JaWYgKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+YW1zZHVfc2l6ZV84SykKKwlpZiAoaXdsYWduX21vZF9wYXJhbXMuYW1zZHVfc2l6ZV84SykKIAkJcHJpdi0+aHdfcGFyYW1zLnJ4X3BhZ2Vfb3JkZXIgPSBnZXRfb3JkZXIoSVdMX1JYX0JVRl9TSVpFXzhLKTsKIAllbHNlCiAJCXByaXYtPmh3X3BhcmFtcy5yeF9wYWdlX29yZGVyID0gZ2V0X29yZGVyKElXTF9SWF9CVUZfU0laRV80Syk7CiAKIAlwcml2LT5od19wYXJhbXMubWF4X2JlYWNvbl9pdHJ2bCA9IElXTF9NQVhfVUNPREVfQkVBQ09OX0lOVEVSVkFMOwogCi0JaWYgKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+ZGlzYWJsZV8xMW4pCisJaWYgKGl3bGFnbl9tb2RfcGFyYW1zLmRpc2FibGVfMTFuKQogCQlwcml2LT5jZmctPnNrdSAmPSB+SVdMX1NLVV9OOwogCiAJLyogRGV2aWNlLXNwZWNpZmljIHNldHVwICovCkBAIC0zOTU1LDYgKzM0NzQsMjggQEAKIAk3LCA2LCA1LCA0LAogfTsKIAorLyogVGhpcyBmdW5jdGlvbiBib3RoIGFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgaHcgYW5kIHByaXYuICovCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9odyAqaXdsX2FsbG9jX2FsbChzdHJ1Y3QgaXdsX2NmZyAqY2ZnKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdjsKKwkvKiBtYWM4MDIxMSBhbGxvY2F0ZXMgbWVtb3J5IGZvciB0aGlzIGRldmljZSBpbnN0YW5jZSwgaW5jbHVkaW5nCisJICogICBzcGFjZSBmb3IgdGhpcyBkcml2ZXIncyBwcml2YXRlIHN0cnVjdHVyZSAqLworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCisJaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKHN0cnVjdCBpd2xfcHJpdiksICZpd2xhZ25faHdfb3BzKTsKKwlpZiAoaHcgPT0gTlVMTCkgeworCQlwcl9lcnIoIiVzOiBDYW4gbm90IGFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlXG4iLAorCQkgICAgICAgY2ZnLT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJcHJpdiA9IGh3LT5wcml2OworCXByaXYtPmh3ID0gaHc7CisKK291dDoKKwlyZXR1cm4gaHc7Cit9CisKIHN0YXRpYyBpbnQgaXdsX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAlpbnQgZXJyID0gMCwgaTsKQEAgLTM5NjMsMTkgKzM1MDQsMTIgQEAKIAlzdHJ1Y3QgaXdsX2NmZyAqY2ZnID0gKHN0cnVjdCBpd2xfY2ZnICopKGVudC0+ZHJpdmVyX2RhdGEpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTE2IHBjaV9jbWQsIG51bV9tYWM7CisJdTMyIGh3X3JldjsKIAogCS8qKioqKioqKioqKioqKioqKioqKioqKioKIAkgKiAxLiBBbGxvY2F0aW5nIEhXIGRhdGEKIAkgKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0JLyogRGlzYWJsaW5nIGhhcmR3YXJlIHNjYW4gbWVhbnMgdGhhdCBtYWM4MDIxMSB3aWxsIHBlcmZvcm0gc2NhbnMKLQkgKiAidGhlIGhhcmQgd2F5IiwgcmF0aGVyIHRoYW4gdXNpbmcgZGV2aWNlJ3Mgc2Nhbi4gKi8KLQlpZiAoY2ZnLT5tb2RfcGFyYW1zLT5kaXNhYmxlX2h3X3NjYW4pIHsKLQkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmKHBkZXYtPmRldiksCi0JCQkic3cgc2NhbiBzdXBwb3J0IGlzIGRlcHJlY2F0ZWRcbiIpOwotCQlpd2xhZ25faHdfb3BzLmh3X3NjYW4gPSBOVUxMOwotCX0KLQogCWh3ID0gaXdsX2FsbG9jX2FsbChjZmcpOwogCWlmICghaHcpIHsKIAkJZXJyID0gLUVOT01FTTsKQEAgLTM5ODQsNiArMzUxOCw4IEBACiAJcHJpdiA9IGh3LT5wcml2OwogCS8qIEF0IHRoaXMgcG9pbnQgYm90aCBodyBhbmQgcHJpdiBhcmUgYWxsb2NhdGVkLiAqLwogCisJcHJpdi0+dWNvZGVfdHlwZSA9IFVDT0RFX1NVQlRZUEVfTk9ORV9MT0FERUQ7CisKIAkvKgogCSAqIFRoZSBkZWZhdWx0IGNvbnRleHQgaXMgYWx3YXlzIHZhbGlkLAogCSAqIG1vcmUgbWF5IGJlIGRpc2NvdmVyZWQgd2hlbiBmaXJtd2FyZQpAQCAtNDExNiwxNiArMzY1MiwxNSBAQAogCSAqLwogCWl3bF93cml0ZTMyKHByaXYsIENTUl9SRVNFVCwgQ1NSX1JFU0VUX1JFR19GTEFHX05FVk9fUkVTRVQpOwogCi0JaXdsX2h3X2RldGVjdChwcml2KTsKKwlod19yZXYgPSBpd2xfaHdfZGV0ZWN0KHByaXYpOwogCUlXTF9JTkZPKHByaXYsICJEZXRlY3RlZCAlcywgUkVWPTB4JVhcbiIsCi0JCXByaXYtPmNmZy0+bmFtZSwgcHJpdi0+aHdfcmV2KTsKKwkJcHJpdi0+Y2ZnLT5uYW1lLCBod19yZXYpOwogCiAJLyogV2UgZGlzYWJsZSB0aGUgUkVUUllfVElNRU9VVCByZWdpc3RlciAoMHg0MSkgdG8ga2VlcAogCSAqIFBDSSBUeCByZXRyaWVzIGZyb20gaW50ZXJmZXJpbmcgd2l0aCBDMyBDUFUgc3RhdGUgKi8KIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUENJX0NGR19SRVRSWV9USU1FT1VULCAweDAwKTsKIAotCWl3bF9wcmVwYXJlX2NhcmRfaHcocHJpdik7Ci0JaWYgKCFwcml2LT5od19yZWFkeSkgeworCWlmIChpd2xfcHJlcGFyZV9jYXJkX2h3KHByaXYpKSB7CiAJCUlXTF9XQVJOKHByaXYsICJGYWlsZWQsIEhXIG5vdCByZWFkeVxuIik7CiAJCWdvdG8gb3V0X2lvdW5tYXA7CiAJfQpAQCAtNDEzNCw3ICszNjY5LDcgQEAKIAkgKiA0LiBSZWFkIEVFUFJPTQogCSAqKioqKioqKioqKioqKioqKi8KIAkvKiBSZWFkIHRoZSBFRVBST00gKi8KLQllcnIgPSBpd2xfZWVwcm9tX2luaXQocHJpdik7CisJZXJyID0gaXdsX2VlcHJvbV9pbml0KHByaXYsIGh3X3Jldik7CiAJaWYgKGVycikgewogCQlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gaW5pdCBFRVBST01cbiIpOwogCQlnb3RvIG91dF9pb3VubWFwOwpAQCAtNDE4NiwxMCArMzcyMSw5IEBACiAKIAlwY2lfZW5hYmxlX21zaShwcml2LT5wY2lfZGV2KTsKIAotCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5pc3Jfb3BzLmFsbG9jKQotCQlwcml2LT5jZmctPm9wcy0+bGliLT5pc3Jfb3BzLmFsbG9jKHByaXYpOworCWl3bF9hbGxvY19pc3JfaWN0KHByaXYpOwogCi0JZXJyID0gcmVxdWVzdF9pcnEocHJpdi0+cGNpX2Rldi0+aXJxLCBwcml2LT5jZmctPm9wcy0+bGliLT5pc3Jfb3BzLmlzciwKKwllcnIgPSByZXF1ZXN0X2lycShwcml2LT5wY2lfZGV2LT5pcnEsIGl3bF9pc3JfaWN0LAogCQkJICBJUlFGX1NIQVJFRCwgRFJWX05BTUUsIHByaXYpOwogCWlmIChlcnIpIHsKIAkJSVdMX0VSUihwcml2LCAiRXJyb3IgYWxsb2NhdGluZyBJUlEgJWRcbiIsIHByaXYtPnBjaV9kZXYtPmlycSk7CkBAIC00MTk4LDYgKzM3MzIsNyBAQAogCiAJaXdsX3NldHVwX2RlZmVycmVkX3dvcmsocHJpdik7CiAJaXdsX3NldHVwX3J4X2hhbmRsZXJzKHByaXYpOworCWl3bF90ZXN0bW9kZV9pbml0KHByaXYpOwogCiAJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCSAqIDguIEVuYWJsZSBpbnRlcnJ1cHRzIGFuZCByZWFkIFJGS0lMTCBzdGF0ZQpAQCAtNDIzNiw4ICszNzcxLDcgQEAKIAlkZXN0cm95X3dvcmtxdWV1ZShwcml2LT53b3JrcXVldWUpOwogCXByaXYtPndvcmtxdWV1ZSA9IE5VTEw7CiAJZnJlZV9pcnEocHJpdi0+cGNpX2Rldi0+aXJxLCBwcml2KTsKLQlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+aXNyX29wcy5mcmVlKQotCQlwcml2LT5jZmctPm9wcy0+bGliLT5pc3Jfb3BzLmZyZWUocHJpdik7CisJaXdsX2ZyZWVfaXNyX2ljdChwcml2KTsKICBvdXRfZGlzYWJsZV9tc2k6CiAJcGNpX2Rpc2FibGVfbXNpKHByaXYtPnBjaV9kZXYpOwogCWl3bF91bmluaXRfZHJ2KHByaXYpOwpAQCAtNDI4MywxNyArMzgxNyw5IEBACiAJaWYgKHByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQpIHsKIAkJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcocHJpdi0+aHcpOwogCQlwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkID0gMDsKLQl9IGVsc2UgewotCQlpd2xfZG93bihwcml2KTsKIAl9CiAKLQkvKgotCSAqIE1ha2Ugc3VyZSBkZXZpY2UgaXMgcmVzZXQgdG8gbG93IHBvd2VyIGJlZm9yZSB1bmxvYWRpbmcgZHJpdmVyLgotCSAqIFRoaXMgbWF5IGJlIHJlZHVuZGFudCB3aXRoIGl3bF9kb3duKCksIGJ1dCB0aGVyZSBhcmUgcGF0aHMgdG8KLQkgKiBydW4gaXdsX2Rvd24oKSB3aXRob3V0IGNhbGxpbmcgYXBtX29wcy5zdG9wKCksIGFuZCB0aGVyZSBhcmUKLQkgKiBwYXRocyB0byBhdm9pZCBydW5uaW5nIGl3bF9kb3duKCkgYXQgYWxsIGJlZm9yZSBsZWF2aW5nIGRyaXZlci4KLQkgKiBUaGlzIChpbmV4cGVuc2l2ZSkgY2FsbCAqbWFrZXMgc3VyZSogZGV2aWNlIGlzIHJlc2V0LgotCSAqLworCS8qIFJlc2V0IHRvIGxvdyBwb3dlciBiZWZvcmUgdW5sb2FkaW5nIGRyaXZlci4gKi8KIAlpd2xfYXBtX3N0b3AocHJpdik7CiAKIAlpd2xfdHRfZXhpdChwcml2KTsKQEAgLTQzMzUsOCArMzg2MSw3IEBACiAKIAlpd2xfdW5pbml0X2Rydihwcml2KTsKIAotCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5pc3Jfb3BzLmZyZWUpCi0JCXByaXYtPmNmZy0+b3BzLT5saWItPmlzcl9vcHMuZnJlZShwcml2KTsKKwlpd2xfZnJlZV9pc3JfaWN0KHByaXYpOwogCiAJZGV2X2tmcmVlX3NrYihwcml2LT5iZWFjb25fc2tiKTsKIApAQCAtNDUyMSwyMSArNDA0NiwyMSBAQAogCXtJV0xfUENJX0RFVklDRSgweDA4OEYsIDB4NDI2NiwgaXdsNjAzNV8yYmdfY2ZnKX0sCiAJe0lXTF9QQ0lfREVWSUNFKDB4MDg4RSwgMHg0NDY2LCBpd2w2MDM1XzJiZ19jZmcpfSwKIAotLyogMjAwIFNlcmllcyAqLwotCXtJV0xfUENJX0RFVklDRSgweDA4OTQsIDB4MDAyMiwgaXdsMjAwX2Jnbl9jZmcpfSwKLQl7SVdMX1BDSV9ERVZJQ0UoMHgwODk1LCAweDAyMjIsIGl3bDIwMF9iZ25fY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDg5NCwgMHgwNDIyLCBpd2wyMDBfYmduX2NmZyl9LAotCXtJV0xfUENJX0RFVklDRSgweDA4OTQsIDB4MDAyNiwgaXdsMjAwX2JnX2NmZyl9LAotCXtJV0xfUENJX0RFVklDRSgweDA4OTUsIDB4MDIyNiwgaXdsMjAwX2JnX2NmZyl9LAotCXtJV0xfUENJX0RFVklDRSgweDA4OTQsIDB4MDQyNiwgaXdsMjAwX2JnX2NmZyl9LAorLyogMTA1IFNlcmllcyAqLworCXtJV0xfUENJX0RFVklDRSgweDA4OTQsIDB4MDAyMiwgaXdsMTA1X2Jnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwODk1LCAweDAyMjIsIGl3bDEwNV9iZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDg5NCwgMHgwNDIyLCBpd2wxMDVfYmduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDA4OTQsIDB4MDAyNiwgaXdsMTA1X2JnX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDA4OTUsIDB4MDIyNiwgaXdsMTA1X2JnX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDA4OTQsIDB4MDQyNiwgaXdsMTA1X2JnX2NmZyl9LAogCi0vKiAyMzAgU2VyaWVzICovCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDg5MiwgMHgwMDYyLCBpd2wyMzBfYmduX2NmZyl9LAotCXtJV0xfUENJX0RFVklDRSgweDA4OTMsIDB4MDI2MiwgaXdsMjMwX2Jnbl9jZmcpfSwKLQl7SVdMX1BDSV9ERVZJQ0UoMHgwODkyLCAweDA0NjIsIGl3bDIzMF9iZ25fY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDg5MiwgMHgwMDY2LCBpd2wyMzBfYmdfY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDg5MywgMHgwMjY2LCBpd2wyMzBfYmdfY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDg5MiwgMHgwNDY2LCBpd2wyMzBfYmdfY2ZnKX0sCisvKiAxMzUgU2VyaWVzICovCisJe0lXTF9QQ0lfREVWSUNFKDB4MDg5MiwgMHgwMDYyLCBpd2wxMzVfYmduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDA4OTMsIDB4MDI2MiwgaXdsMTM1X2Jnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwODkyLCAweDA0NjIsIGl3bDEzNV9iZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDg5MiwgMHgwMDY2LCBpd2wxMzVfYmdfY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDg5MywgMHgwMjY2LCBpd2wxMzVfYmdfY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDg5MiwgMHgwNDY2LCBpd2wxMzVfYmdfY2ZnKX0sCiAKIAl7MH0KIH07CkBAIC00NTg1LDQzICs0MTEwLDIxIEBACiBtb2R1bGVfaW5pdChpd2xfaW5pdCk7CiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnNTAsIGl3bF9kZWJ1Z19sZXZlbCwgdWludCwgU19JUlVHTyk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnNTAsICI1MFhYIGRlYnVnIG91dHB1dCBtYXNrIChkZXByZWNhdGVkKSIpOwogbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBpd2xfZGVidWdfbGV2ZWwsIHVpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJkZWJ1ZyBvdXRwdXQgbWFzayIpOwogI2VuZGlmCiAKLW1vZHVsZV9wYXJhbV9uYW1lZChzd2NyeXB0bzUwLCBpd2xhZ25fbW9kX3BhcmFtcy5zd19jcnlwdG8sIGJvb2wsIFNfSVJVR08pOwotTU9EVUxFX1BBUk1fREVTQyhzd2NyeXB0bzUwLAotCQkgInVzaW5nIGNyeXB0byBpbiBzb2Z0d2FyZSAoZGVmYXVsdCAwIFtoYXJkd2FyZV0pIChkZXByZWNhdGVkKSIpOwogbW9kdWxlX3BhcmFtX25hbWVkKHN3Y3J5cHRvLCBpd2xhZ25fbW9kX3BhcmFtcy5zd19jcnlwdG8sIGludCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKHN3Y3J5cHRvLCAidXNpbmcgY3J5cHRvIGluIHNvZnR3YXJlIChkZWZhdWx0IDAgW2hhcmR3YXJlXSkiKTsKLW1vZHVsZV9wYXJhbV9uYW1lZChxdWV1ZXNfbnVtNTAsCi0JCSAgIGl3bGFnbl9tb2RfcGFyYW1zLm51bV9vZl9xdWV1ZXMsIGludCwgU19JUlVHTyk7Ci1NT0RVTEVfUEFSTV9ERVNDKHF1ZXVlc19udW01MCwKLQkJICJudW1iZXIgb2YgaHcgcXVldWVzIGluIDUweHggc2VyaWVzIChkZXByZWNhdGVkKSIpOwogbW9kdWxlX3BhcmFtX25hbWVkKHF1ZXVlc19udW0sIGl3bGFnbl9tb2RfcGFyYW1zLm51bV9vZl9xdWV1ZXMsIGludCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKHF1ZXVlc19udW0sICJudW1iZXIgb2YgaHcgcXVldWVzLiIpOwotbW9kdWxlX3BhcmFtX25hbWVkKDExbl9kaXNhYmxlNTAsIGl3bGFnbl9tb2RfcGFyYW1zLmRpc2FibGVfMTFuLCBpbnQsIFNfSVJVR08pOwotTU9EVUxFX1BBUk1fREVTQygxMW5fZGlzYWJsZTUwLCAiZGlzYWJsZSA1MFhYIDExbiBmdW5jdGlvbmFsaXR5IChkZXByZWNhdGVkKSIpOwogbW9kdWxlX3BhcmFtX25hbWVkKDExbl9kaXNhYmxlLCBpd2xhZ25fbW9kX3BhcmFtcy5kaXNhYmxlXzExbiwgaW50LCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MoMTFuX2Rpc2FibGUsICJkaXNhYmxlIDExbiBmdW5jdGlvbmFsaXR5Iik7Ci1tb2R1bGVfcGFyYW1fbmFtZWQoYW1zZHVfc2l6ZV84SzUwLCBpd2xhZ25fbW9kX3BhcmFtcy5hbXNkdV9zaXplXzhLLAotCQkgICBpbnQsIFNfSVJVR08pOwotTU9EVUxFX1BBUk1fREVTQyhhbXNkdV9zaXplXzhLNTAsCi0JCSAiZW5hYmxlIDhLIGFtc2R1IHNpemUgaW4gNTBYWCBzZXJpZXMgKGRlcHJlY2F0ZWQpIik7CiBtb2R1bGVfcGFyYW1fbmFtZWQoYW1zZHVfc2l6ZV84SywgaXdsYWduX21vZF9wYXJhbXMuYW1zZHVfc2l6ZV84SywKIAkJICAgaW50LCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MoYW1zZHVfc2l6ZV84SywgImVuYWJsZSA4SyBhbXNkdSBzaXplIik7Ci1tb2R1bGVfcGFyYW1fbmFtZWQoZndfcmVzdGFydDUwLCBpd2xhZ25fbW9kX3BhcmFtcy5yZXN0YXJ0X2Z3LCBpbnQsIFNfSVJVR08pOwotTU9EVUxFX1BBUk1fREVTQyhmd19yZXN0YXJ0NTAsCi0JCSAicmVzdGFydCBmaXJtd2FyZSBpbiBjYXNlIG9mIGVycm9yIChkZXByZWNhdGVkKSIpOwogbW9kdWxlX3BhcmFtX25hbWVkKGZ3X3Jlc3RhcnQsIGl3bGFnbl9tb2RfcGFyYW1zLnJlc3RhcnRfZncsIGludCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKGZ3X3Jlc3RhcnQsICJyZXN0YXJ0IGZpcm13YXJlIGluIGNhc2Ugb2YgZXJyb3IiKTsKLW1vZHVsZV9wYXJhbV9uYW1lZCgKLQlkaXNhYmxlX2h3X3NjYW4sIGl3bGFnbl9tb2RfcGFyYW1zLmRpc2FibGVfaHdfc2NhbiwgaW50LCBTX0lSVUdPKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9od19zY2FuLAotCQkgImRpc2FibGUgaGFyZHdhcmUgc2Nhbm5pbmcgKGRlZmF1bHQgMCkgKGRlcHJlY2F0ZWQpIik7CiAKIG1vZHVsZV9wYXJhbV9uYW1lZCh1Y29kZV9hbHRlcm5hdGl2ZSwgaXdsYWduX3dhbnRlZF91Y29kZV9hbHRlcm5hdGl2ZSwgaW50LAogCQkgICBTX0lSVUdPKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmgKaW5kZXggMjBmOGU0MS4uZmUzM2ZlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC02Niw3ICs2Niw2IEBACiAjaW5jbHVkZSAiaXdsLWRldi5oIgogCiAvKiBjb25maWd1cmF0aW9uIGZvciB0aGUgX2FnbiBkZXZpY2VzICovCi1leHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNDk2NV9hZ25fY2ZnOwogZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDUzMDBfYWduX2NmZzsKIGV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MTAwX2Fnbl9jZmc7CiBleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNTM1MF9hZ25fY2ZnOwpAQCAtMTAzLDEwICsxMDIsMTAgQEAKIGV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDM1XzJhZ25fY2ZnOwogZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDYwMzVfMmFiZ19jZmc7CiBleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjAzNV8yYmdfY2ZnOwotZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDIwMF9iZ19jZmc7Ci1leHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsMjAwX2Jnbl9jZmc7Ci1leHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsMjMwX2JnX2NmZzsKLWV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2wyMzBfYmduX2NmZzsKK2V4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2wxMDVfYmdfY2ZnOworZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDEwNV9iZ25fY2ZnOworZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDEzNV9iZ19jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsMTM1X2Jnbl9jZmc7CiAKIGV4dGVybiBzdHJ1Y3QgaXdsX21vZF9wYXJhbXMgaXdsYWduX21vZF9wYXJhbXM7CiBleHRlcm4gc3RydWN0IGl3bF9oY21kX29wcyBpd2xhZ25faGNtZDsKQEAgLTExNCw3ICsxMTMsNiBAQAogZXh0ZXJuIHN0cnVjdCBpd2xfaGNtZF91dGlsc19vcHMgaXdsYWduX2hjbWRfdXRpbHM7CiAKIGV4dGVybiBzdHJ1Y3QgaWVlZTgwMjExX29wcyBpd2xhZ25faHdfb3BzOwotZXh0ZXJuIHN0cnVjdCBpZWVlODAyMTFfb3BzIGl3bDQ5NjVfaHdfb3BzOwogCiBpbnQgaXdsX3Jlc2V0X2ljdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogdm9pZCBpd2xfZGlzYWJsZV9pY3Qoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKQEAgLTEyMiwyMSArMTIwLDI1IEBACiB2b2lkIGl3bF9mcmVlX2lzcl9pY3Qoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGlycXJldHVybl90IGl3bF9pc3JfaWN0KGludCBpcnEsIHZvaWQgKmRhdGEpOwogCisvKiBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gZmx1c2ggYW55IHNjaGVkdWxlZCB0YXNrbGV0ICovCitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX3N5bmNocm9uaXplX2lycShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJLyogd2FpdCB0byBtYWtlIHN1cmUgd2UgZmx1c2ggcGVuZGluZyB0YXNrbGV0Ki8KKwlzeW5jaHJvbml6ZV9pcnEocHJpdi0+cGNpX2Rldi0+aXJxKTsKKwl0YXNrbGV0X2tpbGwoJnByaXYtPmlycV90YXNrbGV0KTsKK30KKworaW50IGl3bF9wcmVwYXJlX2NhcmRfaHcoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKKworaW50IGl3bGFnbl9zdGFydF9kZXZpY2Uoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3ZvaWQgaXdsYWduX3N0b3BfZGV2aWNlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CisKIC8qIHR4IHF1ZXVlICovCiB2b2lkIGl3bGFnbl9zZXRfd3JfcHRycyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCSAgICAgaW50IHR4cV9pZCwgdTMyIGluZGV4KTsKIHZvaWQgaXdsYWduX3R4X3F1ZXVlX3NldF9zdGF0dXMoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJICAgICBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEsCiAJCQkgICAgIGludCB0eF9maWZvX2lkLCBpbnQgc2NkX3JldHJ5KTsKLXZvaWQgaXdsYWduX3R4cV91cGRhdGVfYnl0ZV9jbnRfdGJsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICAgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxLAotCQkJCSAgICB1MTYgYnl0ZV9jbnQpOwotdm9pZCBpd2xhZ25fdHhxX2ludmFsX2J5dGVfY250X3RibChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICAgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKTsKLWludCBpd2xhZ25fdHhxX2FnZ19lbmFibGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgdHhxX2lkLAotCQkJICBpbnQgdHhfZmlmbywgaW50IHN0YV9pZCwgaW50IHRpZCwgdTE2IHNzbl9pZHgpOwotaW50IGl3bGFnbl90eHFfYWdnX2Rpc2FibGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MTYgdHhxX2lkLAotCQkJICAgdTE2IHNzbl9pZHgsIHU4IHR4X2ZpZm8pOwogdm9pZCBpd2xhZ25fdHhxX3NldF9zY2hlZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBtYXNrKTsKIHZvaWQgaXdsX2ZyZWVfdGZkc19pbl9xdWV1ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICAgaW50IHN0YV9pZCwgaW50IHRpZCwgaW50IGZyZWVkKTsKQEAgLTE1MSwxNiArMTUzLDE0IEBACiAJCQkgICAgIHUzMiBjaGFuZ2VzKTsKIAogLyogdUNvZGUgKi8KLWludCBpd2xhZ25fbG9hZF91Y29kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogdm9pZCBpd2xhZ25fcnhfY2FsaWJfcmVzdWx0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4Yik7Ci12b2lkIGl3bGFnbl9yeF9jYWxpYl9jb21wbGV0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4Yik7Ci12b2lkIGl3bGFnbl9pbml0X2FsaXZlX3N0YXJ0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci1pbnQgaXdsYWduX2FsaXZlX25vdGlmeShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotaW50IGl3bF92ZXJpZnlfdWNvZGUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKLXZvaWQgaXdsYWduX3NlbmRfYnRfZW52KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggYWN0aW9uLCB1OCB0eXBlKTsKK2ludCBpd2xhZ25fc2VuZF9idF9lbnYoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBhY3Rpb24sIHU4IHR5cGUpOwogdm9pZCBpd2xhZ25fc2VuZF9wcmlvX3RibChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworaW50IGl3bGFnbl9ydW5faW5pdF91Y29kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworaW50IGl3bGFnbl9sb2FkX3Vjb2RlX3dhaXRfYWxpdmUoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSBzdHJ1Y3QgZndfaW1nICppbWFnZSwKKwkJCQkgaW50IHN1YnR5cGUsIGludCBhbHRlcm5hdGVfc3VidHlwZSk7CiAKIC8qIGxpYiAqLwogdm9pZCBpd2xfY2hlY2tfYWJvcnRfc3RhdHVzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKQEAgLTE3OSw4ICsxNzksNiBAQAogaW50IGl3bGFnbl93YWl0X3R4X3F1ZXVlX2VtcHR5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsYWduX3R4Zmlmb19mbHVzaChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiBmbHVzaF9jb250cm9sKTsKIHZvaWQgaXdsYWduX2Rldl90eGZpZm9fZmx1c2goc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MTYgZmx1c2hfY29udHJvbCk7Ci12b2lkIGl3bF9kdW1wX2NzcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotaW50IGl3bF9kdW1wX2ZoKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY2hhciAqKmJ1ZiwgYm9vbCBkaXNwbGF5KTsKIAogLyogcnggKi8KIHZvaWQgaXdsYWduX3J4X3F1ZXVlX3Jlc3RvY2soc3RydWN0IGl3bF9wcml2ICpwcml2KTsKQEAgLTIwNiw2ICsyMDQsOSBAQAogCQkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCwgdTE2ICpzc24pOwogaW50IGl3bGFnbl90eF9hZ2dfc3RvcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKTsKK3ZvaWQgaXdsYWduX3R4cV9hZ2dfcXVldWVfc2V0dXAoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCQkJaW50IHRpZCwgaW50IGZyYW1lX2xpbWl0KTsKIGludCBpd2xhZ25fdHhxX2NoZWNrX2VtcHR5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgIGludCBzdGFfaWQsIHU4IHRpZCwgaW50IHR4cV9pZCk7CiB2b2lkIGl3bGFnbl9yeF9yZXBseV9jb21wcmVzc2VkX2JhKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKQEAgLTIyNSw2ICsyMjYsNyBAQAogCWNhc2UgVFhfU1RBVFVTX0RJUkVDVF9ET05FOgogCQlyZXR1cm4gSUVFRTgwMjExX1RYX1NUQVRfQUNLOwogCWNhc2UgVFhfU1RBVFVTX0ZBSUxfREVTVF9QUzoKKwljYXNlIFRYX1NUQVRVU19GQUlMX1BBU1NJVkVfTk9fUlg6CiAJCXJldHVybiBJRUVFODAyMTFfVFhfU1RBVF9UWF9GSUxURVJFRDsKIAlkZWZhdWx0OgogCQlyZXR1cm4gMDsKQEAgLTI0OSw4ICsyNTEsNiBAQAogCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIGJvb2wgYWRkKTsKIAogLyogaGNtZCAqLwotaW50IGl3bGFnbl9zZW5kX3J4b25fYXNzb2Moc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJICAgc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eCk7CiBpbnQgaXdsYWduX3NlbmRfdHhfYW50X2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IHZhbGlkX3R4X2FudCk7CiBpbnQgaXdsYWduX3NlbmRfYmVhY29uX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCkBAIC0zMTEsNyArMzExLDcgQEAKIAogc3RhdGljIGlubGluZSB1OCBpd2xfaHdfZ2V0X3JhdGUoX19sZTMyIHJhdGVfbl9mbGFncykKIHsKLQlyZXR1cm4gbGUzMl90b19jcHUocmF0ZV9uX2ZsYWdzKSAmIDB4RkY7CisJcmV0dXJuIGxlMzJfdG9fY3B1KHJhdGVfbl9mbGFncykgJiBSQVRFX01DU19SQVRFX01TSzsKIH0KIAogc3RhdGljIGlubGluZSBfX2xlMzIgaXdsX2h3X3NldF9yYXRlX25fZmxhZ3ModTggcmF0ZSwgdTMyIGZsYWdzKQpAQCAtMzIyLDUwICszMjIsMzkgQEAKIC8qIGVlcHJvbSAqLwogdm9pZCBpd2xjb3JlX2VlcHJvbV9lbmhhbmNlZF90eHBvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB2b2lkIGl3bF9lZXByb21fZ2V0X21hYyhjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4ICptYWMpOwotaW50IGl3bGNvcmVfZWVwcm9tX2FjcXVpcmVfc2VtYXBob3JlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci12b2lkIGl3bGNvcmVfZWVwcm9tX3JlbGVhc2Vfc2VtYXBob3JlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKIC8qIG5vdGlmaWNhdGlvbiB3YWl0IHN1cHBvcnQgKi8KIHZvaWQgX19hY3F1aXJlcyh3YWl0X2VudHJ5KQogaXdsYWduX2luaXRfbm90aWZpY2F0aW9uX3dhaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJICAgICAgc3RydWN0IGl3bF9ub3RpZmljYXRpb25fd2FpdCAqd2FpdF9lbnRyeSwKKwkJCSAgICAgIHU4IGNtZCwKIAkJCSAgICAgIHZvaWQgKCpmbikoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCQkgc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCksCi0JCQkgICAgICB1OCBjbWQpOwotc2lnbmVkIGxvbmcgX19yZWxlYXNlcyh3YWl0X2VudHJ5KQorCQkJCQkgc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCwKKwkJCQkJIHZvaWQgKmRhdGEpLAorCQkJICAgICAgdm9pZCAqZm5fZGF0YSk7CitpbnQgX19tdXN0X2NoZWNrIF9fcmVsZWFzZXMod2FpdF9lbnRyeSkKIGl3bGFnbl93YWl0X25vdGlmaWNhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgc3RydWN0IGl3bF9ub3RpZmljYXRpb25fd2FpdCAqd2FpdF9lbnRyeSwKIAkJCSB1bnNpZ25lZCBsb25nIHRpbWVvdXQpOwogdm9pZCBfX3JlbGVhc2VzKHdhaXRfZW50cnkpCiBpd2xhZ25fcmVtb3ZlX25vdGlmaWNhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICBzdHJ1Y3QgaXdsX25vdGlmaWNhdGlvbl93YWl0ICp3YWl0X2VudHJ5KTsKLQotLyogbWFjODAyMTEgaGFuZGxlcnMgKGZvciA0OTY1KSAqLwotdm9pZCBpd2xhZ25fbWFjX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLWludCBpd2xhZ25fbWFjX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKLXZvaWQgaXdsYWduX21hY19zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKLXZvaWQgaXdsYWduX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgICAgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAotCQkJICAgICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAotCQkJICAgICB1NjQgbXVsdGljYXN0KTsKLWludCBpd2xhZ25fbWFjX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAotCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKLQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSk7Ci12b2lkIGl3bGFnbl9tYWNfdXBkYXRlX3RraXBfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5Y29uZiwKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAotCQkJCXUzMiBpdjMyLCB1MTYgKnBoYXNlMWtleSk7Ci1pbnQgaXdsYWduX21hY19hbXBkdV9hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCSAgICBlbnVtIGllZWU4MDIxMV9hbXBkdV9tbG1lX2FjdGlvbiBhY3Rpb24sCi0JCQkgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCwgdTE2ICpzc24sCi0JCQkgICAgdTggYnVmX3NpemUpOwotaW50IGl3bGFnbl9tYWNfc3RhX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKTsKLXZvaWQgaXdsYWduX21hY19jaGFubmVsX3N3aXRjaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfc3dpdGNoICpjaF9zd2l0Y2gpOwotdm9pZCBpd2xhZ25fbWFjX2ZsdXNoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGRyb3ApOworZXh0ZXJuIGludCBpd2xhZ25faW5pdF9hbGl2ZV9zdGFydChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2xfYWxpdmVfc3RhcnQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKKy8qIHN2dG9vbCAqLworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFVklDRV9TVlRPT0wKK2V4dGVybiBpbnQgaXdsX3Rlc3Rtb2RlX2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdm9pZCAqZGF0YSwgaW50IGxlbik7CitleHRlcm4gdm9pZCBpd2xfdGVzdG1vZGVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUKK2ludCBpd2xfdGVzdG1vZGVfY21kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCXJldHVybiAtRU5PU1lTOworfQorc3RhdGljIGlubGluZQordm9pZCBpd2xfdGVzdG1vZGVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7Cit9CisjZW5kaWYKIAogI2VuZGlmIC8qIF9faXdsX2Fnbl9oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvbW1hbmRzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb21tYW5kcy5oCmluZGV4IGNhNDJmZmEuLjVmZGFkNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvbW1hbmRzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29tbWFuZHMuaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTEwMyw5ICsxMDMsNyBAQAogCVJFUExZX1dFUEtFWSA9IDB4MjAsCiAKIAkvKiBSWCwgVFgsIExFRHMgKi8KLQlSRVBMWV8zOTQ1X1JYID0gMHgxYiwgICAgICAgICAgIC8qIDM5NDUgb25seSAqLwogCVJFUExZX1RYID0gMHgxYywKLQlSRVBMWV9SQVRFX1NDQUxFID0gMHg0NywJLyogMzk0NSBvbmx5ICovCiAJUkVQTFlfTEVEU19DTUQgPSAweDQ4LAogCVJFUExZX1RYX0xJTktfUVVBTElUWV9DTUQgPSAweDRlLCAvKiBmb3IgNDk2NSBhbmQgdXAgKi8KIApAQCAtMjI5LDcgKzIyNyw3IEBACiAJICogVGhlcmUgaXMgb25lIGV4Y2VwdGlvbjogIHVDb2RlIHNldHMgYml0IDE1IHdoZW4gaXQgb3JpZ2luYXRlcwogCSAqIHRoZSByZXNwb25zZS9ub3RpZmljYXRpb24sIGkuZS4gd2hlbiB0aGUgcmVzcG9uc2Uvbm90aWZpY2F0aW9uCiAJICogaXMgbm90IGEgZGlyZWN0IHJlc3BvbnNlIHRvIGEgY29tbWFuZCBzZW50IGJ5IHRoZSBkcml2ZXIuICBGb3IKLQkgKiBleGFtcGxlLCB1Q29kZSBpc3N1ZXMgUkVQTFlfMzk0NV9SWCB3aGVuIGl0IHNlbmRzIGEgcmVjZWl2ZWQgZnJhbWUKKwkgKiBleGFtcGxlLCB1Q29kZSBpc3N1ZXMgUkVQTFlfUlggd2hlbiBpdCBzZW5kcyBhIHJlY2VpdmVkIGZyYW1lCiAJICogdG8gdGhlIGRyaXZlcjsgaXQgaXMgbm90IGEgZGlyZWN0IHJlc3BvbnNlIHRvIGFueSBkcml2ZXIgY29tbWFuZC4KIAkgKgogCSAqIFRoZSBMaW51eCBkcml2ZXIgdXNlcyB0aGUgZm9sbG93aW5nIGZvcm1hdDoKQEAgLTI0OSwzNiArMjQ3LDYgQEAKIAogCiAvKioKLSAqIHN0cnVjdCBpd2wzOTQ1X3R4X3Bvd2VyCi0gKgotICogVXNlZCBpbiBSRVBMWV9UWF9QV1JfVEFCTEVfQ01ELCBSRVBMWV9TQ0FOX0NNRCwgUkVQTFlfQ0hBTk5FTF9TV0lUQ0gKLSAqCi0gKiBFYWNoIGVudHJ5IGNvbnRhaW5zIHR3byB2YWx1ZXM6Ci0gKiAxKSAgRFNQIGdhaW4gKG9yIHNvbWV0aW1lcyBjYWxsZWQgRFNQIGF0dGVudWF0aW9uKS4gIFRoaXMgaXMgYSBmaW5lLWdyYWluZWQKLSAqICAgICBsaW5lYXIgdmFsdWUgdGhhdCBtdWx0aXBsaWVzIHRoZSBvdXRwdXQgb2YgdGhlIGRpZ2l0YWwgc2lnbmFsIHByb2Nlc3NvciwKLSAqICAgICBiZWZvcmUgYmVpbmcgc2VudCB0byB0aGUgYW5hbG9nIHJhZGlvLgotICogMikgIFJhZGlvIGdhaW4uICBUaGlzIHNldHMgdGhlIGFuYWxvZyBnYWluIG9mIHRoZSByYWRpbyBUeCBwYXRoLgotICogICAgIEl0IGlzIGEgY29hcnNlciBzZXR0aW5nLCBhbmQgYmVoYXZlcyBpbiBhIGxvZ2FyaXRobWljIChkQikgZmFzaGlvbi4KLSAqCi0gKiBEcml2ZXIgb2J0YWlucyB2YWx1ZXMgZnJvbSBzdHJ1Y3QgaXdsMzk0NV90eF9wb3dlciBwb3dlcl9nYWluX3RhYmxlW11bXS4KLSAqLwotc3RydWN0IGl3bDM5NDVfdHhfcG93ZXIgewotCXU4IHR4X2dhaW47CQkvKiBnYWluIGZvciBhbmFsb2cgcmFkaW8gKi8KLQl1OCBkc3BfYXR0ZW47CQkvKiBnYWluIGZvciBEU1AgKi8KLX0gX19wYWNrZWQ7Ci0KLS8qKgotICogc3RydWN0IGl3bDM5NDVfcG93ZXJfcGVyX3JhdGUKLSAqCi0gKiBVc2VkIGluIFJFUExZX1RYX1BXUl9UQUJMRV9DTUQsIFJFUExZX0NIQU5ORUxfU1dJVENICi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3Bvd2VyX3Blcl9yYXRlIHsKLQl1OCByYXRlOwkJLyogcGxjcCAqLwotCXN0cnVjdCBpd2wzOTQ1X3R4X3Bvd2VyIHRwYzsKLQl1OCByZXNlcnZlZDsKLX0gX19wYWNrZWQ7Ci0KLS8qKgogICogaXdsYWduIHJhdGVfbl9mbGFncyBiaXQgZmllbGRzCiAgKgogICogcmF0ZV9uX2ZsYWdzIGZvcm1hdCBpcyB1c2VkIGluIGZvbGxvd2luZyBpd2xhZ24gY29tbWFuZHM6CkBAIC0zMjQsNiArMjkyLDggQEAKICNkZWZpbmUgUkFURV9NQ1NfU1BBVElBTF9NU0sgMHgxOAogI2RlZmluZSBSQVRFX01DU19IVF9EVVBfUE9TIDUKICNkZWZpbmUgUkFURV9NQ1NfSFRfRFVQX01TSyAweDIwCisvKiBCb3RoIGxlZ2FjeSBhbmQgSFQgdXNlIGJpdHMgNzowIGFzIHRoZSBDQ0svT0ZETSByYXRlIG9yIEhUIE1DUyAqLworI2RlZmluZSBSQVRFX01DU19SQVRFX01TSyAweGZmCiAKIC8qIEJpdCA4OiAoMSkgSFQgZm9ybWF0LCAoMCkgbGVnYWN5IGZvcm1hdCBpbiBiaXRzIDc6MCAqLwogI2RlZmluZSBSQVRFX01DU19GTEFHU19QT1MgOApAQCAtMzc1LDMwICszNDUsNiBAQAogI2RlZmluZSBJV0xfUFdSX0NDS19FTlRSSUVTCQkJMgogCiAvKioKLSAqIHVuaW9uIGl3bDQ5NjVfdHhfcG93ZXJfZHVhbF9zdHJlYW0KLSAqCi0gKiBIb3N0IGZvcm1hdCB1c2VkIGZvciBSRVBMWV9UWF9QV1JfVEFCTEVfQ01ELCBSRVBMWV9DSEFOTkVMX1NXSVRDSAotICogVXNlIF9fbGUzMiB2ZXJzaW9uIChzdHJ1Y3QgdHhfcG93ZXJfZHVhbF9zdHJlYW0pIHdoZW4gYnVpbGRpbmcgY29tbWFuZC4KLSAqCi0gKiBEcml2ZXIgcHJvdmlkZXMgcmFkaW8gZ2FpbiBhbmQgRFNQIGF0dGVudWF0aW9uIHNldHRpbmdzIHRvIGRldmljZSBpbiBwYWlycywKLSAqIG9uZSB2YWx1ZSBmb3IgZWFjaCB0cmFuc21pdHRlciBjaGFpbi4gIFRoZSBmaXJzdCB2YWx1ZSBpcyBmb3IgdHJhbnNtaXR0ZXIgQSwKLSAqIHNlY29uZCBmb3IgdHJhbnNtaXR0ZXIgQi4KLSAqCi0gKiBGb3IgU0lTTyBiaXQgcmF0ZXMsIGJvdGggdmFsdWVzIGluIGEgcGFpciBzaG91bGQgYmUgaWRlbnRpY2FsLgotICogRm9yIE1JTU8gcmF0ZXMsIG9uZSB2YWx1ZSBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlIG90aGVyLAotICogaW4gb3JkZXIgdG8gYmFsYW5jZSB0aGUgVHggb3V0cHV0IGJldHdlZW4gdGhlIHR3byB0cmFuc21pdHRlcnMuCi0gKgotICogU2VlIG1vcmUgZGV0YWlscyBpbiBkb2MgZm9yIFRYUE9XRVIgaW4gaXdsLTQ5NjUtaHcuaC4KLSAqLwotdW5pb24gaXdsNDk2NV90eF9wb3dlcl9kdWFsX3N0cmVhbSB7Ci0Jc3RydWN0IHsKLQkJdTggcmFkaW9fdHhfZ2FpblsyXTsKLQkJdTggZHNwX3ByZWRpc19hdHRlblsyXTsKLQl9IHM7Ci0JdTMyIGR3OwotfTsKLQotLyoqCiAgKiBzdHJ1Y3QgdHhfcG93ZXJfZHVhbF9zdHJlYW0KICAqCiAgKiBUYWJsZSBlbnRyaWVzIGluIFJFUExZX1RYX1BXUl9UQUJMRV9DTUQsIFJFUExZX0NIQU5ORUxfU1dJVENICkBAIC00MTAsMTUgKzM1Niw2IEBACiB9IF9fcGFja2VkOwogCiAvKioKLSAqIHN0cnVjdCBpd2w0OTY1X3R4X3Bvd2VyX2RiCi0gKgotICogRW50aXJlIHRhYmxlIHdpdGhpbiBSRVBMWV9UWF9QV1JfVEFCTEVfQ01ELCBSRVBMWV9DSEFOTkVMX1NXSVRDSAotICovCi1zdHJ1Y3QgaXdsNDk2NV90eF9wb3dlcl9kYiB7Ci0Jc3RydWN0IHR4X3Bvd2VyX2R1YWxfc3RyZWFtIHBvd2VyX3RibFtQT1dFUl9UQUJMRV9OVU1fRU5UUklFU107Ci19IF9fcGFja2VkOwotCi0vKioKICAqIENvbW1hbmQgUkVQTFlfVFhfUE9XRVJfREJNX0NNRCA9IDB4OTgKICAqIHN0cnVjdCBpd2xhZ25fdHhfcG93ZXJfZGJtX2NtZAogICovCkBAIC00NDksNTUgKzM4NiwxOCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjZGVmaW5lIFVDT0RFX1ZBTElEX09LCWNwdV90b19sZTMyKDB4MSkKLSNkZWZpbmUgSU5JVElBTElaRV9TVUJUWVBFICAgICg5KQogCi0vKgotICogKCJJbml0aWFsaXplIikgUkVQTFlfQUxJVkUgPSAweDEgKHJlc3BvbnNlIG9ubHksIG5vdCBhIGNvbW1hbmQpCi0gKgotICogdUNvZGUgaXNzdWVzIHRoaXMgImluaXRpYWxpemUgYWxpdmUiIG5vdGlmaWNhdGlvbiBvbmNlIHRoZSBpbml0aWFsaXphdGlvbgotICogdUNvZGUgaW1hZ2UgaGFzIGNvbXBsZXRlZCBpdHMgd29yaywgYW5kIGlzIHJlYWR5IHRvIGxvYWQgdGhlIHJ1bnRpbWUgaW1hZ2UuCi0gKiBUaGlzIGlzIHRoZSAqZmlyc3QqICJhbGl2ZSIgbm90aWZpY2F0aW9uIHRoYXQgdGhlIGRyaXZlciB3aWxsIHJlY2VpdmUgYWZ0ZXIKLSAqIHJlYm9vdGluZyB1Q29kZTsgdGhlICJpbml0aWFsaXplIiBhbGl2ZSBpcyBpbmRpY2F0ZWQgYnkgc3VidHlwZSBmaWVsZCA9PSA5LgotICoKLSAqIFNlZSBjb21tZW50cyBkb2N1bWVudGluZyAiQlNNIiAoYm9vdHN0cmFwIHN0YXRlIG1hY2hpbmUpLgotICoKLSAqIEZvciA0OTY1LCB0aGlzIG5vdGlmaWNhdGlvbiBjb250YWlucyBpbXBvcnRhbnQgY2FsaWJyYXRpb24gZGF0YSBmb3IKLSAqIGNhbGN1bGF0aW5nIHR4cG93ZXIgc2V0dGluZ3M6Ci0gKgotICogMSkgIFBvd2VyIHN1cHBseSB2b2x0YWdlIGluZGljYXRpb24uICBUaGUgdm9sdGFnZSBzZW5zb3Igb3V0cHV0cyBoaWdoZXIKLSAqICAgICB2YWx1ZXMgZm9yIGxvd2VyIHZvbHRhZ2UsIGFuZCB2aWNlIHZlcnNlLgotICoKLSAqIDIpICBUZW1wZXJhdHVyZSBtZWFzdXJlbWVudCBwYXJhbWV0ZXJzLCBmb3IgZWFjaCBvZiB0d28gY2hhbm5lbCB3aWR0aHMKLSAqICAgICAoMjAgTUh6IGFuZCA0MCBNSHopIHN1cHBvcnRlZCBieSB0aGUgcmFkaW9zLiAgVGVtcGVyYXR1cmUgc2Vuc2luZwotICogICAgIGlzIGRvbmUgdmlhIG9uZSBvZiB0aGUgcmVjZWl2ZXIgY2hhaW5zLCBhbmQgY2hhbm5lbCB3aWR0aCBpbmZsdWVuY2VzCi0gKiAgICAgdGhlIHJlc3VsdHMuCi0gKgotICogMykgIFR4IGdhaW4gY29tcGVuc2F0aW9uIHRvIGJhbGFuY2UgNDk2NSdzIDIgVHggY2hhaW5zIGZvciBNSU1PIG9wZXJhdGlvbiwKLSAqICAgICBmb3IgZWFjaCBvZiA1IGZyZXF1ZW5jeSByYW5nZXMuCi0gKi8KLXN0cnVjdCBpd2xfaW5pdF9hbGl2ZV9yZXNwIHsKLQl1OCB1Y29kZV9taW5vcjsKLQl1OCB1Y29kZV9tYWpvcjsKLQlfX2xlMTYgcmVzZXJ2ZWQxOwotCXU4IHN3X3Jldls4XTsKLQl1OCB2ZXJfdHlwZTsKLQl1OCB2ZXJfc3VidHlwZTsJCS8qICI5IiBmb3IgaW5pdGlhbGl6ZSBhbGl2ZSAqLwotCV9fbGUxNiByZXNlcnZlZDI7Ci0JX19sZTMyIGxvZ19ldmVudF90YWJsZV9wdHI7Ci0JX19sZTMyIGVycm9yX2V2ZW50X3RhYmxlX3B0cjsKLQlfX2xlMzIgdGltZXN0YW1wOwotCV9fbGUzMiBpc192YWxpZDsKK2VudW0gaXdsYWduX3Vjb2RlX3N1YnR5cGUgeworCVVDT0RFX1NVQlRZUEVfUkVHVUxBUgk9IDAsCisJVUNPREVfU1VCVFlQRV9SRUdVTEFSX05FVyA9IDEsCisJVUNPREVfU1VCVFlQRV9JTklUCT0gOSwKIAotCS8qIGNhbGlicmF0aW9uIHZhbHVlcyBmcm9tICJpbml0aWFsaXplIiB1Q29kZSAqLwotCV9fbGUzMiB2b2x0YWdlOwkJLyogc2lnbmVkLCBoaWdoZXIgdmFsdWUgaXMgbG93ZXIgdm9sdGFnZSAqLwotCV9fbGUzMiB0aGVybV9yMVsyXTsJLyogc2lnbmVkLCAxc3QgZm9yIG5vcm1hbCwgMm5kIGZvciBIVDQwICovCi0JX19sZTMyIHRoZXJtX3IyWzJdOwkvKiBzaWduZWQgKi8KLQlfX2xlMzIgdGhlcm1fcjNbMl07CS8qIHNpZ25lZCAqLwotCV9fbGUzMiB0aGVybV9yNFsyXTsJLyogc2lnbmVkICovCi0JX19sZTMyIHR4X2F0dGVuWzVdWzJdOwkvKiBzaWduZWQgTUlNTyBnYWluIGNvbXAsIDUgZnJlcSBncm91cHMsCi0JCQkJICogMiBUeCBjaGFpbnMgKi8KLX0gX19wYWNrZWQ7Ci0KKwkvKgorCSAqIE5vdCBhIHZhbGlkIHN1YnR5cGUsIHRoZSB1Y29kZSBoYXMganVzdCBhIHU4LCBzbworCSAqIHdlIGNhbiB1c2Ugc29tZXRoaW5nID4gMHhmZiBmb3IgdGhpcyB2YWx1ZS4KKwkgKi8KKwlVQ09ERV9TVUJUWVBFX05PTkVfTE9BREVEID0gMHgxMDAsCit9OwogCiAvKioKICAqIFJFUExZX0FMSVZFID0gMHgxIChyZXNwb25zZSBvbmx5LCBub3QgYSBjb21tYW5kKQpAQCAtNTMzLDQ5ICs0MzMsNjEgQEAKICAqCiAgKiAyKSAgZXJyb3JfZXZlbnRfdGFibGVfcHRyIGluZGljYXRlcyBiYXNlIG9mIHRoZSBlcnJvciBsb2cuICBUaGlzIGNvbnRhaW5zCiAgKiAgICAgaW5mb3JtYXRpb24gYWJvdXQgYW55IHVDb2RlIGVycm9yIHRoYXQgb2NjdXJzLiAgRm9yIGFnbiwgdGhlIGZvcm1hdAotICogICAgIG9mIHRoZSBlcnJvciBsb2cgaXM6Ci0gKgotICoJX19sZTMyIHZhbGlkOyAgICAgICAgKG5vbnplcm8pIHZhbGlkLCAoMCkgbG9nIGlzIGVtcHR5Ci0gKglfX2xlMzIgZXJyb3JfaWQ7ICAgICB0eXBlIG9mIGVycm9yCi0gKglfX2xlMzIgcGM7ICAgICAgICAgICBwcm9ncmFtIGNvdW50ZXIKLSAqCV9fbGUzMiBibGluazE7ICAgICAgIGJyYW5jaCBsaW5rCi0gKglfX2xlMzIgYmxpbmsyOyAgICAgICBicmFuY2ggbGluawotICoJX19sZTMyIGlsaW5rMTsgICAgICAgaW50ZXJydXB0IGxpbmsKLSAqCV9fbGUzMiBpbGluazI7ICAgICAgIGludGVycnVwdCBsaW5rCi0gKglfX2xlMzIgZGF0YTE7ICAgICAgICBlcnJvci1zcGVjaWZpYyBkYXRhCi0gKglfX2xlMzIgZGF0YTI7ICAgICAgICBlcnJvci1zcGVjaWZpYyBkYXRhCi0gKglfX2xlMzIgbGluZTsgICAgICAgICBzb3VyY2UgY29kZSBsaW5lIG9mIGVycm9yCi0gKglfX2xlMzIgYmNvbl90aW1lOyAgICBiZWFjb24gdGltZXIKLSAqCV9fbGUzMiB0c2ZfbG93OyAgICAgIG5ldHdvcmsgdGltZXN0YW1wIGZ1bmN0aW9uIHRpbWVyCi0gKglfX2xlMzIgdHNmX2hpOyAgICAgICBuZXR3b3JrIHRpbWVzdGFtcCBmdW5jdGlvbiB0aW1lcgotICoJX19sZTMyIGdwMTsgICAgICAgICAgR1AxIHRpbWVyIHJlZ2lzdGVyCi0gKglfX2xlMzIgZ3AyOyAgICAgICAgICBHUDIgdGltZXIgcmVnaXN0ZXIKLSAqCV9fbGUzMiBncDM7ICAgICAgICAgIEdQMyB0aW1lciByZWdpc3RlcgotICoJX19sZTMyIHVjb2RlX3ZlcjsgICAgdUNvZGUgdmVyc2lvbgotICoJX19sZTMyIGh3X3ZlcjsgICAgICAgSFcgU2lsaWNvbiB2ZXJzaW9uCi0gKglfX2xlMzIgYnJkX3ZlcjsgICAgICBIVyBib2FyZCB2ZXJzaW9uCi0gKglfX2xlMzIgbG9nX3BjOyAgICAgICBsb2cgcHJvZ3JhbSBjb3VudGVyCi0gKglfX2xlMzIgZnJhbWVfcHRyOyAgICBmcmFtZSBwb2ludGVyCi0gKglfX2xlMzIgc3RhY2tfcHRyOyAgICBzdGFjayBwb2ludGVyCi0gKglfX2xlMzIgaGNtZDsgICAgICAgICBsYXN0IGhvc3QgY29tbWFuZAotICoJX19sZTMyIGlzcjA7ICAgICAgICAgaXNyIHN0YXR1cyByZWdpc3RlciBMTVBNX05JQ19JU1IwOiByeHR4X2ZsYWcKLSAqCV9fbGUzMiBpc3IxOyAgICAgICAgIGlzciBzdGF0dXMgcmVnaXN0ZXIgTE1QTV9OSUNfSVNSMTogaG9zdF9mbGFnCi0gKglfX2xlMzIgaXNyMjsgICAgICAgICBpc3Igc3RhdHVzIHJlZ2lzdGVyIExNUE1fTklDX0lTUjI6IGVuY19mbGFnCi0gKglfX2xlMzIgaXNyMzsgICAgICAgICBpc3Igc3RhdHVzIHJlZ2lzdGVyIExNUE1fTklDX0lTUjM6IHRpbWVfZmxhZwotICoJX19sZTMyIGlzcjQ7ICAgICAgICAgaXNyIHN0YXR1cyByZWdpc3RlciBMTVBNX05JQ19JU1I0OiB3aWNvIGludGVycnVwdAotICoJX19sZTMyIGlzcl9wcmVmOyAgICAgaXNyIHN0YXR1cyByZWdpc3RlciBMTVBNX05JQ19QUkVGX1NUQVQKLSAqCV9fbGUzMiB3YWl0X2V2ZW50OyAgIHdhaXQgZXZlbnQoKSBjYWxsZXIgYWRkcmVzcwotICoJX19sZTMyIGwycF9jb250cm9sOyAgTDJwQ29udHJvbEZpZWxkCi0gKglfX2xlMzIgbDJwX2R1cmF0aW9uOyBMMnBEdXJhdGlvbkZpZWxkCi0gKglfX2xlMzIgbDJwX21odmFsaWQ7ICBMMnBNaFZhbGlkQml0cwotICoJX19sZTMyIGwycF9hZGRyX21hdGNoOyBMMnBBZGRyTWF0Y2hTdGF0Ci0gKglfX2xlMzIgbG1wbV9wbWdfc2VsOyBpbmRpY2F0ZSB3aGljaCBjbG9ja3MgYXJlIHR1cm5lZCBvbiAoTE1QTV9QTUdfU0VMKQotICoJX19sZTMyIHVfdGltZXN0YW1wOyAgaW5kaWNhdGUgd2hlbiB0aGUgZGF0ZSBhbmQgdGltZSBvZiB0aGUgY29tcGlsYXRpb24KLSAqCV9fbGUzMiByZXNlcnZlZDsKKyAqICAgICBvZiB0aGUgZXJyb3IgbG9nIGlzIGRlZmluZWQgYnkgc3RydWN0IGl3bF9lcnJvcl9ldmVudF90YWJsZS4KICAqCiAgKiBUaGUgTGludXggZHJpdmVyIGNhbiBwcmludCBib3RoIGxvZ3MgdG8gdGhlIHN5c3RlbSBsb2cgd2hlbiBhIHVDb2RlIGVycm9yCiAgKiBvY2N1cnMuCiAgKi8KKworLyoKKyAqIE5vdGU6IFRoaXMgc3RydWN0dXJlIGlzIHJlYWQgZnJvbSB0aGUgZGV2aWNlIHdpdGggSU8gYWNjZXNzZXMsCisgKiBhbmQgdGhlIHJlYWRpbmcgYWxyZWFkeSBkb2VzIHRoZSBlbmRpYW4gY29udmVyc2lvbi4gQXMgaXQgaXMKKyAqIHJlYWQgd2l0aCB1MzItc2l6ZWQgYWNjZXNzZXMsIGFueSBtZW1iZXJzIHdpdGggYSBkaWZmZXJlbnQgc2l6ZQorICogbmVlZCB0byBiZSBvcmRlcmVkIGNvcnJlY3RseSB0aG91Z2ghCisgKi8KK3N0cnVjdCBpd2xfZXJyb3JfZXZlbnRfdGFibGUgeworCXUzMiB2YWxpZDsJCS8qIChub256ZXJvKSB2YWxpZCwgKDApIGxvZyBpcyBlbXB0eSAqLworCXUzMiBlcnJvcl9pZDsJCS8qIHR5cGUgb2YgZXJyb3IgKi8KKwl1MzIgcGM7CQkJLyogcHJvZ3JhbSBjb3VudGVyICovCisJdTMyIGJsaW5rMTsJCS8qIGJyYW5jaCBsaW5rICovCisJdTMyIGJsaW5rMjsJCS8qIGJyYW5jaCBsaW5rICovCisJdTMyIGlsaW5rMTsJCS8qIGludGVycnVwdCBsaW5rICovCisJdTMyIGlsaW5rMjsJCS8qIGludGVycnVwdCBsaW5rICovCisJdTMyIGRhdGExOwkJLyogZXJyb3Itc3BlY2lmaWMgZGF0YSAqLworCXUzMiBkYXRhMjsJCS8qIGVycm9yLXNwZWNpZmljIGRhdGEgKi8KKwl1MzIgbGluZTsJCS8qIHNvdXJjZSBjb2RlIGxpbmUgb2YgZXJyb3IgKi8KKwl1MzIgYmNvbl90aW1lOwkJLyogYmVhY29uIHRpbWVyICovCisJdTMyIHRzZl9sb3c7CQkvKiBuZXR3b3JrIHRpbWVzdGFtcCBmdW5jdGlvbiB0aW1lciAqLworCXUzMiB0c2ZfaGk7CQkvKiBuZXR3b3JrIHRpbWVzdGFtcCBmdW5jdGlvbiB0aW1lciAqLworCXUzMiBncDE7CQkvKiBHUDEgdGltZXIgcmVnaXN0ZXIgKi8KKwl1MzIgZ3AyOwkJLyogR1AyIHRpbWVyIHJlZ2lzdGVyICovCisJdTMyIGdwMzsJCS8qIEdQMyB0aW1lciByZWdpc3RlciAqLworCXUzMiB1Y29kZV92ZXI7CQkvKiB1Q29kZSB2ZXJzaW9uICovCisJdTMyIGh3X3ZlcjsJCS8qIEhXIFNpbGljb24gdmVyc2lvbiAqLworCXUzMiBicmRfdmVyOwkJLyogSFcgYm9hcmQgdmVyc2lvbiAqLworCXUzMiBsb2dfcGM7CQkvKiBsb2cgcHJvZ3JhbSBjb3VudGVyICovCisJdTMyIGZyYW1lX3B0cjsJCS8qIGZyYW1lIHBvaW50ZXIgKi8KKwl1MzIgc3RhY2tfcHRyOwkJLyogc3RhY2sgcG9pbnRlciAqLworCXUzMiBoY21kOwkJLyogbGFzdCBob3N0IGNvbW1hbmQgaGVhZGVyICovCisjaWYgMAorCS8qIG5vIG5lZWQgdG8gcmVhZCB0aGUgcmVtYWluZGVyLCB3ZSBkb24ndCB1c2UgdGhlIHZhbHVlcyAqLworCXUzMiBpc3IwOwkJLyogaXNyIHN0YXR1cyByZWdpc3RlciBMTVBNX05JQ19JU1IwOiByeHR4X2ZsYWcgKi8KKwl1MzIgaXNyMTsJCS8qIGlzciBzdGF0dXMgcmVnaXN0ZXIgTE1QTV9OSUNfSVNSMTogaG9zdF9mbGFnICovCisJdTMyIGlzcjI7CQkvKiBpc3Igc3RhdHVzIHJlZ2lzdGVyIExNUE1fTklDX0lTUjI6IGVuY19mbGFnICovCisJdTMyIGlzcjM7CQkvKiBpc3Igc3RhdHVzIHJlZ2lzdGVyIExNUE1fTklDX0lTUjM6IHRpbWVfZmxhZyAqLworCXUzMiBpc3I0OwkJLyogaXNyIHN0YXR1cyByZWdpc3RlciBMTVBNX05JQ19JU1I0OiB3aWNvIGludGVycnVwdCAqLworCXUzMiBpc3JfcHJlZjsJCS8qIGlzciBzdGF0dXMgcmVnaXN0ZXIgTE1QTV9OSUNfUFJFRl9TVEFUICovCisJdTMyIHdhaXRfZXZlbnQ7CQkvKiB3YWl0IGV2ZW50KCkgY2FsbGVyIGFkZHJlc3MgKi8KKwl1MzIgbDJwX2NvbnRyb2w7CS8qIEwycENvbnRyb2xGaWVsZCAqLworCXUzMiBsMnBfZHVyYXRpb247CS8qIEwycER1cmF0aW9uRmllbGQgKi8KKwl1MzIgbDJwX21odmFsaWQ7CS8qIEwycE1oVmFsaWRCaXRzICovCisJdTMyIGwycF9hZGRyX21hdGNoOwkvKiBMMnBBZGRyTWF0Y2hTdGF0ICovCisJdTMyIGxtcG1fcG1nX3NlbDsJLyogaW5kaWNhdGUgd2hpY2ggY2xvY2tzIGFyZSB0dXJuZWQgb24gKExNUE1fUE1HX1NFTCkgKi8KKwl1MzIgdV90aW1lc3RhbXA7CS8qIGluZGljYXRlIHdoZW4gdGhlIGRhdGUgYW5kIHRpbWUgb2YgdGhlIGNvbXBpbGF0aW9uICovCisJdTMyIGZsb3dfaGFuZGxlcjsJLyogRkggcmVhZC93cml0ZSBwb2ludGVycywgUlggY3JlZGl0ICovCisjZW5kaWYKK30gX19wYWNrZWQ7CisKIHN0cnVjdCBpd2xfYWxpdmVfcmVzcCB7CiAJdTggdWNvZGVfbWlub3I7CiAJdTggdWNvZGVfbWFqb3I7CkBAIC03MjIsNDYgKzYzNCw2IEBACiAgKiAgICAgICAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIFJYT05fRklMVEVSX0FTU09DX01TSyBpcyBzZXQuCiAgKi8KIAotc3RydWN0IGl3bDM5NDVfcnhvbl9jbWQgewotCXU4IG5vZGVfYWRkcls2XTsKLQlfX2xlMTYgcmVzZXJ2ZWQxOwotCXU4IGJzc2lkX2FkZHJbNl07Ci0JX19sZTE2IHJlc2VydmVkMjsKLQl1OCB3bGFwX2Jzc2lkX2FkZHJbNl07Ci0JX19sZTE2IHJlc2VydmVkMzsKLQl1OCBkZXZfdHlwZTsKLQl1OCBhaXJfcHJvcGFnYXRpb247Ci0JX19sZTE2IHJlc2VydmVkNDsKLQl1OCBvZmRtX2Jhc2ljX3JhdGVzOwotCXU4IGNja19iYXNpY19yYXRlczsKLQlfX2xlMTYgYXNzb2NfaWQ7Ci0JX19sZTMyIGZsYWdzOwotCV9fbGUzMiBmaWx0ZXJfZmxhZ3M7Ci0JX19sZTE2IGNoYW5uZWw7Ci0JX19sZTE2IHJlc2VydmVkNTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBpd2w0OTY1X3J4b25fY21kIHsKLQl1OCBub2RlX2FkZHJbNl07Ci0JX19sZTE2IHJlc2VydmVkMTsKLQl1OCBic3NpZF9hZGRyWzZdOwotCV9fbGUxNiByZXNlcnZlZDI7Ci0JdTggd2xhcF9ic3NpZF9hZGRyWzZdOwotCV9fbGUxNiByZXNlcnZlZDM7Ci0JdTggZGV2X3R5cGU7Ci0JdTggYWlyX3Byb3BhZ2F0aW9uOwotCV9fbGUxNiByeF9jaGFpbjsKLQl1OCBvZmRtX2Jhc2ljX3JhdGVzOwotCXU4IGNja19iYXNpY19yYXRlczsKLQlfX2xlMTYgYXNzb2NfaWQ7Ci0JX19sZTMyIGZsYWdzOwotCV9fbGUzMiBmaWx0ZXJfZmxhZ3M7Ci0JX19sZTE2IGNoYW5uZWw7Ci0JdTggb2ZkbV9odF9zaW5nbGVfc3RyZWFtX2Jhc2ljX3JhdGVzOwotCXU4IG9mZG1faHRfZHVhbF9zdHJlYW1fYmFzaWNfcmF0ZXM7Ci19IF9fcGFja2VkOwotCi0vKiA1MDAwIEhXIGp1c3QgZXh0ZW5kIHRoaXMgY29tbWFuZCAqLwogc3RydWN0IGl3bF9yeG9uX2NtZCB7CiAJdTggbm9kZV9hZGRyWzZdOwogCV9fbGUxNiByZXNlcnZlZDE7CkBAIC03ODksMjYgKzY2MSw3IEBACiAvKgogICogUkVQTFlfUlhPTl9BU1NPQyA9IDB4MTEgKGNvbW1hbmQsIGhhcyBzaW1wbGUgZ2VuZXJpYyByZXNwb25zZSkKICAqLwotc3RydWN0IGl3bDM5NDVfcnhvbl9hc3NvY19jbWQgewotCV9fbGUzMiBmbGFnczsKLQlfX2xlMzIgZmlsdGVyX2ZsYWdzOwotCXU4IG9mZG1fYmFzaWNfcmF0ZXM7Ci0JdTggY2NrX2Jhc2ljX3JhdGVzOwotCV9fbGUxNiByZXNlcnZlZDsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBpd2w0OTY1X3J4b25fYXNzb2NfY21kIHsKLQlfX2xlMzIgZmxhZ3M7Ci0JX19sZTMyIGZpbHRlcl9mbGFnczsKLQl1OCBvZmRtX2Jhc2ljX3JhdGVzOwotCXU4IGNja19iYXNpY19yYXRlczsKLQl1OCBvZmRtX2h0X3NpbmdsZV9zdHJlYW1fYmFzaWNfcmF0ZXM7Ci0JdTggb2ZkbV9odF9kdWFsX3N0cmVhbV9iYXNpY19yYXRlczsKLQlfX2xlMTYgcnhfY2hhaW5fc2VsZWN0X2ZsYWdzOwotCV9fbGUxNiByZXNlcnZlZDsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBpd2w1MDAwX3J4b25fYXNzb2NfY21kIHsKK3N0cnVjdCBpd2xfcnhvbl9hc3NvY19jbWQgewogCV9fbGUzMiBmbGFnczsKIAlfX2xlMzIgZmlsdGVyX2ZsYWdzOwogCXU4IG9mZG1fYmFzaWNfcmF0ZXM7CkBAIC04NDMsMjYgKzY5Niw2IEBACiAvKgogICogUkVQTFlfQ0hBTk5FTF9TV0lUQ0ggPSAweDcyIChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCiAgKi8KLXN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfc3dpdGNoX2NtZCB7Ci0JdTggYmFuZDsKLQl1OCBleHBlY3RfYmVhY29uOwotCV9fbGUxNiBjaGFubmVsOwotCV9fbGUzMiByeG9uX2ZsYWdzOwotCV9fbGUzMiByeG9uX2ZpbHRlcl9mbGFnczsKLQlfX2xlMzIgc3dpdGNoX3RpbWU7Ci0Jc3RydWN0IGl3bDM5NDVfcG93ZXJfcGVyX3JhdGUgcG93ZXJbSVdMX01BWF9SQVRFU107Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaXdsNDk2NV9jaGFubmVsX3N3aXRjaF9jbWQgewotCXU4IGJhbmQ7Ci0JdTggZXhwZWN0X2JlYWNvbjsKLQlfX2xlMTYgY2hhbm5lbDsKLQlfX2xlMzIgcnhvbl9mbGFnczsKLQlfX2xlMzIgcnhvbl9maWx0ZXJfZmxhZ3M7Ci0JX19sZTMyIHN3aXRjaF90aW1lOwotCXN0cnVjdCBpd2w0OTY1X3R4X3Bvd2VyX2RiIHR4X3Bvd2VyOwotfSBfX3BhY2tlZDsKLQogLyoqCiAgKiBzdHJ1Y3QgaXdsNTAwMF9jaGFubmVsX3N3aXRjaF9jbWQKICAqIEBiYW5kOiAwLSA1LjJHSHosIDEtIDIuNEdIegpAQCAtOTc2LDE1ICs4MDksMTAgQEAKICNkZWZpbmUJSVdMX0FQX0lECQkwCiAjZGVmaW5lCUlXTF9BUF9JRF9QQU4JCTEKICNkZWZpbmUJSVdMX1NUQV9JRAkJMgotI2RlZmluZQlJV0wzOTQ1X0JST0FEQ0FTVF9JRAkyNAotI2RlZmluZSBJV0wzOTQ1X1NUQVRJT05fQ09VTlQJMjUKLSNkZWZpbmUgSVdMNDk2NV9CUk9BRENBU1RfSUQJMzEKLSNkZWZpbmUJSVdMNDk2NV9TVEFUSU9OX0NPVU5UCTMyCiAjZGVmaW5lIElXTEFHTl9QQU5fQkNBU1RfSUQJMTQKICNkZWZpbmUgSVdMQUdOX0JST0FEQ0FTVF9JRAkxNQogI2RlZmluZQlJV0xBR05fU1RBVElPTl9DT1VOVAkxNgogCi0jZGVmaW5lCUlXTF9TVEFUSU9OX0NPVU5UCTMyIAkvKiBNQVgoMzk0NSw0OTY1KSovCiAjZGVmaW5lCUlXTF9JTlZBTElEX1NUQVRJT04gCTI1NQogCiAjZGVmaW5lIFNUQV9GTEdfVFhfUkFURV9NU0sJCWNwdV90b19sZTMyKDEgPDwgMikKQEAgLTEwMzIsMTYgKzg2MCw2IEBACiAgKiBjb21iaW5lZCB3aXRoIFRyYWZmaWMgSUQgKFFPUyBwcmlvcml0eSksIGluIGZvcm1hdCB1c2VkIGJ5IFR4IFNjaGVkdWxlciAqLwogI2RlZmluZSBCVUlMRF9SQXhUSUQoc3RhX2lkLCB0aWQpCSgoKHN0YV9pZCkgPDwgNCkgKyAodGlkKSkKIAotc3RydWN0IGl3bDQ5NjVfa2V5aW5mbyB7Ci0JX19sZTE2IGtleV9mbGFnczsKLQl1OCB0a2lwX3J4X3RzY19ieXRlMjsJLyogVFNDWzJdIGZvciBrZXkgbWl4IHBoMSBkZXRlY3Rpb24gKi8KLQl1OCByZXNlcnZlZDE7Ci0JX19sZTE2IHRraXBfcnhfdHRha1s1XTsJLyogMTAtYnl0ZSB1bmljYXN0IFRLSVAgVFRBSyAqLwotCXU4IGtleV9vZmZzZXQ7Ci0JdTggcmVzZXJ2ZWQyOwotCXU4IGtleVsxNl07CQkvKiAxNi1ieXRlIHVuaWNhc3QgZGVjcnlwdGlvbiBrZXkgKi8KLX0gX19wYWNrZWQ7Ci0KIC8qIGFnbiAqLwogc3RydWN0IGl3bF9rZXlpbmZvIHsKIAlfX2xlMTYga2V5X2ZsYWdzOwpAQCAtMTA4Myw3ICs5MDEsNiBAQAogICogd2l0aCBpbmZvIG9uIHNlY3VyaXR5IGtleXMsIGFnZ3JlZ2F0aW9uIHBhcmFtZXRlcnMsIGFuZCBUeCByYXRlcyBmb3IKICAqIGluaXRpYWwgVHggYXR0ZW1wdCBhbmQgYW55IHJldHJpZXMgKGFnbiBkZXZpY2VzIHVzZXMKICAqIFJFUExZX1RYX0xJTktfUVVBTElUWV9DTUQsCi0gKiAzOTQ1IHVzZXMgUkVQTFlfUkFURV9TQ0FMRSB0byBzZXQgdXAgcmF0ZSB0YWJsZXMpLgogICoKICAqIFJFUExZX0FERF9TVEEgc2V0cyB1cCB0aGUgdGFibGUgZW50cnkgZm9yIG9uZSBzdGF0aW9uLCBlaXRoZXIgY3JlYXRpbmcKICAqIGEgbmV3IGVudHJ5LCBvciBtb2RpZnlpbmcgYSBwcmUtZXhpc3Rpbmcgb25lLgpAQCAtMTEwMyw3MiArOTIwLDYgQEAKICAqICAgICAgICBlbnRyaWVzIGZvciBhbGwgU1RBcyBpbiBuZXR3b3JrLCBzdGFydGluZyB3aXRoIGluZGV4IElXTF9TVEFfSUQuCiAgKi8KIAotc3RydWN0IGl3bDM5NDVfYWRkc3RhX2NtZCB7Ci0JdTggbW9kZTsJCS8qIDE6IG1vZGlmeSBleGlzdGluZywgMDogYWRkIG5ldyBzdGF0aW9uICovCi0JdTggcmVzZXJ2ZWRbM107Ci0Jc3RydWN0IHN0YV9pZF9tb2RpZnkgc3RhOwotCXN0cnVjdCBpd2w0OTY1X2tleWluZm8ga2V5OwotCV9fbGUzMiBzdGF0aW9uX2ZsYWdzOwkJLyogU1RBX0ZMR18qICovCi0JX19sZTMyIHN0YXRpb25fZmxhZ3NfbXNrOwkvKiBTVEFfRkxHXyogKi8KLQotCS8qIGJpdCBmaWVsZCB0byBkaXNhYmxlICgxKSBvciBlbmFibGUgKDApIFR4IGZvciBUcmFmZmljIElEIChUSUQpCi0JICogY29ycmVzcG9uZGluZyB0byBiaXQgKGUuZy4gYml0IDUgY29udHJvbHMgVElEIDUpLgotCSAqIFNldCBtb2RpZnlfbWFzayBiaXQgU1RBX01PRElGWV9USURfRElTQUJMRV9UWCB0byB1c2UgdGhpcyBmaWVsZC4gKi8KLQlfX2xlMTYgdGlkX2Rpc2FibGVfdHg7Ci0KLQlfX2xlMTYgcmF0ZV9uX2ZsYWdzOwotCi0JLyogVElEIGZvciB3aGljaCB0byBhZGQgYmxvY2stYWNrIHN1cHBvcnQuCi0JICogU2V0IG1vZGlmeV9tYXNrIGJpdCBTVEFfTU9ESUZZX0FEREJBX1RJRF9NU0sgdG8gdXNlIHRoaXMgZmllbGQuICovCi0JdTggYWRkX2ltbWVkaWF0ZV9iYV90aWQ7Ci0KLQkvKiBUSUQgZm9yIHdoaWNoIHRvIHJlbW92ZSBibG9jay1hY2sgc3VwcG9ydC4KLQkgKiBTZXQgbW9kaWZ5X21hc2sgYml0IFNUQV9NT0RJRllfREVMQkFfVElEX01TSyB0byB1c2UgdGhpcyBmaWVsZC4gKi8KLQl1OCByZW1vdmVfaW1tZWRpYXRlX2JhX3RpZDsKLQotCS8qIFN0YXJ0aW5nIFNlcXVlbmNlIE51bWJlciBmb3IgYWRkZWQgYmxvY2stYWNrIHN1cHBvcnQuCi0JICogU2V0IG1vZGlmeV9tYXNrIGJpdCBTVEFfTU9ESUZZX0FEREJBX1RJRF9NU0sgdG8gdXNlIHRoaXMgZmllbGQuICovCi0JX19sZTE2IGFkZF9pbW1lZGlhdGVfYmFfc3NuOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGl3bDQ5NjVfYWRkc3RhX2NtZCB7Ci0JdTggbW9kZTsJCS8qIDE6IG1vZGlmeSBleGlzdGluZywgMDogYWRkIG5ldyBzdGF0aW9uICovCi0JdTggcmVzZXJ2ZWRbM107Ci0Jc3RydWN0IHN0YV9pZF9tb2RpZnkgc3RhOwotCXN0cnVjdCBpd2w0OTY1X2tleWluZm8ga2V5OwotCV9fbGUzMiBzdGF0aW9uX2ZsYWdzOwkJLyogU1RBX0ZMR18qICovCi0JX19sZTMyIHN0YXRpb25fZmxhZ3NfbXNrOwkvKiBTVEFfRkxHXyogKi8KLQotCS8qIGJpdCBmaWVsZCB0byBkaXNhYmxlICgxKSBvciBlbmFibGUgKDApIFR4IGZvciBUcmFmZmljIElEIChUSUQpCi0JICogY29ycmVzcG9uZGluZyB0byBiaXQgKGUuZy4gYml0IDUgY29udHJvbHMgVElEIDUpLgotCSAqIFNldCBtb2RpZnlfbWFzayBiaXQgU1RBX01PRElGWV9USURfRElTQUJMRV9UWCB0byB1c2UgdGhpcyBmaWVsZC4gKi8KLQlfX2xlMTYgdGlkX2Rpc2FibGVfdHg7Ci0KLQlfX2xlMTYJcmVzZXJ2ZWQxOwotCi0JLyogVElEIGZvciB3aGljaCB0byBhZGQgYmxvY2stYWNrIHN1cHBvcnQuCi0JICogU2V0IG1vZGlmeV9tYXNrIGJpdCBTVEFfTU9ESUZZX0FEREJBX1RJRF9NU0sgdG8gdXNlIHRoaXMgZmllbGQuICovCi0JdTggYWRkX2ltbWVkaWF0ZV9iYV90aWQ7Ci0KLQkvKiBUSUQgZm9yIHdoaWNoIHRvIHJlbW92ZSBibG9jay1hY2sgc3VwcG9ydC4KLQkgKiBTZXQgbW9kaWZ5X21hc2sgYml0IFNUQV9NT0RJRllfREVMQkFfVElEX01TSyB0byB1c2UgdGhpcyBmaWVsZC4gKi8KLQl1OCByZW1vdmVfaW1tZWRpYXRlX2JhX3RpZDsKLQotCS8qIFN0YXJ0aW5nIFNlcXVlbmNlIE51bWJlciBmb3IgYWRkZWQgYmxvY2stYWNrIHN1cHBvcnQuCi0JICogU2V0IG1vZGlmeV9tYXNrIGJpdCBTVEFfTU9ESUZZX0FEREJBX1RJRF9NU0sgdG8gdXNlIHRoaXMgZmllbGQuICovCi0JX19sZTE2IGFkZF9pbW1lZGlhdGVfYmFfc3NuOwotCi0JLyoKLQkgKiBOdW1iZXIgb2YgcGFja2V0cyBPSyB0byB0cmFuc21pdCB0byBzdGF0aW9uIGV2ZW4gdGhvdWdoCi0JICogaXQgaXMgYXNsZWVwIC0tIHVzZWQgdG8gc3luY2hyb25pc2UgUFMtcG9sbCBhbmQgdS1BUFNECi0JICogcmVzcG9uc2VzIHdoaWxlIHVjb2RlIGtlZXBzIHRyYWNrIG9mIFNUQSBzbGVlcCBzdGF0ZS4KLQkgKi8KLQlfX2xlMTYgc2xlZXBfdHhfY291bnQ7Ci0KLQlfX2xlMTYgcmVzZXJ2ZWQyOwotfSBfX3BhY2tlZDsKLQotLyogYWduICovCiBzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgewogCXU4IG1vZGU7CQkvKiAxOiBtb2RpZnkgZXhpc3RpbmcsIDA6IGFkZCBuZXcgc3RhdGlvbiAqLwogCXU4IHJlc2VydmVkWzNdOwpAQCAtMTMzNyw2MiArMTA4OCw2IEBACiAjZGVmaW5lIFJYX01QRFVfUkVTX1NUQVRVU19ERUNfRE9ORV9NU0sJKDB4ODAwKQogCiAKLXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX3N0YXRzIHsKLQl1OCBwaHlfY291bnQ7Ci0JdTggaWQ7Ci0JdTggcnNzaTsKLQl1OCBhZ2M7Ci0JX19sZTE2IHNpZ19hdmc7Ci0JX19sZTE2IG5vaXNlX2RpZmY7Ci0JdTggcGF5bG9hZFswXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX2hkciB7Ci0JX19sZTE2IGNoYW5uZWw7Ci0JX19sZTE2IHBoeV9mbGFnczsKLQl1OCByZXNlcnZlZDE7Ci0JdTggcmF0ZTsKLQlfX2xlMTYgbGVuOwotCXU4IHBheWxvYWRbMF07Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9lbmQgewotCV9fbGUzMiBzdGF0dXM7Ci0JX19sZTY0IHRpbWVzdGFtcDsKLQlfX2xlMzIgYmVhY29uX3RpbWVzdGFtcDsKLX0gX19wYWNrZWQ7Ci0KLS8qCi0gKiBSRVBMWV8zOTQ1X1JYID0gMHgxYiAocmVzcG9uc2Ugb25seSwgbm90IGEgY29tbWFuZCkKLSAqCi0gKiBOT1RFOiAgRE8gTk9UIGRlcmVmZXJlbmNlIGZyb20gY2FzdHMgdG8gdGhpcyBzdHJ1Y3R1cmUKLSAqIEl0IGlzIHByb3ZpZGVkIG9ubHkgZm9yIGNhbGN1bGF0aW5nIG1pbmltdW0gZGF0YSBzZXQgc2l6ZS4KLSAqIFRoZSBhY3R1YWwgb2Zmc2V0cyBvZiB0aGUgaGRyIGFuZCBlbmQgYXJlIGR5bmFtaWMgYmFzZWQgb24KLSAqIHN0YXRzLnBoeV9jb3VudAotICovCi1zdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZSB7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfc3RhdHMgc3RhdHM7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfaGRyIGhkcjsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9lbmQgZW5kOwotfSBfX3BhY2tlZDsKLQotI2RlZmluZSBJV0wzOV9SWF9GUkFNRV9TSVpFCSg0ICsgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lKSkKLQotLyogRml4ZWQgKG5vbi1jb25maWd1cmFibGUpIHJ4IGRhdGEgZnJvbSBwaHkgKi8KLQotI2RlZmluZSBJV0w0OV9SWF9SRVNfUEhZX0NOVCAxNAotI2RlZmluZSBJV0w0OV9SWF9QSFlfRkxBR1NfQU5URU5OQUVfT0ZGU0VUCSg0KQotI2RlZmluZSBJV0w0OV9SWF9QSFlfRkxBR1NfQU5URU5OQUVfTUFTSwkoMHg3MCkKLSNkZWZpbmUgSVdMNDlfQUdDX0RCX01BU0sJCQkoMHgzZjgwKQkvKiBNQVNLKDcsMTMpICovCi0jZGVmaW5lIElXTDQ5X0FHQ19EQl9QT1MJCQkoNykKLXN0cnVjdCBpd2w0OTY1X3J4X25vbl9jZmdfcGh5IHsKLQlfX2xlMTYgYW50X3NlbGVjdGlvbjsJLyogYW50IEEgYml0IDQsIGFudCBCIGJpdCA1LCBhbnQgQyBiaXQgNiAqLwotCV9fbGUxNiBhZ2NfaW5mbzsJLyogYWdjIGNvZGUgMDo2LCBhZ2MgZEIgNzoxMywgcmVzZXJ2ZWQgMTQ6MTUgKi8KLQl1OCByc3NpX2luZm9bNl07CS8qIHdlIHVzZSBldmVuIGVudHJpZXMsIDAvMi80IGZvciBBL0IvQyByc3NpICovCi0JdTggcGFkWzBdOwotfSBfX3BhY2tlZDsKLQotCiAjZGVmaW5lIElXTEFHTl9SWF9SRVNfUEhZX0NOVCA4CiAjZGVmaW5lIElXTEFHTl9SWF9SRVNfQUdDX0lEWCAgICAgMQogI2RlZmluZSBJV0xBR05fUlhfUkVTX1JTU0lfQUJfSURYIDIKQEAgLTE1NzYsODAgKzEyNzEsNiBAQAogICogUkVQTFlfVFggPSAweDFjIChjb21tYW5kKQogICovCiAKLXN0cnVjdCBpd2wzOTQ1X3R4X2NtZCB7Ci0JLyoKLQkgKiBNUERVIGJ5dGUgY291bnQ6Ci0JICogTUFDIGhlYWRlciAoMjQvMjYvMzAvMzIgYnl0ZXMpICsgMiBieXRlcyBwYWQgaWYgMjYvMzAgaGVhZGVyIHNpemUsCi0JICogKyA4IGJ5dGUgSVYgZm9yIENDTSBvciBUS0lQIChub3QgdXNlZCBmb3IgV0VQKQotCSAqICsgRGF0YSBwYXlsb2FkCi0JICogKyA4LWJ5dGUgTUlDIChub3QgdXNlZCBmb3IgQ0NNL1dFUCkKLQkgKiBOT1RFOiAgRG9lcyBub3QgaW5jbHVkZSBUeCBjb21tYW5kIGJ5dGVzLCBwb3N0LU1BQyBwYWQgYnl0ZXMsCi0JICogICAgICAgIE1JQyAoQ0NNKSA4IGJ5dGVzLCBJQ1YgKFdFUC9US0lQL0NLSVApIDQgYnl0ZXMsIENSQyA0IGJ5dGVzLmkKLQkgKiBSYW5nZTogMTQtMjM0MiBieXRlcy4KLQkgKi8KLQlfX2xlMTYgbGVuOwotCi0JLyoKLQkgKiBNUERVIG9yIE1TRFUgYnl0ZSBjb3VudCBmb3IgbmV4dCBmcmFtZS4KLQkgKiBVc2VkIGZvciBmcmFnbWVudGF0aW9uIGFuZCBidXJzdGluZywgYnV0IG5vdCAxMW4gYWdncmVnYXRpb24uCi0JICogU2FtZSBhcyAibGVuIiwgYnV0IGZvciBuZXh0IGZyYW1lLiAgU2V0IHRvIDAgaWYgbm90IGFwcGxpY2FibGUuCi0JICovCi0JX19sZTE2IG5leHRfZnJhbWVfbGVuOwotCi0JX19sZTMyIHR4X2ZsYWdzOwkvKiBUWF9DTURfRkxHXyogKi8KLQotCXU4IHJhdGU7Ci0KLQkvKiBJbmRleCBvZiByZWNpcGllbnQgc3RhdGlvbiBpbiB1Q29kZSdzIHN0YXRpb24gdGFibGUgKi8KLQl1OCBzdGFfaWQ7Ci0JdTggdGlkX3RzcGVjOwotCXU4IHNlY19jdGw7Ci0JdTgga2V5WzE2XTsKLQl1bmlvbiB7Ci0JCXU4IGJ5dGVbOF07Ci0JCV9fbGUxNiB3b3JkWzRdOwotCQlfX2xlMzIgZHdbMl07Ci0JfSB0a2lwX21pYzsKLQlfX2xlMzIgbmV4dF9mcmFtZV9pbmZvOwotCXVuaW9uIHsKLQkJX19sZTMyIGxpZmVfdGltZTsKLQkJX19sZTMyIGF0dGVtcHQ7Ci0JfSBzdG9wX3RpbWU7Ci0JdTggc3VwcF9yYXRlc1syXTsKLQl1OCBydHNfcmV0cnlfbGltaXQ7CS8qYnl0ZSA1MCAqLwotCXU4IGRhdGFfcmV0cnlfbGltaXQ7CS8qYnl0ZSA1MSAqLwotCXVuaW9uIHsKLQkJX19sZTE2IHBtX2ZyYW1lX3RpbWVvdXQ7Ci0JCV9fbGUxNiBhdHRlbXB0X2R1cmF0aW9uOwotCX0gdGltZW91dDsKLQotCS8qCi0JICogRHVyYXRpb24gb2YgRURDQSBidXJzdCBUeCBPcHBvcnR1bml0eSwgaW4gMzItdXNlYyB1bml0cy4KLQkgKiBTZXQgdGhpcyBpZiB0eG9wIHRpbWUgaXMgbm90IHNwZWNpZmllZCBieSBIQ0NBIHByb3RvY29sIChlLmcuIGJ5IEFQKS4KLQkgKi8KLQlfX2xlMTYgZHJpdmVyX3R4b3A7Ci0KLQkvKgotCSAqIE1BQyBoZWFkZXIgZ29lcyBoZXJlLCBmb2xsb3dlZCBieSAyIGJ5dGVzIHBhZGRpbmcgaWYgTUFDIGhlYWRlcgotCSAqIGxlbmd0aCBpcyAyNiBvciAzMCBieXRlcywgZm9sbG93ZWQgYnkgcGF5bG9hZCBkYXRhCi0JICovCi0JdTggcGF5bG9hZFswXTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciBoZHJbMF07Ci19IF9fcGFja2VkOwotCi0vKgotICogUkVQTFlfVFggPSAweDFjIChyZXNwb25zZSkKLSAqLwotc3RydWN0IGl3bDM5NDVfdHhfcmVzcCB7Ci0JdTggZmFpbHVyZV9ydHM7Ci0JdTggZmFpbHVyZV9mcmFtZTsKLQl1OCBidF9raWxsX2NvdW50OwotCXU4IHJhdGU7Ci0JX19sZTMyIHdpcmVsZXNzX21lZGlhX3RpbWU7Ci0JX19sZTMyIHN0YXR1czsJCS8qIFRYIHN0YXR1cyAqLwotfSBfX3BhY2tlZDsKLQotCiAvKgogICogNDk2NSB1Q29kZSB1cGRhdGVzIHRoZXNlIFR4IGF0dGVtcHQgY291bnQgdmFsdWVzIGluIGhvc3QgRFJBTS4KICAqIFVzZWQgZm9yIG1hbmFnaW5nIFR4IHJldHJpZXMgd2hlbiBleHBlY3RpbmcgYmxvY2stYWNrcy4KQEAgLTE3NDAsNTQgKzEzNjEsNiBAQAogCXN0cnVjdCBpZWVlODAyMTFfaGRyIGhkclswXTsKIH0gX19wYWNrZWQ7CiAKLS8qIFRYIGNvbW1hbmQgcmVzcG9uc2UgaXMgc2VudCBhZnRlciAqMzk0NSogdHJhbnNtaXNzaW9uIGF0dGVtcHRzLgotICoKLSAqIE5PVEVTOgotICoKLSAqIFRYX1NUQVRVU19GQUlMX05FWFRfRlJBRwotICoKLSAqIElmIHRoZSBmcmFnbWVudCBmbGFnIGluIHRoZSBNQUMgaGVhZGVyIGZvciB0aGUgZnJhbWUgYmVpbmcgdHJhbnNtaXR0ZWQKLSAqIGlzIHNldCBhbmQgdGhlcmUgaXMgaW5zdWZmaWNpZW50IHRpbWUgdG8gdHJhbnNtaXQgdGhlIG5leHQgZnJhbWUsIHRoZQotICogVFggc3RhdHVzIHdpbGwgYmUgcmV0dXJuZWQgd2l0aCAnVFhfU1RBVFVTX0ZBSUxfTkVYVF9GUkFHJy4KLSAqCi0gKiBUWF9TVEFUVVNfRklGT19VTkRFUlJVTgotICoKLSAqIEluZGljYXRlcyB0aGUgaG9zdCBkaWQgbm90IHByb3ZpZGUgYnl0ZXMgdG8gdGhlIEZJRk8gZmFzdCBlbm91Z2ggd2hpbGUKLSAqIGEgVFggd2FzIGluIHByb2dyZXNzLgotICoKLSAqIFRYX1NUQVRVU19GQUlMX01HTU5UX0FCT1JUCi0gKgotICogVGhpcyBzdGF0dXMgaXMgb25seSBwb3NzaWJsZSBpZiB0aGUgQUJPUlQgT04gTUdNVCBSWCBwYXJhbWV0ZXIgd2FzCi0gKiBzZXQgdG8gdHJ1ZSB3aXRoIHRoZSBUWCBjb21tYW5kLgotICoKLSAqIElmIHRoZSBNU0Igb2YgdGhlIHN0YXR1cyBwYXJhbWV0ZXIgaXMgc2V0IHRoZW4gYW4gYWJvcnQgc2VxdWVuY2UgaXMKLSAqIHJlcXVpcmVkLiAgVGhpcyBzZXF1ZW5jZSBjb25zaXN0cyBvZiB0aGUgaG9zdCBhY3RpdmF0aW5nIHRoZSBUWCBBYm9ydAotICogY29udHJvbCBsaW5lLCBhbmQgdGhlbiB3YWl0aW5nIGZvciB0aGUgVFggQWJvcnQgY29tbWFuZCByZXNwb25zZS4gIFRoaXMKLSAqIGluZGljYXRlcyB0aGF0IGEgdGhlIGRldmljZSBpcyBubyBsb25nZXIgaW4gYSB0cmFuc21pdCBzdGF0ZSwgYW5kIHRoYXQgdGhlCi0gKiBjb21tYW5kIEZJRk8gaGFzIGJlZW4gY2xlYXJlZC4gIFRoZSBob3N0IG11c3QgdGhlbiBkZWFjdGl2YXRlIHRoZSBUWCBBYm9ydAotICogY29udHJvbCBsaW5lLiAgUmVjZWl2aW5nIGlzIHN0aWxsIGFsbG93ZWQgaW4gdGhpcyBjYXNlLgotICovCi1lbnVtIHsKLQlUWF8zOTQ1X1NUQVRVU19TVUNDRVNTID0gMHgwMSwKLQlUWF8zOTQ1X1NUQVRVU19ESVJFQ1RfRE9ORSA9IDB4MDIsCi0JVFhfMzk0NV9TVEFUVVNfRkFJTF9TSE9SVF9MSU1JVCA9IDB4ODIsCi0JVFhfMzk0NV9TVEFUVVNfRkFJTF9MT05HX0xJTUlUID0gMHg4MywKLQlUWF8zOTQ1X1NUQVRVU19GQUlMX0ZJRk9fVU5ERVJSVU4gPSAweDg0LAotCVRYXzM5NDVfU1RBVFVTX0ZBSUxfTUdNTlRfQUJPUlQgPSAweDg1LAotCVRYXzM5NDVfU1RBVFVTX0ZBSUxfTkVYVF9GUkFHID0gMHg4NiwKLQlUWF8zOTQ1X1NUQVRVU19GQUlMX0xJRkVfRVhQSVJFID0gMHg4NywKLQlUWF8zOTQ1X1NUQVRVU19GQUlMX0RFU1RfUFMgPSAweDg4LAotCVRYXzM5NDVfU1RBVFVTX0ZBSUxfQUJPUlRFRCA9IDB4ODksCi0JVFhfMzk0NV9TVEFUVVNfRkFJTF9CVF9SRVRSWSA9IDB4OGEsCi0JVFhfMzk0NV9TVEFUVVNfRkFJTF9TVEFfSU5WQUxJRCA9IDB4OGIsCi0JVFhfMzk0NV9TVEFUVVNfRkFJTF9GUkFHX0RST1BQRUQgPSAweDhjLAotCVRYXzM5NDVfU1RBVFVTX0ZBSUxfVElEX0RJU0FCTEUgPSAweDhkLAotCVRYXzM5NDVfU1RBVFVTX0ZBSUxfRlJBTUVfRkxVU0hFRCA9IDB4OGUsCi0JVFhfMzk0NV9TVEFUVVNfRkFJTF9JTlNVRkZJQ0lFTlRfQ0ZfUE9MTCA9IDB4OGYsCi0JVFhfMzk0NV9TVEFUVVNfRkFJTF9UWF9MT0NLRUQgPSAweDkwLAotCVRYXzM5NDVfU1RBVFVTX0ZBSUxfTk9fQkVBQ09OX09OX1JBREFSID0gMHg5MSwKLX07Ci0KIC8qCiAgKiBUWCBjb21tYW5kIHJlc3BvbnNlIGlzIHNlbnQgYWZ0ZXIgKmFnbiogdHJhbnNtaXNzaW9uIGF0dGVtcHRzLgogICoKQEAgLTE5MDUsNDMgKzE0NzgsNiBAQAogCV9fbGUxNiBzZXF1ZW5jZTsKIH0gX19wYWNrZWQ7CiAKLXN0cnVjdCBpd2w0OTY1X3R4X3Jlc3AgewotCXU4IGZyYW1lX2NvdW50OwkJLyogMSBubyBhZ2dyZWdhdGlvbiwgPjEgYWdncmVnYXRpb24gKi8KLQl1OCBidF9raWxsX2NvdW50OwkvKiAjIGJsb2NrZWQgYnkgYmx1ZXRvb3RoICh1bnVzZWQgZm9yIGFnZykgKi8KLQl1OCBmYWlsdXJlX3J0czsJCS8qICMgZmFpbHVyZXMgZHVlIHRvIHVuc3VjY2Vzc2Z1bCBSVFMgKi8KLQl1OCBmYWlsdXJlX2ZyYW1lOwkvKiAjIGZhaWx1cmVzIGR1ZSB0byBubyBBQ0sgKHVudXNlZCBmb3IgYWdnKSAqLwotCi0JLyogRm9yIG5vbi1hZ2c6ICBSYXRlIGF0IHdoaWNoIGZyYW1lIHdhcyBzdWNjZXNzZnVsLgotCSAqIEZvciBhZ2c6ICBSYXRlIGF0IHdoaWNoIGFsbCBmcmFtZXMgd2VyZSB0cmFuc21pdHRlZC4gKi8KLQlfX2xlMzIgcmF0ZV9uX2ZsYWdzOwkvKiBSQVRFX01DU18qICAqLwotCi0JLyogRm9yIG5vbi1hZ2c6ICBSVFMgKyBDVFMgKyBmcmFtZSB0eCBhdHRlbXB0cyB0aW1lICsgQUNLLgotCSAqIEZvciBhZ2c6ICBSVFMgKyBDVFMgKyBhZ2dyZWdhdGlvbiB0eCB0aW1lICsgYmxvY2stYWNrIHRpbWUuICovCi0JX19sZTE2IHdpcmVsZXNzX21lZGlhX3RpbWU7CS8qIHVTZWNzICovCi0KLQlfX2xlMTYgcmVzZXJ2ZWQ7Ci0JX19sZTMyIHBhX3Bvd2VyMTsJLyogUkYgcG93ZXIgYW1wbGlmaWVyIG1lYXN1cmVtZW50IChub3QgdXNlZCkgKi8KLQlfX2xlMzIgcGFfcG93ZXIyOwotCi0JLyoKLQkgKiBGb3Igbm9uLWFnZzogIGZyYW1lIHN0YXR1cyBUWF9TVEFUVVNfKgotCSAqIEZvciBhZ2c6ICBzdGF0dXMgb2YgMXN0IGZyYW1lLCBBR0dfVFhfU1RBVEVfKjsgb3RoZXIgZnJhbWUgc3RhdHVzCi0JICogICAgICAgICAgIGZpZWxkcyBmb2xsb3cgdGhpcyBvbmUsIHVwIHRvIGZyYW1lX2NvdW50LgotCSAqICAgICAgICAgICBCaXQgZmllbGRzOgotCSAqICAgICAgICAgICAxMS0gMDogIEFHR19UWF9TVEFURV8qIHN0YXR1cyBjb2RlCi0JICogICAgICAgICAgIDE1LTEyOiAgUmV0cnkgY291bnQgZm9yIDFzdCBmcmFtZSBpbiBhZ2dyZWdhdGlvbiAocmV0cmllcwotCSAqICAgICAgICAgICAgICAgICAgIG9jY3VyIGlmIHR4IGZhaWxlZCBmb3IgdGhpcyBmcmFtZSB3aGVuIGl0IHdhcyBhCi0JICogICAgICAgICAgICAgICAgICAgbWVtYmVyIG9mIGEgcHJldmlvdXMgYWdncmVnYXRpb24gYmxvY2spLiAgSWYgcmF0ZQotCSAqICAgICAgICAgICAgICAgICAgIHNjYWxpbmcgaXMgdXNlZCwgcmV0cnkgY291bnQgaW5kaWNhdGVzIHRoZSByYXRlCi0JICogICAgICAgICAgICAgICAgICAgdGFibGUgZW50cnkgdXNlZCBmb3IgYWxsIGZyYW1lcyBpbiB0aGUgbmV3IGFnZy4KLQkgKiAgICAgICAgICAgMzEtMTY6ICBTZXF1ZW5jZSAjIGZvciB0aGlzIGZyYW1lJ3MgVHggY21kIChub3QgU1NOISkKLQkgKi8KLQl1bmlvbiB7Ci0JCV9fbGUzMiBzdGF0dXM7Ci0JCXN0cnVjdCBhZ2dfdHhfc3RhdHVzIGFnZ19zdGF0dXNbMF07IC8qIGZvciBlYWNoIGFnZyBmcmFtZSAqLwotCX0gdTsKLX0gX19wYWNrZWQ7Ci0KIC8qCiAgKiBkZWZpbml0aW9ucyBmb3IgaW5pdGlhbCByYXRlIGluZGV4IGZpZWxkCiAgKiBiaXRzIFszOjBdIGluaXRpYWwgcmF0ZSBpbmRleApAQCAtMjAzMCw1MiArMTU2Niw4IEBACiAvKgogICogUkVQTFlfVFhfUFdSX1RBQkxFX0NNRCA9IDB4OTcgKGNvbW1hbmQsIGhhcyBzaW1wbGUgZ2VuZXJpYyByZXNwb25zZSkKICAqCi0gKiBTZWUgZGV0YWlscyB1bmRlciAiVFhQT1dFUiIgaW4gaXdsLTQ5NjUtaHcuaC4KICAqLwogCi1zdHJ1Y3QgaXdsMzk0NV90eHBvd2VydGFibGVfY21kIHsKLQl1OCBiYW5kOwkJLyogMDogNSBHSHosIDE6IDIuNCBHSHogKi8KLQl1OCByZXNlcnZlZDsKLQlfX2xlMTYgY2hhbm5lbDsKLQlzdHJ1Y3QgaXdsMzk0NV9wb3dlcl9wZXJfcmF0ZSBwb3dlcltJV0xfTUFYX1JBVEVTXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBpd2w0OTY1X3R4cG93ZXJ0YWJsZV9jbWQgewotCXU4IGJhbmQ7CQkvKiAwOiA1IEdIeiwgMTogMi40IEdIeiAqLwotCXU4IHJlc2VydmVkOwotCV9fbGUxNiBjaGFubmVsOwotCXN0cnVjdCBpd2w0OTY1X3R4X3Bvd2VyX2RiIHR4X3Bvd2VyOwotfSBfX3BhY2tlZDsKLQotCi0vKioKLSAqIHN0cnVjdCBpd2wzOTQ1X3JhdGVfc2NhbGluZ19jbWQgLSBSYXRlIFNjYWxpbmcgQ29tbWFuZCAmIFJlc3BvbnNlCi0gKgotICogUkVQTFlfUkFURV9TQ0FMRSA9IDB4NDcgKGNvbW1hbmQsIGhhcyBzaW1wbGUgZ2VuZXJpYyByZXNwb25zZSkKLSAqCi0gKiBOT1RFOiBUaGUgdGFibGUgb2YgcmF0ZXMgcGFzc2VkIHRvIHRoZSB1Q29kZSB2aWEgdGhlCi0gKiBSQVRFX1NDQUxFIGNvbW1hbmQgc2V0cyB1cCB0aGUgY29ycmVzcG9uZGluZyBvcmRlciBvZgotICogcmF0ZXMgdXNlZCBmb3IgYWxsIHJlbGF0ZWQgY29tbWFuZHMsIGluY2x1ZGluZyByYXRlCi0gKiBtYXNrcywgZXRjLgotICoKLSAqIEZvciBleGFtcGxlLCBpZiB5b3Ugc2V0IDlNQiAoUExDUCAweDBmKSBhcyB0aGUgZmlyc3QKLSAqIHJhdGUgaW4gdGhlIHJhdGUgdGFibGUsIHRoZSBiaXQgbWFzayBmb3IgdGhhdCByYXRlCi0gKiB3aGVuIHBhc3NlZCB0aHJvdWdoIG9mZG1fYmFzaWNfcmF0ZXMgb24gdGhlIFJFUExZX1JYT04KLSAqIGNvbW1hbmQgd291bGQgYmUgYml0IDAgKDEgPDwgMCkKLSAqLwotc3RydWN0IGl3bDM5NDVfcmF0ZV9zY2FsaW5nX2luZm8gewotCV9fbGUxNiByYXRlX25fZmxhZ3M7Ci0JdTggdHJ5X2NudDsKLQl1OCBuZXh0X3JhdGVfaW5kZXg7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaXdsMzk0NV9yYXRlX3NjYWxpbmdfY21kIHsKLQl1OCB0YWJsZV9pZDsKLQl1OCByZXNlcnZlZFszXTsKLQlzdHJ1Y3QgaXdsMzk0NV9yYXRlX3NjYWxpbmdfaW5mbyB0YWJsZVtJV0xfTUFYX1JBVEVTXTsKLX0gX19wYWNrZWQ7Ci0KLQogLypSU19ORVdfQVBJOiBvbmx5IFRMQ19SVFMgcmVtYWlucyBhbmQgbW92ZWQgdG8gYml0IDAgKi8KICNkZWZpbmUgIExJTktfUVVBTF9GTEFHU19TRVRfU1RBX1RMQ19SVFNfTVNLCSgxIDw8IDApCiAKQEAgLTIxMzAsNyArMTYyMiw3IEBACiAjZGVmaW5lIExJTktfUVVBTF9BR0dfRElTQUJMRV9TVEFSVF9NQVgJKDI1NSkKICNkZWZpbmUgTElOS19RVUFMX0FHR19ESVNBQkxFX1NUQVJUX01JTgkoMCkKIAotI2RlZmluZSBMSU5LX1FVQUxfQUdHX0ZSQU1FX0xJTUlUX0RFRgkoMzEpCisjZGVmaW5lIExJTktfUVVBTF9BR0dfRlJBTUVfTElNSVRfREVGCSg2MykKICNkZWZpbmUgTElOS19RVUFMX0FHR19GUkFNRV9MSU1JVF9NQVgJKDYzKQogI2RlZmluZSBMSU5LX1FVQUxfQUdHX0ZSQU1FX0xJTUlUX01JTgkoMCkKIApAQCAtMjY5NiwxNCArMjE4OCw2IEBACiAjZGVmaW5lIElXTF9QT1dFUl9CVF9TQ09fRU5BCQkJY3B1X3RvX2xlMTYoQklUKDgpKQogI2RlZmluZSBJV0xfUE9XRVJfQURWQU5DRV9QTV9FTkFfTVNLCQljcHVfdG9fbGUxNihCSVQoOSkpCiAKLXN0cnVjdCBpd2wzOTQ1X3Bvd2VydGFibGVfY21kIHsKLQlfX2xlMTYgZmxhZ3M7Ci0JdTggcmVzZXJ2ZWRbMl07Ci0JX19sZTMyIHJ4X2RhdGFfdGltZW91dDsKLQlfX2xlMzIgdHhfZGF0YV90aW1lb3V0OwotCV9fbGUzMiBzbGVlcF9pbnRlcnZhbFtJV0xfUE9XRVJfVkVDX1NJWkVdOwotfSBfX3BhY2tlZDsKLQogc3RydWN0IGl3bF9wb3dlcnRhYmxlX2NtZCB7CiAJX19sZTE2IGZsYWdzOwogCXU4IGtlZXBfYWxpdmVfc2Vjb25kczsJCS8qIDM5NDUgcmVzZXJ2ZWQgKi8KQEAgLTI4MDYsMjUgKzIyOTAsNiBAQAogICogICAgIGFjdGl2ZV9kd2VsbCA8IG1heF9vdXRfdGltZQogICovCiAKLS8qIEZJWE1FOiByZW5hbWUgdG8gQVAxLCByZW1vdmUgdHBjICovCi1zdHJ1Y3QgaXdsMzk0NV9zY2FuX2NoYW5uZWwgewotCS8qCi0JICogdHlwZSBpcyBkZWZpbmVkIGFzOgotCSAqIDA6MCAxID0gYWN0aXZlLCAwID0gcGFzc2l2ZQotCSAqIDE6NCBTU0lEIGRpcmVjdCBiaXQgbWFwOyBpZiBhIGJpdCBpcyBzZXQsIHRoZW4gY29ycmVzcG9uZGluZwotCSAqICAgICBTU0lEIElFIGlzIHRyYW5zbWl0dGVkIGluIHByb2JlIHJlcXVlc3QuCi0JICogNTo3IHJlc2VydmVkCi0JICovCi0JdTggdHlwZTsKLQl1OCBjaGFubmVsOwkvKiBiYW5kIGlzIHNlbGVjdGVkIGJ5IGl3bDM5NDVfc2Nhbl9jbWQgImZsYWdzIiBmaWVsZCAqLwotCXN0cnVjdCBpd2wzOTQ1X3R4X3Bvd2VyIHRwYzsKLQlfX2xlMTYgYWN0aXZlX2R3ZWxsOwkvKiBpbiAxMDI0LXVTZWMgVFUgKHRpbWUgdW5pdHMpLCB0eXAgNS01MCAqLwotCV9fbGUxNiBwYXNzaXZlX2R3ZWxsOwkvKiBpbiAxMDI0LXVTZWMgVFUgKHRpbWUgdW5pdHMpLCB0eXAgMjAtNTAwICovCi19IF9fcGFja2VkOwotCi0vKiBzZXQgbnVtYmVyIG9mIGRpcmVjdCBwcm9iZXMgdTggdHlwZSAqLwotI2RlZmluZSBJV0wzOV9TQ0FOX1BST0JFX01BU0sobikgKChCSVQobikgfCAoQklUKG4pIC0gQklUKDEpKSkpCi0KIHN0cnVjdCBpd2xfc2Nhbl9jaGFubmVsIHsKIAkvKgogCSAqIHR5cGUgaXMgZGVmaW5lZCBhczoKQEAgLTI5MjAsNTAgKzIzODUsNiBAQAogICogc3RydWN0IGl3bF9zY2FuX2NoYW5uZWwuCiAgKi8KIAotc3RydWN0IGl3bDM5NDVfc2Nhbl9jbWQgewotCV9fbGUxNiBsZW47Ci0JdTggcmVzZXJ2ZWQwOwotCXU4IGNoYW5uZWxfY291bnQ7CS8qICMgY2hhbm5lbHMgaW4gY2hhbm5lbCBsaXN0ICovCi0JX19sZTE2IHF1aWV0X3RpbWU7CS8qIGR3ZWxsIG9ubHkgdGhpcyAjIG1pbGxpc2VjcyBvbiBxdWlldCBjaGFubmVsCi0JCQkJICogKG9ubHkgZm9yIGFjdGl2ZSBzY2FuKSAqLwotCV9fbGUxNiBxdWlldF9wbGNwX3RoOwkvKiBxdWlldCBjaG5sIGlzIDwgdGhpcyAjIHBrdHMgKHR5cC4gMSkgKi8KLQlfX2xlMTYgZ29vZF9DUkNfdGg7CS8qIHBhc3NpdmUgLT4gYWN0aXZlIHByb21vdGlvbiB0aHJlc2hvbGQgKi8KLQlfX2xlMTYgcmVzZXJ2ZWQxOwotCV9fbGUzMiBtYXhfb3V0X3RpbWU7CS8qIG1heCB1c2VjIHRvIGJlIGF3YXkgZnJvbSBhc3NvY2lhdGVkIChzZXJ2aWNlKQotCQkJCSAqIGNoYW5uZWwgKi8KLQlfX2xlMzIgc3VzcGVuZF90aW1lOwkvKiBwYXVzZSBzY2FuIHRoaXMgbG9uZyAoaW4gImV4dGVuZGVkIGJlYWNvbgotCQkJCSAqIGZvcm1hdCIpIHdoZW4gcmV0dXJuaW5nIHRvIHNlcnZpY2UgY2hhbm5lbDoKLQkJCQkgKiAzOTQ1OyAzMToyNCAjIGJlYWNvbnMsIDE5OjAgYWRkaXRpb25hbCB1c2VjLAotCQkJCSAqIDQ5NjU7IDMxOjIyICMgYmVhY29ucywgMjE6MCBhZGRpdGlvbmFsIHVzZWMuCi0JCQkJICovCi0JX19sZTMyIGZsYWdzOwkJLyogUlhPTl9GTEdfKiAqLwotCV9fbGUzMiBmaWx0ZXJfZmxhZ3M7CS8qIFJYT05fRklMVEVSXyogKi8KLQotCS8qIEZvciBhY3RpdmUgc2NhbnMgKHNldCB0byBhbGwtMHMgZm9yIHBhc3NpdmUgc2NhbnMpLgotCSAqIERvZXMgbm90IGluY2x1ZGUgcGF5bG9hZC4gIE11c3Qgc3BlY2lmeSBUeCByYXRlOyBubyByYXRlIHNjYWxpbmcuICovCi0Jc3RydWN0IGl3bDM5NDVfdHhfY21kIHR4X2NtZDsKLQotCS8qIEZvciBkaXJlY3RlZCBhY3RpdmUgc2NhbnMgKHNldCB0byBhbGwtMHMgb3RoZXJ3aXNlKSAqLwotCXN0cnVjdCBpd2xfc3NpZF9pZSBkaXJlY3Rfc2NhbltQUk9CRV9PUFRJT05fTUFYXzM5NDVdOwotCi0JLyoKLQkgKiBQcm9iZSByZXF1ZXN0IGZyYW1lLCBmb2xsb3dlZCBieSBjaGFubmVsIGxpc3QuCi0JICoKLQkgKiBTaXplIG9mIHByb2JlIHJlcXVlc3QgZnJhbWUgaXMgc3BlY2lmaWVkIGJ5IGJ5dGUgY291bnQgaW4gdHhfY21kLgotCSAqIENoYW5uZWwgbGlzdCBmb2xsb3dzIGltbWVkaWF0ZWx5IGFmdGVyIHByb2JlIHJlcXVlc3QgZnJhbWUuCi0JICogTnVtYmVyIG9mIGNoYW5uZWxzIGluIGxpc3QgaXMgc3BlY2lmaWVkIGJ5IGNoYW5uZWxfY291bnQuCi0JICogRWFjaCBjaGFubmVsIGluIGxpc3QgaXMgb2YgdHlwZToKLQkgKgotCSAqIHN0cnVjdCBpd2wzOTQ1X3NjYW5fY2hhbm5lbCBjaGFubmVsc1swXTsKLQkgKgotCSAqIE5PVEU6ICBPbmx5IG9uZSBiYW5kIG9mIGNoYW5uZWxzIGNhbiBiZSBzY2FubmVkIHBlciBwYXNzLiAgWW91Ci0JICogbXVzdCBub3QgbWl4IDIuNEdIeiBjaGFubmVscyBhbmQgNS4yR0h6IGNoYW5uZWxzLCBhbmQgeW91IG11c3Qgd2FpdAotCSAqIGZvciBvbmUgc2NhbiB0byBjb21wbGV0ZSAoaS5lLiByZWNlaXZlIFNDQU5fQ09NUExFVEVfTk9USUZJQ0FUSU9OKQotCSAqIGJlZm9yZSByZXF1ZXN0aW5nIGFub3RoZXIgc2Nhbi4KLQkgKi8KLQl1OCBkYXRhWzBdOwotfSBfX3BhY2tlZDsKLQogZW51bSBpd2xfc2Nhbl9mbGFncyB7CiAJLyogQklUKDApIGN1cnJlbnRseSB1bnVzZWQgKi8KIAlJV0xfU0NBTl9GTEFHU19BQ1RJT05fRlJBTUVfVFgJPSBCSVQoMSksCkBAIC0zMDkwLDIwICsyNTExLDYgQEAKICAqIEJFQUNPTl9OT1RJRklDQVRJT04gPSAweDkwIChub3RpZmljYXRpb24gb25seSwgbm90IGEgY29tbWFuZCkKICAqLwogCi1zdHJ1Y3QgaXdsMzk0NV9iZWFjb25fbm90aWYgewotCXN0cnVjdCBpd2wzOTQ1X3R4X3Jlc3AgYmVhY29uX25vdGlmeV9oZHI7Ci0JX19sZTMyIGxvd190c2Y7Ci0JX19sZTMyIGhpZ2hfdHNmOwotCV9fbGUzMiBpYnNzX21ncl9zdGF0dXM7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaXdsNDk2NV9iZWFjb25fbm90aWYgewotCXN0cnVjdCBpd2w0OTY1X3R4X3Jlc3AgYmVhY29uX25vdGlmeV9oZHI7Ci0JX19sZTMyIGxvd190c2Y7Ci0JX19sZTMyIGhpZ2hfdHNmOwotCV9fbGUzMiBpYnNzX21ncl9zdGF0dXM7Ci19IF9fcGFja2VkOwotCiBzdHJ1Y3QgaXdsYWduX2JlYWNvbl9ub3RpZiB7CiAJc3RydWN0IGl3bGFnbl90eF9yZXNwIGJlYWNvbl9ub3RpZnlfaGRyOwogCV9fbGUzMiBsb3dfdHNmOwpAQCAtMzExNSwxNCArMjUyMiw2IEBACiAgKiBSRVBMWV9UWF9CRUFDT04gPSAweDkxIChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCiAgKi8KIAotc3RydWN0IGl3bDM5NDVfdHhfYmVhY29uX2NtZCB7Ci0Jc3RydWN0IGl3bDM5NDVfdHhfY21kIHR4OwotCV9fbGUxNiB0aW1faWR4OwotCXU4IHRpbV9zaXplOwotCXU4IHJlc2VydmVkMTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciBmcmFtZVswXTsJLyogYmVhY29uIGZyYW1lICovCi19IF9fcGFja2VkOwotCiBzdHJ1Y3QgaXdsX3R4X2JlYWNvbl9jbWQgewogCXN0cnVjdCBpd2xfdHhfY21kIHR4OwogCV9fbGUxNiB0aW1faWR4OwpAQCAtMzE1OSw1MyArMjU1OCw2IEBACiAKIC8qIHN0YXRpc3RpY3MgY29tbWFuZCByZXNwb25zZSAqLwogCi1zdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19yeF9waHkgewotCV9fbGUzMiBpbmFfY250OwotCV9fbGUzMiBmaW5hX2NudDsKLQlfX2xlMzIgcGxjcF9lcnI7Ci0JX19sZTMyIGNyYzMyX2VycjsKLQlfX2xlMzIgb3ZlcnJ1bl9lcnI7Ci0JX19sZTMyIGVhcmx5X292ZXJydW5fZXJyOwotCV9fbGUzMiBjcmMzMl9nb29kOwotCV9fbGUzMiBmYWxzZV9hbGFybV9jbnQ7Ci0JX19sZTMyIGZpbmFfc3luY19lcnJfY250OwotCV9fbGUzMiBzZmRfdGltZW91dDsKLQlfX2xlMzIgZmluYV90aW1lb3V0OwotCV9fbGUzMiB1bnJlc3BvbmRlZF9ydHM7Ci0JX19sZTMyIHJ4ZV9mcmFtZV9saW1pdF9vdmVycnVuOwotCV9fbGUzMiBzZW50X2Fja19jbnQ7Ci0JX19sZTMyIHNlbnRfY3RzX2NudDsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBpd2wzOV9zdGF0aXN0aWNzX3J4X25vbl9waHkgewotCV9fbGUzMiBib2d1c19jdHM7CS8qIENUUyByZWNlaXZlZCB3aGVuIG5vdCBleHBlY3RpbmcgQ1RTICovCi0JX19sZTMyIGJvZ3VzX2FjazsJLyogQUNLIHJlY2VpdmVkIHdoZW4gbm90IGV4cGVjdGluZyBBQ0sgKi8KLQlfX2xlMzIgbm9uX2Jzc2lkX2ZyYW1lczsJLyogbnVtYmVyIG9mIGZyYW1lcyB3aXRoIEJTU0lEIHRoYXQKLQkJCQkJICogZG9lc24ndCBiZWxvbmcgdG8gdGhlIFNUQSBCU1NJRCAqLwotCV9fbGUzMiBmaWx0ZXJlZF9mcmFtZXM7CS8qIGNvdW50IGZyYW1lcyB0aGF0IHdlcmUgZHVtcGVkIGluIHRoZQotCQkJCSAqIGZpbHRlcmluZyBwcm9jZXNzICovCi0JX19sZTMyIG5vbl9jaGFubmVsX2JlYWNvbnM7CS8qIGJlYWNvbnMgd2l0aCBvdXIgYnNzIGlkIGJ1dCBub3Qgb24KLQkJCQkJICogb3VyIHNlcnZpbmcgY2hhbm5lbCAqLwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGl3bDM5X3N0YXRpc3RpY3NfcnggewotCXN0cnVjdCBpd2wzOV9zdGF0aXN0aWNzX3J4X3BoeSBvZmRtOwotCXN0cnVjdCBpd2wzOV9zdGF0aXN0aWNzX3J4X3BoeSBjY2s7Ci0Jc3RydWN0IGl3bDM5X3N0YXRpc3RpY3Nfcnhfbm9uX3BoeSBnZW5lcmFsOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGl3bDM5X3N0YXRpc3RpY3NfdHggewotCV9fbGUzMiBwcmVhbWJsZV9jbnQ7Ci0JX19sZTMyIHJ4X2RldGVjdGVkX2NudDsKLQlfX2xlMzIgYnRfcHJpb19kZWZlcl9jbnQ7Ci0JX19sZTMyIGJ0X3ByaW9fa2lsbF9jbnQ7Ci0JX19sZTMyIGZld19ieXRlc19jbnQ7Ci0JX19sZTMyIGN0c190aW1lb3V0OwotCV9fbGUzMiBhY2tfdGltZW91dDsKLQlfX2xlMzIgZXhwZWN0ZWRfYWNrX2NudDsKLQlfX2xlMzIgYWN0dWFsX2Fja19jbnQ7Ci19IF9fcGFja2VkOwotCiBzdHJ1Y3Qgc3RhdGlzdGljc19kYmcgewogCV9fbGUzMiBidXJzdF9jaGVjazsKIAlfX2xlMzIgYnVyc3RfY291bnQ7CkBAIC0zMjEzLDIzICsyNTY1LDYgQEAKIAlfX2xlMzIgcmVzZXJ2ZWRbM107CiB9IF9fcGFja2VkOwogCi1zdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19kaXYgewotCV9fbGUzMiB0eF9vbl9hOwotCV9fbGUzMiB0eF9vbl9iOwotCV9fbGUzMiBleGVjX3RpbWU7Ci0JX19sZTMyIHByb2JlX3RpbWU7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19nZW5lcmFsIHsKLQlfX2xlMzIgdGVtcGVyYXR1cmU7Ci0Jc3RydWN0IHN0YXRpc3RpY3NfZGJnIGRiZzsKLQlfX2xlMzIgc2xlZXBfdGltZTsKLQlfX2xlMzIgc2xvdHNfb3V0OwotCV9fbGUzMiBzbG90c19pZGxlOwotCV9fbGUzMiB0dGxfdGltZXN0YW1wOwotCXN0cnVjdCBpd2wzOV9zdGF0aXN0aWNzX2RpdiBkaXY7Ci19IF9fcGFja2VkOwotCiBzdHJ1Y3Qgc3RhdGlzdGljc19yeF9waHkgewogCV9fbGUzMiBpbmFfY250OwogCV9fbGUzMiBmaW5hX2NudDsKQEAgLTM0NzEsMTMgKzI4MDYsNiBAQAogI2RlZmluZSBTVEFUSVNUSUNTX1JFUExZX0ZMR19CQU5EXzI0R19NU0sgICAgICAgICBjcHVfdG9fbGUzMigweDIpCiAjZGVmaW5lIFNUQVRJU1RJQ1NfUkVQTFlfRkxHX0hUNDBfTU9ERV9NU0sgICAgICAgIGNwdV90b19sZTMyKDB4OCkKIAotc3RydWN0IGl3bDM5NDVfbm90aWZfc3RhdGlzdGljcyB7Ci0JX19sZTMyIGZsYWc7Ci0Jc3RydWN0IGl3bDM5X3N0YXRpc3RpY3Nfcnggcng7Ci0Jc3RydWN0IGl3bDM5X3N0YXRpc3RpY3NfdHggdHg7Ci0Jc3RydWN0IGl3bDM5X3N0YXRpc3RpY3NfZ2VuZXJhbCBnZW5lcmFsOwotfSBfX3BhY2tlZDsKLQogc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzIHsKIAlfX2xlMzIgZmxhZzsKIAlzdHJ1Y3Qgc3RhdGlzdGljc19yeCByeDsKQEAgLTQ0NTEsMTAgKzM3NzksNiBAQAogCV9fbGUzMiBsZW5fbl9mbGFnczsKIAlzdHJ1Y3QgaXdsX2NtZF9oZWFkZXIgaGRyOwogCXVuaW9uIHsKLQkJc3RydWN0IGl3bDM5NDVfcnhfZnJhbWUgcnhfZnJhbWU7Ci0JCXN0cnVjdCBpd2wzOTQ1X3R4X3Jlc3AgdHhfcmVzcDsKLQkJc3RydWN0IGl3bDM5NDVfYmVhY29uX25vdGlmIGJlYWNvbl9zdGF0dXM7Ci0KIAkJc3RydWN0IGl3bF9hbGl2ZV9yZXNwIGFsaXZlX2ZyYW1lOwogCQlzdHJ1Y3QgaXdsX3NwZWN0cnVtX25vdGlmaWNhdGlvbiBzcGVjdHJ1bV9ub3RpZjsKIAkJc3RydWN0IGl3bF9jc2Ffbm90aWZpY2F0aW9uIGNzYV9ub3RpZjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYwppbmRleCBiYWZiZTU3Li40NjUzZGVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jCkBAIC0yLDcgKzIsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiaXdsLXBvd2VyLmgiCiAjaW5jbHVkZSAiaXdsLXN0YS5oIgogI2luY2x1ZGUgIml3bC1oZWxwZXJzLmgiCisjaW5jbHVkZSAiaXdsLWFnbi5oIgogCiAKIC8qCkBAIC02NywzMCArNjgsNiBAQAogCiBjb25zdCB1OCBpd2xfYmNhc3RfYWRkcltFVEhfQUxFTl0gPSB7IDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgfTsKIAotCi0vKiBUaGlzIGZ1bmN0aW9uIGJvdGggYWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyBodyBhbmQgcHJpdi4gKi8KLXN0cnVjdCBpZWVlODAyMTFfaHcgKml3bF9hbGxvY19hbGwoc3RydWN0IGl3bF9jZmcgKmNmZykKLXsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXY7Ci0JLyogbWFjODAyMTEgYWxsb2NhdGVzIG1lbW9yeSBmb3IgdGhpcyBkZXZpY2UgaW5zdGFuY2UsIGluY2x1ZGluZwotCSAqICAgc3BhY2UgZm9yIHRoaXMgZHJpdmVyJ3MgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKLQotCWh3ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZihzdHJ1Y3QgaXdsX3ByaXYpLAotCQkJCWNmZy0+b3BzLT5pZWVlODAyMTFfb3BzKTsKLQlpZiAoaHcgPT0gTlVMTCkgewotCQlwcl9lcnIoIiVzOiBDYW4gbm90IGFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlXG4iLAotCQkgICAgICAgY2ZnLT5uYW1lKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcHJpdiA9IGh3LT5wcml2OwotCXByaXYtPmh3ID0gaHc7Ci0KLW91dDoKLQlyZXR1cm4gaHc7Ci19Ci0KICNkZWZpbmUgTUFYX0JJVF9SQVRFXzQwX01IWiAxNTAgLyogTWJwcyAqLwogI2RlZmluZSBNQVhfQklUX1JBVEVfMjBfTUhaIDcyIC8qIE1icHMgKi8KIHN0YXRpYyB2b2lkIGl3bGNvcmVfaW5pdF9odF9od19jYXBhYihjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCkBAIC0xMTgsNyArOTUsNyBAQAogCQltYXhfYml0X3JhdGUgPSBNQVhfQklUX1JBVEVfNDBfTUhaOwogCX0KIAotCWlmIChwcml2LT5jZmctPm1vZF9wYXJhbXMtPmFtc2R1X3NpemVfOEspCisJaWYgKGl3bGFnbl9tb2RfcGFyYW1zLmFtc2R1X3NpemVfOEspCiAJCWh0X2luZm8tPmNhcCB8PSBJRUVFODAyMTFfSFRfQ0FQX01BWF9BTVNEVTsKIAogCWh0X2luZm8tPmFtcGR1X2ZhY3RvciA9IENGR19IVF9SWF9BTVBEVV9GQUNUT1JfREVGOwpAQCAtMTU5LDYgKzEzNiw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpnZW9fY2g7CiAJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlczsKIAlpbnQgaSA9IDA7CisJczggbWF4X3R4X3Bvd2VyID0gSVdMQUdOX1RYX1BPV0VSX1RBUkdFVF9QT1dFUl9NSU47CiAKIAlpZiAocHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0ubl9iaXRyYXRlcyB8fAogCSAgICBwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2JpdHJhdGVzKSB7CkBAIC0yMzIsOCArMjEwLDggQEAKIAogCQkJZ2VvX2NoLT5mbGFncyB8PSBjaC0+aHQ0MF9leHRlbnNpb25fY2hhbm5lbDsKIAotCQkJaWYgKGNoLT5tYXhfcG93ZXJfYXZnID4gcHJpdi0+dHhfcG93ZXJfZGV2aWNlX2xtdCkKLQkJCQlwcml2LT50eF9wb3dlcl9kZXZpY2VfbG10ID0gY2gtPm1heF9wb3dlcl9hdmc7CisJCQlpZiAoY2gtPm1heF9wb3dlcl9hdmcgPiBtYXhfdHhfcG93ZXIpCisJCQkJbWF4X3R4X3Bvd2VyID0gY2gtPm1heF9wb3dlcl9hdmc7CiAJCX0gZWxzZSB7CiAJCQlnZW9fY2gtPmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEOwogCQl9CkBAIC0yNDYsNiArMjI0LDEwIEBACiAJCQkJIGdlb19jaC0+ZmxhZ3MpOwogCX0KIAorCXByaXYtPnR4X3Bvd2VyX2RldmljZV9sbXQgPSBtYXhfdHhfcG93ZXI7CisJcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQgPSBtYXhfdHhfcG93ZXI7CisJcHJpdi0+dHhfcG93ZXJfbmV4dCA9IG1heF90eF9wb3dlcjsKKwogCWlmICgocHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0ubl9jaGFubmVscyA9PSAwKSAmJgogCSAgICAgcHJpdi0+Y2ZnLT5za3UgJiBJV0xfU0tVX0EpIHsKIAkJSVdMX0lORk8ocHJpdiwgIkluY29ycmVjdGx5IGRldGVjdGVkIEJHIGNhcmQgYXMgQUJHLiAiCkBAIC00MzQsNzIgKzQxNiw3MiBAQAogaW50IGl3bF9jaGVja19yeG9uX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHgpCiB7CiAJc3RydWN0IGl3bF9yeG9uX2NtZCAqcnhvbiA9ICZjdHgtPnN0YWdpbmc7Ci0JYm9vbCBlcnJvciA9IGZhbHNlOworCXUzMiBlcnJvcnMgPSAwOwogCiAJaWYgKHJ4b24tPmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKSB7CiAJCWlmIChyeG9uLT5mbGFncyAmIFJYT05fRkxHX1RHSl9OQVJST1dfQkFORF9NU0spIHsKIAkJCUlXTF9XQVJOKHByaXYsICJjaGVjayAyLjRHOiB3cm9uZyBuYXJyb3dcbiIpOwotCQkJZXJyb3IgPSB0cnVlOworCQkJZXJyb3JzIHw9IEJJVCgwKTsKIAkJfQogCQlpZiAocnhvbi0+ZmxhZ3MgJiBSWE9OX0ZMR19SQURBUl9ERVRFQ1RfTVNLKSB7CiAJCQlJV0xfV0FSTihwcml2LCAiY2hlY2sgMi40Rzogd3JvbmcgcmFkYXJcbiIpOwotCQkJZXJyb3IgPSB0cnVlOworCQkJZXJyb3JzIHw9IEJJVCgxKTsKIAkJfQogCX0gZWxzZSB7CiAJCWlmICghKHJ4b24tPmZsYWdzICYgUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0spKSB7CiAJCQlJV0xfV0FSTihwcml2LCAiY2hlY2sgNS4yRzogbm90IHNob3J0IHNsb3QhXG4iKTsKLQkJCWVycm9yID0gdHJ1ZTsKKwkJCWVycm9ycyB8PSBCSVQoMik7CiAJCX0KIAkJaWYgKHJ4b24tPmZsYWdzICYgUlhPTl9GTEdfQ0NLX01TSykgewogCQkJSVdMX1dBUk4ocHJpdiwgImNoZWNrIDUuMkc6IENDSyFcbiIpOwotCQkJZXJyb3IgPSB0cnVlOworCQkJZXJyb3JzIHw9IEJJVCgzKTsKIAkJfQogCX0KIAlpZiAoKHJ4b24tPm5vZGVfYWRkclswXSB8IHJ4b24tPmJzc2lkX2FkZHJbMF0pICYgMHgxKSB7CiAJCUlXTF9XQVJOKHByaXYsICJtYWMvYnNzaWQgbWNhc3QhXG4iKTsKLQkJZXJyb3IgPSB0cnVlOworCQllcnJvcnMgfD0gQklUKDQpOwogCX0KIAogCS8qIG1ha2Ugc3VyZSBiYXNpYyByYXRlcyA2TWJwcyBhbmQgMU1icHMgYXJlIHN1cHBvcnRlZCAqLwogCWlmICgocnhvbi0+b2ZkbV9iYXNpY19yYXRlcyAmIElXTF9SQVRFXzZNX01BU0spID09IDAgJiYKIAkgICAgKHJ4b24tPmNja19iYXNpY19yYXRlcyAmIElXTF9SQVRFXzFNX01BU0spID09IDApIHsKIAkJSVdMX1dBUk4ocHJpdiwgIm5laXRoZXIgMSBub3IgNiBhcmUgYmFzaWNcbiIpOwotCQllcnJvciA9IHRydWU7CisJCWVycm9ycyB8PSBCSVQoNSk7CiAJfQogCiAJaWYgKGxlMTZfdG9fY3B1KHJ4b24tPmFzc29jX2lkKSA+IDIwMDcpIHsKIAkJSVdMX1dBUk4ocHJpdiwgImFpZCA+IDIwMDdcbiIpOwotCQllcnJvciA9IHRydWU7CisJCWVycm9ycyB8PSBCSVQoNik7CiAJfQogCiAJaWYgKChyeG9uLT5mbGFncyAmIChSWE9OX0ZMR19DQ0tfTVNLIHwgUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0spKQogCQkJPT0gKFJYT05fRkxHX0NDS19NU0sgfCBSWE9OX0ZMR19TSE9SVF9TTE9UX01TSykpIHsKIAkJSVdMX1dBUk4ocHJpdiwgIkNDSyBhbmQgc2hvcnQgc2xvdFxuIik7Ci0JCWVycm9yID0gdHJ1ZTsKKwkJZXJyb3JzIHw9IEJJVCg3KTsKIAl9CiAKIAlpZiAoKHJ4b24tPmZsYWdzICYgKFJYT05fRkxHX0NDS19NU0sgfCBSWE9OX0ZMR19BVVRPX0RFVEVDVF9NU0spKQogCQkJPT0gKFJYT05fRkxHX0NDS19NU0sgfCBSWE9OX0ZMR19BVVRPX0RFVEVDVF9NU0spKSB7CiAJCUlXTF9XQVJOKHByaXYsICJDQ0sgYW5kIGF1dG8gZGV0ZWN0Iik7Ci0JCWVycm9yID0gdHJ1ZTsKKwkJZXJyb3JzIHw9IEJJVCg4KTsKIAl9CiAKIAlpZiAoKHJ4b24tPmZsYWdzICYgKFJYT05fRkxHX0FVVE9fREVURUNUX01TSyB8CiAJCQkgICAgUlhPTl9GTEdfVEdHX1BST1RFQ1RfTVNLKSkgPT0KIAkJCSAgICBSWE9OX0ZMR19UR0dfUFJPVEVDVF9NU0spIHsKIAkJSVdMX1dBUk4ocHJpdiwgIlRHZyBidXQgbm8gYXV0by1kZXRlY3RcbiIpOwotCQllcnJvciA9IHRydWU7CisJCWVycm9ycyB8PSBCSVQoOSk7CiAJfQogCi0JaWYgKGVycm9yKQotCQlJV0xfV0FSTihwcml2LCAiVHVuaW5nIHRvIGNoYW5uZWwgJWRcbiIsCi0JCQkgICAgbGUxNl90b19jcHUocnhvbi0+Y2hhbm5lbCkpOwotCi0JaWYgKGVycm9yKSB7Ci0JCUlXTF9FUlIocHJpdiwgIkludmFsaWQgUlhPTlxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCWlmIChyeG9uLT5jaGFubmVsID09IDApIHsKKwkJSVdMX1dBUk4ocHJpdiwgInplcm8gY2hhbm5lbCBpcyBpbnZhbGlkXG4iKTsKKwkJZXJyb3JzIHw9IEJJVCgxMCk7CiAJfQotCXJldHVybiAwOworCisJV0FSTihlcnJvcnMsICJJbnZhbGlkIFJYT04gKCUjeCksIGNoYW5uZWwgJWQiLAorCSAgICAgZXJyb3JzLCBsZTE2X3RvX2NwdShyeG9uLT5jaGFubmVsKSk7CisKKwlyZXR1cm4gZXJyb3JzID8gLUVJTlZBTCA6IDA7CiB9CiAKIC8qKgpAQCAtODkwLDEwICs4NzIsMjEgQEAKIAlJV0xfREVCVUdfUkFESU8ocHJpdiwgInUxNiBhc3NvY19pZDogMHgleFxuIiwgbGUxNl90b19jcHUocnhvbi0+YXNzb2NfaWQpKTsKIH0KICNlbmRpZgotLyoqCi0gKiBpd2xfaXJxX2hhbmRsZV9lcnJvciAtIGNhbGxlZCBmb3IgSFcgb3IgU1cgZXJyb3IgaW50ZXJydXB0IGZyb20gY2FyZAotICovCi12b2lkIGl3bF9pcnFfaGFuZGxlX2Vycm9yKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKKworc3RhdGljIHZvaWQgaXdsYWduX2Fib3J0X25vdGlmaWNhdGlvbl93YWl0cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaXdsX25vdGlmaWNhdGlvbl93YWl0ICp3YWl0X2VudHJ5OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPl9hZ24ubm90aWZfd2FpdF9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3YWl0X2VudHJ5LCAmcHJpdi0+X2Fnbi5ub3RpZl93YWl0cywgbGlzdCkKKwkJd2FpdF9lbnRyeS0+YWJvcnRlZCA9IHRydWU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+X2Fnbi5ub3RpZl93YWl0X2xvY2ssIGZsYWdzKTsKKworCXdha2VfdXBfYWxsKCZwcml2LT5fYWduLm5vdGlmX3dhaXRxKTsKK30KKwordm9pZCBpd2xhZ25fZndfZXJyb3Ioc3RydWN0IGl3bF9wcml2ICpwcml2LCBib29sIG9uZGVtYW5kKQogewogCXVuc2lnbmVkIGludCByZWxvYWRfbXNlYzsKIAl1bnNpZ25lZCBsb25nIHJlbG9hZF9qaWZmaWVzOwpAQCAtOTA0LDE4ICs4OTcsNjQgQEAKIAkvKiBDYW5jZWwgY3VycmVudGx5IHF1ZXVlZCBjb21tYW5kLiAqLwogCWNsZWFyX2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOwogCisJaXdsYWduX2Fib3J0X25vdGlmaWNhdGlvbl93YWl0cyhwcml2KTsKKworCS8qIEtlZXAgdGhlIHJlc3RhcnQgcHJvY2VzcyBmcm9tIHRyeWluZyB0byBzZW5kIGhvc3QKKwkgKiBjb21tYW5kcyBieSBjbGVhcmluZyB0aGUgcmVhZHkgYml0ICovCisJY2xlYXJfYml0KFNUQVRVU19SRUFEWSwgJnByaXYtPnN0YXR1cyk7CisKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7CisKKwlpZiAoIW9uZGVtYW5kKSB7CisJCS8qCisJCSAqIElmIGZpcm13YXJlIGtlZXAgcmVsb2FkaW5nLCB0aGVuIGl0IGluZGljYXRlIHNvbWV0aGluZworCQkgKiBzZXJpb3VzIHdyb25nIGFuZCBmaXJtd2FyZSBoYXZpbmcgcHJvYmxlbSB0byByZWNvdmVyCisJCSAqIGZyb20gaXQuIEluc3RlYWQgb2Yga2VlcCB0cnlpbmcgd2hpY2ggd2lsbCBmaWxsIHRoZSBzeXNsb2cKKwkJICogYW5kIGhhbmcgdGhlIHN5c3RlbSwgbGV0J3MganVzdCBzdG9wIGl0CisJCSAqLworCQlyZWxvYWRfamlmZmllcyA9IGppZmZpZXM7CisJCXJlbG9hZF9tc2VjID0gamlmZmllc190b19tc2VjcygobG9uZykgcmVsb2FkX2ppZmZpZXMgLQorCQkJCQkobG9uZykgcHJpdi0+cmVsb2FkX2ppZmZpZXMpOworCQlwcml2LT5yZWxvYWRfamlmZmllcyA9IHJlbG9hZF9qaWZmaWVzOworCQlpZiAocmVsb2FkX21zZWMgPD0gSVdMX01JTl9SRUxPQURfRFVSQVRJT04pIHsKKwkJCXByaXYtPnJlbG9hZF9jb3VudCsrOworCQkJaWYgKHByaXYtPnJlbG9hZF9jb3VudCA+PSBJV0xfTUFYX0NPTlRJTlVFX1JFTE9BRF9DTlQpIHsKKwkJCQlJV0xfRVJSKHByaXYsICJCVUdfT04sIFN0b3AgcmVzdGFydGluZ1xuIik7CisJCQkJcmV0dXJuOworCQkJfQorCQl9IGVsc2UKKwkJCXByaXYtPnJlbG9hZF9jb3VudCA9IDA7CisJfQorCisJaWYgKCF0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkgeworCQlpZiAoaXdsYWduX21vZF9wYXJhbXMucmVzdGFydF9mdykgeworCQkJSVdMX0RFQlVHKHByaXYsIElXTF9ETF9GV19FUlJPUlMsCisJCQkJICAiUmVzdGFydGluZyBhZGFwdGVyIGR1ZSB0byB1Q29kZSBlcnJvci5cbiIpOworCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKKwkJfSBlbHNlCisJCQlJV0xfREVCVUcocHJpdiwgSVdMX0RMX0ZXX0VSUk9SUywKKwkJCQkgICJEZXRlY3RlZCBGVyBlcnJvciwgYnV0IG5vdCByZXN0YXJ0aW5nXG4iKTsKKwl9Cit9CisKKy8qKgorICogaXdsX2lycV9oYW5kbGVfZXJyb3IgLSBjYWxsZWQgZm9yIEhXIG9yIFNXIGVycm9yIGludGVycnVwdCBmcm9tIGNhcmQKKyAqLwordm9pZCBpd2xfaXJxX2hhbmRsZV9lcnJvcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CiAJLyogVy9BIGZvciBXaUZpL1dpTUFYIGNvZXggYW5kIFdpTUFYIG93biB0aGUgUkYgKi8KIAlpZiAocHJpdi0+Y2ZnLT5pbnRlcm5hbF93aW1heF9jb2V4ICYmCiAJICAgICghKGl3bF9yZWFkX3BycGgocHJpdiwgQVBNR19DTEtfQ1RSTF9SRUcpICYKIAkJCUFQTVNfQ0xLX1ZBTF9NUkJfRlVOQ19NT0RFKSB8fAogCSAgICAgKGl3bF9yZWFkX3BycGgocHJpdiwgQVBNR19QU19DVFJMX1JFRykgJgogCQkJQVBNR19QU19DVFJMX1ZBTF9SRVNFVF9SRVEpKSkgewotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7CiAJCS8qCi0JCSAqS2VlcCB0aGUgcmVzdGFydCBwcm9jZXNzIGZyb20gdHJ5aW5nIHRvIHNlbmQgaG9zdAotCQkgKiBjb21tYW5kcyBieSBjbGVhcmluZyB0aGUgSU5JVCBzdGF0dXMgYml0CisJCSAqIEtlZXAgdGhlIHJlc3RhcnQgcHJvY2VzcyBmcm9tIHRyeWluZyB0byBzZW5kIGhvc3QKKwkJICogY29tbWFuZHMgYnkgY2xlYXJpbmcgdGhlIHJlYWR5IGJpdC4KIAkJICovCiAJCWNsZWFyX2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpOworCQljbGVhcl9iaXQoU1RBVFVTX0hDTURfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOwogCQlJV0xfRVJSKHByaXYsICJSRiBpcyB1c2VkIGJ5IFdpTUFYXG4iKTsKIAkJcmV0dXJuOwogCX0KQEAgLTkyMyw1MCArOTYyLDE3IEBACiAJSVdMX0VSUihwcml2LCAiTG9hZGVkIGZpcm13YXJlIHZlcnNpb246ICVzXG4iLAogCQlwcml2LT5ody0+d2lwaHktPmZ3X3ZlcnNpb24pOwogCi0JcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZHVtcF9uaWNfZXJyb3JfbG9nKHByaXYpOwotCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5kdW1wX2NzcikKLQkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZHVtcF9jc3IocHJpdik7Ci0JaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPmR1bXBfZmgpCi0JCXByaXYtPmNmZy0+b3BzLT5saWItPmR1bXBfZmgocHJpdiwgTlVMTCwgZmFsc2UpOwotCXByaXYtPmNmZy0+b3BzLT5saWItPmR1bXBfbmljX2V2ZW50X2xvZyhwcml2LCBmYWxzZSwgTlVMTCwgZmFsc2UpOworCWl3bF9kdW1wX25pY19lcnJvcl9sb2cocHJpdik7CisJaXdsX2R1bXBfY3NyKHByaXYpOworCWl3bF9kdW1wX2ZoKHByaXYsIE5VTEwsIGZhbHNlKTsKKwlpd2xfZHVtcF9uaWNfZXZlbnRfbG9nKHByaXYsIGZhbHNlLCBOVUxMLCBmYWxzZSk7CiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIAlpZiAoaXdsX2dldF9kZWJ1Z19sZXZlbChwcml2KSAmIElXTF9ETF9GV19FUlJPUlMpCiAJCWl3bF9wcmludF9yeF9jb25maWdfY21kKHByaXYsCiAJCQkJCSZwcml2LT5jb250ZXh0c1tJV0xfUlhPTl9DVFhfQlNTXSk7CiAjZW5kaWYKIAotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKLQotCS8qIEtlZXAgdGhlIHJlc3RhcnQgcHJvY2VzcyBmcm9tIHRyeWluZyB0byBzZW5kIGhvc3QKLQkgKiBjb21tYW5kcyBieSBjbGVhcmluZyB0aGUgSU5JVCBzdGF0dXMgYml0ICovCi0JY2xlYXJfYml0KFNUQVRVU19SRUFEWSwgJnByaXYtPnN0YXR1cyk7Ci0KLQkvKgotCSAqIElmIGZpcm13YXJlIGtlZXAgcmVsb2FkaW5nLCB0aGVuIGl0IGluZGljYXRlIHNvbWV0aGluZwotCSAqIHNlcmlvdXMgd3JvbmcgYW5kIGZpcm13YXJlIGhhdmluZyBwcm9ibGVtIHRvIHJlY292ZXIKLQkgKiBmcm9tIGl0LiBJbnN0ZWFkIG9mIGtlZXAgdHJ5aW5nIHdoaWNoIHdpbGwgZmlsbCB0aGUgc3lzbG9nCi0JICogYW5kIGhhbmcgdGhlIHN5c3RlbSwgbGV0J3MganVzdCBzdG9wIGl0Ci0JICovCi0JcmVsb2FkX2ppZmZpZXMgPSBqaWZmaWVzOwotCXJlbG9hZF9tc2VjID0gamlmZmllc190b19tc2VjcygobG9uZykgcmVsb2FkX2ppZmZpZXMgLQotCQkJCShsb25nKSBwcml2LT5yZWxvYWRfamlmZmllcyk7Ci0JcHJpdi0+cmVsb2FkX2ppZmZpZXMgPSByZWxvYWRfamlmZmllczsKLQlpZiAocmVsb2FkX21zZWMgPD0gSVdMX01JTl9SRUxPQURfRFVSQVRJT04pIHsKLQkJcHJpdi0+cmVsb2FkX2NvdW50Kys7Ci0JCWlmIChwcml2LT5yZWxvYWRfY291bnQgPj0gSVdMX01BWF9DT05USU5VRV9SRUxPQURfQ05UKSB7Ci0JCQlJV0xfRVJSKHByaXYsICJCVUdfT04sIFN0b3AgcmVzdGFydGluZ1xuIik7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9IGVsc2UKLQkJcHJpdi0+cmVsb2FkX2NvdW50ID0gMDsKLQotCWlmICghdGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHKHByaXYsIElXTF9ETF9GV19FUlJPUlMsCi0JCQkgICJSZXN0YXJ0aW5nIGFkYXB0ZXIgZHVlIHRvIHVDb2RlIGVycm9yLlxuIik7Ci0KLQkJaWYgKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+cmVzdGFydF9mdykKLQkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7Ci0JfQorCWl3bGFnbl9md19lcnJvcihwcml2LCBmYWxzZSk7CiB9CiAKIHN0YXRpYyBpbnQgaXdsX2FwbV9zdG9wX21hc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCkBAIC05OTAsNiArOTk2LDggQEAKIHsKIAlJV0xfREVCVUdfSU5GTyhwcml2LCAiU3RvcCBjYXJkLCBwdXQgaW4gbG93IHBvd2VyIHN0YXRlXG4iKTsKIAorCWNsZWFyX2JpdChTVEFUVVNfREVWSUNFX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpOworCiAJLyogU3RvcCBkZXZpY2UncyBETUEgYWN0aXZpdHkgKi8KIAlpd2xfYXBtX3N0b3BfbWFzdGVyKHByaXYpOwogCkBAIC0xMDQwLDcgKzEwNDgsNiBAQAogCS8qCiAJICogRW5hYmxlIEhBUCBJTlRBIChpbnRlcnJ1cHQgZnJvbSBtYW5hZ2VtZW50IGJ1cykgdG8KIAkgKiB3YWtlIGRldmljZSdzIFBDSSBFeHByZXNzIGxpbmsgTDFhIC0+IEwwcwotCSAqIE5PVEU6ICBUaGlzIGlzIG5vLW9wIGZvciAzOTQ1IChub24tZXhpc3RlbnQgYml0KQogCSAqLwogCWl3bF9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAogCQkJCSAgICBDU1JfSFdfSUZfQ09ORklHX1JFR19CSVRfSEFQX1dBS0VfTDFBKTsKQEAgLTEwNTMsMjAgKzEwNjAsMTggQEAKIAkgKiBJZiBub3QgKHVubGlrZWx5KSwgZW5hYmxlIEwwUywgc28gdGhlcmUgaXMgYXQgbGVhc3Qgc29tZQogCSAqICAgIHBvd2VyIHNhdmluZ3MsIGV2ZW4gd2l0aG91dCBMMS4KIAkgKi8KLQlpZiAocHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+c2V0X2wwcykgewotCQlsY3RsID0gaXdsX3BjaWVfbGlua19jdGwocHJpdik7Ci0JCWlmICgobGN0bCAmIFBDSV9DRkdfTElOS19DVFJMX1ZBTF9MMV9FTikgPT0KLQkJCQkJUENJX0NGR19MSU5LX0NUUkxfVkFMX0wxX0VOKSB7Ci0JCQkvKiBMMS1BU1BNIGVuYWJsZWQ7IGRpc2FibGUoISkgTDBTICAqLwotCQkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0dJT19SRUcsCi0JCQkJCUNTUl9HSU9fUkVHX1ZBTF9MMFNfRU5BQkxFRCk7Ci0JCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIkwxIEVuYWJsZWQ7IERpc2FibGluZyBMMFNcbiIpOwotCQl9IGVsc2UgewotCQkJLyogTDEtQVNQTSBkaXNhYmxlZDsgZW5hYmxlKCEpIEwwUyAqLwotCQkJaXdsX2NsZWFyX2JpdChwcml2LCBDU1JfR0lPX1JFRywKLQkJCQkJQ1NSX0dJT19SRUdfVkFMX0wwU19FTkFCTEVEKTsKLQkJCUlXTF9ERUJVR19QT1dFUihwcml2LCAiTDEgRGlzYWJsZWQ7IEVuYWJsaW5nIEwwU1xuIik7Ci0JCX0KKwlsY3RsID0gaXdsX3BjaWVfbGlua19jdGwocHJpdik7CisJaWYgKChsY3RsICYgUENJX0NGR19MSU5LX0NUUkxfVkFMX0wxX0VOKSA9PQorCQkJCVBDSV9DRkdfTElOS19DVFJMX1ZBTF9MMV9FTikgeworCQkvKiBMMS1BU1BNIGVuYWJsZWQ7IGRpc2FibGUoISkgTDBTICAqLworCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfR0lPX1JFRywKKwkJCQlDU1JfR0lPX1JFR19WQUxfTDBTX0VOQUJMRUQpOworCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIkwxIEVuYWJsZWQ7IERpc2FibGluZyBMMFNcbiIpOworCX0gZWxzZSB7CisJCS8qIEwxLUFTUE0gZGlzYWJsZWQ7IGVuYWJsZSghKSBMMFMgKi8KKwkJaXdsX2NsZWFyX2JpdChwcml2LCBDU1JfR0lPX1JFRywKKwkJCQlDU1JfR0lPX1JFR19WQUxfTDBTX0VOQUJMRUQpOworCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIkwxIERpc2FibGVkOyBFbmFibGluZyBMMFNcbiIpOwogCX0KIAogCS8qIENvbmZpZ3VyZSBhbmFsb2cgcGhhc2UtbG9jay1sb29wIGJlZm9yZSBhY3RpdmF0aW5nIHRvIEQwQSAqLwpAQCAtMTA5NCwyNyArMTA5OSwyMSBAQAogCX0KIAogCS8qCi0JICogRW5hYmxlIERNQSBhbmQgQlNNIChpZiB1c2VkKSBjbG9ja3MsIHdhaXQgZm9yIHRoZW0gdG8gc3RhYmlsaXplLgotCSAqIEJTTSAoQm9vc3RyYXAgU3RhdGUgTWFjaGluZSkgaXMgb25seSBpbiAzOTQ1IGFuZCA0OTY1OwotCSAqIGxhdGVyIGRldmljZXMgKGkuZS4gNTAwMCBhbmQgbGF0ZXIpIGhhdmUgbm9uLXZvbGF0aWxlIFNSQU0sCi0JICogYW5kIGRvbid0IG5lZWQgQlNNIHRvIHJlc3RvcmUgZGF0YSBhZnRlciBwb3dlci1zYXZpbmcgc2xlZXAuCisJICogRW5hYmxlIERNQSBjbG9jayBhbmQgd2FpdCBmb3IgaXQgdG8gc3RhYmlsaXplLgogCSAqCiAJICogV3JpdGUgdG8gIkNMS19FTl9SRUciOyAiMSIgYml0cyBlbmFibGUgY2xvY2tzLCB3aGlsZSAiMCIgYml0cwogCSAqIGRvIG5vdCBkaXNhYmxlIGNsb2Nrcy4gIFRoaXMgcHJlc2VydmVzIGFueSBoYXJkd2FyZSBiaXRzIGFscmVhZHkKIAkgKiBzZXQgYnkgZGVmYXVsdCBpbiAiQ0xLX0NUUkxfUkVHIiBhZnRlciByZXNldC4KIAkgKi8KLQlpZiAocHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+dXNlX2JzbSkKLQkJaXdsX3dyaXRlX3BycGgocHJpdiwgQVBNR19DTEtfRU5fUkVHLAotCQkJQVBNR19DTEtfVkFMX0RNQV9DTEtfUlFUIHwgQVBNR19DTEtfVkFMX0JTTV9DTEtfUlFUKTsKLQllbHNlCi0JCWl3bF93cml0ZV9wcnBoKHByaXYsIEFQTUdfQ0xLX0VOX1JFRywKLQkJCUFQTUdfQ0xLX1ZBTF9ETUFfQ0xLX1JRVCk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQVBNR19DTEtfRU5fUkVHLCBBUE1HX0NMS19WQUxfRE1BX0NMS19SUVQpOwogCXVkZWxheSgyMCk7CiAKIAkvKiBEaXNhYmxlIEwxLUFjdGl2ZSAqLwogCWl3bF9zZXRfYml0c19wcnBoKHByaXYsIEFQTUdfUENJREVWX1NUVF9SRUcsCiAJCQkgIEFQTUdfUENJREVWX1NUVF9WQUxfTDFfQUNUX0RJUyk7CiAKKwlzZXRfYml0KFNUQVRVU19ERVZJQ0VfRU5BQkxFRCwgJnByaXYtPnN0YXR1cyk7CisKIG91dDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTQzMCw3ICsxNDI5LDYgQEAKIAogCWl3bF90ZWFyZG93bl9pbnRlcmZhY2UocHJpdiwgdmlmLCBmYWxzZSk7CiAKLQltZW1zZXQocHJpdi0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAogCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwpAQCAtMTc1MCwyMSArMTc0OCwxMyBAQAogCQkgKiBkZXRlY3QgZmFpbHVyZSksIHRoZW4gZndfcmVzdGFydCBtb2R1bGUgcGFyYW1ldGVyCiAJCSAqIG5lZWQgdG8gYmUgY2hlY2sgYmVmb3JlIHBlcmZvcm1pbmcgZmlybXdhcmUgcmVsb2FkCiAJCSAqLwotCQlpZiAoIWV4dGVybmFsICYmICFwcml2LT5jZmctPm1vZF9wYXJhbXMtPnJlc3RhcnRfZncpIHsKKwkJaWYgKCFleHRlcm5hbCAmJiAhaXdsYWduX21vZF9wYXJhbXMucmVzdGFydF9mdykgewogCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNhbmNlbCBmaXJtd2FyZSByZWxvYWQgYmFzZWQgb24gIgogCQkJCSAgICAgICAibW9kdWxlIHBhcmFtZXRlciBzZXR0aW5nXG4iKTsKIAkJCWJyZWFrOwogCQl9CiAJCUlXTF9FUlIocHJpdiwgIk9uIGRlbWFuZCBmaXJtd2FyZSByZWxvYWRcbiIpOwotCQkvKiBTZXQgdGhlIEZXIGVycm9yIGZsYWcgLS0gY2xlYXJlZCBvbiBpd2xfZG93biAqLwotCQlzZXRfYml0KFNUQVRVU19GV19FUlJPUiwgJnByaXYtPnN0YXR1cyk7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKLQkJLyoKLQkJICogS2VlcCB0aGUgcmVzdGFydCBwcm9jZXNzIGZyb20gdHJ5aW5nIHRvIHNlbmQgaG9zdAotCQkgKiBjb21tYW5kcyBieSBjbGVhcmluZyB0aGUgSU5JVCBzdGF0dXMgYml0Ci0JCSAqLwotCQljbGVhcl9iaXQoU1RBVFVTX1JFQURZLCAmcHJpdi0+c3RhdHVzKTsKLQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKKwkJaXdsYWduX2Z3X2Vycm9yKHByaXYsIHRydWUpOwogCQlicmVhazsKIAl9CiAJcmV0dXJuIDA7CkBAIC0xNzc1LDYgKzE3NjUsNyBAQAogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCXN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHggPSBpd2xfcnhvbl9jdHhfZnJvbV92aWYodmlmKTsKKwlzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqYnNzX2N0eCA9ICZwcml2LT5jb250ZXh0c1tJV0xfUlhPTl9DVFhfQlNTXTsKIAlzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqdG1wOwogCXUzMiBpbnRlcmZhY2VfbW9kZXM7CiAJaW50IGVycjsKQEAgLTE3ODMsNiArMTc3NCwxNSBAQAogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCisJaWYgKCFjdHgtPnZpZiB8fCAhaXdsX2lzX3JlYWR5X3JmKHByaXYpKSB7CisJCS8qCisJCSAqIEh1aD8gQnV0IHdhaXQgLi4uIHRoaXMgY2FuIG1heWJlIGhhcHBlbiB3aGVuCisJCSAqIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgYSBmaXJtd2FyZSByZXN0YXJ0IQorCQkgKi8KKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKIAlpbnRlcmZhY2VfbW9kZXMgPSBjdHgtPmludGVyZmFjZV9tb2RlcyB8IGN0eC0+ZXhjbHVzaXZlX2ludGVyZmFjZV9tb2RlczsKIAogCWlmICghKGludGVyZmFjZV9tb2RlcyAmIEJJVChuZXd0eXBlKSkpIHsKQEAgLTE3OTAsNiArMTc5MCwxOSBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwkvKgorCSAqIFJlZnVzZSBhIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBkb25lIGJ5IG1vdmluZyBmcm9tIHRoZSBQQU4KKwkgKiBjb250ZXh0IHRvIHRoZSBCU1MgY29udGV4dCBpbnN0ZWFkLCBpZiB0aGUgQlNTIGNvbnRleHQgaXMKKwkgKiBhdmFpbGFibGUgYW5kIGNhbiBzdXBwb3J0IHRoZSBuZXcgaW50ZXJmYWNlIHR5cGUuCisJICovCisJaWYgKGN0eC0+Y3R4aWQgPT0gSVdMX1JYT05fQ1RYX1BBTiAmJiAhYnNzX2N0eC0+dmlmICYmCisJICAgIChic3NfY3R4LT5pbnRlcmZhY2VfbW9kZXMgJiBCSVQobmV3dHlwZSkgfHwKKwkgICAgIGJzc19jdHgtPmV4Y2x1c2l2ZV9pbnRlcmZhY2VfbW9kZXMgJiBCSVQobmV3dHlwZSkpKSB7CisJCUJVSUxEX0JVR19PTihOVU1fSVdMX1JYT05fQ1RYICE9IDIpOworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKwogCWlmIChjdHgtPmV4Y2x1c2l2ZV9pbnRlcmZhY2VfbW9kZXMgJiBCSVQobmV3dHlwZSkpIHsKIAkJZm9yX2VhY2hfY29udGV4dChwcml2LCB0bXApIHsKIAkJCWlmIChjdHggPT0gdG1wKQpAQCAtMTgxMCw2ICsxODIzLDcgQEAKIAkvKiBzdWNjZXNzICovCiAJaXdsX3RlYXJkb3duX2ludGVyZmFjZShwcml2LCB2aWYsIHRydWUpOwogCXZpZi0+dHlwZSA9IG5ld3R5cGU7CisJdmlmLT5wMnAgPSBuZXdwMnA7CiAJZXJyID0gaXdsX3NldHVwX2ludGVyZmFjZShwcml2LCBjdHgpOwogCVdBUk5fT04oZXJyKTsKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oCmluZGV4IGIzMTZkODMuLjViNWIwY2NlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogQlNEIExJQ0VOU0UKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNzMsNyArNzMsNyBAQAogCiAKICNkZWZpbmUgSVdMV0lGSV9WRVJTSU9OICJpbi10cmVlOiIKLSNkZWZpbmUgRFJWX0NPUFlSSUdIVAkiQ29weXJpZ2h0KGMpIDIwMDMtMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbiIKKyNkZWZpbmUgRFJWX0NPUFlSSUdIVAkiQ29weXJpZ2h0KGMpIDIwMDMtMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbiIKICNkZWZpbmUgRFJWX0FVVEhPUiAgICAgIjxpbHdAbGludXguaW50ZWwuY29tPiIKIAogI2RlZmluZSBJV0xfUENJX0RFVklDRShkZXYsIHN1YmRldiwgY2ZnKSBcCkBAIC05MCw3ICs5MCw2IEBACiAjZGVmaW5lIElXTF9DTUQoeCkgY2FzZSB4OiByZXR1cm4gI3gKIAogc3RydWN0IGl3bF9oY21kX29wcyB7Ci0JaW50ICgqcnhvbl9hc3NvYykoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4KTsKIAlpbnQgKCpjb21taXRfcnhvbikoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4KTsKIAl2b2lkICgqc2V0X3J4b25fY2hhaW4pKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICAgICBzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4KTsKQEAgLTEwMCw3ICs5OSw2IEBACiB9OwogCiBzdHJ1Y3QgaXdsX2hjbWRfdXRpbHNfb3BzIHsKLQl1MTYgKCpnZXRfaGNtZF9zaXplKSh1OCBjbWRfaWQsIHUxNiBsZW4pOwogCXUxNiAoKmJ1aWxkX2FkZHN0YV9oY21kKShjb25zdCBzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgKmNtZCwgdTggKmRhdGEpOwogCXZvaWQgKCpnYWluX2NvbXB1dGF0aW9uKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQl1MzIgKmF2ZXJhZ2Vfbm9pc2UsCkBAIC0xMjIsNDYgKzEyMCwxNCBAQAogCXZvaWQgKCpjb25maWcpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB9OwogCi1zdHJ1Y3QgaXdsX2lzcl9vcHMgewotCWlycXJldHVybl90ICgqaXNyKSAoaW50IGlycSwgdm9pZCAqZGF0YSk7Ci0Jdm9pZCAoKmZyZWUpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci0JaW50ICgqYWxsb2MpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci0JaW50ICgqcmVzZXQpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci0Jdm9pZCAoKmRpc2FibGUpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci19OwotCi1zdHJ1Y3QgaXdsX2RlYnVnZnNfb3BzIHsKLQlzc2l6ZV90ICgqcnhfc3RhdHNfcmVhZCkoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpOwotCXNzaXplX3QgKCp0eF9zdGF0c19yZWFkKShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAotCQkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcyk7Ci0Jc3NpemVfdCAoKmdlbmVyYWxfc3RhdHNfcmVhZCkoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcyk7Ci0Jc3NpemVfdCAoKmJ0X3N0YXRzX3JlYWQpKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCi0JCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKTsKLQlzc2l6ZV90ICgqcmVwbHlfdHhfZXJyb3IpKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCi0JCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKTsKLX07Ci0KIHN0cnVjdCBpd2xfdGVtcF9vcHMgewogCXZvaWQgKCp0ZW1wZXJhdHVyZSkoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIH07CiAKLXN0cnVjdCBpd2xfdHRfb3BzIHsKLQlib29sICgqbG93ZXJfcG93ZXJfZGV0ZWN0aW9uKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotCXU4ICgqdHRfcG93ZXJfbW9kZSkoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKLQlib29sICgqY3Rfa2lsbF9jaGVjaykoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKLX07Ci0KIHN0cnVjdCBpd2xfbGliX29wcyB7CiAJLyogc2V0IGh3IGRlcGVuZGVudCBwYXJhbWV0ZXJzICovCiAJaW50ICgqc2V0X2h3X3BhcmFtcykoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIAkvKiBIYW5kbGluZyBUWCAqLwotCXZvaWQgKCp0eHFfdXBkYXRlX2J5dGVfY250X3RibCkoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCQlzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEsCi0JCQkJCXUxNiBieXRlX2NudCk7Ci0Jdm9pZCAoKnR4cV9pbnZhbF9ieXRlX2NudF90YmwpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICAgICAgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKTsKIAl2b2lkICgqdHhxX3NldF9zY2hlZCkoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgbWFzayk7CiAJaW50ICgqdHhxX2F0dGFjaF9idWZfdG9fdGZkKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJICAgICBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEsCkBAIC0xNzEsMzAgKzEzNywxNCBAQAogCQkJICAgICBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpOwogCWludCAoKnR4cV9pbml0KShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQlzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpOwotCS8qIGFnZ3JlZ2F0aW9ucyAqLwotCWludCAoKnR4cV9hZ2dfZW5hYmxlKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCB0eHFfaWQsIGludCB0eF9maWZvLAotCQkJICAgICAgaW50IHN0YV9pZCwgaW50IHRpZCwgdTE2IHNzbl9pZHgpOwotCWludCAoKnR4cV9hZ2dfZGlzYWJsZSkoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MTYgdHhxX2lkLCB1MTYgc3NuX2lkeCwKLQkJCSAgICAgICB1OCB0eF9maWZvKTsKIAkvKiBzZXR1cCBSeCBoYW5kbGVyICovCiAJdm9pZCAoKnJ4X2hhbmRsZXJfc2V0dXApKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAJLyogc2V0dXAgZGVmZXJyZWQgd29yayAqLwogCXZvaWQgKCpzZXR1cF9kZWZlcnJlZF93b3JrKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCS8qIGNhbmNlbCBkZWZlcnJlZCB3b3JrICovCiAJdm9pZCAoKmNhbmNlbF9kZWZlcnJlZF93b3JrKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotCS8qIGFsaXZlIG5vdGlmaWNhdGlvbiBhZnRlciBpbml0IHVDb2RlIGxvYWQgKi8KLQl2b2lkICgqaW5pdF9hbGl2ZV9zdGFydCkoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKLQkvKiBhbGl2ZSBub3RpZmljYXRpb24gKi8KLQlpbnQgKCphbGl2ZV9ub3RpZnkpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAJLyogY2hlY2sgdmFsaWRpdHkgb2YgcnRjIGRhdGEgYWRkcmVzcyAqLwogCWludCAoKmlzX3ZhbGlkX3J0Y19kYXRhX2FkZHIpKHUzMiBhZGRyKTsKLQkvKiAxc3QgdWNvZGUgbG9hZCAqLwotCWludCAoKmxvYWRfdWNvZGUpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci0JaW50ICgqZHVtcF9uaWNfZXZlbnRfbG9nKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICBib29sIGZ1bGxfbG9nLCBjaGFyICoqYnVmLCBib29sIGRpc3BsYXkpOwotCXZvaWQgKCpkdW1wX25pY19lcnJvcl9sb2cpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci0Jdm9pZCAoKmR1bXBfY3NyKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotCWludCAoKmR1bXBfZmgpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY2hhciAqKmJ1ZiwgYm9vbCBkaXNwbGF5KTsKIAlpbnQgKCpzZXRfY2hhbm5lbF9zd2l0Y2gpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9zd2l0Y2ggKmNoX3N3aXRjaCk7CiAJLyogcG93ZXIgbWFuYWdlbWVudCAqLwpAQCAtMjA0LDkgKzE1NCw2IEBACiAJaW50ICgqc2VuZF90eF9wb3dlcikgKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAJdm9pZCAoKnVwZGF0ZV9jaGFpbl9mbGFncykoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIAotCS8qIGlzciAqLwotCXN0cnVjdCBpd2xfaXNyX29wcyBpc3Jfb3BzOwotCiAJLyogZWVwcm9tIG9wZXJhdGlvbnMgKGFzIGRlZmluZWQgaW4gaXdsLWVlcHJvbS5oKSAqLwogCXN0cnVjdCBpd2xfZWVwcm9tX29wcyBlZXByb21fb3BzOwogCkBAIC0yMTYsMTQgKzE2Myw2IEBACiAJaW50ICgqdHhmaWZvX2ZsdXNoKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiBmbHVzaF9jb250cm9sKTsKIAl2b2lkICgqZGV2X3R4Zmlmb19mbHVzaCkoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MTYgZmx1c2hfY29udHJvbCk7CiAKLQlzdHJ1Y3QgaXdsX2RlYnVnZnNfb3BzIGRlYnVnZnNfb3BzOwotCi0JLyogdGhlcm1hbCB0aHJvdHRsaW5nICovCi0Jc3RydWN0IGl3bF90dF9vcHMgdHRfb3BzOwotfTsKLQotc3RydWN0IGl3bF9sZWRfb3BzIHsKLQlpbnQgKCpjbWQpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9sZWRfY21kICpsZWRfY21kKTsKIH07CiAKIC8qIE5JQyBzcGVjaWZpYyBvcHMgKi8KQEAgLTIzMSwyOCArMTcwLDE1IEBACiAJdm9pZCAoKmFkZGl0aW9uYWxfbmljX2NvbmZpZykoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIH07CiAKLXN0cnVjdCBpd2xfbGVnYWN5X29wcyB7Ci0Jdm9pZCAoKnBvc3RfYXNzb2NpYXRlKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotCXZvaWQgKCpjb25maWdfYXApKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci0JLyogc3RhdGlvbiBtYW5hZ2VtZW50ICovCi0JaW50ICgqdXBkYXRlX2JjYXN0X3N0YXRpb25zKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotCWludCAoKm1hbmFnZV9pYnNzX3N0YXRpb24pKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBib29sIGFkZCk7Ci19OwotCiBzdHJ1Y3QgaXdsX29wcyB7CiAJY29uc3Qgc3RydWN0IGl3bF9saWJfb3BzICpsaWI7CiAJY29uc3Qgc3RydWN0IGl3bF9oY21kX29wcyAqaGNtZDsKIAljb25zdCBzdHJ1Y3QgaXdsX2hjbWRfdXRpbHNfb3BzICp1dGlsczsKLQljb25zdCBzdHJ1Y3QgaXdsX2xlZF9vcHMgKmxlZDsKIAljb25zdCBzdHJ1Y3QgaXdsX25pY19vcHMgKm5pYzsKLQljb25zdCBzdHJ1Y3QgaXdsX2xlZ2FjeV9vcHMgKmxlZ2FjeTsKLQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyAqaWVlZTgwMjExX29wczsKIH07CiAKIHN0cnVjdCBpd2xfbW9kX3BhcmFtcyB7CiAJaW50IHN3X2NyeXB0bzsJCS8qIGRlZjogMCA9IHVzaW5nIGhhcmR3YXJlIGVuY3J5cHRpb24gKi8KLQlpbnQgZGlzYWJsZV9od19zY2FuOwkvKiBkZWY6IDAgPSB1c2UgaC93IHNjYW4gKi8KIAlpbnQgbnVtX29mX3F1ZXVlczsJLyogZGVmOiBIVyBkZXBlbmRlbnQgKi8KIAlpbnQgZGlzYWJsZV8xMW47CS8qIGRlZjogMCA9IDExbiBjYXBhYmlsaXRpZXMgZW5hYmxlZCAqLwogCWludCBhbXNkdV9zaXplXzhLOwkvKiBkZWY6IDEgPSBlbmFibGUgOEsgYW1zZHUgc2l6ZSAqLwpAQCAtMjc4LDE2ICsyMDQsNyBAQAogICogQHdkX3RpbWVvdXQ6IFRYIHF1ZXVlcyB3YXRjaGRvZyB0aW1lb3V0CiAgKiBAdGVtcGVyYXR1cmVfa2VsdmluOiB0ZW1wZXJhdHVyZSByZXBvcnQgYnkgdUNvZGUgaW4ga2VsdmluCiAgKiBAbWF4X2V2ZW50X2xvZ19zaXplOiBzaXplIG9mIGV2ZW50IGxvZyBidWZmZXIgc2l6ZSBmb3IgdWNvZGUgZXZlbnQgbG9nZ2luZwotICogQHR4X3Bvd2VyX2J5X2RyaXZlcjogdHggcG93ZXIgY2FsaWJyYXRpb24gcGVyZm9ybWVkIGJ5IGRyaXZlcgotICoJaW5zdGVhZCBvZiB1Q29kZQotICogQHVjb2RlX3RyYWNpbmc6IHN1cHBvcnQgdWNvZGUgY29udGludW91cyB0cmFjaW5nCi0gKiBAc2Vuc2l0aXZpdHlfY2FsaWJfYnlfZHJpdmVyOiBkcml2ZXIgaGFzIHRoZSBjYXBhYmlsaXR5IHRvIHBlcmZvcm0KLSAqCXNlbnNpdGl2aXR5IGNhbGlicmF0aW9uIG9wZXJhdGlvbgotICogQGNoYWluX25vaXNlX2NhbGliX2J5X2RyaXZlcjogZHJpdmVyIGhhcyB0aGUgY2FwYWJpbGl0eSB0byBwZXJmb3JtCi0gKgljaGFpbiBub2lzZSBjYWxpYnJhdGlvbiBvcGVyYXRpb24KICAqIEBzaGFkb3dfcmVnX2VuYWJsZTogSFcgc2hhZGhvdyByZWdpc3RlciBiaXQKLSAqIEBub19hZ2dfZnJhbWVjbnRfaW5mbzogdUNvZGUgZG8gbm90IHByb3ZpZGUgYWdncmVnYXRpb24gZnJhbWUgY291bnQKLSAqCWluZm9ybWF0aW9uCiAgKi8KIHN0cnVjdCBpd2xfYmFzZV9wYXJhbXMgewogCWludCBlZXByb21fc2l6ZTsKQEAgLTI5NSwxNCArMjEyLDEwIEBACiAJaW50IG51bV9vZl9hbXBkdV9xdWV1ZXM7LyogZGVmOiBIVyBkZXBlbmRlbnQgKi8KIAkvKiBmb3IgaXdsX2FwbV9pbml0KCkgKi8KIAl1MzIgcGxsX2NmZ192YWw7Ci0JYm9vbCBzZXRfbDBzOwotCWJvb2wgdXNlX2JzbTsKIAotCWJvb2wgdXNlX2lzcl9sZWdhY3k7CiAJY29uc3QgdTE2IG1heF9sbF9pdGVtczsKIAljb25zdCBib29sIHNoYWRvd19yYW1fc3VwcG9ydDsKIAl1MTYgbGVkX2NvbXBlbnNhdGlvbjsKLQljb25zdCBib29sIGJyb2tlbl9wb3dlcnNhdmU7CiAJaW50IGNoYWluX25vaXNlX251bV9iZWFjb25zOwogCWJvb2wgYWR2X3RoZXJtYWxfdGhyb3R0bGU7CiAJYm9vbCBzdXBwb3J0X2N0X2tpbGxfZXhpdDsKQEAgLTMxMiwxOCArMjI1LDEyIEBACiAJdW5zaWduZWQgaW50IHdkX3RpbWVvdXQ7CiAJYm9vbCB0ZW1wZXJhdHVyZV9rZWx2aW47CiAJdTMyIG1heF9ldmVudF9sb2dfc2l6ZTsKLQljb25zdCBib29sIHR4X3Bvd2VyX2J5X2RyaXZlcjsKLQljb25zdCBib29sIHVjb2RlX3RyYWNpbmc7Ci0JY29uc3QgYm9vbCBzZW5zaXRpdml0eV9jYWxpYl9ieV9kcml2ZXI7Ci0JY29uc3QgYm9vbCBjaGFpbl9ub2lzZV9jYWxpYl9ieV9kcml2ZXI7CiAJY29uc3QgYm9vbCBzaGFkb3dfcmVnX2VuYWJsZTsKLQljb25zdCBib29sIG5vX2FnZ19mcmFtZWNudF9pbmZvOwogfTsKIC8qCiAgKiBAYWR2YW5jZWRfYnRfY29leGlzdDogc3VwcG9ydCBhZHZhbmNlZCBidCBjb2V4aXN0CiAgKiBAYnRfaW5pdF90cmFmZmljX2xvYWQ6IHNwZWNpZnkgaW5pdGlhbCBidCB0cmFmZmljIGxvYWQKICAqIEBidF9wcmlvX2Jvb3N0OiBkZWZhdWx0IGJ0IHByaW9yaXR5IGJvb3N0IHZhbHVlCi0gKiBAYnRfc3RhdGlzdGljczogdXNlIEJUIHZlcnNpb24gb2Ygc3RhdGlzdGljcyBub3RpZmljYXRpb24KICAqIEBhZ2dfdGltZV9saW1pdDogbWF4aW11bSBudW1iZXIgb2YgdVNlYyBpbiBhZ2dyZWdhdGlvbgogICogQGFtcGR1X2ZhY3RvcjogTWF4aW11bSBBLU1QRFUgbGVuZ3RoIGZhY3RvcgogICogQGFtcGR1X2RlbnNpdHk6IE1pbmltdW0gQS1NUERVIHNwYWNpbmcKQEAgLTMzMyw3ICsyNDAsNiBAQAogCWJvb2wgYWR2YW5jZWRfYnRfY29leGlzdDsKIAl1OCBidF9pbml0X3RyYWZmaWNfbG9hZDsKIAl1OCBidF9wcmlvX2Jvb3N0OwotCWNvbnN0IGJvb2wgYnRfc3RhdGlzdGljczsKIAl1MTYgYWdnX3RpbWVfbGltaXQ7CiAJdTggYW1wZHVfZmFjdG9yOwogCXU4IGFtcGR1X2RlbnNpdHk7CkBAIC0zNjQsNiArMjcwLDcgQEAKICAqIEByeF93aXRoX3Npc29fZGl2ZXJzaXR5OiAxeDEgZGV2aWNlIHdpdGggcnggYW50ZW5uYSBkaXZlcnNpdHkKICAqIEBpbnRlcm5hbF93aW1heF9jb2V4OiBpbnRlcm5hbCB3aWZpL3dpbWF4IGNvbWJvIGRldmljZQogICogQGlxX2ludmVydDogSS9RIGludmVyc2lvbgorICogQGRpc2FibGVfb3RwX3JlZnJlc2g6IGRpc2FibGUgT1RQIHJlZnJlc2ggY3VycmVudCBsaW1pdAogICoKICAqIFdlIGVuYWJsZSB0aGUgZHJpdmVyIHRvIGJlIGJhY2t3YXJkIGNvbXBhdGlibGUgd3J0IEFQSSB2ZXJzaW9uLiBUaGUKICAqIGRyaXZlciBzcGVjaWZpZXMgd2hpY2ggQVBJcyBpdCBzdXBwb3J0cyAod2l0aCBAdWNvZGVfYXBpX21heCBiZWluZyB0aGUKQEAgLTM5OCw4ICszMDUsNiBAQAogCXUxNiAgZWVwcm9tX3ZlcjsKIAl1MTYgIGVlcHJvbV9jYWxpYl92ZXI7CiAJY29uc3Qgc3RydWN0IGl3bF9vcHMgKm9wczsKLQkvKiBtb2R1bGUgYmFzZWQgcGFyYW1ldGVycyB3aGljaCBjYW4gYmUgc2V0IGZyb20gbW9kcHJvYmUgY21kICovCi0JY29uc3Qgc3RydWN0IGl3bF9tb2RfcGFyYW1zICptb2RfcGFyYW1zOwogCS8qIHBhcmFtcyBub3QgbGlrZWx5IHRvIGNoYW5nZSB3aXRoaW4gYSBkZXZpY2UgZmFtaWx5ICovCiAJc3RydWN0IGl3bF9iYXNlX3BhcmFtcyAqYmFzZV9wYXJhbXM7CiAJLyogcGFyYW1zIGxpa2VseSB0byBjaGFuZ2Ugd2l0aGluIGEgZGV2aWNlIGZhbWlseSAqLwpAQCAtNDE0LDEzICszMTksMTMgQEAKIAljb25zdCBib29sIHJ4X3dpdGhfc2lzb19kaXZlcnNpdHk7CiAJY29uc3QgYm9vbCBpbnRlcm5hbF93aW1heF9jb2V4OwogCWNvbnN0IGJvb2wgaXFfaW52ZXJ0OworCWNvbnN0IGJvb2wgZGlzYWJsZV9vdHBfcmVmcmVzaDsKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgTCBpIGIgICAgICAgICAgICAgICAgICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0cnVjdCBpZWVlODAyMTFfaHcgKml3bF9hbGxvY19hbGwoc3RydWN0IGl3bF9jZmcgKmNmZyk7CiBpbnQgaXdsX21hY19jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgcXVldWUsCiAJCSAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW1zKTsKIGludCBpd2xfbWFjX3R4X2xhc3RfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKQEAgLTYyNSw2ICs1MzAsOCBAQAogdm9pZCBpd2xfZHVtcF9uaWNfZXJyb3JfbG9nKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX2R1bXBfbmljX2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICBib29sIGZ1bGxfbG9nLCBjaGFyICoqYnVmLCBib29sIGRpc3BsYXkpOwordm9pZCBpd2xfZHVtcF9jc3Ioc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2ludCBpd2xfZHVtcF9maChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNoYXIgKipidWYsIGJvb2wgZGlzcGxheSk7CiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIHZvaWQgaXdsX3ByaW50X3J4X2NvbmZpZ19jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJICAgICBzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4KTsKQEAgLTY2Miw2ICs1NjksNyBAQAogI2RlZmluZSBTVEFUVVNfU0NBTl9IVwkJMTUKICNkZWZpbmUgU1RBVFVTX1BPV0VSX1BNSQkxNgogI2RlZmluZSBTVEFUVVNfRldfRVJST1IJCTE3CisjZGVmaW5lIFNUQVRVU19ERVZJQ0VfRU5BQkxFRAkxOAogCiAKIHN0YXRpYyBpbmxpbmUgaW50IGl3bF9pc19yZWFkeShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCkBAIC03MTQsMTEgKzYyMiw2IEBACiBpbnQgaXdsX2FwbV9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKIGludCBpd2xfc2VuZF9yeG9uX3RpbWluZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHgpOwotc3RhdGljIGlubGluZSBpbnQgaXdsX3NlbmRfcnhvbl9hc3NvYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICAgICAgc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eCkKLXsKLQlyZXR1cm4gcHJpdi0+Y2ZnLT5vcHMtPmhjbWQtPnJ4b25fYXNzb2MocHJpdiwgY3R4KTsKLX0KIHN0YXRpYyBpbmxpbmUgaW50IGl3bGNvcmVfY29tbWl0X3J4b24oc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCSAgICAgIHN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHgpCiB7CkBAIC03MzYsMTIgKzYzOSwxMCBAQAogCSAgICAgICBwcml2LT5jZmctPmJ0X3BhcmFtcy0+YWR2YW5jZWRfYnRfY29leGlzdDsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGl3bF9idF9zdGF0aXN0aWNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQlyZXR1cm4gcHJpdi0+Y2ZnLT5idF9wYXJhbXMgJiYgcHJpdi0+Y2ZnLT5idF9wYXJhbXMtPmJ0X3N0YXRpc3RpY3M7Ci19Ci0KIGV4dGVybiBib29sIGJ0X2NvZXhfYWN0aXZlOwogZXh0ZXJuIGJvb2wgYnRfc2lzb19tb2RlOwogCisKK3ZvaWQgaXdsYWduX2Z3X2Vycm9yKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgYm9vbCBvbmRlbWFuZCk7CisKICNlbmRpZiAvKiBfX2l3bF9jb3JlX2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY3NyLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jc3IuaAppbmRleCBmNTJiYzA0Li41YWI5MGJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jc3IuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jc3IuaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE1NSwxOCArMTU1LDEwIEBACiAjZGVmaW5lIENTUl9EQkdfTElOS19QV1JfTUdNVF9SRUcJKENTUl9CQVNFKzB4MjUwKQogCiAvKiBCaXRzIGZvciBDU1JfSFdfSUZfQ09ORklHX1JFRyAqLwotI2RlZmluZSBDU1I0OV9IV19JRl9DT05GSUdfUkVHX0JJVF80OTY1X1IJKDB4MDAwMDAwMTApCiAjZGVmaW5lIENTUl9IV19JRl9DT05GSUdfUkVHX01TS19CT0FSRF9WRVIJKDB4MDAwMDBDMDApCiAjZGVmaW5lIENTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9NQUNfU0kgCSgweDAwMDAwMTAwKQogI2RlZmluZSBDU1JfSFdfSUZfQ09ORklHX1JFR19CSVRfUkFESU9fU0kJKDB4MDAwMDAyMDApCiAKLSNkZWZpbmUgQ1NSMzlfSFdfSUZfQ09ORklHX1JFR19CSVRfMzk0NV9NQiAgICAgICAgICgweDAwMDAwMTAwKQotI2RlZmluZSBDU1IzOV9IV19JRl9DT05GSUdfUkVHX0JJVF8zOTQ1X01NICAgICAgICAgKDB4MDAwMDAyMDApCi0jZGVmaW5lIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUX1NLVV9NUkMgICAgICAgICAgICAoMHgwMDAwMDQwMCkKLSNkZWZpbmUgQ1NSMzlfSFdfSUZfQ09ORklHX1JFR19CSVRfQk9BUkRfVFlQRSAgICAgICAgICgweDAwMDAwODAwKQotI2RlZmluZSBDU1IzOV9IV19JRl9DT05GSUdfUkVHX0JJVFNfU0lMSUNPTl9UWVBFX0EgICAgKDB4MDAwMDAwMDApCi0jZGVmaW5lIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUU19TSUxJQ09OX1RZUEVfQiAgICAoMHgwMDAwMTAwMCkKLQogI2RlZmluZSBDU1JfSFdfSUZfQ09ORklHX1JFR19CSVRfSEFQX1dBS0VfTDFBCSgweDAwMDgwMDAwKQogI2RlZmluZSBDU1JfSFdfSUZfQ09ORklHX1JFR19CSVRfRUVQUk9NX09XTl9TRU0JKDB4MDAyMDAwMDApCiAjZGVmaW5lIENTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9OSUNfUkVBRFkJKDB4MDA0MDAwMDApIC8qIFBDSV9PV05fU0VNICovCkBAIC0xODYsNyArMTc4LDcgQEAKICNkZWZpbmUgQ1NSX0lOVF9CSVRfU1dfRVJSICAgICAgICgxIDw8IDI1KSAvKiB1Q29kZSBlcnJvciAqLwogI2RlZmluZSBDU1JfSU5UX0JJVF9SRl9LSUxMICAgICAgKDEgPDwgNykgIC8qIEhXIFJGS0lMTCBzd2l0Y2ggR1BfQ05UUkxbMjddIHRvZ2dsZWQgKi8KICNkZWZpbmUgQ1NSX0lOVF9CSVRfQ1RfS0lMTCAgICAgICgxIDw8IDYpICAvKiBDcml0aWNhbCB0ZW1wIChjaGlwIHRvbyBob3QpIHJma2lsbCAqLwotI2RlZmluZSBDU1JfSU5UX0JJVF9TV19SWCAgICAgICAgKDEgPDwgMykgIC8qIFJ4LCBjb21tYW5kIHJlc3BvbnNlcywgMzk0NSAqLworI2RlZmluZSBDU1JfSU5UX0JJVF9TV19SWCAgICAgICAgKDEgPDwgMykgIC8qIFJ4LCBjb21tYW5kIHJlc3BvbnNlcyAqLwogI2RlZmluZSBDU1JfSU5UX0JJVF9XQUtFVVAgICAgICAgKDEgPDwgMSkgIC8qIE5JQyBjb250cm9sbGVyIHdha2luZyB1cCAocHdyIG1nbXQpICovCiAjZGVmaW5lIENTUl9JTlRfQklUX0FMSVZFICAgICAgICAoMSA8PCAwKSAgLyogdUNvZGUgaW50ZXJydXB0cyBvbmNlIGl0IGluaXRpYWxpemVzICovCiAKQEAgLTIwMiwyOSArMTk0LDE3IEBACiAvKiBpbnRlcnJ1cHQgZmxhZ3MgaW4gRkggKGZsb3cgaGFuZGxlcikgKFBDSSBidXNtYXN0ZXIgRE1BKSAqLwogI2RlZmluZSBDU1JfRkhfSU5UX0JJVF9FUlIgICAgICAgKDEgPDwgMzEpIC8qIEVycm9yICovCiAjZGVmaW5lIENTUl9GSF9JTlRfQklUX0hJX1BSSU9SICAoMSA8PCAzMCkgLyogSGlnaCBwcmlvcml0eSBSeCwgYnlwYXNzIGNvYWxlc2NpbmcgKi8KLSNkZWZpbmUgQ1NSMzlfRkhfSU5UX0JJVF9SWF9DSE5MMiAgKDEgPDwgMTgpIC8qIFJ4IGNoYW5uZWwgMiAoMzk0NSBvbmx5KSAqLwogI2RlZmluZSBDU1JfRkhfSU5UX0JJVF9SWF9DSE5MMSAgKDEgPDwgMTcpIC8qIFJ4IGNoYW5uZWwgMSAqLwogI2RlZmluZSBDU1JfRkhfSU5UX0JJVF9SWF9DSE5MMCAgKDEgPDwgMTYpIC8qIFJ4IGNoYW5uZWwgMCAqLwotI2RlZmluZSBDU1IzOV9GSF9JTlRfQklUX1RYX0NITkw2ICAoMSA8PCA2KSAgLyogVHggY2hhbm5lbCA2ICgzOTQ1IG9ubHkpICovCiAjZGVmaW5lIENTUl9GSF9JTlRfQklUX1RYX0NITkwxICAoMSA8PCAxKSAgLyogVHggY2hhbm5lbCAxICovCiAjZGVmaW5lIENTUl9GSF9JTlRfQklUX1RYX0NITkwwICAoMSA8PCAwKSAgLyogVHggY2hhbm5lbCAwICovCiAKLSNkZWZpbmUgQ1NSMzlfRkhfSU5UX1JYX01BU0sJKENTUl9GSF9JTlRfQklUX0hJX1BSSU9SIHwgXAotCQkJCSBDU1IzOV9GSF9JTlRfQklUX1JYX0NITkwyIHwgXAotCQkJCSBDU1JfRkhfSU5UX0JJVF9SWF9DSE5MMSB8IFwKLQkJCQkgQ1NSX0ZIX0lOVF9CSVRfUlhfQ0hOTDApCisjZGVmaW5lIENTUl9GSF9JTlRfUlhfTUFTSwkoQ1NSX0ZIX0lOVF9CSVRfSElfUFJJT1IgfCBcCisJCQkJQ1NSX0ZIX0lOVF9CSVRfUlhfQ0hOTDEgfCBcCisJCQkJQ1NSX0ZIX0lOVF9CSVRfUlhfQ0hOTDApCiAKLQotI2RlZmluZSBDU1IzOV9GSF9JTlRfVFhfTUFTSwkoQ1NSMzlfRkhfSU5UX0JJVF9UWF9DSE5MNiB8IFwKLQkJCQkgQ1NSX0ZIX0lOVF9CSVRfVFhfQ0hOTDEgfCBcCi0JCQkJIENTUl9GSF9JTlRfQklUX1RYX0NITkwwKQotCi0jZGVmaW5lIENTUjQ5X0ZIX0lOVF9SWF9NQVNLCShDU1JfRkhfSU5UX0JJVF9ISV9QUklPUiB8IFwKLQkJCQkgQ1NSX0ZIX0lOVF9CSVRfUlhfQ0hOTDEgfCBcCi0JCQkJIENTUl9GSF9JTlRfQklUX1JYX0NITkwwKQotCi0jZGVmaW5lIENTUjQ5X0ZIX0lOVF9UWF9NQVNLCShDU1JfRkhfSU5UX0JJVF9UWF9DSE5MMSB8IFwKLQkJCQkgQ1NSX0ZIX0lOVF9CSVRfVFhfQ0hOTDApCisjZGVmaW5lIENTUl9GSF9JTlRfVFhfTUFTSwkoQ1NSX0ZIX0lOVF9CSVRfVFhfQ0hOTDEgfCBcCisJCQkJQ1NSX0ZIX0lOVF9CSVRfVFhfQ0hOTDApCiAKIC8qIEdQSU8gKi8KICNkZWZpbmUgQ1NSX0dQSU9fSU5fQklUX0FVWF9QT1dFUiAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDIwMCkKQEAgLTI2OCw3ICsyNDgsNyBAQAogICogICAgICAgICBJbmRpY2F0ZXMgTUFDICh1Y29kZSBwcm9jZXNzb3IsIGV0Yy4pIGlzIHBvd2VyZWQgdXAgYW5kIGNhbiBydW4uCiAgKiAgICAgICAgIEludGVybmFsIHJlc291cmNlcyBhcmUgYWNjZXNzaWJsZS4KICAqICAgICAgICAgTk9URTogIFRoaXMgZG9lcyBub3QgaW5kaWNhdGUgdGhhdCB0aGUgcHJvY2Vzc29yIGlzIGFjdHVhbGx5IHJ1bm5pbmcuCi0gKiAgICAgICAgIE5PVEU6ICBUaGlzIGRvZXMgbm90IGluZGljYXRlIHRoYXQgNDk2NSBvciAzOTQ1IGhhcyBjb21wbGV0ZWQKKyAqICAgICAgICAgTk9URTogIFRoaXMgZG9lcyBub3QgaW5kaWNhdGUgdGhhdCBkZXZpY2UgaGFzIGNvbXBsZXRlZAogICogICAgICAgICAgICAgICAgaW5pdCBvciBwb3N0LXBvd2VyLWRvd24gcmVzdG9yZSBvZiBpbnRlcm5hbCBTUkFNIG1lbW9yeS4KICAqICAgICAgICAgICAgICAgIFVzZSBDU1JfVUNPREVfRFJWX0dQMV9CSVRfTUFDX1NMRUVQIGFzIGluZGljYXRpb24gdGhhdAogICogICAgICAgICAgICAgICAgU1JBTSBpcyByZXN0b3JlZCBhbmQgdUNvZGUgaXMgaW4gbm9ybWFsIG9wZXJhdGlvbiBtb2RlLgpAQCAtMjkxLDggKzI3MSw2IEBACiAKIC8qIEhXIFJFViAqLwogI2RlZmluZSBDU1JfSFdfUkVWX1RZUEVfTVNLICAgICAgICAgICAgKDB4MDAwMDFGMCkKLSNkZWZpbmUgQ1NSX0hXX1JFVl9UWVBFXzM5NDUgICAgICAgICAgICgweDAwMDAwRDApCi0jZGVmaW5lIENTUl9IV19SRVZfVFlQRV80OTY1ICAgICAgICAgICAoMHgwMDAwMDAwKQogI2RlZmluZSBDU1JfSFdfUkVWX1RZUEVfNTMwMCAgICAgICAgICAgKDB4MDAwMDAyMCkKICNkZWZpbmUgQ1NSX0hXX1JFVl9UWVBFXzUzNTAgICAgICAgICAgICgweDAwMDAwMzApCiAjZGVmaW5lIENTUl9IV19SRVZfVFlQRV81MTAwICAgICAgICAgICAoMHgwMDAwMDUwKQpAQCAtMzYzLDcgKzM0MSw3IEBACiAgKiAgICAgMDogIE1BQ19TTEVFUAogICogICAgICAgICB1Q29kZSBzZXRzIHRoaXMgd2hlbiBwcmVwYXJpbmcgYSBwb3dlci1zYXZpbmcgcG93ZXItZG93bi4KICAqICAgICAgICAgdUNvZGUgcmVzZXRzIHRoaXMgd2hlbiBwb3dlci11cCBpcyBjb21wbGV0ZSBhbmQgU1JBTSBpcyBzYW5lLgotICogICAgICAgICBOT1RFOiAgMzk0NS80OTY1IHNhdmVzIGludGVybmFsIFNSQU0gZGF0YSB0byBob3N0IHdoZW4gcG93ZXJpbmcgZG93biwKKyAqICAgICAgICAgTk9URTogIGRldmljZSBzYXZlcyBpbnRlcm5hbCBTUkFNIGRhdGEgdG8gaG9zdCB3aGVuIHBvd2VyaW5nIGRvd24sCiAgKiAgICAgICAgICAgICAgICBhbmQgbXVzdCByZXN0b3JlIHRoaXMgZGF0YSBhZnRlciBwb3dlcmluZyBiYWNrIHVwLgogICogICAgICAgICAgICAgICAgTUFDX1NMRUVQIGlzIHRoZSBiZXN0IGluZGljYXRpb24gdGhhdCByZXN0b3JlIGlzIGNvbXBsZXRlLgogICogICAgICAgICAgICAgICAgTGF0ZXIgZGV2aWNlcyAoNXh4eC82eHh4LzF4eHgpIHVzZSBub24tdm9sYXRpbGUgU1JBTSwgYW5kCkBAIC0zOTQsNyArMzcyLDYgQEAKICNkZWZpbmUgQ1NSX0xFRF9SRUdfVFJVTl9PRkYgKDB4MzgpCiAKIC8qIEFOQV9QTEwgKi8KLSNkZWZpbmUgQ1NSMzlfQU5BX1BMTF9DRkdfVkFMICAgICAgICAoMHgwMTAwMDAwMCkKICNkZWZpbmUgQ1NSNTBfQU5BX1BMTF9DRkdfVkFMICAgICAgICAoMHgwMDg4MDMwMCkKIAogLyogSFBFVCBNRU0gZGVidWcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Zy5oCmluZGV4IGViZGVhM2IuLjI4MjRjY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWcuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdC4KICAqCkBAIC0xNDYsNyArMTQ2LDYgQEAKICNkZWZpbmUgSVdMX0RMX1JYCQkoMSA8PCAyNCkKICNkZWZpbmUgSVdMX0RMX0lTUgkJKDEgPDwgMjUpCiAjZGVmaW5lIElXTF9ETF9IVAkJKDEgPDwgMjYpCi0jZGVmaW5lIElXTF9ETF9JTwkJKDEgPDwgMjcpCiAvKiAweEYwMDAwMDAwIC0gMHgxMDAwMDAwMCAqLwogI2RlZmluZSBJV0xfRExfMTFICQkoMSA8PCAyOCkKICNkZWZpbmUgSVdMX0RMX1NUQVRTCQkoMSA8PCAyOSkKQEAgLTE3NCw3ICsxNzMsNiBAQAogCQlJV0xfREVCVUdfTElNSVQocCwgSVdMX0RMX0RST1AsIGYsICMjIGEpCiAjZGVmaW5lIElXTF9ERUJVR19BUChwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX0FQLCBmLCAjIyBhKQogI2RlZmluZSBJV0xfREVCVUdfVFhQT1dFUihwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX1RYUE9XRVIsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19JTyhwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX0lPLCBmLCAjIyBhKQogI2RlZmluZSBJV0xfREVCVUdfUkFURShwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX1JBVEUsIGYsICMjIGEpCiAjZGVmaW5lIElXTF9ERUJVR19SQVRFX0xJTUlUKHAsIGYsIGEuLi4pCVwKIAkJSVdMX0RFQlVHX0xJTUlUKHAsIElXTF9ETF9SQVRFLCBmLCAjIyBhKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWdmcy5jCmluZGV4IDg4NDI0MTEuLjBlNmEwNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnZnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Z2ZzLmMKQEAgLTIsNyArMiw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJpd2wtZGVidWcuaCIKICNpbmNsdWRlICJpd2wtY29yZS5oIgogI2luY2x1ZGUgIml3bC1pby5oIgorI2luY2x1ZGUgIml3bC1hZ24uaCIKIAogLyogY3JlYXRlIGFuZCByZW1vdmUgb2YgZmlsZXMgKi8KICNkZWZpbmUgREVCVUdGU19BRERfRklMRShuYW1lLCBwYXJlbnQsIG1vZGUpIGRvIHsJCQlcCkBAIC0yMjYsMTAgKzIyNywxMCBAQAogCS8qIGRlZmF1bHQgaXMgdG8gZHVtcCB0aGUgZW50aXJlIGRhdGEgc2VnbWVudCAqLwogCWlmICghcHJpdi0+ZGJnZnNfc3JhbV9vZmZzZXQgJiYgIXByaXYtPmRiZ2ZzX3NyYW1fbGVuKSB7CiAJCXByaXYtPmRiZ2ZzX3NyYW1fb2Zmc2V0ID0gMHg4MDAwMDA7Ci0JCWlmIChwcml2LT51Y29kZV90eXBlID09IFVDT0RFX0lOSVQpCi0JCQlwcml2LT5kYmdmc19zcmFtX2xlbiA9IHByaXYtPnVjb2RlX2luaXRfZGF0YS5sZW47CisJCWlmIChwcml2LT51Y29kZV90eXBlID09IFVDT0RFX1NVQlRZUEVfSU5JVCkKKwkJCXByaXYtPmRiZ2ZzX3NyYW1fbGVuID0gcHJpdi0+dWNvZGVfaW5pdC5kYXRhLmxlbjsKIAkJZWxzZQotCQkJcHJpdi0+ZGJnZnNfc3JhbV9sZW4gPSBwcml2LT51Y29kZV9kYXRhLmxlbjsKKwkJCXByaXYtPmRiZ2ZzX3NyYW1fbGVuID0gcHJpdi0+dWNvZGVfcnQuZGF0YS5sZW47CiAJfQogCWxlbiA9IHByaXYtPmRiZ2ZzX3NyYW1fbGVuOwogCkBAIC00MzcsOCArNDM4LDcgQEAKIAlpbnQgcG9zID0gMDsKIAlzc2l6ZV90IHJldCA9IC1FTk9NRU07CiAKLQlyZXQgPSBwb3MgPSBwcml2LT5jZmctPm9wcy0+bGliLT5kdW1wX25pY19ldmVudF9sb2coCi0JCQkJCXByaXYsIHRydWUsICZidWYsIHRydWUpOworCXJldCA9IHBvcyA9IGl3bF9kdW1wX25pY19ldmVudF9sb2cocHJpdiwgdHJ1ZSwgJmJ1ZiwgdHJ1ZSk7CiAJaWYgKGJ1ZikgewogCQlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKIAkJa2ZyZWUoYnVmKTsKQEAgLTQ2Miw4ICs0NjIsNyBAQAogCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmZXZlbnRfbG9nX2ZsYWcpICE9IDEpCiAJCXJldHVybiAtRUZBVUxUOwogCWlmIChldmVudF9sb2dfZmxhZyA9PSAxKQotCQlwcml2LT5jZmctPm9wcy0+bGliLT5kdW1wX25pY19ldmVudF9sb2cocHJpdiwgdHJ1ZSwKLQkJCQkJCQlOVUxMLCBmYWxzZSk7CisJCWl3bF9kdW1wX25pY19ldmVudF9sb2cocHJpdiwgdHJ1ZSwgTlVMTCwgZmFsc2UpOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMTAzOSwxMyArMTAzOCw0NjMgQEAKIAlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7CiB9CiAKK3N0YXRpYyBjb25zdCBjaGFyICpmbXRfdmFsdWUgPSAiICAlLTMwcyAlMTB1XG4iOworc3RhdGljIGNvbnN0IGNoYXIgKmZtdF9oZXggICA9ICIgICUtMzBzICAgICAgIDB4JTAyWFxuIjsKK3N0YXRpYyBjb25zdCBjaGFyICpmbXRfdGFibGUgPSAiICAlLTMwcyAlMTB1ICAlMTB1ICAlMTB1ICAlMTB1XG4iOworc3RhdGljIGNvbnN0IGNoYXIgKmZtdF9oZWFkZXIgPQorCSIlLTMycyAgICBjdXJyZW50ICBjdW11bGF0aXZlICAgICAgIGRlbHRhICAgICAgICAgbWF4XG4iOworCitzdGF0aWMgaW50IGl3bF9zdGF0aXN0aWNzX2ZsYWcoc3RydWN0IGl3bF9wcml2ICpwcml2LCBjaGFyICpidWYsIGludCBidWZzeikKK3sKKwlpbnQgcCA9IDA7CisJdTMyIGZsYWc7CisKKwlmbGFnID0gbGUzMl90b19jcHUocHJpdi0+c3RhdGlzdGljcy5mbGFnKTsKKworCXAgKz0gc2NucHJpbnRmKGJ1ZiArIHAsIGJ1ZnN6IC0gcCwgIlN0YXRpc3RpY3MgRmxhZygweCVYKTpcbiIsIGZsYWcpOworCWlmIChmbGFnICYgVUNPREVfU1RBVElTVElDU19DTEVBUl9NU0spCisJCXAgKz0gc2NucHJpbnRmKGJ1ZiArIHAsIGJ1ZnN6IC0gcCwKKwkJIlx0U3RhdGlzdGljcyBoYXZlIGJlZW4gY2xlYXJlZFxuIik7CisJcCArPSBzY25wcmludGYoYnVmICsgcCwgYnVmc3ogLSBwLCAiXHRPcGVyYXRpb25hbCBGcmVxdWVuY3k6ICVzXG4iLAorCQkoZmxhZyAmIFVDT0RFX1NUQVRJU1RJQ1NfRlJFUVVFTkNZX01TSykKKwkJPyAiMi40IEdIeiIgOiAiNS4yIEdIeiIpOworCXAgKz0gc2NucHJpbnRmKGJ1ZiArIHAsIGJ1ZnN6IC0gcCwgIlx0VEdqIE5hcnJvdyBCYW5kOiAlc1xuIiwKKwkJKGZsYWcgJiBVQ09ERV9TVEFUSVNUSUNTX05BUlJPV19CQU5EX01TSykKKwkJID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7CisKKwlyZXR1cm4gcDsKK30KKwogc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX3Vjb2RlX3J4X3N0YXRzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwKIAkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXJldHVybiBwcml2LT5jZmctPm9wcy0+bGliLT5kZWJ1Z2ZzX29wcy5yeF9zdGF0c19yZWFkKGZpbGUsCi0JCQl1c2VyX2J1ZiwgY291bnQsIHBwb3MpOworCWludCBwb3MgPSAwOworCWNoYXIgKmJ1ZjsKKwlpbnQgYnVmc3ogPSBzaXplb2Yoc3RydWN0IHN0YXRpc3RpY3NfcnhfcGh5KSAqIDQwICsKKwkJICAgIHNpemVvZihzdHJ1Y3Qgc3RhdGlzdGljc19yeF9ub25fcGh5KSAqIDQwICsKKwkJICAgIHNpemVvZihzdHJ1Y3Qgc3RhdGlzdGljc19yeF9odF9waHkpICogNDAgKyA0MDA7CisJc3NpemVfdCByZXQ7CisJc3RydWN0IHN0YXRpc3RpY3NfcnhfcGh5ICpvZmRtLCAqYWNjdW1fb2ZkbSwgKmRlbHRhX29mZG0sICptYXhfb2ZkbTsKKwlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9waHkgKmNjaywgKmFjY3VtX2NjaywgKmRlbHRhX2NjaywgKm1heF9jY2s7CisJc3RydWN0IHN0YXRpc3RpY3Nfcnhfbm9uX3BoeSAqZ2VuZXJhbCwgKmFjY3VtX2dlbmVyYWw7CisJc3RydWN0IHN0YXRpc3RpY3Nfcnhfbm9uX3BoeSAqZGVsdGFfZ2VuZXJhbCwgKm1heF9nZW5lcmFsOworCXN0cnVjdCBzdGF0aXN0aWNzX3J4X2h0X3BoeSAqaHQsICphY2N1bV9odCwgKmRlbHRhX2h0LCAqbWF4X2h0OworCisJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCisJCXJldHVybiAtRUFHQUlOOworCisJYnVmID0ga3phbGxvYyhidWZzeiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpIHsKKwkJSVdMX0VSUihwcml2LCAiQ2FuIG5vdCBhbGxvY2F0ZSBCdWZmZXJcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKgorCSAqIHRoZSBzdGF0aXN0aWMgaW5mb3JtYXRpb24gZGlzcGxheSBoZXJlIGlzIGJhc2VkIG9uCisJICogdGhlIGxhc3Qgc3RhdGlzdGljcyBub3RpZmljYXRpb24gZnJvbSB1Q29kZQorCSAqIG1pZ2h0IG5vdCByZWZsZWN0IHRoZSBjdXJyZW50IHVDb2RlIGFjdGl2aXR5CisJICovCisJb2ZkbSA9ICZwcml2LT5zdGF0aXN0aWNzLnJ4X29mZG07CisJY2NrID0gJnByaXYtPnN0YXRpc3RpY3MucnhfY2NrOworCWdlbmVyYWwgPSAmcHJpdi0+c3RhdGlzdGljcy5yeF9ub25fcGh5OworCWh0ID0gJnByaXYtPnN0YXRpc3RpY3Mucnhfb2ZkbV9odDsKKwlhY2N1bV9vZmRtID0gJnByaXYtPmFjY3VtX3N0YXRzLnJ4X29mZG07CisJYWNjdW1fY2NrID0gJnByaXYtPmFjY3VtX3N0YXRzLnJ4X2NjazsKKwlhY2N1bV9nZW5lcmFsID0gJnByaXYtPmFjY3VtX3N0YXRzLnJ4X25vbl9waHk7CisJYWNjdW1faHQgPSAmcHJpdi0+YWNjdW1fc3RhdHMucnhfb2ZkbV9odDsKKwlkZWx0YV9vZmRtID0gJnByaXYtPmRlbHRhX3N0YXRzLnJ4X29mZG07CisJZGVsdGFfY2NrID0gJnByaXYtPmRlbHRhX3N0YXRzLnJ4X2NjazsKKwlkZWx0YV9nZW5lcmFsID0gJnByaXYtPmRlbHRhX3N0YXRzLnJ4X25vbl9waHk7CisJZGVsdGFfaHQgPSAmcHJpdi0+ZGVsdGFfc3RhdHMucnhfb2ZkbV9odDsKKwltYXhfb2ZkbSA9ICZwcml2LT5tYXhfZGVsdGFfc3RhdHMucnhfb2ZkbTsKKwltYXhfY2NrID0gJnByaXYtPm1heF9kZWx0YV9zdGF0cy5yeF9jY2s7CisJbWF4X2dlbmVyYWwgPSAmcHJpdi0+bWF4X2RlbHRhX3N0YXRzLnJ4X25vbl9waHk7CisJbWF4X2h0ID0gJnByaXYtPm1heF9kZWx0YV9zdGF0cy5yeF9vZmRtX2h0OworCisJcG9zICs9IGl3bF9zdGF0aXN0aWNzX2ZsYWcocHJpdiwgYnVmLCBidWZzeik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF9oZWFkZXIsICJTdGF0aXN0aWNzX1J4IC0gT0ZETToiKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiaW5hX2NudDoiLAorCQkJIGxlMzJfdG9fY3B1KG9mZG0tPmluYV9jbnQpLAorCQkJIGFjY3VtX29mZG0tPmluYV9jbnQsCisJCQkgZGVsdGFfb2ZkbS0+aW5hX2NudCwgbWF4X29mZG0tPmluYV9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJmaW5hX2NudDoiLAorCQkJIGxlMzJfdG9fY3B1KG9mZG0tPmZpbmFfY250KSwgYWNjdW1fb2ZkbS0+ZmluYV9jbnQsCisJCQkgZGVsdGFfb2ZkbS0+ZmluYV9jbnQsIG1heF9vZmRtLT5maW5hX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgInBsY3BfZXJyOiIsCisJCQkgbGUzMl90b19jcHUob2ZkbS0+cGxjcF9lcnIpLCBhY2N1bV9vZmRtLT5wbGNwX2VyciwKKwkJCSBkZWx0YV9vZmRtLT5wbGNwX2VyciwgbWF4X29mZG0tPnBsY3BfZXJyKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiY3JjMzJfZXJyOiIsCisJCQkgbGUzMl90b19jcHUob2ZkbS0+Y3JjMzJfZXJyKSwgYWNjdW1fb2ZkbS0+Y3JjMzJfZXJyLAorCQkJIGRlbHRhX29mZG0tPmNyYzMyX2VyciwgbWF4X29mZG0tPmNyYzMyX2Vycik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgIm92ZXJydW5fZXJyOiIsCisJCQkgbGUzMl90b19jcHUob2ZkbS0+b3ZlcnJ1bl9lcnIpLAorCQkJIGFjY3VtX29mZG0tPm92ZXJydW5fZXJyLCBkZWx0YV9vZmRtLT5vdmVycnVuX2VyciwKKwkJCSBtYXhfb2ZkbS0+b3ZlcnJ1bl9lcnIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJlYXJseV9vdmVycnVuX2VycjoiLAorCQkJIGxlMzJfdG9fY3B1KG9mZG0tPmVhcmx5X292ZXJydW5fZXJyKSwKKwkJCSBhY2N1bV9vZmRtLT5lYXJseV9vdmVycnVuX2VyciwKKwkJCSBkZWx0YV9vZmRtLT5lYXJseV9vdmVycnVuX2VyciwKKwkJCSBtYXhfb2ZkbS0+ZWFybHlfb3ZlcnJ1bl9lcnIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJjcmMzMl9nb29kOiIsCisJCQkgbGUzMl90b19jcHUob2ZkbS0+Y3JjMzJfZ29vZCksCisJCQkgYWNjdW1fb2ZkbS0+Y3JjMzJfZ29vZCwgZGVsdGFfb2ZkbS0+Y3JjMzJfZ29vZCwKKwkJCSBtYXhfb2ZkbS0+Y3JjMzJfZ29vZCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImZhbHNlX2FsYXJtX2NudDoiLAorCQkJIGxlMzJfdG9fY3B1KG9mZG0tPmZhbHNlX2FsYXJtX2NudCksCisJCQkgYWNjdW1fb2ZkbS0+ZmFsc2VfYWxhcm1fY250LAorCQkJIGRlbHRhX29mZG0tPmZhbHNlX2FsYXJtX2NudCwKKwkJCSBtYXhfb2ZkbS0+ZmFsc2VfYWxhcm1fY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiZmluYV9zeW5jX2Vycl9jbnQ6IiwKKwkJCSBsZTMyX3RvX2NwdShvZmRtLT5maW5hX3N5bmNfZXJyX2NudCksCisJCQkgYWNjdW1fb2ZkbS0+ZmluYV9zeW5jX2Vycl9jbnQsCisJCQkgZGVsdGFfb2ZkbS0+ZmluYV9zeW5jX2Vycl9jbnQsCisJCQkgbWF4X29mZG0tPmZpbmFfc3luY19lcnJfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAic2ZkX3RpbWVvdXQ6IiwKKwkJCSBsZTMyX3RvX2NwdShvZmRtLT5zZmRfdGltZW91dCksCisJCQkgYWNjdW1fb2ZkbS0+c2ZkX3RpbWVvdXQsIGRlbHRhX29mZG0tPnNmZF90aW1lb3V0LAorCQkJIG1heF9vZmRtLT5zZmRfdGltZW91dCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImZpbmFfdGltZW91dDoiLAorCQkJIGxlMzJfdG9fY3B1KG9mZG0tPmZpbmFfdGltZW91dCksCisJCQkgYWNjdW1fb2ZkbS0+ZmluYV90aW1lb3V0LCBkZWx0YV9vZmRtLT5maW5hX3RpbWVvdXQsCisJCQkgbWF4X29mZG0tPmZpbmFfdGltZW91dCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgInVucmVzcG9uZGVkX3J0czoiLAorCQkJIGxlMzJfdG9fY3B1KG9mZG0tPnVucmVzcG9uZGVkX3J0cyksCisJCQkgYWNjdW1fb2ZkbS0+dW5yZXNwb25kZWRfcnRzLAorCQkJIGRlbHRhX29mZG0tPnVucmVzcG9uZGVkX3J0cywKKwkJCSBtYXhfb2ZkbS0+dW5yZXNwb25kZWRfcnRzKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAicnhlX2ZyYW1lX2xtdF9vdnJ1bjoiLAorCQkJIGxlMzJfdG9fY3B1KG9mZG0tPnJ4ZV9mcmFtZV9saW1pdF9vdmVycnVuKSwKKwkJCSBhY2N1bV9vZmRtLT5yeGVfZnJhbWVfbGltaXRfb3ZlcnJ1biwKKwkJCSBkZWx0YV9vZmRtLT5yeGVfZnJhbWVfbGltaXRfb3ZlcnJ1biwKKwkJCSBtYXhfb2ZkbS0+cnhlX2ZyYW1lX2xpbWl0X292ZXJydW4pOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJzZW50X2Fja19jbnQ6IiwKKwkJCSBsZTMyX3RvX2NwdShvZmRtLT5zZW50X2Fja19jbnQpLAorCQkJIGFjY3VtX29mZG0tPnNlbnRfYWNrX2NudCwgZGVsdGFfb2ZkbS0+c2VudF9hY2tfY250LAorCQkJIG1heF9vZmRtLT5zZW50X2Fja19jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJzZW50X2N0c19jbnQ6IiwKKwkJCSBsZTMyX3RvX2NwdShvZmRtLT5zZW50X2N0c19jbnQpLAorCQkJIGFjY3VtX29mZG0tPnNlbnRfY3RzX2NudCwgZGVsdGFfb2ZkbS0+c2VudF9jdHNfY250LAorCQkJIG1heF9vZmRtLT5zZW50X2N0c19jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJzZW50X2JhX3JzcF9jbnQ6IiwKKwkJCSBsZTMyX3RvX2NwdShvZmRtLT5zZW50X2JhX3JzcF9jbnQpLAorCQkJIGFjY3VtX29mZG0tPnNlbnRfYmFfcnNwX2NudCwKKwkJCSBkZWx0YV9vZmRtLT5zZW50X2JhX3JzcF9jbnQsCisJCQkgbWF4X29mZG0tPnNlbnRfYmFfcnNwX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImRzcF9zZWxmX2tpbGw6IiwKKwkJCSBsZTMyX3RvX2NwdShvZmRtLT5kc3Bfc2VsZl9raWxsKSwKKwkJCSBhY2N1bV9vZmRtLT5kc3Bfc2VsZl9raWxsLAorCQkJIGRlbHRhX29mZG0tPmRzcF9zZWxmX2tpbGwsCisJCQkgbWF4X29mZG0tPmRzcF9zZWxmX2tpbGwpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJtaF9mb3JtYXRfZXJyOiIsCisJCQkgbGUzMl90b19jcHUob2ZkbS0+bWhfZm9ybWF0X2VyciksCisJCQkgYWNjdW1fb2ZkbS0+bWhfZm9ybWF0X2VyciwKKwkJCSBkZWx0YV9vZmRtLT5taF9mb3JtYXRfZXJyLAorCQkJIG1heF9vZmRtLT5taF9mb3JtYXRfZXJyKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAicmVfYWNxX21haW5fcnNzaV9zdW06IiwKKwkJCSBsZTMyX3RvX2NwdShvZmRtLT5yZV9hY3FfbWFpbl9yc3NpX3N1bSksCisJCQkgYWNjdW1fb2ZkbS0+cmVfYWNxX21haW5fcnNzaV9zdW0sCisJCQkgZGVsdGFfb2ZkbS0+cmVfYWNxX21haW5fcnNzaV9zdW0sCisJCQkgbWF4X29mZG0tPnJlX2FjcV9tYWluX3Jzc2lfc3VtKTsKKworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfaGVhZGVyLCAiU3RhdGlzdGljc19SeCAtIENDSzoiKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiaW5hX2NudDoiLAorCQkJIGxlMzJfdG9fY3B1KGNjay0+aW5hX2NudCksIGFjY3VtX2Njay0+aW5hX2NudCwKKwkJCSBkZWx0YV9jY2stPmluYV9jbnQsIG1heF9jY2stPmluYV9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJmaW5hX2NudDoiLAorCQkJIGxlMzJfdG9fY3B1KGNjay0+ZmluYV9jbnQpLCBhY2N1bV9jY2stPmZpbmFfY250LAorCQkJIGRlbHRhX2Njay0+ZmluYV9jbnQsIG1heF9jY2stPmZpbmFfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAicGxjcF9lcnI6IiwKKwkJCSBsZTMyX3RvX2NwdShjY2stPnBsY3BfZXJyKSwgYWNjdW1fY2NrLT5wbGNwX2VyciwKKwkJCSBkZWx0YV9jY2stPnBsY3BfZXJyLCBtYXhfY2NrLT5wbGNwX2Vycik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImNyYzMyX2VycjoiLAorCQkJIGxlMzJfdG9fY3B1KGNjay0+Y3JjMzJfZXJyKSwgYWNjdW1fY2NrLT5jcmMzMl9lcnIsCisJCQkgZGVsdGFfY2NrLT5jcmMzMl9lcnIsIG1heF9jY2stPmNyYzMyX2Vycik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgIm92ZXJydW5fZXJyOiIsCisJCQkgbGUzMl90b19jcHUoY2NrLT5vdmVycnVuX2VyciksCisJCQkgYWNjdW1fY2NrLT5vdmVycnVuX2VyciwgZGVsdGFfY2NrLT5vdmVycnVuX2VyciwKKwkJCSBtYXhfY2NrLT5vdmVycnVuX2Vycik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImVhcmx5X292ZXJydW5fZXJyOiIsCisJCQkgbGUzMl90b19jcHUoY2NrLT5lYXJseV9vdmVycnVuX2VyciksCisJCQkgYWNjdW1fY2NrLT5lYXJseV9vdmVycnVuX2VyciwKKwkJCSBkZWx0YV9jY2stPmVhcmx5X292ZXJydW5fZXJyLAorCQkJIG1heF9jY2stPmVhcmx5X292ZXJydW5fZXJyKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiY3JjMzJfZ29vZDoiLAorCQkJIGxlMzJfdG9fY3B1KGNjay0+Y3JjMzJfZ29vZCksIGFjY3VtX2Njay0+Y3JjMzJfZ29vZCwKKwkJCSBkZWx0YV9jY2stPmNyYzMyX2dvb2QsIG1heF9jY2stPmNyYzMyX2dvb2QpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJmYWxzZV9hbGFybV9jbnQ6IiwKKwkJCSBsZTMyX3RvX2NwdShjY2stPmZhbHNlX2FsYXJtX2NudCksCisJCQkgYWNjdW1fY2NrLT5mYWxzZV9hbGFybV9jbnQsCisJCQkgZGVsdGFfY2NrLT5mYWxzZV9hbGFybV9jbnQsIG1heF9jY2stPmZhbHNlX2FsYXJtX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImZpbmFfc3luY19lcnJfY250OiIsCisJCQkgbGUzMl90b19jcHUoY2NrLT5maW5hX3N5bmNfZXJyX2NudCksCisJCQkgYWNjdW1fY2NrLT5maW5hX3N5bmNfZXJyX2NudCwKKwkJCSBkZWx0YV9jY2stPmZpbmFfc3luY19lcnJfY250LAorCQkJIG1heF9jY2stPmZpbmFfc3luY19lcnJfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAic2ZkX3RpbWVvdXQ6IiwKKwkJCSBsZTMyX3RvX2NwdShjY2stPnNmZF90aW1lb3V0KSwKKwkJCSBhY2N1bV9jY2stPnNmZF90aW1lb3V0LCBkZWx0YV9jY2stPnNmZF90aW1lb3V0LAorCQkJIG1heF9jY2stPnNmZF90aW1lb3V0KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiZmluYV90aW1lb3V0OiIsCisJCQkgbGUzMl90b19jcHUoY2NrLT5maW5hX3RpbWVvdXQpLAorCQkJIGFjY3VtX2Njay0+ZmluYV90aW1lb3V0LCBkZWx0YV9jY2stPmZpbmFfdGltZW91dCwKKwkJCSBtYXhfY2NrLT5maW5hX3RpbWVvdXQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJ1bnJlc3BvbmRlZF9ydHM6IiwKKwkJCSBsZTMyX3RvX2NwdShjY2stPnVucmVzcG9uZGVkX3J0cyksCisJCQkgYWNjdW1fY2NrLT51bnJlc3BvbmRlZF9ydHMsIGRlbHRhX2Njay0+dW5yZXNwb25kZWRfcnRzLAorCQkJIG1heF9jY2stPnVucmVzcG9uZGVkX3J0cyk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgInJ4ZV9mcmFtZV9sbXRfb3ZydW46IiwKKwkJCSBsZTMyX3RvX2NwdShjY2stPnJ4ZV9mcmFtZV9saW1pdF9vdmVycnVuKSwKKwkJCSBhY2N1bV9jY2stPnJ4ZV9mcmFtZV9saW1pdF9vdmVycnVuLAorCQkJIGRlbHRhX2Njay0+cnhlX2ZyYW1lX2xpbWl0X292ZXJydW4sCisJCQkgbWF4X2Njay0+cnhlX2ZyYW1lX2xpbWl0X292ZXJydW4pOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJzZW50X2Fja19jbnQ6IiwKKwkJCSBsZTMyX3RvX2NwdShjY2stPnNlbnRfYWNrX2NudCksCisJCQkgYWNjdW1fY2NrLT5zZW50X2Fja19jbnQsIGRlbHRhX2Njay0+c2VudF9hY2tfY250LAorCQkJIG1heF9jY2stPnNlbnRfYWNrX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgInNlbnRfY3RzX2NudDoiLAorCQkJIGxlMzJfdG9fY3B1KGNjay0+c2VudF9jdHNfY250KSwKKwkJCSBhY2N1bV9jY2stPnNlbnRfY3RzX2NudCwgZGVsdGFfY2NrLT5zZW50X2N0c19jbnQsCisJCQkgbWF4X2Njay0+c2VudF9jdHNfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAic2VudF9iYV9yc3BfY250OiIsCisJCQkgbGUzMl90b19jcHUoY2NrLT5zZW50X2JhX3JzcF9jbnQpLAorCQkJIGFjY3VtX2Njay0+c2VudF9iYV9yc3BfY250LAorCQkJIGRlbHRhX2Njay0+c2VudF9iYV9yc3BfY250LAorCQkJIG1heF9jY2stPnNlbnRfYmFfcnNwX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImRzcF9zZWxmX2tpbGw6IiwKKwkJCSBsZTMyX3RvX2NwdShjY2stPmRzcF9zZWxmX2tpbGwpLAorCQkJIGFjY3VtX2Njay0+ZHNwX3NlbGZfa2lsbCwgZGVsdGFfY2NrLT5kc3Bfc2VsZl9raWxsLAorCQkJIG1heF9jY2stPmRzcF9zZWxmX2tpbGwpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJtaF9mb3JtYXRfZXJyOiIsCisJCQkgbGUzMl90b19jcHUoY2NrLT5taF9mb3JtYXRfZXJyKSwKKwkJCSBhY2N1bV9jY2stPm1oX2Zvcm1hdF9lcnIsIGRlbHRhX2Njay0+bWhfZm9ybWF0X2VyciwKKwkJCSBtYXhfY2NrLT5taF9mb3JtYXRfZXJyKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAicmVfYWNxX21haW5fcnNzaV9zdW06IiwKKwkJCSBsZTMyX3RvX2NwdShjY2stPnJlX2FjcV9tYWluX3Jzc2lfc3VtKSwKKwkJCSBhY2N1bV9jY2stPnJlX2FjcV9tYWluX3Jzc2lfc3VtLAorCQkJIGRlbHRhX2Njay0+cmVfYWNxX21haW5fcnNzaV9zdW0sCisJCQkgbWF4X2Njay0+cmVfYWNxX21haW5fcnNzaV9zdW0pOworCisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF9oZWFkZXIsICJTdGF0aXN0aWNzX1J4IC0gR0VORVJBTDoiKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiYm9ndXNfY3RzOiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+Ym9ndXNfY3RzKSwKKwkJCSBhY2N1bV9nZW5lcmFsLT5ib2d1c19jdHMsIGRlbHRhX2dlbmVyYWwtPmJvZ3VzX2N0cywKKwkJCSBtYXhfZ2VuZXJhbC0+Ym9ndXNfY3RzKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiYm9ndXNfYWNrOiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+Ym9ndXNfYWNrKSwKKwkJCSBhY2N1bV9nZW5lcmFsLT5ib2d1c19hY2ssIGRlbHRhX2dlbmVyYWwtPmJvZ3VzX2FjaywKKwkJCSBtYXhfZ2VuZXJhbC0+Ym9ndXNfYWNrKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAibm9uX2Jzc2lkX2ZyYW1lczoiLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPm5vbl9ic3NpZF9mcmFtZXMpLAorCQkJIGFjY3VtX2dlbmVyYWwtPm5vbl9ic3NpZF9mcmFtZXMsCisJCQkgZGVsdGFfZ2VuZXJhbC0+bm9uX2Jzc2lkX2ZyYW1lcywKKwkJCSBtYXhfZ2VuZXJhbC0+bm9uX2Jzc2lkX2ZyYW1lcyk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImZpbHRlcmVkX2ZyYW1lczoiLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmZpbHRlcmVkX2ZyYW1lcyksCisJCQkgYWNjdW1fZ2VuZXJhbC0+ZmlsdGVyZWRfZnJhbWVzLAorCQkJIGRlbHRhX2dlbmVyYWwtPmZpbHRlcmVkX2ZyYW1lcywKKwkJCSBtYXhfZ2VuZXJhbC0+ZmlsdGVyZWRfZnJhbWVzKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAibm9uX2NoYW5uZWxfYmVhY29uczoiLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPm5vbl9jaGFubmVsX2JlYWNvbnMpLAorCQkJIGFjY3VtX2dlbmVyYWwtPm5vbl9jaGFubmVsX2JlYWNvbnMsCisJCQkgZGVsdGFfZ2VuZXJhbC0+bm9uX2NoYW5uZWxfYmVhY29ucywKKwkJCSBtYXhfZ2VuZXJhbC0+bm9uX2NoYW5uZWxfYmVhY29ucyk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImNoYW5uZWxfYmVhY29uczoiLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmNoYW5uZWxfYmVhY29ucyksCisJCQkgYWNjdW1fZ2VuZXJhbC0+Y2hhbm5lbF9iZWFjb25zLAorCQkJIGRlbHRhX2dlbmVyYWwtPmNoYW5uZWxfYmVhY29ucywKKwkJCSBtYXhfZ2VuZXJhbC0+Y2hhbm5lbF9iZWFjb25zKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAibnVtX21pc3NlZF9iY29uOiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+bnVtX21pc3NlZF9iY29uKSwKKwkJCSBhY2N1bV9nZW5lcmFsLT5udW1fbWlzc2VkX2Jjb24sCisJCQkgZGVsdGFfZ2VuZXJhbC0+bnVtX21pc3NlZF9iY29uLAorCQkJIG1heF9nZW5lcmFsLT5udW1fbWlzc2VkX2Jjb24pOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJhZGNfcnhfc2F0dXJhdGlvbl90aW1lOiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+YWRjX3J4X3NhdHVyYXRpb25fdGltZSksCisJCQkgYWNjdW1fZ2VuZXJhbC0+YWRjX3J4X3NhdHVyYXRpb25fdGltZSwKKwkJCSBkZWx0YV9nZW5lcmFsLT5hZGNfcnhfc2F0dXJhdGlvbl90aW1lLAorCQkJIG1heF9nZW5lcmFsLT5hZGNfcnhfc2F0dXJhdGlvbl90aW1lKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiaW5hX2RldGVjdF9zZWFyY2hfdG06IiwKKwkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5pbmFfZGV0ZWN0aW9uX3NlYXJjaF90aW1lKSwKKwkJCSBhY2N1bV9nZW5lcmFsLT5pbmFfZGV0ZWN0aW9uX3NlYXJjaF90aW1lLAorCQkJIGRlbHRhX2dlbmVyYWwtPmluYV9kZXRlY3Rpb25fc2VhcmNoX3RpbWUsCisJCQkgbWF4X2dlbmVyYWwtPmluYV9kZXRlY3Rpb25fc2VhcmNoX3RpbWUpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJiZWFjb25fc2lsZW5jZV9yc3NpX2E6IiwKKwkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5iZWFjb25fc2lsZW5jZV9yc3NpX2EpLAorCQkJIGFjY3VtX2dlbmVyYWwtPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYSwKKwkJCSBkZWx0YV9nZW5lcmFsLT5iZWFjb25fc2lsZW5jZV9yc3NpX2EsCisJCQkgbWF4X2dlbmVyYWwtPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImJlYWNvbl9zaWxlbmNlX3Jzc2lfYjoiLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYiksCisJCQkgYWNjdW1fZ2VuZXJhbC0+YmVhY29uX3NpbGVuY2VfcnNzaV9iLAorCQkJIGRlbHRhX2dlbmVyYWwtPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYiwKKwkJCSBtYXhfZ2VuZXJhbC0+YmVhY29uX3NpbGVuY2VfcnNzaV9iKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiYmVhY29uX3NpbGVuY2VfcnNzaV9jOiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+YmVhY29uX3NpbGVuY2VfcnNzaV9jKSwKKwkJCSBhY2N1bV9nZW5lcmFsLT5iZWFjb25fc2lsZW5jZV9yc3NpX2MsCisJCQkgZGVsdGFfZ2VuZXJhbC0+YmVhY29uX3NpbGVuY2VfcnNzaV9jLAorCQkJIG1heF9nZW5lcmFsLT5iZWFjb25fc2lsZW5jZV9yc3NpX2MpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJpbnRlcmZlcmVuY2VfZGF0YV9mbGFnOiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+aW50ZXJmZXJlbmNlX2RhdGFfZmxhZyksCisJCQkgYWNjdW1fZ2VuZXJhbC0+aW50ZXJmZXJlbmNlX2RhdGFfZmxhZywKKwkJCSBkZWx0YV9nZW5lcmFsLT5pbnRlcmZlcmVuY2VfZGF0YV9mbGFnLAorCQkJIG1heF9nZW5lcmFsLT5pbnRlcmZlcmVuY2VfZGF0YV9mbGFnKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiY2hhbm5lbF9sb2FkOiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+Y2hhbm5lbF9sb2FkKSwKKwkJCSBhY2N1bV9nZW5lcmFsLT5jaGFubmVsX2xvYWQsCisJCQkgZGVsdGFfZ2VuZXJhbC0+Y2hhbm5lbF9sb2FkLAorCQkJIG1heF9nZW5lcmFsLT5jaGFubmVsX2xvYWQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJkc3BfZmFsc2VfYWxhcm1zOiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+ZHNwX2ZhbHNlX2FsYXJtcyksCisJCQkgYWNjdW1fZ2VuZXJhbC0+ZHNwX2ZhbHNlX2FsYXJtcywKKwkJCSBkZWx0YV9nZW5lcmFsLT5kc3BfZmFsc2VfYWxhcm1zLAorCQkJIG1heF9nZW5lcmFsLT5kc3BfZmFsc2VfYWxhcm1zKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiYmVhY29uX3Jzc2lfYToiLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmJlYWNvbl9yc3NpX2EpLAorCQkJIGFjY3VtX2dlbmVyYWwtPmJlYWNvbl9yc3NpX2EsCisJCQkgZGVsdGFfZ2VuZXJhbC0+YmVhY29uX3Jzc2lfYSwKKwkJCSBtYXhfZ2VuZXJhbC0+YmVhY29uX3Jzc2lfYSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImJlYWNvbl9yc3NpX2I6IiwKKwkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5iZWFjb25fcnNzaV9iKSwKKwkJCSBhY2N1bV9nZW5lcmFsLT5iZWFjb25fcnNzaV9iLAorCQkJIGRlbHRhX2dlbmVyYWwtPmJlYWNvbl9yc3NpX2IsCisJCQkgbWF4X2dlbmVyYWwtPmJlYWNvbl9yc3NpX2IpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJiZWFjb25fcnNzaV9jOiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+YmVhY29uX3Jzc2lfYyksCisJCQkgYWNjdW1fZ2VuZXJhbC0+YmVhY29uX3Jzc2lfYywKKwkJCSBkZWx0YV9nZW5lcmFsLT5iZWFjb25fcnNzaV9jLAorCQkJIG1heF9nZW5lcmFsLT5iZWFjb25fcnNzaV9jKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiYmVhY29uX2VuZXJneV9hOiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+YmVhY29uX2VuZXJneV9hKSwKKwkJCSBhY2N1bV9nZW5lcmFsLT5iZWFjb25fZW5lcmd5X2EsCisJCQkgZGVsdGFfZ2VuZXJhbC0+YmVhY29uX2VuZXJneV9hLAorCQkJIG1heF9nZW5lcmFsLT5iZWFjb25fZW5lcmd5X2EpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJiZWFjb25fZW5lcmd5X2I6IiwKKwkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5iZWFjb25fZW5lcmd5X2IpLAorCQkJIGFjY3VtX2dlbmVyYWwtPmJlYWNvbl9lbmVyZ3lfYiwKKwkJCSBkZWx0YV9nZW5lcmFsLT5iZWFjb25fZW5lcmd5X2IsCisJCQkgbWF4X2dlbmVyYWwtPmJlYWNvbl9lbmVyZ3lfYik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImJlYWNvbl9lbmVyZ3lfYzoiLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmJlYWNvbl9lbmVyZ3lfYyksCisJCQkgYWNjdW1fZ2VuZXJhbC0+YmVhY29uX2VuZXJneV9jLAorCQkJIGRlbHRhX2dlbmVyYWwtPmJlYWNvbl9lbmVyZ3lfYywKKwkJCSBtYXhfZ2VuZXJhbC0+YmVhY29uX2VuZXJneV9jKTsKKworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfaGVhZGVyLCAiU3RhdGlzdGljc19SeCAtIE9GRE1fSFQ6Iik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgInBsY3BfZXJyOiIsCisJCQkgbGUzMl90b19jcHUoaHQtPnBsY3BfZXJyKSwgYWNjdW1faHQtPnBsY3BfZXJyLAorCQkJIGRlbHRhX2h0LT5wbGNwX2VyciwgbWF4X2h0LT5wbGNwX2Vycik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgIm92ZXJydW5fZXJyOiIsCisJCQkgbGUzMl90b19jcHUoaHQtPm92ZXJydW5fZXJyKSwgYWNjdW1faHQtPm92ZXJydW5fZXJyLAorCQkJIGRlbHRhX2h0LT5vdmVycnVuX2VyciwgbWF4X2h0LT5vdmVycnVuX2Vycik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImVhcmx5X292ZXJydW5fZXJyOiIsCisJCQkgbGUzMl90b19jcHUoaHQtPmVhcmx5X292ZXJydW5fZXJyKSwKKwkJCSBhY2N1bV9odC0+ZWFybHlfb3ZlcnJ1bl9lcnIsCisJCQkgZGVsdGFfaHQtPmVhcmx5X292ZXJydW5fZXJyLAorCQkJIG1heF9odC0+ZWFybHlfb3ZlcnJ1bl9lcnIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJjcmMzMl9nb29kOiIsCisJCQkgbGUzMl90b19jcHUoaHQtPmNyYzMyX2dvb2QpLCBhY2N1bV9odC0+Y3JjMzJfZ29vZCwKKwkJCSBkZWx0YV9odC0+Y3JjMzJfZ29vZCwgbWF4X2h0LT5jcmMzMl9nb29kKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiY3JjMzJfZXJyOiIsCisJCQkgbGUzMl90b19jcHUoaHQtPmNyYzMyX2VyciksIGFjY3VtX2h0LT5jcmMzMl9lcnIsCisJCQkgZGVsdGFfaHQtPmNyYzMyX2VyciwgbWF4X2h0LT5jcmMzMl9lcnIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJtaF9mb3JtYXRfZXJyOiIsCisJCQkgbGUzMl90b19jcHUoaHQtPm1oX2Zvcm1hdF9lcnIpLAorCQkJIGFjY3VtX2h0LT5taF9mb3JtYXRfZXJyLAorCQkJIGRlbHRhX2h0LT5taF9mb3JtYXRfZXJyLCBtYXhfaHQtPm1oX2Zvcm1hdF9lcnIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJhZ2dfY3JjMzJfZ29vZDoiLAorCQkJIGxlMzJfdG9fY3B1KGh0LT5hZ2dfY3JjMzJfZ29vZCksCisJCQkgYWNjdW1faHQtPmFnZ19jcmMzMl9nb29kLAorCQkJIGRlbHRhX2h0LT5hZ2dfY3JjMzJfZ29vZCwgbWF4X2h0LT5hZ2dfY3JjMzJfZ29vZCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImFnZ19tcGR1X2NudDoiLAorCQkJIGxlMzJfdG9fY3B1KGh0LT5hZ2dfbXBkdV9jbnQpLAorCQkJIGFjY3VtX2h0LT5hZ2dfbXBkdV9jbnQsCisJCQkgZGVsdGFfaHQtPmFnZ19tcGR1X2NudCwgbWF4X2h0LT5hZ2dfbXBkdV9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJhZ2dfY250OiIsCisJCQkgbGUzMl90b19jcHUoaHQtPmFnZ19jbnQpLCBhY2N1bV9odC0+YWdnX2NudCwKKwkJCSBkZWx0YV9odC0+YWdnX2NudCwgbWF4X2h0LT5hZ2dfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAidW5zdXBwb3J0X21jczoiLAorCQkJIGxlMzJfdG9fY3B1KGh0LT51bnN1cHBvcnRfbWNzKSwKKwkJCSBhY2N1bV9odC0+dW5zdXBwb3J0X21jcywKKwkJCSBkZWx0YV9odC0+dW5zdXBwb3J0X21jcywgbWF4X2h0LT51bnN1cHBvcnRfbWNzKTsKKworCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOworCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX3Vjb2RlX3R4X3N0YXRzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCkBAIC0xMDUzLDggKzE1MDIsMTkwIEBACiAJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlyZXR1cm4gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZGVidWdmc19vcHMudHhfc3RhdHNfcmVhZChmaWxlLAotCQkJdXNlcl9idWYsIGNvdW50LCBwcG9zKTsKKwlpbnQgcG9zID0gMDsKKwljaGFyICpidWY7CisJaW50IGJ1ZnN6ID0gKHNpemVvZihzdHJ1Y3Qgc3RhdGlzdGljc190eCkgKiA0OCkgKyAyNTA7CisJc3NpemVfdCByZXQ7CisJc3RydWN0IHN0YXRpc3RpY3NfdHggKnR4LCAqYWNjdW1fdHgsICpkZWx0YV90eCwgKm1heF90eDsKKworCWlmICghaXdsX2lzX2FsaXZlKHByaXYpKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCWJ1ZiA9IGt6YWxsb2MoYnVmc3osIEdGUF9LRVJORUwpOworCWlmICghYnVmKSB7CisJCUlXTF9FUlIocHJpdiwgIkNhbiBub3QgYWxsb2NhdGUgQnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogdGhlIHN0YXRpc3RpYyBpbmZvcm1hdGlvbiBkaXNwbGF5IGhlcmUgaXMgYmFzZWQgb24KKwkgKiB0aGUgbGFzdCBzdGF0aXN0aWNzIG5vdGlmaWNhdGlvbiBmcm9tIHVDb2RlCisJICogbWlnaHQgbm90IHJlZmxlY3QgdGhlIGN1cnJlbnQgdUNvZGUgYWN0aXZpdHkKKwkgKi8KKwl0eCA9ICZwcml2LT5zdGF0aXN0aWNzLnR4OworCWFjY3VtX3R4ID0gJnByaXYtPmFjY3VtX3N0YXRzLnR4OworCWRlbHRhX3R4ID0gJnByaXYtPmRlbHRhX3N0YXRzLnR4OworCW1heF90eCA9ICZwcml2LT5tYXhfZGVsdGFfc3RhdHMudHg7CisKKwlwb3MgKz0gaXdsX3N0YXRpc3RpY3NfZmxhZyhwcml2LCBidWYsIGJ1ZnN6KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X2hlYWRlciwgIlN0YXRpc3RpY3NfVHg6Iik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgInByZWFtYmxlOiIsCisJCQkgbGUzMl90b19jcHUodHgtPnByZWFtYmxlX2NudCksCisJCQkgYWNjdW1fdHgtPnByZWFtYmxlX2NudCwKKwkJCSBkZWx0YV90eC0+cHJlYW1ibGVfY250LCBtYXhfdHgtPnByZWFtYmxlX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgInJ4X2RldGVjdGVkX2NudDoiLAorCQkJIGxlMzJfdG9fY3B1KHR4LT5yeF9kZXRlY3RlZF9jbnQpLAorCQkJIGFjY3VtX3R4LT5yeF9kZXRlY3RlZF9jbnQsCisJCQkgZGVsdGFfdHgtPnJ4X2RldGVjdGVkX2NudCwgbWF4X3R4LT5yeF9kZXRlY3RlZF9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJidF9wcmlvX2RlZmVyX2NudDoiLAorCQkJIGxlMzJfdG9fY3B1KHR4LT5idF9wcmlvX2RlZmVyX2NudCksCisJCQkgYWNjdW1fdHgtPmJ0X3ByaW9fZGVmZXJfY250LAorCQkJIGRlbHRhX3R4LT5idF9wcmlvX2RlZmVyX2NudCwKKwkJCSBtYXhfdHgtPmJ0X3ByaW9fZGVmZXJfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiYnRfcHJpb19raWxsX2NudDoiLAorCQkJIGxlMzJfdG9fY3B1KHR4LT5idF9wcmlvX2tpbGxfY250KSwKKwkJCSBhY2N1bV90eC0+YnRfcHJpb19raWxsX2NudCwKKwkJCSBkZWx0YV90eC0+YnRfcHJpb19raWxsX2NudCwKKwkJCSBtYXhfdHgtPmJ0X3ByaW9fa2lsbF9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJmZXdfYnl0ZXNfY250OiIsCisJCQkgbGUzMl90b19jcHUodHgtPmZld19ieXRlc19jbnQpLAorCQkJIGFjY3VtX3R4LT5mZXdfYnl0ZXNfY250LAorCQkJIGRlbHRhX3R4LT5mZXdfYnl0ZXNfY250LCBtYXhfdHgtPmZld19ieXRlc19jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJjdHNfdGltZW91dDoiLAorCQkJIGxlMzJfdG9fY3B1KHR4LT5jdHNfdGltZW91dCksIGFjY3VtX3R4LT5jdHNfdGltZW91dCwKKwkJCSBkZWx0YV90eC0+Y3RzX3RpbWVvdXQsIG1heF90eC0+Y3RzX3RpbWVvdXQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJhY2tfdGltZW91dDoiLAorCQkJIGxlMzJfdG9fY3B1KHR4LT5hY2tfdGltZW91dCksCisJCQkgYWNjdW1fdHgtPmFja190aW1lb3V0LAorCQkJIGRlbHRhX3R4LT5hY2tfdGltZW91dCwgbWF4X3R4LT5hY2tfdGltZW91dCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImV4cGVjdGVkX2Fja19jbnQ6IiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+ZXhwZWN0ZWRfYWNrX2NudCksCisJCQkgYWNjdW1fdHgtPmV4cGVjdGVkX2Fja19jbnQsCisJCQkgZGVsdGFfdHgtPmV4cGVjdGVkX2Fja19jbnQsCisJCQkgbWF4X3R4LT5leHBlY3RlZF9hY2tfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiYWN0dWFsX2Fja19jbnQ6IiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+YWN0dWFsX2Fja19jbnQpLAorCQkJIGFjY3VtX3R4LT5hY3R1YWxfYWNrX2NudCwKKwkJCSBkZWx0YV90eC0+YWN0dWFsX2Fja19jbnQsCisJCQkgbWF4X3R4LT5hY3R1YWxfYWNrX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImR1bXBfbXNkdV9jbnQ6IiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+ZHVtcF9tc2R1X2NudCksCisJCQkgYWNjdW1fdHgtPmR1bXBfbXNkdV9jbnQsCisJCQkgZGVsdGFfdHgtPmR1bXBfbXNkdV9jbnQsCisJCQkgbWF4X3R4LT5kdW1wX21zZHVfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiYWJvcnRfbnh0X2ZyYW1lX21pc21hdGNoOiIsCisJCQkgbGUzMl90b19jcHUodHgtPmJ1cnN0X2Fib3J0X25leHRfZnJhbWVfbWlzbWF0Y2hfY250KSwKKwkJCSBhY2N1bV90eC0+YnVyc3RfYWJvcnRfbmV4dF9mcmFtZV9taXNtYXRjaF9jbnQsCisJCQkgZGVsdGFfdHgtPmJ1cnN0X2Fib3J0X25leHRfZnJhbWVfbWlzbWF0Y2hfY250LAorCQkJIG1heF90eC0+YnVyc3RfYWJvcnRfbmV4dF9mcmFtZV9taXNtYXRjaF9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJhYm9ydF9taXNzaW5nX254dF9mcmFtZToiLAorCQkJIGxlMzJfdG9fY3B1KHR4LT5idXJzdF9hYm9ydF9taXNzaW5nX25leHRfZnJhbWVfY250KSwKKwkJCSBhY2N1bV90eC0+YnVyc3RfYWJvcnRfbWlzc2luZ19uZXh0X2ZyYW1lX2NudCwKKwkJCSBkZWx0YV90eC0+YnVyc3RfYWJvcnRfbWlzc2luZ19uZXh0X2ZyYW1lX2NudCwKKwkJCSBtYXhfdHgtPmJ1cnN0X2Fib3J0X21pc3NpbmdfbmV4dF9mcmFtZV9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJjdHNfdGltZW91dF9jb2xsaXNpb246IiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+Y3RzX3RpbWVvdXRfY29sbGlzaW9uKSwKKwkJCSBhY2N1bV90eC0+Y3RzX3RpbWVvdXRfY29sbGlzaW9uLAorCQkJIGRlbHRhX3R4LT5jdHNfdGltZW91dF9jb2xsaXNpb24sCisJCQkgbWF4X3R4LT5jdHNfdGltZW91dF9jb2xsaXNpb24pOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJhY2tfYmFfdGltZW91dF9jb2xsaXNpb246IiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+YWNrX29yX2JhX3RpbWVvdXRfY29sbGlzaW9uKSwKKwkJCSBhY2N1bV90eC0+YWNrX29yX2JhX3RpbWVvdXRfY29sbGlzaW9uLAorCQkJIGRlbHRhX3R4LT5hY2tfb3JfYmFfdGltZW91dF9jb2xsaXNpb24sCisJCQkgbWF4X3R4LT5hY2tfb3JfYmFfdGltZW91dF9jb2xsaXNpb24pOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJhZ2cgYmFfdGltZW91dDoiLAorCQkJIGxlMzJfdG9fY3B1KHR4LT5hZ2cuYmFfdGltZW91dCksCisJCQkgYWNjdW1fdHgtPmFnZy5iYV90aW1lb3V0LAorCQkJIGRlbHRhX3R4LT5hZ2cuYmFfdGltZW91dCwKKwkJCSBtYXhfdHgtPmFnZy5iYV90aW1lb3V0KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiYWdnIGJhX3Jlc2NoZWRfZnJhbWVzOiIsCisJCQkgbGUzMl90b19jcHUodHgtPmFnZy5iYV9yZXNjaGVkdWxlX2ZyYW1lcyksCisJCQkgYWNjdW1fdHgtPmFnZy5iYV9yZXNjaGVkdWxlX2ZyYW1lcywKKwkJCSBkZWx0YV90eC0+YWdnLmJhX3Jlc2NoZWR1bGVfZnJhbWVzLAorCQkJIG1heF90eC0+YWdnLmJhX3Jlc2NoZWR1bGVfZnJhbWVzKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiYWdnIHNjZF9xdWVyeV9hZ2dfZnJhbWU6IiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+YWdnLnNjZF9xdWVyeV9hZ2dfZnJhbWVfY250KSwKKwkJCSBhY2N1bV90eC0+YWdnLnNjZF9xdWVyeV9hZ2dfZnJhbWVfY250LAorCQkJIGRlbHRhX3R4LT5hZ2cuc2NkX3F1ZXJ5X2FnZ19mcmFtZV9jbnQsCisJCQkgbWF4X3R4LT5hZ2cuc2NkX3F1ZXJ5X2FnZ19mcmFtZV9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJhZ2cgc2NkX3F1ZXJ5X25vX2FnZzoiLAorCQkJIGxlMzJfdG9fY3B1KHR4LT5hZ2cuc2NkX3F1ZXJ5X25vX2FnZyksCisJCQkgYWNjdW1fdHgtPmFnZy5zY2RfcXVlcnlfbm9fYWdnLAorCQkJIGRlbHRhX3R4LT5hZ2cuc2NkX3F1ZXJ5X25vX2FnZywKKwkJCSBtYXhfdHgtPmFnZy5zY2RfcXVlcnlfbm9fYWdnKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiYWdnIHNjZF9xdWVyeV9hZ2c6IiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+YWdnLnNjZF9xdWVyeV9hZ2cpLAorCQkJIGFjY3VtX3R4LT5hZ2cuc2NkX3F1ZXJ5X2FnZywKKwkJCSBkZWx0YV90eC0+YWdnLnNjZF9xdWVyeV9hZ2csCisJCQkgbWF4X3R4LT5hZ2cuc2NkX3F1ZXJ5X2FnZyk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImFnZyBzY2RfcXVlcnlfbWlzbWF0Y2g6IiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+YWdnLnNjZF9xdWVyeV9taXNtYXRjaCksCisJCQkgYWNjdW1fdHgtPmFnZy5zY2RfcXVlcnlfbWlzbWF0Y2gsCisJCQkgZGVsdGFfdHgtPmFnZy5zY2RfcXVlcnlfbWlzbWF0Y2gsCisJCQkgbWF4X3R4LT5hZ2cuc2NkX3F1ZXJ5X21pc21hdGNoKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiYWdnIGZyYW1lX25vdF9yZWFkeToiLAorCQkJIGxlMzJfdG9fY3B1KHR4LT5hZ2cuZnJhbWVfbm90X3JlYWR5KSwKKwkJCSBhY2N1bV90eC0+YWdnLmZyYW1lX25vdF9yZWFkeSwKKwkJCSBkZWx0YV90eC0+YWdnLmZyYW1lX25vdF9yZWFkeSwKKwkJCSBtYXhfdHgtPmFnZy5mcmFtZV9ub3RfcmVhZHkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJhZ2cgdW5kZXJydW46IiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+YWdnLnVuZGVycnVuKSwKKwkJCSBhY2N1bV90eC0+YWdnLnVuZGVycnVuLAorCQkJIGRlbHRhX3R4LT5hZ2cudW5kZXJydW4sIG1heF90eC0+YWdnLnVuZGVycnVuKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiYWdnIGJ0X3ByaW9fa2lsbDoiLAorCQkJIGxlMzJfdG9fY3B1KHR4LT5hZ2cuYnRfcHJpb19raWxsKSwKKwkJCSBhY2N1bV90eC0+YWdnLmJ0X3ByaW9fa2lsbCwKKwkJCSBkZWx0YV90eC0+YWdnLmJ0X3ByaW9fa2lsbCwKKwkJCSBtYXhfdHgtPmFnZy5idF9wcmlvX2tpbGwpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJhZ2cgcnhfYmFfcnNwX2NudDoiLAorCQkJIGxlMzJfdG9fY3B1KHR4LT5hZ2cucnhfYmFfcnNwX2NudCksCisJCQkgYWNjdW1fdHgtPmFnZy5yeF9iYV9yc3BfY250LAorCQkJIGRlbHRhX3R4LT5hZ2cucnhfYmFfcnNwX2NudCwKKwkJCSBtYXhfdHgtPmFnZy5yeF9iYV9yc3BfY250KTsKKworCWlmICh0eC0+dHhfcG93ZXIuYW50X2EgfHwgdHgtPnR4X3Bvd2VyLmFudF9iIHx8IHR4LT50eF9wb3dlci5hbnRfYykgeworCQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkidHggcG93ZXI6ICgxLzIgZEIgc3RlcClcbiIpOworCQlpZiAoKHByaXYtPmNmZy0+dmFsaWRfdHhfYW50ICYgQU5UX0EpICYmIHR4LT50eF9wb3dlci5hbnRfYSkKKwkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkJZm10X2hleCwgImFudGVubmEgQToiLAorCQkJCQl0eC0+dHhfcG93ZXIuYW50X2EpOworCQlpZiAoKHByaXYtPmNmZy0+dmFsaWRfdHhfYW50ICYgQU5UX0IpICYmIHR4LT50eF9wb3dlci5hbnRfYikKKwkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkJZm10X2hleCwgImFudGVubmEgQjoiLAorCQkJCQl0eC0+dHhfcG93ZXIuYW50X2IpOworCQlpZiAoKHByaXYtPmNmZy0+dmFsaWRfdHhfYW50ICYgQU5UX0MpICYmIHR4LT50eF9wb3dlci5hbnRfYykKKwkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkJZm10X2hleCwgImFudGVubmEgQzoiLAorCQkJCQl0eC0+dHhfcG93ZXIuYW50X2MpOworCX0KKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKKwlrZnJlZShidWYpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc191Y29kZV9nZW5lcmFsX3N0YXRzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCkBAIC0xMDYyLDggKzE2OTMsMzQ3IEBACiAJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlyZXR1cm4gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZGVidWdmc19vcHMuZ2VuZXJhbF9zdGF0c19yZWFkKGZpbGUsCi0JCQl1c2VyX2J1ZiwgY291bnQsIHBwb3MpOworCWludCBwb3MgPSAwOworCWNoYXIgKmJ1ZjsKKwlpbnQgYnVmc3ogPSBzaXplb2Yoc3RydWN0IHN0YXRpc3RpY3NfZ2VuZXJhbCkgKiAxMCArIDMwMDsKKwlzc2l6ZV90IHJldDsKKwlzdHJ1Y3Qgc3RhdGlzdGljc19nZW5lcmFsX2NvbW1vbiAqZ2VuZXJhbCwgKmFjY3VtX2dlbmVyYWw7CisJc3RydWN0IHN0YXRpc3RpY3NfZ2VuZXJhbF9jb21tb24gKmRlbHRhX2dlbmVyYWwsICptYXhfZ2VuZXJhbDsKKwlzdHJ1Y3Qgc3RhdGlzdGljc19kYmcgKmRiZywgKmFjY3VtX2RiZywgKmRlbHRhX2RiZywgKm1heF9kYmc7CisJc3RydWN0IHN0YXRpc3RpY3NfZGl2ICpkaXYsICphY2N1bV9kaXYsICpkZWx0YV9kaXYsICptYXhfZGl2OworCisJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCisJCXJldHVybiAtRUFHQUlOOworCisJYnVmID0ga3phbGxvYyhidWZzeiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpIHsKKwkJSVdMX0VSUihwcml2LCAiQ2FuIG5vdCBhbGxvY2F0ZSBCdWZmZXJcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiB0aGUgc3RhdGlzdGljIGluZm9ybWF0aW9uIGRpc3BsYXkgaGVyZSBpcyBiYXNlZCBvbgorCSAqIHRoZSBsYXN0IHN0YXRpc3RpY3Mgbm90aWZpY2F0aW9uIGZyb20gdUNvZGUKKwkgKiBtaWdodCBub3QgcmVmbGVjdCB0aGUgY3VycmVudCB1Q29kZSBhY3Rpdml0eQorCSAqLworCWdlbmVyYWwgPSAmcHJpdi0+c3RhdGlzdGljcy5jb21tb247CisJZGJnID0gJnByaXYtPnN0YXRpc3RpY3MuY29tbW9uLmRiZzsKKwlkaXYgPSAmcHJpdi0+c3RhdGlzdGljcy5jb21tb24uZGl2OworCWFjY3VtX2dlbmVyYWwgPSAmcHJpdi0+YWNjdW1fc3RhdHMuY29tbW9uOworCWFjY3VtX2RiZyA9ICZwcml2LT5hY2N1bV9zdGF0cy5jb21tb24uZGJnOworCWFjY3VtX2RpdiA9ICZwcml2LT5hY2N1bV9zdGF0cy5jb21tb24uZGl2OworCWRlbHRhX2dlbmVyYWwgPSAmcHJpdi0+ZGVsdGFfc3RhdHMuY29tbW9uOworCW1heF9nZW5lcmFsID0gJnByaXYtPm1heF9kZWx0YV9zdGF0cy5jb21tb247CisJZGVsdGFfZGJnID0gJnByaXYtPmRlbHRhX3N0YXRzLmNvbW1vbi5kYmc7CisJbWF4X2RiZyA9ICZwcml2LT5tYXhfZGVsdGFfc3RhdHMuY29tbW9uLmRiZzsKKwlkZWx0YV9kaXYgPSAmcHJpdi0+ZGVsdGFfc3RhdHMuY29tbW9uLmRpdjsKKwltYXhfZGl2ID0gJnByaXYtPm1heF9kZWx0YV9zdGF0cy5jb21tb24uZGl2OworCisJcG9zICs9IGl3bF9zdGF0aXN0aWNzX2ZsYWcocHJpdiwgYnVmLCBidWZzeik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF9oZWFkZXIsICJTdGF0aXN0aWNzX0dlbmVyYWw6Iik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF92YWx1ZSwgInRlbXBlcmF0dXJlOiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+dGVtcGVyYXR1cmUpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3ZhbHVlLCAidGVtcGVyYXR1cmVfbToiLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPnRlbXBlcmF0dXJlX20pKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3ZhbHVlLCAidHRsX3RpbWVzdGFtcDoiLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPnR0bF90aW1lc3RhbXApKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiYnVyc3RfY2hlY2s6IiwKKwkJCSBsZTMyX3RvX2NwdShkYmctPmJ1cnN0X2NoZWNrKSwKKwkJCSBhY2N1bV9kYmctPmJ1cnN0X2NoZWNrLAorCQkJIGRlbHRhX2RiZy0+YnVyc3RfY2hlY2ssIG1heF9kYmctPmJ1cnN0X2NoZWNrKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiYnVyc3RfY291bnQ6IiwKKwkJCSBsZTMyX3RvX2NwdShkYmctPmJ1cnN0X2NvdW50KSwKKwkJCSBhY2N1bV9kYmctPmJ1cnN0X2NvdW50LAorCQkJIGRlbHRhX2RiZy0+YnVyc3RfY291bnQsIG1heF9kYmctPmJ1cnN0X2NvdW50KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAid2FpdF9mb3Jfc2lsZW5jZV90aW1lb3V0X2NvdW50OiIsCisJCQkgbGUzMl90b19jcHUoZGJnLT53YWl0X2Zvcl9zaWxlbmNlX3RpbWVvdXRfY250KSwKKwkJCSBhY2N1bV9kYmctPndhaXRfZm9yX3NpbGVuY2VfdGltZW91dF9jbnQsCisJCQkgZGVsdGFfZGJnLT53YWl0X2Zvcl9zaWxlbmNlX3RpbWVvdXRfY250LAorCQkJIG1heF9kYmctPndhaXRfZm9yX3NpbGVuY2VfdGltZW91dF9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJzbGVlcF90aW1lOiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+c2xlZXBfdGltZSksCisJCQkgYWNjdW1fZ2VuZXJhbC0+c2xlZXBfdGltZSwKKwkJCSBkZWx0YV9nZW5lcmFsLT5zbGVlcF90aW1lLCBtYXhfZ2VuZXJhbC0+c2xlZXBfdGltZSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgInNsb3RzX291dDoiLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPnNsb3RzX291dCksCisJCQkgYWNjdW1fZ2VuZXJhbC0+c2xvdHNfb3V0LAorCQkJIGRlbHRhX2dlbmVyYWwtPnNsb3RzX291dCwgbWF4X2dlbmVyYWwtPnNsb3RzX291dCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgInNsb3RzX2lkbGU6IiwKKwkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5zbG90c19pZGxlKSwKKwkJCSBhY2N1bV9nZW5lcmFsLT5zbG90c19pZGxlLAorCQkJIGRlbHRhX2dlbmVyYWwtPnNsb3RzX2lkbGUsIG1heF9nZW5lcmFsLT5zbG90c19pZGxlKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAidHhfb25fYToiLAorCQkJIGxlMzJfdG9fY3B1KGRpdi0+dHhfb25fYSksIGFjY3VtX2Rpdi0+dHhfb25fYSwKKwkJCSBkZWx0YV9kaXYtPnR4X29uX2EsIG1heF9kaXYtPnR4X29uX2EpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJ0eF9vbl9iOiIsCisJCQkgbGUzMl90b19jcHUoZGl2LT50eF9vbl9iKSwgYWNjdW1fZGl2LT50eF9vbl9iLAorCQkJIGRlbHRhX2Rpdi0+dHhfb25fYiwgbWF4X2Rpdi0+dHhfb25fYik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImV4ZWNfdGltZToiLAorCQkJIGxlMzJfdG9fY3B1KGRpdi0+ZXhlY190aW1lKSwgYWNjdW1fZGl2LT5leGVjX3RpbWUsCisJCQkgZGVsdGFfZGl2LT5leGVjX3RpbWUsIG1heF9kaXYtPmV4ZWNfdGltZSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgInByb2JlX3RpbWU6IiwKKwkJCSBsZTMyX3RvX2NwdShkaXYtPnByb2JlX3RpbWUpLCBhY2N1bV9kaXYtPnByb2JlX3RpbWUsCisJCQkgZGVsdGFfZGl2LT5wcm9iZV90aW1lLCBtYXhfZGl2LT5wcm9iZV90aW1lKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAicnhfZW5hYmxlX2NvdW50ZXI6IiwKKwkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5yeF9lbmFibGVfY291bnRlciksCisJCQkgYWNjdW1fZ2VuZXJhbC0+cnhfZW5hYmxlX2NvdW50ZXIsCisJCQkgZGVsdGFfZ2VuZXJhbC0+cnhfZW5hYmxlX2NvdW50ZXIsCisJCQkgbWF4X2dlbmVyYWwtPnJ4X2VuYWJsZV9jb3VudGVyKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAibnVtX29mX3Nvc19zdGF0ZXM6IiwKKwkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5udW1fb2Zfc29zX3N0YXRlcyksCisJCQkgYWNjdW1fZ2VuZXJhbC0+bnVtX29mX3Nvc19zdGF0ZXMsCisJCQkgZGVsdGFfZ2VuZXJhbC0+bnVtX29mX3Nvc19zdGF0ZXMsCisJCQkgbWF4X2dlbmVyYWwtPm51bV9vZl9zb3Nfc3RhdGVzKTsKKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKKwlrZnJlZShidWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc191Y29kZV9idF9zdGF0c19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQljaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IHBvcyA9IDA7CisJY2hhciAqYnVmOworCWludCBidWZzeiA9IChzaXplb2Yoc3RydWN0IHN0YXRpc3RpY3NfYnRfYWN0aXZpdHkpICogMjQpICsgMjAwOworCXNzaXplX3QgcmV0OworCXN0cnVjdCBzdGF0aXN0aWNzX2J0X2FjdGl2aXR5ICpidCwgKmFjY3VtX2J0OworCisJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCisJCXJldHVybiAtRUFHQUlOOworCisJaWYgKCFwcml2LT5idF9lbmFibGVfZmxhZykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBtYWtlIHJlcXVlc3QgdG8gdUNvZGUgdG8gcmV0cmlldmUgc3RhdGlzdGljcyBpbmZvcm1hdGlvbiAqLworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwlyZXQgPSBpd2xfc2VuZF9zdGF0aXN0aWNzX3JlcXVlc3QocHJpdiwgQ01EX1NZTkMsIGZhbHNlKTsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKKworCWlmIChyZXQpIHsKKwkJSVdMX0VSUihwcml2LAorCQkJIkVycm9yIHNlbmRpbmcgc3RhdGlzdGljcyByZXF1ZXN0OiAlemRcbiIsIHJldCk7CisJCXJldHVybiAtRUFHQUlOOworCX0KKwlidWYgPSBremFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikgeworCQlJV0xfRVJSKHByaXYsICJDYW4gbm90IGFsbG9jYXRlIEJ1ZmZlclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qCisJICogdGhlIHN0YXRpc3RpYyBpbmZvcm1hdGlvbiBkaXNwbGF5IGhlcmUgaXMgYmFzZWQgb24KKwkgKiB0aGUgbGFzdCBzdGF0aXN0aWNzIG5vdGlmaWNhdGlvbiBmcm9tIHVDb2RlCisJICogbWlnaHQgbm90IHJlZmxlY3QgdGhlIGN1cnJlbnQgdUNvZGUgYWN0aXZpdHkKKwkgKi8KKwlidCA9ICZwcml2LT5zdGF0aXN0aWNzLmJ0X2FjdGl2aXR5OworCWFjY3VtX2J0ID0gJnByaXYtPmFjY3VtX3N0YXRzLmJ0X2FjdGl2aXR5OworCisJcG9zICs9IGl3bF9zdGF0aXN0aWNzX2ZsYWcocHJpdiwgYnVmLCBidWZzeik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiU3RhdGlzdGljc19CVDpcbiIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSJcdFx0XHRjdXJyZW50XHRcdFx0YWNjdW11bGF0aXZlXG4iKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgImhpX3ByaW9yaXR5X3R4X3JlcV9jbnQ6XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgbGUzMl90b19jcHUoYnQtPmhpX3ByaW9yaXR5X3R4X3JlcV9jbnQpLAorCQkJIGFjY3VtX2J0LT5oaV9wcmlvcml0eV90eF9yZXFfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgImhpX3ByaW9yaXR5X3R4X2RlbmllZF9jbnQ6XHQldVx0XHRcdCV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGJ0LT5oaV9wcmlvcml0eV90eF9kZW5pZWRfY250KSwKKwkJCSBhY2N1bV9idC0+aGlfcHJpb3JpdHlfdHhfZGVuaWVkX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJICJsb19wcmlvcml0eV90eF9yZXFfY250Olx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGJ0LT5sb19wcmlvcml0eV90eF9yZXFfY250KSwKKwkJCSBhY2N1bV9idC0+bG9fcHJpb3JpdHlfdHhfcmVxX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJICJsb19wcmlvcml0eV90eF9kZW5pZWRfY250Olx0JXVcdFx0XHQldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShidC0+bG9fcHJpb3JpdHlfdHhfZGVuaWVkX2NudCksCisJCQkgYWNjdW1fYnQtPmxvX3ByaW9yaXR5X3R4X2RlbmllZF9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSAiaGlfcHJpb3JpdHlfcnhfcmVxX2NudDpcdFx0JXVcdFx0XHQldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShidC0+aGlfcHJpb3JpdHlfcnhfcmVxX2NudCksCisJCQkgYWNjdW1fYnQtPmhpX3ByaW9yaXR5X3J4X3JlcV9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSAiaGlfcHJpb3JpdHlfcnhfZGVuaWVkX2NudDpcdCV1XHRcdFx0JXVcbiIsCisJCQkgbGUzMl90b19jcHUoYnQtPmhpX3ByaW9yaXR5X3J4X2RlbmllZF9jbnQpLAorCQkJIGFjY3VtX2J0LT5oaV9wcmlvcml0eV9yeF9kZW5pZWRfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgImxvX3ByaW9yaXR5X3J4X3JlcV9jbnQ6XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgbGUzMl90b19jcHUoYnQtPmxvX3ByaW9yaXR5X3J4X3JlcV9jbnQpLAorCQkJIGFjY3VtX2J0LT5sb19wcmlvcml0eV9yeF9yZXFfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgImxvX3ByaW9yaXR5X3J4X2RlbmllZF9jbnQ6XHQldVx0XHRcdCV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGJ0LT5sb19wcmlvcml0eV9yeF9kZW5pZWRfY250KSwKKwkJCSBhY2N1bV9idC0+bG9fcHJpb3JpdHlfcnhfZGVuaWVkX2NudCk7CisKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgIihyeCludW1fYnRfa2lsbHM6XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgbGUzMl90b19jcHUocHJpdi0+c3RhdGlzdGljcy5udW1fYnRfa2lsbHMpLAorCQkJIHByaXYtPnN0YXRpc3RpY3MuYWNjdW1fbnVtX2J0X2tpbGxzKTsKKworCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOworCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX3JlcGx5X3R4X2Vycm9yX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcG9zID0gMDsKKwljaGFyICpidWY7CisJaW50IGJ1ZnN6ID0gKHNpemVvZihzdHJ1Y3QgcmVwbHlfdHhfZXJyb3Jfc3RhdGlzdGljcykgKiAyNCkgKworCQkoc2l6ZW9mKHN0cnVjdCByZXBseV9hZ2dfdHhfZXJyb3Jfc3RhdGlzdGljcykgKiAyNCkgKyAyMDA7CisJc3NpemVfdCByZXQ7CisKKwlpZiAoIWl3bF9pc19hbGl2ZShwcml2KSkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlidWYgPSBremFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikgeworCQlJV0xfRVJSKHByaXYsICJDYW4gbm90IGFsbG9jYXRlIEJ1ZmZlclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlN0YXRpc3RpY3NfVFhfRXJyb3I6XG4iKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIlczpcdFx0XHRcdCV1XG4iLAorCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX1BPU1RQT05FX0RFTEFZKSwKKwkJCSBwcml2LT5fYWduLnJlcGx5X3R4X3N0YXRzLnBwX2RlbGF5KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIlczpcdFx0XHQldVxuIiwKKwkJCSBpd2xfZ2V0X3R4X2ZhaWxfcmVhc29uKFRYX1NUQVRVU19QT1NUUE9ORV9GRVdfQllURVMpLAorCQkJIHByaXYtPl9hZ24ucmVwbHlfdHhfc3RhdHMucHBfZmV3X2J5dGVzKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIlczpcdFx0XHQldVxuIiwKKwkJCSBpd2xfZ2V0X3R4X2ZhaWxfcmVhc29uKFRYX1NUQVRVU19QT1NUUE9ORV9CVF9QUklPKSwKKwkJCSBwcml2LT5fYWduLnJlcGx5X3R4X3N0YXRzLnBwX2J0X3ByaW8pOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAorCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX1BPU1RQT05FX1FVSUVUX1BFUklPRCksCisJCQkgcHJpdi0+X2Fnbi5yZXBseV90eF9zdGF0cy5wcF9xdWlldF9wZXJpb2QpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAorCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX1BPU1RQT05FX0NBTENfVFRBSyksCisJCQkgcHJpdi0+X2Fnbi5yZXBseV90eF9zdGF0cy5wcF9jYWxjX3R0YWspOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHQldVxuIiwKKwkJCSBpd2xfZ2V0X3R4X2ZhaWxfcmVhc29uKAorCQkJCVRYX1NUQVRVU19GQUlMX0lOVEVSTkFMX0NST1NTRURfUkVUUlkpLAorCQkJIHByaXYtPl9hZ24ucmVwbHlfdHhfc3RhdHMuaW50X2Nyb3NzZWRfcmV0cnkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAorCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX0ZBSUxfU0hPUlRfTElNSVQpLAorCQkJIHByaXYtPl9hZ24ucmVwbHlfdHhfc3RhdHMuc2hvcnRfbGltaXQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAorCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX0ZBSUxfTE9OR19MSU1JVCksCisJCQkgcHJpdi0+X2Fnbi5yZXBseV90eF9zdGF0cy5sb25nX2xpbWl0KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIlczpcdFx0XHQldVxuIiwKKwkJCSBpd2xfZ2V0X3R4X2ZhaWxfcmVhc29uKFRYX1NUQVRVU19GQUlMX0ZJRk9fVU5ERVJSVU4pLAorCQkJIHByaXYtPl9hZ24ucmVwbHlfdHhfc3RhdHMuZmlmb191bmRlcnJ1bik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCisJCQkgaXdsX2dldF90eF9mYWlsX3JlYXNvbihUWF9TVEFUVVNfRkFJTF9EUkFJTl9GTE9XKSwKKwkJCSBwcml2LT5fYWduLnJlcGx5X3R4X3N0YXRzLmRyYWluX2Zsb3cpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAorCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX0ZBSUxfUkZLSUxMX0ZMVVNIKSwKKwkJCSBwcml2LT5fYWduLnJlcGx5X3R4X3N0YXRzLnJma2lsbF9mbHVzaCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCisJCQkgaXdsX2dldF90eF9mYWlsX3JlYXNvbihUWF9TVEFUVVNfRkFJTF9MSUZFX0VYUElSRSksCisJCQkgcHJpdi0+X2Fnbi5yZXBseV90eF9zdGF0cy5saWZlX2V4cGlyZSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCisJCQkgaXdsX2dldF90eF9mYWlsX3JlYXNvbihUWF9TVEFUVVNfRkFJTF9ERVNUX1BTKSwKKwkJCSBwcml2LT5fYWduLnJlcGx5X3R4X3N0YXRzLmRlc3RfcHMpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAorCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX0ZBSUxfSE9TVF9BQk9SVEVEKSwKKwkJCSBwcml2LT5fYWduLnJlcGx5X3R4X3N0YXRzLmhvc3RfYWJvcnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAorCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX0ZBSUxfQlRfUkVUUlkpLAorCQkJIHByaXYtPl9hZ24ucmVwbHlfdHhfc3RhdHMucHBfZGVsYXkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAorCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX0ZBSUxfU1RBX0lOVkFMSUQpLAorCQkJIHByaXYtPl9hZ24ucmVwbHlfdHhfc3RhdHMuc3RhX2ludmFsaWQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAorCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX0ZBSUxfRlJBR19EUk9QUEVEKSwKKwkJCSBwcml2LT5fYWduLnJlcGx5X3R4X3N0YXRzLmZyYWdfZHJvcCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCisJCQkgaXdsX2dldF90eF9mYWlsX3JlYXNvbihUWF9TVEFUVVNfRkFJTF9USURfRElTQUJMRSksCisJCQkgcHJpdi0+X2Fnbi5yZXBseV90eF9zdGF0cy50aWRfZGlzYWJsZSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCisJCQkgaXdsX2dldF90eF9mYWlsX3JlYXNvbihUWF9TVEFUVVNfRkFJTF9GSUZPX0ZMVVNIRUQpLAorCQkJIHByaXYtPl9hZ24ucmVwbHlfdHhfc3RhdHMuZmlmb19mbHVzaCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdCV1XG4iLAorCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oCisJCQkJVFhfU1RBVFVTX0ZBSUxfSU5TVUZGSUNJRU5UX0NGX1BPTEwpLAorCQkJIHByaXYtPl9hZ24ucmVwbHlfdHhfc3RhdHMuaW5zdWZmX2NmX3BvbGwpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAorCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX0ZBSUxfUEFTU0lWRV9OT19SWCksCisJCQkgcHJpdi0+X2Fnbi5yZXBseV90eF9zdGF0cy5mYWlsX2h3X2Ryb3ApOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHQldVxuIiwKKwkJCSBpd2xfZ2V0X3R4X2ZhaWxfcmVhc29uKAorCQkJCVRYX1NUQVRVU19GQUlMX05PX0JFQUNPTl9PTl9SQURBUiksCisJCQkgcHJpdi0+X2Fnbi5yZXBseV90eF9zdGF0cy5zdGFfY29sb3JfbWlzbWF0Y2gpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlVOS05PV046XHRcdFx0JXVcbiIsCisJCQkgcHJpdi0+X2Fnbi5yZXBseV90eF9zdGF0cy51bmtub3duKTsKKworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSAiXG5TdGF0aXN0aWNzX0FnZ19UWF9FcnJvcjpcbiIpOworCisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCisJCQkgaXdsX2dldF9hZ2dfdHhfZmFpbF9yZWFzb24oQUdHX1RYX1NUQVRFX1VOREVSUlVOX01TSyksCisJCQkgcHJpdi0+X2Fnbi5yZXBseV9hZ2dfdHhfc3RhdHMudW5kZXJydW4pOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAorCQkJIGl3bF9nZXRfYWdnX3R4X2ZhaWxfcmVhc29uKEFHR19UWF9TVEFURV9CVF9QUklPX01TSyksCisJCQkgcHJpdi0+X2Fnbi5yZXBseV9hZ2dfdHhfc3RhdHMuYnRfcHJpbyk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCisJCQkgaXdsX2dldF9hZ2dfdHhfZmFpbF9yZWFzb24oQUdHX1RYX1NUQVRFX0ZFV19CWVRFU19NU0spLAorCQkJIHByaXYtPl9hZ24ucmVwbHlfYWdnX3R4X3N0YXRzLmZld19ieXRlcyk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCisJCQkgaXdsX2dldF9hZ2dfdHhfZmFpbF9yZWFzb24oQUdHX1RYX1NUQVRFX0FCT1JUX01TSyksCisJCQkgcHJpdi0+X2Fnbi5yZXBseV9hZ2dfdHhfc3RhdHMuYWJvcnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHQldVxuIiwKKwkJCSBpd2xfZ2V0X2FnZ190eF9mYWlsX3JlYXNvbigKKwkJCQlBR0dfVFhfU1RBVEVfTEFTVF9TRU5UX1RUTF9NU0spLAorCQkJIHByaXYtPl9hZ24ucmVwbHlfYWdnX3R4X3N0YXRzLmxhc3Rfc2VudF90dGwpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHQldVxuIiwKKwkJCSBpd2xfZ2V0X2FnZ190eF9mYWlsX3JlYXNvbigKKwkJCQlBR0dfVFhfU1RBVEVfTEFTVF9TRU5UX1RSWV9DTlRfTVNLKSwKKwkJCSBwcml2LT5fYWduLnJlcGx5X2FnZ190eF9zdGF0cy5sYXN0X3NlbnRfdHJ5KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIlczpcdFx0JXVcbiIsCisJCQkgaXdsX2dldF9hZ2dfdHhfZmFpbF9yZWFzb24oCisJCQkJQUdHX1RYX1NUQVRFX0xBU1RfU0VOVF9CVF9LSUxMX01TSyksCisJCQkgcHJpdi0+X2Fnbi5yZXBseV9hZ2dfdHhfc3RhdHMubGFzdF9zZW50X2J0X2tpbGwpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAorCQkJIGl3bF9nZXRfYWdnX3R4X2ZhaWxfcmVhc29uKEFHR19UWF9TVEFURV9TQ0RfUVVFUllfTVNLKSwKKwkJCSBwcml2LT5fYWduLnJlcGx5X2FnZ190eF9zdGF0cy5zY2RfcXVlcnkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHQldVxuIiwKKwkJCSBpd2xfZ2V0X2FnZ190eF9mYWlsX3JlYXNvbigKKwkJCQlBR0dfVFhfU1RBVEVfVEVTVF9CQURfQ1JDMzJfTVNLKSwKKwkJCSBwcml2LT5fYWduLnJlcGx5X2FnZ190eF9zdGF0cy5iYWRfY3JjMzIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAorCQkJIGl3bF9nZXRfYWdnX3R4X2ZhaWxfcmVhc29uKEFHR19UWF9TVEFURV9SRVNQT05TRV9NU0spLAorCQkJIHByaXYtPl9hZ24ucmVwbHlfYWdnX3R4X3N0YXRzLnJlc3BvbnNlKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIlczpcdFx0XHQldVxuIiwKKwkJCSBpd2xfZ2V0X2FnZ190eF9mYWlsX3JlYXNvbihBR0dfVFhfU1RBVEVfRFVNUF9UWF9NU0spLAorCQkJIHByaXYtPl9hZ24ucmVwbHlfYWdnX3R4X3N0YXRzLmR1bXBfdHgpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAorCQkJIGl3bF9nZXRfYWdnX3R4X2ZhaWxfcmVhc29uKEFHR19UWF9TVEFURV9ERUxBWV9UWF9NU0spLAorCQkJIHByaXYtPl9hZ24ucmVwbHlfYWdnX3R4X3N0YXRzLmRlbGF5X3R4KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJVTktOT1dOOlx0XHRcdCV1XG4iLAorCQkJIHByaXYtPl9hZ24ucmVwbHlfYWdnX3R4X3N0YXRzLnVua25vd24pOworCisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfc2Vuc2l0aXZpdHlfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKQEAgLTEyNjgsOCArMjIzOCw3IEBACiAJaWYgKHNzY2FuZihidWYsICIlZCIsICZjc3IpICE9IDEpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPmR1bXBfY3NyKQotCQlwcml2LT5jZmctPm9wcy0+bGliLT5kdW1wX2Nzcihwcml2KTsKKwlpd2xfZHVtcF9jc3IocHJpdik7CiAKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0xMzU5LDEzICsyMzI4LDExIEBACiAJaW50IHBvcyA9IDA7CiAJc3NpemVfdCByZXQgPSAtRUZBVUxUOwogCi0JaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPmR1bXBfZmgpIHsKLQkJcmV0ID0gcG9zID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZHVtcF9maChwcml2LCAmYnVmLCB0cnVlKTsKLQkJaWYgKGJ1ZikgewotCQkJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsCi0JCQkJCQkgICAgICBjb3VudCwgcHBvcywgYnVmLCBwb3MpOwotCQkJa2ZyZWUoYnVmKTsKLQkJfQorCXJldCA9IHBvcyA9IGl3bF9kdW1wX2ZoKHByaXYsICZidWYsIHRydWUpOworCWlmIChidWYpIHsKKwkJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsCisJCQkJCSAgICAgIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7CisJCWtmcmVlKGJ1Zik7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTE1MzEsMTYgKzI0OTgsNiBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX3Vjb2RlX2J0X3N0YXRzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQotCXJldHVybiBwcml2LT5jZmctPm9wcy0+bGliLT5kZWJ1Z2ZzX29wcy5idF9zdGF0c19yZWFkKGZpbGUsCi0JCQl1c2VyX2J1ZiwgY291bnQsIHBwb3MpOwotfQotCiBzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfd2RfdGltZW91dF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQkJY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAogCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykgewpAQCAtMTU3MiwxMiArMjUyOSwxMCBAQAogCWludCBwb3MgPSAwOwogCWNoYXIgYnVmWzIwMF07CiAJY29uc3Qgc2l6ZV90IGJ1ZnN6ID0gc2l6ZW9mKGJ1Zik7Ci0Jc3NpemVfdCByZXQ7CiAKIAlpZiAoIXByaXYtPmJ0X2VuYWJsZV9mbGFnKSB7CiAJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIkJUIGNvZXggZGlzYWJsZWRcbiIpOwotCQlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKLQkJcmV0dXJuIHJldDsKKwkJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOwogCX0KIAlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJCVCBlbmFibGUgZmxhZzogMHgleFxuIiwKIAkJcHJpdi0+YnRfZW5hYmxlX2ZsYWcpOwpAQCAtMTYwOCw4ICsyNTYzLDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc19wcm90ZWN0aW9uX21vZGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKQEAgLTE2NTgsMTggKzI2MTIsNiBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX3JlcGx5X3R4X2Vycm9yX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0JaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPmRlYnVnZnNfb3BzLnJlcGx5X3R4X2Vycm9yKQotCQlyZXR1cm4gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZGVidWdmc19vcHMucmVwbHlfdHhfZXJyb3IoCi0JCQlmaWxlLCB1c2VyX2J1ZiwgY291bnQsIHBwb3MpOwotCWVsc2UKLQkJcmV0dXJuIC1FTk9EQVRBOwotfQogREVCVUdGU19SRUFEX0ZJTEVfT1BTKHJ4X3N0YXRpc3RpY3MpOwogREVCVUdGU19SRUFEX0ZJTEVfT1BTKHR4X3N0YXRpc3RpY3MpOwogREVCVUdGU19SRUFEX1dSSVRFX0ZJTEVfT1BTKHRyYWZmaWNfbG9nKTsKQEAgLTE3MzEsMTEgKzI2NzMsOCBAQAogCURFQlVHRlNfQUREX0ZJTEUoc3RhdHVzLCBkaXJfZGF0YSwgU19JUlVTUik7CiAJREVCVUdGU19BRERfRklMRShpbnRlcnJ1cHQsIGRpcl9kYXRhLCBTX0lXVVNSIHwgU19JUlVTUik7CiAJREVCVUdGU19BRERfRklMRShxb3MsIGRpcl9kYXRhLCBTX0lSVVNSKTsKLQlpZiAoIXByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPmJyb2tlbl9wb3dlcnNhdmUpIHsKLQkJREVCVUdGU19BRERfRklMRShzbGVlcF9sZXZlbF9vdmVycmlkZSwgZGlyX2RhdGEsCi0JCQkJIFNfSVdVU1IgfCBTX0lSVVNSKTsKLQkJREVCVUdGU19BRERfRklMRShjdXJyZW50X3NsZWVwX2NvbW1hbmQsIGRpcl9kYXRhLCBTX0lSVVNSKTsKLQl9CisJREVCVUdGU19BRERfRklMRShzbGVlcF9sZXZlbF9vdmVycmlkZSwgZGlyX2RhdGEsIFNfSVdVU1IgfCBTX0lSVVNSKTsKKwlERUJVR0ZTX0FERF9GSUxFKGN1cnJlbnRfc2xlZXBfY29tbWFuZCwgZGlyX2RhdGEsIFNfSVJVU1IpOwogCURFQlVHRlNfQUREX0ZJTEUodGhlcm1hbF90aHJvdHRsaW5nLCBkaXJfZGF0YSwgU19JUlVTUik7CiAJREVCVUdGU19BRERfRklMRShkaXNhYmxlX2h0NDAsIGRpcl9kYXRhLCBTX0lXVVNSIHwgU19JUlVTUik7CiAJREVCVUdGU19BRERfRklMRShyeF9zdGF0aXN0aWNzLCBkaXJfZGVidWcsIFNfSVJVU1IpOwpAQCAtMTc1OCwyOSArMjY5NywyMCBAQAogCQlERUJVR0ZTX0FERF9GSUxFKHR4Zmlmb19mbHVzaCwgZGlyX2RlYnVnLCBTX0lXVVNSKTsKIAlERUJVR0ZTX0FERF9GSUxFKHByb3RlY3Rpb25fbW9kZSwgZGlyX2RlYnVnLCBTX0lXVVNSIHwgU19JUlVTUik7CiAKLQlpZiAocHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+c2Vuc2l0aXZpdHlfY2FsaWJfYnlfZHJpdmVyKQotCQlERUJVR0ZTX0FERF9GSUxFKHNlbnNpdGl2aXR5LCBkaXJfZGVidWcsIFNfSVJVU1IpOwotCWlmIChwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5jaGFpbl9ub2lzZV9jYWxpYl9ieV9kcml2ZXIpCi0JCURFQlVHRlNfQUREX0ZJTEUoY2hhaW5fbm9pc2UsIGRpcl9kZWJ1ZywgU19JUlVTUik7Ci0JaWYgKHByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPnVjb2RlX3RyYWNpbmcpCi0JCURFQlVHRlNfQUREX0ZJTEUodWNvZGVfdHJhY2luZywgZGlyX2RlYnVnLCBTX0lXVVNSIHwgU19JUlVTUik7Ci0JaWYgKGl3bF9idF9zdGF0aXN0aWNzKHByaXYpKQotCQlERUJVR0ZTX0FERF9GSUxFKHVjb2RlX2J0X3N0YXRzLCBkaXJfZGVidWcsIFNfSVJVU1IpOworCURFQlVHRlNfQUREX0ZJTEUoc2Vuc2l0aXZpdHksIGRpcl9kZWJ1ZywgU19JUlVTUik7CisJREVCVUdGU19BRERfRklMRShjaGFpbl9ub2lzZSwgZGlyX2RlYnVnLCBTX0lSVVNSKTsKKwlERUJVR0ZTX0FERF9GSUxFKHVjb2RlX3RyYWNpbmcsIGRpcl9kZWJ1ZywgU19JV1VTUiB8IFNfSVJVU1IpOworCURFQlVHRlNfQUREX0ZJTEUodWNvZGVfYnRfc3RhdHMsIGRpcl9kZWJ1ZywgU19JUlVTUik7CiAJREVCVUdGU19BRERfRklMRShyZXBseV90eF9lcnJvciwgZGlyX2RlYnVnLCBTX0lSVVNSKTsKIAlERUJVR0ZTX0FERF9GSUxFKHJ4b25fZmxhZ3MsIGRpcl9kZWJ1ZywgU19JV1VTUik7CiAJREVCVUdGU19BRERfRklMRShyeG9uX2ZpbHRlcl9mbGFncywgZGlyX2RlYnVnLCBTX0lXVVNSKTsKIAlERUJVR0ZTX0FERF9GSUxFKHdkX3RpbWVvdXQsIGRpcl9kZWJ1ZywgU19JV1VTUik7CiAJaWYgKGl3bF9hZHZhbmNlZF9idF9jb2V4aXN0KHByaXYpKQogCQlERUJVR0ZTX0FERF9GSUxFKGJ0X3RyYWZmaWMsIGRpcl9kZWJ1ZywgU19JUlVTUik7Ci0JaWYgKHByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPnNlbnNpdGl2aXR5X2NhbGliX2J5X2RyaXZlcikKLQkJREVCVUdGU19BRERfQk9PTChkaXNhYmxlX3NlbnNpdGl2aXR5LCBkaXJfcmYsCi0JCQkJICZwcml2LT5kaXNhYmxlX3NlbnNfY2FsKTsKLQlpZiAocHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+Y2hhaW5fbm9pc2VfY2FsaWJfYnlfZHJpdmVyKQotCQlERUJVR0ZTX0FERF9CT09MKGRpc2FibGVfY2hhaW5fbm9pc2UsIGRpcl9yZiwKLQkJCQkgJnByaXYtPmRpc2FibGVfY2hhaW5fbm9pc2VfY2FsKTsKLQlpZiAocHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+dHhfcG93ZXJfYnlfZHJpdmVyKQotCQlERUJVR0ZTX0FERF9CT09MKGRpc2FibGVfdHhfcG93ZXIsIGRpcl9yZiwKLQkJCQkmcHJpdi0+ZGlzYWJsZV90eF9wb3dlcl9jYWwpOworCURFQlVHRlNfQUREX0JPT0woZGlzYWJsZV9zZW5zaXRpdml0eSwgZGlyX3JmLAorCQkJICZwcml2LT5kaXNhYmxlX3NlbnNfY2FsKTsKKwlERUJVR0ZTX0FERF9CT09MKGRpc2FibGVfY2hhaW5fbm9pc2UsIGRpcl9yZiwKKwkJCSAmcHJpdi0+ZGlzYWJsZV9jaGFpbl9ub2lzZV9jYWwpOwogCXJldHVybiAwOwogCiBlcnI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldi5oCmluZGV4IDY4Yjk1M2YuLjIxNGU0NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldi5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTI2LDcgKzI2LDYgQEAKIC8qCiAgKiBQbGVhc2UgdXNlIHRoaXMgZmlsZSAoaXdsLWRldi5oKSBmb3IgZHJpdmVyIGltcGxlbWVudGF0aW9uIGRlZmluaXRpb25zLgogICogUGxlYXNlIHVzZSBpd2wtY29tbWFuZHMuaCBmb3IgdUNvZGUgQVBJIGRlZmluaXRpb25zLgotICogUGxlYXNlIHVzZSBpd2wtNDk2NS1ody5oIGZvciBoYXJkd2FyZS1yZWxhdGVkIGRlZmluaXRpb25zLgogICovCiAKICNpZm5kZWYgX19pd2xfZGV2X2hfXwpAQCAtMTc5LDUzICsxNzgsMTIgQEAKIAogI2RlZmluZSBJV0xfTlVNX1NDQU5fUkFURVMgICAgICAgICAoMikKIAotc3RydWN0IGl3bDQ5NjVfY2hhbm5lbF90Z2RfaW5mbyB7Ci0JdTggdHlwZTsKLQlzOCBtYXhfcG93ZXI7Ci19OwotCi1zdHJ1Y3QgaXdsNDk2NV9jaGFubmVsX3RnaF9pbmZvIHsKLQlzNjQgbGFzdF9yYWRhcl90aW1lOwotfTsKLQotI2RlZmluZSBJV0w0OTY1X01BWF9SQVRFICgzMykKLQotc3RydWN0IGl3bDM5NDVfY2xpcF9ncm91cCB7Ci0JLyogbWF4aW11bSBwb3dlciBsZXZlbCB0byBwcmV2ZW50IGNsaXBwaW5nIGZvciBlYWNoIHJhdGUsIGRlcml2ZWQgYnkKLQkgKiAgIHVzIGZyb20gdGhpcyBiYW5kJ3Mgc2F0dXJhdGlvbiBwb3dlciBpbiBFRVBST00gKi8KLQljb25zdCBzOCBjbGlwX3Bvd2Vyc1tJV0xfTUFYX1JBVEVTXTsKLX07Ci0KLS8qIGN1cnJlbnQgVHggcG93ZXIgdmFsdWVzIHRvIHVzZSwgb25lIGZvciBlYWNoIHJhdGUgZm9yIGVhY2ggY2hhbm5lbC4KLSAqIHJlcXVlc3RlZCBwb3dlciBpcyBsaW1pdGVkIGJ5OgotICogLS0gcmVndWxhdG9yeSBFRVBST00gbGltaXRzIGZvciB0aGlzIGNoYW5uZWwKLSAqIC0tIGhhcmR3YXJlIGNhcGFiaWxpdGllcyAoY2xpcC1wb3dlcnMpCi0gKiAtLSBzcGVjdHJ1bSBtYW5hZ2VtZW50Ci0gKiAtLSB1c2VyIHByZWZlcmVuY2UgKGUuZy4gaXdjb25maWcpCi0gKiB3aGVuIHJlcXVlc3RlZCBwb3dlciBpcyBzZXQsIGJhc2UgcG93ZXIgaW5kZXggbXVzdCBhbHNvIGJlIHNldC4gKi8KLXN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfcG93ZXJfaW5mbyB7Ci0Jc3RydWN0IGl3bDM5NDVfdHhfcG93ZXIgdHBjOwkvKiBhY3R1YWwgcmFkaW8gYW5kIERTUCBnYWluIHNldHRpbmdzICovCi0JczggcG93ZXJfdGFibGVfaW5kZXg7CS8qIGFjdHVhbCAoY29tcGVuc3QnZCkgaW5kZXggaW50byBnYWluIHRhYmxlICovCi0JczggYmFzZV9wb3dlcl9pbmRleDsJLyogZ2FpbiBpbmRleCBmb3IgcG93ZXIgYXQgZmFjdG9yeSB0ZW1wLiAqLwotCXM4IHJlcXVlc3RlZF9wb3dlcjsJLyogcG93ZXIgKGRCbSkgcmVxdWVzdGVkIGZvciB0aGlzIGNobmwvcmF0ZSAqLwotfTsKLQotLyogY3VycmVudCBzY2FuIFR4IHBvd2VyIHZhbHVlcyB0byB1c2UsIG9uZSBmb3IgZWFjaCBzY2FuIHJhdGUgZm9yIGVhY2gKLSAqIGNoYW5uZWwuICovCi1zdHJ1Y3QgaXdsMzk0NV9zY2FuX3Bvd2VyX2luZm8gewotCXN0cnVjdCBpd2wzOTQ1X3R4X3Bvd2VyIHRwYzsJLyogYWN0dWFsIHJhZGlvIGFuZCBEU1AgZ2FpbiBzZXR0aW5ncyAqLwotCXM4IHBvd2VyX3RhYmxlX2luZGV4OwkvKiBhY3R1YWwgKGNvbXBlbnN0J2QpIGluZGV4IGludG8gZ2FpbiB0YWJsZSAqLwotCXM4IHJlcXVlc3RlZF9wb3dlcjsJLyogc2NhbiBwd3IgKGRCbSkgcmVxdWVzdGVkIGZvciBjaG5sL3JhdGUgKi8KLX07Ci0KIC8qCiAgKiBPbmUgZm9yIGVhY2ggY2hhbm5lbCwgaG9sZHMgYWxsIGNoYW5uZWwgc2V0dXAgZGF0YQogICogU29tZSBvZiB0aGUgZmllbGRzIChlLmcuIGVlcHJvbSBhbmQgZmxhZ3MvbWF4X3Bvd2VyX2F2ZykgYXJlIHJlZHVuZGFudAogICogICAgIHdpdGggb25lIGFub3RoZXIhCiAgKi8KIHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvIHsKLQlzdHJ1Y3QgaXdsNDk2NV9jaGFubmVsX3RnZF9pbmZvIHRnZDsKLQlzdHJ1Y3QgaXdsNDk2NV9jaGFubmVsX3RnaF9pbmZvIHRnaDsKIAlzdHJ1Y3QgaXdsX2VlcHJvbV9jaGFubmVsIGVlcHJvbTsJLyogRUVQUk9NIHJlZ3VsYXRvcnkgbGltaXQgKi8KIAlzdHJ1Y3QgaXdsX2VlcHJvbV9jaGFubmVsIGh0NDBfZWVwcm9tOwkvKiBFRVBST00gcmVndWxhdG9yeSBsaW1pdCBmb3IKIAkJCQkJCSAqIEhUNDAgY2hhbm5lbCAqLwpAQCAtMjQ1LDE0ICsyMDMsNiBAQAogCXM4IGh0NDBfbWF4X3Bvd2VyX2F2ZzsJLyogKGRCbSkgcmVndWwuIGVlcHJvbSwgbm9ybWFsIFR4LCBhbnkgcmF0ZSAqLwogCXU4IGh0NDBfZmxhZ3M7CQkvKiBmbGFncyBjb3BpZWQgZnJvbSBFRVBST00gKi8KIAl1OCBodDQwX2V4dGVuc2lvbl9jaGFubmVsOyAvKiBIVF9JRV9FWFRfQ0hBTk5FTF8qICovCi0KLQkvKiBSYWRpby9EU1AgZ2FpbiBzZXR0aW5ncyBmb3IgZWFjaCAibm9ybWFsIiBkYXRhIFR4IHJhdGUuCi0JICogVGhlc2UgaW5jbHVkZSwgaW4gYWRkaXRpb24gdG8gUkYgYW5kIERTUCBnYWluLCBhIGZldyBmaWVsZHMgZm9yCi0JICogICByZW1lbWJlcmluZy9tb2RpZnlpbmcgZ2FpbiBzZXR0aW5ncyAoaW5kZXhlcykuICovCi0Jc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9wb3dlcl9pbmZvIHBvd2VyX2luZm9bSVdMNDk2NV9NQVhfUkFURV07Ci0KLQkvKiBSYWRpby9EU1AgZ2FpbiBzZXR0aW5ncyBmb3IgZWFjaCBzY2FuIHJhdGUsIGZvciBkaXJlY3RlZCBzY2Fucy4gKi8KLQlzdHJ1Y3QgaXdsMzk0NV9zY2FuX3Bvd2VyX2luZm8gc2Nhbl9wd3JfaW5mb1tJV0xfTlVNX1NDQU5fUkFURVNdOwogfTsKIAogI2RlZmluZSBJV0xfVFhfRklGT19CSwkJMAkvKiBzaGFyZWQgKi8KQEAgLTI4OCwxNSArMjM4LDYgQEAKICNkZWZpbmUgSUVFRTgwMjExX0hMRU4gICAgICAgICAgICAgICAgICAoSUVFRTgwMjExXzRBRERSX0xFTikKICNkZWZpbmUgSUVFRTgwMjExX0ZSQU1FX0xFTiAgICAgICAgICAgICAoSUVFRTgwMjExX0RBVEFfTEVOICsgSUVFRTgwMjExX0hMRU4pCiAKLXN0cnVjdCBpd2xfZnJhbWUgewotCXVuaW9uIHsKLQkJc3RydWN0IGllZWU4MDIxMV9oZHIgZnJhbWU7Ci0JCXN0cnVjdCBpd2xfdHhfYmVhY29uX2NtZCBiZWFjb247Ci0JCXU4IHJhd1tJRUVFODAyMTFfRlJBTUVfTEVOXTsKLQkJdTggY21kWzM2MF07Ci0JfSB1OwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLX07CiAKICNkZWZpbmUgU0VRX1RPX1NOKHNlcSkgKCgoc2VxKSAmIElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNCkKICNkZWZpbmUgU05fVE9fU0VRKHNzbikgKCgoc3NuKSA8PCA0KSAmIElFRUU4MDIxMV9TQ1RMX1NFUSkKQEAgLTMwOSw2ICsyNTAsNyBAQAogCUNNRF9TSVpFX0hVR0UgPSAoMSA8PCAwKSwKIAlDTURfQVNZTkMgPSAoMSA8PCAxKSwKIAlDTURfV0FOVF9TS0IgPSAoMSA8PCAyKSwKKwlDTURfTUFQUEVEID0gKDEgPDwgMyksCiB9OwogCiAjZGVmaW5lIERFRl9DTURfUEFZTE9BRF9TSVpFIDMyMApAQCAtNDE2LDYgKzM1OCw3IEBACiAjZGVmaW5lIElXTF9FTVBUWUlOR19IV19RVUVVRV9BRERCQSAyCiAjZGVmaW5lIElXTF9FTVBUWUlOR19IV19RVUVVRV9ERUxCQSAzCiAJdTggc3RhdGU7CisJdTggdHhfZmlmbzsKIH07CiAKIApAQCAtNDk5LDkgKzQ0Miw2IEBACiAgKiBXaGVuIG1hYzgwMjExIGNyZWF0ZXMgYSBzdGF0aW9uIGl0IHJlc2VydmVzIHNvbWUgc3BhY2UgKGh3LT5zdGFfZGF0YV9zaXplKQogICogaW4gdGhlIHN0cnVjdHVyZSBmb3IgdXNlIGJ5IGRyaXZlci4gVGhpcyBzdHJ1Y3R1cmUgaXMgcGxhY2VzIGluIHRoYXQKICAqIHNwYWNlLgotICoKLSAqIFRoZSBjb21tb24gc3RydWN0IE1VU1QgYmUgZmlyc3QgYmVjYXVzZSBpdCBpcyBzaGFyZWQgYmV0d2VlbgotICogMzk0NSBhbmQgYWduIQogICovCiBzdHJ1Y3QgaXdsX3N0YXRpb25fcHJpdiB7CiAJc3RydWN0IGl3bF9zdGF0aW9uX3ByaXZfY29tbW9uIGNvbW1vbjsKQEAgLTUzMCw2ICs0NzAsMTAgQEAKIAl1MzIgbGVuOwkJLyogYnl0ZXMgKi8KIH07CiAKK3N0cnVjdCBmd19pbWcgeworCXN0cnVjdCBmd19kZXNjIGNvZGUsIGRhdGE7Cit9OworCiAvKiB2MS92MiB1Q29kZSBmaWxlIGxheW91dCAqLwogc3RydWN0IGl3bF91Y29kZV9oZWFkZXIgewogCV9fbGUzMiB2ZXI7CS8qIG1ham9yL21pbm9yL0FQSS9zZXJpYWwgKi8KQEAgLTU4Niw2ICs1MzAsMjIgQEAKIAlJV0xfVUNPREVfVExWX0lOSVRfRVJSTE9HX1BUUgk9IDEzLAogCUlXTF9VQ09ERV9UTFZfRU5IQU5DRV9TRU5TX1RCTAk9IDE0LAogCUlXTF9VQ09ERV9UTFZfUEhZX0NBTElCUkFUSU9OX1NJWkUgPSAxNSwKKwkvKiAxNiBhbmQgMTcgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KKwlJV0xfVUNPREVfVExWX0ZMQUdTCQk9IDE4LAorfTsKKworLyoqCisgKiBlbnVtIGl3bF91Y29kZV90bHZfZmxhZyAtIHVjb2RlIEFQSSBmbGFncworICogQElXTF9VQ09ERV9UTFZfRkxBR1NfUEFOOiBUaGlzIGlzIFBBTiBjYXBhYmxlIG1pY3JvY29kZTsgdGhpcyBwcmV2aW91c2x5CisgKgl3YXMgYSBzZXBhcmF0ZSBUTFYgYnV0IG1vdmVkIGhlcmUgdG8gc2F2ZSBzcGFjZS4KKyAqIEBJV0xfVUNPREVfVExWX0ZMQUdTX05FV1NDQU46IG5ldyB1Q29kZSBzY2FuIGJlaGF2aW91ciBvbiBoaWRkZW4gU1NJRCwKKyAqCXRyZWF0cyBnb29kIENSQyB0aHJlc2hvbGQgYXMgYSBib29sZWFuCisgKiBASVdMX1VDT0RFX1RMVl9GTEFHU19NRlA6IFRoaXMgdUNvZGUgaW1hZ2Ugc3VwcG9ydHMgTUZQICg4MDIuMTF3KS4KKyAqLworZW51bSBpd2xfdWNvZGVfdGx2X2ZsYWcgeworCUlXTF9VQ09ERV9UTFZfRkxBR1NfUEFOCQk9IEJJVCgwKSwKKwlJV0xfVUNPREVfVExWX0ZMQUdTX05FV1NDQU4JPSBCSVQoMSksCisJSVdMX1VDT0RFX1RMVl9GTEFHU19NRlAJCT0gQklUKDIpLAogfTsKIAogc3RydWN0IGl3bF91Y29kZV90bHYgewpAQCAtNjE5LDE0ICs1NzksNiBAQAogCXU4IGRhdGFbMF07CiB9OwogCi1zdHJ1Y3QgaXdsNDk2NV9pYnNzX3NlcSB7Ci0JdTggbWFjW0VUSF9BTEVOXTsKLQl1MTYgc2VxX251bTsKLQl1MTYgZnJhZ19udW07Ci0JdW5zaWduZWQgbG9uZyBwYWNrZXRfdGltZTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci19OwotCiBzdHJ1Y3QgaXdsX3NlbnNpdGl2aXR5X3JhbmdlcyB7CiAJdTE2IG1pbl9ucmdfY2NrOwogCXUxNiBtYXhfbnJnX2NjazsKQEAgLTcwMCw3ICs2NTIsNiBAQAogCXU4ICBtYXhfYmVhY29uX2l0cnZsOwkvKiBpbiAxMDI0IG1zICovCiAJdTMyIG1heF9pbnN0X3NpemU7CiAJdTMyIG1heF9kYXRhX3NpemU7Ci0JdTMyIG1heF9ic21fc2l6ZTsKIAl1MzIgY3Rfa2lsbF90aHJlc2hvbGQ7IC8qIHZhbHVlIGluIGh3LWRlcGVuZGVudCB1bml0cyAqLwogCXUzMiBjdF9raWxsX2V4aXRfdGhyZXNob2xkOyAvKiB2YWx1ZSBpbiBody1kZXBlbmRlbnQgdW5pdHMgKi8KIAkJCQkgICAgLyogZm9yIDEwMDAsIDYwMDAgc2VyaWVzIGFuZCB1cCAqLwpAQCAtNzIyLDggKzY3Myw2IEBACiAgKiBOYW1pbmcgY29udmVudGlvbiAtLQogICogaXdsXyAgICAgICAgIDwtLSBJcyBwYXJ0IG9mIGl3bHdpZmkKICAqIGl3bFhYWFhfICAgICA8LS0gSGFyZHdhcmUgc3BlY2lmaWMgKGltcGxlbWVudGVkIGluIGl3bC1YWFhYLmMgZm9yIFhYWFgpCi0gKiBpd2w0OTY1X2JnXyAgICAgIDwtLSBDYWxsZWQgZnJvbSB3b3JrIHF1ZXVlIGNvbnRleHQKLSAqIGl3bDQ5NjVfbWFjXyAgICAgPC0tIG1hYzgwMjExIGNhbGxiYWNrCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBleHRlcm4gdm9pZCBpd2xfdXBkYXRlX2NoYWluX2ZsYWdzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CkBAIC03NzIsNyArNzIxLDYgQEAKIAogLyogU2Vuc2l0aXZpdHkgYW5kIGNoYWluIG5vaXNlIGNhbGlicmF0aW9uICovCiAjZGVmaW5lIElOSVRJQUxJWkFUSU9OX1ZBTFVFCQkweEZGRkYKLSNkZWZpbmUgSVdMNDk2NV9DQUxfTlVNX0JFQUNPTlMJCTIwCiAjZGVmaW5lIElXTF9DQUxfTlVNX0JFQUNPTlMJCTE2CiAjZGVmaW5lIE1BWElNVU1fQUxMT1dFRF9QQVRITE9TUwkxNQogCkBAIC04MDYsMjQgKzc1NCwxOSBAQAogI2RlZmluZSBOUkdfTlVNX1BSRVZfU1RBVF9MICAgICAyMAogI2RlZmluZSBOVU1fUlhfQ0hBSU5TICAgICAgICAgICAzCiAKLWVudW0gaXdsNDk2NV9mYWxzZV9hbGFybV9zdGF0ZSB7CitlbnVtIGl3bGFnbl9mYWxzZV9hbGFybV9zdGF0ZSB7CiAJSVdMX0ZBX1RPT19NQU5ZID0gMCwKIAlJV0xfRkFfVE9PX0ZFVyA9IDEsCiAJSVdMX0ZBX0dPT0RfUkFOR0UgPSAyLAogfTsKIAotZW51bSBpd2w0OTY1X2NoYWluX25vaXNlX3N0YXRlIHsKK2VudW0gaXdsYWduX2NoYWluX25vaXNlX3N0YXRlIHsKIAlJV0xfQ0hBSU5fTk9JU0VfQUxJVkUgPSAwLCAgLyogbXVzdCBiZSAwICovCiAJSVdMX0NIQUlOX05PSVNFX0FDQ1VNVUxBVEUsCiAJSVdMX0NIQUlOX05PSVNFX0NBTElCUkFURUQsCiAJSVdMX0NIQUlOX05PSVNFX0RPTkUsCiB9OwogCi1lbnVtIGl3bDQ5NjVfY2FsaWJfZW5hYmxlZF9zdGF0ZSB7Ci0JSVdMX0NBTElCX0RJU0FCTEVEID0gMCwgIC8qIG11c3QgYmUgMCAqLwotCUlXTF9DQUxJQl9FTkFCTEVEID0gMSwKLX07Ci0KIAogLyoKICAqIGVudW0gaXdsX2NhbGliCkBAIC04NDcsMTIgKzc5MCw2IEBACiAJc2l6ZV90IGJ1Zl9sZW47CiB9OwogCi1lbnVtIHVjb2RlX3R5cGUgewotCVVDT0RFX05PTkUgPSAwLAotCVVDT0RFX0lOSVQsCi0JVUNPREVfUlQKLX07Ci0KIC8qIFNlbnNpdGl2aXR5IGNhbGliIGRhdGEgKi8KIHN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfZGF0YSB7CiAJdTMyIGF1dG9fY29ycl9vZmRtOwpAQCAtMTEzMSwxMiArMTA2OCw2IEBACiAKIC8qIGV4dGVuZCBiZWFjb24gdGltZSBmb3JtYXQgYml0IHNoaWZ0aW5nICAqLwogLyoKLSAqIGZvciBfMzk0NSBkZXZpY2VzCi0gKiBiaXRzIDMxOjI0IC0gZXh0ZW5kZWQKLSAqIGJpdHMgMjM6MCAgLSBpbnRlcnZhbAotICovCi0jZGVmaW5lIElXTDM5NDVfRVhUX0JFQUNPTl9USU1FX1BPUwkyNAotLyoKICAqIGZvciBfYWduIGRldmljZXMKICAqIGJpdHMgMzE6MjIgLSBleHRlbmRlZAogICogYml0cyAyMTowICAtIGludGVydmFsCkBAIC0xMTY0LDEwICsxMDk1LDEyIEBACiBzdHJ1Y3QgaXdsX25vdGlmaWNhdGlvbl93YWl0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAKLQl2b2lkICgqZm4pKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCk7CisJdm9pZCAoKmZuKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QsCisJCSAgIHZvaWQgKmRhdGEpOworCXZvaWQgKmZuX2RhdGE7CiAKIAl1OCBjbWQ7Ci0JYm9vbCB0cmlnZ2VyZWQ7CisJYm9vbCB0cmlnZ2VyZWQsIGFib3J0ZWQ7CiB9OwogCiBlbnVtIGl3bF9yeG9uX2NvbnRleHRfaWQgewpAQCAtMTIyOCw2ICsxMTYxLDggQEAKIAkJYm9vbCBlbmFibGVkLCBpc180MG1oejsKIAkJdTggZXh0ZW5zaW9uX2NoYW5fb2Zmc2V0OwogCX0gaHQ7CisKKwlib29sIGxhc3RfdHhfcmVqZWN0ZWQ7CiB9OwogCiBlbnVtIGl3bF9zY2FuX3R5cGUgewpAQCAtMTI0NCwxMyArMTE3OSwxMCBAQAogCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqaWVlZV9yYXRlczsKIAlzdHJ1Y3QgaXdsX2NmZyAqY2ZnOwogCi0JLyogdGVtcG9yYXJ5IGZyYW1lIHN0b3JhZ2UgbGlzdCAqLwotCXN0cnVjdCBsaXN0X2hlYWQgZnJlZV9mcmFtZXM7Ci0JaW50IGZyYW1lc19jb3VudDsKLQogCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKLQlpbnQgYWxsb2NfcnhiX3BhZ2U7CiAKKwl2b2lkICgqcHJlX3J4X2hhbmRsZXIpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4Yik7CiAJdm9pZCAoKnJ4X2hhbmRsZXJzW1JFUExZX01BWF0pKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgICAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpOwogCkBAIC0xMzA1LDE2ICsxMjM3LDEyIEBACiAJc3BpbmxvY2tfdCBoY21kX2xvY2s7CS8qIHByb3RlY3QgaGNtZCAqLwogCXNwaW5sb2NrX3QgcmVnX2xvY2s7CS8qIHByb3RlY3QgaHcgcmVnaXN0ZXIgYWNjZXNzICovCiAJc3RydWN0IG11dGV4IG11dGV4OwotCXN0cnVjdCBtdXRleCBzeW5jX2NtZF9tdXRleDsgLyogZW5hYmxlIHNlcmlhbGl6YXRpb24gb2Ygc3luYyBjb21tYW5kcyAqLwogCiAJLyogYmFzaWMgcGNpLW5ldHdvcmsgZHJpdmVyIHN0dWZmICovCiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CiAKIAkvKiBwY2kgaGFyZHdhcmUgYWRkcmVzcyBzdXBwb3J0ICovCiAJdm9pZCBfX2lvbWVtICpod19iYXNlOwotCXUzMiAgaHdfcmV2OwotCXUzMiAgaHdfd2FfcmV2OwotCXU4ICAgcmV2X2lkOwogCiAJLyogbWljcm9jb2RlL2RldmljZSBzdXBwb3J0cyBtdWx0aXBsZSBjb250ZXh0cyAqLwogCXU4IHZhbGlkX2NvbnRleHRzOwpAQCAtMTMyNSw2ICsxMjUzLDggQEAKIAkvKiBtYXggbnVtYmVyIG9mIHN0YXRpb24ga2V5cyAqLwogCXU4IHN0YV9rZXlfbWF4X251bTsKIAorCWJvb2wgbmV3X3NjYW5fdGhyZXNob2xkX2JlaGF2aW91cjsKKwogCS8qIEVFUFJPTSBNQUMgYWRkcmVzc2VzICovCiAJc3RydWN0IG1hY19hZGRyZXNzIGFkZHJlc3Nlc1syXTsKIApAQCAtMTMzMiwxMyArMTI2MiwxMCBAQAogCWludCBmd19pbmRleDsJCQkvKiBmaXJtd2FyZSB3ZSdyZSB0cnlpbmcgdG8gbG9hZCAqLwogCXUzMiB1Y29kZV92ZXI7CQkJLyogdmVyc2lvbiBvZiB1Y29kZSwgY29weSBvZgogCQkJCQkgICBpd2xfdWNvZGUudmVyICovCi0Jc3RydWN0IGZ3X2Rlc2MgdWNvZGVfY29kZTsJLyogcnVudGltZSBpbnN0ICovCi0Jc3RydWN0IGZ3X2Rlc2MgdWNvZGVfZGF0YTsJLyogcnVudGltZSBkYXRhIG9yaWdpbmFsICovCi0Jc3RydWN0IGZ3X2Rlc2MgdWNvZGVfZGF0YV9iYWNrdXA7CS8qIHJ1bnRpbWUgZGF0YSBzYXZlL3Jlc3RvcmUgKi8KLQlzdHJ1Y3QgZndfZGVzYyB1Y29kZV9pbml0OwkvKiBpbml0aWFsaXphdGlvbiBpbnN0ICovCi0Jc3RydWN0IGZ3X2Rlc2MgdWNvZGVfaW5pdF9kYXRhOwkvKiBpbml0aWFsaXphdGlvbiBkYXRhICovCi0Jc3RydWN0IGZ3X2Rlc2MgdWNvZGVfYm9vdDsJLyogYm9vdHN0cmFwIGluc3QgKi8KLQllbnVtIHVjb2RlX3R5cGUgdWNvZGVfdHlwZTsKKwlzdHJ1Y3QgZndfaW1nIHVjb2RlX3J0OworCXN0cnVjdCBmd19pbWcgdWNvZGVfaW5pdDsKKworCWVudW0gaXdsYWduX3Vjb2RlX3N1YnR5cGUgdWNvZGVfdHlwZTsKIAl1OCB1Y29kZV93cml0ZV9jb21wbGV0ZTsJLyogdGhlIGltYWdlIHdyaXRlIGlzIGNvbXBsZXRlICovCiAJY2hhciBmaXJtd2FyZV9uYW1lWzI1XTsKIApAQCAtMTM0NiwxMCArMTI3MywxMCBAQAogCiAJc3RydWN0IGl3bF9zd2l0Y2hfcnhvbiBzd2l0Y2hfcnhvbjsKIAotCS8qIDFzdCByZXNwb25zZXMgZnJvbSBpbml0aWFsaXplIGFuZCBydW50aW1lIHVDb2RlIGltYWdlcy4KLQkgKiBfYWduJ3MgaW5pdGlhbGl6ZSBhbGl2ZSByZXNwb25zZSBjb250YWlucyBzb21lIGNhbGlicmF0aW9uIGRhdGEuICovCi0Jc3RydWN0IGl3bF9pbml0X2FsaXZlX3Jlc3AgY2FyZF9hbGl2ZV9pbml0OwotCXN0cnVjdCBpd2xfYWxpdmVfcmVzcCBjYXJkX2FsaXZlOworCXN0cnVjdCB7CisJCXUzMiBlcnJvcl9ldmVudF90YWJsZTsKKwkJdTMyIGxvZ19ldmVudF90YWJsZTsKKwl9IGRldmljZV9wb2ludGVyczsKIAogCXUxNiBhY3RpdmVfcmF0ZTsKIApAQCAtMTM5MCwxNSArMTMxNywxMiBAQAogCXN0cnVjdCBpd2xfcG93ZXJfbWdyIHBvd2VyX2RhdGE7CiAJc3RydWN0IGl3bF90dF9tZ210IHRoZXJtYWxfdGhyb3R0bGU7CiAKLQkvKiBjb250ZXh0IGluZm9ybWF0aW9uICovCi0JdTggYnNzaWRbRVRIX0FMRU5dOyAvKiB1c2VkIG9ubHkgb24gMzk0NSBidXQgZmlsbGVkIGJ5IGNvcmUgKi8KLQogCS8qIHN0YXRpb24gdGFibGUgdmFyaWFibGVzICovCiAKIAkvKiBOb3RlOiBpZiBsb2NrIGFuZCBzdGFfbG9jayBhcmUgbmVlZGVkLCBsb2NrIG11c3QgYmUgYWNxdWlyZWQgZmlyc3QgKi8KIAlzcGlubG9ja190IHN0YV9sb2NrOwogCWludCBudW1fc3RhdGlvbnM7Ci0Jc3RydWN0IGl3bF9zdGF0aW9uX2VudHJ5IHN0YXRpb25zW0lXTF9TVEFUSU9OX0NPVU5UXTsKKwlzdHJ1Y3QgaXdsX3N0YXRpb25fZW50cnkgc3RhdGlvbnNbSVdMQUdOX1NUQVRJT05fQ09VTlRdOwogCXVuc2lnbmVkIGxvbmcgdWNvZGVfa2V5X3RhYmxlOwogCiAJLyogcXVldWUgcmVmY291bnRzICovCkBAIC0xNDIyLDEwMSArMTM0Niw4MSBAQAogCS8qIExhc3QgUngnZCBiZWFjb24gdGltZXN0YW1wICovCiAJdTY0IHRpbWVzdGFtcDsKIAotCXVuaW9uIHsKLSNpZiBkZWZpbmVkKENPTkZJR19JV0wzOTQ1KSB8fCBkZWZpbmVkKENPTkZJR19JV0wzOTQ1X01PRFVMRSkKLQkJc3RydWN0IHsKLQkJCXZvaWQgKnNoYXJlZF92aXJ0OwotCQkJZG1hX2FkZHJfdCBzaGFyZWRfcGh5czsKLQotCQkJc3RydWN0IGRlbGF5ZWRfd29yayB0aGVybWFsX3BlcmlvZGljOwotCQkJc3RydWN0IGRlbGF5ZWRfd29yayByZmtpbGxfcG9sbDsKLQotCQkJc3RydWN0IGl3bDM5NDVfbm90aWZfc3RhdGlzdGljcyBzdGF0aXN0aWNzOworCXN0cnVjdCB7CisJCV9fbGUzMiBmbGFnOworCQlzdHJ1Y3Qgc3RhdGlzdGljc19nZW5lcmFsX2NvbW1vbiBjb21tb247CisJCXN0cnVjdCBzdGF0aXN0aWNzX3J4X25vbl9waHkgcnhfbm9uX3BoeTsKKwkJc3RydWN0IHN0YXRpc3RpY3NfcnhfcGh5IHJ4X29mZG07CisJCXN0cnVjdCBzdGF0aXN0aWNzX3J4X2h0X3BoeSByeF9vZmRtX2h0OworCQlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9waHkgcnhfY2NrOworCQlzdHJ1Y3Qgc3RhdGlzdGljc190eCB0eDsKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVR0ZTCi0JCQlzdHJ1Y3QgaXdsMzk0NV9ub3RpZl9zdGF0aXN0aWNzIGFjY3VtX3N0YXRpc3RpY3M7Ci0JCQlzdHJ1Y3QgaXdsMzk0NV9ub3RpZl9zdGF0aXN0aWNzIGRlbHRhX3N0YXRpc3RpY3M7Ci0JCQlzdHJ1Y3QgaXdsMzk0NV9ub3RpZl9zdGF0aXN0aWNzIG1heF9kZWx0YTsKKwkJc3RydWN0IHN0YXRpc3RpY3NfYnRfYWN0aXZpdHkgYnRfYWN0aXZpdHk7CisJCV9fbGUzMiBudW1fYnRfa2lsbHMsIGFjY3VtX251bV9idF9raWxsczsKICNlbmRpZgotCi0JCQl1MzIgc3RhX3N1cHBfcmF0ZXM7Ci0JCQlpbnQgbGFzdF9yeF9yc3NpOwkvKiBGcm9tIFJ4IHBhY2tldCBzdGF0aXN0aWNzICovCi0KLQkJCS8qIFJ4J2QgcGFja2V0IHRpbWluZyBpbmZvcm1hdGlvbiAqLwotCQkJdTMyIGxhc3RfYmVhY29uX3RpbWU7Ci0JCQl1NjQgbGFzdF90c2Y7Ci0KLQkJCS8qCi0JCQkgKiBlYWNoIGNhbGlicmF0aW9uIGNoYW5uZWwgZ3JvdXAgaW4gdGhlCi0JCQkgKiBFRVBST00gaGFzIGEgZGVyaXZlZCBjbGlwIHNldHRpbmcgZm9yCi0JCQkgKiBlYWNoIHJhdGUuCi0JCQkgKi8KLQkJCWNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NsaXBfZ3JvdXAgY2xpcF9ncm91cHNbNV07Ci0KLQkJfSBfMzk0NTsKLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX0lXTEFHTikgfHwgZGVmaW5lZChDT05GSUdfSVdMQUdOX01PRFVMRSkKLQkJc3RydWN0IHsKLQkJCS8qIElOVCBJQ1QgVGFibGUgKi8KLQkJCV9fbGUzMiAqaWN0X3RibDsKLQkJCXZvaWQgKmljdF90YmxfdmlyOwotCQkJZG1hX2FkZHJfdCBpY3RfdGJsX2RtYTsKLQkJCWRtYV9hZGRyX3QgYWxpZ25lZF9pY3RfdGJsX2RtYTsKLQkJCWludCBpY3RfaW5kZXg7Ci0JCQl1MzIgaW50YTsKLQkJCWJvb2wgdXNlX2ljdDsKLQkJCS8qCi0JCQkgKiByZXBvcnRpbmcgdGhlIG51bWJlciBvZiB0aWRzIGhhcyBBR0cgb24uIDAgbWVhbnMKLQkJCSAqIG5vIEFHR1JFR0FUSU9OCi0JCQkgKi8KLQkJCXU4IGFnZ190aWRzX2NvdW50OwotCi0JCQlzdHJ1Y3QgaXdsX3J4X3BoeV9yZXMgbGFzdF9waHlfcmVzOwotCQkJYm9vbCBsYXN0X3BoeV9yZXNfdmFsaWQ7Ci0KLQkJCXN0cnVjdCBjb21wbGV0aW9uIGZpcm13YXJlX2xvYWRpbmdfY29tcGxldGU7Ci0KLQkJCXUzMiBpbml0X2V2dGxvZ19wdHIsIGluaXRfZXZ0bG9nX3NpemUsIGluaXRfZXJybG9nX3B0cjsKLQkJCXUzMiBpbnN0X2V2dGxvZ19wdHIsIGluc3RfZXZ0bG9nX3NpemUsIGluc3RfZXJybG9nX3B0cjsKLQotCQkJLyoKLQkJCSAqIGNoYWluIG5vaXNlIHJlc2V0IGFuZCBnYWluIGNvbW1hbmRzIGFyZSB0aGUKLQkJCSAqIHR3byBleHRyYSBjYWxpYnJhdGlvbiBjb21tYW5kcyBmb2xsb3dzIHRoZSBzdGFuZGFyZAotCQkJICogcGh5IGNhbGlicmF0aW9uIGNvbW1hbmRzCi0JCQkgKi8KLQkJCXU4IHBoeV9jYWxpYl9jaGFpbl9ub2lzZV9yZXNldF9jbWQ7Ci0JCQl1OCBwaHlfY2FsaWJfY2hhaW5fbm9pc2VfZ2Fpbl9jbWQ7Ci0KLQkJCXN0cnVjdCBpd2xfbm90aWZfc3RhdGlzdGljcyBzdGF0aXN0aWNzOwotCQkJc3RydWN0IGl3bF9idF9ub3RpZl9zdGF0aXN0aWNzIHN0YXRpc3RpY3NfYnQ7Ci0JCQkvKiBjb3VudHMgcmVwbHlfdHggZXJyb3IgKi8KLQkJCXN0cnVjdCByZXBseV90eF9lcnJvcl9zdGF0aXN0aWNzIHJlcGx5X3R4X3N0YXRzOwotCQkJc3RydWN0IHJlcGx5X2FnZ190eF9lcnJvcl9zdGF0aXN0aWNzIHJlcGx5X2FnZ190eF9zdGF0czsKKwl9IHN0YXRpc3RpY3M7CiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUdGUwotCQkJc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzIGFjY3VtX3N0YXRpc3RpY3M7Ci0JCQlzdHJ1Y3QgaXdsX25vdGlmX3N0YXRpc3RpY3MgZGVsdGFfc3RhdGlzdGljczsKLQkJCXN0cnVjdCBpd2xfbm90aWZfc3RhdGlzdGljcyBtYXhfZGVsdGE7Ci0JCQlzdHJ1Y3QgaXdsX2J0X25vdGlmX3N0YXRpc3RpY3MgYWNjdW1fc3RhdGlzdGljc19idDsKLQkJCXN0cnVjdCBpd2xfYnRfbm90aWZfc3RhdGlzdGljcyBkZWx0YV9zdGF0aXN0aWNzX2J0OwotCQkJc3RydWN0IGl3bF9idF9ub3RpZl9zdGF0aXN0aWNzIG1heF9kZWx0YV9idDsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3Qgc3RhdGlzdGljc19nZW5lcmFsX2NvbW1vbiBjb21tb247CisJCXN0cnVjdCBzdGF0aXN0aWNzX3J4X25vbl9waHkgcnhfbm9uX3BoeTsKKwkJc3RydWN0IHN0YXRpc3RpY3NfcnhfcGh5IHJ4X29mZG07CisJCXN0cnVjdCBzdGF0aXN0aWNzX3J4X2h0X3BoeSByeF9vZmRtX2h0OworCQlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9waHkgcnhfY2NrOworCQlzdHJ1Y3Qgc3RhdGlzdGljc190eCB0eDsKKwkJc3RydWN0IHN0YXRpc3RpY3NfYnRfYWN0aXZpdHkgYnRfYWN0aXZpdHk7CisJfSBhY2N1bV9zdGF0cywgZGVsdGFfc3RhdHMsIG1heF9kZWx0YV9zdGF0czsKICNlbmRpZgogCi0JCQkvKiBub3RpZmljYXRpb24gd2FpdCBzdXBwb3J0ICovCi0JCQlzdHJ1Y3QgbGlzdF9oZWFkIG5vdGlmX3dhaXRzOwotCQkJc3BpbmxvY2tfdCBub3RpZl93YWl0X2xvY2s7Ci0JCQl3YWl0X3F1ZXVlX2hlYWRfdCBub3RpZl93YWl0cTsKKwlzdHJ1Y3QgeworCQkvKiBJTlQgSUNUIFRhYmxlICovCisJCV9fbGUzMiAqaWN0X3RibDsKKwkJdm9pZCAqaWN0X3RibF92aXI7CisJCWRtYV9hZGRyX3QgaWN0X3RibF9kbWE7CisJCWRtYV9hZGRyX3QgYWxpZ25lZF9pY3RfdGJsX2RtYTsKKwkJaW50IGljdF9pbmRleDsKKwkJdTMyIGludGE7CisJCWJvb2wgdXNlX2ljdDsKKwkJLyoKKwkJICogcmVwb3J0aW5nIHRoZSBudW1iZXIgb2YgdGlkcyBoYXMgQUdHIG9uLiAwIG1lYW5zCisJCSAqIG5vIEFHR1JFR0FUSU9OCisJCSAqLworCQl1OCBhZ2dfdGlkc19jb3VudDsKIAotCQkJLyogcmVtYWluLW9uLWNoYW5uZWwgb2ZmbG9hZCBzdXBwb3J0ICovCi0JCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmh3X3JvY19jaGFubmVsOwotCQkJc3RydWN0IGRlbGF5ZWRfd29yayBod19yb2Nfd29yazsKLQkJCWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgaHdfcm9jX2NoYW50eXBlOwotCQkJaW50IGh3X3JvY19kdXJhdGlvbjsKKwkJc3RydWN0IGl3bF9yeF9waHlfcmVzIGxhc3RfcGh5X3JlczsKKwkJYm9vbCBsYXN0X3BoeV9yZXNfdmFsaWQ7CiAKLQkJCXN0cnVjdCBza19idWZmICpvZmZjaGFuX3R4X3NrYjsKLQkJCWludCBvZmZjaGFuX3R4X3RpbWVvdXQ7Ci0JCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKm9mZmNoYW5fdHhfY2hhbjsKLQkJfSBfYWduOwotI2VuZGlmCi0JfTsKKwkJc3RydWN0IGNvbXBsZXRpb24gZmlybXdhcmVfbG9hZGluZ19jb21wbGV0ZTsKKworCQl1MzIgaW5pdF9ldnRsb2dfcHRyLCBpbml0X2V2dGxvZ19zaXplLCBpbml0X2VycmxvZ19wdHI7CisJCXUzMiBpbnN0X2V2dGxvZ19wdHIsIGluc3RfZXZ0bG9nX3NpemUsIGluc3RfZXJybG9nX3B0cjsKKworCQkvKgorCQkgKiBjaGFpbiBub2lzZSByZXNldCBhbmQgZ2FpbiBjb21tYW5kcyBhcmUgdGhlCisJCSAqIHR3byBleHRyYSBjYWxpYnJhdGlvbiBjb21tYW5kcyBmb2xsb3dzIHRoZSBzdGFuZGFyZAorCQkgKiBwaHkgY2FsaWJyYXRpb24gY29tbWFuZHMKKwkJICovCisJCXU4IHBoeV9jYWxpYl9jaGFpbl9ub2lzZV9yZXNldF9jbWQ7CisJCXU4IHBoeV9jYWxpYl9jaGFpbl9ub2lzZV9nYWluX2NtZDsKKworCQkvKiBjb3VudHMgcmVwbHlfdHggZXJyb3IgKi8KKwkJc3RydWN0IHJlcGx5X3R4X2Vycm9yX3N0YXRpc3RpY3MgcmVwbHlfdHhfc3RhdHM7CisJCXN0cnVjdCByZXBseV9hZ2dfdHhfZXJyb3Jfc3RhdGlzdGljcyByZXBseV9hZ2dfdHhfc3RhdHM7CisJCS8qIG5vdGlmaWNhdGlvbiB3YWl0IHN1cHBvcnQgKi8KKwkJc3RydWN0IGxpc3RfaGVhZCBub3RpZl93YWl0czsKKwkJc3BpbmxvY2tfdCBub3RpZl93YWl0X2xvY2s7CisJCXdhaXRfcXVldWVfaGVhZF90IG5vdGlmX3dhaXRxOworCisJCS8qIHJlbWFpbi1vbi1jaGFubmVsIG9mZmxvYWQgc3VwcG9ydCAqLworCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmh3X3JvY19jaGFubmVsOworCQlzdHJ1Y3QgZGVsYXllZF93b3JrIGh3X3JvY193b3JrOworCQllbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGh3X3JvY19jaGFudHlwZTsKKwkJaW50IGh3X3JvY19kdXJhdGlvbjsKKwkJYm9vbCBod19yb2Nfc2V0dXA7CisKKwkJc3RydWN0IHNrX2J1ZmYgKm9mZmNoYW5fdHhfc2tiOworCQlpbnQgb2ZmY2hhbl90eF90aW1lb3V0OworCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKm9mZmNoYW5fdHhfY2hhbjsKKwl9IF9hZ247CiAKIAkvKiBidCBjb2V4ICovCiAJdTggYnRfZW5hYmxlX2ZsYWc7CkBAIC0xNTU5LDggKzE0NjMsNiBAQAogCiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IGlycV90YXNrbGV0OwogCi0Jc3RydWN0IGRlbGF5ZWRfd29yayBpbml0X2FsaXZlX3N0YXJ0OwotCXN0cnVjdCBkZWxheWVkX3dvcmsgYWxpdmVfc3RhcnQ7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBzY2FuX2NoZWNrOwogCiAJLyogVFggUG93ZXIgKi8KQEAgLTE1ODksMTIgKzE0OTEsMTAgQEAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHhwb3dlcl93b3JrOwogCXUzMiBkaXNhYmxlX3NlbnNfY2FsOwogCXUzMiBkaXNhYmxlX2NoYWluX25vaXNlX2NhbDsKLQl1MzIgZGlzYWJsZV90eF9wb3dlcl9jYWw7CiAJc3RydWN0IHdvcmtfc3RydWN0IHJ1bl90aW1lX2NhbGliX3dvcms7CiAJc3RydWN0IHRpbWVyX2xpc3Qgc3RhdGlzdGljc19wZXJpb2RpYzsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB1Y29kZV90cmFjZTsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB3YXRjaGRvZzsKLQlib29sIGh3X3JlYWR5OwogCiAJc3RydWN0IGl3bF9ldmVudF9sb2cgZXZlbnRfbG9nOwogCkBAIC0xNjU4LDIxICsxNTU4LDI0IEBACiAJICAgICBjdHggPCAmcHJpdi0+Y29udGV4dHNbTlVNX0lXTF9SWE9OX0NUWF07IGN0eCsrKQlcCiAJCWlmIChwcml2LT52YWxpZF9jb250ZXh0cyAmIEJJVChjdHgtPmN0eGlkKSkKIAorc3RhdGljIGlubGluZSBpbnQgaXdsX2lzX2Fzc29jaWF0ZWRfY3R4KHN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHgpCit7CisJcmV0dXJuIChjdHgtPmFjdGl2ZS5maWx0ZXJfZmxhZ3MgJiBSWE9OX0ZJTFRFUl9BU1NPQ19NU0spID8gMSA6IDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGl3bF9pc19hc3NvY2lhdGVkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgICAgZW51bSBpd2xfcnhvbl9jb250ZXh0X2lkIGN0eGlkKQogewotCXJldHVybiAocHJpdi0+Y29udGV4dHNbY3R4aWRdLmFjdGl2ZS5maWx0ZXJfZmxhZ3MgJgotCQkJUlhPTl9GSUxURVJfQVNTT0NfTVNLKSA/IDEgOiAwOworCXJldHVybiBpd2xfaXNfYXNzb2NpYXRlZF9jdHgoJnByaXYtPmNvbnRleHRzW2N0eGlkXSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGl3bF9pc19hbnlfYXNzb2NpYXRlZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JcmV0dXJuIGl3bF9pc19hc3NvY2lhdGVkKHByaXYsIElXTF9SWE9OX0NUWF9CU1MpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpd2xfaXNfYXNzb2NpYXRlZF9jdHgoc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eCkKLXsKLQlyZXR1cm4gKGN0eC0+YWN0aXZlLmZpbHRlcl9mbGFncyAmIFJYT05fRklMVEVSX0FTU09DX01TSykgPyAxIDogMDsKKwlzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4OworCWZvcl9lYWNoX2NvbnRleHQocHJpdiwgY3R4KQorCQlpZiAoaXdsX2lzX2Fzc29jaWF0ZWRfY3R4KGN0eCkpCisJCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX2NoYW5uZWxfdmFsaWQoY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm8pCkBAIC0xNzEwLDEyICsxNjEzLDEwIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgX19pd2xfZnJlZV9wYWdlcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBwYWdlICpwYWdlKQogewogCV9fZnJlZV9wYWdlcyhwYWdlLCBwcml2LT5od19wYXJhbXMucnhfcGFnZV9vcmRlcik7Ci0JcHJpdi0+YWxsb2NfcnhiX3BhZ2UtLTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGl3bF9mcmVlX3BhZ2VzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdW5zaWduZWQgbG9uZyBwYWdlKQogewogCWZyZWVfcGFnZXMocGFnZSwgcHJpdi0+aHdfcGFyYW1zLnJ4X3BhZ2Vfb3JkZXIpOwotCXByaXYtPmFsbG9jX3J4Yl9wYWdlLS07CiB9CiAjZW5kaWYJCQkJLyogX19pd2xfZGV2X2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2dHJhY2UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldnRyYWNlLmMKaW5kZXggNGE0ODc2My4uYTYzNWE3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2dHJhY2UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXZ0cmFjZS5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDA5IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA5IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldnRyYWNlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXZ0cmFjZS5oCmluZGV4IDRjZjg2NGMuLmYwMDE3MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldnRyYWNlLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2dHJhY2UuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOSAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCmluZGV4IDgzMzE5NGEuLmM4Mzk3OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogQlNEIExJQ0VOU0UKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTQyLDYgKzE0Miw0NSBAQAogICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorLyoKKyAqIFRoZSBkZXZpY2UncyBFRVBST00gc2VtYXBob3JlIHByZXZlbnRzIGNvbmZsaWN0cyBiZXR3ZWVuIGRyaXZlciBhbmQgdUNvZGUKKyAqIHdoZW4gYWNjZXNzaW5nIHRoZSBFRVBST007IGVhY2ggYWNjZXNzIGlzIGEgc2VyaWVzIG9mIHB1bHNlcyB0by9mcm9tIHRoZQorICogRUVQUk9NIGNoaXAsIG5vdCBhIHNpbmdsZSBldmVudCwgc28gZXZlbiByZWFkcyBjb3VsZCBjb25mbGljdCBpZiB0aGV5CisgKiB3ZXJlbid0IGFyYml0cmF0ZWQgYnkgdGhlIHNlbWFwaG9yZS4KKyAqLworc3RhdGljIGludCBpd2xfZWVwcm9tX2FjcXVpcmVfc2VtYXBob3JlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwl1MTYgY291bnQ7CisJaW50IHJldDsKKworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IEVFUFJPTV9TRU1fUkVUUllfTElNSVQ7IGNvdW50KyspIHsKKwkJLyogUmVxdWVzdCBzZW1hcGhvcmUgKi8KKwkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCisJCQkgICAgQ1NSX0hXX0lGX0NPTkZJR19SRUdfQklUX0VFUFJPTV9PV05fU0VNKTsKKworCQkvKiBTZWUgaWYgd2UgZ290IGl0ICovCisJCXJldCA9IGl3bF9wb2xsX2JpdChwcml2LCBDU1JfSFdfSUZfQ09ORklHX1JFRywKKwkJCQlDU1JfSFdfSUZfQ09ORklHX1JFR19CSVRfRUVQUk9NX09XTl9TRU0sCisJCQkJQ1NSX0hXX0lGX0NPTkZJR19SRUdfQklUX0VFUFJPTV9PV05fU0VNLAorCQkJCUVFUFJPTV9TRU1fVElNRU9VVCk7CisJCWlmIChyZXQgPj0gMCkgeworCQkJSVdMX0RFQlVHX0VFUFJPTShwcml2LAorCQkJCSJBY3F1aXJlZCBzZW1hcGhvcmUgYWZ0ZXIgJWQgdHJpZXMuXG4iLAorCQkJCWNvdW50KzEpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGl3bF9lZXByb21fcmVsZWFzZV9zZW1hcGhvcmUoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWl3bF9jbGVhcl9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCisJCUNTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9FRVBST01fT1dOX1NFTSk7CisKK30KKwogc3RhdGljIGludCBpd2xfZWVwcm9tX3ZlcmlmeV9zaWduYXR1cmUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXUzMiBncCA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0VFUFJPTV9HUCkgJiBDU1JfRUVQUk9NX0dQX1ZBTElEX01TSzsKQEAgLTE4OCwxOCArMjI3LDE2IEBACiAJCQkJQ1NSX09UUF9HUF9SRUdfT1RQX0FDQ0VTU19NT0RFKTsKIH0KIAotc3RhdGljIGludCBpd2xjb3JlX2dldF9udm1fdHlwZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bGNvcmVfZ2V0X252bV90eXBlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIGh3X3JldikKIHsKIAl1MzIgb3RwZ3A7CiAJaW50IG52bV90eXBlOwogCiAJLyogT1RQIG9ubHkgdmFsaWQgZm9yIENQL1BQIGFuZCBhZnRlciAqLwotCXN3aXRjaCAocHJpdi0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgeworCXN3aXRjaCAoaHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgewogCWNhc2UgQ1NSX0hXX1JFVl9UWVBFX05PTkU6CiAJCUlXTF9FUlIocHJpdiwgIlVua25vd24gaGFyZHdhcmUgdHlwZVxuIik7CiAJCXJldHVybiAtRU5PRU5UOwotCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzM5NDU6Ci0JY2FzZSBDU1JfSFdfUkVWX1RZUEVfNDk2NToKIAljYXNlIENTUl9IV19SRVZfVFlQRV81MzAwOgogCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUzNTA6CiAJY2FzZSBDU1JfSFdfUkVWX1RZUEVfNTEwMDoKQEAgLTIxNywyNiArMjU0LDIwIEBACiAJcmV0dXJuICBudm1fdHlwZTsKIH0KIAotY29uc3QgdTggKml3bGNvcmVfZWVwcm9tX3F1ZXJ5X2FkZHIoY29uc3Qgc3RydWN0IGl3bF9wcml2ICpwcml2LCBzaXplX3Qgb2Zmc2V0KQotewotCUJVR19PTihvZmZzZXQgPj0gcHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+ZWVwcm9tX3NpemUpOwotCXJldHVybiAmcHJpdi0+ZWVwcm9tW29mZnNldF07Ci19Ci0KIHN0YXRpYyBpbnQgaXdsX2luaXRfb3RwX2FjY2VzcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJldDsKIAogCS8qIEVuYWJsZSA0ME1IeiByYWRpbyBjbG9jayAqLwotCV9pd2xfd3JpdGUzMihwcml2LCBDU1JfR1BfQ05UUkwsCi0JCSAgICAgX2l3bF9yZWFkMzIocHJpdiwgQ1NSX0dQX0NOVFJMKSB8Ci0JCSAgICAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0lOSVRfRE9ORSk7CisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0dQX0NOVFJMLAorCQkgICAgaXdsX3JlYWQzMihwcml2LCBDU1JfR1BfQ05UUkwpIHwKKwkJICAgIENTUl9HUF9DTlRSTF9SRUdfRkxBR19JTklUX0RPTkUpOwogCiAJLyogd2FpdCBmb3IgY2xvY2sgdG8gYmUgcmVhZHkgKi8KIAlyZXQgPSBpd2xfcG9sbF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAotCQkJCSAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSwKLQkJCQkgIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQ0xPQ0tfUkVBRFksCi0JCQkJICAyNTAwMCk7CisJCQkJIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQ0xPQ0tfUkVBRFksCisJCQkJIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQ0xPQ0tfUkVBRFksCisJCQkJIDI1MDAwKTsKIAlpZiAocmV0IDwgMCkKIAkJSVdMX0VSUihwcml2LCAiVGltZSBvdXQgYWNjZXNzIE9UUFxuIik7CiAJZWxzZSB7CkBAIC0yNjMsMTcgKzI5NCwxNyBAQAogCXUzMiByOwogCXUzMiBvdHBncDsKIAotCV9pd2xfd3JpdGUzMihwcml2LCBDU1JfRUVQUk9NX1JFRywKLQkJICAgICBDU1JfRUVQUk9NX1JFR19NU0tfQUREUiAmIChhZGRyIDw8IDEpKTsKKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfRUVQUk9NX1JFRywKKwkJICAgIENTUl9FRVBST01fUkVHX01TS19BRERSICYgKGFkZHIgPDwgMSkpOwogCXJldCA9IGl3bF9wb2xsX2JpdChwcml2LCBDU1JfRUVQUk9NX1JFRywKLQkJCQkgIENTUl9FRVBST01fUkVHX1JFQURfVkFMSURfTVNLLAotCQkJCSAgQ1NSX0VFUFJPTV9SRUdfUkVBRF9WQUxJRF9NU0ssCi0JCQkJICBJV0xfRUVQUk9NX0FDQ0VTU19USU1FT1VUKTsKKwkJCQkgQ1NSX0VFUFJPTV9SRUdfUkVBRF9WQUxJRF9NU0ssCisJCQkJIENTUl9FRVBST01fUkVHX1JFQURfVkFMSURfTVNLLAorCQkJCSBJV0xfRUVQUk9NX0FDQ0VTU19USU1FT1VUKTsKIAlpZiAocmV0IDwgMCkgewogCQlJV0xfRVJSKHByaXYsICJUaW1lIG91dCByZWFkaW5nIE9UUFslZF1cbiIsIGFkZHIpOwogCQlyZXR1cm4gcmV0OwogCX0KLQlyID0gX2l3bF9yZWFkX2RpcmVjdDMyKHByaXYsIENTUl9FRVBST01fUkVHKTsKKwlyID0gaXdsX3JlYWQzMihwcml2LCBDU1JfRUVQUk9NX1JFRyk7CiAJLyogY2hlY2sgZm9yIEVDQyBlcnJvcnM6ICovCiAJb3RwZ3AgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9PVFBfR1BfUkVHKTsKIAlpZiAob3RwZ3AgJiBDU1JfT1RQX0dQX1JFR19FQ0NfVU5DT1JSX1NUQVRVU19NU0spIHsKQEAgLTM5Niw3ICs0MjcsNyBAQAogICoKICAqIE5PVEU6ICBUaGlzIHJvdXRpbmUgdXNlcyB0aGUgbm9uLWRlYnVnIElPIGFjY2VzcyBmdW5jdGlvbnMuCiAgKi8KLWludCBpd2xfZWVwcm9tX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2KQoraW50IGl3bF9lZXByb21faW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBod19yZXYpCiB7CiAJX19sZTE2ICplOwogCXUzMiBncCA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0VFUFJPTV9HUCk7CkBAIC00MDYsNyArNDM3LDcgQEAKIAl1MTYgdmFsaWRibG9ja2FkZHIgPSAwOwogCXUxNiBjYWNoZV9hZGRyID0gMDsKIAotCXByaXYtPm52bV9kZXZpY2VfdHlwZSA9IGl3bGNvcmVfZ2V0X252bV90eXBlKHByaXYpOworCXByaXYtPm52bV9kZXZpY2VfdHlwZSA9IGl3bGNvcmVfZ2V0X252bV90eXBlKHByaXYsIGh3X3Jldik7CiAJaWYgKHByaXYtPm52bV9kZXZpY2VfdHlwZSA9PSAtRU5PRU5UKQogCQlyZXR1cm4gLUVOT0VOVDsKIAkvKiBhbGxvY2F0ZSBlZXByb20gKi8KQEAgLTQyOSw3ICs0NjAsNyBAQAogCX0KIAogCS8qIE1ha2Ugc3VyZSBkcml2ZXIgKGluc3RlYWQgb2YgdUNvZGUpIGlzIGFsbG93ZWQgdG8gcmVhZCBFRVBST00gKi8KLQlyZXQgPSBwcml2LT5jZmctPm9wcy0+bGliLT5lZXByb21fb3BzLmFjcXVpcmVfc2VtYXBob3JlKHByaXYpOworCXJldCA9IGl3bF9lZXByb21fYWNxdWlyZV9zZW1hcGhvcmUocHJpdik7CiAJaWYgKHJldCA8IDApIHsKIAkJSVdMX0VSUihwcml2LCAiRmFpbGVkIHRvIGFjcXVpcmUgRUVQUk9NIHNlbWFwaG9yZS5cbiIpOwogCQlyZXQgPSAtRU5PRU5UOwpAQCAtNDQ0LDkgKzQ3NSw5IEBACiAJCQlyZXQgPSAtRU5PRU5UOwogCQkJZ290byBkb25lOwogCQl9Ci0JCV9pd2xfd3JpdGUzMihwcml2LCBDU1JfRUVQUk9NX0dQLAotCQkJICAgICBpd2xfcmVhZDMyKHByaXYsIENTUl9FRVBST01fR1ApICYKLQkJCSAgICAgfkNTUl9FRVBST01fR1BfSUZfT1dORVJfTVNLKTsKKwkJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0VFUFJPTV9HUCwKKwkJCSAgICBpd2xfcmVhZDMyKHByaXYsIENTUl9FRVBST01fR1ApICYKKwkJCSAgICB+Q1NSX0VFUFJPTV9HUF9JRl9PV05FUl9NU0spOwogCiAJCWl3bF9zZXRfYml0KHByaXYsIENTUl9PVFBfR1BfUkVHLAogCQkJICAgICBDU1JfT1RQX0dQX1JFR19FQ0NfQ09SUl9TVEFUVVNfTVNLIHwKQEAgLTQ3Myw4ICs1MDQsOCBAQAogCQlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgc3o7IGFkZHIgKz0gc2l6ZW9mKHUxNikpIHsKIAkJCXUzMiByOwogCi0JCQlfaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0VFUFJPTV9SRUcsCi0JCQkJICAgICBDU1JfRUVQUk9NX1JFR19NU0tfQUREUiAmIChhZGRyIDw8IDEpKTsKKwkJCWl3bF93cml0ZTMyKHByaXYsIENTUl9FRVBST01fUkVHLAorCQkJCSAgICBDU1JfRUVQUk9NX1JFR19NU0tfQUREUiAmIChhZGRyIDw8IDEpKTsKIAogCQkJcmV0ID0gaXdsX3BvbGxfYml0KHByaXYsIENTUl9FRVBST01fUkVHLAogCQkJCQkJICBDU1JfRUVQUk9NX1JFR19SRUFEX1ZBTElEX01TSywKQEAgLTQ4NCw3ICs1MTUsNyBAQAogCQkJCUlXTF9FUlIocHJpdiwgIlRpbWUgb3V0IHJlYWRpbmcgRUVQUk9NWyVkXVxuIiwgYWRkcik7CiAJCQkJZ290byBkb25lOwogCQkJfQotCQkJciA9IF9pd2xfcmVhZF9kaXJlY3QzMihwcml2LCBDU1JfRUVQUk9NX1JFRyk7CisJCQlyID0gaXdsX3JlYWQzMihwcml2LCBDU1JfRUVQUk9NX1JFRyk7CiAJCQllW2FkZHIgLyAyXSA9IGNwdV90b19sZTE2KHIgPj4gMTYpOwogCQl9CiAJfQpAQCAtNDk2LDcgKzUyNyw3IEBACiAKIAlyZXQgPSAwOwogZG9uZToKLQlwcml2LT5jZmctPm9wcy0+bGliLT5lZXByb21fb3BzLnJlbGVhc2Vfc2VtYXBob3JlKHByaXYpOworCWl3bF9lZXByb21fcmVsZWFzZV9zZW1hcGhvcmUocHJpdik7CiAKIGVycjoKIAlpZiAocmV0KQpAQCAtNzE5LDEzICs3NTAsNiBAQAogCQkJCQkgICAgIGZsYWdzICYgRUVQUk9NX0NIQU5ORUxfUkFEQVIpKQogCQkJCSAgICAgICA/ICIiIDogIm5vdCAiKTsKIAotCQkJLyogU2V0IHRoZSB0eF9wb3dlcl91c2VyX2xtdCB0byB0aGUgaGlnaGVzdCBwb3dlcgotCQkJICogc3VwcG9ydGVkIGJ5IGFueSBjaGFubmVsICovCi0JCQlpZiAoZWVwcm9tX2NoX2luZm9bY2hdLm1heF9wb3dlcl9hdmcgPgotCQkJCQkJcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQpCi0JCQkJcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQgPQotCQkJCSAgICBlZXByb21fY2hfaW5mb1tjaF0ubWF4X3Bvd2VyX2F2ZzsKLQogCQkJY2hfaW5mbysrOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uaAppbmRleCAyMGI2NjQ2Li5jOTYwYzZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTExMCwxMCArMTEwLDYgQEAKIH07CiAKIC8qIFNLVSBDYXBhYmlsaXRpZXMgKi8KLS8qIDM5NDUgb25seSAqLwotI2RlZmluZSBFRVBST01fU0tVX0NBUF9TV19SRl9LSUxMX0VOQUJMRSAgICAgICAgICAgICAgICAoMSA8PCAwKQotI2RlZmluZSBFRVBST01fU0tVX0NBUF9IV19SRl9LSUxMX0VOQUJMRSAgICAgICAgICAgICAgICAoMSA8PCAxKQotCiAvKiA1MDAwIGFuZCB1cCAqLwogI2RlZmluZSBFRVBST01fU0tVX0NBUF9CQU5EX1BPUwkJCQkoNCkKICNkZWZpbmUgRUVQUk9NX1NLVV9DQVBfQkFORF9TRUxFQ1RJT04JICAgICAgICAgICAgICAgIFwKQEAgLTE2OCwyOCArMTY0LDYgQEAKIAlzOCBtaW1vM19tYXg7CiB9IF9fcGFja2VkOwogCi0vKiAzOTQ1IFNwZWNpZmljICovCi0jZGVmaW5lIEVFUFJPTV8zOTQ1X0VFUFJPTV9WRVJTSU9OCSgweDJmKQotCi0vKiA0OTY1IGhhcyB0d28gcmFkaW8gdHJhbnNtaXR0ZXJzIChhbmQgMyByYWRpbyByZWNlaXZlcnMpICovCi0jZGVmaW5lIEVFUFJPTV9UWF9QT1dFUl9UWF9DSEFJTlMgICAgICAoMikKLQotLyogNDk2NSBoYXMgcm9vbSBmb3IgdXAgdG8gOCBzZXRzIG9mIHR4cG93ZXIgY2FsaWJyYXRpb24gZGF0YSAqLwotI2RlZmluZSBFRVBST01fVFhfUE9XRVJfQkFORFMgICAgICAgICAgKDgpCi0KLS8qIDQ5NjUgZmFjdG9yeSBjYWxpYnJhdGlvbiBtZWFzdXJlcyB0eHBvd2VyIGdhaW4gc2V0dGluZ3MgZm9yCi0gKiBlYWNoIG9mIDMgdGFyZ2V0IG91dHB1dCBsZXZlbHMgKi8KLSNkZWZpbmUgRUVQUk9NX1RYX1BPV0VSX01FQVNVUkVNRU5UUyAgICgzKQotCi0vKiA0OTY1IFNwZWNpZmljICovCi0vKiA0OTY1IGRyaXZlciBkb2VzIG5vdCB3b3JrIHdpdGggdHhwb3dlciBjYWxpYnJhdGlvbiB2ZXJzaW9uIDwgNSAqLwotI2RlZmluZSBFRVBST01fNDk2NV9UWF9QT1dFUl9WRVJTSU9OICAgICg1KQotI2RlZmluZSBFRVBST01fNDk2NV9FRVBST01fVkVSU0lPTgkoMHgyZikKLSNkZWZpbmUgRUVQUk9NXzQ5NjVfQ0FMSUJfVkVSU0lPTl9PRkZTRVQgICAgICAgKDIqMHhCNikgLyogMiBieXRlcyAqLwotI2RlZmluZSBFRVBST01fNDk2NV9DQUxJQl9UWFBPV0VSX09GRlNFVCAgICAgICAoMioweEU4KSAvKiA0OCAgYnl0ZXMgKi8KLSNkZWZpbmUgRUVQUk9NXzQ5NjVfQk9BUkRfUkVWSVNJT04gICAgICAgICAgICAgKDIqMHg0RikgLyogMiBieXRlcyAqLwotI2RlZmluZSBFRVBST01fNDk2NV9CT0FSRF9QQkEgICAgICAgICAgICAgICAgICAoMioweDU2KzEpIC8qIDkgYnl0ZXMgKi8KLQogLyogNTAwMCBTcGVjaWZpYyAqLwogI2RlZmluZSBFRVBST01fNTAwMF9UWF9QT1dFUl9WRVJTSU9OICAgICg0KQogI2RlZmluZSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTgkoMHgxMUEpCkBAIC0yODIsOTAgKzI1Niw2IEBACiAvKiAyLjQgR0h6ICovCiBleHRlcm4gY29uc3QgdTggaXdsX2VlcHJvbV9iYW5kXzFbMTRdOwogCi0vKgotICogZmFjdG9yeSBjYWxpYnJhdGlvbiBkYXRhIGZvciBvbmUgdHhwb3dlciBsZXZlbCwgb24gb25lIGNoYW5uZWwsCi0gKiBtZWFzdXJlZCBvbiBvbmUgb2YgdGhlIDIgdHggY2hhaW5zIChyYWRpbyB0cmFuc21pdHRlciBhbmQgYXNzb2NpYXRlZAotICogYW50ZW5uYSkuICBFRVBST00gY29udGFpbnM6Ci0gKgotICogMSkgIFRlbXBlcmF0dXJlIChkZWdyZWVzIENlbHNpdXMpIG9mIGRldmljZSB3aGVuIG1lYXN1cmVtZW50IHdhcyBtYWRlLgotICoKLSAqIDIpICBHYWluIHRhYmxlIGluZGV4IHVzZWQgdG8gYWNoaWV2ZSB0aGUgdGFyZ2V0IG1lYXN1cmVtZW50IHBvd2VyLgotICogICAgIFRoaXMgcmVmZXJzIHRvIHRoZSAid2VsbC1rbm93biIgZ2FpbiB0YWJsZXMgKHNlZSBpd2wtNDk2NS1ody5oKS4KLSAqCi0gKiAzKSAgQWN0dWFsIG1lYXN1cmVkIG91dHB1dCBwb3dlciwgaW4gaGFsZi1kQm0gKCIzNCIgPSAxNyBkQm0pLgotICoKLSAqIDQpICBSRiBwb3dlciBhbXBsaWZpZXIgZGV0ZWN0b3IgbGV2ZWwgbWVhc3VyZW1lbnQgKG5vdCB1c2VkKS4KLSAqLwotc3RydWN0IGl3bF9lZXByb21fY2FsaWJfbWVhc3VyZSB7Ci0JdTggdGVtcGVyYXR1cmU7CQkvKiBEZXZpY2UgdGVtcGVyYXR1cmUgKENlbHNpdXMpICovCi0JdTggZ2Fpbl9pZHg7CQkvKiBJbmRleCBpbnRvIGdhaW4gdGFibGUgKi8KLQl1OCBhY3R1YWxfcG93OwkJLyogTWVhc3VyZWQgUkYgb3V0cHV0IHBvd2VyLCBoYWxmLWRCbSAqLwotCXM4IHBhX2RldDsJCS8qIFBvd2VyIGFtcCBkZXRlY3RvciBsZXZlbCAobm90IHVzZWQpICovCi19IF9fcGFja2VkOwotCi0KLS8qCi0gKiBtZWFzdXJlbWVudCBzZXQgZm9yIG9uZSBjaGFubmVsLiAgRUVQUk9NIGNvbnRhaW5zOgotICoKLSAqIDEpICBDaGFubmVsIG51bWJlciBtZWFzdXJlZAotICoKLSAqIDIpICBNZWFzdXJlbWVudHMgZm9yIGVhY2ggb2YgMyBwb3dlciBsZXZlbHMgZm9yIGVhY2ggb2YgMiByYWRpbyB0cmFuc21pdHRlcnMKLSAqICAgICAoYS5rLmEuICJ0eCBjaGFpbnMiKSAoNiBtZWFzdXJlbWVudHMgYWx0b2dldGhlcikKLSAqLwotc3RydWN0IGl3bF9lZXByb21fY2FsaWJfY2hfaW5mbyB7Ci0JdTggY2hfbnVtOwotCXN0cnVjdCBpd2xfZWVwcm9tX2NhbGliX21lYXN1cmUKLQkJbWVhc3VyZW1lbnRzW0VFUFJPTV9UWF9QT1dFUl9UWF9DSEFJTlNdCi0JCQlbRUVQUk9NX1RYX1BPV0VSX01FQVNVUkVNRU5UU107Ci19IF9fcGFja2VkOwotCi0vKgotICogdHhwb3dlciBzdWJiYW5kIGluZm8uCi0gKgotICogRm9yIGVhY2ggZnJlcXVlbmN5IHN1YmJhbmQsIEVFUFJPTSBjb250YWlucyB0aGUgZm9sbG93aW5nOgotICoKLSAqIDEpICBGaXJzdCBhbmQgbGFzdCBjaGFubmVscyB3aXRoaW4gcmFuZ2Ugb2YgdGhlIHN1YmJhbmQuICAiMCIgdmFsdWVzCi0gKiAgICAgaW5kaWNhdGUgdGhhdCB0aGlzIHNhbXBsZSBzZXQgaXMgbm90IGJlaW5nIHVzZWQuCi0gKgotICogMikgIFNhbXBsZSBtZWFzdXJlbWVudCBzZXRzIGZvciAyIGNoYW5uZWxzIGNsb3NlIHRvIHRoZSByYW5nZSBlbmRwb2ludHMuCi0gKi8KLXN0cnVjdCBpd2xfZWVwcm9tX2NhbGliX3N1YmJhbmRfaW5mbyB7Ci0JdTggY2hfZnJvbTsJLyogY2hhbm5lbCBudW1iZXIgb2YgbG93ZXN0IGNoYW5uZWwgaW4gc3ViYmFuZCAqLwotCXU4IGNoX3RvOwkvKiBjaGFubmVsIG51bWJlciBvZiBoaWdoZXN0IGNoYW5uZWwgaW4gc3ViYmFuZCAqLwotCXN0cnVjdCBpd2xfZWVwcm9tX2NhbGliX2NoX2luZm8gY2gxOwotCXN0cnVjdCBpd2xfZWVwcm9tX2NhbGliX2NoX2luZm8gY2gyOwotfSBfX3BhY2tlZDsKLQotCi0vKgotICogdHhwb3dlciBjYWxpYnJhdGlvbiBpbmZvLiAgRUVQUk9NIGNvbnRhaW5zOgotICoKLSAqIDEpICBGYWN0b3J5LW1lYXN1cmVkIHNhdHVyYXRpb24gcG93ZXIgbGV2ZWxzIChtYXhpbXVtIGxldmVscyBhdCB3aGljaAotICogICAgIHR4IHBvd2VyIGFtcGxpZmllciBjYW4gb3V0cHV0IGEgc2lnbmFsIHdpdGhvdXQgdG9vIG11Y2ggZGlzdG9ydGlvbikuCi0gKiAgICAgVGhlcmUgaXMgb25lIGxldmVsIGZvciAyLjQgR0h6IGJhbmQgYW5kIG9uZSBmb3IgNSBHSHogYmFuZC4gIFRoZXNlCi0gKiAgICAgdmFsdWVzIGFwcGx5IHRvIGFsbCBjaGFubmVscyB3aXRoaW4gZWFjaCBvZiB0aGUgYmFuZHMuCi0gKgotICogMikgIEZhY3RvcnktbWVhc3VyZWQgcG93ZXIgc3VwcGx5IHZvbHRhZ2UgbGV2ZWwuICBUaGlzIGlzIGFzc3VtZWQgdG8gYmUKLSAqICAgICBjb25zdGFudCAoaS5lLiBzYW1lIHZhbHVlIGFwcGxpZXMgdG8gYWxsIGNoYW5uZWxzL2JhbmRzKSB3aGlsZSB0aGUKLSAqICAgICBmYWN0b3J5IG1lYXN1cmVtZW50cyBhcmUgYmVpbmcgbWFkZS4KLSAqCi0gKiAzKSAgVXAgdG8gOCBzZXRzIG9mIGZhY3RvcnktbWVhc3VyZWQgdHhwb3dlciBjYWxpYnJhdGlvbiB2YWx1ZXMuCi0gKiAgICAgVGhlc2UgYXJlIGZvciBkaWZmZXJlbnQgZnJlcXVlbmN5IHJhbmdlcywgc2luY2UgdHhwb3dlciBnYWluCi0gKiAgICAgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBhbmFsb2cgcmFkaW8gY2lyY3VpdHJ5IHZhcnkgd2l0aCBmcmVxdWVuY3kuCi0gKgotICogICAgIE5vdCBhbGwgc2V0cyBuZWVkIHRvIGJlIGZpbGxlZCB3aXRoIGRhdGE7Ci0gKiAgICAgc3RydWN0IGl3bF9lZXByb21fY2FsaWJfc3ViYmFuZF9pbmZvIGNvbnRhaW5zIHJhbmdlIG9mIGNoYW5uZWxzCi0gKiAgICAgKDAgaWYgdW51c2VkKSBmb3IgZWFjaCBzZXQgb2YgZGF0YS4KLSAqLwotc3RydWN0IGl3bF9lZXByb21fY2FsaWJfaW5mbyB7Ci0JdTggc2F0dXJhdGlvbl9wb3dlcjI0OwkvKiBoYWxmLWRCbSAoZS5nLiAiMzQiID0gMTcgZEJtKSAqLwotCXU4IHNhdHVyYXRpb25fcG93ZXI1MjsJLyogaGFsZi1kQm0gKi8KLQlfX2xlMTYgdm9sdGFnZTsJCS8qIHNpZ25lZCAqLwotCXN0cnVjdCBpd2xfZWVwcm9tX2NhbGliX3N1YmJhbmRfaW5mbwotCQliYW5kX2luZm9bRUVQUk9NX1RYX1BPV0VSX0JBTkRTXTsKLX0gX19wYWNrZWQ7Ci0KLQogI2RlZmluZSBBRERSRVNTX01TSyAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgogI2RlZmluZSBJTkRJUkVDVF9UWVBFX01TSyAgICAgICAgICAgMHgwMDBGMDAwMAogI2RlZmluZSBJTkRJUkVDVF9IT1NUICAgICAgICAgICAgICAgMHgwMDAxMDAwMApAQCAtMzk4LDEwMyArMjg4LDI0IEBACiAjZGVmaW5lIEVFUFJPTV9SRl9DRkdfVFhfQU5UX01TSyh4KSAoKHggPj4gOCkgICYgMHhGKSAvKiBiaXRzIDgtMTEgICovCiAjZGVmaW5lIEVFUFJPTV9SRl9DRkdfUlhfQU5UX01TSyh4KSAoKHggPj4gMTIpICYgMHhGKSAvKiBiaXRzIDEyLTE1ICovCiAKLSNkZWZpbmUgRUVQUk9NXzM5NDVfUkZfQ0ZHX1RZUEVfTUFYICAweDAKLSNkZWZpbmUgRUVQUk9NXzQ5NjVfUkZfQ0ZHX1RZUEVfTUFYICAweDEKLQotLyogUmFkaW8gQ29uZmlnIGZvciA1MDAwIGFuZCB1cCAqLwotI2RlZmluZSBFRVBST01fUkZfQ09ORklHX1RZUEVfUjN4MwkweDAKLSNkZWZpbmUgRUVQUk9NX1JGX0NPTkZJR19UWVBFX1IyeDIJMHgxCi0jZGVmaW5lIEVFUFJPTV9SRl9DT05GSUdfVFlQRV9SMXgyCTB4MgogI2RlZmluZSBFRVBST01fUkZfQ09ORklHX1RZUEVfTUFYCTB4MwogCi0vKgotICogUGVyLWNoYW5uZWwgcmVndWxhdG9yeSBkYXRhLgotICoKLSAqIEVhY2ggY2hhbm5lbCB0aGF0ICptaWdodCogYmUgc3VwcG9ydGVkIGJ5IGl3bCBoYXMgYSBmaXhlZCBsb2NhdGlvbgotICogaW4gRUVQUk9NIGNvbnRhaW5pbmcgRUVQUk9NX0NIQU5ORUxfKiB1c2FnZSBmbGFncyAoTFNCKSBhbmQgbWF4IHJlZ3VsYXRvcnkKLSAqIHR4cG93ZXIgKE1TQikuCi0gKgotICogRW50cmllcyBpbW1lZGlhdGVseSBiZWxvdyBhcmUgZm9yIDIwIE1IeiBjaGFubmVsIHdpZHRoLiAgSFQ0MCAoNDAgTUh6KQotICogY2hhbm5lbHMgKG9ubHkgZm9yIDQ5NjUsIG5vdCBzdXBwb3J0ZWQgYnkgMzk0NSkgYXBwZWFyIGxhdGVyIGluIHRoZSBFRVBST00uCi0gKgotICogMi40IEdIeiBjaGFubmVscyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQKLSAqLwotI2RlZmluZSBFRVBST01fUkVHVUxBVE9SWV9TS1VfSUQgICAgICAgICAgICAoMioweDYwKSAgICAvKiA0ICBieXRlcyAqLwotI2RlZmluZSBFRVBST01fUkVHVUxBVE9SWV9CQU5EXzEgICAgICAgICAgICAoMioweDYyKQkvKiAyICBieXRlcyAqLwotI2RlZmluZSBFRVBST01fUkVHVUxBVE9SWV9CQU5EXzFfQ0hBTk5FTFMgICAoMioweDYzKQkvKiAyOCBieXRlcyAqLwotCi0vKgotICogNC45IEdIeiBjaGFubmVscyAxODMsIDE4NCwgMTg1LCAxODcsIDE4OCwgMTg5LCAxOTIsIDE5NiwKLSAqIDUuMCBHSHogY2hhbm5lbHMgNywgOCwgMTEsIDEyLCAxNgotICogKDQ5MTUtNTA4ME1IeikgKG5vbmUgb2YgdGhlc2UgaXMgZXZlciBzdXBwb3J0ZWQpCi0gKi8KLSNkZWZpbmUgRUVQUk9NX1JFR1VMQVRPUllfQkFORF8yICAgICAgICAgICAgKDIqMHg3MSkJLyogMiAgYnl0ZXMgKi8KLSNkZWZpbmUgRUVQUk9NX1JFR1VMQVRPUllfQkFORF8yX0NIQU5ORUxTICAgKDIqMHg3MikJLyogMjYgYnl0ZXMgKi8KLQotLyoKLSAqIDUuMiBHSHogY2hhbm5lbHMgMzQsIDM2LCAzOCwgNDAsIDQyLCA0NCwgNDYsIDQ4LCA1MiwgNTYsIDYwLCA2NAotICogKDUxNzAtNTMyME1IeikKLSAqLwotI2RlZmluZSBFRVBST01fUkVHVUxBVE9SWV9CQU5EXzMgICAgICAgICAgICAoMioweDdGKQkvKiAyICBieXRlcyAqLwotI2RlZmluZSBFRVBST01fUkVHVUxBVE9SWV9CQU5EXzNfQ0hBTk5FTFMgICAoMioweDgwKQkvKiAyNCBieXRlcyAqLwotCi0vKgotICogNS41IEdIeiBjaGFubmVscyAxMDAsIDEwNCwgMTA4LCAxMTIsIDExNiwgMTIwLCAxMjQsIDEyOCwgMTMyLCAxMzYsIDE0MAotICogKDU1MDAtNTcwME1IeikKLSAqLwotI2RlZmluZSBFRVBST01fUkVHVUxBVE9SWV9CQU5EXzQgICAgICAgICAgICAoMioweDhDKQkvKiAyICBieXRlcyAqLwotI2RlZmluZSBFRVBST01fUkVHVUxBVE9SWV9CQU5EXzRfQ0hBTk5FTFMgICAoMioweDhEKQkvKiAyMiBieXRlcyAqLwotCi0vKgotICogNS43IEdIeiBjaGFubmVscyAxNDUsIDE0OSwgMTUzLCAxNTcsIDE2MSwgMTY1Ci0gKiAoNTcyNS01ODI1TUh6KQotICovCi0jZGVmaW5lIEVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfNSAgICAgICAgICAgICgyKjB4OTgpCS8qIDIgIGJ5dGVzICovCi0jZGVmaW5lIEVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfNV9DSEFOTkVMUyAgICgyKjB4OTkpCS8qIDEyIGJ5dGVzICovCi0KLS8qCi0gKiAyLjQgR0h6IEhUNDAgY2hhbm5lbHMgMSAoNSksIDIgKDYpLCAzICg3KSwgNCAoOCksIDUgKDkpLCA2ICgxMCksIDcgKDExKQotICoKLSAqIFRoZSBjaGFubmVsIGxpc3RlZCBpcyB0aGUgY2VudGVyIG9mIHRoZSBsb3dlciAyMCBNSHogaGFsZiBvZiB0aGUgY2hhbm5lbC4KLSAqIFRoZSBvdmVyYWxsIGNlbnRlciBmcmVxdWVuY3kgaXMgYWN0dWFsbHkgMiBjaGFubmVscyAoMTAgTUh6KSBhYm92ZSB0aGF0LAotICogYW5kIHRoZSB1cHBlciBoYWxmIG9mIGVhY2ggSFQ0MCBjaGFubmVsIGlzIGNlbnRlcmVkIDQgY2hhbm5lbHMgKDIwIE1IeikgYXdheQotICogZnJvbSB0aGUgbG93ZXIgaGFsZjsgZS5nLiB0aGUgdXBwZXIgaGFsZiBvZiBIVDQwIGNoYW5uZWwgMSBpcyBjaGFubmVsIDUsCi0gKiBhbmQgdGhlIG92ZXJhbGwgSFQ0MCBjaGFubmVsIHdpZHRoIGNlbnRlcnMgb24gY2hhbm5lbCAzLgotICoKLSAqIE5PVEU6ICBUaGUgUlhPTiBjb21tYW5kIHVzZXMgMjAgTUh6IGNoYW5uZWwgbnVtYmVycyB0byBzcGVjaWZ5IHRoZQotICogICAgICAgIGNvbnRyb2wgY2hhbm5lbCB0byB3aGljaCB0byB0dW5lLiAgUlhPTiBhbHNvIHNwZWNpZmllcyB3aGV0aGVyIHRoZQotICogICAgICAgIGNvbnRyb2wgY2hhbm5lbCBpcyB0aGUgdXBwZXIgb3IgbG93ZXIgaGFsZiBvZiBhIEhUNDAgY2hhbm5lbC4KLSAqCi0gKiBOT1RFOiAgNDk2NSBkb2VzIG5vdCBzdXBwb3J0IEhUNDAgY2hhbm5lbHMgb24gMi40IEdIei4KLSAqLwotI2RlZmluZSBFRVBST01fNDk2NV9SRUdVTEFUT1JZX0JBTkRfMjRfSFQ0MF9DSEFOTkVMUyAoMioweEEwKQkvKiAxNCBieXRlcyAqLwotCi0vKgotICogNS4yIEdIeiBIVDQwIGNoYW5uZWxzIDM2ICg0MCksIDQ0ICg0OCksIDUyICg1NiksIDYwICg2NCksCi0gKiAxMDAgKDEwNCksIDEwOCAoMTEyKSwgMTE2ICgxMjApLCAxMjQgKDEyOCksIDEzMiAoMTM2KSwgMTQ5ICgxNTMpLCAxNTcgKDE2MSkKLSAqLwotI2RlZmluZSBFRVBST01fNDk2NV9SRUdVTEFUT1JZX0JBTkRfNTJfSFQ0MF9DSEFOTkVMUyAoMioweEE4KQkvKiAyMiBieXRlcyAqLwotCiAjZGVmaW5lIEVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfTk9fSFQ0MAkJCSgwKQogCiBzdHJ1Y3QgaXdsX2VlcHJvbV9vcHMgewogCWNvbnN0IHUzMiByZWd1bGF0b3J5X2JhbmRzWzddOwotCWludCAoKmFjcXVpcmVfc2VtYXBob3JlKSAoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKLQl2b2lkICgqcmVsZWFzZV9zZW1hcGhvcmUpIChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotCXUxNiAoKmNhbGliX3ZlcnNpb24pIChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCWNvbnN0IHU4KiAoKnF1ZXJ5X2FkZHIpIChjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHNpemVfdCBvZmZzZXQpOwogCXZvaWQgKCp1cGRhdGVfZW5oYW5jZWRfdHhwb3dlcikgKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB9OwogCiAKLWludCBpd2xfZWVwcm9tX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2ludCBpd2xfZWVwcm9tX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgaHdfcmV2KTsKIHZvaWQgaXdsX2VlcHJvbV9mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgIGl3bF9lZXByb21fY2hlY2tfdmVyc2lvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogaW50ICBpd2xfZWVwcm9tX2NoZWNrX3NrdShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogY29uc3QgdTggKml3bF9lZXByb21fcXVlcnlfYWRkcihjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHNpemVfdCBvZmZzZXQpOwogaW50IGl3bGNvcmVfZWVwcm9tX3ZlcmlmeV9zaWduYXR1cmUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIHUxNiBpd2xfZWVwcm9tX3F1ZXJ5MTYoY29uc3Qgc3RydWN0IGl3bF9wcml2ICpwcml2LCBzaXplX3Qgb2Zmc2V0KTsKLWNvbnN0IHU4ICppd2xjb3JlX2VlcHJvbV9xdWVyeV9hZGRyKGNvbnN0IHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc2l6ZV90IG9mZnNldCk7CiBpbnQgaXdsX2luaXRfY2hhbm5lbF9tYXAoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIHZvaWQgaXdsX2ZyZWVfY2hhbm5lbF9tYXAoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICppd2xfZ2V0X2NoYW5uZWxfaW5mbygKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWZoLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1maC5oCmluZGV4IDQ3NDAwOWEuLjZkZmE4MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWZoLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZmguaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTc3LDE0ICs3NywxNCBAQAogLyoqCiAgKiBLZWVwLVdhcm0gKEtXKSBidWZmZXIgYmFzZSBhZGRyZXNzLgogICoKLSAqIERyaXZlciBtdXN0IGFsbG9jYXRlIGEgNEtCeXRlIGJ1ZmZlciB0aGF0IGlzIHVzZWQgYnkgNDk2NSBmb3Iga2VlcGluZyB0aGUKKyAqIERyaXZlciBtdXN0IGFsbG9jYXRlIGEgNEtCeXRlIGJ1ZmZlciB0aGF0IGlzIGZvciBrZWVwaW5nIHRoZQogICogaG9zdCBEUkFNIHBvd2VyZWQgb24gKHZpYSBkdW1teSBhY2Nlc3NlcyB0byBEUkFNKSB0byBtYWludGFpbiBsb3ctbGF0ZW5jeQotICogRFJBTSBhY2Nlc3Mgd2hlbiA0OTY1IGlzIFR4aW5nIG9yIFJ4aW5nLiAgVGhlIGR1bW15IGFjY2Vzc2VzIHByZXZlbnQgaG9zdAorICogRFJBTSBhY2Nlc3Mgd2hlbiBkb2luZyBUeGluZyBvciBSeGluZy4gIFRoZSBkdW1teSBhY2Nlc3NlcyBwcmV2ZW50IGhvc3QKICAqIGZyb20gZ29pbmcgaW50byBhIHBvd2VyLXNhdmluZ3MgbW9kZSB0aGF0IHdvdWxkIGNhdXNlIGhpZ2hlciBEUkFNIGxhdGVuY3ksCiAgKiBhbmQgcG9zc2libGUgZGF0YSBvdmVyL3VuZGVyLXJ1bnMsIGJlZm9yZSBhbGwgVHgvUnggaXMgY29tcGxldGUuCiAgKgogICogRHJpdmVyIGxvYWRzIEZIX0tXX01FTV9BRERSX1JFRyB3aXRoIHRoZSBwaHlzaWNhbCBhZGRyZXNzIChiaXRzIDM1OjQpCi0gKiBvZiB0aGUgYnVmZmVyLCB3aGljaCBtdXN0IGJlIDRLIGFsaWduZWQuICBPbmNlIHRoaXMgaXMgc2V0IHVwLCB0aGUgNDk2NQorICogb2YgdGhlIGJ1ZmZlciwgd2hpY2ggbXVzdCBiZSA0SyBhbGlnbmVkLiAgT25jZSB0aGlzIGlzIHNldCB1cCwgdGhlIGRldmljZQogICogYXV0b21hdGljYWxseSBpbnZva2VzIGtlZXAtd2FybSBhY2Nlc3NlcyB3aGVuIG5vcm1hbCBhY2Nlc3NlcyBtaWdodCBub3QKICAqIGJlIHN1ZmZpY2llbnQgdG8gbWFpbnRhaW4gZmFzdCBEUkFNIHJlc3BvbnNlLgogICoKQEAgLTk3LDcgKzk3LDcgQEAKIC8qKgogICogVEZEIENpcmN1bGFyIEJ1ZmZlcnMgQmFzZSAoQ0JCQykgYWRkcmVzc2VzCiAgKgotICogNDk2NSBoYXMgMTYgYmFzZSBwb2ludGVyIHJlZ2lzdGVycywgb25lIGZvciBlYWNoIG9mIDE2IGhvc3QtRFJBTS1yZXNpZGVudAorICogRGV2aWNlIGhhcyAxNiBiYXNlIHBvaW50ZXIgcmVnaXN0ZXJzLCBvbmUgZm9yIGVhY2ggb2YgMTYgaG9zdC1EUkFNLXJlc2lkZW50CiAgKiBjaXJjdWxhciBidWZmZXJzIChDQnMvcXVldWVzKSBjb250YWluaW5nIFRyYW5zbWl0IEZyYW1lIERlc2NyaXB0b3JzIChURkRzKQogICogKHNlZSBzdHJ1Y3QgaXdsX3RmZF9mcmFtZSkuICBUaGVzZSAxNiBwb2ludGVyIHJlZ2lzdGVycyBhcmUgb2Zmc2V0IGJ5IDB4MDQKICAqIGJ5dGVzIGZyb20gb25lIGFub3RoZXIuICBFYWNoIFRGRCBjaXJjdWxhciBidWZmZXIgaW4gRFJBTSBtdXN0IGJlIDI1Ni1ieXRlCkBAIC0xMTYsMTYgKzExNiwxNiBAQAogLyoqCiAgKiBSeCBTUkFNIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlcnMgKFJTQ1NSKQogICoKLSAqIFRoZXNlIHJlZ2lzdGVycyBwcm92aWRlIGhhbmRzaGFrZSBiZXR3ZWVuIGRyaXZlciBhbmQgNDk2NSBmb3IgdGhlIFJ4IHF1ZXVlCisgKiBUaGVzZSByZWdpc3RlcnMgcHJvdmlkZSBoYW5kc2hha2UgYmV0d2VlbiBkcml2ZXIgYW5kIGRldmljZSBmb3IgdGhlIFJ4IHF1ZXVlCiAgKiAodGhpcyBxdWV1ZSBoYW5kbGVzICphbGwqIGNvbW1hbmQgcmVzcG9uc2VzLCBub3RpZmljYXRpb25zLCBSeCBkYXRhLCBldGMuCi0gKiBzZW50IGZyb20gNDk2NSB1Q29kZSB0byBob3N0IGRyaXZlcikuICBVbmxpa2UgVHgsIHRoZXJlIGlzIG9ubHkgb25lIFJ4CisgKiBzZW50IGZyb20gdUNvZGUgdG8gaG9zdCBkcml2ZXIpLiAgVW5saWtlIFR4LCB0aGVyZSBpcyBvbmx5IG9uZSBSeAogICogcXVldWUsIGFuZCBvbmx5IG9uZSBSeCBETUEvRklGTyBjaGFubmVsLiAgQWxzbyB1bmxpa2UgVHgsIHdoaWNoIGNhbgogICogY29uY2F0ZW5hdGUgdXAgdG8gMjAgRFJBTSBidWZmZXJzIHRvIGZvcm0gYSBUeCBmcmFtZSwgZWFjaCBSZWNlaXZlIEJ1ZmZlcgogICogRGVzY3JpcHRvciAoUkJEKSBwb2ludHMgdG8gb25seSBvbmUgUnggQnVmZmVyIChSQik7IHRoZXJlIGlzIGEgMToxCiAgKiBtYXBwaW5nIGJldHdlZW4gUkJEcyBhbmQgUkJzLgogICoKICAqIERyaXZlciBtdXN0IGFsbG9jYXRlIGhvc3QgRFJBTSBtZW1vcnkgZm9yIHRoZSBmb2xsb3dpbmcsIGFuZCBzZXQgdGhlCi0gKiBwaHlzaWNhbCBhZGRyZXNzIG9mIGVhY2ggaW50byA0OTY1IHJlZ2lzdGVyczoKKyAqIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZWFjaCBpbnRvIGRldmljZSByZWdpc3RlcnM6CiAgKgogICogMSkgIFJlY2VpdmUgQnVmZmVyIERlc2NyaXB0b3IgKFJCRCkgY2lyY3VsYXIgYnVmZmVyIChDQiksIHR5cGljYWxseSB3aXRoIDI1NgogICogICAgIGVudHJpZXMgKGFsdGhvdWdoIGFueSBwb3dlciBvZiAyLCB1cCB0byA0MDk2LCBpcyBzZWxlY3RhYmxlIGJ5IGRyaXZlcikuCkBAIC0xNDAsMjAgKzE0MCwyMCBAQAogICogICAgIERyaXZlciBzZXRzIHBoeXNpY2FsIGFkZHJlc3MgWzM1OjhdIG9mIGJhc2Ugb2YgUkJEIGNpcmN1bGFyIGJ1ZmZlcgogICogICAgIGludG8gRkhfUlNDU1JfQ0hOTDBfUkJEQ0JfQkFTRV9SRUcgWzI3OjBdLgogICoKLSAqIDIpICBSeCBzdGF0dXMgYnVmZmVyLCA4IGJ5dGVzLCBpbiB3aGljaCA0OTY1IGluZGljYXRlcyB3aGljaCBSeCBCdWZmZXJzCisgKiAyKSAgUnggc3RhdHVzIGJ1ZmZlciwgOCBieXRlcywgaW4gd2hpY2ggdUNvZGUgaW5kaWNhdGVzIHdoaWNoIFJ4IEJ1ZmZlcnMKICAqICAgICAoUkJzKSBoYXZlIGJlZW4gZmlsbGVkLCB2aWEgYSAid3JpdGUgcG9pbnRlciIsIGFjdHVhbGx5IHRoZSBpbmRleCBvZgogICogICAgIHRoZSBSQidzIGNvcnJlc3BvbmRpbmcgUkJEIHdpdGhpbiB0aGUgY2lyY3VsYXIgYnVmZmVyLiAgRHJpdmVyIHNldHMKICAqICAgICBwaHlzaWNhbCBhZGRyZXNzIFszNTo0XSBpbnRvIEZIX1JTQ1NSX0NITkwwX1NUVFNfV1BUUl9SRUcgWzMxOjBdLgogICoKICAqICAgICBCaXQgZmllbGRzIGluIGxvd2VyIGR3b3JkIG9mIFJ4IHN0YXR1cyBidWZmZXIgKHVwcGVyIGR3b3JkIG5vdCB1c2VkCi0gKiAgICAgYnkgZHJpdmVyOyBzZWUgc3RydWN0IGl3bDQ5NjVfc2hhcmVkLCB2YWwwKToKKyAqICAgICBieSBkcml2ZXI6CiAgKiAgICAgMzEtMTI6ICBOb3QgdXNlZCBieSBkcml2ZXIKICAqICAgICAxMS0gMDogIEluZGV4IG9mIGxhc3QgZmlsbGVkIFJ4IGJ1ZmZlciBkZXNjcmlwdG9yCi0gKiAgICAgICAgICAgICAoNDk2NSB3cml0ZXMsIGRyaXZlciByZWFkcyB0aGlzIHZhbHVlKQorICogICAgICAgICAgICAgKGRldmljZSB3cml0ZXMsIGRyaXZlciByZWFkcyB0aGlzIHZhbHVlKQogICoKLSAqIEFzIHRoZSBkcml2ZXIgcHJlcGFyZXMgUmVjZWl2ZSBCdWZmZXJzIChSQnMpIGZvciA0OTY1IHRvIGZpbGwsIGRyaXZlciBtdXN0CisgKiBBcyB0aGUgZHJpdmVyIHByZXBhcmVzIFJlY2VpdmUgQnVmZmVycyAoUkJzKSBmb3IgZGV2aWNlIHRvIGZpbGwsIGRyaXZlciBtdXN0CiAgKiBlbnRlciBwb2ludGVycyB0byB0aGVzZSBSQnMgaW50byBjb250aWd1b3VzIFJCRCBjaXJjdWxhciBidWZmZXIgZW50cmllcywKLSAqIGFuZCB1cGRhdGUgdGhlIDQ5NjUncyAid3JpdGUiIGluZGV4IHJlZ2lzdGVyLAorICogYW5kIHVwZGF0ZSB0aGUgZGV2aWNlJ3MgIndyaXRlIiBpbmRleCByZWdpc3RlciwKICAqIEZIX1JTQ1NSX0NITkwwX1JCRENCX1dQVFJfUkVHLgogICoKICAqIFRoaXMgIndyaXRlIiBpbmRleCBjb3JyZXNwb25kcyB0byB0aGUgKm5leHQqIFJCRCB0aGF0IHRoZSBkcml2ZXIgd2lsbCBtYWtlCkBAIC0xNjIsMTIgKzE2MiwxMiBAQAogICogUkJzKSwgc2hvdWxkIGJlIDggYWZ0ZXIgcHJlcGFyaW5nIHRoZSBmaXJzdCA4IFJCcyAoZm9yIGV4YW1wbGUpLCBhbmQgbXVzdAogICogd3JhcCBiYWNrIHRvIDAgYXQgdGhlIGVuZCBvZiB0aGUgY2lyY3VsYXIgYnVmZmVyIChidXQgZG9uJ3Qgd3JhcCBiZWZvcmUKICAqICJyZWFkIiBpbmRleCBoYXMgYWR2YW5jZWQgcGFzdCAxISAgU2VlIGJlbG93KS4KLSAqIE5PVEU6ICA0OTY1IEVYUEVDVFMgVEhFIFdSSVRFIElOREVYIFRPIEJFIElOQ1JFTUVOVEVEIElOIE1VTFRJUExFUyBPRiA4LgorICogTk9URTogIERFVklDRSBFWFBFQ1RTIFRIRSBXUklURSBJTkRFWCBUTyBCRSBJTkNSRU1FTlRFRCBJTiBNVUxUSVBMRVMgT0YgOC4KICAqCi0gKiBBcyB0aGUgNDk2NSBmaWxscyBSQnMgKHJlZmVyZW5jZWQgZnJvbSBjb250aWd1b3VzIFJCRHMgd2l0aGluIHRoZSBjaXJjdWxhcgorICogQXMgdGhlIGRldmljZSBmaWxscyBSQnMgKHJlZmVyZW5jZWQgZnJvbSBjb250aWd1b3VzIFJCRHMgd2l0aGluIHRoZSBjaXJjdWxhcgogICogYnVmZmVyKSwgaXQgdXBkYXRlcyB0aGUgUnggc3RhdHVzIGJ1ZmZlciBpbiBob3N0IERSQU0sIDIpIGRlc2NyaWJlZCBhYm92ZSwKICAqIHRvIHRlbGwgdGhlIGRyaXZlciB0aGUgaW5kZXggb2YgdGhlIGxhdGVzdCBmaWxsZWQgUkJELiAgVGhlIGRyaXZlciBtdXN0Ci0gKiByZWFkIHRoaXMgInJlYWQiIGluZGV4IGZyb20gRFJBTSBhZnRlciByZWNlaXZpbmcgYW4gUnggaW50ZXJydXB0IGZyb20gNDk2NS4KKyAqIHJlYWQgdGhpcyAicmVhZCIgaW5kZXggZnJvbSBEUkFNIGFmdGVyIHJlY2VpdmluZyBhbiBSeCBpbnRlcnJ1cHQgZnJvbSBkZXZpY2UKICAqCiAgKiBUaGUgZHJpdmVyIG11c3QgYWxzbyBpbnRlcm5hbGx5IGtlZXAgdHJhY2sgb2YgYSB0aGlyZCBpbmRleCwgd2hpY2ggaXMgdGhlCiAgKiBuZXh0IFJCRCB0byBwcm9jZXNzLiAgV2hlbiByZWNlaXZpbmcgYW4gUnggaW50ZXJydXB0LCBkcml2ZXIgc2hvdWxkIHByb2Nlc3MKQEAgLTE3Niw3ICsxNzYsNyBAQAogICogZHJpdmVyIG1heSBwcm9jZXNzIHRoZSBSQiBwb2ludGVkIHRvIGJ5IFJCRCAwLiAgRGVwZW5kaW5nIG9uIHZvbHVtZSBvZgogICogdHJhZmZpYywgdGhlcmUgbWF5IGJlIG1hbnkgUkJzIHRvIHByb2Nlc3MuCiAgKgotICogSWYgcmVhZCBpbmRleCA9PSB3cml0ZSBpbmRleCwgNDk2NSB0aGlua3MgdGhlcmUgaXMgbm8gcm9vbSB0byBwdXQgbmV3IGRhdGEuCisgKiBJZiByZWFkIGluZGV4ID09IHdyaXRlIGluZGV4LCBkZXZpY2UgdGhpbmtzIHRoZXJlIGlzIG5vIHJvb20gdG8gcHV0IG5ldyBkYXRhLgogICogRHVlIHRvIHRoaXMsIHRoZSBtYXhpbXVtIG51bWJlciBvZiBmaWxsZWQgUkJzIGlzIDI1NSwgaW5zdGVhZCBvZiAyNTYuICBUbwogICogYmUgc2FmZSwgbWFrZSBzdXJlIHRoYXQgdGhlcmUgaXMgYSBnYXAgb2YgYXQgbGVhc3QgMiBSQkRzIGJldHdlZW4gIndyaXRlIgogICogYW5kICJyZWFkIiBpbmRleGVzOyB0aGF0IGlzLCBtYWtlIHN1cmUgdGhhdCB0aGVyZSBhcmUgbm8gbW9yZSB0aGFuIDI1NApAQCAtMzAzLDcgKzMwMyw3IEBACiAvKioKICAqIFRyYW5zbWl0IERNQSBDaGFubmVsIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVycyAoVENTUikKICAqCi0gKiA0OTY1IGhhcyBvbmUgY29uZmlndXJhdGlvbiByZWdpc3RlciBmb3IgZWFjaCBvZiA4IFR4IERNQS9GSUZPIGNoYW5uZWxzCisgKiBEZXZpY2UgaGFzIG9uZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGZvciBlYWNoIG9mIDggVHggRE1BL0ZJRk8gY2hhbm5lbHMKICAqIHN1cHBvcnRlZCBpbiBoYXJkd2FyZSAoZG9uJ3QgY29uZnVzZSB0aGVzZSB3aXRoIHRoZSAxNiBUeCBxdWV1ZXMgaW4gRFJBTSwKICAqIHdoaWNoIGZlZWQgdGhlIERNQS9GSUZPIGNoYW5uZWxzKTsgY29uZmlnIHJlZ3MgYXJlIHNlcGFyYXRlZCBieSAweDIwIGJ5dGVzLgogICoKQEAgLTMyNiw3ICszMjYsNiBAQAogI2RlZmluZSBGSF9UQ1NSX1VQUEVSX0JPVU5EICAoRkhfTUVNX0xPV0VSX0JPVU5EICsgMHhFNjApCiAKIC8qIEZpbmQgQ29udHJvbC9TdGF0dXMgcmVnIGZvciBnaXZlbiBUeCBETUEvRklGTyBjaGFubmVsICovCi0jZGVmaW5lIEZINDlfVENTUl9DSE5MX05VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNykKICNkZWZpbmUgRkg1MF9UQ1NSX0NITkxfTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICg4KQogCiAvKiBUQ1NSOiB0eF9jb25maWcgcmVnaXN0ZXIgdmFsdWVzICovCkBAIC00MjQsNyArNDIzLDYgQEAKICNkZWZpbmUgUlhfTE9XX1dBVEVSTUFSSyA4CiAKIC8qIFNpemUgb2Ygb25lIFJ4IGJ1ZmZlciBpbiBob3N0IERSQU0gKi8KLSNkZWZpbmUgSVdMX1JYX0JVRl9TSVpFXzNLICgzICogMTAwMCkgLyogMzk0NSBvbmx5ICovCiAjZGVmaW5lIElXTF9SWF9CVUZfU0laRV80SyAoNCAqIDEwMjQpCiAjZGVmaW5lIElXTF9SWF9CVUZfU0laRV84SyAoOCAqIDEwMjQpCiAKQEAgLTQ0Myw3ICs0NDEsNyBAQAogCV9fbGUxNiBjbG9zZWRfZnJfbnVtOwogCV9fbGUxNiBmaW5pc2hlZF9yYl9udW07CiAJX19sZTE2IGZpbmlzaGVkX2ZyX25hbTsKLQlfX2xlMzIgX191bnVzZWQ7IC8qIDM5NDUgb25seSAqLworCV9fbGUzMiBfX3VudXNlZDsKIH0gX19wYWNrZWQ7CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGNtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGNtZC5jCmluZGV4IDAyNDk5ZjYuLjhmMGJlYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhjbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oY21kLmMKQEAgLTIsNyArMiw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTUxLDkgKzUxLDcgQEAKIAkJSVdMX0NNRChSRVBMWV9SRU1PVkVfQUxMX1NUQSk7CiAJCUlXTF9DTUQoUkVQTFlfVFhGSUZPX0ZMVVNIKTsKIAkJSVdMX0NNRChSRVBMWV9XRVBLRVkpOwotCQlJV0xfQ01EKFJFUExZXzM5NDVfUlgpOwogCQlJV0xfQ01EKFJFUExZX1RYKTsKLQkJSVdMX0NNRChSRVBMWV9SQVRFX1NDQUxFKTsKIAkJSVdMX0NNRChSRVBMWV9MRURTX0NNRCk7CiAJCUlXTF9DTUQoUkVQTFlfVFhfTElOS19RVUFMSVRZX0NNRCk7CiAJCUlXTF9DTUQoQ09FWF9QUklPUklUWV9UQUJMRV9DTUQpOwpAQCAtMTQ1LDEwICsxNDMsMTIgQEAKIHsKIAlpbnQgcmV0OwogCi0JQlVHX09OKCEoY21kLT5mbGFncyAmIENNRF9BU1lOQykpOworCWlmIChXQVJOX09OKCEoY21kLT5mbGFncyAmIENNRF9BU1lOQykpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIEFuIGFzeW5jaHJvbm91cyBjb21tYW5kIGNhbiBub3QgZXhwZWN0IGFuIFNLQiB0byBiZSBzZXQuICovCi0JQlVHX09OKGNtZC0+ZmxhZ3MgJiBDTURfV0FOVF9TS0IpOworCWlmIChXQVJOX09OKGNtZC0+ZmxhZ3MgJiBDTURfV0FOVF9TS0IpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIEFzc2lnbiBhIGdlbmVyaWMgY2FsbGJhY2sgaWYgb25lIGlzIG5vdCBwcm92aWRlZCAqLwogCWlmICghY21kLT5jYWxsYmFjaykKQEAgLTE3MSwxNCArMTcxLDE1IEBACiAJaW50IGNtZF9pZHg7CiAJaW50IHJldDsKIAotCUJVR19PTihjbWQtPmZsYWdzICYgQ01EX0FTWU5DKTsKKwlpZiAoV0FSTl9PTihjbWQtPmZsYWdzICYgQ01EX0FTWU5DKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAkgLyogQSBzeW5jaHJvbm91cyBjb21tYW5kIGNhbiBub3QgaGF2ZSBhIGNhbGxiYWNrIHNldC4gKi8KLQlCVUdfT04oY21kLT5jYWxsYmFjayk7CisJaWYgKFdBUk5fT04oY21kLT5jYWxsYmFjaykpCisJCXJldHVybiAtRUlOVkFMOwogCiAJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkF0dGVtcHRpbmcgdG8gc2VuZCBzeW5jIGNvbW1hbmQgJXNcbiIsCiAJCQlnZXRfY21kX3N0cmluZyhjbWQtPmlkKSk7Ci0JbXV0ZXhfbG9jaygmcHJpdi0+c3luY19jbWRfbXV0ZXgpOwogCiAJc2V0X2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOwogCUlXTF9ERUJVR19JTkZPKHByaXYsICJTZXR0aW5nIEhDTURfQUNUSVZFIGZvciBjb21tYW5kICVzXG4iLApAQCAtMTg5LDcgKzE5MCw3IEBACiAJCXJldCA9IGNtZF9pZHg7CiAJCUlXTF9FUlIocHJpdiwgIkVycm9yIHNlbmRpbmcgJXM6IGVucXVldWVfaGNtZCBmYWlsZWQ6ICVkXG4iLAogCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSwgcmV0KTsKLQkJZ290byBvdXQ7CisJCXJldHVybiByZXQ7CiAJfQogCiAJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlLApAQCAtMjI5LDggKzIzMCw3IEBACiAJCWdvdG8gY2FuY2VsOwogCX0KIAotCXJldCA9IDA7Ci0JZ290byBvdXQ7CisJcmV0dXJuIDA7CiAKIGNhbmNlbDoKIAlpZiAoY21kLT5mbGFncyAmIENNRF9XQU5UX1NLQikgewpAQCAtMjQ4LDggKzI0OCw3IEBACiAJCWl3bF9mcmVlX3BhZ2VzKHByaXYsIGNtZC0+cmVwbHlfcGFnZSk7CiAJCWNtZC0+cmVwbHlfcGFnZSA9IDA7CiAJfQotb3V0OgotCW11dGV4X3VubG9jaygmcHJpdi0+c3luY19jbWRfbXV0ZXgpOworCiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGVscGVycy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGVscGVycy5oCmluZGV4IDg4MjFmMDguLjQxMjA3YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhlbHBlcnMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oZWxwZXJzLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KQEAgLTY0LDMwICs2NCw2IEBACiAJcmV0dXJuIC0taW5kZXggJiAobl9iZCAtIDEpOwogfQogCi0vKiBUT0RPOiBNb3ZlIGZ3X2Rlc2MgZnVuY3Rpb25zIHRvIGl3bC1wY2kua28gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfZnJlZV9md19kZXNjKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LAotCQkJCSAgICBzdHJ1Y3QgZndfZGVzYyAqZGVzYykKLXsKLQlpZiAoZGVzYy0+dl9hZGRyKQotCQlkbWFfZnJlZV9jb2hlcmVudCgmcGNpX2Rldi0+ZGV2LCBkZXNjLT5sZW4sCi0JCQkJICBkZXNjLT52X2FkZHIsIGRlc2MtPnBfYWRkcik7Ci0JZGVzYy0+dl9hZGRyID0gTlVMTDsKLQlkZXNjLT5sZW4gPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpd2xfYWxsb2NfZndfZGVzYyhzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwKLQkJCQkgICAgc3RydWN0IGZ3X2Rlc2MgKmRlc2MpCi17Ci0JaWYgKCFkZXNjLT5sZW4pIHsKLQkJZGVzYy0+dl9hZGRyID0gTlVMTDsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZGVzYy0+dl9hZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KCZwY2lfZGV2LT5kZXYsIGRlc2MtPmxlbiwKLQkJCQkJICAmZGVzYy0+cF9hZGRyLCBHRlBfS0VSTkVMKTsKLQlyZXR1cm4gKGRlc2MtPnZfYWRkciAhPSBOVUxMKSA/IDAgOiAtRU5PTUVNOwotfQotCiAvKgogICogd2UgaGF2ZSA4IGJpdHMgdXNlZCBsaWtlIHRoaXM6CiAgKgpAQCAtMTMxLDYgKzEwNywxOSBAQAogCQkJaWVlZTgwMjExX3N0b3BfcXVldWUocHJpdi0+aHcsIGFjKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGl3bF93YWtlX2FueV9xdWV1ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgICAgc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eCkKK3sKKwl1OCBhYzsKKworCWZvciAoYWMgPSAwOyBhYyA8IEFDX05VTTsgYWMrKykgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUXVldWUgU3RhdHVzOiBRWyVkXSAlc1xuIiwKKwkJCWFjLCAoYXRvbWljX3JlYWQoJnByaXYtPnF1ZXVlX3N0b3BfY291bnRbYWNdKSA+IDApCisJCQkgICAgICA/ICJzdG9wcGVkIiA6ICJhd2FrZSIpOworCQlpd2xfd2FrZV9xdWV1ZShwcml2LCAmcHJpdi0+dHhxW2N0eC0+YWNfdG9fcXVldWVbYWNdXSk7CisJfQorfQorCiAjZGVmaW5lIGllZWU4MDIxMV9zdG9wX3F1ZXVlIERPX05PVF9VU0VfaWVlZTgwMjExX3N0b3BfcXVldWUKICNkZWZpbmUgaWVlZTgwMjExX3dha2VfcXVldWUgRE9fTk9UX1VTRV9pZWVlODAyMTFfd2FrZV9xdWV1ZQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1pby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTRhOTA2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaW8uYwpAQCAtMCwwICsxLDI5NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgorICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIml3bC1pby5oIgorCisjZGVmaW5lIElXTF9QT0xMX0lOVEVSVkFMIDEwCS8qIG1pY3Jvc2Vjb25kcyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgX19pd2xfc2V0X2JpdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQoreworCWl3bF93cml0ZTMyKHByaXYsIHJlZywgaXdsX3JlYWQzMihwcml2LCByZWcpIHwgbWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2l3bF9jbGVhcl9iaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKK3sKKwlpd2xfd3JpdGUzMihwcml2LCByZWcsIGl3bF9yZWFkMzIocHJpdiwgcmVnKSAmIH5tYXNrKTsKK30KKwordm9pZCBpd2xfc2V0X2JpdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cmVnX2xvY2ssIGZsYWdzKTsKKwlfX2l3bF9zZXRfYml0KHByaXYsIHJlZywgbWFzayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cmVnX2xvY2ssIGZsYWdzKTsKK30KKwordm9pZCBpd2xfY2xlYXJfYml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yZWdfbG9jaywgZmxhZ3MpOworCV9faXdsX2NsZWFyX2JpdChwcml2LCByZWcsIG1hc2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJlZ19sb2NrLCBmbGFncyk7Cit9CisKK2ludCBpd2xfcG9sbF9iaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgYWRkciwKKwkJIHUzMiBiaXRzLCB1MzIgbWFzaywgaW50IHRpbWVvdXQpCit7CisJaW50IHQgPSAwOworCisJZG8geworCQlpZiAoKGl3bF9yZWFkMzIocHJpdiwgYWRkcikgJiBtYXNrKSA9PSAoYml0cyAmIG1hc2spKQorCQkJcmV0dXJuIHQ7CisJCXVkZWxheShJV0xfUE9MTF9JTlRFUlZBTCk7CisJCXQgKz0gSVdMX1BPTExfSU5URVJWQUw7CisJfSB3aGlsZSAodCA8IHRpbWVvdXQpOworCisJcmV0dXJuIC1FVElNRURPVVQ7Cit9CisKK2ludCBpd2xfZ3JhYl9uaWNfYWNjZXNzX3NpbGVudChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaW50IHJldDsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnByaXYtPnJlZ19sb2NrKTsKKworCS8qIHRoaXMgYml0IHdha2VzIHVwIHRoZSBOSUMgKi8KKwlfX2l3bF9zZXRfYml0KHByaXYsIENTUl9HUF9DTlRSTCwgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKKworCS8qCisJICogVGhlc2UgYml0cyBzYXkgdGhlIGRldmljZSBpcyBydW5uaW5nLCBhbmQgc2hvdWxkIGtlZXAgcnVubmluZyBmb3IKKwkgKiBhdCBsZWFzdCBhIHNob3J0IHdoaWxlIChhdCBsZWFzdCBhcyBsb25nIGFzIE1BQ19BQ0NFU1NfUkVRIHN0YXlzIDEpLAorCSAqIGJ1dCB0aGV5IGRvIG5vdCBpbmRpY2F0ZSB0aGF0IGVtYmVkZGVkIFNSQU0gaXMgcmVzdG9yZWQgeWV0OworCSAqIDM5NDUgYW5kIDQ5NjUgaGF2ZSB2b2xhdGlsZSBTUkFNLCBhbmQgbXVzdCBzYXZlL3Jlc3RvcmUgY29udGVudHMKKwkgKiB0by9mcm9tIGhvc3QgRFJBTSB3aGVuIHNsZWVwaW5nL3dha2luZyBmb3IgcG93ZXItc2F2aW5nLgorCSAqIEVhY2ggZGlyZWN0aW9uIHRha2VzIGFwcHJveGltYXRlbHkgMS80IG1pbGxpc2Vjb25kOyB3aXRoIHRoaXMKKwkgKiBvdmVyaGVhZCwgaXQncyBhIGdvb2QgaWRlYSB0byBncmFiIGFuZCBob2xkIE1BQ19BQ0NFU1NfUkVRVUVTVCBpZiBhCisJICogc2VyaWVzIG9mIHJlZ2lzdGVyIGFjY2Vzc2VzIGFyZSBleHBlY3RlZCAoZS5nLiByZWFkaW5nIEV2ZW50IExvZyksCisJICogdG8ga2VlcCBkZXZpY2UgZnJvbSBzbGVlcGluZy4KKwkgKgorCSAqIENTUl9VQ09ERV9EUlZfR1AxIHJlZ2lzdGVyIGJpdCBNQUNfU0xFRVAgPT0gMCBpbmRpY2F0ZXMgdGhhdAorCSAqIFNSQU0gaXMgb2theS9yZXN0b3JlZC4gIFdlIGRvbid0IGNoZWNrIHRoYXQgaGVyZSBiZWNhdXNlIHRoaXMgY2FsbAorCSAqIGlzIGp1c3QgZm9yIGhhcmR3YXJlIHJlZ2lzdGVyIGFjY2VzczsgYnV0IEdQMSBNQUNfU0xFRVAgY2hlY2sgaXMgYQorCSAqIGdvb2QgaWRlYSBiZWZvcmUgYWNjZXNzaW5nIDM5NDUvNDk2NSBTUkFNIChlLmcuIHJlYWRpbmcgRXZlbnQgTG9nKS4KKwkgKgorCSAqIDUwMDAgc2VyaWVzIGFuZCBsYXRlciAoaW5jbHVkaW5nIDEwMDAgc2VyaWVzKSBoYXZlIG5vbi12b2xhdGlsZSBTUkFNLAorCSAqIGFuZCBkbyBub3Qgc2F2ZS9yZXN0b3JlIFNSQU0gd2hlbiBwb3dlciBjeWNsaW5nLgorCSAqLworCXJldCA9IGl3bF9wb2xsX2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCisJCQkgICBDU1JfR1BfQ05UUkxfUkVHX1ZBTF9NQUNfQUNDRVNTX0VOLAorCQkJICAgKENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQ0xPQ0tfUkVBRFkgfAorCQkJICAgIENTUl9HUF9DTlRSTF9SRUdfRkxBR19HT0lOR19UT19TTEVFUCksIDE1MDAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlpd2xfd3JpdGUzMihwcml2LCBDU1JfUkVTRVQsIENTUl9SRVNFVF9SRUdfRkxBR19GT1JDRV9OTUkpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGl3bF9ncmFiX25pY19hY2Nlc3Moc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWludCByZXQgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzX3NpbGVudChwcml2KTsKKwlpZiAocmV0KSB7CisJCXUzMiB2YWwgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9HUF9DTlRSTCk7CisJCUlXTF9FUlIocHJpdiwKKwkJCSJNQUMgaXMgaW4gZGVlcCBzbGVlcCEuIENTUl9HUF9DTlRSTCA9IDB4JTA4WFxuIiwgdmFsKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGl3bF9yZWxlYXNlX25pY19hY2Nlc3Moc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnByaXYtPnJlZ19sb2NrKTsKKwlfX2l3bF9jbGVhcl9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAorCQkJQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKK30KKwordTMyIGl3bF9yZWFkX2RpcmVjdDMyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZykKK3sKKwl1MzIgdmFsdWU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yZWdfbG9jaywgZmxhZ3MpOworCWl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJdmFsdWUgPSBpd2xfcmVhZDMyKHByaXYsIHJlZyk7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yZWdfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHZhbHVlOworfQorCit2b2lkIGl3bF93cml0ZV9kaXJlY3QzMihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJlZ19sb2NrLCBmbGFncyk7CisJaWYgKCFpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpKSB7CisJCWl3bF93cml0ZTMyKHByaXYsIHJlZywgdmFsdWUpOworCQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yZWdfbG9jaywgZmxhZ3MpOworfQorCitpbnQgaXdsX3BvbGxfZGlyZWN0X2JpdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1MzIgbWFzaywKKwkJCWludCB0aW1lb3V0KQoreworCWludCB0ID0gMDsKKworCWRvIHsKKwkJaWYgKChpd2xfcmVhZF9kaXJlY3QzMihwcml2LCBhZGRyKSAmIG1hc2spID09IG1hc2spCisJCQlyZXR1cm4gdDsKKwkJdWRlbGF5KElXTF9QT0xMX0lOVEVSVkFMKTsKKwkJdCArPSBJV0xfUE9MTF9JTlRFUlZBTDsKKwl9IHdoaWxlICh0IDwgdGltZW91dCk7CisKKwlyZXR1cm4gLUVUSU1FRE9VVDsKK30KKworc3RhdGljIGlubGluZSB1MzIgX19pd2xfcmVhZF9wcnBoKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZykKK3sKKwlpd2xfd3JpdGUzMihwcml2LCBIQlVTX1RBUkdfUFJQSF9SQUREUiwgcmVnIHwgKDMgPDwgMjQpKTsKKwlybWIoKTsKKwlyZXR1cm4gaXdsX3JlYWQzMihwcml2LCBIQlVTX1RBUkdfUFJQSF9SREFUKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9faXdsX3dyaXRlX3BycGgoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgYWRkciwgdTMyIHZhbCkKK3sKKwlpd2xfd3JpdGUzMihwcml2LCBIQlVTX1RBUkdfUFJQSF9XQUREUiwKKwkJICAgICgoYWRkciAmIDB4MDAwMEZGRkYpIHwgKDMgPDwgMjQpKSk7CisJd21iKCk7CisJaXdsX3dyaXRlMzIocHJpdiwgSEJVU19UQVJHX1BSUEhfV0RBVCwgdmFsKTsKK30KKwordTMyIGl3bF9yZWFkX3BycGgoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgcmVnKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHZhbDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yZWdfbG9jaywgZmxhZ3MpOworCWl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJdmFsID0gX19pd2xfcmVhZF9wcnBoKHByaXYsIHJlZyk7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yZWdfbG9jaywgZmxhZ3MpOworCXJldHVybiB2YWw7Cit9CisKK3ZvaWQgaXdsX3dyaXRlX3BycGgoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgYWRkciwgdTMyIHZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJlZ19sb2NrLCBmbGFncyk7CisJaWYgKCFpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpKSB7CisJCV9faXdsX3dyaXRlX3BycGgocHJpdiwgYWRkciwgdmFsKTsKKwkJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cmVnX2xvY2ssIGZsYWdzKTsKK30KKwordm9pZCBpd2xfc2V0X2JpdHNfcHJwaChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cmVnX2xvY2ssIGZsYWdzKTsKKwlpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCV9faXdsX3dyaXRlX3BycGgocHJpdiwgcmVnLCBfX2l3bF9yZWFkX3BycGgocHJpdiwgcmVnKSB8IG1hc2spOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cmVnX2xvY2ssIGZsYWdzKTsKK30KKwordm9pZCBpd2xfc2V0X2JpdHNfbWFza19wcnBoKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZywKKwkJCSAgICB1MzIgYml0cywgdTMyIG1hc2spCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yZWdfbG9jaywgZmxhZ3MpOworCWl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJX19pd2xfd3JpdGVfcHJwaChwcml2LCByZWcsCisJCQkgKF9faXdsX3JlYWRfcHJwaChwcml2LCByZWcpICYgbWFzaykgfCBiaXRzKTsKKwlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJlZ19sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgaXdsX2NsZWFyX2JpdHNfcHJwaChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHZhbDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yZWdfbG9jaywgZmxhZ3MpOworCWl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJdmFsID0gX19pd2xfcmVhZF9wcnBoKHByaXYsIHJlZyk7CisJX19pd2xfd3JpdGVfcHJwaChwcml2LCByZWcsICh2YWwgJiB+bWFzaykpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cmVnX2xvY2ssIGZsYWdzKTsKK30KKwordm9pZCBfaXdsX3JlYWRfdGFyZ19tZW1fd29yZHMoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgYWRkciwKKwkJCSAgICAgIHZvaWQgKmJ1ZiwgaW50IHdvcmRzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IG9mZnM7CisJdTMyICp2YWxzID0gYnVmOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJlZ19sb2NrLCBmbGFncyk7CisJaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKworCWl3bF93cml0ZTMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkFERFIsIGFkZHIpOworCXJtYigpOworCisJZm9yIChvZmZzID0gMDsgb2ZmcyA8IHdvcmRzOyBvZmZzKyspCisJCXZhbHNbb2Zmc10gPSBpd2xfcmVhZDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7CisKKwlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJlZ19sb2NrLCBmbGFncyk7Cit9CisKK3UzMiBpd2xfcmVhZF90YXJnX21lbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBhZGRyKQoreworCXUzMiB2YWx1ZTsKKworCV9pd2xfcmVhZF90YXJnX21lbV93b3Jkcyhwcml2LCBhZGRyLCAmdmFsdWUsIDEpOworCisJcmV0dXJuIHZhbHVlOworfQorCit2b2lkIGl3bF93cml0ZV90YXJnX21lbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1MzIgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cmVnX2xvY2ssIGZsYWdzKTsKKwlpZiAoIWl3bF9ncmFiX25pY19hY2Nlc3MocHJpdikpIHsKKwkJaXdsX3dyaXRlMzIocHJpdiwgSEJVU19UQVJHX01FTV9XQUREUiwgYWRkcik7CisJCXdtYigpOworCQlpd2xfd3JpdGUzMihwcml2LCBIQlVTX1RBUkdfTUVNX1dEQVQsIHZhbCk7CisJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJlZ19sb2NrLCBmbGFncyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1pby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaW8uaAppbmRleCAwMjAzYTNiLi44NjllZGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1pby5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWlvLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QuCiAgKgpAQCAtMzUsNDk0ICszNSw1OCBAQAogI2luY2x1ZGUgIml3bC1kZWJ1Zy5oIgogI2luY2x1ZGUgIml3bC1kZXZ0cmFjZS5oIgogCi0vKgotICogSU8sIHJlZ2lzdGVyLCBhbmQgTklDIG1lbW9yeSBhY2Nlc3MgZnVuY3Rpb25zCi0gKgotICogTk9URSBvbiBuYW1pbmcgY29udmVudGlvbiBhbmQgbWFjcm8gdXNhZ2UgZm9yIHRoZXNlCi0gKgotICogQSBzaW5nbGUgXyBwcmVmaXggYmVmb3JlIGEgYW4gYWNjZXNzIGZ1bmN0aW9uIG1lYW5zIHRoYXQgbm8gc3RhdGUKLSAqIGNoZWNrIG9yIGRlYnVnIGluZm9ybWF0aW9uIGlzIHByaW50ZWQgd2hlbiB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZC4KLSAqCi0gKiBBIGRvdWJsZSBfXyBwcmVmaXggYmVmb3JlIGFuIGFjY2VzcyBmdW5jdGlvbiBtZWFucyB0aGF0IHN0YXRlIGlzIGNoZWNrZWQKLSAqIGFuZCB0aGUgY3VycmVudCBsaW5lIG51bWJlciBhbmQgY2FsbGVyIGZ1bmN0aW9uIG5hbWUgYXJlIHByaW50ZWQgaW4gYWRkaXRpb24KLSAqIHRvIGFueSBvdGhlciBkZWJ1ZyBvdXRwdXQuCi0gKgotICogVGhlIG5vbi1wcmVmaXhlZCBuYW1lIGlzIHRoZSAjZGVmaW5lIHRoYXQgbWFwcyB0aGUgY2FsbGVyIGludG8gYQotICogI2RlZmluZSB0aGF0IHByb3ZpZGVzIHRoZSBjYWxsZXIncyBuYW1lIGFuZCBfX0xJTkVfXyB0byB0aGUgZG91YmxlCi0gKiBwcmVmaXggdmVyc2lvbi4KLSAqCi0gKiBJZiB5b3Ugd2lzaCB0byBjYWxsIHRoZSBmdW5jdGlvbiB3aXRob3V0IGFueSBkZWJ1ZyBvciBzdGF0ZSBjaGVja2luZywKLSAqIHlvdSBzaG91bGQgdXNlIHRoZSBzaW5nbGUgXyBwcmVmaXggdmVyc2lvbiAoYXMgaXMgdXNlZCBieSBkZXBlbmRlbnQgSU8KLSAqIHJvdXRpbmVzLCBmb3IgZXhhbXBsZSBfaXdsX3JlYWRfZGlyZWN0MzIgY2FsbHMgdGhlIG5vbi1jaGVjayB2ZXJzaW9uIG9mCi0gKiBfaXdsX3JlYWQzMi4pCi0gKgotICogVGhlc2UgZGVjbGFyYXRpb25zIGFyZSAqZXh0cmVtZWx5KiB1c2VmdWwgaW4gcXVpY2tseSBpc29sYXRpbmcgY29kZSBkZWx0YXMKLSAqIHdoaWNoIHJlc3VsdCBpbiBtaXNjb25maWd1cmF0aW9uIG9mIHRoZSBoYXJkd2FyZSBJL08uICBJbiBjb21iaW5hdGlvbiB3aXRoCi0gKiBnaXQtYmlzZWN0IGFuZCB0aGUgSU8gZGVidWcgbGV2ZWwgeW91IGNhbiBxdWlja2x5IGRldGVybWluZSB0aGUgc3BlY2lmaWMKLSAqIGNvbW1pdCB3aGljaCBicmVha3MgdGhlIElPIHNlcXVlbmNlIHRvIHRoZSBoYXJkd2FyZS4KLSAqCi0gKi8KLQotc3RhdGljIGlubGluZSB2b2lkIF9pd2xfd3JpdGU4KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIG9mcywgdTggdmFsKQorc3RhdGljIGlubGluZSB2b2lkIGl3bF93cml0ZTgoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgb2ZzLCB1OCB2YWwpCiB7CiAJdHJhY2VfaXdsd2lmaV9kZXZfaW93cml0ZTgocHJpdiwgb2ZzLCB2YWwpOwogCWlvd3JpdGU4KHZhbCwgcHJpdi0+aHdfYmFzZSArIG9mcyk7CiB9CiAKLSNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotc3RhdGljIGlubGluZSB2b2lkIF9faXdsX3dyaXRlOChjb25zdCBjaGFyICpmLCB1MzIgbCwgc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSB1MzIgb2ZzLCB1OCB2YWwpCi17Ci0JSVdMX0RFQlVHX0lPKHByaXYsICJ3cml0ZTgoMHglMDhYLCAweCUwMlgpIC0gJXMgJWRcbiIsIG9mcywgdmFsLCBmLCBsKTsKLQlfaXdsX3dyaXRlOChwcml2LCBvZnMsIHZhbCk7Ci19Ci0jZGVmaW5lIGl3bF93cml0ZTgocHJpdiwgb2ZzLCB2YWwpIFwKLQlfX2l3bF93cml0ZTgoX19GSUxFX18sIF9fTElORV9fLCBwcml2LCBvZnMsIHZhbCkKLSNlbHNlCi0jZGVmaW5lIGl3bF93cml0ZTgocHJpdiwgb2ZzLCB2YWwpIF9pd2xfd3JpdGU4KHByaXYsIG9mcywgdmFsKQotI2VuZGlmCi0KLQotc3RhdGljIGlubGluZSB2b2lkIF9pd2xfd3JpdGUzMihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBvZnMsIHUzMiB2YWwpCitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX3dyaXRlMzIoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgb2ZzLCB1MzIgdmFsKQogewogCXRyYWNlX2l3bHdpZmlfZGV2X2lvd3JpdGUzMihwcml2LCBvZnMsIHZhbCk7CiAJaW93cml0ZTMyKHZhbCwgcHJpdi0+aHdfYmFzZSArIG9mcyk7CiB9CiAKLSNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotc3RhdGljIGlubGluZSB2b2lkIF9faXdsX3dyaXRlMzIoY29uc3QgY2hhciAqZiwgdTMyIGwsIHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgdTMyIG9mcywgdTMyIHZhbCkKLXsKLQlJV0xfREVCVUdfSU8ocHJpdiwgIndyaXRlMzIoMHglMDhYLCAweCUwOFgpIC0gJXMgJWRcbiIsIG9mcywgdmFsLCBmLCBsKTsKLQlfaXdsX3dyaXRlMzIocHJpdiwgb2ZzLCB2YWwpOwotfQotI2RlZmluZSBpd2xfd3JpdGUzMihwcml2LCBvZnMsIHZhbCkgXAotCV9faXdsX3dyaXRlMzIoX19GSUxFX18sIF9fTElORV9fLCBwcml2LCBvZnMsIHZhbCkKLSNlbHNlCi0jZGVmaW5lIGl3bF93cml0ZTMyKHByaXYsIG9mcywgdmFsKSBfaXdsX3dyaXRlMzIocHJpdiwgb2ZzLCB2YWwpCi0jZW5kaWYKLQotc3RhdGljIGlubGluZSB1MzIgX2l3bF9yZWFkMzIoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgb2ZzKQorc3RhdGljIGlubGluZSB1MzIgaXdsX3JlYWQzMihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBvZnMpCiB7CiAJdTMyIHZhbCA9IGlvcmVhZDMyKHByaXYtPmh3X2Jhc2UgKyBvZnMpOwogCXRyYWNlX2l3bHdpZmlfZGV2X2lvcmVhZDMyKHByaXYsIG9mcywgdmFsKTsKIAlyZXR1cm4gdmFsOwogfQogCi0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLXN0YXRpYyBpbmxpbmUgdTMyIF9faXdsX3JlYWQzMihjaGFyICpmLCB1MzIgbCwgc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgb2ZzKQotewotCUlXTF9ERUJVR19JTyhwcml2LCAicmVhZF9kaXJlY3QzMigweCUwOFgpIC0gJXMgJWRcbiIsIG9mcywgZiwgbCk7Ci0JcmV0dXJuIF9pd2xfcmVhZDMyKHByaXYsIG9mcyk7Ci19Ci0jZGVmaW5lIGl3bF9yZWFkMzIocHJpdiwgb2ZzKSBfX2l3bF9yZWFkMzIoX19GSUxFX18sIF9fTElORV9fLCBwcml2LCBvZnMpCi0jZWxzZQotI2RlZmluZSBpd2xfcmVhZDMyKHAsIG8pIF9pd2xfcmVhZDMyKHAsIG8pCi0jZW5kaWYKK3ZvaWQgaXdsX3NldF9iaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzayk7Cit2b2lkIGl3bF9jbGVhcl9iaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzayk7CiAKLSNkZWZpbmUgSVdMX1BPTExfSU5URVJWQUwgMTAJLyogbWljcm9zZWNvbmRzICovCi1zdGF0aWMgaW5saW5lIGludCBfaXdsX3BvbGxfYml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIGFkZHIsCi0JCQkJdTMyIGJpdHMsIHUzMiBtYXNrLCBpbnQgdGltZW91dCkKLXsKLQlpbnQgdCA9IDA7CitpbnQgaXdsX3BvbGxfYml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIGFkZHIsCisJCSB1MzIgYml0cywgdTMyIG1hc2ssIGludCB0aW1lb3V0KTsKK2ludCBpd2xfcG9sbF9kaXJlY3RfYml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIGFkZHIsIHUzMiBtYXNrLAorCQkJaW50IHRpbWVvdXQpOwogCi0JZG8gewotCQlpZiAoKF9pd2xfcmVhZDMyKHByaXYsIGFkZHIpICYgbWFzaykgPT0gKGJpdHMgJiBtYXNrKSkKLQkJCXJldHVybiB0OwotCQl1ZGVsYXkoSVdMX1BPTExfSU5URVJWQUwpOwotCQl0ICs9IElXTF9QT0xMX0lOVEVSVkFMOwotCX0gd2hpbGUgKHQgPCB0aW1lb3V0KTsKK2ludCBpd2xfZ3JhYl9uaWNfYWNjZXNzX3NpbGVudChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworaW50IGl3bF9ncmFiX25pY19hY2Nlc3Moc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3ZvaWQgaXdsX3JlbGVhc2VfbmljX2FjY2VzcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCi0JcmV0dXJuIC1FVElNRURPVVQ7Ci19Ci0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLXN0YXRpYyBpbmxpbmUgaW50IF9faXdsX3BvbGxfYml0KGNvbnN0IGNoYXIgKmYsIHUzMiBsLAotCQkJCSBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBhZGRyLAotCQkJCSB1MzIgYml0cywgdTMyIG1hc2ssIGludCB0aW1lb3V0KQotewotCWludCByZXQgPSBfaXdsX3BvbGxfYml0KHByaXYsIGFkZHIsIGJpdHMsIG1hc2ssIHRpbWVvdXQpOwotCUlXTF9ERUJVR19JTyhwcml2LCAicG9sbF9iaXQoMHglMDhYLCAweCUwOFgsIDB4JTA4WCkgLSAlcy0gJXMgJWRcbiIsCi0JCSAgICAgYWRkciwgYml0cywgbWFzaywKLQkJICAgICB1bmxpa2VseShyZXQgID09IC1FVElNRURPVVQpID8gInRpbWVvdXQiIDogIiIsIGYsIGwpOwotCXJldHVybiByZXQ7Ci19Ci0jZGVmaW5lIGl3bF9wb2xsX2JpdChwcml2LCBhZGRyLCBiaXRzLCBtYXNrLCB0aW1lb3V0KSBcCi0JX19pd2xfcG9sbF9iaXQoX19GSUxFX18sIF9fTElORV9fLCBwcml2LCBhZGRyLCBiaXRzLCBtYXNrLCB0aW1lb3V0KQotI2Vsc2UKLSNkZWZpbmUgaXdsX3BvbGxfYml0KHAsIGEsIGIsIG0sIHQpIF9pd2xfcG9sbF9iaXQocCwgYSwgYiwgbSwgdCkKLSNlbmRpZgordTMyIGl3bF9yZWFkX2RpcmVjdDMyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZyk7Cit2b2lkIGl3bF93cml0ZV9kaXJlY3QzMihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWx1ZSk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfaXdsX3NldF9iaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKLXsKLQlfaXdsX3dyaXRlMzIocHJpdiwgcmVnLCBfaXdsX3JlYWQzMihwcml2LCByZWcpIHwgbWFzayk7Ci19Ci0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2l3bF9zZXRfYml0KGNvbnN0IGNoYXIgKmYsIHUzMiBsLAotCQkJCSBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQotewotCXUzMiB2YWwgPSBfaXdsX3JlYWQzMihwcml2LCByZWcpIHwgbWFzazsKLQlJV0xfREVCVUdfSU8ocHJpdiwgInNldF9iaXQoMHglMDhYLCAweCUwOFgpID0gMHglMDhYXG4iLCByZWcsIG1hc2ssIHZhbCk7Ci0JX2l3bF93cml0ZTMyKHByaXYsIHJlZywgdmFsKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfc2V0X2JpdChzdHJ1Y3QgaXdsX3ByaXYgKnAsIHUzMiByLCB1MzIgbSkKLXsKLQl1bnNpZ25lZCBsb25nIHJlZ19mbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5yZWdfbG9jaywgcmVnX2ZsYWdzKTsKLQlfX2l3bF9zZXRfYml0KF9fRklMRV9fLCBfX0xJTkVfXywgcCwgciwgbSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+cmVnX2xvY2ssIHJlZ19mbGFncyk7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGl3bF9zZXRfYml0KHN0cnVjdCBpd2xfcHJpdiAqcCwgdTMyIHIsIHUzMiBtKQotewotCXVuc2lnbmVkIGxvbmcgcmVnX2ZsYWdzOwordTMyIGl3bF9yZWFkX3BycGgoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgcmVnKTsKK3ZvaWQgaXdsX3dyaXRlX3BycGgoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgYWRkciwgdTMyIHZhbCk7Cit2b2lkIGl3bF9zZXRfYml0c19wcnBoKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spOwordm9pZCBpd2xfc2V0X2JpdHNfbWFza19wcnBoKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZywKKwkJCSAgICB1MzIgYml0cywgdTMyIG1hc2spOwordm9pZCBpd2xfY2xlYXJfYml0c19wcnBoKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnAtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOwotCV9pd2xfc2V0X2JpdChwLCByLCBtKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5yZWdfbG9jaywgcmVnX2ZsYWdzKTsKLX0KLSNlbmRpZgordm9pZCBfaXdsX3JlYWRfdGFyZ19tZW1fd29yZHMoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgYWRkciwKKwkJCSAgICAgIHZvaWQgKmJ1ZiwgaW50IHdvcmRzKTsKIAotc3RhdGljIGlubGluZSB2b2lkIF9pd2xfY2xlYXJfYml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCi17Ci0JX2l3bF93cml0ZTMyKHByaXYsIHJlZywgX2l3bF9yZWFkMzIocHJpdiwgcmVnKSAmIH5tYXNrKTsKLX0KLSNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotc3RhdGljIGlubGluZSB2b2lkIF9faXdsX2NsZWFyX2JpdChjb25zdCBjaGFyICpmLCB1MzIgbCwKLQkJCQkgICBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQotewotCXUzMiB2YWwgPSBfaXdsX3JlYWQzMihwcml2LCByZWcpICYgfm1hc2s7Ci0JSVdMX0RFQlVHX0lPKHByaXYsICJjbGVhcl9iaXQoMHglMDhYLCAweCUwOFgpID0gMHglMDhYXG4iLCByZWcsIG1hc2ssIHZhbCk7Ci0JX2l3bF93cml0ZTMyKHByaXYsIHJlZywgdmFsKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfY2xlYXJfYml0KHN0cnVjdCBpd2xfcHJpdiAqcCwgdTMyIHIsIHUzMiBtKQotewotCXVuc2lnbmVkIGxvbmcgcmVnX2ZsYWdzOworI2RlZmluZSBpd2xfcmVhZF90YXJnX21lbV93b3Jkcyhwcml2LCBhZGRyLCBidWYsIGJ1ZnNpemUpCVwKKwlkbyB7CQkJCQkJCVwKKwkJQlVJTERfQlVHX09OKChidWZzaXplKSAlIHNpemVvZih1MzIpKTsJCVwKKwkJX2l3bF9yZWFkX3RhcmdfbWVtX3dvcmRzKHByaXYsIGFkZHIsIGJ1ZiwJXAorCQkJCQkgKGJ1ZnNpemUpIC8gc2l6ZW9mKHUzMikpO1wKKwl9IHdoaWxlICgwKQogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnAtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOwotCV9faXdsX2NsZWFyX2JpdChfX0ZJTEVfXywgX19MSU5FX18sIHAsIHIsIG0pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfY2xlYXJfYml0KHN0cnVjdCBpd2xfcHJpdiAqcCwgdTMyIHIsIHUzMiBtKQotewotCXVuc2lnbmVkIGxvbmcgcmVnX2ZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnAtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOwotCV9pd2xfY2xlYXJfYml0KHAsIHIsIG0pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgaW50IF9pd2xfZ3JhYl9uaWNfYWNjZXNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQlpbnQgcmV0OwotCXUzMiB2YWw7Ci0KLQkvKiB0aGlzIGJpdCB3YWtlcyB1cCB0aGUgTklDICovCi0JX2l3bF9zZXRfYml0KHByaXYsIENTUl9HUF9DTlRSTCwgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKLQotCS8qCi0JICogVGhlc2UgYml0cyBzYXkgdGhlIGRldmljZSBpcyBydW5uaW5nLCBhbmQgc2hvdWxkIGtlZXAgcnVubmluZyBmb3IKLQkgKiBhdCBsZWFzdCBhIHNob3J0IHdoaWxlIChhdCBsZWFzdCBhcyBsb25nIGFzIE1BQ19BQ0NFU1NfUkVRIHN0YXlzIDEpLAotCSAqIGJ1dCB0aGV5IGRvIG5vdCBpbmRpY2F0ZSB0aGF0IGVtYmVkZGVkIFNSQU0gaXMgcmVzdG9yZWQgeWV0OwotCSAqIDM5NDUgYW5kIDQ5NjUgaGF2ZSB2b2xhdGlsZSBTUkFNLCBhbmQgbXVzdCBzYXZlL3Jlc3RvcmUgY29udGVudHMKLQkgKiB0by9mcm9tIGhvc3QgRFJBTSB3aGVuIHNsZWVwaW5nL3dha2luZyBmb3IgcG93ZXItc2F2aW5nLgotCSAqIEVhY2ggZGlyZWN0aW9uIHRha2VzIGFwcHJveGltYXRlbHkgMS80IG1pbGxpc2Vjb25kOyB3aXRoIHRoaXMKLQkgKiBvdmVyaGVhZCwgaXQncyBhIGdvb2QgaWRlYSB0byBncmFiIGFuZCBob2xkIE1BQ19BQ0NFU1NfUkVRVUVTVCBpZiBhCi0JICogc2VyaWVzIG9mIHJlZ2lzdGVyIGFjY2Vzc2VzIGFyZSBleHBlY3RlZCAoZS5nLiByZWFkaW5nIEV2ZW50IExvZyksCi0JICogdG8ga2VlcCBkZXZpY2UgZnJvbSBzbGVlcGluZy4KLQkgKgotCSAqIENTUl9VQ09ERV9EUlZfR1AxIHJlZ2lzdGVyIGJpdCBNQUNfU0xFRVAgPT0gMCBpbmRpY2F0ZXMgdGhhdAotCSAqIFNSQU0gaXMgb2theS9yZXN0b3JlZC4gIFdlIGRvbid0IGNoZWNrIHRoYXQgaGVyZSBiZWNhdXNlIHRoaXMgY2FsbAotCSAqIGlzIGp1c3QgZm9yIGhhcmR3YXJlIHJlZ2lzdGVyIGFjY2VzczsgYnV0IEdQMSBNQUNfU0xFRVAgY2hlY2sgaXMgYQotCSAqIGdvb2QgaWRlYSBiZWZvcmUgYWNjZXNzaW5nIDM5NDUvNDk2NSBTUkFNIChlLmcuIHJlYWRpbmcgRXZlbnQgTG9nKS4KLQkgKgotCSAqIDUwMDAgc2VyaWVzIGFuZCBsYXRlciAoaW5jbHVkaW5nIDEwMDAgc2VyaWVzKSBoYXZlIG5vbi12b2xhdGlsZSBTUkFNLAotCSAqIGFuZCBkbyBub3Qgc2F2ZS9yZXN0b3JlIFNSQU0gd2hlbiBwb3dlciBjeWNsaW5nLgotCSAqLwotCXJldCA9IF9pd2xfcG9sbF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAotCQkJICAgQ1NSX0dQX0NOVFJMX1JFR19WQUxfTUFDX0FDQ0VTU19FTiwKLQkJCSAgIChDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0NMT0NLX1JFQURZIHwKLQkJCSAgICBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfR09JTkdfVE9fU0xFRVApLCAxNTAwMCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJdmFsID0gX2l3bF9yZWFkMzIocHJpdiwgQ1NSX0dQX0NOVFJMKTsKLQkJSVdMX0VSUihwcml2LCAiTUFDIGlzIGluIGRlZXAgc2xlZXAhLiAgQ1NSX0dQX0NOVFJMID0gMHglMDhYXG4iLCB2YWwpOwotCQlfaXdsX3dyaXRlMzIocHJpdiwgQ1NSX1JFU0VULCBDU1JfUkVTRVRfUkVHX0ZMQUdfRk9SQ0VfTk1JKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLSNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotc3RhdGljIGlubGluZSBpbnQgX19pd2xfZ3JhYl9uaWNfYWNjZXNzKGNvbnN0IGNoYXIgKmYsIHUzMiBsLAotCQkJCQkgICAgICAgc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCUlXTF9ERUJVR19JTyhwcml2LCAiZ3JhYmJpbmcgbmljIGFjY2VzcyAtICVzICVkXG4iLCBmLCBsKTsKLQlyZXR1cm4gX2l3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7Ci19Ci0jZGVmaW5lIGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdikgXAotCV9faXdsX2dyYWJfbmljX2FjY2VzcyhfX0ZJTEVfXywgX19MSU5FX18sIHByaXYpCi0jZWxzZQotI2RlZmluZSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpIFwKLQlfaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfaXdsX3JlbGVhc2VfbmljX2FjY2VzcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCi17Ci0JX2l3bF9jbGVhcl9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAotCQkJQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKLX0KLSNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotc3RhdGljIGlubGluZSB2b2lkIF9faXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhjb25zdCBjaGFyICpmLCB1MzIgbCwKLQkJCQkJICAgIHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQotCUlXTF9ERUJVR19JTyhwcml2LCAicmVsZWFzaW5nIG5pYyBhY2Nlc3MgLSAlcyAlZFxuIiwgZiwgbCk7Ci0JX2l3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci19Ci0jZGVmaW5lIGl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdikgXAotCV9faXdsX3JlbGVhc2VfbmljX2FjY2VzcyhfX0ZJTEVfXywgX19MSU5FX18sIHByaXYpCi0jZWxzZQotI2RlZmluZSBpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpIFwKLQlfaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdTMyIF9pd2xfcmVhZF9kaXJlY3QzMihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcpCi17Ci0JcmV0dXJuIF9pd2xfcmVhZDMyKHByaXYsIHJlZyk7Ci19Ci0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLXN0YXRpYyBpbmxpbmUgdTMyIF9faXdsX3JlYWRfZGlyZWN0MzIoY29uc3QgY2hhciAqZiwgdTMyIGwsCi0JCQkJCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZykKLXsKLQl1MzIgdmFsdWUgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgcmVnKTsKLQlJV0xfREVCVUdfSU8ocHJpdiwgInJlYWRfZGlyZWN0MzIoMHglNFgpID0gMHglMDh4IC0gJXMgJWRcbiIsIHJlZywgdmFsdWUsCi0JCSAgICAgZiwgbCk7Ci0JcmV0dXJuIHZhbHVlOwotfQotc3RhdGljIGlubGluZSB1MzIgaXdsX3JlYWRfZGlyZWN0MzIoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgcmVnKQotewotCXUzMiB2YWx1ZTsKLQl1bnNpZ25lZCBsb25nIHJlZ19mbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yZWdfbG9jaywgcmVnX2ZsYWdzKTsKLQlpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwotCXZhbHVlID0gX19pd2xfcmVhZF9kaXJlY3QzMihfX0ZJTEVfXywgX19MSU5FX18sIHByaXYsIHJlZyk7Ci0JaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yZWdfbG9jaywgcmVnX2ZsYWdzKTsKLQlyZXR1cm4gdmFsdWU7Ci19Ci0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHUzMiBpd2xfcmVhZF9kaXJlY3QzMihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcpCi17Ci0JdTMyIHZhbHVlOwotCXVuc2lnbmVkIGxvbmcgcmVnX2ZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOwotCWl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7Ci0JdmFsdWUgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgcmVnKTsKLQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOwotCXJldHVybiB2YWx1ZTsKLQotfQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfaXdsX3dyaXRlX2RpcmVjdDMyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkJIHUzMiByZWcsIHUzMiB2YWx1ZSkKLXsKLQlfaXdsX3dyaXRlMzIocHJpdiwgcmVnLCB2YWx1ZSk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgaXdsX3dyaXRlX2RpcmVjdDMyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbHVlKQotewotCXVuc2lnbmVkIGxvbmcgcmVnX2ZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOwotCWlmICghaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KSkgewotCQlfaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIHJlZywgdmFsdWUpOwotCQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yZWdfbG9jaywgcmVnX2ZsYWdzKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGl3bF93cml0ZV9yZWdfYnVmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkJICAgICAgIHUzMiByZWcsIHUzMiBsZW4sIHUzMiAqdmFsdWVzKQotewotCXUzMiBjb3VudCA9IHNpemVvZih1MzIpOwotCi0JaWYgKChwcml2ICE9IE5VTEwpICYmICh2YWx1ZXMgIT0gTlVMTCkpIHsKLQkJZm9yICg7IDAgPCBsZW47IGxlbiAtPSBjb3VudCwgcmVnICs9IGNvdW50LCB2YWx1ZXMrKykKLQkJCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCByZWcsICp2YWx1ZXMpOwotCX0KLX0KLQotc3RhdGljIGlubGluZSBpbnQgX2l3bF9wb2xsX2RpcmVjdF9iaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgYWRkciwKLQkJCQkgICAgICAgdTMyIG1hc2ssIGludCB0aW1lb3V0KQotewotCWludCB0ID0gMDsKLQotCWRvIHsKLQkJaWYgKChpd2xfcmVhZF9kaXJlY3QzMihwcml2LCBhZGRyKSAmIG1hc2spID09IG1hc2spCi0JCQlyZXR1cm4gdDsKLQkJdWRlbGF5KElXTF9QT0xMX0lOVEVSVkFMKTsKLQkJdCArPSBJV0xfUE9MTF9JTlRFUlZBTDsKLQl9IHdoaWxlICh0IDwgdGltZW91dCk7Ci0KLQlyZXR1cm4gLUVUSU1FRE9VVDsKLX0KLQotI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCi1zdGF0aWMgaW5saW5lIGludCBfX2l3bF9wb2xsX2RpcmVjdF9iaXQoY29uc3QgY2hhciAqZiwgdTMyIGwsCi0JCQkJCSAgICBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJCSAgICB1MzIgYWRkciwgdTMyIG1hc2ssIGludCB0aW1lb3V0KQotewotCWludCByZXQgID0gX2l3bF9wb2xsX2RpcmVjdF9iaXQocHJpdiwgYWRkciwgbWFzaywgdGltZW91dCk7Ci0KLQlpZiAodW5saWtlbHkocmV0ID09IC1FVElNRURPVVQpKQotCQlJV0xfREVCVUdfSU8ocHJpdiwgInBvbGxfZGlyZWN0X2JpdCgweCUwOFgsIDB4JTA4WCkgLSAiCi0JCQkgICAgICJ0aW1lZG91dCAtICVzICVkXG4iLCBhZGRyLCBtYXNrLCBmLCBsKTsKLQllbHNlCi0JCUlXTF9ERUJVR19JTyhwcml2LCAicG9sbF9kaXJlY3RfYml0KDB4JTA4WCwgMHglMDhYKSA9IDB4JTA4WCAiCi0JCQkgICAgICItICVzICVkXG4iLCBhZGRyLCBtYXNrLCByZXQsIGYsIGwpOwotCXJldHVybiByZXQ7Ci19Ci0jZGVmaW5lIGl3bF9wb2xsX2RpcmVjdF9iaXQocHJpdiwgYWRkciwgbWFzaywgdGltZW91dCkgXAotCV9faXdsX3BvbGxfZGlyZWN0X2JpdChfX0ZJTEVfXywgX19MSU5FX18sIHByaXYsIGFkZHIsIG1hc2ssIHRpbWVvdXQpCi0jZWxzZQotI2RlZmluZSBpd2xfcG9sbF9kaXJlY3RfYml0IF9pd2xfcG9sbF9kaXJlY3RfYml0Ci0jZW5kaWYKLQotc3RhdGljIGlubGluZSB1MzIgX2l3bF9yZWFkX3BycGgoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgcmVnKQotewotCV9pd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX1BSUEhfUkFERFIsIHJlZyB8ICgzIDw8IDI0KSk7Ci0Jcm1iKCk7Ci0JcmV0dXJuIF9pd2xfcmVhZF9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfUFJQSF9SREFUKTsKLX0KLXN0YXRpYyBpbmxpbmUgdTMyIGl3bF9yZWFkX3BycGgoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgcmVnKQotewotCXVuc2lnbmVkIGxvbmcgcmVnX2ZsYWdzOwotCXUzMiB2YWw7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cmVnX2xvY2ssIHJlZ19mbGFncyk7Ci0JaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKLQl2YWwgPSBfaXdsX3JlYWRfcHJwaChwcml2LCByZWcpOwotCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cmVnX2xvY2ssIHJlZ19mbGFncyk7Ci0JcmV0dXJuIHZhbDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9pd2xfd3JpdGVfcHJwaChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJCSAgICAgdTMyIGFkZHIsIHUzMiB2YWwpCi17Ci0JX2l3bF93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfUFJQSF9XQUREUiwKLQkJCSAgICAgICgoYWRkciAmIDB4MDAwMEZGRkYpIHwgKDMgPDwgMjQpKSk7Ci0Jd21iKCk7Ci0JX2l3bF93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfUFJQSF9XREFULCB2YWwpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsX3dyaXRlX3BycGgoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgYWRkciwgdTMyIHZhbCkKLXsKLQl1bnNpZ25lZCBsb25nIHJlZ19mbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yZWdfbG9jaywgcmVnX2ZsYWdzKTsKLQlpZiAoIWl3bF9ncmFiX25pY19hY2Nlc3MocHJpdikpIHsKLQkJX2l3bF93cml0ZV9wcnBoKHByaXYsIGFkZHIsIHZhbCk7Ci0JCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOwotfQotCi0jZGVmaW5lIF9pd2xfc2V0X2JpdHNfcHJwaChwcml2LCByZWcsIG1hc2spIFwKLQlfaXdsX3dyaXRlX3BycGgocHJpdiwgcmVnLCAoX2l3bF9yZWFkX3BycGgocHJpdiwgcmVnKSB8IG1hc2spKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsX3NldF9iaXRzX3BycGgoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKLXsKLQl1bnNpZ25lZCBsb25nIHJlZ19mbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yZWdfbG9jaywgcmVnX2ZsYWdzKTsKLQlpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwotCV9pd2xfc2V0X2JpdHNfcHJwaChwcml2LCByZWcsIG1hc2spOwotCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cmVnX2xvY2ssIHJlZ19mbGFncyk7Ci19Ci0KLSNkZWZpbmUgX2l3bF9zZXRfYml0c19tYXNrX3BycGgocHJpdiwgcmVnLCBiaXRzLCBtYXNrKSBcCi0JX2l3bF93cml0ZV9wcnBoKHByaXYsIHJlZywgKChfaXdsX3JlYWRfcHJwaChwcml2LCByZWcpICYgbWFzaykgfCBiaXRzKSkKLQotc3RhdGljIGlubGluZSB2b2lkIGl3bF9zZXRfYml0c19tYXNrX3BycGgoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgcmVnLAotCQkJCXUzMiBiaXRzLCB1MzIgbWFzaykKLXsKLQl1bnNpZ25lZCBsb25nIHJlZ19mbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yZWdfbG9jaywgcmVnX2ZsYWdzKTsKLQlpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwotCV9pd2xfc2V0X2JpdHNfbWFza19wcnBoKHByaXYsIHJlZywgYml0cywgbWFzayk7Ci0JaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yZWdfbG9jaywgcmVnX2ZsYWdzKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGl3bF9jbGVhcl9iaXRzX3BycGgoc3RydWN0IGl3bF9wcml2Ci0JCQkJCQkgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQotewotCXVuc2lnbmVkIGxvbmcgcmVnX2ZsYWdzOwotCXUzMiB2YWw7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cmVnX2xvY2ssIHJlZ19mbGFncyk7Ci0JaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKLQl2YWwgPSBfaXdsX3JlYWRfcHJwaChwcml2LCByZWcpOwotCV9pd2xfd3JpdGVfcHJwaChwcml2LCByZWcsICh2YWwgJiB+bWFzaykpOwotCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cmVnX2xvY2ssIHJlZ19mbGFncyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIGl3bF9yZWFkX3RhcmdfbWVtKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIGFkZHIpCi17Ci0JdW5zaWduZWQgbG9uZyByZWdfZmxhZ3M7Ci0JdTMyIHZhbHVlOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOwotCWl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7Ci0KLQlfaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkFERFIsIGFkZHIpOwotCXJtYigpOwotCXZhbHVlID0gX2l3bF9yZWFkX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7Ci0KLQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOwotCXJldHVybiB2YWx1ZTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGl3bF93cml0ZV90YXJnX21lbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1MzIgdmFsKQotewotCXVuc2lnbmVkIGxvbmcgcmVnX2ZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOwotCWlmICghaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KSkgewotCQlfaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fV0FERFIsIGFkZHIpOwotCQl3bWIoKTsKLQkJX2l3bF93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1dEQVQsIHZhbCk7Ci0JCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsX3dyaXRlX3RhcmdfbWVtX2J1ZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBhZGRyLAotCQkJCQkgIHUzMiBsZW4sIHUzMiAqdmFsdWVzKQotewotCXVuc2lnbmVkIGxvbmcgcmVnX2ZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOwotCWlmICghaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KSkgewotCQlfaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fV0FERFIsIGFkZHIpOwotCQl3bWIoKTsKLQkJZm9yICg7IDAgPCBsZW47IGxlbiAtPSBzaXplb2YodTMyKSwgdmFsdWVzKyspCi0JCQlfaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fV0RBVCwgKnZhbHVlcyk7Ci0KLQkJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cmVnX2xvY2ssIHJlZ19mbGFncyk7Ci19Cit1MzIgaXdsX3JlYWRfdGFyZ19tZW0oc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgYWRkcik7Cit2b2lkIGl3bF93cml0ZV90YXJnX21lbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1MzIgdmFsKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1sZWQuYwppbmRleCBkN2YyYTBiLi40MzkxODdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1sZWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1sZWQuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC00OCw4ICs0OCwyMSBAQAogTU9EVUxFX1BBUk1fREVTQyhsZWRfbW9kZSwgIjA9c3lzdGVtIGRlZmF1bHQsICIKIAkJIjE9T24oUkYgT24pL09mZihSRiBPZmYpLCAyPWJsaW5raW5nIik7CiAKKy8qIFRocm91Z2hwdXQJCU9GRiB0aW1lKG1zKQlPTiB0aW1lIChtcykKKyAqCT4zMDAJCQkyNQkJMjUKKyAqCT4yMDAgdG8gMzAwCQk0MAkJNDAKKyAqCT4xMDAgdG8gMjAwCQk1NQkJNTUKKyAqCT43MCB0byAxMDAJCTY1CQk2NQorICoJPjUwIHRvIDcwCQk3NQkJNzUKKyAqCT4yMCB0byA1MAkJODUJCTg1CisgKgk+MTAgdG8gMjAJCTk1CQk5NQorICoJPjUgdG8gMTAJCTExMAkJMTEwCisgKgk+MSB0byA1CQkJMTMwCQkxMzAKKyAqCT4wIHRvIDEJCQkxNjcJCTE2NworICoJPD0wCQkJCQlTT0xJRCBPTgorICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90cHRfYmxpbmsgaXdsX2JsaW5rW10gPSB7Ci0JeyAudGhyb3VnaHB1dCA9IDAgKiAxMDI0IC0gMSwgLmJsaW5rX3RpbWUgPSAzMzQgfSwKKwl7IC50aHJvdWdocHV0ID0gMCwgLmJsaW5rX3RpbWUgPSAzMzQgfSwKIAl7IC50aHJvdWdocHV0ID0gMSAqIDEwMjQgLSAxLCAuYmxpbmtfdGltZSA9IDI2MCB9LAogCXsgLnRocm91Z2hwdXQgPSA1ICogMTAyNCAtIDEsIC5ibGlua190aW1lID0gMjIwIH0sCiAJeyAudGhyb3VnaHB1dCA9IDEwICogMTAyNCAtIDEsIC5ibGlua190aW1lID0gMTkwIH0sCkBAIC02MSwxMCArNzQsMTYgQEAKIAl7IC50aHJvdWdocHV0ID0gMzAwICogMTAyNCAtIDEsIC5ibGlua190aW1lID0gNTAgfSwKIH07CiAKKy8qIFNldCBsZWQgcmVnaXN0ZXIgb2ZmICovCit2b2lkIGl3bGFnbl9sZWRfZW5hYmxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfTEVEX1JFRywgQ1NSX0xFRF9SRUdfVFJVTl9PTik7Cit9CisKIC8qCiAgKiBBZGp1c3QgbGVkIGJsaW5rIHJhdGUgdG8gY29tcGVuc2F0ZSBvbiBhIE1BQyBDbG9jayBkaWZmZXJlbmNlIG9uIGV2ZXJ5IEhXCi0gKiBMZWQgYmxpbmsgcmF0ZSBhbmFseXNpcyBzaG93ZWQgYW4gYXZlcmFnZSBkZXZpYXRpb24gb2YgMCUgb24gMzk0NSwKLSAqIDUlIG9uIDQ5NjUgSFcgYW5kIDIwJSBvbiA1MDAwIHNlcmllcyBhbmQgdXAuCisgKiBMZWQgYmxpbmsgcmF0ZSBhbmFseXNpcyBzaG93ZWQgYW4gYXZlcmFnZSBkZXZpYXRpb24gb2YgMjAlIG9uIDUwMDAgc2VyaWVzCisgKiBhbmQgdXAuCiAgKiBOZWVkIHRvIGNvbXBlbnNhdGUgb24gdGhlIGxlZCBvbi9vZmYgdGltZSBwZXIgSFcgYWNjb3JkaW5nIHRvIHRoZSBkZXZpYXRpb24KICAqIHRvIGFjaGlldmUgdGhlIGRlc2lyZWQgbGVkIGZyZXF1ZW5jeQogICogVGhlIGNhbGN1bGF0aW9uIGlzOiAoMTAwLWF2ZXJhZ2VEZXZpYXRpb24pLzEwMCAqIGJsaW5rVGltZQpAQCAtODQsNiArMTAzLDI0IEBACiAJcmV0dXJuICh1OCkoKHRpbWUgKiBjb21wZW5zYXRpb24pID4+IDYpOwogfQogCitzdGF0aWMgaW50IGl3bF9zZW5kX2xlZF9jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX2xlZF9jbWQgKmxlZF9jbWQpCit7CisJc3RydWN0IGl3bF9ob3N0X2NtZCBjbWQgPSB7CisJCS5pZCA9IFJFUExZX0xFRFNfQ01ELAorCQkubGVuID0gc2l6ZW9mKHN0cnVjdCBpd2xfbGVkX2NtZCksCisJCS5kYXRhID0gbGVkX2NtZCwKKwkJLmZsYWdzID0gQ01EX0FTWU5DLAorCQkuY2FsbGJhY2sgPSBOVUxMLAorCX07CisJdTMyIHJlZzsKKworCXJlZyA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0xFRF9SRUcpOworCWlmIChyZWcgIT0gKHJlZyAmIENTUl9MRURfQlNNX0NUUkxfTVNLKSkKKwkJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0xFRF9SRUcsIHJlZyAmIENTUl9MRURfQlNNX0NUUkxfTVNLKTsKKworCXJldHVybiBpd2xfc2VuZF9jbWQocHJpdiwgJmNtZCk7Cit9CisKIC8qIFNldCBsZWQgcGF0dGVybiBjb21tYW5kICovCiBzdGF0aWMgaW50IGl3bF9sZWRfY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJICAgICAgIHVuc2lnbmVkIGxvbmcgb24sCkBAIC0xMDEsNiArMTM4LDExIEBACiAJaWYgKHByaXYtPmJsaW5rX29uID09IG9uICYmIHByaXYtPmJsaW5rX29mZiA9PSBvZmYpCiAJCXJldHVybiAwOwogCisJaWYgKG9mZiA9PSAwKSB7CisJCS8qIGxlZCBpcyBTT0xJRF9PTiAqLworCQlvbiA9IElXTF9MRURfU09MSUQ7CisJfQorCiAJSVdMX0RFQlVHX0xFRChwcml2LCAiTGVkIGJsaW5rIHRpbWUgY29tcGVuc2F0aW9uPSV1XG4iLAogCQkJcHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+bGVkX2NvbXBlbnNhdGlvbik7CiAJbGVkX2NtZC5vbiA9IGl3bF9ibGlua19jb21wZW5zYXRpb24ocHJpdiwgb24sCkBAIC0xMDgsNyArMTUwLDcgQEAKIAlsZWRfY21kLm9mZiA9IGl3bF9ibGlua19jb21wZW5zYXRpb24ocHJpdiwgb2ZmLAogCQkJCXByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPmxlZF9jb21wZW5zYXRpb24pOwogCi0JcmV0ID0gcHJpdi0+Y2ZnLT5vcHMtPmxlZC0+Y21kKHByaXYsICZsZWRfY21kKTsKKwlyZXQgPSBpd2xfc2VuZF9sZWRfY21kKHByaXYsICZsZWRfY21kKTsKIAlpZiAoIXJldCkgewogCQlwcml2LT5ibGlua19vbiA9IG9uOwogCQlwcml2LT5ibGlua19vZmYgPSBvZmY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1sZWQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5oCmluZGV4IDEwMWVlZjEuLjFjOTNkZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTUwLDYgKzUwLDcgQEAKIAlJV0xfTEVEX0JMSU5LLAogfTsKIAordm9pZCBpd2xhZ25fbGVkX2VuYWJsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogdm9pZCBpd2xfbGVkc19pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB2b2lkIGl3bF9sZWRzX2V4aXQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmMKaW5kZXggNTc2Nzk1ZS4uNTk1YzkzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCkBAIC0xODgsOSArMTg4LDEwIEBACiAJCQl0YWJsZSA9IHJhbmdlXzA7CiAJfQogCi0JQlVHX09OKGx2bCA8IDAgfHwgbHZsID49IElXTF9QT1dFUl9OVU0pOwotCi0JKmNtZCA9IHRhYmxlW2x2bF0uY21kOworCWlmIChXQVJOX09OKGx2bCA8IDAgfHwgbHZsID49IElXTF9QT1dFUl9OVU0pKQorCQltZW1zZXQoY21kLCAwLCBzaXplb2YoKmNtZCkpOworCWVsc2UKKwkJKmNtZCA9IHRhYmxlW2x2bF0uY21kOwogCiAJaWYgKHBlcmlvZCA9PSAwKSB7CiAJCXNraXAgPSAwOwpAQCAtMzU0LDE2ICszNTUsMTIgQEAKIAogCWR0aW1wZXIgPSBwcml2LT5ody0+Y29uZi5wc19kdGltX3BlcmlvZCA/OiAxOwogCi0JaWYgKHByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPmJyb2tlbl9wb3dlcnNhdmUpCi0JCWl3bF9wb3dlcl9zbGVlcF9jYW1fY21kKHByaXYsIGNtZCk7Ci0JZWxzZSBpZiAocHJpdi0+aHctPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9JRExFKQorCWlmIChwcml2LT5ody0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX0lETEUpCiAJCWl3bF9zdGF0aWNfc2xlZXBfY21kKHByaXYsIGNtZCwgSVdMX1BPV0VSX0lOREVYXzUsIDIwKTsKLQllbHNlIGlmIChwcml2LT5jZmctPm9wcy0+bGliLT50dF9vcHMubG93ZXJfcG93ZXJfZGV0ZWN0aW9uICYmCi0JCSBwcml2LT5jZmctPm9wcy0+bGliLT50dF9vcHMudHRfcG93ZXJfbW9kZSAmJgotCQkgcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHRfb3BzLmxvd2VyX3Bvd2VyX2RldGVjdGlvbihwcml2KSkgeworCWVsc2UgaWYgKGl3bF90dF9pc19sb3dfcG93ZXJfc3RhdGUocHJpdikpIHsKIAkJLyogaW4gdGhlcm1hbCB0aHJvdHRsaW5nIGxvdyBwb3dlciBzdGF0ZSAqLwogCQlpd2xfc3RhdGljX3NsZWVwX2NtZChwcml2LCBjbWQsCi0JCSAgICBwcml2LT5jZmctPm9wcy0+bGliLT50dF9vcHMudHRfcG93ZXJfbW9kZShwcml2KSwgZHRpbXBlcik7CisJCSAgICBpd2xfdHRfY3VycmVudF9wb3dlcl9tb2RlKHByaXYpLCBkdGltcGVyKTsKIAl9IGVsc2UgaWYgKCFlbmFibGVkKQogCQlpd2xfcG93ZXJfc2xlZXBfY2FtX2NtZChwcml2LCBjbWQpOwogCWVsc2UgaWYgKHByaXYtPnBvd2VyX2RhdGEuZGVidWdfc2xlZXBfbGV2ZWxfb3ZlcnJpZGUgPj0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5oCmluZGV4IGZlMDEyMDMuLjU5NjM1ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdCwgYXMgd2VsbAogICogYXMgcG9ydGlvbnMgb2YgdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcHJwaC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcHJwaC5oCmluZGV4IDg2ZjUxMjMuLmYwMGQxODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBycGguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wcnBoLmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC05MSw3ICs5MSw2IEBACiAjZGVmaW5lIEFQTUdfUFNfQ1RSTF9WQUxfUkVTRVRfUkVRCQkoMHgwNDAwMDAwMCkKICNkZWZpbmUgQVBNR19QU19DVFJMX01TS19QV1JfU1JDCQkoMHgwMzAwMDAwMCkKICNkZWZpbmUgQVBNR19QU19DVFJMX1ZBTF9QV1JfU1JDX1ZNQUlOCQkoMHgwMDAwMDAwMCkKLSNkZWZpbmUgQVBNR19QU19DVFJMX1ZBTF9QV1JfU1JDX01BWAkJKDB4MDEwMDAwMDApIC8qIDM5NDUgb25seSAqLwogI2RlZmluZSBBUE1HX1BTX0NUUkxfVkFMX1BXUl9TUkNfVkFVWAkJKDB4MDIwMDAwMDApCiAjZGVmaW5lIEFQTUdfU1ZSX1ZPTFRBR0VfQ09ORklHX0JJVF9NU0sJKDB4MDAwMDAxRTApIC8qIGJpdCA4OjUgKi8KICNkZWZpbmUgQVBNR19TVlJfRElHSVRBTF9WT0xUQUdFXzFfMzIJCSgweDAwMDAwMDYwKQpAQCAtOTksMTUyICs5OCw2IEBACiAjZGVmaW5lIEFQTUdfUENJREVWX1NUVF9WQUxfTDFfQUNUX0RJUwkJKDB4MDAwMDA4MDApCiAKIC8qKgotICogQlNNIChCb290c3RyYXAgU3RhdGUgTWFjaGluZSkKLSAqCi0gKiBUaGUgQm9vdHN0cmFwIFN0YXRlIE1hY2hpbmUgKEJTTSkgc3RvcmVzIGEgc2hvcnQgYm9vdHN0cmFwIHVDb2RlIHByb2dyYW0KLSAqIGluIHNwZWNpYWwgU1JBTSB0aGF0IGRvZXMgbm90IHBvd2VyIGRvd24gd2hlbiB0aGUgZW1iZWRkZWQgY29udHJvbAotICogcHJvY2Vzc29yIGlzIHNsZWVwaW5nIChlLmcuIGZvciBwZXJpb2RpYyBwb3dlci1zYXZpbmcgc2h1dGRvd25zIG9mIHJhZGlvKS4KLSAqCi0gKiBXaGVuIHBvd2VyaW5nIGJhY2sgdXAgYWZ0ZXIgc2xlZXBzIChvciBkdXJpbmcgaW5pdGlhbCB1Q29kZSBsb2FkKSwgdGhlIEJTTQotICogaW50ZXJuYWxseSBsb2FkcyB0aGUgc2hvcnQgYm9vdHN0cmFwIHByb2dyYW0gZnJvbSB0aGUgc3BlY2lhbCBTUkFNIGludG8gdGhlCi0gKiBlbWJlZGRlZCBwcm9jZXNzb3IncyBpbnN0cnVjdGlvbiBTUkFNLCBhbmQgc3RhcnRzIHRoZSBwcm9jZXNzb3Igc28gaXQgcnVucwotICogdGhlIGJvb3RzdHJhcCBwcm9ncmFtLgotICoKLSAqIFRoaXMgYm9vdHN0cmFwIHByb2dyYW0gbG9hZHMgKHZpYSBQQ0kgYnVzbWFzdGVyIERNQSkgaW5zdHJ1Y3Rpb25zIGFuZCBkYXRhCi0gKiBpbWFnZXMgZm9yIGEgdUNvZGUgcHJvZ3JhbSBmcm9tIGhvc3QgRFJBTSBsb2NhdGlvbnMuICBUaGUgaG9zdCBkcml2ZXIKLSAqIGluZGljYXRlcyBEUkFNIGxvY2F0aW9ucyBhbmQgc2l6ZXMgZm9yIGluc3RydWN0aW9uIGFuZCBkYXRhIGltYWdlcyB2aWEgdGhlCi0gKiBmb3VyIEJTTV9EUkFNXyogcmVnaXN0ZXJzLiAgT25jZSB0aGUgYm9vdHN0cmFwIHByb2dyYW0gbG9hZHMgdGhlIG5ldyBwcm9ncmFtLAotICogdGhlIG5ldyBwcm9ncmFtIHN0YXJ0cyBhdXRvbWF0aWNhbGx5LgotICoKLSAqIFRoZSB1Q29kZSB1c2VkIGZvciBvcGVuLXNvdXJjZSBkcml2ZXJzIGluY2x1ZGVzIHR3byBwcm9ncmFtczoKLSAqCi0gKiAxKSAgSW5pdGlhbGl6YXRpb24gLS0gcGVyZm9ybXMgaGFyZHdhcmUgY2FsaWJyYXRpb24gYW5kIHNldHMgdXAgc29tZQotICogICAgIGludGVybmFsIGRhdGEsIHRoZW4gbm90aWZpZXMgaG9zdCB2aWEgImluaXRpYWxpemUgYWxpdmUiIG5vdGlmaWNhdGlvbgotICogICAgIChzdHJ1Y3QgaXdsX2luaXRfYWxpdmVfcmVzcCkgdGhhdCBpdCBoYXMgY29tcGxldGVkIGFsbCBvZiBpdHMgd29yay4KLSAqICAgICBBZnRlciBzaWduYWwgZnJvbSBob3N0LCBpdCB0aGVuIGxvYWRzIGFuZCBzdGFydHMgdGhlIHJ1bnRpbWUgcHJvZ3JhbS4KLSAqICAgICBUaGUgaW5pdGlhbGl6YXRpb24gcHJvZ3JhbSBtdXN0IGJlIHVzZWQgd2hlbiBpbml0aWFsbHkgc2V0dGluZyB1cCB0aGUKLSAqICAgICBOSUMgYWZ0ZXIgbG9hZGluZyB0aGUgZHJpdmVyLgotICoKLSAqIDIpICBSdW50aW1lL1Byb3RvY29sIC0tIHBlcmZvcm1zIGFsbCBub3JtYWwgcnVudGltZSBvcGVyYXRpb25zLiAgVGhpcwotICogICAgIG5vdGlmaWVzIGhvc3QgdmlhICJhbGl2ZSIgbm90aWZpY2F0aW9uIChzdHJ1Y3QgaXdsX2FsaXZlX3Jlc3ApIHRoYXQgaXQKLSAqICAgICBpcyByZWFkeSB0byBiZSB1c2VkLgotICoKLSAqIFdoZW4gaW5pdGlhbGl6aW5nIHRoZSBOSUMsIHRoZSBob3N0IGRyaXZlciBkb2VzIHRoZSBmb2xsb3dpbmcgcHJvY2VkdXJlOgotICoKLSAqIDEpICBMb2FkIGJvb3RzdHJhcCBwcm9ncmFtIChpbnN0cnVjdGlvbnMgb25seSwgbm8gZGF0YSBpbWFnZSBmb3IgYm9vdHN0cmFwKQotICogICAgIGludG8gYm9vdHN0cmFwIG1lbW9yeS4gIFVzZSBkd29yZCB3cml0ZXMgc3RhcnRpbmcgYXQgQlNNX1NSQU1fTE9XRVJfQk9VTkQKLSAqCi0gKiAyKSAgUG9pbnQgKHZpYSBCU01fRFJBTV8qKSB0byB0aGUgImluaXRpYWxpemUiIHVDb2RlIGRhdGEgYW5kIGluc3RydWN0aW9uCi0gKiAgICAgaW1hZ2VzIGluIGhvc3QgRFJBTS4KLSAqCi0gKiAzKSAgU2V0IHVwIEJTTSB0byBjb3B5IGZyb20gQlNNIFNSQU0gaW50byB1Q29kZSBpbnN0cnVjdGlvbiBTUkFNIHdoZW4gYXNrZWQ6Ci0gKiAgICAgQlNNX1dSX01FTV9TUkNfUkVHID0gMAotICogICAgIEJTTV9XUl9NRU1fRFNUX1JFRyA9IFJUQ19JTlNUX0xPV0VSX0JPVU5ECi0gKiAgICAgQlNNX1dSX01FTV9EV0NPVU5UX1JFRyA9ICMgZHdvcmRzIGluIGJvb3RzdHJhcCBpbnN0cnVjdGlvbiBpbWFnZQotICoKLSAqIDQpICBMb2FkIGJvb3RzdHJhcCBpbnRvIGluc3RydWN0aW9uIFNSQU06Ci0gKiAgICAgQlNNX1dSX0NUUkxfUkVHID0gQlNNX1dSX0NUUkxfUkVHX0JJVF9TVEFSVAotICoKLSAqIDUpICBXYWl0IGZvciBsb2FkIGNvbXBsZXRpb246Ci0gKiAgICAgUG9sbCBCU01fV1JfQ1RSTF9SRUcgZm9yIEJTTV9XUl9DVFJMX1JFR19CSVRfU1RBUlQgPSAwCi0gKgotICogNikgIEVuYWJsZSBmdXR1cmUgYm9vdCBsb2FkcyB3aGVuZXZlciBOSUMncyBwb3dlciBtYW5hZ2VtZW50IHRyaWdnZXJzIGl0OgotICogICAgIEJTTV9XUl9DVFJMX1JFRyA9IEJTTV9XUl9DVFJMX1JFR19CSVRfU1RBUlRfRU4KLSAqCi0gKiA3KSAgU3RhcnQgdGhlIE5JQyBieSByZW1vdmluZyBhbGwgcmVzZXQgYml0czoKLSAqICAgICBDU1JfUkVTRVQgPSAwCi0gKgotICogICAgIFRoZSBib290c3RyYXAgdUNvZGUgKGFscmVhZHkgaW4gaW5zdHJ1Y3Rpb24gU1JBTSkgbG9hZHMgaW5pdGlhbGl6YXRpb24KLSAqICAgICB1Q29kZS4gIEluaXRpYWxpemF0aW9uIHVDb2RlIHBlcmZvcm1zIGRhdGEgaW5pdGlhbGl6YXRpb24sIHNlbmRzCi0gKiAgICAgImluaXRpYWxpemUgYWxpdmUiIG5vdGlmaWNhdGlvbiB0byBob3N0LCBhbmQgd2FpdHMgZm9yIGEgc2lnbmFsIGZyb20KLSAqICAgICBob3N0IHRvIGxvYWQgcnVudGltZSBjb2RlLgotICoKLSAqIDQpICBQb2ludCAodmlhIEJTTV9EUkFNXyopIHRvIHRoZSAicnVudGltZSIgdUNvZGUgZGF0YSBhbmQgaW5zdHJ1Y3Rpb24KLSAqICAgICBpbWFnZXMgaW4gaG9zdCBEUkFNLiAgVGhlIGxhc3QgcmVnaXN0ZXIgbG9hZGVkIG11c3QgYmUgdGhlIGluc3RydWN0aW9uCi0gKiAgICAgYnl0ZSBjb3VudCByZWdpc3RlciAoIjEiIGluIE1TYml0IHRlbGxzIGluaXRpYWxpemF0aW9uIHVDb2RlIHRvIGxvYWQKLSAqICAgICB0aGUgcnVudGltZSB1Q29kZSk6Ci0gKiAgICAgQlNNX0RSQU1fSU5TVF9CWVRFQ09VTlRfUkVHID0gYnl0ZSBjb3VudCB8IEJTTV9EUkFNX0lOU1RfTE9BRAotICoKLSAqIDUpICBXYWl0IGZvciAiYWxpdmUiIG5vdGlmaWNhdGlvbiwgdGhlbiBpc3N1ZSBub3JtYWwgcnVudGltZSBjb21tYW5kcy4KLSAqCi0gKiBEYXRhIGNhY2hpbmcgZHVyaW5nIHBvd2VyLWRvd25zOgotICoKLSAqIEp1c3QgYmVmb3JlIHRoZSBlbWJlZGRlZCBjb250cm9sbGVyIHBvd2VycyBkb3duIChlLmcgZm9yIGF1dG9tYXRpYwotICogcG93ZXItc2F2aW5nIG1vZGVzLCBvciBmb3IgUkZLSUxMKSwgdUNvZGUgc3RvcmVzICh2aWEgUENJIGJ1c21hc3RlciBETUEpCi0gKiBhIGN1cnJlbnQgc25hcHNob3Qgb2YgdGhlIGVtYmVkZGVkIHByb2Nlc3NvcidzIGRhdGEgU1JBTSBpbnRvIGhvc3QgRFJBTS4KLSAqIFRoaXMgY2FjaGVzIHRoZSBkYXRhIHdoaWxlIHRoZSBlbWJlZGRlZCBwcm9jZXNzb3IncyBtZW1vcnkgaXMgcG93ZXJlZCBkb3duLgotICogTG9jYXRpb24gYW5kIHNpemUgYXJlIGNvbnRyb2xsZWQgYnkgQlNNX0RSQU1fREFUQV8qIHJlZ2lzdGVycy4KLSAqCi0gKiBOT1RFOiAgSW5zdHJ1Y3Rpb24gU1JBTSBkb2VzIG5vdCBuZWVkIHRvIGJlIHNhdmVkLCBzaW5jZSB0aGF0IGRvZXNuJ3QKLSAqICAgICAgICBjaGFuZ2UgZHVyaW5nIG9wZXJhdGlvbjsgdGhlIG9yaWdpbmFsIGltYWdlIChmcm9tIHVDb2RlIGRpc3RyaWJ1dGlvbgotICogICAgICAgIGZpbGUpIGNhbiBiZSB1c2VkIGZvciByZWxvYWQuCi0gKgotICogV2hlbiBwb3dlcmluZyBiYWNrIHVwLCB0aGUgQlNNIGxvYWRzIHRoZSBib290c3RyYXAgcHJvZ3JhbS4gIEJvb3RzdHJhcCBsb29rcwotICogYXQgdGhlIEJTTV9EUkFNXyogcmVnaXN0ZXJzLCB3aGljaCBub3cgcG9pbnQgdG8gdGhlIHJ1bnRpbWUgaW5zdHJ1Y3Rpb24KLSAqIGltYWdlIGFuZCB0aGUgY2FjaGVkIChtb2RpZmllZCkgcnVudGltZSBkYXRhICgqbm90KiB0aGUgaW5pdGlhbGl6YXRpb24KLSAqIHVDb2RlKS4gIEJvb3RzdHJhcCByZWxvYWRzIHRoZXNlIHJ1bnRpbWUgaW1hZ2VzIGludG8gU1JBTSwgYW5kIHJlc3RhcnRzIHRoZQotICogdUNvZGUgZnJvbSB3aGVyZSBpdCBsZWZ0IG9mZiBiZWZvcmUgdGhlIHBvd2VyLWRvd24uCi0gKgotICogTk9URTogIEluaXRpYWxpemF0aW9uIHVDb2RlIGRvZXMgKm5vdCogcnVuIGFzIHBhcnQgb2YgdGhlIHNhdmUvcmVzdG9yZQotICogICAgICAgIHByb2NlZHVyZS4KLSAqCi0gKiBUaGlzIHNhdmUvcmVzdG9yZSBtZXRob2QgaXMgbW9zdGx5IGZvciBhdXRvbm9tb3VzIHBvd2VyIG1hbmFnZW1lbnQgZHVyaW5nCi0gKiBub3JtYWwgb3BlcmF0aW9uIChyZXN1bHQgb2YgUE9XRVJfVEFCTEVfQ01EKS4gIFBsYXRmb3JtIHN1c3BlbmQvcmVzdW1lIGFuZAotICogUkZLSUxMIHNob3VsZCB1c2UgY29tcGxldGUgcmVzdGFydHMgKHdpdGggdG90YWwgcmUtaW5pdGlhbGl6YXRpb24pIG9mIHVDb2RlLAotICogYWxsb3dpbmcgdG90YWwgc2h1dGRvd24gKGluY2x1ZGluZyBCU00gbWVtb3J5KS4KLSAqCi0gKiBOb3RlIHRoYXQsIGR1cmluZyBub3JtYWwgb3BlcmF0aW9uLCB0aGUgaG9zdCBEUkFNIHRoYXQgaGVsZCB0aGUgaW5pdGlhbAotICogc3RhcnR1cCBkYXRhIGZvciB0aGUgcnVudGltZSBjb2RlIGlzIG5vdyBiZWluZyB1c2VkIGFzIGEgYmFja3VwIGRhdGEgY2FjaGUKLSAqIGZvciBtb2RpZmllZCBkYXRhISAgSWYgeW91IG5lZWQgdG8gY29tcGxldGVseSByZS1pbml0aWFsaXplIHRoZSBOSUMsIG1ha2UKLSAqIHN1cmUgdGhhdCB5b3UgdXNlIHRoZSBydW50aW1lIGRhdGEgaW1hZ2UgZnJvbSB0aGUgdUNvZGUgZGlzdHJpYnV0aW9uIGZpbGUsCi0gKiBub3QgdGhlIG1vZGlmaWVkL3NhdmVkIHJ1bnRpbWUgZGF0YS4gIFlvdSBtYXkgd2FudCB0byBzdG9yZSBhIHNlcGFyYXRlCi0gKiAiY2xlYW4iIHJ1bnRpbWUgZGF0YSBpbWFnZSBpbiBEUkFNIHRvIGF2b2lkIGRpc2sgcmVhZHMgb2YgZGlzdHJpYnV0aW9uIGZpbGUuCi0gKi8KLQotLyogQlNNIGJpdCBmaWVsZHMgKi8KLSNkZWZpbmUgQlNNX1dSX0NUUkxfUkVHX0JJVF9TVEFSVCAgICAgKDB4ODAwMDAwMDApIC8qIHN0YXJ0IGJvb3QgbG9hZCBub3cgKi8KLSNkZWZpbmUgQlNNX1dSX0NUUkxfUkVHX0JJVF9TVEFSVF9FTiAgKDB4NDAwMDAwMDApIC8qIGVuYWJsZSBib290IGFmdGVyIHB3cnVwKi8KLSNkZWZpbmUgQlNNX0RSQU1fSU5TVF9MT0FEICAgICAgICAgICAgKDB4ODAwMDAwMDApIC8qIHN0YXJ0IHByb2dyYW0gbG9hZCBub3cgKi8KLQotLyogQlNNIGFkZHJlc3NlcyAqLwotI2RlZmluZSBCU01fQkFTRSAgICAgICAgICAgICAgICAgICAgIChQUlBIX0JBU0UgKyAweDM0MDApCi0jZGVmaW5lIEJTTV9FTkQgICAgICAgICAgICAgICAgICAgICAgKFBSUEhfQkFTRSArIDB4MzgwMCkKLQotI2RlZmluZSBCU01fV1JfQ1RSTF9SRUcgICAgICAgICAgICAgIChCU01fQkFTRSArIDB4MDAwKSAvKiBjdGwgYW5kIHN0YXR1cyAqLwotI2RlZmluZSBCU01fV1JfTUVNX1NSQ19SRUcgICAgICAgICAgIChCU01fQkFTRSArIDB4MDA0KSAvKiBzb3VyY2UgaW4gQlNNIG1lbSAqLwotI2RlZmluZSBCU01fV1JfTUVNX0RTVF9SRUcgICAgICAgICAgIChCU01fQkFTRSArIDB4MDA4KSAvKiBkZXN0IGluIFNSQU0gbWVtICovCi0jZGVmaW5lIEJTTV9XUl9EV0NPVU5UX1JFRyAgICAgICAgICAgKEJTTV9CQVNFICsgMHgwMEMpIC8qIGJ5dGVzICovCi0jZGVmaW5lIEJTTV9XUl9TVEFUVVNfUkVHICAgICAgICAgICAgKEJTTV9CQVNFICsgMHgwMTApIC8qIGJpdCAwOiAgMSA9PSBkb25lICovCi0KLS8qCi0gKiBQb2ludGVycyBhbmQgc2l6ZSByZWdzIGZvciBib290c3RyYXAgbG9hZCBhbmQgZGF0YSBTUkFNIHNhdmUvcmVzdG9yZS4KLSAqIE5PVEU6ICAzOTQ1IHBvaW50ZXJzIHVzZSBiaXRzIDMxOjAgb2YgRFJBTSBhZGRyZXNzLgotICogICAgICAgIDQ5NjUgcG9pbnRlcnMgdXNlIGJpdHMgMzU6NCBvZiBEUkFNIGFkZHJlc3MuCi0gKi8KLSNkZWZpbmUgQlNNX0RSQU1fSU5TVF9QVFJfUkVHICAgICAgICAoQlNNX0JBU0UgKyAweDA5MCkKLSNkZWZpbmUgQlNNX0RSQU1fSU5TVF9CWVRFQ09VTlRfUkVHICAoQlNNX0JBU0UgKyAweDA5NCkKLSNkZWZpbmUgQlNNX0RSQU1fREFUQV9QVFJfUkVHICAgICAgICAoQlNNX0JBU0UgKyAweDA5OCkKLSNkZWZpbmUgQlNNX0RSQU1fREFUQV9CWVRFQ09VTlRfUkVHICAoQlNNX0JBU0UgKyAweDA5QykKLQotLyoKLSAqIEJTTSBzcGVjaWFsIG1lbW9yeSwgc3RheXMgcG93ZXJlZCBvbiBkdXJpbmcgcG93ZXItc2F2ZSBzbGVlcHMuCi0gKiBSZWFkL3dyaXRlLCBhZGRyZXNzIHJhbmdlIGZyb20gTE9XRVJfQk9VTkQgdG8gKExPV0VSX0JPVU5EICsgU0laRSAtMSkKLSAqLwotI2RlZmluZSBCU01fU1JBTV9MT1dFUl9CT1VORCAgICAgICAgIChQUlBIX0JBU0UgKyAweDM4MDApCi0jZGVmaW5lIEJTTV9TUkFNX1NJWkUJCQkoMTAyNCkgLyogYnl0ZXMgKi8KLQotCi0vKiAzOTQ1IFR4IHNjaGVkdWxlciByZWdpc3RlcnMgKi8KLSNkZWZpbmUgQUxNX1NDRF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgKFBSUEhfQkFTRSArIDB4MkUwMCkKLSNkZWZpbmUgQUxNX1NDRF9NT0RFX1JFRyAgICAgICAgICAgICAgICAgICAgKEFMTV9TQ0RfQkFTRSArIDB4MDAwKQotI2RlZmluZSBBTE1fU0NEX0FSQVNUQVRfUkVHICAgICAgICAgICAgICAgICAoQUxNX1NDRF9CQVNFICsgMHgwMDQpCi0jZGVmaW5lIEFMTV9TQ0RfVFhGQUNUX1JFRyAgICAgICAgICAgICAgICAgIChBTE1fU0NEX0JBU0UgKyAweDAxMCkKLSNkZWZpbmUgQUxNX1NDRF9UWEY0TUZfUkVHICAgICAgICAgICAgICAgICAgKEFMTV9TQ0RfQkFTRSArIDB4MDE0KQotI2RlZmluZSBBTE1fU0NEX1RYRjVNRl9SRUcgICAgICAgICAgICAgICAgICAoQUxNX1NDRF9CQVNFICsgMHgwMjApCi0jZGVmaW5lIEFMTV9TQ0RfU0JZUF9NT0RFXzFfUkVHICAgICAgICAgICAgIChBTE1fU0NEX0JBU0UgKyAweDAyQykKLSNkZWZpbmUgQUxNX1NDRF9TQllQX01PREVfMl9SRUcgICAgICAgICAgICAgKEFMTV9TQ0RfQkFTRSArIDB4MDMwKQotCi0vKioKICAqIFR4IFNjaGVkdWxlcgogICoKICAqIFRoZSBUeCBTY2hlZHVsZXIgc2VsZWN0cyB0aGUgbmV4dCBmcmFtZSB0byBiZSB0cmFuc21pdHRlZCwgY2hvb3NpbmcgVEZEcwpAQCAtMjU0LDE3ICsxMDcsNyBAQAogICogZGV2aWNlLiAgQSBxdWV1ZSBtYXBzIHRvIG9ubHkgb25lIChzZWxlY3RhYmxlIGJ5IGRyaXZlcikgVHggRE1BIGNoYW5uZWwsCiAgKiBidXQgb25lIERNQSBjaGFubmVsIG1heSB0YWtlIGlucHV0IGZyb20gc2V2ZXJhbCBxdWV1ZXMuCiAgKgotICogVHggRE1BIEZJRk9zIGhhdmUgZGVkaWNhdGVkIHB1cnBvc2VzLiAgRm9yIDQ5NjUsIHRoZXkgYXJlIHVzZWQgYXMgZm9sbG93cwotICogKGNmLiBkZWZhdWx0X3F1ZXVlX3RvX3R4X2ZpZm8gaW4gaXdsLTQ5NjUuYyk6Ci0gKgotICogMCAtLSBFRENBIEJLIChiYWNrZ3JvdW5kKSBmcmFtZXMsIGxvd2VzdCBwcmlvcml0eQotICogMSAtLSBFRENBIEJFIChiZXN0IGVmZm9ydCkgZnJhbWVzLCBub3JtYWwgcHJpb3JpdHkKLSAqIDIgLS0gRURDQSBWSSAodmlkZW8pIGZyYW1lcywgaGlnaGVyIHByaW9yaXR5Ci0gKiAzIC0tIEVEQ0EgVk8gKHZvaWNlKSBhbmQgbWFuYWdlbWVudCBmcmFtZXMsIGhpZ2hlc3QgcHJpb3JpdHkKLSAqIDQgLS0gQ29tbWFuZHMgKGUuZy4gUlhPTiwgZXRjLikKLSAqIDUgLS0gdW51c2VkIChIQ0NBKQotICogNiAtLSB1bnVzZWQgKEhDQ0EpCi0gKiA3IC0tIG5vdCB1c2VkIGJ5IGRyaXZlciAoZGV2aWNlLWludGVybmFsIG9ubHkpCisgKiBUeCBETUEgRklGT3MgaGF2ZSBkZWRpY2F0ZWQgcHVycG9zZXMuCiAgKgogICogRm9yIDUwMDAgc2VyaWVzIGFuZCB1cCwgdGhleSBhcmUgdXNlZCBkaWZmZXJlbnRseQogICogKGNmLiBpd2w1MDAwX2RlZmF1bHRfcXVldWVfdG9fdHhfZmlmbyBpbiBpd2wtNTAwMC5jKToKQEAgLTI5OCw3ICsxNDEsNyBAQAogICogICAgIFR4IGNvbXBsZXRpb24gbWF5IGVuZCB1cCBiZWluZyBvdXQtb2Ytb3JkZXIpLgogICoKICAqICAgICBUaGUgZHJpdmVyIG11c3QgbWFpbnRhaW4gdGhlIHF1ZXVlJ3MgQnl0ZSBDb3VudCB0YWJsZSBpbiBob3N0IERSQU0KLSAqICAgICAoc3RydWN0IGl3bDQ5NjVfc2NoZWRfcXVldWVfYnl0ZV9jbnRfdGJsKSBmb3IgdGhpcyBtb2RlLgorICogICAgIGZvciB0aGlzIG1vZGUuCiAgKiAgICAgVGhpcyBtb2RlIGRvZXMgbm90IHN1cHBvcnQgZnJhZ21lbnRhdGlvbi4KICAqCiAgKiAyKSAgRklGTyAoYS5rLmEuIG5vbi1TY2hlZHVsZXItQUNLKSwgaW4gd2hpY2ggZWFjaCBURkQgaXMgcHJvY2Vzc2VkIGluIG9yZGVyLgpAQCAtMzExLDcgKzE1NCw3IEBACiAgKgogICogRHJpdmVyIGNvbnRyb2xzIHNjaGVkdWxlciBvcGVyYXRpb24gdmlhIDMgbWVhbnM6CiAgKiAxKSAgU2NoZWR1bGVyIHJlZ2lzdGVycwotICogMikgIFNoYXJlZCBzY2hlZHVsZXIgZGF0YSBiYXNlIGluIGludGVybmFsIDQ5NTYgU1JBTQorICogMikgIFNoYXJlZCBzY2hlZHVsZXIgZGF0YSBiYXNlIGluIGludGVybmFsIFNSQU0KICAqIDMpICBTaGFyZWQgZGF0YSBpbiBob3N0IERSQU0KICAqCiAgKiBJbml0aWFsaXphdGlvbjoKQEAgLTMzMCwyMDEgKzE3MywxMCBAQAogICogTWF4IFR4IHdpbmRvdyBzaXplIGlzIHRoZSBtYXggbnVtYmVyIG9mIGNvbnRpZ3VvdXMgVEZEcyB0aGF0IHRoZSBzY2hlZHVsZXIKICAqIGNhbiBrZWVwIHRyYWNrIG9mIGF0IG9uZSB0aW1lIHdoZW4gY3JlYXRpbmcgYmxvY2stYWNrIGNoYWlucyBvZiBmcmFtZXMuCiAgKiBOb3RlIHRoYXQgIjY0IiBtYXRjaGVzIHRoZSBudW1iZXIgb2YgYWNrIGJpdHMgaW4gYSBibG9jay1hY2sgcGFja2V0LgotICogRHJpdmVyIHNob3VsZCB1c2UgU0NEX1dJTl9TSVpFIGFuZCBTQ0RfRlJBTUVfTElNSVQgdmFsdWVzIHRvIGluaXRpYWxpemUKLSAqIElXTDQ5X1NDRF9DT05URVhUX1FVRVVFX09GRlNFVCh4KSB2YWx1ZXMuCiAgKi8KICNkZWZpbmUgU0NEX1dJTl9TSVpFCQkJCTY0CiAjZGVmaW5lIFNDRF9GUkFNRV9MSU1JVAkJCQk2NAogCi0vKiBTQ0QgcmVnaXN0ZXJzIGFyZSBpbnRlcm5hbCwgbXVzdCBiZSBhY2Nlc3NlZCB2aWEgSEJVU19UQVJHX1BSUEggcmVncyAqLwotI2RlZmluZSBJV0w0OV9TQ0RfU1RBUlRfT0ZGU0VUCQkweGEwMmMwMAotCi0vKgotICogNDk2NSB0ZWxscyBkcml2ZXIgU1JBTSBhZGRyZXNzIGZvciBpbnRlcm5hbCBzY2hlZHVsZXIgc3RydWN0cyB2aWEgdGhpcyByZWcuCi0gKiBWYWx1ZSBpcyB2YWxpZCBvbmx5IGFmdGVyICJBbGl2ZSIgcmVzcG9uc2UgZnJvbSB1Q29kZS4KLSAqLwotI2RlZmluZSBJV0w0OV9TQ0RfU1JBTV9CQVNFX0FERFIgICAgICAgICAgIChJV0w0OV9TQ0RfU1RBUlRfT0ZGU0VUICsgMHgwKQotCi0vKgotICogRHJpdmVyIG1heSBuZWVkIHRvIHVwZGF0ZSBxdWV1ZS1lbXB0eSBiaXRzIGFmdGVyIGNoYW5naW5nIHF1ZXVlJ3MKLSAqIHdyaXRlIGFuZCByZWFkIHBvaW50ZXJzIChpbmRleGVzKSBkdXJpbmcgKHJlLSlpbml0aWFsaXphdGlvbiAoaS5lLiB3aGVuCi0gKiBzY2hlZHVsZXIgaXMgbm90IHRyYWNraW5nIHdoYXQncyBoYXBwZW5pbmcpLgotICogQml0IGZpZWxkczoKLSAqIDMxLTE2OiAgV3JpdGUgbWFzayAtLSAxOiB1cGRhdGUgZW1wdHkgYml0LCAwOiBkb24ndCBjaGFuZ2UgZW1wdHkgYml0Ci0gKiAxNS0wMDogIEVtcHR5IHN0YXRlLCBvbmUgZm9yIGVhY2ggcXVldWUgLS0gMTogZW1wdHksIDA6IG5vbi1lbXB0eQotICogTk9URTogIFRoaXMgcmVnaXN0ZXIgaXMgbm90IHVzZWQgYnkgTGludXggZHJpdmVyLgotICovCi0jZGVmaW5lIElXTDQ5X1NDRF9FTVBUWV9CSVRTICAgICAgICAgICAgICAgKElXTDQ5X1NDRF9TVEFSVF9PRkZTRVQgKyAweDQpCi0KLS8qCi0gKiBQaHlzaWNhbCBiYXNlIGFkZHJlc3Mgb2YgYXJyYXkgb2YgYnl0ZSBjb3VudCAoQkMpIGNpcmN1bGFyIGJ1ZmZlcnMgKENCcykuCi0gKiBFYWNoIFR4IHF1ZXVlIGhhcyBhIEJDIENCIGluIGhvc3QgRFJBTSB0byBzdXBwb3J0IFNjaGVkdWxlci1BQ0sgbW9kZS4KLSAqIFRoaXMgcmVnaXN0ZXIgcG9pbnRzIHRvIEJDIENCIGZvciBxdWV1ZSAwLCBtdXN0IGJlIG9uIDEwMjQtYnl0ZSBib3VuZGFyeS4KLSAqIE90aGVycyBhcmUgc3BhY2VkIGJ5IDEwMjQgYnl0ZXMuCi0gKiBFYWNoIEJDIENCIGlzIDIgYnl0ZXMgKiAoMjU2ICsgNjQpID0gNzQwIGJ5dGVzLCBmb2xsb3dlZCBieSAzODQgYnl0ZXMgcGFkLgotICogKEluZGV4IGludG8gYSBxdWV1ZSdzIEJDIENCKSA9IChpbmRleCBpbnRvIHF1ZXVlJ3MgVEZEIENCKSA9IChTU04gJiAweGZmKS4KLSAqIEJpdCBmaWVsZHM6Ci0gKiAyNS0wMDogIEJ5dGUgQ291bnQgQ0IgcGh5c2ljYWwgYWRkcmVzcyBbMzU6MTBdLCBtdXN0IGJlIDEwMjQtYnl0ZSBhbGlnbmVkLgotICovCi0jZGVmaW5lIElXTDQ5X1NDRF9EUkFNX0JBU0VfQUREUiAgICAgICAgICAgKElXTDQ5X1NDRF9TVEFSVF9PRkZTRVQgKyAweDEwKQotCi0vKgotICogRW5hYmxlcyBhbnkvYWxsIFR4IERNQS9GSUZPIGNoYW5uZWxzLgotICogU2NoZWR1bGVyIGdlbmVyYXRlcyByZXF1ZXN0cyBmb3Igb25seSB0aGUgYWN0aXZlIGNoYW5uZWxzLgotICogU2V0IHRoaXMgdG8gMHhmZiB0byBlbmFibGUgYWxsIDggY2hhbm5lbHMgKG5vcm1hbCB1c2FnZSkuCi0gKiBCaXQgZmllbGRzOgotICogIDctIDA6ICBFbmFibGUgKDEpLCBkaXNhYmxlICgwKSwgb25lIGJpdCBmb3IgZWFjaCBjaGFubmVsIDAtNwotICovCi0jZGVmaW5lIElXTDQ5X1NDRF9UWEZBQ1QgICAgICAgICAgICAgICAgICAgKElXTDQ5X1NDRF9TVEFSVF9PRkZTRVQgKyAweDFjKQotLyoKLSAqIFF1ZXVlICh4KSBXcml0ZSBQb2ludGVycyAoaW5kZXhlcywgcmVhbGx5ISksIG9uZSBmb3IgZWFjaCBUeCBxdWV1ZS4KLSAqIEluaXRpYWxpemVkIGFuZCB1cGRhdGVkIGJ5IGRyaXZlciBhcyBuZXcgVEZEcyBhcmUgYWRkZWQgdG8gcXVldWUuCi0gKiBOT1RFOiAgSWYgdXNpbmcgQmxvY2sgQWNrLCBpbmRleCBtdXN0IGNvcnJlc3BvbmQgdG8gZnJhbWUncwotICogICAgICAgIFN0YXJ0IFNlcXVlbmNlIE51bWJlcjsgaW5kZXggPSAoU1NOICYgMHhmZikKLSAqIE5PVEU6ICBBbHRlcm5hdGl2ZSB0byBIQlVTX1RBUkdfV1JQVFIsIHdoaWNoIGlzIHdoYXQgTGludXggZHJpdmVyIHVzZXM/Ci0gKi8KLSNkZWZpbmUgSVdMNDlfU0NEX1FVRVVFX1dSUFRSKHgpICAoSVdMNDlfU0NEX1NUQVJUX09GRlNFVCArIDB4MjQgKyAoeCkgKiA0KQotCi0vKgotICogUXVldWUgKHgpIFJlYWQgUG9pbnRlcnMgKGluZGV4ZXMsIHJlYWxseSEpLCBvbmUgZm9yIGVhY2ggVHggcXVldWUuCi0gKiBGb3IgRklGTyBtb2RlLCBpbmRleCBpbmRpY2F0ZXMgbmV4dCBmcmFtZSB0byB0cmFuc21pdC4KLSAqIEZvciBTY2hlZHVsZXItQUNLIG1vZGUsIGluZGV4IGluZGljYXRlcyBmaXJzdCBmcmFtZSBpbiBUeCB3aW5kb3cuCi0gKiBJbml0aWFsaXplZCBieSBkcml2ZXIsIHVwZGF0ZWQgYnkgc2NoZWR1bGVyLgotICovCi0jZGVmaW5lIElXTDQ5X1NDRF9RVUVVRV9SRFBUUih4KSAgKElXTDQ5X1NDRF9TVEFSVF9PRkZTRVQgKyAweDY0ICsgKHgpICogNCkKLQotLyoKLSAqIFNlbGVjdCB3aGljaCBxdWV1ZXMgd29yayBpbiBjaGFpbiBtb2RlICgxKSB2cy4gbm90ICgwKS4KLSAqIFVzZSBjaGFpbiBtb2RlIHRvIGJ1aWxkIGNoYWlucyBvZiBhZ2dyZWdhdGVkIGZyYW1lcy4KLSAqIEJpdCBmaWVsZHM6Ci0gKiAzMS0xNjogIFJlc2VydmVkCi0gKiAxNS0wMDogIE1vZGUsIG9uZSBiaXQgZm9yIGVhY2ggcXVldWUgLS0gMTogQ2hhaW4gbW9kZSwgMDogb25lLWF0LWEtdGltZQotICogTk9URTogIElmIGRyaXZlciBzZXRzIHVwIHF1ZXVlIGZvciBjaGFpbiBtb2RlLCBpdCBzaG91bGQgYmUgYWxzbyBzZXQgdXAKLSAqICAgICAgICBTY2hlZHVsZXItQUNLIG1vZGUgYXMgd2VsbCwgdmlhIFNDRF9RVUVVRV9TVEFUVVNfQklUUyh4KS4KLSAqLwotI2RlZmluZSBJV0w0OV9TQ0RfUVVFVUVDSEFJTl9TRUwgIChJV0w0OV9TQ0RfU1RBUlRfT0ZGU0VUICsgMHhkMCkKLQotLyoKLSAqIFNlbGVjdCB3aGljaCBxdWV1ZXMgaW50ZXJydXB0IGRyaXZlciB3aGVuIHNjaGVkdWxlciBpbmNyZW1lbnRzCi0gKiBhIHF1ZXVlJ3MgcmVhZCBwb2ludGVyIChpbmRleCkuCi0gKiBCaXQgZmllbGRzOgotICogMzEtMTY6ICBSZXNlcnZlZAotICogMTUtMDA6ICBJbnRlcnJ1cHQgZW5hYmxlLCBvbmUgYml0IGZvciBlYWNoIHF1ZXVlIC0tIDE6IGVuYWJsZWQsIDA6IGRpc2FibGVkCi0gKiBOT1RFOiAgVGhpcyBmdW5jdGlvbmFsaXR5IGlzIGFwcGFyZW50bHkgYSBuby1vcDsgZHJpdmVyIHJlbGllcyBvbiBpbnRlcnJ1cHRzCi0gKiAgICAgICAgZnJvbSBSeCBxdWV1ZSB0byByZWFkIFR4IGNvbW1hbmQgcmVzcG9uc2VzIGFuZCB1cGRhdGUgVHggcXVldWVzLgotICovCi0jZGVmaW5lIElXTDQ5X1NDRF9JTlRFUlJVUFRfTUFTSyAgKElXTDQ5X1NDRF9TVEFSVF9PRkZTRVQgKyAweGU0KQotCi0vKgotICogUXVldWUgc2VhcmNoIHN0YXR1cyByZWdpc3RlcnMuICBPbmUgZm9yIGVhY2ggcXVldWUuCi0gKiBTZXRzIHVwIHF1ZXVlIG1vZGUgYW5kIGFzc2lnbnMgcXVldWUgdG8gVHggRE1BIGNoYW5uZWwuCi0gKiBCaXQgZmllbGRzOgotICogMTktMTA6IFdyaXRlIG1hc2svZW5hYmxlIGJpdHMgZm9yIGJpdHMgMC05Ci0gKiAgICAgOTogRHJpdmVyIHNob3VsZCBpbml0IHRvICIwIgotICogICAgIDg6IFNjaGVkdWxlci1BQ0sgbW9kZSAoMSksIG5vbi1TY2hlZHVsZXItQUNLIChpLmUuIEZJRk8pIG1vZGUgKDApLgotICogICAgICAgIERyaXZlciBzaG91bGQgaW5pdCB0byAiMSIgZm9yIGFnZ3JlZ2F0aW9uIG1vZGUsIG9yICIwIiBvdGhlcndpc2UuCi0gKiAgIDctNjogRHJpdmVyIHNob3VsZCBpbml0IHRvICIwIgotICogICAgIDU6IFdpbmRvdyBTaXplIExlZnQ7IGluZGljYXRlcyB3aGV0aGVyIHNjaGVkdWxlciBjYW4gcmVxdWVzdAotICogICAgICAgIGFub3RoZXIgVEZELCBiYXNlZCBvbiB3aW5kb3cgc2l6ZSwgZXRjLiAgRHJpdmVyIHNob3VsZCBpbml0Ci0gKiAgICAgICAgdGhpcyBiaXQgdG8gIjEiIGZvciBhZ2dyZWdhdGlvbiBtb2RlLCBvciAiMCIgZm9yIG5vbi1hZ2cuCi0gKiAgIDQtMTogVHggRklGTyB0byB1c2UgKHJhbmdlIDAtNykuCi0gKiAgICAgMDogUXVldWUgaXMgYWN0aXZlICgxKSwgbm90IGFjdGl2ZSAoMCkuCi0gKiBPdGhlciBiaXRzIHNob3VsZCBiZSB3cml0dGVuIGFzICIwIgotICoKLSAqIE5PVEU6ICBJZiBlbmFibGluZyBTY2hlZHVsZXItQUNLIG1vZGUsIGNoYWluIG1vZGUgc2hvdWxkIGFsc28gYmUgZW5hYmxlZAotICogICAgICAgIHZpYSBTQ0RfUVVFVUVDSEFJTl9TRUwuCi0gKi8KLSNkZWZpbmUgSVdMNDlfU0NEX1FVRVVFX1NUQVRVU19CSVRTKHgpXAotCShJV0w0OV9TQ0RfU1RBUlRfT0ZGU0VUICsgMHgxMDQgKyAoeCkgKiA0KQotCi0vKiBCaXQgZmllbGQgcG9zaXRpb25zICovCi0jZGVmaW5lIElXTDQ5X1NDRF9RVUVVRV9TVFRTX1JFR19QT1NfQUNUSVZFCSgwKQotI2RlZmluZSBJV0w0OV9TQ0RfUVVFVUVfU1RUU19SRUdfUE9TX1RYRgkoMSkKLSNkZWZpbmUgSVdMNDlfU0NEX1FVRVVFX1NUVFNfUkVHX1BPU19XU0wJKDUpCi0jZGVmaW5lIElXTDQ5X1NDRF9RVUVVRV9TVFRTX1JFR19QT1NfU0NEX0FDSwkoOCkKLQotLyogV3JpdGUgbWFza3MgKi8KLSNkZWZpbmUgSVdMNDlfU0NEX1FVRVVFX1NUVFNfUkVHX1BPU19TQ0RfQUNUX0VOCSgxMCkKLSNkZWZpbmUgSVdMNDlfU0NEX1FVRVVFX1NUVFNfUkVHX01TSwkJKDB4MDAwN0ZDMDApCi0KLS8qKgotICogNDk2NSBpbnRlcm5hbCBTUkFNIHN0cnVjdHVyZXMgZm9yIHNjaGVkdWxlciwgc2hhcmVkIHdpdGggZHJpdmVyIC4uLgotICoKLSAqIERyaXZlciBzaG91bGQgY2xlYXIgYW5kIGluaXRpYWxpemUgdGhlIGZvbGxvd2luZyBhcmVhcyBhZnRlciByZWNlaXZpbmcKLSAqICJBbGl2ZSIgcmVzcG9uc2UgZnJvbSA0OTY1IHVDb2RlLCBpLmUuIGFmdGVyIGluaXRpYWwKLSAqIHVDb2RlIGxvYWQsIG9yIGFmdGVyIGEgdUNvZGUgbG9hZCBkb25lIGZvciBlcnJvciByZWNvdmVyeToKLSAqCi0gKiBTQ0RfQ09OVEVYVF9EQVRBX09GRlNFVCAoc2l6ZSAxMjggYnl0ZXMpCi0gKiBTQ0RfVFhfU1RUU19CSVRNQVBfT0ZGU0VUIChzaXplIDI1NiBieXRlcykKLSAqIFNDRF9UUkFOU0xBVEVfVEJMX09GRlNFVCAoc2l6ZSAzMiBieXRlcykKLSAqCi0gKiBEcml2ZXIgYWNjZXNzZXMgU1JBTSB2aWEgSEJVU19UQVJHX01FTV8qIHJlZ2lzdGVycy4KLSAqIERyaXZlciByZWFkcyBiYXNlIGFkZHJlc3Mgb2YgdGhpcyBzY2hlZHVsZXIgYXJlYSBmcm9tIFNDRF9TUkFNX0JBU0VfQUREUi4KLSAqIEFsbCBPRkZTRVQgdmFsdWVzIG11c3QgYmUgYWRkZWQgdG8gdGhpcyBiYXNlIGFkZHJlc3MuCi0gKi8KLQotLyoKLSAqIFF1ZXVlIGNvbnRleHQuICBPbmUgOC1ieXRlIGVudHJ5IGZvciBlYWNoIG9mIDE2IHF1ZXVlcy4KLSAqCi0gKiBEcml2ZXIgc2hvdWxkIGNsZWFyIHRoaXMgZW50aXJlIGFyZWEgKHNpemUgMHg4MCkgdG8gMCBhZnRlciByZWNlaXZpbmcKLSAqICJBbGl2ZSIgbm90aWZpY2F0aW9uIGZyb20gdUNvZGUuICBBZGRpdGlvbmFsbHksIGRyaXZlciBzaG91bGQgaW5pdAotICogZWFjaCBxdWV1ZSdzIGVudHJ5IGFzIGZvbGxvd3M6Ci0gKgotICogTFMgRHdvcmQgYml0IGZpZWxkczoKLSAqICAwLTA2OiAgTWF4IFR4IHdpbmRvdyBzaXplIGZvciBTY2hlZHVsZXItQUNLLiAgRHJpdmVyIHNob3VsZCBpbml0IHRvIDY0LgotICoKLSAqIE1TIER3b3JkIGJpdCBmaWVsZHM6Ci0gKiAxNi0yMjogIEZyYW1lIGxpbWl0LiAgRHJpdmVyIHNob3VsZCBpbml0IHRvIDEwICgweGEpLgotICoKLSAqIERyaXZlciBzaG91bGQgaW5pdCBhbGwgb3RoZXIgYml0cyB0byAwLgotICoKLSAqIEluaXQgbXVzdCBiZSBkb25lIGFmdGVyIGRyaXZlciByZWNlaXZlcyAiQWxpdmUiIHJlc3BvbnNlIGZyb20gNDk2NSB1Q29kZSwKLSAqIGFuZCB3aGVuIHNldHRpbmcgdXAgcXVldWUgZm9yIGFnZ3JlZ2F0aW9uLgotICovCi0jZGVmaW5lIElXTDQ5X1NDRF9DT05URVhUX0RBVEFfT0ZGU0VUCQkJMHgzODAKLSNkZWZpbmUgSVdMNDlfU0NEX0NPTlRFWFRfUVVFVUVfT0ZGU0VUKHgpIFwKLQkJCShJV0w0OV9TQ0RfQ09OVEVYVF9EQVRBX09GRlNFVCArICgoeCkgKiA4KSkKLQotI2RlZmluZSBJV0w0OV9TQ0RfUVVFVUVfQ1RYX1JFRzFfV0lOX1NJWkVfUE9TCQkoMCkKLSNkZWZpbmUgSVdMNDlfU0NEX1FVRVVFX0NUWF9SRUcxX1dJTl9TSVpFX01TSwkJKDB4MDAwMDAwN0YpCi0jZGVmaW5lIElXTDQ5X1NDRF9RVUVVRV9DVFhfUkVHMl9GUkFNRV9MSU1JVF9QT1MJKDE2KQotI2RlZmluZSBJV0w0OV9TQ0RfUVVFVUVfQ1RYX1JFRzJfRlJBTUVfTElNSVRfTVNLCSgweDAwN0YwMDAwKQotCi0vKgotICogVHggU3RhdHVzIEJpdG1hcAotICoKLSAqIERyaXZlciBzaG91bGQgY2xlYXIgdGhpcyBlbnRpcmUgYXJlYSAoc2l6ZSAweDEwMCkgdG8gMCBhZnRlciByZWNlaXZpbmcKLSAqICJBbGl2ZSIgbm90aWZpY2F0aW9uIGZyb20gdUNvZGUuICBBcmVhIGlzIHVzZWQgb25seSBieSBkZXZpY2UgaXRzZWxmOwotICogbm8gb3RoZXIgc3VwcG9ydCAoYmVzaWRlcyBjbGVhcmluZykgaXMgcmVxdWlyZWQgZnJvbSBkcml2ZXIuCi0gKi8KLSNkZWZpbmUgSVdMNDlfU0NEX1RYX1NUVFNfQklUTUFQX09GRlNFVAkJMHg0MDAKLQotLyoKLSAqIFJBeFRJRCB0byBxdWV1ZSB0cmFuc2xhdGlvbiBtYXBwaW5nLgotICoKLSAqIFdoZW4gcXVldWUgaXMgaW4gU2NoZWR1bGVyLUFDSyBtb2RlLCBmcmFtZXMgcGxhY2VkIGluIGEgdGhhdCBxdWV1ZSBtdXN0IGJlCi0gKiBmb3Igb25seSBvbmUgY29tYmluYXRpb24gb2YgcmVjZWl2ZXIgYWRkcmVzcyAoUkEpIGFuZCB0cmFmZmljIElEIChUSUQpLCBpLmUuCi0gKiBvbmUgUU9TIHByaW9yaXR5IGxldmVsIGRlc3RpbmVkIGZvciBvbmUgc3RhdGlvbiAoZm9yIHRoaXMgd2lyZWxlc3MgbGluaywKLSAqIG5vdCBmaW5hbCBkZXN0aW5hdGlvbikuICBUaGUgU0NEX1RSQU5TTEFURV9UQUJMRSBhcmVhIHByb3ZpZGVzIDE2IDE2LWJpdAotICogbWFwcGluZ3MsIG9uZSBmb3IgZWFjaCBvZiB0aGUgMTYgcXVldWVzLiAgSWYgcXVldWUgaXMgbm90IGluIFNjaGVkdWxlci1BQ0sKLSAqIG1vZGUsIHRoZSBkZXZpY2UgaWdub3JlcyB0aGUgbWFwcGluZyB2YWx1ZS4KLSAqCi0gKiBCaXQgZmllbGRzLCBmb3IgZWFjaCAxNi1iaXQgbWFwOgotICogMTUtOTogIFJlc2VydmVkLCBzZXQgdG8gMAotICogIDgtNDogIEluZGV4IGludG8gZGV2aWNlJ3Mgc3RhdGlvbiB0YWJsZSBmb3IgcmVjaXBpZW50IHN0YXRpb24KLSAqICAzLTA6ICBUcmFmZmljIElEICh0aWQpLCByYW5nZSAwLTE1Ci0gKgotICogRHJpdmVyIHNob3VsZCBjbGVhciB0aGlzIGVudGlyZSBhcmVhIChzaXplIDMyIGJ5dGVzKSB0byAwIGFmdGVyIHJlY2VpdmluZwotICogIkFsaXZlIiBub3RpZmljYXRpb24gZnJvbSB1Q29kZS4gIFRvIHVwZGF0ZSBhIDE2LWJpdCBtYXAgdmFsdWUsIGRyaXZlcgotICogbXVzdCByZWFkIGEgZHdvcmQtYWxpZ25lZCB2YWx1ZSBmcm9tIGRldmljZSBTUkFNLCByZXBsYWNlIHRoZSAxNi1iaXQgbWFwCi0gKiB2YWx1ZSBvZiBpbnRlcmVzdCwgYW5kIHdyaXRlIHRoZSBkd29yZCB2YWx1ZSBiYWNrIGludG8gZGV2aWNlIFNSQU0uCi0gKi8KLSNkZWZpbmUgSVdMNDlfU0NEX1RSQU5TTEFURV9UQkxfT0ZGU0VUCQkweDUwMAotCi0vKiBGaW5kIHRyYW5zbGF0aW9uIHRhYmxlIGR3b3JkIHRvIHJlYWQvd3JpdGUgZm9yIGdpdmVuIHF1ZXVlICovCi0jZGVmaW5lIElXTDQ5X1NDRF9UUkFOU0xBVEVfVEJMX09GRlNFVF9RVUVVRSh4KSBcCi0JKChJV0w0OV9TQ0RfVFJBTlNMQVRFX1RCTF9PRkZTRVQgKyAoKHgpICogMikpICYgMHhmZmZmZmZmYykKLQogI2RlZmluZSBJV0xfU0NEX1RYRklGT19QT1NfVElECQkJKDApCiAjZGVmaW5lIElXTF9TQ0RfVFhGSUZPX1BPU19SQQkJCSg0KQogI2RlZmluZSBJV0xfU0NEX1FVRVVFX1JBX1RJRF9NQVBfUkFUSURfTVNLCSgweDAxRkYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYwppbmRleCA2ZjlhMmZhLi4wMDUzZTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJ4LmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KQEAgLTIyNSw1NSArMjI1LDYgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBpd2xfcnhfcmVwbHlfYWxpdmUoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJICAgICAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSByeGJfYWRkcihyeGIpOwotCXN0cnVjdCBpd2xfYWxpdmVfcmVzcCAqcGFsaXZlOwotCXN0cnVjdCBkZWxheWVkX3dvcmsgKnB3b3JrOwotCi0JcGFsaXZlID0gJnBrdC0+dS5hbGl2ZV9mcmFtZTsKLQotCUlXTF9ERUJVR19JTkZPKHByaXYsICJBbGl2ZSB1Y29kZSBzdGF0dXMgMHglMDhYIHJldmlzaW9uICIKLQkJICAgICAgICIweCUwMVggMHglMDFYXG4iLAotCQkgICAgICAgcGFsaXZlLT5pc192YWxpZCwgcGFsaXZlLT52ZXJfdHlwZSwKLQkJICAgICAgIHBhbGl2ZS0+dmVyX3N1YnR5cGUpOwotCi0JaWYgKHBhbGl2ZS0+dmVyX3N1YnR5cGUgPT0gSU5JVElBTElaRV9TVUJUWVBFKSB7Ci0JCUlXTF9ERUJVR19JTkZPKHByaXYsICJJbml0aWFsaXphdGlvbiBBbGl2ZSByZWNlaXZlZC5cbiIpOwotCQltZW1jcHkoJnByaXYtPmNhcmRfYWxpdmVfaW5pdCwKLQkJICAgICAgICZwa3QtPnUuYWxpdmVfZnJhbWUsCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bF9pbml0X2FsaXZlX3Jlc3ApKTsKLQkJcHdvcmsgPSAmcHJpdi0+aW5pdF9hbGl2ZV9zdGFydDsKLQl9IGVsc2UgewotCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUnVudGltZSBBbGl2ZSByZWNlaXZlZC5cbiIpOwotCQltZW1jcHkoJnByaXYtPmNhcmRfYWxpdmUsICZwa3QtPnUuYWxpdmVfZnJhbWUsCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bF9hbGl2ZV9yZXNwKSk7Ci0JCXB3b3JrID0gJnByaXYtPmFsaXZlX3N0YXJ0OwotCX0KLQotCS8qIFdlIGRlbGF5IHRoZSBBTElWRSByZXNwb25zZSBieSA1bXMgdG8KLQkgKiBnaXZlIHRoZSBIVyBSRiBLaWxsIHRpbWUgdG8gYWN0aXZhdGUuLi4gKi8KLQlpZiAocGFsaXZlLT5pc192YWxpZCA9PSBVQ09ERV9WQUxJRF9PSykKLQkJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwgcHdvcmssCi0JCQkJICAgbXNlY3NfdG9famlmZmllcyg1KSk7Ci0JZWxzZSB7Ci0JCUlXTF9XQVJOKHByaXYsICIlcyB1Q29kZSBkaWQgbm90IHJlc3BvbmQgT0suXG4iLAotCQkJKHBhbGl2ZS0+dmVyX3N1YnR5cGUgPT0gSU5JVElBTElaRV9TVUJUWVBFKSA/Ci0JCQkiaW5pdCIgOiAicnVudGltZSIpOwotCQkvKgotCQkgKiBJZiBmYWlsIHRvIGxvYWQgaW5pdCB1Q29kZSwKLQkJICogbGV0J3MgdHJ5IHRvIGxvYWQgdGhlIGluaXQgdUNvZGUgYWdhaW4uCi0JCSAqIFdlIHNob3VsZCBub3QgZ2V0IGludG8gdGhpcyBzaXR1YXRpb24sIGJ1dCBpZiBpdAotCQkgKiBkb2VzIGhhcHBlbiwgd2Ugc2hvdWxkIG5vdCBtb3ZlIG9uIGFuZCBsb2FkaW5nICJydW50aW1lIgotCQkgKiB3aXRob3V0IHByb3BlciBjYWxpYnJhdGUgdGhlIGRldmljZS4KLQkJICovCi0JCWlmIChwYWxpdmUtPnZlcl9zdWJ0eXBlID09IElOSVRJQUxJWkVfU1VCVFlQRSkKLQkJCXByaXYtPnVjb2RlX3R5cGUgPSBVQ09ERV9OT05FOwotCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJlc3RhcnQpOwotCX0KLX0KLQogc3RhdGljIHZvaWQgaXdsX3J4X3JlcGx5X2Vycm9yKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKIHsKQEAgLTM5MCwyMSArMzQxLDE2IEBACiAgKiB0aGUgQkFfVElNRU9VVF9NQVgsIHJlbG9hZCBmaXJtd2FyZSBhbmQgYnJpbmcgc3lzdGVtIGJhY2sgdG8gbm9ybWFsCiAgKiBvcGVyYXRpb24gc3RhdGUuCiAgKi8KLXN0YXRpYyBib29sIGl3bF9nb29kX2Fja19oZWFsdGgoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0KQorc3RhdGljIGJvb2wgaXdsX2dvb2RfYWNrX2hlYWx0aChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJc3RydWN0IHN0YXRpc3RpY3NfdHggKmN1cikKIHsKIAlpbnQgYWN0dWFsX2RlbHRhLCBleHBlY3RlZF9kZWx0YSwgYmFfdGltZW91dF9kZWx0YTsKLQlzdHJ1Y3Qgc3RhdGlzdGljc190eCAqY3VyLCAqb2xkOworCXN0cnVjdCBzdGF0aXN0aWNzX3R4ICpvbGQ7CiAKIAlpZiAocHJpdi0+X2Fnbi5hZ2dfdGlkc19jb3VudCkKIAkJcmV0dXJuIHRydWU7CiAKLQlpZiAoaXdsX2J0X3N0YXRpc3RpY3MocHJpdikpIHsKLQkJY3VyID0gJnBrdC0+dS5zdGF0c19idC50eDsKLQkJb2xkID0gJnByaXYtPl9hZ24uc3RhdGlzdGljc19idC50eDsKLQl9IGVsc2UgewotCQljdXIgPSAmcGt0LT51LnN0YXRzLnR4OwotCQlvbGQgPSAmcHJpdi0+X2Fnbi5zdGF0aXN0aWNzLnR4OwotCX0KKwlvbGQgPSAmcHJpdi0+c3RhdGlzdGljcy50eDsKIAogCWFjdHVhbF9kZWx0YSA9IGxlMzJfdG9fY3B1KGN1ci0+YWN0dWFsX2Fja19jbnQpIC0KIAkJICAgICAgIGxlMzJfdG9fY3B1KG9sZC0+YWN0dWFsX2Fja19jbnQpOwpAQCAtNDMwLDEwICszNzYsMTAgQEAKIAkJICogREVCVUcgaXMgbm90LCB0aGVzZSB3aWxsIGp1c3QgY29tcGlsZSBvdXQuCiAJCSAqLwogCQlJV0xfREVCVUdfUkFESU8ocHJpdiwgInJ4X2RldGVjdGVkX2NudCBkZWx0YSAlZFxuIiwKLQkJCQlwcml2LT5fYWduLmRlbHRhX3N0YXRpc3RpY3MudHgucnhfZGV0ZWN0ZWRfY250KTsKKwkJCQlwcml2LT5kZWx0YV9zdGF0cy50eC5yeF9kZXRlY3RlZF9jbnQpOwogCQlJV0xfREVCVUdfUkFESU8ocHJpdiwKIAkJCQkiYWNrX29yX2JhX3RpbWVvdXRfY29sbGlzaW9uIGRlbHRhICVkXG4iLAotCQkJCXByaXYtPl9hZ24uZGVsdGFfc3RhdGlzdGljcy50eC5hY2tfb3JfYmFfdGltZW91dF9jb2xsaXNpb24pOworCQkJCXByaXYtPmRlbHRhX3N0YXRzLnR4LmFja19vcl9iYV90aW1lb3V0X2NvbGxpc2lvbik7CiAjZW5kaWYKIAogCQlpZiAoYmFfdGltZW91dF9kZWx0YSA+PSBCQV9USU1FT1VUX01BWCkKQEAgLTQ1MCw3ICszOTYsOSBAQAogICogdG8gaW1wcm92ZSB0aGUgdGhyb3VnaHB1dC4KICAqLwogc3RhdGljIGJvb2wgaXdsX2dvb2RfcGxjcF9oZWFsdGgoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSBzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0LCB1bnNpZ25lZCBpbnQgbXNlY3MpCisJCQkJIHN0cnVjdCBzdGF0aXN0aWNzX3J4X3BoeSAqY3VyX29mZG0sCisJCQkJIHN0cnVjdCBzdGF0aXN0aWNzX3J4X2h0X3BoeSAqY3VyX29mZG1faHQsCisJCQkJIHVuc2lnbmVkIGludCBtc2VjcykKIHsKIAlpbnQgZGVsdGE7CiAJaW50IHRocmVzaG9sZCA9IHByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPnBsY3BfZGVsdGFfdGhyZXNob2xkOwpAQCAtNDYwLDI5ICs0MDgsMTIgQEAKIAkJcmV0dXJuIHRydWU7CiAJfQogCi0JaWYgKGl3bF9idF9zdGF0aXN0aWNzKHByaXYpKSB7Ci0JCXN0cnVjdCBzdGF0aXN0aWNzX3J4X2J0ICpjdXIsICpvbGQ7CisJZGVsdGEgPSBsZTMyX3RvX2NwdShjdXJfb2ZkbS0+cGxjcF9lcnIpIC0KKwkJbGUzMl90b19jcHUocHJpdi0+c3RhdGlzdGljcy5yeF9vZmRtLnBsY3BfZXJyKSArCisJCWxlMzJfdG9fY3B1KGN1cl9vZmRtX2h0LT5wbGNwX2VycikgLQorCQlsZTMyX3RvX2NwdShwcml2LT5zdGF0aXN0aWNzLnJ4X29mZG1faHQucGxjcF9lcnIpOwogCi0JCWN1ciA9ICZwa3QtPnUuc3RhdHNfYnQucng7Ci0JCW9sZCA9ICZwcml2LT5fYWduLnN0YXRpc3RpY3NfYnQucng7Ci0KLQkJZGVsdGEgPSBsZTMyX3RvX2NwdShjdXItPm9mZG0ucGxjcF9lcnIpIC0KLQkJCWxlMzJfdG9fY3B1KG9sZC0+b2ZkbS5wbGNwX2VycikgKwotCQkJbGUzMl90b19jcHUoY3VyLT5vZmRtX2h0LnBsY3BfZXJyKSAtCi0JCQlsZTMyX3RvX2NwdShvbGQtPm9mZG1faHQucGxjcF9lcnIpOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCBzdGF0aXN0aWNzX3J4ICpjdXIsICpvbGQ7Ci0KLQkJY3VyID0gJnBrdC0+dS5zdGF0cy5yeDsKLQkJb2xkID0gJnByaXYtPl9hZ24uc3RhdGlzdGljcy5yeDsKLQotCQlkZWx0YSA9IGxlMzJfdG9fY3B1KGN1ci0+b2ZkbS5wbGNwX2VycikgLQotCQkJbGUzMl90b19jcHUob2xkLT5vZmRtLnBsY3BfZXJyKSArCi0JCQlsZTMyX3RvX2NwdShjdXItPm9mZG1faHQucGxjcF9lcnIpIC0KLQkJCWxlMzJfdG9fY3B1KG9sZC0+b2ZkbV9odC5wbGNwX2Vycik7Ci0JfQotCi0JLyogQ2FuIGJlIG5lZ2F0aXZlIGlmIGZpcm13YXJlIHJlc2V0ZWQgc3RhdGlzdGljcyAqLworCS8qIENhbiBiZSBuZWdhdGl2ZSBpZiBmaXJtd2FyZSByZXNldCBzdGF0aXN0aWNzICovCiAJaWYgKGRlbHRhIDw9IDApCiAJCXJldHVybiB0cnVlOwogCkBAIC00OTcsNDQgKzQyOCwzNSBAQAogfQogCiBzdGF0aWMgdm9pZCBpd2xfcmVjb3Zlcl9mcm9tX3N0YXRpc3RpY3Moc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCQlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0KQorCQkJCQlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9waHkgKmN1cl9vZmRtLAorCQkJCQlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9odF9waHkgKmN1cl9vZmRtX2h0LAorCQkJCQlzdHJ1Y3Qgc3RhdGlzdGljc190eCAqdHgsCisJCQkJCXVuc2lnbmVkIGxvbmcgc3RhbXApCiB7Ci0JY29uc3Qgc3RydWN0IGl3bF9tb2RfcGFyYW1zICptb2RfcGFyYW1zID0gcHJpdi0+Y2ZnLT5tb2RfcGFyYW1zOwogCXVuc2lnbmVkIGludCBtc2VjczsKLQl1bnNpZ25lZCBsb25nIHN0YW1wOwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQogCQlyZXR1cm47CiAKLQlzdGFtcCA9IGppZmZpZXM7CiAJbXNlY3MgPSBqaWZmaWVzX3RvX21zZWNzKHN0YW1wIC0gcHJpdi0+cnhfc3RhdGlzdGljc19qaWZmaWVzKTsKIAogCS8qIE9ubHkgZ2F0aGVyIHN0YXRpc3RpY3MgYW5kIHVwZGF0ZSB0aW1lIHN0YW1wIHdoZW4gbm90IGFzc29jaWF0ZWQgKi8KIAlpZiAoIWl3bF9pc19hbnlfYXNzb2NpYXRlZChwcml2KSkKLQkJZ290byBvdXQ7CisJCXJldHVybjsKIAogCS8qIERvIG5vdCBjaGVjay9yZWNvdmVyIHdoZW4gZG8gbm90IGhhdmUgZW5vdWdoIHN0YXRpc3RpY3MgZGF0YSAqLwogCWlmIChtc2VjcyA8IDk5KQogCQlyZXR1cm47CiAKLQlpZiAobW9kX3BhcmFtcy0+YWNrX2NoZWNrICYmICFpd2xfZ29vZF9hY2tfaGVhbHRoKHByaXYsIHBrdCkpIHsKKwlpZiAoaXdsYWduX21vZF9wYXJhbXMuYWNrX2NoZWNrICYmICFpd2xfZ29vZF9hY2tfaGVhbHRoKHByaXYsIHR4KSkgewogCQlJV0xfRVJSKHByaXYsICJsb3cgYWNrIGNvdW50IGRldGVjdGVkLCByZXN0YXJ0IGZpcm13YXJlXG4iKTsKIAkJaWYgKCFpd2xfZm9yY2VfcmVzZXQocHJpdiwgSVdMX0ZXX1JFU0VULCBmYWxzZSkpCiAJCQlyZXR1cm47CiAJfQogCi0JaWYgKG1vZF9wYXJhbXMtPnBsY3BfY2hlY2sgJiYgIWl3bF9nb29kX3BsY3BfaGVhbHRoKHByaXYsIHBrdCwgbXNlY3MpKQorCWlmIChpd2xhZ25fbW9kX3BhcmFtcy5wbGNwX2NoZWNrICYmCisJICAgICFpd2xfZ29vZF9wbGNwX2hlYWx0aChwcml2LCBjdXJfb2ZkbSwgY3VyX29mZG1faHQsIG1zZWNzKSkKIAkJaXdsX2ZvcmNlX3Jlc2V0KHByaXYsIElXTF9SRl9SRVNFVCwgZmFsc2UpOwotCi1vdXQ6Ci0JaWYgKGl3bF9idF9zdGF0aXN0aWNzKHByaXYpKQotCQltZW1jcHkoJnByaXYtPl9hZ24uc3RhdGlzdGljc19idCwgJnBrdC0+dS5zdGF0c19idCwKLQkJCXNpemVvZihwcml2LT5fYWduLnN0YXRpc3RpY3NfYnQpKTsKLQllbHNlCi0JCW1lbWNweSgmcHJpdi0+X2Fnbi5zdGF0aXN0aWNzLCAmcGt0LT51LnN0YXRzLAotCQkJc2l6ZW9mKHByaXYtPl9hZ24uc3RhdGlzdGljcykpOwotCi0JcHJpdi0+cnhfc3RhdGlzdGljc19qaWZmaWVzID0gc3RhbXA7CiB9CiAKIC8qIENhbGN1bGF0ZSBub2lzZSBsZXZlbCwgYmFzZWQgb24gbWVhc3VyZW1lbnRzIGR1cmluZyBuZXR3b3JrIHNpbGVuY2UganVzdApAQCAtNTQ4LDEwICs0NzAsOCBAQAogCWludCBiY25fc2lsZW5jZV9hLCBiY25fc2lsZW5jZV9iLCBiY25fc2lsZW5jZV9jOwogCWludCBsYXN0X3J4X25vaXNlOwogCi0JaWYgKGl3bF9idF9zdGF0aXN0aWNzKHByaXYpKQotCQlyeF9pbmZvID0gJihwcml2LT5fYWduLnN0YXRpc3RpY3NfYnQucnguZ2VuZXJhbC5jb21tb24pOwotCWVsc2UKLQkJcnhfaW5mbyA9ICYocHJpdi0+X2Fnbi5zdGF0aXN0aWNzLnJ4LmdlbmVyYWwpOworCXJ4X2luZm8gPSAmcHJpdi0+c3RhdGlzdGljcy5yeF9ub25fcGh5OworCiAJYmNuX3NpbGVuY2VfYSA9CiAJCWxlMzJfdG9fY3B1KHJ4X2luZm8tPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYSkgJiBJTl9CQU5EX0ZJTFRFUjsKIAliY25fc2lsZW5jZV9iID0KQEAgLTU4MywxMDUgKzUwMywxNTMgQEAKIAkJCWxhc3Rfcnhfbm9pc2UpOwogfQogCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUdGUwogLyoKICAqICBiYXNlZCBvbiB0aGUgYXNzdW1wdGlvbiBvZiBhbGwgc3RhdGlzdGljcyBjb3VudGVyIGFyZSBpbiBEV09SRAogICogIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGlzIGZvciBkZWJ1Z2dpbmcsIGRvIG5vdCBkZWFsIHdpdGgKICAqICB0aGUgY2FzZSBvZiBjb3VudGVycyByb2xsLW92ZXIuCiAgKi8KLXN0YXRpYyB2b2lkIGl3bF9hY2N1bXVsYXRpdmVfc3RhdGlzdGljcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJCV9fbGUzMiAqc3RhdHMpCitzdGF0aWMgdm9pZCBhY2N1bV9zdGF0cyhfX2xlMzIgKnByZXYsIF9fbGUzMiAqY3VyLCBfX2xlMzIgKmRlbHRhLAorCQkJX19sZTMyICptYXhfZGVsdGEsIF9fbGUzMiAqYWNjdW0sIGludCBzaXplKQogewotI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHRlMKLQlpbnQgaSwgc2l6ZTsKLQlfX2xlMzIgKnByZXZfc3RhdHM7Ci0JdTMyICphY2N1bV9zdGF0czsKLQl1MzIgKmRlbHRhLCAqbWF4X2RlbHRhOwotCXN0cnVjdCBzdGF0aXN0aWNzX2dlbmVyYWxfY29tbW9uICpnZW5lcmFsLCAqYWNjdW1fZ2VuZXJhbDsKLQlzdHJ1Y3Qgc3RhdGlzdGljc190eCAqdHgsICphY2N1bV90eDsKKwlpbnQgaTsKIAotCWlmIChpd2xfYnRfc3RhdGlzdGljcyhwcml2KSkgewotCQlwcmV2X3N0YXRzID0gKF9fbGUzMiAqKSZwcml2LT5fYWduLnN0YXRpc3RpY3NfYnQ7Ci0JCWFjY3VtX3N0YXRzID0gKHUzMiAqKSZwcml2LT5fYWduLmFjY3VtX3N0YXRpc3RpY3NfYnQ7Ci0JCXNpemUgPSBzaXplb2Yoc3RydWN0IGl3bF9idF9ub3RpZl9zdGF0aXN0aWNzKTsKLQkJZ2VuZXJhbCA9ICZwcml2LT5fYWduLnN0YXRpc3RpY3NfYnQuZ2VuZXJhbC5jb21tb247Ci0JCWFjY3VtX2dlbmVyYWwgPSAmcHJpdi0+X2Fnbi5hY2N1bV9zdGF0aXN0aWNzX2J0LmdlbmVyYWwuY29tbW9uOwotCQl0eCA9ICZwcml2LT5fYWduLnN0YXRpc3RpY3NfYnQudHg7Ci0JCWFjY3VtX3R4ID0gJnByaXYtPl9hZ24uYWNjdW1fc3RhdGlzdGljc19idC50eDsKLQkJZGVsdGEgPSAodTMyICopJnByaXYtPl9hZ24uZGVsdGFfc3RhdGlzdGljc19idDsKLQkJbWF4X2RlbHRhID0gKHUzMiAqKSZwcml2LT5fYWduLm1heF9kZWx0YV9idDsKLQl9IGVsc2UgewotCQlwcmV2X3N0YXRzID0gKF9fbGUzMiAqKSZwcml2LT5fYWduLnN0YXRpc3RpY3M7Ci0JCWFjY3VtX3N0YXRzID0gKHUzMiAqKSZwcml2LT5fYWduLmFjY3VtX3N0YXRpc3RpY3M7Ci0JCXNpemUgPSBzaXplb2Yoc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzKTsKLQkJZ2VuZXJhbCA9ICZwcml2LT5fYWduLnN0YXRpc3RpY3MuZ2VuZXJhbC5jb21tb247Ci0JCWFjY3VtX2dlbmVyYWwgPSAmcHJpdi0+X2Fnbi5hY2N1bV9zdGF0aXN0aWNzLmdlbmVyYWwuY29tbW9uOwotCQl0eCA9ICZwcml2LT5fYWduLnN0YXRpc3RpY3MudHg7Ci0JCWFjY3VtX3R4ID0gJnByaXYtPl9hZ24uYWNjdW1fc3RhdGlzdGljcy50eDsKLQkJZGVsdGEgPSAodTMyICopJnByaXYtPl9hZ24uZGVsdGFfc3RhdGlzdGljczsKLQkJbWF4X2RlbHRhID0gKHUzMiAqKSZwcml2LT5fYWduLm1heF9kZWx0YTsKLQl9Ci0JZm9yIChpID0gc2l6ZW9mKF9fbGUzMik7IGkgPCBzaXplOwotCSAgICAgaSArPSBzaXplb2YoX19sZTMyKSwgc3RhdHMrKywgcHJldl9zdGF0cysrLCBkZWx0YSsrLAotCSAgICAgbWF4X2RlbHRhKyssIGFjY3VtX3N0YXRzKyspIHsKLQkJaWYgKGxlMzJfdG9fY3B1KCpzdGF0cykgPiBsZTMyX3RvX2NwdSgqcHJldl9zdGF0cykpIHsKLQkJCSpkZWx0YSA9IChsZTMyX3RvX2NwdSgqc3RhdHMpIC0KLQkJCQlsZTMyX3RvX2NwdSgqcHJldl9zdGF0cykpOwotCQkJKmFjY3VtX3N0YXRzICs9ICpkZWx0YTsKLQkJCWlmICgqZGVsdGEgPiAqbWF4X2RlbHRhKQorCWZvciAoaSA9IDA7CisJICAgICBpIDwgc2l6ZSAvIHNpemVvZihfX2xlMzIpOworCSAgICAgaSsrLCBwcmV2KyssIGN1cisrLCBkZWx0YSsrLCBtYXhfZGVsdGErKywgYWNjdW0rKykgeworCQlpZiAobGUzMl90b19jcHUoKmN1cikgPiBsZTMyX3RvX2NwdSgqcHJldikpIHsKKwkJCSpkZWx0YSA9IGNwdV90b19sZTMyKAorCQkJCWxlMzJfdG9fY3B1KCpjdXIpIC0gbGUzMl90b19jcHUoKnByZXYpKTsKKwkJCWxlMzJfYWRkX2NwdShhY2N1bSwgbGUzMl90b19jcHUoKmRlbHRhKSk7CisJCQlpZiAobGUzMl90b19jcHUoKmRlbHRhKSA+IGxlMzJfdG9fY3B1KCptYXhfZGVsdGEpKQogCQkJCSptYXhfZGVsdGEgPSAqZGVsdGE7CiAJCX0KIAl9Ci0KLQkvKiByZXNldCBhY2N1bXVsYXRpdmUgc3RhdGlzdGljcyBmb3IgIm5vLWNvdW50ZXIiIHR5cGUgc3RhdGlzdGljcyAqLwotCWFjY3VtX2dlbmVyYWwtPnRlbXBlcmF0dXJlID0gZ2VuZXJhbC0+dGVtcGVyYXR1cmU7Ci0JYWNjdW1fZ2VuZXJhbC0+dGVtcGVyYXR1cmVfbSA9IGdlbmVyYWwtPnRlbXBlcmF0dXJlX207Ci0JYWNjdW1fZ2VuZXJhbC0+dHRsX3RpbWVzdGFtcCA9IGdlbmVyYWwtPnR0bF90aW1lc3RhbXA7Ci0JYWNjdW1fdHgtPnR4X3Bvd2VyLmFudF9hID0gdHgtPnR4X3Bvd2VyLmFudF9hOwotCWFjY3VtX3R4LT50eF9wb3dlci5hbnRfYiA9IHR4LT50eF9wb3dlci5hbnRfYjsKLQlhY2N1bV90eC0+dHhfcG93ZXIuYW50X2MgPSB0eC0+dHhfcG93ZXIuYW50X2M7Ci0jZW5kaWYKIH0KIAorc3RhdGljIHZvaWQKK2l3bF9hY2N1bXVsYXRpdmVfc3RhdGlzdGljcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgc3RydWN0IHN0YXRpc3RpY3NfZ2VuZXJhbF9jb21tb24gKmNvbW1vbiwKKwkJCSAgICBzdHJ1Y3Qgc3RhdGlzdGljc19yeF9ub25fcGh5ICpyeF9ub25fcGh5LAorCQkJICAgIHN0cnVjdCBzdGF0aXN0aWNzX3J4X3BoeSAqcnhfb2ZkbSwKKwkJCSAgICBzdHJ1Y3Qgc3RhdGlzdGljc19yeF9odF9waHkgKnJ4X29mZG1faHQsCisJCQkgICAgc3RydWN0IHN0YXRpc3RpY3NfcnhfcGh5ICpyeF9jY2ssCisJCQkgICAgc3RydWN0IHN0YXRpc3RpY3NfdHggKnR4LAorCQkJICAgIHN0cnVjdCBzdGF0aXN0aWNzX2J0X2FjdGl2aXR5ICpidF9hY3Rpdml0eSkKK3sKKyNkZWZpbmUgQUNDVU0oX25hbWUpCVwKKwlhY2N1bV9zdGF0cygoX19sZTMyICopJnByaXYtPnN0YXRpc3RpY3MuX25hbWUsCQlcCisJCSAgICAoX19sZTMyICopX25hbWUsCQkJCVwKKwkJICAgIChfX2xlMzIgKikmcHJpdi0+ZGVsdGFfc3RhdHMuX25hbWUsCQlcCisJCSAgICAoX19sZTMyICopJnByaXYtPm1heF9kZWx0YV9zdGF0cy5fbmFtZSwJXAorCQkgICAgKF9fbGUzMiAqKSZwcml2LT5hY2N1bV9zdGF0cy5fbmFtZSwJCVwKKwkJICAgIHNpemVvZigqX25hbWUpKTsKKworCUFDQ1VNKGNvbW1vbik7CisJQUNDVU0ocnhfbm9uX3BoeSk7CisJQUNDVU0ocnhfb2ZkbSk7CisJQUNDVU0ocnhfb2ZkbV9odCk7CisJQUNDVU0ocnhfY2NrKTsKKwlBQ0NVTSh0eCk7CisJaWYgKGJ0X2FjdGl2aXR5KQorCQlBQ0NVTShidF9hY3Rpdml0eSk7CisjdW5kZWYgQUNDVU0KK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQKK2l3bF9hY2N1bXVsYXRpdmVfc3RhdGlzdGljcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgc3RydWN0IHN0YXRpc3RpY3NfZ2VuZXJhbF9jb21tb24gKmNvbW1vbiwKKwkJCSAgICBzdHJ1Y3Qgc3RhdGlzdGljc19yeF9ub25fcGh5ICpyeF9ub25fcGh5LAorCQkJICAgIHN0cnVjdCBzdGF0aXN0aWNzX3J4X3BoeSAqcnhfb2ZkbSwKKwkJCSAgICBzdHJ1Y3Qgc3RhdGlzdGljc19yeF9odF9waHkgKnJ4X29mZG1faHQsCisJCQkgICAgc3RydWN0IHN0YXRpc3RpY3NfcnhfcGh5ICpyeF9jY2ssCisJCQkgICAgc3RydWN0IHN0YXRpc3RpY3NfdHggKnR4LAorCQkJICAgIHN0cnVjdCBzdGF0aXN0aWNzX2J0X2FjdGl2aXR5ICpidF9hY3Rpdml0eSkKK3sKK30KKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBpd2xfcnhfc3RhdGlzdGljcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKIHsKKwl1bnNpZ25lZCBsb25nIHN0YW1wID0gamlmZmllczsKIAljb25zdCBpbnQgcmVnX3JlY2FsaWJfcGVyaW9kID0gNjA7CiAJaW50IGNoYW5nZTsKIAlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gcnhiX2FkZHIocnhiKTsKKwl1MzIgbGVuID0gbGUzMl90b19jcHUocGt0LT5sZW5fbl9mbGFncykgJiBGSF9SU0NTUl9GUkFNRV9TSVpFX01TSzsKKwlfX2xlMzIgKmZsYWc7CisJc3RydWN0IHN0YXRpc3RpY3NfZ2VuZXJhbF9jb21tb24gKmNvbW1vbjsKKwlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9ub25fcGh5ICpyeF9ub25fcGh5OworCXN0cnVjdCBzdGF0aXN0aWNzX3J4X3BoeSAqcnhfb2ZkbTsKKwlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9odF9waHkgKnJ4X29mZG1faHQ7CisJc3RydWN0IHN0YXRpc3RpY3NfcnhfcGh5ICpyeF9jY2s7CisJc3RydWN0IHN0YXRpc3RpY3NfdHggKnR4OworCXN0cnVjdCBzdGF0aXN0aWNzX2J0X2FjdGl2aXR5ICpidF9hY3Rpdml0eTsKIAotCWlmIChpd2xfYnRfc3RhdGlzdGljcyhwcml2KSkgewotCQlJV0xfREVCVUdfUlgocHJpdiwKLQkJCSAgICAgIlN0YXRpc3RpY3Mgbm90aWZpY2F0aW9uIHJlY2VpdmVkICglZCB2cyAlZCkuXG4iLAotCQkJICAgICAoaW50KXNpemVvZihzdHJ1Y3QgaXdsX2J0X25vdGlmX3N0YXRpc3RpY3MpLAotCQkJICAgICBsZTMyX3RvX2NwdShwa3QtPmxlbl9uX2ZsYWdzKSAmCi0JCQkgICAgIEZIX1JTQ1NSX0ZSQU1FX1NJWkVfTVNLKTsKKwlsZW4gLT0gc2l6ZW9mKHN0cnVjdCBpd2xfY21kX2hlYWRlcik7IC8qIHNraXAgaGVhZGVyICovCiAKLQkJY2hhbmdlID0gKChwcml2LT5fYWduLnN0YXRpc3RpY3NfYnQuZ2VuZXJhbC5jb21tb24udGVtcGVyYXR1cmUgIT0KLQkJCSAgIHBrdC0+dS5zdGF0c19idC5nZW5lcmFsLmNvbW1vbi50ZW1wZXJhdHVyZSkgfHwKLQkJCSAgICgocHJpdi0+X2Fnbi5zdGF0aXN0aWNzX2J0LmZsYWcgJgotCQkJICAgU1RBVElTVElDU19SRVBMWV9GTEdfSFQ0MF9NT0RFX01TSykgIT0KLQkJCSAgIChwa3QtPnUuc3RhdHNfYnQuZmxhZyAmCi0JCQkgICBTVEFUSVNUSUNTX1JFUExZX0ZMR19IVDQwX01PREVfTVNLKSkpOworCUlXTF9ERUJVR19SWChwcml2LCAiU3RhdGlzdGljcyBub3RpZmljYXRpb24gcmVjZWl2ZWQgKCVkIGJ5dGVzKS5cbiIsCisJCSAgICAgbGVuKTsKIAotCQlpd2xfYWNjdW11bGF0aXZlX3N0YXRpc3RpY3MocHJpdiwgKF9fbGUzMiAqKSZwa3QtPnUuc3RhdHNfYnQpOworCWlmIChsZW4gPT0gc2l6ZW9mKHN0cnVjdCBpd2xfYnRfbm90aWZfc3RhdGlzdGljcykpIHsKKwkJc3RydWN0IGl3bF9idF9ub3RpZl9zdGF0aXN0aWNzICpzdGF0czsKKwkJc3RhdHMgPSAmcGt0LT51LnN0YXRzX2J0OworCQlmbGFnID0gJnN0YXRzLT5mbGFnOworCQljb21tb24gPSAmc3RhdHMtPmdlbmVyYWwuY29tbW9uOworCQlyeF9ub25fcGh5ID0gJnN0YXRzLT5yeC5nZW5lcmFsLmNvbW1vbjsKKwkJcnhfb2ZkbSA9ICZzdGF0cy0+cngub2ZkbTsKKwkJcnhfb2ZkbV9odCA9ICZzdGF0cy0+cngub2ZkbV9odDsKKwkJcnhfY2NrID0gJnN0YXRzLT5yeC5jY2s7CisJCXR4ID0gJnN0YXRzLT50eDsKKwkJYnRfYWN0aXZpdHkgPSAmc3RhdHMtPmdlbmVyYWwuYWN0aXZpdHk7CisKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVR0ZTCisJCS8qIGhhbmRsZSB0aGlzIGV4Y2VwdGlvbiBkaXJlY3RseSAqLworCQlwcml2LT5zdGF0aXN0aWNzLm51bV9idF9raWxscyA9IHN0YXRzLT5yeC5nZW5lcmFsLm51bV9idF9raWxsczsKKwkJbGUzMl9hZGRfY3B1KCZwcml2LT5zdGF0aXN0aWNzLmFjY3VtX251bV9idF9raWxscywKKwkJCSAgICAgbGUzMl90b19jcHUoc3RhdHMtPnJ4LmdlbmVyYWwubnVtX2J0X2tpbGxzKSk7CisjZW5kaWYKKwl9IGVsc2UgaWYgKGxlbiA9PSBzaXplb2Yoc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzKSkgeworCQlzdHJ1Y3QgaXdsX25vdGlmX3N0YXRpc3RpY3MgKnN0YXRzOworCQlzdGF0cyA9ICZwa3QtPnUuc3RhdHM7CisJCWZsYWcgPSAmc3RhdHMtPmZsYWc7CisJCWNvbW1vbiA9ICZzdGF0cy0+Z2VuZXJhbC5jb21tb247CisJCXJ4X25vbl9waHkgPSAmc3RhdHMtPnJ4LmdlbmVyYWw7CisJCXJ4X29mZG0gPSAmc3RhdHMtPnJ4Lm9mZG07CisJCXJ4X29mZG1faHQgPSAmc3RhdHMtPnJ4Lm9mZG1faHQ7CisJCXJ4X2NjayA9ICZzdGF0cy0+cnguY2NrOworCQl0eCA9ICZzdGF0cy0+dHg7CisJCWJ0X2FjdGl2aXR5ID0gTlVMTDsKIAl9IGVsc2UgewotCQlJV0xfREVCVUdfUlgocHJpdiwKLQkJCSAgICAgIlN0YXRpc3RpY3Mgbm90aWZpY2F0aW9uIHJlY2VpdmVkICglZCB2cyAlZCkuXG4iLAotCQkJICAgICAoaW50KXNpemVvZihzdHJ1Y3QgaXdsX25vdGlmX3N0YXRpc3RpY3MpLAotCQkJICAgICBsZTMyX3RvX2NwdShwa3QtPmxlbl9uX2ZsYWdzKSAmCi0JCQkgICAgIEZIX1JTQ1NSX0ZSQU1FX1NJWkVfTVNLKTsKLQotCQljaGFuZ2UgPSAoKHByaXYtPl9hZ24uc3RhdGlzdGljcy5nZW5lcmFsLmNvbW1vbi50ZW1wZXJhdHVyZSAhPQotCQkJICAgcGt0LT51LnN0YXRzLmdlbmVyYWwuY29tbW9uLnRlbXBlcmF0dXJlKSB8fAotCQkJICAgKChwcml2LT5fYWduLnN0YXRpc3RpY3MuZmxhZyAmCi0JCQkgICBTVEFUSVNUSUNTX1JFUExZX0ZMR19IVDQwX01PREVfTVNLKSAhPQotCQkJICAgKHBrdC0+dS5zdGF0cy5mbGFnICYKLQkJCSAgIFNUQVRJU1RJQ1NfUkVQTFlfRkxHX0hUNDBfTU9ERV9NU0spKSk7Ci0KLQkJaXdsX2FjY3VtdWxhdGl2ZV9zdGF0aXN0aWNzKHByaXYsIChfX2xlMzIgKikmcGt0LT51LnN0YXRzKTsKKwkJV0FSTl9PTkNFKDEsICJsZW4gJWQgZG9lc24ndCBtYXRjaCBCVCAoJXp1KSBvciBub3JtYWwgKCV6dSlcbiIsCisJCQkgIGxlbiwgc2l6ZW9mKHN0cnVjdCBpd2xfYnRfbm90aWZfc3RhdGlzdGljcyksCisJCQkgIHNpemVvZihzdHJ1Y3QgaXdsX25vdGlmX3N0YXRpc3RpY3MpKTsKKwkJcmV0dXJuOwogCX0KIAotCWl3bF9yZWNvdmVyX2Zyb21fc3RhdGlzdGljcyhwcml2LCBwa3QpOworCWNoYW5nZSA9IGNvbW1vbi0+dGVtcGVyYXR1cmUgIT0gcHJpdi0+c3RhdGlzdGljcy5jb21tb24udGVtcGVyYXR1cmUgfHwKKwkJICgqZmxhZyAmIFNUQVRJU1RJQ1NfUkVQTFlfRkxHX0hUNDBfTU9ERV9NU0spICE9CisJCSAocHJpdi0+c3RhdGlzdGljcy5mbGFnICYgU1RBVElTVElDU19SRVBMWV9GTEdfSFQ0MF9NT0RFX01TSyk7CisKKwlpd2xfYWNjdW11bGF0aXZlX3N0YXRpc3RpY3MocHJpdiwgY29tbW9uLCByeF9ub25fcGh5LCByeF9vZmRtLAorCQkJCSAgICByeF9vZmRtX2h0LCByeF9jY2ssIHR4LCBidF9hY3Rpdml0eSk7CisKKwlpd2xfcmVjb3Zlcl9mcm9tX3N0YXRpc3RpY3MocHJpdiwgcnhfb2ZkbSwgcnhfb2ZkbV9odCwgdHgsIHN0YW1wKTsKKworCXByaXYtPnN0YXRpc3RpY3MuZmxhZyA9ICpmbGFnOworCW1lbWNweSgmcHJpdi0+c3RhdGlzdGljcy5jb21tb24sIGNvbW1vbiwgc2l6ZW9mKCpjb21tb24pKTsKKwltZW1jcHkoJnByaXYtPnN0YXRpc3RpY3Mucnhfbm9uX3BoeSwgcnhfbm9uX3BoeSwgc2l6ZW9mKCpyeF9ub25fcGh5KSk7CisJbWVtY3B5KCZwcml2LT5zdGF0aXN0aWNzLnJ4X29mZG0sIHJ4X29mZG0sIHNpemVvZigqcnhfb2ZkbSkpOworCW1lbWNweSgmcHJpdi0+c3RhdGlzdGljcy5yeF9vZmRtX2h0LCByeF9vZmRtX2h0LCBzaXplb2YoKnJ4X29mZG1faHQpKTsKKwltZW1jcHkoJnByaXYtPnN0YXRpc3RpY3MucnhfY2NrLCByeF9jY2ssIHNpemVvZigqcnhfY2NrKSk7CisJbWVtY3B5KCZwcml2LT5zdGF0aXN0aWNzLnR4LCB0eCwgc2l6ZW9mKCp0eCkpOworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHRlMKKwlpZiAoYnRfYWN0aXZpdHkpCisJCW1lbWNweSgmcHJpdi0+c3RhdGlzdGljcy5idF9hY3Rpdml0eSwgYnRfYWN0aXZpdHksCisJCQlzaXplb2YoKmJ0X2FjdGl2aXR5KSk7CisjZW5kaWYKKworCXByaXYtPnJ4X3N0YXRpc3RpY3NfamlmZmllcyA9IHN0YW1wOwogCiAJc2V0X2JpdChTVEFUVVNfU1RBVElTVElDUywgJnByaXYtPnN0YXR1cyk7CiAKQEAgLTcwOCwxOCArNjc2LDEyIEBACiAKIAlpZiAobGUzMl90b19jcHUocGt0LT51LnN0YXRzLmZsYWcpICYgVUNPREVfU1RBVElTVElDU19DTEVBUl9NU0spIHsKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVR0ZTCi0JCW1lbXNldCgmcHJpdi0+X2Fnbi5hY2N1bV9zdGF0aXN0aWNzLCAwLAotCQkJc2l6ZW9mKHN0cnVjdCBpd2xfbm90aWZfc3RhdGlzdGljcykpOwotCQltZW1zZXQoJnByaXYtPl9hZ24uZGVsdGFfc3RhdGlzdGljcywgMCwKLQkJCXNpemVvZihzdHJ1Y3QgaXdsX25vdGlmX3N0YXRpc3RpY3MpKTsKLQkJbWVtc2V0KCZwcml2LT5fYWduLm1heF9kZWx0YSwgMCwKLQkJCXNpemVvZihzdHJ1Y3QgaXdsX25vdGlmX3N0YXRpc3RpY3MpKTsKLQkJbWVtc2V0KCZwcml2LT5fYWduLmFjY3VtX3N0YXRpc3RpY3NfYnQsIDAsCi0JCQlzaXplb2Yoc3RydWN0IGl3bF9idF9ub3RpZl9zdGF0aXN0aWNzKSk7Ci0JCW1lbXNldCgmcHJpdi0+X2Fnbi5kZWx0YV9zdGF0aXN0aWNzX2J0LCAwLAotCQkJc2l6ZW9mKHN0cnVjdCBpd2xfYnRfbm90aWZfc3RhdGlzdGljcykpOwotCQltZW1zZXQoJnByaXYtPl9hZ24ubWF4X2RlbHRhX2J0LCAwLAotCQkJc2l6ZW9mKHN0cnVjdCBpd2xfYnRfbm90aWZfc3RhdGlzdGljcykpOworCQltZW1zZXQoJnByaXYtPmFjY3VtX3N0YXRzLCAwLAorCQkJc2l6ZW9mKHByaXYtPmFjY3VtX3N0YXRzKSk7CisJCW1lbXNldCgmcHJpdi0+ZGVsdGFfc3RhdHMsIDAsCisJCQlzaXplb2YocHJpdi0+ZGVsdGFfc3RhdHMpKTsKKwkJbWVtc2V0KCZwcml2LT5tYXhfZGVsdGFfc3RhdHMsIDAsCisJCQlzaXplb2YocHJpdi0+bWF4X2RlbHRhX3N0YXRzKSk7CiAjZW5kaWYKIAkJSVdMX0RFQlVHX1JYKHByaXYsICJTdGF0aXN0aWNzIGhhdmUgYmVlbiBjbGVhcmVkXG4iKTsKIAl9CkBAIC04NzMsNiArODM1LDcgQEAKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCV9fbGUxNiBmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKKwlzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4OwogCiAJLyogV2Ugb25seSBwcm9jZXNzIGRhdGEgcGFja2V0cyBpZiB0aGUgaW50ZXJmYWNlIGlzIG9wZW4gKi8KIAlpZiAodW5saWtlbHkoIXByaXYtPmlzX29wZW4pKSB7CkBAIC04ODIsNyArODQ1LDcgQEAKIAl9CiAKIAkvKiBJbiBjYXNlIG9mIEhXIGFjY2VsZXJhdGVkIGNyeXB0byBhbmQgYmFkIGRlY3J5cHRpb24sIGRyb3AgKi8KLQlpZiAoIXByaXYtPmNmZy0+bW9kX3BhcmFtcy0+c3dfY3J5cHRvICYmCisJaWYgKCFpd2xhZ25fbW9kX3BhcmFtcy5zd19jcnlwdG8gJiYKIAkgICAgaXdsX3NldF9kZWNyeXB0ZWRfZmxhZyhwcml2LCBoZHIsIGFtcGR1X3N0YXR1cywgc3RhdHMpKQogCQlyZXR1cm47CiAKQEAgLTg5NSwxMCArODU4LDI5IEBACiAJc2tiX2FkZF9yeF9mcmFnKHNrYiwgMCwgcnhiLT5wYWdlLCAodm9pZCAqKWhkciAtIHJ4Yl9hZGRyKHJ4YiksIGxlbik7CiAKIAlpd2xfdXBkYXRlX3N0YXRzKHByaXYsIGZhbHNlLCBmYywgbGVuKTsKKworCS8qCisJKiBXYWtlIGFueSBxdWV1ZXMgdGhhdCB3ZXJlIHN0b3BwZWQgZHVlIHRvIGEgcGFzc2l2ZSBjaGFubmVsIHR4CisJKiBmYWlsdXJlLiBUaGlzIGNhbiBoYXBwZW4gYmVjYXVzZSB0aGUgcmVndWxhdG9yeSBlbmZvcmNlbWVudCBpbgorCSogdGhlIGRldmljZSB3YWl0cyBmb3IgYSBiZWFjb24gYmVmb3JlIGFsbG93aW5nIHRyYW5zbWlzc2lvbiwKKwkqIHNvbWV0aW1lcyBldmVuIGFmdGVyIGFscmVhZHkgaGF2aW5nIHRyYW5zbWl0dGVkIGZyYW1lcyBmb3IgdGhlCisJKiBhc3NvY2lhdGlvbiBiZWNhdXNlIHRoZSBuZXcgUlhPTiBtYXkgcmVzZXQgdGhlIGluZm9ybWF0aW9uLgorCSovCisJaWYgKHVubGlrZWx5KGllZWU4MDIxMV9pc19iZWFjb24oZmMpKSkgeworCQlmb3JfZWFjaF9jb250ZXh0KHByaXYsIGN0eCkgeworCQkJaWYgKCFjdHgtPmxhc3RfdHhfcmVqZWN0ZWQpCisJCQkJY29udGludWU7CisJCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGhkci0+YWRkcjMsCisJCQkJCSAgICAgICBjdHgtPmFjdGl2ZS5ic3NpZF9hZGRyKSkKKwkJCQljb250aW51ZTsKKwkJCWN0eC0+bGFzdF90eF9yZWplY3RlZCA9IGZhbHNlOworCQkJaXdsX3dha2VfYW55X3F1ZXVlKHByaXYsIGN0eCk7CisJCX0KKwl9CisKIAltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksIHN0YXRzLCBzaXplb2YoKnN0YXRzKSk7CiAKIAlpZWVlODAyMTFfcngocHJpdi0+aHcsIHNrYik7Ci0JcHJpdi0+YWxsb2NfcnhiX3BhZ2UtLTsKIAlyeGItPnBhZ2UgPSBOVUxMOwogfQogCkBAIC0xMDkzLDcgKzEwNzUsNiBAQAogCiAJaGFuZGxlcnMgPSBwcml2LT5yeF9oYW5kbGVyczsKIAotCWhhbmRsZXJzW1JFUExZX0FMSVZFXQkJCT0gaXdsX3J4X3JlcGx5X2FsaXZlOwogCWhhbmRsZXJzW1JFUExZX0VSUk9SXQkJCT0gaXdsX3J4X3JlcGx5X2Vycm9yOwogCWhhbmRsZXJzW0NIQU5ORUxfU1dJVENIX05PVElGSUNBVElPTl0JPSBpd2xfcnhfY3NhOwogCWhhbmRsZXJzW1NQRUNUUlVNX01FQVNVUkVfTk9USUZJQ0FUSU9OXQk9IGl3bF9yeF9zcGVjdHJ1bV9tZWFzdXJlX25vdGlmOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc2Nhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc2Nhbi5jCmluZGV4IDkxNGM3N2UuLmQ2MGQ2MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNjYW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zY2FuLmMKQEAgLTIsNyArMiw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNwZWN0cnVtLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zcGVjdHJ1bS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGNhMGI1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNwZWN0cnVtLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAotICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKLSAqCi0gKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKLSAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqICBJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KLSAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYgX19pd2xfc3BlY3RydW1faF9fCi0jZGVmaW5lIF9faXdsX3NwZWN0cnVtX2hfXwotZW51bSB7CQkJCS8qIGllZWU4MDIxMV9iYXNpY19yZXBvcnQubWFwICovCi0JSUVFRTgwMjExX0JBU0lDX01BUF9CU1MgPSAoMSA8PCAwKSwKLQlJRUVFODAyMTFfQkFTSUNfTUFQX09GRE0gPSAoMSA8PCAxKSwKLQlJRUVFODAyMTFfQkFTSUNfTUFQX1VOSURFTlRJRklFRCA9ICgxIDw8IDIpLAotCUlFRUU4MDIxMV9CQVNJQ19NQVBfUkFEQVIgPSAoMSA8PCAzKSwKLQlJRUVFODAyMTFfQkFTSUNfTUFQX1VOTUVBU1VSRUQgPSAoMSA8PCA0KSwKLQkvKiBCaXRzIDUtNyBhcmUgcmVzZXJ2ZWQgKi8KLQotfTsKLXN0cnVjdCBpZWVlODAyMTFfYmFzaWNfcmVwb3J0IHsKLQl1OCBjaGFubmVsOwotCV9fbGU2NCBzdGFydF90aW1lOwotCV9fbGUxNiBkdXJhdGlvbjsKLQl1OCBtYXA7Ci19IF9fcGFja2VkOwotCi1lbnVtIHsJCQkJLyogaWVlZTgwMjExX21lYXN1cmVtZW50X3JlcXVlc3QubW9kZSAqLwotCS8qIEJpdCAwIGlzIHJlc2VydmVkICovCi0JSUVFRTgwMjExX01FQVNVUkVNRU5UX0VOQUJMRSA9ICgxIDw8IDEpLAotCUlFRUU4MDIxMV9NRUFTVVJFTUVOVF9SRVFVRVNUID0gKDEgPDwgMiksCi0JSUVFRTgwMjExX01FQVNVUkVNRU5UX1JFUE9SVCA9ICgxIDw8IDMpLAotCS8qIEJpdHMgNC03IGFyZSByZXNlcnZlZCAqLwotfTsKLQotZW51bSB7Ci0JSUVFRTgwMjExX1JFUE9SVF9CQVNJQyA9IDAsCS8qIHJlcXVpcmVkICovCi0JSUVFRTgwMjExX1JFUE9SVF9DQ0EgPSAxLAkvKiBvcHRpb25hbCAqLwotCUlFRUU4MDIxMV9SRVBPUlRfUlBJID0gMiwJLyogb3B0aW9uYWwgKi8KLQkvKiAzLTI1NSByZXNlcnZlZCAqLwotfTsKLQotc3RydWN0IGllZWU4MDIxMV9tZWFzdXJlbWVudF9wYXJhbXMgewotCXU4IGNoYW5uZWw7Ci0JX19sZTY0IHN0YXJ0X3RpbWU7Ci0JX19sZTE2IGR1cmF0aW9uOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgewotCXU4IGlkOwotCXU4IGxlbjsKLQl1OCBkYXRhWzBdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGllZWU4MDIxMV9tZWFzdXJlbWVudF9yZXF1ZXN0IHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCBpZTsKLQl1OCB0b2tlbjsKLQl1OCBtb2RlOwotCXU4IHR5cGU7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZWFzdXJlbWVudF9wYXJhbXMgcGFyYW1zWzBdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGllZWU4MDIxMV9tZWFzdXJlbWVudF9yZXBvcnQgewotCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IGllOwotCXU4IHRva2VuOwotCXU4IG1vZGU7Ci0JdTggdHlwZTsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfYmFzaWNfcmVwb3J0IGJhc2ljWzBdOwotCX0gdTsKLX0gX19wYWNrZWQ7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYwppbmRleCBiYzkwYTEyLi4zYzhjZWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdCwgYXMgd2VsbAogICogYXMgcG9ydGlvbnMgb2YgdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgpAQCAtMjMzLDcgKzIzMyw2IEBACiAJc3RydWN0IGl3bF9zdGF0aW9uX2VudHJ5ICpzdGF0aW9uOwogCWludCBpOwogCXU4IHN0YV9pZCA9IElXTF9JTlZBTElEX1NUQVRJT047Ci0JdTE2IHJhdGU7CiAKIAlpZiAoaXNfYXApCiAJCXN0YV9pZCA9IGN0eC0+YXBfc3RhX2lkOwpAQCAtMzA2LDEyICszMDUsNiBAQAogCSAqLwogCWl3bF9zZXRfaHRfYWRkX3N0YXRpb24ocHJpdiwgc3RhX2lkLCBzdGEsIGN0eCk7CiAKLQkvKiAzOTQ1IG9ubHkgKi8KLQlyYXRlID0gKHByaXYtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikgPwotCQlJV0xfUkFURV82TV9QTENQIDogSVdMX1JBVEVfMU1fUExDUDsKLQkvKiBUdXJuIG9uIGJvdGggYW50ZW5uYXMgZm9yIHRoZSBzdGF0aW9uLi4uICovCi0Jc3RhdGlvbi0+c3RhLnJhdGVfbl9mbGFncyA9IGNwdV90b19sZTE2KHJhdGUgfCBSQVRFX01DU19BTlRfQUJfTVNLKTsKLQogCXJldHVybiBzdGFfaWQ7CiAKIH0KQEAgLTUwMSw3ICs0OTQsOCBAQAogCiAJcHJpdi0+bnVtX3N0YXRpb25zLS07CiAKLQlCVUdfT04ocHJpdi0+bnVtX3N0YXRpb25zIDwgMCk7CisJaWYgKFdBUk5fT04ocHJpdi0+bnVtX3N0YXRpb25zIDwgMCkpCisJCXByaXYtPm51bV9zdGF0aW9ucyA9IDA7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCkBAIC02ODYsNyArNjgwLDggQEAKIAogCQlwcml2LT5zdGF0aW9uc1tpXS51c2VkICY9IH5JV0xfU1RBX1VDT0RFX0FDVElWRTsKIAkJcHJpdi0+bnVtX3N0YXRpb25zLS07Ci0JCUJVR19PTihwcml2LT5udW1fc3RhdGlvbnMgPCAwKTsKKwkJaWYgKFdBUk5fT04ocHJpdi0+bnVtX3N0YXRpb25zIDwgMCkpCisJCQlwcml2LT5udW1fc3RhdGlvbnMgPSAwOwogCQlrZnJlZShwcml2LT5zdGF0aW9uc1tpXS5scSk7CiAJCXByaXYtPnN0YXRpb25zW2ldLmxxID0gTlVMTDsKIAl9CkBAIC03ODIsNyArNzc3LDggQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3Nfc3Bpbik7CiAKIAlpd2xfZHVtcF9scV9jbWQocHJpdiwgbHEpOwotCUJVR19PTihpbml0ICYmIChjbWQuZmxhZ3MgJiBDTURfQVNZTkMpKTsKKwlpZiAoV0FSTl9PTihpbml0ICYmIChjbWQuZmxhZ3MgJiBDTURfQVNZTkMpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoaXNfbHFfdGFibGVfdmFsaWQocHJpdiwgY3R4LCBscSkpCiAJCXJldCA9IGl3bF9zZW5kX2NtZChwcml2LCAmY21kKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmgKaW5kZXggMjA2ZjFlMS4uZmY2NDAyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN2LW9wZW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN2LW9wZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWI2Njk2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3Ytb3Blbi5jCkBAIC0wLDAgKzEsNDY5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVGhpcyBmaWxlIGlzIHByb3ZpZGVkIHVuZGVyIGEgZHVhbCBCU0QvR1BMdjIgbGljZW5zZS4gIFdoZW4gdXNpbmcgb3IKKyAqIHJlZGlzdHJpYnV0aW5nIHRoaXMgZmlsZSwgeW91IG1heSBkbyBzbyB1bmRlciBlaXRoZXIgbGljZW5zZS4KKyAqCisgKiBHUEwgTElDRU5TRSBTVU1NQVJZCisgKgorICogQ29weXJpZ2h0KGMpIDIwMTAgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsCisgKiBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgorICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuR1BMLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiAgSW50ZWwgTGludXggV2lyZWxlc3MgPGlsd0BsaW51eC5pbnRlbC5jb20+CisgKiBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisgKgorICogQlNEIExJQ0VOU0UKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAxMCAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAgKiBOZWl0aGVyIHRoZSBuYW1lIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgorCisKKyNpbmNsdWRlICJpd2wtZGV2LmgiCisjaW5jbHVkZSAiaXdsLWNvcmUuaCIKKyNpbmNsdWRlICJpd2wtZGVidWcuaCIKKyNpbmNsdWRlICJpd2wtZmguaCIKKyNpbmNsdWRlICJpd2wtaW8uaCIKKyNpbmNsdWRlICJpd2wtYWduLmgiCisjaW5jbHVkZSAiaXdsLXRlc3Rtb2RlLmgiCisKKworLyogVGhlIFRMVnMgdXNlZCBpbiB0aGUgZ25sIG1lc3NhZ2UgcG9saWN5IGJldHdlZW4gdGhlIGtlcm5lbCBtb2R1bGUgYW5kCisgKiB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uLiBpd2xfdGVzdG1vZGVfZ25sX21zZ19wb2xpY3kgaXMgdG8gYmUgY2FycmllZAorICogdGhyb3VnaCB0aGUgTkw4MDIxMV9DTURfVEVTVE1PREUgY2hhbm5lbCByZWd1bGF0ZWQgYnkgbmw4MDIxMS4KKyAqIFNlZSBpd2wtdGVzdG1vZGUuaAorICovCitzdGF0aWMKK3N0cnVjdCBubGFfcG9saWN5IGl3bF90ZXN0bW9kZV9nbmxfbXNnX3BvbGljeVtJV0xfVE1fQVRUUl9NQVhdID0geworCVtJV0xfVE1fQVRUUl9DT01NQU5EXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LAorCisJW0lXTF9UTV9BVFRSX1VDT0RFX0NNRF9JRF0gPSB7IC50eXBlID0gTkxBX1U4LCB9LAorCVtJV0xfVE1fQVRUUl9VQ09ERV9DTURfREFUQV0gPSB7IC50eXBlID0gTkxBX1VOU1BFQywgfSwKKworCVtJV0xfVE1fQVRUUl9SRUdfT0ZGU0VUXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LAorCVtJV0xfVE1fQVRUUl9SRUdfVkFMVUU4XSA9IHsgLnR5cGUgPSBOTEFfVTgsIH0sCisJW0lXTF9UTV9BVFRSX1JFR19WQUxVRTMyXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LAorCisJW0lXTF9UTV9BVFRSX1NZTkNfUlNQXSA9IHsgLnR5cGUgPSBOTEFfVU5TUEVDLCB9LAorCVtJV0xfVE1fQVRUUl9VQ09ERV9SWF9QS1RdID0geyAudHlwZSA9IE5MQV9VTlNQRUMsIH0sCit9OworCisvKgorICogU2VlIHRoZSBzdHJ1Y3QgaXdsX3J4X3BhY2tldCBpbiBpd2wtY29tbWFuZHMuaCBmb3IgdGhlIGZvcm1hdCBvZiB0aGUKKyAqIHJlY2VpdmVkIGV2ZW50cyBmcm9tIHRoZSBkZXZpY2UKKyAqLworc3RhdGljIGlubGluZSBpbnQgZ2V0X2V2ZW50X2xlbmd0aChzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKK3sKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gcnhiX2FkZHIocnhiKTsKKwlpZiAocGt0KQorCQlyZXR1cm4gbGUzMl90b19jcHUocGt0LT5sZW5fbl9mbGFncykgJiBGSF9SU0NTUl9GUkFNRV9TSVpFX01TSzsKKwllbHNlCisJCXJldHVybiAwOworfQorCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIG11bHRpY2FzdHMgdGhlIHNwb250YW5lb3VzIG1lc3NhZ2VzIGZyb20gdGhlIGRldmljZSB0byB0aGUKKyAqIHVzZXIgc3BhY2UuIEl0IGlzIGludm9rZWQgd2hlbmV2ZXIgdGhlcmUgaXMgYSByZWNlaXZlZCBtZXNzYWdlcworICogZnJvbSB0aGUgZGV2aWNlLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoaW4gdGhlIElTUiBvZiB0aGUgcnggaGFuZGxlcnMKKyAqIGluIGl3bGFnbiBkcml2ZXIuCisgKgorICogVGhlIHBhcnNpbmcgb2YgdGhlIG1lc3NhZ2UgY29udGVudCBpcyBsZWZ0IHRvIHRoZSB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uLAorICogVGhlIG1lc3NhZ2UgY29udGVudCBpcyB0cmVhdGVkIGFzIHVuYXR0YWNrZWQgcmF3IGRhdGEgYW5kIGlzIGVuY2Fwc3VsYXRlZAorICogd2l0aCBJV0xfVE1fQVRUUl9VQ09ERV9SWF9QS1QgbXVsdGljYXN0aW5nIHRvIHRoZSB1c2VyIHNwYWNlLgorICoKKyAqIEBwcml2OiB0aGUgaW5zdGFuY2Ugb2YgaXdsd2lmaSBkZXZpY2UKKyAqIEByeGI6IHBvaW50ZXIgdG8gcnggZGF0YSBjb250ZW50IHJlY2VpdmVkIGJ5IHRoZSBJU1IKKyAqCisgKiBTZWUgdGhlIG1lc3NhZ2UgcG9saWNpZXMgYW5kIFRMVnMgaW4gaXdsX3Rlc3Rtb2RlX2dubF9tc2dfcG9saWN5W10uCisgKiBGb3IgdGhlIG1lc3NhZ2VzIG11bHRpY2FzdGluZyB0byB0aGUgdXNlciBhcHBsaWNhdGlvbiwgdGhlIG1hbmRhdG9yeQorICogVExWIGZpZWxkcyBhcmUgOgorICoJSVdMX1RNX0FUVFJfQ09NTUFORCBtdXN0IGJlIElXTF9UTV9DTURfREVWMkFQUF9VQ09ERV9SWF9QS1QKKyAqCUlXTF9UTV9BVFRSX1VDT0RFX1JYX1BLVCBmb3IgY2FycnlpbmcgdGhlIG1lc3NhZ2UgY29udGVudAorICovCisKK3N0YXRpYyB2b2lkIGl3bF90ZXN0bW9kZV91Y29kZV9yeF9wa3Qoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCXN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcHJpdi0+aHc7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl2b2lkICpkYXRhOworCWludCBsZW5ndGg7CisKKwlkYXRhID0gKHZvaWQgKilyeGJfYWRkcihyeGIpOworCWxlbmd0aCA9IGdldF9ldmVudF9sZW5ndGgocnhiKTsKKworCWlmICghZGF0YSB8fCBsZW5ndGggPT0gMCkKKwkJcmV0dXJuOworCisJc2tiID0gY2ZnODAyMTFfdGVzdG1vZGVfYWxsb2NfZXZlbnRfc2tiKGh3LT53aXBoeSwgMjAgKyBsZW5ndGgsCisJCQkJCQkJCUdGUF9BVE9NSUMpOworCWlmIChza2IgPT0gTlVMTCkgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkJICJSdW4gb3V0IG9mIG1lbW9yeSBmb3IgbWVzc2FnZXMgdG8gdXNlciBzcGFjZSA/XG4iKTsKKwkJcmV0dXJuOworCX0KKwlOTEFfUFVUX1UzMihza2IsIElXTF9UTV9BVFRSX0NPTU1BTkQsIElXTF9UTV9DTURfREVWMkFQUF9VQ09ERV9SWF9QS1QpOworCU5MQV9QVVQoc2tiLCBJV0xfVE1fQVRUUl9VQ09ERV9SWF9QS1QsIGxlbmd0aCwgZGF0YSk7CisJY2ZnODAyMTFfdGVzdG1vZGVfZXZlbnQoc2tiLCBHRlBfQVRPTUlDKTsKKwlyZXR1cm47CisKK25sYV9wdXRfZmFpbHVyZToKKwlrZnJlZV9za2Ioc2tiKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiT3VjaCwgb3ZlcnJhbiBidWZmZXIsIGNoZWNrIGFsbG9jYXRpb24hXG4iKTsKK30KKwordm9pZCBpd2xfdGVzdG1vZGVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJcHJpdi0+cHJlX3J4X2hhbmRsZXIgPSBpd2xfdGVzdG1vZGVfdWNvZGVfcnhfcGt0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSB1c2VyIGFwcGxpY2F0aW9uIGNvbW1hbmRzIHRvIHRoZSB1Y29kZS4KKyAqCisgKiBJdCByZXRyaWV2ZXMgdGhlIG1hbmRhdG9yeSBmaWVsZHMgSVdMX1RNX0FUVFJfVUNPREVfQ01EX0lEIGFuZAorICogSVdMX1RNX0FUVFJfVUNPREVfQ01EX0RBVEEgYW5kIGNhbGxzIHRvIHRoZSBoYW5kbGVyIHRvIHNlbmQgdGhlCisgKiBob3N0IGNvbW1hbmQgdG8gdGhlIHVjb2RlLgorICoKKyAqIElmIGFueSBtYW5kYXRvcnkgZmllbGQgaXMgbWlzc2luZywgLUVOT01TRyBpcyByZXBsaWVkIHRvIHRoZSB1c2VyIHNwYWNlCisgKiBhcHBsaWNhdGlvbjsgb3RoZXJ3aXNlLCB0aGUgYWN0dWFsIGV4ZWN1dGlvbiByZXN1bHQgb2YgdGhlIGhvc3QgY29tbWFuZCB0bworICogdWNvZGUgaXMgcmVwbGllZC4KKyAqCisgKiBAaHc6IGllZWU4MDIxMV9odyBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSBkZXZpY2UKKyAqIEB0YjogZ25sIG1lc3NhZ2UgZmllbGRzIGZyb20gdGhlIHVzZXIgc3BhY2UKKyAqLworc3RhdGljIGludCBpd2xfdGVzdG1vZGVfdWNvZGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBubGF0dHIgKip0YikKK3sKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZDsKKworCW1lbXNldCgmY21kLCAwLCBzaXplb2Yoc3RydWN0IGl3bF9ob3N0X2NtZCkpOworCisJaWYgKCF0YltJV0xfVE1fQVRUUl9VQ09ERV9DTURfSURdIHx8CisJICAgICF0YltJV0xfVE1fQVRUUl9VQ09ERV9DTURfREFUQV0pIHsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwKKwkJCSJFcnJvciBmaW5kaW5nIHVjb2RlIGNvbW1hbmQgbWFuZGF0b3J5IGZpZWxkc1xuIik7CisJCXJldHVybiAtRU5PTVNHOworCX0KKworCWNtZC5pZCA9IG5sYV9nZXRfdTgodGJbSVdMX1RNX0FUVFJfVUNPREVfQ01EX0lEXSk7CisJY21kLmRhdGEgPSBubGFfZGF0YSh0YltJV0xfVE1fQVRUUl9VQ09ERV9DTURfREFUQV0pOworCWNtZC5sZW4gPSBubGFfbGVuKHRiW0lXTF9UTV9BVFRSX1VDT0RFX0NNRF9EQVRBXSk7CisJSVdMX0lORk8ocHJpdiwgInRlc3Rtb2RlIHVjb2RlIGNvbW1hbmQgSUQgMHgleCwgZmxhZ3MgMHgleCwiCisJCQkJIiBsZW4gJWRcbiIsIGNtZC5pZCwgY21kLmZsYWdzLCBjbWQubGVuKTsKKwkvKiBvaywgbGV0J3Mgc3VibWl0IHRoZSBjb21tYW5kIHRvIHVjb2RlICovCisJcmV0dXJuIGl3bF9zZW5kX2NtZChwcml2LCAmY21kKTsKK30KKworCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSB1c2VyIGFwcGxpY2F0aW9uIGNvbW1hbmRzIGZvciByZWdpc3RlciBhY2Nlc3MuCisgKgorICogSXQgcmV0cmlldmVzIGNvbW1hbmQgSUQgY2FycmllZCB3aXRoIElXTF9UTV9BVFRSX0NPTU1BTkQgYW5kIGNhbGxzIHRvIHRoZQorICogaGFuZGxlcnMgcmVzcGVjdGl2ZWx5LgorICoKKyAqIElmIGl0J3MgYW4gdW5rbm93biBjb21tZG4gSUQsIC1FTk9TWVMgaXMgcmV0dXJuZWQ7IG9yIC1FTk9NU0cgaWYgdGhlCisgKiBtYW5kYXRvcnkgZmllbGRzKElXTF9UTV9BVFRSX1JFR19PRkZTRVQsSVdMX1RNX0FUVFJfUkVHX1ZBTFVFMzIsCisgKiBJV0xfVE1fQVRUUl9SRUdfVkFMVUU4KSBhcmUgbWlzc2luZzsgT3RoZXJ3aXNlIDAgaXMgcmVwbGllZCBpbmRpY2F0aW5nCisgKiB0aGUgc3VjY2VzcyBvZiB0aGUgY29tbWFuZCBleGVjdXRpb24uCisgKgorICogSWYgSVdMX1RNX0FUVFJfQ09NTUFORCBpcyBJV0xfVE1fQ01EX0FQUDJERVZfUkVHX1JFQUQzMiwgdGhlIHJlZ2lzdGVyIHJlYWQKKyAqIHZhbHVlIGlzIHJldHVybmVkIHdpdGggSVdMX1RNX0FUVFJfUkVHX1ZBTFVFMzIuCisgKgorICogQGh3OiBpZWVlODAyMTFfaHcgb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgZGV2aWNlCisgKiBAdGI6IGdubCBtZXNzYWdlIGZpZWxkcyBmcm9tIHRoZSB1c2VyIHNwYWNlCisgKi8KK3N0YXRpYyBpbnQgaXdsX3Rlc3Rtb2RlX3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IG5sYXR0ciAqKnRiKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXUzMiBvZnMsIHZhbDMyOworCXU4IHZhbDg7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgc3RhdHVzID0gMDsKKworCWlmICghdGJbSVdMX1RNX0FUVFJfUkVHX09GRlNFVF0pIHsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkVycm9yIGZpbmRpbmcgcmVnaXN0ZXIgb2Zmc2V0XG4iKTsKKwkJcmV0dXJuIC1FTk9NU0c7CisJfQorCW9mcyA9IG5sYV9nZXRfdTMyKHRiW0lXTF9UTV9BVFRSX1JFR19PRkZTRVRdKTsKKwlJV0xfSU5GTyhwcml2LCAidGVzdG1vZGUgcmVnaXN0ZXIgYWNjZXNzIGNvbW1hbmQgb2Zmc2V0IDB4JXhcbiIsIG9mcyk7CisKKwlzd2l0Y2ggKG5sYV9nZXRfdTMyKHRiW0lXTF9UTV9BVFRSX0NPTU1BTkRdKSkgeworCWNhc2UgSVdMX1RNX0NNRF9BUFAyREVWX1JFR19SRUFEMzI6CisJCXZhbDMyID0gaXdsX3JlYWQzMihwcml2LCBvZnMpOworCQlJV0xfSU5GTyhwcml2LCAiMzJiaXQgdmFsdWUgdG8gcmVhZCAweCV4XG4iLCB2YWwzMik7CisKKwkJc2tiID0gY2ZnODAyMTFfdGVzdG1vZGVfYWxsb2NfcmVwbHlfc2tiKGh3LT53aXBoeSwgMjApOworCQlpZiAoIXNrYikgeworCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkVycm9yIGFsbG9jYXRpbmcgbWVtb3J5XG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCU5MQV9QVVRfVTMyKHNrYiwgSVdMX1RNX0FUVFJfUkVHX1ZBTFVFMzIsIHZhbDMyKTsKKwkJc3RhdHVzID0gY2ZnODAyMTFfdGVzdG1vZGVfcmVwbHkoc2tiKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkJCSAgICAgICAiRXJyb3Igc2VuZGluZyBtc2cgOiAlZFxuIiwgc3RhdHVzKTsKKwkJYnJlYWs7CisJY2FzZSBJV0xfVE1fQ01EX0FQUDJERVZfUkVHX1dSSVRFMzI6CisJCWlmICghdGJbSVdMX1RNX0FUVFJfUkVHX1ZBTFVFMzJdKSB7CisJCQlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkJCSAgICAgICAiRXJyb3IgZmluZGluZyB2YWx1ZSB0byB3cml0ZVxuIik7CisJCQlyZXR1cm4gLUVOT01TRzsKKwkJfSBlbHNlIHsKKwkJCXZhbDMyID0gbmxhX2dldF91MzIodGJbSVdMX1RNX0FUVFJfUkVHX1ZBTFVFMzJdKTsKKwkJCUlXTF9JTkZPKHByaXYsICIzMmJpdCB2YWx1ZSB0byB3cml0ZSAweCV4XG4iLCB2YWwzMik7CisJCQlpd2xfd3JpdGUzMihwcml2LCBvZnMsIHZhbDMyKTsKKwkJfQorCQlicmVhazsKKwljYXNlIElXTF9UTV9DTURfQVBQMkRFVl9SRUdfV1JJVEU4OgorCQlpZiAoIXRiW0lXTF9UTV9BVFRSX1JFR19WQUxVRThdKSB7CisJCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiRXJyb3IgZmluZGluZyB2YWx1ZSB0byB3cml0ZVxuIik7CisJCQlyZXR1cm4gLUVOT01TRzsKKwkJfSBlbHNlIHsKKwkJCXZhbDggPSBubGFfZ2V0X3U4KHRiW0lXTF9UTV9BVFRSX1JFR19WQUxVRThdKTsKKwkJCUlXTF9JTkZPKHByaXYsICI4Yml0IHZhbHVlIHRvIHdyaXRlIDB4JXhcbiIsIHZhbDgpOworCQkJaXdsX3dyaXRlOChwcml2LCBvZnMsIHZhbDgpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJVbmtub3duIHRlc3Rtb2RlIHJlZ2lzdGVyIGNvbW1hbmQgSURcbiIpOworCQlyZXR1cm4gLUVOT1NZUzsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworCitubGFfcHV0X2ZhaWx1cmU6CisJa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIC1FTVNHU0laRTsKK30KKworCitzdGF0aWMgaW50IGl3bF90ZXN0bW9kZV9jZmdfaW5pdF9jYWxpYihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJc3RydWN0IGl3bF9ub3RpZmljYXRpb25fd2FpdCBjYWxpYl93YWl0OworCWludCByZXQ7CisKKwlpd2xhZ25faW5pdF9ub3RpZmljYXRpb25fd2FpdChwcml2LCAmY2FsaWJfd2FpdCwKKwkJCQkgICAgICBDQUxJQlJBVElPTl9DT01QTEVURV9OT1RJRklDQVRJT04sCisJCQkJICAgICAgTlVMTCwgTlVMTCk7CisJcmV0ID0gaXdsYWduX2luaXRfYWxpdmVfc3RhcnQocHJpdik7CisJaWYgKHJldCkgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkJIkVycm9yIGNvbmZpZ3VyaW5nIGluaXQgY2FsaWJyYXRpb246ICVkXG4iLCByZXQpOworCQlnb3RvIGNmZ19pbml0X2NhbGliX2Vycm9yOworCX0KKworCXJldCA9IGl3bGFnbl93YWl0X25vdGlmaWNhdGlvbihwcml2LCAmY2FsaWJfd2FpdCwgMiAqIEhaKTsKKwlpZiAocmV0KQorCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiRXJyb3IgZGV0ZWN0aW5nIgorCQkJIiBDQUxJQlJBVElPTl9DT01QTEVURV9OT1RJRklDQVRJT046ICVkXG4iLCByZXQpOworCXJldHVybiByZXQ7CisKK2NmZ19pbml0X2NhbGliX2Vycm9yOgorCWl3bGFnbl9yZW1vdmVfbm90aWZpY2F0aW9uKHByaXYsICZjYWxpYl93YWl0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSB1c2VyIGFwcGxpY2F0aW9uIGNvbW1hbmRzIGZvciBkcml2ZXIuCisgKgorICogSXQgcmV0cmlldmVzIGNvbW1hbmQgSUQgY2FycmllZCB3aXRoIElXTF9UTV9BVFRSX0NPTU1BTkQgYW5kIGNhbGxzIHRvIHRoZQorICogaGFuZGxlcnMgcmVzcGVjdGl2ZWx5LgorICoKKyAqIElmIGl0J3MgYW4gdW5rbm93biBjb21tZG4gSUQsIC1FTk9TWVMgaXMgcmVwbGllZDsgb3RoZXJ3aXNlLCB0aGUgcmV0dXJuZWQKKyAqIHZhbHVlIG9mIHRoZSBhY3R1YWwgY29tbWFuZCBleGVjdXRpb24gaXMgcmVwbGllZCB0byB0aGUgdXNlciBhcHBsaWNhdGlvbi4KKyAqCisgKiBJZiB0aGVyZSdzIGFueSBtZXNzYWdlIHJlc3BvbmRpbmcgdG8gdGhlIHVzZXIgc3BhY2UsIElXTF9UTV9BVFRSX1NZTkNfUlNQCisgKiBpcyB1c2VkIGZvciBjYXJyeSB0aGUgbWVzc2FnZSB3aGlsZSBJV0xfVE1fQVRUUl9DT01NQU5EIG11c3Qgc2V0IHRvCisgKiBJV0xfVE1fQ01EX0RFVjJBUFBfU1lOQ19SU1AuCisgKgorICogQGh3OiBpZWVlODAyMTFfaHcgb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgZGV2aWNlCisgKiBAdGI6IGdubCBtZXNzYWdlIGZpZWxkcyBmcm9tIHRoZSB1c2VyIHNwYWNlCisgKi8KK3N0YXRpYyBpbnQgaXdsX3Rlc3Rtb2RlX2RyaXZlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IG5sYXR0ciAqKnRiKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgY2hhciAqcnNwX2RhdGFfcHRyID0gTlVMTDsKKwlpbnQgc3RhdHVzID0gMCwgcnNwX2RhdGFfbGVuID0gMDsKKworCXN3aXRjaCAobmxhX2dldF91MzIodGJbSVdMX1RNX0FUVFJfQ09NTUFORF0pKSB7CisJY2FzZSBJV0xfVE1fQ01EX0FQUDJERVZfR0VUX0RFVklDRU5BTUU6CisJCXJzcF9kYXRhX3B0ciA9ICh1bnNpZ25lZCBjaGFyICopcHJpdi0+Y2ZnLT5uYW1lOworCQlyc3BfZGF0YV9sZW4gPSBzdHJsZW4ocHJpdi0+Y2ZnLT5uYW1lKTsKKwkJc2tiID0gY2ZnODAyMTFfdGVzdG1vZGVfYWxsb2NfcmVwbHlfc2tiKGh3LT53aXBoeSwKKwkJCQkJCQlyc3BfZGF0YV9sZW4gKyAyMCk7CisJCWlmICghc2tiKSB7CisJCQlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkJCSAgICAgICAiRXJyb3IgYWxsb2NhdGluZyBtZW1vcnlcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJTkxBX1BVVF9VMzIoc2tiLCBJV0xfVE1fQVRUUl9DT01NQU5ELAorCQkJICAgIElXTF9UTV9DTURfREVWMkFQUF9TWU5DX1JTUCk7CisJCU5MQV9QVVQoc2tiLCBJV0xfVE1fQVRUUl9TWU5DX1JTUCwKKwkJCXJzcF9kYXRhX2xlbiwgcnNwX2RhdGFfcHRyKTsKKwkJc3RhdHVzID0gY2ZnODAyMTFfdGVzdG1vZGVfcmVwbHkoc2tiKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiRXJyb3Igc2VuZGluZyBtc2cgOiAlZFxuIiwKKwkJCQkgICAgICAgc3RhdHVzKTsKKwkJYnJlYWs7CisKKwljYXNlIElXTF9UTV9DTURfQVBQMkRFVl9MT0FEX0lOSVRfRlc6CisJCXN0YXR1cyA9IGl3bGFnbl9sb2FkX3Vjb2RlX3dhaXRfYWxpdmUocHJpdiwgJnByaXYtPnVjb2RlX2luaXQsCisJCQkJCSAgIFVDT0RFX1NVQlRZUEVfSU5JVCwgLTEpOworCQlpZiAoc3RhdHVzKQorCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwKKwkJCQkiRXJyb3IgbG9hZGluZyBpbml0IHVjb2RlOiAlZFxuIiwgc3RhdHVzKTsKKwkJYnJlYWs7CisKKwljYXNlIElXTF9UTV9DTURfQVBQMkRFVl9DRkdfSU5JVF9DQUxJQjoKKwkJaXdsX3Rlc3Rtb2RlX2NmZ19pbml0X2NhbGliKHByaXYpOworCQlpd2xhZ25fc3RvcF9kZXZpY2UocHJpdik7CisJCWJyZWFrOworCisJY2FzZSBJV0xfVE1fQ01EX0FQUDJERVZfTE9BRF9SVU5USU1FX0ZXOgorCQlzdGF0dXMgPSBpd2xhZ25fbG9hZF91Y29kZV93YWl0X2FsaXZlKHByaXYsCisJCQkJCSAgICZwcml2LT51Y29kZV9ydCwKKwkJCQkJICAgVUNPREVfU1VCVFlQRV9SRUdVTEFSLAorCQkJCQkgICBVQ09ERV9TVUJUWVBFX1JFR1VMQVJfTkVXKTsKKwkJaWYgKHN0YXR1cykgeworCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwKKwkJCQkiRXJyb3IgbG9hZGluZyBydW50aW1lIHVjb2RlOiAlZFxuIiwgc3RhdHVzKTsKKwkJCWJyZWFrOworCQl9CisJCXN0YXR1cyA9IGl3bF9hbGl2ZV9zdGFydChwcml2KTsKKwkJaWYgKHN0YXR1cykKKwkJCUlXTF9ERUJVR19JTkZPKHByaXYsCisJCQkJIkVycm9yIHN0YXJ0aW5nIHRoZSBkZXZpY2U6ICVkXG4iLCBzdGF0dXMpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJVbmtub3duIHRlc3Rtb2RlIGRyaXZlciBjb21tYW5kIElEXG4iKTsKKwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCXJldHVybiBzdGF0dXM7CisKK25sYV9wdXRfZmFpbHVyZToKKwlrZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gLUVNU0dTSVpFOworfQorCisvKiBUaGUgdGVzdG1vZGUgZ25sIG1lc3NhZ2UgaGFuZGxlciB0aGF0IHRha2VzIHRoZSBnbmwgbWVzc2FnZSBmcm9tIHRoZQorICogdXNlciBzcGFjZSBhbmQgcGFyc2VzIGl0IHBlciB0aGUgcG9saWN5IGl3bF90ZXN0bW9kZV9nbmxfbXNnX3BvbGljeSwgdGhlbgorICogaW52b2tlIHRoZSBjb3JyZXNwb25kaW5nIGhhbmRsZXJzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCB3aGVuIHRoZXJlIGlzIHVzZXIgc3BhY2UgYXBwbGljYXRpb24gc2VuZGluZworICogZ25sIG1lc3NhZ2UgdGhyb3VnaCB0aGUgdGVzdG1vZGUgdHVubmVsIE5MODAyMTFfQ01EX1RFU1RNT0RFIHJlZ3VsYXRlZAorICogYnkgbmw4MDIxMS4KKyAqCisgKiBJdCByZXRyaWV2ZXMgdGhlIG1hbmRhdG9yeSBmaWVsZCwgSVdMX1RNX0FUVFJfQ09NTUFORCwgYmVmb3JlCisgKiBkaXNwYXRjaGluZyBpdCB0byB0aGUgY29ycmVzcG9uZGluZyBoYW5kbGVyLgorICoKKyAqIElmIElXTF9UTV9BVFRSX0NPTU1BTkQgaXMgbWlzc2luZywgLUVOT01TRyBpcyByZXBsaWVkIHRvIHVzZXIgYXBwbGljYXRpb247CisgKiAtRU5PU1lTIGlzIHJlcGxpZWQgdG8gdGhlIHVzZXIgYXBwbGljYXRpb24gaWYgdGhlIGNvbW1hbmQgaXMgdW5rbm93bjsKKyAqIE90aGVyd2lzZSwgdGhlIGNvbW1hbmQgaXMgZGlzcGF0Y2hlZCB0byB0aGUgcmVzcGVjdGl2ZSBoYW5kbGVyLgorICoKKyAqIEBodzogaWVlZTgwMjExX2h3IG9iamVjdCB0aGF0IHJlcHJlc2VudHMgdGhlIGRldmljZQorICogQGRhdGE6IHBvaW50ZXIgdG8gdXNlciBzcGFjZSBtZXNzYWdlCisgKiBAbGVuOiBsZW5ndGggaW4gYnl0ZSBvZiBAZGF0YQorICovCitpbnQgaXdsX3Rlc3Rtb2RlX2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbmxhdHRyICp0YltJV0xfVE1fQVRUUl9NQVggLSAxXTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gbmxhX3BhcnNlKHRiLCBJV0xfVE1fQVRUUl9NQVggLSAxLCBkYXRhLCBsZW4sCisJCQlpd2xfdGVzdG1vZGVfZ25sX21zZ19wb2xpY3kpOworCWlmIChyZXN1bHQgIT0gMCkgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkJICAgICAgICJFcnJvciBwYXJzaW5nIHRoZSBnbmwgbWVzc2FnZSA6ICVkXG4iLCByZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qIElXTF9UTV9BVFRSX0NPTU1BTkQgaXMgYWJzb2x1dGVseSBtYW5kYXRvcnkgKi8KKwlpZiAoIXRiW0lXTF9UTV9BVFRSX0NPTU1BTkRdKSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJFcnJvciBmaW5kaW5nIHRlc3Rtb2RlIGNvbW1hbmQgdHlwZVxuIik7CisJCXJldHVybiAtRU5PTVNHOworCX0KKwkvKiBpbiBjYXNlIG11bHRpcGxlIGFjY2Vzc2VzIHRvIHRoZSBkZXZpY2UgaGFwcGVucyAqLworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKworCXN3aXRjaCAobmxhX2dldF91MzIodGJbSVdMX1RNX0FUVFJfQ09NTUFORF0pKSB7CisJY2FzZSBJV0xfVE1fQ01EX0FQUDJERVZfVUNPREU6CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJ0ZXN0bW9kZSBjbWQgdG8gdUNvZGVcbiIpOworCQlyZXN1bHQgPSBpd2xfdGVzdG1vZGVfdWNvZGUoaHcsIHRiKTsKKwkJYnJlYWs7CisJY2FzZSBJV0xfVE1fQ01EX0FQUDJERVZfUkVHX1JFQUQzMjoKKwljYXNlIElXTF9UTV9DTURfQVBQMkRFVl9SRUdfV1JJVEUzMjoKKwljYXNlIElXTF9UTV9DTURfQVBQMkRFVl9SRUdfV1JJVEU4OgorCQlJV0xfREVCVUdfSU5GTyhwcml2LCAidGVzdG1vZGUgY21kIHRvIHJlZ2lzdGVyXG4iKTsKKwkJcmVzdWx0ID0gaXdsX3Rlc3Rtb2RlX3JlZyhodywgdGIpOworCQlicmVhazsKKwljYXNlIElXTF9UTV9DTURfQVBQMkRFVl9HRVRfREVWSUNFTkFNRToKKwljYXNlIElXTF9UTV9DTURfQVBQMkRFVl9MT0FEX0lOSVRfRlc6CisJY2FzZSBJV0xfVE1fQ01EX0FQUDJERVZfQ0ZHX0lOSVRfQ0FMSUI6CisJY2FzZSBJV0xfVE1fQ01EX0FQUDJERVZfTE9BRF9SVU5USU1FX0ZXOgorCQlJV0xfREVCVUdfSU5GTyhwcml2LCAidGVzdG1vZGUgY21kIHRvIGRyaXZlclxuIik7CisJCXJlc3VsdCA9IGl3bF90ZXN0bW9kZV9kcml2ZXIoaHcsIHRiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlVua25vd24gdGVzdG1vZGUgY29tbWFuZFxuIik7CisJCXJlc3VsdCA9IC1FTk9TWVM7CisJCWJyZWFrOworCX0KKworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10ZXN0bW9kZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdGVzdG1vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWY4OTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdGVzdG1vZGUuaApAQCAtMCwwICsxLDE1MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFRoaXMgZmlsZSBpcyBwcm92aWRlZCB1bmRlciBhIGR1YWwgQlNEL0dQTHYyIGxpY2Vuc2UuICBXaGVuIHVzaW5nIG9yCisgKiByZWRpc3RyaWJ1dGluZyB0aGlzIGZpbGUsIHlvdSBtYXkgZG8gc28gdW5kZXIgZWl0aGVyIGxpY2Vuc2UuCisgKgorICogR1BMIExJQ0VOU0UgU1VNTUFSWQorICoKKyAqIENvcHlyaWdodChjKSAyMDEwIC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLAorICogVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KKyAqIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLkdQTC4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgorICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworICoKKyAqIEJTRCBMSUNFTlNFCisgKgorICogQ29weXJpZ2h0KGMpIDIwMTAgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogICogTmVpdGhlciB0aGUgbmFtZSBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fSVdMX1RFU1RNT0RFX0hfXworI2RlZmluZSBfX0lXTF9URVNUTU9ERV9IX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKworLyogQ29tbWFuZHMgZnJvbSB1c2VyIHNwYWNlIHRvIGtlcm5lbCBzcGFjZShJV0xfVE1fQ01EX0lEX0FQUDJERVZfWFgpIGFuZAorICogZnJvbSBhbmQga2VybmVsIHNwYWNlIHRvIHVzZXIgc3BhY2UoSVdMX1RNX0NNRF9JRF9ERVYyQVBQX1hYKS4KKyAqIFRoZSBjb21tYW5kIElEIGlzIGNhcnJpZWQgd2l0aCBJV0xfVE1fQVRUUl9DT01NQU5ELiBUaGVyZSBhcmUgdGhyZWUgdHlwZXMgb2YKKyAqIG9mIGNvbW1hbmQgZnJvbSB1c2VyIHNwYWNlIGFuZCB0d28gdHlwZXMgb2YgY29tbWFuZCBmcm9tIGtlcm5lbCBzcGFjZS4KKyAqIFNlZSBiZWxvdy4KKyAqLworZW51bSBpd2xfdG1fY21kX3QgeworCS8qIGNvbW1hbmRzIGZyb20gdXNlciBhcHBsaWNhdGlvbiB0byB0aGUgdUNvZGUsCisJICogdGhlIGFjdHVhbCB1Q29kZSBob3N0IGNvbW1hbmQgSUQgaXMgY2FycmllZCB3aXRoCisJICogSVdMX1RNX0FUVFJfVUNPREVfQ01EX0lEICovCisJSVdMX1RNX0NNRF9BUFAyREVWX1VDT0RFID0gMSwKKworCS8qIGNvbW1hbmRzIGZyb20gdXNlciBhcHBsaWNhaXRvbiB0byBhY2Nlc3MgcmVnaXN0ZXIgKi8KKwlJV0xfVE1fQ01EX0FQUDJERVZfUkVHX1JFQUQzMiwKKwlJV0xfVE1fQ01EX0FQUDJERVZfUkVHX1dSSVRFMzIsCisJSVdMX1RNX0NNRF9BUFAyREVWX1JFR19XUklURTgsCisKKwkvKiBjb21tYW5kcyBmb20gdXNlciBzcGFjZSBmb3IgcHVyZSBkcml2ZXIgbGV2ZWwgb3BlcmF0aW9ucyAqLworCUlXTF9UTV9DTURfQVBQMkRFVl9HRVRfREVWSUNFTkFNRSwKKwlJV0xfVE1fQ01EX0FQUDJERVZfTE9BRF9JTklUX0ZXLAorCUlXTF9UTV9DTURfQVBQMkRFVl9DRkdfSU5JVF9DQUxJQiwKKwlJV0xfVE1fQ01EX0FQUDJERVZfTE9BRF9SVU5USU1FX0ZXLAorCS8qIGlmIHRoZXJlIGlzIG90aGVyIG5ldyBjb21tYW5kIGZvciB0aGUgZHJpdmVyIGxheWVyIG9wZXJhdGlvbiwKKwkgKiBhcHBlbmQgdGhlbSBoZXJlICovCisKKworCS8qIGNvbW1hbmRzIGZyb20ga2VybmVsIHNwYWNlIHRvIGNhcnJ5IHRoZSBzeW5jaHJvbm91cyByZXNwb25zZQorCSAqIHRvIHVzZXIgYXBwbGljYXRpb24gKi8KKwlJV0xfVE1fQ01EX0RFVjJBUFBfU1lOQ19SU1AsCisKKwkvKiBjb21tYW5kcyBmcm9tIGtlcm5lbCBzcGFjZSB0byBtdWx0aWNhc3QgdGhlIHNwb250YW5lb3VzIG1lc3NhZ2VzCisJICogdG8gdXNlciBhcHBsaWNhdGlvbiAqLworCUlXTF9UTV9DTURfREVWMkFQUF9VQ09ERV9SWF9QS1QsCisJSVdMX1RNX0NNRF9NQVgsCit9OworCitlbnVtIGl3bF90bV9hdHRyX3QgeworCUlXTF9UTV9BVFRSX05PVF9BUFBMSUNBQkxFID0gMCwKKworCS8qIEZyb20gdXNlciBzcGFjZSB0byBrZXJuZWwgc3BhY2U6CisJICogdGhlIGNvbW1hbmQgZWl0aGVyIGRlc3RpbmVzIHRvIHVjb2RlLCBkcml2ZXIsIG9yIHJlZ2lzdGVyOworCSAqIFNlZSBlbnVtIGl3bF90bV9jbWRfdC4KKwkgKgorCSAqIEZyb20ga2VybmVsIHNwYWNlIHRvIHVzZXIgc3BhY2U6CisJICogdGhlIGNvbW1hbmQgZWl0aGVyIGNhcnJpZXMgc3luY2hyb25vdXMgcmVzcG9uc2UsCisJICogb3IgdGhlIHNwb250YW5lb3VzIG1lc3NhZ2UgbXVsdGljYXN0IGZyb20gdGhlIGRldmljZTsKKwkgKiBTZWUgZW51bSBpd2xfdG1fY21kX3QuICovCisJSVdMX1RNX0FUVFJfQ09NTUFORCwKKworCS8qIFdoZW4gSVdMX1RNX0FUVFJfQ09NTUFORCBpcyBJV0xfVE1fQ01EX0FQUDJERVZfVUNPREUsCisJICogVGhlIG1hbmRhdG9yeSBmaWVsZHMgYXJlIDoKKwkgKiBJV0xfVE1fQVRUUl9VQ09ERV9DTURfSUQgZm9yIHJlY29nbml6YWJsZSBjb21tYW5kIElEOworCSAqIElXTF9UTV9BVFRSX0NPTU1BTkRfRkxBRyBmb3IgdGhlIGZsYWdzIG9mIHRoZSBjb21tYW5kczsKKwkgKiBUaGUgb3B0aW9uYWwgZmllbGRzIGFyZToKKwkgKiBJV0xfVE1fQVRUUl9VQ09ERV9DTURfREFUQSBmb3IgdGhlIGFjdHVhbCBjb21tYW5kIHBheWxvYWQKKwkgKiB0byB0aGUgdWNvZGUgKi8KKwlJV0xfVE1fQVRUUl9VQ09ERV9DTURfSUQsCisJSVdMX1RNX0FUVFJfVUNPREVfQ01EX0RBVEEsCisKKwkvKiBXaGVuIElXTF9UTV9BVFRSX0NPTU1BTkQgaXMgSVdMX1RNX0NNRF9BUFAyREVWX1JFR19YWFgsCisJICogVGhlIG1hbmRhdG9yeSBmaWVsZHMgYXJlOgorCSAqIElXTF9UTV9BVFRSX1JFR19PRkZTRVQgZm9yIHRoZSBvZmZzZXQgb2YgdGhlIHRhcmdldCByZWdpc3RlcjsKKwkgKiBJV0xfVE1fQVRUUl9SRUdfVkFMVUU4IG9yIElXTF9UTV9BVFRSX1JFR19WQUxVRTMyIGZvciB2YWx1ZSAqLworCUlXTF9UTV9BVFRSX1JFR19PRkZTRVQsCisJSVdMX1RNX0FUVFJfUkVHX1ZBTFVFOCwKKwlJV0xfVE1fQVRUUl9SRUdfVkFMVUUzMiwKKworCS8qIFdoZW4gSVdMX1RNX0FUVFJfQ09NTUFORCBpcyBJV0xfVE1fQ01EX0RFVjJBUFBfU1lOQ19SU1AsCisJICogVGhlIG1hbmRhdG9yeSBmaWVsZHMgYXJlOgorCSAqIElXTF9UTV9BVFRSX1NZTkNfUlNQIGZvciB0aGUgZGF0YSBjb250ZW50IHJlc3BvbmRpbmcgdG8gdGhlIHVzZXIKKwkgKiBhcHBsaWNhdGlvbiBjb21tYW5kICovCisJSVdMX1RNX0FUVFJfU1lOQ19SU1AsCisJLyogV2hlbiBJV0xfVE1fQVRUUl9DT01NQU5EIGlzIElXTF9UTV9DTURfREVWMkFQUF9VQ09ERV9SWF9QS1QsCisJICogVGhlIG1hbmRhdG9yeSBmaWVsZHMgYXJlOgorCSAqIElXTF9UTV9BVFRSX1VDT0RFX1JYX1BLVCBmb3IgdGhlIGRhdGEgY29udGVudCBtdWx0aWNhc3QgdG8gdGhlIHVzZXIKKwkgKiBhcHBsaWNhdGlvbiAqLworCUlXTF9UTV9BVFRSX1VDT0RFX1JYX1BLVCwKKworCUlXTF9UTV9BVFRSX01BWCwKK307CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdHguYwppbmRleCAyNzdjOTE3Li5lNjk1OTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXR4LmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KQEAgLTE0OSwzMiArMTQ5LDMxIEBACiAJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxID0gJnByaXYtPnR4cVtwcml2LT5jbWRfcXVldWVdOwogCXN0cnVjdCBpd2xfcXVldWUgKnEgPSAmdHhxLT5xOwogCWludCBpOwotCWJvb2wgaHVnZSA9IGZhbHNlOwogCiAJaWYgKHEtPm5fYmQgPT0gMCkKIAkJcmV0dXJuOwogCiAJd2hpbGUgKHEtPnJlYWRfcHRyICE9IHEtPndyaXRlX3B0cikgewotCQkvKiB3ZSBoYXZlIG5vIHdheSB0byB0ZWxsIGlmIGl0IGlzIGEgaHVnZSBjbWQgQVRNICovCiAJCWkgPSBnZXRfY21kX2luZGV4KHEsIHEtPnJlYWRfcHRyLCAwKTsKIAotCQlpZiAodHhxLT5tZXRhW2ldLmZsYWdzICYgQ01EX1NJWkVfSFVHRSkKLQkJCWh1Z2UgPSB0cnVlOwotCQllbHNlCisJCWlmICh0eHEtPm1ldGFbaV0uZmxhZ3MgJiBDTURfTUFQUEVEKSB7CiAJCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsCiAJCQkJCSBkbWFfdW5tYXBfYWRkcigmdHhxLT5tZXRhW2ldLCBtYXBwaW5nKSwKIAkJCQkJIGRtYV91bm1hcF9sZW4oJnR4cS0+bWV0YVtpXSwgbGVuKSwKIAkJCQkJIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7CisJCQl0eHEtPm1ldGFbaV0uZmxhZ3MgPSAwOworCQl9CiAKLQkgICAgIHEtPnJlYWRfcHRyID0gaXdsX3F1ZXVlX2luY193cmFwKHEtPnJlYWRfcHRyLCBxLT5uX2JkKTsKKwkJcS0+cmVhZF9wdHIgPSBpd2xfcXVldWVfaW5jX3dyYXAocS0+cmVhZF9wdHIsIHEtPm5fYmQpOwogCX0KIAotCWlmIChodWdlKSB7Ci0JCWkgPSBxLT5uX3dpbmRvdzsKKwlpID0gcS0+bl93aW5kb3c7CisJaWYgKHR4cS0+bWV0YVtpXS5mbGFncyAmIENNRF9NQVBQRUQpIHsKIAkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wY2lfZGV2LAogCQkJCSBkbWFfdW5tYXBfYWRkcigmdHhxLT5tZXRhW2ldLCBtYXBwaW5nKSwKIAkJCQkgZG1hX3VubWFwX2xlbigmdHhxLT5tZXRhW2ldLCBsZW4pLAogCQkJCSBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCQl0eHEtPm1ldGFbaV0uZmxhZ3MgPSAwOwogCX0KIH0KIApAQCAtMjMzLDcgKzIzMiw2IEBACiAgKiByZWNsYWltaW5nIHBhY2tldHMgKG9uICd0eCBkb25lIElSUSksIGlmIGZyZWUgc3BhY2UgYmVjb21lID4gaGlnaCBtYXJrLAogICogVHggcXVldWUgcmVzdW1lZC4KICAqCi0gKiBTZWUgbW9yZSBkZXRhaWxlZCBpbmZvIGluIGl3bC00OTY1LWh3LmguCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBpbnQgaXdsX3F1ZXVlX3NwYWNlKGNvbnN0IHN0cnVjdCBpd2xfcXVldWUgKnEpCkBAIC0yNjUsMTEgKzI2MywxMyBAQAogCiAJLyogY291bnQgbXVzdCBiZSBwb3dlci1vZi10d28gc2l6ZSwgb3RoZXJ3aXNlIGl3bF9xdWV1ZV9pbmNfd3JhcAogCSAqIGFuZCBpd2xfcXVldWVfZGVjX3dyYXAgYXJlIGJyb2tlbi4gKi8KLQlCVUdfT04oIWlzX3Bvd2VyX29mXzIoY291bnQpKTsKKwlpZiAoV0FSTl9PTighaXNfcG93ZXJfb2ZfMihjb3VudCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIHNsb3RzX251bSBtdXN0IGJlIHBvd2VyLW9mLXR3byBzaXplLCBvdGhlcndpc2UKIAkgKiBnZXRfY21kX2luZGV4IGlzIGJyb2tlbi4gKi8KLQlCVUdfT04oIWlzX3Bvd2VyX29mXzIoc2xvdHNfbnVtKSk7CisJaWYgKFdBUk5fT04oIWlzX3Bvd2VyX29mXzIoc2xvdHNfbnVtKSkpCisJCXJldHVybiAtRUlOVkFMOwogCiAJcS0+bG93X21hcmsgPSBxLT5uX3dpbmRvdyAvIDQ7CiAJaWYgKHEtPmxvd19tYXJrIDwgNCkKQEAgLTM4Niw3ICszODYsOSBAQAogCUJVSUxEX0JVR19PTihURkRfUVVFVUVfU0laRV9NQVggJiAoVEZEX1FVRVVFX1NJWkVfTUFYIC0gMSkpOwogCiAJLyogSW5pdGlhbGl6ZSBxdWV1ZSdzIGhpZ2gvbG93LXdhdGVyIG1hcmtzLCBhbmQgaGVhZC90YWlsIGluZGV4ZXMgKi8KLQlpd2xfcXVldWVfaW5pdChwcml2LCAmdHhxLT5xLCBURkRfUVVFVUVfU0laRV9NQVgsIHNsb3RzX251bSwgdHhxX2lkKTsKKwlyZXQgPSBpd2xfcXVldWVfaW5pdChwcml2LCAmdHhxLT5xLCBURkRfUVVFVUVfU0laRV9NQVgsIHNsb3RzX251bSwgdHhxX2lkKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJLyogVGVsbCBkZXZpY2Ugd2hlcmUgdG8gZmluZCBxdWV1ZSAqLwogCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9pbml0KHByaXYsIHR4cSk7CkBAIC00NDAsMjIgKzQ0MiwyNSBAQAogCXN0cnVjdCBpd2xfY21kX21ldGEgKm91dF9tZXRhOwogCWRtYV9hZGRyX3QgcGh5c19hZGRyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGxlbjsKIAl1MzIgaWR4OwogCXUxNiBmaXhfc2l6ZTsKIAlib29sIGlzX2N0X2tpbGwgPSBmYWxzZTsKIAotCWNtZC0+bGVuID0gcHJpdi0+Y2ZnLT5vcHMtPnV0aWxzLT5nZXRfaGNtZF9zaXplKGNtZC0+aWQsIGNtZC0+bGVuKTsKIAlmaXhfc2l6ZSA9ICh1MTYpKGNtZC0+bGVuICsgc2l6ZW9mKG91dF9jbWQtPmhkcikpOwogCi0JLyogSWYgYW55IG9mIHRoZSBjb21tYW5kIHN0cnVjdHVyZXMgZW5kIHVwIGJlaW5nIGxhcmdlciB0aGFuCisJLyoKKwkgKiBJZiBhbnkgb2YgdGhlIGNvbW1hbmQgc3RydWN0dXJlcyBlbmQgdXAgYmVpbmcgbGFyZ2VyIHRoYW4KIAkgKiB0aGUgVEZEX01BWF9QQVlMT0FEX1NJWkUsIGFuZCBpdCBzZW50IGFzIGEgJ3NtYWxsJyBjb21tYW5kIHRoZW4KIAkgKiB3ZSB3aWxsIG5lZWQgdG8gaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIFRGRCBlbnRyaWVzCiAJICogQWxzbywgY2hlY2sgdG8gc2VlIGlmIGNvbW1hbmQgYnVmZmVyIHNob3VsZCBub3QgZXhjZWVkIHRoZSBzaXplCi0JICogb2YgZGV2aWNlX2NtZCBhbmQgbWF4X2NtZF9zaXplLiAqLwotCUJVR19PTigoZml4X3NpemUgPiBURkRfTUFYX1BBWUxPQURfU0laRSkgJiYKLQkgICAgICAgIShjbWQtPmZsYWdzICYgQ01EX1NJWkVfSFVHRSkpOwotCUJVR19PTihmaXhfc2l6ZSA+IElXTF9NQVhfQ01EX1NJWkUpOworCSAqIG9mIGRldmljZV9jbWQgYW5kIG1heF9jbWRfc2l6ZS4KKwkgKi8KKwlpZiAoV0FSTl9PTigoZml4X3NpemUgPiBURkRfTUFYX1BBWUxPQURfU0laRSkgJiYKKwkJICAgICEoY21kLT5mbGFncyAmIENNRF9TSVpFX0hVR0UpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoV0FSTl9PTihmaXhfc2l6ZSA+IElXTF9NQVhfQ01EX1NJWkUpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChpd2xfaXNfcmZraWxsKHByaXYpIHx8IGl3bF9pc19jdGtpbGwocHJpdikpIHsKIAkJSVdMX1dBUk4ocHJpdiwgIk5vdCBzZW5kaW5nIGNvbW1hbmQgLSAlcyBLSUxMXG4iLApAQCAtNDYzLDM1ICs0NjgsMzggQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JaWYgKGl3bF9xdWV1ZV9zcGFjZShxKSA8ICgoY21kLT5mbGFncyAmIENNRF9BU1lOQykgPyAyIDogMSkpIHsKLQkJSVdMX0VSUihwcml2LCAiTm8gc3BhY2UgaW4gY29tbWFuZCBxdWV1ZVxuIik7Ci0JCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT50dF9vcHMuY3Rfa2lsbF9jaGVjaykgewotCQkJaXNfY3Rfa2lsbCA9Ci0JCQkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHRfb3BzLmN0X2tpbGxfY2hlY2socHJpdik7Ci0JCX0KLQkJaWYgKCFpc19jdF9raWxsKSB7Ci0JCQlJV0xfRVJSKHByaXYsICJSZXN0YXJ0aW5nIGFkYXB0ZXIgZHVlIHRvIHF1ZXVlIGZ1bGxcbiIpOwotCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKLQkJfQotCQlyZXR1cm4gLUVOT1NQQzsKLQl9CisJLyoKKwkgKiBBcyB3ZSBvbmx5IGhhdmUgYSBzaW5nbGUgaHVnZSBidWZmZXIsIGNoZWNrIHRoYXQgdGhlIGNvbW1hbmQKKwkgKiBpcyBzeW5jaHJvbm91cyAob3RoZXJ3aXNlIGJ1ZmZlcnMgY291bGQgZW5kIHVwIGJlaW5nIHJldXNlZCkuCisJICovCisKKwlpZiAoV0FSTl9PTigoY21kLT5mbGFncyAmIENNRF9BU1lOQykgJiYgKGNtZC0+ZmxhZ3MgJiBDTURfU0laRV9IVUdFKSkpCisJCXJldHVybiAtRUlOVkFMOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmhjbWRfbG9jaywgZmxhZ3MpOwogCi0JLyogSWYgdGhpcyBpcyBhIGh1Z2UgY21kLCBtYXJrIHRoZSBodWdlIGZsYWcgYWxzbyBvbiB0aGUgbWV0YS5mbGFncwotCSAqIG9mIHRoZSBfb3JpZ2luYWxfIGNtZC4gVGhpcyBpcyB1c2VkIGZvciBETUEgbWFwcGluZyBjbGVhbiB1cC4KLQkgKi8KLQlpZiAoY21kLT5mbGFncyAmIENNRF9TSVpFX0hVR0UpIHsKLQkJaWR4ID0gZ2V0X2NtZF9pbmRleChxLCBxLT53cml0ZV9wdHIsIDApOwotCQl0eHEtPm1ldGFbaWR4XS5mbGFncyA9IENNRF9TSVpFX0hVR0U7CisJaWYgKGl3bF9xdWV1ZV9zcGFjZShxKSA8ICgoY21kLT5mbGFncyAmIENNRF9BU1lOQykgPyAyIDogMSkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+aGNtZF9sb2NrLCBmbGFncyk7CisKKwkJSVdMX0VSUihwcml2LCAiTm8gc3BhY2UgaW4gY29tbWFuZCBxdWV1ZVxuIik7CisJCWlzX2N0X2tpbGwgPSBpd2xfY2hlY2tfZm9yX2N0X2tpbGwocHJpdik7CisJCWlmICghaXNfY3Rfa2lsbCkgeworCQkJSVdMX0VSUihwcml2LCAiUmVzdGFydGluZyBhZGFwdGVyIGR1ZSB0byBxdWV1ZSBmdWxsXG4iKTsKKwkJCWl3bGFnbl9md19lcnJvcihwcml2LCBmYWxzZSk7CisJCX0KKwkJcmV0dXJuIC1FTk9TUEM7CiAJfQogCiAJaWR4ID0gZ2V0X2NtZF9pbmRleChxLCBxLT53cml0ZV9wdHIsIGNtZC0+ZmxhZ3MgJiBDTURfU0laRV9IVUdFKTsKIAlvdXRfY21kID0gdHhxLT5jbWRbaWR4XTsKIAlvdXRfbWV0YSA9ICZ0eHEtPm1ldGFbaWR4XTsKIAorCWlmIChXQVJOX09OKG91dF9tZXRhLT5mbGFncyAmIENNRF9NQVBQRUQpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmhjbWRfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVOT1NQQzsKKwl9CisKIAltZW1zZXQob3V0X21ldGEsIDAsIHNpemVvZigqb3V0X21ldGEpKTsJLyogcmUtaW5pdGlhbGl6ZSB0byBOVUxMICovCi0Jb3V0X21ldGEtPmZsYWdzID0gY21kLT5mbGFnczsKIAlpZiAoY21kLT5mbGFncyAmIENNRF9XQU5UX1NLQikKIAkJb3V0X21ldGEtPnNvdXJjZSA9IGNtZDsKIAlpZiAoY21kLT5mbGFncyAmIENNRF9BU1lOQykKQEAgLTUwOCw5ICs1MTYsNiBAQAogCQkJSU5ERVhfVE9fU0VRKHEtPndyaXRlX3B0cikpOwogCWlmIChjbWQtPmZsYWdzICYgQ01EX1NJWkVfSFVHRSkKIAkJb3V0X2NtZC0+aGRyLnNlcXVlbmNlIHw9IFNFUV9IVUdFX0ZSQU1FOwotCWxlbiA9IHNpemVvZihzdHJ1Y3QgaXdsX2RldmljZV9jbWQpOwotCWlmIChpZHggPT0gVEZEX0NNRF9TTE9UUykKLQkJbGVuID0gSVdMX01BWF9DTURfU0laRTsKIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAJc3dpdGNoIChvdXRfY21kLT5oZHIuY21kKSB7CkBAIC01MzIsMTcgKzUzNywyMCBAQAogCQkJCXEtPndyaXRlX3B0ciwgaWR4LCBwcml2LT5jbWRfcXVldWUpOwogCX0KICNlbmRpZgotCXR4cS0+bmVlZF91cGRhdGUgPSAxOwotCi0JaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnR4cV91cGRhdGVfYnl0ZV9jbnRfdGJsKQotCQkvKiBTZXQgdXAgZW50cnkgaW4gcXVldWUncyBieXRlIGNvdW50IGNpcmN1bGFyIGJ1ZmZlciAqLwotCQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfdXBkYXRlX2J5dGVfY250X3RibChwcml2LCB0eHEsIDApOwotCiAJcGh5c19hZGRyID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwgJm91dF9jbWQtPmhkciwKIAkJCQkgICBmaXhfc2l6ZSwgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKwlpZiAodW5saWtlbHkocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHByaXYtPnBjaV9kZXYsIHBoeXNfYWRkcikpKSB7CisJCWlkeCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwogCWRtYV91bm1hcF9hZGRyX3NldChvdXRfbWV0YSwgbWFwcGluZywgcGh5c19hZGRyKTsKIAlkbWFfdW5tYXBfbGVuX3NldChvdXRfbWV0YSwgbGVuLCBmaXhfc2l6ZSk7CiAKKwlvdXRfbWV0YS0+ZmxhZ3MgPSBjbWQtPmZsYWdzIHwgQ01EX01BUFBFRDsKKworCXR4cS0+bmVlZF91cGRhdGUgPSAxOworCiAJdHJhY2VfaXdsd2lmaV9kZXZfaGNtZChwcml2LCAmb3V0X2NtZC0+aGRyLCBmaXhfc2l6ZSwgY21kLT5mbGFncyk7CiAKIAlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfYXR0YWNoX2J1Zl90b190ZmQocHJpdiwgdHhxLApAQCAtNTUzLDYgKzU2MSw3IEBACiAJcS0+d3JpdGVfcHRyID0gaXdsX3F1ZXVlX2luY193cmFwKHEtPndyaXRlX3B0ciwgcS0+bl9iZCk7CiAJaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyKHByaXYsIHR4cSk7CiAKKyBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+aGNtZF9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIGlkeDsKIH0KQEAgLTU4NCw3ICs1OTMsNyBAQAogCQlpZiAobmZyZWVkKysgPiAwKSB7CiAJCQlJV0xfRVJSKHByaXYsICJIQ01EIHNraXBwZWQ6IGluZGV4ICglZCkgJWQgJWRcbiIsIGlkeCwKIAkJCQkJcS0+d3JpdGVfcHRyLCBxLT5yZWFkX3B0cik7Ci0JCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJlc3RhcnQpOworCQkJaXdsYWduX2Z3X2Vycm9yKHByaXYsIGZhbHNlKTsKIAkJfQogCiAJfQpAQCAtNjA5LDYgKzYxOCw3IEBACiAJc3RydWN0IGl3bF9kZXZpY2VfY21kICpjbWQ7CiAJc3RydWN0IGl3bF9jbWRfbWV0YSAqbWV0YTsKIAlzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxW3ByaXYtPmNtZF9xdWV1ZV07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIElmIGEgVHggY29tbWFuZCBpcyBiZWluZyBoYW5kbGVkIGFuZCBpdCBpc24ndCBpbiB0aGUgYWN0dWFsCiAJICogY29tbWFuZCBxdWV1ZSB0aGVuIHRoZXJlIGEgY29tbWFuZCByb3V0aW5nIGJ1ZyBoYXMgYmVlbiBpbnRyb2R1Y2VkCkBAIC02MjIsMTQgKzYzMiw2IEBACiAJCXJldHVybjsKIAl9CiAKLQkvKiBJZiB0aGlzIGlzIGEgaHVnZSBjbWQsIGNsZWFyIHRoZSBodWdlIGZsYWcgb24gdGhlIG1ldGEuZmxhZ3MKLQkgKiBvZiB0aGUgX29yaWdpbmFsXyBjbWQuIFNvIHRoYXQgaXdsX2NtZF9xdWV1ZV9mcmVlIHdvbid0IHVubWFwCi0JICogdGhlIERNQSBidWZmZXIgZm9yIHRoZSBzY2FuIChodWdlKSBjb21tYW5kLgotCSAqLwotCWlmIChodWdlKSB7Ci0JCWNtZF9pbmRleCA9IGdldF9jbWRfaW5kZXgoJnR4cS0+cSwgaW5kZXgsIDApOwotCQl0eHEtPm1ldGFbY21kX2luZGV4XS5mbGFncyA9IDA7Ci0JfQogCWNtZF9pbmRleCA9IGdldF9jbWRfaW5kZXgoJnR4cS0+cSwgaW5kZXgsIGh1Z2UpOwogCWNtZCA9IHR4cS0+Y21kW2NtZF9pbmRleF07CiAJbWV0YSA9ICZ0eHEtPm1ldGFbY21kX2luZGV4XTsKQEAgLTY0Niw2ICs2NDgsOCBAQAogCX0gZWxzZSBpZiAobWV0YS0+Y2FsbGJhY2spCiAJCW1ldGEtPmNhbGxiYWNrKHByaXYsIGNtZCwgcGt0KTsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5oY21kX2xvY2ssIGZsYWdzKTsKKwogCWl3bF9oY21kX3F1ZXVlX3JlY2xhaW0ocHJpdiwgdHhxX2lkLCBpbmRleCwgY21kX2luZGV4KTsKIAogCWlmICghKG1ldGEtPmZsYWdzICYgQ01EX0FTWU5DKSkgewpAQCAtNjU0LDUgKzY1OCw5IEBACiAJCQkgICAgICAgZ2V0X2NtZF9zdHJpbmcoY21kLT5oZHIuY21kKSk7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKIAl9CisKKwkvKiBNYXJrIGFzIHVubWFwcGVkICovCiAJbWV0YS0+ZmxhZ3MgPSAwOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+aGNtZF9sb2NrLCBmbGFncyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9yeC5jCmluZGV4IDlhNTdjZjYuLjU2NjVhMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9yeC5jCkBAIC0xNTc2LDcgKzE1NzYsOCBAQAogCUlXTV9IRVhEVU1QKGl3bSwgREJHLCBSWCwgIkEtTVNEVTogIiwgc2tiLT5kYXRhLCBza2ItPmxlbik7CiAKIAlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmxpc3QpOwotCWllZWU4MDIxMV9hbXNkdV90b184MDIzcyhza2IsICZsaXN0LCBuZGV2LT5kZXZfYWRkciwgd2Rldi0+aWZ0eXBlLCAwKTsKKwlpZWVlODAyMTFfYW1zZHVfdG9fODAyM3Moc2tiLCAmbGlzdCwgbmRldi0+ZGV2X2FkZHIsIHdkZXYtPmlmdHlwZSwgMCwKKwkJCQkJCQkJCXRydWUpOwogCiAJd2hpbGUgKChmcmFtZSA9IF9fc2tiX2RlcXVldWUoJmxpc3QpKSkgewogCQluZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jZmcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NmZy5jCmluZGV4IDVjYWEyYWMuLjVkNjM3YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NmZy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NmZy5jCkBAIC02LDYgKzYsOCBAQAogICoKICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC0xMjIsOCArMTI0LDEwIEBACiB9CiAKIAotLyogVmFyaW91cyBmaXJtd2FyZSBjb21tYW5kcyBuZWVkIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCByYXRlcywgYnV0IHdpdGgKLSAgIHRoZSBoaWdodC1iaXQgc2V0IGZvciBiYXNpYyByYXRlcyAqLworLyoKKyAqIFZhcmlvdXMgZmlybXdhcmUgY29tbWFuZHMgbmVlZCB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgcmF0ZXMsIGJ1dCB3aXRoCisgKiB0aGUgaGlnaHQtYml0IHNldCBmb3IgYmFzaWMgcmF0ZXMKKyAqLwogc3RhdGljIGludCBsYnNfYWRkX3JhdGVzKHU4ICpyYXRlcykKIHsKIAlzaXplX3QgaTsKQEAgLTQyNSw3ICs0MjksNyBAQAogCXJldHVybiBpZV9sZW4gKyAyOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKgogICogU2V0IENoYW5uZWwKICAqLwogCkBAIC00NTIsNyArNDU2LDcgQEAKIAogCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qCiAgKiBTY2FubmluZwogICovCiAKQEAgLTUzOCw4ICs1NDIsMTAgQEAKIAkJZ290byBkb25lOwogCX0KIAotCS8qIFZhbGlkaXR5IGNoZWNrOiB0aGUgVExWIGhvbGRzIFRTRiB2YWx1ZXMgd2l0aCA4IGJ5dGVzIGVhY2gsIHNvCi0JICogdGhlIHNpemUgaW4gdGhlIFRMViBtdXN0IG1hdGNoIHRoZSBucl9zZXRzIHZhbHVlICovCisJLyoKKwkgKiBWYWxpZGl0eSBjaGVjazogdGhlIFRMViBob2xkcyBUU0YgdmFsdWVzIHdpdGggOCBieXRlcyBlYWNoLCBzbworCSAqIHRoZSBzaXplIGluIHRoZSBUTFYgbXVzdCBtYXRjaCB0aGUgbnJfc2V0cyB2YWx1ZQorCSAqLwogCWkgPSBnZXRfdW5hbGlnbmVkX2xlMTYodHNmZGVzYyk7CiAJdHNmZGVzYyArPSAyOwogCWlmIChpIC8gOCAhPSBzY2FucmVzcC0+bnJfc2V0cykgewpAQCAtNTgxLDggKzU4NywxMCBAQAogCiAJCS8qIFRvIGZpbmQgb3V0IHRoZSBjaGFubmVsLCB3ZSBtdXN0IHBhcnNlIHRoZSBJRXMgKi8KIAkJaWUgPSBwb3M7Ci0JCS8qIDYrMSs4KzIrMjogc2l6ZSBvZiBCU1NJRCwgUlNTSSwgdGltZSBzdGFtcCwgYmVhY29uCi0JCSAgIGludGVydmFsLCBjYXBhYmlsaXRpZXMgKi8KKwkJLyoKKwkJICogNisxKzgrMisyOiBzaXplIG9mIEJTU0lELCBSU1NJLCB0aW1lIHN0YW1wLCBiZWFjb24KKwkJICogaW50ZXJ2YWwsIGNhcGFiaWxpdGllcworCQkgKi8KIAkJaWVsZW4gPSBsZWZ0ID0gbGVuIC0gKDYgKyAxICsgOCArIDIgKyAyKTsKIAkJd2hpbGUgKGxlZnQgPj0gMikgewogCQkJdTggaWQsIGVsZW47CkBAIC03OTAsNyArNzk4LDcgQEAKIAogCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qCiAgKiBFdmVudHMKICAqLwogCkBAIC04MjUsNyArODMzLDcgQEAKIAogCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qCiAgKiBDb25uZWN0L2Rpc2Nvbm5lY3QKICAqLwogCkBAIC05NTAsOCArOTU4LDEwIEBACiAgKiBTZXQgV1BBL1dQQSBrZXkgbWF0ZXJpYWwKICAqLwogCi0vKiBsaWtlICJzdHJ1Y3QgY21kX2RzXzgwMl8xMV9rZXlfbWF0ZXJpYWwiLCBidXQgd2l0aCBjbWRfaGVhZGVyLiBPbmNlIHdlCi0gKiBnZXQgcmlkIG9mIFdFWFQsIHRoaXMgc2hvdWxkIGdvIGludG8gaG9zdC5oICovCisvKgorICogbGlrZSAic3RydWN0IGNtZF9kc184MDJfMTFfa2V5X21hdGVyaWFsIiwgYnV0IHdpdGggY21kX2hlYWRlci4gT25jZSB3ZQorICogZ2V0IHJpZCBvZiBXRVhULCB0aGlzIHNob3VsZCBnbyBpbnRvIGhvc3QuaAorICovCiAKIHN0cnVjdCBjbWRfa2V5X21hdGVyaWFsIHsKIAlzdHJ1Y3QgY21kX2hlYWRlciBoZHI7CkBAIC0xMzE0LDggKzEzMjQsOCBAQAogCQlzbWUtPnNzaWQsIHNtZS0+c3NpZF9sZW4sCiAJCVdMQU5fQ0FQQUJJTElUWV9FU1MsIFdMQU5fQ0FQQUJJTElUWV9FU1MpOwogCWlmICghYnNzKSB7Ci0JCWxic19wcl9lcnIoImFzc29jOiBic3MgJXBNIG5vdCBpbiBzY2FuIHJlc3VsdHNcbiIsCi0JCQkgICBzbWUtPmJzc2lkKTsKKwkJd2lwaHlfZXJyKHdpcGh5LCAiYXNzb2M6IGJzcyAlcE0gbm90IGluIHNjYW4gcmVzdWx0c1xuIiwKKwkJCSAgc21lLT5ic3NpZCk7CiAJCXJldCA9IC1FTk9FTlQ7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC0xMzcyLDggKzEzODIsOCBAQAogCQlsYnNfZW5hYmxlX3Jzbihwcml2LCBzbWUtPmNyeXB0by5jaXBoZXJfZ3JvdXAgIT0gMCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWxic19wcl9lcnIoInVuc3VwcG9ydGVkIGNpcGhlciBncm91cCAweCV4XG4iLAotCQkJICAgc21lLT5jcnlwdG8uY2lwaGVyX2dyb3VwKTsKKwkJd2lwaHlfZXJyKHdpcGh5LCAidW5zdXBwb3J0ZWQgY2lwaGVyIGdyb3VwIDB4JXhcbiIsCisJCQkgIHNtZS0+Y3J5cHRvLmNpcGhlcl9ncm91cCk7CiAJCXJldCA9IC1FTk9UU1VQUDsKIAkJZ290byBkb25lOwogCX0KQEAgLTE0OTEsNyArMTUwMSw3IEBACiAJCQkJICAgICBwYXJhbXMtPmtleSwgcGFyYW1zLT5rZXlfbGVuKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJbGJzX3ByX2VycigidW5oYW5kbGVkIGNpcGhlciAweCV4XG4iLCBwYXJhbXMtPmNpcGhlcik7CisJCXdpcGh5X2Vycih3aXBoeSwgInVuaGFuZGxlZCBjaXBoZXIgMHgleFxuIiwgcGFyYW1zLT5jaXBoZXIpOwogCQlyZXQgPSAtRU5PVFNVUFA7CiAJCWJyZWFrOwogCX0KQEAgLTE1MzYsNyArMTU0Niw3IEBACiB9CiAKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyoKICAqIEdldCBzdGF0aW9uCiAgKi8KIApAQCAtMTU4MSw3ICsxNTkxLDcgQEAKIAogCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qCiAgKiAiU2l0ZSBzdXJ2ZXkiLCBoZXJlIGp1c3QgY3VycmVudCBjaGFubmVsIGFuZCBub2lzZSBsZXZlbAogICovCiAKQEAgLTE2MTQsNyArMTYyNCw3IEBACiAKIAogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKgogICogQ2hhbmdlIGludGVyZmFjZQogICovCiAKQEAgLTE2NTYsMTEgKzE2NjYsMTIgQEAKIAogCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qCiAgKiBJQlNTIChBZC1Ib2MpCiAgKi8KIAotLyogVGhlIGZpcm13YXJlIG5lZWRzIHRoZSBmb2xsb3dpbmcgYml0cyBtYXNrZWQgb3V0IG9mIHRoZSBiZWFjb24tZGVyaXZlZAorLyoKKyAqIFRoZSBmaXJtd2FyZSBuZWVkcyB0aGUgZm9sbG93aW5nIGJpdHMgbWFza2VkIG91dCBvZiB0aGUgYmVhY29uLWRlcml2ZWQKICAqIGNhcGFiaWxpdHkgZmllbGQgd2hlbiBhc3NvY2lhdGluZy9qb2luaW5nIHRvIGEgQlNTOgogICogIDkgKFFvUyksIDExIChBUFNEKSwgMTIgKHVudXNlZCksIDE0ICh1bnVzZWQpLCAxNSAodW51c2VkKQogICovCkBAIC0xOTk5LDcgKzIwMTAsNyBAQAogCiAKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyoKICAqIEluaXRpYWxpemF0aW9uCiAgKi8KIApAQCAtMjExOCwxMyArMjEyOSwxMyBAQAogCiAJcmV0ID0gd2lwaHlfcmVnaXN0ZXIod2Rldi0+d2lwaHkpOwogCWlmIChyZXQgPCAwKQotCQlsYnNfcHJfZXJyKCJjYW5ub3QgcmVnaXN0ZXIgd2lwaHkgZGV2aWNlXG4iKTsKKwkJcHJfZXJyKCJjYW5ub3QgcmVnaXN0ZXIgd2lwaHkgZGV2aWNlXG4iKTsKIAogCXByaXYtPndpcGh5X3JlZ2lzdGVyZWQgPSB0cnVlOwogCiAJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KHByaXYtPmRldik7CiAJaWYgKHJldCkKLQkJbGJzX3ByX2VycigiY2Fubm90IHJlZ2lzdGVyIG5ldHdvcmsgZGV2aWNlXG4iKTsKKwkJcHJfZXJyKCJjYW5ub3QgcmVnaXN0ZXIgbmV0d29yayBkZXZpY2VcbiIpOwogCiAJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPnNjYW5fd29yaywgbGJzX3NjYW5fd29ya2VyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYwppbmRleCBmM2FjNjI0Li44NDU2NmRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYwpAQCAtMSw3ICsxLDcgQEAKLS8qKgotICAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaGFuZGxpbmcgb2YgY29tbWFuZC4KLSAgKiBJdCBwcmVwYXJlcyBjb21tYW5kIGFuZCBzZW5kcyBpdCB0byBmaXJtd2FyZSB3aGVuIGl0IGlzIHJlYWR5LgotICAqLworLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaGFuZGxpbmcgb2YgY29tbWFuZC4KKyAqIEl0IHByZXBhcmVzIGNvbW1hbmQgYW5kIHNlbmRzIGl0IHRvIGZpcm13YXJlIHdoZW4gaXQgaXMgcmVhZHkuCisgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTE2LDE0ICsxNiwxNCBAQAogI2RlZmluZSBDQUxfUlNTSShzbnIsIG5mKQkoKHMzMikoKHMzMikoc25yKSArIENBTF9ORihuZikpKQogCiAvKioKLSAqICBAYnJpZWYgU2ltcGxlIGNhbGxiYWNrIHRoYXQgY29waWVzIHJlc3BvbnNlIGJhY2sgaW50byBjb21tYW5kCisgKiBsYnNfY21kX2NvcHliYWNrIC0gU2ltcGxlIGNhbGxiYWNrIHRoYXQgY29waWVzIHJlc3BvbnNlIGJhY2sgaW50byBjb21tYW5kCiAgKgotICogIEBwYXJhbSBwcml2ICAgIAlBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQotICogIEBwYXJhbSBleHRyYSAgCUEgcG9pbnRlciB0byB0aGUgb3JpZ2luYWwgY29tbWFuZCBzdHJ1Y3R1cmUgZm9yIHdoaWNoCi0gKiAgICAgICAgICAgICAgICAgICAgICAncmVzcCcgaXMgYSByZXNwb25zZQotICogIEBwYXJhbSByZXNwICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIHJlc3BvbnNlCisgKiBAcHJpdjoJQSBwb2ludGVyIHRvICZzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCisgKiBAZXh0cmE6CUEgcG9pbnRlciB0byB0aGUgb3JpZ2luYWwgY29tbWFuZCBzdHJ1Y3R1cmUgZm9yIHdoaWNoCisgKgkJJ3Jlc3AnIGlzIGEgcmVzcG9uc2UKKyAqIEByZXNwOglBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgcmVzcG9uc2UKICAqCi0gKiAgQHJldHVybiAJICAgCTAgb24gc3VjY2VzcywgZXJyb3Igb24gZmFpbHVyZQorICogcmV0dXJuczoJMCBvbiBzdWNjZXNzLCBlcnJvciBvbiBmYWlsdXJlCiAgKi8KIGludCBsYnNfY21kX2NvcHliYWNrKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdW5zaWduZWQgbG9uZyBleHRyYSwKIAkJICAgICBzdHJ1Y3QgY21kX2hlYWRlciAqcmVzcCkKQEAgLTM4LDE1ICszOCwxNSBAQAogRVhQT1JUX1NZTUJPTF9HUEwobGJzX2NtZF9jb3B5YmFjayk7CiAKIC8qKgotICogIEBicmllZiBTaW1wbGUgY2FsbGJhY2sgdGhhdCBpZ25vcmVzIHRoZSByZXN1bHQuIFVzZSB0aGlzIGlmCi0gKiAgeW91IGp1c3Qgd2FudCB0byBzZW5kIGEgY29tbWFuZCB0byB0aGUgaGFyZHdhcmUsIGJ1dCBkb24ndAorICogIGxic19jbWRfYXN5bmNfY2FsbGJhY2sgLSBTaW1wbGUgY2FsbGJhY2sgdGhhdCBpZ25vcmVzIHRoZSByZXN1bHQuCisgKiAgVXNlIHRoaXMgaWYgeW91IGp1c3Qgd2FudCB0byBzZW5kIGEgY29tbWFuZCB0byB0aGUgaGFyZHdhcmUsIGJ1dCBkb24ndAogICogIGNhcmUgZm9yIHRoZSByZXN1bHQuCiAgKgotICogIEBwYXJhbSBwcml2ICAgICAgICAgaWdub3JlZAotICogIEBwYXJhbSBleHRyYSAgICAgICAgaWdub3JlZAotICogIEBwYXJhbSByZXNwICAgICAgICAgaWdub3JlZAorICogIEBwcml2OglpZ25vcmVkCisgKiAgQGV4dHJhOglpZ25vcmVkCisgKiAgQHJlc3A6CWlnbm9yZWQKICAqCi0gKiAgQHJldHVybiAJICAgCTAgZm9yIHN1Y2Nlc3MKKyAqICByZXR1cm5zOgkwIGZvciBzdWNjZXNzCiAgKi8KIHN0YXRpYyBpbnQgbGJzX2NtZF9hc3luY19jYWxsYmFjayhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHVuc2lnbmVkIGxvbmcgZXh0cmEsCiAJCSAgICAgc3RydWN0IGNtZF9oZWFkZXIgKnJlc3ApCkBAIC01NiwxMCArNTYsMTEgQEAKIAogCiAvKioKLSAqICBAYnJpZWYgQ2hlY2tzIHdoZXRoZXIgYSBjb21tYW5kIGlzIGFsbG93ZWQgaW4gUG93ZXIgU2F2ZSBtb2RlCisgKiAgaXNfY29tbWFuZF9hbGxvd2VkX2luX3BzIC0gdGVzdHMgaWYgYSBjb21tYW5kIGlzIGFsbG93ZWQgaW4gUG93ZXIgU2F2ZSBtb2RlCiAgKgotICogIEBwYXJhbSBjb21tYW5kIHRoZSBjb21tYW5kIElECi0gKiAgQHJldHVybiAJICAgMSBpZiBhbGxvd2VkLCAwIGlmIG5vdCBhbGxvd2VkCisgKiAgQGNtZDoJdGhlIGNvbW1hbmQgSUQKKyAqCisgKiAgcmV0dXJuczoJMSBpZiBhbGxvd2VkLCAwIGlmIG5vdCBhbGxvd2VkCiAgKi8KIHN0YXRpYyB1OCBpc19jb21tYW5kX2FsbG93ZWRfaW5fcHModTE2IGNtZCkKIHsKQEAgLTc1LDExICs3NiwxMiBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgVXBkYXRlcyB0aGUgaGFyZHdhcmUgZGV0YWlscyBsaWtlIE1BQyBhZGRyZXNzIGFuZCByZWd1bGF0b3J5IHJlZ2lvbgorICogIGxic191cGRhdGVfaHdfc3BlYyAtIFVwZGF0ZXMgdGhlIGhhcmR3YXJlIGRldGFpbHMgbGlrZSBNQUMgYWRkcmVzcworICogIGFuZCByZWd1bGF0b3J5IHJlZ2lvbgogICoKLSAqICBAcGFyYW0gcHJpdiAgICAJQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqICBAcHJpdjoJQSBwb2ludGVyIHRvICZzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCiAgKgotICogIEByZXR1cm4gCSAgIAkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKKyAqICByZXR1cm5zOgkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKICAqLwogaW50IGxic191cGRhdGVfaHdfc3BlYyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCiB7CkBAIC0xMDgsNyArMTEwLDcgQEAKIAkgKiBDRiBjYXJkICAgIGZpcm13YXJlIDUuMC4xNnAwOiAgIGNhcCAweDAwMDAwMzAzCiAJICogVVNCIGRvbmdsZSBmaXJtd2FyZSA1LjExMC4xN3AyOiBjYXAgMHgwMDAwMDMwMwogCSAqLwotCWxic19wcl9pbmZvKCIlcE0sIGZ3ICV1LiV1LiV1cCV1LCBjYXAgMHglMDh4XG4iLAorCW5ldGRldl9pbmZvKHByaXYtPmRldiwgIiVwTSwgZncgJXUuJXUuJXVwJXUsIGNhcCAweCUwOHhcbiIsCiAJCWNtZC5wZXJtYW5lbnRhZGRyLAogCQlwcml2LT5md3JlbGVhc2UgPj4gMjQgJiAweGZmLAogCQlwcml2LT5md3JlbGVhc2UgPj4gMTYgJiAweGZmLApAQCAtMTM5LDcgKzE0MSw4IEBACiAJLyogaWYgaXQncyB1bmlkZW50aWZpZWQgcmVnaW9uIGNvZGUsIHVzZSB0aGUgZGVmYXVsdCAoVVNBKSAqLwogCWlmIChpID49IE1SVkRSVl9NQVhfUkVHSU9OX0NPREUpIHsKIAkJcHJpdi0+cmVnaW9uY29kZSA9IDB4MTA7Ci0JCWxic19wcl9pbmZvKCJ1bmlkZW50aWZpZWQgcmVnaW9uIGNvZGU7IHVzaW5nIHRoZSBkZWZhdWx0IChVU0EpXG4iKTsKKwkJbmV0ZGV2X2luZm8ocHJpdi0+ZGV2LAorCQkJICAgICJ1bmlkZW50aWZpZWQgcmVnaW9uIGNvZGU7IHVzaW5nIHRoZSBkZWZhdWx0IChVU0EpXG4iKTsKIAl9CiAKIAlpZiAocHJpdi0+Y3VycmVudF9hZGRyWzBdID09IDB4ZmYpCkBAIC0yMDksNyArMjEyLDcgQEAKIAkJCQkJKHVpbnQ4X3QgKikmY21kX2NvbmZpZy53b2xfY29uZiwKIAkJCQkJc2l6ZW9mKHN0cnVjdCB3b2xfY29uZmlnKSk7CiAJfSBlbHNlIHsKLQkJbGJzX3ByX2luZm8oIkhPU1RfU0xFRVBfQ0ZHIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJbmV0ZGV2X2luZm8ocHJpdi0+ZGV2LCAiSE9TVF9TTEVFUF9DRkcgZmFpbGVkICVkXG4iLCByZXQpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0yMTcsMTQgKzIyMCwxNCBAQAogRVhQT1JUX1NZTUJPTF9HUEwobGJzX2hvc3Rfc2xlZXBfY2ZnKTsKIAogLyoqCi0gKiAgQGJyaWVmIFNldHMgdGhlIFBvd2VyIFNhdmUgbW9kZQorICogIGxic19zZXRfcHNfbW9kZSAtIFNldHMgdGhlIFBvd2VyIFNhdmUgbW9kZQogICoKLSAqICBAcGFyYW0gcHJpdiAgICAJQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gY21kX2FjdGlvbglUaGUgUG93ZXIgU2F2ZSBvcGVyYXRpb24gKFBTX01PREVfQUNUSU9OX0VOVEVSX1BTIG9yCisgKiAgQHByaXY6CUEgcG9pbnRlciB0byAmc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQorICogIEBjbWRfYWN0aW9uOiBUaGUgUG93ZXIgU2F2ZSBvcGVyYXRpb24gKFBTX01PREVfQUNUSU9OX0VOVEVSX1BTIG9yCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICBQU19NT0RFX0FDVElPTl9FWElUX1BTKQotICogIEBwYXJhbSBibG9jawlXaGV0aGVyIHRvIGJsb2NrIG9uIGEgcmVzcG9uc2Ugb3Igbm90CisgKiAgQGJsb2NrOglXaGV0aGVyIHRvIGJsb2NrIG9uIGEgcmVzcG9uc2Ugb3Igbm90CiAgKgotICogIEByZXR1cm4gCSAgIAkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKKyAqICByZXR1cm5zOgkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKICAqLwogaW50IGxic19zZXRfcHNfbW9kZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHUxNiBjbWRfYWN0aW9uLCBib29sIGJsb2NrKQogewpAQCAtMzEyLDcgKzMxNSw3IEBACiAJaWYgKHByaXYtPmlzX2RlZXBfc2xlZXApIHsKIAkJaWYgKCF3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChwcml2LT5kc19hd2FrZV9xLAogCQkJCQkhcHJpdi0+aXNfZGVlcF9zbGVlcCwgKDEwICogSFopKSkgewotCQkJbGJzX3ByX2VycigiZHNfYXdha2VfcTogdGltZXIgZXhwaXJlZFxuIik7CisJCQluZXRkZXZfZXJyKHByaXYtPmRldiwgImRzX2F3YWtlX3E6IHRpbWVyIGV4cGlyZWRcbiIpOwogCQkJcmV0ID0gLTE7CiAJCX0KIAl9CkBAIC0zMzcsNyArMzQwLDcgQEAKIAkJCQluZXRpZl9jYXJyaWVyX29mZihwcml2LT5kZXYpOwogCQkJfQogCQl9IGVsc2UgewotCQkJbGJzX3ByX2VycigiZGVlcCBzbGVlcDogYWxyZWFkeSBlbmFibGVkXG4iKTsKKwkJCW5ldGRldl9lcnIocHJpdi0+ZGV2LCAiZGVlcCBzbGVlcDogYWxyZWFkeSBlbmFibGVkXG4iKTsKIAkJfQogCX0gZWxzZSB7CiAJCWlmIChwcml2LT5pc19kZWVwX3NsZWVwKSB7CkBAIC0zNDcsOCArMzUwLDggQEAKIAkJCWlmICghcmV0KSB7CiAJCQkJcmV0ID0gbGJzX3dhaXRfZm9yX2RzX2F3YWtlKHByaXYpOwogCQkJCWlmIChyZXQpCi0JCQkJCWxic19wcl9lcnIoImRlZXAgc2xlZXA6IHdha2V1cCIKLQkJCQkJCQkiZmFpbGVkXG4iKTsKKwkJCQkJbmV0ZGV2X2Vycihwcml2LT5kZXYsCisJCQkJCQkgICAiZGVlcCBzbGVlcDogd2FrZXVwIGZhaWxlZFxuIik7CiAJCQl9CiAJCX0KIAl9CkBAIC0zODIsOCArMzg1LDkgQEAKIAkJCXJldCA9IGxic19ob3N0X3NsZWVwX2NmZyhwcml2LCBwcml2LT53b2xfY3JpdGVyaWEsCiAJCQkJCShzdHJ1Y3Qgd29sX2NvbmZpZyAqKU5VTEwpOwogCQkJaWYgKHJldCkgewotCQkJCWxic19wcl9pbmZvKCJIb3N0IHNsZWVwIGNvbmZpZ3VyYXRpb24gZmFpbGVkOiAiCi0JCQkJCQkiJWRcbiIsIHJldCk7CisJCQkJbmV0ZGV2X2luZm8ocHJpdi0+ZGV2LAorCQkJCQkgICAgIkhvc3Qgc2xlZXAgY29uZmlndXJhdGlvbiBmYWlsZWQ6ICVkXG4iLAorCQkJCQkgICAgcmV0KTsKIAkJCQlyZXR1cm4gcmV0OwogCQkJfQogCQkJaWYgKHByaXYtPnBzc3RhdGUgPT0gUFNfU1RBVEVfRlVMTF9QT1dFUikgewpAQCAtMzkzLDE5ICszOTcsMjEgQEAKIAkJCQkJCXNpemVvZihjbWQpLAogCQkJCQkJbGJzX3JldF9ob3N0X3NsZWVwX2FjdGl2YXRlLCAwKTsKIAkJCQlpZiAocmV0KQotCQkJCQlsYnNfcHJfaW5mbygiSE9TVF9TTEVFUF9BQ1RJVkFURSAiCi0JCQkJCQkJImZhaWxlZDogJWRcbiIsIHJldCk7CisJCQkJCW5ldGRldl9pbmZvKHByaXYtPmRldiwKKwkJCQkJCSAgICAiSE9TVF9TTEVFUF9BQ1RJVkFURSBmYWlsZWQ6ICVkXG4iLAorCQkJCQkJICAgIHJldCk7CiAJCQl9CiAKIAkJCWlmICghd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoCiAJCQkJCQlwcml2LT5ob3N0X3NsZWVwX3EsCiAJCQkJCQlwcml2LT5pc19ob3N0X3NsZWVwX2FjdGl2YXRlZCwKIAkJCQkJCSgxMCAqIEhaKSkpIHsKLQkJCQlsYnNfcHJfZXJyKCJob3N0X3NsZWVwX3E6IHRpbWVyIGV4cGlyZWRcbiIpOworCQkJCW5ldGRldl9lcnIocHJpdi0+ZGV2LAorCQkJCQkgICAiaG9zdF9zbGVlcF9xOiB0aW1lciBleHBpcmVkXG4iKTsKIAkJCQlyZXQgPSAtMTsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCWxic19wcl9lcnIoImhvc3Qgc2xlZXA6IGFscmVhZHkgZW5hYmxlZFxuIik7CisJCQluZXRkZXZfZXJyKHByaXYtPmRldiwgImhvc3Qgc2xlZXA6IGFscmVhZHkgZW5hYmxlZFxuIik7CiAJCX0KIAl9IGVsc2UgewogCQlpZiAocHJpdi0+aXNfaG9zdF9zbGVlcF9hY3RpdmF0ZWQpCkBAIC00MTcsMTMgKzQyMywxMyBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgU2V0IGFuIFNOTVAgTUlCIHZhbHVlCisgKiAgbGJzX3NldF9zbm1wX21pYiAtIFNldCBhbiBTTk1QIE1JQiB2YWx1ZQogICoKLSAqICBAcGFyYW0gcHJpdiAgICAJQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gb2lkICAJVGhlIE9JRCB0byBzZXQgaW4gdGhlIGZpcm13YXJlCi0gKiAgQHBhcmFtIHZhbCAgCVZhbHVlIHRvIHNldCB0aGUgT0lEIHRvCisgKiAgQHByaXY6CUEgcG9pbnRlciB0byAmc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQorICogIEBvaWQ6CVRoZSBPSUQgdG8gc2V0IGluIHRoZSBmaXJtd2FyZQorICogIEB2YWw6CVZhbHVlIHRvIHNldCB0aGUgT0lEIHRvCiAgKgotICogIEByZXR1cm4gCSAgIAkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKKyAqICByZXR1cm5zOiAJICAgCTAgb24gc3VjY2VzcywgZXJyb3Igb24gZmFpbHVyZQogICovCiBpbnQgbGJzX3NldF9zbm1wX21pYihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHUzMiBvaWQsIHUxNiB2YWwpCiB7CkBAIC00NjcsMTMgKzQ3MywxMyBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgR2V0IGFuIFNOTVAgTUlCIHZhbHVlCisgKiAgbGJzX2dldF9zbm1wX21pYiAtIEdldCBhbiBTTk1QIE1JQiB2YWx1ZQogICoKLSAqICBAcGFyYW0gcHJpdiAgICAJQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gb2lkICAJVGhlIE9JRCB0byByZXRyaWV2ZSBmcm9tIHRoZSBmaXJtd2FyZQotICogIEBwYXJhbSBvdXRfdmFsICAJTG9jYXRpb24gZm9yIHRoZSByZXR1cm5lZCB2YWx1ZQorICogIEBwcml2OglBIHBvaW50ZXIgdG8gJnN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqICBAb2lkOglUaGUgT0lEIHRvIHJldHJpZXZlIGZyb20gdGhlIGZpcm13YXJlCisgKiAgQG91dF92YWw6CUxvY2F0aW9uIGZvciB0aGUgcmV0dXJuZWQgdmFsdWUKICAqCi0gKiAgQHJldHVybiAJICAgCTAgb24gc3VjY2VzcywgZXJyb3Igb24gZmFpbHVyZQorICogIHJldHVybnM6CTAgb24gc3VjY2VzcywgZXJyb3Igb24gZmFpbHVyZQogICovCiBpbnQgbGJzX2dldF9zbm1wX21pYihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHUzMiBvaWQsIHUxNiAqb3V0X3ZhbCkKIHsKQEAgLTUxMCwxNCArNTE2LDE0IEBACiB9CiAKIC8qKgotICogIEBicmllZiBHZXQgdGhlIG1pbiwgbWF4LCBhbmQgY3VycmVudCBUWCBwb3dlcgorICogIGxic19nZXRfdHhfcG93ZXIgLSBHZXQgdGhlIG1pbiwgbWF4LCBhbmQgY3VycmVudCBUWCBwb3dlcgogICoKLSAqICBAcGFyYW0gcHJpdiAgICAJQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gY3VybGV2ZWwgIAlDdXJyZW50IHBvd2VyIGxldmVsIGluIGRCbQotICogIEBwYXJhbSBtaW5sZXZlbCAgCU1pbmltdW0gc3VwcG9ydGVkIHBvd2VyIGxldmVsIGluIGRCbSAob3B0aW9uYWwpCi0gKiAgQHBhcmFtIG1heGxldmVsICAJTWF4aW11bSBzdXBwb3J0ZWQgcG93ZXIgbGV2ZWwgaW4gZEJtIChvcHRpb25hbCkKKyAqICBAcHJpdjoJQSBwb2ludGVyIHRvICZzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCisgKiAgQGN1cmxldmVsOglDdXJyZW50IHBvd2VyIGxldmVsIGluIGRCbQorICogIEBtaW5sZXZlbDoJTWluaW11bSBzdXBwb3J0ZWQgcG93ZXIgbGV2ZWwgaW4gZEJtIChvcHRpb25hbCkKKyAqICBAbWF4bGV2ZWw6CU1heGltdW0gc3VwcG9ydGVkIHBvd2VyIGxldmVsIGluIGRCbSAob3B0aW9uYWwpCiAgKgotICogIEByZXR1cm4gCSAgIAkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKKyAqICByZXR1cm5zOgkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKICAqLwogaW50IGxic19nZXRfdHhfcG93ZXIoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBzMTYgKmN1cmxldmVsLCBzMTYgKm1pbmxldmVsLAogCQkgICAgIHMxNiAqbWF4bGV2ZWwpCkBAIC01NDUsMTIgKzU1MSwxMiBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgU2V0IHRoZSBUWCBwb3dlcgorICogIGxic19zZXRfdHhfcG93ZXIgLSBTZXQgdGhlIFRYIHBvd2VyCiAgKgotICogIEBwYXJhbSBwcml2ICAgIAlBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQotICogIEBwYXJhbSBkYm0gIAlUaGUgZGVzaXJlZCBwb3dlciBsZXZlbCBpbiBkQm0KKyAqICBAcHJpdjoJQSBwb2ludGVyIHRvICZzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCisgKiAgQGRibToJVGhlIGRlc2lyZWQgcG93ZXIgbGV2ZWwgaW4gZEJtCiAgKgotICogIEByZXR1cm4gCSAgIAkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKKyAqICByZXR1cm5zOiAJICAgCTAgb24gc3VjY2VzcywgZXJyb3Igb24gZmFpbHVyZQogICovCiBpbnQgbGJzX3NldF90eF9wb3dlcihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHMxNiBkYm0pCiB7CkBAIC01NzMsMTIgKzU3OSwxMyBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgRW5hYmxlIG9yIGRpc2FibGUgbW9uaXRvciBtb2RlIChvbmx5IGltcGxlbWVudGVkIG9uIE9MUEMgdXNiODM4OCBGVykKKyAqICBsYnNfc2V0X21vbml0b3JfbW9kZSAtIEVuYWJsZSBvciBkaXNhYmxlIG1vbml0b3IgbW9kZQorICogIChvbmx5IGltcGxlbWVudGVkIG9uIE9MUEMgdXNiODM4OCBGVykKICAqCi0gKiAgQHBhcmFtIHByaXYgICAgICAgIEEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHBhcmFtIGVuYWJsZSAgICAgIDEgdG8gZW5hYmxlIG1vbml0b3IgbW9kZSwgMCB0byBkaXNhYmxlCisgKiAgQHByaXY6CUEgcG9pbnRlciB0byAmc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQorICogIEBlbmFibGU6CTEgdG8gZW5hYmxlIG1vbml0b3IgbW9kZSwgMCB0byBkaXNhYmxlCiAgKgotICogIEByZXR1cm4gICAgICAgICAgICAwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKKyAqICByZXR1cm5zOgkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKICAqLwogaW50IGxic19zZXRfbW9uaXRvcl9tb2RlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgaW50IGVuYWJsZSkKIHsKQEAgLTYwNCwxMSArNjExLDExIEBACiB9CiAKIC8qKgotICogIEBicmllZiBHZXQgdGhlIHJhZGlvIGNoYW5uZWwKKyAqICBsYnNfZ2V0X2NoYW5uZWwgLSBHZXQgdGhlIHJhZGlvIGNoYW5uZWwKICAqCi0gKiAgQHBhcmFtIHByaXYgICAgCUEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCisgKiAgQHByaXY6CUEgcG9pbnRlciB0byAmc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQogICoKLSAqICBAcmV0dXJuIAkgICAJVGhlIGNoYW5uZWwgb24gc3VjY2VzcywgZXJyb3Igb24gZmFpbHVyZQorICogIHJldHVybnM6CVRoZSBjaGFubmVsIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKICAqLwogc3RhdGljIGludCBsYnNfZ2V0X2NoYW5uZWwoc3RydWN0IGxic19wcml2YXRlICpwcml2KQogewpAQCAtNjUwLDEyICs2NTcsMTIgQEAKIH0KIAogLyoqCi0gKiAgQGJyaWVmIFNldCB0aGUgcmFkaW8gY2hhbm5lbAorICogIGxic19zZXRfY2hhbm5lbCAtIFNldCB0aGUgcmFkaW8gY2hhbm5lbAogICoKLSAqICBAcGFyYW0gcHJpdiAgICAJQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gY2hhbm5lbCAgCVRoZSBkZXNpcmVkIGNoYW5uZWwsIG9yIDAgdG8gY2xlYXIgYSBsb2NrZWQgY2hhbm5lbAorICogIEBwcml2OglBIHBvaW50ZXIgdG8gJnN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqICBAY2hhbm5lbDoJVGhlIGRlc2lyZWQgY2hhbm5lbCwgb3IgMCB0byBjbGVhciBhIGxvY2tlZCBjaGFubmVsCiAgKgotICogIEByZXR1cm4gCSAgIAkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKKyAqICByZXR1cm5zOgkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKICAqLwogaW50IGxic19zZXRfY2hhbm5lbChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHU4IGNoYW5uZWwpCiB7CkBAIC02ODYsMTIgKzY5MywxMyBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgR2V0IGN1cnJlbnQgUlNTSSBhbmQgbm9pc2UgZmxvb3IKKyAqIGxic19nZXRfcnNzaSAtIEdldCBjdXJyZW50IFJTU0kgYW5kIG5vaXNlIGZsb29yCiAgKgotICogIEBwYXJhbSBwcml2CQlBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQotICogIEBwYXJhbSByc3NpCQlPbiBzdWNjZXNzZnVsIHJldHVybiwgc2lnbmFsIGxldmVsIGluIG1CbQorICogQHByaXY6CUEgcG9pbnRlciB0byAmc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQorICogQHJzc2k6CU9uIHN1Y2Nlc3NmdWwgcmV0dXJuLCBzaWduYWwgbGV2ZWwgaW4gbUJtCisgKiBAbmY6CQlPbiBzdWNjZXNzZnVsIHJldHVybiwgTm9pc2UgZmxvb3IKICAqCi0gKiAgQHJldHVybiAJICAgCVRoZSBjaGFubmVsIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKKyAqIHJldHVybnM6CVRoZSBjaGFubmVsIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKICAqLwogaW50IGxic19nZXRfcnNzaShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHM4ICpyc3NpLCBzOCAqbmYpCiB7CkBAIC03MTksMTMgKzcyNywxNCBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgU2VuZCByZWd1bGF0b3J5IGFuZCA4MDIuMTFkIGRvbWFpbiBpbmZvcm1hdGlvbiB0byB0aGUgZmlybXdhcmUKKyAqICBsYnNfc2V0XzExZF9kb21haW5faW5mbyAtIFNlbmQgcmVndWxhdG9yeSBhbmQgODAyLjExZCBkb21haW4gaW5mb3JtYXRpb24KKyAqICB0byB0aGUgZmlybXdhcmUKICAqCi0gKiAgQHBhcmFtIHByaXYJCXBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlCi0gKiAgQHBhcmFtIHJlcXVlc3QJY2ZnODAyMTEgcmVndWxhdG9yeSByZXF1ZXN0IHN0cnVjdHVyZQotICogIEBwYXJhbSBiYW5kcwl0aGUgZGV2aWNlJ3Mgc3VwcG9ydGVkIGJhbmRzIGFuZCBjaGFubmVscworICogIEBwcml2Oglwb2ludGVyIHRvICZzdHJ1Y3QgbGJzX3ByaXZhdGUKKyAqICBAcmVxdWVzdDoJY2ZnODAyMTEgcmVndWxhdG9yeSByZXF1ZXN0IHN0cnVjdHVyZQorICogIEBiYW5kczoJdGhlIGRldmljZSdzIHN1cHBvcnRlZCBiYW5kcyBhbmQgY2hhbm5lbHMKICAqCi0gKiAgQHJldHVybgkJMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG9uIGZhaWx1cmUKKyAqICByZXR1cm5zOgkwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb24gZmFpbHVyZQogKi8KIGludCBsYnNfc2V0XzExZF9kb21haW5faW5mbyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCiAJCQkgICAgc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdCwKQEAgLTg0MiwxNSArODUxLDE1IEBACiB9CiAKIC8qKgotICogIEBicmllZiBSZWFkIGEgTUFDLCBCYXNlYmFuZCwgb3IgUkYgcmVnaXN0ZXIKKyAqICBsYnNfZ2V0X3JlZyAtIFJlYWQgYSBNQUMsIEJhc2ViYW5kLCBvciBSRiByZWdpc3RlcgogICoKLSAqICBAcGFyYW0gcHJpdgkJcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUKLSAqICBAcGFyYW0gY21kCQlyZWdpc3RlciBjb21tYW5kLCBvbmUgb2YgQ01EX01BQ19SRUdfQUNDRVNTLAotICogICAgICAgICAgICAgICAgICAgICAgICBDTURfQkJQX1JFR19BQ0NFU1MsIG9yIENNRF9SRl9SRUdfQUNDRVNTCi0gKiAgQHBhcmFtIG9mZnNldCAgICAgICBieXRlIG9mZnNldCBvZiB0aGUgcmVnaXN0ZXIgdG8gZ2V0Ci0gKiAgQHBhcmFtIHZhbHVlICAgICAgICBvbiBzdWNjZXNzLCB0aGUgdmFsdWUgb2YgdGhlIHJlZ2lzdGVyIGF0ICdvZmZzZXQnCisgKiAgQHByaXY6CXBvaW50ZXIgdG8gJnN0cnVjdCBsYnNfcHJpdmF0ZQorICogIEByZWc6CXJlZ2lzdGVyIGNvbW1hbmQsIG9uZSBvZiBDTURfTUFDX1JFR19BQ0NFU1MsCisgKgkJQ01EX0JCUF9SRUdfQUNDRVNTLCBvciBDTURfUkZfUkVHX0FDQ0VTUworICogIEBvZmZzZXQ6CWJ5dGUgb2Zmc2V0IG9mIHRoZSByZWdpc3RlciB0byBnZXQKKyAqICBAdmFsdWU6CW9uIHN1Y2Nlc3MsIHRoZSB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgYXQgJ29mZnNldCcKICAqCi0gKiAgQHJldHVybgkJMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG9uIGZhaWx1cmUKKyAqICByZXR1cm5zOgkwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb24gZmFpbHVyZQogKi8KIGludCBsYnNfZ2V0X3JlZyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHUxNiByZWcsIHUxNiBvZmZzZXQsIHUzMiAqdmFsdWUpCiB7CkBAIC04ODYsMTUgKzg5NSwxNSBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgV3JpdGUgYSBNQUMsIEJhc2ViYW5kLCBvciBSRiByZWdpc3RlcgorICogIGxic19zZXRfcmVnIC0gV3JpdGUgYSBNQUMsIEJhc2ViYW5kLCBvciBSRiByZWdpc3RlcgogICoKLSAqICBAcGFyYW0gcHJpdgkJcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUKLSAqICBAcGFyYW0gY21kCQlyZWdpc3RlciBjb21tYW5kLCBvbmUgb2YgQ01EX01BQ19SRUdfQUNDRVNTLAotICogICAgICAgICAgICAgICAgICAgICAgICBDTURfQkJQX1JFR19BQ0NFU1MsIG9yIENNRF9SRl9SRUdfQUNDRVNTCi0gKiAgQHBhcmFtIG9mZnNldCAgICAgICBieXRlIG9mZnNldCBvZiB0aGUgcmVnaXN0ZXIgdG8gc2V0Ci0gKiAgQHBhcmFtIHZhbHVlICAgICAgICB0aGUgdmFsdWUgdG8gd3JpdGUgdG8gdGhlIHJlZ2lzdGVyIGF0ICdvZmZzZXQnCisgKiAgQHByaXY6CXBvaW50ZXIgdG8gJnN0cnVjdCBsYnNfcHJpdmF0ZQorICogIEByZWc6CXJlZ2lzdGVyIGNvbW1hbmQsIG9uZSBvZiBDTURfTUFDX1JFR19BQ0NFU1MsCisgKgkJQ01EX0JCUF9SRUdfQUNDRVNTLCBvciBDTURfUkZfUkVHX0FDQ0VTUworICogIEBvZmZzZXQ6CWJ5dGUgb2Zmc2V0IG9mIHRoZSByZWdpc3RlciB0byBzZXQKKyAqICBAdmFsdWU6CXRoZSB2YWx1ZSB0byB3cml0ZSB0byB0aGUgcmVnaXN0ZXIgYXQgJ29mZnNldCcKICAqCi0gKiAgQHJldHVybgkJMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG9uIGZhaWx1cmUKKyAqICByZXR1cm5zOgkwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb24gZmFpbHVyZQogKi8KIGludCBsYnNfc2V0X3JlZyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHUxNiByZWcsIHUxNiBvZmZzZXQsIHUzMiB2YWx1ZSkKIHsKQEAgLTEwMDIsNyArMTAxMSw4IEBACiAJcmV0ID0gcHJpdi0+aHdfaG9zdF90b19jYXJkKHByaXYsIE1WTVNfQ01ELCAodTggKikgY21kLCBjbWRzaXplKTsKIAogCWlmIChyZXQpIHsKLQkJbGJzX3ByX2luZm8oIkROTERfQ01EOiBod19ob3N0X3RvX2NhcmQgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJbmV0ZGV2X2luZm8ocHJpdi0+ZGV2LCAiRE5MRF9DTUQ6IGh3X2hvc3RfdG9fY2FyZCBmYWlsZWQ6ICVkXG4iLAorCQkJICAgIHJldCk7CiAJCS8qIExldCB0aGUgdGltZXIga2ljayBpbiBhbmQgcmV0cnksIGFuZCBwb3RlbnRpYWxseSByZXNldAogCQkgICB0aGUgd2hvbGUgdGhpbmcgaWYgdGhlIGNvbmRpdGlvbiBwZXJzaXN0cyAqLwogCQl0aW1lbyA9IEhaLzQ7CkBAIC0xMDIzLDcgKzEwMzMsNyBAQAogCWxic19kZWJfbGVhdmUoTEJTX0RFQl9IT1NUKTsKIH0KIAotLyoqCisvKgogICogIFRoaXMgZnVuY3Rpb24gaW5zZXJ0cyBjb21tYW5kIG5vZGUgdG8gY21kZnJlZXEKICAqICBhZnRlciBjbGVhbnMgaXQuIFJlcXVpcmVzIHByaXYtPmRyaXZlcl9sb2NrIGhlbGQuCiAgKi8KQEAgLTExMjUsMTEgKzExMzUsMTIgQEAKIH0KIAogLyoqCi0gKiAgQGJyaWVmIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIHRoZSBjb21tYW5kIGJ1ZmZlciBhbmQgbGluawotICogIGl0IHRvIGNvbW1hbmQgZnJlZSBxdWV1ZS4KKyAqICBsYnNfYWxsb2NhdGVfY21kX2J1ZmZlciAtIGFsbG9jYXRlcyB0aGUgY29tbWFuZCBidWZmZXIgYW5kIGxpbmtzCisgKiAgaXQgdG8gY29tbWFuZCBmcmVlIHF1ZXVlCiAgKgotICogIEBwYXJhbSBwcml2CQlBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQotICogIEByZXR1cm4gCQkwIG9yIC0xCisgKiAgQHByaXY6CUEgcG9pbnRlciB0byAmc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQorICoKKyAqICByZXR1cm5zOgkwIGZvciBzdWNjZXNzIG9yIC0xIG9uIGVycm9yCiAgKi8KIGludCBsYnNfYWxsb2NhdGVfY21kX2J1ZmZlcihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCiB7CkBAIC0xMTcxLDEwICsxMTgyLDExIEBACiB9CiAKIC8qKgotICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIGZyZWVzIHRoZSBjb21tYW5kIGJ1ZmZlci4KKyAqICBsYnNfZnJlZV9jbWRfYnVmZmVyIC0gZnJlZSB0aGUgY29tbWFuZCBidWZmZXIKICAqCi0gKiAgQHBhcmFtIHByaXYJCUEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHJldHVybiAJCTAgb3IgLTEKKyAqICBAcHJpdjoJQSBwb2ludGVyIHRvICZzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCisgKgorICogIHJldHVybnM6CTAgZm9yIHN1Y2Nlc3MKICAqLwogaW50IGxic19mcmVlX2NtZF9idWZmZXIoc3RydWN0IGxic19wcml2YXRlICpwcml2KQogewpAQCAtMTIxMSwxMSArMTIyMywxMyBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBnZXRzIGEgZnJlZSBjb21tYW5kIG5vZGUgaWYgYXZhaWxhYmxlIGluCi0gKiAgY29tbWFuZCBmcmVlIHF1ZXVlLgorICogIGxic19nZXRfZnJlZV9jbWRfbm9kZSAtIGdldHMgYSBmcmVlIGNvbW1hbmQgbm9kZSBpZiBhdmFpbGFibGUgaW4KKyAqICBjb21tYW5kIGZyZWUgcXVldWUKICAqCi0gKiAgQHBhcmFtIHByaXYJCUEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHJldHVybiBjbWRfY3RybF9ub2RlIEEgcG9pbnRlciB0byBjbWRfY3RybF9ub2RlIHN0cnVjdHVyZSBvciBOVUxMCisgKiAgQHByaXY6CUEgcG9pbnRlciB0byAmc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQorICoKKyAqICByZXR1cm5zOglBIHBvaW50ZXIgdG8gJmNtZF9jdHJsX25vZGUgc3RydWN0dXJlIG9uIHN1Y2Nlc3MKKyAqCQlvciAlTlVMTCBvbiBlcnJvcgogICovCiBzdGF0aWMgc3RydWN0IGNtZF9jdHJsX25vZGUgKmxic19nZXRfZnJlZV9jbWRfbm9kZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCiB7CkBAIC0xMjQ1LDEyICsxMjU5LDEyIEBACiB9CiAKIC8qKgotICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIGV4ZWN1dGVzIG5leHQgY29tbWFuZCBpbiBjb21tYW5kCi0gKiAgcGVuZGluZyBxdWV1ZS4gSXQgd2lsbCBwdXQgZmlybXdhcmUgYmFjayB0byBQUyBtb2RlCi0gKiAgaWYgYXBwbGljYWJsZS4KKyAqICBsYnNfZXhlY3V0ZV9uZXh0X2NvbW1hbmQgLSBleGVjdXRlIG5leHQgY29tbWFuZCBpbiBjb21tYW5kCisgKiAgcGVuZGluZyBxdWV1ZS4gV2lsbCBwdXQgZmlybXdhcmUgYmFjayB0byBQUyBtb2RlIGlmIGFwcGxpY2FibGUuCiAgKgotICogIEBwYXJhbSBwcml2ICAgICBBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQotICogIEByZXR1cm4gCSAgIDAgb3IgLTEKKyAqICBAcHJpdjoJQSBwb2ludGVyIHRvICZzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCisgKgorICogIHJldHVybnM6CTAgb24gc3VjY2VzcyBvciAtMSBvbiBlcnJvcgogICovCiBpbnQgbGJzX2V4ZWN1dGVfbmV4dF9jb21tYW5kKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKIHsKQEAgLTEyNjcsNyArMTI4MSw4IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CiAKIAlpZiAocHJpdi0+Y3VyX2NtZCkgewotCQlsYnNfcHJfYWxlcnQoICJFWEVDX05FWFRfQ01EOiBhbHJlYWR5IHByb2Nlc3NpbmcgY29tbWFuZCFcbiIpOworCQluZXRkZXZfYWxlcnQocHJpdi0+ZGV2LAorCQkJICAgICAiRVhFQ19ORVhUX0NNRDogYWxyZWFkeSBwcm9jZXNzaW5nIGNvbW1hbmQhXG4iKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAkJcmV0ID0gLTE7CiAJCWdvdG8gZG9uZTsKQEAgLTE0MzEsNyArMTQ0Niw3IEBACiAJcmV0ID0gcHJpdi0+aHdfaG9zdF90b19jYXJkKHByaXYsIE1WTVNfQ01ELCAodTggKikgJmNvbmZpcm1fc2xlZXAsCiAJCXNpemVvZihjb25maXJtX3NsZWVwKSk7CiAJaWYgKHJldCkgewotCQlsYnNfcHJfYWxlcnQoImNvbmZpcm1fc2xlZXAgZmFpbGVkXG4iKTsKKwkJbmV0ZGV2X2FsZXJ0KHByaXYtPmRldiwgImNvbmZpcm1fc2xlZXAgZmFpbGVkXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xNDU2LDEyICsxNDcxLDEyIEBACiB9CiAKIC8qKgotICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBjb25kaXRpb24gYW5kIHByZXBhcmVzIHRvCi0gKiAgc2VuZCBzbGVlcCBjb25maXJtIGNvbW1hbmQgdG8gZmlybXdhcmUgaWYgb2suCisgKiBsYnNfcHNfY29uZmlybV9zbGVlcCAtIGNoZWNrcyBjb25kaXRpb24gYW5kIHByZXBhcmVzIHRvCisgKiBzZW5kIHNsZWVwIGNvbmZpcm0gY29tbWFuZCB0byBmaXJtd2FyZSBpZiBvawogICoKLSAqICBAcGFyYW0gcHJpdiAgICAJQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gcHNtb2RlICAJUG93ZXIgU2F2aW5nIG1vZGUKLSAqICBAcmV0dXJuIAkgICAJbi9hCisgKiBAcHJpdjoJQSBwb2ludGVyIHRvICZzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCisgKgorICogcmV0dXJuczoJbi9hCiAgKi8KIHZvaWQgbGJzX3BzX2NvbmZpcm1fc2xlZXAoc3RydWN0IGxic19wcml2YXRlICpwcml2KQogewpAQCAtMTUwMSwxNiArMTUxNiwxNiBAQAogCiAKIC8qKgotICogQGJyaWVmIENvbmZpZ3VyZXMgdGhlIHRyYW5zbWlzc2lvbiBwb3dlciBjb250cm9sIGZ1bmN0aW9uYWxpdHkuCisgKiBsYnNfc2V0X3RwY19jZmcgLSBDb25maWd1cmVzIHRoZSB0cmFuc21pc3Npb24gcG93ZXIgY29udHJvbCBmdW5jdGlvbmFsaXR5CiAgKgotICogQHBhcmFtIHByaXYJCUEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCi0gKiBAcGFyYW0gZW5hYmxlCVRyYW5zbWlzc2lvbiBwb3dlciBjb250cm9sIGVuYWJsZQotICogQHBhcmFtIHAwCQlQb3dlciBsZXZlbCB3aGVuIGxpbmsgcXVhbGl0eSBpcyBnb29kIChkQm0pLgotICogQHBhcmFtIHAxCQlQb3dlciBsZXZlbCB3aGVuIGxpbmsgcXVhbGl0eSBpcyBmYWlyIChkQm0pLgotICogQHBhcmFtIHAyCQlQb3dlciBsZXZlbCB3aGVuIGxpbmsgcXVhbGl0eSBpcyBwb29yIChkQm0pLgotICogQHBhcmFtIHVzZXNucglVc2UgU2lnbmFsIHRvIE5vaXNlIFJhdGlvIGluIFRQQworICogQHByaXY6CUEgcG9pbnRlciB0byAmc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQorICogQGVuYWJsZToJVHJhbnNtaXNzaW9uIHBvd2VyIGNvbnRyb2wgZW5hYmxlCisgKiBAcDA6CQlQb3dlciBsZXZlbCB3aGVuIGxpbmsgcXVhbGl0eSBpcyBnb29kIChkQm0pLgorICogQHAxOgkJUG93ZXIgbGV2ZWwgd2hlbiBsaW5rIHF1YWxpdHkgaXMgZmFpciAoZEJtKS4KKyAqIEBwMjoJCVBvd2VyIGxldmVsIHdoZW4gbGluayBxdWFsaXR5IGlzIHBvb3IgKGRCbSkuCisgKiBAdXNlc25yOglVc2UgU2lnbmFsIHRvIE5vaXNlIFJhdGlvIGluIFRQQwogICoKLSAqIEByZXR1cm4gMCBvbiBzdWNjZXNzCisgKiByZXR1cm5zOgkwIG9uIHN1Y2Nlc3MKICAqLwogaW50IGxic19zZXRfdHBjX2NmZyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIGludCBlbmFibGUsIGludDhfdCBwMCwgaW50OF90IHAxLAogCQlpbnQ4X3QgcDIsIGludCB1c2VzbnIpCkBAIC0xNTMzLDE1ICsxNTQ4LDE1IEBACiB9CiAKIC8qKgotICogQGJyaWVmIENvbmZpZ3VyZXMgdGhlIHBvd2VyIGFkYXB0YXRpb24gc2V0dGluZ3MuCisgKiBsYnNfc2V0X3Bvd2VyX2FkYXB0X2NmZyAtIENvbmZpZ3VyZXMgdGhlIHBvd2VyIGFkYXB0YXRpb24gc2V0dGluZ3MKICAqCi0gKiBAcGFyYW0gcHJpdgkJQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqIEBwYXJhbSBlbmFibGUJUG93ZXIgYWRhcHRhdGlvbiBlbmFibGUKLSAqIEBwYXJhbSBwMAkJUG93ZXIgbGV2ZWwgZm9yIDEsIDIsIDUuNSBhbmQgMTEgTWJwcyAoZEJtKS4KLSAqIEBwYXJhbSBwMQkJUG93ZXIgbGV2ZWwgZm9yIDYsIDksIDEyLCAxOCwgMjIsIDI0IGFuZCAzNiBNYnBzIChkQm0pLgotICogQHBhcmFtIHAyCQlQb3dlciBsZXZlbCBmb3IgNDggYW5kIDU0IE1icHMgKGRCbSkuCisgKiBAcHJpdjoJQSBwb2ludGVyIHRvICZzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCisgKiBAZW5hYmxlOglQb3dlciBhZGFwdGF0aW9uIGVuYWJsZQorICogQHAwOgkJUG93ZXIgbGV2ZWwgZm9yIDEsIDIsIDUuNSBhbmQgMTEgTWJwcyAoZEJtKS4KKyAqIEBwMToJCVBvd2VyIGxldmVsIGZvciA2LCA5LCAxMiwgMTgsIDIyLCAyNCBhbmQgMzYgTWJwcyAoZEJtKS4KKyAqIEBwMjoJCVBvd2VyIGxldmVsIGZvciA0OCBhbmQgNTQgTWJwcyAoZEJtKS4KICAqCi0gKiBAcmV0dXJuIDAgb24gU3VjY2VzcworICogcmV0dXJuczoJMCBvbiBTdWNjZXNzCiAgKi8KIAogaW50IGxic19zZXRfcG93ZXJfYWRhcHRfY2ZnKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgaW50IGVuYWJsZSwgaW50OF90IHAwLApAQCAtMTY1Nyw3ICsxNjcyLDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAlyZXQgPSBjbWRub2RlLT5yZXN1bHQ7CiAJaWYgKHJldCkKLQkJbGJzX3ByX2luZm8oIlBSRVBfQ01EOiBjb21tYW5kIDB4JTA0eCBmYWlsZWQ6ICVkXG4iLAorCQluZXRkZXZfaW5mbyhwcml2LT5kZXYsICJQUkVQX0NNRDogY29tbWFuZCAweCUwNHggZmFpbGVkOiAlZFxuIiwKIAkJCSAgICBjb21tYW5kLCByZXQpOwogCiAJX19sYnNfY2xlYW51cF9hbmRfaW5zZXJ0X2NtZChwcml2LCBjbWRub2RlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZHJlc3AuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZHJlc3AuYwppbmRleCA1ZTk1ZGE5Li4yMDdmYzM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWRyZXNwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kcmVzcC5jCkBAIC0xLDcgKzEsOCBAQAotLyoqCi0gICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBoYW5kbGluZyBvZiBjb21tYW5kCi0gICogcmVzcG9uc2VzIGFzIHdlbGwgYXMgZXZlbnRzIGdlbmVyYXRlZCBieSBmaXJtd2FyZS4KLSAgKi8KKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGhhbmRsaW5nIG9mIGNvbW1hbmQKKyAqIHJlc3BvbnNlcyBhcyB3ZWxsIGFzIGV2ZW50cyBnZW5lcmF0ZWQgYnkgZmlybXdhcmUuCisgKi8KKwogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC0xMiwxMiArMTMsMTMgQEAKICNpbmNsdWRlICJjbWQuaCIKIAogLyoqCi0gKiAgQGJyaWVmIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBkaXNjb25uZWN0IGV2ZW50LiBpdAotICogIHJlcG9ydHMgZGlzY29ubmVjdCB0byB1cHBlciBsYXllciwgY2xlYW4gdHgvcnggcGFja2V0cywKLSAqICByZXNldCBsaW5rIHN0YXRlIGV0Yy4KKyAqIGxic19tYWNfZXZlbnRfZGlzY29ubmVjdGVkIC0gaGFuZGxlcyBkaXNjb25uZWN0IGV2ZW50LiBJdAorICogcmVwb3J0cyBkaXNjb25uZWN0IHRvIHVwcGVyIGxheWVyLCBjbGVhbiB0eC9yeCBwYWNrZXRzLAorICogcmVzZXQgbGluayBzdGF0ZSBldGMuCiAgKgotICogIEBwYXJhbSBwcml2ICAgIEEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHJldHVybiAJICAgbi9hCisgKiBAcHJpdjoJQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqCisgKiByZXR1cm5zOgluL2EKICAqLwogdm9pZCBsYnNfbWFjX2V2ZW50X2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCiB7CkBAIC04NCwxNSArODYsMTggQEAKIAlsYnNfZGViX2hleChMQlNfREVCX0NNRCwgIkNNRF9SRVNQIiwgKHZvaWQgKikgcmVzcCwgbGVuKTsKIAogCWlmIChyZXNwLT5zZXFudW0gIT0gcHJpdi0+Y3VyX2NtZC0+Y21kYnVmLT5zZXFudW0pIHsKLQkJbGJzX3ByX2luZm8oIlJlY2VpdmVkIENNRF9SRVNQIHdpdGggaW52YWxpZCBzZXF1ZW5jZSAlZCAoZXhwZWN0ZWQgJWQpXG4iLAotCQkJICAgIGxlMTZfdG9fY3B1KHJlc3AtPnNlcW51bSksIGxlMTZfdG9fY3B1KHByaXYtPmN1cl9jbWQtPmNtZGJ1Zi0+c2VxbnVtKSk7CisJCW5ldGRldl9pbmZvKHByaXYtPmRldiwKKwkJCSAgICAiUmVjZWl2ZWQgQ01EX1JFU1Agd2l0aCBpbnZhbGlkIHNlcXVlbmNlICVkIChleHBlY3RlZCAlZClcbiIsCisJCQkgICAgbGUxNl90b19jcHUocmVzcC0+c2VxbnVtKSwKKwkJCSAgICBsZTE2X3RvX2NwdShwcml2LT5jdXJfY21kLT5jbWRidWYtPnNlcW51bSkpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOwogCQlyZXQgPSAtMTsKIAkJZ290byBkb25lOwogCX0KIAlpZiAocmVzcGNtZCAhPSBDTURfUkVUKGN1cmNtZCkgJiYKIAkgICAgcmVzcGNtZCAhPSBDTURfUkVUXzgwMl8xMV9BU1NPQ0lBVEUgJiYgY3VyY21kICE9IENNRF84MDJfMTFfQVNTT0NJQVRFKSB7Ci0JCWxic19wcl9pbmZvKCJJbnZhbGlkIENNRF9SRVNQICV4IHRvIGNvbW1hbmQgJXghXG4iLCByZXNwY21kLCBjdXJjbWQpOworCQluZXRkZXZfaW5mbyhwcml2LT5kZXYsICJJbnZhbGlkIENNRF9SRVNQICV4IHRvIGNvbW1hbmQgJXghXG4iLAorCQkJICAgIHJlc3BjbWQsIGN1cmNtZCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CiAJCXJldCA9IC0xOwogCQlnb3RvIGRvbmU7CkBAIC0xMDEsNyArMTA2LDggQEAKIAlpZiAocmVzcC0+cmVzdWx0ID09IGNwdV90b19sZTE2KDB4MDAwNCkpIHsKIAkJLyogMHgwMDA0IG1lYW5zIC1FQUdBSU4uIERyb3AgdGhlIHJlc3BvbnNlLCBsZXQgaXQgdGltZSBvdXQKIAkJICAgYW5kIGJlIHJlc3VibWl0dGVkICovCi0JCWxic19wcl9pbmZvKCJGaXJtd2FyZSByZXR1cm5zIERFRkVSIHRvIGNvbW1hbmQgJXguIFdpbGwgbGV0IGl0IHRpbWUgb3V0Li4uXG4iLAorCQluZXRkZXZfaW5mbyhwcml2LT5kZXYsCisJCQkgICAgIkZpcm13YXJlIHJldHVybnMgREVGRVIgdG8gY29tbWFuZCAleC4gV2lsbCBsZXQgaXQgdGltZSBvdXQuLi5cbiIsCiAJCQkgICAgbGUxNl90b19jcHUocmVzcC0+Y29tbWFuZCkpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOwogCQlyZXQgPSAtMTsKQEAgLTMxMywyOCArMzE5LDI4IEBACiAJCWxic19kZWJfY21kKCJFVkVOVDogQURIT0MgYmVhY29uIGxvc3RcbiIpOwogCQlicmVhazsKIAljYXNlIE1BQ1JFR19JTlRfQ09ERV9SU1NJX0xPVzoKLQkJbGJzX3ByX2FsZXJ0KCJFVkVOVDogcnNzaSBsb3dcbiIpOworCQluZXRkZXZfYWxlcnQocHJpdi0+ZGV2LCAiRVZFTlQ6IHJzc2kgbG93XG4iKTsKIAkJYnJlYWs7CiAJY2FzZSBNQUNSRUdfSU5UX0NPREVfU05SX0xPVzoKLQkJbGJzX3ByX2FsZXJ0KCJFVkVOVDogc25yIGxvd1xuIik7CisJCW5ldGRldl9hbGVydChwcml2LT5kZXYsICJFVkVOVDogc25yIGxvd1xuIik7CiAJCWJyZWFrOwogCWNhc2UgTUFDUkVHX0lOVF9DT0RFX01BWF9GQUlMOgotCQlsYnNfcHJfYWxlcnQoIkVWRU5UOiBtYXggZmFpbFxuIik7CisJCW5ldGRldl9hbGVydChwcml2LT5kZXYsICJFVkVOVDogbWF4IGZhaWxcbiIpOwogCQlicmVhazsKIAljYXNlIE1BQ1JFR19JTlRfQ09ERV9SU1NJX0hJR0g6Ci0JCWxic19wcl9hbGVydCgiRVZFTlQ6IHJzc2kgaGlnaFxuIik7CisJCW5ldGRldl9hbGVydChwcml2LT5kZXYsICJFVkVOVDogcnNzaSBoaWdoXG4iKTsKIAkJYnJlYWs7CiAJY2FzZSBNQUNSRUdfSU5UX0NPREVfU05SX0hJR0g6Ci0JCWxic19wcl9hbGVydCgiRVZFTlQ6IHNuciBoaWdoXG4iKTsKKwkJbmV0ZGV2X2FsZXJ0KHByaXYtPmRldiwgIkVWRU5UOiBzbnIgaGlnaFxuIik7CiAJCWJyZWFrOwogCiAJY2FzZSBNQUNSRUdfSU5UX0NPREVfTUVTSF9BVVRPX1NUQVJURUQ6CiAJCS8qIElnbm9yZSBzcHVyaW91cyBhdXRvc3RhcnQgZXZlbnRzICovCi0JCWxic19wcl9pbmZvKCJFVkVOVDogTUVTSF9BVVRPX1NUQVJURUQgKGlnbm9yaW5nKVxuIik7CisJCW5ldGRldl9pbmZvKHByaXYtPmRldiwgIkVWRU5UOiBNRVNIX0FVVE9fU1RBUlRFRCAoaWdub3JpbmcpXG4iKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlsYnNfcHJfYWxlcnQoIkVWRU5UOiB1bmtub3duIGV2ZW50IGlkICVkXG4iLCBldmVudCk7CisJCW5ldGRldl9hbGVydChwcml2LT5kZXYsICJFVkVOVDogdW5rbm93biBldmVudCBpZCAlZFxuIiwgZXZlbnQpOwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlYnVnZnMuYwppbmRleCBmYmYzYjAzMy4uMjMyNTBmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlYnVnZnMuYwpAQCAtMTUxLDEzICsxNTEsMTQgQEAKIAkJcmV0ID0gbGJzX3NldF9ob3N0X3NsZWVwKHByaXYsIDApOwogCWVsc2UgaWYgKGhvc3Rfc2xlZXAgPT0gMSkgewogCQlpZiAocHJpdi0+d29sX2NyaXRlcmlhID09IEVIU19SRU1PVkVfV0FLRVVQKSB7Ci0JCQlsYnNfcHJfaW5mbygid2FrZSBwYXJhbWV0ZXJzIG5vdCBjb25maWd1cmVkIik7CisJCQluZXRkZXZfaW5mbyhwcml2LT5kZXYsCisJCQkJICAgICJ3YWtlIHBhcmFtZXRlcnMgbm90IGNvbmZpZ3VyZWRcbiIpOwogCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0X3VubG9jazsKIAkJfQogCQlyZXQgPSBsYnNfc2V0X2hvc3Rfc2xlZXAocHJpdiwgMSk7CiAJfSBlbHNlIHsKLQkJbGJzX3ByX2VycigiaW52YWxpZCBvcHRpb25cbiIpOworCQluZXRkZXZfZXJyKHByaXYtPmRldiwgImludmFsaWQgb3B0aW9uXG4iKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAl9CiAKQEAgLTg0OSwxNSArODUwLDE0IEBACiBzdGF0aWMgaW50IG51bV9vZl9pdGVtcyA9IEFSUkFZX1NJWkUoaXRlbXMpOwogCiAvKioKLSAqICBAYnJpZWYgcHJvYyByZWFkIGZ1bmN0aW9uCisgKiBsYnNfZGVidWdmc19yZWFkIC0gcHJvYyByZWFkIGZ1bmN0aW9uCiAgKgotICogIEBwYXJhbSBwYWdlCSAgIHBvaW50ZXIgdG8gYnVmZmVyCi0gKiAgQHBhcmFtIHMgICAgICAgcmVhZCBkYXRhIHN0YXJ0aW5nIHBvc2l0aW9uCi0gKiAgQHBhcmFtIG9mZiAgICAgb2Zmc2V0Ci0gKiAgQHBhcmFtIGNudCAgICAgY291bnRlcgotICogIEBwYXJhbSBlb2YgICAgIGVuZCBvZiBmaWxlIGZsYWcKLSAqICBAcGFyYW0gZGF0YSAgICBkYXRhIHRvIG91dHB1dAotICogIEByZXR1cm4gCSAgIG51bWJlciBvZiBvdXRwdXQgZGF0YQorICogQGZpbGU6CWZpbGUgdG8gcmVhZAorICogQHVzZXJidWY6CXBvaW50ZXIgdG8gYnVmZmVyCisgKiBAY291bnQ6CW51bWJlciBvZiBieXRlcyB0byByZWFkCisgKiBAcHBvczoJcmVhZCBkYXRhIHN0YXJ0aW5nIHBvc2l0aW9uCisgKgorICogcmV0dXJuczoJYW1vdW50IG9mIGRhdGEgcmVhZCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlCiAgKi8KIHN0YXRpYyBzc2l6ZV90IGxic19kZWJ1Z2ZzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLAogCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCkBAIC04OTcsMTMgKzg5NywxNCBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgcHJvYyB3cml0ZSBmdW5jdGlvbgorICogbGJzX2RlYnVnZnNfd3JpdGUgLSBwcm9jIHdyaXRlIGZ1bmN0aW9uCiAgKgotICogIEBwYXJhbSBmCSAgIGZpbGUgcG9pbnRlcgotICogIEBwYXJhbSBidWYgICAgIHBvaW50ZXIgdG8gZGF0YSBidWZmZXIKLSAqICBAcGFyYW0gY250ICAgICBkYXRhIG51bWJlciB0byB3cml0ZQotICogIEBwYXJhbSBkYXRhICAgIGRhdGEgdG8gd3JpdGUKLSAqICBAcmV0dXJuIAkgICBudW1iZXIgb2YgZGF0YQorICogQGY6CQlmaWxlIHBvaW50ZXIKKyAqIEBidWY6CXBvaW50ZXIgdG8gZGF0YSBidWZmZXIKKyAqIEBjbnQ6CWRhdGEgbnVtYmVyIHRvIHdyaXRlCisgKiBAcHBvczoJZmlsZSBwb3NpdGlvbgorICoKKyAqIHJldHVybnM6CWFtb3VudCBvZiBkYXRhIHdyaXR0ZW4KICAqLwogc3RhdGljIHNzaXplX3QgbGJzX2RlYnVnZnNfd3JpdGUoc3RydWN0IGZpbGUgKmYsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCQkgICAgc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKQpAQCAtOTY2LDExICs5NjcsMTEgQEAKIH07CiAKIC8qKgotICogIEBicmllZiBjcmVhdGUgZGVidWcgcHJvYyBmaWxlCisgKiBsYnNfZGVidWdfaW5pdCAtIGNyZWF0ZSBkZWJ1ZyBwcm9jIGZpbGUKICAqCi0gKiAgQHBhcmFtIHByaXYJICAgcG9pbnRlciBzdHJ1Y3QgbGJzX3ByaXZhdGUKLSAqICBAcGFyYW0gZGV2ICAgICBwb2ludGVyIG5ldF9kZXZpY2UKLSAqICBAcmV0dXJuIAkgICBOL0EKKyAqIEBwcml2Oglwb2ludGVyIHRvICZzdHJ1Y3QgbGJzX3ByaXZhdGUKKyAqCisgKiByZXR1cm5zOglOL0EKICAqLwogc3RhdGljIHZvaWQgbGJzX2RlYnVnX2luaXQoc3RydWN0IGxic19wcml2YXRlICpwcml2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVjbC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVjbC5oCmluZGV4IDJhZTc1MmQuLmRhMGIwNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlY2wuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWNsLmgKQEAgLTEsOCArMSw4IEBACiAKLS8qKgotICAqICBUaGlzIGZpbGUgY29udGFpbnMgZGVjbGFyYXRpb24gcmVmZXJyaW5nIHRvCi0gICogIGZ1bmN0aW9ucyBkZWZpbmVkIGluIG90aGVyIHNvdXJjZSBmaWxlcwotICAqLworLyoKKyAqICBUaGlzIGZpbGUgY29udGFpbnMgZGVjbGFyYXRpb24gcmVmZXJyaW5nIHRvCisgKiAgZnVuY3Rpb25zIGRlZmluZWQgaW4gb3RoZXIgc291cmNlIGZpbGVzCisgKi8KIAogI2lmbmRlZiBfTEJTX0RFQ0xfSF8KICNkZWZpbmUgX0xCU19ERUNMX0hfCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWZzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWZzLmgKaW5kZXggZDAwYzcyOC4uYWI5NjZmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVmcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlZnMuaApAQCAtMSw3ICsxLDcgQEAKLS8qKgotICAqIFRoaXMgaGVhZGVyIGZpbGUgY29udGFpbnMgZ2xvYmFsIGNvbnN0YW50L2VudW0gZGVmaW5pdGlvbnMsCi0gICogZ2xvYmFsIHZhcmlhYmxlIGRlY2xhcmF0aW9uLgotICAqLworLyoKKyAqIFRoaXMgaGVhZGVyIGZpbGUgY29udGFpbnMgZ2xvYmFsIGNvbnN0YW50L2VudW0gZGVmaW5pdGlvbnMsCisgKiBnbG9iYWwgdmFyaWFibGUgZGVjbGFyYXRpb24uCisgKi8KICNpZm5kZWYgX0xCU19ERUZTX0hfCiAjZGVmaW5lIF9MQlNfREVGU19IXwogCkBAIC04OSwxMyArODksNiBAQAogI2RlZmluZSBsYnNfZGViX3NwaShmbXQsIGFyZ3MuLi4pICAgICAgIExCU19ERUJfTEwoTEJTX0RFQl9TUEksICIgc3BpIiwgZm10LCAjI2FyZ3MpCiAjZGVmaW5lIGxic19kZWJfY2ZnODAyMTEoZm10LCBhcmdzLi4uKSAgTEJTX0RFQl9MTChMQlNfREVCX0NGRzgwMjExLCAiIGNmZzgwMjExIiwgZm10LCAjI2FyZ3MpCiAKLSNkZWZpbmUgbGJzX3ByX2luZm8oZm9ybWF0LCBhcmdzLi4uKSBcCi0JcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSI6ICIgZm9ybWF0LCAjIyBhcmdzKQotI2RlZmluZSBsYnNfcHJfZXJyKGZvcm1hdCwgYXJncy4uLikgXAotCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSI6ICIgZm9ybWF0LCAjIyBhcmdzKQotI2RlZmluZSBsYnNfcHJfYWxlcnQoZm9ybWF0LCBhcmdzLi4uKSBcCi0JcHJpbnRrKEtFUk5fQUxFUlQgRFJWX05BTUUiOiAiIGZvcm1hdCwgIyMgYXJncykKLQogI2lmZGVmIERFQlVHCiBzdGF0aWMgaW5saW5lIHZvaWQgbGJzX2RlYl9oZXgodW5zaWduZWQgaW50IGdycCwgY29uc3QgY2hhciAqcHJvbXB0LCB1OCAqYnVmLCBpbnQgbGVuKQogewpAQCAtMTIzLDE5ICsxMTYsMTkgQEAKIAogCiAKLS8qKiBCdWZmZXIgQ29uc3RhbnRzICovCisvKiBCdWZmZXIgQ29uc3RhbnRzICovCiAKIC8qCVRoZSBzaXplIG9mIFNRIG1lbW9yeSBQUEEsIERQQSBhcmUgOCBEV09SRHMsIHRoYXQga2VlcCB0aGUgcGh5c2ljYWwKLSoJYWRkcmVzc2VzIG9mIFR4UEQgYnVmZmVycy4gU3RhdGlvbiBoYXMgb25seSA4IFR4UEQgYXZhaWxhYmxlLCBXaGVyZWFzCi0qCWRyaXZlciBoYXMgbW9yZSBsb2NhbCBUeFBEcy4gRWFjaCBUeFBEIG9uIHRoZSBob3N0IG1lbW9yeSBpcyBhc3NvY2lhdGVkCi0qCXdpdGggYSBUeCBjb250cm9sIG5vZGUuIFRoZSBkcml2ZXIgbWFpbnRhaW5zIDggUnhQRCBkZXNjcmlwdG9ycyBmb3IKLSoJc3RhdGlvbiBmaXJtd2FyZSB0byBzdG9yZSBSeCBwYWNrZXQgaW5mb3JtYXRpb24uCi0qCi0qCUN1cnJlbnQgdmVyc2lvbiBvZiBNQUMgaGFzIGEgMzJ4NiBtdWx0aWNhc3QgYWRkcmVzcyBidWZmZXIuCi0qCi0qCTgwMi4xMWIgY2FuIGhhdmUgdXAgdG8gIDE0IGNoYW5uZWxzLCB0aGUgZHJpdmVyIGtlZXBzIHRoZQotKglCU1NJRChNQUMgYWRkcmVzcykgb2YgZWFjaCBBUHMgb3IgQWQgaG9jIHN0YXRpb25zIGl0IGhhcyBzZW5zZWQuCi0qLworICoJYWRkcmVzc2VzIG9mIFR4UEQgYnVmZmVycy4gU3RhdGlvbiBoYXMgb25seSA4IFR4UEQgYXZhaWxhYmxlLCBXaGVyZWFzCisgKglkcml2ZXIgaGFzIG1vcmUgbG9jYWwgVHhQRHMuIEVhY2ggVHhQRCBvbiB0aGUgaG9zdCBtZW1vcnkgaXMgYXNzb2NpYXRlZAorICoJd2l0aCBhIFR4IGNvbnRyb2wgbm9kZS4gVGhlIGRyaXZlciBtYWludGFpbnMgOCBSeFBEIGRlc2NyaXB0b3JzIGZvcgorICoJc3RhdGlvbiBmaXJtd2FyZSB0byBzdG9yZSBSeCBwYWNrZXQgaW5mb3JtYXRpb24uCisgKgorICoJQ3VycmVudCB2ZXJzaW9uIG9mIE1BQyBoYXMgYSAzMng2IG11bHRpY2FzdCBhZGRyZXNzIGJ1ZmZlci4KKyAqCisgKgk4MDIuMTFiIGNhbiBoYXZlIHVwIHRvICAxNCBjaGFubmVscywgdGhlIGRyaXZlciBrZWVwcyB0aGUKKyAqCUJTU0lEKE1BQyBhZGRyZXNzKSBvZiBlYWNoIEFQcyBvciBBZCBob2Mgc3RhdGlvbnMgaXQgaGFzIHNlbnNlZC4KKyAqLwogCiAjZGVmaW5lIE1SVkRSVl9NQVhfTVVMVElDQVNUX0xJU1RfU0laRQkzMgogI2RlZmluZSBMQlNfTlVNX0NNRF9CVUZGRVJTICAgICAgICAgICAgIDEwCkBAIC0xNjYsNyArMTU5LDcgQEAKICNkZWZpbmUgV09MX1JFU1VMVF9OT1NQQ19FUlIJCTEKICNkZWZpbmUgV09MX1JFU1VMVF9FRVhJU1RfRVJSCQkyCiAKLS8qKiBNaXNjIGNvbnN0YW50cyAqLworLyogTWlzYyBjb25zdGFudHMgKi8KIC8qIFRoaXMgc2VjdGlvbiBkZWZpbmVzIDgwMi4xMSBzcGVjaWZpYyBjb250YW50cyAqLwogCiAjZGVmaW5lIE1SVkRSVl9NQVhfQlNTX0RFU0NSSVBUUwkJMTYKQEAgLTE4Myw3ICsxNzYsOCBAQAogCiAjZGVmaW5lIE1BUlZFTExfTUVTSF9JRV9MRU5HVEgJCTkKIAotLyogVmFsdWVzIHVzZWQgdG8gcG9wdWxhdGUgdGhlIHN0cnVjdCBtcnZsX21lc2hfaWUuICBUaGUgb25seSB0aW1lIHlvdSBuZWVkIHRoaXMKKy8qCisgKiBWYWx1ZXMgdXNlZCB0byBwb3B1bGF0ZSB0aGUgc3RydWN0IG1ydmxfbWVzaF9pZS4gIFRoZSBvbmx5IHRpbWUgeW91IG5lZWQgdGhpcwogICogaXMgd2hlbiBlbmFibGluZyB0aGUgbWVzaCB1c2luZyBDTURfTUVTSF9DT05GSUcuCiAgKi8KICNkZWZpbmUgTUFSVkVMTF9NRVNIX0lFX1RZUEUJCTQKQEAgLTE5Myw3ICsxODcsNyBAQAogI2RlZmluZSBNQVJWRUxMX01FU0hfTUVUUklDX0lECQkwCiAjZGVmaW5lIE1BUlZFTExfTUVTSF9DQVBBQklMSVRZCQkwCiAKLS8qKiBJTlQgc3RhdHVzIEJpdCBEZWZpbml0aW9uKi8KKy8qIElOVCBzdGF0dXMgQml0IERlZmluaXRpb24gKi8KICNkZWZpbmUgTVJWRFJWX1RYX0ROTERfUkRZCQkweDAwMDEKICNkZWZpbmUgTVJWRFJWX1JYX1VQTERfUkRZCQkweDAwMDIKICNkZWZpbmUgTVJWRFJWX0NNRF9ETkxEX1JEWQkJMHgwMDA0CkBAIC0yMDgsNTkgKzIwMiw2MyBAQAogI2RlZmluZSBUUENfREVGQVVMVF9QMSAxMAogI2RlZmluZSBUUENfREVGQVVMVF9QMiAxMwogCi0vKiogVHhQRCBzdGF0dXMgKi8KKy8qIFR4UEQgc3RhdHVzICovCiAKLS8qCVN0YXRpb24gZmlybXdhcmUgdXNlIFR4UEQgc3RhdHVzIGZpZWxkIHRvIHJlcG9ydCBmaW5hbCBUeCB0cmFuc21pdAotKglyZXN1bHQsIEJpdCBtYXNrcyBhcmUgdXNlZCB0byBwcmVzZW50IGNvbWJpbmVkIHNpdHVhdGlvbnMuCi0qLworLyoKKyAqCVN0YXRpb24gZmlybXdhcmUgdXNlIFR4UEQgc3RhdHVzIGZpZWxkIHRvIHJlcG9ydCBmaW5hbCBUeCB0cmFuc21pdAorICoJcmVzdWx0LCBCaXQgbWFza3MgYXJlIHVzZWQgdG8gcHJlc2VudCBjb21iaW5lZCBzaXR1YXRpb25zLgorICovCiAKICNkZWZpbmUgTVJWRFJWX1R4UERfUE9XRVJfTUdNVF9OVUxMX1BBQ0tFVCAweDAxCiAjZGVmaW5lIE1SVkRSVl9UeFBEX1BPV0VSX01HTVRfTEFTVF9QQUNLRVQgMHgwOAogCi0vKiogVHggbWVzaCBmbGFnICovCi0vKiBDdXJyZW50bHkgd2UgYXJlIHVzaW5nIG5vcm1hbCBXRFMgZmxhZyBhcyBtZXNoIGZsYWcuCisvKiBUeCBtZXNoIGZsYWcgKi8KKy8qCisgKiBDdXJyZW50bHkgd2UgYXJlIHVzaW5nIG5vcm1hbCBXRFMgZmxhZyBhcyBtZXNoIGZsYWcuCiAgKiBUT0RPOiBjaGFuZ2UgdG8gcHJvcGVyIG1lc2ggZmxhZyB3aGVuIE1BQyB1bmRlcnN0YW5kcyBpdC4KICAqLwogI2RlZmluZSBUeFBEX0NPTlRST0xfV0RTX0ZSQU1FICgxPDwxNykKICNkZWZpbmUgVHhQRF9NRVNIX0ZSQU1FIFR4UERfQ09OVFJPTF9XRFNfRlJBTUUKIAotLyoqIE1lc2ggaW50ZXJmYWNlIElEICovCisvKiBNZXNoIGludGVyZmFjZSBJRCAqLwogI2RlZmluZSBNRVNIX0lGQUNFX0lECQkJCQkweDAwMDEKLS8qKiBNZXNoIGlkIHNob3VsZCBiZSBpbiBiaXRzIDE0LTEzLTEyICovCisvKiBNZXNoIGlkIHNob3VsZCBiZSBpbiBiaXRzIDE0LTEzLTEyICovCiAjZGVmaW5lIE1FU0hfSUZBQ0VfQklUX09GRlNFVAkJCQkweDAwMGMKLS8qKiBNZXNoIGVuYWJsZSBiaXQgaW4gRlcgY2FwYWJpbGl0eSAqLworLyogTWVzaCBlbmFibGUgYml0IGluIEZXIGNhcGFiaWxpdHkgKi8KICNkZWZpbmUgTUVTSF9DQVBJTkZPX0VOQUJMRV9NQVNLCQkJKDE8PDE2KQogCi0vKiogRlcgZGVmaW5pdGlvbiBmcm9tIE1hcnZlbGwgdjQgKi8KKy8qIEZXIGRlZmluaXRpb24gZnJvbSBNYXJ2ZWxsIHY0ICovCiAjZGVmaW5lIE1SVkxfRldfVjQJCQkJCSgweDA0KQotLyoqIEZXIGRlZmluaXRpb24gZnJvbSBNYXJ2ZWxsIHY1ICovCisvKiBGVyBkZWZpbml0aW9uIGZyb20gTWFydmVsbCB2NSAqLwogI2RlZmluZSBNUlZMX0ZXX1Y1CQkJCQkoMHgwNSkKLS8qKiBGVyBkZWZpbml0aW9uIGZyb20gTWFydmVsbCB2MTAgKi8KKy8qIEZXIGRlZmluaXRpb24gZnJvbSBNYXJ2ZWxsIHYxMCAqLwogI2RlZmluZSBNUlZMX0ZXX1YxMAkJCQkJKDB4MGEpCi0vKiogRlcgbWFqb3IgcmV2aXNpb24gZGVmaW5pdGlvbiAqLworLyogRlcgbWFqb3IgcmV2aXNpb24gZGVmaW5pdGlvbiAqLwogI2RlZmluZSBNUlZMX0ZXX01BSk9SX1JFVih4KQkJCQkoKHgpPj4yNCkKIAotLyoqIFJ4UEQgc3RhdHVzICovCisvKiBSeFBEIHN0YXR1cyAqLwogCiAjZGVmaW5lIE1SVkRSVl9SWFBEX1NUQVRVU19PSyAgICAgICAgICAgICAgICAweDAwMDEKIAotLyoqIFJ4UEQgc3RhdHVzIC0gUmVjZWl2ZWQgcGFja2V0IHR5cGVzICovCi0vKiogUnggbWVzaCBmbGFnICovCi0vKiBDdXJyZW50bHkgd2UgYXJlIHVzaW5nIG5vcm1hbCBXRFMgZmxhZyBhcyBtZXNoIGZsYWcuCisvKiBSeFBEIHN0YXR1cyAtIFJlY2VpdmVkIHBhY2tldCB0eXBlcyAqLworLyogUnggbWVzaCBmbGFnICovCisvKgorICogQ3VycmVudGx5IHdlIGFyZSB1c2luZyBub3JtYWwgV0RTIGZsYWcgYXMgbWVzaCBmbGFnLgogICogVE9ETzogY2hhbmdlIHRvIHByb3BlciBtZXNoIGZsYWcgd2hlbiBNQUMgdW5kZXJzdGFuZHMgaXQuCiAgKi8KICNkZWZpbmUgUnhQRF9DT05UUk9MX1dEU19GUkFNRSAoMHg0MCkKICNkZWZpbmUgUnhQRF9NRVNIX0ZSQU1FIFJ4UERfQ09OVFJPTF9XRFNfRlJBTUUKIAotLyoqIFJTU0ktcmVsYXRlZCBkZWZpbmVzICovCi0vKglSU1NJIGNvbnN0YW50cyBhcmUgdXNlZCB0byBpbXBsZW1lbnQgODAyLjExIFJTU0kgdGhyZXNob2xkCi0qCWluZGljYXRpb24uIGlmIHRoZSBSeCBwYWNrZXQgc2lnbmFsIGdvdCB0b28gd2VhayBmb3IgNSBjb25zZWN1dGl2ZQotKgl0aW1lcywgbWluaXBvcnQgZHJpdmVyIChkcml2ZXIpIHdpbGwgcmVwb3J0IHRoaXMgZXZlbnQgdG8gd3JhcHBlcgotKi8KKy8qIFJTU0ktcmVsYXRlZCBkZWZpbmVzICovCisvKgorICoJUlNTSSBjb25zdGFudHMgYXJlIHVzZWQgdG8gaW1wbGVtZW50IDgwMi4xMSBSU1NJIHRocmVzaG9sZAorICoJaW5kaWNhdGlvbi4gaWYgdGhlIFJ4IHBhY2tldCBzaWduYWwgZ290IHRvbyB3ZWFrIGZvciA1IGNvbnNlY3V0aXZlCisgKgl0aW1lcywgbWluaXBvcnQgZHJpdmVyIChkcml2ZXIpIHdpbGwgcmVwb3J0IHRoaXMgZXZlbnQgdG8gd3JhcHBlcgorICovCiAKICNkZWZpbmUgTVJWRFJWX05GX0RFRkFVTFRfU0NBTl9WQUxVRQkJKC05NikKIAotLyoqIFJUUy9GUkFHIHJlbGF0ZWQgZGVmaW5lcyAqLworLyogUlRTL0ZSQUcgcmVsYXRlZCBkZWZpbmVzICovCiAjZGVmaW5lIE1SVkRSVl9SVFNfTUlOX1ZBTFVFCQkwCiAjZGVmaW5lIE1SVkRSVl9SVFNfTUFYX1ZBTFVFCQkyMzQ3CiAjZGVmaW5lIE1SVkRSVl9GUkFHX01JTl9WQUxVRQkJMjU2CkBAIC0zMDAsMzYgKzI5OCwzNiBAQAogCiAjZGVmaW5lCU1BWF9MRURTCQkJOAogCi0vKiogR2xvYmFsIFZhcmlhYmxlIERlY2xhcmF0aW9uICovCisvKiBHbG9iYWwgVmFyaWFibGUgRGVjbGFyYXRpb24gKi8KIGV4dGVybiBjb25zdCBjaGFyIGxic19kcml2ZXJfdmVyc2lvbltdOwogZXh0ZXJuIHUxNiBsYnNfcmVnaW9uX2NvZGVfdG9faW5kZXhbTVJWRFJWX01BWF9SRUdJT05fQ09ERV07CiAKIAotLyoqIEVOVU0gZGVmaW5pdGlvbiovCi0vKiogU05STkZfVFlQRSAqLworLyogRU5VTSBkZWZpbml0aW9uICovCisvKiBTTlJORl9UWVBFICovCiBlbnVtIFNOUk5GX1RZUEUgewogCVRZUEVfQkVBQ09OID0gMCwKIAlUWVBFX1JYUEQsCiAJTUFYX1RZUEVfQgogfTsKIAotLyoqIFNOUk5GX0RBVEEqLworLyogU05STkZfREFUQSAqLwogZW51bSBTTlJORl9EQVRBIHsKIAlUWVBFX05PQVZHID0gMCwKIAlUWVBFX0FWRywKIAlNQVhfVFlQRV9BVkcKIH07CiAKLS8qKiBMQlNfODAyXzExX1BPV0VSX01PREUgKi8KKy8qIExCU184MDJfMTFfUE9XRVJfTU9ERSAqLwogZW51bSBMQlNfODAyXzExX1BPV0VSX01PREUgewogCUxCUzgwMl8xMVBPV0VSTU9ERUNBTSwKIAlMQlM4MDJfMTFQT1dFUk1PREVNQVhfUFNQLAogCUxCUzgwMl8xMVBPV0VSTU9ERUZBU1RfUFNQLAotCS8qbm90IGEgcmVhbCBtb2RlLCBkZWZpbmVkIGFzIGFuIHVwcGVyIGJvdW5kICovCisJLyogbm90IGEgcmVhbCBtb2RlLCBkZWZpbmVkIGFzIGFuIHVwcGVyIGJvdW5kICovCiAJTEJTODAyXzExUE9XRU1PREVNQVgKIH07CiAKLS8qKiBQU19TVEFURSAqLworLyogUFNfU1RBVEUgKi8KIGVudW0gUFNfU1RBVEUgewogCVBTX1NUQVRFX0ZVTExfUE9XRVIsCiAJUFNfU1RBVEVfQVdBS0UsCkBAIC0zMzcsNyArMzM1LDcgQEAKIAlQU19TVEFURV9TTEVFUAogfTsKIAotLyoqIEROTERfU1RBVEUgKi8KKy8qIEROTERfU1RBVEUgKi8KIGVudW0gRE5MRF9TVEFURSB7CiAJRE5MRF9SRVNfUkVDRUlWRUQsCiAJRE5MRF9EQVRBX1NFTlQsCkBAIC0zNDUsMTkgKzM0MywxOSBAQAogCUROTERfQk9PVENNRF9TRU5ULAogfTsKIAotLyoqIExCU19NRURJQV9TVEFURSAqLworLyogTEJTX01FRElBX1NUQVRFICovCiBlbnVtIExCU19NRURJQV9TVEFURSB7CiAJTEJTX0NPTk5FQ1RFRCwKIAlMQlNfRElTQ09OTkVDVEVECiB9OwogCi0vKiogTEJTXzgwMl8xMV9QUklWQUNZX0ZJTFRFUiAqLworLyogTEJTXzgwMl8xMV9QUklWQUNZX0ZJTFRFUiAqLwogZW51bSBMQlNfODAyXzExX1BSSVZBQ1lfRklMVEVSIHsKIAlMQlM4MDJfMTFQUklWRklMVEVSQUNDRVBUQUxMLAogCUxCUzgwMl8xMVBSSVZGSUxURVI4MDIxWFdFUAogfTsKIAotLyoqIG12X21zX3R5cGUgKi8KKy8qIG12X21zX3R5cGUgKi8KIGVudW0gbXZfbXNfdHlwZSB7CiAJTVZNU19EQVQgPSAwLAogCU1WTVNfQ01EID0gMSwKQEAgLTM2NSwxNCArMzYzLDE0IEBACiAJTVZNU19FVkVOVAogfTsKIAotLyoqIEtFWV9UWVBFX0lEICovCisvKiBLRVlfVFlQRV9JRCAqLwogZW51bSBLRVlfVFlQRV9JRCB7CiAJS0VZX1RZUEVfSURfV0VQID0gMCwKIAlLRVlfVFlQRV9JRF9US0lQLAogCUtFWV9UWVBFX0lEX0FFUwogfTsKIAotLyoqIEtFWV9JTkZPX1dQQSAoYXBwbGllcyB0byBib3RoIFRLSVAgYW5kIEFFUy9DQ01QKSAqLworLyogS0VZX0lORk9fV1BBIChhcHBsaWVzIHRvIGJvdGggVEtJUCBhbmQgQUVTL0NDTVApICovCiBlbnVtIEtFWV9JTkZPX1dQQSB7CiAJS0VZX0lORk9fV1BBX01DQVNUID0gMHgwMSwKIAlLRVlfSU5GT19XUEFfVU5JQ0FTVCA9IDB4MDIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCmluZGV4IGJjNDYxZWIuLjc2ZDAxOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCkBAIC0xLDggKzEsOCBAQAotLyoqCi0gICogVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmluaXRpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgc3BlY2lmaWMKLSAgKiB0byBNYXJ2ZWxsIDgwMi4xMSBOSUMuIEl0IGNvbnRhaW5zIHRoZSBEZXZpY2UgSW5mb3JtYXRpb24KLSAgKiBzdHJ1Y3R1cmUgc3RydWN0IGxic19wcml2YXRlLi4KLSAgKi8KKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgZGVmaW5pdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyBzcGVjaWZpYworICogdG8gTWFydmVsbCA4MDIuMTEgTklDLiBJdCBjb250YWlucyB0aGUgRGV2aWNlIEluZm9ybWF0aW9uCisgKiBzdHJ1Y3R1cmUgc3RydWN0IGxic19wcml2YXRlLi4KKyAqLwogI2lmbmRlZiBfTEJTX0RFVl9IXwogI2RlZmluZSBfTEJTX0RFVl9IXwogCkBAIC0xMiw3ICsxMiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgogCi0vKiogc2xlZXBfcGFyYW1zICovCisvKiBzbGVlcF9wYXJhbXMgKi8KIHN0cnVjdCBzbGVlcF9wYXJhbXMgewogCXVpbnQxNl90IHNwX2Vycm9yOwogCXVpbnQxNl90IHNwX29mZnNldDsKQEAgLTIzLDcgKzIzLDcgQEAKIH07CiAKIAotLyoqIFByaXZhdGUgc3RydWN0dXJlIGZvciB0aGUgTVYgZGV2aWNlICovCisvKiBQcml2YXRlIHN0cnVjdHVyZSBmb3IgdGhlIE1WIGRldmljZSAqLwogc3RydWN0IGxic19wcml2YXRlIHsKIAogCS8qIEJhc2ljIG5ldHdvcmtpbmcgKi8KQEAgLTEyNSwxMiArMTI1LDEyIEBACiAJLyogRXZlbnRzIHNlbnQgZnJvbSBoYXJkd2FyZSB0byBkcml2ZXIgKi8KIAlzdHJ1Y3Qga2ZpZm8gZXZlbnRfZmlmbzsKIAotCS8qKiB0aHJlYWQgdG8gc2VydmljZSBpbnRlcnJ1cHRzICovCisJLyogdGhyZWFkIHRvIHNlcnZpY2UgaW50ZXJydXB0cyAqLwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqbWFpbl90aHJlYWQ7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdHE7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtfdGhyZWFkOwogCi0JLyoqIEVuY3J5cHRpb24gc3R1ZmYgKi8KKwkvKiBFbmNyeXB0aW9uIHN0dWZmICovCiAJdTggYXV0aHR5cGVfYXV0bzsKIAl1OCB3ZXBfdHhfa2V5OwogCXU4IHdlcF9rZXlbNF1bV0xBTl9LRVlfTEVOX1dFUDEwNF07CkBAIC0xNjIsNyArMTYyLDcgQEAKIAlzMTYgdHhwb3dlcl9taW47CiAJczE2IHR4cG93ZXJfbWF4OwogCi0JLyoqIFNjYW5uaW5nICovCisJLyogU2Nhbm5pbmcgKi8KIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHNjYW5fd29yazsKIAlpbnQgc2Nhbl9jaGFubmVsOwogCS8qIFF1ZXVlIG9mIHRoaW5ncyB3YWl0aW5nIGZvciBzY2FuIGNvbXBsZXRpb24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2V0aHRvb2wuYwppbmRleCA1MDE5M2FhLi4yOWRiY2U0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZXRodG9vbC5jCkBAIC0yMCw3ICsyMCw4IEBACiAJc3RyY3B5KGluZm8tPnZlcnNpb24sIGxic19kcml2ZXJfdmVyc2lvbik7CiB9CiAKLS8qIEFsbCA4Mzg4IHBhcnRzIGhhdmUgMTZLaUIgRUVQUk9NIHNpemUgYXQgdGhlIHRpbWUgb2Ygd3JpdGluZy4KKy8qCisgKiBBbGwgODM4OCBwYXJ0cyBoYXZlIDE2S2lCIEVFUFJPTSBzaXplIGF0IHRoZSB0aW1lIG9mIHdyaXRpbmcuCiAgKiBJbiBjYXNlIHRoYXQgY2hhbmdlcyB0aGlzIG5lZWRzIGZpeGluZy4KICAqLwogI2RlZmluZSBMQlNfRUVQUk9NX0xFTiAxNjM4NApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaG9zdC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaG9zdC5oCmluZGV4IDZjYjY5MzUuLjJlMmRiZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2hvc3QuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ob3N0LmgKQEAgLTEsNyArMSw3IEBACi0vKioKLSAgKiBUaGlzIGZpbGUgZnVuY3Rpb24gcHJvdG90eXBlcywgZGF0YSBzdHJ1Y3R1cmUKLSAgKiBhbmQgIGRlZmluaXRpb25zIGZvciBhbGwgdGhlIGhvc3Qvc3RhdGlvbiBjb21tYW5kcwotICAqLworLyoKKyAqIFRoaXMgZmlsZSBmdW5jdGlvbiBwcm90b3R5cGVzLCBkYXRhIHN0cnVjdHVyZQorICogYW5kICBkZWZpbml0aW9ucyBmb3IgYWxsIHRoZSBob3N0L3N0YXRpb24gY29tbWFuZHMKKyAqLwogCiAjaWZuZGVmIF9MQlNfSE9TVF9IXwogI2RlZmluZSBfTEJTX0hPU1RfSF8KQEAgLTEzLDkgKzEzLDEwIEBACiAKICNkZWZpbmUgQ01EX09QVElPTl9XQUlURk9SUlNQICAgICAgICAgICAgICAgICAgIDB4MDAwMgogCi0vKiogSG9zdCBjb21tYW5kIElEcyAqLworLyogSG9zdCBjb21tYW5kIElEcyAqLwogCi0vKiBSZXR1cm4gY29tbWFuZCBhcmUgYWxtb3N0IGFsd2F5cyB0aGUgc2FtZSBhcyB0aGUgaG9zdCBjb21tYW5kLCBidXQgd2l0aAorLyoKKyAqIFJldHVybiBjb21tYW5kIGFyZSBhbG1vc3QgYWx3YXlzIHRoZSBzYW1lIGFzIHRoZSBob3N0IGNvbW1hbmQsIGJ1dCB3aXRoCiAgKiBiaXQgMTUgc2V0IGhpZ2guICBUaGVyZSBhcmUgYSBmZXcgZXhjZXB0aW9ucywgdGhvdWdoLi4uCiAgKi8KICNkZWZpbmUgQ01EX1JFVChjbWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDgwMDAgfCBjbWQpCkBAIC0yNTEsNyArMjUyLDcgQEAKIAlDTURfVFlQRV9NRVNIX0dFVF9NRVNIX0lFLCAvKiBHRVRfREVGQVVMVFMgaXMgc3VwZXJzZXQgb2YgR0VUX01FU0hJRSAqLwogfTsKIAotLyoqIENhcmQgRXZlbnQgZGVmaW5pdGlvbiAqLworLyogQ2FyZCBFdmVudCBkZWZpbml0aW9uICovCiAjZGVmaW5lIE1BQ1JFR19JTlRfQ09ERV9UWF9QUEFfRlJFRQkJMAogI2RlZmluZSBNQUNSRUdfSU5UX0NPREVfVFhfRE1BX0RPTkUJCTEKICNkZWZpbmUgTUFDUkVHX0lOVF9DT0RFX0xJTktfTE9TVF9XX1NDQU4JMgpAQCAtNjI0LDEyICs2MjUsMTQgQEAKIHN0cnVjdCBjbWRfZHNfODAyXzExX3Jzc2kgewogCXN0cnVjdCBjbWRfaGVhZGVyIGhkcjsKIAotCS8qIHJlcXVlc3Q6ICBudW1iZXIgb2YgYmVhY29ucyAoTikgdG8gYXZlcmFnZSB0aGUgU05SIGFuZCBORiBvdmVyCisJLyoKKwkgKiByZXF1ZXN0OiAgbnVtYmVyIG9mIGJlYWNvbnMgKE4pIHRvIGF2ZXJhZ2UgdGhlIFNOUiBhbmQgTkYgb3ZlcgogCSAqIHJlc3BvbnNlOiBTTlIgb2YgbW9zdCByZWNlbnQgYmVhY29uCiAJICovCiAJX19sZTE2IG5fb3Jfc25yOwogCi0JLyogVGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIG9ubHkgc2V0IGluIHRoZSByZXNwb25zZS4KKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSBvbmx5IHNldCBpbiB0aGUgcmVzcG9uc2UuCiAJICogSW4gdGhlIHJlcXVlc3QgdGhlc2UgYXJlIHJlc2VydmVkIGFuZCBzaG91bGQgYmUgc2V0IHRvIDAuCiAJICovCiAJX19sZTE2IG5mOyAgICAgICAvKiBtb3N0IHJlY2VudCBiZWFjb24gbm9pc2UgZmxvb3IgKi8KQEAgLTY4MCwxNCArNjgzLDE2IEBACiAKIAlfX2xlMTYgYWN0aW9uOwogCi0JLyogSW50ZXJ2YWwgZm9yIGtlZXBhbGl2ZSBpbiBQUyBtb2RlOgorCS8qCisJICogSW50ZXJ2YWwgZm9yIGtlZXBhbGl2ZSBpbiBQUyBtb2RlOgogCSAqIDB4MDAwMCA9IGRvbid0IGNoYW5nZQogCSAqIDB4MDAxRSA9IGZpcm13YXJlIGRlZmF1bHQKIAkgKiAweEZGRkYgPSBkaXNhYmxlCiAJICovCiAJX19sZTE2IG51bGxwa3RpbnRlcnZhbDsKIAotCS8qIE51bWJlciBvZiBEVElNIGludGVydmFscyB0byB3YWtlIHVwIGZvcjoKKwkvKgorCSAqIE51bWJlciBvZiBEVElNIGludGVydmFscyB0byB3YWtlIHVwIGZvcjoKIAkgKiAwID0gZG9uJ3QgY2hhbmdlCiAJICogMSA9IGZpcm13YXJlIGRlZmF1bHQKIAkgKiA1ID0gbWF4CkBAIC02OTcsNyArNzAyLDggQEAKIAlfX2xlMTYgcmVzZXJ2ZWQ7CiAJX19sZTE2IGxvY2FsbGlzdGVuaW50ZXJ2YWw7CiAKLQkvKiBBZEhvYyBhd2FrZSBwZXJpb2QgKEZXIHY5KyBvbmx5KToKKwkvKgorCSAqIEFkSG9jIGF3YWtlIHBlcmlvZCAoRlcgdjkrIG9ubHkpOgogCSAqIDAgPSBkb24ndCBjaGFuZ2UKIAkgKiAxID0gYWx3YXlzIGF3YWtlIChJRUVFIHN0YW5kYXJkIGJlaGF2aW9yKQogCSAqIDIgLSAzMSA9IHNsZWVwIGZvciAobiAtIDEpIHBlcmlvZHMgYW5kIGF3YWtlIGZvciAxIHBlcmlvZApAQCAtNzcxLDcgKzc3Nyw4IEBACiAJX19sZTE2IGNhcGFiaWxpdHk7CiAJdTggcmF0ZXNbTUFYX1JBVEVTXTsKIAotCS8qIERPIE5PVCBBREQgQU5ZIEZJRUxEUyBUTyBUSElTIFNUUlVDVFVSRS4gSXQgaXMgdXNlZCBiZWxvdyBpbiB0aGUKKwkvKgorCSAqIERPIE5PVCBBREQgQU5ZIEZJRUxEUyBUTyBUSElTIFNUUlVDVFVSRS4gSXQgaXMgdXNlZCBiZWxvdyBpbiB0aGUKIAkgKiBBZGhvYyBqb2luIGNvbW1hbmQgYW5kIHdpbGwgY2F1c2UgYSBiaW5hcnkgbGF5b3V0IG1pc21hdGNoIHdpdGgKIAkgKiB0aGUgZmlybXdhcmUKIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5jCmluZGV4IDg3MTJjYjIuLjYzZWQ1NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfY3MuYwpAQCAtMjEsNiArMjEsOCBAQAogCiAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTMxMiw3ICszMTQsOCBAQAogI2RlZmluZSBDRjgzODVfTUFORklECQkweDAyZGYKICNkZWZpbmUgQ0Y4Mzg1X0NBUkRJRAkJMHg4MTAzCiAKLS8qIEZJWE1FOiBqdXN0IHVzZSB0aGUgJ2RyaXZlcl9pbmZvJyBmaWVsZCBvZiAnc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQnIHdoZW4KKy8qCisgKiBGSVhNRToganVzdCB1c2UgdGhlICdkcml2ZXJfaW5mbycgZmllbGQgb2YgJ3N0cnVjdCBwY21jaWFfZGV2aWNlX2lkJyB3aGVuCiAgKiB0aGF0IGdldHMgZml4ZWQuICBDdXJyZW50bHkgdGhlcmUncyBubyB3YXkgdG8gYWNjZXNzIGl0IGZyb20gdGhlIHByb2JlIGhvb2suCiAgKi8KIHN0YXRpYyBpbmxpbmUgdTMyIGdldF9tb2RlbCh1MTYgbWFuZl9pZCwgdTE2IGNhcmRfaWQpCkBAIC0zNjEsNyArMzY0LDcgQEAKIAkJaWYgKHN0YXR1cyAmIElGX0NTX0JJVF9DT01NQU5EKQogCQkJYnJlYWs7CiAJCWlmICgrK2xvb3BzID4gMTAwKSB7Ci0JCQlsYnNfcHJfZXJyKCJjYXJkIG5vdCByZWFkeSBmb3IgY29tbWFuZHNcbiIpOworCQkJbmV0ZGV2X2Vycihwcml2LT5kZXYsICJjYXJkIG5vdCByZWFkeSBmb3IgY29tbWFuZHNcbiIpOwogCQkJZ290byBkb25lOwogCQl9CiAJCW1kZWxheSgxKTsKQEAgLTQzMSwxNCArNDM0LDE2IEBACiAJLyogaXMgaGFyZHdhcmUgcmVhZHk/ICovCiAJc3RhdHVzID0gaWZfY3NfcmVhZDE2KHByaXYtPmNhcmQsIElGX0NTX0NBUkRfU1RBVFVTKTsKIAlpZiAoKHN0YXR1cyAmIElGX0NTX0JJVF9SRVNQKSA9PSAwKSB7Ci0JCWxic19wcl9lcnIoIm5vIGNtZCByZXNwb25zZSBpbiBjYXJkXG4iKTsKKwkJbmV0ZGV2X2Vycihwcml2LT5kZXYsICJubyBjbWQgcmVzcG9uc2UgaW4gY2FyZFxuIik7CiAJCSpsZW4gPSAwOwogCQlnb3RvIG91dDsKIAl9CiAKIAkqbGVuID0gaWZfY3NfcmVhZDE2KHByaXYtPmNhcmQsIElGX0NTX1JFU1BfTEVOKTsKIAlpZiAoKCpsZW4gPT0gMCkgfHwgKCpsZW4gPiBMQlNfQ01EX0JVRkZFUl9TSVpFKSkgewotCQlsYnNfcHJfZXJyKCJjYXJkIGNtZCBidWZmZXIgaGFzIGludmFsaWQgIyBvZiBieXRlcyAoJWQpXG4iLCAqbGVuKTsKKwkJbmV0ZGV2X2Vycihwcml2LT5kZXYsCisJCQkgICAiY2FyZCBjbWQgYnVmZmVyIGhhcyBpbnZhbGlkICMgb2YgYnl0ZXMgKCVkKVxuIiwKKwkJCSAgICpsZW4pOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTQ3Miw3ICs0NzcsOSBAQAogCiAJbGVuID0gaWZfY3NfcmVhZDE2KHByaXYtPmNhcmQsIElGX0NTX1JFQURfTEVOKTsKIAlpZiAobGVuID09IDAgfHwgbGVuID4gTVJWRFJWX0VUSF9SWF9QQUNLRVRfQlVGRkVSX1NJWkUpIHsKLQkJbGJzX3ByX2VycigiY2FyZCBkYXRhIGJ1ZmZlciBoYXMgaW52YWxpZCAjIG9mIGJ5dGVzICglZClcbiIsIGxlbik7CisJCW5ldGRldl9lcnIocHJpdi0+ZGV2LAorCQkJICAgImNhcmQgZGF0YSBidWZmZXIgaGFzIGludmFsaWQgIyBvZiBieXRlcyAoJWQpXG4iLAorCQkJICAgbGVuKTsKIAkJcHJpdi0+ZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCWdvdG8gZGF0X2VycjsKIAl9CkBAIC02MjEsOCArNjI4LDEwIEBACiAJCWlmIChyZW1haW4gPCBjb3VudCkKIAkJCWNvdW50ID0gcmVtYWluOwogCi0JCS8qICJ3cml0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHNlbnQgdG8gdGhlIEkvTyBDb21tYW5kCi0JCSAqIHdyaXRlIGxlbmd0aCByZWdpc3RlciIgKi8KKwkJLyoKKwkJICogIndyaXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgc2VudCB0byB0aGUgSS9PIENvbW1hbmQKKwkJICogd3JpdGUgbGVuZ3RoIHJlZ2lzdGVyIgorCQkgKi8KIAkJaWZfY3Nfd3JpdGUxNihjYXJkLCBJRl9DU19DTURfTEVOLCBjb3VudCk7CiAKIAkJLyogIndyaXRlIHRoaXMgdG8gSS9PIENvbW1hbmQgcG9ydCByZWdpc3RlciBhcyAxNiBiaXQgd3JpdGVzICovCkBAIC02MzEsMjEgKzY0MCwyNyBAQAogCQkJCSZmdy0+ZGF0YVtzZW50XSwKIAkJCQljb3VudCA+PiAxKTsKIAotCQkvKiAiQXNzZXJ0IHRoZSBkb3dubG9hZCBvdmVyIGludGVycnVwdCBjb21tYW5kIGluIHRoZSBIb3N0Ci0JCSAqIHN0YXR1cyByZWdpc3RlciIgKi8KKwkJLyoKKwkJICogIkFzc2VydCB0aGUgZG93bmxvYWQgb3ZlciBpbnRlcnJ1cHQgY29tbWFuZCBpbiB0aGUgSG9zdAorCQkgKiBzdGF0dXMgcmVnaXN0ZXIiCisJCSAqLwogCQlpZl9jc193cml0ZTgoY2FyZCwgSUZfQ1NfSE9TVF9TVEFUVVMsIElGX0NTX0JJVF9DT01NQU5EKTsKIAotCQkvKiAiQXNzZXJ0IHRoZSBkb3dubG9hZCBvdmVyIGludGVycnVwdCBjb21tYW5kIGluIHRoZSBDYXJkCi0JCSAqIGludGVycnVwdCBjYXNlIHJlZ2lzdGVyIiAqLworCQkvKgorCQkgKiAiQXNzZXJ0IHRoZSBkb3dubG9hZCBvdmVyIGludGVycnVwdCBjb21tYW5kIGluIHRoZSBDYXJkCisJCSAqIGludGVycnVwdCBjYXNlIHJlZ2lzdGVyIgorCQkgKi8KIAkJaWZfY3Nfd3JpdGUxNihjYXJkLCBJRl9DU19IT1NUX0lOVF9DQVVTRSwgSUZfQ1NfQklUX0NPTU1BTkQpOwogCi0JCS8qICJUaGUgaG9zdCBwb2xscyB0aGUgQ2FyZCBTdGF0dXMgcmVnaXN0ZXIgLi4uIGZvciA1MCBtcyBiZWZvcmUKLQkJICAgZGVjbGFyaW5nIGEgZmFpbHVyZSAqLworCQkvKgorCQkgKiAiVGhlIGhvc3QgcG9sbHMgdGhlIENhcmQgU3RhdHVzIHJlZ2lzdGVyIC4uLiBmb3IgNTAgbXMgYmVmb3JlCisJCSAqIGRlY2xhcmluZyBhIGZhaWx1cmUiCisJCSAqLwogCQlyZXQgPSBpZl9jc19wb2xsX3doaWxlX2Z3X2Rvd25sb2FkKGNhcmQsIElGX0NTX0NBUkRfU1RBVFVTLAogCQkJSUZfQ1NfQklUX0NPTU1BTkQpOwogCQlpZiAocmV0IDwgMCkgewotCQkJbGJzX3ByX2VycigiY2FuJ3QgZG93bmxvYWQgaGVscGVyIGF0IDB4JXgsIHJldCAlZFxuIiwKLQkJCQlzZW50LCByZXQpOworCQkJcHJfZXJyKCJjYW4ndCBkb3dubG9hZCBoZWxwZXIgYXQgMHgleCwgcmV0ICVkXG4iLAorCQkJICAgICAgIHNlbnQsIHJldCk7CiAJCQlnb3RvIGRvbmU7CiAJCX0KIApAQCAtNjc1LDcgKzY5MCw3IEBACiAJcmV0ID0gaWZfY3NfcG9sbF93aGlsZV9md19kb3dubG9hZChjYXJkLCBJRl9DU19TUV9SRUFEX0xPVywKIAkJSUZfQ1NfU1FfSEVMUEVSX09LKTsKIAlpZiAocmV0IDwgMCkgewotCQlsYnNfcHJfZXJyKCJoZWxwZXIgZmlybXdhcmUgZG9lc24ndCBhbnN3ZXJcbiIpOworCQlwcl9lcnIoImhlbHBlciBmaXJtd2FyZSBkb2Vzbid0IGFuc3dlclxuIik7CiAJCWdvdG8gZG9uZTsKIAl9CiAKQEAgLTY4MywxMyArNjk4LDEzIEBACiAJCWxlbiA9IGlmX2NzX3JlYWQxNihjYXJkLCBJRl9DU19TUV9SRUFEX0xPVyk7CiAJCWlmIChsZW4gJiAxKSB7CiAJCQlyZXRyeSsrOwotCQkJbGJzX3ByX2luZm8oIm9kZCwgbmVlZCB0byByZXRyeSB0aGlzIGZpcm13YXJlIGJsb2NrXG4iKTsKKwkJCXByX2luZm8oIm9kZCwgbmVlZCB0byByZXRyeSB0aGlzIGZpcm13YXJlIGJsb2NrXG4iKTsKIAkJfSBlbHNlIHsKIAkJCXJldHJ5ID0gMDsKIAkJfQogCiAJCWlmIChyZXRyeSA+IDIwKSB7Ci0JCQlsYnNfcHJfZXJyKCJjb3VsZCBub3QgZG93bmxvYWQgZmlybXdhcmVcbiIpOworCQkJcHJfZXJyKCJjb3VsZCBub3QgZG93bmxvYWQgZmlybXdhcmVcbiIpOwogCQkJcmV0ID0gLUVOT0RFVjsKIAkJCWdvdG8gZG9uZTsKIAkJfQpAQCAtNzA5LDE0ICs3MjQsMTQgQEAKIAkJcmV0ID0gaWZfY3NfcG9sbF93aGlsZV9md19kb3dubG9hZChjYXJkLCBJRl9DU19DQVJEX1NUQVRVUywKIAkJCUlGX0NTX0JJVF9DT01NQU5EKTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCWxic19wcl9lcnIoImNhbid0IGRvd25sb2FkIGZpcm13YXJlIGF0IDB4JXhcbiIsIHNlbnQpOworCQkJcHJfZXJyKCJjYW4ndCBkb3dubG9hZCBmaXJtd2FyZSBhdCAweCV4XG4iLCBzZW50KTsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCX0KIAogCXJldCA9IGlmX2NzX3BvbGxfd2hpbGVfZndfZG93bmxvYWQoY2FyZCwgSUZfQ1NfU0NSQVRDSCwgMHg1YSk7CiAJaWYgKHJldCA8IDApCi0JCWxic19wcl9lcnIoImZpcm13YXJlIGRvd25sb2FkIGZhaWxlZFxuIik7CisJCXByX2VycigiZmlybXdhcmUgZG93bmxvYWQgZmFpbGVkXG4iKTsKIAogZG9uZToKIAlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9DUywgInJldCAlZCIsIHJldCk7CkBAIC03NTAsNyArNzY1LDggQEAKIAkJcmV0ID0gaWZfY3Nfc2VuZF9jbWQocHJpdiwgYnVmLCBuYik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWxic19wcl9lcnIoIiVzOiB1bnN1cHBvcnRlZCB0eXBlICVkXG4iLCBfX2Z1bmNfXywgdHlwZSk7CisJCW5ldGRldl9lcnIocHJpdi0+ZGV2LCAiJXM6IHVuc3VwcG9ydGVkIHR5cGUgJWRcbiIsCisJCQkgICBfX2Z1bmNfXywgdHlwZSk7CiAJfQogCiAJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfQ1MsICJyZXQgJWQiLCByZXQpOwpAQCAtNzc5LDcgKzc5NSw3IEBACiAJcF9kZXYtPnJlc291cmNlWzBdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKIAogCWlmIChwX2Rldi0+cmVzb3VyY2VbMV0tPmVuZCkgewotCQlsYnNfcHJfZXJyKCJ3cm9uZyBDSVMgKGNoZWNrIG51bWJlciBvZiBJTyB3aW5kb3dzKVxuIik7CisJCXByX2Vycigid3JvbmcgQ0lTIChjaGVjayBudW1iZXIgb2YgSU8gd2luZG93cylcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTgwMCw3ICs4MTYsNyBAQAogCiAJY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpZl9jc19jYXJkKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjYXJkKSB7Ci0JCWxic19wcl9lcnIoImVycm9yIGluIGt6YWxsb2NcbiIpOworCQlwcl9lcnIoImVycm9yIGluIGt6YWxsb2NcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAJY2FyZC0+cF9kZXYgPSBwX2RldjsKQEAgLTgwOSw3ICs4MjUsNyBAQAogCXBfZGV2LT5jb25maWdfZmxhZ3MgfD0gQ09ORl9FTkFCTEVfSVJRIHwgQ09ORl9BVVRPX1NFVF9JTzsKIAogCWlmIChwY21jaWFfbG9vcF9jb25maWcocF9kZXYsIGlmX2NzX2lvcHJvYmUsIE5VTEwpKSB7Ci0JCWxic19wcl9lcnIoImVycm9yIGluIHBjbWNpYV9sb29wX2NvbmZpZ1xuIik7CisJCXByX2VycigiZXJyb3IgaW4gcGNtY2lhX2xvb3BfY29uZmlnXG4iKTsKIAkJZ290byBvdXQxOwogCX0KIApAQCAtODI1LDE0ICs4NDEsMTQgQEAKIAljYXJkLT5pb2Jhc2UgPSBpb3BvcnRfbWFwKHBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQsCiAJCQkJcmVzb3VyY2Vfc2l6ZShwX2Rldi0+cmVzb3VyY2VbMF0pKTsKIAlpZiAoIWNhcmQtPmlvYmFzZSkgewotCQlsYnNfcHJfZXJyKCJlcnJvciBpbiBpb3BvcnRfbWFwXG4iKTsKKwkJcHJfZXJyKCJlcnJvciBpbiBpb3BvcnRfbWFwXG4iKTsKIAkJcmV0ID0gLUVJTzsKIAkJZ290byBvdXQxOwogCX0KIAogCXJldCA9IHBjbWNpYV9lbmFibGVfZGV2aWNlKHBfZGV2KTsKIAlpZiAocmV0KSB7Ci0JCWxic19wcl9lcnIoImVycm9yIGluIHBjbWNpYV9lbmFibGVfZGV2aWNlXG4iKTsKKwkJcHJfZXJyKCJlcnJvciBpbiBwY21jaWFfZW5hYmxlX2RldmljZVxuIik7CiAJCWdvdG8gb3V0MjsKIAl9CiAKQEAgLTg0MSwxNCArODU3LDE0IEBACiAKIAkvKgogCSAqIE1vc3Qgb2YgdGhlIGxpYmVydGFzIGNhcmRzIGNhbiBkbyB1bmFsaWduZWQgcmVnaXN0ZXIgYWNjZXNzLCBidXQgc29tZQotCSAqIHdlaXJkIG9uZXMgY2FuIG5vdC4gVGhhdCdzIGVzcGVjaWFsbHkgdHJ1ZSBmb3IgdGhlIENGODMwNSBjYXJkLgorCSAqIHdlaXJkIG9uZXMgY2Fubm90LiBUaGF0J3MgZXNwZWNpYWxseSB0cnVlIGZvciB0aGUgQ0Y4MzA1IGNhcmQuCiAJICovCiAJY2FyZC0+YWxpZ25fcmVncyA9IDA7CiAKIAljYXJkLT5tb2RlbCA9IGdldF9tb2RlbChwX2Rldi0+bWFuZl9pZCwgcF9kZXYtPmNhcmRfaWQpOwogCWlmIChjYXJkLT5tb2RlbCA9PSBNT0RFTF9VTktOT1dOKSB7Ci0JCWxic19wcl9lcnIoInVuc3VwcG9ydGVkIG1hbmZfaWQgMHglMDR4IC8gY2FyZF9pZCAweCUwNHhcbiIsCi0JCQkgICBwX2Rldi0+bWFuZl9pZCwgcF9kZXYtPmNhcmRfaWQpOworCQlwcl9lcnIoInVuc3VwcG9ydGVkIG1hbmZfaWQgMHglMDR4IC8gY2FyZF9pZCAweCUwNHhcbiIsCisJCSAgICAgICBwX2Rldi0+bWFuZl9pZCwgcF9kZXYtPmNhcmRfaWQpOwogCQlnb3RvIG91dDI7CiAJfQogCkBAIC04NTcsMjAgKzg3MywyMCBAQAogCWlmIChjYXJkLT5tb2RlbCA9PSBNT0RFTF84MzA1KSB7CiAJCWNhcmQtPmFsaWduX3JlZ3MgPSAxOwogCQlpZiAocHJvZF9pZCA8IElGX0NTX0NGODMwNV9CMV9SRVYpIHsKLQkJCWxic19wcl9lcnIoIjgzMDUgcmV2IEIwIGFuZCBvbGRlciBhcmUgbm90IHN1cHBvcnRlZFxuIik7CisJCQlwcl9lcnIoIjgzMDUgcmV2IEIwIGFuZCBvbGRlciBhcmUgbm90IHN1cHBvcnRlZFxuIik7CiAJCQlyZXQgPSAtRU5PREVWOwogCQkJZ290byBvdXQyOwogCQl9CiAJfQogCiAJaWYgKChjYXJkLT5tb2RlbCA9PSBNT0RFTF84MzgxKSAmJiBwcm9kX2lkIDwgSUZfQ1NfQ0Y4MzgxX0IzX1JFVikgewotCQlsYnNfcHJfZXJyKCI4MzgxIHJldiBCMiBhbmQgb2xkZXIgYXJlIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlwcl9lcnIoIjgzODEgcmV2IEIyIGFuZCBvbGRlciBhcmUgbm90IHN1cHBvcnRlZFxuIik7CiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0MjsKIAl9CiAKIAlpZiAoKGNhcmQtPm1vZGVsID09IE1PREVMXzgzODUpICYmIHByb2RfaWQgPCBJRl9DU19DRjgzODVfQjFfUkVWKSB7Ci0JCWxic19wcl9lcnIoIjgzODUgcmV2IEIwIGFuZCBvbGRlciBhcmUgbm90IHN1cHBvcnRlZFxuIik7CisJCXByX2VycigiODM4NSByZXYgQjAgYW5kIG9sZGVyIGFyZSBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBvdXQyOwogCX0KQEAgLTg3OCw3ICs4OTQsNyBAQAogCXJldCA9IGxic19nZXRfZmlybXdhcmUoJnBfZGV2LT5kZXYsIE5VTEwsIE5VTEwsIGNhcmQtPm1vZGVsLAogCQkJCSZmd190YWJsZVswXSwgJmhlbHBlciwgJm1haW5mdyk7CiAJaWYgKHJldCkgewotCQlsYnNfcHJfZXJyKCJmYWlsZWQgdG8gZmluZCBmaXJtd2FyZSAoJWQpXG4iLCByZXQpOworCQlwcl9lcnIoImZhaWxlZCB0byBmaW5kIGZpcm13YXJlICglZClcbiIsIHJldCk7CiAJCWdvdG8gb3V0MjsKIAl9CiAKQEAgLTkwOSwxOCArOTI1LDIwIEBACiAJcmV0ID0gcmVxdWVzdF9pcnEocF9kZXYtPmlycSwgaWZfY3NfaW50ZXJydXB0LAogCQlJUlFGX1NIQVJFRCwgRFJWX05BTUUsIGNhcmQpOwogCWlmIChyZXQpIHsKLQkJbGJzX3ByX2VycigiZXJyb3IgaW4gcmVxdWVzdF9pcnFcbiIpOworCQlwcl9lcnIoImVycm9yIGluIHJlcXVlc3RfaXJxXG4iKTsKIAkJZ290byBvdXQzOwogCX0KIAotCS8qIENsZWFyIGFueSBpbnRlcnJ1cHQgY2F1c2UgdGhhdCBoYXBwZW5lZCB3aGlsZSBzZW5kaW5nCi0JICogZmlybXdhcmUvaW5pdGlhbGl6aW5nIGNhcmQgKi8KKwkvKgorCSAqIENsZWFyIGFueSBpbnRlcnJ1cHQgY2F1c2UgdGhhdCBoYXBwZW5lZCB3aGlsZSBzZW5kaW5nCisJICogZmlybXdhcmUvaW5pdGlhbGl6aW5nIGNhcmQKKwkgKi8KIAlpZl9jc193cml0ZTE2KGNhcmQsIElGX0NTX0NBUkRfSU5UX0NBVVNFLCBJRl9DU19CSVRfTUFTSyk7CiAJaWZfY3NfZW5hYmxlX2ludHMoY2FyZCk7CiAKIAkvKiBBbmQgZmluYWxseSBicmluZyB0aGUgY2FyZCB1cCAqLwogCWlmIChsYnNfc3RhcnRfY2FyZChwcml2KSAhPSAwKSB7Ci0JCWxic19wcl9lcnIoImNvdWxkIG5vdCBhY3RpdmF0ZSBjYXJkXG4iKTsKKwkJcHJfZXJyKCJjb3VsZCBub3QgYWN0aXZhdGUgY2FyZFxuIik7CiAJCWdvdG8gb3V0MzsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NkaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NkaW8uYwppbmRleCBiNGRlMGNhLi5hN2I1Y2IwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zZGlvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc2Rpby5jCkBAIC0yNiw2ICsyNiw4IEBACiAgKiBpZl9zZGlvX2NhcmRfdG9faG9zdCgpIHRvIHBhZCB0aGUgZGF0YS4KICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTQwOSw3ICs0MTEsNyBAQAogCiBvdXQ6CiAJaWYgKHJldCkKLQkJbGJzX3ByX2VycigicHJvYmxlbSBmZXRjaGluZyBwYWNrZXQgZnJvbSBmaXJtd2FyZVxuIik7CisJCXByX2VycigicHJvYmxlbSBmZXRjaGluZyBwYWNrZXQgZnJvbSBmaXJtd2FyZVxuIik7CiAKIAlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9TRElPLCAicmV0ICVkIiwgcmV0KTsKIApAQCAtNDQ2LDcgKzQ0OCw3IEBACiAJCX0KIAogCQlpZiAocmV0KQotCQkJbGJzX3ByX2VycigiZXJyb3IgJWQgc2VuZGluZyBwYWNrZXQgdG8gZmlybXdhcmVcbiIsIHJldCk7CisJCQlwcl9lcnIoImVycm9yICVkIHNlbmRpbmcgcGFja2V0IHRvIGZpcm13YXJlXG4iLCByZXQpOwogCiAJCXNkaW9fcmVsZWFzZV9ob3N0KGNhcmQtPmZ1bmMpOwogCkBAIC01NTUsNyArNTU3LDcgQEAKIAogb3V0OgogCWlmIChyZXQpCi0JCWxic19wcl9lcnIoImZhaWxlZCB0byBsb2FkIGhlbHBlciBmaXJtd2FyZVxuIik7CisJCXByX2VycigiZmFpbGVkIHRvIGxvYWQgaGVscGVyIGZpcm13YXJlXG4iKTsKIAogCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1NESU8sICJyZXQgJWQiLCByZXQpOwogCXJldHVybiByZXQ7CkBAIC02NjksNyArNjcxLDcgQEAKIAogb3V0OgogCWlmIChyZXQpCi0JCWxic19wcl9lcnIoImZhaWxlZCB0byBsb2FkIGZpcm13YXJlXG4iKTsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gbG9hZCBmaXJtd2FyZVxuIik7CiAKIAlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9TRElPLCAicmV0ICVkIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwpAQCAtNzIzLDcgKzcyNSw3IEBACiAJcmV0ID0gbGJzX2dldF9maXJtd2FyZSgmY2FyZC0+ZnVuYy0+ZGV2LCBsYnNfaGVscGVyX25hbWUsIGxic19md19uYW1lLAogCQkJCWNhcmQtPm1vZGVsLCAmZndfdGFibGVbMF0sICZoZWxwZXIsICZtYWluZncpOwogCWlmIChyZXQpIHsKLQkJbGJzX3ByX2VycigiZmFpbGVkIHRvIGZpbmQgZmlybXdhcmUgKCVkKVxuIiwgcmV0KTsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gZmluZCBmaXJtd2FyZSAoJWQpXG4iLCByZXQpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTg0OSw3ICs4NTEsNyBAQAogCXJldCA9IF9fbGJzX2NtZChwcml2LCBDTURfODAyXzExX0RFRVBfU0xFRVAsICZjbWQsIHNpemVvZihjbWQpLAogCQkJbGJzX2NtZF9jb3B5YmFjaywgKHVuc2lnbmVkIGxvbmcpICZjbWQpOwogCWlmIChyZXQpCi0JCWxic19wcl9lcnIoIkRFRVBfU0xFRVAgY21kIGZhaWxlZFxuIik7CisJCW5ldGRldl9lcnIocHJpdi0+ZGV2LCAiREVFUF9TTEVFUCBjbWQgZmFpbGVkXG4iKTsKIAogCW1kZWxheSgyMDApOwogCXJldHVybiByZXQ7CkBAIC04NjUsNyArODY3LDcgQEAKIAogCXNkaW9fd3JpdGViKGNhcmQtPmZ1bmMsIEhPU1RfUE9XRVJfVVAsIENPTkZJR1VSQVRJT05fUkVHLCAmcmV0KTsKIAlpZiAocmV0KQotCQlsYnNfcHJfZXJyKCJzZGlvX3dyaXRlYiBmYWlsZWQhXG4iKTsKKwkJbmV0ZGV2X2Vycihwcml2LT5kZXYsICJzZGlvX3dyaXRlYiBmYWlsZWQhXG4iKTsKIAogCXNkaW9fcmVsZWFzZV9ob3N0KGNhcmQtPmZ1bmMpOwogCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1NESU8sICJyZXQgJWQiLCByZXQpOwpAQCAtODgyLDcgKzg4NCw3IEBACiAKIAlzZGlvX3dyaXRlYihjYXJkLT5mdW5jLCAwLCBDT05GSUdVUkFUSU9OX1JFRywgJnJldCk7CiAJaWYgKHJldCkKLQkJbGJzX3ByX2Vycigic2Rpb193cml0ZWIgZmFpbGVkIVxuIik7CisJCW5ldGRldl9lcnIocHJpdi0+ZGV2LCAic2Rpb193cml0ZWIgZmFpbGVkIVxuIik7CiAKIAlzZGlvX3JlbGVhc2VfaG9zdChjYXJkLT5mdW5jKTsKIAlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9TRElPLCAicmV0ICVkIiwgcmV0KTsKQEAgLTk2MSw3ICs5NjMsNyBAQAogCX0KIAogCWlmIChpID09IGZ1bmMtPmNhcmQtPm51bV9pbmZvKSB7Ci0JCWxic19wcl9lcnIoInVuYWJsZSB0byBpZGVudGlmeSBjYXJkIG1vZGVsXG4iKTsKKwkJcHJfZXJyKCJ1bmFibGUgdG8gaWRlbnRpZnkgY2FyZCBtb2RlbFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtOTk1LDcgKzk5Nyw3IEBACiAJCQlicmVhazsKIAl9CiAJaWYgKGkgPT0gQVJSQVlfU0laRShmd190YWJsZSkpIHsKLQkJbGJzX3ByX2VycigidW5rbm93biBjYXJkIG1vZGVsIDB4JXhcbiIsIGNhcmQtPm1vZGVsKTsKKwkJcHJfZXJyKCJ1bmtub3duIGNhcmQgbW9kZWwgMHgleFxuIiwgY2FyZC0+bW9kZWwpOwogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIGZyZWU7CiAJfQpAQCAtMTEwMSw3ICsxMTAzLDcgQEAKIAkJbGJzX2RlYl9zZGlvKCJzZW5kIGZ1bmN0aW9uIElOSVQgY29tbWFuZFxuIik7CiAJCWlmIChfX2xic19jbWQocHJpdiwgQ01EX0ZVTkNfSU5JVCwgJmNtZCwgc2l6ZW9mKGNtZCksCiAJCQkJbGJzX2NtZF9jb3B5YmFjaywgKHVuc2lnbmVkIGxvbmcpICZjbWQpKQotCQkJbGJzX3ByX2FsZXJ0KCJDTURfRlVOQ19JTklUIGNtZCBmYWlsZWRcbiIpOworCQkJbmV0ZGV2X2FsZXJ0KHByaXYtPmRldiwgIkNNRF9GVU5DX0lOSVQgY21kIGZhaWxlZFxuIik7CiAJfQogCiAJcmV0ID0gbGJzX3N0YXJ0X2NhcmQocHJpdik7CkBAIC0xMTYzLDcgKzExNjUsNyBAQAogCQlpZiAoX19sYnNfY21kKGNhcmQtPnByaXYsIENNRF9GVU5DX1NIVVRET1dOLAogCQkJCSZjbWQsIHNpemVvZihjbWQpLCBsYnNfY21kX2NvcHliYWNrLAogCQkJCSh1bnNpZ25lZCBsb25nKSAmY21kKSkKLQkJCWxic19wcl9hbGVydCgiQ01EX0ZVTkNfU0hVVERPV04gY21kIGZhaWxlZFxuIik7CisJCQlwcl9hbGVydCgiQ01EX0ZVTkNfU0hVVERPV04gY21kIGZhaWxlZFxuIik7CiAJfQogCiAKQEAgLTEyMDIsMjAgKzEyMDQsMTkgQEAKIAogCW1tY19wbV9mbGFnX3QgZmxhZ3MgPSBzZGlvX2dldF9ob3N0X3BtX2NhcHMoZnVuYyk7CiAKLQlsYnNfcHJfaW5mbygiJXM6IHN1c3BlbmQ6IFBNIGZsYWdzID0gMHgleFxuIiwKLQkJCQkJCXNkaW9fZnVuY19pZChmdW5jKSwgZmxhZ3MpOworCWRldl9pbmZvKGRldiwgIiVzOiBzdXNwZW5kOiBQTSBmbGFncyA9IDB4JXhcbiIsCisJCSBzZGlvX2Z1bmNfaWQoZnVuYyksIGZsYWdzKTsKIAogCS8qIElmIHdlIGFyZW4ndCBiZWluZyBhc2tlZCB0byB3YWtlIG9uIGFueXRoaW5nLCB3ZSBzaG91bGQgYmFpbCBvdXQKIAkgKiBhbmQgbGV0IHRoZSBTRCBzdGFjayBwb3dlciBkb3duIHRoZSBjYXJkLgogCSAqLwogCWlmIChjYXJkLT5wcml2LT53b2xfY3JpdGVyaWEgPT0gRUhTX1JFTU9WRV9XQUtFVVApIHsKLQkJbGJzX3ByX2luZm8oIlN1c3BlbmQgd2l0aG91dCB3YWtlIHBhcmFtcyAtLSAiCi0JCQkJCQkicG93ZXJpbmcgZG93biBjYXJkLiIpOworCQlkZXZfaW5mbyhkZXYsICJTdXNwZW5kIHdpdGhvdXQgd2FrZSBwYXJhbXMgLS0gcG93ZXJpbmcgZG93biBjYXJkXG4iKTsKIAkJcmV0dXJuIC1FTk9TWVM7CiAJfQogCiAJaWYgKCEoZmxhZ3MgJiBNTUNfUE1fS0VFUF9QT1dFUikpIHsKLQkJbGJzX3ByX2VycigiJXM6IGNhbm5vdCByZW1haW4gYWxpdmUgd2hpbGUgaG9zdCBpcyBzdXNwZW5kZWRcbiIsCisJCWRldl9lcnIoZGV2LCAiJXM6IGNhbm5vdCByZW1haW4gYWxpdmUgd2hpbGUgaG9zdCBpcyBzdXNwZW5kZWRcbiIsCiAJCQlzZGlvX2Z1bmNfaWQoZnVuYykpOwogCQlyZXR1cm4gLUVOT1NZUzsKIAl9CkBAIC0xMjM3LDcgKzEyMzgsNyBAQAogCXN0cnVjdCBpZl9zZGlvX2NhcmQgKmNhcmQgPSBzZGlvX2dldF9kcnZkYXRhKGZ1bmMpOwogCWludCByZXQ7CiAKLQlsYnNfcHJfaW5mbygiJXM6IHJlc3VtZTogd2UncmUgYmFja1xuIiwgc2Rpb19mdW5jX2lkKGZ1bmMpKTsKKwlkZXZfaW5mbyhkZXYsICIlczogcmVzdW1lOiB3ZSdyZSBiYWNrXG4iLCBzZGlvX2Z1bmNfaWQoZnVuYykpOwogCiAJcmV0ID0gbGJzX3Jlc3VtZShjYXJkLT5wcml2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zcGkuYwppbmRleCBmNmMyY2Q2Ni4uNDYzMzUyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmMKQEAgLTE3LDYgKzE3LDggQEAKICAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KQEAgLTU3LDYgKzU5LDcgQEAKIAkvKiBIYW5kbGVzIGFsbCBTUEkgY29tbXVuaWNhdGlvbiAoZXhjZXB0IGZvciBGVyBsb2FkKSAqLwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0CQkqd29ya3F1ZXVlOwogCXN0cnVjdCB3b3JrX3N0cnVjdAkJcGFja2V0X3dvcms7CisJc3RydWN0IHdvcmtfc3RydWN0CQlyZXN1bWVfd29yazsKIAogCXU4CQkJCWNtZF9idWZmZXJbSUZfU1BJX0NNRF9CVUZfU0laRV07CiAKQEAgLTY4LDYgKzcxLDkgQEAKIAogCS8qIFByb3RlY3RzIGNtZF9wYWNrZXRfbGlzdCBhbmQgZGF0YV9wYWNrZXRfbGlzdCAqLwogCXNwaW5sb2NrX3QJCQlidWZmZXJfbG9jazsKKworCS8qIFRydWUgaXMgY2FyZCBzdXNwZW5kZWQgKi8KKwl1OAkJCQlzdXNwZW5kZWQ7CiB9OwogCiBzdGF0aWMgdm9pZCBmcmVlX2lmX3NwaV9jYXJkKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCkKQEAgLTEzOSw4ICsxNDUsMTAgQEAKIAljYXJkLT5wcmV2X3hmZXJfdGltZSA9IGppZmZpZXM7CiB9CiAKLS8qIFdyaXRlIG91dCBhIGJ5dGUgYnVmZmVyIHRvIGFuIFNQSSByZWdpc3RlciwKLSAqIHVzaW5nIGEgc2VyaWVzIG9mIDE2LWJpdCB0cmFuc2ZlcnMuICovCisvKgorICogV3JpdGUgb3V0IGEgYnl0ZSBidWZmZXIgdG8gYW4gU1BJIHJlZ2lzdGVyLAorICogdXNpbmcgYSBzZXJpZXMgb2YgMTYtYml0IHRyYW5zZmVycy4KKyAqLwogc3RhdGljIGludCBzcHVfd3JpdGUoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLCB1MTYgcmVnLCBjb25zdCB1OCAqYnVmLCBpbnQgbGVuKQogewogCWludCBlcnIgPSAwOwpAQCAtMjA0LDggKzIxMiwxMCBAQAogCXN0cnVjdCBzcGlfdHJhbnNmZXIgZHVtbXlfdHJhbnM7CiAJc3RydWN0IHNwaV90cmFuc2ZlciBkYXRhX3RyYW5zOwogCi0JLyogWW91IG11c3QgdGFrZSBhbiBldmVuIG51bWJlciBvZiBieXRlcyBmcm9tIHRoZSBTUFUsIGV2ZW4gaWYgeW91Ci0JICogZG9uJ3QgY2FyZSBhYm91dCB0aGUgbGFzdCBvbmUuICAqLworCS8qCisJICogWW91IG11c3QgdGFrZSBhbiBldmVuIG51bWJlciBvZiBieXRlcyBmcm9tIHRoZSBTUFUsIGV2ZW4gaWYgeW91CisJICogZG9uJ3QgY2FyZSBhYm91dCB0aGUgbGFzdCBvbmUuCisJICovCiAJQlVHX09OKGxlbiAmIDB4MSk7CiAKIAlzcHVfdHJhbnNhY3Rpb25faW5pdChjYXJkKTsKQEAgLTI1NCw4ICsyNjQsMTAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKiBSZWFkIDMyIGJpdHMgZnJvbSBhbiBTUEkgcmVnaXN0ZXIuCi0gKiBUaGUgbG93IDE2IGJpdHMgYXJlIHJlYWQgZmlyc3QuICovCisvKgorICogUmVhZCAzMiBiaXRzIGZyb20gYW4gU1BJIHJlZ2lzdGVyLgorICogVGhlIGxvdyAxNiBiaXRzIGFyZSByZWFkIGZpcnN0LgorICovCiBzdGF0aWMgaW50IHNwdV9yZWFkX3UzMihzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsIHUxNiByZWcsIHUzMiAqdmFsKQogewogCV9fbGUzMiBidWY7CkBAIC0yNjcsMTMgKzI3OSwxNSBAQAogCXJldHVybiBlcnI7CiB9CiAKLS8qIEtlZXAgcmVhZGluZyAxNiBiaXRzIGZyb20gYW4gU1BJIHJlZ2lzdGVyIHVudGlsIHlvdSBnZXQgdGhlIGNvcnJlY3QgcmVzdWx0LgorLyoKKyAqIEtlZXAgcmVhZGluZyAxNiBiaXRzIGZyb20gYW4gU1BJIHJlZ2lzdGVyIHVudGlsIHlvdSBnZXQgdGhlIGNvcnJlY3QgcmVzdWx0LgogICoKICAqIElmIG1hc2sgPSAwLCB0aGUgY29ycmVjdCByZXN1bHQgaXMgYW55IG5vbi16ZXJvIG51bWJlci4KICAqIElmIG1hc2sgIT0gMCwgdGhlIGNvcnJlY3QgcmVzdWx0IGlzIGFueSBudW1iZXIgd2hlcmUKICAqIG51bWJlciAmIHRhcmdldF9tYXNrID09IHRhcmdldAogICoKLSAqIFJldHVybnMgLUVUSU1FRE9VVCBpZiBhIHNlY29uZCBwYXNzZXMgd2l0aG91dCB0aGUgY29ycmVjdCByZXN1bHQuICovCisgKiBSZXR1cm5zIC1FVElNRURPVVQgaWYgYSBzZWNvbmQgcGFzc2VzIHdpdGhvdXQgdGhlIGNvcnJlY3QgcmVzdWx0LgorICovCiBzdGF0aWMgaW50IHNwdV93YWl0X2Zvcl91MTYoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLCB1MTYgcmVnLAogCQkJdTE2IHRhcmdldF9tYXNrLCB1MTYgdGFyZ2V0KQogewpAQCAtMjkzLDE2ICszMDcsMTcgQEAKIAkJfQogCQl1ZGVsYXkoMTAwKTsKIAkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKLQkJCWxic19wcl9lcnIoIiVzOiB0aW1lb3V0IHdpdGggdmFsPSUwMngsICIKLQkJCSAgICAgICAidGFyZ2V0X21hc2s9JTAyeCwgdGFyZ2V0PSUwMnhcbiIsCisJCQlwcl9lcnIoIiVzOiB0aW1lb3V0IHdpdGggdmFsPSUwMngsIHRhcmdldF9tYXNrPSUwMngsIHRhcmdldD0lMDJ4XG4iLAogCQkJICAgICAgIF9fZnVuY19fLCB2YWwsIHRhcmdldF9tYXNrLCB0YXJnZXQpOwogCQkJcmV0dXJuIC1FVElNRURPVVQ7CiAJCX0KIAl9CiB9CiAKLS8qIFJlYWQgMTYgYml0cyBmcm9tIGFuIFNQSSByZWdpc3RlciB1bnRpbCB5b3UgcmVjZWl2ZSBhIHNwZWNpZmljIHZhbHVlLgotICogUmV0dXJucyAtRVRJTUVET1VUIGlmIGEgNCB0cmllcyBwYXNzIHdpdGhvdXQgc3VjY2Vzcy4gKi8KKy8qCisgKiBSZWFkIDE2IGJpdHMgZnJvbSBhbiBTUEkgcmVnaXN0ZXIgdW50aWwgeW91IHJlY2VpdmUgYSBzcGVjaWZpYyB2YWx1ZS4KKyAqIFJldHVybnMgLUVUSU1FRE9VVCBpZiBhIDQgdHJpZXMgcGFzcyB3aXRob3V0IHN1Y2Nlc3MuCisgKi8KIHN0YXRpYyBpbnQgc3B1X3dhaXRfZm9yX3UzMihzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsIHUzMiByZWcsIHUzMiB0YXJnZXQpCiB7CiAJaW50IGVyciwgdHJ5OwpAQCAtMzI0LDggKzMzOSwxMCBAQAogewogCWludCBlcnIgPSAwOwogCi0JLyogV2UgY2FuIHN1cHByZXNzIGEgaG9zdCBpbnRlcnJ1cHQgYnkgY2xlYXJpbmcgdGhlIGFwcHJvcHJpYXRlCi0JICogYml0IGluIHRoZSAiaG9zdCBpbnRlcnJ1cHQgc3RhdHVzIG1hc2siIHJlZ2lzdGVyICovCisJLyoKKwkgKiBXZSBjYW4gc3VwcHJlc3MgYSBob3N0IGludGVycnVwdCBieSBjbGVhcmluZyB0aGUgYXBwcm9wcmlhdGUKKwkgKiBiaXQgaW4gdGhlICJob3N0IGludGVycnVwdCBzdGF0dXMgbWFzayIgcmVnaXN0ZXIKKwkgKi8KIAlpZiAoc3VwcHJlc3NfaG9zdF9pbnQpIHsKIAkJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX01BU0tfUkVHLCAwKTsKIAkJaWYgKGVycikKQEAgLTM0MSwxMCArMzU4LDEyIEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAotCS8qIElmIGF1dG8taW50ZXJydXB0cyBhcmUgb24sIHRoZSBjb21wbGV0aW9uIG9mIGNlcnRhaW4gdHJhbnNhY3Rpb25zCisJLyoKKwkgKiBJZiBhdXRvLWludGVycnVwdHMgYXJlIG9uLCB0aGUgY29tcGxldGlvbiBvZiBjZXJ0YWluIHRyYW5zYWN0aW9ucwogCSAqIHdpbGwgdHJpZ2dlciBhbiBpbnRlcnJ1cHQgYXV0b21hdGljYWxseS4gSWYgYXV0by1pbnRlcnJ1cHRzCiAJICogYXJlIG9mZiwgd2UgbmVlZCB0byBzZXQgdGhlICJDYXJkIEludGVycnVwdCBDYXVzZSIgcmVnaXN0ZXIgdG8KLQkgKiB0cmlnZ2VyIGEgY2FyZCBpbnRlcnJ1cHQuICovCisJICogdHJpZ2dlciBhIGNhcmQgaW50ZXJydXB0LgorCSAqLwogCWlmIChhdXRvX2ludCkgewogCQllcnIgPSBzcHVfd3JpdGVfdTE2KGNhcmQsIElGX1NQSV9IT1NUX0lOVF9DVFJMX1JFRywKIAkJCQlJRl9TUElfSElDVF9UWF9ET1dOTE9BRF9PVkVSX0FVVE8gfApAQCAtMzg3LDcgKzQwNiw3IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAlpZiAoKHJ2YWwgJiAweEYpICE9IG1vZGUpIHsKLQkJbGJzX3ByX2VycigiQ2FuJ3QgcmVhZCBidXMgbW9kZSByZWdpc3Rlci5cbiIpOworCQlwcl9lcnIoIkNhbid0IHJlYWQgYnVzIG1vZGUgcmVnaXN0ZXJcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJcmV0dXJuIDA7CkBAIC0zOTgsOCArNDE3LDEwIEBACiAJaW50IGVyciA9IDA7CiAJdTMyIGRlbGF5OwogCi0JLyogV2UgaGF2ZSB0byBzdGFydCB1cCBpbiB0aW1lZCBkZWxheSBtb2RlIHNvIHRoYXQgd2UgY2FuIHNhZmVseQotCSAqIHJlYWQgdGhlIERlbGF5IFJlYWQgUmVnaXN0ZXIuICovCisJLyoKKwkgKiBXZSBoYXZlIHRvIHN0YXJ0IHVwIGluIHRpbWVkIGRlbGF5IG1vZGUgc28gdGhhdCB3ZSBjYW4gc2FmZWx5CisJICogcmVhZCB0aGUgRGVsYXkgUmVhZCBSZWdpc3Rlci4KKwkgKi8KIAljYXJkLT51c2VfZHVtbXlfd3JpdGVzID0gMDsKIAllcnIgPSBzcHVfc2V0X2J1c19tb2RlKGNhcmQsCiAJCQkJSUZfU1BJX0JVU19NT0RFX1NQSV9DTE9DS19QSEFTRV9SSVNJTkcgfApAQCAtNDU1LDggKzQ3NiwxMCBAQAogCiAJLyogTG9hZCBoZWxwZXIgZmlybXdhcmUgaW1hZ2UgKi8KIAl3aGlsZSAoYnl0ZXNfcmVtYWluaW5nID4gMCkgewotCQkvKiBTY3JhdGNoIHBhZCAxIHNob3VsZCBjb250YWluIHRoZSBudW1iZXIgb2YgYnl0ZXMgd2UKLQkJICogd2FudCB0byBkb3dubG9hZCB0byB0aGUgZmlybXdhcmUgKi8KKwkJLyoKKwkJICogU2NyYXRjaCBwYWQgMSBzaG91bGQgY29udGFpbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlCisJCSAqIHdhbnQgdG8gZG93bmxvYWQgdG8gdGhlIGZpcm13YXJlCisJCSAqLwogCQllcnIgPSBzcHVfd3JpdGVfdTE2KGNhcmQsIElGX1NQSV9TQ1JBVENIXzFfUkVHLAogCQkJCQlIRUxQRVJfRldfTE9BRF9DSFVOS19TWik7CiAJCWlmIChlcnIpCkBAIC00NjgsOCArNDkxLDEwIEBACiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKIAotCQkvKiBGZWVkIHRoZSBkYXRhIGludG8gdGhlIGNvbW1hbmQgcmVhZC93cml0ZSBwb3J0IHJlZwotCQkgKiBpbiBjaHVua3Mgb2YgNjQgYnl0ZXMgKi8KKwkJLyoKKwkJICogRmVlZCB0aGUgZGF0YSBpbnRvIHRoZSBjb21tYW5kIHJlYWQvd3JpdGUgcG9ydCByZWcKKwkJICogaW4gY2h1bmtzIG9mIDY0IGJ5dGVzCisJCSAqLwogCQltZW1zZXQodGVtcCwgMCwgc2l6ZW9mKHRlbXApKTsKIAkJbWVtY3B5KHRlbXAsIGZ3LAogCQkgICAgICAgbWluKGJ5dGVzX3JlbWFpbmluZywgSEVMUEVSX0ZXX0xPQURfQ0hVTktfU1opKTsKQEAgLTQ5MSw5ICs1MTYsMTEgQEAKIAkJZncgKz0gSEVMUEVSX0ZXX0xPQURfQ0hVTktfU1o7CiAJfQogCi0JLyogT25jZSB0aGUgaGVscGVyIC8gc2luZ2xlIHN0YWdlIGZpcm13YXJlIGRvd25sb2FkIGlzIGNvbXBsZXRlLAorCS8qCisJICogT25jZSB0aGUgaGVscGVyIC8gc2luZ2xlIHN0YWdlIGZpcm13YXJlIGRvd25sb2FkIGlzIGNvbXBsZXRlLAogCSAqIHdyaXRlIDAgdG8gc2NyYXRjaCBwYWQgMSBhbmQgaW50ZXJydXB0IHRoZQotCSAqIGJvb3Rsb2FkZXIuIFRoaXMgY29tcGxldGVzIHRoZSBoZWxwZXIgZG93bmxvYWQuICovCisJICogYm9vdGxvYWRlci4gVGhpcyBjb21wbGV0ZXMgdGhlIGhlbHBlciBkb3dubG9hZC4KKwkgKi8KIAllcnIgPSBzcHVfd3JpdGVfdTE2KGNhcmQsIElGX1NQSV9TQ1JBVENIXzFfUkVHLCBGSVJNV0FSRV9ETkxEX09LKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKQEAgLTUwOCwyNiArNTM1LDMwIEBACiAKIG91dDoKIAlpZiAoZXJyKQotCQlsYnNfcHJfZXJyKCJmYWlsZWQgdG8gbG9hZCBoZWxwZXIgZmlybXdhcmUgKGVycj0lZClcbiIsIGVycik7CisJCXByX2VycigiZmFpbGVkIHRvIGxvYWQgaGVscGVyIGZpcm13YXJlIChlcnI9JWQpXG4iLCBlcnIpOwogCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1NQSSwgImVyciAlZCIsIGVycik7CiAJcmV0dXJuIGVycjsKIH0KIAotLyogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBuZXh0IHBhY2tldCB0aGUgZmlybXdhcmUgZXhwZWN0cyB1cyB0byBzZW5kCi0gKiBTZXRzIGNyY19lcnIgaWYgdGhlIHByZXZpb3VzIHRyYW5zZmVyIGhhZCBhIENSQyBlcnJvci4gKi8KKy8qCisgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIG5leHQgcGFja2V0IHRoZSBmaXJtd2FyZSBleHBlY3RzIHVzIHRvIHNlbmQuCisgKiBTZXRzIGNyY19lcnIgaWYgdGhlIHByZXZpb3VzIHRyYW5zZmVyIGhhZCBhIENSQyBlcnJvci4KKyAqLwogc3RhdGljIGludCBpZl9zcGlfcHJvZ19tYWluX2Zpcm13YXJlX2NoZWNrX2xlbihzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsCiAJCQkJCQlpbnQgKmNyY19lcnIpCiB7CiAJdTE2IGxlbjsKIAlpbnQgZXJyID0gMDsKIAotCS8qIHdhaXQgdW50aWwgdGhlIGhvc3QgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciBpbmRpY2F0ZXMKLQkgKiB0aGF0IHdlIGFyZSByZWFkeSB0byBkb3dubG9hZCAqLworCS8qCisJICogd2FpdCB1bnRpbCB0aGUgaG9zdCBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIGluZGljYXRlcworCSAqIHRoYXQgd2UgYXJlIHJlYWR5IHRvIGRvd25sb2FkCisJICovCiAJZXJyID0gc3B1X3dhaXRfZm9yX3UxNihjYXJkLCBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX1JFRywKIAkJCQlJRl9TUElfSElTVF9DTURfRE9XTkxPQURfUkRZLAogCQkJCUlGX1NQSV9ISVNUX0NNRF9ET1dOTE9BRF9SRFkpOwogCWlmIChlcnIpIHsKLQkJbGJzX3ByX2VycigidGltZWQgb3V0IHdhaXRpbmcgZm9yIGhvc3RfaW50X3N0YXR1c1xuIik7CisJCXByX2VycigidGltZWQgb3V0IHdhaXRpbmcgZm9yIGhvc3RfaW50X3N0YXR1c1xuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC01MzcsOSArNTY4LDggQEAKIAkJcmV0dXJuIGVycjsKIAogCWlmIChsZW4gPiBJRl9TUElfQ01EX0JVRl9TSVpFKSB7Ci0JCWxic19wcl9lcnIoImZpcm13YXJlIGxvYWQgZGV2aWNlIHJlcXVlc3RlZCBhIGxhcmdlciAiCi0JCQkgICAidHJhbmZlciB0aGFuIHdlIGFyZSBwcmVwYXJlZCB0byAiCi0JCQkgICAiaGFuZGxlLiAobGVuID0gJWQpXG4iLCBsZW4pOworCQlwcl9lcnIoImZpcm13YXJlIGxvYWQgZGV2aWNlIHJlcXVlc3RlZCBhIGxhcmdlciB0cmFuc2ZlciB0aGFuIHdlIGFyZSBwcmVwYXJlZCB0byBoYW5kbGUgKGxlbiA9ICVkKVxuIiwKKwkJICAgICAgIGxlbik7CiAJCXJldHVybiAtRUlPOwogCX0KIAlpZiAobGVuICYgMHgxKSB7CkBAIC01NTUsNiArNTg1LDcgQEAKIHN0YXRpYyBpbnQgaWZfc3BpX3Byb2dfbWFpbl9maXJtd2FyZShzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsCiAJCQkJCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUpCiB7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gY2FyZC0+cHJpdjsKIAlpbnQgbGVuLCBwcmV2X2xlbjsKIAlpbnQgYnl0ZXMsIGNyY19lcnIgPSAwLCBlcnIgPSAwOwogCWNvbnN0IHU4ICpmdzsKQEAgLTU2OCw4ICs1OTksOSBAQAogCiAJZXJyID0gc3B1X3dhaXRfZm9yX3UxNihjYXJkLCBJRl9TUElfU0NSQVRDSF8xX1JFRywgMCwgMCk7CiAJaWYgKGVycikgewotCQlsYnNfcHJfZXJyKCIlczogdGltZWQgb3V0IHdhaXRpbmcgZm9yIGluaXRpYWwgIgotCQkJICAgInNjcmF0Y2ggcmVnID0gMFxuIiwgX19mdW5jX18pOworCQluZXRkZXZfZXJyKHByaXYtPmRldiwKKwkJCSAgICIlczogdGltZWQgb3V0IHdhaXRpbmcgZm9yIGluaXRpYWwgc2NyYXRjaCByZWcgPSAwXG4iLAorCQkJICAgX19mdW5jX18pOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTU4MywxNyArNjE1LDE4IEBACiAJCQlnb3RvIG91dDsKIAkJfQogCQlpZiAoYnl0ZXMgPCAwKSB7Ci0JCQkvKiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBieXRlcyBsZWZ0LCB3ZSB3b3VsZCBub3JtYWxseQotCQkJICogZXhwZWN0IHRvIGhhdmUgdGVybWluYXRlZCB3aXRoIGxlbiA9IDAgKi8KLQkJCWxic19wcl9lcnIoIkZpcm13YXJlIGxvYWQgd2FudHMgbW9yZSBieXRlcyAiCi0JCQkJICAgInRoYW4gd2UgaGF2ZSB0byBvZmZlci5cbiIpOworCQkJLyoKKwkJCSAqIElmIHRoZXJlIGFyZSBubyBtb3JlIGJ5dGVzIGxlZnQsIHdlIHdvdWxkIG5vcm1hbGx5CisJCQkgKiBleHBlY3QgdG8gaGF2ZSB0ZXJtaW5hdGVkIHdpdGggbGVuID0gMAorCQkJICovCisJCQluZXRkZXZfZXJyKHByaXYtPmRldiwKKwkJCQkgICAiRmlybXdhcmUgbG9hZCB3YW50cyBtb3JlIGJ5dGVzIHRoYW4gd2UgaGF2ZSB0byBvZmZlci5cbiIpOwogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKGNyY19lcnIpIHsKIAkJCS8qIFByZXZpb3VzIHRyYW5zZmVyIGZhaWxlZC4gKi8KIAkJCWlmICgrK251bV9jcmNfZXJycyA+IE1BWF9NQUlOX0ZXX0xPQURfQ1JDX0VSUikgewotCQkJCWxic19wcl9lcnIoIlRvbyBtYW55IENSQyBlcnJvcnMgZW5jb3VudGVyZWQgIgotCQkJCQkgICAiaW4gZmlybXdhcmUgbG9hZC5cbiIpOworCQkJCXByX2VycigiVG9vIG1hbnkgQ1JDIGVycm9ycyBlbmNvdW50ZXJlZCBpbiBmaXJtd2FyZSBsb2FkLlxuIik7CiAJCQkJZXJyID0gLUVJTzsKIAkJCQlnb3RvIG91dDsKIAkJCX0KQEAgLTYyMiwyMSArNjU1LDIwIEBACiAJCXByZXZfbGVuID0gbGVuOwogCX0KIAlpZiAoYnl0ZXMgPiBwcmV2X2xlbikgewotCQlsYnNfcHJfZXJyKCJmaXJtd2FyZSBsb2FkIHdhbnRzIGZld2VyIGJ5dGVzIHRoYW4gIgotCQkJICAgIndlIGhhdmUgdG8gb2ZmZXIuXG4iKTsKKwkJcHJfZXJyKCJmaXJtd2FyZSBsb2FkIHdhbnRzIGZld2VyIGJ5dGVzIHRoYW4gd2UgaGF2ZSB0byBvZmZlclxuIik7CiAJfQogCiAJLyogQ29uZmlybSBmaXJtd2FyZSBkb3dubG9hZCAqLwogCWVyciA9IHNwdV93YWl0X2Zvcl91MzIoY2FyZCwgSUZfU1BJX1NDUkFUQ0hfNF9SRUcsCiAJCQkJCVNVQ0NFU1NGVUxfRldfRE9XTkxPQURfTUFHSUMpOwogCWlmIChlcnIpIHsKLQkJbGJzX3ByX2VycigiZmFpbGVkIHRvIGNvbmZpcm0gdGhlIGZpcm13YXJlIGRvd25sb2FkXG4iKTsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gY29uZmlybSB0aGUgZmlybXdhcmUgZG93bmxvYWRcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKIG91dDoKIAlpZiAoZXJyKQotCQlsYnNfcHJfZXJyKCJmYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSAoZXJyPSVkKVxuIiwgZXJyKTsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSAoZXJyPSVkKVxuIiwgZXJyKTsKIAlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9TUEksICJlcnIgJWQiLCBlcnIpOwogCXJldHVybiBlcnI7CiB9CkBAIC02NTYsMTQgKzY4OCwxOCBAQAogCXUxNiBsZW47CiAJdTggaTsKIAotCS8qIFdlIG5lZWQgYSBidWZmZXIgYmlnIGVub3VnaCB0byBoYW5kbGUgd2hhdGV2ZXIgcGVvcGxlIHNlbmQgdG8KLQkgKiBod19ob3N0X3RvX2NhcmQgKi8KKwkvKgorCSAqIFdlIG5lZWQgYSBidWZmZXIgYmlnIGVub3VnaCB0byBoYW5kbGUgd2hhdGV2ZXIgcGVvcGxlIHNlbmQgdG8KKwkgKiBod19ob3N0X3RvX2NhcmQKKwkgKi8KIAlCVUlMRF9CVUdfT04oSUZfU1BJX0NNRF9CVUZfU0laRSA8IExCU19DTURfQlVGRkVSX1NJWkUpOwogCUJVSUxEX0JVR19PTihJRl9TUElfQ01EX0JVRl9TSVpFIDwgTEJTX1VQTERfU0laRSk7CiAKLQkvKiBJdCdzIGp1c3QgYW5ub3lpbmcgaWYgdGhlIGJ1ZmZlciBzaXplIGlzbid0IGEgbXVsdGlwbGUgb2YgNCwgYmVjYXVzZQotCSAqIHRoZW4gd2UgbWlnaHQgaGF2ZSBsZW4gPCAgSUZfU1BJX0NNRF9CVUZfU0laRSBidXQKLQkgKiBBTElHTihsZW4sIDQpID4gSUZfU1BJX0NNRF9CVUZfU0laRSAqLworCS8qCisJICogSXQncyBqdXN0IGFubm95aW5nIGlmIHRoZSBidWZmZXIgc2l6ZSBpc24ndCBhIG11bHRpcGxlIG9mIDQsIGJlY2F1c2UKKwkgKiB0aGVuIHdlIG1pZ2h0IGhhdmUgbGVuIDwgSUZfU1BJX0NNRF9CVUZfU0laRSBidXQKKwkgKiBBTElHTihsZW4sIDQpID4gSUZfU1BJX0NNRF9CVUZfU0laRQorCSAqLwogCUJVSUxEX0JVR19PTihJRl9TUElfQ01EX0JVRl9TSVpFICUgNCAhPSAwKTsKIAogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9TUEkpOwpAQCAtNjczLDEzICs3MDksMTMgQEAKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAlpZiAoIWxlbikgewotCQlsYnNfcHJfZXJyKCIlczogZXJyb3I6IGNhcmQgaGFzIG5vIGRhdGEgZm9yIGhvc3RcbiIsCisJCW5ldGRldl9lcnIocHJpdi0+ZGV2LCAiJXM6IGVycm9yOiBjYXJkIGhhcyBubyBkYXRhIGZvciBob3N0XG4iLAogCQkJICAgX19mdW5jX18pOwogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9IGVsc2UgaWYgKGxlbiA+IElGX1NQSV9DTURfQlVGX1NJWkUpIHsKLQkJbGJzX3ByX2VycigiJXM6IGVycm9yOiByZXNwb25zZSBwYWNrZXQgdG9vIGxhcmdlOiAiCi0JCQkgICAiJWQgYnl0ZXMsIGJ1dCBtYXhpbXVtIGlzICVkXG4iLAorCQluZXRkZXZfZXJyKHByaXYtPmRldiwKKwkJCSAgICIlczogZXJyb3I6IHJlc3BvbnNlIHBhY2tldCB0b28gbGFyZ2U6ICVkIGJ5dGVzLCBidXQgbWF4aW11bSBpcyAlZFxuIiwKIAkJCSAgIF9fZnVuY19fLCBsZW4sIElGX1NQSV9DTURfQlVGX1NJWkUpOwogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKQEAgLTcwMSw3ICs3MzcsNyBAQAogCiBvdXQ6CiAJaWYgKGVycikKLQkJbGJzX3ByX2VycigiJXM6IGVycj0lZFxuIiwgX19mdW5jX18sIGVycik7CisJCW5ldGRldl9lcnIocHJpdi0+ZGV2LCAiJXM6IGVycj0lZFxuIiwgX19mdW5jX18sIGVycik7CiAJbGJzX2RlYl9sZWF2ZShMQlNfREVCX1NQSSk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTcwOSw2ICs3NDUsNyBAQAogLyogTW92ZSBkYXRhIGZyb20gdGhlIGNhcmQgdG8gdGhlIGhvc3QgKi8KIHN0YXRpYyBpbnQgaWZfc3BpX2MyaF9kYXRhKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCkKIHsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBjYXJkLT5wcml2OwogCXN0cnVjdCBza19idWZmICpza2I7CiAJY2hhciAqZGF0YTsKIAl1MTYgbGVuOwpAQCAtNzIxLDEzICs3NTgsMTMgQEAKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAlpZiAoIWxlbikgewotCQlsYnNfcHJfZXJyKCIlczogZXJyb3I6IGNhcmQgaGFzIG5vIGRhdGEgZm9yIGhvc3RcbiIsCisJCW5ldGRldl9lcnIocHJpdi0+ZGV2LCAiJXM6IGVycm9yOiBjYXJkIGhhcyBubyBkYXRhIGZvciBob3N0XG4iLAogCQkJICAgX19mdW5jX18pOwogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9IGVsc2UgaWYgKGxlbiA+IE1SVkRSVl9FVEhfUlhfUEFDS0VUX0JVRkZFUl9TSVpFKSB7Ci0JCWxic19wcl9lcnIoIiVzOiBlcnJvcjogY2FyZCBoYXMgJWQgYnl0ZXMgb2YgZGF0YSwgYnV0ICIKLQkJCSAgICJvdXIgbWF4aW11bSBza2Igc2l6ZSBpcyAlenVcbiIsCisJCW5ldGRldl9lcnIocHJpdi0+ZGV2LAorCQkJICAgIiVzOiBlcnJvcjogY2FyZCBoYXMgJWQgYnl0ZXMgb2YgZGF0YSwgYnV0IG91ciBtYXhpbXVtIHNrYiBzaXplIGlzICV6dVxuIiwKIAkJCSAgIF9fZnVuY19fLCBsZW4sIE1SVkRSVl9FVEhfUlhfUEFDS0VUX0JVRkZFUl9TSVpFKTsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CkBAIC03NTksNyArNzk2LDcgQEAKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiBvdXQ6CiAJaWYgKGVycikKLQkJbGJzX3ByX2VycigiJXM6IGVycj0lZFxuIiwgX19mdW5jX18sIGVycik7CisJCW5ldGRldl9lcnIocHJpdi0+ZGV2LCAiJXM6IGVycj0lZFxuIiwgX19mdW5jX18sIGVycik7CiAJbGJzX2RlYl9sZWF2ZShMQlNfREVCX1NQSSk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTc2OCw2ICs4MDUsNyBAQAogc3RhdGljIHZvaWQgaWZfc3BpX2gyYyhzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsCiAJCQlzdHJ1Y3QgaWZfc3BpX3BhY2tldCAqcGFja2V0LCBpbnQgdHlwZSkKIHsKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBjYXJkLT5wcml2OwogCWludCBlcnIgPSAwOwogCXUxNiBpbnRfdHlwZSwgcG9ydF9yZWc7CiAKQEAgLTc4MSw3ICs4MTksOCBAQAogCQlwb3J0X3JlZyA9IElGX1NQSV9DTURfUkRXUlBPUlRfUkVHOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlsYnNfcHJfZXJyKCJjYW4ndCB0cmFuc2ZlciBidWZmZXIgb2YgdHlwZSAlZFxuIiwgdHlwZSk7CisJCW5ldGRldl9lcnIocHJpdi0+ZGV2LCAiY2FuJ3QgdHJhbnNmZXIgYnVmZmVyIG9mIHR5cGUgJWRcbiIsCisJCQkgICB0eXBlKTsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNzk1LDcgKzgzNCw3IEBACiAJa2ZyZWUocGFja2V0KTsKIAogCWlmIChlcnIpCi0JCWxic19wcl9lcnIoIiVzOiBlcnJvciAlZFxuIiwgX19mdW5jX18sIGVycik7CisJCW5ldGRldl9lcnIocHJpdi0+ZGV2LCAiJXM6IGVycm9yICVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKIH0KIAogLyogSW5mb3JtIHRoZSBob3N0IGFib3V0IGEgY2FyZCBldmVudCAqLwpAQCAtODE5LDcgKzg1OCw3IEBACiAJbGJzX3F1ZXVlX2V2ZW50KHByaXYsIGNhdXNlICYgMHhmZik7CiBvdXQ6CiAJaWYgKGVycikKLQkJbGJzX3ByX2VycigiJXM6IGVycm9yICVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKKwkJbmV0ZGV2X2Vycihwcml2LT5kZXYsICIlczogZXJyb3IgJWRcbiIsIF9fZnVuY19fLCBlcnIpOwogfQogCiBzdGF0aWMgdm9pZCBpZl9zcGlfaG9zdF90b19jYXJkX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC04MjksMTcgKzg2OCwyMSBAQAogCXUxNiBoaVN0YXR1czsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBpZl9zcGlfcGFja2V0ICpwYWNrZXQ7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2OwogCiAJY2FyZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWZfc3BpX2NhcmQsIHBhY2tldF93b3JrKTsKKwlwcml2ID0gY2FyZC0+cHJpdjsKIAogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9TUEkpOwogCi0JLyogUmVhZCB0aGUgaG9zdCBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIHRvIHNlZSB3aGF0IHdlCi0JICogY2FuIGRvLiAqLworCS8qCisJICogUmVhZCB0aGUgaG9zdCBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIHRvIHNlZSB3aGF0IHdlCisJICogY2FuIGRvLgorCSAqLwogCWVyciA9IHNwdV9yZWFkX3UxNihjYXJkLCBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX1JFRywKIAkJCQkmaGlTdGF0dXMpOwogCWlmIChlcnIpIHsKLQkJbGJzX3ByX2VycigiSS9PIGVycm9yXG4iKTsKKwkJbmV0ZGV2X2Vycihwcml2LT5kZXYsICJJL08gZXJyb3JcbiIpOwogCQlnb3RvIGVycjsKIAl9CiAKQEAgLTg1NCwxMiArODk3LDE1IEBACiAJCQlnb3RvIGVycjsKIAl9CiAKLQkvKiB3b3JrYXJvdW5kOiBpbiBQUyBtb2RlLCB0aGUgY2FyZCBkb2VzIG5vdCBzZXQgdGhlIENvbW1hbmQKLQkgKiBEb3dubG9hZCBSZWFkeSBiaXQsIGJ1dCBpdCBzZXRzIFRYIERvd25sb2FkIFJlYWR5LiAqLworCS8qCisJICogd29ya2Fyb3VuZDogaW4gUFMgbW9kZSwgdGhlIGNhcmQgZG9lcyBub3Qgc2V0IHRoZSBDb21tYW5kCisJICogRG93bmxvYWQgUmVhZHkgYml0LCBidXQgaXQgc2V0cyBUWCBEb3dubG9hZCBSZWFkeS4KKwkgKi8KIAlpZiAoaGlTdGF0dXMgJiBJRl9TUElfSElTVF9DTURfRE9XTkxPQURfUkRZIHx8CiAJICAgKGNhcmQtPnByaXYtPnBzc3RhdGUgIT0gUFNfU1RBVEVfRlVMTF9QT1dFUiAmJgogCSAgICAoaGlTdGF0dXMgJiBJRl9TUElfSElTVF9UWF9ET1dOTE9BRF9SRFkpKSkgewotCQkvKiBUaGlzIG1lYW5zIHR3byB0aGluZ3MuIEZpcnN0IG9mIGFsbCwKKwkJLyoKKwkJICogVGhpcyBtZWFucyB0d28gdGhpbmdzLiBGaXJzdCBvZiBhbGwsCiAJCSAqIGlmIHRoZXJlIHdhcyBhIHByZXZpb3VzIGNvbW1hbmQgc2VudCwgdGhlIGNhcmQgaGFzCiAJCSAqIHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBpdC4KIAkJICogU2Vjb25kbHksIGl0IGlzIG5vdyByZWFkeSB0byBkb3dubG9hZCBhbm90aGVyCkBAIC04NjcsOCArOTEzLDcgQEAKIAkJICovCiAJCWxic19ob3N0X3RvX2NhcmRfZG9uZShjYXJkLT5wcml2KTsKIAotCQkvKiBEbyB3ZSBoYXZlIGFueSBjb21tYW5kIHBhY2tldHMgZnJvbSB0aGUgaG9zdCB0bwotCQkgKiBzZW5kPyAqLworCQkvKiBEbyB3ZSBoYXZlIGFueSBjb21tYW5kIHBhY2tldHMgZnJvbSB0aGUgaG9zdCB0byBzZW5kPyAqLwogCQlwYWNrZXQgPSBOVUxMOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKIAkJaWYgKCFsaXN0X2VtcHR5KCZjYXJkLT5jbWRfcGFja2V0X2xpc3QpKSB7CkBAIC04ODIsOCArOTI3LDcgQEAKIAkJCWlmX3NwaV9oMmMoY2FyZCwgcGFja2V0LCBNVk1TX0NNRCk7CiAJfQogCWlmIChoaVN0YXR1cyAmIElGX1NQSV9ISVNUX1RYX0RPV05MT0FEX1JEWSkgewotCQkvKiBEbyB3ZSBoYXZlIGFueSBkYXRhIHBhY2tldHMgZnJvbSB0aGUgaG9zdCB0bwotCQkgKiBzZW5kPyAqLworCQkvKiBEbyB3ZSBoYXZlIGFueSBkYXRhIHBhY2tldHMgZnJvbSB0aGUgaG9zdCB0byBzZW5kPyAqLwogCQlwYWNrZXQgPSBOVUxMOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKIAkJaWYgKCFsaXN0X2VtcHR5KCZjYXJkLT5kYXRhX3BhY2tldF9saXN0KSkgewpAQCAtOTAxLDcgKzk0NSw3IEBACiAKIGVycjoKIAlpZiAoZXJyKQotCQlsYnNfcHJfZXJyKCIlczogZ290IGVycm9yICVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKKwkJbmV0ZGV2X2Vycihwcml2LT5kZXYsICIlczogZ290IGVycm9yICVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKIAogCWxic19kZWJfbGVhdmUoTEJTX0RFQl9TUEkpOwogfQpAQCAtOTEwLDcgKzk1NCw4IEBACiAgKiBIb3N0IHRvIENhcmQKICAqCiAgKiBDYWxsZWQgZnJvbSBMaWJlcnRhcyB0byB0cmFuc2ZlciBzb21lIGRhdGEgdG8gdGhlIFdMQU4gZGV2aWNlCi0gKiBXZSBjYW4ndCBzbGVlcCBoZXJlLiAqLworICogV2UgY2FuJ3Qgc2xlZXAgaGVyZS4KKyAqLwogc3RhdGljIGludCBpZl9zcGlfaG9zdF90b19jYXJkKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKIAkJCQl1OCB0eXBlLCB1OCAqYnVmLCB1MTYgbmIpCiB7CkBAIC05MjMsNyArOTY4LDggQEAKIAlsYnNfZGViX2VudGVyX2FyZ3MoTEJTX0RFQl9TUEksICJ0eXBlICVkLCBieXRlcyAlZCIsIHR5cGUsIG5iKTsKIAogCWlmIChuYiA9PSAwKSB7Ci0JCWxic19wcl9lcnIoIiVzOiBpbnZhbGlkIHNpemUgcmVxdWVzdGVkOiAlZFxuIiwgX19mdW5jX18sIG5iKTsKKwkJbmV0ZGV2X2Vycihwcml2LT5kZXYsICIlczogaW52YWxpZCBzaXplIHJlcXVlc3RlZDogJWRcbiIsCisJCQkgICBfX2Z1bmNfXywgbmIpOwogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CkBAIC05NTEsNyArOTk3LDggQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJbGJzX3ByX2VycigiY2FuJ3QgdHJhbnNmZXIgYnVmZmVyIG9mIHR5cGUgJWQiLCB0eXBlKTsKKwkJbmV0ZGV2X2Vycihwcml2LT5kZXYsICJjYW4ndCB0cmFuc2ZlciBidWZmZXIgb2YgdHlwZSAlZFxuIiwKKwkJCSAgIHR5cGUpOwogCQllcnIgPSAtRUlOVkFMOwogCQlicmVhazsKIAl9CkBAIC05ODQsNiArMTAzMSw3IEBACiAKIHN0YXRpYyBpbnQgaWZfc3BpX2luaXRfY2FyZChzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQpCiB7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gY2FyZC0+cHJpdjsKIAlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gY2FyZC0+c3BpOwogCWludCBlcnIsIGk7CiAJdTMyIHNjcmF0Y2g7CkBAIC0xMDEyLDggKzEwNjAsOCBAQAogCQkJCWJyZWFrOwogCQl9CiAJCWlmIChpID09IEFSUkFZX1NJWkUoZndfdGFibGUpKSB7Ci0JCQlsYnNfcHJfZXJyKCJVbnN1cHBvcnRlZCBjaGlwX2lkOiAweCUwMnhcbiIsCi0JCQkJCWNhcmQtPmNhcmRfaWQpOworCQkJbmV0ZGV2X2Vycihwcml2LT5kZXYsICJVbnN1cHBvcnRlZCBjaGlwX2lkOiAweCUwMnhcbiIsCisJCQkJICAgY2FyZC0+Y2FyZF9pZCk7CiAJCQllcnIgPSAtRU5PREVWOwogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTEwMjIsNyArMTA3MCw4IEBACiAJCQkJCWNhcmQtPmNhcmRfaWQsICZmd190YWJsZVswXSwgJmhlbHBlciwKIAkJCQkJJm1haW5mdyk7CiAJCWlmIChlcnIpIHsKLQkJCWxic19wcl9lcnIoImZhaWxlZCB0byBmaW5kIGZpcm13YXJlICglZClcbiIsIGVycik7CisJCQluZXRkZXZfZXJyKHByaXYtPmRldiwgImZhaWxlZCB0byBmaW5kIGZpcm13YXJlICglZClcbiIsCisJCQkJICAgZXJyKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKQEAgLTEwNTcsNiArMTEwNiwyOCBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyB2b2lkIGlmX3NwaV9yZXN1bWVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQ7CisKKwljYXJkID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZl9zcGlfY2FyZCwgcmVzdW1lX3dvcmspOworCisJaWYgKGNhcmQtPnN1c3BlbmRlZCkgeworCQlpZiAoY2FyZC0+cGRhdGEtPnNldHVwKQorCQkJY2FyZC0+cGRhdGEtPnNldHVwKGNhcmQtPnNwaSk7CisKKwkJLyogSW5pdCBjYXJkIC4uLiAqLworCQlpZl9zcGlfaW5pdF9jYXJkKGNhcmQpOworCisJCWVuYWJsZV9pcnEoY2FyZC0+c3BpLT5pcnEpOworCisJCS8qIEFuZCByZXN1bWUgaXQgLi4uICovCisJCWxic19yZXN1bWUoY2FyZC0+cHJpdik7CisKKwkJY2FyZC0+c3VzcGVuZGVkID0gMDsKKwl9Cit9CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGlmX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCXN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZDsKQEAgLTEwOTksMTQgKzExNzAsMTcgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGZyZWVfY2FyZDsKIAotCS8qIFJlZ2lzdGVyIG91ciBjYXJkIHdpdGggbGliZXJ0YXMuCi0JICogVGhpcyB3aWxsIGNhbGwgYWxsb2NfZXRoZXJkZXYgKi8KKwkvKgorCSAqIFJlZ2lzdGVyIG91ciBjYXJkIHdpdGggbGliZXJ0YXMuCisJICogVGhpcyB3aWxsIGNhbGwgYWxsb2NfZXRoZXJkZXYuCisJICovCiAJcHJpdiA9IGxic19hZGRfY2FyZChjYXJkLCAmc3BpLT5kZXYpOwogCWlmICghcHJpdikgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGZyZWVfY2FyZDsKIAl9CiAJY2FyZC0+cHJpdiA9IHByaXY7CisJcHJpdi0+c2V0dXBfZndfb25fcmVzdW1lID0gMTsKIAlwcml2LT5jYXJkID0gY2FyZDsKIAlwcml2LT5od19ob3N0X3RvX2NhcmQgPSBpZl9zcGlfaG9zdF90b19jYXJkOwogCXByaXYtPmVudGVyX2RlZXBfc2xlZXAgPSBOVUxMOwpAQCAtMTExNywxNyArMTE5MSwyMCBAQAogCS8qIEluaXRpYWxpemUgaW50ZXJydXB0IGhhbmRsaW5nIHN0dWZmLiAqLwogCWNhcmQtPndvcmtxdWV1ZSA9IGNyZWF0ZV93b3JrcXVldWUoImxpYmVydGFzX3NwaSIpOwogCUlOSVRfV09SSygmY2FyZC0+cGFja2V0X3dvcmssIGlmX3NwaV9ob3N0X3RvX2NhcmRfd29ya2VyKTsKKwlJTklUX1dPUksoJmNhcmQtPnJlc3VtZV93b3JrLCBpZl9zcGlfcmVzdW1lX3dvcmtlcik7CiAKIAllcnIgPSByZXF1ZXN0X2lycShzcGktPmlycSwgaWZfc3BpX2hvc3RfaW50ZXJydXB0LAogCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcsICJsaWJlcnRhc19zcGkiLCBjYXJkKTsKIAlpZiAoZXJyKSB7Ci0JCWxic19wcl9lcnIoImNhbid0IGdldCBob3N0IGlycSBsaW5lLS0gcmVxdWVzdF9pcnEgZmFpbGVkXG4iKTsKKwkJcHJfZXJyKCJjYW4ndCBnZXQgaG9zdCBpcnEgbGluZS0tIHJlcXVlc3RfaXJxIGZhaWxlZFxuIik7CiAJCWdvdG8gdGVybWluYXRlX3dvcmtxdWV1ZTsKIAl9CiAKLQkvKiBTdGFydCB0aGUgY2FyZC4KKwkvKgorCSAqIFN0YXJ0IHRoZSBjYXJkLgogCSAqIFRoaXMgd2lsbCBjYWxsIHJlZ2lzdGVyX25ldGRldiwgYW5kIHdlJ2xsIHN0YXJ0Ci0JICogZ2V0dGluZyBpbnRlcnJ1cHRzLi4uICovCisJICogZ2V0dGluZyBpbnRlcnJ1cHRzLi4uCisJICovCiAJZXJyID0gbGJzX3N0YXJ0X2NhcmQocHJpdik7CiAJaWYgKGVycikKIAkJZ290byByZWxlYXNlX2lycTsKQEAgLTExNjEsNiArMTIzOCw4IEBACiAJbGJzX2RlYl9zcGkoImxpYmVydGFzX3NwaV9yZW1vdmVcbiIpOwogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9TUEkpOwogCisJY2FuY2VsX3dvcmtfc3luYygmY2FyZC0+cmVzdW1lX3dvcmspOworCiAJbGJzX3N0b3BfY2FyZChwcml2KTsKIAlsYnNfcmVtb3ZlX2NhcmQocHJpdik7IC8qIHdpbGwgY2FsbCBmcmVlX25ldGRldiAqLwogCkBAIC0xMTc0LDYgKzEyNTMsNDAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBpZl9zcGlfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IHRvX3NwaV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKKworCWlmICghY2FyZC0+c3VzcGVuZGVkKSB7CisJCWxic19zdXNwZW5kKGNhcmQtPnByaXYpOworCQlmbHVzaF93b3JrcXVldWUoY2FyZC0+d29ya3F1ZXVlKTsKKwkJZGlzYWJsZV9pcnEoc3BpLT5pcnEpOworCisJCWlmIChjYXJkLT5wZGF0YS0+dGVhcmRvd24pCisJCQljYXJkLT5wZGF0YS0+dGVhcmRvd24oc3BpKTsKKwkJY2FyZC0+c3VzcGVuZGVkID0gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpZl9zcGlfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9fc3BpX2RldmljZShkZXYpOworCXN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCA9IHNwaV9nZXRfZHJ2ZGF0YShzcGkpOworCisJLyogU2NoZWR1bGUgZGVsYXllZCB3b3JrICovCisJc2NoZWR1bGVfd29yaygmY2FyZC0+cmVzdW1lX3dvcmspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBpZl9zcGlfcG1fb3BzID0geworCS5zdXNwZW5kCT0gaWZfc3BpX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBpZl9zcGlfcmVzdW1lLAorfTsKKwogc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIGxpYmVydGFzX3NwaV9kcml2ZXIgPSB7CiAJLnByb2JlCT0gaWZfc3BpX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChsaWJlcnRhc19zcGlfcmVtb3ZlKSwKQEAgLTExODEsNiArMTI5NCw3IEBACiAJCS5uYW1lCT0gImxpYmVydGFzX3NwaSIsCiAJCS5idXMJPSAmc3BpX2J1c190eXBlLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLnBtCT0gJmlmX3NwaV9wbV9vcHMsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmgKaW5kZXggZDJhYzFkYy4uZTQ1MGUzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmgKQEAgLTg2LDM0ICs4NiwzNCBAQAogI2RlZmluZSBJRl9TUElfREVWSUNFSURfQ1RSTF9SRUdfVE9fQ0FSRF9SRVYoZGMpIChkYyAmIDB4MDAwMDAwZmYpCiAKIC8qKioqKioqKioqKioqKioqKiBJRl9TUElfSE9TVF9JTlRfQ1RSTF9SRUcgKioqKioqKioqKioqKioqKiovCi0vKiogSG9zdCBJbnRlcnJ1cHQgQ29udHJvbCBiaXQgOiBXYWtlIHVwICovCisvKiBIb3N0IEludGVycnVwdCBDb250cm9sIGJpdCA6IFdha2UgdXAgKi8KICNkZWZpbmUgSUZfU1BJX0hJQ1RfV0FLRV9VUAkJCQkoMTw8MCkKLS8qKiBIb3N0IEludGVycnVwdCBDb250cm9sIGJpdCA6IFdMQU4gcmVhZHkgKi8KKy8qIEhvc3QgSW50ZXJydXB0IENvbnRyb2wgYml0IDogV0xBTiByZWFkeSAqLwogI2RlZmluZSBJRl9TUElfSElDVF9XTEFOX1JFQURZCQkJCSgxPDwxKQogLyojZGVmaW5lIElGX1NQSV9ISUNUX0ZJRk9fRklSU1RfSEFMRl9FTVBUWQkJKDE8PDIpICovCiAvKiNkZWZpbmUgSUZfU1BJX0hJQ1RfRklGT19TRUNPTkRfSEFMRl9FTVBUWQkJKDE8PDMpICovCiAvKiNkZWZpbmUgSUZfU1BJX0hJQ1RfSVJRU1JDX1dMQU4JCQkoMTw8NCkgKi8KLS8qKiBIb3N0IEludGVycnVwdCBDb250cm9sIGJpdCA6IFR4IGF1dG8gZG93bmxvYWQgKi8KKy8qIEhvc3QgSW50ZXJydXB0IENvbnRyb2wgYml0IDogVHggYXV0byBkb3dubG9hZCAqLwogI2RlZmluZSBJRl9TUElfSElDVF9UWF9ET1dOTE9BRF9PVkVSX0FVVE8JCSgxPDw1KQotLyoqIEhvc3QgSW50ZXJydXB0IENvbnRyb2wgYml0IDogUnggYXV0byB1cGxvYWQgKi8KKy8qIEhvc3QgSW50ZXJydXB0IENvbnRyb2wgYml0IDogUnggYXV0byB1cGxvYWQgKi8KICNkZWZpbmUgSUZfU1BJX0hJQ1RfUlhfVVBMT0FEX09WRVJfQVVUTwkJCSgxPDw2KQotLyoqIEhvc3QgSW50ZXJydXB0IENvbnRyb2wgYml0IDogQ29tbWFuZCBhdXRvIGRvd25sb2FkICovCisvKiBIb3N0IEludGVycnVwdCBDb250cm9sIGJpdCA6IENvbW1hbmQgYXV0byBkb3dubG9hZCAqLwogI2RlZmluZSBJRl9TUElfSElDVF9DTURfRE9XTkxPQURfT1ZFUl9BVVRPCQkoMTw8NykKLS8qKiBIb3N0IEludGVycnVwdCBDb250cm9sIGJpdCA6IENvbW1hbmQgYXV0byB1cGxvYWQgKi8KKy8qIEhvc3QgSW50ZXJydXB0IENvbnRyb2wgYml0IDogQ29tbWFuZCBhdXRvIHVwbG9hZCAqLwogI2RlZmluZSBJRl9TUElfSElDVF9DTURfVVBMT0FEX09WRVJfQVVUTwkJKDE8PDgpCiAKIC8qKioqKioqKioqKioqKioqKiBJRl9TUElfQ0FSRF9JTlRfQ0FVU0VfUkVHICoqKioqKioqKioqKioqKioqLwotLyoqIENhcmQgSW50ZXJydXB0IENhc2UgYml0IDogVHggZG93bmxvYWQgb3ZlciAqLworLyogQ2FyZCBJbnRlcnJ1cHQgQ2FzZSBiaXQgOiBUeCBkb3dubG9hZCBvdmVyICovCiAjZGVmaW5lIElGX1NQSV9DSUNfVFhfRE9XTkxPQURfT1ZFUgkJCSgxPDwwKQotLyoqIENhcmQgSW50ZXJydXB0IENhc2UgYml0IDogUnggdXBsb2FkIG92ZXIgKi8KKy8qIENhcmQgSW50ZXJydXB0IENhc2UgYml0IDogUnggdXBsb2FkIG92ZXIgKi8KICNkZWZpbmUgSUZfU1BJX0NJQ19SWF9VUExPQURfT1ZFUgkJCSgxPDwxKQotLyoqIENhcmQgSW50ZXJydXB0IENhc2UgYml0IDogQ29tbWFuZCBkb3dubG9hZCBvdmVyICovCisvKiBDYXJkIEludGVycnVwdCBDYXNlIGJpdCA6IENvbW1hbmQgZG93bmxvYWQgb3ZlciAqLwogI2RlZmluZSBJRl9TUElfQ0lDX0NNRF9ET1dOTE9BRF9PVkVSCQkJKDE8PDIpCi0vKiogQ2FyZCBJbnRlcnJ1cHQgQ2FzZSBiaXQgOiBIb3N0IGV2ZW50ICovCisvKiBDYXJkIEludGVycnVwdCBDYXNlIGJpdCA6IEhvc3QgZXZlbnQgKi8KICNkZWZpbmUgSUZfU1BJX0NJQ19IT1NUX0VWRU5UCQkJCSgxPDwzKQotLyoqIENhcmQgSW50ZXJydXB0IENhc2UgYml0IDogQ29tbWFuZCB1cGxvYWQgb3ZlciAqLworLyogQ2FyZCBJbnRlcnJ1cHQgQ2FzZSBiaXQgOiBDb21tYW5kIHVwbG9hZCBvdmVyICovCiAjZGVmaW5lIElGX1NQSV9DSUNfQ01EX1VQTE9BRF9PVkVSCQkJKDE8PDQpCi0vKiogQ2FyZCBJbnRlcnJ1cHQgQ2FzZSBiaXQgOiBQb3dlciBkb3duICovCisvKiBDYXJkIEludGVycnVwdCBDYXNlIGJpdCA6IFBvd2VyIGRvd24gKi8KICNkZWZpbmUgSUZfU1BJX0NJQ19QT1dFUl9ET1dOCQkJCSgxPDw1KQogCiAvKioqKioqKioqKioqKioqKiogSUZfU1BJX0NBUkRfSU5UX1NUQVRVU19SRUcgKioqKioqKioqKioqKioqKiovCkBAIC0xMzgsNTEgKzEzOCw1MSBAQAogI2RlZmluZSBJRl9TUElfSElDVV9DTURfUkRfRklGT19VTkRFUkZMT1cJCSgxPDwxMCkKIAogLyoqKioqKioqKioqKioqKioqIElGX1NQSV9IT1NUX0lOVF9TVEFUVVNfUkVHICoqKioqKioqKioqKioqKioqLwotLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBUeCBkb3dubG9hZCByZWFkeSAqLworLyogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIGJpdCA6IFR4IGRvd25sb2FkIHJlYWR5ICovCiAjZGVmaW5lIElGX1NQSV9ISVNUX1RYX0RPV05MT0FEX1JEWQkJCSgxPDwwKQotLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBSeCB1cGxvYWQgcmVhZHkgKi8KKy8qIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBSeCB1cGxvYWQgcmVhZHkgKi8KICNkZWZpbmUgSUZfU1BJX0hJU1RfUlhfVVBMT0FEX1JEWQkJCSgxPDwxKQotLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBDb21tYW5kIGRvd25sb2FkIHJlYWR5ICovCisvKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogQ29tbWFuZCBkb3dubG9hZCByZWFkeSAqLwogI2RlZmluZSBJRl9TUElfSElTVF9DTURfRE9XTkxPQURfUkRZCQkJKDE8PDIpCi0vKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIGJpdCA6IENhcmQgZXZlbnQgKi8KKy8qIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBDYXJkIGV2ZW50ICovCiAjZGVmaW5lIElGX1NQSV9ISVNUX0NBUkRfRVZFTlQJCQkJKDE8PDMpCi0vKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIGJpdCA6IENvbW1hbmQgdXBsb2FkIHJlYWR5ICovCisvKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogQ29tbWFuZCB1cGxvYWQgcmVhZHkgKi8KICNkZWZpbmUgSUZfU1BJX0hJU1RfQ01EX1VQTE9BRF9SRFkJCQkoMTw8NCkKLS8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogSS9PIHdyaXRlIEZJRk8gb3ZlcmZsb3cgKi8KKy8qIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBJL08gd3JpdGUgRklGTyBvdmVyZmxvdyAqLwogI2RlZmluZSBJRl9TUElfSElTVF9JT19XUl9GSUZPX09WRVJGTE9XCQkJKDE8PDUpCi0vKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIGJpdCA6IEkvTyByZWFkIEZJRk8gdW5kZXJmbG93ICovCisvKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogSS9PIHJlYWQgRklGTyB1bmRlcmZsb3cgKi8KICNkZWZpbmUgSUZfU1BJX0hJU1RfSU9fUkRfRklGT19VTkRSRkxPVwkJCSgxPDw2KQotLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBEYXRhIHdyaXRlIEZJRk8gb3ZlcmZsb3cgKi8KKy8qIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBEYXRhIHdyaXRlIEZJRk8gb3ZlcmZsb3cgKi8KICNkZWZpbmUgSUZfU1BJX0hJU1RfREFUQV9XUl9GSUZPX09WRVJGTE9XCQkoMTw8NykKLS8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogRGF0YSByZWFkIEZJRk8gdW5kZXJmbG93ICovCisvKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogRGF0YSByZWFkIEZJRk8gdW5kZXJmbG93ICovCiAjZGVmaW5lIElGX1NQSV9ISVNUX0RBVEFfUkRfRklGT19VTkRFUkZMT1cJCSgxPDw4KQotLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBDb21tYW5kIHdyaXRlIEZJRk8gb3ZlcmZsb3cgKi8KKy8qIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBDb21tYW5kIHdyaXRlIEZJRk8gb3ZlcmZsb3cgKi8KICNkZWZpbmUgSUZfU1BJX0hJU1RfQ01EX1dSX0ZJRk9fT1ZFUkZMT1cJCSgxPDw5KQotLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBDb21tYW5kIHJlYWQgRklGTyB1bmRlcmZsb3cgKi8KKy8qIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBDb21tYW5kIHJlYWQgRklGTyB1bmRlcmZsb3cgKi8KICNkZWZpbmUgSUZfU1BJX0hJU1RfQ01EX1JEX0ZJRk9fVU5ERVJGTE9XCQkoMTw8MTApCiAKIC8qKioqKioqKioqKioqKioqKiBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX01BU0tfUkVHICoqKioqKioqKioqKioqKioqLwotLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IFR4IGRvd25sb2FkIHJlYWR5ICovCisvKiBIb3N0IEludGVycnVwdCBTdGF0dXMgTWFzayBiaXQgOiBUeCBkb3dubG9hZCByZWFkeSAqLwogI2RlZmluZSBJRl9TUElfSElTTV9UWF9ET1dOTE9BRF9SRFkJCQkoMTw8MCkKLS8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgTWFzayBiaXQgOiBSeCB1cGxvYWQgcmVhZHkgKi8KKy8qIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IFJ4IHVwbG9hZCByZWFkeSAqLwogI2RlZmluZSBJRl9TUElfSElTTV9SWF9VUExPQURfUkRZCQkJKDE8PDEpCi0vKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogQ29tbWFuZCBkb3dubG9hZCByZWFkeSAqLworLyogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogQ29tbWFuZCBkb3dubG9hZCByZWFkeSAqLwogI2RlZmluZSBJRl9TUElfSElTTV9DTURfRE9XTkxPQURfUkRZCQkJKDE8PDIpCi0vKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogQ2FyZCBldmVudCAqLworLyogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogQ2FyZCBldmVudCAqLwogI2RlZmluZSBJRl9TUElfSElTTV9DQVJERVZFTlQJCQkJKDE8PDMpCi0vKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogQ29tbWFuZCB1cGxvYWQgcmVhZHkgKi8KKy8qIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IENvbW1hbmQgdXBsb2FkIHJlYWR5ICovCiAjZGVmaW5lIElGX1NQSV9ISVNNX0NNRF9VUExPQURfUkRZCQkJKDE8PDQpCi0vKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogSS9PIHdyaXRlIEZJRk8gb3ZlcmZsb3cgKi8KKy8qIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IEkvTyB3cml0ZSBGSUZPIG92ZXJmbG93ICovCiAjZGVmaW5lIElGX1NQSV9ISVNNX0lPX1dSX0ZJRk9fT1ZFUkZMT1cJCQkoMTw8NSkKLS8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgTWFzayBiaXQgOiBJL08gcmVhZCBGSUZPIHVuZGVyZmxvdyAqLworLyogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogSS9PIHJlYWQgRklGTyB1bmRlcmZsb3cgKi8KICNkZWZpbmUgSUZfU1BJX0hJU01fSU9fUkRfRklGT19VTkRFUkZMT1cJCSgxPDw2KQotLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IERhdGEgd3JpdGUgRklGTyBvdmVyZmxvdyAqLworLyogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogRGF0YSB3cml0ZSBGSUZPIG92ZXJmbG93ICovCiAjZGVmaW5lIElGX1NQSV9ISVNNX0RBVEFfV1JfRklGT19PVkVSRkxPVwkJKDE8PDcpCi0vKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogRGF0YSB3cml0ZSBGSUZPIHVuZGVyZmxvdyAqLworLyogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogRGF0YSB3cml0ZSBGSUZPIHVuZGVyZmxvdyAqLwogI2RlZmluZSBJRl9TUElfSElTTV9EQVRBX1JEX0ZJRk9fVU5ERVJGTE9XCQkoMTw8OCkKLS8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgTWFzayBiaXQgOiBDb21tYW5kIHdyaXRlIEZJRk8gb3ZlcmZsb3cgKi8KKy8qIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IENvbW1hbmQgd3JpdGUgRklGTyBvdmVyZmxvdyAqLwogI2RlZmluZSBJRl9TUElfSElTTV9DTURfV1JfRklGT19PVkVSRkxPVwkJKDE8PDkpCi0vKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogQ29tbWFuZCB3cml0ZSBGSUZPIHVuZGVyZmxvdyAqLworLyogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogQ29tbWFuZCB3cml0ZSBGSUZPIHVuZGVyZmxvdyAqLwogI2RlZmluZSBJRl9TUElfSElTTV9DTURfUkRfRklGT19VTkRFUkZMT1cJCSgxPDwxMCkKIAogLyoqKioqKioqKioqKioqKioqIElGX1NQSV9TUFVfQlVTX01PREVfUkVHICoqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl91c2IuYwppbmRleCA2NTI0YzcwLi5iNWFjYzM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl91c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl91c2IuYwpAQCAtMSw2ICsxLDkgQEAKLS8qKgotICAqIFRoaXMgZmlsZSBjb250YWlucyBmdW5jdGlvbnMgdXNlZCBpbiBVU0IgaW50ZXJmYWNlIG1vZHVsZS4KLSAgKi8KKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgZnVuY3Rpb25zIHVzZWQgaW4gVVNCIGludGVyZmFjZSBtb2R1bGUuCisgKi8KKworI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CkBAIC02Niw3ICs2OSw3IEBACiAKIC8qIHN5c2ZzIGhvb2tzICovCiAKLS8qKgorLyoKICAqICBTZXQgZnVuY3Rpb24gdG8gd3JpdGUgZmlybXdhcmUgdG8gZGV2aWNlJ3MgcGVyc2lzdGVudCBtZW1vcnkKICAqLwogc3RhdGljIHNzaXplX3QgaWZfdXNiX2Zpcm13YXJlX3NldChzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC04NSw3ICs4OCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyoqCisvKgogICogbGJzX2ZsYXNoX2Z3IGF0dHJpYnV0ZSB0byBiZSBleHBvcnRlZCBwZXIgZXRoWCBpbnRlcmZhY2UgdGhyb3VnaCBzeXNmcwogICogKC9zeXMvY2xhc3MvbmV0L2V0aFgvbGJzX2ZsYXNoX2Z3KS4gIFVzZSB0aGlzIGxpa2Ugc28gdG8gd3JpdGUgZmlybXdhcmUgdG8KICAqIHRoZSBkZXZpY2UncyBwZXJzaXN0ZW50IG1lbW9yeToKQEAgLTk0LDcgKzk3LDE0IEBACiBzdGF0aWMgREVWSUNFX0FUVFIobGJzX2ZsYXNoX2Z3LCAwMjAwLCBOVUxMLCBpZl91c2JfZmlybXdhcmVfc2V0KTsKIAogLyoqCi0gKiAgU2V0IGZ1bmN0aW9uIHRvIHdyaXRlIGZpcm13YXJlIHRvIGRldmljZSdzIHBlcnNpc3RlbnQgbWVtb3J5CisgKiBpZl91c2JfYm9vdDJfc2V0IC0gd3JpdGUgZmlybXdhcmUgdG8gZGV2aWNlJ3MgcGVyc2lzdGVudCBtZW1vcnkKKyAqCisgKiBAZGV2OiB0YXJnZXQgZGV2aWNlCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZXMKKyAqIEBidWY6IGZpcm13YXJlIGJ1ZmZlciB0byB3cml0ZQorICogQGNvdW50OiBudW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUKKyAqCisgKiByZXR1cm5zOiBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBvciBuZWdhdGl2ZSBlcnJvciBjb2RlCiAgKi8KIHN0YXRpYyBzc2l6ZV90IGlmX3VzYl9ib290Ml9zZXQoc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCkBAIC0xMTIsNyArMTIyLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKioKKy8qCiAgKiBsYnNfZmxhc2hfYm9vdDIgYXR0cmlidXRlIHRvIGJlIGV4cG9ydGVkIHBlciBldGhYIGludGVyZmFjZSB0aHJvdWdoIHN5c2ZzCiAgKiAoL3N5cy9jbGFzcy9uZXQvZXRoWC9sYnNfZmxhc2hfYm9vdDIpLiAgVXNlIHRoaXMgbGlrZSBzbyB0byB3cml0ZSBmaXJtd2FyZQogICogdG8gdGhlIGRldmljZSdzIHBlcnNpc3RlbnQgbWVtb3J5OgpAQCAtMTIxLDkgKzEzMSwxMCBAQAogc3RhdGljIERFVklDRV9BVFRSKGxic19mbGFzaF9ib290MiwgMDIwMCwgTlVMTCwgaWZfdXNiX2Jvb3QyX3NldCk7CiAKIC8qKgotICogIEBicmllZiAgY2FsbCBiYWNrIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgc3RhdHVzIG9mIHRoZSBVUkIKLSAqICBAcGFyYW0gdXJiIAkJcG9pbnRlciB0byB1cmIgc3RydWN0dXJlCi0gKiAgQHJldHVybiAJICAgCU4vQQorICogaWZfdXNiX3dyaXRlX2J1bGtfY2FsbGJhY2sgLSBjYWxsYmFjayBmdW5jdGlvbiB0byBoYW5kbGUgdGhlIHN0YXR1cworICogb2YgdGhlIFVSQgorICogQHVyYjoJcG9pbnRlciB0byAmdXJiIHN0cnVjdHVyZQorICogcmV0dXJuczoJTi9BCiAgKi8KIHN0YXRpYyB2b2lkIGlmX3VzYl93cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIHsKQEAgLTE0NSwxNCArMTU2LDE0IEBACiAJCQlsYnNfaG9zdF90b19jYXJkX2RvbmUocHJpdik7CiAJfSBlbHNlIHsKIAkJLyogcHJpbnQgdGhlIGZhaWx1cmUgc3RhdHVzIG51bWJlciBmb3IgZGVidWcgKi8KLQkJbGJzX3ByX2luZm8oIlVSQiBpbiBmYWlsdXJlIHN0YXR1czogJWRcbiIsIHVyYi0+c3RhdHVzKTsKKwkJcHJfaW5mbygiVVJCIGluIGZhaWx1cmUgc3RhdHVzOiAlZFxuIiwgdXJiLT5zdGF0dXMpOwogCX0KIH0KIAogLyoqCi0gKiAgQGJyaWVmICBmcmVlIHR4L3J4IHVyYiwgc2tiIGFuZCByeCBidWZmZXIKLSAqICBAcGFyYW0gY2FyZHAJcG9pbnRlciBpZl91c2JfY2FyZAotICogIEByZXR1cm4gCSAgIAlOL0EKKyAqIGlmX3VzYl9mcmVlIC0gZnJlZSB0eC9yeCB1cmIsIHNrYiBhbmQgcnggYnVmZmVyCisgKiBAY2FyZHA6CXBvaW50ZXIgdG8gJmlmX3VzYl9jYXJkCisgKiByZXR1cm5zOglOL0EKICAqLwogc3RhdGljIHZvaWQgaWZfdXNiX2ZyZWUoc3RydWN0IGlmX3VzYl9jYXJkICpjYXJkcCkKIHsKQEAgLTE5NSw3ICsyMDYsNyBAQAogCXdha2VfbWV0aG9kLmhkci5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHdha2VfbWV0aG9kKSk7CiAJd2FrZV9tZXRob2QuYWN0aW9uID0gY3B1X3RvX2xlMTYoQ01EX0FDVF9HRVQpOwogCWlmIChsYnNfY21kX3dpdGhfcmVzcG9uc2UocHJpdiwgQ01EXzgwMl8xMV9GV19XQUtFX01FVEhPRCwgJndha2VfbWV0aG9kKSkgewotCQlsYnNfcHJfaW5mbygiRmlybXdhcmUgZG9lcyBub3Qgc2VlbSB0byBzdXBwb3J0IFBTIG1vZGVcbiIpOworCQluZXRkZXZfaW5mbyhwcml2LT5kZXYsICJGaXJtd2FyZSBkb2VzIG5vdCBzZWVtIHRvIHN1cHBvcnQgUFMgbW9kZVxuIik7CiAJCXByaXYtPmZ3Y2FwaW5mbyAmPSB+RldfQ0FQSU5GT19QUzsKIAl9IGVsc2UgewogCQlpZiAobGUxNl90b19jcHUod2FrZV9tZXRob2QubWV0aG9kKSA9PSBDTURfV0FLRV9NRVRIT0RfQ09NTUFORF9JTlQpIHsKQEAgLTIwNCw3ICsyMTUsOCBAQAogCQkJLyogVGhlIHZlcnNpb25zIHdoaWNoIGJvb3QgdXAgdGhpcyB3YXkgZG9uJ3Qgc2VlbSB0bwogCQkJICAgd29yayBldmVuIGlmIHdlIHNldCBpdCB0byB0aGUgY29tbWFuZCBpbnRlcnJ1cHQgKi8KIAkJCXByaXYtPmZ3Y2FwaW5mbyAmPSB+RldfQ0FQSU5GT19QUzsKLQkJCWxic19wcl9pbmZvKCJGaXJtd2FyZSBkb2Vzbid0IHdha2UgdmlhIGNvbW1hbmQgaW50ZXJydXB0OyBkaXNhYmxpbmcgUFMgbW9kZVxuIik7CisJCQluZXRkZXZfaW5mbyhwcml2LT5kZXYsCisJCQkJICAgICJGaXJtd2FyZSBkb2Vzbid0IHdha2UgdmlhIGNvbW1hbmQgaW50ZXJydXB0OyBkaXNhYmxpbmcgUFMgbW9kZVxuIik7CiAJCX0KIAl9CiB9CkBAIC0yMTYsNyArMjI4LDcgQEAKIAlpZiAoY2FyZHAtPmZ3ZG5sZG92ZXIpIHsKIAkJbGJzX2RlYl91c2IoIkRvd25sb2FkIGNvbXBsZXRlLCBubyBldmVudC4gQXNzdW1pbmcgc3VjY2Vzc1xuIik7CiAJfSBlbHNlIHsKLQkJbGJzX3ByX2VycigiRG93bmxvYWQgdGltZWQgb3V0XG4iKTsKKwkJcHJfZXJyKCJEb3dubG9hZCB0aW1lZCBvdXRcbiIpOwogCQljYXJkcC0+c3VycHJpc2VfcmVtb3ZlZCA9IDE7CiAJfQogCXdha2VfdXAoJmNhcmRwLT5md193cSk7CkBAIC0yMzEsMTAgKzI0MywxMCBAQAogI2VuZGlmCiAKIC8qKgotICogIEBicmllZiBzZXRzIHRoZSBjb25maWd1cmF0aW9uIHZhbHVlcwotICogIEBwYXJhbSBpZm51bQlpbnRlcmZhY2UgbnVtYmVyCi0gKiAgQHBhcmFtIGlkCQlwb2ludGVyIHRvIHVzYl9kZXZpY2VfaWQKLSAqICBAcmV0dXJuIAkgICAJMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG9uIGZhaWx1cmUKKyAqIGlmX3VzYl9wcm9iZSAtIHNldHMgdGhlIGNvbmZpZ3VyYXRpb24gdmFsdWVzCisgKiBAaW50ZjoJJnVzYl9pbnRlcmZhY2UgcG9pbnRlcgorICogQGlkOglwb2ludGVyIHRvIHVzYl9kZXZpY2VfaWQKKyAqIHJldHVybnM6CTAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvbiBmYWlsdXJlCiAgKi8KIHN0YXRpYyBpbnQgaWZfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQpAQCAtMjUwLDcgKzI2Miw3IEBACiAKIAljYXJkcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpZl91c2JfY2FyZCksIEdGUF9LRVJORUwpOwogCWlmICghY2FyZHApIHsKLQkJbGJzX3ByX2VycigiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIHByaXZhdGUgZGF0YS5cbiIpOworCQlwcl9lcnIoIk91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBwcml2YXRlIGRhdGFcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtMzQwLDEwICszNTIsMTIgQEAKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGNhcmRwKTsKIAogCWlmIChkZXZpY2VfY3JlYXRlX2ZpbGUoJnByaXYtPmRldi0+ZGV2LCAmZGV2X2F0dHJfbGJzX2ZsYXNoX2Z3KSkKLQkJbGJzX3ByX2VycigiY2Fubm90IHJlZ2lzdGVyIGxic19mbGFzaF9mdyBhdHRyaWJ1dGVcbiIpOworCQluZXRkZXZfZXJyKHByaXYtPmRldiwKKwkJCSAgICJjYW5ub3QgcmVnaXN0ZXIgbGJzX2ZsYXNoX2Z3IGF0dHJpYnV0ZVxuIik7CiAKIAlpZiAoZGV2aWNlX2NyZWF0ZV9maWxlKCZwcml2LT5kZXYtPmRldiwgJmRldl9hdHRyX2xic19mbGFzaF9ib290MikpCi0JCWxic19wcl9lcnIoImNhbm5vdCByZWdpc3RlciBsYnNfZmxhc2hfYm9vdDIgYXR0cmlidXRlXG4iKTsKKwkJbmV0ZGV2X2Vycihwcml2LT5kZXYsCisJCQkgICAiY2Fubm90IHJlZ2lzdGVyIGxic19mbGFzaF9ib290MiBhdHRyaWJ1dGVcbiIpOwogCiAJLyoKIAkgKiBFSFNfUkVNT1ZFX1dBS0VVUCBpcyBub3Qgc3VwcG9ydGVkIG9uIGFsbCB2ZXJzaW9ucyBvZiB0aGUgZmlybXdhcmUuCkBAIC0zNjYsOSArMzgwLDkgQEAKIH0KIAogLyoqCi0gKiAgQGJyaWVmIGZyZWUgcmVzb3VyY2UgYW5kIGNsZWFudXAKLSAqICBAcGFyYW0gaW50ZgkJVVNCIGludGVyZmFjZSBzdHJ1Y3R1cmUKLSAqICBAcmV0dXJuIAkgICAJTi9BCisgKiBpZl91c2JfZGlzY29ubmVjdCAtIGZyZWUgcmVzb3VyY2UgYW5kIGNsZWFudXAKKyAqIEBpbnRmOglVU0IgaW50ZXJmYWNlIHN0cnVjdHVyZQorICogcmV0dXJuczoJTi9BCiAgKi8KIHN0YXRpYyB2b2lkIGlmX3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewpAQCAtMzk4LDkgKzQxMiw5IEBACiB9CiAKIC8qKgotICogIEBicmllZiAgVGhpcyBmdW5jdGlvbiBkb3dubG9hZCBGVwotICogIEBwYXJhbSBwcml2CQlwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZQotICogIEByZXR1cm4gCSAgIAkwCisgKiBpZl91c2Jfc2VuZF9md19wa3QgLSBkb3dubG9hZCBGVworICogQGNhcmRwOglwb2ludGVyIHRvICZzdHJ1Y3QgaWZfdXNiX2NhcmQKKyAqIHJldHVybnM6CTAKICAqLwogc3RhdGljIGludCBpZl91c2Jfc2VuZF9md19wa3Qoc3RydWN0IGlmX3VzYl9jYXJkICpjYXJkcCkKIHsKQEAgLTQ4NiwxMSArNTAwLDExIEBACiB9CiAKIC8qKgotICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIHRyYW5zZmVyIHRoZSBkYXRhIHRvIHRoZSBkZXZpY2UuCi0gKiAgQHBhcmFtIHByaXYgCXBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlCi0gKiAgQHBhcmFtIHBheWxvYWQJcG9pbnRlciB0byBwYXlsb2FkIGRhdGEKLSAqICBAcGFyYW0gbmIJCWRhdGEgbGVuZ3RoCi0gKiAgQHJldHVybiAJICAgCTAgb3IgLTEKKyAqICB1c2JfdHhfYmxvY2sgLSB0cmFuc2ZlciB0aGUgZGF0YSB0byB0aGUgZGV2aWNlCisgKiAgQGNhcmRwOiAJcG9pbnRlciB0byAmc3RydWN0IGlmX3VzYl9jYXJkCisgKiAgQHBheWxvYWQ6CXBvaW50ZXIgdG8gcGF5bG9hZCBkYXRhCisgKiAgQG5iOglkYXRhIGxlbmd0aAorICogIHJldHVybnM6CTAgZm9yIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgY29kZQogICovCiBzdGF0aWMgaW50IHVzYl90eF9ibG9jayhzdHJ1Y3QgaWZfdXNiX2NhcmQgKmNhcmRwLCB1aW50OF90ICpwYXlsb2FkLCB1aW50MTZfdCBuYikKIHsKQEAgLTUyOCw3ICs1NDIsNyBAQAogCWludCByZXQgPSAtMTsKIAogCWlmICghKHNrYiA9IGRldl9hbGxvY19za2IoTVJWRFJWX0VUSF9SWF9QQUNLRVRfQlVGRkVSX1NJWkUpKSkgewotCQlsYnNfcHJfZXJyKCJObyBmcmVlIHNrYlxuIik7CisJCXByX2VycigiTm8gZnJlZSBza2JcbiIpOwogCQlnb3RvIHJ4X3JldDsKIAl9CiAKQEAgLTU4Nyw3ICs2MDEsNyBAQAogCiAJCWlmICh0bXBbMF0gPT0gY3B1X3RvX2xlMzIoQ01EX1RZUEVfSU5ESUNBVElPTikgJiYKIAkJICAgIHRtcFsxXSA9PSBjcHVfdG9fbGUzMihNQUNSRUdfSU5UX0NPREVfRklSTVdBUkVfUkVBRFkpKSB7Ci0JCQlsYnNfcHJfaW5mbygiRmlybXdhcmUgcmVhZHkgZXZlbnQgcmVjZWl2ZWRcbiIpOworCQkJcHJfaW5mbygiRmlybXdhcmUgcmVhZHkgZXZlbnQgcmVjZWl2ZWRcbiIpOwogCQkJd2FrZV91cCgmY2FyZHAtPmZ3X3dxKTsKIAkJfSBlbHNlIHsKIAkJCWxic19kZWJfdXNiKCJXYWl0aW5nIGZvciBjb25maXJtYXRpb247IGdvdCAleCAleFxuIiwKQEAgLTYxNCwyMCArNjI4LDIwIEBACiAJCQkgICAgYm9vdGNtZHJlc3AubWFnaWMgPT0gY3B1X3RvX2xlMzIoQ01EX1RZUEVfREFUQSkgfHwKIAkJCSAgICBib290Y21kcmVzcC5tYWdpYyA9PSBjcHVfdG9fbGUzMihDTURfVFlQRV9JTkRJQ0FUSU9OKSkgewogCQkJCWlmICghY2FyZHAtPmJvb3RjbWRyZXNwKQotCQkJCQlsYnNfcHJfaW5mbygiRmlybXdhcmUgYWxyZWFkeSBzZWVtcyBhbGl2ZTsgcmVzZXR0aW5nXG4iKTsKKwkJCQkJcHJfaW5mbygiRmlybXdhcmUgYWxyZWFkeSBzZWVtcyBhbGl2ZTsgcmVzZXR0aW5nXG4iKTsKIAkJCQljYXJkcC0+Ym9vdGNtZHJlc3AgPSAtMTsKIAkJCX0gZWxzZSB7Ci0JCQkJbGJzX3ByX2luZm8oImJvb3QgY21kIHJlc3BvbnNlIHdyb25nIG1hZ2ljIG51bWJlciAoMHgleClcbiIsCisJCQkJcHJfaW5mbygiYm9vdCBjbWQgcmVzcG9uc2Ugd3JvbmcgbWFnaWMgbnVtYmVyICgweCV4KVxuIiwKIAkJCQkJICAgIGxlMzJfdG9fY3B1KGJvb3RjbWRyZXNwLm1hZ2ljKSk7CiAJCQl9CiAJCX0gZWxzZSBpZiAoKGJvb3RjbWRyZXNwLmNtZCAhPSBCT09UX0NNRF9GV19CWV9VU0IpICYmCiAJCQkgICAoYm9vdGNtZHJlc3AuY21kICE9IEJPT1RfQ01EX1VQREFURV9GVykgJiYKIAkJCSAgIChib290Y21kcmVzcC5jbWQgIT0gQk9PVF9DTURfVVBEQVRFX0JPT1QyKSkgewotCQkJbGJzX3ByX2luZm8oImJvb3QgY21kIHJlc3BvbnNlIGNtZF90YWcgZXJyb3IgKCVkKVxuIiwKLQkJCQkgICAgYm9vdGNtZHJlc3AuY21kKTsKKwkJCXByX2luZm8oImJvb3QgY21kIHJlc3BvbnNlIGNtZF90YWcgZXJyb3IgKCVkKVxuIiwKKwkJCQlib290Y21kcmVzcC5jbWQpOwogCQl9IGVsc2UgaWYgKGJvb3RjbWRyZXNwLnJlc3VsdCAhPSBCT09UX0NNRF9SRVNQX09LKSB7Ci0JCQlsYnNfcHJfaW5mbygiYm9vdCBjbWQgcmVzcG9uc2UgcmVzdWx0IGVycm9yICglZClcbiIsCi0JCQkJICAgIGJvb3RjbWRyZXNwLnJlc3VsdCk7CisJCQlwcl9pbmZvKCJib290IGNtZCByZXNwb25zZSByZXN1bHQgZXJyb3IgKCVkKVxuIiwKKwkJCQlib290Y21kcmVzcC5yZXN1bHQpOwogCQl9IGVsc2UgewogCQkJY2FyZHAtPmJvb3RjbWRyZXNwID0gMTsKIAkJCWxic19kZWJfdXNiZCgmY2FyZHAtPnVkZXYtPmRldiwKQEAgLTcyNywxMSArNzQxLDExIEBACiB9CiAKIC8qKgotICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIHJlYWRzIG9mIHRoZSBwYWNrZXQgaW50byB0aGUgdXBsb2FkIGJ1ZmYsCi0gKiAgd2FrZSB1cCB0aGUgbWFpbiB0aHJlYWQgYW5kIGluaXRpYWxpc2UgdGhlIFJ4IGNhbGxhY2suCisgKiAgaWZfdXNiX3JlY2VpdmUgLSByZWFkIHRoZSBwYWNrZXQgaW50byB0aGUgdXBsb2FkIGJ1ZmZlciwKKyAqICB3YWtlIHVwIHRoZSBtYWluIHRocmVhZCBhbmQgaW5pdGlhbGlzZSB0aGUgUnggY2FsbGFjawogICoKLSAqICBAcGFyYW0gdXJiCQlwb2ludGVyIHRvIHN0cnVjdCB1cmIKLSAqICBAcmV0dXJuIAkgICAJTi9BCisgKiAgQHVyYjoJcG9pbnRlciB0byAmc3RydWN0IHVyYgorICogIHJldHVybnM6CU4vQQogICovCiBzdGF0aWMgdm9pZCBpZl91c2JfcmVjZWl2ZShzdHJ1Y3QgdXJiICp1cmIpCiB7CkBAIC04MDIsMTIgKzgxNiwxMiBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBkb3dubG9hZHMgZGF0YSB0byBGVwotICogIEBwYXJhbSBwcml2CQlwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gdHlwZQkJdHlwZSBvZiBkYXRhCi0gKiAgQHBhcmFtIGJ1ZgkJcG9pbnRlciB0byBkYXRhIGJ1ZmZlcgotICogIEBwYXJhbSBsZW4JCW51bWJlciBvZiBieXRlcwotICogIEByZXR1cm4gCSAgIAkwIG9yIC0xCisgKiAgaWZfdXNiX2hvc3RfdG9fY2FyZCAtIGRvd25sb2FkcyBkYXRhIHRvIEZXCisgKiAgQHByaXY6CXBvaW50ZXIgdG8gJnN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqICBAdHlwZToJdHlwZSBvZiBkYXRhCisgKiAgQHBheWxvYWQ6CXBvaW50ZXIgdG8gZGF0YSBidWZmZXIKKyAqICBAbmI6CW51bWJlciBvZiBieXRlcworICogIHJldHVybnM6CTAgZm9yIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgY29kZQogICovCiBzdGF0aWMgaW50IGlmX3VzYl9ob3N0X3RvX2NhcmQoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1aW50OF90IHR5cGUsCiAJCQkgICAgICAgdWludDhfdCAqcGF5bG9hZCwgdWludDE2X3QgbmIpCkBAIC04MzEsMTAgKzg0NSwxMSBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBpc3N1ZXMgQm9vdCBjb21tYW5kIHRvIHRoZSBCb290MiBjb2RlCi0gKiAgQHBhcmFtIGl2YWx1ZSAgIDE6Qm9vdCBmcm9tIEZXIGJ5IFVTQi1Eb3dubG9hZAotICogICAgICAgICAgICAgICAgICAyOkJvb3QgZnJvbSBGVyBpbiBFRVBST00KLSAqICBAcmV0dXJuIAkgICAJMAorICogIGlmX3VzYl9pc3N1ZV9ib290X2NvbW1hbmQgLSBpc3N1ZXMgQm9vdCBjb21tYW5kIHRvIHRoZSBCb290MiBjb2RlCisgKiAgQGNhcmRwOglwb2ludGVyIHRvICZpZl91c2JfY2FyZAorICogIEBpdmFsdWU6CTE6Qm9vdCBmcm9tIEZXIGJ5IFVTQi1Eb3dubG9hZAorICoJCTI6Qm9vdCBmcm9tIEZXIGluIEVFUFJPTQorICogIHJldHVybnM6CTAgZm9yIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgY29kZQogICovCiBzdGF0aWMgaW50IGlmX3VzYl9pc3N1ZV9ib290X2NvbW1hbmQoc3RydWN0IGlmX3VzYl9jYXJkICpjYXJkcCwgaW50IGl2YWx1ZSkKIHsKQEAgLTg1MywxMSArODY4LDExIEBACiAKIAogLyoqCi0gKiAgQGJyaWVmIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoZSB2YWxpZGl0eSBvZiBCb290Mi9GVyBpbWFnZS4KKyAqICBjaGVja19md2ZpbGVfZm9ybWF0IC0gY2hlY2sgdGhlIHZhbGlkaXR5IG9mIEJvb3QyL0ZXIGltYWdlCiAgKgotICogIEBwYXJhbSBkYXRhICAgICAgICAgICAgICBwb2ludGVyIHRvIGltYWdlCi0gKiAgICAgICAgIGxlbiAgICAgICAgICAgICAgIGltYWdlIGxlbmd0aAotICogIEByZXR1cm4gICAgIDAgb3IgLTEKKyAqICBAZGF0YToJcG9pbnRlciB0byBpbWFnZQorICogIEB0b3RsZW46CWltYWdlIGxlbmd0aAorICogIHJldHVybnM6ICAgICAwIChnb29kKSBvciAxIChmYWlsdXJlKQogICovCiBzdGF0aWMgaW50IGNoZWNrX2Z3ZmlsZV9mb3JtYXQoY29uc3QgdWludDhfdCAqZGF0YSwgdWludDMyX3QgdG90bGVuKQogewpAQCAtODkyLDcgKzkwNyw3IEBACiAJfSB3aGlsZSAoIWV4aXQpOwogCiAJaWYgKHJldCkKLQkJbGJzX3ByX2VycigiZmlybXdhcmUgZmlsZSBmb3JtYXQgY2hlY2sgRkFJTFxuIik7CisJCXByX2VycigiZmlybXdhcmUgZmlsZSBmb3JtYXQgY2hlY2sgRkFJTFxuIik7CiAJZWxzZQogCQlsYnNfZGViX2Z3KCJmaXJtd2FyZSBmaWxlIGZvcm1hdCBjaGVjayBQQVNTXG4iKTsKIApAQCAtOTAxLDEzICs5MTYsMTMgQEAKIAogCiAvKioKLSogIEBicmllZiBUaGlzIGZ1bmN0aW9uIHByb2dyYW1zIHRoZSBmaXJtd2FyZSBzdWJqZWN0IHRvIGNtZAorKiAgaWZfdXNiX3Byb2dfZmlybXdhcmUgLSBwcm9ncmFtcyB0aGUgZmlybXdhcmUgc3ViamVjdCB0byBjbWQKICoKLSogIEBwYXJhbSBjYXJkcCAgICAgICAgICAgICB0aGUgaWZfdXNiX2NhcmQgZGVzY3JpcHRvcgotKiAgICAgICAgIGZ3bmFtZSAgICAgICAgICAgIGZpcm13YXJlIG9yIGJvb3QyIGltYWdlIGZpbGUgbmFtZQotKiAgICAgICAgIGNtZCAgICAgICAgICAgICAgIGVpdGhlciBCT09UX0NNRF9GV19CWV9VU0IsIEJPT1RfQ01EX1VQREFURV9GVywKLSogICAgICAgICAgICAgICAgICAgICAgICAgICBvciBCT09UX0NNRF9VUERBVEVfQk9PVDIuCi0qICBAcmV0dXJuICAgICAwIG9yIGVycm9yIGNvZGUKKyogIEBjYXJkcDoJdGhlIGlmX3VzYl9jYXJkIGRlc2NyaXB0b3IKKyogIEBmd25hbWU6CWZpcm13YXJlIG9yIGJvb3QyIGltYWdlIGZpbGUgbmFtZQorKiAgQGNtZDoJZWl0aGVyIEJPT1RfQ01EX0ZXX0JZX1VTQiwgQk9PVF9DTURfVVBEQVRFX0ZXLAorKgkJb3IgQk9PVF9DTURfVVBEQVRFX0JPT1QyLgorKiAgcmV0dXJuczoJMCBvciBlcnJvciBjb2RlCiAqLwogc3RhdGljIGludCBpZl91c2JfcHJvZ19maXJtd2FyZShzdHJ1Y3QgaWZfdXNiX2NhcmQgKmNhcmRwLAogCQkJCWNvbnN0IGNoYXIgKmZ3bmFtZSwgaW50IGNtZCkKQEAgLTk4OSw3ICsxMDA0LDcgQEAKIAogCXJldCA9IGdldF9mdyhjYXJkcCwgZnduYW1lKTsKIAlpZiAocmV0KSB7Ci0JCWxic19wcl9lcnIoImZhaWxlZCB0byBmaW5kIGZpcm13YXJlICglZClcbiIsIHJldCk7CisJCXByX2VycigiZmFpbGVkIHRvIGZpbmQgZmlybXdhcmUgKCVkKVxuIiwgcmV0KTsKIAkJZ290byBkb25lOwogCX0KIApAQCAtMTA2NCwxMyArMTA3OSwxMyBAQAogCXVzYl9raWxsX3VyYihjYXJkcC0+cnhfdXJiKTsKIAogCWlmICghY2FyZHAtPmZ3ZG5sZG92ZXIpIHsKLQkJbGJzX3ByX2luZm8oImZhaWxlZCB0byBsb2FkIGZ3LCByZXNldHRpbmcgZGV2aWNlIVxuIik7CisJCXByX2luZm8oImZhaWxlZCB0byBsb2FkIGZ3LCByZXNldHRpbmcgZGV2aWNlIVxuIik7CiAJCWlmICgtLXJlc2V0X2NvdW50ID49IDApIHsKIAkJCWlmX3VzYl9yZXNldF9kZXZpY2UoY2FyZHApOwogCQkJZ290byByZXN0YXJ0OwogCQl9CiAKLQkJbGJzX3ByX2luZm8oIkZXIGRvd25sb2FkIGZhaWx1cmUsIHRpbWUgPSAlZCBtc1xuIiwgaSAqIDEwMCk7CisJCXByX2luZm8oIkZXIGRvd25sb2FkIGZhaWx1cmUsIHRpbWUgPSAlZCBtc1xuIiwgaSAqIDEwMCk7CiAJCXJldCA9IC1FSU87CiAJCWdvdG8gcmVsZWFzZV9mdzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl91c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3VzYi5oCmluZGV4IGQ4MTllN2UuLjZlNDJlYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3VzYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3VzYi5oCkBAIC02LDkgKzYsOSBAQAogCiBzdHJ1Y3QgbGJzX3ByaXZhdGU7CiAKLS8qKgotICAqIFRoaXMgZmlsZSBjb250YWlucyBkZWZpbml0aW9uIGZvciBVU0IgaW50ZXJmYWNlLgotICAqLworLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBkZWZpbml0aW9uIGZvciBVU0IgaW50ZXJmYWNlLgorICovCiAjZGVmaW5lIENNRF9UWVBFX1JFUVVFU1QJCTB4RjAwREZBQ0UKICNkZWZpbmUgQ01EX1RZUEVfREFUQQkJCTB4QkVBREMwREUKICNkZWZpbmUgQ01EX1RZUEVfSU5ESUNBVElPTgkJMHhCRUVGRkFDRQpAQCAtNDAsNyArNDAsNyBAQAogCXVpbnQ4X3QJcGFkWzJdOwogfTsKIAotLyoqIFVTQiBjYXJkIGRlc2NyaXB0aW9uIHN0cnVjdHVyZSovCisvKiBVU0IgY2FyZCBkZXNjcmlwdGlvbiBzdHJ1Y3R1cmUqLwogc3RydWN0IGlmX3VzYl9jYXJkIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKIAl1aW50MzJfdCBtb2RlbDsgIC8qIE1PREVMXyogKi8KQEAgLTc3LDcgKzc3LDcgQEAKIAlfX2xlMTYgYm9vdDJfdmVyc2lvbjsKIH07CiAKLS8qKiBmd2hlYWRlciAqLworLyogZndoZWFkZXIgKi8KIHN0cnVjdCBmd2hlYWRlciB7CiAJX19sZTMyIGRubGRjbWQ7CiAJX19sZTMyIGJhc2VhZGRyOwpAQCAtODYsMTQgKzg2LDE0IEBACiB9OwogCiAjZGVmaW5lIEZXX01BWF9EQVRBX0JMS19TSVpFCTYwMAotLyoqIEZXRGF0YSAqLworLyogRldEYXRhICovCiBzdHJ1Y3QgZndkYXRhIHsKIAlzdHJ1Y3QgZndoZWFkZXIgaGRyOwogCV9fbGUzMiBzZXFudW07CiAJdWludDhfdCBkYXRhWzBdOwogfTsKIAotLyoqIGZ3c3luY2hlYWRlciAqLworLyogZndzeW5jaGVhZGVyICovCiBzdHJ1Y3QgZndzeW5jaGVhZGVyIHsKIAlfX2xlMzIgY21kOwogCV9fbGUzMiBzZXFudW07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tYWluLmMKaW5kZXggY2E4MTQ5Yy4uOGM0MDk0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYwpAQCAtMSw4ICsxLDEwIEBACi0vKioKLSAgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIG1ham9yIGZ1bmN0aW9ucyBpbiBXTEFOCi0gICogZHJpdmVyLiBJdCBpbmNsdWRlcyBpbml0LCBleGl0LCBvcGVuLCBjbG9zZSBhbmQgbWFpbgotICAqIHRocmVhZCBldGMuLgotICAqLworLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbWFqb3IgZnVuY3Rpb25zIGluIFdMQU4KKyAqIGRyaXZlci4gSXQgaW5jbHVkZXMgaW5pdCwgZXhpdCwgb3BlbiwgY2xvc2UgYW5kIG1haW4KKyAqIHRocmVhZCBldGMuLgorICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTM0LDE5ICszNiwyNSBAQAogRVhQT1JUX1NZTUJPTF9HUEwobGJzX2RlYnVnKTsKIG1vZHVsZV9wYXJhbV9uYW1lZChsaWJlcnRhc19kZWJ1ZywgbGJzX2RlYnVnLCBpbnQsIDA2NDQpOwogCit1bnNpZ25lZCBpbnQgbGJzX2Rpc2FibGVtZXNoOworRVhQT1JUX1NZTUJPTF9HUEwobGJzX2Rpc2FibGVtZXNoKTsKK21vZHVsZV9wYXJhbV9uYW1lZChsaWJlcnRhc19kaXNhYmxlbWVzaCwgbGJzX2Rpc2FibGVtZXNoLCBpbnQsIDA2NDQpOwogCi0vKiBUaGlzIGdsb2JhbCBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBzZW5kIHRoZSBjb25maXJtX3NsZWVwIGNvbW1hbmQgYXMKLSAqIGZhc3QgYXMgcG9zc2libGUgZG93biB0byB0aGUgZmlybXdhcmUuICovCisKKy8qCisgKiBUaGlzIGdsb2JhbCBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBzZW5kIHRoZSBjb25maXJtX3NsZWVwIGNvbW1hbmQgYXMKKyAqIGZhc3QgYXMgcG9zc2libGUgZG93biB0byB0aGUgZmlybXdhcmUuCisgKi8KIHN0cnVjdCBjbWRfY29uZmlybV9zbGVlcCBjb25maXJtX3NsZWVwOwogCiAKLS8qKgorLyoKICAqIHRoZSB0YWJsZSB0byBrZWVwIHJlZ2lvbiBjb2RlCiAgKi8KIHUxNiBsYnNfcmVnaW9uX2NvZGVfdG9faW5kZXhbTVJWRFJWX01BWF9SRUdJT05fQ09ERV0gPQogICAgIHsgMHgxMCwgMHgyMCwgMHgzMCwgMHgzMSwgMHgzMiwgMHg0MCB9OwogCi0vKioKKy8qCiAgKiBGVyByYXRlIHRhYmxlLiAgRlcgcmVmZXJzIHRvIHJhdGVzIGJ5IHRoZWlyIGluZGV4IGluIHRoaXMgdGFibGUsIG5vdCBieSB0aGUKICAqIHJhdGUgdmFsdWUgaXRzZWxmLiAgVmFsdWVzIG9mIDB4MDAgYXJlCiAgKiByZXNlcnZlZCBwb3NpdGlvbnMuCkBAIC01NywxMCArNjUsMTAgQEAKIH07CiAKIC8qKgotICogIEBicmllZiB1c2UgaW5kZXggdG8gZ2V0IHRoZSBkYXRhIHJhdGUKKyAqICBsYnNfZndfaW5kZXhfdG9fZGF0YV9yYXRlIC0gdXNlIGluZGV4IHRvIGdldCB0aGUgZGF0YSByYXRlCiAgKgotICogIEBwYXJhbSBpZHggICAgICAgICAgICAgICAgVGhlIGluZGV4IG9mIGRhdGEgcmF0ZQotICogIEByZXR1cm4gCSAgIAkJZGF0YSByYXRlIG9yIDAKKyAqICBAaWR4OglUaGUgaW5kZXggb2YgZGF0YSByYXRlCisgKiAgcmV0dXJuczoJZGF0YSByYXRlIG9yIDAKICAqLwogdTMyIGxic19md19pbmRleF90b19kYXRhX3JhdGUodTggaWR4KQogewpAQCAtNzAsMTAgKzc4LDEwIEBACiB9CiAKIC8qKgotICogIEBicmllZiB1c2UgcmF0ZSB0byBnZXQgdGhlIGluZGV4CisgKiAgbGJzX2RhdGFfcmF0ZV90b19md19pbmRleCAtIHVzZSByYXRlIHRvIGdldCB0aGUgaW5kZXgKICAqCi0gKiAgQHBhcmFtIHJhdGUgICAgICAgICAgICAgICAgIGRhdGEgcmF0ZQotICogIEByZXR1cm4gCSAgIAkJaW5kZXggb3IgMAorICogIEByYXRlOglkYXRhIHJhdGUKKyAqICByZXR1cm5zOglpbmRleCBvciAwCiAgKi8KIHU4IGxic19kYXRhX3JhdGVfdG9fZndfaW5kZXgodTMyIHJhdGUpCiB7CkBAIC05MSwxMCArOTksMTAgQEAKIAogCiAvKioKLSAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBvcGVucyB0aGUgZXRoWCBpbnRlcmZhY2UKKyAqICBsYnNfZGV2X29wZW4gLSBvcGVuIHRoZSBldGhYIGludGVyZmFjZQogICoKLSAqICBAcGFyYW0gZGV2ICAgICBBIHBvaW50ZXIgdG8gbmV0X2RldmljZSBzdHJ1Y3R1cmUKLSAqICBAcmV0dXJuIAkgICAwIG9yIC1FQlVTWSBpZiBtb25pdG9yIG1vZGUgYWN0aXZlCisgKiAgQGRldjoJQSBwb2ludGVyIHRvICZuZXRfZGV2aWNlIHN0cnVjdHVyZQorICogIHJldHVybnM6CTAgb3IgLUVCVVNZIGlmIG1vbml0b3IgbW9kZSBhY3RpdmUKICAqLwogc3RhdGljIGludCBsYnNfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTEyMCwxMCArMTI4LDEwIEBACiB9CiAKIC8qKgotICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIGNsb3NlcyB0aGUgZXRoWCBpbnRlcmZhY2UKKyAqICBsYnNfZXRoX3N0b3AgLSBjbG9zZSB0aGUgZXRoWCBpbnRlcmZhY2UKICAqCi0gKiAgQHBhcmFtIGRldiAgICAgQSBwb2ludGVyIHRvIG5ldF9kZXZpY2Ugc3RydWN0dXJlCi0gKiAgQHJldHVybiAJICAgMAorICogIEBkZXY6CUEgcG9pbnRlciB0byAmbmV0X2RldmljZSBzdHJ1Y3R1cmUKKyAqICByZXR1cm5zOgkwCiAgKi8KIHN0YXRpYyBpbnQgbGJzX2V0aF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0xNDcsMjggKzE1NSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGxic190eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5tbF9wcml2OwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX1RYKTsKLQotCWxic19wcl9lcnIoInR4IHdhdGNoIGRvZyB0aW1lb3V0XG4iKTsKLQotCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOyAvKiBwcmV2ZW50IHR4IHRpbWVvdXQgKi8KLQotCWlmIChwcml2LT5jdXJyZW50dHhza2IpCi0JCWxic19zZW5kX3R4X2ZlZWRiYWNrKHByaXYsIDApOwotCi0JLyogWFg6IFNob3VsZG4ndCB3ZSBhbHNvIGNhbGwgaW50byB0aGUgaHctc3BlY2lmaWMgZHJpdmVyCi0JICAgdG8ga2ljayBpdCBzb21laG93PyAqLwotCWxic19ob3N0X3RvX2NhcmRfZG9uZShwcml2KTsKLQotCS8qIEZJWE1FOiByZXNldCB0aGUgY2FyZCAqLwotCi0JbGJzX2RlYl9sZWF2ZShMQlNfREVCX1RYKTsKLX0KLQogdm9pZCBsYnNfaG9zdF90b19jYXJkX2RvbmUoc3RydWN0IGxic19wcml2YXRlICpwcml2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0zMzYsMTIgKzMyMiwxMiBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBtYWpvciBqb2JzIGluIHRoZSBMQlMgZHJpdmVyLgorICogIGxic190aHJlYWQgLSBoYW5kbGVzIHRoZSBtYWpvciBqb2JzIGluIHRoZSBMQlMgZHJpdmVyLgogICogIEl0IGhhbmRsZXMgYWxsIGV2ZW50cyBnZW5lcmF0ZWQgYnkgZmlybXdhcmUsIFJYIGRhdGEgcmVjZWl2ZWQKICAqICBmcm9tIGZpcm13YXJlIGFuZCBUWCBkYXRhIHNlbnQgZnJvbSBrZXJuZWwuCiAgKgotICogIEBwYXJhbSBkYXRhICAgIEEgcG9pbnRlciB0byBsYnNfdGhyZWFkIHN0cnVjdHVyZQotICogIEByZXR1cm4gCSAgIDAKKyAqICBAZGF0YToJQSBwb2ludGVyIHRvICZsYnNfdGhyZWFkIHN0cnVjdHVyZQorICogIHJldHVybnM6CTAKICAqLwogc3RhdGljIGludCBsYnNfdGhyZWFkKHZvaWQgKmRhdGEpCiB7CkBAIC00NjIsOCArNDQ4LDggQEAKIAkJaWYgKHByaXYtPmNtZF90aW1lZF9vdXQgJiYgcHJpdi0+Y3VyX2NtZCkgewogCQkJc3RydWN0IGNtZF9jdHJsX25vZGUgKmNtZG5vZGUgPSBwcml2LT5jdXJfY21kOwogCi0JCQlsYnNfcHJfaW5mbygiVGltZW91dCBzdWJtaXR0aW5nIGNvbW1hbmQgMHglMDR4XG4iLAotCQkJCWxlMTZfdG9fY3B1KGNtZG5vZGUtPmNtZGJ1Zi0+Y29tbWFuZCkpOworCQkJbmV0ZGV2X2luZm8oZGV2LCAiVGltZW91dCBzdWJtaXR0aW5nIGNvbW1hbmQgMHglMDR4XG4iLAorCQkJCSAgICBsZTE2X3RvX2NwdShjbWRub2RlLT5jbWRidWYtPmNvbW1hbmQpKTsKIAkJCWxic19jb21wbGV0ZV9jb21tYW5kKHByaXYsIGNtZG5vZGUsIC1FVElNRURPVVQpOwogCQkJaWYgKHByaXYtPnJlc2V0X2NhcmQpCiAJCQkJcHJpdi0+cmVzZXRfY2FyZChwcml2KTsKQEAgLTQ5MCw4ICs0NzYsOCBAQAogCQkJCSAqIGFmdGVyIGZpcm13YXJlIGZpeGVzIGl0CiAJCQkJICovCiAJCQkJcHJpdi0+cHNzdGF0ZSA9IFBTX1NUQVRFX0FXQUtFOwotCQkJCWxic19wcl9hbGVydCgiaWdub3JlIFBTX1NsZWVwQ29uZmlybSBpbiAiCi0JCQkJCSJub24tY29ubmVjdGVkIHN0YXRlXG4iKTsKKwkJCQluZXRkZXZfYWxlcnQoZGV2LAorCQkJCQkgICAgICJpZ25vcmUgUFNfU2xlZXBDb25maXJtIGluIG5vbi1jb25uZWN0ZWQgc3RhdGVcbiIpOwogCQkJfQogCQl9CiAKQEAgLTU0MCwxMSArNTI2LDExIEBACiB9CiAKIC8qKgotICogQGJyaWVmIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgSFcgc3BlYyBmcm9tIHRoZSBmaXJtd2FyZSBhbmQgc2V0cwotICogICAgICAgIHNvbWUgYmFzaWMgcGFyYW1ldGVycy4KKyAqIGxic19zZXR1cF9maXJtd2FyZSAtIGdldHMgdGhlIEhXIHNwZWMgZnJvbSB0aGUgZmlybXdhcmUgYW5kIHNldHMKKyAqICAgICAgICBzb21lIGJhc2ljIHBhcmFtZXRlcnMKICAqCi0gKiAgQHBhcmFtIHByaXYgICAgQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcmV0dXJuICAgICAgICAwIG9yIC0xCisgKiAgQHByaXY6CUEgcG9pbnRlciB0byAmc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQorICogIHJldHVybnM6CTAgb3IgLTEKICAqLwogc3RhdGljIGludCBsYnNfc2V0dXBfZmlybXdhcmUoc3RydWN0IGxic19wcml2YXRlICpwcml2KQogewpAQCAtNTg1LDcgKzU3MSw4IEBACiAJaWYgKHByaXYtPmlzX2RlZXBfc2xlZXApIHsKIAkJcmV0ID0gbGJzX3NldF9kZWVwX3NsZWVwKHByaXYsIDApOwogCQlpZiAocmV0KSB7Ci0JCQlsYnNfcHJfZXJyKCJkZWVwIHNsZWVwIGNhbmNlbGxhdGlvbiBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQkJbmV0ZGV2X2Vycihwcml2LT5kZXYsCisJCQkJICAgImRlZXAgc2xlZXAgY2FuY2VsbGF0aW9uIGZhaWxlZDogJWRcbiIsIHJldCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJCXByaXYtPmRlZXBfc2xlZXBfcmVxdWlyZWQgPSAxOwpAQCAtNjE4LDcgKzYwNSw4IEBACiAJCXByaXYtPmRlZXBfc2xlZXBfcmVxdWlyZWQgPSAwOwogCQlyZXQgPSBsYnNfc2V0X2RlZXBfc2xlZXAocHJpdiwgMSk7CiAJCWlmIChyZXQpCi0JCQlsYnNfcHJfZXJyKCJkZWVwIHNsZWVwIGFjdGl2YXRpb24gZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJCW5ldGRldl9lcnIocHJpdi0+ZGV2LAorCQkJCSAgICJkZWVwIHNsZWVwIGFjdGl2YXRpb24gZmFpbGVkOiAlZFxuIiwgcmV0KTsKIAl9CiAKIAlpZiAocHJpdi0+c2V0dXBfZndfb25fcmVzdW1lKQpAQCAtNjMwLDggKzYxOCwxMCBAQAogRVhQT1JUX1NZTUJPTF9HUEwobGJzX3Jlc3VtZSk7CiAKIC8qKgotICogIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgdGltZW91dCBvZiBjb21tYW5kIHNlbmRpbmcuCi0gKiAgSXQgd2lsbCByZS1zZW5kIHRoZSBzYW1lIGNvbW1hbmQgYWdhaW4uCisgKiBsYnNfY21kX3RpbWVvdXRfaGFuZGxlciAtIGhhbmRsZXMgdGhlIHRpbWVvdXQgb2YgY29tbWFuZCBzZW5kaW5nLgorICogSXQgd2lsbCByZS1zZW5kIHRoZSBzYW1lIGNvbW1hbmQgYWdhaW4uCisgKgorICogQGRhdGE6ICZzdHJ1Y3QgbGJzX3ByaXZhdGUgcG9pbnRlcgogICovCiBzdGF0aWMgdm9pZCBsYnNfY21kX3RpbWVvdXRfaGFuZGxlcih1bnNpZ25lZCBsb25nIGRhdGEpCiB7CkBAIC02NDQsOCArNjM0LDggQEAKIAlpZiAoIXByaXYtPmN1cl9jbWQpCiAJCWdvdG8gb3V0OwogCi0JbGJzX3ByX2luZm8oImNvbW1hbmQgMHglMDR4IHRpbWVkIG91dFxuIiwKLQkJbGUxNl90b19jcHUocHJpdi0+Y3VyX2NtZC0+Y21kYnVmLT5jb21tYW5kKSk7CisJbmV0ZGV2X2luZm8ocHJpdi0+ZGV2LCAiY29tbWFuZCAweCUwNHggdGltZWQgb3V0XG4iLAorCQkgICAgbGUxNl90b19jcHUocHJpdi0+Y3VyX2NtZC0+Y21kYnVmLT5jb21tYW5kKSk7CiAKIAlwcml2LT5jbWRfdGltZWRfb3V0ID0gMTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRxKTsKQEAgLTY1NSw4ICs2NDUsMTAgQEAKIH0KIAogLyoqCi0gKiAgVGhpcyBmdW5jdGlvbiBwdXQgdGhlIGRldmljZSBiYWNrIHRvIGRlZXAgc2xlZXAgbW9kZSB3aGVuIHRpbWVyIGV4cGlyZXMKLSAqICBhbmQgbm8gYWN0aXZpdHkgKGNvbW1hbmQsIGV2ZW50LCBkYXRhIGV0Yy4pIGlzIGRldGVjdGVkLgorICogYXV0b19kZWVwc2xlZXBfdGltZXJfZm4gLSBwdXQgdGhlIGRldmljZSBiYWNrIHRvIGRlZXAgc2xlZXAgbW9kZSB3aGVuCisgKiB0aW1lciBleHBpcmVzIGFuZCBubyBhY3Rpdml0eSAoY29tbWFuZCwgZXZlbnQsIGRhdGEgZXRjLikgaXMgZGV0ZWN0ZWQuCisgKiBAZGF0YToJJnN0cnVjdCBsYnNfcHJpdmF0ZSBwb2ludGVyCisgKiByZXR1cm5zOglOL0EKICAqLwogc3RhdGljIHZvaWQgYXV0b19kZWVwc2xlZXBfdGltZXJfZm4odW5zaWduZWQgbG9uZyBkYXRhKQogewpAQCAtNzQ4LDcgKzc0MCw3IEBACiAKIAkvKiBBbGxvY2F0ZSB0aGUgY29tbWFuZCBidWZmZXJzICovCiAJaWYgKGxic19hbGxvY2F0ZV9jbWRfYnVmZmVyKHByaXYpKSB7Ci0JCWxic19wcl9lcnIoIk91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBjb21tYW5kIGJ1ZmZlcnNcbiIpOworCQlwcl9lcnIoIk91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBjb21tYW5kIGJ1ZmZlcnNcbiIpOwogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9CkBAIC03NTgsNyArNzUwLDcgQEAKIAkvKiBDcmVhdGUgdGhlIGV2ZW50IEZJRk8gKi8KIAlyZXQgPSBrZmlmb19hbGxvYygmcHJpdi0+ZXZlbnRfZmlmbywgc2l6ZW9mKHUzMikgKiAxNiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJldCkgewotCQlsYnNfcHJfZXJyKCJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgZXZlbnQgRklGTyBidWZmZXJcbiIpOworCQlwcl9lcnIoIk91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBldmVudCBGSUZPIGJ1ZmZlclxuIik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNzg1LDE4ICs3NzcsMTggQEAKIAkubmRvX3N0b3AJCT0gbGJzX2V0aF9zdG9wLAogCS5uZG9fc3RhcnRfeG1pdAkJPSBsYnNfaGFyZF9zdGFydF94bWl0LAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gbGJzX3NldF9tYWNfYWRkcmVzcywKLQkubmRvX3R4X3RpbWVvdXQgCT0gbGJzX3R4X3RpbWVvdXQsCiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBsYnNfc2V0X211bHRpY2FzdF9saXN0LAogCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKIH07CiAKIC8qKgotICogQGJyaWVmIFRoaXMgZnVuY3Rpb24gYWRkcyB0aGUgY2FyZC4gaXQgd2lsbCBwcm9iZSB0aGUKKyAqIGxic19hZGRfY2FyZCAtIGFkZHMgdGhlIGNhcmQuIEl0IHdpbGwgcHJvYmUgdGhlCiAgKiBjYXJkLCBhbGxvY2F0ZSB0aGUgbGJzX3ByaXYgYW5kIGluaXRpYWxpemUgdGhlIGRldmljZS4KICAqCi0gKiAgQHBhcmFtIGNhcmQgICAgQSBwb2ludGVyIHRvIGNhcmQKLSAqICBAcmV0dXJuIAkgICBBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQorICogQGNhcmQ6CUEgcG9pbnRlciB0byBjYXJkCisgKiBAZG1kZXY6CUEgcG9pbnRlciB0byAmc3RydWN0IGRldmljZQorICogcmV0dXJuczoJQSBwb2ludGVyIHRvICZzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCiAgKi8KIHN0cnVjdCBsYnNfcHJpdmF0ZSAqbGJzX2FkZF9jYXJkKHZvaWQgKmNhcmQsIHN0cnVjdCBkZXZpY2UgKmRtZGV2KQogewpAQCAtODA5LDcgKzgwMSw3IEBACiAJLyogQWxsb2NhdGUgYW4gRXRoZXJuZXQgZGV2aWNlIGFuZCByZWdpc3RlciBpdCAqLwogCXdkZXYgPSBsYnNfY2ZnX2FsbG9jKGRtZGV2KTsKIAlpZiAoSVNfRVJSKHdkZXYpKSB7Ci0JCWxic19wcl9lcnIoImNmZzgwMjExIGluaXQgZmFpbGVkXG4iKTsKKwkJcHJfZXJyKCJjZmc4MDIxMSBpbml0IGZhaWxlZFxuIik7CiAJCWdvdG8gZG9uZTsKIAl9CiAKQEAgLTgxOCw3ICs4MTAsNyBAQAogCXByaXYtPndkZXYgPSB3ZGV2OwogCiAJaWYgKGxic19pbml0X2FkYXB0ZXIocHJpdikpIHsKLQkJbGJzX3ByX2VycigiZmFpbGVkIHRvIGluaXRpYWxpemUgYWRhcHRlciBzdHJ1Y3R1cmUuXG4iKTsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBhZGFwdGVyIHN0cnVjdHVyZVxuIik7CiAJCWdvdG8gZXJyX3dkZXY7CiAJfQogCkBAIC05NTAsMTcgKzk0MiwyMCBAQAogCQlnb3RvIGRvbmU7CiAKIAlpZiAobGJzX2NmZ19yZWdpc3Rlcihwcml2KSkgewotCQlsYnNfcHJfZXJyKCJjYW5ub3QgcmVnaXN0ZXIgZGV2aWNlXG4iKTsKKwkJcHJfZXJyKCJjYW5ub3QgcmVnaXN0ZXIgZGV2aWNlXG4iKTsKIAkJZ290byBkb25lOwogCX0KIAogCWxic191cGRhdGVfY2hhbm5lbChwcml2KTsKIAotCWxic19pbml0X21lc2gocHJpdik7CisJaWYgKCFsYnNfZGlzYWJsZW1lc2gpCisJCWxic19pbml0X21lc2gocHJpdik7CisJZWxzZQorCQlwcl9pbmZvKCIlczogbWVzaCBkaXNhYmxlZFxuIiwgZGV2LT5uYW1lKTsKIAogCWxic19kZWJ1Z2ZzX2luaXRfb25lKHByaXYsIGRldik7CiAKLQlsYnNfcHJfaW5mbygiJXM6IE1hcnZlbGwgV0xBTiA4MDIuMTEgYWRhcHRlclxuIiwgZGV2LT5uYW1lKTsKKwluZXRkZXZfaW5mbyhkZXYsICJNYXJ2ZWxsIFdMQU4gODAyLjExIGFkYXB0ZXJcbiIpOwogCiAJcmV0ID0gMDsKIApAQCAtMTA1NywxOSArMTA1MiwxOSBAQAogRVhQT1JUX1NZTUJPTF9HUEwobGJzX25vdGlmeV9jb21tYW5kX3Jlc3BvbnNlKTsKIAogLyoqCi0gKiAgQGJyaWVmIFJldHJpZXZlcyB0d28tc3RhZ2UgZmlybXdhcmUKKyAqICBsYnNfZ2V0X2Zpcm13YXJlIC0gUmV0cmlldmVzIHR3by1zdGFnZSBmaXJtd2FyZQogICoKLSAqICBAcGFyYW0gZGV2ICAgICAJQSBwb2ludGVyIHRvIGRldmljZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gdXNlcl9oZWxwZXIJVXNlci1kZWZpbmVkIGhlbHBlciBmaXJtd2FyZSBmaWxlCi0gKiAgQHBhcmFtIHVzZXJfbWFpbmZ3CVVzZXItZGVmaW5lZCBtYWluIGZpcm13YXJlIGZpbGUKLSAqICBAcGFyYW0gY2FyZF9tb2RlbAlCdXMtc3BlY2lmaWMgY2FyZCBtb2RlbCBJRCB1c2VkIHRvIGZpbHRlciBmaXJtd2FyZSB0YWJsZQotICogICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMKLSAqICBAcGFyYW0gZndfdGFibGUJVGFibGUgb2YgZmlybXdhcmUgZmlsZSBuYW1lcyBhbmQgZGV2aWNlIG1vZGVsIG51bWJlcnMKLSAqICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZWQgYnkgYW4gZW50cnkgd2l0aCBhIE5VTEwgaGVscGVyIG5hbWUKLSAqICBAcGFyYW0gaGVscGVyCU9uIHN1Y2Nlc3MsIHRoZSBoZWxwZXIgZmlybXdhcmU7IGNhbGxlciBtdXN0IGZyZWUKLSAqICBAcGFyYW0gbWFpbmZ3CU9uIHN1Y2Nlc3MsIHRoZSBtYWluIGZpcm13YXJlOyBjYWxsZXIgbXVzdCBmcmVlCisgKiAgQGRldjogICAgIAlBIHBvaW50ZXIgdG8gJmRldmljZSBzdHJ1Y3R1cmUKKyAqICBAdXNlcl9oZWxwZXI6IFVzZXItZGVmaW5lZCBoZWxwZXIgZmlybXdhcmUgZmlsZQorICogIEB1c2VyX21haW5mdzogVXNlci1kZWZpbmVkIG1haW4gZmlybXdhcmUgZmlsZQorICogIEBjYXJkX21vZGVsOiBCdXMtc3BlY2lmaWMgY2FyZCBtb2RlbCBJRCB1c2VkIHRvIGZpbHRlciBmaXJtd2FyZSB0YWJsZQorICoJCWVsZW1lbnRzCisgKiAgQGZ3X3RhYmxlOglUYWJsZSBvZiBmaXJtd2FyZSBmaWxlIG5hbWVzIGFuZCBkZXZpY2UgbW9kZWwgbnVtYmVycworICoJCXRlcm1pbmF0ZWQgYnkgYW4gZW50cnkgd2l0aCBhIE5VTEwgaGVscGVyIG5hbWUKKyAqICBAaGVscGVyOglPbiBzdWNjZXNzLCB0aGUgaGVscGVyIGZpcm13YXJlOyBjYWxsZXIgbXVzdCBmcmVlCisgKiAgQG1haW5mdzoJT24gc3VjY2VzcywgdGhlIG1haW4gZmlybXdhcmU7IGNhbGxlciBtdXN0IGZyZWUKICAqCi0gKiAgQHJldHVybgkJMCBvbiBzdWNjZXNzLCBub24temVybyBvbiBmYWlsdXJlCisgKiAgcmV0dXJuczoJCTAgb24gc3VjY2Vzcywgbm9uLXplcm8gb24gZmFpbHVyZQogICovCiBpbnQgbGJzX2dldF9maXJtd2FyZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKnVzZXJfaGVscGVyLAogCQkJY29uc3QgY2hhciAqdXNlcl9tYWluZncsIHUzMiBjYXJkX21vZGVsLApAQCAtMTA4NywxNiArMTA4MiwxNiBAQAogCWlmICh1c2VyX2hlbHBlcikgewogCQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKGhlbHBlciwgdXNlcl9oZWxwZXIsIGRldik7CiAJCWlmIChyZXQpIHsKLQkJCWxic19wcl9lcnIoImNvdWxkbid0IGZpbmQgaGVscGVyIGZpcm13YXJlICVzIiwKLQkJCQkJdXNlcl9oZWxwZXIpOworCQkJZGV2X2VycihkZXYsICJjb3VsZG4ndCBmaW5kIGhlbHBlciBmaXJtd2FyZSAlc1xuIiwKKwkJCQl1c2VyX2hlbHBlcik7CiAJCQlnb3RvIGZhaWw7CiAJCX0KIAl9CiAJaWYgKHVzZXJfbWFpbmZ3KSB7CiAJCXJldCA9IHJlcXVlc3RfZmlybXdhcmUobWFpbmZ3LCB1c2VyX21haW5mdywgZGV2KTsKIAkJaWYgKHJldCkgewotCQkJbGJzX3ByX2VycigiY291bGRuJ3QgZmluZCBtYWluIGZpcm13YXJlICVzIiwKLQkJCQkJdXNlcl9tYWluZncpOworCQkJZGV2X2VycihkZXYsICJjb3VsZG4ndCBmaW5kIG1haW4gZmlybXdhcmUgJXNcbiIsCisJCQkJdXNlcl9tYWluZncpOwogCQkJZ290byBmYWlsOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWVzaC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWVzaC5jCmluZGV4IDlkMDk3YjkuLjI0Y2YwNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21lc2guYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tZXNoLmMKQEAgLTEsMyArMSw1IEBACisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CkBAIC0xNiwxMiArMTgsMTUgQEAKICAqIE1lc2ggc3lzZnMgc3VwcG9ydAogICovCiAKLS8qKgorLyoKICAqIEF0dHJpYnV0ZXMgZXhwb3J0ZWQgdGhyb3VnaCBzeXNmcwogICovCiAKIC8qKgotICogQGJyaWVmIEdldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIGFueWNhc3RfbWFzaworICogbGJzX2FueWNhc3RfZ2V0IC0gR2V0IGZ1bmN0aW9uIGZvciBzeXNmcyBhdHRyaWJ1dGUgYW55Y2FzdF9tYXNrCisgKiBAZGV2OiB0aGUgJnN0cnVjdCBkZXZpY2UKKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlcworICogQGJ1ZjogYnVmZmVyIHdoZXJlIGRhdGEgd2lsbCBiZSByZXR1cm5lZAogICovCiBzdGF0aWMgc3NpemVfdCBsYnNfYW55Y2FzdF9nZXQoc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqIGJ1ZikKQEAgLTQwLDcgKzQ1LDExIEBACiB9CiAKIC8qKgotICogQGJyaWVmIFNldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIGFueWNhc3RfbWFzaworICogbGJzX2FueWNhc3Rfc2V0IC0gU2V0IGZ1bmN0aW9uIGZvciBzeXNmcyBhdHRyaWJ1dGUgYW55Y2FzdF9tYXNrCisgKiBAZGV2OiB0aGUgJnN0cnVjdCBkZXZpY2UKKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlcworICogQGJ1ZjogYnVmZmVyIHRoYXQgY29udGFpbnMgbmV3IGF0dHJpYnV0ZSB2YWx1ZQorICogQGNvdW50OiBzaXplIG9mIGJ1ZmZlcgogICovCiBzdGF0aWMgc3NpemVfdCBsYnNfYW55Y2FzdF9zZXQoc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqIGJ1Ziwgc2l6ZV90IGNvdW50KQpAQCAtNjIsNyArNzEsMTAgQEAKIH0KIAogLyoqCi0gKiBAYnJpZWYgR2V0IGZ1bmN0aW9uIGZvciBzeXNmcyBhdHRyaWJ1dGUgcHJiX3JzcF9saW1pdAorICogbGJzX3ByYl9yc3BfbGltaXRfZ2V0IC0gR2V0IGZ1bmN0aW9uIGZvciBzeXNmcyBhdHRyaWJ1dGUgcHJiX3JzcF9saW1pdAorICogQGRldjogdGhlICZzdHJ1Y3QgZGV2aWNlCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZXMKKyAqIEBidWY6IGJ1ZmZlciB3aGVyZSBkYXRhIHdpbGwgYmUgcmV0dXJuZWQKICAqLwogc3RhdGljIHNzaXplX3QgbGJzX3ByYl9yc3BfbGltaXRfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKQEAgLTg1LDcgKzk3LDExIEBACiB9CiAKIC8qKgotICogQGJyaWVmIFNldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIHByYl9yc3BfbGltaXQKKyAqIGxic19wcmJfcnNwX2xpbWl0X3NldCAtIFNldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIHByYl9yc3BfbGltaXQKKyAqIEBkZXY6IHRoZSAmc3RydWN0IGRldmljZQorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGVzCisgKiBAYnVmOiBidWZmZXIgdGhhdCBjb250YWlucyBuZXcgYXR0cmlidXRlIHZhbHVlCisgKiBAY291bnQ6IHNpemUgb2YgYnVmZmVyCiAgKi8KIHN0YXRpYyBzc2l6ZV90IGxic19wcmJfcnNwX2xpbWl0X3NldChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKQEAgLTExNCw3ICsxMzAsMTAgQEAKIH0KIAogLyoqCi0gKiBHZXQgZnVuY3Rpb24gZm9yIHN5c2ZzIGF0dHJpYnV0ZSBtZXNoCisgKiBsYnNfbWVzaF9nZXQgLSBHZXQgZnVuY3Rpb24gZm9yIHN5c2ZzIGF0dHJpYnV0ZSBtZXNoCisgKiBAZGV2OiB0aGUgJnN0cnVjdCBkZXZpY2UKKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlcworICogQGJ1ZjogYnVmZmVyIHdoZXJlIGRhdGEgd2lsbCBiZSByZXR1cm5lZAogICovCiBzdGF0aWMgc3NpemVfdCBsYnNfbWVzaF9nZXQoc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqIGJ1ZikKQEAgLTEyNCw3ICsxNDMsMTEgQEAKIH0KIAogLyoqCi0gKiAgU2V0IGZ1bmN0aW9uIGZvciBzeXNmcyBhdHRyaWJ1dGUgbWVzaAorICogbGJzX21lc2hfc2V0IC0gU2V0IGZ1bmN0aW9uIGZvciBzeXNmcyBhdHRyaWJ1dGUgbWVzaAorICogQGRldjogdGhlICZzdHJ1Y3QgZGV2aWNlCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZXMKKyAqIEBidWY6IGJ1ZmZlciB0aGF0IGNvbnRhaW5zIG5ldyBhdHRyaWJ1dGUgdmFsdWUKKyAqIEBjb3VudDogc2l6ZSBvZiBidWZmZXIKICAqLwogc3RhdGljIHNzaXplX3QgbGJzX21lc2hfc2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKiBidWYsIHNpemVfdCBjb3VudCkKQEAgLTE1MSwxOSArMTc0LDE5IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi0vKioKKy8qCiAgKiBsYnNfbWVzaCBhdHRyaWJ1dGUgdG8gYmUgZXhwb3J0ZWQgcGVyIGV0aFggaW50ZXJmYWNlCiAgKiB0aHJvdWdoIHN5c2ZzICgvc3lzL2NsYXNzL25ldC9ldGhYL2xic19tZXNoKQogICovCiBzdGF0aWMgREVWSUNFX0FUVFIobGJzX21lc2gsIDA2NDQsIGxic19tZXNoX2dldCwgbGJzX21lc2hfc2V0KTsKIAotLyoqCisvKgogICogYW55Y2FzdF9tYXNrIGF0dHJpYnV0ZSB0byBiZSBleHBvcnRlZCBwZXIgbXNoWCBpbnRlcmZhY2UKICAqIHRocm91Z2ggc3lzZnMgKC9zeXMvY2xhc3MvbmV0L21zaFgvYW55Y2FzdF9tYXNrKQogICovCiBzdGF0aWMgREVWSUNFX0FUVFIoYW55Y2FzdF9tYXNrLCAwNjQ0LCBsYnNfYW55Y2FzdF9nZXQsIGxic19hbnljYXN0X3NldCk7CiAKLS8qKgorLyoKICAqIHByYl9yc3BfbGltaXQgYXR0cmlidXRlIHRvIGJlIGV4cG9ydGVkIHBlciBtc2hYIGludGVyZmFjZQogICogdGhyb3VnaCBzeXNmcyAoL3N5cy9jbGFzcy9uZXQvbXNoWC9wcmJfcnNwX2xpbWl0KQogICovCkBAIC0yNDYsNyArMjY5LDcgQEAKIAkJbGJzX2FkZF9tZXNoKHByaXYpOwogCiAJCWlmIChkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfbGJzX21lc2gpKQotCQkJbGJzX3ByX2VycigiY2Fubm90IHJlZ2lzdGVyIGxic19tZXNoIGF0dHJpYnV0ZVxuIik7CisJCQluZXRkZXZfZXJyKGRldiwgImNhbm5vdCByZWdpc3RlciBsYnNfbWVzaCBhdHRyaWJ1dGVcbiIpOwogCiAJCXJldCA9IDE7CiAJfQpAQCAtMjc0LDEwICsyOTcsMTAgQEAKIAogCiAvKioKLSAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBjbG9zZXMgdGhlIG1zaFggaW50ZXJmYWNlCisgKiBsYnNfbWVzaF9zdG9wIC0gY2xvc2UgdGhlIG1zaFggaW50ZXJmYWNlCiAgKgotICogIEBwYXJhbSBkZXYgICAgIEEgcG9pbnRlciB0byBuZXRfZGV2aWNlIHN0cnVjdHVyZQotICogIEByZXR1cm4gCSAgIDAKKyAqIEBkZXY6CUEgcG9pbnRlciB0byAmbmV0X2RldmljZSBzdHJ1Y3R1cmUKKyAqIHJldHVybnM6CTAKICAqLwogc3RhdGljIGludCBsYnNfbWVzaF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0zMDEsMTAgKzMyNCwxMCBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBvcGVucyB0aGUgbXNoWCBpbnRlcmZhY2UKKyAqIGxic19tZXNoX2Rldl9vcGVuIC0gb3BlbiB0aGUgbXNoWCBpbnRlcmZhY2UKICAqCi0gKiAgQHBhcmFtIGRldiAgICAgQSBwb2ludGVyIHRvIG5ldF9kZXZpY2Ugc3RydWN0dXJlCi0gKiAgQHJldHVybiAJICAgMCBvciAtRUJVU1kgaWYgbW9uaXRvciBtb2RlIGFjdGl2ZQorICogQGRldjoJQSBwb2ludGVyIHRvICZuZXRfZGV2aWNlIHN0cnVjdHVyZQorICogcmV0dXJuczoJMCBvciAtRUJVU1kgaWYgbW9uaXRvciBtb2RlIGFjdGl2ZQogICovCiBzdGF0aWMgaW50IGxic19tZXNoX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0zNDIsMTAgKzM2NSwxMCBAQAogfTsKIAogLyoqCi0gKiBAYnJpZWYgVGhpcyBmdW5jdGlvbiBhZGRzIG1zaFggaW50ZXJmYWNlCisgKiBsYnNfYWRkX21lc2ggLSBhZGQgbXNoWCBpbnRlcmZhY2UKICAqCi0gKiAgQHBhcmFtIHByaXYgICAgQSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHJldHVybiAJICAgMCBpZiBzdWNjZXNzZnVsLCAtWCBvdGhlcndpc2UKKyAqIEBwcml2OglBIHBvaW50ZXIgdG8gdGhlICZzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCisgKiByZXR1cm5zOgkwIGlmIHN1Y2Nlc3NmdWwsIC1YIG90aGVyd2lzZQogICovCiBpbnQgbGJzX2FkZF9tZXNoKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKIHsKQEAgLTM3NCw3ICszOTcsNyBAQAogCS8qIFJlZ2lzdGVyIHZpcnR1YWwgbWVzaCBpbnRlcmZhY2UgKi8KIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXYobWVzaF9kZXYpOwogCWlmIChyZXQpIHsKLQkJbGJzX3ByX2VycigiY2Fubm90IHJlZ2lzdGVyIG1zaFggdmlydHVhbCBpbnRlcmZhY2VcbiIpOworCQlwcl9lcnIoImNhbm5vdCByZWdpc3RlciBtc2hYIHZpcnR1YWwgaW50ZXJmYWNlXG4iKTsKIAkJZ290byBlcnJfZnJlZTsKIAl9CiAKQEAgLTQ1NiwxMyArNDc5LDEzIEBACiAgKi8KIAogLyoqCi0gKiAgQGJyaWVmIEFkZCBvciBkZWxldGUgTWVzaCBCbGluZGluZyBUYWJsZSBlbnRyaWVzCisgKiBsYnNfbWVzaF9idF9hZGRfZGVsIC0gQWRkIG9yIGRlbGV0ZSBNZXNoIEJsaW5kaW5nIFRhYmxlIGVudHJpZXMKICAqCi0gKiAgQHBhcmFtIHByaXYgICAgCUEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHBhcmFtIGFkZCAgCVRSVUUgdG8gYWRkIHRoZSBlbnRyeSwgRkFMU0UgdG8gZGVsZXRlIGl0Ci0gKiAgQHBhcmFtIGFkZHIxICAgICAgICBEZXN0aW5hdGlvbiBhZGRyZXNzIHRvIGJsaW5kIG9yIHVuYmxpbmQKKyAqIEBwcml2OglBIHBvaW50ZXIgdG8gJnN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqIEBhZGQ6CVRSVUUgdG8gYWRkIHRoZSBlbnRyeSwgRkFMU0UgdG8gZGVsZXRlIGl0CisgKiBAYWRkcjE6CURlc3RpbmF0aW9uIGFkZHJlc3MgdG8gYmxpbmQgb3IgdW5ibGluZAogICoKLSAqICBAcmV0dXJuIAkgICAJMCBvbiBzdWNjZXNzLCBlcnJvciBvbiBmYWlsdXJlCisgKiByZXR1cm5zOgkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKICAqLwogaW50IGxic19tZXNoX2J0X2FkZF9kZWwoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBib29sIGFkZCwgdTggKmFkZHIxKQogewpAQCAtNDkzLDExICs1MTYsMTEgQEAKIH0KIAogLyoqCi0gKiAgQGJyaWVmIFJlc2V0L2NsZWFyIHRoZSBtZXNoIGJsaW5kaW5nIHRhYmxlCisgKiBsYnNfbWVzaF9idF9yZXNldCAtIFJlc2V0L2NsZWFyIHRoZSBtZXNoIGJsaW5kaW5nIHRhYmxlCiAgKgotICogIEBwYXJhbSBwcml2ICAgIAlBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQorICogQHByaXY6CUEgcG9pbnRlciB0byAmc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQogICoKLSAqICBAcmV0dXJuIAkgICAJMCBvbiBzdWNjZXNzLCBlcnJvciBvbiBmYWlsdXJlCisgKiByZXR1cm5zOgkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKICAqLwogaW50IGxic19tZXNoX2J0X3Jlc2V0KHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKIHsKQEAgLTUxNywxNyArNTQwLDE4IEBACiB9CiAKIC8qKgotICogIEBicmllZiBHZXRzIHRoZSBpbnZlcnRlZCBzdGF0dXMgb2YgdGhlIG1lc2ggYmxpbmRpbmcgdGFibGUKKyAqIGxic19tZXNoX2J0X2dldF9pbnZlcnRlZCAtIEdldHMgdGhlIGludmVydGVkIHN0YXR1cyBvZiB0aGUgbWVzaAorICogYmxpbmRpbmcgdGFibGUKICAqCi0gKiAgTm9ybWFsbHkgdGhlIGZpcm13YXJlICJibGluZHMiIG9yIGlnbm9yZXMgdHJhZmZpYyBmcm9tIG1lc2ggbm9kZXMgaW4gdGhlCi0gKiAgdGFibGUsIGJ1dCBhbiBpbnZlcnRlZCB0YWJsZSBhbGxvd3MgKm9ubHkqIHRyYWZmaWMgZnJvbSBub2RlcyBsaXN0ZWQgaW4KLSAqICB0aGUgdGFibGUuCisgKiBOb3JtYWxseSB0aGUgZmlybXdhcmUgImJsaW5kcyIgb3IgaWdub3JlcyB0cmFmZmljIGZyb20gbWVzaCBub2RlcyBpbiB0aGUKKyAqIHRhYmxlLCBidXQgYW4gaW52ZXJ0ZWQgdGFibGUgYWxsb3dzICpvbmx5KiB0cmFmZmljIGZyb20gbm9kZXMgbGlzdGVkIGluCisgKiB0aGUgdGFibGUuCiAgKgotICogIEBwYXJhbSBwcml2ICAgIAlBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQotICogIEBwYXJhbSBpbnZlcnQgIAlPbiBzdWNjZXNzLCBUUlVFIGlmIHRoZSBibGluZGluZyB0YWJsZSBpcyBpbnZlcnRlZCwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UgaWYgaXQgaXMgbm90IGludmVydGVkCisgKiBAcHJpdjoJQSBwb2ludGVyIHRvICZzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCisgKiBAaW52ZXJ0ZWQ6ICAJT24gc3VjY2VzcywgVFJVRSBpZiB0aGUgYmxpbmRpbmcgdGFibGUgaXMgaW52ZXJ0ZWQsCisgKgkJRkFMU0UgaWYgaXQgaXMgbm90IGludmVydGVkCiAgKgotICogIEByZXR1cm4gCSAgIAkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKKyAqIHJldHVybnM6CTAgb24gc3VjY2VzcywgZXJyb3Igb24gZmFpbHVyZQogICovCiBpbnQgbGJzX21lc2hfYnRfZ2V0X2ludmVydGVkKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgYm9vbCAqaW52ZXJ0ZWQpCiB7CkBAIC01NTEsMTggKzU3NSwxOSBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgU2V0cyB0aGUgaW52ZXJ0ZWQgc3RhdHVzIG9mIHRoZSBtZXNoIGJsaW5kaW5nIHRhYmxlCisgKiBsYnNfbWVzaF9idF9zZXRfaW52ZXJ0ZWQgLSBTZXRzIHRoZSBpbnZlcnRlZCBzdGF0dXMgb2YgdGhlIG1lc2gKKyAqIGJsaW5kaW5nIHRhYmxlCiAgKgotICogIE5vcm1hbGx5IHRoZSBmaXJtd2FyZSAiYmxpbmRzIiBvciBpZ25vcmVzIHRyYWZmaWMgZnJvbSBtZXNoIG5vZGVzIGluIHRoZQotICogIHRhYmxlLCBidXQgYW4gaW52ZXJ0ZWQgdGFibGUgYWxsb3dzICpvbmx5KiB0cmFmZmljIGZyb20gbm9kZXMgbGlzdGVkIGluCi0gKiAgdGhlIHRhYmxlLgorICogTm9ybWFsbHkgdGhlIGZpcm13YXJlICJibGluZHMiIG9yIGlnbm9yZXMgdHJhZmZpYyBmcm9tIG1lc2ggbm9kZXMgaW4gdGhlCisgKiB0YWJsZSwgYnV0IGFuIGludmVydGVkIHRhYmxlIGFsbG93cyAqb25seSogdHJhZmZpYyBmcm9tIG5vZGVzIGxpc3RlZCBpbgorICogdGhlIHRhYmxlLgogICoKLSAqICBAcGFyYW0gcHJpdiAgICAJQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gaW52ZXJ0ICAJVFJVRSB0byBpbnZlcnQgdGhlIGJsaW5kaW5nIHRhYmxlIChvbmx5IHRyYWZmaWMgZnJvbQotICogICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVkIG5vZGVzIGFsbG93ZWQpLCBGQUxTRSB0byByZXR1cm4gaXQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgIHRvIG5vcm1hbCBzdGF0ZSAobGlzdGVkIG5vZGVzIGlnbm9yZWQpCisgKiBAcHJpdjoJQSBwb2ludGVyIHRvICZzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCisgKiBAaW52ZXJ0ZWQ6CVRSVUUgdG8gaW52ZXJ0IHRoZSBibGluZGluZyB0YWJsZSAob25seSB0cmFmZmljIGZyb20KKyAqCQlsaXN0ZWQgbm9kZXMgYWxsb3dlZCksIEZBTFNFIHRvIHJldHVybiBpdAorICoJCXRvIG5vcm1hbCBzdGF0ZSAobGlzdGVkIG5vZGVzIGlnbm9yZWQpCiAgKgotICogIEByZXR1cm4gCSAgIAkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKKyAqIHJldHVybnM6CTAgb24gc3VjY2VzcywgZXJyb3Igb24gZmFpbHVyZQogICovCiBpbnQgbGJzX21lc2hfYnRfc2V0X2ludmVydGVkKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgYm9vbCBpbnZlcnRlZCkKIHsKQEAgLTU4MywxMyArNjA4LDEzIEBACiB9CiAKIC8qKgotICogIEBicmllZiBMaXN0IGFuIGVudHJ5IGluIHRoZSBtZXNoIGJsaW5kaW5nIHRhYmxlCisgKiBsYnNfbWVzaF9idF9nZXRfZW50cnkgLSBMaXN0IGFuIGVudHJ5IGluIHRoZSBtZXNoIGJsaW5kaW5nIHRhYmxlCiAgKgotICogIEBwYXJhbSBwcml2ICAgIAlBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQotICogIEBwYXJhbSBpZAkJVGhlIElEIG9mIHRoZSBlbnRyeSB0byBsaXN0Ci0gKiAgQHBhcmFtIGFkZHIxCU1BQyBhZGRyZXNzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFibGUgZW50cnkKKyAqIEBwcml2OglBIHBvaW50ZXIgdG8gJnN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqIEBpZDoJCVRoZSBJRCBvZiB0aGUgZW50cnkgdG8gbGlzdAorICogQGFkZHIxOglNQUMgYWRkcmVzcyBhc3NvY2lhdGVkIHdpdGggdGhlIHRhYmxlIGVudHJ5CiAgKgotICogIEByZXR1cm4gCSAgIAkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKKyAqIHJldHVybnM6IAkgICAJMCBvbiBzdWNjZXNzLCBlcnJvciBvbiBmYWlsdXJlCiAgKi8KIGludCBsYnNfbWVzaF9idF9nZXRfZW50cnkoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1MzIgaWQsIHU4ICphZGRyMSkKIHsKQEAgLTYxNCwxNCArNjM5LDE0IEBACiB9CiAKIC8qKgotICogIEBicmllZiBBY2Nlc3MgdGhlIG1lc2ggZm9yd2FyZGluZyB0YWJsZQorICogbGJzX2NtZF9md3RfYWNjZXNzIC0gQWNjZXNzIHRoZSBtZXNoIGZvcndhcmRpbmcgdGFibGUKICAqCi0gKiAgQHBhcmFtIHByaXYgICAgCUEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHBhcmFtIGNtZF9hY3Rpb24JVGhlIGZvcndhcmRpbmcgdGFibGUgYWN0aW9uIHRvIHBlcmZvcm0KLSAqICBAcGFyYW0gY21kCQlUaGUgcHJlLWZpbGxlZCBGV1RfQUNDRVNTIGNvbW1hbmQKKyAqIEBwcml2OglBIHBvaW50ZXIgdG8gJnN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqIEBjbWRfYWN0aW9uOglUaGUgZm9yd2FyZGluZyB0YWJsZSBhY3Rpb24gdG8gcGVyZm9ybQorICogQGNtZDoJVGhlIHByZS1maWxsZWQgRldUX0FDQ0VTUyBjb21tYW5kCiAgKgotICogIEByZXR1cm4gCSAgIAkwIG9uIHN1Y2Nlc3MgYW5kICdjbWQnIHdpbGwgYmUgZmlsbGVkIHdpdGggdGhlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIGZpcm13YXJlJ3MgcmVzcG9uc2UKKyAqIHJldHVybnM6CTAgb24gc3VjY2VzcyBhbmQgJ2NtZCcgd2lsbCBiZSBmaWxsZWQgd2l0aCB0aGUKKyAqCQlmaXJtd2FyZSdzIHJlc3BvbnNlCiAgKi8KIGludCBsYnNfY21kX2Z3dF9hY2Nlc3Moc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1MTYgY21kX2FjdGlvbiwKIAkJCXN0cnVjdCBjbWRfZHNfZnd0X2FjY2VzcyAqY21kKQpAQCAtNzc0LDcgKzc5OSwxMCBAQAogfQogCiAvKioKLSAqIEBicmllZiBHZXQgZnVuY3Rpb24gZm9yIHN5c2ZzIGF0dHJpYnV0ZSBib290ZmxhZworICogYm9vdGZsYWdfZ2V0IC0gR2V0IGZ1bmN0aW9uIGZvciBzeXNmcyBhdHRyaWJ1dGUgYm9vdGZsYWcKKyAqIEBkZXY6IHRoZSAmc3RydWN0IGRldmljZQorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGVzCisgKiBAYnVmOiBidWZmZXIgd2hlcmUgZGF0YSB3aWxsIGJlIHJldHVybmVkCiAgKi8KIHN0YXRpYyBzc2l6ZV90IGJvb3RmbGFnX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKQEAgLTc5MSw3ICs4MTksMTEgQEAKIH0KIAogLyoqCi0gKiBAYnJpZWYgU2V0IGZ1bmN0aW9uIGZvciBzeXNmcyBhdHRyaWJ1dGUgYm9vdGZsYWcKKyAqIGJvb3RmbGFnX3NldCAtIFNldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIGJvb3RmbGFnCisgKiBAZGV2OiB0aGUgJnN0cnVjdCBkZXZpY2UKKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlcworICogQGJ1ZjogYnVmZmVyIHRoYXQgY29udGFpbnMgbmV3IGF0dHJpYnV0ZSB2YWx1ZQorICogQGNvdW50OiBzaXplIG9mIGJ1ZmZlcgogICovCiBzdGF0aWMgc3NpemVfdCBib290ZmxhZ19zZXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKQEAgLTgxNyw3ICs4NDksMTAgQEAKIH0KIAogLyoqCi0gKiBAYnJpZWYgR2V0IGZ1bmN0aW9uIGZvciBzeXNmcyBhdHRyaWJ1dGUgYm9vdHRpbWUKKyAqIGJvb3R0aW1lX2dldCAtIEdldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIGJvb3R0aW1lCisgKiBAZGV2OiB0aGUgJnN0cnVjdCBkZXZpY2UKKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlcworICogQGJ1ZjogYnVmZmVyIHdoZXJlIGRhdGEgd2lsbCBiZSByZXR1cm5lZAogICovCiBzdGF0aWMgc3NpemVfdCBib290dGltZV9nZXQoc3RydWN0IGRldmljZSAqZGV2LAogCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCkBAIC04MzQsNyArODY5LDExIEBACiB9CiAKIC8qKgotICogQGJyaWVmIFNldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIGJvb3R0aW1lCisgKiBib290dGltZV9zZXQgLSBTZXQgZnVuY3Rpb24gZm9yIHN5c2ZzIGF0dHJpYnV0ZSBib290dGltZQorICogQGRldjogdGhlICZzdHJ1Y3QgZGV2aWNlCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZXMKKyAqIEBidWY6IGJ1ZmZlciB0aGF0IGNvbnRhaW5zIG5ldyBhdHRyaWJ1dGUgdmFsdWUKKyAqIEBjb3VudDogc2l6ZSBvZiBidWZmZXIKICAqLwogc3RhdGljIHNzaXplX3QgYm9vdHRpbWVfc2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQpAQCAtODY5LDcgKzkwOCwxMCBAQAogfQogCiAvKioKLSAqIEBicmllZiBHZXQgZnVuY3Rpb24gZm9yIHN5c2ZzIGF0dHJpYnV0ZSBjaGFubmVsCisgKiBjaGFubmVsX2dldCAtIEdldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIGNoYW5uZWwKKyAqIEBkZXY6IHRoZSAmc3RydWN0IGRldmljZQorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGVzCisgKiBAYnVmOiBidWZmZXIgd2hlcmUgZGF0YSB3aWxsIGJlIHJldHVybmVkCiAgKi8KIHN0YXRpYyBzc2l6ZV90IGNoYW5uZWxfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCkBAIC04ODYsNyArOTI4LDExIEBACiB9CiAKIC8qKgotICogQGJyaWVmIFNldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIGNoYW5uZWwKKyAqIGNoYW5uZWxfc2V0IC0gU2V0IGZ1bmN0aW9uIGZvciBzeXNmcyBhdHRyaWJ1dGUgY2hhbm5lbAorICogQGRldjogdGhlICZzdHJ1Y3QgZGV2aWNlCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZXMKKyAqIEBidWY6IGJ1ZmZlciB0aGF0IGNvbnRhaW5zIG5ldyBhdHRyaWJ1dGUgdmFsdWUKKyAqIEBjb3VudDogc2l6ZSBvZiBidWZmZXIKICAqLwogc3RhdGljIHNzaXplX3QgY2hhbm5lbF9zZXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQpAQCAtOTEyLDcgKzk1OCwxMCBAQAogfQogCiAvKioKLSAqIEBicmllZiBHZXQgZnVuY3Rpb24gZm9yIHN5c2ZzIGF0dHJpYnV0ZSBtZXNoX2lkCisgKiBtZXNoX2lkX2dldCAtIEdldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIG1lc2hfaWQKKyAqIEBkZXY6IHRoZSAmc3RydWN0IGRldmljZQorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGVzCisgKiBAYnVmOiBidWZmZXIgd2hlcmUgZGF0YSB3aWxsIGJlIHJldHVybmVkCiAgKi8KIHN0YXRpYyBzc2l6ZV90IG1lc2hfaWRfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgICBjaGFyICpidWYpCkBAIC05MjYsNyArOTc1LDcgQEAKIAkJcmV0dXJuIHJldDsKIAogCWlmIChkZWZzLm1lc2hpZS52YWwubWVzaF9pZF9sZW4gPiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKSB7Ci0JCWxic19wcl9lcnIoImluY29uc2lzdGVudCBtZXNoIElEIGxlbmd0aCIpOworCQlkZXZfZXJyKGRldiwgImluY29uc2lzdGVudCBtZXNoIElEIGxlbmd0aFxuIik7CiAJCWRlZnMubWVzaGllLnZhbC5tZXNoX2lkX2xlbiA9IElFRUU4MDIxMV9NQVhfU1NJRF9MRU47CiAJfQogCkBAIC05MzgsNyArOTg3LDExIEBACiB9CiAKIC8qKgotICogQGJyaWVmIFNldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIG1lc2hfaWQKKyAqIG1lc2hfaWRfc2V0IC0gU2V0IGZ1bmN0aW9uIGZvciBzeXNmcyBhdHRyaWJ1dGUgbWVzaF9pZAorICogQGRldjogdGhlICZzdHJ1Y3QgZGV2aWNlCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZXMKKyAqIEBidWY6IGJ1ZmZlciB0aGF0IGNvbnRhaW5zIG5ldyBhdHRyaWJ1dGUgdmFsdWUKKyAqIEBjb3VudDogc2l6ZSBvZiBidWZmZXIKICAqLwogc3RhdGljIHNzaXplX3QgbWVzaF9pZF9zZXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQpAQCAtOTgwLDcgKzEwMzMsMTAgQEAKIH0KIAogLyoqCi0gKiBAYnJpZWYgR2V0IGZ1bmN0aW9uIGZvciBzeXNmcyBhdHRyaWJ1dGUgcHJvdG9jb2xfaWQKKyAqIHByb3RvY29sX2lkX2dldCAtIEdldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIHByb3RvY29sX2lkCisgKiBAZGV2OiB0aGUgJnN0cnVjdCBkZXZpY2UKKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlcworICogQGJ1ZjogYnVmZmVyIHdoZXJlIGRhdGEgd2lsbCBiZSByZXR1cm5lZAogICovCiBzdGF0aWMgc3NpemVfdCBwcm90b2NvbF9pZF9nZXQoc3RydWN0IGRldmljZSAqZGV2LAogCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCkBAIC05OTcsNyArMTA1MywxMSBAQAogfQogCiAvKioKLSAqIEBicmllZiBTZXQgZnVuY3Rpb24gZm9yIHN5c2ZzIGF0dHJpYnV0ZSBwcm90b2NvbF9pZAorICogcHJvdG9jb2xfaWRfc2V0IC0gU2V0IGZ1bmN0aW9uIGZvciBzeXNmcyBhdHRyaWJ1dGUgcHJvdG9jb2xfaWQKKyAqIEBkZXY6IHRoZSAmc3RydWN0IGRldmljZQorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGVzCisgKiBAYnVmOiBidWZmZXIgdGhhdCBjb250YWlucyBuZXcgYXR0cmlidXRlIHZhbHVlCisgKiBAY291bnQ6IHNpemUgb2YgYnVmZmVyCiAgKi8KIHN0YXRpYyBzc2l6ZV90IHByb3RvY29sX2lkX3NldChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKQEAgLTEwMzQsNyArMTA5NCwxMCBAQAogfQogCiAvKioKLSAqIEBicmllZiBHZXQgZnVuY3Rpb24gZm9yIHN5c2ZzIGF0dHJpYnV0ZSBtZXRyaWNfaWQKKyAqIG1ldHJpY19pZF9nZXQgLSBHZXQgZnVuY3Rpb24gZm9yIHN5c2ZzIGF0dHJpYnV0ZSBtZXRyaWNfaWQKKyAqIEBkZXY6IHRoZSAmc3RydWN0IGRldmljZQorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGVzCisgKiBAYnVmOiBidWZmZXIgd2hlcmUgZGF0YSB3aWxsIGJlIHJldHVybmVkCiAgKi8KIHN0YXRpYyBzc2l6ZV90IG1ldHJpY19pZF9nZXQoc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQpAQCAtMTA1MSw3ICsxMTE0LDExIEBACiB9CiAKIC8qKgotICogQGJyaWVmIFNldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIG1ldHJpY19pZAorICogbWV0cmljX2lkX3NldCAtIFNldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIG1ldHJpY19pZAorICogQGRldjogdGhlICZzdHJ1Y3QgZGV2aWNlCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZXMKKyAqIEBidWY6IGJ1ZmZlciB0aGF0IGNvbnRhaW5zIG5ldyBhdHRyaWJ1dGUgdmFsdWUKKyAqIEBjb3VudDogc2l6ZSBvZiBidWZmZXIKICAqLwogc3RhdGljIHNzaXplX3QgbWV0cmljX2lkX3NldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKQEAgLTEwODgsNyArMTE1NSwxMCBAQAogfQogCiAvKioKLSAqIEBicmllZiBHZXQgZnVuY3Rpb24gZm9yIHN5c2ZzIGF0dHJpYnV0ZSBjYXBhYmlsaXR5CisgKiBjYXBhYmlsaXR5X2dldCAtIEdldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIGNhcGFiaWxpdHkKKyAqIEBkZXY6IHRoZSAmc3RydWN0IGRldmljZQorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGVzCisgKiBAYnVmOiBidWZmZXIgd2hlcmUgZGF0YSB3aWxsIGJlIHJldHVybmVkCiAgKi8KIHN0YXRpYyBzc2l6ZV90IGNhcGFiaWxpdHlfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKQEAgLTExMDUsNyArMTE3NSwxMSBAQAogfQogCiAvKioKLSAqIEBicmllZiBTZXQgZnVuY3Rpb24gZm9yIHN5c2ZzIGF0dHJpYnV0ZSBjYXBhYmlsaXR5CisgKiBjYXBhYmlsaXR5X3NldCAtIFNldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIGNhcGFiaWxpdHkKKyAqIEBkZXY6IHRoZSAmc3RydWN0IGRldmljZQorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGVzCisgKiBAYnVmOiBidWZmZXIgdGhhdCBjb250YWlucyBuZXcgYXR0cmlidXRlIHZhbHVlCisgKiBAY291bnQ6IHNpemUgb2YgYnVmZmVyCiAgKi8KIHN0YXRpYyBzc2l6ZV90IGNhcGFiaWxpdHlfc2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21lc2guaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21lc2guaAppbmRleCBhZmIyZThkLi5lZTk1YzczIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tZXNoLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWVzaC5oCkBAIC0xLDYgKzEsNiBAQAotLyoqCi0gICogQ29udGFpbnMgYWxsIGRlZmluaXRpb25zIG5lZWRlZCBmb3IgdGhlIExpYmVydGFzJyBNRVNIIGltcGxlbWVudGF0aW9uLgotICAqLworLyoKKyAqIENvbnRhaW5zIGFsbCBkZWZpbml0aW9ucyBuZWVkZWQgZm9yIHRoZSBMaWJlcnRhcycgTUVTSCBpbXBsZW1lbnRhdGlvbi4KKyAqLwogI2lmbmRlZiBfTEJTX01FU0hfSF8KICNkZWZpbmUgX0xCU19NRVNIX0hfCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9yeC5jCmluZGV4IGEyYjFkZjIuLmZkYjA0NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3J4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvcnguYwpAQCAtMSw2ICsxLDkgQEAKLS8qKgotICAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaGFuZGxpbmcgb2YgUlggaW4gd2xhbiBkcml2ZXIuCi0gICovCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBoYW5kbGluZyBvZiBSWCBpbiB3bGFuIGRyaXZlci4KKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtNDAsMTIgKzQzLDEyIEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIC8qKgotICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyByZWNlaXZlZCBwYWNrZXQgYW5kIGZvcndhcmRzIGl0Ci0gKiAgdG8ga2VybmVsL3VwcGVyIGxheWVyCisgKiBsYnNfcHJvY2Vzc19yeGVkX3BhY2tldCAtIHByb2Nlc3NlcyByZWNlaXZlZCBwYWNrZXQgYW5kIGZvcndhcmRzIGl0CisgKiB0byBrZXJuZWwvdXBwZXIgbGF5ZXIKICAqCi0gKiAgQHBhcmFtCXByaXYJQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZQotICogIEBwYXJhbQlza2IJCUEgcG9pbnRlciB0byBza2Igd2hpY2ggaW5jbHVkZXMgdGhlIHJlY2VpdmVkIHBhY2tldAotICogIEByZXR1cm4JMCBvciAtMQorICogQHByaXY6CUEgcG9pbnRlciB0byAmc3RydWN0IGxic19wcml2YXRlCisgKiBAc2tiOglBIHBvaW50ZXIgdG8gc2tiIHdoaWNoIGluY2x1ZGVzIHRoZSByZWNlaXZlZCBwYWNrZXQKKyAqIHJldHVybnM6CTAgb3IgLTEKICAqLwogaW50IGxic19wcm9jZXNzX3J4ZWRfcGFja2V0KHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTE1NiwxMSArMTU5LDExIEBACiBFWFBPUlRfU1lNQk9MX0dQTChsYnNfcHJvY2Vzc19yeGVkX3BhY2tldCk7CiAKIC8qKgotICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIFR4L1J4IHJhdGVzIGZyb20gdGhlIE1hcnZlbGwgV0xBTiBmb3JtYXQKLSAqICAoc2VlIFRhYmxlIDIgaW4gU2VjdGlvbiAzLjEpIHRvIElFRUU4MDIxMV9SQURJT1RBUF9SQVRFIHVuaXRzICg1MDAgS2IvcykKKyAqIGNvbnZlcnRfbXZfcmF0ZV90b19yYWRpb3RhcCAtIGNvbnZlcnRzIFR4L1J4IHJhdGVzIGZyb20gTWFydmVsbCBXTEFOIGZvcm1hdAorICogKHNlZSBUYWJsZSAyIGluIFNlY3Rpb24gMy4xKSB0byBJRUVFODAyMTFfUkFESU9UQVBfUkFURSB1bml0cyAoNTAwIEtiL3MpCiAgKgotICogIEBwYXJhbQlyYXRlCUlucHV0IHJhdGUKLSAqICBAcmV0dXJuCU91dHB1dCBSYXRlICgwIGlmIGludmFsaWQpCisgKiBAcmF0ZToJSW5wdXQgcmF0ZQorICogcmV0dXJuczoJT3V0cHV0IFJhdGUgKDAgaWYgaW52YWxpZCkKICAqLwogc3RhdGljIHU4IGNvbnZlcnRfbXZfcmF0ZV90b19yYWRpb3RhcCh1OCByYXRlKQogewpAQCAtMTkxLDE3ICsxOTQsMTcgQEAKIAljYXNlIDEyOgkJLyogIDU0IE1icHMgKi8KIAkJcmV0dXJuIDEwODsKIAl9Ci0JbGJzX3ByX2FsZXJ0KCJJbnZhbGlkIE1hcnZlbGwgV0xBTiByYXRlICVpXG4iLCByYXRlKTsKKwlwcl9hbGVydCgiSW52YWxpZCBNYXJ2ZWxsIFdMQU4gcmF0ZSAlaVxuIiwgcmF0ZSk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qKgotICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyBhIHJlY2VpdmVkIDgwMi4xMSBwYWNrZXQgYW5kIGZvcndhcmRzIGl0Ci0gKiAgdG8ga2VybmVsL3VwcGVyIGxheWVyCisgKiBwcm9jZXNzX3J4ZWRfODAyXzExX3BhY2tldCAtIHByb2Nlc3NlcyBhIHJlY2VpdmVkIDgwMi4xMSBwYWNrZXQgYW5kIGZvcndhcmRzCisgKiBpdCB0byBrZXJuZWwvdXBwZXIgbGF5ZXIKICAqCi0gKiAgQHBhcmFtCXByaXYJQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZQotICogIEBwYXJhbQlza2IJCUEgcG9pbnRlciB0byBza2Igd2hpY2ggaW5jbHVkZXMgdGhlIHJlY2VpdmVkIHBhY2tldAotICogIEByZXR1cm4JMCBvciAtMQorICogQHByaXY6CUEgcG9pbnRlciB0byAmc3RydWN0IGxic19wcml2YXRlCisgKiBAc2tiOglBIHBvaW50ZXIgdG8gc2tiIHdoaWNoIGluY2x1ZGVzIHRoZSByZWNlaXZlZCBwYWNrZXQKKyAqIHJldHVybnM6CTAgb3IgLTEKICAqLwogc3RhdGljIGludCBwcm9jZXNzX3J4ZWRfODAyXzExX3BhY2tldChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCiAJc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTI0OCw3ICsyNTEsNyBAQAogCS8qIGFkZCBzcGFjZSBmb3IgdGhlIG5ldyByYWRpbyBoZWFkZXIgKi8KIAlpZiAoKHNrYl9oZWFkcm9vbShza2IpIDwgc2l6ZW9mKHN0cnVjdCByeF9yYWRpb3RhcF9oZHIpKSAmJgogCSAgICBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgc2l6ZW9mKHN0cnVjdCByeF9yYWRpb3RhcF9oZHIpLCAwLCBHRlBfQVRPTUlDKSkgewotCQlsYnNfcHJfYWxlcnQoIiVzOiBjb3VsZG4ndCBwc2tiX2V4cGFuZF9oZWFkXG4iLCBfX2Z1bmNfXyk7CisJCW5ldGRldl9hbGVydChkZXYsICIlczogY291bGRuJ3QgcHNrYl9leHBhbmRfaGVhZFxuIiwgX19mdW5jX18pOwogCQlyZXQgPSAtRU5PTUVNOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBkb25lOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R4LmMKaW5kZXggODAwMGNhNi4uYmJiOTVmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy90eC5jCkBAIC0xLDYgKzEsNiBAQAotLyoqCi0gICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBoYW5kbGluZyBvZiBUWCBpbiB3bGFuIGRyaXZlci4KLSAgKi8KKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGhhbmRsaW5nIG9mIFRYIGluIHdsYW4gZHJpdmVyLgorICovCiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtMTMsMTEgKzEzLDExIEBACiAjaW5jbHVkZSAiZGV2LmgiCiAKIC8qKgotICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIFR4L1J4IHJhdGVzIGZyb20gSUVFRTgwMjExX1JBRElPVEFQX1JBVEUKLSAqICB1bml0cyAoNTAwIEtiL3MpIGludG8gTWFydmVsbCBXTEFOIGZvcm1hdCAoc2VlIFRhYmxlIDggaW4gU2VjdGlvbiAzLjIuMSkKKyAqIGNvbnZlcnRfcmFkaW90YXBfcmF0ZV90b19tdiAtIGNvbnZlcnRzIFR4L1J4IHJhdGVzIGZyb20gSUVFRTgwMjExX1JBRElPVEFQX1JBVEUKKyAqIHVuaXRzICg1MDAgS2IvcykgaW50byBNYXJ2ZWxsIFdMQU4gZm9ybWF0IChzZWUgVGFibGUgOCBpbiBTZWN0aW9uIDMuMi4xKQogICoKLSAqICBAcGFyYW0gcmF0ZSAgICBJbnB1dCByYXRlCi0gKiAgQHJldHVybiAgICAgIE91dHB1dCBSYXRlICgwIGlmIGludmFsaWQpCisgKiBAcmF0ZToJSW5wdXQgcmF0ZQorICogcmV0dXJuczoJT3V0cHV0IFJhdGUgKDAgaWYgaW52YWxpZCkKICAqLwogc3RhdGljIHUzMiBjb252ZXJ0X3JhZGlvdGFwX3JhdGVfdG9fbXYodTggcmF0ZSkKIHsKQEAgLTUxLDEyICs1MSwxMiBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIGNvbmRpdGlvbnMgYW5kIHNlbmRzIHBhY2tldCB0byBJRgotICogIGxheWVyIGlmIGV2ZXJ5dGhpbmcgaXMgb2suCisgKiBsYnNfaGFyZF9zdGFydF94bWl0IC0gY2hlY2tzIHRoZSBjb25kaXRpb25zIGFuZCBzZW5kcyBwYWNrZXQgdG8gSUYKKyAqIGxheWVyIGlmIGV2ZXJ5dGhpbmcgaXMgb2sKICAqCi0gKiAgQHBhcmFtIHByaXYgICAgQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gc2tiICAgICBBIHBvaW50ZXIgdG8gc2tiIHdoaWNoIGluY2x1ZGVzIFRYIHBhY2tldAotICogIEByZXR1cm4gCSAgIDAgb3IgLTEKKyAqIEBza2I6CUEgcG9pbnRlciB0byBza2Igd2hpY2ggaW5jbHVkZXMgVFggcGFja2V0CisgKiBAZGV2OglBIHBvaW50ZXIgdG8gdGhlICZzdHJ1Y3QgbmV0X2RldmljZQorICogcmV0dXJuczoJMCBvciAtMQogICovCiBuZXRkZXZfdHhfdCBsYnNfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0xNjgsMTMgKzE2OCwxMyBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBzZW5kcyB0byB0aGUgaG9zdCB0aGUgbGFzdCB0cmFuc21pdHRlZCBwYWNrZXQsCi0gKiAgZmlsbGluZyB0aGUgcmFkaW90YXAgaGVhZGVycyB3aXRoIHRyYW5zbWlzc2lvbiBpbmZvcm1hdGlvbi4KKyAqIGxic19zZW5kX3R4X2ZlZWRiYWNrIC0gc2VuZHMgdG8gdGhlIGhvc3QgdGhlIGxhc3QgdHJhbnNtaXR0ZWQgcGFja2V0LAorICogZmlsbGluZyB0aGUgcmFkaW90YXAgaGVhZGVycyB3aXRoIHRyYW5zbWlzc2lvbiBpbmZvcm1hdGlvbi4KICAqCi0gKiAgQHBhcmFtIHByaXYgICAgIEEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHBhcmFtIHN0YXR1cyAgIEEgMzIgYml0IHZhbHVlIGNvbnRhaW5pbmcgdHJhbnNtaXNzaW9uIHN0YXR1cy4KKyAqIEBwcml2OglBIHBvaW50ZXIgdG8gJnN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqIEB0cnlfY291bnQ6CUEgMzItYml0IHZhbHVlIGNvbnRhaW5pbmcgdHJhbnNtaXNzaW9uIHJldHJ5IHN0YXR1cy4KICAqCi0gKiAgQHJldHVybnMgdm9pZAorICogcmV0dXJuczoJdm9pZAogICovCiB2b2lkIGxic19zZW5kX3R4X2ZlZWRiYWNrKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdTMyIHRyeV9jb3VudCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R5cGVzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy90eXBlcy5oCmluZGV4IDQ2MmZiYjQuLmNmMWQ5YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R5cGVzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHlwZXMuaApAQCAtMSw2ICsxLDYgQEAKLS8qKgotICAqIFRoaXMgaGVhZGVyIGZpbGUgY29udGFpbnMgZGVmaW5pdGlvbiBmb3IgZ2xvYmFsIHR5cGVzCi0gICovCisvKgorICogVGhpcyBoZWFkZXIgZmlsZSBjb250YWlucyBkZWZpbml0aW9uIGZvciBnbG9iYWwgdHlwZXMKKyAqLwogI2lmbmRlZiBfTEJTX1RZUEVTX0hfCiAjZGVmaW5lIF9MQlNfVFlQRVNfSF8KIApAQCAtNTQsNyArNTQsNyBAQAogCXN0cnVjdCBpZWVlX2llX2RzX3BhcmFtX3NldCBkczsKIH0gX19wYWNrZWQ7CiAKLS8qKiBUTFYgIHR5cGUgSUQgZGVmaW5pdGlvbiAqLworLyogVExWICB0eXBlIElEIGRlZmluaXRpb24gKi8KICNkZWZpbmUgUFJPUFJJRVRBUllfVExWX0JBU0VfSUQJCTB4MDEwMAogCiAvKiBUZXJtaW5hdGluZyBUTFYgdHlwZSAqLwpAQCAtOTYsNyArOTYsNyBAQAogI2RlZmluZSBUTFZfVFlQRV9NRVNIX0lEICAgICAgICAgICAgKFBST1BSSUVUQVJZX1RMVl9CQVNFX0lEICsgMzcpCiAjZGVmaW5lIFRMVl9UWVBFX09MRF9NRVNIX0lEICAgICAgICAoUFJPUFJJRVRBUllfVExWX0JBU0VfSUQgKyAyOTEpCiAKLS8qKiBUTFYgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMqLworLyogVExWIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzICovCiBzdHJ1Y3QgbXJ2bF9pZV9oZWFkZXIgewogCV9fbGUxNiB0eXBlOwogCV9fbGUxNiBsZW47CkBAIC0xNzcsNyArMTc3LDcgQEAKIAlfX2xlMTYgYXV0aDsKIH0gX19wYWNrZWQ7CiAKLS8qKiAgTG9jYWwgUG93ZXIgY2FwYWJpbGl0eSAqLworLyogIExvY2FsIFBvd2VyIGNhcGFiaWxpdHkgKi8KIHN0cnVjdCBtcnZsX2llX3Bvd2VyX2NhcGFiaWxpdHkgewogCXN0cnVjdCBtcnZsX2llX2hlYWRlciBoZWFkZXI7CiAJczggbWlucG93ZXI7CkBAIC0yMzUsOSArMjM1LDExIEBACiAJc3RydWN0IGxlZF9iaHYgbGVkYmh2WzFdOwogfSBfX3BhY2tlZDsKIAotLyogTWVhbnQgdG8gYmUgcGFja2VkIGFzIHRoZSB2YWx1ZSBtZW1iZXIgb2YgYSBzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudC4KKy8qCisgKiBNZWFudCB0byBiZSBwYWNrZWQgYXMgdGhlIHZhbHVlIG1lbWJlciBvZiBhIHN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50LgogICogTm90ZSB0aGF0IHRoZSBsZW4gbWVtYmVyIG9mIHRoZSBpZWVlODAyMTFfaW5mb19lbGVtZW50IHZhcmllcyBkZXBlbmRpbmcgb24KLSAqIHRoZSBtZXNoX2lkX2xlbiAqLworICogdGhlIG1lc2hfaWRfbGVuCisgKi8KIHN0cnVjdCBtcnZsX21lc2hpZV92YWwgewogCXVpbnQ4X3Qgb3VpWzNdOwogCXVpbnQ4X3QgdHlwZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jCmluZGV4IGY0ZjQyNTcuLjlkNGE0MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYwpAQCAtMTUxNSwxOSArMTUxNSwxMCBAQAogCWlmIChod3NpbV9tb24gPT0gTlVMTCkKIAkJZ290byBmYWlsZWQ7CiAKLQlydG5sX2xvY2soKTsKLQotCWVyciA9IGRldl9hbGxvY19uYW1lKGh3c2ltX21vbiwgaHdzaW1fbW9uLT5uYW1lKTsKKwllcnIgPSByZWdpc3Rlcl9uZXRkZXYoaHdzaW1fbW9uKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBmYWlsZWRfbW9uOwogCi0KLQllcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UoaHdzaW1fbW9uKTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBmYWlsZWRfbW9uOwotCi0JcnRubF91bmxvY2soKTsKLQogCXJldHVybiAwOwogCiBmYWlsZWRfbW9uOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC8xMW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvMTFuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE2MTgzZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvMTFuLmMKQEAgLTAsMCArMSw3NDQgQEAKKy8qCisgKiBNYXJ2ZWxsIFdpcmVsZXNzIExBTiBkZXZpY2UgZHJpdmVyOiA4MDIuMTFuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRlcm5hdGlvbmFsCisgKiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKyAqICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgdXNlLCByZWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgaW4KKyAqIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UsIGEgY29weSBvZiB3aGljaAorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0Egb3Igb24gdGhlCisgKiB3b3JsZHdpZGUgd2ViIGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQuCisgKgorICogVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4gIFRoZSBMaWNlbnNlIHByb3ZpZGVzIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dAorICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLgorICovCisKKyNpbmNsdWRlICJkZWNsLmgiCisjaW5jbHVkZSAiaW9jdGwuaCIKKyNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAiZncuaCIKKyNpbmNsdWRlICJtYWluLmgiCisjaW5jbHVkZSAid21tLmgiCisjaW5jbHVkZSAiMTFuLmgiCisKKy8qCisgKiBGaWxscyBIVCBjYXBhYmlsaXR5IGluZm9ybWF0aW9uIGZpZWxkLCBBTVBEVSBQYXJhbWV0ZXJzIGZpZWxkLCBIVCBleHRlbmRlZAorICogY2FwYWJpbGl0eSBmaWVsZCwgYW5kIHN1cHBvcnRlZCBNQ1Mgc2V0IGZpZWxkcy4KKyAqCisgKiBIVCBjYXBhYmlsaXR5IGluZm9ybWF0aW9uIGZpZWxkLCBBTVBEVSBQYXJhbWV0ZXJzIGZpZWxkLCBzdXBwb3J0ZWQgTUNTIHNldAorICogZmllbGRzIGFyZSByZXRyaWV2ZWQgZnJvbSBjZmc4MDIxMSBzdGFjaworICoKKyAqIFJEIHJlc3BvbmRlciBiaXQgdG8gc2V0IHRvIGNsZWFyIGluIHRoZSBleHRlbmRlZCBjYXBhYmlsaXR5IGhlYWRlci4KKyAqLwordm9pZAorbXdpZmlleF9maWxsX2NhcF9pbmZvKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHU4IHJhZGlvX3R5cGUsCisJCSAgICAgIHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2h0Y2FwICpodF9jYXApCit7CisJdWludDE2X3QgaHRfZXh0X2NhcCA9IGxlMTZfdG9fY3B1KGh0X2NhcC0+aHRfY2FwLmV4dGVuZGVkX2h0X2NhcF9pbmZvKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCA9CisJCQkJCXByaXYtPndkZXYtPndpcGh5LT5iYW5kc1tyYWRpb190eXBlXTsKKworCWh0X2NhcC0+aHRfY2FwLmFtcGR1X3BhcmFtc19pbmZvID0KKwkJKHNiYW5kLT5odF9jYXAuYW1wZHVfZmFjdG9yICYKKwkJIElFRUU4MDIxMV9IVF9BTVBEVV9QQVJNX0ZBQ1RPUil8CisJCSgoc2JhbmQtPmh0X2NhcC5hbXBkdV9kZW5zaXR5IDw8CisJCSBJRUVFODAyMTFfSFRfQU1QRFVfUEFSTV9ERU5TSVRZX1NISUZUKSAmCisJCSBJRUVFODAyMTFfSFRfQU1QRFVfUEFSTV9ERU5TSVRZKTsKKworCW1lbWNweSgodTggKikgJmh0X2NhcC0+aHRfY2FwLm1jcywgJnNiYW5kLT5odF9jYXAubWNzLAorCQkJCQkJc2l6ZW9mKHNiYW5kLT5odF9jYXAubWNzKSk7CisKKwlpZiAocHJpdi0+YnNzX21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAorCQkJKHNiYW5kLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDApKQorCQkvKiBTZXQgTUNTMzIgZm9yIGluZnJhIG1vZGUgb3IgYWQtaG9jIG1vZGUgd2l0aCA0ME1IeiBzdXBwb3J0ICovCisJCVNFVEhUX01DUzMyKGh0X2NhcC0+aHRfY2FwLm1jcy5yeF9tYXNrKTsKKworCS8qIENsZWFyIFJEIHJlc3BvbmRlciBiaXQgKi8KKwlodF9leHRfY2FwICY9IH5JRUVFODAyMTFfSFRfRVhUX0NBUF9SRF9SRVNQT05ERVI7CisKKwlodF9jYXAtPmh0X2NhcC5jYXBfaW5mbyA9IGNwdV90b19sZTE2KHNiYW5kLT5odF9jYXAuY2FwKTsKKwlodF9jYXAtPmh0X2NhcC5leHRlbmRlZF9odF9jYXBfaW5mbyA9IGNwdV90b19sZTE2KGh0X2V4dF9jYXApOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBwb2ludGVyIHRvIGFuIGVudHJ5IGluIEJBIFN0cmVhbQorICogdGFibGUgd2hpY2ggbWF0Y2hlcyB0aGUgcmVxdWVzdGVkIEJBIHN0YXR1cy4KKyAqLworc3RhdGljIHN0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwgKgorbXdpZmlleF8xMW5fZ2V0X3R4X2JhX3N0cmVhbV9zdGF0dXMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgIGVudW0gbXdpZmlleF9iYV9zdGF0dXMgYmFfc3RhdHVzKQoreworCXN0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwgKnR4X2JhX3Rzcl90Ymw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT50eF9iYV9zdHJlYW1fdGJsX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHR4X2JhX3Rzcl90YmwsICZwcml2LT50eF9iYV9zdHJlYW1fdGJsX3B0ciwgbGlzdCkgeworCQlpZiAodHhfYmFfdHNyX3RibC0+YmFfc3RhdHVzID09IGJhX3N0YXR1cykgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfYmFfc3RyZWFtX3RibF9sb2NrLAorCQkJCQkgICAgICAgZmxhZ3MpOworCQkJcmV0dXJuIHR4X2JhX3Rzcl90Ymw7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfYmFfc3RyZWFtX3RibF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGNvbW1hbmQgcmVzcG9uc2Ugb2YgZGVsZXRlIGEgYmxvY2sKKyAqIGFjayByZXF1ZXN0LgorICoKKyAqIFRoZSBmdW5jdGlvbiBjaGVja3MgdGhlIHJlc3BvbnNlIHN1Y2Nlc3Mgc3RhdHVzIGFuZCB0YWtlcyBhY3Rpb24KKyAqIGFjY29yZGluZ2x5IChzZW5kIGFuIGFkZCBCQSByZXF1ZXN0IGluIGNhc2Ugb2Ygc3VjY2Vzcywgb3IgcmVjcmVhdGUKKyAqIHRoZSBkZWxldGVkIHN0cmVhbSBpbiBjYXNlIG9mIGZhaWx1cmUsIGlmIHRoZSBhZGQgQkEgd2FzIGFsc28KKyAqIGluaXRpYXRlZCBieSB1cykuCisgKi8KK2ludCBtd2lmaWV4X3JldF8xMW5fZGVsYmEoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKnJlc3ApCit7CisJaW50IHRpZDsKKwlzdHJ1Y3QgbXdpZmlleF90eF9iYV9zdHJlYW1fdGJsICp0eF9iYV90Ymw7CisJc3RydWN0IGhvc3RfY21kX2RzXzExbl9kZWxiYSAqZGVsX2JhID0KKwkJKHN0cnVjdCBob3N0X2NtZF9kc18xMW5fZGVsYmEgKikgJnJlc3AtPnBhcmFtcy5kZWxfYmE7CisJdWludDE2X3QgZGVsX2JhX3BhcmFtX3NldCA9IGxlMTZfdG9fY3B1KGRlbF9iYS0+ZGVsX2JhX3BhcmFtX3NldCk7CisKKwl0aWQgPSBkZWxfYmFfcGFyYW1fc2V0ID4+IERFTEJBX1RJRF9QT1M7CisJaWYgKGRlbF9iYS0+ZGVsX3Jlc3VsdCA9PSBCQV9SRVNVTFRfU1VDQ0VTUykgeworCQltd2lmaWV4XzExbl9kZWxldGVfYmFfc3RyZWFtX3RibChwcml2LCB0aWQsCisJCQkJZGVsX2JhLT5wZWVyX21hY19hZGRyLCBUWVBFX0RFTEJBX1NFTlQsCisJCQkJSU5JVElBVE9SX0JJVChkZWxfYmFfcGFyYW1fc2V0KSk7CisKKwkJdHhfYmFfdGJsID0gbXdpZmlleF8xMW5fZ2V0X3R4X2JhX3N0cmVhbV9zdGF0dXMocHJpdiwKKwkJCQkJCUJBX1NUUkVBTV9TRVRVUF9JTlBST0dSRVNTKTsKKwkJaWYgKHR4X2JhX3RibCkKKwkJCW13aWZpZXhfc2VuZF9hZGRiYShwcml2LCB0eF9iYV90YmwtPnRpZCwKKwkJCQkJICAgdHhfYmFfdGJsLT5yYSk7CisJfSBlbHNlIHsgLyoKKwkJICAqIEluIGNhc2Ugb2YgZmFpbHVyZSwgcmVjcmVhdGUgdGhlIGRlbGV0ZWQgc3RyZWFtIGluIGNhc2UKKwkJICAqIHdlIGluaXRpYXRlZCB0aGUgQUREQkEKKwkJICAqLworCQlpZiAoSU5JVElBVE9SX0JJVChkZWxfYmFfcGFyYW1fc2V0KSkgeworCQkJbXdpZmlleF8xMW5fY3JlYXRlX3R4X2JhX3N0cmVhbV90YmwocHJpdiwKKwkJCQkJZGVsX2JhLT5wZWVyX21hY19hZGRyLCB0aWQsCisJCQkJCUJBX1NUUkVBTV9TRVRVUF9JTlBST0dSRVNTKTsKKworCQkJdHhfYmFfdGJsID0gbXdpZmlleF8xMW5fZ2V0X3R4X2JhX3N0cmVhbV9zdGF0dXMocHJpdiwKKwkJCQkJQkFfU1RSRUFNX1NFVFVQX0lOUFJPR1JFU1MpOworCQkJaWYgKHR4X2JhX3RibCkKKwkJCQltd2lmaWV4XzExbl9kZWxldGVfYmFfc3RyZWFtX3RibChwcml2LAorCQkJCQkJdHhfYmFfdGJsLT50aWQsIHR4X2JhX3RibC0+cmEsCisJCQkJCQlUWVBFX0RFTEJBX1NFTlQsIHRydWUpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGNvbW1hbmQgcmVzcG9uc2Ugb2YgYWRkIGEgYmxvY2sKKyAqIGFjayByZXF1ZXN0LgorICoKKyAqIEhhbmRsaW5nIGluY2x1ZGVzIGNoYW5naW5nIHRoZSBoZWFkZXIgZmllbGRzIHRvIENQVSBmb3JtYXRzLCBjaGVja2luZworICogdGhlIHJlc3BvbnNlIHN1Y2Nlc3Mgc3RhdHVzIGFuZCB0YWtpbmcgYWN0aW9ucyBhY2NvcmRpbmdseSAoZGVsZXRlIHRoZQorICogQkEgc3RyZWFtIHRhYmxlIGluIGNhc2Ugb2YgZmFpbHVyZSkuCisgKi8KK2ludCBtd2lmaWV4X3JldF8xMW5fYWRkYmFfcmVxKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqcmVzcCkKK3sKKwlpbnQgdGlkOworCXN0cnVjdCBob3N0X2NtZF9kc18xMW5fYWRkYmFfcnNwICphZGRfYmFfcnNwID0KKwkJKHN0cnVjdCBob3N0X2NtZF9kc18xMW5fYWRkYmFfcnNwICopICZyZXNwLT5wYXJhbXMuYWRkX2JhX3JzcDsKKwlzdHJ1Y3QgbXdpZmlleF90eF9iYV9zdHJlYW1fdGJsICp0eF9iYV90Ymw7CisKKwlhZGRfYmFfcnNwLT5zc24gPSBjcHVfdG9fbGUxNigobGUxNl90b19jcHUoYWRkX2JhX3JzcC0+c3NuKSkKKwkJCSYgU1NOX01BU0spOworCisJdGlkID0gKGxlMTZfdG9fY3B1KGFkZF9iYV9yc3AtPmJsb2NrX2Fja19wYXJhbV9zZXQpCisJCSYgSUVFRTgwMjExX0FEREJBX1BBUkFNX1RJRF9NQVNLKQorCQk+PiBCTE9DS0FDS1BBUkFNX1RJRF9QT1M7CisJaWYgKGxlMTZfdG9fY3B1KGFkZF9iYV9yc3AtPnN0YXR1c19jb2RlKSA9PSBCQV9SRVNVTFRfU1VDQ0VTUykgeworCQl0eF9iYV90YmwgPSBtd2lmaWV4XzExbl9nZXRfdHhfYmFfc3RyZWFtX3RibChwcml2LCB0aWQsCisJCQkJCQlhZGRfYmFfcnNwLT5wZWVyX21hY19hZGRyKTsKKwkJaWYgKHR4X2JhX3RibCkgeworCQkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiBCQSBzdHJlYW0gY29tcGxldGVcbiIpOworCQkJdHhfYmFfdGJsLT5iYV9zdGF0dXMgPSBCQV9TVFJFQU1fU0VUVVBfQ09NUExFVEU7CisJCX0gZWxzZSB7CisJCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgIkJBIHN0cmVhbSBub3QgY3JlYXRlZFxuIik7CisJCX0KKwl9IGVsc2UgeworCQltd2lmaWV4XzExbl9kZWxldGVfYmFfc3RyZWFtX3RibChwcml2LCB0aWQsCisJCQkJCQlhZGRfYmFfcnNwLT5wZWVyX21hY19hZGRyLAorCQkJCQkJVFlQRV9ERUxCQV9TRU5ULCB0cnVlKTsKKwkJaWYgKGFkZF9iYV9yc3AtPmFkZF9yc3BfcmVzdWx0ICE9IEJBX1JFU1VMVF9USU1FT1VUKQorCQkJcHJpdi0+YWdncl9wcmlvX3RibFt0aWRdLmFtcGR1X2FwID0KKwkJCQlCQV9TVFJFQU1fTk9UX0FMTE9XRUQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGNvbW1hbmQgcmVzcG9uc2Ugb2YgMTFuIGNvbmZpZ3VyYXRpb24gcmVxdWVzdC4KKyAqCisgKiBIYW5kbGluZyBpbmNsdWRlcyBjaGFuZ2luZyB0aGUgaGVhZGVyIGZpZWxkcyBpbnRvIENQVSBmb3JtYXQuCisgKi8KK2ludCBtd2lmaWV4X3JldF8xMW5fY2ZnKHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwLCB2b2lkICpkYXRhX2J1ZikKK3sKKwlzdHJ1Y3QgbXdpZmlleF9kc18xMW5fdHhfY2ZnICp0eF9jZmc7CisJc3RydWN0IGhvc3RfY21kX2RzXzExbl9jZmcgKmh0Y2ZnID0gJnJlc3AtPnBhcmFtcy5odGNmZzsKKworCWlmIChkYXRhX2J1ZikgeworCQl0eF9jZmcgPSAoc3RydWN0IG13aWZpZXhfZHNfMTFuX3R4X2NmZyAqKSBkYXRhX2J1ZjsKKwkJdHhfY2ZnLT50eF9odGNhcCA9IGxlMTZfdG9fY3B1KGh0Y2ZnLT5odF90eF9jYXApOworCQl0eF9jZmctPnR4X2h0aW5mbyA9IGxlMTZfdG9fY3B1KGh0Y2ZnLT5odF90eF9pbmZvKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGNvbW1hbmQgb2YgcmVjb25maWd1cmUgVHggYnVmZmVyLgorICoKKyAqIFByZXBhcmF0aW9uIGluY2x1ZGVzIC0KKyAqICAgICAgLSBTZXR0aW5nIGNvbW1hbmQgSUQsIGFjdGlvbiBhbmQgcHJvcGVyIHNpemUKKyAqICAgICAgLSBTZXR0aW5nIFR4IGJ1ZmZlciBzaXplIChmb3IgU0VUIG9ubHkpCisgKiAgICAgIC0gRW5zdXJpbmcgY29ycmVjdCBlbmRpYW4tbmVzcworICovCitpbnQgbXdpZmlleF9jbWRfcmVjZmdfdHhfYnVmKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWQsIGludCBjbWRfYWN0aW9uLAorCQkJICAgICB2b2lkICpkYXRhX2J1ZikKK3sKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfdHhidWZfY2ZnICp0eF9idWYgPSAmY21kLT5wYXJhbXMudHhfYnVmOworCXUxNiBhY3Rpb24gPSAodTE2KSBjbWRfYWN0aW9uOworCXUxNiBidWZfc2l6ZSA9ICooKHUxNiAqKSBkYXRhX2J1Zik7CisKKwljbWQtPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihIb3N0Q21kX0NNRF9SRUNPTkZJR1VSRV9UWF9CVUZGKTsKKwljbWQtPnNpemUgPQorCQljcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGhvc3RfY21kX2RzX3R4YnVmX2NmZykgKyBTX0RTX0dFTik7CisJdHhfYnVmLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihhY3Rpb24pOworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBIb3N0Q21kX0FDVF9HRU5fU0VUOgorCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImNtZDogc2V0IHR4X2J1Zj0lZFxuIiwgYnVmX3NpemUpOworCQl0eF9idWYtPmJ1ZmZfc2l6ZSA9IGNwdV90b19sZTE2KGJ1Zl9zaXplKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0FDVF9HRU5fR0VUOgorCWRlZmF1bHQ6CisJCXR4X2J1Zi0+YnVmZl9zaXplID0gMDsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyBjb21tYW5kIG9mIEFNU0RVIGFnZ3JlZ2F0aW9uIGNvbnRyb2wuCisgKgorICogUHJlcGFyYXRpb24gaW5jbHVkZXMgLQorICogICAgICAtIFNldHRpbmcgY29tbWFuZCBJRCwgYWN0aW9uIGFuZCBwcm9wZXIgc2l6ZQorICogICAgICAtIFNldHRpbmcgQU1TRFUgY29udHJvbCBwYXJhbWV0ZXJzIChmb3IgU0VUIG9ubHkpCisgKiAgICAgIC0gRW5zdXJpbmcgY29ycmVjdCBlbmRpYW4tbmVzcworICovCitpbnQgbXdpZmlleF9jbWRfYW1zZHVfYWdncl9jdHJsKHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWQsCisJCQkJaW50IGNtZF9hY3Rpb24sIHZvaWQgKmRhdGFfYnVmKQoreworCXN0cnVjdCBob3N0X2NtZF9kc19hbXNkdV9hZ2dyX2N0cmwgKmFtc2R1X2N0cmwgPQorCQkmY21kLT5wYXJhbXMuYW1zZHVfYWdncl9jdHJsOworCXUxNiBhY3Rpb24gPSAodTE2KSBjbWRfYWN0aW9uOworCXN0cnVjdCBtd2lmaWV4X2RzXzExbl9hbXNkdV9hZ2dyX2N0cmwgKmFhX2N0cmwgPQorCQkoc3RydWN0IG13aWZpZXhfZHNfMTFuX2Ftc2R1X2FnZ3JfY3RybCAqKSBkYXRhX2J1ZjsKKworCWNtZC0+Y29tbWFuZCA9IGNwdV90b19sZTE2KEhvc3RDbWRfQ01EX0FNU0RVX0FHR1JfQ1RSTCk7CisJY21kLT5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBob3N0X2NtZF9kc19hbXNkdV9hZ2dyX2N0cmwpCisJCQkJKyBTX0RTX0dFTik7CisJYW1zZHVfY3RybC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoYWN0aW9uKTsKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgSG9zdENtZF9BQ1RfR0VOX1NFVDoKKwkJYW1zZHVfY3RybC0+ZW5hYmxlID0gY3B1X3RvX2xlMTYoYWFfY3RybC0+ZW5hYmxlKTsKKwkJYW1zZHVfY3RybC0+Y3Vycl9idWZfc2l6ZSA9IDA7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9BQ1RfR0VOX0dFVDoKKwlkZWZhdWx0OgorCQlhbXNkdV9jdHJsLT5jdXJyX2J1Zl9zaXplID0gMDsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBjb21tYW5kIHJlc3BvbnNlIG9mIEFNU0RVIGFnZ3JlZ2F0aW9uCisgKiBjb250cm9sIHJlcXVlc3QuCisgKgorICogSGFuZGxpbmcgaW5jbHVkZXMgY2hhbmdpbmcgdGhlIGhlYWRlciBmaWVsZHMgaW50byBDUFUgZm9ybWF0LgorICovCitpbnQgbXdpZmlleF9yZXRfYW1zZHVfYWdncl9jdHJsKHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwLAorCQkJCXZvaWQgKmRhdGFfYnVmKQoreworCXN0cnVjdCBtd2lmaWV4X2RzXzExbl9hbXNkdV9hZ2dyX2N0cmwgKmFtc2R1X2FnZ3JfY3RybDsKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfYW1zZHVfYWdncl9jdHJsICphbXNkdV9jdHJsID0KKwkJJnJlc3AtPnBhcmFtcy5hbXNkdV9hZ2dyX2N0cmw7CisKKwlpZiAoZGF0YV9idWYpIHsKKwkJYW1zZHVfYWdncl9jdHJsID0KKwkJCShzdHJ1Y3QgbXdpZmlleF9kc18xMW5fYW1zZHVfYWdncl9jdHJsICopIGRhdGFfYnVmOworCQlhbXNkdV9hZ2dyX2N0cmwtPmVuYWJsZSA9IGxlMTZfdG9fY3B1KGFtc2R1X2N0cmwtPmVuYWJsZSk7CisJCWFtc2R1X2FnZ3JfY3RybC0+Y3Vycl9idWZfc2l6ZSA9CisJCQlsZTE2X3RvX2NwdShhbXNkdV9jdHJsLT5jdXJyX2J1Zl9zaXplKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIDExbiBjb25maWd1cmF0aW9uIGNvbW1hbmQuCisgKgorICogUHJlcGFyYXRpb24gaW5jbHVkZXMgLQorICogICAgICAtIFNldHRpbmcgY29tbWFuZCBJRCwgYWN0aW9uIGFuZCBwcm9wZXIgc2l6ZQorICogICAgICAtIFNldHRpbmcgSFQgVHggY2FwYWJpbGl0eSBhbmQgSFQgVHggaW5mb3JtYXRpb24gZmllbGRzCisgKiAgICAgIC0gRW5zdXJpbmcgY29ycmVjdCBlbmRpYW4tbmVzcworICovCitpbnQgbXdpZmlleF9jbWRfMTFuX2NmZyhzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLAorCQkJdTE2IGNtZF9hY3Rpb24sIHZvaWQgKmRhdGFfYnVmKQoreworCXN0cnVjdCBob3N0X2NtZF9kc18xMW5fY2ZnICpodGNmZyA9ICZjbWQtPnBhcmFtcy5odGNmZzsKKwlzdHJ1Y3QgbXdpZmlleF9kc18xMW5fdHhfY2ZnICp0eGNmZyA9CisJCShzdHJ1Y3QgbXdpZmlleF9kc18xMW5fdHhfY2ZnICopIGRhdGFfYnVmOworCisJY21kLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoSG9zdENtZF9DTURfMTFOX0NGRyk7CisJY21kLT5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBob3N0X2NtZF9kc18xMW5fY2ZnKSArIFNfRFNfR0VOKTsKKwlodGNmZy0+YWN0aW9uID0gY3B1X3RvX2xlMTYoY21kX2FjdGlvbik7CisJaHRjZmctPmh0X3R4X2NhcCA9IGNwdV90b19sZTE2KHR4Y2ZnLT50eF9odGNhcCk7CisJaHRjZmctPmh0X3R4X2luZm8gPSBjcHVfdG9fbGUxNih0eGNmZy0+dHhfaHRpbmZvKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gYXBwZW5kcyBhbiAxMW4gVExWIHRvIGEgYnVmZmVyLgorICoKKyAqIEJ1ZmZlciBhbGxvY2F0aW9uIGlzIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsaW5nCisgKiBmdW5jdGlvbi4gTm8gc2l6ZSB2YWxpZGF0aW9uIGlzIG1hZGUgaGVyZS4KKyAqCisgKiBUaGUgZnVuY3Rpb24gZmlsbHMgdXAgdGhlIGZvbGxvd2luZyBzZWN0aW9ucywgaWYgYXBwbGljYWJsZSAtCisgKiAgICAgIC0gSFQgY2FwYWJpbGl0eSBJRQorICogICAgICAtIEhUIGluZm9ybWF0aW9uIElFICh3aXRoIGNoYW5uZWwgbGlzdCkKKyAqICAgICAgLSAyMC80MCBCU1MgQ29leGlzdGVuY2UgSUUKKyAqICAgICAgLSBIVCBFeHRlbmRlZCBDYXBhYmlsaXRpZXMgSUUKKyAqLworaW50Cittd2lmaWV4X2NtZF9hcHBlbmRfMTFuX3RsdihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MsCisJCQkgICB1OCAqKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGNhcCAqaHRfY2FwOworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2h0aW5mbyAqaHRfaW5mbzsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19jaGFuX2xpc3RfcGFyYW1fc2V0ICpjaGFuX2xpc3Q7CisJc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfMjA0MGJzc2NvICpic3NfY29fMjA0MDsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19leHRjYXAgKmV4dF9jYXA7CisJaW50IHJldF9sZW4gPSAwOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXU4IHJhZGlvX3R5cGU7CisKKwlpZiAoIWJ1ZmZlciB8fCAhKmJ1ZmZlcikKKwkJcmV0dXJuIHJldF9sZW47CisKKwlyYWRpb190eXBlID0gbXdpZmlleF9iYW5kX3RvX3JhZGlvX3R5cGUoKHU4KSBic3NfZGVzYy0+YnNzX2JhbmQpOworCXNiYW5kID0gcHJpdi0+d2Rldi0+d2lwaHktPmJhbmRzW3JhZGlvX3R5cGVdOworCisJaWYgKGJzc19kZXNjLT5iY25faHRfY2FwKSB7CisJCWh0X2NhcCA9IChzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGNhcCAqKSAqYnVmZmVyOworCQltZW1zZXQoaHRfY2FwLCAwLCBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRjYXApKTsKKwkJaHRfY2FwLT5oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFdMQU5fRUlEX0hUX0NBUEFCSUxJVFkpOworCQlodF9jYXAtPmhlYWRlci5sZW4gPQorCQkJCWNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCkpOworCQltZW1jcHkoKHU4ICopIGh0X2NhcCArIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIpLAorCQkgICAgICAgKHU4ICopIGJzc19kZXNjLT5iY25faHRfY2FwICsKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpLAorCQkgICAgICAgbGUxNl90b19jcHUoaHRfY2FwLT5oZWFkZXIubGVuKSk7CisKKwkJbXdpZmlleF9maWxsX2NhcF9pbmZvKHByaXYsIHJhZGlvX3R5cGUsIGh0X2NhcCk7CisKKwkJKmJ1ZmZlciArPSBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRjYXApOworCQlyZXRfbGVuICs9IHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGNhcCk7CisJfQorCisJaWYgKGJzc19kZXNjLT5iY25faHRfaW5mbykgeworCQlpZiAocHJpdi0+YnNzX21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwkJCWh0X2luZm8gPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRpbmZvICopICpidWZmZXI7CisJCQltZW1zZXQoaHRfaW5mbywgMCwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRpbmZvKSk7CisJCQlodF9pbmZvLT5oZWFkZXIudHlwZSA9CisJCQkJCWNwdV90b19sZTE2KFdMQU5fRUlEX0hUX0lORk9STUFUSU9OKTsKKwkJCWh0X2luZm8tPmhlYWRlci5sZW4gPQorCQkJCWNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8pKTsKKworCQkJbWVtY3B5KCh1OCAqKSBodF9pbmZvICsKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyKSwKKwkJCSAgICAgICAodTggKikgYnNzX2Rlc2MtPmJjbl9odF9pbmZvICsKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKSwKKwkJCSAgICAgICBsZTE2X3RvX2NwdShodF9pbmZvLT5oZWFkZXIubGVuKSk7CisKKwkJCWlmICghKHNiYW5kLT5odF9jYXAuY2FwICYKKwkJCQkJSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDApKQorCQkJCWh0X2luZm8tPmh0X2luZm8uaHRfcGFyYW0gJj0KKwkJCQkJfihJRUVFODAyMTFfSFRfUEFSQU1fQ0hBTl9XSURUSF9BTlkgfAorCQkJCQlJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19PRkZTRVQpOworCisJCQkqYnVmZmVyICs9IHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGluZm8pOworCQkJcmV0X2xlbiArPSBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRpbmZvKTsKKwkJfQorCisJCWNoYW5fbGlzdCA9CisJCQkoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfY2hhbl9saXN0X3BhcmFtX3NldCAqKSAqYnVmZmVyOworCQltZW1zZXQoY2hhbl9saXN0LCAwLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2NoYW5fbGlzdF9wYXJhbV9zZXQpKTsKKwkJY2hhbl9saXN0LT5oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFRMVl9UWVBFX0NIQU5MSVNUKTsKKwkJY2hhbl9saXN0LT5oZWFkZXIubGVuID0gY3B1X3RvX2xlMTYoCisJCQlzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfY2hhbl9saXN0X3BhcmFtX3NldCkgLQorCQkJc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlcikpOworCQljaGFuX2xpc3QtPmNoYW5fc2Nhbl9wYXJhbVswXS5jaGFuX251bWJlciA9CisJCQlic3NfZGVzYy0+YmNuX2h0X2luZm8tPmNvbnRyb2xfY2hhbjsKKwkJY2hhbl9saXN0LT5jaGFuX3NjYW5fcGFyYW1bMF0ucmFkaW9fdHlwZSA9CisJCQltd2lmaWV4X2JhbmRfdG9fcmFkaW9fdHlwZSgodTgpIGJzc19kZXNjLT5ic3NfYmFuZCk7CisKKwkJaWYgKChzYmFuZC0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwKQorCQkJJiYgKGJzc19kZXNjLT5iY25faHRfaW5mby0+aHRfcGFyYW0gJgorCQkJCUlFRUU4MDIxMV9IVF9QQVJBTV9DSEFOX1dJRFRIX0FOWSkpCisJCQlTRVRfU0VDT05EQVJZQ0hBTihjaGFuX2xpc3QtPmNoYW5fc2Nhbl9wYXJhbVswXS4KKwkJCQkJICByYWRpb190eXBlLAorCQkJCQkgIChic3NfZGVzYy0+YmNuX2h0X2luZm8tPmh0X3BhcmFtICYKKwkJCQkJICBJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19PRkZTRVQpKTsKKworCQkqYnVmZmVyICs9IHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19jaGFuX2xpc3RfcGFyYW1fc2V0KTsKKwkJcmV0X2xlbiArPSBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfY2hhbl9saXN0X3BhcmFtX3NldCk7CisJfQorCisJaWYgKGJzc19kZXNjLT5iY25fYnNzX2NvXzIwNDApIHsKKwkJYnNzX2NvXzIwNDAgPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfMjA0MGJzc2NvICopICpidWZmZXI7CisJCW1lbXNldChic3NfY29fMjA0MCwgMCwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc18yMDQwYnNzY28pKTsKKwkJYnNzX2NvXzIwNDAtPmhlYWRlci50eXBlID0gY3B1X3RvX2xlMTYoV0xBTl9FSURfQlNTX0NPRVhfMjA0MCk7CisJCWJzc19jb18yMDQwLT5oZWFkZXIubGVuID0KKwkJICAgICAgIGNwdV90b19sZTE2KHNpemVvZihic3NfY29fMjA0MC0+YnNzX2NvXzIwNDApKTsKKworCQltZW1jcHkoKHU4ICopIGJzc19jb18yMDQwICsKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIpLAorCQkgICAgICAgKHU4ICopIGJzc19kZXNjLT5iY25fYnNzX2NvXzIwNDAgKworCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpZWVlX3R5cGVzX2hlYWRlciksCisJCSAgICAgICBsZTE2X3RvX2NwdShic3NfY29fMjA0MC0+aGVhZGVyLmxlbikpOworCisJCSpidWZmZXIgKz0gc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzXzIwNDBic3Njbyk7CisJCXJldF9sZW4gKz0gc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzXzIwNDBic3Njbyk7CisJfQorCisJaWYgKGJzc19kZXNjLT5iY25fZXh0X2NhcCkgeworCQlleHRfY2FwID0gKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2V4dGNhcCAqKSAqYnVmZmVyOworCQltZW1zZXQoZXh0X2NhcCwgMCwgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2V4dGNhcCkpOworCQlleHRfY2FwLT5oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFdMQU5fRUlEX0VYVF9DQVBBQklMSVRZKTsKKwkJZXh0X2NhcC0+aGVhZGVyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZihleHRfY2FwLT5leHRfY2FwKSk7CisKKwkJbWVtY3B5KCh1OCAqKSBleHRfY2FwICsKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIpLAorCQkgICAgICAgKHU4ICopIGJzc19kZXNjLT5iY25fZXh0X2NhcCArCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKSwKKwkJICAgICAgIGxlMTZfdG9fY3B1KGV4dF9jYXAtPmhlYWRlci5sZW4pKTsKKworCQkqYnVmZmVyICs9IHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19leHRjYXApOworCQlyZXRfbGVuICs9IHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19leHRjYXApOworCX0KKworCXJldHVybiByZXRfbGVuOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZWNvbmZpZ3VyZXMgdGhlIFR4IGJ1ZmZlciBzaXplIGluIGZpcm13YXJlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgYSBmaXJtd2FyZSBjb21tYW5kIGFuZCBpc3N1ZXMgaXQsIGlmCisgKiB0aGUgY3VycmVudCBUeCBidWZmZXIgc2l6ZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgb25lIHJlcXVlc3RlZC4KKyAqIE1heGltdW0gY29uZmlndXJhYmxlIFR4IGJ1ZmZlciBzaXplIGlzIGxpbWl0ZWQgYnkgdGhlIEhUIGNhcGFiaWxpdHkKKyAqIGZpZWxkIHZhbHVlLgorICovCit2b2lkCittd2lmaWV4X2NmZ190eF9idWYoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MpCit7CisJdTE2IG1heF9hbXNkdSA9IE1XSUZJRVhfVFhfREFUQV9CVUZfU0laRV8ySzsKKwl1MTYgdHhfYnVmLCBjdXJyX3R4X2J1Zl9zaXplID0gMDsKKworCWlmIChic3NfZGVzYy0+YmNuX2h0X2NhcCkgeworCQlpZiAobGUxNl90b19jcHUoYnNzX2Rlc2MtPmJjbl9odF9jYXAtPmNhcF9pbmZvKSAmCisJCQkJSUVFRTgwMjExX0hUX0NBUF9NQVhfQU1TRFUpCisJCQltYXhfYW1zZHUgPSBNV0lGSUVYX1RYX0RBVEFfQlVGX1NJWkVfOEs7CisJCWVsc2UKKwkJCW1heF9hbXNkdSA9IE1XSUZJRVhfVFhfREFUQV9CVUZfU0laRV80SzsKKwl9CisKKwl0eF9idWYgPSBtaW4ocHJpdi0+YWRhcHRlci0+bWF4X3R4X2J1Zl9zaXplLCBtYXhfYW1zZHUpOworCisJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiBtYXhfYW1zZHU9JWQsIG1heF90eF9idWY9JWRcbiIsCisJCQltYXhfYW1zZHUsIHByaXYtPmFkYXB0ZXItPm1heF90eF9idWZfc2l6ZSk7CisKKwlpZiAocHJpdi0+YWRhcHRlci0+Y3Vycl90eF9idWZfc2l6ZSA8PSBNV0lGSUVYX1RYX0RBVEFfQlVGX1NJWkVfMkspCisJCWN1cnJfdHhfYnVmX3NpemUgPSBNV0lGSUVYX1RYX0RBVEFfQlVGX1NJWkVfMks7CisJZWxzZSBpZiAocHJpdi0+YWRhcHRlci0+Y3Vycl90eF9idWZfc2l6ZSA8PSBNV0lGSUVYX1RYX0RBVEFfQlVGX1NJWkVfNEspCisJCWN1cnJfdHhfYnVmX3NpemUgPSBNV0lGSUVYX1RYX0RBVEFfQlVGX1NJWkVfNEs7CisJZWxzZSBpZiAocHJpdi0+YWRhcHRlci0+Y3Vycl90eF9idWZfc2l6ZSA8PSBNV0lGSUVYX1RYX0RBVEFfQlVGX1NJWkVfOEspCisJCWN1cnJfdHhfYnVmX3NpemUgPSBNV0lGSUVYX1RYX0RBVEFfQlVGX1NJWkVfOEs7CisJaWYgKGN1cnJfdHhfYnVmX3NpemUgIT0gdHhfYnVmKQorCQltd2lmaWV4X3NlbmRfY21kX2FzeW5jKHByaXYsIEhvc3RDbWRfQ01EX1JFQ09ORklHVVJFX1RYX0JVRkYsCisJCQkJICAgICAgIEhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsICZ0eF9idWYpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIGdpdmVuIHBvaW50ZXIgaXMgdmFsaWQgZW50cnkgb2YKKyAqIFR4IEJBIFN0cmVhbSB0YWJsZS4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X2lzX3R4X2JhX3N0cmVhbV9wdHJfdmFsaWQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQlzdHJ1Y3QgbXdpZmlleF90eF9iYV9zdHJlYW1fdGJsICp0eF90YmxfcHRyKQoreworCXN0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwgKnR4X2JhX3Rzcl90Ymw7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHR4X2JhX3Rzcl90YmwsICZwcml2LT50eF9iYV9zdHJlYW1fdGJsX3B0ciwgbGlzdCkgeworCQlpZiAodHhfYmFfdHNyX3RibCA9PSB0eF90YmxfcHRyKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBkZWxldGVzIHRoZSBnaXZlbiBlbnRyeSBpbiBUeCBCQSBTdHJlYW0gdGFibGUuCisgKgorICogVGhlIGZ1bmN0aW9uIGFsc28gcGVyZm9ybXMgYSB2YWxpZGl0eSBjaGVjayBvbiB0aGUgc3VwcGxpZWQKKyAqIHBvaW50ZXIgYmVmb3JlIHRyeWluZyB0byBkZWxldGUuCisgKi8KK3ZvaWQgbXdpZmlleF8xMW5fZGVsZXRlX3R4X2JhX3N0cmVhbV90YmxfZW50cnkoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQlzdHJ1Y3QgbXdpZmlleF90eF9iYV9zdHJlYW1fdGJsICp0eF9iYV90c3JfdGJsKQoreworCWlmICghdHhfYmFfdHNyX3RibCAmJgorCQkJbXdpZmlleF9pc190eF9iYV9zdHJlYW1fcHRyX3ZhbGlkKHByaXYsIHR4X2JhX3Rzcl90YmwpKQorCQlyZXR1cm47CisKKwlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IHR4X2JhX3Rzcl90YmwgJXBcbiIsIHR4X2JhX3Rzcl90YmwpOworCisJbGlzdF9kZWwoJnR4X2JhX3Rzcl90YmwtPmxpc3QpOworCisJa2ZyZWUodHhfYmFfdHNyX3RibCk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGRlbGV0ZXMgYWxsIHRoZSBlbnRyaWVzIGluIFR4IEJBIFN0cmVhbSB0YWJsZS4KKyAqLwordm9pZCBtd2lmaWV4XzExbl9kZWxldGVfYWxsX3R4X2JhX3N0cmVhbV90Ymwoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgbXdpZmlleF90eF9iYV9zdHJlYW1fdGJsICpkZWxfdGJsX3B0ciwgKnRtcF9ub2RlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhfYmFfc3RyZWFtX3RibF9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRlbF90YmxfcHRyLCB0bXBfbm9kZSwKKwkJCQkgJnByaXYtPnR4X2JhX3N0cmVhbV90YmxfcHRyLCBsaXN0KQorCQltd2lmaWV4XzExbl9kZWxldGVfdHhfYmFfc3RyZWFtX3RibF9lbnRyeShwcml2LCBkZWxfdGJsX3B0cik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfYmFfc3RyZWFtX3RibF9sb2NrLCBmbGFncyk7CisKKwlJTklUX0xJU1RfSEVBRCgmcHJpdi0+dHhfYmFfc3RyZWFtX3RibF9wdHIpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1fVElEOyArK2kpCisJCXByaXYtPmFnZ3JfcHJpb190YmxbaV0uYW1wZHVfYXAgPQorCQkJcHJpdi0+YWdncl9wcmlvX3RibFtpXS5hbXBkdV91c2VyOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBwb2ludGVyIHRvIGFuIGVudHJ5IGluIEJBIFN0cmVhbQorICogdGFibGUgd2hpY2ggbWF0Y2hlcyB0aGUgZ2l2ZW4gUkEvVElEIHBhaXIuCisgKi8KK3N0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwgKgorbXdpZmlleF8xMW5fZ2V0X3R4X2JhX3N0cmVhbV90Ymwoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgaW50IHRpZCwgdTggKnJhKQoreworCXN0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwgKnR4X2JhX3Rzcl90Ymw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT50eF9iYV9zdHJlYW1fdGJsX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHR4X2JhX3Rzcl90YmwsICZwcml2LT50eF9iYV9zdHJlYW1fdGJsX3B0ciwgbGlzdCkgeworCQlpZiAoKCFtZW1jbXAodHhfYmFfdHNyX3RibC0+cmEsIHJhLCBFVEhfQUxFTikpCisJCSAgICAmJiAodHhfYmFfdHNyX3RibC0+dGlkID09IHRpZCkpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X2JhX3N0cmVhbV90YmxfbG9jaywKKwkJCQkJICAgICAgIGZsYWdzKTsKKwkJCXJldHVybiB0eF9iYV90c3JfdGJsOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X2JhX3N0cmVhbV90YmxfbG9jaywgZmxhZ3MpOworCXJldHVybiBOVUxMOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGFuIGVudHJ5IGluIFR4IEJBIHN0cmVhbSB0YWJsZSBmb3IgdGhlCisgKiBnaXZlbiBSQS9USUQgcGFpci4KKyAqLwordm9pZCBtd2lmaWV4XzExbl9jcmVhdGVfdHhfYmFfc3RyZWFtX3RibChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCQkgdTggKnJhLCBpbnQgdGlkLAorCQkJCQkgZW51bSBtd2lmaWV4X2JhX3N0YXR1cyBiYV9zdGF0dXMpCit7CisJc3RydWN0IG13aWZpZXhfdHhfYmFfc3RyZWFtX3RibCAqbmV3X25vZGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghbXdpZmlleF8xMW5fZ2V0X3R4X2JhX3N0cmVhbV90YmwocHJpdiwgdGlkLCByYSkpIHsKKwkJbmV3X25vZGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXdpZmlleF90eF9iYV9zdHJlYW1fdGJsKSwKKwkJCQkgICBHRlBfQVRPTUlDKTsKKwkJaWYgKCFuZXdfbm9kZSkgeworCQkJZGV2X2Vycihwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkJIiVzOiBmYWlsZWQgdG8gYWxsb2MgbmV3X25vZGVcbiIsIF9fZnVuY19fKTsKKwkJCXJldHVybjsKKwkJfQorCisJCUlOSVRfTElTVF9IRUFEKCZuZXdfbm9kZS0+bGlzdCk7CisKKwkJbmV3X25vZGUtPnRpZCA9IHRpZDsKKwkJbmV3X25vZGUtPmJhX3N0YXR1cyA9IGJhX3N0YXR1czsKKwkJbWVtY3B5KG5ld19ub2RlLT5yYSwgcmEsIEVUSF9BTEVOKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhfYmFfc3RyZWFtX3RibF9sb2NrLCBmbGFncyk7CisJCWxpc3RfYWRkX3RhaWwoJm5ld19ub2RlLT5saXN0LCAmcHJpdi0+dHhfYmFfc3RyZWFtX3RibF9wdHIpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9iYV9zdHJlYW1fdGJsX2xvY2ssIGZsYWdzKTsKKwl9Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGFuIGFkZCBCQSByZXF1ZXN0IHRvIHRoZSBnaXZlbiBUSUQvUkEgcGFpci4KKyAqLworaW50IG13aWZpZXhfc2VuZF9hZGRiYShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBpbnQgdGlkLCB1OCAqcGVlcl9tYWMpCit7CisJc3RydWN0IGhvc3RfY21kX2RzXzExbl9hZGRiYV9yZXEgYWRkX2JhX3JlcTsKKwlzdGF0aWMgdTggZGlhbG9nX3RvazsKKwlpbnQgcmV0OworCisJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJjbWQ6ICVzOiB0aWQgJWRcbiIsIF9fZnVuY19fLCB0aWQpOworCisJYWRkX2JhX3JlcS5ibG9ja19hY2tfcGFyYW1fc2V0ID0gY3B1X3RvX2xlMTYoCisJCSh1MTYpICgodGlkIDw8IEJMT0NLQUNLUEFSQU1fVElEX1BPUykgfAorCQkJIChwcml2LT5hZGRfYmFfcGFyYW0uCisJCQkgIHR4X3dpbl9zaXplIDw8IEJMT0NLQUNLUEFSQU1fV0lOU0laRV9QT1MpIHwKKwkJCSBJTU1FRElBVEVfQkxPQ0tfQUNLKSk7CisJYWRkX2JhX3JlcS5ibG9ja19hY2tfdG1vID0gY3B1X3RvX2xlMTYoKHUxNilwcml2LT5hZGRfYmFfcGFyYW0udGltZW91dCk7CisKKwkrK2RpYWxvZ190b2s7CisKKwlpZiAoZGlhbG9nX3RvayA9PSAwKQorCQlkaWFsb2dfdG9rID0gMTsKKworCWFkZF9iYV9yZXEuZGlhbG9nX3Rva2VuID0gZGlhbG9nX3RvazsKKwltZW1jcHkoJmFkZF9iYV9yZXEucGVlcl9tYWNfYWRkciwgcGVlcl9tYWMsIEVUSF9BTEVOKTsKKworCS8qIFdlIGRvbid0IHdhaXQgZm9yIHRoZSByZXNwb25zZSBvZiB0aGlzIGNvbW1hbmQgKi8KKwlyZXQgPSBtd2lmaWV4X3NlbmRfY21kX2FzeW5jKHByaXYsIEhvc3RDbWRfQ01EXzExTl9BRERCQV9SRVEsCisJCQkJICAgICAwLCAwLCAmYWRkX2JhX3JlcSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBzZW5kcyBhIGRlbGV0ZSBCQSByZXF1ZXN0IHRvIHRoZSBnaXZlbiBUSUQvUkEgcGFpci4KKyAqLworaW50IG13aWZpZXhfc2VuZF9kZWxiYShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBpbnQgdGlkLCB1OCAqcGVlcl9tYWMsCisJCSAgICAgICBpbnQgaW5pdGlhdG9yKQoreworCXN0cnVjdCBob3N0X2NtZF9kc18xMW5fZGVsYmEgZGVsYmE7CisJaW50IHJldDsKKwl1aW50MTZfdCBkZWxfYmFfcGFyYW1fc2V0OworCisJbWVtc2V0KCZkZWxiYSwgMCwgc2l6ZW9mKGRlbGJhKSk7CisJZGVsYmEuZGVsX2JhX3BhcmFtX3NldCA9IGNwdV90b19sZTE2KHRpZCA8PCBERUxCQV9USURfUE9TKTsKKworCWRlbF9iYV9wYXJhbV9zZXQgPSBsZTE2X3RvX2NwdShkZWxiYS5kZWxfYmFfcGFyYW1fc2V0KTsKKwlpZiAoaW5pdGlhdG9yKQorCQlkZWxfYmFfcGFyYW1fc2V0IHw9IElFRUU4MDIxMV9ERUxCQV9QQVJBTV9JTklUSUFUT1JfTUFTSzsKKwllbHNlCisJCWRlbF9iYV9wYXJhbV9zZXQgJj0gfklFRUU4MDIxMV9ERUxCQV9QQVJBTV9JTklUSUFUT1JfTUFTSzsKKworCW1lbWNweSgmZGVsYmEucGVlcl9tYWNfYWRkciwgcGVlcl9tYWMsIEVUSF9BTEVOKTsKKworCS8qIFdlIGRvbid0IHdhaXQgZm9yIHRoZSByZXNwb25zZSBvZiB0aGlzIGNvbW1hbmQgKi8KKwlyZXQgPSBtd2lmaWV4X3NlbmRfY21kX2FzeW5jKHByaXYsIEhvc3RDbWRfQ01EXzExTl9ERUxCQSwKKwkJCQkgICAgIEhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsICZkZWxiYSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBjb21tYW5kIHJlc3BvbnNlIG9mIGEgZGVsZXRlIEJBIHJlcXVlc3QuCisgKi8KK3ZvaWQgbXdpZmlleF8xMW5fZGVsZXRlX2JhX3N0cmVhbShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCAqZGVsX2JhKQoreworCXN0cnVjdCBob3N0X2NtZF9kc18xMW5fZGVsYmEgKmNtZF9kZWxfYmEgPQorCQkoc3RydWN0IGhvc3RfY21kX2RzXzExbl9kZWxiYSAqKSBkZWxfYmE7CisJdWludDE2X3QgZGVsX2JhX3BhcmFtX3NldCA9IGxlMTZfdG9fY3B1KGNtZF9kZWxfYmEtPmRlbF9iYV9wYXJhbV9zZXQpOworCWludCB0aWQ7CisKKwl0aWQgPSBkZWxfYmFfcGFyYW1fc2V0ID4+IERFTEJBX1RJRF9QT1M7CisKKwltd2lmaWV4XzExbl9kZWxldGVfYmFfc3RyZWFtX3RibChwcml2LCB0aWQsIGNtZF9kZWxfYmEtPnBlZXJfbWFjX2FkZHIsCisJCQkJCSBUWVBFX0RFTEJBX1JFQ0VJVkUsCisJCQkJCSBJTklUSUFUT1JfQklUKGRlbF9iYV9wYXJhbV9zZXQpKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBSeCByZW9yZGVyaW5nIHRhYmxlLgorICovCitpbnQgbXdpZmlleF9nZXRfcnhfcmVvcmRlcl90Ymwoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgbXdpZmlleF9kc19yeF9yZW9yZGVyX3RibCAqYnVmKQoreworCWludCBpOworCXN0cnVjdCBtd2lmaWV4X2RzX3J4X3Jlb3JkZXJfdGJsICpyeF9yZW9fdGJsID0gYnVmOworCXN0cnVjdCBtd2lmaWV4X3J4X3Jlb3JkZXJfdGJsICpyeF9yZW9yZGVyX3RibF9wdHI7CisJaW50IGNvdW50ID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJ4X3Jlb3JkZXJfdGJsX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJ4X3Jlb3JkZXJfdGJsX3B0ciwgJnByaXYtPnJ4X3Jlb3JkZXJfdGJsX3B0ciwKKwkJCSAgICBsaXN0KSB7CisJCXJ4X3Jlb190YmwtPnRpZCA9ICh1MTYpIHJ4X3Jlb3JkZXJfdGJsX3B0ci0+dGlkOworCQltZW1jcHkocnhfcmVvX3RibC0+dGEsIHJ4X3Jlb3JkZXJfdGJsX3B0ci0+dGEsIEVUSF9BTEVOKTsKKwkJcnhfcmVvX3RibC0+c3RhcnRfd2luID0gcnhfcmVvcmRlcl90YmxfcHRyLT5zdGFydF93aW47CisJCXJ4X3Jlb190YmwtPndpbl9zaXplID0gcnhfcmVvcmRlcl90YmxfcHRyLT53aW5fc2l6ZTsKKwkJZm9yIChpID0gMDsgaSA8IHJ4X3Jlb3JkZXJfdGJsX3B0ci0+d2luX3NpemU7ICsraSkgeworCQkJaWYgKHJ4X3Jlb3JkZXJfdGJsX3B0ci0+cnhfcmVvcmRlcl9wdHJbaV0pCisJCQkJcnhfcmVvX3RibC0+YnVmZmVyW2ldID0gdHJ1ZTsKKwkJCWVsc2UKKwkJCQlyeF9yZW9fdGJsLT5idWZmZXJbaV0gPSBmYWxzZTsKKwkJfQorCQlyeF9yZW9fdGJsKys7CisJCWNvdW50Kys7CisKKwkJaWYgKGNvdW50ID49IE1XSUZJRVhfTUFYX1JYX0JBU1RSRUFNX1NVUFBPUlRFRCkKKwkJCWJyZWFrOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9yZW9yZGVyX3RibF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgVHggQkEgc3RyZWFtIHRhYmxlLgorICovCitpbnQgbXdpZmlleF9nZXRfdHhfYmFfc3RyZWFtX3RibChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCSBzdHJ1Y3QgbXdpZmlleF9kc190eF9iYV9zdHJlYW1fdGJsICpidWYpCit7CisJc3RydWN0IG13aWZpZXhfdHhfYmFfc3RyZWFtX3RibCAqdHhfYmFfdHNyX3RibDsKKwlzdHJ1Y3QgbXdpZmlleF9kc190eF9iYV9zdHJlYW1fdGJsICpyeF9yZW9fdGJsID0gYnVmOworCWludCBjb3VudCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT50eF9iYV9zdHJlYW1fdGJsX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHR4X2JhX3Rzcl90YmwsICZwcml2LT50eF9iYV9zdHJlYW1fdGJsX3B0ciwgbGlzdCkgeworCQlyeF9yZW9fdGJsLT50aWQgPSAodTE2KSB0eF9iYV90c3JfdGJsLT50aWQ7CisJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiZGF0YTogJXMgdGlkPSVkXG4iLAorCQkJCQkJX19mdW5jX18sIHJ4X3Jlb190YmwtPnRpZCk7CisJCW1lbWNweShyeF9yZW9fdGJsLT5yYSwgdHhfYmFfdHNyX3RibC0+cmEsIEVUSF9BTEVOKTsKKwkJcnhfcmVvX3RibCsrOworCQljb3VudCsrOworCQlpZiAoY291bnQgPj0gTVdJRklFWF9NQVhfVFhfQkFTVFJFQU1fU1VQUE9SVEVEKQorCQkJYnJlYWs7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X2JhX3N0cmVhbV90YmxfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGNvdW50OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC8xMW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvMTFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQzOTBhMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvMTFuLmgKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiBNYXJ2ZWxsIFdpcmVsZXNzIExBTiBkZXZpY2UgZHJpdmVyOiA4MDIuMTFuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRlcm5hdGlvbmFsCisgKiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKyAqICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgdXNlLCByZWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgaW4KKyAqIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UsIGEgY29weSBvZiB3aGljaAorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0Egb3Igb24gdGhlCisgKiB3b3JsZHdpZGUgd2ViIGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQuCisgKgorICogVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4gIFRoZSBMaWNlbnNlIHByb3ZpZGVzIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dAorICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLgorICovCisKKyNpZm5kZWYgX01XSUZJRVhfMTFOX0hfCisjZGVmaW5lIF9NV0lGSUVYXzExTl9IXworCisjaW5jbHVkZSAiMTFuX2FnZ3IuaCIKKyNpbmNsdWRlICIxMW5fcnhyZW9yZGVyLmgiCisjaW5jbHVkZSAid21tLmgiCisKK2ludCBtd2lmaWV4X3JldF8xMW5fZGVsYmEoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKnJlc3ApOworaW50IG13aWZpZXhfcmV0XzExbl9hZGRiYV9yZXEoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwKTsKK2ludCBtd2lmaWV4X3JldF8xMW5fY2ZnKHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwLAorCQkJdm9pZCAqZGF0YV9idWYpOworaW50IG13aWZpZXhfY21kXzExbl9jZmcoc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwKKwkJCXUxNiBjbWRfYWN0aW9uLCB2b2lkICpkYXRhX2J1Zik7CisKK2ludCBtd2lmaWV4X2NtZF9hcHBlbmRfMTFuX3RsdihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICAgIHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjLAorCQkJICAgICAgIHU4ICoqYnVmZmVyKTsKK3ZvaWQgbXdpZmlleF9jZmdfdHhfYnVmKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQlzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYyk7Cit2b2lkIG13aWZpZXhfZmlsbF9jYXBfaW5mbyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICosIHU4IHJhZGlvX3R5cGUsCisJCQkgICBzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGNhcCAqKTsKK2ludCBtd2lmaWV4X3NldF9nZXRfMTFuX2h0Y2FwX2NmZyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCSAgdTE2IGFjdGlvbiwgaW50ICpodGNhcF9jZmcpOwordm9pZCBtd2lmaWV4XzExbl9kZWxldGVfdHhfYmFfc3RyZWFtX3RibF9lbnRyeShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCQkgICAgIHN0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwKKwkJCQkJICAgICAqdHhfdGJsKTsKK3ZvaWQgbXdpZmlleF8xMW5fZGVsZXRlX2FsbF90eF9iYV9zdHJlYW1fdGJsKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpOworc3RydWN0IG13aWZpZXhfdHhfYmFfc3RyZWFtX3RibCAqbXdpZmlleF8xMW5fZ2V0X3R4X2JhX3N0cmVhbV90Ymwoc3RydWN0CisJCQkJCQkJICAgICBtd2lmaWV4X3ByaXZhdGUKKwkJCQkJCQkgICAgICpwcml2LCBpbnQgdGlkLAorCQkJCQkJCSAgICAgdTggKnJhKTsKK3ZvaWQgbXdpZmlleF8xMW5fY3JlYXRlX3R4X2JhX3N0cmVhbV90Ymwoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggKnJhLAorCQkJCSAgICAgICBpbnQgdGlkLAorCQkJCSAgICAgICBlbnVtIG13aWZpZXhfYmFfc3RhdHVzIGJhX3N0YXR1cyk7CitpbnQgbXdpZmlleF9zZW5kX2FkZGJhKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIGludCB0aWQsIHU4ICpwZWVyX21hYyk7CitpbnQgbXdpZmlleF9zZW5kX2RlbGJhKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIGludCB0aWQsIHU4ICpwZWVyX21hYywKKwkJICAgICAgIGludCBpbml0aWF0b3IpOwordm9pZCBtd2lmaWV4XzExbl9kZWxldGVfYmFfc3RyZWFtKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHU4ICpkZWxfYmEpOworaW50IG13aWZpZXhfZ2V0X3J4X3Jlb3JkZXJfdGJsKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgbXdpZmlleF9kc19yeF9yZW9yZGVyX3RibCAqYnVmKTsKK2ludCBtd2lmaWV4X2dldF90eF9iYV9zdHJlYW1fdGJsKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgICAgc3RydWN0IG13aWZpZXhfZHNfdHhfYmFfc3RyZWFtX3RibCAqYnVmKTsKK2ludCBtd2lmaWV4X3JldF9hbXNkdV9hZ2dyX2N0cmwoc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKnJlc3AsCisJCQkJdm9pZCAqZGF0YV9idWYpOworaW50IG13aWZpZXhfY21kX3JlY2ZnX3R4X2J1ZihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLAorCQkJICAgICBpbnQgY21kX2FjdGlvbiwgdm9pZCAqZGF0YV9idWYpOworaW50IG13aWZpZXhfY21kX2Ftc2R1X2FnZ3JfY3RybChzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLAorCQkJCWludCBjbWRfYWN0aW9uLCB2b2lkICpkYXRhX2J1Zik7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIEFNUERVIGlzIGFsbG93ZWQgb3Igbm90IGZvciBhIHBhcnRpY3VsYXIgVElELgorICovCitzdGF0aWMgaW5saW5lIHU4Cittd2lmaWV4X2lzX2FtcGR1X2FsbG93ZWQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgaW50IHRpZCkKK3sKKwlyZXR1cm4gKChwcml2LT5hZ2dyX3ByaW9fdGJsW3RpZF0uYW1wZHVfYXAgIT0gQkFfU1RSRUFNX05PVF9BTExPV0VEKQorCQk/IHRydWUgOiBmYWxzZSk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIEFNU0RVIGlzIGFsbG93ZWQgb3Igbm90IGZvciBhIHBhcnRpY3VsYXIgVElELgorICovCitzdGF0aWMgaW5saW5lIHU4Cittd2lmaWV4X2lzX2Ftc2R1X2FsbG93ZWQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgaW50IHRpZCkKK3sKKwlyZXR1cm4gKCgocHJpdi0+YWdncl9wcmlvX3RibFt0aWRdLmFtc2R1ICE9IEJBX1NUUkVBTV9OT1RfQUxMT1dFRCkKKwkJCSYmICgocHJpdi0+aXNfZGF0YV9yYXRlX2F1dG8pCisJCQl8fCAhKChwcml2LT5iaXRtYXBfcmF0ZXNbMl0pICYgMHgwMykpKQorCQk/IHRydWUgOiBmYWxzZSk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIGEgc3BhY2UgaXMgYXZhaWxhYmxlIGZvciBuZXcgQkEgc3RyZWFtIG9yIG5vdC4KKyAqLworc3RhdGljIGlubGluZSB1OCBtd2lmaWV4X3NwYWNlX2F2YWlsX2Zvcl9uZXdfYmFfc3RyZWFtKAorCQkJCQlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXY7CisJdTggaTsKKwl1MzIgYmFfc3RyZWFtX251bSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+cHJpdl9udW07IGkrKykgeworCQlwcml2ID0gYWRhcHRlci0+cHJpdltpXTsKKwkJaWYgKHByaXYpCisJCQliYV9zdHJlYW1fbnVtICs9IG13aWZpZXhfd21tX2xpc3RfbGVuKAorCQkJCQkJKHN0cnVjdCBsaXN0X2hlYWQgKikKKwkJCQkJCSZwcml2LT50eF9iYV9zdHJlYW1fdGJsX3B0cik7CisJfQorCisJcmV0dXJuICgoYmFfc3RyZWFtX251bSA8CisJCSBNV0lGSUVYX01BWF9UWF9CQVNUUkVBTV9TVVBQT1JURUQpID8gdHJ1ZSA6IGZhbHNlKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZmluZHMgdGhlIGNvcnJlY3QgVHggQkEgc3RyZWFtIHRvIGRlbGV0ZS4KKyAqCisgKiBVcG9uIHN1Y2Nlc3NmdWxseSBsb2NhdGluZywgYm90aCB0aGUgVElEIGFuZCB0aGUgUkEgYXJlIHJldHVybmVkLgorICovCitzdGF0aWMgaW5saW5lIHU4Cittd2lmaWV4X2ZpbmRfc3RyZWFtX3RvX2RlbGV0ZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBpbnQgcHRyX3RpZCwKKwkJCSAgICAgIGludCAqcHRpZCwgdTggKnJhKQoreworCWludCB0aWQ7CisJdTggcmV0ID0gZmFsc2U7CisJc3RydWN0IG13aWZpZXhfdHhfYmFfc3RyZWFtX3RibCAqdHhfdGJsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwl0aWQgPSBwcml2LT5hZ2dyX3ByaW9fdGJsW3B0cl90aWRdLmFtcGR1X3VzZXI7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhfYmFfc3RyZWFtX3RibF9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0eF90YmwsICZwcml2LT50eF9iYV9zdHJlYW1fdGJsX3B0ciwgbGlzdCkgeworCQlpZiAodGlkID4gcHJpdi0+YWdncl9wcmlvX3RibFt0eF90YmwtPnRpZF0uYW1wZHVfdXNlcikgeworCQkJdGlkID0gcHJpdi0+YWdncl9wcmlvX3RibFt0eF90YmwtPnRpZF0uYW1wZHVfdXNlcjsKKwkJCSpwdGlkID0gdHhfdGJsLT50aWQ7CisJCQltZW1jcHkocmEsIHR4X3RibC0+cmEsIEVUSF9BTEVOKTsKKwkJCXJldCA9IHRydWU7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfYmFfc3RyZWFtX3RibF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciBCQSBzdHJlYW0gaXMgc2V0IHVwIG9yIG5vdC4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK213aWZpZXhfaXNfYmFfc3RyZWFtX3NldHVwKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgIHN0cnVjdCBtd2lmaWV4X3JhX2xpc3RfdGJsICpwdHIsIGludCB0aWQpCit7CisJc3RydWN0IG13aWZpZXhfdHhfYmFfc3RyZWFtX3RibCAqdHhfdGJsOworCisJdHhfdGJsID0gbXdpZmlleF8xMW5fZ2V0X3R4X2JhX3N0cmVhbV90YmwocHJpdiwgdGlkLCBwdHItPnJhKTsKKwlpZiAodHhfdGJsICYmIElTX0JBU1RSRUFNX1NFVFVQKHR4X3RibCkpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorI2VuZGlmIC8qICFfTVdJRklFWF8xMU5fSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvMTFuX2FnZ3IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvMTFuX2FnZ3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2Q1ZTA4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC8xMW5fYWdnci5jCkBAIC0wLDAgKzEsMjk4IEBACisvKgorICogTWFydmVsbCBXaXJlbGVzcyBMQU4gZGV2aWNlIGRyaXZlcjogODAyLjExbiBBZ2dyZWdhdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbAorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluCisgKiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gKKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBIG9yIG9uIHRoZQorICogd29ybGR3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0LgorICoKKyAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQKKyAqIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4KKyAqLworCisjaW5jbHVkZSAiZGVjbC5oIgorI2luY2x1ZGUgImlvY3RsLmgiCisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgImZ3LmgiCisjaW5jbHVkZSAibWFpbi5oIgorI2luY2x1ZGUgIndtbS5oIgorI2luY2x1ZGUgIjExbi5oIgorI2luY2x1ZGUgIjExbl9hZ2dyLmgiCisKKy8qCisgKiBDcmVhdGVzIGFuIEFNU0RVIHN1YmZyYW1lIGZvciBhZ2dyZWdhdGlvbiBpbnRvIG9uZSBBTVNEVSBwYWNrZXQuCisgKgorICogVGhlIHJlc3VsdGFudCBBTVNEVSBzdWJmcmFtZSBmb3JtYXQgaXMgLQorICoKKyAqICstLS0tIH4gLS0tLS0rLS0tLSB+IC0tLS0tLSstLS0tIH4gLS0tLS0rLS0tLS0gfiAtLS0tLSstLS0tIH4gLS0tLS0rCisgKiB8ICAgICBEQSAgICAgfCAgICAgU0EgICAgICB8ICAgTGVuZ3RoICAgfCBTTkFQIGhlYWRlciB8ICAgTVNEVSAgICAgfAorICogfCBkYXRhWzAuLjVdIHwgZGF0YVs2Li4xMV0gfCAgICAgICAgICAgIHwgICAgICAgICAgICAgfCBkYXRhWzE0Li5dIHwKKyAqICstLS0tIH4gLS0tLS0rLS0tLSB+IC0tLS0tLSstLS0tIH4gLS0tLS0rLS0tLS0gfiAtLS0tLSstLS0tIH4gLS0tLS0rCisgKiA8LS02LWJ5dGVzLS0+IDwtLTYtYnl0ZXMtLT4gPC0tMi1ieXRlcy0tPjwtLTgtYnl0ZXMtLT4gPC0tbi1ieXRlcy0tPgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxzbyBjb21wdXRlcyB0aGUgYW1vdW50IG9mIHBhZGRpbmcgcmVxdWlyZWQgdG8gbWFrZSB0aGUKKyAqIGJ1ZmZlciBsZW5ndGggbXVsdGlwbGUgb2YgNCBieXRlcy4KKyAqCisgKiBEYXRhID0+IHxEQXxTQXxTTkFQLVRZUEV8Li4uLi4uLi4gICAgLnwKKyAqIE1TRFUgPT4gfERBfFNBfExlbmd0aHxTTkFQfC4uLi4uLiAgIC4ufAorICovCitzdGF0aWMgaW50Cittd2lmaWV4XzExbl9mb3JtX2Ftc2R1X3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2FnZ3IsCisJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NyYywgaW50ICpwYWQpCisKK3sKKwlpbnQgZHRfb2Zmc2V0OworCXN0cnVjdCByZmNfMTA0Ml9oZHIgc25hcCA9IHsKKwkJMHhhYSwJCS8qIExMQyBEU0FQICovCisJCTB4YWEsCQkvKiBMTEMgU1NBUCAqLworCQkweDAzLAkJLyogTExDIENUUkwgKi8KKwkJezB4MDAsIDB4MDAsIDB4MDB9LAkvKiBTTkFQIE9VSSAqLworCQkweDAwMDAJCS8qIFNOQVAgdHlwZSAqLworCQkJLyoKKwkJCSAqIFRoaXMgZmllbGQgd2lsbCBiZSBvdmVyd3JpdHRlbgorCQkJICogbGF0ZXIgd2l0aCBldGhlcnR5cGUKKwkJCSAqLworCX07CisJc3RydWN0IHR4X3BhY2tldF9oZHIgKnR4X2hlYWRlcjsKKworCXNrYl9wdXQoc2tiX2FnZ3IsIHNpemVvZigqdHhfaGVhZGVyKSk7CisKKwl0eF9oZWFkZXIgPSAoc3RydWN0IHR4X3BhY2tldF9oZHIgKikgc2tiX2FnZ3ItPmRhdGE7CisKKwkvKiBDb3B5IERBIGFuZCBTQSAqLworCWR0X29mZnNldCA9IDIgKiBFVEhfQUxFTjsKKwltZW1jcHkoJnR4X2hlYWRlci0+ZXRoODAzX2hkciwgc2tiX3NyYy0+ZGF0YSwgZHRfb2Zmc2V0KTsKKworCS8qIENvcHkgU05BUCBoZWFkZXIgKi8KKwlzbmFwLnNuYXBfdHlwZSA9ICoodTE2ICopICgodTggKilza2Jfc3JjLT5kYXRhICsgZHRfb2Zmc2V0KTsKKwlkdF9vZmZzZXQgKz0gc2l6ZW9mKHUxNik7CisKKwltZW1jcHkoJnR4X2hlYWRlci0+cmZjMTA0Ml9oZHIsICZzbmFwLCBzaXplb2Yoc3RydWN0IHJmY18xMDQyX2hkcikpOworCisJc2tiX3B1bGwoc2tiX3NyYywgZHRfb2Zmc2V0KTsKKworCS8qIFVwZGF0ZSBMZW5ndGggZmllbGQgKi8KKwl0eF9oZWFkZXItPmV0aDgwM19oZHIuaF9wcm90byA9IGh0b25zKHNrYl9zcmMtPmxlbiArIExMQ19TTkFQX0xFTik7CisKKwkvKiBBZGQgcGF5bG9hZCAqLworCXNrYl9wdXQoc2tiX2FnZ3IsIHNrYl9zcmMtPmxlbik7CisJbWVtY3B5KHNrYl9hZ2dyLT5kYXRhICsgc2l6ZW9mKCp0eF9oZWFkZXIpLCBza2Jfc3JjLT5kYXRhLAorCQkJCQkJCXNrYl9zcmMtPmxlbik7CisJKnBhZCA9ICgoKHNrYl9zcmMtPmxlbiArIExMQ19TTkFQX0xFTikgJiAzKSkgPyAoNCAtICgoKHNrYl9zcmMtPmxlbiArCisJCQkJCQkgICAgICBMTENfU05BUF9MRU4pKSAmIDMpKSA6IDA7CisJc2tiX3B1dChza2JfYWdnciwgKnBhZCk7CisKKwlyZXR1cm4gc2tiX2FnZ3ItPmxlbiArICpwYWQ7Cit9CisKKy8qCisgKiBBZGRzIFR4UEQgdG8gQU1TRFUgaGVhZGVyLgorICoKKyAqIEVhY2ggQU1TRFUgcGFja2V0IHdpbGwgY29udGFpbiBvbmUgVHhQRCBhdCB0aGUgYmVnaW5uaW5nLAorICogZm9sbG93ZWQgYnkgbXVsdGlwbGUgQU1TRFUgc3ViZnJhbWVzLgorICovCitzdGF0aWMgdm9pZAorbXdpZmlleF8xMW5fZm9ybV9hbXNkdV90eHBkKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgdHhwZCAqbG9jYWxfdHhfcGQ7CisKKwlza2JfcHVzaChza2IsIHNpemVvZigqbG9jYWxfdHhfcGQpKTsKKworCWxvY2FsX3R4X3BkID0gKHN0cnVjdCB0eHBkICopIHNrYi0+ZGF0YTsKKwltZW1zZXQobG9jYWxfdHhfcGQsIDAsIHNpemVvZihzdHJ1Y3QgdHhwZCkpOworCisJLyogT3JpZ2luYWwgcHJpb3JpdHkgaGFzIGJlZW4gb3ZlcndyaXR0ZW4gKi8KKwlsb2NhbF90eF9wZC0+cHJpb3JpdHkgPSAodTgpIHNrYi0+cHJpb3JpdHk7CisJbG9jYWxfdHhfcGQtPnBrdF9kZWxheV8ybXMgPQorCQltd2lmaWV4X3dtbV9jb21wdXRlX2Rydl9wa3RfZGVsYXkocHJpdiwgc2tiKTsKKwlsb2NhbF90eF9wZC0+YnNzX251bSA9IHByaXYtPmJzc19udW07CisJbG9jYWxfdHhfcGQtPmJzc190eXBlID0gcHJpdi0+YnNzX3R5cGU7CisJLyogQWx3YXlzIHplcm8gYXMgdGhlIGRhdGEgaXMgZm9sbG93ZWQgYnkgc3RydWN0IHR4cGQgKi8KKwlsb2NhbF90eF9wZC0+dHhfcGt0X29mZnNldCA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgdHhwZCkpOworCWxvY2FsX3R4X3BkLT50eF9wa3RfdHlwZSA9IGNwdV90b19sZTE2KFBLVF9UWVBFX0FNU0RVKTsKKwlsb2NhbF90eF9wZC0+dHhfcGt0X2xlbmd0aCA9IGNwdV90b19sZTE2KHNrYi0+bGVuIC0KKwkJCXNpemVvZigqbG9jYWxfdHhfcGQpKTsKKworCWlmIChsb2NhbF90eF9wZC0+dHhfY29udHJvbCA9PSAwKQorCQkvKiBUeEN0cmwgc2V0IGJ5IHVzZXIgb3IgZGVmYXVsdCAqLworCQlsb2NhbF90eF9wZC0+dHhfY29udHJvbCA9IGNwdV90b19sZTMyKHByaXYtPnBrdF90eF9jdHJsKTsKKworCWlmICgoR0VUX0JTU19ST0xFKHByaXYpID09IE1XSUZJRVhfQlNTX1JPTEVfU1RBKSAmJgorCQkocHJpdi0+YWRhcHRlci0+cHBzX3VhcHNkX21vZGUpKSB7CisJCWlmICh0cnVlID09IG13aWZpZXhfY2hlY2tfbGFzdF9wYWNrZXRfaW5kaWNhdGlvbihwcml2KSkgeworCQkJcHJpdi0+YWRhcHRlci0+dHhfbG9ja19mbGFnID0gdHJ1ZTsKKwkJCWxvY2FsX3R4X3BkLT5mbGFncyA9CisJCQkJTVdJRklFWF9UeFBEX1BPV0VSX01HTVRfTEFTVF9QQUNLRVQ7CisJCX0KKwl9Cit9CisKKy8qCisgKiBDcmVhdGUgYWdncmVnYXRlZCBwYWNrZXQuCisgKgorICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGFuIGFnZ3JlZ2F0ZWQgTVNEVSBwYWNrZXQsIGJ5IGNvbWJpbmluZyBidWZmZXJzCisgKiBmcm9tIHRoZSBSQSBsaXN0LiBFYWNoIGluZGl2aWR1YWwgYnVmZmVyIGlzIGVuY2Fwc3VsYXRlZCBhcyBhbiBBTVNEVQorICogc3ViZnJhbWUgYW5kIGFsbCBzdWNoIHN1YmZyYW1lcyBhcmUgY29uY2F0ZW5hdGVkIHRvZ2V0aGVyIHRvIGZvcm0gdGhlCisgKiBBTVNEVSBwYWNrZXQuCisgKgorICogQSBUeFBEIGlzIGFsc28gYWRkZWQgdG8gdGhlIGZyb250IG9mIHRoZSByZXN1bHRhbnQgQU1TRFUgcGFja2V0cyBmb3IKKyAqIHRyYW5zbWlzc2lvbi4gVGhlIHJlc3VsdGFudCBwYWNrZXRzIGZvcm1hdCBpcyAtCisgKgorICogKy0tLS0gfiAtLS0tKy0tLS0tLSB+IC0tLS0tLSstLS0tLS0gfiAtLS0tLS0rLS4uLSstLS0tLS0gfiAtLS0tLS0rCisgKiB8ICAgIFR4UEQgICB8QU1TRFUgc3ViLWZyYW1lfEFNU0RVIHN1Yi1mcmFtZXwgLi4gfEFNU0RVIHN1Yi1mcmFtZXwKKyAqIHwgICAgICAgICAgIHwgICAgICAgMSAgICAgICB8ICAgICAgIDIgICAgICAgfCAuLiB8ICAgICAgIG4gICAgICAgfAorICogKy0tLS0gfiAtLS0tKy0tLS0tLSB+IC0tLS0tLSstLS0tLS0gfiAtLS0tLS0rIC4uICstLS0tLS0gfiAtLS0tLS0rCisgKi8KK2ludAorbXdpZmlleF8xMW5fYWdncmVnYXRlX3BrdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICBzdHJ1Y3QgbXdpZmlleF9yYV9saXN0X3RibCAqcHJhX2xpc3QsIGludCBoZWFkcm9vbSwKKwkJCSAgaW50IHB0cmluZGV4LCB1bnNpZ25lZCBsb25nIHJhX2xpc3RfZmxhZ3MpCisJCQkgIF9fcmVsZWFzZXMoJnByaXYtPndtbS5yYV9saXN0X3NwaW5sb2NrKQoreworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCBza19idWZmICpza2JfYWdnciwgKnNrYl9zcmM7CisJc3RydWN0IG13aWZpZXhfdHhpbmZvICp0eF9pbmZvX2FnZ3IsICp0eF9pbmZvX3NyYzsKKwlpbnQgcGFkID0gMCwgcmV0OworCXN0cnVjdCBtd2lmaWV4X3R4X3BhcmFtIHR4X3BhcmFtOworCXN0cnVjdCB0eHBkICpwdHhfcGQgPSBOVUxMOworCisJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmcHJhX2xpc3QtPnNrYl9oZWFkKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT53bW0ucmFfbGlzdF9zcGlubG9jaywKKwkJCQkgICAgICAgcmFfbGlzdF9mbGFncyk7CisJCXJldHVybiAwOworCX0KKwlza2Jfc3JjID0gc2tiX3BlZWsoJnByYV9saXN0LT5za2JfaGVhZCk7CisJdHhfaW5mb19zcmMgPSBNV0lGSUVYX1NLQl9UWENCKHNrYl9zcmMpOworCXNrYl9hZ2dyID0gZGV2X2FsbG9jX3NrYihhZGFwdGVyLT50eF9idWZfc2l6ZSk7CisJaWYgKCFza2JfYWdncikgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIiVzOiBhbGxvYyBza2JfYWdnclxuIiwgX19mdW5jX18pOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT53bW0ucmFfbGlzdF9zcGlubG9jaywKKwkJCQkgICAgICAgcmFfbGlzdF9mbGFncyk7CisJCXJldHVybiAtMTsKKwl9CisJc2tiX3Jlc2VydmUoc2tiX2FnZ3IsIGhlYWRyb29tICsgc2l6ZW9mKHN0cnVjdCB0eHBkKSk7CisJdHhfaW5mb19hZ2dyID0gIE1XSUZJRVhfU0tCX1RYQ0Ioc2tiX2FnZ3IpOworCisJdHhfaW5mb19hZ2dyLT5ic3NfaW5kZXggPSB0eF9pbmZvX3NyYy0+YnNzX2luZGV4OworCXNrYl9hZ2dyLT5wcmlvcml0eSA9IHNrYl9zcmMtPnByaW9yaXR5OworCisJd2hpbGUgKHNrYl9zcmMgJiYgKChza2JfaGVhZHJvb20oc2tiX2FnZ3IpICsgc2tiX3NyYy0+bGVuCisJCQkJCSsgTExDX1NOQVBfTEVOKQorCQkJCTw9IGFkYXB0ZXItPnR4X2J1Zl9zaXplKSkgeworCisJCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZwcmFfbGlzdC0+c2tiX2hlYWQpKQorCQkJc2tiX3NyYyA9IHNrYl9kZXF1ZXVlKCZwcmFfbGlzdC0+c2tiX2hlYWQpOworCQllbHNlCisJCQlza2Jfc3JjID0gTlVMTDsKKworCQlpZiAoc2tiX3NyYykKKwkJCXByYV9saXN0LT50b3RhbF9wa3RzX3NpemUgLT0gc2tiX3NyYy0+bGVuOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPndtbS5yYV9saXN0X3NwaW5sb2NrLAorCQkJCSAgICAgICByYV9saXN0X2ZsYWdzKTsKKwkJbXdpZmlleF8xMW5fZm9ybV9hbXNkdV9wa3Qoc2tiX2FnZ3IsIHNrYl9zcmMsICZwYWQpOworCisJCW13aWZpZXhfd3JpdGVfZGF0YV9jb21wbGV0ZShhZGFwdGVyLCBza2Jfc3JjLCAwKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+d21tLnJhX2xpc3Rfc3BpbmxvY2ssIHJhX2xpc3RfZmxhZ3MpOworCisJCWlmICghbXdpZmlleF9pc19yYWxpc3RfdmFsaWQocHJpdiwgcHJhX2xpc3QsIHB0cmluZGV4KSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+d21tLnJhX2xpc3Rfc3BpbmxvY2ssCisJCQkJCSAgICAgICByYV9saXN0X2ZsYWdzKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZwcmFfbGlzdC0+c2tiX2hlYWQpKQorCQkJc2tiX3NyYyA9IHNrYl9wZWVrKCZwcmFfbGlzdC0+c2tiX2hlYWQpOworCQllbHNlCisJCQlza2Jfc3JjID0gTlVMTDsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT53bW0ucmFfbGlzdF9zcGlubG9jaywgcmFfbGlzdF9mbGFncyk7CisKKwkvKiBMYXN0IEFNU0RVIHBhY2tldCBkb2VzIG5vdCBuZWVkIHBhZGRpbmcgKi8KKwlza2JfdHJpbShza2JfYWdnciwgc2tiX2FnZ3ItPmxlbiAtIHBhZCk7CisKKwkvKiBGb3JtIEFNU0RVICovCisJbXdpZmlleF8xMW5fZm9ybV9hbXNkdV90eHBkKHByaXYsIHNrYl9hZ2dyKTsKKwlpZiAoR0VUX0JTU19ST0xFKHByaXYpID09IE1XSUZJRVhfQlNTX1JPTEVfU1RBKQorCQlwdHhfcGQgPSAoc3RydWN0IHR4cGQgKilza2JfYWdnci0+ZGF0YTsKKworCXNrYl9wdXNoKHNrYl9hZ2dyLCBoZWFkcm9vbSk7CisKKwl0eF9wYXJhbS5uZXh0X3BrdF9sZW4gPSAoKHByYV9saXN0LT50b3RhbF9wa3RzX3NpemUpID8KKwkJCQkgKCgocHJhX2xpc3QtPnRvdGFsX3BrdHNfc2l6ZSkgPgorCQkJCSAgIGFkYXB0ZXItPnR4X2J1Zl9zaXplKSA/IGFkYXB0ZXItPgorCQkJCSAgdHhfYnVmX3NpemUgOiBwcmFfbGlzdC0+dG90YWxfcGt0c19zaXplICsKKwkJCQkgIExMQ19TTkFQX0xFTiArIHNpemVvZihzdHJ1Y3QgdHhwZCkpIDogMCk7CisJcmV0ID0gYWRhcHRlci0+aWZfb3BzLmhvc3RfdG9fY2FyZChhZGFwdGVyLCBNV0lGSUVYX1RZUEVfREFUQSwKKwkJCQkJICAgICBza2JfYWdnci0+ZGF0YSwKKwkJCQkJICAgICBza2JfYWdnci0+bGVuLCAmdHhfcGFyYW0pOworCXN3aXRjaCAocmV0KSB7CisJY2FzZSAtRUJVU1k6CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT53bW0ucmFfbGlzdF9zcGlubG9jaywgcmFfbGlzdF9mbGFncyk7CisJCWlmICghbXdpZmlleF9pc19yYWxpc3RfdmFsaWQocHJpdiwgcHJhX2xpc3QsIHB0cmluZGV4KSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+d21tLnJhX2xpc3Rfc3BpbmxvY2ssCisJCQkJCSAgICAgICByYV9saXN0X2ZsYWdzKTsKKwkJCW13aWZpZXhfd3JpdGVfZGF0YV9jb21wbGV0ZShhZGFwdGVyLCBza2JfYWdnciwgLTEpOworCQkJcmV0dXJuIC0xOworCQl9CisJCWlmICgoR0VUX0JTU19ST0xFKHByaXYpID09IE1XSUZJRVhfQlNTX1JPTEVfU1RBKSAmJgorCQkJKGFkYXB0ZXItPnBwc191YXBzZF9tb2RlKSAmJgorCQkJKGFkYXB0ZXItPnR4X2xvY2tfZmxhZykpIHsKKwkJCQlwcml2LT5hZGFwdGVyLT50eF9sb2NrX2ZsYWcgPSBmYWxzZTsKKwkJCQlpZiAocHR4X3BkKQorCQkJCQlwdHhfcGQtPmZsYWdzID0gMDsKKwkJfQorCisJCXNrYl9xdWV1ZV90YWlsKCZwcmFfbGlzdC0+c2tiX2hlYWQsIHNrYl9hZ2dyKTsKKworCQlwcmFfbGlzdC0+dG90YWxfcGt0c19zaXplICs9IHNrYl9hZ2dyLT5sZW47CisKKwkJdHhfaW5mb19hZ2dyLT5mbGFncyB8PSBNV0lGSUVYX0JVRl9GTEFHX1JFUVVFVUVEX1BLVDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+d21tLnJhX2xpc3Rfc3BpbmxvY2ssCisJCQkJICAgICAgIHJhX2xpc3RfZmxhZ3MpOworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImRhdGE6IC1FQlVTWSBpcyByZXR1cm5lZFxuIik7CisJCWJyZWFrOworCWNhc2UgLTE6CisJCWFkYXB0ZXItPmRhdGFfc2VudCA9IGZhbHNlOworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIiVzOiBob3N0X3RvX2NhcmQgZmFpbGVkOiAlI3hcbiIsCisJCQkJCQlfX2Z1bmNfXywgcmV0KTsKKwkJYWRhcHRlci0+ZGJnLm51bV90eF9ob3N0X3RvX2NhcmRfZmFpbHVyZSsrOworCQltd2lmaWV4X3dyaXRlX2RhdGFfY29tcGxldGUoYWRhcHRlciwgc2tiX2FnZ3IsIHJldCk7CisJCXJldHVybiAwOworCWNhc2UgLUVJTlBST0dSRVNTOgorCQlhZGFwdGVyLT5kYXRhX3NlbnQgPSBmYWxzZTsKKwkJYnJlYWs7CisJY2FzZSAwOgorCQltd2lmaWV4X3dyaXRlX2RhdGFfY29tcGxldGUoYWRhcHRlciwgc2tiX2FnZ3IsIHJldCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlpZiAocmV0ICE9IC1FQlVTWSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+d21tLnJhX2xpc3Rfc3BpbmxvY2ssIHJhX2xpc3RfZmxhZ3MpOworCQlpZiAobXdpZmlleF9pc19yYWxpc3RfdmFsaWQocHJpdiwgcHJhX2xpc3QsIHB0cmluZGV4KSkgeworCQkJcHJpdi0+d21tLnBhY2tldHNfb3V0W3B0cmluZGV4XSsrOworCQkJcHJpdi0+d21tLnRpZF90YmxfcHRyW3B0cmluZGV4XS5yYV9saXN0X2N1cnIgPSBwcmFfbGlzdDsKKwkJfQorCQkvKiBOb3cgYnNzX3ByaW9fY3VyIHBvaW50ZXIgcG9pbnRzIHRvIG5leHQgbm9kZSAqLworCQlhZGFwdGVyLT5ic3NfcHJpb190YmxbcHJpdi0+YnNzX3ByaW9yaXR5XS5ic3NfcHJpb19jdXIgPQorCQkJbGlzdF9maXJzdF9lbnRyeSgKKwkJCQkmYWRhcHRlci0+YnNzX3ByaW9fdGJsW3ByaXYtPmJzc19wcmlvcml0eV0KKwkJCQkuYnNzX3ByaW9fY3VyLT5saXN0LAorCQkJCXN0cnVjdCBtd2lmaWV4X2Jzc19wcmlvX25vZGUsIGxpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT53bW0ucmFfbGlzdF9zcGlubG9jaywKKwkJCQkgICAgICAgcmFfbGlzdF9mbGFncyk7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4LzExbl9hZ2dyLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4LzExbl9hZ2dyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM2ZGNhNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvMTFuX2FnZ3IuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogTWFydmVsbCBXaXJlbGVzcyBMQU4gZGV2aWNlIGRyaXZlcjogODAyLjExbiBBZ2dyZWdhdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbAorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluCisgKiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gKKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBIG9yIG9uIHRoZQorICogd29ybGR3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0LgorICoKKyAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQKKyAqIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4KKyAqLworCisjaWZuZGVmIF9NV0lGSUVYXzExTl9BR0dSX0hfCisjZGVmaW5lIF9NV0lGSUVYXzExTl9BR0dSX0hfCisKKyNkZWZpbmUgUEtUX1RZUEVfQU1TRFUJMHhFNgorCitpbnQgbXdpZmlleF8xMW5fZGVhZ2dyZWdhdGVfcGt0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYik7CitpbnQgbXdpZmlleF8xMW5fYWdncmVnYXRlX3BrdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICAgc3RydWN0IG13aWZpZXhfcmFfbGlzdF90YmwgKnB0ciwgaW50IGhlYWRyb29tLAorCQkJICAgICAgaW50IHB0cl9pbmRleCwgdW5zaWduZWQgbG9uZyBmbGFncykKKwkJCSAgICAgIF9fcmVsZWFzZXMoJnByaXYtPndtbS5yYV9saXN0X3NwaW5sb2NrKTsKKworI2VuZGlmIC8qICFfTVdJRklFWF8xMU5fQUdHUl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4LzExbl9yeHJlb3JkZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWRmZGMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMKQEAgLTAsMCArMSw2MTYgQEAKKy8qCisgKiBNYXJ2ZWxsIFdpcmVsZXNzIExBTiBkZXZpY2UgZHJpdmVyOiA4MDIuMTFuIFJYIFJlLW9yZGVyaW5nCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRlcm5hdGlvbmFsCisgKiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKyAqICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgdXNlLCByZWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgaW4KKyAqIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UsIGEgY29weSBvZiB3aGljaAorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0Egb3Igb24gdGhlCisgKiB3b3JsZHdpZGUgd2ViIGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQuCisgKgorICogVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4gIFRoZSBMaWNlbnNlIHByb3ZpZGVzIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dAorICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLgorICovCisKKyNpbmNsdWRlICJkZWNsLmgiCisjaW5jbHVkZSAiaW9jdGwuaCIKKyNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAiZncuaCIKKyNpbmNsdWRlICJtYWluLmgiCisjaW5jbHVkZSAid21tLmgiCisjaW5jbHVkZSAiMTFuLmgiCisjaW5jbHVkZSAiMTFuX3J4cmVvcmRlci5oIgorCisvKgorICogVGhpcyBmdW5jdGlvbiBkaXNwYXRjaGVzIGFsbCBwYWNrZXRzIGluIHRoZSBSeCByZW9yZGVyIHRhYmxlLgorICoKKyAqIFRoZXJlIGNvdWxkIGJlIGhvbGVzIGluIHRoZSBidWZmZXIsIHdoaWNoIGFyZSBza2lwcGVkIGJ5IHRoZSBmdW5jdGlvbi4KKyAqIFNpbmNlIHRoZSBidWZmZXIgaXMgbGluZWFyLCB0aGUgZnVuY3Rpb24gdXNlcyByb3RhdGlvbiB0byBzaW11bGF0ZQorICogY2lyY3VsYXIgYnVmZmVyLgorICovCitzdGF0aWMgaW50Cittd2lmaWV4XzExbl9kaXNwYXRjaF9wa3RfdW50aWxfc3RhcnRfd2luKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJCSBzdHJ1Y3QgbXdpZmlleF9yeF9yZW9yZGVyX3RibAorCQkJCQkgKnJ4X3Jlb3JfdGJsX3B0ciwgaW50IHN0YXJ0X3dpbikKK3sKKwlpbnQgbm9fcGt0X3RvX3NlbmQsIGk7CisJdm9pZCAqcnhfdG1wX3B0cjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbm9fcGt0X3RvX3NlbmQgPSAoc3RhcnRfd2luID4gcnhfcmVvcl90YmxfcHRyLT5zdGFydF93aW4pID8KKwkJbWluKChzdGFydF93aW4gLSByeF9yZW9yX3RibF9wdHItPnN0YXJ0X3dpbiksCisJCSAgICByeF9yZW9yX3RibF9wdHItPndpbl9zaXplKSA6IHJ4X3Jlb3JfdGJsX3B0ci0+d2luX3NpemU7CisKKwlmb3IgKGkgPSAwOyBpIDwgbm9fcGt0X3RvX3NlbmQ7ICsraSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhfcGt0X2xvY2ssIGZsYWdzKTsKKwkJcnhfdG1wX3B0ciA9IE5VTEw7CisJCWlmIChyeF9yZW9yX3RibF9wdHItPnJ4X3Jlb3JkZXJfcHRyW2ldKSB7CisJCQlyeF90bXBfcHRyID0gcnhfcmVvcl90YmxfcHRyLT5yeF9yZW9yZGVyX3B0cltpXTsKKwkJCXJ4X3Jlb3JfdGJsX3B0ci0+cnhfcmVvcmRlcl9wdHJbaV0gPSBOVUxMOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4X3BrdF9sb2NrLCBmbGFncyk7CisJCWlmIChyeF90bXBfcHRyKQorCQkJbXdpZmlleF9wcm9jZXNzX3J4X3BhY2tldChwcml2LT5hZGFwdGVyLCByeF90bXBfcHRyKTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhfcGt0X2xvY2ssIGZsYWdzKTsKKwkvKgorCSAqIFdlIGRvbid0IGhhdmUgYSBjaXJjdWxhciBidWZmZXIsIGhlbmNlIHVzZSByb3RhdGlvbiB0byBzaW11bGF0ZQorCSAqIGNpcmN1bGFyIGJ1ZmZlcgorCSAqLworCWZvciAoaSA9IDA7IGkgPCByeF9yZW9yX3RibF9wdHItPndpbl9zaXplIC0gbm9fcGt0X3RvX3NlbmQ7ICsraSkgeworCQlyeF9yZW9yX3RibF9wdHItPnJ4X3Jlb3JkZXJfcHRyW2ldID0KKwkJCXJ4X3Jlb3JfdGJsX3B0ci0+cnhfcmVvcmRlcl9wdHJbbm9fcGt0X3RvX3NlbmQgKyBpXTsKKwkJcnhfcmVvcl90YmxfcHRyLT5yeF9yZW9yZGVyX3B0cltub19wa3RfdG9fc2VuZCArIGldID0gTlVMTDsKKwl9CisKKwlyeF9yZW9yX3RibF9wdHItPnN0YXJ0X3dpbiA9IHN0YXJ0X3dpbjsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9wa3RfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGRpc3BhdGNoZXMgYWxsIHBhY2tldHMgaW4gdGhlIFJ4IHJlb3JkZXIgdGFibGUgdW50aWwKKyAqIGEgaG9sZSBpcyBmb3VuZC4KKyAqCisgKiBUaGUgc3RhcnQgd2luZG93IGlzIGFkanVzdGVkIGF1dG9tYXRpY2FsbHkgd2hlbiBhIGhvbGUgaXMgbG9jYXRlZC4KKyAqIFNpbmNlIHRoZSBidWZmZXIgaXMgbGluZWFyLCB0aGUgZnVuY3Rpb24gdXNlcyByb3RhdGlvbiB0byBzaW11bGF0ZQorICogY2lyY3VsYXIgYnVmZmVyLgorICovCitzdGF0aWMgaW50Cittd2lmaWV4XzExbl9zY2FuX2FuZF9kaXNwYXRjaChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICAgc3RydWN0IG13aWZpZXhfcnhfcmVvcmRlcl90YmwgKnJ4X3Jlb3JfdGJsX3B0cikKK3sKKwlpbnQgaSwgaiwgeGNoZzsKKwl2b2lkICpyeF90bXBfcHRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlmb3IgKGkgPSAwOyBpIDwgcnhfcmVvcl90YmxfcHRyLT53aW5fc2l6ZTsgKytpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeF9wa3RfbG9jaywgZmxhZ3MpOworCQlpZiAoIXJ4X3Jlb3JfdGJsX3B0ci0+cnhfcmVvcmRlcl9wdHJbaV0pIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4X3BrdF9sb2NrLCBmbGFncyk7CisJCQlicmVhazsKKwkJfQorCQlyeF90bXBfcHRyID0gcnhfcmVvcl90YmxfcHRyLT5yeF9yZW9yZGVyX3B0cltpXTsKKwkJcnhfcmVvcl90YmxfcHRyLT5yeF9yZW9yZGVyX3B0cltpXSA9IE5VTEw7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4X3BrdF9sb2NrLCBmbGFncyk7CisJCW13aWZpZXhfcHJvY2Vzc19yeF9wYWNrZXQocHJpdi0+YWRhcHRlciwgcnhfdG1wX3B0cik7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJ4X3BrdF9sb2NrLCBmbGFncyk7CisJLyoKKwkgKiBXZSBkb24ndCBoYXZlIGEgY2lyY3VsYXIgYnVmZmVyLCBoZW5jZSB1c2Ugcm90YXRpb24gdG8gc2ltdWxhdGUKKwkgKiBjaXJjdWxhciBidWZmZXIKKwkgKi8KKwlpZiAoaSA+IDApIHsKKwkJeGNoZyA9IHJ4X3Jlb3JfdGJsX3B0ci0+d2luX3NpemUgLSBpOworCQlmb3IgKGogPSAwOyBqIDwgeGNoZzsgKytqKSB7CisJCQlyeF9yZW9yX3RibF9wdHItPnJ4X3Jlb3JkZXJfcHRyW2pdID0KKwkJCQlyeF9yZW9yX3RibF9wdHItPnJ4X3Jlb3JkZXJfcHRyW2kgKyBqXTsKKwkJCXJ4X3Jlb3JfdGJsX3B0ci0+cnhfcmVvcmRlcl9wdHJbaSArIGpdID0gTlVMTDsKKwkJfQorCX0KKwlyeF9yZW9yX3RibF9wdHItPnN0YXJ0X3dpbiA9IChyeF9yZW9yX3RibF9wdHItPnN0YXJ0X3dpbiArIGkpCisJCSYoTUFYX1RJRF9WQUxVRSAtIDEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4X3BrdF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGRlbGV0ZXMgdGhlIFJ4IHJlb3JkZXIgdGFibGUgYW5kIGZyZWVzIHRoZSBtZW1vcnkuCisgKgorICogVGhlIGZ1bmN0aW9uIHN0b3BzIHRoZSBhc3NvY2lhdGVkIHRpbWVyIGFuZCBkaXNwYXRjaGVzIGFsbCB0aGUKKyAqIHBlbmRpbmcgcGFja2V0cyBpbiB0aGUgUnggcmVvcmRlciB0YWJsZSBiZWZvcmUgZGVsZXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCittd2lmaWV4XzExbl9kZWxldGVfcnhfcmVvcmRlcl90YmxfZW50cnkoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgICAgICAgc3RydWN0IG13aWZpZXhfcnhfcmVvcmRlcl90YmwKKwkJCQkgICAgICAgKnJ4X3Jlb3JfdGJsX3B0cikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFyeF9yZW9yX3RibF9wdHIpCisJCXJldHVybjsKKworCW13aWZpZXhfMTFuX2Rpc3BhdGNoX3BrdF91bnRpbF9zdGFydF93aW4ocHJpdiwgcnhfcmVvcl90YmxfcHRyLAorCQkJCQkJIChyeF9yZW9yX3RibF9wdHItPnN0YXJ0X3dpbiArCisJCQkJCQkgIHJ4X3Jlb3JfdGJsX3B0ci0+d2luX3NpemUpCisJCQkJCQkgJihNQVhfVElEX1ZBTFVFIC0gMSkpOworCisJZGVsX3RpbWVyKCZyeF9yZW9yX3RibF9wdHItPnRpbWVyX2NvbnRleHQudGltZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJ4X3Jlb3JkZXJfdGJsX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbCgmcnhfcmVvcl90YmxfcHRyLT5saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9yZW9yZGVyX3RibF9sb2NrLCBmbGFncyk7CisKKwlrZnJlZShyeF9yZW9yX3RibF9wdHItPnJ4X3Jlb3JkZXJfcHRyKTsKKwlrZnJlZShyeF9yZW9yX3RibF9wdHIpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBwb2ludGVyIHRvIGFuIGVudHJ5IGluIFJ4IHJlb3JkZXJpbmcKKyAqIHRhYmxlIHdoaWNoIG1hdGNoZXMgdGhlIGdpdmVuIFRBL1RJRCBwYWlyLgorICovCitzdGF0aWMgc3RydWN0IG13aWZpZXhfcnhfcmVvcmRlcl90YmwgKgorbXdpZmlleF8xMW5fZ2V0X3J4X3Jlb3JkZXJfdGJsKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIGludCB0aWQsIHU4ICp0YSkKK3sKKwlzdHJ1Y3QgbXdpZmlleF9yeF9yZW9yZGVyX3RibCAqcnhfcmVvcl90YmxfcHRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhfcmVvcmRlcl90YmxfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocnhfcmVvcl90YmxfcHRyLCAmcHJpdi0+cnhfcmVvcmRlcl90YmxfcHRyLCBsaXN0KSB7CisJCWlmICgoIW1lbWNtcChyeF9yZW9yX3RibF9wdHItPnRhLCB0YSwgRVRIX0FMRU4pKQorCQkgICAgJiYgKHJ4X3Jlb3JfdGJsX3B0ci0+dGlkID09IHRpZCkpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4X3Jlb3JkZXJfdGJsX2xvY2ssCisJCQkJCSAgICAgICBmbGFncyk7CisJCQlyZXR1cm4gcnhfcmVvcl90YmxfcHRyOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4X3Jlb3JkZXJfdGJsX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBOVUxMOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBmaW5kcyB0aGUgbGFzdCBzZXF1ZW5jZSBudW1iZXIgdXNlZCBpbiB0aGUgcGFja2V0cworICogYnVmZmVyZWQgaW4gUnggcmVvcmRlcmluZyB0YWJsZS4KKyAqLworc3RhdGljIGludAorbXdpZmlleF8xMW5fZmluZF9sYXN0X3NlcV9udW0oc3RydWN0IG13aWZpZXhfcnhfcmVvcmRlcl90YmwgKnJ4X3Jlb3JkZXJfdGJsX3B0cikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IChyeF9yZW9yZGVyX3RibF9wdHItPndpbl9zaXplIC0gMSk7IGkgPj0gMDsgLS1pKQorCQlpZiAocnhfcmVvcmRlcl90YmxfcHRyLT5yeF9yZW9yZGVyX3B0cltpXSkKKwkJCXJldHVybiBpOworCisJcmV0dXJuIC0xOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBmbHVzaGVzIGFsbCB0aGUgcGFja2V0cyBpbiBSeCByZW9yZGVyaW5nIHRhYmxlLgorICoKKyAqIFRoZSBmdW5jdGlvbiBjaGVja3MgaWYgYW55IHBhY2tldHMgYXJlIGN1cnJlbnRseSBidWZmZXJlZCBpbiB0aGUKKyAqIHRhYmxlIG9yIG5vdC4gSW4gY2FzZSB0aGVyZSBhcmUgcGFja2V0cyBhdmFpbGFibGUsIGl0IGRpc3BhdGNoZXMKKyAqIHRoZW0gYW5kIHRoZW4gZHVtcHMgdGhlIFJ4IHJlb3JkZXJpbmcgdGFibGUuCisgKi8KK3N0YXRpYyB2b2lkCittd2lmaWV4X2ZsdXNoX2RhdGEodW5zaWduZWQgbG9uZyBjb250ZXh0KQoreworCXN0cnVjdCByZW9yZGVyX3Rtcl9jbnh0ICpyZW9yZGVyX2NueHQgPQorCQkoc3RydWN0IHJlb3JkZXJfdG1yX2NueHQgKikgY29udGV4dDsKKwlpbnQgc3RhcnRfd2luOworCisJc3RhcnRfd2luID0gbXdpZmlleF8xMW5fZmluZF9sYXN0X3NlcV9udW0ocmVvcmRlcl9jbnh0LT5wdHIpOworCWlmIChzdGFydF93aW4gPj0gMCkgeworCQlkZXZfZGJnKHJlb3JkZXJfY254dC0+cHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJCSJpbmZvOiBmbHVzaCBkYXRhICVkXG4iLCBzdGFydF93aW4pOworCQltd2lmaWV4XzExbl9kaXNwYXRjaF9wa3RfdW50aWxfc3RhcnRfd2luKHJlb3JkZXJfY254dC0+cHJpdiwKKwkJCQlyZW9yZGVyX2NueHQtPnB0ciwKKwkJCQkoKHJlb3JkZXJfY254dC0+cHRyLT5zdGFydF93aW4gKworCQkJCSAgc3RhcnRfd2luICsgMSkgJiAoTUFYX1RJRF9WQUxVRSAtIDEpKSk7CisJfQorfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGFuIGVudHJ5IGluIFJ4IHJlb3JkZXJpbmcgdGFibGUgZm9yIHRoZQorICogZ2l2ZW4gVEEvVElELgorICoKKyAqIFRoZSBmdW5jdGlvbiBhbHNvIGluaXRpYWxpemVzIHRoZSBlbnRyeSB3aXRoIHNlcXVlbmNlIG51bWJlciwgd2luZG93CisgKiBzaXplIGFzIHdlbGwgYXMgaW5pdGlhbGl6ZXMgdGhlIHRpbWVyLgorICoKKyAqIElmIHRoZSByZWNlaXZlZCBUQS9USUQgcGFpciBpcyBhbHJlYWR5IHByZXNlbnQsIGFsbCB0aGUgcGFja2V0cyBhcmUKKyAqIGRpc3BhdGNoZWQgYW5kIHRoZSB3aW5kb3cgc2l6ZSBpcyBtb3ZlZCB1bnRpbCB0aGUgU1NOLgorICovCitzdGF0aWMgdm9pZAorbXdpZmlleF8xMW5fY3JlYXRlX3J4X3Jlb3JkZXJfdGJsKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHU4ICp0YSwKKwkJCQkgaW50IHRpZCwgaW50IHdpbl9zaXplLCBpbnQgc2VxX251bSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgbXdpZmlleF9yeF9yZW9yZGVyX3RibCAqcnhfcmVvcl90YmxfcHRyLCAqbmV3X25vZGU7CisJdTE2IGxhc3Rfc2VxID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyoKKwkgKiBJZiB3ZSBnZXQgYSBUSUQsIHRhIHBhaXIgd2hpY2ggaXMgYWxyZWFkeSBwcmVzZW50IGRpc3BhdGNoIGFsbCB0aGUKKwkgKiB0aGUgcGFja2V0cyBhbmQgbW92ZSB0aGUgd2luZG93IHNpemUgdW50aWwgdGhlIHNzbgorCSAqLworCXJ4X3Jlb3JfdGJsX3B0ciA9IG13aWZpZXhfMTFuX2dldF9yeF9yZW9yZGVyX3RibChwcml2LCB0aWQsIHRhKTsKKwlpZiAocnhfcmVvcl90YmxfcHRyKSB7CisJCW13aWZpZXhfMTFuX2Rpc3BhdGNoX3BrdF91bnRpbF9zdGFydF93aW4ocHJpdiwgcnhfcmVvcl90YmxfcHRyLAorCQkJCQkJCSBzZXFfbnVtKTsKKwkJcmV0dXJuOworCX0KKwkvKiBpZiAhcnhfcmVvcl90YmxfcHRyIHRoZW4gY3JlYXRlIG9uZSAqLworCW5ld19ub2RlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG13aWZpZXhfcnhfcmVvcmRlcl90YmwpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ld19ub2RlKSB7CisJCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LCAiJXM6IGZhaWxlZCB0byBhbGxvYyBuZXdfbm9kZVxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCUlOSVRfTElTVF9IRUFEKCZuZXdfbm9kZS0+bGlzdCk7CisJbmV3X25vZGUtPnRpZCA9IHRpZDsKKwltZW1jcHkobmV3X25vZGUtPnRhLCB0YSwgRVRIX0FMRU4pOworCW5ld19ub2RlLT5zdGFydF93aW4gPSBzZXFfbnVtOworCWlmIChtd2lmaWV4X3F1ZXVpbmdfcmFfYmFzZWQocHJpdikpCisJCS8qIFRPRE8gZm9yIGFkaG9jICovCisJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJImluZm86IEFESE9DOmxhc3Rfc2VxPSVkIHN0YXJ0X3dpbj0lZFxuIiwKKwkJCWxhc3Rfc2VxLCBuZXdfbm9kZS0+c3RhcnRfd2luKTsKKwllbHNlCisJCWxhc3Rfc2VxID0gcHJpdi0+cnhfc2VxW3RpZF07CisKKwlpZiAobGFzdF9zZXEgPj0gbmV3X25vZGUtPnN0YXJ0X3dpbikKKwkJbmV3X25vZGUtPnN0YXJ0X3dpbiA9IGxhc3Rfc2VxICsgMTsKKworCW5ld19ub2RlLT53aW5fc2l6ZSA9IHdpbl9zaXplOworCisJbmV3X25vZGUtPnJ4X3Jlb3JkZXJfcHRyID0ga3phbGxvYyhzaXplb2Yodm9pZCAqKSAqIHdpbl9zaXplLAorCQkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIW5ld19ub2RlLT5yeF9yZW9yZGVyX3B0cikgeworCQlrZnJlZSgodTggKikgbmV3X25vZGUpOworCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwKKwkJCSIlczogZmFpbGVkIHRvIGFsbG9jIHJlb3JkZXJfcHRyXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwluZXdfbm9kZS0+dGltZXJfY29udGV4dC5wdHIgPSBuZXdfbm9kZTsKKwluZXdfbm9kZS0+dGltZXJfY29udGV4dC5wcml2ID0gcHJpdjsKKworCWluaXRfdGltZXIoJm5ld19ub2RlLT50aW1lcl9jb250ZXh0LnRpbWVyKTsKKwluZXdfbm9kZS0+dGltZXJfY29udGV4dC50aW1lci5mdW5jdGlvbiA9IG13aWZpZXhfZmx1c2hfZGF0YTsKKwluZXdfbm9kZS0+dGltZXJfY29udGV4dC50aW1lci5kYXRhID0KKwkJCSh1bnNpZ25lZCBsb25nKSAmbmV3X25vZGUtPnRpbWVyX2NvbnRleHQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgd2luX3NpemU7ICsraSkKKwkJbmV3X25vZGUtPnJ4X3Jlb3JkZXJfcHRyW2ldID0gTlVMTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeF9yZW9yZGVyX3RibF9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmbmV3X25vZGUtPmxpc3QsICZwcml2LT5yeF9yZW9yZGVyX3RibF9wdHIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4X3Jlb3JkZXJfdGJsX2xvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgY29tbWFuZCBmb3IgYWRkaW5nIGEgQkEgcmVxdWVzdC4KKyAqCisgKiBQcmVwYXJhdGlvbiBpbmNsdWRlcyAtCisgKiAgICAgIC0gU2V0dGluZyBjb21tYW5kIElEIGFuZCBwcm9wZXIgc2l6ZQorICogICAgICAtIFNldHRpbmcgYWRkIEJBIHJlcXVlc3QgYnVmZmVyCisgKiAgICAgIC0gRW5zdXJpbmcgY29ycmVjdCBlbmRpYW4tbmVzcworICovCitpbnQgbXdpZmlleF9jbWRfMTFuX2FkZGJhX3JlcShzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLCB2b2lkICpkYXRhX2J1ZikKK3sKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfMTFuX2FkZGJhX3JlcSAqYWRkX2JhX3JlcSA9CisJCShzdHJ1Y3QgaG9zdF9jbWRfZHNfMTFuX2FkZGJhX3JlcSAqKQorCQkmY21kLT5wYXJhbXMuYWRkX2JhX3JlcTsKKworCWNtZC0+Y29tbWFuZCA9IGNwdV90b19sZTE2KEhvc3RDbWRfQ01EXzExTl9BRERCQV9SRVEpOworCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZigqYWRkX2JhX3JlcSkgKyBTX0RTX0dFTik7CisJbWVtY3B5KGFkZF9iYV9yZXEsIGRhdGFfYnVmLCBzaXplb2YoKmFkZF9iYV9yZXEpKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyBjb21tYW5kIGZvciBhZGRpbmcgYSBCQSByZXNwb25zZS4KKyAqCisgKiBQcmVwYXJhdGlvbiBpbmNsdWRlcyAtCisgKiAgICAgIC0gU2V0dGluZyBjb21tYW5kIElEIGFuZCBwcm9wZXIgc2l6ZQorICogICAgICAtIFNldHRpbmcgYWRkIEJBIHJlc3BvbnNlIGJ1ZmZlcgorICogICAgICAtIEVuc3VyaW5nIGNvcnJlY3QgZW5kaWFuLW5lc3MKKyAqLworaW50IG13aWZpZXhfY21kXzExbl9hZGRiYV9yc3BfZ2VuKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLAorCQkJCSAgdm9pZCAqZGF0YV9idWYpCit7CisJc3RydWN0IGhvc3RfY21kX2RzXzExbl9hZGRiYV9yc3AgKmFkZF9iYV9yc3AgPQorCQkoc3RydWN0IGhvc3RfY21kX2RzXzExbl9hZGRiYV9yc3AgKikKKwkJJmNtZC0+cGFyYW1zLmFkZF9iYV9yc3A7CisJc3RydWN0IGhvc3RfY21kX2RzXzExbl9hZGRiYV9yZXEgKmNtZF9hZGRiYV9yZXEgPQorCQkoc3RydWN0IGhvc3RfY21kX2RzXzExbl9hZGRiYV9yZXEgKikgZGF0YV9idWY7CisJdTggdGlkOworCWludCB3aW5fc2l6ZTsKKwl1aW50MTZfdCBibG9ja19hY2tfcGFyYW1fc2V0OworCisJY21kLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoSG9zdENtZF9DTURfMTFOX0FEREJBX1JTUCk7CisJY21kLT5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCphZGRfYmFfcnNwKSArIFNfRFNfR0VOKTsKKworCW1lbWNweShhZGRfYmFfcnNwLT5wZWVyX21hY19hZGRyLCBjbWRfYWRkYmFfcmVxLT5wZWVyX21hY19hZGRyLAorCSAgICAgICBFVEhfQUxFTik7CisJYWRkX2JhX3JzcC0+ZGlhbG9nX3Rva2VuID0gY21kX2FkZGJhX3JlcS0+ZGlhbG9nX3Rva2VuOworCWFkZF9iYV9yc3AtPmJsb2NrX2Fja190bW8gPSBjbWRfYWRkYmFfcmVxLT5ibG9ja19hY2tfdG1vOworCWFkZF9iYV9yc3AtPnNzbiA9IGNtZF9hZGRiYV9yZXEtPnNzbjsKKworCWJsb2NrX2Fja19wYXJhbV9zZXQgPSBsZTE2X3RvX2NwdShjbWRfYWRkYmFfcmVxLT5ibG9ja19hY2tfcGFyYW1fc2V0KTsKKwl0aWQgPSAoYmxvY2tfYWNrX3BhcmFtX3NldCAmIElFRUU4MDIxMV9BRERCQV9QQVJBTV9USURfTUFTSykKKwkJPj4gQkxPQ0tBQ0tQQVJBTV9USURfUE9TOworCWFkZF9iYV9yc3AtPnN0YXR1c19jb2RlID0gY3B1X3RvX2xlMTYoQUREQkFfUlNQX1NUQVRVU19BQ0NFUFQpOworCWJsb2NrX2Fja19wYXJhbV9zZXQgJj0gfklFRUU4MDIxMV9BRERCQV9QQVJBTV9CVUZfU0laRV9NQVNLOworCS8qIFdlIGRvbm90IHN1cHBvcnQgQU1TRFUgaW5zaWRlIEFNUERVLCBoZW5jZSByZXNldCB0aGUgYml0ICovCisJYmxvY2tfYWNrX3BhcmFtX3NldCAmPSB+QkxPQ0tBQ0tQQVJBTV9BTVNEVV9TVVBQX01BU0s7CisJYmxvY2tfYWNrX3BhcmFtX3NldCB8PSAocHJpdi0+YWRkX2JhX3BhcmFtLnJ4X3dpbl9zaXplIDw8CisJCQkJCSAgICAgQkxPQ0tBQ0tQQVJBTV9XSU5TSVpFX1BPUyk7CisJYWRkX2JhX3JzcC0+YmxvY2tfYWNrX3BhcmFtX3NldCA9IGNwdV90b19sZTE2KGJsb2NrX2Fja19wYXJhbV9zZXQpOworCXdpbl9zaXplID0gKGxlMTZfdG9fY3B1KGFkZF9iYV9yc3AtPmJsb2NrX2Fja19wYXJhbV9zZXQpCisJCQkJCSYgSUVFRTgwMjExX0FEREJBX1BBUkFNX0JVRl9TSVpFX01BU0spCisJCQkJCT4+IEJMT0NLQUNLUEFSQU1fV0lOU0laRV9QT1M7CisJY21kX2FkZGJhX3JlcS0+YmxvY2tfYWNrX3BhcmFtX3NldCA9IGNwdV90b19sZTE2KGJsb2NrX2Fja19wYXJhbV9zZXQpOworCisJbXdpZmlleF8xMW5fY3JlYXRlX3J4X3Jlb3JkZXJfdGJsKHByaXYsIGNtZF9hZGRiYV9yZXEtPnBlZXJfbWFjX2FkZHIsCisJCQkgICAgdGlkLCB3aW5fc2l6ZSwgbGUxNl90b19jcHUoY21kX2FkZGJhX3JlcS0+c3NuKSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGNvbW1hbmQgZm9yIGRlbGV0aW5nIGEgQkEgcmVxdWVzdC4KKyAqCisgKiBQcmVwYXJhdGlvbiBpbmNsdWRlcyAtCisgKiAgICAgIC0gU2V0dGluZyBjb21tYW5kIElEIGFuZCBwcm9wZXIgc2l6ZQorICogICAgICAtIFNldHRpbmcgZGVsIEJBIHJlcXVlc3QgYnVmZmVyCisgKiAgICAgIC0gRW5zdXJpbmcgY29ycmVjdCBlbmRpYW4tbmVzcworICovCitpbnQgbXdpZmlleF9jbWRfMTFuX2RlbGJhKHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWQsIHZvaWQgKmRhdGFfYnVmKQoreworCXN0cnVjdCBob3N0X2NtZF9kc18xMW5fZGVsYmEgKmRlbF9iYSA9IChzdHJ1Y3QgaG9zdF9jbWRfZHNfMTFuX2RlbGJhICopCisJCSZjbWQtPnBhcmFtcy5kZWxfYmE7CisKKwljbWQtPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihIb3N0Q21kX0NNRF8xMU5fREVMQkEpOworCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZigqZGVsX2JhKSArIFNfRFNfR0VOKTsKKwltZW1jcHkoZGVsX2JhLCBkYXRhX2J1Ziwgc2l6ZW9mKCpkZWxfYmEpKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpZGVudGlmaWVzIGlmIFJ4IHJlb3JkZXJpbmcgaXMgbmVlZGVkIGZvciBhIHJlY2VpdmVkIHBhY2tldC4KKyAqCisgKiBJbiBjYXNlIHJlb3JkZXJpbmcgaXMgcmVxdWlyZWQsIHRoZSBmdW5jdGlvbiB3aWxsIGRvIHRoZSByZW9yZGVyaW5nCisgKiBiZWZvcmUgc2VuZGluZyBpdCB0byBrZXJuZWwuCisgKgorICogVGhlIFJ4IHJlb3JkZXIgdGFibGUgaXMgY2hlY2tlZCBmaXJzdCB3aXRoIHRoZSByZWNlaXZlZCBUSUQvVEEgcGFpci4gSWYKKyAqIG5vdCBmb3VuZCwgdGhlIHJlY2VpdmVkIHBhY2tldCBpcyBkaXNwYXRjaGVkIGltbWVkaWF0ZWx5LiBCdXQgaWYgZm91bmQsCisgKiB0aGUgcGFja2V0IGlzIHJlb3JkZXJlZCBhbmQgYWxsIHRoZSBwYWNrZXRzIGluIHRoZSB1cGRhdGVkIFJ4IHJlb3JkZXJpbmcKKyAqIHRhYmxlIGlzIGRpc3BhdGNoZWQgdW50aWwgYSBob2xlIGlzIGZvdW5kLgorICoKKyAqIEZvciBzZXF1ZW5jZSBudW1iZXIgbGVzcyB0aGFuIHRoZSBzdGFydGluZyB3aW5kb3csIHRoZSBwYWNrZXQgaXMgZHJvcHBlZC4KKyAqLworaW50IG13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJdTE2IHNlcV9udW0sIHUxNiB0aWQsCisJCQkJdTggKnRhLCB1OCBwa3RfdHlwZSwgdm9pZCAqcGF5bG9hZCkKK3sKKwlzdHJ1Y3QgbXdpZmlleF9yeF9yZW9yZGVyX3RibCAqcnhfcmVvcl90YmxfcHRyOworCWludCBzdGFydF93aW4sIGVuZF93aW4sIHdpbl9zaXplLCByZXQ7CisJdTE2IHBrdF9pbmRleDsKKworCXJ4X3Jlb3JfdGJsX3B0ciA9CisJCW13aWZpZXhfMTFuX2dldF9yeF9yZW9yZGVyX3RibCgoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqKSBwcml2LAorCQkJCQkJdGlkLCB0YSk7CisJaWYgKCFyeF9yZW9yX3RibF9wdHIpIHsKKwkJaWYgKHBrdF90eXBlICE9IFBLVF9UWVBFX0JBUikKKwkJCW13aWZpZXhfcHJvY2Vzc19yeF9wYWNrZXQocHJpdi0+YWRhcHRlciwgcGF5bG9hZCk7CisJCXJldHVybiAwOworCX0KKwlzdGFydF93aW4gPSByeF9yZW9yX3RibF9wdHItPnN0YXJ0X3dpbjsKKwl3aW5fc2l6ZSA9IHJ4X3Jlb3JfdGJsX3B0ci0+d2luX3NpemU7CisJZW5kX3dpbiA9ICgoc3RhcnRfd2luICsgd2luX3NpemUpIC0gMSkgJiAoTUFYX1RJRF9WQUxVRSAtIDEpOworCWRlbF90aW1lcigmcnhfcmVvcl90YmxfcHRyLT50aW1lcl9jb250ZXh0LnRpbWVyKTsKKwltb2RfdGltZXIoJnJ4X3Jlb3JfdGJsX3B0ci0+dGltZXJfY29udGV4dC50aW1lciwgamlmZmllcworCQkJKyAoTUlOX0ZMVVNIX1RJTUVSX01TICogd2luX3NpemUgKiBIWikgLyAxMDAwKTsKKworCS8qCisJICogSWYgc2VxX251bSBpcyBsZXNzIHRoZW4gc3RhcnRpbmcgd2luIHRoZW4gaWdub3JlIGFuZCBkcm9wIHRoZQorCSAqIHBhY2tldAorCSAqLworCWlmICgoc3RhcnRfd2luICsgVFdPUE9XMTEpID4gKE1BWF9USURfVkFMVUUgLSAxKSkgey8qIFdyYXAgKi8KKwkJaWYgKHNlcV9udW0gPj0gKChzdGFydF93aW4gKyAoVFdPUE9XMTEpKSAmIChNQVhfVElEX1ZBTFVFIC0gMSkpCisJCQkJJiYgKHNlcV9udW0gPCBzdGFydF93aW4pKQorCQkJcmV0dXJuIC0xOworCX0gZWxzZSBpZiAoKHNlcV9udW0gPCBzdGFydF93aW4pCisJCQl8fCAoc2VxX251bSA+IChzdGFydF93aW4gKyAoVFdPUE9XMTEpKSkpIHsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qCisJICogSWYgdGhpcyBwYWNrZXQgaXMgYSBCQVIgd2UgYWRqdXN0IHNlcV9udW0gYXMKKwkgKiBXaW5TdGFydCA9IHNlcV9udW0KKwkgKi8KKwlpZiAocGt0X3R5cGUgPT0gUEtUX1RZUEVfQkFSKQorCQlzZXFfbnVtID0gKChzZXFfbnVtICsgd2luX3NpemUpIC0gMSkgJiAoTUFYX1RJRF9WQUxVRSAtIDEpOworCisJaWYgKCgoZW5kX3dpbiA8IHN0YXJ0X3dpbikKKwkgICAgICYmIChzZXFfbnVtIDwgKFRXT1BPVzExIC0gKE1BWF9USURfVkFMVUUgLSBzdGFydF93aW4pKSkKKwkgICAgICYmIChzZXFfbnVtID4gZW5kX3dpbikpIHx8ICgoZW5kX3dpbiA+IHN0YXJ0X3dpbikKKwkgICAgICYmICgoc2VxX251bSA+IGVuZF93aW4pIHx8IChzZXFfbnVtIDwgc3RhcnRfd2luKSkpKSB7CisJCWVuZF93aW4gPSBzZXFfbnVtOworCQlpZiAoKChzZXFfbnVtIC0gd2luX3NpemUpICsgMSkgPj0gMCkKKwkJCXN0YXJ0X3dpbiA9IChlbmRfd2luIC0gd2luX3NpemUpICsgMTsKKwkJZWxzZQorCQkJc3RhcnRfd2luID0gKE1BWF9USURfVkFMVUUgLSAod2luX3NpemUgLSBzZXFfbnVtKSkgKyAxOworCQlyZXQgPSBtd2lmaWV4XzExbl9kaXNwYXRjaF9wa3RfdW50aWxfc3RhcnRfd2luKHByaXYsCisJCQkJCQlyeF9yZW9yX3RibF9wdHIsIHN0YXJ0X3dpbik7CisKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJaWYgKHBrdF90eXBlICE9IFBLVF9UWVBFX0JBUikgeworCQlpZiAoc2VxX251bSA+PSBzdGFydF93aW4pCisJCQlwa3RfaW5kZXggPSBzZXFfbnVtIC0gc3RhcnRfd2luOworCQllbHNlCisJCQlwa3RfaW5kZXggPSAoc2VxX251bStNQVhfVElEX1ZBTFVFKSAtIHN0YXJ0X3dpbjsKKworCQlpZiAocnhfcmVvcl90YmxfcHRyLT5yeF9yZW9yZGVyX3B0cltwa3RfaW5kZXhdKQorCQkJcmV0dXJuIC0xOworCisJCXJ4X3Jlb3JfdGJsX3B0ci0+cnhfcmVvcmRlcl9wdHJbcGt0X2luZGV4XSA9IHBheWxvYWQ7CisJfQorCisJLyoKKwkgKiBEaXNwYXRjaCBhbGwgcGFja2V0cyBzZXF1ZW50aWFsbHkgZnJvbSBzdGFydF93aW4gdW50aWwgYQorCSAqIGhvbGUgaXMgZm91bmQgYW5kIGFkanVzdCB0aGUgc3RhcnRfd2luIGFwcHJvcHJpYXRlbHkKKwkgKi8KKwlyZXQgPSBtd2lmaWV4XzExbl9zY2FuX2FuZF9kaXNwYXRjaChwcml2LCByeF9yZW9yX3RibF9wdHIpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZGVsZXRlcyBhbiBlbnRyeSBmb3IgYSBnaXZlbiBUSUQvVEEgcGFpci4KKyAqCisgKiBUaGUgVElEL1RBIGFyZSB0YWtlbiBmcm9tIGRlbCBCQSBldmVudCBib2R5LgorICovCit2b2lkCittd2lmaWV4XzExbl9kZWxldGVfYmFfc3RyZWFtX3RibChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBpbnQgdGlkLAorCQkJCXU4ICpwZWVyX21hYywgdTggdHlwZSwgaW50IGluaXRpYXRvcikKK3sKKwlzdHJ1Y3QgbXdpZmlleF9yeF9yZW9yZGVyX3RibCAqcnhfcmVvcl90YmxfcHRyOworCXN0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwgKnB0eF90Ymw7CisJdTggY2xlYW51cF9yeF9yZW9yZGVyX3RibDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHR5cGUgPT0gVFlQRV9ERUxCQV9SRUNFSVZFKQorCQljbGVhbnVwX3J4X3Jlb3JkZXJfdGJsID0gKGluaXRpYXRvcikgPyB0cnVlIDogZmFsc2U7CisJZWxzZQorCQljbGVhbnVwX3J4X3Jlb3JkZXJfdGJsID0gKGluaXRpYXRvcikgPyBmYWxzZSA6IHRydWU7CisKKwlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImV2ZW50OiBERUxCQTogJXBNIHRpZD0lZCwgIgorCSAgICAgICAiaW5pdGlhdG9yPSVkXG4iLCBwZWVyX21hYywgdGlkLCBpbml0aWF0b3IpOworCisJaWYgKGNsZWFudXBfcnhfcmVvcmRlcl90YmwpIHsKKwkJcnhfcmVvcl90YmxfcHRyID0gbXdpZmlleF8xMW5fZ2V0X3J4X3Jlb3JkZXJfdGJsKHByaXYsIHRpZCwKKwkJCQkJCQkJIHBlZXJfbWFjKTsKKwkJaWYgKCFyeF9yZW9yX3RibF9wdHIpIHsKKwkJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJCQkiZXZlbnQ6IFRJRCwgVEEgbm90IGZvdW5kIGluIHRhYmxlXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCQltd2lmaWV4XzExbl9kZWxldGVfcnhfcmVvcmRlcl90YmxfZW50cnkocHJpdiwgcnhfcmVvcl90YmxfcHRyKTsKKwl9IGVsc2UgeworCQlwdHhfdGJsID0gbXdpZmlleF8xMW5fZ2V0X3R4X2JhX3N0cmVhbV90YmwocHJpdiwgdGlkLCBwZWVyX21hYyk7CisJCWlmICghcHR4X3RibCkgeworCQkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkJCSJldmVudDogVElELCBSQSBub3QgZm91bmQgaW4gdGFibGVcbiIpOworCQkJcmV0dXJuOworCQl9CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4X2JhX3N0cmVhbV90YmxfbG9jaywgZmxhZ3MpOworCQltd2lmaWV4XzExbl9kZWxldGVfdHhfYmFfc3RyZWFtX3RibF9lbnRyeShwcml2LCBwdHhfdGJsKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfYmFfc3RyZWFtX3RibF9sb2NrLCBmbGFncyk7CisJfQorfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBjb21tYW5kIHJlc3BvbnNlIG9mIGFuIGFkZCBCQSByZXNwb25zZS4KKyAqCisgKiBIYW5kbGluZyBpbmNsdWRlcyBjaGFuZ2luZyB0aGUgaGVhZGVyIGZpZWxkcyBpbnRvIENQVSBmb3JtYXQgYW5kCisgKiBjcmVhdGluZyB0aGUgc3RyZWFtLCBwcm92aWRlZCB0aGUgYWRkIEJBIGlzIGFjY2VwdGVkLgorICovCitpbnQgbXdpZmlleF9yZXRfMTFuX2FkZGJhX3Jlc3Aoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqcmVzcCkKK3sKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfMTFuX2FkZGJhX3JzcCAqYWRkX2JhX3JzcCA9CisJCShzdHJ1Y3QgaG9zdF9jbWRfZHNfMTFuX2FkZGJhX3JzcCAqKQorCQkmcmVzcC0+cGFyYW1zLmFkZF9iYV9yc3A7CisJaW50IHRpZCwgd2luX3NpemU7CisJc3RydWN0IG13aWZpZXhfcnhfcmVvcmRlcl90YmwgKnJ4X3Jlb3JfdGJsX3B0cjsKKwl1aW50MTZfdCBibG9ja19hY2tfcGFyYW1fc2V0OworCisJYmxvY2tfYWNrX3BhcmFtX3NldCA9IGxlMTZfdG9fY3B1KGFkZF9iYV9yc3AtPmJsb2NrX2Fja19wYXJhbV9zZXQpOworCisJdGlkID0gKGJsb2NrX2Fja19wYXJhbV9zZXQgJiBJRUVFODAyMTFfQUREQkFfUEFSQU1fVElEX01BU0spCisJCT4+IEJMT0NLQUNLUEFSQU1fVElEX1BPUzsKKwkvKgorCSAqIENoZWNrIGlmIHdlIGhhZCByZWplY3RlZCB0aGUgQUREQkEsIGlmIHllcyB0aGVuIGRvIG5vdCBjcmVhdGUKKwkgKiB0aGUgc3RyZWFtCisJICovCisJaWYgKGxlMTZfdG9fY3B1KGFkZF9iYV9yc3AtPnN0YXR1c19jb2RlKSA9PSBCQV9SRVNVTFRfU1VDQ0VTUykgeworCQl3aW5fc2l6ZSA9IChibG9ja19hY2tfcGFyYW1fc2V0ICYKKwkJCUlFRUU4MDIxMV9BRERCQV9QQVJBTV9CVUZfU0laRV9NQVNLKQorCQkJPj4gQkxPQ0tBQ0tQQVJBTV9XSU5TSVpFX1BPUzsKKworCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImNtZDogQUREQkEgUlNQOiAlcE0iCisJCSAgICAgICAiIHRpZD0lZCBzc249JWQgd2luX3NpemU9JWRcbiIsCisJCSAgICAgICBhZGRfYmFfcnNwLT5wZWVyX21hY19hZGRyLAorCQkgICAgICAgdGlkLCBhZGRfYmFfcnNwLT5zc24sIHdpbl9zaXplKTsKKwl9IGVsc2UgeworCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgIkFEREJBIFJTUDogZmFpbGVkICVwTSB0aWQ9JWQpXG4iLAorCQkJCQlhZGRfYmFfcnNwLT5wZWVyX21hY19hZGRyLCB0aWQpOworCisJCXJ4X3Jlb3JfdGJsX3B0ciA9IG13aWZpZXhfMTFuX2dldF9yeF9yZW9yZGVyX3RibChwcml2LAorCQkJCQl0aWQsIGFkZF9iYV9yc3AtPnBlZXJfbWFjX2FkZHIpOworCQlpZiAocnhfcmVvcl90YmxfcHRyKQorCQkJbXdpZmlleF8xMW5fZGVsZXRlX3J4X3Jlb3JkZXJfdGJsX2VudHJ5KHByaXYsCisJCQkJcnhfcmVvcl90YmxfcHRyKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBCQSBzdHJlYW0gdGltZW91dCBldmVudCBieSBwcmVwYXJpbmcgYW5kIHNlbmRpbmcKKyAqIGEgY29tbWFuZCB0byB0aGUgZmlybXdhcmUuCisgKi8KK3ZvaWQgbXdpZmlleF8xMW5fYmFfc3RyZWFtX3RpbWVvdXQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfMTFuX2JhdGltZW91dCAqZXZlbnQpCit7CisJc3RydWN0IGhvc3RfY21kX2RzXzExbl9kZWxiYSBkZWxiYTsKKworCW1lbXNldCgmZGVsYmEsIDAsIHNpemVvZihzdHJ1Y3QgaG9zdF9jbWRfZHNfMTFuX2RlbGJhKSk7CisJbWVtY3B5KGRlbGJhLnBlZXJfbWFjX2FkZHIsIGV2ZW50LT5wZWVyX21hY19hZGRyLCBFVEhfQUxFTik7CisKKwlkZWxiYS5kZWxfYmFfcGFyYW1fc2V0IHw9CisJCWNwdV90b19sZTE2KCh1MTYpIGV2ZW50LT50aWQgPDwgREVMQkFfVElEX1BPUyk7CisJZGVsYmEuZGVsX2JhX3BhcmFtX3NldCB8PSBjcHVfdG9fbGUxNigKKwkJKHUxNikgZXZlbnQtPm9yaWduaW5hdG9yIDw8IERFTEJBX0lOSVRJQVRPUl9QT1MpOworCWRlbGJhLnJlYXNvbl9jb2RlID0gY3B1X3RvX2xlMTYoV0xBTl9SRUFTT05fUVNUQV9USU1FT1VUKTsKKwltd2lmaWV4X3NlbmRfY21kX2FzeW5jKHByaXYsIEhvc3RDbWRfQ01EXzExTl9ERUxCQSwgMCwgMCwgJmRlbGJhKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2xlYW5zIHVwIHRoZSBSeCByZW9yZGVyIHRhYmxlIGJ5IGRlbGV0aW5nIGFsbCB0aGUgZW50cmllcworICogYW5kIHJlLWluaXRpYWxpemluZy4KKyAqLwordm9pZCBtd2lmaWV4XzExbl9jbGVhbnVwX3Jlb3JkZXJfdGJsKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpCit7CisJc3RydWN0IG13aWZpZXhfcnhfcmVvcmRlcl90YmwgKmRlbF90YmxfcHRyLCAqdG1wX25vZGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeF9yZW9yZGVyX3RibF9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRlbF90YmxfcHRyLCB0bXBfbm9kZSwKKwkJCQkgJnByaXYtPnJ4X3Jlb3JkZXJfdGJsX3B0ciwgbGlzdCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9yZW9yZGVyX3RibF9sb2NrLCBmbGFncyk7CisJCW13aWZpZXhfMTFuX2RlbGV0ZV9yeF9yZW9yZGVyX3RibF9lbnRyeShwcml2LCBkZWxfdGJsX3B0cik7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeF9yZW9yZGVyX3RibF9sb2NrLCBmbGFncyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4X3Jlb3JkZXJfdGJsX2xvY2ssIGZsYWdzKTsKKworCUlOSVRfTElTVF9IRUFEKCZwcml2LT5yeF9yZW9yZGVyX3RibF9wdHIpOworCW1lbXNldChwcml2LT5yeF9zZXEsIDAsIHNpemVvZihwcml2LT5yeF9zZXEpKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvMTFuX3J4cmVvcmRlci5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNjYThjOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvMTFuX3J4cmVvcmRlci5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBNYXJ2ZWxsIFdpcmVsZXNzIExBTiBkZXZpY2UgZHJpdmVyOiA4MDIuMTFuIFJYIFJlLW9yZGVyaW5nCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRlcm5hdGlvbmFsCisgKiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKyAqICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgdXNlLCByZWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgaW4KKyAqIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UsIGEgY29weSBvZiB3aGljaAorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0Egb3Igb24gdGhlCisgKiB3b3JsZHdpZGUgd2ViIGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQuCisgKgorICogVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4gIFRoZSBMaWNlbnNlIHByb3ZpZGVzIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dAorICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLgorICovCisKKyNpZm5kZWYgX01XSUZJRVhfMTFOX1JYUkVPUkRFUl9IXworI2RlZmluZSBfTVdJRklFWF8xMU5fUlhSRU9SREVSX0hfCisKKyNkZWZpbmUgTUlOX0ZMVVNIX1RJTUVSX01TCQk1MAorCisjZGVmaW5lIFBLVF9UWVBFX0JBUiAweEU3CisjZGVmaW5lIE1BWF9USURfVkFMVUUJCQkoMiA8PCAxMSkKKyNkZWZpbmUgVFdPUE9XMTEJCQkoMiA8PCAxMCkKKworI2RlZmluZSBCTE9DS0FDS1BBUkFNX1RJRF9QT1MJCTIKKyNkZWZpbmUgQkxPQ0tBQ0tQQVJBTV9BTVNEVV9TVVBQX01BU0sJMHgxCisjZGVmaW5lIEJMT0NLQUNLUEFSQU1fV0lOU0laRV9QT1MJNgorI2RlZmluZSBERUxCQV9USURfUE9TCQkJMTIKKyNkZWZpbmUgREVMQkFfSU5JVElBVE9SX1BPUwkJMTEKKyNkZWZpbmUgVFlQRV9ERUxCQV9TRU5UCQkJMQorI2RlZmluZSBUWVBFX0RFTEJBX1JFQ0VJVkUJCTIKKyNkZWZpbmUgSU1NRURJQVRFX0JMT0NLX0FDSwkJMHgyCisKKyNkZWZpbmUgQUREQkFfUlNQX1NUQVRVU19BQ0NFUFQgMAorCitpbnQgbXdpZmlleF8xMW5fcnhfcmVvcmRlcl9wa3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqLAorCQkJICAgICAgIHUxNiBzZXFOdW0sCisJCQkgICAgICAgdTE2IHRpZCwgdTggKnRhLAorCQkJICAgICAgIHU4IHBrdHR5cGUsIHZvaWQgKnBheWxvYWQpOwordm9pZCBtd2lmaWV4XzExbl9kZWxldGVfYmFfc3RyZWFtX3RibChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBpbnQgVGlkLAorCQkJCSAgICAgdTggKlBlZXJNQUNBZGRyLCB1OCB0eXBlLAorCQkJCSAgICAgaW50IGluaXRpYXRvcik7Cit2b2lkIG13aWZpZXhfMTFuX2JhX3N0cmVhbV90aW1lb3V0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJICAgc3RydWN0IGhvc3RfY21kX2RzXzExbl9iYXRpbWVvdXQgKmV2ZW50KTsKK2ludCBtd2lmaWV4X3JldF8xMW5fYWRkYmFfcmVzcChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kCisJCQkgICAgICAgKnJlc3ApOworaW50IG13aWZpZXhfY21kXzExbl9kZWxiYShzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLAorCQkJICB2b2lkICpkYXRhX2J1Zik7CitpbnQgbXdpZmlleF9jbWRfMTFuX2FkZGJhX3JzcF9nZW4oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kCisJCQkJICAqY21kLCB2b2lkICpkYXRhX2J1Zik7CitpbnQgbXdpZmlleF9jbWRfMTFuX2FkZGJhX3JlcShzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLAorCQkJICAgICAgdm9pZCAqZGF0YV9idWYpOwordm9pZCBtd2lmaWV4XzExbl9jbGVhbnVwX3Jlb3JkZXJfdGJsKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpOworc3RydWN0IG13aWZpZXhfcnhfcmVvcmRlcl90YmwgKm13aWZpZXhfMTFuX2dldF9yeHJlb3JkZXJfdGJsKHN0cnVjdAorCQkJCQkJCSAgIG13aWZpZXhfcHJpdmF0ZQorCQkJCQkJCSAgICpwcml2LCBpbnQgdGlkLAorCQkJCQkJCSAgIHU4ICp0YSk7CisKKyNlbmRpZiAvKiBfTVdJRklFWF8xMU5fUlhSRU9SREVSX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY5NjI5MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvS2NvbmZpZwpAQCAtMCwwICsxLDIxIEBACitjb25maWcgTVdJRklFWAorCXRyaXN0YXRlICJNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIgorCWRlcGVuZHMgb24gQ0ZHODAyMTEKKwlzZWxlY3QgTElCODAyMTEKKwktLS1oZWxwLS0tCisJICBUaGlzIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgYWRhcHRlcnMgYmFzZWQgb24gTWFydmVsbAorCSAgODAyLjExbiBjaGlwc2V0cy4KKworCSAgSWYgeW91IGNob29zZSB0byBidWlsZCBpdCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBjYWxsZWQKKwkgIG13aWZpZXguCisKK2NvbmZpZyBNV0lGSUVYX1NESU8KKwl0cmlzdGF0ZSAiTWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgU0Q4Nzg3IgorCWRlcGVuZHMgb24gTVdJRklFWCAmJiBNTUMKKwlzZWxlY3QgRldfTE9BREVSCisJLS0taGVscC0tLQorCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uIE1hcnZlbGwKKwkgIDg3ODcgY2hpcHNldCB3aXRoIFNESU8gaW50ZXJmYWNlLgorCisJICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGl0IGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIGNhbGxlZAorCSAgbXdpZmlleF9zZGlvLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJjYjczMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvTWFrZWZpbGUKQEAgLTAsMCArMSw0MSBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTEsIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisjCisjIFRoaXMgc29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRlcm5hdGlvbmFsCisjIEx0ZC4gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIEp1bmUgMTk5MQorIyAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluCisjIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UsIGEgY29weSBvZiB3aGljaAorIyBpcyBhdmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBIG9yIG9uIHRoZQorIyB3b3JsZHdpZGUgd2ViIGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQuCisjCisjIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0CisjIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4KKworCittd2lmaWV4LXkgKz0gbWFpbi5vCittd2lmaWV4LXkgKz0gaW5pdC5vCittd2lmaWV4LXkgKz0gY2ZwLm8KK213aWZpZXgteSArPSBjbWRldnQubworbXdpZmlleC15ICs9IHV0aWwubworbXdpZmlleC15ICs9IHR4cngubworbXdpZmlleC15ICs9IHdtbS5vCittd2lmaWV4LXkgKz0gMTFuLm8KK213aWZpZXgteSArPSAxMW5fYWdnci5vCittd2lmaWV4LXkgKz0gMTFuX3J4cmVvcmRlci5vCittd2lmaWV4LXkgKz0gc2Nhbi5vCittd2lmaWV4LXkgKz0gam9pbi5vCittd2lmaWV4LXkgKz0gc3RhX2lvY3RsLm8KK213aWZpZXgteSArPSBzdGFfY21kLm8KK213aWZpZXgteSArPSBzdGFfY21kcmVzcC5vCittd2lmaWV4LXkgKz0gc3RhX2V2ZW50Lm8KK213aWZpZXgteSArPSBzdGFfdHgubworbXdpZmlleC15ICs9IHN0YV9yeC5vCittd2lmaWV4LXkgKz0gY2ZnODAyMTEubworbXdpZmlleC0kKENPTkZJR19ERUJVR19GUykgKz0gZGVidWdmcy5vCitvYmotJChDT05GSUdfTVdJRklFWCkgKz0gbXdpZmlleC5vCisKK213aWZpZXhfc2Rpby15ICs9IHNkaW8ubworb2JqLSQoQ09ORklHX01XSUZJRVhfU0RJTykgKz0gbXdpZmlleF9zZGlvLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvUkVBRE1FIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU1YmFkZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvUkVBRE1FCkBAIC0wLDAgKzEsMjA0IEBACisjIENvcHlyaWdodCAoQykgMjAxMSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBmaWxlICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwKKyMgTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxCisjICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgdXNlLCByZWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgaW4KKyMgYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdoaWNoCisjIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0Egb3Igb24gdGhlCisjIHdvcmxkd2lkZSB3ZWIgYXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dC4KKyMKKyMgVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQKKyMgdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCVUgUyBFIFIgIE0gQSBOIFUgQSBMCisKKzEpIEZPUiBEUklWRVIgSU5TVEFMTAorCisJYSkgQ29weSBzZDg3ODcuYmluIHRvIC9saWIvZmlybXdhcmUvbXJ2bC8gZGlyZWN0b3J5LAorCSAgIGNyZWF0ZSB0aGUgZGlyZWN0b3J5IGlmIGl0IGRvZXNuJ3QgZXhpc3QuCisJYikgSW5zdGFsbCBXTEFOIGRyaXZlciwKKwkJaW5zbW9kIG13aWZpZXgua28KKwljKSBVbmluc3RhbGwgV0xBTiBkcml2ZXIsCisJCWlmY29uZmlnIG1sYW5YIGRvd24KKwkJcm1tb2QgbXdpZmlleAorCisKKzIpIEZPUiBEUklWRVIgQ09ORklHVVJBVElPTiBBTkQgSU5GTworCVRoZSBjb25maWd1cmF0aW9ucyBjYW4gYmUgZG9uZSBlaXRoZXIgdXNpbmcgdGhlICdpdycgdXNlciBzcGFjZQorCXV0aWxpdHkgb3IgZGVidWdmcy4KKworCWEpICdpdycgdXRpbGl0eSBjb21tYW5kcworCisJRm9sbG93aW5nIGFyZSBzb21lIHVzZWZ1bCBpdyBjb21tYW5kczotCisKK2l3IGRldiBtbGFuMCBzY2FuCisKKwlUaGlzIGNvbW1hbmQgd2lsbCB0cmlnZ2VyIGEgc2Nhbi4KKwlUaGUgY29tbWFuZCB3aWxsIHRoZW4gZGlzcGxheSB0aGUgc2NhbiB0YWJsZSBlbnRyaWVzCisKK2l3IGRldiBtbGFuMCBjb25uZWN0IC13IDxTU0lEPiBbPGZyZXEgaW4gTUh6Pl0gWzxic3NpZD5dIFtrZXkgMDphYmNkZSBkOjExMjM0NTY3ODlhXQorCVRoZSBhYm92ZSBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIGNvbm5lY3QgdG8gYW4gQVAgd2l0aCBhIHBhcnRpY3VsYXIgU1NJRC4KKwlBcCdzIG9wZXJhdGluZyBmcmVxdWVuY3kgY2FuIGJlIHNwZWNpZmllZCBvciBldmVuIHRoZSBic3NpZC4gSWYgdGhlIEFQIGlzIHVzaW5nCisJV0VQIGVuY3J5cHRpb24sIHdlcCBrZXlzIGNhbiBiZSBzcGVjaWZpZWQgaW4gdGhlIGNvbW1hbmQuCisJTm90ZTogRXZlcnkgdGltZSBiZWZvcmUgY29ubmVjdGluZyB0byBhbiBBUCBzY2FuIGNvbW1hbmQgKGl3IGRldiBtbGFuMCBzY2FuKSBzaG91bGQgYmUgdXNlZCBieSB1c2VyLgorCitpdyBkZXYgbWxhbjAgZGlzY29ubmVjdAorCVRoaXMgY29tbWFuZCB3aWxsIGJlIHVzZWQgdG8gZGlzY29ubmVjdCBmcm9tIGFuIEFQLgorCisKK2l3IGRldiBtbGFuMCBpYnNzIGpvaW4gPFNTSUQ+IDxmcmVxIGluIE1Iej4gW2ZpeGVkLWZyZXFdIFtmaXhlZC1ic3NpZF0gW2tleSAwOmFiY2RlXQorCVRoZSBjb21tYW5kIHdpbGwgYmUgdXNlZCB0byBqb2luIG9yIGNyZWF0ZSBhbiBpYnNzLiBPcHRpb25hbGx5LCBvcGVyYXRpbmcgZnJlcXVlbmN5LAorCWJzc2lkIGFuZCB0aGUgc2VjdXJpdHkgcmVsYXRlZCBwYXJhbWV0ZXJzIGNhbiBiZSBzcGVjaWZpZWQgd2hpbGUgam9pbmluZy9jcmVhdGluZworCWFuZCBpYnNzLgorCitpdyBkZXYgbWxhbjAgaWJzcyBsZWF2ZQorCVRoZSBjb21tYW5kIHdpbGwgYmUgdXNlZCB0byBsZWF2ZSBhbiBpYnNzIG5ldHdvcmsuCisKK2l3IGRldiBtbGFuMCBsaW5rCisJVGhlIGNvbW1hbmQgd2lsbCBiZSB1c2VkIHRvIGdldCB0aGUgY29ubmVjdGlvbiBzdGF0dXMuIFRoZSBjb21tYW5kIHdpbGwgcmV0dXJuIHBhcmFtZXRlcnMKKwlzdWNoIGFzIFNTSUQsIG9wZXJhdGluZyBmcmVxdWVuY3ksIHJ4L3R4IHBhY2tldHMsIHNpZ25hbCBzdHJlbmd0aCwgdHggYml0cmF0ZS4KKworCUFwYXJ0IGZyb20gdGhlIGl3IHV0aWxpdHkgYWxsIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb25zIHVzaW5nIHRoZSAnaXdjb25maWcnIHV0aWxpdHkgYXJlIGFsc28gc3VwcG9ydGVkLgorCisJYikgRGVidWdmcyBpbnRlcmZhY2UKKworCVRoZSBkZWJ1Z2ZzIGludGVyZmFjZSBjYW4gYmUgdXNlZCBmb3IgY29uZmlndXJhdGlvbnMgYW5kIGZvciBnZXR0aW5nCisJc29tZSB1c2VmdWwgaW5mb3JtYXRpb24gZnJvbSB0aGUgZHJpdmVyLgorCVRoZSBzZWN0aW9uIGJlbG93IGV4cGxhaW5zIHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IGNhbiBiZQorCWRvbmUuCisKKwlNb3VudCBkZWJ1Z2ZzIHRvIC9kZWJ1Z2ZzIG1vdW50IHBvaW50OgorCisJCW1rZGlyIC9kZWJ1Z2ZzCisJCW1vdW50IC10IGRlYnVnZnMgZGVidWdmcyAvZGVidWdmcworCisJVGhlIGluZm9ybWF0aW9uIGlzIHByb3ZpZGVkIGluIC9kZWJ1Z2ZzL213aWZpZXgvbWxhblgvOgorCitpdyByZWcgc2V0IDxjb3VudHJ5IGNvZGU+CisJVGhlIGNvbW1hbmQgd2lsbCBiZSB1c2VkIHRvIGNoYW5nZSB0aGUgcmVndWxhdG9yeSBkb21haW4uCisKK2l3IHJlZyBnZXQKKwlUaGUgY29tbWFuZCB3aWxsIGJlIHVzZWQgdG8gZ2V0IGN1cnJlbnQgcmVndWxhdG9yeSBkb21haW4uCisKK2luZm8KKwlUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBnZXQgZHJpdmVyIGluZm8uCisKKwlVc2FnZToKKwkJY2F0IGluZm8KKworCWRyaXZlcl9uYW1lID0gIm13aWZpZXgiCisJZHJpdmVyX3ZlcnNpb24gPSA8ZHJpdmVyX25hbWUsIGRyaXZlcl92ZXJzaW9uLCAoZmlybXdhcmVfdmVyc2lvbik+CisJaW50ZXJmYWNlX25hbWUgPSAibWxhblgiCisJYnNzX21vZGUgPSAiQWQtaG9jIiB8ICJNYW5hZ2VkIiB8ICJBdXRvIiB8ICJVbmtub3duIgorCW1lZGlhX3N0YXRlID0gIkRpc2Nvbm5lY3RlZCIgfCAiQ29ubmVjdGVkIgorCW1hY19hZGRyZXNzID0gPDYtYnl0ZSBhZGFwdGVyIE1BQyBhZGRyZXNzPgorCW11bHRpY2FzZV9jb3VudCA9IDxtdWx0aWNhc3QgYWRkcmVzcyBjb3VudD4KKwllc3NpZCA9IDxjdXJyZW50IFNTSUQ+CisJYnNzaWQgPSA8Y3VycmVudCBCU1NJRD4KKwljaGFubmVsID0gPGN1cnJlbnQgY2hhbm5lbD4KKwlyZWdpb25fY29kZSA9IDxjdXJyZW50IHJlZ2lvbiBjb2RlPgorCW11bHRpY2Fzcl9hZGRyZXNzW25dID0gPG11bHRpY2FzdCBhZGRyZXNzPgorCW51bV90eF9ieXRlcyA9IDxudW1iZXIgb2YgYnl0ZXMgc2VudCB0byBkZXZpY2U+CisJbnVtX3J4X2J5dGVzID0gPG51bWJlciBvZiBieXRlcyByZWNlaXZlZCBmcm9tIGRldmljZSBhbmQgc2VudCB0byBrZXJuZWw+CisJbnVtX3R4X3BrdHMgPSA8bnVtYmVyIG9mIHBhY2tldHMgc2VudCB0byBkZXZpY2U+CisJbnVtX3J4X3BrdHMgPSA8bnVtYmVyIG9mIHBhY2tldHMgcmVjZWl2ZWQgZnJvbSBkZXZpY2UgYW5kIHNlbnQgdG8ga2VybmVsPgorCW51bV90eF9wa3RzX2Ryb3BwZWQgPSA8bnVtYmVyIG9mIFR4IHBhY2tldHMgZHJvcHBlZCBieSBkcml2ZXI+CisJbnVtX3J4X3BrdHNfZHJvcHBlZCA9IDxudW1iZXIgb2YgUnggcGFja2V0cyBkcm9wcGVkIGJ5IGRyaXZlcj4KKwludW1fdHhfcGt0c19lcnIgPSA8bnVtYmVyIG9mIFR4IHBhY2tldHMgZmFpbGVkIHRvIHNlbmQgdG8gZGV2aWNlPgorCW51bV9yeF9wa3RzX2VyciA9IDxudW1iZXIgb2YgUnggcGFja2V0cyBmYWlsZWQgdG8gcmVjZWl2ZSBmcm9tIGRldmljZT4KKwljYXJyaWVyICJvbiIgfCAib2ZmIgorCXR4IHF1ZXVlICJzdG9wcGVkIiB8ICJzdGFydGVkIgorCisJVGhlIGZvbGxvd2luZyBkZWJ1ZyBpbmZvIGFyZSBwcm92aWRlZCBpbiAvZGVidWdmcy9td2lmaWV4L21sYW5YL2RlYnVnOgorCisJaW50X2NvdW50ZXIgPSA8aW50ZXJydXB0IGNvdW50LCBjbGVhcmVkIHdoZW4gaW50ZXJydXB0IGhhbmRsZWQ+CisJd21tX2FjX3ZvID0gPG51bWJlciBvZiBwYWNrZXRzIHNlbnQgdG8gZGV2aWNlIGZyb20gV01NIEFjVm8gcXVldWU+CisJd21tX2FjX3ZpID0gPG51bWJlciBvZiBwYWNrZXRzIHNlbnQgdG8gZGV2aWNlIGZyb20gV01NIEFjVmkgcXVldWU+CisJd21tX2FjX2JlID0gPG51bWJlciBvZiBwYWNrZXRzIHNlbnQgdG8gZGV2aWNlIGZyb20gV01NIEFjQkUgcXVldWU+CisJd21tX2FjX2JrID0gPG51bWJlciBvZiBwYWNrZXRzIHNlbnQgdG8gZGV2aWNlIGZyb20gV01NIEFjQksgcXVldWU+CisJbWF4X3R4X2J1Zl9zaXplID0gPG1heGltdW0gVHggYnVmZmVyIHNpemU+CisJdHhfYnVmX3NpemUgPSA8Y3VycmVudCBUeCBidWZmZXIgc2l6ZT4KKwljdXJyX3R4X2J1Zl9zaXplID0gPGN1cnJlbnQgVHggYnVmZmVyIHNpemU+CisJcHNfbW9kZSA9IDwwLzEsIENBTSBtb2RlL1BTIG1vZGU+CisJcHNfc3RhdGUgPSA8MC8xLzIvMywgZnVsbCBwb3dlciBzdGF0ZS9hd2FrZSBzdGF0ZS9wcmUtc2xlZXAgc3RhdGUvc2xlZXAgc3RhdGU+CisJaXNfZGVlcF9zbGVlcCA9IDwwLzEsIG5vdCBkZWVwIHNsZWVwIHN0YXRlL2RlZXAgc2xlZXAgc3RhdGU+CisJd2FrZXVwX2Rldl9yZXEgPSA8MC8xLCB3YWtldXAgZGV2aWNlIG5vdCByZXF1aXJlZC9yZXF1aXJlZD4KKwl3YWtldXBfdHJpZXMgPSA8d2FrZXVwIGRldmljZSBjb3VudCwgY2xlYXJlZCB3aGVuIGRldmljZSBhd2FrZT4KKwloc19jb25maWd1cmVkID0gPDAvMSwgaG9zdCBzbGVlcCBub3QgY29uZmlndXJlZC9jb25maWd1cmVkPgorCWhzX2FjdGl2YXRlZCA9IDwwLzEsIGV4dGVuZGVkIGhvc3Qgc2xlZXAgbm90IGFjdGl2YXRlZC9hY3RpdmF0ZWQ+CisJbnVtX3R4X3RpbWVvdXQgPSA8bnVtYmVyIG9mIFR4IHRpbWVvdXQ+CisJbnVtX2NtZF90aW1lb3V0ID0gPG51bWJlciBvZiB0aW1lb3V0IGNvbW1hbmRzPgorCXRpbWVvdXRfY21kX2lkID0gPGNvbW1hbmQgaWQgb2YgdGhlIGxhc3QgdGltZW91dCBjb21tYW5kPgorCXRpbWVvdXRfY21kX2FjdCA9IDxjb21tYW5kIGFjdGlvbiBvZiB0aGUgbGFzdCB0aW1lb3V0IGNvbW1hbmQ+CisJbGFzdF9jbWRfaWQgPSA8Y29tbWFuZCBpZCBvZiB0aGUgbGFzdCBzZXZlcmFsIGNvbW1hbmRzIHNlbnQgdG8gZGV2aWNlPgorCWxhc3RfY21kX2FjdCA9IDxjb21tYW5kIGFjdGlvbiBvZiB0aGUgbGFzdCBzZXZlcmFsIGNvbW1hbmRzIHNlbnQgdG8gZGV2aWNlPgorCWxhc3RfY21kX2luZGV4ID0gPDAgYmFzZWQgbGFzdCBjb21tYW5kIGluZGV4PgorCWxhc3RfY21kX3Jlc3BfaWQgPSA8Y29tbWFuZCBpZCBvZiB0aGUgbGFzdCBzZXZlcmFsIGNvbW1hbmQgcmVzcG9uc2VzIHJlY2VpdmVkIGZyb20gZGV2aWNlPgorCWxhc3RfY21kX3Jlc3BfaW5kZXggPSA8MCBiYXNlZCBsYXN0IGNvbW1hbmQgcmVzcG9uc2UgaW5kZXg+CisJbGFzdF9ldmVudCA9IDxldmVudCBpZCBvZiB0aGUgbGFzdCBzZXZlcmFsIGV2ZW50cyByZWNlaXZlZCBmcm9tIGRldmljZT4KKwlsYXN0X2V2ZW50X2luZGV4ID0gPDAgYmFzZWQgbGFzdCBldmVudCBpbmRleD4KKwludW1fY21kX2gyY19mYWlsID0gPG51bWJlciBvZiBjb21tYW5kcyBmYWlsZWQgdG8gc2VuZCB0byBkZXZpY2U+CisJbnVtX2NtZF9zbGVlcF9jZm1fZmFpbCA9IDxudW1iZXIgb2Ygc2xlZXAgY29uZmlybSBmYWlsZWQgdG8gc2VuZCB0byBkZXZpY2U+CisJbnVtX3R4X2gyY19mYWlsID0gPG51bWJlciBvZiBkYXRhIHBhY2tldHMgZmFpbGVkIHRvIHNlbmQgdG8gZGV2aWNlPgorCW51bV9ldnRfZGVhdXRoID0gPG51bWJlciBvZiBkZWF1dGhlbnRpY2F0ZWQgZXZlbnRzIHJlY2VpdmVkIGZyb20gZGV2aWNlPgorCW51bV9ldnRfZGlzYXNzb2MgPSA8bnVtYmVyIG9mIGRpc2Fzc29jaWF0ZWQgZXZlbnRzIHJlY2VpdmVkIGZyb20gZGV2aWNlPgorCW51bV9ldnRfbGlua19sb3N0ID0gPG51bWJlciBvZiBsaW5rIGxvc3QgZXZlbnRzIHJlY2VpdmVkIGZyb20gZGV2aWNlPgorCW51bV9jbWRfZGVhdXRoID0gPG51bWJlciBvZiBkZWF1dGhlbnRpY2F0ZSBjb21tYW5kcyBzZW50IHRvIGRldmljZT4KKwludW1fY21kX2Fzc29jX29rID0gPG51bWJlciBvZiBhc3NvY2lhdGUgY29tbWFuZHMgd2l0aCBzdWNjZXNzIHJldHVybj4KKwludW1fY21kX2Fzc29jX2ZhaWwgPSA8bnVtYmVyIG9mIGFzc29jaWF0ZSBjb21tYW5kcyB3aXRoIGZhaWx1cmUgcmV0dXJuPgorCWNtZF9zZW50ID0gPDAvMSwgc2VuZCBjb21tYW5kIHJlc291cmNlcyBhdmFpbGFibGUvc2VuZGluZyBjb21tYW5kIHRvIGRldmljZT4KKwlkYXRhX3NlbnQgPSA8MC8xLCBzZW5kIGRhdGEgcmVzb3VyY2VzIGF2YWlsYWJsZS9zZW5kaW5nIGRhdGEgdG8gZGV2aWNlPgorCW1wX3JkX2JpdG1hcCA9IDxTRElPIG11bHRpLXBvcnQgcmVhZCBiaXRtYXA+CisJbXBfd3JfYml0bWFwID0gPFNESU8gbXVsdGktcG9ydCB3cml0ZSBiaXRtYXA+CisJY21kX3Jlc3BfcmVjZWl2ZWQgPSA8MC8xLCBubyBjbWQgcmVzcG9uc2UgdG8gcHJvY2Vzcy9yZXNwb25zZSByZWNlaXZlZCBhbmQgeWV0IHRvIHByb2Nlc3M+CisJZXZlbnRfcmVjZWl2ZWQgPSA8MC8xLCBubyBldmVudCB0byBwcm9jZXNzL2V2ZW50IHJlY2VpdmVkIGFuZCB5ZXQgdG8gcHJvY2Vzcz4KKwljbWRfcGVuZGluZyA9IDxudW1iZXIgb2YgY21kIHBlbmRpbmc+CisJdHhfcGVuZGluZyA9IDxudW1iZXIgb2YgVHggcGFja2V0IHBlbmRpbmc+CisJcnhfcGVuZGluZyA9IDxudW1iZXIgb2YgUnggcGFja2V0IHBlbmRpbmc+CisKKworMykgRk9SIERSSVZFUiBDT05GSUdVUkFUSU9OCisKK3JlZ3Jkd3IKKwlUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byByZWFkL3dyaXRlIHRoZSBhZGFwdGVyIHJlZ2lzdGVyLgorCisJVXNhZ2U6CisJCWVjaG8gIiA8dHlwZT4gPG9mZnNldD4gW3ZhbHVlXSIgPiByZWdyZHdyCisJCWNhdCByZWdyZHdyCisKKwl3aGVyZSB0aGUgcGFyYW1ldGVycyBhcmUsCisJCTx0eXBlPjogICAgIDE6TUFDL1NPQywgMjpCQlAsIDM6UkYsIDQ6UE1JQywgNTpDQVUKKwkJPG9mZnNldD46ICAgb2Zmc2V0IG9mIHJlZ2lzdGVyCisJCVt2YWx1ZV06ICAgIHZhbHVlIHRvIGJlIHdyaXR0ZW4KKworCUV4YW1wbGVzOgorCQllY2hvICIxIDB4YTA2MCIgPiByZWdyZHdyICAgICAgICAgICA6IFJlYWQgdGhlIE1BQyByZWdpc3RlcgorCQllY2hvICIxIDB4YTA2MCAweDEyIiA+IHJlZ3Jkd3IgICAgICA6IFdyaXRlIHRoZSBNQUMgcmVnaXN0ZXIKKwkJZWNobyAiMSAweGE3OTQgMHg4MDAwMDAwMCIgPiByZWdyZHdyCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogV3JpdGUgMHg4MDAwMDAwMCB0byBNQUMgcmVnaXN0ZXIKK3JkZWVwcm9tCisJVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gcmVhZCB0aGUgRUVQUk9NIGNvbnRlbnRzIG9mIHRoZSBjYXJkLgorCisJVXNhZ2U6CisJCWVjaG8gIjxvZmZzZXQ+IDxsZW5ndGg+IiA+IHJkZWVwcm9tCisJCWNhdCByZGVlcHJvbQorCisJd2hlcmUgdGhlIHBhcmFtZXRlcnMgYXJlLAorCQk8b2Zmc2V0PjogICBtdWx0aXBsZXMgb2YgNAorCQk8bGVuZ3RoPjogICA0LTIwLCBtdWx0aXBsZXMgb2YgNAorCisJRXhhbXBsZToKKwkJZWNobyAiMCAyMCIgPiByZGVlcHJvbSAgICAgIDogUmVhZCAyMCBieXRlcyBvZiBFRVBST00gZGF0YSBmcm9tIG9mZnNldCAwCisKK2dldGxvZworICAgICAgICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBnZXQgdGhlIHN0YXRpc3RpY3MgYXZhaWxhYmxlIGluIHRoZSBzdGF0aW9uLgorCVVzYWdlOgorCisJY2F0IGdldGxvZworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2NmZzgwMjExLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYwODMxYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvY2ZnODAyMTEuYwpAQCAtMCwwICsxLDE0MTcgQEAKKy8qCisgKiBNYXJ2ZWxsIFdpcmVsZXNzIExBTiBkZXZpY2UgZHJpdmVyOiBDRkc4MDIxMQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbAorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluCisgKiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gKKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBIG9yIG9uIHRoZQorICogd29ybGR3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0LgorICoKKyAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQKKyAqIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4KKyAqLworCisjaW5jbHVkZSAiY2ZnODAyMTEuaCIKKyNpbmNsdWRlICJtYWluLmgiCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIG1hcHMgdGhlIG5sODAyLjExIGNoYW5uZWwgdHlwZSBpbnRvIGRyaXZlciBjaGFubmVsIHR5cGUuCisgKgorICogVGhlIG1hcHBpbmcgaXMgYXMgZm9sbG93cyAtCisgKiAgICAgIE5MODAyMTFfQ0hBTl9OT19IVCAgICAgLT4gTk9fU0VDX0NIQU5ORUwKKyAqICAgICAgTkw4MDIxMV9DSEFOX0hUMjAgICAgICAtPiBOT19TRUNfQ0hBTk5FTAorICogICAgICBOTDgwMjExX0NIQU5fSFQ0MFBMVVMgIC0+IFNFQ19DSEFOTkVMX0FCT1ZFCisgKiAgICAgIE5MODAyMTFfQ0hBTl9IVDQwTUlOVVMgLT4gU0VDX0NIQU5ORUxfQkVMT1cKKyAqICAgICAgT3RoZXJzICAgICAgICAgICAgICAgICAtPiBOT19TRUNfQ0hBTk5FTAorICovCitzdGF0aWMgaW50Cittd2lmaWV4X2NmZzgwMjExX2NoYW5uZWxfdHlwZV90b19td2lmaWV4X2NoYW5uZWxzKGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUKKwkJCQkJCSAgY2hhbm5lbF90eXBlKQoreworCXN3aXRjaCAoY2hhbm5lbF90eXBlKSB7CisJY2FzZSBOTDgwMjExX0NIQU5fTk9fSFQ6CisJY2FzZSBOTDgwMjExX0NIQU5fSFQyMDoKKwkJcmV0dXJuIE5PX1NFQ19DSEFOTkVMOworCWNhc2UgTkw4MDIxMV9DSEFOX0hUNDBQTFVTOgorCQlyZXR1cm4gU0VDX0NIQU5ORUxfQUJPVkU7CisJY2FzZSBOTDgwMjExX0NIQU5fSFQ0ME1JTlVTOgorCQlyZXR1cm4gU0VDX0NIQU5ORUxfQkVMT1c7CisJZGVmYXVsdDoKKwkJcmV0dXJuIE5PX1NFQ19DSEFOTkVMOworCX0KK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gbWFwcyB0aGUgZHJpdmVyIGNoYW5uZWwgdHlwZSBpbnRvIG5sODAyLjExIGNoYW5uZWwgdHlwZS4KKyAqCisgKiBUaGUgbWFwcGluZyBpcyBhcyBmb2xsb3dzIC0KKyAqICAgICAgTk9fU0VDX0NIQU5ORUwgICAgICAtPiBOTDgwMjExX0NIQU5fSFQyMAorICogICAgICBTRUNfQ0hBTk5FTF9BQk9WRSAgIC0+IE5MODAyMTFfQ0hBTl9IVDQwUExVUworICogICAgICBTRUNfQ0hBTk5FTF9CRUxPVyAgIC0+IE5MODAyMTFfQ0hBTl9IVDQwTUlOVVMKKyAqICAgICAgT3RoZXJzICAgICAgICAgICAgICAtPiBOTDgwMjExX0NIQU5fSFQyMAorICovCitzdGF0aWMgZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZQorbXdpZmlleF9jaGFubmVsc190b19jZmc4MDIxMV9jaGFubmVsX3R5cGUoaW50IGNoYW5uZWxfdHlwZSkKK3sKKwlzd2l0Y2ggKGNoYW5uZWxfdHlwZSkgeworCWNhc2UgTk9fU0VDX0NIQU5ORUw6CisJCXJldHVybiBOTDgwMjExX0NIQU5fSFQyMDsKKwljYXNlIFNFQ19DSEFOTkVMX0FCT1ZFOgorCQlyZXR1cm4gTkw4MDIxMV9DSEFOX0hUNDBQTFVTOworCWNhc2UgU0VDX0NIQU5ORUxfQkVMT1c6CisJCXJldHVybiBOTDgwMjExX0NIQU5fSFQ0ME1JTlVTOworCWRlZmF1bHQ6CisJCXJldHVybiBOTDgwMjExX0NIQU5fSFQyMDsKKwl9Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIFdFUCBpcyBzZXQuCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfaXNfYWxnX3dlcCh1MzIgY2lwaGVyKQoreworCXN3aXRjaCAoY2lwaGVyKSB7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDoKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDoKKwkJcmV0dXJuIDE7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgZnJvbSBrZXJuZWwgd2lwaHkgc3RydWN0dXJlLgorICovCitzdGF0aWMgdm9pZCAqbXdpZmlleF9jZmc4MDIxMV9nZXRfcHJpdihzdHJ1Y3Qgd2lwaHkgKndpcGh5KQoreworCXJldHVybiAodm9pZCAqKSAoKih1bnNpZ25lZCBsb25nICopIHdpcGh5X3ByaXYod2lwaHkpKTsKK30KKworLyoKKyAqIENGRzgwMi4xMSBvcGVyYXRpb24gaGFuZGxlciB0byBkZWxldGUgYSBuZXR3b3JrIGtleS4KKyAqLworc3RhdGljIGludAorbXdpZmlleF9jZmc4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIpCit7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9IG13aWZpZXhfY2ZnODAyMTFfZ2V0X3ByaXYod2lwaHkpOworCisJaWYgKG13aWZpZXhfc2V0X2VuY29kZShwcml2LCBOVUxMLCAwLCBrZXlfaW5kZXgsIDEpKSB7CisJCXdpcGh5X2Vycih3aXBoeSwgImRlbGV0aW5nIHRoZSBjcnlwdG8ga2V5c1xuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXdpcGh5X2RiZyh3aXBoeSwgImluZm86IGNyeXB0byBrZXlzIGRlbGV0ZWRcbiIpOworCXJldHVybiAwOworfQorCisvKgorICogQ0ZHODAyLjExIG9wZXJhdGlvbiBoYW5kbGVyIHRvIHNldCBUeCBwb3dlci4KKyAqLworc3RhdGljIGludAorbXdpZmlleF9jZmc4MDIxMV9zZXRfdHhfcG93ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCSAgICAgIGVudW0gbmw4MDIxMV90eF9wb3dlcl9zZXR0aW5nIHR5cGUsCisJCQkgICAgICBpbnQgZGJtKQoreworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPSBtd2lmaWV4X2NmZzgwMjExX2dldF9wcml2KHdpcGh5KTsKKwlzdHJ1Y3QgbXdpZmlleF9wb3dlcl9jZmcgcG93ZXJfY2ZnOworCisJaWYgKHR5cGUgPT0gTkw4MDIxMV9UWF9QT1dFUl9GSVhFRCkgeworCQlwb3dlcl9jZmcuaXNfcG93ZXJfYXV0byA9IDA7CisJCXBvd2VyX2NmZy5wb3dlcl9sZXZlbCA9IGRibTsKKwl9IGVsc2UgeworCQlwb3dlcl9jZmcuaXNfcG93ZXJfYXV0byA9IDE7CisJfQorCisJcmV0dXJuIG13aWZpZXhfc2V0X3R4X3Bvd2VyKHByaXYsICZwb3dlcl9jZmcpOworfQorCisvKgorICogQ0ZHODAyLjExIG9wZXJhdGlvbiBoYW5kbGVyIHRvIHNldCBQb3dlciBTYXZlIG9wdGlvbi4KKyAqCisgKiBUaGUgdGltZW91dCB2YWx1ZSwgaWYgcHJvdmlkZWQsIGlzIGN1cnJlbnRseSBpZ25vcmVkLgorICovCitzdGF0aWMgaW50Cittd2lmaWV4X2NmZzgwMjExX3NldF9wb3dlcl9tZ210KHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlib29sIGVuYWJsZWQsIGludCB0aW1lb3V0KQoreworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPSBtd2lmaWV4X2NmZzgwMjExX2dldF9wcml2KHdpcGh5KTsKKwl1MzIgcHNfbW9kZTsKKworCWlmICh0aW1lb3V0KQorCQl3aXBoeV9kYmcod2lwaHksCisJCQkiaW5mbzogaWdub3JpbmcgdGhlIHRpbWVvdXQgdmFsdWUiCisJCQkiIGZvciBJRUVFIHBvd2VyIHNhdmVcbiIpOworCisJcHNfbW9kZSA9IGVuYWJsZWQ7CisKKwlyZXR1cm4gbXdpZmlleF9kcnZfc2V0X3Bvd2VyKHByaXYsICZwc19tb2RlKTsKK30KKworLyoKKyAqIENGRzgwMi4xMSBvcGVyYXRpb24gaGFuZGxlciB0byBzZXQgdGhlIGRlZmF1bHQgbmV0d29yayBrZXkuCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfY2ZnODAyMTFfc2V0X2RlZmF1bHRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJIHU4IGtleV9pbmRleCwgYm9vbCB1bmljYXN0LAorCQkJCSBib29sIG11bHRpY2FzdCkKK3sKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0gbXdpZmlleF9jZmc4MDIxMV9nZXRfcHJpdih3aXBoeSk7CisKKwkvKiBSZXR1cm4gaWYgV0VQIGtleSBub3QgY29uZmlndXJlZCAqLworCWlmIChwcml2LT5zZWNfaW5mby53ZXBfc3RhdHVzID09IE1XSUZJRVhfODAyXzExX1dFUF9ESVNBQkxFRCkKKwkJcmV0dXJuIDA7CisKKwlpZiAobXdpZmlleF9zZXRfZW5jb2RlKHByaXYsIE5VTEwsIDAsIGtleV9pbmRleCwgMCkpIHsKKwkJd2lwaHlfZXJyKHdpcGh5LCAic2V0IGRlZmF1bHQgVHgga2V5IGluZGV4XG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDRkc4MDIuMTEgb3BlcmF0aW9uIGhhbmRsZXIgdG8gYWRkIGEgbmV0d29yayBrZXkuCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfY2ZnODAyMTFfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSwgY29uc3QgdTggKm1hY19hZGRyLAorCQkJIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9IG13aWZpZXhfY2ZnODAyMTFfZ2V0X3ByaXYod2lwaHkpOworCisJaWYgKG13aWZpZXhfc2V0X2VuY29kZShwcml2LCBwYXJhbXMtPmtleSwgcGFyYW1zLT5rZXlfbGVuLAorCQkJCQkJCWtleV9pbmRleCwgMCkpIHsKKwkJd2lwaHlfZXJyKHdpcGh5LCAiY3J5cHRvIGtleXMgYWRkZWRcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgZG9tYWluIGluZm9ybWF0aW9uIHRvIHRoZSBmaXJtd2FyZS4KKyAqCisgKiBUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGFyZSBwYXNzZWQgdG8gdGhlIGZpcm13YXJlIC0KKyAqICAgICAgLSBDb3VudHJ5IGNvZGVzCisgKiAgICAgIC0gU3ViIGJhbmRzIChmaXJzdCBjaGFubmVsLCBudW1iZXIgb2YgY2hhbm5lbHMsIG1heGltdW0gVHggcG93ZXIpCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9zZW5kX2RvbWFpbl9pbmZvX2NtZF9mdyhzdHJ1Y3Qgd2lwaHkgKndpcGh5KQoreworCXU4IG5vX29mX3RyaXBsZXQgPSAwOworCXN0cnVjdCBpZWVlODAyMTFfY291bnRyeV9pZV90cmlwbGV0ICp0OworCXU4IG5vX29mX3BhcnNlZF9jaGFuID0gMDsKKwl1OCBmaXJzdF9jaGFuID0gMCwgbmV4dF9jaGFuID0gMCwgbWF4X3B3ciA9IDA7CisJdTggaSwgZmxhZyA9IDA7CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2g7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9IG13aWZpZXhfY2ZnODAyMTFfZ2V0X3ByaXYod2lwaHkpOworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCBtd2lmaWV4XzgwMl8xMWRfZG9tYWluX3JlZyAqZG9tYWluX2luZm8gPSAmYWRhcHRlci0+ZG9tYWluX3JlZzsKKworCS8qIFNldCBjb3VudHJ5IGNvZGUgKi8KKwlkb21haW5faW5mby0+Y291bnRyeV9jb2RlWzBdID0gcHJpdi0+Y291bnRyeV9jb2RlWzBdOworCWRvbWFpbl9pbmZvLT5jb3VudHJ5X2NvZGVbMV0gPSBwcml2LT5jb3VudHJ5X2NvZGVbMV07CisJZG9tYWluX2luZm8tPmNvdW50cnlfY29kZVsyXSA9ICcgJzsKKworCWJhbmQgPSBtd2lmaWV4X2JhbmRfdG9fcmFkaW9fdHlwZShhZGFwdGVyLT5jb25maWdfYmFuZHMpOworCWlmICghd2lwaHktPmJhbmRzW2JhbmRdKSB7CisJCXdpcGh5X2Vycih3aXBoeSwgIjExRDogc2V0dGluZyBkb21haW4gaW5mbyBpbiBGV1xuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlzYmFuZCA9IHdpcGh5LT5iYW5kc1tiYW5kXTsKKworCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9jaGFubmVscyA7IGkrKykgeworCQljaCA9ICZzYmFuZC0+Y2hhbm5lbHNbaV07CisJCWlmIChjaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkKKwkJCWNvbnRpbnVlOworCisJCWlmICghZmxhZykgeworCQkJZmxhZyA9IDE7CisJCQlmaXJzdF9jaGFuID0gKHUzMikgY2gtPmh3X3ZhbHVlOworCQkJbmV4dF9jaGFuID0gZmlyc3RfY2hhbjsKKwkJCW1heF9wd3IgPSBjaC0+bWF4X3Bvd2VyOworCQkJbm9fb2ZfcGFyc2VkX2NoYW4gPSAxOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoY2gtPmh3X3ZhbHVlID09IG5leHRfY2hhbiArIDEgJiYKKwkJCQljaC0+bWF4X3Bvd2VyID09IG1heF9wd3IpIHsKKwkJCW5leHRfY2hhbisrOworCQkJbm9fb2ZfcGFyc2VkX2NoYW4rKzsKKwkJfSBlbHNlIHsKKwkJCXQgPSAmZG9tYWluX2luZm8tPnRyaXBsZXRbbm9fb2ZfdHJpcGxldF07CisJCQl0LT5jaGFucy5maXJzdF9jaGFubmVsID0gZmlyc3RfY2hhbjsKKwkJCXQtPmNoYW5zLm51bV9jaGFubmVscyA9IG5vX29mX3BhcnNlZF9jaGFuOworCQkJdC0+Y2hhbnMubWF4X3Bvd2VyID0gbWF4X3B3cjsKKwkJCW5vX29mX3RyaXBsZXQrKzsKKwkJCWZpcnN0X2NoYW4gPSAodTMyKSBjaC0+aHdfdmFsdWU7CisJCQluZXh0X2NoYW4gPSBmaXJzdF9jaGFuOworCQkJbWF4X3B3ciA9IGNoLT5tYXhfcG93ZXI7CisJCQlub19vZl9wYXJzZWRfY2hhbiA9IDE7CisJCX0KKwl9CisKKwlpZiAoZmxhZykgeworCQl0ID0gJmRvbWFpbl9pbmZvLT50cmlwbGV0W25vX29mX3RyaXBsZXRdOworCQl0LT5jaGFucy5maXJzdF9jaGFubmVsID0gZmlyc3RfY2hhbjsKKwkJdC0+Y2hhbnMubnVtX2NoYW5uZWxzID0gbm9fb2ZfcGFyc2VkX2NoYW47CisJCXQtPmNoYW5zLm1heF9wb3dlciA9IG1heF9wd3I7CisJCW5vX29mX3RyaXBsZXQrKzsKKwl9CisKKwlkb21haW5faW5mby0+bm9fb2ZfdHJpcGxldCA9IG5vX29mX3RyaXBsZXQ7CisKKwlpZiAobXdpZmlleF9zZW5kX2NtZF9hc3luYyhwcml2LCBIb3N0Q21kX0NNRF84MDJfMTFEX0RPTUFJTl9JTkZPLAorCQkJCSAgICAgSG9zdENtZF9BQ1RfR0VOX1NFVCwgMCwgTlVMTCkpIHsKKwkJd2lwaHlfZXJyKHdpcGh5LCAiMTFEOiBzZXR0aW5nIGRvbWFpbiBpbmZvIGluIEZXXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogQ0ZHODAyLjExIHJlZ3VsYXRvcnkgZG9tYWluIGNhbGxiYWNrIGZ1bmN0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHJlZ3VsYXRvcnkgZG9tYWluIGlzIGNoYW5nZWQgZHVlIHRvIHRoZQorICogZm9sbG93aW5nIHJlYXNvbnMgLQorICogICAgICAtIFNldCBieSBkcml2ZXIKKyAqICAgICAgLSBTZXQgYnkgc3lzdGVtIGNvcmUKKyAqICAgICAgLSBTZXQgYnkgdXNlcgorICogICAgICAtIFNldCBidCBDb3VudHJ5IElFCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9yZWdfbm90aWZpZXIoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0gbXdpZmlleF9jZmc4MDIxMV9nZXRfcHJpdih3aXBoeSk7CisKKwl3aXBoeV9kYmcod2lwaHksICJpbmZvOiBjZmc4MDIxMSByZWd1bGF0b3J5IGRvbWFpbiBjYWxsYmFjayBmb3IgZG9tYWluIgorCQkJIiAlYyVjXG4iLCByZXF1ZXN0LT5hbHBoYTJbMF0sIHJlcXVlc3QtPmFscGhhMlsxXSk7CisKKwltZW1jcHkocHJpdi0+Y291bnRyeV9jb2RlLCByZXF1ZXN0LT5hbHBoYTIsIHNpemVvZihyZXF1ZXN0LT5hbHBoYTIpKTsKKworCXN3aXRjaCAocmVxdWVzdC0+aW5pdGlhdG9yKSB7CisJY2FzZSBOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSOgorCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkU6CisJY2FzZSBOTDgwMjExX1JFR0RPTV9TRVRfQllfVVNFUjoKKwkJYnJlYWs7CisJCS8qIFRvZG86IGFwcGx5IGRyaXZlciBzcGVjaWZpYyBjaGFuZ2VzIGluIGNoYW5uZWwgZmxhZ3MgYmFzZWQKKwkJICAgb24gdGhlIHJlcXVlc3QgaW5pdGlhdG9yIGlmIG5lY2Vzc2FyeS4gKi8KKwljYXNlIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFOgorCQlicmVhazsKKwl9CisJbXdpZmlleF9zZW5kX2RvbWFpbl9pbmZvX2NtZF9mdyh3aXBoeSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgUkYgY2hhbm5lbC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgbXVsdGlwbGUgSU9DVEwgcmVxdWVzdHMsIHBvcHVsYXRlcyB0aGVtIGFjY29yZGluZ2x5CisgKiBhbmQgaXNzdWVzIHRoZW0gdG8gc2V0IHRoZSBiYW5kL2NoYW5uZWwgYW5kIGZyZXF1ZW5jeS4KKyAqLworc3RhdGljIGludAorbXdpZmlleF9zZXRfcmZfY2hhbm5lbChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAorCQkgICAgICAgZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUpCit7CisJc3RydWN0IG13aWZpZXhfY2hhbl9mcmVxX3Bvd2VyIGNmcDsKKwlzdHJ1Y3QgbXdpZmlleF9kc19iYW5kX2NmZyBiYW5kX2NmZzsKKwl1MzIgY29uZmlnX2JhbmRzID0gMDsKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gcHJpdi0+d2Rldi0+d2lwaHk7CisKKwlpZiAoY2hhbikgeworCQltZW1zZXQoJmJhbmRfY2ZnLCAwLCBzaXplb2YoYmFuZF9jZmcpKTsKKwkJLyogU2V0IGFwcHJvcHJpYXRlIGJhbmRzICovCisJCWlmIChjaGFuLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopCisJCQljb25maWdfYmFuZHMgPSBCQU5EX0IgfCBCQU5EX0cgfCBCQU5EX0dOOworCQllbHNlCisJCQljb25maWdfYmFuZHMgPSBCQU5EX0FOIHwgQkFORF9BOworCQlpZiAocHJpdi0+YnNzX21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTgorCQkgICAgfHwgcHJpdi0+YnNzX21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQpIHsKKwkJCWJhbmRfY2ZnLmNvbmZpZ19iYW5kcyA9IGNvbmZpZ19iYW5kczsKKwkJfSBlbHNlIGlmIChwcml2LT5ic3NfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQkJYmFuZF9jZmcuY29uZmlnX2JhbmRzID0gY29uZmlnX2JhbmRzOworCQkJYmFuZF9jZmcuYWRob2Nfc3RhcnRfYmFuZCA9IGNvbmZpZ19iYW5kczsKKwkJfQorCisJCWJhbmRfY2ZnLnNlY19jaGFuX29mZnNldCA9CisJCQltd2lmaWV4X2NmZzgwMjExX2NoYW5uZWxfdHlwZV90b19td2lmaWV4X2NoYW5uZWxzCisJCQkoY2hhbm5lbF90eXBlKTsKKworCQlpZiAobXdpZmlleF9zZXRfcmFkaW9fYmFuZF9jZmcocHJpdiwgJmJhbmRfY2ZnKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCW13aWZpZXhfc2VuZF9kb21haW5faW5mb19jbWRfZncod2lwaHkpOworCX0KKworCXdpcGh5X2RiZyh3aXBoeSwgImluZm86IHNldHRpbmcgYmFuZCAlZCwgY2hhbm5lbCBvZmZzZXQgJWQgYW5kICIKKwkJIm1vZGUgJWRcbiIsIGNvbmZpZ19iYW5kcywgYmFuZF9jZmcuc2VjX2NoYW5fb2Zmc2V0LAorCQlwcml2LT5ic3NfbW9kZSk7CisJaWYgKCFjaGFuKQorCQlyZXR1cm4gMDsKKworCW1lbXNldCgmY2ZwLCAwLCBzaXplb2YoY2ZwKSk7CisJY2ZwLmZyZXEgPSBjaGFuLT5jZW50ZXJfZnJlcTsKKwljZnAuY2hhbm5lbCA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChjaGFuLT5jZW50ZXJfZnJlcSk7CisKKwlpZiAobXdpZmlleF9ic3Nfc2V0X2NoYW5uZWwocHJpdiwgJmNmcCkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIG13aWZpZXhfZHJ2X2NoYW5nZV9hZGhvY19jaGFuKHByaXYsIGNmcC5jaGFubmVsKTsKK30KKworLyoKKyAqIENGRzgwMi4xMSBvcGVyYXRpb24gaGFuZGxlciB0byBzZXQgY2hhbm5lbC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgd2hlbiBzdGF0aW9uIGlzIG5vdCBjb25uZWN0ZWQuCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfY2ZnODAyMTFfc2V0X2NoYW5uZWwoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAorCQkJICAgICBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSkKK3sKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0gbXdpZmlleF9jZmc4MDIxMV9nZXRfcHJpdih3aXBoeSk7CisKKwlpZiAocHJpdi0+bWVkaWFfY29ubmVjdGVkKSB7CisJCXdpcGh5X2Vycih3aXBoeSwgIlRoaXMgc2V0dGluZyBpcyB2YWxpZCBvbmx5IHdoZW4gc3RhdGlvbiAiCisJCQkJImlzIG5vdCBjb25uZWN0ZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gbXdpZmlleF9zZXRfcmZfY2hhbm5lbChwcml2LCBjaGFuLCBjaGFubmVsX3R5cGUpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBmcmFnbWVudGF0aW9uIHRocmVzaG9sZC4KKyAqCisgKiBUaGUgZnJhZ21lbnRhdGlvbiB0aHJlc2hvbGQgdmFsdWUgbXVzdCBsaWUgYmV0d2VlbiBNV0lGSUVYX0ZSQUdfTUlOX1ZBTFVFCisgKiBhbmQgTVdJRklFWF9GUkFHX01BWF9WQUxVRS4KKyAqLworc3RhdGljIGludAorbXdpZmlleF9zZXRfZnJhZyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1MzIgZnJhZ190aHIpCit7CisJaW50IHJldDsKKworCWlmIChmcmFnX3RociA8IE1XSUZJRVhfRlJBR19NSU5fVkFMVUUKKwkgICAgfHwgZnJhZ190aHIgPiBNV0lGSUVYX0ZSQUdfTUFYX1ZBTFVFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFNlbmQgcmVxdWVzdCB0byBmaXJtd2FyZSAqLworCXJldCA9IG13aWZpZXhfc2VuZF9jbWRfc3luYyhwcml2LCBIb3N0Q21kX0NNRF84MDJfMTFfU05NUF9NSUIsCisJCQkJICAgIEhvc3RDbWRfQUNUX0dFTl9TRVQsIEZSQUdfVEhSRVNIX0ksCisJCQkJICAgICZmcmFnX3Rocik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBSVFMgdGhyZXNob2xkLgorCisgKiBUaGUgcnRzIHZhbHVlIG11c3QgbGllIGJldHdlZW4gTVdJRklFWF9SVFNfTUlOX1ZBTFVFCisgKiBhbmQgTVdJRklFWF9SVFNfTUFYX1ZBTFVFLgorICovCitzdGF0aWMgaW50Cittd2lmaWV4X3NldF9ydHMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTMyIHJ0c190aHIpCit7CisJaWYgKHJ0c190aHIgPCBNV0lGSUVYX1JUU19NSU5fVkFMVUUgfHwgcnRzX3RociA+IE1XSUZJRVhfUlRTX01BWF9WQUxVRSkKKwkJcnRzX3RociA9IE1XSUZJRVhfUlRTX01BWF9WQUxVRTsKKworCXJldHVybiBtd2lmaWV4X3NlbmRfY21kX3N5bmMocHJpdiwgSG9zdENtZF9DTURfODAyXzExX1NOTVBfTUlCLAorCQkJCSAgICBIb3N0Q21kX0FDVF9HRU5fU0VULCBSVFNfVEhSRVNIX0ksCisJCQkJICAgICZydHNfdGhyKTsKK30KKworLyoKKyAqIENGRzgwMi4xMSBvcGVyYXRpb24gaGFuZGxlciB0byBzZXQgd2lwaHkgcGFyYW1ldGVycy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgUlRTIHRocmVzaG9sZCBhbmQgdGhlCisgKiBGcmFnbWVudGF0aW9uIHRocmVzaG9sZCBvZiB0aGUgZHJpdmVyLgorICovCitzdGF0aWMgaW50Cittd2lmaWV4X2NmZzgwMjExX3NldF93aXBoeV9wYXJhbXMoc3RydWN0IHdpcGh5ICp3aXBoeSwgdTMyIGNoYW5nZWQpCit7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9IG13aWZpZXhfY2ZnODAyMTFfZ2V0X3ByaXYod2lwaHkpOworCWludCByZXQgPSAwOworCisJaWYgKGNoYW5nZWQgJiBXSVBIWV9QQVJBTV9SVFNfVEhSRVNIT0xEKSB7CisJCXJldCA9IG13aWZpZXhfc2V0X3J0cyhwcml2LCB3aXBoeS0+cnRzX3RocmVzaG9sZCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChjaGFuZ2VkICYgV0lQSFlfUEFSQU1fRlJBR19USFJFU0hPTEQpCisJCXJldCA9IG13aWZpZXhfc2V0X2ZyYWcocHJpdiwgd2lwaHktPmZyYWdfdGhyZXNob2xkKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBDRkc4MDIuMTEgb3BlcmF0aW9uIGhhbmRsZXIgdG8gY2hhbmdlIGludGVyZmFjZSB0eXBlLgorICovCitzdGF0aWMgaW50Cittd2lmaWV4X2NmZzgwMjExX2NoYW5nZV92aXJ0dWFsX2ludGYoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUsIHUzMiAqZmxhZ3MsCisJCQkJICAgICBzdHJ1Y3QgdmlmX3BhcmFtcyAqcGFyYW1zKQoreworCWludCByZXQ7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9IG13aWZpZXhfbmV0ZGV2X2dldF9wcml2KGRldik7CisKKwlpZiAocHJpdi0+YnNzX21vZGUgPT0gdHlwZSkgeworCQl3aXBoeV93YXJuKHdpcGh5LCAiYWxyZWFkeSBzZXQgdG8gcmVxdWlyZWQgdHlwZVxuIik7CisJCXJldHVybiAwOworCX0KKworCXByaXYtPmJzc19tb2RlID0gdHlwZTsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCWRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlID0gTkw4MDIxMV9JRlRZUEVfQURIT0M7CisJCXdpcGh5X2RiZyh3aXBoeSwgImluZm86IHNldHRpbmcgaW50ZXJmYWNlIHR5cGUgdG8gYWRob2NcbiIpOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCWRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlID0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTjsKKwkJd2lwaHlfZGJnKHdpcGh5LCAiaW5mbzogc2V0dGluZyBpbnRlcmZhY2UgdHlwZSB0byBtYW5hZ2VkXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRDoKKwkJZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOworCQl3aXBoeV9kYmcod2lwaHksICJpbmZvOiBzZXR0aW5nIGludGVyZmFjZSB0eXBlIHRvIGF1dG9cbiIpOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQl3aXBoeV9lcnIod2lwaHksICJ1bmtub3duIGludGVyZmFjZSB0eXBlOiAlZFxuIiwgdHlwZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW13aWZpZXhfZGVhdXRoZW50aWNhdGUocHJpdiwgTlVMTCk7CisKKwlwcml2LT5zZWNfaW5mby5hdXRoZW50aWNhdGlvbl9tb2RlID0gTkw4MDIxMV9BVVRIVFlQRV9PUEVOX1NZU1RFTTsKKworCXJldCA9IG13aWZpZXhfc2VuZF9jbWRfc3luYyhwcml2LCBIb3N0Q21kX0NNRF9TRVRfQlNTX01PREUsCisJCQkJICAgIEhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsIE5VTEwpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZHVtcHMgdGhlIHN0YXRpb24gaW5mb3JtYXRpb24gb24gYSBidWZmZXIuCisgKgorICogVGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhcmUgc2hvd24gLQorICogICAgICAtIFRvdGFsIGJ5dGVzIHRyYW5zbWl0dGVkCisgKiAgICAgIC0gVG90YWwgYnl0ZXMgcmVjZWl2ZWQKKyAqICAgICAgLSBUb3RhbCBwYWNrZXRzIHRyYW5zbWl0dGVkCisgKiAgICAgIC0gVG90YWwgcGFja2V0cyByZWNlaXZlZAorICogICAgICAtIFNpZ25hbCBxdWFsaXR5IGxldmVsCisgKiAgICAgIC0gVHJhbnNtaXNzaW9uIHJhdGUKKyAqLworc3RhdGljIGludAorbXdpZmlleF9kdW1wX3N0YXRpb25faW5mbyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbykKK3sKKwlzdHJ1Y3QgbXdpZmlleF9kc19nZXRfc2lnbmFsIHNpZ25hbDsKKwlzdHJ1Y3QgbXdpZmlleF9yYXRlX2NmZyByYXRlOworCWludCByZXQgPSAwOworCisJc2luZm8tPmZpbGxlZCA9IFNUQVRJT05fSU5GT19SWF9CWVRFUyB8IFNUQVRJT05fSU5GT19UWF9CWVRFUyB8CisJCVNUQVRJT05fSU5GT19SWF9QQUNLRVRTIHwKKwkJU1RBVElPTl9JTkZPX1RYX1BBQ0tFVFMKKwkJfCBTVEFUSU9OX0lORk9fU0lHTkFMIHwgU1RBVElPTl9JTkZPX1RYX0JJVFJBVEU7CisKKwkvKiBHZXQgc2lnbmFsIGluZm9ybWF0aW9uIGZyb20gdGhlIGZpcm13YXJlICovCisJbWVtc2V0KCZzaWduYWwsIDAsIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9kc19nZXRfc2lnbmFsKSk7CisJaWYgKG13aWZpZXhfZ2V0X3NpZ25hbF9pbmZvKHByaXYsICZzaWduYWwpKSB7CisJCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LCAiZ2V0dGluZyBzaWduYWwgaW5mb3JtYXRpb25cbiIpOworCQlyZXQgPSAtRUZBVUxUOworCX0KKworCWlmIChtd2lmaWV4X2Rydl9nZXRfZGF0YV9yYXRlKHByaXYsICZyYXRlKSkgeworCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgImdldHRpbmcgZGF0YSByYXRlXG4iKTsKKwkJcmV0ID0gLUVGQVVMVDsKKwl9CisKKwlzaW5mby0+cnhfYnl0ZXMgPSBwcml2LT5zdGF0cy5yeF9ieXRlczsKKwlzaW5mby0+dHhfYnl0ZXMgPSBwcml2LT5zdGF0cy50eF9ieXRlczsKKwlzaW5mby0+cnhfcGFja2V0cyA9IHByaXYtPnN0YXRzLnJ4X3BhY2tldHM7CisJc2luZm8tPnR4X3BhY2tldHMgPSBwcml2LT5zdGF0cy50eF9wYWNrZXRzOworCXNpbmZvLT5zaWduYWwgPSBwcml2LT53X3N0YXRzLnF1YWwubGV2ZWw7CisJc2luZm8tPnR4cmF0ZS5sZWdhY3kgPSByYXRlLnJhdGU7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQ0ZHODAyLjExIG9wZXJhdGlvbiBoYW5kbGVyIHRvIGdldCBzdGF0aW9uIGluZm9ybWF0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gb25seSB3b3JrcyBpbiBjb25uZWN0ZWQgbW9kZSwgYW5kIGR1bXBzIHRoZQorICogcmVxdWVzdGVkIHN0YXRpb24gaW5mb3JtYXRpb24sIGlmIGF2YWlsYWJsZS4KKyAqLworc3RhdGljIGludAorbXdpZmlleF9jZmc4MDIxMV9nZXRfc3RhdGlvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICB1OCAqbWFjLCBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbykKK3sKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0gbXdpZmlleF9uZXRkZXZfZ2V0X3ByaXYoZGV2KTsKKworCW13aWZpZXhfZHVtcF9zdGF0aW9uX2luZm8ocHJpdiwgc2luZm8pOworCisJaWYgKCFwcml2LT5tZWRpYV9jb25uZWN0ZWQpCisJCXJldHVybiAtRU5PRU5UOworCWlmIChtZW1jbXAobWFjLCBwcml2LT5jZmdfYnNzaWQsIEVUSF9BTEVOKSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlyZXR1cm4gbXdpZmlleF9kdW1wX3N0YXRpb25faW5mbyhwcml2LCBzaW5mbyk7Cit9CisKKy8qIFN1cHBvcnRlZCByYXRlcyB0byBiZSBhZHZlcnRpc2VkIHRvIHRoZSBjZmc4MDIxMSAqLworCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yYXRlIG13aWZpZXhfcmF0ZXNbXSA9IHsKKwl7LmJpdHJhdGUgPSAxMCwgLmh3X3ZhbHVlID0gMiwgfSwKKwl7LmJpdHJhdGUgPSAyMCwgLmh3X3ZhbHVlID0gNCwgfSwKKwl7LmJpdHJhdGUgPSA1NSwgLmh3X3ZhbHVlID0gMTEsIH0sCisJey5iaXRyYXRlID0gMTEwLCAuaHdfdmFsdWUgPSAyMiwgfSwKKwl7LmJpdHJhdGUgPSAyMjAsIC5od192YWx1ZSA9IDQ0LCB9LAorCXsuYml0cmF0ZSA9IDYwLCAuaHdfdmFsdWUgPSAxMiwgfSwKKwl7LmJpdHJhdGUgPSA5MCwgLmh3X3ZhbHVlID0gMTgsIH0sCisJey5iaXRyYXRlID0gMTIwLCAuaHdfdmFsdWUgPSAyNCwgfSwKKwl7LmJpdHJhdGUgPSAxODAsIC5od192YWx1ZSA9IDM2LCB9LAorCXsuYml0cmF0ZSA9IDI0MCwgLmh3X3ZhbHVlID0gNDgsIH0sCisJey5iaXRyYXRlID0gMzYwLCAuaHdfdmFsdWUgPSA3MiwgfSwKKwl7LmJpdHJhdGUgPSA0ODAsIC5od192YWx1ZSA9IDk2LCB9LAorCXsuYml0cmF0ZSA9IDU0MCwgLmh3X3ZhbHVlID0gMTA4LCB9LAorCXsuYml0cmF0ZSA9IDcyMCwgLmh3X3ZhbHVlID0gMTQ0LCB9LAorfTsKKworLyogQ2hhbm5lbCBkZWZpbml0aW9ucyB0byBiZSBhZHZlcnRpc2VkIHRvIGNmZzgwMjExICovCisKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgbXdpZmlleF9jaGFubmVsc18yZ2h6W10gPSB7CisJey5jZW50ZXJfZnJlcSA9IDI0MTIsIC5od192YWx1ZSA9IDEsIH0sCisJey5jZW50ZXJfZnJlcSA9IDI0MTcsIC5od192YWx1ZSA9IDIsIH0sCisJey5jZW50ZXJfZnJlcSA9IDI0MjIsIC5od192YWx1ZSA9IDMsIH0sCisJey5jZW50ZXJfZnJlcSA9IDI0MjcsIC5od192YWx1ZSA9IDQsIH0sCisJey5jZW50ZXJfZnJlcSA9IDI0MzIsIC5od192YWx1ZSA9IDUsIH0sCisJey5jZW50ZXJfZnJlcSA9IDI0MzcsIC5od192YWx1ZSA9IDYsIH0sCisJey5jZW50ZXJfZnJlcSA9IDI0NDIsIC5od192YWx1ZSA9IDcsIH0sCisJey5jZW50ZXJfZnJlcSA9IDI0NDcsIC5od192YWx1ZSA9IDgsIH0sCisJey5jZW50ZXJfZnJlcSA9IDI0NTIsIC5od192YWx1ZSA9IDksIH0sCisJey5jZW50ZXJfZnJlcSA9IDI0NTcsIC5od192YWx1ZSA9IDEwLCB9LAorCXsuY2VudGVyX2ZyZXEgPSAyNDYyLCAuaHdfdmFsdWUgPSAxMSwgfSwKKwl7LmNlbnRlcl9mcmVxID0gMjQ2NywgLmh3X3ZhbHVlID0gMTIsIH0sCisJey5jZW50ZXJfZnJlcSA9IDI0NzIsIC5od192YWx1ZSA9IDEzLCB9LAorCXsuY2VudGVyX2ZyZXEgPSAyNDg0LCAuaHdfdmFsdWUgPSAxNCwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIG13aWZpZXhfYmFuZF8yZ2h6ID0geworCS5jaGFubmVscyA9IG13aWZpZXhfY2hhbm5lbHNfMmdoeiwKKwkubl9jaGFubmVscyA9IEFSUkFZX1NJWkUobXdpZmlleF9jaGFubmVsc18yZ2h6KSwKKwkuYml0cmF0ZXMgPSBtd2lmaWV4X3JhdGVzLAorCS5uX2JpdHJhdGVzID0gMTQsCit9OworCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIG13aWZpZXhfY2hhbm5lbHNfNWdoeltdID0geworCXsuY2VudGVyX2ZyZXEgPSA1MDQwLCAuaHdfdmFsdWUgPSA4LCB9LAorCXsuY2VudGVyX2ZyZXEgPSA1MDYwLCAuaHdfdmFsdWUgPSAxMiwgfSwKKwl7LmNlbnRlcl9mcmVxID0gNTA4MCwgLmh3X3ZhbHVlID0gMTYsIH0sCisJey5jZW50ZXJfZnJlcSA9IDUxNzAsIC5od192YWx1ZSA9IDM0LCB9LAorCXsuY2VudGVyX2ZyZXEgPSA1MTkwLCAuaHdfdmFsdWUgPSAzOCwgfSwKKwl7LmNlbnRlcl9mcmVxID0gNTIxMCwgLmh3X3ZhbHVlID0gNDIsIH0sCisJey5jZW50ZXJfZnJlcSA9IDUyMzAsIC5od192YWx1ZSA9IDQ2LCB9LAorCXsuY2VudGVyX2ZyZXEgPSA1MTgwLCAuaHdfdmFsdWUgPSAzNiwgfSwKKwl7LmNlbnRlcl9mcmVxID0gNTIwMCwgLmh3X3ZhbHVlID0gNDAsIH0sCisJey5jZW50ZXJfZnJlcSA9IDUyMjAsIC5od192YWx1ZSA9IDQ0LCB9LAorCXsuY2VudGVyX2ZyZXEgPSA1MjQwLCAuaHdfdmFsdWUgPSA0OCwgfSwKKwl7LmNlbnRlcl9mcmVxID0gNTI2MCwgLmh3X3ZhbHVlID0gNTIsIH0sCisJey5jZW50ZXJfZnJlcSA9IDUyODAsIC5od192YWx1ZSA9IDU2LCB9LAorCXsuY2VudGVyX2ZyZXEgPSA1MzAwLCAuaHdfdmFsdWUgPSA2MCwgfSwKKwl7LmNlbnRlcl9mcmVxID0gNTMyMCwgLmh3X3ZhbHVlID0gNjQsIH0sCisJey5jZW50ZXJfZnJlcSA9IDU1MDAsIC5od192YWx1ZSA9IDEwMCwgfSwKKwl7LmNlbnRlcl9mcmVxID0gNTUyMCwgLmh3X3ZhbHVlID0gMTA0LCB9LAorCXsuY2VudGVyX2ZyZXEgPSA1NTQwLCAuaHdfdmFsdWUgPSAxMDgsIH0sCisJey5jZW50ZXJfZnJlcSA9IDU1NjAsIC5od192YWx1ZSA9IDExMiwgfSwKKwl7LmNlbnRlcl9mcmVxID0gNTU4MCwgLmh3X3ZhbHVlID0gMTE2LCB9LAorCXsuY2VudGVyX2ZyZXEgPSA1NjAwLCAuaHdfdmFsdWUgPSAxMjAsIH0sCisJey5jZW50ZXJfZnJlcSA9IDU2MjAsIC5od192YWx1ZSA9IDEyNCwgfSwKKwl7LmNlbnRlcl9mcmVxID0gNTY0MCwgLmh3X3ZhbHVlID0gMTI4LCB9LAorCXsuY2VudGVyX2ZyZXEgPSA1NjYwLCAuaHdfdmFsdWUgPSAxMzIsIH0sCisJey5jZW50ZXJfZnJlcSA9IDU2ODAsIC5od192YWx1ZSA9IDEzNiwgfSwKKwl7LmNlbnRlcl9mcmVxID0gNTcwMCwgLmh3X3ZhbHVlID0gMTQwLCB9LAorCXsuY2VudGVyX2ZyZXEgPSA1NzQ1LCAuaHdfdmFsdWUgPSAxNDksIH0sCisJey5jZW50ZXJfZnJlcSA9IDU3NjUsIC5od192YWx1ZSA9IDE1MywgfSwKKwl7LmNlbnRlcl9mcmVxID0gNTc4NSwgLmh3X3ZhbHVlID0gMTU3LCB9LAorCXsuY2VudGVyX2ZyZXEgPSA1ODA1LCAuaHdfdmFsdWUgPSAxNjEsIH0sCisJey5jZW50ZXJfZnJlcSA9IDU4MjUsIC5od192YWx1ZSA9IDE2NSwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIG13aWZpZXhfYmFuZF81Z2h6ID0geworCS5jaGFubmVscyA9IG13aWZpZXhfY2hhbm5lbHNfNWdoeiwKKwkubl9jaGFubmVscyA9IEFSUkFZX1NJWkUobXdpZmlleF9jaGFubmVsc181Z2h6KSwKKwkuYml0cmF0ZXMgPSBtd2lmaWV4X3JhdGVzIC0gNCwKKwkubl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUobXdpZmlleF9yYXRlcykgKyA0LAorfTsKKworCisvKiBTdXBwb3J0ZWQgY3J5cHRvIGNpcGhlciBzdWl0cyB0byBiZSBhZHZlcnRpc2VkIHRvIGNmZzgwMjExICovCisKK3N0YXRpYyBjb25zdCB1MzIgbXdpZmlleF9jaXBoZXJfc3VpdGVzW10gPSB7CisJV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDAsCisJV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0LAorCVdMQU5fQ0lQSEVSX1NVSVRFX1RLSVAsCisJV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUCwKK307CisKKy8qCisgKiBDRkc4MDIuMTEgb3BlcmF0aW9uIGhhbmRsZXIgZm9yIGRpc2Nvbm5lY3Rpb24gcmVxdWVzdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHdvcmsgd2hlbiB0aGVyZSBpcyBhbHJlYWR5IGEgZGlzY29ubmVjdGlvbgorICogcHJvY2VkdXJlIGdvaW5nIG9uLgorICovCitzdGF0aWMgaW50Cittd2lmaWV4X2NmZzgwMjExX2Rpc2Nvbm5lY3Qoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICB1MTYgcmVhc29uX2NvZGUpCit7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9IG13aWZpZXhfbmV0ZGV2X2dldF9wcml2KGRldik7CisKKwlpZiAocHJpdi0+ZGlzY29ubmVjdCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXByaXYtPmRpc2Nvbm5lY3QgPSAxOworCWlmIChtd2lmaWV4X2RlYXV0aGVudGljYXRlKHByaXYsIE5VTEwpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXdpcGh5X2RiZyh3aXBoeSwgImluZm86IHN1Y2Nlc3NmdWxseSBkaXNjb25uZWN0ZWQgZnJvbSAlcE06IgorCQkiIHJlYXNvbiBjb2RlICVkXG4iLCBwcml2LT5jZmdfYnNzaWQsIHJlYXNvbl9jb2RlKTsKKworCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+Y2ZnX3dvcmtxdWV1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaW5mb3JtcyB0aGUgQ0ZHODAyLjExIHN1YnN5c3RlbSBvZiBhIG5ldyBJQlNTLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYXJlIHNlbnQgdG8gdGhlIENGRzgwMi4xMSBzdWJzeXN0ZW0KKyAqIHRvIHJlZ2lzdGVyIHRoZSBuZXcgSUJTUy4gSWYgd2UgZG8gbm90IHJlZ2lzdGVyIHRoZSBuZXcgSUJTUywKKyAqIGEga2VybmVsIHBhbmljIHdpbGwgcmVzdWx0LgorICogICAgICAtIFNTSUQKKyAqICAgICAgLSBTU0lEIGxlbmd0aAorICogICAgICAtIEJTU0lECisgKiAgICAgIC0gQ2hhbm5lbAorICovCitzdGF0aWMgaW50IG13aWZpZXhfY2ZnODAyMTFfaW5mb3JtX2lic3NfYnNzKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpCit7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOworCXN0cnVjdCBtd2lmaWV4X2Jzc19pbmZvIGJzc19pbmZvOworCWludCBpZV9sZW47CisJdTggaWVfYnVmW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU4gKyBzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKV07CisKKwlpZiAobXdpZmlleF9nZXRfYnNzX2luZm8ocHJpdiwgJmJzc19pbmZvKSkKKwkJcmV0dXJuIC0xOworCisJaWVfYnVmWzBdID0gV0xBTl9FSURfU1NJRDsKKwlpZV9idWZbMV0gPSBic3NfaW5mby5zc2lkLnNzaWRfbGVuOworCisJbWVtY3B5KCZpZV9idWZbc2l6ZW9mKHN0cnVjdCBpZWVlX3R5cGVzX2hlYWRlcildLAorCQkJJmJzc19pbmZvLnNzaWQuc3NpZCwKKwkJCWJzc19pbmZvLnNzaWQuc3NpZF9sZW4pOworCWllX2xlbiA9IGllX2J1ZlsxXSArIHNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpOworCisJY2hhbiA9IF9faWVlZTgwMjExX2dldF9jaGFubmVsKHByaXYtPndkZXYtPndpcGh5LAorCQkJaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KGJzc19pbmZvLmJzc19jaGFuLAorCQkJCQkJcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJhbmQpKTsKKworCWNmZzgwMjExX2luZm9ybV9ic3MocHJpdi0+d2Rldi0+d2lwaHksIGNoYW4sCisJCWJzc19pbmZvLmJzc2lkLCAwLCBXTEFOX0NBUEFCSUxJVFlfSUJTUywKKwkJMCwgaWVfYnVmLCBpZV9sZW4sIDAsIEdGUF9LRVJORUwpOworCW1lbWNweShwcml2LT5jZmdfYnNzaWQsIGJzc19pbmZvLmJzc2lkLCBFVEhfQUxFTik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaW5mb3JtcyB0aGUgQ0ZHODAyLjExIHN1YnN5c3RlbSBvZiBhIG5ldyBCU1MgY29ubmVjdGlvbi4KKyAqCisgKiBUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGFyZSBzZW50IHRvIHRoZSBDRkc4MDIuMTEgc3Vic3lzdGVtCisgKiB0byByZWdpc3RlciB0aGUgbmV3IEJTUyBjb25uZWN0aW9uLiBJZiB3ZSBkbyBub3QgcmVnaXN0ZXIgdGhlIG5ldyBCU1MsCisgKiBhIGtlcm5lbCBwYW5pYyB3aWxsIHJlc3VsdC4KKyAqICAgICAgLSBNQUMgYWRkcmVzcworICogICAgICAtIENhcGFiaWxpdGllcworICogICAgICAtIEJlYWNvbiBwZXJpb2QKKyAqICAgICAgLSBSU1NJIHZhbHVlCisgKiAgICAgIC0gQ2hhbm5lbAorICogICAgICAtIFN1cHBvcnRlZCByYXRlcyBJRQorICogICAgICAtIEV4dGVuZGVkIGNhcGFiaWxpdGllcyBJRQorICogICAgICAtIERTIHBhcmFtZXRlciBzZXQgSUUKKyAqICAgICAgLSBIVCBDYXBhYmlsaXR5IElFCisgKiAgICAgIC0gVmVuZG9yIFNwZWNpZmljIElFICgyMjEpCisgKiAgICAgIC0gV1BBIElFCisgKiAgICAgIC0gUlNOIElFCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9pbmZvcm1fYnNzX2Zyb21fc2Nhbl9yZXN1bHQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkJICAgICAgIHN0cnVjdCBtd2lmaWV4XzgwMl8xMV9zc2lkICpzc2lkKQoreworCXN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKnNjYW5fdGFibGU7CisJaW50IGksIGo7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOworCXU4ICppZSwgKmllX2J1ZjsKKwl1MzIgaWVfbGVuOworCXU4ICpiZWFjb247CisJaW50IGJlYWNvbl9zaXplOworCXU4IGVsZW1lbnRfaWQsIGVsZW1lbnRfbGVuOworCisjZGVmaW5lIE1BWF9JRV9CVUYJMjA0OAorCWllX2J1ZiA9IGt6YWxsb2MoTUFYX0lFX0JVRiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpZV9idWYpIHsKKwkJZGV2X2Vycihwcml2LT5hZGFwdGVyLT5kZXYsICIlczogZmFpbGVkIHRvIGFsbG9jIGllX2J1ZlxuIiwKKwkJCQkJCV9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc2Nhbl90YWJsZSA9IHByaXYtPmFkYXB0ZXItPnNjYW5fdGFibGU7CisJZm9yIChpID0gMDsgaSA8IHByaXYtPmFkYXB0ZXItPm51bV9pbl9zY2FuX3RhYmxlOyBpKyspIHsKKwkJaWYgKHNzaWQpIHsKKwkJCS8qIEluZm9ybSBzcGVjaWZpYyBCU1Mgb25seSAqLworCQkJaWYgKG1lbWNtcChzc2lkLT5zc2lkLCBzY2FuX3RhYmxlW2ldLnNzaWQuc3NpZCwKKwkJCQkJICAgc3NpZC0+c3NpZF9sZW4pKQorCQkJCWNvbnRpbnVlOworCQl9CisJCW1lbXNldChpZV9idWYsIDAsIE1BWF9JRV9CVUYpOworCQlpZV9idWZbMF0gPSBXTEFOX0VJRF9TU0lEOworCQlpZV9idWZbMV0gPSBzY2FuX3RhYmxlW2ldLnNzaWQuc3NpZF9sZW47CisJCW1lbWNweSgmaWVfYnVmW3NpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpXSwKKwkJICAgICAgIHNjYW5fdGFibGVbaV0uc3NpZC5zc2lkLCBpZV9idWZbMV0pOworCisJCWllID0gaWVfYnVmICsgaWVfYnVmWzFdICsgc2l6ZW9mKHN0cnVjdCBpZWVlX3R5cGVzX2hlYWRlcik7CisJCWllX2xlbiA9IGllX2J1ZlsxXSArIHNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpOworCisJCWllWzBdID0gV0xBTl9FSURfU1VQUF9SQVRFUzsKKworCQlmb3IgKGogPSAwOyBqIDwgc2l6ZW9mKHNjYW5fdGFibGVbaV0uc3VwcG9ydGVkX3JhdGVzKTsgaisrKSB7CisJCQlpZiAoIXNjYW5fdGFibGVbaV0uc3VwcG9ydGVkX3JhdGVzW2pdKQorCQkJCWJyZWFrOworCQkJZWxzZQorCQkJCWllW2ogKyBzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKV0gPQorCQkJCQlzY2FuX3RhYmxlW2ldLnN1cHBvcnRlZF9yYXRlc1tqXTsKKwkJfQorCisJCWllWzFdID0gajsKKwkJaWVfbGVuICs9IGllWzFdICsgc2l6ZW9mKHN0cnVjdCBpZWVlX3R5cGVzX2hlYWRlcik7CisKKwkJYmVhY29uID0gc2Nhbl90YWJsZVtpXS5iZWFjb25fYnVmOworCQliZWFjb25fc2l6ZSA9IHNjYW5fdGFibGVbaV0uYmVhY29uX2J1Zl9zaXplOworCisJCS8qIFNraXAgdGltZSBzdGFtcCwgYmVhY29uIGludGVydmFsIGFuZCBjYXBhYmlsaXR5ICovCisKKwkJaWYgKGJlYWNvbikgeworCQkJYmVhY29uICs9IHNpemVvZihzY2FuX3RhYmxlW2ldLmJlYWNvbl9wZXJpb2QpCisJCQkJKyBzaXplb2Yoc2Nhbl90YWJsZVtpXS50aW1lX3N0YW1wKSArCisJCQkJK3NpemVvZihzY2FuX3RhYmxlW2ldLmNhcF9pbmZvX2JpdG1hcCk7CisKKwkJCWJlYWNvbl9zaXplIC09IHNpemVvZihzY2FuX3RhYmxlW2ldLmJlYWNvbl9wZXJpb2QpCisJCQkJKyBzaXplb2Yoc2Nhbl90YWJsZVtpXS50aW1lX3N0YW1wKQorCQkJCSsgc2l6ZW9mKHNjYW5fdGFibGVbaV0uY2FwX2luZm9fYml0bWFwKTsKKwkJfQorCisJCXdoaWxlIChiZWFjb25fc2l6ZSA+PSBzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKSkgeworCQkJaWUgPSBpZV9idWYgKyBpZV9sZW47CisJCQllbGVtZW50X2lkID0gKmJlYWNvbjsKKwkJCWVsZW1lbnRfbGVuID0gKihiZWFjb24gKyAxKTsKKwkJCWlmIChiZWFjb25fc2l6ZSA8IChpbnQpIGVsZW1lbnRfbGVuICsKKwkJCSAgICBzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKSkgeworCQkJCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LCAiJXM6IGluIHByb2Nlc3NpbmciCisJCQkJCSIgSUUsIGJ5dGVzIGxlZnQgPCBJRSBsZW5ndGhcbiIsCisJCQkJCV9fZnVuY19fKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXN3aXRjaCAoZWxlbWVudF9pZCkgeworCQkJY2FzZSBXTEFOX0VJRF9FWFRfQ0FQQUJJTElUWToKKwkJCWNhc2UgV0xBTl9FSURfRFNfUEFSQU1TOgorCQkJY2FzZSBXTEFOX0VJRF9IVF9DQVBBQklMSVRZOgorCQkJY2FzZSBXTEFOX0VJRF9WRU5ET1JfU1BFQ0lGSUM6CisJCQljYXNlIFdMQU5fRUlEX1JTTjoKKwkJCWNhc2UgV0xBTl9FSURfQlNTX0FDX0FDQ0VTU19ERUxBWToKKwkJCQlpZVswXSA9IGVsZW1lbnRfaWQ7CisJCQkJaWVbMV0gPSBlbGVtZW50X2xlbjsKKwkJCQltZW1jcHkoJmllW3NpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpXSwKKwkJCQkgICAgICAgKHU4ICopIGJlYWNvbgorCQkJCSAgICAgICArIHNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpLAorCQkJCSAgICAgICBlbGVtZW50X2xlbik7CisJCQkJaWVfbGVuICs9IGllWzFdICsKKwkJCQkJc2l6ZW9mKHN0cnVjdCBpZWVlX3R5cGVzX2hlYWRlcik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCQkJYmVhY29uICs9IGVsZW1lbnRfbGVuICsKKwkJCQkJc2l6ZW9mKHN0cnVjdCBpZWVlX3R5cGVzX2hlYWRlcik7CisJCQliZWFjb25fc2l6ZSAtPSBlbGVtZW50X2xlbiArCisJCQkJCXNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpOworCQl9CisJCWNoYW4gPSBpZWVlODAyMTFfZ2V0X2NoYW5uZWwocHJpdi0+d2Rldi0+d2lwaHksCisJCQkJCQlzY2FuX3RhYmxlW2ldLmZyZXEpOworCQljZmc4MDIxMV9pbmZvcm1fYnNzKHByaXYtPndkZXYtPndpcGh5LCBjaGFuLAorCQkJCQlzY2FuX3RhYmxlW2ldLm1hY19hZGRyZXNzLAorCQkJCQkwLCBzY2FuX3RhYmxlW2ldLmNhcF9pbmZvX2JpdG1hcCwKKwkJCQkJc2Nhbl90YWJsZVtpXS5iZWFjb25fcGVyaW9kLAorCQkJCQlpZV9idWYsIGllX2xlbiwKKwkJCQkJc2Nhbl90YWJsZVtpXS5yc3NpLCBHRlBfS0VSTkVMKTsKKwl9CisKKwlrZnJlZShpZV9idWYpOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjb25uZWN0cyB3aXRoIGEgQlNTLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBib3RoIEluZnJhIGFuZCBBZC1Ib2MgbW9kZXMuIEl0IGFsc28gcGVyZm9ybXMKKyAqIHZhbGlkaXR5IGNoZWNraW5nIG9uIHRoZSBwcm92aWRlZCBwYXJhbWV0ZXJzLCBkaXNjb25uZWN0cyBmcm9tIHRoZQorICogY3VycmVudCBCU1MgKGlmIGFueSksIHNldHMgdXAgdGhlIGFzc29jaWF0aW9uL3NjYW4gcGFyYW1ldGVycywKKyAqIGluY2x1ZGluZyBzZWN1cml0eSBzZXR0aW5ncywgYW5kIHBlcmZvcm1zIHNwZWNpZmljIFNTSUQgc2NhbiBiZWZvcmUKKyAqIHRyeWluZyB0byBjb25uZWN0LgorICoKKyAqIEZvciBJbmZyYSBtb2RlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWlsdXJlIGlmIHRoZSBzcGVjaWZpZWQgU1NJRAorICogaXMgbm90IGZvdW5kIGluIHNjYW4gdGFibGUuIEhvd2V2ZXIsIGZvciBBZC1Ib2MgbW9kZSwgaXQgY2FuIGNyZWF0ZQorICogdGhlIElCU1MgaWYgaXQgZG9lcyBub3QgZXhpc3QuIE9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBpbiBlaXRoZXIgY2FzZSwKKyAqIHRoZSBmdW5jdGlvbiBub3RpZmllcyB0aGUgQ0ZHODAyLjExIHN1YnN5c3RlbSBvZiB0aGUgbmV3IEJTUyBjb25uZWN0aW9uLAorICogb3RoZXJ3aXNlIHRoZSBrZXJuZWwgd2lsbCBwYW5pYy4KKyAqLworc3RhdGljIGludAorbXdpZmlleF9jZmc4MDIxMV9hc3NvYyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBzaXplX3Qgc3NpZF9sZW4sIHU4ICpzc2lkLAorCQkgICAgICAgdTggKmJzc2lkLCBpbnQgbW9kZSwgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAorCQkgICAgICAgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUsIGJvb2wgcHJpdmFjeSkKK3sKKwlzdHJ1Y3QgbXdpZmlleF84MDJfMTFfc3NpZCByZXFfc3NpZDsKKwlzdHJ1Y3QgbXdpZmlleF9zc2lkX2Jzc2lkIHNzaWRfYnNzaWQ7CisJaW50IHJldCwgYXV0aF90eXBlID0gMDsKKworCW1lbXNldCgmcmVxX3NzaWQsIDAsIHNpemVvZihzdHJ1Y3QgbXdpZmlleF84MDJfMTFfc3NpZCkpOworCW1lbXNldCgmc3NpZF9ic3NpZCwgMCwgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X3NzaWRfYnNzaWQpKTsKKworCXJlcV9zc2lkLnNzaWRfbGVuID0gc3NpZF9sZW47CisJaWYgKHNzaWRfbGVuID4gSUVFRTgwMjExX01BWF9TU0lEX0xFTikgeworCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgImludmFsaWQgU1NJRCAtIGFib3J0aW5nXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbWVtY3B5KHJlcV9zc2lkLnNzaWQsIHNzaWQsIHNzaWRfbGVuKTsKKwlpZiAoIXJlcV9zc2lkLnNzaWRfbGVuIHx8IHJlcV9zc2lkLnNzaWRbMF0gPCAweDIwKSB7CisJCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LCAiaW52YWxpZCBTU0lEIC0gYWJvcnRpbmdcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBkaXNjb25uZWN0IGJlZm9yZSB0cnkgdG8gYXNzb2NpYXRlICovCisJbXdpZmlleF9kZWF1dGhlbnRpY2F0ZShwcml2LCBOVUxMKTsKKworCWlmIChjaGFubmVsKQorCQlyZXQgPSBtd2lmaWV4X3NldF9yZl9jaGFubmVsKHByaXYsIGNoYW5uZWwsCisJCQkJbXdpZmlleF9jaGFubmVsc190b19jZmc4MDIxMV9jaGFubmVsX3R5cGUKKwkJCQkocHJpdi0+YWRhcHRlci0+Y2hhbl9vZmZzZXQpKTsKKworCXJldCA9IG13aWZpZXhfc2V0X2VuY29kZShwcml2LCBOVUxMLCAwLCAwLCAxKTsJLyogRGlzYWJsZSBrZXlzICovCisKKwlpZiAobW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQkvKiAicHJpdmFjeSIgaXMgc2V0IG9ubHkgZm9yIGFkLWhvYyBtb2RlICovCisJCWlmIChwcml2YWN5KSB7CisJCQkvKgorCQkJICogS2VlcCBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQgZm9yIG5vdyBzbyB0aGF0CisJCQkgKiB0aGUgZmlybXdhcmUgY2FuIGZpbmQgYSBtYXRjaGluZyBuZXR3b3JrIGZyb20gdGhlCisJCQkgKiBzY2FuLiBUaGUgY2ZnODAyMTEgZG9lcyBub3QgZ2l2ZSB1cyB0aGUgZW5jcnlwdGlvbgorCQkJICogbW9kZSBhdCB0aGlzIHN0YWdlIHNvIGp1c3Qgc2V0dGluZyBpdCB0byBXRVAgaGVyZS4KKwkJCSAqLworCQkJcHJpdi0+c2VjX2luZm8uZW5jcnlwdGlvbl9tb2RlID0KKwkJCQkJV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OworCQkJcHJpdi0+c2VjX2luZm8uYXV0aGVudGljYXRpb25fbW9kZSA9CisJCQkJCU5MODAyMTFfQVVUSFRZUEVfT1BFTl9TWVNURU07CisJCX0KKworCQlnb3RvIGRvbmU7CisJfQorCisJLyogTm93IGhhbmRsZSBpbmZyYSBtb2RlLiAic21lIiBpcyB2YWxpZCBmb3IgaW5mcmEgbW9kZSBvbmx5ICovCisJaWYgKHNtZS0+YXV0aF90eXBlID09IE5MODAyMTFfQVVUSFRZUEVfQVVUT01BVElDCisJCQl8fCBzbWUtPmF1dGhfdHlwZSA9PSBOTDgwMjExX0FVVEhUWVBFX09QRU5fU1lTVEVNKQorCQlhdXRoX3R5cGUgPSBOTDgwMjExX0FVVEhUWVBFX09QRU5fU1lTVEVNOworCWVsc2UgaWYgKHNtZS0+YXV0aF90eXBlID09IE5MODAyMTFfQVVUSFRZUEVfU0hBUkVEX0tFWSkKKwkJYXV0aF90eXBlID0gTkw4MDIxMV9BVVRIVFlQRV9TSEFSRURfS0VZOworCisJaWYgKHNtZS0+Y3J5cHRvLm5fY2lwaGVyc19wYWlyd2lzZSkgeworCQlwcml2LT5zZWNfaW5mby5lbmNyeXB0aW9uX21vZGUgPQorCQkJCQkJc21lLT5jcnlwdG8uY2lwaGVyc19wYWlyd2lzZVswXTsKKwkJcHJpdi0+c2VjX2luZm8uYXV0aGVudGljYXRpb25fbW9kZSA9IGF1dGhfdHlwZTsKKwl9CisKKwlpZiAoc21lLT5jcnlwdG8uY2lwaGVyX2dyb3VwKSB7CisJCXByaXYtPnNlY19pbmZvLmVuY3J5cHRpb25fbW9kZSA9IHNtZS0+Y3J5cHRvLmNpcGhlcl9ncm91cDsKKwkJcHJpdi0+c2VjX2luZm8uYXV0aGVudGljYXRpb25fbW9kZSA9IGF1dGhfdHlwZTsKKwl9CisJaWYgKHNtZS0+aWUpCisJCXJldCA9IG13aWZpZXhfc2V0X2dlbl9pZShwcml2LCBzbWUtPmllLCBzbWUtPmllX2xlbik7CisKKwlpZiAoc21lLT5rZXkpIHsKKwkJaWYgKG13aWZpZXhfaXNfYWxnX3dlcCgwKSB8IG13aWZpZXhfaXNfYWxnX3dlcCgwKSkgeworCQkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkJImluZm86IHNldHRpbmcgd2VwIGVuY3J5cHRpb24iCisJCQkJIiB3aXRoIGtleSBsZW4gJWRcbiIsIHNtZS0+a2V5X2xlbik7CisJCQlyZXQgPSBtd2lmaWV4X3NldF9lbmNvZGUocHJpdiwgc21lLT5rZXksIHNtZS0+a2V5X2xlbiwKKwkJCQkJCQlzbWUtPmtleV9pZHgsIDApOworCQl9CisJfQorZG9uZToKKwkvKiBEbyBzcGVjaWZpYyBTU0lEIHNjYW5uaW5nICovCisJaWYgKG13aWZpZXhfcmVxdWVzdF9zY2FuKHByaXYsICZyZXFfc3NpZCkpIHsKKwkJZGV2X2Vycihwcml2LT5hZGFwdGVyLT5kZXYsICJzY2FuIGVycm9yXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisKKwltZW1jcHkoJnNzaWRfYnNzaWQuc3NpZCwgJnJlcV9zc2lkLCBzaXplb2Yoc3RydWN0IG13aWZpZXhfODAyXzExX3NzaWQpKTsKKworCWlmIChtb2RlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCWlmIChtd2lmaWV4X2ZpbmRfYmVzdF9ic3MocHJpdiwgJnNzaWRfYnNzaWQpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCS8qIEluZm9ybSB0aGUgQlNTIGluZm9ybWF0aW9uIHRvIGtlcm5lbCwgb3RoZXJ3aXNlCisJCSAqIGtlcm5lbCB3aWxsIGdpdmUgYSBwYW5pYyBhZnRlciBzdWNjZXNzZnVsIGFzc29jICovCisJCWlmIChtd2lmaWV4X2luZm9ybV9ic3NfZnJvbV9zY2FuX3Jlc3VsdChwcml2LCAmcmVxX3NzaWQpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiB0cnlpbmcgdG8gYXNzb2NpYXRlIHRvICVzIGFuZCBic3NpZCAlcE1cbiIsCisJICAgICAgIChjaGFyICopIHJlcV9zc2lkLnNzaWQsIHNzaWRfYnNzaWQuYnNzaWQpOworCisJbWVtY3B5KCZwcml2LT5jZmdfYnNzaWQsIHNzaWRfYnNzaWQuYnNzaWQsIDYpOworCisJLyogQ29ubmVjdCB0byBCU1MgYnkgRVNTSUQgKi8KKwltZW1zZXQoJnNzaWRfYnNzaWQuYnNzaWQsIDAsIEVUSF9BTEVOKTsKKworCWlmICghbmV0aWZfcXVldWVfc3RvcHBlZChwcml2LT5uZXRkZXYpKQorCQluZXRpZl9zdG9wX3F1ZXVlKHByaXYtPm5ldGRldik7CisKKwlpZiAobXdpZmlleF9ic3Nfc3RhcnQocHJpdiwgJnNzaWRfYnNzaWQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChtb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCS8qIEluZm9ybSB0aGUgQlNTIGluZm9ybWF0aW9uIHRvIGtlcm5lbCwgb3RoZXJ3aXNlCisJCSAqIGtlcm5lbCB3aWxsIGdpdmUgYSBwYW5pYyBhZnRlciBzdWNjZXNzZnVsIGFzc29jICovCisJCWlmIChtd2lmaWV4X2NmZzgwMjExX2luZm9ybV9pYnNzX2Jzcyhwcml2KSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBDRkc4MDIuMTEgb3BlcmF0aW9uIGhhbmRsZXIgZm9yIGFzc29jaWF0aW9uIHJlcXVlc3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB3b3JrIHdoZW4gdGhlIGN1cnJlbnQgbW9kZSBpcyBzZXQgdG8gQWQtSG9jLCBvcgorICogd2hlbiB0aGVyZSBpcyBhbHJlYWR5IGFuIGFzc29jaWF0aW9uIHByb2NlZHVyZSBnb2luZyBvbi4gVGhlIGdpdmVuIEJTUworICogaW5mb3JtYXRpb24gaXMgdXNlZCB0byBhc3NvY2lhdGUuCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfY2ZnODAyMTFfY29ubmVjdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKQoreworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPSBtd2lmaWV4X25ldGRldl9nZXRfcHJpdihkZXYpOworCWludCByZXQgPSAwOworCisJaWYgKHByaXYtPmFzc29jX3JlcXVlc3QpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAocHJpdi0+YnNzX21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwkJd2lwaHlfZXJyKHdpcGh5LCAicmVjZWl2ZWQgaW5mcmEgYXNzb2MgcmVxdWVzdCAiCisJCQkJIndoZW4gc3RhdGlvbiBpcyBpbiBpYnNzIG1vZGVcbiIpOworCQlnb3RvIGRvbmU7CisJfQorCisJcHJpdi0+YXNzb2NfcmVxdWVzdCA9IC1FSU5QUk9HUkVTUzsKKworCXdpcGh5X2RiZyh3aXBoeSwgImluZm86IFRyeWluZyB0byBhc3NvY2lhdGUgdG8gJXMgYW5kIGJzc2lkICVwTVxuIiwKKwkgICAgICAgKGNoYXIgKikgc21lLT5zc2lkLCBzbWUtPmJzc2lkKTsKKworCXJldCA9IG13aWZpZXhfY2ZnODAyMTFfYXNzb2MocHJpdiwgc21lLT5zc2lkX2xlbiwgc21lLT5zc2lkLCBzbWUtPmJzc2lkLAorCQkJCSAgICAgcHJpdi0+YnNzX21vZGUsIHNtZS0+Y2hhbm5lbCwgc21lLCAwKTsKKworCXByaXYtPmFzc29jX3JlcXVlc3QgPSAxOworZG9uZToKKwlwcml2LT5hc3NvY19yZXN1bHQgPSByZXQ7CisJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5jZmdfd29ya3F1ZXVlKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQ0ZHODAyLjExIG9wZXJhdGlvbiBoYW5kbGVyIHRvIGpvaW4gYW4gSUJTUy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHdvcmsgaW4gYW55IG1vZGUgb3RoZXIgdGhhbiBBZC1Ib2MsIG9yIGlmCisgKiBhIGpvaW4gb3BlcmF0aW9uIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MuCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfY2ZnODAyMTFfam9pbl9pYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgY2ZnODAyMTFfaWJzc19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0gbXdpZmlleF9jZmc4MDIxMV9nZXRfcHJpdih3aXBoeSk7CisJaW50IHJldCA9IDA7CisKKwlpZiAocHJpdi0+aWJzc19qb2luX3JlcXVlc3QpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAocHJpdi0+YnNzX21vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwkJd2lwaHlfZXJyKHdpcGh5LCAicmVxdWVzdCB0byBqb2luIGlic3MgcmVjZWl2ZWQgIgorCQkJCSJ3aGVuIHN0YXRpb24gaXMgbm90IGluIGlic3MgbW9kZVxuIik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlwcml2LT5pYnNzX2pvaW5fcmVxdWVzdCA9IC1FSU5QUk9HUkVTUzsKKworCXdpcGh5X2RiZyh3aXBoeSwgImluZm86IHRyeWluZyB0byBqb2luIHRvICVzIGFuZCBic3NpZCAlcE1cbiIsCisJICAgICAgIChjaGFyICopIHBhcmFtcy0+c3NpZCwgcGFyYW1zLT5ic3NpZCk7CisKKwlyZXQgPSBtd2lmaWV4X2NmZzgwMjExX2Fzc29jKHByaXYsIHBhcmFtcy0+c3NpZF9sZW4sIHBhcmFtcy0+c3NpZCwKKwkJCQlwYXJhbXMtPmJzc2lkLCBwcml2LT5ic3NfbW9kZSwKKwkJCQlwYXJhbXMtPmNoYW5uZWwsIE5VTEwsIHBhcmFtcy0+cHJpdmFjeSk7CisKKwlwcml2LT5pYnNzX2pvaW5fcmVxdWVzdCA9IDE7Citkb25lOgorCXByaXYtPmlic3Nfam9pbl9yZXN1bHQgPSByZXQ7CisJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5jZmdfd29ya3F1ZXVlKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQ0ZHODAyLjExIG9wZXJhdGlvbiBoYW5kbGVyIHRvIGxlYXZlIGFuIElCU1MuCisgKgorICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB3b3JrIGlmIGEgbGVhdmUgb3BlcmF0aW9uIGlzCisgKiBhbHJlYWR5IGluIHByb2dyZXNzLgorICovCitzdGF0aWMgaW50Cittd2lmaWV4X2NmZzgwMjExX2xlYXZlX2lic3Moc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0gbXdpZmlleF9jZmc4MDIxMV9nZXRfcHJpdih3aXBoeSk7CisKKwlpZiAocHJpdi0+ZGlzY29ubmVjdCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXByaXYtPmRpc2Nvbm5lY3QgPSAxOworCisJd2lwaHlfZGJnKHdpcGh5LCAiaW5mbzogZGlzY29ubmVjdGluZyBmcm9tIGVzc2lkICVwTVxuIiwKKwkJCXByaXYtPmNmZ19ic3NpZCk7CisJaWYgKG13aWZpZXhfZGVhdXRoZW50aWNhdGUocHJpdiwgTlVMTCkpCisJCXJldHVybiAtRUZBVUxUOworCisJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5jZmdfd29ya3F1ZXVlKTsKKworCXJldHVybiAwOworfQorCisvKgorICogQ0ZHODAyLjExIG9wZXJhdGlvbiBoYW5kbGVyIGZvciBzY2FuIHJlcXVlc3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpc3N1ZXMgYSBzY2FuIHJlcXVlc3QgdG8gdGhlIGZpcm13YXJlIGJhc2VkIHVwb24KKyAqIHRoZSB1c2VyIHNwZWNpZmllZCBzY2FuIGNvbmZpZ3VyYXRpb24uIE9uIHN1Y2Nlc3NmdWxsIGNvbXBsZXRpb24sCisgKiBpdCBhbHNvIGluZm9ybXMgdGhlIHJlc3VsdHMuCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfY2ZnODAyMTFfc2NhbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICAgICBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXF1ZXN0KQoreworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPSBtd2lmaWV4X25ldGRldl9nZXRfcHJpdihkZXYpOworCisJd2lwaHlfZGJnKHdpcGh5LCAiaW5mbzogcmVjZWl2ZWQgc2NhbiByZXF1ZXN0IG9uICVzXG4iLCBkZXYtPm5hbWUpOworCisJaWYgKHByaXYtPnNjYW5fcmVxdWVzdCAmJiBwcml2LT5zY2FuX3JlcXVlc3QgIT0gcmVxdWVzdCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXByaXYtPnNjYW5fcmVxdWVzdCA9IHJlcXVlc3Q7CisKKwlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPmNmZ193b3JrcXVldWUpOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHVwIHRoZSBDRkc4MDIuMTEgc3BlY2lmaWMgSFQgY2FwYWJpbGl0eSBmaWVsZHMKKyAqIHdpdGggZGVmYXVsdCB2YWx1ZXMuCisgKgorICogVGhlIGZvbGxvd2luZyBkZWZhdWx0IHZhbHVlcyBhcmUgc2V0IC0KKyAqICAgICAgLSBIVCBTdXBwb3J0ZWQgPSBUcnVlCisgKiAgICAgIC0gTWF4aW11bSBBTVBEVSBsZW5ndGggZmFjdG9yID0gSUVFRTgwMjExX0hUX01BWF9BTVBEVV82NEsKKyAqICAgICAgLSBNaW5pbXVtIEFNUERVIHNwYWNpbmcgPSBJRUVFODAyMTFfSFRfTVBEVV9ERU5TSVRZX05PTkUKKyAqICAgICAgLSBIVCBDYXBhYmlsaXRpZXMgc3VwcG9ydGVkIGJ5IGZpcm13YXJlCisgKiAgICAgIC0gTUNTIGluZm9ybWF0aW9uLCBSeCBtYXNrID0gMHhmZgorICogICAgICAtIE1DRCBpbmZvcm1hdGlvbiwgVHggcGFyYW1ldGVycyA9IElFRUU4MDIxMV9IVF9NQ1NfVFhfREVGSU5FRCAoMHgwMSkKKyAqLworc3RhdGljIHZvaWQKK213aWZpZXhfc2V0dXBfaHRfY2FwcyhzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgKmh0X2luZm8sCisJCSAgICAgIHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpCit7CisJaW50IHJ4X21jc19zdXBwOworCXN0cnVjdCBpZWVlODAyMTFfbWNzX2luZm8gbWNzX3NldDsKKwl1OCAqbWNzID0gKHU4ICopJm1jc19zZXQ7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisKKwlodF9pbmZvLT5odF9zdXBwb3J0ZWQgPSB0cnVlOworCWh0X2luZm8tPmFtcGR1X2ZhY3RvciA9IElFRUU4MDIxMV9IVF9NQVhfQU1QRFVfNjRLOworCWh0X2luZm8tPmFtcGR1X2RlbnNpdHkgPSBJRUVFODAyMTFfSFRfTVBEVV9ERU5TSVRZX05PTkU7CisKKwltZW1zZXQoJmh0X2luZm8tPm1jcywgMCwgc2l6ZW9mKGh0X2luZm8tPm1jcykpOworCisJLyogRmlsbCBIVCBjYXBhYmlsaXR5IGluZm9ybWF0aW9uICovCisJaWYgKElTU1VQUF9DSEFOV0lEVEg0MChhZGFwdGVyLT5od19kb3RfMTFuX2Rldl9jYXApKQorCQlodF9pbmZvLT5jYXAgfD0gSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDA7CisJZWxzZQorCQlodF9pbmZvLT5jYXAgJj0gfklFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwOworCisJaWYgKElTU1VQUF9TSE9SVEdJMjAoYWRhcHRlci0+aHdfZG90XzExbl9kZXZfY2FwKSkKKwkJaHRfaW5mby0+Y2FwIHw9IElFRUU4MDIxMV9IVF9DQVBfU0dJXzIwOworCWVsc2UKKwkJaHRfaW5mby0+Y2FwICY9IH5JRUVFODAyMTFfSFRfQ0FQX1NHSV8yMDsKKworCWlmIChJU1NVUFBfU0hPUlRHSTQwKGFkYXB0ZXItPmh3X2RvdF8xMW5fZGV2X2NhcCkpCisJCWh0X2luZm8tPmNhcCB8PSBJRUVFODAyMTFfSFRfQ0FQX1NHSV80MDsKKwllbHNlCisJCWh0X2luZm8tPmNhcCAmPSB+SUVFRTgwMjExX0hUX0NBUF9TR0lfNDA7CisKKwlpZiAoSVNTVVBQX1JYU1RCQyhhZGFwdGVyLT5od19kb3RfMTFuX2Rldl9jYXApKQorCQlodF9pbmZvLT5jYXAgfD0gMSA8PCBJRUVFODAyMTFfSFRfQ0FQX1JYX1NUQkNfU0hJRlQ7CisJZWxzZQorCQlodF9pbmZvLT5jYXAgJj0gfigzIDw8IElFRUU4MDIxMV9IVF9DQVBfUlhfU1RCQ19TSElGVCk7CisKKwlpZiAoSVNTVVBQX1RYU1RCQyhhZGFwdGVyLT5od19kb3RfMTFuX2Rldl9jYXApKQorCQlodF9pbmZvLT5jYXAgfD0gSUVFRTgwMjExX0hUX0NBUF9UWF9TVEJDOworCWVsc2UKKwkJaHRfaW5mby0+Y2FwICY9IH5JRUVFODAyMTFfSFRfQ0FQX1RYX1NUQkM7CisKKwlodF9pbmZvLT5jYXAgJj0gfklFRUU4MDIxMV9IVF9DQVBfTUFYX0FNU0RVOworCWh0X2luZm8tPmNhcCB8PSBJRUVFODAyMTFfSFRfQ0FQX1NNX1BTOworCisJcnhfbWNzX3N1cHAgPSBHRVRfUlhNQ1NTVVBQKGFkYXB0ZXItPmh3X2Rldl9tY3Nfc3VwcG9ydCk7CisJLyogU2V0IE1DUyBmb3IgMXgxICovCisJbWVtc2V0KG1jcywgMHhmZiwgcnhfbWNzX3N1cHApOworCS8qIENsZWFyIGFsbCB0aGUgb3RoZXIgdmFsdWVzICovCisJbWVtc2V0KCZtY3NbcnhfbWNzX3N1cHBdLCAwLAorCQkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfbWNzX2luZm8pIC0gcnhfbWNzX3N1cHApOworCWlmIChwcml2LT5ic3NfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8CisJCQlJU1NVUFBfQ0hBTldJRFRINDAoYWRhcHRlci0+aHdfZG90XzExbl9kZXZfY2FwKSkKKwkJLyogU2V0IE1DUzMyIGZvciBpbmZyYSBtb2RlIG9yIGFkLWhvYyBtb2RlIHdpdGggNDBNSHogc3VwcG9ydCAqLworCQlTRVRIVF9NQ1MzMihtY3Nfc2V0LnJ4X21hc2spOworCisJbWVtY3B5KCh1OCAqKSAmaHRfaW5mby0+bWNzLCBtY3MsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX21jc19pbmZvKSk7CisKKwlodF9pbmZvLT5tY3MudHhfcGFyYW1zID0gSUVFRTgwMjExX0hUX01DU19UWF9ERUZJTkVEOworfQorCisvKiBzdGF0aW9uIGNmZzgwMjExIG9wZXJhdGlvbnMgKi8KK3N0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG13aWZpZXhfY2ZnODAyMTFfb3BzID0geworCS5jaGFuZ2VfdmlydHVhbF9pbnRmID0gbXdpZmlleF9jZmc4MDIxMV9jaGFuZ2VfdmlydHVhbF9pbnRmLAorCS5zY2FuID0gbXdpZmlleF9jZmc4MDIxMV9zY2FuLAorCS5jb25uZWN0ID0gbXdpZmlleF9jZmc4MDIxMV9jb25uZWN0LAorCS5kaXNjb25uZWN0ID0gbXdpZmlleF9jZmc4MDIxMV9kaXNjb25uZWN0LAorCS5nZXRfc3RhdGlvbiA9IG13aWZpZXhfY2ZnODAyMTFfZ2V0X3N0YXRpb24sCisJLnNldF93aXBoeV9wYXJhbXMgPSBtd2lmaWV4X2NmZzgwMjExX3NldF93aXBoeV9wYXJhbXMsCisJLnNldF9jaGFubmVsID0gbXdpZmlleF9jZmc4MDIxMV9zZXRfY2hhbm5lbCwKKwkuam9pbl9pYnNzID0gbXdpZmlleF9jZmc4MDIxMV9qb2luX2lic3MsCisJLmxlYXZlX2lic3MgPSBtd2lmaWV4X2NmZzgwMjExX2xlYXZlX2lic3MsCisJLmFkZF9rZXkgPSBtd2lmaWV4X2NmZzgwMjExX2FkZF9rZXksCisJLmRlbF9rZXkgPSBtd2lmaWV4X2NmZzgwMjExX2RlbF9rZXksCisJLnNldF9kZWZhdWx0X2tleSA9IG13aWZpZXhfY2ZnODAyMTFfc2V0X2RlZmF1bHRfa2V5LAorCS5zZXRfcG93ZXJfbWdtdCA9IG13aWZpZXhfY2ZnODAyMTFfc2V0X3Bvd2VyX21nbXQsCisJLnNldF90eF9wb3dlciA9IG13aWZpZXhfY2ZnODAyMTFfc2V0X3R4X3Bvd2VyLAorfTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIHRoZSBkZXZpY2Ugd2l0aCBDRkc4MDIuMTEgc3Vic3lzdGVtLgorICoKKyAqIFRoZSBmdW5jdGlvbiBjcmVhdGVzIHRoZSB3aXJlbGVzcyBkZXZpY2Uvd2lwaHksIHBvcHVsYXRlcyBpdCB3aXRoCisgKiBkZWZhdWx0IHBhcmFtZXRlcnMgYW5kIGhhbmRsZXIgZnVuY3Rpb24gcG9pbnRlcnMsIGFuZCBmaW5hbGx5CisgKiByZWdpc3RlcnMgdGhlIGRldmljZS4KKyAqLworaW50IG13aWZpZXhfcmVnaXN0ZXJfY2ZnODAyMTEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm1hYywKKwkJCSAgICAgIHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpCit7CisJaW50IHJldDsKKwl2b2lkICp3ZGV2X3ByaXY7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjsKKworCXdkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd2lyZWxlc3NfZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3ZGV2KSB7CisJCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LCAiJXM6IGFsbG9jYXRpbmcgd2lyZWxlc3MgZGV2aWNlXG4iLAorCQkJCQkJX19mdW5jX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJd2Rldi0+d2lwaHkgPQorCQl3aXBoeV9uZXcoJm13aWZpZXhfY2ZnODAyMTFfb3BzLAorCQkJICBzaXplb2Yoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqKSk7CisJaWYgKCF3ZGV2LT53aXBoeSkgeworCQlrZnJlZSh3ZGV2KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXdkZXYtPmlmdHlwZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047CisJd2Rldi0+d2lwaHktPm1heF9zY2FuX3NzaWRzID0gMTA7CisJd2Rldi0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9CisJCUJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8IEJJVChOTDgwMjExX0lGVFlQRV9BREhPQyk7CisKKwl3ZGV2LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSAmbXdpZmlleF9iYW5kXzJnaHo7CisJbXdpZmlleF9zZXR1cF9odF9jYXBzKAorCQkmd2Rldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLT5odF9jYXAsIHByaXYpOworCisJaWYgKHByaXYtPmFkYXB0ZXItPmNvbmZpZ19iYW5kcyAmIEJBTkRfQSkgeworCQl3ZGV2LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0gPSAmbXdpZmlleF9iYW5kXzVnaHo7CisJCW13aWZpZXhfc2V0dXBfaHRfY2FwcygKKwkJCSZ3ZGV2LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0tPmh0X2NhcCwgcHJpdik7CisJfSBlbHNlIHsKKwkJd2Rldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0gTlVMTDsKKwl9CisKKwkvKiBJbml0aWFsaXplIGNpcGhlciBzdWl0cyAqLworCXdkZXYtPndpcGh5LT5jaXBoZXJfc3VpdGVzID0gbXdpZmlleF9jaXBoZXJfc3VpdGVzOworCXdkZXYtPndpcGh5LT5uX2NpcGhlcl9zdWl0ZXMgPSBBUlJBWV9TSVpFKG13aWZpZXhfY2lwaGVyX3N1aXRlcyk7CisKKwltZW1jcHkod2Rldi0+d2lwaHktPnBlcm1fYWRkciwgbWFjLCA2KTsKKwl3ZGV2LT53aXBoeS0+c2lnbmFsX3R5cGUgPSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9NQk07CisKKwkvKiBXZSBhcmUgdXNpbmcgY3VzdG9tIGRvbWFpbnMgKi8KKwl3ZGV2LT53aXBoeS0+ZmxhZ3MgfD0gV0lQSFlfRkxBR19DVVNUT01fUkVHVUxBVE9SWTsKKworCXdkZXYtPndpcGh5LT5yZWdfbm90aWZpZXIgPSBtd2lmaWV4X3JlZ19ub3RpZmllcjsKKworCS8qIFNldCBzdHJ1Y3QgbXdpZmlleF9wcml2YXRlIHBvaW50ZXIgaW4gd2lwaHlfcHJpdiAqLworCXdkZXZfcHJpdiA9IHdpcGh5X3ByaXYod2Rldi0+d2lwaHkpOworCisJKih1bnNpZ25lZCBsb25nICopIHdkZXZfcHJpdiA9ICh1bnNpZ25lZCBsb25nKSBwcml2OworCisJcmV0ID0gd2lwaHlfcmVnaXN0ZXIod2Rldi0+d2lwaHkpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LCAiJXM6IHJlZ2lzdGVyaW5nIGNmZzgwMjExIGRldmljZVxuIiwKKwkJCQkJCV9fZnVuY19fKTsKKwkJd2lwaHlfZnJlZSh3ZGV2LT53aXBoeSk7CisJCWtmcmVlKHdkZXYpOworCQlyZXR1cm4gcmV0OworCX0gZWxzZSB7CisJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJCSJpbmZvOiBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCB3aXBoeSBkZXZpY2VcbiIpOworCX0KKworCWRldl9uZXRfc2V0KGRldiwgd2lwaHlfbmV0KHdkZXYtPndpcGh5KSk7CisJZGV2LT5pZWVlODAyMTFfcHRyID0gd2RldjsKKwltZW1jcHkoZGV2LT5kZXZfYWRkciwgd2Rldi0+d2lwaHktPnBlcm1fYWRkciwgNik7CisJbWVtY3B5KGRldi0+cGVybV9hZGRyLCB3ZGV2LT53aXBoeS0+cGVybV9hZGRyLCA2KTsKKwlTRVRfTkVUREVWX0RFVihkZXYsIHdpcGh5X2Rldih3ZGV2LT53aXBoeSkpOworCXByaXYtPndkZXYgPSB3ZGV2OworCisJZGV2LT5mbGFncyB8PSBJRkZfQlJPQURDQVNUIHwgSUZGX01VTFRJQ0FTVDsKKwlkZXYtPndhdGNoZG9nX3RpbWVvID0gTVdJRklFWF9ERUZBVUxUX1dBVENIRE9HX1RJTUVPVVQ7CisJZGV2LT5oYXJkX2hlYWRlcl9sZW4gKz0gTVdJRklFWF9NSU5fREFUQV9IRUFERVJfTEVOOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgcmVzdWx0IG9mIGRpZmZlcmVudCBwZW5kaW5nIG5ldHdvcmsgb3BlcmF0aW9ucy4KKyAqCisgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIGhhbmRsZWQgYW5kIENGRzgwMi4xMSBzdWJzeXN0ZW0gaXMKKyAqIG5vdGlmaWVkIGFjY29yZGluZ2x5IC0KKyAqICAgICAgLSBTY2FuIHJlcXVlc3QgY29tcGxldGlvbgorICogICAgICAtIEFzc29jaWF0aW9uIHJlcXVlc3QgY29tcGxldGlvbgorICogICAgICAtIElCU1Mgam9pbiByZXF1ZXN0IGNvbXBsZXRpb24KKyAqICAgICAgLSBEaXNjb25uZWN0IHJlcXVlc3QgY29tcGxldGlvbgorICovCit2b2lkCittd2lmaWV4X2NmZzgwMjExX3Jlc3VsdHMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG13aWZpZXhfcHJpdmF0ZSwgY2ZnX3dvcmtxdWV1ZSk7CisJc3RydWN0IG13aWZpZXhfdXNlcl9zY2FuX2NmZyAqc2Nhbl9yZXE7CisJaW50IHJldCA9IDAsIGk7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOworCisJaWYgKHByaXYtPnNjYW5fcmVxdWVzdCkgeworCQlzY2FuX3JlcSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X3VzZXJfc2Nhbl9jZmcpLAorCQkJCSAgIEdGUF9LRVJORUwpOworCQlpZiAoIXNjYW5fcmVxKSB7CisJCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgImZhaWxlZCB0byBhbGxvYyAiCisJCQkJCQkgICAgInNjYW5fcmVxXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+c2Nhbl9yZXF1ZXN0LT5uX3NzaWRzOyBpKyspIHsKKwkJCW1lbWNweShzY2FuX3JlcS0+c3NpZF9saXN0W2ldLnNzaWQsCisJCQkJCXByaXYtPnNjYW5fcmVxdWVzdC0+c3NpZHNbaV0uc3NpZCwKKwkJCQkJcHJpdi0+c2Nhbl9yZXF1ZXN0LT5zc2lkc1tpXS5zc2lkX2xlbik7CisJCQlzY2FuX3JlcS0+c3NpZF9saXN0W2ldLm1heF9sZW4gPQorCQkJCQlwcml2LT5zY2FuX3JlcXVlc3QtPnNzaWRzW2ldLnNzaWRfbGVuOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBwcml2LT5zY2FuX3JlcXVlc3QtPm5fY2hhbm5lbHM7IGkrKykgeworCQkJY2hhbiA9IHByaXYtPnNjYW5fcmVxdWVzdC0+Y2hhbm5lbHNbaV07CisJCQlzY2FuX3JlcS0+Y2hhbl9saXN0W2ldLmNoYW5fbnVtYmVyID0gY2hhbi0+aHdfdmFsdWU7CisJCQlzY2FuX3JlcS0+Y2hhbl9saXN0W2ldLnJhZGlvX3R5cGUgPSBjaGFuLT5iYW5kOworCQkJaWYgKGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpCisJCQkJc2Nhbl9yZXEtPmNoYW5fbGlzdFtpXS5zY2FuX3R5cGUgPQorCQkJCQlNV0lGSUVYX1NDQU5fVFlQRV9QQVNTSVZFOworCQkJZWxzZQorCQkJCXNjYW5fcmVxLT5jaGFuX2xpc3RbaV0uc2Nhbl90eXBlID0KKwkJCQkJTVdJRklFWF9TQ0FOX1RZUEVfQUNUSVZFOworCQkJc2Nhbl9yZXEtPmNoYW5fbGlzdFtpXS5zY2FuX3RpbWUgPSAwOworCQl9CisJCWlmIChtd2lmaWV4X3NldF91c2VyX3NjYW5faW9jdGwocHJpdiwgc2Nhbl9yZXEpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJZ290byBkb25lOworCQl9CisJCWlmIChtd2lmaWV4X2luZm9ybV9ic3NfZnJvbV9zY2FuX3Jlc3VsdChwcml2LCBOVUxMKSkKKwkJCXJldCA9IC1FRkFVTFQ7Citkb25lOgorCQlwcml2LT5zY2FuX3Jlc3VsdF9zdGF0dXMgPSByZXQ7CisJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiaW5mbzogJXM6IHNlbmRpbmcgc2NhbiByZXN1bHRzXG4iLAorCQkJCQkJCV9fZnVuY19fKTsKKwkJY2ZnODAyMTFfc2Nhbl9kb25lKHByaXYtPnNjYW5fcmVxdWVzdCwKKwkJCQkocHJpdi0+c2Nhbl9yZXN1bHRfc3RhdHVzIDwgMCkpOworCQlwcml2LT5zY2FuX3JlcXVlc3QgPSBOVUxMOworCQlrZnJlZShzY2FuX3JlcSk7CisJfQorCisJaWYgKHByaXYtPmFzc29jX3JlcXVlc3QgPT0gMSkgeworCQlpZiAoIXByaXYtPmFzc29jX3Jlc3VsdCkgeworCQkJY2ZnODAyMTFfY29ubmVjdF9yZXN1bHQocHJpdi0+bmV0ZGV2LCBwcml2LT5jZmdfYnNzaWQsCisJCQkJCQlOVUxMLCAwLCBOVUxMLCAwLAorCQkJCQkJV0xBTl9TVEFUVVNfU1VDQ0VTUywKKwkJCQkJCUdGUF9LRVJORUwpOworCQkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkJImluZm86IGFzc29jaWF0ZWQgdG8gYnNzaWQgJXBNIHN1Y2Nlc3NmdWxseVxuIiwKKwkJCSAgICAgICBwcml2LT5jZmdfYnNzaWQpOworCQl9IGVsc2UgeworCQkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkJImluZm86IGFzc29jaWF0aW9uIHRvIGJzc2lkICVwTSBmYWlsZWRcbiIsCisJCQkgICAgICAgcHJpdi0+Y2ZnX2Jzc2lkKTsKKwkJCW1lbXNldChwcml2LT5jZmdfYnNzaWQsIDAsIEVUSF9BTEVOKTsKKwkJfQorCQlwcml2LT5hc3NvY19yZXF1ZXN0ID0gMDsKKwkJcHJpdi0+YXNzb2NfcmVzdWx0ID0gMDsKKwl9CisKKwlpZiAocHJpdi0+aWJzc19qb2luX3JlcXVlc3QgPT0gMSkgeworCQlpZiAoIXByaXYtPmlic3Nfam9pbl9yZXN1bHQpIHsKKwkJCWNmZzgwMjExX2lic3Nfam9pbmVkKHByaXYtPm5ldGRldiwgcHJpdi0+Y2ZnX2Jzc2lkLAorCQkJCQkgICAgIEdGUF9LRVJORUwpOworCQkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkJImluZm86IGpvaW5lZC9jcmVhdGVkIGFkaG9jIG5ldHdvcmsgd2l0aCBic3NpZCIKKwkJCQkJIiAlcE0gc3VjY2Vzc2Z1bGx5XG4iLCBwcml2LT5jZmdfYnNzaWQpOworCQl9IGVsc2UgeworCQkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkJImluZm86IGZhaWxlZCBjcmVhdGluZy9qb2luaW5nIGFkaG9jIG5ldHdvcmtcbiIpOworCQl9CisJCXByaXYtPmlic3Nfam9pbl9yZXF1ZXN0ID0gMDsKKwkJcHJpdi0+aWJzc19qb2luX3Jlc3VsdCA9IDA7CisJfQorCisJaWYgKHByaXYtPmRpc2Nvbm5lY3QpIHsKKwkJbWVtc2V0KHByaXYtPmNmZ19ic3NpZCwgMCwgRVRIX0FMRU4pOworCQlwcml2LT5kaXNjb25uZWN0ID0gMDsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2NmZzgwMjExLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2NmZzgwMjExLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRkYjhmMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvY2ZnODAyMTEuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogTWFydmVsbCBXaXJlbGVzcyBMQU4gZGV2aWNlIGRyaXZlcjogQ0ZHODAyMTEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBmaWxlICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwKKyAqIEx0ZC4gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIEp1bmUgMTk5MQorICogKHRoZSAiTGljZW5zZSIpLiAgWW91IG1heSB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSBpbgorICogYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdoaWNoCisgKiBpcyBhdmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQSBvciBvbiB0aGUKKyAqIHdvcmxkd2lkZSB3ZWIgYXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dC4KKyAqCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1JUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgQU5EIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0CisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIuCisgKi8KKworI2lmbmRlZiBfX01XSUZJRVhfQ0ZHODAyMTFfXworI2RlZmluZSBfX01XSUZJRVhfQ0ZHODAyMTFfXworCisjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+CisKKyNpbmNsdWRlICJtYWluLmgiCisKK2ludCBtd2lmaWV4X3JlZ2lzdGVyX2NmZzgwMjExKHN0cnVjdCBuZXRfZGV2aWNlICosIHU4ICosCisJCQkJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqKTsKKwordm9pZCBtd2lmaWV4X2NmZzgwMjExX3Jlc3VsdHMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9jZnAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvY2ZwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBjYWRhNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvY2ZwLmMKQEAgLTAsMCArMSwzNjAgQEAKKy8qCisgKiBNYXJ2ZWxsIFdpcmVsZXNzIExBTiBkZXZpY2UgZHJpdmVyOiBDaGFubmVsLCBGcmVxdWVuY2UgYW5kIFBvd2VyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRlcm5hdGlvbmFsCisgKiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKyAqICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgdXNlLCByZWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgaW4KKyAqIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UsIGEgY29weSBvZiB3aGljaAorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0Egb3Igb24gdGhlCisgKiB3b3JsZHdpZGUgd2ViIGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQuCisgKgorICogVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4gIFRoZSBMaWNlbnNlIHByb3ZpZGVzIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dAorICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLgorICovCisKKyNpbmNsdWRlICJkZWNsLmgiCisjaW5jbHVkZSAiaW9jdGwuaCIKKyNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAiZncuaCIKKyNpbmNsdWRlICJtYWluLmgiCisjaW5jbHVkZSAiY2ZnODAyMTEuaCIKKworLyogMTAwbVcgKi8KKyNkZWZpbmUgTVdJRklFWF9UWF9QV1JfREVGQVVMVCAgICAgMjAKKy8qIDEwMG1XICovCisjZGVmaW5lIE1XSUZJRVhfVFhfUFdSX1VTX0RFRkFVTFQgICAgICAyMAorLyogNTBtVyAqLworI2RlZmluZSBNV0lGSUVYX1RYX1BXUl9KUF9ERUZBVUxUICAgICAgMTYKKy8qIDEwMG1XICovCisjZGVmaW5lIE1XSUZJRVhfVFhfUFdSX0ZSXzEwME1XICAgICAgICAyMAorLyogMTBtVyAqLworI2RlZmluZSBNV0lGSUVYX1RYX1BXUl9GUl8xME1XICAgICAgICAgMTAKKy8qIDEwMG1XICovCisjZGVmaW5lIE1XSUZJRVhfVFhfUFdSX0VNRUFfREVGQVVMVCAgICAyMAorCitzdGF0aWMgdTggYWRob2NfcmF0ZXNfYltCX1NVUFBPUlRFRF9SQVRFU10gPSB7IDB4ODIsIDB4ODQsIDB4OGIsIDB4OTYsIDAgfTsKKworc3RhdGljIHU4IGFkaG9jX3JhdGVzX2dbR19TVVBQT1JURURfUkFURVNdID0geyAweDhjLCAweDEyLCAweDk4LCAweDI0LAorCQkJCQkgICAgICAgMHhiMCwgMHg0OCwgMHg2MCwgMHg2YywgMCB9OworCitzdGF0aWMgdTggYWRob2NfcmF0ZXNfYmdbQkdfU1VQUE9SVEVEX1JBVEVTXSA9IHsgMHg4MiwgMHg4NCwgMHg4YiwgMHg5NiwKKwkJCQkJCSAweDBjLCAweDEyLCAweDE4LCAweDI0LAorCQkJCQkJIDB4MzAsIDB4NDgsIDB4NjAsIDB4NmMsIDAgfTsKKworc3RhdGljIHU4IGFkaG9jX3JhdGVzX2FbQV9TVVBQT1JURURfUkFURVNdID0geyAweDhjLCAweDEyLCAweDk4LCAweDI0LAorCQkJCQkgICAgICAgMHhiMCwgMHg0OCwgMHg2MCwgMHg2YywgMCB9OwordTggc3VwcG9ydGVkX3JhdGVzX2FbQV9TVVBQT1JURURfUkFURVNdID0geyAweDBjLCAweDEyLCAweDE4LCAweDI0LAorCQkJCQkweGIwLCAweDQ4LCAweDYwLCAweDZjLCAwIH07CitzdGF0aWMgdTE2IG13aWZpZXhfZGF0YV9yYXRlc1tNV0lGSUVYX1NVUFBPUlRFRF9SQVRFU19FWFRdID0geyAweDAyLCAweDA0LAorCQkJCQkweDBCLCAweDE2LCAweDAwLCAweDBDLCAweDEyLCAweDE4LAorCQkJCQkweDI0LCAweDMwLCAweDQ4LCAweDYwLCAweDZDLCAweDkwLAorCQkJCQkweDBELCAweDFBLCAweDI3LCAweDM0LCAweDRFLCAweDY4LAorCQkJCQkweDc1LCAweDgyLCAweDBDLCAweDFCLCAweDM2LCAweDUxLAorCQkJCQkweDZDLCAweEEyLCAweEQ4LCAweEYzLCAweDEwRSwgMHgwMCB9OworCit1OCBzdXBwb3J0ZWRfcmF0ZXNfYltCX1NVUFBPUlRFRF9SQVRFU10gPSB7IDB4MDIsIDB4MDQsIDB4MGIsIDB4MTYsIDAgfTsKKwordTggc3VwcG9ydGVkX3JhdGVzX2dbR19TVVBQT1JURURfUkFURVNdID0geyAweDBjLCAweDEyLCAweDE4LCAweDI0LAorCQkJCQkweDMwLCAweDQ4LCAweDYwLCAweDZjLCAwIH07CisKK3U4IHN1cHBvcnRlZF9yYXRlc19iZ1tCR19TVVBQT1JURURfUkFURVNdID0geyAweDAyLCAweDA0LCAweDBiLCAweDBjLAorCQkJCQkweDEyLCAweDE2LCAweDE4LCAweDI0LCAweDMwLCAweDQ4LAorCQkJCQkweDYwLCAweDZjLCAwIH07CisKK3UxNiByZWdpb25fY29kZV9pbmRleFtNV0lGSUVYX01BWF9SRUdJT05fQ09ERV0gPSB7IDB4MTAsIDB4MjAsIDB4MzAsCisJCQkJCQkweDMyLCAweDQwLCAweDQxLCAweGZmIH07CisKK3U4IHN1cHBvcnRlZF9yYXRlc19uW05fU1VQUE9SVEVEX1JBVEVTXSA9IHsgMHgwMiwgMHgwNCwgMCB9OworCisvKgorICogVGhpcyBmdW5jdGlvbiBtYXBzIGFuIGluZGV4IGluIHN1cHBvcnRlZCByYXRlcyB0YWJsZSBpbnRvCisgKiB0aGUgY29ycmVzcG9uZGluZyBkYXRhIHJhdGUuCisgKi8KK3UzMiBtd2lmaWV4X2luZGV4X3RvX2RhdGFfcmF0ZSh1OCBpbmRleCwgdTggaHRfaW5mbykKK3sKKwl1MTYgbWNzX3JhdGVbNF1bOF0gPSB7CisJCXsweDFiLCAweDM2LCAweDUxLCAweDZjLCAweGEyLCAweGQ4LCAweGYzLCAweDEwZX0KKwksCQkJLyogTEcgNDBNICovCisJezB4MWUsIDB4M2MsIDB4NWEsIDB4NzgsIDB4YjQsIDB4ZjAsIDB4MTBlLCAweDEyY30KKwksCQkJLyogU0cgNDBNICovCisJezB4MGQsIDB4MWEsIDB4MjcsIDB4MzQsIDB4NGUsIDB4NjgsIDB4NzUsIDB4ODJ9CisJLAkJCS8qIExHIDIwTSAqLworCXsweDBlLCAweDFjLCAweDJiLCAweDM5LCAweDU2LCAweDczLCAweDgyLCAweDkwfQorCX07CQkJLyogU0cgMjBNICovCisKKwl1MzIgcmF0ZTsKKworCWlmIChodF9pbmZvICYgQklUKDApKSB7CisJCWlmIChpbmRleCA9PSBNV0lGSUVYX1JBVEVfQklUTUFQX01DUzApIHsKKwkJCWlmIChodF9pbmZvICYgQklUKDIpKQorCQkJCXJhdGUgPSAweDBEOwkvKiBNQ1MgMzIgU0dJIHJhdGUgKi8KKwkJCWVsc2UKKwkJCQlyYXRlID0gMHgwQzsJLyogTUNTIDMyIExHSSByYXRlICovCisJCX0gZWxzZSBpZiAoaW5kZXggPCA4KSB7CisJCQlpZiAoaHRfaW5mbyAmIEJJVCgxKSkgeworCQkJCWlmIChodF9pbmZvICYgQklUKDIpKQorCQkJCQkvKiBTR0ksIDQwTSAqLworCQkJCQlyYXRlID0gbWNzX3JhdGVbMV1baW5kZXhdOworCQkJCWVsc2UKKwkJCQkJLyogTEdJLCA0ME0gKi8KKwkJCQkJcmF0ZSA9IG1jc19yYXRlWzBdW2luZGV4XTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGh0X2luZm8gJiBCSVQoMikpCisJCQkJCS8qIFNHSSwgMjBNICovCisJCQkJCXJhdGUgPSBtY3NfcmF0ZVszXVtpbmRleF07CisJCQkJZWxzZQorCQkJCQkvKiBMR0ksIDIwTSAqLworCQkJCQlyYXRlID0gbWNzX3JhdGVbMl1baW5kZXhdOworCQkJfQorCQl9IGVsc2UKKwkJCXJhdGUgPSBtd2lmaWV4X2RhdGFfcmF0ZXNbMF07CisJfSBlbHNlIHsKKwkJaWYgKGluZGV4ID49IE1XSUZJRVhfU1VQUE9SVEVEX1JBVEVTX0VYVCkKKwkJCWluZGV4ID0gMDsKKwkJcmF0ZSA9IG13aWZpZXhfZGF0YV9yYXRlc1tpbmRleF07CisJfQorCXJldHVybiByYXRlOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBtYXBzIGEgZGF0YSByYXRlIHZhbHVlIGludG8gY29ycmVzcG9uZGluZyBpbmRleCBpbiBzdXBwb3J0ZWQKKyAqIHJhdGVzIHRhYmxlLgorICovCit1OCBtd2lmaWV4X2RhdGFfcmF0ZV90b19pbmRleCh1MzIgcmF0ZSkKK3sKKwl1MTYgKnB0cjsKKworCWlmIChyYXRlKSB7CisJCXB0ciA9IG1lbWNocihtd2lmaWV4X2RhdGFfcmF0ZXMsIHJhdGUsCisJCQkJc2l6ZW9mKG13aWZpZXhfZGF0YV9yYXRlcykpOworCQlpZiAocHRyKQorCQkJcmV0dXJuICh1OCkgKHB0ciAtIG13aWZpZXhfZGF0YV9yYXRlcyk7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjdXJyZW50IGFjdGl2ZSBkYXRhIHJhdGVzLgorICoKKyAqIFRoZSByZXN1bHQgbWF5IHZhcnkgZGVwZW5kaW5nIHVwb24gY29ubmVjdGlvbiBzdGF0dXMuCisgKi8KK3UzMiBtd2lmaWV4X2dldF9hY3RpdmVfZGF0YV9yYXRlcyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCAqcmF0ZXMpCit7CisJaWYgKCFwcml2LT5tZWRpYV9jb25uZWN0ZWQpCisJCXJldHVybiBtd2lmaWV4X2dldF9zdXBwb3J0ZWRfcmF0ZXMocHJpdiwgcmF0ZXMpOworCWVsc2UKKwkJcmV0dXJuIG13aWZpZXhfY29weV9yYXRlcyhyYXRlcywgMCwKKwkJCQkgICAgICAgcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmRhdGFfcmF0ZXMsCisJCQkJICAgICAgIHByaXYtPmN1cnJfYnNzX3BhcmFtcy5udW1fb2ZfcmF0ZXMpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBsb2NhdGVzIHRoZSBDaGFubmVsLUZyZXF1ZW5jeS1Qb3dlciB0cmlwbGV0IGJhc2VkIHVwb24KKyAqIGJhbmQgYW5kIGNoYW5uZWwgcGFyYW1ldGVycy4KKyAqLworc3RydWN0IG13aWZpZXhfY2hhbl9mcmVxX3Bvd2VyICoKK213aWZpZXhfZ2V0X2NmcF9ieV9iYW5kX2FuZF9jaGFubmVsX2Zyb21fY2ZnODAyMTEoc3RydWN0IG13aWZpZXhfcHJpdmF0ZQorCQkJCQkJICAqcHJpdiwgdTggYmFuZCwgdTE2IGNoYW5uZWwpCit7CisJc3RydWN0IG13aWZpZXhfY2hhbl9mcmVxX3Bvd2VyICpjZnAgPSBOVUxMOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2g7CisJaW50IGk7CisKKwlpZiAobXdpZmlleF9iYW5kX3RvX3JhZGlvX3R5cGUoYmFuZCkgPT0gSG9zdENtZF9TQ0FOX1JBRElPX1RZUEVfQkcpCisJCXNiYW5kID0gcHJpdi0+d2Rldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOworCWVsc2UKKwkJc2JhbmQgPSBwcml2LT53ZGV2LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl07CisKKwlpZiAoIXNiYW5kKSB7CisJCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LCAiJXM6IGNhbm5vdCBmaW5kIGNmcCBieSBiYW5kICVkIgorCQkJCSIgJiBjaGFubmVsICVkXG4iLCBfX2Z1bmNfXywgYmFuZCwgY2hhbm5lbCk7CisJCXJldHVybiBjZnA7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2NoYW5uZWxzOyBpKyspIHsKKwkJY2ggPSAmc2JhbmQtPmNoYW5uZWxzW2ldOworCQlpZiAoKChjaC0+aHdfdmFsdWUgPT0gY2hhbm5lbCkgfHwKKwkJCShjaGFubmVsID09IEZJUlNUX1ZBTElEX0NIQU5ORUwpKQorCQkJJiYgIShjaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkpIHsKKwkJCXByaXYtPmNmcC5jaGFubmVsID0gY2hhbm5lbDsKKwkJCXByaXYtPmNmcC5mcmVxID0gY2gtPmNlbnRlcl9mcmVxOworCQkJcHJpdi0+Y2ZwLm1heF90eF9wb3dlciA9IGNoLT5tYXhfcG93ZXI7CisJCQljZnAgPSAmcHJpdi0+Y2ZwOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGkgPT0gc2JhbmQtPm5fY2hhbm5lbHMpCisJCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LCAiJXM6IGNhbm5vdCBmaW5kIGNmcCBieSBiYW5kICVkIgorCQkJCSIgJiBjaGFubmVsICVkXG4iLCBfX2Z1bmNfXywgYmFuZCwgY2hhbm5lbCk7CisKKwlyZXR1cm4gY2ZwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBsb2NhdGVzIHRoZSBDaGFubmVsLUZyZXF1ZW5jeS1Qb3dlciB0cmlwbGV0IGJhc2VkIHVwb24KKyAqIGJhbmQgYW5kIGZyZXF1ZW5jeSBwYXJhbWV0ZXJzLgorICovCitzdHJ1Y3QgbXdpZmlleF9jaGFuX2ZyZXFfcG93ZXIgKgorbXdpZmlleF9nZXRfY2ZwX2J5X2JhbmRfYW5kX2ZyZXFfZnJvbV9jZmc4MDIxMShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCQkgICAgICAgdTggYmFuZCwgdTMyIGZyZXEpCit7CisJc3RydWN0IG13aWZpZXhfY2hhbl9mcmVxX3Bvd2VyICpjZnAgPSBOVUxMOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2g7CisJaW50IGk7CisKKwlpZiAobXdpZmlleF9iYW5kX3RvX3JhZGlvX3R5cGUoYmFuZCkgPT0gSG9zdENtZF9TQ0FOX1JBRElPX1RZUEVfQkcpCisJCXNiYW5kID0gcHJpdi0+d2Rldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOworCWVsc2UKKwkJc2JhbmQgPSBwcml2LT53ZGV2LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl07CisKKwlpZiAoIXNiYW5kKSB7CisJCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LCAiJXM6IGNhbm5vdCBmaW5kIGNmcCBieSBiYW5kICVkIgorCQkJCSIgJiBmcmVxICVkXG4iLCBfX2Z1bmNfXywgYmFuZCwgZnJlcSk7CisJCXJldHVybiBjZnA7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2NoYW5uZWxzOyBpKyspIHsKKwkJY2ggPSAmc2JhbmQtPmNoYW5uZWxzW2ldOworCQlpZiAoKGNoLT5jZW50ZXJfZnJlcSA9PSBmcmVxKSAmJgorCQkJIShjaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkpIHsKKwkJCXByaXYtPmNmcC5jaGFubmVsID0gY2gtPmh3X3ZhbHVlOworCQkJcHJpdi0+Y2ZwLmZyZXEgPSBmcmVxOworCQkJcHJpdi0+Y2ZwLm1heF90eF9wb3dlciA9IGNoLT5tYXhfcG93ZXI7CisJCQljZnAgPSAmcHJpdi0+Y2ZwOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGkgPT0gc2JhbmQtPm5fY2hhbm5lbHMpCisJCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LCAiJXM6IGNhbm5vdCBmaW5kIGNmcCBieSBiYW5kICVkIgorCQkJCSIgJiBmcmVxICVkXG4iLCBfX2Z1bmNfXywgYmFuZCwgZnJlcSk7CisKKwlyZXR1cm4gY2ZwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIGRhdGEgcmF0ZSBpcyBzZXQgdG8gYXV0by4KKyAqLwordTgKK213aWZpZXhfaXNfcmF0ZV9hdXRvKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpCit7CisJdTMyIGk7CisJaW50IHJhdGVfbnVtID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByaXYtPmJpdG1hcF9yYXRlcyk7IGkrKykKKwkJaWYgKHByaXYtPmJpdG1hcF9yYXRlc1tpXSkKKwkJCXJhdGVfbnVtKys7CisKKwlpZiAocmF0ZV9udW0gPiAxKQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlCisJCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY29udmVydHMgcmF0ZSBiaXRtYXAgaW50byByYXRlIGluZGV4LgorICovCitpbnQgbXdpZmlleF9nZXRfcmF0ZV9pbmRleCh1MTYgKnJhdGVfYml0bWFwLCBpbnQgc2l6ZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplICogODsgaSsrKQorCQlpZiAocmF0ZV9iaXRtYXBbaSAvIDE2XSAmICgxIDw8IChpICUgMTYpKSkKKwkJCXJldHVybiBpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIHN1cHBvcnRlZCBkYXRhIHJhdGVzLgorICoKKyAqIFRoZSBmdW5jdGlvbiB3b3JrcyBpbiBib3RoIEFkLUhvYyBhbmQgaW5mcmEgbW9kZSBieSBwcmludGluZyB0aGUKKyAqIGJhbmQgYW5kIHJldHVybmluZyB0aGUgZGF0YSByYXRlcy4KKyAqLwordTMyIG13aWZpZXhfZ2V0X3N1cHBvcnRlZF9yYXRlcyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCAqcmF0ZXMpCit7CisJdTMyIGsgPSAwOworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCWlmIChwcml2LT5ic3NfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCXN3aXRjaCAoYWRhcHRlci0+Y29uZmlnX2JhbmRzKSB7CisJCWNhc2UgQkFORF9COgorCQkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBpbmZyYSBiYW5kPSVkICIKKwkJCQkic3VwcG9ydGVkX3JhdGVzX2JcbiIsIGFkYXB0ZXItPmNvbmZpZ19iYW5kcyk7CisJCQlrID0gbXdpZmlleF9jb3B5X3JhdGVzKHJhdGVzLCBrLCBzdXBwb3J0ZWRfcmF0ZXNfYiwKKwkJCQkJICAgICAgIHNpemVvZihzdXBwb3J0ZWRfcmF0ZXNfYikpOworCQkJYnJlYWs7CisJCWNhc2UgQkFORF9HOgorCQljYXNlIEJBTkRfRyB8IEJBTkRfR046CisJCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IGluZnJhIGJhbmQ9JWQgIgorCQkJCSJzdXBwb3J0ZWRfcmF0ZXNfZ1xuIiwgYWRhcHRlci0+Y29uZmlnX2JhbmRzKTsKKwkJCWsgPSBtd2lmaWV4X2NvcHlfcmF0ZXMocmF0ZXMsIGssIHN1cHBvcnRlZF9yYXRlc19nLAorCQkJCQkgICAgICAgc2l6ZW9mKHN1cHBvcnRlZF9yYXRlc19nKSk7CisJCQlicmVhazsKKwkJY2FzZSBCQU5EX0IgfCBCQU5EX0c6CisJCWNhc2UgQkFORF9BIHwgQkFORF9CIHwgQkFORF9HOgorCQljYXNlIEJBTkRfQSB8IEJBTkRfQjoKKwkJY2FzZSBCQU5EX0EgfCBCQU5EX0IgfCBCQU5EX0cgfCBCQU5EX0dOIHwgQkFORF9BTjoKKwkJY2FzZSBCQU5EX0IgfCBCQU5EX0cgfCBCQU5EX0dOOgorCQkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBpbmZyYSBiYW5kPSVkICIKKwkJCQkic3VwcG9ydGVkX3JhdGVzX2JnXG4iLCBhZGFwdGVyLT5jb25maWdfYmFuZHMpOworCQkJayA9IG13aWZpZXhfY29weV9yYXRlcyhyYXRlcywgaywgc3VwcG9ydGVkX3JhdGVzX2JnLAorCQkJCQkgICAgICAgc2l6ZW9mKHN1cHBvcnRlZF9yYXRlc19iZykpOworCQkJYnJlYWs7CisJCWNhc2UgQkFORF9BOgorCQljYXNlIEJBTkRfQSB8IEJBTkRfRzoKKwkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogaW5mcmEgYmFuZD0lZCAiCisJCQkJInN1cHBvcnRlZF9yYXRlc19hXG4iLCBhZGFwdGVyLT5jb25maWdfYmFuZHMpOworCQkJayA9IG13aWZpZXhfY29weV9yYXRlcyhyYXRlcywgaywgc3VwcG9ydGVkX3JhdGVzX2EsCisJCQkJCSAgICAgICBzaXplb2Yoc3VwcG9ydGVkX3JhdGVzX2EpKTsKKwkJCWJyZWFrOworCQljYXNlIEJBTkRfQSB8IEJBTkRfQU46CisJCWNhc2UgQkFORF9BIHwgQkFORF9HIHwgQkFORF9BTiB8IEJBTkRfR046CisJCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IGluZnJhIGJhbmQ9JWQgIgorCQkJCSJzdXBwb3J0ZWRfcmF0ZXNfYVxuIiwgYWRhcHRlci0+Y29uZmlnX2JhbmRzKTsKKwkJCWsgPSBtd2lmaWV4X2NvcHlfcmF0ZXMocmF0ZXMsIGssIHN1cHBvcnRlZF9yYXRlc19hLAorCQkJCQkgICAgICAgc2l6ZW9mKHN1cHBvcnRlZF9yYXRlc19hKSk7CisJCQlicmVhazsKKwkJY2FzZSBCQU5EX0dOOgorCQkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBpbmZyYSBiYW5kPSVkICIKKwkJCQkic3VwcG9ydGVkX3JhdGVzX25cbiIsIGFkYXB0ZXItPmNvbmZpZ19iYW5kcyk7CisJCQlrID0gbXdpZmlleF9jb3B5X3JhdGVzKHJhdGVzLCBrLCBzdXBwb3J0ZWRfcmF0ZXNfbiwKKwkJCQkJICAgICAgIHNpemVvZihzdXBwb3J0ZWRfcmF0ZXNfbikpOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQkvKiBBZC1ob2MgbW9kZSAqLworCQlzd2l0Y2ggKGFkYXB0ZXItPmFkaG9jX3N0YXJ0X2JhbmQpIHsKKwkJY2FzZSBCQU5EX0I6CisJCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IGFkaG9jIEJcbiIpOworCQkJayA9IG13aWZpZXhfY29weV9yYXRlcyhyYXRlcywgaywgYWRob2NfcmF0ZXNfYiwKKwkJCQkJICAgICAgIHNpemVvZihhZGhvY19yYXRlc19iKSk7CisJCQlicmVhazsKKwkJY2FzZSBCQU5EX0c6CisJCWNhc2UgQkFORF9HIHwgQkFORF9HTjoKKwkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogYWRob2MgRyBvbmx5XG4iKTsKKwkJCWsgPSBtd2lmaWV4X2NvcHlfcmF0ZXMocmF0ZXMsIGssIGFkaG9jX3JhdGVzX2csCisJCQkJCSAgICAgICBzaXplb2YoYWRob2NfcmF0ZXNfZykpOworCQkJYnJlYWs7CisJCWNhc2UgQkFORF9CIHwgQkFORF9HOgorCQljYXNlIEJBTkRfQiB8IEJBTkRfRyB8IEJBTkRfR046CisJCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IGFkaG9jIEJHXG4iKTsKKwkJCWsgPSBtd2lmaWV4X2NvcHlfcmF0ZXMocmF0ZXMsIGssIGFkaG9jX3JhdGVzX2JnLAorCQkJCQkgICAgICAgc2l6ZW9mKGFkaG9jX3JhdGVzX2JnKSk7CisJCQlicmVhazsKKwkJY2FzZSBCQU5EX0E6CisJCWNhc2UgQkFORF9BIHwgQkFORF9BTjoKKwkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogYWRob2MgQVxuIik7CisJCQlrID0gbXdpZmlleF9jb3B5X3JhdGVzKHJhdGVzLCBrLCBhZGhvY19yYXRlc19hLAorCQkJCQkgICAgICAgc2l6ZW9mKGFkaG9jX3JhdGVzX2EpKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIGs7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2NtZGV2dC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9jbWRldnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDg5ZmVkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9jbWRldnQuYwpAQCAtMCwwICsxLDE0MTQgQEAKKy8qCisgKiBNYXJ2ZWxsIFdpcmVsZXNzIExBTiBkZXZpY2UgZHJpdmVyOiBjb21tYW5kcyBhbmQgZXZlbnRzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRlcm5hdGlvbmFsCisgKiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKyAqICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgdXNlLCByZWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgaW4KKyAqIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UsIGEgY29weSBvZiB3aGljaAorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0Egb3Igb24gdGhlCisgKiB3b3JsZHdpZGUgd2ViIGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQuCisgKgorICogVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4gIFRoZSBMaWNlbnNlIHByb3ZpZGVzIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dAorICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLgorICovCisKKyNpbmNsdWRlICJkZWNsLmgiCisjaW5jbHVkZSAiaW9jdGwuaCIKKyNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAiZncuaCIKKyNpbmNsdWRlICJtYWluLmgiCisjaW5jbHVkZSAid21tLmgiCisjaW5jbHVkZSAiMTFuLmgiCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIGEgY29tbWFuZCBub2RlLgorICoKKyAqIFRoZSBhY3R1YWwgYWxsb2NhdGlvbiBvZiB0aGUgbm9kZSBpcyBub3QgZG9uZSBieSB0aGlzIGZ1bmN0aW9uLiBJdCBvbmx5CisgKiBpbml0aWF0ZXMgYSBub2RlIGJ5IGZpbGxpbmcgaXQgd2l0aCBkZWZhdWx0IHBhcmFtZXRlcnMuIFNpbWlsYXJseSwKKyAqIGFsbG9jYXRpb24gb2YgdGhlIGRpZmZlcmVudCBidWZmZXJzIHVzZWQgKElPQ1RMIGJ1ZmZlciwgZGF0YSBidWZmZXIpIGFyZQorICogbm90IGRvbmUgYnkgdGhpcyBmdW5jdGlvbiBlaXRoZXIuCisgKi8KK3N0YXRpYyB2b2lkCittd2lmaWV4X2luaXRfY21kX25vZGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJICAgICAgc3RydWN0IGNtZF9jdHJsX25vZGUgKmNtZF9ub2RlLAorCQkgICAgICB1MzIgY21kX29pZCwgdm9pZCAqZGF0YV9idWYpCit7CisJY21kX25vZGUtPnByaXYgPSBwcml2OworCWNtZF9ub2RlLT5jbWRfb2lkID0gY21kX29pZDsKKwljbWRfbm9kZS0+d2FpdF9xX2VuYWJsZWQgPSBwcml2LT5hZGFwdGVyLT5jbWRfd2FpdF9xX3JlcXVpcmVkOworCXByaXYtPmFkYXB0ZXItPmNtZF93YWl0X3FfcmVxdWlyZWQgPSBmYWxzZTsKKwljbWRfbm9kZS0+ZGF0YV9idWYgPSBkYXRhX2J1ZjsKKwljbWRfbm9kZS0+Y21kX3NrYiA9IGNtZF9ub2RlLT5za2I7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBjb21tYW5kIG5vZGUgZnJvbSB0aGUgZnJlZSBxdWV1ZSBkZXBlbmRpbmcgdXBvbgorICogYXZhaWxhYmlsaXR5LgorICovCitzdGF0aWMgc3RydWN0IGNtZF9jdHJsX25vZGUgKgorbXdpZmlleF9nZXRfY21kX25vZGUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgY21kX2N0cmxfbm9kZSAqY21kX25vZGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5jbWRfZnJlZV9xX2xvY2ssIGZsYWdzKTsKKwlpZiAobGlzdF9lbXB0eSgmYWRhcHRlci0+Y21kX2ZyZWVfcSkpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJHRVRfQ01EX05PREU6IGNtZCBub2RlIG5vdCBhdmFpbGFibGVcbiIpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5jbWRfZnJlZV9xX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWNtZF9ub2RlID0gbGlzdF9maXJzdF9lbnRyeSgmYWRhcHRlci0+Y21kX2ZyZWVfcSwKKwkJCXN0cnVjdCBjbWRfY3RybF9ub2RlLCBsaXN0KTsKKwlsaXN0X2RlbCgmY21kX25vZGUtPmxpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmNtZF9mcmVlX3FfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGNtZF9ub2RlOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjbGVhbnMgdXAgYSBjb21tYW5kIG5vZGUuCisgKgorICogVGhlIGZ1bmN0aW9uIHJlc2V0cyB0aGUgZmllbGRzIGluY2x1ZGluZyB0aGUgYnVmZmVyIHBvaW50ZXJzLgorICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0cnkgdG8gZnJlZSB0aGUgYnVmZmVycy4gVGhleSBtdXN0IGJlCisgKiBmcmVlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBob3dldmVyIGNhbGwgdGhlIHJlY2VpdmUgY29tcGxldGlvbiBjYWxsYmFjaworICogaW4gY2FzZSBhIHJlc3BvbnNlIGJ1ZmZlciBpcyBzdGlsbCBhdmFpbGFibGUgYmVmb3JlIHJlc2V0dGluZworICogdGhlIHBvaW50ZXIuCisgKi8KK3N0YXRpYyB2b2lkCittd2lmaWV4X2NsZWFuX2NtZF9ub2RlKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCSAgICAgICBzdHJ1Y3QgY21kX2N0cmxfbm9kZSAqY21kX25vZGUpCit7CisJY21kX25vZGUtPmNtZF9vaWQgPSAwOworCWNtZF9ub2RlLT5jbWRfZmxhZyA9IDA7CisJY21kX25vZGUtPmRhdGFfYnVmID0gTlVMTDsKKwljbWRfbm9kZS0+d2FpdF9xX2VuYWJsZWQgPSBmYWxzZTsKKworCWlmIChjbWRfbm9kZS0+cmVzcF9za2IpIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoY21kX25vZGUtPnJlc3Bfc2tiKTsKKwkJY21kX25vZGUtPnJlc3Bfc2tiID0gTlVMTDsKKwl9Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgaG9zdCBjb21tYW5kIHRvIHRoZSBmaXJtd2FyZS4KKyAqCisgKiBUaGUgZnVuY3Rpb24gY29waWVzIHRoZSBob3N0IGNvbW1hbmQgaW50byB0aGUgZHJpdmVyIGNvbW1hbmQKKyAqIGJ1ZmZlciwgd2hpY2ggd2lsbCBiZSB0cmFuc2ZlcnJlZCB0byB0aGUgZmlybXdhcmUgbGF0ZXIgYnkgdGhlCisgKiBtYWluIHRocmVhZC4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X2NtZF9ob3N0X2NtZChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCXN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWQsIHZvaWQgKmRhdGFfYnVmKQoreworCXN0cnVjdCBtd2lmaWV4X2RzX21pc2NfY21kICpwY21kX3B0ciA9CisJCShzdHJ1Y3QgbXdpZmlleF9kc19taXNjX2NtZCAqKSBkYXRhX2J1ZjsKKworCS8qIENvcHkgdGhlIEhPU1QgY29tbWFuZCB0byBjb21tYW5kIGJ1ZmZlciAqLworCW1lbWNweSgodm9pZCAqKSBjbWQsIHBjbWRfcHRyLT5jbWQsIHBjbWRfcHRyLT5sZW4pOworCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiY21kOiBob3N0IGNtZCBzaXplID0gJWRcbiIsIHBjbWRfcHRyLT5sZW4pOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBkb3dubG9hZHMgYSBjb21tYW5kIHRvIHRoZSBmaXJtd2FyZS4KKyAqCisgKiBUaGUgZnVuY3Rpb24gcGVyZm9ybXMgc2FuaXR5IHRlc3RzLCBzZXRzIHRoZSBjb21tYW5kIHNlcXVlbmNlCisgKiBudW1iZXIgYW5kIHNpemUsIGNvbnZlcnRzIHRoZSBoZWFkZXIgZmllbGRzIHRvIENQVSBmb3JtYXQgYmVmb3JlCisgKiBzZW5kaW5nLiBBZnRlcndhcmRzLCBpdCBsb2dzIHRoZSBjb21tYW5kIElEIGFuZCBhY3Rpb24gZm9yIGRlYnVnZ2luZworICogYW5kIHNldHMgdXAgdGhlIGNvbW1hbmQgdGltZW91dCB0aW1lci4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X2RubGRfY21kX3RvX2Z3KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJICBzdHJ1Y3QgY21kX2N0cmxfbm9kZSAqY21kX25vZGUpCit7CisKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwlpbnQgcmV0OworCXN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpob3N0X2NtZDsKKwl1aW50MTZfdCBjbWRfY29kZTsKKwl1aW50MTZfdCBjbWRfc2l6ZTsKKwlzdHJ1Y3QgdGltZXZhbCB0c3RhbXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghYWRhcHRlciB8fCAhY21kX25vZGUpCisJCXJldHVybiAtMTsKKworCWhvc3RfY21kID0gKHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICopIChjbWRfbm9kZS0+Y21kX3NrYi0+ZGF0YSk7CisKKwkvKiBTYW5pdHkgdGVzdCAqLworCWlmIChob3N0X2NtZCA9PSBOVUxMIHx8IGhvc3RfY21kLT5zaXplID09IDApIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJETkxEX0NNRDogaG9zdF9jbWQgaXMgbnVsbCIKKwkJCSIgb3IgY21kIHNpemUgaXMgMCwgbm90IHNlbmRpbmdcbiIpOworCQlpZiAoY21kX25vZGUtPndhaXRfcV9lbmFibGVkKQorCQkJYWRhcHRlci0+Y21kX3dhaXRfcS5zdGF0dXMgPSAtMTsKKwkJbXdpZmlleF9pbnNlcnRfY21kX3RvX2ZyZWVfcShhZGFwdGVyLCBjbWRfbm9kZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBTZXQgY29tbWFuZCBzZXF1ZW5jZSBudW1iZXIgKi8KKwlhZGFwdGVyLT5zZXFfbnVtKys7CisJaG9zdF9jbWQtPnNlcV9udW0gPSBjcHVfdG9fbGUxNihIb3N0Q21kX1NFVF9TRVFfTk9fQlNTX0lORk8KKwkJCSAgICAoYWRhcHRlci0+c2VxX251bSwgY21kX25vZGUtPnByaXYtPmJzc19udW0sCisJCQkgICAgIGNtZF9ub2RlLT5wcml2LT5ic3NfdHlwZSkpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPm13aWZpZXhfY21kX2xvY2ssIGZsYWdzKTsKKwlhZGFwdGVyLT5jdXJyX2NtZCA9IGNtZF9ub2RlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPm13aWZpZXhfY21kX2xvY2ssIGZsYWdzKTsKKworCWNtZF9jb2RlID0gbGUxNl90b19jcHUoaG9zdF9jbWQtPmNvbW1hbmQpOworCWNtZF9zaXplID0gbGUxNl90b19jcHUoaG9zdF9jbWQtPnNpemUpOworCisJc2tiX3RyaW0oY21kX25vZGUtPmNtZF9za2IsIGNtZF9zaXplKTsKKworCWRvX2dldHRpbWVvZmRheSgmdHN0YW1wKTsKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImNtZDogRE5MRF9DTUQ6ICglbHUuJWx1KTogJSN4LCBhY3QgJSN4LCBsZW4gJWQsIgorCQkiIHNlcW5vICUjeFxuIiwKKwkJdHN0YW1wLnR2X3NlYywgdHN0YW1wLnR2X3VzZWMsIGNtZF9jb2RlLAorCSAgICAgICBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKSAoKHU4ICopIGhvc3RfY21kICsgU19EU19HRU4pKSwgY21kX3NpemUsCisJICAgICAgIGxlMTZfdG9fY3B1KGhvc3RfY21kLT5zZXFfbnVtKSk7CisKKwlza2JfcHVzaChjbWRfbm9kZS0+Y21kX3NrYiwgSU5URl9IRUFERVJfTEVOKTsKKworCXJldCA9IGFkYXB0ZXItPmlmX29wcy5ob3N0X3RvX2NhcmQoYWRhcHRlciwgTVdJRklFWF9UWVBFX0NNRCwKKwkJCQkJICAgICBjbWRfbm9kZS0+Y21kX3NrYi0+ZGF0YSwKKwkJCQkJICAgICBjbWRfbm9kZS0+Y21kX3NrYi0+bGVuLCBOVUxMKTsKKworCXNrYl9wdWxsKGNtZF9ub2RlLT5jbWRfc2tiLCBJTlRGX0hFQURFUl9MRU4pOworCisJaWYgKHJldCA9PSAtMSkgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIkROTERfQ01EOiBob3N0IHRvIGNhcmQgZmFpbGVkXG4iKTsKKwkJaWYgKGNtZF9ub2RlLT53YWl0X3FfZW5hYmxlZCkKKwkJCWFkYXB0ZXItPmNtZF93YWl0X3Euc3RhdHVzID0gLTE7CisJCW13aWZpZXhfaW5zZXJ0X2NtZF90b19mcmVlX3EoYWRhcHRlciwgYWRhcHRlci0+Y3Vycl9jbWQpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5td2lmaWV4X2NtZF9sb2NrLCBmbGFncyk7CisJCWFkYXB0ZXItPmN1cnJfY21kID0gTlVMTDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+bXdpZmlleF9jbWRfbG9jaywgZmxhZ3MpOworCisJCWFkYXB0ZXItPmRiZy5udW1fY21kX2hvc3RfdG9fY2FyZF9mYWlsdXJlKys7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBTYXZlIHRoZSBsYXN0IGNvbW1hbmQgaWQgYW5kIGFjdGlvbiB0byBkZWJ1ZyBsb2cgKi8KKwlhZGFwdGVyLT5kYmcubGFzdF9jbWRfaW5kZXggPQorCQkoYWRhcHRlci0+ZGJnLmxhc3RfY21kX2luZGV4ICsgMSkgJSBEQkdfQ01EX05VTTsKKwlhZGFwdGVyLT5kYmcubGFzdF9jbWRfaWRbYWRhcHRlci0+ZGJnLmxhc3RfY21kX2luZGV4XSA9IGNtZF9jb2RlOworCWFkYXB0ZXItPmRiZy5sYXN0X2NtZF9hY3RbYWRhcHRlci0+ZGJnLmxhc3RfY21kX2luZGV4XSA9CisJCWxlMTZfdG9fY3B1KCooX19sZTE2ICopICgodTggKikgaG9zdF9jbWQgKyBTX0RTX0dFTikpOworCisJLyogQ2xlYXIgQlNTX05PX0JJVFMgZnJvbSBIb3N0Q21kICovCisJY21kX2NvZGUgJj0gSG9zdENtZF9DTURfSURfTUFTSzsKKworCS8qIFNldHVwIHRoZSB0aW1lciBhZnRlciB0cmFuc21pdCBjb21tYW5kICovCisJbW9kX3RpbWVyKCZhZGFwdGVyLT5jbWRfdGltZXIsCisJCWppZmZpZXMgKyAoTVdJRklFWF9USU1FUl8xMFMgKiBIWikgLyAxMDAwKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBkb3dubG9hZHMgYSBzbGVlcCBjb25maXJtIGNvbW1hbmQgdG8gdGhlIGZpcm13YXJlLgorICoKKyAqIFRoZSBmdW5jdGlvbiBwZXJmb3JtcyBzYW5pdHkgdGVzdHMsIHNldHMgdGhlIGNvbW1hbmQgc2VxdWVuY2UKKyAqIG51bWJlciBhbmQgc2l6ZSwgY29udmVydHMgdGhlIGhlYWRlciBmaWVsZHMgdG8gQ1BVIGZvcm1hdCBiZWZvcmUKKyAqIHNlbmRpbmcuCisgKgorICogTm8gcmVzcG9uc2VzIGFyZSBuZWVkZWQgZm9yIHNsZWVwIGNvbmZpcm0gY29tbWFuZC4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X2RubGRfc2xlZXBfY29uZmlybV9jbWQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXY7CisJc3RydWN0IG13aWZpZXhfb3B0X3NsZWVwX2NvbmZpcm0gKnNsZWVwX2NmbV9idWYgPQorCQkJCShzdHJ1Y3QgbXdpZmlleF9vcHRfc2xlZXBfY29uZmlybSAqKQorCQkJCWFkYXB0ZXItPnNsZWVwX2NmbS0+ZGF0YTsKKwlwcml2ID0gbXdpZmlleF9nZXRfcHJpdihhZGFwdGVyLCBNV0lGSUVYX0JTU19ST0xFX0FOWSk7CisKKwlzbGVlcF9jZm1fYnVmLT5zZXFfbnVtID0KKwkJY3B1X3RvX2xlMTYoKEhvc3RDbWRfU0VUX1NFUV9OT19CU1NfSU5GTworCQkJCQkoYWRhcHRlci0+c2VxX251bSwgcHJpdi0+YnNzX251bSwKKwkJCQkJIHByaXYtPmJzc190eXBlKSkpOworCWFkYXB0ZXItPnNlcV9udW0rKzsKKworCXNrYl9wdXNoKGFkYXB0ZXItPnNsZWVwX2NmbSwgSU5URl9IRUFERVJfTEVOKTsKKwlyZXQgPSBhZGFwdGVyLT5pZl9vcHMuaG9zdF90b19jYXJkKGFkYXB0ZXIsIE1XSUZJRVhfVFlQRV9DTUQsCisJCQkJCSAgICAgYWRhcHRlci0+c2xlZXBfY2ZtLT5kYXRhLAorCQkJCQkgICAgIGFkYXB0ZXItPnNsZWVwX2NmbS0+bGVuLCBOVUxMKTsKKwlza2JfcHVsbChhZGFwdGVyLT5zbGVlcF9jZm0sIElOVEZfSEVBREVSX0xFTik7CisKKwlpZiAocmV0ID09IC0xKSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiU0xFRVBfQ0ZNOiBmYWlsZWRcbiIpOworCQlhZGFwdGVyLT5kYmcubnVtX2NtZF9zbGVlcF9jZm1faG9zdF90b19jYXJkX2ZhaWx1cmUrKzsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoR0VUX0JTU19ST0xFKG13aWZpZXhfZ2V0X3ByaXYoYWRhcHRlciwgTVdJRklFWF9CU1NfUk9MRV9BTlkpKQorCQkJPT0gTVdJRklFWF9CU1NfUk9MRV9TVEEpIHsKKwkJaWYgKCFzbGVlcF9jZm1fYnVmLT5yZXNwX2N0cmwpCisJCQkvKiBSZXNwb25zZSBpcyBub3QgbmVlZGVkIGZvciBzbGVlcAorCQkJICAgY29uZmlybSBjb21tYW5kICovCisJCQlhZGFwdGVyLT5wc19zdGF0ZSA9IFBTX1NUQVRFX1NMRUVQOworCQllbHNlCisJCQlhZGFwdGVyLT5wc19zdGF0ZSA9IFBTX1NUQVRFX1NMRUVQX0NGTTsKKworCQlpZiAoIXNsZWVwX2NmbV9idWYtPnJlc3BfY3RybAorCQkJCSYmIChhZGFwdGVyLT5pc19oc19jb25maWd1cmVkCisJCQkJCSYmICFhZGFwdGVyLT5zbGVlcF9wZXJpb2QucGVyaW9kKSkgeworCQkJYWRhcHRlci0+cG1fd2FrZXVwX2NhcmRfcmVxID0gdHJ1ZTsKKwkJCW13aWZpZXhfaHNfYWN0aXZhdGVkX2V2ZW50KG13aWZpZXhfZ2V0X3ByaXYoYWRhcHRlciwKKwkJCQkJCU1XSUZJRVhfQlNTX1JPTEVfU1RBKSwgdHJ1ZSk7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgdGhlIGNvbW1hbmQgYnVmZmVycyBhbmQgbGlua3MgdGhlbSB0bworICogdGhlIGNvbW1hbmQgZnJlZSBxdWV1ZS4KKyAqCisgKiBUaGUgZHJpdmVyIHVzZXMgYSBwcmUgYWxsb2NhdGVkIG51bWJlciBvZiBjb21tYW5kIGJ1ZmZlcnMsIHdoaWNoCisgKiBhcmUgY3JlYXRlZCBhdCBkcml2ZXIgaW5pdGlhbGl6YXRpb25zIGFuZCBmcmVlZCBhdCBkcml2ZXIgY2xlYW51cC4KKyAqIEV2ZXJ5IGNvbW1hbmQgbmVlZHMgdG8gb2J0YWluIGEgY29tbWFuZCBidWZmZXIgZnJvbSB0aGlzIHBvb2wgYmVmb3JlCisgKiBpdCBjYW4gYmUgaXNzdWVkLiBUaGUgY29tbWFuZCBmcmVlIHF1ZXVlIGxpc3RzIHRoZSBjb21tYW5kIGJ1ZmZlcnMKKyAqIGN1cnJlbnRseSBmcmVlIHRvIHVzZSwgd2hpbGUgdGhlIGNvbW1hbmQgcGVuZGluZyBxdWV1ZSBsaXN0cyB0aGUKKyAqIGNvbW1hbmQgYnVmZmVycyBhbHJlYWR5IGluIHVzZSBhbmQgYXdhaXRpbmcgaGFuZGxpbmcuIENvbW1hbmQgYnVmZmVycworICogYXJlIHJldHVybmVkIHRvIHRoZSBmcmVlIHF1ZXVlIGFmdGVyIHVzZS4KKyAqLworaW50IG13aWZpZXhfYWxsb2NfY21kX2J1ZmZlcihzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBjbWRfY3RybF9ub2RlICpjbWRfYXJyYXk7CisJdTMyIGJ1Zl9zaXplOworCXUzMiBpOworCisJLyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgc3RydWN0IGNtZF9jdHJsX25vZGUgKi8KKwlidWZfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgY21kX2N0cmxfbm9kZSkgKiBNV0lGSUVYX05VTV9PRl9DTURfQlVGRkVSOworCWNtZF9hcnJheSA9IGt6YWxsb2MoYnVmX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghY21kX2FycmF5KSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiJXM6IGZhaWxlZCB0byBhbGxvYyBjbWRfYXJyYXlcbiIsCisJCQkJX19mdW5jX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlhZGFwdGVyLT5jbWRfcG9vbCA9IGNtZF9hcnJheTsKKwltZW1zZXQoYWRhcHRlci0+Y21kX3Bvb2wsIDAsIGJ1Zl9zaXplKTsKKworCS8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGNvbW1hbmQgYnVmZmVycyAqLworCWZvciAoaSA9IDA7IGkgPCBNV0lGSUVYX05VTV9PRl9DTURfQlVGRkVSOyBpKyspIHsKKwkJY21kX2FycmF5W2ldLnNrYiA9IGRldl9hbGxvY19za2IoTVdJRklFWF9TSVpFX09GX0NNRF9CVUZGRVIpOworCQlpZiAoIWNtZF9hcnJheVtpXS5za2IpIHsKKwkJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiQUxMT0NfQ01EX0JVRjogb3V0IG9mIG1lbW9yeVxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgTVdJRklFWF9OVU1fT0ZfQ01EX0JVRkZFUjsgaSsrKQorCQltd2lmaWV4X2luc2VydF9jbWRfdG9fZnJlZV9xKGFkYXB0ZXIsICZjbWRfYXJyYXlbaV0pOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGZyZWVzIHRoZSBjb21tYW5kIGJ1ZmZlcnMuCisgKgorICogVGhlIGZ1bmN0aW9uIGNhbGxzIHRoZSBjb21wbGV0aW9uIGNhbGxiYWNrIGZvciBhbGwgdGhlIGNvbW1hbmQKKyAqIGJ1ZmZlcnMgdGhhdCBzdGlsbCBoYXZlIHJlc3BvbnNlIGJ1ZmZlcnMgYXNzb2NpYXRlZCB3aXRoIHRoZW0uCisgKi8KK2ludCBtd2lmaWV4X2ZyZWVfY21kX2J1ZmZlcihzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBjbWRfY3RybF9ub2RlICpjbWRfYXJyYXk7CisJdTMyIGk7CisKKwkvKiBOZWVkIHRvIGNoZWNrIGlmIGNtZCBwb29sIGlzIGFsbG9jYXRlZCBvciBub3QgKi8KKwlpZiAoIWFkYXB0ZXItPmNtZF9wb29sKSB7CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogRlJFRV9DTURfQlVGOiBjbWRfcG9vbCBpcyBudWxsXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJY21kX2FycmF5ID0gYWRhcHRlci0+Y21kX3Bvb2w7CisKKwkvKiBSZWxlYXNlIHNoYXJlZCBtZW1vcnkgYnVmZmVycyAqLworCWZvciAoaSA9IDA7IGkgPCBNV0lGSUVYX05VTV9PRl9DTURfQlVGRkVSOyBpKyspIHsKKwkJaWYgKGNtZF9hcnJheVtpXS5za2IpIHsKKwkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiY21kOiBmcmVlIGNtZCBidWZmZXIgJWRcbiIsIGkpOworCQkJZGV2X2tmcmVlX3NrYl9hbnkoY21kX2FycmF5W2ldLnNrYik7CisJCX0KKwkJaWYgKCFjbWRfYXJyYXlbaV0ucmVzcF9za2IpCisJCQljb250aW51ZTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoY21kX2FycmF5W2ldLnJlc3Bfc2tiKTsKKwl9CisJLyogUmVsZWFzZSBzdHJ1Y3QgY21kX2N0cmxfbm9kZSAqLworCWlmIChhZGFwdGVyLT5jbWRfcG9vbCkgeworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImNtZDogZnJlZSBjbWQgcG9vbFxuIik7CisJCWtmcmVlKGFkYXB0ZXItPmNtZF9wb29sKTsKKwkJYWRhcHRlci0+Y21kX3Bvb2wgPSBOVUxMOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIGV2ZW50cyBnZW5lcmF0ZWQgYnkgZmlybXdhcmUuCisgKgorICogRXZlbnQgYm9keSBvZiBldmVudHMgcmVjZWl2ZWQgZnJvbSBmaXJtd2FyZSBhcmUgbm90IHVzZWQgKHRob3VnaCB0aGV5IGFyZQorICogc2F2ZWQpLCBvbmx5IHRoZSBldmVudCBJRCBpcyB1c2VkLiBTb21lIGV2ZW50cyBhcmUgcmUtaW52b2tlZCBieQorICogdGhlIGRyaXZlciwgd2l0aCBhIG5ldyBldmVudCBib2R5LgorICoKKyAqIEFmdGVyIHByb2Nlc3NpbmcsIHRoZSBmdW5jdGlvbiBjYWxscyB0aGUgY29tcGxldGlvbiBjYWxsYmFjaworICogZm9yIGNsZWFudXAuCisgKi8KK2ludCBtd2lmaWV4X3Byb2Nlc3NfZXZlbnQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPQorCQltd2lmaWV4X2dldF9wcml2KGFkYXB0ZXIsIE1XSUZJRVhfQlNTX1JPTEVfQU5ZKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYWRhcHRlci0+ZXZlbnRfc2tiOworCXUzMiBldmVudGNhdXNlID0gYWRhcHRlci0+ZXZlbnRfY2F1c2U7CisJc3RydWN0IHRpbWV2YWwgdHN0YW1wOworCXN0cnVjdCBtd2lmaWV4X3J4aW5mbyAqcnhfaW5mbzsKKworCS8qIFNhdmUgdGhlIGxhc3QgZXZlbnQgdG8gZGVidWcgbG9nICovCisJYWRhcHRlci0+ZGJnLmxhc3RfZXZlbnRfaW5kZXggPQorCQkoYWRhcHRlci0+ZGJnLmxhc3RfZXZlbnRfaW5kZXggKyAxKSAlIERCR19DTURfTlVNOworCWFkYXB0ZXItPmRiZy5sYXN0X2V2ZW50W2FkYXB0ZXItPmRiZy5sYXN0X2V2ZW50X2luZGV4XSA9CisJCSh1MTYpIGV2ZW50Y2F1c2U7CisKKwkvKiBHZXQgQlNTIG51bWJlciBhbmQgY29ycmVzcG9uZGluZyBwcml2ICovCisJcHJpdiA9IG13aWZpZXhfZ2V0X3ByaXZfYnlfaWQoYWRhcHRlciwgRVZFTlRfR0VUX0JTU19OVU0oZXZlbnRjYXVzZSksCisJCQkJICAgICAgRVZFTlRfR0VUX0JTU19UWVBFKGV2ZW50Y2F1c2UpKTsKKwlpZiAoIXByaXYpCisJCXByaXYgPSBtd2lmaWV4X2dldF9wcml2KGFkYXB0ZXIsIE1XSUZJRVhfQlNTX1JPTEVfQU5ZKTsKKwkvKiBDbGVhciBCU1NfTk9fQklUUyBmcm9tIGV2ZW50ICovCisJZXZlbnRjYXVzZSAmPSBFVkVOVF9JRF9NQVNLOworCWFkYXB0ZXItPmV2ZW50X2NhdXNlID0gZXZlbnRjYXVzZTsKKworCWlmIChza2IpIHsKKwkJcnhfaW5mbyA9IE1XSUZJRVhfU0tCX1JYQ0Ioc2tiKTsKKwkJcnhfaW5mby0+YnNzX2luZGV4ID0gcHJpdi0+YnNzX2luZGV4OworCX0KKworCWlmIChldmVudGNhdXNlICE9IEVWRU5UX1BTX1NMRUVQICYmIGV2ZW50Y2F1c2UgIT0gRVZFTlRfUFNfQVdBS0UpIHsKKwkJZG9fZ2V0dGltZW9mZGF5KCZ0c3RhbXApOworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImV2ZW50OiAlbHUuJWx1OiBjYXVzZTogJSN4XG4iLAorCQkgICAgICAgdHN0YW1wLnR2X3NlYywgdHN0YW1wLnR2X3VzZWMsIGV2ZW50Y2F1c2UpOworCX0KKworCXJldCA9IG13aWZpZXhfcHJvY2Vzc19zdGFfZXZlbnQocHJpdik7CisKKwlhZGFwdGVyLT5ldmVudF9jYXVzZSA9IDA7CisJYWRhcHRlci0+ZXZlbnRfc2tiID0gTlVMTDsKKworCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNlbmQgc3luY2hyb25vdXMgY29tbWFuZCB0byB0aGUgZmlybXdhcmUuCisgKgorICogaXQgYWxsb2NhdGVzIGEgd2FpdCBxdWV1ZSBmb3IgdGhlIGNvbW1hbmQgYW5kIHdhaXQgZm9yIHRoZSBjb21tYW5kCisgKiByZXNwb25zZS4KKyAqLworaW50IG13aWZpZXhfc2VuZF9jbWRfc3luYyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1aW50MTZfdCBjbWRfbm8sCisJCQkgIHUxNiBjbWRfYWN0aW9uLCB1MzIgY21kX29pZCwgdm9pZCAqZGF0YV9idWYpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisKKwlhZGFwdGVyLT5jbWRfd2FpdF9xX3JlcXVpcmVkID0gdHJ1ZTsKKwlhZGFwdGVyLT5jbWRfd2FpdF9xLmNvbmRpdGlvbiA9IGZhbHNlOworCisJcmV0ID0gbXdpZmlleF9zZW5kX2NtZF9hc3luYyhwcml2LCBjbWRfbm8sIGNtZF9hY3Rpb24sIGNtZF9vaWQsCisJCQkJICAgICBkYXRhX2J1Zik7CisJaWYgKCFyZXQpCisJCXJldCA9IG13aWZpZXhfd2FpdF9xdWV1ZV9jb21wbGV0ZShhZGFwdGVyKTsKKworCXJldHVybiByZXQ7Cit9CisKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgYSBjb21tYW5kIGFuZCBhc3luY2hyb25vdXNseSBzZW5kIGl0IHRvIHRoZSBmaXJtd2FyZS4KKyAqCisgKiBQcmVwYXJhdGlvbiBpbmNsdWRlcyAtCisgKiAgICAgIC0gU2FuaXR5IHRlc3RzIHRvIG1ha2Ugc3VyZSB0aGUgY2FyZCBpcyBzdGlsbCBwcmVzZW50IG9yIHRoZSBGVworICogICAgICAgIGlzIG5vdCByZXNldAorICogICAgICAtIEdldHRpbmcgYSBuZXcgY29tbWFuZCBub2RlIGZyb20gdGhlIGNvbW1hbmQgZnJlZSBxdWV1ZQorICogICAgICAtIEluaXRpYWxpemluZyB0aGUgY29tbWFuZCBub2RlIGZvciBkZWZhdWx0IHBhcmFtZXRlcnMKKyAqICAgICAgLSBGaWxsIHVwIHRoZSBub24tZGVmYXVsdCBwYXJhbWV0ZXJzIGFuZCBidWZmZXIgcG9pbnRlcnMKKyAqICAgICAgLSBBZGQgdGhlIGNvbW1hbmQgdG8gcGVuZGluZyBxdWV1ZQorICovCitpbnQgbXdpZmlleF9zZW5kX2NtZF9hc3luYyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1aW50MTZfdCBjbWRfbm8sCisJCQkgICB1MTYgY21kX2FjdGlvbiwgdTMyIGNtZF9vaWQsIHZvaWQgKmRhdGFfYnVmKQoreworCWludCByZXQ7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IGNtZF9jdHJsX25vZGUgKmNtZF9ub2RlOworCXN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWRfcHRyOworCisJaWYgKCFhZGFwdGVyKSB7CisJCXByX2VycigiUFJFUF9DTUQ6IGFkYXB0ZXIgaXMgTlVMTFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoYWRhcHRlci0+aXNfc3VzcGVuZGVkKSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiUFJFUF9DTUQ6IGRldmljZSBpbiBzdXNwZW5kZWQgc3RhdGVcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGFkYXB0ZXItPnN1cnByaXNlX3JlbW92ZWQpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJQUkVQX0NNRDogY2FyZCBpcyByZW1vdmVkXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChhZGFwdGVyLT5od19zdGF0dXMgPT0gTVdJRklFWF9IV19TVEFUVVNfUkVTRVQpIHsKKwkJaWYgKGNtZF9ubyAhPSBIb3N0Q21kX0NNRF9GVU5DX0lOSVQpIHsKKwkJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiUFJFUF9DTUQ6IEZXIGluIHJlc2V0IHN0YXRlXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCS8qIEdldCBhIG5ldyBjb21tYW5kIG5vZGUgKi8KKwljbWRfbm9kZSA9IG13aWZpZXhfZ2V0X2NtZF9ub2RlKGFkYXB0ZXIpOworCisJaWYgKCFjbWRfbm9kZSkgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIlBSRVBfQ01EOiBubyBmcmVlIGNtZCBub2RlXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIEluaXRpYWxpemUgdGhlIGNvbW1hbmQgbm9kZSAqLworCW13aWZpZXhfaW5pdF9jbWRfbm9kZShwcml2LCBjbWRfbm9kZSwgY21kX29pZCwgZGF0YV9idWYpOworCisJaWYgKCFjbWRfbm9kZS0+Y21kX3NrYikgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIlBSRVBfQ01EOiBubyBmcmVlIGNtZCBidWZcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJbWVtc2V0KHNrYl9wdXQoY21kX25vZGUtPmNtZF9za2IsIHNpemVvZihzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCkpLAorCSAgICAgICAwLCBzaXplb2Yoc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQpKTsKKworCWNtZF9wdHIgPSAoc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKikgKGNtZF9ub2RlLT5jbWRfc2tiLT5kYXRhKTsKKwljbWRfcHRyLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoY21kX25vKTsKKwljbWRfcHRyLT5yZXN1bHQgPSAwOworCisJLyogUHJlcGFyZSBjb21tYW5kICovCisJaWYgKGNtZF9ubykgeworCQlyZXQgPSBtd2lmaWV4X3N0YV9wcmVwYXJlX2NtZChwcml2LCBjbWRfbm8sIGNtZF9hY3Rpb24sCisJCQkJCSAgICAgIGNtZF9vaWQsIGRhdGFfYnVmLCBjbWRfcHRyKTsKKwl9IGVsc2UgeworCQlyZXQgPSBtd2lmaWV4X2NtZF9ob3N0X2NtZChwcml2LCBjbWRfcHRyLCBkYXRhX2J1Zik7CisJCWNtZF9ub2RlLT5jbWRfZmxhZyB8PSBDTURfRl9IT1NUQ01EOworCX0KKworCS8qIFJldHVybiBlcnJvciwgc2luY2UgdGhlIGNvbW1hbmQgcHJlcGFyYXRpb24gZmFpbGVkICovCisJaWYgKHJldCkgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIlBSRVBfQ01EOiBjbWQgJSN4IHByZXBhcmF0aW9uIGZhaWxlZFxuIiwKKwkJCQkJCQljbWRfbm8pOworCQltd2lmaWV4X2luc2VydF9jbWRfdG9fZnJlZV9xKGFkYXB0ZXIsIGNtZF9ub2RlKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIFNlbmQgY29tbWFuZCAqLworCWlmIChjbWRfbm8gPT0gSG9zdENtZF9DTURfODAyXzExX1NDQU4pCisJCW13aWZpZXhfcXVldWVfc2Nhbl9jbWQocHJpdiwgY21kX25vZGUpOworCWVsc2UKKwkJbXdpZmlleF9pbnNlcnRfY21kX3RvX3BlbmRpbmdfcShhZGFwdGVyLCBjbWRfbm9kZSwgdHJ1ZSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgY29tbWFuZCB0byB0aGUgY29tbWFuZCBmcmVlIHF1ZXVlLgorICoKKyAqIFRoZSBmdW5jdGlvbiBhbHNvIGNhbGxzIHRoZSBjb21wbGV0aW9uIGNhbGxiYWNrIGlmIHJlcXVpcmVkLCBiZWZvcmUKKyAqIGNsZWFuaW5nIHRoZSBjb21tYW5kIG5vZGUgYW5kIHJlLWluc2VydGluZyBpdCBpbnRvIHRoZSBmcmVlIHF1ZXVlLgorICovCit2b2lkCittd2lmaWV4X2luc2VydF9jbWRfdG9fZnJlZV9xKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgIHN0cnVjdCBjbWRfY3RybF9ub2RlICpjbWRfbm9kZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFjbWRfbm9kZSkKKwkJcmV0dXJuOworCisJaWYgKGNtZF9ub2RlLT53YWl0X3FfZW5hYmxlZCkKKwkJbXdpZmlleF9jb21wbGV0ZV9jbWQoYWRhcHRlcik7CisJLyogQ2xlYW4gdGhlIG5vZGUgKi8KKwltd2lmaWV4X2NsZWFuX2NtZF9ub2RlKGFkYXB0ZXIsIGNtZF9ub2RlKTsKKworCS8qIEluc2VydCBub2RlIGludG8gY21kX2ZyZWVfcSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5jbWRfZnJlZV9xX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZjbWRfbm9kZS0+bGlzdCwgJmFkYXB0ZXItPmNtZF9mcmVlX3EpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmNtZF9mcmVlX3FfbG9jaywgZmxhZ3MpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBxdWV1ZXMgYSBjb21tYW5kIHRvIHRoZSBjb21tYW5kIHBlbmRpbmcgcXVldWUuCisgKgorICogVGhpcyBpbiBlZmZlY3QgYWRkcyB0aGUgY29tbWFuZCB0byB0aGUgY29tbWFuZCBsaXN0IHRvIGJlIGV4ZWN1dGVkLgorICogRXhpdCBQUyBjb21tYW5kIGlzIGhhbmRsZWQgc3BlY2lhbGx5LCBieSBwbGFjaW5nIGl0IGFsd2F5cyB0byB0aGUKKyAqIGZyb250IG9mIHRoZSBjb21tYW5kIHF1ZXVlLgorICovCit2b2lkCittd2lmaWV4X2luc2VydF9jbWRfdG9fcGVuZGluZ19xKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJc3RydWN0IGNtZF9jdHJsX25vZGUgKmNtZF9ub2RlLCB1MzIgYWRkX3RhaWwpCit7CisJc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmhvc3RfY21kID0gTlVMTDsKKwl1MTYgY29tbWFuZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaG9zdF9jbWQgPSAoc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKikgKGNtZF9ub2RlLT5jbWRfc2tiLT5kYXRhKTsKKwlpZiAoIWhvc3RfY21kKSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiUVVFVUVfQ01EOiBob3N0X2NtZCBpcyBOVUxMXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWNvbW1hbmQgPSBsZTE2X3RvX2NwdShob3N0X2NtZC0+Y29tbWFuZCk7CisKKwkvKiBFeGl0X1BTIGNvbW1hbmQgbmVlZHMgdG8gYmUgcXVldWVkIGluIHRoZSBoZWFkZXIgYWx3YXlzLiAqLworCWlmIChjb21tYW5kID09IEhvc3RDbWRfQ01EXzgwMl8xMV9QU19NT0RFX0VOSCkgeworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX3BzX21vZGVfZW5oICpwbSA9CisJCQkmaG9zdF9jbWQtPnBhcmFtcy5wc21vZGVfZW5oOworCQlpZiAoKGxlMTZfdG9fY3B1KHBtLT5hY3Rpb24pID09IERJU19QUykKKwkJICAgIHx8IChsZTE2X3RvX2NwdShwbS0+YWN0aW9uKSA9PSBESVNfQVVUT19QUykpIHsKKwkJCWlmIChhZGFwdGVyLT5wc19zdGF0ZSAhPSBQU19TVEFURV9BV0FLRSkKKwkJCQlhZGRfdGFpbCA9IGZhbHNlOworCQl9CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmNtZF9wZW5kaW5nX3FfbG9jaywgZmxhZ3MpOworCWlmIChhZGRfdGFpbCkKKwkJbGlzdF9hZGRfdGFpbCgmY21kX25vZGUtPmxpc3QsICZhZGFwdGVyLT5jbWRfcGVuZGluZ19xKTsKKwllbHNlCisJCWxpc3RfYWRkKCZjbWRfbm9kZS0+bGlzdCwgJmFkYXB0ZXItPmNtZF9wZW5kaW5nX3EpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmNtZF9wZW5kaW5nX3FfbG9jaywgZmxhZ3MpOworCisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJjbWQ6IFFVRVVFX0NNRDogY21kPSUjeCBpcyBxdWV1ZWRcbiIsIGNvbW1hbmQpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBleGVjdXRlcyB0aGUgbmV4dCBjb21tYW5kIGluIGNvbW1hbmQgcGVuZGluZyBxdWV1ZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZmFpbCBpZiBhIGNvbW1hbmQgaXMgYWxyZWFkeSBpbiBwcm9jZXNzaW5nIHN0YWdlLAorICogb3RoZXJ3aXNlIGl0IHdpbGwgZGVxdWV1ZSB0aGUgZmlyc3QgY29tbWFuZCBmcm9tIHRoZSBjb21tYW5kIHBlbmRpbmcKKyAqIHF1ZXVlIGFuZCBzZW5kIHRvIHRoZSBmaXJtd2FyZS4KKyAqCisgKiBJZiB0aGUgZGV2aWNlIGlzIGN1cnJlbnRseSBpbiBob3N0IHNsZWVwIG1vZGUsIGFueSBjb21tYW5kcywgZXhjZXB0IHRoZQorICogaG9zdCBzbGVlcCBjb25maWd1cmF0aW9uIGNvbW1hbmQgd2lsbCBkZS1hY3RpdmF0ZSB0aGUgaG9zdCBzbGVlcC4gRm9yIFBTCisgKiBtb2RlLCB0aGUgZnVuY3Rpb24gd2lsbCBwdXQgdGhlIGZpcm13YXJlIGJhY2sgdG8gc2xlZXAgaWYgYXBwbGljYWJsZS4KKyAqLworaW50IG13aWZpZXhfZXhlY19uZXh0X2NtZChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXY7CisJc3RydWN0IGNtZF9jdHJsX25vZGUgKmNtZF9ub2RlOworCWludCByZXQgPSAwOworCXN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpob3N0X2NtZDsKKwl1bnNpZ25lZCBsb25nIGNtZF9mbGFnczsKKwl1bnNpZ25lZCBsb25nIGNtZF9wZW5kaW5nX3FfZmxhZ3M7CisKKwkvKiBDaGVjayBpZiBhbHJlYWR5IGluIHByb2Nlc3NpbmcgKi8KKwlpZiAoYWRhcHRlci0+Y3Vycl9jbWQpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJFWEVDX05FWFRfQ01EOiBjbWQgaW4gcHJvY2Vzc2luZ1xuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+bXdpZmlleF9jbWRfbG9jaywgY21kX2ZsYWdzKTsKKwkvKiBDaGVjayBpZiBhbnkgY29tbWFuZCBpcyBwZW5kaW5nICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmNtZF9wZW5kaW5nX3FfbG9jaywgY21kX3BlbmRpbmdfcV9mbGFncyk7CisJaWYgKGxpc3RfZW1wdHkoJmFkYXB0ZXItPmNtZF9wZW5kaW5nX3EpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmNtZF9wZW5kaW5nX3FfbG9jaywKKwkJCQkgICAgICAgY21kX3BlbmRpbmdfcV9mbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPm13aWZpZXhfY21kX2xvY2ssIGNtZF9mbGFncyk7CisJCXJldHVybiAwOworCX0KKwljbWRfbm9kZSA9IGxpc3RfZmlyc3RfZW50cnkoJmFkYXB0ZXItPmNtZF9wZW5kaW5nX3EsCisJCQkJICAgIHN0cnVjdCBjbWRfY3RybF9ub2RlLCBsaXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5jbWRfcGVuZGluZ19xX2xvY2ssCisJCQkgICAgICAgY21kX3BlbmRpbmdfcV9mbGFncyk7CisKKwlob3N0X2NtZCA9IChzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqKSAoY21kX25vZGUtPmNtZF9za2ItPmRhdGEpOworCXByaXYgPSBjbWRfbm9kZS0+cHJpdjsKKworCWlmIChhZGFwdGVyLT5wc19zdGF0ZSAhPSBQU19TVEFURV9BV0FLRSkgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIiVzOiBjYW5ub3Qgc2VuZCBjbWQgaW4gc2xlZXAgc3RhdGUsIgorCQkJCSIgdGhpcyBzaG91bGQgbm90IGhhcHBlblxuIiwgX19mdW5jX18pOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5td2lmaWV4X2NtZF9sb2NrLCBjbWRfZmxhZ3MpOworCQlyZXR1cm4gcmV0OworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5jbWRfcGVuZGluZ19xX2xvY2ssIGNtZF9wZW5kaW5nX3FfZmxhZ3MpOworCWxpc3RfZGVsKCZjbWRfbm9kZS0+bGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Y21kX3BlbmRpbmdfcV9sb2NrLAorCQkJICAgICAgIGNtZF9wZW5kaW5nX3FfZmxhZ3MpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+bXdpZmlleF9jbWRfbG9jaywgY21kX2ZsYWdzKTsKKwlyZXQgPSBtd2lmaWV4X2RubGRfY21kX3RvX2Z3KHByaXYsIGNtZF9ub2RlKTsKKwlwcml2ID0gbXdpZmlleF9nZXRfcHJpdihhZGFwdGVyLCBNV0lGSUVYX0JTU19ST0xFX0FOWSk7CisJLyogQW55IGNvbW1hbmQgc2VudCB0byB0aGUgZmlybXdhcmUgd2hlbiBob3N0IGlzIGluIHNsZWVwCisJICogbW9kZSBzaG91bGQgZGUtY29uZmlndXJlIGhvc3Qgc2xlZXAuIFdlIHNob3VsZCBza2lwIHRoZQorCSAqIGhvc3Qgc2xlZXAgY29uZmlndXJhdGlvbiBjb21tYW5kIGl0c2VsZiB0aG91Z2gKKwkgKi8KKwlpZiAocHJpdiAmJiAoaG9zdF9jbWQtPmNvbW1hbmQgIT0KKwkgICAgIGNwdV90b19sZTE2KEhvc3RDbWRfQ01EXzgwMl8xMV9IU19DRkdfRU5IKSkpIHsKKwkJaWYgKGFkYXB0ZXItPmhzX2FjdGl2YXRlZCkgeworCQkJYWRhcHRlci0+aXNfaHNfY29uZmlndXJlZCA9IGZhbHNlOworCQkJbXdpZmlleF9oc19hY3RpdmF0ZWRfZXZlbnQocHJpdiwgZmFsc2UpOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgY29tbWFuZCByZXNwb25zZS4KKyAqCisgKiBBZnRlciBwcm9jZXNzaW5nLCB0aGUgZnVuY3Rpb24gY2xlYW5zIHRoZSBjb21tYW5kIG5vZGUgYW5kIHB1dHMKKyAqIGl0IGJhY2sgdG8gdGhlIGNvbW1hbmQgZnJlZSBxdWV1ZS4KKyAqLworaW50IG13aWZpZXhfcHJvY2Vzc19jbWRyZXNwKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKnJlc3A7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9CisJCW13aWZpZXhfZ2V0X3ByaXYoYWRhcHRlciwgTVdJRklFWF9CU1NfUk9MRV9BTlkpOworCWludCByZXQgPSAwOworCXVpbnQxNl90IG9yaWdfY21kcmVzcF9ubzsKKwl1aW50MTZfdCBjbWRyZXNwX25vOworCXVpbnQxNl90IGNtZHJlc3BfcmVzdWx0OworCXN0cnVjdCB0aW1ldmFsIHRzdGFtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogTm93IHdlIGdvdCByZXNwb25zZSBmcm9tIEZXLCBjYW5jZWwgdGhlIGNvbW1hbmQgdGltZXIgKi8KKwlkZWxfdGltZXIoJmFkYXB0ZXItPmNtZF90aW1lcik7CisKKwlpZiAoIWFkYXB0ZXItPmN1cnJfY21kIHx8ICFhZGFwdGVyLT5jdXJyX2NtZC0+cmVzcF9za2IpIHsKKwkJcmVzcCA9IChzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqKSBhZGFwdGVyLT51cGxkX2J1ZjsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJDTURfUkVTUDogTlVMTCBjdXJyX2NtZCwgJSN4XG4iLAorCQkgICAgICAgbGUxNl90b19jcHUocmVzcC0+Y29tbWFuZCkpOworCQlyZXR1cm4gLTE7CisJfQorCisJYWRhcHRlci0+bnVtX2NtZF90aW1lb3V0ID0gMDsKKworCXJlc3AgPSAoc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKikgYWRhcHRlci0+Y3Vycl9jbWQtPnJlc3Bfc2tiLT5kYXRhOworCWlmIChhZGFwdGVyLT5jdXJyX2NtZC0+Y21kX2ZsYWcgJiBDTURfRl9DQU5DRUxFRCkgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIkNNRF9SRVNQOiAlI3ggYmVlbiBjYW5jZWxlZFxuIiwKKwkJCQlsZTE2X3RvX2NwdShyZXNwLT5jb21tYW5kKSk7CisJCW13aWZpZXhfaW5zZXJ0X2NtZF90b19mcmVlX3EoYWRhcHRlciwgYWRhcHRlci0+Y3Vycl9jbWQpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+bXdpZmlleF9jbWRfbG9jaywgZmxhZ3MpOworCQlhZGFwdGVyLT5jdXJyX2NtZCA9IE5VTEw7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPm13aWZpZXhfY21kX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChhZGFwdGVyLT5jdXJyX2NtZC0+Y21kX2ZsYWcgJiBDTURfRl9IT1NUQ01EKSB7CisJCS8qIENvcHkgb3JpZ2luYWwgcmVzcG9uc2UgYmFjayB0byByZXNwb25zZSBidWZmZXIgKi8KKwkJc3RydWN0IG13aWZpZXhfZHNfbWlzY19jbWQgKmhvc3RjbWQgPSBOVUxMOworCQl1aW50MTZfdCBzaXplID0gbGUxNl90b19jcHUocmVzcC0+c2l6ZSk7CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogaG9zdCBjbWQgcmVzcCBzaXplID0gJWRcbiIsIHNpemUpOworCQlzaXplID0gbWluX3QodTE2LCBzaXplLCBNV0lGSUVYX1NJWkVfT0ZfQ01EX0JVRkZFUik7CisJCWlmIChhZGFwdGVyLT5jdXJyX2NtZC0+ZGF0YV9idWYpIHsKKwkJCWhvc3RjbWQgPSAoc3RydWN0IG13aWZpZXhfZHNfbWlzY19jbWQgKikKKwkJCQkJCWFkYXB0ZXItPmN1cnJfY21kLT5kYXRhX2J1ZjsKKwkJCWhvc3RjbWQtPmxlbiA9IHNpemU7CisJCQltZW1jcHkoaG9zdGNtZC0+Y21kLCAodm9pZCAqKSByZXNwLCBzaXplKTsKKwkJfQorCX0KKwlvcmlnX2NtZHJlc3Bfbm8gPSBsZTE2X3RvX2NwdShyZXNwLT5jb21tYW5kKTsKKworCS8qIEdldCBCU1MgbnVtYmVyIGFuZCBjb3JyZXNwb25kaW5nIHByaXYgKi8KKwlwcml2ID0gbXdpZmlleF9nZXRfcHJpdl9ieV9pZChhZGFwdGVyLAorCQkJSG9zdENtZF9HRVRfQlNTX05PKGxlMTZfdG9fY3B1KHJlc3AtPnNlcV9udW0pKSwKKwkJCUhvc3RDbWRfR0VUX0JTU19UWVBFKGxlMTZfdG9fY3B1KHJlc3AtPnNlcV9udW0pKSk7CisJaWYgKCFwcml2KQorCQlwcml2ID0gbXdpZmlleF9nZXRfcHJpdihhZGFwdGVyLCBNV0lGSUVYX0JTU19ST0xFX0FOWSk7CisJLyogQ2xlYXIgUkVUX0JJVCBmcm9tIEhvc3RDbWQgKi8KKwlyZXNwLT5jb21tYW5kID0gY3B1X3RvX2xlMTYob3JpZ19jbWRyZXNwX25vICYgSG9zdENtZF9DTURfSURfTUFTSyk7CisKKwljbWRyZXNwX25vID0gbGUxNl90b19jcHUocmVzcC0+Y29tbWFuZCk7CisJY21kcmVzcF9yZXN1bHQgPSBsZTE2X3RvX2NwdShyZXNwLT5yZXN1bHQpOworCisJLyogU2F2ZSB0aGUgbGFzdCBjb21tYW5kIHJlc3BvbnNlIHRvIGRlYnVnIGxvZyAqLworCWFkYXB0ZXItPmRiZy5sYXN0X2NtZF9yZXNwX2luZGV4ID0KKwkJKGFkYXB0ZXItPmRiZy5sYXN0X2NtZF9yZXNwX2luZGV4ICsgMSkgJSBEQkdfQ01EX05VTTsKKwlhZGFwdGVyLT5kYmcubGFzdF9jbWRfcmVzcF9pZFthZGFwdGVyLT5kYmcubGFzdF9jbWRfcmVzcF9pbmRleF0gPQorCQlvcmlnX2NtZHJlc3Bfbm87CisKKwlkb19nZXR0aW1lb2ZkYXkoJnRzdGFtcCk7CisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJjbWQ6IENNRF9SRVNQOiAoJWx1LiVsdSk6IDB4JXgsIHJlc3VsdCAlZCwiCisJCSIgbGVuICVkLCBzZXFubyAweCV4XG4iLAorCSAgICAgICB0c3RhbXAudHZfc2VjLCB0c3RhbXAudHZfdXNlYywgb3JpZ19jbWRyZXNwX25vLCBjbWRyZXNwX3Jlc3VsdCwKKwkgICAgICAgbGUxNl90b19jcHUocmVzcC0+c2l6ZSksIGxlMTZfdG9fY3B1KHJlc3AtPnNlcV9udW0pKTsKKworCWlmICghKG9yaWdfY21kcmVzcF9ubyAmIEhvc3RDbWRfUkVUX0JJVCkpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJDTURfUkVTUDogaW52YWxpZCBjbWQgcmVzcFxuIik7CisJCWlmIChhZGFwdGVyLT5jdXJyX2NtZC0+d2FpdF9xX2VuYWJsZWQpCisJCQlhZGFwdGVyLT5jbWRfd2FpdF9xLnN0YXR1cyA9IC0xOworCisJCW13aWZpZXhfaW5zZXJ0X2NtZF90b19mcmVlX3EoYWRhcHRlciwgYWRhcHRlci0+Y3Vycl9jbWQpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+bXdpZmlleF9jbWRfbG9jaywgZmxhZ3MpOworCQlhZGFwdGVyLT5jdXJyX2NtZCA9IE5VTEw7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPm13aWZpZXhfY21kX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChhZGFwdGVyLT5jdXJyX2NtZC0+Y21kX2ZsYWcgJiBDTURfRl9IT1NUQ01EKSB7CisJCWFkYXB0ZXItPmN1cnJfY21kLT5jbWRfZmxhZyAmPSB+Q01EX0ZfSE9TVENNRDsKKwkJaWYgKChjbWRyZXNwX3Jlc3VsdCA9PSBIb3N0Q21kX1JFU1VMVF9PSykKKwkJICAgICYmIChjbWRyZXNwX25vID09IEhvc3RDbWRfQ01EXzgwMl8xMV9IU19DRkdfRU5IKSkKKwkJCXJldCA9IG13aWZpZXhfcmV0XzgwMl8xMV9oc19jZmcocHJpdiwgcmVzcCk7CisJfSBlbHNlIHsKKwkJLyogaGFuZGxlIHJlc3BvbnNlICovCisJCXJldCA9IG13aWZpZXhfcHJvY2Vzc19zdGFfY21kcmVzcChwcml2LCBjbWRyZXNwX25vLCByZXNwKTsKKwl9CisKKwkvKiBDaGVjayBpbml0IGNvbW1hbmQgcmVzcG9uc2UgKi8KKwlpZiAoYWRhcHRlci0+aHdfc3RhdHVzID09IE1XSUZJRVhfSFdfU1RBVFVTX0lOSVRJQUxJWklORykgeworCQlpZiAocmV0ID09IC0xKSB7CisJCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIiVzOiBjbWQgJSN4IGZhaWxlZCBkdXJpbmcgIgorCQkJCSJpbml0aWFsaXphdGlvblxuIiwgX19mdW5jX18sIGNtZHJlc3Bfbm8pOworCQkJbXdpZmlleF9pbml0X2Z3X2NvbXBsZXRlKGFkYXB0ZXIpOworCQkJcmV0dXJuIC0xOworCQl9IGVsc2UgaWYgKGFkYXB0ZXItPmxhc3RfaW5pdF9jbWQgPT0gY21kcmVzcF9ubykKKwkJCWFkYXB0ZXItPmh3X3N0YXR1cyA9IE1XSUZJRVhfSFdfU1RBVFVTX0lOSVRfRE9ORTsKKwl9CisKKwlpZiAoYWRhcHRlci0+Y3Vycl9jbWQpIHsKKwkJaWYgKGFkYXB0ZXItPmN1cnJfY21kLT53YWl0X3FfZW5hYmxlZCAmJiAoIXJldCkpCisJCQlhZGFwdGVyLT5jbWRfd2FpdF9xLnN0YXR1cyA9IDA7CisJCWVsc2UgaWYgKGFkYXB0ZXItPmN1cnJfY21kLT53YWl0X3FfZW5hYmxlZCAmJiAocmV0ID09IC0xKSkKKwkJCWFkYXB0ZXItPmNtZF93YWl0X3Euc3RhdHVzID0gLTE7CisKKwkJLyogQ2xlYW4gdXAgYW5kIHB1dCBjdXJyZW50IGNvbW1hbmQgYmFjayB0byBjbWRfZnJlZV9xICovCisJCW13aWZpZXhfaW5zZXJ0X2NtZF90b19mcmVlX3EoYWRhcHRlciwgYWRhcHRlci0+Y3Vycl9jbWQpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5td2lmaWV4X2NtZF9sb2NrLCBmbGFncyk7CisJCWFkYXB0ZXItPmN1cnJfY21kID0gTlVMTDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+bXdpZmlleF9jbWRfbG9jaywgZmxhZ3MpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIHRpbWVvdXQgb2YgY29tbWFuZCBzZW5kaW5nLgorICoKKyAqIEl0IHdpbGwgcmUtc2VuZCB0aGUgc2FtZSBjb21tYW5kIGFnYWluLgorICovCit2b2lkCittd2lmaWV4X2NtZF90aW1lb3V0X2Z1bmModW5zaWduZWQgbG9uZyBmdW5jdGlvbl9jb250ZXh0KQoreworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPQorCQkoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqKSBmdW5jdGlvbl9jb250ZXh0OworCXN0cnVjdCBjbWRfY3RybF9ub2RlICpjbWRfbm9kZTsKKwlzdHJ1Y3QgdGltZXZhbCB0c3RhbXA7CisKKwlhZGFwdGVyLT5udW1fY21kX3RpbWVvdXQrKzsKKwlhZGFwdGVyLT5kYmcubnVtX2NtZF90aW1lb3V0Kys7CisJaWYgKCFhZGFwdGVyLT5jdXJyX2NtZCkgeworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImNtZDogZW1wdHkgY3Vycl9jbWRcbiIpOworCQlyZXR1cm47CisJfQorCWNtZF9ub2RlID0gYWRhcHRlci0+Y3Vycl9jbWQ7CisJaWYgKGNtZF9ub2RlLT53YWl0X3FfZW5hYmxlZCkKKwkJYWRhcHRlci0+Y21kX3dhaXRfcS5zdGF0dXMgPSAtRVRJTUVET1VUOworCisJaWYgKGNtZF9ub2RlKSB7CisJCWFkYXB0ZXItPmRiZy50aW1lb3V0X2NtZF9pZCA9CisJCQlhZGFwdGVyLT5kYmcubGFzdF9jbWRfaWRbYWRhcHRlci0+ZGJnLmxhc3RfY21kX2luZGV4XTsKKwkJYWRhcHRlci0+ZGJnLnRpbWVvdXRfY21kX2FjdCA9CisJCQlhZGFwdGVyLT5kYmcubGFzdF9jbWRfYWN0W2FkYXB0ZXItPmRiZy5sYXN0X2NtZF9pbmRleF07CisJCWRvX2dldHRpbWVvZmRheSgmdHN0YW1wKTsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICIlczogVGltZW91dCBjbWQgaWQgKCVsdS4lbHUpID0gJSN4LCIKKwkJCSIgYWN0ID0gJSN4XG4iLCBfX2Z1bmNfXywKKwkJICAgICAgIHRzdGFtcC50dl9zZWMsIHRzdGFtcC50dl91c2VjLAorCQkgICAgICAgYWRhcHRlci0+ZGJnLnRpbWVvdXRfY21kX2lkLAorCQkgICAgICAgYWRhcHRlci0+ZGJnLnRpbWVvdXRfY21kX2FjdCk7CisKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJudW1fZGF0YV9oMmNfZmFpbHVyZSA9ICVkXG4iLAorCQkgICAgICAgYWRhcHRlci0+ZGJnLm51bV90eF9ob3N0X3RvX2NhcmRfZmFpbHVyZSk7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAibnVtX2NtZF9oMmNfZmFpbHVyZSA9ICVkXG4iLAorCQkgICAgICAgYWRhcHRlci0+ZGJnLm51bV9jbWRfaG9zdF90b19jYXJkX2ZhaWx1cmUpOworCisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAibnVtX2NtZF90aW1lb3V0ID0gJWRcbiIsCisJCSAgICAgICBhZGFwdGVyLT5kYmcubnVtX2NtZF90aW1lb3V0KTsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJudW1fdHhfdGltZW91dCA9ICVkXG4iLAorCQkgICAgICAgYWRhcHRlci0+ZGJnLm51bV90eF90aW1lb3V0KTsKKworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgImxhc3RfY21kX2luZGV4ID0gJWRcbiIsCisJCSAgICAgICBhZGFwdGVyLT5kYmcubGFzdF9jbWRfaW5kZXgpOworCQlwcmludF9oZXhfZHVtcF9ieXRlcygibGFzdF9jbWRfaWQ6ICIsIERVTVBfUFJFRklYX09GRlNFVCwKKwkJCQlhZGFwdGVyLT5kYmcubGFzdF9jbWRfaWQsIERCR19DTURfTlVNKTsKKwkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoImxhc3RfY21kX2FjdDogIiwgRFVNUF9QUkVGSVhfT0ZGU0VULAorCQkJCWFkYXB0ZXItPmRiZy5sYXN0X2NtZF9hY3QsIERCR19DTURfTlVNKTsKKworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgImxhc3RfY21kX3Jlc3BfaW5kZXggPSAlZFxuIiwKKwkJICAgICAgIGFkYXB0ZXItPmRiZy5sYXN0X2NtZF9yZXNwX2luZGV4KTsKKwkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoImxhc3RfY21kX3Jlc3BfaWQ6ICIsIERVTVBfUFJFRklYX09GRlNFVCwKKwkJCQlhZGFwdGVyLT5kYmcubGFzdF9jbWRfcmVzcF9pZCwgREJHX0NNRF9OVU0pOworCisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAibGFzdF9ldmVudF9pbmRleCA9ICVkXG4iLAorCQkgICAgICAgYWRhcHRlci0+ZGJnLmxhc3RfZXZlbnRfaW5kZXgpOworCQlwcmludF9oZXhfZHVtcF9ieXRlcygibGFzdF9ldmVudDogIiwgRFVNUF9QUkVGSVhfT0ZGU0VULAorCQkJCWFkYXB0ZXItPmRiZy5sYXN0X2V2ZW50LCBEQkdfQ01EX05VTSk7CisKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJkYXRhX3NlbnQ9JWQgY21kX3NlbnQ9JWRcbiIsCisJCSAgICAgICBhZGFwdGVyLT5kYXRhX3NlbnQsIGFkYXB0ZXItPmNtZF9zZW50KTsKKworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgInBzX21vZGU9JWQgcHNfc3RhdGU9JWRcbiIsCisJCQkJYWRhcHRlci0+cHNfbW9kZSwgYWRhcHRlci0+cHNfc3RhdGUpOworCX0KKwlpZiAoYWRhcHRlci0+aHdfc3RhdHVzID09IE1XSUZJRVhfSFdfU1RBVFVTX0lOSVRJQUxJWklORykKKwkJbXdpZmlleF9pbml0X2Z3X2NvbXBsZXRlKGFkYXB0ZXIpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjYW5jZWxzIGFsbCB0aGUgcGVuZGluZyBjb21tYW5kcy4KKyAqCisgKiBUaGUgY3VycmVudCBjb21tYW5kLCBhbGwgY29tbWFuZHMgaW4gY29tbWFuZCBwZW5kaW5nIHF1ZXVlIGFuZCBhbGwgc2NhbgorICogY29tbWFuZHMgaW4gc2NhbiBwZW5kaW5nIHF1ZXVlIGFyZSBjYW5jZWxsZWQuIEFsbCB0aGUgY29tcGxldGlvbiBjYWxsYmFja3MKKyAqIGFyZSBjYWxsZWQgd2l0aCBmYWlsdXJlIHN0YXR1cyB0byBlbnN1cmUgY2xlYW51cC4KKyAqLwordm9pZAorbXdpZmlleF9jYW5jZWxfYWxsX3BlbmRpbmdfY21kKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGNtZF9jdHJsX25vZGUgKmNtZF9ub2RlID0gTlVMTCwgKnRtcF9ub2RlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBDYW5jZWwgY3VycmVudCBjbWQgKi8KKwlpZiAoKGFkYXB0ZXItPmN1cnJfY21kKSAmJiAoYWRhcHRlci0+Y3Vycl9jbWQtPndhaXRfcV9lbmFibGVkKSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+bXdpZmlleF9jbWRfbG9jaywgZmxhZ3MpOworCQlhZGFwdGVyLT5jdXJyX2NtZC0+d2FpdF9xX2VuYWJsZWQgPSBmYWxzZTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+bXdpZmlleF9jbWRfbG9jaywgZmxhZ3MpOworCQlhZGFwdGVyLT5jbWRfd2FpdF9xLnN0YXR1cyA9IC0xOworCQltd2lmaWV4X2NvbXBsZXRlX2NtZChhZGFwdGVyKTsKKwl9CisJLyogQ2FuY2VsIGFsbCBwZW5kaW5nIGNvbW1hbmQgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Y21kX3BlbmRpbmdfcV9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNtZF9ub2RlLCB0bXBfbm9kZSwKKwkJCQkgJmFkYXB0ZXItPmNtZF9wZW5kaW5nX3EsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJmNtZF9ub2RlLT5saXN0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Y21kX3BlbmRpbmdfcV9sb2NrLCBmbGFncyk7CisKKwkJaWYgKGNtZF9ub2RlLT53YWl0X3FfZW5hYmxlZCkgeworCQkJYWRhcHRlci0+Y21kX3dhaXRfcS5zdGF0dXMgPSAtMTsKKwkJCW13aWZpZXhfY29tcGxldGVfY21kKGFkYXB0ZXIpOworCQkJY21kX25vZGUtPndhaXRfcV9lbmFibGVkID0gZmFsc2U7CisJCX0KKwkJbXdpZmlleF9pbnNlcnRfY21kX3RvX2ZyZWVfcShhZGFwdGVyLCBjbWRfbm9kZSk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5jbWRfcGVuZGluZ19xX2xvY2ssIGZsYWdzKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Y21kX3BlbmRpbmdfcV9sb2NrLCBmbGFncyk7CisKKwkvKiBDYW5jZWwgYWxsIHBlbmRpbmcgc2NhbiBjb21tYW5kICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnNjYW5fcGVuZGluZ19xX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY21kX25vZGUsIHRtcF9ub2RlLAorCQkJCSAmYWRhcHRlci0+c2Nhbl9wZW5kaW5nX3EsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJmNtZF9ub2RlLT5saXN0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+c2Nhbl9wZW5kaW5nX3FfbG9jaywgZmxhZ3MpOworCisJCWNtZF9ub2RlLT53YWl0X3FfZW5hYmxlZCA9IGZhbHNlOworCQltd2lmaWV4X2luc2VydF9jbWRfdG9fZnJlZV9xKGFkYXB0ZXIsIGNtZF9ub2RlKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnNjYW5fcGVuZGluZ19xX2xvY2ssIGZsYWdzKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+c2Nhbl9wZW5kaW5nX3FfbG9jaywgZmxhZ3MpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPm13aWZpZXhfY21kX2xvY2ssIGZsYWdzKTsKKwlhZGFwdGVyLT5zY2FuX3Byb2Nlc3NpbmcgPSBmYWxzZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5td2lmaWV4X2NtZF9sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNhbmNlbHMgYWxsIHBlbmRpbmcgY29tbWFuZHMgdGhhdCBtYXRjaGVzIHdpdGgKKyAqIHRoZSBnaXZlbiBJT0NUTCByZXF1ZXN0LgorICoKKyAqIEJvdGggdGhlIGN1cnJlbnQgY29tbWFuZCBidWZmZXIgYW5kIHRoZSBwZW5kaW5nIGNvbW1hbmQgcXVldWUgYXJlCisgKiBzZWFyY2hlZCBmb3IgbWF0Y2hpbmcgSU9DVEwgcmVxdWVzdC4gVGhlIGNvbXBsZXRpb24gY2FsbGJhY2sgb2YKKyAqIHRoZSBtYXRjaGVkIGNvbW1hbmQgaXMgY2FsbGVkIHdpdGggZmFpbHVyZSBzdGF0dXMgdG8gZW5zdXJlIGNsZWFudXAuCisgKiBJbiBjYXNlIG9mIHNjYW4gY29tbWFuZHMsIGFsbCBwZW5kaW5nIGNvbW1hbmRzIGluIHNjYW4gcGVuZGluZyBxdWV1ZQorICogYXJlIGNhbmNlbGxlZC4KKyAqLwordm9pZAorbXdpZmlleF9jYW5jZWxfcGVuZGluZ19pb2N0bChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBjbWRfY3RybF9ub2RlICpjbWRfbm9kZSA9IE5VTEwsICp0bXBfbm9kZSA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBjbWRfZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBjbWRfcGVuZGluZ19xX2ZsYWdzOworCXVuc2lnbmVkIGxvbmcgc2Nhbl9wZW5kaW5nX3FfZmxhZ3M7CisJdWludDE2X3QgY2FuY2VsX3NjYW5fY21kID0gZmFsc2U7CisKKwlpZiAoKGFkYXB0ZXItPmN1cnJfY21kKSAmJgorCSAgICAgKGFkYXB0ZXItPmN1cnJfY21kLT53YWl0X3FfZW5hYmxlZCkpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPm13aWZpZXhfY21kX2xvY2ssIGNtZF9mbGFncyk7CisJCWNtZF9ub2RlID0gYWRhcHRlci0+Y3Vycl9jbWQ7CisJCWNtZF9ub2RlLT53YWl0X3FfZW5hYmxlZCA9IGZhbHNlOworCQljbWRfbm9kZS0+Y21kX2ZsYWcgfD0gQ01EX0ZfQ0FOQ0VMRUQ7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5jbWRfcGVuZGluZ19xX2xvY2ssCisJCQkJICBjbWRfcGVuZGluZ19xX2ZsYWdzKTsKKwkJbGlzdF9kZWwoJmNtZF9ub2RlLT5saXN0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Y21kX3BlbmRpbmdfcV9sb2NrLAorCQkJCSAgICAgICBjbWRfcGVuZGluZ19xX2ZsYWdzKTsKKwkJbXdpZmlleF9pbnNlcnRfY21kX3RvX2ZyZWVfcShhZGFwdGVyLCBjbWRfbm9kZSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPm13aWZpZXhfY21kX2xvY2ssIGNtZF9mbGFncyk7CisJfQorCisJLyogQ2FuY2VsIGFsbCBwZW5kaW5nIHNjYW4gY29tbWFuZCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5zY2FuX3BlbmRpbmdfcV9sb2NrLAorCQkJICBzY2FuX3BlbmRpbmdfcV9mbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNtZF9ub2RlLCB0bXBfbm9kZSwKKwkJCQkgJmFkYXB0ZXItPnNjYW5fcGVuZGluZ19xLCBsaXN0KSB7CisJCWxpc3RfZGVsKCZjbWRfbm9kZS0+bGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnNjYW5fcGVuZGluZ19xX2xvY2ssCisJCQkJICAgICAgIHNjYW5fcGVuZGluZ19xX2ZsYWdzKTsKKwkJY21kX25vZGUtPndhaXRfcV9lbmFibGVkID0gZmFsc2U7CisJCW13aWZpZXhfaW5zZXJ0X2NtZF90b19mcmVlX3EoYWRhcHRlciwgY21kX25vZGUpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+c2Nhbl9wZW5kaW5nX3FfbG9jaywKKwkJCQkgIHNjYW5fcGVuZGluZ19xX2ZsYWdzKTsKKwkJY2FuY2VsX3NjYW5fY21kID0gdHJ1ZTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+c2Nhbl9wZW5kaW5nX3FfbG9jaywKKwkJCSAgICAgICBzY2FuX3BlbmRpbmdfcV9mbGFncyk7CisKKwlpZiAoY2FuY2VsX3NjYW5fY21kKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5td2lmaWV4X2NtZF9sb2NrLCBjbWRfZmxhZ3MpOworCQlhZGFwdGVyLT5zY2FuX3Byb2Nlc3NpbmcgPSBmYWxzZTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+bXdpZmlleF9jbWRfbG9jaywgY21kX2ZsYWdzKTsKKwl9CisJYWRhcHRlci0+Y21kX3dhaXRfcS5zdGF0dXMgPSAtMTsKKwltd2lmaWV4X2NvbXBsZXRlX2NtZChhZGFwdGVyKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgdGhlIHNsZWVwIGNvbmZpcm0gY29tbWFuZCB0byBmaXJtd2FyZSwgaWYKKyAqIHBvc3NpYmxlLgorICoKKyAqIFRoZSBzbGVlcCBjb25maXJtIGNvbW1hbmQgY2Fubm90IGJlIGlzc3VlZCBpZiBjb21tYW5kIHJlc3BvbnNlLAorICogZGF0YSByZXNwb25zZSBvciBldmVudCByZXNwb25zZSBpcyBhd2FpdGluZyBoYW5kbGluZywgb3IgaWYgd2UKKyAqIGFyZSBpbiB0aGUgbWlkZGxlIG9mIHNlbmRpbmcgYSBjb21tYW5kLCBvciBleHBlY3RpbmcgYSBjb21tYW5kCisgKiByZXNwb25zZS4KKyAqLwordm9pZAorbXdpZmlleF9jaGVja19wc19jb25kKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaWYgKCFhZGFwdGVyLT5jbWRfc2VudCAmJgorCSAgICAhYWRhcHRlci0+Y3Vycl9jbWQgJiYgIUlTX0NBUkRfUlhfUkNWRChhZGFwdGVyKSkKKwkJbXdpZmlleF9kbmxkX3NsZWVwX2NvbmZpcm1fY21kKGFkYXB0ZXIpOworCWVsc2UKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsCisJCQkiY21kOiBEZWxheSBTbGVlcCBDb25maXJtICglcyVzJXMpXG4iLAorCQkgICAgICAgKGFkYXB0ZXItPmNtZF9zZW50KSA/ICJEIiA6ICIiLAorCQkgICAgICAgKGFkYXB0ZXItPmN1cnJfY21kKSA/ICJDIiA6ICIiLAorCQkgICAgICAgKElTX0NBUkRfUlhfUkNWRChhZGFwdGVyKSkgPyAiUiIgOiAiIik7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgSG9zdCBTbGVlcCBhY3RpdmF0ZWQgZXZlbnQgdG8gYXBwbGljYXRpb25zLgorICoKKyAqIFRoaXMgZXZlbnQgaXMgZ2VuZXJhdGVkIGJ5IHRoZSBkcml2ZXIsIHdpdGggYSBibGFuayBldmVudCBib2R5LgorICovCit2b2lkCittd2lmaWV4X2hzX2FjdGl2YXRlZF9ldmVudChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCBhY3RpdmF0ZWQpCit7CisJaWYgKGFjdGl2YXRlZCkgeworCQlpZiAocHJpdi0+YWRhcHRlci0+aXNfaHNfY29uZmlndXJlZCkgeworCQkJcHJpdi0+YWRhcHRlci0+aHNfYWN0aXZhdGVkID0gdHJ1ZTsKKwkJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiZXZlbnQ6IGhzX2FjdGl2YXRlZFxuIik7CisJCQlwcml2LT5hZGFwdGVyLT5oc19hY3RpdmF0ZV93YWl0X3Ffd29rZW4gPSB0cnVlOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKAorCQkJCSZwcml2LT5hZGFwdGVyLT5oc19hY3RpdmF0ZV93YWl0X3EpOworCQl9IGVsc2UgeworCQkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJldmVudDogSFMgbm90IGNvbmZpZ3VyZWRcbiIpOworCQl9CisJfSBlbHNlIHsKKwkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJldmVudDogaHNfZGVhY3RpdmF0ZWRcbiIpOworCQlwcml2LT5hZGFwdGVyLT5oc19hY3RpdmF0ZWQgPSBmYWxzZTsKKwl9Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGNvbW1hbmQgcmVzcG9uc2Ugb2YgYSBIb3N0IFNsZWVwIGNvbmZpZ3VyYXRpb24KKyAqIGNvbW1hbmQuCisgKgorICogSGFuZGxpbmcgaW5jbHVkZXMgY2hhbmdpbmcgdGhlIGhlYWRlciBmaWVsZHMgaW50byBDUFUgZm9ybWF0CisgKiBhbmQgc2V0dGluZyB0aGUgY3VycmVudCBob3N0IHNsZWVwIGFjdGl2YXRpb24gc3RhdHVzIGluIGRyaXZlci4KKyAqCisgKiBJbiBjYXNlIGhvc3Qgc2xlZXAgc3RhdHVzIGNoYW5nZSwgdGhlIGZ1bmN0aW9uIGdlbmVyYXRlcyBhbiBldmVudCB0bworICogbm90aWZ5IHRoZSBhcHBsaWNhdGlvbnMuCisgKi8KK2ludCBtd2lmaWV4X3JldF84MDJfMTFfaHNfY2ZnKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqcmVzcCkKK3sKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2hzX2NmZ19lbmggKnBoc19jZmcgPQorCQkmcmVzcC0+cGFyYW1zLm9wdF9oc19jZmc7CisJdWludDMyX3QgY29uZGl0aW9ucyA9IGxlMzJfdG9fY3B1KHBoc19jZmctPnBhcmFtcy5oc19jb25maWcuY29uZGl0aW9ucyk7CisKKwlpZiAocGhzX2NmZy0+YWN0aW9uID09IGNwdV90b19sZTE2KEhTX0FDVElWQVRFKSkgeworCQltd2lmaWV4X2hzX2FjdGl2YXRlZF9ldmVudChwcml2LCB0cnVlKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJjbWQ6IENNRF9SRVNQOiBIU19DRkcgY21kIHJlcGx5IgorCQkJIiByZXN1bHQ9JSN4LCBjb25kaXRpb25zPTB4JXggZ3Bpbz0weCV4IGdhcD0weCV4XG4iLAorCQkJcmVzcC0+cmVzdWx0LCBjb25kaXRpb25zLAorCQkgICAgICAgcGhzX2NmZy0+cGFyYW1zLmhzX2NvbmZpZy5ncGlvLAorCQkgICAgICAgcGhzX2NmZy0+cGFyYW1zLmhzX2NvbmZpZy5nYXApOworCX0KKwlpZiAoY29uZGl0aW9ucyAhPSBIT1NUX1NMRUVQX0NGR19DQU5DRUwpIHsKKwkJYWRhcHRlci0+aXNfaHNfY29uZmlndXJlZCA9IHRydWU7CisJfSBlbHNlIHsKKwkJYWRhcHRlci0+aXNfaHNfY29uZmlndXJlZCA9IGZhbHNlOworCQlpZiAoYWRhcHRlci0+aHNfYWN0aXZhdGVkKQorCQkJbXdpZmlleF9oc19hY3RpdmF0ZWRfZXZlbnQocHJpdiwgZmFsc2UpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiB3YWtlcyB1cCB0aGUgYWRhcHRlciBhbmQgZ2VuZXJhdGVzIGEgSG9zdCBTbGVlcAorICogY2FuY2VsIGV2ZW50IG9uIHJlY2VpdmluZyB0aGUgcG93ZXIgdXAgaW50ZXJydXB0LgorICovCit2b2lkCittd2lmaWV4X3Byb2Nlc3NfaHNfY29uZmlnKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiAlczogYXV0byBjYW5jZWxsaW5nIGhvc3Qgc2xlZXAiCisJCSIgc2luY2UgdGhlcmUgaXMgaW50ZXJydXB0IGZyb20gdGhlIGZpcm13YXJlXG4iLCBfX2Z1bmNfXyk7CisKKwlhZGFwdGVyLT5pZl9vcHMud2FrZXVwKGFkYXB0ZXIpOworCWFkYXB0ZXItPmhzX2FjdGl2YXRlZCA9IGZhbHNlOworCWFkYXB0ZXItPmlzX2hzX2NvbmZpZ3VyZWQgPSBmYWxzZTsKKwltd2lmaWV4X2hzX2FjdGl2YXRlZF9ldmVudChtd2lmaWV4X2dldF9wcml2KGFkYXB0ZXIsCisJCQkJICAgTVdJRklFWF9CU1NfUk9MRV9BTlkpLCBmYWxzZSk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGNvbW1hbmQgcmVzcG9uc2Ugb2YgYSBzbGVlcCBjb25maXJtIGNvbW1hbmQuCisgKgorICogVGhlIGZ1bmN0aW9uIHNldHMgdGhlIGNhcmQgc3RhdGUgdG8gU0xFRVAgaWYgdGhlIHJlc3BvbnNlIGluZGljYXRlcyBzdWNjZXNzLgorICovCit2b2lkCittd2lmaWV4X3Byb2Nlc3Nfc2xlZXBfY29uZmlybV9yZXNwKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICAgdTggKnBidWYsIHUzMiB1cGxkX2xlbikKK3sKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kID0gKHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICopIHBidWY7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9CisJCW13aWZpZXhfZ2V0X3ByaXYoYWRhcHRlciwgTVdJRklFWF9CU1NfUk9MRV9BTlkpOworCXVpbnQxNl90IHJlc3VsdCA9IGxlMTZfdG9fY3B1KGNtZC0+cmVzdWx0KTsKKwl1aW50MTZfdCBjb21tYW5kID0gbGUxNl90b19jcHUoY21kLT5jb21tYW5kKTsKKwl1aW50MTZfdCBzZXFfbnVtID0gbGUxNl90b19jcHUoY21kLT5zZXFfbnVtKTsKKworCWlmICghdXBsZF9sZW4pIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICIlczogY21kIHNpemUgaXMgMFxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJLyogR2V0IEJTUyBudW1iZXIgYW5kIGNvcnJlc3BvbmRpbmcgcHJpdiAqLworCXByaXYgPSBtd2lmaWV4X2dldF9wcml2X2J5X2lkKGFkYXB0ZXIsIEhvc3RDbWRfR0VUX0JTU19OTyhzZXFfbnVtKSwKKwkJCQkgICAgICBIb3N0Q21kX0dFVF9CU1NfVFlQRShzZXFfbnVtKSk7CisJaWYgKCFwcml2KQorCQlwcml2ID0gbXdpZmlleF9nZXRfcHJpdihhZGFwdGVyLCBNV0lGSUVYX0JTU19ST0xFX0FOWSk7CisKKwkvKiBVcGRhdGUgc2VxdWVuY2UgbnVtYmVyICovCisJc2VxX251bSA9IEhvc3RDbWRfR0VUX1NFUV9OTyhzZXFfbnVtKTsKKwkvKiBDbGVhciBSRVRfQklUIGZyb20gSG9zdENtZCAqLworCWNvbW1hbmQgJj0gSG9zdENtZF9DTURfSURfTUFTSzsKKworCWlmIChjb21tYW5kICE9IEhvc3RDbWRfQ01EXzgwMl8xMV9QU19NT0RFX0VOSCkgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIiVzOiByZWNlaXZlZCB1bmV4cGVjdGVkIHJlc3BvbnNlIGZvciIKKwkJCSIgY21kICV4LCByZXN1bHQgPSAleFxuIiwgX19mdW5jX18sIGNvbW1hbmQsIHJlc3VsdCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAocmVzdWx0KSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiJXM6IHNsZWVwIGNvbmZpcm0gY21kIGZhaWxlZFxuIiwKKwkJCQkJCV9fZnVuY19fKTsKKwkJYWRhcHRlci0+cG1fd2FrZXVwX2NhcmRfcmVxID0gZmFsc2U7CisJCWFkYXB0ZXItPnBzX3N0YXRlID0gUFNfU1RBVEVfQVdBS0U7CisJCXJldHVybjsKKwl9CisJYWRhcHRlci0+cG1fd2FrZXVwX2NhcmRfcmVxID0gdHJ1ZTsKKwlpZiAoYWRhcHRlci0+aXNfaHNfY29uZmlndXJlZCkKKwkJbXdpZmlleF9oc19hY3RpdmF0ZWRfZXZlbnQobXdpZmlleF9nZXRfcHJpdihhZGFwdGVyLAorCQkJCQkgICBNV0lGSUVYX0JTU19ST0xFX0FOWSksIHRydWUpOworCWFkYXB0ZXItPnBzX3N0YXRlID0gUFNfU1RBVEVfU0xFRVA7CisJY21kLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoY29tbWFuZCk7CisJY21kLT5zZXFfbnVtID0gY3B1X3RvX2xlMTYoc2VxX251bSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtd2lmaWV4X3Byb2Nlc3Nfc2xlZXBfY29uZmlybV9yZXNwKTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgYW4gZW5oYW5jZWQgcG93ZXIgbW9kZSBjb21tYW5kLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gZGlzYWJsZSBwb3dlciBzYXZlIG9yIHRvIGNvbmZpZ3VyZQorICogcG93ZXIgc2F2ZSB3aXRoIGF1dG8gUFMgb3IgU1RBIFBTIG9yIGF1dG8gZGVlcCBzbGVlcC4KKyAqCisgKiBQcmVwYXJhdGlvbiBpbmNsdWRlcyAtCisgKiAgICAgIC0gU2V0dGluZyBjb21tYW5kIElELCBhY3Rpb24gYW5kIHByb3BlciBzaXplCisgKiAgICAgIC0gU2V0dGluZyBQb3dlciBTYXZlIGJpdG1hcCwgUFMgcGFyYW1ldGVycyBUTFYsIFBTIG1vZGUgVExWLAorICogICAgICAgIGF1dG8gZGVlcCBzbGVlcCBUTFYgKGFzIHJlcXVpcmVkKQorICogICAgICAtIEVuc3VyaW5nIGNvcnJlY3QgZW5kaWFuLW5lc3MKKyAqLworaW50IG13aWZpZXhfY21kX2VuaF9wb3dlcl9tb2RlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgICAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwKKwkJCSAgICAgICB1MTYgY21kX2FjdGlvbiwgdWludDE2X3QgcHNfYml0bWFwLAorCQkJICAgICAgIHZvaWQgKmRhdGFfYnVmKQoreworCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfcHNfbW9kZV9lbmggKnBzbW9kZV9lbmggPQorCQkmY21kLT5wYXJhbXMucHNtb2RlX2VuaDsKKwl1OCAqdGx2OworCXUxNiBjbWRfc2l6ZSA9IDA7CisKKwljbWQtPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihIb3N0Q21kX0NNRF84MDJfMTFfUFNfTU9ERV9FTkgpOworCWlmIChjbWRfYWN0aW9uID09IERJU19BVVRPX1BTKSB7CisJCXBzbW9kZV9lbmgtPmFjdGlvbiA9IGNwdV90b19sZTE2KERJU19BVVRPX1BTKTsKKwkJcHNtb2RlX2VuaC0+cGFyYW1zLnBzX2JpdG1hcCA9IGNwdV90b19sZTE2KHBzX2JpdG1hcCk7CisJCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KFNfRFNfR0VOICsgc2l6ZW9mKHBzbW9kZV9lbmgtPmFjdGlvbikgKworCQkJCXNpemVvZihwc21vZGVfZW5oLT5wYXJhbXMucHNfYml0bWFwKSk7CisJfSBlbHNlIGlmIChjbWRfYWN0aW9uID09IEdFVF9QUykgeworCQlwc21vZGVfZW5oLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihHRVRfUFMpOworCQlwc21vZGVfZW5oLT5wYXJhbXMucHNfYml0bWFwID0gY3B1X3RvX2xlMTYocHNfYml0bWFwKTsKKwkJY21kLT5zaXplID0gY3B1X3RvX2xlMTYoU19EU19HRU4gKyBzaXplb2YocHNtb2RlX2VuaC0+YWN0aW9uKSArCisJCQkJc2l6ZW9mKHBzbW9kZV9lbmgtPnBhcmFtcy5wc19iaXRtYXApKTsKKwl9IGVsc2UgaWYgKGNtZF9hY3Rpb24gPT0gRU5fQVVUT19QUykgeworCQlwc21vZGVfZW5oLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihFTl9BVVRPX1BTKTsKKwkJcHNtb2RlX2VuaC0+cGFyYW1zLnBzX2JpdG1hcCA9IGNwdV90b19sZTE2KHBzX2JpdG1hcCk7CisJCWNtZF9zaXplID0gU19EU19HRU4gKyBzaXplb2YocHNtb2RlX2VuaC0+YWN0aW9uKSArCisJCQkJc2l6ZW9mKHBzbW9kZV9lbmgtPnBhcmFtcy5wc19iaXRtYXApOworCQl0bHYgPSAodTggKikgY21kICsgY21kX3NpemU7CisJCWlmIChwc19iaXRtYXAgJiBCSVRNQVBfU1RBX1BTKSB7CisJCQlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwkJCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3BzX3BhcmFtICpwc190bHYgPQorCQkJCShzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19wc19wYXJhbSAqKSB0bHY7CisJCQlzdHJ1Y3QgbXdpZmlleF9wc19wYXJhbSAqcHNfbW9kZSA9ICZwc190bHYtPnBhcmFtOworCQkJcHNfdGx2LT5oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFRMVl9UWVBFX1BTX1BBUkFNKTsKKwkJCXBzX3Rsdi0+aGVhZGVyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcHNfdGx2KSAtCisJCQkJCXNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIpKTsKKwkJCWNtZF9zaXplICs9IHNpemVvZigqcHNfdGx2KTsKKwkJCXRsdiArPSBzaXplb2YoKnBzX3Rsdik7CisJCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImNtZDogUFMgQ29tbWFuZDogRW50ZXIgUFNcbiIpOworCQkJcHNfbW9kZS0+bnVsbF9wa3RfaW50ZXJ2YWwgPQorCQkJCWNwdV90b19sZTE2KGFkYXB0ZXItPm51bGxfcGt0X2ludGVydmFsKTsKKwkJCXBzX21vZGUtPm11bHRpcGxlX2R0aW1zID0KKwkJCQljcHVfdG9fbGUxNihhZGFwdGVyLT5tdWx0aXBsZV9kdGltKTsKKwkJCXBzX21vZGUtPmJjbl9taXNzX3RpbWVvdXQgPQorCQkJCWNwdV90b19sZTE2KGFkYXB0ZXItPmJjbl9taXNzX3RpbWVfb3V0KTsKKwkJCXBzX21vZGUtPmxvY2FsX2xpc3Rlbl9pbnRlcnZhbCA9CisJCQkJY3B1X3RvX2xlMTYoYWRhcHRlci0+bG9jYWxfbGlzdGVuX2ludGVydmFsKTsKKwkJCXBzX21vZGUtPmFkaG9jX3dha2VfcGVyaW9kID0KKwkJCQljcHVfdG9fbGUxNihhZGFwdGVyLT5hZGhvY19hd2FrZV9wZXJpb2QpOworCQkJcHNfbW9kZS0+ZGVsYXlfdG9fcHMgPQorCQkJCWNwdV90b19sZTE2KGFkYXB0ZXItPmRlbGF5X3RvX3BzKTsKKwkJCXBzX21vZGUtPm1vZGUgPQorCQkJCWNwdV90b19sZTE2KGFkYXB0ZXItPmVuaGFuY2VkX3BzX21vZGUpOworCisJCX0KKwkJaWYgKHBzX2JpdG1hcCAmIEJJVE1BUF9BVVRPX0RTKSB7CisJCQlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19hdXRvX2RzX3BhcmFtICphdXRvX2RzX3RsdiA9CisJCQkJKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2F1dG9fZHNfcGFyYW0gKikgdGx2OworCQkJdTE2IGlkbGV0aW1lID0gMDsKKworCQkJYXV0b19kc190bHYtPmhlYWRlci50eXBlID0KKwkJCQljcHVfdG9fbGUxNihUTFZfVFlQRV9BVVRPX0RTX1BBUkFNKTsKKwkJCWF1dG9fZHNfdGx2LT5oZWFkZXIubGVuID0KKwkJCQljcHVfdG9fbGUxNihzaXplb2YoKmF1dG9fZHNfdGx2KSAtCisJCQkJCXNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIpKTsKKwkJCWNtZF9zaXplICs9IHNpemVvZigqYXV0b19kc190bHYpOworCQkJdGx2ICs9IHNpemVvZigqYXV0b19kc190bHYpOworCQkJaWYgKGRhdGFfYnVmKQorCQkJCWlkbGV0aW1lID0gKChzdHJ1Y3QgbXdpZmlleF9kc19hdXRvX2RzICopCisJCQkJCSAgICAgZGF0YV9idWYpLT5pZGxlX3RpbWU7CisJCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwKKwkJCQkJImNtZDogUFMgQ29tbWFuZDogRW50ZXIgQXV0byBEZWVwIFNsZWVwXG4iKTsKKwkJCWF1dG9fZHNfdGx2LT5kZWVwX3NsZWVwX3RpbWVvdXQgPSBjcHVfdG9fbGUxNihpZGxldGltZSk7CisJCX0KKwkJY21kLT5zaXplID0gY3B1X3RvX2xlMTYoY21kX3NpemUpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgY29tbWFuZCByZXNwb25zZSBvZiBhbiBlbmhhbmNlZCBwb3dlciBtb2RlCisgKiBjb21tYW5kLgorICoKKyAqIEhhbmRsaW5nIGluY2x1ZGVzIGNoYW5naW5nIHRoZSBoZWFkZXIgZmllbGRzIGludG8gQ1BVIGZvcm1hdAorICogYW5kIHNldHRpbmcgdGhlIGN1cnJlbnQgZW5oYW5jZWQgcG93ZXIgbW9kZSBpbiBkcml2ZXIuCisgKi8KK2ludCBtd2lmaWV4X3JldF9lbmhfcG93ZXJfbW9kZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwLAorCQkJICAgICAgIHZvaWQgKmRhdGFfYnVmKQoreworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfcHNfbW9kZV9lbmggKnBzX21vZGUgPQorCQkmcmVzcC0+cGFyYW1zLnBzbW9kZV9lbmg7CisJdWludDE2X3QgYWN0aW9uID0gbGUxNl90b19jcHUocHNfbW9kZS0+YWN0aW9uKTsKKwl1aW50MTZfdCBwc19iaXRtYXAgPSBsZTE2X3RvX2NwdShwc19tb2RlLT5wYXJhbXMucHNfYml0bWFwKTsKKwl1aW50MTZfdCBhdXRvX3BzX2JpdG1hcCA9CisJCWxlMTZfdG9fY3B1KHBzX21vZGUtPnBhcmFtcy5wc19iaXRtYXApOworCisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiAlczogUFNfTU9ERSBjbWQgcmVwbHkgcmVzdWx0PSUjeCBhY3Rpb249JSNYXG4iLAorCQkJCQlfX2Z1bmNfXywgcmVzcC0+cmVzdWx0LCBhY3Rpb24pOworCWlmIChhY3Rpb24gPT0gRU5fQVVUT19QUykgeworCQlpZiAoYXV0b19wc19iaXRtYXAgJiBCSVRNQVBfQVVUT19EUykgeworCQkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJjbWQ6IEVuYWJsZWQgYXV0byBkZWVwIHNsZWVwXG4iKTsKKwkJCXByaXYtPmFkYXB0ZXItPmlzX2RlZXBfc2xlZXAgPSB0cnVlOworCQl9CisJCWlmIChhdXRvX3BzX2JpdG1hcCAmIEJJVE1BUF9TVEFfUFMpIHsKKwkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiY21kOiBFbmFibGVkIFNUQSBwb3dlciBzYXZlXG4iKTsKKwkJCWlmIChhZGFwdGVyLT5zbGVlcF9wZXJpb2QucGVyaW9kKQorCQkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiY21kOiBzZXQgdG8gdWFwc2QvcHBzIG1vZGVcbiIpOworCQl9CisJfSBlbHNlIGlmIChhY3Rpb24gPT0gRElTX0FVVE9fUFMpIHsKKwkJaWYgKHBzX2JpdG1hcCAmIEJJVE1BUF9BVVRPX0RTKSB7CisJCQlwcml2LT5hZGFwdGVyLT5pc19kZWVwX3NsZWVwID0gZmFsc2U7CisJCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImNtZDogRGlzYWJsZWQgYXV0byBkZWVwIHNsZWVwXG4iKTsKKwkJfQorCQlpZiAocHNfYml0bWFwICYgQklUTUFQX1NUQV9QUykgeworCQkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJjbWQ6IERpc2FibGVkIFNUQSBwb3dlciBzYXZlXG4iKTsKKwkJCWlmIChhZGFwdGVyLT5zbGVlcF9wZXJpb2QucGVyaW9kKSB7CisJCQkJYWRhcHRlci0+ZGVsYXlfbnVsbF9wa3QgPSBmYWxzZTsKKwkJCQlhZGFwdGVyLT50eF9sb2NrX2ZsYWcgPSBmYWxzZTsKKwkJCQlhZGFwdGVyLT5wcHNfdWFwc2RfbW9kZSA9IGZhbHNlOworCQkJfQorCQl9CisJfSBlbHNlIGlmIChhY3Rpb24gPT0gR0VUX1BTKSB7CisJCWlmIChwc19iaXRtYXAgJiBCSVRNQVBfU1RBX1BTKQorCQkJYWRhcHRlci0+cHNfbW9kZSA9IE1XSUZJRVhfODAyXzExX1BPV0VSX01PREVfUFNQOworCQllbHNlCisJCQlhZGFwdGVyLT5wc19tb2RlID0gTVdJRklFWF84MDJfMTFfUE9XRVJfTU9ERV9DQU07CisKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJjbWQ6IHBzX2JpdG1hcD0lI3hcbiIsIHBzX2JpdG1hcCk7CisKKwkJaWYgKGRhdGFfYnVmKSB7CisJCQkvKiBUaGlzIHNlY3Rpb24gaXMgZm9yIGdldCBwb3dlciBzYXZlIG1vZGUgKi8KKwkJCXN0cnVjdCBtd2lmaWV4X2RzX3BtX2NmZyAqcG1fY2ZnID0KKwkJCQkJKHN0cnVjdCBtd2lmaWV4X2RzX3BtX2NmZyAqKWRhdGFfYnVmOworCQkJaWYgKHBzX2JpdG1hcCAmIEJJVE1BUF9TVEFfUFMpCisJCQkJcG1fY2ZnLT5wYXJhbS5wc19tb2RlID0gMTsKKwkJCWVsc2UKKwkJCQlwbV9jZmctPnBhcmFtLnBzX21vZGUgPSAwOworCQl9CisJfQorCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyBjb21tYW5kIHRvIGdldCBoYXJkd2FyZSBzcGVjaWZpY2F0aW9ucy4KKyAqCisgKiBQcmVwYXJhdGlvbiBpbmNsdWRlcyAtCisgKiAgICAgIC0gU2V0dGluZyBjb21tYW5kIElELCBhY3Rpb24gYW5kIHByb3BlciBzaXplCisgKiAgICAgIC0gU2V0dGluZyBwZXJtYW5lbnQgYWRkcmVzcyBwYXJhbWV0ZXIKKyAqICAgICAgLSBFbnN1cmluZyBjb3JyZWN0IGVuZGlhbi1uZXNzCisgKi8KK2ludCBtd2lmaWV4X2NtZF9nZXRfaHdfc3BlYyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWQpCit7CisJc3RydWN0IGhvc3RfY21kX2RzX2dldF9od19zcGVjICpod19zcGVjID0gJmNtZC0+cGFyYW1zLmh3X3NwZWM7CisKKwljbWQtPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihIb3N0Q21kX0NNRF9HRVRfSFdfU1BFQyk7CisJY21kLT5zaXplID0KKwkJY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBob3N0X2NtZF9kc19nZXRfaHdfc3BlYykgKyBTX0RTX0dFTik7CisJbWVtY3B5KGh3X3NwZWMtPnBlcm1hbmVudF9hZGRyLCBwcml2LT5jdXJyX2FkZHIsIEVUSF9BTEVOKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBjb21tYW5kIHJlc3BvbnNlIG9mIGdldCBoYXJkd2FyZQorICogc3BlY2lmaWNhdGlvbnMuCisgKgorICogSGFuZGxpbmcgaW5jbHVkZXMgY2hhbmdpbmcgdGhlIGhlYWRlciBmaWVsZHMgaW50byBDUFUgZm9ybWF0CisgKiBhbmQgc2F2aW5nL3VwZGF0aW5nIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBpbiBkcml2ZXIgLQorICogICAgICAtIEZpcm13YXJlIGNhcGFiaWxpdHkgaW5mb3JtYXRpb24KKyAqICAgICAgLSBGaXJtd2FyZSBiYW5kIHNldHRpbmdzCisgKiAgICAgIC0gQWQtaG9jIHN0YXJ0IGJhbmQgYW5kIGNoYW5uZWwKKyAqICAgICAgLSBBZC1ob2MgMTFuIGFjdGl2YXRpb24gc3RhdHVzCisgKiAgICAgIC0gRmlybXdhcmUgcmVsZWFzZSBudW1iZXIKKyAqICAgICAgLSBOdW1iZXIgb2YgYW50ZW5uYXMKKyAqICAgICAgLSBIYXJkd2FyZSBhZGRyZXNzCisgKiAgICAgIC0gSGFyZHdhcmUgaW50ZXJmYWNlIHZlcnNpb24KKyAqICAgICAgLSBGaXJtd2FyZSB2ZXJzaW9uCisgKiAgICAgIC0gUmVnaW9uIGNvZGUKKyAqICAgICAgLSAxMW4gY2FwYWJpbGl0aWVzCisgKiAgICAgIC0gTUNTIHN1cHBvcnQgZmllbGRzCisgKiAgICAgIC0gTVAgZW5kIHBvcnQKKyAqLworaW50IG13aWZpZXhfcmV0X2dldF9od19zcGVjKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKnJlc3ApCit7CisJc3RydWN0IGhvc3RfY21kX2RzX2dldF9od19zcGVjICpod19zcGVjID0gJnJlc3AtPnBhcmFtcy5od19zcGVjOworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCWludCBpOworCisJYWRhcHRlci0+ZndfY2FwX2luZm8gPSBsZTMyX3RvX2NwdShod19zcGVjLT5md19jYXBfaW5mbyk7CisKKwlpZiAoSVNfU1VQUE9SVF9NVUxUSV9CQU5EUyhhZGFwdGVyKSkKKwkJYWRhcHRlci0+ZndfYmFuZHMgPSAodTgpIEdFVF9GV19ERUZBVUxUX0JBTkRTKGFkYXB0ZXIpOworCWVsc2UKKwkJYWRhcHRlci0+ZndfYmFuZHMgPSBCQU5EX0I7CisKKwlhZGFwdGVyLT5jb25maWdfYmFuZHMgPSBhZGFwdGVyLT5md19iYW5kczsKKworCWlmIChhZGFwdGVyLT5md19iYW5kcyAmIEJBTkRfQSkgeworCQlpZiAoYWRhcHRlci0+ZndfYmFuZHMgJiBCQU5EX0dOKSB7CisJCQlhZGFwdGVyLT5jb25maWdfYmFuZHMgfD0gQkFORF9BTjsKKwkJCWFkYXB0ZXItPmZ3X2JhbmRzIHw9IEJBTkRfQU47CisJCX0KKwkJaWYgKGFkYXB0ZXItPmZ3X2JhbmRzICYgQkFORF9BTikgeworCQkJYWRhcHRlci0+YWRob2Nfc3RhcnRfYmFuZCA9IEJBTkRfQSB8IEJBTkRfQU47CisJCQlhZGFwdGVyLT5hZGhvY18xMW5fZW5hYmxlZCA9IHRydWU7CisJCX0gZWxzZSB7CisJCQlhZGFwdGVyLT5hZGhvY19zdGFydF9iYW5kID0gQkFORF9BOworCQl9CisJCXByaXYtPmFkaG9jX2NoYW5uZWwgPSBERUZBVUxUX0FEX0hPQ19DSEFOTkVMX0E7CisJfSBlbHNlIGlmIChhZGFwdGVyLT5md19iYW5kcyAmIEJBTkRfR04pIHsKKwkJYWRhcHRlci0+YWRob2Nfc3RhcnRfYmFuZCA9IEJBTkRfRyB8IEJBTkRfQiB8IEJBTkRfR047CisJCXByaXYtPmFkaG9jX2NoYW5uZWwgPSBERUZBVUxUX0FEX0hPQ19DSEFOTkVMOworCQlhZGFwdGVyLT5hZGhvY18xMW5fZW5hYmxlZCA9IHRydWU7CisJfSBlbHNlIGlmIChhZGFwdGVyLT5md19iYW5kcyAmIEJBTkRfRykgeworCQlhZGFwdGVyLT5hZGhvY19zdGFydF9iYW5kID0gQkFORF9HIHwgQkFORF9COworCQlwcml2LT5hZGhvY19jaGFubmVsID0gREVGQVVMVF9BRF9IT0NfQ0hBTk5FTDsKKwl9IGVsc2UgaWYgKGFkYXB0ZXItPmZ3X2JhbmRzICYgQkFORF9CKSB7CisJCWFkYXB0ZXItPmFkaG9jX3N0YXJ0X2JhbmQgPSBCQU5EX0I7CisJCXByaXYtPmFkaG9jX2NoYW5uZWwgPSBERUZBVUxUX0FEX0hPQ19DSEFOTkVMOworCX0KKworCWFkYXB0ZXItPmZ3X3JlbGVhc2VfbnVtYmVyID0gbGUzMl90b19jcHUoaHdfc3BlYy0+ZndfcmVsZWFzZV9udW1iZXIpOworCWFkYXB0ZXItPm51bWJlcl9vZl9hbnRlbm5hID0gbGUxNl90b19jcHUoaHdfc3BlYy0+bnVtYmVyX29mX2FudGVubmEpOworCisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBHRVRfSFdfU1BFQzogZndfcmVsZWFzZV9udW1iZXItICUjeFxuIiwKKwkgICAgICAgYWRhcHRlci0+ZndfcmVsZWFzZV9udW1iZXIpOworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogR0VUX0hXX1NQRUM6IHBlcm1hbmVudCBhZGRyOiAlcE1cbiIsCisJCQkJCWh3X3NwZWMtPnBlcm1hbmVudF9hZGRyKTsKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IEdFVF9IV19TUEVDOiBod19pZl92ZXJzaW9uPSUjeCAgdmVyc2lvbj0lI3hcbiIsCisJCWxlMTZfdG9fY3B1KGh3X3NwZWMtPmh3X2lmX3ZlcnNpb24pLAorCSAgICAgICBsZTE2X3RvX2NwdShod19zcGVjLT52ZXJzaW9uKSk7CisKKwlpZiAocHJpdi0+Y3Vycl9hZGRyWzBdID09IDB4ZmYpCisJCW1lbW1vdmUocHJpdi0+Y3Vycl9hZGRyLCBod19zcGVjLT5wZXJtYW5lbnRfYWRkciwgRVRIX0FMRU4pOworCisJYWRhcHRlci0+cmVnaW9uX2NvZGUgPSBsZTE2X3RvX2NwdShod19zcGVjLT5yZWdpb25fY29kZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTVdJRklFWF9NQVhfUkVHSU9OX0NPREU7IGkrKykKKwkJLyogVXNlIHRoZSByZWdpb24gY29kZSB0byBzZWFyY2ggZm9yIHRoZSBpbmRleCAqLworCQlpZiAoYWRhcHRlci0+cmVnaW9uX2NvZGUgPT0gcmVnaW9uX2NvZGVfaW5kZXhbaV0pCisJCQlicmVhazsKKworCS8qIElmIGl0J3MgdW5pZGVudGlmaWVkIHJlZ2lvbiBjb2RlLCB1c2UgdGhlIGRlZmF1bHQgKFVTQSkgKi8KKwlpZiAoaSA+PSBNV0lGSUVYX01BWF9SRUdJT05fQ09ERSkgeworCQlhZGFwdGVyLT5yZWdpb25fY29kZSA9IDB4MTA7CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiY21kOiB1bmtub3duIHJlZ2lvbiBjb2RlLCB1c2UgZGVmYXVsdCAoVVNBKVxuIik7CisJfQorCisJYWRhcHRlci0+aHdfZG90XzExbl9kZXZfY2FwID0gbGUzMl90b19jcHUoaHdfc3BlYy0+ZG90XzExbl9kZXZfY2FwKTsKKwlhZGFwdGVyLT5od19kZXZfbWNzX3N1cHBvcnQgPSBod19zcGVjLT5kZXZfbWNzX3N1cHBvcnQ7CisKKwlpZiAoYWRhcHRlci0+aWZfb3BzLnVwZGF0ZV9tcF9lbmRfcG9ydCkKKwkJYWRhcHRlci0+aWZfb3BzLnVwZGF0ZV9tcF9lbmRfcG9ydChhZGFwdGVyLAorCQkJCQlsZTE2X3RvX2NwdShod19zcGVjLT5tcF9lbmRfcG9ydCkpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvZGVidWdmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZDY1ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2RlYnVnZnMuYwpAQCAtMCwwICsxLDc3MCBAQAorLyoKKyAqIE1hcnZlbGwgV2lyZWxlc3MgTEFOIGRldmljZSBkcml2ZXI6IGRlYnVnZnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBmaWxlICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwKKyAqIEx0ZC4gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIEp1bmUgMTk5MQorICogKHRoZSAiTGljZW5zZSIpLiAgWW91IG1heSB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSBpbgorICogYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdoaWNoCisgKiBpcyBhdmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQSBvciBvbiB0aGUKKyAqIHdvcmxkd2lkZSB3ZWIgYXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dC4KKyAqCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1JUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgQU5EIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0CisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKworI2luY2x1ZGUgIm1haW4uaCIKKyNpbmNsdWRlICIxMW4uaCIKKworCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqbXdpZmlleF9kZnNfZGlyOworCitzdGF0aWMgY2hhciAqYnNzX21vZGVzW10gPSB7CisJIlVua25vd24iLAorCSJNYW5hZ2VkIiwKKwkiQWQtaG9jIiwKKwkiQXV0byIKK307CisKKy8qIHNpemUvYWRkciBmb3IgbXdpZmlleF9kZWJ1Z19pbmZvICovCisjZGVmaW5lIGl0ZW1fc2l6ZShuKQkJKEZJRUxEX1NJWkVPRihzdHJ1Y3QgbXdpZmlleF9kZWJ1Z19pbmZvLCBuKSkKKyNkZWZpbmUgaXRlbV9hZGRyKG4pCQkob2Zmc2V0b2Yoc3RydWN0IG13aWZpZXhfZGVidWdfaW5mbywgbikpCisKKy8qIHNpemUvYWRkciBmb3Igc3RydWN0IG13aWZpZXhfYWRhcHRlciAqLworI2RlZmluZSBhZGFwdGVyX2l0ZW1fc2l6ZShuKQkoRklFTERfU0laRU9GKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIsIG4pKQorI2RlZmluZSBhZGFwdGVyX2l0ZW1fYWRkcihuKQkob2Zmc2V0b2Yoc3RydWN0IG13aWZpZXhfYWRhcHRlciwgbikpCisKK3N0cnVjdCBtd2lmaWV4X2RlYnVnX2RhdGEgeworCWNoYXIgbmFtZVszMl07CQkvKiB2YXJpYWJsZS9hcnJheSBuYW1lICovCisJdTMyIHNpemU7CQkvKiBzaXplIG9mIHRoZSB2YXJpYWJsZS9hcnJheSAqLworCXNpemVfdCBhZGRyOwkJLyogYWRkcmVzcyBvZiB0aGUgdmFyaWFibGUvYXJyYXkgKi8KKwlpbnQgbnVtOwkJLyogbnVtYmVyIG9mIHZhcmlhYmxlcyBpbiBhbiBhcnJheSAqLworfTsKKworc3RhdGljIHN0cnVjdCBtd2lmaWV4X2RlYnVnX2RhdGEgaXRlbXNbXSA9IHsKKwl7ImludF9jb3VudGVyIiwgaXRlbV9zaXplKGludF9jb3VudGVyKSwKKwkgaXRlbV9hZGRyKGludF9jb3VudGVyKSwgMX0sCisJeyJ3bW1fYWNfdm8iLCBpdGVtX3NpemUocGFja2V0c19vdXRbV01NX0FDX1ZPXSksCisJIGl0ZW1fYWRkcihwYWNrZXRzX291dFtXTU1fQUNfVk9dKSwgMX0sCisJeyJ3bW1fYWNfdmkiLCBpdGVtX3NpemUocGFja2V0c19vdXRbV01NX0FDX1ZJXSksCisJIGl0ZW1fYWRkcihwYWNrZXRzX291dFtXTU1fQUNfVkldKSwgMX0sCisJeyJ3bW1fYWNfYmUiLCBpdGVtX3NpemUocGFja2V0c19vdXRbV01NX0FDX0JFXSksCisJIGl0ZW1fYWRkcihwYWNrZXRzX291dFtXTU1fQUNfQkVdKSwgMX0sCisJeyJ3bW1fYWNfYmsiLCBpdGVtX3NpemUocGFja2V0c19vdXRbV01NX0FDX0JLXSksCisJIGl0ZW1fYWRkcihwYWNrZXRzX291dFtXTU1fQUNfQktdKSwgMX0sCisJeyJtYXhfdHhfYnVmX3NpemUiLCBpdGVtX3NpemUobWF4X3R4X2J1Zl9zaXplKSwKKwkgaXRlbV9hZGRyKG1heF90eF9idWZfc2l6ZSksIDF9LAorCXsidHhfYnVmX3NpemUiLCBpdGVtX3NpemUodHhfYnVmX3NpemUpLAorCSBpdGVtX2FkZHIodHhfYnVmX3NpemUpLCAxfSwKKwl7ImN1cnJfdHhfYnVmX3NpemUiLCBpdGVtX3NpemUoY3Vycl90eF9idWZfc2l6ZSksCisJIGl0ZW1fYWRkcihjdXJyX3R4X2J1Zl9zaXplKSwgMX0sCisJeyJwc19tb2RlIiwgaXRlbV9zaXplKHBzX21vZGUpLAorCSBpdGVtX2FkZHIocHNfbW9kZSksIDF9LAorCXsicHNfc3RhdGUiLCBpdGVtX3NpemUocHNfc3RhdGUpLAorCSBpdGVtX2FkZHIocHNfc3RhdGUpLCAxfSwKKwl7ImlzX2RlZXBfc2xlZXAiLCBpdGVtX3NpemUoaXNfZGVlcF9zbGVlcCksCisJIGl0ZW1fYWRkcihpc19kZWVwX3NsZWVwKSwgMX0sCisJeyJ3YWtldXBfZGV2X3JlcSIsIGl0ZW1fc2l6ZShwbV93YWtldXBfY2FyZF9yZXEpLAorCSBpdGVtX2FkZHIocG1fd2FrZXVwX2NhcmRfcmVxKSwgMX0sCisJeyJ3YWtldXBfdHJpZXMiLCBpdGVtX3NpemUocG1fd2FrZXVwX2Z3X3RyeSksCisJIGl0ZW1fYWRkcihwbV93YWtldXBfZndfdHJ5KSwgMX0sCisJeyJoc19jb25maWd1cmVkIiwgaXRlbV9zaXplKGlzX2hzX2NvbmZpZ3VyZWQpLAorCSBpdGVtX2FkZHIoaXNfaHNfY29uZmlndXJlZCksIDF9LAorCXsiaHNfYWN0aXZhdGVkIiwgaXRlbV9zaXplKGhzX2FjdGl2YXRlZCksCisJIGl0ZW1fYWRkcihoc19hY3RpdmF0ZWQpLCAxfSwKKwl7Im51bV90eF90aW1lb3V0IiwgaXRlbV9zaXplKG51bV90eF90aW1lb3V0KSwKKwkgaXRlbV9hZGRyKG51bV90eF90aW1lb3V0KSwgMX0sCisJeyJudW1fY21kX3RpbWVvdXQiLCBpdGVtX3NpemUobnVtX2NtZF90aW1lb3V0KSwKKwkgaXRlbV9hZGRyKG51bV9jbWRfdGltZW91dCksIDF9LAorCXsidGltZW91dF9jbWRfaWQiLCBpdGVtX3NpemUodGltZW91dF9jbWRfaWQpLAorCSBpdGVtX2FkZHIodGltZW91dF9jbWRfaWQpLCAxfSwKKwl7InRpbWVvdXRfY21kX2FjdCIsIGl0ZW1fc2l6ZSh0aW1lb3V0X2NtZF9hY3QpLAorCSBpdGVtX2FkZHIodGltZW91dF9jbWRfYWN0KSwgMX0sCisJeyJsYXN0X2NtZF9pZCIsIGl0ZW1fc2l6ZShsYXN0X2NtZF9pZCksCisJIGl0ZW1fYWRkcihsYXN0X2NtZF9pZCksIERCR19DTURfTlVNfSwKKwl7Imxhc3RfY21kX2FjdCIsIGl0ZW1fc2l6ZShsYXN0X2NtZF9hY3QpLAorCSBpdGVtX2FkZHIobGFzdF9jbWRfYWN0KSwgREJHX0NNRF9OVU19LAorCXsibGFzdF9jbWRfaW5kZXgiLCBpdGVtX3NpemUobGFzdF9jbWRfaW5kZXgpLAorCSBpdGVtX2FkZHIobGFzdF9jbWRfaW5kZXgpLCAxfSwKKwl7Imxhc3RfY21kX3Jlc3BfaWQiLCBpdGVtX3NpemUobGFzdF9jbWRfcmVzcF9pZCksCisJIGl0ZW1fYWRkcihsYXN0X2NtZF9yZXNwX2lkKSwgREJHX0NNRF9OVU19LAorCXsibGFzdF9jbWRfcmVzcF9pbmRleCIsIGl0ZW1fc2l6ZShsYXN0X2NtZF9yZXNwX2luZGV4KSwKKwkgaXRlbV9hZGRyKGxhc3RfY21kX3Jlc3BfaW5kZXgpLCAxfSwKKwl7Imxhc3RfZXZlbnQiLCBpdGVtX3NpemUobGFzdF9ldmVudCksCisJIGl0ZW1fYWRkcihsYXN0X2V2ZW50KSwgREJHX0NNRF9OVU19LAorCXsibGFzdF9ldmVudF9pbmRleCIsIGl0ZW1fc2l6ZShsYXN0X2V2ZW50X2luZGV4KSwKKwkgaXRlbV9hZGRyKGxhc3RfZXZlbnRfaW5kZXgpLCAxfSwKKwl7Im51bV9jbWRfaDJjX2ZhaWwiLCBpdGVtX3NpemUobnVtX2NtZF9ob3N0X3RvX2NhcmRfZmFpbHVyZSksCisJIGl0ZW1fYWRkcihudW1fY21kX2hvc3RfdG9fY2FyZF9mYWlsdXJlKSwgMX0sCisJeyJudW1fY21kX3NsZWVwX2NmbV9mYWlsIiwKKwkgaXRlbV9zaXplKG51bV9jbWRfc2xlZXBfY2ZtX2hvc3RfdG9fY2FyZF9mYWlsdXJlKSwKKwkgaXRlbV9hZGRyKG51bV9jbWRfc2xlZXBfY2ZtX2hvc3RfdG9fY2FyZF9mYWlsdXJlKSwgMX0sCisJeyJudW1fdHhfaDJjX2ZhaWwiLCBpdGVtX3NpemUobnVtX3R4X2hvc3RfdG9fY2FyZF9mYWlsdXJlKSwKKwkgaXRlbV9hZGRyKG51bV90eF9ob3N0X3RvX2NhcmRfZmFpbHVyZSksIDF9LAorCXsibnVtX2V2dF9kZWF1dGgiLCBpdGVtX3NpemUobnVtX2V2ZW50X2RlYXV0aCksCisJIGl0ZW1fYWRkcihudW1fZXZlbnRfZGVhdXRoKSwgMX0sCisJeyJudW1fZXZ0X2Rpc2Fzc29jIiwgaXRlbV9zaXplKG51bV9ldmVudF9kaXNhc3NvYyksCisJIGl0ZW1fYWRkcihudW1fZXZlbnRfZGlzYXNzb2MpLCAxfSwKKwl7Im51bV9ldnRfbGlua19sb3N0IiwgaXRlbV9zaXplKG51bV9ldmVudF9saW5rX2xvc3QpLAorCSBpdGVtX2FkZHIobnVtX2V2ZW50X2xpbmtfbG9zdCksIDF9LAorCXsibnVtX2NtZF9kZWF1dGgiLCBpdGVtX3NpemUobnVtX2NtZF9kZWF1dGgpLAorCSBpdGVtX2FkZHIobnVtX2NtZF9kZWF1dGgpLCAxfSwKKwl7Im51bV9jbWRfYXNzb2Nfb2siLCBpdGVtX3NpemUobnVtX2NtZF9hc3NvY19zdWNjZXNzKSwKKwkgaXRlbV9hZGRyKG51bV9jbWRfYXNzb2Nfc3VjY2VzcyksIDF9LAorCXsibnVtX2NtZF9hc3NvY19mYWlsIiwgaXRlbV9zaXplKG51bV9jbWRfYXNzb2NfZmFpbHVyZSksCisJIGl0ZW1fYWRkcihudW1fY21kX2Fzc29jX2ZhaWx1cmUpLCAxfSwKKwl7ImNtZF9zZW50IiwgaXRlbV9zaXplKGNtZF9zZW50KSwKKwkgaXRlbV9hZGRyKGNtZF9zZW50KSwgMX0sCisJeyJkYXRhX3NlbnQiLCBpdGVtX3NpemUoZGF0YV9zZW50KSwKKwkgaXRlbV9hZGRyKGRhdGFfc2VudCksIDF9LAorCXsiY21kX3Jlc3BfcmVjZWl2ZWQiLCBpdGVtX3NpemUoY21kX3Jlc3BfcmVjZWl2ZWQpLAorCSBpdGVtX2FkZHIoY21kX3Jlc3BfcmVjZWl2ZWQpLCAxfSwKKwl7ImV2ZW50X3JlY2VpdmVkIiwgaXRlbV9zaXplKGV2ZW50X3JlY2VpdmVkKSwKKwkgaXRlbV9hZGRyKGV2ZW50X3JlY2VpdmVkKSwgMX0sCisKKwkvKiB2YXJpYWJsZXMgZGVmaW5lZCBpbiBzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICovCisJeyJjbWRfcGVuZGluZyIsIGFkYXB0ZXJfaXRlbV9zaXplKGNtZF9wZW5kaW5nKSwKKwkgYWRhcHRlcl9pdGVtX2FkZHIoY21kX3BlbmRpbmcpLCAxfSwKKwl7InR4X3BlbmRpbmciLCBhZGFwdGVyX2l0ZW1fc2l6ZSh0eF9wZW5kaW5nKSwKKwkgYWRhcHRlcl9pdGVtX2FkZHIodHhfcGVuZGluZyksIDF9LAorCXsicnhfcGVuZGluZyIsIGFkYXB0ZXJfaXRlbV9zaXplKHJ4X3BlbmRpbmcpLAorCSBhZGFwdGVyX2l0ZW1fYWRkcihyeF9wZW5kaW5nKSwgMX0sCit9OworCitzdGF0aWMgaW50IG51bV9vZl9pdGVtcyA9IEFSUkFZX1NJWkUoaXRlbXMpOworCisvKgorICogR2VuZXJpYyBwcm9jIGZpbGUgb3BlbiBoYW5kbGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGV2ZXJ5IHRpbWUgYSBmaWxlIGlzIGFjY2Vzc2VkIGZvciByZWFkIG9yIHdyaXRlLgorICovCitzdGF0aWMgaW50Cittd2lmaWV4X29wZW5fZ2VuZXJpYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+aV9wcml2YXRlOworCXJldHVybiAwOworfQorCisvKgorICogUHJvYyBpbmZvIGZpbGUgcmVhZCBoYW5kbGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlICdpbmZvJyBmaWxlIGlzIG9wZW5lZCBmb3IgcmVhZGluZy4KKyAqIEl0IHByaW50cyB0aGUgZm9sbG93aW5nIGRyaXZlciByZWxhdGVkIGluZm9ybWF0aW9uIC0KKyAqICAgICAgLSBEcml2ZXIgbmFtZQorICogICAgICAtIERyaXZlciB2ZXJzaW9uCisgKiAgICAgIC0gRHJpdmVyIGV4dGVuZGVkIHZlcnNpb24KKyAqICAgICAgLSBJbnRlcmZhY2UgbmFtZQorICogICAgICAtIEJTUyBtb2RlCisgKiAgICAgIC0gTWVkaWEgc3RhdGUgKGNvbm5lY3RlZCBvciBkaXNjb25uZWN0ZWQpCisgKiAgICAgIC0gTUFDIGFkZHJlc3MKKyAqICAgICAgLSBUb3RhbCBudW1iZXIgb2YgVHggYnl0ZXMKKyAqICAgICAgLSBUb3RhbCBudW1iZXIgb2YgUnggYnl0ZXMKKyAqICAgICAgLSBUb3RhbCBudW1iZXIgb2YgVHggcGFja2V0cworICogICAgICAtIFRvdGFsIG51bWJlciBvZiBSeCBwYWNrZXRzCisgKiAgICAgIC0gVG90YWwgbnVtYmVyIG9mIGRyb3BwZWQgVHggcGFja2V0cworICogICAgICAtIFRvdGFsIG51bWJlciBvZiBkcm9wcGVkIFJ4IHBhY2tldHMKKyAqICAgICAgLSBUb3RhbCBudW1iZXIgb2YgY29ycnVwdGVkIFR4IHBhY2tldHMKKyAqICAgICAgLSBUb3RhbCBudW1iZXIgb2YgY29ycnVwdGVkIFJ4IHBhY2tldHMKKyAqICAgICAgLSBDYXJyaWVyIHN0YXR1cyAob24gb3Igb2ZmKQorICogICAgICAtIFR4IHF1ZXVlIHN0YXR1cyAoc3RhcnRlZCBvciBzdG9wcGVkKQorICoKKyAqIEZvciBTVEEgbW9kZSBkcml2ZXJzLCBpdCBhbHNvIHByaW50cyB0aGUgZm9sbG93aW5nIGV4dHJhIC0KKyAqICAgICAgLSBFU1NJRAorICogICAgICAtIEJTU0lECisgKiAgICAgIC0gQ2hhbm5lbAorICogICAgICAtIFJlZ2lvbiBjb2RlCisgKiAgICAgIC0gTXVsdGljYXN0IGNvdW50CisgKiAgICAgIC0gTXVsdGljYXN0IGFkZHJlc3NlcworICovCitzdGF0aWMgc3NpemVfdAorbXdpZmlleF9pbmZvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1YnVmLAorCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPQorCQkoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqKSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHByaXYtPm5ldGRldjsKKwlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOworCXVuc2lnbmVkIGxvbmcgcGFnZSA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwljaGFyICpwID0gKGNoYXIgKikgcGFnZSwgZm10WzY0XTsKKwlzdHJ1Y3QgbXdpZmlleF9ic3NfaW5mbyBpbmZvOworCXNzaXplX3QgcmV0OworCWludCBpID0gMDsKKworCWlmICghcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CisJcmV0ID0gbXdpZmlleF9nZXRfYnNzX2luZm8ocHJpdiwgJmluZm8pOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9hbmRfZXhpdDsKKworCW13aWZpZXhfZHJ2X2dldF9kcml2ZXJfdmVyc2lvbihwcml2LT5hZGFwdGVyLCBmbXQsIHNpemVvZihmbXQpIC0gMSk7CisKKwlpZiAoIXByaXYtPnZlcnNpb25fc3RyWzBdKQorCQltd2lmaWV4X2dldF92ZXJfZXh0KHByaXYpOworCisJcCArPSBzcHJpbnRmKHAsICJkcml2ZXJfbmFtZSA9ICIgIlwibXdpZmlleFwiXG4iKTsKKwlwICs9IHNwcmludGYocCwgImRyaXZlcl92ZXJzaW9uID0gJXMiLCBmbXQpOworCXAgKz0gc3ByaW50ZihwLCAiXG52ZXJleHQgPSAlcyIsIHByaXYtPnZlcnNpb25fc3RyKTsKKwlwICs9IHNwcmludGYocCwgIlxuaW50ZXJmYWNlX25hbWU9XCIlc1wiXG4iLCBuZXRkZXYtPm5hbWUpOworCXAgKz0gc3ByaW50ZihwLCAiYnNzX21vZGU9XCIlc1wiXG4iLCBic3NfbW9kZXNbaW5mby5ic3NfbW9kZV0pOworCXAgKz0gc3ByaW50ZihwLCAibWVkaWFfc3RhdGU9XCIlc1wiXG4iLAorCQkgICAgICghcHJpdi0+bWVkaWFfY29ubmVjdGVkID8gIkRpc2Nvbm5lY3RlZCIgOiAiQ29ubmVjdGVkIikpOworCXAgKz0gc3ByaW50ZihwLCAibWFjX2FkZHJlc3M9XCIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFwiXG4iLAorCQkgICAgIG5ldGRldi0+ZGV2X2FkZHJbMF0sIG5ldGRldi0+ZGV2X2FkZHJbMV0sCisJCSAgICAgbmV0ZGV2LT5kZXZfYWRkclsyXSwgbmV0ZGV2LT5kZXZfYWRkclszXSwKKwkJICAgICBuZXRkZXYtPmRldl9hZGRyWzRdLCBuZXRkZXYtPmRldl9hZGRyWzVdKTsKKworCWlmIChHRVRfQlNTX1JPTEUocHJpdikgPT0gTVdJRklFWF9CU1NfUk9MRV9TVEEpIHsKKwkJcCArPSBzcHJpbnRmKHAsICJtdWx0aWNhc3RfY291bnQ9XCIlZFwiXG4iLAorCQkJICAgICBuZXRkZXZfbWNfY291bnQobmV0ZGV2KSk7CisJCXAgKz0gc3ByaW50ZihwLCAiZXNzaWQ9XCIlc1wiXG4iLCBpbmZvLnNzaWQuc3NpZCk7CisJCXAgKz0gc3ByaW50ZihwLCAiYnNzaWQ9XCIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFwiXG4iLAorCQkJICAgICBpbmZvLmJzc2lkWzBdLCBpbmZvLmJzc2lkWzFdLAorCQkJICAgICBpbmZvLmJzc2lkWzJdLCBpbmZvLmJzc2lkWzNdLAorCQkJICAgICBpbmZvLmJzc2lkWzRdLCBpbmZvLmJzc2lkWzVdKTsKKwkJcCArPSBzcHJpbnRmKHAsICJjaGFubmVsPVwiJWRcIlxuIiwgKGludCkgaW5mby5ic3NfY2hhbik7CisJCXAgKz0gc3ByaW50ZihwLCAicmVnaW9uX2NvZGUgPSBcIiUwMnhcIlxuIiwgaW5mby5yZWdpb25fY29kZSk7CisKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIG5ldGRldikKKwkJCXAgKz0gc3ByaW50ZihwLCAibXVsdGljYXN0X2FkZHJlc3NbJWRdPSIKKwkJCQkgICAgICJcIiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XCJcbiIsIGkrKywKKwkJCQkgICAgIGhhLT5hZGRyWzBdLCBoYS0+YWRkclsxXSwKKwkJCQkgICAgIGhhLT5hZGRyWzJdLCBoYS0+YWRkclszXSwKKwkJCQkgICAgIGhhLT5hZGRyWzRdLCBoYS0+YWRkcls1XSk7CisJfQorCisJcCArPSBzcHJpbnRmKHAsICJudW1fdHhfYnl0ZXMgPSAlbHVcbiIsIHByaXYtPnN0YXRzLnR4X2J5dGVzKTsKKwlwICs9IHNwcmludGYocCwgIm51bV9yeF9ieXRlcyA9ICVsdVxuIiwgcHJpdi0+c3RhdHMucnhfYnl0ZXMpOworCXAgKz0gc3ByaW50ZihwLCAibnVtX3R4X3BrdHMgPSAlbHVcbiIsIHByaXYtPnN0YXRzLnR4X3BhY2tldHMpOworCXAgKz0gc3ByaW50ZihwLCAibnVtX3J4X3BrdHMgPSAlbHVcbiIsIHByaXYtPnN0YXRzLnJ4X3BhY2tldHMpOworCXAgKz0gc3ByaW50ZihwLCAibnVtX3R4X3BrdHNfZHJvcHBlZCA9ICVsdVxuIiwgcHJpdi0+c3RhdHMudHhfZHJvcHBlZCk7CisJcCArPSBzcHJpbnRmKHAsICJudW1fcnhfcGt0c19kcm9wcGVkID0gJWx1XG4iLCBwcml2LT5zdGF0cy5yeF9kcm9wcGVkKTsKKwlwICs9IHNwcmludGYocCwgIm51bV90eF9wa3RzX2VyciA9ICVsdVxuIiwgcHJpdi0+c3RhdHMudHhfZXJyb3JzKTsKKwlwICs9IHNwcmludGYocCwgIm51bV9yeF9wa3RzX2VyciA9ICVsdVxuIiwgcHJpdi0+c3RhdHMucnhfZXJyb3JzKTsKKwlwICs9IHNwcmludGYocCwgImNhcnJpZXIgJXNcbiIsICgobmV0aWZfY2Fycmllcl9vayhwcml2LT5uZXRkZXYpKQorCQkJCQkgPyAib24iIDogIm9mZiIpKTsKKwlwICs9IHNwcmludGYocCwgInR4IHF1ZXVlICVzXG4iLCAoKG5ldGlmX3F1ZXVlX3N0b3BwZWQocHJpdi0+bmV0ZGV2KSkKKwkJCQkJICA/ICJzdG9wcGVkIiA6ICJzdGFydGVkIikpOworCisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodWJ1ZiwgY291bnQsIHBwb3MsIChjaGFyICopIHBhZ2UsCisJCQkJICAgICAgKHVuc2lnbmVkIGxvbmcpIHAgLSBwYWdlKTsKKworZnJlZV9hbmRfZXhpdDoKKwlmcmVlX3BhZ2UocGFnZSk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFByb2MgZ2V0bG9nIGZpbGUgcmVhZCBoYW5kbGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlICdnZXRsb2cnIGZpbGUgaXMgb3BlbmVkIGZvciByZWFkaW5nCisgKiBJdCBwcmludHMgdGhlIGZvbGxvd2luZyBsb2cgaW5mb3JtYXRpb24gLQorICogICAgICAtIE51bWJlciBvZiBtdWx0aWNhc3QgVHggZnJhbWVzCisgKiAgICAgIC0gTnVtYmVyIG9mIGZhaWxlZCBwYWNrZXRzCisgKiAgICAgIC0gTnVtYmVyIG9mIFR4IHJldHJpZXMKKyAqICAgICAgLSBOdW1iZXIgb2YgbXVsdGljYXN0IFR4IHJldHJpZXMKKyAqICAgICAgLSBOdW1iZXIgb2YgZHVwbGljYXRlIGZyYW1lcworICogICAgICAtIE51bWJlciBvZiBSVFMgc3VjY2Vzc2VzCisgKiAgICAgIC0gTnVtYmVyIG9mIFJUUyBmYWlsdXJlcworICogICAgICAtIE51bWJlciBvZiBBQ0sgZmFpbHVyZXMKKyAqICAgICAgLSBOdW1iZXIgb2YgZnJhZ21lbnRlZCBSeCBmcmFtZXMKKyAqICAgICAgLSBOdW1iZXIgb2YgbXVsdGljYXN0IFJ4IGZyYW1lcworICogICAgICAtIE51bWJlciBvZiBGQ1MgZXJyb3JzCisgKiAgICAgIC0gTnVtYmVyIG9mIFR4IGZyYW1lcworICogICAgICAtIFdFUCBJQ1YgZXJyb3IgY291bnRzCisgKi8KK3N0YXRpYyBzc2l6ZV90Cittd2lmaWV4X2dldGxvZ19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPQorCQkoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqKSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyBwYWdlID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCWNoYXIgKnAgPSAoY2hhciAqKSBwYWdlOworCXNzaXplX3QgcmV0OworCXN0cnVjdCBtd2lmaWV4X2RzX2dldF9zdGF0cyBzdGF0czsKKworCWlmICghcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQoJnN0YXRzLCAwLCBzaXplb2Yoc3RhdHMpKTsKKwlyZXQgPSBtd2lmaWV4X2dldF9zdGF0c19pbmZvKHByaXYsICZzdGF0cyk7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX2FuZF9leGl0OworCisJcCArPSBzcHJpbnRmKHAsICJcbiIKKwkJICAgICAibWNhc3R0eGZyYW1lICAgICAldVxuIgorCQkgICAgICJmYWlsZWQgICAgICAgICAgICV1XG4iCisJCSAgICAgInJldHJ5ICAgICAgICAgICAgJXVcbiIKKwkJICAgICAibXVsdGlyZXRyeSAgICAgICAldVxuIgorCQkgICAgICJmcmFtZWR1cCAgICAgICAgICV1XG4iCisJCSAgICAgInJ0c3N1Y2Nlc3MgICAgICAgJXVcbiIKKwkJICAgICAicnRzZmFpbHVyZSAgICAgICAldVxuIgorCQkgICAgICJhY2tmYWlsdXJlICAgICAgICV1XG4iCisJCSAgICAgInJ4ZnJhZyAgICAgICAgICAgJXVcbiIKKwkJICAgICAibWNhc3RyeGZyYW1lICAgICAldVxuIgorCQkgICAgICJmY3NlcnJvciAgICAgICAgICV1XG4iCisJCSAgICAgInR4ZnJhbWUgICAgICAgICAgJXVcbiIKKwkJICAgICAid2VwaWN2ZXJyY250LTEgICAldVxuIgorCQkgICAgICJ3ZXBpY3ZlcnJjbnQtMiAgICV1XG4iCisJCSAgICAgIndlcGljdmVycmNudC0zICAgJXVcbiIKKwkJICAgICAid2VwaWN2ZXJyY250LTQgICAldVxuIiwKKwkJICAgICBzdGF0cy5tY2FzdF90eF9mcmFtZSwKKwkJICAgICBzdGF0cy5mYWlsZWQsCisJCSAgICAgc3RhdHMucmV0cnksCisJCSAgICAgc3RhdHMubXVsdGlfcmV0cnksCisJCSAgICAgc3RhdHMuZnJhbWVfZHVwLAorCQkgICAgIHN0YXRzLnJ0c19zdWNjZXNzLAorCQkgICAgIHN0YXRzLnJ0c19mYWlsdXJlLAorCQkgICAgIHN0YXRzLmFja19mYWlsdXJlLAorCQkgICAgIHN0YXRzLnJ4X2ZyYWcsCisJCSAgICAgc3RhdHMubWNhc3RfcnhfZnJhbWUsCisJCSAgICAgc3RhdHMuZmNzX2Vycm9yLAorCQkgICAgIHN0YXRzLnR4X2ZyYW1lLAorCQkgICAgIHN0YXRzLndlcF9pY3ZfZXJyb3JbMF0sCisJCSAgICAgc3RhdHMud2VwX2ljdl9lcnJvclsxXSwKKwkJICAgICBzdGF0cy53ZXBfaWN2X2Vycm9yWzJdLAorCQkgICAgIHN0YXRzLndlcF9pY3ZfZXJyb3JbM10pOworCisKKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBjb3VudCwgcHBvcywgKGNoYXIgKikgcGFnZSwKKwkJCQkgICAgICAodW5zaWduZWQgbG9uZykgcCAtIHBhZ2UpOworCitmcmVlX2FuZF9leGl0OgorCWZyZWVfcGFnZShwYWdlKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IG13aWZpZXhfZGVidWdfaW5mbyBpbmZvOworCisvKgorICogUHJvYyBkZWJ1ZyBmaWxlIHJlYWQgaGFuZGxlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSAnZGVidWcnIGZpbGUgaXMgb3BlbmVkIGZvciByZWFkaW5nCisgKiBJdCBwcmludHMgdGhlIGZvbGxvd2luZyBsb2cgaW5mb3JtYXRpb24gLQorICogICAgICAtIEludGVycnVwdCBjb3VudAorICogICAgICAtIFdNTSBBQyBWTyBwYWNrZXRzIGNvdW50CisgKiAgICAgIC0gV01NIEFDIFZJIHBhY2tldHMgY291bnQKKyAqICAgICAgLSBXTU0gQUMgQkUgcGFja2V0cyBjb3VudAorICogICAgICAtIFdNTSBBQyBCSyBwYWNrZXRzIGNvdW50CisgKiAgICAgIC0gTWF4aW11bSBUeCBidWZmZXIgc2l6ZQorICogICAgICAtIFR4IGJ1ZmZlciBzaXplCisgKiAgICAgIC0gQ3VycmVudCBUeCBidWZmZXIgc2l6ZQorICogICAgICAtIFBvd2VyIFNhdmUgbW9kZQorICogICAgICAtIFBvd2VyIFNhdmUgc3RhdGUKKyAqICAgICAgLSBEZWVwIFNsZWVwIHN0YXR1cworICogICAgICAtIERldmljZSB3YWtldXAgcmVxdWlyZWQgc3RhdHVzCisgKiAgICAgIC0gTnVtYmVyIG9mIHdha2V1cCB0cmllcworICogICAgICAtIEhvc3QgU2xlZXAgY29uZmlndXJlZCBzdGF0dXMKKyAqICAgICAgLSBIb3N0IFNsZWVwIGFjdGl2YXRlZCBzdGF0dXMKKyAqICAgICAgLSBOdW1iZXIgb2YgVHggdGltZW91dHMKKyAqICAgICAgLSBOdW1iZXIgb2YgY29tbWFuZCB0aW1lb3V0cworICogICAgICAtIExhc3QgdGltZWQgb3V0IGNvbW1hbmQgSUQKKyAqICAgICAgLSBMYXN0IHRpbWVkIG91dCBjb21tYW5kIGFjdGlvbgorICogICAgICAtIExhc3QgY29tbWFuZCBJRAorICogICAgICAtIExhc3QgY29tbWFuZCBhY3Rpb24KKyAqICAgICAgLSBMYXN0IGNvbW1hbmQgaW5kZXgKKyAqICAgICAgLSBMYXN0IGNvbW1hbmQgcmVzcG9uc2UgSUQKKyAqICAgICAgLSBMYXN0IGNvbW1hbmQgcmVzcG9uc2UgaW5kZXgKKyAqICAgICAgLSBMYXN0IGV2ZW50CisgKiAgICAgIC0gTGFzdCBldmVudCBpbmRleAorICogICAgICAtIE51bWJlciBvZiBob3N0IHRvIGNhcmQgY29tbWFuZCBmYWlsdXJlcworICogICAgICAtIE51bWJlciBvZiBzbGVlcCBjb25maXJtIGNvbW1hbmQgZmFpbHVyZXMKKyAqICAgICAgLSBOdW1iZXIgb2YgaG9zdCB0byBjYXJkIGRhdGEgZmFpbHVyZQorICogICAgICAtIE51bWJlciBvZiBkZWF1dGhlbnRpY2F0aW9uIGV2ZW50cworICogICAgICAtIE51bWJlciBvZiBkaXNhc3NvY2lhdGlvbiBldmVudHMKKyAqICAgICAgLSBOdW1iZXIgb2YgbGluayBsb3N0IGV2ZW50cworICogICAgICAtIE51bWJlciBvZiBkZWF1dGhlbnRpY2F0aW9uIGNvbW1hbmRzCisgKiAgICAgIC0gTnVtYmVyIG9mIGFzc29jaWF0aW9uIHN1Y2Nlc3MgY29tbWFuZHMKKyAqICAgICAgLSBOdW1iZXIgb2YgYXNzb2NpYXRpb24gZmFpbHVyZSBjb21tYW5kcworICogICAgICAtIE51bWJlciBvZiBjb21tYW5kcyBzZW50CisgKiAgICAgIC0gTnVtYmVyIG9mIGRhdGEgcGFja2V0cyBzZW50CisgKiAgICAgIC0gTnVtYmVyIG9mIGNvbW1hbmQgcmVzcG9uc2VzIHJlY2VpdmVkCisgKiAgICAgIC0gTnVtYmVyIG9mIGV2ZW50cyByZWNlaXZlZAorICogICAgICAtIFR4IEJBIHN0cmVhbSB0YWJsZSAoVElELCBSQSkKKyAqICAgICAgLSBSeCByZW9yZGVyIHRhYmxlIChUSUQsIFRBLCBTdGFydCB3aW5kb3csIFdpbmRvdyBzaXplLCBCdWZmZXIpCisgKi8KK3N0YXRpYyBzc2l6ZV90Cittd2lmaWV4X2RlYnVnX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1YnVmLAorCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0KKwkJKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKikgZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBtd2lmaWV4X2RlYnVnX2RhdGEgKmQgPSAmaXRlbXNbMF07CisJdW5zaWduZWQgbG9uZyBwYWdlID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCWNoYXIgKnAgPSAoY2hhciAqKSBwYWdlOworCXNzaXplX3QgcmV0OworCXNpemVfdCBzaXplLCBhZGRyOworCWxvbmcgdmFsOworCWludCBpLCBqOworCisJaWYgKCFwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IG13aWZpZXhfZ2V0X2RlYnVnX2luZm8ocHJpdiwgJmluZm8pOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9hbmRfZXhpdDsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fb2ZfaXRlbXM7IGkrKykgeworCQlwICs9IHNwcmludGYocCwgIiVzPSIsIGRbaV0ubmFtZSk7CisKKwkJc2l6ZSA9IGRbaV0uc2l6ZSAvIGRbaV0ubnVtOworCisJCWlmIChpIDwgKG51bV9vZl9pdGVtcyAtIDMpKQorCQkJYWRkciA9IGRbaV0uYWRkciArIChzaXplX3QpICZpbmZvOworCQllbHNlIC8qIFRoZSBsYXN0IDMgaXRlbXMgYXJlIHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgdmFyaWFibGVzICovCisJCQlhZGRyID0gZFtpXS5hZGRyICsgKHNpemVfdCkgcHJpdi0+YWRhcHRlcjsKKworCQlmb3IgKGogPSAwOyBqIDwgZFtpXS5udW07IGorKykgeworCQkJc3dpdGNoIChzaXplKSB7CisJCQljYXNlIDE6CisJCQkJdmFsID0gKigodTggKikgYWRkcik7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6CisJCQkJdmFsID0gKigodTE2ICopIGFkZHIpOworCQkJCWJyZWFrOworCQkJY2FzZSA0OgorCQkJCXZhbCA9ICooKHUzMiAqKSBhZGRyKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgODoKKwkJCQl2YWwgPSAqKChsb25nIGxvbmcgKikgYWRkcik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXZhbCA9IC0xOworCQkJCWJyZWFrOworCQkJfQorCisJCQlwICs9IHNwcmludGYocCwgIiUjbHggIiwgdmFsKTsKKwkJCWFkZHIgKz0gc2l6ZTsKKwkJfQorCisJCXAgKz0gc3ByaW50ZihwLCAiXG4iKTsKKwl9CisKKwlpZiAoaW5mby50eF90YmxfbnVtKSB7CisJCXAgKz0gc3ByaW50ZihwLCAiVHggQkEgc3RyZWFtIHRhYmxlOlxuIik7CisJCWZvciAoaSA9IDA7IGkgPCBpbmZvLnR4X3RibF9udW07IGkrKykKKwkJCXAgKz0gc3ByaW50ZihwLCAidGlkID0gJWQsICIKKwkJCQkgICAgICJyYSA9ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQkJCSAgICAgaW5mby50eF90YmxbaV0udGlkLCBpbmZvLnR4X3RibFtpXS5yYVswXSwKKwkJCQkgICAgIGluZm8udHhfdGJsW2ldLnJhWzFdLCBpbmZvLnR4X3RibFtpXS5yYVsyXSwKKwkJCQkgICAgIGluZm8udHhfdGJsW2ldLnJhWzNdLCBpbmZvLnR4X3RibFtpXS5yYVs0XSwKKwkJCQkgICAgIGluZm8udHhfdGJsW2ldLnJhWzVdKTsKKwl9CisKKwlpZiAoaW5mby5yeF90YmxfbnVtKSB7CisJCXAgKz0gc3ByaW50ZihwLCAiUnggcmVvcmRlciB0YWJsZTpcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgaW5mby5yeF90YmxfbnVtOyBpKyspIHsKKworCQkJcCArPSBzcHJpbnRmKHAsICJ0aWQgPSAlZCwgIgorCQkJCSAgICAgInRhID0gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngsICIKKwkJCQkgICAgICJzdGFydF93aW4gPSAlZCwgIgorCQkJCSAgICAgIndpbl9zaXplID0gJWQsIGJ1ZmZlcjogIiwKKwkJCQkgICAgIGluZm8ucnhfdGJsW2ldLnRpZCwKKwkJCQkgICAgIGluZm8ucnhfdGJsW2ldLnRhWzBdLCBpbmZvLnJ4X3RibFtpXS50YVsxXSwKKwkJCQkgICAgIGluZm8ucnhfdGJsW2ldLnRhWzJdLCBpbmZvLnJ4X3RibFtpXS50YVszXSwKKwkJCQkgICAgIGluZm8ucnhfdGJsW2ldLnRhWzRdLCBpbmZvLnJ4X3RibFtpXS50YVs1XSwKKwkJCQkgICAgIGluZm8ucnhfdGJsW2ldLnN0YXJ0X3dpbiwKKwkJCQkgICAgIGluZm8ucnhfdGJsW2ldLndpbl9zaXplKTsKKworCQkJZm9yIChqID0gMDsgaiA8IGluZm8ucnhfdGJsW2ldLndpbl9zaXplOyBqKyspCisJCQkJcCArPSBzcHJpbnRmKHAsICIlYyAiLAorCQkJCQkgICAgIGluZm8ucnhfdGJsW2ldLmJ1ZmZlcltqXSA/CisJCQkJCSAgICAgJzEnIDogJzAnKTsKKworCQkJcCArPSBzcHJpbnRmKHAsICJcbiIpOworCQl9CisJfQorCisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodWJ1ZiwgY291bnQsIHBwb3MsIChjaGFyICopIHBhZ2UsCisJCQkJICAgICAgKHVuc2lnbmVkIGxvbmcpIHAgLSBwYWdlKTsKKworZnJlZV9hbmRfZXhpdDoKKwlmcmVlX3BhZ2UocGFnZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHUzMiBzYXZlZF9yZWdfdHlwZSwgc2F2ZWRfcmVnX29mZnNldCwgc2F2ZWRfcmVnX3ZhbHVlOworCisvKgorICogUHJvYyByZWdyZHdyIGZpbGUgd3JpdGUgaGFuZGxlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSAncmVncmR3cicgZmlsZSBpcyBvcGVuZWQgZm9yIHdyaXRpbmcKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIHdyaXRlIHRvIGEgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyBzc2l6ZV90Cittd2lmaWV4X3JlZ3Jkd3Jfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCSAgICAgIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJY2hhciAqYnVmID0gKGNoYXIgKikgYWRkcjsKKwlzaXplX3QgYnVmX3NpemUgPSBtaW4oY291bnQsIChzaXplX3QpIChQQUdFX1NJWkUgLSAxKSk7CisJaW50IHJldDsKKwl1MzIgcmVnX3R5cGUgPSAwLCByZWdfb2Zmc2V0ID0gMCwgcmVnX3ZhbHVlID0gVUlOVF9NQVg7CisKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKworCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVidWYsIGJ1Zl9zaXplKSkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGRvbmU7CisJfQorCisJc3NjYW5mKGJ1ZiwgIiV1ICV4ICV4IiwgJnJlZ190eXBlLCAmcmVnX29mZnNldCwgJnJlZ192YWx1ZSk7CisKKwlpZiAocmVnX3R5cGUgPT0gMCB8fCByZWdfb2Zmc2V0ID09IDApIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBkb25lOworCX0gZWxzZSB7CisJCXNhdmVkX3JlZ190eXBlID0gcmVnX3R5cGU7CisJCXNhdmVkX3JlZ19vZmZzZXQgPSByZWdfb2Zmc2V0OworCQlzYXZlZF9yZWdfdmFsdWUgPSByZWdfdmFsdWU7CisJCXJldCA9IGNvdW50OworCX0KK2RvbmU6CisJZnJlZV9wYWdlKGFkZHIpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBQcm9jIHJlZ3Jkd3IgZmlsZSByZWFkIGhhbmRsZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgJ3JlZ3Jkd3InIGZpbGUgaXMgb3BlbmVkIGZvciByZWFkaW5nCisgKgorICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byByZWFkIGZyb20gYSByZWdpc3Rlci4KKyAqLworc3RhdGljIHNzaXplX3QKK213aWZpZXhfcmVncmR3cl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0KKwkJKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKikgZmlsZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgYWRkciA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwljaGFyICpidWYgPSAoY2hhciAqKSBhZGRyOworCWludCBwb3MgPSAwLCByZXQgPSAwOworCXUzMiByZWdfdmFsdWU7CisKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoIXNhdmVkX3JlZ190eXBlKSB7CisJCS8qIE5vIGNvbW1hbmQgaGFzIGJlZW4gZ2l2ZW4gKi8KKwkJcG9zICs9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiMCIpOworCQlnb3RvIGRvbmU7CisJfQorCS8qIFNldCBjb21tYW5kIGhhcyBiZWVuIGdpdmVuICovCisJaWYgKHNhdmVkX3JlZ192YWx1ZSAhPSBVSU5UX01BWCkgeworCQlyZXQgPSBtd2lmaWV4X3JlZ193cml0ZShwcml2LCBzYXZlZF9yZWdfdHlwZSwgc2F2ZWRfcmVnX29mZnNldCwKKwkJCQkJc2F2ZWRfcmVnX3ZhbHVlKTsKKworCQlwb3MgKz0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIldSAweCV4IDB4JXhcbiIsCisJCQkJc2F2ZWRfcmVnX3R5cGUsIHNhdmVkX3JlZ19vZmZzZXQsCisJCQkJc2F2ZWRfcmVnX3ZhbHVlKTsKKworCQlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOworCisJCWdvdG8gZG9uZTsKKwl9CisJLyogR2V0IGNvbW1hbmQgaGFzIGJlZW4gZ2l2ZW4gKi8KKwlyZXQgPSBtd2lmaWV4X3JlZ19yZWFkKHByaXYsIHNhdmVkX3JlZ190eXBlLAorCQkJICAgICAgIHNhdmVkX3JlZ19vZmZzZXQsICZyZWdfdmFsdWUpOworCWlmIChyZXQpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBkb25lOworCX0KKworCXBvcyArPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV1IDB4JXggMHgleFxuIiwgc2F2ZWRfcmVnX3R5cGUsCisJCQlzYXZlZF9yZWdfb2Zmc2V0LCByZWdfdmFsdWUpOworCisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodWJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKKworZG9uZToKKwlmcmVlX3BhZ2UoYWRkcik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHUzMiBzYXZlZF9vZmZzZXQgPSAtMSwgc2F2ZWRfYnl0ZXMgPSAtMTsKKworLyoKKyAqIFByb2MgcmRlZXByb20gZmlsZSB3cml0ZSBoYW5kbGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlICdyZGVlcHJvbScgZmlsZSBpcyBvcGVuZWQgZm9yIHdyaXRpbmcKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIHdyaXRlIHRvIGEgUkRFRVBST00gbG9jYXRpb24uCisgKi8KK3N0YXRpYyBzc2l6ZV90Cittd2lmaWV4X3JkZWVwcm9tX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQkgICAgICAgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwljaGFyICpidWYgPSAoY2hhciAqKSBhZGRyOworCXNpemVfdCBidWZfc2l6ZSA9IG1pbihjb3VudCwgKHNpemVfdCkgKFBBR0VfU0laRSAtIDEpKTsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgb2Zmc2V0ID0gLTEsIGJ5dGVzID0gLTE7CisKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKworCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVidWYsIGJ1Zl9zaXplKSkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGRvbmU7CisJfQorCisJc3NjYW5mKGJ1ZiwgIiVkICVkIiwgJm9mZnNldCwgJmJ5dGVzKTsKKworCWlmIChvZmZzZXQgPT0gLTEgfHwgYnl0ZXMgPT0gLTEpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBkb25lOworCX0gZWxzZSB7CisJCXNhdmVkX29mZnNldCA9IG9mZnNldDsKKwkJc2F2ZWRfYnl0ZXMgPSBieXRlczsKKwkJcmV0ID0gY291bnQ7CisJfQorZG9uZToKKwlmcmVlX3BhZ2UoYWRkcik7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFByb2MgcmRlZXByb20gcmVhZCB3cml0ZSBoYW5kbGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlICdyZGVlcHJvbScgZmlsZSBpcyBvcGVuZWQgZm9yIHJlYWRpbmcKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIHJlYWQgZnJvbSBhIFJERUVQUk9NIGxvY2F0aW9uLgorICovCitzdGF0aWMgc3NpemVfdAorbXdpZmlleF9yZGVlcHJvbV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9CisJCShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICopIGZpbGUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJY2hhciAqYnVmID0gKGNoYXIgKikgYWRkcjsKKwlpbnQgcG9zID0gMCwgcmV0ID0gMCwgaTsKKwl1OCB2YWx1ZVtNQVhfRUVQUk9NX0RBVEFdOworCisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHNhdmVkX29mZnNldCA9PSAtMSkgeworCQkvKiBObyBjb21tYW5kIGhhcyBiZWVuIGdpdmVuICovCisJCXBvcyArPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjAiKTsKKwkJZ290byBkb25lOworCX0KKworCS8qIEdldCBjb21tYW5kIGhhcyBiZWVuIGdpdmVuICovCisJcmV0ID0gbXdpZmlleF9lZXByb21fcmVhZChwcml2LCAodTE2KSBzYXZlZF9vZmZzZXQsCisJCQkJICAodTE2KSBzYXZlZF9ieXRlcywgdmFsdWUpOworCWlmIChyZXQpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBkb25lOworCX0KKworCXBvcyArPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkICVkICIsIHNhdmVkX29mZnNldCwgc2F2ZWRfYnl0ZXMpOworCisJZm9yIChpID0gMDsgaSA8IHNhdmVkX2J5dGVzOyBpKyspCisJCXBvcyArPSBzbnByaW50ZihidWYgKyBzdHJsZW4oYnVmKSwgUEFHRV9TSVpFLCAiJWQgIiwgdmFsdWVbaV0pOworCisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodWJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKKworZG9uZToKKwlmcmVlX3BhZ2UoYWRkcik7CisJcmV0dXJuIHJldDsKK30KKworCisjZGVmaW5lIE1XSUZJRVhfREZTX0FERF9GSUxFKG5hbWUpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCNuYW1lLCAwNjQ0LCBwcml2LT5kZnNfZGV2X2RpciwgICAgICAgIFwKKwkJCXByaXYsICZtd2lmaWV4X2Rmc18jI25hbWUjI19mb3BzKSkgICAgICAgICAgICAgIFwKKwkJcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IHdoaWxlICgwKTsKKworI2RlZmluZSBNV0lGSUVYX0RGU19GSUxFX09QUyhuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbXdpZmlleF9kZnNfIyNuYW1lIyNfZm9wcyA9IHsgICAgICAgXAorCS5yZWFkID0gbXdpZmlleF8jI25hbWUjI19yZWFkLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLndyaXRlID0gbXdpZmlleF8jI25hbWUjI193cml0ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkub3BlbiA9IG13aWZpZXhfb3Blbl9nZW5lcmljLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfTsKKworI2RlZmluZSBNV0lGSUVYX0RGU19GSUxFX1JFQURfT1BTKG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbXdpZmlleF9kZnNfIyNuYW1lIyNfZm9wcyA9IHsgICAgICAgXAorCS5yZWFkID0gbXdpZmlleF8jI25hbWUjI19yZWFkLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLm9wZW4gPSBtd2lmaWV4X29wZW5fZ2VuZXJpYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK307CisKKyNkZWZpbmUgTVdJRklFWF9ERlNfRklMRV9XUklURV9PUFMobmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG13aWZpZXhfZGZzXyMjbmFtZSMjX2ZvcHMgPSB7ICAgICAgIFwKKwkud3JpdGUgPSBtd2lmaWV4XyMjbmFtZSMjX3dyaXRlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCS5vcGVuID0gbXdpZmlleF9vcGVuX2dlbmVyaWMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9OworCisKK01XSUZJRVhfREZTX0ZJTEVfUkVBRF9PUFMoaW5mbyk7CitNV0lGSUVYX0RGU19GSUxFX1JFQURfT1BTKGRlYnVnKTsKK01XSUZJRVhfREZTX0ZJTEVfUkVBRF9PUFMoZ2V0bG9nKTsKK01XSUZJRVhfREZTX0ZJTEVfT1BTKHJlZ3Jkd3IpOworTVdJRklFWF9ERlNfRklMRV9PUFMocmRlZXByb20pOworCisvKgorICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIHRoZSBkZWJ1ZyBGUyBkaXJlY3Rvcnkgc3RydWN0dXJlIGFuZCB0aGUgZmlsZXMuCisgKi8KK3ZvaWQKK213aWZpZXhfZGV2X2RlYnVnZnNfaW5pdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KQoreworCWlmICghbXdpZmlleF9kZnNfZGlyIHx8ICFwcml2KQorCQlyZXR1cm47CisKKwlwcml2LT5kZnNfZGV2X2RpciA9IGRlYnVnZnNfY3JlYXRlX2Rpcihwcml2LT5uZXRkZXYtPm5hbWUsCisJCQkJCSAgICAgICBtd2lmaWV4X2Rmc19kaXIpOworCisJaWYgKCFwcml2LT5kZnNfZGV2X2RpcikKKwkJcmV0dXJuOworCisJTVdJRklFWF9ERlNfQUREX0ZJTEUoaW5mbyk7CisJTVdJRklFWF9ERlNfQUREX0ZJTEUoZGVidWcpOworCU1XSUZJRVhfREZTX0FERF9GSUxFKGdldGxvZyk7CisJTVdJRklFWF9ERlNfQUREX0ZJTEUocmVncmR3cik7CisJTVdJRklFWF9ERlNfQUREX0ZJTEUocmRlZXByb20pOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZW1vdmVzIHRoZSBkZWJ1ZyBGUyBkaXJlY3Rvcnkgc3RydWN0dXJlIGFuZCB0aGUgZmlsZXMuCisgKi8KK3ZvaWQKK213aWZpZXhfZGV2X2RlYnVnZnNfcmVtb3ZlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpCit7CisJaWYgKCFwcml2KQorCQlyZXR1cm47CisKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUocHJpdi0+ZGZzX2Rldl9kaXIpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIHRoZSB0b3AgbGV2ZWwgcHJvYyBkaXJlY3RvcnkuCisgKi8KK3ZvaWQKK213aWZpZXhfZGVidWdmc19pbml0KHZvaWQpCit7CisJaWYgKCFtd2lmaWV4X2Rmc19kaXIpCisJCW13aWZpZXhfZGZzX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigibXdpZmlleCIsIE5VTEwpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZW1vdmVzIHRoZSB0b3AgbGV2ZWwgcHJvYyBkaXJlY3RvcnkuCisgKi8KK3ZvaWQKK213aWZpZXhfZGVidWdmc19yZW1vdmUodm9pZCkKK3sKKwlpZiAobXdpZmlleF9kZnNfZGlyKQorCQlkZWJ1Z2ZzX3JlbW92ZShtd2lmaWV4X2Rmc19kaXIpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9kZWNsLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2RlY2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTkwYjA5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9kZWNsLmgKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBNYXJ2ZWxsIFdpcmVsZXNzIExBTiBkZXZpY2UgZHJpdmVyOiBnZW5lcmljIGRhdGEgc3RydWN0dXJlcyBhbmQgQVBJcworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbAorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluCisgKiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gKKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBIG9yIG9uIHRoZQorICogd29ybGR3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0LgorICoKKyAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQKKyAqIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4KKyAqLworCisjaWZuZGVmIF9NV0lGSUVYX0RFQ0xfSF8KKyNkZWZpbmUgX01XSUZJRVhfREVDTF9IXworCisjdW5kZWYgcHJfZm10CisjZGVmaW5lIHByX2ZtdChmbXQpCUtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KKworCisjZGVmaW5lIE1XSUZJRVhfTUFYX0JTU19OVU0gICAgICAgICAoMSkKKworI2RlZmluZSBNV0lGSUVYX01JTl9EQVRBX0hFQURFUl9MRU4gMzIJLyogKHNpemVvZihtd2lmaWV4X3R4cGQpKSAqLworCisjZGVmaW5lIE1XSUZJRVhfTUFYX1RYX0JBU1RSRUFNX1NVUFBPUlRFRAkyCisjZGVmaW5lIE1XSUZJRVhfTUFYX1JYX0JBU1RSRUFNX1NVUFBPUlRFRAkxNgorCisjZGVmaW5lIE1XSUZJRVhfQU1QRFVfREVGX1RYV0lOU0laRSAgICAgICAgMzIKKyNkZWZpbmUgTVdJRklFWF9BTVBEVV9ERUZfUlhXSU5TSVpFICAgICAgICAxNgorI2RlZmluZSBNV0lGSUVYX0RFRkFVTFRfQkxPQ0tfQUNLX1RJTUVPVVQgIDB4ZmZmZgorCisjZGVmaW5lIE1XSUZJRVhfUkFURV9JTkRFWF9IUkRTU1MwIDAKKyNkZWZpbmUgTVdJRklFWF9SQVRFX0lOREVYX0hSRFNTUzMgMworI2RlZmluZSBNV0lGSUVYX1JBVEVfSU5ERVhfT0ZETTAgICA0CisjZGVmaW5lIE1XSUZJRVhfUkFURV9JTkRFWF9PRkRNNyAgIDExCisjZGVmaW5lIE1XSUZJRVhfUkFURV9JTkRFWF9NQ1MwICAgIDEyCisKKyNkZWZpbmUgTVdJRklFWF9SQVRFX0JJVE1BUF9PRkRNMCAgMTYKKyNkZWZpbmUgTVdJRklFWF9SQVRFX0JJVE1BUF9PRkRNNyAgMjMKKyNkZWZpbmUgTVdJRklFWF9SQVRFX0JJVE1BUF9NQ1MwICAgMzIKKyNkZWZpbmUgTVdJRklFWF9SQVRFX0JJVE1BUF9NQ1MxMjcgMTU5CisKKyNkZWZpbmUgTVdJRklFWF9SWF9EQVRBX0JVRl9TSVpFICAgICAoNCAqIDEwMjQpCisKKyNkZWZpbmUgTVdJRklFWF9SVFNfTUlOX1ZBTFVFICAgICAgICAgICAgICAoMCkKKyNkZWZpbmUgTVdJRklFWF9SVFNfTUFYX1ZBTFVFICAgICAgICAgICAgICAoMjM0NykKKyNkZWZpbmUgTVdJRklFWF9GUkFHX01JTl9WQUxVRSAgICAgICAgICAgICAoMjU2KQorI2RlZmluZSBNV0lGSUVYX0ZSQUdfTUFYX1ZBTFVFICAgICAgICAgICAgICgyMzQ2KQorCisjZGVmaW5lIE1XSUZJRVhfU0RJT19CTE9DS19TSVpFICAgICAgICAgICAgMjU2CisKKyNkZWZpbmUgTVdJRklFWF9CVUZfRkxBR19SRVFVRVVFRF9QS1QgICAgICBCSVQoMCkKKworZW51bSBtd2lmaWV4X2Jzc190eXBlIHsKKwlNV0lGSUVYX0JTU19UWVBFX1NUQSA9IDAsCisJTVdJRklFWF9CU1NfVFlQRV9VQVAgPSAxLAorCU1XSUZJRVhfQlNTX1RZUEVfQU5ZID0gMHhmZiwKK307CisKK2VudW0gbXdpZmlleF9ic3Nfcm9sZSB7CisJTVdJRklFWF9CU1NfUk9MRV9TVEEgPSAwLAorCU1XSUZJRVhfQlNTX1JPTEVfVUFQID0gMSwKKwlNV0lGSUVYX0JTU19ST0xFX0FOWSA9IDB4ZmYsCit9OworCisjZGVmaW5lIEJTU19ST0xFX0JJVF9NQVNLICAgIEJJVCgwKQorCisjZGVmaW5lIEdFVF9CU1NfUk9MRShwcml2KSAgICgocHJpdiktPmJzc19yb2xlICYgQlNTX1JPTEVfQklUX01BU0spCisKK2VudW0gbXdpZmlleF9kYXRhX2ZyYW1lX3R5cGUgeworCU1XSUZJRVhfREFUQV9GUkFNRV9UWVBFX0VUSF9JSSA9IDAsCisJTVdJRklFWF9EQVRBX0ZSQU1FX1RZUEVfODAyXzExLAorfTsKKworc3RydWN0IG13aWZpZXhfZndfaW1hZ2UgeworCXU4ICpoZWxwZXJfYnVmOworCXUzMiBoZWxwZXJfbGVuOworCXU4ICpmd19idWY7CisJdTMyIGZ3X2xlbjsKK307CisKK3N0cnVjdCBtd2lmaWV4XzgwMl8xMV9zc2lkIHsKKwl1MzIgc3NpZF9sZW47CisJdTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTsKK307CisKK3N0cnVjdCBtd2lmaWV4X3dhaXRfcXVldWUgeworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CisJdTE2IGNvbmRpdGlvbjsKKwlpbnQgc3RhdHVzOworfTsKKworc3RydWN0IG13aWZpZXhfcnhpbmZvIHsKKwl1OCBic3NfaW5kZXg7CisJc3RydWN0IHNrX2J1ZmYgKnBhcmVudDsKKwl1OCB1c2VfY291bnQ7Cit9OworCitzdHJ1Y3QgbXdpZmlleF90eGluZm8geworCXUzMiBzdGF0dXNfY29kZTsKKwl1OCBmbGFnczsKKwl1OCBic3NfaW5kZXg7Cit9OworCitzdHJ1Y3QgbXdpZmlleF9ic3NfYXR0ciB7CisJdTggYnNzX3R5cGU7CisJdTggZnJhbWVfdHlwZTsKKwl1OCBhY3RpdmU7CisJdTggYnNzX3ByaW9yaXR5OworCXU4IGJzc19udW07Cit9OworCitlbnVtIG13aWZpZXhfd21tX2FjX2UgeworCVdNTV9BQ19CSywKKwlXTU1fQUNfQkUsCisJV01NX0FDX1ZJLAorCVdNTV9BQ19WTworfSBfX3BhY2tlZDsKKyNlbmRpZiAvKiAhX01XSUZJRVhfREVDTF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9mdy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9mdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZGQxNDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2Z3LmgKQEAgLTAsMCArMSwxMTg3IEBACisvKgorICogTWFydmVsbCBXaXJlbGVzcyBMQU4gZGV2aWNlIGRyaXZlcjogRmlybXdhcmUgc3BlY2lmaWMgbWFjcm9zICYgc3RydWN0dXJlcworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbAorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluCisgKiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gKKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBIG9yIG9uIHRoZQorICogd29ybGR3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0LgorICoKKyAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQKKyAqIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4KKyAqLworCisjaWZuZGVmIF9NV0lGSUVYX0ZXX0hfCisjZGVmaW5lIF9NV0lGSUVYX0ZXX0hfCisKKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorCisKKyNkZWZpbmUgSU5URl9IRUFERVJfTEVOICAgICA0CisKK3N0cnVjdCByZmNfMTA0Ml9oZHIgeworCXU4IGxsY19kc2FwOworCXU4IGxsY19zc2FwOworCXU4IGxsY19jdHJsOworCXU4IHNuYXBfb3VpWzNdOworCXUxNiBzbmFwX3R5cGU7Cit9OworCitzdHJ1Y3QgcnhfcGFja2V0X2hkciB7CisJc3RydWN0IGV0aGhkciBldGg4MDNfaGRyOworCXN0cnVjdCByZmNfMTA0Ml9oZHIgcmZjMTA0Ml9oZHI7Cit9OworCitzdHJ1Y3QgdHhfcGFja2V0X2hkciB7CisJc3RydWN0IGV0aGhkciBldGg4MDNfaGRyOworCXN0cnVjdCByZmNfMTA0Ml9oZHIgcmZjMTA0Ml9oZHI7Cit9OworCisjZGVmaW5lIEJfU1VQUE9SVEVEX1JBVEVTICAgICAgICAgICAgICAgNQorI2RlZmluZSBHX1NVUFBPUlRFRF9SQVRFUyAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgQkdfU1VQUE9SVEVEX1JBVEVTICAgICAgICAgICAgICAxMworI2RlZmluZSBBX1NVUFBPUlRFRF9SQVRFUyAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgSE9TVENNRF9TVVBQT1JURURfUkFURVMgICAgICAgICAxNAorI2RlZmluZSBOX1NVUFBPUlRFRF9SQVRFUyAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQUxMXzgwMl8xMV9CQU5EUyAgICAgICAgICAgKEJBTkRfQSB8IEJBTkRfQiB8IEJBTkRfRyB8IEJBTkRfR04pCisKKyNkZWZpbmUgRldfTVVMVElfQkFORFNfU1VQUE9SVCAgKEJJVCg4KSB8IEJJVCg5KSB8IEJJVCgxMCkgfCBCSVQoMTEpKQorI2RlZmluZSBJU19TVVBQT1JUX01VTFRJX0JBTkRTKGFkYXB0ZXIpICAgICAgICBcCisJKGFkYXB0ZXItPmZ3X2NhcF9pbmZvICYgRldfTVVMVElfQkFORFNfU1VQUE9SVCkKKyNkZWZpbmUgR0VUX0ZXX0RFRkFVTFRfQkFORFMoYWRhcHRlcikgIFwKKwkoKGFkYXB0ZXItPmZ3X2NhcF9pbmZvID4+IDgpICYgQUxMXzgwMl8xMV9CQU5EUykKKworZXh0ZXJuIHU4IHN1cHBvcnRlZF9yYXRlc19iW0JfU1VQUE9SVEVEX1JBVEVTXTsKK2V4dGVybiB1OCBzdXBwb3J0ZWRfcmF0ZXNfZ1tHX1NVUFBPUlRFRF9SQVRFU107CitleHRlcm4gdTggc3VwcG9ydGVkX3JhdGVzX2JnW0JHX1NVUFBPUlRFRF9SQVRFU107CitleHRlcm4gdTggc3VwcG9ydGVkX3JhdGVzX2FbQV9TVVBQT1JURURfUkFURVNdOworZXh0ZXJuIHU4IHN1cHBvcnRlZF9yYXRlc19uW05fU1VQUE9SVEVEX1JBVEVTXTsKKworI2RlZmluZSBIb3N0Q21kX1dFUF9LRVlfSU5ERVhfTUFTSyAgICAgICAgICAgICAgMHgzZmZmCisKKyNkZWZpbmUgS0VZX0lORk9fRU5BQkxFRCAgICAgICAgMHgwMQorZW51bSBLRVlfVFlQRV9JRCB7CisJS0VZX1RZUEVfSURfV0VQID0gMCwKKwlLRVlfVFlQRV9JRF9US0lQLAorCUtFWV9UWVBFX0lEX0FFUywKKwlLRVlfVFlQRV9JRF9XQVBJLAorfTsKKyNkZWZpbmUgS0VZX01DQVNUCUJJVCgwKQorI2RlZmluZSBLRVlfVU5JQ0FTVAlCSVQoMSkKKyNkZWZpbmUgS0VZX0VOQUJMRUQJQklUKDIpCisKKyNkZWZpbmUgV0FQSV9LRVlfTEVOCQkJNTAKKworI2RlZmluZSBNQVhfUE9MTF9UUklFUwkJCTEwMAorCisjZGVmaW5lIE1BWF9NVUxUSV9JTlRFUkZBQ0VfUE9MTF9UUklFUyAgMTAwMAorCisjZGVmaW5lIE1BWF9GSVJNV0FSRV9QT0xMX1RSSUVTCQkJMTAwCisKKyNkZWZpbmUgRklSTVdBUkVfUkVBRFkJCQkJMHhmZWRjCisKK2VudW0gTVdJRklFWF84MDJfMTFfUFJJVkFDWV9GSUxURVIgeworCU1XSUZJRVhfODAyXzExX1BSSVZfRklMVEVSX0FDQ0VQVF9BTEwsCisJTVdJRklFWF84MDJfMTFfUFJJVl9GSUxURVJfODAyMVhfV0VQCit9OworCitlbnVtIE1XSUZJRVhfODAyXzExX1dFUF9TVEFUVVMgeworCU1XSUZJRVhfODAyXzExX1dFUF9FTkFCTEVELAorCU1XSUZJRVhfODAyXzExX1dFUF9ESVNBQkxFRCwKK307CisKKyNkZWZpbmUgQ0FMX1NOUihSU1NJLCBORikJCSgoczE2KSgoczE2KShSU1NJKS0oczE2KShORikpKQorCisjZGVmaW5lIFBST1BSSUVUQVJZX1RMVl9CQVNFX0lEICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgVExWX1RZUEVfS0VZX01BVEVSSUFMICAgICAgIChQUk9QUklFVEFSWV9UTFZfQkFTRV9JRCArIDApCisjZGVmaW5lIFRMVl9UWVBFX0NIQU5MSVNUICAgICAgICAgICAoUFJPUFJJRVRBUllfVExWX0JBU0VfSUQgKyAxKQorI2RlZmluZSBUTFZfVFlQRV9OVU1QUk9CRVMgICAgICAgICAgKFBST1BSSUVUQVJZX1RMVl9CQVNFX0lEICsgMikKKyNkZWZpbmUgVExWX1RZUEVfUEFTU1RIUk9VR0ggICAgICAgIChQUk9QUklFVEFSWV9UTFZfQkFTRV9JRCArIDEwKQorI2RlZmluZSBUTFZfVFlQRV9XTU1RU1RBVFVTICAgICAgICAgKFBST1BSSUVUQVJZX1RMVl9CQVNFX0lEICsgMTYpCisjZGVmaW5lIFRMVl9UWVBFX1dJTERDQVJEU1NJRCAgICAgICAoUFJPUFJJRVRBUllfVExWX0JBU0VfSUQgKyAxOCkKKyNkZWZpbmUgVExWX1RZUEVfVFNGVElNRVNUQU1QICAgICAgIChQUk9QUklFVEFSWV9UTFZfQkFTRV9JRCArIDE5KQorI2RlZmluZSBUTFZfVFlQRV9BVVRIX1RZUEUgICAgICAgICAgKFBST1BSSUVUQVJZX1RMVl9CQVNFX0lEICsgMzEpCisjZGVmaW5lIFRMVl9UWVBFX0NIQU5ORUxCQU5ETElTVCAgICAoUFJPUFJJRVRBUllfVExWX0JBU0VfSUQgKyA0MikKKyNkZWZpbmUgVExWX1RZUEVfUkFURV9EUk9QX0NPTlRST0wgIChQUk9QUklFVEFSWV9UTFZfQkFTRV9JRCArIDgyKQorI2RlZmluZSBUTFZfVFlQRV9SQVRFX1NDT1BFICAgICAgICAgKFBST1BSSUVUQVJZX1RMVl9CQVNFX0lEICsgODMpCisjZGVmaW5lIFRMVl9UWVBFX1BPV0VSX0dST1VQICAgICAgICAoUFJPUFJJRVRBUllfVExWX0JBU0VfSUQgKyA4NCkKKyNkZWZpbmUgVExWX1RZUEVfV0FQSV9JRSAgICAgICAgICAgIChQUk9QUklFVEFSWV9UTFZfQkFTRV9JRCArIDk0KQorI2RlZmluZSBUTFZfVFlQRV9BVVRPX0RTX1BBUkFNICAgICAgKFBST1BSSUVUQVJZX1RMVl9CQVNFX0lEICsgMTEzKQorI2RlZmluZSBUTFZfVFlQRV9QU19QQVJBTSAgICAgICAgICAgKFBST1BSSUVUQVJZX1RMVl9CQVNFX0lEICsgMTE0KQorCisjZGVmaW5lIE1XSUZJRVhfVFhfREFUQV9CVUZfU0laRV8ySyAgICAgICAgMjA0OAorCisjZGVmaW5lIFNTTl9NQVNLICAgICAgICAgMHhmZmYwCisKKyNkZWZpbmUgQkFfUkVTVUxUX1NVQ0NFU1MgICAgICAgIDB4MAorI2RlZmluZSBCQV9SRVNVTFRfVElNRU9VVCAgICAgICAgMHgyCisKKyNkZWZpbmUgSVNfQkFTVFJFQU1fU0VUVVAocHRyKSAgKHB0ci0+YmFfc3RhdHVzKQorCisjZGVmaW5lIEJBX1NUUkVBTV9OT1RfQUxMT1dFRCAgIDB4ZmYKKworI2RlZmluZSBJU18xMU5fRU5BQkxFRChwcml2KSAoKHByaXYtPmFkYXB0ZXItPmNvbmZpZ19iYW5kcyAmIEJBTkRfR04gfHwgXAorCQkJcHJpdi0+YWRhcHRlci0+Y29uZmlnX2JhbmRzICYgQkFORF9BTikgXAorCQkJJiYgcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLmJjbl9odF9jYXApCisjZGVmaW5lIElOSVRJQVRPUl9CSVQoRGVsQkFQYXJhbVNldCkgKCgoRGVsQkFQYXJhbVNldCkgJlwKKwkJCUJJVChERUxCQV9JTklUSUFUT1JfUE9TKSkgPj4gREVMQkFfSU5JVElBVE9SX1BPUykKKworI2RlZmluZSBNV0lGSUVYX1RYX0RBVEFfQlVGX1NJWkVfNEsgICAgICAgIDQwOTYKKyNkZWZpbmUgTVdJRklFWF9UWF9EQVRBX0JVRl9TSVpFXzhLICAgICAgICA4MTkyCisKKyNkZWZpbmUgSVNTVVBQXzExTkVOQUJMRUQoRndDYXBJbmZvKSAoRndDYXBJbmZvICYgQklUKDExKSkKKworLyogZGV2X2NhcCBiaXRtYXAKKyAqIEJJVAorICogMC0xNgkJcmVzZXJ2ZWQKKyAqIDE3CQlJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MAorICogMTgtMjIJcmVzZXJ2ZWQKKyAqIDIzCQlJRUVFODAyMTFfSFRfQ0FQX1NHSV8yMAorICogMjQJCUlFRUU4MDIxMV9IVF9DQVBfU0dJXzQwCisgKiAyNQkJSUVFRTgwMjExX0hUX0NBUF9UWF9TVEJDCisgKiAyNgkJSUVFRTgwMjExX0hUX0NBUF9SWF9TVEJDCisgKiAyNy0yOAlyZXNlcnZlZAorICogMjkJCUlFRUU4MDIxMV9IVF9DQVBfR1JOX0ZMRAorICogMzAtMzEJcmVzZXJ2ZWQKKyAqLworI2RlZmluZSBJU1NVUFBfQ0hBTldJRFRINDAoRG90MTFuRGV2Q2FwKSAoRG90MTFuRGV2Q2FwICYgQklUKDE3KSkKKyNkZWZpbmUgSVNTVVBQX1NIT1JUR0kyMChEb3QxMW5EZXZDYXApIChEb3QxMW5EZXZDYXAgJiBCSVQoMjMpKQorI2RlZmluZSBJU1NVUFBfU0hPUlRHSTQwKERvdDExbkRldkNhcCkgKERvdDExbkRldkNhcCAmIEJJVCgyNCkpCisjZGVmaW5lIElTU1VQUF9UWFNUQkMoRG90MTFuRGV2Q2FwKSAoRG90MTFuRGV2Q2FwICYgQklUKDI1KSkKKyNkZWZpbmUgSVNTVVBQX1JYU1RCQyhEb3QxMW5EZXZDYXApIChEb3QxMW5EZXZDYXAgJiBCSVQoMjYpKQorI2RlZmluZSBJU1NVUFBfR1JFRU5GSUVMRChEb3QxMW5EZXZDYXApIChEb3QxMW5EZXZDYXAgJiBCSVQoMjkpKQorCisjZGVmaW5lIEdFVF9SWE1DU1NVUFAoRGV2TUNTU3VwcG9ydGVkKSAoRGV2TUNTU3VwcG9ydGVkICYgMHgwZikKKyNkZWZpbmUgU0VUSFRfTUNTMzIoeCkgKHhbNF0gfD0gMSkKKworI2RlZmluZSBTRVRfU0VDT05EQVJZQ0hBTihSYWRpb1R5cGUsIFNFQ0NIQU4pIChSYWRpb1R5cGUgfD0gKFNFQ0NIQU4gPDwgNCkpCisKKyNkZWZpbmUgTExDX1NOQVBfTEVOICAgIDgKKworI2RlZmluZSBNT0RfQ0xBU1NfSFJfRFNTUyAgICAgICAweDAzCisjZGVmaW5lIE1PRF9DTEFTU19PRkRNICAgICAgICAgIDB4MDcKKyNkZWZpbmUgTU9EX0NMQVNTX0hUICAgICAgICAgICAgMHgwOAorI2RlZmluZSBIVF9CV18yMCAgICAwCisjZGVmaW5lIEhUX0JXXzQwICAgIDEKKworI2RlZmluZSBIb3N0Q21kX0NNRF9HRVRfSFdfU1BFQyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzCisjZGVmaW5lIEhvc3RDbWRfQ01EXzgwMl8xMV9TQ0FOICAgICAgICAgICAgICAgICAgICAgICAweDAwMDYKKyNkZWZpbmUgSG9zdENtZF9DTURfODAyXzExX0dFVF9MT0cgICAgICAgICAgICAgICAgICAgIDB4MDAwYgorI2RlZmluZSBIb3N0Q21kX0NNRF9NQUNfTVVMVElDQVNUX0FEUiAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIEhvc3RDbWRfQ01EXzgwMl8xMV9FRVBST01fQUNDRVNTICAgICAgICAgICAgICAweDAwNTkKKyNkZWZpbmUgSG9zdENtZF9DTURfODAyXzExX0FTU09DSUFURSAgICAgICAgICAgICAgICAgIDB4MDAxMgorI2RlZmluZSBIb3N0Q21kX0NNRF84MDJfMTFfU05NUF9NSUIgICAgICAgICAgICAgICAgICAgMHgwMDE2CisjZGVmaW5lIEhvc3RDbWRfQ01EX01BQ19SRUdfQUNDRVNTICAgICAgICAgICAgICAgICAgICAweDAwMTkKKyNkZWZpbmUgSG9zdENtZF9DTURfQkJQX1JFR19BQ0NFU1MgICAgICAgICAgICAgICAgICAgIDB4MDAxYQorI2RlZmluZSBIb3N0Q21kX0NNRF9SRl9SRUdfQUNDRVNTICAgICAgICAgICAgICAgICAgICAgMHgwMDFiCisjZGVmaW5lIEhvc3RDbWRfQ01EX1BNSUNfUkVHX0FDQ0VTUyAgICAgICAgICAgICAgICAgICAweDAwYWQKKyNkZWZpbmUgSG9zdENtZF9DTURfODAyXzExX1JGX0NIQU5ORUwgICAgICAgICAgICAgICAgIDB4MDAxZAorI2RlZmluZSBIb3N0Q21kX0NNRF84MDJfMTFfREVBVVRIRU5USUNBVEUgICAgICAgICAgICAgMHgwMDI0CisjZGVmaW5lIEhvc3RDbWRfQ01EX01BQ19DT05UUk9MICAgICAgICAgICAgICAgICAgICAgICAweDAwMjgKKyNkZWZpbmUgSG9zdENtZF9DTURfODAyXzExX0FEX0hPQ19TVEFSVCAgICAgICAgICAgICAgIDB4MDAyYgorI2RlZmluZSBIb3N0Q21kX0NNRF84MDJfMTFfQURfSE9DX0pPSU4gICAgICAgICAgICAgICAgMHgwMDJjCisjZGVmaW5lIEhvc3RDbWRfQ01EXzgwMl8xMV9BRF9IT0NfU1RPUCAgICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgSG9zdENtZF9DTURfODAyXzExX01BQ19BRERSRVNTICAgICAgICAgICAgICAgIDB4MDA0RAorI2RlZmluZSBIb3N0Q21kX0NNRF84MDJfMTFEX0RPTUFJTl9JTkZPICAgICAgICAgICAgICAgMHgwMDViCisjZGVmaW5lIEhvc3RDbWRfQ01EXzgwMl8xMV9LRVlfTUFURVJJQUwgICAgICAgICAgICAgICAweDAwNWUKKyNkZWZpbmUgSG9zdENtZF9DTURfODAyXzExX0JHX1NDQU5fUVVFUlkgICAgICAgICAgICAgIDB4MDA2YworI2RlZmluZSBIb3N0Q21kX0NNRF9XTU1fR0VUX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgMHgwMDcxCisjZGVmaW5lIEhvc3RDbWRfQ01EXzgwMl8xMV9UWF9SQVRFX1FVRVJZICAgICAgICAgICAgICAweDAwN2YKKyNkZWZpbmUgSG9zdENtZF9DTURfODAyXzExX0lCU1NfQ09BTEVTQ0lOR19TVEFUVVMgICAgIDB4MDA4MworI2RlZmluZSBIb3N0Q21kX0NNRF9WRVJTSU9OX0VYVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDk3CisjZGVmaW5lIEhvc3RDbWRfQ01EX1JTU0lfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwYTQKKyNkZWZpbmUgSG9zdENtZF9DTURfRlVOQ19JTklUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBhOQorI2RlZmluZSBIb3N0Q21kX0NNRF9GVU5DX1NIVVRET1dOICAgICAgICAgICAgICAgICAgICAgMHgwMGFhCisjZGVmaW5lIEhvc3RDbWRfQ01EXzExTl9DRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwY2QKKyNkZWZpbmUgSG9zdENtZF9DTURfMTFOX0FEREJBX1JFUSAgICAgICAgICAgICAgICAgICAgIDB4MDBjZQorI2RlZmluZSBIb3N0Q21kX0NNRF8xMU5fQUREQkFfUlNQICAgICAgICAgICAgICAgICAgICAgMHgwMGNmCisjZGVmaW5lIEhvc3RDbWRfQ01EXzExTl9ERUxCQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwZDAKKyNkZWZpbmUgSG9zdENtZF9DTURfUkVDT05GSUdVUkVfVFhfQlVGRiAgICAgICAgICAgICAgIDB4MDBkOQorI2RlZmluZSBIb3N0Q21kX0NNRF9BTVNEVV9BR0dSX0NUUkwgICAgICAgICAgICAgICAgICAgMHgwMGRmCisjZGVmaW5lIEhvc3RDbWRfQ01EX1RYUFdSX0NGRyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwZDEKKyNkZWZpbmUgSG9zdENtZF9DTURfVFhfUkFURV9DRkcgICAgICAgICAgICAgICAgICAgICAgIDB4MDBkNgorI2RlZmluZSBIb3N0Q21kX0NNRF84MDJfMTFfUFNfTU9ERV9FTkggICAgICAgICAgICAgICAgMHgwMGU0CisjZGVmaW5lIEhvc3RDbWRfQ01EXzgwMl8xMV9IU19DRkdfRU5IICAgICAgICAgICAgICAgICAweDAwZTUKKyNkZWZpbmUgSG9zdENtZF9DTURfQ0FVX1JFR19BQ0NFU1MgICAgICAgICAgICAgICAgICAgIDB4MDBlZAorI2RlZmluZSBIb3N0Q21kX0NNRF9TRVRfQlNTX01PREUgICAgICAgICAgICAgICAgICAgICAgMHgwMGY3CisKKworZW51bSBFTkhfUFNfTU9ERVMgeworCUVOX1BTID0gMSwKKwlESVNfUFMgPSAyLAorCUVOX0FVVE9fRFMgPSAzLAorCURJU19BVVRPX0RTID0gNCwKKwlTTEVFUF9DT05GSVJNID0gNSwKKwlHRVRfUFMgPSAwLAorCUVOX0FVVE9fUFMgPSAweGZmLAorCURJU19BVVRPX1BTID0gMHhmZSwKK307CisKKyNkZWZpbmUgSG9zdENtZF9SRVRfQklUICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAKKyNkZWZpbmUgSG9zdENtZF9BQ1RfR0VOX0dFVCAgICAgICAgICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgSG9zdENtZF9BQ1RfR0VOX1NFVCAgICAgICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgSG9zdENtZF9SRVNVTFRfT0sgICAgICAgICAgICAgICAgICAgICAweDAwMDAKKworI2RlZmluZSBIb3N0Q21kX0FDVF9NQUNfUlhfT04gICAgICAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBIb3N0Q21kX0FDVF9NQUNfVFhfT04gICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBIb3N0Q21kX0FDVF9NQUNfV0VQX0VOQUJMRSAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBIb3N0Q21kX0FDVF9NQUNfRVRIRVJORVRJSV9FTkFCTEUgICAgIDB4MDAxMAorI2RlZmluZSBIb3N0Q21kX0FDVF9NQUNfUFJPTUlTQ1VPVVNfRU5BQkxFICAgIDB4MDA4MAorI2RlZmluZSBIb3N0Q21kX0FDVF9NQUNfQUxMX01VTFRJQ0FTVF9FTkFCTEUgIDB4MDEwMAorI2RlZmluZSBIb3N0Q21kX0FDVF9NQUNfQURIT0NfR19QUk9URUNUSU9OX09OICAgICAweDIwMDAKKworI2RlZmluZSBIb3N0Q21kX0JTU19NT0RFX0lCU1MgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgSG9zdENtZF9CU1NfTU9ERV9BTlkgICAgICAgICAgICAgICAgMHgwMDAzCisKKyNkZWZpbmUgSG9zdENtZF9TQ0FOX1JBRElPX1RZUEVfQkcgICAgICAgICAgMAorI2RlZmluZSBIb3N0Q21kX1NDQU5fUkFESU9fVFlQRV9BICAgICAgICAgICAxCisKKyNkZWZpbmUgSE9TVF9TTEVFUF9DRkdfQ0FOQ0VMCQkweGZmZmZmZmZmCisjZGVmaW5lIEhPU1RfU0xFRVBfQ0ZHX0NPTkRfREVGCQkweDAwMDAwMDBmCisjZGVmaW5lIEhPU1RfU0xFRVBfQ0ZHX0dQSU9fREVGCQkweGZmCisjZGVmaW5lIEhPU1RfU0xFRVBfQ0ZHX0dBUF9ERUYJCTAKKworI2RlZmluZSBDTURfRl9IT1NUQ01EICAgICAgICAgICAoMSA8PCAwKQorI2RlZmluZSBDTURfRl9DQU5DRUxFRCAgICAgICAgICAoMSA8PCAxKQorCisjZGVmaW5lIEhvc3RDbWRfQ01EX0lEX01BU0sgICAgICAgICAgICAgMHgwZmZmCisKKyNkZWZpbmUgSG9zdENtZF9TRVFfTlVNX01BU0sgICAgICAgICAgICAweDAwZmYKKworI2RlZmluZSBIb3N0Q21kX0JTU19OVU1fTUFTSyAgICAgICAgICAgIDB4MGYwMAorCisjZGVmaW5lIEhvc3RDbWRfQlNTX1RZUEVfTUFTSyAgICAgICAgICAgMHhmMDAwCisKKyNkZWZpbmUgSG9zdENtZF9TRVRfU0VRX05PX0JTU19JTkZPKHNlcSwgbnVtLCB0eXBlKSB7ICAgXAorCSgoKHNlcSkgJiAweDAwZmYpIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgKCgobnVtKSAmIDB4MDAwZikgPDwgOCkpIHwgICAgICAgICAgICAgICAgICAgICBcCisJKCgodHlwZSkgJiAweDAwMGYpIDw8IDEyKTsgICAgICAgICAgICAgICAgICB9CisKKyNkZWZpbmUgSG9zdENtZF9HRVRfU0VRX05PKHNlcSkgICAgICAgXAorCSgoc2VxKSAmIEhvc3RDbWRfU0VRX05VTV9NQVNLKQorCisjZGVmaW5lIEhvc3RDbWRfR0VUX0JTU19OTyhzZXEpICAgICAgICAgXAorCSgoKHNlcSkgJiBIb3N0Q21kX0JTU19OVU1fTUFTSykgPj4gOCkKKworI2RlZmluZSBIb3N0Q21kX0dFVF9CU1NfVFlQRShzZXEpICAgICAgIFwKKwkoKChzZXEpICYgSG9zdENtZF9CU1NfVFlQRV9NQVNLKSA+PiAxMikKKworI2RlZmluZSBFVkVOVF9EVU1NWV9IT1NUX1dBS0VVUF9TSUdOQUwgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRVZFTlRfTElOS19MT1NUICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEVWRU5UX0xJTktfU0VOU0VEICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBFVkVOVF9NSUJfQ0hBTkdFRCAgICAgICAgICAgICAgIDB4MDAwMDAwMDYKKyNkZWZpbmUgRVZFTlRfSU5JVF9ET05FICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIEVWRU5UX0RFQVVUSEVOVElDQVRFRCAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBFVkVOVF9ESVNBU1NPQ0lBVEVEICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgRVZFTlRfUFNfQVdBS0UgICAgICAgICAgICAgICAgICAweDAwMDAwMDBhCisjZGVmaW5lIEVWRU5UX1BTX1NMRUVQICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwYgorI2RlZmluZSBFVkVOVF9NSUNfRVJSX01VTFRJQ0FTVCAgICAgICAgIDB4MDAwMDAwMGQKKyNkZWZpbmUgRVZFTlRfTUlDX0VSUl9VTklDQVNUICAgICAgICAgICAweDAwMDAwMDBlCisjZGVmaW5lIEVWRU5UX0RFRVBfU0xFRVBfQVdBS0UgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBFVkVOVF9BREhPQ19CQ05fTE9TVCAgICAgICAgICAgIDB4MDAwMDAwMTEKKworI2RlZmluZSBFVkVOVF9XTU1fU1RBVFVTX0NIQU5HRSAgICAgICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgRVZFTlRfQkdfU0NBTl9SRVBPUlQgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIEVWRU5UX1JTU0lfTE9XICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBFVkVOVF9TTlJfTE9XICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMWEKKyNkZWZpbmUgRVZFTlRfTUFYX0ZBSUwgICAgICAgICAgICAgICAgICAweDAwMDAwMDFiCisjZGVmaW5lIEVWRU5UX1JTU0lfSElHSCAgICAgICAgICAgICAgICAgMHgwMDAwMDAxYworI2RlZmluZSBFVkVOVF9TTlJfSElHSCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMWQKKyNkZWZpbmUgRVZFTlRfSUJTU19DT0FMRVNDRUQgICAgICAgICAgICAweDAwMDAwMDFlCisjZGVmaW5lIEVWRU5UX0RBVEFfUlNTSV9MT1cgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBFVkVOVF9EQVRBX1NOUl9MT1cgICAgICAgICAgICAgIDB4MDAwMDAwMjUKKyNkZWZpbmUgRVZFTlRfREFUQV9SU1NJX0hJR0ggICAgICAgICAgICAweDAwMDAwMDI2CisjZGVmaW5lIEVWRU5UX0RBVEFfU05SX0hJR0ggICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBFVkVOVF9MSU5LX1FVQUxJVFkgICAgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgRVZFTlRfUE9SVF9SRUxFQVNFICAgICAgICAgICAgICAweDAwMDAwMDJiCisjZGVmaW5lIEVWRU5UX1BSRV9CRUFDT05fTE9TVCAgICAgICAgICAgMHgwMDAwMDAzMQorI2RlZmluZSBFVkVOVF9BRERCQSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzMKKyNkZWZpbmUgRVZFTlRfREVMQkEgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0CisjZGVmaW5lIEVWRU5UX0JBX1NUUkVBTV9USUVNT1VUICAgICAgICAgMHgwMDAwMDAzNworI2RlZmluZSBFVkVOVF9BTVNEVV9BR0dSX0NUUkwgICAgICAgICAgIDB4MDAwMDAwNDIKKyNkZWZpbmUgRVZFTlRfV0VQX0lDVl9FUlIgICAgICAgICAgICAgICAweDAwMDAwMDQ2CisjZGVmaW5lIEVWRU5UX0hTX0FDVF9SRVEgICAgICAgICAgICAgICAgMHgwMDAwMDA0NworI2RlZmluZSBFVkVOVF9CV19DSEFOR0UgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDgKKworI2RlZmluZSBFVkVOVF9IT1NUV0FLRV9TVEFJRQkJMHgwMDAwMDA0ZAorCisjZGVmaW5lIEVWRU5UX0lEX01BU0sgICAgICAgICAgICAgICAgICAgMHhmZmZmCisjZGVmaW5lIEJTU19OVU1fTUFTSyAgICAgICAgICAgICAgICAgICAgMHhmCisKKyNkZWZpbmUgRVZFTlRfR0VUX0JTU19OVU0oZXZlbnRfY2F1c2UpICAgICAgICAgIFwKKwkoKChldmVudF9jYXVzZSkgPj4gMTYpICYgQlNTX05VTV9NQVNLKQorCisjZGVmaW5lIEVWRU5UX0dFVF9CU1NfVFlQRShldmVudF9jYXVzZSkgICAgICAgICBcCisJKCgoZXZlbnRfY2F1c2UpID4+IDI0KSAmIDB4MDBmZikKKworc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyIHsKKwlfX2xlMTYgdHlwZTsKKwlfX2xlMTYgbGVuOworfSBfX3BhY2tlZDsKKworc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfZGF0YSB7CisJc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyIGhlYWRlcjsKKwl1OCBkYXRhWzFdOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBNV0lGSUVYX1R4UERfUE9XRVJfTUdNVF9OVUxMX1BBQ0tFVCAweDAxCisjZGVmaW5lIE1XSUZJRVhfVHhQRF9QT1dFUl9NR01UX0xBU1RfUEFDS0VUIDB4MDgKKworc3RydWN0IHR4cGQgeworCXU4IGJzc190eXBlOworCXU4IGJzc19udW07CisJX19sZTE2IHR4X3BrdF9sZW5ndGg7CisJX19sZTE2IHR4X3BrdF9vZmZzZXQ7CisJX19sZTE2IHR4X3BrdF90eXBlOworCV9fbGUzMiB0eF9jb250cm9sOworCXU4IHByaW9yaXR5OworCXU4IGZsYWdzOworCXU4IHBrdF9kZWxheV8ybXM7CisJdTggcmVzZXJ2ZWQxOworfSBfX3BhY2tlZDsKKworc3RydWN0IHJ4cGQgeworCXU4IGJzc190eXBlOworCXU4IGJzc19udW07CisJdTE2IHJ4X3BrdF9sZW5ndGg7CisJdTE2IHJ4X3BrdF9vZmZzZXQ7CisJdTE2IHJ4X3BrdF90eXBlOworCXUxNiBzZXFfbnVtOworCXU4IHByaW9yaXR5OworCXU4IHJ4X3JhdGU7CisJczggc25yOworCXM4IG5mOworCS8qIEh0IEluZm8gW0JpdCAwXSBSeFJhdGUgZm9ybWF0OiBMRz0wLCBIVD0xCisJICogW0JpdCAxXSAgSFQgQmFuZHdpZHRoOiBCVzIwID0gMCwgQlc0MCA9IDEKKwkgKiBbQml0IDJdICBIVCBHdWFyZCBJbnRlcnZhbDogTEdJID0gMCwgU0dJID0gMSAqLworCXU4IGh0X2luZm87CisJdTggcmVzZXJ2ZWQ7Cit9IF9fcGFja2VkOworCitlbnVtIG13aWZpZXhfY2hhbl9zY2FuX21vZGVfYml0bWFza3MgeworCU1XSUZJRVhfUEFTU0lWRV9TQ0FOID0gQklUKDApLAorCU1XSUZJRVhfRElTQUJMRV9DSEFOX0ZJTFQgPSBCSVQoMSksCit9OworCisjZGVmaW5lIFNFQ09ORF9DSEFOTkVMX0JFTE9XICAgIDB4MzAKKyNkZWZpbmUgU0VDT05EX0NIQU5ORUxfQUJPVkUgICAgMHgxMAorc3RydWN0IG13aWZpZXhfY2hhbl9zY2FuX3BhcmFtX3NldCB7CisJdTggcmFkaW9fdHlwZTsKKwl1OCBjaGFuX251bWJlcjsKKwl1OCBjaGFuX3NjYW5fbW9kZV9iaXRtYXA7CisJX19sZTE2IG1pbl9zY2FuX3RpbWU7CisJX19sZTE2IG1heF9zY2FuX3RpbWU7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19jaGFuX2xpc3RfcGFyYW1fc2V0IHsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIgaGVhZGVyOworCXN0cnVjdCBtd2lmaWV4X2NoYW5fc2Nhbl9wYXJhbV9zZXQgY2hhbl9zY2FuX3BhcmFtWzFdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGNoYW5fYmFuZF9wYXJhbV9zZXQgeworCXU4IHJhZGlvX3R5cGU7CisJdTggY2hhbl9udW1iZXI7Cit9OworCitzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19jaGFuX2JhbmRfbGlzdF9wYXJhbV9zZXQgeworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlciBoZWFkZXI7CisJc3RydWN0IGNoYW5fYmFuZF9wYXJhbV9zZXQgY2hhbl9iYW5kX3BhcmFtWzFdOworfSBfX3BhY2tlZDsKKworc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfcmF0ZXNfcGFyYW1fc2V0IHsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIgaGVhZGVyOworCXU4IHJhdGVzWzFdOworfSBfX3BhY2tlZDsKKworc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfc3NpZF9wYXJhbV9zZXQgeworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlciBoZWFkZXI7CisJdTggc3NpZFsxXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtd2lmaWV4X2llX3R5cGVzX251bV9wcm9iZXMgeworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlciBoZWFkZXI7CisJX19sZTE2IG51bV9wcm9iZXM7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc193aWxkY2FyZF9zc2lkX3BhcmFtcyB7CisJc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyIGhlYWRlcjsKKwl1OCBtYXhfc3NpZF9sZW5ndGg7CisJdTggc3NpZFsxXTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgVFNGX0RBVEFfU0laRSAgICAgICAgICAgIDgKK3N0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3RzZl90aW1lc3RhbXAgeworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlciBoZWFkZXI7CisJdTggdHNmX2RhdGFbMV07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbXdpZmlleF9jZl9wYXJhbV9zZXQgeworCXU4IGNmcF9jbnQ7CisJdTggY2ZwX3BlcmlvZDsKKwl1MTYgY2ZwX21heF9kdXJhdGlvbjsKKwl1MTYgY2ZwX2R1cmF0aW9uX3JlbWFpbmluZzsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtd2lmaWV4X2lic3NfcGFyYW1fc2V0IHsKKwl1MTYgYXRpbV93aW5kb3c7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19zc19wYXJhbV9zZXQgeworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlciBoZWFkZXI7CisJdW5pb24geworCQlzdHJ1Y3QgbXdpZmlleF9jZl9wYXJhbV9zZXQgY2ZfcGFyYW1fc2V0WzFdOworCQlzdHJ1Y3QgbXdpZmlleF9pYnNzX3BhcmFtX3NldCBpYnNzX3BhcmFtX3NldFsxXTsKKwl9IGNmX2lic3M7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbXdpZmlleF9maF9wYXJhbV9zZXQgeworCXUxNiBkd2VsbF90aW1lOworCXU4IGhvcF9zZXQ7CisJdTggaG9wX3BhdHRlcm47CisJdTggaG9wX2luZGV4OworfSBfX3BhY2tlZDsKKworc3RydWN0IG13aWZpZXhfZHNfcGFyYW1fc2V0IHsKKwl1OCBjdXJyZW50X2NoYW47Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19waHlfcGFyYW1fc2V0IHsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIgaGVhZGVyOworCXVuaW9uIHsKKwkJc3RydWN0IG13aWZpZXhfZmhfcGFyYW1fc2V0IGZoX3BhcmFtX3NldFsxXTsKKwkJc3RydWN0IG13aWZpZXhfZHNfcGFyYW1fc2V0IGRzX3BhcmFtX3NldFsxXTsKKwl9IGZoX2RzOworfSBfX3BhY2tlZDsKKworc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfYXV0aF90eXBlIHsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIgaGVhZGVyOworCV9fbGUxNiBhdXRoX3R5cGU7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc192ZW5kb3JfcGFyYW1fc2V0IHsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIgaGVhZGVyOworCXU4IGllW01XSUZJRVhfTUFYX1ZTSUVfTEVOXTsKK307CisKK3N0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3Jzbl9wYXJhbV9zZXQgeworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlciBoZWFkZXI7CisJdTggcnNuX2llWzFdOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBLRVlQQVJBTVNFVF9GSVhFRF9MRU4gNgorCitzdHJ1Y3QgbXdpZmlleF9pZV90eXBlX2tleV9wYXJhbV9zZXQgeworCV9fbGUxNiB0eXBlOworCV9fbGUxNiBsZW5ndGg7CisJX19sZTE2IGtleV90eXBlX2lkOworCV9fbGUxNiBrZXlfaW5mbzsKKwlfX2xlMTYga2V5X2xlbjsKKwl1OCBrZXlbNTBdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9rZXlfbWF0ZXJpYWwgeworCV9fbGUxNiBhY3Rpb247CisJc3RydWN0IG13aWZpZXhfaWVfdHlwZV9rZXlfcGFyYW1fc2V0IGtleV9wYXJhbV9zZXQ7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaG9zdF9jbWRfZHNfZ2VuIHsKKwl1MTYgY29tbWFuZDsKKwl1MTYgc2l6ZTsKKwl1MTYgc2VxX251bTsKKwl1MTYgcmVzdWx0OworfTsKKworI2RlZmluZSBTX0RTX0dFTiAgICAgICAgc2l6ZW9mKHN0cnVjdCBob3N0X2NtZF9kc19nZW4pCisKK2VudW0gc2xlZXBfcmVzcF9jdHJsIHsKKwlSRVNQX05PVF9ORUVERUQgPSAwLAorCVJFU1BfTkVFREVELAorfTsKKworc3RydWN0IG13aWZpZXhfcHNfcGFyYW0geworCV9fbGUxNiBudWxsX3BrdF9pbnRlcnZhbDsKKwlfX2xlMTYgbXVsdGlwbGVfZHRpbXM7CisJX19sZTE2IGJjbl9taXNzX3RpbWVvdXQ7CisJX19sZTE2IGxvY2FsX2xpc3Rlbl9pbnRlcnZhbDsKKwlfX2xlMTYgYWRob2Nfd2FrZV9wZXJpb2Q7CisJX19sZTE2IG1vZGU7CisJX19sZTE2IGRlbGF5X3RvX3BzOworfTsKKworI2RlZmluZSBCSVRNQVBfQVVUT19EUyAgICAgICAgIDB4MDEKKyNkZWZpbmUgQklUTUFQX1NUQV9QUyAgICAgICAgICAweDEwCisKK3N0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2F1dG9fZHNfcGFyYW0geworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlciBoZWFkZXI7CisJX19sZTE2IGRlZXBfc2xlZXBfdGltZW91dDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3BzX3BhcmFtIHsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIgaGVhZGVyOworCXN0cnVjdCBtd2lmaWV4X3BzX3BhcmFtIHBhcmFtOworfSBfX3BhY2tlZDsKKworc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9wc19tb2RlX2VuaCB7CisJX19sZTE2IGFjdGlvbjsKKworCXVuaW9uIHsKKwkJc3RydWN0IG13aWZpZXhfcHNfcGFyYW0gb3B0X3BzOworCQlfX2xlMTYgcHNfYml0bWFwOworCX0gcGFyYW1zOworfSBfX3BhY2tlZDsKKworc3RydWN0IGhvc3RfY21kX2RzX2dldF9od19zcGVjIHsKKwlfX2xlMTYgaHdfaWZfdmVyc2lvbjsKKwlfX2xlMTYgdmVyc2lvbjsKKwlfX2xlMTYgcmVzZXJ2ZWQ7CisJX19sZTE2IG51bV9vZl9tY2FzdF9hZHI7CisJdTggcGVybWFuZW50X2FkZHJbRVRIX0FMRU5dOworCV9fbGUxNiByZWdpb25fY29kZTsKKwlfX2xlMTYgbnVtYmVyX29mX2FudGVubmE7CisJX19sZTMyIGZ3X3JlbGVhc2VfbnVtYmVyOworCV9fbGUzMiByZXNlcnZlZF8xOworCV9fbGUzMiByZXNlcnZlZF8yOworCV9fbGUzMiByZXNlcnZlZF8zOworCV9fbGUzMiBmd19jYXBfaW5mbzsKKwlfX2xlMzIgZG90XzExbl9kZXZfY2FwOworCXU4IGRldl9tY3Nfc3VwcG9ydDsKKwlfX2xlMTYgbXBfZW5kX3BvcnQ7CS8qIFNESU8gb25seSwgcmVzZXJ2ZWQgZm9yIG90aGVyIGludGVyZmFjY2VzICovCisJX19sZTE2IHJlc2VydmVkXzQ7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX3Jzc2lfaW5mbyB7CisJX19sZTE2IGFjdGlvbjsKKwlfX2xlMTYgbmRhdGE7CisJX19sZTE2IG5iY247CisJX19sZTE2IHJlc2VydmVkWzldOworCWxvbmcgbG9uZyByZXNlcnZlZF8xOworfTsKKworc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9yc3NpX2luZm9fcnNwIHsKKwlfX2xlMTYgYWN0aW9uOworCV9fbGUxNiBuZGF0YTsKKwlfX2xlMTYgbmJjbjsKKwlfX2xlMTYgZGF0YV9yc3NpX2xhc3Q7CisJX19sZTE2IGRhdGFfbmZfbGFzdDsKKwlfX2xlMTYgZGF0YV9yc3NpX2F2ZzsKKwlfX2xlMTYgZGF0YV9uZl9hdmc7CisJX19sZTE2IGJjbl9yc3NpX2xhc3Q7CisJX19sZTE2IGJjbl9uZl9sYXN0OworCV9fbGUxNiBiY25fcnNzaV9hdmc7CisJX19sZTE2IGJjbl9uZl9hdmc7CisJbG9uZyBsb25nIHRzZl9iY247Cit9OworCitzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX21hY19hZGRyZXNzIHsKKwlfX2xlMTYgYWN0aW9uOworCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKK307CisKK3N0cnVjdCBob3N0X2NtZF9kc19tYWNfY29udHJvbCB7CisJX19sZTE2IGFjdGlvbjsKKwlfX2xlMTYgcmVzZXJ2ZWQ7Cit9OworCitzdHJ1Y3QgaG9zdF9jbWRfZHNfbWFjX211bHRpY2FzdF9hZHIgeworCV9fbGUxNiBhY3Rpb247CisJX19sZTE2IG51bV9vZl9hZHJzOworCXU4IG1hY19saXN0W01XSUZJRVhfTUFYX01VTFRJQ0FTVF9MSVNUX1NJWkVdW0VUSF9BTEVOXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfZGVhdXRoZW50aWNhdGUgeworCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKKwlfX2xlMTYgcmVhc29uX2NvZGU7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2Fzc29jaWF0ZSB7CisJdTggcGVlcl9zdGFfYWRkcltFVEhfQUxFTl07CisJX19sZTE2IGNhcF9pbmZvX2JpdG1hcDsKKwlfX2xlMTYgbGlzdGVuX2ludGVydmFsOworCV9fbGUxNiBiZWFjb25fcGVyaW9kOworCXU4IGR0aW1fcGVyaW9kOworfSBfX3BhY2tlZDsKKworc3RydWN0IGllZWVfdHlwZXNfYXNzb2NfcnNwIHsKKwlfX2xlMTYgY2FwX2luZm9fYml0bWFwOworCV9fbGUxNiBzdGF0dXNfY29kZTsKKwlfX2xlMTYgYV9pZDsKKwl1OCBpZV9idWZmZXJbMV07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2Fzc29jaWF0ZV9yc3AgeworCXN0cnVjdCBpZWVlX3R5cGVzX2Fzc29jX3JzcCBhc3NvY19yc3A7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaWVlZV90eXBlc19jZl9wYXJhbV9zZXQgeworCXU4IGVsZW1lbnRfaWQ7CisJdTggbGVuOworCXU4IGNmcF9jbnQ7CisJdTggY2ZwX3BlcmlvZDsKKwl1MTYgY2ZwX21heF9kdXJhdGlvbjsKKwl1MTYgY2ZwX2R1cmF0aW9uX3JlbWFpbmluZzsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBpZWVlX3R5cGVzX2lic3NfcGFyYW1fc2V0IHsKKwl1OCBlbGVtZW50X2lkOworCXU4IGxlbjsKKwlfX2xlMTYgYXRpbV93aW5kb3c7Cit9IF9fcGFja2VkOworCit1bmlvbiBpZWVlX3R5cGVzX3NzX3BhcmFtX3NldCB7CisJc3RydWN0IGllZWVfdHlwZXNfY2ZfcGFyYW1fc2V0IGNmX3BhcmFtX3NldDsKKwlzdHJ1Y3QgaWVlZV90eXBlc19pYnNzX3BhcmFtX3NldCBpYnNzX3BhcmFtX3NldDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBpZWVlX3R5cGVzX2ZoX3BhcmFtX3NldCB7CisJdTggZWxlbWVudF9pZDsKKwl1OCBsZW47CisJX19sZTE2IGR3ZWxsX3RpbWU7CisJdTggaG9wX3NldDsKKwl1OCBob3BfcGF0dGVybjsKKwl1OCBob3BfaW5kZXg7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaWVlZV90eXBlc19kc19wYXJhbV9zZXQgeworCXU4IGVsZW1lbnRfaWQ7CisJdTggbGVuOworCXU4IGN1cnJlbnRfY2hhbjsKK30gX19wYWNrZWQ7CisKK3VuaW9uIGllZWVfdHlwZXNfcGh5X3BhcmFtX3NldCB7CisJc3RydWN0IGllZWVfdHlwZXNfZmhfcGFyYW1fc2V0IGZoX3BhcmFtX3NldDsKKwlzdHJ1Y3QgaWVlZV90eXBlc19kc19wYXJhbV9zZXQgZHNfcGFyYW1fc2V0OworfSBfX3BhY2tlZDsKKworc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9hZF9ob2Nfc3RhcnQgeworCXU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07CisJdTggYnNzX21vZGU7CisJX19sZTE2IGJlYWNvbl9wZXJpb2Q7CisJdTggZHRpbV9wZXJpb2Q7CisJdW5pb24gaWVlZV90eXBlc19zc19wYXJhbV9zZXQgc3NfcGFyYW1fc2V0OworCXVuaW9uIGllZWVfdHlwZXNfcGh5X3BhcmFtX3NldCBwaHlfcGFyYW1fc2V0OworCXUxNiByZXNlcnZlZDE7CisJX19sZTE2IGNhcF9pbmZvX2JpdG1hcDsKKwl1OCBEYXRhUmF0ZVtIT1NUQ01EX1NVUFBPUlRFRF9SQVRFU107Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2FkX2hvY19yZXN1bHQgeworCXU4IHBhZFszXTsKKwl1OCBic3NpZFtFVEhfQUxFTl07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYWRob2NfYnNzX2Rlc2MgeworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwl1OCBzc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dOworCXU4IGJzc19tb2RlOworCV9fbGUxNiBiZWFjb25fcGVyaW9kOworCXU4IGR0aW1fcGVyaW9kOworCXU4IHRpbWVfc3RhbXBbOF07CisJdTggbG9jYWxfdGltZVs4XTsKKwl1bmlvbiBpZWVlX3R5cGVzX3BoeV9wYXJhbV9zZXQgcGh5X3BhcmFtX3NldDsKKwl1bmlvbiBpZWVlX3R5cGVzX3NzX3BhcmFtX3NldCBzc19wYXJhbV9zZXQ7CisJX19sZTE2IGNhcF9pbmZvX2JpdG1hcDsKKwl1OCBkYXRhX3JhdGVzW0hPU1RDTURfU1VQUE9SVEVEX1JBVEVTXTsKKworCS8qCisJICogIERPIE5PVCBBREQgQU5ZIEZJRUxEUyBUTyBUSElTIFNUUlVDVFVSRS4KKwkgKiAgSXQgaXMgdXNlZCBpbiB0aGUgQWRob2Mgam9pbiBjb21tYW5kIGFuZCB3aWxsIGNhdXNlIGEKKwkgKiAgYmluYXJ5IGxheW91dCBtaXNtYXRjaCB3aXRoIHRoZSBmaXJtd2FyZQorCSAqLworfSBfX3BhY2tlZDsKKworc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9hZF9ob2Nfam9pbiB7CisJc3RydWN0IGFkaG9jX2Jzc19kZXNjIGJzc19kZXNjcmlwdG9yOworCXUxNiByZXNlcnZlZDE7CisJdTE2IHJlc2VydmVkMjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfZ2V0X2xvZyB7CisJX19sZTMyIG1jYXN0X3R4X2ZyYW1lOworCV9fbGUzMiBmYWlsZWQ7CisJX19sZTMyIHJldHJ5OworCV9fbGUzMiBtdWx0aV9yZXRyeTsKKwlfX2xlMzIgZnJhbWVfZHVwOworCV9fbGUzMiBydHNfc3VjY2VzczsKKwlfX2xlMzIgcnRzX2ZhaWx1cmU7CisJX19sZTMyIGFja19mYWlsdXJlOworCV9fbGUzMiByeF9mcmFnOworCV9fbGUzMiBtY2FzdF9yeF9mcmFtZTsKKwlfX2xlMzIgZmNzX2Vycm9yOworCV9fbGUzMiB0eF9mcmFtZTsKKwlfX2xlMzIgcmVzZXJ2ZWQ7CisJX19sZTMyIHdlcF9pY3ZfZXJyX2NudFs0XTsKK307CisKK3N0cnVjdCBob3N0X2NtZF9kc190eF9yYXRlX3F1ZXJ5IHsKKwl1OCB0eF9yYXRlOworCS8qIEh0IEluZm8gW0JpdCAwXSBSeFJhdGUgZm9ybWF0OiBMRz0wLCBIVD0xCisJICogW0JpdCAxXSAgSFQgQmFuZHdpZHRoOiBCVzIwID0gMCwgQlc0MCA9IDEKKwkgKiBbQml0IDJdICBIVCBHdWFyZCBJbnRlcnZhbDogTEdJID0gMCwgU0dJID0gMSAqLworCXU4IGh0X2luZm87Cit9IF9fcGFja2VkOworCitlbnVtIEhvc3RfU2xlZXBfQWN0aW9uIHsKKwlIU19DT05GSUdVUkUgPSAweDAwMDEsCisJSFNfQUNUSVZBVEUgID0gMHgwMDAyLAorfTsKKworc3RydWN0IG13aWZpZXhfaHNfY29uZmlnX3BhcmFtIHsKKwlfX2xlMzIgY29uZGl0aW9uczsKKwl1OCBncGlvOworCXU4IGdhcDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBoc19hY3RpdmF0ZV9wYXJhbSB7CisJdTE2IHJlc3BfY3RybDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfaHNfY2ZnX2VuaCB7CisJX19sZTE2IGFjdGlvbjsKKworCXVuaW9uIHsKKwkJc3RydWN0IG13aWZpZXhfaHNfY29uZmlnX3BhcmFtIGhzX2NvbmZpZzsKKwkJc3RydWN0IGhzX2FjdGl2YXRlX3BhcmFtIGhzX2FjdGl2YXRlOworCX0gcGFyYW1zOworfSBfX3BhY2tlZDsKKworZW51bSBTTk1QX01JQl9JTkRFWCB7CisJT1BfUkFURV9TRVRfSSA9IDEsCisJRFRJTV9QRVJJT0RfSSA9IDMsCisJUlRTX1RIUkVTSF9JID0gNSwKKwlTSE9SVF9SRVRSWV9MSU1fSSA9IDYsCisJTE9OR19SRVRSWV9MSU1fSSA9IDcsCisJRlJBR19USFJFU0hfSSA9IDgsCisJRE9UMTFEX0kgPSA5LAorfTsKKworI2RlZmluZSBNQVhfU05NUF9CVUZfU0laRSAgIDEyOAorCitzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX3NubXBfbWliIHsKKwlfX2xlMTYgcXVlcnlfdHlwZTsKKwlfX2xlMTYgb2lkOworCV9fbGUxNiBidWZfc2l6ZTsKKwl1OCB2YWx1ZVsxXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtd2lmaWV4X3JhdGVfc2NvcGUgeworCV9fbGUxNiB0eXBlOworCV9fbGUxNiBsZW5ndGg7CisJX19sZTE2IGhyX2Rzc3NfcmF0ZV9iaXRtYXA7CisJX19sZTE2IG9mZG1fcmF0ZV9iaXRtYXA7CisJX19sZTE2IGh0X21jc19yYXRlX2JpdG1hcFs4XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtd2lmaWV4X3JhdGVfZHJvcF9wYXR0ZXJuIHsKKwlfX2xlMTYgdHlwZTsKKwlfX2xlMTYgbGVuZ3RoOworCV9fbGUzMiByYXRlX2Ryb3BfbW9kZTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBob3N0X2NtZF9kc190eF9yYXRlX2NmZyB7CisJX19sZTE2IGFjdGlvbjsKKwlfX2xlMTYgY2ZnX2luZGV4OworfSBfX3BhY2tlZDsKKworc3RydWN0IG13aWZpZXhfcG93ZXJfZ3JvdXAgeworCXU4IG1vZHVsYXRpb25fY2xhc3M7CisJdTggZmlyc3RfcmF0ZV9jb2RlOworCXU4IGxhc3RfcmF0ZV9jb2RlOworCXM4IHBvd2VyX3N0ZXA7CisJczggcG93ZXJfbWluOworCXM4IHBvd2VyX21heDsKKwl1OCBodF9iYW5kd2lkdGg7CisJdTggcmVzZXJ2ZWQ7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbXdpZmlleF90eXBlc19wb3dlcl9ncm91cCB7CisJdTE2IHR5cGU7CisJdTE2IGxlbmd0aDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBob3N0X2NtZF9kc190eHB3cl9jZmcgeworCV9fbGUxNiBhY3Rpb247CisJX19sZTE2IGNmZ19pbmRleDsKKwlfX2xlMzIgbW9kZTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgTVdJRklFWF9VU0VSX1NDQU5fQ0hBTl9NQVggICAgICAgICAgICAgNTAKKworI2RlZmluZSBNV0lGSUVYX01BWF9TU0lEX0xJU1RfTEVOR1RIICAgICAgICAgMTAKKworc3RydWN0IG13aWZpZXhfc2Nhbl9jbWRfY29uZmlnIHsKKwkvKgorCSAqICBCU1MgbW9kZSB0byBiZSBzZW50IGluIHRoZSBmaXJtd2FyZSBjb21tYW5kCisJICovCisJdTggYnNzX21vZGU7CisKKwkvKiBTcGVjaWZpYyBCU1NJRCB1c2VkIHRvIGZpbHRlciBzY2FuIHJlc3VsdHMgaW4gdGhlIGZpcm13YXJlICovCisJdTggc3BlY2lmaWNfYnNzaWRbRVRIX0FMRU5dOworCisJLyogTGVuZ3RoIG9mIFRMVnMgc2VudCBpbiBjb21tYW5kIHN0YXJ0aW5nIGF0IHRsdkJ1ZmZlciAqLworCXUzMiB0bHZfYnVmX2xlbjsKKworCS8qCisJICogIFNTSUQgVExWKHMpIGFuZCBDaGFuTGlzdCBUTFZzIHRvIGJlIHNlbnQgaW4gdGhlIGZpcm13YXJlIGNvbW1hbmQKKwkgKgorCSAqICBUTFZfVFlQRV9DSEFOTElTVCwgbXdpZmlleF9pZV90eXBlc19jaGFuX2xpc3RfcGFyYW1fc2V0CisJICogIFdMQU5fRUlEX1NTSUQsIG13aWZpZXhfaWVfdHlwZXNfc3NpZF9wYXJhbV9zZXQKKwkgKi8KKwl1OCB0bHZfYnVmWzFdOwkvKiBTU0lEIFRMVihzKSBhbmQgQ2hhbkxpc3QgVExWcyBhcmUgc3RvcmVkCisJCQkJICAgaGVyZSAqLworfSBfX3BhY2tlZDsKKworc3RydWN0IG13aWZpZXhfdXNlcl9zY2FuX2NoYW4geworCXU4IGNoYW5fbnVtYmVyOworCXU4IHJhZGlvX3R5cGU7CisJdTggc2Nhbl90eXBlOworCXU4IHJlc2VydmVkOworCXUzMiBzY2FuX3RpbWU7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbXdpZmlleF91c2VyX3NjYW5fc3NpZCB7CisJdTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOICsgMV07CisJdTggbWF4X2xlbjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtd2lmaWV4X3VzZXJfc2Nhbl9jZmcgeworCS8qCisJICogIEZsYWcgc2V0IHRvIGtlZXAgdGhlIHByZXZpb3VzIHNjYW4gdGFibGUgaW50YWN0CisJICoKKwkgKiAgSWYgc2V0LCB0aGUgc2NhbiByZXN1bHRzIHdpbGwgYWNjdW11bGF0ZSwgcmVwbGFjaW5nIGFueSBwcmV2aW91cworCSAqICAgbWF0Y2hlZCBlbnRyaWVzIGZvciBhIEJTUyB3aXRoIHRoZSBuZXcgc2NhbiBkYXRhCisJICovCisJdTgga2VlcF9wcmV2aW91c19zY2FuOworCS8qCisJICogIEJTUyBtb2RlIHRvIGJlIHNlbnQgaW4gdGhlIGZpcm13YXJlIGNvbW1hbmQKKwkgKi8KKwl1OCBic3NfbW9kZTsKKwkvKiBDb25maWd1cmUgdGhlIG51bWJlciBvZiBwcm9iZSByZXF1ZXN0cyBmb3IgYWN0aXZlIGNoYW4gc2NhbnMgKi8KKwl1OCBudW1fcHJvYmVzOworCXU4IHJlc2VydmVkOworCS8qIEJTU0lEIGZpbHRlciBzZW50IGluIHRoZSBmaXJtd2FyZSBjb21tYW5kIHRvIGxpbWl0IHRoZSByZXN1bHRzICovCisJdTggc3BlY2lmaWNfYnNzaWRbRVRIX0FMRU5dOworCS8qIFNTSUQgZmlsdGVyIGxpc3QgdXNlZCBpbiB0aGUgdG8gbGltaXQgdGhlIHNjYW4gcmVzdWx0cyAqLworCXN0cnVjdCBtd2lmaWV4X3VzZXJfc2Nhbl9zc2lkIHNzaWRfbGlzdFtNV0lGSUVYX01BWF9TU0lEX0xJU1RfTEVOR1RIXTsKKwkvKiBWYXJpYWJsZSBudW1iZXIgKGZpeGVkIG1heGltdW0pIG9mIGNoYW5uZWxzIHRvIHNjYW4gdXAgKi8KKwlzdHJ1Y3QgbXdpZmlleF91c2VyX3NjYW5fY2hhbiBjaGFuX2xpc3RbTVdJRklFWF9VU0VSX1NDQU5fQ0hBTl9NQVhdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGllX2JvZHkgeworCXU4IGdycF9rZXlfb3VpWzRdOworCXU4IHB0a19jbnRbMl07CisJdTggcHRrX2JvZHlbNF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX3NjYW4geworCXU4IGJzc19tb2RlOworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwl1OCB0bHZfYnVmZmVyWzFdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9zY2FuX3JzcCB7CisJX19sZTE2IGJzc19kZXNjcmlwdF9zaXplOworCXU4IG51bWJlcl9vZl9zZXRzOworCXU4IGJzc19kZXNjX2FuZF90bHZfYnVmZmVyWzFdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9iZ19zY2FuX3F1ZXJ5IHsKKwl1OCBmbHVzaDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfYmdfc2Nhbl9xdWVyeV9yc3AgeworCXUzMiByZXBvcnRfY29uZGl0aW9uOworCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfc2Nhbl9yc3Agc2Nhbl9yZXNwOworfSBfX3BhY2tlZDsKKworc3RydWN0IG13aWZpZXhfaWV0eXBlc19kb21haW5fcGFyYW1fc2V0IHsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIgaGVhZGVyOworCXU4IGNvdW50cnlfY29kZVtJRUVFODAyMTFfQ09VTlRSWV9TVFJJTkdfTEVOXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NvdW50cnlfaWVfdHJpcGxldCB0cmlwbGV0WzFdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMWRfZG9tYWluX2luZm8geworCV9fbGUxNiBhY3Rpb247CisJc3RydWN0IG13aWZpZXhfaWV0eXBlc19kb21haW5fcGFyYW1fc2V0IGRvbWFpbjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBob3N0X2NtZF9kc184MDJfMTFkX2RvbWFpbl9pbmZvX3JzcCB7CisJX19sZTE2IGFjdGlvbjsKKwlzdHJ1Y3QgbXdpZmlleF9pZXR5cGVzX2RvbWFpbl9wYXJhbV9zZXQgZG9tYWluOworfSBfX3BhY2tlZDsKKworc3RydWN0IGhvc3RfY21kX2RzXzExbl9hZGRiYV9yZXEgeworCXU4IGFkZF9yZXFfcmVzdWx0OworCXU4IHBlZXJfbWFjX2FkZHJbRVRIX0FMRU5dOworCXU4IGRpYWxvZ190b2tlbjsKKwlfX2xlMTYgYmxvY2tfYWNrX3BhcmFtX3NldDsKKwlfX2xlMTYgYmxvY2tfYWNrX3RtbzsKKwlfX2xlMTYgc3NuOworfSBfX3BhY2tlZDsKKworc3RydWN0IGhvc3RfY21kX2RzXzExbl9hZGRiYV9yc3AgeworCXU4IGFkZF9yc3BfcmVzdWx0OworCXU4IHBlZXJfbWFjX2FkZHJbRVRIX0FMRU5dOworCXU4IGRpYWxvZ190b2tlbjsKKwlfX2xlMTYgc3RhdHVzX2NvZGU7CisJX19sZTE2IGJsb2NrX2Fja19wYXJhbV9zZXQ7CisJX19sZTE2IGJsb2NrX2Fja190bW87CisJX19sZTE2IHNzbjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBob3N0X2NtZF9kc18xMW5fZGVsYmEgeworCXU4IGRlbF9yZXN1bHQ7CisJdTggcGVlcl9tYWNfYWRkcltFVEhfQUxFTl07CisJX19sZTE2IGRlbF9iYV9wYXJhbV9zZXQ7CisJX19sZTE2IHJlYXNvbl9jb2RlOworCXU4IHJlc2VydmVkOworfSBfX3BhY2tlZDsKKworc3RydWN0IGhvc3RfY21kX2RzXzExbl9iYXRpbWVvdXQgeworCXU4IHRpZDsKKwl1OCBwZWVyX21hY19hZGRyW0VUSF9BTEVOXTsKKwl1OCBvcmlnbmluYXRvcjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBob3N0X2NtZF9kc18xMW5fY2ZnIHsKKwlfX2xlMTYgYWN0aW9uOworCV9fbGUxNiBodF90eF9jYXA7CisJX19sZTE2IGh0X3R4X2luZm87Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaG9zdF9jbWRfZHNfdHhidWZfY2ZnIHsKKwlfX2xlMTYgYWN0aW9uOworCV9fbGUxNiBidWZmX3NpemU7CisJX19sZTE2IG1wX2VuZF9wb3J0OwkvKiBTRElPIG9ubHksIHJlc2VydmVkIGZvciBvdGhlciBpbnRlcmZhY2NlcyAqLworCV9fbGUxNiByZXNlcnZlZDM7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaG9zdF9jbWRfZHNfYW1zZHVfYWdncl9jdHJsIHsKKwlfX2xlMTYgYWN0aW9uOworCV9fbGUxNiBlbmFibGU7CisJX19sZTE2IGN1cnJfYnVmX3NpemU7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc193bW1fcGFyYW1fc2V0IHsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIgaGVhZGVyOworCXU4IHdtbV9pZVsxXTsKK307CisKK3N0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3dtbV9xdWV1ZV9zdGF0dXMgeworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlciBoZWFkZXI7CisJdTggcXVldWVfaW5kZXg7CisJdTggZGlzYWJsZWQ7CisJdTE2IG1lZGl1bV90aW1lOworCXU4IGZsb3dfcmVxdWlyZWQ7CisJdTggZmxvd19jcmVhdGVkOworCXUzMiByZXNlcnZlZDsKK307CisKK3N0cnVjdCBpZWVlX3R5cGVzX3ZlbmRvcl9oZWFkZXIgeworCXU4IGVsZW1lbnRfaWQ7CisJdTggbGVuOworCXU4IG91aVszXTsKKwl1OCBvdWlfdHlwZTsKKwl1OCBvdWlfc3VidHlwZTsKKwl1OCB2ZXJzaW9uOworfSBfX3BhY2tlZDsKKworc3RydWN0IGllZWVfdHlwZXNfd21tX2FjX3BhcmFtZXRlcnMgeworCXU4IGFjaV9haWZzbl9iaXRtYXA7CisJdTggZWN3X2JpdG1hcDsKKwlfX2xlMTYgdHhfb3BfbGltaXQ7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaWVlZV90eXBlc193bW1fcGFyYW1ldGVyIHsKKwkvKgorCSAqIFdNTSBQYXJhbWV0ZXIgSUUgLSBWZW5kb3IgU3BlY2lmaWMgSGVhZGVyOgorCSAqICAgZWxlbWVudF9pZCAgWzIyMS8weGRkXQorCSAqICAgTGVuICAgICAgICAgWzI0XQorCSAqICAgT3VpICAgICAgICAgWzAwOjUwOmYyXQorCSAqICAgT3VpVHlwZSAgICAgWzJdCisJICogICBPdWlTdWJUeXBlICBbMV0KKwkgKiAgIFZlcnNpb24gICAgIFsxXQorCSAqLworCXN0cnVjdCBpZWVlX3R5cGVzX3ZlbmRvcl9oZWFkZXIgdmVuZF9oZHI7CisJdTggcW9zX2luZm9fYml0bWFwOworCXU4IHJlc2VydmVkOworCXN0cnVjdCBpZWVlX3R5cGVzX3dtbV9hY19wYXJhbWV0ZXJzIGFjX3BhcmFtc1tJRUVFODAyMTFfTUFYX1FVRVVFU107Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaWVlZV90eXBlc193bW1faW5mbyB7CisKKwkvKgorCSAqIFdNTSBJbmZvIElFIC0gVmVuZG9yIFNwZWNpZmljIEhlYWRlcjoKKwkgKiAgIGVsZW1lbnRfaWQgIFsyMjEvMHhkZF0KKwkgKiAgIExlbiAgICAgICAgIFs3XQorCSAqICAgT3VpICAgICAgICAgWzAwOjUwOmYyXQorCSAqICAgT3VpVHlwZSAgICAgWzJdCisJICogICBPdWlTdWJUeXBlICBbMF0KKwkgKiAgIFZlcnNpb24gICAgIFsxXQorCSAqLworCXN0cnVjdCBpZWVlX3R5cGVzX3ZlbmRvcl9oZWFkZXIgdmVuZF9oZHI7CisKKwl1OCBxb3NfaW5mb19iaXRtYXA7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaG9zdF9jbWRfZHNfd21tX2dldF9zdGF0dXMgeworCXU4IHF1ZXVlX3N0YXR1c190bHZbc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3dtbV9xdWV1ZV9zdGF0dXMpICoKKwkJCSAgICAgIElFRUU4MDIxMV9NQVhfUVVFVUVTXTsKKwl1OCB3bW1fcGFyYW1fdGx2W3NpemVvZihzdHJ1Y3QgaWVlZV90eXBlc193bW1fcGFyYW1ldGVyKSArIDJdOworfSBfX3BhY2tlZDsKKworc3RydWN0IG13aWZpZXhfd21tX2FjX3N0YXR1cyB7CisJdTggZGlzYWJsZWQ7CisJdTggZmxvd19yZXF1aXJlZDsKKwl1OCBmbG93X2NyZWF0ZWQ7Cit9OworCitzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGNhcCB7CisJc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyIGhlYWRlcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCBodF9jYXA7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGluZm8geworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlciBoZWFkZXI7CisJc3RydWN0IGllZWU4MDIxMV9odF9pbmZvIGh0X2luZm87Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc18yMDQwYnNzY28geworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlciBoZWFkZXI7CisJdTggYnNzX2NvXzIwNDA7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19leHRjYXAgeworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlciBoZWFkZXI7CisJdTggZXh0X2NhcDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBob3N0X2NtZF9kc19tYWNfcmVnX2FjY2VzcyB7CisJX19sZTE2IGFjdGlvbjsKKwlfX2xlMTYgb2Zmc2V0OworCV9fbGUzMiB2YWx1ZTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBob3N0X2NtZF9kc19iYnBfcmVnX2FjY2VzcyB7CisJX19sZTE2IGFjdGlvbjsKKwlfX2xlMTYgb2Zmc2V0OworCXU4IHZhbHVlOworCXU4IHJlc2VydmVkWzNdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGhvc3RfY21kX2RzX3JmX3JlZ19hY2Nlc3MgeworCV9fbGUxNiBhY3Rpb247CisJX19sZTE2IG9mZnNldDsKKwl1OCB2YWx1ZTsKKwl1OCByZXNlcnZlZFszXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBob3N0X2NtZF9kc19wbWljX3JlZ19hY2Nlc3MgeworCV9fbGUxNiBhY3Rpb247CisJX19sZTE2IG9mZnNldDsKKwl1OCB2YWx1ZTsKKwl1OCByZXNlcnZlZFszXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfZWVwcm9tX2FjY2VzcyB7CisJX19sZTE2IGFjdGlvbjsKKworCV9fbGUxNiBvZmZzZXQ7CisJX19sZTE2IGJ5dGVfY291bnQ7CisJdTggdmFsdWU7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX3JmX2NoYW5uZWwgeworCV9fbGUxNiBhY3Rpb247CisJX19sZTE2IGN1cnJlbnRfY2hhbm5lbDsKKwlfX2xlMTYgcmZfdHlwZTsKKwlfX2xlMTYgcmVzZXJ2ZWQ7CisJdTggcmVzZXJ2ZWRfMVszMl07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaG9zdF9jbWRfZHNfdmVyc2lvbl9leHQgeworCXU4IHZlcnNpb25fc3RyX3NlbDsKKwljaGFyIHZlcnNpb25fc3RyWzEyOF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2lic3Nfc3RhdHVzIHsKKwlfX2xlMTYgYWN0aW9uOworCV9fbGUxNiBlbmFibGU7CisJdTggYnNzaWRbRVRIX0FMRU5dOworCV9fbGUxNiBiZWFjb25faW50ZXJ2YWw7CisJX19sZTE2IGF0aW1fd2luZG93OworCV9fbGUxNiB1c2VfZ19yYXRlX3Byb3RlY3Q7Cit9IF9fcGFja2VkOworCisjZGVmaW5lIENPTk5FQ1RJT05fVFlQRV9JTkZSQSAgIDAKKyNkZWZpbmUgQ09OTkVDVElPTl9UWVBFX0FESE9DICAgMQorCitzdHJ1Y3QgaG9zdF9jbWRfZHNfc2V0X2Jzc19tb2RlIHsKKwl1OCBjb25fdHlwZTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kIHsKKwlfX2xlMTYgY29tbWFuZDsKKwlfX2xlMTYgc2l6ZTsKKwlfX2xlMTYgc2VxX251bTsKKwlfX2xlMTYgcmVzdWx0OworCXVuaW9uIHsKKwkJc3RydWN0IGhvc3RfY21kX2RzX2dldF9od19zcGVjIGh3X3NwZWM7CisJCXN0cnVjdCBob3N0X2NtZF9kc19tYWNfY29udHJvbCBtYWNfY3RybDsKKwkJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9tYWNfYWRkcmVzcyBtYWNfYWRkcjsKKwkJc3RydWN0IGhvc3RfY21kX2RzX21hY19tdWx0aWNhc3RfYWRyIG1jX2FkZHI7CisJCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfZ2V0X2xvZyBnZXRfbG9nOworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX3Jzc2lfaW5mbyByc3NpX2luZm87CisJCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfcnNzaV9pbmZvX3JzcCByc3NpX2luZm9fcnNwOworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX3NubXBfbWliIHNtaWI7CisJCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfcmZfY2hhbm5lbCByZl9jaGFubmVsOworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfdHhfcmF0ZV9xdWVyeSB0eF9yYXRlOworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfdHhfcmF0ZV9jZmcgdHhfcmF0ZV9jZmc7CisJCXN0cnVjdCBob3N0X2NtZF9kc190eHB3cl9jZmcgdHhwX2NmZzsKKwkJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9wc19tb2RlX2VuaCBwc21vZGVfZW5oOworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2hzX2NmZ19lbmggb3B0X2hzX2NmZzsKKwkJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9zY2FuIHNjYW47CisJCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfc2Nhbl9yc3Agc2Nhbl9yZXNwOworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2JnX3NjYW5fcXVlcnkgYmdfc2Nhbl9xdWVyeTsKKwkJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9iZ19zY2FuX3F1ZXJ5X3JzcCBiZ19zY2FuX3F1ZXJ5X3Jlc3A7CisJCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfYXNzb2NpYXRlIGFzc29jaWF0ZTsKKwkJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9hc3NvY2lhdGVfcnNwIGFzc29jaWF0ZV9yc3A7CisJCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfZGVhdXRoZW50aWNhdGUgZGVhdXRoOworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2FkX2hvY19zdGFydCBhZGhvY19zdGFydDsKKwkJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9hZF9ob2NfcmVzdWx0IGFkaG9jX3Jlc3VsdDsKKwkJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9hZF9ob2Nfam9pbiBhZGhvY19qb2luOworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExZF9kb21haW5faW5mbyBkb21haW5faW5mbzsKKwkJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMWRfZG9tYWluX2luZm9fcnNwIGRvbWFpbl9pbmZvX3Jlc3A7CisJCXN0cnVjdCBob3N0X2NtZF9kc18xMW5fYWRkYmFfcmVxIGFkZF9iYV9yZXE7CisJCXN0cnVjdCBob3N0X2NtZF9kc18xMW5fYWRkYmFfcnNwIGFkZF9iYV9yc3A7CisJCXN0cnVjdCBob3N0X2NtZF9kc18xMW5fZGVsYmEgZGVsX2JhOworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfdHhidWZfY2ZnIHR4X2J1ZjsKKwkJc3RydWN0IGhvc3RfY21kX2RzX2Ftc2R1X2FnZ3JfY3RybCBhbXNkdV9hZ2dyX2N0cmw7CisJCXN0cnVjdCBob3N0X2NtZF9kc18xMW5fY2ZnIGh0Y2ZnOworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfd21tX2dldF9zdGF0dXMgZ2V0X3dtbV9zdGF0dXM7CisJCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfa2V5X21hdGVyaWFsIGtleV9tYXRlcmlhbDsKKwkJc3RydWN0IGhvc3RfY21kX2RzX3ZlcnNpb25fZXh0IHZlcmV4dDsKKwkJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9pYnNzX3N0YXR1cyBpYnNzX2NvYWxlc2Npbmc7CisJCXN0cnVjdCBob3N0X2NtZF9kc19tYWNfcmVnX2FjY2VzcyBtYWNfcmVnOworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfYmJwX3JlZ19hY2Nlc3MgYmJwX3JlZzsKKwkJc3RydWN0IGhvc3RfY21kX2RzX3JmX3JlZ19hY2Nlc3MgcmZfcmVnOworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfcG1pY19yZWdfYWNjZXNzIHBtaWNfcmVnOworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfc2V0X2Jzc19tb2RlIGJzc19tb2RlOworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2VlcHJvbV9hY2Nlc3MgZWVwcm9tOworCX0gcGFyYW1zOworfSBfX3BhY2tlZDsKKworc3RydWN0IG13aWZpZXhfb3B0X3NsZWVwX2NvbmZpcm0geworCV9fbGUxNiBjb21tYW5kOworCV9fbGUxNiBzaXplOworCV9fbGUxNiBzZXFfbnVtOworCV9fbGUxNiByZXN1bHQ7CisJX19sZTE2IGFjdGlvbjsKKwlfX2xlMTYgcmVzcF9jdHJsOworfSBfX3BhY2tlZDsKKyNlbmRpZiAvKiAhX01XSUZJRVhfRldfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvaW5pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YxNTU5ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvaW5pdC5jCkBAIC0wLDAgKzEsNjQ1IEBACisvKgorICogTWFydmVsbCBXaXJlbGVzcyBMQU4gZGV2aWNlIGRyaXZlcjogSFcvRlcgSW5pdGlhbGl6YXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBmaWxlICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwKKyAqIEx0ZC4gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIEp1bmUgMTk5MQorICogKHRoZSAiTGljZW5zZSIpLiAgWW91IG1heSB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSBpbgorICogYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdoaWNoCisgKiBpcyBhdmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQSBvciBvbiB0aGUKKyAqIHdvcmxkd2lkZSB3ZWIgYXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dC4KKyAqCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1JUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgQU5EIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0CisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIuCisgKi8KKworI2luY2x1ZGUgImRlY2wuaCIKKyNpbmNsdWRlICJpb2N0bC5oIgorI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJmdy5oIgorI2luY2x1ZGUgIm1haW4uaCIKKyNpbmNsdWRlICJ3bW0uaCIKKyNpbmNsdWRlICIxMW4uaCIKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gYWRkcyBhIEJTUyBwcmlvcml0eSB0YWJsZSB0byB0aGUgdGFibGUgbGlzdC4KKyAqCisgKiBUaGUgZnVuY3Rpb24gYWxsb2NhdGVzIGEgbmV3IEJTUyBwcmlvcml0eSB0YWJsZSBub2RlIGFuZCBhZGRzIGl0IHRvCisgKiB0aGUgZW5kIG9mIEJTUyBwcmlvcml0eSB0YWJsZSBsaXN0LCBrZXB0IGluIGRyaXZlciBtZW1vcnkuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9hZGRfYnNzX3ByaW9fdGJsKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpCit7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IG13aWZpZXhfYnNzX3ByaW9fbm9kZSAqYnNzX3ByaW87CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWJzc19wcmlvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG13aWZpZXhfYnNzX3ByaW9fbm9kZSksIEdGUF9LRVJORUwpOworCWlmICghYnNzX3ByaW8pIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICIlczogZmFpbGVkIHRvIGFsbG9jIGJzc19wcmlvXG4iLAorCQkJCQkJX19mdW5jX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlic3NfcHJpby0+cHJpdiA9IHByaXY7CisJSU5JVF9MSVNUX0hFQUQoJmJzc19wcmlvLT5saXN0KTsKKwlpZiAoIWFkYXB0ZXItPmJzc19wcmlvX3RibFtwcml2LT5ic3NfcHJpb3JpdHldLmJzc19wcmlvX2N1cikKKwkJYWRhcHRlci0+YnNzX3ByaW9fdGJsW3ByaXYtPmJzc19wcmlvcml0eV0uYnNzX3ByaW9fY3VyID0KKwkJCWJzc19wcmlvOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmJzc19wcmlvX3RibFtwcml2LT5ic3NfcHJpb3JpdHldCisJCQkuYnNzX3ByaW9fbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJmJzc19wcmlvLT5saXN0LAorCQkJJmFkYXB0ZXItPmJzc19wcmlvX3RibFtwcml2LT5ic3NfcHJpb3JpdHldCisJCQkuYnNzX3ByaW9faGVhZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+YnNzX3ByaW9fdGJsW3ByaXYtPmJzc19wcmlvcml0eV0KKwkJCS5ic3NfcHJpb19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHByaXZhdGUgc3RydWN0dXJlIGFuZCBzZXRzIGRlZmF1bHQKKyAqIHZhbHVlcyB0byB0aGUgbWVtYmVycy4KKyAqCisgKiBBZGRpdGlvbmFsbHksIGl0IGFsc28gaW5pdGlhbGl6ZXMgYWxsIHRoZSBsb2NrcyBhbmQgc2V0cyB1cCBhbGwgdGhlCisgKiBsaXN0cy4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X2luaXRfcHJpdihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KQoreworCXUzMiBpOworCisJcHJpdi0+bWVkaWFfY29ubmVjdGVkID0gZmFsc2U7CisJbWVtc2V0KHByaXYtPmN1cnJfYWRkciwgMHhmZiwgRVRIX0FMRU4pOworCisJcHJpdi0+cGt0X3R4X2N0cmwgPSAwOworCXByaXYtPmJzc19tb2RlID0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTjsKKwlwcml2LT5kYXRhX3JhdGUgPSAwOwkvKiBJbml0aWFsbHkgaW5kaWNhdGUgdGhlIHJhdGUgYXMgYXV0byAqLworCXByaXYtPmlzX2RhdGFfcmF0ZV9hdXRvID0gdHJ1ZTsKKwlwcml2LT5iY25fYXZnX2ZhY3RvciA9IERFRkFVTFRfQkNOX0FWR19GQUNUT1I7CisJcHJpdi0+ZGF0YV9hdmdfZmFjdG9yID0gREVGQVVMVF9EQVRBX0FWR19GQUNUT1I7CisKKwlwcml2LT5zZWNfaW5mby53ZXBfc3RhdHVzID0gTVdJRklFWF84MDJfMTFfV0VQX0RJU0FCTEVEOworCXByaXYtPnNlY19pbmZvLmF1dGhlbnRpY2F0aW9uX21vZGUgPSBOTDgwMjExX0FVVEhUWVBFX09QRU5fU1lTVEVNOworCXByaXYtPnNlY19pbmZvLmVuY3J5cHRpb25fbW9kZSA9IDA7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJpdi0+d2VwX2tleSk7IGkrKykKKwkJbWVtc2V0KCZwcml2LT53ZXBfa2V5W2ldLCAwLCBzaXplb2Yoc3RydWN0IG13aWZpZXhfd2VwX2tleSkpOworCXByaXYtPndlcF9rZXlfY3Vycl9pbmRleCA9IDA7CisJcHJpdi0+Y3Vycl9wa3RfZmlsdGVyID0gSG9zdENtZF9BQ1RfTUFDX1JYX09OIHwgSG9zdENtZF9BQ1RfTUFDX1RYX09OIHwKKwkJCQlIb3N0Q21kX0FDVF9NQUNfRVRIRVJORVRJSV9FTkFCTEU7CisKKwlwcml2LT5iZWFjb25fcGVyaW9kID0gMTAwOyAvKiBiZWFjb24gaW50ZXJ2YWwgKi8gOworCXByaXYtPmF0dGVtcHRlZF9ic3NfZGVzYyA9IE5VTEw7CisJbWVtc2V0KCZwcml2LT5jdXJyX2Jzc19wYXJhbXMsIDAsIHNpemVvZihwcml2LT5jdXJyX2Jzc19wYXJhbXMpKTsKKwlwcml2LT5saXN0ZW5faW50ZXJ2YWwgPSBNV0lGSUVYX0RFRkFVTFRfTElTVEVOX0lOVEVSVkFMOworCisJbWVtc2V0KCZwcml2LT5wcmV2X3NzaWQsIDAsIHNpemVvZihwcml2LT5wcmV2X3NzaWQpKTsKKwltZW1zZXQoJnByaXYtPnByZXZfYnNzaWQsIDAsIHNpemVvZihwcml2LT5wcmV2X2Jzc2lkKSk7CisJbWVtc2V0KCZwcml2LT5hc3NvY19yc3BfYnVmLCAwLCBzaXplb2YocHJpdi0+YXNzb2NfcnNwX2J1ZikpOworCXByaXYtPmFzc29jX3JzcF9zaXplID0gMDsKKwlwcml2LT5hZGhvY19jaGFubmVsID0gREVGQVVMVF9BRF9IT0NfQ0hBTk5FTDsKKwlwcml2LT5hdGltX3dpbmRvdyA9IDA7CisJcHJpdi0+YWRob2Nfc3RhdGUgPSBBREhPQ19JRExFOworCXByaXYtPnR4X3Bvd2VyX2xldmVsID0gMDsKKwlwcml2LT5tYXhfdHhfcG93ZXJfbGV2ZWwgPSAwOworCXByaXYtPm1pbl90eF9wb3dlcl9sZXZlbCA9IDA7CisJcHJpdi0+dHhfcmF0ZSA9IDA7CisJcHJpdi0+cnhwZF9odGluZm8gPSAwOworCXByaXYtPnJ4cGRfcmF0ZSA9IDA7CisJcHJpdi0+cmF0ZV9iaXRtYXAgPSAwOworCXByaXYtPmRhdGFfcnNzaV9sYXN0ID0gMDsKKwlwcml2LT5kYXRhX3Jzc2lfYXZnID0gMDsKKwlwcml2LT5kYXRhX25mX2F2ZyA9IDA7CisJcHJpdi0+ZGF0YV9uZl9sYXN0ID0gMDsKKwlwcml2LT5iY25fcnNzaV9sYXN0ID0gMDsKKwlwcml2LT5iY25fcnNzaV9hdmcgPSAwOworCXByaXYtPmJjbl9uZl9hdmcgPSAwOworCXByaXYtPmJjbl9uZl9sYXN0ID0gMDsKKwltZW1zZXQoJnByaXYtPndwYV9pZSwgMCwgc2l6ZW9mKHByaXYtPndwYV9pZSkpOworCW1lbXNldCgmcHJpdi0+YWVzX2tleSwgMCwgc2l6ZW9mKHByaXYtPmFlc19rZXkpKTsKKwlwcml2LT53cGFfaWVfbGVuID0gMDsKKwlwcml2LT53cGFfaXNfZ3RrX3NldCA9IGZhbHNlOworCisJbWVtc2V0KCZwcml2LT5hc3NvY190bHZfYnVmLCAwLCBzaXplb2YocHJpdi0+YXNzb2NfdGx2X2J1ZikpOworCXByaXYtPmFzc29jX3Rsdl9idWZfbGVuID0gMDsKKwltZW1zZXQoJnByaXYtPndwcywgMCwgc2l6ZW9mKHByaXYtPndwcykpOworCW1lbXNldCgmcHJpdi0+Z2VuX2llX2J1ZiwgMCwgc2l6ZW9mKHByaXYtPmdlbl9pZV9idWYpKTsKKwlwcml2LT5nZW5faWVfYnVmX2xlbiA9IDA7CisJbWVtc2V0KHByaXYtPnZzX2llLCAwLCBzaXplb2YocHJpdi0+dnNfaWUpKTsKKworCXByaXYtPndtbV9yZXF1aXJlZCA9IHRydWU7CisJcHJpdi0+d21tX2VuYWJsZWQgPSBmYWxzZTsKKwlwcml2LT53bW1fcW9zaW5mbyA9IDA7CisJcHJpdi0+Y3Vycl9iY25fYnVmID0gTlVMTDsKKwlwcml2LT5jdXJyX2Jjbl9zaXplID0gMDsKKworCXByaXYtPnNjYW5fYmxvY2sgPSBmYWxzZTsKKworCXJldHVybiBtd2lmaWV4X2FkZF9ic3NfcHJpb190YmwocHJpdik7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBidWZmZXJzIGZvciBtZW1iZXJzIG9mIHRoZSBhZGFwdGVyCisgKiBzdHJ1Y3R1cmUuCisgKgorICogVGhlIG1lbW9yeSBhbGxvY2F0ZWQgaW5jbHVkZXMgc2NhbiB0YWJsZSwgY29tbWFuZCBidWZmZXJzLCBhbmQKKyAqIHNsZWVwIGNvbmZpcm0gY29tbWFuZCBidWZmZXIuIEluIGFkZGl0aW9uLCB0aGUgcXVldWVzIGFyZQorICogYWxzbyBpbml0aWFsaXplZC4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X2FsbG9jYXRlX2FkYXB0ZXIoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgcmV0OworCXUzMiBidWZfc2l6ZTsKKwlzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICp0ZW1wX3NjYW5fdGFibGU7CisKKwkvKiBBbGxvY2F0ZSBidWZmZXIgdG8gc3RvcmUgdGhlIEJTU0lEIGxpc3QgKi8KKwlidWZfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yKSAqIElXX01BWF9BUDsKKwl0ZW1wX3NjYW5fdGFibGUgPSBremFsbG9jKGJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRlbXBfc2Nhbl90YWJsZSkgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIiVzOiBmYWlsZWQgdG8gYWxsb2MgdGVtcF9zY2FuX3RhYmxlXG4iLAorCQkgICAgICAgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlhZGFwdGVyLT5zY2FuX3RhYmxlID0gdGVtcF9zY2FuX3RhYmxlOworCisJLyogQWxsb2NhdGUgY29tbWFuZCBidWZmZXIgKi8KKwlyZXQgPSBtd2lmaWV4X2FsbG9jX2NtZF9idWZmZXIoYWRhcHRlcik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIiVzOiBmYWlsZWQgdG8gYWxsb2MgY21kIGJ1ZmZlclxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWFkYXB0ZXItPnNsZWVwX2NmbSA9CisJCWRldl9hbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X29wdF9zbGVlcF9jb25maXJtKQorCQkJCSsgSU5URl9IRUFERVJfTEVOKTsKKworCWlmICghYWRhcHRlci0+c2xlZXBfY2ZtKSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiJXM6IGZhaWxlZCB0byBhbGxvYyBzbGVlcCBjZm0iCisJCQkiIGNtZCBidWZmZXJcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC0xOworCX0KKwlza2JfcmVzZXJ2ZShhZGFwdGVyLT5zbGVlcF9jZm0sIElOVEZfSEVBREVSX0xFTik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGFkYXB0ZXIgc3RydWN0dXJlIGFuZCBzZXRzIGRlZmF1bHQKKyAqIHZhbHVlcyB0byB0aGUgbWVtYmVycyBvZiBhZGFwdGVyLgorICoKKyAqIFRoaXMgYWxzbyBpbml0aWFsaXplcyB0aGUgV01NIHJlbGF0ZWQgcGFyYW1ldGVycyBpbiB0aGUgZHJpdmVyIHByaXZhdGUKKyAqIHN0cnVjdHVyZXMuCisgKi8KK3N0YXRpYyB2b2lkIG13aWZpZXhfaW5pdF9hZGFwdGVyKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IG13aWZpZXhfb3B0X3NsZWVwX2NvbmZpcm0gKnNsZWVwX2NmbV9idWYgPSBOVUxMOworCisJc2tiX3B1dChhZGFwdGVyLT5zbGVlcF9jZm0sIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9vcHRfc2xlZXBfY29uZmlybSkpOworCXNsZWVwX2NmbV9idWYgPSAoc3RydWN0IG13aWZpZXhfb3B0X3NsZWVwX2NvbmZpcm0gKikKKwkJCQkJCShhZGFwdGVyLT5zbGVlcF9jZm0tPmRhdGEpOworCisJYWRhcHRlci0+Y21kX3NlbnQgPSBmYWxzZTsKKwlhZGFwdGVyLT5kYXRhX3NlbnQgPSB0cnVlOworCWFkYXB0ZXItPmNtZF9yZXNwX3JlY2VpdmVkID0gZmFsc2U7CisJYWRhcHRlci0+ZXZlbnRfcmVjZWl2ZWQgPSBmYWxzZTsKKwlhZGFwdGVyLT5kYXRhX3JlY2VpdmVkID0gZmFsc2U7CisKKwlhZGFwdGVyLT5zdXJwcmlzZV9yZW1vdmVkID0gZmFsc2U7CisKKwlhZGFwdGVyLT5od19zdGF0dXMgPSBNV0lGSUVYX0hXX1NUQVRVU19JTklUSUFMSVpJTkc7CisKKwlhZGFwdGVyLT5wc19tb2RlID0gTVdJRklFWF84MDJfMTFfUE9XRVJfTU9ERV9DQU07CisJYWRhcHRlci0+cHNfc3RhdGUgPSBQU19TVEFURV9BV0FLRTsKKwlhZGFwdGVyLT5uZWVkX3RvX3dha2V1cCA9IGZhbHNlOworCisJYWRhcHRlci0+c2Nhbl9tb2RlID0gSG9zdENtZF9CU1NfTU9ERV9BTlk7CisJYWRhcHRlci0+c3BlY2lmaWNfc2Nhbl90aW1lID0gTVdJRklFWF9TUEVDSUZJQ19TQ0FOX0NIQU5fVElNRTsKKwlhZGFwdGVyLT5hY3RpdmVfc2Nhbl90aW1lID0gTVdJRklFWF9BQ1RJVkVfU0NBTl9DSEFOX1RJTUU7CisJYWRhcHRlci0+cGFzc2l2ZV9zY2FuX3RpbWUgPSBNV0lGSUVYX1BBU1NJVkVfU0NBTl9DSEFOX1RJTUU7CisKKwlhZGFwdGVyLT5udW1faW5fc2Nhbl90YWJsZSA9IDA7CisJbWVtc2V0KGFkYXB0ZXItPnNjYW5fdGFibGUsIDAsCisJICAgICAgIChzaXplb2Yoc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvcikgKiBJV19NQVhfQVApKTsKKwlhZGFwdGVyLT5zY2FuX3Byb2JlcyA9IDE7CisKKwltZW1zZXQoYWRhcHRlci0+YmNuX2J1ZiwgMCwgc2l6ZW9mKGFkYXB0ZXItPmJjbl9idWYpKTsKKwlhZGFwdGVyLT5iY25fYnVmX2VuZCA9IGFkYXB0ZXItPmJjbl9idWY7CisKKwlhZGFwdGVyLT5tdWx0aXBsZV9kdGltID0gMTsKKworCWFkYXB0ZXItPmxvY2FsX2xpc3Rlbl9pbnRlcnZhbCA9IDA7CS8qIGRlZmF1bHQgdmFsdWUgaW4gZmlybXdhcmUKKwkJCQkJCSAgIHdpbGwgYmUgdXNlZCAqLworCisJYWRhcHRlci0+aXNfZGVlcF9zbGVlcCA9IGZhbHNlOworCisJYWRhcHRlci0+ZGVsYXlfbnVsbF9wa3QgPSBmYWxzZTsKKwlhZGFwdGVyLT5kZWxheV90b19wcyA9IDEwMDA7CisJYWRhcHRlci0+ZW5oYW5jZWRfcHNfbW9kZSA9IFBTX01PREVfQVVUTzsKKworCWFkYXB0ZXItPmdlbl9udWxsX3BrdCA9IGZhbHNlOwkvKiBEaXNhYmxlIE5VTEwgUGtnIGdlbmVyYXRpb24gYnkKKwkJCQkJICAgZGVmYXVsdCAqLworCWFkYXB0ZXItPnBwc191YXBzZF9tb2RlID0gZmFsc2U7IC8qIERpc2FibGUgcHBzL3VhcHNkIG1vZGUgYnkKKwkJCQkJICAgZGVmYXVsdCAqLworCWFkYXB0ZXItPnBtX3dha2V1cF9jYXJkX3JlcSA9IGZhbHNlOworCisJYWRhcHRlci0+cG1fd2FrZXVwX2Z3X3RyeSA9IGZhbHNlOworCisJYWRhcHRlci0+bWF4X3R4X2J1Zl9zaXplID0gTVdJRklFWF9UWF9EQVRBX0JVRl9TSVpFXzJLOworCWFkYXB0ZXItPnR4X2J1Zl9zaXplID0gTVdJRklFWF9UWF9EQVRBX0JVRl9TSVpFXzJLOworCWFkYXB0ZXItPmN1cnJfdHhfYnVmX3NpemUgPSBNV0lGSUVYX1RYX0RBVEFfQlVGX1NJWkVfMks7CisKKwlhZGFwdGVyLT5pc19oc19jb25maWd1cmVkID0gZmFsc2U7CisJYWRhcHRlci0+aHNfY2ZnLmNvbmRpdGlvbnMgPSBjcHVfdG9fbGUzMihIT1NUX1NMRUVQX0NGR19DT05EX0RFRik7CisJYWRhcHRlci0+aHNfY2ZnLmdwaW8gPSBIT1NUX1NMRUVQX0NGR19HUElPX0RFRjsKKwlhZGFwdGVyLT5oc19jZmcuZ2FwID0gSE9TVF9TTEVFUF9DRkdfR0FQX0RFRjsKKwlhZGFwdGVyLT5oc19hY3RpdmF0ZWQgPSBmYWxzZTsKKworCW1lbXNldChhZGFwdGVyLT5ldmVudF9ib2R5LCAwLCBzaXplb2YoYWRhcHRlci0+ZXZlbnRfYm9keSkpOworCWFkYXB0ZXItPmh3X2RvdF8xMW5fZGV2X2NhcCA9IDA7CisJYWRhcHRlci0+aHdfZGV2X21jc19zdXBwb3J0ID0gMDsKKwlhZGFwdGVyLT5jaGFuX29mZnNldCA9IDA7CisJYWRhcHRlci0+YWRob2NfMTFuX2VuYWJsZWQgPSBmYWxzZTsKKworCW13aWZpZXhfd21tX2luaXQoYWRhcHRlcik7CisKKwlpZiAoYWRhcHRlci0+c2xlZXBfY2ZtKSB7CisJCW1lbXNldChzbGVlcF9jZm1fYnVmLCAwLCBhZGFwdGVyLT5zbGVlcF9jZm0tPmxlbik7CisJCXNsZWVwX2NmbV9idWYtPmNvbW1hbmQgPQorCQkJCWNwdV90b19sZTE2KEhvc3RDbWRfQ01EXzgwMl8xMV9QU19NT0RFX0VOSCk7CisJCXNsZWVwX2NmbV9idWYtPnNpemUgPQorCQkJCWNwdV90b19sZTE2KGFkYXB0ZXItPnNsZWVwX2NmbS0+bGVuKTsKKwkJc2xlZXBfY2ZtX2J1Zi0+cmVzdWx0ID0gMDsKKwkJc2xlZXBfY2ZtX2J1Zi0+YWN0aW9uID0gY3B1X3RvX2xlMTYoU0xFRVBfQ09ORklSTSk7CisJCXNsZWVwX2NmbV9idWYtPnJlc3BfY3RybCA9IGNwdV90b19sZTE2KFJFU1BfTkVFREVEKTsKKwl9CisJbWVtc2V0KCZhZGFwdGVyLT5zbGVlcF9wYXJhbXMsIDAsIHNpemVvZihhZGFwdGVyLT5zbGVlcF9wYXJhbXMpKTsKKwltZW1zZXQoJmFkYXB0ZXItPnNsZWVwX3BlcmlvZCwgMCwgc2l6ZW9mKGFkYXB0ZXItPnNsZWVwX3BlcmlvZCkpOworCWFkYXB0ZXItPnR4X2xvY2tfZmxhZyA9IGZhbHNlOworCWFkYXB0ZXItPm51bGxfcGt0X2ludGVydmFsID0gMDsKKwlhZGFwdGVyLT5md19iYW5kcyA9IDA7CisJYWRhcHRlci0+Y29uZmlnX2JhbmRzID0gMDsKKwlhZGFwdGVyLT5hZGhvY19zdGFydF9iYW5kID0gMDsKKwlhZGFwdGVyLT5zY2FuX2NoYW5uZWxzID0gTlVMTDsKKwlhZGFwdGVyLT5md19yZWxlYXNlX251bWJlciA9IDA7CisJYWRhcHRlci0+ZndfY2FwX2luZm8gPSAwOworCW1lbXNldCgmYWRhcHRlci0+dXBsZF9idWYsIDAsIHNpemVvZihhZGFwdGVyLT51cGxkX2J1ZikpOworCWFkYXB0ZXItPmV2ZW50X2NhdXNlID0gMDsKKwlhZGFwdGVyLT5yZWdpb25fY29kZSA9IDA7CisJYWRhcHRlci0+YmNuX21pc3NfdGltZV9vdXQgPSBERUZBVUxUX0JDTl9NSVNTX1RJTUVPVVQ7CisJYWRhcHRlci0+YWRob2NfYXdha2VfcGVyaW9kID0gMDsKKwltZW1zZXQoJmFkYXB0ZXItPmFycF9maWx0ZXIsIDAsIHNpemVvZihhZGFwdGVyLT5hcnBfZmlsdGVyKSk7CisJYWRhcHRlci0+YXJwX2ZpbHRlcl9zaXplID0gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZnJlZXMgdGhlIGFkYXB0ZXIgc3RydWN0dXJlLgorICoKKyAqIFRoZSBmcmVlaW5nIG9wZXJhdGlvbiBpcyBkb25lIHJlY3Vyc2l2ZWx5LCBieSBjYW5jZWxpbmcgYWxsCisgKiBwZW5kaW5nIGNvbW1hbmRzLCBmcmVlaW5nIHRoZSBtZW1iZXIgYnVmZmVycyBwcmV2aW91c2x5CisgKiBhbGxvY2F0ZWQgKGNvbW1hbmQgYnVmZmVycywgc2NhbiB0YWJsZSBidWZmZXIsIHNsZWVwIGNvbmZpcm0KKyAqIGNvbW1hbmQgYnVmZmVyKSwgc3RvcHBpbmcgdGhlIHRpbWVycyBhbmQgY2FsbGluZyB0aGUgY2xlYW51cAorICogcm91dGluZXMgZm9yIGV2ZXJ5IGludGVyZmFjZSwgYmVmb3JlIHRoZSBhY3R1YWwgYWRhcHRlcgorICogc3RydWN0dXJlIGlzIGZyZWVkLgorICovCitzdGF0aWMgdm9pZAorbXdpZmlleF9mcmVlX2FkYXB0ZXIoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoIWFkYXB0ZXIpIHsKKwkJcHJfZXJyKCIlczogYWRhcHRlciBpcyBOVUxMXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwltd2lmaWV4X2NhbmNlbF9hbGxfcGVuZGluZ19jbWQoYWRhcHRlcik7CisKKwkvKiBGcmVlIGxvY2sgdmFyaWFibGVzICovCisJbXdpZmlleF9mcmVlX2xvY2tfbGlzdChhZGFwdGVyKTsKKworCS8qIEZyZWUgY29tbWFuZCBidWZmZXIgKi8KKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IGZyZWUgY21kIGJ1ZmZlclxuIik7CisJbXdpZmlleF9mcmVlX2NtZF9idWZmZXIoYWRhcHRlcik7CisKKwlkZWxfdGltZXIoJmFkYXB0ZXItPmNtZF90aW1lcik7CisKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IGZyZWUgc2NhbiB0YWJsZVxuIik7CisJa2ZyZWUoYWRhcHRlci0+c2Nhbl90YWJsZSk7CisJYWRhcHRlci0+c2Nhbl90YWJsZSA9IE5VTEw7CisKKwlhZGFwdGVyLT5pZl9vcHMuY2xlYW51cF9pZihhZGFwdGVyKTsKKworCWRldl9rZnJlZV9za2JfYW55KGFkYXB0ZXItPnNsZWVwX2NmbSk7Cit9CisKKy8qCisgKiAgVGhpcyBmdW5jdGlvbiBpbnRpYWxpemVzIHRoZSBsb2NrIHZhcmlhYmxlcyBhbmQKKyAqICB0aGUgbGlzdCBoZWFkcy4KKyAqLworaW50IG13aWZpZXhfaW5pdF9sb2NrX2xpc3Qoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2OworCXMzMiBpLCBqOworCisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPm13aWZpZXhfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPmludF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+bWFpbl9wcm9jX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5td2lmaWV4X2NtZF9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+cHJpdl9udW07IGkrKykgeworCQlpZiAoYWRhcHRlci0+cHJpdltpXSkgeworCQkJcHJpdiA9IGFkYXB0ZXItPnByaXZbaV07CisJCQlzcGluX2xvY2tfaW5pdCgmcHJpdi0+cnhfcGt0X2xvY2spOworCQkJc3Bpbl9sb2NrX2luaXQoJnByaXYtPndtbS5yYV9saXN0X3NwaW5sb2NrKTsKKwkJCXNwaW5fbG9ja19pbml0KCZwcml2LT5jdXJyX2Jjbl9idWZfbG9jayk7CisJCX0KKwl9CisKKwkvKiBJbml0aWFsaXplIGNtZF9mcmVlX3EgKi8KKwlJTklUX0xJU1RfSEVBRCgmYWRhcHRlci0+Y21kX2ZyZWVfcSk7CisJLyogSW5pdGlhbGl6ZSBjbWRfcGVuZGluZ19xICovCisJSU5JVF9MSVNUX0hFQUQoJmFkYXB0ZXItPmNtZF9wZW5kaW5nX3EpOworCS8qIEluaXRpYWxpemUgc2Nhbl9wZW5kaW5nX3EgKi8KKwlJTklUX0xJU1RfSEVBRCgmYWRhcHRlci0+c2Nhbl9wZW5kaW5nX3EpOworCisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPmNtZF9mcmVlX3FfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPmNtZF9wZW5kaW5nX3FfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnNjYW5fcGVuZGluZ19xX2xvY2spOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPnByaXZfbnVtOyArK2kpIHsKKwkJSU5JVF9MSVNUX0hFQUQoJmFkYXB0ZXItPmJzc19wcmlvX3RibFtpXS5ic3NfcHJpb19oZWFkKTsKKwkJYWRhcHRlci0+YnNzX3ByaW9fdGJsW2ldLmJzc19wcmlvX2N1ciA9IE5VTEw7CisJCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5ic3NfcHJpb190YmxbaV0uYnNzX3ByaW9fbG9jayk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPnByaXZfbnVtOyBpKyspIHsKKwkJaWYgKCFhZGFwdGVyLT5wcml2W2ldKQorCQkJY29udGludWU7CisJCXByaXYgPSBhZGFwdGVyLT5wcml2W2ldOworCQlmb3IgKGogPSAwOyBqIDwgTUFYX05VTV9USUQ7ICsraikgeworCQkJSU5JVF9MSVNUX0hFQUQoJnByaXYtPndtbS50aWRfdGJsX3B0cltqXS5yYV9saXN0KTsKKwkJCXNwaW5fbG9ja19pbml0KCZwcml2LT53bW0udGlkX3RibF9wdHJbal0udGlkX3RibF9sb2NrKTsKKwkJfQorCQlJTklUX0xJU1RfSEVBRCgmcHJpdi0+dHhfYmFfc3RyZWFtX3RibF9wdHIpOworCQlJTklUX0xJU1RfSEVBRCgmcHJpdi0+cnhfcmVvcmRlcl90YmxfcHRyKTsKKworCQlzcGluX2xvY2tfaW5pdCgmcHJpdi0+dHhfYmFfc3RyZWFtX3RibF9sb2NrKTsKKwkJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnJ4X3Jlb3JkZXJfdGJsX2xvY2spOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogIFRoaXMgZnVuY3Rpb24gcmVsZWFzZXMgdGhlIGxvY2sgdmFyaWFibGVzIGFuZCBmcmVlcyB0aGUgbG9ja3MgYW5kCisgKiAgYXNzb2NpYXRlZCBsb2Nrcy4KKyAqLwordm9pZCBtd2lmaWV4X2ZyZWVfbG9ja19saXN0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdjsKKwlzMzIgaSwgajsKKworCS8qIEZyZWUgbGlzdHMgKi8KKwlsaXN0X2RlbCgmYWRhcHRlci0+Y21kX2ZyZWVfcSk7CisJbGlzdF9kZWwoJmFkYXB0ZXItPmNtZF9wZW5kaW5nX3EpOworCWxpc3RfZGVsKCZhZGFwdGVyLT5zY2FuX3BlbmRpbmdfcSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+cHJpdl9udW07IGkrKykKKwkJbGlzdF9kZWwoJmFkYXB0ZXItPmJzc19wcmlvX3RibFtpXS5ic3NfcHJpb19oZWFkKTsKKworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5wcml2X251bTsgaSsrKSB7CisJCWlmIChhZGFwdGVyLT5wcml2W2ldKSB7CisJCQlwcml2ID0gYWRhcHRlci0+cHJpdltpXTsKKwkJCWZvciAoaiA9IDA7IGogPCBNQVhfTlVNX1RJRDsgKytqKQorCQkJCWxpc3RfZGVsKCZwcml2LT53bW0udGlkX3RibF9wdHJbal0ucmFfbGlzdCk7CisJCQlsaXN0X2RlbCgmcHJpdi0+dHhfYmFfc3RyZWFtX3RibF9wdHIpOworCQkJbGlzdF9kZWwoJnByaXYtPnJ4X3Jlb3JkZXJfdGJsX3B0cik7CisJCX0KKwl9Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBmaXJtd2FyZS4KKyAqCisgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZCBzZXF1ZW50aWFsbHkgLQorICogICAgICAtIEFsbG9jYXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKiAgICAgIC0gSW5pdGlhbGl6ZSB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqICAgICAgLSBJbml0aWFsaXplIHRoZSBwcml2YXRlIHN0cnVjdHVyZQorICogICAgICAtIEFkZCBCU1MgcHJpb3JpdHkgdGFibGVzIHRvIHRoZSBhZGFwdGVyIHN0cnVjdHVyZQorICogICAgICAtIEZvciBlYWNoIGludGVyZmFjZSwgc2VuZCB0aGUgaW5pdCBjb21tYW5kcyB0byBmaXJtd2FyZQorICogICAgICAtIFNlbmQgdGhlIGZpcnN0IGNvbW1hbmQgaW4gY29tbWFuZCBwZW5kaW5nIHF1ZXVlLCBpZiBhdmFpbGFibGUKKyAqLworaW50IG13aWZpZXhfaW5pdF9mdyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCWludCByZXQ7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdjsKKwl1OCBpLCBmaXJzdF9zdGEgPSB0cnVlOworCWludCBpc19jbWRfcGVuZF9xX2VtcHR5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlhZGFwdGVyLT5od19zdGF0dXMgPSBNV0lGSUVYX0hXX1NUQVRVU19JTklUSUFMSVpJTkc7CisKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIG1lbWJlciBvZiBhZGFwdGVyIHN0cnVjdHVyZSAqLworCXJldCA9IG13aWZpZXhfYWxsb2NhdGVfYWRhcHRlcihhZGFwdGVyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLTE7CisKKwkvKiBJbml0aWFsaXplIGFkYXB0ZXIgc3RydWN0dXJlICovCisJbXdpZmlleF9pbml0X2FkYXB0ZXIoYWRhcHRlcik7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+cHJpdl9udW07IGkrKykgeworCQlpZiAoYWRhcHRlci0+cHJpdltpXSkgeworCQkJcHJpdiA9IGFkYXB0ZXItPnByaXZbaV07CisKKwkJCS8qIEluaXRpYWxpemUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KKwkJCXJldCA9IG13aWZpZXhfaW5pdF9wcml2KHByaXYpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPnByaXZfbnVtOyBpKyspIHsKKwkJaWYgKGFkYXB0ZXItPnByaXZbaV0pIHsKKwkJCXJldCA9IG13aWZpZXhfc3RhX2luaXRfY21kKGFkYXB0ZXItPnByaXZbaV0sIGZpcnN0X3N0YSk7CisJCQlpZiAocmV0ID09IC0xKQorCQkJCXJldHVybiAtMTsKKworCQkJZmlyc3Rfc3RhID0gZmFsc2U7CisJCX0KKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Y21kX3BlbmRpbmdfcV9sb2NrLCBmbGFncyk7CisJaXNfY21kX3BlbmRfcV9lbXB0eSA9IGxpc3RfZW1wdHkoJmFkYXB0ZXItPmNtZF9wZW5kaW5nX3EpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmNtZF9wZW5kaW5nX3FfbG9jaywgZmxhZ3MpOworCWlmICghaXNfY21kX3BlbmRfcV9lbXB0eSkgeworCQkvKiBTZW5kIHRoZSBmaXJzdCBjb21tYW5kIGluIHF1ZXVlIGFuZCByZXR1cm4gKi8KKwkJaWYgKG13aWZpZXhfbWFpbl9wcm9jZXNzKGFkYXB0ZXIpICE9IC0xKQorCQkJcmV0ID0gLUVJTlBST0dSRVNTOworCX0gZWxzZSB7CisJCWFkYXB0ZXItPmh3X3N0YXR1cyA9IE1XSUZJRVhfSFdfU1RBVFVTX1JFQURZOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGRlbGV0ZXMgdGhlIEJTUyBwcmlvcml0eSB0YWJsZXMuCisgKgorICogVGhlIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aHJvdWdoIGFsbCB0aGUgYWxsb2NhdGVkIEJTUyBwcmlvcml0eSBub2RlcworICogaW4gZXZlcnkgQlNTIHByaW9yaXR5IHRhYmxlIGFuZCBmcmVlcyB0aGVtLgorICovCitzdGF0aWMgdm9pZCBtd2lmaWV4X2RlbGV0ZV9ic3NfcHJpb190Ymwoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwlzdHJ1Y3QgbXdpZmlleF9ic3NfcHJpb19ub2RlICpic3NwcmlvX25vZGUsICp0bXBfbm9kZSwgKipjdXI7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKKwlzcGlubG9ja190ICpsb2NrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+cHJpdl9udW07ICsraSkgeworCQloZWFkID0gJmFkYXB0ZXItPmJzc19wcmlvX3RibFtpXS5ic3NfcHJpb19oZWFkOworCQljdXIgPSAmYWRhcHRlci0+YnNzX3ByaW9fdGJsW2ldLmJzc19wcmlvX2N1cjsKKwkJbG9jayA9ICZhZGFwdGVyLT5ic3NfcHJpb190YmxbaV0uYnNzX3ByaW9fbG9jazsKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBkZWxldGUgQlNTIHByaW9yaXR5IHRhYmxlLCIKKwkJCQkiIGluZGV4ID0gJWQsIGkgPSAlZCwgaGVhZCA9ICVwLCBjdXIgPSAlcFxuIiwKKwkJCSAgICAgIHByaXYtPmJzc19pbmRleCwgaSwgaGVhZCwgKmN1cik7CisJCWlmICgqY3VyKSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFncyk7CisJCQlpZiAobGlzdF9lbXB0eShoZWFkKSkgeworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJYnNzcHJpb19ub2RlID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLAorCQkJCQlzdHJ1Y3QgbXdpZmlleF9ic3NfcHJpb19ub2RlLCBsaXN0KTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpOworCisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYnNzcHJpb19ub2RlLCB0bXBfbm9kZSwgaGVhZCwKKwkJCQkJCSBsaXN0KSB7CisJCQkJaWYgKGJzc3ByaW9fbm9kZS0+cHJpdiA9PSBwcml2KSB7CisJCQkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogRGVsZXRlICIKKwkJCQkJCSJub2RlICVwLCBuZXh0ID0gJXBcbiIsCisJCQkJCQlic3NwcmlvX25vZGUsIHRtcF9ub2RlKTsKKwkJCQkJc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpOworCQkJCQlsaXN0X2RlbCgmYnNzcHJpb19ub2RlLT5saXN0KTsKKwkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncyk7CisJCQkJCWtmcmVlKGJzc3ByaW9fbm9kZSk7CisJCQkJfQorCQkJfQorCQkJKmN1ciA9IChzdHJ1Y3QgbXdpZmlleF9ic3NfcHJpb19ub2RlICopaGVhZDsKKwkJfQorCX0KK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzaHV0ZG93biB0aGUgZHJpdmVyLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkIHNlcXVlbnRpYWxseSAtCisgKiAgICAgIC0gQ2hlY2sgaWYgYWxyZWFkeSBzaHV0IGRvd24KKyAqICAgICAgLSBNYWtlIHN1cmUgdGhlIG1haW4gcHJvY2VzcyBoYXMgc3RvcHBlZAorICogICAgICAtIENsZWFuIHVwIHRoZSBUeCBhbmQgUnggcXVldWVzCisgKiAgICAgIC0gRGVsZXRlIEJTUyBwcmlvcml0eSB0YWJsZXMKKyAqICAgICAgLSBGcmVlIHRoZSBhZGFwdGVyCisgKiAgICAgIC0gTm90aWZ5IGNvbXBsZXRpb24KKyAqLworaW50Cittd2lmaWV4X3NodXRkb3duX2RydihzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCWludCByZXQgPSAtRUlOUFJPR1JFU1M7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdjsKKwlzMzIgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogbXdpZmlleCBhbHJlYWR5IHNodXRkb3duICovCisJaWYgKGFkYXB0ZXItPmh3X3N0YXR1cyA9PSBNV0lGSUVYX0hXX1NUQVRVU19OT1RfUkVBRFkpCisJCXJldHVybiAwOworCisJYWRhcHRlci0+aHdfc3RhdHVzID0gTVdJRklFWF9IV19TVEFUVVNfQ0xPU0lORzsKKwkvKiB3YWl0IGZvciBtd2lmaWV4X3Byb2Nlc3MgdG8gY29tcGxldGUgKi8KKwlpZiAoYWRhcHRlci0+bXdpZmlleF9wcm9jZXNzaW5nKSB7CisJCWRldl93YXJuKGFkYXB0ZXItPmRldiwgIm1haW4gcHJvY2VzcyBpcyBzdGlsbCBydW5uaW5nXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBzaHV0IGRvd24gbXdpZmlleCAqLworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogc2h1dGRvd24gbXdpZmlleC4uLlxuIik7CisKKwkvKiBDbGVhbiB1cCBUeC9SeCBxdWV1ZXMgYW5kIGRlbGV0ZSBCU1MgcHJpb3JpdHkgdGFibGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+cHJpdl9udW07IGkrKykgeworCQlpZiAoYWRhcHRlci0+cHJpdltpXSkgeworCQkJcHJpdiA9IGFkYXB0ZXItPnByaXZbaV07CisKKwkJCW13aWZpZXhfY2xlYW5fdHhyeChwcml2KTsKKwkJCW13aWZpZXhfZGVsZXRlX2Jzc19wcmlvX3RibChwcml2KTsKKwkJfQorCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5td2lmaWV4X2xvY2ssIGZsYWdzKTsKKworCS8qIEZyZWUgYWRhcHRlciBzdHJ1Y3R1cmUgKi8KKwltd2lmaWV4X2ZyZWVfYWRhcHRlcihhZGFwdGVyKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPm13aWZpZXhfbG9jaywgZmxhZ3MpOworCisJLyogTm90aWZ5IGNvbXBsZXRpb24gKi8KKwlyZXQgPSBtd2lmaWV4X3NodXRkb3duX2Z3X2NvbXBsZXRlKGFkYXB0ZXIpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZG93bmxvYWRzIHRoZSBmaXJtd2FyZSB0byB0aGUgY2FyZC4KKyAqCisgKiBUaGUgYWN0dWFsIGRvd25sb2FkIGlzIHByZWNlZGVkIGJ5IHR3byBzYW5pdHkgY2hlY2tzIC0KKyAqICAgICAgLSBDaGVjayBpZiBmaXJtd2FyZSBpcyBhbHJlYWR5IHJ1bm5pbmcKKyAqICAgICAgLSBDaGVjayBpZiB0aGUgaW50ZXJmYWNlIGlzIHRoZSB3aW5uZXIgdG8gZG93bmxvYWQgdGhlIGZpcm13YXJlCisgKgorICogLi4uYW5kIGZvbGxvd2VkIGJ5IGFub3RoZXIgLQorICogICAgICAtIENoZWNrIGlmIHRoZSBmaXJtd2FyZSBpcyBkb3dubG9hZGVkIHN1Y2Nlc3NmdWxseQorICoKKyAqIEFmdGVyIGRvd25sb2FkIGlzIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQsIHRoZSBob3N0IGludGVycnVwdHMgYXJlIGVuYWJsZWQuCisgKi8KK2ludCBtd2lmaWV4X2RubGRfZncoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwKKwkJICAgIHN0cnVjdCBtd2lmaWV4X2Z3X2ltYWdlICpwbWZ3KQoreworCWludCByZXQsIHdpbm5lcjsKKwl1MzIgcG9sbF9udW0gPSAxOworCisJLyogQ2hlY2sgaWYgZmlybXdhcmUgaXMgYWxyZWFkeSBydW5uaW5nICovCisJcmV0ID0gYWRhcHRlci0+aWZfb3BzLmNoZWNrX2Z3X3N0YXR1cyhhZGFwdGVyLCBwb2xsX251bSwgJndpbm5lcik7CisJaWYgKCFyZXQpIHsKKwkJZGV2X25vdGljZShhZGFwdGVyLT5kZXYsCisJCQkJIldMQU4gRlcgYWxyZWFkeSBydW5uaW5nISBTa2lwIEZXIGRvd25sb2FkXG4iKTsKKwkJZ290byBkb25lOworCX0KKwlwb2xsX251bSA9IE1BWF9GSVJNV0FSRV9QT0xMX1RSSUVTOworCisJLyogQ2hlY2sgaWYgd2UgYXJlIHRoZSB3aW5uZXIgZm9yIGRvd25sb2FkaW5nIEZXICovCisJaWYgKCF3aW5uZXIpIHsKKwkJZGV2X25vdGljZShhZGFwdGVyLT5kZXYsCisJCQkJIk90aGVyIGludGVyZmFjZSBhbHJlYWR5IHJ1bm5pbmchIgorCQkJCSIgU2tpcCBGVyBkb3dubG9hZFxuIik7CisJCXBvbGxfbnVtID0gTUFYX01VTFRJX0lOVEVSRkFDRV9QT0xMX1RSSUVTOworCQlnb3RvIHBvbGxfZnc7CisJfQorCWlmIChwbWZ3KSB7CisJCS8qIERvd25sb2FkIGZpcm13YXJlIHdpdGggaGVscGVyICovCisJCXJldCA9IGFkYXB0ZXItPmlmX29wcy5wcm9nX2Z3KGFkYXB0ZXIsIHBtZncpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgInByb2dfZncgZmFpbGVkIHJldD0lI3hcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCitwb2xsX2Z3OgorCS8qIENoZWNrIGlmIHRoZSBmaXJtd2FyZSBpcyBkb3dubG9hZGVkIHN1Y2Nlc3NmdWxseSBvciBub3QgKi8KKwlyZXQgPSBhZGFwdGVyLT5pZl9vcHMuY2hlY2tfZndfc3RhdHVzKGFkYXB0ZXIsIHBvbGxfbnVtLCBOVUxMKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiRlcgZmFpbGVkIHRvIGJlIGFjdGl2ZSBpbiB0aW1lXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KK2RvbmU6CisJLyogcmUtZW5hYmxlIGhvc3QgaW50ZXJydXB0IGZvciBtd2lmaWV4IGFmdGVyIGZ3IGRubGQgaXMgc3VjY2Vzc2Z1bCAqLworCWFkYXB0ZXItPmlmX29wcy5lbmFibGVfaW50KGFkYXB0ZXIpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2lvY3RsLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2lvY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MxYzVlZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvaW9jdGwuaApAQCAtMCwwICsxLDMzMSBAQAorLyoKKyAqIE1hcnZlbGwgV2lyZWxlc3MgTEFOIGRldmljZSBkcml2ZXI6IGlvY3RsIGRhdGEgc3RydWN0dXJlcyAmIEFQSXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBmaWxlICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwKKyAqIEx0ZC4gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIEp1bmUgMTk5MQorICogKHRoZSAiTGljZW5zZSIpLiAgWW91IG1heSB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSBpbgorICogYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdoaWNoCisgKiBpcyBhdmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQSBvciBvbiB0aGUKKyAqIHdvcmxkd2lkZSB3ZWIgYXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dC4KKyAqCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1JUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgQU5EIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0CisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIuCisgKi8KKworI2lmbmRlZiBfTVdJRklFWF9JT0NUTF9IXworI2RlZmluZSBfTVdJRklFWF9JT0NUTF9IXworCisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisKK2VudW0geworCU1XSUZJRVhfU0NBTl9UWVBFX1VOQ0hBTkdFRCA9IDAsCisJTVdJRklFWF9TQ0FOX1RZUEVfQUNUSVZFLAorCU1XSUZJRVhfU0NBTl9UWVBFX1BBU1NJVkUKK307CisKK3N0cnVjdCBtd2lmaWV4X3VzZXJfc2NhbiB7CisJdTMyIHNjYW5fY2ZnX2xlbjsKKwl1OCBzY2FuX2NmZ19idWZbMV07Cit9OworCisjZGVmaW5lIE1XSUZJRVhfUFJPTUlTQ19NT0RFICAgICAgICAgICAgMQorI2RlZmluZSBNV0lGSUVYX01VTFRJQ0FTVF9NT0RFCQkyCisjZGVmaW5lCU1XSUZJRVhfQUxMX01VTFRJX01PREUJCTQKKyNkZWZpbmUgTVdJRklFWF9NQVhfTVVMVElDQVNUX0xJU1RfU0laRQkzMgorCitzdHJ1Y3QgbXdpZmlleF9tdWx0aWNhc3RfbGlzdCB7CisJdTMyIG1vZGU7CisJdTMyIG51bV9tdWx0aWNhc3RfYWRkcjsKKwl1OCBtYWNfbGlzdFtNV0lGSUVYX01BWF9NVUxUSUNBU1RfTElTVF9TSVpFXVtFVEhfQUxFTl07Cit9OworCitzdHJ1Y3QgbXdpZmlleF9jaGFuX2ZyZXEgeworCXUzMiBjaGFubmVsOworCXUzMiBmcmVxOworfTsKKworc3RydWN0IG13aWZpZXhfc3NpZF9ic3NpZCB7CisJc3RydWN0IG13aWZpZXhfODAyXzExX3NzaWQgc3NpZDsKKwl1OCBic3NpZFtFVEhfQUxFTl07Cit9OworCitlbnVtIHsKKwlCQU5EX0IgPSAxLAorCUJBTkRfRyA9IDIsCisJQkFORF9BID0gNCwKKwlCQU5EX0dOID0gOCwKKwlCQU5EX0FOID0gMTYsCit9OworCisjZGVmaW5lIE5PX1NFQ19DSEFOTkVMICAgICAgICAgICAgICAgMAorI2RlZmluZSBTRUNfQ0hBTk5FTF9BQk9WRSAgICAgICAgICAgIDEKKyNkZWZpbmUgU0VDX0NIQU5ORUxfQkVMT1cgICAgICAgICAgICAzCisKK3N0cnVjdCBtd2lmaWV4X2RzX2JhbmRfY2ZnIHsKKwl1MzIgY29uZmlnX2JhbmRzOworCXUzMiBhZGhvY19zdGFydF9iYW5kOworCXUzMiBhZGhvY19jaGFubmVsOworCXUzMiBzZWNfY2hhbl9vZmZzZXQ7Cit9OworCitlbnVtIHsKKwlBREhPQ19JRExFLAorCUFESE9DX1NUQVJURUQsCisJQURIT0NfSk9JTkVELAorCUFESE9DX0NPQUxFU0NFRAorfTsKKworc3RydWN0IG13aWZpZXhfZHNfZ2V0X3N0YXRzIHsKKwl1MzIgbWNhc3RfdHhfZnJhbWU7CisJdTMyIGZhaWxlZDsKKwl1MzIgcmV0cnk7CisJdTMyIG11bHRpX3JldHJ5OworCXUzMiBmcmFtZV9kdXA7CisJdTMyIHJ0c19zdWNjZXNzOworCXUzMiBydHNfZmFpbHVyZTsKKwl1MzIgYWNrX2ZhaWx1cmU7CisJdTMyIHJ4X2ZyYWc7CisJdTMyIG1jYXN0X3J4X2ZyYW1lOworCXUzMiBmY3NfZXJyb3I7CisJdTMyIHR4X2ZyYW1lOworCXUzMiB3ZXBfaWN2X2Vycm9yWzRdOworfTsKKworI2RlZmluZSBCQ05fUlNTSV9BVkdfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQkNOX05GX0FWR19NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEFMTF9SU1NJX0lORk9fTUFTSyAgICAgICAgICAgICAgMHgwMDAwMGZmZgorCitzdHJ1Y3QgbXdpZmlleF9kc19nZXRfc2lnbmFsIHsKKwkvKgorCSAqIEJpdDA6ICBMYXN0IEJlYWNvbiBSU1NJLCAgQml0MTogIEF2ZXJhZ2UgQmVhY29uIFJTU0ksCisJICogQml0MjogIExhc3QgRGF0YSBSU1NJLCAgICBCaXQzOiAgQXZlcmFnZSBEYXRhIFJTU0ksCisJICogQml0NDogIExhc3QgQmVhY29uIFNOUiwgICBCaXQ1OiAgQXZlcmFnZSBCZWFjb24gU05SLAorCSAqIEJpdDY6ICBMYXN0IERhdGEgU05SLCAgICAgQml0NzogIEF2ZXJhZ2UgRGF0YSBTTlIsCisJICogQml0ODogIExhc3QgQmVhY29uIE5GLCAgICBCaXQ5OiAgQXZlcmFnZSBCZWFjb24gTkYsCisJICogQml0MTA6IExhc3QgRGF0YSBORiwgICAgICBCaXQxMTogQXZlcmFnZSBEYXRhIE5GCisJICovCisJdTE2IHNlbGVjdG9yOworCXMxNiBiY25fcnNzaV9sYXN0OworCXMxNiBiY25fcnNzaV9hdmc7CisJczE2IGRhdGFfcnNzaV9sYXN0OworCXMxNiBkYXRhX3Jzc2lfYXZnOworCXMxNiBiY25fc25yX2xhc3Q7CisJczE2IGJjbl9zbnJfYXZnOworCXMxNiBkYXRhX3Nucl9sYXN0OworCXMxNiBkYXRhX3Nucl9hdmc7CisJczE2IGJjbl9uZl9sYXN0OworCXMxNiBiY25fbmZfYXZnOworCXMxNiBkYXRhX25mX2xhc3Q7CisJczE2IGRhdGFfbmZfYXZnOworfTsKKworI2RlZmluZSBNV0lGSUVYX01BWF9WRVJfU1RSX0xFTiAgICAxMjgKKworc3RydWN0IG13aWZpZXhfdmVyX2V4dCB7CisJdTMyIHZlcnNpb25fc3RyX3NlbDsKKwljaGFyIHZlcnNpb25fc3RyW01XSUZJRVhfTUFYX1ZFUl9TVFJfTEVOXTsKK307CisKK3N0cnVjdCBtd2lmaWV4X2Jzc19pbmZvIHsKKwl1MzIgYnNzX21vZGU7CisJc3RydWN0IG13aWZpZXhfODAyXzExX3NzaWQgc3NpZDsKKwl1MzIgc2Nhbl90YWJsZV9pZHg7CisJdTMyIGJzc19jaGFuOworCXUzMiByZWdpb25fY29kZTsKKwl1MzIgbWVkaWFfY29ubmVjdGVkOworCXUzMiBtYXhfcG93ZXJfbGV2ZWw7CisJdTMyIG1pbl9wb3dlcl9sZXZlbDsKKwl1MzIgYWRob2Nfc3RhdGU7CisJc2lnbmVkIGludCBiY25fbmZfbGFzdDsKKwl1MzIgd2VwX3N0YXR1czsKKwl1MzIgaXNfaHNfY29uZmlndXJlZDsKKwl1MzIgaXNfZGVlcF9zbGVlcDsKKwl1OCBic3NpZFtFVEhfQUxFTl07Cit9OworCisjZGVmaW5lIE1BWF9OVU1fVElEICAgICA4CisKKyNkZWZpbmUgTUFYX1JYX1dJTlNJWkUgIDY0CisKK3N0cnVjdCBtd2lmaWV4X2RzX3J4X3Jlb3JkZXJfdGJsIHsKKwl1MTYgdGlkOworCXU4IHRhW0VUSF9BTEVOXTsKKwl1MzIgc3RhcnRfd2luOworCXUzMiB3aW5fc2l6ZTsKKwl1MzIgYnVmZmVyW01BWF9SWF9XSU5TSVpFXTsKK307CisKK3N0cnVjdCBtd2lmaWV4X2RzX3R4X2JhX3N0cmVhbV90YmwgeworCXUxNiB0aWQ7CisJdTggcmFbRVRIX0FMRU5dOworfTsKKworI2RlZmluZSBEQkdfQ01EX05VTQk1CisKK3N0cnVjdCBtd2lmaWV4X2RlYnVnX2luZm8geworCXUzMiBpbnRfY291bnRlcjsKKwl1MzIgcGFja2V0c19vdXRbTUFYX05VTV9USURdOworCXUzMiBtYXhfdHhfYnVmX3NpemU7CisJdTMyIHR4X2J1Zl9zaXplOworCXUzMiBjdXJyX3R4X2J1Zl9zaXplOworCXUzMiB0eF90YmxfbnVtOworCXN0cnVjdCBtd2lmaWV4X2RzX3R4X2JhX3N0cmVhbV90YmwKKwkJdHhfdGJsW01XSUZJRVhfTUFYX1RYX0JBU1RSRUFNX1NVUFBPUlRFRF07CisJdTMyIHJ4X3RibF9udW07CisJc3RydWN0IG13aWZpZXhfZHNfcnhfcmVvcmRlcl90YmwgcnhfdGJsCisJCVtNV0lGSUVYX01BWF9SWF9CQVNUUkVBTV9TVVBQT1JURURdOworCXUxNiBwc19tb2RlOworCXUzMiBwc19zdGF0ZTsKKwl1OCBpc19kZWVwX3NsZWVwOworCXU4IHBtX3dha2V1cF9jYXJkX3JlcTsKKwl1MzIgcG1fd2FrZXVwX2Z3X3RyeTsKKwl1OCBpc19oc19jb25maWd1cmVkOworCXU4IGhzX2FjdGl2YXRlZDsKKwl1MzIgbnVtX2NtZF9ob3N0X3RvX2NhcmRfZmFpbHVyZTsKKwl1MzIgbnVtX2NtZF9zbGVlcF9jZm1faG9zdF90b19jYXJkX2ZhaWx1cmU7CisJdTMyIG51bV90eF9ob3N0X3RvX2NhcmRfZmFpbHVyZTsKKwl1MzIgbnVtX2V2ZW50X2RlYXV0aDsKKwl1MzIgbnVtX2V2ZW50X2Rpc2Fzc29jOworCXUzMiBudW1fZXZlbnRfbGlua19sb3N0OworCXUzMiBudW1fY21kX2RlYXV0aDsKKwl1MzIgbnVtX2NtZF9hc3NvY19zdWNjZXNzOworCXUzMiBudW1fY21kX2Fzc29jX2ZhaWx1cmU7CisJdTMyIG51bV90eF90aW1lb3V0OworCXUzMiBudW1fY21kX3RpbWVvdXQ7CisJdTE2IHRpbWVvdXRfY21kX2lkOworCXUxNiB0aW1lb3V0X2NtZF9hY3Q7CisJdTE2IGxhc3RfY21kX2lkW0RCR19DTURfTlVNXTsKKwl1MTYgbGFzdF9jbWRfYWN0W0RCR19DTURfTlVNXTsKKwl1MTYgbGFzdF9jbWRfaW5kZXg7CisJdTE2IGxhc3RfY21kX3Jlc3BfaWRbREJHX0NNRF9OVU1dOworCXUxNiBsYXN0X2NtZF9yZXNwX2luZGV4OworCXUxNiBsYXN0X2V2ZW50W0RCR19DTURfTlVNXTsKKwl1MTYgbGFzdF9ldmVudF9pbmRleDsKKwl1OCBkYXRhX3NlbnQ7CisJdTggY21kX3NlbnQ7CisJdTggY21kX3Jlc3BfcmVjZWl2ZWQ7CisJdTggZXZlbnRfcmVjZWl2ZWQ7Cit9OworCisjZGVmaW5lIE1XSUZJRVhfS0VZX0lOREVYX1VOSUNBU1QJMHg0MDAwMDAwMAorI2RlZmluZSBXQVBJX1JYUE5fTEVOCQkJMTYKKworc3RydWN0IG13aWZpZXhfZHNfZW5jcnlwdF9rZXkgeworCXUzMiBrZXlfZGlzYWJsZTsKKwl1MzIga2V5X2luZGV4OworCXUzMiBrZXlfbGVuOworCXU4IGtleV9tYXRlcmlhbFtXTEFOX01BWF9LRVlfTEVOXTsKKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07CisJdTMyIGlzX3dhcGlfa2V5OworCXU4IHdhcGlfcnhwbltXQVBJX1JYUE5fTEVOXTsKK307CisKK3N0cnVjdCBtd2lmaWV4X3JhdGVfY2ZnIHsKKwl1MzIgYWN0aW9uOworCXUzMiBpc19yYXRlX2F1dG87CisJdTMyIHJhdGU7Cit9OworCitzdHJ1Y3QgbXdpZmlleF9wb3dlcl9jZmcgeworCXUzMiBpc19wb3dlcl9hdXRvOworCXUzMiBwb3dlcl9sZXZlbDsKK307CisKK3N0cnVjdCBtd2lmaWV4X2RzX2hzX2NmZyB7CisJdTMyIGlzX2ludm9rZV9ob3N0Y21kOworCS8qICBCaXQwOiBub24tdW5pY2FzdCBkYXRhCisJICogIEJpdDE6IHVuaWNhc3QgZGF0YQorCSAqICBCaXQyOiBtYWMgZXZlbnRzCisJICogIEJpdDM6IG1hZ2ljIHBhY2tldAorCSAqLworCXUzMiBjb25kaXRpb25zOworCXUzMiBncGlvOworCXUzMiBnYXA7Cit9OworCisjZGVmaW5lIERFRVBfU0xFRVBfT04gIDEKKyNkZWZpbmUgREVFUF9TTEVFUF9JRExFX1RJTUUJMTAwCisjZGVmaW5lIFBTX01PREVfQVVUTwkJMQorCitzdHJ1Y3QgbXdpZmlleF9kc19hdXRvX2RzIHsKKwl1MTYgYXV0b19kczsKKwl1MTYgaWRsZV90aW1lOworfTsKKworc3RydWN0IG13aWZpZXhfZHNfcG1fY2ZnIHsKKwl1bmlvbiB7CisJCXUzMiBwc19tb2RlOworCQlzdHJ1Y3QgbXdpZmlleF9kc19oc19jZmcgaHNfY2ZnOworCQlzdHJ1Y3QgbXdpZmlleF9kc19hdXRvX2RzIGF1dG9fZGVlcF9zbGVlcDsKKwkJdTMyIHNsZWVwX3BlcmlvZDsKKwl9IHBhcmFtOworfTsKKworc3RydWN0IG13aWZpZXhfZHNfMTFuX3R4X2NmZyB7CisJdTE2IHR4X2h0Y2FwOworCXUxNiB0eF9odGluZm87Cit9OworCitzdHJ1Y3QgbXdpZmlleF9kc18xMW5fYW1zZHVfYWdncl9jdHJsIHsKKwl1MTYgZW5hYmxlOworCXUxNiBjdXJyX2J1Zl9zaXplOworfTsKKworI2RlZmluZSBNV0lGSUVYX05VTV9PRl9DTURfQlVGRkVSCTIwCisjZGVmaW5lIE1XSUZJRVhfU0laRV9PRl9DTURfQlVGRkVSCTIwNDgKKworZW51bSB7CisJTVdJRklFWF9JRV9UWVBFX0dFTl9JRSA9IDAsCisJTVdJRklFWF9JRV9UWVBFX0FSUF9GSUxURVIsCit9OworCitlbnVtIHsKKwlNV0lGSUVYX1JFR19NQUMgPSAxLAorCU1XSUZJRVhfUkVHX0JCUCwKKwlNV0lGSUVYX1JFR19SRiwKKwlNV0lGSUVYX1JFR19QTUlDLAorCU1XSUZJRVhfUkVHX0NBVSwKK307CisKK3N0cnVjdCBtd2lmaWV4X2RzX3JlZ19ydyB7CisJX19sZTMyIHR5cGU7CisJX19sZTMyIG9mZnNldDsKKwlfX2xlMzIgdmFsdWU7Cit9OworCisjZGVmaW5lIE1BWF9FRVBST01fREFUQSAyNTYKKworc3RydWN0IG13aWZpZXhfZHNfcmVhZF9lZXByb20geworCV9fbGUxNiBvZmZzZXQ7CisJX19sZTE2IGJ5dGVfY291bnQ7CisJdTggdmFsdWVbTUFYX0VFUFJPTV9EQVRBXTsKK307CisKK3N0cnVjdCBtd2lmaWV4X2RzX21pc2NfZ2VuX2llIHsKKwl1MzIgdHlwZTsKKwl1MzIgbGVuOworCXU4IGllX2RhdGFbSVdfQ1VTVE9NX01BWF07Cit9OworCitzdHJ1Y3QgbXdpZmlleF9kc19taXNjX2NtZCB7CisJdTMyIGxlbjsKKwl1OCBjbWRbTVdJRklFWF9TSVpFX09GX0NNRF9CVUZGRVJdOworfTsKKworI2RlZmluZSBNV0lGSUVYX01BWF9WU0lFX0xFTiAgICAgICAoMjU2KQorI2RlZmluZSBNV0lGSUVYX01BWF9WU0lFX05VTSAgICAgICAoOCkKKyNkZWZpbmUgTVdJRklFWF9WU0lFX01BU0tfU0NBTiAgICAgMHgwMQorI2RlZmluZSBNV0lGSUVYX1ZTSUVfTUFTS19BU1NPQyAgICAweDAyCisjZGVmaW5lIE1XSUZJRVhfVlNJRV9NQVNLX0FESE9DICAgIDB4MDQKKworZW51bSB7CisJTVdJRklFWF9GVU5DX0lOSVQgPSAxLAorCU1XSUZJRVhfRlVOQ19TSFVURE9XTiwKK307CisKKyNlbmRpZiAvKiAhX01XSUZJRVhfSU9DVExfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvam9pbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9qb2luLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVhYjNkYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvam9pbi5jCkBAIC0wLDAgKzEsMTQyMyBAQAorLyoKKyAqIE1hcnZlbGwgV2lyZWxlc3MgTEFOIGRldmljZSBkcml2ZXI6IGFzc29jaWF0aW9uIGFuZCBhZC1ob2Mgc3RhcnQvam9pbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbAorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluCisgKiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gKKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBIG9yIG9uIHRoZQorICogd29ybGR3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0LgorICoKKyAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQKKyAqIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4KKyAqLworCisjaW5jbHVkZSAiZGVjbC5oIgorI2luY2x1ZGUgImlvY3RsLmgiCisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgImZ3LmgiCisjaW5jbHVkZSAibWFpbi5oIgorI2luY2x1ZGUgIndtbS5oIgorI2luY2x1ZGUgIjExbi5oIgorCisjZGVmaW5lIENBUElORk9fTUFTSyAgICAofihCSVQoMTUpIHwgQklUKDE0KSB8IEJJVCgxMikgfCBCSVQoMTEpIHwgQklUKDkpKSkKKworLyoKKyAqIEFwcGVuZCBhIGdlbmVyaWMgSUUgYXMgYSBwYXNzIHRocm91Z2ggVExWIHRvIGEgVExWIGJ1ZmZlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBuZXR3b3JrIGpvaW4gY29tbWFuZCBwcmVwYXJhdGlvbiByb3V0aW5lLgorICoKKyAqIElmIHRoZSBJRSBidWZmZXIgaGFzIGJlZW4gc2V0dXAgYnkgdGhlIGFwcGxpY2F0aW9uLCB0aGlzIHJvdXRpbmUgYXBwZW5kcworICogdGhlIGJ1ZmZlciBhcyBhIHBhc3MgdGhyb3VnaCBUTFYgdHlwZSB0byB0aGUgcmVxdWVzdC4KKyAqLworc3RhdGljIGludAorbXdpZmlleF9jbWRfYXBwZW5kX2dlbmVyaWNfaWUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggKipidWZmZXIpCit7CisJaW50IHJldF9sZW4gPSAwOworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlciBpZV9oZWFkZXI7CisKKwkvKiBOdWxsIENoZWNrcyAqLworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gMDsKKwlpZiAoISgqYnVmZmVyKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIGEgZ2VuZXJpYyBpZSBidWZmZXIgc2V0dXAsIGFwcGVuZCBpdCB0byB0aGUgcmV0dXJuCisJICogICBwYXJhbWV0ZXIgYnVmZmVyIHBvaW50ZXIuCisJICovCisJaWYgKHByaXYtPmdlbl9pZV9idWZfbGVuKSB7CisJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiaW5mbzogJXM6IGFwcGVuZCBnZW5lcmljICVkIHRvICVwXG4iLAorCQkJCV9fZnVuY19fLCBwcml2LT5nZW5faWVfYnVmX2xlbiwgKmJ1ZmZlcik7CisKKwkJLyogV3JhcCB0aGUgZ2VuZXJpYyBJRSBidWZmZXIgd2l0aCBhIHBhc3MgdGhyb3VnaCBUTFYgdHlwZSAqLworCQlpZV9oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFRMVl9UWVBFX1BBU1NUSFJPVUdIKTsKKwkJaWVfaGVhZGVyLmxlbiA9IGNwdV90b19sZTE2KHByaXYtPmdlbl9pZV9idWZfbGVuKTsKKwkJbWVtY3B5KCpidWZmZXIsICZpZV9oZWFkZXIsIHNpemVvZihpZV9oZWFkZXIpKTsKKworCQkvKiBJbmNyZW1lbnQgdGhlIHJldHVybiBzaXplIGFuZCB0aGUgcmV0dXJuIGJ1ZmZlciBwb2ludGVyCisJCSAgIHBhcmFtICovCisJCSpidWZmZXIgKz0gc2l6ZW9mKGllX2hlYWRlcik7CisJCXJldF9sZW4gKz0gc2l6ZW9mKGllX2hlYWRlcik7CisKKwkJLyogQ29weSB0aGUgZ2VuZXJpYyBJRSBidWZmZXIgdG8gdGhlIG91dHB1dCBidWZmZXIsIGFkdmFuY2UKKwkJICAgcG9pbnRlciAqLworCQltZW1jcHkoKmJ1ZmZlciwgcHJpdi0+Z2VuX2llX2J1ZiwgcHJpdi0+Z2VuX2llX2J1Zl9sZW4pOworCisJCS8qIEluY3JlbWVudCB0aGUgcmV0dXJuIHNpemUgYW5kIHRoZSByZXR1cm4gYnVmZmVyIHBvaW50ZXIKKwkJICAgcGFyYW0gKi8KKwkJKmJ1ZmZlciArPSBwcml2LT5nZW5faWVfYnVmX2xlbjsKKwkJcmV0X2xlbiArPSBwcml2LT5nZW5faWVfYnVmX2xlbjsKKworCQkvKiBSZXNldCB0aGUgZ2VuZXJpYyBJRSBidWZmZXIgKi8KKwkJcHJpdi0+Z2VuX2llX2J1Zl9sZW4gPSAwOworCX0KKworCS8qIHJldHVybiB0aGUgbGVuZ3RoIGFwcGVuZGVkIHRvIHRoZSBidWZmZXIgKi8KKwlyZXR1cm4gcmV0X2xlbjsKK30KKworLyoKKyAqIEFwcGVuZCBUU0YgdHJhY2tpbmcgaW5mbyBmcm9tIHRoZSBzY2FuIHRhYmxlIGZvciB0aGUgdGFyZ2V0IEFQLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIG5ldHdvcmsgam9pbiBjb21tYW5kIHByZXBhcmF0aW9uIHJvdXRpbmUuCisgKgorICogVGhlIFRTRiB0YWJsZSBUU0Ygc2VudCB0byB0aGUgZmlybXdhcmUgY29udGFpbnMgdHdvIFRTRiB2YWx1ZXM6CisgKiAgICAgIC0gVGhlIFRTRiBvZiB0aGUgdGFyZ2V0IEFQIGZyb20gaXRzIHByZXZpb3VzIGJlYWNvbi9wcm9iZSByZXNwb25zZQorICogICAgICAtIFRoZSBUU0YgdGltZXN0YW1wIG9mIG91ciBsb2NhbCBNQUMgYXQgdGhlIHRpbWUgd2Ugb2JzZXJ2ZWQgdGhlCisgKiAgICAgICAgYmVhY29uL3Byb2JlIHJlc3BvbnNlLgorICoKKyAqIFRoZSBmaXJtd2FyZSB1c2VzIHRoZSB0aW1lc3RhbXAgdmFsdWVzIHRvIHNldCBhbiBpbml0aWFsIFRTRiB2YWx1ZQorICogaW4gdGhlIE1BQyBmb3IgdGhlIG5ldyBhc3NvY2lhdGlvbiBhZnRlciBhIHJlYXNzb2NpYXRpb24gYXR0ZW1wdC4KKyAqLworc3RhdGljIGludAorbXdpZmlleF9jbWRfYXBwZW5kX3RzZl90bHYoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggKipidWZmZXIsCisJCQkgICBzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYykKK3sKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc190c2ZfdGltZXN0YW1wIHRzZl90bHY7CisJX19sZTY0IHRzZl92YWw7CisKKwkvKiBOdWxsIENoZWNrcyAqLworCWlmIChidWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJaWYgKCpidWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwltZW1zZXQoJnRzZl90bHYsIDB4MDAsIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc190c2ZfdGltZXN0YW1wKSk7CisKKwl0c2ZfdGx2LmhlYWRlci50eXBlID0gY3B1X3RvX2xlMTYoVExWX1RZUEVfVFNGVElNRVNUQU1QKTsKKwl0c2ZfdGx2LmhlYWRlci5sZW4gPSBjcHVfdG9fbGUxNigyICogc2l6ZW9mKHRzZl92YWwpKTsKKworCW1lbWNweSgqYnVmZmVyLCAmdHNmX3Rsdiwgc2l6ZW9mKHRzZl90bHYuaGVhZGVyKSk7CisJKmJ1ZmZlciArPSBzaXplb2YodHNmX3Rsdi5oZWFkZXIpOworCisJLyogVFNGIGF0IHRoZSB0aW1lIHdoZW4gYmVhY29uL3Byb2JlX3Jlc3BvbnNlIHdhcyByZWNlaXZlZCAqLworCXRzZl92YWwgPSBjcHVfdG9fbGU2NChic3NfZGVzYy0+bmV0d29ya190c2YpOworCW1lbWNweSgqYnVmZmVyLCAmdHNmX3ZhbCwgc2l6ZW9mKHRzZl92YWwpKTsKKwkqYnVmZmVyICs9IHNpemVvZih0c2ZfdmFsKTsKKworCW1lbWNweSgmdHNmX3ZhbCwgYnNzX2Rlc2MtPnRpbWVfc3RhbXAsIHNpemVvZih0c2ZfdmFsKSk7CisKKwlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86ICVzOiBUU0Ygb2Zmc2V0IGNhbGM6ICUwMTZsbHggLSAiCisJCQkiJTAxNmxseFxuIiwgX19mdW5jX18sIHRzZl92YWwsIGJzc19kZXNjLT5uZXR3b3JrX3RzZik7CisKKwltZW1jcHkoKmJ1ZmZlciwgJnRzZl92YWwsIHNpemVvZih0c2ZfdmFsKSk7CisJKmJ1ZmZlciArPSBzaXplb2YodHNmX3ZhbCk7CisKKwlyZXR1cm4gc2l6ZW9mKHRzZl90bHYuaGVhZGVyKSArICgyICogc2l6ZW9mKHRzZl92YWwpKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZmluZHMgb3V0IHRoZSBjb21tb24gcmF0ZXMgYmV0d2VlbiByYXRlMSBhbmQgcmF0ZTIuCisgKgorICogSXQgd2lsbCBmaWxsIGNvbW1vbiByYXRlcyBpbiByYXRlMSBhcyBvdXRwdXQgaWYgZm91bmQuCisgKgorICogTk9URTogU2V0dGluZyB0aGUgTVNCIG9mIHRoZSBiYXNpYyByYXRlcyBuZWVkcyB0byBiZSB0YWtlbgorICogY2FyZSBvZiwgZWl0aGVyIGJlZm9yZSBvciBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9nZXRfY29tbW9uX3JhdGVzKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHU4ICpyYXRlMSwKKwkJCQkgICAgdTMyIHJhdGUxX3NpemUsIHU4ICpyYXRlMiwgdTMyIHJhdGUyX3NpemUpCit7CisJaW50IHJldDsKKwl1OCAqcHRyID0gcmF0ZTEsICp0bXA7CisJdTMyIGksIGo7CisKKwl0bXAgPSBrbWFsbG9jKHJhdGUxX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghdG1wKSB7CisJCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jIHRtcCBidWZcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1jcHkodG1wLCByYXRlMSwgcmF0ZTFfc2l6ZSk7CisJbWVtc2V0KHJhdGUxLCAwLCByYXRlMV9zaXplKTsKKworCWZvciAoaSA9IDA7IHJhdGUyW2ldICYmIGkgPCByYXRlMl9zaXplOyBpKyspIHsKKwkJZm9yIChqID0gMDsgdG1wW2pdICYmIGogPCByYXRlMV9zaXplOyBqKyspIHsKKwkJCS8qIENoZWNrIGNvbW1vbiByYXRlLCBleGNsdWRpbmcgdGhlIGJpdCBmb3IKKwkJCSAgIGJhc2ljIHJhdGUgKi8KKwkJCWlmICgocmF0ZTJbaV0gJiAweDdGKSA9PSAodG1wW2pdICYgMHg3RikpIHsKKwkJCQkqcmF0ZTErKyA9IHRtcFtqXTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiaW5mbzogVHggZGF0YSByYXRlIHNldCB0byAlI3hcbiIsCisJCQkJCQlwcml2LT5kYXRhX3JhdGUpOworCisJaWYgKCFwcml2LT5pc19kYXRhX3JhdGVfYXV0bykgeworCQl3aGlsZSAoKnB0cikgeworCQkJaWYgKCgqcHRyICYgMHg3ZikgPT0gcHJpdi0+ZGF0YV9yYXRlKSB7CisJCQkJcmV0ID0gMDsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisJCQlwdHIrKzsKKwkJfQorCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgInByZXZpb3VzbHkgc2V0IGZpeGVkIGRhdGEgcmF0ZSAlI3giCisJCQkiIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIG5ldHdvcmtcbiIsCisJCQlwcml2LT5kYXRhX3JhdGUpOworCisJCXJldCA9IC0xOworCQlnb3RvIGRvbmU7CisJfQorCisJcmV0ID0gMDsKK2RvbmU6CisJa2ZyZWUodG1wKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHJhdGVzIHN1cHBvcnRlZCBieSBhCisgKiB0YXJnZXQgQlNTIGFuZCBvdXIgYWRhcHRlciBzZXR0aW5ncyBmb3IgdXNlIGluIGFuIGFzc29jL2pvaW4gY29tbWFuZC4KKyAqLworc3RhdGljIGludAorbXdpZmlleF9zZXR1cF9yYXRlc19mcm9tX2Jzc2Rlc2Moc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MsCisJCQkJIHU4ICpvdXRfcmF0ZXMsIHUzMiAqb3V0X3JhdGVzX3NpemUpCit7CisJdTggY2FyZF9yYXRlc1tNV0lGSUVYX1NVUFBPUlRFRF9SQVRFU107CisJdTMyIGNhcmRfcmF0ZXNfc2l6ZTsKKworCS8qIENvcHkgQVAgc3VwcG9ydGVkIHJhdGVzICovCisJbWVtY3B5KG91dF9yYXRlcywgYnNzX2Rlc2MtPnN1cHBvcnRlZF9yYXRlcywgTVdJRklFWF9TVVBQT1JURURfUkFURVMpOworCS8qIEdldCB0aGUgU1RBIHN1cHBvcnRlZCByYXRlcyAqLworCWNhcmRfcmF0ZXNfc2l6ZSA9IG13aWZpZXhfZ2V0X2FjdGl2ZV9kYXRhX3JhdGVzKHByaXYsIGNhcmRfcmF0ZXMpOworCS8qIEdldCB0aGUgY29tbW9uIHJhdGVzIGJldHdlZW4gQVAgYW5kIFNUQSBzdXBwb3J0ZWQgcmF0ZXMgKi8KKwlpZiAobXdpZmlleF9nZXRfY29tbW9uX3JhdGVzKHByaXYsIG91dF9yYXRlcywgTVdJRklFWF9TVVBQT1JURURfUkFURVMsCisJCQkJICAgICBjYXJkX3JhdGVzLCBjYXJkX3JhdGVzX3NpemUpKSB7CisJCSpvdXRfcmF0ZXNfc2l6ZSA9IDA7CisJCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LCAiJXM6IGNhbm5vdCBnZXQgY29tbW9uIHJhdGVzXG4iLAorCQkJCQkJX19mdW5jX18pOworCQlyZXR1cm4gLTE7CisJfQorCisJKm91dF9yYXRlc19zaXplID0KKwkJbWluX3Qoc2l6ZV90LCBzdHJsZW4ob3V0X3JhdGVzKSwgTVdJRklFWF9TVVBQT1JURURfUkFURVMpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHVwZGF0ZXMgdGhlIHNjYW4gZW50cnkgVFNGIHRpbWVzdGFtcHMgdG8gcmVmbGVjdAorICogYSBuZXcgYXNzb2NpYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCittd2lmaWV4X3VwZGF0ZV90c2ZfdGltZXN0YW1wcyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqbmV3X2Jzc19kZXNjKQoreworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCXUzMiB0YWJsZV9pZHg7CisJbG9uZyBsb25nIG5ld190c2ZfYmFzZTsKKwlzaWduZWQgbG9uZyBsb25nIHRzZl9kZWx0YTsKKworCW1lbWNweSgmbmV3X3RzZl9iYXNlLCBuZXdfYnNzX2Rlc2MtPnRpbWVfc3RhbXAsIHNpemVvZihuZXdfdHNmX2Jhc2UpKTsKKworCXRzZl9kZWx0YSA9IG5ld190c2ZfYmFzZSAtIG5ld19ic3NfZGVzYy0+bmV0d29ya190c2Y7CisKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IFRTRjogdXBkYXRlIFRTRiB0aW1lc3RhbXBzLCAiCisJCSIweCUwMTZsbHggLT4gMHglMDE2bGx4XG4iLAorCSAgICAgICBuZXdfYnNzX2Rlc2MtPm5ldHdvcmtfdHNmLCBuZXdfdHNmX2Jhc2UpOworCisJZm9yICh0YWJsZV9pZHggPSAwOyB0YWJsZV9pZHggPCBhZGFwdGVyLT5udW1faW5fc2Nhbl90YWJsZTsKKwkgICAgIHRhYmxlX2lkeCsrKQorCQlhZGFwdGVyLT5zY2FuX3RhYmxlW3RhYmxlX2lkeF0ubmV0d29ya190c2YgKz0gdHNmX2RlbHRhOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBhcHBlbmRzIGEgV0FQSSBJRS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBuZXR3b3JrIGpvaW4gY29tbWFuZCBwcmVwYXJhdGlvbiByb3V0aW5lLgorICoKKyAqIElmIHRoZSBJRSBidWZmZXIgaGFzIGJlZW4gc2V0dXAgYnkgdGhlIGFwcGxpY2F0aW9uLCB0aGlzIHJvdXRpbmUgYXBwZW5kcworICogdGhlIGJ1ZmZlciBhcyBhIFdBUEkgVExWIHR5cGUgdG8gdGhlIHJlcXVlc3QuCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfY21kX2FwcGVuZF93YXBpX2llKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHU4ICoqYnVmZmVyKQoreworCWludCByZXRMZW4gPSAwOworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlciBpZV9oZWFkZXI7CisKKwkvKiBOdWxsIENoZWNrcyAqLworCWlmIChidWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJaWYgKCpidWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIGEgd2FwaSBpZSBidWZmZXIgc2V0dXAsIGFwcGVuZCBpdCB0byB0aGUgcmV0dXJuCisJICogICBwYXJhbWV0ZXIgYnVmZmVyIHBvaW50ZXIuCisJICovCisJaWYgKHByaXYtPndhcGlfaWVfbGVuKSB7CisJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiY21kOiBhcHBlbmQgd2FwaSBpZSAlZCB0byAlcFxuIiwKKwkJCQlwcml2LT53YXBpX2llX2xlbiwgKmJ1ZmZlcik7CisKKwkJLyogV3JhcCB0aGUgZ2VuZXJpYyBJRSBidWZmZXIgd2l0aCBhIHBhc3MgdGhyb3VnaCBUTFYgdHlwZSAqLworCQlpZV9oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFRMVl9UWVBFX1dBUElfSUUpOworCQlpZV9oZWFkZXIubGVuID0gY3B1X3RvX2xlMTYocHJpdi0+d2FwaV9pZV9sZW4pOworCQltZW1jcHkoKmJ1ZmZlciwgJmllX2hlYWRlciwgc2l6ZW9mKGllX2hlYWRlcikpOworCisJCS8qIEluY3JlbWVudCB0aGUgcmV0dXJuIHNpemUgYW5kIHRoZSByZXR1cm4gYnVmZmVyIHBvaW50ZXIKKwkJICAgcGFyYW0gKi8KKwkJKmJ1ZmZlciArPSBzaXplb2YoaWVfaGVhZGVyKTsKKwkJcmV0TGVuICs9IHNpemVvZihpZV9oZWFkZXIpOworCisJCS8qIENvcHkgdGhlIHdhcGkgSUUgYnVmZmVyIHRvIHRoZSBvdXRwdXQgYnVmZmVyLCBhZHZhbmNlCisJCSAgIHBvaW50ZXIgKi8KKwkJbWVtY3B5KCpidWZmZXIsIHByaXYtPndhcGlfaWUsIHByaXYtPndhcGlfaWVfbGVuKTsKKworCQkvKiBJbmNyZW1lbnQgdGhlIHJldHVybiBzaXplIGFuZCB0aGUgcmV0dXJuIGJ1ZmZlciBwb2ludGVyCisJCSAgIHBhcmFtICovCisJCSpidWZmZXIgKz0gcHJpdi0+d2FwaV9pZV9sZW47CisJCXJldExlbiArPSBwcml2LT53YXBpX2llX2xlbjsKKworCX0KKwkvKiByZXR1cm4gdGhlIGxlbmd0aCBhcHBlbmRlZCB0byB0aGUgYnVmZmVyICovCisJcmV0dXJuIHJldExlbjsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gYXBwZW5kcyByc24gaWUgdGx2IGZvciB3cGEvd3BhMiBzZWN1cml0eSBtb2Rlcy4KKyAqIEl0IGlzIGNhbGxlZCBmcm9tIHRoZSBuZXR3b3JrIGpvaW4gY29tbWFuZCBwcmVwYXJhdGlvbiByb3V0aW5lLgorICovCitzdGF0aWMgaW50IG13aWZpZXhfYXBwZW5kX3Jzbl9pZV93cGFfd3BhMihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCQkgIHU4ICoqYnVmZmVyKQoreworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3Jzbl9wYXJhbV9zZXQgKnJzbl9pZV90bHY7CisJaW50IHJzbl9pZV9sZW47CisKKwlpZiAoIWJ1ZmZlciB8fCAhKCpidWZmZXIpKQorCQlyZXR1cm4gMDsKKworCXJzbl9pZV90bHYgPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfcnNuX3BhcmFtX3NldCAqKSAoKmJ1ZmZlcik7CisJcnNuX2llX3Rsdi0+aGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNigodTE2KSBwcml2LT53cGFfaWVbMF0pOworCXJzbl9pZV90bHYtPmhlYWRlci50eXBlID0gY3B1X3RvX2xlMTYoCisJCQkJIGxlMTZfdG9fY3B1KHJzbl9pZV90bHYtPmhlYWRlci50eXBlKSAmIDB4MDBGRik7CisJcnNuX2llX3Rsdi0+aGVhZGVyLmxlbiA9IGNwdV90b19sZTE2KCh1MTYpIHByaXYtPndwYV9pZVsxXSk7CisJcnNuX2llX3Rsdi0+aGVhZGVyLmxlbiA9IGNwdV90b19sZTE2KGxlMTZfdG9fY3B1KHJzbl9pZV90bHYtPmhlYWRlci5sZW4pCisJCQkJCQkJJiAweDAwRkYpOworCWlmIChsZTE2X3RvX2NwdShyc25faWVfdGx2LT5oZWFkZXIubGVuKSA8PSAoc2l6ZW9mKHByaXYtPndwYV9pZSkgLSAyKSkKKwkJbWVtY3B5KHJzbl9pZV90bHYtPnJzbl9pZSwgJnByaXYtPndwYV9pZVsyXSwKKwkJCQkJbGUxNl90b19jcHUocnNuX2llX3Rsdi0+aGVhZGVyLmxlbikpOworCWVsc2UKKwkJcmV0dXJuIC0xOworCisJcnNuX2llX2xlbiA9IHNpemVvZihyc25faWVfdGx2LT5oZWFkZXIpICsKKwkJCQkJbGUxNl90b19jcHUocnNuX2llX3Rsdi0+aGVhZGVyLmxlbik7CisJKmJ1ZmZlciArPSByc25faWVfbGVuOworCisJcmV0dXJuIHJzbl9pZV9sZW47Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGNvbW1hbmQgZm9yIGFzc29jaWF0aW9uLgorICoKKyAqIFRoaXMgc2V0cyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgLQorICogICAgICAtIFBlZXIgTUFDIGFkZHJlc3MKKyAqICAgICAgLSBMaXN0ZW4gaW50ZXJ2YWwKKyAqICAgICAgLSBCZWFjb24gaW50ZXJ2YWwKKyAqICAgICAgLSBDYXBhYmlsaXR5IGluZm9ybWF0aW9uCisgKgorICogLi4uYW5kIHRoZSBmb2xsb3dpbmcgVExWcywgYXMgcmVxdWlyZWQgLQorICogICAgICAtIFNTSUQgVExWCisgKiAgICAgIC0gUEhZIFRMVgorICogICAgICAtIFNTIFRMVgorICogICAgICAtIFJhdGVzIFRMVgorICogICAgICAtIEF1dGhlbnRpY2F0aW9uIFRMVgorICogICAgICAtIENoYW5uZWwgVExWCisgKiAgICAgIC0gV1BBL1dQQTIgSUUKKyAqICAgICAgLSAxMW4gVExWCisgKiAgICAgIC0gVmVuZG9yIHNwZWNpZmljIFRMVgorICogICAgICAtIFdNTSBUTFYKKyAqICAgICAgLSBXQVBJIElFCisgKiAgICAgIC0gR2VuZXJpYyBJRQorICogICAgICAtIFRTRiBUTFYKKyAqCisgKiBQcmVwYXJhdGlvbiBhbHNvIGluY2x1ZGVzIC0KKyAqICAgICAgLSBTZXR0aW5nIGNvbW1hbmQgSUQgYW5kIHByb3BlciBzaXplCisgKiAgICAgIC0gRW5zdXJpbmcgY29ycmVjdCBlbmRpYW4tbmVzcworICovCitpbnQgbXdpZmlleF9jbWRfODAyXzExX2Fzc29jaWF0ZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCSBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLAorCQkJCSB2b2lkICpkYXRhX2J1ZikKK3sKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2Fzc29jaWF0ZSAqYXNzb2MgPSAmY21kLT5wYXJhbXMuYXNzb2NpYXRlOworCXN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjOworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3NzaWRfcGFyYW1fc2V0ICpzc2lkX3RsdjsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19waHlfcGFyYW1fc2V0ICpwaHlfdGx2OworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3NzX3BhcmFtX3NldCAqc3NfdGx2OworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3JhdGVzX3BhcmFtX3NldCAqcmF0ZXNfdGx2OworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2F1dGhfdHlwZSAqYXV0aF90bHY7CisJc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfY2hhbl9saXN0X3BhcmFtX3NldCAqY2hhbl90bHY7CisJdTggcmF0ZXNbTVdJRklFWF9TVVBQT1JURURfUkFURVNdOworCXUzMiByYXRlc19zaXplOworCXUxNiB0bXBfY2FwOworCXU4ICpwb3M7CisJaW50IHJzbl9pZV9sZW4gPSAwOworCisJYnNzX2Rlc2MgPSAoc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqKSBkYXRhX2J1ZjsKKwlwb3MgPSAodTggKikgYXNzb2M7CisKKwltd2lmaWV4X2NmZ190eF9idWYocHJpdiwgYnNzX2Rlc2MpOworCisJY21kLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoSG9zdENtZF9DTURfODAyXzExX0FTU09DSUFURSk7CisKKwkvKiBTYXZlIHNvIHdlIGtub3cgd2hpY2ggQlNTIERlc2MgdG8gdXNlIGluIHRoZSByZXNwb25zZSBoYW5kbGVyICovCisJcHJpdi0+YXR0ZW1wdGVkX2Jzc19kZXNjID0gYnNzX2Rlc2M7CisKKwltZW1jcHkoYXNzb2MtPnBlZXJfc3RhX2FkZHIsCisJICAgICAgIGJzc19kZXNjLT5tYWNfYWRkcmVzcywgc2l6ZW9mKGFzc29jLT5wZWVyX3N0YV9hZGRyKSk7CisJcG9zICs9IHNpemVvZihhc3NvYy0+cGVlcl9zdGFfYWRkcik7CisKKwkvKiBTZXQgdGhlIGxpc3RlbiBpbnRlcnZhbCAqLworCWFzc29jLT5saXN0ZW5faW50ZXJ2YWwgPSBjcHVfdG9fbGUxNihwcml2LT5saXN0ZW5faW50ZXJ2YWwpOworCS8qIFNldCB0aGUgYmVhY29uIHBlcmlvZCAqLworCWFzc29jLT5iZWFjb25fcGVyaW9kID0gY3B1X3RvX2xlMTYoYnNzX2Rlc2MtPmJlYWNvbl9wZXJpb2QpOworCisJcG9zICs9IHNpemVvZihhc3NvYy0+Y2FwX2luZm9fYml0bWFwKTsKKwlwb3MgKz0gc2l6ZW9mKGFzc29jLT5saXN0ZW5faW50ZXJ2YWwpOworCXBvcyArPSBzaXplb2YoYXNzb2MtPmJlYWNvbl9wZXJpb2QpOworCXBvcyArPSBzaXplb2YoYXNzb2MtPmR0aW1fcGVyaW9kKTsKKworCXNzaWRfdGx2ID0gKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3NzaWRfcGFyYW1fc2V0ICopIHBvczsKKwlzc2lkX3Rsdi0+aGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihXTEFOX0VJRF9TU0lEKTsKKwlzc2lkX3Rsdi0+aGVhZGVyLmxlbiA9IGNwdV90b19sZTE2KCh1MTYpIGJzc19kZXNjLT5zc2lkLnNzaWRfbGVuKTsKKwltZW1jcHkoc3NpZF90bHYtPnNzaWQsIGJzc19kZXNjLT5zc2lkLnNzaWQsCisJCWxlMTZfdG9fY3B1KHNzaWRfdGx2LT5oZWFkZXIubGVuKSk7CisJcG9zICs9IHNpemVvZihzc2lkX3Rsdi0+aGVhZGVyKSArIGxlMTZfdG9fY3B1KHNzaWRfdGx2LT5oZWFkZXIubGVuKTsKKworCXBoeV90bHYgPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfcGh5X3BhcmFtX3NldCAqKSBwb3M7CisJcGh5X3Rsdi0+aGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihXTEFOX0VJRF9EU19QQVJBTVMpOworCXBoeV90bHYtPmhlYWRlci5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YocGh5X3Rsdi0+ZmhfZHMuZHNfcGFyYW1fc2V0KSk7CisJbWVtY3B5KCZwaHlfdGx2LT5maF9kcy5kc19wYXJhbV9zZXQsCisJICAgICAgICZic3NfZGVzYy0+cGh5X3BhcmFtX3NldC5kc19wYXJhbV9zZXQuY3VycmVudF9jaGFuLAorCSAgICAgICBzaXplb2YocGh5X3Rsdi0+ZmhfZHMuZHNfcGFyYW1fc2V0KSk7CisJcG9zICs9IHNpemVvZihwaHlfdGx2LT5oZWFkZXIpICsgbGUxNl90b19jcHUocGh5X3Rsdi0+aGVhZGVyLmxlbik7CisKKwlzc190bHYgPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfc3NfcGFyYW1fc2V0ICopIHBvczsKKwlzc190bHYtPmhlYWRlci50eXBlID0gY3B1X3RvX2xlMTYoV0xBTl9FSURfQ0ZfUEFSQU1TKTsKKwlzc190bHYtPmhlYWRlci5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2Yoc3NfdGx2LT5jZl9pYnNzLmNmX3BhcmFtX3NldCkpOworCXBvcyArPSBzaXplb2Yoc3NfdGx2LT5oZWFkZXIpICsgbGUxNl90b19jcHUoc3NfdGx2LT5oZWFkZXIubGVuKTsKKworCS8qIEdldCB0aGUgY29tbW9uIHJhdGVzIHN1cHBvcnRlZCBiZXR3ZWVuIHRoZSBkcml2ZXIgYW5kIHRoZSBCU1MgRGVzYyAqLworCWlmIChtd2lmaWV4X3NldHVwX3JhdGVzX2Zyb21fYnNzZGVzYworCSAgICAocHJpdiwgYnNzX2Rlc2MsIHJhdGVzLCAmcmF0ZXNfc2l6ZSkpCisJCXJldHVybiAtMTsKKworCS8qIFNhdmUgdGhlIGRhdGEgcmF0ZXMgaW50byBDdXJyZW50IEJTUyBzdGF0ZSBzdHJ1Y3R1cmUgKi8KKwlwcml2LT5jdXJyX2Jzc19wYXJhbXMubnVtX29mX3JhdGVzID0gcmF0ZXNfc2l6ZTsKKwltZW1jcHkoJnByaXYtPmN1cnJfYnNzX3BhcmFtcy5kYXRhX3JhdGVzLCByYXRlcywgcmF0ZXNfc2l6ZSk7CisKKwkvKiBTZXR1cCB0aGUgUmF0ZXMgVExWIGluIHRoZSBhc3NvY2lhdGlvbiBjb21tYW5kICovCisJcmF0ZXNfdGx2ID0gKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3JhdGVzX3BhcmFtX3NldCAqKSBwb3M7CisJcmF0ZXNfdGx2LT5oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFdMQU5fRUlEX1NVUFBfUkFURVMpOworCXJhdGVzX3Rsdi0+aGVhZGVyLmxlbiA9IGNwdV90b19sZTE2KCh1MTYpIHJhdGVzX3NpemUpOworCW1lbWNweShyYXRlc190bHYtPnJhdGVzLCByYXRlcywgcmF0ZXNfc2l6ZSk7CisJcG9zICs9IHNpemVvZihyYXRlc190bHYtPmhlYWRlcikgKyByYXRlc19zaXplOworCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiaW5mbzogQVNTT0NfQ01EOiByYXRlcyBzaXplID0gJWRcbiIsCisJCQkJCXJhdGVzX3NpemUpOworCisJLyogQWRkIHRoZSBBdXRoZW50aWNhdGlvbiB0eXBlIHRvIGJlIHVzZWQgZm9yIEF1dGggZnJhbWVzICovCisJYXV0aF90bHYgPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfYXV0aF90eXBlICopIHBvczsKKwlhdXRoX3Rsdi0+aGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihUTFZfVFlQRV9BVVRIX1RZUEUpOworCWF1dGhfdGx2LT5oZWFkZXIubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKGF1dGhfdGx2LT5hdXRoX3R5cGUpKTsKKwlpZiAocHJpdi0+c2VjX2luZm8ud2VwX3N0YXR1cyA9PSBNV0lGSUVYXzgwMl8xMV9XRVBfRU5BQkxFRCkKKwkJYXV0aF90bHYtPmF1dGhfdHlwZSA9IGNwdV90b19sZTE2KAorCQkJCSh1MTYpIHByaXYtPnNlY19pbmZvLmF1dGhlbnRpY2F0aW9uX21vZGUpOworCWVsc2UKKwkJYXV0aF90bHYtPmF1dGhfdHlwZSA9IGNwdV90b19sZTE2KE5MODAyMTFfQVVUSFRZUEVfT1BFTl9TWVNURU0pOworCisJcG9zICs9IHNpemVvZihhdXRoX3Rsdi0+aGVhZGVyKSArIGxlMTZfdG9fY3B1KGF1dGhfdGx2LT5oZWFkZXIubGVuKTsKKworCWlmIChJU19TVVBQT1JUX01VTFRJX0JBTkRTKHByaXYtPmFkYXB0ZXIpCisJICAgICYmICEoSVNTVVBQXzExTkVOQUJMRUQocHJpdi0+YWRhcHRlci0+ZndfY2FwX2luZm8pCisJCSYmICghYnNzX2Rlc2MtPmRpc2FibGVfMTFuKQorCQkgJiYgKHByaXYtPmFkYXB0ZXItPmNvbmZpZ19iYW5kcyAmIEJBTkRfR04KKwkJICAgICB8fCBwcml2LT5hZGFwdGVyLT5jb25maWdfYmFuZHMgJiBCQU5EX0FOKQorCQkgJiYgKGJzc19kZXNjLT5iY25faHRfY2FwKQorCSAgICApCisJCSkgeworCQkvKiBBcHBlbmQgYSBjaGFubmVsIFRMViBmb3IgdGhlIGNoYW5uZWwgdGhlIGF0dGVtcHRlZCBBUCB3YXMKKwkJICAgZm91bmQgb24gKi8KKwkJY2hhbl90bHYgPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfY2hhbl9saXN0X3BhcmFtX3NldCAqKSBwb3M7CisJCWNoYW5fdGx2LT5oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFRMVl9UWVBFX0NIQU5MSVNUKTsKKwkJY2hhbl90bHYtPmhlYWRlci5sZW4gPQorCQkJY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2NoYW5fc2Nhbl9wYXJhbV9zZXQpKTsKKworCQltZW1zZXQoY2hhbl90bHYtPmNoYW5fc2Nhbl9wYXJhbSwgMHgwMCwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9jaGFuX3NjYW5fcGFyYW1fc2V0KSk7CisJCWNoYW5fdGx2LT5jaGFuX3NjYW5fcGFyYW1bMF0uY2hhbl9udW1iZXIgPQorCQkJKGJzc19kZXNjLT5waHlfcGFyYW1fc2V0LmRzX3BhcmFtX3NldC5jdXJyZW50X2NoYW4pOworCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IEFzc29jOiBUTFYgQ2hhbiA9ICVkXG4iLAorCQkgICAgICAgY2hhbl90bHYtPmNoYW5fc2Nhbl9wYXJhbVswXS5jaGFuX251bWJlcik7CisKKwkJY2hhbl90bHYtPmNoYW5fc2Nhbl9wYXJhbVswXS5yYWRpb190eXBlID0KKwkJCW13aWZpZXhfYmFuZF90b19yYWRpb190eXBlKCh1OCkgYnNzX2Rlc2MtPmJzc19iYW5kKTsKKworCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IEFzc29jOiBUTFYgQmFuZCA9ICVkXG4iLAorCQkgICAgICAgY2hhbl90bHYtPmNoYW5fc2Nhbl9wYXJhbVswXS5yYWRpb190eXBlKTsKKwkJcG9zICs9IHNpemVvZihjaGFuX3Rsdi0+aGVhZGVyKSArCisJCQlzaXplb2Yoc3RydWN0IG13aWZpZXhfY2hhbl9zY2FuX3BhcmFtX3NldCk7CisJfQorCisJaWYgKCFwcml2LT53cHMuc2Vzc2lvbl9lbmFibGUpIHsKKwkJaWYgKHByaXYtPnNlY19pbmZvLndwYV9lbmFibGVkIHx8IHByaXYtPnNlY19pbmZvLndwYTJfZW5hYmxlZCkKKwkJCXJzbl9pZV9sZW4gPSBtd2lmaWV4X2FwcGVuZF9yc25faWVfd3BhX3dwYTIocHJpdiwgJnBvcyk7CisKKwkJaWYgKHJzbl9pZV9sZW4gPT0gLTEpCisJCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKElTU1VQUF8xMU5FTkFCTEVEKHByaXYtPmFkYXB0ZXItPmZ3X2NhcF9pbmZvKQorCQkmJiAoIWJzc19kZXNjLT5kaXNhYmxlXzExbikKKwkgICAgJiYgKHByaXYtPmFkYXB0ZXItPmNvbmZpZ19iYW5kcyAmIEJBTkRfR04KKwkJfHwgcHJpdi0+YWRhcHRlci0+Y29uZmlnX2JhbmRzICYgQkFORF9BTikpCisJCW13aWZpZXhfY21kX2FwcGVuZF8xMW5fdGx2KHByaXYsIGJzc19kZXNjLCAmcG9zKTsKKworCS8qIEFwcGVuZCB2ZW5kb3Igc3BlY2lmaWMgSUUgVExWICovCisJbXdpZmlleF9jbWRfYXBwZW5kX3ZzaWVfdGx2KHByaXYsIE1XSUZJRVhfVlNJRV9NQVNLX0FTU09DLCAmcG9zKTsKKworCW13aWZpZXhfd21tX3Byb2Nlc3NfYXNzb2NpYXRpb25fcmVxKHByaXYsICZwb3MsICZic3NfZGVzYy0+d21tX2llLAorCQkJCQkgICAgYnNzX2Rlc2MtPmJjbl9odF9jYXApOworCWlmIChwcml2LT5zZWNfaW5mby53YXBpX2VuYWJsZWQgJiYgcHJpdi0+d2FwaV9pZV9sZW4pCisJCW13aWZpZXhfY21kX2FwcGVuZF93YXBpX2llKHByaXYsICZwb3MpOworCisKKwltd2lmaWV4X2NtZF9hcHBlbmRfZ2VuZXJpY19pZShwcml2LCAmcG9zKTsKKworCW13aWZpZXhfY21kX2FwcGVuZF90c2ZfdGx2KHByaXYsICZwb3MsIGJzc19kZXNjKTsKKworCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KCh1MTYpIChwb3MgLSAodTggKikgYXNzb2MpICsgU19EU19HRU4pOworCisJLyogU2V0IHRoZSBDYXBhYmlsaXR5IGluZm8gYXQgbGFzdCAqLworCXRtcF9jYXAgPSBic3NfZGVzYy0+Y2FwX2luZm9fYml0bWFwOworCisJaWYgKHByaXYtPmFkYXB0ZXItPmNvbmZpZ19iYW5kcyA9PSBCQU5EX0IpCisJCXRtcF9jYXAgJj0gfldMQU5fQ0FQQUJJTElUWV9TSE9SVF9TTE9UX1RJTUU7CisKKwl0bXBfY2FwICY9IENBUElORk9fTUFTSzsKKwlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IEFTU09DX0NNRDogdG1wX2NhcD0lNFggQ0FQSU5GT19NQVNLPSU0bFhcbiIsCisJICAgICAgIHRtcF9jYXAsIENBUElORk9fTUFTSyk7CisJYXNzb2MtPmNhcF9pbmZvX2JpdG1hcCA9IGNwdV90b19sZTE2KHRtcF9jYXApOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBc3NvY2lhdGlvbiBmaXJtd2FyZSBjb21tYW5kIHJlc3BvbnNlIGhhbmRsZXIKKyAqCisgKiBUaGUgcmVzcG9uc2UgYnVmZmVyIGZvciB0aGUgYXNzb2NpYXRpb24gY29tbWFuZCBoYXMgdGhlIGZvbGxvd2luZworICogbWVtb3J5IGxheW91dC4KKyAqCisgKiBGb3IgY2FzZXMgd2hlcmUgYW4gYXNzb2NpYXRpb24gcmVzcG9uc2Ugd2FzIG5vdCByZWNlaXZlZCAoaW5kaWNhdGVkCisgKiBieSB0aGUgQ2FwSW5mbyBhbmQgQUlkIGZpZWxkKToKKyAqCisgKiAgICAgLi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyAqICAgICB8ICBIZWFkZXIoNCAqIHNpemVvZih0X3UxNikpOiAgU3RhbmRhcmQgY29tbWFuZCByZXNwb25zZSBoZHIgfAorICogICAgIC4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisgKiAgICAgfCAgY2FwX2luZm8vRXJyb3IgUmV0dXJuKHRfdTE2KTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICB8ICAgICAgICAgICAweEZGRkYoLTEpOiBJbnRlcm5hbCBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgIHwgICAgICAgICAgIDB4RkZGRSgtMik6IEF1dGhlbnRpY2F0aW9uIHVuaGFuZGxlZCBtZXNzYWdlICAgICB8CisgKiAgICAgfCAgICAgICAgICAgMHhGRkZEKC0zKTogQXV0aGVudGljYXRpb24gcmVmdXNlZCAgICAgICAgICAgICAgIHwKKyAqICAgICB8ICAgICAgICAgICAweEZGRkMoLTQpOiBUaW1lb3V0IHdhaXRpbmcgZm9yIEFQIHJlc3BvbnNlICAgICAgfAorICogICAgIC4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisgKiAgICAgfCAgc3RhdHVzX2NvZGUodF91MTYpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICB8ICAgICAgICBJZiBjYXBfaW5mbyBpcyAtMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgIHwgICAgICAgICAgIEFuIGludGVybmFsIGZpcm13YXJlIGZhaWx1cmUgcHJldmVudGVkIHRoZSAgICAgICB8CisgKiAgICAgfCAgICAgICAgICAgY29tbWFuZCBmcm9tIGJlaW5nIHByb2Nlc3NlZC4gIFRoZSBzdGF0dXNfY29kZSAgIHwKKyAqICAgICB8ICAgICAgICAgICB3aWxsIGJlIHNldCB0byAxLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgfCAgICAgICAgSWYgY2FwX2luZm8gaXMgLTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICB8ICAgICAgICAgICBBbiBhdXRoZW50aWNhdGlvbiBmcmFtZSB3YXMgcmVjZWl2ZWQgYnV0IHdhcyAgICAgfAorICogICAgIHwgICAgICAgICAgIG5vdCBoYW5kbGVkIGJ5IHRoZSBmaXJtd2FyZS4gIElFRUUgU3RhdHVzICAgICAgICB8CisgKiAgICAgfCAgICAgICAgICAgY29kZSBmb3IgdGhlIGZhaWx1cmUgaXMgcmV0dXJuZWQuICAgICAgICAgICAgICAgIHwKKyAqICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgIHwgICAgICAgIElmIGNhcF9pbmZvIGlzIC0zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgfCAgICAgICAgICAgQW4gYXV0aGVudGljYXRpb24gZnJhbWUgd2FzIHJlY2VpdmVkIGFuZCB0aGUgICAgIHwKKyAqICAgICB8ICAgICAgICAgICBzdGF0dXNfY29kZSBpcyB0aGUgSUVFRSBTdGF0dXMgcmVwb3J0ZWQgaW4gdGhlICAgfAorICogICAgIHwgICAgICAgICAgIHJlc3BvbnNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICB8ICAgICAgICBJZiBjYXBfaW5mbyBpcyAtNDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgIHwgICAgICAgICAgICgxKSBBc3NvY2lhdGlvbiByZXNwb25zZSB0aW1lb3V0ICAgICAgICAgICAgICAgICB8CisgKiAgICAgfCAgICAgICAgICAgKDIpIEF1dGhlbnRpY2F0aW9uIHJlc3BvbnNlIHRpbWVvdXQgICAgICAgICAgICAgIHwKKyAqICAgICAuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorICogICAgIHwgIGFfaWQodF91MTYpOiAweEZGRkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgLi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyAqCisgKgorICogRm9yIGNhc2VzIHdoZXJlIGFuIGFzc29jaWF0aW9uIHJlc3BvbnNlIHdhcyByZWNlaXZlZCwgdGhlIElFRUUKKyAqIHN0YW5kYXJkIGFzc29jaWF0aW9uIHJlc3BvbnNlIGZyYW1lIGlzIHJldHVybmVkOgorICoKKyAqICAgICAuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorICogICAgIHwgIEhlYWRlcig0ICogc2l6ZW9mKHRfdTE2KSk6ICBTdGFuZGFyZCBjb21tYW5kIHJlc3BvbnNlIGhkciB8CisgKiAgICAgLi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyAqICAgICB8ICBjYXBfaW5mbyh0X3UxNik6IElFRUUgQ2FwYWJpbGl0eSAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgIC4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisgKiAgICAgfCAgc3RhdHVzX2NvZGUodF91MTYpOiBJRUVFIFN0YXR1cyBDb2RlICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICAuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorICogICAgIHwgIGFfaWQodF91MTYpOiBJRUVFIEFzc29jaWF0aW9uIElEICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgLi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyAqICAgICB8ICBJRUVFIElFcyh2YXJpYWJsZSk6IEFueSByZWNlaXZlZCBJRXMgY29tcHJpc2luZyB0aGUgICAgICAgfAorICogICAgIHwgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nIHBvcnRpb24gb2YgYSByZWNlaXZlZCAgICAgICB8CisgKiAgICAgfCAgICAgICAgICAgICAgICAgICAgICBhc3NvY2lhdGlvbiByZXNwb25zZSBmcmFtZS4gICAgICAgICAgIHwKKyAqICAgICAuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorICoKKyAqIEZvciBzaW1wbGlzdGljIGhhbmRsaW5nLCB0aGUgc3RhdHVzX2NvZGUgZmllbGQgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lCisgKiBhbiBhc3NvY2lhdGlvbiBzdWNjZXNzICgwKSBvciBmYWlsdXJlIChub24temVybykuCisgKi8KK2ludCBtd2lmaWV4X3JldF84MDJfMTFfYXNzb2NpYXRlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwKQoreworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCWludCByZXQgPSAwOworCXN0cnVjdCBpZWVlX3R5cGVzX2Fzc29jX3JzcCAqYXNzb2NfcnNwOworCXN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjOworCXU4IGVuYWJsZV9kYXRhID0gdHJ1ZTsKKworCWFzc29jX3JzcCA9IChzdHJ1Y3QgaWVlZV90eXBlc19hc3NvY19yc3AgKikgJnJlc3AtPnBhcmFtczsKKworCXByaXYtPmFzc29jX3JzcF9zaXplID0gbWluKGxlMTZfdG9fY3B1KHJlc3AtPnNpemUpIC0gU19EU19HRU4sCisJCQkJICAgICBzaXplb2YocHJpdi0+YXNzb2NfcnNwX2J1ZikpOworCisJbWVtY3B5KHByaXYtPmFzc29jX3JzcF9idWYsICZyZXNwLT5wYXJhbXMsIHByaXYtPmFzc29jX3JzcF9zaXplKTsKKworCWlmIChsZTE2X3RvX2NwdShhc3NvY19yc3AtPnN0YXR1c19jb2RlKSkgeworCQlwcml2LT5hZGFwdGVyLT5kYmcubnVtX2NtZF9hc3NvY19mYWlsdXJlKys7CisJCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LCAiQVNTT0NfUkVTUDogYXNzb2NpYXRpb24gZmFpbGVkLCAiCisJCSAgICAgICAic3RhdHVzIGNvZGUgPSAlZCwgZXJyb3IgPSAweCV4LCBhX2lkID0gMHgleFxuIiwKKwkJICAgICAgIGxlMTZfdG9fY3B1KGFzc29jX3JzcC0+c3RhdHVzX2NvZGUpLAorCQkgICAgICAgbGUxNl90b19jcHUoYXNzb2NfcnNwLT5jYXBfaW5mb19iaXRtYXApLAorCQkgICAgICAgbGUxNl90b19jcHUoYXNzb2NfcnNwLT5hX2lkKSk7CisKKwkJcmV0ID0gLTE7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBTZW5kIGEgTWVkaWEgQ29ubmVjdGVkIGV2ZW50LCBhY2NvcmRpbmcgdG8gdGhlIFNwZWMgKi8KKwlwcml2LT5tZWRpYV9jb25uZWN0ZWQgPSB0cnVlOworCisJcHJpdi0+YWRhcHRlci0+cHNfc3RhdGUgPSBQU19TVEFURV9BV0FLRTsKKwlwcml2LT5hZGFwdGVyLT5wcHNfdWFwc2RfbW9kZSA9IGZhbHNlOworCXByaXYtPmFkYXB0ZXItPnR4X2xvY2tfZmxhZyA9IGZhbHNlOworCisJLyogU2V0IHRoZSBhdHRlbXB0ZWQgQlNTSUQgSW5kZXggdG8gY3VycmVudCAqLworCWJzc19kZXNjID0gcHJpdi0+YXR0ZW1wdGVkX2Jzc19kZXNjOworCisJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiBBU1NPQ19SRVNQOiAlc1xuIiwKKwkJCQkJCWJzc19kZXNjLT5zc2lkLnNzaWQpOworCisJLyogTWFrZSBhIGNvcHkgb2YgY3VycmVudCBCU1NJRCBkZXNjcmlwdG9yICovCisJbWVtY3B5KCZwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IsCisJICAgICAgIGJzc19kZXNjLCBzaXplb2Yoc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvcikpOworCisJLyogVXBkYXRlIGN1cnJfYnNzX3BhcmFtcyAqLworCXByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5jaGFubmVsCisJCT0gYnNzX2Rlc2MtPnBoeV9wYXJhbV9zZXQuZHNfcGFyYW1fc2V0LmN1cnJlbnRfY2hhbjsKKworCXByaXYtPmN1cnJfYnNzX3BhcmFtcy5iYW5kID0gKHU4KSBic3NfZGVzYy0+YnNzX2JhbmQ7CisKKwkvKgorCSAqIEFkanVzdCB0aGUgdGltZXN0YW1wcyBpbiB0aGUgc2NhbiB0YWJsZSB0byBiZSByZWxhdGl2ZSB0byB0aGUgbmV3bHkKKwkgKiBhc3NvY2lhdGVkIEFQJ3MgVFNGCisJICovCisJbXdpZmlleF91cGRhdGVfdHNmX3RpbWVzdGFtcHMocHJpdiwgYnNzX2Rlc2MpOworCisJaWYgKGJzc19kZXNjLT53bW1faWUudmVuZF9oZHIuZWxlbWVudF9pZCA9PSBXTEFOX0VJRF9WRU5ET1JfU1BFQ0lGSUMpCisJCXByaXYtPmN1cnJfYnNzX3BhcmFtcy53bW1fZW5hYmxlZCA9IHRydWU7CisJZWxzZQorCQlwcml2LT5jdXJyX2Jzc19wYXJhbXMud21tX2VuYWJsZWQgPSBmYWxzZTsKKworCWlmICgocHJpdi0+d21tX3JlcXVpcmVkIHx8IGJzc19kZXNjLT5iY25faHRfY2FwKQorCQkJJiYgcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLndtbV9lbmFibGVkKQorCQlwcml2LT53bW1fZW5hYmxlZCA9IHRydWU7CisJZWxzZQorCQlwcml2LT53bW1fZW5hYmxlZCA9IGZhbHNlOworCisJcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLndtbV91YXBzZF9lbmFibGVkID0gZmFsc2U7CisKKwlpZiAocHJpdi0+d21tX2VuYWJsZWQpCisJCXByaXYtPmN1cnJfYnNzX3BhcmFtcy53bW1fdWFwc2RfZW5hYmxlZAorCQkJPSAoKGJzc19kZXNjLT53bW1faWUucW9zX2luZm9fYml0bWFwICYKKwkJCQlJRUVFODAyMTFfV01NX0lFX0FQX1FPU0lORk9fVUFQU0QpID8gMSA6IDApOworCisJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiBBU1NPQ19SRVNQOiBjdXJyX3BrdF9maWx0ZXIgaXMgJSN4XG4iLAorCSAgICAgICBwcml2LT5jdXJyX3BrdF9maWx0ZXIpOworCWlmIChwcml2LT5zZWNfaW5mby53cGFfZW5hYmxlZCB8fCBwcml2LT5zZWNfaW5mby53cGEyX2VuYWJsZWQpCisJCXByaXYtPndwYV9pc19ndGtfc2V0ID0gZmFsc2U7CisKKwlpZiAocHJpdi0+d21tX2VuYWJsZWQpIHsKKwkJLyogRG9uJ3QgcmUtZW5hYmxlIGNhcnJpZXIgdW50aWwgd2UgZ2V0IHRoZSBXTU1fR0VUX1NUQVRVUworCQkgICBldmVudCAqLworCQllbmFibGVfZGF0YSA9IGZhbHNlOworCX0gZWxzZSB7CisJCS8qIFNpbmNlIFdNTSBpcyBub3QgZW5hYmxlZCwgc2V0dXAgdGhlIHF1ZXVlcyB3aXRoIHRoZQorCQkgICBkZWZhdWx0cyAqLworCQltd2lmaWV4X3dtbV9zZXR1cF9xdWV1ZV9wcmlvcml0aWVzKHByaXYsIE5VTEwpOworCQltd2lmaWV4X3dtbV9zZXR1cF9hY19kb3duZ3JhZGUocHJpdik7CisJfQorCisJaWYgKGVuYWJsZV9kYXRhKQorCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwKKwkJCSJpbmZvOiBwb3N0IGFzc29jaWF0aW9uLCByZS1lbmFibGluZyBkYXRhIGZsb3dcbiIpOworCisJLyogUmVzZXQgU05SL05GL1JTU0kgdmFsdWVzICovCisJcHJpdi0+ZGF0YV9yc3NpX2xhc3QgPSAwOworCXByaXYtPmRhdGFfbmZfbGFzdCA9IDA7CisJcHJpdi0+ZGF0YV9yc3NpX2F2ZyA9IDA7CisJcHJpdi0+ZGF0YV9uZl9hdmcgPSAwOworCXByaXYtPmJjbl9yc3NpX2xhc3QgPSAwOworCXByaXYtPmJjbl9uZl9sYXN0ID0gMDsKKwlwcml2LT5iY25fcnNzaV9hdmcgPSAwOworCXByaXYtPmJjbl9uZl9hdmcgPSAwOworCXByaXYtPnJ4cGRfcmF0ZSA9IDA7CisJcHJpdi0+cnhwZF9odGluZm8gPSAwOworCisJbXdpZmlleF9zYXZlX2N1cnJfYmNuKHByaXYpOworCisJcHJpdi0+YWRhcHRlci0+ZGJnLm51bV9jbWRfYXNzb2Nfc3VjY2VzcysrOworCisJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiBBU1NPQ19SRVNQOiBhc3NvY2lhdGVkXG4iKTsKKworCS8qIEFkZCB0aGUgcmFfbGlzdCBoZXJlIGZvciBpbmZyYSBtb2RlIGFzIHRoZXJlIHdpbGwgYmUgb25seSAxIHJhCisJICAgYWx3YXlzICovCisJbXdpZmlleF9yYWxpc3RfYWRkKHByaXYsCisJCQkgICBwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IubWFjX2FkZHJlc3MpOworCisJaWYgKCFuZXRpZl9jYXJyaWVyX29rKHByaXYtPm5ldGRldikpCisJCW5ldGlmX2NhcnJpZXJfb24ocHJpdi0+bmV0ZGV2KTsKKwlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChwcml2LT5uZXRkZXYpKQorCQluZXRpZl93YWtlX3F1ZXVlKHByaXYtPm5ldGRldik7CisKKwlpZiAocHJpdi0+c2VjX2luZm8ud3BhX2VuYWJsZWQgfHwgcHJpdi0+c2VjX2luZm8ud3BhMl9lbmFibGVkKQorCQlwcml2LT5zY2FuX2Jsb2NrID0gdHJ1ZTsKKworZG9uZToKKwkvKiBOZWVkIHRvIGluZGljYXRlIElPQ1RMIGNvbXBsZXRlICovCisJaWYgKGFkYXB0ZXItPmN1cnJfY21kLT53YWl0X3FfZW5hYmxlZCkgeworCQlpZiAocmV0KQorCQkJYWRhcHRlci0+Y21kX3dhaXRfcS5zdGF0dXMgPSAtMTsKKwkJZWxzZQorCQkJYWRhcHRlci0+Y21kX3dhaXRfcS5zdGF0dXMgPSAwOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGNvbW1hbmQgZm9yIGFkLWhvYyBzdGFydC4KKyAqCisgKiBEcml2ZXIgd2lsbCBmaWxsIHVwIFNTSUQsIEJTUyBtb2RlLCBJQlNTIHBhcmFtZXRlcnMsIHBoeXNpY2FsCisgKiBwYXJhbWV0ZXJzLCBwcm9iZSBkZWxheSwgYW5kIGNhcGFiaWxpdHkgaW5mb3JtYXRpb24uIEZpcm13YXJlCisgKiB3aWxsIGZpbGwgdXAgYmVhY29uIHBlcmlvZCwgYmFzaWMgcmF0ZXMgYW5kIG9wZXJhdGlvbmFsIHJhdGVzLgorICoKKyAqIEluIGFkZGl0aW9uLCB0aGUgZm9sbG93aW5nIFRMVnMgYXJlIGFkZGVkIC0KKyAqICAgICAgLSBDaGFubmVsIFRMVgorICogICAgICAtIFZlbmRvciBzcGVjaWZpYyBJRQorICogICAgICAtIFdQQS9XUEEyIElFCisgKiAgICAgIC0gSFQgQ2FwYWJpbGl0aWVzIElFCisgKiAgICAgIC0gSFQgSW5mb3JtYXRpb24gSUUKKyAqCisgKiBQcmVwYXJhdGlvbiBhbHNvIGluY2x1ZGVzIC0KKyAqICAgICAgLSBTZXR0aW5nIGNvbW1hbmQgSUQgYW5kIHByb3BlciBzaXplCisgKiAgICAgIC0gRW5zdXJpbmcgY29ycmVjdCBlbmRpYW4tbmVzcworICovCitpbnQKK213aWZpZXhfY21kXzgwMl8xMV9hZF9ob2Nfc3RhcnQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLCB2b2lkICpkYXRhX2J1ZikKK3sKKwlpbnQgcnNuX2llX2xlbiA9IDA7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9hZF9ob2Nfc3RhcnQgKmFkaG9jX3N0YXJ0ID0KKwkJJmNtZC0+cGFyYW1zLmFkaG9jX3N0YXJ0OworCXN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjOworCXUzMiBjbWRfYXBwZW5kX3NpemUgPSAwOworCXUzMiBpOworCXUxNiB0bXBfY2FwOworCXVpbnQxNl90IGh0X2NhcF9pbmZvOworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2NoYW5fbGlzdF9wYXJhbV9zZXQgKmNoYW5fdGx2OworCisJc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRjYXAgKmh0X2NhcDsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGluZm8gKmh0X2luZm87CisJdTggKnBvcyA9ICh1OCAqKSBhZGhvY19zdGFydCArCisJCQlzaXplb2Yoc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9hZF9ob2Nfc3RhcnQpOworCisJaWYgKCFhZGFwdGVyKQorCQlyZXR1cm4gLTE7CisKKwljbWQtPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihIb3N0Q21kX0NNRF84MDJfMTFfQURfSE9DX1NUQVJUKTsKKworCWJzc19kZXNjID0gJnByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvcjsKKwlwcml2LT5hdHRlbXB0ZWRfYnNzX2Rlc2MgPSBic3NfZGVzYzsKKworCS8qCisJICogRmlsbCBpbiB0aGUgcGFyYW1ldGVycyBmb3IgMiBkYXRhIHN0cnVjdHVyZXM6CisJICogICAxLiBzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2FkX2hvY19zdGFydCBjb21tYW5kCisJICogICAyLiBic3NfZGVzYworCSAqIERyaXZlciB3aWxsIGZpbGwgdXAgU1NJRCwgYnNzX21vZGUsSUJTUyBwYXJhbSwgUGh5c2ljYWwgUGFyYW0sCisJICogcHJvYmUgZGVsYXksIGFuZCBDYXAgaW5mby4KKwkgKiBGaXJtd2FyZSB3aWxsIGZpbGwgdXAgYmVhY29uIHBlcmlvZCwgQmFzaWMgcmF0ZXMKKwkgKiBhbmQgb3BlcmF0aW9uYWwgcmF0ZXMuCisJICovCisKKwltZW1zZXQoYWRob2Nfc3RhcnQtPnNzaWQsIDAsIElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pOworCisJbWVtY3B5KGFkaG9jX3N0YXJ0LT5zc2lkLAorCSAgICAgICAoKHN0cnVjdCBtd2lmaWV4XzgwMl8xMV9zc2lkICopIGRhdGFfYnVmKS0+c3NpZCwKKwkgICAgICAgKChzdHJ1Y3QgbXdpZmlleF84MDJfMTFfc3NpZCAqKSBkYXRhX2J1ZiktPnNzaWRfbGVuKTsKKworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogQURIT0NfU19DTUQ6IFNTSUQgPSAlc1xuIiwKKwkJCQlhZGhvY19zdGFydC0+c3NpZCk7CisKKwltZW1zZXQoYnNzX2Rlc2MtPnNzaWQuc3NpZCwgMCwgSUVFRTgwMjExX01BWF9TU0lEX0xFTik7CisJbWVtY3B5KGJzc19kZXNjLT5zc2lkLnNzaWQsCisJICAgICAgICgoc3RydWN0IG13aWZpZXhfODAyXzExX3NzaWQgKikgZGF0YV9idWYpLT5zc2lkLAorCSAgICAgICAoKHN0cnVjdCBtd2lmaWV4XzgwMl8xMV9zc2lkICopIGRhdGFfYnVmKS0+c3NpZF9sZW4pOworCisJYnNzX2Rlc2MtPnNzaWQuc3NpZF9sZW4gPQorCQkoKHN0cnVjdCBtd2lmaWV4XzgwMl8xMV9zc2lkICopIGRhdGFfYnVmKS0+c3NpZF9sZW47CisKKwkvKiBTZXQgdGhlIEJTUyBtb2RlICovCisJYWRob2Nfc3RhcnQtPmJzc19tb2RlID0gSG9zdENtZF9CU1NfTU9ERV9JQlNTOworCWJzc19kZXNjLT5ic3NfbW9kZSA9IE5MODAyMTFfSUZUWVBFX0FESE9DOworCWFkaG9jX3N0YXJ0LT5iZWFjb25fcGVyaW9kID0gY3B1X3RvX2xlMTYocHJpdi0+YmVhY29uX3BlcmlvZCk7CisJYnNzX2Rlc2MtPmJlYWNvbl9wZXJpb2QgPSBwcml2LT5iZWFjb25fcGVyaW9kOworCisJLyogU2V0IFBoeXNpY2FsIHBhcmFtIHNldCAqLworLyogUGFyYW1ldGVyIElFIElkICovCisjZGVmaW5lIERTX1BBUkFfSUVfSUQgICAzCisvKiBQYXJhbWV0ZXIgSUUgbGVuZ3RoICovCisjZGVmaW5lIERTX1BBUkFfSUVfTEVOICAxCisKKwlhZGhvY19zdGFydC0+cGh5X3BhcmFtX3NldC5kc19wYXJhbV9zZXQuZWxlbWVudF9pZCA9IERTX1BBUkFfSUVfSUQ7CisJYWRob2Nfc3RhcnQtPnBoeV9wYXJhbV9zZXQuZHNfcGFyYW1fc2V0LmxlbiA9IERTX1BBUkFfSUVfTEVOOworCisJaWYgKCFtd2lmaWV4X2dldF9jZnBfYnlfYmFuZF9hbmRfY2hhbm5lbF9mcm9tX2NmZzgwMjExCisJCQkocHJpdiwgYWRhcHRlci0+YWRob2Nfc3RhcnRfYmFuZCwgKHUxNikKKwkJCQlwcml2LT5hZGhvY19jaGFubmVsKSkgeworCQlzdHJ1Y3QgbXdpZmlleF9jaGFuX2ZyZXFfcG93ZXIgKmNmcDsKKwkJY2ZwID0gbXdpZmlleF9nZXRfY2ZwX2J5X2JhbmRfYW5kX2NoYW5uZWxfZnJvbV9jZmc4MDIxMShwcml2LAorCQkJCWFkYXB0ZXItPmFkaG9jX3N0YXJ0X2JhbmQsIEZJUlNUX1ZBTElEX0NIQU5ORUwpOworCQlpZiAoY2ZwKQorCQkJcHJpdi0+YWRob2NfY2hhbm5lbCA9ICh1OCkgY2ZwLT5jaGFubmVsOworCX0KKworCWlmICghcHJpdi0+YWRob2NfY2hhbm5lbCkgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIkFESE9DX1NfQ01EOiBhZGhvY19jaGFubmVsIGNhbm5vdCBiZSAwXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogQURIT0NfU19DTUQ6IGNyZWF0aW5nIEFESE9DIG9uIGNoYW5uZWwgJWRcbiIsCisJCQkJcHJpdi0+YWRob2NfY2hhbm5lbCk7CisKKwlwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IuY2hhbm5lbCA9IHByaXYtPmFkaG9jX2NoYW5uZWw7CisJcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJhbmQgPSBhZGFwdGVyLT5hZGhvY19zdGFydF9iYW5kOworCisJYnNzX2Rlc2MtPmNoYW5uZWwgPSBwcml2LT5hZGhvY19jaGFubmVsOworCWFkaG9jX3N0YXJ0LT5waHlfcGFyYW1fc2V0LmRzX3BhcmFtX3NldC5jdXJyZW50X2NoYW4gPQorCQlwcml2LT5hZGhvY19jaGFubmVsOworCisJbWVtY3B5KCZic3NfZGVzYy0+cGh5X3BhcmFtX3NldCwgJmFkaG9jX3N0YXJ0LT5waHlfcGFyYW1fc2V0LAorCSAgICAgICBzaXplb2YodW5pb24gaWVlZV90eXBlc19waHlfcGFyYW1fc2V0KSk7CisKKwkvKiBTZXQgSUJTUyBwYXJhbSBzZXQgKi8KKy8qIElCU1MgcGFyYW1ldGVyIElFIElkICovCisjZGVmaW5lIElCU1NfUEFSQV9JRV9JRCAgIDYKKy8qIElCU1MgcGFyYW1ldGVyIElFIGxlbmd0aCAqLworI2RlZmluZSBJQlNTX1BBUkFfSUVfTEVOICAyCisKKwlhZGhvY19zdGFydC0+c3NfcGFyYW1fc2V0Lmlic3NfcGFyYW1fc2V0LmVsZW1lbnRfaWQgPSBJQlNTX1BBUkFfSUVfSUQ7CisJYWRob2Nfc3RhcnQtPnNzX3BhcmFtX3NldC5pYnNzX3BhcmFtX3NldC5sZW4gPSBJQlNTX1BBUkFfSUVfTEVOOworCWFkaG9jX3N0YXJ0LT5zc19wYXJhbV9zZXQuaWJzc19wYXJhbV9zZXQuYXRpbV93aW5kb3cKKwkJPSBjcHVfdG9fbGUxNihwcml2LT5hdGltX3dpbmRvdyk7CisJbWVtY3B5KCZic3NfZGVzYy0+c3NfcGFyYW1fc2V0LCAmYWRob2Nfc3RhcnQtPnNzX3BhcmFtX3NldCwKKwkgICAgICAgc2l6ZW9mKHVuaW9uIGllZWVfdHlwZXNfc3NfcGFyYW1fc2V0KSk7CisKKwkvKiBTZXQgQ2FwYWJpbGl0eSBpbmZvICovCisJYnNzX2Rlc2MtPmNhcF9pbmZvX2JpdG1hcCB8PSBXTEFOX0NBUEFCSUxJVFlfSUJTUzsKKwl0bXBfY2FwID0gbGUxNl90b19jcHUoYWRob2Nfc3RhcnQtPmNhcF9pbmZvX2JpdG1hcCk7CisJdG1wX2NhcCAmPSB+V0xBTl9DQVBBQklMSVRZX0VTUzsKKwl0bXBfY2FwIHw9IFdMQU5fQ0FQQUJJTElUWV9JQlNTOworCisJLyogU2V0IHVwIHByaXZhY3kgaW4gYnNzX2Rlc2MgKi8KKwlpZiAocHJpdi0+c2VjX2luZm8uZW5jcnlwdGlvbl9tb2RlKSB7CisJCS8qIEFkLUhvYyBjYXBhYmlsaXR5IHByaXZhY3kgb24gKi8KKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsCisJCQkiaW5mbzogQURIT0NfU19DTUQ6IHdlcF9zdGF0dXMgc2V0IHByaXZhY3kgdG8gV0VQXG4iKTsKKwkJYnNzX2Rlc2MtPnByaXZhY3kgPSBNV0lGSUVYXzgwMl8xMV9QUklWX0ZJTFRFUl84MDIxWF9XRVA7CisJCXRtcF9jYXAgfD0gV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1k7CisJfSBlbHNlIHsKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBBREhPQ19TX0NNRDogd2VwX3N0YXR1cyBOT1Qgc2V0LCIKKwkJCQkiIHNldHRpbmcgcHJpdmFjeSB0byBBQ0NFUFQgQUxMXG4iKTsKKwkJYnNzX2Rlc2MtPnByaXZhY3kgPSBNV0lGSUVYXzgwMl8xMV9QUklWX0ZJTFRFUl9BQ0NFUFRfQUxMOworCX0KKworCW1lbXNldChhZGhvY19zdGFydC0+RGF0YVJhdGUsIDAsIHNpemVvZihhZGhvY19zdGFydC0+RGF0YVJhdGUpKTsKKwltd2lmaWV4X2dldF9hY3RpdmVfZGF0YV9yYXRlcyhwcml2LCBhZGhvY19zdGFydC0+RGF0YVJhdGUpOworCWlmICgoYWRhcHRlci0+YWRob2Nfc3RhcnRfYmFuZCAmIEJBTkRfRykgJiYKKwkgICAgKHByaXYtPmN1cnJfcGt0X2ZpbHRlciAmIEhvc3RDbWRfQUNUX01BQ19BREhPQ19HX1BST1RFQ1RJT05fT04pKSB7CisJCWlmIChtd2lmaWV4X3NlbmRfY21kX2FzeW5jKHByaXYsIEhvc3RDbWRfQ01EX01BQ19DT05UUk9MLAorCQkJCQkgICAgIEhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsCisJCQkJCSAgICAgJnByaXYtPmN1cnJfcGt0X2ZpbHRlcikpIHsKKwkJCWRldl9lcnIoYWRhcHRlci0+ZGV2LAorCQkJICAgICAgICJBREhPQ19TX0NNRDogRyBQcm90ZWN0aW9uIGNvbmZpZyBmYWlsZWRcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCS8qIEZpbmQgdGhlIGxhc3Qgbm9uIHplcm8gKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGFkaG9jX3N0YXJ0LT5EYXRhUmF0ZSkgJiYKKwkJCWFkaG9jX3N0YXJ0LT5EYXRhUmF0ZVtpXTsKKwkJCWkrKykKKwkJCTsKKworCXByaXYtPmN1cnJfYnNzX3BhcmFtcy5udW1fb2ZfcmF0ZXMgPSBpOworCisJLyogQ29weSB0aGUgYWQtaG9jIGNyZWF0aW5nIHJhdGVzIGludG8gQ3VycmVudCBCU1MgcmF0ZSBzdHJ1Y3R1cmUgKi8KKwltZW1jcHkoJnByaXYtPmN1cnJfYnNzX3BhcmFtcy5kYXRhX3JhdGVzLAorCSAgICAgICAmYWRob2Nfc3RhcnQtPkRhdGFSYXRlLCBwcml2LT5jdXJyX2Jzc19wYXJhbXMubnVtX29mX3JhdGVzKTsKKworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogQURIT0NfU19DTUQ6IHJhdGVzPSUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCisJICAgICAgIGFkaG9jX3N0YXJ0LT5EYXRhUmF0ZVswXSwgYWRob2Nfc3RhcnQtPkRhdGFSYXRlWzFdLAorCSAgICAgICBhZGhvY19zdGFydC0+RGF0YVJhdGVbMl0sIGFkaG9jX3N0YXJ0LT5EYXRhUmF0ZVszXSk7CisKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IEFESE9DX1NfQ01EOiBBRC1IT0MgU3RhcnQgY29tbWFuZCBpcyByZWFkeVxuIik7CisKKwlpZiAoSVNfU1VQUE9SVF9NVUxUSV9CQU5EUyhhZGFwdGVyKSkgeworCQkvKiBBcHBlbmQgYSBjaGFubmVsIFRMViAqLworCQljaGFuX3RsdiA9IChzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19jaGFuX2xpc3RfcGFyYW1fc2V0ICopIHBvczsKKwkJY2hhbl90bHYtPmhlYWRlci50eXBlID0gY3B1X3RvX2xlMTYoVExWX1RZUEVfQ0hBTkxJU1QpOworCQljaGFuX3Rsdi0+aGVhZGVyLmxlbiA9CisJCQljcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IG13aWZpZXhfY2hhbl9zY2FuX3BhcmFtX3NldCkpOworCisJCW1lbXNldChjaGFuX3Rsdi0+Y2hhbl9zY2FuX3BhcmFtLCAweDAwLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2NoYW5fc2Nhbl9wYXJhbV9zZXQpKTsKKwkJY2hhbl90bHYtPmNoYW5fc2Nhbl9wYXJhbVswXS5jaGFuX251bWJlciA9CisJCQkodTgpIHByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5jaGFubmVsOworCisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogQURIT0NfU19DTUQ6IFRMViBDaGFuID0gJWRcbiIsCisJCSAgICAgICBjaGFuX3Rsdi0+Y2hhbl9zY2FuX3BhcmFtWzBdLmNoYW5fbnVtYmVyKTsKKworCQljaGFuX3Rsdi0+Y2hhbl9zY2FuX3BhcmFtWzBdLnJhZGlvX3R5cGUKKwkJICAgICAgID0gbXdpZmlleF9iYW5kX3RvX3JhZGlvX3R5cGUocHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJhbmQpOworCQlpZiAoYWRhcHRlci0+YWRob2Nfc3RhcnRfYmFuZCAmIEJBTkRfR04KKwkJICAgIHx8IGFkYXB0ZXItPmFkaG9jX3N0YXJ0X2JhbmQgJiBCQU5EX0FOKSB7CisJCQlpZiAoYWRhcHRlci0+Y2hhbl9vZmZzZXQgPT0gU0VDX0NIQU5ORUxfQUJPVkUpCisJCQkJY2hhbl90bHYtPmNoYW5fc2Nhbl9wYXJhbVswXS5yYWRpb190eXBlIHw9CisJCQkJCVNFQ09ORF9DSEFOTkVMX0FCT1ZFOworCQkJZWxzZSBpZiAoYWRhcHRlci0+Y2hhbl9vZmZzZXQgPT0gU0VDX0NIQU5ORUxfQkVMT1cpCisJCQkJY2hhbl90bHYtPmNoYW5fc2Nhbl9wYXJhbVswXS5yYWRpb190eXBlIHw9CisJCQkJCVNFQ09ORF9DSEFOTkVMX0JFTE9XOworCQl9CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogQURIT0NfU19DTUQ6IFRMViBCYW5kID0gJWRcbiIsCisJCSAgICAgICBjaGFuX3Rsdi0+Y2hhbl9zY2FuX3BhcmFtWzBdLnJhZGlvX3R5cGUpOworCQlwb3MgKz0gc2l6ZW9mKGNoYW5fdGx2LT5oZWFkZXIpICsKKwkJCXNpemVvZihzdHJ1Y3QgbXdpZmlleF9jaGFuX3NjYW5fcGFyYW1fc2V0KTsKKwkJY21kX2FwcGVuZF9zaXplICs9CisJCQlzaXplb2YoY2hhbl90bHYtPmhlYWRlcikgKworCQkJc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2NoYW5fc2Nhbl9wYXJhbV9zZXQpOworCX0KKworCS8qIEFwcGVuZCB2ZW5kb3Igc3BlY2lmaWMgSUUgVExWICovCisJY21kX2FwcGVuZF9zaXplICs9IG13aWZpZXhfY21kX2FwcGVuZF92c2llX3Rsdihwcml2LAorCQkJCU1XSUZJRVhfVlNJRV9NQVNLX0FESE9DLCAmcG9zKTsKKworCWlmIChwcml2LT5zZWNfaW5mby53cGFfZW5hYmxlZCkgeworCQlyc25faWVfbGVuID0gbXdpZmlleF9hcHBlbmRfcnNuX2llX3dwYV93cGEyKHByaXYsICZwb3MpOworCQlpZiAocnNuX2llX2xlbiA9PSAtMSkKKwkJCXJldHVybiAtMTsKKwkJY21kX2FwcGVuZF9zaXplICs9IHJzbl9pZV9sZW47CisJfQorCisJaWYgKGFkYXB0ZXItPmFkaG9jXzExbl9lbmFibGVkKSB7CisJCXsKKwkJCWh0X2NhcCA9IChzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGNhcCAqKSBwb3M7CisJCQltZW1zZXQoaHRfY2FwLCAwLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGNhcCkpOworCQkJaHRfY2FwLT5oZWFkZXIudHlwZSA9CisJCQkJY3B1X3RvX2xlMTYoV0xBTl9FSURfSFRfQ0FQQUJJTElUWSk7CisJCQlodF9jYXAtPmhlYWRlci5sZW4gPQorCQkJICAgICAgIGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCkpOworCQkJaHRfY2FwX2luZm8gPSBsZTE2X3RvX2NwdShodF9jYXAtPmh0X2NhcC5jYXBfaW5mbyk7CisKKwkJCWh0X2NhcF9pbmZvIHw9IElFRUU4MDIxMV9IVF9DQVBfU0dJXzIwOworCQkJaWYgKGFkYXB0ZXItPmNoYW5fb2Zmc2V0KSB7CisJCQkJaHRfY2FwX2luZm8gfD0gSUVFRTgwMjExX0hUX0NBUF9TR0lfNDA7CisJCQkJaHRfY2FwX2luZm8gfD0gSUVFRTgwMjExX0hUX0NBUF9EU1NTQ0NLNDA7CisJCQkJaHRfY2FwX2luZm8gfD0gSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDA7CisJCQkJU0VUSFRfTUNTMzIoaHRfY2FwLT5odF9jYXAubWNzLnJ4X21hc2spOworCQkJfQorCisJCQlodF9jYXAtPmh0X2NhcC5hbXBkdV9wYXJhbXNfaW5mbworCQkJCQk9IElFRUU4MDIxMV9IVF9NQVhfQU1QRFVfNjRLOworCQkJaHRfY2FwLT5odF9jYXAubWNzLnJ4X21hc2tbMF0gPSAweGZmOworCQkJcG9zICs9IHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGNhcCk7CisJCQljbWRfYXBwZW5kX3NpemUgKz0KKwkJCQlzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRjYXApOworCQl9CisJCXsKKwkJCWh0X2luZm8gPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRpbmZvICopIHBvczsKKwkJCW1lbXNldChodF9pbmZvLCAwLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGluZm8pKTsKKwkJCWh0X2luZm8tPmhlYWRlci50eXBlID0KKwkJCQljcHVfdG9fbGUxNihXTEFOX0VJRF9IVF9JTkZPUk1BVElPTik7CisJCQlodF9pbmZvLT5oZWFkZXIubGVuID0KKwkJCQljcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9pbmZvKSk7CisJCQlodF9pbmZvLT5odF9pbmZvLmNvbnRyb2xfY2hhbiA9CisJCQkJKHU4KSBwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IuCisJCQkJY2hhbm5lbDsKKwkJCWlmIChhZGFwdGVyLT5jaGFuX29mZnNldCkgeworCQkJCWh0X2luZm8tPmh0X2luZm8uaHRfcGFyYW0gPQorCQkJCQlhZGFwdGVyLT5jaGFuX29mZnNldDsKKwkJCQlodF9pbmZvLT5odF9pbmZvLmh0X3BhcmFtIHw9CisJCQkJCUlFRUU4MDIxMV9IVF9QQVJBTV9DSEFOX1dJRFRIX0FOWTsKKwkJCX0KKwkJCWh0X2luZm8tPmh0X2luZm8ub3BlcmF0aW9uX21vZGUgPQorCQkJICAgICBjcHVfdG9fbGUxNihJRUVFODAyMTFfSFRfT1BfTU9ERV9OT05fR0ZfU1RBX1BSU05UKTsKKwkJCWh0X2luZm8tPmh0X2luZm8uYmFzaWNfc2V0WzBdID0gMHhmZjsKKwkJCXBvcyArPSBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRpbmZvKTsKKwkJCWNtZF9hcHBlbmRfc2l6ZSArPQorCQkJCXNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGluZm8pOworCQl9CisJfQorCisJY21kLT5zaXplID0gY3B1X3RvX2xlMTYoKHUxNikKKwkJCSAgICAoc2l6ZW9mKHN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfYWRfaG9jX3N0YXJ0KQorCQkJICAgICArIFNfRFNfR0VOICsgY21kX2FwcGVuZF9zaXplKSk7CisKKwlpZiAoYWRhcHRlci0+YWRob2Nfc3RhcnRfYmFuZCA9PSBCQU5EX0IpCisJCXRtcF9jYXAgJj0gfldMQU5fQ0FQQUJJTElUWV9TSE9SVF9TTE9UX1RJTUU7CisJZWxzZQorCQl0bXBfY2FwIHw9IFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9TTE9UX1RJTUU7CisKKwlhZGhvY19zdGFydC0+Y2FwX2luZm9fYml0bWFwID0gY3B1X3RvX2xlMTYodG1wX2NhcCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgY29tbWFuZCBmb3IgYWQtaG9jIGpvaW4uCisgKgorICogTW9zdCBvZiB0aGUgcGFyYW1ldGVycyBhcmUgc2V0IHVwIGJ5IGNvcHlpbmcgZnJvbSB0aGUgdGFyZ2V0IEJTUyBkZXNjcmlwdG9yCisgKiBmcm9tIHRoZSBzY2FuIHJlc3BvbnNlLgorICoKKyAqIEluIGFkZGl0aW9uLCB0aGUgZm9sbG93aW5nIFRMVnMgYXJlIGFkZGVkIC0KKyAqICAgICAgLSBDaGFubmVsIFRMVgorICogICAgICAtIFZlbmRvciBzcGVjaWZpYyBJRQorICogICAgICAtIFdQQS9XUEEyIElFCisgKiAgICAgIC0gMTFuIElFCisgKgorICogUHJlcGFyYXRpb24gYWxzbyBpbmNsdWRlcyAtCisgKiAgICAgIC0gU2V0dGluZyBjb21tYW5kIElEIGFuZCBwcm9wZXIgc2l6ZQorICogICAgICAtIEVuc3VyaW5nIGNvcnJlY3QgZW5kaWFuLW5lc3MKKyAqLworaW50Cittd2lmaWV4X2NtZF84MDJfMTFfYWRfaG9jX2pvaW4oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLCB2b2lkICpkYXRhX2J1ZikKK3sKKwlpbnQgcnNuX2llX2xlbiA9IDA7CisJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9hZF9ob2Nfam9pbiAqYWRob2Nfam9pbiA9CisJCSZjbWQtPnBhcmFtcy5hZGhvY19qb2luOworCXN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjID0KKwkJKHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKikgZGF0YV9idWY7CisJc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfY2hhbl9saXN0X3BhcmFtX3NldCAqY2hhbl90bHY7CisJdTMyIGNtZF9hcHBlbmRfc2l6ZSA9IDA7CisJdTE2IHRtcF9jYXA7CisJdTMyIGksIHJhdGVzX3NpemUgPSAwOworCXUxNiBjdXJyX3BrdF9maWx0ZXI7CisJdTggKnBvcyA9CisJCSh1OCAqKSBhZGhvY19qb2luICsKKwkJc2l6ZW9mKHN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfYWRfaG9jX2pvaW4pOworCisvKiBVc2UgRyBwcm90ZWN0aW9uICovCisjZGVmaW5lIFVTRV9HX1BST1RFQ1RJT04gICAgICAgIDB4MDIKKwlpZiAoYnNzX2Rlc2MtPmVycF9mbGFncyAmIFVTRV9HX1BST1RFQ1RJT04pIHsKKwkJY3Vycl9wa3RfZmlsdGVyID0KKwkJCXByaXYtPgorCQkJY3Vycl9wa3RfZmlsdGVyIHwgSG9zdENtZF9BQ1RfTUFDX0FESE9DX0dfUFJPVEVDVElPTl9PTjsKKworCQlpZiAobXdpZmlleF9zZW5kX2NtZF9hc3luYyhwcml2LCBIb3N0Q21kX0NNRF9NQUNfQ09OVFJPTCwKKwkJCQkJICAgICBIb3N0Q21kX0FDVF9HRU5fU0VULCAwLAorCQkJCQkgICAgICZjdXJyX3BrdF9maWx0ZXIpKSB7CisJCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwKKwkJCSAgICAgICAiQURIT0NfSl9DTUQ6IEcgUHJvdGVjdGlvbiBjb25maWcgZmFpbGVkXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCXByaXYtPmF0dGVtcHRlZF9ic3NfZGVzYyA9IGJzc19kZXNjOworCisJY21kLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoSG9zdENtZF9DTURfODAyXzExX0FEX0hPQ19KT0lOKTsKKworCWFkaG9jX2pvaW4tPmJzc19kZXNjcmlwdG9yLmJzc19tb2RlID0gSG9zdENtZF9CU1NfTU9ERV9JQlNTOworCisJYWRob2Nfam9pbi0+YnNzX2Rlc2NyaXB0b3IuYmVhY29uX3BlcmlvZAorCQk9IGNwdV90b19sZTE2KGJzc19kZXNjLT5iZWFjb25fcGVyaW9kKTsKKworCW1lbWNweSgmYWRob2Nfam9pbi0+YnNzX2Rlc2NyaXB0b3IuYnNzaWQsCisJICAgICAgICZic3NfZGVzYy0+bWFjX2FkZHJlc3MsIEVUSF9BTEVOKTsKKworCW1lbWNweSgmYWRob2Nfam9pbi0+YnNzX2Rlc2NyaXB0b3Iuc3NpZCwKKwkgICAgICAgJmJzc19kZXNjLT5zc2lkLnNzaWQsIGJzc19kZXNjLT5zc2lkLnNzaWRfbGVuKTsKKworCW1lbWNweSgmYWRob2Nfam9pbi0+YnNzX2Rlc2NyaXB0b3IucGh5X3BhcmFtX3NldCwKKwkgICAgICAgJmJzc19kZXNjLT5waHlfcGFyYW1fc2V0LAorCSAgICAgICBzaXplb2YodW5pb24gaWVlZV90eXBlc19waHlfcGFyYW1fc2V0KSk7CisKKwltZW1jcHkoJmFkaG9jX2pvaW4tPmJzc19kZXNjcmlwdG9yLnNzX3BhcmFtX3NldCwKKwkgICAgICAgJmJzc19kZXNjLT5zc19wYXJhbV9zZXQsIHNpemVvZih1bmlvbiBpZWVlX3R5cGVzX3NzX3BhcmFtX3NldCkpOworCisJdG1wX2NhcCA9IGJzc19kZXNjLT5jYXBfaW5mb19iaXRtYXA7CisKKwl0bXBfY2FwICY9IENBUElORk9fTUFTSzsKKworCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiaW5mbzogQURIT0NfSl9DTUQ6IHRtcF9jYXA9JTRYIgorCQkJIiBDQVBJTkZPX01BU0s9JTRsWFxuIiwgdG1wX2NhcCwgQ0FQSU5GT19NQVNLKTsKKworCS8qIEluZm9ybWF0aW9uIG9uIEJTU0lEIGRlc2NyaXB0b3IgcGFzc2VkIHRvIEZXICovCisJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiBBREhPQ19KX0NNRDogQlNTSUQgPSAlcE0sIFNTSUQgPSAlc1xuIiwKKwkJCQlhZGhvY19qb2luLT5ic3NfZGVzY3JpcHRvci5ic3NpZCwKKwkJCQlhZGhvY19qb2luLT5ic3NfZGVzY3JpcHRvci5zc2lkKTsKKworCWZvciAoaSA9IDA7IGJzc19kZXNjLT5zdXBwb3J0ZWRfcmF0ZXNbaV0gJiYKKwkJCWkgPCBNV0lGSUVYX1NVUFBPUlRFRF9SQVRFUzsKKwkJCWkrKykKKwkJCTsKKwlyYXRlc19zaXplID0gaTsKKworCS8qIENvcHkgRGF0YSBSYXRlcyBmcm9tIHRoZSBSYXRlcyByZWNvcmRlZCBpbiBzY2FuIHJlc3BvbnNlICovCisJbWVtc2V0KGFkaG9jX2pvaW4tPmJzc19kZXNjcmlwdG9yLmRhdGFfcmF0ZXMsIDAsCisJICAgICAgIHNpemVvZihhZGhvY19qb2luLT5ic3NfZGVzY3JpcHRvci5kYXRhX3JhdGVzKSk7CisJbWVtY3B5KGFkaG9jX2pvaW4tPmJzc19kZXNjcmlwdG9yLmRhdGFfcmF0ZXMsCisJICAgICAgIGJzc19kZXNjLT5zdXBwb3J0ZWRfcmF0ZXMsIHJhdGVzX3NpemUpOworCisJLyogQ29weSB0aGUgYWRob2Mgam9pbiByYXRlcyBpbnRvIEN1cnJlbnQgQlNTIHN0YXRlIHN0cnVjdHVyZSAqLworCXByaXYtPmN1cnJfYnNzX3BhcmFtcy5udW1fb2ZfcmF0ZXMgPSByYXRlc19zaXplOworCW1lbWNweSgmcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmRhdGFfcmF0ZXMsIGJzc19kZXNjLT5zdXBwb3J0ZWRfcmF0ZXMsCisJICAgICAgIHJhdGVzX3NpemUpOworCisJLyogQ29weSB0aGUgY2hhbm5lbCBpbmZvcm1hdGlvbiAqLworCXByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5jaGFubmVsID0gYnNzX2Rlc2MtPmNoYW5uZWw7CisJcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJhbmQgPSAodTgpIGJzc19kZXNjLT5ic3NfYmFuZDsKKworCWlmIChwcml2LT5zZWNfaW5mby53ZXBfc3RhdHVzID09IE1XSUZJRVhfODAyXzExX1dFUF9FTkFCTEVECisJICAgIHx8IHByaXYtPnNlY19pbmZvLndwYV9lbmFibGVkKQorCQl0bXBfY2FwIHw9IFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZOworCisJaWYgKElTX1NVUFBPUlRfTVVMVElfQkFORFMocHJpdi0+YWRhcHRlcikpIHsKKwkJLyogQXBwZW5kIGEgY2hhbm5lbCBUTFYgKi8KKwkJY2hhbl90bHYgPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfY2hhbl9saXN0X3BhcmFtX3NldCAqKSBwb3M7CisJCWNoYW5fdGx2LT5oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFRMVl9UWVBFX0NIQU5MSVNUKTsKKwkJY2hhbl90bHYtPmhlYWRlci5sZW4gPQorCQkJY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2NoYW5fc2Nhbl9wYXJhbV9zZXQpKTsKKworCQltZW1zZXQoY2hhbl90bHYtPmNoYW5fc2Nhbl9wYXJhbSwgMHgwMCwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9jaGFuX3NjYW5fcGFyYW1fc2V0KSk7CisJCWNoYW5fdGx2LT5jaGFuX3NjYW5fcGFyYW1bMF0uY2hhbl9udW1iZXIgPQorCQkJKGJzc19kZXNjLT5waHlfcGFyYW1fc2V0LmRzX3BhcmFtX3NldC5jdXJyZW50X2NoYW4pOworCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IEFESE9DX0pfQ01EOiBUTFYgQ2hhbiA9ICVkXG4iLAorCQkgICAgICAgY2hhbl90bHYtPmNoYW5fc2Nhbl9wYXJhbVswXS5jaGFuX251bWJlcik7CisKKwkJY2hhbl90bHYtPmNoYW5fc2Nhbl9wYXJhbVswXS5yYWRpb190eXBlID0KKwkJCW13aWZpZXhfYmFuZF90b19yYWRpb190eXBlKCh1OCkgYnNzX2Rlc2MtPmJzc19iYW5kKTsKKworCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IEFESE9DX0pfQ01EOiBUTFYgQmFuZCA9ICVkXG4iLAorCQkgICAgICAgY2hhbl90bHYtPmNoYW5fc2Nhbl9wYXJhbVswXS5yYWRpb190eXBlKTsKKwkJcG9zICs9IHNpemVvZihjaGFuX3Rsdi0+aGVhZGVyKSArCisJCQlzaXplb2Yoc3RydWN0IG13aWZpZXhfY2hhbl9zY2FuX3BhcmFtX3NldCk7CisJCWNtZF9hcHBlbmRfc2l6ZSArPSBzaXplb2YoY2hhbl90bHYtPmhlYWRlcikgKworCQkJc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2NoYW5fc2Nhbl9wYXJhbV9zZXQpOworCX0KKworCWlmIChwcml2LT5zZWNfaW5mby53cGFfZW5hYmxlZCkKKwkJcnNuX2llX2xlbiA9IG13aWZpZXhfYXBwZW5kX3Jzbl9pZV93cGFfd3BhMihwcml2LCAmcG9zKTsKKwlpZiAocnNuX2llX2xlbiA9PSAtMSkKKwkJcmV0dXJuIC0xOworCWNtZF9hcHBlbmRfc2l6ZSArPSByc25faWVfbGVuOworCisJaWYgKElTU1VQUF8xMU5FTkFCTEVEKHByaXYtPmFkYXB0ZXItPmZ3X2NhcF9pbmZvKSkKKwkJY21kX2FwcGVuZF9zaXplICs9IG13aWZpZXhfY21kX2FwcGVuZF8xMW5fdGx2KHByaXYsCisJCQlic3NfZGVzYywgJnBvcyk7CisKKwkvKiBBcHBlbmQgdmVuZG9yIHNwZWNpZmljIElFIFRMViAqLworCWNtZF9hcHBlbmRfc2l6ZSArPSBtd2lmaWV4X2NtZF9hcHBlbmRfdnNpZV90bHYocHJpdiwKKwkJCU1XSUZJRVhfVlNJRV9NQVNLX0FESE9DLCAmcG9zKTsKKworCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KCh1MTYpCisJCQkgICAgKHNpemVvZihzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2FkX2hvY19qb2luKQorCQkJICAgICArIFNfRFNfR0VOICsgY21kX2FwcGVuZF9zaXplKSk7CisKKwlhZGhvY19qb2luLT5ic3NfZGVzY3JpcHRvci5jYXBfaW5mb19iaXRtYXAgPSBjcHVfdG9fbGUxNih0bXBfY2FwKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBjb21tYW5kIHJlc3BvbnNlIG9mIGFkLWhvYyBzdGFydCBhbmQKKyAqIGFkLWhvYyBqb2luLgorICoKKyAqIFRoZSBmdW5jdGlvbiBnZW5lcmF0ZXMgYSBkZXZpY2UtY29ubmVjdGVkIGV2ZW50IHRvIG5vdGlmeQorICogdGhlIGFwcGxpY2F0aW9ucywgaW4gY2FzZSBvZiBzdWNjZXNzZnVsIGFkLWhvYyBzdGFydC9qb2luLCBhbmQKKyAqIHNhdmVzIHRoZSBiZWFjb24gYnVmZmVyLgorICovCitpbnQgbXdpZmlleF9yZXRfODAyXzExX2FkX2hvYyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKnJlc3ApCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9hZF9ob2NfcmVzdWx0ICphZGhvY19yZXN1bHQ7CisJc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2M7CisKKwlhZGhvY19yZXN1bHQgPSAmcmVzcC0+cGFyYW1zLmFkaG9jX3Jlc3VsdDsKKworCWJzc19kZXNjID0gcHJpdi0+YXR0ZW1wdGVkX2Jzc19kZXNjOworCisJLyogSm9pbiByZXN1bHQgY29kZSAwIC0tPiBTVUNDRVNTICovCisJaWYgKGxlMTZfdG9fY3B1KHJlc3AtPnJlc3VsdCkpIHsKKwkJZGV2X2Vycihwcml2LT5hZGFwdGVyLT5kZXYsICJBREhPQ19SRVNQOiBmYWlsZWRcbiIpOworCQlpZiAocHJpdi0+bWVkaWFfY29ubmVjdGVkKQorCQkJbXdpZmlleF9yZXNldF9jb25uZWN0X3N0YXRlKHByaXYpOworCisJCW1lbXNldCgmcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLAorCQkgICAgICAgMHgwMCwgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IpKTsKKworCQlyZXQgPSAtMTsKKwkJZ290byBkb25lOworCX0KKworCS8qIFNlbmQgYSBNZWRpYSBDb25uZWN0ZWQgZXZlbnQsIGFjY29yZGluZyB0byB0aGUgU3BlYyAqLworCXByaXYtPm1lZGlhX2Nvbm5lY3RlZCA9IHRydWU7CisKKwlpZiAobGUxNl90b19jcHUocmVzcC0+Y29tbWFuZCkgPT0gSG9zdENtZF9DTURfODAyXzExX0FEX0hPQ19TVEFSVCkgeworCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IEFESE9DX1NfUkVTUCAlc1xuIiwKKwkJCQlic3NfZGVzYy0+c3NpZC5zc2lkKTsKKworCQkvKiBVcGRhdGUgdGhlIGNyZWF0ZWQgbmV0d29yayBkZXNjcmlwdG9yIHdpdGggdGhlIG5ldyBCU1NJRCAqLworCQltZW1jcHkoYnNzX2Rlc2MtPm1hY19hZGRyZXNzLAorCQkgICAgICAgYWRob2NfcmVzdWx0LT5ic3NpZCwgRVRIX0FMRU4pOworCisJCXByaXYtPmFkaG9jX3N0YXRlID0gQURIT0NfU1RBUlRFRDsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBOb3cgdGhlIGpvaW4gY21kIHNob3VsZCBiZSBzdWNjZXNzZnVsLgorCQkgKiBJZiBCU1NJRCBoYXMgY2hhbmdlZCB1c2UgU1NJRCB0byBjb21wYXJlIGluc3RlYWQgb2YgQlNTSUQKKwkJICovCisJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiaW5mbzogQURIT0NfSl9SRVNQICVzXG4iLAorCQkJCWJzc19kZXNjLT5zc2lkLnNzaWQpOworCisJCS8qCisJCSAqIE1ha2UgYSBjb3B5IG9mIGN1cnJlbnQgQlNTSUQgZGVzY3JpcHRvciwgb25seSBuZWVkZWQgZm9yCisJCSAqIGpvaW4gc2luY2UgdGhlIGN1cnJlbnQgZGVzY3JpcHRvciBpcyBhbHJlYWR5IGJlaW5nIHVzZWQKKwkJICogZm9yIGFkaG9jIHN0YXJ0CisJCSAqLworCQltZW1jcHkoJnByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvciwKKwkJICAgICAgIGJzc19kZXNjLCBzaXplb2Yoc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvcikpOworCisJCXByaXYtPmFkaG9jX3N0YXRlID0gQURIT0NfSk9JTkVEOworCX0KKworCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiaW5mbzogQURIT0NfUkVTUDogY2hhbm5lbCA9ICVkXG4iLAorCQkJCXByaXYtPmFkaG9jX2NoYW5uZWwpOworCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiaW5mbzogQURIT0NfUkVTUDogQlNTSUQgPSAlcE1cbiIsCisJICAgICAgIHByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5tYWNfYWRkcmVzcyk7CisKKwlpZiAoIW5ldGlmX2NhcnJpZXJfb2socHJpdi0+bmV0ZGV2KSkKKwkJbmV0aWZfY2Fycmllcl9vbihwcml2LT5uZXRkZXYpOworCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKHByaXYtPm5ldGRldikpCisJCW5ldGlmX3dha2VfcXVldWUocHJpdi0+bmV0ZGV2KTsKKworCW13aWZpZXhfc2F2ZV9jdXJyX2Jjbihwcml2KTsKKworZG9uZToKKwkvKiBOZWVkIHRvIGluZGljYXRlIElPQ1RMIGNvbXBsZXRlICovCisJaWYgKGFkYXB0ZXItPmN1cnJfY21kLT53YWl0X3FfZW5hYmxlZCkgeworCQlpZiAocmV0KQorCQkJYWRhcHRlci0+Y21kX3dhaXRfcS5zdGF0dXMgPSAtMTsKKwkJZWxzZQorCQkJYWRhcHRlci0+Y21kX3dhaXRfcS5zdGF0dXMgPSAwOworCisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gYXNzb2NpYXRlcyB0byBhIHNwZWNpZmljIEJTUyBkaXNjb3ZlcmVkIGluIGEgc2Nhbi4KKyAqCisgKiBJdCBjbGVhcnMgYW55IHBhc3QgYXNzb2NpYXRpb24gcmVzcG9uc2Ugc3RvcmVkIGZvciBhcHBsaWNhdGlvbgorICogcmV0cmlldmFsIGFuZCBjYWxscyB0aGUgY29tbWFuZCBwcmVwYXJhdGlvbiByb3V0aW5lIHRvIHNlbmQgdGhlCisgKiBjb21tYW5kIHRvIGZpcm13YXJlLgorICovCitpbnQgbXdpZmlleF9hc3NvY2lhdGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJICAgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MpCit7CisJdTggY3VycmVudF9ic3NpZFtFVEhfQUxFTl07CisKKwkvKiBSZXR1cm4gZXJyb3IgaWYgdGhlIGFkYXB0ZXIgb3IgdGFibGUgZW50cnkgaXMgbm90IG1hcmtlZCBhcyBpbmZyYSAqLworCWlmICgocHJpdi0+YnNzX21vZGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfHwKKwkgICAgKGJzc19kZXNjLT5ic3NfbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSkKKwkJcmV0dXJuIC0xOworCisJbWVtY3B5KCZjdXJyZW50X2Jzc2lkLAorCSAgICAgICAmcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLm1hY19hZGRyZXNzLAorCSAgICAgICBzaXplb2YoY3VycmVudF9ic3NpZCkpOworCisJLyogQ2xlYXIgYW55IHBhc3QgYXNzb2NpYXRpb24gcmVzcG9uc2Ugc3RvcmVkIGZvciBhcHBsaWNhdGlvbgorCSAgIHJldHJpZXZhbCAqLworCXByaXYtPmFzc29jX3JzcF9zaXplID0gMDsKKworCXJldHVybiBtd2lmaWV4X3NlbmRfY21kX3N5bmMocHJpdiwgSG9zdENtZF9DTURfODAyXzExX0FTU09DSUFURSwKKwkJCQkgICAgSG9zdENtZF9BQ1RfR0VOX1NFVCwgMCwgYnNzX2Rlc2MpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBzdGFydHMgYW4gYWQtaG9jIG5ldHdvcmsuCisgKgorICogSXQgY2FsbHMgdGhlIGNvbW1hbmQgcHJlcGFyYXRpb24gcm91dGluZSB0byBzZW5kIHRoZSBjb21tYW5kIHRvIGZpcm13YXJlLgorICovCitpbnQKK213aWZpZXhfYWRob2Nfc3RhcnQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJICAgIHN0cnVjdCBtd2lmaWV4XzgwMl8xMV9zc2lkICphZGhvY19zc2lkKQoreworCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiaW5mbzogQWRob2MgQ2hhbm5lbCA9ICVkXG4iLAorCQlwcml2LT5hZGhvY19jaGFubmVsKTsKKwlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IGN1cnJfYnNzX3BhcmFtcy5jaGFubmVsID0gJWRcbiIsCisJICAgICAgIHByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5jaGFubmVsKTsKKwlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IGN1cnJfYnNzX3BhcmFtcy5iYW5kID0gJWRcbiIsCisJICAgICAgIHByaXYtPmN1cnJfYnNzX3BhcmFtcy5iYW5kKTsKKworCXJldHVybiBtd2lmaWV4X3NlbmRfY21kX3N5bmMocHJpdiwgSG9zdENtZF9DTURfODAyXzExX0FEX0hPQ19TVEFSVCwKKwkJCQkgICAgSG9zdENtZF9BQ1RfR0VOX1NFVCwgMCwgYWRob2Nfc3NpZCk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGpvaW5zIGFuIGFkLWhvYyBuZXR3b3JrIGZvdW5kIGluIGEgcHJldmlvdXMgc2Nhbi4KKyAqCisgKiBJdCBjYWxscyB0aGUgY29tbWFuZCBwcmVwYXJhdGlvbiByb3V0aW5lIHRvIHNlbmQgdGhlIGNvbW1hbmQgdG8gZmlybXdhcmUsCisgKiBpZiBhbHJlYWR5IG5vdCBjb25uZWN0ZWQgdG8gdGhlIHJlcXVlc3RlZCBTU0lELgorICovCitpbnQgbXdpZmlleF9hZGhvY19qb2luKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCSAgICAgICBzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYykKK3sKKwlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IGFkaG9jIGpvaW46IGN1cnJfYnNzIHNzaWQgPSVzXG4iLAorCSAgICAgICBwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3Iuc3NpZC5zc2lkKTsKKwlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IGFkaG9jIGpvaW46IGN1cnJfYnNzIHNzaWRfbGVuID0ldVxuIiwKKwkgICAgICAgcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLnNzaWQuc3NpZF9sZW4pOworCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiaW5mbzogYWRob2Mgam9pbjogc3NpZCA9JXNcbiIsCisJCWJzc19kZXNjLT5zc2lkLnNzaWQpOworCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiaW5mbzogYWRob2Mgam9pbjogc3NpZF9sZW4gPSV1XG4iLAorCSAgICAgICBic3NfZGVzYy0+c3NpZC5zc2lkX2xlbik7CisKKwkvKiBDaGVjayBpZiB0aGUgcmVxdWVzdGVkIFNTSUQgaXMgYWxyZWFkeSBqb2luZWQgKi8KKwlpZiAocHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLnNzaWQuc3NpZF9sZW4gJiYKKwkgICAgIW13aWZpZXhfc3NpZF9jbXAoJmJzc19kZXNjLT5zc2lkLAorCQkJICAgICAgJnByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5zc2lkKSAmJgorCSAgICAocHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLmJzc19tb2RlID09CisJCQkJCQkJTkw4MDIxMV9JRlRZUEVfQURIT0MpKSB7CisJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiaW5mbzogQURIT0NfSl9DTUQ6IG5ldyBhZC1ob2MgU1NJRCIKKwkJCSIgaXMgdGhlIHNhbWUgYXMgY3VycmVudDsgbm90IGF0dGVtcHRpbmcgdG8gcmUtam9pblxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IGN1cnJfYnNzX3BhcmFtcy5jaGFubmVsID0gJWRcbiIsCisJICAgICAgIHByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5jaGFubmVsKTsKKwlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IGN1cnJfYnNzX3BhcmFtcy5iYW5kID0gJWNcbiIsCisJICAgICAgIHByaXYtPmN1cnJfYnNzX3BhcmFtcy5iYW5kKTsKKworCXJldHVybiBtd2lmaWV4X3NlbmRfY21kX3N5bmMocHJpdiwgSG9zdENtZF9DTURfODAyXzExX0FEX0hPQ19KT0lOLAorCQkJCSAgICBIb3N0Q21kX0FDVF9HRU5fU0VULCAwLCBic3NfZGVzYyk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGRlYXV0aGVudGljYXRlcy9kaXNjb25uZWN0cyBmcm9tIGluZnJhIG5ldHdvcmsgYnkgc2VuZGluZworICogZGVhdXRoZW50aWNhdGlvbiByZXF1ZXN0LgorICovCitzdGF0aWMgaW50IG13aWZpZXhfZGVhdXRoZW50aWNhdGVfaW5mcmEoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggKm1hYykKK3sKKwl1OCBtYWNfYWRkcmVzc1tFVEhfQUxFTl07CisJaW50IHJldDsKKwl1OCB6ZXJvX21hY1tFVEhfQUxFTl0gPSB7IDAsIDAsIDAsIDAsIDAsIDAgfTsKKworCWlmIChtYWMpIHsKKwkJaWYgKCFtZW1jbXAobWFjLCB6ZXJvX21hYywgc2l6ZW9mKHplcm9fbWFjKSkpCisJCQltZW1jcHkoKHU4ICopICZtYWNfYWRkcmVzcywKKwkJCSAgICAgICAodTggKikgJnByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci4KKwkJCSAgICAgICBtYWNfYWRkcmVzcywgRVRIX0FMRU4pOworCQllbHNlCisJCQltZW1jcHkoKHU4ICopICZtYWNfYWRkcmVzcywgKHU4ICopIG1hYywgRVRIX0FMRU4pOworCX0gZWxzZSB7CisJCW1lbWNweSgodTggKikgJm1hY19hZGRyZXNzLCAodTggKikgJnByaXYtPmN1cnJfYnNzX3BhcmFtcy4KKwkJICAgICAgIGJzc19kZXNjcmlwdG9yLm1hY19hZGRyZXNzLCBFVEhfQUxFTik7CisJfQorCisJcmV0ID0gbXdpZmlleF9zZW5kX2NtZF9zeW5jKHByaXYsIEhvc3RDbWRfQ01EXzgwMl8xMV9ERUFVVEhFTlRJQ0FURSwKKwkJCQkgICAgSG9zdENtZF9BQ1RfR0VOX1NFVCwgMCwgJm1hY19hZGRyZXNzKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGRlYXV0aGVudGljYXRlcy9kaXNjb25uZWN0cyBmcm9tIGEgQlNTLgorICoKKyAqIEluIGNhc2Ugb2YgaW5mcmEgbWFkZSwgaXQgc2VuZHMgZGVhdXRoZW50aWNhdGlvbiByZXF1ZXN0LCBhbmQKKyAqIGluIGNhc2Ugb2YgYWQtaG9jIG1vZGUsIGEgc3RvcCBuZXR3b3JrIHJlcXVlc3QgaXMgc2VudCB0byB0aGUgZmlybXdhcmUuCisgKi8KK2ludCBtd2lmaWV4X2RlYXV0aGVudGljYXRlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHU4ICptYWMpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAocHJpdi0+bWVkaWFfY29ubmVjdGVkKSB7CisJCWlmIChwcml2LT5ic3NfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCQlyZXQgPSBtd2lmaWV4X2RlYXV0aGVudGljYXRlX2luZnJhKHByaXYsIG1hYyk7CisJCX0gZWxzZSBpZiAocHJpdi0+YnNzX21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwkJCXJldCA9IG13aWZpZXhfc2VuZF9jbWRfc3luYyhwcml2LAorCQkJCQkJSG9zdENtZF9DTURfODAyXzExX0FEX0hPQ19TVE9QLAorCQkJCQkJSG9zdENtZF9BQ1RfR0VOX1NFVCwgMCwgTlVMTCk7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwobXdpZmlleF9kZWF1dGhlbnRpY2F0ZSk7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIGJhbmQgdG8gcmFkaW8gdHlwZSB1c2VkIGluIGNoYW5uZWwgVExWLgorICovCit1OAorbXdpZmlleF9iYW5kX3RvX3JhZGlvX3R5cGUodTggYmFuZCkKK3sKKwlzd2l0Y2ggKGJhbmQpIHsKKwljYXNlIEJBTkRfQToKKwljYXNlIEJBTkRfQU46CisJY2FzZSBCQU5EX0EgfCBCQU5EX0FOOgorCQlyZXR1cm4gSG9zdENtZF9TQ0FOX1JBRElPX1RZUEVfQTsKKwljYXNlIEJBTkRfQjoKKwljYXNlIEJBTkRfRzoKKwljYXNlIEJBTkRfQiB8IEJBTkRfRzoKKwlkZWZhdWx0OgorCQlyZXR1cm4gSG9zdENtZF9TQ0FOX1JBRElPX1RZUEVfQkc7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDU4MjI1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9tYWluLmMKQEAgLTAsMCArMSwxMDU1IEBACisvKgorICogTWFydmVsbCBXaXJlbGVzcyBMQU4gZGV2aWNlIGRyaXZlcjogbWFqb3IgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRlcm5hdGlvbmFsCisgKiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKyAqICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgdXNlLCByZWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgaW4KKyAqIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UsIGEgY29weSBvZiB3aGljaAorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0Egb3Igb24gdGhlCisgKiB3b3JsZHdpZGUgd2ViIGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQuCisgKgorICogVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4gIFRoZSBMaWNlbnNlIHByb3ZpZGVzIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dAorICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLgorICovCisKKyNpbmNsdWRlICJtYWluLmgiCisjaW5jbHVkZSAid21tLmgiCisjaW5jbHVkZSAiY2ZnODAyMTEuaCIKKyNpbmNsdWRlICIxMW4uaCIKKworI2RlZmluZSBWRVJTSU9OCSIxLjAiCisKK2NvbnN0IGNoYXIgZHJpdmVyX3ZlcnNpb25bXSA9ICJtd2lmaWV4ICIgVkVSU0lPTiAiICglcykgIjsKKworc3RydWN0IG13aWZpZXhfYWRhcHRlciAqZ19hZGFwdGVyOworRVhQT1JUX1NZTUJPTF9HUEwoZ19hZGFwdGVyKTsKKworc3RhdGljIHN0cnVjdCBtd2lmaWV4X2Jzc19hdHRyIG13aWZpZXhfYnNzX3N0YVtdID0geworCXtNV0lGSUVYX0JTU19UWVBFX1NUQSwgTVdJRklFWF9EQVRBX0ZSQU1FX1RZUEVfRVRIX0lJLCB0cnVlLCAwLCAwfSwKK307CisKK3N0YXRpYyBpbnQgZHJ2X21vZGUgPSBEUlZfTU9ERV9TVEE7CisKK3N0YXRpYyBjaGFyIGZ3X25hbWVbMzJdID0gREVGQVVMVF9GV19OQU1FOworCisvKiBTdXBwb3J0ZWQgZHJ2X21vZGUgdGFibGUgKi8KK3N0YXRpYyBzdHJ1Y3QgbXdpZmlleF9kcnZfbW9kZSBtd2lmaWV4X2Rydl9tb2RlX3RibFtdID0geworCXsKKwkJLmRydl9tb2RlID0gRFJWX01PREVfU1RBLAorCQkuaW50Zl9udW0gPSBBUlJBWV9TSVpFKG13aWZpZXhfYnNzX3N0YSksCisJCS5ic3NfYXR0ciA9IG13aWZpZXhfYnNzX3N0YSwKKwl9LAorfTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIHRoZSBkZXZpY2UgYW5kIHBlcmZvcm1zIGFsbCB0aGUgbmVjZXNzYXJ5CisgKiBpbml0aWFsaXphdGlvbnMuCisgKgorICogVGhlIGZvbGxvd2luZyBpbml0aWFsaXphdGlvbiBvcGVyYXRpb25zIGFyZSBwZXJmb3JtZWQgLQorICogICAgICAtIEFsbG9jYXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKiAgICAgIC0gU2F2ZSBpbnRlcmZhY2Ugc3BlY2lmaWMgb3BlcmF0aW9ucyB0YWJsZSBpbiBhZGFwdGVyCisgKiAgICAgIC0gQ2FsbCBpbnRlcmZhY2Ugc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gcm91dGluZQorICogICAgICAtIEFsbG9jYXRlIHByaXZhdGUgc3RydWN0dXJlcworICogICAgICAtIFNldCBkZWZhdWx0IGFkYXB0ZXIgc3RydWN0dXJlIHBhcmFtZXRlcnMKKyAqICAgICAgLSBJbml0aWFsaXplIGxvY2tzCisgKgorICogSW4gY2FzZSBvZiBhbnkgZXJyb3JzIGR1cmluZyBpbml0dGlhbGl6YXRpb24sIHRoaXMgZnVuY3Rpb24gYWxzbyBlbnN1cmVzCisgKiBwcm9wZXIgY2xlYW51cCBiZWZvcmUgZXhpdGluZy4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X3JlZ2lzdGVyKHZvaWQgKmNhcmQsIHN0cnVjdCBtd2lmaWV4X2lmX29wcyAqaWZfb3BzLAorCQkJICAgIHN0cnVjdCBtd2lmaWV4X2Rydl9tb2RlICpkcnZfbW9kZV9wdHIpCit7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcjsKKwlpbnQgaTsKKworCWFkYXB0ZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhZGFwdGVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWdfYWRhcHRlciA9IGFkYXB0ZXI7CisJYWRhcHRlci0+Y2FyZCA9IGNhcmQ7CisKKwkvKiBTYXZlIGludGVyZmFjZSBzcGVjaWZpYyBvcGVyYXRpb25zIGluIGFkYXB0ZXIgKi8KKwltZW1tb3ZlKCZhZGFwdGVyLT5pZl9vcHMsIGlmX29wcywgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2lmX29wcykpOworCisJLyogY2FyZCBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiBoYXMgYmVlbiBkZWZlcnJlZCB1bnRpbCBub3cgLi4gKi8KKwlpZiAoYWRhcHRlci0+aWZfb3BzLmluaXRfaWYoYWRhcHRlcikpCisJCWdvdG8gZXJyb3I7CisKKwlhZGFwdGVyLT5wcml2X251bSA9IDA7CisJZm9yIChpID0gMDsgaSA8IGRydl9tb2RlX3B0ci0+aW50Zl9udW07IGkrKykgeworCQlhZGFwdGVyLT5wcml2W2ldID0gTlVMTDsKKworCQlpZiAoIWRydl9tb2RlX3B0ci0+YnNzX2F0dHJbaV0uYWN0aXZlKQorCQkJY29udGludWU7CisKKwkJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBwcml2YXRlIHN0cnVjdHVyZSAqLworCQlhZGFwdGVyLT5wcml2W2ldID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSksCisJCQkJR0ZQX0tFUk5FTCk7CisJCWlmICghYWRhcHRlci0+cHJpdltpXSkgeworCQkJZGV2X2VycihhZGFwdGVyLT5kZXYsICIlczogZmFpbGVkIHRvIGFsbG9jIHByaXZbJWRdXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBpKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKworCQlhZGFwdGVyLT5wcml2X251bSsrOworCQlhZGFwdGVyLT5wcml2W2ldLT5hZGFwdGVyID0gYWRhcHRlcjsKKwkJLyogU2F2ZSBic3NfdHlwZSwgZnJhbWVfdHlwZSAmIGJzc19wcmlvcml0eSAqLworCQlhZGFwdGVyLT5wcml2W2ldLT5ic3NfdHlwZSA9IGRydl9tb2RlX3B0ci0+YnNzX2F0dHJbaV0uYnNzX3R5cGU7CisJCWFkYXB0ZXItPnByaXZbaV0tPmZyYW1lX3R5cGUgPQorCQkJCQlkcnZfbW9kZV9wdHItPmJzc19hdHRyW2ldLmZyYW1lX3R5cGU7CisJCWFkYXB0ZXItPnByaXZbaV0tPmJzc19wcmlvcml0eSA9CisJCQkJCWRydl9tb2RlX3B0ci0+YnNzX2F0dHJbaV0uYnNzX3ByaW9yaXR5OworCisJCWlmIChkcnZfbW9kZV9wdHItPmJzc19hdHRyW2ldLmJzc190eXBlID09IE1XSUZJRVhfQlNTX1RZUEVfU1RBKQorCQkJYWRhcHRlci0+cHJpdltpXS0+YnNzX3JvbGUgPSBNV0lGSUVYX0JTU19ST0xFX1NUQTsKKwkJZWxzZSBpZiAoZHJ2X21vZGVfcHRyLT5ic3NfYXR0cltpXS5ic3NfdHlwZSA9PQorCQkJCQkJCU1XSUZJRVhfQlNTX1RZUEVfVUFQKQorCQkJYWRhcHRlci0+cHJpdltpXS0+YnNzX3JvbGUgPSBNV0lGSUVYX0JTU19ST0xFX1VBUDsKKworCQkvKiBTYXZlIGJzc19pbmRleCAmIGJzc19udW0gKi8KKwkJYWRhcHRlci0+cHJpdltpXS0+YnNzX2luZGV4ID0gaTsKKwkJYWRhcHRlci0+cHJpdltpXS0+YnNzX251bSA9IGRydl9tb2RlX3B0ci0+YnNzX2F0dHJbaV0uYnNzX251bTsKKwl9CisJYWRhcHRlci0+ZHJ2X21vZGUgPSBkcnZfbW9kZV9wdHI7CisKKwlpZiAobXdpZmlleF9pbml0X2xvY2tfbGlzdChhZGFwdGVyKSkKKwkJZ290byBlcnJvcjsKKworCWluaXRfdGltZXIoJmFkYXB0ZXItPmNtZF90aW1lcik7CisJYWRhcHRlci0+Y21kX3RpbWVyLmZ1bmN0aW9uID0gbXdpZmlleF9jbWRfdGltZW91dF9mdW5jOworCWFkYXB0ZXItPmNtZF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGFkYXB0ZXI7CisKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBsZWF2ZSBtd2lmaWV4X3JlZ2lzdGVyIHdpdGggZXJyb3JcbiIpOworCisJbXdpZmlleF9mcmVlX2xvY2tfbGlzdChhZGFwdGVyKTsKKwlmb3IgKGkgPSAwOyBpIDwgZHJ2X21vZGVfcHRyLT5pbnRmX251bTsgaSsrKQorCQlrZnJlZShhZGFwdGVyLT5wcml2W2ldKTsKKwlrZnJlZShhZGFwdGVyKTsKKworCXJldHVybiAtMTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gdW5yZWdpc3RlcnMgdGhlIGRldmljZSBhbmQgcGVyZm9ybXMgYWxsIHRoZSBuZWNlc3NhcnkKKyAqIGNsZWFudXBzLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgY2xlYW51cCBvcGVyYXRpb25zIGFyZSBwZXJmb3JtZWQgLQorICogICAgICAtIEZyZWUgdGhlIHRpbWVycworICogICAgICAtIEZyZWUgYmVhY29uIGJ1ZmZlcnMKKyAqICAgICAgLSBGcmVlIHByaXZhdGUgc3RydWN0dXJlcworICogICAgICAtIEZyZWUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIGludCBtd2lmaWV4X3VucmVnaXN0ZXIoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzMzIgaTsKKworCWRlbF90aW1lcigmYWRhcHRlci0+Y21kX3RpbWVyKTsKKworCS8qIEZyZWUgcHJpdmF0ZSBzdHJ1Y3R1cmVzICovCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPnByaXZfbnVtOyBpKyspIHsKKwkJaWYgKGFkYXB0ZXItPnByaXZbaV0pIHsKKwkJCW13aWZpZXhfZnJlZV9jdXJyX2JjbihhZGFwdGVyLT5wcml2W2ldKTsKKwkJCWtmcmVlKGFkYXB0ZXItPnByaXZbaV0pOworCQl9CisJfQorCisJa2ZyZWUoYWRhcHRlcik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGUgbWFpbiBwcm9jZXNzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIG1haW4gcHJvY2VkdXJlIG9mIHRoZSBkcml2ZXIgYW5kIGhhbmRsZXMgdmFyaW91cyBkcml2ZXIKKyAqIG9wZXJhdGlvbnMuIEl0IHJ1bnMgaW4gYSBsb29wIGFuZCBwcm92aWRlcyB0aGUgY29yZSBmdW5jdGlvbmFsaXRpZXMuCisgKgorICogVGhlIG1haW4gcmVzcG9uc2liaWxpdGllcyBvZiB0aGlzIGZ1bmN0aW9uIGFyZSAtCisgKiAgICAgIC0gRW5zdXJlIGNvbmN1cnJlbmN5IGNvbnRyb2wKKyAqICAgICAgLSBIYW5kbGUgcGVuZGluZyBpbnRlcnJ1cHRzIGFuZCBjYWxsIGludGVycnVwdCBoYW5kbGVycworICogICAgICAtIFdha2UgdXAgdGhlIGNhcmQgaWYgcmVxdWlyZWQKKyAqICAgICAgLSBIYW5kbGUgY29tbWFuZCByZXNwb25zZXMgYW5kIGNhbGwgcmVzcG9uc2UgaGFuZGxlcnMKKyAqICAgICAgLSBIYW5kbGUgZXZlbnRzIGFuZCBjYWxsIGV2ZW50IGhhbmRsZXJzCisgKiAgICAgIC0gRXhlY3V0ZSBwZW5kaW5nIGNvbW1hbmRzCisgKiAgICAgIC0gVHJhbnNtaXQgcGVuZGluZyBkYXRhIHBhY2tldHMKKyAqLworaW50IG13aWZpZXhfbWFpbl9wcm9jZXNzKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5tYWluX3Byb2NfbG9jaywgZmxhZ3MpOworCisJLyogQ2hlY2sgaWYgYWxyZWFkeSBwcm9jZXNzaW5nICovCisJaWYgKGFkYXB0ZXItPm13aWZpZXhfcHJvY2Vzc2luZykgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5tYWluX3Byb2NfbG9jaywgZmxhZ3MpOworCQlnb3RvIGV4aXRfbWFpbl9wcm9jOworCX0gZWxzZSB7CisJCWFkYXB0ZXItPm13aWZpZXhfcHJvY2Vzc2luZyA9IHRydWU7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPm1haW5fcHJvY19sb2NrLCBmbGFncyk7CisJfQorcHJvY2Vzc19zdGFydDoKKwlkbyB7CisJCWlmICgoYWRhcHRlci0+aHdfc3RhdHVzID09IE1XSUZJRVhfSFdfU1RBVFVTX0NMT1NJTkcpIHx8CisJCSAgICAoYWRhcHRlci0+aHdfc3RhdHVzID09IE1XSUZJRVhfSFdfU1RBVFVTX05PVF9SRUFEWSkpCisJCQlicmVhazsKKworCQkvKiBIYW5kbGUgcGVuZGluZyBpbnRlcnJ1cHQgaWYgYW55ICovCisJCWlmIChhZGFwdGVyLT5pbnRfc3RhdHVzKSB7CisJCQlpZiAoYWRhcHRlci0+aHNfYWN0aXZhdGVkKQorCQkJCW13aWZpZXhfcHJvY2Vzc19oc19jb25maWcoYWRhcHRlcik7CisJCQlhZGFwdGVyLT5pZl9vcHMucHJvY2Vzc19pbnRfc3RhdHVzKGFkYXB0ZXIpOworCQl9CisKKwkJLyogTmVlZCB0byB3YWtlIHVwIHRoZSBjYXJkID8gKi8KKwkJaWYgKChhZGFwdGVyLT5wc19zdGF0ZSA9PSBQU19TVEFURV9TTEVFUCkgJiYKKwkJICAgIChhZGFwdGVyLT5wbV93YWtldXBfY2FyZF9yZXEgJiYKKwkJICAgICAhYWRhcHRlci0+cG1fd2FrZXVwX2Z3X3RyeSkgJiYKKwkJICAgIChpc19jb21tYW5kX3BlbmRpbmcoYWRhcHRlcikKKwkJICAgICB8fCAhbXdpZmlleF93bW1fbGlzdHNfZW1wdHkoYWRhcHRlcikpKSB7CisJCQlhZGFwdGVyLT5wbV93YWtldXBfZndfdHJ5ID0gdHJ1ZTsKKwkJCWFkYXB0ZXItPmlmX29wcy53YWtldXAoYWRhcHRlcik7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoSVNfQ0FSRF9SWF9SQ1ZEKGFkYXB0ZXIpKSB7CisJCQlhZGFwdGVyLT5wbV93YWtldXBfZndfdHJ5ID0gZmFsc2U7CisJCQlpZiAoYWRhcHRlci0+cHNfc3RhdGUgPT0gUFNfU1RBVEVfU0xFRVApCisJCQkJYWRhcHRlci0+cHNfc3RhdGUgPSBQU19TVEFURV9BV0FLRTsKKwkJfSBlbHNlIHsKKwkJCS8qIFdlIGhhdmUgdHJpZWQgdG8gd2FrZXVwIHRoZSBjYXJkIGFscmVhZHkgKi8KKwkJCWlmIChhZGFwdGVyLT5wbV93YWtldXBfZndfdHJ5KQorCQkJCWJyZWFrOworCQkJaWYgKGFkYXB0ZXItPnBzX3N0YXRlICE9IFBTX1NUQVRFX0FXQUtFIHx8CisJCQkgICAgYWRhcHRlci0+dHhfbG9ja19mbGFnKQorCQkJCWJyZWFrOworCisJCQlpZiAoYWRhcHRlci0+c2Nhbl9wcm9jZXNzaW5nIHx8IGFkYXB0ZXItPmRhdGFfc2VudAorCQkJICAgIHx8IG13aWZpZXhfd21tX2xpc3RzX2VtcHR5KGFkYXB0ZXIpKSB7CisJCQkJaWYgKGFkYXB0ZXItPmNtZF9zZW50IHx8IGFkYXB0ZXItPmN1cnJfY21kCisJCQkJICAgIHx8ICghaXNfY29tbWFuZF9wZW5kaW5nKGFkYXB0ZXIpKSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQkvKiBDaGVjayBmb3IgQ21kIFJlc3AgKi8KKwkJaWYgKGFkYXB0ZXItPmNtZF9yZXNwX3JlY2VpdmVkKSB7CisJCQlhZGFwdGVyLT5jbWRfcmVzcF9yZWNlaXZlZCA9IGZhbHNlOworCQkJbXdpZmlleF9wcm9jZXNzX2NtZHJlc3AoYWRhcHRlcik7CisKKwkJCS8qIGNhbGwgbXdpZmlleCBiYWNrIHdoZW4gaW5pdF9mdyBpcyBkb25lICovCisJCQlpZiAoYWRhcHRlci0+aHdfc3RhdHVzID09IE1XSUZJRVhfSFdfU1RBVFVTX0lOSVRfRE9ORSkgeworCQkJCWFkYXB0ZXItPmh3X3N0YXR1cyA9IE1XSUZJRVhfSFdfU1RBVFVTX1JFQURZOworCQkJCW13aWZpZXhfaW5pdF9md19jb21wbGV0ZShhZGFwdGVyKTsKKwkJCX0KKwkJfQorCisJCS8qIENoZWNrIGZvciBldmVudCAqLworCQlpZiAoYWRhcHRlci0+ZXZlbnRfcmVjZWl2ZWQpIHsKKwkJCWFkYXB0ZXItPmV2ZW50X3JlY2VpdmVkID0gZmFsc2U7CisJCQltd2lmaWV4X3Byb2Nlc3NfZXZlbnQoYWRhcHRlcik7CisJCX0KKworCQkvKiBDaGVjayBpZiB3ZSBuZWVkIHRvIGNvbmZpcm0gU2xlZXAgUmVxdWVzdAorCQkgICByZWNlaXZlZCBwcmV2aW91c2x5ICovCisJCWlmIChhZGFwdGVyLT5wc19zdGF0ZSA9PSBQU19TVEFURV9QUkVfU0xFRVApIHsKKwkJCWlmICghYWRhcHRlci0+Y21kX3NlbnQgJiYgIWFkYXB0ZXItPmN1cnJfY21kKQorCQkJCW13aWZpZXhfY2hlY2tfcHNfY29uZChhZGFwdGVyKTsKKwkJfQorCisJCS8qICogVGhlIHBzX3N0YXRlIG1heSBoYXZlIGJlZW4gY2hhbmdlZCBkdXJpbmcgcHJvY2Vzc2luZyBvZgorCQkgKiBTbGVlcCBSZXF1ZXN0IGV2ZW50LgorCQkgKi8KKwkJaWYgKChhZGFwdGVyLT5wc19zdGF0ZSA9PSBQU19TVEFURV9TTEVFUCkKKwkJICAgIHx8IChhZGFwdGVyLT5wc19zdGF0ZSA9PSBQU19TVEFURV9QUkVfU0xFRVApCisJCSAgICB8fCAoYWRhcHRlci0+cHNfc3RhdGUgPT0gUFNfU1RBVEVfU0xFRVBfQ0ZNKQorCQkgICAgfHwgYWRhcHRlci0+dHhfbG9ja19mbGFnKQorCQkJY29udGludWU7CisKKwkJaWYgKCFhZGFwdGVyLT5jbWRfc2VudCAmJiAhYWRhcHRlci0+Y3Vycl9jbWQpIHsKKwkJCWlmIChtd2lmaWV4X2V4ZWNfbmV4dF9jbWQoYWRhcHRlcikgPT0gLTEpIHsKKwkJCQlyZXQgPSAtMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICghYWRhcHRlci0+c2Nhbl9wcm9jZXNzaW5nICYmICFhZGFwdGVyLT5kYXRhX3NlbnQgJiYKKwkJICAgICFtd2lmaWV4X3dtbV9saXN0c19lbXB0eShhZGFwdGVyKSkgeworCQkJbXdpZmlleF93bW1fcHJvY2Vzc190eChhZGFwdGVyKTsKKwkJCWlmIChhZGFwdGVyLT5oc19hY3RpdmF0ZWQpIHsKKwkJCQlhZGFwdGVyLT5pc19oc19jb25maWd1cmVkID0gZmFsc2U7CisJCQkJbXdpZmlleF9oc19hY3RpdmF0ZWRfZXZlbnQKKwkJCQkJKG13aWZpZXhfZ2V0X3ByaXYKKwkJCQkJIChhZGFwdGVyLCBNV0lGSUVYX0JTU19ST0xFX0FOWSksCisJCQkJCSBmYWxzZSk7CisJCQl9CisJCX0KKworCQlpZiAoYWRhcHRlci0+ZGVsYXlfbnVsbF9wa3QgJiYgIWFkYXB0ZXItPmNtZF9zZW50ICYmCisJCSAgICAhYWRhcHRlci0+Y3Vycl9jbWQgJiYgIWlzX2NvbW1hbmRfcGVuZGluZyhhZGFwdGVyKQorCQkgICAgJiYgbXdpZmlleF93bW1fbGlzdHNfZW1wdHkoYWRhcHRlcikpIHsKKwkJCWlmICghbXdpZmlleF9zZW5kX251bGxfcGFja2V0CisJCQkgICAgKG13aWZpZXhfZ2V0X3ByaXYoYWRhcHRlciwgTVdJRklFWF9CU1NfUk9MRV9TVEEpLAorCQkJICAgICBNV0lGSUVYX1R4UERfUE9XRVJfTUdNVF9OVUxMX1BBQ0tFVCB8CisJCQkgICAgIE1XSUZJRVhfVHhQRF9QT1dFUl9NR01UX0xBU1RfUEFDS0VUKSkgeworCQkJCWFkYXB0ZXItPmRlbGF5X251bGxfcGt0ID0gZmFsc2U7CisJCQkJYWRhcHRlci0+cHNfc3RhdGUgPSBQU19TVEFURV9TTEVFUDsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAodHJ1ZSk7CisKKwlpZiAoKGFkYXB0ZXItPmludF9zdGF0dXMpIHx8IElTX0NBUkRfUlhfUkNWRChhZGFwdGVyKSkKKwkJZ290byBwcm9jZXNzX3N0YXJ0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPm1haW5fcHJvY19sb2NrLCBmbGFncyk7CisJYWRhcHRlci0+bXdpZmlleF9wcm9jZXNzaW5nID0gZmFsc2U7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+bWFpbl9wcm9jX2xvY2ssIGZsYWdzKTsKKworZXhpdF9tYWluX3Byb2M6CisJaWYgKGFkYXB0ZXItPmh3X3N0YXR1cyA9PSBNV0lGSUVYX0hXX1NUQVRVU19DTE9TSU5HKQorCQltd2lmaWV4X3NodXRkb3duX2RydihhZGFwdGVyKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgc29mdHdhcmUuCisgKgorICogVGhlIG1haW4gd29yayBpbmNsdWRlcyBhbGxvY2F0aW5nIGFuZCBpbml0aWFsaXppbmcgdGhlIGFkYXB0ZXIgc3RydWN0dXJlCisgKiBhbmQgaW5pdGlhbGl6aW5nIHRoZSBwcml2YXRlIHN0cnVjdHVyZXMuCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfaW5pdF9zdyh2b2lkICpjYXJkLCBzdHJ1Y3QgbXdpZmlleF9pZl9vcHMgKmlmX29wcykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgbXdpZmlleF9kcnZfbW9kZSAqZHJ2X21vZGVfcHRyOworCisJLyogZmluZCBtd2lmaWV4X2Rydl9tb2RlIGVudHJ5IGZyb20gbXdpZmlleF9kcnZfbW9kZV90YmwgKi8KKwlkcnZfbW9kZV9wdHIgPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG13aWZpZXhfZHJ2X21vZGVfdGJsKTsgaSsrKSB7CisJCWlmIChtd2lmaWV4X2Rydl9tb2RlX3RibFtpXS5kcnZfbW9kZSA9PSBkcnZfbW9kZSkgeworCQkJZHJ2X21vZGVfcHRyID0gJm13aWZpZXhfZHJ2X21vZGVfdGJsW2ldOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIWRydl9tb2RlX3B0cikgeworCQlwcl9lcnIoImludmFsaWQgZHJ2X21vZGU9JWRcbiIsIGRydl9tb2RlKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChtd2lmaWV4X3JlZ2lzdGVyKGNhcmQsIGlmX29wcywgZHJ2X21vZGVfcHRyKSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGZyZWVzIHRoZSBhZGFwdGVyIHN0cnVjdHVyZS4KKyAqCisgKiBBZGRpdGlvbmFsbHksIHRoaXMgY2xvc2VzIHRoZSBuZXRsaW5rIHNvY2tldCwgZnJlZXMgdGhlIHRpbWVycworICogYW5kIHByaXZhdGUgc3RydWN0dXJlcy4KKyAqLworc3RhdGljIHZvaWQgbXdpZmlleF9mcmVlX2FkYXB0ZXIoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoIWFkYXB0ZXIpIHsKKwkJcHJfZXJyKCIlczogYWRhcHRlciBpcyBOVUxMXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwltd2lmaWV4X3VucmVnaXN0ZXIoYWRhcHRlcik7CisJcHJfZGVidWcoImluZm86ICVzOiBmcmVlIGFkYXB0ZXJcbiIsIF9fZnVuY19fKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGhhcmR3YXJlIGFuZCBmaXJtd2FyZS4KKyAqCisgKiBUaGUgbWFpbiBpbml0aWFsaXphdGlvbiBzdGVwcyBmb2xsb3dlZCBhcmUgLQorICogICAgICAtIERvd25sb2FkIHRoZSBjb3JyZWN0IGZpcm13YXJlIHRvIGNhcmQKKyAqICAgICAgLSBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqICAgICAgLSBJbml0aWFsaXplIHRoZSBwcml2YXRlIHN0cnVjdHVyZXMKKyAqICAgICAgLSBJc3N1ZSB0aGUgaW5pdCBjb21tYW5kcyB0byBmaXJtd2FyZQorICovCitzdGF0aWMgaW50IG13aWZpZXhfaW5pdF9od19mdyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCWludCByZXQsIGVycjsKKwlzdHJ1Y3QgbXdpZmlleF9md19pbWFnZSBmdzsKKworCW1lbXNldCgmZncsIDAsIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9md19pbWFnZSkpOworCisJc3dpdGNoIChhZGFwdGVyLT5yZXZpc2lvbl9pZCkgeworCWNhc2UgU0Q4Nzg3X1cwOgorCWNhc2UgU0Q4Nzg3X1cxOgorCQlzdHJjcHkoZndfbmFtZSwgU0Q4Nzg3X1cxX0ZXX05BTUUpOworCQlicmVhazsKKwljYXNlIFNEODc4N19BMDoKKwljYXNlIFNEODc4N19BMToKKwkJc3RyY3B5KGZ3X25hbWUsIFNEODc4N19BWF9GV19OQU1FKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmYWRhcHRlci0+ZmlybXdhcmUsIGZ3X25hbWUsIGFkYXB0ZXItPmRldik7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJyZXF1ZXN0X2Zpcm13YXJlKCkgcmV0dXJuZWQiCisJCQkJIiBlcnJvciBjb2RlICUjeFxuIiwgZXJyKTsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZG9uZTsKKwl9CisJZncuZndfYnVmID0gKHU4ICopIGFkYXB0ZXItPmZpcm13YXJlLT5kYXRhOworCWZ3LmZ3X2xlbiA9IGFkYXB0ZXItPmZpcm13YXJlLT5zaXplOworCisJcmV0ID0gbXdpZmlleF9kbmxkX2Z3KGFkYXB0ZXIsICZmdyk7CisJaWYgKHJldCA9PSAtMSkKKwkJZ290byBkb25lOworCisJZGV2X25vdGljZShhZGFwdGVyLT5kZXYsICJXTEFOIEZXIGlzIGFjdGl2ZVxuIik7CisKKwlhZGFwdGVyLT5pbml0X3dhaXRfcV93b2tlbiA9IGZhbHNlOworCXJldCA9IG13aWZpZXhfaW5pdF9mdyhhZGFwdGVyKTsKKwlpZiAocmV0ID09IC0xKSB7CisJCWdvdG8gZG9uZTsKKwl9IGVsc2UgaWYgKCFyZXQpIHsKKwkJYWRhcHRlci0+aHdfc3RhdHVzID0gTVdJRklFWF9IV19TVEFUVVNfUkVBRFk7CisJCWdvdG8gZG9uZTsKKwl9CisJLyogV2FpdCBmb3IgbXdpZmlleF9pbml0IHRvIGNvbXBsZXRlICovCisJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGFkYXB0ZXItPmluaXRfd2FpdF9xLAorCQkJCSBhZGFwdGVyLT5pbml0X3dhaXRfcV93b2tlbik7CisJaWYgKGFkYXB0ZXItPmh3X3N0YXR1cyAhPSBNV0lGSUVYX0hXX1NUQVRVU19SRUFEWSkgeworCQlyZXQgPSAtMTsKKwkJZ290byBkb25lOworCX0KKwlyZXQgPSAwOworCitkb25lOgorCWlmIChhZGFwdGVyLT5maXJtd2FyZSkKKwkJcmVsZWFzZV9maXJtd2FyZShhZGFwdGVyLT5maXJtd2FyZSk7CisJaWYgKHJldCkKKwkJcmV0ID0gLTE7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZmlsbHMgYSBkcml2ZXIgYnVmZmVyLgorICoKKyAqIFRoZSBmdW5jdGlvbiBhc3NvY2lhdGVzIGEgZ2l2ZW4gU0tCIHdpdGggdGhlIHByb3ZpZGVkIGRyaXZlciBidWZmZXIKKyAqIGFuZCBhbHNvIHVwZGF0ZXMgc29tZSBvZiB0aGUgU0tCIHBhcmFtZXRlcnMsIGluY2x1ZGluZyBJUCBoZWFkZXIsCisgKiBwcmlvcml0eSBhbmQgdGltZXN0YW1wLgorICovCitzdGF0aWMgdm9pZAorbXdpZmlleF9maWxsX2J1ZmZlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBldGhoZHIgKmV0aDsKKwlzdHJ1Y3QgaXBoZHIgKmlwaDsKKwlzdHJ1Y3QgdGltZXZhbCB0djsKKwl1OCB0aWQgPSAwOworCisJZXRoID0gKHN0cnVjdCBldGhoZHIgKikgc2tiLT5kYXRhOworCXN3aXRjaCAoZXRoLT5oX3Byb3RvKSB7CisJY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKToKKwkJaXBoID0gaXBfaGRyKHNrYik7CisJCXRpZCA9IElQVE9TX1BSRUMoaXBoLT50b3MpOworCQlwcl9kZWJ1ZygiZGF0YTogcGFja2V0IHR5cGUgRVRIX1BfSVA6ICUwNHgsIHRpZD0lI3ggcHJpbz0lI3hcbiIsCisJCSAgICAgICBldGgtPmhfcHJvdG8sIHRpZCwgc2tiLT5wcmlvcml0eSk7CisJCWJyZWFrOworCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9BUlApOgorCQlwcl9kZWJ1ZygiZGF0YTogQVJQIHBhY2tldDogJTA0eFxuIiwgZXRoLT5oX3Byb3RvKTsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisvKiBPZmZzZXQgZm9yIFRPUyBmaWVsZCBpbiB0aGUgSVAgaGVhZGVyICovCisjZGVmaW5lIElQVE9TX09GRlNFVCA1CisJdGlkID0gKHRpZCA+PiBJUFRPU19PRkZTRVQpOworCXNrYi0+cHJpb3JpdHkgPSB0aWQ7CisJLyogUmVjb3JkIHRoZSBjdXJyZW50IHRpbWUgdGhlIHBhY2tldCB3YXMgcXVldWVkOyB1c2VkIHRvCisJICAgZGV0ZXJtaW5lIHRoZSBhbW91bnQgb2YgdGltZSB0aGUgcGFja2V0IHdhcyBxdWV1ZWQgaW4KKwkgICB0aGUgZHJpdmVyIGJlZm9yZSBpdCB3YXMgc2VudCB0byB0aGUgZmlybXdhcmUuCisJICAgVGhlIGRlbGF5IGlzIHRoZW4gc2VudCBhbG9uZyB3aXRoIHRoZSBwYWNrZXQgdG8gdGhlCisJICAgZmlybXdhcmUgZm9yIGFnZ3JlZ2F0ZSBkZWxheSBjYWxjdWxhdGlvbiBmb3Igc3RhdHMgYW5kCisJICAgTVNEVSBsaWZldGltZSBleHBpcnkuCisJICovCisJZG9fZ2V0dGltZW9mZGF5KCZ0dik7CisJc2tiLT50c3RhbXAgPSB0aW1ldmFsX3RvX2t0aW1lKHR2KTsKK30KKworLyoKKyAqIENGRzgwMi4xMSBuZXR3b3JrIGRldmljZSBoYW5kbGVyIGZvciBvcGVuLgorICoKKyAqIFN0YXJ0cyB0aGUgZGF0YSBxdWV1ZS4KKyAqLworc3RhdGljIGludAorbXdpZmlleF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENGRzgwMi4xMSBuZXR3b3JrIGRldmljZSBoYW5kbGVyIGZvciBjbG9zZS4KKyAqLworc3RhdGljIGludAorbXdpZmlleF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiAwOworfQorCisvKgorICogQ0ZHODAyLjExIG5ldHdvcmsgZGV2aWNlIGhhbmRsZXIgZm9yIGRhdGEgdHJhbnNtaXNzaW9uLgorICovCitzdGF0aWMgaW50Cittd2lmaWV4X2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPSBtd2lmaWV4X25ldGRldl9nZXRfcHJpdihkZXYpOworCXN0cnVjdCBza19idWZmICpuZXdfc2tiOworCXN0cnVjdCBtd2lmaWV4X3R4aW5mbyAqdHhfaW5mbzsKKworCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiZGF0YTogJWx1IEJTUyglZCk6IERhdGEgPD0ga2VybmVsXG4iLAorCQkJCWppZmZpZXMsIHByaXYtPmJzc19pbmRleCk7CisKKwlpZiAocHJpdi0+YWRhcHRlci0+c3VycHJpc2VfcmVtb3ZlZCkgeworCQlrZnJlZV9za2Ioc2tiKTsKKwkJcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFza2ItPmxlbiB8fCAoc2tiLT5sZW4gPiBFVEhfRlJBTUVfTEVOKSkgeworCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgIlR4OiBiYWQgc2tiIGxlbiAlZFxuIiwgc2tiLT5sZW4pOworCQlrZnJlZV9za2Ioc2tiKTsKKwkJcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKHNrYl9oZWFkcm9vbShza2IpIDwgTVdJRklFWF9NSU5fREFUQV9IRUFERVJfTEVOKSB7CisJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJImRhdGE6IFR4OiBpbnN1ZmZpY2llbnQgc2tiIGhlYWRyb29tICVkXG4iLAorCQkgICAgICAgc2tiX2hlYWRyb29tKHNrYikpOworCQkvKiBJbnN1ZmZpY2llbnQgc2tiIGhlYWRyb29tIC0gYWxsb2NhdGUgYSBuZXcgc2tiICovCisJCW5ld19za2IgPQorCQkJc2tiX3JlYWxsb2NfaGVhZHJvb20oc2tiLCBNV0lGSUVYX01JTl9EQVRBX0hFQURFUl9MRU4pOworCQlpZiAodW5saWtlbHkoIW5ld19za2IpKSB7CisJCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgIlR4OiBjYW5ub3QgYWxsb2NhIG5ld19za2JcbiIpOworCQkJa2ZyZWVfc2tiKHNrYik7CisJCQlwcml2LT5zdGF0cy50eF9kcm9wcGVkKys7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlrZnJlZV9za2Ioc2tiKTsKKwkJc2tiID0gbmV3X3NrYjsKKwkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiBuZXcgc2tiIGhlYWRyb29tZCAlZFxuIiwKKwkJCQlza2JfaGVhZHJvb20oc2tiKSk7CisJfQorCisJdHhfaW5mbyA9IE1XSUZJRVhfU0tCX1RYQ0Ioc2tiKTsKKwl0eF9pbmZvLT5ic3NfaW5kZXggPSBwcml2LT5ic3NfaW5kZXg7CisJbXdpZmlleF9maWxsX2J1ZmZlcihza2IpOworCisJbXdpZmlleF93bW1fYWRkX2J1Zl90eHF1ZXVlKHByaXYtPmFkYXB0ZXIsIHNrYik7CisJYXRvbWljX2luYygmcHJpdi0+YWRhcHRlci0+dHhfcGVuZGluZyk7CisKKwlpZiAoYXRvbWljX3JlYWQoJnByaXYtPmFkYXB0ZXItPnR4X3BlbmRpbmcpID49IE1BWF9UWF9QRU5ESU5HKSB7CisJCW5ldGlmX3N0b3BfcXVldWUocHJpdi0+bmV0ZGV2KTsKKwkJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJfQorCisJcXVldWVfd29yayhwcml2LT5hZGFwdGVyLT53b3JrcXVldWUsICZwcml2LT5hZGFwdGVyLT5tYWluX3dvcmspOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDRkc4MDIuMTEgbmV0d29yayBkZXZpY2UgaGFuZGxlciBmb3Igc2V0dGluZyBNQUMgYWRkcmVzcy4KKyAqLworc3RhdGljIGludAorbXdpZmlleF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikKK3sKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0gbXdpZmlleF9uZXRkZXZfZ2V0X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc29ja2FkZHIgKmh3X2FkZHIgPSAoc3RydWN0IHNvY2thZGRyICopIGFkZHI7CisJaW50IHJldDsKKworCW1lbWNweShwcml2LT5jdXJyX2FkZHIsIGh3X2FkZHItPnNhX2RhdGEsIEVUSF9BTEVOKTsKKworCS8qIFNlbmQgcmVxdWVzdCB0byBmaXJtd2FyZSAqLworCXJldCA9IG13aWZpZXhfc2VuZF9jbWRfc3luYyhwcml2LCBIb3N0Q21kX0NNRF84MDJfMTFfTUFDX0FERFJFU1MsCisJCQkJICAgIEhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsIE5VTEwpOworCisJaWYgKCFyZXQpCisJCW1lbWNweShwcml2LT5uZXRkZXYtPmRldl9hZGRyLCBwcml2LT5jdXJyX2FkZHIsIEVUSF9BTEVOKTsKKwllbHNlCisJCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LCAic2V0IG1hYyBhZGRyZXNzIGZhaWxlZDogcmV0PSVkIgorCQkJCQkgICAgIlxuIiwgcmV0KTsKKworCW1lbWNweShkZXYtPmRldl9hZGRyLCBwcml2LT5jdXJyX2FkZHIsIEVUSF9BTEVOKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBDRkc4MDIuMTEgbmV0d29yayBkZXZpY2UgaGFuZGxlciBmb3Igc2V0dGluZyBtdWx0aWNhc3QgbGlzdC4KKyAqLworc3RhdGljIHZvaWQgbXdpZmlleF9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0gbXdpZmlleF9uZXRkZXZfZ2V0X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbXdpZmlleF9tdWx0aWNhc3RfbGlzdCBtY2FzdF9saXN0OworCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgeworCQltY2FzdF9saXN0Lm1vZGUgPSBNV0lGSUVYX1BST01JU0NfTU9ERTsKKwl9IGVsc2UgaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwKKwkJICAgbmV0ZGV2X21jX2NvdW50KGRldikgPiBNV0lGSUVYX01BWF9NVUxUSUNBU1RfTElTVF9TSVpFKSB7CisJCW1jYXN0X2xpc3QubW9kZSA9IE1XSUZJRVhfQUxMX01VTFRJX01PREU7CisJfSBlbHNlIHsKKwkJbWNhc3RfbGlzdC5tb2RlID0gTVdJRklFWF9NVUxUSUNBU1RfTU9ERTsKKwkJaWYgKG5ldGRldl9tY19jb3VudChkZXYpKQorCQkJbWNhc3RfbGlzdC5udW1fbXVsdGljYXN0X2FkZHIgPQorCQkJCW13aWZpZXhfY29weV9tY2FzdF9hZGRyKCZtY2FzdF9saXN0LCBkZXYpOworCX0KKwltd2lmaWV4X3JlcXVlc3Rfc2V0X211bHRpY2FzdF9saXN0KHByaXYsICZtY2FzdF9saXN0KTsKK30KKworLyoKKyAqIENGRzgwMi4xMSBuZXR3b3JrIGRldmljZSBoYW5kbGVyIGZvciB0cmFuc21pc3Npb24gdGltZW91dC4KKyAqLworc3RhdGljIHZvaWQKK213aWZpZXhfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPSBtd2lmaWV4X25ldGRldl9nZXRfcHJpdihkZXYpOworCisJZGV2X2Vycihwcml2LT5hZGFwdGVyLT5kZXYsICIlbHUgOiBUeCB0aW1lb3V0LCBic3NfaW5kZXg9JWRcbiIsCisJCQkJamlmZmllcywgcHJpdi0+YnNzX2luZGV4KTsKKwlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwlwcml2LT5udW1fdHhfdGltZW91dCsrOworfQorCisvKgorICogQ0ZHODAyLjExIG5ldHdvcmsgZGV2aWNlIGhhbmRsZXIgZm9yIHN0YXRpc3RpY3MgcmV0cmlldmFsLgorICovCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm13aWZpZXhfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9IG13aWZpZXhfbmV0ZGV2X2dldF9wcml2KGRldik7CisKKwlyZXR1cm4gJnByaXYtPnN0YXRzOworfQorCisvKiBOZXR3b3JrIGRldmljZSBoYW5kbGVycyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtd2lmaWV4X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuID0gbXdpZmlleF9vcGVuLAorCS5uZG9fc3RvcCA9IG13aWZpZXhfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gbXdpZmlleF9oYXJkX3N0YXJ0X3htaXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBtd2lmaWV4X3NldF9tYWNfYWRkcmVzcywKKwkubmRvX3R4X3RpbWVvdXQgPSBtd2lmaWV4X3R4X3RpbWVvdXQsCisJLm5kb19nZXRfc3RhdHMgPSBtd2lmaWV4X2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IG13aWZpZXhfc2V0X211bHRpY2FzdF9saXN0LAorfTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHByaXZhdGUgc3RydWN0dXJlIHBhcmFtZXRlcnMuCisgKgorICogVGhlIGZvbGxvd2luZyB3YWl0IHF1ZXVlcyBhcmUgaW5pdGlhbGl6ZWQgLQorICogICAgICAtIElPQ1RMIHdhaXQgcXVldWUKKyAqICAgICAgLSBDb21tYW5kIHdhaXQgcXVldWUKKyAqICAgICAgLSBTdGF0aXN0aWNzIHdhaXQgcXVldWUKKyAqCisgKiAuLi5hbmQgdGhlIGZvbGxvd2luZyBkZWZhdWx0IHBhcmFtZXRlcnMgYXJlIHNldCAtCisgKiAgICAgIC0gQ3VycmVudCBrZXkgaW5kZXggICAgIDogU2V0IHRvIDAKKyAqICAgICAgLSBSYXRlIGluZGV4ICAgICAgICAgICAgOiBTZXQgdG8gYXV0bworICogICAgICAtIE1lZGlhIGNvbm5lY3RlZCAgICAgICA6IFNldCB0byBkaXNjb25uZWN0ZWQKKyAqICAgICAgLSBBZGhvYyBsaW5rIHNlbnNlZCAgICAgOiBTZXQgdG8gZmFsc2UKKyAqICAgICAgLSBOaWNrIG5hbWUgICAgICAgICAgICAgOiBTZXQgdG8gbnVsbAorICogICAgICAtIE51bWJlciBvZiBUeCB0aW1lb3V0ICA6IFNldCB0byAwCisgKiAgICAgIC0gRGV2aWNlIGFkZHJlc3MgICAgICAgIDogU2V0IHRvIGN1cnJlbnQgYWRkcmVzcworICoKKyAqIEluIGFkZGl0aW9uLCB0aGUgQ0ZHODAyMTEgd29yayBxdWV1ZSBpcyBhbHNvIGNyZWF0ZWQuCisgKi8KK3N0YXRpYyB2b2lkCittd2lmaWV4X2luaXRfcHJpdl9wYXJhbXMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlkZXYtPm5ldGRldl9vcHMgPSAmbXdpZmlleF9uZXRkZXZfb3BzOworCS8qIEluaXRpYWxpemUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KKwlwcml2LT5jdXJyZW50X2tleV9pbmRleCA9IDA7CisJcHJpdi0+bWVkaWFfY29ubmVjdGVkID0gZmFsc2U7CisJbWVtc2V0KCZwcml2LT5uaWNrX25hbWUsIDAsIHNpemVvZihwcml2LT5uaWNrX25hbWUpKTsKKwlwcml2LT5udW1fdHhfdGltZW91dCA9IDA7CisJcHJpdi0+d29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImNmZzgwMjExX3dxIik7CisJSU5JVF9XT1JLKCZwcml2LT5jZmdfd29ya3F1ZXVlLCBtd2lmaWV4X2NmZzgwMjExX3Jlc3VsdHMpOworCW1lbWNweShkZXYtPmRldl9hZGRyLCBwcml2LT5jdXJyX2FkZHIsIEVUSF9BTEVOKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gYWRkcyBhIG5ldyBsb2dpY2FsIGludGVyZmFjZS4KKyAqCisgKiBJdCBhbGxvY2F0ZXMsIGluaXRpYWxpemVzIGFuZCByZWdpc3RlcnMgdGhlIGludGVyZmFjZSBieSBwZXJmb3JtaW5nCisgKiB0aGUgZm9sbG93aW5nIG9wZWFyYXRpb25zIC0KKyAqICAgICAgLSBBbGxvY2F0ZSBhIG5ldyBuZXQgZGV2aWNlIHN0cnVjdHVyZQorICogICAgICAtIEFzc2lnbiBkZXZpY2UgbmFtZQorICogICAgICAtIFJlZ2lzdGVyIHRoZSBuZXcgZGV2aWNlIHdpdGggQ0ZHODAyMTEgc3Vic3lzdGVtCisgKiAgICAgIC0gSW5pdGlhbGl6ZSBzZW1hcGhvcmUgYW5kIHByaXZhdGUgc3RydWN0dXJlCisgKiAgICAgIC0gUmVnaXN0ZXIgdGhlIG5ldyBkZXZpY2Ugd2l0aCBrZXJuZWwKKyAqICAgICAgLSBDcmVhdGUgdGhlIGNvbXBsZXRlIGRlYnVnIEZTIHN0cnVjdHVyZSBpZiBjb25maWd1cmVkCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICptd2lmaWV4X2FkZF9pbnRlcmZhY2UoCisJCQlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAorCQkJdTggYnNzX2luZGV4LCB1OCBic3NfdHlwZSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXY7CisJdm9pZCAqbWRldl9wcml2OworCisJZGV2ID0gYWxsb2NfbmV0ZGV2X21xKHNpemVvZihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICopLCAibWxhbiVkIiwKKwkJCSAgICAgIGV0aGVyX3NldHVwLCAxKTsKKwlpZiAoIWRldikgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIm5vIG1lbW9yeSBhdmFpbGFibGUgZm9yIG5ldGRldmljZVxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKG13aWZpZXhfcmVnaXN0ZXJfY2ZnODAyMTEoZGV2LCBhZGFwdGVyLT5wcml2W2Jzc19pbmRleF0tPmN1cnJfYWRkciwKKwkJCQkgICAgICBhZGFwdGVyLT5wcml2W2Jzc19pbmRleF0pICE9IDApIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJjYW5ub3QgcmVnaXN0ZXIgbmV0ZGV2aWNlIHdpdGggY2ZnODAyMTFcbiIpOworCQlnb3RvIGVycm9yOworCX0KKwkvKiBTYXZlIHRoZSBwcml2IHBvaW50ZXIgaW4gbmV0ZGV2ICovCisJcHJpdiA9IGFkYXB0ZXItPnByaXZbYnNzX2luZGV4XTsKKwltZGV2X3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCSooKHVuc2lnbmVkIGxvbmcgKikgbWRldl9wcml2KSA9ICh1bnNpZ25lZCBsb25nKSBwcml2OworCisJcHJpdi0+bmV0ZGV2ID0gZGV2OworCisJc2VtYV9pbml0KCZwcml2LT5hc3luY19zZW0sIDEpOworCXByaXYtPnNjYW5fcGVuZGluZ19vbl9ibG9jayA9IGZhbHNlOworCisJbXdpZmlleF9pbml0X3ByaXZfcGFyYW1zKHByaXYsIGRldik7CisKKwlTRVRfTkVUREVWX0RFVihkZXYsIGFkYXB0ZXItPmRldik7CisKKwkvKiBSZWdpc3RlciBuZXR3b3JrIGRldmljZSAqLworCWlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2KSkgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgImNhbm5vdCByZWdpc3RlciB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86ICVzOiBNYXJ2ZWxsIDgwMi4xMSBBZGFwdGVyXG4iLCBkZXYtPm5hbWUpOworI2lmZGVmIENPTkZJR19ERUJVR19GUworCW13aWZpZXhfZGV2X2RlYnVnZnNfaW5pdChwcml2KTsKKyNlbmRpZgorCXJldHVybiBwcml2OworZXJyb3I6CisJaWYgKGRldikKKwkJZnJlZV9uZXRkZXYoZGV2KTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyBhIGxvZ2ljYWwgaW50ZXJmYWNlLgorICoKKyAqIEl0IGRlcmVnaXN0ZXJzLCByZXNldHMgYW5kIGZyZWVzIHRoZSBpbnRlcmZhY2UgYnkgcGVyZm9ybWluZworICogdGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIC0KKyAqICAgICAgLSBEaXNjb25uZWN0IHRoZSBkZXZpY2UgaWYgY29ubmVjdGVkLCBzZW5kIHdpcmVsZXNzIGV2ZW50IHRvCisgKiAgICAgICAgbm90aWZ5IGFwcGxpY2F0aW9ucy4KKyAqICAgICAgLSBSZW1vdmUgdGhlIGRlYnVnIEZTIHN0cnVjdHVyZSBpZiBjb25maWd1cmVkCisgKiAgICAgIC0gVW5yZWdpc3RlciB0aGUgZGV2aWNlIGZyb20ga2VybmVsCisgKiAgICAgIC0gRnJlZSB0aGUgbmV0IGRldmljZSBzdHJ1Y3R1cmUKKyAqICAgICAgLSBDYW5jZWwgYWxsIHdvcmtzIGFuZCBkZXN0cm95IHdvcmsgcXVldWUKKyAqICAgICAgLSBVbnJlZ2lzdGVyIGFuZCBmcmVlIHRoZSB3aXJlbGVzcyBkZXZpY2UgZnJvbSBDRkc4MDIxMSBzdWJzeXN0ZW0KKyAqLworc3RhdGljIHZvaWQKK213aWZpZXhfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLCB1OCBic3NfaW5kZXgpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0gYWRhcHRlci0+cHJpdltic3NfaW5kZXhdOworCisJaWYgKCFwcml2KQorCQlyZXR1cm47CisJZGV2ID0gcHJpdi0+bmV0ZGV2OworCisJaWYgKHByaXYtPm1lZGlhX2Nvbm5lY3RlZCkKKwkJcHJpdi0+bWVkaWFfY29ubmVjdGVkID0gZmFsc2U7CisKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwltd2lmaWV4X2Rldl9kZWJ1Z2ZzX3JlbW92ZShwcml2KTsKKyNlbmRpZgorCS8qIExhc3QgcmVmZXJlbmNlIGlzIG91ciBvbmUgKi8KKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86ICVzOiByZWZjbnQgPSAlZFxuIiwKKwkJCQlkZXYtPm5hbWUsIG5ldGRldl9yZWZjbnRfcmVhZChkZXYpKTsKKworCWlmIChkZXYtPnJlZ19zdGF0ZSA9PSBORVRSRUdfUkVHSVNURVJFRCkKKwkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKworCS8qIENsZWFyIHRoZSBwcml2IGluIGFkYXB0ZXIgKi8KKwlwcml2LT5uZXRkZXYgPSBOVUxMOworCWlmIChkZXYpCisJCWZyZWVfbmV0ZGV2KGRldik7CisKKwljYW5jZWxfd29ya19zeW5jKCZwcml2LT5jZmdfd29ya3F1ZXVlKTsKKwlmbHVzaF93b3JrcXVldWUocHJpdi0+d29ya3F1ZXVlKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShwcml2LT53b3JrcXVldWUpOworCXdpcGh5X3VucmVnaXN0ZXIocHJpdi0+d2Rldi0+d2lwaHkpOworCXdpcGh5X2ZyZWUocHJpdi0+d2Rldi0+d2lwaHkpOworCWtmcmVlKHByaXYtPndkZXYpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjaGVjayBpZiBjb21tYW5kIGlzIHBlbmRpbmcuCisgKi8KK2ludCBpc19jb21tYW5kX3BlbmRpbmcoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpc19jbWRfcGVuZF9xX2VtcHR5OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmNtZF9wZW5kaW5nX3FfbG9jaywgZmxhZ3MpOworCWlzX2NtZF9wZW5kX3FfZW1wdHkgPSBsaXN0X2VtcHR5KCZhZGFwdGVyLT5jbWRfcGVuZGluZ19xKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5jbWRfcGVuZGluZ19xX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAhaXNfY21kX3BlbmRfcV9lbXB0eTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY29ycmVjdCBwcml2YXRlIHN0cnVjdHVyZSBwb2ludGVyIGJhc2VkCisgKiB1cG9uIHRoZSBCU1MgbnVtYmVyLgorICovCitzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICoKK213aWZpZXhfYnNzX2luZGV4X3RvX3ByaXYoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwgdTggYnNzX2luZGV4KQoreworCWlmICghYWRhcHRlciB8fCAoYnNzX2luZGV4ID49IGFkYXB0ZXItPnByaXZfbnVtKSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGFkYXB0ZXItPnByaXZbYnNzX2luZGV4XTsKK30KKworLyoKKyAqIFRoaXMgaXMgdGhlIG1haW4gd29yayBxdWV1ZSBmdW5jdGlvbi4KKyAqCisgKiBJdCBoYW5kbGVzIHRoZSBtYWluIHByb2Nlc3MsIHdoaWNoIGluIHR1cm4gaGFuZGxlcyB0aGUgY29tcGxldGUKKyAqIGRyaXZlciBvcGVyYXRpb25zLgorICovCitzdGF0aWMgdm9pZCBtd2lmaWV4X21haW5fd29ya19xdWV1ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyLCBtYWluX3dvcmspOworCisJaWYgKGFkYXB0ZXItPnN1cnByaXNlX3JlbW92ZWQpCisJCXJldHVybjsKKwltd2lmaWV4X21haW5fcHJvY2VzcyhhZGFwdGVyKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2FuY2VscyBhbGwgd29ya3MgaW4gdGhlIHF1ZXVlIGFuZCBkZXN0cm95cworICogdGhlIG1haW4gd29ya3F1ZXVlLgorICovCitzdGF0aWMgdm9pZAorbXdpZmlleF90ZXJtaW5hdGVfd29ya3F1ZXVlKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJZmx1c2hfd29ya3F1ZXVlKGFkYXB0ZXItPndvcmtxdWV1ZSk7CisJZGVzdHJveV93b3JrcXVldWUoYWRhcHRlci0+d29ya3F1ZXVlKTsKKwlhZGFwdGVyLT53b3JrcXVldWUgPSBOVUxMOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBhZGRzIHRoZSBjYXJkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZm9sbG93cyB0aGUgZm9sbG93aW5nIG1ham9yIHN0ZXBzIHRvIHNldCB1cCB0aGUgZGV2aWNlIC0KKyAqICAgICAgLSBJbml0aWFsaXplIHNvZnR3YXJlLiBUaGlzIGluY2x1ZGVzIHByb2JpbmcgdGhlIGNhcmQsIHJlZ2lzdGVyaW5nCisgKiAgICAgICAgdGhlIGludGVyZmFjZSBvcGVyYXRpb25zIHRhYmxlLCBhbmQgYWxsb2NhdGluZy9pbml0aWFsaXppbmcgdGhlCisgKiAgICAgICAgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqICAgICAgLSBTZXQgdXAgdGhlIG5ldGxpbmsgc29ja2V0CisgKiAgICAgIC0gQ3JlYXRlIGFuZCBzdGFydCB0aGUgbWFpbiB3b3JrIHF1ZXVlCisgKiAgICAgIC0gUmVnaXN0ZXIgdGhlIGRldmljZQorICogICAgICAtIEluaXRpYWxpemUgZmlybXdhcmUgYW5kIGhhcmR3YXJlCisgKiAgICAgIC0gQWRkIGxvZ2ljYWwgaW50ZXJmYWNlcworICovCitpbnQKK213aWZpZXhfYWRkX2NhcmQodm9pZCAqY2FyZCwgc3RydWN0IHNlbWFwaG9yZSAqc2VtLAorCQkgc3RydWN0IG13aWZpZXhfaWZfb3BzICppZl9vcHMpCit7CisJaW50IGk7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcjsKKworCWlmIChkb3duX2ludGVycnVwdGlibGUoc2VtKSkKKwkJZ290byBleGl0X3NlbV9lcnI7CisKKwlpZiAobXdpZmlleF9pbml0X3N3KGNhcmQsIGlmX29wcykpIHsKKwkJcHJfZXJyKCIlczogc29mdHdhcmUgaW5pdCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJZ290byBlcnJfaW5pdF9zdzsKKwl9CisKKwlhZGFwdGVyID0gZ19hZGFwdGVyOworCisJYWRhcHRlci0+aHdfc3RhdHVzID0gTVdJRklFWF9IV19TVEFUVVNfSU5JVElBTElaSU5HOworCWFkYXB0ZXItPnN1cnByaXNlX3JlbW92ZWQgPSBmYWxzZTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhZGFwdGVyLT5pbml0X3dhaXRfcSk7CisJYWRhcHRlci0+aXNfc3VzcGVuZGVkID0gZmFsc2U7CisJYWRhcHRlci0+aHNfYWN0aXZhdGVkID0gZmFsc2U7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmYWRhcHRlci0+aHNfYWN0aXZhdGVfd2FpdF9xKTsKKwlhZGFwdGVyLT5jbWRfd2FpdF9xX3JlcXVpcmVkID0gZmFsc2U7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmYWRhcHRlci0+Y21kX3dhaXRfcS53YWl0KTsKKwlhZGFwdGVyLT5jbWRfd2FpdF9xLmNvbmRpdGlvbiA9IGZhbHNlOworCWFkYXB0ZXItPmNtZF93YWl0X3Euc3RhdHVzID0gMDsKKworCWFkYXB0ZXItPndvcmtxdWV1ZSA9IGNyZWF0ZV93b3JrcXVldWUoIk1XSUZJRVhfV09SS19RVUVVRSIpOworCWlmICghYWRhcHRlci0+d29ya3F1ZXVlKQorCQlnb3RvIGVycl9rbWFsbG9jOworCisJSU5JVF9XT1JLKCZhZGFwdGVyLT5tYWluX3dvcmssIG13aWZpZXhfbWFpbl93b3JrX3F1ZXVlKTsKKworCS8qIFJlZ2lzdGVyIHRoZSBkZXZpY2UuIEZpbGwgdXAgdGhlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgd2l0aCByZWxldmFudAorCSAgIGluZm9ybWF0aW9uIGZyb20gdGhlIGNhcmQgYW5kIHJlcXVlc3QgZm9yIHRoZSByZXF1aXJlZCBJUlEuICovCisJaWYgKGFkYXB0ZXItPmlmX29wcy5yZWdpc3Rlcl9kZXYoYWRhcHRlcikpIHsKKwkJcHJfZXJyKCIlczogZmFpbGVkIHRvIHJlZ2lzdGVyIG13aWZpZXggZGV2aWNlXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXJyX3JlZ2lzdGVyZGV2OworCX0KKworCWlmIChtd2lmaWV4X2luaXRfaHdfZncoYWRhcHRlcikpIHsKKwkJcHJfZXJyKCIlczogZmlybXdhcmUgaW5pdCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJZ290byBlcnJfaW5pdF9mdzsKKwl9CisKKwkvKiBBZGQgaW50ZXJmYWNlcyAqLworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5kcnZfbW9kZS0+aW50Zl9udW07IGkrKykgeworCQlpZiAoIW13aWZpZXhfYWRkX2ludGVyZmFjZShhZGFwdGVyLCBpLAorCQkJCWFkYXB0ZXItPmRydl9tb2RlLT5ic3NfYXR0cltpXS5ic3NfdHlwZSkpIHsKKwkJCWdvdG8gZXJyX2FkZF9pbnRmOworCQl9CisJfQorCisJdXAoc2VtKTsKKworCXJldHVybiAwOworCitlcnJfYWRkX2ludGY6CisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPnByaXZfbnVtOyBpKyspCisJCW13aWZpZXhfcmVtb3ZlX2ludGVyZmFjZShhZGFwdGVyLCBpKTsKK2Vycl9pbml0X2Z3OgorCXByX2RlYnVnKCJpbmZvOiAlczogdW5yZWdpc3RlciBkZXZpY2VcbiIsIF9fZnVuY19fKTsKKwlhZGFwdGVyLT5pZl9vcHMudW5yZWdpc3Rlcl9kZXYoYWRhcHRlcik7CitlcnJfcmVnaXN0ZXJkZXY6CisJYWRhcHRlci0+c3VycHJpc2VfcmVtb3ZlZCA9IHRydWU7CisJbXdpZmlleF90ZXJtaW5hdGVfd29ya3F1ZXVlKGFkYXB0ZXIpOworZXJyX2ttYWxsb2M6CisJaWYgKChhZGFwdGVyLT5od19zdGF0dXMgPT0gTVdJRklFWF9IV19TVEFUVVNfRldfUkVBRFkpIHx8CisJICAgIChhZGFwdGVyLT5od19zdGF0dXMgPT0gTVdJRklFWF9IV19TVEFUVVNfUkVBRFkpKSB7CisJCXByX2RlYnVnKCJpbmZvOiAlczogc2h1dGRvd24gbXdpZmlleFxuIiwgX19mdW5jX18pOworCQlhZGFwdGVyLT5pbml0X3dhaXRfcV93b2tlbiA9IGZhbHNlOworCisJCWlmIChtd2lmaWV4X3NodXRkb3duX2RydihhZGFwdGVyKSA9PSAtRUlOUFJPR1JFU1MpCisJCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoYWRhcHRlci0+aW5pdF93YWl0X3EsCisJCQkJCQkgYWRhcHRlci0+aW5pdF93YWl0X3Ffd29rZW4pOworCX0KKworCW13aWZpZXhfZnJlZV9hZGFwdGVyKGFkYXB0ZXIpOworCitlcnJfaW5pdF9zdzoKKwl1cChzZW0pOworCitleGl0X3NlbV9lcnI6CisJcmV0dXJuIC0xOworfQorRVhQT1JUX1NZTUJPTF9HUEwobXdpZmlleF9hZGRfY2FyZCk7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgdGhlIGNhcmQuCisgKgorICogVGhpcyBmdW5jdGlvbiBmb2xsb3dzIHRoZSBmb2xsb3dpbmcgbWFqb3Igc3RlcHMgdG8gcmVtb3ZlIHRoZSBkZXZpY2UgLQorICogICAgICAtIFN0b3AgZGF0YSB0cmFmZmljCisgKiAgICAgIC0gU2h1dGRvd24gZmlybXdhcmUKKyAqICAgICAgLSBSZW1vdmUgdGhlIGxvZ2ljYWwgaW50ZXJmYWNlcworICogICAgICAtIFRlcm1pbmF0ZSB0aGUgd29yayBxdWV1ZQorICogICAgICAtIFVucmVnaXN0ZXIgdGhlIGRldmljZQorICogICAgICAtIEZyZWUgdGhlIGFkYXB0ZXIgc3RydWN0dXJlCisgKi8KK2ludCBtd2lmaWV4X3JlbW92ZV9jYXJkKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0gTlVMTDsKKwlpbnQgaTsKKworCWlmIChkb3duX2ludGVycnVwdGlibGUoc2VtKSkKKwkJZ290byBleGl0X3NlbV9lcnI7CisKKwlpZiAoIWFkYXB0ZXIpCisJCWdvdG8gZXhpdF9yZW1vdmU7CisKKwlhZGFwdGVyLT5zdXJwcmlzZV9yZW1vdmVkID0gdHJ1ZTsKKworCS8qIFN0b3AgZGF0YSAqLworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5wcml2X251bTsgaSsrKSB7CisJCXByaXYgPSBhZGFwdGVyLT5wcml2W2ldOworCQlpZiAocHJpdikgeworCQkJaWYgKCFuZXRpZl9xdWV1ZV9zdG9wcGVkKHByaXYtPm5ldGRldikpCisJCQkJbmV0aWZfc3RvcF9xdWV1ZShwcml2LT5uZXRkZXYpOworCQkJaWYgKG5ldGlmX2NhcnJpZXJfb2socHJpdi0+bmV0ZGV2KSkKKwkJCQluZXRpZl9jYXJyaWVyX29mZihwcml2LT5uZXRkZXYpOworCQl9CisJfQorCisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJjbWQ6IGNhbGxpbmcgbXdpZmlleF9zaHV0ZG93bl9kcnYuLi5cbiIpOworCWFkYXB0ZXItPmluaXRfd2FpdF9xX3dva2VuID0gZmFsc2U7CisKKwlpZiAobXdpZmlleF9zaHV0ZG93bl9kcnYoYWRhcHRlcikgPT0gLUVJTlBST0dSRVNTKQorCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoYWRhcHRlci0+aW5pdF93YWl0X3EsCisJCQkJCSBhZGFwdGVyLT5pbml0X3dhaXRfcV93b2tlbik7CisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJjbWQ6IG13aWZpZXhfc2h1dGRvd25fZHJ2IGRvbmVcbiIpOworCWlmIChhdG9taWNfcmVhZCgmYWRhcHRlci0+cnhfcGVuZGluZykgfHwKKwkgICAgYXRvbWljX3JlYWQoJmFkYXB0ZXItPnR4X3BlbmRpbmcpIHx8CisJICAgIGF0b21pY19yZWFkKCZhZGFwdGVyLT5jbWRfcGVuZGluZykpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJyeF9wZW5kaW5nPSVkLCB0eF9wZW5kaW5nPSVkLCAiCisJCSAgICAgICAiY21kX3BlbmRpbmc9JWRcbiIsCisJCSAgICAgICBhdG9taWNfcmVhZCgmYWRhcHRlci0+cnhfcGVuZGluZyksCisJCSAgICAgICBhdG9taWNfcmVhZCgmYWRhcHRlci0+dHhfcGVuZGluZyksCisJCSAgICAgICBhdG9taWNfcmVhZCgmYWRhcHRlci0+Y21kX3BlbmRpbmcpKTsKKwl9CisKKwkvKiBSZW1vdmUgaW50ZXJmYWNlICovCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPnByaXZfbnVtOyBpKyspCisJCW13aWZpZXhfcmVtb3ZlX2ludGVyZmFjZShhZGFwdGVyLCBpKTsKKworCW13aWZpZXhfdGVybWluYXRlX3dvcmtxdWV1ZShhZGFwdGVyKTsKKworCS8qIFVucmVnaXN0ZXIgZGV2aWNlICovCisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiB1bnJlZ2lzdGVyIGRldmljZVxuIik7CisJYWRhcHRlci0+aWZfb3BzLnVucmVnaXN0ZXJfZGV2KGFkYXB0ZXIpOworCS8qIEZyZWUgYWRhcHRlciBzdHJ1Y3R1cmUgKi8KKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IGZyZWUgYWRhcHRlclxuIik7CisJbXdpZmlleF9mcmVlX2FkYXB0ZXIoYWRhcHRlcik7CisKK2V4aXRfcmVtb3ZlOgorCXVwKHNlbSk7CitleGl0X3NlbV9lcnI6CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtd2lmaWV4X3JlbW92ZV9jYXJkKTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIG1vZHVsZS4KKyAqCisgKiBUaGUgZGVidWcgRlMgaXMgYWxzbyBpbml0aWFsaXplZCBpZiBjb25maWd1cmVkLgorICovCitzdGF0aWMgaW50Cittd2lmaWV4X2luaXRfbW9kdWxlKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisJbXdpZmlleF9kZWJ1Z2ZzX2luaXQoKTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjbGVhbnMgdXAgdGhlIG1vZHVsZS4KKyAqCisgKiBUaGUgZGVidWcgRlMgaXMgcmVtb3ZlZCBpZiBhdmFpbGFibGUuCisgKi8KK3N0YXRpYyB2b2lkCittd2lmaWV4X2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisJbXdpZmlleF9kZWJ1Z2ZzX3JlbW92ZSgpOworI2VuZGlmCit9CisKK21vZHVsZV9pbml0KG13aWZpZXhfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQobXdpZmlleF9jbGVhbnVwX21vZHVsZSk7CisKK01PRFVMRV9BVVRIT1IoIk1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1hcnZlbGwgV2lGaS1FeCBEcml2ZXIgdmVyc2lvbiAiIFZFUlNJT04pOworTU9EVUxFX1ZFUlNJT04oVkVSU0lPTik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L21haW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvbWFpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MjcwMWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L21haW4uaApAQCAtMCwwICsxLDEwMDQgQEAKKy8qCisgKiBNYXJ2ZWxsIFdpcmVsZXNzIExBTiBkZXZpY2UgZHJpdmVyOiBtYWpvciBkYXRhIHN0cnVjdHVyZXMgYW5kIHByb3RvdHlwZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBmaWxlICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwKKyAqIEx0ZC4gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIEp1bmUgMTk5MQorICogKHRoZSAiTGljZW5zZSIpLiAgWW91IG1heSB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSBpbgorICogYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdoaWNoCisgKiBpcyBhdmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQSBvciBvbiB0aGUKKyAqIHdvcmxkd2lkZSB3ZWIgYXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dC4KKyAqCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1JUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgQU5EIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0CisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIuCisgKi8KKworI2lmbmRlZiBfTVdJRklFWF9NQUlOX0hfCisjZGVmaW5lIF9NV0lGSUVYX01BSU5fSF8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisjaW5jbHVkZSA8bmV0L2xpYjgwMjExLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorCisjaW5jbHVkZSAiZGVjbC5oIgorI2luY2x1ZGUgImlvY3RsLmgiCisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgImZ3LmgiCisKK2V4dGVybiBjb25zdCBjaGFyIGRyaXZlcl92ZXJzaW9uW107CitleHRlcm4gc3RydWN0IG13aWZpZXhfYWRhcHRlciAqZ19hZGFwdGVyOworCitlbnVtIHsKKwlNV0lGSUVYX0FTWU5DX0NNRCwKKwlNV0lGSUVYX1NZTkNfQ01ECit9OworCisjZGVmaW5lIERSVl9NT0RFX1NUQSAgICAgICAweDEKKworI2RlZmluZSBTRDg3ODdfVzAgICAweDMwCisjZGVmaW5lIFNEODc4N19XMSAgIDB4MzEKKyNkZWZpbmUgU0Q4Nzg3X0EwICAgMHg0MAorI2RlZmluZSBTRDg3ODdfQTEgICAweDQxCisKKyNkZWZpbmUgREVGQVVMVF9GV19OQU1FICJtcnZsL3NkODc4N191YXBzdGEuYmluIgorI2RlZmluZSBTRDg3ODdfVzFfRldfTkFNRSAibXJ2bC9zZDg3ODdfdWFwc3RhX3cxLmJpbiIKKyNkZWZpbmUgU0Q4Nzg3X0FYX0ZXX05BTUUgIm1ydmwvc2Q4Nzg3X3VhcHN0YS5iaW4iCisKK3N0cnVjdCBtd2lmaWV4X2Rydl9tb2RlIHsKKwl1MTYgZHJ2X21vZGU7CisJdTE2IGludGZfbnVtOworCXN0cnVjdCBtd2lmaWV4X2Jzc19hdHRyICpic3NfYXR0cjsKK307CisKKworI2RlZmluZSBNV0lGSUVYX0RFRkFVTFRfV0FUQ0hET0dfVElNRU9VVAkoNSAqIEhaKQorCisjZGVmaW5lIE1XSUZJRVhfVElNRVJfMTBTCQkJMTAwMDAKKyNkZWZpbmUgTVdJRklFWF9USU1FUl8xUwkJCTEwMDAKKworI2RlZmluZSBNQVhfVFhfUEVORElORyAgICAgIDYwCisKKyNkZWZpbmUgTVdJRklFWF9VUExEX1NJWkUgICAgICAgICAgICAgICAoMjMxMikKKworI2RlZmluZSBNQVhfRVZFTlRfU0laRSAgICAgICAgICAgICAgICAgIDEwMjQKKworI2RlZmluZSBBUlBfRklMVEVSX01BWF9CVUZfU0laRSAgICAgICAgIDY4CisKKyNkZWZpbmUgTVdJRklFWF9LRVlfQlVGRkVSX1NJWkUJCQkxNgorI2RlZmluZSBNV0lGSUVYX0RFRkFVTFRfTElTVEVOX0lOVEVSVkFMIDEwCisjZGVmaW5lIE1XSUZJRVhfTUFYX1JFR0lPTl9DT0RFICAgICAgICAgNworCisjZGVmaW5lIERFRkFVTFRfQkNOX0FWR19GQUNUT1IgICAgICAgICAgOAorI2RlZmluZSBERUZBVUxUX0RBVEFfQVZHX0ZBQ1RPUiAgICAgICAgIDgKKworI2RlZmluZSBGSVJTVF9WQUxJRF9DSEFOTkVMCQkJCTB4ZmYKKyNkZWZpbmUgREVGQVVMVF9BRF9IT0NfQ0hBTk5FTAkJCTYKKyNkZWZpbmUgREVGQVVMVF9BRF9IT0NfQ0hBTk5FTF9BCQkzNgorCisjZGVmaW5lIERFRkFVTFRfQkNOX01JU1NfVElNRU9VVAkJNQorCisjZGVmaW5lIE1BWF9TQ0FOX0JFQUNPTl9CVUZGRVIJCQk4MDAwCisKKyNkZWZpbmUgU0NBTl9CRUFDT05fRU5UUllfUEFECQkJNgorCisjZGVmaW5lIE1XSUZJRVhfUEFTU0lWRV9TQ0FOX0NIQU5fVElNRQkyMDAKKyNkZWZpbmUgTVdJRklFWF9BQ1RJVkVfU0NBTl9DSEFOX1RJTUUJMjAwCisjZGVmaW5lIE1XSUZJRVhfU1BFQ0lGSUNfU0NBTl9DSEFOX1RJTUUJMTEwCisKKyNkZWZpbmUgU0NBTl9SU1NJKFJTU0kpCQkJCQkoMHgxMDAgLSAoKHU4KShSU1NJKSkpCisKKyNkZWZpbmUgTVdJRklFWF9NQVhfVE9UQUxfU0NBTl9USU1FCShNV0lGSUVYX1RJTUVSXzEwUyAtIE1XSUZJRVhfVElNRVJfMVMpCisKKyNkZWZpbmUgUlNOX0dUS19PVUlfT0ZGU0VUCQkJCTIKKworI2RlZmluZSBNV0lGSUVYX09VSV9OT1RfUFJFU0VOVAkJCTAKKyNkZWZpbmUgTVdJRklFWF9PVUlfUFJFU0VOVAkJCQkxCisKKyNkZWZpbmUgSVNfQ0FSRF9SWF9SQ1ZEKGFkYXB0ZXIpIChhZGFwdGVyLT5jbWRfcmVzcF9yZWNlaXZlZCB8fCBcCisJCQkJCWFkYXB0ZXItPmV2ZW50X3JlY2VpdmVkIHx8IFwKKwkJCQkJYWRhcHRlci0+ZGF0YV9yZWNlaXZlZCkKKworI2RlZmluZSBNV0lGSUVYX1RZUEVfQ01ECQkJCTEKKyNkZWZpbmUgTVdJRklFWF9UWVBFX0RBVEEJCQkJMAorI2RlZmluZSBNV0lGSUVYX1RZUEVfRVZFTlQJCQkJMworCisjZGVmaW5lIERCR19DTURfTlVNCQkJCQkJNQorCisjZGVmaW5lIE1BWF9CSVRNQVBfUkFURVNfU0laRQkJCTEwCisKKyNkZWZpbmUgTUFYX0NIQU5ORUxfQkFORF9CRyAgICAgMTQKKworI2RlZmluZSBNQVhfRlJFUVVFTkNZX0JBTkRfQkcgICAyNDg0CisKK3N0cnVjdCBtd2lmaWV4X2RiZyB7CisJdTMyIG51bV9jbWRfaG9zdF90b19jYXJkX2ZhaWx1cmU7CisJdTMyIG51bV9jbWRfc2xlZXBfY2ZtX2hvc3RfdG9fY2FyZF9mYWlsdXJlOworCXUzMiBudW1fdHhfaG9zdF90b19jYXJkX2ZhaWx1cmU7CisJdTMyIG51bV9ldmVudF9kZWF1dGg7CisJdTMyIG51bV9ldmVudF9kaXNhc3NvYzsKKwl1MzIgbnVtX2V2ZW50X2xpbmtfbG9zdDsKKwl1MzIgbnVtX2NtZF9kZWF1dGg7CisJdTMyIG51bV9jbWRfYXNzb2Nfc3VjY2VzczsKKwl1MzIgbnVtX2NtZF9hc3NvY19mYWlsdXJlOworCXUzMiBudW1fdHhfdGltZW91dDsKKwl1MzIgbnVtX2NtZF90aW1lb3V0OworCXUxNiB0aW1lb3V0X2NtZF9pZDsKKwl1MTYgdGltZW91dF9jbWRfYWN0OworCXUxNiBsYXN0X2NtZF9pZFtEQkdfQ01EX05VTV07CisJdTE2IGxhc3RfY21kX2FjdFtEQkdfQ01EX05VTV07CisJdTE2IGxhc3RfY21kX2luZGV4OworCXUxNiBsYXN0X2NtZF9yZXNwX2lkW0RCR19DTURfTlVNXTsKKwl1MTYgbGFzdF9jbWRfcmVzcF9pbmRleDsKKwl1MTYgbGFzdF9ldmVudFtEQkdfQ01EX05VTV07CisJdTE2IGxhc3RfZXZlbnRfaW5kZXg7Cit9OworCitlbnVtIE1XSUZJRVhfSEFSRFdBUkVfU1RBVFVTIHsKKwlNV0lGSUVYX0hXX1NUQVRVU19SRUFEWSwKKwlNV0lGSUVYX0hXX1NUQVRVU19JTklUSUFMSVpJTkcsCisJTVdJRklFWF9IV19TVEFUVVNfRldfUkVBRFksCisJTVdJRklFWF9IV19TVEFUVVNfSU5JVF9ET05FLAorCU1XSUZJRVhfSFdfU1RBVFVTX1JFU0VULAorCU1XSUZJRVhfSFdfU1RBVFVTX0NMT1NJTkcsCisJTVdJRklFWF9IV19TVEFUVVNfTk9UX1JFQURZCit9OworCitlbnVtIE1XSUZJRVhfODAyXzExX1BPV0VSX01PREUgeworCU1XSUZJRVhfODAyXzExX1BPV0VSX01PREVfQ0FNLAorCU1XSUZJRVhfODAyXzExX1BPV0VSX01PREVfUFNQCit9OworCitzdHJ1Y3QgbXdpZmlleF90eF9wYXJhbSB7CisJdTMyIG5leHRfcGt0X2xlbjsKK307CisKK2VudW0gTVdJRklFWF9QU19TVEFURSB7CisJUFNfU1RBVEVfQVdBS0UsCisJUFNfU1RBVEVfUFJFX1NMRUVQLAorCVBTX1NUQVRFX1NMRUVQX0NGTSwKKwlQU19TVEFURV9TTEVFUAorfTsKKworc3RydWN0IG13aWZpZXhfYWRkX2JhX3BhcmFtIHsKKwl1MzIgdHhfd2luX3NpemU7CisJdTMyIHJ4X3dpbl9zaXplOworCXUzMiB0aW1lb3V0OworfTsKKworc3RydWN0IG13aWZpZXhfdHhfYWdnciB7CisJdTggYW1wZHVfdXNlcjsKKwl1OCBhbXBkdV9hcDsKKwl1OCBhbXNkdTsKK307CisKK3N0cnVjdCBtd2lmaWV4X3JhX2xpc3RfdGJsIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCBza2JfaGVhZDsKKwl1OCByYVtFVEhfQUxFTl07CisJdTMyIHRvdGFsX3BrdHNfc2l6ZTsKKwl1MzIgaXNfMTFuX2VuYWJsZWQ7Cit9OworCitzdHJ1Y3QgbXdpZmlleF90aWRfdGJsIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHJhX2xpc3Q7CisJLyogc3BpbiBsb2NrIGZvciB0aWQgdGFibGUgKi8KKwlzcGlubG9ja190IHRpZF90YmxfbG9jazsKKwlzdHJ1Y3QgbXdpZmlleF9yYV9saXN0X3RibCAqcmFfbGlzdF9jdXJyOworfTsKKworI2RlZmluZSBXTU1fSElHSEVTVF9QUklPUklUWQkJNworI2RlZmluZSBISUdIX1BSSU9fVElECQkJCTcKKyNkZWZpbmUgTE9XX1BSSU9fVElECQkJCTAKKworc3RydWN0IG13aWZpZXhfd21tX2Rlc2MgeworCXN0cnVjdCBtd2lmaWV4X3RpZF90YmwgdGlkX3RibF9wdHJbTUFYX05VTV9USURdOworCXUzMiBwYWNrZXRzX291dFtNQVhfTlVNX1RJRF07CisJLyogc3BpbiBsb2NrIHRvIHByb3RlY3QgcmFfbGlzdCAqLworCXNwaW5sb2NrX3QgcmFfbGlzdF9zcGlubG9jazsKKwlzdHJ1Y3QgbXdpZmlleF93bW1fYWNfc3RhdHVzIGFjX3N0YXR1c1tJRUVFODAyMTFfTUFYX1FVRVVFU107CisJZW51bSBtd2lmaWV4X3dtbV9hY19lIGFjX2Rvd25fZ3JhZGVkX3ZhbHNbSUVFRTgwMjExX01BWF9RVUVVRVNdOworCXUzMiBkcnZfcGt0X2RlbGF5X21heDsKKwl1OCBxdWV1ZV9wcmlvcml0eVtJRUVFODAyMTFfTUFYX1FVRVVFU107CisJdTMyIHVzZXJfcHJpX3BrdF90eF9jdHJsW1dNTV9ISUdIRVNUX1BSSU9SSVRZICsgMV07CS8qIFVQOiAwIHRvIDcgKi8KKworfTsKKworc3RydWN0IG13aWZpZXhfODAyXzExX3NlY3VyaXR5IHsKKwl1OCB3cGFfZW5hYmxlZDsKKwl1OCB3cGEyX2VuYWJsZWQ7CisJdTggd2FwaV9lbmFibGVkOworCXU4IHdhcGlfa2V5X29uOworCWVudW0gTVdJRklFWF84MDJfMTFfV0VQX1NUQVRVUyB3ZXBfc3RhdHVzOworCXUzMiBhdXRoZW50aWNhdGlvbl9tb2RlOworCXUzMiBlbmNyeXB0aW9uX21vZGU7Cit9OworCitzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIgeworCXU4IGVsZW1lbnRfaWQ7CisJdTggbGVuOworfSBfX3BhY2tlZDsKKworc3RydWN0IGllZWVfb2Jzc19zY2FuX3BhcmFtIHsKKwl1MTYgb2Jzc19zY2FuX3Bhc3NpdmVfZHdlbGw7CisJdTE2IG9ic3Nfc2Nhbl9hY3RpdmVfZHdlbGw7CisJdTE2IGJzc19jaGFuX3dpZHRoX3RyaWdnZXJfc2Nhbl9pbnQ7CisJdTE2IG9ic3Nfc2Nhbl9wYXNzaXZlX3RvdGFsOworCXUxNiBvYnNzX3NjYW5fYWN0aXZlX3RvdGFsOworCXUxNiBic3Nfd2lkdGhfY2hhbl90cmFuc19kZWxheTsKKwl1MTYgb2Jzc19zY2FuX2FjdGl2ZV90aHJlc2hvbGQ7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaWVlZV90eXBlc19vYnNzX3NjYW5fcGFyYW0geworCXN0cnVjdCBpZWVlX3R5cGVzX2hlYWRlciBpZWVlX2hkcjsKKwlzdHJ1Y3QgaWVlZV9vYnNzX3NjYW5fcGFyYW0gb2Jzc19zY2FuOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBNV0lGSUVYX1NVUFBPUlRFRF9SQVRFUyAgICAgICAgICAgICAgICAgMTQKKworI2RlZmluZSBNV0lGSUVYX1NVUFBPUlRFRF9SQVRFU19FWFQgICAgICAgICAgICAgMzIKKworI2RlZmluZSBJRUVFX01BWF9JRV9TSVpFCQkJMjU2CisKK3N0cnVjdCBpZWVlX3R5cGVzX3ZlbmRvcl9zcGVjaWZpYyB7CisJc3RydWN0IGllZWVfdHlwZXNfdmVuZG9yX2hlYWRlciB2ZW5kX2hkcjsKKwl1OCBkYXRhW0lFRUVfTUFYX0lFX1NJWkUgLSBzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfdmVuZG9yX2hlYWRlcildOworfSBfX3BhY2tlZDsKKworc3RydWN0IGllZWVfdHlwZXNfZ2VuZXJpYyB7CisJc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyIGllZWVfaGRyOworCXU4IGRhdGFbSUVFRV9NQVhfSUVfU0laRSAtIHNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgeworCXU4IG1hY19hZGRyZXNzW0VUSF9BTEVOXTsKKwlzdHJ1Y3QgbXdpZmlleF84MDJfMTFfc3NpZCBzc2lkOworCXUzMiBwcml2YWN5OworCXMzMiByc3NpOworCXUzMiBjaGFubmVsOworCXUzMiBmcmVxOworCXUxNiBiZWFjb25fcGVyaW9kOworCXU4IGVycF9mbGFnczsKKwl1MzIgYnNzX21vZGU7CisJdTggc3VwcG9ydGVkX3JhdGVzW01XSUZJRVhfU1VQUE9SVEVEX1JBVEVTXTsKKwl1OCBkYXRhX3JhdGVzW01XSUZJRVhfU1VQUE9SVEVEX1JBVEVTXTsKKwkvKiBOZXR3b3JrIGJhbmQuCisJICogQkFORF9CKDB4MDEpOiAnYicgYmFuZAorCSAqIEJBTkRfRygweDAyKTogJ2cnIGJhbmQKKwkgKiBCQU5EX0EoMFgwNCk6ICdhJyBiYW5kCisJICovCisJdTE2IGJzc19iYW5kOworCXU2NCBuZXR3b3JrX3RzZjsKKwl1OCB0aW1lX3N0YW1wWzhdOworCXVuaW9uIGllZWVfdHlwZXNfcGh5X3BhcmFtX3NldCBwaHlfcGFyYW1fc2V0OworCXVuaW9uIGllZWVfdHlwZXNfc3NfcGFyYW1fc2V0IHNzX3BhcmFtX3NldDsKKwl1MTYgY2FwX2luZm9fYml0bWFwOworCXN0cnVjdCBpZWVlX3R5cGVzX3dtbV9wYXJhbWV0ZXIgd21tX2llOworCXU4ICBkaXNhYmxlXzExbjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCAqYmNuX2h0X2NhcDsKKwl1MTYgaHRfY2FwX29mZnNldDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKmJjbl9odF9pbmZvOworCXUxNiBodF9pbmZvX29mZnNldDsKKwl1OCAqYmNuX2Jzc19jb18yMDQwOworCXUxNiBic3NfY29fMjA0MF9vZmZzZXQ7CisJdTggKmJjbl9leHRfY2FwOworCXUxNiBleHRfY2FwX29mZnNldDsKKwlzdHJ1Y3QgaWVlZV90eXBlc19vYnNzX3NjYW5fcGFyYW0gKmJjbl9vYnNzX3NjYW47CisJdTE2IG92ZXJsYXBfYnNzX29mZnNldDsKKwlzdHJ1Y3QgaWVlZV90eXBlc192ZW5kb3Jfc3BlY2lmaWMgKmJjbl93cGFfaWU7CisJdTE2IHdwYV9vZmZzZXQ7CisJc3RydWN0IGllZWVfdHlwZXNfZ2VuZXJpYyAqYmNuX3Jzbl9pZTsKKwl1MTYgcnNuX29mZnNldDsKKwlzdHJ1Y3QgaWVlZV90eXBlc19nZW5lcmljICpiY25fd2FwaV9pZTsKKwl1MTYgd2FwaV9vZmZzZXQ7CisJdTggKmJlYWNvbl9idWY7CisJdTMyIGJlYWNvbl9idWZfc2l6ZTsKKwl1MzIgYmVhY29uX2J1Zl9zaXplX21heDsKKworfTsKKworc3RydWN0IG13aWZpZXhfY3VycmVudF9ic3NfcGFyYW1zIHsKKwlzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yIGJzc19kZXNjcmlwdG9yOworCXU4IHdtbV9lbmFibGVkOworCXU4IHdtbV91YXBzZF9lbmFibGVkOworCXU4IGJhbmQ7CisJdTMyIG51bV9vZl9yYXRlczsKKwl1OCBkYXRhX3JhdGVzW01XSUZJRVhfU1VQUE9SVEVEX1JBVEVTXTsKK307CisKK3N0cnVjdCBtd2lmaWV4X3NsZWVwX3BhcmFtcyB7CisJdTE2IHNwX2Vycm9yOworCXUxNiBzcF9vZmZzZXQ7CisJdTE2IHNwX3N0YWJsZV90aW1lOworCXU4IHNwX2NhbF9jb250cm9sOworCXU4IHNwX2V4dF9zbGVlcF9jbGs7CisJdTE2IHNwX3Jlc2VydmVkOworfTsKKworc3RydWN0IG13aWZpZXhfc2xlZXBfcGVyaW9kIHsKKwl1MTYgcGVyaW9kOworCXUxNiByZXNlcnZlZDsKK307CisKK3N0cnVjdCBtd2lmaWV4X3dlcF9rZXkgeworCXUzMiBsZW5ndGg7CisJdTMyIGtleV9pbmRleDsKKwl1MzIga2V5X2xlbmd0aDsKKwl1OCBrZXlfbWF0ZXJpYWxbTVdJRklFWF9LRVlfQlVGRkVSX1NJWkVdOworfTsKKworI2RlZmluZSBNQVhfUkVHSU9OX0NIQU5ORUxfTlVNICAyCisKK3N0cnVjdCBtd2lmaWV4X2NoYW5fZnJlcV9wb3dlciB7CisJdTE2IGNoYW5uZWw7CisJdTMyIGZyZXE7CisJdTE2IG1heF90eF9wb3dlcjsKKwl1OCB1bnN1cHBvcnRlZDsKK307CisKK2VudW0gc3RhdGVfMTFkX3QgeworCURJU0FCTEVfMTFEID0gMCwKKwlFTkFCTEVfMTFEID0gMSwKK307CisKKyNkZWZpbmUgTVdJRklFWF9NQVhfVFJJUExFVF84MDJfMTFECQk4MworCitzdHJ1Y3QgbXdpZmlleF84MDJfMTFkX2RvbWFpbl9yZWcgeworCXU4IGNvdW50cnlfY29kZVtJRUVFODAyMTFfQ09VTlRSWV9TVFJJTkdfTEVOXTsKKwl1OCBub19vZl90cmlwbGV0OworCXN0cnVjdCBpZWVlODAyMTFfY291bnRyeV9pZV90cmlwbGV0CisJCXRyaXBsZXRbTVdJRklFWF9NQVhfVFJJUExFVF84MDJfMTFEXTsKK307CisKK3N0cnVjdCBtd2lmaWV4X3ZlbmRvcl9zcGVjX2NmZ19pZSB7CisJdTE2IG1hc2s7CisJdTE2IGZsYWc7CisJdTggaWVbTVdJRklFWF9NQVhfVlNJRV9MRU5dOworfTsKKworc3RydWN0IHdwcyB7CisJdTggc2Vzc2lvbl9lbmFibGU7Cit9OworCitzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyOworc3RydWN0IG13aWZpZXhfcHJpdmF0ZTsKKworc3RydWN0IG13aWZpZXhfcHJpdmF0ZSB7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcjsKKwl1OCBic3NfaW5kZXg7CisJdTggYnNzX3R5cGU7CisJdTggYnNzX3JvbGU7CisJdTggYnNzX3ByaW9yaXR5OworCXU4IGJzc19udW07CisJdTggZnJhbWVfdHlwZTsKKwl1OCBjdXJyX2FkZHJbRVRIX0FMRU5dOworCXU4IG1lZGlhX2Nvbm5lY3RlZDsKKwl1MzIgbnVtX3R4X3RpbWVvdXQ7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKKwl1MTYgY3Vycl9wa3RfZmlsdGVyOworCXUzMiBic3NfbW9kZTsKKwl1MzIgcGt0X3R4X2N0cmw7CisJdTE2IHR4X3Bvd2VyX2xldmVsOworCXU4IG1heF90eF9wb3dlcl9sZXZlbDsKKwl1OCBtaW5fdHhfcG93ZXJfbGV2ZWw7CisJdTggdHhfcmF0ZTsKKwl1OCB0eF9odGluZm87CisJdTggcnhwZF9odGluZm87CisJdTggcnhwZF9yYXRlOworCXUxNiByYXRlX2JpdG1hcDsKKwl1MTYgYml0bWFwX3JhdGVzW01BWF9CSVRNQVBfUkFURVNfU0laRV07CisJdTMyIGRhdGFfcmF0ZTsKKwl1OCBpc19kYXRhX3JhdGVfYXV0bzsKKwl1MTYgYmNuX2F2Z19mYWN0b3I7CisJdTE2IGRhdGFfYXZnX2ZhY3RvcjsKKwlzMTYgZGF0YV9yc3NpX2xhc3Q7CisJczE2IGRhdGFfbmZfbGFzdDsKKwlzMTYgZGF0YV9yc3NpX2F2ZzsKKwlzMTYgZGF0YV9uZl9hdmc7CisJczE2IGJjbl9yc3NpX2xhc3Q7CisJczE2IGJjbl9uZl9sYXN0OworCXMxNiBiY25fcnNzaV9hdmc7CisJczE2IGJjbl9uZl9hdmc7CisJc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYXR0ZW1wdGVkX2Jzc19kZXNjOworCXN0cnVjdCBtd2lmaWV4XzgwMl8xMV9zc2lkIHByZXZfc3NpZDsKKwl1OCBwcmV2X2Jzc2lkW0VUSF9BTEVOXTsKKwlzdHJ1Y3QgbXdpZmlleF9jdXJyZW50X2Jzc19wYXJhbXMgY3Vycl9ic3NfcGFyYW1zOworCXUxNiBiZWFjb25fcGVyaW9kOworCXUxNiBsaXN0ZW5faW50ZXJ2YWw7CisJdTE2IGF0aW1fd2luZG93OworCXU4IGFkaG9jX2NoYW5uZWw7CisJdTggYWRob2NfaXNfbGlua19zZW5zZWQ7CisJdTggYWRob2Nfc3RhdGU7CisJc3RydWN0IG13aWZpZXhfODAyXzExX3NlY3VyaXR5IHNlY19pbmZvOworCXN0cnVjdCBtd2lmaWV4X3dlcF9rZXkgd2VwX2tleVtOVU1fV0VQX0tFWVNdOworCXUxNiB3ZXBfa2V5X2N1cnJfaW5kZXg7CisJdTggd3BhX2llWzI1Nl07CisJdTggd3BhX2llX2xlbjsKKwl1OCB3cGFfaXNfZ3RrX3NldDsKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2tleV9tYXRlcmlhbCBhZXNfa2V5OworCXU4IHdhcGlfaWVbMjU2XTsKKwl1OCB3YXBpX2llX2xlbjsKKwl1OCB3bW1fcmVxdWlyZWQ7CisJdTggd21tX2VuYWJsZWQ7CisJdTggd21tX3Fvc2luZm87CisJc3RydWN0IG13aWZpZXhfd21tX2Rlc2Mgd21tOworCXN0cnVjdCBsaXN0X2hlYWQgdHhfYmFfc3RyZWFtX3RibF9wdHI7CisJLyogc3BpbiBsb2NrIGZvciB0eF9iYV9zdHJlYW1fdGJsX3B0ciBxdWV1ZSAqLworCXNwaW5sb2NrX3QgdHhfYmFfc3RyZWFtX3RibF9sb2NrOworCXN0cnVjdCBtd2lmaWV4X3R4X2FnZ3IgYWdncl9wcmlvX3RibFtNQVhfTlVNX1RJRF07CisJc3RydWN0IG13aWZpZXhfYWRkX2JhX3BhcmFtIGFkZF9iYV9wYXJhbTsKKwl1MTYgcnhfc2VxW01BWF9OVU1fVElEXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHJ4X3Jlb3JkZXJfdGJsX3B0cjsKKwkvKiBzcGluIGxvY2sgZm9yIHJ4X3Jlb3JkZXJfdGJsX3B0ciBxdWV1ZSAqLworCXNwaW5sb2NrX3QgcnhfcmVvcmRlcl90YmxfbG9jazsKKwkvKiBzcGluIGxvY2sgZm9yIFJ4IHBhY2tldHMgKi8KKwlzcGlubG9ja190IHJ4X3BrdF9sb2NrOworCisjZGVmaW5lIE1XSUZJRVhfQVNTT0NfUlNQX0JVRl9TSVpFICA1MDAKKwl1OCBhc3NvY19yc3BfYnVmW01XSUZJRVhfQVNTT0NfUlNQX0JVRl9TSVpFXTsKKwl1MzIgYXNzb2NfcnNwX3NpemU7CisKKyNkZWZpbmUgTVdJRklFWF9HRU5JRV9CVUZfU0laRSAgICAgIDI1NgorCXU4IGdlbl9pZV9idWZbTVdJRklFWF9HRU5JRV9CVUZfU0laRV07CisJdTggZ2VuX2llX2J1Zl9sZW47CisKKwlzdHJ1Y3QgbXdpZmlleF92ZW5kb3Jfc3BlY19jZmdfaWUgdnNfaWVbTVdJRklFWF9NQVhfVlNJRV9OVU1dOworCisjZGVmaW5lIE1XSUZJRVhfQVNTT0NfVExWX0JVRl9TSVpFICAyNTYKKwl1OCBhc3NvY190bHZfYnVmW01XSUZJRVhfQVNTT0NfVExWX0JVRl9TSVpFXTsKKwl1OCBhc3NvY190bHZfYnVmX2xlbjsKKworCXU4ICpjdXJyX2Jjbl9idWY7CisJdTMyIGN1cnJfYmNuX3NpemU7CisJLyogc3BpbiBsb2NrIGZvciBiZWFjb24gYnVmZmVyICovCisJc3BpbmxvY2tfdCBjdXJyX2Jjbl9idWZfbG9jazsKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2OworCXN0cnVjdCBtd2lmaWV4X2NoYW5fZnJlcV9wb3dlciBjZnA7CisJY2hhciB2ZXJzaW9uX3N0clsxMjhdOworI2lmZGVmIENPTkZJR19ERUJVR19GUworCXN0cnVjdCBkZW50cnkgKmRmc19kZXZfZGlyOworI2VuZGlmCisJdTggbmlja19uYW1lWzE2XTsKKwlzdHJ1Y3QgaXdfc3RhdGlzdGljcyB3X3N0YXRzOworCXUxNiBjdXJyZW50X2tleV9pbmRleDsKKwlzdHJ1Y3Qgc2VtYXBob3JlIGFzeW5jX3NlbTsKKwl1OCBzY2FuX3BlbmRpbmdfb25fYmxvY2s7CisJdTggcmVwb3J0X3NjYW5fcmVzdWx0OworCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnNjYW5fcmVxdWVzdDsKKwlpbnQgc2Nhbl9yZXN1bHRfc3RhdHVzOworCWludCBhc3NvY19yZXF1ZXN0OworCXUxNiBhc3NvY19yZXN1bHQ7CisJaW50IGlic3Nfam9pbl9yZXF1ZXN0OworCXUxNiBpYnNzX2pvaW5fcmVzdWx0OworCWJvb2wgZGlzY29ubmVjdDsKKwl1OCBjZmdfYnNzaWRbNl07CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtxdWV1ZTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY2ZnX3dvcmtxdWV1ZTsKKwl1OCBjb3VudHJ5X2NvZGVbSUVFRTgwMjExX0NPVU5UUllfU1RSSU5HX0xFTl07CisJc3RydWN0IHdwcyB3cHM7CisJdTggc2Nhbl9ibG9jazsKK307CisKK2VudW0gbXdpZmlleF9iYV9zdGF0dXMgeworCUJBX1NUUkVBTV9OT1RfU0VUVVAgPSAwLAorCUJBX1NUUkVBTV9TRVRVUF9JTlBST0dSRVNTLAorCUJBX1NUUkVBTV9TRVRVUF9DT01QTEVURQorfTsKKworc3RydWN0IG13aWZpZXhfdHhfYmFfc3RyZWFtX3RibCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWludCB0aWQ7CisJdTggcmFbRVRIX0FMRU5dOworCWVudW0gbXdpZmlleF9iYV9zdGF0dXMgYmFfc3RhdHVzOworfTsKKworc3RydWN0IG13aWZpZXhfcnhfcmVvcmRlcl90Ymw7CisKK3N0cnVjdCByZW9yZGVyX3Rtcl9jbnh0IHsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKwlzdHJ1Y3QgbXdpZmlleF9yeF9yZW9yZGVyX3RibCAqcHRyOworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgbXdpZmlleF9yeF9yZW9yZGVyX3RibCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWludCB0aWQ7CisJdTggdGFbRVRIX0FMRU5dOworCWludCBzdGFydF93aW47CisJaW50IHdpbl9zaXplOworCXZvaWQgKipyeF9yZW9yZGVyX3B0cjsKKwlzdHJ1Y3QgcmVvcmRlcl90bXJfY254dCB0aW1lcl9jb250ZXh0OworfTsKKworc3RydWN0IG13aWZpZXhfYnNzX3ByaW9fbm9kZSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgbXdpZmlleF9ic3NfcHJpb190YmwgeworCXN0cnVjdCBsaXN0X2hlYWQgYnNzX3ByaW9faGVhZDsKKwkvKiBzcGluIGxvY2sgZm9yIGJzcyBwcmlvcml0eSAgKi8KKwlzcGlubG9ja190IGJzc19wcmlvX2xvY2s7CisJc3RydWN0IG13aWZpZXhfYnNzX3ByaW9fbm9kZSAqYnNzX3ByaW9fY3VyOworfTsKKworc3RydWN0IGNtZF9jdHJsX25vZGUgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2OworCXUzMiBjbWRfb2lkOworCXUzMiBjbWRfZmxhZzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqY21kX3NrYjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqcmVzcF9za2I7CisJdm9pZCAqZGF0YV9idWY7CisJdTMyIHdhaXRfcV9lbmFibGVkOworCXN0cnVjdCBza19idWZmICpza2I7Cit9OworCitzdHJ1Y3QgbXdpZmlleF9pZl9vcHMgeworCWludCAoKmluaXRfaWYpIChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICopOworCXZvaWQgKCpjbGVhbnVwX2lmKSAoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqKTsKKwlpbnQgKCpjaGVja19md19zdGF0dXMpIChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICosIHUzMiwgaW50ICopOworCWludCAoKnByb2dfZncpIChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICosIHN0cnVjdCBtd2lmaWV4X2Z3X2ltYWdlICopOworCWludCAoKnJlZ2lzdGVyX2RldikgKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKik7CisJdm9pZCAoKnVucmVnaXN0ZXJfZGV2KSAoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqKTsKKwlpbnQgKCplbmFibGVfaW50KSAoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqKTsKKwlpbnQgKCpwcm9jZXNzX2ludF9zdGF0dXMpIChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICopOworCWludCAoKmhvc3RfdG9fY2FyZCkgKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKiwgdTgsCisJCQkgICAgIHU4ICpwYXlsb2FkLCB1MzIgcGt0X2xlbiwKKwkJCSAgICAgc3RydWN0IG13aWZpZXhfdHhfcGFyYW0gKik7CisJaW50ICgqd2FrZXVwKSAoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqKTsKKwlpbnQgKCp3YWtldXBfY29tcGxldGUpIChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICopOworCisJdm9pZCAoKnVwZGF0ZV9tcF9lbmRfcG9ydCkgKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKiwgdTE2KTsKKwl2b2lkICgqY2xlYW51cF9tcGFfYnVmKSAoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqKTsKK307CisKK3N0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgeworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXZbTVdJRklFWF9NQVhfQlNTX05VTV07CisJdTggcHJpdl9udW07CisJc3RydWN0IG13aWZpZXhfZHJ2X21vZGUgKmRydl9tb2RlOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmU7CisJc3RydWN0IGRldmljZSAqZGV2OworCWJvb2wgc3VycHJpc2VfcmVtb3ZlZDsKKwl1MzIgZndfcmVsZWFzZV9udW1iZXI7CisJdTMyIHJldmlzaW9uX2lkOworCXUxNiBpbml0X3dhaXRfcV93b2tlbjsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBpbml0X3dhaXRfcTsKKwl2b2lkICpjYXJkOworCXN0cnVjdCBtd2lmaWV4X2lmX29wcyBpZl9vcHM7CisJYXRvbWljX3QgcnhfcGVuZGluZzsKKwlhdG9taWNfdCB0eF9wZW5kaW5nOworCWF0b21pY190IGNtZF9wZW5kaW5nOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrcXVldWU7CisJc3RydWN0IHdvcmtfc3RydWN0IG1haW5fd29yazsKKwlzdHJ1Y3QgbXdpZmlleF9ic3NfcHJpb190YmwgYnNzX3ByaW9fdGJsW01XSUZJRVhfTUFYX0JTU19OVU1dOworCS8qIHNwaW4gbG9jayBmb3IgaW5pdC9zaHV0ZG93biAqLworCXNwaW5sb2NrX3QgbXdpZmlleF9sb2NrOworCS8qIHNwaW4gbG9jayBmb3IgbWFpbiBwcm9jZXNzICovCisJc3BpbmxvY2tfdCBtYWluX3Byb2NfbG9jazsKKwl1MzIgbXdpZmlleF9wcm9jZXNzaW5nOworCXUxNiBtYXhfdHhfYnVmX3NpemU7CisJdTE2IHR4X2J1Zl9zaXplOworCXUxNiBjdXJyX3R4X2J1Zl9zaXplOworCXUzMiBpb3BvcnQ7CisJZW51bSBNV0lGSUVYX0hBUkRXQVJFX1NUQVRVUyBod19zdGF0dXM7CisJdTE2IG51bWJlcl9vZl9hbnRlbm5hOworCXUzMiBmd19jYXBfaW5mbzsKKwkvKiBzcGluIGxvY2sgZm9yIGludGVycnVwdCBoYW5kbGluZyAqLworCXNwaW5sb2NrX3QgaW50X2xvY2s7CisJdTggaW50X3N0YXR1czsKKwl1MzIgZXZlbnRfY2F1c2U7CisJc3RydWN0IHNrX2J1ZmYgKmV2ZW50X3NrYjsKKwl1OCB1cGxkX2J1ZltNV0lGSUVYX1VQTERfU0laRV07CisJdTggZGF0YV9zZW50OworCXU4IGNtZF9zZW50OworCXU4IGNtZF9yZXNwX3JlY2VpdmVkOworCXU4IGV2ZW50X3JlY2VpdmVkOworCXU4IGRhdGFfcmVjZWl2ZWQ7CisJdTE2IHNlcV9udW07CisJc3RydWN0IGNtZF9jdHJsX25vZGUgKmNtZF9wb29sOworCXN0cnVjdCBjbWRfY3RybF9ub2RlICpjdXJyX2NtZDsKKwkvKiBzcGluIGxvY2sgZm9yIGNvbW1hbmQgKi8KKwlzcGlubG9ja190IG13aWZpZXhfY21kX2xvY2s7CisJdTMyIG51bV9jbWRfdGltZW91dDsKKwl1MTYgbGFzdF9pbml0X2NtZDsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBjbWRfdGltZXI7CisJc3RydWN0IGxpc3RfaGVhZCBjbWRfZnJlZV9xOworCS8qIHNwaW4gbG9jayBmb3IgY21kX2ZyZWVfcSAqLworCXNwaW5sb2NrX3QgY21kX2ZyZWVfcV9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgY21kX3BlbmRpbmdfcTsKKwkvKiBzcGluIGxvY2sgZm9yIGNtZF9wZW5kaW5nX3EgKi8KKwlzcGlubG9ja190IGNtZF9wZW5kaW5nX3FfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHNjYW5fcGVuZGluZ19xOworCS8qIHNwaW4gbG9jayBmb3Igc2Nhbl9wZW5kaW5nX3EgKi8KKwlzcGlubG9ja190IHNjYW5fcGVuZGluZ19xX2xvY2s7CisJdTMyIHNjYW5fcHJvY2Vzc2luZzsKKwl1MTYgcmVnaW9uX2NvZGU7CisJc3RydWN0IG13aWZpZXhfODAyXzExZF9kb21haW5fcmVnIGRvbWFpbl9yZWc7CisJc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqc2Nhbl90YWJsZTsKKwl1MzIgbnVtX2luX3NjYW5fdGFibGU7CisJdTE2IHNjYW5fcHJvYmVzOworCXUzMiBzY2FuX21vZGU7CisJdTE2IHNwZWNpZmljX3NjYW5fdGltZTsKKwl1MTYgYWN0aXZlX3NjYW5fdGltZTsKKwl1MTYgcGFzc2l2ZV9zY2FuX3RpbWU7CisJdTggYmNuX2J1ZltNQVhfU0NBTl9CRUFDT05fQlVGRkVSXTsKKwl1OCAqYmNuX2J1Zl9lbmQ7CisJdTggZndfYmFuZHM7CisJdTggYWRob2Nfc3RhcnRfYmFuZDsKKwl1OCBjb25maWdfYmFuZHM7CisJc3RydWN0IG13aWZpZXhfY2hhbl9zY2FuX3BhcmFtX3NldCAqc2Nhbl9jaGFubmVsczsKKwl1OCB0eF9sb2NrX2ZsYWc7CisJc3RydWN0IG13aWZpZXhfc2xlZXBfcGFyYW1zIHNsZWVwX3BhcmFtczsKKwlzdHJ1Y3QgbXdpZmlleF9zbGVlcF9wZXJpb2Qgc2xlZXBfcGVyaW9kOworCXUxNiBwc19tb2RlOworCXUzMiBwc19zdGF0ZTsKKwl1OCBuZWVkX3RvX3dha2V1cDsKKwl1MTYgbXVsdGlwbGVfZHRpbTsKKwl1MTYgbG9jYWxfbGlzdGVuX2ludGVydmFsOworCXUxNiBudWxsX3BrdF9pbnRlcnZhbDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2xlZXBfY2ZtOworCXUxNiBiY25fbWlzc190aW1lX291dDsKKwl1MTYgYWRob2NfYXdha2VfcGVyaW9kOworCXU4IGlzX2RlZXBfc2xlZXA7CisJdTggZGVsYXlfbnVsbF9wa3Q7CisJdTE2IGRlbGF5X3RvX3BzOworCXUxNiBlbmhhbmNlZF9wc19tb2RlOworCXU4IHBtX3dha2V1cF9jYXJkX3JlcTsKKwl1MTYgZ2VuX251bGxfcGt0OworCXUxNiBwcHNfdWFwc2RfbW9kZTsKKwl1MzIgcG1fd2FrZXVwX2Z3X3RyeTsKKwl1OCBpc19oc19jb25maWd1cmVkOworCXN0cnVjdCBtd2lmaWV4X2hzX2NvbmZpZ19wYXJhbSBoc19jZmc7CisJdTggaHNfYWN0aXZhdGVkOworCXUxNiBoc19hY3RpdmF0ZV93YWl0X3Ffd29rZW47CisJd2FpdF9xdWV1ZV9oZWFkX3QgaHNfYWN0aXZhdGVfd2FpdF9xOworCWJvb2wgaXNfc3VzcGVuZGVkOworCXU4IGV2ZW50X2JvZHlbTUFYX0VWRU5UX1NJWkVdOworCXUzMiBod19kb3RfMTFuX2Rldl9jYXA7CisJdTggaHdfZGV2X21jc19zdXBwb3J0OworCXU4IGFkaG9jXzExbl9lbmFibGVkOworCXU4IGNoYW5fb2Zmc2V0OworCXN0cnVjdCBtd2lmaWV4X2RiZyBkYmc7CisJdTggYXJwX2ZpbHRlcltBUlBfRklMVEVSX01BWF9CVUZfU0laRV07CisJdTMyIGFycF9maWx0ZXJfc2l6ZTsKKwl1MTYgY21kX3dhaXRfcV9yZXF1aXJlZDsKKwlzdHJ1Y3QgbXdpZmlleF93YWl0X3F1ZXVlIGNtZF93YWl0X3E7Cit9OworCitpbnQgbXdpZmlleF9pbml0X2xvY2tfbGlzdChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgbXdpZmlleF9mcmVlX2xvY2tfbGlzdChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKTsKKworaW50IG13aWZpZXhfaW5pdF9mdyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKTsKKworaW50IG13aWZpZXhfaW5pdF9md19jb21wbGV0ZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKTsKKworaW50IG13aWZpZXhfc2h1dGRvd25fZHJ2KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpOworCitpbnQgbXdpZmlleF9zaHV0ZG93bl9md19jb21wbGV0ZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKTsKKworaW50IG13aWZpZXhfZG5sZF9mdyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICosIHN0cnVjdCBtd2lmaWV4X2Z3X2ltYWdlICopOworCitpbnQgbXdpZmlleF9yZWN2X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICosIHN0cnVjdCBza19idWZmICpza2IpOworCitpbnQgbXdpZmlleF9wcm9jZXNzX2V2ZW50KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpOworCitpbnQgbXdpZmlleF9jb21wbGV0ZV9jbWQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcik7CisKK2ludCBtd2lmaWV4X3NlbmRfY21kX2FzeW5jKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHVpbnQxNl90IGNtZF9ubywKKwkJCSAgIHUxNiBjbWRfYWN0aW9uLCB1MzIgY21kX29pZCwgdm9pZCAqZGF0YV9idWYpOworCitpbnQgbXdpZmlleF9zZW5kX2NtZF9zeW5jKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHVpbnQxNl90IGNtZF9ubywKKwkJCSAgdTE2IGNtZF9hY3Rpb24sIHUzMiBjbWRfb2lkLCB2b2lkICpkYXRhX2J1Zik7CisKK3ZvaWQgbXdpZmlleF9jbWRfdGltZW91dF9mdW5jKHVuc2lnbmVkIGxvbmcgZnVuY3Rpb25fY29udGV4dCk7CisKK2ludCBtd2lmaWV4X2dldF9kZWJ1Z19pbmZvKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKiwKKwkJCSAgIHN0cnVjdCBtd2lmaWV4X2RlYnVnX2luZm8gKik7CisKK2ludCBtd2lmaWV4X2FsbG9jX2NtZF9idWZmZXIoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcik7CitpbnQgbXdpZmlleF9mcmVlX2NtZF9idWZmZXIoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIG13aWZpZXhfY2FuY2VsX2FsbF9wZW5kaW5nX2NtZChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgbXdpZmlleF9jYW5jZWxfcGVuZGluZ19pb2N0bChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKTsKKwordm9pZCBtd2lmaWV4X2luc2VydF9jbWRfdG9fZnJlZV9xKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICBzdHJ1Y3QgY21kX2N0cmxfbm9kZSAqY21kX25vZGUpOworCit2b2lkIG13aWZpZXhfaW5zZXJ0X2NtZF90b19wZW5kaW5nX3Eoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgICAgIHN0cnVjdCBjbWRfY3RybF9ub2RlICpjbWRfbm9kZSwKKwkJCQkgICAgIHUzMiBhZGR0YWlsKTsKKworaW50IG13aWZpZXhfZXhlY19uZXh0X2NtZChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKTsKK2ludCBtd2lmaWV4X3Byb2Nlc3NfY21kcmVzcChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKTsKK2ludCBtd2lmaWV4X2hhbmRsZV9yeF9wYWNrZXQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitpbnQgbXdpZmlleF9wcm9jZXNzX3R4KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgICBzdHJ1Y3QgbXdpZmlleF90eF9wYXJhbSAqdHhfcGFyYW0pOworaW50IG13aWZpZXhfc2VuZF9udWxsX3BhY2tldChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCBmbGFncyk7CitpbnQgbXdpZmlleF93cml0ZV9kYXRhX2NvbXBsZXRlKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHN0YXR1cyk7CitpbnQgbXdpZmlleF9yZWN2X3BhY2tldF9jb21wbGV0ZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICosCisJCQkJIHN0cnVjdCBza19idWZmICpza2IsIGludCBzdGF0dXMpOwordm9pZCBtd2lmaWV4X2NsZWFuX3R4cngoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdik7Cit1OCBtd2lmaWV4X2NoZWNrX2xhc3RfcGFja2V0X2luZGljYXRpb24oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdik7Cit2b2lkIG13aWZpZXhfY2hlY2tfcHNfY29uZChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgbXdpZmlleF9wcm9jZXNzX3NsZWVwX2NvbmZpcm1fcmVzcChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICosIHU4ICosCisJCQkJCXUzMik7CitpbnQgbXdpZmlleF9jbWRfZW5oX3Bvd2VyX21vZGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLAorCQkJICAgICAgIHUxNiBjbWRfYWN0aW9uLCB1aW50MTZfdCBwc19iaXRtYXAsCisJCQkgICAgICAgdm9pZCAqZGF0YV9idWYpOworaW50IG13aWZpZXhfcmV0X2VuaF9wb3dlcl9tb2RlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgICAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKnJlc3AsCisJCQkgICAgICAgdm9pZCAqZGF0YV9idWYpOwordm9pZCBtd2lmaWV4X3Byb2Nlc3NfaHNfY29uZmlnKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBtd2lmaWV4X2hzX2FjdGl2YXRlZF9ldmVudChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCQl1OCBhY3RpdmF0ZWQpOworaW50IG13aWZpZXhfcmV0XzgwMl8xMV9oc19jZmcoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwKTsKK2ludCBtd2lmaWV4X3Byb2Nlc3NfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCBtd2lmaWV4X3N0YV9wcmVwYXJlX2NtZChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICosIHVpbnQxNl90IGNtZF9ubywKKwkJCSAgICB1MTYgY21kX2FjdGlvbiwgdTMyIGNtZF9vaWQsCisJCQkgICAgdm9pZCAqZGF0YV9idWYsIHZvaWQgKmNtZF9idWYpOworaW50IG13aWZpZXhfcHJvY2Vzc19zdGFfY21kcmVzcChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICosIHUxNiBjbWRyZXNwX25vLAorCQkJCXZvaWQgKmNtZF9idWYpOworaW50IG13aWZpZXhfcHJvY2Vzc19zdGFfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKiwKKwkJCQkgIHN0cnVjdCBza19idWZmICpza2IpOworaW50IG13aWZpZXhfcHJvY2Vzc19zdGFfZXZlbnQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqKTsKK3ZvaWQgKm13aWZpZXhfcHJvY2Vzc19zdGFfdHhwZChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICosIHN0cnVjdCBza19idWZmICpza2IpOworaW50IG13aWZpZXhfc3RhX2luaXRfY21kKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKiwgdTggZmlyc3Rfc3RhKTsKK2ludCBtd2lmaWV4X3NjYW5fbmV0d29ya3Moc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgY29uc3Qgc3RydWN0IG13aWZpZXhfdXNlcl9zY2FuX2NmZyAqdXNlcl9zY2FuX2luKTsKK2ludCBtd2lmaWV4X2NtZF84MDJfMTFfc2NhbihzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLAorCQkJICAgIHZvaWQgKmRhdGFfYnVmKTsKK3ZvaWQgbXdpZmlleF9xdWV1ZV9zY2FuX2NtZChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgIHN0cnVjdCBjbWRfY3RybF9ub2RlICpjbWRfbm9kZSk7CitpbnQgbXdpZmlleF9yZXRfODAyXzExX3NjYW4oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqcmVzcCk7CitzMzIgbXdpZmlleF9maW5kX3NzaWRfaW5fbGlzdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCXN0cnVjdCBtd2lmaWV4XzgwMl8xMV9zc2lkICpzc2lkLCB1OCAqYnNzaWQsCisJCQkJdTMyIG1vZGUpOworczMyIG13aWZpZXhfZmluZF9ic3NpZF9pbl9saXN0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHU4ICpic3NpZCwKKwkJCQkgdTMyIG1vZGUpOworaW50IG13aWZpZXhfZmluZF9iZXN0X25ldHdvcmsoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgIHN0cnVjdCBtd2lmaWV4X3NzaWRfYnNzaWQgKnJlcV9zc2lkX2Jzc2lkKTsKK3MzMiBtd2lmaWV4X3NzaWRfY21wKHN0cnVjdCBtd2lmaWV4XzgwMl8xMV9zc2lkICpzc2lkMSwKKwkJICAgICAgIHN0cnVjdCBtd2lmaWV4XzgwMl8xMV9zc2lkICpzc2lkMik7CitpbnQgbXdpZmlleF9hc3NvY2lhdGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJICAgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MpOworaW50IG13aWZpZXhfY21kXzgwMl8xMV9hc3NvY2lhdGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQKKwkJCQkgKmNtZCwgdm9pZCAqZGF0YV9idWYpOworaW50IG13aWZpZXhfcmV0XzgwMl8xMV9hc3NvY2lhdGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKnJlc3ApOwordm9pZCBtd2lmaWV4X3Jlc2V0X2Nvbm5lY3Rfc3RhdGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdik7Cit2b2lkIG13aWZpZXhfMjA0MF9jb2V4X2V2ZW50KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpOwordTggbXdpZmlleF9iYW5kX3RvX3JhZGlvX3R5cGUodTggYmFuZCk7CitpbnQgbXdpZmlleF9kZWF1dGhlbnRpY2F0ZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCAqbWFjKTsKK2ludCBtd2lmaWV4X2FkaG9jX3N0YXJ0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQlzdHJ1Y3QgbXdpZmlleF84MDJfMTFfc3NpZCAqYWRob2Nfc3NpZCk7CitpbnQgbXdpZmlleF9hZGhvY19qb2luKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCSAgICAgICBzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYyk7CitpbnQgbXdpZmlleF9jbWRfODAyXzExX2FkX2hvY19zdGFydChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCSAgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLAorCQkJCSAgICB2b2lkICpkYXRhX2J1Zik7CitpbnQgbXdpZmlleF9jbWRfODAyXzExX2FkX2hvY19qb2luKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJICAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwKKwkJCQkgICB2b2lkICpkYXRhX2J1Zik7CitpbnQgbXdpZmlleF9yZXRfODAyXzExX2FkX2hvYyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKnJlc3ApOworaW50IG13aWZpZXhfY21kXzgwMl8xMV9iZ19zY2FuX3F1ZXJ5KHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWQpOworc3RydWN0IG13aWZpZXhfY2hhbl9mcmVxX3Bvd2VyICoKKwkJCW13aWZpZXhfZ2V0X2NmcF9ieV9iYW5kX2FuZF9jaGFubmVsX2Zyb21fY2ZnODAyMTEoCisJCQkJCQlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCQkJdTggYmFuZCwgdTE2IGNoYW5uZWwpOworc3RydWN0IG13aWZpZXhfY2hhbl9mcmVxX3Bvd2VyICptd2lmaWV4X2dldF9jZnBfYnlfYmFuZF9hbmRfZnJlcV9mcm9tX2NmZzgwMjExKAorCQkJCQkJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkJCXU4IGJhbmQsIHUzMiBmcmVxKTsKK3UzMiBtd2lmaWV4X2luZGV4X3RvX2RhdGFfcmF0ZSh1OCBpbmRleCwgdTggaHRfaW5mbyk7Cit1MzIgbXdpZmlleF9maW5kX2ZyZXFfZnJvbV9iYW5kX2NoYW4odTgsIHU4KTsKK2ludCBtd2lmaWV4X2NtZF9hcHBlbmRfdnNpZV90bHYoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTE2IHZzaWVfbWFzaywKKwkJCQl1OCAqKmJ1ZmZlcik7Cit1MzIgbXdpZmlleF9nZXRfYWN0aXZlX2RhdGFfcmF0ZXMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgICAgdTggKnJhdGVzKTsKK3UzMiBtd2lmaWV4X2dldF9zdXBwb3J0ZWRfcmF0ZXMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggKnJhdGVzKTsKK3U4IG13aWZpZXhfZGF0YV9yYXRlX3RvX2luZGV4KHUzMiByYXRlKTsKK3U4IG13aWZpZXhfaXNfcmF0ZV9hdXRvKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpOworaW50IG13aWZpZXhfZ2V0X3JhdGVfaW5kZXgodTE2ICpyYXRlQml0bWFwLCBpbnQgc2l6ZSk7CitleHRlcm4gdTE2IHJlZ2lvbl9jb2RlX2luZGV4W01XSUZJRVhfTUFYX1JFR0lPTl9DT0RFXTsKK3ZvaWQgbXdpZmlleF9zYXZlX2N1cnJfYmNuKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpOwordm9pZCBtd2lmaWV4X2ZyZWVfY3Vycl9iY24oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdik7CitpbnQgbXdpZmlleF9jbWRfZ2V0X2h3X3NwZWMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kKTsKK2ludCBtd2lmaWV4X3JldF9nZXRfaHdfc3BlYyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwKTsKK2ludCBpc19jb21tYW5kX3BlbmRpbmcoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcik7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgcXVldWluZyBpcyBSQSBiYXNlZCBvciBub3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTgKK213aWZpZXhfcXVldWluZ19yYV9iYXNlZChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KQoreworCS8qCisJICogQ3VycmVudGx5IHdlIGFzc3VtZSBpZiB3ZSBhcmUgaW4gSW5mcmEsIHRoZW4gREE9UkEuIFRoaXMgbWlnaHQgbm90IGJlCisJICogdHJ1ZSBpbiB0aGUgZnV0dXJlCisJICovCisJaWYgKChwcml2LT5ic3NfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSAmJgorCSAgICAoR0VUX0JTU19ST0xFKHByaXYpID09IE1XSUZJRVhfQlNTX1JPTEVfU1RBKSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyByYXRlcy4KKyAqLworc3RhdGljIGlubGluZSB1MzIKK213aWZpZXhfY29weV9yYXRlcyh1OCAqZGVzdCwgdTMyIHBvcywgdTggKnNyYywgaW50IGxlbikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW4gJiYgc3JjW2ldOyBpKyssIHBvcysrKSB7CisJCWlmIChwb3MgPj0gTVdJRklFWF9TVVBQT1JURURfUkFURVMpCisJCQlicmVhazsKKwkJZGVzdFtwb3NdID0gc3JjW2ldOworCX0KKworCXJldHVybiBwb3M7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNvcnJlY3QgcHJpdmF0ZSBzdHJ1Y3R1cmUgcG9pbnRlciBiYXNlZAorICogdXBvbiB0aGUgQlNTIHR5cGUgYW5kIEJTUyBudW1iZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqCittd2lmaWV4X2dldF9wcml2X2J5X2lkKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCSAgICAgICB1OCBic3NfbnVtLCB1OCBic3NfdHlwZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5wcml2X251bTsgaSsrKSB7CisJCWlmIChhZGFwdGVyLT5wcml2W2ldKSB7CisJCQlpZiAoKGFkYXB0ZXItPnByaXZbaV0tPmJzc19udW0gPT0gYnNzX251bSkKKwkJCSAgICAmJiAoYWRhcHRlci0+cHJpdltpXS0+YnNzX3R5cGUgPT0gYnNzX3R5cGUpKQorCQkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiAoKGkgPCBhZGFwdGVyLT5wcml2X251bSkgPyBhZGFwdGVyLT5wcml2W2ldIDogTlVMTCk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGZpcnN0IGF2YWlsYWJsZSBwcml2YXRlIHN0cnVjdHVyZSBwb2ludGVyCisgKiBiYXNlZCB1cG9uIHRoZSBCU1Mgcm9sZS4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICoKK213aWZpZXhfZ2V0X3ByaXYoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwKKwkJIGVudW0gbXdpZmlleF9ic3Nfcm9sZSBic3Nfcm9sZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5wcml2X251bTsgaSsrKSB7CisJCWlmIChhZGFwdGVyLT5wcml2W2ldKSB7CisJCQlpZiAoYnNzX3JvbGUgPT0gTVdJRklFWF9CU1NfUk9MRV9BTlkgfHwKKwkJCSAgICBHRVRfQlNTX1JPTEUoYWRhcHRlci0+cHJpdltpXSkgPT0gYnNzX3JvbGUpCisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gKChpIDwgYWRhcHRlci0+cHJpdl9udW0pID8gYWRhcHRlci0+cHJpdltpXSA6IE5VTEwpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmUgb2YgYSBuZXR3b3JrIGRldmljZS4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICoKK213aWZpZXhfbmV0ZGV2X2dldF9wcml2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICopICgqKHVuc2lnbmVkIGxvbmcgKikgbmV0ZGV2X3ByaXYoZGV2KSk7Cit9CisKK3N0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKm13aWZpZXhfYnNzX2luZGV4X3RvX3ByaXYoc3RydWN0IG13aWZpZXhfYWRhcHRlcgorCQkJCQkJKmFkYXB0ZXIsIHU4IGJzc19pbmRleCk7CitpbnQgbXdpZmlleF9pbml0X3NodXRkb3duX2Z3KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgIHUzMiBmdW5jX2luaXRfc2h1dGRvd24pOworaW50IG13aWZpZXhfYWRkX2NhcmQodm9pZCAqLCBzdHJ1Y3Qgc2VtYXBob3JlICosIHN0cnVjdCBtd2lmaWV4X2lmX29wcyAqKTsKK2ludCBtd2lmaWV4X3JlbW92ZV9jYXJkKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKiwgc3RydWN0IHNlbWFwaG9yZSAqKTsKKwordm9pZCBtd2lmaWV4X2dldF92ZXJzaW9uKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsIGNoYXIgKnZlcnNpb24sCisJCQkgaW50IG1heGxlbik7CitpbnQgbXdpZmlleF9yZXF1ZXN0X3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJc3RydWN0IG13aWZpZXhfbXVsdGljYXN0X2xpc3QgKm1jYXN0X2xpc3QpOworaW50IG13aWZpZXhfY29weV9tY2FzdF9hZGRyKHN0cnVjdCBtd2lmaWV4X211bHRpY2FzdF9saXN0ICptbGlzdCwKKwkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2ludCBtd2lmaWV4X3dhaXRfcXVldWVfY29tcGxldGUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcik7CitpbnQgbXdpZmlleF9ic3Nfc3RhcnQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJICAgICAgc3RydWN0IG13aWZpZXhfc3NpZF9ic3NpZCAqc3NpZF9ic3NpZCk7CitpbnQgbXdpZmlleF9zZXRfaHNfcGFyYW1zKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgICB1MTYgYWN0aW9uLCBpbnQgY21kX3R5cGUsCisJCQkgICAgICBzdHJ1Y3QgbXdpZmlleF9kc19oc19jZmcgKmhzY2ZnKTsKK2ludCBtd2lmaWV4X2NhbmNlbF9ocyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBpbnQgY21kX3R5cGUpOworaW50IG13aWZpZXhfZW5hYmxlX2hzKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50IG13aWZpZXhfZ2V0X3NpZ25hbF9pbmZvKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgc3RydWN0IG13aWZpZXhfZHNfZ2V0X3NpZ25hbCAqc2lnbmFsKTsKK2ludCBtd2lmaWV4X2Rydl9nZXRfZGF0YV9yYXRlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgbXdpZmlleF9yYXRlX2NmZyAqcmF0ZSk7CitpbnQgbXdpZmlleF9maW5kX2Jlc3RfYnNzKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgIHN0cnVjdCBtd2lmaWV4X3NzaWRfYnNzaWQgKnNzaWRfYnNzaWQpOworaW50IG13aWZpZXhfcmVxdWVzdF9zY2FuKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgc3RydWN0IG13aWZpZXhfODAyXzExX3NzaWQgKnJlcV9zc2lkKTsKK2ludCBtd2lmaWV4X3NldF91c2VyX3NjYW5faW9jdGwoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQlzdHJ1Y3QgbXdpZmlleF91c2VyX3NjYW5fY2ZnICpzY2FuX3JlcSk7CitpbnQgbXdpZmlleF9jaGFuZ2VfYWRob2NfY2hhbihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBpbnQgY2hhbm5lbCk7CitpbnQgbXdpZmlleF9zZXRfcmFkaW8oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggb3B0aW9uKTsKKworaW50IG13aWZpZXhfZHJ2X2NoYW5nZV9hZGhvY19jaGFuKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIGludCBjaGFubmVsKTsKKworaW50IG13aWZpZXhfc2V0X2VuY29kZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBjb25zdCB1OCAqa2V5LAorCQkgICAgICAgaW50IGtleV9sZW4sIHU4IGtleV9pbmRleCwgaW50IGRpc2FibGUpOworCitpbnQgbXdpZmlleF9zZXRfZ2VuX2llKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHU4ICppZSwgaW50IGllX2xlbik7CisKK2ludCBtd2lmaWV4X2dldF92ZXJfZXh0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpOworCitpbnQgbXdpZmlleF9nZXRfc3RhdHNfaW5mbyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgc3RydWN0IG13aWZpZXhfZHNfZ2V0X3N0YXRzICpsb2cpOworCitpbnQgbXdpZmlleF9yZWdfd3JpdGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTMyIHJlZ190eXBlLAorCQkgICAgICB1MzIgcmVnX29mZnNldCwgdTMyIHJlZ192YWx1ZSk7CisKK2ludCBtd2lmaWV4X3JlZ19yZWFkKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHUzMiByZWdfdHlwZSwKKwkJICAgICB1MzIgcmVnX29mZnNldCwgdTMyICp2YWx1ZSk7CisKK2ludCBtd2lmaWV4X2VlcHJvbV9yZWFkKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHUxNiBvZmZzZXQsIHUxNiBieXRlcywKKwkJCXU4ICp2YWx1ZSk7CisKK2ludCBtd2lmaWV4X3NldF8xMW5faHR0eF9jZmcoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgaW50IGRhdGEpOworCitpbnQgbXdpZmlleF9nZXRfMTFuX2h0dHhfY2ZnKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIGludCAqZGF0YSk7CisKK2ludCBtd2lmaWV4X3NldF90eF9yYXRlX2NmZyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBpbnQgdHhfcmF0ZV9pbmRleCk7CisKK2ludCBtd2lmaWV4X2dldF90eF9yYXRlX2NmZyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBpbnQgKnR4X3JhdGVfaW5kZXgpOworCitpbnQgbXdpZmlleF9kcnZfc2V0X3Bvd2VyKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHUzMiAqcHNfbW9kZSk7CisKK2ludCBtd2lmaWV4X2Rydl9nZXRfZHJpdmVyX3ZlcnNpb24oc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgICBjaGFyICp2ZXJzaW9uLCBpbnQgbWF4X2xlbik7CisKK2ludCBtd2lmaWV4X3NldF90eF9wb3dlcihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJIHN0cnVjdCBtd2lmaWV4X3Bvd2VyX2NmZyAqcG93ZXJfY2ZnKTsKKworaW50IG13aWZpZXhfbWFpbl9wcm9jZXNzKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKik7CisKK2ludCBtd2lmaWV4X2Jzc19zZXRfY2hhbm5lbChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICosCisJCQkgICAgc3RydWN0IG13aWZpZXhfY2hhbl9mcmVxX3Bvd2VyICpjZnApOworaW50IG13aWZpZXhfYnNzX2lvY3RsX2ZpbmRfYnNzKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKiwKKwkJCSAgICAgICBzdHJ1Y3QgbXdpZmlleF9zc2lkX2Jzc2lkICopOworaW50IG13aWZpZXhfc2V0X3JhZGlvX2JhbmRfY2ZnKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKiwKKwkJCSBzdHJ1Y3QgbXdpZmlleF9kc19iYW5kX2NmZyAqKTsKK2ludCBtd2lmaWV4X2dldF9ic3NfaW5mbyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICosCisJCQkgc3RydWN0IG13aWZpZXhfYnNzX2luZm8gKik7CisKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKK3ZvaWQgbXdpZmlleF9kZWJ1Z2ZzX2luaXQodm9pZCk7Cit2b2lkIG13aWZpZXhfZGVidWdmc19yZW1vdmUodm9pZCk7CisKK3ZvaWQgbXdpZmlleF9kZXZfZGVidWdmc19pbml0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpOwordm9pZCBtd2lmaWV4X2Rldl9kZWJ1Z2ZzX3JlbW92ZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KTsKKyNlbmRpZgorI2VuZGlmIC8qICFfTVdJRklFWF9NQUlOX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3NjYW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvc2Nhbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMjI4NjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3NjYW4uYwpAQCAtMCwwICsxLDMwMjUgQEAKKy8qCisgKiBNYXJ2ZWxsIFdpcmVsZXNzIExBTiBkZXZpY2UgZHJpdmVyOiBzY2FuIGlvY3RsIGFuZCBjb21tYW5kIGhhbmRsaW5nCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRlcm5hdGlvbmFsCisgKiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKyAqICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgdXNlLCByZWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgaW4KKyAqIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UsIGEgY29weSBvZiB3aGljaAorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0Egb3Igb24gdGhlCisgKiB3b3JsZHdpZGUgd2ViIGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQuCisgKgorICogVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4gIFRoZSBMaWNlbnNlIHByb3ZpZGVzIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dAorICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLgorICovCisKKyNpbmNsdWRlICJkZWNsLmgiCisjaW5jbHVkZSAiaW9jdGwuaCIKKyNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAiZncuaCIKKyNpbmNsdWRlICJtYWluLmgiCisjaW5jbHVkZSAiMTFuLmgiCisjaW5jbHVkZSAiY2ZnODAyMTEuaCIKKworLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYW5uZWxzIHRoZSBmaXJtd2FyZSBjYW4gc2NhbiBwZXIgY29tbWFuZCAqLworI2RlZmluZSBNV0lGSUVYX01BWF9DSEFOTkVMU19QRVJfU1BFQ0lGSUNfU0NBTiAgIDE0CisKKyNkZWZpbmUgTVdJRklFWF9DSEFOTkVMU19QRVJfU0NBTl9DTUQgICAgICAgICAgICA0CisKKy8qIE1lbW9yeSBuZWVkZWQgdG8gc3RvcmUgYSBtYXggc2l6ZWQgQ2hhbm5lbCBMaXN0IFRMViBmb3IgYSBmaXJtd2FyZSBzY2FuICovCisjZGVmaW5lIENIQU5fVExWX01BWF9TSVpFICAoc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlcikgICAgICAgICBcCisJCQkJKyAoTVdJRklFWF9NQVhfQ0hBTk5FTFNfUEVSX1NQRUNJRklDX1NDQU4gICAgIFwKKwkJCQkqc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2NoYW5fc2Nhbl9wYXJhbV9zZXQpKSkKKworLyogTWVtb3J5IG5lZWRlZCB0byBzdG9yZSBzdXBwb3J0ZWQgcmF0ZSAqLworI2RlZmluZSBSQVRFX1RMVl9NQVhfU0laRSAgIChzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfcmF0ZXNfcGFyYW1fc2V0KSBcCisJCQkJKyBIT1NUQ01EX1NVUFBPUlRFRF9SQVRFUykKKworLyogTWVtb3J5IG5lZWRlZCB0byBzdG9yZSBhIG1heCBudW1iZXIvc2l6ZSBXaWxkQ2FyZCBTU0lEIFRMViBmb3IgYSBmaXJtd2FyZQorCXNjYW4gKi8KKyNkZWZpbmUgV0lMRENBUkRfU1NJRF9UTFZfTUFYX1NJWkUgIFwKKwkoTVdJRklFWF9NQVhfU1NJRF9MSVNUX0xFTkdUSCAqCQkJCQlcCisJCShzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfd2lsZGNhcmRfc3NpZF9wYXJhbXMpCVwKKwkJCSsgSUVFRTgwMjExX01BWF9TU0lEX0xFTikpCisKKy8qIE1heGltdW0gbWVtb3J5IG5lZWRlZCBmb3IgYSBtd2lmaWV4X3NjYW5fY21kX2NvbmZpZyB3aXRoIGFsbCBUTFZzIGF0IG1heCAqLworI2RlZmluZSBNQVhfU0NBTl9DRkdfQUxMT0MgKHNpemVvZihzdHJ1Y3QgbXdpZmlleF9zY2FuX2NtZF9jb25maWcpICAgICAgICBcCisJCQkJKyBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfbnVtX3Byb2JlcykgICBcCisJCQkJKyBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRjYXApICAgICAgIFwKKwkJCQkrIENIQU5fVExWX01BWF9TSVpFICAgICAgICAgICAgICAgICBcCisJCQkJKyBSQVRFX1RMVl9NQVhfU0laRSAgICAgICAgICAgICAgICAgXAorCQkJCSsgV0lMRENBUkRfU1NJRF9UTFZfTUFYX1NJWkUpCisKKwordW5pb24gbXdpZmlleF9zY2FuX2NtZF9jb25maWdfdGx2IHsKKwkvKiBTY2FuIGNvbmZpZ3VyYXRpb24gKHZhcmlhYmxlIGxlbmd0aCkgKi8KKwlzdHJ1Y3QgbXdpZmlleF9zY2FuX2NtZF9jb25maWcgY29uZmlnOworCS8qIE1heCBhbGxvY2F0ZWQgYmxvY2sgKi8KKwl1OCBjb25maWdfYWxsb2NfYnVmW01BWF9TQ0FOX0NGR19BTExPQ107Cit9OworCitlbnVtIGNpcGhlcl9zdWl0ZSB7CisJQ0lQSEVSX1NVSVRFX1RLSVAsCisJQ0lQSEVSX1NVSVRFX0NDTVAsCisJQ0lQSEVSX1NVSVRFX01BWAorfTsKK3N0YXRpYyB1OCBtd2lmaWV4X3dwYV9vdWlbQ0lQSEVSX1NVSVRFX01BWF1bNF0gPSB7CisJeyAweDAwLCAweDUwLCAweGYyLCAweDAyIH0sCS8qIFRLSVAgKi8KKwl7IDB4MDAsIDB4NTAsIDB4ZjIsIDB4MDQgfSwJLyogQUVTICAqLworfTsKK3N0YXRpYyB1OCBtd2lmaWV4X3Jzbl9vdWlbQ0lQSEVSX1NVSVRFX01BWF1bNF0gPSB7CisJeyAweDAwLCAweDBmLCAweGFjLCAweDAyIH0sCS8qIFRLSVAgKi8KKwl7IDB4MDAsIDB4MGYsIDB4YWMsIDB4MDQgfSwJLyogQUVTICAqLworfTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcGFyc2VzIGEgZ2l2ZW4gSUUgZm9yIGEgZ2l2ZW4gT1VJLgorICoKKyAqIFRoaXMgaXMgdXNlZCB0byBwYXJzZSBhIFdQQS9SU04gSUUgdG8gZmluZCBpZiBpdCBoYXMKKyAqIGEgZ2l2ZW4gb3VpIGluIFBUSy4KKyAqLworc3RhdGljIHU4Cittd2lmaWV4X3NlYXJjaF9vdWlfaW5faWUoc3RydWN0IGllX2JvZHkgKmllYm9keSwgdTggKm91aSkKK3sKKwl1OCBjb3VudDsKKworCWNvdW50ID0gaWVib2R5LT5wdGtfY250WzBdOworCisJLyogVGhlcmUgY291bGQgYmUgbXVsdGlwbGUgT1VJcyBmb3IgUFRLIGhlbmNlCisJICAgMSkgVGFrZSB0aGUgbGVuZ3RoLgorCSAgIDIpIENoZWNrIGFsbCB0aGUgT1VJcyBmb3IgQUVTLgorCSAgIDMpIElmIG9uZSBvZiB0aGVtIGlzIEFFUyB0aGVuIHBhc3Mgc3VjY2Vzcy4gKi8KKwl3aGlsZSAoY291bnQpIHsKKwkJaWYgKCFtZW1jbXAoaWVib2R5LT5wdGtfYm9keSwgb3VpLCBzaXplb2YoaWVib2R5LT5wdGtfYm9keSkpKQorCQkJcmV0dXJuIE1XSUZJRVhfT1VJX1BSRVNFTlQ7CisKKwkJLS1jb3VudDsKKwkJaWYgKGNvdW50KQorCQkJaWVib2R5ID0gKHN0cnVjdCBpZV9ib2R5ICopICgodTggKikgaWVib2R5ICsKKwkJCQkJCXNpemVvZihpZWJvZHktPnB0a19ib2R5KSk7CisJfQorCisJcHJfZGVidWcoImluZm86ICVzOiBPVUkgaXMgbm90IGZvdW5kIGluIFBUS1xuIiwgX19mdW5jX18pOworCXJldHVybiBNV0lGSUVYX09VSV9OT1RfUFJFU0VOVDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGEgZ2l2ZW4gT1VJIGlzIHByZXNlbnQgaW4gYSBSU04gSUUuCisgKgorICogVGhlIGZ1bmN0aW9uIGZpcnN0IGNoZWNrcyBpZiBhIFJTTiBJRSBpcyBwcmVzZW50IG9yIG5vdCBpbiB0aGUKKyAqIEJTUyBkZXNjcmlwdG9yLiBJdCB0cmllcyB0byBsb2NhdGUgdGhlIE9VSSBvbmx5IGlmIHN1Y2ggYW4gSUUgaXMKKyAqIHByZXNlbnQuCisgKi8KK3N0YXRpYyB1OAorbXdpZmlleF9pc19yc25fb3VpX3ByZXNlbnQoc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MsIHUzMiBjaXBoZXIpCit7CisJdTggKm91aTsKKwlzdHJ1Y3QgaWVfYm9keSAqaWVib2R5OworCXU4IHJldCA9IE1XSUZJRVhfT1VJX05PVF9QUkVTRU5UOworCisJaWYgKCgoYnNzX2Rlc2MtPmJjbl9yc25faWUpICYmICgoKihic3NfZGVzYy0+YmNuX3Jzbl9pZSkpLgorCQkJCQlpZWVlX2hkci5lbGVtZW50X2lkID09IFdMQU5fRUlEX1JTTikpKSB7CisJCWllYm9keSA9IChzdHJ1Y3QgaWVfYm9keSAqKQorCQkJICgoKHU4ICopIGJzc19kZXNjLT5iY25fcnNuX2llLT5kYXRhKSArCisJCQkgUlNOX0dUS19PVUlfT0ZGU0VUKTsKKwkJb3VpID0gJm13aWZpZXhfcnNuX291aVtjaXBoZXJdWzBdOworCQlyZXQgPSBtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWUoaWVib2R5LCBvdWkpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGEgZ2l2ZW4gT1VJIGlzIHByZXNlbnQgaW4gYSBXUEEgSUUuCisgKgorICogVGhlIGZ1bmN0aW9uIGZpcnN0IGNoZWNrcyBpZiBhIFdQQSBJRSBpcyBwcmVzZW50IG9yIG5vdCBpbiB0aGUKKyAqIEJTUyBkZXNjcmlwdG9yLiBJdCB0cmllcyB0byBsb2NhdGUgdGhlIE9VSSBvbmx5IGlmIHN1Y2ggYW4gSUUgaXMKKyAqIHByZXNlbnQuCisgKi8KK3N0YXRpYyB1OAorbXdpZmlleF9pc193cGFfb3VpX3ByZXNlbnQoc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MsIHUzMiBjaXBoZXIpCit7CisJdTggKm91aTsKKwlzdHJ1Y3QgaWVfYm9keSAqaWVib2R5OworCXU4IHJldCA9IE1XSUZJRVhfT1VJX05PVF9QUkVTRU5UOworCisJaWYgKCgoYnNzX2Rlc2MtPmJjbl93cGFfaWUpICYmICgoKihic3NfZGVzYy0+YmNuX3dwYV9pZSkpLgorCQkJCSAgICAgIHZlbmRfaGRyLmVsZW1lbnRfaWQgPT0gV0xBTl9FSURfV1BBKSkpIHsKKwkJaWVib2R5ID0gKHN0cnVjdCBpZV9ib2R5ICopIGJzc19kZXNjLT5iY25fd3BhX2llLT5kYXRhOworCQlvdWkgPSAmbXdpZmlleF93cGFfb3VpW2NpcGhlcl1bMF07CisJCXJldCA9IG13aWZpZXhfc2VhcmNoX291aV9pbl9pZShpZWJvZHksIG91aSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjb21wYXJlcyB0d28gU1NJRHMgYW5kIGNoZWNrcyBpZiB0aGV5IG1hdGNoLgorICovCitzMzIKK213aWZpZXhfc3NpZF9jbXAoc3RydWN0IG13aWZpZXhfODAyXzExX3NzaWQgKnNzaWQxLAorCQkgc3RydWN0IG13aWZpZXhfODAyXzExX3NzaWQgKnNzaWQyKQoreworCWlmICghc3NpZDEgfHwgIXNzaWQyIHx8IChzc2lkMS0+c3NpZF9sZW4gIT0gc3NpZDItPnNzaWRfbGVuKSkKKwkJcmV0dXJuIC0xOworCXJldHVybiBtZW1jbXAoc3NpZDEtPnNzaWQsIHNzaWQyLT5zc2lkLCBzc2lkMS0+c3NpZF9sZW4pOworfQorCisvKgorICogU2VuZHMgSU9DVEwgcmVxdWVzdCB0byBnZXQgdGhlIGJlc3QgQlNTLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIHRoZSBJT0NUTCByZXF1ZXN0IGJ1ZmZlciwgZmlsbHMgaXQKKyAqIHdpdGggcmVxdWlzaXRlIHBhcmFtZXRlcnMgYW5kIGNhbGxzIHRoZSBJT0NUTCBoYW5kbGVyLgorICovCitpbnQgbXdpZmlleF9maW5kX2Jlc3RfYnNzKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgIHN0cnVjdCBtd2lmaWV4X3NzaWRfYnNzaWQgKnNzaWRfYnNzaWQpCit7CisJc3RydWN0IG13aWZpZXhfc3NpZF9ic3NpZCB0bXBfc3NpZF9ic3NpZDsKKwl1OCAqbWFjOworCisJaWYgKCFzc2lkX2Jzc2lkKQorCQlyZXR1cm4gLTE7CisKKwltZW1jcHkoJnRtcF9zc2lkX2Jzc2lkLCBzc2lkX2Jzc2lkLAorCSAgICAgICBzaXplb2Yoc3RydWN0IG13aWZpZXhfc3NpZF9ic3NpZCkpOworCisJaWYgKCFtd2lmaWV4X2Jzc19pb2N0bF9maW5kX2Jzcyhwcml2LCAmdG1wX3NzaWRfYnNzaWQpKSB7CisJCW1lbWNweShzc2lkX2Jzc2lkLCAmdG1wX3NzaWRfYnNzaWQsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IG13aWZpZXhfc3NpZF9ic3NpZCkpOworCQltYWMgPSAodTggKikgJnNzaWRfYnNzaWQtPmJzc2lkOworCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImNtZDogZm91bmQgbmV0d29yazogc3NpZD0lcywiCisJCQkJIiAlcE1cbiIsIHNzaWRfYnNzaWQtPnNzaWQuc3NpZCwgbWFjKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC0xOworfQorCisvKgorICogU2VuZHMgSU9DVEwgcmVxdWVzdCB0byBzdGFydCBhIHNjYW4gd2l0aCB1c2VyIGNvbmZpZ3VyYXRpb25zLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIHRoZSBJT0NUTCByZXF1ZXN0IGJ1ZmZlciwgZmlsbHMgaXQKKyAqIHdpdGggcmVxdWlzaXRlIHBhcmFtZXRlcnMgYW5kIGNhbGxzIHRoZSBJT0NUTCBoYW5kbGVyLgorICoKKyAqIFVwb24gY29tcGxldGlvbiwgaXQgYWxzbyBnZW5lcmF0ZXMgYSB3aXJlbGVzcyBldmVudCB0byBub3RpZnkKKyAqIGFwcGxpY2F0aW9ucy4KKyAqLworaW50IG13aWZpZXhfc2V0X3VzZXJfc2Nhbl9pb2N0bChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCXN0cnVjdCBtd2lmaWV4X3VzZXJfc2Nhbl9jZmcgKnNjYW5fcmVxKQoreworCWludCBzdGF0dXM7CisKKwlwcml2LT5hZGFwdGVyLT5jbWRfd2FpdF9xLmNvbmRpdGlvbiA9IGZhbHNlOworCisJc3RhdHVzID0gbXdpZmlleF9zY2FuX25ldHdvcmtzKHByaXYsIHNjYW5fcmVxKTsKKwlpZiAoIXN0YXR1cykKKwkJc3RhdHVzID0gbXdpZmlleF93YWl0X3F1ZXVlX2NvbXBsZXRlKHByaXYtPmFkYXB0ZXIpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHdhcGkgaXMgZW5hYmxlZCBpbiBkcml2ZXIgYW5kIHNjYW5uZWQgbmV0d29yayBpcworICogY29tcGF0aWJsZSB3aXRoIGl0LgorICovCitzdGF0aWMgYm9vbAorbXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGVfZm9yX3dhcGkoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgICAgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MpCit7CisJaWYgKHByaXYtPnNlY19pbmZvLndhcGlfZW5hYmxlZCAmJgorCSAgICAoYnNzX2Rlc2MtPmJjbl93YXBpX2llICYmCisJICAgICAoKCooYnNzX2Rlc2MtPmJjbl93YXBpX2llKSkuaWVlZV9oZHIuZWxlbWVudF9pZCA9PQorCQkJV0xBTl9FSURfQlNTX0FDX0FDQ0VTU19ERUxBWSkpKSB7CisJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBkcml2ZXIgaXMgY29uZmlndXJlZCB3aXRoIG5vIHNlY3VyaXR5IG1vZGUgYW5kCisgKiBzY2FubmVkIG5ldHdvcmsgaXMgY29tcGF0aWJsZSB3aXRoIGl0LgorICovCitzdGF0aWMgYm9vbAorbXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGVfZm9yX25vX3NlYyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCSAgICAgICBzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYykKK3sKKwlpZiAocHJpdi0+c2VjX2luZm8ud2VwX3N0YXR1cyA9PSBNV0lGSUVYXzgwMl8xMV9XRVBfRElTQUJMRUQKKwkgICAgJiYgIXByaXYtPnNlY19pbmZvLndwYV9lbmFibGVkICYmICFwcml2LT5zZWNfaW5mby53cGEyX2VuYWJsZWQKKwkgICAgJiYgKCghYnNzX2Rlc2MtPmJjbl93cGFfaWUpIHx8CisJCSgoKihic3NfZGVzYy0+YmNuX3dwYV9pZSkpLnZlbmRfaGRyLmVsZW1lbnRfaWQgIT0KKwkgICAgV0xBTl9FSURfV1BBKSkKKwkgICAgJiYgKCghYnNzX2Rlc2MtPmJjbl9yc25faWUpIHx8CisJCSgoKihic3NfZGVzYy0+YmNuX3Jzbl9pZSkpLmllZWVfaGRyLmVsZW1lbnRfaWQgIT0KKwkgICAgV0xBTl9FSURfUlNOKSkKKwkgICAgJiYgIXByaXYtPnNlY19pbmZvLmVuY3J5cHRpb25fbW9kZQorCSAgICAmJiAhYnNzX2Rlc2MtPnByaXZhY3kpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHN0YXRpYyBXRVAgaXMgZW5hYmxlZCBpbiBkcml2ZXIgYW5kIHNjYW5uZWQgbmV0d29yaworICogaXMgY29tcGF0aWJsZSB3aXRoIGl0LgorICovCitzdGF0aWMgYm9vbAorbXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGVfZm9yX3N0YXRpY193ZXAoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgICAgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MpCit7CisJaWYgKHByaXYtPnNlY19pbmZvLndlcF9zdGF0dXMgPT0gTVdJRklFWF84MDJfMTFfV0VQX0VOQUJMRUQKKwkgICAgJiYgIXByaXYtPnNlY19pbmZvLndwYV9lbmFibGVkICYmICFwcml2LT5zZWNfaW5mby53cGEyX2VuYWJsZWQKKwkgICAgJiYgYnNzX2Rlc2MtPnByaXZhY3kpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHdwYSBpcyBlbmFibGVkIGluIGRyaXZlciBhbmQgc2Nhbm5lZCBuZXR3b3JrIGlzCisgKiBjb21wYXRpYmxlIHdpdGggaXQuCisgKi8KK3N0YXRpYyBib29sCittd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZV9mb3Jfd3BhKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJICAgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MsCisJCQkJICAgICAgaW50IGluZGV4KQoreworCWlmIChwcml2LT5zZWNfaW5mby53ZXBfc3RhdHVzID09IE1XSUZJRVhfODAyXzExX1dFUF9ESVNBQkxFRAorCSAgICAmJiBwcml2LT5zZWNfaW5mby53cGFfZW5hYmxlZCAmJiAhcHJpdi0+c2VjX2luZm8ud3BhMl9lbmFibGVkCisJICAgICYmICgoYnNzX2Rlc2MtPmJjbl93cGFfaWUpICYmICgoKihic3NfZGVzYy0+YmNuX3dwYV9pZSkpLnZlbmRfaGRyLgorCQkJCQkJZWxlbWVudF9pZCA9PSBXTEFOX0VJRF9XUEEpKQorCSAgIC8qCisJICAgICogUHJpdmFjeSBiaXQgbWF5IE5PVCBiZSBzZXQgaW4gc29tZSBBUHMgbGlrZQorCSAgICAqIExpbmtTeXMgV1JUNTRHICYmIGJzc19kZXNjLT5wcml2YWN5CisJICAgICovCisJICkgeworCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86ICVzOiBXUEE6IGluZGV4PSVkIgorCQkJIiB3cGFfaWU9JSN4IHdwYTJfaWU9JSN4IFdFUD0lcyBXUEE9JXMgV1BBMj0lcyAiCisJCQkiRW5jTW9kZT0lI3ggcHJpdmFjeT0lI3hcbiIsIF9fZnVuY19fLCBpbmRleCwKKwkJCShic3NfZGVzYy0+YmNuX3dwYV9pZSkgPworCQkJKCooYnNzX2Rlc2MtPmJjbl93cGFfaWUpKS4KKwkJCXZlbmRfaGRyLmVsZW1lbnRfaWQgOiAwLAorCQkJKGJzc19kZXNjLT5iY25fcnNuX2llKSA/CisJCQkoKihic3NfZGVzYy0+YmNuX3Jzbl9pZSkpLgorCQkJaWVlZV9oZHIuZWxlbWVudF9pZCA6IDAsCisJCQkocHJpdi0+c2VjX2luZm8ud2VwX3N0YXR1cyA9PQorCQkJTVdJRklFWF84MDJfMTFfV0VQX0VOQUJMRUQpID8gImUiIDogImQiLAorCQkJKHByaXYtPnNlY19pbmZvLndwYV9lbmFibGVkKSA/ICJlIiA6ICJkIiwKKwkJCShwcml2LT5zZWNfaW5mby53cGEyX2VuYWJsZWQpID8gImUiIDogImQiLAorCQkJcHJpdi0+c2VjX2luZm8uZW5jcnlwdGlvbl9tb2RlLAorCQkJYnNzX2Rlc2MtPnByaXZhY3kpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgd3BhMiBpcyBlbmFibGVkIGluIGRyaXZlciBhbmQgc2Nhbm5lZCBuZXR3b3JrIGlzCisgKiBjb21wYXRpYmxlIHdpdGggaXQuCisgKi8KK3N0YXRpYyBib29sCittd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZV9mb3Jfd3BhMihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCSAgICAgICBzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYywKKwkJCQkgICAgICAgaW50IGluZGV4KQoreworCWlmIChwcml2LT5zZWNfaW5mby53ZXBfc3RhdHVzID09IE1XSUZJRVhfODAyXzExX1dFUF9ESVNBQkxFRAorCSAgICYmICFwcml2LT5zZWNfaW5mby53cGFfZW5hYmxlZCAmJiBwcml2LT5zZWNfaW5mby53cGEyX2VuYWJsZWQKKwkgICAmJiAoKGJzc19kZXNjLT5iY25fcnNuX2llKSAmJiAoKCooYnNzX2Rlc2MtPmJjbl9yc25faWUpKS5pZWVlX2hkci4KKwkJCQkJCWVsZW1lbnRfaWQgPT0gV0xBTl9FSURfUlNOKSkKKwkgICAvKgorCSAgICAqIFByaXZhY3kgYml0IG1heSBOT1QgYmUgc2V0IGluIHNvbWUgQVBzIGxpa2UKKwkgICAgKiBMaW5rU3lzIFdSVDU0RyAmJiBic3NfZGVzYy0+cHJpdmFjeQorCSAgICAqLworCSApIHsKKwkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiAlczogV1BBMjogaW5kZXg9JWQiCisJCQkiIHdwYV9pZT0lI3ggd3BhMl9pZT0lI3ggV0VQPSVzIFdQQT0lcyBXUEEyPSVzICIKKwkJCSJFbmNNb2RlPSUjeCBwcml2YWN5PSUjeFxuIiwgX19mdW5jX18sIGluZGV4LAorCQkJKGJzc19kZXNjLT5iY25fd3BhX2llKSA/CisJCQkoKihic3NfZGVzYy0+YmNuX3dwYV9pZSkpLgorCQkJdmVuZF9oZHIuZWxlbWVudF9pZCA6IDAsCisJCQkoYnNzX2Rlc2MtPmJjbl9yc25faWUpID8KKwkJCSgqKGJzc19kZXNjLT5iY25fcnNuX2llKSkuCisJCQlpZWVlX2hkci5lbGVtZW50X2lkIDogMCwKKwkJCShwcml2LT5zZWNfaW5mby53ZXBfc3RhdHVzID09CisJCQlNV0lGSUVYXzgwMl8xMV9XRVBfRU5BQkxFRCkgPyAiZSIgOiAiZCIsCisJCQkocHJpdi0+c2VjX2luZm8ud3BhX2VuYWJsZWQpID8gImUiIDogImQiLAorCQkJKHByaXYtPnNlY19pbmZvLndwYTJfZW5hYmxlZCkgPyAiZSIgOiAiZCIsCisJCQlwcml2LT5zZWNfaW5mby5lbmNyeXB0aW9uX21vZGUsCisJCQlic3NfZGVzYy0+cHJpdmFjeSk7CisJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBhZGhvYyBBRVMgaXMgZW5hYmxlZCBpbiBkcml2ZXIgYW5kIHNjYW5uZWQgbmV0d29yayBpcworICogY29tcGF0aWJsZSB3aXRoIGl0LgorICovCitzdGF0aWMgYm9vbAorbXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGVfZm9yX2FkaG9jX2FlcyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCSAgICAgICBzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYykKK3sKKwlpZiAocHJpdi0+c2VjX2luZm8ud2VwX3N0YXR1cyA9PSBNV0lGSUVYXzgwMl8xMV9XRVBfRElTQUJMRUQKKwkgICAgJiYgIXByaXYtPnNlY19pbmZvLndwYV9lbmFibGVkICYmICFwcml2LT5zZWNfaW5mby53cGEyX2VuYWJsZWQKKwkgICAgJiYgKCghYnNzX2Rlc2MtPmJjbl93cGFfaWUpIHx8ICgoKihic3NfZGVzYy0+YmNuX3dwYV9pZSkpLnZlbmRfaGRyLgorCQkgICBlbGVtZW50X2lkICE9IFdMQU5fRUlEX1dQQSkpCisJICAgICYmICgoIWJzc19kZXNjLT5iY25fcnNuX2llKSB8fCAoKCooYnNzX2Rlc2MtPmJjbl9yc25faWUpKS5pZWVlX2hkci4KKwkJICAgZWxlbWVudF9pZCAhPSBXTEFOX0VJRF9SU04pKQorCSAgICAmJiAhcHJpdi0+c2VjX2luZm8uZW5jcnlwdGlvbl9tb2RlCisJICAgICYmIGJzc19kZXNjLT5wcml2YWN5KSB7CisJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBkeW5hbWljIFdFUCBpcyBlbmFibGVkIGluIGRyaXZlciBhbmQgc2Nhbm5lZCBuZXR3b3JrCisgKiBpcyBjb21wYXRpYmxlIHdpdGggaXQuCisgKi8KK3N0YXRpYyBib29sCittd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZV9mb3JfZHluYW1pY193ZXAoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgICAgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MsCisJCQkJICAgICAgIGludCBpbmRleCkKK3sKKwlpZiAocHJpdi0+c2VjX2luZm8ud2VwX3N0YXR1cyA9PSBNV0lGSUVYXzgwMl8xMV9XRVBfRElTQUJMRUQKKwkgICAgJiYgIXByaXYtPnNlY19pbmZvLndwYV9lbmFibGVkICYmICFwcml2LT5zZWNfaW5mby53cGEyX2VuYWJsZWQKKwkgICAgJiYgKCghYnNzX2Rlc2MtPmJjbl93cGFfaWUpIHx8ICgoKihic3NfZGVzYy0+YmNuX3dwYV9pZSkpLnZlbmRfaGRyLgorCQkgICBlbGVtZW50X2lkICE9IFdMQU5fRUlEX1dQQSkpCisJICAgICYmICgoIWJzc19kZXNjLT5iY25fcnNuX2llKSB8fCAoKCooYnNzX2Rlc2MtPmJjbl9yc25faWUpKS5pZWVlX2hkci4KKwkJICAgZWxlbWVudF9pZCAhPSBXTEFOX0VJRF9SU04pKQorCSAgICAmJiBwcml2LT5zZWNfaW5mby5lbmNyeXB0aW9uX21vZGUKKwkgICAgJiYgYnNzX2Rlc2MtPnByaXZhY3kpIHsKKwkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiAlczogZHluYW1pYyAiCisJCQkiV0VQOiBpbmRleD0lZCB3cGFfaWU9JSN4IHdwYTJfaWU9JSN4ICIKKwkJCSJFbmNNb2RlPSUjeCBwcml2YWN5PSUjeFxuIiwKKwkJCV9fZnVuY19fLCBpbmRleCwKKwkJCShic3NfZGVzYy0+YmNuX3dwYV9pZSkgPworCQkJKCooYnNzX2Rlc2MtPmJjbl93cGFfaWUpKS4KKwkJCXZlbmRfaGRyLmVsZW1lbnRfaWQgOiAwLAorCQkJKGJzc19kZXNjLT5iY25fcnNuX2llKSA/CisJCQkoKihic3NfZGVzYy0+YmNuX3Jzbl9pZSkpLgorCQkJaWVlZV9oZHIuZWxlbWVudF9pZCA6IDAsCisJCQlwcml2LT5zZWNfaW5mby5lbmNyeXB0aW9uX21vZGUsCisJCQlic3NfZGVzYy0+cHJpdmFjeSk7CisJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBhIHNjYW5uZWQgbmV0d29yayBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGRyaXZlcgorICogc2V0dGluZ3MuCisgKgorICogICBXRVAgICAgIFdQQSAgICBXUEEyICAgYWQtaG9jIGVuY3J5cHQgICAgICAgICAgICAgICAgICBOZXR3b3JrCisgKiBlbmFibGVkIGVuYWJsZWQgZW5hYmxlZCAgQUVTICAgIG1vZGUgICBQcml2YWN5IFdQQSBXUEEyIENvbXBhdGlibGUKKyAqICAgIDAgICAgICAgMCAgICAgICAwICAgICAgMCAgICAgTk9ORSAgICAgIDAgICAgIDAgICAwICAgeWVzIE5vIHNlY3VyaXR5CisgKiAgICAwICAgICAgIDEgICAgICAgMCAgICAgIDAgICAgICB4ICAgICAgICAxeCAgICAxICAgeCAgIHllcyBXUEEgKGRpc2FibGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFQgaWYgbm8gQUVTKQorICogICAgMCAgICAgICAwICAgICAgIDEgICAgICAwICAgICAgeCAgICAgICAgMXggICAgeCAgIDEgICB5ZXMgV1BBMiAoZGlzYWJsZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVCBpZiBubyBBRVMpCisgKiAgICAwICAgICAgIDAgICAgICAgMCAgICAgIDEgICAgIE5PTkUgICAgICAxICAgICAwICAgMCAgIHllcyBBZC1ob2MgQUVTCisgKiAgICAxICAgICAgIDAgICAgICAgMCAgICAgIDAgICAgIE5PTkUgICAgICAxICAgICAwICAgMCAgIHllcyBTdGF0aWMgV0VQCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXNhYmxlIEhUKQorICogICAgMCAgICAgICAwICAgICAgIDAgICAgICAwICAgICE9Tk9ORSAgICAgMSAgICAgMCAgIDAgICB5ZXMgRHluYW1pYyBXRVAKKyAqCisgKiBDb21wYXRpYmlsaXR5IGlzIG5vdCBtYXRjaGVkIHdoaWxlIHJvYW1pbmcsIGV4Y2VwdCBmb3IgbW9kZS4KKyAqLworc3RhdGljIHMzMgorbXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTMyIGluZGV4LCB1MzIgbW9kZSkKK3sKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwlzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYzsKKworCWJzc19kZXNjID0gJmFkYXB0ZXItPnNjYW5fdGFibGVbaW5kZXhdOworCWJzc19kZXNjLT5kaXNhYmxlXzExbiA9IGZhbHNlOworCisJLyogRG9uJ3QgY2hlY2sgZm9yIGNvbXBhdGliaWxpdHkgaWYgcm9hbWluZyAqLworCWlmIChwcml2LT5tZWRpYV9jb25uZWN0ZWQgJiYgKHByaXYtPmJzc19tb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJICAgICYmIChic3NfZGVzYy0+YnNzX21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpCisJCXJldHVybiBpbmRleDsKKworCWlmIChwcml2LT53cHMuc2Vzc2lvbl9lbmFibGUpIHsKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsCisJCQkiaW5mbzogcmV0dXJuIHN1Y2Nlc3MgZGlyZWN0bHkgaW4gV1BTIHBlcmlvZFxuIik7CisJCXJldHVybiBpbmRleDsKKwl9CisKKwlpZiAobXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGVfZm9yX3dhcGkocHJpdiwgYnNzX2Rlc2MpKSB7CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogcmV0dXJuIHN1Y2Nlc3MgZm9yIFdBUEkgQVBcbiIpOworCQlyZXR1cm4gaW5kZXg7CisJfQorCisJaWYgKGJzc19kZXNjLT5ic3NfbW9kZSA9PSBtb2RlKSB7CisJCWlmIChtd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZV9mb3Jfbm9fc2VjKHByaXYsIGJzc19kZXNjKSkgeworCQkJLyogTm8gc2VjdXJpdHkgKi8KKwkJCXJldHVybiBpbmRleDsKKwkJfSBlbHNlIGlmIChtd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZV9mb3Jfc3RhdGljX3dlcChwcml2LAorCQkJCQkJCQlic3NfZGVzYykpIHsKKwkJCS8qIFN0YXRpYyBXRVAgZW5hYmxlZCAqLworCQkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBEaXNhYmxlIDExbiBpbiBXRVAgbW9kZS5cbiIpOworCQkJYnNzX2Rlc2MtPmRpc2FibGVfMTFuID0gdHJ1ZTsKKwkJCXJldHVybiBpbmRleDsKKwkJfSBlbHNlIGlmIChtd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZV9mb3Jfd3BhKHByaXYsIGJzc19kZXNjLAorCQkJCQkJCQkgaW5kZXgpKSB7CisJCQkvKiBXUEEgZW5hYmxlZCAqLworCQkJaWYgKCgocHJpdi0+YWRhcHRlci0+Y29uZmlnX2JhbmRzICYgQkFORF9HTgorCQkJICAgICAgfHwgcHJpdi0+YWRhcHRlci0+Y29uZmlnX2JhbmRzICYgQkFORF9BTikKKwkJCSAgICAgICYmIGJzc19kZXNjLT5iY25faHRfY2FwKQorCQkJICAgICAgJiYgIW13aWZpZXhfaXNfd3BhX291aV9wcmVzZW50KGJzc19kZXNjLAorCQkJCQlDSVBIRVJfU1VJVEVfQ0NNUCkpIHsKKworCQkJCWlmIChtd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudChic3NfZGVzYywKKwkJCQkJICAgIENJUEhFUl9TVUlURV9US0lQKSkgeworCQkJCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwKKwkJCQkJCSJpbmZvOiBEaXNhYmxlIDExbiBpZiBBRVMgIgorCQkJCQkJImlzIG5vdCBzdXBwb3J0ZWQgYnkgQVBcbiIpOworCQkJCQlic3NfZGVzYy0+ZGlzYWJsZV8xMW4gPSB0cnVlOworCQkJCX0gZWxzZSB7CisJCQkJCXJldHVybiAtMTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gaW5kZXg7CisJCX0gZWxzZSBpZiAobXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGVfZm9yX3dwYTIocHJpdiwKKwkJCQkJCQlic3NfZGVzYywgaW5kZXgpKSB7CisJCQkvKiBXUEEyIGVuYWJsZWQgKi8KKwkJCWlmICgoKHByaXYtPmFkYXB0ZXItPmNvbmZpZ19iYW5kcyAmIEJBTkRfR04KKwkJCSAgICAgIHx8IHByaXYtPmFkYXB0ZXItPmNvbmZpZ19iYW5kcyAmIEJBTkRfQU4pCisJCQkgICAgICAmJiBic3NfZGVzYy0+YmNuX2h0X2NhcCkKKwkJCSAgICAgICYmICFtd2lmaWV4X2lzX3Jzbl9vdWlfcHJlc2VudChic3NfZGVzYywKKwkJCQkJQ0lQSEVSX1NVSVRFX0NDTVApKSB7CisKKwkJCQlpZiAobXdpZmlleF9pc19yc25fb3VpX3ByZXNlbnQoYnNzX2Rlc2MsCisJCQkJCSAgICBDSVBIRVJfU1VJVEVfVEtJUCkpIHsKKwkJCQkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsCisJCQkJCQkiaW5mbzogRGlzYWJsZSAxMW4gaWYgQUVTICIKKwkJCQkJCSJpcyBub3Qgc3VwcG9ydGVkIGJ5IEFQXG4iKTsKKwkJCQkJYnNzX2Rlc2MtPmRpc2FibGVfMTFuID0gdHJ1ZTsKKwkJCQl9IGVsc2UgeworCQkJCQlyZXR1cm4gLTE7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIGluZGV4OworCQl9IGVsc2UgaWYgKG13aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlX2Zvcl9hZGhvY19hZXMocHJpdiwKKwkJCQkJCQkJYnNzX2Rlc2MpKSB7CisJCQkvKiBBZC1ob2MgQUVTIGVuYWJsZWQgKi8KKwkJCXJldHVybiBpbmRleDsKKwkJfSBlbHNlIGlmIChtd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZV9mb3JfZHluYW1pY193ZXAocHJpdiwKKwkJCQkJCQlic3NfZGVzYywgaW5kZXgpKSB7CisJCQkvKiBEeW5hbWljIFdFUCBlbmFibGVkICovCisJCQlyZXR1cm4gaW5kZXg7CisJCX0KKworCQkvKiBTZWN1cml0eSBkb2Vzbid0IG1hdGNoICovCisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogJXM6IGZhaWxlZDogaW5kZXg9JWQgIgorCQkgICAgICAgIndwYV9pZT0lI3ggd3BhMl9pZT0lI3ggV0VQPSVzIFdQQT0lcyBXUEEyPSVzIEVuY01vZGUiCisJCSAgICAgICAiPSUjeCBwcml2YWN5PSUjeFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBpbmRleCwKKwkJICAgICAgIChic3NfZGVzYy0+YmNuX3dwYV9pZSkgPworCQkgICAgICAgKCooYnNzX2Rlc2MtPmJjbl93cGFfaWUpKS52ZW5kX2hkci4KKwkJICAgICAgIGVsZW1lbnRfaWQgOiAwLAorCQkgICAgICAgKGJzc19kZXNjLT5iY25fcnNuX2llKSA/CisJCSAgICAgICAoKihic3NfZGVzYy0+YmNuX3Jzbl9pZSkpLmllZWVfaGRyLgorCQkgICAgICAgZWxlbWVudF9pZCA6IDAsCisJCSAgICAgICAocHJpdi0+c2VjX2luZm8ud2VwX3N0YXR1cyA9PQorCQkJCU1XSUZJRVhfODAyXzExX1dFUF9FTkFCTEVEKSA/ICJlIiA6ICJkIiwKKwkJICAgICAgIChwcml2LT5zZWNfaW5mby53cGFfZW5hYmxlZCkgPyAiZSIgOiAiZCIsCisJCSAgICAgICAocHJpdi0+c2VjX2luZm8ud3BhMl9lbmFibGVkKSA/ICJlIiA6ICJkIiwKKwkJICAgICAgIHByaXYtPnNlY19pbmZvLmVuY3J5cHRpb25fbW9kZSwgYnNzX2Rlc2MtPnByaXZhY3kpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogTW9kZSBkb2Vzbid0IG1hdGNoICovCisJcmV0dXJuIC0xOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBmaW5kcyB0aGUgYmVzdCBTU0lEIGluIHRoZSBzY2FuIGxpc3QuCisgKgorICogSXQgc2VhcmNoZXMgdGhlIHNjYW4gdGFibGUgZm9yIHRoZSBiZXN0IFNTSUQgdGhhdCBhbHNvIG1hdGNoZXMgdGhlIGN1cnJlbnQKKyAqIGFkYXB0ZXIgbmV0d29yayBwcmVmZXJlbmNlIChtb2RlLCBzZWN1cml0eSBldGMuKS4KKyAqLworc3RhdGljIHMzMgorbXdpZmlleF9maW5kX2Jlc3RfbmV0d29ya19pbl9saXN0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpCit7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJdTMyIG1vZGUgPSBwcml2LT5ic3NfbW9kZTsKKwlzMzIgYmVzdF9uZXQgPSAtMTsKKwlzMzIgYmVzdF9yc3NpID0gMDsKKwl1MzIgaTsKKworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogbnVtIG9mIEJTU0lEcyA9ICVkXG4iLAorCQkJCWFkYXB0ZXItPm51bV9pbl9zY2FuX3RhYmxlKTsKKworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1faW5fc2Nhbl90YWJsZTsgaSsrKSB7CisJCXN3aXRjaCAobW9kZSkgeworCQljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCQlpZiAobXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGUocHJpdiwgaSwgbW9kZSkgPj0gMCkgeworCQkJCWlmIChTQ0FOX1JTU0koYWRhcHRlci0+c2Nhbl90YWJsZVtpXS5yc3NpKSA+CisJCQkJICAgIGJlc3RfcnNzaSkgeworCQkJCQliZXN0X3Jzc2kgPSBTQ0FOX1JTU0koYWRhcHRlci0+CisJCQkJCQkJICBzY2FuX3RhYmxlW2ldLnJzc2kpOworCQkJCQliZXN0X25ldCA9IGk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQ6CisJCWRlZmF1bHQ6CisJCQlpZiAoU0NBTl9SU1NJKGFkYXB0ZXItPnNjYW5fdGFibGVbaV0ucnNzaSkgPgorCQkJICAgIGJlc3RfcnNzaSkgeworCQkJCWJlc3RfcnNzaSA9IFNDQU5fUlNTSShhZGFwdGVyLT5zY2FuX3RhYmxlW2ldLgorCQkJCQkJICAgICAgcnNzaSk7CisJCQkJYmVzdF9uZXQgPSBpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gYmVzdF9uZXQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBjaGFubmVsIGxpc3QgZm9yIHRoZSBkcml2ZXIgdG8gc2NhbiwgYmFzZWQKKyAqIG9uIHJlZ2lvbi9iYW5kIGluZm9ybWF0aW9uLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIGZvciBhbnkgc2NhbiB0aGF0IGlzIG5vdCBwcm92aWRlZCB3aXRoIGEKKyAqIHNwZWNpZmljIGNoYW5uZWwgbGlzdCB0byBzY2FuLgorICovCitzdGF0aWMgdm9pZAorbXdpZmlleF9zY2FuX2NyZWF0ZV9jaGFubmVsX2xpc3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQljb25zdCBzdHJ1Y3QgbXdpZmlleF91c2VyX3NjYW5fY2ZnCisJCQkJKnVzZXJfc2Nhbl9pbiwKKwkJCQlzdHJ1Y3QgbXdpZmlleF9jaGFuX3NjYW5fcGFyYW1fc2V0CisJCQkJKnNjYW5fY2hhbl9saXN0LAorCQkJCXU4IGZpbHRlcmVkX3NjYW4pCit7CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2g7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJaW50IGNoYW5faWR4ID0gMCwgaTsKKwl1OCBzY2FuX3R5cGU7CisKKwlmb3IgKGJhbmQgPSAwOyAoYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFMpIDsgYmFuZCsrKSB7CisKKwkJaWYgKCFwcml2LT53ZGV2LT53aXBoeS0+YmFuZHNbYmFuZF0pCisJCQljb250aW51ZTsKKworCQlzYmFuZCA9IHByaXYtPndkZXYtPndpcGh5LT5iYW5kc1tiYW5kXTsKKworCQlmb3IgKGkgPSAwOyAoaSA8IHNiYW5kLT5uX2NoYW5uZWxzKSA7IGkrKywgY2hhbl9pZHgrKykgeworCQkJY2ggPSAmc2JhbmQtPmNoYW5uZWxzW2ldOworCQkJaWYgKGNoLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKQorCQkJCWNvbnRpbnVlOworCQkJc2Nhbl9jaGFuX2xpc3RbY2hhbl9pZHhdLnJhZGlvX3R5cGUgPSBiYW5kOworCQkJc2Nhbl90eXBlID0gY2gtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOOworCQkJaWYgKHVzZXJfc2Nhbl9pbiAmJgorCQkJCXVzZXJfc2Nhbl9pbi0+Y2hhbl9saXN0WzBdLnNjYW5fdGltZSkKKwkJCQlzY2FuX2NoYW5fbGlzdFtjaGFuX2lkeF0ubWF4X3NjYW5fdGltZSA9CisJCQkJCWNwdV90b19sZTE2KCh1MTYpIHVzZXJfc2Nhbl9pbi0+CisJCQkJCWNoYW5fbGlzdFswXS5zY2FuX3RpbWUpOworCQkJZWxzZSBpZiAoc2Nhbl90eXBlID09IE1XSUZJRVhfU0NBTl9UWVBFX1BBU1NJVkUpCisJCQkJc2Nhbl9jaGFuX2xpc3RbY2hhbl9pZHhdLm1heF9zY2FuX3RpbWUgPQorCQkJCQljcHVfdG9fbGUxNihhZGFwdGVyLT5wYXNzaXZlX3NjYW5fdGltZSk7CisJCQllbHNlCisJCQkJc2Nhbl9jaGFuX2xpc3RbY2hhbl9pZHhdLm1heF9zY2FuX3RpbWUgPQorCQkJCQljcHVfdG9fbGUxNihhZGFwdGVyLT5hY3RpdmVfc2Nhbl90aW1lKTsKKwkJCWlmIChzY2FuX3R5cGUgPT0gTVdJRklFWF9TQ0FOX1RZUEVfUEFTU0lWRSkKKwkJCQlzY2FuX2NoYW5fbGlzdFtjaGFuX2lkeF0uY2hhbl9zY2FuX21vZGVfYml0bWFwCisJCQkJCXw9IE1XSUZJRVhfUEFTU0lWRV9TQ0FOOworCQkJZWxzZQorCQkJCXNjYW5fY2hhbl9saXN0W2NoYW5faWR4XS5jaGFuX3NjYW5fbW9kZV9iaXRtYXAKKwkJCQkJJj0gfk1XSUZJRVhfUEFTU0lWRV9TQ0FOOworCQkJc2Nhbl9jaGFuX2xpc3RbY2hhbl9pZHhdLmNoYW5fbnVtYmVyID0KKwkJCQkJCQkodTMyKSBjaC0+aHdfdmFsdWU7CisJCQlpZiAoZmlsdGVyZWRfc2NhbikgeworCQkJCXNjYW5fY2hhbl9saXN0W2NoYW5faWR4XS5tYXhfc2Nhbl90aW1lID0KKwkJCQljcHVfdG9fbGUxNihhZGFwdGVyLT5zcGVjaWZpY19zY2FuX3RpbWUpOworCQkJCXNjYW5fY2hhbl9saXN0W2NoYW5faWR4XS5jaGFuX3NjYW5fbW9kZV9iaXRtYXAKKwkJCQkJfD0gTVdJRklFWF9ESVNBQkxFX0NIQU5fRklMVDsKKwkJCX0KKwkJfQorCisJfQorfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjb25zdHJ1Y3RzIGFuZCBzZW5kcyBtdWx0aXBsZSBzY2FuIGNvbmZpZyBjb21tYW5kcyB0bworICogdGhlIGZpcm13YXJlLgorICoKKyAqIFByZXZpb3VzIHJvdXRpbmVzIGluIHRoZSBjb2RlIGZsb3cgaGF2ZSBjcmVhdGVkIGEgc2NhbiBjb21tYW5kIGNvbmZpZ3VyYXRpb24KKyAqIHdpdGggYW55IHJlcXVlc3RlZCBUTFZzLiAgVGhpcyBmdW5jdGlvbiBzcGxpdHMgdGhlIGNoYW5uZWwgVExWIGludG8gbWF4aW11bQorICogY2hhbm5lbHMgc3VwcG9ydGVkIHBlciBzY2FuIGxpc3RzIGFuZCBzZW5kcyB0aGUgcG9ydGlvbiBvZiB0aGUgY2hhbm5lbCBUTFYsCisgKiBhbG9uZyB3aXRoIHRoZSBvdGhlciBUTFZzLCB0byB0aGUgZmlybXdhcmUuCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfc2Nhbl9jaGFubmVsX2xpc3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgdTMyIG1heF9jaGFuX3Blcl9zY2FuLCB1OCBmaWx0ZXJlZF9zY2FuLAorCQkJICBzdHJ1Y3QgbXdpZmlleF9zY2FuX2NtZF9jb25maWcgKnNjYW5fY2ZnX291dCwKKwkJCSAgc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfY2hhbl9saXN0X3BhcmFtX3NldAorCQkJICAqY2hhbl90bHZfb3V0LAorCQkJICBzdHJ1Y3QgbXdpZmlleF9jaGFuX3NjYW5fcGFyYW1fc2V0ICpzY2FuX2NoYW5fbGlzdCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgbXdpZmlleF9jaGFuX3NjYW5fcGFyYW1fc2V0ICp0bXBfY2hhbl9saXN0OworCXN0cnVjdCBtd2lmaWV4X2NoYW5fc2Nhbl9wYXJhbV9zZXQgKnN0YXJ0X2NoYW47CisKKwl1MzIgdGx2X2lkeDsKKwl1MzIgdG90YWxfc2Nhbl90aW1lOworCXUzMiBkb25lX2Vhcmx5OworCisJaWYgKCFzY2FuX2NmZ19vdXQgfHwgIWNoYW5fdGx2X291dCB8fCAhc2Nhbl9jaGFuX2xpc3QpIHsKKwkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkiaW5mbzogU2NhbjogTnVsbCBkZXRlY3Q6ICVwLCAlcCwgJXBcbiIsCisJCSAgICAgICBzY2FuX2NmZ19vdXQsIGNoYW5fdGx2X291dCwgc2Nhbl9jaGFuX2xpc3QpOworCQlyZXR1cm4gLTE7CisJfQorCisJY2hhbl90bHZfb3V0LT5oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFRMVl9UWVBFX0NIQU5MSVNUKTsKKworCS8qIFNldCB0aGUgdGVtcCBjaGFubmVsIHN0cnVjdCBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgZGVzaXJlZAorCSAgIGxpc3QgKi8KKwl0bXBfY2hhbl9saXN0ID0gc2Nhbl9jaGFuX2xpc3Q7CisKKwkvKiBMb29wIHRocm91Z2ggdGhlIGRlc2lyZWQgY2hhbm5lbCBsaXN0LCBzZW5kaW5nIGEgbmV3IGZpcm13YXJlIHNjYW4KKwkgICBjb21tYW5kcyBmb3IgZWFjaCBtYXhfY2hhbl9wZXJfc2NhbiBjaGFubmVscyAob3IgZm9yIDEsNiwxMQorCSAgIGluZGl2aWR1YWxseSBpZiBjb25maWd1cmVkIGFjY29yZGluZ2x5KSAqLworCXdoaWxlICh0bXBfY2hhbl9saXN0LT5jaGFuX251bWJlcikgeworCisJCXRsdl9pZHggPSAwOworCQl0b3RhbF9zY2FuX3RpbWUgPSAwOworCQljaGFuX3Rsdl9vdXQtPmhlYWRlci5sZW4gPSAwOworCQlzdGFydF9jaGFuID0gdG1wX2NoYW5fbGlzdDsKKwkJZG9uZV9lYXJseSA9IGZhbHNlOworCisJCS8qCisJCSAqIENvbnN0cnVjdCB0aGUgQ2hhbm5lbCBUTFYgZm9yIHRoZSBzY2FuIGNvbW1hbmQuICBDb250aW51ZSB0bworCQkgKiBpbnNlcnQgY2hhbm5lbCBUTFZzIHVudGlsOgorCQkgKiAgIC0gdGhlIHRsdl9pZHggaGl0cyB0aGUgbWF4aW11bSBjb25maWd1cmVkIHBlciBzY2FuIGNvbW1hbmQKKwkJICogICAtIHRoZSBuZXh0IGNoYW5uZWwgdG8gaW5zZXJ0IGlzIDAgKGVuZCBvZiBkZXNpcmVkIGNoYW5uZWwKKwkJICogICAgIGxpc3QpCisJCSAqICAgLSBkb25lX2Vhcmx5IGlzIHNldCAoY29udHJvbGxpbmcgaW5kaXZpZHVhbCBzY2FubmluZyBvZgorCQkgKiAgICAgMSw2LDExKQorCQkgKi8KKwkJd2hpbGUgKHRsdl9pZHggPCBtYXhfY2hhbl9wZXJfc2NhbgorCQkgICAgICAgJiYgdG1wX2NoYW5fbGlzdC0+Y2hhbl9udW1iZXIgJiYgIWRvbmVfZWFybHkpIHsKKworCQkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkJImluZm86IFNjYW46IENoYW4oJTNkKSwgUmFkaW8oJWQpLCIKKwkJCQkiIE1vZGUoJWQsICVkKSwgRHVyKCVkKVxuIiwKKwkJCSAgICAgICB0bXBfY2hhbl9saXN0LT5jaGFuX251bWJlciwKKwkJCSAgICAgICB0bXBfY2hhbl9saXN0LT5yYWRpb190eXBlLAorCQkJICAgICAgIHRtcF9jaGFuX2xpc3QtPmNoYW5fc2Nhbl9tb2RlX2JpdG1hcAorCQkJICAgICAgICYgTVdJRklFWF9QQVNTSVZFX1NDQU4sCisJCQkgICAgICAgKHRtcF9jaGFuX2xpc3QtPmNoYW5fc2Nhbl9tb2RlX2JpdG1hcAorCQkJICAgICAgICYgTVdJRklFWF9ESVNBQkxFX0NIQU5fRklMVCkgPj4gMSwKKwkJCSAgICAgICBsZTE2X3RvX2NwdSh0bXBfY2hhbl9saXN0LT5tYXhfc2Nhbl90aW1lKSk7CisKKwkJCS8qIENvcHkgdGhlIGN1cnJlbnQgY2hhbm5lbCBUTFYgdG8gdGhlIGNvbW1hbmQgYmVpbmcKKwkJCSAgIHByZXBhcmVkICovCisJCQltZW1jcHkoY2hhbl90bHZfb3V0LT5jaGFuX3NjYW5fcGFyYW0gKyB0bHZfaWR4LAorCQkJICAgICAgIHRtcF9jaGFuX2xpc3QsCisJCQkgICAgICAgc2l6ZW9mKGNoYW5fdGx2X291dC0+Y2hhbl9zY2FuX3BhcmFtKSk7CisKKwkJCS8qIEluY3JlbWVudCB0aGUgVExWIGhlYWRlciBsZW5ndGggYnkgdGhlIHNpemUKKwkJCSAgIGFwcGVuZGVkICovCisJCQljaGFuX3Rsdl9vdXQtPmhlYWRlci5sZW4gPQorCQkJY3B1X3RvX2xlMTYobGUxNl90b19jcHUoY2hhbl90bHZfb3V0LT5oZWFkZXIubGVuKSArCisJCQkoc2l6ZW9mKGNoYW5fdGx2X291dC0+Y2hhbl9zY2FuX3BhcmFtKSkpOworCisJCQkvKgorCQkJICogVGhlIHRsdiBidWZmZXIgbGVuZ3RoIGlzIHNldCB0byB0aGUgbnVtYmVyIG9mIGJ5dGVzCisJCQkgKiBvZiB0aGUgYmV0d2VlbiB0aGUgY2hhbm5lbCB0bHYgcG9pbnRlciBhbmQgdGhlIHN0YXJ0CisJCQkgKiBvZiB0aGUgdGx2IGJ1ZmZlci4gIFRoaXMgY29tcGVuc2F0ZXMgZm9yIGFueSBUTFZzCisJCQkgKiB0aGF0IHdlcmUgYXBwZW5kZWQgYmVmb3JlIHRoZSBjaGFubmVsIGxpc3QuCisJCQkgKi8KKwkJCXNjYW5fY2ZnX291dC0+dGx2X2J1Zl9sZW4gPSAodTMyKSAoKHU4ICopIGNoYW5fdGx2X291dCAtCisJCQkJCQkJc2Nhbl9jZmdfb3V0LT50bHZfYnVmKTsKKworCQkJLyogQWRkIHRoZSBzaXplIG9mIHRoZSBjaGFubmVsIHRsdiBoZWFkZXIgYW5kIHRoZSBkYXRhCisJCQkgICBsZW5ndGggKi8KKwkJCXNjYW5fY2ZnX291dC0+dGx2X2J1Zl9sZW4gKz0KKwkJCQkoc2l6ZW9mKGNoYW5fdGx2X291dC0+aGVhZGVyKQorCQkJCSArIGxlMTZfdG9fY3B1KGNoYW5fdGx2X291dC0+aGVhZGVyLmxlbikpOworCisJCQkvKiBJbmNyZW1lbnQgdGhlIGluZGV4IHRvIHRoZSBjaGFubmVsIHRsdiB3ZSBhcmUKKwkJCSAgIGNvbnN0cnVjdGluZyAqLworCQkJdGx2X2lkeCsrOworCisJCQkvKiBDb3VudCB0aGUgdG90YWwgc2NhbiB0aW1lIHBlciBjb21tYW5kICovCisJCQl0b3RhbF9zY2FuX3RpbWUgKz0KKwkJCQlsZTE2X3RvX2NwdSh0bXBfY2hhbl9saXN0LT5tYXhfc2Nhbl90aW1lKTsKKworCQkJZG9uZV9lYXJseSA9IGZhbHNlOworCisJCQkvKiBTdG9wIHRoZSBsb29wIGlmIHRoZSAqY3VycmVudCogY2hhbm5lbCBpcyBpbiB0aGUKKwkJCSAgIDEsNiwxMSBzZXQgYW5kIHdlIGFyZSBub3QgZmlsdGVyaW5nIG9uIGEgQlNTSUQKKwkJCSAgIG9yIFNTSUQuICovCisJCQlpZiAoIWZpbHRlcmVkX3NjYW4gJiYgKHRtcF9jaGFuX2xpc3QtPmNoYW5fbnVtYmVyID09IDEKKwkJCQl8fCB0bXBfY2hhbl9saXN0LT5jaGFuX251bWJlciA9PSA2CisJCQkJfHwgdG1wX2NoYW5fbGlzdC0+Y2hhbl9udW1iZXIgPT0gMTEpKQorCQkJCWRvbmVfZWFybHkgPSB0cnVlOworCisJCQkvKiBJbmNyZW1lbnQgdGhlIHRtcCBwb2ludGVyIHRvIHRoZSBuZXh0IGNoYW5uZWwgdG8KKwkJCSAgIGJlIHNjYW5uZWQgKi8KKwkJCXRtcF9jaGFuX2xpc3QrKzsKKworCQkJLyogU3RvcCB0aGUgbG9vcCBpZiB0aGUgKm5leHQqIGNoYW5uZWwgaXMgaW4gdGhlIDEsNiwxMQorCQkJICAgc2V0LiAgVGhpcyB3aWxsIGNhdXNlIGl0IHRvIGJlIHRoZSBvbmx5IGNoYW5uZWwKKwkJCSAgIHNjYW5uZWQgb24gdGhlIG5leHQgaW50ZXJhdGlvbiAqLworCQkJaWYgKCFmaWx0ZXJlZF9zY2FuICYmICh0bXBfY2hhbl9saXN0LT5jaGFuX251bWJlciA9PSAxCisJCQkJfHwgdG1wX2NoYW5fbGlzdC0+Y2hhbl9udW1iZXIgPT0gNgorCQkJCXx8IHRtcF9jaGFuX2xpc3QtPmNoYW5fbnVtYmVyID09IDExKSkKKwkJCQlkb25lX2Vhcmx5ID0gdHJ1ZTsKKwkJfQorCisJCS8qIFRoZSB0b3RhbCBzY2FuIHRpbWUgc2hvdWxkIGJlIGxlc3MgdGhhbiBzY2FuIGNvbW1hbmQgdGltZW91dAorCQkgICB2YWx1ZSAqLworCQlpZiAodG90YWxfc2Nhbl90aW1lID4gTVdJRklFWF9NQVhfVE9UQUxfU0NBTl9USU1FKSB7CisJCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgInRvdGFsIHNjYW4gdGltZSAlZG1zIgorCQkJCSIgaXMgb3ZlciBsaW1pdCAoJWRtcyksIHNjYW4gc2tpcHBlZFxuIiwKKwkJCQl0b3RhbF9zY2FuX3RpbWUsIE1XSUZJRVhfTUFYX1RPVEFMX1NDQU5fVElNRSk7CisJCQlyZXQgPSAtMTsKKwkJCWJyZWFrOworCQl9CisKKwkJcHJpdi0+YWRhcHRlci0+c2Nhbl9jaGFubmVscyA9IHN0YXJ0X2NoYW47CisKKwkJLyogU2VuZCB0aGUgc2NhbiBjb21tYW5kIHRvIHRoZSBmaXJtd2FyZSB3aXRoIHRoZSBzcGVjaWZpZWQKKwkJICAgY2ZnICovCisJCXJldCA9IG13aWZpZXhfc2VuZF9jbWRfYXN5bmMocHJpdiwgSG9zdENtZF9DTURfODAyXzExX1NDQU4sCisJCQkJCSAgICAgSG9zdENtZF9BQ1RfR0VOX1NFVCwgMCwKKwkJCQkJICAgICBzY2FuX2NmZ19vdXQpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCisJaWYgKHJldCkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNvbnN0cnVjdHMgYSBzY2FuIGNvbW1hbmQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgdG8gdXNlCisgKiBpbiBzY2FuIGNvbW1hbmRzLgorICoKKyAqIEFwcGxpY2F0aW9uIGxheWVyIG9yIG90aGVyIGZ1bmN0aW9ucyBjYW4gaW52b2tlIG5ldHdvcmsgc2Nhbm5pbmcKKyAqIHdpdGggYSBzY2FuIGNvbmZpZ3VyYXRpb24gc3VwcGxpZWQgaW4gYSB1c2VyIHNjYW4gY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGFzIHRoZSBiYXNpcyBvZiBvbmUgb3IgbWFueSBzY2FuIGNvbW1hbmQgY29uZmlndXJhdGlvbgorICogY29tbWFuZHMgdGhhdCBhcmUgc2VudCB0byB0aGUgY29tbWFuZCBwcm9jZXNzaW5nIG1vZHVsZSBhbmQgZXZlbnR1YWxseSB0byB0aGUKKyAqIGZpcm13YXJlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIHNjYW4gY29tbWFuZCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAgYmFzZWQgb24gdGhlCisgKiBmb2xsb3dpbmcgdXNlciBzdXBwbGllZCBwYXJhbWV0ZXJzIChpZiBwcmVzZW50KToKKyAqICAgICAgLSBTU0lEIGZpbHRlcgorICogICAgICAtIEJTU0lEIGZpbHRlcgorICogICAgICAtIE51bWJlciBvZiBQcm9iZXMgdG8gYmUgc2VudAorICogICAgICAtIENoYW5uZWwgbGlzdAorICoKKyAqIElmIHRoZSBTU0lEIG9yIEJTU0lEIGZpbHRlciBpcyBub3QgcHJlc2VudCwgdGhlIGZpbHRlciBpcyBkaXNhYmxlZC9jbGVhcmVkLgorICogSWYgdGhlIG51bWJlciBvZiBwcm9iZXMgaXMgbm90IHNldCwgYWRhcHRlciBkZWZhdWx0IHNldHRpbmcgaXMgdXNlZC4KKyAqLworc3RhdGljIHZvaWQKK213aWZpZXhfc2Nhbl9zZXR1cF9zY2FuX2NvbmZpZyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBtd2lmaWV4X3VzZXJfc2Nhbl9jZmcgKnVzZXJfc2Nhbl9pbiwKKwkJCSAgICAgICBzdHJ1Y3QgbXdpZmlleF9zY2FuX2NtZF9jb25maWcgKnNjYW5fY2ZnX291dCwKKwkJCSAgICAgICBzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19jaGFuX2xpc3RfcGFyYW1fc2V0CisJCQkgICAgICAgKipjaGFuX2xpc3Rfb3V0LAorCQkJICAgICAgIHN0cnVjdCBtd2lmaWV4X2NoYW5fc2Nhbl9wYXJhbV9zZXQKKwkJCSAgICAgICAqc2Nhbl9jaGFuX2xpc3QsCisJCQkgICAgICAgdTggKm1heF9jaGFuX3Blcl9zY2FuLCB1OCAqZmlsdGVyZWRfc2NhbiwKKwkJCSAgICAgICB1OCAqc2Nhbl9jdXJyZW50X29ubHkpCit7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfbnVtX3Byb2JlcyAqbnVtX3Byb2Jlc190bHY7CisJc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfd2lsZGNhcmRfc3NpZF9wYXJhbXMgKndpbGRjYXJkX3NzaWRfdGx2OworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3JhdGVzX3BhcmFtX3NldCAqcmF0ZXNfdGx2OworCWNvbnN0IHU4IHplcm9fbWFjW0VUSF9BTEVOXSA9IHsgMCwgMCwgMCwgMCwgMCwgMCB9OworCXU4ICp0bHZfcG9zOworCXUzMiBudW1fcHJvYmVzOworCXUzMiBzc2lkX2xlbjsKKwl1MzIgY2hhbl9pZHg7CisJdTMyIHNjYW5fdHlwZTsKKwl1MTYgc2Nhbl9kdXI7CisJdTggY2hhbm5lbDsKKwl1OCByYWRpb190eXBlOworCXUzMiBzc2lkX2lkeDsKKwl1OCBzc2lkX2ZpbHRlcjsKKwl1OCByYXRlc1tNV0lGSUVYX1NVUFBPUlRFRF9SQVRFU107CisJdTMyIHJhdGVzX3NpemU7CisJc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRjYXAgKmh0X2NhcDsKKworCS8qIFRoZSB0bHZfYnVmX2xlbiBpcyBjYWxjdWxhdGVkIGZvciBlYWNoIHNjYW4gY29tbWFuZC4gIFRoZSBUTFZzIGFkZGVkCisJICAgaW4gdGhpcyByb3V0aW5lIHdpbGwgYmUgcHJlc2VydmVkIHNpbmNlIHRoZSByb3V0aW5lIHRoYXQgc2VuZHMgdGhlCisJICAgY29tbWFuZCB3aWxsIGFwcGVuZCBjaGFubmVsVExWcyBhdCAqY2hhbl9saXN0X291dC4gIFRoZSBkaWZmZXJlbmNlCisJICAgYmV0d2VlbiB0aGUgKmNoYW5fbGlzdF9vdXQgYW5kIHRoZSB0bHZfYnVmIHN0YXJ0IHdpbGwgYmUgdXNlZCB0bworCSAgIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiBhbnl0aGluZyB3ZSBhZGQgaW4gdGhpcyByb3V0aW5lLiAqLworCXNjYW5fY2ZnX291dC0+dGx2X2J1Zl9sZW4gPSAwOworCisJLyogUnVubmluZyB0bHYgcG9pbnRlci4gIEFzc2lnbmVkIHRvIGNoYW5fbGlzdF9vdXQgYXQgZW5kIG9mIGZ1bmN0aW9uCisJICAgc28gbGF0ZXIgcm91dGluZXMga25vdyB3aGVyZSBjaGFubmVscyBjYW4gYmUgYWRkZWQgdG8gdGhlIGNvbW1hbmQKKwkgICBidWYgKi8KKwl0bHZfcG9zID0gc2Nhbl9jZmdfb3V0LT50bHZfYnVmOworCisJLyogSW5pdGlhbGl6ZSB0aGUgc2NhbiBhcyB1bi1maWx0ZXJlZDsgdGhlIGZsYWcgaXMgbGF0ZXIgc2V0IHRvIFRSVUUKKwkgICBiZWxvdyBpZiBhIFNTSUQgb3IgQlNTSUQgZmlsdGVyIGlzIHNlbnQgaW4gdGhlIGNvbW1hbmQgKi8KKwkqZmlsdGVyZWRfc2NhbiA9IGZhbHNlOworCisJLyogSW5pdGlhbGl6ZSB0aGUgc2NhbiBhcyBub3QgYmVpbmcgb25seSBvbiB0aGUgY3VycmVudCBjaGFubmVsLiAgSWYKKwkgICB0aGUgY2hhbm5lbCBsaXN0IGlzIGN1c3RvbWl6ZWQsIG9ubHkgY29udGFpbnMgb25lIGNoYW5uZWwsIGFuZCBpcworCSAgIHRoZSBhY3RpdmUgY2hhbm5lbCwgdGhpcyBpcyBzZXQgdHJ1ZSBhbmQgZGF0YSBmbG93IGlzIG5vdCBoYWx0ZWQuICovCisJKnNjYW5fY3VycmVudF9vbmx5ID0gZmFsc2U7CisKKwlpZiAodXNlcl9zY2FuX2luKSB7CisKKwkJLyogRGVmYXVsdCB0aGUgc3NpZF9maWx0ZXIgZmxhZyB0byBUUlVFLCBzZXQgZmFsc2UgdW5kZXIKKwkJICAgY2VydGFpbiB3aWxkY2FyZCBjb25kaXRpb25zIGFuZCBxdWFsaWZpZWQgYnkgdGhlIGV4aXN0ZW5jZQorCQkgICBvZiBhbiBTU0lEIGxpc3QgYmVmb3JlIG1hcmtpbmcgdGhlIHNjYW4gYXMgZmlsdGVyZWQgKi8KKwkJc3NpZF9maWx0ZXIgPSB0cnVlOworCisJCS8qIFNldCB0aGUgQlNTIHR5cGUgc2NhbiBmaWx0ZXIsIHVzZSBBZGFwdGVyIHNldHRpbmcgaWYKKwkJICAgdW5zZXQgKi8KKwkJc2Nhbl9jZmdfb3V0LT5ic3NfbW9kZSA9CisJCQkodXNlcl9zY2FuX2luLT5ic3NfbW9kZSA/ICh1OCkgdXNlcl9zY2FuX2luLT4KKwkJCSBic3NfbW9kZSA6ICh1OCkgYWRhcHRlci0+c2Nhbl9tb2RlKTsKKworCQkvKiBTZXQgdGhlIG51bWJlciBvZiBwcm9iZXMgdG8gc2VuZCwgdXNlIEFkYXB0ZXIgc2V0dGluZworCQkgICBpZiB1bnNldCAqLworCQludW1fcHJvYmVzID0KKwkJCSh1c2VyX3NjYW5faW4tPm51bV9wcm9iZXMgPyB1c2VyX3NjYW5faW4tPgorCQkJIG51bV9wcm9iZXMgOiBhZGFwdGVyLT5zY2FuX3Byb2Jlcyk7CisKKwkJLyoKKwkJICogU2V0IHRoZSBCU1NJRCBmaWx0ZXIgdG8gdGhlIGluY29taW5nIGNvbmZpZ3VyYXRpb24sCisJCSAqIGlmIG5vbi16ZXJvLiAgSWYgbm90IHNldCwgaXQgd2lsbCByZW1haW4gZGlzYWJsZWQKKwkJICogKGFsbCB6ZXJvcykuCisJCSAqLworCQltZW1jcHkoc2Nhbl9jZmdfb3V0LT5zcGVjaWZpY19ic3NpZCwKKwkJICAgICAgIHVzZXJfc2Nhbl9pbi0+c3BlY2lmaWNfYnNzaWQsCisJCSAgICAgICBzaXplb2Yoc2Nhbl9jZmdfb3V0LT5zcGVjaWZpY19ic3NpZCkpOworCisJCWZvciAoc3NpZF9pZHggPSAwOworCQkgICAgICgoc3NpZF9pZHggPCBBUlJBWV9TSVpFKHVzZXJfc2Nhbl9pbi0+c3NpZF9saXN0KSkKKwkJICAgICAgJiYgKCp1c2VyX3NjYW5faW4tPnNzaWRfbGlzdFtzc2lkX2lkeF0uc3NpZAorCQkJICB8fCB1c2VyX3NjYW5faW4tPnNzaWRfbGlzdFtzc2lkX2lkeF0ubWF4X2xlbikpOworCQkgICAgIHNzaWRfaWR4KyspIHsKKworCQkJc3NpZF9sZW4gPSBzdHJsZW4odXNlcl9zY2FuX2luLT5zc2lkX2xpc3Rbc3NpZF9pZHhdLgorCQkJCQkgIHNzaWQpICsgMTsKKworCQkJd2lsZGNhcmRfc3NpZF90bHYgPQorCQkJCShzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc193aWxkY2FyZF9zc2lkX3BhcmFtcyAqKQorCQkJCXRsdl9wb3M7CisJCQl3aWxkY2FyZF9zc2lkX3Rsdi0+aGVhZGVyLnR5cGUgPQorCQkJCWNwdV90b19sZTE2KFRMVl9UWVBFX1dJTERDQVJEU1NJRCk7CisJCQl3aWxkY2FyZF9zc2lkX3Rsdi0+aGVhZGVyLmxlbiA9IGNwdV90b19sZTE2KAorCQkJCSh1MTYpIChzc2lkX2xlbiArIHNpemVvZih3aWxkY2FyZF9zc2lkX3Rsdi0+CisJCQkJCQkJIG1heF9zc2lkX2xlbmd0aCkpKTsKKwkJCXdpbGRjYXJkX3NzaWRfdGx2LT5tYXhfc3NpZF9sZW5ndGggPQorCQkJCXVzZXJfc2Nhbl9pbi0+c3NpZF9saXN0W3NzaWRfaWR4XS5tYXhfbGVuOworCisJCQltZW1jcHkod2lsZGNhcmRfc3NpZF90bHYtPnNzaWQsCisJCQkgICAgICAgdXNlcl9zY2FuX2luLT5zc2lkX2xpc3Rbc3NpZF9pZHhdLnNzaWQsCisJCQkgICAgICAgc3NpZF9sZW4pOworCisJCQl0bHZfcG9zICs9IChzaXplb2Yod2lsZGNhcmRfc3NpZF90bHYtPmhlYWRlcikKKwkJCQkrIGxlMTZfdG9fY3B1KHdpbGRjYXJkX3NzaWRfdGx2LT5oZWFkZXIubGVuKSk7CisKKwkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogc2Nhbjogc3NpZF9saXN0WyVkXTogJXMsICVkXG4iLAorCQkJCXNzaWRfaWR4LCB3aWxkY2FyZF9zc2lkX3Rsdi0+c3NpZCwKKwkJCQl3aWxkY2FyZF9zc2lkX3Rsdi0+bWF4X3NzaWRfbGVuZ3RoKTsKKworCQkJLyogRW1wdHkgd2lsZGNhcmQgc3NpZCB3aXRoIGEgbWF4bGVuIHdpbGwgbWF0Y2ggbWFueSBvcgorCQkJICAgcG90ZW50aWFsbHkgYWxsIFNTSURzIChtYXhsZW4gPT0gMzIpLCB0aGVyZWZvcmUgZG8KKwkJCSAgIG5vdCB0cmVhdCB0aGUgc2NhbiBhcworCQkJICAgZmlsdGVyZWQuICovCisJCQlpZiAoIXNzaWRfbGVuICYmIHdpbGRjYXJkX3NzaWRfdGx2LT5tYXhfc3NpZF9sZW5ndGgpCisJCQkJc3NpZF9maWx0ZXIgPSBmYWxzZTsKKworCQl9CisKKwkJLyoKKwkJICogIFRoZSBkZWZhdWx0IG51bWJlciBvZiBjaGFubmVscyBzZW50IGluIHRoZSBjb21tYW5kIGlzIGxvdyB0bworCQkgKiAgZW5zdXJlIHRoZSByZXNwb25zZSBidWZmZXIgZnJvbSB0aGUgZmlybXdhcmUgZG9lcyBub3QKKwkJICogIHRydW5jYXRlIHNjYW4gcmVzdWx0cy4gIFRoYXQgaXMgbm90IGFuIGlzc3VlIHdpdGggYW4gU1NJRAorCQkgKiAgb3IgQlNTSUQgZmlsdGVyIGFwcGxpZWQgdG8gdGhlIHNjYW4gcmVzdWx0cyBpbiB0aGUgZmlybXdhcmUuCisJCSAqLworCQlpZiAoKHNzaWRfaWR4ICYmIHNzaWRfZmlsdGVyKQorCQkgICAgfHwgbWVtY21wKHNjYW5fY2ZnX291dC0+c3BlY2lmaWNfYnNzaWQsICZ6ZXJvX21hYywKKwkJCSAgICAgIHNpemVvZih6ZXJvX21hYykpKQorCQkJKmZpbHRlcmVkX3NjYW4gPSB0cnVlOworCX0gZWxzZSB7CisJCXNjYW5fY2ZnX291dC0+YnNzX21vZGUgPSAodTgpIGFkYXB0ZXItPnNjYW5fbW9kZTsKKwkJbnVtX3Byb2JlcyA9IGFkYXB0ZXItPnNjYW5fcHJvYmVzOworCX0KKworCS8qCisJICogIElmIGEgc3BlY2lmaWMgQlNTSUQgb3IgU1NJRCBpcyB1c2VkLCB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIGluIHRoZQorCSAqICBzY2FuIGNvbW1hbmQgd2lsbCBiZSBpbmNyZWFzZWQgdG8gdGhlIGFic29sdXRlIG1heGltdW0uCisJICovCisJaWYgKCpmaWx0ZXJlZF9zY2FuKQorCQkqbWF4X2NoYW5fcGVyX3NjYW4gPSBNV0lGSUVYX01BWF9DSEFOTkVMU19QRVJfU1BFQ0lGSUNfU0NBTjsKKwllbHNlCisJCSptYXhfY2hhbl9wZXJfc2NhbiA9IE1XSUZJRVhfQ0hBTk5FTFNfUEVSX1NDQU5fQ01EOworCisJLyogSWYgdGhlIGlucHV0IGNvbmZpZyBvciBhZGFwdGVyIGhhcyB0aGUgbnVtYmVyIG9mIFByb2JlcyBzZXQsCisJICAgYWRkIHRsdiAqLworCWlmIChudW1fcHJvYmVzKSB7CisKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBzY2FuOiBudW1fcHJvYmVzID0gJWRcbiIsCisJCQkJCQludW1fcHJvYmVzKTsKKworCQludW1fcHJvYmVzX3RsdiA9IChzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19udW1fcHJvYmVzICopIHRsdl9wb3M7CisJCW51bV9wcm9iZXNfdGx2LT5oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFRMVl9UWVBFX05VTVBST0JFUyk7CisJCW51bV9wcm9iZXNfdGx2LT5oZWFkZXIubGVuID0KKwkJCWNwdV90b19sZTE2KHNpemVvZihudW1fcHJvYmVzX3Rsdi0+bnVtX3Byb2JlcykpOworCQludW1fcHJvYmVzX3Rsdi0+bnVtX3Byb2JlcyA9IGNwdV90b19sZTE2KCh1MTYpIG51bV9wcm9iZXMpOworCisJCXRsdl9wb3MgKz0gc2l6ZW9mKG51bV9wcm9iZXNfdGx2LT5oZWFkZXIpICsKKwkJCWxlMTZfdG9fY3B1KG51bV9wcm9iZXNfdGx2LT5oZWFkZXIubGVuKTsKKworCX0KKworCS8qIEFwcGVuZCByYXRlcyB0bHYgKi8KKwltZW1zZXQocmF0ZXMsIDAsIHNpemVvZihyYXRlcykpOworCisJcmF0ZXNfc2l6ZSA9IG13aWZpZXhfZ2V0X3N1cHBvcnRlZF9yYXRlcyhwcml2LCByYXRlcyk7CisKKwlyYXRlc190bHYgPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfcmF0ZXNfcGFyYW1fc2V0ICopIHRsdl9wb3M7CisJcmF0ZXNfdGx2LT5oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFdMQU5fRUlEX1NVUFBfUkFURVMpOworCXJhdGVzX3Rsdi0+aGVhZGVyLmxlbiA9IGNwdV90b19sZTE2KCh1MTYpIHJhdGVzX3NpemUpOworCW1lbWNweShyYXRlc190bHYtPnJhdGVzLCByYXRlcywgcmF0ZXNfc2l6ZSk7CisJdGx2X3BvcyArPSBzaXplb2YocmF0ZXNfdGx2LT5oZWFkZXIpICsgcmF0ZXNfc2l6ZTsKKworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogU0NBTl9DTUQ6IFJhdGVzIHNpemUgPSAlZFxuIiwgcmF0ZXNfc2l6ZSk7CisKKwlpZiAoSVNTVVBQXzExTkVOQUJMRUQocHJpdi0+YWRhcHRlci0+ZndfY2FwX2luZm8pCisJICAgICYmIChwcml2LT5hZGFwdGVyLT5jb25maWdfYmFuZHMgJiBCQU5EX0dOCisJCXx8IHByaXYtPmFkYXB0ZXItPmNvbmZpZ19iYW5kcyAmIEJBTkRfQU4pKSB7CisJCWh0X2NhcCA9IChzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGNhcCAqKSB0bHZfcG9zOworCQltZW1zZXQoaHRfY2FwLCAwLCBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRjYXApKTsKKwkJaHRfY2FwLT5oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFdMQU5fRUlEX0hUX0NBUEFCSUxJVFkpOworCQlodF9jYXAtPmhlYWRlci5sZW4gPQorCQkJCWNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCkpOworCQlyYWRpb190eXBlID0KKwkJCW13aWZpZXhfYmFuZF90b19yYWRpb190eXBlKHByaXYtPmFkYXB0ZXItPmNvbmZpZ19iYW5kcyk7CisJCW13aWZpZXhfZmlsbF9jYXBfaW5mbyhwcml2LCByYWRpb190eXBlLCBodF9jYXApOworCQl0bHZfcG9zICs9IHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGNhcCk7CisJfQorCisJLyogQXBwZW5kIHZlbmRvciBzcGVjaWZpYyBJRSBUTFYgKi8KKwltd2lmaWV4X2NtZF9hcHBlbmRfdnNpZV90bHYocHJpdiwgTVdJRklFWF9WU0lFX01BU0tfU0NBTiwgJnRsdl9wb3MpOworCisJLyoKKwkgKiBTZXQgdGhlIG91dHB1dCBmb3IgdGhlIGNoYW5uZWwgVExWIHRvIHRoZSBhZGRyZXNzIGluIHRoZSB0bHYgYnVmZmVyCisJICogICBwYXN0IGFueSBUTFZzIHRoYXQgd2VyZSBhZGRlZCBpbiB0aGlzIGZ1bmN0aW9uIChTU0lELCBudW1fcHJvYmVzKS4KKwkgKiAgIENoYW5uZWwgVExWcyB3aWxsIGJlIGFkZGVkIHBhc3QgdGhpcyBmb3IgZWFjaCBzY2FuIGNvbW1hbmQsCisJICogICBwcmVzZXJ2aW5nIHRoZSBUTFZzIHRoYXQgd2VyZSBwcmV2aW91c2x5IGFkZGVkLgorCSAqLworCSpjaGFuX2xpc3Rfb3V0ID0KKwkJKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2NoYW5fbGlzdF9wYXJhbV9zZXQgKikgdGx2X3BvczsKKworCWlmICh1c2VyX3NjYW5faW4gJiYgdXNlcl9zY2FuX2luLT5jaGFuX2xpc3RbMF0uY2hhbl9udW1iZXIpIHsKKworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IFNjYW46IFVzaW5nIHN1cHBsaWVkIGNoYW5uZWwgbGlzdFxuIik7CisKKwkJZm9yIChjaGFuX2lkeCA9IDA7CisJCSAgICAgY2hhbl9pZHggPCBNV0lGSUVYX1VTRVJfU0NBTl9DSEFOX01BWAorCQkgICAgICYmIHVzZXJfc2Nhbl9pbi0+Y2hhbl9saXN0W2NoYW5faWR4XS5jaGFuX251bWJlcjsKKwkJICAgICBjaGFuX2lkeCsrKSB7CisKKwkJCWNoYW5uZWwgPSB1c2VyX3NjYW5faW4tPmNoYW5fbGlzdFtjaGFuX2lkeF0uY2hhbl9udW1iZXI7CisJCQkoc2Nhbl9jaGFuX2xpc3QgKyBjaGFuX2lkeCktPmNoYW5fbnVtYmVyID0gY2hhbm5lbDsKKworCQkJcmFkaW9fdHlwZSA9CisJCQkJdXNlcl9zY2FuX2luLT5jaGFuX2xpc3RbY2hhbl9pZHhdLnJhZGlvX3R5cGU7CisJCQkoc2Nhbl9jaGFuX2xpc3QgKyBjaGFuX2lkeCktPnJhZGlvX3R5cGUgPSByYWRpb190eXBlOworCisJCQlzY2FuX3R5cGUgPSB1c2VyX3NjYW5faW4tPmNoYW5fbGlzdFtjaGFuX2lkeF0uc2Nhbl90eXBlOworCisJCQlpZiAoc2Nhbl90eXBlID09IE1XSUZJRVhfU0NBTl9UWVBFX1BBU1NJVkUpCisJCQkJKHNjYW5fY2hhbl9saXN0ICsKKwkJCQkgY2hhbl9pZHgpLT5jaGFuX3NjYW5fbW9kZV9iaXRtYXAKKwkJCQkJfD0gTVdJRklFWF9QQVNTSVZFX1NDQU47CisJCQllbHNlCisJCQkJKHNjYW5fY2hhbl9saXN0ICsKKwkJCQkgY2hhbl9pZHgpLT5jaGFuX3NjYW5fbW9kZV9iaXRtYXAKKwkJCQkJJj0gfk1XSUZJRVhfUEFTU0lWRV9TQ0FOOworCisJCQlpZiAodXNlcl9zY2FuX2luLT5jaGFuX2xpc3RbY2hhbl9pZHhdLnNjYW5fdGltZSkgeworCQkJCXNjYW5fZHVyID0gKHUxNikgdXNlcl9zY2FuX2luLT4KKwkJCQkJY2hhbl9saXN0W2NoYW5faWR4XS5zY2FuX3RpbWU7CisJCQl9IGVsc2UgeworCQkJCWlmIChzY2FuX3R5cGUgPT0gTVdJRklFWF9TQ0FOX1RZUEVfUEFTU0lWRSkKKwkJCQkJc2Nhbl9kdXIgPSBhZGFwdGVyLT5wYXNzaXZlX3NjYW5fdGltZTsKKwkJCQllbHNlIGlmICgqZmlsdGVyZWRfc2NhbikKKwkJCQkJc2Nhbl9kdXIgPSBhZGFwdGVyLT5zcGVjaWZpY19zY2FuX3RpbWU7CisJCQkJZWxzZQorCQkJCQlzY2FuX2R1ciA9IGFkYXB0ZXItPmFjdGl2ZV9zY2FuX3RpbWU7CisJCQl9CisKKwkJCShzY2FuX2NoYW5fbGlzdCArIGNoYW5faWR4KS0+bWluX3NjYW5fdGltZSA9CisJCQkJY3B1X3RvX2xlMTYoc2Nhbl9kdXIpOworCQkJKHNjYW5fY2hhbl9saXN0ICsgY2hhbl9pZHgpLT5tYXhfc2Nhbl90aW1lID0KKwkJCQljcHVfdG9fbGUxNihzY2FuX2R1cik7CisJCX0KKworCQkvKiBDaGVjayBpZiB3ZSBhcmUgb25seSBzY2FubmluZyB0aGUgY3VycmVudCBjaGFubmVsICovCisJCWlmICgoY2hhbl9pZHggPT0gMSkKKwkJICAgICYmICh1c2VyX3NjYW5faW4tPmNoYW5fbGlzdFswXS5jaGFuX251bWJlcgorCQkJPT0gcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLmNoYW5uZWwpKSB7CisJCQkqc2Nhbl9jdXJyZW50X29ubHkgPSB0cnVlOworCQkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsCisJCQkJImluZm86IFNjYW46IFNjYW5uaW5nIGN1cnJlbnQgY2hhbm5lbCBvbmx5XG4iKTsKKwkJfQorCisJfSBlbHNlIHsKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsCisJCQkJImluZm86IFNjYW46IENyZWF0aW5nIGZ1bGwgcmVnaW9uIGNoYW5uZWwgbGlzdFxuIik7CisJCW13aWZpZXhfc2Nhbl9jcmVhdGVfY2hhbm5lbF9saXN0KHByaXYsIHVzZXJfc2Nhbl9pbiwKKwkJCQkJCSBzY2FuX2NoYW5fbGlzdCwKKwkJCQkJCSAqZmlsdGVyZWRfc2Nhbik7CisJfQorfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpbnNwZWN0cyB0aGUgc2NhbiByZXNwb25zZSBidWZmZXIgZm9yIHBvaW50ZXJzIHRvCisgKiBleHBlY3RlZCBUTFZzLgorICoKKyAqIFRMVnMgY2FuIGJlIGluY2x1ZGVkIGF0IHRoZSBlbmQgb2YgdGhlIHNjYW4gcmVzcG9uc2UgQlNTIGluZm9ybWF0aW9uLgorICoKKyAqIERhdGEgaW4gdGhlIGJ1ZmZlciBpcyBwYXJzZWQgcG9pbnRlcnMgdG8gVExWcyB0aGF0IGNhbiBwb3RlbnRpYWxseQorICogYmUgcGFzc2VkIGJhY2sgaW4gdGhlIHJlc3BvbnNlLgorICovCitzdGF0aWMgdm9pZAorbXdpZmlleF9yZXRfODAyXzExX3NjYW5fZ2V0X3Rsdl9wdHJzKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICAgICBzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19kYXRhICp0bHYsCisJCQkJICAgICB1MzIgdGx2X2J1Zl9zaXplLCB1MzIgcmVxX3Rsdl90eXBlLAorCQkJCSAgICAgc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfZGF0YSAqKnRsdl9kYXRhKQoreworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2RhdGEgKmN1cnJlbnRfdGx2OworCXUzMiB0bHZfYnVmX2xlZnQ7CisJdTMyIHRsdl90eXBlOworCXUzMiB0bHZfbGVuOworCisJY3VycmVudF90bHYgPSB0bHY7CisJdGx2X2J1Zl9sZWZ0ID0gdGx2X2J1Zl9zaXplOworCSp0bHZfZGF0YSA9IE5VTEw7CisKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IFNDQU5fUkVTUDogdGx2X2J1Zl9zaXplID0gJWRcbiIsCisJCQkJCQl0bHZfYnVmX3NpemUpOworCisJd2hpbGUgKHRsdl9idWZfbGVmdCA+PSBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyKSkgeworCisJCXRsdl90eXBlID0gbGUxNl90b19jcHUoY3VycmVudF90bHYtPmhlYWRlci50eXBlKTsKKwkJdGx2X2xlbiA9IGxlMTZfdG9fY3B1KGN1cnJlbnRfdGx2LT5oZWFkZXIubGVuKTsKKworCQlpZiAoc2l6ZW9mKHRsdi0+aGVhZGVyKSArIHRsdl9sZW4gPiB0bHZfYnVmX2xlZnQpIHsKKwkJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiU0NBTl9SRVNQOiBUTFYgYnVmZmVyIGNvcnJ1cHRcbiIpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAocmVxX3Rsdl90eXBlID09IHRsdl90eXBlKSB7CisJCQlzd2l0Y2ggKHRsdl90eXBlKSB7CisJCQljYXNlIFRMVl9UWVBFX1RTRlRJTUVTVEFNUDoKKwkJCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IFNDQU5fUkVTUDogVFNGICIKKwkJCQkJInRpbWVzdGFtcCBUTFYsIGxlbiA9ICVkXG4iLCB0bHZfbGVuKTsKKwkJCQkqdGx2X2RhdGEgPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfZGF0YSAqKQorCQkJCQljdXJyZW50X3RsdjsKKwkJCQlicmVhazsKKwkJCWNhc2UgVExWX1RZUEVfQ0hBTk5FTEJBTkRMSVNUOgorCQkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogU0NBTl9SRVNQOiBjaGFubmVsIgorCQkJCQkiIGJhbmQgbGlzdCBUTFYsIGxlbiA9ICVkXG4iLCB0bHZfbGVuKTsKKwkJCQkqdGx2X2RhdGEgPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfZGF0YSAqKQorCQkJCQljdXJyZW50X3RsdjsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZGV2X2VycihhZGFwdGVyLT5kZXYsCisJCQkJCSJTQ0FOX1JFU1A6IHVuaGFuZGxlZCBUTFYgPSAlZFxuIiwKKwkJCQkgICAgICAgdGx2X3R5cGUpOworCQkJCS8qIEdpdmUgdXAsIHRoaXMgc2VlbXMgY29ycnVwdGVkICovCisJCQkJcmV0dXJuOworCQkJfQorCQl9CisKKwkJaWYgKCp0bHZfZGF0YSkKKwkJCWJyZWFrOworCisKKwkJdGx2X2J1Zl9sZWZ0IC09IChzaXplb2YodGx2LT5oZWFkZXIpICsgdGx2X2xlbik7CisJCWN1cnJlbnRfdGx2ID0KKwkJCShzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19kYXRhICopIChjdXJyZW50X3Rsdi0+ZGF0YSArCisJCQkJCQkJICB0bHZfbGVuKTsKKworCX0JCQkvKiB3aGlsZSAqLworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpbnRlcnByZXRzIGEgQlNTIHNjYW4gcmVzcG9uc2UgcmV0dXJuZWQgZnJvbSB0aGUgZmlybXdhcmUuCisgKgorICogVGhlIHZhcmlvdXMgZml4ZWQgZmllbGRzIGFuZCBJRXMgYXJlIHBhcnNlZCBhbmQgcGFzc2VkIGJhY2sgZm9yIGEgQlNTCisgKiBwcm9iZSByZXNwb25zZSBvciBiZWFjb24gZnJvbSBzY2FuIGNvbW1hbmQuIEluZm9ybWF0aW9uIGlzIHJlY29yZGVkIGFzCisgKiBuZWVkZWQgaW4gdGhlIHNjYW4gdGFibGUgZm9yIHRoYXQgZW50cnkuCisgKgorICogVGhlIGZvbGxvd2luZyBJRSB0eXBlcyBhcmUgcmVjb2duaXplZCBhbmQgcGFyc2VkIC0KKyAqICAgICAgLSBTU0lECisgKiAgICAgIC0gU3VwcG9ydGVkIHJhdGVzCisgKiAgICAgIC0gRkggcGFyYW1ldGVycyBzZXQKKyAqICAgICAgLSBEUyBwYXJhbWV0ZXJzIHNldAorICogICAgICAtIENGIHBhcmFtZXRlcnMgc2V0CisgKiAgICAgIC0gSUJTUyBwYXJhbWV0ZXJzIHNldAorICogICAgICAtIEVSUCBpbmZvcm1hdGlvbgorICogICAgICAtIEV4dGVuZGVkIHN1cHBvcnRlZCByYXRlcworICogICAgICAtIFZlbmRvciBzcGVjaWZpYyAoMjIxKQorICogICAgICAtIFJTTiBJRQorICogICAgICAtIFdBUEkgSUUKKyAqICAgICAgLSBIVCBjYXBhYmlsaXR5CisgKiAgICAgIC0gSFQgb3BlcmF0aW9uCisgKiAgICAgIC0gQlNTIENvZXhpc3RlbmNlIDIwLzQwCisgKiAgICAgIC0gRXh0ZW5kZWQgY2FwYWJpbGl0eQorICogICAgICAtIE92ZXJsYXBwaW5nIEJTUyBzY2FuIHBhcmFtZXRlcnMKKyAqLworc3RhdGljIGludAorbXdpZmlleF9pbnRlcnByZXRfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgIHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19lbnRyeSwKKwkJCQkgICB1OCAqKmJlYWNvbl9pbmZvLCB1MzIgKmJ5dGVzX2xlZnQpCit7CisJaW50IHJldCA9IDA7CisJdTggZWxlbWVudF9pZDsKKwlzdHJ1Y3QgaWVlZV90eXBlc19maF9wYXJhbV9zZXQgKmZoX3BhcmFtX3NldDsKKwlzdHJ1Y3QgaWVlZV90eXBlc19kc19wYXJhbV9zZXQgKmRzX3BhcmFtX3NldDsKKwlzdHJ1Y3QgaWVlZV90eXBlc19jZl9wYXJhbV9zZXQgKmNmX3BhcmFtX3NldDsKKwlzdHJ1Y3QgaWVlZV90eXBlc19pYnNzX3BhcmFtX3NldCAqaWJzc19wYXJhbV9zZXQ7CisJX19sZTE2IGJlYWNvbl9pbnRlcnZhbDsKKwlfX2xlMTYgY2FwYWJpbGl0aWVzOworCXU4ICpjdXJyZW50X3B0cjsKKwl1OCAqcmF0ZTsKKwl1OCBlbGVtZW50X2xlbjsKKwl1MTYgdG90YWxfaWVfbGVuOworCXU4IGJ5dGVzX3RvX2NvcHk7CisJdTggcmF0ZV9zaXplOworCXUxNiBiZWFjb25fc2l6ZTsKKwl1OCBmb3VuZF9kYXRhX3JhdGVfaWU7CisJdTMyIGJ5dGVzX2xlZnRfZm9yX2N1cnJlbnRfYmVhY29uOworCXN0cnVjdCBpZWVlX3R5cGVzX3ZlbmRvcl9zcGVjaWZpYyAqdmVuZG9yX2llOworCWNvbnN0IHU4IHdwYV9vdWlbNF0gPSB7IDB4MDAsIDB4NTAsIDB4ZjIsIDB4MDEgfTsKKwljb25zdCB1OCB3bW1fb3VpWzRdID0geyAweDAwLCAweDUwLCAweGYyLCAweDAyIH07CisKKwlmb3VuZF9kYXRhX3JhdGVfaWUgPSBmYWxzZTsKKwlyYXRlX3NpemUgPSAwOworCWJlYWNvbl9zaXplID0gMDsKKworCWlmICgqYnl0ZXNfbGVmdCA+PSBzaXplb2YoYmVhY29uX3NpemUpKSB7CisJCS8qIEV4dHJhY3QgJiBjb252ZXJ0IGJlYWNvbiBzaXplIGZyb20gdGhlIGNvbW1hbmQgYnVmZmVyICovCisJCW1lbWNweSgmYmVhY29uX3NpemUsICpiZWFjb25faW5mbywgc2l6ZW9mKGJlYWNvbl9zaXplKSk7CisJCSpieXRlc19sZWZ0IC09IHNpemVvZihiZWFjb25fc2l6ZSk7CisJCSpiZWFjb25faW5mbyArPSBzaXplb2YoYmVhY29uX3NpemUpOworCX0KKworCWlmICghYmVhY29uX3NpemUgfHwgYmVhY29uX3NpemUgPiAqYnl0ZXNfbGVmdCkgeworCQkqYmVhY29uX2luZm8gKz0gKmJ5dGVzX2xlZnQ7CisJCSpieXRlc19sZWZ0ID0gMDsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIEluaXRpYWxpemUgdGhlIGN1cnJlbnQgd29ya2luZyBiZWFjb24gcG9pbnRlciBmb3IgdGhpcyBCU1MKKwkgICBpdGVyYXRpb24gKi8KKwljdXJyZW50X3B0ciA9ICpiZWFjb25faW5mbzsKKworCS8qIEFkdmFuY2UgdGhlIHJldHVybiBiZWFjb24gcG9pbnRlciBwYXN0IHRoZSBjdXJyZW50IGJlYWNvbiAqLworCSpiZWFjb25faW5mbyArPSBiZWFjb25fc2l6ZTsKKwkqYnl0ZXNfbGVmdCAtPSBiZWFjb25fc2l6ZTsKKworCWJ5dGVzX2xlZnRfZm9yX2N1cnJlbnRfYmVhY29uID0gYmVhY29uX3NpemU7CisKKwltZW1jcHkoYnNzX2VudHJ5LT5tYWNfYWRkcmVzcywgY3VycmVudF9wdHIsIEVUSF9BTEVOKTsKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IEludGVycHJldElFOiBBUCBNQUMgQWRkcjogJXBNXG4iLAorCQkJCQkJYnNzX2VudHJ5LT5tYWNfYWRkcmVzcyk7CisKKwljdXJyZW50X3B0ciArPSBFVEhfQUxFTjsKKwlieXRlc19sZWZ0X2Zvcl9jdXJyZW50X2JlYWNvbiAtPSBFVEhfQUxFTjsKKworCWlmIChieXRlc19sZWZ0X2Zvcl9jdXJyZW50X2JlYWNvbiA8IDEyKSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiSW50ZXJwcmV0SUU6IG5vdCBlbm91Z2ggYnl0ZXMgbGVmdFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKgorCSAqIE5leHQgNCBmaWVsZHMgYXJlIFJTU0ksIHRpbWUgc3RhbXAsIGJlYWNvbiBpbnRlcnZhbCwKKwkgKiAgIGFuZCBjYXBhYmlsaXR5IGluZm9ybWF0aW9uCisJICovCisKKwkvKiBSU1NJIGlzIDEgYnl0ZSBsb25nICovCisJYnNzX2VudHJ5LT5yc3NpID0gKHMzMikgKCpjdXJyZW50X3B0cik7CisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBJbnRlcnByZXRJRTogUlNTST0lMDJYXG4iLCAqY3VycmVudF9wdHIpOworCWN1cnJlbnRfcHRyICs9IDE7CisJYnl0ZXNfbGVmdF9mb3JfY3VycmVudF9iZWFjb24gLT0gMTsKKworCS8qCisJICogIFRoZSBSU1NJIGlzIG5vdCBwYXJ0IG9mIHRoZSBiZWFjb24vcHJvYmUgcmVzcG9uc2UuICBBZnRlciB3ZSBoYXZlCisJICogICAgYWR2YW5jZWQgY3VycmVudF9wdHIgcGFzdCB0aGUgUlNTSSBmaWVsZCwgc2F2ZSB0aGUgcmVtYWluaW5nCisJICogICAgZGF0YSBmb3IgdXNlIGF0IHRoZSBhcHBsaWNhdGlvbiBsYXllcgorCSAqLworCWJzc19lbnRyeS0+YmVhY29uX2J1ZiA9IGN1cnJlbnRfcHRyOworCWJzc19lbnRyeS0+YmVhY29uX2J1Zl9zaXplID0gYnl0ZXNfbGVmdF9mb3JfY3VycmVudF9iZWFjb247CisKKwkvKiBUaW1lIHN0YW1wIGlzIDggYnl0ZXMgbG9uZyAqLworCW1lbWNweShic3NfZW50cnktPnRpbWVfc3RhbXAsIGN1cnJlbnRfcHRyLCA4KTsKKwljdXJyZW50X3B0ciArPSA4OworCWJ5dGVzX2xlZnRfZm9yX2N1cnJlbnRfYmVhY29uIC09IDg7CisKKwkvKiBCZWFjb24gaW50ZXJ2YWwgaXMgMiBieXRlcyBsb25nICovCisJbWVtY3B5KCZiZWFjb25faW50ZXJ2YWwsIGN1cnJlbnRfcHRyLCAyKTsKKwlic3NfZW50cnktPmJlYWNvbl9wZXJpb2QgPSBsZTE2X3RvX2NwdShiZWFjb25faW50ZXJ2YWwpOworCWN1cnJlbnRfcHRyICs9IDI7CisJYnl0ZXNfbGVmdF9mb3JfY3VycmVudF9iZWFjb24gLT0gMjsKKworCS8qIENhcGFiaWxpdHkgaW5mb3JtYXRpb24gaXMgMiBieXRlcyBsb25nICovCisJbWVtY3B5KCZjYXBhYmlsaXRpZXMsIGN1cnJlbnRfcHRyLCAyKTsKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IEludGVycHJldElFOiBjYXBhYmlsaXRpZXM9MHglWFxuIiwKKwkgICAgICAgY2FwYWJpbGl0aWVzKTsKKwlic3NfZW50cnktPmNhcF9pbmZvX2JpdG1hcCA9IGxlMTZfdG9fY3B1KGNhcGFiaWxpdGllcyk7CisJY3VycmVudF9wdHIgKz0gMjsKKwlieXRlc19sZWZ0X2Zvcl9jdXJyZW50X2JlYWNvbiAtPSAyOworCisJLyogUmVzdCBvZiB0aGUgY3VycmVudCBidWZmZXIgYXJlIElFJ3MgKi8KKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IEludGVycHJldElFOiBJRUxlbmd0aCBmb3IgdGhpcyBBUCA9ICVkXG4iLAorCSAgICAgICBieXRlc19sZWZ0X2Zvcl9jdXJyZW50X2JlYWNvbik7CisKKwlpZiAoYnNzX2VudHJ5LT5jYXBfaW5mb19iaXRtYXAgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkgeworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IEludGVycHJldElFOiBBUCBXRVAgZW5hYmxlZFxuIik7CisJCWJzc19lbnRyeS0+cHJpdmFjeSA9IE1XSUZJRVhfODAyXzExX1BSSVZfRklMVEVSXzgwMjFYX1dFUDsKKwl9IGVsc2UgeworCQlic3NfZW50cnktPnByaXZhY3kgPSBNV0lGSUVYXzgwMl8xMV9QUklWX0ZJTFRFUl9BQ0NFUFRfQUxMOworCX0KKworCWlmIChic3NfZW50cnktPmNhcF9pbmZvX2JpdG1hcCAmIFdMQU5fQ0FQQUJJTElUWV9JQlNTKQorCQlic3NfZW50cnktPmJzc19tb2RlID0gTkw4MDIxMV9JRlRZUEVfQURIT0M7CisJZWxzZQorCQlic3NfZW50cnktPmJzc19tb2RlID0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTjsKKworCisJLyogUHJvY2VzcyB2YXJpYWJsZSBJRSAqLworCXdoaWxlIChieXRlc19sZWZ0X2Zvcl9jdXJyZW50X2JlYWNvbiA+PSAyKSB7CisJCWVsZW1lbnRfaWQgPSAqY3VycmVudF9wdHI7CisJCWVsZW1lbnRfbGVuID0gKihjdXJyZW50X3B0ciArIDEpOworCQl0b3RhbF9pZV9sZW4gPSBlbGVtZW50X2xlbiArIHNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpOworCisJCWlmIChieXRlc19sZWZ0X2Zvcl9jdXJyZW50X2JlYWNvbiA8IHRvdGFsX2llX2xlbikgeworCQkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJlcnI6IEludGVycHJldElFOiBpbiBwcm9jZXNzaW5nIgorCQkJCSIgSUUsIGJ5dGVzIGxlZnQgPCBJRSBsZW5ndGhcbiIpOworCQkJYnl0ZXNfbGVmdF9mb3JfY3VycmVudF9iZWFjb24gPSAwOworCQkJcmV0ID0gLTE7CisJCQljb250aW51ZTsKKwkJfQorCQlzd2l0Y2ggKGVsZW1lbnRfaWQpIHsKKwkJY2FzZSBXTEFOX0VJRF9TU0lEOgorCQkJYnNzX2VudHJ5LT5zc2lkLnNzaWRfbGVuID0gZWxlbWVudF9sZW47CisJCQltZW1jcHkoYnNzX2VudHJ5LT5zc2lkLnNzaWQsIChjdXJyZW50X3B0ciArIDIpLAorCQkJICAgICAgIGVsZW1lbnRfbGVuKTsKKwkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogSW50ZXJwcmV0SUU6IHNzaWQ6ICUtMzJzXG4iLAorCQkJICAgICAgIGJzc19lbnRyeS0+c3NpZC5zc2lkKTsKKwkJCWJyZWFrOworCisJCWNhc2UgV0xBTl9FSURfU1VQUF9SQVRFUzoKKwkJCW1lbWNweShic3NfZW50cnktPmRhdGFfcmF0ZXMsIGN1cnJlbnRfcHRyICsgMiwKKwkJCSAgICAgICBlbGVtZW50X2xlbik7CisJCQltZW1jcHkoYnNzX2VudHJ5LT5zdXBwb3J0ZWRfcmF0ZXMsIGN1cnJlbnRfcHRyICsgMiwKKwkJCSAgICAgICBlbGVtZW50X2xlbik7CisJCQlyYXRlX3NpemUgPSBlbGVtZW50X2xlbjsKKwkJCWZvdW5kX2RhdGFfcmF0ZV9pZSA9IHRydWU7CisJCQlicmVhazsKKworCQljYXNlIFdMQU5fRUlEX0ZIX1BBUkFNUzoKKwkJCWZoX3BhcmFtX3NldCA9CisJCQkJKHN0cnVjdCBpZWVlX3R5cGVzX2ZoX3BhcmFtX3NldCAqKSBjdXJyZW50X3B0cjsKKwkJCW1lbWNweSgmYnNzX2VudHJ5LT5waHlfcGFyYW1fc2V0LmZoX3BhcmFtX3NldCwKKwkJCSAgICAgICBmaF9wYXJhbV9zZXQsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpZWVlX3R5cGVzX2ZoX3BhcmFtX3NldCkpOworCQkJYnJlYWs7CisKKwkJY2FzZSBXTEFOX0VJRF9EU19QQVJBTVM6CisJCQlkc19wYXJhbV9zZXQgPQorCQkJCShzdHJ1Y3QgaWVlZV90eXBlc19kc19wYXJhbV9zZXQgKikgY3VycmVudF9wdHI7CisKKwkJCWJzc19lbnRyeS0+Y2hhbm5lbCA9IGRzX3BhcmFtX3NldC0+Y3VycmVudF9jaGFuOworCisJCQltZW1jcHkoJmJzc19lbnRyeS0+cGh5X3BhcmFtX3NldC5kc19wYXJhbV9zZXQsCisJCQkgICAgICAgZHNfcGFyYW1fc2V0LAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19kc19wYXJhbV9zZXQpKTsKKwkJCWJyZWFrOworCisJCWNhc2UgV0xBTl9FSURfQ0ZfUEFSQU1TOgorCQkJY2ZfcGFyYW1fc2V0ID0KKwkJCQkoc3RydWN0IGllZWVfdHlwZXNfY2ZfcGFyYW1fc2V0ICopIGN1cnJlbnRfcHRyOworCQkJbWVtY3B5KCZic3NfZW50cnktPnNzX3BhcmFtX3NldC5jZl9wYXJhbV9zZXQsCisJCQkgICAgICAgY2ZfcGFyYW1fc2V0LAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19jZl9wYXJhbV9zZXQpKTsKKwkJCWJyZWFrOworCisJCWNhc2UgV0xBTl9FSURfSUJTU19QQVJBTVM6CisJCQlpYnNzX3BhcmFtX3NldCA9CisJCQkJKHN0cnVjdCBpZWVlX3R5cGVzX2lic3NfcGFyYW1fc2V0ICopCisJCQkJY3VycmVudF9wdHI7CisJCQltZW1jcHkoJmJzc19lbnRyeS0+c3NfcGFyYW1fc2V0Lmlic3NfcGFyYW1fc2V0LAorCQkJICAgICAgIGlic3NfcGFyYW1fc2V0LAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19pYnNzX3BhcmFtX3NldCkpOworCQkJYnJlYWs7CisKKwkJY2FzZSBXTEFOX0VJRF9FUlBfSU5GTzoKKwkJCWJzc19lbnRyeS0+ZXJwX2ZsYWdzID0gKihjdXJyZW50X3B0ciArIDIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUzoKKwkJCS8qCisJCQkgKiBPbmx5IHByb2Nlc3MgZXh0ZW5kZWQgc3VwcG9ydGVkIHJhdGUKKwkJCSAqIGlmIGRhdGEgcmF0ZSBpcyBhbHJlYWR5IGZvdW5kLgorCQkJICogRGF0YSByYXRlIElFIHNob3VsZCBjb21lIGJlZm9yZQorCQkJICogZXh0ZW5kZWQgc3VwcG9ydGVkIHJhdGUgSUUKKwkJCSAqLworCQkJaWYgKGZvdW5kX2RhdGFfcmF0ZV9pZSkgeworCQkJCWlmICgoZWxlbWVudF9sZW4gKyByYXRlX3NpemUpID4KKwkJCQkgICAgTVdJRklFWF9TVVBQT1JURURfUkFURVMpCisJCQkJCWJ5dGVzX3RvX2NvcHkgPQorCQkJCQkJKE1XSUZJRVhfU1VQUE9SVEVEX1JBVEVTIC0KKwkJCQkJCSByYXRlX3NpemUpOworCQkJCWVsc2UKKwkJCQkJYnl0ZXNfdG9fY29weSA9IGVsZW1lbnRfbGVuOworCisJCQkJcmF0ZSA9ICh1OCAqKSBic3NfZW50cnktPmRhdGFfcmF0ZXM7CisJCQkJcmF0ZSArPSByYXRlX3NpemU7CisJCQkJbWVtY3B5KHJhdGUsIGN1cnJlbnRfcHRyICsgMiwgYnl0ZXNfdG9fY29weSk7CisKKwkJCQlyYXRlID0gKHU4ICopIGJzc19lbnRyeS0+c3VwcG9ydGVkX3JhdGVzOworCQkJCXJhdGUgKz0gcmF0ZV9zaXplOworCQkJCW1lbWNweShyYXRlLCBjdXJyZW50X3B0ciArIDIsIGJ5dGVzX3RvX2NvcHkpOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBXTEFOX0VJRF9WRU5ET1JfU1BFQ0lGSUM6CisJCQl2ZW5kb3JfaWUgPSAoc3RydWN0IGllZWVfdHlwZXNfdmVuZG9yX3NwZWNpZmljICopCisJCQkJCWN1cnJlbnRfcHRyOworCisJCQlpZiAoIW1lbWNtcAorCQkJICAgICh2ZW5kb3JfaWUtPnZlbmRfaGRyLm91aSwgd3BhX291aSwKKwkJCSAgICAgc2l6ZW9mKHdwYV9vdWkpKSkgeworCQkJCWJzc19lbnRyeS0+YmNuX3dwYV9pZSA9CisJCQkJCShzdHJ1Y3QgaWVlZV90eXBlc192ZW5kb3Jfc3BlY2lmaWMgKikKKwkJCQkJY3VycmVudF9wdHI7CisJCQkJYnNzX2VudHJ5LT53cGFfb2Zmc2V0ID0gKHUxNikgKGN1cnJlbnRfcHRyIC0KKwkJCQkJCQlic3NfZW50cnktPmJlYWNvbl9idWYpOworCQkJfSBlbHNlIGlmICghbWVtY21wKHZlbmRvcl9pZS0+dmVuZF9oZHIub3VpLCB3bW1fb3VpLAorCQkJCSAgICBzaXplb2Yod21tX291aSkpKSB7CisJCQkJaWYgKHRvdGFsX2llX2xlbiA9PQorCQkJCSAgICBzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfd21tX3BhcmFtZXRlcikKKwkJCQkgICAgfHwgdG90YWxfaWVfbGVuID09CisJCQkJICAgIHNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc193bW1faW5mbykpCisJCQkJCS8qCisJCQkJCSAqIE9ubHkgYWNjZXB0IGFuZCBjb3B5IHRoZSBXTU0gSUUgaWYKKwkJCQkJICogaXQgbWF0Y2hlcyB0aGUgc2l6ZSBleHBlY3RlZCBmb3IgdGhlCisJCQkJCSAqIFdNTSBJbmZvIElFIG9yIHRoZSBXTU0gUGFyYW1ldGVyIElFLgorCQkJCQkgKi8KKwkJCQkJbWVtY3B5KCh1OCAqKSAmYnNzX2VudHJ5LT53bW1faWUsCisJCQkJCSAgICAgICBjdXJyZW50X3B0ciwgdG90YWxfaWVfbGVuKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRUlEX1JTTjoKKwkJCWJzc19lbnRyeS0+YmNuX3Jzbl9pZSA9CisJCQkJKHN0cnVjdCBpZWVlX3R5cGVzX2dlbmVyaWMgKikgY3VycmVudF9wdHI7CisJCQlic3NfZW50cnktPnJzbl9vZmZzZXQgPSAodTE2KSAoY3VycmVudF9wdHIgLQorCQkJCQkJCWJzc19lbnRyeS0+YmVhY29uX2J1Zik7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0VJRF9CU1NfQUNfQUNDRVNTX0RFTEFZOgorCQkJYnNzX2VudHJ5LT5iY25fd2FwaV9pZSA9CisJCQkJKHN0cnVjdCBpZWVlX3R5cGVzX2dlbmVyaWMgKikgY3VycmVudF9wdHI7CisJCQlic3NfZW50cnktPndhcGlfb2Zmc2V0ID0gKHUxNikgKGN1cnJlbnRfcHRyIC0KKwkJCQkJCQlic3NfZW50cnktPmJlYWNvbl9idWYpOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9FSURfSFRfQ0FQQUJJTElUWToKKwkJCWJzc19lbnRyeS0+YmNuX2h0X2NhcCA9IChzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCAqKQorCQkJCQkoY3VycmVudF9wdHIgKworCQkJCQlzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKSk7CisJCQlic3NfZW50cnktPmh0X2NhcF9vZmZzZXQgPSAodTE2KSAoY3VycmVudF9wdHIgKworCQkJCQlzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKSAtCisJCQkJCWJzc19lbnRyeS0+YmVhY29uX2J1Zik7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0VJRF9IVF9JTkZPUk1BVElPTjoKKwkJCWJzc19lbnRyeS0+YmNuX2h0X2luZm8gPSAoc3RydWN0IGllZWU4MDIxMV9odF9pbmZvICopCisJCQkJCShjdXJyZW50X3B0ciArCisJCQkJCXNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpKTsKKwkJCWJzc19lbnRyeS0+aHRfaW5mb19vZmZzZXQgPSAodTE2KSAoY3VycmVudF9wdHIgKworCQkJCQlzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKSAtCisJCQkJCWJzc19lbnRyeS0+YmVhY29uX2J1Zik7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0VJRF9CU1NfQ09FWF8yMDQwOgorCQkJYnNzX2VudHJ5LT5iY25fYnNzX2NvXzIwNDAgPSAodTggKikgKGN1cnJlbnRfcHRyICsKKwkJCQkJc2l6ZW9mKHN0cnVjdCBpZWVlX3R5cGVzX2hlYWRlcikpOworCQkJYnNzX2VudHJ5LT5ic3NfY29fMjA0MF9vZmZzZXQgPSAodTE2KSAoY3VycmVudF9wdHIgKworCQkJCQlzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKSAtCisJCQkJCQlic3NfZW50cnktPmJlYWNvbl9idWYpOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9FSURfRVhUX0NBUEFCSUxJVFk6CisJCQlic3NfZW50cnktPmJjbl9leHRfY2FwID0gKHU4ICopIChjdXJyZW50X3B0ciArCisJCQkJCXNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpKTsKKwkJCWJzc19lbnRyeS0+ZXh0X2NhcF9vZmZzZXQgPSAodTE2KSAoY3VycmVudF9wdHIgKworCQkJCQlzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKSAtCisJCQkJCWJzc19lbnRyeS0+YmVhY29uX2J1Zik7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0VJRF9PVkVSTEFQX0JTU19TQ0FOX1BBUkFNOgorCQkJYnNzX2VudHJ5LT5iY25fb2Jzc19zY2FuID0KKwkJCQkoc3RydWN0IGllZWVfdHlwZXNfb2Jzc19zY2FuX3BhcmFtICopCisJCQkJY3VycmVudF9wdHI7CisJCQlic3NfZW50cnktPm92ZXJsYXBfYnNzX29mZnNldCA9ICh1MTYpIChjdXJyZW50X3B0ciAtCisJCQkJCQkJYnNzX2VudHJ5LT5iZWFjb25fYnVmKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQljdXJyZW50X3B0ciArPSBlbGVtZW50X2xlbiArIDI7CisKKwkJLyogTmVlZCB0byBhY2NvdW50IGZvciBJRSBJRCBhbmQgSUUgTGVuICovCisJCWJ5dGVzX2xlZnRfZm9yX2N1cnJlbnRfYmVhY29uIC09IChlbGVtZW50X2xlbiArIDIpOworCisJfQkvKiB3aGlsZSAoYnl0ZXNfbGVmdF9mb3JfY3VycmVudF9iZWFjb24gPiAyKSAqLworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGFkanVzdHMgdGhlIHBvaW50ZXJzIHVzZWQgaW4gYmVhY29uIGJ1ZmZlcnMgdG8gcmVmbGVjdAorICogc2hpZnRzLgorICoKKyAqIFRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciBiZWFjb24gYnVmZmVycyBpcyBvZiBmaXhlZCBzaXplcyB3aGVyZSBhbGwgdGhlCisgKiBzYXZlZCBiZWFjb25zIG11c3QgYmUgc3RvcmVkLiBOZXcgYmVhY29ucyBhcmUgYWRkZWQgaW4gdGhlIGZyZWUgcG9ydGlvbgorICogb2YgdGhpcyBtZW1vcnksIHNwYWNlIHBlcm1pdHRpbmc7IHdoaWxlIGR1cGxpY2F0ZSBiZWFjb24gYnVmZmVycyBhcmUKKyAqIHBsYWNlZCBhdCB0aGUgc2FtZSBzdGFydCBsb2NhdGlvbi4gSG93ZXZlciwgc2luY2UgZHVwbGljYXRlIGJlYWNvbgorICogYnVmZmVycyBtYXkgbm90IG1hdGNoIHRoZSBzaXplIG9mIHRoZSBvbGQgb25lLCBhbGwgdGhlIGZvbGxvd2luZyBidWZmZXJzCisgKiBpbiB0aGUgbWVtb3J5IG11c3QgYmUgc2hpZnRlZCB0byBlaXRoZXIgbWFrZSBzcGFjZSwgb3IgdG8gZmlsbCB1cCBmcmVlZAorICogdXAgc3BhY2UuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHVwZGF0ZSB0aGUgYmVhY29uIGJ1ZmZlciBwb2ludGVycyB0aGF0IGFyZSBwYXN0CisgKiBhbiBleGlzdGluZyBiZWFjb24gYnVmZmVyIHRoYXQgaXMgdXBkYXRlZCB3aXRoIGEgbmV3IG9uZSBvZiBkaWZmZXJlbnQKKyAqIHNpemUuIFRoZSBwb2ludGVycyBhcmUgc2hpZnRlZCBieSBhIGZpeGVkIGFtb3VudCwgZWl0aGVyIGZvcndhcmQgb3IKKyAqIGJhY2t3YXJkLgorICoKKyAqIHRoZSBmb2xsb3dpbmcgcG9pbnRlcnMgaW4gZXZlcnkgYWZmZWN0ZWQgYmVhY29uIGJ1ZmZlcnMgYXJlIGNoYW5nZWQsIGlmCisgKiBwcmVzZW50IC0KKyAqICAgICAgLSBXUEEgSUUgcG9pbnRlcgorICogICAgICAtIFJTTiBJRSBwb2ludGVyCisgKiAgICAgIC0gV0FQSSBJRSBwb2ludGVyCisgKiAgICAgIC0gSFQgY2FwYWJpbGl0eSBJRSBwb2ludGVyCisgKiAgICAgIC0gSFQgaW5mb3JtYXRpb24gSUUgcG9pbnRlcgorICogICAgICAtIEJTUyBjb2V4aXN0ZW5jZSAyMC80MCBJRSBwb2ludGVyCisgKiAgICAgIC0gRXh0ZW5kZWQgY2FwYWJpbGl0eSBJRSBwb2ludGVyCisgKiAgICAgIC0gT3ZlcmxhcHBpbmcgQlNTIHNjYW4gcGFyYW1ldGVyIElFIHBvaW50ZXIKKyAqLworc3RhdGljIHZvaWQKK213aWZpZXhfYWRqdXN0X2JlYWNvbl9idWZmZXJfcHRycyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCBhZHZhbmNlLAorCQkJCSAgdTggKmJjbl9zdG9yZSwgdTMyIHJlbV9iY25fc2l6ZSwKKwkJCQkgIHUzMiBudW1fb2ZfZW50KQoreworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCXUzMiBhZGpfaWR4OworCWZvciAoYWRqX2lkeCA9IDA7IGFkal9pZHggPCBudW1fb2ZfZW50OyBhZGpfaWR4KyspIHsKKwkJaWYgKGFkYXB0ZXItPnNjYW5fdGFibGVbYWRqX2lkeF0uYmVhY29uX2J1ZiA+IGJjbl9zdG9yZSkgeworCisJCQlpZiAoYWR2YW5jZSkKKwkJCQlhZGFwdGVyLT5zY2FuX3RhYmxlW2Fkal9pZHhdLmJlYWNvbl9idWYgKz0KKwkJCQkJcmVtX2Jjbl9zaXplOworCQkJZWxzZQorCQkJCWFkYXB0ZXItPnNjYW5fdGFibGVbYWRqX2lkeF0uYmVhY29uX2J1ZiAtPQorCQkJCQlyZW1fYmNuX3NpemU7CisKKwkJCWlmIChhZGFwdGVyLT5zY2FuX3RhYmxlW2Fkal9pZHhdLmJjbl93cGFfaWUpCisJCQkJYWRhcHRlci0+c2Nhbl90YWJsZVthZGpfaWR4XS5iY25fd3BhX2llID0KKwkJCQkoc3RydWN0IGllZWVfdHlwZXNfdmVuZG9yX3NwZWNpZmljICopCisJCQkJKGFkYXB0ZXItPnNjYW5fdGFibGVbYWRqX2lkeF0uYmVhY29uX2J1ZiArCisJCQkJIGFkYXB0ZXItPnNjYW5fdGFibGVbYWRqX2lkeF0ud3BhX29mZnNldCk7CisJCQlpZiAoYWRhcHRlci0+c2Nhbl90YWJsZVthZGpfaWR4XS5iY25fcnNuX2llKQorCQkJCWFkYXB0ZXItPnNjYW5fdGFibGVbYWRqX2lkeF0uYmNuX3Jzbl9pZSA9CisJCQkJKHN0cnVjdCBpZWVlX3R5cGVzX2dlbmVyaWMgKikKKwkJCQkoYWRhcHRlci0+c2Nhbl90YWJsZVthZGpfaWR4XS5iZWFjb25fYnVmICsKKwkJCQkgYWRhcHRlci0+c2Nhbl90YWJsZVthZGpfaWR4XS5yc25fb2Zmc2V0KTsKKwkJCWlmIChhZGFwdGVyLT5zY2FuX3RhYmxlW2Fkal9pZHhdLmJjbl93YXBpX2llKQorCQkJCWFkYXB0ZXItPnNjYW5fdGFibGVbYWRqX2lkeF0uYmNuX3dhcGlfaWUgPQorCQkJCShzdHJ1Y3QgaWVlZV90eXBlc19nZW5lcmljICopCisJCQkJKGFkYXB0ZXItPnNjYW5fdGFibGVbYWRqX2lkeF0uYmVhY29uX2J1ZiArCisJCQkJIGFkYXB0ZXItPnNjYW5fdGFibGVbYWRqX2lkeF0ud2FwaV9vZmZzZXQpOworCQkJaWYgKGFkYXB0ZXItPnNjYW5fdGFibGVbYWRqX2lkeF0uYmNuX2h0X2NhcCkKKwkJCQlhZGFwdGVyLT5zY2FuX3RhYmxlW2Fkal9pZHhdLmJjbl9odF9jYXAgPQorCQkJCShzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCAqKQorCQkJCShhZGFwdGVyLT5zY2FuX3RhYmxlW2Fkal9pZHhdLmJlYWNvbl9idWYgKworCQkJCSBhZGFwdGVyLT5zY2FuX3RhYmxlW2Fkal9pZHhdLmh0X2NhcF9vZmZzZXQpOworCisJCQlpZiAoYWRhcHRlci0+c2Nhbl90YWJsZVthZGpfaWR4XS5iY25faHRfaW5mbykKKwkJCQlhZGFwdGVyLT5zY2FuX3RhYmxlW2Fkal9pZHhdLmJjbl9odF9pbmZvID0KKwkJCQkoc3RydWN0IGllZWU4MDIxMV9odF9pbmZvICopCisJCQkJKGFkYXB0ZXItPnNjYW5fdGFibGVbYWRqX2lkeF0uYmVhY29uX2J1ZiArCisJCQkJIGFkYXB0ZXItPnNjYW5fdGFibGVbYWRqX2lkeF0uaHRfaW5mb19vZmZzZXQpOworCQkJaWYgKGFkYXB0ZXItPnNjYW5fdGFibGVbYWRqX2lkeF0uYmNuX2Jzc19jb18yMDQwKQorCQkJCWFkYXB0ZXItPnNjYW5fdGFibGVbYWRqX2lkeF0uYmNuX2Jzc19jb18yMDQwID0KKwkJCQkodTggKikKKwkJCQkoYWRhcHRlci0+c2Nhbl90YWJsZVthZGpfaWR4XS5iZWFjb25fYnVmICsKKwkJCSAgICAgICBhZGFwdGVyLT5zY2FuX3RhYmxlW2Fkal9pZHhdLmJzc19jb18yMDQwX29mZnNldCk7CisJCQlpZiAoYWRhcHRlci0+c2Nhbl90YWJsZVthZGpfaWR4XS5iY25fZXh0X2NhcCkKKwkJCQlhZGFwdGVyLT5zY2FuX3RhYmxlW2Fkal9pZHhdLmJjbl9leHRfY2FwID0KKwkJCQkodTggKikKKwkJCQkoYWRhcHRlci0+c2Nhbl90YWJsZVthZGpfaWR4XS5iZWFjb25fYnVmICsKKwkJCQkgYWRhcHRlci0+c2Nhbl90YWJsZVthZGpfaWR4XS5leHRfY2FwX29mZnNldCk7CisJCQlpZiAoYWRhcHRlci0+c2Nhbl90YWJsZVthZGpfaWR4XS5iY25fb2Jzc19zY2FuKQorCQkJCWFkYXB0ZXItPnNjYW5fdGFibGVbYWRqX2lkeF0uYmNuX29ic3Nfc2NhbiA9CisJCQkJKHN0cnVjdCBpZWVlX3R5cGVzX29ic3Nfc2Nhbl9wYXJhbSAqKQorCQkJCShhZGFwdGVyLT5zY2FuX3RhYmxlW2Fkal9pZHhdLmJlYWNvbl9idWYgKworCQkJICAgICAgIGFkYXB0ZXItPnNjYW5fdGFibGVbYWRqX2lkeF0ub3ZlcmxhcF9ic3Nfb2Zmc2V0KTsKKwkJfQorCX0KK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gdXBkYXRlcyB0aGUgcG9pbnRlcnMgdXNlZCBpbiBiZWFjb24gYnVmZmVyIGZvciBnaXZlbiBic3MKKyAqIGRlc2NyaXB0b3IgdG8gcmVmbGVjdCBzaGlmdHMKKyAqCisgKiBGb2xsb3dpbmcgcG9pbnRlcnMgYXJlIHVwZGF0ZWQKKyAqICAgICAgLSBXUEEgSUUgcG9pbnRlcgorICogICAgICAtIFJTTiBJRSBwb2ludGVyCisgKiAgICAgIC0gV0FQSSBJRSBwb2ludGVyCisgKiAgICAgIC0gSFQgY2FwYWJpbGl0eSBJRSBwb2ludGVyCisgKiAgICAgIC0gSFQgaW5mb3JtYXRpb24gSUUgcG9pbnRlcgorICogICAgICAtIEJTUyBjb2V4aXN0ZW5jZSAyMC80MCBJRSBwb2ludGVyCisgKiAgICAgIC0gRXh0ZW5kZWQgY2FwYWJpbGl0eSBJRSBwb2ludGVyCisgKiAgICAgIC0gT3ZlcmxhcHBpbmcgQlNTIHNjYW4gcGFyYW1ldGVyIElFIHBvaW50ZXIKKyAqLworc3RhdGljIHZvaWQKK213aWZpZXhfdXBkYXRlX2JlYWNvbl9idWZmZXJfcHRycyhzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpiZWFjb24pCit7CisJaWYgKGJlYWNvbi0+YmNuX3dwYV9pZSkKKwkJYmVhY29uLT5iY25fd3BhX2llID0gKHN0cnVjdCBpZWVlX3R5cGVzX3ZlbmRvcl9zcGVjaWZpYyAqKQorCQkJKGJlYWNvbi0+YmVhY29uX2J1ZiArIGJlYWNvbi0+d3BhX29mZnNldCk7CisJaWYgKGJlYWNvbi0+YmNuX3Jzbl9pZSkKKwkJYmVhY29uLT5iY25fcnNuX2llID0gKHN0cnVjdCBpZWVlX3R5cGVzX2dlbmVyaWMgKikKKwkJCShiZWFjb24tPmJlYWNvbl9idWYgKyBiZWFjb24tPnJzbl9vZmZzZXQpOworCWlmIChiZWFjb24tPmJjbl93YXBpX2llKQorCQliZWFjb24tPmJjbl93YXBpX2llID0gKHN0cnVjdCBpZWVlX3R5cGVzX2dlbmVyaWMgKikKKwkJCShiZWFjb24tPmJlYWNvbl9idWYgKyBiZWFjb24tPndhcGlfb2Zmc2V0KTsKKwlpZiAoYmVhY29uLT5iY25faHRfY2FwKQorCQliZWFjb24tPmJjbl9odF9jYXAgPSAoc3RydWN0IGllZWU4MDIxMV9odF9jYXAgKikKKwkJCShiZWFjb24tPmJlYWNvbl9idWYgKyBiZWFjb24tPmh0X2NhcF9vZmZzZXQpOworCWlmIChiZWFjb24tPmJjbl9odF9pbmZvKQorCQliZWFjb24tPmJjbl9odF9pbmZvID0gKHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyAqKQorCQkJKGJlYWNvbi0+YmVhY29uX2J1ZiArIGJlYWNvbi0+aHRfaW5mb19vZmZzZXQpOworCWlmIChiZWFjb24tPmJjbl9ic3NfY29fMjA0MCkKKwkJYmVhY29uLT5iY25fYnNzX2NvXzIwNDAgPSAodTggKikgKGJlYWNvbi0+YmVhY29uX2J1ZiArCisJCQliZWFjb24tPmJzc19jb18yMDQwX29mZnNldCk7CisJaWYgKGJlYWNvbi0+YmNuX2V4dF9jYXApCisJCWJlYWNvbi0+YmNuX2V4dF9jYXAgPSAodTggKikgKGJlYWNvbi0+YmVhY29uX2J1ZiArCisJCQliZWFjb24tPmV4dF9jYXBfb2Zmc2V0KTsKKwlpZiAoYmVhY29uLT5iY25fb2Jzc19zY2FuKQorCQliZWFjb24tPmJjbl9vYnNzX3NjYW4gPSAoc3RydWN0IGllZWVfdHlwZXNfb2Jzc19zY2FuX3BhcmFtICopCisJCQkoYmVhY29uLT5iZWFjb25fYnVmICsgYmVhY29uLT5vdmVybGFwX2Jzc19vZmZzZXQpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBzdG9yZXMgYSBiZWFjb24gb3IgcHJvYmUgcmVzcG9uc2UgZm9yIGEgQlNTIHJldHVybmVkCisgKiBpbiB0aGUgc2Nhbi4KKyAqCisgKiBUaGlzIHN0b3JlcyBhIG5ldyBzY2FuIHJlc3BvbnNlIG9yIGFuIHVwZGF0ZSBmb3IgYSBwcmV2aW91cyBzY2FuIHJlc3BvbnNlLgorICogTmV3IGVudHJpZXMgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGV5IGRvIG5vdCBleGNlZWQgdGhlIHRvdGFsIGFtb3VudCBvZgorICogbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIHRhYmxlLgorICoKKyAqIFJlcGxhY2VtZW50IGVudHJpZXMgbmVlZCB0byB0YWtlIGludG8gY29uc2lkZXJhdGlvbiB0aGUgYW1vdW50IG9mIHNwYWNlCisgKiBjdXJyZW50bHkgYWxsb2NhdGVkIGZvciB0aGUgYmVhY29uL3Byb2JlIHJlc3BvbnNlIGFuZCBhZGp1c3QgdGhlIGVudHJ5CisgKiBhcyBuZWVkZWQuCisgKgorICogQSBzbWFsbCBhbW91bnQgb2YgZXh0cmEgcGFkIChTQ0FOX0JFQUNPTl9FTlRSWV9QQUQpIGlzIGdlbmVyYWxseSByZXNlcnZlZAorICogZm9yIGFuIGVudHJ5IGluIGNhc2UgaXQgaXMgYSBiZWFjb24gc2luY2UgYSBwcm9iZSByZXNwb25zZSBmb3IgdGhlCisgKiBuZXR3b3JrIHdpbGwgYnkgbGFyZ2VyIHBlciB0aGUgc3RhbmRhcmQuICBUaGlzIGhlbHBzIHRvIHJlZHVjZSB0aGUKKyAqIGFtb3VudCBvZiBtZW1vcnkgY29weWluZyB0byBmaXQgYSBuZXcgcHJvYmUgcmVzcG9uc2UgaW50byBhbiBlbnRyeQorICogYWxyZWFkeSBvY2N1cGllZCBieSBhIG5ldHdvcmsncyBwcmV2aW91c2x5IHN0b3JlZCBiZWFjb24uCisgKi8KK3N0YXRpYyB2b2lkCittd2lmaWV4X3JldF84MDJfMTFfc2Nhbl9zdG9yZV9iZWFjb24oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgICAgIHUzMiBiZWFjb25faWR4LCB1MzIgbnVtX29mX2VudCwKKwkJCQkgICAgIHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKm5ld19iZWFjb24pCit7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJdTggKmJjbl9zdG9yZTsKKwl1MzIgbmV3X2Jjbl9zaXplOworCXUzMiBvbGRfYmNuX3NpemU7CisJdTMyIGJjbl9zcGFjZTsKKworCWlmIChhZGFwdGVyLT5zY2FuX3RhYmxlW2JlYWNvbl9pZHhdLmJlYWNvbl9idWYpIHsKKworCQluZXdfYmNuX3NpemUgPSBuZXdfYmVhY29uLT5iZWFjb25fYnVmX3NpemU7CisJCW9sZF9iY25fc2l6ZSA9IGFkYXB0ZXItPnNjYW5fdGFibGVbYmVhY29uX2lkeF0uYmVhY29uX2J1Zl9zaXplOworCQliY25fc3BhY2UgPSBhZGFwdGVyLT5zY2FuX3RhYmxlW2JlYWNvbl9pZHhdLmJlYWNvbl9idWZfc2l6ZV9tYXg7CisJCWJjbl9zdG9yZSA9IGFkYXB0ZXItPnNjYW5fdGFibGVbYmVhY29uX2lkeF0uYmVhY29uX2J1ZjsKKworCQkvKiBTZXQgdGhlIG1heCB0byBiZSB0aGUgc2FtZSBhcyBjdXJyZW50IGVudHJ5IHVubGVzcyBjaGFuZ2VkCisJCSAgIGJlbG93ICovCisJCW5ld19iZWFjb24tPmJlYWNvbl9idWZfc2l6ZV9tYXggPSBiY25fc3BhY2U7CisJCWlmIChuZXdfYmNuX3NpemUgPT0gb2xkX2Jjbl9zaXplKSB7CisJCQkvKgorCQkJICogQmVhY29uIGlzIHRoZSBzYW1lIHNpemUgYXMgdGhlIHByZXZpb3VzIGVudHJ5LgorCQkJICogICBSZXBsYWNlIHRoZSBwcmV2aW91cyBjb250ZW50cyB3aXRoIHRoZSBzY2FuIHJlc3VsdAorCQkJICovCisJCQltZW1jcHkoYmNuX3N0b3JlLCBuZXdfYmVhY29uLT5iZWFjb25fYnVmLAorCQkJICAgICAgIG5ld19iZWFjb24tPmJlYWNvbl9idWZfc2l6ZSk7CisKKwkJfSBlbHNlIGlmIChuZXdfYmNuX3NpemUgPD0gYmNuX3NwYWNlKSB7CisJCQkvKgorCQkJICogTmV3IGJlYWNvbiBzaXplIHdpbGwgZml0IGluIHRoZSBhbW91bnQgb2Ygc3BhY2UKKwkJCSAqICAgd2UgaGF2ZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBmb3IgaXQKKwkJCSAqLworCisJCQkvKiBDb3B5IHRoZSBuZXcgYmVhY29uIGJ1ZmZlciBlbnRyeSBvdmVyIHRoZSBvbGQgb25lICovCisJCQltZW1jcHkoYmNuX3N0b3JlLCBuZXdfYmVhY29uLT5iZWFjb25fYnVmLCBuZXdfYmNuX3NpemUpOworCisJCQkvKgorCQkJICogIElmIHRoZSBvbGQgYmVhY29uIHNpemUgd2FzIGxlc3MgdGhhbiB0aGUgbWF4aW11bQorCQkJICogIHdlIGhhZCBhbGxvdGVkIGZvciB0aGUgZW50cnksIGFuZCB0aGUgbmV3IGVudHJ5CisJCQkgKiAgaXMgZXZlbiBzbWFsbGVyLCByZXNldCB0aGUgbWF4IHNpemUgdG8gdGhlIG9sZAorCQkJICogIGJlYWNvbiBlbnRyeSBhbmQgY29tcHJlc3MgdGhlIHN0b3JhZ2Ugc3BhY2UKKwkJCSAqICAobGVhdmluZyBhIG5ldyBwYWQgc3BhY2Ugb2YgKG9sZF9iY25fc2l6ZSAtCisJCQkgKiAgbmV3X2Jjbl9zaXplKS4KKwkJCSAqLworCQkJaWYgKG9sZF9iY25fc2l6ZSA8IGJjbl9zcGFjZQorCQkJICAgICYmIG5ld19iY25fc2l6ZSA8PSBvbGRfYmNuX3NpemUpIHsKKwkJCQkvKgorCQkJCSAqIE9sZCBCZWFjb24gc2l6ZSBpcyBzbWFsbGVyIHRoYW4gdGhlIGFsbG90ZWQKKwkJCQkgKiBzdG9yYWdlIHNpemUuIFNocmluayB0aGUgYWxsb3RlZCBzdG9yYWdlCisJCQkJICogc3BhY2UuCisJCQkJICovCisJCQkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBBcHBDb250cm9sOiIKKwkJCQkJIiBzbWFsbGVyIGR1cGxpY2F0ZSBiZWFjb24gIgorCQkJCSAgICAgICAiKCVkKSwgb2xkID0gJWQsIG5ldyA9ICVkLCBzcGFjZSA9ICVkLCIKKwkJCQkgICAgICAgImxlZnQgPSAlZFxuIiwKKwkJCQkgICAgICAgYmVhY29uX2lkeCwgb2xkX2Jjbl9zaXplLCBuZXdfYmNuX3NpemUsCisJCQkJICAgICAgIGJjbl9zcGFjZSwKKwkJCQkgICAgICAgKGludCkoc2l6ZW9mKGFkYXB0ZXItPmJjbl9idWYpIC0KKwkJCQkJKGFkYXB0ZXItPmJjbl9idWZfZW5kIC0KKwkJCQkJIGFkYXB0ZXItPmJjbl9idWYpKSk7CisKKwkJCQkvKgorCQkJCSAqICBtZW1tb3ZlIChzaW5jZSB0aGUgbWVtb3J5IG92ZXJsYXBzKSB0aGUKKwkJCQkgKiAgZGF0YSBhZnRlciB0aGUgYmVhY29uIHdlIGp1c3Qgc3RvcmVkIHRvIHRoZQorCQkJCSAqICBlbmQgb2YgdGhlIGN1cnJlbnQgYmVhY29uLiAgVGhpcyBjbGVhbnMgdXAKKwkJCQkgKiAgYW55IHVudXNlZCBzcGFjZSB0aGUgb2xkIGxhcmdlciBiZWFjb24gd2FzCisJCQkJICogIHVzaW5nIGluIHRoZSBidWZmZXIKKwkJCQkgKi8KKwkJCQltZW1tb3ZlKGJjbl9zdG9yZSArIG9sZF9iY25fc2l6ZSwKKwkJCQkJYmNuX3N0b3JlICsgYmNuX3NwYWNlLAorCQkJCQlhZGFwdGVyLT5iY25fYnVmX2VuZCAtIChiY25fc3RvcmUgKworCQkJCQkJCQkgICBiY25fc3BhY2UpKTsKKworCQkJCS8qCisJCQkJICogRGVjcmVtZW50IHRoZSBlbmQgcG9pbnRlciBieSB0aGUgZGlmZmVyZW5jZQorCQkJCSAqIGJldHdlZW4gdGhlIG9sZCBsYXJnZXIgc2l6ZSBhbmQgdGhlIG5ldworCQkJCSAqIHNtYWxsZXIgc2l6ZSBzaW5jZSB3ZSBhcmUgdXNpbmcgbGVzcyBzcGFjZQorCQkJCSAqIGR1ZSB0byB0aGUgbmV3IGJlYWNvbiBiZWluZyBzbWFsbGVyCisJCQkJICovCisJCQkJYWRhcHRlci0+YmNuX2J1Zl9lbmQgLT0KKwkJCQkJKGJjbl9zcGFjZSAtIG9sZF9iY25fc2l6ZSk7CisKKwkJCQkvKiBTZXQgdGhlIG1heGltdW0gc3RvcmFnZSBzaXplIHRvIHRoZSBvbGQKKwkJCQkgICBiZWFjb24gc2l6ZSAqLworCQkJCW5ld19iZWFjb24tPmJlYWNvbl9idWZfc2l6ZV9tYXggPSBvbGRfYmNuX3NpemU7CisKKwkJCQkvKiBBZGp1c3QgYmVhY29uIGJ1ZmZlciBwb2ludGVycyB0aGF0IGFyZSBwYXN0CisJCQkJICAgdGhlIGN1cnJlbnQgKi8KKwkJCQltd2lmaWV4X2FkanVzdF9iZWFjb25fYnVmZmVyX3B0cnMocHJpdiwgMCwKKwkJCQkJYmNuX3N0b3JlLCAoYmNuX3NwYWNlIC0gb2xkX2Jjbl9zaXplKSwKKwkJCQkJbnVtX29mX2VudCk7CisJCQl9CisJCX0gZWxzZSBpZiAoYWRhcHRlci0+YmNuX2J1Zl9lbmQgKyAobmV3X2Jjbl9zaXplIC0gYmNuX3NwYWNlKQorCQkJICAgPCAoYWRhcHRlci0+YmNuX2J1ZiArIHNpemVvZihhZGFwdGVyLT5iY25fYnVmKSkpIHsKKwkJCS8qCisJCQkgKiBCZWFjb24gaXMgbGFyZ2VyIHRoYW4gc3BhY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQKKwkJCSAqIChiY25fc3BhY2UpIGFuZCB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgbGVmdCBpbiB0aGUKKwkJCSAqIGJlYWNvbkJ1ZmZlciB0byBzdG9yZSB0aGUgYWRkaXRpb25hbCBkYXRhCisJCQkgKi8KKwkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogQXBwQ29udHJvbDoiCisJCQkJIiBsYXJnZXIgZHVwbGljYXRlIGJlYWNvbiAoJWQpLCAiCisJCQkgICAgICAgIm9sZCA9ICVkLCBuZXcgPSAlZCwgc3BhY2UgPSAlZCwgbGVmdCA9ICVkXG4iLAorCQkJICAgICAgIGJlYWNvbl9pZHgsIG9sZF9iY25fc2l6ZSwgbmV3X2Jjbl9zaXplLAorCQkJICAgICAgIGJjbl9zcGFjZSwKKwkJCSAgICAgICAoaW50KShzaXplb2YoYWRhcHRlci0+YmNuX2J1ZikgLQorCQkJCShhZGFwdGVyLT5iY25fYnVmX2VuZCAtCisJCQkJIGFkYXB0ZXItPmJjbl9idWYpKSk7CisKKwkJCS8qCisJCQkgKiBtZW1tb3ZlIChzaW5jZSB0aGUgbWVtb3J5IG92ZXJsYXBzKSB0aGUgZGF0YQorCQkJICogIGFmdGVyIHRoZSBiZWFjb24gd2UganVzdCBzdG9yZWQgdG8gdGhlIGVuZCBvZgorCQkJICogIHRoZSBjdXJyZW50IGJlYWNvbi4gIFRoaXMgbW92ZXMgdGhlIGRhdGEgZm9yCisJCQkgKiAgdGhlIGJlYWNvbnMgYWZ0ZXIgdGhpcyBmdXJ0aGVyIGluIG1lbW9yeSB0bworCQkJICogIG1ha2Ugc3BhY2UgZm9yIHRoZSBuZXcgbGFyZ2VyIGJlYWNvbiB3ZSBhcmUKKwkJCSAqICBhYm91dCB0byBjb3B5IGluLgorCQkJICovCisJCQltZW1tb3ZlKGJjbl9zdG9yZSArIG5ld19iY25fc2l6ZSwKKwkJCQliY25fc3RvcmUgKyBiY25fc3BhY2UsCisJCQkJYWRhcHRlci0+YmNuX2J1Zl9lbmQgLSAoYmNuX3N0b3JlICsgYmNuX3NwYWNlKSk7CisKKwkJCS8qIENvcHkgdGhlIG5ldyBiZWFjb24gYnVmZmVyIGVudHJ5IG92ZXIgdGhlIG9sZCBvbmUgKi8KKwkJCW1lbWNweShiY25fc3RvcmUsIG5ld19iZWFjb24tPmJlYWNvbl9idWYsIG5ld19iY25fc2l6ZSk7CisKKwkJCS8qIE1vdmUgdGhlIGJlYWNvbiBlbmQgcG9pbnRlciBieSB0aGUgYW1vdW50IG9mIG5ldworCQkJICAgYmVhY29uIGRhdGEgd2UgYXJlIGFkZGluZyAqLworCQkJYWRhcHRlci0+YmNuX2J1Zl9lbmQgKz0gKG5ld19iY25fc2l6ZSAtIGJjbl9zcGFjZSk7CisKKwkJCS8qCisJCQkgKiBUaGlzIGVudHJ5IGlzIGJpZ2dlciB0aGFuIHRoZSBhbGxvdGVkIG1heCBzcGFjZQorCQkJICogIHByZXZpb3VzbHkgcmVzZXJ2ZWQuICBJbmNyZWFzZSB0aGUgbWF4IHNwYWNlIHRvCisJCQkgKiAgYmUgZXF1YWwgdG8gdGhlIG5ldyBiZWFjb24gc2l6ZQorCQkJICovCisJCQluZXdfYmVhY29uLT5iZWFjb25fYnVmX3NpemVfbWF4ID0gbmV3X2Jjbl9zaXplOworCisJCQkvKiBBZGp1c3QgYmVhY29uIGJ1ZmZlciBwb2ludGVycyB0aGF0IGFyZSBwYXN0IHRoZQorCQkJICAgY3VycmVudCAqLworCQkJbXdpZmlleF9hZGp1c3RfYmVhY29uX2J1ZmZlcl9wdHJzKHByaXYsIDEsIGJjbl9zdG9yZSwKKwkJCQkJCShuZXdfYmNuX3NpemUgLSBiY25fc3BhY2UpLAorCQkJCQkJbnVtX29mX2VudCk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogQmVhY29uIGlzIGxhcmdlciB0aGFuIHRoZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBzcGFjZSwKKwkJCSAqIGJ1dCB0aGVyZSBpcyBub3QgZW5vdWdoIGZyZWUgc3BhY2UgdG8gc3RvcmUgdGhlCisJCQkgKiBhZGRpdGlvbmFsIGRhdGEuCisJCQkgKi8KKwkJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiQXBwQ29udHJvbDogbGFyZ2VyIGR1cGxpY2F0ZSAiCisJCQkJIiBiZWFjb24gKCVkKSwgb2xkID0gJWQgbmV3ID0gJWQsIHNwYWNlID0gJWQsIgorCQkJCSIgbGVmdCA9ICVkXG4iLCBiZWFjb25faWR4LCBvbGRfYmNuX3NpemUsCisJCQkJbmV3X2Jjbl9zaXplLCBiY25fc3BhY2UsCisJCQkJKGludCkoc2l6ZW9mKGFkYXB0ZXItPmJjbl9idWYpIC0KKwkJCQkoYWRhcHRlci0+YmNuX2J1Zl9lbmQgLSBhZGFwdGVyLT5iY25fYnVmKSkpOworCisJCQkvKiBTdG9yYWdlIGZhaWx1cmUsIGtlZXAgb2xkIGJlYWNvbiBpbnRhY3QgKi8KKwkJCW5ld19iZWFjb24tPmJlYWNvbl9idWZfc2l6ZSA9IG9sZF9iY25fc2l6ZTsKKwkJCWlmIChuZXdfYmVhY29uLT5iY25fd3BhX2llKQorCQkJCW5ld19iZWFjb24tPndwYV9vZmZzZXQgPQorCQkJCQlhZGFwdGVyLT5zY2FuX3RhYmxlW2JlYWNvbl9pZHhdLgorCQkJCQl3cGFfb2Zmc2V0OworCQkJaWYgKG5ld19iZWFjb24tPmJjbl9yc25faWUpCisJCQkJbmV3X2JlYWNvbi0+cnNuX29mZnNldCA9CisJCQkJCWFkYXB0ZXItPnNjYW5fdGFibGVbYmVhY29uX2lkeF0uCisJCQkJCXJzbl9vZmZzZXQ7CisJCQlpZiAobmV3X2JlYWNvbi0+YmNuX3dhcGlfaWUpCisJCQkJbmV3X2JlYWNvbi0+d2FwaV9vZmZzZXQgPQorCQkJCQlhZGFwdGVyLT5zY2FuX3RhYmxlW2JlYWNvbl9pZHhdLgorCQkJCQl3YXBpX29mZnNldDsKKwkJCWlmIChuZXdfYmVhY29uLT5iY25faHRfY2FwKQorCQkJCW5ld19iZWFjb24tPmh0X2NhcF9vZmZzZXQgPQorCQkJCQlhZGFwdGVyLT5zY2FuX3RhYmxlW2JlYWNvbl9pZHhdLgorCQkJCQlodF9jYXBfb2Zmc2V0OworCQkJaWYgKG5ld19iZWFjb24tPmJjbl9odF9pbmZvKQorCQkJCW5ld19iZWFjb24tPmh0X2luZm9fb2Zmc2V0ID0KKwkJCQkJYWRhcHRlci0+c2Nhbl90YWJsZVtiZWFjb25faWR4XS4KKwkJCQkJaHRfaW5mb19vZmZzZXQ7CisJCQlpZiAobmV3X2JlYWNvbi0+YmNuX2Jzc19jb18yMDQwKQorCQkJCW5ld19iZWFjb24tPmJzc19jb18yMDQwX29mZnNldCA9CisJCQkJCWFkYXB0ZXItPnNjYW5fdGFibGVbYmVhY29uX2lkeF0uCisJCQkJCWJzc19jb18yMDQwX29mZnNldDsKKwkJCWlmIChuZXdfYmVhY29uLT5iY25fZXh0X2NhcCkKKwkJCQluZXdfYmVhY29uLT5leHRfY2FwX29mZnNldCA9CisJCQkJCWFkYXB0ZXItPnNjYW5fdGFibGVbYmVhY29uX2lkeF0uCisJCQkJCWV4dF9jYXBfb2Zmc2V0OworCQkJaWYgKG5ld19iZWFjb24tPmJjbl9vYnNzX3NjYW4pCisJCQkJbmV3X2JlYWNvbi0+b3ZlcmxhcF9ic3Nfb2Zmc2V0ID0KKwkJCQkJYWRhcHRlci0+c2Nhbl90YWJsZVtiZWFjb25faWR4XS4KKwkJCQkJb3ZlcmxhcF9ic3Nfb2Zmc2V0OworCQl9CisJCS8qIFBvaW50IHRoZSBuZXcgZW50cnkgdG8gaXRzIHBlcm1hbmVudCBzdG9yYWdlIHNwYWNlICovCisJCW5ld19iZWFjb24tPmJlYWNvbl9idWYgPSBiY25fc3RvcmU7CisJCW13aWZpZXhfdXBkYXRlX2JlYWNvbl9idWZmZXJfcHRycyhuZXdfYmVhY29uKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBObyBleGlzdGluZyBiZWFjb24gZGF0YSBleGlzdHMgZm9yIHRoaXMgZW50cnksIGNoZWNrIHRvIHNlZQorCQkgKiAgIGlmIHdlIGNhbiBmaXQgaXQgaW4gdGhlIHJlbWFpbmluZyBzcGFjZQorCQkgKi8KKwkJaWYgKGFkYXB0ZXItPmJjbl9idWZfZW5kICsgbmV3X2JlYWNvbi0+YmVhY29uX2J1Zl9zaXplICsKKwkJICAgIFNDQU5fQkVBQ09OX0VOVFJZX1BBRCA8IChhZGFwdGVyLT5iY25fYnVmICsKKwkJCQkJICAgICBzaXplb2YoYWRhcHRlci0+YmNuX2J1ZikpKSB7CisKKwkJCS8qCisJCQkgKiBDb3B5IHRoZSBiZWFjb24gYnVmZmVyIGRhdGEgZnJvbSB0aGUgbG9jYWwgZW50cnkgdG8KKwkJCSAqIHRoZSBhZGFwdGVyIGRldiBzdHJ1Y3QgYnVmZmVyIHNwYWNlIHVzZWQgdG8gc3RvcmUKKwkJCSAqIHRoZSByYXcgYmVhY29uIGRhdGEgZm9yIGVhY2ggZW50cnkgaW4gdGhlIHNjYW4gdGFibGUKKwkJCSAqLworCQkJbWVtY3B5KGFkYXB0ZXItPmJjbl9idWZfZW5kLCBuZXdfYmVhY29uLT5iZWFjb25fYnVmLAorCQkJICAgICAgIG5ld19iZWFjb24tPmJlYWNvbl9idWZfc2l6ZSk7CisKKwkJCS8qIFVwZGF0ZSB0aGUgYmVhY29uIHB0ciB0byBwb2ludCB0byB0aGUgdGFibGUgc2F2ZQorCQkJICAgYXJlYSAqLworCQkJbmV3X2JlYWNvbi0+YmVhY29uX2J1ZiA9IGFkYXB0ZXItPmJjbl9idWZfZW5kOworCQkJbmV3X2JlYWNvbi0+YmVhY29uX2J1Zl9zaXplX21heCA9CisJCQkJKG5ld19iZWFjb24tPmJlYWNvbl9idWZfc2l6ZSArCisJCQkJIFNDQU5fQkVBQ09OX0VOVFJZX1BBRCk7CisKKwkJCW13aWZpZXhfdXBkYXRlX2JlYWNvbl9idWZmZXJfcHRycyhuZXdfYmVhY29uKTsKKworCQkJLyogSW5jcmVtZW50IHRoZSBlbmQgcG9pbnRlciBieSB0aGUgc2l6ZSByZXNlcnZlZCAqLworCQkJYWRhcHRlci0+YmNuX2J1Zl9lbmQgKz0gbmV3X2JlYWNvbi0+YmVhY29uX2J1Zl9zaXplX21heDsKKworCQkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBBcHBDb250cm9sOiBiZWFjb25bJTAyZF0iCisJCQkJIiBzej0lMDNkLCB1c2VkID0gJTA0ZCwgbGVmdCA9ICUwNGRcbiIsCisJCQkgICAgICAgYmVhY29uX2lkeCwKKwkJCSAgICAgICBuZXdfYmVhY29uLT5iZWFjb25fYnVmX3NpemUsCisJCQkgICAgICAgKGludCkoYWRhcHRlci0+YmNuX2J1Zl9lbmQgLSBhZGFwdGVyLT5iY25fYnVmKSwKKwkJCSAgICAgICAoaW50KShzaXplb2YoYWRhcHRlci0+YmNuX2J1ZikgLQorCQkJCShhZGFwdGVyLT5iY25fYnVmX2VuZCAtCisJCQkJIGFkYXB0ZXItPmJjbl9idWYpKSk7CisJCX0gZWxzZSB7CisJCQkvKiBObyBzcGFjZSBmb3IgbmV3IGJlYWNvbiAqLworCQkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBBcHBDb250cm9sOiBubyBzcGFjZSBmb3IiCisJCQkJIiBiZWFjb24gKCVkKTogJXBNIHN6PSUwM2QsIGxlZnQ9JTAzZFxuIiwKKwkJCSAgICAgICBiZWFjb25faWR4LCBuZXdfYmVhY29uLT5tYWNfYWRkcmVzcywKKwkJCSAgICAgICBuZXdfYmVhY29uLT5iZWFjb25fYnVmX3NpemUsCisJCQkgICAgICAgKGludCkoc2l6ZW9mKGFkYXB0ZXItPmJjbl9idWYpIC0KKwkJCQkoYWRhcHRlci0+YmNuX2J1Zl9lbmQgLQorCQkJCSBhZGFwdGVyLT5iY25fYnVmKSkpOworCisJCQkvKiBTdG9yYWdlIGZhaWx1cmU7IGNsZWFyIHN0b3JhZ2UgcmVjb3JkcyBmb3IgdGhpcworCQkJICAgYmNuICovCisJCQluZXdfYmVhY29uLT5iZWFjb25fYnVmID0gTlVMTDsKKwkJCW5ld19iZWFjb24tPmJlYWNvbl9idWZfc2l6ZSA9IDA7CisJCQluZXdfYmVhY29uLT5iZWFjb25fYnVmX3NpemVfbWF4ID0gMDsKKwkJCW5ld19iZWFjb24tPmJjbl93cGFfaWUgPSBOVUxMOworCQkJbmV3X2JlYWNvbi0+d3BhX29mZnNldCA9IDA7CisJCQluZXdfYmVhY29uLT5iY25fcnNuX2llID0gTlVMTDsKKwkJCW5ld19iZWFjb24tPnJzbl9vZmZzZXQgPSAwOworCQkJbmV3X2JlYWNvbi0+YmNuX3dhcGlfaWUgPSBOVUxMOworCQkJbmV3X2JlYWNvbi0+d2FwaV9vZmZzZXQgPSAwOworCQkJbmV3X2JlYWNvbi0+YmNuX2h0X2NhcCA9IE5VTEw7CisJCQluZXdfYmVhY29uLT5odF9jYXBfb2Zmc2V0ID0gMDsKKwkJCW5ld19iZWFjb24tPmJjbl9odF9pbmZvID0gTlVMTDsKKwkJCW5ld19iZWFjb24tPmh0X2luZm9fb2Zmc2V0ID0gMDsKKwkJCW5ld19iZWFjb24tPmJjbl9ic3NfY29fMjA0MCA9IE5VTEw7CisJCQluZXdfYmVhY29uLT5ic3NfY29fMjA0MF9vZmZzZXQgPSAwOworCQkJbmV3X2JlYWNvbi0+YmNuX2V4dF9jYXAgPSBOVUxMOworCQkJbmV3X2JlYWNvbi0+ZXh0X2NhcF9vZmZzZXQgPSAwOworCQkJbmV3X2JlYWNvbi0+YmNuX29ic3Nfc2NhbiA9IE5VTEw7CisJCQluZXdfYmVhY29uLT5vdmVybGFwX2Jzc19vZmZzZXQgPSAwOworCQl9CisJfQorfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZXN0b3JlcyBhIGJlYWNvbiBidWZmZXIgb2YgdGhlIGN1cnJlbnQgQlNTIGRlc2NyaXB0b3IuCisgKi8KK3N0YXRpYyB2b2lkIG13aWZpZXhfcmVzdG9yZV9jdXJyX2JjbihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KQoreworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmN1cnJfYnNzID0KKwkJJnByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHByaXYtPmN1cnJfYmNuX2J1ZiAmJgorCSAgICAoKGFkYXB0ZXItPmJjbl9idWZfZW5kICsgcHJpdi0+Y3Vycl9iY25fc2l6ZSkgPAorCSAgICAgKGFkYXB0ZXItPmJjbl9idWYgKyBzaXplb2YoYWRhcHRlci0+YmNuX2J1ZikpKSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+Y3Vycl9iY25fYnVmX2xvY2ssIGZsYWdzKTsKKworCQkvKiByZXN0b3JlIHRoZSBjdXJyZW50IGJlYWNvbiBidWZmZXIgKi8KKwkJbWVtY3B5KGFkYXB0ZXItPmJjbl9idWZfZW5kLCBwcml2LT5jdXJyX2Jjbl9idWYsCisJCSAgICAgICBwcml2LT5jdXJyX2Jjbl9zaXplKTsKKwkJY3Vycl9ic3MtPmJlYWNvbl9idWYgPSBhZGFwdGVyLT5iY25fYnVmX2VuZDsKKwkJY3Vycl9ic3MtPmJlYWNvbl9idWZfc2l6ZSA9IHByaXYtPmN1cnJfYmNuX3NpemU7CisJCWFkYXB0ZXItPmJjbl9idWZfZW5kICs9IHByaXYtPmN1cnJfYmNuX3NpemU7CisKKwkJLyogYWRqdXN0IHRoZSBwb2ludGVycyBpbiB0aGUgY3VycmVudCBCU1MgZGVzY3JpcHRvciAqLworCQlpZiAoY3Vycl9ic3MtPmJjbl93cGFfaWUpCisJCQljdXJyX2Jzcy0+YmNuX3dwYV9pZSA9CisJCQkJKHN0cnVjdCBpZWVlX3R5cGVzX3ZlbmRvcl9zcGVjaWZpYyAqKQorCQkJCShjdXJyX2Jzcy0+YmVhY29uX2J1ZiArCisJCQkJIGN1cnJfYnNzLT53cGFfb2Zmc2V0KTsKKworCQlpZiAoY3Vycl9ic3MtPmJjbl9yc25faWUpCisJCQljdXJyX2Jzcy0+YmNuX3Jzbl9pZSA9IChzdHJ1Y3QgaWVlZV90eXBlc19nZW5lcmljICopCisJCQkJKGN1cnJfYnNzLT5iZWFjb25fYnVmICsKKwkJCQkgY3Vycl9ic3MtPnJzbl9vZmZzZXQpOworCisJCWlmIChjdXJyX2Jzcy0+YmNuX2h0X2NhcCkKKwkJCWN1cnJfYnNzLT5iY25faHRfY2FwID0gKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwICopCisJCQkJKGN1cnJfYnNzLT5iZWFjb25fYnVmICsKKwkJCQkgY3Vycl9ic3MtPmh0X2NhcF9vZmZzZXQpOworCisJCWlmIChjdXJyX2Jzcy0+YmNuX2h0X2luZm8pCisJCQljdXJyX2Jzcy0+YmNuX2h0X2luZm8gPSAoc3RydWN0IGllZWU4MDIxMV9odF9pbmZvICopCisJCQkJKGN1cnJfYnNzLT5iZWFjb25fYnVmICsKKwkJCQkgY3Vycl9ic3MtPmh0X2luZm9fb2Zmc2V0KTsKKworCQlpZiAoY3Vycl9ic3MtPmJjbl9ic3NfY29fMjA0MCkKKwkJCWN1cnJfYnNzLT5iY25fYnNzX2NvXzIwNDAgPQorCQkJCSh1OCAqKSAoY3Vycl9ic3MtPmJlYWNvbl9idWYgKworCQkJCSBjdXJyX2Jzcy0+YnNzX2NvXzIwNDBfb2Zmc2V0KTsKKworCQlpZiAoY3Vycl9ic3MtPmJjbl9leHRfY2FwKQorCQkJY3Vycl9ic3MtPmJjbl9leHRfY2FwID0gKHU4ICopIChjdXJyX2Jzcy0+YmVhY29uX2J1ZiArCisJCQkJIGN1cnJfYnNzLT5leHRfY2FwX29mZnNldCk7CisKKwkJaWYgKGN1cnJfYnNzLT5iY25fb2Jzc19zY2FuKQorCQkJY3Vycl9ic3MtPmJjbl9vYnNzX3NjYW4gPQorCQkJCShzdHJ1Y3QgaWVlZV90eXBlc19vYnNzX3NjYW5fcGFyYW0gKikKKwkJCQkoY3Vycl9ic3MtPmJlYWNvbl9idWYgKworCQkJCSBjdXJyX2Jzcy0+b3ZlcmxhcF9ic3Nfb2Zmc2V0KTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5jdXJyX2Jjbl9idWZfbG9jaywgZmxhZ3MpOworCisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogY3VycmVudCBiZWFjb24gcmVzdG9yZWQgJWRcbiIsCisJCSAgICAgICBwcml2LT5jdXJyX2Jjbl9zaXplKTsKKwl9IGVsc2UgeworCQlkZXZfd2FybihhZGFwdGVyLT5kZXYsCisJCQkiY3Vycl9iY25fYnVmIG5vdCBzYXZlZCBvciBiY25fYnVmIGhhcyBubyBzcGFjZVxuIik7CisJfQorfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBwb3N0IHByb2Nlc3NlcyB0aGUgc2NhbiB0YWJsZSBhZnRlciBhIG5ldyBzY2FuIGNvbW1hbmQgaGFzCisgKiBjb21wbGV0ZWQuCisgKgorICogSXQgaW5zcGVjdHMgZWFjaCBlbnRyeSBvZiB0aGUgc2NhbiB0YWJsZSBhbmQgdHJpZXMgdG8gZmluZCBhbiBlbnRyeSB0aGF0CisgKiBtYXRjaGVzIHdpdGggb3VyIGN1cnJlbnQgYXNzb2NpYXRlZC9qb2luZWQgbmV0d29yayBmcm9tIHRoZSBzY2FuLiBJZgorICogb25lIGlzIGZvdW5kLCB0aGUgc3RvcmVkIGNvcHkgb2YgdGhlIEJTUyBkZXNjcmlwdG9yIG9mIG91ciBjdXJyZW50IG5ldHdvcmsKKyAqIGlzIHVwZGF0ZWQuCisgKgorICogSXQgYWxzbyBkZWJ1ZyBkdW1wcyB0aGUgY3VycmVudCBzY2FuIHRhYmxlIGNvbnRlbnRzIGFmdGVyIHByb2Nlc3NpbmcgaXMgb3Zlci4KKyAqLworc3RhdGljIHZvaWQKK213aWZpZXhfcHJvY2Vzc19zY2FuX3Jlc3VsdHMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdikKK3sKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwlzMzIgajsKKwl1MzIgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHByaXYtPm1lZGlhX2Nvbm5lY3RlZCkgeworCisJCWogPSBtd2lmaWV4X2ZpbmRfc3NpZF9pbl9saXN0KHByaXYsICZwcml2LT5jdXJyX2Jzc19wYXJhbXMuCisJCQkJCSAgICAgIGJzc19kZXNjcmlwdG9yLnNzaWQsCisJCQkJCSAgICAgIHByaXYtPmN1cnJfYnNzX3BhcmFtcy4KKwkJCQkJICAgICAgYnNzX2Rlc2NyaXB0b3IubWFjX2FkZHJlc3MsCisJCQkJCSAgICAgIHByaXYtPmJzc19tb2RlKTsKKworCQlpZiAoaiA+PSAwKSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+Y3Vycl9iY25fYnVmX2xvY2ssIGZsYWdzKTsKKwkJCXByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5iY25fd3BhX2llID0gTlVMTDsKKwkJCXByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci53cGFfb2Zmc2V0ID0gMDsKKwkJCXByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5iY25fcnNuX2llID0gTlVMTDsKKwkJCXByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5yc25fb2Zmc2V0ID0gMDsKKwkJCXByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5iY25fd2FwaV9pZSA9IE5VTEw7CisJCQlwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3Iud2FwaV9vZmZzZXQgPSAwOworCQkJcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLmJjbl9odF9jYXAgPSBOVUxMOworCQkJcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLmh0X2NhcF9vZmZzZXQgPQorCQkJCTA7CisJCQlwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IuYmNuX2h0X2luZm8gPSBOVUxMOworCQkJcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLmh0X2luZm9fb2Zmc2V0ID0KKwkJCQkwOworCQkJcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLmJjbl9ic3NfY29fMjA0MCA9CisJCQkJTlVMTDsKKwkJCXByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci4KKwkJCQlic3NfY29fMjA0MF9vZmZzZXQgPSAwOworCQkJcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLmJjbl9leHRfY2FwID0gTlVMTDsKKwkJCXByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5leHRfY2FwX29mZnNldCA9IDA7CisJCQlwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IuCisJCQkJYmNuX29ic3Nfc2NhbiA9IE5VTEw7CisJCQlwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IuCisJCQkJb3ZlcmxhcF9ic3Nfb2Zmc2V0ID0gMDsKKwkJCXByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5iZWFjb25fYnVmID0gTlVMTDsKKwkJCXByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5iZWFjb25fYnVmX3NpemUgPQorCQkJCTA7CisJCQlwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IuCisJCQkJYmVhY29uX2J1Zl9zaXplX21heCA9IDA7CisKKwkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogRm91bmQgY3VycmVudCBzc2lkL2Jzc2lkIgorCQkJCSIgaW4gbGlzdCBAIGluZGV4ICMlZFxuIiwgaik7CisJCQkvKiBNYWtlIGEgY29weSBvZiBjdXJyZW50IEJTU0lEIGRlc2NyaXB0b3IgKi8KKwkJCW1lbWNweSgmcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLAorCQkJICAgICAgICZhZGFwdGVyLT5zY2FuX3RhYmxlW2pdLAorCQkJICAgICAgIHNpemVvZihwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IpKTsKKworCQkJbXdpZmlleF9zYXZlX2N1cnJfYmNuKHByaXYpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+Y3Vycl9iY25fYnVmX2xvY2ssIGZsYWdzKTsKKworCQl9IGVsc2UgeworCQkJbXdpZmlleF9yZXN0b3JlX2N1cnJfYmNuKHByaXYpOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9pbl9zY2FuX3RhYmxlOyBpKyspCisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogc2NhbjooJTAyZCkgJXBNICIKKwkJICAgICAgICJSU1NJWyUwM2RdLCBTU0lEWyVzXVxuIiwKKwkJICAgICAgIGksIGFkYXB0ZXItPnNjYW5fdGFibGVbaV0ubWFjX2FkZHJlc3MsCisJCSAgICAgICAoczMyKSBhZGFwdGVyLT5zY2FuX3RhYmxlW2ldLnJzc2ksCisJCSAgICAgICBhZGFwdGVyLT5zY2FuX3RhYmxlW2ldLnNzaWQuc3NpZCk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIHJhZGlvIHR5cGUgc2NhbiBwYXJhbWV0ZXIgdG8gYSBiYW5kIGNvbmZpZ3VyYXRpb24KKyAqIHRvIGJlIHVzZWQgaW4gam9pbiBjb21tYW5kLgorICovCitzdGF0aWMgdTgKK213aWZpZXhfcmFkaW9fdHlwZV90b19iYW5kKHU4IHJhZGlvX3R5cGUpCit7CisJc3dpdGNoIChyYWRpb190eXBlKSB7CisJY2FzZSBIb3N0Q21kX1NDQU5fUkFESU9fVFlQRV9BOgorCQlyZXR1cm4gQkFORF9BOworCWNhc2UgSG9zdENtZF9TQ0FOX1JBRElPX1RZUEVfQkc6CisJZGVmYXVsdDoKKwkJcmV0dXJuIEJBTkRfRzsKKwl9Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGRlbGV0ZXMgYSBzcGVjaWZpYyBpbmRleGVkIGVudHJ5IGZyb20gdGhlIHNjYW4gdGFibGUuCisgKgorICogVGhpcyBhbHNvIGNvbXBhY3RzIHRoZSByZW1haW5pbmcgZW50cmllcyBhbmQgYWRqdXN0cyBhbnkgYnVmZmVyaW5nCisgKiBvZiBiZWFjb24vcHJvYmUgcmVzcG9uc2UgZGF0YSBpZiBuZWVkZWQuCisgKi8KK3N0YXRpYyB2b2lkCittd2lmaWV4X3NjYW5fZGVsZXRlX3RhYmxlX2VudHJ5KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHMzMiB0YWJsZV9pZHgpCit7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJdTMyIGRlbF9pZHg7CisJdTMyIGJlYWNvbl9idWZfYWRqOworCXU4ICpiZWFjb25fYnVmOworCisJLyoKKwkgKiBTaGlmdCB0aGUgc2F2ZWQgYmVhY29uIGJ1ZmZlciBkYXRhIGZvciB0aGUgc2NhbiB0YWJsZSBiYWNrIG92ZXIgdGhlCisJICogICBlbnRyeSBiZWluZyByZW1vdmVkLiAgVXBkYXRlIHRoZSBlbmQgb2YgYnVmZmVyIHBvaW50ZXIuICBTYXZlIHRoZQorCSAqICAgZGVsZXRlZCBidWZmZXIgYWxsb2NhdGlvbiBzaXplIGZvciBwb2ludGVyIGFkanVzdG1lbnRzIGZvciBlbnRyaWVzCisJICogICBjb21wYWN0ZWQgYWZ0ZXIgdGhlIGRlbGV0ZWQgaW5kZXguCisJICovCisJYmVhY29uX2J1Zl9hZGogPSBhZGFwdGVyLT5zY2FuX3RhYmxlW3RhYmxlX2lkeF0uYmVhY29uX2J1Zl9zaXplX21heDsKKworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogU2NhbjogRGVsZXRlIEVudHJ5ICVkLCBiZWFjb24gYnVmZmVyICIKKwkJInJlbW92YWwgPSAlZCBieXRlc1xuIiwgdGFibGVfaWR4LCBiZWFjb25fYnVmX2Fkaik7CisKKwkvKiBDaGVjayBpZiB0aGUgdGFibGUgZW50cnkgaGFkIHN0b3JhZ2UgYWxsb2NhdGVkIGZvciBpdHMgYmVhY29uICovCisJaWYgKGJlYWNvbl9idWZfYWRqKSB7CisJCWJlYWNvbl9idWYgPSBhZGFwdGVyLT5zY2FuX3RhYmxlW3RhYmxlX2lkeF0uYmVhY29uX2J1ZjsKKworCQkvKgorCQkgKiBSZW1vdmUgdGhlIGVudHJ5J3MgYnVmZmVyIHNwYWNlLCBkZWNyZW1lbnQgdGhlIHRhYmxlIGVuZAorCQkgKiBwb2ludGVyIGJ5IHRoZSBhbW91bnQgd2UgYXJlIHJlbW92aW5nCisJCSAqLworCQlhZGFwdGVyLT5iY25fYnVmX2VuZCAtPSBiZWFjb25fYnVmX2FkajsKKworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IHNjYW46IGRlbGV0ZSBlbnRyeSAlZCwiCisJCQkiIGNvbXBhY3QgZGF0YTogJXAgPC0gJXAgKHN6ID0gJWQpXG4iLAorCQkgICAgICAgdGFibGVfaWR4LCBiZWFjb25fYnVmLAorCQkgICAgICAgYmVhY29uX2J1ZiArIGJlYWNvbl9idWZfYWRqLAorCQkgICAgICAgKGludCkoYWRhcHRlci0+YmNuX2J1Zl9lbmQgLSBiZWFjb25fYnVmKSk7CisKKwkJLyoKKwkJICogQ29tcGFjdCBkYXRhIHN0b3JhZ2UuICBDb3B5IGFsbCBkYXRhIGFmdGVyIHRoZSBkZWxldGVkCisJCSAqIGVudHJ5J3MgZW5kIGFkZHJlc3MgKGJlYWNvbl9idWYgKyBiZWFjb25fYnVmX2FkaikgYmFjaworCQkgKiB0byB0aGUgb3JpZ2luYWwgc3RhcnQgYWRkcmVzcyAoYmVhY29uX2J1ZikuCisJCSAqCisJCSAqIFNjYW4gdGFibGUgZW50cmllcyBhZmZlY3RlZCBieSB0aGUgbW92ZSB3aWxsIGhhdmUgdGhlaXIKKwkJICogZW50cnkgcG9pbnRlciBhZGp1c3RlZCBiZWxvdy4KKwkJICoKKwkJICogVXNlIG1lbW1vdmUgc2luY2UgdGhlIGRlc3Qvc3JjIG1lbW9yeSByZWdpb25zIG92ZXJsYXAuCisJCSAqLworCQltZW1tb3ZlKGJlYWNvbl9idWYsIGJlYWNvbl9idWYgKyBiZWFjb25fYnVmX2FkaiwKKwkJCWFkYXB0ZXItPmJjbl9idWZfZW5kIC0gYmVhY29uX2J1Zik7CisJfQorCisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsCisJCSJpbmZvOiBTY2FuOiBEZWxldGUgRW50cnkgJWQsIG51bV9pbl9zY2FuX3RhYmxlID0gJWRcbiIsCisJICAgICAgIHRhYmxlX2lkeCwgYWRhcHRlci0+bnVtX2luX3NjYW5fdGFibGUpOworCisJLyogU2hpZnQgYWxsIG9mIHRoZSBlbnRyaWVzIGFmdGVyIHRoZSB0YWJsZV9pZHggYmFjayBieSBvbmUsIGNvbXBhY3RpbmcKKwkgICB0aGUgdGFibGUgYW5kIHJlbW92aW5nIHRoZSByZXF1ZXN0ZWQgZW50cnkgKi8KKwlmb3IgKGRlbF9pZHggPSB0YWJsZV9pZHg7IChkZWxfaWR4ICsgMSkgPCBhZGFwdGVyLT5udW1faW5fc2Nhbl90YWJsZTsKKwkgICAgIGRlbF9pZHgrKykgeworCQkvKiBDb3B5IHRoZSBuZXh0IGVudHJ5IG92ZXIgdGhpcyBvbmUgKi8KKwkJbWVtY3B5KGFkYXB0ZXItPnNjYW5fdGFibGUgKyBkZWxfaWR4LAorCQkgICAgICAgYWRhcHRlci0+c2Nhbl90YWJsZSArIGRlbF9pZHggKyAxLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IpKTsKKworCQkvKgorCQkgKiBBZGp1c3QgdGhpcyBlbnRyeSdzIHBvaW50ZXIgdG8gaXRzIGJlYWNvbiBidWZmZXIgYmFzZWQgb24KKwkJICogdGhlIHJlbW92ZWQvY29tcGFjdGVkIGVudHJ5IGZyb20gdGhlIGRlbGV0ZWQgaW5kZXguICBEb24ndAorCQkgKiBkZWNyZW1lbnQgaWYgdGhlIGJ1ZmZlciBwb2ludGVyIGlzIE5VTEwgKG5vIGRhdGEgc3RvcmVkIGZvcgorCQkgKiB0aGlzIGVudHJ5KS4KKwkJICovCisJCWlmIChhZGFwdGVyLT5zY2FuX3RhYmxlW2RlbF9pZHhdLmJlYWNvbl9idWYpIHsKKwkJCWFkYXB0ZXItPnNjYW5fdGFibGVbZGVsX2lkeF0uYmVhY29uX2J1ZiAtPQorCQkJCWJlYWNvbl9idWZfYWRqOworCQkJaWYgKGFkYXB0ZXItPnNjYW5fdGFibGVbZGVsX2lkeF0uYmNuX3dwYV9pZSkKKwkJCQlhZGFwdGVyLT5zY2FuX3RhYmxlW2RlbF9pZHhdLmJjbl93cGFfaWUgPQorCQkJCQkoc3RydWN0IGllZWVfdHlwZXNfdmVuZG9yX3NwZWNpZmljICopCisJCQkJCShhZGFwdGVyLT5zY2FuX3RhYmxlW2RlbF9pZHhdLgorCQkJCQkgYmVhY29uX2J1ZiArCisJCQkJCSBhZGFwdGVyLT5zY2FuX3RhYmxlW2RlbF9pZHhdLgorCQkJCQkgd3BhX29mZnNldCk7CisJCQlpZiAoYWRhcHRlci0+c2Nhbl90YWJsZVtkZWxfaWR4XS5iY25fcnNuX2llKQorCQkJCWFkYXB0ZXItPnNjYW5fdGFibGVbZGVsX2lkeF0uYmNuX3Jzbl9pZSA9CisJCQkJCShzdHJ1Y3QgaWVlZV90eXBlc19nZW5lcmljICopCisJCQkJCShhZGFwdGVyLT5zY2FuX3RhYmxlW2RlbF9pZHhdLgorCQkJCQkgYmVhY29uX2J1ZiArCisJCQkJCSBhZGFwdGVyLT5zY2FuX3RhYmxlW2RlbF9pZHhdLgorCQkJCQkgcnNuX29mZnNldCk7CisJCQlpZiAoYWRhcHRlci0+c2Nhbl90YWJsZVtkZWxfaWR4XS5iY25fd2FwaV9pZSkKKwkJCQlhZGFwdGVyLT5zY2FuX3RhYmxlW2RlbF9pZHhdLmJjbl93YXBpX2llID0KKwkJCQkJKHN0cnVjdCBpZWVlX3R5cGVzX2dlbmVyaWMgKikKKwkJCQkJKGFkYXB0ZXItPnNjYW5fdGFibGVbZGVsX2lkeF0uYmVhY29uX2J1ZgorCQkJCQkgKyBhZGFwdGVyLT5zY2FuX3RhYmxlW2RlbF9pZHhdLgorCQkJCQkgd2FwaV9vZmZzZXQpOworCQkJaWYgKGFkYXB0ZXItPnNjYW5fdGFibGVbZGVsX2lkeF0uYmNuX2h0X2NhcCkKKwkJCQlhZGFwdGVyLT5zY2FuX3RhYmxlW2RlbF9pZHhdLmJjbl9odF9jYXAgPQorCQkJCQkoc3RydWN0IGllZWU4MDIxMV9odF9jYXAgKikKKwkJCQkJKGFkYXB0ZXItPnNjYW5fdGFibGVbZGVsX2lkeF0uYmVhY29uX2J1ZgorCQkJCQkgKyBhZGFwdGVyLT5zY2FuX3RhYmxlW2RlbF9pZHhdLgorCQkJCQkgIGh0X2NhcF9vZmZzZXQpOworCisJCQlpZiAoYWRhcHRlci0+c2Nhbl90YWJsZVtkZWxfaWR4XS5iY25faHRfaW5mbykKKwkJCQlhZGFwdGVyLT5zY2FuX3RhYmxlW2RlbF9pZHhdLmJjbl9odF9pbmZvID0KKwkJCQkJKHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyAqKQorCQkJCQkoYWRhcHRlci0+c2Nhbl90YWJsZVtkZWxfaWR4XS5iZWFjb25fYnVmCisJCQkJCSArIGFkYXB0ZXItPnNjYW5fdGFibGVbZGVsX2lkeF0uCisJCQkJCSAgaHRfaW5mb19vZmZzZXQpOworCQkJaWYgKGFkYXB0ZXItPnNjYW5fdGFibGVbZGVsX2lkeF0uYmNuX2Jzc19jb18yMDQwKQorCQkJCWFkYXB0ZXItPnNjYW5fdGFibGVbZGVsX2lkeF0uYmNuX2Jzc19jb18yMDQwID0KKwkJCQkJKHU4ICopCisJCQkJCShhZGFwdGVyLT5zY2FuX3RhYmxlW2RlbF9pZHhdLmJlYWNvbl9idWYKKwkJCQkJICsgYWRhcHRlci0+c2Nhbl90YWJsZVtkZWxfaWR4XS4KKwkJCQkJICAgYnNzX2NvXzIwNDBfb2Zmc2V0KTsKKwkJCWlmIChhZGFwdGVyLT5zY2FuX3RhYmxlW2RlbF9pZHhdLmJjbl9leHRfY2FwKQorCQkJCWFkYXB0ZXItPnNjYW5fdGFibGVbZGVsX2lkeF0uYmNuX2V4dF9jYXAgPQorCQkJCQkodTggKikKKwkJCQkJKGFkYXB0ZXItPnNjYW5fdGFibGVbZGVsX2lkeF0uYmVhY29uX2J1ZgorCQkJCQkgKyBhZGFwdGVyLT5zY2FuX3RhYmxlW2RlbF9pZHhdLgorCQkJCQkgICAgIGV4dF9jYXBfb2Zmc2V0KTsKKwkJCWlmIChhZGFwdGVyLT5zY2FuX3RhYmxlW2RlbF9pZHhdLmJjbl9vYnNzX3NjYW4pCisJCQkJYWRhcHRlci0+c2Nhbl90YWJsZVtkZWxfaWR4XS4KKwkJCQkJYmNuX29ic3Nfc2NhbiA9CisJCQkJCShzdHJ1Y3QgaWVlZV90eXBlc19vYnNzX3NjYW5fcGFyYW0gKikKKwkJCQkJKGFkYXB0ZXItPnNjYW5fdGFibGVbZGVsX2lkeF0uYmVhY29uX2J1ZgorCQkJCQkgKyBhZGFwdGVyLT5zY2FuX3RhYmxlW2RlbF9pZHhdLgorCQkJCQkgICAgIG92ZXJsYXBfYnNzX29mZnNldCk7CisJCX0KKwl9CisKKwkvKiBUaGUgbGFzdCBlbnRyeSBpcyBpbnZhbGlkIG5vdyB0aGF0IGl0IGhhcyBiZWVuIGRlbGV0ZWQgb3IgbW92ZWQKKwkgICBiYWNrICovCisJbWVtc2V0KGFkYXB0ZXItPnNjYW5fdGFibGUgKyBhZGFwdGVyLT5udW1faW5fc2Nhbl90YWJsZSAtIDEsCisJICAgICAgIDB4MDAsIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yKSk7CisKKwlhZGFwdGVyLT5udW1faW5fc2Nhbl90YWJsZS0tOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBkZWxldGVzIGFsbCBvY2N1cnJlbmNlcyBvZiBhIGdpdmVuIFNTSUQgZnJvbSB0aGUgc2NhbiB0YWJsZS4KKyAqCisgKiBUaGlzIGl0ZXJhdGVzIHRocm91Z2ggdGhlIHNjYW4gdGFibGUgYW5kIGRlbGV0ZXMgYWxsIGVudHJpZXMgdGhhdCBtYXRjaAorICogdGhlIGdpdmVuIFNTSUQuIEl0IGFsc28gY29tcGFjdHMgdGhlIHJlbWFpbmluZyBzY2FuIHRhYmxlIGVudHJpZXMuCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfc2Nhbl9kZWxldGVfc3NpZF90YWJsZV9lbnRyeShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCSAgICAgc3RydWN0IG13aWZpZXhfODAyXzExX3NzaWQgKmRlbF9zc2lkKQoreworCXMzMiB0YWJsZV9pZHggPSAtMTsKKworCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiaW5mbzogc2NhbjogZGVsZXRlIHNzaWQgZW50cnk6ICUtMzJzXG4iLAorCQkJZGVsX3NzaWQtPnNzaWQpOworCisJLyogSWYgdGhlIHJlcXVlc3RlZCBTU0lEIGlzIGZvdW5kIGluIHRoZSB0YWJsZSwgZGVsZXRlIGl0LiAgVGhlbiBrZWVwCisJICAgc2VhcmNoaW5nIHRoZSB0YWJsZSBmb3IgbXVsdGlwbGUgZW50aXJlcyBmb3IgdGhlIFNTSUQgdW50aWwgbm8KKwkgICBtb3JlIGFyZSBmb3VuZCAqLworCXdoaWxlICgodGFibGVfaWR4ID0gbXdpZmlleF9maW5kX3NzaWRfaW5fbGlzdChwcml2LCBkZWxfc3NpZCwgTlVMTCwKKwkJCQkJTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQpKSA+PSAwKSB7CisJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJImluZm86IFNjYW46IERlbGV0ZSBTU0lEIEVudHJ5OiBGb3VuZCBJZHggPSAlZFxuIiwKKwkJICAgICAgIHRhYmxlX2lkeCk7CisJCW13aWZpZXhfc2Nhbl9kZWxldGVfdGFibGVfZW50cnkocHJpdiwgdGFibGVfaWR4KTsKKwl9CisKKwlyZXR1cm4gdGFibGVfaWR4ID09IC0xID8gLTEgOiAwOworfQorCisvKgorICogVGhpcyBpcyBhbiBpbnRlcm5hbCBmdW5jdGlvbiB1c2VkIHRvIHN0YXJ0IGEgc2NhbiBiYXNlZCBvbiBhbiBpbnB1dAorICogY29uZmlndXJhdGlvbi4KKyAqCisgKiBUaGlzIHVzZXMgdGhlIGlucHV0IHVzZXIgc2NhbiBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIHdoZW4gcHJvdmlkZWQgaW4KKyAqIG9yZGVyIHRvIHNlbmQgdGhlIGFwcHJvcHJpYXRlIHNjYW4gY29tbWFuZHMgdG8gZmlybXdhcmUgdG8gcG9wdWxhdGUgb3IKKyAqIHVwZGF0ZSB0aGUgaW50ZXJuYWwgZHJpdmVyIHNjYW4gdGFibGUuCisgKi8KK2ludCBtd2lmaWV4X3NjYW5fbmV0d29ya3Moc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgY29uc3Qgc3RydWN0IG13aWZpZXhfdXNlcl9zY2FuX2NmZyAqdXNlcl9zY2FuX2luKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCBjbWRfY3RybF9ub2RlICpjbWRfbm9kZTsKKwl1bmlvbiBtd2lmaWV4X3NjYW5fY21kX2NvbmZpZ190bHYgKnNjYW5fY2ZnX291dDsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19jaGFuX2xpc3RfcGFyYW1fc2V0ICpjaGFuX2xpc3Rfb3V0OworCXUzMiBidWZfc2l6ZTsKKwlzdHJ1Y3QgbXdpZmlleF9jaGFuX3NjYW5fcGFyYW1fc2V0ICpzY2FuX2NoYW5fbGlzdDsKKwl1OCBrZWVwX3ByZXZpb3VzX3NjYW47CisJdTggZmlsdGVyZWRfc2NhbjsKKwl1OCBzY2FuX2N1cnJlbnRfY2hhbl9vbmx5OworCXU4IG1heF9jaGFuX3Blcl9zY2FuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoYWRhcHRlci0+c2Nhbl9wcm9jZXNzaW5nKSB7CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiY21kOiBTY2FuIGFscmVhZHkgaW4gcHJvY2Vzcy4uLlxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPm13aWZpZXhfY21kX2xvY2ssIGZsYWdzKTsKKwlhZGFwdGVyLT5zY2FuX3Byb2Nlc3NpbmcgPSB0cnVlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPm13aWZpZXhfY21kX2xvY2ssIGZsYWdzKTsKKworCWlmIChwcml2LT5zY2FuX2Jsb2NrKSB7CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LAorCQkJImNtZDogU2NhbiBpcyBibG9ja2VkIGR1cmluZyBhc3NvY2lhdGlvbi4uLlxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJc2Nhbl9jZmdfb3V0ID0ga3phbGxvYyhzaXplb2YodW5pb24gbXdpZmlleF9zY2FuX2NtZF9jb25maWdfdGx2KSwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFzY2FuX2NmZ19vdXQpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJmYWlsZWQgdG8gYWxsb2Mgc2Nhbl9jZmdfb3V0XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJYnVmX3NpemUgPSBzaXplb2Yoc3RydWN0IG13aWZpZXhfY2hhbl9zY2FuX3BhcmFtX3NldCkgKgorCQkJTVdJRklFWF9VU0VSX1NDQU5fQ0hBTl9NQVg7CisJc2Nhbl9jaGFuX2xpc3QgPSBremFsbG9jKGJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNjYW5fY2hhbl9saXN0KSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jIHNjYW5fY2hhbl9saXN0XG4iKTsKKwkJa2ZyZWUoc2Nhbl9jZmdfb3V0KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJa2VlcF9wcmV2aW91c19zY2FuID0gZmFsc2U7CisKKwltd2lmaWV4X3NjYW5fc2V0dXBfc2Nhbl9jb25maWcocHJpdiwgdXNlcl9zY2FuX2luLAorCQkJCSAgICAgICAmc2Nhbl9jZmdfb3V0LT5jb25maWcsICZjaGFuX2xpc3Rfb3V0LAorCQkJCSAgICAgICBzY2FuX2NoYW5fbGlzdCwgJm1heF9jaGFuX3Blcl9zY2FuLAorCQkJCSAgICAgICAmZmlsdGVyZWRfc2NhbiwgJnNjYW5fY3VycmVudF9jaGFuX29ubHkpOworCisJaWYgKHVzZXJfc2Nhbl9pbikKKwkJa2VlcF9wcmV2aW91c19zY2FuID0gdXNlcl9zY2FuX2luLT5rZWVwX3ByZXZpb3VzX3NjYW47CisKKworCWlmICgha2VlcF9wcmV2aW91c19zY2FuKSB7CisJCW1lbXNldChhZGFwdGVyLT5zY2FuX3RhYmxlLCAweDAwLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IpICogSVdfTUFYX0FQKTsKKwkJYWRhcHRlci0+bnVtX2luX3NjYW5fdGFibGUgPSAwOworCQlhZGFwdGVyLT5iY25fYnVmX2VuZCA9IGFkYXB0ZXItPmJjbl9idWY7CisJfQorCisJcmV0ID0gbXdpZmlleF9zY2FuX2NoYW5uZWxfbGlzdChwcml2LCBtYXhfY2hhbl9wZXJfc2NhbiwgZmlsdGVyZWRfc2NhbiwKKwkJCQkJJnNjYW5fY2ZnX291dC0+Y29uZmlnLCBjaGFuX2xpc3Rfb3V0LAorCQkJCQlzY2FuX2NoYW5fbGlzdCk7CisKKwkvKiBHZXQgc2NhbiBjb21tYW5kIGZyb20gc2Nhbl9wZW5kaW5nX3EgYW5kIHB1dCB0byBjbWRfcGVuZGluZ19xICovCisJaWYgKCFyZXQpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnNjYW5fcGVuZGluZ19xX2xvY2ssIGZsYWdzKTsKKwkJaWYgKCFsaXN0X2VtcHR5KCZhZGFwdGVyLT5zY2FuX3BlbmRpbmdfcSkpIHsKKwkJCWNtZF9ub2RlID0gbGlzdF9maXJzdF9lbnRyeSgmYWRhcHRlci0+c2Nhbl9wZW5kaW5nX3EsCisJCQkJCQlzdHJ1Y3QgY21kX2N0cmxfbm9kZSwgbGlzdCk7CisJCQlsaXN0X2RlbCgmY21kX25vZGUtPmxpc3QpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+c2Nhbl9wZW5kaW5nX3FfbG9jaywKKwkJCQkJCQkJCWZsYWdzKTsKKwkJCW13aWZpZXhfaW5zZXJ0X2NtZF90b19wZW5kaW5nX3EoYWRhcHRlciwgY21kX25vZGUsCisJCQkJCQkJdHJ1ZSk7CisJCX0gZWxzZSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5zY2FuX3BlbmRpbmdfcV9sb2NrLAorCQkJCQkgICAgICAgZmxhZ3MpOworCQl9CisJfSBlbHNlIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPm13aWZpZXhfY21kX2xvY2ssIGZsYWdzKTsKKwkJYWRhcHRlci0+c2Nhbl9wcm9jZXNzaW5nID0gdHJ1ZTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+bXdpZmlleF9jbWRfbG9jaywgZmxhZ3MpOworCX0KKworCWtmcmVlKHNjYW5fY2ZnX291dCk7CisJa2ZyZWUoc2Nhbl9jaGFuX2xpc3QpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGEgc2NhbiBjb21tYW5kIHRvIGJlIHNlbnQgdG8gdGhlIGZpcm13YXJlLgorICoKKyAqIFRoaXMgdXNlcyB0aGUgc2NhbiBjb21tYW5kIGNvbmZpZ3VyYXRpb24gc2VudCB0byB0aGUgY29tbWFuZCBwcm9jZXNzaW5nCisgKiBtb2R1bGUgaW4gY29tbWFuZCBwcmVwYXJhdGlvbiBzdGFnZSB0byBjb25maWd1cmUgYSBzY2FuIGNvbW1hbmQgc3RydWN0dXJlCisgKiB0byBzZW5kIHRvIGZpcm13YXJlLgorICoKKyAqIFRoZSBmaXhlZCBmaWVsZHMgc3BlY2lmeWluZyB0aGUgQlNTIHR5cGUgYW5kIEJTU0lEIGZpbHRlcnMgYXMgd2VsbCBhcyBhCisgKiB2YXJpYWJsZSBudW1iZXIvbGVuZ3RoIG9mIFRMVnMgYXJlIHNlbnQgaW4gdGhlIGNvbW1hbmQgdG8gZmlybXdhcmUuCisgKgorICogUHJlcGFyYXRpb24gYWxzbyBpbmNsdWRlcyAtCisgKiAgICAgIC0gU2V0dGluZyBjb21tYW5kIElELCBhbmQgcHJvcGVyIHNpemUKKyAqICAgICAgLSBFbnN1cmluZyBjb3JyZWN0IGVuZGlhbi1uZXNzCisgKi8KK2ludCBtd2lmaWV4X2NtZF84MDJfMTFfc2NhbihzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLCB2b2lkICpkYXRhX2J1ZikKK3sKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX3NjYW4gKnNjYW5fY21kID0gJmNtZC0+cGFyYW1zLnNjYW47CisJc3RydWN0IG13aWZpZXhfc2Nhbl9jbWRfY29uZmlnICpzY2FuX2NmZzsKKworCXNjYW5fY2ZnID0gKHN0cnVjdCBtd2lmaWV4X3NjYW5fY21kX2NvbmZpZyAqKSBkYXRhX2J1ZjsKKworCS8qIFNldCBmaXhlZCBmaWVsZCB2YXJpYWJsZXMgaW4gc2NhbiBjb21tYW5kICovCisJc2Nhbl9jbWQtPmJzc19tb2RlID0gc2Nhbl9jZmctPmJzc19tb2RlOworCW1lbWNweShzY2FuX2NtZC0+YnNzaWQsIHNjYW5fY2ZnLT5zcGVjaWZpY19ic3NpZCwKKwkgICAgICAgc2l6ZW9mKHNjYW5fY21kLT5ic3NpZCkpOworCW1lbWNweShzY2FuX2NtZC0+dGx2X2J1ZmZlciwgc2Nhbl9jZmctPnRsdl9idWYsIHNjYW5fY2ZnLT50bHZfYnVmX2xlbik7CisKKwljbWQtPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihIb3N0Q21kX0NNRF84MDJfMTFfU0NBTik7CisKKwkvKiBTaXplIGlzIGVxdWFsIHRvIHRoZSBzaXplb2YoZml4ZWQgcG9ydGlvbnMpICsgdGhlIFRMViBsZW4gKyBoZWFkZXIgKi8KKwljbWQtPnNpemUgPSBjcHVfdG9fbGUxNigodTE2KSAoc2l6ZW9mKHNjYW5fY21kLT5ic3NfbW9kZSkKKwkJCQkJICArIHNpemVvZihzY2FuX2NtZC0+YnNzaWQpCisJCQkJCSAgKyBzY2FuX2NmZy0+dGx2X2J1Zl9sZW4gKyBTX0RTX0dFTikpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGNvbW1hbmQgcmVzcG9uc2Ugb2Ygc2Nhbi4KKyAqCisgKiBUaGUgcmVzcG9uc2UgYnVmZmVyIGZvciB0aGUgc2NhbiBjb21tYW5kIGhhcyB0aGUgZm9sbG93aW5nCisgKiBtZW1vcnkgbGF5b3V0OgorICoKKyAqICAgICAgLi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisgKiAgICAgIHwgIEhlYWRlciAoNCAqIHNpemVvZih0X3UxNikpOiAgU3RhbmRhcmQgY29tbWFuZCByZXNwb25zZSBoZHIgfAorICogICAgICAuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyAqICAgICAgfCAgQnVmU2l6ZSAodF91MTYpIDogc2l6ZW9mIHRoZSBCU1MgRGVzY3JpcHRpb24gZGF0YSAgICAgICAgICB8CisgKiAgICAgIC4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorICogICAgICB8ICBOdW1PZlNldCAodF91OCkgOiBOdW1iZXIgb2YgQlNTIERlc2NzIHJldHVybmVkICAgICAgICAgICAgIHwKKyAqICAgICAgLi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisgKiAgICAgIHwgIEJTU0Rlc2NyaXB0aW9uIGRhdGEgKHZhcmlhYmxlLCBzaXplIGdpdmVuIGluIEJ1ZlNpemUpICAgICAgfAorICogICAgICAuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyAqICAgICAgfCAgVExWIGRhdGEgKHZhcmlhYmxlLCBzaXplIGNhbGN1bGF0ZWQgdXNpbmcgSGVhZGVyLT5TaXplLCAgICB8CisgKiAgICAgIHwgICAgICAgICAgICBCdWZTaXplIGFuZCBzaXplb2YgdGhlIGZpeGVkIGZpZWxkcyBhYm92ZSkgICAgICAgfAorICogICAgICAuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyAqLworaW50IG13aWZpZXhfcmV0XzgwMl8xMV9zY2FuKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKnJlc3ApCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IGNtZF9jdHJsX25vZGUgKmNtZF9ub2RlOworCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfc2Nhbl9yc3AgKnNjYW5fcnNwOworCXN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19uZXdfZW50cnkgPSBOVUxMOworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2RhdGEgKnRsdl9kYXRhOworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3RzZl90aW1lc3RhbXAgKnRzZl90bHY7CisJdTggKmJzc19pbmZvOworCXUzMiBzY2FuX3Jlc3Bfc2l6ZTsKKwl1MzIgYnl0ZXNfbGVmdDsKKwl1MzIgbnVtX2luX3RhYmxlOworCXUzMiBic3NfaWR4OworCXUzMiBpZHg7CisJdTMyIHRsdl9idWZfc2l6ZTsKKwlsb25nIGxvbmcgdHNmX3ZhbDsKKwlzdHJ1Y3QgbXdpZmlleF9jaGFuX2ZyZXFfcG93ZXIgKmNmcDsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19jaGFuX2JhbmRfbGlzdF9wYXJhbV9zZXQgKmNoYW5fYmFuZF90bHY7CisJc3RydWN0IGNoYW5fYmFuZF9wYXJhbV9zZXQgKmNoYW5fYmFuZDsKKwl1OCBiYW5kOworCXU4IGlzX2Jnc2Nhbl9yZXNwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpc19iZ3NjYW5fcmVzcCA9IChsZTE2X3RvX2NwdShyZXNwLT5jb21tYW5kKQorCQk9PSBIb3N0Q21kX0NNRF84MDJfMTFfQkdfU0NBTl9RVUVSWSk7CisJaWYgKGlzX2Jnc2Nhbl9yZXNwKQorCQlzY2FuX3JzcCA9ICZyZXNwLT5wYXJhbXMuYmdfc2Nhbl9xdWVyeV9yZXNwLnNjYW5fcmVzcDsKKwllbHNlCisJCXNjYW5fcnNwID0gJnJlc3AtPnBhcmFtcy5zY2FuX3Jlc3A7CisKKworCWlmIChzY2FuX3JzcC0+bnVtYmVyX29mX3NldHMgPiBJV19NQVhfQVApIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJTQ0FOX1JFU1A6IHRvbyBtYW55IEFQIHJldHVybmVkICglZClcbiIsCisJCSAgICAgICBzY2FuX3JzcC0+bnVtYmVyX29mX3NldHMpOworCQlyZXQgPSAtMTsKKwkJZ290byBkb25lOworCX0KKworCWJ5dGVzX2xlZnQgPSBsZTE2X3RvX2NwdShzY2FuX3JzcC0+YnNzX2Rlc2NyaXB0X3NpemUpOworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogU0NBTl9SRVNQOiBic3NfZGVzY3JpcHRfc2l6ZSAlZFxuIiwKKwkJCQkJCWJ5dGVzX2xlZnQpOworCisJc2Nhbl9yZXNwX3NpemUgPSBsZTE2X3RvX2NwdShyZXNwLT5zaXplKTsKKworCWRldl9kYmcoYWRhcHRlci0+ZGV2LAorCQkiaW5mbzogU0NBTl9SRVNQOiByZXR1cm5lZCAlZCBBUHMgYmVmb3JlIHBhcnNpbmdcbiIsCisJICAgICAgIHNjYW5fcnNwLT5udW1iZXJfb2Zfc2V0cyk7CisKKwludW1faW5fdGFibGUgPSBhZGFwdGVyLT5udW1faW5fc2Nhbl90YWJsZTsKKwlic3NfaW5mbyA9IHNjYW5fcnNwLT5ic3NfZGVzY19hbmRfdGx2X2J1ZmZlcjsKKworCS8qCisJICogVGhlIHNpemUgb2YgdGhlIFRMViBidWZmZXIgaXMgZXF1YWwgdG8gdGhlIGVudGlyZSBjb21tYW5kIHJlc3BvbnNlCisJICogICBzaXplIChzY2FuX3Jlc3Bfc2l6ZSkgbWludXMgdGhlIGZpeGVkIGZpZWxkcyAoc2l6ZW9mKCkncyksIHRoZQorCSAqICAgQlNTIERlc2NyaXB0aW9ucyAoYnNzX2Rlc2NyaXB0X3NpemUgYXMgYnl0ZXNMZWYpIGFuZCB0aGUgY29tbWFuZAorCSAqICAgcmVzcG9uc2UgaGVhZGVyIChTX0RTX0dFTikKKwkgKi8KKwl0bHZfYnVmX3NpemUgPSBzY2FuX3Jlc3Bfc2l6ZSAtIChieXRlc19sZWZ0CisJCQkJCSArIHNpemVvZihzY2FuX3JzcC0+YnNzX2Rlc2NyaXB0X3NpemUpCisJCQkJCSArIHNpemVvZihzY2FuX3JzcC0+bnVtYmVyX29mX3NldHMpCisJCQkJCSArIFNfRFNfR0VOKTsKKworCXRsdl9kYXRhID0gKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2RhdGEgKikgKHNjYW5fcnNwLT4KKwkJCQkJCSBic3NfZGVzY19hbmRfdGx2X2J1ZmZlciArCisJCQkJCQkgYnl0ZXNfbGVmdCk7CisKKwkvKiBTZWFyY2ggdGhlIFRMViBidWZmZXIgc3BhY2UgaW4gdGhlIHNjYW4gcmVzcG9uc2UgZm9yIGFueSB2YWxpZAorCSAgIFRMVnMgKi8KKwltd2lmaWV4X3JldF84MDJfMTFfc2Nhbl9nZXRfdGx2X3B0cnMoYWRhcHRlciwgdGx2X2RhdGEsIHRsdl9idWZfc2l6ZSwKKwkJCQkJICAgICBUTFZfVFlQRV9UU0ZUSU1FU1RBTVAsCisJCQkJCSAgICAgKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2RhdGEgKiopCisJCQkJCSAgICAgJnRzZl90bHYpOworCisJLyogU2VhcmNoIHRoZSBUTFYgYnVmZmVyIHNwYWNlIGluIHRoZSBzY2FuIHJlc3BvbnNlIGZvciBhbnkgdmFsaWQKKwkgICBUTFZzICovCisJbXdpZmlleF9yZXRfODAyXzExX3NjYW5fZ2V0X3Rsdl9wdHJzKGFkYXB0ZXIsIHRsdl9kYXRhLCB0bHZfYnVmX3NpemUsCisJCQkJCSAgICAgVExWX1RZUEVfQ0hBTk5FTEJBTkRMSVNULAorCQkJCQkgICAgIChzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19kYXRhICoqKQorCQkJCQkgICAgICZjaGFuX2JhbmRfdGx2KTsKKworCS8qCisJICogIFByb2Nlc3MgZWFjaCBzY2FuIHJlc3BvbnNlIHJldHVybmVkIChzY2FuX3JzcC0+bnVtYmVyX29mX3NldHMpLgorCSAqICBTYXZlIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgYnNzX25ld19lbnRyeSBhbmQgdGhlbiBpbnNlcnQgaW50byB0aGUKKwkgKiAgZHJpdmVyIHNjYW4gdGFibGUgZWl0aGVyIGFzIGFuIHVwZGF0ZSB0byBhbiBleGlzdGluZyBlbnRyeQorCSAqICBvciBhcyBhbiBhZGRpdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSB0YWJsZQorCSAqLworCWJzc19uZXdfZW50cnkgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yKSwKKwkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIWJzc19uZXdfZW50cnkpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICIgZmFpbGVkIHRvIGFsbG9jIGJzc19uZXdfZW50cnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IHNjYW5fcnNwLT5udW1iZXJfb2Zfc2V0cyAmJiBieXRlc19sZWZ0OyBpZHgrKykgeworCQkvKiBaZXJvIG91dCB0aGUgYnNzX25ld19lbnRyeSB3ZSBhcmUgYWJvdXQgdG8gc3RvcmUgaW5mbyBpbiAqLworCQltZW1zZXQoYnNzX25ld19lbnRyeSwgMHgwMCwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yKSk7CisKKwkJaWYgKG13aWZpZXhfaW50ZXJwcmV0X2Jzc19kZXNjX3dpdGhfaWUoYWRhcHRlciwgYnNzX25ld19lbnRyeSwKKwkJCQkJCQkmYnNzX2luZm8sCisJCQkJCQkJJmJ5dGVzX2xlZnQpKSB7CisJCQkvKiBFcnJvciBwYXJzaW5nL2ludGVycHJldGluZyBzY2FuIHJlc3BvbnNlLCBza2lwcGVkICovCisJCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIlNDQU5fUkVTUDogIgorCQkJICAgICAgICJtd2lmaWV4X2ludGVycHJldF9ic3NfZGVzY193aXRoX2llICIKKwkJCSAgICAgICAicmV0dXJuZWQgRVJST1JcbiIpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBQcm9jZXNzIHRoZSBkYXRhIGZpZWxkcyBhbmQgSUVzIHJldHVybmVkIGZvciB0aGlzIEJTUyAqLworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IFNDQU5fUkVTUDogQlNTSUQgPSAlcE1cbiIsCisJCSAgICAgICBic3NfbmV3X2VudHJ5LT5tYWNfYWRkcmVzcyk7CisKKwkJLyogU2VhcmNoIHRoZSBzY2FuIHRhYmxlIGZvciB0aGUgc2FtZSBic3NpZCAqLworCQlmb3IgKGJzc19pZHggPSAwOyBic3NfaWR4IDwgbnVtX2luX3RhYmxlOyBic3NfaWR4KyspIHsKKwkJCWlmIChtZW1jbXAoYnNzX25ld19lbnRyeS0+bWFjX2FkZHJlc3MsCisJCQkJYWRhcHRlci0+c2Nhbl90YWJsZVtic3NfaWR4XS5tYWNfYWRkcmVzcywKKwkJCQlzaXplb2YoYnNzX25ld19lbnRyeS0+bWFjX2FkZHJlc3MpKSkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJLyoKKwkJCSAqIElmIHRoZSBTU0lEIG1hdGNoZXMgYXMgd2VsbCwgaXQgaXMgYQorCQkJICogZHVwbGljYXRlIG9mIHRoaXMgZW50cnkuICBLZWVwIHRoZSBic3NfaWR4CisJCQkgKiBzZXQgdG8gdGhpcyBlbnRyeSBzbyB3ZSByZXBsYWNlIHRoZSBvbGQKKwkJCSAqIGNvbnRlbnRzIGluIHRoZSB0YWJsZQorCQkJICovCisJCQlpZiAoKGJzc19uZXdfZW50cnktPnNzaWQuc3NpZF9sZW4KKwkJCQk9PSBhZGFwdGVyLT5zY2FuX3RhYmxlW2Jzc19pZHhdLiBzc2lkLnNzaWRfbGVuKQorCQkJCQkmJiAoIW1lbWNtcChic3NfbmV3X2VudHJ5LT5zc2lkLnNzaWQsCisJCQkJCWFkYXB0ZXItPnNjYW5fdGFibGVbYnNzX2lkeF0uc3NpZC5zc2lkLAorCQkJCQlic3NfbmV3X2VudHJ5LT5zc2lkLnNzaWRfbGVuKSkpIHsKKwkJCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IFNDQU5fUkVTUDoiCisJCQkJCSIgZHVwbGljYXRlIG9mIGluZGV4OiAlZFxuIiwgYnNzX2lkeCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJLyoKKwkJICogSWYgdGhlIGJzc19pZHggaXMgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBlbnRyaWVzIGluCisJCSAqIHRoZSB0YWJsZSwgdGhlIG5ldyBlbnRyeSB3YXMgbm90IGEgZHVwbGljYXRlOyBhcHBlbmQKKwkJICogaXQgdG8gdGhlIHNjYW4gdGFibGUKKwkJICovCisJCWlmIChic3NfaWR4ID09IG51bV9pbl90YWJsZSkgeworCQkJLyogUmFuZ2UgY2hlY2sgdGhlIGJzc19pZHgsIGtlZXAgaXQgbGltaXRlZCB0bworCQkJICAgdGhlIGxhc3QgZW50cnkgKi8KKwkJCWlmIChic3NfaWR4ID09IElXX01BWF9BUCkKKwkJCQlic3NfaWR4LS07CisJCQllbHNlCisJCQkJbnVtX2luX3RhYmxlKys7CisJCX0KKworCQkvKgorCQkgKiBTYXZlIHRoZSBiZWFjb24vcHJvYmUgcmVzcG9uc2UgcmV0dXJuZWQgZm9yIGxhdGVyIGFwcGxpY2F0aW9uCisJCSAqIHJldHJpZXZhbC4gIER1cGxpY2F0ZSBiZWFjb24vcHJvYmUgcmVzcG9uc2VzIGFyZSB1cGRhdGVkIGlmCisJCSAqIHBvc3NpYmxlCisJCSAqLworCQltd2lmaWV4X3JldF84MDJfMTFfc2Nhbl9zdG9yZV9iZWFjb24ocHJpdiwgYnNzX2lkeCwKKwkJCQkJCW51bV9pbl90YWJsZSwgYnNzX25ld19lbnRyeSk7CisJCS8qCisJCSAqIElmIHRoZSBUU0YgVExWIHdhcyBhcHBlbmRlZCB0byB0aGUgc2NhbiByZXN1bHRzLCBzYXZlIHRoaXMKKwkJICogZW50cnkncyBUU0YgdmFsdWUgaW4gdGhlIG5ldHdvcmtUU0YgZmllbGQuVGhlIG5ldHdvcmtUU0YgaXMKKwkJICogdGhlIGZpcm13YXJlJ3MgVFNGIHZhbHVlIGF0IHRoZSB0aW1lIHRoZSBiZWFjb24gb3IgcHJvYmUKKwkJICogcmVzcG9uc2Ugd2FzIHJlY2VpdmVkLgorCQkgKi8KKwkJaWYgKHRzZl90bHYpIHsKKwkJCW1lbWNweSgmdHNmX3ZhbCwgJnRzZl90bHYtPnRzZl9kYXRhW2lkeCAqIFRTRl9EQVRBX1NJWkVdCisJCQkJCSwgc2l6ZW9mKHRzZl92YWwpKTsKKwkJCW1lbWNweSgmYnNzX25ld19lbnRyeS0+bmV0d29ya190c2YsICZ0c2ZfdmFsLAorCQkJCQlzaXplb2YoYnNzX25ld19lbnRyeS0+bmV0d29ya190c2YpKTsKKwkJfQorCQliYW5kID0gQkFORF9HOworCQlpZiAoY2hhbl9iYW5kX3RsdikgeworCQkJY2hhbl9iYW5kID0gJmNoYW5fYmFuZF90bHYtPmNoYW5fYmFuZF9wYXJhbVtpZHhdOworCQkJYmFuZCA9IG13aWZpZXhfcmFkaW9fdHlwZV90b19iYW5kKGNoYW5fYmFuZC0+cmFkaW9fdHlwZQorCQkJCQkmIChCSVQoMCkgfCBCSVQoMSkpKTsKKwkJfQorCisJCS8qIFNhdmUgdGhlIGJhbmQgZGVzaWduYXRpb24gZm9yIHRoaXMgZW50cnkgZm9yIHVzZSBpbiBqb2luICovCisJCWJzc19uZXdfZW50cnktPmJzc19iYW5kID0gYmFuZDsKKwkJY2ZwID0gbXdpZmlleF9nZXRfY2ZwX2J5X2JhbmRfYW5kX2NoYW5uZWxfZnJvbV9jZmc4MDIxMShwcml2LAorCQkJCQkodTgpIGJzc19uZXdfZW50cnktPmJzc19iYW5kLAorCQkJCQkodTE2KWJzc19uZXdfZW50cnktPmNoYW5uZWwpOworCisJCWlmIChjZnApCisJCQlic3NfbmV3X2VudHJ5LT5mcmVxID0gY2ZwLT5mcmVxOworCQllbHNlCisJCQlic3NfbmV3X2VudHJ5LT5mcmVxID0gMDsKKworCQkvKiBDb3B5IHRoZSBsb2NhbGx5IGNyZWF0ZWQgYnNzX25ld19lbnRyeSB0byB0aGUgc2NhbiB0YWJsZSAqLworCQltZW1jcHkoJmFkYXB0ZXItPnNjYW5fdGFibGVbYnNzX2lkeF0sIGJzc19uZXdfZW50cnksCisJCSAgICAgICBzaXplb2YoYWRhcHRlci0+c2Nhbl90YWJsZVtic3NfaWR4XSkpOworCisJfQorCisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsCisJCSJpbmZvOiBTQ0FOX1JFU1A6IFNjYW5uZWQgJTJkIEFQcywgJWQgdmFsaWQsICVkIHRvdGFsXG4iLAorCSAgICAgICBzY2FuX3JzcC0+bnVtYmVyX29mX3NldHMsCisJICAgICAgIG51bV9pbl90YWJsZSAtIGFkYXB0ZXItPm51bV9pbl9zY2FuX3RhYmxlLCBudW1faW5fdGFibGUpOworCisJLyogVXBkYXRlIHRoZSB0b3RhbCBudW1iZXIgb2YgQlNTSURzIGluIHRoZSBzY2FuIHRhYmxlICovCisJYWRhcHRlci0+bnVtX2luX3NjYW5fdGFibGUgPSBudW1faW5fdGFibGU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+c2Nhbl9wZW5kaW5nX3FfbG9jaywgZmxhZ3MpOworCWlmIChsaXN0X2VtcHR5KCZhZGFwdGVyLT5zY2FuX3BlbmRpbmdfcSkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+c2Nhbl9wZW5kaW5nX3FfbG9jaywgZmxhZ3MpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+bXdpZmlleF9jbWRfbG9jaywgZmxhZ3MpOworCQlhZGFwdGVyLT5zY2FuX3Byb2Nlc3NpbmcgPSBmYWxzZTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+bXdpZmlleF9jbWRfbG9jaywgZmxhZ3MpOworCQkvKgorCQkgKiBQcm9jZXNzIHRoZSByZXN1bHRpbmcgc2NhbiB0YWJsZToKKwkJICogICAtIFJlbW92ZSBhbnkgYmFkIHNzaWRzCisJCSAqICAgLSBVcGRhdGUgb3VyIGN1cnJlbnQgQlNTIGluZm9ybWF0aW9uIGZyb20gc2NhbiBkYXRhCisJCSAqLworCQltd2lmaWV4X3Byb2Nlc3Nfc2Nhbl9yZXN1bHRzKHByaXYpOworCisJCS8qIE5lZWQgdG8gaW5kaWNhdGUgSU9DVEwgY29tcGxldGUgKi8KKwkJaWYgKGFkYXB0ZXItPmN1cnJfY21kLT53YWl0X3FfZW5hYmxlZCkgeworCQkJYWRhcHRlci0+Y21kX3dhaXRfcS5zdGF0dXMgPSAwOworCQkJbXdpZmlleF9jb21wbGV0ZV9jbWQoYWRhcHRlcik7CisJCX0KKwkJaWYgKHByaXYtPnJlcG9ydF9zY2FuX3Jlc3VsdCkKKwkJCXByaXYtPnJlcG9ydF9zY2FuX3Jlc3VsdCA9IGZhbHNlOworCQlpZiAocHJpdi0+c2Nhbl9wZW5kaW5nX29uX2Jsb2NrKSB7CisJCQlwcml2LT5zY2FuX3BlbmRpbmdfb25fYmxvY2sgPSBmYWxzZTsKKwkJCXVwKCZwcml2LT5hc3luY19zZW0pOworCQl9CisKKwl9IGVsc2UgeworCQkvKiBHZXQgc2NhbiBjb21tYW5kIGZyb20gc2Nhbl9wZW5kaW5nX3EgYW5kIHB1dCB0bworCQkgICBjbWRfcGVuZGluZ19xICovCisJCWNtZF9ub2RlID0gbGlzdF9maXJzdF9lbnRyeSgmYWRhcHRlci0+c2Nhbl9wZW5kaW5nX3EsCisJCQkJCSAgICBzdHJ1Y3QgY21kX2N0cmxfbm9kZSwgbGlzdCk7CisJCWxpc3RfZGVsKCZjbWRfbm9kZS0+bGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnNjYW5fcGVuZGluZ19xX2xvY2ssIGZsYWdzKTsKKworCQltd2lmaWV4X2luc2VydF9jbWRfdG9fcGVuZGluZ19xKGFkYXB0ZXIsIGNtZF9ub2RlLCB0cnVlKTsKKwl9CisKK2RvbmU6CisJa2ZyZWUoKHU4ICopIGJzc19uZXdfZW50cnkpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGNvbW1hbmQgZm9yIGJhY2tncm91bmQgc2NhbiBxdWVyeS4KKyAqCisgKiBQcmVwYXJhdGlvbiBpbmNsdWRlcyAtCisgKiAgICAgIC0gU2V0dGluZyBjb21tYW5kIElEIGFuZCBwcm9wZXIgc2l6ZQorICogICAgICAtIFNldHRpbmcgYmFja2dyb3VuZCBzY2FuIGZsdXNoIHBhcmFtZXRlcgorICogICAgICAtIEVuc3VyaW5nIGNvcnJlY3QgZW5kaWFuLW5lc3MKKyAqLworaW50IG13aWZpZXhfY21kXzgwMl8xMV9iZ19zY2FuX3F1ZXJ5KHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWQpCit7CisJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9iZ19zY2FuX3F1ZXJ5ICpiZ19xdWVyeSA9CisJCSZjbWQtPnBhcmFtcy5iZ19zY2FuX3F1ZXJ5OworCisJY21kLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoSG9zdENtZF9DTURfODAyXzExX0JHX1NDQU5fUVVFUlkpOworCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2JnX3NjYW5fcXVlcnkpCisJCQkJKyBTX0RTX0dFTik7CisKKwliZ19xdWVyeS0+Zmx1c2ggPSAxOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGZpbmRzIGEgU1NJRCBpbiB0aGUgc2NhbiB0YWJsZS4KKyAqCisgKiBBIEJTU0lEIG1heSBvcHRpb25hbGx5IGJlIHByb3ZpZGVkIHRvIHF1YWxpZnkgdGhlIFNTSUQuCisgKiBGb3Igbm9uLUF1dG8gbW9kZSwgZnVydGhlciBjaGVjayBpcyBtYWRlIHRvIG1ha2Ugc3VyZSB0aGUKKyAqIEJTUyBmb3VuZCBpbiB0aGUgc2NhbiB0YWJsZSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGN1cnJlbnQKKyAqIHNldHRpbmdzIG9mIHRoZSBkcml2ZXIuCisgKi8KK3MzMgorbXdpZmlleF9maW5kX3NzaWRfaW5fbGlzdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICBzdHJ1Y3QgbXdpZmlleF84MDJfMTFfc3NpZCAqc3NpZCwgdTggKmJzc2lkLAorCQkJICB1MzIgbW9kZSkKK3sKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwlzMzIgbmV0ID0gLTEsIGo7CisJdTggYmVzdF9yc3NpID0gMDsKKwl1MzIgaTsKKworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogbnVtIG9mIGVudHJpZXMgaW4gdGFibGUgPSAlZFxuIiwKKwkgICAgICAgYWRhcHRlci0+bnVtX2luX3NjYW5fdGFibGUpOworCisJLyoKKwkgKiBMb29wIHRocm91Z2ggdGhlIHRhYmxlIHVudGlsIHRoZSBtYXhpbXVtIGlzIHJlYWNoZWQgb3IgdW50aWwgYSBtYXRjaAorCSAqICAgaXMgZm91bmQgYmFzZWQgb24gdGhlIGJzc2lkIGZpZWxkIGNvbXBhcmlzb24KKwkgKi8KKwlmb3IgKGkgPSAwOworCSAgICAgaSA8IGFkYXB0ZXItPm51bV9pbl9zY2FuX3RhYmxlICYmICghYnNzaWQgfHwgKGJzc2lkICYmIG5ldCA8IDApKTsKKwkgICAgIGkrKykgeworCQlpZiAoIW13aWZpZXhfc3NpZF9jbXAoJmFkYXB0ZXItPnNjYW5fdGFibGVbaV0uc3NpZCwgc3NpZCkgJiYKKwkJICAgICghYnNzaWQKKwkJICAgICB8fCAhbWVtY21wKGFkYXB0ZXItPnNjYW5fdGFibGVbaV0ubWFjX2FkZHJlc3MsIGJzc2lkLAorCQkJCUVUSF9BTEVOKSkKKwkJICAgICYmCisJCSAgICAobXdpZmlleF9nZXRfY2ZwX2J5X2JhbmRfYW5kX2NoYW5uZWxfZnJvbV9jZmc4MDIxMQorCQkgICAgIChwcml2LCAodTgpIGFkYXB0ZXItPnNjYW5fdGFibGVbaV0uYnNzX2JhbmQsCisJCSAgICAgICh1MTYpIGFkYXB0ZXItPnNjYW5fdGFibGVbaV0uY2hhbm5lbCkpKSB7CisJCQlzd2l0Y2ggKG1vZGUpIHsKKwkJCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCQkJaiA9IG13aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlKHByaXYsIGksCisJCQkJCQkJCSAgbW9kZSk7CisKKwkJCQlpZiAoaiA+PSAwKSB7CisJCQkJCWlmIChTQ0FOX1JTU0kKKwkJCQkJICAgIChhZGFwdGVyLT5zY2FuX3RhYmxlW2ldLnJzc2kpID4KKwkJCQkJICAgIGJlc3RfcnNzaSkgeworCQkJCQkJYmVzdF9yc3NpID0gU0NBTl9SU1NJKGFkYXB0ZXItPgorCQkJCQkJCQkgIHNjYW5fdGFibGUKKwkJCQkJCQkJICBbaV0ucnNzaSk7CisJCQkJCQluZXQgPSBpOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKG5ldCA9PSAtMSkKKwkJCQkJCW5ldCA9IGo7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRDoKKwkJCWRlZmF1bHQ6CisJCQkJLyoKKwkJCQkgKiBEbyBub3QgY2hlY2sgY29tcGF0aWJpbGl0eSBpZiB0aGUgbW9kZQorCQkJCSAqIHJlcXVlc3RlZCBpcyBBdXRvL1Vua25vd24uICBBbGxvd3MgZ2VuZXJpYworCQkJCSAqIGZpbmQgdG8gd29yayB3aXRob3V0IHZlcmlmeWluZyBhZ2FpbnN0IHRoZQorCQkJCSAqIEFkYXB0ZXIgc2VjdXJpdHkgc2V0dGluZ3MKKwkJCQkgKi8KKwkJCQlpZiAoU0NBTl9SU1NJKGFkYXB0ZXItPnNjYW5fdGFibGVbaV0ucnNzaSkgPgorCQkJCSAgICBiZXN0X3Jzc2kpIHsKKwkJCQkJYmVzdF9yc3NpID0gU0NBTl9SU1NJKGFkYXB0ZXItPgorCQkJCQkJCSAgc2Nhbl90YWJsZVtpXS5yc3NpKTsKKwkJCQkJbmV0ID0gaTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gbmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBmaW5kcyBhIHNwZWNpZmljIGNvbXBhdGlibGUgQlNTSUQgaW4gdGhlIHNjYW4gbGlzdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGxvb3BzIHRocm91Z2ggdGhlIHNjYW4gdGFibGUgbG9va2luZyBmb3IgYSBjb21wYXRpYmxlCisgKiBtYXRjaC4gSWYgYSBCU1NJRCBtYXRjaGVzLCBidXQgdGhlIEJTUyBpcyBmb3VuZCB0byBiZSBub3QgY29tcGF0aWJsZQorICogdGhlIGZ1bmN0aW9uIGlnbm9yZXMgaXQgYW5kIGNvbnRpbnVlcyB0byBzZWFyY2ggdGhyb3VnaCB0aGUgcmVzdCBvZgorICogdGhlIGVudHJpZXMgaW4gY2FzZSB0aGVyZSBpcyBhbiBBUCB3aXRoIG11bHRpcGxlIFNTSURzIGFzc2lnbmVkIHRvCisgKiB0aGUgc2FtZSBCU1NJRC4KKyAqLworczMyCittd2lmaWV4X2ZpbmRfYnNzaWRfaW5fbGlzdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCAqYnNzaWQsCisJCQkgICB1MzIgbW9kZSkKK3sKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwlzMzIgbmV0ID0gLTE7CisJdTMyIGk7CisKKwlpZiAoIWJzc2lkKQorCQlyZXR1cm4gLTE7CisKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IEZpbmRCU1NJRDogTnVtIG9mIEJTU0lEcyA9ICVkXG4iLAorCSAgICAgICBhZGFwdGVyLT5udW1faW5fc2Nhbl90YWJsZSk7CisKKwkvKgorCSAqIExvb2sgdGhyb3VnaCB0aGUgc2NhbiB0YWJsZSBmb3IgYSBjb21wYXRpYmxlIG1hdGNoLiBUaGUgcmV0IHJldHVybgorCSAqICAgdmFyaWFibGUgd2lsbCBiZSBlcXVhbCB0byB0aGUgaW5kZXggaW4gdGhlIHNjYW4gdGFibGUgKGdyZWF0ZXIKKwkgKiAgIHRoYW4gemVybykgaWYgdGhlIG5ldHdvcmsgaXMgY29tcGF0aWJsZS4gIFRoZSBsb29wIHdpbGwgY29udGludWUKKwkgKiAgIHBhc3QgYSBtYXRjaGVkIGJzc2lkIHRoYXQgaXMgbm90IGNvbXBhdGlibGUgaW4gY2FzZSB0aGVyZSBpcyBhbgorCSAqICAgQVAgd2l0aCBtdWx0aXBsZSBTU0lEcyBhc3NpZ25lZCB0byB0aGUgc2FtZSBCU1NJRAorCSAqLworCWZvciAoaSA9IDA7IG5ldCA8IDAgJiYgaSA8IGFkYXB0ZXItPm51bV9pbl9zY2FuX3RhYmxlOyBpKyspIHsKKwkJaWYgKCFtZW1jbXAKKwkJICAgIChhZGFwdGVyLT5zY2FuX3RhYmxlW2ldLm1hY19hZGRyZXNzLCBic3NpZCwgRVRIX0FMRU4pCisJCQkmJiBtd2lmaWV4X2dldF9jZnBfYnlfYmFuZF9hbmRfY2hhbm5lbF9mcm9tX2NmZzgwMjExCisJCQkJCQkJCShwcml2LAorCQkJCQkJCSAgICAodTgpIGFkYXB0ZXItPgorCQkJCQkJCSAgICBzY2FuX3RhYmxlW2ldLgorCQkJCQkJCSAgICBic3NfYmFuZCwKKwkJCQkJCQkgICAgKHUxNikgYWRhcHRlci0+CisJCQkJCQkJICAgIHNjYW5fdGFibGVbaV0uCisJCQkJCQkJICAgIGNoYW5uZWwpKSB7CisJCQlzd2l0Y2ggKG1vZGUpIHsKKwkJCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCQkJbmV0ID0gbXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGUocHJpdiwgaSwKKwkJCQkJCQkJICAgIG1vZGUpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQluZXQgPSBpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIG5ldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaW5zZXJ0cyBzY2FuIGNvbW1hbmQgbm9kZSB0byB0aGUgc2NhbiBwZW5kaW5nIHF1ZXVlLgorICovCit2b2lkCittd2lmaWV4X3F1ZXVlX3NjYW5fY21kKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCSAgICAgICBzdHJ1Y3QgY21kX2N0cmxfbm9kZSAqY21kX25vZGUpCit7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNtZF9ub2RlLT53YWl0X3FfZW5hYmxlZCA9IHRydWU7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnNjYW5fcGVuZGluZ19xX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZjbWRfbm9kZS0+bGlzdCwgJmFkYXB0ZXItPnNjYW5fcGVuZGluZ19xKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5zY2FuX3BlbmRpbmdfcV9sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGZpbmRzIGFuIEFQIHdpdGggc3BlY2lmaWMgc3NpZCBpbiB0aGUgc2NhbiBsaXN0LgorICovCitpbnQgbXdpZmlleF9maW5kX2Jlc3RfbmV0d29yayhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICAgc3RydWN0IG13aWZpZXhfc3NpZF9ic3NpZCAqcmVxX3NzaWRfYnNzaWQpCit7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqcmVxX2JzczsKKwlzMzIgaTsKKworCW1lbXNldChyZXFfc3NpZF9ic3NpZCwgMCwgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X3NzaWRfYnNzaWQpKTsKKworCWkgPSBtd2lmaWV4X2ZpbmRfYmVzdF9uZXR3b3JrX2luX2xpc3QocHJpdik7CisKKwlpZiAoaSA+PSAwKSB7CisJCXJlcV9ic3MgPSAmYWRhcHRlci0+c2Nhbl90YWJsZVtpXTsKKwkJbWVtY3B5KCZyZXFfc3NpZF9ic3NpZC0+c3NpZCwgJnJlcV9ic3MtPnNzaWQsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IG13aWZpZXhfODAyXzExX3NzaWQpKTsKKwkJbWVtY3B5KCh1OCAqKSAmcmVxX3NzaWRfYnNzaWQtPmJzc2lkLAorCQkgICAgICAgKHU4ICopICZyZXFfYnNzLT5tYWNfYWRkcmVzcywgRVRIX0FMRU4pOworCisJCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgaW4gdGhlIHJpZ2h0IG1vZGUgKi8KKwkJaWYgKHByaXYtPmJzc19tb2RlID09IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKQorCQkJcHJpdi0+YnNzX21vZGUgPSByZXFfYnNzLT5ic3NfbW9kZTsKKwl9CisKKwlpZiAoIXJlcV9zc2lkX2Jzc2lkLT5zc2lkLnNzaWRfbGVuKQorCQlyZXR1cm4gLTE7CisKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IEJlc3QgbmV0d29yayBmb3VuZCA9IFslc10sICIKKwkgICAgICAgIlslcE1dXG4iLCByZXFfc3NpZF9ic3NpZC0+c3NpZC5zc2lkLAorCSAgICAgICByZXFfc3NpZF9ic3NpZC0+YnNzaWQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgc2NhbiBjb21tYW5kIGZvciBhbGwgYXZhaWxhYmxlIGNoYW5uZWxzIHRvIHRoZQorICogZmlybXdhcmUsIGZpbHRlcmVkIG9uIGEgc3BlY2lmaWMgU1NJRC4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X3NjYW5fc3BlY2lmaWNfc3NpZChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCSAgICAgIHN0cnVjdCBtd2lmaWV4XzgwMl8xMV9zc2lkICpyZXFfc3NpZCkKK3sKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgbXdpZmlleF91c2VyX3NjYW5fY2ZnICpzY2FuX2NmZzsKKworCWlmICghcmVxX3NzaWQpCisJCXJldHVybiAtMTsKKworCWlmIChhZGFwdGVyLT5zY2FuX3Byb2Nlc3NpbmcpIHsKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJjbWQ6IFNjYW4gYWxyZWFkeSBpbiBwcm9jZXNzLi4uXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAocHJpdi0+c2Nhbl9ibG9jaykgeworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwKKwkJCSJjbWQ6IFNjYW4gaXMgYmxvY2tlZCBkdXJpbmcgYXNzb2NpYXRpb24uLi5cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCW13aWZpZXhfc2Nhbl9kZWxldGVfc3NpZF90YWJsZV9lbnRyeShwcml2LCByZXFfc3NpZCk7CisKKwlzY2FuX2NmZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X3VzZXJfc2Nhbl9jZmcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNjYW5fY2ZnKSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jIHNjYW5fY2ZnXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtY3B5KHNjYW5fY2ZnLT5zc2lkX2xpc3RbMF0uc3NpZCwgcmVxX3NzaWQtPnNzaWQsCisJICAgICAgIHJlcV9zc2lkLT5zc2lkX2xlbik7CisJc2Nhbl9jZmctPmtlZXBfcHJldmlvdXNfc2NhbiA9IHRydWU7CisKKwlyZXQgPSBtd2lmaWV4X3NjYW5fbmV0d29ya3MocHJpdiwgc2Nhbl9jZmcpOworCisJa2ZyZWUoc2Nhbl9jZmcpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBTZW5kcyBJT0NUTCByZXF1ZXN0IHRvIHN0YXJ0IGEgc2Nhbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyB0aGUgSU9DVEwgcmVxdWVzdCBidWZmZXIsIGZpbGxzIGl0CisgKiB3aXRoIHJlcXVpc2l0ZSBwYXJhbWV0ZXJzIGFuZCBjYWxscyB0aGUgSU9DVEwgaGFuZGxlci4KKyAqCisgKiBTY2FuIGNvbW1hbmQgY2FuIGJlIGlzc3VlZCBmb3IgYm90aCBub3JtYWwgc2NhbiBhbmQgc3BlY2lmaWMgU1NJRAorICogc2NhbiwgZGVwZW5kaW5nIHVwb24gd2hldGhlciBhbiBTU0lEIGlzIHByb3ZpZGVkIG9yIG5vdC4KKyAqLworaW50IG13aWZpZXhfcmVxdWVzdF9zY2FuKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgc3RydWN0IG13aWZpZXhfODAyXzExX3NzaWQgKnJlcV9zc2lkKQoreworCWludCByZXQ7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZwcml2LT5hc3luY19zZW0pKSB7CisJCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LCAiJXM6IGFjcXVpcmUgc2VtYXBob3JlXG4iLAorCQkJCQkJX19mdW5jX18pOworCQlyZXR1cm4gLTE7CisJfQorCXByaXYtPnNjYW5fcGVuZGluZ19vbl9ibG9jayA9IHRydWU7CisKKwlwcml2LT5hZGFwdGVyLT5jbWRfd2FpdF9xLmNvbmRpdGlvbiA9IGZhbHNlOworCisJaWYgKHJlcV9zc2lkICYmIHJlcV9zc2lkLT5zc2lkX2xlbiAhPSAwKQorCQkvKiBTcGVjaWZpYyBTU0lEIHNjYW4gKi8KKwkJcmV0ID0gbXdpZmlleF9zY2FuX3NwZWNpZmljX3NzaWQocHJpdiwgcmVxX3NzaWQpOworCWVsc2UKKwkJLyogTm9ybWFsIHNjYW4gKi8KKwkJcmV0ID0gbXdpZmlleF9zY2FuX25ldHdvcmtzKHByaXYsIE5VTEwpOworCisJaWYgKCFyZXQpCisJCXJldCA9IG13aWZpZXhfd2FpdF9xdWV1ZV9jb21wbGV0ZShwcml2LT5hZGFwdGVyKTsKKworCWlmIChyZXQgPT0gLTEpIHsKKwkJcHJpdi0+c2Nhbl9wZW5kaW5nX29uX2Jsb2NrID0gZmFsc2U7CisJCXVwKCZwcml2LT5hc3luY19zZW0pOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGFwcGVuZHMgdGhlIHZlbmRvciBzcGVjaWZpYyBJRSBUTFYgdG8gYSBidWZmZXIuCisgKi8KK2ludAorbXdpZmlleF9jbWRfYXBwZW5kX3ZzaWVfdGx2KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgdTE2IHZzaWVfbWFzaywgdTggKipidWZmZXIpCit7CisJaW50IGlkLCByZXRfbGVuID0gMDsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc192ZW5kb3JfcGFyYW1fc2V0ICp2c19wYXJhbV9zZXQ7CisKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIDA7CisJaWYgKCEoKmJ1ZmZlcikpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBUcmF2ZXJzZSB0aHJvdWdoIHRoZSBzYXZlZCB2ZW5kb3Igc3BlY2lmaWMgSUUgYXJyYXkgYW5kIGFwcGVuZAorCSAqIHRoZSBzZWxlY3RlZChzY2FuL2Fzc29jL2FkaG9jKSBJRSBhcyBUTFYgdG8gdGhlIGNvbW1hbmQKKwkgKi8KKwlmb3IgKGlkID0gMDsgaWQgPCBNV0lGSUVYX01BWF9WU0lFX05VTTsgaWQrKykgeworCQlpZiAocHJpdi0+dnNfaWVbaWRdLm1hc2sgJiB2c2llX21hc2spIHsKKwkJCXZzX3BhcmFtX3NldCA9CisJCQkJKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3ZlbmRvcl9wYXJhbV9zZXQgKikKKwkJCQkqYnVmZmVyOworCQkJdnNfcGFyYW1fc2V0LT5oZWFkZXIudHlwZSA9CisJCQkJY3B1X3RvX2xlMTYoVExWX1RZUEVfUEFTU1RIUk9VR0gpOworCQkJdnNfcGFyYW1fc2V0LT5oZWFkZXIubGVuID0KKwkJCQljcHVfdG9fbGUxNigoKCh1MTYpIHByaXYtPnZzX2llW2lkXS5pZVsxXSkKKwkJCQkmIDB4MDBGRikgKyAyKTsKKwkJCW1lbWNweSh2c19wYXJhbV9zZXQtPmllLCBwcml2LT52c19pZVtpZF0uaWUsCisJCQkgICAgICAgbGUxNl90b19jcHUodnNfcGFyYW1fc2V0LT5oZWFkZXIubGVuKSk7CisJCQkqYnVmZmVyICs9IGxlMTZfdG9fY3B1KHZzX3BhcmFtX3NldC0+aGVhZGVyLmxlbikgKworCQkJCSAgIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIpOworCQkJcmV0X2xlbiArPSBsZTE2X3RvX2NwdSh2c19wYXJhbV9zZXQtPmhlYWRlci5sZW4pICsKKwkJCQkgICBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyKTsKKwkJfQorCX0KKwlyZXR1cm4gcmV0X2xlbjsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2F2ZXMgYSBiZWFjb24gYnVmZmVyIG9mIHRoZSBjdXJyZW50IEJTUyBkZXNjcmlwdG9yLgorICoKKyAqIFRoZSBjdXJyZW50IGJlYWNvbiBidWZmZXIgaXMgc2F2ZWQgc28gdGhhdCBpdCBjYW4gYmUgcmVzdG9yZWQgaW4gdGhlCisgKiBmb2xsb3dpbmcgY2FzZXMgdGhhdCBtYWtlcyB0aGUgYmVhY29uIGJ1ZmZlciBub3QgdG8gY29udGFpbiB0aGUgY3VycmVudAorICogc3NpZCdzIGJlYWNvbiBidWZmZXIuCisgKiAgICAgIC0gVGhlIGN1cnJlbnQgc3NpZCB3YXMgbm90IGZvdW5kIHNvbWVob3cgaW4gdGhlIGxhc3Qgc2Nhbi4KKyAqICAgICAgLSBUaGUgY3VycmVudCBzc2lkIHdhcyB0aGUgbGFzdCBlbnRyeSBvZiB0aGUgc2NhbiB0YWJsZSBhbmQgb3ZlcmxvYWRlZC4KKyAqLwordm9pZAorbXdpZmlleF9zYXZlX2N1cnJfYmNuKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpCit7CisJc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqY3Vycl9ic3MgPQorCQkmcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yOworCisJaWYgKCFjdXJyX2Jzcy0+YmVhY29uX2J1Zl9zaXplKQorCQlyZXR1cm47CisKKwkvKiBhbGxvY2F0ZSBiZWFjb24gYnVmZmVyIGF0IDFzdCB0aW1lOyBvciBpZiBpdCdzIHNpemUgaGFzIGNoYW5nZWQgKi8KKwlpZiAoIXByaXYtPmN1cnJfYmNuX2J1ZiB8fAorCQkJcHJpdi0+Y3Vycl9iY25fc2l6ZSAhPSBjdXJyX2Jzcy0+YmVhY29uX2J1Zl9zaXplKSB7CisJCXByaXYtPmN1cnJfYmNuX3NpemUgPSBjdXJyX2Jzcy0+YmVhY29uX2J1Zl9zaXplOworCisJCWtmcmVlKHByaXYtPmN1cnJfYmNuX2J1Zik7CisJCXByaXYtPmN1cnJfYmNuX2J1ZiA9IGt6YWxsb2MoY3Vycl9ic3MtPmJlYWNvbl9idWZfc2l6ZSwKKwkJCQkJCUdGUF9LRVJORUwpOworCQlpZiAoIXByaXYtPmN1cnJfYmNuX2J1ZikgeworCQkJZGV2X2Vycihwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkJCSJmYWlsZWQgdG8gYWxsb2MgY3Vycl9iY25fYnVmXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCW1lbWNweShwcml2LT5jdXJyX2Jjbl9idWYsIGN1cnJfYnNzLT5iZWFjb25fYnVmLAorCQljdXJyX2Jzcy0+YmVhY29uX2J1Zl9zaXplKTsKKwlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IGN1cnJlbnQgYmVhY29uIHNhdmVkICVkXG4iLAorCQlwcml2LT5jdXJyX2Jjbl9zaXplKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZnJlZXMgdGhlIGN1cnJlbnQgQlNTIGRlc2NyaXB0b3IgYmVhY29uIGJ1ZmZlci4KKyAqLwordm9pZAorbXdpZmlleF9mcmVlX2N1cnJfYmNuKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpCit7CisJa2ZyZWUocHJpdi0+Y3Vycl9iY25fYnVmKTsKKwlwcml2LT5jdXJyX2Jjbl9idWYgPSBOVUxMOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3NkaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDI1ZGJkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9zZGlvLmMKQEAgLTAsMCArMSwxNzU0IEBACisvKgorICogTWFydmVsbCBXaXJlbGVzcyBMQU4gZGV2aWNlIGRyaXZlcjogU0RJTyBzcGVjaWZpYyBoYW5kbGluZworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbAorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluCisgKiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gKKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBIG9yIG9uIHRoZQorICogd29ybGR3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0LgorICoKKyAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQKKyAqIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKworI2luY2x1ZGUgImRlY2wuaCIKKyNpbmNsdWRlICJpb2N0bC5oIgorI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJmdy5oIgorI2luY2x1ZGUgIm1haW4uaCIKKyNpbmNsdWRlICJ3bW0uaCIKKyNpbmNsdWRlICIxMW4uaCIKKyNpbmNsdWRlICJzZGlvLmgiCisKKworI2RlZmluZSBTRElPX1ZFUlNJT04JIjEuMCIKKworc3RhdGljIHN0cnVjdCBtd2lmaWV4X2lmX29wcyBzZGlvX29wczsKKworc3RhdGljIHN0cnVjdCBzZW1hcGhvcmUgYWRkX3JlbW92ZV9jYXJkX3NlbTsKKworLyoKKyAqIFNESU8gcHJvYmUuCisgKgorICogVGhpcyBmdW5jdGlvbiBwcm9iZXMgYW4gbXdpZmlleCBkZXZpY2UgYW5kIHJlZ2lzdGVycyBpdC4gSXQgYWxsb2NhdGVzCisgKiB0aGUgY2FyZCBzdHJ1Y3R1cmUsIGVuYWJsZXMgU0RJTyBmdW5jdGlvbiBudW1iZXIgYW5kIGluaXRpYXRlcyB0aGUKKyAqIGRldmljZSByZWdpc3RyYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIHByb2NlZHVyZSBieSBhZGRpbmcgYSBsb2dpY2FsCisgKiBpbnRlcmZhY2UuCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfc2Rpb19wcm9iZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jLCBjb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgKmlkKQoreworCWludCByZXQ7CisJc3RydWN0IHNkaW9fbW1jX2NhcmQgKmNhcmQgPSBOVUxMOworCisJcHJfZGVidWcoImluZm86IHZlbmRvcj0weCU0LjA0WCBkZXZpY2U9MHglNC4wNFggY2xhc3M9JWQgZnVuY3Rpb249JWRcbiIsCisJICAgICAgIGZ1bmMtPnZlbmRvciwgZnVuYy0+ZGV2aWNlLCBmdW5jLT5jbGFzcywgZnVuYy0+bnVtKTsKKworCWNhcmQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2Rpb19tbWNfY2FyZCksIEdGUF9LRVJORUwpOworCWlmICghY2FyZCkgeworCQlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gYWxsb2MgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWNhcmQtPmZ1bmMgPSBmdW5jOworCisJZnVuYy0+Y2FyZC0+cXVpcmtzIHw9IE1NQ19RVUlSS19CTEtTWl9GT1JfQllURV9NT0RFOworCisJc2Rpb19jbGFpbV9ob3N0KGZ1bmMpOworCXJldCA9IHNkaW9fZW5hYmxlX2Z1bmMoZnVuYyk7CisJc2Rpb19yZWxlYXNlX2hvc3QoZnVuYyk7CisKKwlpZiAocmV0KSB7CisJCXByX2VycigiJXM6IGZhaWxlZCB0byBlbmFibGUgZnVuY3Rpb25cbiIsIF9fZnVuY19fKTsKKwkJa2ZyZWUoY2FyZCk7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChtd2lmaWV4X2FkZF9jYXJkKGNhcmQsICZhZGRfcmVtb3ZlX2NhcmRfc2VtLCAmc2Rpb19vcHMpKSB7CisJCXByX2VycigiJXM6IGFkZCBjYXJkIGZhaWxlZFxuIiwgX19mdW5jX18pOworCQlrZnJlZShjYXJkKTsKKwkJc2Rpb19jbGFpbV9ob3N0KGZ1bmMpOworCQlyZXQgPSBzZGlvX2Rpc2FibGVfZnVuYyhmdW5jKTsKKwkJc2Rpb19yZWxlYXNlX2hvc3QoZnVuYyk7CisJCXJldCA9IC0xOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBTRElPIHJlbW92ZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgdGhlIGludGVyZmFjZSBhbmQgZnJlZXMgdXAgdGhlIGNhcmQgc3RydWN0dXJlLgorICovCitzdGF0aWMgdm9pZAorbXdpZmlleF9zZGlvX3JlbW92ZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKQoreworCXN0cnVjdCBzZGlvX21tY19jYXJkICpjYXJkOworCisJcHJfZGVidWcoImluZm86IFNESU8gZnVuYyBudW09JWRcbiIsIGZ1bmMtPm51bSk7CisKKwlpZiAoZnVuYykgeworCQljYXJkID0gc2Rpb19nZXRfZHJ2ZGF0YShmdW5jKTsKKwkJaWYgKGNhcmQpIHsKKwkJCW13aWZpZXhfcmVtb3ZlX2NhcmQoY2FyZC0+YWRhcHRlciwKKwkJCQkJJmFkZF9yZW1vdmVfY2FyZF9zZW0pOworCQkJa2ZyZWUoY2FyZCk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBTRElPIHN1c3BlbmQuCisgKgorICogS2VybmVsIG5lZWRzIHRvIHN1c3BlbmQgYWxsIGZ1bmN0aW9ucyBzZXBhcmF0ZWx5LiBUaGVyZWZvcmUgYWxsCisgKiByZWdpc3RlcmVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgZHJpdmVycyB3aXRoIHN1c3BlbmQgYW5kIHJlc3VtZQorICogbWV0aG9kcy4gRmFpbGluZyB0aGF0IHRoZSBrZXJuZWwgc2ltcGx5IHJlbW92ZXMgdGhlIHdob2xlIGNhcmQuCisgKgorICogSWYgYWxyZWFkeSBub3Qgc3VzcGVuZGVkLCB0aGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBhbmQgc2VuZHMgYSBob3N0CisgKiBzbGVlcCBhY3RpdmF0ZSByZXF1ZXN0IHRvIHRoZSBmaXJtd2FyZSBhbmQgdHVybnMgb2ZmIHRoZSB0cmFmZmljLgorICovCitzdGF0aWMgaW50IG13aWZpZXhfc2Rpb19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jID0gZGV2X3RvX3NkaW9fZnVuYyhkZXYpOworCXN0cnVjdCBzZGlvX21tY19jYXJkICpjYXJkOworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXI7CisJbW1jX3BtX2ZsYWdfdCBwbV9mbGFnID0gMDsKKwlpbnQgaHNfYWN0aXZlZCA9IDA7CisJaW50IGk7CisJaW50IHJldCA9IDA7CisKKwlpZiAoZnVuYykgeworCQlwbV9mbGFnID0gc2Rpb19nZXRfaG9zdF9wbV9jYXBzKGZ1bmMpOworCQlwcl9kZWJ1ZygiY21kOiAlczogc3VzcGVuZDogUE0gZmxhZyA9IDB4JXhcbiIsCisJCSAgICAgICBzZGlvX2Z1bmNfaWQoZnVuYyksIHBtX2ZsYWcpOworCQlpZiAoIShwbV9mbGFnICYgTU1DX1BNX0tFRVBfUE9XRVIpKSB7CisJCQlwcl9lcnIoIiVzOiBjYW5ub3QgcmVtYWluIGFsaXZlIHdoaWxlIGhvc3QgaXMiCisJCQkJIiBzdXNwZW5kZWRcbiIsIHNkaW9fZnVuY19pZChmdW5jKSk7CisJCQlyZXR1cm4gLUVOT1NZUzsKKwkJfQorCisJCWNhcmQgPSBzZGlvX2dldF9kcnZkYXRhKGZ1bmMpOworCQlpZiAoIWNhcmQgfHwgIWNhcmQtPmFkYXB0ZXIpIHsKKwkJCXByX2Vycigic3VzcGVuZDogaW52YWxpZCBjYXJkIG9yIGFkYXB0ZXJcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgeworCQlwcl9lcnIoInN1c3BlbmQ6IHNkaW9fZnVuYyBpcyBub3Qgc3BlY2lmaWVkXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJYWRhcHRlciA9IGNhcmQtPmFkYXB0ZXI7CisKKwkvKiBFbmFibGUgdGhlIEhvc3QgU2xlZXAgKi8KKwloc19hY3RpdmVkID0gbXdpZmlleF9lbmFibGVfaHMoYWRhcHRlcik7CisJaWYgKGhzX2FjdGl2ZWQpIHsKKwkJcHJfZGVidWcoImNtZDogc3VzcGVuZCB3aXRoIE1NQ19QTV9LRUVQX1BPV0VSXG4iKTsKKwkJcmV0ID0gc2Rpb19zZXRfaG9zdF9wbV9mbGFncyhmdW5jLCBNTUNfUE1fS0VFUF9QT1dFUik7CisJfQorCisJLyogSW5kaWNhdGUgZGV2aWNlIHN1c3BlbmRlZCAqLworCWFkYXB0ZXItPmlzX3N1c3BlbmRlZCA9IHRydWU7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+cHJpdl9udW07IGkrKykKKwkJbmV0aWZfY2Fycmllcl9vZmYoYWRhcHRlci0+cHJpdltpXS0+bmV0ZGV2KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBTRElPIHJlc3VtZS4KKyAqCisgKiBLZXJuZWwgbmVlZHMgdG8gc3VzcGVuZCBhbGwgZnVuY3Rpb25zIHNlcGFyYXRlbHkuIFRoZXJlZm9yZSBhbGwKKyAqIHJlZ2lzdGVyZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSBkcml2ZXJzIHdpdGggc3VzcGVuZCBhbmQgcmVzdW1lCisgKiBtZXRob2RzLiBGYWlsaW5nIHRoYXQgdGhlIGtlcm5lbCBzaW1wbHkgcmVtb3ZlcyB0aGUgd2hvbGUgY2FyZC4KKyAqCisgKiBJZiBhbHJlYWR5IG5vdCByZXN1bWVkLCB0aGlzIGZ1bmN0aW9uIHR1cm5zIG9uIHRoZSB0cmFmZmljIGFuZAorICogc2VuZHMgYSBob3N0IHNsZWVwIGNhbmNlbCByZXF1ZXN0IHRvIHRoZSBmaXJtd2FyZS4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X3NkaW9fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jID0gZGV2X3RvX3NkaW9fZnVuYyhkZXYpOworCXN0cnVjdCBzZGlvX21tY19jYXJkICpjYXJkOworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXI7CisJbW1jX3BtX2ZsYWdfdCBwbV9mbGFnID0gMDsKKwlpbnQgaTsKKworCWlmIChmdW5jKSB7CisJCXBtX2ZsYWcgPSBzZGlvX2dldF9ob3N0X3BtX2NhcHMoZnVuYyk7CisJCWNhcmQgPSBzZGlvX2dldF9kcnZkYXRhKGZ1bmMpOworCQlpZiAoIWNhcmQgfHwgIWNhcmQtPmFkYXB0ZXIpIHsKKwkJCXByX2VycigicmVzdW1lOiBpbnZhbGlkIGNhcmQgb3IgYWRhcHRlclxuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0gZWxzZSB7CisJCXByX2VycigicmVzdW1lOiBzZGlvX2Z1bmMgaXMgbm90IHNwZWNpZmllZFxuIik7CisJCXJldHVybiAwOworCX0KKworCWFkYXB0ZXIgPSBjYXJkLT5hZGFwdGVyOworCisJaWYgKCFhZGFwdGVyLT5pc19zdXNwZW5kZWQpIHsKKwkJZGV2X3dhcm4oYWRhcHRlci0+ZGV2LCAiZGV2aWNlIGFscmVhZHkgcmVzdW1lZFxuIik7CisJCXJldHVybiAwOworCX0KKworCWFkYXB0ZXItPmlzX3N1c3BlbmRlZCA9IGZhbHNlOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPnByaXZfbnVtOyBpKyspCisJCWlmIChhZGFwdGVyLT5wcml2W2ldLT5tZWRpYV9jb25uZWN0ZWQpCisJCQluZXRpZl9jYXJyaWVyX29uKGFkYXB0ZXItPnByaXZbaV0tPm5ldGRldik7CisKKwkvKiBEaXNhYmxlIEhvc3QgU2xlZXAgKi8KKwltd2lmaWV4X2NhbmNlbF9ocyhtd2lmaWV4X2dldF9wcml2KGFkYXB0ZXIsIE1XSUZJRVhfQlNTX1JPTEVfU1RBKSwKKwkJCSAgTVdJRklFWF9BU1lOQ19DTUQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIERldmljZSBJRCBmb3IgU0Q4Nzg3ICovCisjZGVmaW5lIFNESU9fREVWSUNFX0lEX01BUlZFTExfODc4NyAgICgweDkxMTkpCisKKy8qIFdMQU4gSURzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNkaW9fZGV2aWNlX2lkIG13aWZpZXhfaWRzW10gPSB7CisJe1NESU9fREVWSUNFKFNESU9fVkVORE9SX0lEX01BUlZFTEwsIFNESU9fREVWSUNFX0lEX01BUlZFTExfODc4Nyl9LAorCXt9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShzZGlvLCBtd2lmaWV4X2lkcyk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBtd2lmaWV4X3NkaW9fcG1fb3BzID0geworCS5zdXNwZW5kID0gbXdpZmlleF9zZGlvX3N1c3BlbmQsCisJLnJlc3VtZSA9IG13aWZpZXhfc2Rpb19yZXN1bWUsCit9OworCitzdGF0aWMgc3RydWN0IHNkaW9fZHJpdmVyIG13aWZpZXhfc2RpbyA9IHsKKwkubmFtZSA9ICJtd2lmaWV4X3NkaW8iLAorCS5pZF90YWJsZSA9IG13aWZpZXhfaWRzLAorCS5wcm9iZSA9IG13aWZpZXhfc2Rpb19wcm9iZSwKKwkucmVtb3ZlID0gbXdpZmlleF9zZGlvX3JlbW92ZSwKKwkuZHJ2ID0geworCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLnBtID0gJm13aWZpZXhfc2Rpb19wbV9vcHMsCisJfQorfTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gd3JpdGVzIGRhdGEgaW50byBTRElPIGNhcmQgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfd3JpdGVfcmVnKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiByZWcsIHUzMiBkYXRhKQoreworCXN0cnVjdCBzZGlvX21tY19jYXJkICpjYXJkID0gYWRhcHRlci0+Y2FyZDsKKwlpbnQgcmV0ID0gLTE7CisKKwlzZGlvX2NsYWltX2hvc3QoY2FyZC0+ZnVuYyk7CisJc2Rpb193cml0ZWIoY2FyZC0+ZnVuYywgKHU4KSBkYXRhLCByZWcsICZyZXQpOworCXNkaW9fcmVsZWFzZV9ob3N0KGNhcmQtPmZ1bmMpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmVhZHMgZGF0YSBmcm9tIFNESU8gY2FyZCByZWdpc3Rlci4KKyAqLworc3RhdGljIGludAorbXdpZmlleF9yZWFkX3JlZyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLCB1MzIgcmVnLCB1MzIgKmRhdGEpCit7CisJc3RydWN0IHNkaW9fbW1jX2NhcmQgKmNhcmQgPSBhZGFwdGVyLT5jYXJkOworCWludCByZXQgPSAtMTsKKwl1OCB2YWw7CisKKwlzZGlvX2NsYWltX2hvc3QoY2FyZC0+ZnVuYyk7CisJdmFsID0gc2Rpb19yZWFkYihjYXJkLT5mdW5jLCByZWcsICZyZXQpOworCXNkaW9fcmVsZWFzZV9ob3N0KGNhcmQtPmZ1bmMpOworCisJKmRhdGEgPSB2YWw7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiB3cml0ZXMgbXVsdGlwbGUgZGF0YSBpbnRvIFNESU8gY2FyZCBtZW1vcnkuCisgKgorICogVGhpcyBkb2VzIG5vdCB3b3JrIGluIHN1c3BlbmRlZCBtb2RlLgorICovCitzdGF0aWMgaW50Cittd2lmaWV4X3dyaXRlX2RhdGFfc3luYyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAorCQkJdTggKmJ1ZmZlciwgdTMyIHBrdF9sZW4sIHUzMiBwb3J0KQoreworCXN0cnVjdCBzZGlvX21tY19jYXJkICpjYXJkID0gYWRhcHRlci0+Y2FyZDsKKwlpbnQgcmV0ID0gLTE7CisJdTggYmxrX21vZGUgPQorCQkocG9ydCAmIE1XSUZJRVhfU0RJT19CWVRFX01PREVfTUFTSykgPyBCWVRFX01PREUgOiBCTE9DS19NT0RFOworCXUzMiBibGtfc2l6ZSA9IChibGtfbW9kZSA9PSBCTE9DS19NT0RFKSA/IE1XSUZJRVhfU0RJT19CTE9DS19TSVpFIDogMTsKKwl1MzIgYmxrX2NudCA9CisJCShibGtfbW9kZSA9PQorCQkgQkxPQ0tfTU9ERSkgPyAocGt0X2xlbiAvCisJCQkJTVdJRklFWF9TRElPX0JMT0NLX1NJWkUpIDogcGt0X2xlbjsKKwl1MzIgaW9wb3J0ID0gKHBvcnQgJiBNV0lGSUVYX1NESU9fSU9fUE9SVF9NQVNLKTsKKworCWlmIChhZGFwdGVyLT5pc19zdXNwZW5kZWQpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsCisJCQkiJXM6IG5vdCBhbGxvd2VkIHdoaWxlIHN1c3BlbmRlZFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLTE7CisJfQorCisJc2Rpb19jbGFpbV9ob3N0KGNhcmQtPmZ1bmMpOworCisJaWYgKCFzZGlvX3dyaXRlc2IoY2FyZC0+ZnVuYywgaW9wb3J0LCBidWZmZXIsIGJsa19jbnQgKiBibGtfc2l6ZSkpCisJCXJldCA9IDA7CisKKwlzZGlvX3JlbGVhc2VfaG9zdChjYXJkLT5mdW5jKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIG11bHRpcGxlIGRhdGEgZnJvbSBTRElPIGNhcmQgbWVtb3J5LgorICovCitzdGF0aWMgaW50IG13aWZpZXhfcmVhZF9kYXRhX3N5bmMoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwgdTggKmJ1ZmZlciwKKwkJCQkgIHUzMiBsZW4sIHUzMiBwb3J0LCB1OCBjbGFpbSkKK3sKKwlzdHJ1Y3Qgc2Rpb19tbWNfY2FyZCAqY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CisJaW50IHJldCA9IC0xOworCXU4IGJsa19tb2RlID0KKwkJKHBvcnQgJiBNV0lGSUVYX1NESU9fQllURV9NT0RFX01BU0spID8gQllURV9NT0RFIDogQkxPQ0tfTU9ERTsKKwl1MzIgYmxrX3NpemUgPSAoYmxrX21vZGUgPT0gQkxPQ0tfTU9ERSkgPyBNV0lGSUVYX1NESU9fQkxPQ0tfU0laRSA6IDE7CisJdTMyIGJsa19jbnQgPQorCQkoYmxrX21vZGUgPT0KKwkJIEJMT0NLX01PREUpID8gKGxlbiAvIE1XSUZJRVhfU0RJT19CTE9DS19TSVpFKSA6IGxlbjsKKwl1MzIgaW9wb3J0ID0gKHBvcnQgJiBNV0lGSUVYX1NESU9fSU9fUE9SVF9NQVNLKTsKKworCWlmIChjbGFpbSkKKwkJc2Rpb19jbGFpbV9ob3N0KGNhcmQtPmZ1bmMpOworCisJaWYgKCFzZGlvX3JlYWRzYihjYXJkLT5mdW5jLCBidWZmZXIsIGlvcG9ydCwgYmxrX2NudCAqIGJsa19zaXplKSkKKwkJcmV0ID0gMDsKKworCWlmIChjbGFpbSkKKwkJc2Rpb19yZWxlYXNlX2hvc3QoY2FyZC0+ZnVuYyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiB3YWtlcyB1cCB0aGUgY2FyZC4KKyAqCisgKiBBIGhvc3QgcG93ZXIgdXAgY29tbWFuZCBpcyB3cml0dGVuIHRvIHRoZSBjYXJkIGNvbmZpZ3VyYXRpb24KKyAqIHJlZ2lzdGVyIHRvIHdha2UgdXAgdGhlIGNhcmQuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9wbV93YWtldXBfY2FyZChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiZXZlbnQ6IHdha2V1cCBkZXZpY2UuLi5cbiIpOworCisJcmV0dXJuIG13aWZpZXhfd3JpdGVfcmVnKGFkYXB0ZXIsIENPTkZJR1VSQVRJT05fUkVHLCBIT1NUX1BPV0VSX1VQKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIHRoZSBjYXJkIGhhcyB3b2tlbiB1cC4KKyAqCisgKiBUaGUgY2FyZCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGlzIHJlc2V0LgorICovCitzdGF0aWMgaW50IG13aWZpZXhfcG1fd2FrZXVwX2NhcmRfY29tcGxldGUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImNtZDogd2FrZXVwIGRldmljZSBjb21wbGV0ZWRcbiIpOworCisJcmV0dXJuIG13aWZpZXhfd3JpdGVfcmVnKGFkYXB0ZXIsIENPTkZJR1VSQVRJT05fUkVHLCAwKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIElPIHBvcnRzLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkIC0KKyAqICAgICAgLSBSZWFkIHRoZSBJTyBwb3J0cyAoMCwgMSBhbmQgMikKKyAqICAgICAgLSBTZXQgaG9zdCBpbnRlcnJ1cHQgUmVzZXQtVG8tUmVhZCB0byBjbGVhcgorICogICAgICAtIFNldCBhdXRvIHJlLWVuYWJsZSBpbnRlcnJ1cHQKKyAqLworc3RhdGljIGludCBtd2lmaWV4X2luaXRfc2Rpb19pb3BvcnQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgcmVnOworCisJYWRhcHRlci0+aW9wb3J0ID0gMDsKKworCS8qIFJlYWQgdGhlIElPIHBvcnQgKi8KKwlpZiAoIW13aWZpZXhfcmVhZF9yZWcoYWRhcHRlciwgSU9fUE9SVF8wX1JFRywgJnJlZykpCisJCWFkYXB0ZXItPmlvcG9ydCB8PSAocmVnICYgMHhmZik7CisJZWxzZQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIW13aWZpZXhfcmVhZF9yZWcoYWRhcHRlciwgSU9fUE9SVF8xX1JFRywgJnJlZykpCisJCWFkYXB0ZXItPmlvcG9ydCB8PSAoKHJlZyAmIDB4ZmYpIDw8IDgpOworCWVsc2UKKwkJcmV0dXJuIC0xOworCisJaWYgKCFtd2lmaWV4X3JlYWRfcmVnKGFkYXB0ZXIsIElPX1BPUlRfMl9SRUcsICZyZWcpKQorCQlhZGFwdGVyLT5pb3BvcnQgfD0gKChyZWcgJiAweGZmKSA8PCAxNik7CisJZWxzZQorCQlyZXR1cm4gLTE7CisKKwlwcl9kZWJ1ZygiaW5mbzogU0RJTyBGVU5DMSBJTyBwb3J0OiAlI3hcbiIsIGFkYXB0ZXItPmlvcG9ydCk7CisKKwkvKiBTZXQgSG9zdCBpbnRlcnJ1cHQgcmVzZXQgdG8gcmVhZCB0byBjbGVhciAqLworCWlmICghbXdpZmlleF9yZWFkX3JlZyhhZGFwdGVyLCBIT1NUX0lOVF9SU1JfUkVHLCAmcmVnKSkKKwkJbXdpZmlleF93cml0ZV9yZWcoYWRhcHRlciwgSE9TVF9JTlRfUlNSX1JFRywKKwkJCQkgIHJlZyB8IFNESU9fSU5UX01BU0spOworCWVsc2UKKwkJcmV0dXJuIC0xOworCisJLyogRG5sZC9VcGxkIHJlYWR5IHNldCB0byBhdXRvIHJlc2V0ICovCisJaWYgKCFtd2lmaWV4X3JlYWRfcmVnKGFkYXB0ZXIsIENBUkRfTUlTQ19DRkdfUkVHLCAmcmVnKSkKKwkJbXdpZmlleF93cml0ZV9yZWcoYWRhcHRlciwgQ0FSRF9NSVNDX0NGR19SRUcsCisJCQkJICByZWcgfCBBVVRPX1JFX0VOQUJMRV9JTlQpOworCWVsc2UKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGRhdGEgdG8gdGhlIGNhcmQuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF93cml0ZV9kYXRhX3RvX2NhcmQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgICAgICB1OCAqcGF5bG9hZCwgdTMyIHBrdF9sZW4sIHUzMiBwb3J0KQoreworCXUzMiBpID0gMDsKKwlpbnQgcmV0OworCisJZG8geworCQlyZXQgPSBtd2lmaWV4X3dyaXRlX2RhdGFfc3luYyhhZGFwdGVyLCBwYXlsb2FkLCBwa3RfbGVuLCBwb3J0KTsKKwkJaWYgKHJldCkgeworCQkJaSsrOworCQkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJob3N0X3RvX2NhcmQsIHdyaXRlIGlvbWVtIgorCQkJCQkiICglZCkgZmFpbGVkOiAlZFxuIiwgaSwgcmV0KTsKKwkJCWlmIChtd2lmaWV4X3dyaXRlX3JlZyhhZGFwdGVyLAorCQkJCQlDT05GSUdVUkFUSU9OX1JFRywgMHgwNCkpCisJCQkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJ3cml0ZSBDRkcgcmVnIGZhaWxlZFxuIik7CisKKwkJCXJldCA9IC0xOworCQkJaWYgKGkgPiBNQVhfV1JJVEVfSU9NRU1fUkVUUlkpCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCX0gd2hpbGUgKHJldCA9PSAtMSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSByZWFkIHBvcnQuCisgKgorICogSWYgY29udHJvbCBwb3J0IGJpdCBpcyBzZXQgaW4gTVAgcmVhZCBiaXRtYXAsIHRoZSBjb250cm9sIHBvcnQKKyAqIGlzIHJldHVybmVkLCBvdGhlcndpc2UgdGhlIGN1cnJlbnQgcmVhZCBwb3J0IGlzIHJldHVybmVkIGFuZAorICogdGhlIHZhbHVlIGlzIGluY3JlYXNlZCAocHJvdmlkZWQgaXQgZG9lcyBub3QgcmVhY2ggdGhlIG1heGltdW0KKyAqIGxpbWl0LCBpbiB3aGljaCBjYXNlIGl0IGlzIHJlc2V0IHRvIDEpCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9nZXRfcmRfcG9ydChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLCB1OCAqcG9ydCkKK3sKKwlzdHJ1Y3Qgc2Rpb19tbWNfY2FyZCAqY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CisJdTE2IHJkX2JpdG1hcCA9IGNhcmQtPm1wX3JkX2JpdG1hcDsKKworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiZGF0YTogbXBfcmRfYml0bWFwPTB4JTA0eFxuIiwgcmRfYml0bWFwKTsKKworCWlmICghKHJkX2JpdG1hcCAmIChDVFJMX1BPUlRfTUFTSyB8IERBVEFfUE9SVF9NQVNLKSkpCisJCXJldHVybiAtMTsKKworCWlmIChjYXJkLT5tcF9yZF9iaXRtYXAgJiBDVFJMX1BPUlRfTUFTSykgeworCQljYXJkLT5tcF9yZF9iaXRtYXAgJj0gKHUxNikgKH5DVFJMX1BPUlRfTUFTSyk7CisJCSpwb3J0ID0gQ1RSTF9QT1JUOworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImRhdGE6IHBvcnQ9JWQgbXBfcmRfYml0bWFwPTB4JTA0eFxuIiwKKwkJICAgICAgICpwb3J0LCBjYXJkLT5tcF9yZF9iaXRtYXApOworCX0gZWxzZSB7CisJCWlmIChjYXJkLT5tcF9yZF9iaXRtYXAgJiAoMSA8PCBjYXJkLT5jdXJyX3JkX3BvcnQpKSB7CisJCQljYXJkLT5tcF9yZF9iaXRtYXAgJj0KKwkJCQkodTE2KSAofigxIDw8IGNhcmQtPmN1cnJfcmRfcG9ydCkpOworCQkJKnBvcnQgPSBjYXJkLT5jdXJyX3JkX3BvcnQ7CisKKwkJCWlmICgrK2NhcmQtPmN1cnJfcmRfcG9ydCA9PSBNQVhfUE9SVCkKKwkJCQljYXJkLT5jdXJyX3JkX3BvcnQgPSAxOworCQl9IGVsc2UgeworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsCisJCQkiZGF0YTogcG9ydD0lZCBtcF9yZF9iaXRtYXA9MHglMDR4IC0+IDB4JTA0eFxuIiwKKwkJICAgICAgICpwb3J0LCByZF9iaXRtYXAsIGNhcmQtPm1wX3JkX2JpdG1hcCk7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSB3cml0ZSBwb3J0IGZvciBkYXRhLgorICoKKyAqIFRoZSBjdXJyZW50IHdyaXRlIHBvcnQgaXMgcmV0dXJuZWQgaWYgYXZhaWxhYmxlIGFuZCB0aGUgdmFsdWUgaXMKKyAqIGluY3JlYXNlZCAocHJvdmlkZWQgaXQgZG9lcyBub3QgcmVhY2ggdGhlIG1heGltdW0gbGltaXQsIGluIHdoaWNoCisgKiBjYXNlIGl0IGlzIHJlc2V0IHRvIDEpCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9nZXRfd3JfcG9ydF9kYXRhKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICpwb3J0KQoreworCXN0cnVjdCBzZGlvX21tY19jYXJkICpjYXJkID0gYWRhcHRlci0+Y2FyZDsKKwl1MTYgd3JfYml0bWFwID0gY2FyZC0+bXBfd3JfYml0bWFwOworCisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJkYXRhOiBtcF93cl9iaXRtYXA9MHglMDR4XG4iLCB3cl9iaXRtYXApOworCisJaWYgKCEod3JfYml0bWFwICYgY2FyZC0+bXBfZGF0YV9wb3J0X21hc2spKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoY2FyZC0+bXBfd3JfYml0bWFwICYgKDEgPDwgY2FyZC0+Y3Vycl93cl9wb3J0KSkgeworCQljYXJkLT5tcF93cl9iaXRtYXAgJj0gKHUxNikgKH4oMSA8PCBjYXJkLT5jdXJyX3dyX3BvcnQpKTsKKwkJKnBvcnQgPSBjYXJkLT5jdXJyX3dyX3BvcnQ7CisJCWlmICgrK2NhcmQtPmN1cnJfd3JfcG9ydCA9PSBjYXJkLT5tcF9lbmRfcG9ydCkKKwkJCWNhcmQtPmN1cnJfd3JfcG9ydCA9IDE7CisJfSBlbHNlIHsKKwkJYWRhcHRlci0+ZGF0YV9zZW50ID0gdHJ1ZTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpZiAoKnBvcnQgPT0gQ1RSTF9QT1JUKSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiaW52YWxpZCBkYXRhIHBvcnQ9JWQgY3VyIHBvcnQ9JWQiCisJCQkJIiBtcF93cl9iaXRtYXA9MHglMDR4IC0+IDB4JTA0eFxuIiwKKwkJCQkqcG9ydCwgY2FyZC0+Y3Vycl93cl9wb3J0LCB3cl9iaXRtYXAsCisJCQkJY2FyZC0+bXBfd3JfYml0bWFwKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiZGF0YTogcG9ydD0lZCBtcF93cl9iaXRtYXA9MHglMDR4IC0+IDB4JTA0eFxuIiwKKwkgICAgICAgKnBvcnQsIHdyX2JpdG1hcCwgY2FyZC0+bXBfd3JfYml0bWFwKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBwb2xscyB0aGUgY2FyZCBzdGF0dXMuCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfc2Rpb19wb2xsX2NhcmRfc3RhdHVzKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IGJpdHMpCit7CisJdTMyIHRyaWVzOworCXUzMiBjczsKKworCWZvciAodHJpZXMgPSAwOyB0cmllcyA8IE1BWF9QT0xMX1RSSUVTOyB0cmllcysrKSB7CisJCWlmIChtd2lmaWV4X3JlYWRfcmVnKGFkYXB0ZXIsIENBUkRfU1RBVFVTX1JFRywgJmNzKSkKKwkJCWJyZWFrOworCQllbHNlIGlmICgoY3MgJiBiaXRzKSA9PSBiaXRzKQorCQkJcmV0dXJuIDA7CisKKwkJdWRlbGF5KDEwKTsKKwl9CisKKwlkZXZfZXJyKGFkYXB0ZXItPmRldiwgInBvbGwgY2FyZCBzdGF0dXMgZmFpbGVkLCB0cmllcyA9ICVkXG4iLAorCSAgICAgICB0cmllcyk7CisJcmV0dXJuIC0xOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgZmlybXdhcmUgc3RhdHVzLgorICovCitzdGF0aWMgaW50Cittd2lmaWV4X3NkaW9fcmVhZF9md19zdGF0dXMoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwgdTE2ICpkYXQpCit7CisJdTMyIGZ3czAsIGZ3czE7CisKKwlpZiAobXdpZmlleF9yZWFkX3JlZyhhZGFwdGVyLCBDQVJEX0ZXX1NUQVRVUzBfUkVHLCAmZndzMCkpCisJCXJldHVybiAtMTsKKworCWlmIChtd2lmaWV4X3JlYWRfcmVnKGFkYXB0ZXIsIENBUkRfRldfU1RBVFVTMV9SRUcsICZmd3MxKSkKKwkJcmV0dXJuIC0xOworCisJKmRhdCA9ICh1MTYpICgoZndzMSA8PCA4KSB8IGZ3czApOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIHRoZSBob3N0IGludGVycnVwdC4KKyAqCisgKiBUaGUgaG9zdCBpbnRlcnJ1cHQgbWFzayBpcyByZWFkLCB0aGUgZGlzYWJsZSBiaXQgaXMgcmVzZXQgYW5kCisgKiB3cml0dGVuIGJhY2sgdG8gdGhlIGNhcmQgaG9zdCBpbnRlcnJ1cHQgbWFzayByZWdpc3Rlci4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X3NkaW9fZGlzYWJsZV9ob3N0X2ludChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiBob3N0X2ludF9tYXNrOworCisJLyogUmVhZCBiYWNrIHRoZSBob3N0X2ludF9tYXNrIHJlZ2lzdGVyICovCisJaWYgKG13aWZpZXhfcmVhZF9yZWcoYWRhcHRlciwgSE9TVF9JTlRfTUFTS19SRUcsICZob3N0X2ludF9tYXNrKSkKKwkJcmV0dXJuIC0xOworCisJLyogVXBkYXRlIHdpdGggdGhlIG1hc2sgYW5kIHdyaXRlIGJhY2sgdG8gdGhlIHJlZ2lzdGVyICovCisJaG9zdF9pbnRfbWFzayAmPSB+SE9TVF9JTlRfRElTQUJMRTsKKworCWlmIChtd2lmaWV4X3dyaXRlX3JlZyhhZGFwdGVyLCBIT1NUX0lOVF9NQVNLX1JFRywgaG9zdF9pbnRfbWFzaykpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJkaXNhYmxlIGhvc3QgaW50ZXJydXB0IGZhaWxlZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgaG9zdCBpbnRlcnJ1cHQuCisgKgorICogVGhlIGhvc3QgaW50ZXJydXB0IGVuYWJsZSBtYXNrIGlzIHdyaXR0ZW4gdG8gdGhlIGNhcmQKKyAqIGhvc3QgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9zZGlvX2VuYWJsZV9ob3N0X2ludChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCS8qIFNpbXBseSB3cml0ZSB0aGUgbWFzayB0byB0aGUgcmVnaXN0ZXIgKi8KKwlpZiAobXdpZmlleF93cml0ZV9yZWcoYWRhcHRlciwgSE9TVF9JTlRfTUFTS19SRUcsIEhPU1RfSU5UX0VOQUJMRSkpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJlbmFibGUgaG9zdCBpbnRlcnJ1cHQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgYSBkYXRhIGJ1ZmZlciB0byB0aGUgY2FyZC4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X3NkaW9fY2FyZF90b19ob3N0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICAgICB1MzIgKnR5cGUsIHU4ICpidWZmZXIsCisJCQkJICAgICB1MzIgbnBheWxvYWQsIHUzMiBpb3BvcnQpCit7CisJaW50IHJldDsKKwl1MzIgbmI7CisKKwlpZiAoIWJ1ZmZlcikgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIiVzOiBidWZmZXIgaXMgTlVMTFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0ID0gbXdpZmlleF9yZWFkX2RhdGFfc3luYyhhZGFwdGVyLCBidWZmZXIsIG5wYXlsb2FkLCBpb3BvcnQsIDEpOworCisJaWYgKHJldCkgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIiVzOiByZWFkIGlvbWVtIGZhaWxlZDogJWRcbiIsIF9fZnVuY19fLAorCQkJCXJldCk7CisJCXJldHVybiAtMTsKKwl9CisKKwluYiA9IGxlMTZfdG9fY3B1KCooX19sZTE2ICopIChidWZmZXIpKTsKKwlpZiAobmIgPiBucGF5bG9hZCkgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIiVzOiBpbnZhbGlkIHBhY2tldCwgbmI9JWQsIG5wYXlsb2FkPSVkXG4iLAorCQkJCV9fZnVuY19fLCBuYiwgbnBheWxvYWQpOworCQlyZXR1cm4gLTE7CisJfQorCisJKnR5cGUgPSBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKSAoYnVmZmVyICsgMikpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZG93bmxvYWRzIHRoZSBmaXJtd2FyZSB0byB0aGUgY2FyZC4KKyAqCisgKiBGaXJtd2FyZSBpcyBkb3dubG9hZGVkIHRvIHRoZSBjYXJkIGluIGJsb2Nrcy4gRXZlcnkgYmxvY2sgZG93bmxvYWQKKyAqIGlzIHRlc3RlZCBmb3IgQ1JDIGVycm9ycywgYW5kIHJldHJpZWQgYSBudW1iZXIgb2YgdGltZXMgYmVmb3JlCisgKiByZXR1cm5pbmcgZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X3Byb2dfZndfd19oZWxwZXIoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgICAgc3RydWN0IG13aWZpZXhfZndfaW1hZ2UgKmZ3KQoreworCWludCByZXQ7CisJdTggKmZpcm13YXJlID0gZnctPmZ3X2J1ZjsKKwl1MzIgZmlybXdhcmVfbGVuID0gZnctPmZ3X2xlbjsKKwl1MzIgb2Zmc2V0ID0gMDsKKwl1MzIgYmFzZTAsIGJhc2UxOworCXU4ICpmd2J1ZjsKKwl1MTYgbGVuID0gMDsKKwl1MzIgdHhsZW4sIHR4X2Jsb2NrcyA9IDAsIHRyaWVzOworCXUzMiBpID0gMDsKKworCWlmICghZmlybXdhcmVfbGVuKSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiZmlybXdhcmUgaW1hZ2Ugbm90IGZvdW5kISIKKwkJCQkiIFRlcm1pbmF0aW5nIGRvd25sb2FkXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogZG93bmxvYWRpbmcgRlcgaW1hZ2UgKCVkIGJ5dGVzKVxuIiwKKwkJCWZpcm13YXJlX2xlbik7CisKKwkvKiBBc3N1bWUgdGhhdCB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBpcyA4LWJ5dGUgYWxpZ25lZCAqLworCWZ3YnVmID0ga3phbGxvYyhNV0lGSUVYX1VQTERfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmd2J1ZikgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgInVuYWJsZSB0byBhbGxvYyBidWZmZXIgZm9yIGZpcm13YXJlLiIKKwkJCQkiIFRlcm1pbmF0aW5nIGRvd25sb2FkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogUGVyZm9ybSBmaXJtd2FyZSBkYXRhIHRyYW5zZmVyICovCisJZG8geworCQkvKiBUaGUgaG9zdCBwb2xscyBmb3IgdGhlIEROX0xEX0NBUkRfUkRZIGFuZCBDQVJEX0lPX1JFQURZCisJCSAgIGJpdHMgKi8KKwkJcmV0ID0gbXdpZmlleF9zZGlvX3BvbGxfY2FyZF9zdGF0dXMoYWRhcHRlciwgQ0FSRF9JT19SRUFEWSB8CisJCQkJCQkgICAgRE5fTERfQ0FSRF9SRFkpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIkZXIGRvd25sb2FkIHdpdGggaGVscGVyOiIKKwkJCQkJIiBwb2xsIHN0YXR1cyB0aW1lb3V0IEAgJWRcbiIsIG9mZnNldCk7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQkvKiBNb3JlIGRhdGE/ICovCisJCWlmIChvZmZzZXQgPj0gZmlybXdhcmVfbGVuKQorCQkJYnJlYWs7CisKKwkJZm9yICh0cmllcyA9IDA7IHRyaWVzIDwgTUFYX1BPTExfVFJJRVM7IHRyaWVzKyspIHsKKwkJCXJldCA9IG13aWZpZXhfcmVhZF9yZWcoYWRhcHRlciwgSE9TVF9GMV9SRF9CQVNFXzAsCisJCQkJCSAgICAgICAmYmFzZTApOworCQkJaWYgKHJldCkgeworCQkJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiZGV2IEJBU0UwIHJlZ2lzdGVyIHJlYWQiCisJCQkJCSIgZmFpbGVkOiBiYXNlMD0weCUwNFgoJWQpLiBUZXJtaW5hdGluZyAiCisJCQkJICAgICAgICJkb3dubG9hZFxuIiwgYmFzZTAsIGJhc2UwKTsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisJCQlyZXQgPSBtd2lmaWV4X3JlYWRfcmVnKGFkYXB0ZXIsIEhPU1RfRjFfUkRfQkFTRV8xLAorCQkJCQkgICAgICAgJmJhc2UxKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgImRldiBCQVNFMSByZWdpc3RlciByZWFkIgorCQkJCQkiIGZhaWxlZDogYmFzZTE9MHglMDRYKCVkKS4gVGVybWluYXRpbmcgIgorCQkJCSAgICAgICAiZG93bmxvYWRcbiIsIGJhc2UxLCBiYXNlMSk7CisJCQkJZ290byBkb25lOworCQkJfQorCQkJbGVuID0gKHUxNikgKCgoYmFzZTEgJiAweGZmKSA8PCA4KSB8IChiYXNlMCAmIDB4ZmYpKTsKKworCQkJaWYgKGxlbikKKwkJCQlicmVhazsKKworCQkJdWRlbGF5KDEwKTsKKwkJfQorCisJCWlmICghbGVuKSB7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChsZW4gPiBNV0lGSUVYX1VQTERfU0laRSkgeworCQkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJGVyBkb3dubG9hZCBmYWlsZWQgQCAlZCwiCisJCQkJIiBpbnZhbGlkIGxlbmd0aCAlZFxuIiwgb2Zmc2V0LCBsZW4pOworCQkJcmV0ID0gLTE7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQl0eGxlbiA9IGxlbjsKKworCQlpZiAobGVuICYgQklUKDApKSB7CisJCQlpKys7CisJCQlpZiAoaSA+IE1BWF9XUklURV9JT01FTV9SRVRSWSkgeworCQkJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiRlcgZG93bmxvYWQgZmFpbGVkIEAiCisJCQkJCSIgJWQsIG92ZXIgbWF4IHJldHJ5IGNvdW50XG4iLCBvZmZzZXQpOworCQkJCXJldCA9IC0xOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiQ1JDIGluZGljYXRlZCBieSB0aGUgaGVscGVyOiIKKwkJCSAgICAgICAiIGxlbiA9IDB4JTA0WCwgdHhsZW4gPSAlZFxuIiwgbGVuLCB0eGxlbik7CisJCQlsZW4gJj0gfkJJVCgwKTsKKwkJCS8qIFNldHRpbmcgdGhpcyB0byAwIHRvIHJlc2VuZCBmcm9tIHNhbWUgb2Zmc2V0ICovCisJCQl0eGxlbiA9IDA7CisJCX0gZWxzZSB7CisJCQlpID0gMDsKKworCQkJLyogU2V0IGJsb2Nrc2l6ZSB0byB0cmFuc2ZlciAtIGNoZWNraW5nIGZvciBsYXN0CisJCQkgICBibG9jayAqLworCQkJaWYgKGZpcm13YXJlX2xlbiAtIG9mZnNldCA8IHR4bGVuKQorCQkJCXR4bGVuID0gZmlybXdhcmVfbGVuIC0gb2Zmc2V0OworCisJCQl0eF9ibG9ja3MgPSAodHhsZW4gKyBNV0lGSUVYX1NESU9fQkxPQ0tfU0laRSAtCisJCQkJCTEpIC8gTVdJRklFWF9TRElPX0JMT0NLX1NJWkU7CisKKwkJCS8qIENvcHkgcGF5bG9hZCB0byBidWZmZXIgKi8KKwkJCW1lbW1vdmUoZndidWYsICZmaXJtd2FyZVtvZmZzZXRdLCB0eGxlbik7CisJCX0KKworCQlyZXQgPSBtd2lmaWV4X3dyaXRlX2RhdGFfc3luYyhhZGFwdGVyLCBmd2J1ZiwgdHhfYmxvY2tzICoKKwkJCQkJICAgICAgTVdJRklFWF9TRElPX0JMT0NLX1NJWkUsCisJCQkJCSAgICAgIGFkYXB0ZXItPmlvcG9ydCk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiRlcgZG93bmxvYWQsIHdyaXRlIGlvbWVtICglZCkiCisJCQkJCSIgZmFpbGVkIEAgJWRcbiIsIGksIG9mZnNldCk7CisJCQlpZiAobXdpZmlleF93cml0ZV9yZWcoYWRhcHRlciwgQ09ORklHVVJBVElPTl9SRUcsIDB4MDQpKQorCQkJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAid3JpdGUgQ0ZHIHJlZyBmYWlsZWRcbiIpOworCisJCQlyZXQgPSAtMTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCW9mZnNldCArPSB0eGxlbjsKKwl9IHdoaWxlICh0cnVlKTsKKworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogRlcgZG93bmxvYWQgb3Zlciwgc2l6ZSAlZCBieXRlc1xuIiwKKwkJCQkJCW9mZnNldCk7CisKKwlyZXQgPSAwOworZG9uZToKKwlrZnJlZShmd2J1Zik7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoZSBmaXJtd2FyZSBzdGF0dXMgaW4gY2FyZC4KKyAqCisgKiBUaGUgd2lubmVyIGludGVyZmFjZSBpcyBhbHNvIGRldGVybWluZWQgYnkgdGhpcyBmdW5jdGlvbi4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X2NoZWNrX2Z3X3N0YXR1cyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgIHUzMiBwb2xsX251bSwgaW50ICp3aW5uZXIpCit7CisJaW50IHJldCA9IDA7CisJdTE2IGZpcm13YXJlX3N0YXQ7CisJdTMyIHRyaWVzOworCXUzMiB3aW5uZXJfc3RhdHVzOworCisJLyogV2FpdCBmb3IgZmlybXdhcmUgaW5pdGlhbGl6YXRpb24gZXZlbnQgKi8KKwlmb3IgKHRyaWVzID0gMDsgdHJpZXMgPCBwb2xsX251bTsgdHJpZXMrKykgeworCQlyZXQgPSBtd2lmaWV4X3NkaW9fcmVhZF9md19zdGF0dXMoYWRhcHRlciwgJmZpcm13YXJlX3N0YXQpOworCQlpZiAocmV0KQorCQkJY29udGludWU7CisJCWlmIChmaXJtd2FyZV9zdGF0ID09IEZJUk1XQVJFX1JFQURZKSB7CisJCQlyZXQgPSAwOworCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQltZGVsYXkoMTAwKTsKKwkJCXJldCA9IC0xOworCQl9CisJfQorCisJaWYgKHdpbm5lciAmJiByZXQpIHsKKwkJaWYgKG13aWZpZXhfcmVhZF9yZWcKKwkJICAgIChhZGFwdGVyLCBDQVJEX0ZXX1NUQVRVUzBfUkVHLCAmd2lubmVyX3N0YXR1cykpCisJCQl3aW5uZXJfc3RhdHVzID0gMDsKKworCQlpZiAod2lubmVyX3N0YXR1cykKKwkJCSp3aW5uZXIgPSAwOworCQllbHNlCisJCQkqd2lubmVyID0gMTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmVhZHMgdGhlIGludGVycnVwdCBzdGF0dXMgZnJvbSBjYXJkLgorICovCitzdGF0aWMgdm9pZCBtd2lmaWV4X2ludGVycnVwdF9zdGF0dXMoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2Rpb19tbWNfY2FyZCAqY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CisJdTMyIHNkaW9faXJlZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG13aWZpZXhfcmVhZF9kYXRhX3N5bmMoYWRhcHRlciwgY2FyZC0+bXBfcmVncywgTUFYX01QX1JFR1MsCisJCQkJICAgUkVHX1BPUlQgfCBNV0lGSUVYX1NESU9fQllURV9NT0RFX01BU0ssCisJCQkJICAgMCkpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJyZWFkIG1wX3JlZ3MgZmFpbGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXNkaW9faXJlZyA9IGNhcmQtPm1wX3JlZ3NbSE9TVF9JTlRTVEFUVVNfUkVHXTsKKwlpZiAoc2Rpb19pcmVnKSB7CisJCS8qCisJCSAqIEROX0xEX0hPU1RfSU5UX1NUQVRVUyBhbmQvb3IgVVBfTERfSE9TVF9JTlRfU1RBVFVTCisJCSAqIENsZWFyIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyCisJCSAqLworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImludDogc2Rpb19pcmVnID0gJSN4XG4iLCBzZGlvX2lyZWcpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+aW50X2xvY2ssIGZsYWdzKTsKKwkJYWRhcHRlci0+aW50X3N0YXR1cyB8PSBzZGlvX2lyZWc7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmludF9sb2NrLCBmbGFncyk7CisJfQorfQorCisvKgorICogU0RJTyBpbnRlcnJ1cHQgaGFuZGxlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIGZyb20gZmlybXdhcmUgYW5kIGFzc2lnbnMKKyAqIHRoZSBtYWluIHByb2Nlc3MgaW4gd29ya3F1ZXVlIHdoaWNoIHdpbGwgaGFuZGxlIHRoZSBpbnRlcnJ1cHQuCisgKi8KK3N0YXRpYyB2b2lkCittd2lmaWV4X3NkaW9faW50ZXJydXB0KHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpCit7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3Qgc2Rpb19tbWNfY2FyZCAqY2FyZDsKKworCWNhcmQgPSBzZGlvX2dldF9kcnZkYXRhKGZ1bmMpOworCWlmICghY2FyZCB8fCAhY2FyZC0+YWRhcHRlcikgeworCQlwcl9kZWJ1ZygiaW50OiBmdW5jPSVwIGNhcmQ9JXAgYWRhcHRlcj0lcFxuIiwKKwkJICAgICAgIGZ1bmMsIGNhcmQsIGNhcmQgPyBjYXJkLT5hZGFwdGVyIDogTlVMTCk7CisJCXJldHVybjsKKwl9CisJYWRhcHRlciA9IGNhcmQtPmFkYXB0ZXI7CisKKwlpZiAoYWRhcHRlci0+c3VycHJpc2VfcmVtb3ZlZCkKKwkJcmV0dXJuOworCisJaWYgKCFhZGFwdGVyLT5wcHNfdWFwc2RfbW9kZSAmJiBhZGFwdGVyLT5wc19zdGF0ZSA9PSBQU19TVEFURV9TTEVFUCkKKwkJYWRhcHRlci0+cHNfc3RhdGUgPSBQU19TVEFURV9BV0FLRTsKKworCW13aWZpZXhfaW50ZXJydXB0X3N0YXR1cyhhZGFwdGVyKTsKKwlxdWV1ZV93b3JrKGFkYXB0ZXItPndvcmtxdWV1ZSwgJmFkYXB0ZXItPm1haW5fd29yayk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGRlY29kZXMgYSByZWNlaXZlZCBwYWNrZXQuCisgKgorICogQmFzZWQgb24gdGhlIHR5cGUsIHRoZSBwYWNrZXQgaXMgdHJlYXRlZCBhcyBlaXRoZXIgYSBkYXRhLCBvcgorICogYSBjb21tYW5kIHJlc3BvbnNlLCBvciBhbiBldmVudCwgYW5kIHRoZSBjb3JyZWN0IGhhbmRsZXIKKyAqIGZ1bmN0aW9uIGlzIGludm9rZWQuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9kZWNvZGVfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IsIHUzMiB1cGxkX3R5cCkKK3sKKwl1OCAqY21kX2J1ZjsKKworCXNrYl9wdWxsKHNrYiwgSU5URl9IRUFERVJfTEVOKTsKKworCXN3aXRjaCAodXBsZF90eXApIHsKKwljYXNlIE1XSUZJRVhfVFlQRV9EQVRBOgorCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IC0tLSBSeDogRGF0YSBwYWNrZXQgLS0tXG4iKTsKKwkJbXdpZmlleF9oYW5kbGVfcnhfcGFja2V0KGFkYXB0ZXIsIHNrYik7CisJCWJyZWFrOworCisJY2FzZSBNV0lGSUVYX1RZUEVfQ01EOgorCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IC0tLSBSeDogQ21kIFJlc3BvbnNlIC0tLVxuIik7CisJCS8qIHRha2UgY2FyZSBvZiBjdXJyX2NtZCA9IE5VTEwgY2FzZSAqLworCQlpZiAoIWFkYXB0ZXItPmN1cnJfY21kKSB7CisJCQljbWRfYnVmID0gYWRhcHRlci0+dXBsZF9idWY7CisKKwkJCWlmIChhZGFwdGVyLT5wc19zdGF0ZSA9PSBQU19TVEFURV9TTEVFUF9DRk0pCisJCQkJbXdpZmlleF9wcm9jZXNzX3NsZWVwX2NvbmZpcm1fcmVzcChhZGFwdGVyLAorCQkJCQkJCXNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCisJCQltZW1jcHkoY21kX2J1Ziwgc2tiLT5kYXRhLCBtaW5fdCh1MzIsCisJCQkJICAgICAgIE1XSUZJRVhfU0laRV9PRl9DTURfQlVGRkVSLCBza2ItPmxlbikpOworCisJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQl9IGVsc2UgeworCQkJYWRhcHRlci0+Y21kX3Jlc3BfcmVjZWl2ZWQgPSB0cnVlOworCQkJYWRhcHRlci0+Y3Vycl9jbWQtPnJlc3Bfc2tiID0gc2tiOworCQl9CisJCWJyZWFrOworCisJY2FzZSBNV0lGSUVYX1RZUEVfRVZFTlQ6CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogLS0tIFJ4OiBFdmVudCAtLS1cbiIpOworCQlhZGFwdGVyLT5ldmVudF9jYXVzZSA9ICoodTMyICopIHNrYi0+ZGF0YTsKKworCQlza2JfcHVsbChza2IsIE1XSUZJRVhfRVZFTlRfSEVBREVSX0xFTik7CisKKwkJaWYgKChza2ItPmxlbiA+IDApICYmIChza2ItPmxlbiAgPCBNQVhfRVZFTlRfU0laRSkpCisJCQltZW1jcHkoYWRhcHRlci0+ZXZlbnRfYm9keSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisKKwkJLyogZXZlbnQgY2F1c2UgaGFzIGJlZW4gc2F2ZWQgdG8gYWRhcHRlci0+ZXZlbnRfY2F1c2UgKi8KKwkJYWRhcHRlci0+ZXZlbnRfcmVjZWl2ZWQgPSB0cnVlOworCQlhZGFwdGVyLT5ldmVudF9za2IgPSBza2I7CisKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgInVua25vd24gdXBsb2FkIHR5cGUgJSN4XG4iLCB1cGxkX3R5cCk7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiB0cmFuc2ZlcnMgcmVjZWl2ZWQgcGFja2V0cyBmcm9tIGNhcmQgdG8gZHJpdmVyLCBwZXJmb3JtaW5nCisgKiBhZ2dyZWdhdGlvbiBpZiByZXF1aXJlZC4KKyAqCisgKiBGb3IgZGF0YSByZWNlaXZlZCBvbiBjb250cm9sIHBvcnQsIG9yIGlmIGFnZ3JlZ2F0aW9uIGlzIGRpc2FibGVkLCB0aGUKKyAqIHJlY2VpdmVkIGJ1ZmZlcnMgYXJlIHVwbG9hZGVkIGFzIHNlcGFyYXRlIHBhY2tldHMuIEhvd2V2ZXIsIGlmIGFnZ3JlZ2F0aW9uCisgKiBpcyBlbmFibGVkIGFuZCByZXF1aXJlZCwgdGhlIGJ1ZmZlcnMgYXJlIGNvcGllZCBvbnRvIGFuIGFnZ3JlZ2F0aW9uIGJ1ZmZlciwKKyAqIHByb3ZpZGVkIHRoZXJlIGlzIHNwYWNlIGxlZnQsIHByb2Nlc3NlZCBhbmQgZmluYWxseSB1cGxvYWRlZC4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X3NkaW9fY2FyZF90b19ob3N0X21wX2FnZ3Ioc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBwb3J0KQoreworCXN0cnVjdCBzZGlvX21tY19jYXJkICpjYXJkID0gYWRhcHRlci0+Y2FyZDsKKwlzMzIgZl9kb19yeF9hZ2dyID0gMDsKKwlzMzIgZl9kb19yeF9jdXIgPSAwOworCXMzMiBmX2FnZ3JfY3VyID0gMDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2RlYWdncjsKKwl1MzIgcGluZDsKKwl1MzIgcGt0X2xlbiwgcGt0X3R5cGUgPSAwOworCXU4ICpjdXJyX3B0cjsKKwl1MzIgcnhfbGVuID0gc2tiLT5sZW47CisKKwlpZiAocG9ydCA9PSBDVFJMX1BPUlQpIHsKKwkJLyogUmVhZCB0aGUgY29tbWFuZCBSZXNwIHdpdGhvdXQgYWdnciAqLworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86ICVzOiBubyBhZ2dyZWdhdGlvbiBmb3IgY21kICIKKwkJCQkicmVzcG9uc2VcbiIsIF9fZnVuY19fKTsKKworCQlmX2RvX3J4X2N1ciA9IDE7CisJCWdvdG8gcnhfY3Vycl9zaW5nbGU7CisJfQorCisJaWYgKCFjYXJkLT5tcGFfcnguZW5hYmxlZCkgeworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86ICVzOiByeCBhZ2dyZWdhdGlvbiBkaXNhYmxlZFxuIiwKKwkJCQkJCV9fZnVuY19fKTsKKworCQlmX2RvX3J4X2N1ciA9IDE7CisJCWdvdG8gcnhfY3Vycl9zaW5nbGU7CisJfQorCisJaWYgKGNhcmQtPm1wX3JkX2JpdG1hcCAmICh+KCh1MTYpIENUUkxfUE9SVF9NQVNLKSkpIHsKKwkJLyogU29tZSBtb3JlIGRhdGEgUlggcGVuZGluZyAqLworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86ICVzOiBub3QgbGFzdCBwYWNrZXRcbiIsIF9fZnVuY19fKTsKKworCQlpZiAoTVBfUlhfQUdHUl9JTl9QUk9HUkVTUyhjYXJkKSkgeworCQkJaWYgKE1QX1JYX0FHR1JfQlVGX0hBU19ST09NKGNhcmQsIHNrYi0+bGVuKSkgeworCQkJCWZfYWdncl9jdXIgPSAxOworCQkJfSBlbHNlIHsKKwkJCQkvKiBObyByb29tIGluIEFnZ3IgYnVmLCBkbyByeCBhZ2dyIG5vdyAqLworCQkJCWZfZG9fcnhfYWdnciA9IDE7CisJCQkJZl9kb19yeF9jdXIgPSAxOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogUnggYWdnciBub3QgaW4gcHJvZ3Jlc3MgKi8KKwkJCWZfYWdncl9jdXIgPSAxOworCQl9CisKKwl9IGVsc2UgeworCQkvKiBObyBtb3JlIGRhdGEgUlggcGVuZGluZyAqLworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86ICVzOiBsYXN0IHBhY2tldFxuIiwgX19mdW5jX18pOworCisJCWlmIChNUF9SWF9BR0dSX0lOX1BST0dSRVNTKGNhcmQpKSB7CisJCQlmX2RvX3J4X2FnZ3IgPSAxOworCQkJaWYgKE1QX1JYX0FHR1JfQlVGX0hBU19ST09NKGNhcmQsIHNrYi0+bGVuKSkKKwkJCQlmX2FnZ3JfY3VyID0gMTsKKwkJCWVsc2UKKwkJCQkvKiBObyByb29tIGluIEFnZ3IgYnVmLCBkbyByeCBhZ2dyIG5vdyAqLworCQkJCWZfZG9fcnhfY3VyID0gMTsKKwkJfSBlbHNlIHsKKwkJCWZfZG9fcnhfY3VyID0gMTsKKwkJfQorCX0KKworCWlmIChmX2FnZ3JfY3VyKSB7CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogY3VycmVudCBwYWNrZXQgYWdncmVnYXRpb25cbiIpOworCQkvKiBDdXJyIHBrdCBjYW4gYmUgYWdncmVnYXRlZCAqLworCQlNUF9SWF9BR0dSX1NFVFVQKGNhcmQsIHNrYiwgcG9ydCk7CisKKwkJaWYgKE1QX1JYX0FHR1JfUEtUX0xJTUlUX1JFQUNIRUQoY2FyZCkgfHwKKwkJICAgIE1QX1JYX0FHR1JfUE9SVF9MSU1JVF9SRUFDSEVEKGNhcmQpKSB7CisJCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86ICVzOiBhZ2dyZWdhdGVkIHBhY2tldCAiCisJCQkJCSJsaW1pdCByZWFjaGVkXG4iLCBfX2Z1bmNfXyk7CisJCQkvKiBObyBtb3JlIHBrdHMgYWxsb3dlZCBpbiBBZ2dyIGJ1ZiwgcnggaXQgKi8KKwkJCWZfZG9fcnhfYWdnciA9IDE7CisJCX0KKwl9CisKKwlpZiAoZl9kb19yeF9hZ2dyKSB7CisJCS8qIGRvIGFnZ3IgUlggbm93ICovCisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogZG9fcnhfYWdncjogbnVtIG9mIHBhY2tldHM6ICVkXG4iLAorCQkgICAgICAgY2FyZC0+bXBhX3J4LnBrdF9jbnQpOworCisJCWlmIChtd2lmaWV4X3JlYWRfZGF0YV9zeW5jKGFkYXB0ZXIsIGNhcmQtPm1wYV9yeC5idWYsCisJCQkJCSAgIGNhcmQtPm1wYV9yeC5idWZfbGVuLAorCQkJCQkgICAoYWRhcHRlci0+aW9wb3J0IHwgMHgxMDAwIHwKKwkJCQkJICAgIChjYXJkLT5tcGFfcngucG9ydHMgPDwgNCkpICsKKwkJCQkJICAgY2FyZC0+bXBhX3J4LnN0YXJ0X3BvcnQsIDEpKQorCQkJcmV0dXJuIC0xOworCisJCWN1cnJfcHRyID0gY2FyZC0+bXBhX3J4LmJ1ZjsKKworCQlmb3IgKHBpbmQgPSAwOyBwaW5kIDwgY2FyZC0+bXBhX3J4LnBrdF9jbnQ7IHBpbmQrKykgeworCisJCQkvKiBnZXQgY3VyciBQS1QgbGVuICYgdHlwZSAqLworCQkJcGt0X2xlbiA9ICoodTE2ICopICZjdXJyX3B0clswXTsKKwkJCXBrdF90eXBlID0gKih1MTYgKikgJmN1cnJfcHRyWzJdOworCisJCQkvKiBjb3B5IHBrdCB0byBkZWFnZ3IgYnVmICovCisJCQlza2JfZGVhZ2dyID0gY2FyZC0+bXBhX3J4LnNrYl9hcnJbcGluZF07CisKKwkJCWlmICgocGt0X3R5cGUgPT0gTVdJRklFWF9UWVBFX0RBVEEpICYmIChwa3RfbGVuIDw9CisJCQkJCSBjYXJkLT5tcGFfcngubGVuX2FycltwaW5kXSkpIHsKKworCQkJCW1lbWNweShza2JfZGVhZ2dyLT5kYXRhLCBjdXJyX3B0ciwgcGt0X2xlbik7CisKKwkJCQlza2JfdHJpbShza2JfZGVhZ2dyLCBwa3RfbGVuKTsKKworCQkJCS8qIFByb2Nlc3MgZGUtYWdnciBwYWNrZXQgKi8KKwkJCQltd2lmaWV4X2RlY29kZV9yeF9wYWNrZXQoYWRhcHRlciwgc2tiX2RlYWdnciwKKwkJCQkJCQkgcGt0X3R5cGUpOworCQkJfSBlbHNlIHsKKwkJCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIndyb25nIGFnZ3IgcGt0OiIKKwkJCQkJIiB0eXBlPSVkIGxlbj0lZCBtYXhfbGVuPSVkXG4iLAorCQkJCQlwa3RfdHlwZSwgcGt0X2xlbiwKKwkJCQkJY2FyZC0+bXBhX3J4Lmxlbl9hcnJbcGluZF0pOworCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYl9kZWFnZ3IpOworCQkJfQorCQkJY3Vycl9wdHIgKz0gY2FyZC0+bXBhX3J4Lmxlbl9hcnJbcGluZF07CisJCX0KKwkJTVBfUlhfQUdHUl9CVUZfUkVTRVQoY2FyZCk7CisJfQorCityeF9jdXJyX3NpbmdsZToKKwlpZiAoZl9kb19yeF9jdXIpIHsKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBSWDogcG9ydDogJWQsIHJ4X2xlbjogJWRcbiIsCisJCQlwb3J0LCByeF9sZW4pOworCisJCWlmIChtd2lmaWV4X3NkaW9fY2FyZF90b19ob3N0KGFkYXB0ZXIsICZwa3RfdHlwZSwKKwkJCQkJICAgICAgc2tiLT5kYXRhLCBza2ItPmxlbiwKKwkJCQkJICAgICAgYWRhcHRlci0+aW9wb3J0ICsgcG9ydCkpCisJCQlyZXR1cm4gLTE7CisKKwkJbXdpZmlleF9kZWNvZGVfcnhfcGFja2V0KGFkYXB0ZXIsIHNrYiwgcGt0X3R5cGUpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIGN1cnJlbnQgaW50ZXJydXB0IHN0YXR1cy4KKyAqCisgKiBUaGUgZm9sbG93aW5nIGludGVycnVwdHMgYXJlIGNoZWNrZWQgYW5kIGhhbmRsZWQgYnkgdGhpcyBmdW5jdGlvbiAtCisgKiAgICAgIC0gRGF0YSBzZW50CisgKiAgICAgIC0gQ29tbWFuZCBzZW50CisgKiAgICAgIC0gUGFja2V0cyByZWNlaXZlZAorICoKKyAqIFNpbmNlIHRoZSBmaXJtd2FyZSBkb2VzIG5vdCBnZW5lcmF0ZSBkb3dubG9hZCByZWFkeSBpbnRlcnJ1cHQgaWYgdGhlCisgKiBwb3J0IHVwZGF0ZWQgaXMgY29tbWFuZCBwb3J0IG9ubHksIGNvbW1hbmQgc2VudCBpbnRlcnJ1cHQgY2hlY2tpbmcKKyAqIHNob3VsZCBiZSBkb25lIG1hbnVhbGx5LCBhbmQgZm9yIGV2ZXJ5IFNESU8gaW50ZXJydXB0LgorICoKKyAqIEluIGNhc2Ugb2YgUnggcGFja2V0cyByZWNlaXZlZCwgdGhlIHBhY2tldHMgYXJlIHVwbG9hZGVkIGZyb20gY2FyZCB0bworICogaG9zdCBhbmQgcHJvY2Vzc2VkIGFjY29yZGluZ2x5LgorICovCitzdGF0aWMgaW50IG13aWZpZXhfcHJvY2Vzc19pbnRfc3RhdHVzKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNkaW9fbW1jX2NhcmQgKmNhcmQgPSBhZGFwdGVyLT5jYXJkOworCWludCByZXQgPSAwOworCXU4IHNkaW9faXJlZzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXU4IHBvcnQgPSBDVFJMX1BPUlQ7CisJdTMyIGxlbl9yZWdfbCwgbGVuX3JlZ191OworCXUzMiByeF9ibG9ja3M7CisJdTE2IHJ4X2xlbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmludF9sb2NrLCBmbGFncyk7CisJc2Rpb19pcmVnID0gYWRhcHRlci0+aW50X3N0YXR1czsKKwlhZGFwdGVyLT5pbnRfc3RhdHVzID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5pbnRfbG9jaywgZmxhZ3MpOworCisJaWYgKCFzZGlvX2lyZWcpCisJCXJldHVybiByZXQ7CisKKwlpZiAoc2Rpb19pcmVnICYgRE5fTERfSE9TVF9JTlRfU1RBVFVTKSB7CisJCWNhcmQtPm1wX3dyX2JpdG1hcCA9ICgodTE2KSBjYXJkLT5tcF9yZWdzW1dSX0JJVE1BUF9VXSkgPDwgODsKKwkJY2FyZC0+bXBfd3JfYml0bWFwIHw9ICh1MTYpIGNhcmQtPm1wX3JlZ3NbV1JfQklUTUFQX0xdOworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImludDogRE5MRDogd3JfYml0bWFwPTB4JTA0eFxuIiwKKwkJCQljYXJkLT5tcF93cl9iaXRtYXApOworCQlpZiAoYWRhcHRlci0+ZGF0YV9zZW50ICYmCisJCSAgICAoY2FyZC0+bXBfd3JfYml0bWFwICYgY2FyZC0+bXBfZGF0YV9wb3J0X21hc2spKSB7CisJCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwKKwkJCQkiaW5mbzogIDwtLS0gVHggRE9ORSBJbnRlcnJ1cHQgLS0tPlxuIik7CisJCQlhZGFwdGVyLT5kYXRhX3NlbnQgPSBmYWxzZTsKKwkJfQorCX0KKworCS8qIEFzIGZpcm13YXJlIHdpbGwgbm90IGdlbmVyYXRlIGRvd25sb2FkIHJlYWR5IGludGVycnVwdCBpZiB0aGUgcG9ydAorCSAgIHVwZGF0ZWQgaXMgY29tbWFuZCBwb3J0IG9ubHksIGNtZF9zZW50IHNob3VsZCBiZSBkb25lIGZvciBhbnkgU0RJTworCSAgIGludGVycnVwdC4gKi8KKwlpZiAoYWRhcHRlci0+Y21kX3NlbnQpIHsKKwkJLyogQ2hlY2sgaWYgZmlybXdhcmUgaGFzIGF0dGFjaCBidWZmZXIgYXQgY29tbWFuZCBwb3J0IGFuZAorCQkgICB1cGRhdGUganVzdCB0aGF0IGluIHdyX2JpdF9tYXAuICovCisJCWNhcmQtPm1wX3dyX2JpdG1hcCB8PQorCQkJKHUxNikgY2FyZC0+bXBfcmVnc1tXUl9CSVRNQVBfTF0gJiBDVFJMX1BPUlRfTUFTSzsKKwkJaWYgKGNhcmQtPm1wX3dyX2JpdG1hcCAmIENUUkxfUE9SVF9NQVNLKQorCQkJYWRhcHRlci0+Y21kX3NlbnQgPSBmYWxzZTsKKwl9CisKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IGNtZF9zZW50PSVkIGRhdGFfc2VudD0lZFxuIiwKKwkgICAgICAgYWRhcHRlci0+Y21kX3NlbnQsIGFkYXB0ZXItPmRhdGFfc2VudCk7CisJaWYgKHNkaW9faXJlZyAmIFVQX0xEX0hPU1RfSU5UX1NUQVRVUykgeworCQljYXJkLT5tcF9yZF9iaXRtYXAgPSAoKHUxNikgY2FyZC0+bXBfcmVnc1tSRF9CSVRNQVBfVV0pIDw8IDg7CisJCWNhcmQtPm1wX3JkX2JpdG1hcCB8PSAodTE2KSBjYXJkLT5tcF9yZWdzW1JEX0JJVE1BUF9MXTsKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbnQ6IFVQTEQ6IHJkX2JpdG1hcD0weCUwNHhcbiIsCisJCQkJY2FyZC0+bXBfcmRfYml0bWFwKTsKKworCQl3aGlsZSAodHJ1ZSkgeworCQkJcmV0ID0gbXdpZmlleF9nZXRfcmRfcG9ydChhZGFwdGVyLCAmcG9ydCk7CisJCQlpZiAocmV0KSB7CisJCQkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsCisJCQkJCSJpbmZvOiBubyBtb3JlIHJkX3BvcnQgYXZhaWxhYmxlXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWxlbl9yZWdfbCA9IFJEX0xFTl9QMF9MICsgKHBvcnQgPDwgMSk7CisJCQlsZW5fcmVnX3UgPSBSRF9MRU5fUDBfVSArIChwb3J0IDw8IDEpOworCQkJcnhfbGVuID0gKCh1MTYpIGNhcmQtPm1wX3JlZ3NbbGVuX3JlZ191XSkgPDwgODsKKwkJCXJ4X2xlbiB8PSAodTE2KSBjYXJkLT5tcF9yZWdzW2xlbl9yZWdfbF07CisJCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IFJYOiBwb3J0PSVkIHJ4X2xlbj0ldVxuIiwKKwkJCQkJcG9ydCwgcnhfbGVuKTsKKwkJCXJ4X2Jsb2NrcyA9CisJCQkJKHJ4X2xlbiArIE1XSUZJRVhfU0RJT19CTE9DS19TSVpFIC0KKwkJCQkgMSkgLyBNV0lGSUVYX1NESU9fQkxPQ0tfU0laRTsKKwkJCWlmIChyeF9sZW4gPD0gSU5URl9IRUFERVJfTEVOCisJCQkgICAgfHwgKHJ4X2Jsb2NrcyAqIE1XSUZJRVhfU0RJT19CTE9DS19TSVpFKSA+CisJCQkgICAgTVdJRklFWF9SWF9EQVRBX0JVRl9TSVpFKSB7CisJCQkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJpbnZhbGlkIHJ4X2xlbj0lZFxuIiwKKwkJCQkJCXJ4X2xlbik7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJcnhfbGVuID0gKHUxNikgKHJ4X2Jsb2NrcyAqIE1XSUZJRVhfU0RJT19CTE9DS19TSVpFKTsKKworCQkJc2tiID0gZGV2X2FsbG9jX3NrYihyeF9sZW4pOworCisJCQlpZiAoIXNrYikgeworCQkJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiJXM6IGZhaWxlZCB0byBhbGxvYyBza2IiLAorCQkJCQkJCQlfX2Z1bmNfXyk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCisJCQlza2JfcHV0KHNrYiwgcnhfbGVuKTsKKworCQkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiByeF9sZW4gPSAlZCBza2ItPmxlbiA9ICVkXG4iLAorCQkJCQlyeF9sZW4sIHNrYi0+bGVuKTsKKworCQkJaWYgKG13aWZpZXhfc2Rpb19jYXJkX3RvX2hvc3RfbXBfYWdncihhZGFwdGVyLCBza2IsCisJCQkJCQkJICAgICAgcG9ydCkpIHsKKwkJCQl1MzIgY3IgPSAwOworCisJCQkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJjYXJkX3RvX2hvc3RfbXBhIGZhaWxlZDoiCisJCQkJCQkiIGludCBzdGF0dXM9JSN4XG4iLCBzZGlvX2lyZWcpOworCQkJCWlmIChtd2lmaWV4X3JlYWRfcmVnKGFkYXB0ZXIsCisJCQkJCQkgICAgIENPTkZJR1VSQVRJT05fUkVHLCAmY3IpKQorCQkJCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwKKwkJCQkJCQkicmVhZCBDRkcgcmVnIGZhaWxlZFxuIik7CisKKwkJCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwKKwkJCQkJCSJpbmZvOiBDRkcgcmVnIHZhbCA9ICVkXG4iLCBjcik7CisJCQkJaWYgKG13aWZpZXhfd3JpdGVfcmVnKGFkYXB0ZXIsCisJCQkJCQkgICAgICBDT05GSUdVUkFUSU9OX1JFRywKKwkJCQkJCSAgICAgIChjciB8IDB4MDQpKSkKKwkJCQkJZGV2X2VycihhZGFwdGVyLT5kZXYsCisJCQkJCQkJIndyaXRlIENGRyByZWcgZmFpbGVkXG4iKTsKKworCQkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogd3JpdGUgc3VjY2Vzc1xuIik7CisJCQkJaWYgKG13aWZpZXhfcmVhZF9yZWcoYWRhcHRlciwKKwkJCQkJCSAgICAgQ09ORklHVVJBVElPTl9SRUcsICZjcikpCisJCQkJCWRldl9lcnIoYWRhcHRlci0+ZGV2LAorCQkJCQkJCSJyZWFkIENGRyByZWcgZmFpbGVkXG4iKTsKKworCQkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LAorCQkJCQkJImluZm86IENGRyByZWcgdmFsID0leFxuIiwgY3IpOworCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGFnZ3JlZ2F0ZXMgdHJhbnNtaXNzaW9uIGJ1ZmZlcnMgaW4gZHJpdmVyIGFuZCBkb3dubG9hZHMKKyAqIHRoZSBhZ2dyZWdhdGVkIHBhY2tldCB0byBjYXJkLgorICoKKyAqIFRoZSBpbmRpdmlkdWFsIHBhY2tldHMgYXJlIGFnZ3JlZ2F0ZWQgYnkgY29weWluZyBpbnRvIGFuIGFnZ3JlZ2F0aW9uCisgKiBidWZmZXIgYW5kIHRoZW4gZG93bmxvYWRlZCB0byB0aGUgY2FyZC4gUHJldmlvdXMgdW5zZW50IHBhY2tldHMgaW4gdGhlCisgKiBhZ2dyZWdhdGlvbiBidWZmZXIgYXJlIHByZS1jb3BpZWQgZmlyc3QgYmVmb3JlIG5ldyBwYWNrZXRzIGFyZSBhZGRlZC4KKyAqIEFnZ3JlZ2F0aW9uIGlzIGRvbmUgdGlsbCB0aGVyZSBpcyBzcGFjZSBsZWZ0IGluIHRoZSBhZ2dyZWdhdGlvbiBidWZmZXIsCisgKiBvciB0aWxsIG5ldyBwYWNrZXRzIGFyZSBhdmFpbGFibGUuCisgKgorICogVGhlIGZ1bmN0aW9uIHdpbGwgb25seSBkb3dubG9hZCB0aGUgcGFja2V0IHRvIHRoZSBjYXJkIHdoZW4gYWdncmVnYXRpb24KKyAqIHN0b3BzLCBvdGhlcndpc2UgaXQgd2lsbCBqdXN0IGFnZ3JlZ2F0ZSB0aGUgcGFja2V0IGluIGFnZ3JlZ2F0aW9uIGJ1ZmZlcgorICogYW5kIHJldHVybi4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X2hvc3RfdG9fY2FyZF9tcF9hZ2dyKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJCXU4ICpwYXlsb2FkLCB1MzIgcGt0X2xlbiwgdTggcG9ydCwKKwkJCQkJdTMyIG5leHRfcGt0X2xlbikKK3sKKwlzdHJ1Y3Qgc2Rpb19tbWNfY2FyZCAqY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CisJaW50IHJldCA9IDA7CisJczMyIGZfc2VuZF9hZ2dyX2J1ZiA9IDA7CisJczMyIGZfc2VuZF9jdXJfYnVmID0gMDsKKwlzMzIgZl9wcmVjb3B5X2N1cl9idWYgPSAwOworCXMzMiBmX3Bvc3Rjb3B5X2N1cl9idWYgPSAwOworCisJaWYgKCghY2FyZC0+bXBhX3R4LmVuYWJsZWQpIHx8IChwb3J0ID09IENUUkxfUE9SVCkpIHsKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiAlczogdHggYWdncmVnYXRpb24gZGlzYWJsZWRcbiIsCisJCQkJCQlfX2Z1bmNfXyk7CisKKwkJZl9zZW5kX2N1cl9idWYgPSAxOworCQlnb3RvIHR4X2N1cnJfc2luZ2xlOworCX0KKworCWlmIChuZXh0X3BrdF9sZW4pIHsKKwkJLyogTW9yZSBwa3QgaW4gVFggcXVldWUgKi8KKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiAlczogbW9yZSBwYWNrZXRzIGluIHF1ZXVlLlxuIiwKKwkJCQkJCV9fZnVuY19fKTsKKworCQlpZiAoTVBfVFhfQUdHUl9JTl9QUk9HUkVTUyhjYXJkKSkgeworCQkJaWYgKCFNUF9UWF9BR0dSX1BPUlRfTElNSVRfUkVBQ0hFRChjYXJkKSAmJgorCQkJICAgIE1QX1RYX0FHR1JfQlVGX0hBU19ST09NKGNhcmQsIHBrdF9sZW4pKSB7CisJCQkJZl9wcmVjb3B5X2N1cl9idWYgPSAxOworCisJCQkJaWYgKCEoY2FyZC0+bXBfd3JfYml0bWFwICYKKwkJCQkJCSgxIDw8IGNhcmQtPmN1cnJfd3JfcG9ydCkpCisJCQkJCQl8fCAhTVBfVFhfQUdHUl9CVUZfSEFTX1JPT00oCisJCQkJCQkJY2FyZCwgbmV4dF9wa3RfbGVuKSkKKwkJCQkJZl9zZW5kX2FnZ3JfYnVmID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJLyogTm8gcm9vbSBpbiBBZ2dyIGJ1Ziwgc2VuZCBpdCAqLworCQkJCWZfc2VuZF9hZ2dyX2J1ZiA9IDE7CisKKwkJCQlpZiAoTVBfVFhfQUdHUl9QT1JUX0xJTUlUX1JFQUNIRUQoY2FyZCkgfHwKKwkJCQkgICAgIShjYXJkLT5tcF93cl9iaXRtYXAgJgorCQkJCSAgICAgICgxIDw8IGNhcmQtPmN1cnJfd3JfcG9ydCkpKQorCQkJCQlmX3NlbmRfY3VyX2J1ZiA9IDE7CisJCQkJZWxzZQorCQkJCQlmX3Bvc3Rjb3B5X2N1cl9idWYgPSAxOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKE1QX1RYX0FHR1JfQlVGX0hBU19ST09NKGNhcmQsIHBrdF9sZW4pCisJCQkgICAgJiYgKGNhcmQtPm1wX3dyX2JpdG1hcCAmICgxIDw8IGNhcmQtPmN1cnJfd3JfcG9ydCkpKQorCQkJCWZfcHJlY29weV9jdXJfYnVmID0gMTsKKwkJCWVsc2UKKwkJCQlmX3NlbmRfY3VyX2J1ZiA9IDE7CisJCX0KKwl9IGVsc2UgeworCQkvKiBMYXN0IHBrdCBpbiBUWCBxdWV1ZSAqLworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86ICVzOiBMYXN0IHBhY2tldCBpbiBUeCBRdWV1ZS5cbiIsCisJCQkJCQlfX2Z1bmNfXyk7CisKKwkJaWYgKE1QX1RYX0FHR1JfSU5fUFJPR1JFU1MoY2FyZCkpIHsKKwkJCS8qIHNvbWUgcGFja3MgaW4gQWdnciBidWYgYWxyZWFkeSAqLworCQkJZl9zZW5kX2FnZ3JfYnVmID0gMTsKKworCQkJaWYgKE1QX1RYX0FHR1JfQlVGX0hBU19ST09NKGNhcmQsIHBrdF9sZW4pKQorCQkJCWZfcHJlY29weV9jdXJfYnVmID0gMTsKKwkJCWVsc2UKKwkJCQkvKiBObyByb29tIGluIEFnZ3IgYnVmLCBzZW5kIGl0ICovCisJCQkJZl9zZW5kX2N1cl9idWYgPSAxOworCQl9IGVsc2UgeworCQkJZl9zZW5kX2N1cl9idWYgPSAxOworCQl9CisJfQorCisJaWYgKGZfcHJlY29weV9jdXJfYnVmKSB7CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiZGF0YTogJXM6IHByZWNvcHkgY3VycmVudCBidWZmZXJcbiIsCisJCQkJCQlfX2Z1bmNfXyk7CisJCU1QX1RYX0FHR1JfQlVGX1BVVChjYXJkLCBwYXlsb2FkLCBwa3RfbGVuLCBwb3J0KTsKKworCQlpZiAoTVBfVFhfQUdHUl9QS1RfTElNSVRfUkVBQ0hFRChjYXJkKSB8fAorCQkgICAgTVBfVFhfQUdHUl9QT1JUX0xJTUlUX1JFQUNIRUQoY2FyZCkpCisJCQkvKiBObyBtb3JlIHBrdHMgYWxsb3dlZCBpbiBBZ2dyIGJ1Ziwgc2VuZCBpdCAqLworCQkJZl9zZW5kX2FnZ3JfYnVmID0gMTsKKwl9CisKKwlpZiAoZl9zZW5kX2FnZ3JfYnVmKSB7CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiZGF0YTogJXM6IHNlbmQgYWdnciBidWZmZXI6ICVkICVkXG4iLAorCQkJCV9fZnVuY19fLAorCQkJCWNhcmQtPm1wYV90eC5zdGFydF9wb3J0LCBjYXJkLT5tcGFfdHgucG9ydHMpOworCQlyZXQgPSBtd2lmaWV4X3dyaXRlX2RhdGFfdG9fY2FyZChhZGFwdGVyLCBjYXJkLT5tcGFfdHguYnVmLAorCQkJCQkJIGNhcmQtPm1wYV90eC5idWZfbGVuLAorCQkJCQkJIChhZGFwdGVyLT5pb3BvcnQgfCAweDEwMDAgfAorCQkJCQkJIChjYXJkLT5tcGFfdHgucG9ydHMgPDwgNCkpICsKKwkJCQkJCSAgY2FyZC0+bXBhX3R4LnN0YXJ0X3BvcnQpOworCisJCU1QX1RYX0FHR1JfQlVGX1JFU0VUKGNhcmQpOworCX0KKwordHhfY3Vycl9zaW5nbGU6CisJaWYgKGZfc2VuZF9jdXJfYnVmKSB7CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiZGF0YTogJXM6IHNlbmQgY3VycmVudCBidWZmZXIgJWRcbiIsCisJCQkJCQlfX2Z1bmNfXywgcG9ydCk7CisJCXJldCA9IG13aWZpZXhfd3JpdGVfZGF0YV90b19jYXJkKGFkYXB0ZXIsIHBheWxvYWQsIHBrdF9sZW4sCisJCQkJCQkgYWRhcHRlci0+aW9wb3J0ICsgcG9ydCk7CisJfQorCisJaWYgKGZfcG9zdGNvcHlfY3VyX2J1ZikgeworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImRhdGE6ICVzOiBwb3N0Y29weSBjdXJyZW50IGJ1ZmZlclxuIiwKKwkJCQkJCV9fZnVuY19fKTsKKwkJTVBfVFhfQUdHUl9CVUZfUFVUKGNhcmQsIHBheWxvYWQsIHBrdF9sZW4sIHBvcnQpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGRvd25sb2FkcyBkYXRhIGZyb20gZHJpdmVyIHRvIGNhcmQuCisgKgorICogQm90aCBjb21tYW5kcyBhbmQgZGF0YSBwYWNrZXRzIGFyZSB0cmFuc2ZlcnJlZCB0byB0aGUgY2FyZCBieSB0aGlzCisgKiBmdW5jdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFkZHMgdGhlIFNESU8gc3BlY2lmaWMgaGVhZGVyIHRvIHRoZSBmcm9udCBvZiB0aGUgYnVmZmVyCisgKiBiZWZvcmUgdHJhbnNmZXJyaW5nLiBUaGUgaGVhZGVyIGNvbnRhaW5zIHRoZSBsZW5ndGggb2YgdGhlIHBhY2tldCBhbmQKKyAqIHRoZSB0eXBlLiBUaGUgZmlybXdhcmUgaGFuZGxlcyB0aGUgcGFja2V0cyBiYXNlZCB1cG9uIHRoaXMgc2V0IHR5cGUuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9zZGlvX2hvc3RfdG9fY2FyZChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgICAgdTggdHlwZSwgdTggKnBheWxvYWQsIHUzMiBwa3RfbGVuLAorCQkJCSAgICAgc3RydWN0IG13aWZpZXhfdHhfcGFyYW0gKnR4X3BhcmFtKQoreworCXN0cnVjdCBzZGlvX21tY19jYXJkICpjYXJkID0gYWRhcHRlci0+Y2FyZDsKKwlpbnQgcmV0OworCXUzMiBidWZfYmxvY2tfbGVuOworCXUzMiBibGtfc2l6ZTsKKwl1OCBwb3J0ID0gQ1RSTF9QT1JUOworCisJLyogQWxsb2NhdGUgYnVmZmVyIGFuZCBjb3B5IHBheWxvYWQgKi8KKwlibGtfc2l6ZSA9IE1XSUZJRVhfU0RJT19CTE9DS19TSVpFOworCWJ1Zl9ibG9ja19sZW4gPSAocGt0X2xlbiArIGJsa19zaXplIC0gMSkgLyBibGtfc2l6ZTsKKwkqKHUxNiAqKSAmcGF5bG9hZFswXSA9ICh1MTYpIHBrdF9sZW47CisJKih1MTYgKikgJnBheWxvYWRbMl0gPSB0eXBlOworCisJLyoKKwkgKiBUaGlzIGlzIFNESU8gc3BlY2lmaWMgaGVhZGVyCisJICogIHUxNiBsZW5ndGgsCisJICogIHUxNiB0eXBlIChNV0lGSUVYX1RZUEVfREFUQSA9IDAsIE1XSUZJRVhfVFlQRV9DTUQgPSAxLAorCSAqICBNV0lGSUVYX1RZUEVfRVZFTlQgPSAzKQorCSAqLworCWlmICh0eXBlID09IE1XSUZJRVhfVFlQRV9EQVRBKSB7CisJCXJldCA9IG13aWZpZXhfZ2V0X3dyX3BvcnRfZGF0YShhZGFwdGVyLCAmcG9ydCk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiJXM6IG5vIHdyX3BvcnQgYXZhaWxhYmxlXG4iLAorCQkJCQkJX19mdW5jX18pOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0gZWxzZSB7CisJCWFkYXB0ZXItPmNtZF9zZW50ID0gdHJ1ZTsKKwkJLyogVHlwZSBtdXN0IGJlIE1XSUZJRVhfVFlQRV9DTUQgKi8KKworCQlpZiAocGt0X2xlbiA8PSBJTlRGX0hFQURFUl9MRU4gfHwKKwkJICAgIHBrdF9sZW4gPiBNV0lGSUVYX1VQTERfU0laRSkKKwkJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiJXM6IHBheWxvYWQ9JXAsIG5iPSVkXG4iLAorCQkJCQlfX2Z1bmNfXywgcGF5bG9hZCwgcGt0X2xlbik7CisJfQorCisJLyogVHJhbnNmZXIgZGF0YSB0byBjYXJkICovCisJcGt0X2xlbiA9IGJ1Zl9ibG9ja19sZW4gKiBibGtfc2l6ZTsKKworCWlmICh0eF9wYXJhbSkKKwkJcmV0ID0gbXdpZmlleF9ob3N0X3RvX2NhcmRfbXBfYWdncihhZGFwdGVyLCBwYXlsb2FkLCBwa3RfbGVuLAorCQkJCXBvcnQsIHR4X3BhcmFtLT5uZXh0X3BrdF9sZW4pOworCWVsc2UKKwkJcmV0ID0gbXdpZmlleF9ob3N0X3RvX2NhcmRfbXBfYWdncihhZGFwdGVyLCBwYXlsb2FkLCBwa3RfbGVuLAorCQkJCXBvcnQsIDApOworCisJaWYgKHJldCkgeworCQlpZiAodHlwZSA9PSBNV0lGSUVYX1RZUEVfQ01EKQorCQkJYWRhcHRlci0+Y21kX3NlbnQgPSBmYWxzZTsKKwkJaWYgKHR5cGUgPT0gTVdJRklFWF9UWVBFX0RBVEEpCisJCQlhZGFwdGVyLT5kYXRhX3NlbnQgPSBmYWxzZTsKKwl9IGVsc2UgeworCQlpZiAodHlwZSA9PSBNV0lGSUVYX1RZUEVfREFUQSkgeworCQkJaWYgKCEoY2FyZC0+bXBfd3JfYml0bWFwICYgKDEgPDwgY2FyZC0+Y3Vycl93cl9wb3J0KSkpCisJCQkJYWRhcHRlci0+ZGF0YV9zZW50ID0gdHJ1ZTsKKwkJCWVsc2UKKwkJCQlhZGFwdGVyLT5kYXRhX3NlbnQgPSBmYWxzZTsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyB0aGUgTVBBIFR4IGFuZCBSeCBidWZmZXJzLgorICovCitzdGF0aWMgaW50IG13aWZpZXhfYWxsb2Nfc2Rpb19tcGFfYnVmZmVycyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgIHUzMiBtcGFfdHhfYnVmX3NpemUsIHUzMiBtcGFfcnhfYnVmX3NpemUpCit7CisJc3RydWN0IHNkaW9fbW1jX2NhcmQgKmNhcmQgPSBhZGFwdGVyLT5jYXJkOworCWludCByZXQgPSAwOworCisJY2FyZC0+bXBhX3R4LmJ1ZiA9IGt6YWxsb2MobXBhX3R4X2J1Zl9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNhcmQtPm1wYV90eC5idWYpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJjb3VsZCBub3QgYWxsb2MgYnVmZmVyIGZvciBNUC1BIFRYXG4iKTsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZXJyb3I7CisJfQorCisJY2FyZC0+bXBhX3R4LmJ1Zl9zaXplID0gbXBhX3R4X2J1Zl9zaXplOworCisJY2FyZC0+bXBhX3J4LmJ1ZiA9IGt6YWxsb2MobXBhX3J4X2J1Zl9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNhcmQtPm1wYV9yeC5idWYpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJjb3VsZCBub3QgYWxsb2MgYnVmZmVyIGZvciBNUC1BIFJYXG4iKTsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZXJyb3I7CisJfQorCisJY2FyZC0+bXBhX3J4LmJ1Zl9zaXplID0gbXBhX3J4X2J1Zl9zaXplOworCitlcnJvcjoKKwlpZiAocmV0KSB7CisJCWtmcmVlKGNhcmQtPm1wYV90eC5idWYpOworCQlrZnJlZShjYXJkLT5tcGFfcnguYnVmKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiB1bnJlZ2lzdGVycyB0aGUgU0RJTyBkZXZpY2UuCisgKgorICogVGhlIFNESU8gSVJRIGlzIHJlbGVhc2VkLCB0aGUgZnVuY3Rpb24gaXMgZGlzYWJsZWQgYW5kIGRyaXZlcgorICogZGF0YSBpcyBzZXQgdG8gbnVsbC4KKyAqLworc3RhdGljIHZvaWQKK213aWZpZXhfdW5yZWdpc3Rlcl9kZXYoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2Rpb19tbWNfY2FyZCAqY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CisKKwlpZiAoYWRhcHRlci0+Y2FyZCkgeworCQkvKiBSZWxlYXNlIHRoZSBTRElPIElSUSAqLworCQlzZGlvX2NsYWltX2hvc3QoY2FyZC0+ZnVuYyk7CisJCXNkaW9fcmVsZWFzZV9pcnEoY2FyZC0+ZnVuYyk7CisJCXNkaW9fZGlzYWJsZV9mdW5jKGNhcmQtPmZ1bmMpOworCQlzZGlvX3JlbGVhc2VfaG9zdChjYXJkLT5mdW5jKTsKKwkJc2Rpb19zZXRfZHJ2ZGF0YShjYXJkLT5mdW5jLCBOVUxMKTsKKwl9Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyB0aGUgU0RJTyBkZXZpY2UuCisgKgorICogU0RJTyBJUlEgaXMgY2xhaW1lZCwgYmxvY2sgc2l6ZSBpcyBzZXQgYW5kIGRyaXZlciBkYXRhIGlzIGluaXRpYWxpemVkLgorICovCitzdGF0aWMgaW50IG13aWZpZXhfcmVnaXN0ZXJfZGV2KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHNkaW9fbW1jX2NhcmQgKmNhcmQgPSBhZGFwdGVyLT5jYXJkOworCXN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMgPSBjYXJkLT5mdW5jOworCisJLyogc2F2ZSBhZGFwdGVyIHBvaW50ZXIgaW4gY2FyZCAqLworCWNhcmQtPmFkYXB0ZXIgPSBhZGFwdGVyOworCisJc2Rpb19jbGFpbV9ob3N0KGZ1bmMpOworCisJLyogUmVxdWVzdCB0aGUgU0RJTyBJUlEgKi8KKwlyZXQgPSBzZGlvX2NsYWltX2lycShmdW5jLCBtd2lmaWV4X3NkaW9faW50ZXJydXB0KTsKKwlpZiAocmV0KSB7CisJCXByX2VycigiY2xhaW0gaXJxIGZhaWxlZDogcmV0PSVkXG4iLCByZXQpOworCQlnb3RvIGRpc2FibGVfZnVuYzsKKwl9CisKKwkvKiBTZXQgYmxvY2sgc2l6ZSAqLworCXJldCA9IHNkaW9fc2V0X2Jsb2NrX3NpemUoY2FyZC0+ZnVuYywgTVdJRklFWF9TRElPX0JMT0NLX1NJWkUpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJjYW5ub3Qgc2V0IFNESU8gYmxvY2sgc2l6ZVxuIik7CisJCXJldCA9IC0xOworCQlnb3RvIHJlbGVhc2VfaXJxOworCX0KKworCXNkaW9fcmVsZWFzZV9ob3N0KGZ1bmMpOworCXNkaW9fc2V0X2RydmRhdGEoZnVuYywgY2FyZCk7CisKKwlhZGFwdGVyLT5kZXYgPSAmZnVuYy0+ZGV2OworCisJcmV0dXJuIDA7CisKK3JlbGVhc2VfaXJxOgorCXNkaW9fcmVsZWFzZV9pcnEoZnVuYyk7CitkaXNhYmxlX2Z1bmM6CisJc2Rpb19kaXNhYmxlX2Z1bmMoZnVuYyk7CisJc2Rpb19yZWxlYXNlX2hvc3QoZnVuYyk7CisJYWRhcHRlci0+Y2FyZCA9IE5VTEw7CisKKwlyZXR1cm4gLTE7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBTRElPIGRyaXZlci4KKyAqCisgKiBUaGUgZm9sbG93aW5nIGluaXRpYWxpemF0aW9ucyBzdGVwcyBhcmUgZm9sbG93ZWQgLQorICogICAgICAtIFJlYWQgdGhlIEhvc3QgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciB0byBhY2tub3dsZWRnZQorICogICAgICAgIHRoZSBmaXJzdCBpbnRlcnJ1cHQgZ290IGZyb20gYm9vdGxvYWRlcgorICogICAgICAtIERpc2FibGUgaG9zdCBpbnRlcnJ1cHQgbWFzayByZWdpc3RlcgorICogICAgICAtIEdldCBTRElPIHBvcnQKKyAqICAgICAgLSBHZXQgcmV2aXNpb24gSUQKKyAqICAgICAgLSBJbml0aWFsaXplIFNESU8gdmFyaWFibGVzIGluIGNhcmQKKyAqICAgICAgLSBBbGxvY2F0ZSBNUCByZWdpc3RlcnMKKyAqICAgICAgLSBBbGxvY2F0ZSBNUEEgVHggYW5kIFJ4IGJ1ZmZlcnMKKyAqLworc3RhdGljIGludCBtd2lmaWV4X2luaXRfc2RpbyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBzZGlvX21tY19jYXJkICpjYXJkID0gYWRhcHRlci0+Y2FyZDsKKwlpbnQgcmV0OworCXUzMiBzZGlvX2lyZWc7CisKKwkvKgorCSAqIFJlYWQgdGhlIEhPU1RfSU5UX1NUQVRVU19SRUcgZm9yIEFDSyB0aGUgZmlyc3QgaW50ZXJydXB0IGdvdAorCSAqIGZyb20gdGhlIGJvb3Rsb2FkZXIuIElmIHdlIGRvbid0IGRvIHRoaXMgd2UgZ2V0IGEgaW50ZXJydXB0CisJICogYXMgc29vbiBhcyB3ZSByZWdpc3RlciB0aGUgaXJxLgorCSAqLworCW13aWZpZXhfcmVhZF9yZWcoYWRhcHRlciwgSE9TVF9JTlRTVEFUVVNfUkVHLCAmc2Rpb19pcmVnKTsKKworCS8qIERpc2FibGUgaG9zdCBpbnRlcnJ1cHQgbWFzayByZWdpc3RlciBmb3IgU0RJTyAqLworCW13aWZpZXhfc2Rpb19kaXNhYmxlX2hvc3RfaW50KGFkYXB0ZXIpOworCisJLyogR2V0IFNESU8gaW9wb3J0ICovCisJbXdpZmlleF9pbml0X3NkaW9faW9wb3J0KGFkYXB0ZXIpOworCisJLyogR2V0IHJldmlzaW9uIElEICovCisjZGVmaW5lIFJFVl9JRF9SRUcJMHg1YworCW13aWZpZXhfcmVhZF9yZWcoYWRhcHRlciwgUkVWX0lEX1JFRywgJmFkYXB0ZXItPnJldmlzaW9uX2lkKTsKKworCS8qIEluaXRpYWxpemUgU0RJTyB2YXJpYWJsZXMgaW4gY2FyZCAqLworCWNhcmQtPm1wX3JkX2JpdG1hcCA9IDA7CisJY2FyZC0+bXBfd3JfYml0bWFwID0gMDsKKwljYXJkLT5jdXJyX3JkX3BvcnQgPSAxOworCWNhcmQtPmN1cnJfd3JfcG9ydCA9IDE7CisKKwljYXJkLT5tcF9kYXRhX3BvcnRfbWFzayA9IERBVEFfUE9SVF9NQVNLOworCisJY2FyZC0+bXBhX3R4LmJ1Zl9sZW4gPSAwOworCWNhcmQtPm1wYV90eC5wa3RfY250ID0gMDsKKwljYXJkLT5tcGFfdHguc3RhcnRfcG9ydCA9IDA7CisKKwljYXJkLT5tcGFfdHguZW5hYmxlZCA9IDA7CisJY2FyZC0+bXBhX3R4LnBrdF9hZ2dyX2xpbWl0ID0gU0RJT19NUF9BR0dSX0RFRl9QS1RfTElNSVQ7CisKKwljYXJkLT5tcGFfcnguYnVmX2xlbiA9IDA7CisJY2FyZC0+bXBhX3J4LnBrdF9jbnQgPSAwOworCWNhcmQtPm1wYV9yeC5zdGFydF9wb3J0ID0gMDsKKworCWNhcmQtPm1wYV9yeC5lbmFibGVkID0gMDsKKwljYXJkLT5tcGFfcngucGt0X2FnZ3JfbGltaXQgPSBTRElPX01QX0FHR1JfREVGX1BLVF9MSU1JVDsKKworCS8qIEFsbG9jYXRlIGJ1ZmZlcnMgZm9yIFNESU8gTVAtQSAqLworCWNhcmQtPm1wX3JlZ3MgPSBremFsbG9jKE1BWF9NUF9SRUdTLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNhcmQtPm1wX3JlZ3MpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJmYWlsZWQgdG8gYWxsb2MgbXBfcmVnc1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldCA9IG13aWZpZXhfYWxsb2Nfc2Rpb19tcGFfYnVmZmVycyhhZGFwdGVyLAorCQkJCQkgICAgIFNESU9fTVBfVFhfQUdHUl9ERUZfQlVGX1NJWkUsCisJCQkJCSAgICAgU0RJT19NUF9SWF9BR0dSX0RFRl9CVUZfU0laRSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgImZhaWxlZCB0byBhbGxvYyBzZGlvIG1wLWEgYnVmZmVyc1xuIik7CisJCWtmcmVlKGNhcmQtPm1wX3JlZ3MpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmVzZXRzIHRoZSBNUEEgVHggYW5kIFJ4IGJ1ZmZlcnMuCisgKi8KK3N0YXRpYyB2b2lkIG13aWZpZXhfY2xlYW51cF9tcGFfYnVmKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNkaW9fbW1jX2NhcmQgKmNhcmQgPSBhZGFwdGVyLT5jYXJkOworCisJTVBfVFhfQUdHUl9CVUZfUkVTRVQoY2FyZCk7CisJTVBfUlhfQUdHUl9CVUZfUkVTRVQoY2FyZCk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNsZWFucyB1cCB0aGUgYWxsb2NhdGVkIGNhcmQgYnVmZmVycy4KKyAqCisgKiBUaGUgZm9sbG93aW5nIGFyZSBmcmVlZCBieSB0aGlzIGZ1bmN0aW9uIC0KKyAqICAgICAgLSBNUCByZWdpc3RlcnMKKyAqICAgICAgLSBNUEEgVHggYnVmZmVyCisgKiAgICAgIC0gTVBBIFJ4IGJ1ZmZlcgorICovCitzdGF0aWMgdm9pZCBtd2lmaWV4X2NsZWFudXBfc2RpbyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBzZGlvX21tY19jYXJkICpjYXJkID0gYWRhcHRlci0+Y2FyZDsKKworCWtmcmVlKGNhcmQtPm1wX3JlZ3MpOworCWtmcmVlKGNhcmQtPm1wYV90eC5idWYpOworCWtmcmVlKGNhcmQtPm1wYV9yeC5idWYpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiB1cGRhdGVzIHRoZSBNUCBlbmQgcG9ydCBpbiBjYXJkLgorICovCitzdGF0aWMgdm9pZAorbXdpZmlleF91cGRhdGVfbXBfZW5kX3BvcnQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwgdTE2IHBvcnQpCit7CisJc3RydWN0IHNkaW9fbW1jX2NhcmQgKmNhcmQgPSBhZGFwdGVyLT5jYXJkOworCWludCBpOworCisJY2FyZC0+bXBfZW5kX3BvcnQgPSBwb3J0OworCisJY2FyZC0+bXBfZGF0YV9wb3J0X21hc2sgPSBEQVRBX1BPUlRfTUFTSzsKKworCWZvciAoaSA9IDE7IGkgPD0gTUFYX1BPUlQgLSBjYXJkLT5tcF9lbmRfcG9ydDsgaSsrKQorCQljYXJkLT5tcF9kYXRhX3BvcnRfbWFzayAmPSB+KDEgPDwgKE1BWF9QT1JUIC0gaSkpOworCisJY2FyZC0+Y3Vycl93cl9wb3J0ID0gMTsKKworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiY21kOiBtcF9lbmRfcG9ydCAlZCwgZGF0YSBwb3J0IG1hc2sgMHgleFxuIiwKKwkgICAgICAgcG9ydCwgY2FyZC0+bXBfZGF0YV9wb3J0X21hc2spOworfQorCitzdGF0aWMgc3RydWN0IG13aWZpZXhfaWZfb3BzIHNkaW9fb3BzID0geworCS5pbml0X2lmID0gbXdpZmlleF9pbml0X3NkaW8sCisJLmNsZWFudXBfaWYgPSBtd2lmaWV4X2NsZWFudXBfc2RpbywKKwkuY2hlY2tfZndfc3RhdHVzID0gbXdpZmlleF9jaGVja19md19zdGF0dXMsCisJLnByb2dfZncgPSBtd2lmaWV4X3Byb2dfZndfd19oZWxwZXIsCisJLnJlZ2lzdGVyX2RldiA9IG13aWZpZXhfcmVnaXN0ZXJfZGV2LAorCS51bnJlZ2lzdGVyX2RldiA9IG13aWZpZXhfdW5yZWdpc3Rlcl9kZXYsCisJLmVuYWJsZV9pbnQgPSBtd2lmaWV4X3NkaW9fZW5hYmxlX2hvc3RfaW50LAorCS5wcm9jZXNzX2ludF9zdGF0dXMgPSBtd2lmaWV4X3Byb2Nlc3NfaW50X3N0YXR1cywKKwkuaG9zdF90b19jYXJkID0gbXdpZmlleF9zZGlvX2hvc3RfdG9fY2FyZCwKKwkud2FrZXVwID0gbXdpZmlleF9wbV93YWtldXBfY2FyZCwKKwkud2FrZXVwX2NvbXBsZXRlID0gbXdpZmlleF9wbV93YWtldXBfY2FyZF9jb21wbGV0ZSwKKworCS8qIFNESU8gc3BlY2lmaWMgKi8KKwkudXBkYXRlX21wX2VuZF9wb3J0ID0gbXdpZmlleF91cGRhdGVfbXBfZW5kX3BvcnQsCisJLmNsZWFudXBfbXBhX2J1ZiA9IG13aWZpZXhfY2xlYW51cF9tcGFfYnVmLAorfTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIFNESU8gZHJpdmVyLgorICoKKyAqIFRoaXMgaW5pdGlhdGVzIHRoZSBzZW1hcGhvcmUgYW5kIHJlZ2lzdGVycyB0aGUgZGV2aWNlIHdpdGgKKyAqIFNESU8gYnVzLgorICovCitzdGF0aWMgaW50Cittd2lmaWV4X3NkaW9faW5pdF9tb2R1bGUodm9pZCkKK3sKKwlzZW1hX2luaXQoJmFkZF9yZW1vdmVfY2FyZF9zZW0sIDEpOworCisJcmV0dXJuIHNkaW9fcmVnaXN0ZXJfZHJpdmVyKCZtd2lmaWV4X3NkaW8pOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjbGVhbnMgdXAgdGhlIFNESU8gZHJpdmVyLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgbWFqb3Igc3RlcHMgYXJlIGZvbGxvd2VkIGZvciBjbGVhbnVwIC0KKyAqICAgICAgLSBSZXN1bWUgdGhlIGRldmljZSBpZiBpdHMgc3VzcGVuZGVkCisgKiAgICAgIC0gRGlzY29ubmVjdCB0aGUgZGV2aWNlIGlmIGNvbm5lY3RlZAorICogICAgICAtIFNodXRkb3duIHRoZSBmaXJtd2FyZQorICogICAgICAtIFVucmVnaXN0ZXIgdGhlIGRldmljZSBmcm9tIFNESU8gYnVzLgorICovCitzdGF0aWMgdm9pZAorbXdpZmlleF9zZGlvX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IGdfYWRhcHRlcjsKKwlpbnQgaTsKKworCWlmIChkb3duX2ludGVycnVwdGlibGUoJmFkZF9yZW1vdmVfY2FyZF9zZW0pKQorCQlnb3RvIGV4aXRfc2VtX2VycjsKKworCWlmICghYWRhcHRlciB8fCAhYWRhcHRlci0+cHJpdl9udW0pCisJCWdvdG8gZXhpdDsKKworCWlmIChhZGFwdGVyLT5pc19zdXNwZW5kZWQpCisJCW13aWZpZXhfc2Rpb19yZXN1bWUoYWRhcHRlci0+ZGV2KTsKKworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5wcml2X251bTsgaSsrKQorCQlpZiAoKEdFVF9CU1NfUk9MRShhZGFwdGVyLT5wcml2W2ldKSA9PSBNV0lGSUVYX0JTU19ST0xFX1NUQSkgJiYKKwkJICAgIGFkYXB0ZXItPnByaXZbaV0tPm1lZGlhX2Nvbm5lY3RlZCkKKwkJCW13aWZpZXhfZGVhdXRoZW50aWNhdGUoYWRhcHRlci0+cHJpdltpXSwgTlVMTCk7CisKKwlpZiAoIWFkYXB0ZXItPnN1cnByaXNlX3JlbW92ZWQpCisJCW13aWZpZXhfaW5pdF9zaHV0ZG93bl9mdyhtd2lmaWV4X2dldF9wcml2KGFkYXB0ZXIsCisJCQkJCQkJICBNV0lGSUVYX0JTU19ST0xFX0FOWSksCisJCQkJCSBNV0lGSUVYX0ZVTkNfU0hVVERPV04pOworCitleGl0OgorCXVwKCZhZGRfcmVtb3ZlX2NhcmRfc2VtKTsKKworZXhpdF9zZW1fZXJyOgorCXNkaW9fdW5yZWdpc3Rlcl9kcml2ZXIoJm13aWZpZXhfc2Rpbyk7Cit9CisKK21vZHVsZV9pbml0KG13aWZpZXhfc2Rpb19pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChtd2lmaWV4X3NkaW9fY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNYXJ2ZWxsIFdpRmktRXggU0RJTyBEcml2ZXIgdmVyc2lvbiAiIFNESU9fVkVSU0lPTik7CitNT0RVTEVfVkVSU0lPTihTRElPX1ZFUlNJT04pOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0ZJUk1XQVJFKCJzZDg3ODcuYmluIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3NkaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvc2Rpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZTliYzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3NkaW8uaApAQCAtMCwwICsxLDMwNSBAQAorLyoKKyAqIE1hcnZlbGwgV2lyZWxlc3MgTEFOIGRldmljZSBkcml2ZXI6IFNESU8gc3BlY2lmaWMgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBmaWxlICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwKKyAqIEx0ZC4gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIEp1bmUgMTk5MQorICogKHRoZSAiTGljZW5zZSIpLiAgWW91IG1heSB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSBpbgorICogYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdoaWNoCisgKiBpcyBhdmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQSBvciBvbiB0aGUKKyAqIHdvcmxkd2lkZSB3ZWIgYXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dC4KKyAqCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1JUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgQU5EIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0CisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIuCisgKi8KKworI2lmbmRlZglfTVdJRklFWF9TRElPX0gKKyNkZWZpbmUJX01XSUZJRVhfU0RJT19ICisKKworI2luY2x1ZGUgPGxpbnV4L21tYy9zZGlvLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL3NkaW9faWRzLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL3NkaW9fZnVuYy5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9jYXJkLmg+CisKKyNpbmNsdWRlICJtYWluLmgiCisKKyNkZWZpbmUgQkxPQ0tfTU9ERQkxCisjZGVmaW5lIEJZVEVfTU9ERQkwCisKKyNkZWZpbmUgUkVHX1BPUlQJCQkwCisjZGVmaW5lIFJEX0JJVE1BUF9MCQkJMHgwNAorI2RlZmluZSBSRF9CSVRNQVBfVQkJCTB4MDUKKyNkZWZpbmUgV1JfQklUTUFQX0wJCQkweDA2CisjZGVmaW5lIFdSX0JJVE1BUF9VCQkJMHgwNworI2RlZmluZSBSRF9MRU5fUDBfTAkJCTB4MDgKKyNkZWZpbmUgUkRfTEVOX1AwX1UJCQkweDA5CisKKyNkZWZpbmUgTVdJRklFWF9TRElPX0lPX1BPUlRfTUFTSwkJMHhmZmZmZgorCisjZGVmaW5lIE1XSUZJRVhfU0RJT19CWVRFX01PREVfTUFTSwkweDgwMDAwMDAwCisKKyNkZWZpbmUgQ1RSTF9QT1JUCQkJMAorI2RlZmluZSBDVFJMX1BPUlRfTUFTSwkJCTB4MDAwMQorI2RlZmluZSBEQVRBX1BPUlRfTUFTSwkJCTB4ZmZmZQorCisjZGVmaW5lIE1BWF9NUF9SRUdTCQkJNjQKKyNkZWZpbmUgTUFYX1BPUlQJCQkxNgorCisjZGVmaW5lIFNESU9fTVBfQUdHUl9ERUZfUEtUX0xJTUlUCTgKKworI2RlZmluZSBTRElPX01QX1RYX0FHR1JfREVGX0JVRl9TSVpFICAgICAgICAoNDA5NikJLyogNEsgKi8KKworLyogTXVsdGkgcG9ydCBSWCBhZ2dyZWdhdGlvbiBidWZmZXIgc2l6ZSAqLworI2RlZmluZSBTRElPX01QX1JYX0FHR1JfREVGX0JVRl9TSVpFICAgICAgICAoNDA5NikJLyogNEsgKi8KKworLyogTWlzYy4gQ29uZmlnIFJlZ2lzdGVyIDogQXV0byBSZS1lbmFibGUgaW50ZXJydXB0cyAqLworI2RlZmluZSBBVVRPX1JFX0VOQUJMRV9JTlQgICAgICAgICAgICAgIEJJVCg0KQorCisvKiBIb3N0IENvbnRyb2wgUmVnaXN0ZXJzICovCisvKiBIb3N0IENvbnRyb2wgUmVnaXN0ZXJzIDogSS9PIHBvcnQgMCAqLworI2RlZmluZSBJT19QT1JUXzBfUkVHCQkJMHg3OAorLyogSG9zdCBDb250cm9sIFJlZ2lzdGVycyA6IEkvTyBwb3J0IDEgKi8KKyNkZWZpbmUgSU9fUE9SVF8xX1JFRwkJCTB4NzkKKy8qIEhvc3QgQ29udHJvbCBSZWdpc3RlcnMgOiBJL08gcG9ydCAyICovCisjZGVmaW5lIElPX1BPUlRfMl9SRUcJCQkweDdBCisKKy8qIEhvc3QgQ29udHJvbCBSZWdpc3RlcnMgOiBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIENPTkZJR1VSQVRJT05fUkVHCQkweDAwCisvKiBIb3N0IENvbnRyb2wgUmVnaXN0ZXJzIDogSG9zdCB3aXRob3V0IENvbW1hbmQgNTMgZmluaXNoIGhvc3QqLworI2RlZmluZSBIT1NUX1RPX0NBUkRfRVZFTlQgICAgICAgKDB4MVUgPDwgMykKKy8qIEhvc3QgQ29udHJvbCBSZWdpc3RlcnMgOiBIb3N0IHdpdGhvdXQgQ29tbWFuZCA1MyBmaW5pc2ggaG9zdCAqLworI2RlZmluZSBIT1NUX1dPX0NNRDUzX0ZJTklTSF9IT1NUCSgweDFVIDw8IDIpCisvKiBIb3N0IENvbnRyb2wgUmVnaXN0ZXJzIDogSG9zdCBwb3dlciB1cCAqLworI2RlZmluZSBIT1NUX1BPV0VSX1VQCQkJKDB4MVUgPDwgMSkKKy8qIEhvc3QgQ29udHJvbCBSZWdpc3RlcnMgOiBIb3N0IHBvd2VyIGRvd24gKi8KKyNkZWZpbmUgSE9TVF9QT1dFUl9ET1dOCQkJKDB4MVUgPDwgMCkKKworLyogSG9zdCBDb250cm9sIFJlZ2lzdGVycyA6IEhvc3QgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgSE9TVF9JTlRfTUFTS19SRUcJCTB4MDIKKy8qIEhvc3QgQ29udHJvbCBSZWdpc3RlcnMgOiBVcGxvYWQgaG9zdCBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBVUF9MRF9IT1NUX0lOVF9NQVNLCQkoMHgxVSkKKy8qIEhvc3QgQ29udHJvbCBSZWdpc3RlcnMgOiBEb3dubG9hZCBob3N0IGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIEROX0xEX0hPU1RfSU5UX01BU0sJCSgweDJVKQorLyogRW5hYmxlIEhvc3QgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgSE9TVF9JTlRfRU5BQkxFCShVUF9MRF9IT1NUX0lOVF9NQVNLIHwgRE5fTERfSE9TVF9JTlRfTUFTSykKKy8qIERpc2FibGUgSG9zdCBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZQlIT1NUX0lOVF9ESVNBQkxFCQkweGZmCisKKy8qIEhvc3QgQ29udHJvbCBSZWdpc3RlcnMgOiBIb3N0IGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgSE9TVF9JTlRTVEFUVVNfUkVHCQkweDAzCisvKiBIb3N0IENvbnRyb2wgUmVnaXN0ZXJzIDogVXBsb2FkIGhvc3QgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSBVUF9MRF9IT1NUX0lOVF9TVEFUVVMJCSgweDFVKQorLyogSG9zdCBDb250cm9sIFJlZ2lzdGVycyA6IERvd25sb2FkIGhvc3QgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSBETl9MRF9IT1NUX0lOVF9TVEFUVVMJCSgweDJVKQorCisvKiBIb3N0IENvbnRyb2wgUmVnaXN0ZXJzIDogSG9zdCBpbnRlcnJ1cHQgUlNSICovCisjZGVmaW5lIEhPU1RfSU5UX1JTUl9SRUcJCTB4MDEKKy8qIEhvc3QgQ29udHJvbCBSZWdpc3RlcnMgOiBVcGxvYWQgaG9zdCBpbnRlcnJ1cHQgUlNSICovCisjZGVmaW5lIFVQX0xEX0hPU1RfSU5UX1JTUgkJKDB4MVUpCisjZGVmaW5lIFNESU9fSU5UX01BU0sJCQkweDNGCisKKy8qIEhvc3QgQ29udHJvbCBSZWdpc3RlcnMgOiBIb3N0IGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgSE9TVF9JTlRfU1RBVFVTX1JFRwkJMHgyOAorLyogSG9zdCBDb250cm9sIFJlZ2lzdGVycyA6IFVwbG9hZCBDUkMgZXJyb3IgKi8KKyNkZWZpbmUgVVBfTERfQ1JDX0VSUgkJCSgweDFVIDw8IDIpCisvKiBIb3N0IENvbnRyb2wgUmVnaXN0ZXJzIDogVXBsb2FkIHJlc3RhcnQgKi8KKyNkZWZpbmUgVVBfTERfUkVTVEFSVCAgICAgICAgICAgICAgICAgICAoMHgxVSA8PCAxKQorLyogSG9zdCBDb250cm9sIFJlZ2lzdGVycyA6IERvd25sb2FkIHJlc3RhcnQgKi8KKyNkZWZpbmUgRE5fTERfUkVTVEFSVCAgICAgICAgICAgICAgICAgICAoMHgxVSA8PCAwKQorCisvKiBDYXJkIENvbnRyb2wgUmVnaXN0ZXJzIDogQ2FyZCBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0FSRF9TVEFUVVNfUkVHICAgICAgICAgICAgICAgICAweDMwCisvKiBDYXJkIENvbnRyb2wgUmVnaXN0ZXJzIDogQ2FyZCBJL08gcmVhZHkgKi8KKyNkZWZpbmUgQ0FSRF9JT19SRUFEWSAgICAgICAgICAgICAgICAgICAoMHgxVSA8PCAzKQorLyogQ2FyZCBDb250cm9sIFJlZ2lzdGVycyA6IENJUyBjYXJkIHJlYWR5ICovCisjZGVmaW5lIENJU19DQVJEX1JEWSAgICAgICAgICAgICAgICAgICAgKDB4MVUgPDwgMikKKy8qIENhcmQgQ29udHJvbCBSZWdpc3RlcnMgOiBVcGxvYWQgY2FyZCByZWFkeSAqLworI2RlZmluZSBVUF9MRF9DQVJEX1JEWSAgICAgICAgICAgICAgICAgICgweDFVIDw8IDEpCisvKiBDYXJkIENvbnRyb2wgUmVnaXN0ZXJzIDogRG93bmxvYWQgY2FyZCByZWFkeSAqLworI2RlZmluZSBETl9MRF9DQVJEX1JEWSAgICAgICAgICAgICAgICAgICgweDFVIDw8IDApCisKKy8qIENhcmQgQ29udHJvbCBSZWdpc3RlcnMgOiBIb3N0IGludGVycnVwdCBtYXNrIHJlZ2lzdGVyICovCisjZGVmaW5lIEhPU1RfSU5URVJSVVBUX01BU0tfUkVHICAgICAgICAgMHgzNAorLyogQ2FyZCBDb250cm9sIFJlZ2lzdGVycyA6IEhvc3QgcG93ZXIgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgSE9TVF9QT1dFUl9JTlRfTUFTSyAgICAgICAgICAgICAoMHgxVSA8PCAzKQorLyogQ2FyZCBDb250cm9sIFJlZ2lzdGVycyA6IEFib3J0IGNhcmQgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgQUJPUlRfQ0FSRF9JTlRfTUFTSyAgICAgICAgICAgICAoMHgxVSA8PCAyKQorLyogQ2FyZCBDb250cm9sIFJlZ2lzdGVycyA6IFVwbG9hZCBjYXJkIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFVQX0xEX0NBUkRfSU5UX01BU0sgICAgICAgICAgICAgKDB4MVUgPDwgMSkKKy8qIENhcmQgQ29udHJvbCBSZWdpc3RlcnMgOiBEb3dubG9hZCBjYXJkIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIEROX0xEX0NBUkRfSU5UX01BU0sgICAgICAgICAgICAgKDB4MVUgPDwgMCkKKworLyogQ2FyZCBDb250cm9sIFJlZ2lzdGVycyA6IENhcmQgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBDQVJEX0lOVEVSUlVQVF9TVEFUVVNfUkVHICAgICAgIDB4MzgKKy8qIENhcmQgQ29udHJvbCBSZWdpc3RlcnMgOiBQb3dlciB1cCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgUE9XRVJfVVBfSU5UICAgICAgICAgICAgICAgICAgICAoMHgxVSA8PCA0KQorLyogQ2FyZCBDb250cm9sIFJlZ2lzdGVycyA6IFBvd2VyIGRvd24gaW50ZXJydXB0ICovCisjZGVmaW5lIFBPV0VSX0RPV05fSU5UICAgICAgICAgICAgICAgICAgKDB4MVUgPDwgMykKKworLyogQ2FyZCBDb250cm9sIFJlZ2lzdGVycyA6IENhcmQgaW50ZXJydXB0IFJTUiByZWdpc3RlciAqLworI2RlZmluZSBDQVJEX0lOVEVSUlVQVF9SU1JfUkVHICAgICAgICAgIDB4M2MKKy8qIENhcmQgQ29udHJvbCBSZWdpc3RlcnMgOiBQb3dlciB1cCBSU1IgKi8KKyNkZWZpbmUgUE9XRVJfVVBfUlNSICAgICAgICAgICAgICAgICAgICAoMHgxVSA8PCA0KQorLyogQ2FyZCBDb250cm9sIFJlZ2lzdGVycyA6IFBvd2VyIGRvd24gUlNSICovCisjZGVmaW5lIFBPV0VSX0RPV05fUlNSICAgICAgICAgICAgICAgICAgKDB4MVUgPDwgMykKKworLyogQ2FyZCBDb250cm9sIFJlZ2lzdGVycyA6IE1pc2NlbGxhbmVvdXMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBDQVJEX01JU0NfQ0ZHX1JFRyAgICAgICAgICAgICAgIDB4NkMKKworLyogSG9zdCBGMSByZWFkIGJhc2UgMCAqLworI2RlZmluZSBIT1NUX0YxX1JEX0JBU0VfMAkJMHgwMDQwCisvKiBIb3N0IEYxIHJlYWQgYmFzZSAxICovCisjZGVmaW5lIEhPU1RfRjFfUkRfQkFTRV8xCQkweDAwNDEKKy8qIEhvc3QgRjEgY2FyZCByZWFkeSAqLworI2RlZmluZSBIT1NUX0YxX0NBUkRfUkRZCQkweDAwMjAKKworLyogRmlybXdhcmUgc3RhdHVzIDAgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0FSRF9GV19TVEFUVVMwX1JFRwkJMHg2MAorLyogRmlybXdhcmUgc3RhdHVzIDEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0FSRF9GV19TVEFUVVMxX1JFRwkJMHg2MQorLyogUnggbGVuZ3RoIHJlZ2lzdGVyICovCisjZGVmaW5lIENBUkRfUlhfTEVOX1JFRwkJCTB4NjIKKy8qIFJ4IHVuaXQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0FSRF9SWF9VTklUX1JFRwkJMHg2MworCisvKiBFdmVudCBoZWFkZXIgTGVuKi8KKyNkZWZpbmUgTVdJRklFWF9FVkVOVF9IRUFERVJfTEVOICAgICAgICAgICA4CisKKy8qIE1heCByZXRyeSBudW1iZXIgb2YgQ01ENTMgd3JpdGUgKi8KKyNkZWZpbmUgTUFYX1dSSVRFX0lPTUVNX1JFVFJZCQkyCisKKy8qIFNESU8gVHggYWdncmVnYXRpb24gaW4gcHJvZ3Jlc3MgPyAqLworI2RlZmluZSBNUF9UWF9BR0dSX0lOX1BST0dSRVNTKGEpIChhLT5tcGFfdHgucGt0X2NudCA+IDApCisKKy8qIFNESU8gVHggYWdncmVnYXRpb24gYnVmZmVyIHJvb20gZm9yIG5leHQgcGFja2V0ID8gKi8KKyNkZWZpbmUgTVBfVFhfQUdHUl9CVUZfSEFTX1JPT00oYSwgbGVuKSAoKGEtPm1wYV90eC5idWZfbGVuK2xlbikJXAorCQkJCQkJPD0gYS0+bXBhX3R4LmJ1Zl9zaXplKQorCisvKiBDb3B5IGN1cnJlbnQgcGFja2V0IChTRElPIFR4IGFnZ3JlZ2F0aW9uIGJ1ZmZlcikgdG8gU0RJTyBidWZmZXIgKi8KKyNkZWZpbmUgTVBfVFhfQUdHUl9CVUZfUFVUKGEsIHBheWxvYWQsIHBrdF9sZW4sIHBvcnQpIGRvIHsJCVwKKwltZW1tb3ZlKCZhLT5tcGFfdHguYnVmW2EtPm1wYV90eC5idWZfbGVuXSwJCQlcCisJCQlwYXlsb2FkLCBwa3RfbGVuKTsJCQkJXAorCWEtPm1wYV90eC5idWZfbGVuICs9IHBrdF9sZW47CQkJCQlcCisJaWYgKCFhLT5tcGFfdHgucGt0X2NudCkJCQkJCQlcCisJCWEtPm1wYV90eC5zdGFydF9wb3J0ID0gcG9ydDsJCQkJXAorCWlmIChhLT5tcGFfdHguc3RhcnRfcG9ydCA8PSBwb3J0KQkJCQlcCisJCWEtPm1wYV90eC5wb3J0cyB8PSAoMTw8KGEtPm1wYV90eC5wa3RfY250KSk7CQlcCisJZWxzZQkJCQkJCQkJXAorCQlhLT5tcGFfdHgucG9ydHMgfD0gKDE8PChhLT5tcGFfdHgucGt0X2NudCsxKyhNQVhfUE9SVCAtCVwKKwkJCQkJCWEtPm1wX2VuZF9wb3J0KSkpOwlcCisJYS0+bXBhX3R4LnBrdF9jbnQrKzsJCQkJCQlcCit9IHdoaWxlICgwKTsKKworLyogU0RJTyBUeCBhZ2dyZWdhdGlvbiBsaW1pdCA/ICovCisjZGVmaW5lIE1QX1RYX0FHR1JfUEtUX0xJTUlUX1JFQUNIRUQoYSkJCQkJCVwKKwkJCShhLT5tcGFfdHgucGt0X2NudCA9PSBhLT5tcGFfdHgucGt0X2FnZ3JfbGltaXQpCisKKy8qIFNESU8gVHggYWdncmVnYXRpb24gcG9ydCBsaW1pdCA/ICovCisjZGVmaW5lIE1QX1RYX0FHR1JfUE9SVF9MSU1JVF9SRUFDSEVEKGEpICgoYS0+Y3Vycl93cl9wb3J0IDwJCVwKKwkJCWEtPm1wYV90eC5zdGFydF9wb3J0KSAmJiAoKChNQVhfUE9SVCAtCQlcCisJCQlhLT5tcGFfdHguc3RhcnRfcG9ydCkgKyBhLT5jdXJyX3dyX3BvcnQpID49CVwKKwkJCQlTRElPX01QX0FHR1JfREVGX1BLVF9MSU1JVCkpCisKKy8qIFJlc2V0IFNESU8gVHggYWdncmVnYXRpb24gYnVmZmVyIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgTVBfVFhfQUdHUl9CVUZfUkVTRVQoYSkgZG8gewkJCQkJXAorCWEtPm1wYV90eC5wa3RfY250ID0gMDsJCQkJCQlcCisJYS0+bXBhX3R4LmJ1Zl9sZW4gPSAwOwkJCQkJCVwKKwlhLT5tcGFfdHgucG9ydHMgPSAwOwkJCQkJCVwKKwlhLT5tcGFfdHguc3RhcnRfcG9ydCA9IDA7CQkJCQlcCit9IHdoaWxlICgwKTsKKworLyogU0RJTyBSeCBhZ2dyZWdhdGlvbiBsaW1pdCA/ICovCisjZGVmaW5lIE1QX1JYX0FHR1JfUEtUX0xJTUlUX1JFQUNIRUQoYSkJCQkJCVwKKwkJCShhLT5tcGFfcngucGt0X2NudCA9PSBhLT5tcGFfcngucGt0X2FnZ3JfbGltaXQpCisKKy8qIFNESU8gVHggYWdncmVnYXRpb24gcG9ydCBsaW1pdCA/ICovCisjZGVmaW5lIE1QX1JYX0FHR1JfUE9SVF9MSU1JVF9SRUFDSEVEKGEpICgoYS0+Y3Vycl9yZF9wb3J0IDwJCVwKKwkJCWEtPm1wYV9yeC5zdGFydF9wb3J0KSAmJiAoKChNQVhfUE9SVCAtCQlcCisJCQlhLT5tcGFfcnguc3RhcnRfcG9ydCkgKyBhLT5jdXJyX3JkX3BvcnQpID49CVwKKwkJCVNESU9fTVBfQUdHUl9ERUZfUEtUX0xJTUlUKSkKKworLyogU0RJTyBSeCBhZ2dyZWdhdGlvbiBpbiBwcm9ncmVzcyA/ICovCisjZGVmaW5lIE1QX1JYX0FHR1JfSU5fUFJPR1JFU1MoYSkgKGEtPm1wYV9yeC5wa3RfY250ID4gMCkKKworLyogU0RJTyBSeCBhZ2dyZWdhdGlvbiBidWZmZXIgcm9vbSBmb3IgbmV4dCBwYWNrZXQgPyAqLworI2RlZmluZSBNUF9SWF9BR0dSX0JVRl9IQVNfUk9PTShhLCByeF9sZW4pCQkJCVwKKwkJCSgoYS0+bXBhX3J4LmJ1Zl9sZW4rcnhfbGVuKSA8PSBhLT5tcGFfcnguYnVmX3NpemUpCisKKy8qIFByZXBhcmUgdG8gY29weSBjdXJyZW50IHBhY2tldCBmcm9tIGNhcmQgdG8gU0RJTyBSeCBhZ2dyZWdhdGlvbiBidWZmZXIgKi8KKyNkZWZpbmUgTVBfUlhfQUdHUl9TRVRVUChhLCBza2IsIHBvcnQpIGRvIHsJCQkJXAorCWEtPm1wYV9yeC5idWZfbGVuICs9IHNrYi0+bGVuOwkJCQkJXAorCWlmICghYS0+bXBhX3J4LnBrdF9jbnQpCQkJCQkJXAorCQlhLT5tcGFfcnguc3RhcnRfcG9ydCA9IHBvcnQ7CQkJCVwKKwlpZiAoYS0+bXBhX3J4LnN0YXJ0X3BvcnQgPD0gcG9ydCkJCQkJXAorCQlhLT5tcGFfcngucG9ydHMgfD0gKDE8PChhLT5tcGFfcngucGt0X2NudCkpOwkJXAorCWVsc2UJCQkJCQkJCVwKKwkJYS0+bXBhX3J4LnBvcnRzIHw9ICgxPDwoYS0+bXBhX3J4LnBrdF9jbnQrMSkpOwkJXAorCWEtPm1wYV9yeC5za2JfYXJyW2EtPm1wYV9yeC5wa3RfY250XSA9IHNrYjsJCQlcCisJYS0+bXBhX3J4Lmxlbl9hcnJbYS0+bXBhX3J4LnBrdF9jbnRdID0gc2tiLT5sZW47CQlcCisJYS0+bXBhX3J4LnBrdF9jbnQrKzsJCQkJCQlcCit9IHdoaWxlICgwKTsKKworLyogUmVzZXQgU0RJTyBSeCBhZ2dyZWdhdGlvbiBidWZmZXIgcGFyYW1ldGVycyAqLworI2RlZmluZSBNUF9SWF9BR0dSX0JVRl9SRVNFVChhKSBkbyB7CQkJCQlcCisJYS0+bXBhX3J4LnBrdF9jbnQgPSAwOwkJCQkJCVwKKwlhLT5tcGFfcnguYnVmX2xlbiA9IDA7CQkJCQkJXAorCWEtPm1wYV9yeC5wb3J0cyA9IDA7CQkJCQkJXAorCWEtPm1wYV9yeC5zdGFydF9wb3J0ID0gMDsJCQkJCVwKK30gd2hpbGUgKDApOworCisKKy8qIGRhdGEgc3RydWN0dXJlIGZvciBTRElPIE1QQSBUWCAqLworc3RydWN0IG13aWZpZXhfc2Rpb19tcGFfdHggeworCS8qIG11bHRpcG9ydCB0eCBhZ2dyZWdhdGlvbiBidWZmZXIgcG9pbnRlciAqLworCXU4ICpidWY7CisJdTMyIGJ1Zl9sZW47CisJdTMyIHBrdF9jbnQ7CisJdTE2IHBvcnRzOworCXUxNiBzdGFydF9wb3J0OworCXU4IGVuYWJsZWQ7CisJdTMyIGJ1Zl9zaXplOworCXUzMiBwa3RfYWdncl9saW1pdDsKK307CisKK3N0cnVjdCBtd2lmaWV4X3NkaW9fbXBhX3J4IHsKKwl1OCAqYnVmOworCXUzMiBidWZfbGVuOworCXUzMiBwa3RfY250OworCXUxNiBwb3J0czsKKwl1MTYgc3RhcnRfcG9ydDsKKworCXN0cnVjdCBza19idWZmICpza2JfYXJyW1NESU9fTVBfQUdHUl9ERUZfUEtUX0xJTUlUXTsKKwl1MzIgbGVuX2FycltTRElPX01QX0FHR1JfREVGX1BLVF9MSU1JVF07CisKKwl1OCBlbmFibGVkOworCXUzMiBidWZfc2l6ZTsKKwl1MzIgcGt0X2FnZ3JfbGltaXQ7Cit9OworCitpbnQgbXdpZmlleF9idXNfcmVnaXN0ZXIodm9pZCk7Cit2b2lkIG13aWZpZXhfYnVzX3VucmVnaXN0ZXIodm9pZCk7CisKK3N0cnVjdCBzZGlvX21tY19jYXJkIHsKKwlzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jOworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXI7CisKKwl1MTYgbXBfcmRfYml0bWFwOworCXUxNiBtcF93cl9iaXRtYXA7CisKKwl1MTYgbXBfZW5kX3BvcnQ7CisJdTE2IG1wX2RhdGFfcG9ydF9tYXNrOworCisJdTggY3Vycl9yZF9wb3J0OworCXU4IGN1cnJfd3JfcG9ydDsKKworCXU4ICptcF9yZWdzOworCisJc3RydWN0IG13aWZpZXhfc2Rpb19tcGFfdHggbXBhX3R4OworCXN0cnVjdCBtd2lmaWV4X3NkaW9fbXBhX3J4IG1wYV9yeDsKK307CisjZW5kaWYgLyogX01XSUZJRVhfU0RJT19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3N0YV9jbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvc3RhX2NtZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZjNhNzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3N0YV9jbWQuYwpAQCAtMCwwICsxLDEyMTkgQEAKKy8qCisgKiBNYXJ2ZWxsIFdpcmVsZXNzIExBTiBkZXZpY2UgZHJpdmVyOiBzdGF0aW9uIGNvbW1hbmQgaGFuZGxpbmcKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBmaWxlICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwKKyAqIEx0ZC4gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIEp1bmUgMTk5MQorICogKHRoZSAiTGljZW5zZSIpLiAgWW91IG1heSB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSBpbgorICogYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdoaWNoCisgKiBpcyBhdmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQSBvciBvbiB0aGUKKyAqIHdvcmxkd2lkZSB3ZWIgYXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dC4KKyAqCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1JUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgQU5EIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0CisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIuCisgKi8KKworI2luY2x1ZGUgImRlY2wuaCIKKyNpbmNsdWRlICJpb2N0bC5oIgorI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJmdy5oIgorI2luY2x1ZGUgIm1haW4uaCIKKyNpbmNsdWRlICJ3bW0uaCIKKyNpbmNsdWRlICIxMW4uaCIKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgY29tbWFuZCB0byBzZXQvZ2V0IFJTU0kgaW5mb3JtYXRpb24uCisgKgorICogUHJlcGFyYXRpb24gaW5jbHVkZXMgLQorICogICAgICAtIFNldHRpbmcgY29tbWFuZCBJRCwgYWN0aW9uIGFuZCBwcm9wZXIgc2l6ZQorICogICAgICAtIFNldHRpbmcgZGF0YS9iZWFjb24gYXZlcmFnZSBmYWN0b3JzCisgKiAgICAgIC0gUmVzZXR0aW5nIFNOUi9ORi9SU1NJIHZhbHVlcyBpbiBwcml2YXRlIHN0cnVjdHVyZQorICogICAgICAtIEVuc3VyaW5nIGNvcnJlY3QgZW5kaWFuLW5lc3MKKyAqLworc3RhdGljIGludAorbXdpZmlleF9jbWRfODAyXzExX3Jzc2lfaW5mbyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLCB1MTYgY21kX2FjdGlvbikKK3sKKwljbWQtPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihIb3N0Q21kX0NNRF9SU1NJX0lORk8pOworCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX3Jzc2lfaW5mbykgKworCQkJCVNfRFNfR0VOKTsKKwljbWQtPnBhcmFtcy5yc3NpX2luZm8uYWN0aW9uID0gY3B1X3RvX2xlMTYoY21kX2FjdGlvbik7CisJY21kLT5wYXJhbXMucnNzaV9pbmZvLm5kYXRhID0gY3B1X3RvX2xlMTYocHJpdi0+ZGF0YV9hdmdfZmFjdG9yKTsKKwljbWQtPnBhcmFtcy5yc3NpX2luZm8ubmJjbiA9IGNwdV90b19sZTE2KHByaXYtPmJjbl9hdmdfZmFjdG9yKTsKKworCS8qIFJlc2V0IFNOUi9ORi9SU1NJIHZhbHVlcyBpbiBwcml2YXRlIHN0cnVjdHVyZSAqLworCXByaXYtPmRhdGFfcnNzaV9sYXN0ID0gMDsKKwlwcml2LT5kYXRhX25mX2xhc3QgPSAwOworCXByaXYtPmRhdGFfcnNzaV9hdmcgPSAwOworCXByaXYtPmRhdGFfbmZfYXZnID0gMDsKKwlwcml2LT5iY25fcnNzaV9sYXN0ID0gMDsKKwlwcml2LT5iY25fbmZfbGFzdCA9IDA7CisJcHJpdi0+YmNuX3Jzc2lfYXZnID0gMDsKKwlwcml2LT5iY25fbmZfYXZnID0gMDsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyBjb21tYW5kIHRvIHNldCBNQUMgY29udHJvbC4KKyAqCisgKiBQcmVwYXJhdGlvbiBpbmNsdWRlcyAtCisgKiAgICAgIC0gU2V0dGluZyBjb21tYW5kIElELCBhY3Rpb24gYW5kIHByb3BlciBzaXplCisgKiAgICAgIC0gRW5zdXJpbmcgY29ycmVjdCBlbmRpYW4tbmVzcworICovCitzdGF0aWMgaW50IG13aWZpZXhfY21kX21hY19jb250cm9sKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJICAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwKKwkJCQkgICB1MTYgY21kX2FjdGlvbiwgdm9pZCAqZGF0YV9idWYpCit7CisJc3RydWN0IGhvc3RfY21kX2RzX21hY19jb250cm9sICptYWNfY3RybCA9ICZjbWQtPnBhcmFtcy5tYWNfY3RybDsKKwl1MTYgYWN0aW9uID0gKigodTE2ICopIGRhdGFfYnVmKTsKKworCWlmIChjbWRfYWN0aW9uICE9IEhvc3RDbWRfQUNUX0dFTl9TRVQpIHsKKwkJZGV2X2Vycihwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkibWFjX2NvbnRyb2w6IG9ubHkgc3VwcG9ydCBzZXQgY21kXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWNtZC0+Y29tbWFuZCA9IGNwdV90b19sZTE2KEhvc3RDbWRfQ01EX01BQ19DT05UUk9MKTsKKwljbWQtPnNpemUgPQorCQljcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGhvc3RfY21kX2RzX21hY19jb250cm9sKSArIFNfRFNfR0VOKTsKKwltYWNfY3RybC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoYWN0aW9uKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyBjb21tYW5kIHRvIHNldC9nZXQgU05NUCBNSUIuCisgKgorICogUHJlcGFyYXRpb24gaW5jbHVkZXMgLQorICogICAgICAtIFNldHRpbmcgY29tbWFuZCBJRCwgYWN0aW9uIGFuZCBwcm9wZXIgc2l6ZQorICogICAgICAtIFNldHRpbmcgU05NUCBNSUIgT0lEIG51bWJlciBhbmQgdmFsdWUKKyAqICAgICAgICAoYXMgcmVxdWlyZWQpCisgKiAgICAgIC0gRW5zdXJpbmcgY29ycmVjdCBlbmRpYW4tbmVzcworICoKKyAqIFRoZSBmb2xsb3dpbmcgU05NUCBNSUIgT0lEcyBhcmUgc3VwcG9ydGVkIC0KKyAqICAgICAgLSBGUkFHX1RIUkVTSF9JICAgICA6IEZyYWdtZW50YXRpb24gdGhyZXNob2xkCisgKiAgICAgIC0gUlRTX1RIUkVTSF9JICAgICAgOiBSVFMgdGhyZXNob2xkCisgKiAgICAgIC0gU0hPUlRfUkVUUllfTElNX0kgOiBTaG9ydCByZXRyeSBsaW1pdAorICogICAgICAtIERPVDExRF9JICAgICAgICAgIDogMTFkIHN1cHBvcnQKKyAqLworc3RhdGljIGludCBtd2lmaWV4X2NtZF84MDJfMTFfc25tcF9taWIoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgICAgICAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwKKwkJCQkgICAgICAgdTE2IGNtZF9hY3Rpb24sIHUzMiBjbWRfb2lkLAorCQkJCSAgICAgICB2b2lkICpkYXRhX2J1ZikKK3sKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX3NubXBfbWliICpzbm1wX21pYiA9ICZjbWQtPnBhcmFtcy5zbWliOworCXUzMiB1bF90ZW1wOworCisJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJjbWQ6IFNOTVBfQ01EOiBjbWRfb2lkID0gMHgleFxuIiwgY21kX29pZCk7CisJY21kLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoSG9zdENtZF9DTURfODAyXzExX1NOTVBfTUlCKTsKKwljbWQtPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9zbm1wX21pYikKKwkJLSAxICsgU19EU19HRU4pOworCisJaWYgKGNtZF9hY3Rpb24gPT0gSG9zdENtZF9BQ1RfR0VOX0dFVCkgeworCQlzbm1wX21pYi0+cXVlcnlfdHlwZSA9IGNwdV90b19sZTE2KEhvc3RDbWRfQUNUX0dFTl9HRVQpOworCQlzbm1wX21pYi0+YnVmX3NpemUgPSBjcHVfdG9fbGUxNihNQVhfU05NUF9CVUZfU0laRSk7CisJCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KGxlMTZfdG9fY3B1KGNtZC0+c2l6ZSkKKwkJCSsgTUFYX1NOTVBfQlVGX1NJWkUpOworCX0KKworCXN3aXRjaCAoY21kX29pZCkgeworCWNhc2UgRlJBR19USFJFU0hfSToKKwkJc25tcF9taWItPm9pZCA9IGNwdV90b19sZTE2KCh1MTYpIEZSQUdfVEhSRVNIX0kpOworCQlpZiAoY21kX2FjdGlvbiA9PSBIb3N0Q21kX0FDVF9HRU5fU0VUKSB7CisJCQlzbm1wX21pYi0+cXVlcnlfdHlwZSA9IGNwdV90b19sZTE2KEhvc3RDbWRfQUNUX0dFTl9TRVQpOworCQkJc25tcF9taWItPmJ1Zl9zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHUxNikpOworCQkJdWxfdGVtcCA9ICooKHUzMiAqKSBkYXRhX2J1Zik7CisJCQkqKChfX2xlMTYgKikgKHNubXBfbWliLT52YWx1ZSkpID0KKwkJCQljcHVfdG9fbGUxNigodTE2KSB1bF90ZW1wKTsKKwkJCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KGxlMTZfdG9fY3B1KGNtZC0+c2l6ZSkKKwkJCQkrIHNpemVvZih1MTYpKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFJUU19USFJFU0hfSToKKwkJc25tcF9taWItPm9pZCA9IGNwdV90b19sZTE2KCh1MTYpIFJUU19USFJFU0hfSSk7CisJCWlmIChjbWRfYWN0aW9uID09IEhvc3RDbWRfQUNUX0dFTl9TRVQpIHsKKwkJCXNubXBfbWliLT5xdWVyeV90eXBlID0gY3B1X3RvX2xlMTYoSG9zdENtZF9BQ1RfR0VOX1NFVCk7CisJCQlzbm1wX21pYi0+YnVmX3NpemUgPSBjcHVfdG9fbGUxNihzaXplb2YodTE2KSk7CisJCQl1bF90ZW1wID0gKigodTMyICopIGRhdGFfYnVmKTsKKwkJCSooX19sZTE2ICopIChzbm1wX21pYi0+dmFsdWUpID0KKwkJCQljcHVfdG9fbGUxNigodTE2KSB1bF90ZW1wKTsKKwkJCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KGxlMTZfdG9fY3B1KGNtZC0+c2l6ZSkKKwkJCQkrIHNpemVvZih1MTYpKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgU0hPUlRfUkVUUllfTElNX0k6CisJCXNubXBfbWliLT5vaWQgPSBjcHVfdG9fbGUxNigodTE2KSBTSE9SVF9SRVRSWV9MSU1fSSk7CisJCWlmIChjbWRfYWN0aW9uID09IEhvc3RDbWRfQUNUX0dFTl9TRVQpIHsKKwkJCXNubXBfbWliLT5xdWVyeV90eXBlID0gY3B1X3RvX2xlMTYoSG9zdENtZF9BQ1RfR0VOX1NFVCk7CisJCQlzbm1wX21pYi0+YnVmX3NpemUgPSBjcHVfdG9fbGUxNihzaXplb2YodTE2KSk7CisJCQl1bF90ZW1wID0gKCoodTMyICopIGRhdGFfYnVmKTsKKwkJCSooKF9fbGUxNiAqKSAoc25tcF9taWItPnZhbHVlKSkgPQorCQkJCWNwdV90b19sZTE2KCh1MTYpIHVsX3RlbXApOworCQkJY21kLT5zaXplID0gY3B1X3RvX2xlMTYobGUxNl90b19jcHUoY21kLT5zaXplKQorCQkJCSsgc2l6ZW9mKHUxNikpOworCQl9CisJCWJyZWFrOworCWNhc2UgRE9UMTFEX0k6CisJCXNubXBfbWliLT5vaWQgPSBjcHVfdG9fbGUxNigodTE2KSBET1QxMURfSSk7CisJCWlmIChjbWRfYWN0aW9uID09IEhvc3RDbWRfQUNUX0dFTl9TRVQpIHsKKwkJCXNubXBfbWliLT5xdWVyeV90eXBlID0gY3B1X3RvX2xlMTYoSG9zdENtZF9BQ1RfR0VOX1NFVCk7CisJCQlzbm1wX21pYi0+YnVmX3NpemUgPSBjcHVfdG9fbGUxNihzaXplb2YodTE2KSk7CisJCQl1bF90ZW1wID0gKih1MzIgKikgZGF0YV9idWY7CisJCQkqKChfX2xlMTYgKikgKHNubXBfbWliLT52YWx1ZSkpID0KKwkJCQljcHVfdG9fbGUxNigodTE2KSB1bF90ZW1wKTsKKwkJCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KGxlMTZfdG9fY3B1KGNtZC0+c2l6ZSkKKwkJCQkrIHNpemVvZih1MTYpKTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsCisJCSJjbWQ6IFNOTVBfQ01EOiBBY3Rpb249MHgleCwgT0lEPTB4JXgsIE9JRFNpemU9MHgleCwiCisJCSIgVmFsdWU9MHgleFxuIiwKKwkgICAgICAgY21kX2FjdGlvbiwgY21kX29pZCwgbGUxNl90b19jcHUoc25tcF9taWItPmJ1Zl9zaXplKSwKKwkgICAgICAgbGUxNl90b19jcHUoKihfX2xlMTYgKikgc25tcF9taWItPnZhbHVlKSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGNvbW1hbmQgdG8gZ2V0IGxvZy4KKyAqCisgKiBQcmVwYXJhdGlvbiBpbmNsdWRlcyAtCisgKiAgICAgIC0gU2V0dGluZyBjb21tYW5kIElEIGFuZCBwcm9wZXIgc2l6ZQorICogICAgICAtIEVuc3VyaW5nIGNvcnJlY3QgZW5kaWFuLW5lc3MKKyAqLworc3RhdGljIGludAorbXdpZmlleF9jbWRfODAyXzExX2dldF9sb2coc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCkKK3sKKwljbWQtPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihIb3N0Q21kX0NNRF84MDJfMTFfR0VUX0xPRyk7CisJY21kLT5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfZ2V0X2xvZykgKworCQkJCVNfRFNfR0VOKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgY29tbWFuZCB0byBzZXQvZ2V0IFR4IGRhdGEgcmF0ZSBjb25maWd1cmF0aW9uLgorICoKKyAqIFByZXBhcmF0aW9uIGluY2x1ZGVzIC0KKyAqICAgICAgLSBTZXR0aW5nIGNvbW1hbmQgSUQsIGFjdGlvbiBhbmQgcHJvcGVyIHNpemUKKyAqICAgICAgLSBTZXR0aW5nIGNvbmZpZ3VyYXRpb24gaW5kZXgsIHJhdGUgc2NvcGUgYW5kIHJhdGUgZHJvcCBwYXR0ZXJuCisgKiAgICAgICAgcGFyYW1ldGVycyAoYXMgcmVxdWlyZWQpCisgKiAgICAgIC0gRW5zdXJpbmcgY29ycmVjdCBlbmRpYW4tbmVzcworICovCitzdGF0aWMgaW50IG13aWZpZXhfY21kX3R4X3JhdGVfY2ZnKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJICAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwKKwkJCQkgICB1MTYgY21kX2FjdGlvbiwgdm9pZCAqZGF0YV9idWYpCit7CisJc3RydWN0IGhvc3RfY21kX2RzX3R4X3JhdGVfY2ZnICpyYXRlX2NmZyA9ICZjbWQtPnBhcmFtcy50eF9yYXRlX2NmZzsKKwlzdHJ1Y3QgbXdpZmlleF9yYXRlX3Njb3BlICpyYXRlX3Njb3BlOworCXN0cnVjdCBtd2lmaWV4X3JhdGVfZHJvcF9wYXR0ZXJuICpyYXRlX2Ryb3A7CisJdTE2ICpwYml0bWFwX3JhdGVzID0gKHUxNiAqKSBkYXRhX2J1ZjsKKworCXUzMiBpOworCisJY21kLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoSG9zdENtZF9DTURfVFhfUkFURV9DRkcpOworCisJcmF0ZV9jZmctPmFjdGlvbiA9IGNwdV90b19sZTE2KGNtZF9hY3Rpb24pOworCXJhdGVfY2ZnLT5jZmdfaW5kZXggPSAwOworCisJcmF0ZV9zY29wZSA9IChzdHJ1Y3QgbXdpZmlleF9yYXRlX3Njb3BlICopICgodTggKikgcmF0ZV9jZmcgKworCQkgICAgICBzaXplb2Yoc3RydWN0IGhvc3RfY21kX2RzX3R4X3JhdGVfY2ZnKSk7CisJcmF0ZV9zY29wZS0+dHlwZSA9IGNwdV90b19sZTE2KFRMVl9UWVBFX1JBVEVfU0NPUEUpOworCXJhdGVfc2NvcGUtPmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgbXdpZmlleF9yYXRlX3Njb3BlKSAtCisJCQlzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyKSk7CisJaWYgKHBiaXRtYXBfcmF0ZXMgIT0gTlVMTCkgeworCQlyYXRlX3Njb3BlLT5ocl9kc3NzX3JhdGVfYml0bWFwID0gY3B1X3RvX2xlMTYocGJpdG1hcF9yYXRlc1swXSk7CisJCXJhdGVfc2NvcGUtPm9mZG1fcmF0ZV9iaXRtYXAgPSBjcHVfdG9fbGUxNihwYml0bWFwX3JhdGVzWzFdKTsKKwkJZm9yIChpID0gMDsKKwkJICAgICBpIDwgc2l6ZW9mKHJhdGVfc2NvcGUtPmh0X21jc19yYXRlX2JpdG1hcCkgLyBzaXplb2YodTE2KTsKKwkJICAgICBpKyspCisJCQlyYXRlX3Njb3BlLT5odF9tY3NfcmF0ZV9iaXRtYXBbaV0gPQorCQkJCWNwdV90b19sZTE2KHBiaXRtYXBfcmF0ZXNbMiArIGldKTsKKwl9IGVsc2UgeworCQlyYXRlX3Njb3BlLT5ocl9kc3NzX3JhdGVfYml0bWFwID0KKwkJCWNwdV90b19sZTE2KHByaXYtPmJpdG1hcF9yYXRlc1swXSk7CisJCXJhdGVfc2NvcGUtPm9mZG1fcmF0ZV9iaXRtYXAgPQorCQkJY3B1X3RvX2xlMTYocHJpdi0+Yml0bWFwX3JhdGVzWzFdKTsKKwkJZm9yIChpID0gMDsKKwkJICAgICBpIDwgc2l6ZW9mKHJhdGVfc2NvcGUtPmh0X21jc19yYXRlX2JpdG1hcCkgLyBzaXplb2YodTE2KTsKKwkJICAgICBpKyspCisJCQlyYXRlX3Njb3BlLT5odF9tY3NfcmF0ZV9iaXRtYXBbaV0gPQorCQkJCWNwdV90b19sZTE2KHByaXYtPmJpdG1hcF9yYXRlc1syICsgaV0pOworCX0KKworCXJhdGVfZHJvcCA9IChzdHJ1Y3QgbXdpZmlleF9yYXRlX2Ryb3BfcGF0dGVybiAqKSAoKHU4ICopIHJhdGVfc2NvcGUgKworCQkJc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X3JhdGVfc2NvcGUpKTsKKwlyYXRlX2Ryb3AtPnR5cGUgPSBjcHVfdG9fbGUxNihUTFZfVFlQRV9SQVRFX0RST1BfQ09OVFJPTCk7CisJcmF0ZV9kcm9wLT5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YocmF0ZV9kcm9wLT5yYXRlX2Ryb3BfbW9kZSkpOworCXJhdGVfZHJvcC0+cmF0ZV9kcm9wX21vZGUgPSAwOworCisJY21kLT5zaXplID0KKwkJY3B1X3RvX2xlMTYoU19EU19HRU4gKyBzaXplb2Yoc3RydWN0IGhvc3RfY21kX2RzX3R4X3JhdGVfY2ZnKSArCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X3JhdGVfc2NvcGUpICsKKwkJCSAgICBzaXplb2Yoc3RydWN0IG13aWZpZXhfcmF0ZV9kcm9wX3BhdHRlcm4pKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyBjb21tYW5kIHRvIHNldC9nZXQgVHggcG93ZXIgY29uZmlndXJhdGlvbi4KKyAqCisgKiBQcmVwYXJhdGlvbiBpbmNsdWRlcyAtCisgKiAgICAgIC0gU2V0dGluZyBjb21tYW5kIElELCBhY3Rpb24gYW5kIHByb3BlciBzaXplCisgKiAgICAgIC0gU2V0dGluZyBUeCBwb3dlciBtb2RlLCBwb3dlciBncm91cCBUTFYKKyAqICAgICAgICAoYXMgcmVxdWlyZWQpCisgKiAgICAgIC0gRW5zdXJpbmcgY29ycmVjdCBlbmRpYW4tbmVzcworICovCitzdGF0aWMgaW50IG13aWZpZXhfY21kX3R4X3Bvd2VyX2NmZyhzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLAorCQkJCSAgICB1MTYgY21kX2FjdGlvbiwgdm9pZCAqZGF0YV9idWYpCit7CisJc3RydWN0IG13aWZpZXhfdHlwZXNfcG93ZXJfZ3JvdXAgKnBnX3RsdjsKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfdHhwd3JfY2ZnICp0eHA7CisJc3RydWN0IGhvc3RfY21kX2RzX3R4cHdyX2NmZyAqY21kX3R4cF9jZmcgPSAmY21kLT5wYXJhbXMudHhwX2NmZzsKKworCWNtZC0+Y29tbWFuZCA9IGNwdV90b19sZTE2KEhvc3RDbWRfQ01EX1RYUFdSX0NGRyk7CisJY21kLT5zaXplID0KKwkJY3B1X3RvX2xlMTYoU19EU19HRU4gKyBzaXplb2Yoc3RydWN0IGhvc3RfY21kX2RzX3R4cHdyX2NmZykpOworCXN3aXRjaCAoY21kX2FjdGlvbikgeworCWNhc2UgSG9zdENtZF9BQ1RfR0VOX1NFVDoKKwkJdHhwID0gKHN0cnVjdCBob3N0X2NtZF9kc190eHB3cl9jZmcgKikgZGF0YV9idWY7CisJCWlmICh0eHAtPm1vZGUpIHsKKwkJCXBnX3RsdiA9IChzdHJ1Y3QgbXdpZmlleF90eXBlc19wb3dlcl9ncm91cAorCQkJCSAgKikgKCh1bnNpZ25lZCBsb25nKSBkYXRhX2J1ZiArCisJCQkJICAgICBzaXplb2Yoc3RydWN0IGhvc3RfY21kX2RzX3R4cHdyX2NmZykpOworCQkJbWVtbW92ZShjbWRfdHhwX2NmZywgZGF0YV9idWYsCisJCQkJc2l6ZW9mKHN0cnVjdCBob3N0X2NtZF9kc190eHB3cl9jZmcpICsKKwkJCQlzaXplb2Yoc3RydWN0IG13aWZpZXhfdHlwZXNfcG93ZXJfZ3JvdXApICsKKwkJCQlwZ190bHYtPmxlbmd0aCk7CisKKwkJCXBnX3RsdiA9IChzdHJ1Y3QgbXdpZmlleF90eXBlc19wb3dlcl9ncm91cCAqKSAoKHU4ICopCisJCQkJICBjbWRfdHhwX2NmZyArCisJCQkJICBzaXplb2Yoc3RydWN0IGhvc3RfY21kX2RzX3R4cHdyX2NmZykpOworCQkJY21kLT5zaXplID0gY3B1X3RvX2xlMTYobGUxNl90b19jcHUoY21kLT5zaXplKSArCisJCQkJICBzaXplb2Yoc3RydWN0IG13aWZpZXhfdHlwZXNfcG93ZXJfZ3JvdXApICsKKwkJCQkgIHBnX3Rsdi0+bGVuZ3RoKTsKKwkJfSBlbHNlIHsKKwkJCW1lbW1vdmUoY21kX3R4cF9jZmcsIGRhdGFfYnVmLAorCQkJCXNpemVvZihzdHJ1Y3QgaG9zdF9jbWRfZHNfdHhwd3JfY2ZnKSk7CisJCX0KKwkJY21kX3R4cF9jZmctPmFjdGlvbiA9IGNwdV90b19sZTE2KGNtZF9hY3Rpb24pOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQUNUX0dFTl9HRVQ6CisJCWNtZF90eHBfY2ZnLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihjbWRfYWN0aW9uKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGNvbW1hbmQgdG8gc2V0IEhvc3QgU2xlZXAgY29uZmlndXJhdGlvbi4KKyAqCisgKiBQcmVwYXJhdGlvbiBpbmNsdWRlcyAtCisgKiAgICAgIC0gU2V0dGluZyBjb21tYW5kIElEIGFuZCBwcm9wZXIgc2l6ZQorICogICAgICAtIFNldHRpbmcgSG9zdCBTbGVlcCBhY3Rpb24sIGNvbmRpdGlvbnMsIEFSUCBmaWx0ZXJzCisgKiAgICAgICAgKGFzIHJlcXVpcmVkKQorICogICAgICAtIEVuc3VyaW5nIGNvcnJlY3QgZW5kaWFuLW5lc3MKKyAqLworc3RhdGljIGludCBtd2lmaWV4X2NtZF84MDJfMTFfaHNfY2ZnKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJICAgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLAorCQkJCSAgICAgdTE2IGNtZF9hY3Rpb24sCisJCQkJICAgICBzdHJ1Y3QgbXdpZmlleF9oc19jb25maWdfcGFyYW0gKmRhdGFfYnVmKQoreworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfaHNfY2ZnX2VuaCAqaHNfY2ZnID0gJmNtZC0+cGFyYW1zLm9wdF9oc19jZmc7CisJdTE2IGhzX2FjdGl2YXRlID0gZmFsc2U7CisKKwlpZiAoZGF0YV9idWYgPT0gTlVMTCkKKwkJLyogTmV3IEFjdGl2YXRlIGNvbW1hbmQgKi8KKwkJaHNfYWN0aXZhdGUgPSB0cnVlOworCWNtZC0+Y29tbWFuZCA9IGNwdV90b19sZTE2KEhvc3RDbWRfQ01EXzgwMl8xMV9IU19DRkdfRU5IKTsKKworCWlmICghaHNfYWN0aXZhdGUgJiYKKwkgICAgKGRhdGFfYnVmLT5jb25kaXRpb25zCisJICAgICE9IGNwdV90b19sZTMyKEhPU1RfU0xFRVBfQ0ZHX0NBTkNFTCkpCisJICAgICYmICgoYWRhcHRlci0+YXJwX2ZpbHRlcl9zaXplID4gMCkKKwkJJiYgKGFkYXB0ZXItPmFycF9maWx0ZXJfc2l6ZSA8PSBBUlBfRklMVEVSX01BWF9CVUZfU0laRSkpKSB7CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LAorCQkJImNtZDogQXR0YWNoICVkIGJ5dGVzIEFycEZpbHRlciB0byBIU0NmZyBjbWRcbiIsCisJCSAgICAgICBhZGFwdGVyLT5hcnBfZmlsdGVyX3NpemUpOworCQltZW1jcHkoKCh1OCAqKSBoc19jZmcpICsKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2hzX2NmZ19lbmgpLAorCQkgICAgICAgYWRhcHRlci0+YXJwX2ZpbHRlciwgYWRhcHRlci0+YXJwX2ZpbHRlcl9zaXplKTsKKwkJY21kLT5zaXplID0gY3B1X3RvX2xlMTYoYWRhcHRlci0+YXJwX2ZpbHRlcl9zaXplICsKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfaHNfY2ZnX2VuaCkKKwkJCQkgICAgKyBTX0RTX0dFTik7CisJfSBlbHNlIHsKKwkJY21kLT5zaXplID0gY3B1X3RvX2xlMTYoU19EU19HRU4gKyBzaXplb2Yoc3RydWN0CisJCQkJCSAgIGhvc3RfY21kX2RzXzgwMl8xMV9oc19jZmdfZW5oKSk7CisJfQorCWlmIChoc19hY3RpdmF0ZSkgeworCQloc19jZmctPmFjdGlvbiA9IGNwdV90b19sZTE2KEhTX0FDVElWQVRFKTsKKwkJaHNfY2ZnLT5wYXJhbXMuaHNfYWN0aXZhdGUucmVzcF9jdHJsID0gUkVTUF9ORUVERUQ7CisJfSBlbHNlIHsKKwkJaHNfY2ZnLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihIU19DT05GSUdVUkUpOworCQloc19jZmctPnBhcmFtcy5oc19jb25maWcuY29uZGl0aW9ucyA9IGRhdGFfYnVmLT5jb25kaXRpb25zOworCQloc19jZmctPnBhcmFtcy5oc19jb25maWcuZ3BpbyA9IGRhdGFfYnVmLT5ncGlvOworCQloc19jZmctPnBhcmFtcy5oc19jb25maWcuZ2FwID0gZGF0YV9idWYtPmdhcDsKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsCisJCQkiY21kOiBIU19DRkdfQ01EOiBjb25kaXRpb246MHgleCBncGlvOjB4JXggZ2FwOjB4JXhcbiIsCisJCSAgICAgICBoc19jZmctPnBhcmFtcy5oc19jb25maWcuY29uZGl0aW9ucywKKwkJICAgICAgIGhzX2NmZy0+cGFyYW1zLmhzX2NvbmZpZy5ncGlvLAorCQkgICAgICAgaHNfY2ZnLT5wYXJhbXMuaHNfY29uZmlnLmdhcCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGNvbW1hbmQgdG8gc2V0L2dldCBNQUMgYWRkcmVzcy4KKyAqCisgKiBQcmVwYXJhdGlvbiBpbmNsdWRlcyAtCisgKiAgICAgIC0gU2V0dGluZyBjb21tYW5kIElELCBhY3Rpb24gYW5kIHByb3BlciBzaXplCisgKiAgICAgIC0gU2V0dGluZyBNQUMgYWRkcmVzcyAoZm9yIFNFVCBvbmx5KQorICogICAgICAtIEVuc3VyaW5nIGNvcnJlY3QgZW5kaWFuLW5lc3MKKyAqLworc3RhdGljIGludCBtd2lmaWV4X2NtZF84MDJfMTFfbWFjX2FkZHJlc3Moc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkJICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLAorCQkJCQkgIHUxNiBjbWRfYWN0aW9uKQoreworCWNtZC0+Y29tbWFuZCA9IGNwdV90b19sZTE2KEhvc3RDbWRfQ01EXzgwMl8xMV9NQUNfQUREUkVTUyk7CisJY21kLT5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfbWFjX2FkZHJlc3MpICsKKwkJCQlTX0RTX0dFTik7CisJY21kLT5yZXN1bHQgPSAwOworCisJY21kLT5wYXJhbXMubWFjX2FkZHIuYWN0aW9uID0gY3B1X3RvX2xlMTYoY21kX2FjdGlvbik7CisKKwlpZiAoY21kX2FjdGlvbiA9PSBIb3N0Q21kX0FDVF9HRU5fU0VUKQorCQltZW1jcHkoY21kLT5wYXJhbXMubWFjX2FkZHIubWFjX2FkZHIsIHByaXYtPmN1cnJfYWRkciwKKwkJICAgICAgIEVUSF9BTEVOKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgY29tbWFuZCB0byBzZXQgTUFDIG11bHRpY2FzdCBhZGRyZXNzLgorICoKKyAqIFByZXBhcmF0aW9uIGluY2x1ZGVzIC0KKyAqICAgICAgLSBTZXR0aW5nIGNvbW1hbmQgSUQsIGFjdGlvbiBhbmQgcHJvcGVyIHNpemUKKyAqICAgICAgLSBTZXR0aW5nIE1BQyBtdWx0aWNhc3QgYWRkcmVzcworICogICAgICAtIEVuc3VyaW5nIGNvcnJlY3QgZW5kaWFuLW5lc3MKKyAqLworc3RhdGljIGludCBtd2lmaWV4X2NtZF9tYWNfbXVsdGljYXN0X2FkcihzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLAorCQkJCQkgdTE2IGNtZF9hY3Rpb24sIHZvaWQgKmRhdGFfYnVmKQoreworCXN0cnVjdCBtd2lmaWV4X211bHRpY2FzdF9saXN0ICptY2FzdF9saXN0ID0KKwkJKHN0cnVjdCBtd2lmaWV4X211bHRpY2FzdF9saXN0ICopIGRhdGFfYnVmOworCXN0cnVjdCBob3N0X2NtZF9kc19tYWNfbXVsdGljYXN0X2FkciAqbWNhc3RfYWRkciA9ICZjbWQtPnBhcmFtcy5tY19hZGRyOworCisJY21kLT5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBob3N0X2NtZF9kc19tYWNfbXVsdGljYXN0X2FkcikgKworCQkJCVNfRFNfR0VOKTsKKwljbWQtPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihIb3N0Q21kX0NNRF9NQUNfTVVMVElDQVNUX0FEUik7CisKKwltY2FzdF9hZGRyLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihjbWRfYWN0aW9uKTsKKwltY2FzdF9hZGRyLT5udW1fb2ZfYWRycyA9CisJCWNwdV90b19sZTE2KCh1MTYpIG1jYXN0X2xpc3QtPm51bV9tdWx0aWNhc3RfYWRkcik7CisJbWVtY3B5KG1jYXN0X2FkZHItPm1hY19saXN0LCBtY2FzdF9saXN0LT5tYWNfbGlzdCwKKwkgICAgICAgbWNhc3RfbGlzdC0+bnVtX211bHRpY2FzdF9hZGRyICogRVRIX0FMRU4pOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGNvbW1hbmQgdG8gZGVhdXRoZW50aWNhdGUuCisgKgorICogUHJlcGFyYXRpb24gaW5jbHVkZXMgLQorICogICAgICAtIFNldHRpbmcgY29tbWFuZCBJRCBhbmQgcHJvcGVyIHNpemUKKyAqICAgICAgLSBTZXR0aW5nIEFQIE1BQyBhZGRyZXNzIGFuZCByZWFzb24gY29kZQorICogICAgICAtIEVuc3VyaW5nIGNvcnJlY3QgZW5kaWFuLW5lc3MKKyAqLworc3RhdGljIGludCBtd2lmaWV4X2NtZF84MDJfMTFfZGVhdXRoZW50aWNhdGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkJICAgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLAorCQkJCQkgICAgIHZvaWQgKmRhdGFfYnVmKQoreworCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfZGVhdXRoZW50aWNhdGUgKmRlYXV0aCA9ICZjbWQtPnBhcmFtcy5kZWF1dGg7CisKKwljbWQtPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihIb3N0Q21kX0NNRF84MDJfMTFfREVBVVRIRU5USUNBVEUpOworCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2RlYXV0aGVudGljYXRlKQorCQkJCSsgU19EU19HRU4pOworCisJLyogU2V0IEFQIE1BQyBhZGRyZXNzICovCisJbWVtY3B5KGRlYXV0aC0+bWFjX2FkZHIsICh1OCAqKSBkYXRhX2J1ZiwgRVRIX0FMRU4pOworCisJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJjbWQ6IERlYXV0aDogJXBNXG4iLCBkZWF1dGgtPm1hY19hZGRyKTsKKworCWRlYXV0aC0+cmVhc29uX2NvZGUgPSBjcHVfdG9fbGUxNihXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgY29tbWFuZCB0byBzdG9wIEFkLUhvYyBuZXR3b3JrLgorICoKKyAqIFByZXBhcmF0aW9uIGluY2x1ZGVzIC0KKyAqICAgICAgLSBTZXR0aW5nIGNvbW1hbmQgSUQgYW5kIHByb3BlciBzaXplCisgKiAgICAgIC0gRW5zdXJpbmcgY29ycmVjdCBlbmRpYW4tbmVzcworICovCitzdGF0aWMgaW50IG13aWZpZXhfY21kXzgwMl8xMV9hZF9ob2Nfc3RvcChzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kKQoreworCWNtZC0+Y29tbWFuZCA9IGNwdV90b19sZTE2KEhvc3RDbWRfQ01EXzgwMl8xMV9BRF9IT0NfU1RPUCk7CisJY21kLT5zaXplID0gY3B1X3RvX2xlMTYoU19EU19HRU4pOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIFdFUCBrZXkocykgdG8ga2V5IHBhcmFtZXRlciBUTFYocykuCisgKgorICogTXVsdGkta2V5IHBhcmFtZXRlciBUTFZzIGFyZSBzdXBwb3J0ZWQsIHNvIHdlIGNhbiBzZW5kIG11bHRpcGxlCisgKiBXRVAga2V5cyBpbiBhIHNpbmdsZSBidWZmZXIuCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfc2V0X2tleXBhcmFtc2V0X3dlcChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgIHN0cnVjdCBtd2lmaWV4X2llX3R5cGVfa2V5X3BhcmFtX3NldCAqa2V5X3BhcmFtX3NldCwKKwkJCSAgICB1MTYgKmtleV9wYXJhbV9sZW4pCit7CisJaW50IGN1cl9rZXlfcGFyYW1fbGVuOworCXU4IGk7CisKKwkvKiBNdWx0aS1rZXlfcGFyYW1fc2V0IFRMViBpcyBzdXBwb3J0ZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1dFUF9LRVlTOyBpKyspIHsKKwkJaWYgKChwcml2LT53ZXBfa2V5W2ldLmtleV9sZW5ndGggPT0gV0xBTl9LRVlfTEVOX1dFUDQwKSB8fAorCQkgICAgKHByaXYtPndlcF9rZXlbaV0ua2V5X2xlbmd0aCA9PSBXTEFOX0tFWV9MRU5fV0VQMTA0KSkgeworCQkJa2V5X3BhcmFtX3NldC0+dHlwZSA9CisJCQkJY3B1X3RvX2xlMTYoVExWX1RZUEVfS0VZX01BVEVSSUFMKTsKKy8qIEtleV9wYXJhbV9zZXQgV0VQIGZpeGVkIGxlbmd0aCAqLworI2RlZmluZSBLRVlQQVJBTVNFVF9XRVBfRklYRURfTEVOIDgKKwkJCWtleV9wYXJhbV9zZXQtPmxlbmd0aCA9IGNwdV90b19sZTE2KCh1MTYpCisJCQkJCShwcml2LT53ZXBfa2V5W2ldLgorCQkJCQkga2V5X2xlbmd0aCArCisJCQkJCSBLRVlQQVJBTVNFVF9XRVBfRklYRURfTEVOKSk7CisJCQlrZXlfcGFyYW1fc2V0LT5rZXlfdHlwZV9pZCA9CisJCQkJY3B1X3RvX2xlMTYoS0VZX1RZUEVfSURfV0VQKTsKKwkJCWtleV9wYXJhbV9zZXQtPmtleV9pbmZvID0KKwkJCQljcHVfdG9fbGUxNihLRVlfRU5BQkxFRCB8IEtFWV9VTklDQVNUIHwKKwkJCQkJICAgIEtFWV9NQ0FTVCk7CisJCQlrZXlfcGFyYW1fc2V0LT5rZXlfbGVuID0KKwkJCQljcHVfdG9fbGUxNihwcml2LT53ZXBfa2V5W2ldLmtleV9sZW5ndGgpOworCQkJLyogU2V0IFdFUCBrZXkgaW5kZXggKi8KKwkJCWtleV9wYXJhbV9zZXQtPmtleVswXSA9IGk7CisJCQkvKiBTZXQgZGVmYXVsdCBUeCBrZXkgZmxhZyAqLworCQkJaWYgKGkgPT0KKwkJCSAgICAocHJpdi0+CisJCQkgICAgIHdlcF9rZXlfY3Vycl9pbmRleCAmIEhvc3RDbWRfV0VQX0tFWV9JTkRFWF9NQVNLKSkKKwkJCQlrZXlfcGFyYW1fc2V0LT5rZXlbMV0gPSAxOworCQkJZWxzZQorCQkJCWtleV9wYXJhbV9zZXQtPmtleVsxXSA9IDA7CisJCQltZW1tb3ZlKCZrZXlfcGFyYW1fc2V0LT5rZXlbMl0sCisJCQkJcHJpdi0+d2VwX2tleVtpXS5rZXlfbWF0ZXJpYWwsCisJCQkJcHJpdi0+d2VwX2tleVtpXS5rZXlfbGVuZ3RoKTsKKworCQkJY3VyX2tleV9wYXJhbV9sZW4gPSBwcml2LT53ZXBfa2V5W2ldLmtleV9sZW5ndGggKworCQkJCUtFWVBBUkFNU0VUX1dFUF9GSVhFRF9MRU4gKworCQkJCXNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIpOworCQkJKmtleV9wYXJhbV9sZW4gKz0gKHUxNikgY3VyX2tleV9wYXJhbV9sZW47CisJCQlrZXlfcGFyYW1fc2V0ID0KKwkJCQkoc3RydWN0IG13aWZpZXhfaWVfdHlwZV9rZXlfcGFyYW1fc2V0ICopCisJCQkJCQkoKHU4ICopa2V5X3BhcmFtX3NldCArCisJCQkJCQljdXJfa2V5X3BhcmFtX2xlbik7CisJCX0gZWxzZSBpZiAoIXByaXYtPndlcF9rZXlbaV0ua2V5X2xlbmd0aCkgeworCQkJY29udGludWU7CisJCX0gZWxzZSB7CisJCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwKKwkJCQkia2V5JWQgTGVuZ3RoID0gJWQgaXMgaW5jb3JyZWN0XG4iLAorCQkJICAgICAgIChpICsgMSksIHByaXYtPndlcF9rZXlbaV0ua2V5X2xlbmd0aCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgY29tbWFuZCB0byBzZXQvZ2V0L3Jlc2V0IG5ldHdvcmsga2V5KHMpLgorICoKKyAqIFByZXBhcmF0aW9uIGluY2x1ZGVzIC0KKyAqICAgICAgLSBTZXR0aW5nIGNvbW1hbmQgSUQsIGFjdGlvbiBhbmQgcHJvcGVyIHNpemUKKyAqICAgICAgLSBTZXR0aW5nIFdFUCBrZXlzLCBXQVBJIGtleXMgb3IgV1BBIGtleXMgYWxvbmcgd2l0aCByZXF1aXJlZAorICogICAgICAgIGVuY3J5cHRpb24gKFRLSVAsIEFFUykgKGFzIHJlcXVpcmVkKQorICogICAgICAtIEVuc3VyaW5nIGNvcnJlY3QgZW5kaWFuLW5lc3MKKyAqLworc3RhdGljIGludCBtd2lmaWV4X2NtZF84MDJfMTFfa2V5X21hdGVyaWFsKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJCSAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWQsCisJCQkJCSAgIHUxNiBjbWRfYWN0aW9uLAorCQkJCQkgICB1MzIgY21kX29pZCwgdm9pZCAqZGF0YV9idWYpCit7CisJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9rZXlfbWF0ZXJpYWwgKmtleV9tYXRlcmlhbCA9CisJCSZjbWQtPnBhcmFtcy5rZXlfbWF0ZXJpYWw7CisJc3RydWN0IG13aWZpZXhfZHNfZW5jcnlwdF9rZXkgKmVuY19rZXkgPQorCQkoc3RydWN0IG13aWZpZXhfZHNfZW5jcnlwdF9rZXkgKikgZGF0YV9idWY7CisJdTE2IGtleV9wYXJhbV9sZW4gPSAwOworCWludCByZXQgPSAwOworCWNvbnN0IHU4IGJjX21hY1tdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH07CisKKwljbWQtPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihIb3N0Q21kX0NNRF84MDJfMTFfS0VZX01BVEVSSUFMKTsKKwlrZXlfbWF0ZXJpYWwtPmFjdGlvbiA9IGNwdV90b19sZTE2KGNtZF9hY3Rpb24pOworCisJaWYgKGNtZF9hY3Rpb24gPT0gSG9zdENtZF9BQ1RfR0VOX0dFVCkgeworCQljbWQtPnNpemUgPQorCQkJY3B1X3RvX2xlMTYoc2l6ZW9mKGtleV9tYXRlcmlhbC0+YWN0aW9uKSArIFNfRFNfR0VOKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoIWVuY19rZXkpIHsKKwkJbWVtc2V0KCZrZXlfbWF0ZXJpYWwtPmtleV9wYXJhbV9zZXQsIDAsCisJCSAgICAgICAoTlVNX1dFUF9LRVlTICoKKwkJCXNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlX2tleV9wYXJhbV9zZXQpKSk7CisJCXJldCA9IG13aWZpZXhfc2V0X2tleXBhcmFtc2V0X3dlcChwcml2LAorCQkJCQkJICAma2V5X21hdGVyaWFsLT5rZXlfcGFyYW1fc2V0LAorCQkJCQkJICAma2V5X3BhcmFtX2xlbik7CisJCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KGtleV9wYXJhbV9sZW4gKworCQkJCSAgICBzaXplb2Yoa2V5X21hdGVyaWFsLT5hY3Rpb24pICsgU19EU19HRU4pOworCQlyZXR1cm4gcmV0OworCX0gZWxzZQorCQltZW1zZXQoJmtleV9tYXRlcmlhbC0+a2V5X3BhcmFtX3NldCwgMCwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlX2tleV9wYXJhbV9zZXQpKTsKKwlpZiAoZW5jX2tleS0+aXNfd2FwaV9rZXkpIHsKKwkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiBTZXQgV0FQSSBLZXlcbiIpOworCQlrZXlfbWF0ZXJpYWwtPmtleV9wYXJhbV9zZXQua2V5X3R5cGVfaWQgPQorCQkJY3B1X3RvX2xlMTYoS0VZX1RZUEVfSURfV0FQSSk7CisJCWlmIChjbWRfb2lkID09IEtFWV9JTkZPX0VOQUJMRUQpCisJCQlrZXlfbWF0ZXJpYWwtPmtleV9wYXJhbV9zZXQua2V5X2luZm8gPQorCQkJCWNwdV90b19sZTE2KEtFWV9FTkFCTEVEKTsKKwkJZWxzZQorCQkJa2V5X21hdGVyaWFsLT5rZXlfcGFyYW1fc2V0LmtleV9pbmZvID0KKwkJCQljcHVfdG9fbGUxNighS0VZX0VOQUJMRUQpOworCisJCWtleV9tYXRlcmlhbC0+a2V5X3BhcmFtX3NldC5rZXlbMF0gPSBlbmNfa2V5LT5rZXlfaW5kZXg7CisJCWlmICghcHJpdi0+c2VjX2luZm8ud2FwaV9rZXlfb24pCisJCQlrZXlfbWF0ZXJpYWwtPmtleV9wYXJhbV9zZXQua2V5WzFdID0gMTsKKwkJZWxzZQorCQkJLyogc2V0IDAgd2hlbiByZS1rZXkgKi8KKwkJCWtleV9tYXRlcmlhbC0+a2V5X3BhcmFtX3NldC5rZXlbMV0gPSAwOworCisJCWlmICgwICE9IG1lbWNtcChlbmNfa2V5LT5tYWNfYWRkciwgYmNfbWFjLCBzaXplb2YoYmNfbWFjKSkpIHsKKwkJCS8qIFdBUEkgcGFpcndpc2Uga2V5OiB1bmljYXN0ICovCisJCQlrZXlfbWF0ZXJpYWwtPmtleV9wYXJhbV9zZXQua2V5X2luZm8gfD0KKwkJCQljcHVfdG9fbGUxNihLRVlfVU5JQ0FTVCk7CisJCX0gZWxzZSB7CS8qIFdBUEkgZ3JvdXAga2V5OiBtdWx0aWNhc3QgKi8KKwkJCWtleV9tYXRlcmlhbC0+a2V5X3BhcmFtX3NldC5rZXlfaW5mbyB8PQorCQkJCWNwdV90b19sZTE2KEtFWV9NQ0FTVCk7CisJCQlwcml2LT5zZWNfaW5mby53YXBpX2tleV9vbiA9IHRydWU7CisJCX0KKworCQlrZXlfbWF0ZXJpYWwtPmtleV9wYXJhbV9zZXQudHlwZSA9CisJCQljcHVfdG9fbGUxNihUTFZfVFlQRV9LRVlfTUFURVJJQUwpOworCQlrZXlfbWF0ZXJpYWwtPmtleV9wYXJhbV9zZXQua2V5X2xlbiA9CisJCQljcHVfdG9fbGUxNihXQVBJX0tFWV9MRU4pOworCQltZW1jcHkoJmtleV9tYXRlcmlhbC0+a2V5X3BhcmFtX3NldC5rZXlbMl0sCisJCSAgICAgICBlbmNfa2V5LT5rZXlfbWF0ZXJpYWwsIGVuY19rZXktPmtleV9sZW4pOworCQltZW1jcHkoJmtleV9tYXRlcmlhbC0+a2V5X3BhcmFtX3NldC5rZXlbMiArIGVuY19rZXktPmtleV9sZW5dLAorCQkgICAgICAgZW5jX2tleS0+d2FwaV9yeHBuLCBXQVBJX1JYUE5fTEVOKTsKKwkJa2V5X21hdGVyaWFsLT5rZXlfcGFyYW1fc2V0Lmxlbmd0aCA9CisJCQljcHVfdG9fbGUxNihXQVBJX0tFWV9MRU4gKyBLRVlQQVJBTVNFVF9GSVhFRF9MRU4pOworCisJCWtleV9wYXJhbV9sZW4gPSAoV0FQSV9LRVlfTEVOICsgS0VZUEFSQU1TRVRfRklYRURfTEVOKSArCisJCQkJIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIpOworCQljbWQtPnNpemUgPSBjcHVfdG9fbGUxNihrZXlfcGFyYW1fbGVuICsKKwkJCQlzaXplb2Yoa2V5X21hdGVyaWFsLT5hY3Rpb24pICsgU19EU19HRU4pOworCQlyZXR1cm4gcmV0OworCX0KKwlpZiAoZW5jX2tleS0+a2V5X2xlbiA9PSBXTEFOX0tFWV9MRU5fQ0NNUCkgeworCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImNtZDogV1BBX0FFU1xuIik7CisJCWtleV9tYXRlcmlhbC0+a2V5X3BhcmFtX3NldC5rZXlfdHlwZV9pZCA9CisJCQljcHVfdG9fbGUxNihLRVlfVFlQRV9JRF9BRVMpOworCQlpZiAoY21kX29pZCA9PSBLRVlfSU5GT19FTkFCTEVEKQorCQkJa2V5X21hdGVyaWFsLT5rZXlfcGFyYW1fc2V0LmtleV9pbmZvID0KKwkJCQljcHVfdG9fbGUxNihLRVlfRU5BQkxFRCk7CisJCWVsc2UKKwkJCWtleV9tYXRlcmlhbC0+a2V5X3BhcmFtX3NldC5rZXlfaW5mbyA9CisJCQkJY3B1X3RvX2xlMTYoIUtFWV9FTkFCTEVEKTsKKworCQlpZiAoZW5jX2tleS0+a2V5X2luZGV4ICYgTVdJRklFWF9LRVlfSU5ERVhfVU5JQ0FTVCkKKwkJCQkvKiBBRVMgcGFpcndpc2Uga2V5OiB1bmljYXN0ICovCisJCQlrZXlfbWF0ZXJpYWwtPmtleV9wYXJhbV9zZXQua2V5X2luZm8gfD0KKwkJCQljcHVfdG9fbGUxNihLRVlfVU5JQ0FTVCk7CisJCWVsc2UJCS8qIEFFUyBncm91cCBrZXk6IG11bHRpY2FzdCAqLworCQkJa2V5X21hdGVyaWFsLT5rZXlfcGFyYW1fc2V0LmtleV9pbmZvIHw9CisJCQkJY3B1X3RvX2xlMTYoS0VZX01DQVNUKTsKKwl9IGVsc2UgaWYgKGVuY19rZXktPmtleV9sZW4gPT0gV0xBTl9LRVlfTEVOX1RLSVApIHsKKwkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJjbWQ6IFdQQV9US0lQXG4iKTsKKwkJa2V5X21hdGVyaWFsLT5rZXlfcGFyYW1fc2V0LmtleV90eXBlX2lkID0KKwkJCWNwdV90b19sZTE2KEtFWV9UWVBFX0lEX1RLSVApOworCQlrZXlfbWF0ZXJpYWwtPmtleV9wYXJhbV9zZXQua2V5X2luZm8gPQorCQkJY3B1X3RvX2xlMTYoS0VZX0VOQUJMRUQpOworCisJCWlmIChlbmNfa2V5LT5rZXlfaW5kZXggJiBNV0lGSUVYX0tFWV9JTkRFWF9VTklDQVNUKQorCQkJCS8qIFRLSVAgcGFpcndpc2Uga2V5OiB1bmljYXN0ICovCisJCQlrZXlfbWF0ZXJpYWwtPmtleV9wYXJhbV9zZXQua2V5X2luZm8gfD0KKwkJCQljcHVfdG9fbGUxNihLRVlfVU5JQ0FTVCk7CisJCWVsc2UJCS8qIFRLSVAgZ3JvdXAga2V5OiBtdWx0aWNhc3QgKi8KKwkJCWtleV9tYXRlcmlhbC0+a2V5X3BhcmFtX3NldC5rZXlfaW5mbyB8PQorCQkJCWNwdV90b19sZTE2KEtFWV9NQ0FTVCk7CisJfQorCisJaWYgKGtleV9tYXRlcmlhbC0+a2V5X3BhcmFtX3NldC5rZXlfdHlwZV9pZCkgeworCQlrZXlfbWF0ZXJpYWwtPmtleV9wYXJhbV9zZXQudHlwZSA9CisJCQljcHVfdG9fbGUxNihUTFZfVFlQRV9LRVlfTUFURVJJQUwpOworCQlrZXlfbWF0ZXJpYWwtPmtleV9wYXJhbV9zZXQua2V5X2xlbiA9CisJCQljcHVfdG9fbGUxNigodTE2KSBlbmNfa2V5LT5rZXlfbGVuKTsKKwkJbWVtY3B5KGtleV9tYXRlcmlhbC0+a2V5X3BhcmFtX3NldC5rZXksIGVuY19rZXktPmtleV9tYXRlcmlhbCwKKwkJICAgICAgIGVuY19rZXktPmtleV9sZW4pOworCQlrZXlfbWF0ZXJpYWwtPmtleV9wYXJhbV9zZXQubGVuZ3RoID0KKwkJCWNwdV90b19sZTE2KCh1MTYpIGVuY19rZXktPmtleV9sZW4gKworCQkJCSAgICBLRVlQQVJBTVNFVF9GSVhFRF9MRU4pOworCisJCWtleV9wYXJhbV9sZW4gPSAodTE2KSAoZW5jX2tleS0+a2V5X2xlbiArIEtFWVBBUkFNU0VUX0ZJWEVEX0xFTikKKwkJCQkgICAgICArIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIpOworCisJCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KGtleV9wYXJhbV9sZW4gKworCQkJCSAgICBzaXplb2Yoa2V5X21hdGVyaWFsLT5hY3Rpb24pICsgU19EU19HRU4pOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGNvbW1hbmQgdG8gc2V0L2dldCAxMWQgZG9tYWluIGluZm9ybWF0aW9uLgorICoKKyAqIFByZXBhcmF0aW9uIGluY2x1ZGVzIC0KKyAqICAgICAgLSBTZXR0aW5nIGNvbW1hbmQgSUQsIGFjdGlvbiBhbmQgcHJvcGVyIHNpemUKKyAqICAgICAgLSBTZXR0aW5nIGRvbWFpbiBpbmZvcm1hdGlvbiBmaWVsZHMgKGZvciBTRVQgb25seSkKKyAqICAgICAgLSBFbnN1cmluZyBjb3JyZWN0IGVuZGlhbi1uZXNzCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9jbWRfODAyXzExZF9kb21haW5faW5mbyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCQkgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLAorCQkJCQkgICB1MTYgY21kX2FjdGlvbikKK3sKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExZF9kb21haW5faW5mbyAqZG9tYWluX2luZm8gPQorCQkmY21kLT5wYXJhbXMuZG9tYWluX2luZm87CisJc3RydWN0IG13aWZpZXhfaWV0eXBlc19kb21haW5fcGFyYW1fc2V0ICpkb21haW4gPQorCQkmZG9tYWluX2luZm8tPmRvbWFpbjsKKwl1OCBub19vZl90cmlwbGV0ID0gYWRhcHRlci0+ZG9tYWluX3JlZy5ub19vZl90cmlwbGV0OworCisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiAxMUQ6IG5vX29mX3RyaXBsZXQ9MHgleFxuIiwgbm9fb2ZfdHJpcGxldCk7CisKKwljbWQtPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihIb3N0Q21kX0NNRF84MDJfMTFEX0RPTUFJTl9JTkZPKTsKKwlkb21haW5faW5mby0+YWN0aW9uID0gY3B1X3RvX2xlMTYoY21kX2FjdGlvbik7CisJaWYgKGNtZF9hY3Rpb24gPT0gSG9zdENtZF9BQ1RfR0VOX0dFVCkgeworCQljbWQtPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2YoZG9tYWluX2luZm8tPmFjdGlvbikgKyBTX0RTX0dFTik7CisJCXJldHVybiAwOworCX0KKworCS8qIFNldCBkb21haW4gaW5mbyBmaWVsZHMgKi8KKwlkb21haW4tPmhlYWRlci50eXBlID0gY3B1X3RvX2xlMTYoV0xBTl9FSURfQ09VTlRSWSk7CisJbWVtY3B5KGRvbWFpbi0+Y291bnRyeV9jb2RlLCBhZGFwdGVyLT5kb21haW5fcmVnLmNvdW50cnlfY29kZSwKKwkJCXNpemVvZihkb21haW4tPmNvdW50cnlfY29kZSkpOworCisJZG9tYWluLT5oZWFkZXIubGVuID0gY3B1X3RvX2xlMTYoKG5vX29mX3RyaXBsZXQgKgorCQkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2NvdW50cnlfaWVfdHJpcGxldCkpICsKKwkJCQlzaXplb2YoZG9tYWluLT5jb3VudHJ5X2NvZGUpKTsKKworCWlmIChub19vZl90cmlwbGV0KSB7CisJCW1lbWNweShkb21haW4tPnRyaXBsZXQsIGFkYXB0ZXItPmRvbWFpbl9yZWcudHJpcGxldCwKKwkJCQlub19vZl90cmlwbGV0ICoKKwkJCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jb3VudHJ5X2llX3RyaXBsZXQpKTsKKworCQljbWQtPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2YoZG9tYWluX2luZm8tPmFjdGlvbikgKworCQkJCWxlMTZfdG9fY3B1KGRvbWFpbi0+aGVhZGVyLmxlbikgKworCQkJCXNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIpCisJCQkJKyBTX0RTX0dFTik7CisJfSBlbHNlIHsKKwkJY21kLT5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKGRvbWFpbl9pbmZvLT5hY3Rpb24pICsgU19EU19HRU4pOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyBjb21tYW5kIHRvIHNldC9nZXQgUkYgY2hhbm5lbC4KKyAqCisgKiBQcmVwYXJhdGlvbiBpbmNsdWRlcyAtCisgKiAgICAgIC0gU2V0dGluZyBjb21tYW5kIElELCBhY3Rpb24gYW5kIHByb3BlciBzaXplCisgKiAgICAgIC0gU2V0dGluZyBSRiB0eXBlIGFuZCBjdXJyZW50IFJGIGNoYW5uZWwgKGZvciBTRVQgb25seSkKKyAqICAgICAgLSBFbnN1cmluZyBjb3JyZWN0IGVuZGlhbi1uZXNzCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9jbWRfODAyXzExX3JmX2NoYW5uZWwoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkJIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWQsCisJCQkJCSB1MTYgY21kX2FjdGlvbiwgdm9pZCAqZGF0YV9idWYpCit7CisJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9yZl9jaGFubmVsICpyZl9jaGFuID0KKwkJJmNtZC0+cGFyYW1zLnJmX2NoYW5uZWw7CisJdWludDE2X3QgcmZfdHlwZSA9IGxlMTZfdG9fY3B1KHJmX2NoYW4tPnJmX3R5cGUpOworCisJY21kLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoSG9zdENtZF9DTURfODAyXzExX1JGX0NIQU5ORUwpOworCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX3JmX2NoYW5uZWwpCisJCQkJKyBTX0RTX0dFTik7CisKKwlpZiAoY21kX2FjdGlvbiA9PSBIb3N0Q21kX0FDVF9HRU5fU0VUKSB7CisJCWlmICgocHJpdi0+YWRhcHRlci0+YWRob2Nfc3RhcnRfYmFuZCAmIEJBTkRfQSkKKwkJICAgIHx8IChwcml2LT5hZGFwdGVyLT5hZGhvY19zdGFydF9iYW5kICYgQkFORF9BTikpCisJCQlyZl9jaGFuLT5yZl90eXBlID0KKwkJCQljcHVfdG9fbGUxNihIb3N0Q21kX1NDQU5fUkFESU9fVFlQRV9BKTsKKworCQlyZl90eXBlID0gbGUxNl90b19jcHUocmZfY2hhbi0+cmZfdHlwZSk7CisJCVNFVF9TRUNPTkRBUllDSEFOKHJmX3R5cGUsIHByaXYtPmFkYXB0ZXItPmNoYW5fb2Zmc2V0KTsKKwkJcmZfY2hhbi0+Y3VycmVudF9jaGFubmVsID0gY3B1X3RvX2xlMTYoKigodTE2ICopIGRhdGFfYnVmKSk7CisJfQorCXJmX2NoYW4tPmFjdGlvbiA9IGNwdV90b19sZTE2KGNtZF9hY3Rpb24pOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyBjb21tYW5kIHRvIHNldC9nZXQgSUJTUyBjb2FsZXNjaW5nIHN0YXR1cy4KKyAqCisgKiBQcmVwYXJhdGlvbiBpbmNsdWRlcyAtCisgKiAgICAgIC0gU2V0dGluZyBjb21tYW5kIElELCBhY3Rpb24gYW5kIHByb3BlciBzaXplCisgKiAgICAgIC0gU2V0dGluZyBzdGF0dXMgdG8gZW5hYmxlIG9yIGRpc2FibGUgKGZvciBTRVQgb25seSkKKyAqICAgICAgLSBFbnN1cmluZyBjb3JyZWN0IGVuZGlhbi1uZXNzCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9jbWRfaWJzc19jb2FsZXNjaW5nX3N0YXR1cyhzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLAorCQkJCQkgICAgICB1MTYgY21kX2FjdGlvbiwgdm9pZCAqZGF0YV9idWYpCit7CisJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9pYnNzX3N0YXR1cyAqaWJzc19jb2FsID0KKwkJJihjbWQtPnBhcmFtcy5pYnNzX2NvYWxlc2NpbmcpOworCXUxNiBlbmFibGUgPSAwOworCisJY21kLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoSG9zdENtZF9DTURfODAyXzExX0lCU1NfQ09BTEVTQ0lOR19TVEFUVVMpOworCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2lic3Nfc3RhdHVzKSArCisJCQkJU19EU19HRU4pOworCWNtZC0+cmVzdWx0ID0gMDsKKwlpYnNzX2NvYWwtPmFjdGlvbiA9IGNwdV90b19sZTE2KGNtZF9hY3Rpb24pOworCisJc3dpdGNoIChjbWRfYWN0aW9uKSB7CisJY2FzZSBIb3N0Q21kX0FDVF9HRU5fU0VUOgorCQlpZiAoZGF0YV9idWYgIT0gTlVMTCkKKwkJCWVuYWJsZSA9ICoodTE2ICopIGRhdGFfYnVmOworCQlpYnNzX2NvYWwtPmVuYWJsZSA9IGNwdV90b19sZTE2KGVuYWJsZSk7CisJCWJyZWFrOworCisJCS8qIEluIG90aGVyIGNhc2UuLiBOb3RoaW5nIHRvIGRvICovCisJY2FzZSBIb3N0Q21kX0FDVF9HRU5fR0VUOgorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyBjb21tYW5kIHRvIHNldC9nZXQgcmVnaXN0ZXIgdmFsdWUuCisgKgorICogUHJlcGFyYXRpb24gaW5jbHVkZXMgLQorICogICAgICAtIFNldHRpbmcgY29tbWFuZCBJRCwgYWN0aW9uIGFuZCBwcm9wZXIgc2l6ZQorICogICAgICAtIFNldHRpbmcgcmVnaXN0ZXIgb2Zmc2V0IChmb3IgYm90aCBHRVQgYW5kIFNFVCkgYW5kCisgKiAgICAgICAgcmVnaXN0ZXIgdmFsdWUgKGZvciBTRVQgb25seSkKKyAqICAgICAgLSBFbnN1cmluZyBjb3JyZWN0IGVuZGlhbi1uZXNzCisgKgorICogVGhlIGZvbGxvd2luZyB0eXBlIG9mIHJlZ2lzdGVycyBjYW4gYmUgYWNjZXNzZWQgd2l0aCB0aGlzIGZ1bmN0aW9uIC0KKyAqICAgICAgLSBNQUMgcmVnaXN0ZXIKKyAqICAgICAgLSBCQlAgcmVnaXN0ZXIKKyAqICAgICAgLSBSRiByZWdpc3RlcgorICogICAgICAtIFBNSUMgcmVnaXN0ZXIKKyAqICAgICAgLSBDQVUgcmVnaXN0ZXIKKyAqICAgICAgLSBFRVBST00KKyAqLworc3RhdGljIGludCBtd2lmaWV4X2NtZF9yZWdfYWNjZXNzKHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWQsCisJCQkJICB1MTYgY21kX2FjdGlvbiwgdm9pZCAqZGF0YV9idWYpCit7CisJc3RydWN0IG13aWZpZXhfZHNfcmVnX3J3ICpyZWdfcnc7CisKKwlyZWdfcncgPSAoc3RydWN0IG13aWZpZXhfZHNfcmVnX3J3ICopIGRhdGFfYnVmOworCXN3aXRjaCAobGUxNl90b19jcHUoY21kLT5jb21tYW5kKSkgeworCWNhc2UgSG9zdENtZF9DTURfTUFDX1JFR19BQ0NFU1M6CisJeworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfbWFjX3JlZ19hY2Nlc3MgKm1hY19yZWc7CisKKwkJY21kLT5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCptYWNfcmVnKSArIFNfRFNfR0VOKTsKKwkJbWFjX3JlZyA9IChzdHJ1Y3QgaG9zdF9jbWRfZHNfbWFjX3JlZ19hY2Nlc3MgKikgJmNtZC0+CisJCQlwYXJhbXMubWFjX3JlZzsKKwkJbWFjX3JlZy0+YWN0aW9uID0gY3B1X3RvX2xlMTYoY21kX2FjdGlvbik7CisJCW1hY19yZWctPm9mZnNldCA9CisJCQljcHVfdG9fbGUxNigodTE2KSBsZTMyX3RvX2NwdShyZWdfcnctPm9mZnNldCkpOworCQltYWNfcmVnLT52YWx1ZSA9IHJlZ19ydy0+dmFsdWU7CisJCWJyZWFrOworCX0KKwljYXNlIEhvc3RDbWRfQ01EX0JCUF9SRUdfQUNDRVNTOgorCXsKKwkJc3RydWN0IGhvc3RfY21kX2RzX2JicF9yZWdfYWNjZXNzICpiYnBfcmVnOworCisJCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZigqYmJwX3JlZykgKyBTX0RTX0dFTik7CisJCWJicF9yZWcgPSAoc3RydWN0IGhvc3RfY21kX2RzX2JicF9yZWdfYWNjZXNzICopICZjbWQtPgorCQkJcGFyYW1zLmJicF9yZWc7CisJCWJicF9yZWctPmFjdGlvbiA9IGNwdV90b19sZTE2KGNtZF9hY3Rpb24pOworCQliYnBfcmVnLT5vZmZzZXQgPQorCQkJY3B1X3RvX2xlMTYoKHUxNikgbGUzMl90b19jcHUocmVnX3J3LT5vZmZzZXQpKTsKKwkJYmJwX3JlZy0+dmFsdWUgPSAodTgpIGxlMzJfdG9fY3B1KHJlZ19ydy0+dmFsdWUpOworCQlicmVhazsKKwl9CisJY2FzZSBIb3N0Q21kX0NNRF9SRl9SRUdfQUNDRVNTOgorCXsKKwkJc3RydWN0IGhvc3RfY21kX2RzX3JmX3JlZ19hY2Nlc3MgKnJmX3JlZzsKKworCQljbWQtPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2YoKnJmX3JlZykgKyBTX0RTX0dFTik7CisJCXJmX3JlZyA9IChzdHJ1Y3QgaG9zdF9jbWRfZHNfcmZfcmVnX2FjY2VzcyAqKSAmY21kLT4KKwkJCXBhcmFtcy5yZl9yZWc7CisJCXJmX3JlZy0+YWN0aW9uID0gY3B1X3RvX2xlMTYoY21kX2FjdGlvbik7CisJCXJmX3JlZy0+b2Zmc2V0ID0KKwkJCWNwdV90b19sZTE2KCh1MTYpIGxlMzJfdG9fY3B1KHJlZ19ydy0+b2Zmc2V0KSk7CisJCXJmX3JlZy0+dmFsdWUgPSAodTgpIGxlMzJfdG9fY3B1KHJlZ19ydy0+dmFsdWUpOworCQlicmVhazsKKwl9CisJY2FzZSBIb3N0Q21kX0NNRF9QTUlDX1JFR19BQ0NFU1M6CisJeworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfcG1pY19yZWdfYWNjZXNzICpwbWljX3JlZzsKKworCQljbWQtPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2YoKnBtaWNfcmVnKSArIFNfRFNfR0VOKTsKKwkJcG1pY19yZWcgPSAoc3RydWN0IGhvc3RfY21kX2RzX3BtaWNfcmVnX2FjY2VzcyAqKSAmY21kLT4KKwkJCQlwYXJhbXMucG1pY19yZWc7CisJCXBtaWNfcmVnLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihjbWRfYWN0aW9uKTsKKwkJcG1pY19yZWctPm9mZnNldCA9CisJCQljcHVfdG9fbGUxNigodTE2KSBsZTMyX3RvX2NwdShyZWdfcnctPm9mZnNldCkpOworCQlwbWljX3JlZy0+dmFsdWUgPSAodTgpIGxlMzJfdG9fY3B1KHJlZ19ydy0+dmFsdWUpOworCQlicmVhazsKKwl9CisJY2FzZSBIb3N0Q21kX0NNRF9DQVVfUkVHX0FDQ0VTUzoKKwl7CisJCXN0cnVjdCBob3N0X2NtZF9kc19yZl9yZWdfYWNjZXNzICpjYXVfcmVnOworCisJCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZigqY2F1X3JlZykgKyBTX0RTX0dFTik7CisJCWNhdV9yZWcgPSAoc3RydWN0IGhvc3RfY21kX2RzX3JmX3JlZ19hY2Nlc3MgKikgJmNtZC0+CisJCQkJcGFyYW1zLnJmX3JlZzsKKwkJY2F1X3JlZy0+YWN0aW9uID0gY3B1X3RvX2xlMTYoY21kX2FjdGlvbik7CisJCWNhdV9yZWctPm9mZnNldCA9CisJCQljcHVfdG9fbGUxNigodTE2KSBsZTMyX3RvX2NwdShyZWdfcnctPm9mZnNldCkpOworCQljYXVfcmVnLT52YWx1ZSA9ICh1OCkgbGUzMl90b19jcHUocmVnX3J3LT52YWx1ZSk7CisJCWJyZWFrOworCX0KKwljYXNlIEhvc3RDbWRfQ01EXzgwMl8xMV9FRVBST01fQUNDRVNTOgorCXsKKwkJc3RydWN0IG13aWZpZXhfZHNfcmVhZF9lZXByb20gKnJkX2VlcHJvbSA9CisJCQkoc3RydWN0IG13aWZpZXhfZHNfcmVhZF9lZXByb20gKikgZGF0YV9idWY7CisJCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfZWVwcm9tX2FjY2VzcyAqY21kX2VlcHJvbSA9CisJCQkoc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9lZXByb21fYWNjZXNzICopCisJCQkmY21kLT5wYXJhbXMuZWVwcm9tOworCisJCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZigqY21kX2VlcHJvbSkgKyBTX0RTX0dFTik7CisJCWNtZF9lZXByb20tPmFjdGlvbiA9IGNwdV90b19sZTE2KGNtZF9hY3Rpb24pOworCQljbWRfZWVwcm9tLT5vZmZzZXQgPSByZF9lZXByb20tPm9mZnNldDsKKwkJY21kX2VlcHJvbS0+Ynl0ZV9jb3VudCA9IHJkX2VlcHJvbS0+Ynl0ZV9jb3VudDsKKwkJY21kX2VlcHJvbS0+dmFsdWUgPSAwOworCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyB0aGUgY29tbWFuZHMgYmVmb3JlIHNlbmRpbmcgdGhlbSB0byB0aGUgZmlybXdhcmUuCisgKgorICogVGhpcyBpcyBhIGdlbmVyaWMgZnVuY3Rpb24gd2hpY2ggY2FsbHMgc3BlY2lmaWMgY29tbWFuZCBwcmVwYXJhdGlvbgorICogcm91dGluZXMgYmFzZWQgdXBvbiB0aGUgY29tbWFuZCBudW1iZXIuCisgKi8KK2ludCBtd2lmaWV4X3N0YV9wcmVwYXJlX2NtZChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1aW50MTZfdCBjbWRfbm8sCisJCQkgICAgdTE2IGNtZF9hY3Rpb24sIHUzMiBjbWRfb2lkLAorCQkJICAgIHZvaWQgKmRhdGFfYnVmLCB2b2lkICpjbWRfYnVmKQoreworCXN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWRfcHRyID0KKwkJKHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICopIGNtZF9idWY7CisJaW50IHJldCA9IDA7CisKKwkvKiBQcmVwYXJlIGNvbW1hbmQgKi8KKwlzd2l0Y2ggKGNtZF9ubykgeworCWNhc2UgSG9zdENtZF9DTURfR0VUX0hXX1NQRUM6CisJCXJldCA9IG13aWZpZXhfY21kX2dldF9od19zcGVjKHByaXYsIGNtZF9wdHIpOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EX01BQ19DT05UUk9MOgorCQlyZXQgPSBtd2lmaWV4X2NtZF9tYWNfY29udHJvbChwcml2LCBjbWRfcHRyLCBjbWRfYWN0aW9uLAorCQkJCQkgICAgICBkYXRhX2J1Zik7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfODAyXzExX01BQ19BRERSRVNTOgorCQlyZXQgPSBtd2lmaWV4X2NtZF84MDJfMTFfbWFjX2FkZHJlc3MocHJpdiwgY21kX3B0ciwKKwkJCQkJCSAgICAgY21kX2FjdGlvbik7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfTUFDX01VTFRJQ0FTVF9BRFI6CisJCXJldCA9IG13aWZpZXhfY21kX21hY19tdWx0aWNhc3RfYWRyKGNtZF9wdHIsIGNtZF9hY3Rpb24sCisJCQkJCQkgICAgZGF0YV9idWYpOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EX1RYX1JBVEVfQ0ZHOgorCQlyZXQgPSBtd2lmaWV4X2NtZF90eF9yYXRlX2NmZyhwcml2LCBjbWRfcHRyLCBjbWRfYWN0aW9uLAorCQkJCQkgICAgICBkYXRhX2J1Zik7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfVFhQV1JfQ0ZHOgorCQlyZXQgPSBtd2lmaWV4X2NtZF90eF9wb3dlcl9jZmcoY21kX3B0ciwgY21kX2FjdGlvbiwKKwkJCQkJICAgICAgIGRhdGFfYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF84MDJfMTFfUFNfTU9ERV9FTkg6CisJCXJldCA9IG13aWZpZXhfY21kX2VuaF9wb3dlcl9tb2RlKHByaXYsIGNtZF9wdHIsIGNtZF9hY3Rpb24sCisJCQkJCQkgKHVpbnQxNl90KWNtZF9vaWQsIGRhdGFfYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF84MDJfMTFfSFNfQ0ZHX0VOSDoKKwkJcmV0ID0gbXdpZmlleF9jbWRfODAyXzExX2hzX2NmZyhwcml2LCBjbWRfcHRyLCBjbWRfYWN0aW9uLAorCQkJCShzdHJ1Y3QgbXdpZmlleF9oc19jb25maWdfcGFyYW0gKikgZGF0YV9idWYpOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EXzgwMl8xMV9TQ0FOOgorCQlyZXQgPSBtd2lmaWV4X2NtZF84MDJfMTFfc2NhbihjbWRfcHRyLCBkYXRhX2J1Zik7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfODAyXzExX0JHX1NDQU5fUVVFUlk6CisJCXJldCA9IG13aWZpZXhfY21kXzgwMl8xMV9iZ19zY2FuX3F1ZXJ5KGNtZF9wdHIpOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EXzgwMl8xMV9BU1NPQ0lBVEU6CisJCXJldCA9IG13aWZpZXhfY21kXzgwMl8xMV9hc3NvY2lhdGUocHJpdiwgY21kX3B0ciwgZGF0YV9idWYpOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EXzgwMl8xMV9ERUFVVEhFTlRJQ0FURToKKwkJcmV0ID0gbXdpZmlleF9jbWRfODAyXzExX2RlYXV0aGVudGljYXRlKHByaXYsIGNtZF9wdHIsCisJCQkJCQkJZGF0YV9idWYpOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EXzgwMl8xMV9BRF9IT0NfU1RBUlQ6CisJCXJldCA9IG13aWZpZXhfY21kXzgwMl8xMV9hZF9ob2Nfc3RhcnQocHJpdiwgY21kX3B0ciwKKwkJCQkJCSAgICAgIGRhdGFfYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF84MDJfMTFfR0VUX0xPRzoKKwkJcmV0ID0gbXdpZmlleF9jbWRfODAyXzExX2dldF9sb2coY21kX3B0cik7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfODAyXzExX0FEX0hPQ19KT0lOOgorCQlyZXQgPSBtd2lmaWV4X2NtZF84MDJfMTFfYWRfaG9jX2pvaW4ocHJpdiwgY21kX3B0ciwKKwkJCQkJCSAgICAgZGF0YV9idWYpOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EXzgwMl8xMV9BRF9IT0NfU1RPUDoKKwkJcmV0ID0gbXdpZmlleF9jbWRfODAyXzExX2FkX2hvY19zdG9wKGNtZF9wdHIpOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EX1JTU0lfSU5GTzoKKwkJcmV0ID0gbXdpZmlleF9jbWRfODAyXzExX3Jzc2lfaW5mbyhwcml2LCBjbWRfcHRyLCBjbWRfYWN0aW9uKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF84MDJfMTFfU05NUF9NSUI6CisJCXJldCA9IG13aWZpZXhfY21kXzgwMl8xMV9zbm1wX21pYihwcml2LCBjbWRfcHRyLCBjbWRfYWN0aW9uLAorCQkJCQkJICBjbWRfb2lkLCBkYXRhX2J1Zik7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfODAyXzExX1RYX1JBVEVfUVVFUlk6CisJCWNtZF9wdHItPmNvbW1hbmQgPQorCQkJY3B1X3RvX2xlMTYoSG9zdENtZF9DTURfODAyXzExX1RYX1JBVEVfUVVFUlkpOworCQljbWRfcHRyLT5zaXplID0KKwkJCWNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgaG9zdF9jbWRfZHNfdHhfcmF0ZV9xdWVyeSkgKworCQkJCSAgICBTX0RTX0dFTik7CisJCXByaXYtPnR4X3JhdGUgPSAwOworCQlyZXQgPSAwOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EX1ZFUlNJT05fRVhUOgorCQljbWRfcHRyLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoY21kX25vKTsKKwkJY21kX3B0ci0+cGFyYW1zLnZlcmV4dC52ZXJzaW9uX3N0cl9zZWwgPQorCQkJKHU4KSAoKigodTMyICopIGRhdGFfYnVmKSk7CisJCW1lbWNweSgmY21kX3B0ci0+cGFyYW1zLCBkYXRhX2J1ZiwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgaG9zdF9jbWRfZHNfdmVyc2lvbl9leHQpKTsKKwkJY21kX3B0ci0+c2l6ZSA9CisJCQljcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGhvc3RfY21kX2RzX3ZlcnNpb25fZXh0KSArCisJCQkJICAgIFNfRFNfR0VOKTsKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF84MDJfMTFfUkZfQ0hBTk5FTDoKKwkJcmV0ID0gbXdpZmlleF9jbWRfODAyXzExX3JmX2NoYW5uZWwocHJpdiwgY21kX3B0ciwgY21kX2FjdGlvbiwKKwkJCQkJCSAgICBkYXRhX2J1Zik7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfRlVOQ19JTklUOgorCQlpZiAocHJpdi0+YWRhcHRlci0+aHdfc3RhdHVzID09IE1XSUZJRVhfSFdfU1RBVFVTX1JFU0VUKQorCQkJcHJpdi0+YWRhcHRlci0+aHdfc3RhdHVzID0gTVdJRklFWF9IV19TVEFUVVNfUkVBRFk7CisJCWNtZF9wdHItPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihjbWRfbm8pOworCQljbWRfcHRyLT5zaXplID0gY3B1X3RvX2xlMTYoU19EU19HRU4pOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EX0ZVTkNfU0hVVERPV046CisJCXByaXYtPmFkYXB0ZXItPmh3X3N0YXR1cyA9IE1XSUZJRVhfSFdfU1RBVFVTX1JFU0VUOworCQljbWRfcHRyLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoY21kX25vKTsKKwkJY21kX3B0ci0+c2l6ZSA9IGNwdV90b19sZTE2KFNfRFNfR0VOKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF8xMU5fQUREQkFfUkVROgorCQlyZXQgPSBtd2lmaWV4X2NtZF8xMW5fYWRkYmFfcmVxKGNtZF9wdHIsIGRhdGFfYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF8xMU5fREVMQkE6CisJCXJldCA9IG13aWZpZXhfY21kXzExbl9kZWxiYShjbWRfcHRyLCBkYXRhX2J1Zik7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfMTFOX0FEREJBX1JTUDoKKwkJcmV0ID0gbXdpZmlleF9jbWRfMTFuX2FkZGJhX3JzcF9nZW4ocHJpdiwgY21kX3B0ciwgZGF0YV9idWYpOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EXzgwMl8xMV9LRVlfTUFURVJJQUw6CisJCXJldCA9IG13aWZpZXhfY21kXzgwMl8xMV9rZXlfbWF0ZXJpYWwocHJpdiwgY21kX3B0ciwKKwkJCQkJCWNtZF9hY3Rpb24sIGNtZF9vaWQsCisJCQkJCQlkYXRhX2J1Zik7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfODAyXzExRF9ET01BSU5fSU5GTzoKKwkJcmV0ID0gbXdpZmlleF9jbWRfODAyXzExZF9kb21haW5faW5mbyhwcml2LCBjbWRfcHRyLAorCQkJCQkJY21kX2FjdGlvbik7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfUkVDT05GSUdVUkVfVFhfQlVGRjoKKwkJcmV0ID0gbXdpZmlleF9jbWRfcmVjZmdfdHhfYnVmKHByaXYsIGNtZF9wdHIsIGNtZF9hY3Rpb24sCisJCQkJCSAgICAgICBkYXRhX2J1Zik7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfQU1TRFVfQUdHUl9DVFJMOgorCQlyZXQgPSBtd2lmaWV4X2NtZF9hbXNkdV9hZ2dyX2N0cmwoY21kX3B0ciwgY21kX2FjdGlvbiwKKwkJCQkJCSAgZGF0YV9idWYpOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EXzExTl9DRkc6CisJCXJldCA9IG13aWZpZXhfY21kXzExbl9jZmcoY21kX3B0ciwgY21kX2FjdGlvbiwKKwkJCQkJICBkYXRhX2J1Zik7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfV01NX0dFVF9TVEFUVVM6CisJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJImNtZDogV01NOiBXTU1fR0VUX1NUQVRVUyBjbWQgc2VudFxuIik7CisJCWNtZF9wdHItPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihIb3N0Q21kX0NNRF9XTU1fR0VUX1NUQVRVUyk7CisJCWNtZF9wdHItPnNpemUgPQorCQkJY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBob3N0X2NtZF9kc193bW1fZ2V0X3N0YXR1cykgKworCQkJCSAgICBTX0RTX0dFTik7CisJCXJldCA9IDA7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfODAyXzExX0lCU1NfQ09BTEVTQ0lOR19TVEFUVVM6CisJCXJldCA9IG13aWZpZXhfY21kX2lic3NfY29hbGVzY2luZ19zdGF0dXMoY21kX3B0ciwgY21kX2FjdGlvbiwKKwkJCQkJCQkgZGF0YV9idWYpOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EX01BQ19SRUdfQUNDRVNTOgorCWNhc2UgSG9zdENtZF9DTURfQkJQX1JFR19BQ0NFU1M6CisJY2FzZSBIb3N0Q21kX0NNRF9SRl9SRUdfQUNDRVNTOgorCWNhc2UgSG9zdENtZF9DTURfUE1JQ19SRUdfQUNDRVNTOgorCWNhc2UgSG9zdENtZF9DTURfQ0FVX1JFR19BQ0NFU1M6CisJY2FzZSBIb3N0Q21kX0NNRF84MDJfMTFfRUVQUk9NX0FDQ0VTUzoKKwkJcmV0ID0gbXdpZmlleF9jbWRfcmVnX2FjY2VzcyhjbWRfcHRyLCBjbWRfYWN0aW9uLCBkYXRhX2J1Zik7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfU0VUX0JTU19NT0RFOgorCQljbWRfcHRyLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoY21kX25vKTsKKwkJaWYgKHByaXYtPmJzc19tb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCQkJY21kX3B0ci0+cGFyYW1zLmJzc19tb2RlLmNvbl90eXBlID0KKwkJCQlDT05ORUNUSU9OX1RZUEVfQURIT0M7CisJCWVsc2UgaWYgKHByaXYtPmJzc19tb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCQljbWRfcHRyLT5wYXJhbXMuYnNzX21vZGUuY29uX3R5cGUgPQorCQkJCUNPTk5FQ1RJT05fVFlQRV9JTkZSQTsKKwkJY21kX3B0ci0+c2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QKKwkJCQlob3N0X2NtZF9kc19zZXRfYnNzX21vZGUpICsgU19EU19HRU4pOworCQlyZXQgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwKKwkJCSJQUkVQX0NNRDogdW5rbm93biBjbWQtICUjeFxuIiwgY21kX25vKTsKKwkJcmV0ID0gLTE7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpc3N1ZXMgY29tbWFuZHMgdG8gaW5pdGlhbGl6ZSBmaXJtd2FyZS4KKyAqCisgKiBUaGlzIGlzIGNhbGxlZCBhZnRlciBmaXJtd2FyZSBkb3dubG9hZCB0byBicmluZyB0aGUgY2FyZCB0bworICogd29ya2luZyBzdGF0ZS4KKyAqCisgKiBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGFyZSBpc3N1ZWQgc2VxdWVudGlhbGx5IC0KKyAqICAgICAgLSBGdW5jdGlvbiBpbml0IChmb3IgZmlyc3QgaW50ZXJmYWNlIG9ubHkpCisgKiAgICAgIC0gUmVhZCBNQUMgYWRkcmVzcyAoZm9yIGZpcnN0IGludGVyZmFjZSBvbmx5KQorICogICAgICAtIFJlY29uZmlndXJlIFR4IGJ1ZmZlciBzaXplIChmb3IgZmlyc3QgaW50ZXJmYWNlIG9ubHkpCisgKiAgICAgIC0gRW5hYmxlIGF1dG8gZGVlcCBzbGVlcCAoZm9yIGZpcnN0IGludGVyZmFjZSBvbmx5KQorICogICAgICAtIEdldCBUeCByYXRlCisgKiAgICAgIC0gR2V0IFR4IHBvd2VyCisgKiAgICAgIC0gU2V0IElCU1MgY29hbGVzY2luZyBzdGF0dXMKKyAqICAgICAgLSBTZXQgQU1TRFUgYWdncmVnYXRpb24gY29udHJvbAorICogICAgICAtIFNldCAxMWQgY29udHJvbAorICogICAgICAtIFNldCBNQUMgY29udHJvbCAodGhpcyBtdXN0IGJlIHRoZSBsYXN0IGNvbW1hbmQgdG8gaW5pdGlhbGl6ZSBmaXJtd2FyZSkKKyAqLworaW50IG13aWZpZXhfc3RhX2luaXRfY21kKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHU4IGZpcnN0X3N0YSkKK3sKKwlpbnQgcmV0OworCXUxNiBlbmFibGUgPSB0cnVlOworCXN0cnVjdCBtd2lmaWV4X2RzXzExbl9hbXNkdV9hZ2dyX2N0cmwgYW1zZHVfYWdncl9jdHJsOworCXN0cnVjdCBtd2lmaWV4X2RzX2F1dG9fZHMgYXV0b19kczsKKwllbnVtIHN0YXRlXzExZF90IHN0YXRlXzExZDsKKworCWlmIChmaXJzdF9zdGEpIHsKKworCQlyZXQgPSBtd2lmaWV4X3NlbmRfY21kX2FzeW5jKHByaXYsIEhvc3RDbWRfQ01EX0ZVTkNfSU5JVCwKKwkJCQkJICAgICBIb3N0Q21kX0FDVF9HRU5fU0VULCAwLCBOVUxMKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiAtMTsKKwkJLyogUmVhZCBNQUMgYWRkcmVzcyBmcm9tIEhXICovCisJCXJldCA9IG13aWZpZXhfc2VuZF9jbWRfYXN5bmMocHJpdiwgSG9zdENtZF9DTURfR0VUX0hXX1NQRUMsCisJCQkJCSAgICAgSG9zdENtZF9BQ1RfR0VOX0dFVCwgMCwgTlVMTCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gLTE7CisKKwkJLyogUmVjb25maWd1cmUgdHggYnVmIHNpemUgKi8KKwkJcmV0ID0gbXdpZmlleF9zZW5kX2NtZF9hc3luYyhwcml2LAorCQkJCQkgICAgIEhvc3RDbWRfQ01EX1JFQ09ORklHVVJFX1RYX0JVRkYsCisJCQkJCSAgICAgSG9zdENtZF9BQ1RfR0VOX1NFVCwgMCwKKwkJCQkJICAgICAmcHJpdi0+YWRhcHRlci0+dHhfYnVmX3NpemUpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIC0xOworCisJCS8qIEVuYWJsZSBJRUVFIFBTIGJ5IGRlZmF1bHQgKi8KKwkJcHJpdi0+YWRhcHRlci0+cHNfbW9kZSA9IE1XSUZJRVhfODAyXzExX1BPV0VSX01PREVfUFNQOworCQlyZXQgPSBtd2lmaWV4X3NlbmRfY21kX2FzeW5jKHByaXYsCisJCQkJCSAgICAgSG9zdENtZF9DTURfODAyXzExX1BTX01PREVfRU5ILAorCQkJCQkgICAgIEVOX0FVVE9fUFMsIEJJVE1BUF9TVEFfUFMsIE5VTEwpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIC0xOworCX0KKworCS8qIGdldCB0eCByYXRlICovCisJcmV0ID0gbXdpZmlleF9zZW5kX2NtZF9hc3luYyhwcml2LCBIb3N0Q21kX0NNRF9UWF9SQVRFX0NGRywKKwkJCQkgICAgIEhvc3RDbWRfQUNUX0dFTl9HRVQsIDAsIE5VTEwpOworCWlmIChyZXQpCisJCXJldHVybiAtMTsKKwlwcml2LT5kYXRhX3JhdGUgPSAwOworCisJLyogZ2V0IHR4IHBvd2VyICovCisJcmV0ID0gbXdpZmlleF9zZW5kX2NtZF9hc3luYyhwcml2LCBIb3N0Q21kX0NNRF9UWFBXUl9DRkcsCisJCQkJICAgICBIb3N0Q21kX0FDVF9HRU5fR0VULCAwLCBOVUxMKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLTE7CisKKwkvKiBzZXQgaWJzcyBjb2FsZXNjaW5nX3N0YXR1cyAqLworCXJldCA9IG13aWZpZXhfc2VuZF9jbWRfYXN5bmMocHJpdiwKKwkJCQkgICAgIEhvc3RDbWRfQ01EXzgwMl8xMV9JQlNTX0NPQUxFU0NJTkdfU1RBVFVTLAorCQkJCSAgICAgSG9zdENtZF9BQ1RfR0VOX1NFVCwgMCwgJmVuYWJsZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIC0xOworCisJbWVtc2V0KCZhbXNkdV9hZ2dyX2N0cmwsIDAsIHNpemVvZihhbXNkdV9hZ2dyX2N0cmwpKTsKKwlhbXNkdV9hZ2dyX2N0cmwuZW5hYmxlID0gdHJ1ZTsKKwkvKiBTZW5kIHJlcXVlc3QgdG8gZmlybXdhcmUgKi8KKwlyZXQgPSBtd2lmaWV4X3NlbmRfY21kX2FzeW5jKHByaXYsIEhvc3RDbWRfQ01EX0FNU0RVX0FHR1JfQ1RSTCwKKwkJCQkgICAgIEhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsCisJCQkJICAgICAodm9pZCAqKSAmYW1zZHVfYWdncl9jdHJsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLTE7CisJLyogTUFDIENvbnRyb2wgbXVzdCBiZSB0aGUgbGFzdCBjb21tYW5kIGluIGluaXRfZncgKi8KKwkvKiBzZXQgTUFDIENvbnRyb2wgKi8KKwlyZXQgPSBtd2lmaWV4X3NlbmRfY21kX2FzeW5jKHByaXYsIEhvc3RDbWRfQ01EX01BQ19DT05UUk9MLAorCQkJCSAgICAgSG9zdENtZF9BQ1RfR0VOX1NFVCwgMCwKKwkJCQkgICAgICZwcml2LT5jdXJyX3BrdF9maWx0ZXIpOworCWlmIChyZXQpCisJCXJldHVybiAtMTsKKworCWlmIChmaXJzdF9zdGEpIHsKKwkJLyogRW5hYmxlIGF1dG8gZGVlcCBzbGVlcCAqLworCQlhdXRvX2RzLmF1dG9fZHMgPSBERUVQX1NMRUVQX09OOworCQlhdXRvX2RzLmlkbGVfdGltZSA9IERFRVBfU0xFRVBfSURMRV9USU1FOworCQlyZXQgPSBtd2lmaWV4X3NlbmRfY21kX2FzeW5jKHByaXYsCisJCQkJCSAgICAgSG9zdENtZF9DTURfODAyXzExX1BTX01PREVfRU5ILAorCQkJCQkgICAgIEVOX0FVVE9fUFMsIEJJVE1BUF9BVVRPX0RTLAorCQkJCQkgICAgICZhdXRvX2RzKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiAtMTsKKwl9CisKKwkvKiBTZW5kIGNtZCB0byBGVyB0byBlbmFibGUvZGlzYWJsZSAxMUQgZnVuY3Rpb24gKi8KKwlzdGF0ZV8xMWQgPSBFTkFCTEVfMTFEOworCXJldCA9IG13aWZpZXhfc2VuZF9jbWRfYXN5bmMocHJpdiwgSG9zdENtZF9DTURfODAyXzExX1NOTVBfTUlCLAorCQkJCSAgICAgSG9zdENtZF9BQ1RfR0VOX1NFVCwgRE9UMTFEX0ksICZzdGF0ZV8xMWQpOworCWlmIChyZXQpCisJCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LCAiMTFEOiBmYWlsZWQgdG8gZW5hYmxlIDExRFxuIik7CisKKwkvKiBzZXQgbGFzdF9pbml0X2NtZCAqLworCXByaXYtPmFkYXB0ZXItPmxhc3RfaW5pdF9jbWQgPSBIb3N0Q21kX0NNRF84MDJfMTFfU05NUF9NSUI7CisJcmV0ID0gLUVJTlBST0dSRVNTOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvc3RhX2NtZHJlc3AuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvc3RhX2NtZHJlc3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDhmNzY0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9zdGFfY21kcmVzcC5jCkBAIC0wLDAgKzEsOTcyIEBACisvKgorICogTWFydmVsbCBXaXJlbGVzcyBMQU4gZGV2aWNlIGRyaXZlcjogc3RhdGlvbiBjb21tYW5kIHJlc3BvbnNlIGhhbmRsaW5nCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRlcm5hdGlvbmFsCisgKiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKyAqICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgdXNlLCByZWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgaW4KKyAqIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UsIGEgY29weSBvZiB3aGljaAorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0Egb3Igb24gdGhlCisgKiB3b3JsZHdpZGUgd2ViIGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQuCisgKgorICogVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4gIFRoZSBMaWNlbnNlIHByb3ZpZGVzIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dAorICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLgorICovCisKKyNpbmNsdWRlICJkZWNsLmgiCisjaW5jbHVkZSAiaW9jdGwuaCIKKyNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAiZncuaCIKKyNpbmNsdWRlICJtYWluLmgiCisjaW5jbHVkZSAid21tLmgiCisjaW5jbHVkZSAiMTFuLmgiCisKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgY29tbWFuZCByZXNwb25zZSBlcnJvciBjYXNlLgorICoKKyAqIEZvciBzY2FuIHJlc3BvbnNlIGVycm9yLCB0aGUgZnVuY3Rpb24gY2FuY2VscyBhbGwgdGhlIHBlbmRpbmcKKyAqIHNjYW4gY29tbWFuZHMgYW5kIGdlbmVyYXRlcyBhbiBldmVudCB0byBpbmZvcm0gdGhlIGFwcGxpY2F0aW9ucworICogb2YgdGhlIHNjYW4gY29tcGxldGlvbi4KKyAqCisgKiBGb3IgUG93ZXIgU2F2ZSBjb21tYW5kIGZhaWx1cmUsIHdlIGRvIG5vdCByZXRyeSBlbnRlciBQUworICogY29tbWFuZCBpbiBjYXNlIG9mIEFkLWhvYyBtb2RlLgorICoKKyAqIEZvciBhbGwgb3RoZXIgcmVzcG9uc2UgZXJyb3JzLCB0aGUgY3VycmVudCBjb21tYW5kIGJ1ZmZlciBpcyBmcmVlZAorICogYW5kIHJldHVybmVkIHRvIHRoZSBmcmVlIGNvbW1hbmQgcXVldWUuCisgKi8KK3N0YXRpYyB2b2lkCittd2lmaWV4X3Byb2Nlc3NfY21kcmVzcF9lcnJvcihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKnJlc3ApCit7CisJc3RydWN0IGNtZF9jdHJsX25vZGUgKmNtZF9ub2RlID0gTlVMTCwgKnRtcF9ub2RlOworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfcHNfbW9kZV9lbmggKnBtOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIkNNRF9SRVNQOiBjbWQgJSN4IGVycm9yLCByZXN1bHQ9JSN4XG4iLAorCQkJcmVzcC0+Y29tbWFuZCwgcmVzcC0+cmVzdWx0KTsKKworCWlmIChhZGFwdGVyLT5jdXJyX2NtZC0+d2FpdF9xX2VuYWJsZWQpCisJCWFkYXB0ZXItPmNtZF93YWl0X3Euc3RhdHVzID0gLTE7CisKKwlzd2l0Y2ggKGxlMTZfdG9fY3B1KHJlc3AtPmNvbW1hbmQpKSB7CisJY2FzZSBIb3N0Q21kX0NNRF84MDJfMTFfUFNfTU9ERV9FTkg6CisJCXBtID0gJnJlc3AtPnBhcmFtcy5wc21vZGVfZW5oOworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIlBTX01PREVfRU5IIGNtZCBmYWlsZWQ6ICIKKwkJCQkJInJlc3VsdD0weCV4IGFjdGlvbj0weCVYXG4iLAorCQkJCXJlc3AtPnJlc3VsdCwgbGUxNl90b19jcHUocG0tPmFjdGlvbikpOworCQkvKiBXZSBkbyBub3QgcmUtdHJ5IGVudGVyLXBzIGNvbW1hbmQgaW4gYWQtaG9jIG1vZGUuICovCisJCWlmIChsZTE2X3RvX2NwdShwbS0+YWN0aW9uKSA9PSBFTl9BVVRPX1BTICYmCisJCQkobGUxNl90b19jcHUocG0tPnBhcmFtcy5wc19iaXRtYXApICYgQklUTUFQX1NUQV9QUykgJiYKKwkJCQlwcml2LT5ic3NfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkJCWFkYXB0ZXItPnBzX21vZGUgPSBNV0lGSUVYXzgwMl8xMV9QT1dFUl9NT0RFX0NBTTsKKworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EXzgwMl8xMV9TQ0FOOgorCQkvKiBDYW5jZWwgYWxsIHBlbmRpbmcgc2NhbiBjb21tYW5kICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5zY2FuX3BlbmRpbmdfcV9sb2NrLCBmbGFncyk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjbWRfbm9kZSwgdG1wX25vZGUsCisJCQkJCSAmYWRhcHRlci0+c2Nhbl9wZW5kaW5nX3EsIGxpc3QpIHsKKwkJCWxpc3RfZGVsKCZjbWRfbm9kZS0+bGlzdCk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5zY2FuX3BlbmRpbmdfcV9sb2NrLAorCQkJCQkgICAgICAgZmxhZ3MpOworCQkJbXdpZmlleF9pbnNlcnRfY21kX3RvX2ZyZWVfcShhZGFwdGVyLCBjbWRfbm9kZSk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+c2Nhbl9wZW5kaW5nX3FfbG9jaywgZmxhZ3MpOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnNjYW5fcGVuZGluZ19xX2xvY2ssIGZsYWdzKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+bXdpZmlleF9jbWRfbG9jaywgZmxhZ3MpOworCQlhZGFwdGVyLT5zY2FuX3Byb2Nlc3NpbmcgPSBmYWxzZTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+bXdpZmlleF9jbWRfbG9jaywgZmxhZ3MpOworCQlpZiAocHJpdi0+cmVwb3J0X3NjYW5fcmVzdWx0KQorCQkJcHJpdi0+cmVwb3J0X3NjYW5fcmVzdWx0ID0gZmFsc2U7CisJCWlmIChwcml2LT5zY2FuX3BlbmRpbmdfb25fYmxvY2spIHsKKwkJCXByaXYtPnNjYW5fcGVuZGluZ19vbl9ibG9jayA9IGZhbHNlOworCQkJdXAoJnByaXYtPmFzeW5jX3NlbSk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEhvc3RDbWRfQ01EX01BQ19DT05UUk9MOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwkvKiBIYW5kbGluZyBlcnJvcnMgaGVyZSAqLworCW13aWZpZXhfaW5zZXJ0X2NtZF90b19mcmVlX3EoYWRhcHRlciwgYWRhcHRlci0+Y3Vycl9jbWQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPm13aWZpZXhfY21kX2xvY2ssIGZsYWdzKTsKKwlhZGFwdGVyLT5jdXJyX2NtZCA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+bXdpZmlleF9jbWRfbG9jaywgZmxhZ3MpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBjb21tYW5kIHJlc3BvbnNlIG9mIGdldCBSU1NJIGluZm8uCisgKgorICogSGFuZGxpbmcgaW5jbHVkZXMgY2hhbmdpbmcgdGhlIGhlYWRlciBmaWVsZHMgaW50byBDUFUgZm9ybWF0CisgKiBhbmQgc2F2aW5nIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBpbiBkcml2ZXIgLQorICogICAgICAtIExhc3QgZGF0YSBhbmQgYmVhY29uIFJTU0kgdmFsdWUKKyAqICAgICAgLSBBdmVyYWdlIGRhdGEgYW5kIGJlYWNvbiBSU1NJIHZhbHVlCisgKiAgICAgIC0gTGFzdCBkYXRhIGFuZCBiZWFjb24gTkYgdmFsdWUKKyAqICAgICAgLSBBdmVyYWdlIGRhdGEgYW5kIGJlYWNvbiBORiB2YWx1ZQorICoKKyAqIFRoZSBwYXJhbWV0ZXJzIGFyZSBzZW5kIHRvIHRoZSBhcHBsaWNhdGlvbiBhcyB3ZWxsLCBhbG9uZyB3aXRoCisgKiBjYWxjdWxhdGVkIFNOUiB2YWx1ZXMuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9yZXRfODAyXzExX3Jzc2lfaW5mbyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqcmVzcCwKKwkJCQkJdm9pZCAqZGF0YV9idWYpCit7CisJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9yc3NpX2luZm9fcnNwICpyc3NpX2luZm9fcnNwID0KKwkJJnJlc3AtPnBhcmFtcy5yc3NpX2luZm9fcnNwOworCXN0cnVjdCBtd2lmaWV4X2RzX2dldF9zaWduYWwgKnNpZ25hbDsKKworCXByaXYtPmRhdGFfcnNzaV9sYXN0ID0gbGUxNl90b19jcHUocnNzaV9pbmZvX3JzcC0+ZGF0YV9yc3NpX2xhc3QpOworCXByaXYtPmRhdGFfbmZfbGFzdCA9IGxlMTZfdG9fY3B1KHJzc2lfaW5mb19yc3AtPmRhdGFfbmZfbGFzdCk7CisKKwlwcml2LT5kYXRhX3Jzc2lfYXZnID0gbGUxNl90b19jcHUocnNzaV9pbmZvX3JzcC0+ZGF0YV9yc3NpX2F2Zyk7CisJcHJpdi0+ZGF0YV9uZl9hdmcgPSBsZTE2X3RvX2NwdShyc3NpX2luZm9fcnNwLT5kYXRhX25mX2F2Zyk7CisKKwlwcml2LT5iY25fcnNzaV9sYXN0ID0gbGUxNl90b19jcHUocnNzaV9pbmZvX3JzcC0+YmNuX3Jzc2lfbGFzdCk7CisJcHJpdi0+YmNuX25mX2xhc3QgPSBsZTE2X3RvX2NwdShyc3NpX2luZm9fcnNwLT5iY25fbmZfbGFzdCk7CisKKwlwcml2LT5iY25fcnNzaV9hdmcgPSBsZTE2X3RvX2NwdShyc3NpX2luZm9fcnNwLT5iY25fcnNzaV9hdmcpOworCXByaXYtPmJjbl9uZl9hdmcgPSBsZTE2X3RvX2NwdShyc3NpX2luZm9fcnNwLT5iY25fbmZfYXZnKTsKKworCS8qIE5lZWQgdG8gaW5kaWNhdGUgSU9DVEwgY29tcGxldGUgKi8KKwlpZiAoZGF0YV9idWYpIHsKKwkJc2lnbmFsID0gKHN0cnVjdCBtd2lmaWV4X2RzX2dldF9zaWduYWwgKikgZGF0YV9idWY7CisJCW1lbXNldChzaWduYWwsIDAsIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9kc19nZXRfc2lnbmFsKSk7CisKKwkJc2lnbmFsLT5zZWxlY3RvciA9IEFMTF9SU1NJX0lORk9fTUFTSzsKKworCQkvKiBSU1NJICovCisJCXNpZ25hbC0+YmNuX3Jzc2lfbGFzdCA9IHByaXYtPmJjbl9yc3NpX2xhc3Q7CisJCXNpZ25hbC0+YmNuX3Jzc2lfYXZnID0gcHJpdi0+YmNuX3Jzc2lfYXZnOworCQlzaWduYWwtPmRhdGFfcnNzaV9sYXN0ID0gcHJpdi0+ZGF0YV9yc3NpX2xhc3Q7CisJCXNpZ25hbC0+ZGF0YV9yc3NpX2F2ZyA9IHByaXYtPmRhdGFfcnNzaV9hdmc7CisKKwkJLyogU05SICovCisJCXNpZ25hbC0+YmNuX3Nucl9sYXN0ID0KKwkJCUNBTF9TTlIocHJpdi0+YmNuX3Jzc2lfbGFzdCwgcHJpdi0+YmNuX25mX2xhc3QpOworCQlzaWduYWwtPmJjbl9zbnJfYXZnID0KKwkJCUNBTF9TTlIocHJpdi0+YmNuX3Jzc2lfYXZnLCBwcml2LT5iY25fbmZfYXZnKTsKKwkJc2lnbmFsLT5kYXRhX3Nucl9sYXN0ID0KKwkJCUNBTF9TTlIocHJpdi0+ZGF0YV9yc3NpX2xhc3QsIHByaXYtPmRhdGFfbmZfbGFzdCk7CisJCXNpZ25hbC0+ZGF0YV9zbnJfYXZnID0KKwkJCUNBTF9TTlIocHJpdi0+ZGF0YV9yc3NpX2F2ZywgcHJpdi0+ZGF0YV9uZl9hdmcpOworCisJCS8qIE5GICovCisJCXNpZ25hbC0+YmNuX25mX2xhc3QgPSBwcml2LT5iY25fbmZfbGFzdDsKKwkJc2lnbmFsLT5iY25fbmZfYXZnID0gcHJpdi0+YmNuX25mX2F2ZzsKKwkJc2lnbmFsLT5kYXRhX25mX2xhc3QgPSBwcml2LT5kYXRhX25mX2xhc3Q7CisJCXNpZ25hbC0+ZGF0YV9uZl9hdmcgPSBwcml2LT5kYXRhX25mX2F2ZzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgY29tbWFuZCByZXNwb25zZSBvZiBzZXQvZ2V0IFNOTVAKKyAqIE1JQiBwYXJhbWV0ZXJzLgorICoKKyAqIEhhbmRsaW5nIGluY2x1ZGVzIGNoYW5naW5nIHRoZSBoZWFkZXIgZmllbGRzIGludG8gQ1BVIGZvcm1hdAorICogYW5kIHNhdmluZyB0aGUgcGFyYW1ldGVyIGluIGRyaXZlci4KKyAqCisgKiBUaGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIHN1cHBvcnRlZCAtCisgKiAgICAgIC0gRnJhZ21lbnRhdGlvbiB0aHJlc2hvbGQKKyAqICAgICAgLSBSVFMgdGhyZXNob2xkCisgKiAgICAgIC0gU2hvcnQgcmV0cnkgbGltaXQKKyAqLworc3RhdGljIGludCBtd2lmaWV4X3JldF84MDJfMTFfc25tcF9taWIoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgICAgICAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKnJlc3AsCisJCQkJICAgICAgIHZvaWQgKmRhdGFfYnVmKQoreworCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfc25tcF9taWIgKnNtaWIgPSAmcmVzcC0+cGFyYW1zLnNtaWI7CisJdTE2IG9pZCA9IGxlMTZfdG9fY3B1KHNtaWItPm9pZCk7CisJdTE2IHF1ZXJ5X3R5cGUgPSBsZTE2X3RvX2NwdShzbWliLT5xdWVyeV90eXBlKTsKKwl1MzIgdWxfdGVtcDsKKworCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiaW5mbzogU05NUF9SRVNQOiBvaWQgdmFsdWUgPSAlI3gsIgorCQkJIiBxdWVyeV90eXBlID0gJSN4LCBidWYgc2l6ZSA9ICUjeFxuIiwKKwkJCW9pZCwgcXVlcnlfdHlwZSwgbGUxNl90b19jcHUoc21pYi0+YnVmX3NpemUpKTsKKwlpZiAocXVlcnlfdHlwZSA9PSBIb3N0Q21kX0FDVF9HRU5fR0VUKSB7CisJCXVsX3RlbXAgPSBsZTE2X3RvX2NwdSgqKChfX2xlMTYgKikgKHNtaWItPnZhbHVlKSkpOworCQlpZiAoZGF0YV9idWYpCisJCQkqKHUzMiAqKWRhdGFfYnVmID0gdWxfdGVtcDsKKwkJc3dpdGNoIChvaWQpIHsKKwkJY2FzZSBGUkFHX1RIUkVTSF9JOgorCQkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkJImluZm86IFNOTVBfUkVTUDogRnJhZ1Roc2QgPSV1XG4iLCB1bF90ZW1wKTsKKwkJCWJyZWFrOworCQljYXNlIFJUU19USFJFU0hfSToKKwkJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJCSJpbmZvOiBTTk1QX1JFU1A6IFJUU1Roc2QgPSV1XG4iLCB1bF90ZW1wKTsKKwkJCWJyZWFrOworCQljYXNlIFNIT1JUX1JFVFJZX0xJTV9JOgorCQkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkJImluZm86IFNOTVBfUkVTUDogVHhSZXRyeUNvdW50PSV1XG4iLCB1bF90ZW1wKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgY29tbWFuZCByZXNwb25zZSBvZiBnZXQgbG9nIHJlcXVlc3QKKyAqCisgKiBIYW5kbGluZyBpbmNsdWRlcyBjaGFuZ2luZyB0aGUgaGVhZGVyIGZpZWxkcyBpbnRvIENQVSBmb3JtYXQKKyAqIGFuZCBzZW5kaW5nIHRoZSByZWNlaXZlZCBwYXJhbWV0ZXJzIHRvIGFwcGxpY2F0aW9uLgorICovCitzdGF0aWMgaW50IG13aWZpZXhfcmV0X2dldF9sb2coc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqcmVzcCwKKwkJCSAgICAgICB2b2lkICpkYXRhX2J1ZikKK3sKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2dldF9sb2cgKmdldF9sb2cgPQorCQkoc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9nZXRfbG9nICopICZyZXNwLT5wYXJhbXMuZ2V0X2xvZzsKKwlzdHJ1Y3QgbXdpZmlleF9kc19nZXRfc3RhdHMgKnN0YXRzOworCisJaWYgKGRhdGFfYnVmKSB7CisJCXN0YXRzID0gKHN0cnVjdCBtd2lmaWV4X2RzX2dldF9zdGF0cyAqKSBkYXRhX2J1ZjsKKwkJc3RhdHMtPm1jYXN0X3R4X2ZyYW1lID0gbGUzMl90b19jcHUoZ2V0X2xvZy0+bWNhc3RfdHhfZnJhbWUpOworCQlzdGF0cy0+ZmFpbGVkID0gbGUzMl90b19jcHUoZ2V0X2xvZy0+ZmFpbGVkKTsKKwkJc3RhdHMtPnJldHJ5ID0gbGUzMl90b19jcHUoZ2V0X2xvZy0+cmV0cnkpOworCQlzdGF0cy0+bXVsdGlfcmV0cnkgPSBsZTMyX3RvX2NwdShnZXRfbG9nLT5tdWx0aV9yZXRyeSk7CisJCXN0YXRzLT5mcmFtZV9kdXAgPSBsZTMyX3RvX2NwdShnZXRfbG9nLT5mcmFtZV9kdXApOworCQlzdGF0cy0+cnRzX3N1Y2Nlc3MgPSBsZTMyX3RvX2NwdShnZXRfbG9nLT5ydHNfc3VjY2Vzcyk7CisJCXN0YXRzLT5ydHNfZmFpbHVyZSA9IGxlMzJfdG9fY3B1KGdldF9sb2ctPnJ0c19mYWlsdXJlKTsKKwkJc3RhdHMtPmFja19mYWlsdXJlID0gbGUzMl90b19jcHUoZ2V0X2xvZy0+YWNrX2ZhaWx1cmUpOworCQlzdGF0cy0+cnhfZnJhZyA9IGxlMzJfdG9fY3B1KGdldF9sb2ctPnJ4X2ZyYWcpOworCQlzdGF0cy0+bWNhc3RfcnhfZnJhbWUgPSBsZTMyX3RvX2NwdShnZXRfbG9nLT5tY2FzdF9yeF9mcmFtZSk7CisJCXN0YXRzLT5mY3NfZXJyb3IgPSBsZTMyX3RvX2NwdShnZXRfbG9nLT5mY3NfZXJyb3IpOworCQlzdGF0cy0+dHhfZnJhbWUgPSBsZTMyX3RvX2NwdShnZXRfbG9nLT50eF9mcmFtZSk7CisJCXN0YXRzLT53ZXBfaWN2X2Vycm9yWzBdID0KKwkJCWxlMzJfdG9fY3B1KGdldF9sb2ctPndlcF9pY3ZfZXJyX2NudFswXSk7CisJCXN0YXRzLT53ZXBfaWN2X2Vycm9yWzFdID0KKwkJCWxlMzJfdG9fY3B1KGdldF9sb2ctPndlcF9pY3ZfZXJyX2NudFsxXSk7CisJCXN0YXRzLT53ZXBfaWN2X2Vycm9yWzJdID0KKwkJCWxlMzJfdG9fY3B1KGdldF9sb2ctPndlcF9pY3ZfZXJyX2NudFsyXSk7CisJCXN0YXRzLT53ZXBfaWN2X2Vycm9yWzNdID0KKwkJCWxlMzJfdG9fY3B1KGdldF9sb2ctPndlcF9pY3ZfZXJyX2NudFszXSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGNvbW1hbmQgcmVzcG9uc2Ugb2Ygc2V0L2dldCBUeCByYXRlCisgKiBjb25maWd1cmF0aW9ucy4KKyAqCisgKiBIYW5kbGluZyBpbmNsdWRlcyBjaGFuZ2luZyB0aGUgaGVhZGVyIGZpZWxkcyBpbnRvIENQVSBmb3JtYXQKKyAqIGFuZCBzYXZpbmcgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGluIGRyaXZlciAtCisgKiAgICAgIC0gRFNTUyByYXRlIGJpdG1hcAorICogICAgICAtIE9GRE0gcmF0ZSBiaXRtYXAKKyAqICAgICAgLSBIVCBNQ1MgcmF0ZSBiaXRtYXBzCisgKgorICogQmFzZWQgb24gdGhlIG5ldyByYXRlIGJpdG1hcHMsIHRoZSBmdW5jdGlvbiByZS1ldmFsdWF0ZXMgaWYKKyAqIGF1dG8gZGF0YSByYXRlIGhhcyBiZWVuIGFjdGl2YXRlZC4gSWYgbm90LCBpdCBzZW5kcyBhbm90aGVyCisgKiBxdWVyeSB0byB0aGUgZmlybXdhcmUgdG8gZ2V0IHRoZSBjdXJyZW50IFR4IGRhdGEgcmF0ZSBhbmQgdXBkYXRlcworICogdGhlIGRyaXZlciB2YWx1ZS4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X3JldF90eF9yYXRlX2NmZyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCSAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwLAorCQkJCSAgIHZvaWQgKmRhdGFfYnVmKQoreworCXN0cnVjdCBtd2lmaWV4X3JhdGVfY2ZnICpkc19yYXRlOworCXN0cnVjdCBob3N0X2NtZF9kc190eF9yYXRlX2NmZyAqcmF0ZV9jZmcgPSAmcmVzcC0+cGFyYW1zLnR4X3JhdGVfY2ZnOworCXN0cnVjdCBtd2lmaWV4X3JhdGVfc2NvcGUgKnJhdGVfc2NvcGU7CisJc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyICpoZWFkOworCXUxNiB0bHYsIHRsdl9idWZfbGVuOworCXU4ICp0bHZfYnVmOworCXUzMiBpOworCWludCByZXQgPSAwOworCisJdGx2X2J1ZiA9ICh1OCAqKSAoKHU4ICopIHJhdGVfY2ZnKSArCisJCQlzaXplb2Yoc3RydWN0IGhvc3RfY21kX2RzX3R4X3JhdGVfY2ZnKTsKKwl0bHZfYnVmX2xlbiA9ICoodTE2ICopICh0bHZfYnVmICsgc2l6ZW9mKHUxNikpOworCisJd2hpbGUgKHRsdl9idWYgJiYgdGx2X2J1Zl9sZW4gPiAwKSB7CisJCXRsdiA9ICgqdGx2X2J1Zik7CisJCXRsdiA9IHRsdiB8ICgqKHRsdl9idWYgKyAxKSA8PCA4KTsKKworCQlzd2l0Y2ggKHRsdikgeworCQljYXNlIFRMVl9UWVBFX1JBVEVfU0NPUEU6CisJCQlyYXRlX3Njb3BlID0gKHN0cnVjdCBtd2lmaWV4X3JhdGVfc2NvcGUgKikgdGx2X2J1ZjsKKwkJCXByaXYtPmJpdG1hcF9yYXRlc1swXSA9CisJCQkJbGUxNl90b19jcHUocmF0ZV9zY29wZS0+aHJfZHNzc19yYXRlX2JpdG1hcCk7CisJCQlwcml2LT5iaXRtYXBfcmF0ZXNbMV0gPQorCQkJCWxlMTZfdG9fY3B1KHJhdGVfc2NvcGUtPm9mZG1fcmF0ZV9iaXRtYXApOworCQkJZm9yIChpID0gMDsKKwkJCSAgICAgaSA8CisJCQkgICAgIHNpemVvZihyYXRlX3Njb3BlLT5odF9tY3NfcmF0ZV9iaXRtYXApIC8KKwkJCSAgICAgc2l6ZW9mKHUxNik7IGkrKykKKwkJCQlwcml2LT5iaXRtYXBfcmF0ZXNbMiArIGldID0KKwkJCQkJbGUxNl90b19jcHUocmF0ZV9zY29wZS0+CisJCQkJCQkgICAgaHRfbWNzX3JhdGVfYml0bWFwW2ldKTsKKwkJCWJyZWFrOworCQkJLyogQWRkIFJBVEVfRFJPUCB0bHYgaGVyZSAqLworCQl9CisKKwkJaGVhZCA9IChzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIgKikgdGx2X2J1ZjsKKwkJdGx2X2J1ZiArPSBsZTE2X3RvX2NwdShoZWFkLT5sZW4pICsgc2l6ZW9mKCpoZWFkKTsKKwkJdGx2X2J1Zl9sZW4gLT0gbGUxNl90b19jcHUoaGVhZC0+bGVuKTsKKwl9CisKKwlwcml2LT5pc19kYXRhX3JhdGVfYXV0byA9IG13aWZpZXhfaXNfcmF0ZV9hdXRvKHByaXYpOworCisJaWYgKHByaXYtPmlzX2RhdGFfcmF0ZV9hdXRvKQorCQlwcml2LT5kYXRhX3JhdGUgPSAwOworCWVsc2UKKwkJcmV0ID0gbXdpZmlleF9zZW5kX2NtZF9hc3luYyhwcml2LAorCQkJCQkgIEhvc3RDbWRfQ01EXzgwMl8xMV9UWF9SQVRFX1FVRVJZLAorCQkJCQkgIEhvc3RDbWRfQUNUX0dFTl9HRVQsIDAsIE5VTEwpOworCisJaWYgKGRhdGFfYnVmKSB7CisJCWRzX3JhdGUgPSAoc3RydWN0IG13aWZpZXhfcmF0ZV9jZmcgKikgZGF0YV9idWY7CisJCWlmIChsZTE2X3RvX2NwdShyYXRlX2NmZy0+YWN0aW9uKSA9PSBIb3N0Q21kX0FDVF9HRU5fR0VUKSB7CisJCQlpZiAocHJpdi0+aXNfZGF0YV9yYXRlX2F1dG8pIHsKKwkJCQlkc19yYXRlLT5pc19yYXRlX2F1dG8gPSAxOworCQkJfSBlbHNlIHsKKwkJCQlkc19yYXRlLT5yYXRlID0gbXdpZmlleF9nZXRfcmF0ZV9pbmRleChwcml2LT4KKwkJCQkJCQkgICAgICAgYml0bWFwX3JhdGVzLAorCQkJCQkJCSAgICAgICBzaXplb2YocHJpdi0+CisJCQkJCQkJICAgICAgIGJpdG1hcF9yYXRlcykpOworCQkJCWlmIChkc19yYXRlLT5yYXRlID49CisJCQkJICAgIE1XSUZJRVhfUkFURV9CSVRNQVBfT0ZETTAKKwkJCQkgICAgJiYgZHNfcmF0ZS0+cmF0ZSA8PQorCQkJCSAgICBNV0lGSUVYX1JBVEVfQklUTUFQX09GRE03KQorCQkJCQlkc19yYXRlLT5yYXRlIC09CisJCQkJCQkoTVdJRklFWF9SQVRFX0JJVE1BUF9PRkRNMCAtCisJCQkJCQkgTVdJRklFWF9SQVRFX0lOREVYX09GRE0wKTsKKwkJCQlpZiAoZHNfcmF0ZS0+cmF0ZSA+PQorCQkJCSAgICBNV0lGSUVYX1JBVEVfQklUTUFQX01DUzAKKwkJCQkgICAgJiYgZHNfcmF0ZS0+cmF0ZSA8PQorCQkJCSAgICBNV0lGSUVYX1JBVEVfQklUTUFQX01DUzEyNykKKwkJCQkJZHNfcmF0ZS0+cmF0ZSAtPQorCQkJCQkJKE1XSUZJRVhfUkFURV9CSVRNQVBfTUNTMCAtCisJCQkJCQkgTVdJRklFWF9SQVRFX0lOREVYX01DUzApOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgY29tbWFuZCByZXNwb25zZSBvZiBnZXQgVHggcG93ZXIgbGV2ZWwuCisgKgorICogSGFuZGxpbmcgaW5jbHVkZXMgc2F2aW5nIHRoZSBtYXhpbXVtIGFuZCBtaW5pbXVtIFR4IHBvd2VyIGxldmVscworICogaW4gZHJpdmVyLCBhcyB3ZWxsIGFzIHNlbmRpbmcgdGhlIHZhbHVlcyB0byB1c2VyLgorICovCitzdGF0aWMgaW50IG13aWZpZXhfZ2V0X3Bvd2VyX2xldmVsKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHZvaWQgKmRhdGFfYnVmKQoreworCWludCBsZW5ndGgsIG1heF9wb3dlciA9IC0xLCBtaW5fcG93ZXIgPSAtMTsKKwlzdHJ1Y3QgbXdpZmlleF90eXBlc19wb3dlcl9ncm91cCAqcGdfdGx2X2hkcjsKKwlzdHJ1Y3QgbXdpZmlleF9wb3dlcl9ncm91cCAqcGc7CisKKwlpZiAoZGF0YV9idWYpIHsKKwkJcGdfdGx2X2hkciA9CisJCQkoc3RydWN0IG13aWZpZXhfdHlwZXNfcG93ZXJfZ3JvdXAgKikgKCh1OCAqKSBkYXRhX2J1ZgorCQkJCQkrIHNpemVvZihzdHJ1Y3QgaG9zdF9jbWRfZHNfdHhwd3JfY2ZnKSk7CisJCXBnID0gKHN0cnVjdCBtd2lmaWV4X3Bvd2VyX2dyb3VwICopICgodTggKikgcGdfdGx2X2hkciArCisJCQkJc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X3R5cGVzX3Bvd2VyX2dyb3VwKSk7CisJCWxlbmd0aCA9IHBnX3Rsdl9oZHItPmxlbmd0aDsKKwkJaWYgKGxlbmd0aCA+IDApIHsKKwkJCW1heF9wb3dlciA9IHBnLT5wb3dlcl9tYXg7CisJCQltaW5fcG93ZXIgPSBwZy0+cG93ZXJfbWluOworCQkJbGVuZ3RoIC09IHNpemVvZihzdHJ1Y3QgbXdpZmlleF9wb3dlcl9ncm91cCk7CisJCX0KKwkJd2hpbGUgKGxlbmd0aCkgeworCQkJcGcrKzsKKwkJCWlmIChtYXhfcG93ZXIgPCBwZy0+cG93ZXJfbWF4KQorCQkJCW1heF9wb3dlciA9IHBnLT5wb3dlcl9tYXg7CisKKwkJCWlmIChtaW5fcG93ZXIgPiBwZy0+cG93ZXJfbWluKQorCQkJCW1pbl9wb3dlciA9IHBnLT5wb3dlcl9taW47CisKKwkJCWxlbmd0aCAtPSBzaXplb2Yoc3RydWN0IG13aWZpZXhfcG93ZXJfZ3JvdXApOworCQl9CisJCWlmIChwZ190bHZfaGRyLT5sZW5ndGggPiAwKSB7CisJCQlwcml2LT5taW5fdHhfcG93ZXJfbGV2ZWwgPSAodTgpIG1pbl9wb3dlcjsKKwkJCXByaXYtPm1heF90eF9wb3dlcl9sZXZlbCA9ICh1OCkgbWF4X3Bvd2VyOworCQl9CisJfSBlbHNlIHsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBjb21tYW5kIHJlc3BvbnNlIG9mIHNldC9nZXQgVHggcG93ZXIKKyAqIGNvbmZpZ3VyYXRpb25zLgorICoKKyAqIEhhbmRsaW5nIGluY2x1ZGVzIGNoYW5naW5nIHRoZSBoZWFkZXIgZmllbGRzIGludG8gQ1BVIGZvcm1hdAorICogYW5kIHNhdmluZyB0aGUgY3VycmVudCBUeCBwb3dlciBsZXZlbCBpbiBkcml2ZXIuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9yZXRfdHhfcG93ZXJfY2ZnKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJICAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwLAorCQkJCSAgICB2b2lkICpkYXRhX2J1ZikKK3sKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfdHhwd3JfY2ZnICp0eHBfY2ZnID0gJnJlc3AtPnBhcmFtcy50eHBfY2ZnOworCXN0cnVjdCBtd2lmaWV4X3R5cGVzX3Bvd2VyX2dyb3VwICpwZ190bHZfaGRyOworCXN0cnVjdCBtd2lmaWV4X3Bvd2VyX2dyb3VwICpwZzsKKwl1MTYgYWN0aW9uID0gbGUxNl90b19jcHUodHhwX2NmZy0+YWN0aW9uKTsKKworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBIb3N0Q21kX0FDVF9HRU5fR0VUOgorCQl7CisJCQlwZ190bHZfaGRyID0KKwkJCQkoc3RydWN0IG13aWZpZXhfdHlwZXNfcG93ZXJfZ3JvdXAgKikgKCh1OCAqKQorCQkJCQkJdHhwX2NmZyArCisJCQkJCQlzaXplb2YKKwkJCQkJCShzdHJ1Y3QKKwkJCQkJCSBob3N0X2NtZF9kc190eHB3cl9jZmcpKTsKKwkJCXBnID0gKHN0cnVjdCBtd2lmaWV4X3Bvd2VyX2dyb3VwICopICgodTggKikKKwkJCQkJCXBnX3Rsdl9oZHIgKworCQkJCQkJc2l6ZW9mKHN0cnVjdAorCQkJCQkJbXdpZmlleF90eXBlc19wb3dlcl9ncm91cCkpOworCQkJaWYgKGFkYXB0ZXItPmh3X3N0YXR1cyA9PQorCQkJICAgIE1XSUZJRVhfSFdfU1RBVFVTX0lOSVRJQUxJWklORykKKwkJCQltd2lmaWV4X2dldF9wb3dlcl9sZXZlbChwcml2LCB0eHBfY2ZnKTsKKwkJCXByaXYtPnR4X3Bvd2VyX2xldmVsID0gKHUxNikgcGctPnBvd2VyX21pbjsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBIb3N0Q21kX0FDVF9HRU5fU0VUOgorCQlpZiAobGUzMl90b19jcHUodHhwX2NmZy0+bW9kZSkpIHsKKwkJCXBnX3Rsdl9oZHIgPQorCQkJCShzdHJ1Y3QgbXdpZmlleF90eXBlc19wb3dlcl9ncm91cCAqKSAoKHU4ICopCisJCQkJCQl0eHBfY2ZnICsKKwkJCQkJCXNpemVvZgorCQkJCQkJKHN0cnVjdAorCQkJCQkJIGhvc3RfY21kX2RzX3R4cHdyX2NmZykpOworCQkJcGcgPSAoc3RydWN0IG13aWZpZXhfcG93ZXJfZ3JvdXAgKikgKCh1OCAqKSBwZ190bHZfaGRyCisJCQkJCQkrCisJCQkJCQlzaXplb2Yoc3RydWN0CisJCQkJCQltd2lmaWV4X3R5cGVzX3Bvd2VyX2dyb3VwKSk7CisJCQlpZiAocGctPnBvd2VyX21heCA9PSBwZy0+cG93ZXJfbWluKQorCQkJCXByaXYtPnR4X3Bvd2VyX2xldmVsID0gKHUxNikgcGctPnBvd2VyX21pbjsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIkNNRF9SRVNQOiB1bmtub3duIGNtZCBhY3Rpb24gJWRcbiIsCisJCQkJYWN0aW9uKTsKKwkJcmV0dXJuIDA7CisJfQorCWRldl9kYmcoYWRhcHRlci0+ZGV2LAorCQkiaW5mbzogQ3VycmVudCBUeFBvd2VyIExldmVsID0gJWQsIE1heCBQb3dlcj0lZCwgTWluIFBvd2VyPSVkXG4iLAorCSAgICAgICBwcml2LT50eF9wb3dlcl9sZXZlbCwgcHJpdi0+bWF4X3R4X3Bvd2VyX2xldmVsLAorCSAgICAgICBwcml2LT5taW5fdHhfcG93ZXJfbGV2ZWwpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGNvbW1hbmQgcmVzcG9uc2Ugb2Ygc2V0L2dldCBNQUMgYWRkcmVzcy4KKyAqCisgKiBIYW5kbGluZyBpbmNsdWRlcyBzYXZpbmcgdGhlIE1BQyBhZGRyZXNzIGluIGRyaXZlci4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X3JldF84MDJfMTFfbWFjX2FkZHJlc3Moc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkJICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqcmVzcCkKK3sKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX21hY19hZGRyZXNzICpjbWRfbWFjX2FkZHIgPQorCQkmcmVzcC0+cGFyYW1zLm1hY19hZGRyOworCisJbWVtY3B5KHByaXYtPmN1cnJfYWRkciwgY21kX21hY19hZGRyLT5tYWNfYWRkciwgRVRIX0FMRU4pOworCisJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsCisJCSJpbmZvOiBzZXQgbWFjIGFkZHJlc3M6ICVwTVxuIiwgcHJpdi0+Y3Vycl9hZGRyKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBjb21tYW5kIHJlc3BvbnNlIG9mIHNldC9nZXQgTUFDIG11bHRpY2FzdAorICogYWRkcmVzcy4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X3JldF9tYWNfbXVsdGljYXN0X2FkcihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCQkgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKnJlc3ApCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGNvbW1hbmQgcmVzcG9uc2Ugb2YgZ2V0IFR4IHJhdGUgcXVlcnkuCisgKgorICogSGFuZGxpbmcgaW5jbHVkZXMgY2hhbmdpbmcgdGhlIGhlYWRlciBmaWVsZHMgaW50byBDUFUgZm9ybWF0CisgKiBhbmQgc2F2aW5nIHRoZSBUeCByYXRlIGFuZCBIVCBpbmZvcm1hdGlvbiBwYXJhbWV0ZXJzIGluIGRyaXZlci4KKyAqCisgKiBCb3RoIHJhdGUgY29uZmlndXJhdGlvbiBhbmQgY3VycmVudCBkYXRhIHJhdGUgY2FuIGJlIHJldHJpZXZlZAorICogd2l0aCB0aGlzIHJlcXVlc3QuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9yZXRfODAyXzExX3R4X3JhdGVfcXVlcnkoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkJICAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwKQoreworCXByaXYtPnR4X3JhdGUgPSByZXNwLT5wYXJhbXMudHhfcmF0ZS50eF9yYXRlOworCXByaXYtPnR4X2h0aW5mbyA9IHJlc3AtPnBhcmFtcy50eF9yYXRlLmh0X2luZm87CisJaWYgKCFwcml2LT5pc19kYXRhX3JhdGVfYXV0bykKKwkJcHJpdi0+ZGF0YV9yYXRlID0KKwkJCW13aWZpZXhfaW5kZXhfdG9fZGF0YV9yYXRlKHByaXYtPnR4X3JhdGUsCisJCQkJCQkgICBwcml2LT50eF9odGluZm8pOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGNvbW1hbmQgcmVzcG9uc2Ugb2YgYSBkZWF1dGhlbnRpY2F0ZQorICogY29tbWFuZC4KKyAqCisgKiBJZiB0aGUgZGVhdXRoZW50aWNhdGVkIE1BQyBtYXRjaGVzIHRoZSBjdXJyZW50IEJTUyBNQUMsIHRoZSBjb25uZWN0aW9uCisgKiBzdGF0ZSBpcyByZXNldC4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X3JldF84MDJfMTFfZGVhdXRoZW50aWNhdGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkJICAgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqcmVzcCkKK3sKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKworCWFkYXB0ZXItPmRiZy5udW1fY21kX2RlYXV0aCsrOworCWlmICghbWVtY21wKHJlc3AtPnBhcmFtcy5kZWF1dGgubWFjX2FkZHIsCisJCSAgICAmcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLm1hY19hZGRyZXNzLAorCQkgICAgc2l6ZW9mKHJlc3AtPnBhcmFtcy5kZWF1dGgubWFjX2FkZHIpKSkKKwkJbXdpZmlleF9yZXNldF9jb25uZWN0X3N0YXRlKHByaXYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGNvbW1hbmQgcmVzcG9uc2Ugb2YgYWQtaG9jIHN0b3AuCisgKgorICogVGhlIGZ1bmN0aW9uIHJlc2V0cyB0aGUgY29ubmVjdGlvbiBzdGF0ZSBpbiBkcml2ZXIuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9yZXRfODAyXzExX2FkX2hvY19zdG9wKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJCSAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKnJlc3ApCit7CisJbXdpZmlleF9yZXNldF9jb25uZWN0X3N0YXRlKHByaXYpOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBjb21tYW5kIHJlc3BvbnNlIG9mIHNldC9nZXQga2V5IG1hdGVyaWFsLgorICoKKyAqIEhhbmRsaW5nIGluY2x1ZGVzIHVwZGF0aW5nIHRoZSBkcml2ZXIgcGFyYW1ldGVycyB0byByZWZsZWN0IHRoZQorICogY2hhbmdlcy4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X3JldF84MDJfMTFfa2V5X21hdGVyaWFsKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJCSAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwKQoreworCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfa2V5X21hdGVyaWFsICprZXkgPQorCQkmcmVzcC0+cGFyYW1zLmtleV9tYXRlcmlhbDsKKworCWlmIChsZTE2X3RvX2NwdShrZXktPmFjdGlvbikgPT0gSG9zdENtZF9BQ1RfR0VOX1NFVCkgeworCQlpZiAoKGxlMTZfdG9fY3B1KGtleS0+a2V5X3BhcmFtX3NldC5rZXlfaW5mbykgJiBLRVlfTUNBU1QpKSB7CisJCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IGtleTogR1RLIGlzIHNldFxuIik7CisJCQlwcml2LT53cGFfaXNfZ3RrX3NldCA9IHRydWU7CisJCQlwcml2LT5zY2FuX2Jsb2NrID0gZmFsc2U7CisJCX0KKwl9CisKKwltZW1zZXQocHJpdi0+YWVzX2tleS5rZXlfcGFyYW1fc2V0LmtleSwgMCwKKwkgICAgICAgc2l6ZW9mKGtleS0+a2V5X3BhcmFtX3NldC5rZXkpKTsKKwlwcml2LT5hZXNfa2V5LmtleV9wYXJhbV9zZXQua2V5X2xlbiA9IGtleS0+a2V5X3BhcmFtX3NldC5rZXlfbGVuOworCW1lbWNweShwcml2LT5hZXNfa2V5LmtleV9wYXJhbV9zZXQua2V5LCBrZXktPmtleV9wYXJhbV9zZXQua2V5LAorCSAgICAgICBsZTE2X3RvX2NwdShwcml2LT5hZXNfa2V5LmtleV9wYXJhbV9zZXQua2V5X2xlbikpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGNvbW1hbmQgcmVzcG9uc2Ugb2YgZ2V0IDExZCBkb21haW4gaW5mb3JtYXRpb24uCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9yZXRfODAyXzExZF9kb21haW5faW5mbyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCQkgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqcmVzcCkKK3sKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExZF9kb21haW5faW5mb19yc3AgKmRvbWFpbl9pbmZvID0KKwkJJnJlc3AtPnBhcmFtcy5kb21haW5faW5mb19yZXNwOworCXN0cnVjdCBtd2lmaWV4X2lldHlwZXNfZG9tYWluX3BhcmFtX3NldCAqZG9tYWluID0gJmRvbWFpbl9pbmZvLT5kb21haW47CisJdTE2IGFjdGlvbiA9IGxlMTZfdG9fY3B1KGRvbWFpbl9pbmZvLT5hY3Rpb24pOworCXU4IG5vX29mX3RyaXBsZXQ7CisKKwlub19vZl90cmlwbGV0ID0gKHU4KSAoKGxlMTZfdG9fY3B1KGRvbWFpbi0+aGVhZGVyLmxlbikgLQorCQkJCQlJRUVFODAyMTFfQ09VTlRSWV9TVFJJTkdfTEVOKSAvCisJCQkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY291bnRyeV9pZV90cmlwbGV0KSk7CisKKwlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IDExRCBEb21haW4gSW5mbyBSZXNwOiIKKwkJCSIgbm9fb2ZfdHJpcGxldD0lZFxuIiwgbm9fb2ZfdHJpcGxldCk7CisKKwlpZiAobm9fb2ZfdHJpcGxldCA+IE1XSUZJRVhfTUFYX1RSSVBMRVRfODAyXzExRCkgeworCQlkZXZfd2Fybihwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkiMTFEOiBpbnZhbGlkIG51bWJlciBvZiB0cmlwbGV0cyAlZCAiCisJCQkicmV0dXJuZWQhIVxuIiwgbm9fb2ZfdHJpcGxldCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgSG9zdENtZF9BQ1RfR0VOX1NFVDogIC8qIFByb2MgU2V0IEFjdGlvbiAqLworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQUNUX0dFTl9HRVQ6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJIjExRDogaW52YWxpZCBhY3Rpb246JWRcbiIsIGRvbWFpbl9pbmZvLT5hY3Rpb24pOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGNvbW1hbmQgcmVzcG9uc2Ugb2YgZ2V0IFJGIGNoYW5uZWwuCisgKgorICogSGFuZGxpbmcgaW5jbHVkZXMgY2hhbmdpbmcgdGhlIGhlYWRlciBmaWVsZHMgaW50byBDUFUgZm9ybWF0CisgKiBhbmQgc2F2aW5nIHRoZSBuZXcgY2hhbm5lbCBpbiBkcml2ZXIuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9yZXRfODAyXzExX3JmX2NoYW5uZWwoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkJIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwLAorCQkJCQkgdm9pZCAqZGF0YV9idWYpCit7CisJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9yZl9jaGFubmVsICpyZl9jaGFubmVsID0KKwkJJnJlc3AtPnBhcmFtcy5yZl9jaGFubmVsOworCXUxNiBuZXdfY2hhbm5lbCA9IGxlMTZfdG9fY3B1KHJmX2NoYW5uZWwtPmN1cnJlbnRfY2hhbm5lbCk7CisKKwlpZiAocHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLmNoYW5uZWwgIT0gbmV3X2NoYW5uZWwpIHsKKwkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJjbWQ6IENoYW5uZWwgU3dpdGNoOiAlZCB0byAlZFxuIiwKKwkJICAgICAgIHByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5jaGFubmVsLAorCQkgICAgICAgbmV3X2NoYW5uZWwpOworCQkvKiBVcGRhdGUgdGhlIGNoYW5uZWwgYWdhaW4gKi8KKwkJcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLmNoYW5uZWwgPSBuZXdfY2hhbm5lbDsKKwl9CisJaWYgKGRhdGFfYnVmKQorCQkqKCh1MTYgKilkYXRhX2J1ZikgPSBuZXdfY2hhbm5lbDsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBjb21tYW5kIHJlc3BvbnNlIG9mIGdldCBleHRlbmRlZCB2ZXJzaW9uLgorICoKKyAqIEhhbmRsaW5nIGluY2x1ZGVzIGZvcm1pbmcgdGhlIGV4dGVuZGVkIHZlcnNpb24gc3RyaW5nIGFuZCBzZW5kaW5nIGl0CisgKiB0byBhcHBsaWNhdGlvbi4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X3JldF92ZXJfZXh0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgICAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKnJlc3AsCisJCQkgICAgICAgdm9pZCAqZGF0YV9idWYpCit7CisJc3RydWN0IGhvc3RfY21kX2RzX3ZlcnNpb25fZXh0ICp2ZXJfZXh0ID0gJnJlc3AtPnBhcmFtcy52ZXJleHQ7CisJc3RydWN0IGhvc3RfY21kX2RzX3ZlcnNpb25fZXh0ICp2ZXJzaW9uX2V4dDsKKworCWlmIChkYXRhX2J1ZikgeworCQl2ZXJzaW9uX2V4dCA9IChzdHJ1Y3QgaG9zdF9jbWRfZHNfdmVyc2lvbl9leHQgKilkYXRhX2J1ZjsKKwkJdmVyc2lvbl9leHQtPnZlcnNpb25fc3RyX3NlbCA9IHZlcl9leHQtPnZlcnNpb25fc3RyX3NlbDsKKwkJbWVtY3B5KHZlcnNpb25fZXh0LT52ZXJzaW9uX3N0ciwgdmVyX2V4dC0+dmVyc2lvbl9zdHIsCisJCSAgICAgICBzaXplb2YoY2hhcikgKiAxMjgpOworCQltZW1jcHkocHJpdi0+dmVyc2lvbl9zdHIsIHZlcl9leHQtPnZlcnNpb25fc3RyLCAxMjgpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgY29tbWFuZCByZXNwb25zZSBvZiByZWdpc3RlciBhY2Nlc3MuCisgKgorICogVGhlIHJlZ2lzdGVyIHZhbHVlIGFuZCBvZmZzZXQgYXJlIHJldHVybmVkIHRvIHRoZSB1c2VyLiBGb3IgRUVQUk9NCisgKiBhY2Nlc3MsIHRoZSBieXRlIGNvdW50IGlzIGFsc28gcmV0dXJuZWQuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9yZXRfcmVnX2FjY2Vzcyh1MTYgdHlwZSwgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKnJlc3AsCisJCQkJICB2b2lkICpkYXRhX2J1ZikKK3sKKwlzdHJ1Y3QgbXdpZmlleF9kc19yZWdfcncgKnJlZ19ydzsKKwlzdHJ1Y3QgbXdpZmlleF9kc19yZWFkX2VlcHJvbSAqZWVwcm9tOworCisJaWYgKGRhdGFfYnVmKSB7CisJCXJlZ19ydyA9IChzdHJ1Y3QgbXdpZmlleF9kc19yZWdfcncgKikgZGF0YV9idWY7CisJCWVlcHJvbSA9IChzdHJ1Y3QgbXdpZmlleF9kc19yZWFkX2VlcHJvbSAqKSBkYXRhX2J1ZjsKKwkJc3dpdGNoICh0eXBlKSB7CisJCWNhc2UgSG9zdENtZF9DTURfTUFDX1JFR19BQ0NFU1M6CisJCQl7CisJCQkJc3RydWN0IGhvc3RfY21kX2RzX21hY19yZWdfYWNjZXNzICpyZWc7CisJCQkJcmVnID0gKHN0cnVjdCBob3N0X2NtZF9kc19tYWNfcmVnX2FjY2VzcyAqKQorCQkJCQkmcmVzcC0+cGFyYW1zLm1hY19yZWc7CisJCQkJcmVnX3J3LT5vZmZzZXQgPSBjcHVfdG9fbGUzMigKKwkJCQkJKHUzMikgbGUxNl90b19jcHUocmVnLT5vZmZzZXQpKTsKKwkJCQlyZWdfcnctPnZhbHVlID0gcmVnLT52YWx1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJY2FzZSBIb3N0Q21kX0NNRF9CQlBfUkVHX0FDQ0VTUzoKKwkJCXsKKwkJCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfYmJwX3JlZ19hY2Nlc3MgKnJlZzsKKwkJCQlyZWcgPSAoc3RydWN0IGhvc3RfY21kX2RzX2JicF9yZWdfYWNjZXNzICopCisJCQkJCSZyZXNwLT5wYXJhbXMuYmJwX3JlZzsKKwkJCQlyZWdfcnctPm9mZnNldCA9IGNwdV90b19sZTMyKAorCQkJCQkodTMyKSBsZTE2X3RvX2NwdShyZWctPm9mZnNldCkpOworCQkJCXJlZ19ydy0+dmFsdWUgPSBjcHVfdG9fbGUzMigodTMyKSByZWctPnZhbHVlKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQljYXNlIEhvc3RDbWRfQ01EX1JGX1JFR19BQ0NFU1M6CisJCQl7CisJCQkJc3RydWN0IGhvc3RfY21kX2RzX3JmX3JlZ19hY2Nlc3MgKnJlZzsKKwkJCQlyZWcgPSAoc3RydWN0IGhvc3RfY21kX2RzX3JmX3JlZ19hY2Nlc3MgKikKKwkJCQkJJnJlc3AtPnBhcmFtcy5yZl9yZWc7CisJCQkJcmVnX3J3LT5vZmZzZXQgPSBjcHVfdG9fbGUzMigKKwkJCQkJKHUzMikgbGUxNl90b19jcHUocmVnLT5vZmZzZXQpKTsKKwkJCQlyZWdfcnctPnZhbHVlID0gY3B1X3RvX2xlMzIoKHUzMikgcmVnLT52YWx1ZSk7CisJCQkJYnJlYWs7CisJCQl9CisJCWNhc2UgSG9zdENtZF9DTURfUE1JQ19SRUdfQUNDRVNTOgorCQkJeworCQkJCXN0cnVjdCBob3N0X2NtZF9kc19wbWljX3JlZ19hY2Nlc3MgKnJlZzsKKwkJCQlyZWcgPSAoc3RydWN0IGhvc3RfY21kX2RzX3BtaWNfcmVnX2FjY2VzcyAqKQorCQkJCQkmcmVzcC0+cGFyYW1zLnBtaWNfcmVnOworCQkJCXJlZ19ydy0+b2Zmc2V0ID0gY3B1X3RvX2xlMzIoCisJCQkJCSh1MzIpIGxlMTZfdG9fY3B1KHJlZy0+b2Zmc2V0KSk7CisJCQkJcmVnX3J3LT52YWx1ZSA9IGNwdV90b19sZTMyKCh1MzIpIHJlZy0+dmFsdWUpOworCQkJCWJyZWFrOworCQkJfQorCQljYXNlIEhvc3RDbWRfQ01EX0NBVV9SRUdfQUNDRVNTOgorCQkJeworCQkJCXN0cnVjdCBob3N0X2NtZF9kc19yZl9yZWdfYWNjZXNzICpyZWc7CisJCQkJcmVnID0gKHN0cnVjdCBob3N0X2NtZF9kc19yZl9yZWdfYWNjZXNzICopCisJCQkJCSZyZXNwLT5wYXJhbXMucmZfcmVnOworCQkJCXJlZ19ydy0+b2Zmc2V0ID0gY3B1X3RvX2xlMzIoCisJCQkJCSh1MzIpIGxlMTZfdG9fY3B1KHJlZy0+b2Zmc2V0KSk7CisJCQkJcmVnX3J3LT52YWx1ZSA9IGNwdV90b19sZTMyKCh1MzIpIHJlZy0+dmFsdWUpOworCQkJCWJyZWFrOworCQkJfQorCQljYXNlIEhvc3RDbWRfQ01EXzgwMl8xMV9FRVBST01fQUNDRVNTOgorCQkJeworCQkJCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfZWVwcm9tX2FjY2VzcworCQkJCQkqY21kX2VlcHJvbSA9CisJCQkJCShzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2VlcHJvbV9hY2Nlc3MKKwkJCQkJICopICZyZXNwLT5wYXJhbXMuZWVwcm9tOworCQkJCXByX2RlYnVnKCJpbmZvOiBFRVBST00gcmVhZCBsZW49JXhcbiIsCisJCQkJICAgICAgIGNtZF9lZXByb20tPmJ5dGVfY291bnQpOworCQkJCWlmIChsZTE2X3RvX2NwdShlZXByb20tPmJ5dGVfY291bnQpIDwKKwkJCQkJCWxlMTZfdG9fY3B1KAorCQkJCQkJY21kX2VlcHJvbS0+Ynl0ZV9jb3VudCkpIHsKKwkJCQkJZWVwcm9tLT5ieXRlX2NvdW50ID0gY3B1X3RvX2xlMTYoMCk7CisJCQkJCXByX2RlYnVnKCJpbmZvOiBFRVBST00gcmVhZCAiCisJCQkJCQkJImxlbmd0aCBpcyB0b28gYmlnXG4iKTsKKwkJCQkJcmV0dXJuIC0xOworCQkJCX0KKwkJCQllZXByb20tPm9mZnNldCA9IGNtZF9lZXByb20tPm9mZnNldDsKKwkJCQllZXByb20tPmJ5dGVfY291bnQgPSBjbWRfZWVwcm9tLT5ieXRlX2NvdW50OworCQkJCWlmIChsZTE2X3RvX2NwdShlZXByb20tPmJ5dGVfY291bnQpID4gMCkKKwkJCQkJbWVtY3B5KCZlZXByb20tPnZhbHVlLAorCQkJCQkgICAgICAgJmNtZF9lZXByb20tPnZhbHVlLAorCQkJCQkgICAgICAgbGUxNl90b19jcHUoZWVwcm9tLT5ieXRlX2NvdW50KSk7CisKKwkJCQlicmVhazsKKwkJCX0KKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgY29tbWFuZCByZXNwb25zZSBvZiBnZXQgSUJTUyBjb2FsZXNjaW5nIHN0YXR1cy4KKyAqCisgKiBJZiB0aGUgcmVjZWl2ZWQgQlNTSUQgaXMgZGlmZmVyZW50IHRoYW4gdGhlIGN1cnJlbnQgb25lLCB0aGUgY3VycmVudCBCU1NJRCwKKyAqIGJlYWNvbiBpbnRlcnZhbCwgQVRJTSB3aW5kb3cgYW5kIEVSUCBpbmZvcm1hdGlvbiBhcmUgdXBkYXRlZCwgYWxvbmcgd2l0aAorICogY2hhbmdpbmcgdGhlIGFkLWhvYyBzdGF0ZSBhY2NvcmRpbmdseS4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X3JldF9pYnNzX2NvYWxlc2Npbmdfc3RhdHVzKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJCSAgICAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwKQoreworCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfaWJzc19zdGF0dXMgKmlic3NfY29hbF9yZXNwID0KKwkJJihyZXNwLT5wYXJhbXMuaWJzc19jb2FsZXNjaW5nKTsKKwl1OCB6ZXJvX21hY1tFVEhfQUxFTl0gPSB7IDAsIDAsIDAsIDAsIDAsIDAgfTsKKworCWlmIChsZTE2X3RvX2NwdShpYnNzX2NvYWxfcmVzcC0+YWN0aW9uKSA9PSBIb3N0Q21kX0FDVF9HRU5fU0VUKQorCQlyZXR1cm4gMDsKKworCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkiaW5mbzogbmV3IEJTU0lEICVwTVxuIiwgaWJzc19jb2FsX3Jlc3AtPmJzc2lkKTsKKworCS8qIElmIHJzcCBoYXMgTlVMTCBCU1NJRCwgSnVzdCByZXR1cm4uLi4uLiBObyBBY3Rpb24gKi8KKwlpZiAoIW1lbWNtcChpYnNzX2NvYWxfcmVzcC0+YnNzaWQsIHplcm9fbWFjLCBFVEhfQUxFTikpIHsKKwkJZGV2X3dhcm4ocHJpdi0+YWRhcHRlci0+ZGV2LCAibmV3IEJTU0lEIGlzIE5VTExcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBJZiBCU1NJRCBpcyBkaWZmLCBtb2RpZnkgY3VycmVudCBCU1MgcGFyYW1ldGVycyAqLworCWlmIChtZW1jbXAocHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLm1hY19hZGRyZXNzLAorCQkgICBpYnNzX2NvYWxfcmVzcC0+YnNzaWQsIEVUSF9BTEVOKSkgeworCQkvKiBCU1NJRCAqLworCQltZW1jcHkocHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLm1hY19hZGRyZXNzLAorCQkgICAgICAgaWJzc19jb2FsX3Jlc3AtPmJzc2lkLCBFVEhfQUxFTik7CisKKwkJLyogQmVhY29uIEludGVydmFsICovCisJCXByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5iZWFjb25fcGVyaW9kCisJCQk9IGxlMTZfdG9fY3B1KGlic3NfY29hbF9yZXNwLT5iZWFjb25faW50ZXJ2YWwpOworCisJCS8qIEVSUCBJbmZvcm1hdGlvbiAqLworCQlwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IuZXJwX2ZsYWdzID0KKwkJCSh1OCkgbGUxNl90b19jcHUoaWJzc19jb2FsX3Jlc3AtPnVzZV9nX3JhdGVfcHJvdGVjdCk7CisKKwkJcHJpdi0+YWRob2Nfc3RhdGUgPSBBREhPQ19DT0FMRVNDRUQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGNvbW1hbmQgcmVzcG9uc2VzLgorICoKKyAqIFRoaXMgaXMgYSBnZW5lcmljIGZ1bmN0aW9uLCB3aGljaCBjYWxscyBjb21tYW5kIHNwZWNpZmljCisgKiByZXNwb25zZSBoYW5kbGVycyBiYXNlZCBvbiB0aGUgY29tbWFuZCBJRC4KKyAqLworaW50IG13aWZpZXhfcHJvY2Vzc19zdGFfY21kcmVzcChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCXUxNiBjbWRyZXNwX25vLCB2b2lkICpjbWRfYnVmKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwID0KKwkJKHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICopIGNtZF9idWY7CisJdm9pZCAqZGF0YV9idWYgPSBhZGFwdGVyLT5jdXJyX2NtZC0+ZGF0YV9idWY7CisKKwkvKiBJZiB0aGUgY29tbWFuZCBpcyBub3Qgc3VjY2Vzc2Z1bCwgY2xlYW51cCBhbmQgcmV0dXJuIGZhaWx1cmUgKi8KKwlpZiAocmVzcC0+cmVzdWx0ICE9IEhvc3RDbWRfUkVTVUxUX09LKSB7CisJCW13aWZpZXhfcHJvY2Vzc19jbWRyZXNwX2Vycm9yKHByaXYsIHJlc3ApOworCQlyZXR1cm4gLTE7CisJfQorCS8qIENvbW1hbmQgc3VjY2Vzc2Z1bCwgaGFuZGxlIHJlc3BvbnNlICovCisJc3dpdGNoIChjbWRyZXNwX25vKSB7CisJY2FzZSBIb3N0Q21kX0NNRF9HRVRfSFdfU1BFQzoKKwkJcmV0ID0gbXdpZmlleF9yZXRfZ2V0X2h3X3NwZWMocHJpdiwgcmVzcCk7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfTUFDX0NPTlRST0w6CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfODAyXzExX01BQ19BRERSRVNTOgorCQlyZXQgPSBtd2lmaWV4X3JldF84MDJfMTFfbWFjX2FkZHJlc3MocHJpdiwgcmVzcCk7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfTUFDX01VTFRJQ0FTVF9BRFI6CisJCXJldCA9IG13aWZpZXhfcmV0X21hY19tdWx0aWNhc3RfYWRyKHByaXYsIHJlc3ApOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EX1RYX1JBVEVfQ0ZHOgorCQlyZXQgPSBtd2lmaWV4X3JldF90eF9yYXRlX2NmZyhwcml2LCByZXNwLCBkYXRhX2J1Zik7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfODAyXzExX1NDQU46CisJCXJldCA9IG13aWZpZXhfcmV0XzgwMl8xMV9zY2FuKHByaXYsIHJlc3ApOworCQlhZGFwdGVyLT5jdXJyX2NtZC0+d2FpdF9xX2VuYWJsZWQgPSBmYWxzZTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF84MDJfMTFfQkdfU0NBTl9RVUVSWToKKwkJcmV0ID0gbXdpZmlleF9yZXRfODAyXzExX3NjYW4ocHJpdiwgcmVzcCk7CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LAorCQkJImluZm86IENNRF9SRVNQOiBCR19TQ0FOIHJlc3VsdCBpcyByZWFkeSFcbiIpOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EX1RYUFdSX0NGRzoKKwkJcmV0ID0gbXdpZmlleF9yZXRfdHhfcG93ZXJfY2ZnKHByaXYsIHJlc3AsIGRhdGFfYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF84MDJfMTFfUFNfTU9ERV9FTkg6CisJCXJldCA9IG13aWZpZXhfcmV0X2VuaF9wb3dlcl9tb2RlKHByaXYsIHJlc3AsIGRhdGFfYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF84MDJfMTFfSFNfQ0ZHX0VOSDoKKwkJcmV0ID0gbXdpZmlleF9yZXRfODAyXzExX2hzX2NmZyhwcml2LCByZXNwKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF84MDJfMTFfQVNTT0NJQVRFOgorCQlyZXQgPSBtd2lmaWV4X3JldF84MDJfMTFfYXNzb2NpYXRlKHByaXYsIHJlc3ApOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EXzgwMl8xMV9ERUFVVEhFTlRJQ0FURToKKwkJcmV0ID0gbXdpZmlleF9yZXRfODAyXzExX2RlYXV0aGVudGljYXRlKHByaXYsIHJlc3ApOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EXzgwMl8xMV9BRF9IT0NfU1RBUlQ6CisJY2FzZSBIb3N0Q21kX0NNRF84MDJfMTFfQURfSE9DX0pPSU46CisJCXJldCA9IG13aWZpZXhfcmV0XzgwMl8xMV9hZF9ob2MocHJpdiwgcmVzcCk7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfODAyXzExX0FEX0hPQ19TVE9QOgorCQlyZXQgPSBtd2lmaWV4X3JldF84MDJfMTFfYWRfaG9jX3N0b3AocHJpdiwgcmVzcCk7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfODAyXzExX0dFVF9MT0c6CisJCXJldCA9IG13aWZpZXhfcmV0X2dldF9sb2cocHJpdiwgcmVzcCwgZGF0YV9idWYpOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EX1JTU0lfSU5GTzoKKwkJcmV0ID0gbXdpZmlleF9yZXRfODAyXzExX3Jzc2lfaW5mbyhwcml2LCByZXNwLCBkYXRhX2J1Zik7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfODAyXzExX1NOTVBfTUlCOgorCQlyZXQgPSBtd2lmaWV4X3JldF84MDJfMTFfc25tcF9taWIocHJpdiwgcmVzcCwgZGF0YV9idWYpOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EXzgwMl8xMV9UWF9SQVRFX1FVRVJZOgorCQlyZXQgPSBtd2lmaWV4X3JldF84MDJfMTFfdHhfcmF0ZV9xdWVyeShwcml2LCByZXNwKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF84MDJfMTFfUkZfQ0hBTk5FTDoKKwkJcmV0ID0gbXdpZmlleF9yZXRfODAyXzExX3JmX2NoYW5uZWwocHJpdiwgcmVzcCwgZGF0YV9idWYpOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EX1ZFUlNJT05fRVhUOgorCQlyZXQgPSBtd2lmaWV4X3JldF92ZXJfZXh0KHByaXYsIHJlc3AsIGRhdGFfYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF9GVU5DX0lOSVQ6CisJY2FzZSBIb3N0Q21kX0NNRF9GVU5DX1NIVVRET1dOOgorCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EXzgwMl8xMV9LRVlfTUFURVJJQUw6CisJCXJldCA9IG13aWZpZXhfcmV0XzgwMl8xMV9rZXlfbWF0ZXJpYWwocHJpdiwgcmVzcCk7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfODAyXzExRF9ET01BSU5fSU5GTzoKKwkJcmV0ID0gbXdpZmlleF9yZXRfODAyXzExZF9kb21haW5faW5mbyhwcml2LCByZXNwKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF8xMU5fQUREQkFfUkVROgorCQlyZXQgPSBtd2lmaWV4X3JldF8xMW5fYWRkYmFfcmVxKHByaXYsIHJlc3ApOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EXzExTl9ERUxCQToKKwkJcmV0ID0gbXdpZmlleF9yZXRfMTFuX2RlbGJhKHByaXYsIHJlc3ApOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EXzExTl9BRERCQV9SU1A6CisJCXJldCA9IG13aWZpZXhfcmV0XzExbl9hZGRiYV9yZXNwKHByaXYsIHJlc3ApOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EX1JFQ09ORklHVVJFX1RYX0JVRkY6CisJCWFkYXB0ZXItPnR4X2J1Zl9zaXplID0gKHUxNikgbGUxNl90b19jcHUocmVzcC0+cGFyYW1zLgorCQkJCQkJCSAgICAgdHhfYnVmLmJ1ZmZfc2l6ZSk7CisJCWFkYXB0ZXItPnR4X2J1Zl9zaXplID0gKGFkYXB0ZXItPnR4X2J1Zl9zaXplIC8KKwkJCQkJCU1XSUZJRVhfU0RJT19CTE9DS19TSVpFKSAqCisJCQkJCQlNV0lGSUVYX1NESU9fQkxPQ0tfU0laRTsKKwkJYWRhcHRlci0+Y3Vycl90eF9idWZfc2l6ZSA9IGFkYXB0ZXItPnR4X2J1Zl9zaXplOworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwKKwkJCSJjbWQ6IG1heF90eF9idWZfc2l6ZT0lZCwgdHhfYnVmX3NpemU9JWRcbiIsCisJCSAgICAgICBhZGFwdGVyLT5tYXhfdHhfYnVmX3NpemUsIGFkYXB0ZXItPnR4X2J1Zl9zaXplKTsKKworCQlpZiAoYWRhcHRlci0+aWZfb3BzLnVwZGF0ZV9tcF9lbmRfcG9ydCkKKwkJCWFkYXB0ZXItPmlmX29wcy51cGRhdGVfbXBfZW5kX3BvcnQoYWRhcHRlciwKKwkJCQkJbGUxNl90b19jcHUocmVzcC0+CisJCQkJCQlwYXJhbXMuCisJCQkJCQl0eF9idWYuCisJCQkJCQltcF9lbmRfcG9ydCkpOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EX0FNU0RVX0FHR1JfQ1RSTDoKKwkJcmV0ID0gbXdpZmlleF9yZXRfYW1zZHVfYWdncl9jdHJsKHJlc3AsIGRhdGFfYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF9XTU1fR0VUX1NUQVRVUzoKKwkJcmV0ID0gbXdpZmlleF9yZXRfd21tX2dldF9zdGF0dXMocHJpdiwgcmVzcCk7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfODAyXzExX0lCU1NfQ09BTEVTQ0lOR19TVEFUVVM6CisJCXJldCA9IG13aWZpZXhfcmV0X2lic3NfY29hbGVzY2luZ19zdGF0dXMocHJpdiwgcmVzcCk7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfTUFDX1JFR19BQ0NFU1M6CisJY2FzZSBIb3N0Q21kX0NNRF9CQlBfUkVHX0FDQ0VTUzoKKwljYXNlIEhvc3RDbWRfQ01EX1JGX1JFR19BQ0NFU1M6CisJY2FzZSBIb3N0Q21kX0NNRF9QTUlDX1JFR19BQ0NFU1M6CisJY2FzZSBIb3N0Q21kX0NNRF9DQVVfUkVHX0FDQ0VTUzoKKwljYXNlIEhvc3RDbWRfQ01EXzgwMl8xMV9FRVBST01fQUNDRVNTOgorCQlyZXQgPSBtd2lmaWV4X3JldF9yZWdfYWNjZXNzKGNtZHJlc3Bfbm8sIHJlc3AsIGRhdGFfYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF9TRVRfQlNTX01PREU6CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfMTFOX0NGRzoKKwkJcmV0ID0gbXdpZmlleF9yZXRfMTFuX2NmZyhyZXNwLCBkYXRhX2J1Zik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiQ01EX1JFU1A6IHVua25vd24gY21kIHJlc3BvbnNlICUjeFxuIiwKKwkJICAgICAgIHJlc3AtPmNvbW1hbmQpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9zdGFfZXZlbnQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvc3RhX2V2ZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMyNjVjYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvc3RhX2V2ZW50LmMKQEAgLTAsMCArMSw0MDYgQEAKKy8qCisgKiBNYXJ2ZWxsIFdpcmVsZXNzIExBTiBkZXZpY2UgZHJpdmVyOiBzdGF0aW9uIGV2ZW50IGhhbmRsaW5nCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRlcm5hdGlvbmFsCisgKiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKyAqICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgdXNlLCByZWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgaW4KKyAqIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UsIGEgY29weSBvZiB3aGljaAorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0Egb3Igb24gdGhlCisgKiB3b3JsZHdpZGUgd2ViIGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQuCisgKgorICogVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4gIFRoZSBMaWNlbnNlIHByb3ZpZGVzIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dAorICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLgorICovCisKKyNpbmNsdWRlICJkZWNsLmgiCisjaW5jbHVkZSAiaW9jdGwuaCIKKyNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAiZncuaCIKKyNpbmNsdWRlICJtYWluLmgiCisjaW5jbHVkZSAid21tLmgiCisjaW5jbHVkZSAiMTFuLmgiCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJlc2V0cyB0aGUgY29ubmVjdGlvbiBzdGF0ZS4KKyAqCisgKiBUaGUgZnVuY3Rpb24gaXMgaW52b2tlZCBhZnRlciByZWNlaXZpbmcgYSBkaXNjb25uZWN0IGV2ZW50IGZyb20gZmlybXdhcmUsCisgKiBhbmQgcGVyZm9ybXMgdGhlIGZvbGxvd2luZyBhY3Rpb25zIC0KKyAqICAgICAgLSBTZXQgbWVkaWEgc3RhdHVzIHRvIGRpc2Nvbm5lY3RlZAorICogICAgICAtIENsZWFuIHVwIFR4IGFuZCBSeCBwYWNrZXRzCisgKiAgICAgIC0gUmVzZXRzIFNOUi9ORi9SU1NJIHZhbHVlIGluIGRyaXZlcgorICogICAgICAtIFJlc2V0cyBzZWN1cml0eSBjb25maWd1cmF0aW9ucyBpbiBkcml2ZXIKKyAqICAgICAgLSBFbmFibGVzIGF1dG8gZGF0YSByYXRlCisgKiAgICAgIC0gU2F2ZXMgdGhlIHByZXZpb3VzIFNTSUQgYW5kIEJTU0lEIHNvIHRoYXQgdGhleSBjYW4KKyAqICAgICAgICBiZSB1c2VkIGZvciByZS1hc3NvY2lhdGlvbiwgaWYgcmVxdWlyZWQKKyAqICAgICAgLSBFcmFzZXMgY3VycmVudCBTU0lEIGFuZCBCU1NJRCBpbmZvcm1hdGlvbgorICogICAgICAtIFNlbmRzIGEgZGlzY29ubmVjdCBldmVudCB0byB1cHBlciBsYXllcnMvYXBwbGljYXRpb25zLgorICovCit2b2lkCittd2lmaWV4X3Jlc2V0X2Nvbm5lY3Rfc3RhdGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdikKK3sKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKworCWlmICghcHJpdi0+bWVkaWFfY29ubmVjdGVkKQorCQlyZXR1cm47CisKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IGhhbmRsZXMgZGlzY29ubmVjdCBldmVudFxuIik7CisKKwlwcml2LT5tZWRpYV9jb25uZWN0ZWQgPSBmYWxzZTsKKworCXByaXYtPnNjYW5fYmxvY2sgPSBmYWxzZTsKKworCS8qIEZyZWUgVHggYW5kIFJ4IHBhY2tldHMsIHJlcG9ydCBkaXNjb25uZWN0IHRvIHVwcGVyIGxheWVyICovCisJbXdpZmlleF9jbGVhbl90eHJ4KHByaXYpOworCisJLyogUmVzZXQgU05SL05GL1JTU0kgdmFsdWVzICovCisJcHJpdi0+ZGF0YV9yc3NpX2xhc3QgPSAwOworCXByaXYtPmRhdGFfbmZfbGFzdCA9IDA7CisJcHJpdi0+ZGF0YV9yc3NpX2F2ZyA9IDA7CisJcHJpdi0+ZGF0YV9uZl9hdmcgPSAwOworCXByaXYtPmJjbl9yc3NpX2xhc3QgPSAwOworCXByaXYtPmJjbl9uZl9sYXN0ID0gMDsKKwlwcml2LT5iY25fcnNzaV9hdmcgPSAwOworCXByaXYtPmJjbl9uZl9hdmcgPSAwOworCXByaXYtPnJ4cGRfcmF0ZSA9IDA7CisJcHJpdi0+cnhwZF9odGluZm8gPSAwOworCXByaXYtPnNlY19pbmZvLndwYV9lbmFibGVkID0gZmFsc2U7CisJcHJpdi0+c2VjX2luZm8ud3BhMl9lbmFibGVkID0gZmFsc2U7CisJcHJpdi0+d3BhX2llX2xlbiA9IDA7CisKKwlwcml2LT5zZWNfaW5mby53YXBpX2VuYWJsZWQgPSBmYWxzZTsKKwlwcml2LT53YXBpX2llX2xlbiA9IDA7CisJcHJpdi0+c2VjX2luZm8ud2FwaV9rZXlfb24gPSBmYWxzZTsKKworCXByaXYtPnNlY19pbmZvLmVuY3J5cHRpb25fbW9kZSA9IDA7CisKKwkvKiBFbmFibGUgYXV0byBkYXRhIHJhdGUgKi8KKwlwcml2LT5pc19kYXRhX3JhdGVfYXV0byA9IHRydWU7CisJcHJpdi0+ZGF0YV9yYXRlID0gMDsKKworCWlmIChwcml2LT5ic3NfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQlwcml2LT5hZGhvY19zdGF0ZSA9IEFESE9DX0lETEU7CisJCXByaXYtPmFkaG9jX2lzX2xpbmtfc2Vuc2VkID0gZmFsc2U7CisJfQorCisJLyoKKwkgKiBNZW1vcml6ZSB0aGUgcHJldmlvdXMgU1NJRCBhbmQgQlNTSUQgc28KKwkgKiBpdCBjb3VsZCBiZSB1c2VkIGZvciByZS1hc3NvYworCSAqLworCisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBwcmV2aW91cyBTU0lEPSVzLCBTU0lEIGxlbj0ldVxuIiwKKwkgICAgICAgcHJpdi0+cHJldl9zc2lkLnNzaWQsIHByaXYtPnByZXZfc3NpZC5zc2lkX2xlbik7CisKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IGN1cnJlbnQgU1NJRD0lcywgU1NJRCBsZW49JXVcbiIsCisJICAgICAgIHByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5zc2lkLnNzaWQsCisJICAgICAgIHByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5zc2lkLnNzaWRfbGVuKTsKKworCW1lbWNweSgmcHJpdi0+cHJldl9zc2lkLAorCSAgICAgICAmcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLnNzaWQsCisJICAgICAgIHNpemVvZihzdHJ1Y3QgbXdpZmlleF84MDJfMTFfc3NpZCkpOworCisJbWVtY3B5KHByaXYtPnByZXZfYnNzaWQsCisJICAgICAgIHByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5tYWNfYWRkcmVzcywgRVRIX0FMRU4pOworCisJLyogTmVlZCB0byBlcmFzZSB0aGUgY3VycmVudCBTU0lEIGFuZCBCU1NJRCBpbmZvICovCisJbWVtc2V0KCZwcml2LT5jdXJyX2Jzc19wYXJhbXMsIDB4MDAsIHNpemVvZihwcml2LT5jdXJyX2Jzc19wYXJhbXMpKTsKKworCWFkYXB0ZXItPnR4X2xvY2tfZmxhZyA9IGZhbHNlOworCWFkYXB0ZXItPnBwc191YXBzZF9tb2RlID0gZmFsc2U7CisKKwlpZiAoYWRhcHRlci0+bnVtX2NtZF90aW1lb3V0ICYmIGFkYXB0ZXItPmN1cnJfY21kKQorCQlyZXR1cm47CisJcHJpdi0+bWVkaWFfY29ubmVjdGVkID0gZmFsc2U7CisJaWYgKCFwcml2LT5kaXNjb25uZWN0KSB7CisJCXByaXYtPmRpc2Nvbm5lY3QgPSAxOworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IHN1Y2Nlc3NmdWxseSBkaXNjb25uZWN0ZWQgZnJvbSIKKwkJCQkiICVwTTogcmVhc29uIGNvZGUgJWRcbiIsIHByaXYtPmNmZ19ic3NpZCwKKwkJCQlXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORyk7CisJCWNmZzgwMjExX2Rpc2Nvbm5lY3RlZChwcml2LT5uZXRkZXYsCisJCQkJV0xBTl9SRUFTT05fREVBVVRIX0xFQVZJTkcsIE5VTEwsIDAsCisJCQkJR0ZQX0tFUk5FTCk7CisJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+Y2ZnX3dvcmtxdWV1ZSk7CisJfQorCWlmICghbmV0aWZfcXVldWVfc3RvcHBlZChwcml2LT5uZXRkZXYpKQorCQluZXRpZl9zdG9wX3F1ZXVlKHByaXYtPm5ldGRldik7CisJaWYgKG5ldGlmX2NhcnJpZXJfb2socHJpdi0+bmV0ZGV2KSkKKwkJbmV0aWZfY2Fycmllcl9vZmYocHJpdi0+bmV0ZGV2KTsKKwkvKiBSZXNldCB3aXJlbGVzcyBzdGF0cyBzaWduYWwgaW5mbyAqLworCXByaXYtPndfc3RhdHMucXVhbC5sZXZlbCA9IDA7CisJcHJpdi0+d19zdGF0cy5xdWFsLm5vaXNlID0gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBldmVudHMgZ2VuZXJhdGVkIGJ5IGZpcm13YXJlLgorICoKKyAqIFRoaXMgaXMgYSBnZW5lcmljIGZ1bmN0aW9uIGFuZCBoYW5kbGVzIGFsbCBldmVudHMuCisgKgorICogRXZlbnQgc3BlY2lmaWMgcm91dGluZXMgYXJlIGNhbGxlZCBieSB0aGlzIGZ1bmN0aW9uIGJhc2VkCisgKiB1cG9uIHRoZSBnZW5lcmF0ZWQgZXZlbnQgY2F1c2UuCisgKgorICogRm9yIHRoZSBmb2xsb3dpbmcgZXZlbnRzLCB0aGUgZnVuY3Rpb24ganVzdCBmb3J3YXJkcyB0aGVtIHRvIHVwcGVyCisgKiBsYXllcnMsIG9wdGlvbmFsbHkgcmVjb3JkaW5nIHRoZSBjaGFuZ2UgLQorICogICAgICAtIEVWRU5UX0xJTktfU0VOU0VECisgKiAgICAgIC0gRVZFTlRfTUlDX0VSUl9VTklDQVNUCisgKiAgICAgIC0gRVZFTlRfTUlDX0VSUl9NVUxUSUNBU1QKKyAqICAgICAgLSBFVkVOVF9QT1JUX1JFTEVBU0UKKyAqICAgICAgLSBFVkVOVF9SU1NJX0xPVworICogICAgICAtIEVWRU5UX1NOUl9MT1cKKyAqICAgICAgLSBFVkVOVF9NQVhfRkFJTAorICogICAgICAtIEVWRU5UX1JTU0lfSElHSAorICogICAgICAtIEVWRU5UX1NOUl9ISUdICisgKiAgICAgIC0gRVZFTlRfREFUQV9SU1NJX0xPVworICogICAgICAtIEVWRU5UX0RBVEFfU05SX0xPVworICogICAgICAtIEVWRU5UX0RBVEFfUlNTSV9ISUdICisgKiAgICAgIC0gRVZFTlRfREFUQV9TTlJfSElHSAorICogICAgICAtIEVWRU5UX0xJTktfUVVBTElUWQorICogICAgICAtIEVWRU5UX1BSRV9CRUFDT05fTE9TVAorICogICAgICAtIEVWRU5UX0lCU1NfQ09BTEVTQ0VECisgKiAgICAgIC0gRVZFTlRfV0VQX0lDVl9FUlIKKyAqICAgICAgLSBFVkVOVF9CV19DSEFOR0UKKyAqICAgICAgLSBFVkVOVF9IT1NUV0FLRV9TVEFJRQorICAqCisgKiBGb3IgdGhlIGZvbGxvd2luZyBldmVudHMsIG5vIGFjdGlvbiBpcyB0YWtlbiAtCisgKiAgICAgIC0gRVZFTlRfTUlCX0NIQU5HRUQKKyAqICAgICAgLSBFVkVOVF9JTklUX0RPTkUKKyAqICAgICAgLSBFVkVOVF9EVU1NWV9IT1NUX1dBS0VVUF9TSUdOQUwKKyAqCisgKiBSZXN0IG9mIHRoZSBzdXBwb3J0ZWQgZXZlbnRzIHJlcXVpcmVzIGRyaXZlciBoYW5kbGluZyAtCisgKiAgICAgIC0gRVZFTlRfREVBVVRIRU5USUNBVEVECisgKiAgICAgIC0gRVZFTlRfRElTQVNTT0NJQVRFRAorICogICAgICAtIEVWRU5UX0xJTktfTE9TVAorICogICAgICAtIEVWRU5UX1BTX1NMRUVQCisgKiAgICAgIC0gRVZFTlRfUFNfQVdBS0UKKyAqICAgICAgLSBFVkVOVF9ERUVQX1NMRUVQX0FXQUtFCisgKiAgICAgIC0gRVZFTlRfSFNfQUNUX1JFUQorICogICAgICAtIEVWRU5UX0FESE9DX0JDTl9MT1NUCisgKiAgICAgIC0gRVZFTlRfQkdfU0NBTl9SRVBPUlQKKyAqICAgICAgLSBFVkVOVF9XTU1fU1RBVFVTX0NIQU5HRQorICogICAgICAtIEVWRU5UX0FEREJBCisgKiAgICAgIC0gRVZFTlRfREVMQkEKKyAqICAgICAgLSBFVkVOVF9CQV9TVFJFQU1fVElFTU9VVAorICogICAgICAtIEVWRU5UX0FNU0RVX0FHR1JfQ1RSTAorICovCitpbnQgbXdpZmlleF9wcm9jZXNzX3N0YV9ldmVudChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KQoreworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCWludCByZXQgPSAwOworCXUzMiBldmVudGNhdXNlID0gYWRhcHRlci0+ZXZlbnRfY2F1c2U7CisKKwlzd2l0Y2ggKGV2ZW50Y2F1c2UpIHsKKwljYXNlIEVWRU5UX0RVTU1ZX0hPU1RfV0FLRVVQX1NJR05BTDoKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJpbnZhbGlkIEVWRU5UOiBEVU1NWV9IT1NUX1dBS0VVUF9TSUdOQUwsIgorCQkJCSIgaWdub3JpbmcgaXRcbiIpOworCQlicmVhazsKKwljYXNlIEVWRU5UX0xJTktfU0VOU0VEOgorCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImV2ZW50OiBMSU5LX1NFTlNFRFxuIik7CisJCWlmICghbmV0aWZfY2Fycmllcl9vayhwcml2LT5uZXRkZXYpKQorCQkJbmV0aWZfY2Fycmllcl9vbihwcml2LT5uZXRkZXYpOworCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChwcml2LT5uZXRkZXYpKQorCQkJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5uZXRkZXYpOworCQlicmVhazsKKworCWNhc2UgRVZFTlRfREVBVVRIRU5USUNBVEVEOgorCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImV2ZW50OiBEZWF1dGhlbnRpY2F0ZWRcbiIpOworCQlhZGFwdGVyLT5kYmcubnVtX2V2ZW50X2RlYXV0aCsrOworCQlpZiAocHJpdi0+bWVkaWFfY29ubmVjdGVkKQorCQkJbXdpZmlleF9yZXNldF9jb25uZWN0X3N0YXRlKHByaXYpOworCQlicmVhazsKKworCWNhc2UgRVZFTlRfRElTQVNTT0NJQVRFRDoKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJldmVudDogRGlzYXNzb2NpYXRlZFxuIik7CisJCWFkYXB0ZXItPmRiZy5udW1fZXZlbnRfZGlzYXNzb2MrKzsKKwkJaWYgKHByaXYtPm1lZGlhX2Nvbm5lY3RlZCkKKwkJCW13aWZpZXhfcmVzZXRfY29ubmVjdF9zdGF0ZShwcml2KTsKKwkJYnJlYWs7CisKKwljYXNlIEVWRU5UX0xJTktfTE9TVDoKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJldmVudDogTGluayBsb3N0XG4iKTsKKwkJYWRhcHRlci0+ZGJnLm51bV9ldmVudF9saW5rX2xvc3QrKzsKKwkJaWYgKHByaXYtPm1lZGlhX2Nvbm5lY3RlZCkKKwkJCW13aWZpZXhfcmVzZXRfY29ubmVjdF9zdGF0ZShwcml2KTsKKwkJYnJlYWs7CisKKwljYXNlIEVWRU5UX1BTX1NMRUVQOgorCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IEVWRU5UOiBTTEVFUFxuIik7CisKKwkJYWRhcHRlci0+cHNfc3RhdGUgPSBQU19TVEFURV9QUkVfU0xFRVA7CisKKwkJbXdpZmlleF9jaGVja19wc19jb25kKGFkYXB0ZXIpOworCQlicmVhazsKKworCWNhc2UgRVZFTlRfUFNfQVdBS0U6CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogRVZFTlQ6IEFXQUtFXG4iKTsKKwkJaWYgKCFhZGFwdGVyLT5wcHNfdWFwc2RfbW9kZSAmJgorCQkJcHJpdi0+bWVkaWFfY29ubmVjdGVkICYmCisJCQlhZGFwdGVyLT5zbGVlcF9wZXJpb2QucGVyaW9kKSB7CisJCQkJYWRhcHRlci0+cHBzX3VhcHNkX21vZGUgPSB0cnVlOworCQkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LAorCQkJCQkiZXZlbnQ6IFBQUy9VQVBTRCBtb2RlIGFjdGl2YXRlZFxuIik7CisJCX0KKwkJYWRhcHRlci0+dHhfbG9ja19mbGFnID0gZmFsc2U7CisJCWlmIChhZGFwdGVyLT5wcHNfdWFwc2RfbW9kZSAmJiBhZGFwdGVyLT5nZW5fbnVsbF9wa3QpIHsKKwkJCWlmIChtd2lmaWV4X2NoZWNrX2xhc3RfcGFja2V0X2luZGljYXRpb24ocHJpdikpIHsKKwkJCQlpZiAoIWFkYXB0ZXItPmRhdGFfc2VudCkgeworCQkJCQlpZiAoIW13aWZpZXhfc2VuZF9udWxsX3BhY2tldChwcml2LAorCQkJCQlNV0lGSUVYX1R4UERfUE9XRVJfTUdNVF9OVUxMX1BBQ0tFVAorCQkJCQl8CisJCQkJCU1XSUZJRVhfVHhQRF9QT1dFUl9NR01UX0xBU1RfUEFDS0VUKSkKKwkJCQkJCWFkYXB0ZXItPnBzX3N0YXRlID0KKwkJCQkJCQlQU19TVEFURV9TTEVFUDsKKwkJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJfQorCQl9CisJCWFkYXB0ZXItPnBzX3N0YXRlID0gUFNfU1RBVEVfQVdBS0U7CisJCWFkYXB0ZXItPnBtX3dha2V1cF9jYXJkX3JlcSA9IGZhbHNlOworCQlhZGFwdGVyLT5wbV93YWtldXBfZndfdHJ5ID0gZmFsc2U7CisKKwkJYnJlYWs7CisKKwljYXNlIEVWRU5UX0RFRVBfU0xFRVBfQVdBS0U6CisJCWFkYXB0ZXItPmlmX29wcy53YWtldXBfY29tcGxldGUoYWRhcHRlcik7CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiZXZlbnQ6IERTX0FXQUtFXG4iKTsKKwkJaWYgKGFkYXB0ZXItPmlzX2RlZXBfc2xlZXApCisJCQlhZGFwdGVyLT5pc19kZWVwX3NsZWVwID0gZmFsc2U7CisJCWJyZWFrOworCisJY2FzZSBFVkVOVF9IU19BQ1RfUkVROgorCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImV2ZW50OiBIU19BQ1RfUkVRXG4iKTsKKwkJcmV0ID0gbXdpZmlleF9zZW5kX2NtZF9hc3luYyhwcml2LAorCQkJCQkgICAgIEhvc3RDbWRfQ01EXzgwMl8xMV9IU19DRkdfRU5ILAorCQkJCQkgICAgIDAsIDAsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgRVZFTlRfTUlDX0VSUl9VTklDQVNUOgorCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImV2ZW50OiBVTklDQVNUIE1JQyBFUlJPUlxuIik7CisJCWJyZWFrOworCisJY2FzZSBFVkVOVF9NSUNfRVJSX01VTFRJQ0FTVDoKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJldmVudDogTVVMVElDQVNUIE1JQyBFUlJPUlxuIik7CisJCWJyZWFrOworCWNhc2UgRVZFTlRfTUlCX0NIQU5HRUQ6CisJY2FzZSBFVkVOVF9JTklUX0RPTkU6CisJCWJyZWFrOworCisJY2FzZSBFVkVOVF9BREhPQ19CQ05fTE9TVDoKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJldmVudDogQURIT0NfQkNOX0xPU1RcbiIpOworCQlwcml2LT5hZGhvY19pc19saW5rX3NlbnNlZCA9IGZhbHNlOworCQltd2lmaWV4X2NsZWFuX3R4cngocHJpdik7CisJCWlmICghbmV0aWZfcXVldWVfc3RvcHBlZChwcml2LT5uZXRkZXYpKQorCQkJbmV0aWZfc3RvcF9xdWV1ZShwcml2LT5uZXRkZXYpOworCQlpZiAobmV0aWZfY2Fycmllcl9vayhwcml2LT5uZXRkZXYpKQorCQkJbmV0aWZfY2Fycmllcl9vZmYocHJpdi0+bmV0ZGV2KTsKKwkJYnJlYWs7CisKKwljYXNlIEVWRU5UX0JHX1NDQU5fUkVQT1JUOgorCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImV2ZW50OiBCR1NfUkVQT1JUXG4iKTsKKwkJLyogQ2xlYXIgdGhlIHByZXZpb3VzIHNjYW4gcmVzdWx0ICovCisJCW1lbXNldChhZGFwdGVyLT5zY2FuX3RhYmxlLCAweDAwLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IpICogSVdfTUFYX0FQKTsKKwkJYWRhcHRlci0+bnVtX2luX3NjYW5fdGFibGUgPSAwOworCQlhZGFwdGVyLT5iY25fYnVmX2VuZCA9IGFkYXB0ZXItPmJjbl9idWY7CisJCXJldCA9IG13aWZpZXhfc2VuZF9jbWRfYXN5bmMocHJpdiwKKwkJCQkJICAgICBIb3N0Q21kX0NNRF84MDJfMTFfQkdfU0NBTl9RVUVSWSwKKwkJCQkJICAgICBIb3N0Q21kX0FDVF9HRU5fR0VULCAwLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIEVWRU5UX1BPUlRfUkVMRUFTRToKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJldmVudDogUE9SVCBSRUxFQVNFXG4iKTsKKwkJYnJlYWs7CisKKwljYXNlIEVWRU5UX1dNTV9TVEFUVVNfQ0hBTkdFOgorCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImV2ZW50OiBXTU0gc3RhdHVzIGNoYW5nZWRcbiIpOworCQlyZXQgPSBtd2lmaWV4X3NlbmRfY21kX2FzeW5jKHByaXYsIEhvc3RDbWRfQ01EX1dNTV9HRVRfU1RBVFVTLAorCQkJCQkgICAgIDAsIDAsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgRVZFTlRfUlNTSV9MT1c6CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiZXZlbnQ6IEJlYWNvbiBSU1NJX0xPV1xuIik7CisJCWJyZWFrOworCWNhc2UgRVZFTlRfU05SX0xPVzoKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJldmVudDogQmVhY29uIFNOUl9MT1dcbiIpOworCQlicmVhazsKKwljYXNlIEVWRU5UX01BWF9GQUlMOgorCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImV2ZW50OiBNQVhfRkFJTFxuIik7CisJCWJyZWFrOworCWNhc2UgRVZFTlRfUlNTSV9ISUdIOgorCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImV2ZW50OiBCZWFjb24gUlNTSV9ISUdIXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBFVkVOVF9TTlJfSElHSDoKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJldmVudDogQmVhY29uIFNOUl9ISUdIXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBFVkVOVF9EQVRBX1JTU0lfTE9XOgorCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImV2ZW50OiBEYXRhIFJTU0lfTE9XXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBFVkVOVF9EQVRBX1NOUl9MT1c6CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiZXZlbnQ6IERhdGEgU05SX0xPV1xuIik7CisJCWJyZWFrOworCWNhc2UgRVZFTlRfREFUQV9SU1NJX0hJR0g6CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiZXZlbnQ6IERhdGEgUlNTSV9ISUdIXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBFVkVOVF9EQVRBX1NOUl9ISUdIOgorCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImV2ZW50OiBEYXRhIFNOUl9ISUdIXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBFVkVOVF9MSU5LX1FVQUxJVFk6CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiZXZlbnQ6IExpbmsgUXVhbGl0eVxuIik7CisJCWJyZWFrOworCWNhc2UgRVZFTlRfUFJFX0JFQUNPTl9MT1NUOgorCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImV2ZW50OiBQcmUtQmVhY29uIExvc3RcbiIpOworCQlicmVhazsKKwljYXNlIEVWRU5UX0lCU1NfQ09BTEVTQ0VEOgorCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImV2ZW50OiBJQlNTX0NPQUxFU0NFRFxuIik7CisJCXJldCA9IG13aWZpZXhfc2VuZF9jbWRfYXN5bmMocHJpdiwKKwkJCQlIb3N0Q21kX0NNRF84MDJfMTFfSUJTU19DT0FMRVNDSU5HX1NUQVRVUywKKwkJCQlIb3N0Q21kX0FDVF9HRU5fR0VULCAwLCBOVUxMKTsKKwkJYnJlYWs7CisJY2FzZSBFVkVOVF9BRERCQToKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJldmVudDogQUREQkEgUmVxdWVzdFxuIik7CisJCW13aWZpZXhfc2VuZF9jbWRfYXN5bmMocHJpdiwgSG9zdENtZF9DTURfMTFOX0FEREJBX1JTUCwKKwkJCQkgICAgICAgSG9zdENtZF9BQ1RfR0VOX1NFVCwgMCwKKwkJCQkgICAgICAgYWRhcHRlci0+ZXZlbnRfYm9keSk7CisJCWJyZWFrOworCWNhc2UgRVZFTlRfREVMQkE6CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiZXZlbnQ6IERFTEJBIFJlcXVlc3RcbiIpOworCQltd2lmaWV4XzExbl9kZWxldGVfYmFfc3RyZWFtKHByaXYsIGFkYXB0ZXItPmV2ZW50X2JvZHkpOworCQlicmVhazsKKwljYXNlIEVWRU5UX0JBX1NUUkVBTV9USUVNT1VUOgorCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImV2ZW50OiAgQkEgU3RyZWFtIHRpbWVvdXRcbiIpOworCQltd2lmaWV4XzExbl9iYV9zdHJlYW1fdGltZW91dChwcml2LAorCQkJCQkgICAgICAoc3RydWN0IGhvc3RfY21kX2RzXzExbl9iYXRpbWVvdXQKKwkJCQkJICAgICAgICopCisJCQkJCSAgICAgIGFkYXB0ZXItPmV2ZW50X2JvZHkpOworCQlicmVhazsKKwljYXNlIEVWRU5UX0FNU0RVX0FHR1JfQ1RSTDoKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJldmVudDogIEFNU0RVX0FHR1JfQ1RSTCAlZFxuIiwKKwkJICAgICAgICoodTE2ICopIGFkYXB0ZXItPmV2ZW50X2JvZHkpOworCQlhZGFwdGVyLT50eF9idWZfc2l6ZSA9CisJCQltaW4oYWRhcHRlci0+Y3Vycl90eF9idWZfc2l6ZSwKKwkJCSAgICBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKSBhZGFwdGVyLT5ldmVudF9ib2R5KSk7CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiZXZlbnQ6IHR4X2J1Zl9zaXplICVkXG4iLAorCQkJCWFkYXB0ZXItPnR4X2J1Zl9zaXplKTsKKwkJYnJlYWs7CisKKwljYXNlIEVWRU5UX1dFUF9JQ1ZfRVJSOgorCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImV2ZW50OiBXRVAgSUNWIGVycm9yXG4iKTsKKwkJYnJlYWs7CisKKwljYXNlIEVWRU5UX0JXX0NIQU5HRToKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJldmVudDogQlcgQ2hhbmdlXG4iKTsKKwkJYnJlYWs7CisKKwljYXNlIEVWRU5UX0hPU1RXQUtFX1NUQUlFOgorCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImV2ZW50OiBIT1NUV0FLRV9TVEFJRSAlZFxuIiwgZXZlbnRjYXVzZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiZXZlbnQ6IHVua25vd24gZXZlbnQgaWQ6ICUjeFxuIiwKKwkJCQkJCWV2ZW50Y2F1c2UpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9zdGFfaW9jdGwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvc3RhX2lvY3RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA1OTA3ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvc3RhX2lvY3RsLmMKQEAgLTAsMCArMSwxNTkzIEBACisvKgorICogTWFydmVsbCBXaXJlbGVzcyBMQU4gZGV2aWNlIGRyaXZlcjogZnVuY3Rpb25zIGZvciBzdGF0aW9uIGlvY3RsCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRlcm5hdGlvbmFsCisgKiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKyAqICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgdXNlLCByZWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgaW4KKyAqIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UsIGEgY29weSBvZiB3aGljaAorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0Egb3Igb24gdGhlCisgKiB3b3JsZHdpZGUgd2ViIGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQuCisgKgorICogVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4gIFRoZSBMaWNlbnNlIHByb3ZpZGVzIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dAorICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLgorICovCisKKyNpbmNsdWRlICJkZWNsLmgiCisjaW5jbHVkZSAiaW9jdGwuaCIKKyNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAiZncuaCIKKyNpbmNsdWRlICJtYWluLmgiCisjaW5jbHVkZSAid21tLmgiCisjaW5jbHVkZSAiMTFuLmgiCisjaW5jbHVkZSAiY2ZnODAyMTEuaCIKKworLyoKKyAqIENvcGllcyB0aGUgbXVsdGljYXN0IGFkZHJlc3MgbGlzdCBmcm9tIGRldmljZSB0byBkcml2ZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB2YWxpZGF0ZSB0aGUgZGVzdGluYXRpb24gbWVtb3J5IGZvcgorICogc2l6ZSwgYW5kIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIG11c3QgZW5zdXJlIGVub3VnaCBtZW1vcnkgaXMKKyAqIGF2YWlsYWJsZS4KKyAqLworaW50IG13aWZpZXhfY29weV9tY2FzdF9hZGRyKHN0cnVjdCBtd2lmaWV4X211bHRpY2FzdF9saXN0ICptbGlzdCwKKwkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWludCBpID0gMDsKKwlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOworCisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIGRldikKKwkJbWVtY3B5KCZtbGlzdC0+bWFjX2xpc3RbaSsrXSwgaGEtPmFkZHIsIEVUSF9BTEVOKTsKKworCXJldHVybiBpOworfQorCisvKgorICogV2FpdCBxdWV1ZSBjb21wbGV0aW9uIGhhbmRsZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiB3YWl0cyBvbiBhIGNtZCB3YWl0IHF1ZXVlLiBJdCBhbHNvIGNhbmNlbHMgdGhlIHBlbmRpbmcKKyAqIHJlcXVlc3QgYWZ0ZXIgd2FraW5nIHVwLCBpbiBjYXNlIG9mIGVycm9ycy4KKyAqLworaW50IG13aWZpZXhfd2FpdF9xdWV1ZV9jb21wbGV0ZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCWJvb2wgY2FuY2VsX2ZsYWcgPSBmYWxzZTsKKwlpbnQgc3RhdHVzID0gYWRhcHRlci0+Y21kX3dhaXRfcS5zdGF0dXM7CisKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImNtZCBwZW5kaW5nXG4iKTsKKwlhdG9taWNfaW5jKCZhZGFwdGVyLT5jbWRfcGVuZGluZyk7CisKKwkvKiBTdGF0dXMgcGVuZGluZywgd2FrZSB1cCBtYWluIHByb2Nlc3MgKi8KKwlxdWV1ZV93b3JrKGFkYXB0ZXItPndvcmtxdWV1ZSwgJmFkYXB0ZXItPm1haW5fd29yayk7CisKKwkvKiBXYWl0IGZvciBjb21wbGV0aW9uICovCisJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGFkYXB0ZXItPmNtZF93YWl0X3Eud2FpdCwKKwkJCQkJYWRhcHRlci0+Y21kX3dhaXRfcS5jb25kaXRpb24pOworCWlmICghYWRhcHRlci0+Y21kX3dhaXRfcS5jb25kaXRpb24pCisJCWNhbmNlbF9mbGFnID0gdHJ1ZTsKKworCWlmIChjYW5jZWxfZmxhZykgeworCQltd2lmaWV4X2NhbmNlbF9wZW5kaW5nX2lvY3RsKGFkYXB0ZXIpOworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImNtZCBjYW5jZWxcbiIpOworCX0KKwlhZGFwdGVyLT5jbWRfd2FpdF9xLnN0YXR1cyA9IDA7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyB0aGUgY29ycmVjdCBmaXJtd2FyZSBjb21tYW5kIGFuZAorICogaXNzdWVzIGl0IHRvIHNldCB0aGUgbXVsdGljYXN0IGxpc3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBlbmFibGUgcHJvbWlzY3VvdXMgbW9kZSwgb3IgZW5hYmxlIGFsbAorICogbXVsdGljYXN0IHBhY2tldHMsIG9yIHRvIGVuYWJsZSBzZWxlY3RpdmUgbXVsdGljYXN0LgorICovCitpbnQgbXdpZmlleF9yZXF1ZXN0X3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCXN0cnVjdCBtd2lmaWV4X211bHRpY2FzdF9saXN0ICptY2FzdF9saXN0KQoreworCWludCByZXQgPSAwOworCXUxNiBvbGRfcGt0X2ZpbHRlcjsKKworCW9sZF9wa3RfZmlsdGVyID0gcHJpdi0+Y3Vycl9wa3RfZmlsdGVyOworCisJaWYgKG1jYXN0X2xpc3QtPm1vZGUgPT0gTVdJRklFWF9QUk9NSVNDX01PREUpIHsKKwkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiBFbmFibGUgUHJvbWlzY3VvdXMgbW9kZVxuIik7CisJCXByaXYtPmN1cnJfcGt0X2ZpbHRlciB8PSBIb3N0Q21kX0FDVF9NQUNfUFJPTUlTQ1VPVVNfRU5BQkxFOworCQlwcml2LT5jdXJyX3BrdF9maWx0ZXIgJj0KKwkJCX5Ib3N0Q21kX0FDVF9NQUNfQUxMX01VTFRJQ0FTVF9FTkFCTEU7CisJfSBlbHNlIHsKKwkJLyogTXVsdGljYXN0ICovCisJCXByaXYtPmN1cnJfcGt0X2ZpbHRlciAmPSB+SG9zdENtZF9BQ1RfTUFDX1BST01JU0NVT1VTX0VOQUJMRTsKKwkJaWYgKG1jYXN0X2xpc3QtPm1vZGUgPT0gTVdJRklFWF9NVUxUSUNBU1RfTU9ERSkgeworCQkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkJImluZm86IEVuYWJsaW5nIEFsbCBNdWx0aWNhc3QhXG4iKTsKKwkJCXByaXYtPmN1cnJfcGt0X2ZpbHRlciB8PQorCQkJCUhvc3RDbWRfQUNUX01BQ19BTExfTVVMVElDQVNUX0VOQUJMRTsKKwkJfSBlbHNlIHsKKwkJCXByaXYtPmN1cnJfcGt0X2ZpbHRlciAmPQorCQkJCX5Ib3N0Q21kX0FDVF9NQUNfQUxMX01VTFRJQ0FTVF9FTkFCTEU7CisJCQlpZiAobWNhc3RfbGlzdC0+bnVtX211bHRpY2FzdF9hZGRyKSB7CisJCQkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkJCSJpbmZvOiBTZXQgbXVsdGljYXN0IGxpc3Q9JWRcbiIsCisJCQkJICAgICAgIG1jYXN0X2xpc3QtPm51bV9tdWx0aWNhc3RfYWRkcik7CisJCQkJLyogU2V0IG11bHRpY2FzdCBhZGRyZXNzZXMgdG8gZmlybXdhcmUgKi8KKwkJCQlpZiAob2xkX3BrdF9maWx0ZXIgPT0gcHJpdi0+Y3Vycl9wa3RfZmlsdGVyKSB7CisJCQkJCS8qIFNlbmQgcmVxdWVzdCB0byBmaXJtd2FyZSAqLworCQkJCQlyZXQgPSBtd2lmaWV4X3NlbmRfY21kX2FzeW5jKHByaXYsCisJCQkJCQlIb3N0Q21kX0NNRF9NQUNfTVVMVElDQVNUX0FEUiwKKwkJCQkJCUhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsCisJCQkJCQltY2FzdF9saXN0KTsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBTZW5kIHJlcXVlc3QgdG8gZmlybXdhcmUgKi8KKwkJCQkJcmV0ID0gbXdpZmlleF9zZW5kX2NtZF9hc3luYyhwcml2LAorCQkJCQkJSG9zdENtZF9DTURfTUFDX01VTFRJQ0FTVF9BRFIsCisJCQkJCQlIb3N0Q21kX0FDVF9HRU5fU0VULCAwLAorCQkJCQkJbWNhc3RfbGlzdCk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkiaW5mbzogb2xkX3BrdF9maWx0ZXI9JSN4LCBjdXJyX3BrdF9maWx0ZXI9JSN4XG4iLAorCSAgICAgICBvbGRfcGt0X2ZpbHRlciwgcHJpdi0+Y3Vycl9wa3RfZmlsdGVyKTsKKwlpZiAob2xkX3BrdF9maWx0ZXIgIT0gcHJpdi0+Y3Vycl9wa3RfZmlsdGVyKSB7CisJCXJldCA9IG13aWZpZXhfc2VuZF9jbWRfYXN5bmMocHJpdiwgSG9zdENtZF9DTURfTUFDX0NPTlRST0wsCisJCQkJCSAgICAgSG9zdENtZF9BQ1RfR0VOX1NFVCwKKwkJCQkJICAgICAwLCAmcHJpdi0+Y3Vycl9wa3RfZmlsdGVyKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogSW4gQWQtSG9jIG1vZGUsIHRoZSBJQlNTIGlzIGNyZWF0ZWQgaWYgbm90IGZvdW5kIGluIHNjYW4gbGlzdC4KKyAqIEluIGJvdGggQWQtSG9jIGFuZCBpbmZyYSBtb2RlLCBhbiBkZWF1dGhlbnRpY2F0aW9uIGlzIHBlcmZvcm1lZAorICogZmlyc3QuCisgKi8KK2ludCBtd2lmaWV4X2Jzc19zdGFydChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkgICAgICBzdHJ1Y3QgbXdpZmlleF9zc2lkX2Jzc2lkICpzc2lkX2Jzc2lkKQoreworCWludCByZXQ7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJczMyIGkgPSAtMTsKKworCXByaXYtPnNjYW5fYmxvY2sgPSBmYWxzZTsKKwlpZiAoIXNzaWRfYnNzaWQpCisJCXJldHVybiAtMTsKKworCWlmIChwcml2LT5ic3NfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCS8qIEluZnJhIG1vZGUgKi8KKwkJcmV0ID0gbXdpZmlleF9kZWF1dGhlbnRpY2F0ZShwcml2LCBOVUxMKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJLyogU2VhcmNoIGZvciB0aGUgcmVxdWVzdGVkIFNTSUQgaW4gdGhlIHNjYW4gdGFibGUgKi8KKwkJaWYgKHNzaWRfYnNzaWQtPnNzaWQuc3NpZF9sZW4pCisJCQlpID0gbXdpZmlleF9maW5kX3NzaWRfaW5fbGlzdChwcml2LCAmc3NpZF9ic3NpZC0+c3NpZCwKKwkJCQkJCU5VTEwsIE5MODAyMTFfSUZUWVBFX1NUQVRJT04pOworCQllbHNlCisJCQlpID0gbXdpZmlleF9maW5kX2Jzc2lkX2luX2xpc3QocHJpdiwKKwkJCQkJCSh1OCAqKSAmc3NpZF9ic3NpZC0+YnNzaWQsCisJCQkJCQlOTDgwMjExX0lGVFlQRV9TVEFUSU9OKTsKKwkJaWYgKGkgPCAwKQorCQkJcmV0dXJuIC0xOworCisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LAorCQkJImluZm86IFNTSUQgZm91bmQgaW4gc2NhbiBsaXN0IC4uLiBhc3NvY2lhdGluZy4uLlxuIik7CisKKwkJLyogQ2xlYXIgYW55IHBhc3QgYXNzb2NpYXRpb24gcmVzcG9uc2Ugc3RvcmVkIGZvcgorCQkgKiBhcHBsaWNhdGlvbiByZXRyaWV2YWwgKi8KKwkJcHJpdi0+YXNzb2NfcnNwX3NpemUgPSAwOworCQlyZXQgPSBtd2lmaWV4X2Fzc29jaWF0ZShwcml2LCAmYWRhcHRlci0+c2Nhbl90YWJsZVtpXSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0gZWxzZSB7CisJCS8qIEFkaG9jIG1vZGUgKi8KKwkJLyogSWYgdGhlIHJlcXVlc3RlZCBTU0lEIG1hdGNoZXMgY3VycmVudCBTU0lELCByZXR1cm4gKi8KKwkJaWYgKHNzaWRfYnNzaWQtPnNzaWQuc3NpZF9sZW4gJiYKKwkJICAgICghbXdpZmlleF9zc2lkX2NtcAorCQkgICAgICgmcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLnNzaWQsCisJCSAgICAgICZzc2lkX2Jzc2lkLT5zc2lkKSkpCisJCQlyZXR1cm4gMDsKKworCQkvKiBFeGl0IEFkaG9jIG1vZGUgZmlyc3QgKi8KKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBTZW5kaW5nIEFkaG9jIFN0b3BcbiIpOworCQlyZXQgPSBtd2lmaWV4X2RlYXV0aGVudGljYXRlKHByaXYsIE5VTEwpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlwcml2LT5hZGhvY19pc19saW5rX3NlbnNlZCA9IGZhbHNlOworCisJCS8qIFNlYXJjaCBmb3IgdGhlIHJlcXVlc3RlZCBuZXR3b3JrIGluIHRoZSBzY2FuIHRhYmxlICovCisJCWlmIChzc2lkX2Jzc2lkLT5zc2lkLnNzaWRfbGVuKQorCQkJaSA9IG13aWZpZXhfZmluZF9zc2lkX2luX2xpc3QocHJpdiwKKwkJCQkJCSAgICAgICZzc2lkX2Jzc2lkLT5zc2lkLCBOVUxMLAorCQkJCQkJICAgICAgTkw4MDIxMV9JRlRZUEVfQURIT0MpOworCQllbHNlCisJCQlpID0gbXdpZmlleF9maW5kX2Jzc2lkX2luX2xpc3QocHJpdiwKKwkJCQkJCSAgICAgICAodTggKikmc3NpZF9ic3NpZC0+YnNzaWQsCisJCQkJCQkgICAgICAgTkw4MDIxMV9JRlRZUEVfQURIT0MpOworCisJCWlmIChpID49IDApIHsKKwkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogbmV0d29yayBmb3VuZCBpbiBzY2FuIgorCQkJCQkJCSIgbGlzdC4gSm9pbmluZy4uLlxuIik7CisJCQlyZXQgPSBtd2lmaWV4X2FkaG9jX2pvaW4ocHJpdiwgJmFkYXB0ZXItPnNjYW5fdGFibGVbaV0pOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQl9IGVsc2UgeworCQkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBOZXR3b3JrIG5vdCBmb3VuZCBpbiAiCisJCQkJInRoZSBsaXN0LCBjcmVhdGluZyBhZGhvYyB3aXRoIHNzaWQgPSAlc1xuIiwKKwkJCSAgICAgICBzc2lkX2Jzc2lkLT5zc2lkLnNzaWQpOworCQkJcmV0ID0gbXdpZmlleF9hZGhvY19zdGFydChwcml2LCAmc3NpZF9ic3NpZC0+c3NpZCk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogSU9DVEwgcmVxdWVzdCBoYW5kbGVyIHRvIHNldCBob3N0IHNsZWVwIGNvbmZpZ3VyYXRpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyB0aGUgY29ycmVjdCBmaXJtd2FyZSBjb21tYW5kIGFuZAorICogaXNzdWVzIGl0LgorICovCitpbnQgbXdpZmlleF9zZXRfaHNfcGFyYW1zKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHUxNiBhY3Rpb24sCisJCQkgIGludCBjbWRfdHlwZSwgc3RydWN0IG13aWZpZXhfZHNfaHNfY2ZnICpoc19jZmcpCisKK3sKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwlpbnQgc3RhdHVzID0gMDsKKwl1MzIgcHJldl9jb25kID0gMDsKKworCWlmICghaHNfY2ZnKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBIb3N0Q21kX0FDVF9HRU5fU0VUOgorCQlpZiAoYWRhcHRlci0+cHBzX3VhcHNkX21vZGUpIHsKKwkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogSG9zdCBTbGVlcCBJT0NUTCIKKwkJCQkiIGlzIGJsb2NrZWQgaW4gVUFQU0QvUFBTIG1vZGVcbiIpOworCQkJc3RhdHVzID0gLTE7CisJCQlicmVhazsKKwkJfQorCQlpZiAoaHNfY2ZnLT5pc19pbnZva2VfaG9zdGNtZCkgeworCQkJaWYgKGhzX2NmZy0+Y29uZGl0aW9ucyA9PSBIT1NUX1NMRUVQX0NGR19DQU5DRUwpIHsKKwkJCQlpZiAoIWFkYXB0ZXItPmlzX2hzX2NvbmZpZ3VyZWQpCisJCQkJCS8qIEFscmVhZHkgY2FuY2VsbGVkICovCisJCQkJCWJyZWFrOworCQkJCS8qIFNhdmUgcHJldmlvdXMgY29uZGl0aW9uICovCisJCQkJcHJldl9jb25kID0gbGUzMl90b19jcHUoYWRhcHRlci0+aHNfY2ZnCisJCQkJCQkJLmNvbmRpdGlvbnMpOworCQkJCWFkYXB0ZXItPmhzX2NmZy5jb25kaXRpb25zID0KKwkJCQkJCWNwdV90b19sZTMyKGhzX2NmZy0+Y29uZGl0aW9ucyk7CisJCQl9IGVsc2UgaWYgKGhzX2NmZy0+Y29uZGl0aW9ucykgeworCQkJCWFkYXB0ZXItPmhzX2NmZy5jb25kaXRpb25zID0KKwkJCQkJCWNwdV90b19sZTMyKGhzX2NmZy0+Y29uZGl0aW9ucyk7CisJCQkJYWRhcHRlci0+aHNfY2ZnLmdwaW8gPSAodTgpaHNfY2ZnLT5ncGlvOworCQkJCWlmIChoc19jZmctPmdhcCkKKwkJCQkJYWRhcHRlci0+aHNfY2ZnLmdhcCA9ICh1OCloc19jZmctPmdhcDsKKwkJCX0gZWxzZSBpZiAoYWRhcHRlci0+aHNfY2ZnLmNvbmRpdGlvbnMgPT0KKwkJCQkJCWNwdV90b19sZTMyKAorCQkJCQkJSE9TVF9TTEVFUF9DRkdfQ0FOQ0VMKSkgeworCQkJCS8qIFJldHVybiBmYWlsdXJlIGlmIG5vIHBhcmFtZXRlcnMgZm9yIEhTCisJCQkJICAgZW5hYmxlICovCisJCQkJc3RhdHVzID0gLTE7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoY21kX3R5cGUgPT0gTVdJRklFWF9TWU5DX0NNRCkKKwkJCQlzdGF0dXMgPSBtd2lmaWV4X3NlbmRfY21kX3N5bmMocHJpdiwKKwkJCQkJCUhvc3RDbWRfQ01EXzgwMl8xMV9IU19DRkdfRU5ILAorCQkJCQkJSG9zdENtZF9BQ1RfR0VOX1NFVCwgMCwKKwkJCQkJCSZhZGFwdGVyLT5oc19jZmcpOworCQkJZWxzZQorCQkJCXN0YXR1cyA9IG13aWZpZXhfc2VuZF9jbWRfYXN5bmMocHJpdiwKKwkJCQkJCUhvc3RDbWRfQ01EXzgwMl8xMV9IU19DRkdfRU5ILAorCQkJCQkJSG9zdENtZF9BQ1RfR0VOX1NFVCwgMCwKKwkJCQkJCSZhZGFwdGVyLT5oc19jZmcpOworCQkJaWYgKGhzX2NmZy0+Y29uZGl0aW9ucyA9PSBIT1NUX1NMRUVQX0NGR19DQU5DRUwpCisJCQkJLyogUmVzdG9yZSBwcmV2aW91cyBjb25kaXRpb24gKi8KKwkJCQlhZGFwdGVyLT5oc19jZmcuY29uZGl0aW9ucyA9CisJCQkJCQljcHVfdG9fbGUzMihwcmV2X2NvbmQpOworCQl9IGVsc2UgeworCQkJYWRhcHRlci0+aHNfY2ZnLmNvbmRpdGlvbnMgPQorCQkJCWNwdV90b19sZTMyKGhzX2NmZy0+Y29uZGl0aW9ucyk7CisJCQlhZGFwdGVyLT5oc19jZmcuZ3BpbyA9ICh1OCloc19jZmctPmdwaW87CisJCQlhZGFwdGVyLT5oc19jZmcuZ2FwID0gKHU4KWhzX2NmZy0+Z2FwOworCQl9CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9BQ1RfR0VOX0dFVDoKKwkJaHNfY2ZnLT5jb25kaXRpb25zID0gbGUzMl90b19jcHUoYWRhcHRlci0+aHNfY2ZnLmNvbmRpdGlvbnMpOworCQloc19jZmctPmdwaW8gPSBhZGFwdGVyLT5oc19jZmcuZ3BpbzsKKwkJaHNfY2ZnLT5nYXAgPSBhZGFwdGVyLT5oc19jZmcuZ2FwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzdGF0dXMgPSAtMTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIFNlbmRzIElPQ1RMIHJlcXVlc3QgdG8gY2FuY2VsIHRoZSBleGlzdGluZyBIb3N0IFNsZWVwIGNvbmZpZ3VyYXRpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgdGhlIElPQ1RMIHJlcXVlc3QgYnVmZmVyLCBmaWxscyBpdAorICogd2l0aCByZXF1aXNpdGUgcGFyYW1ldGVycyBhbmQgY2FsbHMgdGhlIElPQ1RMIGhhbmRsZXIuCisgKi8KK2ludCBtd2lmaWV4X2NhbmNlbF9ocyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBpbnQgY21kX3R5cGUpCit7CisJc3RydWN0IG13aWZpZXhfZHNfaHNfY2ZnIGhzY2ZnOworCisJaHNjZmcuY29uZGl0aW9ucyA9IEhPU1RfU0xFRVBfQ0ZHX0NBTkNFTDsKKwloc2NmZy5pc19pbnZva2VfaG9zdGNtZCA9IHRydWU7CisKKwlyZXR1cm4gbXdpZmlleF9zZXRfaHNfcGFyYW1zKHByaXYsIEhvc3RDbWRfQUNUX0dFTl9TRVQsCisJCQkJICAgIGNtZF90eXBlLCAmaHNjZmcpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobXdpZmlleF9jYW5jZWxfaHMpOworCisvKgorICogU2VuZHMgSU9DVEwgcmVxdWVzdCB0byBjYW5jZWwgdGhlIGV4aXN0aW5nIEhvc3QgU2xlZXAgY29uZmlndXJhdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyB0aGUgSU9DVEwgcmVxdWVzdCBidWZmZXIsIGZpbGxzIGl0CisgKiB3aXRoIHJlcXVpc2l0ZSBwYXJhbWV0ZXJzIGFuZCBjYWxscyB0aGUgSU9DVEwgaGFuZGxlci4KKyAqLworaW50IG13aWZpZXhfZW5hYmxlX2hzKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IG13aWZpZXhfZHNfaHNfY2ZnIGhzY2ZnOworCisJaWYgKGFkYXB0ZXItPmhzX2FjdGl2YXRlZCkgeworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImNtZDogSFMgQWxyZWFkeSBhY3RpdmVkXG4iKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJYWRhcHRlci0+aHNfYWN0aXZhdGVfd2FpdF9xX3dva2VuID0gZmFsc2U7CisKKwltZW1zZXQoJmhzY2ZnLCAwLCBzaXplb2Yoc3RydWN0IG13aWZpZXhfaHNfY29uZmlnX3BhcmFtKSk7CisJaHNjZmcuaXNfaW52b2tlX2hvc3RjbWQgPSB0cnVlOworCisJaWYgKG13aWZpZXhfc2V0X2hzX3BhcmFtcyhtd2lmaWV4X2dldF9wcml2KGFkYXB0ZXIsCisJCQkJCQkgICAgICAgTVdJRklFWF9CU1NfUk9MRV9TVEEpLAorCQkJCSAgSG9zdENtZF9BQ1RfR0VOX1NFVCwgTVdJRklFWF9TWU5DX0NNRCwKKwkJCQkgICZoc2NmZykpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJJT0NUTCByZXF1ZXN0IEhTIGVuYWJsZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGFkYXB0ZXItPmhzX2FjdGl2YXRlX3dhaXRfcSwKKwkJCWFkYXB0ZXItPmhzX2FjdGl2YXRlX3dhaXRfcV93b2tlbik7CisKKwlyZXR1cm4gdHJ1ZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG13aWZpZXhfZW5hYmxlX2hzKTsKKworLyoKKyAqIElPQ1RMIHJlcXVlc3QgaGFuZGxlciB0byBnZXQgQlNTIGluZm9ybWF0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29sbGF0ZXMgdGhlIGluZm9ybWF0aW9uIGZyb20gZGlmZmVyZW50IGRyaXZlciBzdHJ1Y3R1cmVzCisgKiB0byBzZW5kIHRvIHRoZSB1c2VyLgorICovCitpbnQgbXdpZmlleF9nZXRfYnNzX2luZm8oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSBzdHJ1Y3QgbXdpZmlleF9ic3NfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwlzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYzsKKwlzMzIgdGJsX2lkeDsKKworCWlmICghaW5mbykKKwkJcmV0dXJuIC0xOworCisJYnNzX2Rlc2MgPSAmcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yOworCisJaW5mby0+YnNzX21vZGUgPSBwcml2LT5ic3NfbW9kZTsKKworCW1lbWNweSgmaW5mby0+c3NpZCwgJmJzc19kZXNjLT5zc2lkLAorCSAgICAgICBzaXplb2Yoc3RydWN0IG13aWZpZXhfODAyXzExX3NzaWQpKTsKKworCW1lbWNweSgmaW5mby0+YnNzaWQsICZic3NfZGVzYy0+bWFjX2FkZHJlc3MsIEVUSF9BTEVOKTsKKworCWluZm8tPmJzc19jaGFuID0gYnNzX2Rlc2MtPmNoYW5uZWw7CisKKwlpbmZvLT5yZWdpb25fY29kZSA9IGFkYXB0ZXItPnJlZ2lvbl9jb2RlOworCisJLyogU2NhbiB0YWJsZSBpbmRleCBpZiBjb25uZWN0ZWQgKi8KKwlpbmZvLT5zY2FuX3RhYmxlX2lkeCA9IDA7CisJaWYgKHByaXYtPm1lZGlhX2Nvbm5lY3RlZCkgeworCQl0YmxfaWR4ID0KKwkJCW13aWZpZXhfZmluZF9zc2lkX2luX2xpc3QocHJpdiwgJmJzc19kZXNjLT5zc2lkLAorCQkJCQkJICBic3NfZGVzYy0+bWFjX2FkZHJlc3MsCisJCQkJCQkgIHByaXYtPmJzc19tb2RlKTsKKwkJaWYgKHRibF9pZHggPj0gMCkKKwkJCWluZm8tPnNjYW5fdGFibGVfaWR4ID0gdGJsX2lkeDsKKwl9CisKKwlpbmZvLT5tZWRpYV9jb25uZWN0ZWQgPSBwcml2LT5tZWRpYV9jb25uZWN0ZWQ7CisKKwlpbmZvLT5tYXhfcG93ZXJfbGV2ZWwgPSBwcml2LT5tYXhfdHhfcG93ZXJfbGV2ZWw7CisJaW5mby0+bWluX3Bvd2VyX2xldmVsID0gcHJpdi0+bWluX3R4X3Bvd2VyX2xldmVsOworCisJaW5mby0+YWRob2Nfc3RhdGUgPSBwcml2LT5hZGhvY19zdGF0ZTsKKworCWluZm8tPmJjbl9uZl9sYXN0ID0gcHJpdi0+YmNuX25mX2xhc3Q7CisKKwlpZiAocHJpdi0+c2VjX2luZm8ud2VwX3N0YXR1cyA9PSBNV0lGSUVYXzgwMl8xMV9XRVBfRU5BQkxFRCkKKwkJaW5mby0+d2VwX3N0YXR1cyA9IHRydWU7CisJZWxzZQorCQlpbmZvLT53ZXBfc3RhdHVzID0gZmFsc2U7CisKKwlpbmZvLT5pc19oc19jb25maWd1cmVkID0gYWRhcHRlci0+aXNfaHNfY29uZmlndXJlZDsKKwlpbmZvLT5pc19kZWVwX3NsZWVwID0gYWRhcHRlci0+aXNfZGVlcF9zbGVlcDsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhlIGZ1bmN0aW9uIHNldHMgYmFuZCBjb25maWd1cmF0aW9ucy4KKyAqCisgKiBpdCBwZXJmb3JtcyBleHRyYSBjaGVja3MgdG8gbWFrZSBzdXJlIHRoZSBBZC1Ib2MKKyAqIGJhbmQgYW5kIGNoYW5uZWwgYXJlIGNvbXBhdGlibGUuIE90aGVyd2lzZSBpdCByZXR1cm5zIGFuIGVycm9yLgorICoKKyAqLworaW50IG13aWZpZXhfc2V0X3JhZGlvX2JhbmRfY2ZnKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgICAgc3RydWN0IG13aWZpZXhfZHNfYmFuZF9jZmcgKnJhZGlvX2NmZykKK3sKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwl1OCBpbmZyYV9iYW5kLCBhZGhvY19iYW5kOworCXUzMiBhZGhvY19jaGFubmVsOworCisJaW5mcmFfYmFuZCA9ICh1OCkgcmFkaW9fY2ZnLT5jb25maWdfYmFuZHM7CisJYWRob2NfYmFuZCA9ICh1OCkgcmFkaW9fY2ZnLT5hZGhvY19zdGFydF9iYW5kOworCWFkaG9jX2NoYW5uZWwgPSByYWRpb19jZmctPmFkaG9jX2NoYW5uZWw7CisKKwkvKiBTRVQgSW5mcmEgYmFuZCAqLworCWlmICgoaW5mcmFfYmFuZCB8IGFkYXB0ZXItPmZ3X2JhbmRzKSAmIH5hZGFwdGVyLT5md19iYW5kcykKKwkJcmV0dXJuIC0xOworCisJYWRhcHRlci0+Y29uZmlnX2JhbmRzID0gaW5mcmFfYmFuZDsKKworCS8qIFNFVCBBZC1ob2MgQmFuZCAqLworCWlmICgoYWRob2NfYmFuZCB8IGFkYXB0ZXItPmZ3X2JhbmRzKSAmIH5hZGFwdGVyLT5md19iYW5kcykKKwkJcmV0dXJuIC0xOworCisJaWYgKGFkaG9jX2JhbmQpCisJCWFkYXB0ZXItPmFkaG9jX3N0YXJ0X2JhbmQgPSBhZGhvY19iYW5kOworCWFkYXB0ZXItPmNoYW5fb2Zmc2V0ID0gKHU4KSByYWRpb19jZmctPnNlY19jaGFuX29mZnNldDsKKwkvKgorCSAqIElmIG5vIGFkaG9jX2NoYW5uZWwgaXMgc3VwcGxpZWQgdmVyaWZ5IGlmIHRoZSBleGlzdGluZyBhZGhvYworCSAqIGNoYW5uZWwgY29tcGlsZXMgd2l0aCBuZXcgYWRob2NfYmFuZAorCSAqLworCWlmICghYWRob2NfY2hhbm5lbCkgeworCQlpZiAoIW13aWZpZXhfZ2V0X2NmcF9ieV9iYW5kX2FuZF9jaGFubmVsX2Zyb21fY2ZnODAyMTEKKwkJICAgICAocHJpdiwgYWRhcHRlci0+YWRob2Nfc3RhcnRfYmFuZCwKKwkJICAgICBwcml2LT5hZGhvY19jaGFubmVsKSkgeworCQkJLyogUGFzcyBiYWNrIHRoZSBkZWZhdWx0IGNoYW5uZWwgKi8KKwkJCXJhZGlvX2NmZy0+YWRob2NfY2hhbm5lbCA9IERFRkFVTFRfQURfSE9DX0NIQU5ORUw7CisJCQlpZiAoKGFkYXB0ZXItPmFkaG9jX3N0YXJ0X2JhbmQgJiBCQU5EX0EpCisJCQkgICAgfHwgKGFkYXB0ZXItPmFkaG9jX3N0YXJ0X2JhbmQgJiBCQU5EX0FOKSkKKwkJCQlyYWRpb19jZmctPmFkaG9jX2NoYW5uZWwgPQorCQkJCQlERUZBVUxUX0FEX0hPQ19DSEFOTkVMX0E7CisJCX0KKwl9IGVsc2UgewkvKiBSZXRydXJuIGVycm9yIGlmIGFkaG9jX2JhbmQgYW5kCisJCQkgICBhZGhvY19jaGFubmVsIGNvbWJpbmF0aW9uIGlzIGludmFsaWQgKi8KKwkJaWYgKCFtd2lmaWV4X2dldF9jZnBfYnlfYmFuZF9hbmRfY2hhbm5lbF9mcm9tX2NmZzgwMjExCisJCSAgICAocHJpdiwgYWRhcHRlci0+YWRob2Nfc3RhcnRfYmFuZCwgKHUxNikgYWRob2NfY2hhbm5lbCkpCisJCQlyZXR1cm4gLTE7CisJCXByaXYtPmFkaG9jX2NoYW5uZWwgPSAodTgpIGFkaG9jX2NoYW5uZWw7CisJfQorCWlmICgoYWRob2NfYmFuZCAmIEJBTkRfR04pIHx8IChhZGhvY19iYW5kICYgQkFORF9BTikpCisJCWFkYXB0ZXItPmFkaG9jXzExbl9lbmFibGVkID0gdHJ1ZTsKKwllbHNlCisJCWFkYXB0ZXItPmFkaG9jXzExbl9lbmFibGVkID0gZmFsc2U7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIElPQ1RMIHJlcXVlc3QgaGFuZGxlciB0byBzZXQvZ2V0IGFjdGl2ZSBjaGFubmVsLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgdmFsaWRpdHkgY2hlY2tpbmcgb24gY2hhbm5lbC9mcmVxdWVuY3kKKyAqIGNvbXBhdGliaWxpdHkgYW5kIHJldHVybnMgZmFpbHVyZSBpZiBub3QgdmFsaWQuCisgKi8KK2ludCBtd2lmaWV4X2Jzc19zZXRfY2hhbm5lbChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgIHN0cnVjdCBtd2lmaWV4X2NoYW5fZnJlcV9wb3dlciAqY2hhbikKK3sKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwlzdHJ1Y3QgbXdpZmlleF9jaGFuX2ZyZXFfcG93ZXIgKmNmcCA9IE5VTEw7CisKKwlpZiAoIWNoYW4pCisJCXJldHVybiAtMTsKKworCWlmICghY2hhbi0+Y2hhbm5lbCAmJiAhY2hhbi0+ZnJlcSkKKwkJcmV0dXJuIC0xOworCWlmIChhZGFwdGVyLT5hZGhvY19zdGFydF9iYW5kICYgQkFORF9BTikKKwkJYWRhcHRlci0+YWRob2Nfc3RhcnRfYmFuZCA9IEJBTkRfRyB8IEJBTkRfQiB8IEJBTkRfR047CisJZWxzZSBpZiAoYWRhcHRlci0+YWRob2Nfc3RhcnRfYmFuZCAmIEJBTkRfQSkKKwkJYWRhcHRlci0+YWRob2Nfc3RhcnRfYmFuZCA9IEJBTkRfRyB8IEJBTkRfQjsKKwlpZiAoY2hhbi0+Y2hhbm5lbCkgeworCQlpZiAoY2hhbi0+Y2hhbm5lbCA8PSBNQVhfQ0hBTk5FTF9CQU5EX0JHKQorCQkJY2ZwID0gbXdpZmlleF9nZXRfY2ZwX2J5X2JhbmRfYW5kX2NoYW5uZWxfZnJvbV9jZmc4MDIxMQorCQkJCQkocHJpdiwgMCwgKHUxNikgY2hhbi0+Y2hhbm5lbCk7CisJCWlmICghY2ZwKSB7CisJCQljZnAgPSBtd2lmaWV4X2dldF9jZnBfYnlfYmFuZF9hbmRfY2hhbm5lbF9mcm9tX2NmZzgwMjExCisJCQkJCShwcml2LCBCQU5EX0EsICh1MTYpIGNoYW4tPmNoYW5uZWwpOworCQkJaWYgKGNmcCkgeworCQkJCWlmIChhZGFwdGVyLT5hZGhvY18xMW5fZW5hYmxlZCkKKwkJCQkJYWRhcHRlci0+YWRob2Nfc3RhcnRfYmFuZCA9IEJBTkRfQQorCQkJCQkJfCBCQU5EX0FOOworCQkJCWVsc2UKKwkJCQkJYWRhcHRlci0+YWRob2Nfc3RhcnRfYmFuZCA9IEJBTkRfQTsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCWlmIChjaGFuLT5mcmVxIDw9IE1BWF9GUkVRVUVOQ1lfQkFORF9CRykKKwkJCWNmcCA9IG13aWZpZXhfZ2V0X2NmcF9ieV9iYW5kX2FuZF9mcmVxX2Zyb21fY2ZnODAyMTEoCisJCQkJCQkJcHJpdiwgMCwgY2hhbi0+ZnJlcSk7CisJCWlmICghY2ZwKSB7CisJCQljZnAgPSBtd2lmaWV4X2dldF9jZnBfYnlfYmFuZF9hbmRfZnJlcV9mcm9tX2NmZzgwMjExCisJCQkJCQkgIChwcml2LCBCQU5EX0EsIGNoYW4tPmZyZXEpOworCQkJaWYgKGNmcCkgeworCQkJCWlmIChhZGFwdGVyLT5hZGhvY18xMW5fZW5hYmxlZCkKKwkJCQkJYWRhcHRlci0+YWRob2Nfc3RhcnRfYmFuZCA9IEJBTkRfQQorCQkJCQkJfCBCQU5EX0FOOworCQkJCWVsc2UKKwkJCQkJYWRhcHRlci0+YWRob2Nfc3RhcnRfYmFuZCA9IEJBTkRfQTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoIWNmcCB8fCAhY2ZwLT5jaGFubmVsKSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiaW52YWxpZCBjaGFubmVsL2ZyZXFcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXByaXYtPmFkaG9jX2NoYW5uZWwgPSAodTgpIGNmcC0+Y2hhbm5lbDsKKwljaGFuLT5jaGFubmVsID0gY2ZwLT5jaGFubmVsOworCWNoYW4tPmZyZXEgPSBjZnAtPmZyZXE7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIElPQ1RMIHJlcXVlc3QgaGFuZGxlciB0byBzZXQvZ2V0IEFkLUhvYyBjaGFubmVsLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgdGhlIGNvcnJlY3QgZmlybXdhcmUgY29tbWFuZCBhbmQKKyAqIGlzc3VlcyBpdCB0byBzZXQgb3IgZ2V0IHRoZSBhZC1ob2MgY2hhbm5lbC4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X2Jzc19pb2N0bF9pYnNzX2NoYW5uZWwoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkJICB1MTYgYWN0aW9uLCB1MTYgKmNoYW5uZWwpCit7CisJaWYgKGFjdGlvbiA9PSBIb3N0Q21kX0FDVF9HRU5fR0VUKSB7CisJCWlmICghcHJpdi0+bWVkaWFfY29ubmVjdGVkKSB7CisJCQkqY2hhbm5lbCA9IHByaXYtPmFkaG9jX2NoYW5uZWw7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0gZWxzZSB7CisJCXByaXYtPmFkaG9jX2NoYW5uZWwgPSAodTgpICpjaGFubmVsOworCX0KKworCXJldHVybiBtd2lmaWV4X3NlbmRfY21kX3N5bmMocHJpdiwgSG9zdENtZF9DTURfODAyXzExX1JGX0NIQU5ORUwsCisJCQkJICAgIGFjdGlvbiwgMCwgY2hhbm5lbCk7Cit9CisKKy8qCisgKiBJT0NUTCByZXF1ZXN0IGhhbmRsZXIgdG8gZmluZCBhIHBhcnRpY3VsYXIgQlNTLgorICoKKyAqIFRoZSBCU1MgY2FuIGJlIHNlYXJjaGVkIHdpdGggZWl0aGVyIGEgQlNTSUQgb3IgYSBTU0lELiBJZiBub25lIG9mCisgKiB0aGVzZSBhcmUgcHJvdmlkZWQsIGp1c3QgdGhlIGJlc3QgQlNTIChiZXN0IFJTU0kpIGlzIHJldHVybmVkLgorICovCitpbnQgbXdpZmlleF9ic3NfaW9jdGxfZmluZF9ic3Moc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgbXdpZmlleF9zc2lkX2Jzc2lkICpzc2lkX2Jzc2lkKQoreworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjOworCXU4IHplcm9fbWFjW0VUSF9BTEVOXSA9IHsgMCwgMCwgMCwgMCwgMCwgMCB9OworCXU4IG1hY1tFVEhfQUxFTl07CisJaW50IGkgPSAwOworCisJaWYgKG1lbWNtcChzc2lkX2Jzc2lkLT5ic3NpZCwgemVyb19tYWMsIHNpemVvZih6ZXJvX21hYykpKSB7CisJCWkgPSBtd2lmaWV4X2ZpbmRfYnNzaWRfaW5fbGlzdChwcml2LAorCQkJCQkgICAgICAgKHU4ICopIHNzaWRfYnNzaWQtPmJzc2lkLAorCQkJCQkgICAgICAgcHJpdi0+YnNzX21vZGUpOworCQlpZiAoaSA8IDApIHsKKwkJCW1lbWNweShtYWMsIHNzaWRfYnNzaWQtPmJzc2lkLCBzaXplb2YobWFjKSk7CisJCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgImNhbm5vdCBmaW5kIGJzc2lkICVwTVxuIiwgbWFjKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlic3NfZGVzYyA9ICZhZGFwdGVyLT5zY2FuX3RhYmxlW2ldOworCQltZW1jcHkoJnNzaWRfYnNzaWQtPnNzaWQsICZic3NfZGVzYy0+c3NpZCwKKwkJCQlzaXplb2Yoc3RydWN0IG13aWZpZXhfODAyXzExX3NzaWQpKTsKKwl9IGVsc2UgaWYgKHNzaWRfYnNzaWQtPnNzaWQuc3NpZF9sZW4pIHsKKwkJaSA9IG13aWZpZXhfZmluZF9zc2lkX2luX2xpc3QocHJpdiwgJnNzaWRfYnNzaWQtPnNzaWQsIE5VTEwsCisJCQkJCSAgICAgIHByaXYtPmJzc19tb2RlKTsKKwkJaWYgKGkgPCAwKSB7CisJCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgImNhbm5vdCBmaW5kIHNzaWQgJXNcbiIsCisJCQkJCXNzaWRfYnNzaWQtPnNzaWQuc3NpZCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJYnNzX2Rlc2MgPSAmYWRhcHRlci0+c2Nhbl90YWJsZVtpXTsKKwkJbWVtY3B5KHNzaWRfYnNzaWQtPmJzc2lkLCBic3NfZGVzYy0+bWFjX2FkZHJlc3MsIEVUSF9BTEVOKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gbXdpZmlleF9maW5kX2Jlc3RfbmV0d29yayhwcml2LCBzc2lkX2Jzc2lkKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIElPQ1RMIHJlcXVlc3QgaGFuZGxlciB0byBjaGFuZ2UgQWQtSG9jIGNoYW5uZWwuCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgdGhlIElPQ1RMIHJlcXVlc3QgYnVmZmVyLCBmaWxscyBpdAorICogd2l0aCByZXF1aXNpdGUgcGFyYW1ldGVycyBhbmQgY2FsbHMgdGhlIElPQ1RMIGhhbmRsZXIuCisgKgorICogVGhlIGZ1bmN0aW9uIGZvbGxvd3MgdGhlIGZvbGxvd2luZyBzdGVwcyB0byBwZXJmb3JtIHRoZSBjaGFuZ2UgLQorICogICAgICAtIEdldCBjdXJyZW50IElCU1MgaW5mb3JtYXRpb24KKyAqICAgICAgLSBHZXQgY3VycmVudCBjaGFubmVsCisgKiAgICAgIC0gSWYgbm8gY2hhbmdlIGlzIHJlcXVpcmVkLCByZXR1cm4KKyAqICAgICAgLSBJZiBub3QgY29ubmVjdGVkLCBjaGFuZ2UgY2hhbm5lbCBhbmQgcmV0dXJuCisgKiAgICAgIC0gSWYgY29ubmVjdGVkLAorICogICAgICAgICAgLSBEaXNjb25uZWN0CisgKiAgICAgICAgICAtIENoYW5nZSBjaGFubmVsCisgKiAgICAgICAgICAtIFBlcmZvcm0gc3BlY2lmaWMgU1NJRCBzY2FuIHdpdGggc2FtZSBTU0lECisgKiAgICAgICAgICAtIFN0YXJ0L0pvaW4gdGhlIElCU1MKKyAqLworaW50Cittd2lmaWV4X2Rydl9jaGFuZ2VfYWRob2NfY2hhbihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBpbnQgY2hhbm5lbCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtd2lmaWV4X2Jzc19pbmZvIGJzc19pbmZvOworCXN0cnVjdCBtd2lmaWV4X3NzaWRfYnNzaWQgc3NpZF9ic3NpZDsKKwl1MTYgY3Vycl9jaGFuID0gMDsKKworCW1lbXNldCgmYnNzX2luZm8sIDAsIHNpemVvZihic3NfaW5mbykpOworCisJLyogR2V0IEJTUyBpbmZvcm1hdGlvbiAqLworCWlmIChtd2lmaWV4X2dldF9ic3NfaW5mbyhwcml2LCAmYnNzX2luZm8pKQorCQlyZXR1cm4gLTE7CisKKwkvKiBHZXQgY3VycmVudCBjaGFubmVsICovCisJcmV0ID0gbXdpZmlleF9ic3NfaW9jdGxfaWJzc19jaGFubmVsKHByaXYsIEhvc3RDbWRfQUNUX0dFTl9HRVQsCisJCQkJCSAgICAgJmN1cnJfY2hhbik7CisKKwlpZiAoY3Vycl9jaGFuID09IGNoYW5uZWwpIHsKKwkJcmV0ID0gMDsKKwkJZ290byBkb25lOworCX0KKwlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImNtZDogdXBkYXRpbmcgY2hhbm5lbCBmcm9tICVkIHRvICVkXG4iLAorCQkJY3Vycl9jaGFuLCBjaGFubmVsKTsKKworCWlmICghYnNzX2luZm8ubWVkaWFfY29ubmVjdGVkKSB7CisJCXJldCA9IDA7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBEbyBkaXNvbm5lY3QgKi8KKwltZW1zZXQoJnNzaWRfYnNzaWQsIDAsIEVUSF9BTEVOKTsKKwlyZXQgPSBtd2lmaWV4X2RlYXV0aGVudGljYXRlKHByaXYsIHNzaWRfYnNzaWQuYnNzaWQpOworCisJcmV0ID0gbXdpZmlleF9ic3NfaW9jdGxfaWJzc19jaGFubmVsKHByaXYsIEhvc3RDbWRfQUNUX0dFTl9TRVQsCisJCQkJCSAgICAgKHUxNiAqKSAmY2hhbm5lbCk7CisKKwkvKiBEbyBzcGVjaWZpYyBTU0lEIHNjYW5uaW5nICovCisJaWYgKG13aWZpZXhfcmVxdWVzdF9zY2FuKHByaXYsICZic3NfaW5mby5zc2lkKSkgeworCQlyZXQgPSAtMTsKKwkJZ290byBkb25lOworCX0KKwkvKiBTdGFydC9Kb2luIEFkaG9jIG5ldHdvcmsgKi8KKwltZW1zZXQoJnNzaWRfYnNzaWQsIDAsIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9zc2lkX2Jzc2lkKSk7CisJbWVtY3B5KCZzc2lkX2Jzc2lkLnNzaWQsICZic3NfaW5mby5zc2lkLAorCSAgICAgICBzaXplb2Yoc3RydWN0IG13aWZpZXhfODAyXzExX3NzaWQpKTsKKworCXJldCA9IG13aWZpZXhfYnNzX3N0YXJ0KHByaXYsICZzc2lkX2Jzc2lkKTsKK2RvbmU6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIElPQ1RMIHJlcXVlc3QgaGFuZGxlciB0byBnZXQgcmF0ZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIHRoZSBjb3JyZWN0IGZpcm13YXJlIGNvbW1hbmQgYW5kCisgKiBpc3N1ZXMgaXQgdG8gZ2V0IHRoZSBjdXJyZW50IHJhdGUgaWYgaXQgaXMgY29ubmVjdGVkLAorICogb3RoZXJ3aXNlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgbG93ZXN0IHN1cHBvcnRlZCByYXRlCisgKiBmb3IgdGhlIGJhbmQuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9yYXRlX2lvY3RsX2dldF9yYXRlX3ZhbHVlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJCSAgICAgc3RydWN0IG13aWZpZXhfcmF0ZV9jZmcgKnJhdGVfY2ZnKQoreworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCisJcmF0ZV9jZmctPmlzX3JhdGVfYXV0byA9IHByaXYtPmlzX2RhdGFfcmF0ZV9hdXRvOworCWlmICghcHJpdi0+bWVkaWFfY29ubmVjdGVkKSB7CisJCXN3aXRjaCAoYWRhcHRlci0+Y29uZmlnX2JhbmRzKSB7CisJCWNhc2UgQkFORF9COgorCQkJLyogUmV0dXJuIHRoZSBsb3dlc3Qgc3VwcG9ydGVkIHJhdGUgZm9yIEIgYmFuZCAqLworCQkJcmF0ZV9jZmctPnJhdGUgPSBzdXBwb3J0ZWRfcmF0ZXNfYlswXSAmIDB4N2Y7CisJCQlicmVhazsKKwkJY2FzZSBCQU5EX0c6CisJCWNhc2UgQkFORF9HIHwgQkFORF9HTjoKKwkJCS8qIFJldHVybiB0aGUgbG93ZXN0IHN1cHBvcnRlZCByYXRlIGZvciBHIGJhbmQgKi8KKwkJCXJhdGVfY2ZnLT5yYXRlID0gc3VwcG9ydGVkX3JhdGVzX2dbMF0gJiAweDdmOworCQkJYnJlYWs7CisJCWNhc2UgQkFORF9CIHwgQkFORF9HOgorCQljYXNlIEJBTkRfQSB8IEJBTkRfQiB8IEJBTkRfRzoKKwkJY2FzZSBCQU5EX0EgfCBCQU5EX0I6CisJCWNhc2UgQkFORF9BIHwgQkFORF9CIHwgQkFORF9HIHwgQkFORF9BTiB8IEJBTkRfR046CisJCWNhc2UgQkFORF9CIHwgQkFORF9HIHwgQkFORF9HTjoKKwkJCS8qIFJldHVybiB0aGUgbG93ZXN0IHN1cHBvcnRlZCByYXRlIGZvciBCRyBiYW5kICovCisJCQlyYXRlX2NmZy0+cmF0ZSA9IHN1cHBvcnRlZF9yYXRlc19iZ1swXSAmIDB4N2Y7CisJCQlicmVhazsKKwkJY2FzZSBCQU5EX0E6CisJCWNhc2UgQkFORF9BIHwgQkFORF9HOgorCQljYXNlIEJBTkRfQSB8IEJBTkRfRyB8IEJBTkRfQU4gfCBCQU5EX0dOOgorCQljYXNlIEJBTkRfQSB8IEJBTkRfQU46CisJCQkvKiBSZXR1cm4gdGhlIGxvd2VzdCBzdXBwb3J0ZWQgcmF0ZSBmb3IgQSBiYW5kICovCisJCQlyYXRlX2NmZy0+cmF0ZSA9IHN1cHBvcnRlZF9yYXRlc19hWzBdICYgMHg3ZjsKKwkJCWJyZWFrOworCQljYXNlIEJBTkRfR046CisJCQkvKiBSZXR1cm4gdGhlIGxvd2VzdCBzdXBwb3J0ZWQgcmF0ZSBmb3IgTiBiYW5kICovCisJCQlyYXRlX2NmZy0+cmF0ZSA9IHN1cHBvcnRlZF9yYXRlc19uWzBdICYgMHg3ZjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGV2X3dhcm4oYWRhcHRlci0+ZGV2LCAiaW52YWxpZCBiYW5kICUjeFxuIiwKKwkJCSAgICAgICBhZGFwdGVyLT5jb25maWdfYmFuZHMpOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlyZXR1cm4gbXdpZmlleF9zZW5kX2NtZF9zeW5jKHByaXYsCisJCQkJCSAgICBIb3N0Q21kX0NNRF84MDJfMTFfVFhfUkFURV9RVUVSWSwKKwkJCQkJICAgIEhvc3RDbWRfQUNUX0dFTl9HRVQsIDAsIE5VTEwpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogSU9DVEwgcmVxdWVzdCBoYW5kbGVyIHRvIHNldCByYXRlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgdGhlIGNvcnJlY3QgZmlybXdhcmUgY29tbWFuZCBhbmQKKyAqIGlzc3VlcyBpdCB0byBzZXQgdGhlIGN1cnJlbnQgcmF0ZS4KKyAqCisgKiBUaGUgZnVuY3Rpb24gYWxzbyBwZXJmb3JtcyB2YWxpZGF0aW9uIGNoZWNraW5nIG9uIHRoZSBzdXBwbGllZCB2YWx1ZS4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X3JhdGVfaW9jdGxfc2V0X3JhdGVfdmFsdWUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkJICAgICBzdHJ1Y3QgbXdpZmlleF9yYXRlX2NmZyAqcmF0ZV9jZmcpCit7CisJdTggcmF0ZXNbTVdJRklFWF9TVVBQT1JURURfUkFURVNdOworCXU4ICpyYXRlOworCWludCByYXRlX2luZGV4LCByZXQ7CisJdTE2IGJpdG1hcF9yYXRlc1tNQVhfQklUTUFQX1JBVEVTX1NJWkVdOworCXUzMiBpOworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCisJaWYgKHJhdGVfY2ZnLT5pc19yYXRlX2F1dG8pIHsKKwkJbWVtc2V0KGJpdG1hcF9yYXRlcywgMCwgc2l6ZW9mKGJpdG1hcF9yYXRlcykpOworCQkvKiBTdXBwb3J0IGFsbCBIUi9EU1NTIHJhdGVzICovCisJCWJpdG1hcF9yYXRlc1swXSA9IDB4MDAwRjsKKwkJLyogU3VwcG9ydCBhbGwgT0ZETSByYXRlcyAqLworCQliaXRtYXBfcmF0ZXNbMV0gPSAweDAwRkY7CisJCS8qIFN1cHBvcnQgYWxsIEhULU1DU3MgcmF0ZSAqLworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcml2LT5iaXRtYXBfcmF0ZXMpIC0gMzsgaSsrKQorCQkJYml0bWFwX3JhdGVzW2kgKyAyXSA9IDB4RkZGRjsKKwkJYml0bWFwX3JhdGVzWzldID0gMHgzRkZGOworCX0gZWxzZSB7CisJCW1lbXNldChyYXRlcywgMCwgc2l6ZW9mKHJhdGVzKSk7CisJCW13aWZpZXhfZ2V0X2FjdGl2ZV9kYXRhX3JhdGVzKHByaXYsIHJhdGVzKTsKKwkJcmF0ZSA9IHJhdGVzOworCQlmb3IgKGkgPSAwOyAocmF0ZVtpXSAmJiBpIDwgTVdJRklFWF9TVVBQT1JURURfUkFURVMpOyBpKyspIHsKKwkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogcmF0ZT0lI3ggd2FudGVkPSUjeFxuIiwKKwkJCQlyYXRlW2ldLCByYXRlX2NmZy0+cmF0ZSk7CisJCQlpZiAoKHJhdGVbaV0gJiAweDdmKSA9PSAocmF0ZV9jZmctPnJhdGUgJiAweDdmKSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoIXJhdGVbaV0gfHwgKGkgPT0gTVdJRklFWF9TVVBQT1JURURfUkFURVMpKSB7CisJCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgImZpeGVkIGRhdGEgcmF0ZSAlI3ggaXMgb3V0ICIKKwkJCSAgICAgICAib2YgcmFuZ2VcbiIsIHJhdGVfY2ZnLT5yYXRlKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQltZW1zZXQoYml0bWFwX3JhdGVzLCAwLCBzaXplb2YoYml0bWFwX3JhdGVzKSk7CisKKwkJcmF0ZV9pbmRleCA9IG13aWZpZXhfZGF0YV9yYXRlX3RvX2luZGV4KHJhdGVfY2ZnLT5yYXRlKTsKKworCQkvKiBPbmx5IGFsbG93IGIvZyByYXRlcyB0byBiZSBzZXQgKi8KKwkJaWYgKHJhdGVfaW5kZXggPj0gTVdJRklFWF9SQVRFX0lOREVYX0hSRFNTUzAgJiYKKwkJICAgIHJhdGVfaW5kZXggPD0gTVdJRklFWF9SQVRFX0lOREVYX0hSRFNTUzMpIHsKKwkJCWJpdG1hcF9yYXRlc1swXSA9IDEgPDwgcmF0ZV9pbmRleDsKKwkJfSBlbHNlIHsKKwkJCXJhdGVfaW5kZXggLT0gMTsgLyogVGhlcmUgaXMgYSAweDAwIGluIHRoZSB0YWJsZSAqLworCQkJaWYgKHJhdGVfaW5kZXggPj0gTVdJRklFWF9SQVRFX0lOREVYX09GRE0wICYmCisJCQkgICAgcmF0ZV9pbmRleCA8PSBNV0lGSUVYX1JBVEVfSU5ERVhfT0ZETTcpCisJCQkJYml0bWFwX3JhdGVzWzFdID0gMSA8PCAocmF0ZV9pbmRleCAtCisJCQkJCQkgICBNV0lGSUVYX1JBVEVfSU5ERVhfT0ZETTApOworCQl9CisJfQorCisJcmV0ID0gbXdpZmlleF9zZW5kX2NtZF9zeW5jKHByaXYsIEhvc3RDbWRfQ01EX1RYX1JBVEVfQ0ZHLAorCQkJCSAgICBIb3N0Q21kX0FDVF9HRU5fU0VULCAwLCBiaXRtYXBfcmF0ZXMpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIElPQ1RMIHJlcXVlc3QgaGFuZGxlciB0byBzZXQvZ2V0IHJhdGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBzZXQvZ2V0IGVpdGhlciB0aGUgcmF0ZSB2YWx1ZSBvciB0aGUKKyAqIHJhdGUgaW5kZXguCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9yYXRlX2lvY3RsX2NmZyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCSAgc3RydWN0IG13aWZpZXhfcmF0ZV9jZmcgKnJhdGVfY2ZnKQoreworCWludCBzdGF0dXM7CisKKwlpZiAoIXJhdGVfY2ZnKQorCQlyZXR1cm4gLTE7CisKKwlpZiAocmF0ZV9jZmctPmFjdGlvbiA9PSBIb3N0Q21kX0FDVF9HRU5fR0VUKQorCQlzdGF0dXMgPSBtd2lmaWV4X3JhdGVfaW9jdGxfZ2V0X3JhdGVfdmFsdWUocHJpdiwgcmF0ZV9jZmcpOworCWVsc2UKKwkJc3RhdHVzID0gbXdpZmlleF9yYXRlX2lvY3RsX3NldF9yYXRlX3ZhbHVlKHByaXYsIHJhdGVfY2ZnKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBTZW5kcyBJT0NUTCByZXF1ZXN0IHRvIGdldCB0aGUgZGF0YSByYXRlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIHRoZSBJT0NUTCByZXF1ZXN0IGJ1ZmZlciwgZmlsbHMgaXQKKyAqIHdpdGggcmVxdWlzaXRlIHBhcmFtZXRlcnMgYW5kIGNhbGxzIHRoZSBJT0NUTCBoYW5kbGVyLgorICovCitpbnQgbXdpZmlleF9kcnZfZ2V0X2RhdGFfcmF0ZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICAgc3RydWN0IG13aWZpZXhfcmF0ZV9jZmcgKnJhdGUpCit7CisJaW50IHJldDsKKworCW1lbXNldChyYXRlLCAwLCBzaXplb2Yoc3RydWN0IG13aWZpZXhfcmF0ZV9jZmcpKTsKKwlyYXRlLT5hY3Rpb24gPSBIb3N0Q21kX0FDVF9HRU5fR0VUOworCXJldCA9IG13aWZpZXhfcmF0ZV9pb2N0bF9jZmcocHJpdiwgcmF0ZSk7CisKKwlpZiAoIXJldCkgeworCQlpZiAocmF0ZSAmJiByYXRlLT5pc19yYXRlX2F1dG8pCisJCQlyYXRlLT5yYXRlID0gbXdpZmlleF9pbmRleF90b19kYXRhX3JhdGUocHJpdi0+dHhfcmF0ZSwKKwkJCQkJCQlwcml2LT50eF9odGluZm8pOworCQllbHNlIGlmIChyYXRlKQorCQkJcmF0ZS0+cmF0ZSA9IHByaXYtPmRhdGFfcmF0ZTsKKwl9IGVsc2UgeworCQlyZXQgPSAtMTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogSU9DVEwgcmVxdWVzdCBoYW5kbGVyIHRvIHNldCB0eCBwb3dlciBjb25maWd1cmF0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgdGhlIGNvcnJlY3QgZmlybXdhcmUgY29tbWFuZCBhbmQKKyAqIGlzc3VlcyBpdC4KKyAqCisgKiBGb3Igbm9uLWF1dG8gcG93ZXIgbW9kZSwgYWxsIHRoZSBmb2xsb3dpbmcgcG93ZXIgZ3JvdXBzIGFyZSBzZXQgLQorICogICAgICAtIE1vZHVsYXRpb24gY2xhc3MgSFIvRFNTUworICogICAgICAtIE1vZHVsYXRpb24gY2xhc3MgT0ZETQorICogICAgICAtIE1vZHVsYXRpb24gY2xhc3MgSFRCVzIwCisgKiAgICAgIC0gTW9kdWxhdGlvbiBjbGFzcyBIVEJXNDAKKyAqLworaW50IG13aWZpZXhfc2V0X3R4X3Bvd2VyKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgc3RydWN0IG13aWZpZXhfcG93ZXJfY2ZnICpwb3dlcl9jZmcpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfdHhwd3JfY2ZnICp0eHBfY2ZnOworCXN0cnVjdCBtd2lmaWV4X3R5cGVzX3Bvd2VyX2dyb3VwICpwZ190bHY7CisJc3RydWN0IG13aWZpZXhfcG93ZXJfZ3JvdXAgKnBnOworCXU4ICpidWY7CisJdTE2IGRibSA9IDA7CisKKwlpZiAoIXBvd2VyX2NmZy0+aXNfcG93ZXJfYXV0bykgeworCQlkYm0gPSAodTE2KSBwb3dlcl9jZmctPnBvd2VyX2xldmVsOworCQlpZiAoKGRibSA8IHByaXYtPm1pbl90eF9wb3dlcl9sZXZlbCkgfHwKKwkJICAgIChkYm0gPiBwcml2LT5tYXhfdHhfcG93ZXJfbGV2ZWwpKSB7CisJCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgInR4cG93ZXIgdmFsdWUgJWQgZEJtIgorCQkJCQkiIGlzIG91dCBvZiByYW5nZSAoJWQgZEJtLSVkIGRCbSlcbiIsCisJCQkJCWRibSwgcHJpdi0+bWluX3R4X3Bvd2VyX2xldmVsLAorCQkJCQlwcml2LT5tYXhfdHhfcG93ZXJfbGV2ZWwpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCWJ1ZiA9IGt6YWxsb2MoTVdJRklFWF9TSVpFX09GX0NNRF9CVUZGRVIsIEdGUF9LRVJORUwpOworCWlmICghYnVmKSB7CisJCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LCAiJXM6IGZhaWxlZCB0byBhbGxvYyBjbWQgYnVmZmVyXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJdHhwX2NmZyA9IChzdHJ1Y3QgaG9zdF9jbWRfZHNfdHhwd3JfY2ZnICopIGJ1ZjsKKwl0eHBfY2ZnLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihIb3N0Q21kX0FDVF9HRU5fU0VUKTsKKwlpZiAoIXBvd2VyX2NmZy0+aXNfcG93ZXJfYXV0bykgeworCQl0eHBfY2ZnLT5tb2RlID0gY3B1X3RvX2xlMzIoMSk7CisJCXBnX3RsdiA9IChzdHJ1Y3QgbXdpZmlleF90eXBlc19wb3dlcl9ncm91cCAqKSAoYnVmICsKKwkJCQlzaXplb2Yoc3RydWN0IGhvc3RfY21kX2RzX3R4cHdyX2NmZykpOworCQlwZ190bHYtPnR5cGUgPSBUTFZfVFlQRV9QT1dFUl9HUk9VUDsKKwkJcGdfdGx2LT5sZW5ndGggPSA0ICogc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X3Bvd2VyX2dyb3VwKTsKKwkJcGcgPSAoc3RydWN0IG13aWZpZXhfcG93ZXJfZ3JvdXAgKikgKGJ1ZiArCisJCQkJc2l6ZW9mKHN0cnVjdCBob3N0X2NtZF9kc190eHB3cl9jZmcpICsKKwkJCQlzaXplb2Yoc3RydWN0IG13aWZpZXhfdHlwZXNfcG93ZXJfZ3JvdXApKTsKKwkJLyogUG93ZXIgZ3JvdXAgZm9yIG1vZHVsYXRpb24gY2xhc3MgSFIvRFNTUyAqLworCQlwZy0+Zmlyc3RfcmF0ZV9jb2RlID0gMHgwMDsKKwkJcGctPmxhc3RfcmF0ZV9jb2RlID0gMHgwMzsKKwkJcGctPm1vZHVsYXRpb25fY2xhc3MgPSBNT0RfQ0xBU1NfSFJfRFNTUzsKKwkJcGctPnBvd2VyX3N0ZXAgPSAwOworCQlwZy0+cG93ZXJfbWluID0gKHM4KSBkYm07CisJCXBnLT5wb3dlcl9tYXggPSAoczgpIGRibTsKKwkJcGcrKzsKKwkJLyogUG93ZXIgZ3JvdXAgZm9yIG1vZHVsYXRpb24gY2xhc3MgT0ZETSAqLworCQlwZy0+Zmlyc3RfcmF0ZV9jb2RlID0gMHgwMDsKKwkJcGctPmxhc3RfcmF0ZV9jb2RlID0gMHgwNzsKKwkJcGctPm1vZHVsYXRpb25fY2xhc3MgPSBNT0RfQ0xBU1NfT0ZETTsKKwkJcGctPnBvd2VyX3N0ZXAgPSAwOworCQlwZy0+cG93ZXJfbWluID0gKHM4KSBkYm07CisJCXBnLT5wb3dlcl9tYXggPSAoczgpIGRibTsKKwkJcGcrKzsKKwkJLyogUG93ZXIgZ3JvdXAgZm9yIG1vZHVsYXRpb24gY2xhc3MgSFRCVzIwICovCisJCXBnLT5maXJzdF9yYXRlX2NvZGUgPSAweDAwOworCQlwZy0+bGFzdF9yYXRlX2NvZGUgPSAweDIwOworCQlwZy0+bW9kdWxhdGlvbl9jbGFzcyA9IE1PRF9DTEFTU19IVDsKKwkJcGctPnBvd2VyX3N0ZXAgPSAwOworCQlwZy0+cG93ZXJfbWluID0gKHM4KSBkYm07CisJCXBnLT5wb3dlcl9tYXggPSAoczgpIGRibTsKKwkJcGctPmh0X2JhbmR3aWR0aCA9IEhUX0JXXzIwOworCQlwZysrOworCQkvKiBQb3dlciBncm91cCBmb3IgbW9kdWxhdGlvbiBjbGFzcyBIVEJXNDAgKi8KKwkJcGctPmZpcnN0X3JhdGVfY29kZSA9IDB4MDA7CisJCXBnLT5sYXN0X3JhdGVfY29kZSA9IDB4MjA7CisJCXBnLT5tb2R1bGF0aW9uX2NsYXNzID0gTU9EX0NMQVNTX0hUOworCQlwZy0+cG93ZXJfc3RlcCA9IDA7CisJCXBnLT5wb3dlcl9taW4gPSAoczgpIGRibTsKKwkJcGctPnBvd2VyX21heCA9IChzOCkgZGJtOworCQlwZy0+aHRfYmFuZHdpZHRoID0gSFRfQldfNDA7CisJfQorCXJldCA9IG13aWZpZXhfc2VuZF9jbWRfc3luYyhwcml2LCBIb3N0Q21kX0NNRF9UWFBXUl9DRkcsCisJCQkJICAgIEhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsIGJ1Zik7CisKKwlrZnJlZShidWYpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBJT0NUTCByZXF1ZXN0IGhhbmRsZXIgdG8gZ2V0IHBvd2VyIHNhdmUgbW9kZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIHRoZSBjb3JyZWN0IGZpcm13YXJlIGNvbW1hbmQgYW5kCisgKiBpc3N1ZXMgaXQuCisgKi8KK2ludCBtd2lmaWV4X2Rydl9zZXRfcG93ZXIoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTMyICpwc19tb2RlKQoreworCWludCByZXQ7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJdTE2IHN1Yl9jbWQ7CisKKwlpZiAoKnBzX21vZGUpCisJCWFkYXB0ZXItPnBzX21vZGUgPSBNV0lGSUVYXzgwMl8xMV9QT1dFUl9NT0RFX1BTUDsKKwllbHNlCisJCWFkYXB0ZXItPnBzX21vZGUgPSBNV0lGSUVYXzgwMl8xMV9QT1dFUl9NT0RFX0NBTTsKKwlzdWJfY21kID0gKCpwc19tb2RlKSA/IEVOX0FVVE9fUFMgOiBESVNfQVVUT19QUzsKKwlyZXQgPSBtd2lmaWV4X3NlbmRfY21kX3N5bmMocHJpdiwgSG9zdENtZF9DTURfODAyXzExX1BTX01PREVfRU5ILAorCQkJCSAgICBzdWJfY21kLCBCSVRNQVBfU1RBX1BTLCBOVUxMKTsKKwlpZiAoKCFyZXQpICYmIChzdWJfY21kID09IERJU19BVVRPX1BTKSkKKwkJcmV0ID0gbXdpZmlleF9zZW5kX2NtZF9hc3luYyhwcml2LAorCQkJCUhvc3RDbWRfQ01EXzgwMl8xMV9QU19NT0RFX0VOSCwgR0VUX1BTLAorCQkJCTAsIE5VTEwpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIElPQ1RMIHJlcXVlc3QgaGFuZGxlciB0byBzZXQvcmVzZXQgV1BBIElFLgorICoKKyAqIFRoZSBzdXBwbGllZCBXUEEgSUUgaXMgdHJlYXRlZCBhcyBhIG9wYXF1ZSBidWZmZXIuIE9ubHkgdGhlIGZpcnN0IGZpZWxkCisgKiBpcyBjaGVja2VkIHRvIGRldGVybWluZSBXUEEgdmVyc2lvbi4gSWYgYnVmZmVyIGxlbmd0aCBpcyB6ZXJvLCB0aGUgZXhpc3RpbmcKKyAqIFdQQSBJRSBpcyByZXNldC4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X3NldF93cGFfaWVfaGVscGVyKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJICAgICB1OCAqaWVfZGF0YV9wdHIsIHUxNiBpZV9sZW4pCit7CisJaWYgKGllX2xlbikgeworCQlpZiAoaWVfbGVuID4gc2l6ZW9mKHByaXYtPndwYV9pZSkpIHsKKwkJCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJCSJmYWlsZWQgdG8gY29weSBXUEEgSUUsIHRvbyBiaWdcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisJCW1lbWNweShwcml2LT53cGFfaWUsIGllX2RhdGFfcHRyLCBpZV9sZW4pOworCQlwcml2LT53cGFfaWVfbGVuID0gKHU4KSBpZV9sZW47CisJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiY21kOiBTZXQgV3BhX2llX2xlbj0lZCBJRT0lI3hcbiIsCisJCQkJcHJpdi0+d3BhX2llX2xlbiwgcHJpdi0+d3BhX2llWzBdKTsKKworCQlpZiAocHJpdi0+d3BhX2llWzBdID09IFdMQU5fRUlEX1dQQSkgeworCQkJcHJpdi0+c2VjX2luZm8ud3BhX2VuYWJsZWQgPSB0cnVlOworCQl9IGVsc2UgaWYgKHByaXYtPndwYV9pZVswXSA9PSBXTEFOX0VJRF9SU04pIHsKKwkJCXByaXYtPnNlY19pbmZvLndwYTJfZW5hYmxlZCA9IHRydWU7CisJCX0gZWxzZSB7CisJCQlwcml2LT5zZWNfaW5mby53cGFfZW5hYmxlZCA9IGZhbHNlOworCQkJcHJpdi0+c2VjX2luZm8ud3BhMl9lbmFibGVkID0gZmFsc2U7CisJCX0KKwl9IGVsc2UgeworCQltZW1zZXQocHJpdi0+d3BhX2llLCAwLCBzaXplb2YocHJpdi0+d3BhX2llKSk7CisJCXByaXYtPndwYV9pZV9sZW4gPSAwOworCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IHJlc2V0IHdwYV9pZV9sZW49JWQgSUU9JSN4XG4iLAorCQkJcHJpdi0+d3BhX2llX2xlbiwgcHJpdi0+d3BhX2llWzBdKTsKKwkJcHJpdi0+c2VjX2luZm8ud3BhX2VuYWJsZWQgPSBmYWxzZTsKKwkJcHJpdi0+c2VjX2luZm8ud3BhMl9lbmFibGVkID0gZmFsc2U7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJT0NUTCByZXF1ZXN0IGhhbmRsZXIgdG8gc2V0L3Jlc2V0IFdBUEkgSUUuCisgKgorICogVGhlIHN1cHBsaWVkIFdBUEkgSUUgaXMgdHJlYXRlZCBhcyBhIG9wYXF1ZSBidWZmZXIuIE9ubHkgdGhlIGZpcnN0IGZpZWxkCisgKiBpcyBjaGVja2VkIHRvIGludGVybmFsbHkgZW5hYmxlIFdBUEkuIElmIGJ1ZmZlciBsZW5ndGggaXMgemVybywgdGhlIGV4aXN0aW5nCisgKiBXQVBJIElFIGlzIHJlc2V0LgorICovCitzdGF0aWMgaW50IG13aWZpZXhfc2V0X3dhcGlfaWUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgICB1OCAqaWVfZGF0YV9wdHIsIHUxNiBpZV9sZW4pCit7CisJaWYgKGllX2xlbikgeworCQlpZiAoaWVfbGVuID4gc2l6ZW9mKHByaXYtPndhcGlfaWUpKSB7CisJCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwKKwkJCQkiaW5mbzogZmFpbGVkIHRvIGNvcHkgV0FQSSBJRSwgdG9vIGJpZ1xuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJbWVtY3B5KHByaXYtPndhcGlfaWUsIGllX2RhdGFfcHRyLCBpZV9sZW4pOworCQlwcml2LT53YXBpX2llX2xlbiA9IGllX2xlbjsKKwkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJjbWQ6IFNldCB3YXBpX2llX2xlbj0lZCBJRT0lI3hcbiIsCisJCQkJcHJpdi0+d2FwaV9pZV9sZW4sIHByaXYtPndhcGlfaWVbMF0pOworCisJCWlmIChwcml2LT53YXBpX2llWzBdID09IFdMQU5fRUlEX0JTU19BQ19BQ0NFU1NfREVMQVkpCisJCQlwcml2LT5zZWNfaW5mby53YXBpX2VuYWJsZWQgPSB0cnVlOworCX0gZWxzZSB7CisJCW1lbXNldChwcml2LT53YXBpX2llLCAwLCBzaXplb2YocHJpdi0+d2FwaV9pZSkpOworCQlwcml2LT53YXBpX2llX2xlbiA9IGllX2xlbjsKKwkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkiaW5mbzogUmVzZXQgd2FwaV9pZV9sZW49JWQgSUU9JSN4XG4iLAorCQkgICAgICAgcHJpdi0+d2FwaV9pZV9sZW4sIHByaXYtPndhcGlfaWVbMF0pOworCQlwcml2LT5zZWNfaW5mby53YXBpX2VuYWJsZWQgPSBmYWxzZTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJT0NUTCByZXF1ZXN0IGhhbmRsZXIgdG8gc2V0IFdBUEkga2V5LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgdGhlIGNvcnJlY3QgZmlybXdhcmUgY29tbWFuZCBhbmQKKyAqIGlzc3VlcyBpdC4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X3NlY19pb2N0bF9zZXRfd2FwaV9rZXkoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgbXdpZmlleF9kc19lbmNyeXB0X2tleSAqZW5jcnlwdF9rZXkpCit7CisKKwlyZXR1cm4gbXdpZmlleF9zZW5kX2NtZF9zeW5jKHByaXYsIEhvc3RDbWRfQ01EXzgwMl8xMV9LRVlfTUFURVJJQUwsCisJCQkJICAgIEhvc3RDbWRfQUNUX0dFTl9TRVQsIEtFWV9JTkZPX0VOQUJMRUQsCisJCQkJICAgIGVuY3J5cHRfa2V5KTsKK30KKworLyoKKyAqIElPQ1RMIHJlcXVlc3QgaGFuZGxlciB0byBzZXQgV0VQIG5ldHdvcmsga2V5LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgdGhlIGNvcnJlY3QgZmlybXdhcmUgY29tbWFuZCBhbmQKKyAqIGlzc3VlcyBpdCwgYWZ0ZXIgdmFsaWRhdGlvbiBjaGVja3MuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9zZWNfaW9jdGxfc2V0X3dlcF9rZXkoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgIHN0cnVjdCBtd2lmaWV4X2RzX2VuY3J5cHRfa2V5ICplbmNyeXB0X2tleSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtd2lmaWV4X3dlcF9rZXkgKndlcF9rZXk7CisJaW50IGluZGV4OworCisJaWYgKHByaXYtPndlcF9rZXlfY3Vycl9pbmRleCA+PSBOVU1fV0VQX0tFWVMpCisJCXByaXYtPndlcF9rZXlfY3Vycl9pbmRleCA9IDA7CisJd2VwX2tleSA9ICZwcml2LT53ZXBfa2V5W3ByaXYtPndlcF9rZXlfY3Vycl9pbmRleF07CisJaW5kZXggPSBlbmNyeXB0X2tleS0+a2V5X2luZGV4OworCWlmIChlbmNyeXB0X2tleS0+a2V5X2Rpc2FibGUpIHsKKwkJcHJpdi0+c2VjX2luZm8ud2VwX3N0YXR1cyA9IE1XSUZJRVhfODAyXzExX1dFUF9ESVNBQkxFRDsKKwl9IGVsc2UgaWYgKCFlbmNyeXB0X2tleS0+a2V5X2xlbikgeworCQkvKiBDb3B5IHRoZSByZXF1aXJlZCBrZXkgYXMgdGhlIGN1cnJlbnQga2V5ICovCisJCXdlcF9rZXkgPSAmcHJpdi0+d2VwX2tleVtpbmRleF07CisJCWlmICghd2VwX2tleS0+a2V5X2xlbmd0aCkgeworCQkJZGV2X2Vycihwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkJImtleSBub3Qgc2V0LCBzbyBjYW5ub3QgZW5hYmxlIGl0XG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlwcml2LT53ZXBfa2V5X2N1cnJfaW5kZXggPSAodTE2KSBpbmRleDsKKwkJcHJpdi0+c2VjX2luZm8ud2VwX3N0YXR1cyA9IE1XSUZJRVhfODAyXzExX1dFUF9FTkFCTEVEOworCX0gZWxzZSB7CisJCXdlcF9rZXkgPSAmcHJpdi0+d2VwX2tleVtpbmRleF07CisJCW1lbXNldCh3ZXBfa2V5LCAwLCBzaXplb2Yoc3RydWN0IG13aWZpZXhfd2VwX2tleSkpOworCQkvKiBDb3B5IHRoZSBrZXkgaW4gdGhlIGRyaXZlciAqLworCQltZW1jcHkod2VwX2tleS0+a2V5X21hdGVyaWFsLAorCQkgICAgICAgZW5jcnlwdF9rZXktPmtleV9tYXRlcmlhbCwKKwkJICAgICAgIGVuY3J5cHRfa2V5LT5rZXlfbGVuKTsKKwkJd2VwX2tleS0+a2V5X2luZGV4ID0gaW5kZXg7CisJCXdlcF9rZXktPmtleV9sZW5ndGggPSBlbmNyeXB0X2tleS0+a2V5X2xlbjsKKwkJcHJpdi0+c2VjX2luZm8ud2VwX3N0YXR1cyA9IE1XSUZJRVhfODAyXzExX1dFUF9FTkFCTEVEOworCX0KKwlpZiAod2VwX2tleS0+a2V5X2xlbmd0aCkgeworCQkvKiBTZW5kIHJlcXVlc3QgdG8gZmlybXdhcmUgKi8KKwkJcmV0ID0gbXdpZmlleF9zZW5kX2NtZF9hc3luYyhwcml2LAorCQkJCQkgICAgIEhvc3RDbWRfQ01EXzgwMl8xMV9LRVlfTUFURVJJQUwsCisJCQkJCSAgICAgSG9zdENtZF9BQ1RfR0VOX1NFVCwgMCwgTlVMTCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwlpZiAocHJpdi0+c2VjX2luZm8ud2VwX3N0YXR1cyA9PSBNV0lGSUVYXzgwMl8xMV9XRVBfRU5BQkxFRCkKKwkJcHJpdi0+Y3Vycl9wa3RfZmlsdGVyIHw9IEhvc3RDbWRfQUNUX01BQ19XRVBfRU5BQkxFOworCWVsc2UKKwkJcHJpdi0+Y3Vycl9wa3RfZmlsdGVyICY9IH5Ib3N0Q21kX0FDVF9NQUNfV0VQX0VOQUJMRTsKKworCXJldCA9IG13aWZpZXhfc2VuZF9jbWRfc3luYyhwcml2LCBIb3N0Q21kX0NNRF9NQUNfQ09OVFJPTCwKKwkJCQkgICAgSG9zdENtZF9BQ1RfR0VOX1NFVCwgMCwKKwkJCQkgICAgJnByaXYtPmN1cnJfcGt0X2ZpbHRlcik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogSU9DVEwgcmVxdWVzdCBoYW5kbGVyIHRvIHNldCBXUEEga2V5LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgdGhlIGNvcnJlY3QgZmlybXdhcmUgY29tbWFuZCBhbmQKKyAqIGlzc3VlcyBpdCwgYWZ0ZXIgdmFsaWRhdGlvbiBjaGVja3MuCisgKgorICogQ3VycmVudCBkcml2ZXIgb25seSBzdXBwb3J0cyBrZXkgbGVuZ3RoIG9mIHVwIHRvIDMyIGJ5dGVzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGFsc28gYmUgdXNlZCB0byBkaXNhYmxlIGEgY3VycmVudGx5IHNldCBrZXkuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9zZWNfaW9jdGxfc2V0X3dwYV9rZXkoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgIHN0cnVjdCBtd2lmaWV4X2RzX2VuY3J5cHRfa2V5ICplbmNyeXB0X2tleSkKK3sKKwlpbnQgcmV0OworCXU4IHJlbW92ZV9rZXkgPSBmYWxzZTsKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2tleV9tYXRlcmlhbCAqaWJzc19rZXk7CisKKwkvKiBDdXJyZW50IGRyaXZlciBvbmx5IHN1cHBvcnRzIGtleSBsZW5ndGggb2YgdXAgdG8gMzIgYnl0ZXMgKi8KKwlpZiAoZW5jcnlwdF9rZXktPmtleV9sZW4gPiBXTEFOX01BWF9LRVlfTEVOKSB7CisJCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LCAia2V5IGxlbmd0aCB0b28gbG9uZ1xuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAocHJpdi0+YnNzX21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwkJLyoKKwkJICogSUJTUy9XUEEtTm9uZSB1c2VzIG9ubHkgb25lIGtleSAoR3JvdXApIGZvciBib3RoIHJlY2VpdmluZworCQkgKiBhbmQgc2VuZGluZyB1bmljYXN0IGFuZCBtdWx0aWNhc3QgcGFja2V0cy4KKwkJICovCisJCS8qIFNlbmQgdGhlIGtleSBhcyBQVEsgdG8gZmlybXdhcmUgKi8KKwkJZW5jcnlwdF9rZXktPmtleV9pbmRleCA9IE1XSUZJRVhfS0VZX0lOREVYX1VOSUNBU1Q7CisJCXJldCA9IG13aWZpZXhfc2VuZF9jbWRfYXN5bmMocHJpdiwKKwkJCQkJSG9zdENtZF9DTURfODAyXzExX0tFWV9NQVRFUklBTCwKKwkJCQkJSG9zdENtZF9BQ1RfR0VOX1NFVCwgS0VZX0lORk9fRU5BQkxFRCwKKwkJCQkJZW5jcnlwdF9rZXkpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlpYnNzX2tleSA9ICZwcml2LT5hZXNfa2V5OworCQltZW1zZXQoaWJzc19rZXksIDAsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9rZXlfbWF0ZXJpYWwpKTsKKwkJLyogQ29weSB0aGUga2V5IGluIHRoZSBkcml2ZXIgKi8KKwkJbWVtY3B5KGlic3Nfa2V5LT5rZXlfcGFyYW1fc2V0LmtleSwgZW5jcnlwdF9rZXktPmtleV9tYXRlcmlhbCwKKwkJICAgICAgIGVuY3J5cHRfa2V5LT5rZXlfbGVuKTsKKwkJbWVtY3B5KCZpYnNzX2tleS0+a2V5X3BhcmFtX3NldC5rZXlfbGVuLCAmZW5jcnlwdF9rZXktPmtleV9sZW4sCisJCSAgICAgICBzaXplb2YoaWJzc19rZXktPmtleV9wYXJhbV9zZXQua2V5X2xlbikpOworCQlpYnNzX2tleS0+a2V5X3BhcmFtX3NldC5rZXlfdHlwZV9pZAorCQkJPSBjcHVfdG9fbGUxNihLRVlfVFlQRV9JRF9US0lQKTsKKwkJaWJzc19rZXktPmtleV9wYXJhbV9zZXQua2V5X2luZm8gPSBjcHVfdG9fbGUxNihLRVlfRU5BQkxFRCk7CisKKwkJLyogU2VuZCB0aGUga2V5IGFzIEdUSyB0byBmaXJtd2FyZSAqLworCQllbmNyeXB0X2tleS0+a2V5X2luZGV4ID0gfk1XSUZJRVhfS0VZX0lOREVYX1VOSUNBU1Q7CisJfQorCisJaWYgKCFlbmNyeXB0X2tleS0+a2V5X2luZGV4KQorCQllbmNyeXB0X2tleS0+a2V5X2luZGV4ID0gTVdJRklFWF9LRVlfSU5ERVhfVU5JQ0FTVDsKKworCWlmIChyZW1vdmVfa2V5KQorCQlyZXQgPSBtd2lmaWV4X3NlbmRfY21kX3N5bmMocHJpdiwKKwkJCQkgICAgICAgSG9zdENtZF9DTURfODAyXzExX0tFWV9NQVRFUklBTCwKKwkJCQkgICAgICAgSG9zdENtZF9BQ1RfR0VOX1NFVCwgIShLRVlfSU5GT19FTkFCTEVEKSwKKwkJCQkgICAgICAgZW5jcnlwdF9rZXkpOworCWVsc2UKKwkJcmV0ID0gbXdpZmlleF9zZW5kX2NtZF9zeW5jKHByaXYsCisJCQkJCUhvc3RDbWRfQ01EXzgwMl8xMV9LRVlfTUFURVJJQUwsCisJCQkJCUhvc3RDbWRfQUNUX0dFTl9TRVQsIEtFWV9JTkZPX0VOQUJMRUQsCisJCQkJCWVuY3J5cHRfa2V5KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBJT0NUTCByZXF1ZXN0IGhhbmRsZXIgdG8gc2V0L2dldCBuZXR3b3JrIGtleXMuCisgKgorICogVGhpcyBpcyBhIGdlbmVyaWMga2V5IGhhbmRsaW5nIGZ1bmN0aW9uIHdoaWNoIHN1cHBvcnRzIFdFUCwgV1BBCisgKiBhbmQgV0FQSS4KKyAqLworc3RhdGljIGludAorbXdpZmlleF9zZWNfaW9jdGxfZW5jcnlwdF9rZXkoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgIHN0cnVjdCBtd2lmaWV4X2RzX2VuY3J5cHRfa2V5ICplbmNyeXB0X2tleSkKK3sKKwlpbnQgc3RhdHVzOworCisJaWYgKGVuY3J5cHRfa2V5LT5pc193YXBpX2tleSkKKwkJc3RhdHVzID0gbXdpZmlleF9zZWNfaW9jdGxfc2V0X3dhcGlfa2V5KHByaXYsIGVuY3J5cHRfa2V5KTsKKwllbHNlIGlmIChlbmNyeXB0X2tleS0+a2V5X2xlbiA+IFdMQU5fS0VZX0xFTl9XRVAxMDQpCisJCXN0YXR1cyA9IG13aWZpZXhfc2VjX2lvY3RsX3NldF93cGFfa2V5KHByaXYsIGVuY3J5cHRfa2V5KTsKKwllbHNlCisJCXN0YXR1cyA9IG13aWZpZXhfc2VjX2lvY3RsX3NldF93ZXBfa2V5KHByaXYsIGVuY3J5cHRfa2V5KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBkcml2ZXIgdmVyc2lvbi4KKyAqLworaW50Cittd2lmaWV4X2Rydl9nZXRfZHJpdmVyX3ZlcnNpb24oc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwgY2hhciAqdmVyc2lvbiwKKwkJCSAgICAgICBpbnQgbWF4X2xlbikKK3sKKwl1bmlvbiB7CisJCXUzMiBsOworCQl1OCBjWzRdOworCX0gdmVyOworCWNoYXIgZndfdmVyWzMyXTsKKworCXZlci5sID0gYWRhcHRlci0+ZndfcmVsZWFzZV9udW1iZXI7CisJc3ByaW50Zihmd192ZXIsICIldS4ldS4ldS5wJXUiLCB2ZXIuY1syXSwgdmVyLmNbMV0sIHZlci5jWzBdLCB2ZXIuY1szXSk7CisKKwlzbnByaW50Zih2ZXJzaW9uLCBtYXhfbGVuLCBkcml2ZXJfdmVyc2lvbiwgZndfdmVyKTsKKworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogTVdJRklFWCBWRVJTSU9OOiAlc1xuIiwgdmVyc2lvbik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNlbmRzIElPQ1RMIHJlcXVlc3QgdG8gZ2V0IHNpZ25hbCBpbmZvcm1hdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyB0aGUgSU9DVEwgcmVxdWVzdCBidWZmZXIsIGZpbGxzIGl0CisgKiB3aXRoIHJlcXVpc2l0ZSBwYXJhbWV0ZXJzIGFuZCBjYWxscyB0aGUgSU9DVEwgaGFuZGxlci4KKyAqLworaW50IG13aWZpZXhfZ2V0X3NpZ25hbF9pbmZvKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgc3RydWN0IG13aWZpZXhfZHNfZ2V0X3NpZ25hbCAqc2lnbmFsKQoreworCWludCBzdGF0dXM7CisKKwlzaWduYWwtPnNlbGVjdG9yID0gQUxMX1JTU0lfSU5GT19NQVNLOworCisJLyogU2lnbmFsIGluZm8gY2FuIGJlIG9idGFpbmVkIG9ubHkgaWYgY29ubmVjdGVkICovCisJaWYgKCFwcml2LT5tZWRpYV9jb25uZWN0ZWQpIHsKKwkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkiaW5mbzogQ2FuIG5vdCBnZXQgc2lnbmFsIGluIGRpc2Nvbm5lY3RlZCBzdGF0ZVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlzdGF0dXMgPSBtd2lmaWV4X3NlbmRfY21kX3N5bmMocHJpdiwgSG9zdENtZF9DTURfUlNTSV9JTkZPLAorCQkJCSAgICAgICBIb3N0Q21kX0FDVF9HRU5fR0VULCAwLCBzaWduYWwpOworCisJaWYgKCFzdGF0dXMpIHsKKwkJaWYgKHNpZ25hbC0+c2VsZWN0b3IgJiBCQ05fUlNTSV9BVkdfTUFTSykKKwkJCXByaXYtPndfc3RhdHMucXVhbC5sZXZlbCA9IHNpZ25hbC0+YmNuX3Jzc2lfYXZnOworCQlpZiAoc2lnbmFsLT5zZWxlY3RvciAmIEJDTl9ORl9BVkdfTUFTSykKKwkJCXByaXYtPndfc3RhdHMucXVhbC5ub2lzZSA9IHNpZ25hbC0+YmNuX25mX2F2ZzsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogU2VuZHMgSU9DVEwgcmVxdWVzdCB0byBzZXQgZW5jb2RpbmcgcGFyYW1ldGVycy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyB0aGUgSU9DVEwgcmVxdWVzdCBidWZmZXIsIGZpbGxzIGl0CisgKiB3aXRoIHJlcXVpc2l0ZSBwYXJhbWV0ZXJzIGFuZCBjYWxscyB0aGUgSU9DVEwgaGFuZGxlci4KKyAqLworaW50IG13aWZpZXhfc2V0X2VuY29kZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBjb25zdCB1OCAqa2V5LAorCQkJaW50IGtleV9sZW4sIHU4IGtleV9pbmRleCwgaW50IGRpc2FibGUpCit7CisJc3RydWN0IG13aWZpZXhfZHNfZW5jcnlwdF9rZXkgZW5jcnlwdF9rZXk7CisKKwltZW1zZXQoJmVuY3J5cHRfa2V5LCAwLCBzaXplb2Yoc3RydWN0IG13aWZpZXhfZHNfZW5jcnlwdF9rZXkpKTsKKwllbmNyeXB0X2tleS5rZXlfbGVuID0ga2V5X2xlbjsKKwlpZiAoIWRpc2FibGUpIHsKKwkJZW5jcnlwdF9rZXkua2V5X2luZGV4ID0ga2V5X2luZGV4OworCQlpZiAoa2V5X2xlbikKKwkJCW1lbWNweShlbmNyeXB0X2tleS5rZXlfbWF0ZXJpYWwsIGtleSwga2V5X2xlbik7CisJfSBlbHNlIHsKKwkJZW5jcnlwdF9rZXkua2V5X2Rpc2FibGUgPSB0cnVlOworCX0KKworCXJldHVybiBtd2lmaWV4X3NlY19pb2N0bF9lbmNyeXB0X2tleShwcml2LCAmZW5jcnlwdF9rZXkpOworfQorCisvKgorICogU2VuZHMgSU9DVEwgcmVxdWVzdCB0byBnZXQgZXh0ZW5kZWQgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyB0aGUgSU9DVEwgcmVxdWVzdCBidWZmZXIsIGZpbGxzIGl0CisgKiB3aXRoIHJlcXVpc2l0ZSBwYXJhbWV0ZXJzIGFuZCBjYWxscyB0aGUgSU9DVEwgaGFuZGxlci4KKyAqLworaW50Cittd2lmaWV4X2dldF92ZXJfZXh0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpCit7CisJc3RydWN0IG13aWZpZXhfdmVyX2V4dCB2ZXJfZXh0OworCisJbWVtc2V0KCZ2ZXJfZXh0LCAwLCBzaXplb2Yoc3RydWN0IGhvc3RfY21kX2RzX3ZlcnNpb25fZXh0KSk7CisJaWYgKG13aWZpZXhfc2VuZF9jbWRfc3luYyhwcml2LCBIb3N0Q21kX0NNRF9WRVJTSU9OX0VYVCwKKwkJCQkgICAgSG9zdENtZF9BQ1RfR0VOX0dFVCwgMCwgJnZlcl9leHQpKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNlbmRzIElPQ1RMIHJlcXVlc3QgdG8gZ2V0IHN0YXRpc3RpY3MgaW5mb3JtYXRpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgdGhlIElPQ1RMIHJlcXVlc3QgYnVmZmVyLCBmaWxscyBpdAorICogd2l0aCByZXF1aXNpdGUgcGFyYW1ldGVycyBhbmQgY2FsbHMgdGhlIElPQ1RMIGhhbmRsZXIuCisgKi8KK2ludAorbXdpZmlleF9nZXRfc3RhdHNfaW5mbyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkgICAgICAgc3RydWN0IG13aWZpZXhfZHNfZ2V0X3N0YXRzICpsb2cpCit7CisJaW50IHJldDsKKworCXJldCA9IG13aWZpZXhfc2VuZF9jbWRfc3luYyhwcml2LCBIb3N0Q21kX0NNRF84MDJfMTFfR0VUX0xPRywKKwkJCQkgICAgSG9zdENtZF9BQ1RfR0VOX0dFVCwgMCwgbG9nKTsKKworCWlmICghcmV0KSB7CisJCXByaXYtPndfc3RhdHMuZGlzY2FyZC5mcmFnbWVudCA9IGxvZy0+ZmNzX2Vycm9yOworCQlwcml2LT53X3N0YXRzLmRpc2NhcmQucmV0cmllcyA9IGxvZy0+cmV0cnk7CisJCXByaXYtPndfc3RhdHMuZGlzY2FyZC5taXNjID0gbG9nLT5hY2tfZmFpbHVyZTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogSU9DVEwgcmVxdWVzdCBoYW5kbGVyIHRvIHJlYWQvd3JpdGUgcmVnaXN0ZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyB0aGUgY29ycmVjdCBmaXJtd2FyZSBjb21tYW5kIGFuZAorICogaXNzdWVzIGl0LgorICoKKyAqIEFjY2VzcyB0byB0aGUgZm9sbG93aW5nIHJlZ2lzdGVycyBhcmUgc3VwcG9ydGVkIC0KKyAqICAgICAgLSBNQUMKKyAqICAgICAgLSBCQlAKKyAqICAgICAgLSBSRgorICogICAgICAtIFBNSUMKKyAqICAgICAgLSBDQVUKKyAqLworc3RhdGljIGludCBtd2lmaWV4X3JlZ19tZW1faW9jdGxfcmVnX3J3KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJCXN0cnVjdCBtd2lmaWV4X2RzX3JlZ19ydyAqcmVnX3J3LAorCQkJCQl1MTYgYWN0aW9uKQoreworCXUxNiBjbWRfbm87CisKKwlzd2l0Y2ggKGxlMzJfdG9fY3B1KHJlZ19ydy0+dHlwZSkpIHsKKwljYXNlIE1XSUZJRVhfUkVHX01BQzoKKwkJY21kX25vID0gSG9zdENtZF9DTURfTUFDX1JFR19BQ0NFU1M7CisJCWJyZWFrOworCWNhc2UgTVdJRklFWF9SRUdfQkJQOgorCQljbWRfbm8gPSBIb3N0Q21kX0NNRF9CQlBfUkVHX0FDQ0VTUzsKKwkJYnJlYWs7CisJY2FzZSBNV0lGSUVYX1JFR19SRjoKKwkJY21kX25vID0gSG9zdENtZF9DTURfUkZfUkVHX0FDQ0VTUzsKKwkJYnJlYWs7CisJY2FzZSBNV0lGSUVYX1JFR19QTUlDOgorCQljbWRfbm8gPSBIb3N0Q21kX0NNRF9QTUlDX1JFR19BQ0NFU1M7CisJCWJyZWFrOworCWNhc2UgTVdJRklFWF9SRUdfQ0FVOgorCQljbWRfbm8gPSBIb3N0Q21kX0NNRF9DQVVfUkVHX0FDQ0VTUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiBtd2lmaWV4X3NlbmRfY21kX3N5bmMocHJpdiwgY21kX25vLCBhY3Rpb24sIDAsIHJlZ19ydyk7CisKK30KKworLyoKKyAqIFNlbmRzIElPQ1RMIHJlcXVlc3QgdG8gd3JpdGUgdG8gYSByZWdpc3Rlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyB0aGUgSU9DVEwgcmVxdWVzdCBidWZmZXIsIGZpbGxzIGl0CisgKiB3aXRoIHJlcXVpc2l0ZSBwYXJhbWV0ZXJzIGFuZCBjYWxscyB0aGUgSU9DVEwgaGFuZGxlci4KKyAqLworaW50Cittd2lmaWV4X3JlZ193cml0ZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1MzIgcmVnX3R5cGUsCisJCSAgdTMyIHJlZ19vZmZzZXQsIHUzMiByZWdfdmFsdWUpCit7CisJc3RydWN0IG13aWZpZXhfZHNfcmVnX3J3IHJlZ19ydzsKKworCXJlZ19ydy50eXBlID0gY3B1X3RvX2xlMzIocmVnX3R5cGUpOworCXJlZ19ydy5vZmZzZXQgPSBjcHVfdG9fbGUzMihyZWdfb2Zmc2V0KTsKKwlyZWdfcncudmFsdWUgPSBjcHVfdG9fbGUzMihyZWdfdmFsdWUpOworCisJcmV0dXJuIG13aWZpZXhfcmVnX21lbV9pb2N0bF9yZWdfcncocHJpdiwgJnJlZ19ydywgSG9zdENtZF9BQ1RfR0VOX1NFVCk7Cit9CisKKy8qCisgKiBTZW5kcyBJT0NUTCByZXF1ZXN0IHRvIHJlYWQgZnJvbSBhIHJlZ2lzdGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIHRoZSBJT0NUTCByZXF1ZXN0IGJ1ZmZlciwgZmlsbHMgaXQKKyAqIHdpdGggcmVxdWlzaXRlIHBhcmFtZXRlcnMgYW5kIGNhbGxzIHRoZSBJT0NUTCBoYW5kbGVyLgorICovCitpbnQKK213aWZpZXhfcmVnX3JlYWQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTMyIHJlZ190eXBlLAorCQkgdTMyIHJlZ19vZmZzZXQsIHUzMiAqdmFsdWUpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbXdpZmlleF9kc19yZWdfcncgcmVnX3J3OworCisJcmVnX3J3LnR5cGUgPSBjcHVfdG9fbGUzMihyZWdfdHlwZSk7CisJcmVnX3J3Lm9mZnNldCA9IGNwdV90b19sZTMyKHJlZ19vZmZzZXQpOworCXJldCA9IG13aWZpZXhfcmVnX21lbV9pb2N0bF9yZWdfcncocHJpdiwgJnJlZ19ydywgSG9zdENtZF9BQ1RfR0VOX0dFVCk7CisKKwlpZiAocmV0KQorCQlnb3RvIGRvbmU7CisKKwkqdmFsdWUgPSBsZTMyX3RvX2NwdShyZWdfcncudmFsdWUpOworCitkb25lOgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBTZW5kcyBJT0NUTCByZXF1ZXN0IHRvIHJlYWQgZnJvbSBFRVBST00uCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgdGhlIElPQ1RMIHJlcXVlc3QgYnVmZmVyLCBmaWxscyBpdAorICogd2l0aCByZXF1aXNpdGUgcGFyYW1ldGVycyBhbmQgY2FsbHMgdGhlIElPQ1RMIGhhbmRsZXIuCisgKi8KK2ludAorbXdpZmlleF9lZXByb21fcmVhZChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1MTYgb2Zmc2V0LCB1MTYgYnl0ZXMsCisJCSAgICB1OCAqdmFsdWUpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbXdpZmlleF9kc19yZWFkX2VlcHJvbSByZF9lZXByb207CisKKwlyZF9lZXByb20ub2Zmc2V0ID0gY3B1X3RvX2xlMTYoKHUxNikgb2Zmc2V0KTsKKwlyZF9lZXByb20uYnl0ZV9jb3VudCA9IGNwdV90b19sZTE2KCh1MTYpIGJ5dGVzKTsKKworCS8qIFNlbmQgcmVxdWVzdCB0byBmaXJtd2FyZSAqLworCXJldCA9IG13aWZpZXhfc2VuZF9jbWRfc3luYyhwcml2LCBIb3N0Q21kX0NNRF84MDJfMTFfRUVQUk9NX0FDQ0VTUywKKwkJCQkgICAgSG9zdENtZF9BQ1RfR0VOX0dFVCwgMCwgJnJkX2VlcHJvbSk7CisKKwlpZiAoIXJldCkKKwkJbWVtY3B5KHZhbHVlLCByZF9lZXByb20udmFsdWUsIE1BWF9FRVBST01fREFUQSk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyBhIGdlbmVyaWMgSUUuIEluIGFkZGl0aW9uIHRvIGdlbmVyaWMgSUUsIGl0IGNhbgorICogYWxzbyBoYW5kbGUgV1BBLCBXUEEyIGFuZCBXQVBJIElFcy4KKyAqLworc3RhdGljIGludAorbXdpZmlleF9zZXRfZ2VuX2llX2hlbHBlcihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCAqaWVfZGF0YV9wdHIsCisJCQkgIHUxNiBpZV9sZW4pCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGllZWVfdHlwZXNfdmVuZG9yX2hlYWRlciAqcHZlbmRvcl9pZTsKKwljb25zdCB1OCB3cGFfb3VpW10gPSB7IDB4MDAsIDB4NTAsIDB4ZjIsIDB4MDEgfTsKKwljb25zdCB1OCB3cHNfb3VpW10gPSB7IDB4MDAsIDB4NTAsIDB4ZjIsIDB4MDQgfTsKKworCS8qIElmIHRoZSBwYXNzZWQgbGVuZ3RoIGlzIHplcm8sIHJlc2V0IHRoZSBidWZmZXIgKi8KKwlpZiAoIWllX2xlbikgeworCQlwcml2LT5nZW5faWVfYnVmX2xlbiA9IDA7CisJCXByaXYtPndwcy5zZXNzaW9uX2VuYWJsZSA9IGZhbHNlOworCisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIWllX2RhdGFfcHRyKSB7CisJCXJldHVybiAtMTsKKwl9CisJcHZlbmRvcl9pZSA9IChzdHJ1Y3QgaWVlZV90eXBlc192ZW5kb3JfaGVhZGVyICopIGllX2RhdGFfcHRyOworCS8qIFRlc3QgdG8gc2VlIGlmIGl0IGlzIGEgV1BBIElFLCBpZiBub3QsIHRoZW4gaXQgaXMgYSBnZW4gSUUgKi8KKwlpZiAoKChwdmVuZG9yX2llLT5lbGVtZW50X2lkID09IFdMQU5fRUlEX1dQQSkKKwkgICAgICYmICghbWVtY21wKHB2ZW5kb3JfaWUtPm91aSwgd3BhX291aSwgc2l6ZW9mKHdwYV9vdWkpKSkpCisJCQl8fCAocHZlbmRvcl9pZS0+ZWxlbWVudF9pZCA9PSBXTEFOX0VJRF9SU04pKSB7CisKKwkJLyogSUUgaXMgYSBXUEEvV1BBMiBJRSBzbyBjYWxsIHNldF93cGEgZnVuY3Rpb24gKi8KKwkJcmV0ID0gbXdpZmlleF9zZXRfd3BhX2llX2hlbHBlcihwcml2LCBpZV9kYXRhX3B0ciwgaWVfbGVuKTsKKwkJcHJpdi0+d3BzLnNlc3Npb25fZW5hYmxlID0gZmFsc2U7CisKKwkJcmV0dXJuIHJldDsKKwl9IGVsc2UgaWYgKHB2ZW5kb3JfaWUtPmVsZW1lbnRfaWQgPT0gV0xBTl9FSURfQlNTX0FDX0FDQ0VTU19ERUxBWSkgeworCQkvKiBJRSBpcyBhIFdBUEkgSUUgc28gY2FsbCBzZXRfd2FwaSBmdW5jdGlvbiAqLworCQlyZXQgPSBtd2lmaWV4X3NldF93YXBpX2llKHByaXYsIGllX2RhdGFfcHRyLCBpZV9sZW4pOworCisJCXJldHVybiByZXQ7CisJfQorCS8qCisJICogVmVyaWZ5IHRoYXQgdGhlIHBhc3NlZCBsZW5ndGggaXMgbm90IGxhcmdlciB0aGFuIHRoZQorCSAqIGF2YWlsYWJsZSBzcGFjZSByZW1haW5pbmcgaW4gdGhlIGJ1ZmZlcgorCSAqLworCWlmIChpZV9sZW4gPCAoc2l6ZW9mKHByaXYtPmdlbl9pZV9idWYpIC0gcHJpdi0+Z2VuX2llX2J1Zl9sZW4pKSB7CisKKwkJLyogVGVzdCB0byBzZWUgaWYgaXQgaXMgYSBXUFMgSUUsIGlmIHNvLCBlbmFibGUKKwkJICogd3BzIHNlc3Npb24gZmxhZworCQkgKi8KKwkJcHZlbmRvcl9pZSA9IChzdHJ1Y3QgaWVlZV90eXBlc192ZW5kb3JfaGVhZGVyICopIGllX2RhdGFfcHRyOworCQlpZiAoKHB2ZW5kb3JfaWUtPmVsZW1lbnRfaWQgPT0gV0xBTl9FSURfVkVORE9SX1NQRUNJRklDKQorCQkJCSYmICghbWVtY21wKHB2ZW5kb3JfaWUtPm91aSwgd3BzX291aSwKKwkJCQkJCXNpemVvZih3cHNfb3VpKSkpKSB7CisJCQlwcml2LT53cHMuc2Vzc2lvbl9lbmFibGUgPSB0cnVlOworCQkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkJImluZm86IFdQUyBTZXNzaW9uIEVuYWJsZWQuXG4iKTsKKwkJfQorCisJCS8qIEFwcGVuZCB0aGUgcGFzc2VkIGRhdGEgdG8gdGhlIGVuZCBvZiB0aGUKKwkJICAgZ2VuSWVCdWZmZXIgKi8KKwkJbWVtY3B5KHByaXYtPmdlbl9pZV9idWYgKyBwcml2LT5nZW5faWVfYnVmX2xlbiwgaWVfZGF0YV9wdHIsCisJCQkJCQkJCQlpZV9sZW4pOworCQkvKiBJbmNyZW1lbnQgdGhlIHN0b3JlZCBidWZmZXIgbGVuZ3RoIGJ5IHRoZQorCQkgICBzaXplIHBhc3NlZCAqLworCQlwcml2LT5nZW5faWVfYnVmX2xlbiArPSBpZV9sZW47CisJfSBlbHNlIHsKKwkJLyogUGFzc2VkIGRhdGEgZG9lcyBub3QgZml0IGluIHRoZSByZW1haW5pbmcKKwkJICAgYnVmZmVyIHNwYWNlICovCisJCXJldCA9IC0xOworCX0KKworCS8qIFJldHVybiAwLCBvciAtMSBmb3IgZXJyb3IgY2FzZSAqLworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBJT0NUTCByZXF1ZXN0IGhhbmRsZXIgdG8gc2V0L2dldCBnZW5lcmljIElFLgorICoKKyAqIEluIGFkZGl0aW9uIHRvIHZhcmlvdXMgZ2VuZXJpYyBJRXMsIHRoaXMgZnVuY3Rpb24gY2FuIGFsc28gYmUKKyAqIHVzZWQgdG8gc2V0IHRoZSBBUlAgZmlsdGVyLgorICovCitzdGF0aWMgaW50IG13aWZpZXhfbWlzY19pb2N0bF9nZW5faWUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgICAgIHN0cnVjdCBtd2lmaWV4X2RzX21pc2NfZ2VuX2llICpnZW5faWUsCisJCQkJICAgICB1MTYgYWN0aW9uKQoreworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCisJc3dpdGNoIChnZW5faWUtPnR5cGUpIHsKKwljYXNlIE1XSUZJRVhfSUVfVFlQRV9HRU5fSUU6CisJCWlmIChhY3Rpb24gPT0gSG9zdENtZF9BQ1RfR0VOX0dFVCkgeworCQkJZ2VuX2llLT5sZW4gPSBwcml2LT53cGFfaWVfbGVuOworCQkJbWVtY3B5KGdlbl9pZS0+aWVfZGF0YSwgcHJpdi0+d3BhX2llLCBnZW5faWUtPmxlbik7CisJCX0gZWxzZSB7CisJCQltd2lmaWV4X3NldF9nZW5faWVfaGVscGVyKHByaXYsIGdlbl9pZS0+aWVfZGF0YSwKKwkJCQkJCSAgKHUxNikgZ2VuX2llLT5sZW4pOworCQl9CisJCWJyZWFrOworCWNhc2UgTVdJRklFWF9JRV9UWVBFX0FSUF9GSUxURVI6CisJCW1lbXNldChhZGFwdGVyLT5hcnBfZmlsdGVyLCAwLCBzaXplb2YoYWRhcHRlci0+YXJwX2ZpbHRlcikpOworCQlpZiAoZ2VuX2llLT5sZW4gPiBBUlBfRklMVEVSX01BWF9CVUZfU0laRSkgeworCQkJYWRhcHRlci0+YXJwX2ZpbHRlcl9zaXplID0gMDsKKwkJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiaW52YWxpZCBBUlAgZmlsdGVyIHNpemVcbiIpOworCQkJcmV0dXJuIC0xOworCQl9IGVsc2UgeworCQkJbWVtY3B5KGFkYXB0ZXItPmFycF9maWx0ZXIsIGdlbl9pZS0+aWVfZGF0YSwKKwkJCQkJCQkJZ2VuX2llLT5sZW4pOworCQkJYWRhcHRlci0+YXJwX2ZpbHRlcl9zaXplID0gZ2VuX2llLT5sZW47CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJpbnZhbGlkIElFIHR5cGVcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogU2VuZHMgSU9DVEwgcmVxdWVzdCB0byBzZXQgYSBnZW5lcmljIElFLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIHRoZSBJT0NUTCByZXF1ZXN0IGJ1ZmZlciwgZmlsbHMgaXQKKyAqIHdpdGggcmVxdWlzaXRlIHBhcmFtZXRlcnMgYW5kIGNhbGxzIHRoZSBJT0NUTCBoYW5kbGVyLgorICovCitpbnQKK213aWZpZXhfc2V0X2dlbl9pZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCAqaWUsIGludCBpZV9sZW4pCit7CisJc3RydWN0IG13aWZpZXhfZHNfbWlzY19nZW5faWUgZ2VuX2llOworCisJaWYgKGllX2xlbiA+IElXX0NVU1RPTV9NQVgpCisJCXJldHVybiAtRUZBVUxUOworCisJZ2VuX2llLnR5cGUgPSBNV0lGSUVYX0lFX1RZUEVfR0VOX0lFOworCWdlbl9pZS5sZW4gPSBpZV9sZW47CisJbWVtY3B5KGdlbl9pZS5pZV9kYXRhLCBpZSwgaWVfbGVuKTsKKwlpZiAobXdpZmlleF9taXNjX2lvY3RsX2dlbl9pZShwcml2LCAmZ2VuX2llLCBIb3N0Q21kX0FDVF9HRU5fU0VUKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvc3RhX3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3N0YV9yeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZGRkZWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3N0YV9yeC5jCkBAIC0wLDAgKzEsMjAwIEBACisvKgorICogTWFydmVsbCBXaXJlbGVzcyBMQU4gZGV2aWNlIGRyaXZlcjogc3RhdGlvbiBSWCBkYXRhIGhhbmRsaW5nCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRlcm5hdGlvbmFsCisgKiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKyAqICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgdXNlLCByZWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgaW4KKyAqIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UsIGEgY29weSBvZiB3aGljaAorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0Egb3Igb24gdGhlCisgKiB3b3JsZHdpZGUgd2ViIGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQuCisgKgorICogVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4gIFRoZSBMaWNlbnNlIHByb3ZpZGVzIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dAorICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLgorICovCisKKyNpbmNsdWRlICJkZWNsLmgiCisjaW5jbHVkZSAiaW9jdGwuaCIKKyNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAiZncuaCIKKyNpbmNsdWRlICJtYWluLmgiCisjaW5jbHVkZSAiMTFuX2FnZ3IuaCIKKyNpbmNsdWRlICIxMW5fcnhyZW9yZGVyLmgiCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyB0aGUgcmVjZWl2ZWQgcGFja2V0IGFuZCBmb3J3YXJkcyBpdAorICogdG8ga2VybmVsL3VwcGVyIGxheWVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcGFyc2VzIHRocm91Z2ggdGhlIHJlY2VpdmVkIHBhY2tldCBhbmQgZGV0ZXJtaW5lcworICogaWYgaXQgaXMgYSBkZWJ1ZyBwYWNrZXQgb3Igbm9ybWFsIHBhY2tldC4KKyAqCisgKiBGb3Igbm9uLWRlYnVnIHBhY2tldHMsIHRoZSBmdW5jdGlvbiBjaG9wcyBvZmYgdW5uZWNlc3NhcnkgbGVhZGluZworICogaGVhZGVyIGJ5dGVzLCByZWNvbnN0cnVjdHMgdGhlIHBhY2tldCBhcyBhbiBldGhlcm5ldCBmcmFtZSBvcgorICogODAyLjIvbGxjL3NuYXAgZnJhbWUgYXMgcmVxdWlyZWQsIGFuZCBzZW5kcyBpdCB0byBrZXJuZWwvdXBwZXIgbGF5ZXIuCisgKgorICogVGhlIGNvbXBsZXRpb24gY2FsbGJhY2sgaXMgY2FsbGVkIGFmdGVyIHByb2Nlc3NpbmcgaW4gY29tcGxldGUuCisgKi8KK2ludCBtd2lmaWV4X3Byb2Nlc3NfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWludCByZXQ7CisJc3RydWN0IG13aWZpZXhfcnhpbmZvICpyeF9pbmZvID0gTVdJRklFWF9TS0JfUlhDQihza2IpOworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPSBhZGFwdGVyLT5wcml2W3J4X2luZm8tPmJzc19pbmRleF07CisJc3RydWN0IHJ4X3BhY2tldF9oZHIgKnJ4X3BrdF9oZHI7CisJc3RydWN0IHJ4cGQgKmxvY2FsX3J4X3BkOworCWludCBoZHJfY2hvcDsKKwlzdHJ1Y3QgZXRoaGRyICpldGhfaGRyOworCXU4IHJmYzEwNDJfZXRoX2hkcltFVEhfQUxFTl0gPSB7IDB4YWEsIDB4YWEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKworCWxvY2FsX3J4X3BkID0gKHN0cnVjdCByeHBkICopIChza2ItPmRhdGEpOworCisJcnhfcGt0X2hkciA9IChzdHJ1Y3QgcnhfcGFja2V0X2hkciAqKSAoKHU4ICopIGxvY2FsX3J4X3BkICsKKwkJCQlsb2NhbF9yeF9wZC0+cnhfcGt0X29mZnNldCk7CisKKwlpZiAoIW1lbWNtcCgmcnhfcGt0X2hkci0+cmZjMTA0Ml9oZHIsCisJCSAgICByZmMxMDQyX2V0aF9oZHIsIHNpemVvZihyZmMxMDQyX2V0aF9oZHIpKSkgeworCQkvKgorCQkgKiAgUmVwbGFjZSB0aGUgODAzIGhlYWRlciBhbmQgcmZjMTA0MiBoZWFkZXIgKGxsYy9zbmFwKSB3aXRoIGFuCisJCSAqICAgIEV0aGVybmV0SUkgaGVhZGVyLCBrZWVwIHRoZSBzcmMvZHN0IGFuZCBzbmFwX3R5cGUKKwkJICogICAgKGV0aGVydHlwZSkuCisJCSAqICBUaGUgZmlybXdhcmUgb25seSBwYXNzZXMgdXAgU05BUCBmcmFtZXMgY29udmVydGluZworCQkgKiAgICBhbGwgUlggRGF0YSBmcm9tIDgwMi4xMSB0byA4MDIuMi9MTEMvU05BUCBmcmFtZXMuCisJCSAqICBUbyBjcmVhdGUgdGhlIEV0aGVybmV0IElJLCBqdXN0IG1vdmUgdGhlIHNyYywgZHN0IGFkZHJlc3MKKwkJICogICAgcmlnaHQgYmVmb3JlIHRoZSBzbmFwX3R5cGUuCisJCSAqLworCQlldGhfaGRyID0gKHN0cnVjdCBldGhoZHIgKikKKwkJCSgodTggKikgJnJ4X3BrdF9oZHItPmV0aDgwM19oZHIKKwkJCSArIHNpemVvZihyeF9wa3RfaGRyLT5ldGg4MDNfaGRyKSArCisJCQkgc2l6ZW9mKHJ4X3BrdF9oZHItPnJmYzEwNDJfaGRyKQorCQkJIC0gc2l6ZW9mKHJ4X3BrdF9oZHItPmV0aDgwM19oZHIuaF9kZXN0KQorCQkJIC0gc2l6ZW9mKHJ4X3BrdF9oZHItPmV0aDgwM19oZHIuaF9zb3VyY2UpCisJCQkgLSBzaXplb2YocnhfcGt0X2hkci0+cmZjMTA0Ml9oZHIuc25hcF90eXBlKSk7CisKKwkJbWVtY3B5KGV0aF9oZHItPmhfc291cmNlLCByeF9wa3RfaGRyLT5ldGg4MDNfaGRyLmhfc291cmNlLAorCQkgICAgICAgc2l6ZW9mKGV0aF9oZHItPmhfc291cmNlKSk7CisJCW1lbWNweShldGhfaGRyLT5oX2Rlc3QsIHJ4X3BrdF9oZHItPmV0aDgwM19oZHIuaF9kZXN0LAorCQkgICAgICAgc2l6ZW9mKGV0aF9oZHItPmhfZGVzdCkpOworCisJCS8qIENob3Agb2ZmIHRoZSByeHBkICsgdGhlIGV4Y2VzcyBtZW1vcnkgZnJvbSB0aGUgODAyLjIvbGxjL3NuYXAKKwkJICAgaGVhZGVyIHRoYXQgd2FzIHJlbW92ZWQuICovCisJCWhkcl9jaG9wID0gKHU4ICopIGV0aF9oZHIgLSAodTggKikgbG9jYWxfcnhfcGQ7CisJfSBlbHNlIHsKKwkJLyogQ2hvcCBvZmYgdGhlIHJ4cGQgKi8KKwkJaGRyX2Nob3AgPSAodTggKikgJnJ4X3BrdF9oZHItPmV0aDgwM19oZHIgLQorCQkJKHU4ICopIGxvY2FsX3J4X3BkOworCX0KKworCS8qIENob3Agb2ZmIHRoZSBsZWFkaW5nIGhlYWRlciBieXRlcyBzbyB0aGUgaXQgcG9pbnRzIHRvIHRoZSBzdGFydCBvZgorCSAgIGVpdGhlciB0aGUgcmVjb25zdHJ1Y3RlZCBFdGhJSSBmcmFtZSBvciB0aGUgODAyLjIvbGxjL3NuYXAgZnJhbWUgKi8KKwlza2JfcHVsbChza2IsIGhkcl9jaG9wKTsKKworCXByaXYtPnJ4cGRfcmF0ZSA9IGxvY2FsX3J4X3BkLT5yeF9yYXRlOworCisJcHJpdi0+cnhwZF9odGluZm8gPSBsb2NhbF9yeF9wZC0+aHRfaW5mbzsKKworCXJldCA9IG13aWZpZXhfcmVjdl9wYWNrZXQoYWRhcHRlciwgc2tiKTsKKwlpZiAocmV0ID09IC0xKQorCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgInJlY3YgcGFja2V0IGZhaWxlZFxuIik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgdGhlIHJlY2VpdmVkIGJ1ZmZlci4KKyAqCisgKiBUaGUgZnVuY3Rpb24gbG9va3MgaW50byB0aGUgUnhQRCBhbmQgcGVyZm9ybXMgc2FuaXR5IHRlc3RzIG9uIHRoZQorICogcmVjZWl2ZWQgYnVmZmVyIHRvIGVuc3VyZSBpdHMgYSB2YWxpZCBwYWNrZXQsIGJlZm9yZSBwcm9jZXNzaW5nIGl0CisgKiBmdXJ0aGVyLiBJZiB0aGUgcGFja2V0IGlzIGRldGVybWluZWQgdG8gYmUgYWdncmVnYXRlZCwgaXQgaXMKKyAqIGRlLWFnZ3JlZ2F0ZWQgYWNjb3JkaW5nbHkuIE5vbi11bmljYXN0IHBhY2tldHMgYXJlIHNlbnQgZGlyZWN0bHkgdG8KKyAqIHRoZSBrZXJuZWwvdXBwZXIgbGF5ZXJzLiBVbmljYXN0IHBhY2tldHMgYXJlIGhhbmRlZCBvdmVyIHRvIHRoZQorICogUnggcmVvcmRlcmluZyByb3V0aW5lIGlmIDExbiBpcyBlbmFibGVkLgorICoKKyAqIFRoZSBjb21wbGV0aW9uIGNhbGxiYWNrIGlzIGNhbGxlZCBhZnRlciBwcm9jZXNzaW5nIGluIGNvbXBsZXRlLgorICovCitpbnQgbXdpZmlleF9wcm9jZXNzX3N0YV9yeF9wYWNrZXQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHJ4cGQgKmxvY2FsX3J4X3BkOworCXN0cnVjdCBtd2lmaWV4X3J4aW5mbyAqcnhfaW5mbyA9IE1XSUZJRVhfU0tCX1JYQ0Ioc2tiKTsKKwlzdHJ1Y3QgcnhfcGFja2V0X2hkciAqcnhfcGt0X2hkcjsKKwl1OCB0YVtFVEhfQUxFTl07CisJdTE2IHJ4X3BrdF90eXBlOworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPSBhZGFwdGVyLT5wcml2W3J4X2luZm8tPmJzc19pbmRleF07CisKKwlsb2NhbF9yeF9wZCA9IChzdHJ1Y3QgcnhwZCAqKSAoc2tiLT5kYXRhKTsKKwlyeF9wa3RfdHlwZSA9IGxvY2FsX3J4X3BkLT5yeF9wa3RfdHlwZTsKKworCXJ4X3BrdF9oZHIgPSAoc3RydWN0IHJ4X3BhY2tldF9oZHIgKikgKCh1OCAqKSBsb2NhbF9yeF9wZCArCisJCQkJCWxvY2FsX3J4X3BkLT5yeF9wa3Rfb2Zmc2V0KTsKKworCWlmICgobG9jYWxfcnhfcGQtPnJ4X3BrdF9vZmZzZXQgKyBsb2NhbF9yeF9wZC0+cnhfcGt0X2xlbmd0aCkgPgorCSAgICAodTE2KSBza2ItPmxlbikgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIndyb25nIHJ4IHBhY2tldDogbGVuPSVkLCIKKwkJCSIgcnhfcGt0X29mZnNldD0lZCwgcnhfcGt0X2xlbmd0aD0lZFxuIiwgc2tiLT5sZW4sCisJCSAgICAgICBsb2NhbF9yeF9wZC0+cnhfcGt0X29mZnNldCwgbG9jYWxfcnhfcGQtPnJ4X3BrdF9sZW5ndGgpOworCQlwcml2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGxvY2FsX3J4X3BkLT5yeF9wa3RfdHlwZSA9PSBQS1RfVFlQRV9BTVNEVSkgeworCQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGxpc3Q7CisJCXN0cnVjdCBza19idWZmICpyeF9za2I7CisKKwkJX19za2JfcXVldWVfaGVhZF9pbml0KCZsaXN0KTsKKworCQlza2JfcHVsbChza2IsIGxvY2FsX3J4X3BkLT5yeF9wa3Rfb2Zmc2V0KTsKKwkJc2tiX3RyaW0oc2tiLCBsb2NhbF9yeF9wZC0+cnhfcGt0X2xlbmd0aCk7CisKKwkJaWVlZTgwMjExX2Ftc2R1X3RvXzgwMjNzKHNrYiwgJmxpc3QsIHByaXYtPmN1cnJfYWRkciwKKwkJCQlwcml2LT53ZGV2LT5pZnR5cGUsIDAsIGZhbHNlKTsKKworCQl3aGlsZSAoIXNrYl9xdWV1ZV9lbXB0eSgmbGlzdCkpIHsKKwkJCXJ4X3NrYiA9IF9fc2tiX2RlcXVldWUoJmxpc3QpOworCQkJcmV0ID0gbXdpZmlleF9yZWN2X3BhY2tldChhZGFwdGVyLCByeF9za2IpOworCQkJaWYgKHJldCA9PSAtMSkKKwkJCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIlJ4IG9mIEEtTVNEVSBmYWlsZWQiKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIElmIHRoZSBwYWNrZXQgaXMgbm90IGFuIHVuaWNhc3QgcGFja2V0IHRoZW4gc2VuZCB0aGUgcGFja2V0CisJICogZGlyZWN0bHkgdG8gb3MuIERvbid0IHBhc3MgdGhydSByeCByZW9yZGVyaW5nCisJICovCisJaWYgKCFJU18xMU5fRU5BQkxFRChwcml2KSB8fAorCSAgICBtZW1jbXAocHJpdi0+Y3Vycl9hZGRyLCByeF9wa3RfaGRyLT5ldGg4MDNfaGRyLmhfZGVzdCwgRVRIX0FMRU4pKSB7CisJCW13aWZpZXhfcHJvY2Vzc19yeF9wYWNrZXQoYWRhcHRlciwgc2tiKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAobXdpZmlleF9xdWV1aW5nX3JhX2Jhc2VkKHByaXYpKSB7CisJCW1lbWNweSh0YSwgcnhfcGt0X2hkci0+ZXRoODAzX2hkci5oX3NvdXJjZSwgRVRIX0FMRU4pOworCX0gZWxzZSB7CisJCWlmIChyeF9wa3RfdHlwZSAhPSBQS1RfVFlQRV9CQVIpCisJCQlwcml2LT5yeF9zZXFbbG9jYWxfcnhfcGQtPnByaW9yaXR5XSA9CisJCQkJCQlsb2NhbF9yeF9wZC0+c2VxX251bTsKKwkJbWVtY3B5KHRhLCBwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IubWFjX2FkZHJlc3MsCisJCSAgICAgICBFVEhfQUxFTik7CisJfQorCisJLyogUmVvcmRlciBhbmQgc2VuZCB0byBPUyAqLworCXJldCA9IG13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0KHByaXYsIGxvY2FsX3J4X3BkLT5zZXFfbnVtLAorCQkJCQkgICAgIGxvY2FsX3J4X3BkLT5wcmlvcml0eSwgdGEsCisJCQkJCSAgICAgKHU4KSBsb2NhbF9yeF9wZC0+cnhfcGt0X3R5cGUsCisJCQkJCQkodm9pZCAqKSBza2IpOworCisJaWYgKHJldCB8fCAocnhfcGt0X3R5cGUgPT0gUEtUX1RZUEVfQkFSKSkgeworCQlpZiAocHJpdiAmJiAocmV0ID09IC0xKSkKKwkJCXByaXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCX0KKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3N0YV90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9zdGFfdHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTYyMjFiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9zdGFfdHguYwpAQCAtMCwwICsxLDE5OCBAQAorLyoKKyAqIE1hcnZlbGwgV2lyZWxlc3MgTEFOIGRldmljZSBkcml2ZXI6IHN0YXRpb24gVFggZGF0YSBoYW5kbGluZworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbAorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluCisgKiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gKKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBIG9yIG9uIHRoZQorICogd29ybGR3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0LgorICoKKyAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQKKyAqIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4KKyAqLworCisjaW5jbHVkZSAiZGVjbC5oIgorI2luY2x1ZGUgImlvY3RsLmgiCisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgImZ3LmgiCisjaW5jbHVkZSAibWFpbi5oIgorI2luY2x1ZGUgIndtbS5oIgorCisvKgorICogVGhpcyBmdW5jdGlvbiBmaWxscyB0aGUgVHhQRCBmb3IgdHggcGFja2V0cy4KKyAqCisgKiBUaGUgVHggYnVmZmVyIHJlY2VpdmVkIGJ5IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGFscmVhZHkgaGF2ZSB0aGUKKyAqIGhlYWRlciBzcGFjZSBhbGxvY2F0ZWQgZm9yIFR4UEQuCisgKgorICogVGhpcyBmdW5jdGlvbiBpbnNlcnRzIHRoZSBUeFBEIGluIGJldHdlZW4gaW50ZXJmYWNlIGhlYWRlciBhbmQgYWN0dWFsCisgKiBkYXRhIGFuZCBhZGp1c3RzIHRoZSBidWZmZXIgcG9pbnRlcnMgYWNjb3JkaW5nbHkuCisgKgorICogVGhlIGZvbGxvd2luZyBUeFBEIGZpZWxkcyBhcmUgc2V0IGJ5IHRoaXMgZnVuY3Rpb24sIGFzIHJlcXVpcmVkIC0KKyAqICAgICAgLSBCU1MgbnVtYmVyCisgKiAgICAgIC0gVHggcGFja2V0IGxlbmd0aCBhbmQgb2Zmc2V0CisgKiAgICAgIC0gUHJpb3JpdHkKKyAqICAgICAgLSBQYWNrZXQgZGVsYXkKKyAqICAgICAgLSBQcmlvcml0eSBzcGVjaWZpYyBUeCBjb250cm9sCisgKiAgICAgIC0gRmxhZ3MKKyAqLwordm9pZCAqbXdpZmlleF9wcm9jZXNzX3N0YV90eHBkKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwlzdHJ1Y3QgdHhwZCAqbG9jYWxfdHhfcGQ7CisJc3RydWN0IG13aWZpZXhfdHhpbmZvICp0eF9pbmZvID0gTVdJRklFWF9TS0JfVFhDQihza2IpOworCisJaWYgKCFza2ItPmxlbikgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIlR4OiBiYWQgcGFja2V0IGxlbmd0aDogJWRcbiIsCisJCSAgICAgICBza2ItPmxlbik7CisJCXR4X2luZm8tPnN0YXR1c19jb2RlID0gLTE7CisJCXJldHVybiBza2ItPmRhdGE7CisJfQorCisJQlVHX09OKHNrYl9oZWFkcm9vbShza2IpIDwgKHNpemVvZigqbG9jYWxfdHhfcGQpICsgSU5URl9IRUFERVJfTEVOKSk7CisJc2tiX3B1c2goc2tiLCBzaXplb2YoKmxvY2FsX3R4X3BkKSk7CisKKwlsb2NhbF90eF9wZCA9IChzdHJ1Y3QgdHhwZCAqKSBza2ItPmRhdGE7CisJbWVtc2V0KGxvY2FsX3R4X3BkLCAwLCBzaXplb2Yoc3RydWN0IHR4cGQpKTsKKwlsb2NhbF90eF9wZC0+YnNzX251bSA9IHByaXYtPmJzc19udW07CisJbG9jYWxfdHhfcGQtPmJzc190eXBlID0gcHJpdi0+YnNzX3R5cGU7CisJbG9jYWxfdHhfcGQtPnR4X3BrdF9sZW5ndGggPSBjcHVfdG9fbGUxNigodTE2KSAoc2tiLT5sZW4gLQorCQkJCQkJCXNpemVvZihzdHJ1Y3QgdHhwZCkpKTsKKworCWxvY2FsX3R4X3BkLT5wcmlvcml0eSA9ICh1OCkgc2tiLT5wcmlvcml0eTsKKwlsb2NhbF90eF9wZC0+cGt0X2RlbGF5XzJtcyA9CisJCW13aWZpZXhfd21tX2NvbXB1dGVfZHJ2X3BrdF9kZWxheShwcml2LCBza2IpOworCisJaWYgKGxvY2FsX3R4X3BkLT5wcmlvcml0eSA8CisJICAgIEFSUkFZX1NJWkUocHJpdi0+d21tLnVzZXJfcHJpX3BrdF90eF9jdHJsKSkKKwkJLyoKKwkJICogU2V0IHRoZSBwcmlvcml0eSBzcGVjaWZpYyB0eF9jb250cm9sIGZpZWxkLCBzZXR0aW5nIG9mIDAgd2lsbAorCQkgKiAgIGNhdXNlIHRoZSBkZWZhdWx0IHZhbHVlIHRvIGJlIHVzZWQgbGF0ZXIgaW4gdGhpcyBmdW5jdGlvbgorCQkgKi8KKwkJbG9jYWxfdHhfcGQtPnR4X2NvbnRyb2wgPQorCQkJY3B1X3RvX2xlMzIocHJpdi0+d21tLnVzZXJfcHJpX3BrdF90eF9jdHJsW2xvY2FsX3R4X3BkLT4KKwkJCQkJCQkgcHJpb3JpdHldKTsKKworCWlmIChhZGFwdGVyLT5wcHNfdWFwc2RfbW9kZSkgeworCQlpZiAobXdpZmlleF9jaGVja19sYXN0X3BhY2tldF9pbmRpY2F0aW9uKHByaXYpKSB7CisJCQlhZGFwdGVyLT50eF9sb2NrX2ZsYWcgPSB0cnVlOworCQkJbG9jYWxfdHhfcGQtPmZsYWdzID0KKwkJCQlNV0lGSUVYX1R4UERfUE9XRVJfTUdNVF9MQVNUX1BBQ0tFVDsKKwkJfQorCX0KKworCS8qIE9mZnNldCBvZiBhY3R1YWwgZGF0YSAqLworCWxvY2FsX3R4X3BkLT50eF9wa3Rfb2Zmc2V0ID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCB0eHBkKSk7CisKKwkvKiBtYWtlIHNwYWNlIGZvciBJTlRGX0hFQURFUl9MRU4gKi8KKwlza2JfcHVzaChza2IsIElOVEZfSEVBREVSX0xFTik7CisKKwlpZiAoIWxvY2FsX3R4X3BkLT50eF9jb250cm9sKQorCQkvKiBUeEN0cmwgc2V0IGJ5IHVzZXIgb3IgZGVmYXVsdCAqLworCQlsb2NhbF90eF9wZC0+dHhfY29udHJvbCA9IGNwdV90b19sZTMyKHByaXYtPnBrdF90eF9jdHJsKTsKKworCXJldHVybiBza2ItPmRhdGE7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHRlbGxzIGZpcm13YXJlIHRvIHNlbmQgYSBOVUxMIGRhdGEgcGFja2V0LgorICoKKyAqIFRoZSBmdW5jdGlvbiBjcmVhdGVzIGEgTlVMTCBkYXRhIHBhY2tldCB3aXRoIFR4UEQgYW5kIHNlbmRzIHRvIHRoZQorICogZmlybXdhcmUgZm9yIHRyYW5zbWlzc2lvbiwgd2l0aCBoaWdoZXN0IHByaW9yaXR5IHNldHRpbmcuCisgKi8KK2ludCBtd2lmaWV4X3NlbmRfbnVsbF9wYWNrZXQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggZmxhZ3MpCit7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IHR4cGQgKmxvY2FsX3R4X3BkOworLyogc2l6ZW9mKHN0cnVjdCB0eHBkKSArIEludGVyZmFjZSBzcGVjaWZpYyBoZWFkZXIgKi8KKyNkZWZpbmUgTlVMTF9QQUNLRVRfSERSIDY0CisJdTMyIGRhdGFfbGVuID0gTlVMTF9QQUNLRVRfSERSOworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IHJldDsKKwlzdHJ1Y3QgbXdpZmlleF90eGluZm8gKnR4X2luZm8gPSBOVUxMOworCisJaWYgKGFkYXB0ZXItPnN1cnByaXNlX3JlbW92ZWQpCisJCXJldHVybiAtMTsKKworCWlmICghcHJpdi0+bWVkaWFfY29ubmVjdGVkKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoYWRhcHRlci0+ZGF0YV9zZW50KQorCQlyZXR1cm4gLTE7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGRhdGFfbGVuKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIC0xOworCisJdHhfaW5mbyA9IE1XSUZJRVhfU0tCX1RYQ0Ioc2tiKTsKKwl0eF9pbmZvLT5ic3NfaW5kZXggPSBwcml2LT5ic3NfaW5kZXg7CisJc2tiX3Jlc2VydmUoc2tiLCBzaXplb2Yoc3RydWN0IHR4cGQpICsgSU5URl9IRUFERVJfTEVOKTsKKwlza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgdHhwZCkpOworCisJbG9jYWxfdHhfcGQgPSAoc3RydWN0IHR4cGQgKikgc2tiLT5kYXRhOworCWxvY2FsX3R4X3BkLT50eF9jb250cm9sID0gY3B1X3RvX2xlMzIocHJpdi0+cGt0X3R4X2N0cmwpOworCWxvY2FsX3R4X3BkLT5mbGFncyA9IGZsYWdzOworCWxvY2FsX3R4X3BkLT5wcmlvcml0eSA9IFdNTV9ISUdIRVNUX1BSSU9SSVRZOworCWxvY2FsX3R4X3BkLT50eF9wa3Rfb2Zmc2V0ID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCB0eHBkKSk7CisJbG9jYWxfdHhfcGQtPmJzc19udW0gPSBwcml2LT5ic3NfbnVtOworCWxvY2FsX3R4X3BkLT5ic3NfdHlwZSA9IHByaXYtPmJzc190eXBlOworCisJc2tiX3B1c2goc2tiLCBJTlRGX0hFQURFUl9MRU4pOworCisJcmV0ID0gYWRhcHRlci0+aWZfb3BzLmhvc3RfdG9fY2FyZChhZGFwdGVyLCBNV0lGSUVYX1RZUEVfREFUQSwKKwkJCQkJICAgICBza2ItPmRhdGEsIHNrYi0+bGVuLCBOVUxMKTsKKwlzd2l0Y2ggKHJldCkgeworCWNhc2UgLUVCVVNZOgorCQlhZGFwdGVyLT5kYXRhX3NlbnQgPSB0cnVlOworCQkvKiBGYWxsIHRocm91Z2ggRkFJTFVSRSBoYW5kbGluZyAqLworCWNhc2UgLTE6CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiJXM6IGhvc3RfdG9fY2FyZCBmYWlsZWQ6IHJldD0lZFxuIiwKKwkJCQkJCV9fZnVuY19fLCByZXQpOworCQlhZGFwdGVyLT5kYmcubnVtX3R4X2hvc3RfdG9fY2FyZF9mYWlsdXJlKys7CisJCWJyZWFrOworCWNhc2UgMDoKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJkYXRhOiAlczogaG9zdF90b19jYXJkIHN1Y2NlZWRlZFxuIiwKKwkJCQkJCV9fZnVuY19fKTsKKwkJYWRhcHRlci0+dHhfbG9ja19mbGFnID0gdHJ1ZTsKKwkJYnJlYWs7CisJY2FzZSAtRUlOUFJPR1JFU1M6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB3ZSBuZWVkIHRvIHNlbmQgbGFzdCBwYWNrZXQgaW5kaWNhdGlvbi4KKyAqLwordTgKK213aWZpZXhfY2hlY2tfbGFzdF9wYWNrZXRfaW5kaWNhdGlvbihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KQoreworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCXU4IHJldCA9IGZhbHNlOworCisJaWYgKCFhZGFwdGVyLT5zbGVlcF9wZXJpb2QucGVyaW9kKQorCQlyZXR1cm4gcmV0OworCWlmIChtd2lmaWV4X3dtbV9saXN0c19lbXB0eShhZGFwdGVyKSkKKwkJCXJldCA9IHRydWU7CisKKwlpZiAocmV0ICYmICFhZGFwdGVyLT5jbWRfc2VudCAmJiAhYWRhcHRlci0+Y3Vycl9jbWQKKwkgICAgJiYgIWlzX2NvbW1hbmRfcGVuZGluZyhhZGFwdGVyKSkgeworCQlhZGFwdGVyLT5kZWxheV9udWxsX3BrdCA9IGZhbHNlOworCQlyZXQgPSB0cnVlOworCX0gZWxzZSB7CisJCXJldCA9IGZhbHNlOworCQlhZGFwdGVyLT5kZWxheV9udWxsX3BrdCA9IHRydWU7CisJfQorCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3R4cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvdHhyeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMDEyMDgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3R4cnguYwpAQCAtMCwwICsxLDIwMCBAQAorLyoKKyAqIE1hcnZlbGwgV2lyZWxlc3MgTEFOIGRldmljZSBkcml2ZXI6IGdlbmVyaWMgVFgvUlggZGF0YSBoYW5kbGluZworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbAorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluCisgKiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gKKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBIG9yIG9uIHRoZQorICogd29ybGR3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0LgorICoKKyAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQKKyAqIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4KKyAqLworCisjaW5jbHVkZSAiZGVjbC5oIgorI2luY2x1ZGUgImlvY3RsLmgiCisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgImZ3LmgiCisjaW5jbHVkZSAibWFpbi5oIgorI2luY2x1ZGUgIndtbS5oIgorCisvKgorICogVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgdGhlIHJlY2VpdmVkIGJ1ZmZlci4KKyAqCisgKiBNYWluIHJlc3BvbnNpYmlsaXR5IG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gcGFyc2UgdGhlIFJ4UEQgdG8KKyAqIGlkZW50aWZ5IHRoZSBjb3JyZWN0IGludGVyZmFjZSB0aGlzIHBhY2tldCBpcyBoZWFkZWQgZm9yIGFuZAorICogZm9yd2FyZGluZyBpdCB0byB0aGUgYXNzb2NpYXRlZCBoYW5kbGluZyBmdW5jdGlvbiwgd2hlcmUgdGhlCisgKiBwYWNrZXQgd2lsbCBiZSBmdXJ0aGVyIHByb2Nlc3NlZCBhbmQgc2VudCB0byBrZXJuZWwvdXBwZXIgbGF5ZXIKKyAqIGlmIHJlcXVpcmVkLgorICovCitpbnQgbXdpZmlleF9oYW5kbGVfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9CisJCW13aWZpZXhfZ2V0X3ByaXYoYWRhcHRlciwgTVdJRklFWF9CU1NfUk9MRV9BTlkpOworCXN0cnVjdCByeHBkICpsb2NhbF9yeF9wZDsKKwlzdHJ1Y3QgbXdpZmlleF9yeGluZm8gKnJ4X2luZm8gPSBNV0lGSUVYX1NLQl9SWENCKHNrYik7CisKKwlsb2NhbF9yeF9wZCA9IChzdHJ1Y3QgcnhwZCAqKSAoc2tiLT5kYXRhKTsKKwkvKiBHZXQgdGhlIEJTUyBudW1iZXIgZnJvbSByeHBkLCBnZXQgY29ycmVzcG9uZGluZyBwcml2ICovCisJcHJpdiA9IG13aWZpZXhfZ2V0X3ByaXZfYnlfaWQoYWRhcHRlciwgbG9jYWxfcnhfcGQtPmJzc19udW0gJgorCQkJCSAgICAgIEJTU19OVU1fTUFTSywgbG9jYWxfcnhfcGQtPmJzc190eXBlKTsKKwlpZiAoIXByaXYpCisJCXByaXYgPSBtd2lmaWV4X2dldF9wcml2KGFkYXB0ZXIsIE1XSUZJRVhfQlNTX1JPTEVfQU5ZKTsKKworCXJ4X2luZm8tPmJzc19pbmRleCA9IHByaXYtPmJzc19pbmRleDsKKworCXJldHVybiBtd2lmaWV4X3Byb2Nlc3Nfc3RhX3J4X3BhY2tldChhZGFwdGVyLCBza2IpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobXdpZmlleF9oYW5kbGVfcnhfcGFja2V0KTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgYSBwYWNrZXQgdG8gZGV2aWNlLgorICoKKyAqIEl0IHByb2Nlc3NlcyB0aGUgcGFja2V0IHRvIGFkZCB0aGUgVHhQRCwgY2hlY2tzIGNvbmRpdGlvbiBhbmQKKyAqIHNlbmRzIHRoZSBwcm9jZXNzZWQgcGFja2V0IHRvIGZpcm13YXJlIGZvciB0cmFuc21pc3Npb24uCisgKgorICogT24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCB0aGUgZnVuY3Rpb24gY2FsbHMgdGhlIGNvbXBsZXRpb24gY2FsbGJhY2sKKyAqIGFuZCBsb2dzIHRoZSB0aW1lLgorICovCitpbnQgbXdpZmlleF9wcm9jZXNzX3R4KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgICBzdHJ1Y3QgbXdpZmlleF90eF9wYXJhbSAqdHhfcGFyYW0pCit7CisJaW50IHJldCA9IC0xOworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCXU4ICpoZWFkX3B0cjsKKwlzdHJ1Y3QgdHhwZCAqbG9jYWxfdHhfcGQgPSBOVUxMOworCisJaGVhZF9wdHIgPSAodTggKikgbXdpZmlleF9wcm9jZXNzX3N0YV90eHBkKHByaXYsIHNrYik7CisJaWYgKGhlYWRfcHRyKSB7CisJCWlmIChHRVRfQlNTX1JPTEUocHJpdikgPT0gTVdJRklFWF9CU1NfUk9MRV9TVEEpCisJCQlsb2NhbF90eF9wZCA9CisJCQkJKHN0cnVjdCB0eHBkICopIChoZWFkX3B0ciArIElOVEZfSEVBREVSX0xFTik7CisKKwkJcmV0ID0gYWRhcHRlci0+aWZfb3BzLmhvc3RfdG9fY2FyZChhZGFwdGVyLCBNV0lGSUVYX1RZUEVfREFUQSwKKwkJCQkJICAgICBza2ItPmRhdGEsIHNrYi0+bGVuLCB0eF9wYXJhbSk7CisJfQorCisJc3dpdGNoIChyZXQpIHsKKwljYXNlIC1FQlVTWToKKwkJaWYgKChHRVRfQlNTX1JPTEUocHJpdikgPT0gTVdJRklFWF9CU1NfUk9MRV9TVEEpICYmCisJCQkoYWRhcHRlci0+cHBzX3VhcHNkX21vZGUpICYmCisJCQkoYWRhcHRlci0+dHhfbG9ja19mbGFnKSkgeworCQkJCXByaXYtPmFkYXB0ZXItPnR4X2xvY2tfZmxhZyA9IGZhbHNlOworCQkJCWxvY2FsX3R4X3BkLT5mbGFncyA9IDA7CisJCX0KKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJkYXRhOiAtRUJVU1kgaXMgcmV0dXJuZWRcbiIpOworCQlicmVhazsKKwljYXNlIC0xOgorCQlhZGFwdGVyLT5kYXRhX3NlbnQgPSBmYWxzZTsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJtd2lmaWV4X3dyaXRlX2RhdGFfYXN5bmMgZmFpbGVkOiAweCVYXG4iLAorCQkgICAgICAgcmV0KTsKKwkJYWRhcHRlci0+ZGJnLm51bV90eF9ob3N0X3RvX2NhcmRfZmFpbHVyZSsrOworCQltd2lmaWV4X3dyaXRlX2RhdGFfY29tcGxldGUoYWRhcHRlciwgc2tiLCByZXQpOworCQlicmVhazsKKwljYXNlIC1FSU5QUk9HUkVTUzoKKwkJYWRhcHRlci0+ZGF0YV9zZW50ID0gZmFsc2U7CisJCWJyZWFrOworCWNhc2UgMDoKKwkJbXdpZmlleF93cml0ZV9kYXRhX2NvbXBsZXRlKGFkYXB0ZXIsIHNrYiwgcmV0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFBhY2tldCBzZW5kIGNvbXBsZXRpb24gY2FsbGJhY2sgaGFuZGxlci4KKyAqCisgKiBJdCBlaXRoZXIgZnJlZXMgdGhlIGJ1ZmZlciBkaXJlY3RseSBvciBmb3J3YXJkcyBpdCB0byBhbm90aGVyCisgKiBjb21wbGV0aW9uIGNhbGxiYWNrIHdoaWNoIGNoZWNrcyBjb25kaXRpb25zLCB1cGRhdGVzIHN0YXRpc3RpY3MsCisgKiB3YWtlcyB1cCBzdGFsbGVkIHRyYWZmaWMgcXVldWUgaWYgcmVxdWlyZWQsIGFuZCB0aGVuIGZyZWVzIHRoZSBidWZmZXIuCisgKi8KK2ludCBtd2lmaWV4X3dyaXRlX2RhdGFfY29tcGxldGUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc3RhdHVzKQoreworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsICp0cHJpdjsKKwlzdHJ1Y3QgbXdpZmlleF90eGluZm8gKnR4X2luZm87CisJaW50IGk7CisKKwlpZiAoIXNrYikKKwkJcmV0dXJuIDA7CisKKwl0eF9pbmZvID0gTVdJRklFWF9TS0JfVFhDQihza2IpOworCXByaXYgPSBtd2lmaWV4X2Jzc19pbmRleF90b19wcml2KGFkYXB0ZXIsIHR4X2luZm8tPmJzc19pbmRleCk7CisJaWYgKCFwcml2KQorCQlnb3RvIGRvbmU7CisKKwlwcml2LT5uZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwlpZiAoIXN0YXR1cykgeworCQlwcml2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJCXByaXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCX0gZWxzZSB7CisJCXByaXYtPnN0YXRzLnR4X2Vycm9ycysrOworCX0KKwlhdG9taWNfZGVjKCZhZGFwdGVyLT50eF9wZW5kaW5nKTsKKworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5wcml2X251bTsgaSsrKSB7CisKKwkJdHByaXYgPSBhZGFwdGVyLT5wcml2W2ldOworCisJCWlmICgoR0VUX0JTU19ST0xFKHRwcml2KSA9PSBNV0lGSUVYX0JTU19ST0xFX1NUQSkKKwkJCQkmJiAodHByaXYtPm1lZGlhX2Nvbm5lY3RlZCkpIHsKKwkJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKHRwcml2LT5uZXRkZXYpKQorCQkJCW5ldGlmX3dha2VfcXVldWUodHByaXYtPm5ldGRldik7CisJCX0KKwl9Citkb25lOgorCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFBhY2tldCByZWNlaXZlIGNvbXBsZXRpb24gY2FsbGJhY2sgaGFuZGxlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbGxzIGFub3RoZXIgY29tcGxldGlvbiBjYWxsYmFjayBoYW5kbGVyIHdoaWNoCisgKiB1cGRhdGVzIHRoZSBzdGF0aXN0aWNzLCBhbmQgb3B0aW9uYWxseSB1cGRhdGVzIHRoZSBwYXJlbnQgYnVmZmVyCisgKiB1c2UgY291bnQgYmVmb3JlIGZyZWVpbmcgdGhlIHJlY2VpdmVkIHBhY2tldC4KKyAqLworaW50IG13aWZpZXhfcmVjdl9wYWNrZXRfY29tcGxldGUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3QgbXdpZmlleF9yeGluZm8gKnJ4X2luZm8gPSBNV0lGSUVYX1NLQl9SWENCKHNrYik7CisJc3RydWN0IG13aWZpZXhfcnhpbmZvICpyeF9pbmZvX3BhcmVudDsKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2OworCXN0cnVjdCBza19idWZmICpza2JfcGFyZW50OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlwcml2ID0gYWRhcHRlci0+cHJpdltyeF9pbmZvLT5ic3NfaW5kZXhdOworCisJaWYgKHByaXYgJiYgKHN0YXR1cyA9PSAtMSkpCisJCXByaXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKworCWlmIChyeF9pbmZvLT5wYXJlbnQpIHsKKwkJc2tiX3BhcmVudCA9IHJ4X2luZm8tPnBhcmVudDsKKwkJcnhfaW5mb19wYXJlbnQgPSBNV0lGSUVYX1NLQl9SWENCKHNrYl9wYXJlbnQpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeF9wa3RfbG9jaywgZmxhZ3MpOworCQktLXJ4X2luZm9fcGFyZW50LT51c2VfY291bnQ7CisKKwkJaWYgKCFyeF9pbmZvX3BhcmVudC0+dXNlX2NvdW50KSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9wa3RfbG9jaywgZmxhZ3MpOworCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiX3BhcmVudCk7CisJCX0gZWxzZSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9wa3RfbG9jaywgZmxhZ3MpOworCQl9CisJfSBlbHNlIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvdXRpbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC91dGlsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQxMjkxNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvdXRpbC5jCkBAIC0wLDAgKzEsMjAyIEBACisvKgorICogTWFydmVsbCBXaXJlbGVzcyBMQU4gZGV2aWNlIGRyaXZlcjogdXRpbGl0eSBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBmaWxlICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwKKyAqIEx0ZC4gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIEp1bmUgMTk5MQorICogKHRoZSAiTGljZW5zZSIpLiAgWW91IG1heSB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSBpbgorICogYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdoaWNoCisgKiBpcyBhdmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQSBvciBvbiB0aGUKKyAqIHdvcmxkd2lkZSB3ZWIgYXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dC4KKyAqCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1JUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgQU5EIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0CisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIuCisgKi8KKworI2luY2x1ZGUgImRlY2wuaCIKKyNpbmNsdWRlICJpb2N0bC5oIgorI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJmdy5oIgorI2luY2x1ZGUgIm1haW4uaCIKKyNpbmNsdWRlICJ3bW0uaCIKKyNpbmNsdWRlICIxMW4uaCIKKworLyoKKyAqIEZpcm13YXJlIGluaXRpYWxpemF0aW9uIGNvbXBsZXRlIGNhbGxiYWNrIGhhbmRsZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiB3YWtlcyB1cCB0aGUgZnVuY3Rpb24gd2FpdGluZyBvbiB0aGUgaW5pdAorICogd2FpdCBxdWV1ZSBmb3IgdGhlIGZpcm13YXJlIGluaXRpYWxpemF0aW9uIHRvIGNvbXBsZXRlLgorICovCitpbnQgbXdpZmlleF9pbml0X2Z3X2NvbXBsZXRlKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisKKwlhZGFwdGVyLT5pbml0X3dhaXRfcV93b2tlbiA9IHRydWU7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhZGFwdGVyLT5pbml0X3dhaXRfcSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGaXJtd2FyZSBzaHV0ZG93biBjb21wbGV0ZSBjYWxsYmFjayBoYW5kbGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgaGFyZHdhcmUgc3RhdHVzIHRvIG5vdCByZWFkeSBhbmQgd2FrZXMgdXAKKyAqIHRoZSBmdW5jdGlvbiB3YWl0aW5nIG9uIHRoZSBpbml0IHdhaXQgcXVldWUgZm9yIHRoZSBmaXJtd2FyZQorICogc2h1dGRvd24gdG8gY29tcGxldGUuCisgKi8KK2ludCBtd2lmaWV4X3NodXRkb3duX2Z3X2NvbXBsZXRlKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJYWRhcHRlci0+aHdfc3RhdHVzID0gTVdJRklFWF9IV19TVEFUVVNfTk9UX1JFQURZOworCWFkYXB0ZXItPmluaXRfd2FpdF9xX3dva2VuID0gdHJ1ZTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmFkYXB0ZXItPmluaXRfd2FpdF9xKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgaW5pdC9zaHV0ZG93biBjb21tYW5kCisgKiB0byBmaXJtd2FyZS4KKyAqLworaW50IG13aWZpZXhfaW5pdF9zaHV0ZG93bl9mdyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICB1MzIgZnVuY19pbml0X3NodXRkb3duKQoreworCXUxNiBjbWQ7CisKKwlpZiAoZnVuY19pbml0X3NodXRkb3duID09IE1XSUZJRVhfRlVOQ19JTklUKSB7CisJCWNtZCA9IEhvc3RDbWRfQ01EX0ZVTkNfSU5JVDsKKwl9IGVsc2UgaWYgKGZ1bmNfaW5pdF9zaHV0ZG93biA9PSBNV0lGSUVYX0ZVTkNfU0hVVERPV04pIHsKKwkJY21kID0gSG9zdENtZF9DTURfRlVOQ19TSFVURE9XTjsKKwl9IGVsc2UgeworCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgInVuc3VwcG9ydGVkIHBhcmFtZXRlclxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gbXdpZmlleF9zZW5kX2NtZF9zeW5jKHByaXYsIGNtZCwgSG9zdENtZF9BQ1RfR0VOX1NFVCwgMCwgTlVMTCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtd2lmaWV4X2luaXRfc2h1dGRvd25fZncpOworCisvKgorICogSU9DVEwgcmVxdWVzdCBoYW5kbGVyIHRvIHNldC9nZXQgZGVidWcgaW5mb3JtYXRpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBjb2xsYXRlcy9zZXRzIHRoZSBpbmZvcm1hdGlvbiBmcm9tL3RvIGRpZmZlcmVudCBkcml2ZXIKKyAqIHN0cnVjdHVyZXMuCisgKi8KK2ludCBtd2lmaWV4X2dldF9kZWJ1Z19pbmZvKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICBzdHJ1Y3QgbXdpZmlleF9kZWJ1Z19pbmZvICppbmZvKQoreworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCisJaWYgKGluZm8pIHsKKwkJbWVtY3B5KGluZm8tPnBhY2tldHNfb3V0LAorCQkgICAgICAgcHJpdi0+d21tLnBhY2tldHNfb3V0LAorCQkgICAgICAgc2l6ZW9mKHByaXYtPndtbS5wYWNrZXRzX291dCkpOworCQlpbmZvLT5tYXhfdHhfYnVmX3NpemUgPSAodTMyKSBhZGFwdGVyLT5tYXhfdHhfYnVmX3NpemU7CisJCWluZm8tPnR4X2J1Zl9zaXplID0gKHUzMikgYWRhcHRlci0+dHhfYnVmX3NpemU7CisJCWluZm8tPnJ4X3RibF9udW0gPSBtd2lmaWV4X2dldF9yeF9yZW9yZGVyX3RibCgKKwkJCQkJcHJpdiwgaW5mby0+cnhfdGJsKTsKKwkJaW5mby0+dHhfdGJsX251bSA9IG13aWZpZXhfZ2V0X3R4X2JhX3N0cmVhbV90YmwoCisJCQkJCXByaXYsIGluZm8tPnR4X3RibCk7CisJCWluZm8tPnBzX21vZGUgPSBhZGFwdGVyLT5wc19tb2RlOworCQlpbmZvLT5wc19zdGF0ZSA9IGFkYXB0ZXItPnBzX3N0YXRlOworCQlpbmZvLT5pc19kZWVwX3NsZWVwID0gYWRhcHRlci0+aXNfZGVlcF9zbGVlcDsKKwkJaW5mby0+cG1fd2FrZXVwX2NhcmRfcmVxID0gYWRhcHRlci0+cG1fd2FrZXVwX2NhcmRfcmVxOworCQlpbmZvLT5wbV93YWtldXBfZndfdHJ5ID0gYWRhcHRlci0+cG1fd2FrZXVwX2Z3X3RyeTsKKwkJaW5mby0+aXNfaHNfY29uZmlndXJlZCA9IGFkYXB0ZXItPmlzX2hzX2NvbmZpZ3VyZWQ7CisJCWluZm8tPmhzX2FjdGl2YXRlZCA9IGFkYXB0ZXItPmhzX2FjdGl2YXRlZDsKKwkJaW5mby0+bnVtX2NtZF9ob3N0X3RvX2NhcmRfZmFpbHVyZQorCQkJPSBhZGFwdGVyLT5kYmcubnVtX2NtZF9ob3N0X3RvX2NhcmRfZmFpbHVyZTsKKwkJaW5mby0+bnVtX2NtZF9zbGVlcF9jZm1faG9zdF90b19jYXJkX2ZhaWx1cmUKKwkJCT0gYWRhcHRlci0+ZGJnLm51bV9jbWRfc2xlZXBfY2ZtX2hvc3RfdG9fY2FyZF9mYWlsdXJlOworCQlpbmZvLT5udW1fdHhfaG9zdF90b19jYXJkX2ZhaWx1cmUKKwkJCT0gYWRhcHRlci0+ZGJnLm51bV90eF9ob3N0X3RvX2NhcmRfZmFpbHVyZTsKKwkJaW5mby0+bnVtX2V2ZW50X2RlYXV0aCA9IGFkYXB0ZXItPmRiZy5udW1fZXZlbnRfZGVhdXRoOworCQlpbmZvLT5udW1fZXZlbnRfZGlzYXNzb2MgPSBhZGFwdGVyLT5kYmcubnVtX2V2ZW50X2Rpc2Fzc29jOworCQlpbmZvLT5udW1fZXZlbnRfbGlua19sb3N0ID0gYWRhcHRlci0+ZGJnLm51bV9ldmVudF9saW5rX2xvc3Q7CisJCWluZm8tPm51bV9jbWRfZGVhdXRoID0gYWRhcHRlci0+ZGJnLm51bV9jbWRfZGVhdXRoOworCQlpbmZvLT5udW1fY21kX2Fzc29jX3N1Y2Nlc3MgPQorCQkJYWRhcHRlci0+ZGJnLm51bV9jbWRfYXNzb2Nfc3VjY2VzczsKKwkJaW5mby0+bnVtX2NtZF9hc3NvY19mYWlsdXJlID0KKwkJCWFkYXB0ZXItPmRiZy5udW1fY21kX2Fzc29jX2ZhaWx1cmU7CisJCWluZm8tPm51bV90eF90aW1lb3V0ID0gYWRhcHRlci0+ZGJnLm51bV90eF90aW1lb3V0OworCQlpbmZvLT5udW1fY21kX3RpbWVvdXQgPSBhZGFwdGVyLT5kYmcubnVtX2NtZF90aW1lb3V0OworCQlpbmZvLT50aW1lb3V0X2NtZF9pZCA9IGFkYXB0ZXItPmRiZy50aW1lb3V0X2NtZF9pZDsKKwkJaW5mby0+dGltZW91dF9jbWRfYWN0ID0gYWRhcHRlci0+ZGJnLnRpbWVvdXRfY21kX2FjdDsKKwkJbWVtY3B5KGluZm8tPmxhc3RfY21kX2lkLCBhZGFwdGVyLT5kYmcubGFzdF9jbWRfaWQsCisJCSAgICAgICBzaXplb2YoYWRhcHRlci0+ZGJnLmxhc3RfY21kX2lkKSk7CisJCW1lbWNweShpbmZvLT5sYXN0X2NtZF9hY3QsIGFkYXB0ZXItPmRiZy5sYXN0X2NtZF9hY3QsCisJCSAgICAgICBzaXplb2YoYWRhcHRlci0+ZGJnLmxhc3RfY21kX2FjdCkpOworCQlpbmZvLT5sYXN0X2NtZF9pbmRleCA9IGFkYXB0ZXItPmRiZy5sYXN0X2NtZF9pbmRleDsKKwkJbWVtY3B5KGluZm8tPmxhc3RfY21kX3Jlc3BfaWQsIGFkYXB0ZXItPmRiZy5sYXN0X2NtZF9yZXNwX2lkLAorCQkgICAgICAgc2l6ZW9mKGFkYXB0ZXItPmRiZy5sYXN0X2NtZF9yZXNwX2lkKSk7CisJCWluZm8tPmxhc3RfY21kX3Jlc3BfaW5kZXggPSBhZGFwdGVyLT5kYmcubGFzdF9jbWRfcmVzcF9pbmRleDsKKwkJbWVtY3B5KGluZm8tPmxhc3RfZXZlbnQsIGFkYXB0ZXItPmRiZy5sYXN0X2V2ZW50LAorCQkgICAgICAgc2l6ZW9mKGFkYXB0ZXItPmRiZy5sYXN0X2V2ZW50KSk7CisJCWluZm8tPmxhc3RfZXZlbnRfaW5kZXggPSBhZGFwdGVyLT5kYmcubGFzdF9ldmVudF9pbmRleDsKKwkJaW5mby0+ZGF0YV9zZW50ID0gYWRhcHRlci0+ZGF0YV9zZW50OworCQlpbmZvLT5jbWRfc2VudCA9IGFkYXB0ZXItPmNtZF9zZW50OworCQlpbmZvLT5jbWRfcmVzcF9yZWNlaXZlZCA9IGFkYXB0ZXItPmNtZF9yZXNwX3JlY2VpdmVkOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgdGhlIHJlY2VpdmVkIHBhY2tldCBiZWZvcmUgc2VuZGluZyBpdCB0byB0aGUKKyAqIGtlcm5lbC4KKyAqCisgKiBJdCBleHRyYWN0cyB0aGUgU0tCIGZyb20gdGhlIHJlY2VpdmVkIGJ1ZmZlciBhbmQgc2VuZHMgaXQgdG8ga2VybmVsLgorICogSW4gY2FzZSB0aGUgcmVjZWl2ZWQgYnVmZmVyIGRvZXMgbm90IGNvbnRhaW4gdGhlIGRhdGEgaW4gU0tCIGZvcm1hdCwKKyAqIHRoZSBmdW5jdGlvbiBjcmVhdGVzIGEgYmxhbmsgU0tCLCBmaWxscyBpdCB3aXRoIHRoZSBkYXRhIGZyb20gdGhlCisgKiByZWNlaXZlZCBidWZmZXIgYW5kIHRoZW4gc2VuZHMgdGhpcyBuZXcgU0tCIHRvIHRoZSBrZXJuZWwuCisgKi8KK2ludCBtd2lmaWV4X3JlY3ZfcGFja2V0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IG13aWZpZXhfcnhpbmZvICpyeF9pbmZvOworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXY7CisKKwlpZiAoIXNrYikKKwkJcmV0dXJuIC0xOworCisJcnhfaW5mbyA9IE1XSUZJRVhfU0tCX1JYQ0Ioc2tiKTsKKwlwcml2ID0gbXdpZmlleF9ic3NfaW5kZXhfdG9fcHJpdihhZGFwdGVyLCByeF9pbmZvLT5ic3NfaW5kZXgpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC0xOworCisJc2tiLT5kZXYgPSBwcml2LT5uZXRkZXY7CisJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgcHJpdi0+bmV0ZGV2KTsKKwlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJcHJpdi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJcHJpdi0+c3RhdHMucnhfcGFja2V0cysrOworCWlmIChpbl9pbnRlcnJ1cHQoKSkKKwkJbmV0aWZfcngoc2tiKTsKKwllbHNlCisJCW5ldGlmX3J4X25pKHNrYik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIElPQ1RMIGNvbXBsZXRpb24gY2FsbGJhY2sgaGFuZGxlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgcGVuZGluZyBJT0NUTCBpcyBjb21wbGV0ZWQuCisgKgorICogSWYgd29yayBxdWV1ZSBzdXBwb3J0IGlzIGVuYWJsZWQsIHRoZSBmdW5jdGlvbiB3YWtlcyB1cCB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgd2FpdGluZyBmdW5jdGlvbi4gT3RoZXJ3aXNlLCBpdCBwcm9jZXNzZXMgdGhlCisgKiBJT0NUTCByZXNwb25zZSBhbmQgZnJlZXMgdGhlIHJlc3BvbnNlIGJ1ZmZlci4KKyAqLworaW50IG13aWZpZXhfY29tcGxldGVfY21kKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJYXRvbWljX2RlYygmYWRhcHRlci0+Y21kX3BlbmRpbmcpOworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiY21kIGNvbXBsZXRlZDogc3RhdHVzPSVkXG4iLAorCQkJCQlhZGFwdGVyLT5jbWRfd2FpdF9xLnN0YXR1cyk7CisKKwlhZGFwdGVyLT5jbWRfd2FpdF9xLmNvbmRpdGlvbiA9IHRydWU7CisKKwlpZiAoYWRhcHRlci0+Y21kX3dhaXRfcS5zdGF0dXMgPT0gLUVUSU1FRE9VVCkKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJjbWQgdGltZW91dFxuIik7CisJZWxzZQorCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmFkYXB0ZXItPmNtZF93YWl0X3Eud2FpdCk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvdXRpbC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC91dGlsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUwNmFmYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvdXRpbC5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBNYXJ2ZWxsIFdpcmVsZXNzIExBTiBkZXZpY2UgZHJpdmVyOiB1dGlsaXR5IGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbAorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluCisgKiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gKKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBIG9yIG9uIHRoZQorICogd29ybGR3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0LgorICoKKyAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQKKyAqIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4KKyAqLworCisjaWZuZGVmIF9NV0lGSUVYX1VUSUxfSF8KKyNkZWZpbmUgX01XSUZJRVhfVVRJTF9IXworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtd2lmaWV4X3J4aW5mbyAqTVdJRklFWF9TS0JfUlhDQihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiAoc3RydWN0IG13aWZpZXhfcnhpbmZvICopc2tiLT5jYjsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXdpZmlleF90eGluZm8gKk1XSUZJRVhfU0tCX1RYQ0Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gKHN0cnVjdCBtd2lmaWV4X3R4aW5mbyAqKXNrYi0+Y2I7Cit9CisjZW5kaWYgLyogIV9NV0lGSUVYX1VUSUxfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvd21tLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3dtbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYTA5ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3dtbS5jCkBAIC0wLDAgKzEsMTIzMSBAQAorLyoKKyAqIE1hcnZlbGwgV2lyZWxlc3MgTEFOIGRldmljZSBkcml2ZXI6IFdNTQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbAorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluCisgKiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gKKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBIG9yIG9uIHRoZQorICogd29ybGR3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0LgorICoKKyAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQKKyAqIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4KKyAqLworCisjaW5jbHVkZSAiZGVjbC5oIgorI2luY2x1ZGUgImlvY3RsLmgiCisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgImZ3LmgiCisjaW5jbHVkZSAibWFpbi5oIgorI2luY2x1ZGUgIndtbS5oIgorI2luY2x1ZGUgIjExbi5oIgorCisKKy8qIE1heGltdW0gdmFsdWUgRlcgY2FuIGFjY2VwdCBmb3IgZHJpdmVyIGRlbGF5IGluIHBhY2tldCB0cmFuc21pc3Npb24gKi8KKyNkZWZpbmUgRFJWX1BLVF9ERUxBWV9UT19GV19NQVggICA1MTIKKworCisjZGVmaW5lIFdNTV9RVUVVRURfUEFDS0VUX0xPV0VSX0xJTUlUICAgMTgwCisKKyNkZWZpbmUgV01NX1FVRVVFRF9QQUNLRVRfVVBQRVJfTElNSVQgICAyMDAKKworLyogT2Zmc2V0IGZvciBUT1MgZmllbGQgaW4gdGhlIElQIGhlYWRlciAqLworI2RlZmluZSBJUFRPU19PRkZTRVQgNQorCisvKiBXTU0gaW5mb3JtYXRpb24gSUUgKi8KK3N0YXRpYyBjb25zdCB1OCB3bW1faW5mb19pZVtdID0geyBXTEFOX0VJRF9WRU5ET1JfU1BFQ0lGSUMsIDB4MDcsCisJMHgwMCwgMHg1MCwgMHhmMiwgMHgwMiwKKwkweDAwLCAweDAxLCAweDAwCit9OworCitzdGF0aWMgY29uc3QgdTggd21tX2FjaV90b19xaWR4X21hcFtdID0geyBXTU1fQUNfQkUsCisJV01NX0FDX0JLLAorCVdNTV9BQ19WSSwKKwlXTU1fQUNfVk8KK307CisKK3N0YXRpYyB1OCB0b3NfdG9fdGlkW10gPSB7CisJLyogVElEIERTQ1BfUDIgRFNDUF9QMSBEU0NQX1AwIFdNTV9BQyAqLworCTB4MDEsCQkJLyogMCAxIDAgQUNfQksgKi8KKwkweDAyLAkJCS8qIDAgMCAwIEFDX0JLICovCisJMHgwMCwJCQkvKiAwIDAgMSBBQ19CRSAqLworCTB4MDMsCQkJLyogMCAxIDEgQUNfQkUgKi8KKwkweDA0LAkJCS8qIDEgMCAwIEFDX1ZJICovCisJMHgwNSwJCQkvKiAxIDAgMSBBQ19WSSAqLworCTB4MDYsCQkJLyogMSAxIDAgQUNfVk8gKi8KKwkweDA3CQkJLyogMSAxIDEgQUNfVk8gKi8KK307CisKKy8qCisgKiBUaGlzIHRhYmxlIGludmVyc2VzIHRoZSB0b3NfdG9fdGlkIG9wZXJhdGlvbiB0byBnZXQgYSBwcmlvcml0eQorICogd2hpY2ggaXMgaW4gc2VxdWVudGlhbCBvcmRlciwgYW5kIGNhbiBiZSBjb21wYXJlZC4KKyAqIFVzZSB0aGlzIHRvIGNvbXBhcmUgdGhlIHByaW9yaXR5IG9mIHR3byBkaWZmZXJlbnQgVElEcy4KKyAqLworc3RhdGljIHU4IHRvc190b190aWRfaW52W10gPSB7CisJMHgwMiwgIC8qIGZyb20gdG9zX3RvX3RpZFsyXSA9IDAgKi8KKwkweDAwLCAgLyogZnJvbSB0b3NfdG9fdGlkWzBdID0gMSAqLworCTB4MDEsICAvKiBmcm9tIHRvc190b190aWRbMV0gPSAyICovCisJMHgwMywKKwkweDA0LAorCTB4MDUsCisJMHgwNiwKKwkweDA3fTsKKworc3RhdGljIHU4IGFjX3RvX3RpZFs0XVsyXSA9IHsgezEsIDJ9LCB7MCwgM30sIHs0LCA1fSwgezYsIDd9IH07CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGRlYnVnIHByaW50cyB0aGUgcHJpb3JpdHkgcGFyYW1ldGVycyBmb3IgYSBXTU0gQUMuCisgKi8KK3N0YXRpYyB2b2lkCittd2lmaWV4X3dtbV9hY19kZWJ1Z19wcmludChjb25zdCBzdHJ1Y3QgaWVlZV90eXBlc193bW1fYWNfcGFyYW1ldGVycyAqYWNfcGFyYW0pCit7CisJY29uc3QgY2hhciAqYWNfc3RyW10gPSB7ICJCSyIsICJCRSIsICJWSSIsICJWTyIgfTsKKworCXByX2RlYnVnKCJpbmZvOiBXTU0gQUNfJXM6IEFDST0lZCwgQUNNPSVkLCBBaWZzbj0lZCwgIgorCSAgICAgICAiRWN3TWluPSVkLCBFY3dNYXg9JWQsIFR4b3BMaW1pdD0lZFxuIiwKKwkgICAgICAgYWNfc3RyW3dtbV9hY2lfdG9fcWlkeF9tYXBbKGFjX3BhcmFtLT5hY2lfYWlmc25fYml0bWFwCisJICAgICAgICYgTVdJRklFWF9BQ0kpID4+IDVdXSwKKwkgICAgICAgKGFjX3BhcmFtLT5hY2lfYWlmc25fYml0bWFwICYgTVdJRklFWF9BQ0kpID4+IDUsCisJICAgICAgIChhY19wYXJhbS0+YWNpX2FpZnNuX2JpdG1hcCAmIE1XSUZJRVhfQUNNKSA+PiA0LAorCSAgICAgICBhY19wYXJhbS0+YWNpX2FpZnNuX2JpdG1hcCAmIE1XSUZJRVhfQUlGU04sCisJICAgICAgIGFjX3BhcmFtLT5lY3dfYml0bWFwICYgTVdJRklFWF9FQ1dfTUlOLAorCSAgICAgICAoYWNfcGFyYW0tPmVjd19iaXRtYXAgJiBNV0lGSUVYX0VDV19NQVgpID4+IDQsCisJICAgICAgIGxlMTZfdG9fY3B1KGFjX3BhcmFtLT50eF9vcF9saW1pdCkpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgYSByb3V0ZSBhZGRyZXNzIGxpc3QuCisgKgorICogVGhlIGZ1bmN0aW9uIGFsc28gaW5pdGlhbGl6ZXMgdGhlIGxpc3Qgd2l0aCB0aGUgcHJvdmlkZWQgUkEuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbXdpZmlleF9yYV9saXN0X3RibCAqCittd2lmaWV4X3dtbV9hbGxvY2F0ZV9yYWxpc3Rfbm9kZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLCB1OCAqcmEpCit7CisJc3RydWN0IG13aWZpZXhfcmFfbGlzdF90YmwgKnJhX2xpc3Q7CisKKwlyYV9saXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG13aWZpZXhfcmFfbGlzdF90YmwpLCBHRlBfQVRPTUlDKTsKKworCWlmICghcmFfbGlzdCkgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIiVzOiBmYWlsZWQgdG8gYWxsb2MgcmFfbGlzdFxuIiwKKwkJCQkJCV9fZnVuY19fKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCUlOSVRfTElTVF9IRUFEKCZyYV9saXN0LT5saXN0KTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZyYV9saXN0LT5za2JfaGVhZCk7CisKKwltZW1jcHkocmFfbGlzdC0+cmEsIHJhLCBFVEhfQUxFTik7CisKKwlyYV9saXN0LT50b3RhbF9wa3RzX3NpemUgPSAwOworCisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBhbGxvY2F0ZWQgcmFfbGlzdCAlcFxuIiwgcmFfbGlzdCk7CisKKwlyZXR1cm4gcmFfbGlzdDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIGFuZCBhZGRzIGEgUkEgbGlzdCBmb3IgYWxsIFRJRHMKKyAqIHdpdGggdGhlIGdpdmVuIFJBLgorICovCit2b2lkCittd2lmaWV4X3JhbGlzdF9hZGQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggKnJhKQoreworCWludCBpOworCXN0cnVjdCBtd2lmaWV4X3JhX2xpc3RfdGJsICpyYV9saXN0OworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1fVElEOyArK2kpIHsKKwkJcmFfbGlzdCA9IG13aWZpZXhfd21tX2FsbG9jYXRlX3JhbGlzdF9ub2RlKGFkYXB0ZXIsIHJhKTsKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBjcmVhdGVkIHJhX2xpc3QgJXBcbiIsIHJhX2xpc3QpOworCisJCWlmICghcmFfbGlzdCkKKwkJCWJyZWFrOworCisJCWlmICghbXdpZmlleF9xdWV1aW5nX3JhX2Jhc2VkKHByaXYpKQorCQkJcmFfbGlzdC0+aXNfMTFuX2VuYWJsZWQgPSBJU18xMU5fRU5BQkxFRChwcml2KTsKKwkJZWxzZQorCQkJcmFfbGlzdC0+aXNfMTFuX2VuYWJsZWQgPSBmYWxzZTsKKworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImRhdGE6IHJhbGlzdCAlcDogaXNfMTFuX2VuYWJsZWQ9JWRcbiIsCisJCQlyYV9saXN0LCByYV9saXN0LT5pc18xMW5fZW5hYmxlZCk7CisKKwkJbGlzdF9hZGRfdGFpbCgmcmFfbGlzdC0+bGlzdCwKKwkJCQkmcHJpdi0+d21tLnRpZF90YmxfcHRyW2ldLnJhX2xpc3QpOworCisJCWlmICghcHJpdi0+d21tLnRpZF90YmxfcHRyW2ldLnJhX2xpc3RfY3VycikKKwkJCXByaXYtPndtbS50aWRfdGJsX3B0cltpXS5yYV9saXN0X2N1cnIgPSByYV9saXN0OworCX0KK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgV01NIHF1ZXVlIHByaW9yaXRpZXMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCisgKi8KK3N0YXRpYyB2b2lkIG13aWZpZXhfd21tX2RlZmF1bHRfcXVldWVfcHJpb3JpdGllcyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KQoreworCS8qIERlZmF1bHQgcXVldWUgcHJpb3JpdGllczogVk8tPlZJLT5CRS0+QksgKi8KKwlwcml2LT53bW0ucXVldWVfcHJpb3JpdHlbMF0gPSBXTU1fQUNfVk87CisJcHJpdi0+d21tLnF1ZXVlX3ByaW9yaXR5WzFdID0gV01NX0FDX1ZJOworCXByaXYtPndtbS5xdWV1ZV9wcmlvcml0eVsyXSA9IFdNTV9BQ19CRTsKKwlwcml2LT53bW0ucXVldWVfcHJpb3JpdHlbM10gPSBXTU1fQUNfQks7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIG1hcCBBQ3MgdG8gVElEcy4KKyAqLworc3RhdGljIHZvaWQKK213aWZpZXhfd21tX3F1ZXVlX3ByaW9yaXRpZXNfdGlkKHU4IHF1ZXVlX3ByaW9yaXR5W10pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgKytpKSB7CisJCXRvc190b190aWRbNyAtIChpICogMildID0gYWNfdG9fdGlkW3F1ZXVlX3ByaW9yaXR5W2ldXVsxXTsKKwkJdG9zX3RvX3RpZFs2IC0gKGkgKiAyKV0gPSBhY190b190aWRbcXVldWVfcHJpb3JpdHlbaV1dWzBdOworCX0KK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgV01NIHByaW9yaXR5IHF1ZXVlcy4KKyAqLwordm9pZAorbXdpZmlleF93bW1fc2V0dXBfcXVldWVfcHJpb3JpdGllcyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCSAgIHN0cnVjdCBpZWVlX3R5cGVzX3dtbV9wYXJhbWV0ZXIgKndtbV9pZSkKK3sKKwl1MTYgY3dfbWluLCBhdmdfYmFja19vZmYsIHRtcFs0XTsKKwl1MzIgaSwgaiwgbnVtX2FjOworCXU4IGFjX2lkeDsKKworCWlmICghd21tX2llIHx8ICFwcml2LT53bW1fZW5hYmxlZCkgeworCQkvKiBXTU0gaXMgbm90IGVuYWJsZWQsIGp1c3Qgc2V0IHRoZSBkZWZhdWx0cyBhbmQgcmV0dXJuICovCisJCW13aWZpZXhfd21tX2RlZmF1bHRfcXVldWVfcHJpb3JpdGllcyhwcml2KTsKKwkJcmV0dXJuOworCX0KKworCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiaW5mbzogV01NIFBhcmFtZXRlciBJRTogdmVyc2lvbj0lZCwgIgorCQkicW9zX2luZm8gUGFyYW1ldGVyIFNldCBDb3VudD0lZCwgUmVzZXJ2ZWQ9JSN4XG4iLAorCQl3bW1faWUtPnZlbmRfaGRyLnZlcnNpb24sIHdtbV9pZS0+cW9zX2luZm9fYml0bWFwICYKKwkJSUVFRTgwMjExX1dNTV9JRV9BUF9RT1NJTkZPX1BBUkFNX1NFVF9DTlRfTUFTSywKKwkJd21tX2llLT5yZXNlcnZlZCk7CisKKwlmb3IgKG51bV9hYyA9IDA7IG51bV9hYyA8IEFSUkFZX1NJWkUod21tX2llLT5hY19wYXJhbXMpOyBudW1fYWMrKykgeworCQljd19taW4gPSAoMSA8PCAod21tX2llLT5hY19wYXJhbXNbbnVtX2FjXS5lY3dfYml0bWFwICYKKwkJCU1XSUZJRVhfRUNXX01JTikpIC0gMTsKKwkJYXZnX2JhY2tfb2ZmID0gKGN3X21pbiA+PiAxKSArCisJCQkod21tX2llLT5hY19wYXJhbXNbbnVtX2FjXS5hY2lfYWlmc25fYml0bWFwICYKKwkJCU1XSUZJRVhfQUlGU04pOworCisJCWFjX2lkeCA9IHdtbV9hY2lfdG9fcWlkeF9tYXBbKHdtbV9pZS0+YWNfcGFyYW1zW251bV9hY10uCisJCQkJCSAgICAgYWNpX2FpZnNuX2JpdG1hcCAmCisJCQkJCSAgICAgTVdJRklFWF9BQ0kpID4+IDVdOworCQlwcml2LT53bW0ucXVldWVfcHJpb3JpdHlbYWNfaWR4XSA9IGFjX2lkeDsKKwkJdG1wW2FjX2lkeF0gPSBhdmdfYmFja19vZmY7CisKKwkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiBXTU06IENXbWF4PSVkIENXbWluPSVkIEF2ZyBCYWNrLW9mZj0lZFxuIiwKKwkJICAgICAgICgxIDw8ICgod21tX2llLT5hY19wYXJhbXNbbnVtX2FjXS5lY3dfYml0bWFwICYKKwkJICAgICAgIE1XSUZJRVhfRUNXX01BWCkgPj4gNCkpIC0gMSwKKwkJICAgICAgIGN3X21pbiwgYXZnX2JhY2tfb2ZmKTsKKwkJbXdpZmlleF93bW1fYWNfZGVidWdfcHJpbnQoJndtbV9pZS0+YWNfcGFyYW1zW251bV9hY10pOworCX0KKworCS8qIEJ1YmJsZSBzb3J0ICovCisJZm9yIChpID0gMDsgaSA8IG51bV9hYzsgaSsrKSB7CisJCWZvciAoaiA9IDE7IGogPCBudW1fYWMgLSBpOyBqKyspIHsKKwkJCWlmICh0bXBbaiAtIDFdID4gdG1wW2pdKSB7CisJCQkJc3dhcCh0bXBbaiAtIDFdLCB0bXBbal0pOworCQkJCXN3YXAocHJpdi0+d21tLnF1ZXVlX3ByaW9yaXR5W2ogLSAxXSwKKwkJCQkgICAgIHByaXYtPndtbS5xdWV1ZV9wcmlvcml0eVtqXSk7CisJCQl9IGVsc2UgaWYgKHRtcFtqIC0gMV0gPT0gdG1wW2pdKSB7CisJCQkJaWYgKHByaXYtPndtbS5xdWV1ZV9wcmlvcml0eVtqIC0gMV0KKwkJCQkgICAgPCBwcml2LT53bW0ucXVldWVfcHJpb3JpdHlbal0pCisJCQkJCXN3YXAocHJpdi0+d21tLnF1ZXVlX3ByaW9yaXR5W2ogLSAxXSwKKwkJCQkJICAgICBwcml2LT53bW0ucXVldWVfcHJpb3JpdHlbal0pOworCQkJfQorCQl9CisJfQorCisJbXdpZmlleF93bW1fcXVldWVfcHJpb3JpdGllc190aWQocHJpdi0+d21tLnF1ZXVlX3ByaW9yaXR5KTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZXZhbHVhdGVzIHdoZXRoZXIgb3Igbm90IGFuIEFDIGlzIHRvIGJlIGRvd25ncmFkZWQuCisgKgorICogSW4gY2FzZSB0aGUgQUMgaXMgbm90IGVuYWJsZWQsIHRoZSBoaWdoZXN0IEFDIGlzIHJldHVybmVkIHRoYXQgaXMKKyAqIGVuYWJsZWQgYW5kIGRvZXMgbm90IHJlcXVpcmUgYWRtaXNzaW9uIGNvbnRyb2wuCisgKi8KK3N0YXRpYyBlbnVtIG13aWZpZXhfd21tX2FjX2UKK213aWZpZXhfd21tX2V2YWxfZG93bmdyYWRlX2FjKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgICBlbnVtIG13aWZpZXhfd21tX2FjX2UgZXZhbF9hYykKK3sKKwlpbnQgZG93bl9hYzsKKwllbnVtIG13aWZpZXhfd21tX2FjX2UgcmV0X2FjOworCXN0cnVjdCBtd2lmaWV4X3dtbV9hY19zdGF0dXMgKmFjX3N0YXR1czsKKworCWFjX3N0YXR1cyA9ICZwcml2LT53bW0uYWNfc3RhdHVzW2V2YWxfYWNdOworCisJaWYgKCFhY19zdGF0dXMtPmRpc2FibGVkKQorCQkvKiBPa2F5IHRvIHVzZSB0aGlzIEFDLCBpdHMgZW5hYmxlZCAqLworCQlyZXR1cm4gZXZhbF9hYzsKKworCS8qIFNldHVwIGEgZGVmYXVsdCByZXR1cm4gdmFsdWUgb2YgdGhlIGxvd2VzdCBwcmlvcml0eSAqLworCXJldF9hYyA9IFdNTV9BQ19CSzsKKworCS8qCisJICogIEZpbmQgdGhlIGhpZ2hlc3QgQUMgdGhhdCBpcyBlbmFibGVkIGFuZCBkb2VzIG5vdCByZXF1aXJlCisJICogIGFkbWlzc2lvbiBjb250cm9sLiBUaGUgc3BlYyBkaXNhbGxvd3MgZG93bmdyYWRpbmcgdG8gYW4gQUMsCisJICogIHdoaWNoIGlzIGVuYWJsZWQgZHVlIHRvIGEgY29tcGxldGVkIGFkbWlzc2lvbiBjb250cm9sLgorCSAqICBVbmFkbWl0dGVkIHRyYWZmaWMgaXMgbm90IHRvIGJlIHNlbnQgb24gYW4gQUMgd2l0aCBhZG1pdHRlZAorCSAqICB0cmFmZmljLgorCSAqLworCWZvciAoZG93bl9hYyA9IFdNTV9BQ19CSzsgZG93bl9hYyA8IGV2YWxfYWM7IGRvd25fYWMrKykgeworCQlhY19zdGF0dXMgPSAmcHJpdi0+d21tLmFjX3N0YXR1c1tkb3duX2FjXTsKKworCQlpZiAoIWFjX3N0YXR1cy0+ZGlzYWJsZWQgJiYgIWFjX3N0YXR1cy0+Zmxvd19yZXF1aXJlZCkKKwkJCS8qIEFDIGlzIGVuYWJsZWQgYW5kIGRvZXMgbm90IHJlcXVpcmUgYWRtaXNzaW9uCisJCQkgICBjb250cm9sICovCisJCQlyZXRfYWMgPSAoZW51bSBtd2lmaWV4X3dtbV9hY19lKSBkb3duX2FjOworCX0KKworCXJldHVybiByZXRfYWM7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGRvd25ncmFkZXMgV01NIHByaW9yaXR5IHF1ZXVlLgorICovCit2b2lkCittd2lmaWV4X3dtbV9zZXR1cF9hY19kb3duZ3JhZGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdikKK3sKKwlpbnQgYWNfdmFsOworCisJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiBXTU06IEFDIFByaW9yaXRpZXM6IgorCQkJIkJLKDApLCBCRSgxKSwgVkkoMiksIFZPKDMpXG4iKTsKKworCWlmICghcHJpdi0+d21tX2VuYWJsZWQpIHsKKwkJLyogV01NIGlzIG5vdCBlbmFibGVkLCBkZWZhdWx0IHByaW9yaXRpZXMgKi8KKwkJZm9yIChhY192YWwgPSBXTU1fQUNfQks7IGFjX3ZhbCA8PSBXTU1fQUNfVk87IGFjX3ZhbCsrKQorCQkJcHJpdi0+d21tLmFjX2Rvd25fZ3JhZGVkX3ZhbHNbYWNfdmFsXSA9CisJCQkJKGVudW0gbXdpZmlleF93bW1fYWNfZSkgYWNfdmFsOworCX0gZWxzZSB7CisJCWZvciAoYWNfdmFsID0gV01NX0FDX0JLOyBhY192YWwgPD0gV01NX0FDX1ZPOyBhY192YWwrKykgeworCQkJcHJpdi0+d21tLmFjX2Rvd25fZ3JhZGVkX3ZhbHNbYWNfdmFsXQorCQkJCT0gbXdpZmlleF93bW1fZXZhbF9kb3duZ3JhZGVfYWMocHJpdiwKKwkJCQkJCShlbnVtIG13aWZpZXhfd21tX2FjX2UpIGFjX3ZhbCk7CisJCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IFdNTTogQUMgUFJJTyAlZCBtYXBzIHRvICVkXG4iLAorCQkJCWFjX3ZhbCwgcHJpdi0+d21tLmFjX2Rvd25fZ3JhZGVkX3ZhbHNbYWNfdmFsXSk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSBJUCBUT1MgZmllbGQgdG8gYW4gV01NIEFDCisgKiBRdWV1ZSBhc3NpZ25tZW50LgorICovCitzdGF0aWMgZW51bSBtd2lmaWV4X3dtbV9hY19lCittd2lmaWV4X3dtbV9jb252ZXJ0X3Rvc190b19hYyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLCB1MzIgdG9zKQoreworCS8qIE1hcCBvZiBUT1MgVVAgdmFsdWVzIHRvIFdNTSBBQyAqLworCWNvbnN0IGVudW0gbXdpZmlleF93bW1fYWNfZSB0b3NfdG9fYWNbXSA9IHsgV01NX0FDX0JFLAorCQlXTU1fQUNfQkssCisJCVdNTV9BQ19CSywKKwkJV01NX0FDX0JFLAorCQlXTU1fQUNfVkksCisJCVdNTV9BQ19WSSwKKwkJV01NX0FDX1ZPLAorCQlXTU1fQUNfVk8KKwl9OworCisJaWYgKHRvcyA+PSBBUlJBWV9TSVpFKHRvc190b19hYykpCisJCXJldHVybiBXTU1fQUNfQkU7CisKKwlyZXR1cm4gdG9zX3RvX2FjW3Rvc107Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGV2YWx1YXRlcyBhIGdpdmVuIFRJRCBhbmQgZG93bmdyYWRlcyBpdCB0byBhIGxvd2VyCisgKiBUSUQgaWYgdGhlIFdNTSBQYXJhbWV0ZXIgSUUgcmVjZWl2ZWQgZnJvbSB0aGUgQVAgaW5kaWNhdGVzIHRoYXQgdGhlCisgKiBBUCBpcyBkaXNhYmxlZCAoZHVlIHRvIGNhbGwgYWRtaXNzaW9uIGNvbnRyb2wgKEFDTSBiaXQpLiBNYXBwaW5nCisgKiBvZiBUSUQgdG8gQUMgaXMgdGFrZW4gY2FyZSBvZiBpbnRlcm5hbGx5LgorICovCitzdGF0aWMgdTgKK213aWZpZXhfd21tX2Rvd25ncmFkZV90aWQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTMyIHRpZCkKK3sKKwllbnVtIG13aWZpZXhfd21tX2FjX2UgYWMsIGFjX2Rvd247CisJdTggbmV3X3RpZDsKKworCWFjID0gbXdpZmlleF93bW1fY29udmVydF90b3NfdG9fYWMocHJpdi0+YWRhcHRlciwgdGlkKTsKKwlhY19kb3duID0gcHJpdi0+d21tLmFjX2Rvd25fZ3JhZGVkX3ZhbHNbYWNdOworCisJLyogU2VuZCB0aGUgaW5kZXggdG8gdGlkIGFycmF5LCBwaWNraW5nIGZyb20gdGhlIGFycmF5IHdpbGwgYmUKKwkgKiB0YWtlbiBjYXJlIGJ5IGRlcXVldWluZyBmdW5jdGlvbgorCSAqLworCW5ld190aWQgPSBhY190b190aWRbYWNfZG93bl1bdGlkICUgMl07CisKKwlyZXR1cm4gbmV3X3RpZDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIFdNTSBzdGF0ZSBpbmZvcm1hdGlvbiBhbmQgdGhlCisgKiBXTU0gZGF0YSBwYXRoIHF1ZXVlcy4KKyAqLwordm9pZAorbXdpZmlleF93bW1faW5pdChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBpLCBqOworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXY7CisKKwlmb3IgKGogPSAwOyBqIDwgYWRhcHRlci0+cHJpdl9udW07ICsraikgeworCQlwcml2ID0gYWRhcHRlci0+cHJpdltqXTsKKwkJaWYgKCFwcml2KQorCQkJY29udGludWU7CisKKwkJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1fVElEOyArK2kpIHsKKwkJCXByaXYtPmFnZ3JfcHJpb190YmxbaV0uYW1zZHUgPSB0b3NfdG9fdGlkX2ludltpXTsKKwkJCXByaXYtPmFnZ3JfcHJpb190YmxbaV0uYW1wZHVfYXAgPSB0b3NfdG9fdGlkX2ludltpXTsKKwkJCXByaXYtPmFnZ3JfcHJpb190YmxbaV0uYW1wZHVfdXNlciA9IHRvc190b190aWRfaW52W2ldOworCQkJcHJpdi0+d21tLnRpZF90YmxfcHRyW2ldLnJhX2xpc3RfY3VyciA9IE5VTEw7CisJCX0KKworCQlwcml2LT5hZ2dyX3ByaW9fdGJsWzZdLmFtc2R1CisJCQk9IHByaXYtPmFnZ3JfcHJpb190YmxbNl0uYW1wZHVfYXAKKwkJCT0gcHJpdi0+YWdncl9wcmlvX3RibFs2XS5hbXBkdV91c2VyCisJCQk9IEJBX1NUUkVBTV9OT1RfQUxMT1dFRDsKKworCQlwcml2LT5hZ2dyX3ByaW9fdGJsWzddLmFtc2R1ID0gcHJpdi0+YWdncl9wcmlvX3RibFs3XS5hbXBkdV9hcAorCQkJPSBwcml2LT5hZ2dyX3ByaW9fdGJsWzddLmFtcGR1X3VzZXIKKwkJCT0gQkFfU1RSRUFNX05PVF9BTExPV0VEOworCisJCXByaXYtPmFkZF9iYV9wYXJhbS50aW1lb3V0ID0gTVdJRklFWF9ERUZBVUxUX0JMT0NLX0FDS19USU1FT1VUOworCQlwcml2LT5hZGRfYmFfcGFyYW0udHhfd2luX3NpemUgPSBNV0lGSUVYX0FNUERVX0RFRl9UWFdJTlNJWkU7CisJCXByaXYtPmFkZF9iYV9wYXJhbS5yeF93aW5fc2l6ZSA9IE1XSUZJRVhfQU1QRFVfREVGX1JYV0lOU0laRTsKKwl9Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBXTU0gVHggcXVldWUgaXMgZW1wdHkuCisgKi8KK2ludAorbXdpZmlleF93bW1fbGlzdHNfZW1wdHkoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgaSwgajsKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2OworCisJZm9yIChqID0gMDsgaiA8IGFkYXB0ZXItPnByaXZfbnVtOyArK2opIHsKKwkJcHJpdiA9IGFkYXB0ZXItPnByaXZbal07CisJCWlmIChwcml2KSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgTUFYX05VTV9USUQ7IGkrKykKKwkJCQlpZiAoIW13aWZpZXhfd21tX2lzX3JhX2xpc3RfZW1wdHkoCisJCQkJCSAgICAgJnByaXYtPndtbS50aWRfdGJsX3B0cltpXS5yYV9saXN0KSkKKwkJCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGRlbGV0ZXMgYWxsIHBhY2tldHMgaW4gYW4gUkEgbGlzdCBub2RlLgorICoKKyAqIFRoZSBwYWNrZXQgc2VudCBjb21wbGV0aW9uIGNhbGxiYWNrIGhhbmRsZXIgYXJlIGNhbGxlZCB3aXRoCisgKiBzdGF0dXMgZmFpbHVyZSwgYWZ0ZXIgdGhleSBhcmUgZGVxdWV1ZWQgdG8gZW5zdXJlIHByb3BlcgorICogY2xlYW51cC4gVGhlIFJBIGxpc3Qgbm9kZSBpdHNlbGYgaXMgZnJlZWQgYXQgdGhlIGVuZC4KKyAqLworc3RhdGljIHZvaWQKK213aWZpZXhfd21tX2RlbF9wa3RzX2luX3JhbGlzdF9ub2RlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJICAgIHN0cnVjdCBtd2lmaWV4X3JhX2xpc3RfdGJsICpyYV9saXN0KQoreworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCBza19idWZmICpza2IsICp0bXA7CisKKwlza2JfcXVldWVfd2Fsa19zYWZlKCZyYV9saXN0LT5za2JfaGVhZCwgc2tiLCB0bXApCisJCW13aWZpZXhfd3JpdGVfZGF0YV9jb21wbGV0ZShhZGFwdGVyLCBza2IsIC0xKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZGVsZXRlcyBhbGwgcGFja2V0cyBpbiBhbiBSQSBsaXN0LgorICoKKyAqIEVhY2ggbm9kZXMgaW4gdGhlIFJBIGxpc3QgYXJlIGZyZWVkIGluZGl2aWR1YWxseSBmaXJzdCwgYW5kIHRoZW4KKyAqIHRoZSBSQSBsaXN0IGl0c2VsZiBpcyBmcmVlZC4KKyAqLworc3RhdGljIHZvaWQKK213aWZpZXhfd21tX2RlbF9wa3RzX2luX3JhbGlzdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnJhX2xpc3RfaGVhZCkKK3sKKwlzdHJ1Y3QgbXdpZmlleF9yYV9saXN0X3RibCAqcmFfbGlzdDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocmFfbGlzdCwgcmFfbGlzdF9oZWFkLCBsaXN0KQorCQltd2lmaWV4X3dtbV9kZWxfcGt0c19pbl9yYWxpc3Rfbm9kZShwcml2LCByYV9saXN0KTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZGVsZXRlcyBhbGwgcGFja2V0cyBpbiBhbGwgUkEgbGlzdHMuCisgKi8KK3N0YXRpYyB2b2lkIG13aWZpZXhfd21tX2NsZWFudXBfcXVldWVzKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX05VTV9USUQ7IGkrKykKKwkJbXdpZmlleF93bW1fZGVsX3BrdHNfaW5fcmFsaXN0KHByaXYsICZwcml2LT53bW0udGlkX3RibF9wdHJbaV0uCisJCQkJCQkgICAgIHJhX2xpc3QpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBkZWxldGVzIGFsbCByb3V0ZSBhZGRyZXNzZXMgZnJvbSBhbGwgUkEgbGlzdHMuCisgKi8KK3N0YXRpYyB2b2lkIG13aWZpZXhfd21tX2RlbGV0ZV9hbGxfcmFsaXN0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpCit7CisJc3RydWN0IG13aWZpZXhfcmFfbGlzdF90YmwgKnJhX2xpc3QsICp0bXBfbm9kZTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVNX1RJRDsgKytpKSB7CisJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJCSJpbmZvOiByYV9saXN0OiBmcmVlaW5nIGJ1ZiBmb3IgdGlkICVkXG4iLCBpKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJhX2xpc3QsIHRtcF9ub2RlLAorCQkJCSZwcml2LT53bW0udGlkX3RibF9wdHJbaV0ucmFfbGlzdCwgbGlzdCkgeworCQkJbGlzdF9kZWwoJnJhX2xpc3QtPmxpc3QpOworCQkJa2ZyZWUocmFfbGlzdCk7CisJCX0KKworCQlJTklUX0xJU1RfSEVBRCgmcHJpdi0+d21tLnRpZF90YmxfcHRyW2ldLnJhX2xpc3QpOworCisJCXByaXYtPndtbS50aWRfdGJsX3B0cltpXS5yYV9saXN0X2N1cnIgPSBOVUxMOworCX0KK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2xlYW5zIHVwIHRoZSBUeCBhbmQgUnggcXVldWVzLgorICoKKyAqIENsZWFudXAgaW5jbHVkZXMgLQorICogICAgICAtIEFsbCBwYWNrZXRzIGluIFJBIGxpc3RzCisgKiAgICAgIC0gQWxsIGVudHJpZXMgaW4gUnggcmVvcmRlciB0YWJsZQorICogICAgICAtIEFsbCBlbnRyaWVzIGluIFR4IEJBIHN0cmVhbSB0YWJsZQorICogICAgICAtIE1QQSBidWZmZXIgKGlmIHJlcXVpcmVkKQorICogICAgICAtIEFsbCBSQSBsaXN0cworICovCit2b2lkCittd2lmaWV4X2NsZWFuX3R4cngoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbXdpZmlleF8xMW5fY2xlYW51cF9yZW9yZGVyX3RibChwcml2KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+d21tLnJhX2xpc3Rfc3BpbmxvY2ssIGZsYWdzKTsKKworCW13aWZpZXhfd21tX2NsZWFudXBfcXVldWVzKHByaXYpOworCW13aWZpZXhfMTFuX2RlbGV0ZV9hbGxfdHhfYmFfc3RyZWFtX3RibChwcml2KTsKKworCWlmIChwcml2LT5hZGFwdGVyLT5pZl9vcHMuY2xlYW51cF9tcGFfYnVmKQorCQlwcml2LT5hZGFwdGVyLT5pZl9vcHMuY2xlYW51cF9tcGFfYnVmKHByaXYtPmFkYXB0ZXIpOworCisJbXdpZmlleF93bW1fZGVsZXRlX2FsbF9yYWxpc3QocHJpdik7CisJbWVtY3B5KHRvc190b190aWQsIGFjX3RvX3RpZCwgc2l6ZW9mKHRvc190b190aWQpKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPndtbS5yYV9saXN0X3NwaW5sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyBhIHBhcnRpY3VsYXIgUkEgbGlzdCBub2RlLCBtYXRjaGluZyB3aXRoIHRoZQorICogZ2l2ZW4gVElEIGFuZCBSQSBhZGRyZXNzLgorICovCitzdGF0aWMgc3RydWN0IG13aWZpZXhfcmFfbGlzdF90YmwgKgorbXdpZmlleF93bW1fZ2V0X3JhbGlzdF9ub2RlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHU4IHRpZCwKKwkJCSAgICB1OCAqcmFfYWRkcikKK3sKKwlzdHJ1Y3QgbXdpZmlleF9yYV9saXN0X3RibCAqcmFfbGlzdDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocmFfbGlzdCwgJnByaXYtPndtbS50aWRfdGJsX3B0clt0aWRdLnJhX2xpc3QsCisJCQkgICAgbGlzdCkgeworCQlpZiAoIW1lbWNtcChyYV9saXN0LT5yYSwgcmFfYWRkciwgRVRIX0FMRU4pKQorCQkJcmV0dXJuIHJhX2xpc3Q7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyBhbiBSQSBsaXN0IG5vZGUgZm9yIGEgZ2l2ZW4gVElEIGFuZAorICogUkEgYWRkcmVzcyBwYWlyLgorICoKKyAqIElmIG5vIHN1Y2ggbm9kZSBpcyBmb3VuZCwgYSBuZXcgbm9kZSBpcyBhZGRlZCBmaXJzdCBhbmQgdGhlbgorICogcmV0cmlldmVkLgorICovCitzdGF0aWMgc3RydWN0IG13aWZpZXhfcmFfbGlzdF90YmwgKgorbXdpZmlleF93bW1fZ2V0X3F1ZXVlX3JhcHRyKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHU4IHRpZCwgdTggKnJhX2FkZHIpCit7CisJc3RydWN0IG13aWZpZXhfcmFfbGlzdF90YmwgKnJhX2xpc3Q7CisKKwlyYV9saXN0ID0gbXdpZmlleF93bW1fZ2V0X3JhbGlzdF9ub2RlKHByaXYsIHRpZCwgcmFfYWRkcik7CisJaWYgKHJhX2xpc3QpCisJCXJldHVybiByYV9saXN0OworCW13aWZpZXhfcmFsaXN0X2FkZChwcml2LCByYV9hZGRyKTsKKworCXJldHVybiBtd2lmaWV4X3dtbV9nZXRfcmFsaXN0X25vZGUocHJpdiwgdGlkLCByYV9hZGRyKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGEgcGFydGljdWxhciBSQSBsaXN0IG5vZGUgZXhpc3RzIGluIGEgZ2l2ZW4gVElECisgKiB0YWJsZSBpbmRleC4KKyAqLworaW50Cittd2lmaWV4X2lzX3JhbGlzdF92YWxpZChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJc3RydWN0IG13aWZpZXhfcmFfbGlzdF90YmwgKnJhX2xpc3QsIGludCBwdHJfaW5kZXgpCit7CisJc3RydWN0IG13aWZpZXhfcmFfbGlzdF90YmwgKnJsaXN0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShybGlzdCwgJnByaXYtPndtbS50aWRfdGJsX3B0cltwdHJfaW5kZXhdLnJhX2xpc3QsCisJCQkgICAgbGlzdCkgeworCQlpZiAocmxpc3QgPT0gcmFfbGlzdCkKKwkJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gYWRkcyBhIHBhY2tldCB0byBXTU0gcXVldWUuCisgKgorICogSW4gZGlzY29ubmVjdGVkIHN0YXRlIHRoZSBwYWNrZXQgaXMgaW1tZWRpYXRlbHkgZHJvcHBlZCBhbmQgdGhlCisgKiBwYWNrZXQgc2VuZCBjb21wbGV0aW9uIGNhbGxiYWNrIGlzIGNhbGxlZCB3aXRoIHN0YXR1cyBmYWlsdXJlLgorICoKKyAqIE90aGVyd2lzZSwgdGhlIGNvcnJlY3QgUkEgbGlzdCBub2RlIGlzIGxvY2F0ZWQgYW5kIHRoZSBwYWNrZXQKKyAqIGlzIHF1ZXVlZCBhdCB0aGUgbGlzdCB0YWlsLgorICovCit2b2lkCittd2lmaWV4X3dtbV9hZGRfYnVmX3R4cXVldWUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBtd2lmaWV4X3R4aW5mbyAqdHhfaW5mbyA9IE1XSUZJRVhfU0tCX1RYQ0Ioc2tiKTsKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0gYWRhcHRlci0+cHJpdlt0eF9pbmZvLT5ic3NfaW5kZXhdOworCXUzMiB0aWQ7CisJc3RydWN0IG13aWZpZXhfcmFfbGlzdF90YmwgKnJhX2xpc3Q7CisJdTggcmFbRVRIX0FMRU5dLCB0aWRfZG93bjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFwcml2LT5tZWRpYV9jb25uZWN0ZWQpIHsKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJkYXRhOiBkcm9wIHBhY2tldCBpbiBkaXNjb25uZWN0XG4iKTsKKwkJbXdpZmlleF93cml0ZV9kYXRhX2NvbXBsZXRlKGFkYXB0ZXIsIHNrYiwgLTEpOworCQlyZXR1cm47CisJfQorCisJdGlkID0gc2tiLT5wcmlvcml0eTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT53bW0ucmFfbGlzdF9zcGlubG9jaywgZmxhZ3MpOworCisJdGlkX2Rvd24gPSBtd2lmaWV4X3dtbV9kb3duZ3JhZGVfdGlkKHByaXYsIHRpZCk7CisKKwkvKiBJbiBjYXNlIG9mIGluZnJhIGFzIHdlIGhhdmUgYWxyZWFkeSBjcmVhdGVkIHRoZSBsaXN0IGR1cmluZworCSAgIGFzc29jaWF0aW9uIHdlIGp1c3QgZG9uJ3QgaGF2ZSB0byBjYWxsIGdldF9xdWV1ZV9yYXB0ciwgd2Ugd2lsbAorCSAgIGhhdmUgb25seSAxIHJhcHRyIGZvciBhIHRpZCBpbiBjYXNlIG9mIGluZnJhICovCisJaWYgKCFtd2lmaWV4X3F1ZXVpbmdfcmFfYmFzZWQocHJpdikpIHsKKwkJaWYgKCFsaXN0X2VtcHR5KCZwcml2LT53bW0udGlkX3RibF9wdHJbdGlkX2Rvd25dLnJhX2xpc3QpKQorCQkJcmFfbGlzdCA9IGxpc3RfZmlyc3RfZW50cnkoCisJCQkJJnByaXYtPndtbS50aWRfdGJsX3B0clt0aWRfZG93bl0ucmFfbGlzdCwKKwkJCQlzdHJ1Y3QgbXdpZmlleF9yYV9saXN0X3RibCwgbGlzdCk7CisJCWVsc2UKKwkJCXJhX2xpc3QgPSBOVUxMOworCX0gZWxzZSB7CisJCW1lbWNweShyYSwgc2tiLT5kYXRhLCBFVEhfQUxFTik7CisJCXJhX2xpc3QgPSBtd2lmaWV4X3dtbV9nZXRfcXVldWVfcmFwdHIocHJpdiwgdGlkX2Rvd24sIHJhKTsKKwl9CisKKwlpZiAoIXJhX2xpc3QpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+d21tLnJhX2xpc3Rfc3BpbmxvY2ssIGZsYWdzKTsKKwkJbXdpZmlleF93cml0ZV9kYXRhX2NvbXBsZXRlKGFkYXB0ZXIsIHNrYiwgLTEpOworCQlyZXR1cm47CisJfQorCisJc2tiX3F1ZXVlX3RhaWwoJnJhX2xpc3QtPnNrYl9oZWFkLCBza2IpOworCisJcmFfbGlzdC0+dG90YWxfcGt0c19zaXplICs9IHNrYi0+bGVuOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+d21tLnJhX2xpc3Rfc3BpbmxvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcHJvY2Vzc2VzIHRoZSBnZXQgV01NIHN0YXR1cyBjb21tYW5kIHJlc3BvbnNlIGZyb20gZmlybXdhcmUuCisgKgorICogVGhlIHJlc3BvbnNlIG1heSBjb250YWluIG11bHRpcGxlIFRMVnMgLQorICogICAgICAtIEFDIFF1ZXVlIHN0YXR1cyBUTFZzCisgKiAgICAgIC0gQ3VycmVudCBXTU0gUGFyYW1ldGVyIElFIFRMVgorICogICAgICAtIEFkbWlzc2lvbiBDb250cm9sIGFjdGlvbiBmcmFtZSBUTFZzCisgKgorICogVGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhlIFRMVnMgYW5kIHRoZW4gY2FsbHMgZnVydGhlciBzcGVjaWZpYyBmdW5jdGlvbnMKKyAqIHRvIHByb2Nlc3MgYW55IGNoYW5nZXMgaW4gdGhlIHF1ZXVlIHByaW9yaXRpemUgb3Igc3RhdGUuCisgKi8KK2ludCBtd2lmaWV4X3JldF93bW1fZ2V0X3N0YXR1cyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwKQoreworCXU4ICpjdXJyID0gKHU4ICopICZyZXNwLT5wYXJhbXMuZ2V0X3dtbV9zdGF0dXM7CisJdWludDE2X3QgcmVzcF9sZW4gPSBsZTE2X3RvX2NwdShyZXNwLT5zaXplKSwgdGx2X2xlbjsKKwlpbnQgdmFsaWQgPSB0cnVlOworCisJc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfZGF0YSAqdGx2X2hkcjsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc193bW1fcXVldWVfc3RhdHVzICp0bHZfd21tX3FzdGF0dXM7CisJc3RydWN0IGllZWVfdHlwZXNfd21tX3BhcmFtZXRlciAqd21tX3BhcmFtX2llID0gTlVMTDsKKwlzdHJ1Y3QgbXdpZmlleF93bW1fYWNfc3RhdHVzICphY19zdGF0dXM7CisKKwlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IFdNTTogV01NX0dFVF9TVEFUVVMgY21kcmVzcCByZWNlaXZlZDogJWRcbiIsCisJCQlyZXNwX2xlbik7CisKKwl3aGlsZSAoKHJlc3BfbGVuID49IHNpemVvZih0bHZfaGRyLT5oZWFkZXIpKSAmJiB2YWxpZCkgeworCQl0bHZfaGRyID0gKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2RhdGEgKikgY3VycjsKKwkJdGx2X2xlbiA9IGxlMTZfdG9fY3B1KHRsdl9oZHItPmhlYWRlci5sZW4pOworCisJCXN3aXRjaCAobGUxNl90b19jcHUodGx2X2hkci0+aGVhZGVyLnR5cGUpKSB7CisJCWNhc2UgVExWX1RZUEVfV01NUVNUQVRVUzoKKwkJCXRsdl93bW1fcXN0YXR1cyA9CisJCQkJKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3dtbV9xdWV1ZV9zdGF0dXMgKikKKwkJCQl0bHZfaGRyOworCQkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkJImluZm86IENNRF9SRVNQOiBXTU1fR0VUX1NUQVRVUzoiCisJCQkJIiBRU1RBVFVTIFRMVjogJWQsICVkLCAlZFxuIiwKKwkJCSAgICAgICB0bHZfd21tX3FzdGF0dXMtPnF1ZXVlX2luZGV4LAorCQkJICAgICAgIHRsdl93bW1fcXN0YXR1cy0+Zmxvd19yZXF1aXJlZCwKKwkJCSAgICAgICB0bHZfd21tX3FzdGF0dXMtPmRpc2FibGVkKTsKKworCQkJYWNfc3RhdHVzID0gJnByaXYtPndtbS5hY19zdGF0dXNbdGx2X3dtbV9xc3RhdHVzLT4KKwkJCQkJCQkgcXVldWVfaW5kZXhdOworCQkJYWNfc3RhdHVzLT5kaXNhYmxlZCA9IHRsdl93bW1fcXN0YXR1cy0+ZGlzYWJsZWQ7CisJCQlhY19zdGF0dXMtPmZsb3dfcmVxdWlyZWQgPQorCQkJCXRsdl93bW1fcXN0YXR1cy0+Zmxvd19yZXF1aXJlZDsKKwkJCWFjX3N0YXR1cy0+Zmxvd19jcmVhdGVkID0gdGx2X3dtbV9xc3RhdHVzLT5mbG93X2NyZWF0ZWQ7CisJCQlicmVhazsKKworCQljYXNlIFdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQzoKKwkJCS8qCisJCQkgKiBQb2ludCB0aGUgcmVndWxhciBJRUVFIElFIDIgYnl0ZXMgaW50byB0aGUgTWFydmVsbCBJRQorCQkJICogICBhbmQgc2V0dXAgdGhlIElFRUUgSUUgdHlwZSBhbmQgbGVuZ3RoIGJ5dGUgZmllbGRzCisJCQkgKi8KKworCQkJd21tX3BhcmFtX2llID0KKwkJCQkoc3RydWN0IGllZWVfdHlwZXNfd21tX3BhcmFtZXRlciAqKSAoY3VyciArCisJCQkJCQkJCSAgICAyKTsKKwkJCXdtbV9wYXJhbV9pZS0+dmVuZF9oZHIubGVuID0gKHU4KSB0bHZfbGVuOworCQkJd21tX3BhcmFtX2llLT52ZW5kX2hkci5lbGVtZW50X2lkID0KKwkJCQkJCVdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQzsKKworCQkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkJImluZm86IENNRF9SRVNQOiBXTU1fR0VUX1NUQVRVUzoiCisJCQkJIiBXTU0gUGFyYW1ldGVyIFNldCBDb3VudDogJWRcbiIsCisJCQkJd21tX3BhcmFtX2llLT5xb3NfaW5mb19iaXRtYXAgJgorCQkJCUlFRUU4MDIxMV9XTU1fSUVfQVBfUU9TSU5GT19QQVJBTV9TRVRfQ05UX01BU0spOworCisJCQltZW1jcHkoKHU4ICopICZwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IuCisJCQkgICAgICAgd21tX2llLCB3bW1fcGFyYW1faWUsCisJCQkgICAgICAgd21tX3BhcmFtX2llLT52ZW5kX2hkci5sZW4gKyAyKTsKKworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXZhbGlkID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCisJCWN1cnIgKz0gKHRsdl9sZW4gKyBzaXplb2YodGx2X2hkci0+aGVhZGVyKSk7CisJCXJlc3BfbGVuIC09ICh0bHZfbGVuICsgc2l6ZW9mKHRsdl9oZHItPmhlYWRlcikpOworCX0KKworCW13aWZpZXhfd21tX3NldHVwX3F1ZXVlX3ByaW9yaXRpZXMocHJpdiwgd21tX3BhcmFtX2llKTsKKwltd2lmaWV4X3dtbV9zZXR1cF9hY19kb3duZ3JhZGUocHJpdik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENhbGxiYWNrIGhhbmRsZXIgZnJvbSB0aGUgY29tbWFuZCBtb2R1bGUgdG8gYWxsb3cgaW5zZXJ0aW9uIG9mIGEgV01NIFRMVi4KKyAqCisgKiBJZiB0aGUgQlNTIHdlIGFyZSBhc3NvY2lhdGluZyB0byBzdXBwb3J0cyBXTU0sIHRoaXMgZnVuY3Rpb24gYWRkcyB0aGUKKyAqIHJlcXVpcmVkIFdNTSBJbmZvcm1hdGlvbiBJRSB0byB0aGUgYXNzb2NpYXRpb24gcmVxdWVzdCBjb21tYW5kIGJ1ZmZlciBpbgorICogdGhlIGZvcm0gb2YgYSBNYXJ2ZWxsIGV4dGVuZGVkIElFRUUgSUUuCisgKi8KK3UzMgorbXdpZmlleF93bW1fcHJvY2Vzc19hc3NvY2lhdGlvbl9yZXEoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgICAgdTggKiphc3NvY19idWYsCisJCQkJICAgIHN0cnVjdCBpZWVlX3R5cGVzX3dtbV9wYXJhbWV0ZXIgKndtbV9pZSwKKwkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9odF9jYXAgKmh0X2NhcCkKK3sKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc193bW1fcGFyYW1fc2V0ICp3bW1fdGx2OworCXUzMiByZXRfbGVuID0gMDsKKworCS8qIE51bGwgY2hlY2tzICovCisJaWYgKCFhc3NvY19idWYpCisJCXJldHVybiAwOworCWlmICghKCphc3NvY19idWYpKQorCQlyZXR1cm4gMDsKKworCWlmICghd21tX2llKQorCQlyZXR1cm4gMDsKKworCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiaW5mbzogV01NOiBwcm9jZXNzIGFzc29jIHJlcToiCisJCQkiYnNzLT53bW1JZT0weCV4XG4iLAorCQkJd21tX2llLT52ZW5kX2hkci5lbGVtZW50X2lkKTsKKworCWlmICgocHJpdi0+d21tX3JlcXVpcmVkCisJICAgICB8fCAoaHRfY2FwICYmIChwcml2LT5hZGFwdGVyLT5jb25maWdfYmFuZHMgJiBCQU5EX0dOCisJCSAgICAgfHwgcHJpdi0+YWRhcHRlci0+Y29uZmlnX2JhbmRzICYgQkFORF9BTikpCisJICAgICkKKwkgICAgJiYgd21tX2llLT52ZW5kX2hkci5lbGVtZW50X2lkID09IFdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQykgeworCQl3bW1fdGx2ID0gKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3dtbV9wYXJhbV9zZXQgKikgKmFzc29jX2J1ZjsKKwkJd21tX3Rsdi0+aGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNigodTE2KSB3bW1faW5mb19pZVswXSk7CisJCXdtbV90bHYtPmhlYWRlci5sZW4gPSBjcHVfdG9fbGUxNigodTE2KSB3bW1faW5mb19pZVsxXSk7CisJCW1lbWNweSh3bW1fdGx2LT53bW1faWUsICZ3bW1faW5mb19pZVsyXSwKKwkJCWxlMTZfdG9fY3B1KHdtbV90bHYtPmhlYWRlci5sZW4pKTsKKwkJaWYgKHdtbV9pZS0+cW9zX2luZm9fYml0bWFwICYgSUVFRTgwMjExX1dNTV9JRV9BUF9RT1NJTkZPX1VBUFNEKQorCQkJbWVtY3B5KCh1OCAqKSAod21tX3Rsdi0+d21tX2llCisJCQkJCSsgbGUxNl90b19jcHUod21tX3Rsdi0+aGVhZGVyLmxlbikKKwkJCQkJIC0gc2l6ZW9mKHByaXYtPndtbV9xb3NpbmZvKSksCisJCQkJCSZwcml2LT53bW1fcW9zaW5mbywKKwkJCQkJc2l6ZW9mKHByaXYtPndtbV9xb3NpbmZvKSk7CisKKwkJcmV0X2xlbiA9IHNpemVvZih3bW1fdGx2LT5oZWFkZXIpCisJCQkrIGxlMTZfdG9fY3B1KHdtbV90bHYtPmhlYWRlci5sZW4pOworCisJCSphc3NvY19idWYgKz0gcmV0X2xlbjsKKwl9CisKKwlyZXR1cm4gcmV0X2xlbjsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY29tcHV0ZXMgdGhlIHRpbWUgZGVsYXkgaW4gdGhlIGRyaXZlciBxdWV1ZXMgZm9yIGEKKyAqIGdpdmVuIHBhY2tldC4KKyAqCisgKiBXaGVuIHRoZSBwYWNrZXQgaXMgcmVjZWl2ZWQgYXQgdGhlIE9TL0RyaXZlciBpbnRlcmZhY2UsIHRoZSBjdXJyZW50CisgKiB0aW1lIGlzIHNldCBpbiB0aGUgcGFja2V0IHN0cnVjdHVyZS4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgcHJlc2VudAorICogdGltZSBhbmQgdGhhdCByZWNlaXZlZCB0aW1lIGlzIGNvbXB1dGVkIGluIHRoaXMgZnVuY3Rpb24gYW5kIGxpbWl0ZWQKKyAqIGJhc2VkIG9uIHByZS1jb21waWxlZCBsaW1pdHMgaW4gdGhlIGRyaXZlci4KKyAqLwordTgKK213aWZpZXhfd21tX2NvbXB1dGVfZHJ2X3BrdF9kZWxheShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCQljb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXU4IHJldF92YWw7CisJc3RydWN0IHRpbWV2YWwgb3V0X3RzdGFtcCwgaW5fdHN0YW1wOworCXUzMiBxdWV1ZV9kZWxheTsKKworCWRvX2dldHRpbWVvZmRheSgmb3V0X3RzdGFtcCk7CisJaW5fdHN0YW1wID0ga3RpbWVfdG9fdGltZXZhbChza2ItPnRzdGFtcCk7CisKKwlxdWV1ZV9kZWxheSA9IChvdXRfdHN0YW1wLnR2X3NlYyAtIGluX3RzdGFtcC50dl9zZWMpICogMTAwMDsKKwlxdWV1ZV9kZWxheSArPSAob3V0X3RzdGFtcC50dl91c2VjIC0gaW5fdHN0YW1wLnR2X3VzZWMpIC8gMTAwMDsKKworCS8qCisJICogUXVldWUgZGVsYXkgaXMgcGFzc2VkIGFzIGEgdWludDggaW4gdW5pdHMgb2YgMm1zIChtcyBzaGlmdGVkCisJICogIGJ5IDEpLiBNaW4gdmFsdWUgKG90aGVyIHRoYW4gMCkgaXMgdGhlcmVmb3JlIDJtcywgbWF4IGlzIDUxMG1zLgorCSAqCisJICogUGFzcyBtYXggdmFsdWUgaWYgcXVldWVfZGVsYXkgaXMgYmV5b25kIHRoZSB1aW50OCByYW5nZQorCSAqLworCXJldF92YWwgPSAodTgpIChtaW4ocXVldWVfZGVsYXksIHByaXYtPndtbS5kcnZfcGt0X2RlbGF5X21heCkgPj4gMSk7CisKKwlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImRhdGE6IFdNTTogUGt0IERlbGF5OiAlZCBtcywiCisJCQkJIiAlZCBtcyBzZW50IHRvIEZXXG4iLCBxdWV1ZV9kZWxheSwgcmV0X3ZhbCk7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBoaWdoZXN0IHByaW9yaXR5IFJBIGxpc3QgdGFibGUgcG9pbnRlci4KKyAqLworc3RhdGljIHN0cnVjdCBtd2lmaWV4X3JhX2xpc3RfdGJsICoKK213aWZpZXhfd21tX2dldF9oaWdoZXN0X3ByaW9saXN0X3B0cihzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgICAgc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqKnByaXYsIGludCAqdGlkKQoreworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXZfdG1wOworCXN0cnVjdCBtd2lmaWV4X3JhX2xpc3RfdGJsICpwdHIsICpoZWFkOworCXN0cnVjdCBtd2lmaWV4X2Jzc19wcmlvX25vZGUgKmJzc3ByaW9fbm9kZSwgKmJzc3ByaW9faGVhZDsKKwlzdHJ1Y3QgbXdpZmlleF90aWRfdGJsICp0aWRfcHRyOworCWludCBpc19saXN0X2VtcHR5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGksIGo7CisKKwlmb3IgKGogPSBhZGFwdGVyLT5wcml2X251bSAtIDE7IGogPj0gMDsgLS1qKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5ic3NfcHJpb190Ymxbal0uYnNzX3ByaW9fbG9jaywKKwkJCQlmbGFncyk7CisJCWlzX2xpc3RfZW1wdHkgPSBsaXN0X2VtcHR5KCZhZGFwdGVyLT5ic3NfcHJpb190Ymxbal0KKwkJCQkuYnNzX3ByaW9faGVhZCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmJzc19wcmlvX3RibFtqXS5ic3NfcHJpb19sb2NrLAorCQkJCWZsYWdzKTsKKwkJaWYgKGlzX2xpc3RfZW1wdHkpCisJCQljb250aW51ZTsKKworCQlpZiAoYWRhcHRlci0+YnNzX3ByaW9fdGJsW2pdLmJzc19wcmlvX2N1ciA9PQorCQkgICAgKHN0cnVjdCBtd2lmaWV4X2Jzc19wcmlvX25vZGUgKikKKwkJICAgICZhZGFwdGVyLT5ic3NfcHJpb190Ymxbal0uYnNzX3ByaW9faGVhZCkgeworCQkJYnNzcHJpb19ub2RlID0KKwkJCQlsaXN0X2ZpcnN0X2VudHJ5KCZhZGFwdGVyLT5ic3NfcHJpb190Ymxbal0KKwkJCQkJCSAuYnNzX3ByaW9faGVhZCwKKwkJCQkJCSBzdHJ1Y3QgbXdpZmlleF9ic3NfcHJpb19ub2RlLAorCQkJCQkJIGxpc3QpOworCQkJYnNzcHJpb19oZWFkID0gYnNzcHJpb19ub2RlOworCQl9IGVsc2UgeworCQkJYnNzcHJpb19ub2RlID0gYWRhcHRlci0+YnNzX3ByaW9fdGJsW2pdLmJzc19wcmlvX2N1cjsKKwkJCWJzc3ByaW9faGVhZCA9IGJzc3ByaW9fbm9kZTsKKwkJfQorCisJCWRvIHsKKwkJCXByaXZfdG1wID0gYnNzcHJpb19ub2RlLT5wcml2OworCisJCQlmb3IgKGkgPSBISUdIX1BSSU9fVElEOyBpID49IExPV19QUklPX1RJRDsgLS1pKSB7CisKKwkJCQl0aWRfcHRyID0gJihwcml2X3RtcCktPndtbS4KKwkJCQkJdGlkX3RibF9wdHJbdG9zX3RvX3RpZFtpXV07CisKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmdGlkX3B0ci0+dGlkX3RibF9sb2NrLAorCQkJCQkJICBmbGFncyk7CisJCQkJaXNfbGlzdF9lbXB0eSA9CisJCQkJCWxpc3RfZW1wdHkoJmFkYXB0ZXItPmJzc19wcmlvX3RibFtqXQorCQkJCQkJICAgLmJzc19wcmlvX2hlYWQpOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpZF9wdHItPnRpZF90YmxfbG9jaywKKwkJCQkJCSAgICAgICBmbGFncyk7CisJCQkJaWYgKGlzX2xpc3RfZW1wdHkpCisJCQkJCWNvbnRpbnVlOworCisJCQkJLyoKKwkJCQkgKiBBbHdheXMgY2hvb3NlIHRoZSBuZXh0IHJhIHdlIHRyYW5zbWl0dGVkCisJCQkJICogbGFzdCB0aW1lLCB0aGlzIHdheSB3ZSBwaWNrIHRoZSByYSdzIGluCisJCQkJICogcm91bmQgcm9iaW4gZmFzaGlvbi4KKwkJCQkgKi8KKwkJCQlwdHIgPSBsaXN0X2ZpcnN0X2VudHJ5KAorCQkJCQkJJnRpZF9wdHItPnJhX2xpc3RfY3Vyci0+bGlzdCwKKwkJCQkJCXN0cnVjdCBtd2lmaWV4X3JhX2xpc3RfdGJsLAorCQkJCQkJbGlzdCk7CisKKwkJCQloZWFkID0gcHRyOworCQkJCWlmIChwdHIgPT0gKHN0cnVjdCBtd2lmaWV4X3JhX2xpc3RfdGJsICopCisJCQkJCQkmdGlkX3B0ci0+cmFfbGlzdCkgeworCQkJCQkvKiBHZXQgbmV4dCByYSAqLworCQkJCQlwdHIgPSBsaXN0X2ZpcnN0X2VudHJ5KCZwdHItPmxpc3QsCisJCQkJCSAgICBzdHJ1Y3QgbXdpZmlleF9yYV9saXN0X3RibCwgbGlzdCk7CisJCQkJCWhlYWQgPSBwdHI7CisJCQkJfQorCisJCQkJZG8geworCQkJCQlpc19saXN0X2VtcHR5ID0KKwkJCQkJCXNrYl9xdWV1ZV9lbXB0eSgmcHRyLT5za2JfaGVhZCk7CisJCQkJCWlmICghaXNfbGlzdF9lbXB0eSkgeworCQkJCQkJKnByaXYgPSBwcml2X3RtcDsKKwkJCQkJCSp0aWQgPSB0b3NfdG9fdGlkW2ldOworCQkJCQkJcmV0dXJuIHB0cjsKKwkJCQkJfQorCQkJCQkvKiBHZXQgbmV4dCByYSAqLworCQkJCQlwdHIgPSBsaXN0X2ZpcnN0X2VudHJ5KCZwdHItPmxpc3QsCisJCQkJCQkgc3RydWN0IG13aWZpZXhfcmFfbGlzdF90YmwsCisJCQkJCQkgbGlzdCk7CisJCQkJCWlmIChwdHIgPT0KKwkJCQkJICAgIChzdHJ1Y3QgbXdpZmlleF9yYV9saXN0X3RibCAqKQorCQkJCQkgICAgJnRpZF9wdHItPnJhX2xpc3QpCisJCQkJCQlwdHIgPSBsaXN0X2ZpcnN0X2VudHJ5KAorCQkJCQkJICAgICZwdHItPmxpc3QsCisJCQkJCQkgICAgc3RydWN0IG13aWZpZXhfcmFfbGlzdF90YmwsCisJCQkJCQkgICAgbGlzdCk7CisJCQkJfSB3aGlsZSAocHRyICE9IGhlYWQpOworCQkJfQorCisJCQkvKiBHZXQgbmV4dCBic3MgcHJpb3JpdHkgbm9kZSAqLworCQkJYnNzcHJpb19ub2RlID0gbGlzdF9maXJzdF9lbnRyeSgmYnNzcHJpb19ub2RlLT5saXN0LAorCQkJCQkJc3RydWN0IG13aWZpZXhfYnNzX3ByaW9fbm9kZSwKKwkJCQkJCWxpc3QpOworCisJCQlpZiAoYnNzcHJpb19ub2RlID09CisJCQkgICAgKHN0cnVjdCBtd2lmaWV4X2Jzc19wcmlvX25vZGUgKikKKwkJCSAgICAmYWRhcHRlci0+YnNzX3ByaW9fdGJsW2pdLmJzc19wcmlvX2hlYWQpCisJCQkJLyogR2V0IG5leHQgYnNzIHByaW9yaXR5IG5vZGUgKi8KKwkJCQlic3NwcmlvX25vZGUgPSBsaXN0X2ZpcnN0X2VudHJ5KAorCQkJCQkJJmJzc3ByaW9fbm9kZS0+bGlzdCwKKwkJCQkJCXN0cnVjdCBtd2lmaWV4X2Jzc19wcmlvX25vZGUsCisJCQkJCQlsaXN0KTsKKwkJfSB3aGlsZSAoYnNzcHJpb19ub2RlICE9IGJzc3ByaW9faGVhZCk7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBudW1iZXIgb2YgcGFja2V0cyBpbiB0aGUgVHggcXVldWUgb2YgYQorICogcGFydGljdWxhciBSQSBsaXN0LgorICovCitzdGF0aWMgaW50Cittd2lmaWV4X251bV9wa3RzX2luX3R4cShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJc3RydWN0IG13aWZpZXhfcmFfbGlzdF90YmwgKnB0ciwgaW50IG1heF9idWZfc2l6ZSkKK3sKKwlpbnQgY291bnQgPSAwLCB0b3RhbF9zaXplID0gMDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdG1wOworCisJc2tiX3F1ZXVlX3dhbGtfc2FmZSgmcHRyLT5za2JfaGVhZCwgc2tiLCB0bXApIHsKKwkJdG90YWxfc2l6ZSArPSBza2ItPmxlbjsKKwkJaWYgKHRvdGFsX3NpemUgPCBtYXhfYnVmX3NpemUpCisJCQkrK2NvdW50OworCQllbHNlCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgc2luZ2xlIHBhY2tldCB0byBmaXJtd2FyZSBmb3IgdHJhbnNtaXNzaW9uLgorICovCitzdGF0aWMgdm9pZAorbXdpZmlleF9zZW5kX3NpbmdsZV9wYWNrZXQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgIHN0cnVjdCBtd2lmaWV4X3JhX2xpc3RfdGJsICpwdHIsIGludCBwdHJfaW5kZXgsCisJCQkgICB1bnNpZ25lZCBsb25nIHJhX2xpc3RfZmxhZ3MpCisJCQkgICBfX3JlbGVhc2VzKCZwcml2LT53bW0ucmFfbGlzdF9zcGlubG9jaykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqc2tiX25leHQ7CisJc3RydWN0IG13aWZpZXhfdHhfcGFyYW0gdHhfcGFyYW07CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IG13aWZpZXhfdHhpbmZvICp0eF9pbmZvOworCisJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmcHRyLT5za2JfaGVhZCkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+d21tLnJhX2xpc3Rfc3BpbmxvY2ssCisJCQkJICAgICAgIHJhX2xpc3RfZmxhZ3MpOworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImRhdGE6IG5vdGhpbmcgdG8gc2VuZFxuIik7CisJCXJldHVybjsKKwl9CisKKwlza2IgPSBza2JfZGVxdWV1ZSgmcHRyLT5za2JfaGVhZCk7CisKKwl0eF9pbmZvID0gTVdJRklFWF9TS0JfVFhDQihza2IpOworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiZGF0YTogZGVxdWV1aW5nIHRoZSBwYWNrZXQgJXAgJXBcbiIsIHB0ciwgc2tiKTsKKworCXB0ci0+dG90YWxfcGt0c19zaXplIC09IHNrYi0+bGVuOworCisJaWYgKCFza2JfcXVldWVfZW1wdHkoJnB0ci0+c2tiX2hlYWQpKQorCQlza2JfbmV4dCA9IHNrYl9wZWVrKCZwdHItPnNrYl9oZWFkKTsKKwllbHNlCisJCXNrYl9uZXh0ID0gTlVMTDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPndtbS5yYV9saXN0X3NwaW5sb2NrLCByYV9saXN0X2ZsYWdzKTsKKworCXR4X3BhcmFtLm5leHRfcGt0X2xlbiA9ICgoc2tiX25leHQpID8gc2tiX25leHQtPmxlbiArCisJCQkJc2l6ZW9mKHN0cnVjdCB0eHBkKSA6IDApOworCisJaWYgKG13aWZpZXhfcHJvY2Vzc190eChwcml2LCBza2IsICZ0eF9wYXJhbSkgPT0gLUVCVVNZKSB7CisJCS8qIFF1ZXVlIHRoZSBwYWNrZXQgYmFjayBhdCB0aGUgaGVhZCAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+d21tLnJhX2xpc3Rfc3BpbmxvY2ssIHJhX2xpc3RfZmxhZ3MpOworCisJCWlmICghbXdpZmlleF9pc19yYWxpc3RfdmFsaWQocHJpdiwgcHRyLCBwdHJfaW5kZXgpKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT53bW0ucmFfbGlzdF9zcGlubG9jaywKKwkJCQkJICAgICAgIHJhX2xpc3RfZmxhZ3MpOworCQkJbXdpZmlleF93cml0ZV9kYXRhX2NvbXBsZXRlKGFkYXB0ZXIsIHNrYiwgLTEpOworCQkJcmV0dXJuOworCQl9CisKKwkJc2tiX3F1ZXVlX3RhaWwoJnB0ci0+c2tiX2hlYWQsIHNrYik7CisKKwkJcHRyLT50b3RhbF9wa3RzX3NpemUgKz0gc2tiLT5sZW47CisJCXR4X2luZm8tPmZsYWdzIHw9IE1XSUZJRVhfQlVGX0ZMQUdfUkVRVUVVRURfUEtUOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT53bW0ucmFfbGlzdF9zcGlubG9jaywKKwkJCQkgICAgICAgcmFfbGlzdF9mbGFncyk7CisJfSBlbHNlIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPndtbS5yYV9saXN0X3NwaW5sb2NrLCByYV9saXN0X2ZsYWdzKTsKKwkJaWYgKG13aWZpZXhfaXNfcmFsaXN0X3ZhbGlkKHByaXYsIHB0ciwgcHRyX2luZGV4KSkgeworCQkJcHJpdi0+d21tLnBhY2tldHNfb3V0W3B0cl9pbmRleF0rKzsKKwkJCXByaXYtPndtbS50aWRfdGJsX3B0cltwdHJfaW5kZXhdLnJhX2xpc3RfY3VyciA9IHB0cjsKKwkJfQorCQlhZGFwdGVyLT5ic3NfcHJpb190YmxbcHJpdi0+YnNzX3ByaW9yaXR5XS5ic3NfcHJpb19jdXIgPQorCQkJbGlzdF9maXJzdF9lbnRyeSgKKwkJCQkmYWRhcHRlci0+YnNzX3ByaW9fdGJsW3ByaXYtPmJzc19wcmlvcml0eV0KKwkJCQkuYnNzX3ByaW9fY3VyLT5saXN0LAorCQkJCXN0cnVjdCBtd2lmaWV4X2Jzc19wcmlvX25vZGUsCisJCQkJbGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPndtbS5yYV9saXN0X3NwaW5sb2NrLAorCQkJCSAgICAgICByYV9saXN0X2ZsYWdzKTsKKwl9Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgZmlyc3QgcGFja2V0IGluIHRoZSBnaXZlbiBSQSBsaXN0CisgKiBpcyBhbHJlYWR5IHByb2Nlc3NlZCBvciBub3QuCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfaXNfcHRyX3Byb2Nlc3NlZChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJIHN0cnVjdCBtd2lmaWV4X3JhX2xpc3RfdGJsICpwdHIpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgbXdpZmlleF90eGluZm8gKnR4X2luZm87CisKKwlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZwdHItPnNrYl9oZWFkKSkKKwkJcmV0dXJuIGZhbHNlOworCisJc2tiID0gc2tiX3BlZWsoJnB0ci0+c2tiX2hlYWQpOworCisJdHhfaW5mbyA9IE1XSUZJRVhfU0tCX1RYQ0Ioc2tiKTsKKwlpZiAodHhfaW5mby0+ZmxhZ3MgJiBNV0lGSUVYX0JVRl9GTEFHX1JFUVVFVUVEX1BLVCkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgc2luZ2xlIHByb2Nlc3NlZCBwYWNrZXQgdG8gZmlybXdhcmUgZm9yCisgKiB0cmFuc21pc3Npb24uCisgKi8KK3N0YXRpYyB2b2lkCittd2lmaWV4X3NlbmRfcHJvY2Vzc2VkX3BhY2tldChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICAgc3RydWN0IG13aWZpZXhfcmFfbGlzdF90YmwgKnB0ciwgaW50IHB0cl9pbmRleCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcmFfbGlzdF9mbGFncykKKwkJCQlfX3JlbGVhc2VzKCZwcml2LT53bW0ucmFfbGlzdF9zcGlubG9jaykKK3sKKwlzdHJ1Y3QgbXdpZmlleF90eF9wYXJhbSB0eF9wYXJhbTsKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwlpbnQgcmV0ID0gLTE7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKnNrYl9uZXh0OworCXN0cnVjdCBtd2lmaWV4X3R4aW5mbyAqdHhfaW5mbzsKKworCWlmIChza2JfcXVldWVfZW1wdHkoJnB0ci0+c2tiX2hlYWQpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPndtbS5yYV9saXN0X3NwaW5sb2NrLAorCQkJCSAgICAgICByYV9saXN0X2ZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCXNrYiA9IHNrYl9kZXF1ZXVlKCZwdHItPnNrYl9oZWFkKTsKKworCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZwdHItPnNrYl9oZWFkKSkKKwkJc2tiX25leHQgPSBza2JfcGVlaygmcHRyLT5za2JfaGVhZCk7CisJZWxzZQorCQlza2JfbmV4dCA9IE5VTEw7CisKKwl0eF9pbmZvID0gTVdJRklFWF9TS0JfVFhDQihza2IpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+d21tLnJhX2xpc3Rfc3BpbmxvY2ssIHJhX2xpc3RfZmxhZ3MpOworCXR4X3BhcmFtLm5leHRfcGt0X2xlbiA9CisJCSgoc2tiX25leHQpID8gc2tiX25leHQtPmxlbiArCisJCSBzaXplb2Yoc3RydWN0IHR4cGQpIDogMCk7CisJcmV0ID0gYWRhcHRlci0+aWZfb3BzLmhvc3RfdG9fY2FyZChhZGFwdGVyLCBNV0lGSUVYX1RZUEVfREFUQSwKKwkJCQkJICAgc2tiLT5kYXRhLCBza2ItPmxlbiwgJnR4X3BhcmFtKTsKKwlzd2l0Y2ggKHJldCkgeworCWNhc2UgLUVCVVNZOgorCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImRhdGE6IC1FQlVTWSBpcyByZXR1cm5lZFxuIik7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT53bW0ucmFfbGlzdF9zcGlubG9jaywgcmFfbGlzdF9mbGFncyk7CisKKwkJaWYgKCFtd2lmaWV4X2lzX3JhbGlzdF92YWxpZChwcml2LCBwdHIsIHB0cl9pbmRleCkpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPndtbS5yYV9saXN0X3NwaW5sb2NrLAorCQkJCQkgICAgICAgcmFfbGlzdF9mbGFncyk7CisJCQltd2lmaWV4X3dyaXRlX2RhdGFfY29tcGxldGUoYWRhcHRlciwgc2tiLCAtMSk7CisJCQlyZXR1cm47CisJCX0KKworCQlza2JfcXVldWVfdGFpbCgmcHRyLT5za2JfaGVhZCwgc2tiKTsKKworCQl0eF9pbmZvLT5mbGFncyB8PSBNV0lGSUVYX0JVRl9GTEFHX1JFUVVFVUVEX1BLVDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+d21tLnJhX2xpc3Rfc3BpbmxvY2ssCisJCQkJICAgICAgIHJhX2xpc3RfZmxhZ3MpOworCQlicmVhazsKKwljYXNlIC0xOgorCQlhZGFwdGVyLT5kYXRhX3NlbnQgPSBmYWxzZTsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJob3N0X3RvX2NhcmQgZmFpbGVkOiAlI3hcbiIsIHJldCk7CisJCWFkYXB0ZXItPmRiZy5udW1fdHhfaG9zdF90b19jYXJkX2ZhaWx1cmUrKzsKKwkJbXdpZmlleF93cml0ZV9kYXRhX2NvbXBsZXRlKGFkYXB0ZXIsIHNrYiwgcmV0KTsKKwkJYnJlYWs7CisJY2FzZSAtRUlOUFJPR1JFU1M6CisJCWFkYXB0ZXItPmRhdGFfc2VudCA9IGZhbHNlOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlpZiAocmV0ICE9IC1FQlVTWSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+d21tLnJhX2xpc3Rfc3BpbmxvY2ssIHJhX2xpc3RfZmxhZ3MpOworCQlpZiAobXdpZmlleF9pc19yYWxpc3RfdmFsaWQocHJpdiwgcHRyLCBwdHJfaW5kZXgpKSB7CisJCQlwcml2LT53bW0ucGFja2V0c19vdXRbcHRyX2luZGV4XSsrOworCQkJcHJpdi0+d21tLnRpZF90YmxfcHRyW3B0cl9pbmRleF0ucmFfbGlzdF9jdXJyID0gcHRyOworCQl9CisJCWFkYXB0ZXItPmJzc19wcmlvX3RibFtwcml2LT5ic3NfcHJpb3JpdHldLmJzc19wcmlvX2N1ciA9CisJCQlsaXN0X2ZpcnN0X2VudHJ5KAorCQkJCSZhZGFwdGVyLT5ic3NfcHJpb190YmxbcHJpdi0+YnNzX3ByaW9yaXR5XQorCQkJCS5ic3NfcHJpb19jdXItPmxpc3QsCisJCQkJc3RydWN0IG13aWZpZXhfYnNzX3ByaW9fbm9kZSwKKwkJCQlsaXN0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+d21tLnJhX2xpc3Rfc3BpbmxvY2ssCisJCQkJICAgICAgIHJhX2xpc3RfZmxhZ3MpOworCX0KK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZGVxdWV1ZXMgYSBwYWNrZXQgZnJvbSB0aGUgaGlnaGVzdCBwcmlvcml0eSBsaXN0CisgKiBhbmQgdHJhbnNtaXRzIGl0LgorICovCitzdGF0aWMgaW50Cittd2lmaWV4X2RlcXVldWVfdHhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IG13aWZpZXhfcmFfbGlzdF90YmwgKnB0cjsKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0gTlVMTDsKKwlpbnQgcHRyX2luZGV4ID0gMDsKKwl1OCByYVtFVEhfQUxFTl07CisJaW50IHRpZF9kZWwgPSAwLCB0aWQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlwdHIgPSBtd2lmaWV4X3dtbV9nZXRfaGlnaGVzdF9wcmlvbGlzdF9wdHIoYWRhcHRlciwgJnByaXYsICZwdHJfaW5kZXgpOworCWlmICghcHRyKQorCQlyZXR1cm4gLTE7CisKKwl0aWQgPSBtd2lmaWV4X2dldF90aWQocHRyKTsKKworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiZGF0YTogdGlkPSVkXG4iLCB0aWQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPndtbS5yYV9saXN0X3NwaW5sb2NrLCBmbGFncyk7CisJaWYgKCFtd2lmaWV4X2lzX3JhbGlzdF92YWxpZChwcml2LCBwdHIsIHB0cl9pbmRleCkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+d21tLnJhX2xpc3Rfc3BpbmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChtd2lmaWV4X2lzX3B0cl9wcm9jZXNzZWQocHJpdiwgcHRyKSkgeworCQltd2lmaWV4X3NlbmRfcHJvY2Vzc2VkX3BhY2tldChwcml2LCBwdHIsIHB0cl9pbmRleCwgZmxhZ3MpOworCQkvKiByYV9saXN0X3NwaW5sb2NrIGhhcyBiZWVuIGZyZWVkIGluCisJCSAgIG13aWZpZXhfc2VuZF9wcm9jZXNzZWRfcGFja2V0KCkgKi8KKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFwdHItPmlzXzExbl9lbmFibGVkIHx8IG13aWZpZXhfaXNfYmFfc3RyZWFtX3NldHVwKHByaXYsIHB0ciwgdGlkKQorCSAgICB8fCAoKHByaXYtPnNlY19pbmZvLndwYV9lbmFibGVkCisJCSAgfHwgcHJpdi0+c2VjX2luZm8ud3BhMl9lbmFibGVkKSAmJiAhcHJpdi0+d3BhX2lzX2d0a19zZXQpCisJCSkgeworCQltd2lmaWV4X3NlbmRfc2luZ2xlX3BhY2tldChwcml2LCBwdHIsIHB0cl9pbmRleCwgZmxhZ3MpOworCQkvKiByYV9saXN0X3NwaW5sb2NrIGhhcyBiZWVuIGZyZWVkIGluCisJCSAgIG13aWZpZXhfc2VuZF9zaW5nbGVfcGFja2V0KCkgKi8KKwl9IGVsc2UgeworCQlpZiAobXdpZmlleF9pc19hbXBkdV9hbGxvd2VkKHByaXYsIHRpZCkpIHsKKwkJCWlmIChtd2lmaWV4X3NwYWNlX2F2YWlsX2Zvcl9uZXdfYmFfc3RyZWFtKGFkYXB0ZXIpKSB7CisJCQkJbXdpZmlleF8xMW5fY3JlYXRlX3R4X2JhX3N0cmVhbV90YmwocHJpdiwKKwkJCQkJCXB0ci0+cmEsIHRpZCwKKwkJCQkJCUJBX1NUUkVBTV9TRVRVUF9JTlBST0dSRVNTKTsKKwkJCQltd2lmaWV4X3NlbmRfYWRkYmEocHJpdiwgdGlkLCBwdHItPnJhKTsKKwkJCX0gZWxzZSBpZiAobXdpZmlleF9maW5kX3N0cmVhbV90b19kZWxldGUKKwkJCQkgICAocHJpdiwgdGlkLCAmdGlkX2RlbCwgcmEpKSB7CisJCQkJbXdpZmlleF8xMW5fY3JlYXRlX3R4X2JhX3N0cmVhbV90YmwocHJpdiwKKwkJCQkJCXB0ci0+cmEsIHRpZCwKKwkJCQkJCUJBX1NUUkVBTV9TRVRVUF9JTlBST0dSRVNTKTsKKwkJCQltd2lmaWV4X3NlbmRfZGVsYmEocHJpdiwgdGlkX2RlbCwgcmEsIDEpOworCQkJfQorCQl9CisvKiBNaW5pbXVtIG51bWJlciBvZiBBTVNEVSAqLworI2RlZmluZSBNSU5fTlVNX0FNU0RVIDIKKwkJaWYgKG13aWZpZXhfaXNfYW1zZHVfYWxsb3dlZChwcml2LCB0aWQpICYmCisJCSAgICAobXdpZmlleF9udW1fcGt0c19pbl90eHEocHJpdiwgcHRyLCBhZGFwdGVyLT50eF9idWZfc2l6ZSkgPj0KKwkJICAgICBNSU5fTlVNX0FNU0RVKSkKKwkJCW13aWZpZXhfMTFuX2FnZ3JlZ2F0ZV9wa3QocHJpdiwgcHRyLCBJTlRGX0hFQURFUl9MRU4sCisJCQkJCQkgIHB0cl9pbmRleCwgZmxhZ3MpOworCQkJLyogcmFfbGlzdF9zcGlubG9jayBoYXMgYmVlbiBmcmVlZCBpbgorCQkJICAgbXdpZmlleF8xMW5fYWdncmVnYXRlX3BrdCgpICovCisJCWVsc2UKKwkJCW13aWZpZXhfc2VuZF9zaW5nbGVfcGFja2V0KHByaXYsIHB0ciwgcHRyX2luZGV4LCBmbGFncyk7CisJCQkvKiByYV9saXN0X3NwaW5sb2NrIGhhcyBiZWVuIGZyZWVkIGluCisJCQkgICBtd2lmaWV4X3NlbmRfc2luZ2xlX3BhY2tldCgpICovCisJfQorCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiB0cmFuc21pdHMgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgcGFja2V0IGF3YWl0aW5nIGluIHRoZQorICogV01NIFF1ZXVlcy4KKyAqLwordm9pZAorbXdpZmlleF93bW1fcHJvY2Vzc190eChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCWRvIHsKKwkJLyogQ2hlY2sgaWYgYnVzeSAqLworCQlpZiAoYWRhcHRlci0+ZGF0YV9zZW50IHx8IGFkYXB0ZXItPnR4X2xvY2tfZmxhZykKKwkJCWJyZWFrOworCisJCWlmIChtd2lmaWV4X2RlcXVldWVfdHhfcGFja2V0KGFkYXB0ZXIpKQorCQkJYnJlYWs7CisJfSB3aGlsZSAodHJ1ZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3dtbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC93bW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2VhMWY2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC93bW0uaApAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIE1hcnZlbGwgV2lyZWxlc3MgTEFOIGRldmljZSBkcml2ZXI6IFdNTQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbAorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluCisgKiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gKKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBIG9yIG9uIHRoZQorICogd29ybGR3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0LgorICoKKyAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQKKyAqIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4KKyAqLworCisjaWZuZGVmIF9NV0lGSUVYX1dNTV9IXworI2RlZmluZSBfTVdJRklFWF9XTU1fSF8KKworZW51bSBpZWVlX3R5cGVzX3dtbV9hY2lhaWZzbl9iaXRtYXNrcyB7CisJTVdJRklFWF9BSUZTTiA9IChCSVQoMCkgfCBCSVQoMSkgfCBCSVQoMikgfCBCSVQoMykpLAorCU1XSUZJRVhfQUNNID0gQklUKDQpLAorCU1XSUZJRVhfQUNJID0gKEJJVCg1KSB8IEJJVCg2KSksCit9OworCitlbnVtIGllZWVfdHlwZXNfd21tX2Vjd19iaXRtYXNrcyB7CisJTVdJRklFWF9FQ1dfTUlOID0gKEJJVCgwKSB8IEJJVCgxKSB8IEJJVCgyKSB8IEJJVCgzKSksCisJTVdJRklFWF9FQ1dfTUFYID0gKEJJVCg0KSB8IEJJVCg1KSB8IEJJVCg2KSB8IEJJVCg3KSksCit9OworCisvKgorICogVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIFRJRCBvZiB0aGUgZ2l2ZW4gUkEgbGlzdC4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK213aWZpZXhfZ2V0X3RpZChzdHJ1Y3QgbXdpZmlleF9yYV9saXN0X3RibCAqcHRyKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZwdHItPnNrYl9oZWFkKSkKKwkJcmV0dXJuIDA7CisKKwlza2IgPSBza2JfcGVlaygmcHRyLT5za2JfaGVhZCk7CisKKwlyZXR1cm4gc2tiLT5wcmlvcml0eTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgbGVuZ3RoIG9mIGEgbGlzdC4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK213aWZpZXhfd21tX2xpc3RfbGVuKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zOworCWludCBjb3VudCA9IDA7CisKKwlsaXN0X2Zvcl9lYWNoKHBvcywgaGVhZCkKKwkJKytjb3VudDsKKworCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGEgUkEgbGlzdCBpcyBlbXB0eSBvciBub3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTgKK213aWZpZXhfd21tX2lzX3JhX2xpc3RfZW1wdHkoc3RydWN0IGxpc3RfaGVhZCAqcmFfbGlzdF9oaGVhZCkKK3sKKwlzdHJ1Y3QgbXdpZmlleF9yYV9saXN0X3RibCAqcmFfbGlzdDsKKwlpbnQgaXNfbGlzdF9lbXB0eTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocmFfbGlzdCwgcmFfbGlzdF9oaGVhZCwgbGlzdCkgeworCQlpc19saXN0X2VtcHR5ID0gc2tiX3F1ZXVlX2VtcHR5KCZyYV9saXN0LT5za2JfaGVhZCk7CisJCWlmICghaXNfbGlzdF9lbXB0eSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBtd2lmaWV4X3dtbV9hZGRfYnVmX3R4cXVldWUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIG13aWZpZXhfcmFsaXN0X2FkZChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCAqcmEpOworCitpbnQgbXdpZmlleF93bW1fbGlzdHNfZW1wdHkoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIG13aWZpZXhfd21tX3Byb2Nlc3NfdHgoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcik7CitpbnQgbXdpZmlleF9pc19yYWxpc3RfdmFsaWQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICBzdHJ1Y3QgbXdpZmlleF9yYV9saXN0X3RibCAqcmFfbGlzdCwgaW50IHRpZCk7CisKK3U4IG13aWZpZXhfd21tX2NvbXB1dGVfZHJ2X3BrdF9kZWxheShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBtd2lmaWV4X3dtbV9pbml0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpOworCitleHRlcm4gdTMyIG13aWZpZXhfd21tX3Byb2Nlc3NfYXNzb2NpYXRpb25fcmVxKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJCQkgdTggKiphc3NvY19idWYsCisJCQkJCQkgc3RydWN0IGllZWVfdHlwZXNfd21tX3BhcmFtZXRlcgorCQkJCQkJICp3bW1pZSwKKwkJCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcAorCQkJCQkJICpodGNhcCk7CisKK3ZvaWQgbXdpZmlleF93bW1fc2V0dXBfcXVldWVfcHJpb3JpdGllcyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCQlzdHJ1Y3QgaWVlZV90eXBlc193bW1fcGFyYW1ldGVyCisJCQkJCSp3bW1faWUpOwordm9pZCBtd2lmaWV4X3dtbV9zZXR1cF9hY19kb3duZ3JhZGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdik7CitleHRlcm4gaW50IG13aWZpZXhfcmV0X3dtbV9nZXRfc3RhdHVzKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKnJlc3ApOworCisjZW5kaWYgLyogIV9NV0lGSUVYX1dNTV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213bDhrLmMKaW5kZXggYzFjZWI0Yi4uMzIyNjExOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2w4ay5jCkBAIC02Myw2ICs2Myw3IEBACiAjZGVmaW5lIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX0NMRUFSX1NFTAkweDAwMDAwYzM4CiAjZGVmaW5lIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVU19NQVNLCTB4MDAwMDBjM2MKICNkZWZpbmUgIE1XTDhLX0EySF9JTlRfRFVNTVkJCQkgKDEgPDwgMjApCisjZGVmaW5lICBNV0w4S19BMkhfSU5UX0JBX1dBVENIRE9HCQkgKDEgPDwgMTQpCiAjZGVmaW5lICBNV0w4S19BMkhfSU5UX0NITkxfU1dJVENIRUQJCSAoMSA8PCAxMSkKICNkZWZpbmUgIE1XTDhLX0EySF9JTlRfUVVFVUVfRU1QVFkJCSAoMSA8PCAxMCkKICNkZWZpbmUgIE1XTDhLX0EySF9JTlRfUkFEQVJfREVURUNUCQkgKDEgPDwgNykKQEAgLTczLDYgKzc0LDE0IEBACiAjZGVmaW5lICBNV0w4S19BMkhfSU5UX1JYX1JFQURZCQkJICgxIDw8IDEpCiAjZGVmaW5lICBNV0w4S19BMkhfSU5UX1RYX0RPTkUJCQkgKDEgPDwgMCkKIAorLyogSFcgbWljcm8gc2Vjb25kIHRpbWVyIHJlZ2lzdGVyCisgKiBsb2NhdGVkIGF0IG9mZnNldCAweEE2MDAuIFRoaXMKKyAqIHdpbGwgYmUgdXNlZCB0byB0aW1lc3RhbXAgdHgKKyAqIHBhY2tldHMuCisgKi8KKworI2RlZmluZQlNV0w4S19IV19USU1FUl9SRUdJU1RFUgkJCTB4MDAwMGE2MDAKKwogI2RlZmluZSBNV0w4S19BMkhfRVZFTlRTCShNV0w4S19BMkhfSU5UX0RVTU1ZIHwgXAogCQkJCSBNV0w4S19BMkhfSU5UX0NITkxfU1dJVENIRUQgfCBcCiAJCQkJIE1XTDhLX0EySF9JTlRfUVVFVUVfRU1QVFkgfCBcCkBAIC04MiwxMCArOTEsMTQgQEAKIAkJCQkgTVdMOEtfQTJIX0lOVF9NQUNfRVZFTlQgfCBcCiAJCQkJIE1XTDhLX0EySF9JTlRfT1BDX0RPTkUgfCBcCiAJCQkJIE1XTDhLX0EySF9JTlRfUlhfUkVBRFkgfCBcCi0JCQkJIE1XTDhLX0EySF9JTlRfVFhfRE9ORSkKKwkJCQkgTVdMOEtfQTJIX0lOVF9UWF9ET05FIHwgXAorCQkJCSBNV0w4S19BMkhfSU5UX0JBX1dBVENIRE9HKQogCiAjZGVmaW5lIE1XTDhLX1JYX1FVRVVFUwkJMQotI2RlZmluZSBNV0w4S19UWF9RVUVVRVMJCTQKKyNkZWZpbmUgTVdMOEtfVFhfV01NX1FVRVVFUwk0CisjZGVmaW5lIE1XTDhLX01BWF9BTVBEVV9RVUVVRVMJOAorI2RlZmluZSBNV0w4S19NQVhfVFhfUVVFVUVTCShNV0w4S19UWF9XTU1fUVVFVUVTICsgTVdMOEtfTUFYX0FNUERVX1FVRVVFUykKKyNkZWZpbmUgbXdsOGtfdHhfcXVldWVzKHByaXYpCShNV0w4S19UWF9XTU1fUVVFVUVTICsgKHByaXYpLT5udW1fYW1wZHVfcXVldWVzKQogCiBzdHJ1Y3QgcnhkX29wcyB7CiAJaW50IHJ4ZF9zaXplOwpAQCAtMTM0LDYgKzE0NywyMSBAQAogCXN0cnVjdCBza19idWZmICoqc2tiOwogfTsKIAorZW51bSB7CisJQU1QRFVfTk9fU1RSRUFNLAorCUFNUERVX1NUUkVBTV9ORVcsCisJQU1QRFVfU1RSRUFNX0lOX1BST0dSRVNTLAorCUFNUERVX1NUUkVBTV9BQ1RJVkUsCit9OworCitzdHJ1Y3QgbXdsOGtfYW1wZHVfc3RyZWFtIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhOworCXU4IHRpZDsKKwl1OCBzdGF0ZTsKKwl1OCBpZHg7CisJdTggdHhxX2lkeDsgLyogaW5kZXggb2YgdGhpcyBzdHJlYW0gaW4gcHJpdi0+dHhxICovCit9OworCiBzdHJ1Y3QgbXdsOGtfcHJpdiB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CkBAIC0xNjAsNiArMTg4LDEyIEBACiAJdTMyIGFwX21hY2lkc19zdXBwb3J0ZWQ7CiAJdTMyIHN0YV9tYWNpZHNfc3VwcG9ydGVkOwogCisJLyogQW1wZHUgc3RyZWFtIGluZm9ybWF0aW9uICovCisJdTggbnVtX2FtcGR1X3F1ZXVlczsKKwlzcGlubG9ja190IHN0cmVhbV9sb2NrOworCXN0cnVjdCBtd2w4a19hbXBkdV9zdHJlYW0gYW1wZHVbTVdMOEtfTUFYX0FNUERVX1FVRVVFU107CisJc3RydWN0IHdvcmtfc3RydWN0IHdhdGNoZG9nX2JhX2hhbmRsZTsKKwogCS8qIGZpcm13YXJlIGFjY2VzcyAqLwogCXN0cnVjdCBtdXRleCBmd19tdXRleDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZ3X211dGV4X293bmVyOwpAQCAtMTkxLDcgKzIyNSw4IEBACiAJaW50IHBlbmRpbmdfdHhfcGt0czsKIAogCXN0cnVjdCBtd2w4a19yeF9xdWV1ZSByeHFbTVdMOEtfUlhfUVVFVUVTXTsKLQlzdHJ1Y3QgbXdsOGtfdHhfcXVldWUgdHhxW01XTDhLX1RYX1FVRVVFU107CisJc3RydWN0IG13bDhrX3R4X3F1ZXVlIHR4cVtNV0w4S19NQVhfVFhfUVVFVUVTXTsKKwl1MzIgdHhxX29mZnNldFtNV0w4S19NQVhfVFhfUVVFVUVTXTsKIAogCWJvb2wgcmFkaW9fb247CiAJYm9vbCByYWRpb19zaG9ydF9wcmVhbWJsZTsKQEAgLTIyNCw3ICsyNTksNyBAQAogCSAqIHByZXNlcnZlIHRoZSBxdWV1ZSBjb25maWd1cmF0aW9ucyBzbyB0aGV5IGNhbiBiZSByZXN0b3JlZCBpZi93aGVuCiAJICogdGhlIGZpcm13YXJlIGltYWdlIGlzIHN3YXBwZWQuCiAJICovCi0Jc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgd21tX3BhcmFtc1tNV0w4S19UWF9RVUVVRVNdOworCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zIHdtbV9wYXJhbXNbTVdMOEtfVFhfV01NX1FVRVVFU107CiAKIAkvKiBhc3luYyBmaXJtd2FyZSBsb2FkaW5nIHN0YXRlICovCiAJdW5zaWduZWQgZndfc3RhdGU7CkBAIC0yNjIsOSArMjk3LDE3IEBACiAjZGVmaW5lIE1XTDhLX1ZJRihfdmlmKSAoKHN0cnVjdCBtd2w4a192aWYgKikmKChfdmlmKS0+ZHJ2X3ByaXYpKQogI2RlZmluZSBJRUVFODAyMTFfS0VZX0NPTkYoX3U4KSAoKHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKikoX3U4KSkKIAorc3RydWN0IHR4X3RyYWZmaWNfaW5mbyB7CisJdTMyIHN0YXJ0X3RpbWU7CisJdTMyIHBrdHM7Cit9OworCisjZGVmaW5lIE1XTDhLX01BWF9USUQgOAogc3RydWN0IG13bDhrX3N0YSB7CiAJLyogSW5kZXggaW50byBzdGF0aW9uIGRhdGFiYXNlLiBSZXR1cm5lZCBieSBVUERBVEVfU1RBREIuICAqLwogCXU4IHBlZXJfaWQ7CisJdTggaXNfYW1wZHVfYWxsb3dlZDsKKwlzdHJ1Y3QgdHhfdHJhZmZpY19pbmZvIHR4X3N0YXRzW01XTDhLX01BWF9USURdOwogfTsKICNkZWZpbmUgTVdMOEtfU1RBKF9zdGEpICgoc3RydWN0IG13bDhrX3N0YSAqKSYoKF9zdGEpLT5kcnZfcHJpdikpCiAKQEAgLTM1MiwxMCArMzk1LDEyIEBACiAjZGVmaW5lIE1XTDhLX0NNRF9FTkFCTEVfU05JRkZFUgkweDAxNTAKICNkZWZpbmUgTVdMOEtfQ01EX1NFVF9NQUNfQUREUgkJMHgwMjAyCQkvKiBwZXItdmlmICovCiAjZGVmaW5lIE1XTDhLX0NNRF9TRVRfUkFURUFEQVBUX01PREUJMHgwMjAzCisjZGVmaW5lIE1XTDhLX0NNRF9HRVRfV0FUQ0hET0dfQklUTUFQCTB4MDIwNQogI2RlZmluZSBNV0w4S19DTURfQlNTX1NUQVJUCQkweDExMDAJCS8qIHBlci12aWYgKi8KICNkZWZpbmUgTVdMOEtfQ01EX1NFVF9ORVdfU1ROCQkweDExMTEJCS8qIHBlci12aWYgKi8KICNkZWZpbmUgTVdMOEtfQ01EX1VQREFURV9FTkNSWVBUSU9OCTB4MTEyMgkJLyogcGVyLXZpZiAqLwogI2RlZmluZSBNV0w4S19DTURfVVBEQVRFX1NUQURCCQkweDExMjMKKyNkZWZpbmUgTVdMOEtfQ01EX0JBU1RSRUFNCQkweDExMjUKIAogc3RhdGljIGNvbnN0IGNoYXIgKm13bDhrX2NtZF9uYW1lKF9fbGUxNiBjbWQsIGNoYXIgKmJ1ZiwgaW50IGJ1ZnNpemUpCiB7CkBAIC0zOTUsNiArNDQwLDggQEAKIAkJTVdMOEtfQ01ETkFNRShTRVRfTkVXX1NUTik7CiAJCU1XTDhLX0NNRE5BTUUoVVBEQVRFX0VOQ1JZUFRJT04pOwogCQlNV0w4S19DTUROQU1FKFVQREFURV9TVEFEQik7CisJCU1XTDhLX0NNRE5BTUUoQkFTVFJFQU0pOworCQlNV0w4S19DTUROQU1FKEdFVF9XQVRDSERPR19CSVRNQVApOwogCWRlZmF1bHQ6CiAJCXNucHJpbnRmKGJ1ZiwgYnVmc2l6ZSwgIjB4JXgiLCBjbWQpOwogCX0KQEAgLTY2OSw3ICs3MTYsNyBAQAogCQkJICAgICAgICJoZWxwZXIgaW1hZ2VcbiIsIHBjaV9uYW1lKHByaXYtPnBkZXYpKTsKIAkJCXJldHVybiByYzsKIAkJfQotCQltc2xlZXAoNSk7CisJCW1zbGVlcCgyMCk7CiAKIAkJcmMgPSBtd2w4a19mZWVkX2Z3X2ltYWdlKHByaXYsIGZ3LT5kYXRhLCBmdy0+c2l6ZSk7CiAJfSBlbHNlIHsKQEAgLTczNCw4ICs3ODEsMTEgQEAKIAkJc2tiX3B1bGwoc2tiLCBzaXplb2YoKnRyKSAtIGhkcmxlbik7CiB9CiAKKyNkZWZpbmUgUkVEVUNFRF9UWF9IRUFEUk9PTQk4CisKIHN0YXRpYyB2b2lkCi1td2w4a19hZGRfZG1hX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGFpbF9wYWQpCittd2w4a19hZGRfZG1hX2hlYWRlcihzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJCWludCBoZWFkX3BhZCwgaW50IHRhaWxfcGFkKQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICp3aDsKIAlpbnQgaGRybGVuOwpAQCAtNzUxLDcgKzgwMSwyMyBAQAogCXdoID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwogCiAJaGRybGVuID0gaWVlZTgwMjExX2hkcmxlbih3aC0+ZnJhbWVfY29udHJvbCk7Ci0JcmVxZF9oZHJsZW4gPSBzaXplb2YoKnRyKTsKKworCS8qCisJICogQ2hlY2sgaWYgc2tiX3Jlc2l6ZSBpcyByZXF1aXJlZCBiZWNhdXNlIG9mCisJICogdHhfaGVhZHJvb20gYWRqdXN0bWVudC4KKwkgKi8KKwlpZiAocHJpdi0+YXBfZncgJiYgKGhkcmxlbiA8IChzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jdHMpCisJCQkJCQkrIFJFRFVDRURfVFhfSEVBRFJPT00pKSkgeworCQlpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIFJFRFVDRURfVFhfSEVBRFJPT00sIDAsIEdGUF9BVE9NSUMpKSB7CisKKwkJCXdpcGh5X2Vycihwcml2LT5ody0+d2lwaHksCisJCQkJCSJGYWlsZWQgdG8gcmVhbGxvY2F0ZSBUWCBidWZmZXJcbiIpOworCQkJcmV0dXJuOworCQl9CisJCXNrYi0+dHJ1ZXNpemUgKz0gUkVEVUNFRF9UWF9IRUFEUk9PTTsKKwl9CisKKwlyZXFkX2hkcmxlbiA9IHNpemVvZigqdHIpICsgaGVhZF9wYWQ7CiAKIAlpZiAoaGRybGVuICE9IHJlcWRfaGRybGVuKQogCQlza2JfcHVzaChza2IsIHJlcWRfaGRybGVuIC0gaGRybGVuKTsKQEAgLTc3MywxMiArODM5LDE0IEBACiAJdHItPmZ3bGVuID0gY3B1X3RvX2xlMTYoc2tiLT5sZW4gLSBzaXplb2YoKnRyKSArIHRhaWxfcGFkKTsKIH0KIAotc3RhdGljIHZvaWQgbXdsOGtfZW5jYXBzdWxhdGVfdHhfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lkIG13bDhrX2VuY2Fwc3VsYXRlX3R4X2ZyYW1lKHN0cnVjdCBtd2w4a19wcml2ICpwcml2LAorCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICp3aDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm87CiAJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5X2NvbmY7CiAJaW50IGRhdGFfcGFkOworCWludCBoZWFkX3BhZCA9IDA7CiAKIAl3aCA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIApAQCAtNzkwLDkgKzg1OCw3IEBACiAKIAkvKgogCSAqIE1ha2Ugc3VyZSB0aGUgcGFja2V0IGhlYWRlciBpcyBpbiB0aGUgRE1BIGhlYWRlciBmb3JtYXQgKDQtYWRkcmVzcwotCSAqIHdpdGhvdXQgUW9TKSwgdGhlIG5lY2Vzc2FyeSBjcnlwdG8gcGFkZGluZyBiZXR3ZWVuIHRoZSBoZWFkZXIgYW5kIHRoZQotCSAqIHBheWxvYWQgaGFzIGFscmVhZHkgYmVlbiBwcm92aWRlZCBieSBtYWM4MDIxMSwgYnV0IGl0IGRvZXNuJ3QgYWRkIHRhaWwKLQkgKiBwYWRkaW5nIHdoZW4gSFcgY3J5cHRvIGlzIGVuYWJsZWQuCisJICogd2l0aG91dCBRb1MpLCBhbmQgYWRkIGhlYWQgJiB0YWlsIHBhZGRpbmcgd2hlbiBIVyBjcnlwdG8gaXMgZW5hYmxlZC4KIAkgKgogCSAqIFdlIGhhdmUgdGhlIGZvbGxvd2luZyB0cmFpbGVyIHBhZGRpbmcgcmVxdWlyZW1lbnRzOgogCSAqIC0gV0VQOiA0IHRyYWlsZXIgYnl0ZXMgKElDVikKQEAgLTgwMSw2ICs4NjcsNyBAQAogCSAqLwogCWRhdGFfcGFkID0gMDsKIAlpZiAoa2V5X2NvbmYgIT0gTlVMTCkgeworCQloZWFkX3BhZCA9IGtleV9jb25mLT5pdl9sZW47CiAJCXN3aXRjaCAoa2V5X2NvbmYtPmNpcGhlcikgewogCQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwOgogCQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDoKQEAgLTgxNCw3ICs4ODEsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JbXdsOGtfYWRkX2RtYV9oZWFkZXIoc2tiLCBkYXRhX3BhZCk7CisJbXdsOGtfYWRkX2RtYV9oZWFkZXIocHJpdiwgc2tiLCBoZWFkX3BhZCwgZGF0YV9wYWQpOwogfQogCiAvKgpAQCAtMTEyNyw2ICsxMTk0LDkgQEAKIAlzdHJ1Y3QgbXdsOGtfcnhfcXVldWUgKnJ4cSA9IHByaXYtPnJ4cSArIGluZGV4OwogCWludCBpOwogCisJaWYgKHJ4cS0+cnhkID09IE5VTEwpCisJCXJldHVybjsKKwogCWZvciAoaSA9IDA7IGkgPCBNV0w4S19SWF9ERVNDUzsgaSsrKSB7CiAJCWlmIChyeHEtPmJ1ZltpXS5za2IgIT0gTlVMTCkgewogCQkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LApAQCAtMTMxOSw3ICsxMzg5LDcgQEAKIAlfX2xlMTYgcGt0X2xlbjsKIAlfX3U4IGRlc3RfTUFDX2FkZHJbRVRIX0FMRU5dOwogCV9fbGUzMiBuZXh0X3R4ZF9waHlzX2FkZHI7Ci0JX19sZTMyIHJlc2VydmVkOworCV9fbGUzMiB0aW1lc3RhbXA7CiAJX19sZTE2IHJhdGVfaW5mbzsKIAlfX3U4IHBlZXJfaWQ7CiAJX191OCB0eF9mcmFnX2NudDsKQEAgLTEzODMsNyArMTQ1Myw3IEBACiAJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9RVUVVRVM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBtd2w4a190eF9xdWV1ZXMocHJpdik7IGkrKykgewogCQlzdHJ1Y3QgbXdsOGtfdHhfcXVldWUgKnR4cSA9IHByaXYtPnR4cSArIGk7CiAJCWludCBmd19vd25lZCA9IDA7CiAJCWludCBkcnZfb3duZWQgPSAwOwpAQCAtMTQ1Miw5ICsxNTIyLDggQEAKIAogCQlpZiAodGltZW91dCkgewogCQkJV0FSTl9PTihwcml2LT5wZW5kaW5nX3R4X3BrdHMpOwotCQkJaWYgKHJldHJ5KSB7CisJCQlpZiAocmV0cnkpCiAJCQkJd2lwaHlfbm90aWNlKGh3LT53aXBoeSwgInR4IHJpbmdzIGRyYWluZWRcbiIpOwotCQkJfQogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTQ4NCw2ICsxNTUzLDQxIEBACiAJCSAgICAgTVdMOEtfVFhEX1NUQVRVU19PS19SRVRSWSB8CQlcCiAJCSAgICAgTVdMOEtfVFhEX1NUQVRVU19PS19NT1JFX1JFVFJZKSkKIAorc3RhdGljIGludCBtd2w4a190aWRfcXVldWVfbWFwcGluZyh1OCB0aWQpCit7CisJQlVHX09OKHRpZCA+IDcpOworCisJc3dpdGNoICh0aWQpIHsKKwljYXNlIDA6CisJY2FzZSAzOgorCQlyZXR1cm4gSUVFRTgwMjExX0FDX0JFOworCQlicmVhazsKKwljYXNlIDE6CisJY2FzZSAyOgorCQlyZXR1cm4gSUVFRTgwMjExX0FDX0JLOworCQlicmVhazsKKwljYXNlIDQ6CisJY2FzZSA1OgorCQlyZXR1cm4gSUVFRTgwMjExX0FDX1ZJOworCQlicmVhazsKKwljYXNlIDY6CisJY2FzZSA3OgorCQlyZXR1cm4gSUVFRTgwMjExX0FDX1ZPOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJCWJyZWFrOworCX0KK30KKworLyogVGhlIGZpcm13YXJlIHdpbGwgZmlsbCBpbiB0aGUgcmF0ZSBpbmZvcm1hdGlvbgorICogZm9yIGVhY2ggcGFja2V0IHRoYXQgZ2V0cyBxdWV1ZWQgaW4gdGhlIGhhcmR3YXJlCisgKiBhbmQgdGhlc2UgbWFjcm9zIHdpbGwgaW50ZXJwcmV0IHRoYXQgaW5mby4KKyAqLworCisjZGVmaW5lIFJJX0ZPUk1BVChhKQkJICAoYSAmIDB4MDAwMSkKKyNkZWZpbmUgUklfUkFURV9JRF9NQ1MoYSkJICgoYSAmIDB4MDFmOCkgPj4gMykKKwogc3RhdGljIGludAogbXdsOGtfdHhxX3JlY2xhaW0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBpbmRleCwgaW50IGxpbWl0LCBpbnQgZm9yY2UpCiB7CkBAIC0xNTAwLDYgKzE2MDQsMTAgQEAKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwogCQl1MzIgc3RhdHVzOworCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhOworCQlzdHJ1Y3QgbXdsOGtfc3RhICpzdGFfaW5mbyA9IE5VTEw7CisJCXUxNiByYXRlX2luZm87CisJCXN0cnVjdCBpZWVlODAyMTFfaGRyICp3aDsKIAogCQl0eCA9IHR4cS0+aGVhZDsKIAkJdHhfZGVzYyA9IHR4cS0+dHhkICsgdHg7CkBAIC0xNTI4LDE4ICsxNjM2LDQwIEBACiAKIAkJbXdsOGtfcmVtb3ZlX2RtYV9oZWFkZXIoc2tiLCB0eF9kZXNjLT5xb3NfY29udHJvbCk7CiAKKwkJd2ggPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCiAJCS8qIE1hcmsgZGVzY3JpcHRvciBhcyB1bnVzZWQgKi8KIAkJdHhfZGVzYy0+cGt0X3BoeXNfYWRkciA9IDA7CiAJCXR4X2Rlc2MtPnBrdF9sZW4gPSAwOwogCiAJCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJCWlmIChpZWVlODAyMTFfaXNfZGF0YSh3aC0+ZnJhbWVfY29udHJvbCkpIHsKKwkJCXN0YSA9IGluZm8tPmNvbnRyb2wuc3RhOworCQkJaWYgKHN0YSkgeworCQkJCXN0YV9pbmZvID0gTVdMOEtfU1RBKHN0YSk7CisJCQkJQlVHX09OKHN0YV9pbmZvID09IE5VTEwpOworCQkJCXJhdGVfaW5mbyA9IGxlMTZfdG9fY3B1KHR4X2Rlc2MtPnJhdGVfaW5mbyk7CisJCQkJLyogSWYgcmF0ZSBpcyA8IDYuNSBNcGJzIGZvciBhbiBodCBzdGF0aW9uCisJCQkJICogZG8gbm90IGZvcm0gYW4gYW1wZHUuIElmIHRoZSBzdGF0aW9uIGlzIGEKKwkJCQkgKiBsZWdhY3kgc3RhdGlvbiAoZm9ybWF0ID0gMCksIGRvIG5vdCBmb3JtIGFuCisJCQkJICogYW1wZHUKKwkJCQkgKi8KKwkJCQlpZiAoUklfUkFURV9JRF9NQ1MocmF0ZV9pbmZvKSA8IDEgfHwKKwkJCQkgICAgUklfRk9STUFUKHJhdGVfaW5mbykgPT0gMCkgeworCQkJCQlzdGFfaW5mby0+aXNfYW1wZHVfYWxsb3dlZCA9IGZhbHNlOworCQkJCX0gZWxzZSB7CisJCQkJCXN0YV9pbmZvLT5pc19hbXBkdV9hbGxvd2VkID0gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCX0KKwogCQlpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXMoaW5mbyk7CiAKIAkJLyogUmF0ZSBjb250cm9sIGlzIGhhcHBlbmluZyBpbiB0aGUgZmlybXdhcmUuCiAJCSAqIEVuc3VyZSBubyB0eCByYXRlIGlzIGJlaW5nIHJlcG9ydGVkLgogCQkgKi8KLSAgICAgICAgICAgICAgICBpbmZvLT5zdGF0dXMucmF0ZXNbMF0uaWR4ID0gLTE7Ci0gICAgICAgICAgICAgICAgaW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50ID0gMTsKKwkJaW5mby0+c3RhdHVzLnJhdGVzWzBdLmlkeCA9IC0xOworCQlpbmZvLT5zdGF0dXMucmF0ZXNbMF0uY291bnQgPSAxOwogCiAJCWlmIChNV0w4S19UWERfU1VDQ0VTUyhzdGF0dXMpKQogCQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOwpAQCAtMTU0OSw5ICsxNjc5LDYgQEAKIAkJcHJvY2Vzc2VkKys7CiAJfQogCi0JaWYgKHByb2Nlc3NlZCAmJiBwcml2LT5yYWRpb19vbiAmJiAhbXV0ZXhfaXNfbG9ja2VkKCZwcml2LT5md19tdXRleCkpCi0JCWllZWU4MDIxMV93YWtlX3F1ZXVlKGh3LCBpbmRleCk7Ci0KIAlyZXR1cm4gcHJvY2Vzc2VkOwogfQogCkBAIC0xNTYxLDYgKzE2ODgsOSBAQAogCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CiAJc3RydWN0IG13bDhrX3R4X3F1ZXVlICp0eHEgPSBwcml2LT50eHEgKyBpbmRleDsKIAorCWlmICh0eHEtPnR4ZCA9PSBOVUxMKQorCQlyZXR1cm47CisKIAltd2w4a190eHFfcmVjbGFpbShodywgaW5kZXgsIElOVF9NQVgsIDEpOwogCiAJa2ZyZWUodHhxLT5za2IpOwpAQCAtMTU3MiwxMiArMTcwMiwxMTYgQEAKIAl0eHEtPnR4ZCA9IE5VTEw7CiB9CiAKKy8qIGNhbGxlciBtdXN0IGhvbGQgcHJpdi0+c3RyZWFtX2xvY2sgd2hlbiBjYWxsaW5nIHRoZSBzdHJlYW0gZnVuY3Rpb25zICovCitzdGF0aWMgc3RydWN0IG13bDhrX2FtcGR1X3N0cmVhbSAqCittd2w4a19hZGRfc3RyZWFtKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1OCB0aWQpCit7CisJc3RydWN0IG13bDhrX2FtcGR1X3N0cmVhbSAqc3RyZWFtOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+bnVtX2FtcGR1X3F1ZXVlczsgaSsrKSB7CisJCXN0cmVhbSA9ICZwcml2LT5hbXBkdVtpXTsKKwkJaWYgKHN0cmVhbS0+c3RhdGUgPT0gQU1QRFVfTk9fU1RSRUFNKSB7CisJCQlzdHJlYW0tPnN0YSA9IHN0YTsKKwkJCXN0cmVhbS0+c3RhdGUgPSBBTVBEVV9TVFJFQU1fTkVXOworCQkJc3RyZWFtLT50aWQgPSB0aWQ7CisJCQlzdHJlYW0tPmlkeCA9IGk7CisJCQlzdHJlYW0tPnR4cV9pZHggPSBNV0w4S19UWF9XTU1fUVVFVUVTICsgaTsKKwkJCXdpcGh5X2RlYnVnKGh3LT53aXBoeSwgIkFkZGVkIGEgbmV3IHN0cmVhbSBmb3IgJXBNICVkIiwKKwkJCQkgICAgc3RhLT5hZGRyLCB0aWQpOworCQkJcmV0dXJuIHN0cmVhbTsKKwkJfQorCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludAorbXdsOGtfc3RhcnRfc3RyZWFtKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgbXdsOGtfYW1wZHVfc3RyZWFtICpzdHJlYW0pCit7CisJaW50IHJldDsKKworCS8qIGlmIHRoZSBzdHJlYW0gaGFzIGFscmVhZHkgYmVlbiBzdGFydGVkLCBkb24ndCBzdGFydCBpdCBhZ2FpbiAqLworCWlmIChzdHJlYW0tPnN0YXRlICE9IEFNUERVX1NUUkVBTV9ORVcpCisJCXJldHVybiAwOworCXJldCA9IGllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKHN0cmVhbS0+c3RhLCBzdHJlYW0tPnRpZCwgMCk7CisJaWYgKHJldCkKKwkJd2lwaHlfZGVidWcoaHctPndpcGh5LCAiRmFpbGVkIHRvIHN0YXJ0IHN0cmVhbSBmb3IgJXBNICVkOiAiCisJCQkgICAgIiVkXG4iLCBzdHJlYW0tPnN0YS0+YWRkciwgc3RyZWFtLT50aWQsIHJldCk7CisJZWxzZQorCQl3aXBoeV9kZWJ1Zyhody0+d2lwaHksICJTdGFydGVkIHN0cmVhbSBmb3IgJXBNICVkXG4iLAorCQkJICAgIHN0cmVhbS0+c3RhLT5hZGRyLCBzdHJlYW0tPnRpZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQKK213bDhrX3JlbW92ZV9zdHJlYW0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBtd2w4a19hbXBkdV9zdHJlYW0gKnN0cmVhbSkKK3sKKwl3aXBoeV9kZWJ1Zyhody0+d2lwaHksICJSZW1vdmUgc3RyZWFtIGZvciAlcE0gJWRcbiIsIHN0cmVhbS0+c3RhLT5hZGRyLAorCQkgICAgc3RyZWFtLT50aWQpOworCW1lbXNldChzdHJlYW0sIDAsIHNpemVvZigqc3RyZWFtKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbXdsOGtfYW1wZHVfc3RyZWFtICoKK213bDhrX2xvb2t1cF9zdHJlYW0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICphZGRyLCB1OCB0aWQpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDAgOyBpIDwgcHJpdi0+bnVtX2FtcGR1X3F1ZXVlczsgaSsrKSB7CisJCXN0cnVjdCBtd2w4a19hbXBkdV9zdHJlYW0gKnN0cmVhbTsKKwkJc3RyZWFtID0gJnByaXYtPmFtcGR1W2ldOworCQlpZiAoc3RyZWFtLT5zdGF0ZSA9PSBBTVBEVV9OT19TVFJFQU0pCisJCQljb250aW51ZTsKKwkJaWYgKCFtZW1jbXAoc3RyZWFtLT5zdGEtPmFkZHIsIGFkZHIsIEVUSF9BTEVOKSAmJgorCQkgICAgc3RyZWFtLT50aWQgPT0gdGlkKQorCQkJcmV0dXJuIHN0cmVhbTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKyNkZWZpbmUgTVdMOEtfQU1QRFVfUEFDS0VUX1RIUkVTSE9MRCA2NAorc3RhdGljIGlubGluZSBib29sIG13bDhrX2FtcGR1X2FsbG93ZWQoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTggdGlkKQoreworCXN0cnVjdCBtd2w4a19zdGEgKnN0YV9pbmZvID0gTVdMOEtfU1RBKHN0YSk7CisJc3RydWN0IHR4X3RyYWZmaWNfaW5mbyAqdHhfc3RhdHM7CisKKwlCVUdfT04odGlkID49IE1XTDhLX01BWF9USUQpOworCXR4X3N0YXRzID0gJnN0YV9pbmZvLT50eF9zdGF0c1t0aWRdOworCisJcmV0dXJuIHN0YV9pbmZvLT5pc19hbXBkdV9hbGxvd2VkICYmCisJCXR4X3N0YXRzLT5wa3RzID4gTVdMOEtfQU1QRFVfUEFDS0VUX1RIUkVTSE9MRDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG13bDhrX3R4X2NvdW50X3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1OCB0aWQpCit7CisJc3RydWN0IG13bDhrX3N0YSAqc3RhX2luZm8gPSBNV0w4S19TVEEoc3RhKTsKKwlzdHJ1Y3QgdHhfdHJhZmZpY19pbmZvICp0eF9zdGF0czsKKworCUJVR19PTih0aWQgPj0gTVdMOEtfTUFYX1RJRCk7CisJdHhfc3RhdHMgPSAmc3RhX2luZm8tPnR4X3N0YXRzW3RpZF07CisKKwlpZiAodHhfc3RhdHMtPnN0YXJ0X3RpbWUgPT0gMCkKKwkJdHhfc3RhdHMtPnN0YXJ0X3RpbWUgPSBqaWZmaWVzOworCisJLyogcmVzZXQgdGhlIHBhY2tldCBjb3VudCBhZnRlciBlYWNoIHNlY29uZCBlbGFwc2VzLiAgSWYgdGhlIG51bWJlciBvZgorCSAqIHBhY2tldHMgZXZlciBleGNlZWRzIHRoZSBhbXBkdV9taW5fdHJhZmZpYyB0aHJlc2hvbGQsIHdlIHdpbGwgYWxsb3cKKwkgKiBhbiBhbXBkdSBzdHJlYW0gdG8gYmUgc3RhcnRlZC4KKwkgKi8KKwlpZiAoamlmZmllcyAtIHR4X3N0YXRzLT5zdGFydF90aW1lID4gSFopIHsKKwkJdHhfc3RhdHMtPnBrdHMgPSAwOworCQl0eF9zdGF0cy0+c3RhcnRfdGltZSA9IDA7CisJfSBlbHNlCisJCXR4X3N0YXRzLT5wa3RzKys7Cit9CisKIHN0YXRpYyB2b2lkCiBtd2w4a190eHFfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGluZGV4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvOwogCXN0cnVjdCBtd2w4a192aWYgKm13bDhrX3ZpZjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICp3aDsKIAlzdHJ1Y3QgbXdsOGtfdHhfcXVldWUgKnR4cTsKIAlzdHJ1Y3QgbXdsOGtfdHhfZGVzYyAqdHg7CkBAIC0xNTg1LDYgKzE4MTksMTIgQEAKIAl1MzIgdHhzdGF0dXM7CiAJdTggdHhkYXRhcmF0ZTsKIAl1MTYgcW9zOworCWludCB0eHByaW9yaXR5OworCXU4IHRpZCA9IDA7CisJc3RydWN0IG13bDhrX2FtcGR1X3N0cmVhbSAqc3RyZWFtID0gTlVMTDsKKwlib29sIHN0YXJ0X2JhX3Nlc3Npb24gPSBmYWxzZTsKKwlib29sIG1nbXRmcmFtZSA9IGZhbHNlOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilza2ItPmRhdGE7CiAKIAl3aCA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKHdoLT5mcmFtZV9jb250cm9sKSkKQEAgLTE1OTIsMTQgKzE4MzIsMTggQEAKIAllbHNlCiAJCXFvcyA9IDA7CiAKKwlpZiAoaWVlZTgwMjExX2lzX21nbXQod2gtPmZyYW1lX2NvbnRyb2wpKQorCQltZ210ZnJhbWUgPSB0cnVlOworCiAJaWYgKHByaXYtPmFwX2Z3KQotCQltd2w4a19lbmNhcHN1bGF0ZV90eF9mcmFtZShza2IpOworCQltd2w4a19lbmNhcHN1bGF0ZV90eF9mcmFtZShwcml2LCBza2IpOwogCWVsc2UKLQkJbXdsOGtfYWRkX2RtYV9oZWFkZXIoc2tiLCAwKTsKKwkJbXdsOGtfYWRkX2RtYV9oZWFkZXIocHJpdiwgc2tiLCAwLCAwKTsKIAogCXdoID0gJigoc3RydWN0IG13bDhrX2RtYV9kYXRhICopc2tiLT5kYXRhKS0+d2g7CiAKIAl0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0YSA9IHR4X2luZm8tPmNvbnRyb2wuc3RhOwogCW13bDhrX3ZpZiA9IE1XTDhLX1ZJRih0eF9pbmZvLT5jb250cm9sLnZpZik7CiAKIAlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FTU0lHTl9TRVEpIHsKQEAgLTE2MjcsMTIgKzE4NzEsOTEgQEAKIAkJCXFvcyB8PSBNV0w4S19RT1NfQUNLX1BPTElDWV9OT1JNQUw7CiAJfQogCisJLyogUXVldWUgQUREQkEgcmVxdWVzdCBpbiB0aGUgcmVzcGVjdGl2ZSBkYXRhIHF1ZXVlLiAgV2hpbGUgc2V0dGluZyB1cAorCSAqIHRoZSBhbXBkdSBzdHJlYW0sIG1hYzgwMjExIHF1ZXVlcyBmdXJ0aGVyIHBhY2tldHMgZm9yIHRoYXQKKwkgKiBwYXJ0aWN1bGFyIHJhL3RpZCBwYWlyLiAgSG93ZXZlciwgcGFja2V0cyBwaWxlZCB1cCBpbiB0aGUgaGFyZHdhcmUKKwkgKiBmb3IgdGhhdCByYS90aWQgcGFpciB3aWxsIHN0aWxsIGdvIG91dC4gQUREQkEgcmVxdWVzdCBhbmQgdGhlCisJICogcmVsYXRlZCBkYXRhIHBhY2tldHMgZ29pbmcgb3V0IGZyb20gZGlmZmVyZW50IHF1ZXVlcyBhc3luY2hyb25vdXNseQorCSAqIHdpbGwgY2F1c2UgYSBzaGlmdCBpbiB0aGUgcmVjZWl2ZXIgd2luZG93IHdoaWNoIG1pZ2h0IHJlc3VsdCBpbgorCSAqIGFtcGR1IHBhY2tldHMgZ2V0dGluZyBkcm9wcGVkIGF0IHRoZSByZWNlaXZlciBhZnRlciB0aGUgc3RyZWFtIGhhcworCSAqIGJlZW4gc2V0dXAuCisJICovCisJaWYgKHVubGlrZWx5KGllZWU4MDIxMV9pc19hY3Rpb24od2gtPmZyYW1lX2NvbnRyb2wpICYmCisJICAgIG1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5ID09IFdMQU5fQ0FURUdPUllfQkFDSyAmJgorCSAgICBtZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5hY3Rpb25fY29kZSA9PSBXTEFOX0FDVElPTl9BRERCQV9SRVEgJiYKKwkgICAgcHJpdi0+YXBfZncpKSB7CisJCXUxNiBjYXBhYiA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLmNhcGFiKTsKKwkJdGlkID0gKGNhcGFiICYgSUVFRTgwMjExX0FEREJBX1BBUkFNX1RJRF9NQVNLKSA+PiAyOworCQlpbmRleCA9IG13bDhrX3RpZF9xdWV1ZV9tYXBwaW5nKHRpZCk7CisJfQorCisJdHhwcmlvcml0eSA9IGluZGV4OworCisJaWYgKGllZWU4MDIxMV9pc19kYXRhX3Fvcyh3aC0+ZnJhbWVfY29udHJvbCkgJiYKKwkgICAgc2tiLT5wcm90b2NvbCAhPSBjcHVfdG9fYmUxNihFVEhfUF9QQUUpICYmCisJICAgIHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCAmJiBwcml2LT5hcF9mdykgeworCQl0aWQgPSBxb3MgJiAweGY7CisJCW13bDhrX3R4X2NvdW50X3BhY2tldChzdGEsIHRpZCk7CisJCXNwaW5fbG9jaygmcHJpdi0+c3RyZWFtX2xvY2spOworCQlzdHJlYW0gPSBtd2w4a19sb29rdXBfc3RyZWFtKGh3LCBzdGEtPmFkZHIsIHRpZCk7CisJCWlmIChzdHJlYW0gIT0gTlVMTCkgeworCQkJaWYgKHN0cmVhbS0+c3RhdGUgPT0gQU1QRFVfU1RSRUFNX0FDVElWRSkgeworCQkJCXR4cHJpb3JpdHkgPSBzdHJlYW0tPnR4cV9pZHg7CisJCQkJaW5kZXggPSBzdHJlYW0tPnR4cV9pZHg7CisJCQl9IGVsc2UgaWYgKHN0cmVhbS0+c3RhdGUgPT0gQU1QRFVfU1RSRUFNX05FVykgeworCQkJCS8qIFdlIGdldCBoZXJlIGlmIHRoZSBkcml2ZXIgc2VuZHMgdXMgcGFja2V0cworCQkJCSAqIGFmdGVyIHdlJ3ZlIGluaXRpYXRlZCBhIHN0cmVhbSwgYnV0IGJlZm9yZQorCQkJCSAqIG91ciBhbXBkdV9hY3Rpb24gcm91dGluZSBoYXMgYmVlbiBjYWxsZWQKKwkJCQkgKiB3aXRoIElFRUU4MDIxMV9BTVBEVV9UWF9TVEFSVCB0byBnZXQgdGhlIFNTTgorCQkJCSAqIGZvciB0aGUgQUREQkEgcmVxdWVzdC4gIFNvIHRoaXMgcGFja2V0IGNhbgorCQkJCSAqIGdvIG91dCB3aXRoIG5vIHJpc2sgb2Ygc2VxdWVuY2UgbnVtYmVyCisJCQkJICogbWlzbWF0Y2guICBObyBzcGVjaWFsIGhhbmRsaW5nIGlzIHJlcXVpcmVkLgorCQkJCSAqLworCQkJfSBlbHNlIHsKKwkJCQkvKiBEcm9wIHBhY2tldHMgdGhhdCB3b3VsZCBnbyBvdXQgYWZ0ZXIgdGhlCisJCQkJICogQUREQkEgcmVxdWVzdCB3YXMgc2VudCBidXQgYmVmb3JlIHRoZSBBRERCQQorCQkJCSAqIHJlc3BvbnNlIGlzIHJlY2VpdmVkLiAgSWYgd2UgZG9uJ3QgZG8gdGhpcywKKwkJCQkgKiB0aGUgcmVjaXBpZW50IHdvdWxkIHByb2JhYmx5IHJlY2VpdmUgaXQKKwkJCQkgKiBhZnRlciB0aGUgQUREQkEgcmVxdWVzdCB3aXRoIFNTTiAwLiAgVGhpcworCQkJCSAqIHdpbGwgY2F1c2UgdGhlIHJlY2lwaWVudCdzIEJBIHJlY2VpdmUgd2luZG93CisJCQkJICogdG8gc2hpZnQsIHdoaWNoIHdvdWxkIGNhdXNlIHRoZSBzdWJzZXF1ZW50CisJCQkJICogcGFja2V0cyBpbiB0aGUgQkEgc3RyZWFtIHRvIGJlIGRpc2NhcmRlZC4KKwkJCQkgKiBtYWM4MDIxMSBxdWV1ZXMgb3VyIHBhY2tldHMgZm9yIHVzIGluIHRoaXMKKwkJCQkgKiBjYXNlLCBzbyB0aGlzIGlzIHJlYWxseSBqdXN0IGEgc2FmZXR5IGNoZWNrLgorCQkJCSAqLworCQkJCXdpcGh5X3dhcm4oaHctPndpcGh5LAorCQkJCQkgICAiQ2Fubm90IHNlbmQgcGFja2V0IHdoaWxlIEFEREJBICIKKwkJCQkJICAgImRpYWxvZyBpcyB1bmRlcndheS5cbiIpOworCQkJCXNwaW5fdW5sb2NrKCZwcml2LT5zdHJlYW1fbG9jayk7CisJCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIERlZmVyIGNhbGxpbmcgbXdsOGtfc3RhcnRfc3RyZWFtIHNvIHRoYXQgdGhlIGN1cnJlbnQKKwkJCSAqIHNrYiBjYW4gZ28gb3V0IGJlZm9yZSB0aGUgQUREQkEgcmVxdWVzdC4gIFRoaXMKKwkJCSAqIHByZXZlbnRzIHNlcXVlbmNlIG51bWJlciBtaXNtYXRjaCBhdCB0aGUgcmVjZXBpZW50CisJCQkgKiBhcyBkZXNjcmliZWQgYWJvdmUuCisJCQkgKi8KKwkJCWlmIChtd2w4a19hbXBkdV9hbGxvd2VkKHN0YSwgdGlkKSkgeworCQkJCXN0cmVhbSA9IG13bDhrX2FkZF9zdHJlYW0oaHcsIHN0YSwgdGlkKTsKKwkJCQlpZiAoc3RyZWFtICE9IE5VTEwpCisJCQkJCXN0YXJ0X2JhX3Nlc3Npb24gPSB0cnVlOworCQkJfQorCQl9CisJCXNwaW5fdW5sb2NrKCZwcml2LT5zdHJlYW1fbG9jayk7CisJfQorCiAJZG1hID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGRldiwgc2tiLT5kYXRhLAogCQkJCXNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAogCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocHJpdi0+cGRldiwgZG1hKSkgewogCQl3aXBoeV9kZWJ1Zyhody0+d2lwaHksCiAJCQkgICAgImZhaWxlZCB0byBkbWEgbWFwIHNrYiwgZHJvcHBpbmcgVFggZnJhbWUuXG4iKTsKKwkJaWYgKHN0YXJ0X2JhX3Nlc3Npb24pIHsKKwkJCXNwaW5fbG9jaygmcHJpdi0+c3RyZWFtX2xvY2spOworCQkJbXdsOGtfcmVtb3ZlX3N0cmVhbShodywgc3RyZWFtKTsKKwkJCXNwaW5fdW5sb2NrKCZwcml2LT5zdHJlYW1fbG9jayk7CisJCX0KIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlyZXR1cm47CiAJfQpAQCAtMTY0MSwxMiArMTk2NCwzNCBAQAogCiAJdHhxID0gcHJpdi0+dHhxICsgaW5kZXg7CiAKKwkvKiBNZ210IGZyYW1lcyB0aGF0IGdvIG91dCBmcmVxdWVudGx5IGFyZSBwcm9iZQorCSAqIHJlc3BvbnNlcy4gT3RoZXIgbWdtdCBmcmFtZXMgZ290IG91dCByZWxhdGl2ZWx5CisJICogaW5mcmVxdWVudGx5LiBIZW5jZSByZXNlcnZlIDIgYnVmZmVycyBzbyB0aGF0CisJICogb3RoZXIgbWdtdCBmcmFtZXMgZG8gbm90IGdldCBkcm9wcGVkIGR1ZSB0byBhbgorCSAqIGFscmVhZHkgcXVldWVkIHByb2JlIHJlc3BvbnNlIGluIG9uZSBvZiB0aGUKKwkgKiByZXNlcnZlZCBidWZmZXJzLgorCSAqLworCisJaWYgKHR4cS0+bGVuID49IE1XTDhLX1RYX0RFU0NTIC0gMikgeworCQlpZiAobWdtdGZyYW1lID09IGZhbHNlIHx8CisJCQl0eHEtPmxlbiA9PSBNV0w4S19UWF9ERVNDUykgeworCQkJaWYgKHN0YXJ0X2JhX3Nlc3Npb24pIHsKKwkJCQlzcGluX2xvY2soJnByaXYtPnN0cmVhbV9sb2NrKTsKKwkJCQltd2w4a19yZW1vdmVfc3RyZWFtKGh3LCBzdHJlYW0pOworCQkJCXNwaW5fdW5sb2NrKCZwcml2LT5zdHJlYW1fbG9jayk7CisJCQl9CisJCQlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQlyZXR1cm47CisJCX0KKwl9CisKIAlCVUdfT04odHhxLT5za2JbdHhxLT50YWlsXSAhPSBOVUxMKTsKIAl0eHEtPnNrYlt0eHEtPnRhaWxdID0gc2tiOwogCiAJdHggPSB0eHEtPnR4ZCArIHR4cS0+dGFpbDsKIAl0eC0+ZGF0YV9yYXRlID0gdHhkYXRhcmF0ZTsKLQl0eC0+dHhfcHJpb3JpdHkgPSBpbmRleDsKKwl0eC0+dHhfcHJpb3JpdHkgPSB0eHByaW9yaXR5OwogCXR4LT5xb3NfY29udHJvbCA9IGNwdV90b19sZTE2KHFvcyk7CiAJdHgtPnBrdF9waHlzX2FkZHIgPSBjcHVfdG9fbGUzMihkbWEpOwogCXR4LT5wa3RfbGVuID0gY3B1X3RvX2xlMTYoc2tiLT5sZW4pOwpAQCAtMTY1NSw2ICsyMDAwLDExIEBACiAJCXR4LT5wZWVyX2lkID0gTVdMOEtfU1RBKHR4X2luZm8tPmNvbnRyb2wuc3RhKS0+cGVlcl9pZDsKIAllbHNlCiAJCXR4LT5wZWVyX2lkID0gMDsKKworCWlmIChwcml2LT5hcF9mdykKKwkJdHgtPnRpbWVzdGFtcCA9IGNwdV90b19sZTMyKGlvcmVhZDMyKHByaXYtPnJlZ3MgKworCQkJCQkJTVdMOEtfSFdfVElNRVJfUkVHSVNURVIpKTsKKwogCXdtYigpOwogCXR4LT5zdGF0dXMgPSBjcHVfdG9fbGUzMihNV0w4S19UWERfU1RBVFVTX0ZXX09XTkVEIHwgdHhzdGF0dXMpOwogCkBAIC0xNjY1LDEyICsyMDE1LDE3IEBACiAJaWYgKHR4cS0+dGFpbCA9PSBNV0w4S19UWF9ERVNDUykKIAkJdHhxLT50YWlsID0gMDsKIAotCWlmICh0eHEtPmhlYWQgPT0gdHhxLT50YWlsKQotCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShodywgaW5kZXgpOwotCiAJbXdsOGtfdHhfc3RhcnQocHJpdik7CiAKIAlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisKKwkvKiBJbml0aWF0ZSB0aGUgYW1wZHUgc2Vzc2lvbiBoZXJlICovCisJaWYgKHN0YXJ0X2JhX3Nlc3Npb24pIHsKKwkJc3Bpbl9sb2NrKCZwcml2LT5zdHJlYW1fbG9jayk7CisJCWlmIChtd2w4a19zdGFydF9zdHJlYW0oaHcsIHN0cmVhbSkpCisJCQltd2w4a19yZW1vdmVfc3RyZWFtKGh3LCBzdHJlYW0pOworCQlzcGluX3VubG9jaygmcHJpdi0+c3RyZWFtX2xvY2spOworCX0KIH0KIAogCkBAIC0xODY4LDcgKzIyMjMsNyBAQAogCV9fdTggbWNzX2JpdG1hcFsxNl07CiAJX19sZTMyIHJ4X3F1ZXVlX3B0cjsKIAlfX2xlMzIgbnVtX3R4X3F1ZXVlczsKLQlfX2xlMzIgdHhfcXVldWVfcHRyc1tNV0w4S19UWF9RVUVVRVNdOworCV9fbGUzMiB0eF9xdWV1ZV9wdHJzW01XTDhLX1RYX1dNTV9RVUVVRVNdOwogCV9fbGUzMiBjYXBzMjsKIAlfX2xlMzIgbnVtX3R4X2Rlc2NfcGVyX3F1ZXVlOwogCV9fbGUzMiB0b3RhbF9yeGQ7CkBAIC0xOTc0LDggKzIzMjksOCBAQAogCW1lbXNldChjbWQtPnBlcm1fYWRkciwgMHhmZiwgc2l6ZW9mKGNtZC0+cGVybV9hZGRyKSk7CiAJY21kLT5wc19jb29raWUgPSBjcHVfdG9fbGUzMihwcml2LT5jb29raWVfZG1hKTsKIAljbWQtPnJ4X3F1ZXVlX3B0ciA9IGNwdV90b19sZTMyKHByaXYtPnJ4cVswXS5yeGRfZG1hKTsKLQljbWQtPm51bV90eF9xdWV1ZXMgPSBjcHVfdG9fbGUzMihNV0w4S19UWF9RVUVVRVMpOwotCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9RVUVVRVM7IGkrKykKKwljbWQtPm51bV90eF9xdWV1ZXMgPSBjcHVfdG9fbGUzMihtd2w4a190eF9xdWV1ZXMocHJpdikpOworCWZvciAoaSA9IDA7IGkgPCBtd2w4a190eF9xdWV1ZXMocHJpdik7IGkrKykKIAkJY21kLT50eF9xdWV1ZV9wdHJzW2ldID0gY3B1X3RvX2xlMzIocHJpdi0+dHhxW2ldLnR4ZF9kbWEpOwogCWNtZC0+bnVtX3R4X2Rlc2NfcGVyX3F1ZXVlID0gY3B1X3RvX2xlMzIoTVdMOEtfVFhfREVTQ1MpOwogCWNtZC0+dG90YWxfcnhkID0gY3B1X3RvX2xlMzIoTVdMOEtfUlhfREVTQ1MpOwpAQCAtMjAxNywxMyArMjM3MiwxNiBAQAogCV9fbGUzMiB3Y2JiYXNlMjsKIAlfX2xlMzIgd2NiYmFzZTM7CiAJX19sZTMyIGZ3X2FwaV92ZXJzaW9uOworCV9fbGUzMiBjYXBzOworCV9fbGUzMiBudW1fb2ZfYW1wZHVfcXVldWVzOworCV9fbGUzMiB3Y2JiYXNlX2FtcGR1W01XTDhLX01BWF9BTVBEVV9RVUVVRVNdOwogfSBfX3BhY2tlZDsKIAogc3RhdGljIGludCBtd2w4a19jbWRfZ2V0X2h3X3NwZWNfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlzdHJ1Y3QgbXdsOGtfY21kX2dldF9od19zcGVjX2FwICpjbWQ7Ci0JaW50IHJjOworCWludCByYywgaTsKIAl1MzIgYXBpX3ZlcnNpb247CiAKIAljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CkBAIC0yMDU1LDI3ICsyNDEzLDMxIEBACiAJCXByaXYtPm51bV9tY2FkZHJzID0gbGUxNl90b19jcHUoY21kLT5udW1fbWNhZGRycyk7CiAJCXByaXYtPmZ3X3JldiA9IGxlMzJfdG9fY3B1KGNtZC0+ZndfcmV2KTsKIAkJcHJpdi0+aHdfcmV2ID0gY21kLT5od19yZXY7Ci0JCW13bDhrX3NldHVwXzJnaHpfYmFuZChodyk7CisJCW13bDhrX3NldF9jYXBzKGh3LCBsZTMyX3RvX2NwdShjbWQtPmNhcHMpKTsKIAkJcHJpdi0+YXBfbWFjaWRzX3N1cHBvcnRlZCA9IDB4MDAwMDAwZmY7CiAJCXByaXYtPnN0YV9tYWNpZHNfc3VwcG9ydGVkID0gMHgwMDAwMDAwMDsKLQotCQlvZmYgPSBsZTMyX3RvX2NwdShjbWQtPndjYmJhc2UwKSAmIDB4ZmZmZjsKLQkJaW93cml0ZTMyKHByaXYtPnR4cVswXS50eGRfZG1hLCBwcml2LT5zcmFtICsgb2ZmKTsKLQorCQlwcml2LT5udW1fYW1wZHVfcXVldWVzID0gbGUzMl90b19jcHUoY21kLT5udW1fb2ZfYW1wZHVfcXVldWVzKTsKKwkJaWYgKHByaXYtPm51bV9hbXBkdV9xdWV1ZXMgPiBNV0w4S19NQVhfQU1QRFVfUVVFVUVTKSB7CisJCQl3aXBoeV93YXJuKGh3LT53aXBoeSwgImZ3IHJlcG9ydGVkICVkIGFtcGR1IHF1ZXVlcyIKKwkJCQkgICAiIGJ1dCB3ZSBvbmx5IHN1cHBvcnQgJWQuXG4iLAorCQkJCSAgIHByaXYtPm51bV9hbXBkdV9xdWV1ZXMsCisJCQkJICAgTVdMOEtfTUFYX0FNUERVX1FVRVVFUyk7CisJCQlwcml2LT5udW1fYW1wZHVfcXVldWVzID0gTVdMOEtfTUFYX0FNUERVX1FVRVVFUzsKKwkJfQogCQlvZmYgPSBsZTMyX3RvX2NwdShjbWQtPnJ4d3JwdHIpICYgMHhmZmZmOwogCQlpb3dyaXRlMzIocHJpdi0+cnhxWzBdLnJ4ZF9kbWEsIHByaXYtPnNyYW0gKyBvZmYpOwogCiAJCW9mZiA9IGxlMzJfdG9fY3B1KGNtZC0+cnhyZHB0cikgJiAweGZmZmY7CiAJCWlvd3JpdGUzMihwcml2LT5yeHFbMF0ucnhkX2RtYSwgcHJpdi0+c3JhbSArIG9mZik7CiAKLQkJb2ZmID0gbGUzMl90b19jcHUoY21kLT53Y2JiYXNlMSkgJiAweGZmZmY7Ci0JCWlvd3JpdGUzMihwcml2LT50eHFbMV0udHhkX2RtYSwgcHJpdi0+c3JhbSArIG9mZik7CisJCXByaXYtPnR4cV9vZmZzZXRbMF0gPSBsZTMyX3RvX2NwdShjbWQtPndjYmJhc2UwKSAmIDB4ZmZmZjsKKwkJcHJpdi0+dHhxX29mZnNldFsxXSA9IGxlMzJfdG9fY3B1KGNtZC0+d2NiYmFzZTEpICYgMHhmZmZmOworCQlwcml2LT50eHFfb2Zmc2V0WzJdID0gbGUzMl90b19jcHUoY21kLT53Y2JiYXNlMikgJiAweGZmZmY7CisJCXByaXYtPnR4cV9vZmZzZXRbM10gPSBsZTMyX3RvX2NwdShjbWQtPndjYmJhc2UzKSAmIDB4ZmZmZjsKIAotCQlvZmYgPSBsZTMyX3RvX2NwdShjbWQtPndjYmJhc2UyKSAmIDB4ZmZmZjsKLQkJaW93cml0ZTMyKHByaXYtPnR4cVsyXS50eGRfZG1hLCBwcml2LT5zcmFtICsgb2ZmKTsKLQotCQlvZmYgPSBsZTMyX3RvX2NwdShjbWQtPndjYmJhc2UzKSAmIDB4ZmZmZjsKLQkJaW93cml0ZTMyKHByaXYtPnR4cVszXS50eGRfZG1hLCBwcml2LT5zcmFtICsgb2ZmKTsKKwkJZm9yIChpID0gMDsgaSA8IHByaXYtPm51bV9hbXBkdV9xdWV1ZXM7IGkrKykKKwkJCXByaXYtPnR4cV9vZmZzZXRbaSArIE1XTDhLX1RYX1dNTV9RVUVVRVNdID0KKwkJCQlsZTMyX3RvX2NwdShjbWQtPndjYmJhc2VfYW1wZHVbaV0pICYgMHhmZmZmOwogCX0KIAogZG9uZToKQEAgLTIwOTgsMTIgKzI0NjAsMjAgQEAKIAlfX2xlMzIgY2FwczsKIAlfX2xlMzIgcnhfcXVldWVfcHRyOwogCV9fbGUzMiBudW1fdHhfcXVldWVzOwotCV9fbGUzMiB0eF9xdWV1ZV9wdHJzW01XTDhLX1RYX1FVRVVFU107CisJX19sZTMyIHR4X3F1ZXVlX3B0cnNbTVdMOEtfTUFYX1RYX1FVRVVFU107CiAJX19sZTMyIGZsYWdzOwogCV9fbGUzMiBudW1fdHhfZGVzY19wZXJfcXVldWU7CiAJX19sZTMyIHRvdGFsX3J4ZDsKIH0gX19wYWNrZWQ7CiAKKy8qIElmIGVuYWJsZWQsIE1XTDhLX1NFVF9IV19TUEVDX0ZMQUdfRU5BQkxFX0xJRkVfVElNRV9FWFBJUlkgd2lsbCBjYXVzZQorICogcGFja2V0cyB0byBleHBpcmUgNTAwIG1zIGFmdGVyIHRoZSB0aW1lc3RhbXAgaW4gdGhlIHR4IGRlc2NyaXB0b3IuICBUaGF0IGlzLAorICogdGhlIHBhY2tldHMgdGhhdCBhcmUgcXVldWVkIGZvciBtb3JlIHRoYW4gNTAwbXMsIHdpbGwgYmUgZHJvcHBlZCBpbiB0aGUKKyAqIGhhcmR3YXJlLiBUaGlzIGhlbHBzIG1pbmltaXppbmcgdGhlIGlzc3VlcyBjYXVzZWQgZHVlIHRvIGhlYWQtb2YtbGluZQorICogYmxvY2tpbmcgd2hlcmUgYSBzbG93IGNsaWVudCBjYW4gaG9nIHRoZSBiYW5kd2lkdGggYW5kIGFmZmVjdCB0cmFmZmljIHRvIGEKKyAqIGZhc3RlciBjbGllbnQuCisgKi8KKyNkZWZpbmUgTVdMOEtfU0VUX0hXX1NQRUNfRkxBR19FTkFCTEVfTElGRV9USU1FX0VYUElSWQkweDAwMDAwNDAwCiAjZGVmaW5lIE1XTDhLX1NFVF9IV19TUEVDX0ZMQUdfSE9TVF9ERUNSX01HTVQJCTB4MDAwMDAwODAKICNkZWZpbmUgTVdMOEtfU0VUX0hXX1NQRUNfRkxBR19IT1NURk9STV9QUk9CRVJFU1AJMHgwMDAwMDAyMAogI2RlZmluZSBNV0w4S19TRVRfSFdfU1BFQ19GTEFHX0hPU1RGT1JNX0JFQUNPTgkJMHgwMDAwMDAxMApAQCAtMjEyNCw3ICsyNDk0LDcgQEAKIAogCWNtZC0+cHNfY29va2llID0gY3B1X3RvX2xlMzIocHJpdi0+Y29va2llX2RtYSk7CiAJY21kLT5yeF9xdWV1ZV9wdHIgPSBjcHVfdG9fbGUzMihwcml2LT5yeHFbMF0ucnhkX2RtYSk7Ci0JY21kLT5udW1fdHhfcXVldWVzID0gY3B1X3RvX2xlMzIoTVdMOEtfVFhfUVVFVUVTKTsKKwljbWQtPm51bV90eF9xdWV1ZXMgPSBjcHVfdG9fbGUzMihtd2w4a190eF9xdWV1ZXMocHJpdikpOwogCiAJLyoKIAkgKiBNYWM4MDIxMSBzdGFjayBoYXMgUTAgYXMgaGlnaGVzdCBwcmlvcml0eSBhbmQgUTMgYXMgbG93ZXN0IGluCkBAIC0yMTMyLDE0ICsyNTAyLDE1IEBACiAJICogaW4gdGhhdCBvcmRlci4gTWFwIFEzIG9mIG1hYzgwMjExIHRvIFEwIG9mIGZpcm13YXJlIHNvIHRoYXQgdGhlCiAJICogcHJpb3JpdHkgaXMgaW50ZXJwcmV0ZWQgdGhlIHJpZ2h0IHdheSBpbiBmaXJtd2FyZS4KIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfUVVFVUVTOyBpKyspIHsKLQkJaW50IGogPSBNV0w4S19UWF9RVUVVRVMgLSAxIC0gaTsKKwlmb3IgKGkgPSAwOyBpIDwgbXdsOGtfdHhfcXVldWVzKHByaXYpOyBpKyspIHsKKwkJaW50IGogPSBtd2w4a190eF9xdWV1ZXMocHJpdikgLSAxIC0gaTsKIAkJY21kLT50eF9xdWV1ZV9wdHJzW2ldID0gY3B1X3RvX2xlMzIocHJpdi0+dHhxW2pdLnR4ZF9kbWEpOwogCX0KIAogCWNtZC0+ZmxhZ3MgPSBjcHVfdG9fbGUzMihNV0w4S19TRVRfSFdfU1BFQ19GTEFHX0hPU1RfREVDUl9NR01UIHwKIAkJCQkgTVdMOEtfU0VUX0hXX1NQRUNfRkxBR19IT1NURk9STV9QUk9CRVJFU1AgfAotCQkJCSBNV0w4S19TRVRfSFdfU1BFQ19GTEFHX0hPU1RGT1JNX0JFQUNPTik7CisJCQkJIE1XTDhLX1NFVF9IV19TUEVDX0ZMQUdfSE9TVEZPUk1fQkVBQ09OIHwKKwkJCQkgTVdMOEtfU0VUX0hXX1NQRUNfRkxBR19FTkFCTEVfTElGRV9USU1FX0VYUElSWSk7CiAJY21kLT5udW1fdHhfZGVzY19wZXJfcXVldWUgPSBjcHVfdG9fbGUzMihNV0w4S19UWF9ERVNDUyk7CiAJY21kLT50b3RhbF9yeGQgPSBjcHVfdG9fbGUzMihNV0w4S19SWF9ERVNDUyk7CiAKQEAgLTIzNTYsNyArMjcyNyw3IEBACiAJX19sZTE2IGJ3OwogCV9fbGUxNiBzdWJfY2g7CiAJX19sZTE2IHBvd2VyX2xldmVsX2xpc3RbTVdMOEtfVFhfUE9XRVJfTEVWRUxfVE9UQUxdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0YXRpYyBpbnQgbXdsOGtfY21kX3R4X3Bvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mLApAQCAtMzEyMyw2ICszNDk0LDY1IEBACiB9CiAKIC8qCisgKiBDTURfR0VUX1dBVENIRE9HX0JJVE1BUC4KKyAqLworc3RydWN0IG13bDhrX2NtZF9nZXRfd2F0Y2hkb2dfYml0bWFwIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJdTgJYml0bWFwOworfSBfX3BhY2tlZDsKKworc3RhdGljIGludCBtd2w4a19jbWRfZ2V0X3dhdGNoZG9nX2JpdG1hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKmJpdG1hcCkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX2dldF93YXRjaGRvZ19iaXRtYXAgKmNtZDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfR0VUX1dBVENIRE9HX0JJVE1BUCk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJaWYgKCFyYykKKwkJKmJpdG1hcCA9IGNtZC0+Yml0bWFwOworCisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworI2RlZmluZSBJTlZBTElEX0JBCTB4QUEKK3N0YXRpYyB2b2lkIG13bDhrX3dhdGNoZG9nX2JhX2V2ZW50cyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJaW50IHJjOworCXU4IGJpdG1hcCA9IDAsIHN0cmVhbV9pbmRleDsKKwlzdHJ1Y3QgbXdsOGtfYW1wZHVfc3RyZWFtICpzdHJlYW1zOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtd2w4a19wcml2LCB3YXRjaGRvZ19iYV9oYW5kbGUpOworCisJcmMgPSBtd2w4a19jbWRfZ2V0X3dhdGNoZG9nX2JpdG1hcChwcml2LT5odywgJmJpdG1hcCk7CisJaWYgKHJjKQorCQlyZXR1cm47CisKKwlpZiAoYml0bWFwID09IElOVkFMSURfQkEpCisJCXJldHVybjsKKworCS8qIHRoZSBiaXRtYXAgaXMgdGhlIGh3IHF1ZXVlIG51bWJlci4gIE1hcCBpdCB0byB0aGUgYW1wZHUgcXVldWUuICovCisJc3RyZWFtX2luZGV4ID0gYml0bWFwIC0gTVdMOEtfVFhfV01NX1FVRVVFUzsKKworCUJVR19PTihzdHJlYW1faW5kZXggPj0gcHJpdi0+bnVtX2FtcGR1X3F1ZXVlcyk7CisKKwlzdHJlYW1zID0gJnByaXYtPmFtcGR1W3N0cmVhbV9pbmRleF07CisKKwlpZiAoc3RyZWFtcy0+c3RhdGUgPT0gQU1QRFVfU1RSRUFNX0FDVElWRSkKKwkJaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdHJlYW1zLT5zdGEsIHN0cmVhbXMtPnRpZCk7CisKKwlyZXR1cm47Cit9CisKKworLyoKICAqIENNRF9CU1NfU1RBUlQuCiAgKi8KIHN0cnVjdCBtd2w4a19jbWRfYnNzX3N0YXJ0IHsKQEAgLTMxNTEsNiArMzU4MSwxNTIgQEAKIH0KIAogLyoKKyAqIENNRF9CQVNUUkVBTS4KKyAqLworCisvKgorICogVVBTVFJFQU0gaXMgdHggZGlyZWN0aW9uCisgKi8KKyNkZWZpbmUgQkFTVFJFQU1fRkxBR19ESVJFQ1RJT05fVVBTVFJFQU0JMHgwMAorI2RlZmluZSBCQVNUUkVBTV9GTEFHX0lNTUVESUFURV9UWVBFCQkweDAxCisKK2VudW0gYmFfc3RyZWFtX2FjdGlvbl90eXBlIHsKKwlNV0w4S19CQV9DUkVBVEUsCisJTVdMOEtfQkFfVVBEQVRFLAorCU1XTDhLX0JBX0RFU1RST1ksCisJTVdMOEtfQkFfRkxVU0gsCisJTVdMOEtfQkFfQ0hFQ0ssCit9OworCisKK3N0cnVjdCBtd2w4a19jcmVhdGVfYmFfc3RyZWFtIHsKKwlfX2xlMzIJZmxhZ3M7CisJX19sZTMyCWlkbGVfdGhyczsKKwlfX2xlMzIJYmFyX3RocnM7CisJX19sZTMyCXdpbmRvd19zaXplOworCXU4CXBlZXJfbWFjX2FkZHJbNl07CisJdTgJZGlhbG9nX3Rva2VuOworCXU4CXRpZDsKKwl1OAlxdWV1ZV9pZDsKKwl1OAlwYXJhbV9pbmZvOworCV9fbGUzMgliYV9jb250ZXh0OworCXU4CXJlc2V0X3NlcV9ub19mbGFnOworCV9fbGUxNgljdXJyX3NlcV9ubzsKKwl1OAlzdGFfc3JjX21hY19hZGRyWzZdOworfSBfX3BhY2tlZDsKKworc3RydWN0IG13bDhrX2Rlc3Ryb3lfYmFfc3RyZWFtIHsKKwlfX2xlMzIJZmxhZ3M7CisJX19sZTMyCWJhX2NvbnRleHQ7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbXdsOGtfY21kX2Jhc3RyZWFtIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdAloZWFkZXI7CisJX19sZTMyCWFjdGlvbjsKKwl1bmlvbiB7CisJCXN0cnVjdCBtd2w4a19jcmVhdGVfYmFfc3RyZWFtCWNyZWF0ZV9wYXJhbXM7CisJCXN0cnVjdCBtd2w4a19kZXN0cm95X2JhX3N0cmVhbQlkZXN0cm95X3BhcmFtczsKKwl9OworfSBfX3BhY2tlZDsKKworc3RhdGljIGludAorbXdsOGtfY2hlY2tfYmEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBtd2w4a19hbXBkdV9zdHJlYW0gKnN0cmVhbSkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX2Jhc3RyZWFtICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX0JBU1RSRUFNKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUzMihNV0w4S19CQV9DSEVDSyk7CisKKwljbWQtPmNyZWF0ZV9wYXJhbXMucXVldWVfaWQgPSBzdHJlYW0tPmlkeDsKKwltZW1jcHkoJmNtZC0+Y3JlYXRlX3BhcmFtcy5wZWVyX21hY19hZGRyWzBdLCBzdHJlYW0tPnN0YS0+YWRkciwKKwkgICAgICAgRVRIX0FMRU4pOworCWNtZC0+Y3JlYXRlX3BhcmFtcy50aWQgPSBzdHJlYW0tPnRpZDsKKworCWNtZC0+Y3JlYXRlX3BhcmFtcy5mbGFncyA9CisJCWNwdV90b19sZTMyKEJBU1RSRUFNX0ZMQUdfSU1NRURJQVRFX1RZUEUpIHwKKwkJY3B1X3RvX2xlMzIoQkFTVFJFQU1fRkxBR19ESVJFQ1RJT05fVVBTVFJFQU0pOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQKK213bDhrX2NyZWF0ZV9iYShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IG13bDhrX2FtcGR1X3N0cmVhbSAqc3RyZWFtLAorCQl1OCBidWZfc2l6ZSkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX2Jhc3RyZWFtICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfQkFTVFJFQU0pOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTMyKE1XTDhLX0JBX0NSRUFURSk7CisKKwljbWQtPmNyZWF0ZV9wYXJhbXMuYmFyX3RocnMgPSBjcHVfdG9fbGUzMigodTMyKWJ1Zl9zaXplKTsKKwljbWQtPmNyZWF0ZV9wYXJhbXMud2luZG93X3NpemUgPSBjcHVfdG9fbGUzMigodTMyKWJ1Zl9zaXplKTsKKwljbWQtPmNyZWF0ZV9wYXJhbXMucXVldWVfaWQgPSBzdHJlYW0tPmlkeDsKKworCW1lbWNweShjbWQtPmNyZWF0ZV9wYXJhbXMucGVlcl9tYWNfYWRkciwgc3RyZWFtLT5zdGEtPmFkZHIsIEVUSF9BTEVOKTsKKwljbWQtPmNyZWF0ZV9wYXJhbXMudGlkID0gc3RyZWFtLT50aWQ7CisJY21kLT5jcmVhdGVfcGFyYW1zLmN1cnJfc2VxX25vID0gY3B1X3RvX2xlMTYoMCk7CisJY21kLT5jcmVhdGVfcGFyYW1zLnJlc2V0X3NlcV9ub19mbGFnID0gMTsKKworCWNtZC0+Y3JlYXRlX3BhcmFtcy5wYXJhbV9pbmZvID0KKwkJKHN0cmVhbS0+c3RhLT5odF9jYXAuYW1wZHVfZmFjdG9yICYKKwkJIElFRUU4MDIxMV9IVF9BTVBEVV9QQVJNX0ZBQ1RPUikgfAorCQkoKHN0cmVhbS0+c3RhLT5odF9jYXAuYW1wZHVfZGVuc2l0eSA8PCAyKSAmCisJCSBJRUVFODAyMTFfSFRfQU1QRFVfUEFSTV9ERU5TSVRZKTsKKworCWNtZC0+Y3JlYXRlX3BhcmFtcy5mbGFncyA9CisJCWNwdV90b19sZTMyKEJBU1RSRUFNX0ZMQUdfSU1NRURJQVRFX1RZUEUgfAorCQkJCQlCQVNUUkVBTV9GTEFHX0RJUkVDVElPTl9VUFNUUkVBTSk7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCisJd2lwaHlfZGVidWcoaHctPndpcGh5LCAiQ3JlYXRlZCBhIEJBIHN0cmVhbSBmb3IgJXBNIDogdGlkICVkXG4iLAorCQlzdHJlYW0tPnN0YS0+YWRkciwgc3RyZWFtLT50aWQpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIG13bDhrX2Rlc3Ryb3lfYmEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgIHN0cnVjdCBtd2w4a19hbXBkdV9zdHJlYW0gKnN0cmVhbSkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX2Jhc3RyZWFtICpjbWQ7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX0JBU1RSRUFNKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMzIoTVdMOEtfQkFfREVTVFJPWSk7CisKKwljbWQtPmRlc3Ryb3lfcGFyYW1zLmJhX2NvbnRleHQgPSBjcHVfdG9fbGUzMihzdHJlYW0tPmlkeCk7CisJbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisKKwl3aXBoeV9kZWJ1Zyhody0+d2lwaHksICJEZWxldGVkIEJBIHN0cmVhbSBpbmRleCAlZFxuIiwgc3RyZWFtLT5pZHgpOworCisJa2ZyZWUoY21kKTsKK30KKworLyoKICAqIENNRF9TRVRfTkVXX1NUTi4KICAqLwogc3RydWN0IG13bDhrX2NtZF9zZXRfbmV3X3N0biB7CkBAIC0zMjc0LDcgKzM4NTAsNyBAQAogCV9fdTggbWFjX2FkZHJbNl07CiAJX191OCBlbmNyX3R5cGU7CiAKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgbXdsOGtfY21kX3NldF9rZXkgewogCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKQEAgLTMyOTQsNyArMzg3MCw3IEBACiAJX19sZTE2IHRraXBfdHNjX2xvdzsKIAlfX2xlMzIgdGtpcF90c2NfaGlnaDsKIAlfX3U4IG1hY19hZGRyWzZdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIGVudW0gewogCU1XTDhLX0VOQ1JfRU5BQkxFLApAQCAtMzQyMiw3ICszOTk4LDcgQEAKIAkJCW13bDhrX3ZpZi0+d2VwX2tleV9jb25mW2lkeF0uZW5hYmxlZCA9IDE7CiAJCX0KIAotCQlrZXltbGVuID0gMDsKKwkJa2V5bWxlbiA9IGtleS0+a2V5bGVuOwogCQlhY3Rpb24gPSBNV0w4S19FTkNSX1NFVF9LRVk7CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfVEtJUDoKQEAgLTM0OTYsNyArNDA3Miw2IEBACiAJCWFkZHIgPSBzdGEtPmFkZHI7CiAKIAlpZiAoY21kX3BhcmFtID09IFNFVF9LRVkpIHsKLQkJa2V5LT5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVY7CiAJCXJjID0gbXdsOGtfY21kX2VuY3J5cHRpb25fc2V0X2tleShodywgdmlmLCBhZGRyLCBrZXkpOwogCQlpZiAocmMpCiAJCQlnb3RvIG91dDsKQEAgLTM2NzEsNiArNDI0NiwxMSBAQAogCQl0YXNrbGV0X3NjaGVkdWxlKCZwcml2LT5wb2xsX3J4X3Rhc2spOwogCX0KIAorCWlmIChzdGF0dXMgJiBNV0w4S19BMkhfSU5UX0JBX1dBVENIRE9HKSB7CisJCXN0YXR1cyAmPSB+TVdMOEtfQTJIX0lOVF9CQV9XQVRDSERPRzsKKwkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoaHcsICZwcml2LT53YXRjaGRvZ19iYV9oYW5kbGUpOworCX0KKwogCWlmIChzdGF0dXMpCiAJCWlvd3JpdGUzMih+c3RhdHVzLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTKTsKIApAQCAtMzY5OSw3ICs0Mjc5LDcgQEAKIAogCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfUVVFVUVTOyBpKyspCisJZm9yIChpID0gMDsgaSA8IG13bDhrX3R4X3F1ZXVlcyhwcml2KTsgaSsrKQogCQlsaW1pdCAtPSBtd2w4a190eHFfcmVjbGFpbShodywgaSwgbGltaXQsIDApOwogCiAJaWYgKCFwcml2LT5wZW5kaW5nX3R4X3BrdHMgJiYgcHJpdi0+dHhfd2FpdCAhPSBOVUxMKSB7CkBAIC0zNzc0LDYgKzQzNTQsOCBAQAogCiAJLyogRW5hYmxlIGludGVycnVwdHMgKi8KIAlpb3dyaXRlMzIoTVdMOEtfQTJIX0VWRU5UUywgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0spOworCWlvd3JpdGUzMihNV0w4S19BMkhfRVZFTlRTLAorCQkgIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9TVEFUVVNfTUFTSyk7CiAKIAlyYyA9IG13bDhrX2Z3X2xvY2soaHcpOwogCWlmICghcmMpIHsKQEAgLTM4MjksNiArNDQxMSw3IEBACiAKIAkvKiBTdG9wIGZpbmFsaXplIGpvaW4gd29ya2VyICovCiAJY2FuY2VsX3dvcmtfc3luYygmcHJpdi0+ZmluYWxpemVfam9pbl93b3JrZXIpOworCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPndhdGNoZG9nX2JhX2hhbmRsZSk7CiAJaWYgKHByaXYtPmJlYWNvbl9za2IgIT0gTlVMTCkKIAkJZGV2X2tmcmVlX3NrYihwcml2LT5iZWFjb25fc2tiKTsKIApAQCAtMzgzNyw3ICs0NDIwLDcgQEAKIAl0YXNrbGV0X2Rpc2FibGUoJnByaXYtPnBvbGxfcnhfdGFzayk7CiAKIAkvKiBSZXR1cm4gYWxsIHNrYnMgdG8gbWFjODAyMTEgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfUVVFVUVTOyBpKyspCisJZm9yIChpID0gMDsgaSA8IG13bDhrX3R4X3F1ZXVlcyhwcml2KTsgaSsrKQogCQltd2w4a190eHFfcmVjbGFpbShodywgaSwgSU5UX01BWCwgMSk7CiB9CiAKQEAgLTM5NTgsOSArNDU0MSwxMiBAQAogCQljb25mLT5wb3dlcl9sZXZlbCA9IDE4OwogCiAJaWYgKHByaXYtPmFwX2Z3KSB7Ci0JCXJjID0gbXdsOGtfY21kX3R4X3Bvd2VyKGh3LCBjb25mLCBjb25mLT5wb3dlcl9sZXZlbCk7Ci0JCWlmIChyYykKLQkJCWdvdG8gb3V0OworCisJCWlmIChjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QT1dFUikgeworCQkJcmMgPSBtd2w4a19jbWRfdHhfcG93ZXIoaHcsIGNvbmYsIGNvbmYtPnBvd2VyX2xldmVsKTsKKwkJCWlmIChyYykKKwkJCQlnb3RvIG91dDsKKwkJfQogCiAJCXJjID0gbXdsOGtfY21kX3JmX2FudGVubmEoaHcsIE1XTDhLX1JGX0FOVEVOTkFfUlgsIDB4Myk7CiAJCWlmIChyYykKQEAgLTM5ODcsNyArNDU3Myw3IEBACiAJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvLCB1MzIgY2hhbmdlZCkKIHsKIAlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCXUzMiBhcF9sZWdhY3lfcmF0ZXM7CisJdTMyIGFwX2xlZ2FjeV9yYXRlcyA9IDA7CiAJdTggYXBfbWNzX3JhdGVzWzE2XTsKIAlpbnQgcmM7CiAKQEAgLTQzMTIsNiArNDg5OCw4IEBACiAJCXJldCA9IG13bDhrX2NtZF91cGRhdGVfc3RhZGJfYWRkKGh3LCB2aWYsIHN0YSk7CiAJCWlmIChyZXQgPj0gMCkgewogCQkJTVdMOEtfU1RBKHN0YSktPnBlZXJfaWQgPSByZXQ7CisJCQlpZiAoc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKQorCQkJCU1XTDhLX1NUQShzdGEpLT5pc19hbXBkdV9hbGxvd2VkID0gdHJ1ZTsKIAkJCXJldCA9IDA7CiAJCX0KIApAQCAtNDMzNSwxNCArNDkyMywxNCBAQAogCiAJcmMgPSBtd2w4a19md19sb2NrKGh3KTsKIAlpZiAoIXJjKSB7Ci0JCUJVR19PTihxdWV1ZSA+IE1XTDhLX1RYX1FVRVVFUyAtIDEpOworCQlCVUdfT04ocXVldWUgPiBNV0w4S19UWF9XTU1fUVVFVUVTIC0gMSk7CiAJCW1lbWNweSgmcHJpdi0+d21tX3BhcmFtc1txdWV1ZV0sIHBhcmFtcywgc2l6ZW9mKCpwYXJhbXMpKTsKIAogCQlpZiAoIXByaXYtPndtbV9lbmFibGVkKQogCQkJcmMgPSBtd2w4a19jbWRfc2V0X3dtbV9tb2RlKGh3LCAxKTsKIAogCQlpZiAoIXJjKSB7Ci0JCQlpbnQgcSA9IE1XTDhLX1RYX1FVRVVFUyAtIDEgLSBxdWV1ZTsKKwkJCWludCBxID0gTVdMOEtfVFhfV01NX1FVRVVFUyAtIDEgLSBxdWV1ZTsKIAkJCXJjID0gbXdsOGtfY21kX3NldF9lZGNhX3BhcmFtcyhodywgcSwKIAkJCQkJCSAgICAgICBwYXJhbXMtPmN3X21pbiwKIAkJCQkJCSAgICAgICBwYXJhbXMtPmN3X21heCwKQEAgLTQzNzgsMjEgKzQ5NjYsMTE4IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNkZWZpbmUgTUFYX0FNUERVX0FUVEVNUFRTIDUKKwogc3RhdGljIGludAogbXdsOGtfYW1wZHVfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkgICBlbnVtIGllZWU4MDIxMV9hbXBkdV9tbG1lX2FjdGlvbiBhY3Rpb24sCiAJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQsIHUxNiAqc3NuLAogCQkgICB1OCBidWZfc2l6ZSkKIHsKKworCWludCBpLCByYyA9IDA7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfYW1wZHVfc3RyZWFtICpzdHJlYW07CisJdTggKmFkZHIgPSBzdGEtPmFkZHI7CisKKwlpZiAoIShody0+ZmxhZ3MgJiBJRUVFODAyMTFfSFdfQU1QRFVfQUdHUkVHQVRJT04pKQorCQlyZXR1cm4gLUVOT1RTVVBQOworCisJc3Bpbl9sb2NrKCZwcml2LT5zdHJlYW1fbG9jayk7CisJc3RyZWFtID0gbXdsOGtfbG9va3VwX3N0cmVhbShodywgYWRkciwgdGlkKTsKKwogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBJRUVFODAyMTFfQU1QRFVfUlhfU1RBUlQ6CiAJY2FzZSBJRUVFODAyMTFfQU1QRFVfUlhfU1RPUDoKLQkJaWYgKCEoaHctPmZsYWdzICYgSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OKSkKLQkJCXJldHVybiAtRU5PVFNVUFA7Ci0JCXJldHVybiAwOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9TVEFSVDoKKwkJLyogQnkgdGhlIHRpbWUgd2UgZ2V0IGhlcmUgdGhlIGh3IHF1ZXVlcyBtYXkgY29udGFpbiBvdXRnb2luZworCQkgKiBwYWNrZXRzIGZvciB0aGlzIFJBL1RJRCB0aGF0IGFyZSBub3QgcGFydCBvZiB0aGlzIEJBCisJCSAqIHNlc3Npb24uICBUaGUgaHcgd2lsbCBhc3NpZ24gc2VxdWVuY2UgbnVtYmVycyB0byB0aGVzZQorCQkgKiBwYWNrZXRzIGFzIHRoZXkgZ28gb3V0LiAgU28gaWYgd2UgcXVlcnkgdGhlIGh3IGZvciBpdHMgbmV4dAorCQkgKiBzZXF1ZW5jZSBudW1iZXIgYW5kIHVzZSB0aGF0IGZvciB0aGUgU1NOIGhlcmUsIGl0IG1heSBlbmQgdXAKKwkJICogYmVpbmcgd3JvbmcsIHdoaWNoIHdpbGwgbGVhZCB0byBzZXF1ZW5jZSBudW1iZXIgbWlzbWF0Y2ggYXQKKwkJICogdGhlIHJlY2lwaWVudC4gIFRvIGF2b2lkIHRoaXMsIHdlIHJlc2V0IHRoZSBzZXF1ZW5jZSBudW1iZXIKKwkJICogdG8gTyBmb3IgdGhlIGZpcnN0IE1QRFUgaW4gdGhpcyBCQSBzdHJlYW0uCisJCSAqLworCQkqc3NuID0gMDsKKwkJaWYgKHN0cmVhbSA9PSBOVUxMKSB7CisJCQkvKiBUaGlzIG1lYW5zIHRoYXQgc29tZWJvZHkgb3V0c2lkZSB0aGlzIGRyaXZlciBjYWxsZWQKKwkJCSAqIGllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uLiAgVGhpcyBpcyB1bmV4cGVjdGVkCisJCQkgKiBiZWNhdXNlIHdlIGRvIG91ciBvd24gcmF0ZSBjb250cm9sLiAgSnVzdCB3YXJuIGFuZAorCQkJICogbW92ZSBvbi4KKwkJCSAqLworCQkJd2lwaHlfd2Fybihody0+d2lwaHksICJVbmV4cGVjdGVkIGNhbGwgdG8gJXMuICAiCisJCQkJICAgIlByb2NlZWRpbmcgYW55d2F5LlxuIiwgX19mdW5jX18pOworCQkJc3RyZWFtID0gbXdsOGtfYWRkX3N0cmVhbShodywgc3RhLCB0aWQpOworCQl9CisJCWlmIChzdHJlYW0gPT0gTlVMTCkgeworCQkJd2lwaHlfZGVidWcoaHctPndpcGh5LCAibm8gZnJlZSBBTVBEVSBzdHJlYW1zXG4iKTsKKwkJCXJjID0gLUVCVVNZOworCQkJYnJlYWs7CisJCX0KKwkJc3RyZWFtLT5zdGF0ZSA9IEFNUERVX1NUUkVBTV9JTl9QUk9HUkVTUzsKKworCQkvKiBSZWxlYXNlIHRoZSBsb2NrIGJlZm9yZSB3ZSBkbyB0aGUgdGltZSBjb25zdW1pbmcgc3R1ZmYgKi8KKwkJc3Bpbl91bmxvY2soJnByaXYtPnN0cmVhbV9sb2NrKTsKKwkJZm9yIChpID0gMDsgaSA8IE1BWF9BTVBEVV9BVFRFTVBUUzsgaSsrKSB7CisJCQlyYyA9IG13bDhrX2NoZWNrX2JhKGh3LCBzdHJlYW0pOworCisJCQlpZiAoIXJjKQorCQkJCWJyZWFrOworCQkJLyoKKwkJCSAqIEhXIHF1ZXVlcyB0YWtlIHRpbWUgdG8gYmUgZmx1c2hlZCwgZ2l2ZSB0aGVtCisJCQkgKiBzdWZmaWNpZW50IHRpbWUKKwkJCSAqLworCisJCQltc2xlZXAoMTAwMCk7CisJCX0KKwkJc3Bpbl9sb2NrKCZwcml2LT5zdHJlYW1fbG9jayk7CisJCWlmIChyYykgeworCQkJd2lwaHlfZXJyKGh3LT53aXBoeSwgIlN0cmVhbSBmb3IgdGlkICVkIGJ1c3kgYWZ0ZXIgJWQiCisJCQkJIiBhdHRlbXB0c1xuIiwgdGlkLCBNQVhfQU1QRFVfQVRURU1QVFMpOworCQkJbXdsOGtfcmVtb3ZlX3N0cmVhbShodywgc3RyZWFtKTsKKwkJCXJjID0gLUVCVVNZOworCQkJYnJlYWs7CisJCX0KKwkJaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiX2lycXNhZmUodmlmLCBhZGRyLCB0aWQpOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9TVE9QOgorCQlpZiAoc3RyZWFtID09IE5VTEwpCisJCQlicmVhazsKKwkJaWYgKHN0cmVhbS0+c3RhdGUgPT0gQU1QRFVfU1RSRUFNX0FDVElWRSkgeworCQkJc3Bpbl91bmxvY2soJnByaXYtPnN0cmVhbV9sb2NrKTsKKwkJCW13bDhrX2Rlc3Ryb3lfYmEoaHcsIHN0cmVhbSk7CisJCQlzcGluX2xvY2soJnByaXYtPnN0cmVhbV9sb2NrKTsKKwkJfQorCQltd2w4a19yZW1vdmVfc3RyZWFtKGh3LCBzdHJlYW0pOworCQlpZWVlODAyMTFfc3RvcF90eF9iYV9jYl9pcnFzYWZlKHZpZiwgYWRkciwgdGlkKTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfT1BFUkFUSU9OQUw6CisJCUJVR19PTihzdHJlYW0gPT0gTlVMTCk7CisJCUJVR19PTihzdHJlYW0tPnN0YXRlICE9IEFNUERVX1NUUkVBTV9JTl9QUk9HUkVTUyk7CisJCXNwaW5fdW5sb2NrKCZwcml2LT5zdHJlYW1fbG9jayk7CisJCXJjID0gbXdsOGtfY3JlYXRlX2JhKGh3LCBzdHJlYW0sIGJ1Zl9zaXplKTsKKwkJc3Bpbl9sb2NrKCZwcml2LT5zdHJlYW1fbG9jayk7CisJCWlmICghcmMpCisJCQlzdHJlYW0tPnN0YXRlID0gQU1QRFVfU1RSRUFNX0FDVElWRTsKKwkJZWxzZSB7CisJCQlzcGluX3VubG9jaygmcHJpdi0+c3RyZWFtX2xvY2spOworCQkJbXdsOGtfZGVzdHJveV9iYShodywgc3RyZWFtKTsKKwkJCXNwaW5fbG9jaygmcHJpdi0+c3RyZWFtX2xvY2spOworCQkJd2lwaHlfZGVidWcoaHctPndpcGh5LAorCQkJCSJGYWlsZWQgYWRkaW5nIHN0cmVhbSBmb3Igc3RhICVwTSB0aWQgJWRcbiIsCisJCQkJYWRkciwgdGlkKTsKKwkJCW13bDhrX3JlbW92ZV9zdHJlYW0oaHcsIHN0cmVhbSk7CisJCX0KKwkJYnJlYWs7CisKIAlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT1RTVVBQOworCQlyYyA9IC1FTk9UU1VQUDsKIAl9CisKKwlzcGluX3VubG9jaygmcHJpdi0+c3RyZWFtX2xvY2spOworCXJldHVybiByYzsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIG13bDhrX29wcyA9IHsKQEAgLTQ0NDEsNyArNTEyNiw3IEBACiAJTVdMODM2NiwKIH07CiAKLSNkZWZpbmUgTVdMOEtfODM2Nl9BUF9GV19BUEkgMQorI2RlZmluZSBNV0w4S184MzY2X0FQX0ZXX0FQSSAyCiAjZGVmaW5lIF9NV0w4S184MzY2X0FQX0ZXKGFwaSkgIm13bDhrL2ZtaW1hZ2VfODM2Nl9hcC0iICNhcGkgIi5mdyIKICNkZWZpbmUgTVdMOEtfODM2Nl9BUF9GVyhhcGkpIF9NV0w4S184MzY2X0FQX0ZXKGFwaSkKIApAQCAtNDYwNyw2ICs1MjkyLDIzIEBACiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgaW50IG13bDhrX2luaXRfdHhxcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWludCByYyA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbXdsOGtfdHhfcXVldWVzKHByaXYpOyBpKyspIHsKKwkJcmMgPSBtd2w4a190eHFfaW5pdChodywgaSk7CisJCWlmIChyYykKKwkJCWJyZWFrOworCQlpZiAocHJpdi0+YXBfZncpCisJCQlpb3dyaXRlMzIocHJpdi0+dHhxW2ldLnR4ZF9kbWEsCisJCQkJICBwcml2LT5zcmFtICsgcHJpdi0+dHhxX29mZnNldFtpXSk7CisJfQorCXJldHVybiByYzsKK30KKwogLyogaW5pdGlhbGl6ZSBodyBhZnRlciBzdWNjZXNzZnVsbHkgbG9hZGluZyBhIGZpcm13YXJlIGltYWdlICovCiBzdGF0aWMgaW50IG13bDhrX3Byb2JlX2h3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewpAQCAtNDYzNCwxNyArNTMzNiwyNiBAQAogCQlnb3RvIGVycl9zdG9wX2Zpcm13YXJlOwogCXJ4cV9yZWZpbGwoaHcsIDAsIElOVF9NQVgpOwogCi0JZm9yIChpID0gMDsgaSA8IE1XTDhLX1RYX1FVRVVFUzsgaSsrKSB7Ci0JCXJjID0gbXdsOGtfdHhxX2luaXQoaHcsIGkpOworCS8qIEZvciB0aGUgc3RhIGZpcm13YXJlLCB3ZSBuZWVkIHRvIGtub3cgdGhlIGRtYSBhZGRyZXNzZXMgb2YgdHggcXVldWVzCisJICogYmVmb3JlIHNlbmRpbmcgTVdMOEtfQ01EX0dFVF9IV19TUEVDLiAgU28gd2UgbXVzdCBpbml0aWFsaXplIHRoZW0KKwkgKiBwcmlvciB0byBpc3N1aW5nIHRoaXMgY29tbWFuZC4gIEJ1dCBmb3IgdGhlIEFQIGNhc2UsIHdlIGxlYXJuIHRoZQorCSAqIHRvdGFsIG51bWJlciBvZiBxdWV1ZXMgZnJvbSB0aGUgcmVzdWx0IENNRF9HRVRfSFdfU1BFQywgc28gZm9yIHRoaXMKKwkgKiBjYXNlIHdlIG11c3QgaW5pdGlhbGl6ZSB0aGUgdHggcXVldWVzIGFmdGVyLgorCSAqLworCXByaXYtPm51bV9hbXBkdV9xdWV1ZXMgPSAwOworCWlmICghcHJpdi0+YXBfZncpIHsKKwkJcmMgPSBtd2w4a19pbml0X3R4cXMoaHcpOwogCQlpZiAocmMpCiAJCQlnb3RvIGVycl9mcmVlX3F1ZXVlczsKIAl9CiAKIAlpb3dyaXRlMzIoMCwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVUyk7CiAJaW93cml0ZTMyKDAsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLKTsKLQlpb3dyaXRlMzIoTVdMOEtfQTJIX0lOVF9UWF9ET05FIHwgTVdMOEtfQTJIX0lOVF9SWF9SRUFEWSwKKwlpb3dyaXRlMzIoTVdMOEtfQTJIX0lOVF9UWF9ET05FfE1XTDhLX0EySF9JTlRfUlhfUkVBRFl8CisJCSAgTVdMOEtfQTJIX0lOVF9CQV9XQVRDSERPRywKIAkJICBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfQ0xFQVJfU0VMKTsKLQlpb3dyaXRlMzIoMHhmZmZmZmZmZiwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVU19NQVNLKTsKKwlpb3dyaXRlMzIoTVdMOEtfQTJIX0lOVF9PUENfRE9ORSwKKwkJICBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTX01BU0spOwogCiAJcmMgPSByZXF1ZXN0X2lycShwcml2LT5wZGV2LT5pcnEsIG13bDhrX2ludGVycnVwdCwKIAkJCSBJUlFGX1NIQVJFRCwgTVdMOEtfTkFNRSwgaHcpOwpAQCAtNDY1Myw2ICs1MzY0LDggQEAKIAkJZ290byBlcnJfZnJlZV9xdWV1ZXM7CiAJfQogCisJbWVtc2V0KHByaXYtPmFtcGR1LCAwLCBzaXplb2YocHJpdi0+YW1wZHUpKTsKKwogCS8qCiAJICogVGVtcG9yYXJpbHkgZW5hYmxlIGludGVycnVwdHMuICBJbml0aWFsIGZpcm13YXJlIGhvc3QKIAkgKiBjb21tYW5kcyB1c2UgaW50ZXJydXB0cyBhbmQgYXZvaWQgcG9sbGluZy4gIERpc2FibGUKQEAgLTQ2NjQsNiArNTM3Nyw4IEBACiAJaWYgKHByaXYtPmFwX2Z3KSB7CiAJCXJjID0gbXdsOGtfY21kX2dldF9od19zcGVjX2FwKGh3KTsKIAkJaWYgKCFyYykKKwkJCXJjID0gbXdsOGtfaW5pdF90eHFzKGh3KTsKKwkJaWYgKCFyYykKIAkJCXJjID0gbXdsOGtfY21kX3NldF9od19zcGVjKGh3KTsKIAl9IGVsc2UgewogCQlyYyA9IG13bDhrX2NtZF9nZXRfaHdfc3BlY19zdGEoaHcpOwpAQCAtNDcwNSw3ICs1NDIwLDcgQEAKIAlmcmVlX2lycShwcml2LT5wZGV2LT5pcnEsIGh3KTsKIAogZXJyX2ZyZWVfcXVldWVzOgotCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9RVUVVRVM7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgbXdsOGtfdHhfcXVldWVzKHByaXYpOyBpKyspCiAJCW13bDhrX3R4cV9kZWluaXQoaHcsIGkpOwogCW13bDhrX3J4cV9kZWluaXQoaHcsIDApOwogCkBAIC00NzI3LDcgKzU0NDIsNyBAQAogCW13bDhrX3N0b3AoaHcpOwogCW13bDhrX3J4cV9kZWluaXQoaHcsIDApOwogCi0JZm9yIChpID0gMDsgaSA8IE1XTDhLX1RYX1FVRVVFUzsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBtd2w4a190eF9xdWV1ZXMocHJpdik7IGkrKykKIAkJbXdsOGtfdHhxX2RlaW5pdChodywgaSk7CiAKIAlyYyA9IG13bDhrX2luaXRfZmlybXdhcmUoaHcsIGZ3X2ltYWdlLCBmYWxzZSk7CkBAIC00NzQ2LDcgKzU0NjEsNyBAQAogCWlmIChyYykKIAkJZ290byBmYWlsOwogCi0JZm9yIChpID0gMDsgaSA8IE1XTDhLX1RYX1FVRVVFUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IE1XTDhLX1RYX1dNTV9RVUVVRVM7IGkrKykgewogCQlyYyA9IG13bDhrX2NvbmZfdHgoaHcsIGksICZwcml2LT53bW1fcGFyYW1zW2ldKTsKIAkJaWYgKHJjKQogCQkJZ290byBmYWlsOwpAQCAtNDc3OCw5ICs1NDkzLDExIEBACiAJaHctPmV4dHJhX3R4X2hlYWRyb29tID0KIAkJc2l6ZW9mKHN0cnVjdCBtd2w4a19kbWFfZGF0YSkgLSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jdHMpOwogCisJaHctPmV4dHJhX3R4X2hlYWRyb29tIC09IHByaXYtPmFwX2Z3ID8gUkVEVUNFRF9UWF9IRUFEUk9PTSA6IDA7CisKIAlody0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDEwOwogCi0JaHctPnF1ZXVlcyA9IE1XTDhLX1RYX1FVRVVFUzsKKwlody0+cXVldWVzID0gTVdMOEtfVFhfV01NX1FVRVVFUzsKIAogCS8qIFNldCByc3NpIHZhbHVlcyB0byBkQm0gKi8KIAlody0+ZmxhZ3MgfD0gSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfCBJRUVFODAyMTFfSFdfSEFTX1JBVEVfQ09OVFJPTDsKQEAgLTQ3OTYsNiArNTUxMyw4IEBACiAKIAkvKiBGaW5hbGl6ZSBqb2luIHdvcmtlciAqLwogCUlOSVRfV09SSygmcHJpdi0+ZmluYWxpemVfam9pbl93b3JrZXIsIG13bDhrX2ZpbmFsaXplX2pvaW5fd29ya2VyKTsKKwkvKiBIYW5kbGUgd2F0Y2hkb2cgYmEgZXZlbnRzICovCisJSU5JVF9XT1JLKCZwcml2LT53YXRjaGRvZ19iYV9oYW5kbGUsIG13bDhrX3dhdGNoZG9nX2JhX2V2ZW50cyk7CiAKIAkvKiBUWCByZWNsYWltIGFuZCBSWCB0YXNrbGV0cy4gICovCiAJdGFza2xldF9pbml0KCZwcml2LT5wb2xsX3R4X3Rhc2ssIG13bDhrX3R4X3BvbGwsICh1bnNpZ25lZCBsb25nKWh3KTsKQEAgLTQ4MTUsNiArNTUzNCw4IEBACiAKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+dHhfbG9jayk7CiAKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+c3RyZWFtX2xvY2spOworCiAJcHJpdi0+dHhfd2FpdCA9IE5VTEw7CiAKIAlyYyA9IG13bDhrX3Byb2JlX2h3KGh3KTsKQEAgLTQ4MzYsNyArNTU1Nyw3IEBACiAJcmV0dXJuIDA7CiAKIGVycl91bnByb2JlX2h3OgotCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9RVUVVRVM7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgbXdsOGtfdHhfcXVldWVzKHByaXYpOyBpKyspCiAJCW13bDhrX3R4cV9kZWluaXQoaHcsIGkpOwogCW13bDhrX3J4cV9kZWluaXQoaHcsIDApOwogCkBAIC00OTk1LDEwICs1NzE2LDEwIEBACiAJbXdsOGtfaHdfcmVzZXQocHJpdik7CiAKIAkvKiBSZXR1cm4gYWxsIHNrYnMgdG8gbWFjODAyMTEgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfUVVFVUVTOyBpKyspCisJZm9yIChpID0gMDsgaSA8IG13bDhrX3R4X3F1ZXVlcyhwcml2KTsgaSsrKQogCQltd2w4a190eHFfcmVjbGFpbShodywgaSwgSU5UX01BWCwgMSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfUVVFVUVTOyBpKyspCisJZm9yIChpID0gMDsgaSA8IG13bDhrX3R4X3F1ZXVlcyhwcml2KTsgaSsrKQogCQltd2w4a190eHFfZGVpbml0KGh3LCBpKTsKIAogCW13bDhrX3J4cV9kZWluaXQoaHcsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L2VlcHJvbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L2VlcHJvbS5jCmluZGV4IDEzZDc1MGQuLjU0Y2MwYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9lZXByb20uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvZWVwcm9tLmMKQEAgLTQ5MSw3ICs0OTEsNyBAQAogCQlzdHJ1Y3QgcGRhX3Jzc2lfY2FsX2VudHJ5ICpjYWwgPSAodm9pZCAqKSAmZGF0YVtvZmZzZXRdOwogCiAJCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzOyBpKyspIHsKLQkJCXUxNiBmcmVxOworCQkJdTE2IGZyZXEgPSAwOwogCQkJc3dpdGNoIChpKSB7CiAJCQljYXNlIElFRUU4MDIxMV9CQU5EXzJHSFo6CiAJCQkJZnJlcSA9IDI0Mzc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvZndpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L2Z3aW8uYwppbmRleCAyZmFiN2QyLi5iNmEwNjFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvZndpby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9md2lvLmMKQEAgLTcyNywzICs3MjcsMzQgQEAKIAlwNTRfdHgocHJpdiwgc2tiKTsKIAlyZXR1cm4gMDsKIH0KKworaW50IHA1NF9zZXRfZ3JvdXBmaWx0ZXIoc3RydWN0IHA1NF9jb21tb24gKnByaXYpCit7CisJc3RydWN0IHA1NF9ncm91cF9hZGRyZXNzX3RhYmxlICpncnA7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlib29sIG9uID0gZmFsc2U7CisKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKHByaXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKmdycCksCisJCQkgICAgUDU0X0NPTlRST0xfVFlQRV9HUk9VUF9BRERSRVNTX1RBQkxFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlncnAgPSAoc3RydWN0IHA1NF9ncm91cF9hZGRyZXNzX3RhYmxlICopc2tiX3B1dChza2IsIHNpemVvZigqZ3JwKSk7CisKKwlvbiA9ICEocHJpdi0+ZmlsdGVyX2ZsYWdzICYgRklGX0FMTE1VTFRJKSAmJgorCSAgICAgKHByaXYtPm1jX21hY2xpc3RfbnVtID4gMCAmJgorCSAgICAgIHByaXYtPm1jX21hY2xpc3RfbnVtIDw9IE1DX0ZJTFRFUl9BRERSRVNTX05VTSk7CisKKwlpZiAob24pIHsKKwkJZ3JwLT5maWx0ZXJfZW5hYmxlID0gY3B1X3RvX2xlMTYoMSk7CisJCWdycC0+bnVtX2FkZHJlc3MgPSBjcHVfdG9fbGUxNihwcml2LT5tY19tYWNsaXN0X251bSk7CisJCW1lbWNweShncnAtPm1hY19saXN0LCBwcml2LT5tY19tYWNsaXN0LCBzaXplb2YoZ3JwLT5tYWNfbGlzdCkpOworCX0gZWxzZSB7CisJCWdycC0+ZmlsdGVyX2VuYWJsZSA9IGNwdV90b19sZTE2KDApOworCQlncnAtPm51bV9hZGRyZXNzID0gY3B1X3RvX2xlMTYoMCk7CisJCW1lbXNldChncnAtPm1hY19saXN0LCAwLCBzaXplb2YoZ3JwLT5tYWNfbGlzdCkpOworCX0KKworCXA1NF90eChwcml2LCBza2IpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L2xtYWMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9sbWFjLmgKaW5kZXggZWI1ODFhYi4uM2Q4ZDYyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L2xtYWMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvbG1hYy5oCkBAIC01NDAsNiArNTQwLDcgQEAKIGludCBwNTRfc2V0dXBfbWFjKHN0cnVjdCBwNTRfY29tbW9uICpwcml2KTsKIGludCBwNTRfc2V0X3BzKHN0cnVjdCBwNTRfY29tbW9uICpwcml2KTsKIGludCBwNTRfZmV0Y2hfc3RhdGlzdGljcyhzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdik7CitpbnQgcDU0X3NldF9ncm91cGZpbHRlcihzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdik7CiAKIC8qIGUvdiBEQ0Ygc2V0dXAgKi8KIGludCBwNTRfc2V0X2VkY2Yoc3RydWN0IHA1NF9jb21tb24gKnByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9tYWluLmMKaW5kZXggYTk0Njk5MS4uYTVhNmQ5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvbWFpbi5jCkBAIC0zMDgsNiArMzA4LDMxIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHU2NCBwNTRfcHJlcGFyZV9tdWx0aWNhc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAorCQkJCSBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWNfbGlzdCkKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOworCWludCBpOworCisJQlVJTERfQlVHX09OKEFSUkFZX1NJWkUocHJpdi0+bWNfbWFjbGlzdCkgIT0KKwkJQVJSQVlfU0laRSgoKHN0cnVjdCBwNTRfZ3JvdXBfYWRkcmVzc190YWJsZSAqKU5VTEwpLT5tYWNfbGlzdCkpOworCS8qCisJICogVGhlIGZpcnN0IGVudHJ5IGlzIHJlc2VydmVkIGZvciB0aGUgZ2xvYmFsIGJyb2FkY2FzdCBNQUMuCisJICogT3RoZXJ3aXNlIHRoZSBmaXJtd2FyZSB3aWxsIGRyb3AgaXQgYW5kIEFSUCB3aWxsIG5vIGxvbmdlciB3b3JrLgorCSAqLworCWkgPSAxOworCXByaXYtPm1jX21hY2xpc3RfbnVtID0gbmV0ZGV2X2h3X2FkZHJfbGlzdF9jb3VudChtY19saXN0KSArIGk7CisJbmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgbWNfbGlzdCkgeworCQltZW1jcHkoJnByaXYtPm1jX21hY2xpc3RbaV0sIGhhLT5hZGRyLCBFVEhfQUxFTik7CisJCWkrKzsKKwkJaWYgKGkgPj0gQVJSQVlfU0laRShwcml2LT5tY19tYWNsaXN0KSkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiAxOyAvKiB1cGRhdGUgKi8KK30KKwogc3RhdGljIHZvaWQgcDU0X2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAogCQkJCSB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKIAkJCQkgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKQEAgLTMxNiwxMiArMzQxLDE2IEBACiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CiAKIAkqdG90YWxfZmxhZ3MgJj0gRklGX1BST01JU0NfSU5fQlNTIHwKKwkJCUZJRl9BTExNVUxUSSB8CiAJCQlGSUZfT1RIRVJfQlNTOwogCiAJcHJpdi0+ZmlsdGVyX2ZsYWdzID0gKnRvdGFsX2ZsYWdzOwogCiAJaWYgKGNoYW5nZWRfZmxhZ3MgJiAoRklGX1BST01JU0NfSU5fQlNTIHwgRklGX09USEVSX0JTUykpCiAJCXA1NF9zZXR1cF9tYWMocHJpdik7CisKKwlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9BTExNVUxUSSB8fCBtdWx0aWNhc3QpCisJCXA1NF9zZXRfZ3JvdXBmaWx0ZXIocHJpdik7CiB9CiAKIHN0YXRpYyBpbnQgcDU0X2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1MTYgcXVldWUsCkBAIC01OTEsNiArNjIwLDcgQEAKIAkuY29uZmlnCQkJPSBwNTRfY29uZmlnLAogCS5mbHVzaAkJCT0gcDU0X2ZsdXNoLAogCS5ic3NfaW5mb19jaGFuZ2VkCT0gcDU0X2Jzc19pbmZvX2NoYW5nZWQsCisJLnByZXBhcmVfbXVsdGljYXN0CT0gcDU0X3ByZXBhcmVfbXVsdGljYXN0LAogCS5jb25maWd1cmVfZmlsdGVyCT0gcDU0X2NvbmZpZ3VyZV9maWx0ZXIsCiAJLmNvbmZfdHgJCT0gcDU0X2NvbmZfdHgsCiAJLmdldF9zdGF0cwkJPSBwNTRfZ2V0X3N0YXRzLApAQCAtNjYwLDYgKzY5MCw3IEBACiAJaW5pdF9jb21wbGV0aW9uKCZwcml2LT5iZWFjb25fY29tcCk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPndvcmssIHA1NF93b3JrKTsKIAorCW1lbXNldCgmcHJpdi0+bWNfbWFjbGlzdFswXSwgfjAsIEVUSF9BTEVOKTsKIAlyZXR1cm4gZGV2OwogfQogRVhQT1JUX1NZTUJPTF9HUEwocDU0X2luaXRfY29tbW9uKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTQuaAppbmRleCA1MDczMGZjLi43OTlkMDVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NC5oCkBAIC0yMTEsOCArMjExLDEwIEBACiAJLyogQkJQL01BQyBzdGF0ZSAqLwogCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKIAl1OCBic3NpZFtFVEhfQUxFTl07CisJdTggbWNfbWFjbGlzdFs0XVtFVEhfQUxFTl07CiAJdTE2IHdha2V1cF90aW1lcjsKIAl1bnNpZ25lZCBpbnQgZmlsdGVyX2ZsYWdzOworCWludCBtY19tYWNsaXN0X251bTsKIAlpbnQgbW9kZTsKIAl1MzIgdHNmX2xvdzMyLCB0c2ZfaGlnaDMyOwogCXUzMiBiYXNpY19yYXRlX21hc2s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmMKaW5kZXggMDQ5NGQ3Yi4uMWI3NTMxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRwY2kuYwpAQCAtMzMxLDEwICszMzEsOSBAQAogCXN0cnVjdCBwNTRwX3JpbmdfY29udHJvbCAqcmluZ19jb250cm9sID0gcHJpdi0+cmluZ19jb250cm9sOwogCXN0cnVjdCBwNTRwX2Rlc2MgKmRlc2M7CiAJZG1hX2FkZHJfdCBtYXBwaW5nOwotCXUzMiBkZXZpY2VfaWR4LCBpZHgsIGk7CisJdTMyIGlkeCwgaTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JZGV2aWNlX2lkeCA9IGxlMzJfdG9fY3B1KHJpbmdfY29udHJvbC0+ZGV2aWNlX2lkeFsxXSk7CiAJaWR4ID0gbGUzMl90b19jcHUocmluZ19jb250cm9sLT5ob3N0X2lkeFsxXSk7CiAJaSA9IGlkeCAlIEFSUkFZX1NJWkUocmluZ19jb250cm9sLT50eF9kYXRhKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvS2NvbmZpZwppbmRleCBmNjMwNTUyLi45ZGVmMWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvS2NvbmZpZwpAQCAtNTksNyArNTksNiBAQAogCXNlbGVjdCBSVDI4MDBfTElCCiAJc2VsZWN0IFJUMlgwMF9MSUJfUENJIGlmIFBDSQogCXNlbGVjdCBSVDJYMDBfTElCX1NPQyBpZiBSQUxJTktfUlQyODhYIHx8IFJBTElOS19SVDMwNVgKLQlzZWxlY3QgUlQyWDAwX0xJQl9IVAogCXNlbGVjdCBSVDJYMDBfTElCX0ZJUk1XQVJFCiAJc2VsZWN0IFJUMlgwMF9MSUJfQ1JZUFRPCiAJc2VsZWN0IENSQ19DQ0lUVApAQCAtNzQsMTcgKzczLDEzIEBACiBpZiBSVDI4MDBQQ0kKIAogY29uZmlnIFJUMjgwMFBDSV9SVDMzWFgKLQlib29sICJydDI4MDBwY2kgLSBJbmNsdWRlIHN1cHBvcnQgZm9yIHJ0MzN4eCBkZXZpY2VzIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCi0JZGVmYXVsdCBuCisJYm9vbCAicnQyODAwcGNpIC0gSW5jbHVkZSBzdXBwb3J0IGZvciBydDMzeHggZGV2aWNlcyIKKwlkZWZhdWx0IHkKIAktLS1oZWxwLS0tCiAJICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgcnQzM3h4IHdpcmVsZXNzIGNoaXBzZXQgZmFtaWx5IHRvIHRoZQogCSAgcnQyODAwcGNpIGRyaXZlci4KIAkgIFN1cHBvcnRlZCBjaGlwczogUlQzMzkwCiAKLQkgIFN1cHBvcnQgZm9yIHRoZXNlIGRldmljZXMgaXMgbm9uLWZ1bmN0aW9uYWwgYXQgdGhlIG1vbWVudCBhbmQgaXMKLQkgIGludGVuZGVkIGZvciB0ZXN0ZXJzIGFuZCBkZXZlbG9wZXJzLgotCiBjb25maWcgUlQyODAwUENJX1JUMzVYWAogCWJvb2wgInJ0MjgwMHBjaSAtIEluY2x1ZGUgc3VwcG9ydCBmb3IgcnQzNXh4IGRldmljZXMgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKQEAgLTk4LDE3ICs5MywxNCBAQAogCSAgaW50ZW5kZWQgZm9yIHRlc3RlcnMgYW5kIGRldmVsb3BlcnMuCiAKIGNvbmZpZyBSVDI4MDBQQ0lfUlQ1M1hYCi0gICAgICAgYm9vbCAicnQyODAwLXBjaSAtIEluY2x1ZGUgc3VwcG9ydCBmb3IgcnQ1M3h4IGRldmljZXMgKEVYUEVSSU1FTlRBTCkiCisgICAgICAgYm9vbCAicnQyODAwcGNpIC0gSW5jbHVkZSBzdXBwb3J0IGZvciBydDUzeHggZGV2aWNlcyAoRVhQRVJJTUVOVEFMKSIKICAgICAgICBkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAotICAgICAgIGRlZmF1bHQgbgorICAgICAgIGRlZmF1bHQgeQogICAgICAgIC0tLWhlbHAtLS0KICAgICAgICAgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBydDUzeHggd2lyZWxlc3MgY2hpcHNldCBmYW1pbHkgdG8gdGhlCiAgICAgICAgICBydDI4MDBwY2kgZHJpdmVyLgogICAgICAgICAgU3VwcG9ydGVkIGNoaXBzOiBSVDUzOTAKIAotICAgICAgICAgU3VwcG9ydCBmb3IgdGhlc2UgZGV2aWNlcyBpcyBub24tZnVuY3Rpb25hbCBhdCB0aGUgbW9tZW50IGFuZCBpcwotICAgICAgICAgaW50ZW5kZWQgZm9yIHRlc3RlcnMgYW5kIGRldmVsb3BlcnMuCi0KIGVuZGlmCiAKIGNvbmZpZyBSVDI1MDBVU0IKQEAgLTE0MCw3ICsxMzIsNiBAQAogCWRlcGVuZHMgb24gVVNCCiAJc2VsZWN0IFJUMjgwMF9MSUIKIAlzZWxlY3QgUlQyWDAwX0xJQl9VU0IKLQlzZWxlY3QgUlQyWDAwX0xJQl9IVAogCXNlbGVjdCBSVDJYMDBfTElCX0ZJUk1XQVJFCiAJc2VsZWN0IFJUMlgwMF9MSUJfQ1JZUFRPCiAJc2VsZWN0IENSQ19DQ0lUVApAQCAtMTUzLDE3ICsxNDQsMTMgQEAKIGlmIFJUMjgwMFVTQgogCiBjb25maWcgUlQyODAwVVNCX1JUMzNYWAotCWJvb2wgInJ0MjgwMHVzYiAtIEluY2x1ZGUgc3VwcG9ydCBmb3IgcnQzM3h4IGRldmljZXMgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKLQlkZWZhdWx0IG4KKwlib29sICJydDI4MDB1c2IgLSBJbmNsdWRlIHN1cHBvcnQgZm9yIHJ0MzN4eCBkZXZpY2VzIgorCWRlZmF1bHQgeQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBydDMzeHggd2lyZWxlc3MgY2hpcHNldCBmYW1pbHkgdG8gdGhlCiAJICBydDI4MDB1c2IgZHJpdmVyLgogCSAgU3VwcG9ydGVkIGNoaXBzOiBSVDMzNzAKIAotCSAgU3VwcG9ydCBmb3IgdGhlc2UgZGV2aWNlcyBpcyBub24tZnVuY3Rpb25hbCBhdCB0aGUgbW9tZW50IGFuZCBpcwotCSAgaW50ZW5kZWQgZm9yIHRlc3RlcnMgYW5kIGRldmVsb3BlcnMuCi0KIGNvbmZpZyBSVDI4MDBVU0JfUlQzNVhYCiAJYm9vbCAicnQyODAwdXNiIC0gSW5jbHVkZSBzdXBwb3J0IGZvciBydDM1eHggZGV2aWNlcyAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTApAQCAtMTc2LDYgKzE2MywxNSBAQAogCSAgU3VwcG9ydCBmb3IgdGhlc2UgZGV2aWNlcyBpcyBub24tZnVuY3Rpb25hbCBhdCB0aGUgbW9tZW50IGFuZCBpcwogCSAgaW50ZW5kZWQgZm9yIHRlc3RlcnMgYW5kIGRldmVsb3BlcnMuCiAKK2NvbmZpZyBSVDI4MDBVU0JfUlQ1M1hYCisgICAgICAgYm9vbCAicnQyODAwdXNiIC0gSW5jbHVkZSBzdXBwb3J0IGZvciBydDUzeHggZGV2aWNlcyAoRVhQRVJJTUVOVEFMKSIKKyAgICAgICBkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorICAgICAgIGRlZmF1bHQgeQorICAgICAgIC0tLWhlbHAtLS0KKyAgICAgICAgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBydDUzeHggd2lyZWxlc3MgY2hpcHNldCBmYW1pbHkgdG8gdGhlCisgICAgICAgICBydDI4MDBwY2kgZHJpdmVyLgorICAgICAgICAgU3VwcG9ydGVkIGNoaXBzOiBSVDUzNzAKKwogY29uZmlnIFJUMjgwMFVTQl9VTktOT1dOCiAJYm9vbCAicnQyODAwdXNiIC0gSW5jbHVkZSBzdXBwb3J0IGZvciB1bmtub3duIChVU0IpIGRldmljZXMiCiAJZGVmYXVsdCBuCkBAIC0yMDcsOSArMjAzLDYgQEAKIGNvbmZpZyBSVDJYMDBfTElCCiAJdHJpc3RhdGUKIAotY29uZmlnIFJUMlgwMF9MSUJfSFQKLQlib29sZWFuCi0KIGNvbmZpZyBSVDJYMDBfTElCX0ZJUk1XQVJFCiAJYm9vbGVhbgogCXNlbGVjdCBGV19MT0FERVIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9NYWtlZmlsZQppbmRleCA5NzEzMzk4Li4zNDlkNWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL01ha2VmaWxlCkBAIC03LDcgKzcsNiBAQAogcnQyeDAwbGliLSQoQ09ORklHX1JUMlgwMF9MSUJfQ1JZUFRPKQkrPSBydDJ4MDBjcnlwdG8ubwogcnQyeDAwbGliLSQoQ09ORklHX1JUMlgwMF9MSUJfRklSTVdBUkUpCSs9IHJ0MngwMGZpcm13YXJlLm8KIHJ0MngwMGxpYi0kKENPTkZJR19SVDJYMDBfTElCX0xFRFMpCSs9IHJ0MngwMGxlZHMubwotcnQyeDAwbGliLSQoQ09ORklHX1JUMlgwMF9MSUJfSFQpCSs9IHJ0MngwMGh0Lm8KIAogb2JqLSQoQ09ORklHX1JUMlgwMF9MSUIpCQkrPSBydDJ4MDBsaWIubwogb2JqLSQoQ09ORklHX1JUMlgwMF9MSUJfUENJKQkJKz0gcnQyeDAwcGNpLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuYwppbmRleCAzMjlmMzI4Li45MzdmOWU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5jCkBAIC0xMzE0LDggKzEzMTQsOCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgcnQyNDAwcGNpX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCQkgICAgICAgc3RydWN0IHJ0MngwMF9maWVsZDMyIGlycV9maWVsZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBydDI0MDBwY2lfZW5hYmxlX2ludGVycnVwdChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCQkgICAgICBzdHJ1Y3QgcnQyeDAwX2ZpZWxkMzIgaXJxX2ZpZWxkKQogewogCXUzMiByZWc7CiAKQEAgLTEzNjgsOCArMTM2OCwxMCBAQAogc3RhdGljIHZvaWQgcnQyNDAwcGNpX3J4ZG9uZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gKHN0cnVjdCBydDJ4MDBfZGV2ICopZGF0YTsKLQlydDJ4MDBwY2lfcnhkb25lKHJ0MngwMGRldik7Ci0JcnQyNDAwcGNpX2VuYWJsZV9pbnRlcnJ1cHQocnQyeDAwZGV2LCBDU1I4X1JYRE9ORSk7CisJaWYgKHJ0MngwMHBjaV9yeGRvbmUocnQyeDAwZGV2KSkKKwkJdGFza2xldF9zY2hlZHVsZSgmcnQyeDAwZGV2LT5yeGRvbmVfdGFza2xldCk7CisJZWxzZQorCQlydDI0MDBwY2lfZW5hYmxlX2ludGVycnVwdChydDJ4MDBkZXYsIENTUjhfUlhET05FKTsKIH0KIAogc3RhdGljIGlycXJldHVybl90IHJ0MjQwMHBjaV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQpAQCAtMTUzNCwxMyArMTUzNiwxMyBAQAogCSAqIERldGVjdCBpZiB0aGlzIGRldmljZSBoYXMgYW4gaGFyZHdhcmUgY29udHJvbGxlZCByYWRpby4KIAkgKi8KIAlpZiAocnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0FOVEVOTkFfSEFSRFdBUkVfUkFESU8pKQotCQlfX3NldF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQlVUVE9OLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJCV9fc2V0X2JpdChDQVBBQklMSVRZX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKIAogCS8qCiAJICogQ2hlY2sgaWYgdGhlIEJCUCB0dW5pbmcgc2hvdWxkIGJlIGVuYWJsZWQuCiAJICovCiAJaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX1JYX0FHQ1ZHQ19UVU5JTkcpKQotCQlfX3NldF9iaXQoRFJJVkVSX1NVUFBPUlRfTElOS19UVU5JTkcsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwkJX19zZXRfYml0KENBUEFCSUxJVFlfTElOS19UVU5JTkcsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE2MzgsOSArMTY0MCw5IEBACiAJLyoKIAkgKiBUaGlzIGRldmljZSByZXF1aXJlcyB0aGUgYXRpbSBxdWV1ZSBhbmQgRE1BLW1hcHBlZCBza2JzLgogCSAqLwotCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9BVElNX1FVRVVFLCAmcnQyeDAwZGV2LT5mbGFncyk7Ci0JX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX0RNQSwgJnJ0MngwMGRldi0+ZmxhZ3MpOwotCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9TV19TRVFOTywgJnJ0MngwMGRldi0+ZmxhZ3MpOworCV9fc2V0X2JpdChSRVFVSVJFX0FUSU1fUVVFVUUsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CisJX19zZXRfYml0KFJFUVVJUkVfRE1BLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOworCV9fc2V0X2JpdChSRVFVSVJFX1NXX1NFUU5PLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOwogCiAJLyoKIAkgKiBTZXQgdGhlIHJzc2kgb2Zmc2V0LgpAQCAtMTcxOCw2ICsxNzIwLDkgQEAKIAkudHhfbGFzdF9iZWFjb24JCT0gcnQyNDAwcGNpX3R4X2xhc3RfYmVhY29uLAogCS5yZmtpbGxfcG9sbAkJPSBydDJ4MDBtYWNfcmZraWxsX3BvbGwsCiAJLmZsdXNoCQkJPSBydDJ4MDBtYWNfZmx1c2gsCisJLnNldF9hbnRlbm5hCQk9IHJ0MngwMG1hY19zZXRfYW50ZW5uYSwKKwkuZ2V0X2FudGVubmEJCT0gcnQyeDAwbWFjX2dldF9hbnRlbm5hLAorCS5nZXRfcmluZ3BhcmFtCQk9IHJ0MngwMG1hY19nZXRfcmluZ3BhcmFtLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydDJ4MDBsaWJfb3BzIHJ0MjQwMHBjaV9ydDJ4MDBfb3BzID0gewpAQCAtMTczOCw2ICsxNzQzLDcgQEAKIAkuc3RhcnRfcXVldWUJCT0gcnQyNDAwcGNpX3N0YXJ0X3F1ZXVlLAogCS5raWNrX3F1ZXVlCQk9IHJ0MjQwMHBjaV9raWNrX3F1ZXVlLAogCS5zdG9wX3F1ZXVlCQk9IHJ0MjQwMHBjaV9zdG9wX3F1ZXVlLAorCS5mbHVzaF9xdWV1ZQkJPSBydDJ4MDBwY2lfZmx1c2hfcXVldWUsCiAJLndyaXRlX3R4X2Rlc2MJCT0gcnQyNDAwcGNpX3dyaXRlX3R4X2Rlc2MsCiAJLndyaXRlX2JlYWNvbgkJPSBydDI0MDBwY2lfd3JpdGVfYmVhY29uLAogCS5maWxsX3J4ZG9uZQkJPSBydDI0MDBwY2lfZmlsbF9yeGRvbmUsCkBAIC0xNzk5LDEwICsxODA1LDExIEBACiAgKiBSVDI0MDBwY2kgbW9kdWxlIGluZm9ybWF0aW9uLgogICovCiBzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocnQyNDAwcGNpX2RldmljZV90YWJsZSkgPSB7Ci0JeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgwMTAxKSwgUENJX0RFVklDRV9EQVRBKCZydDI0MDBwY2lfb3BzKSB9LAorCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MDEwMSkgfSwKIAl7IDAsIH0KIH07CiAKKwogTU9EVUxFX0FVVEhPUihEUlZfUFJPSkVDVCk7CiBNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlJhbGluayBSVDI0MDAgUENJICYgUENNQ0lBIFdpcmVsZXNzIExBTiBkcml2ZXIuIik7CkBAIC0xODEwLDEwICsxODE3LDE2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcnQyNDAwcGNpX2RldmljZV90YWJsZSk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKK3N0YXRpYyBpbnQgcnQyNDAwcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LAorCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBydDJ4MDBwY2lfcHJvYmUocGNpX2RldiwgJnJ0MjQwMHBjaV9vcHMpOworfQorCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcnQyNDAwcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSBLQlVJTERfTU9ETkFNRSwKIAkuaWRfdGFibGUJPSBydDI0MDBwY2lfZGV2aWNlX3RhYmxlLAotCS5wcm9iZQkJPSBydDJ4MDBwY2lfcHJvYmUsCisJLnByb2JlCQk9IHJ0MjQwMHBjaV9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHJ0MngwMHBjaV9yZW1vdmUpLAogCS5zdXNwZW5kCT0gcnQyeDAwcGNpX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBydDJ4MDBwY2lfcmVzdW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5jCmluZGV4IDU4Mjc3ODcuLmQyN2Q3YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmMKQEAgLTE0NDYsOCArMTQ0Niw4IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBydDI1MDBwY2lfZW5hYmxlX2ludGVycnVwdChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJCSAgICAgICBzdHJ1Y3QgcnQyeDAwX2ZpZWxkMzIgaXJxX2ZpZWxkKQorc3RhdGljIGlubGluZSB2b2lkIHJ0MjUwMHBjaV9lbmFibGVfaW50ZXJydXB0KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJCSAgICAgIHN0cnVjdCBydDJ4MDBfZmllbGQzMiBpcnFfZmllbGQpCiB7CiAJdTMyIHJlZzsKIApAQCAtMTUwMCw4ICsxNTAwLDEwIEBACiBzdGF0aWMgdm9pZCBydDI1MDBwY2lfcnhkb25lX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSAoc3RydWN0IHJ0MngwMF9kZXYgKilkYXRhOwotCXJ0MngwMHBjaV9yeGRvbmUocnQyeDAwZGV2KTsKLQlydDI1MDBwY2lfZW5hYmxlX2ludGVycnVwdChydDJ4MDBkZXYsIENTUjhfUlhET05FKTsKKwlpZiAocnQyeDAwcGNpX3J4ZG9uZShydDJ4MDBkZXYpKQorCQl0YXNrbGV0X3NjaGVkdWxlKCZydDJ4MDBkZXYtPnJ4ZG9uZV90YXNrbGV0KTsKKwllbHNlCisJCXJ0MjUwMHBjaV9lbmFibGVfaW50ZXJydXB0KHJ0MngwMGRldiwgQ1NSOF9SWERPTkUpOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgcnQyNTAwcGNpX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpCkBAIC0xNjg1LDE0ICsxNjg3LDE0IEBACiAJICogRGV0ZWN0IGlmIHRoaXMgZGV2aWNlIGhhcyBhbiBoYXJkd2FyZSBjb250cm9sbGVkIHJhZGlvLgogCSAqLwogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQU5URU5OQV9IQVJEV0FSRV9SQURJTykpCi0JCV9fc2V0X2JpdChDT05GSUdfU1VQUE9SVF9IV19CVVRUT04sICZydDJ4MDBkZXYtPmZsYWdzKTsKKwkJX19zZXRfYml0KENBUEFCSUxJVFlfSFdfQlVUVE9OLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOwogCiAJLyoKIAkgKiBDaGVjayBpZiB0aGUgQkJQIHR1bmluZyBzaG91bGQgYmUgZW5hYmxlZC4KIAkgKi8KIAlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fTklDLCAmZWVwcm9tKTsKIAlpZiAoIXJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9OSUNfRFlOX0JCUF9UVU5FKSkKLQkJX19zZXRfYml0KERSSVZFUl9TVVBQT1JUX0xJTktfVFVOSU5HLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJCV9fc2V0X2JpdChDQVBBQklMSVRZX0xJTktfVFVOSU5HLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOwogCiAJLyoKIAkgKiBSZWFkIHRoZSBSU1NJIDwtPiBkQm0gb2Zmc2V0IGluZm9ybWF0aW9uLgpAQCAtMTk1Niw5ICsxOTU4LDkgQEAKIAkvKgogCSAqIFRoaXMgZGV2aWNlIHJlcXVpcmVzIHRoZSBhdGltIHF1ZXVlIGFuZCBETUEtbWFwcGVkIHNrYnMuCiAJICovCi0JX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX0FUSU1fUVVFVUUsICZydDJ4MDBkZXYtPmZsYWdzKTsKLQlfX3NldF9iaXQoRFJJVkVSX1JFUVVJUkVfRE1BLCAmcnQyeDAwZGV2LT5mbGFncyk7Ci0JX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX1NXX1NFUU5PLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJX19zZXRfYml0KFJFUVVJUkVfQVRJTV9RVUVVRSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKKwlfX3NldF9iaXQoUkVRVUlSRV9ETUEsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CisJX19zZXRfYml0KFJFUVVJUkVfU1dfU0VRTk8sICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CiAKIAkvKgogCSAqIFNldCB0aGUgcnNzaSBvZmZzZXQuCkBAIC0yMDExLDYgKzIwMTMsOSBAQAogCS50eF9sYXN0X2JlYWNvbgkJPSBydDI1MDBwY2lfdHhfbGFzdF9iZWFjb24sCiAJLnJma2lsbF9wb2xsCQk9IHJ0MngwMG1hY19yZmtpbGxfcG9sbCwKIAkuZmx1c2gJCQk9IHJ0MngwMG1hY19mbHVzaCwKKwkuc2V0X2FudGVubmEJCT0gcnQyeDAwbWFjX3NldF9hbnRlbm5hLAorCS5nZXRfYW50ZW5uYQkJPSBydDJ4MDBtYWNfZ2V0X2FudGVubmEsCisJLmdldF9yaW5ncGFyYW0JCT0gcnQyeDAwbWFjX2dldF9yaW5ncGFyYW0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0MngwMGxpYl9vcHMgcnQyNTAwcGNpX3J0MngwMF9vcHMgPSB7CkBAIC0yMDMxLDYgKzIwMzYsNyBAQAogCS5zdGFydF9xdWV1ZQkJPSBydDI1MDBwY2lfc3RhcnRfcXVldWUsCiAJLmtpY2tfcXVldWUJCT0gcnQyNTAwcGNpX2tpY2tfcXVldWUsCiAJLnN0b3BfcXVldWUJCT0gcnQyNTAwcGNpX3N0b3BfcXVldWUsCisJLmZsdXNoX3F1ZXVlCQk9IHJ0MngwMHBjaV9mbHVzaF9xdWV1ZSwKIAkud3JpdGVfdHhfZGVzYwkJPSBydDI1MDBwY2lfd3JpdGVfdHhfZGVzYywKIAkud3JpdGVfYmVhY29uCQk9IHJ0MjUwMHBjaV93cml0ZV9iZWFjb24sCiAJLmZpbGxfcnhkb25lCQk9IHJ0MjUwMHBjaV9maWxsX3J4ZG9uZSwKQEAgLTIwOTIsNyArMjA5OCw3IEBACiAgKiBSVDI1MDBwY2kgbW9kdWxlIGluZm9ybWF0aW9uLgogICovCiBzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocnQyNTAwcGNpX2RldmljZV90YWJsZSkgPSB7Ci0JeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgwMjAxKSwgUENJX0RFVklDRV9EQVRBKCZydDI1MDBwY2lfb3BzKSB9LAorCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MDIwMSkgfSwKIAl7IDAsIH0KIH07CiAKQEAgLTIxMDMsMTAgKzIxMDksMTYgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBydDI1MDBwY2lfZGV2aWNlX3RhYmxlKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAorc3RhdGljIGludCBydDI1MDBwY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsCisJCQkgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIHJ0MngwMHBjaV9wcm9iZShwY2lfZGV2LCAmcnQyNTAwcGNpX29wcyk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBydDI1MDBwY2lfZHJpdmVyID0gewogCS5uYW1lCQk9IEtCVUlMRF9NT0ROQU1FLAogCS5pZF90YWJsZQk9IHJ0MjUwMHBjaV9kZXZpY2VfdGFibGUsCi0JLnByb2JlCQk9IHJ0MngwMHBjaV9wcm9iZSwKKwkucHJvYmUJCT0gcnQyNTAwcGNpX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocnQyeDAwcGNpX3JlbW92ZSksCiAJLnN1c3BlbmQJPSBydDJ4MDBwY2lfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHJ0MngwMHBjaV9yZXN1bWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmMKaW5kZXggOTc5ZmU2NS4uMTUyMzdjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuYwpAQCAtMTUxOSw3ICsxNTE5LDcgQEAKIAkgKiBEZXRlY3QgaWYgdGhpcyBkZXZpY2UgaGFzIGFuIGhhcmR3YXJlIGNvbnRyb2xsZWQgcmFkaW8uCiAJICovCiAJaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX0hBUkRXQVJFX1JBRElPKSkKLQkJX19zZXRfYml0KENPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+ZmxhZ3MpOworCQlfX3NldF9iaXQoQ0FQQUJJTElUWV9IV19CVVRUT04sICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CiAKIAkvKgogCSAqIFJlYWQgdGhlIFJTU0kgPC0+IGRCbSBvZmZzZXQgaW5mb3JtYXRpb24uCkBAIC0xNzkwLDE0ICsxNzkwLDE0IEBACiAJLyoKIAkgKiBUaGlzIGRldmljZSByZXF1aXJlcyB0aGUgYXRpbSBxdWV1ZQogCSAqLwotCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9BVElNX1FVRVVFLCAmcnQyeDAwZGV2LT5mbGFncyk7Ci0JX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX0JFQUNPTl9HVUFSRCwgJnJ0MngwMGRldi0+ZmxhZ3MpOworCV9fc2V0X2JpdChSRVFVSVJFX0FUSU1fUVVFVUUsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CisJX19zZXRfYml0KFJFUVVJUkVfQkVBQ09OX0dVQVJELCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOwogCWlmICghbW9kcGFyYW1fbm9od2NyeXB0KSB7Ci0JCV9fc2V0X2JpdChDT05GSUdfU1VQUE9SVF9IV19DUllQVE8sICZydDJ4MDBkZXYtPmZsYWdzKTsKLQkJX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX0NPUFlfSVYsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwkJX19zZXRfYml0KENBUEFCSUxJVFlfSFdfQ1JZUFRPLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOworCQlfX3NldF9iaXQoUkVRVUlSRV9DT1BZX0lWLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOwogCX0KLQlfX3NldF9iaXQoRFJJVkVSX1NVUFBPUlRfV0FUQ0hET0csICZydDJ4MDBkZXYtPmZsYWdzKTsKLQlfX3NldF9iaXQoRFJJVkVSX1JFUVVJUkVfU1dfU0VRTk8sICZydDJ4MDBkZXYtPmZsYWdzKTsKKwlfX3NldF9iaXQoUkVRVUlSRV9TV19TRVFOTywgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKKwlfX3NldF9iaXQoUkVRVUlSRV9QU19BVVRPV0FLRSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKIAogCS8qCiAJICogU2V0IHRoZSByc3NpIG9mZnNldC4KQEAgLTE4MjQsNiArMTgyNCw5IEBACiAJLmNvbmZfdHgJCT0gcnQyeDAwbWFjX2NvbmZfdHgsCiAJLnJma2lsbF9wb2xsCQk9IHJ0MngwMG1hY19yZmtpbGxfcG9sbCwKIAkuZmx1c2gJCQk9IHJ0MngwMG1hY19mbHVzaCwKKwkuc2V0X2FudGVubmEJCT0gcnQyeDAwbWFjX3NldF9hbnRlbm5hLAorCS5nZXRfYW50ZW5uYQkJPSBydDJ4MDBtYWNfZ2V0X2FudGVubmEsCisJLmdldF9yaW5ncGFyYW0JCT0gcnQyeDAwbWFjX2dldF9yaW5ncGFyYW0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0MngwMGxpYl9vcHMgcnQyNTAwdXNiX3J0MngwMF9vcHMgPSB7CkBAIC0xOTA1LDU4ICsxOTA4LDU0IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBydDI1MDB1c2JfZGV2aWNlX3RhYmxlW10gPSB7CiAJLyogQVNVUyAqLwotCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTcwNiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyNTAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE3MDcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjUwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzA2KSB9LAorCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTcwNykgfSwKIAkvKiBCZWxraW4gKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDcwNTApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjUwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDUwZCwgMHg3MDUxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI1MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4NzA1YSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyNTAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDcwNTApIH0sCisJeyBVU0JfREVWSUNFKDB4MDUwZCwgMHg3MDUxKSB9LAogCS8qIENpc2NvIFN5c3RlbXMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxM2IxLCAweDAwMGQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjUwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTNiMSwgMHgwMDExKSwgVVNCX0RFVklDRV9EQVRBKCZydDI1MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDEzYjEsIDB4MDAxYSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyNTAwdXNiX29wcykgfSwKLQkvKiBDTmV0ICovCi0JeyBVU0JfREVWSUNFKDB4MTM3MSwgMHg5MDIyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI1MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDEzYjEsIDB4MDAwZCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxM2IxLCAweDAwMTEpIH0sCisJeyBVU0JfREVWSUNFKDB4MTNiMSwgMHgwMDFhKSB9LAogCS8qIENvbmNlcHRyb25pYyAqLwotCXsgVVNCX0RFVklDRSgweDE0YjIsIDB4M2MwMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyNTAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNGIyLCAweDNjMDIpIH0sCiAJLyogRC1MSU5LICovCi0JeyBVU0JfREVWSUNFKDB4MjAwMSwgMHgzYzAwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI1MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDIwMDEsIDB4M2MwMCkgfSwKIAkvKiBHaWdhYnl0ZSAqLwotCXsgVVNCX0RFVklDRSgweDEwNDQsIDB4ODAwMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyNTAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxMDQ0LCAweDgwMDcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjUwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTA0NCwgMHg4MDAxKSB9LAorCXsgVVNCX0RFVklDRSgweDEwNDQsIDB4ODAwNykgfSwKIAkvKiBIZXJjdWxlcyAqLwotCXsgVVNCX0RFVklDRSgweDA2ZjgsIDB4ZTAwMCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyNTAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNmY4LCAweGUwMDApIH0sCiAJLyogTWVsY28gKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAwNWUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjUwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMDY2KSwgVVNCX0RFVklDRV9EQVRBKCZydDI1MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDA2NyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyNTAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAwOGIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjUwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMDk3KSwgVVNCX0RFVklDRV9EQVRBKCZydDI1MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDA1ZSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAwNjYpIH0sCisJeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMDY3KSB9LAorCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDA4YikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAwOTcpIH0sCiAJLyogTVNJICovCi0JeyBVU0JfREVWSUNFKDB4MGRiMCwgMHg2ODYxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI1MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4Njg2NSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyNTAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDY4NjkpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjUwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRiMCwgMHg2ODYxKSB9LAorCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4Njg2NSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDY4NjkpIH0sCiAJLyogUmFsaW5rICovCi0JeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHgxNzA2KSwgVVNCX0RFVklDRV9EQVRBKCZydDI1MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MjU3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyNTAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDI1NzMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjUwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHg5MDIwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI1MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MTcwNikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDI1NzApIH0sCisJeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHg5MDIwKSB9LAogCS8qIFNhZ2VtICovCi0JeyBVU0JfREVWSUNFKDB4MDc5YiwgMHgwMDRiKSwgVVNCX0RFVklDRV9EQVRBKCZydDI1MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA3OWIsIDB4MDA0YikgfSwKIAkvKiBTaWVtZW5zICovCi0JeyBVU0JfREVWSUNFKDB4MDY4MSwgMHgzYzA2KSwgVVNCX0RFVklDRV9EQVRBKCZydDI1MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA2ODEsIDB4M2MwNikgfSwKIAkvKiBTTUMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNzA3LCAweGVlMTMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjUwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDcwNywgMHhlZTEzKSB9LAogCS8qIFNwYWlyb24gKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMTRiLCAweDAxMTApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjUwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTE0YiwgMHgwMTEwKSB9LAogCS8qIFNVUkVDT00gKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNzY5LCAweDExZjMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjUwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDc2OSwgMHgxMWYzKSB9LAogCS8qIFRydXN0ICovCi0JeyBVU0JfREVWSUNFKDB4MGViMCwgMHg5MDIwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI1MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDBlYjAsIDB4OTAyMCkgfSwKIAkvKiBWVGVjaCAqLwotCXsgVVNCX0RFVklDRSgweDBmODgsIDB4MzAxMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyNTAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZjg4LCAweDMwMTIpIH0sCiAJLyogWmlud2VsbCAqLwotCXsgVVNCX0RFVklDRSgweDVhNTcsIDB4MDI2MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyNTAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHg1YTU3LCAweDAyNjApIH0sCiAJeyAwLCB9CiB9OwogCkBAIC0xOTY3LDEwICsxOTY2LDE2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgcnQyNTAwdXNiX2RldmljZV90YWJsZSk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKK3N0YXRpYyBpbnQgcnQyNTAwdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICp1c2JfaW50ZiwKKwkJCSAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlyZXR1cm4gcnQyeDAwdXNiX3Byb2JlKHVzYl9pbnRmLCAmcnQyNTAwdXNiX29wcyk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBydDI1MDB1c2JfZHJpdmVyID0gewogCS5uYW1lCQk9IEtCVUlMRF9NT0ROQU1FLAogCS5pZF90YWJsZQk9IHJ0MjUwMHVzYl9kZXZpY2VfdGFibGUsCi0JLnByb2JlCQk9IHJ0MngwMHVzYl9wcm9iZSwKKwkucHJvYmUJCT0gcnQyNTAwdXNiX3Byb2JlLAogCS5kaXNjb25uZWN0CT0gcnQyeDAwdXNiX2Rpc2Nvbm5lY3QsCiAJLnN1c3BlbmQJPSBydDJ4MDB1c2Jfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHJ0MngwMHVzYl9yZXN1bWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwLmgKaW5kZXggOGZiYzVmYS4uZjY3YmM5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDAuaApAQCAtNTEsNiArNTEsNyBAQAogICogUkYzMzIwIDIuNEcgMVQxUihSVDMzNTAvUlQzMzcwL1JUMzM5MCkKICAqIFJGMzMyMiAyLjRHIDJUMlIoUlQzMzUyL1JUMzM3MS9SVDMzNzIvUlQzMzkxL1JUMzM5MikKICAqIFJGMzg1MyAyLjRHLzVHIDNUM1IoUlQzODgzL1JUMzU2My9SVDM1NzMvUlQzNTkzL1JUMzY2MikKKyAqIFJGNTM3MCAyLjRHIDFUMVIKICAqIFJGNTM5MCAyLjRHIDFUMVIKICAqLwogI2RlZmluZSBSRjI4MjAJCQkJMHgwMDAxCkBAIC02Niw2ICs2Nyw3IEBACiAjZGVmaW5lIFJGMzMyMAkJCQkweDAwMGIKICNkZWZpbmUgUkYzMzIyCQkJCTB4MDAwYwogI2RlZmluZSBSRjM4NTMJCQkJMHgwMDBkCisjZGVmaW5lIFJGNTM3MAkJCQkweDUzNzAKICNkZWZpbmUgUkY1MzkwCQkJCTB4NTM5MAogCiAvKgpAQCAtMjEwNCw2ICsyMTA2LDU5IEBACiAjZGVmaW5lIEVFUFJPTV9UWFBPV0VSX0JHXzIJCUZJRUxEMTYoMHhmZjAwKQogCiAvKgorICogRUVQUk9NIHRlbXBlcmF0dXJlIGNvbXBlbnNhdGlvbiBib3VuZGFyaWVzIDgwMi4xMUJHCisgKiBNSU5VUzQ6IElmIHRoZSBhY3R1YWwgVFNTSSBpcyBiZWxvdyB0aGlzIGJvdW5kYXJ5LCB0eCBwb3dlciBuZWVkcyB0byBiZQorICogICAgICAgICByZWR1Y2VkIGJ5IChhZ2Nfc3RlcCAqIC00KQorICogTUlOVVMzOiBJZiB0aGUgYWN0dWFsIFRTU0kgaXMgYmVsb3cgdGhpcyBib3VuZGFyeSwgdHggcG93ZXIgbmVlZHMgdG8gYmUKKyAqICAgICAgICAgcmVkdWNlZCBieSAoYWdjX3N0ZXAgKiAtMykKKyAqLworI2RlZmluZSBFRVBST01fVFNTSV9CT1VORF9CRzEJCTB4MDAzNworI2RlZmluZSBFRVBST01fVFNTSV9CT1VORF9CRzFfTUlOVVM0CUZJRUxEMTYoMHgwMGZmKQorI2RlZmluZSBFRVBST01fVFNTSV9CT1VORF9CRzFfTUlOVVMzCUZJRUxEMTYoMHhmZjAwKQorCisvKgorICogRUVQUk9NIHRlbXBlcmF0dXJlIGNvbXBlbnNhdGlvbiBib3VuZGFyaWVzIDgwMi4xMUJHCisgKiBNSU5VUzI6IElmIHRoZSBhY3R1YWwgVFNTSSBpcyBiZWxvdyB0aGlzIGJvdW5kYXJ5LCB0eCBwb3dlciBuZWVkcyB0byBiZQorICogICAgICAgICByZWR1Y2VkIGJ5IChhZ2Nfc3RlcCAqIC0yKQorICogTUlOVVMxOiBJZiB0aGUgYWN0dWFsIFRTU0kgaXMgYmVsb3cgdGhpcyBib3VuZGFyeSwgdHggcG93ZXIgbmVlZHMgdG8gYmUKKyAqICAgICAgICAgcmVkdWNlZCBieSAoYWdjX3N0ZXAgKiAtMSkKKyAqLworI2RlZmluZSBFRVBST01fVFNTSV9CT1VORF9CRzIJCTB4MDAzOAorI2RlZmluZSBFRVBST01fVFNTSV9CT1VORF9CRzJfTUlOVVMyCUZJRUxEMTYoMHgwMGZmKQorI2RlZmluZSBFRVBST01fVFNTSV9CT1VORF9CRzJfTUlOVVMxCUZJRUxEMTYoMHhmZjAwKQorCisvKgorICogRUVQUk9NIHRlbXBlcmF0dXJlIGNvbXBlbnNhdGlvbiBib3VuZGFyaWVzIDgwMi4xMUJHCisgKiBSRUY6IFJlZmVyZW5jZSBUU1NJIHZhbHVlLCBubyB0eCBwb3dlciBjaGFuZ2VzIG5lZWRlZAorICogUExVUzE6IElmIHRoZSBhY3R1YWwgVFNTSSBpcyBhYm92ZSB0aGlzIGJvdW5kYXJ5LCB0eCBwb3dlciBuZWVkcyB0byBiZQorICogICAgICAgIGluY3JlYXNlZCBieSAoYWdjX3N0ZXAgKiAxKQorICovCisjZGVmaW5lIEVFUFJPTV9UU1NJX0JPVU5EX0JHMwkJMHgwMDM5CisjZGVmaW5lIEVFUFJPTV9UU1NJX0JPVU5EX0JHM19SRUYJRklFTEQxNigweDAwZmYpCisjZGVmaW5lIEVFUFJPTV9UU1NJX0JPVU5EX0JHM19QTFVTMQlGSUVMRDE2KDB4ZmYwMCkKKworLyoKKyAqIEVFUFJPTSB0ZW1wZXJhdHVyZSBjb21wZW5zYXRpb24gYm91bmRhcmllcyA4MDIuMTFCRworICogUExVUzI6IElmIHRoZSBhY3R1YWwgVFNTSSBpcyBhYm92ZSB0aGlzIGJvdW5kYXJ5LCB0eCBwb3dlciBuZWVkcyB0byBiZQorICogICAgICAgIGluY3JlYXNlZCBieSAoYWdjX3N0ZXAgKiAyKQorICogUExVUzM6IElmIHRoZSBhY3R1YWwgVFNTSSBpcyBhYm92ZSB0aGlzIGJvdW5kYXJ5LCB0eCBwb3dlciBuZWVkcyB0byBiZQorICogICAgICAgIGluY3JlYXNlZCBieSAoYWdjX3N0ZXAgKiAzKQorICovCisjZGVmaW5lIEVFUFJPTV9UU1NJX0JPVU5EX0JHNAkJMHgwMDNhCisjZGVmaW5lIEVFUFJPTV9UU1NJX0JPVU5EX0JHNF9QTFVTMglGSUVMRDE2KDB4MDBmZikKKyNkZWZpbmUgRUVQUk9NX1RTU0lfQk9VTkRfQkc0X1BMVVMzCUZJRUxEMTYoMHhmZjAwKQorCisvKgorICogRUVQUk9NIHRlbXBlcmF0dXJlIGNvbXBlbnNhdGlvbiBib3VuZGFyaWVzIDgwMi4xMUJHCisgKiBQTFVTNDogSWYgdGhlIGFjdHVhbCBUU1NJIGlzIGFib3ZlIHRoaXMgYm91bmRhcnksIHR4IHBvd2VyIG5lZWRzIHRvIGJlCisgKiAgICAgICAgaW5jcmVhc2VkIGJ5IChhZ2Nfc3RlcCAqIDQpCisgKiBBR0NfU1RFUDogVGVtcGVyYXR1cmUgY29tcGVuc2F0aW9uIHN0ZXAuCisgKi8KKyNkZWZpbmUgRUVQUk9NX1RTU0lfQk9VTkRfQkc1CQkweDAwM2IKKyNkZWZpbmUgRUVQUk9NX1RTU0lfQk9VTkRfQkc1X1BMVVM0CUZJRUxEMTYoMHgwMGZmKQorI2RlZmluZSBFRVBST01fVFNTSV9CT1VORF9CRzVfQUdDX1NURVAJRklFTEQxNigweGZmMDApCisKKy8qCiAgKiBFRVBST00gVFhQT1dFUiA4MDIuMTFBCiAgKi8KICNkZWZpbmUgRUVQUk9NX1RYUE9XRVJfQTEJCTB4MDAzYwpAQCAtMjExMyw2ICsyMTY4LDU5IEBACiAjZGVmaW5lIEVFUFJPTV9UWFBPV0VSX0FfMgkJRklFTEQxNigweGZmMDApCiAKIC8qCisgKiBFRVBST00gdGVtcGVyYXR1cmUgY29tcGVuc2F0aW9uIGJvdW5kYXJpZXMgODAyLjExQQorICogTUlOVVM0OiBJZiB0aGUgYWN0dWFsIFRTU0kgaXMgYmVsb3cgdGhpcyBib3VuZGFyeSwgdHggcG93ZXIgbmVlZHMgdG8gYmUKKyAqICAgICAgICAgcmVkdWNlZCBieSAoYWdjX3N0ZXAgKiAtNCkKKyAqIE1JTlVTMzogSWYgdGhlIGFjdHVhbCBUU1NJIGlzIGJlbG93IHRoaXMgYm91bmRhcnksIHR4IHBvd2VyIG5lZWRzIHRvIGJlCisgKiAgICAgICAgIHJlZHVjZWQgYnkgKGFnY19zdGVwICogLTMpCisgKi8KKyNkZWZpbmUgRUVQUk9NX1RTU0lfQk9VTkRfQTEJCTB4MDA2YQorI2RlZmluZSBFRVBST01fVFNTSV9CT1VORF9BMV9NSU5VUzQJRklFTEQxNigweDAwZmYpCisjZGVmaW5lIEVFUFJPTV9UU1NJX0JPVU5EX0ExX01JTlVTMwlGSUVMRDE2KDB4ZmYwMCkKKworLyoKKyAqIEVFUFJPTSB0ZW1wZXJhdHVyZSBjb21wZW5zYXRpb24gYm91bmRhcmllcyA4MDIuMTFBCisgKiBNSU5VUzI6IElmIHRoZSBhY3R1YWwgVFNTSSBpcyBiZWxvdyB0aGlzIGJvdW5kYXJ5LCB0eCBwb3dlciBuZWVkcyB0byBiZQorICogICAgICAgICByZWR1Y2VkIGJ5IChhZ2Nfc3RlcCAqIC0yKQorICogTUlOVVMxOiBJZiB0aGUgYWN0dWFsIFRTU0kgaXMgYmVsb3cgdGhpcyBib3VuZGFyeSwgdHggcG93ZXIgbmVlZHMgdG8gYmUKKyAqICAgICAgICAgcmVkdWNlZCBieSAoYWdjX3N0ZXAgKiAtMSkKKyAqLworI2RlZmluZSBFRVBST01fVFNTSV9CT1VORF9BMgkJMHgwMDZiCisjZGVmaW5lIEVFUFJPTV9UU1NJX0JPVU5EX0EyX01JTlVTMglGSUVMRDE2KDB4MDBmZikKKyNkZWZpbmUgRUVQUk9NX1RTU0lfQk9VTkRfQTJfTUlOVVMxCUZJRUxEMTYoMHhmZjAwKQorCisvKgorICogRUVQUk9NIHRlbXBlcmF0dXJlIGNvbXBlbnNhdGlvbiBib3VuZGFyaWVzIDgwMi4xMUEKKyAqIFJFRjogUmVmZXJlbmNlIFRTU0kgdmFsdWUsIG5vIHR4IHBvd2VyIGNoYW5nZXMgbmVlZGVkCisgKiBQTFVTMTogSWYgdGhlIGFjdHVhbCBUU1NJIGlzIGFib3ZlIHRoaXMgYm91bmRhcnksIHR4IHBvd2VyIG5lZWRzIHRvIGJlCisgKiAgICAgICAgaW5jcmVhc2VkIGJ5IChhZ2Nfc3RlcCAqIDEpCisgKi8KKyNkZWZpbmUgRUVQUk9NX1RTU0lfQk9VTkRfQTMJCTB4MDA2YworI2RlZmluZSBFRVBST01fVFNTSV9CT1VORF9BM19SRUYJRklFTEQxNigweDAwZmYpCisjZGVmaW5lIEVFUFJPTV9UU1NJX0JPVU5EX0EzX1BMVVMxCUZJRUxEMTYoMHhmZjAwKQorCisvKgorICogRUVQUk9NIHRlbXBlcmF0dXJlIGNvbXBlbnNhdGlvbiBib3VuZGFyaWVzIDgwMi4xMUEKKyAqIFBMVVMyOiBJZiB0aGUgYWN0dWFsIFRTU0kgaXMgYWJvdmUgdGhpcyBib3VuZGFyeSwgdHggcG93ZXIgbmVlZHMgdG8gYmUKKyAqICAgICAgICBpbmNyZWFzZWQgYnkgKGFnY19zdGVwICogMikKKyAqIFBMVVMzOiBJZiB0aGUgYWN0dWFsIFRTU0kgaXMgYWJvdmUgdGhpcyBib3VuZGFyeSwgdHggcG93ZXIgbmVlZHMgdG8gYmUKKyAqICAgICAgICBpbmNyZWFzZWQgYnkgKGFnY19zdGVwICogMykKKyAqLworI2RlZmluZSBFRVBST01fVFNTSV9CT1VORF9BNAkJMHgwMDZkCisjZGVmaW5lIEVFUFJPTV9UU1NJX0JPVU5EX0E0X1BMVVMyCUZJRUxEMTYoMHgwMGZmKQorI2RlZmluZSBFRVBST01fVFNTSV9CT1VORF9BNF9QTFVTMwlGSUVMRDE2KDB4ZmYwMCkKKworLyoKKyAqIEVFUFJPTSB0ZW1wZXJhdHVyZSBjb21wZW5zYXRpb24gYm91bmRhcmllcyA4MDIuMTFBCisgKiBQTFVTNDogSWYgdGhlIGFjdHVhbCBUU1NJIGlzIGFib3ZlIHRoaXMgYm91bmRhcnksIHR4IHBvd2VyIG5lZWRzIHRvIGJlCisgKiAgICAgICAgaW5jcmVhc2VkIGJ5IChhZ2Nfc3RlcCAqIDQpCisgKiBBR0NfU1RFUDogVGVtcGVyYXR1cmUgY29tcGVuc2F0aW9uIHN0ZXAuCisgKi8KKyNkZWZpbmUgRUVQUk9NX1RTU0lfQk9VTkRfQTUJCTB4MDA2ZQorI2RlZmluZSBFRVBST01fVFNTSV9CT1VORF9BNV9QTFVTNAlGSUVMRDE2KDB4MDBmZikKKyNkZWZpbmUgRUVQUk9NX1RTU0lfQk9VTkRfQTVfQUdDX1NURVAJRklFTEQxNigweGZmMDApCisKKy8qCiAgKiBFRVBST00gVFhQT1dFUiBieSByYXRlOiB0eCBwb3dlciBwZXIgdHggcmF0ZSBmb3IgSFQyMCBtb2RlCiAgKi8KICNkZWZpbmUgRUVQUk9NX1RYUE9XRVJfQllSQVRFCQkweDAwNmYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBsaWIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBsaWIuYwppbmRleCBkYmY3NGQwLi4yYTZhYTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwbGliLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMGxpYi5jCkBAIC02ODcsNiArNjg3LDkgQEAKIAkJbWNzID0gcmVhbF9tY3M7CiAJfQogCisJaWYgKGFnZ3IgPT0gMSB8fCBhbXBkdSA9PSAxKQorCQlfX3NldF9iaXQoVFhET05FX0FNUERVLCAmdHhkZXNjLmZsYWdzKTsKKwogCS8qCiAJICogUmFsaW5rIGhhcyBhIHJldHJ5IG1lY2hhbmlzbSB1c2luZyBhIGdsb2JhbCBmYWxsYmFjawogCSAqIHRhYmxlLiBXZSBzZXR1cCB0aGlzIGZhbGxiYWNrIHRhYmxlIHRvIHRyeSB0aGUgaW1tZWRpYXRlCkBAIC03MjcsMzQgKzczMCwyMCBAQAogCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZTsKIAlzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5OwogCXUzMiByZWc7Ci0JdTggcGlkOwotCWludCBpOworCXU4IHFpZDsKIAotCS8qCi0JICogVFhfU1RBX0ZJRk8gaXMgYSBzdGFjayBvZiBYIGVudHJpZXMsIGhlbmNlIHJlYWQgVFhfU1RBX0ZJRk8KLQkgKiBhdCBtb3N0IFggdGltZXMgYW5kIGFsc28gc3RvcCBwcm9jZXNzaW5nIG9uY2UgdGhlIFRYX1NUQV9GSUZPX1ZBTElECi0JICogZmxhZyBpcyBub3Qgc2V0IGFueW1vcmUuCi0JICoKLQkgKiBUaGUgbGVnYWN5IGRyaXZlcnMgdXNlIFg9VFhfUklOR19TSVpFIGJ1dCBzdGF0ZSBpbiBhIGNvbW1lbnQKLQkgKiB0aGF0IHRoZSBUWF9TVEFfRklGTyBzdGFjayBoYXMgYSBzaXplIG9mIDE2LiBXZSBzdGljayB0byBvdXIKLQkgKiB0eCByaW5nIHNpemUgZm9yIG5vdy4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgcnQyeDAwZGV2LT5vcHMtPnR4LT5lbnRyeV9udW07IGkrKykgewotCQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYX1NUQV9GSUZPLCAmcmVnKTsKLQkJaWYgKCFydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBUWF9TVEFfRklGT19WQUxJRCkpCi0JCQlicmVhazsKKwl3aGlsZSAoa2ZpZm9fZ2V0KCZydDJ4MDBkZXYtPnR4c3RhdHVzX2ZpZm8sICZyZWcpKSB7CiAKLQkJLyoKLQkJICogU2tpcCB0aGlzIGVudHJ5IHdoZW4gaXQgY29udGFpbnMgYW4gaW52YWxpZAotCQkgKiBxdWV1ZSBpZGVudGljYXRpb24gbnVtYmVyLgorCQkvKiBUWF9TVEFfRklGT19QSURfUVVFVUUgaXMgYSAyLWJpdCBmaWVsZCwgdGh1cworCQkgKiBxaWQgaXMgZ3VhcmFudGVlZCB0byBiZSBvbmUgb2YgdGhlIFRYIFFJRHMKIAkJICovCi0JCXBpZCA9IHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIFRYX1NUQV9GSUZPX1BJRF9RVUVVRSk7Ci0JCWlmIChwaWQgPj0gUUlEX1JYKQorCQlxaWQgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBUWF9TVEFfRklGT19QSURfUVVFVUUpOworCQlxdWV1ZSA9IHJ0MngwMHF1ZXVlX2dldF90eF9xdWV1ZShydDJ4MDBkZXYsIHFpZCk7CisJCWlmICh1bmxpa2VseSghcXVldWUpKSB7CisJCQlXQVJOSU5HKHJ0MngwMGRldiwgIkdvdCBUWCBzdGF0dXMgZm9yIGFuIHVuYXZhaWxhYmxlICIKKwkJCQkJICAgInF1ZXVlICV1LCBkcm9wcGluZ1xuIiwgcWlkKTsKIAkJCWNvbnRpbnVlOwotCi0JCXF1ZXVlID0gcnQyeDAwcXVldWVfZ2V0X3R4X3F1ZXVlKHJ0MngwMGRldiwgcGlkKTsKLQkJaWYgKHVubGlrZWx5KCFxdWV1ZSkpCi0JCQljb250aW51ZTsKKwkJfQogCiAJCS8qCiAJCSAqIEluc2lkZSBlYWNoIHF1ZXVlLCB3ZSBwcm9jZXNzIGVhY2ggZW50cnkgaW4gYSBjaHJvbm9sb2dpY2FsCkBAIC05NDYsMjUgKzkzNSw0OSBAQAogCXVuc2lnbmVkIGludCBsZWRtb2RlID0KIAkJcnQyeDAwX2dldF9maWVsZDE2KGxlZC0+cnQyeDAwZGV2LT5sZWRfbWN1X3JlZywKIAkJCQkgICBFRVBST01fRlJFUV9MRURfTU9ERSk7CisJdTMyIHJlZzsKIAotCWlmIChsZWQtPnR5cGUgPT0gTEVEX1RZUEVfUkFESU8pIHsKLQkJcnQyODAwX21jdV9yZXF1ZXN0KGxlZC0+cnQyeDAwZGV2LCBNQ1VfTEVELCAweGZmLCBsZWRtb2RlLAotCQkJCSAgICAgIGVuYWJsZWQgPyAweDIwIDogMCk7Ci0JfSBlbHNlIGlmIChsZWQtPnR5cGUgPT0gTEVEX1RZUEVfQVNTT0MpIHsKLQkJcnQyODAwX21jdV9yZXF1ZXN0KGxlZC0+cnQyeDAwZGV2LCBNQ1VfTEVELCAweGZmLCBsZWRtb2RlLAotCQkJCSAgICAgIGVuYWJsZWQgPyAoYmdfbW9kZSA/IDB4NjAgOiAweGEwKSA6IDB4MjApOwotCX0gZWxzZSBpZiAobGVkLT50eXBlID09IExFRF9UWVBFX1FVQUxJVFkpIHsKLQkJLyoKLQkJICogVGhlIGJyaWdodG5lc3MgaXMgZGl2aWRlZCBpbnRvIDYgbGV2ZWxzICgwIC0gNSksCi0JCSAqIFRoZSBzcGVjcyB0ZWxsIHVzIHRoZSBmb2xsb3dpbmcgbGV2ZWxzOgotCQkgKgkwLCAxICwzLCA3LCAxNSwgMzEKLQkJICogdG8gZGV0ZXJtaW5lIHRoZSBsZXZlbCBpbiBhIHNpbXBsZSB3YXkgd2UgY2FuIHNpbXBseQotCQkgKiB3b3JrIHdpdGggYml0c2hpZnRpbmc6Ci0JCSAqCSgxIDw8IGxldmVsKSAtIDEKLQkJICovCi0JCXJ0MjgwMF9tY3VfcmVxdWVzdChsZWQtPnJ0MngwMGRldiwgTUNVX0xFRF9TVFJFTkdUSCwgMHhmZiwKLQkJCQkgICAgICAoMSA8PCBicmlnaHRuZXNzIC8gKExFRF9GVUxMIC8gNikpIC0gMSwKLQkJCQkgICAgICBwb2xhcml0eSk7CisJLyogQ2hlY2sgZm9yIFNvQyAoU09DIGRldmljZXMgZG9uJ3Qgc3VwcG9ydCBNQ1UgcmVxdWVzdHMpICovCisJaWYgKHJ0MngwMF9pc19zb2MobGVkLT5ydDJ4MDBkZXYpKSB7CisJCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKGxlZC0+cnQyeDAwZGV2LCBMRURfQ0ZHLCAmcmVnKTsKKworCQkvKiBTZXQgTEVEIFBvbGFyaXR5ICovCisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBMRURfQ0ZHX0xFRF9QT0xBUiwgcG9sYXJpdHkpOworCisJCS8qIFNldCBMRUQgTW9kZSAqLworCQlpZiAobGVkLT50eXBlID09IExFRF9UWVBFX1JBRElPKSB7CisJCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTEVEX0NGR19HX0xFRF9NT0RFLAorCQkJCQkgICBlbmFibGVkID8gMyA6IDApOworCQl9IGVsc2UgaWYgKGxlZC0+dHlwZSA9PSBMRURfVFlQRV9BU1NPQykgeworCQkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIExFRF9DRkdfWV9MRURfTU9ERSwKKwkJCQkJICAgZW5hYmxlZCA/IDMgOiAwKTsKKwkJfSBlbHNlIGlmIChsZWQtPnR5cGUgPT0gTEVEX1RZUEVfUVVBTElUWSkgeworCQkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIExFRF9DRkdfUl9MRURfTU9ERSwKKwkJCQkJICAgZW5hYmxlZCA/IDMgOiAwKTsKKwkJfQorCisJCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShsZWQtPnJ0MngwMGRldiwgTEVEX0NGRywgcmVnKTsKKworCX0gZWxzZSB7CisJCWlmIChsZWQtPnR5cGUgPT0gTEVEX1RZUEVfUkFESU8pIHsKKwkJCXJ0MjgwMF9tY3VfcmVxdWVzdChsZWQtPnJ0MngwMGRldiwgTUNVX0xFRCwgMHhmZiwgbGVkbW9kZSwKKwkJCQkJICAgICAgZW5hYmxlZCA/IDB4MjAgOiAwKTsKKwkJfSBlbHNlIGlmIChsZWQtPnR5cGUgPT0gTEVEX1RZUEVfQVNTT0MpIHsKKwkJCXJ0MjgwMF9tY3VfcmVxdWVzdChsZWQtPnJ0MngwMGRldiwgTUNVX0xFRCwgMHhmZiwgbGVkbW9kZSwKKwkJCQkJICAgICAgZW5hYmxlZCA/IChiZ19tb2RlID8gMHg2MCA6IDB4YTApIDogMHgyMCk7CisJCX0gZWxzZSBpZiAobGVkLT50eXBlID09IExFRF9UWVBFX1FVQUxJVFkpIHsKKwkJCS8qCisJCQkgKiBUaGUgYnJpZ2h0bmVzcyBpcyBkaXZpZGVkIGludG8gNiBsZXZlbHMgKDAgLSA1KSwKKwkJCSAqIFRoZSBzcGVjcyB0ZWxsIHVzIHRoZSBmb2xsb3dpbmcgbGV2ZWxzOgorCQkJICoJMCwgMSAsMywgNywgMTUsIDMxCisJCQkgKiB0byBkZXRlcm1pbmUgdGhlIGxldmVsIGluIGEgc2ltcGxlIHdheSB3ZSBjYW4gc2ltcGx5CisJCQkgKiB3b3JrIHdpdGggYml0c2hpZnRpbmc6CisJCQkgKgkoMSA8PCBsZXZlbCkgLSAxCisJCQkgKi8KKwkJCXJ0MjgwMF9tY3VfcmVxdWVzdChsZWQtPnJ0MngwMGRldiwgTUNVX0xFRF9TVFJFTkdUSCwgMHhmZiwKKwkJCQkJICAgICAgKDEgPDwgYnJpZ2h0bmVzcyAvIChMRURfRlVMTCAvIDYpKSAtIDEsCisJCQkJCSAgICAgIHBvbGFyaXR5KTsKKwkJfQogCX0KIH0KIApAQCAtMTIxOCw2ICsxMjMxLDI1IEBACiAJCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQkNOX1RJTUVfQ0ZHLCAmcmVnKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJDTl9USU1FX0NGR19UU0ZfU1lOQywgY29uZi0+c3luYyk7CiAJCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEJDTl9USU1FX0NGRywgcmVnKTsKKworCQlpZiAoY29uZi0+c3luYyA9PSBUU0ZfU1lOQ19BUF9OT05FKSB7CisJCQkvKgorCQkJICogVHVuZSBiZWFjb24gcXVldWUgdHJhbnNtaXQgcGFyYW1ldGVycyBmb3IgQVAgbW9kZQorCQkJICovCisJCQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRCVFRfU1lOQ19DRkcsICZyZWcpOworCQkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRCVFRfU1lOQ19DRkdfQkNOX0NXTUlOLCAwKTsKKwkJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUQlRUX1NZTkNfQ0ZHX0JDTl9BSUZTTiwgMSk7CisJCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVEJUVF9TWU5DX0NGR19CQ05fRVhQX1dJTiwgMzIpOworCQkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRCVFRfU1lOQ19DRkdfVEJUVF9BREpVU1QsIDApOworCQkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVEJUVF9TWU5DX0NGRywgcmVnKTsKKwkJfSBlbHNlIHsKKwkJCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVEJUVF9TWU5DX0NGRywgJnJlZyk7CisJCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVEJUVF9TWU5DX0NGR19CQ05fQ1dNSU4sIDQpOworCQkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRCVFRfU1lOQ19DRkdfQkNOX0FJRlNOLCAyKTsKKwkJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUQlRUX1NZTkNfQ0ZHX0JDTl9FWFBfV0lOLCAzMik7CisJCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVEJUVF9TWU5DX0NGR19UQlRUX0FESlVTVCwgMTYpOworCQkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVEJUVF9TWU5DX0NGRywgcmVnKTsKKwkJfQogCX0KIAogCWlmIChmbGFncyAmIENPTkZJR19VUERBVEVfTUFDKSB7CkBAIC0xNjA4LDcgKzE2NDAsNiBAQAogCQkJCQkgc3RydWN0IGNoYW5uZWxfaW5mbyAqaW5mbykKIHsKIAl1OCByZmNzcjsKLQl1MTYgZWVwcm9tOwogCiAJcnQyODAwX3JmY3NyX3dyaXRlKHJ0MngwMGRldiwgOCwgcmYtPnJmMSk7CiAJcnQyODAwX3JmY3NyX3dyaXRlKHJ0MngwMGRldiwgOSwgcmYtPnJmMyk7CkBAIC0xNjM4LDExICsxNjY5LDEwIEBACiAJCXJ0MngwMF9zZXRfZmllbGQ4KCZyZmNzciwgUkZDU1IxN19DT0RFLCBydDJ4MDBkZXYtPmZyZXFfb2Zmc2V0KTsKIAlydDI4MDBfcmZjc3Jfd3JpdGUocnQyeDAwZGV2LCAxNywgcmZjc3IpOwogCi0JcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX05JQ19DT05GMSwgJmVlcHJvbSk7CiAJaWYgKHJmLT5jaGFubmVsIDw9IDE0KSB7CiAJCWludCBpZHggPSByZi0+Y2hhbm5lbC0xOwogCi0JCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fTklDX0NPTkYxX0JUX0NPRVhJU1QpKSB7CisJCWlmICh0ZXN0X2JpdChDQVBBQklMSVRZX0JUX0NPRVhJU1QsICZydDJ4MDBkZXYtPmNhcF9mbGFncykpIHsKIAkJCWlmIChydDJ4MDBfcnRfcmV2X2d0ZShydDJ4MDBkZXYsIFJUNTM5MCwgUkVWX1JUNTM5MEYpKSB7CiAJCQkJLyogcjU1L3I1OSB2YWx1ZSBhcnJheSBvZiBjaGFubmVsIDF+MTQgKi8KIAkJCQlzdGF0aWMgY29uc3QgY2hhciByNTVfYnRfcmV2W10gPSB7MHg4MywgMHg4MywKQEAgLTE3MjEsNyArMTc1MSw4IEBACiAJICAgIHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMzA1MikgfHwKIAkgICAgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYzMzIwKSkKIAkJcnQyODAwX2NvbmZpZ19jaGFubmVsX3JmM3h4eChydDJ4MDBkZXYsIGNvbmYsIHJmLCBpbmZvKTsKLQllbHNlIGlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjUzOTApKQorCWVsc2UgaWYgKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGNTM3MCkgfHwKKwkJIHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGNTM5MCkpCiAJCXJ0MjgwMF9jb25maWdfY2hhbm5lbF9yZjUzeHgocnQyeDAwZGV2LCBjb25mLCByZiwgaW5mbyk7CiAJZWxzZQogCQlydDI4MDBfY29uZmlnX2NoYW5uZWxfcmYyeHh4KHJ0MngwMGRldiwgY29uZiwgcmYsIGluZm8pOwpAQCAtMTczNiw4ICsxNzY3LDggQEAKIAogCWlmIChyZi0+Y2hhbm5lbCA8PSAxNCkgewogCQlpZiAoIXJ0MngwMF9ydChydDJ4MDBkZXYsIFJUNTM5MCkpIHsKLQkJCWlmICh0ZXN0X2JpdChDT05GSUdfRVhURVJOQUxfTE5BX0JHLAotCQkJCSAgICAgJnJ0MngwMGRldi0+ZmxhZ3MpKSB7CisJCQlpZiAodGVzdF9iaXQoQ0FQQUJJTElUWV9FWFRFUk5BTF9MTkFfQkcsCisJCQkJICAgICAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpKSB7CiAJCQkJcnQyODAwX2JicF93cml0ZShydDJ4MDBkZXYsIDgyLCAweDYyKTsKIAkJCQlydDI4MDBfYmJwX3dyaXRlKHJ0MngwMGRldiwgNzUsIDB4NDYpOwogCQkJfSBlbHNlIHsKQEAgLTE3NDgsNyArMTc3OSw3IEBACiAJfSBlbHNlIHsKIAkJcnQyODAwX2JicF93cml0ZShydDJ4MDBkZXYsIDgyLCAweGYyKTsKIAotCQlpZiAodGVzdF9iaXQoQ09ORklHX0VYVEVSTkFMX0xOQV9BLCAmcnQyeDAwZGV2LT5mbGFncykpCisJCWlmICh0ZXN0X2JpdChDQVBBQklMSVRZX0VYVEVSTkFMX0xOQV9BLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpKQogCQkJcnQyODAwX2JicF93cml0ZShydDJ4MDBkZXYsIDc1LCAweDQ2KTsKIAkJZWxzZQogCQkJcnQyODAwX2JicF93cml0ZShydDJ4MDBkZXYsIDc1LCAweDUwKTsKQEAgLTE4MTMsMTcgKzE4NDQsMTMxIEBACiAJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBDSF9CVVNZX1NUQV9TRUMsICZyZWcpOwogfQogCitzdGF0aWMgaW50IHJ0MjgwMF9nZXRfZ2Fpbl9jYWxpYnJhdGlvbl9kZWx0YShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCXU4IHRzc2lfYm91bmRzWzldOworCXU4IGN1cnJlbnRfdHNzaTsKKwl1MTYgZWVwcm9tOworCXU4IHN0ZXA7CisJaW50IGk7CisKKwkvKgorCSAqIFJlYWQgVFNTSSBib3VuZGFyaWVzIGZvciB0ZW1wZXJhdHVyZSBjb21wZW5zYXRpb24gZnJvbQorCSAqIHRoZSBFRVBST00uCisJICoKKwkgKiBBcnJheSBpZHggICAgICAgICAgICAgICAwICAgIDEgICAgMiAgICAzICAgIDQgICAgNSAgICA2ICAgIDcgICAgOAorCSAqIE1hdGNoaW5nIERlbHRhIHZhbHVlICAgLTQgICAtMyAgIC0yICAgLTEgICAgMCAgICsxICAgKzIgICArMyAgICs0CisJICogRXhhbXBsZSBUU1NJIGJvdW5kcyAgMHhGMCAweEQwIDB4QjUgMHhBMCAweDg4IDB4NDUgMHgyNSAweDE1IDB4MDAKKwkgKi8KKwlpZiAocnQyeDAwZGV2LT5jdXJyX2JhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgeworCQlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fVFNTSV9CT1VORF9CRzEsICZlZXByb20pOworCQl0c3NpX2JvdW5kc1swXSA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sCisJCQkJCUVFUFJPTV9UU1NJX0JPVU5EX0JHMV9NSU5VUzQpOworCQl0c3NpX2JvdW5kc1sxXSA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sCisJCQkJCUVFUFJPTV9UU1NJX0JPVU5EX0JHMV9NSU5VUzMpOworCisJCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9UU1NJX0JPVU5EX0JHMiwgJmVlcHJvbSk7CisJCXRzc2lfYm91bmRzWzJdID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwKKwkJCQkJRUVQUk9NX1RTU0lfQk9VTkRfQkcyX01JTlVTMik7CisJCXRzc2lfYm91bmRzWzNdID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwKKwkJCQkJRUVQUk9NX1RTU0lfQk9VTkRfQkcyX01JTlVTMSk7CisKKwkJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX1RTU0lfQk9VTkRfQkczLCAmZWVwcm9tKTsKKwkJdHNzaV9ib3VuZHNbNF0gPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLAorCQkJCQlFRVBST01fVFNTSV9CT1VORF9CRzNfUkVGKTsKKwkJdHNzaV9ib3VuZHNbNV0gPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLAorCQkJCQlFRVBST01fVFNTSV9CT1VORF9CRzNfUExVUzEpOworCisJCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9UU1NJX0JPVU5EX0JHNCwgJmVlcHJvbSk7CisJCXRzc2lfYm91bmRzWzZdID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwKKwkJCQkJRUVQUk9NX1RTU0lfQk9VTkRfQkc0X1BMVVMyKTsKKwkJdHNzaV9ib3VuZHNbN10gPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLAorCQkJCQlFRVBST01fVFNTSV9CT1VORF9CRzRfUExVUzMpOworCisJCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9UU1NJX0JPVU5EX0JHNSwgJmVlcHJvbSk7CisJCXRzc2lfYm91bmRzWzhdID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwKKwkJCQkJRUVQUk9NX1RTU0lfQk9VTkRfQkc1X1BMVVM0KTsKKworCQlzdGVwID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwKKwkJCQkJICBFRVBST01fVFNTSV9CT1VORF9CRzVfQUdDX1NURVApOworCX0gZWxzZSB7CisJCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9UU1NJX0JPVU5EX0ExLCAmZWVwcm9tKTsKKwkJdHNzaV9ib3VuZHNbMF0gPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLAorCQkJCQlFRVBST01fVFNTSV9CT1VORF9BMV9NSU5VUzQpOworCQl0c3NpX2JvdW5kc1sxXSA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sCisJCQkJCUVFUFJPTV9UU1NJX0JPVU5EX0ExX01JTlVTMyk7CisKKwkJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX1RTU0lfQk9VTkRfQTIsICZlZXByb20pOworCQl0c3NpX2JvdW5kc1syXSA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sCisJCQkJCUVFUFJPTV9UU1NJX0JPVU5EX0EyX01JTlVTMik7CisJCXRzc2lfYm91bmRzWzNdID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwKKwkJCQkJRUVQUk9NX1RTU0lfQk9VTkRfQTJfTUlOVVMxKTsKKworCQlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fVFNTSV9CT1VORF9BMywgJmVlcHJvbSk7CisJCXRzc2lfYm91bmRzWzRdID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwKKwkJCQkJRUVQUk9NX1RTU0lfQk9VTkRfQTNfUkVGKTsKKwkJdHNzaV9ib3VuZHNbNV0gPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLAorCQkJCQlFRVBST01fVFNTSV9CT1VORF9BM19QTFVTMSk7CisKKwkJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX1RTU0lfQk9VTkRfQTQsICZlZXByb20pOworCQl0c3NpX2JvdW5kc1s2XSA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sCisJCQkJCUVFUFJPTV9UU1NJX0JPVU5EX0E0X1BMVVMyKTsKKwkJdHNzaV9ib3VuZHNbN10gPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLAorCQkJCQlFRVBST01fVFNTSV9CT1VORF9BNF9QTFVTMyk7CisKKwkJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX1RTU0lfQk9VTkRfQTUsICZlZXByb20pOworCQl0c3NpX2JvdW5kc1s4XSA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sCisJCQkJCUVFUFJPTV9UU1NJX0JPVU5EX0E1X1BMVVM0KTsKKworCQlzdGVwID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwKKwkJCQkJICBFRVBST01fVFNTSV9CT1VORF9BNV9BR0NfU1RFUCk7CisJfQorCisJLyoKKwkgKiBDaGVjayBpZiB0ZW1wZXJhdHVyZSBjb21wZW5zYXRpb24gaXMgc3VwcG9ydGVkLgorCSAqLworCWlmICh0c3NpX2JvdW5kc1s0XSA9PSAweGZmKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogUmVhZCBjdXJyZW50IFRTU0kgKEJCUCA0OSkuCisJICovCisJcnQyODAwX2JicF9yZWFkKHJ0MngwMGRldiwgNDksICZjdXJyZW50X3Rzc2kpOworCisJLyoKKwkgKiBDb21wYXJlIFRTU0kgdmFsdWUgKEJCUDQ5KSB3aXRoIHRoZSBjb21wZW5zYXRpb24gYm91bmRhcmllcworCSAqIGZyb20gdGhlIEVFUFJPTSBhbmQgaW5jcmVhc2Ugb3IgZGVjcmVhc2UgdHggcG93ZXIuCisJICovCisJZm9yIChpID0gMDsgaSA8PSAzOyBpKyspIHsKKwkJaWYgKGN1cnJlbnRfdHNzaSA+IHRzc2lfYm91bmRzW2ldKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPT0gNCkgeworCQlmb3IgKGkgPSA4OyBpID49IDU7IGktLSkgeworCQkJaWYgKGN1cnJlbnRfdHNzaSA8IHRzc2lfYm91bmRzW2ldKQorCQkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIChpIC0gNCkgKiBzdGVwOworfQorCiBzdGF0aWMgaW50IHJ0MjgwMF9nZXRfdHhwb3dlcl9id19jb21wKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkJICAgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQogewogCXUxNiBlZXByb207CiAJdTggY29tcF9lbjsKIAl1OCBjb21wX3R5cGU7Ci0JaW50IGNvbXBfdmFsdWU7CisJaW50IGNvbXBfdmFsdWUgPSAwOwogCiAJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX1RYUE9XRVJfREVMVEEsICZlZXByb20pOwogCi0JaWYgKGVlcHJvbSA9PSAweGZmZmYpCisJLyoKKwkgKiBIVDQwIGNvbXBlbnNhdGlvbiBub3QgcmVxdWlyZWQuCisJICovCisJaWYgKGVlcHJvbSA9PSAweGZmZmYgfHwKKwkgICAgIXRlc3RfYml0KENPTkZJR19DSEFOTkVMX0hUNDAsICZydDJ4MDBkZXYtPmZsYWdzKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CkBAIC0xODUzLDExICsxOTk4LDkgQEAKIAlyZXR1cm4gY29tcF92YWx1ZTsKIH0KIAotc3RhdGljIHU4IHJ0MjgwMF9jb21wZXNhdGVfdHhwb3dlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJCSAgICAgaW50IGlzX3JhdGVfYiwKLQkJCQkgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKLQkJCQkgICAgIGludCBwb3dlcl9sZXZlbCwKLQkJCQkgICAgIHU4IHR4cG93ZXIpCitzdGF0aWMgdTggcnQyODAwX2NvbXBlbnNhdGVfdHhwb3dlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBpbnQgaXNfcmF0ZV9iLAorCQkJCSAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwgaW50IHBvd2VyX2xldmVsLAorCQkJCSAgIHU4IHR4cG93ZXIsIGludCBkZWx0YSkKIHsKIAl1MzIgcmVnOwogCXUxNiBlZXByb207CkBAIC0xODY1LDE1ICsyMDA4LDExIEBACiAJdTggZWlycF90eHBvd2VyOwogCXU4IGVpcnBfdHhwb3dlcl9jcml0ZXJpb247CiAJdTggcmVnX2xpbWl0OwotCWludCBid19jb21wID0gMDsKIAogCWlmICghKChiYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopICYmIGlzX3JhdGVfYikpCiAJCXJldHVybiB0eHBvd2VyOwogCi0JaWYgKHRlc3RfYml0KENPTkZJR19DSEFOTkVMX0hUNDAsICZydDJ4MDBkZXYtPmZsYWdzKSkKLQkJYndfY29tcCA9IHJ0MjgwMF9nZXRfdHhwb3dlcl9id19jb21wKHJ0MngwMGRldiwgYmFuZCk7Ci0KLQlpZiAodGVzdF9iaXQoQ09ORklHX1NVUFBPUlRfUE9XRVJfTElNSVQsICZydDJ4MDBkZXYtPmZsYWdzKSkgeworCWlmICh0ZXN0X2JpdChDQVBBQklMSVRZX1BPV0VSX0xJTUlULCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpKSB7CiAJCS8qCiAJCSAqIENoZWNrIGlmIGVpcnAgdHhwb3dlciBleGNlZWQgdHhwb3dlcl9saW1pdC4KIAkJICogV2UgdXNlIE9GRE0gNk0gYXMgY3JpdGVyaW9uIGFuZCBpdHMgZWlycCB0eHBvd2VyCkBAIC0xODk1LDE4ICsyMDM0LDE5IEBACiAJCQkJCQkgRUVQUk9NX0VJUlBfTUFYX1RYX1BPV0VSXzVHSFopOwogCiAJCWVpcnBfdHhwb3dlciA9IGVpcnBfdHhwb3dlcl9jcml0ZXJpb24gKyAodHhwb3dlciAtIGNyaXRlcmlvbikgKwotCQkJCSAgICAgICAoaXNfcmF0ZV9iID8gNCA6IDApICsgYndfY29tcDsKKwkJCSAgICAgICAoaXNfcmF0ZV9iID8gNCA6IDApICsgZGVsdGE7CiAKIAkJcmVnX2xpbWl0ID0gKGVpcnBfdHhwb3dlciA+IHBvd2VyX2xldmVsKSA/CiAJCQkJCShlaXJwX3R4cG93ZXIgLSBwb3dlcl9sZXZlbCkgOiAwOwogCX0gZWxzZQogCQlyZWdfbGltaXQgPSAwOwogCi0JcmV0dXJuIHR4cG93ZXIgKyBid19jb21wIC0gcmVnX2xpbWl0OworCXJldHVybiB0eHBvd2VyICsgZGVsdGEgLSByZWdfbGltaXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0MjgwMF9jb25maWdfdHhwb3dlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJCSAgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKQorCQkJCSAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLAorCQkJCSAgaW50IHBvd2VyX2xldmVsKQogewogCXU4IHR4cG93ZXI7CiAJdTE2IGVlcHJvbTsKQEAgLTE5MTQsOCArMjA1NCwxNyBAQAogCXUzMiByZWc7CiAJdTggcjE7CiAJdTMyIG9mZnNldDsKLQllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQgPSBjb25mLT5jaGFubmVsLT5iYW5kOwotCWludCBwb3dlcl9sZXZlbCA9IGNvbmYtPnBvd2VyX2xldmVsOworCWludCBkZWx0YTsKKworCS8qCisJICogQ2FsY3VsYXRlIEhUNDAgY29tcGVuc2F0aW9uIGRlbHRhCisJICovCisJZGVsdGEgPSBydDI4MDBfZ2V0X3R4cG93ZXJfYndfY29tcChydDJ4MDBkZXYsIGJhbmQpOworCisJLyoKKwkgKiBjYWxjdWxhdGUgdGVtcGVyYXR1cmUgY29tcGVuc2F0aW9uIGRlbHRhCisJICovCisJZGVsdGEgKz0gcnQyODAwX2dldF9nYWluX2NhbGlicmF0aW9uX2RlbHRhKHJ0MngwMGRldik7CiAKIAkvKgogCSAqIHNldCB0byBub3JtYWwgYmJwIHR4IHBvd2VyIGNvbnRyb2wgbW9kZTogKy8tIDBkQm0KQEAgLTE5NDQsOCArMjA5Myw4IEBACiAJCSAqLwogCQl0eHBvd2VyID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwKIAkJCQkJICAgICBFRVBST01fVFhQT1dFUl9CWVJBVEVfUkFURTApOwotCQl0eHBvd2VyID0gcnQyODAwX2NvbXBlc2F0ZV90eHBvd2VyKHJ0MngwMGRldiwgaXNfcmF0ZV9iLCBiYW5kLAotCQkJCQkgICAgIHBvd2VyX2xldmVsLCB0eHBvd2VyKTsKKwkJdHhwb3dlciA9IHJ0MjgwMF9jb21wZW5zYXRlX3R4cG93ZXIocnQyeDAwZGV2LCBpc19yYXRlX2IsIGJhbmQsCisJCQkJCSAgICAgcG93ZXJfbGV2ZWwsIHR4cG93ZXIsIGRlbHRhKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX1BXUl9DRkdfUkFURTAsIHR4cG93ZXIpOwogCiAJCS8qCkBAIC0xOTU1LDggKzIxMDQsOCBAQAogCQkgKi8KIAkJdHhwb3dlciA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sCiAJCQkJCSAgICAgRUVQUk9NX1RYUE9XRVJfQllSQVRFX1JBVEUxKTsKLQkJdHhwb3dlciA9IHJ0MjgwMF9jb21wZXNhdGVfdHhwb3dlcihydDJ4MDBkZXYsIGlzX3JhdGVfYiwgYmFuZCwKLQkJCQkJICAgICBwb3dlcl9sZXZlbCwgdHhwb3dlcik7CisJCXR4cG93ZXIgPSBydDI4MDBfY29tcGVuc2F0ZV90eHBvd2VyKHJ0MngwMGRldiwgaXNfcmF0ZV9iLCBiYW5kLAorCQkJCQkgICAgIHBvd2VyX2xldmVsLCB0eHBvd2VyLCBkZWx0YSk7CiAJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9QV1JfQ0ZHX1JBVEUxLCB0eHBvd2VyKTsKIAogCQkvKgpAQCAtMTk2Niw4ICsyMTE1LDggQEAKIAkJICovCiAJCXR4cG93ZXIgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLAogCQkJCQkgICAgIEVFUFJPTV9UWFBPV0VSX0JZUkFURV9SQVRFMik7Ci0JCXR4cG93ZXIgPSBydDI4MDBfY29tcGVzYXRlX3R4cG93ZXIocnQyeDAwZGV2LCBpc19yYXRlX2IsIGJhbmQsCi0JCQkJCSAgICAgcG93ZXJfbGV2ZWwsIHR4cG93ZXIpOworCQl0eHBvd2VyID0gcnQyODAwX2NvbXBlbnNhdGVfdHhwb3dlcihydDJ4MDBkZXYsIGlzX3JhdGVfYiwgYmFuZCwKKwkJCQkJICAgICBwb3dlcl9sZXZlbCwgdHhwb3dlciwgZGVsdGEpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfUFdSX0NGR19SQVRFMiwgdHhwb3dlcik7CiAKIAkJLyoKQEAgLTE5NzcsOCArMjEyNiw4IEBACiAJCSAqLwogCQl0eHBvd2VyID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwKIAkJCQkJICAgICBFRVBST01fVFhQT1dFUl9CWVJBVEVfUkFURTMpOwotCQl0eHBvd2VyID0gcnQyODAwX2NvbXBlc2F0ZV90eHBvd2VyKHJ0MngwMGRldiwgaXNfcmF0ZV9iLCBiYW5kLAotCQkJCQkgICAgIHBvd2VyX2xldmVsLCB0eHBvd2VyKTsKKwkJdHhwb3dlciA9IHJ0MjgwMF9jb21wZW5zYXRlX3R4cG93ZXIocnQyeDAwZGV2LCBpc19yYXRlX2IsIGJhbmQsCisJCQkJCSAgICAgcG93ZXJfbGV2ZWwsIHR4cG93ZXIsIGRlbHRhKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX1BXUl9DRkdfUkFURTMsIHR4cG93ZXIpOwogCiAJCS8qIHJlYWQgdGhlIG5leHQgZm91ciB0eHBvd2VyIHZhbHVlcyAqLwpAQCAtMTk5Myw4ICsyMTQyLDggQEAKIAkJICovCiAJCXR4cG93ZXIgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLAogCQkJCQkgICAgIEVFUFJPTV9UWFBPV0VSX0JZUkFURV9SQVRFMCk7Ci0JCXR4cG93ZXIgPSBydDI4MDBfY29tcGVzYXRlX3R4cG93ZXIocnQyeDAwZGV2LCBpc19yYXRlX2IsIGJhbmQsCi0JCQkJCSAgICAgcG93ZXJfbGV2ZWwsIHR4cG93ZXIpOworCQl0eHBvd2VyID0gcnQyODAwX2NvbXBlbnNhdGVfdHhwb3dlcihydDJ4MDBkZXYsIGlzX3JhdGVfYiwgYmFuZCwKKwkJCQkJICAgICBwb3dlcl9sZXZlbCwgdHhwb3dlciwgZGVsdGEpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfUFdSX0NGR19SQVRFNCwgdHhwb3dlcik7CiAKIAkJLyoKQEAgLTIwMDQsOCArMjE1Myw4IEBACiAJCSAqLwogCQl0eHBvd2VyID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwKIAkJCQkJICAgICBFRVBST01fVFhQT1dFUl9CWVJBVEVfUkFURTEpOwotCQl0eHBvd2VyID0gcnQyODAwX2NvbXBlc2F0ZV90eHBvd2VyKHJ0MngwMGRldiwgaXNfcmF0ZV9iLCBiYW5kLAotCQkJCQkgICAgIHBvd2VyX2xldmVsLCB0eHBvd2VyKTsKKwkJdHhwb3dlciA9IHJ0MjgwMF9jb21wZW5zYXRlX3R4cG93ZXIocnQyeDAwZGV2LCBpc19yYXRlX2IsIGJhbmQsCisJCQkJCSAgICAgcG93ZXJfbGV2ZWwsIHR4cG93ZXIsIGRlbHRhKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX1BXUl9DRkdfUkFURTUsIHR4cG93ZXIpOwogCiAJCS8qCkBAIC0yMDE1LDggKzIxNjQsOCBAQAogCQkgKi8KIAkJdHhwb3dlciA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sCiAJCQkJCSAgICAgRUVQUk9NX1RYUE9XRVJfQllSQVRFX1JBVEUyKTsKLQkJdHhwb3dlciA9IHJ0MjgwMF9jb21wZXNhdGVfdHhwb3dlcihydDJ4MDBkZXYsIGlzX3JhdGVfYiwgYmFuZCwKLQkJCQkJICAgICBwb3dlcl9sZXZlbCwgdHhwb3dlcik7CisJCXR4cG93ZXIgPSBydDI4MDBfY29tcGVuc2F0ZV90eHBvd2VyKHJ0MngwMGRldiwgaXNfcmF0ZV9iLCBiYW5kLAorCQkJCQkgICAgIHBvd2VyX2xldmVsLCB0eHBvd2VyLCBkZWx0YSk7CiAJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9QV1JfQ0ZHX1JBVEU2LCB0eHBvd2VyKTsKIAogCQkvKgpAQCAtMjAyNiw4ICsyMTc1LDggQEAKIAkJICovCiAJCXR4cG93ZXIgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLAogCQkJCQkgICAgIEVFUFJPTV9UWFBPV0VSX0JZUkFURV9SQVRFMyk7Ci0JCXR4cG93ZXIgPSBydDI4MDBfY29tcGVzYXRlX3R4cG93ZXIocnQyeDAwZGV2LCBpc19yYXRlX2IsIGJhbmQsCi0JCQkJCSAgICAgcG93ZXJfbGV2ZWwsIHR4cG93ZXIpOworCQl0eHBvd2VyID0gcnQyODAwX2NvbXBlbnNhdGVfdHhwb3dlcihydDJ4MDBkZXYsIGlzX3JhdGVfYiwgYmFuZCwKKwkJCQkJICAgICBwb3dlcl9sZXZlbCwgdHhwb3dlciwgZGVsdGEpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfUFdSX0NGR19SQVRFNywgdHhwb3dlcik7CiAKIAkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgb2Zmc2V0LCByZWcpOwpAQCAtMjAzNyw2ICsyMTg2LDEzIEBACiAJfQogfQogCit2b2lkIHJ0MjgwMF9nYWluX2NhbGlicmF0aW9uKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJcnQyODAwX2NvbmZpZ190eHBvd2VyKHJ0MngwMGRldiwgcnQyeDAwZGV2LT5jdXJyX2JhbmQsCisJCQkgICAgICBydDJ4MDBkZXYtPnR4X3Bvd2VyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJ0MjgwMF9nYWluX2NhbGlicmF0aW9uKTsKKwogc3RhdGljIHZvaWQgcnQyODAwX2NvbmZpZ19yZXRyeV9saW1pdChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJCSAgICAgIHN0cnVjdCBydDJ4MDBsaWJfY29uZiAqbGliY29uZikKIHsKQEAgLTIwOTAsMTAgKzIyNDYsMTIgQEAKIAlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCkgewogCQlydDI4MDBfY29uZmlnX2NoYW5uZWwocnQyeDAwZGV2LCBsaWJjb25mLT5jb25mLAogCQkJCSAgICAgICZsaWJjb25mLT5yZiwgJmxpYmNvbmYtPmNoYW5uZWwpOwotCQlydDI4MDBfY29uZmlnX3R4cG93ZXIocnQyeDAwZGV2LCBsaWJjb25mLT5jb25mKTsKKwkJcnQyODAwX2NvbmZpZ190eHBvd2VyKHJ0MngwMGRldiwgbGliY29uZi0+Y29uZi0+Y2hhbm5lbC0+YmFuZCwKKwkJCQkgICAgICBsaWJjb25mLT5jb25mLT5wb3dlcl9sZXZlbCk7CiAJfQogCWlmIChmbGFncyAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QT1dFUikKLQkJcnQyODAwX2NvbmZpZ190eHBvd2VyKHJ0MngwMGRldiwgbGliY29uZi0+Y29uZik7CisJCXJ0MjgwMF9jb25maWdfdHhwb3dlcihydDJ4MDBkZXYsIGxpYmNvbmYtPmNvbmYtPmNoYW5uZWwtPmJhbmQsCisJCQkJICAgICAgbGliY29uZi0+Y29uZi0+cG93ZXJfbGV2ZWwpOwogCWlmIChmbGFncyAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9SRVRSWV9MSU1JVFMpCiAJCXJ0MjgwMF9jb25maWdfcmV0cnlfbGltaXQocnQyeDAwZGV2LCBsaWJjb25mKTsKIAlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpCkBAIC0yMjU0LDcgKzI0MTIsNyBAQAogCX0gZWxzZSBpZiAocnQyODAwX2lzXzMwNXhfc29jKHJ0MngwMGRldikpIHsKIAkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfU1dfQ0ZHMCwgMHgwMDAwMDQwMCk7CiAJCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX1NXX0NGRzEsIDB4MDAwMDAwMDApOwotCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9TV19DRkcyLCAweDAwMDAwMDFmKTsKKwkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfU1dfQ0ZHMiwgMHgwMDAwMDAzMCk7CiAJfSBlbHNlIGlmIChydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDUzOTApKSB7CiAJCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX1NXX0NGRzAsIDB4MDAwMDA0MDQpOwogCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9TV19DRkcxLCAweDAwMDgwNjA2KTsKQEAgLTI3NTgsOCArMjkxNiw3IEBACiAJCWFudCA9IChkaXZfbW9kZSA9PSAzKSA/IDEgOiAwOwogCiAJCS8qIGNoZWNrIGlmIHRoaXMgaXMgYSBCbHVldG9vdGggY29tYm8gY2FyZCAqLwotCQlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fTklDX0NPTkYxLCAmZWVwcm9tKTsKLQkJaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9OSUNfQ09ORjFfQlRfQ09FWElTVCkpIHsKKwkJaWYgKHRlc3RfYml0KENBUEFCSUxJVFlfQlRfQ09FWElTVCwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkgewogCQkJdTMyIHJlZzsKIAogCQkJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBHUElPX0NUUkxfQ0ZHLCAmcmVnKTsKQEAgLTMxNTUsOCArMzMxMiw4IEBACiAJCSAgICBydDJ4MDBfcnRfcmV2X2x0KHJ0MngwMGRldiwgUlQzMDcxLCBSRVZfUlQzMDcxRSkgfHwKIAkJICAgIHJ0MngwMF9ydF9yZXZfbHQocnQyeDAwZGV2LCBSVDMwOTAsIFJFVl9SVDMwOTBFKSB8fAogCQkgICAgcnQyeDAwX3J0X3Jldl9sdChydDJ4MDBkZXYsIFJUMzM5MCwgUkVWX1JUMzM5MEUpKSB7Ci0JCQlpZiAoIXRlc3RfYml0KENPTkZJR19FWFRFUk5BTF9MTkFfQkcsCi0JCQkJICAgICAgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCQkJaWYgKCF0ZXN0X2JpdChDQVBBQklMSVRZX0VYVEVSTkFMX0xOQV9CRywKKwkJCQkgICAgICAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpKQogCQkJCXJ0MngwMF9zZXRfZmllbGQ4KCZyZmNzciwgUkZDU1IxN19SLCAxKTsKIAkJfQogCQlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fVFhNSVhFUl9HQUlOX0JHLCAmZWVwcm9tKTsKQEAgLTM1MzAsNiArMzY4Nyw3IEBACiAJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjMwMjIpICYmCiAJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjMwNTIpICYmCiAJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjMzMjApICYmCisJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjUzNzApICYmCiAJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjUzOTApKSB7CiAJCUVSUk9SKHJ0MngwMGRldiwgIkludmFsaWQgUkYgY2hpcHNldCBkZXRlY3RlZC5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTM1NjgsMjYgKzM3MjYsMzAgQEAKIAl9CiAKIAkvKgotCSAqIFJlYWQgZnJlcXVlbmN5IG9mZnNldCBhbmQgUkYgcHJvZ3JhbW1pbmcgc2VxdWVuY2UuCisJICogRGV0ZXJtaW5lIGV4dGVybmFsIExOQSBpbmZvcm1hdGlvbnMuCiAJICovCi0JcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX0ZSRVEsICZlZXByb20pOwotCXJ0MngwMGRldi0+ZnJlcV9vZmZzZXQgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fRlJFUV9PRkZTRVQpOwotCi0JLyoKLQkgKiBSZWFkIGV4dGVybmFsIExOQSBpbmZvcm1hdGlvbnMuCi0JICovCi0JcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX05JQ19DT05GMSwgJmVlcHJvbSk7Ci0KIAlpZiAocnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX05JQ19DT05GMV9FWFRFUk5BTF9MTkFfNUcpKQotCQlfX3NldF9iaXQoQ09ORklHX0VYVEVSTkFMX0xOQV9BLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJCV9fc2V0X2JpdChDQVBBQklMSVRZX0VYVEVSTkFMX0xOQV9BLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOwogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fTklDX0NPTkYxX0VYVEVSTkFMX0xOQV8yRykpCi0JCV9fc2V0X2JpdChDT05GSUdfRVhURVJOQUxfTE5BX0JHLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJCV9fc2V0X2JpdChDQVBBQklMSVRZX0VYVEVSTkFMX0xOQV9CRywgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKIAogCS8qCiAJICogRGV0ZWN0IGlmIHRoaXMgZGV2aWNlIGhhcyBhbiBoYXJkd2FyZSBjb250cm9sbGVkIHJhZGlvLgogCSAqLwogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fTklDX0NPTkYxX0hXX1JBRElPKSkKLQkJX19zZXRfYml0KENPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+ZmxhZ3MpOworCQlfX3NldF9iaXQoQ0FQQUJJTElUWV9IV19CVVRUT04sICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CisKKwkvKgorCSAqIERldGVjdCBpZiB0aGlzIGRldmljZSBoYXMgQmx1ZXRvb3RoIGNvLWV4aXN0ZW5jZS4KKwkgKi8KKwlpZiAocnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX05JQ19DT05GMV9CVF9DT0VYSVNUKSkKKwkJX19zZXRfYml0KENBUEFCSUxJVFlfQlRfQ09FWElTVCwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKKworCS8qCisJICogUmVhZCBmcmVxdWVuY3kgb2Zmc2V0IGFuZCBSRiBwcm9ncmFtbWluZyBzZXF1ZW5jZS4KKwkgKi8KKwlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fRlJFUSwgJmVlcHJvbSk7CisJcnQyeDAwZGV2LT5mcmVxX29mZnNldCA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9GUkVRX09GRlNFVCk7CiAKIAkvKgogCSAqIFN0b3JlIGxlZCBzZXR0aW5ncywgZm9yIGNvcnJlY3QgbGVkIGJlaGF2aW91ci4KQEAgLTM1OTcsNyArMzc1OSw3IEBACiAJcnQyODAwX2luaXRfbGVkKHJ0MngwMGRldiwgJnJ0MngwMGRldi0+bGVkX2Fzc29jLCBMRURfVFlQRV9BU1NPQyk7CiAJcnQyODAwX2luaXRfbGVkKHJ0MngwMGRldiwgJnJ0MngwMGRldi0+bGVkX3F1YWwsIExFRF9UWVBFX1FVQUxJVFkpOwogCi0JcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX0ZSRVEsICZydDJ4MDBkZXYtPmxlZF9tY3VfcmVnKTsKKwlydDJ4MDBkZXYtPmxlZF9tY3VfcmVnID0gZWVwcm9tOwogI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX0xFRFMgKi8KIAogCS8qCkBAIC0zNjA3LDcgKzM3NjksNyBAQAogCiAJaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9FSVJQX01BWF9UWF9QT1dFUl8yR0haKSA8CiAJCQkJCUVJUlBfTUFYX1RYX1BPV0VSX0xJTUlUKQotCQlfX3NldF9iaXQoQ09ORklHX1NVUFBPUlRfUE9XRVJfTElNSVQsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwkJX19zZXRfYml0KENBUEFCSUxJVFlfUE9XRVJfTElNSVQsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM4MjgsNiArMzk5MCw3IEBACiAJCSAgIHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMzAyMSkgfHwKIAkJICAgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYzMDIyKSB8fAogCQkgICBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjMzMjApIHx8CisJCSAgIHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGNTM3MCkgfHwKIAkJICAgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MzkwKSkgewogCQlzcGVjLT5udW1fY2hhbm5lbHMgPSAxNDsKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzXzN4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMGxpYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMGxpYi5oCmluZGV4IDBjOTJkODYuLmYyZDE1OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBsaWIuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwbGliLmgKQEAgLTE4MSw2ICsxODEsNyBAQAogdm9pZCBydDI4MDBfcmVzZXRfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgc3RydWN0IGxpbmtfcXVhbCAqcXVhbCk7CiB2b2lkIHJ0MjgwMF9saW5rX3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIHN0cnVjdCBsaW5rX3F1YWwgKnF1YWwsCiAJCSAgICAgICBjb25zdCB1MzIgY291bnQpOwordm9pZCBydDI4MDBfZ2Fpbl9jYWxpYnJhdGlvbihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKIAogaW50IHJ0MjgwMF9lbmFibGVfcmFkaW8oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CiB2b2lkIHJ0MjgwMF9kaXNhYmxlX3JhZGlvKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHBjaS5jCmluZGV4IDgwODA3M2EuLmNjNGE1NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwcGNpLmMKQEAgLTY2LDcgKzY2LDcgQEAKIAkJcmV0dXJuOwogCiAJZm9yIChpID0gMDsgaSA8IDIwMDsgaSsrKSB7Ci0JCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgSDJNX01BSUxCT1hfQ0lELCAmcmVnKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBIMk1fTUFJTEJPWF9DSUQsICZyZWcpOwogCiAJCWlmICgocnQyeDAwX2dldF9maWVsZDMyKHJlZywgSDJNX01BSUxCT1hfQ0lEX0NNRDApID09IHRva2VuKSB8fAogCQkgICAgKHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIEgyTV9NQUlMQk9YX0NJRF9DTUQxKSA9PSB0b2tlbikgfHwKQEAgLTgwLDggKzgwLDggQEAKIAlpZiAoaSA9PSAyMDApCiAJCUVSUk9SKHJ0MngwMGRldiwgIk1DVSByZXF1ZXN0IGZhaWxlZCwgbm8gcmVzcG9uc2UgZnJvbSBoYXJkd2FyZVxuIik7CiAKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBIMk1fTUFJTEJPWF9TVEFUVVMsIH4wKTsKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBIMk1fTUFJTEJPWF9DSUQsIH4wKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBIMk1fTUFJTEJPWF9TVEFUVVMsIH4wKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBIMk1fTUFJTEJPWF9DSUQsIH4wKTsKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX1JBTElOS19SVDI4OFgpIHx8IGRlZmluZWQoQ09ORklHX1JBTElOS19SVDMwNVgpCkBAIC0xMDUsNyArMTA1LDcgQEAKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZWVwcm9tLT5kYXRhOwogCXUzMiByZWc7CiAKLQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEUyUFJPTV9DU1IsICZyZWcpOworCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgRTJQUk9NX0NTUiwgJnJlZyk7CiAKIAllZXByb20tPnJlZ19kYXRhX2luID0gISFydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBFMlBST01fQ1NSX0RBVEFfSU4pOwogCWVlcHJvbS0+cmVnX2RhdGFfb3V0ID0gISFydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBFMlBST01fQ1NSX0RBVEFfT1VUKTsKQEAgLTEyNyw3ICsxMjcsNyBAQAogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBFMlBST01fQ1NSX0NISVBfU0VMRUNULAogCQkJICAgISFlZXByb20tPnJlZ19jaGlwX3NlbGVjdCk7CiAKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBFMlBST01fQ1NSLCByZWcpOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEUyUFJPTV9DU1IsIHJlZyk7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0MjgwMHBjaV9yZWFkX2VlcHJvbV9wY2koc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKQEAgLTEzNSw3ICsxMzUsNyBAQAogCXN0cnVjdCBlZXByb21fOTNjeDYgZWVwcm9tOwogCXUzMiByZWc7CiAKLQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEUyUFJPTV9DU1IsICZyZWcpOworCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgRTJQUk9NX0NTUiwgJnJlZyk7CiAKIAllZXByb20uZGF0YSA9IHJ0MngwMGRldjsKIAllZXByb20ucmVnaXN0ZXJfcmVhZCA9IHJ0MjgwMHBjaV9lZXByb21yZWdpc3Rlcl9yZWFkOwpAQCAtMTk1LDkgKzE5NSw5IEBACiAKIAlzd2l0Y2ggKHF1ZXVlLT5xaWQpIHsKIAljYXNlIFFJRF9SWDoKLQkJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQUNfU1lTX0NUUkwsICZyZWcpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1BQ19TWVNfQ1RSTCwgJnJlZyk7CiAJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfU1lTX0NUUkxfRU5BQkxFX1JYLCAxKTsKLQkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX1NZU19DVFJMLCByZWcpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfU1lTX0NUUkwsIHJlZyk7CiAJCWJyZWFrOwogCWNhc2UgUUlEX0JFQUNPTjoKIAkJLyoKQEAgLTIwNywxNSArMjA3LDE1IEBACiAJCXRhc2tsZXRfZW5hYmxlKCZydDJ4MDBkZXYtPnRidHRfdGFza2xldCk7CiAJCXRhc2tsZXRfZW5hYmxlKCZydDJ4MDBkZXYtPnByZXRidHRfdGFza2xldCk7CiAKLQkJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBCQ05fVElNRV9DRkcsICZyZWcpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEJDTl9USU1FX0NGRywgJnJlZyk7CiAJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQ05fVElNRV9DRkdfVFNGX1RJQ0tJTkcsIDEpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkNOX1RJTUVfQ0ZHX1RCVFRfRU5BQkxFLCAxKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJDTl9USU1FX0NGR19CRUFDT05fR0VOLCAxKTsKLQkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQkNOX1RJTUVfQ0ZHLCByZWcpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBCQ05fVElNRV9DRkcsIHJlZyk7CiAKLQkJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBJTlRfVElNRVJfRU4sICZyZWcpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIElOVF9USU1FUl9FTiwgJnJlZyk7CiAJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBJTlRfVElNRVJfRU5fUFJFX1RCVFRfVElNRVIsIDEpOwotCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBJTlRfVElNRVJfRU4sIHJlZyk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIElOVF9USU1FUl9FTiwgcmVnKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0yMzMsMTEgKzIzMywxMyBAQAogCWNhc2UgUUlEX0FDX0JFOgogCWNhc2UgUUlEX0FDX0JLOgogCQllbnRyeSA9IHJ0MngwMHF1ZXVlX2dldF9lbnRyeShxdWV1ZSwgUV9JTkRFWCk7Ci0JCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX0NUWF9JRFgocXVldWUtPnFpZCksIGVudHJ5LT5lbnRyeV9pZHgpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9DVFhfSURYKHF1ZXVlLT5xaWQpLAorCQkJCQkgZW50cnktPmVudHJ5X2lkeCk7CiAJCWJyZWFrOwogCWNhc2UgUUlEX01HTVQ6CiAJCWVudHJ5ID0gcnQyeDAwcXVldWVfZ2V0X2VudHJ5KHF1ZXVlLCBRX0lOREVYKTsKLQkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfQ1RYX0lEWCg1KSwgZW50cnktPmVudHJ5X2lkeCk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX0NUWF9JRFgoNSksCisJCQkJCSBlbnRyeS0+ZW50cnlfaWR4KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0yNTEsMjAgKzI1MywyMCBAQAogCiAJc3dpdGNoIChxdWV1ZS0+cWlkKSB7CiAJY2FzZSBRSURfUlg6Ci0JCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX1NZU19DVFJMLCAmcmVnKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQUNfU1lTX0NUUkwsICZyZWcpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX1NZU19DVFJMX0VOQUJMRV9SWCwgMCk7Ci0JCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19TWVNfQ1RSTCwgcmVnKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX1NZU19DVFJMLCByZWcpOwogCQlicmVhazsKIAljYXNlIFFJRF9CRUFDT046Ci0JCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQkNOX1RJTUVfQ0ZHLCAmcmVnKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBCQ05fVElNRV9DRkcsICZyZWcpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkNOX1RJTUVfQ0ZHX1RTRl9USUNLSU5HLCAwKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJDTl9USU1FX0NGR19UQlRUX0VOQUJMRSwgMCk7CiAJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQ05fVElNRV9DRkdfQkVBQ09OX0dFTiwgMCk7Ci0JCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEJDTl9USU1FX0NGRywgcmVnKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQkNOX1RJTUVfQ0ZHLCByZWcpOwogCi0JCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgSU5UX1RJTUVSX0VOLCAmcmVnKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBJTlRfVElNRVJfRU4sICZyZWcpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgSU5UX1RJTUVSX0VOX1BSRV9UQlRUX1RJTUVSLCAwKTsKLQkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSU5UX1RJTUVSX0VOLCByZWcpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBJTlRfVElNRVJfRU4sIHJlZyk7CiAKIAkJLyoKIAkJICogV2FpdCBmb3IgdGJ0dCB0YXNrbGV0cyB0byBmaW5pc2guCkBAIC0yOTUsMTkgKzI5NywxOSBAQAogCSAqLwogCXJlZyA9IDA7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFBCRl9TWVNfQ1RSTF9IT1NUX1JBTV9XUklURSwgMSk7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUEJGX1NZU19DVFJMLCByZWcpOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFBCRl9TWVNfQ1RSTCwgcmVnKTsKIAogCS8qCiAJICogV3JpdGUgZmlybXdhcmUgdG8gZGV2aWNlLgogCSAqLwotCXJ0MjgwMF9yZWdpc3Rlcl9tdWx0aXdyaXRlKHJ0MngwMGRldiwgRklSTVdBUkVfSU1BR0VfQkFTRSwKLQkJCQkgICBkYXRhLCBsZW4pOworCXJ0MngwMHBjaV9yZWdpc3Rlcl9tdWx0aXdyaXRlKHJ0MngwMGRldiwgRklSTVdBUkVfSU1BR0VfQkFTRSwKKwkJCQkgICAgICBkYXRhLCBsZW4pOwogCi0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUEJGX1NZU19DVFJMLCAweDAwMDAwKTsKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQQkZfU1lTX0NUUkwsIDB4MDAwMDEpOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFBCRl9TWVNfQ1RSTCwgMHgwMDAwMCk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUEJGX1NZU19DVFJMLCAweDAwMDAxKTsKIAotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEgyTV9CQlBfQUdFTlQsIDApOwotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEgyTV9NQUlMQk9YX0NTUiwgMCk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSDJNX0JCUF9BR0VOVCwgMCk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSDJNX01BSUxCT1hfQ1NSLCAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzUxLDcgKzM1Myw3IEBACiAJCSAqIFNldCBSWCBJRFggaW4gcmVnaXN0ZXIgdG8gaW5mb3JtIGhhcmR3YXJlIHRoYXQgd2UgaGF2ZQogCQkgKiBoYW5kbGVkIHRoaXMgZW50cnkgYW5kIGl0IGlzIGF2YWlsYWJsZSBmb3IgcmV1c2UgYWdhaW4uCiAJCSAqLwotCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBSWF9DUlhfSURYLAorCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBSWF9DUlhfSURYLAogCQkJCSAgICAgIGVudHJ5LT5lbnRyeV9pZHgpOwogCX0gZWxzZSB7CiAJCXJ0MngwMF9kZXNjX3JlYWQoZW50cnlfcHJpdi0+ZGVzYywgMSwgJndvcmQpOwpAQCAtMzY5LDQ1ICszNzEsNTEgQEAKIAkgKiBJbml0aWFsaXplIHJlZ2lzdGVycy4KIAkgKi8KIAllbnRyeV9wcml2ID0gcnQyeDAwZGV2LT50eFswXS5lbnRyaWVzWzBdLnByaXZfZGF0YTsKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9CQVNFX1BUUjAsIGVudHJ5X3ByaXYtPmRlc2NfZG1hKTsKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9NQVhfQ05UMCwgcnQyeDAwZGV2LT50eFswXS5saW1pdCk7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfQ1RYX0lEWDAsIDApOwotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX0RUWF9JRFgwLCAwKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9CQVNFX1BUUjAsIGVudHJ5X3ByaXYtPmRlc2NfZG1hKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9NQVhfQ05UMCwKKwkJCQkgcnQyeDAwZGV2LT50eFswXS5saW1pdCk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfQ1RYX0lEWDAsIDApOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX0RUWF9JRFgwLCAwKTsKIAogCWVudHJ5X3ByaXYgPSBydDJ4MDBkZXYtPnR4WzFdLmVudHJpZXNbMF0ucHJpdl9kYXRhOwotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX0JBU0VfUFRSMSwgZW50cnlfcHJpdi0+ZGVzY19kbWEpOwotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX01BWF9DTlQxLCBydDJ4MDBkZXYtPnR4WzFdLmxpbWl0KTsKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9DVFhfSURYMSwgMCk7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfRFRYX0lEWDEsIDApOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX0JBU0VfUFRSMSwgZW50cnlfcHJpdi0+ZGVzY19kbWEpOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX01BWF9DTlQxLAorCQkJCSBydDJ4MDBkZXYtPnR4WzFdLmxpbWl0KTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9DVFhfSURYMSwgMCk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfRFRYX0lEWDEsIDApOwogCiAJZW50cnlfcHJpdiA9IHJ0MngwMGRldi0+dHhbMl0uZW50cmllc1swXS5wcml2X2RhdGE7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfQkFTRV9QVFIyLCBlbnRyeV9wcml2LT5kZXNjX2RtYSk7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfTUFYX0NOVDIsIHJ0MngwMGRldi0+dHhbMl0ubGltaXQpOwotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX0NUWF9JRFgyLCAwKTsKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9EVFhfSURYMiwgMCk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfQkFTRV9QVFIyLCBlbnRyeV9wcml2LT5kZXNjX2RtYSk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfTUFYX0NOVDIsCisJCQkJIHJ0MngwMGRldi0+dHhbMl0ubGltaXQpOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX0NUWF9JRFgyLCAwKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9EVFhfSURYMiwgMCk7CiAKIAllbnRyeV9wcml2ID0gcnQyeDAwZGV2LT50eFszXS5lbnRyaWVzWzBdLnByaXZfZGF0YTsKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9CQVNFX1BUUjMsIGVudHJ5X3ByaXYtPmRlc2NfZG1hKTsKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9NQVhfQ05UMywgcnQyeDAwZGV2LT50eFszXS5saW1pdCk7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfQ1RYX0lEWDMsIDApOwotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX0RUWF9JRFgzLCAwKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9CQVNFX1BUUjMsIGVudHJ5X3ByaXYtPmRlc2NfZG1hKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9NQVhfQ05UMywKKwkJCQkgcnQyeDAwZGV2LT50eFszXS5saW1pdCk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfQ1RYX0lEWDMsIDApOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX0RUWF9JRFgzLCAwKTsKIAogCWVudHJ5X3ByaXYgPSBydDJ4MDBkZXYtPnJ4LT5lbnRyaWVzWzBdLnByaXZfZGF0YTsKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBSWF9CQVNFX1BUUiwgZW50cnlfcHJpdi0+ZGVzY19kbWEpOwotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFJYX01BWF9DTlQsIHJ0MngwMGRldi0+cnhbMF0ubGltaXQpOwotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFJYX0NSWF9JRFgsIHJ0MngwMGRldi0+cnhbMF0ubGltaXQgLSAxKTsKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBSWF9EUlhfSURYLCAwKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBSWF9CQVNFX1BUUiwgZW50cnlfcHJpdi0+ZGVzY19kbWEpOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFJYX01BWF9DTlQsCisJCQkJIHJ0MngwMGRldi0+cnhbMF0ubGltaXQpOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFJYX0NSWF9JRFgsCisJCQkJIHJ0MngwMGRldi0+cnhbMF0ubGltaXQgLSAxKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBSWF9EUlhfSURYLCAwKTsKIAogCS8qCiAJICogRW5hYmxlIGdsb2JhbCBETUEgY29uZmlndXJhdGlvbgogCSAqLwotCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgV1BETUFfR0xPX0NGRywgJnJlZyk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBXUERNQV9HTE9fQ0ZHLCAmcmVnKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgV1BETUFfR0xPX0NGR19FTkFCTEVfVFhfRE1BLCAwKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgV1BETUFfR0xPX0NGR19FTkFCTEVfUlhfRE1BLCAwKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgV1BETUFfR0xPX0NGR19UWF9XUklURUJBQ0tfRE9ORSwgMSk7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgV1BETUFfR0xPX0NGRywgcmVnKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBXUERNQV9HTE9fQ0ZHLCByZWcpOwogCi0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgREVMQVlfSU5UX0NGRywgMCk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgREVMQVlfSU5UX0NGRywgMCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQyNyw4ICs0MzUsOCBAQAogCSAqIHNob3VsZCBjbGVhciB0aGUgcmVnaXN0ZXIgdG8gYXNzdXJlIGEgY2xlYW4gc3RhdGUuCiAJICovCiAJaWYgKHN0YXRlID09IFNUQVRFX1JBRElPX0lSUV9PTikgewotCQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIElOVF9TT1VSQ0VfQ1NSLCAmcmVnKTsKLQkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSU5UX1NPVVJDRV9DU1IsIHJlZyk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgSU5UX1NPVVJDRV9DU1IsICZyZWcpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBJTlRfU09VUkNFX0NTUiwgcmVnKTsKIAogCQkvKgogCQkgKiBFbmFibGUgdGFza2xldHMuIFRoZSBiZWFjb24gcmVsYXRlZCB0YXNrbGV0cyBhcmUKQEAgLTQ0MCw3ICs0NDgsNyBAQAogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZydDJ4MDBkZXYtPmlycW1hc2tfbG9jaywgZmxhZ3MpOwotCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgSU5UX01BU0tfQ1NSLCAmcmVnKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIElOVF9NQVNLX0NTUiwgJnJlZyk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIElOVF9NQVNLX0NTUl9SWERFTEFZSU5ULCAwKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgSU5UX01BU0tfQ1NSX1RYREVMQVlJTlQsIDApOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBJTlRfTUFTS19DU1JfUlhfRE9ORSwgbWFzayk7CkBAIC00NTksNyArNDY3LDcgQEAKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgSU5UX01BU0tfQ1NSX0dQVElNRVIsIDApOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBJTlRfTUFTS19DU1JfUlhfQ09IRVJFTlQsIDApOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBJTlRfTUFTS19DU1JfVFhfQ09IRVJFTlQsIDApOwotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIElOVF9NQVNLX0NTUiwgcmVnKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBJTlRfTUFTS19DU1IsIHJlZyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnQyeDAwZGV2LT5pcnFtYXNrX2xvY2ssIGZsYWdzKTsKIAogCWlmIChzdGF0ZSA9PSBTVEFURV9SQURJT19JUlFfT0ZGKSB7CkBAIC00ODAsNyArNDg4LDcgQEAKIAkvKgogCSAqIFJlc2V0IERNQSBpbmRleGVzCiAJICovCi0JcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBXUERNQV9SU1RfSURYLCAmcmVnKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFdQRE1BX1JTVF9JRFgsICZyZWcpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBXUERNQV9SU1RfSURYX0RUWF9JRFgwLCAxKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgV1BETUFfUlNUX0lEWF9EVFhfSURYMSwgMSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFdQRE1BX1JTVF9JRFhfRFRYX0lEWDIsIDEpOwpAQCAtNDg4LDI2ICs0OTYsMjYgQEAKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgV1BETUFfUlNUX0lEWF9EVFhfSURYNCwgMSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFdQRE1BX1JTVF9JRFhfRFRYX0lEWDUsIDEpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBXUERNQV9SU1RfSURYX0RSWF9JRFgwLCAxKTsKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBXUERNQV9SU1RfSURYLCByZWcpOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFdQRE1BX1JTVF9JRFgsIHJlZyk7CiAKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQQkZfU1lTX0NUUkwsIDB4MDAwMDBlMWYpOwotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFBCRl9TWVNfQ1RSTCwgMHgwMDAwMGUwMCk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUEJGX1NZU19DVFJMLCAweDAwMDAwZTFmKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQQkZfU1lTX0NUUkwsIDB4MDAwMDBlMDApOwogCiAJaWYgKHJ0MngwMF9ydChydDJ4MDBkZXYsIFJUNTM5MCkpIHsKLQkJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBBVVhfQ1RSTCwgJnJlZyk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQVVYX0NUUkwsICZyZWcpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQVVYX0NUUkxfRk9SQ0VfUENJRV9DTEssIDEpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQVVYX0NUUkxfV0FLRV9QQ0lFX0VOLCAxKTsKLQkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQVVYX0NUUkwsIHJlZyk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEFVWF9DVFJMLCByZWcpOwogCX0KIAotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFBXUl9QSU5fQ0ZHLCAweDAwMDAwMDAzKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQV1JfUElOX0NGRywgMHgwMDAwMDAwMyk7CiAKLQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1BQ19TWVNfQ1RSTCwgJnJlZyk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQUNfU1lTX0NUUkwsICZyZWcpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfU1lTX0NUUkxfUkVTRVRfQ1NSLCAxKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX1NZU19DVFJMX1JFU0VUX0JCUCwgMSk7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX1NZU19DVFJMLCByZWcpOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19TWVNfQ1RSTCwgcmVnKTsKIAotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19TWVNfQ1RSTCwgMHgwMDAwMDAwMCk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX1NZU19DVFJMLCAweDAwMDAwMDAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTI1LDggKzUzMyw4IEBACiB7CiAJaWYgKHJ0MngwMF9pc19zb2MocnQyeDAwZGV2KSkgewogCQlydDI4MDBfZGlzYWJsZV9yYWRpbyhydDJ4MDBkZXYpOwotCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQV1JfUElOX0NGRywgMCk7Ci0JCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX1BJTl9DRkcsIDApOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQV1JfUElOX0NGRywgMCk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX1BJTl9DRkcsIDApOwogCX0KIH0KIApAQCAtNTM3LDggKzU0NSwxMCBAQAogCQlydDI4MDBfbWN1X3JlcXVlc3QocnQyeDAwZGV2LCBNQ1VfV0FLRVVQLCBUT0tFTl9XQUtVUCwgMCwgMHgwMik7CiAJCXJ0MjgwMHBjaV9tY3Vfc3RhdHVzKHJ0MngwMGRldiwgVE9LRU5fV0FLVVApOwogCX0gZWxzZSBpZiAoc3RhdGUgPT0gU1RBVEVfU0xFRVApIHsKLQkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSDJNX01BSUxCT1hfU1RBVFVTLCAweGZmZmZmZmZmKTsKLQkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSDJNX01BSUxCT1hfQ0lELCAweGZmZmZmZmZmKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSDJNX01BSUxCT1hfU1RBVFVTLAorCQkJCQkgMHhmZmZmZmZmZik7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEgyTV9NQUlMQk9YX0NJRCwKKwkJCQkJIDB4ZmZmZmZmZmYpOwogCQlydDI4MDBfbWN1X3JlcXVlc3QocnQyeDAwZGV2LCBNQ1VfU0xFRVAsIDB4MDEsIDB4ZmYsIDB4MDEpOwogCX0KIApAQCAtNzE3LDEyICs3MjcsMTMgQEAKIAlydDI4MDBfY29uZmlnKHJ0MngwMGRldiwgJmxpYmNvbmYsIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUyk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0MjgwMHBjaV90eGRvbmUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3N0YXRpYyBib29sIHJ0MjgwMHBjaV90eGRvbmUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKIAlzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWU7CiAJc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeTsKIAl1MzIgc3RhdHVzOwogCXU4IHFpZDsKKwlpbnQgbWF4X3R4X2RvbmUgPSAxNjsKIAogCXdoaWxlIChrZmlmb19nZXQoJnJ0MngwMGRldi0+dHhzdGF0dXNfZmlmbywgJnN0YXR1cykpIHsKIAkJcWlkID0gcnQyeDAwX2dldF9maWVsZDMyKHN0YXR1cywgVFhfU1RBX0ZJRk9fUElEX1FVRVVFKTsKQEAgLTc1OSwxMSArNzcwLDE2IEBACiAKIAkJZW50cnkgPSBydDJ4MDBxdWV1ZV9nZXRfZW50cnkocXVldWUsIFFfSU5ERVhfRE9ORSk7CiAJCXJ0MjgwMF90eGRvbmVfZW50cnkoZW50cnksIHN0YXR1cyk7CisKKwkJaWYgKC0tbWF4X3R4X2RvbmUgPT0gMCkKKwkJCWJyZWFrOwogCX0KKworCXJldHVybiAhbWF4X3R4X2RvbmU7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0MjgwMHBjaV9lbmFibGVfaW50ZXJydXB0KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkJICAgICAgIHN0cnVjdCBydDJ4MDBfZmllbGQzMiBpcnFfZmllbGQpCitzdGF0aWMgaW5saW5lIHZvaWQgcnQyODAwcGNpX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkJICAgICAgc3RydWN0IHJ0MngwMF9maWVsZDMyIGlycV9maWVsZCkKIHsKIAl1MzIgcmVnOwogCkBAIC03NzIsMTUgKzc4OCwxNyBAQAogCSAqIGFjY2VzcyBuZWVkcyBsb2NraW5nLgogCSAqLwogCXNwaW5fbG9ja19pcnEoJnJ0MngwMGRldi0+aXJxbWFza19sb2NrKTsKLQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIElOVF9NQVNLX0NTUiwgJnJlZyk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBJTlRfTUFTS19DU1IsICZyZWcpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBpcnFfZmllbGQsIDEpOwotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIElOVF9NQVNLX0NTUiwgcmVnKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBJTlRfTUFTS19DU1IsIHJlZyk7CiAJc3Bpbl91bmxvY2tfaXJxKCZydDJ4MDBkZXYtPmlycW1hc2tfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0MjgwMHBjaV90eHN0YXR1c190YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQlydDI4MDBwY2lfdHhkb25lKChzdHJ1Y3QgcnQyeDAwX2RldiAqKWRhdGEpOworCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSAoc3RydWN0IHJ0MngwMF9kZXYgKilkYXRhOworCWlmIChydDI4MDBwY2lfdHhkb25lKHJ0MngwMGRldikpCisJCXRhc2tsZXRfc2NoZWR1bGUoJnJ0MngwMGRldi0+dHhzdGF0dXNfdGFza2xldCk7CiAKIAkvKgogCSAqIE5vIG5lZWQgdG8gZW5hYmxlIHRoZSB0eCBzdGF0dXMgaW50ZXJydXB0IGhlcmUgYXMgd2UgYWx3YXlzCkBAIC04MDYsOCArODI0LDEwIEBACiBzdGF0aWMgdm9pZCBydDI4MDBwY2lfcnhkb25lX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSAoc3RydWN0IHJ0MngwMF9kZXYgKilkYXRhOwotCXJ0MngwMHBjaV9yeGRvbmUocnQyeDAwZGV2KTsKLQlydDI4MDBwY2lfZW5hYmxlX2ludGVycnVwdChydDJ4MDBkZXYsIElOVF9NQVNLX0NTUl9SWF9ET05FKTsKKwlpZiAocnQyeDAwcGNpX3J4ZG9uZShydDJ4MDBkZXYpKQorCQl0YXNrbGV0X3NjaGVkdWxlKCZydDJ4MDBkZXYtPnJ4ZG9uZV90YXNrbGV0KTsKKwllbHNlCisJCXJ0MjgwMHBjaV9lbmFibGVfaW50ZXJydXB0KHJ0MngwMGRldiwgSU5UX01BU0tfQ1NSX1JYX0RPTkUpOwogfQogCiBzdGF0aWMgdm9pZCBydDI4MDBwY2lfYXV0b3dha2VfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCkBAIC04NDEsNyArODYxLDcgQEAKIAkgKiBuZWVkIHRvIGxvY2sgdGhlIGtmaWZvLgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBydDJ4MDBkZXYtPm9wcy0+dHgtPmVudHJ5X251bTsgaSsrKSB7Ci0JCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhfU1RBX0ZJRk8sICZzdGF0dXMpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYX1NUQV9GSUZPLCAmc3RhdHVzKTsKIAogCQlpZiAoIXJ0MngwMF9nZXRfZmllbGQzMihzdGF0dXMsIFRYX1NUQV9GSUZPX1ZBTElEKSkKIAkJCWJyZWFrOwpAQCAtODYzLDggKzg4Myw4IEBACiAJdTMyIHJlZywgbWFzazsKIAogCS8qIFJlYWQgc3RhdHVzIGFuZCBBQ0sgYWxsIGludGVycnVwdHMgKi8KLQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIElOVF9TT1VSQ0VfQ1NSLCAmcmVnKTsKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBJTlRfU09VUkNFX0NTUiwgcmVnKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIElOVF9TT1VSQ0VfQ1NSLCAmcmVnKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBJTlRfU09VUkNFX0NTUiwgcmVnKTsKIAogCWlmICghcmVnKQogCQlyZXR1cm4gSVJRX05PTkU7CkBAIC05MDQsOSArOTI0LDkgQEAKIAkgKiB0aGUgdGFza2xldCB3aWxsIHJlZW5hYmxlIHRoZSBhcHByb3ByaWF0ZSBpbnRlcnJ1cHRzLgogCSAqLwogCXNwaW5fbG9jaygmcnQyeDAwZGV2LT5pcnFtYXNrX2xvY2spOwotCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgSU5UX01BU0tfQ1NSLCAmcmVnKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIElOVF9NQVNLX0NTUiwgJnJlZyk7CiAJcmVnICY9IG1hc2s7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSU5UX01BU0tfQ1NSLCByZWcpOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIElOVF9NQVNLX0NTUiwgcmVnKTsKIAlzcGluX3VubG9jaygmcnQyeDAwZGV2LT5pcnFtYXNrX2xvY2spOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtOTU2LDI4ICs5NzYsMjggQEAKIAkgKiBUaGlzIGRldmljZSBoYXMgbXVsdGlwbGUgZmlsdGVycyBmb3IgY29udHJvbCBmcmFtZXMKIAkgKiBhbmQgaGFzIGEgc2VwYXJhdGUgZmlsdGVyIGZvciBQUyBQb2xsIGZyYW1lcy4KIAkgKi8KLQlfX3NldF9iaXQoRFJJVkVSX1NVUFBPUlRfQ09OVFJPTF9GSUxURVJTLCAmcnQyeDAwZGV2LT5mbGFncyk7Ci0JX19zZXRfYml0KERSSVZFUl9TVVBQT1JUX0NPTlRST0xfRklMVEVSX1BTUE9MTCwgJnJ0MngwMGRldi0+ZmxhZ3MpOworCV9fc2V0X2JpdChDQVBBQklMSVRZX0NPTlRST0xfRklMVEVSUywgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKKwlfX3NldF9iaXQoQ0FQQUJJTElUWV9DT05UUk9MX0ZJTFRFUl9QU1BPTEwsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CiAKIAkvKgogCSAqIFRoaXMgZGV2aWNlIGhhcyBhIHByZSB0YnR0IGludGVycnVwdCBhbmQgdGh1cyBmZXRjaGVzCiAJICogYSBuZXcgYmVhY29uIGRpcmVjdGx5IHByaW9yIHRvIHRyYW5zbWlzc2lvbi4KIAkgKi8KLQlfX3NldF9iaXQoRFJJVkVSX1NVUFBPUlRfUFJFX1RCVFRfSU5URVJSVVBULCAmcnQyeDAwZGV2LT5mbGFncyk7CisJX19zZXRfYml0KENBUEFCSUxJVFlfUFJFX1RCVFRfSU5URVJSVVBULCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOwogCiAJLyoKIAkgKiBUaGlzIGRldmljZSByZXF1aXJlcyBmaXJtd2FyZS4KIAkgKi8KIAlpZiAoIXJ0MngwMF9pc19zb2MocnQyeDAwZGV2KSkKLQkJX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX0ZJUk1XQVJFLCAmcnQyeDAwZGV2LT5mbGFncyk7Ci0JX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX0RNQSwgJnJ0MngwMGRldi0+ZmxhZ3MpOwotCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9MMlBBRCwgJnJ0MngwMGRldi0+ZmxhZ3MpOwotCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9UWFNUQVRVU19GSUZPLCAmcnQyeDAwZGV2LT5mbGFncyk7Ci0JX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX1RBU0tMRVRfQ09OVEVYVCwgJnJ0MngwMGRldi0+ZmxhZ3MpOworCQlfX3NldF9iaXQoUkVRVUlSRV9GSVJNV0FSRSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKKwlfX3NldF9iaXQoUkVRVUlSRV9ETUEsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CisJX19zZXRfYml0KFJFUVVJUkVfTDJQQUQsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CisJX19zZXRfYml0KFJFUVVJUkVfVFhTVEFUVVNfRklGTywgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKKwlfX3NldF9iaXQoUkVRVUlSRV9UQVNLTEVUX0NPTlRFWFQsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CiAJaWYgKCFtb2RwYXJhbV9ub2h3Y3J5cHQpCi0JCV9fc2V0X2JpdChDT05GSUdfU1VQUE9SVF9IV19DUllQVE8sICZydDJ4MDBkZXYtPmZsYWdzKTsKLQlfX3NldF9iaXQoRFJJVkVSX1NVUFBPUlRfTElOS19UVU5JTkcsICZydDJ4MDBkZXYtPmZsYWdzKTsKLQlfX3NldF9iaXQoRFJJVkVSX1JFUVVJUkVfSFRfVFhfREVTQywgJnJ0MngwMGRldi0+ZmxhZ3MpOworCQlfX3NldF9iaXQoQ0FQQUJJTElUWV9IV19DUllQVE8sICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CisJX19zZXRfYml0KENBUEFCSUxJVFlfTElOS19UVU5JTkcsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CisJX19zZXRfYml0KFJFUVVJUkVfSFRfVFhfREVTQywgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKIAogCS8qCiAJICogU2V0IHRoZSByc3NpIG9mZnNldC4KQEAgLTEwMDgsNiArMTAyOCw3IEBACiAJLmFtcGR1X2FjdGlvbgkJPSBydDI4MDBfYW1wZHVfYWN0aW9uLAogCS5mbHVzaAkJCT0gcnQyeDAwbWFjX2ZsdXNoLAogCS5nZXRfc3VydmV5CQk9IHJ0MjgwMF9nZXRfc3VydmV5LAorCS5nZXRfcmluZ3BhcmFtCQk9IHJ0MngwMG1hY19nZXRfcmluZ3BhcmFtLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydDI4MDBfb3BzIHJ0MjgwMHBjaV9ydDI4MDBfb3BzID0gewpAQCAtMTA0Myw5ICsxMDY0LDExIEBACiAJLmxpbmtfc3RhdHMJCT0gcnQyODAwX2xpbmtfc3RhdHMsCiAJLnJlc2V0X3R1bmVyCQk9IHJ0MjgwMF9yZXNldF90dW5lciwKIAkubGlua190dW5lcgkJPSBydDI4MDBfbGlua190dW5lciwKKwkuZ2Fpbl9jYWxpYnJhdGlvbgk9IHJ0MjgwMF9nYWluX2NhbGlicmF0aW9uLAogCS5zdGFydF9xdWV1ZQkJPSBydDI4MDBwY2lfc3RhcnRfcXVldWUsCiAJLmtpY2tfcXVldWUJCT0gcnQyODAwcGNpX2tpY2tfcXVldWUsCiAJLnN0b3BfcXVldWUJCT0gcnQyODAwcGNpX3N0b3BfcXVldWUsCisJLmZsdXNoX3F1ZXVlCQk9IHJ0MngwMHBjaV9mbHVzaF9xdWV1ZSwKIAkud3JpdGVfdHhfZGVzYwkJPSBydDI4MDBwY2lfd3JpdGVfdHhfZGVzYywKIAkud3JpdGVfdHhfZGF0YQkJPSBydDI4MDBfd3JpdGVfdHhfZGF0YSwKIAkud3JpdGVfYmVhY29uCQk9IHJ0MjgwMF93cml0ZV9iZWFjb24sCkBAIC0xMTA1LDM2ICsxMTI4LDM2IEBACiAgKi8KICNpZmRlZiBDT05GSUdfUENJCiBzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocnQyODAwcGNpX2RldmljZV90YWJsZSkgPSB7Ci0JeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgwNjAxKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAotCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MDY4MSksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDA3MDEpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgwNzgxKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAotCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MzA5MCksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDMwOTEpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgzMDkyKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAotCXsgUENJX0RFVklDRSgweDE0MzIsIDB4NzcwOCksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxNDMyLCAweDc3MjcpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTQzMiwgMHg3NzI4KSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAotCXsgUENJX0RFVklDRSgweDE0MzIsIDB4NzczOCksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxNDMyLCAweDc3NDgpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTQzMiwgMHg3NzU4KSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAotCXsgUENJX0RFVklDRSgweDE0MzIsIDB4Nzc2OCksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxNDYyLCAweDg5MWEpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCi0JeyBQQ0lfREVWSUNFKDB4MWEzYiwgMHgxMDU5KSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAorCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MDYwMSkgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDA2ODEpIH0sCisJeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgwNzAxKSB9LAorCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MDc4MSkgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDMwOTApIH0sCisJeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgzMDkxKSB9LAorCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MzA5MikgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxNDMyLCAweDc3MDgpIH0sCisJeyBQQ0lfREVWSUNFKDB4MTQzMiwgMHg3NzI3KSB9LAorCXsgUENJX0RFVklDRSgweDE0MzIsIDB4NzcyOCkgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxNDMyLCAweDc3MzgpIH0sCisJeyBQQ0lfREVWSUNFKDB4MTQzMiwgMHg3NzQ4KSB9LAorCXsgUENJX0RFVklDRSgweDE0MzIsIDB4Nzc1OCkgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxNDMyLCAweDc3NjgpIH0sCisJeyBQQ0lfREVWSUNFKDB4MTQ2MiwgMHg4OTFhKSB9LAorCXsgUENJX0RFVklDRSgweDFhM2IsIDB4MTA1OSkgfSwKICNpZmRlZiBDT05GSUdfUlQyODAwUENJX1JUMzNYWAotCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MzM5MCksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDMzOTApIH0sCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUlQyODAwUENJX1JUMzVYWAotCXsgUENJX0RFVklDRSgweDE0MzIsIDB4NzcxMSksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxNDMyLCAweDc3MjIpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgzMDYwKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAotCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MzA2MiksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDM1NjIpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgzNTkyKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAotCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MzU5MyksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxNDMyLCAweDc3MTEpIH0sCisJeyBQQ0lfREVWSUNFKDB4MTQzMiwgMHg3NzIyKSB9LAorCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MzA2MCkgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDMwNjIpIH0sCisJeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgzNTYyKSB9LAorCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MzU5MikgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDM1OTMpIH0sCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUlQyODAwUENJX1JUNTNYWAotCXsgUENJX0RFVklDRSgweDE4MTQsIDB4NTM5MCksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDUzOTApIH0sCiAjZW5kaWYKIAl7IDAsIH0KIH07CkBAIC0xMTcwLDEwICsxMTkzLDE2IEBACiAjZW5kaWYgLyogQ09ORklHX1JBTElOS19SVDI4OFggfHwgQ09ORklHX1JBTElOS19SVDMwNVggKi8KIAogI2lmZGVmIENPTkZJR19QQ0kKK3N0YXRpYyBpbnQgcnQyODAwcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LAorCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBydDJ4MDBwY2lfcHJvYmUocGNpX2RldiwgJnJ0MjgwMHBjaV9vcHMpOworfQorCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcnQyODAwcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSBLQlVJTERfTU9ETkFNRSwKIAkuaWRfdGFibGUJPSBydDI4MDBwY2lfZGV2aWNlX3RhYmxlLAotCS5wcm9iZQkJPSBydDJ4MDBwY2lfcHJvYmUsCisJLnByb2JlCQk9IHJ0MjgwMHBjaV9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHJ0MngwMHBjaV9yZW1vdmUpLAogCS5zdXNwZW5kCT0gcnQyeDAwcGNpX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBydDJ4MDBwY2lfcmVzdW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5jCmluZGV4IDM3NTA5ZDAuLmJhODJjOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmMKQEAgLTU5LDE2ICs1OSwxNiBAQAogCiAJc3dpdGNoIChxdWV1ZS0+cWlkKSB7CiAJY2FzZSBRSURfUlg6Ci0JCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX1NZU19DVFJMLCAmcmVnKTsKKwkJcnQyeDAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQUNfU1lTX0NUUkwsICZyZWcpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX1NZU19DVFJMX0VOQUJMRV9SWCwgMSk7Ci0JCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19TWVNfQ1RSTCwgcmVnKTsKKwkJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX1NZU19DVFJMLCByZWcpOwogCQlicmVhazsKIAljYXNlIFFJRF9CRUFDT046Ci0JCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQkNOX1RJTUVfQ0ZHLCAmcmVnKTsKKwkJcnQyeDAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBCQ05fVElNRV9DRkcsICZyZWcpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkNOX1RJTUVfQ0ZHX1RTRl9USUNLSU5HLCAxKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJDTl9USU1FX0NGR19UQlRUX0VOQUJMRSwgMSk7CiAJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQ05fVElNRV9DRkdfQkVBQ09OX0dFTiwgMSk7Ci0JCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEJDTl9USU1FX0NGRywgcmVnKTsKKwkJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQkNOX1RJTUVfQ0ZHLCByZWcpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTgyLDE2ICs4MiwxNiBAQAogCiAJc3dpdGNoIChxdWV1ZS0+cWlkKSB7CiAJY2FzZSBRSURfUlg6Ci0JCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX1NZU19DVFJMLCAmcmVnKTsKKwkJcnQyeDAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQUNfU1lTX0NUUkwsICZyZWcpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX1NZU19DVFJMX0VOQUJMRV9SWCwgMCk7Ci0JCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19TWVNfQ1RSTCwgcmVnKTsKKwkJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX1NZU19DVFJMLCByZWcpOwogCQlicmVhazsKIAljYXNlIFFJRF9CRUFDT046Ci0JCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQkNOX1RJTUVfQ0ZHLCAmcmVnKTsKKwkJcnQyeDAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBCQ05fVElNRV9DRkcsICZyZWcpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkNOX1RJTUVfQ0ZHX1RTRl9USUNLSU5HLCAwKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJDTl9USU1FX0NGR19UQlRUX0VOQUJMRSwgMCk7CiAJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQ05fVElNRV9DRkdfQkVBQ09OX0dFTiwgMCk7Ci0JCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEJDTl9USU1FX0NGRywgcmVnKTsKKwkJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQkNOX1RJTUVfQ0ZHLCByZWcpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTk5LDYgKzk5LDYzIEBACiB9CiAKIC8qCisgKiB0ZXN0IGlmIHRoZXJlIGlzIGFuIGVudHJ5IGluIGFueSBUWCBxdWV1ZSBmb3Igd2hpY2ggRE1BIGlzIGRvbmUKKyAqIGJ1dCB0aGUgVFggc3RhdHVzIGhhcyBub3QgYmVlbiByZXR1cm5lZCB5ZXQKKyAqLworc3RhdGljIGJvb2wgcnQyODAwdXNiX3R4c3RhdHVzX3BlbmRpbmcoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwlzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWU7CisKKwl0eF9xdWV1ZV9mb3JfZWFjaChydDJ4MDBkZXYsIHF1ZXVlKSB7CisJCWlmIChydDJ4MDBxdWV1ZV9nZXRfZW50cnkocXVldWUsIFFfSU5ERVhfRE1BX0RPTkUpICE9CisJCSAgICBydDJ4MDBxdWV1ZV9nZXRfZW50cnkocXVldWUsIFFfSU5ERVhfRE9ORSkpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBydDI4MDB1c2JfdHhfc3RhX2ZpZm9fcmVhZF9jb21wbGV0ZWQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkJCSBpbnQgdXJiX3N0YXR1cywgdTMyIHR4X3N0YXR1cykKK3sKKwlpZiAodXJiX3N0YXR1cykgeworCQlXQVJOSU5HKHJ0MngwMGRldiwgInJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkX2FzeW5jIGZhaWxlZDogJWRcbiIsIHVyYl9zdGF0dXMpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogdHJ5IHRvIHJlYWQgYWxsIFRYX1NUQV9GSUZPIGVudHJpZXMgYmVmb3JlIHNjaGVkdWxpbmcgdHhkb25lX3dvcmsgKi8KKwlpZiAocnQyeDAwX2dldF9maWVsZDMyKHR4X3N0YXR1cywgVFhfU1RBX0ZJRk9fVkFMSUQpKSB7CisJCWlmICgha2ZpZm9fcHV0KCZydDJ4MDBkZXYtPnR4c3RhdHVzX2ZpZm8sICZ0eF9zdGF0dXMpKSB7CisJCQlXQVJOSU5HKHJ0MngwMGRldiwgIlRYIHN0YXR1cyBGSUZPIG92ZXJydW4sICIKKwkJCQkiZHJvcCB0eCBzdGF0dXMgcmVwb3J0LlxuIik7CisJCQlxdWV1ZV93b3JrKHJ0MngwMGRldi0+d29ya3F1ZXVlLCAmcnQyeDAwZGV2LT50eGRvbmVfd29yayk7CisJCX0gZWxzZQorCQkJcmV0dXJuIHRydWU7CisJfSBlbHNlIGlmICgha2ZpZm9faXNfZW1wdHkoJnJ0MngwMGRldi0+dHhzdGF0dXNfZmlmbykpIHsKKwkJcXVldWVfd29yayhydDJ4MDBkZXYtPndvcmtxdWV1ZSwgJnJ0MngwMGRldi0+dHhkb25lX3dvcmspOworCX0gZWxzZSBpZiAocnQyODAwdXNiX3R4c3RhdHVzX3BlbmRpbmcocnQyeDAwZGV2KSkgeworCQltb2RfdGltZXIoJnJ0MngwMGRldi0+dHhzdGF0dXNfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDIpKTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIHJ0MjgwMHVzYl90eF9kbWFfZG9uZShzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KQoreworCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBlbnRyeS0+cXVldWUtPnJ0MngwMGRldjsKKworCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkX2FzeW5jKHJ0MngwMGRldiwgVFhfU1RBX0ZJRk8sCisJCQkJICAgICAgcnQyODAwdXNiX3R4X3N0YV9maWZvX3JlYWRfY29tcGxldGVkKTsKK30KKworc3RhdGljIHZvaWQgcnQyODAwdXNiX3R4X3N0YV9maWZvX3RpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSAoc3RydWN0IHJ0MngwMF9kZXYgKilkYXRhOworCisJcnQyeDAwdXNiX3JlZ2lzdGVyX3JlYWRfYXN5bmMocnQyeDAwZGV2LCBUWF9TVEFfRklGTywKKwkJCQkgICAgICBydDI4MDB1c2JfdHhfc3RhX2ZpZm9fcmVhZF9jb21wbGV0ZWQpOworfQorCisvKgogICogRmlybXdhcmUgZnVuY3Rpb25zCiAgKi8KIHN0YXRpYyBjaGFyICpydDI4MDB1c2JfZ2V0X2Zpcm13YXJlX25hbWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKQEAgLTEyOSwxMSArMTg2LDExIEBACiAJLyoKIAkgKiBXcml0ZSBmaXJtd2FyZSB0byBkZXZpY2UuCiAJICovCi0JcnQyODAwX3JlZ2lzdGVyX211bHRpd3JpdGUocnQyeDAwZGV2LCBGSVJNV0FSRV9JTUFHRV9CQVNFLAotCQkJCSAgIGRhdGEgKyBvZmZzZXQsIGxlbmd0aCk7CisJcnQyeDAwdXNiX3JlZ2lzdGVyX211bHRpd3JpdGUocnQyeDAwZGV2LCBGSVJNV0FSRV9JTUFHRV9CQVNFLAorCQkJCSAgICAgIGRhdGEgKyBvZmZzZXQsIGxlbmd0aCk7CiAKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBIMk1fTUFJTEJPWF9DSUQsIH4wKTsKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBIMk1fTUFJTEJPWF9TVEFUVVMsIH4wKTsKKwlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBIMk1fTUFJTEJPWF9DSUQsIH4wKTsKKwlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBIMk1fTUFJTEJPWF9TVEFUVVMsIH4wKTsKIAogCS8qCiAJICogU2VuZCBmaXJtd2FyZSByZXF1ZXN0IHRvIGRldmljZSB0byBsb2FkIGZpcm13YXJlLApAQCAtMTQ4LDcgKzIwNSw3IEBACiAJfQogCiAJbXNsZWVwKDEwKTsKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBIMk1fTUFJTEJPWF9DU1IsIDApOworCXJ0MngwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEgyTV9NQUlMQk9YX0NTUiwgMCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE2NiwyMiArMjIzLDIyIEBACiAJaWYgKHJ0MjgwMF93YWl0X2Nzcl9yZWFkeShydDJ4MDBkZXYpKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBQQkZfU1lTX0NUUkwsICZyZWcpOwotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFBCRl9TWVNfQ1RSTCwgcmVnICYgfjB4MDAwMDIwMDApOworCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgUEJGX1NZU19DVFJMLCAmcmVnKTsKKwlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQQkZfU1lTX0NUUkwsIHJlZyAmIH4weDAwMDAyMDAwKTsKIAotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFBXUl9QSU5fQ0ZHLCAweDAwMDAwMDAzKTsKKwlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQV1JfUElOX0NGRywgMHgwMDAwMDAwMyk7CiAKLQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1BQ19TWVNfQ1RSTCwgJnJlZyk7CisJcnQyeDAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQUNfU1lTX0NUUkwsICZyZWcpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfU1lTX0NUUkxfUkVTRVRfQ1NSLCAxKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX1NZU19DVFJMX1JFU0VUX0JCUCwgMSk7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX1NZU19DVFJMLCByZWcpOworCXJ0MngwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19TWVNfQ1RSTCwgcmVnKTsKIAotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFVTQl9ETUFfQ0ZHLCAweDAwMDAwMDAwKTsKKwlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBVU0JfRE1BX0NGRywgMHgwMDAwMDAwMCk7CiAKIAlydDJ4MDB1c2JfdmVuZG9yX3JlcXVlc3Rfc3cocnQyeDAwZGV2LCBVU0JfREVWSUNFX01PREUsIDAsCiAJCQkJICAgIFVTQl9NT0RFX1JFU0VULCBSRUdJU1RFUl9USU1FT1VUKTsKIAotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19TWVNfQ1RSTCwgMHgwMDAwMDAwMCk7CisJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX1NZU19DVFJMLCAweDAwMDAwMDAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTkzLDcgKzI1MCw3IEBACiAJaWYgKHVubGlrZWx5KHJ0MjgwMF93YWl0X3dwZG1hX3JlYWR5KHJ0MngwMGRldikpKQogCQlyZXR1cm4gLUVJTzsKIAotCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVVNCX0RNQV9DRkcsICZyZWcpOworCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVVNCX0RNQV9DRkcsICZyZWcpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBVU0JfRE1BX0NGR19QSFlfQ0xFQVIsIDApOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBVU0JfRE1BX0NGR19SWF9CVUxLX0FHR19FTiwgMCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFVTQl9ETUFfQ0ZHX1JYX0JVTEtfQUdHX1RJTUVPVVQsIDEyOCk7CkBAIC0yMDYsNyArMjYzLDcgQEAKIAkJCSAgICAvIDEwMjQpIC0gMyk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFVTQl9ETUFfQ0ZHX1JYX0JVTEtfRU4sIDEpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBVU0JfRE1BX0NGR19UWF9CVUxLX0VOLCAxKTsKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBVU0JfRE1BX0NGRywgcmVnKTsKKwlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBVU0JfRE1BX0NGRywgcmVnKTsKIAogCXJldHVybiBydDI4MDBfZW5hYmxlX3JhZGlvKHJ0MngwMGRldik7CiB9CkBAIC0yODIsMTIgKzMzOSwxMiBAQAogCXVuc2lnbmVkIGludCBpOwogCXUzMiByZWc7CiAKLQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYUlhRX1BDTlQsICZyZWcpOworCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhSWFFfUENOVCwgJnJlZyk7CiAJaWYgKHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIFRYUlhRX1BDTlRfVFgwUSkpIHsKIAkJV0FSTklORyhydDJ4MDBkZXYsICJUWCBIVyBxdWV1ZSAwIHRpbWVkIG91dCwiCiAJCQkiIGludm9rZSBmb3JjZWQga2lja1xuIik7CiAKLQkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUEJGX0NGRywgMHhmNDAwMTIpOworCQlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQQkZfQ0ZHLCAweGY0MDAxMik7CiAKIAkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKIAkJCXVkZWxheSgxMCk7CkBAIC0yOTUsMTUgKzM1MiwxNSBAQAogCQkJCWJyZWFrOwogCQl9CiAKLQkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUEJGX0NGRywgMHhmNDAwMDYpOworCQlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQQkZfQ0ZHLCAweGY0MDAwNik7CiAJfQogCi0JcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWFJYUV9QQ05ULCAmcmVnKTsKKwlydDJ4MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYUlhRX1BDTlQsICZyZWcpOwogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBUWFJYUV9QQ05UX1RYMVEpKSB7CiAJCVdBUk5JTkcocnQyeDAwZGV2LCAiVFggSFcgcXVldWUgMSB0aW1lZCBvdXQsIgogCQkJIiBpbnZva2UgZm9yY2VkIGtpY2tcbiIpOwogCi0JCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFBCRl9DRkcsIDB4ZjQwMDBhKTsKKwkJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUEJGX0NGRywgMHhmNDAwMGEpOwogCiAJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CiAJCQl1ZGVsYXkoMTApOwpAQCAtMzExLDcgKzM2OCw3IEBACiAJCQkJYnJlYWs7CiAJCX0KIAotCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQQkZfQ0ZHLCAweGY0MDAwNik7CisJCXJ0MngwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFBCRl9DRkcsIDB4ZjQwMDA2KTsKIAl9CiAKIAlydDJ4MDB1c2Jfd2F0Y2hkb2cocnQyeDAwZGV2KTsKQEAgLTQyMCwxMyArNDc3LDI0IEBACiAJCXdoaWxlICghcnQyeDAwcXVldWVfZW1wdHkocXVldWUpKSB7CiAJCQllbnRyeSA9IHJ0MngwMHF1ZXVlX2dldF9lbnRyeShxdWV1ZSwgUV9JTkRFWF9ET05FKTsKIAotCQkJaWYgKHRlc3RfYml0KEVOVFJZX09XTkVSX0RFVklDRV9EQVRBLCAmZW50cnktPmZsYWdzKSB8fAotCQkJICAgICF0ZXN0X2JpdChFTlRSWV9EQVRBX0lPX0ZBSUxFRCwgJmVudHJ5LT5mbGFncykpCisJCQlpZiAodGVzdF9iaXQoRU5UUllfT1dORVJfREVWSUNFX0RBVEEsICZlbnRyeS0+ZmxhZ3MpKQogCQkJCWJyZWFrOwotCi0JCQlydDJ4MDBsaWJfdHhkb25lX25vaW5mbyhlbnRyeSwgVFhET05FX0ZBSUxVUkUpOworCQkJaWYgKHRlc3RfYml0KEVOVFJZX0RBVEFfSU9fRkFJTEVELCAmZW50cnktPmZsYWdzKSkKKwkJCQlydDJ4MDBsaWJfdHhkb25lX25vaW5mbyhlbnRyeSwgVFhET05FX0ZBSUxVUkUpOworCQkJZWxzZSBpZiAocnQyeDAwcXVldWVfc3RhdHVzX3RpbWVvdXQoZW50cnkpKQorCQkJCXJ0MngwMGxpYl90eGRvbmVfbm9pbmZvKGVudHJ5LCBUWERPTkVfVU5LTk9XTik7CisJCQllbHNlCisJCQkJYnJlYWs7CiAJCX0KIAl9CisKKwkvKgorCSAqIFRoZSBodyBtYXkgZGVsYXkgc2VuZGluZyB0aGUgcGFja2V0IGFmdGVyIERNQSBjb21wbGV0ZQorCSAqIGlmIHRoZSBtZWRpdW0gaXMgYnVzeSwgdGh1cyB0aGUgVFhfU1RBX0ZJRk8gZW50cnkgaXMKKwkgKiBhbHNvIGRlbGF5ZWQgLT4gdXNlIGEgdGltZXIgdG8gcmV0cmlldmUgaXQuCisJICovCisJaWYgKHJ0MjgwMHVzYl90eHN0YXR1c19wZW5kaW5nKHJ0MngwMGRldikpCisJCW1vZF90aW1lcigmcnQyeDAwZGV2LT50eHN0YXR1c190aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMikpOwogfQogCiAvKgpAQCAtNTUzLDE5ICs2MjEsMjQgQEAKIAkgKiBUaGlzIGRldmljZSBoYXMgbXVsdGlwbGUgZmlsdGVycyBmb3IgY29udHJvbCBmcmFtZXMKIAkgKiBhbmQgaGFzIGEgc2VwYXJhdGUgZmlsdGVyIGZvciBQUyBQb2xsIGZyYW1lcy4KIAkgKi8KLQlfX3NldF9iaXQoRFJJVkVSX1NVUFBPUlRfQ09OVFJPTF9GSUxURVJTLCAmcnQyeDAwZGV2LT5mbGFncyk7Ci0JX19zZXRfYml0KERSSVZFUl9TVVBQT1JUX0NPTlRST0xfRklMVEVSX1BTUE9MTCwgJnJ0MngwMGRldi0+ZmxhZ3MpOworCV9fc2V0X2JpdChDQVBBQklMSVRZX0NPTlRST0xfRklMVEVSUywgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKKwlfX3NldF9iaXQoQ0FQQUJJTElUWV9DT05UUk9MX0ZJTFRFUl9QU1BPTEwsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CiAKIAkvKgogCSAqIFRoaXMgZGV2aWNlIHJlcXVpcmVzIGZpcm13YXJlLgogCSAqLwotCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9GSVJNV0FSRSwgJnJ0MngwMGRldi0+ZmxhZ3MpOwotCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9MMlBBRCwgJnJ0MngwMGRldi0+ZmxhZ3MpOworCV9fc2V0X2JpdChSRVFVSVJFX0ZJUk1XQVJFLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOworCV9fc2V0X2JpdChSRVFVSVJFX0wyUEFELCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOwogCWlmICghbW9kcGFyYW1fbm9od2NyeXB0KQotCQlfX3NldF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQ1JZUFRPLCAmcnQyeDAwZGV2LT5mbGFncyk7Ci0JX19zZXRfYml0KERSSVZFUl9TVVBQT1JUX0xJTktfVFVOSU5HLCAmcnQyeDAwZGV2LT5mbGFncyk7Ci0JX19zZXRfYml0KERSSVZFUl9TVVBQT1JUX1dBVENIRE9HLCAmcnQyeDAwZGV2LT5mbGFncyk7Ci0JX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX0hUX1RYX0RFU0MsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwkJX19zZXRfYml0KENBUEFCSUxJVFlfSFdfQ1JZUFRPLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOworCV9fc2V0X2JpdChDQVBBQklMSVRZX0xJTktfVFVOSU5HLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOworCV9fc2V0X2JpdChSRVFVSVJFX0hUX1RYX0RFU0MsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CisJX19zZXRfYml0KFJFUVVJUkVfVFhTVEFUVVNfRklGTywgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKKwlfX3NldF9iaXQoUkVRVUlSRV9QU19BVVRPV0FLRSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKKworCXNldHVwX3RpbWVyKCZydDJ4MDBkZXYtPnR4c3RhdHVzX3RpbWVyLAorCQkgICAgcnQyODAwdXNiX3R4X3N0YV9maWZvX3RpbWVvdXQsCisJCSAgICAodW5zaWduZWQgbG9uZykgcnQyeDAwZGV2KTsKIAogCS8qCiAJICogU2V0IHRoZSByc3NpIG9mZnNldC4KQEAgLTYwMiw2ICs2NzUsNyBAQAogCS5hbXBkdV9hY3Rpb24JCT0gcnQyODAwX2FtcGR1X2FjdGlvbiwKIAkuZmx1c2gJCQk9IHJ0MngwMG1hY19mbHVzaCwKIAkuZ2V0X3N1cnZleQkJPSBydDI4MDBfZ2V0X3N1cnZleSwKKwkuZ2V0X3JpbmdwYXJhbQkJPSBydDJ4MDBtYWNfZ2V0X3JpbmdwYXJhbSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnQyODAwX29wcyBydDI4MDB1c2JfcnQyODAwX29wcyA9IHsKQEAgLTYzMCwxMSArNzA0LDEzIEBACiAJLmxpbmtfc3RhdHMJCT0gcnQyODAwX2xpbmtfc3RhdHMsCiAJLnJlc2V0X3R1bmVyCQk9IHJ0MjgwMF9yZXNldF90dW5lciwKIAkubGlua190dW5lcgkJPSBydDI4MDBfbGlua190dW5lciwKKwkuZ2Fpbl9jYWxpYnJhdGlvbgk9IHJ0MjgwMF9nYWluX2NhbGlicmF0aW9uLAogCS53YXRjaGRvZwkJPSBydDI4MDB1c2Jfd2F0Y2hkb2csCiAJLnN0YXJ0X3F1ZXVlCQk9IHJ0MjgwMHVzYl9zdGFydF9xdWV1ZSwKIAkua2lja19xdWV1ZQkJPSBydDJ4MDB1c2Jfa2lja19xdWV1ZSwKIAkuc3RvcF9xdWV1ZQkJPSBydDI4MDB1c2Jfc3RvcF9xdWV1ZSwKIAkuZmx1c2hfcXVldWUJCT0gcnQyeDAwdXNiX2ZsdXNoX3F1ZXVlLAorCS50eF9kbWFfZG9uZQkJPSBydDI4MDB1c2JfdHhfZG1hX2RvbmUsCiAJLndyaXRlX3R4X2Rlc2MJCT0gcnQyODAwdXNiX3dyaXRlX3R4X2Rlc2MsCiAJLndyaXRlX3R4X2RhdGEJCT0gcnQyODAwdXNiX3dyaXRlX3R4X2RhdGEsCiAJLndyaXRlX2JlYWNvbgkJPSBydDI4MDBfd3JpdGVfYmVhY29uLApAQCAtNjk1LDI5NCArNzcxLDM0MCBAQAogICovCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgcnQyODAwdXNiX2RldmljZV90YWJsZVtdID0gewogCS8qIEFib2NvbSAqLwotCXsgVVNCX0RFVklDRSgweDA3YjgsIDB4Mjg3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwN2I4LCAweDI3NzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDdiOCwgMHgzMDcwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA3YjgsIDB4MzA3MSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwN2I4LCAweDMwNzIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTQ4MiwgMHgzYzA5KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA3YjgsIDB4Mjg3MCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2I4LCAweDI3NzApIH0sCisJeyBVU0JfREVWSUNFKDB4MDdiOCwgMHgzMDcwKSB9LAorCXsgVVNCX0RFVklDRSgweDA3YjgsIDB4MzA3MSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2I4LCAweDMwNzIpIH0sCisJeyBVU0JfREVWSUNFKDB4MTQ4MiwgMHgzYzA5KSB9LAogCS8qIEFpclRpZXMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxZWRhLCAweDIzMTApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MWVkYSwgMHgyMDEyKSB9LAorCXsgVVNCX0RFVklDRSgweDFlZGEsIDB4MjMxMCkgfSwKIAkvKiBBbGx3aW4gKi8KLQl7IFVTQl9ERVZJQ0UoMHg4NTE2LCAweDIwNzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4ODUxNiwgMHgyNzcwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDg1MTYsIDB4Mjg3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHg4NTE2LCAweDMwNzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4ODUxNiwgMHgzMDcxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDg1MTYsIDB4MzA3MiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHg4NTE2LCAweDIwNzApIH0sCisJeyBVU0JfREVWSUNFKDB4ODUxNiwgMHgyNzcwKSB9LAorCXsgVVNCX0RFVklDRSgweDg1MTYsIDB4Mjg3MCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHg4NTE2LCAweDMwNzApIH0sCisJeyBVU0JfREVWSUNFKDB4ODUxNiwgMHgzMDcxKSB9LAorCXsgVVNCX0RFVklDRSgweDg1MTYsIDB4MzA3MikgfSwKKwkvKiBBbHBoYSBOZXR3b3JrcyAqLworCXsgVVNCX0RFVklDRSgweDE0YjIsIDB4M2MwNikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNGIyLCAweDNjMDcpIH0sCisJeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzA5KSB9LAorCXsgVVNCX0RFVklDRSgweDE0YjIsIDB4M2MxMikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNGIyLCAweDNjMjMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzI1KSB9LAorCXsgVVNCX0RFVklDRSgweDE0YjIsIDB4M2MyNykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNGIyLCAweDNjMjgpIH0sCisJeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzJjKSB9LAogCS8qIEFtaXQgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNWM1LCAweDAwMDgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTVjNSwgMHgwMDA4KSB9LAogCS8qIEFza2V5ICovCi0JeyBVU0JfREVWSUNFKDB4MTY5MCwgMHgwNzQwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE2OTAsIDB4MDc0MCkgfSwKIAkvKiBBU1VTICovCi0JeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzMxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTczMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE3NDIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzg0KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE3NjEsIDB4MGIwNSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE3MzEpIH0sCisJeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzMyKSB9LAorCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTc0MikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE3ODQpIH0sCisJeyBVU0JfREVWSUNFKDB4MTc2MSwgMHgwYjA1KSB9LAogCS8qIEF6dXJlV2F2ZSAqLwotCXsgVVNCX0RFVklDRSgweDEzZDMsIDB4MzI0NyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDMyNzMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzMzA1KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDEzZDMsIDB4MzMwNyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDMzMjEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzMjQ3KSB9LAorCXsgVVNCX0RFVklDRSgweDEzZDMsIDB4MzI3MykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDMzMDUpIH0sCisJeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzMzA3KSB9LAorCXsgVVNCX0RFVklDRSgweDEzZDMsIDB4MzMyMSkgfSwKIAkvKiBCZWxraW4gKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDgwNTMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDUwZCwgMHg4MDVjKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4ODE1YyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDgyNWIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDUwZCwgMHg5MzVhKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4OTM1YiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDgwNTMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDUwZCwgMHg4MDVjKSB9LAorCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4ODE1YykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDgyNWIpIH0sCisJeyBVU0JfREVWSUNFKDB4MDUwZCwgMHg5MzVhKSB9LAorCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4OTM1YikgfSwKIAkvKiBCdWZmYWxvICovCi0JeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMGU4KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDE2ZiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQkvKiBDb25jZXB0cm9uaWMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNGIyLCAweDNjMDYpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzA3KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE0YjIsIDB4M2MwOSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNGIyLCAweDNjMTIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzIzKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE0YjIsIDB4M2MyNSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNGIyLCAweDNjMjcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzI4KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDBlOCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAxNmYpIH0sCisJeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMWEyKSB9LAogCS8qIENvcmVnYSAqLwotCXsgVVNCX0RFVklDRSgweDA3YWEsIDB4MDAyZiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwN2FhLCAweDAwM2MpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDdhYSwgMHgwMDNmKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE4YzUsIDB4MDAxMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2FhLCAweDAwMmYpIH0sCisJeyBVU0JfREVWSUNFKDB4MDdhYSwgMHgwMDNjKSB9LAorCXsgVVNCX0RFVklDRSgweDA3YWEsIDB4MDAzZikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxOGM1LCAweDAwMTIpIH0sCiAJLyogRC1MaW5rICovCi0JeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzA5KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MwYSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMGQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzBlKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MwZiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMTEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzE2KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MwOSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMGEpIH0sCisJeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzBkKSB9LAorCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MwZSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMGYpIH0sCisJeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzExKSB9LAorCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MxNikgfSwKIAkvKiBEcmF5dGVrICovCi0JeyBVU0JfREVWSUNFKDB4MDdmYSwgMHg3NzEyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA3ZmEsIDB4NzcxMikgfSwKIAkvKiBFZGltYXggKi8KLQl7IFVTQl9ERVZJQ0UoMHg3MzkyLCAweDc3MTEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4NzM5MiwgMHg3NzE3KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDczOTIsIDB4NzcxOCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHg3MzkyLCAweDc3MTEpIH0sCisJeyBVU0JfREVWSUNFKDB4NzM5MiwgMHg3NzE3KSB9LAorCXsgVVNCX0RFVklDRSgweDczOTIsIDB4NzcxOCkgfSwKIAkvKiBFbmNvcmUgKi8KLQl7IFVTQl9ERVZJQ0UoMHgyMDNkLCAweDE0ODApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MjAzZCwgMHgxNGE5KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDIwM2QsIDB4MTQ4MCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDNkLCAweDE0YTkpIH0sCiAJLyogRW5HZW5pdXMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDk3MDEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTc0MCwgMHg5NzAyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4OTcwMyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDk3MDUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTc0MCwgMHg5NzA2KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4OTcwNyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDk3MDgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTc0MCwgMHg5NzA5KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4OTcwMSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDk3MDIpIH0sCisJeyBVU0JfREVWSUNFKDB4MTc0MCwgMHg5NzAzKSB9LAorCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4OTcwNSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDk3MDYpIH0sCisJeyBVU0JfREVWSUNFKDB4MTc0MCwgMHg5NzA3KSB9LAorCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4OTcwOCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDk3MDkpIH0sCisJLyogR2VtdGVrICovCisJeyBVU0JfREVWSUNFKDB4MTVhOSwgMHgwMDEyKSB9LAogCS8qIEdpZ2FieXRlICovCi0JeyBVU0JfREVWSUNFKDB4MTA0NCwgMHg4MDBiKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDEwNDQsIDB4ODAwZCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxMDQ0LCAweDgwMGIpIH0sCisJeyBVU0JfREVWSUNFKDB4MTA0NCwgMHg4MDBkKSB9LAogCS8qIEhhd2tpbmcgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwZTY2LCAweDAwMDEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGU2NiwgMHgwMDAzKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBlNjYsIDB4MDAwOSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZTY2LCAweDAwMGIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGU2NiwgMHgwMDEzKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBlNjYsIDB4MDAxNyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZTY2LCAweDAwMTgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGU2NiwgMHgwMDAxKSB9LAorCXsgVVNCX0RFVklDRSgweDBlNjYsIDB4MDAwMykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZTY2LCAweDAwMDkpIH0sCisJeyBVU0JfREVWSUNFKDB4MGU2NiwgMHgwMDBiKSB9LAorCXsgVVNCX0RFVklDRSgweDBlNjYsIDB4MDAxMykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZTY2LCAweDAwMTcpIH0sCisJeyBVU0JfREVWSUNFKDB4MGU2NiwgMHgwMDE4KSB9LAogCS8qIEktTyBEQVRBICovCi0JeyBVU0JfREVWSUNFKDB4MDRiYiwgMHgwOTQ1KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA0YmIsIDB4MDk0NyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNGJiLCAweDA5NDgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDRiYiwgMHgwOTQ1KSB9LAorCXsgVVNCX0RFVklDRSgweDA0YmIsIDB4MDk0NykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNGJiLCAweDA5NDgpIH0sCiAJLyogTGlua3N5cyAqLwotCXsgVVNCX0RFVklDRSgweDE3MzcsIDB4MDA3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNzM3LCAweDAwNzEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTNiMSwgMHgwMDMxKSB9LAorCXsgVVNCX0RFVklDRSgweDE3MzcsIDB4MDA3MCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNzM3LCAweDAwNzEpIH0sCiAJLyogTG9naXRlYyAqLwotCXsgVVNCX0RFVklDRSgweDA3ODksIDB4MDE2MiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNzg5LCAweDAxNjMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDc4OSwgMHgwMTY0KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA3ODksIDB4MDE2NiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNzg5LCAweDAxNjIpIH0sCisJeyBVU0JfREVWSUNFKDB4MDc4OSwgMHgwMTYzKSB9LAorCXsgVVNCX0RFVklDRSgweDA3ODksIDB4MDE2NCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNzg5LCAweDAxNjYpIH0sCiAJLyogTW90b3JvbGEgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMDBkLCAweDkwMzEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTAwZCwgMHg5MDMxKSB9LAogCS8qIE1TSSAqLwotCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4MzgyMCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDM4MjEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRiMCwgMHgzODIyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4Mzg3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDM4NzEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRiMCwgMHg2ODk5KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4ODIxYSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDgyMmEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRiMCwgMHg4MjJiKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4ODIyYyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDg3MGEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRiMCwgMHg4NzFhKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4ODcxYiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDg3MWMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRiMCwgMHg4OTlhKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4MzgyMCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDM4MjEpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRiMCwgMHgzODIyKSB9LAorCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4Mzg3MCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDM4NzEpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRiMCwgMHg2ODk5KSB9LAorCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4ODIxYSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDgyMmEpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRiMCwgMHg4MjJiKSB9LAorCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4ODIyYykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDg3MGEpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRiMCwgMHg4NzFhKSB9LAorCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4ODcxYikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDg3MWMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRiMCwgMHg4OTlhKSB9LAogCS8qIFBhcmEgKi8KLQl7IFVTQl9ERVZJQ0UoMHgyMGI4LCAweDg4ODgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MjBiOCwgMHg4ODg4KSB9LAogCS8qIFBlZ2F0cm9uICovCi0JeyBVU0JfREVWSUNFKDB4MWQ0ZCwgMHgwMDBjKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDFkNGQsIDB4MDAwZSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxZDRkLCAweDAwMTEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MWQ0ZCwgMHgwMDBjKSB9LAorCXsgVVNCX0RFVklDRSgweDFkNGQsIDB4MDAwZSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxZDRkLCAweDAwMTEpIH0sCiAJLyogUGhpbGlwcyAqLwotCXsgVVNCX0RFVklDRSgweDA0NzEsIDB4MjAwZiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNDcxLCAweDIwMGYpIH0sCiAJLyogUGxhbmV4ICovCi0JeyBVU0JfREVWSUNFKDB4MjAxOSwgMHhhYjI1KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDIwMTksIDB4ZWQwNiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDE5LCAweGFiMjUpIH0sCisJeyBVU0JfREVWSUNFKDB4MjAxOSwgMHhlZDA2KSB9LAogCS8qIFF1YW50YSAqLwotCXsgVVNCX0RFVklDRSgweDFhMzIsIDB4MDMwNCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxYTMyLCAweDAzMDQpIH0sCiAJLyogUmFsaW5rICovCi0JeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHgyMDcwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4Mjc3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDI4NzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHgzMDcwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MzA3MSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDMwNzIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHgyMDcwKSB9LAorCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4Mjc3MCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDI4NzApIH0sCisJeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHgzMDcwKSB9LAorCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MzA3MSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDMwNzIpIH0sCiAJLyogU2Ftc3VuZyAqLwotCXsgVVNCX0RFVklDRSgweDA0ZTgsIDB4MjAxOCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNGU4LCAweDIwMTgpIH0sCiAJLyogU2llbWVucyAqLwotCXsgVVNCX0RFVklDRSgweDEyOWIsIDB4MTgyOCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxMjliLCAweDE4MjgpIH0sCiAJLyogU2l0ZWNvbSAqLwotCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAxNyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwMmIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDJjKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAyZCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwMzkpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDNiKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAzZCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwM2UpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDNmKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDA0MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwNDIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDQ3KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDA0OCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwMTcpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDJiKSB9LAorCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAyYykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwMmQpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDM5KSB9LAorCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAzYikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwM2QpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDNlKSB9LAorCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAzZikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwNDApIH0sCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDQyKSB9LAorCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDA0NykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwNDgpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDUxKSB9LAorCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDA1ZikgfSwKIAkvKiBTTUMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweDY2MTgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDgzYSwgMHg3NTExKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4NzUxMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweDc1MjIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDgzYSwgMHg4NTIyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4YTYxOCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweGE3MDEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDgzYSwgMHhhNzAyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4YTcwMyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweGI1MjIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDgzYSwgMHg2NjE4KSB9LAorCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4NzUxMSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweDc1MTIpIH0sCisJeyBVU0JfREVWSUNFKDB4MDgzYSwgMHg3NTIyKSB9LAorCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4ODUyMikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweGE2MTgpIH0sCisJeyBVU0JfREVWSUNFKDB4MDgzYSwgMHhhNzAxKSB9LAorCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4YTcwMikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweGE3MDMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDgzYSwgMHhiNTIyKSB9LAogCS8qIFNwYXJrbGFuICovCi0JeyBVU0JfREVWSUNFKDB4MTVhOSwgMHgwMDA2KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE1YTksIDB4MDAwNikgfSwKIAkvKiBTd2VleCAqLwotCXsgVVNCX0RFVklDRSgweDE3N2YsIDB4MDMwMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQkvKiBVLU1lZGlhKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNTdlLCAweDMwMGUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTc3ZiwgMHgwMzAyKSB9LAorCS8qIFUtTWVkaWEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNTdlLCAweDMwMGUpIH0sCisJeyBVU0JfREVWSUNFKDB4MTU3ZSwgMHgzMDEzKSB9LAogCS8qIFpDT00gKi8KLQl7IFVTQl9ERVZJQ0UoMHgwY2RlLCAweDAwMjIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGNkZSwgMHgwMDI1KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDBjZGUsIDB4MDAyMikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwY2RlLCAweDAwMjUpIH0sCiAJLyogWmlud2VsbCAqLwotCXsgVVNCX0RFVklDRSgweDVhNTcsIDB4MDI4MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHg1YTU3LCAweDAyODIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4NWE1NywgMHgwMjgzKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDVhNTcsIDB4NTI1NyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHg1YTU3LCAweDAyODApIH0sCisJeyBVU0JfREVWSUNFKDB4NWE1NywgMHgwMjgyKSB9LAorCXsgVVNCX0RFVklDRSgweDVhNTcsIDB4MDI4MykgfSwKKwl7IFVTQl9ERVZJQ0UoMHg1YTU3LCAweDUyNTcpIH0sCiAJLyogWnl4ZWwgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNTg2LCAweDM0MTYpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDU4NiwgMHgzNDE2KSB9LAorCXsgVVNCX0RFVklDRSgweDA1ODYsIDB4MzQxOCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTg2LCAweDM0MWUpIH0sCisJeyBVU0JfREVWSUNFKDB4MDU4NiwgMHgzNDNlKSB9LAogI2lmZGVmIENPTkZJR19SVDI4MDBVU0JfUlQzM1hYCiAJLyogUmFsaW5rICovCi0JeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHgzMzcwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4ODA3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDMzNzApIH0sCisJeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHg4MDcwKSB9LAogCS8qIFNpdGVjb20gKi8KLQl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwNTApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDUwKSB9LAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1JUMjgwMFVTQl9SVDM1WFgKIAkvKiBBbGx3aW4gKi8KLQl7IFVTQl9ERVZJQ0UoMHg4NTE2LCAweDM1NzIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4ODUxNiwgMHgzNTcyKSB9LAogCS8qIEFza2V5ICovCi0JeyBVU0JfREVWSUNFKDB4MTY5MCwgMHgwNzQ0KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE2OTAsIDB4MDc0NCkgfSwKIAkvKiBDaXNjbyAqLwotCXsgVVNCX0RFVklDRSgweDE2N2IsIDB4NDAwMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNjdiLCAweDQwMDEpIH0sCiAJLyogRW5HZW5pdXMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDk4MDEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTc0MCwgMHg5ODAxKSB9LAogCS8qIEktTyBEQVRBICovCi0JeyBVU0JfREVWSUNFKDB4MDRiYiwgMHgwOTQ0KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA0YmIsIDB4MDk0NCkgfSwKKwkvKiBMaW5rc3lzICovCisJeyBVU0JfREVWSUNFKDB4MTNiMSwgMHgwMDJmKSB9LAorCXsgVVNCX0RFVklDRSgweDE3MzcsIDB4MDA3OSkgfSwKIAkvKiBSYWxpbmsgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDM1NzIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHgzNTcyKSB9LAogCS8qIFNpdGVjb20gKi8KLQl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwNDEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDQxKSB9LAogCS8qIFRvc2hpYmEgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDBhMDcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDkzMCwgMHgwYTA3KSB9LAogCS8qIFppbndlbGwgKi8KLQl7IFVTQl9ERVZJQ0UoMHg1YTU3LCAweDAyODQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4NWE1NywgMHgwMjg0KSB9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX1JUMjgwMFVTQl9SVDUzWFgKKwkvKiBBenVyZXdhdmUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDMzMjkpIH0sCisJeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzMzY1KSB9LAorCS8qIFJhbGluayAqLworCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4NTM3MCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDUzNzIpIH0sCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUlQyODAwVVNCX1VOS05PV04KIAkvKgogCSAqIFVuY2xlYXIgd2hhdCBraW5kIG9mIGRldmljZXMgdGhlc2UgYXJlICh0aGV5IGFyZW4ndCBzdXBwb3J0ZWQgYnkgdGhlCiAJICogdmVuZG9yIGxpbnV4IGRyaXZlcikuCiAJICovCisJLyogQWJvY29tICovCisJeyBVU0JfREVWSUNFKDB4MDdiOCwgMHgzMDczKSB9LAorCXsgVVNCX0RFVklDRSgweDA3YjgsIDB4MzA3NCkgfSwKKwkvKiBBbHBoYSBOZXR3b3JrcyAqLworCXsgVVNCX0RFVklDRSgweDE0YjIsIDB4M2MwOCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNGIyLCAweDNjMTEpIH0sCiAJLyogQW1pZ28gKi8KLQl7IFVTQl9ERVZJQ0UoMHgwZTBiLCAweDkwMzEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGUwYiwgMHg5MDQxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDBlMGIsIDB4OTAzMSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZTBiLCAweDkwNDEpIH0sCiAJLyogQVNVUyAqLwotCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTc2MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE3NjEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzkwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTY2YSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE3NjApIH0sCisJeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzYxKSB9LAorCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTc5MCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE3OWQpIH0sCiAJLyogQXp1cmVXYXZlICovCi0JeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzMjYyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDEzZDMsIDB4MzI4NCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDMzMjIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzMjYyKSB9LAorCXsgVVNCX0RFVklDRSgweDEzZDMsIDB4MzI4NCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDMzMjIpIH0sCiAJLyogQmVsa2luICovCi0JeyBVU0JfREVWSUNFKDB4MDUwZCwgMHg4MjVhKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4MTAwMykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDgyNWEpIH0sCiAJLyogQnVmZmFsbyAqLwotCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDEyZSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAxNDgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMTUwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDE1ZCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQkvKiBDb25jZXB0cm9uaWMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNGIyLCAweDNjMDgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzExKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDEyZSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAxNDgpIH0sCisJeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMTUwKSB9LAorCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDE1ZCkgfSwKIAkvKiBDb3JlZ2EgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwN2FhLCAweDAwNDEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDdhYSwgMHgwMDQyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE4YzUsIDB4MDAwOCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2FhLCAweDAwNDEpIH0sCisJeyBVU0JfREVWSUNFKDB4MDdhYSwgMHgwMDQyKSB9LAorCXsgVVNCX0RFVklDRSgweDE4YzUsIDB4MDAwOCkgfSwKIAkvKiBELUxpbmsgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMGIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzEzKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MxNSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMTcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzBiKSB9LAorCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MxMykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMTUpIH0sCisJeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzE3KSB9LAorCXsgVVNCX0RFVklDRSgweDIwMDEsIDB4M2MxNykgfSwKIAkvKiBFZGltYXggKi8KLQl7IFVTQl9ERVZJQ0UoMHg3MzkyLCAweDQwODUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4NzM5MiwgMHg0MDg1KSB9LAorCXsgVVNCX0RFVklDRSgweDczOTIsIDB4NzcyMikgfSwKIAkvKiBFbmNvcmUgKi8KLQl7IFVTQl9ERVZJQ0UoMHgyMDNkLCAweDE0YTEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MjAzZCwgMHgxNGExKSB9LAogCS8qIEdlbXRlayAqLwotCXsgVVNCX0RFVklDRSgweDE1YTksIDB4MDAxMCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNWE5LCAweDAwMTApIH0sCiAJLyogR2lnYWJ5dGUgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMDQ0LCAweDgwMGMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTA0NCwgMHg4MDBjKSB9LAorCS8qIEh1YXdlaSAqLworCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4ZjEwMSkgfSwKKwkvKiBJLU8gREFUQSAqLworCXsgVVNCX0RFVklDRSgweDA0YmIsIDB4MDk0YikgfSwKIAkvKiBMZXZlbE9uZSAqLwotCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4MDYwNSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDA2MTUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTc0MCwgMHgwNjA1KSB9LAorCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4MDYxNSkgfSwKIAkvKiBMaW5rc3lzICovCi0JeyBVU0JfREVWSUNFKDB4MTczNywgMHgwMDc3KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE3MzcsIDB4MDA3OCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNzM3LCAweDAwNzkpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTczNywgMHgwMDc3KSB9LAorCXsgVVNCX0RFVklDRSgweDE3MzcsIDB4MDA3OCkgfSwKKwkvKiBMb2dpdGVjICovCisJeyBVU0JfREVWSUNFKDB4MDc4OSwgMHgwMTY4KSB9LAorCXsgVVNCX0RFVklDRSgweDA3ODksIDB4MDE2OSkgfSwKIAkvKiBNb3Rvcm9sYSAqLwotCXsgVVNCX0RFVklDRSgweDEwMGQsIDB4OTAzMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxMDBkLCAweDkwMzIpIH0sCiAJLyogT3Zpc2xpbmsgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxYjc1LCAweDMwNzEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MWI3NSwgMHgzMDcyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDFiNzUsIDB4MzA3MSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxYjc1LCAweDMwNzIpIH0sCiAJLyogUGVnYXRyb24gKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNWE2LCAweDAxMDEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MWQ0ZCwgMHgwMDAyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDFkNGQsIDB4MDAxMCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNWE2LCAweDAxMDEpIH0sCisJeyBVU0JfREVWSUNFKDB4MWQ0ZCwgMHgwMDAyKSB9LAorCXsgVVNCX0RFVklDRSgweDFkNGQsIDB4MDAxMCkgfSwKIAkvKiBQbGFuZXggKi8KLQl7IFVTQl9ERVZJQ0UoMHgyMDE5LCAweDUyMDEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MjAxOSwgMHhhYjI0KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDIwMTksIDB4NTIwMSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDE5LCAweGFiMjQpIH0sCiAJLyogUWNvbSAqLwotCXsgVVNCX0RFVklDRSgweDE4ZTgsIDB4NjI1OSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxOGU4LCAweDYyNTkpIH0sCisJLyogUmFkaW9TaGFjayAqLworCXsgVVNCX0RFVklDRSgweDA4YjksIDB4MTE5NykgfSwKKwkvKiBTaXRlY29tICovCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDNjKSB9LAorCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDA0YSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwNGQpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDUzKSB9LAorCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDA2MCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwNjIpIH0sCiAJLyogU01DICovCi0JeyBVU0JfREVWSUNFKDB4MDgzYSwgMHhhNTEyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4YzUyMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweGQ1MjIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDgzYSwgMHhmNTExKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4YTUxMikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweGM1MjIpIH0sCisJeyBVU0JfREVWSUNFKDB4MDgzYSwgMHhkNTIyKSB9LAorCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4ZjUxMSkgfSwKIAkvKiBTd2VleCAqLwotCXsgVVNCX0RFVklDRSgweDE3N2YsIDB4MDE1MyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNzdmLCAweDAzMTMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTc3ZiwgMHgwMTUzKSB9LAorCXsgVVNCX0RFVklDRSgweDE3N2YsIDB4MDMxMykgfSwKIAkvKiBaeXhlbCAqLwotCXsgVVNCX0RFVklDRSgweDA1ODYsIDB4MzQxYSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTg2LCAweDM0MWEpIH0sCiAjZW5kaWYKIAl7IDAsIH0KIH07CkBAIC05OTUsMTAgKzExMTcsMTYgQEAKIE1PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV9SVDI4NzApOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCitzdGF0aWMgaW50IHJ0MjgwMHVzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdXNiX2ludGYsCisJCQkgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIHJ0MngwMHVzYl9wcm9iZSh1c2JfaW50ZiwgJnJ0MjgwMHVzYl9vcHMpOworfQorCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgcnQyODAwdXNiX2RyaXZlciA9IHsKIAkubmFtZQkJPSBLQlVJTERfTU9ETkFNRSwKIAkuaWRfdGFibGUJPSBydDI4MDB1c2JfZGV2aWNlX3RhYmxlLAotCS5wcm9iZQkJPSBydDJ4MDB1c2JfcHJvYmUsCisJLnByb2JlCQk9IHJ0MjgwMHVzYl9wcm9iZSwKIAkuZGlzY29ubmVjdAk9IHJ0MngwMHVzYl9kaXNjb25uZWN0LAogCS5zdXNwZW5kCT0gcnQyeDAwdXNiX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBydDJ4MDB1c2JfcmVzdW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMC5oCmluZGV4IDdmMTAyMzkuLmM0NDZkYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwLmgKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0LXBvbGxkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAKICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KIApAQCAtMzQ4LDYgKzM0OSwxMSBAQAogCSAqIHRvIGJyaW5nIHRoZSBkZXZpY2UvZHJpdmVyIGJhY2sgaW50byB0aGUgZGVzaXJlZCBzdGF0ZS4KIAkgKi8KIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHdhdGNoZG9nX3dvcms7CisKKwkvKgorCSAqIFdvcmsgc3RydWN0dXJlIGZvciBzY2hlZHVsaW5nIHBlcmlvZGljIEFHQyBhZGp1c3RtZW50cy4KKwkgKi8KKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGFnY193b3JrOwogfTsKIAogZW51bSBydDJ4MDBfZGVsYXllZF9mbGFncyB7CkBAIC01NTYsNiArNTYyLDcgQEAKIAkJCSAgICAgc3RydWN0IGxpbmtfcXVhbCAqcXVhbCk7CiAJdm9pZCAoKmxpbmtfdHVuZXIpIChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJICAgIHN0cnVjdCBsaW5rX3F1YWwgKnF1YWwsIGNvbnN0IHUzMiBjb3VudCk7CisJdm9pZCAoKmdhaW5fY2FsaWJyYXRpb24pIChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKIAogCS8qCiAJICogRGF0YSBxdWV1ZSBoYW5kbGVycy4KQEAgLTU2NCw3ICs1NzEsOCBAQAogCXZvaWQgKCpzdGFydF9xdWV1ZSkgKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSk7CiAJdm9pZCAoKmtpY2tfcXVldWUpIChzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpOwogCXZvaWQgKCpzdG9wX3F1ZXVlKSAoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlKTsKLQl2b2lkICgqZmx1c2hfcXVldWUpIChzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpOworCXZvaWQgKCpmbHVzaF9xdWV1ZSkgKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSwgYm9vbCBkcm9wKTsKKwl2b2lkICgqdHhfZG1hX2RvbmUpIChzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KTsKIAogCS8qCiAJICogVFggY29udHJvbCBoYW5kbGVycwpAQCAtNjM3LDExICs2NDUsMTEgQEAKIH07CiAKIC8qCi0gKiBydDJ4MDAgZGV2aWNlIGZsYWdzCisgKiBydDJ4MDAgc3RhdGUgZmxhZ3MKICAqLwotZW51bSBydDJ4MDBfZmxhZ3MgeworZW51bSBydDJ4MDBfc3RhdGVfZmxhZ3MgewogCS8qCi0JICogRGV2aWNlIHN0YXRlIGZsYWdzCisJICogRGV2aWNlIGZsYWdzCiAJICovCiAJREVWSUNFX1NUQVRFX1BSRVNFTlQsCiAJREVWSUNFX1NUQVRFX1JFR0lTVEVSRURfSFcsCkBAIC02NTEsNDAgKzY1OSw0NyBAQAogCURFVklDRV9TVEFURV9TQ0FOTklORywKIAogCS8qCi0JICogRHJpdmVyIHJlcXVpcmVtZW50cwotCSAqLwotCURSSVZFUl9SRVFVSVJFX0ZJUk1XQVJFLAotCURSSVZFUl9SRVFVSVJFX0JFQUNPTl9HVUFSRCwKLQlEUklWRVJfUkVRVUlSRV9BVElNX1FVRVVFLAotCURSSVZFUl9SRVFVSVJFX0RNQSwKLQlEUklWRVJfUkVRVUlSRV9DT1BZX0lWLAotCURSSVZFUl9SRVFVSVJFX0wyUEFELAotCURSSVZFUl9SRVFVSVJFX1RYU1RBVFVTX0ZJRk8sCi0JRFJJVkVSX1JFUVVJUkVfVEFTS0xFVF9DT05URVhULAotCURSSVZFUl9SRVFVSVJFX1NXX1NFUU5PLAotCURSSVZFUl9SRVFVSVJFX0hUX1RYX0RFU0MsCi0KLQkvKgotCSAqIERyaXZlciBmZWF0dXJlcwotCSAqLwotCUNPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwKLQlDT05GSUdfU1VQUE9SVF9IV19DUllQVE8sCi0JQ09ORklHX1NVUFBPUlRfUE9XRVJfTElNSVQsCi0JRFJJVkVSX1NVUFBPUlRfQ09OVFJPTF9GSUxURVJTLAotCURSSVZFUl9TVVBQT1JUX0NPTlRST0xfRklMVEVSX1BTUE9MTCwKLQlEUklWRVJfU1VQUE9SVF9QUkVfVEJUVF9JTlRFUlJVUFQsCi0JRFJJVkVSX1NVUFBPUlRfTElOS19UVU5JTkcsCi0JRFJJVkVSX1NVUFBPUlRfV0FUQ0hET0csCi0KLQkvKgogCSAqIERyaXZlciBjb25maWd1cmF0aW9uCiAJICovCi0JQ09ORklHX0ZSQU1FX1RZUEUsCi0JQ09ORklHX1JGX1NFUVVFTkNFLAotCUNPTkZJR19FWFRFUk5BTF9MTkFfQSwKLQlDT05GSUdfRVhURVJOQUxfTE5BX0JHLAotCUNPTkZJR19ET1VCTEVfQU5URU5OQSwKIAlDT05GSUdfQ0hBTk5FTF9IVDQwLAorCUNPTkZJR19QT1dFUlNBVklORywKK307CisKKy8qCisgKiBydDJ4MDAgY2FwYWJpbGl0eSBmbGFncworICovCitlbnVtIHJ0MngwMF9jYXBhYmlsaXR5X2ZsYWdzIHsKKwkvKgorCSAqIFJlcXVpcmVtZW50cworCSAqLworCVJFUVVJUkVfRklSTVdBUkUsCisJUkVRVUlSRV9CRUFDT05fR1VBUkQsCisJUkVRVUlSRV9BVElNX1FVRVVFLAorCVJFUVVJUkVfRE1BLAorCVJFUVVJUkVfQ09QWV9JViwKKwlSRVFVSVJFX0wyUEFELAorCVJFUVVJUkVfVFhTVEFUVVNfRklGTywKKwlSRVFVSVJFX1RBU0tMRVRfQ09OVEVYVCwKKwlSRVFVSVJFX1NXX1NFUU5PLAorCVJFUVVJUkVfSFRfVFhfREVTQywKKwlSRVFVSVJFX1BTX0FVVE9XQUtFLAorCisJLyoKKwkgKiBDYXBhYmlsaXRpZXMKKwkgKi8KKwlDQVBBQklMSVRZX0hXX0JVVFRPTiwKKwlDQVBBQklMSVRZX0hXX0NSWVBUTywKKwlDQVBBQklMSVRZX1BPV0VSX0xJTUlULAorCUNBUEFCSUxJVFlfQ09OVFJPTF9GSUxURVJTLAorCUNBUEFCSUxJVFlfQ09OVFJPTF9GSUxURVJfUFNQT0xMLAorCUNBUEFCSUxJVFlfUFJFX1RCVFRfSU5URVJSVVBULAorCUNBUEFCSUxJVFlfTElOS19UVU5JTkcsCisJQ0FQQUJJTElUWV9GUkFNRV9UWVBFLAorCUNBUEFCSUxJVFlfUkZfU0VRVUVOQ0UsCisJQ0FQQUJJTElUWV9FWFRFUk5BTF9MTkFfQSwKKwlDQVBBQklMSVRZX0VYVEVSTkFMX0xOQV9CRywKKwlDQVBBQklMSVRZX0RPVUJMRV9BTlRFTk5BLAorCUNBUEFCSUxJVFlfQlRfQ09FWElTVCwKIH07CiAKIC8qCkBAIC03MzMsMTMgKzc0OCwyMCBAQAogI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX0xFRFMgKi8KIAogCS8qCi0JICogRGV2aWNlIGZsYWdzLgotCSAqIEluIHRoZXNlIGZsYWdzIHRoZSBjdXJyZW50IHN0YXR1cyBhbmQgc29tZQotCSAqIG9mIHRoZSBkZXZpY2UgY2FwYWJpbGl0aWVzIGFyZSBzdG9yZWQuCisJICogRGV2aWNlIHN0YXRlIGZsYWdzLgorCSAqIEluIHRoZXNlIGZsYWdzIHRoZSBjdXJyZW50IHN0YXR1cyBpcyBzdG9yZWQuCisJICogQWNjZXNzIHRvIHRoZXNlIGZsYWdzIHNob3VsZCBvY2N1ciBhdG9taWNhbGx5LgogCSAqLwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKgorCSAqIERldmljZSBjYXBhYmlsdGl5IGZsYWdzLgorCSAqIEluIHRoZXNlIGZsYWdzIHRoZSBkZXZpY2UvZHJpdmVyIGNhcGFiaWxpdGllcyBhcmUgc3RvcmVkLgorCSAqIEFjY2VzcyB0byB0aGVzZSBmbGFncyBzaG91bGQgb2NjdXIgbm9uLWF0b21pY2FsbHkuCisJICovCisJdW5zaWduZWQgbG9uZyBjYXBfZmxhZ3M7CisKKwkvKgogCSAqIERldmljZSBpbmZvcm1hdGlvbiwgQnVzIElSUSBhbmQgbmFtZSAoUENJLCBTb0MpCiAJICovCiAJaW50IGlycTsKQEAgLTg1NSwxMCArODc3LDIwIEBACiAJdTggY2FsaWJyYXRpb25bMl07CiAKIAkvKgorCSAqIEFzc29jaWF0aW9uIGlkLgorCSAqLworCXUxNiBhaWQ7CisKKwkvKgogCSAqIEJlYWNvbiBpbnRlcnZhbC4KIAkgKi8KIAl1MTYgYmVhY29uX2ludDsKIAorCS8qKgorCSAqIFRpbWVzdGFtcCBvZiBsYXN0IHJlY2VpdmVkIGJlYWNvbgorCSAqLworCXVuc2lnbmVkIGxvbmcgbGFzdF9iZWFjb247CisKIAkvKgogCSAqIExvdyBsZXZlbCBzdGF0aXN0aWNzIHdoaWNoIHdpbGwgaGF2ZQogCSAqIHRvIGJlIGtlcHQgdXAgdG8gZGF0ZSB3aGlsZSBkZXZpY2UgaXMgcnVubmluZy4KQEAgLTg4Nyw2ICs5MTksMTEgQEAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHhkb25lX3dvcms7CiAKIAkvKgorCSAqIFBvd2Vyc2F2aW5nIHdvcmsKKwkgKi8KKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGF1dG93YWtldXBfd29yazsKKworCS8qCiAJICogRGF0YSBxdWV1ZSBhcnJheXMgZm9yIFJYLCBUWCwgQmVhY29uIGFuZCBBVElNLgogCSAqLwogCXVuc2lnbmVkIGludCBkYXRhX3F1ZXVlczsKQEAgLTkwNiw2ICs5NDMsMTEgQEAKIAlERUNMQVJFX0tGSUZPX1BUUih0eHN0YXR1c19maWZvLCB1MzIpOwogCiAJLyoKKwkgKiBUaW1lciB0byBlbnN1cmUgdHggc3RhdHVzIHJlcG9ydHMgYXJlIHJlYWQgKHJ0MjgwMHVzYikuCisJICovCisJc3RydWN0IHRpbWVyX2xpc3QgdHhzdGF0dXNfdGltZXI7CisKKwkvKgogCSAqIFRhc2tsZXQgZm9yIHByb2Nlc3NpbmcgdHggc3RhdHVzIHJlcG9ydHMgKHJ0MjgwMHBjaSkuCiAJICovCiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IHR4c3RhdHVzX3Rhc2tsZXQ7CkBAIC0xMjMwLDYgKzEyNzIsMTAgQEAKIAkJICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcyk7CiB2b2lkIHJ0MngwMG1hY19yZmtpbGxfcG9sbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiB2b2lkIHJ0MngwMG1hY19mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBkcm9wKTsKK2ludCBydDJ4MDBtYWNfc2V0X2FudGVubmEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiB0eF9hbnQsIHUzMiByeF9hbnQpOworaW50IHJ0MngwMG1hY19nZXRfYW50ZW5uYShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyICp0eF9hbnQsIHUzMiAqcnhfYW50KTsKK3ZvaWQgcnQyeDAwbWFjX2dldF9yaW5ncGFyYW0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgIHUzMiAqdHgsIHUzMiAqdHhfbWF4LCB1MzIgKnJ4LCB1MzIgKnJ4X21heCk7CiAKIC8qCiAgKiBEcml2ZXIgYWxsb2NhdGlvbiBoYW5kbGVycy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjb25maWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjb25maWcuYwppbmRleCA5NDE2ZTM2Li41NTUxODBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY29uZmlnLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNvbmZpZy5jCkBAIC0xMDAsNiArMTAwLDEwIEBACiAJZXJwLmJhc2ljX3JhdGVzID0gYnNzX2NvbmYtPmJhc2ljX3JhdGVzOwogCWVycC5iZWFjb25faW50ID0gYnNzX2NvbmYtPmJlYWNvbl9pbnQ7CiAKKwkvKiBVcGRhdGUgdGhlIEFJRCwgdGhpcyBpcyBuZWVkZWQgZm9yIGR5bmFtaWMgUFMgc3VwcG9ydCAqLworCXJ0MngwMGRldi0+YWlkID0gYnNzX2NvbmYtPmFzc29jID8gYnNzX2NvbmYtPmFpZCA6IDA7CisJcnQyeDAwZGV2LT5sYXN0X2JlYWNvbiA9IGJzc19jb25mLT50aW1lc3RhbXA7CisKIAkvKiBVcGRhdGUgZ2xvYmFsIGJlYWNvbiBpbnRlcnZhbCB0aW1lLCB0aGlzIGlzIG5lZWRlZCBmb3IgUFMgc3VwcG9ydCAqLwogCXJ0MngwMGRldi0+YmVhY29uX2ludCA9IGJzc19jb25mLT5iZWFjb25faW50OwogCkBAIC0xMDksMTUgKzExMyw2IEBACiAJcnQyeDAwZGV2LT5vcHMtPmxpYi0+Y29uZmlnX2VycChydDJ4MDBkZXYsICZlcnAsIGNoYW5nZWQpOwogfQogCi1zdGF0aWMgaW5saW5lCi1lbnVtIGFudGVubmEgcnQyeDAwbGliX2NvbmZpZ19hbnRlbm5hX2NoZWNrKGVudW0gYW50ZW5uYSBjdXJyZW50X2FudCwKLQkJCQkJICAgIGVudW0gYW50ZW5uYSBkZWZhdWx0X2FudCkKLXsKLQlpZiAoY3VycmVudF9hbnQgIT0gQU5URU5OQV9TV19ESVZFUlNJVFkpCi0JCXJldHVybiBjdXJyZW50X2FudDsKLQlyZXR1cm4gKGRlZmF1bHRfYW50ICE9IEFOVEVOTkFfU1dfRElWRVJTSVRZKSA/IGRlZmF1bHRfYW50IDogQU5URU5OQV9COwotfQotCiB2b2lkIHJ0MngwMGxpYl9jb25maWdfYW50ZW5uYShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJICAgICAgc3RydWN0IGFudGVubmFfc2V0dXAgY29uZmlnKQogewpAQCAtMTI2LDE5ICsxMjEsMzUgQEAKIAlzdHJ1Y3QgYW50ZW5uYV9zZXR1cCAqYWN0aXZlID0gJnJ0MngwMGRldi0+bGluay5hbnQuYWN0aXZlOwogCiAJLyoKLQkgKiBGYWlsc2FmZTogTWFrZSBzdXJlIHdlIGFyZSBub3Qgc2VuZGluZyB0aGUKLQkgKiBBTlRFTk5BX1NXX0RJVkVSU0lUWSBzdGF0ZSB0byB0aGUgZHJpdmVyLgotCSAqIElmIHRoYXQgaGFwcGVucywgZmFsbGJhY2sgdG8gaGFyZHdhcmUgZGVmYXVsdHMsCi0JICogb3Igb3VyIG93biBkZWZhdWx0LgorCSAqIFdoZW4gdGhlIGNhbGxlciB0cmllcyB0byBzZW5kIHRoZSBTVyBkaXZlcnNpdHksCisJICogd2UgbXVzdCB1cGRhdGUgdGhlIEFOVEVOTkFfUlhfRElWRVJTSVRZIGZsYWcgdG8KKwkgKiBlbmFibGUgdGhlIGFudGVubmEgZGl2ZXJzaXR5IGluIHRoZSBsaW5rIHR1bmVyLgorCSAqCisJICogU2Vjb25kbHksIHdlIG11c3QgZ3VhcmVudGVlIHdlIG5ldmVyIHNlbmQgdGhlCisJICogc29mdHdhcmUgYW50ZW5uYSBkaXZlcnNpdHkgY29tbWFuZCB0byB0aGUgZHJpdmVyLgogCSAqLwotCWlmICghKGFudC0+ZmxhZ3MgJiBBTlRFTk5BX1JYX0RJVkVSU0lUWSkpCi0JCWNvbmZpZy5yeCA9IHJ0MngwMGxpYl9jb25maWdfYW50ZW5uYV9jaGVjayhjb25maWcucngsIGRlZi0+cngpOwotCWVsc2UgaWYgKGNvbmZpZy5yeCA9PSBBTlRFTk5BX1NXX0RJVkVSU0lUWSkKKwlpZiAoIShhbnQtPmZsYWdzICYgQU5URU5OQV9SWF9ESVZFUlNJVFkpKSB7CisJCWlmIChjb25maWcucnggPT0gQU5URU5OQV9TV19ESVZFUlNJVFkpIHsKKwkJCWFudC0+ZmxhZ3MgfD0gQU5URU5OQV9SWF9ESVZFUlNJVFk7CisKKwkJCWlmIChkZWYtPnJ4ID09IEFOVEVOTkFfU1dfRElWRVJTSVRZKQorCQkJCWNvbmZpZy5yeCA9IEFOVEVOTkFfQjsKKwkJCWVsc2UKKwkJCQljb25maWcucnggPSBkZWYtPnJ4OworCQl9CisJfSBlbHNlIGlmIChjb25maWcucnggPT0gQU5URU5OQV9TV19ESVZFUlNJVFkpCiAJCWNvbmZpZy5yeCA9IGFjdGl2ZS0+cng7CiAKLQlpZiAoIShhbnQtPmZsYWdzICYgQU5URU5OQV9UWF9ESVZFUlNJVFkpKQotCQljb25maWcudHggPSBydDJ4MDBsaWJfY29uZmlnX2FudGVubmFfY2hlY2soY29uZmlnLnR4LCBkZWYtPnR4KTsKLQllbHNlIGlmIChjb25maWcudHggPT0gQU5URU5OQV9TV19ESVZFUlNJVFkpCisJaWYgKCEoYW50LT5mbGFncyAmIEFOVEVOTkFfVFhfRElWRVJTSVRZKSkgeworCQlpZiAoY29uZmlnLnR4ID09IEFOVEVOTkFfU1dfRElWRVJTSVRZKSB7CisJCQlhbnQtPmZsYWdzIHw9IEFOVEVOTkFfVFhfRElWRVJTSVRZOworCisJCQlpZiAoZGVmLT50eCA9PSBBTlRFTk5BX1NXX0RJVkVSU0lUWSkKKwkJCQljb25maWcudHggPSBBTlRFTk5BX0I7CisJCQllbHNlCisJCQkJY29uZmlnLnR4ID0gZGVmLT50eDsKKwkJfQorCX0gZWxzZSBpZiAoY29uZmlnLnR4ID09IEFOVEVOTkFfU1dfRElWRVJTSVRZKQogCQljb25maWcudHggPSBhY3RpdmUtPnR4OwogCiAJLyoKQEAgLTE2MywxMiArMTc0LDQzIEBACiAJCXJ0MngwMHF1ZXVlX3N0YXJ0X3F1ZXVlKHJ0MngwMGRldi0+cngpOwogfQogCitzdGF0aWMgdTE2IHJ0MngwMGh0X2NlbnRlcl9jaGFubmVsKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKQoreworCXN0cnVjdCBod19tb2RlX3NwZWMgKnNwZWMgPSAmcnQyeDAwZGV2LT5zcGVjOworCWludCBjZW50ZXJfY2hhbm5lbDsKKwl1MTYgaTsKKworCS8qCisJICogSW5pdGlhbGl6ZSBjZW50ZXIgY2hhbm5lbCB0byBjdXJyZW50IGNoYW5uZWwuCisJICovCisJY2VudGVyX2NoYW5uZWwgPSBzcGVjLT5jaGFubmVsc1tjb25mLT5jaGFubmVsLT5od192YWx1ZV0uY2hhbm5lbDsKKworCS8qCisJICogQWRqdXN0IGNlbnRlciBjaGFubmVsIHRvIEhUNDArIGFuZCBIVDQwLSBvcGVyYXRpb24uCisJICovCisJaWYgKGNvbmZfaXNfaHQ0MF9wbHVzKGNvbmYpKQorCQljZW50ZXJfY2hhbm5lbCArPSAyOworCWVsc2UgaWYgKGNvbmZfaXNfaHQ0MF9taW51cyhjb25mKSkKKwkJY2VudGVyX2NoYW5uZWwgLT0gKGNlbnRlcl9jaGFubmVsID09IDE0KSA/IDEgOiAyOworCisJZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9jaGFubmVsczsgaSsrKQorCQlpZiAoc3BlYy0+Y2hhbm5lbHNbaV0uY2hhbm5lbCA9PSBjZW50ZXJfY2hhbm5lbCkKKwkJCXJldHVybiBpOworCisJV0FSTl9PTigxKTsKKwlyZXR1cm4gY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWU7Cit9CisKIHZvaWQgcnQyeDAwbGliX2NvbmZpZyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYsCiAJCSAgICAgIHVuc2lnbmVkIGludCBpZWVlODAyMTFfZmxhZ3MpCiB7CiAJc3RydWN0IHJ0MngwMGxpYl9jb25mIGxpYmNvbmY7CiAJdTE2IGh3X3ZhbHVlOworCXUxNiBhdXRvd2FrZV90aW1lb3V0OworCXUxNiBiZWFjb25faW50OworCXUxNiBiZWFjb25fZGlmZjsKIAogCW1lbXNldCgmbGliY29uZiwgMCwgc2l6ZW9mKGxpYmNvbmYpKTsKIApAQCAtMTc2LDEwICsyMTgsMTAgQEAKIAogCWlmIChpZWVlODAyMTFfZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCkgewogCQlpZiAoY29uZl9pc19odDQwKGNvbmYpKSB7Ci0JCQlfX3NldF9iaXQoQ09ORklHX0NIQU5ORUxfSFQ0MCwgJnJ0MngwMGRldi0+ZmxhZ3MpOworCQkJc2V0X2JpdChDT05GSUdfQ0hBTk5FTF9IVDQwLCAmcnQyeDAwZGV2LT5mbGFncyk7CiAJCQlod192YWx1ZSA9IHJ0MngwMGh0X2NlbnRlcl9jaGFubmVsKHJ0MngwMGRldiwgY29uZik7CiAJCX0gZWxzZSB7Ci0JCQlfX2NsZWFyX2JpdChDT05GSUdfQ0hBTk5FTF9IVDQwLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJCQljbGVhcl9iaXQoQ09ORklHX0NIQU5ORUxfSFQ0MCwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCQkJaHdfdmFsdWUgPSBjb25mLT5jaGFubmVsLT5od192YWx1ZTsKIAkJfQogCkBAIC0xOTIsNiArMjM0LDEwIEBACiAJCSAgICAgICBzaXplb2YobGliY29uZi5jaGFubmVsKSk7CiAJfQogCisJaWYgKHRlc3RfYml0KFJFUVVJUkVfUFNfQVVUT1dBS0UsICZydDJ4MDBkZXYtPmNhcF9mbGFncykgJiYKKwkgICAgKGllZWU4MDIxMV9mbGFncyAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUykpCisJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcnQyeDAwZGV2LT5hdXRvd2FrZXVwX3dvcmspOworCiAJLyoKIAkgKiBTdGFydCBjb25maWd1cmF0aW9uLgogCSAqLwpAQCAtMjA0LDYgKzI1MCwyNiBAQAogCWlmIChpZWVlODAyMTFfZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCkKIAkJcnQyeDAwbGlua19yZXNldF90dW5lcihydDJ4MDBkZXYsIGZhbHNlKTsKIAorCWlmICh0ZXN0X2JpdChSRVFVSVJFX1BTX0FVVE9XQUtFLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpICYmCisJICAgIChpZWVlODAyMTFfZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpICYmCisJICAgIChjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSkgeworCQliZWFjb25fZGlmZiA9IChsb25nKWppZmZpZXMgLSAobG9uZylydDJ4MDBkZXYtPmxhc3RfYmVhY29uOworCQliZWFjb25faW50ID0gbXNlY3NfdG9famlmZmllcyhydDJ4MDBkZXYtPmJlYWNvbl9pbnQpOworCisJCWlmIChiZWFjb25fZGlmZiA+IGJlYWNvbl9pbnQpCisJCQliZWFjb25fZGlmZiA9IDA7CisKKwkJYXV0b3dha2VfdGltZW91dCA9IChjb25mLT5tYXhfc2xlZXBfcGVyaW9kICogYmVhY29uX2ludCkgLSBiZWFjb25fZGlmZjsKKwkJcXVldWVfZGVsYXllZF93b3JrKHJ0MngwMGRldi0+d29ya3F1ZXVlLAorCQkJCSAgICZydDJ4MDBkZXYtPmF1dG93YWtldXBfd29yaywKKwkJCQkgICBhdXRvd2FrZV90aW1lb3V0IC0gMTUpOworCX0KKworCWlmIChjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKQorCQlzZXRfYml0KENPTkZJR19QT1dFUlNBVklORywgJnJ0MngwMGRldi0+ZmxhZ3MpOworCWVsc2UKKwkJY2xlYXJfYml0KENPTkZJR19QT1dFUlNBVklORywgJnJ0MngwMGRldi0+ZmxhZ3MpOworCiAJcnQyeDAwZGV2LT5jdXJyX2JhbmQgPSBjb25mLT5jaGFubmVsLT5iYW5kOwogCXJ0MngwMGRldi0+Y3Vycl9mcmVxID0gY29uZi0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXE7CiAJcnQyeDAwZGV2LT50eF9wb3dlciA9IGNvbmYtPnBvd2VyX2xldmVsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNyeXB0by5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNyeXB0by5jCmluZGV4IDNmNTY4OGYuLjFiYjlkNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjcnlwdG8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY3J5cHRvLmMKQEAgLTUyLDcgKzUyLDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKGVudHJ5LT5za2IpOwogCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmh3X2tleSA9IHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5OwogCi0JaWYgKCF0ZXN0X2JpdChDT05GSUdfU1VQUE9SVF9IV19DUllQVE8sICZydDJ4MDBkZXYtPmZsYWdzKSB8fCAhaHdfa2V5KQorCWlmICghdGVzdF9iaXQoQ0FQQUJJTElUWV9IV19DUllQVE8sICZydDJ4MDBkZXYtPmNhcF9mbGFncykgfHwgIWh3X2tleSkKIAkJcmV0dXJuOwogCiAJX19zZXRfYml0KEVOVFJZX1RYRF9FTkNSWVBULCAmdHhkZXNjLT5mbGFncyk7CkBAIC04MCw3ICs4MCw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5ID0gdHhfaW5mby0+Y29udHJvbC5od19rZXk7CiAJdW5zaWduZWQgaW50IG92ZXJoZWFkID0gMDsKIAotCWlmICghdGVzdF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQ1JZUFRPLCAmcnQyeDAwZGV2LT5mbGFncykgfHwgIWtleSkKKwlpZiAoIXRlc3RfYml0KENBUEFCSUxJVFlfSFdfQ1JZUFRPLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpIHx8ICFrZXkpCiAJCXJldHVybiBvdmVyaGVhZDsKIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGVidWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5jCmluZGV4IGM5MmRiMzIuLjc4Nzg3ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5jCkBAIC02Myw3ICs2Myw4IEBACiAJICogLSBkcml2ZXIgZm9sZGVyCiAJICogICAtIGRyaXZlciBmaWxlCiAJICogICAtIGNoaXBzZXQgZmlsZQotCSAqICAgLSBkZXZpY2UgZmxhZ3MgZmlsZQorCSAqICAgLSBkZXZpY2Ugc3RhdGUgZmxhZ3MgZmlsZQorCSAqICAgLSBkZXZpY2UgY2FwYWJpbGl0eSBmbGFncyBmaWxlCiAJICogICAtIHJlZ2lzdGVyIGZvbGRlcgogCSAqICAgICAtIGNzciBvZmZzZXQvdmFsdWUgZmlsZXMKIAkgKiAgICAgLSBlZXByb20gb2Zmc2V0L3ZhbHVlIGZpbGVzCkBAIC03OCw2ICs3OSw3IEBACiAJc3RydWN0IGRlbnRyeSAqZHJpdmVyX2VudHJ5OwogCXN0cnVjdCBkZW50cnkgKmNoaXBzZXRfZW50cnk7CiAJc3RydWN0IGRlbnRyeSAqZGV2X2ZsYWdzOworCXN0cnVjdCBkZW50cnkgKmNhcF9mbGFnczsKIAlzdHJ1Y3QgZGVudHJ5ICpyZWdpc3Rlcl9mb2xkZXI7CiAJc3RydWN0IGRlbnRyeSAqY3NyX29mZl9lbnRyeTsKIAlzdHJ1Y3QgZGVudHJ5ICpjc3JfdmFsX2VudHJ5OwpAQCAtNTUzLDYgKzU1NSwzNSBAQAogCS5sbHNlZWsJCT0gZGVmYXVsdF9sbHNlZWssCiB9OwogCitzdGF0aWMgc3NpemVfdCBydDJ4MDBkZWJ1Z19yZWFkX2NhcF9mbGFncyhzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJICBjaGFyIF9fdXNlciAqYnVmLAorCQkJCQkgIHNpemVfdCBsZW5ndGgsCisJCQkJCSAgbG9mZl90ICpvZmZzZXQpCit7CisJc3RydWN0IHJ0MngwMGRlYnVnX2ludGYgKmludGYgPQlmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBsaW5lWzE2XTsKKwlzaXplX3Qgc2l6ZTsKKworCWlmICgqb2Zmc2V0KQorCQlyZXR1cm4gMDsKKworCXNpemUgPSBzcHJpbnRmKGxpbmUsICIweCUuOHhcbiIsICh1bnNpZ25lZCBpbnQpaW50Zi0+cnQyeDAwZGV2LT5jYXBfZmxhZ3MpOworCisJaWYgKGNvcHlfdG9fdXNlcihidWYsIGxpbmUsIHNpemUpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCSpvZmZzZXQgKz0gc2l6ZTsKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcnQyeDAwZGVidWdfZm9wX2NhcF9mbGFncyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLnJlYWQJCT0gcnQyeDAwZGVidWdfcmVhZF9jYXBfZmxhZ3MsCisJLm9wZW4JCT0gcnQyeDAwZGVidWdfZmlsZV9vcGVuLAorCS5yZWxlYXNlCT0gcnQyeDAwZGVidWdfZmlsZV9yZWxlYXNlLAorCS5sbHNlZWsJCT0gZGVmYXVsdF9sbHNlZWssCit9OworCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqcnQyeDAwZGVidWdfY3JlYXRlX2ZpbGVfZHJpdmVyKGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJCQkgICAgIHN0cnVjdCBydDJ4MDBkZWJ1Z19pbnRmCiAJCQkJCQkgICAgICppbnRmLApAQCAtNTY4LDcgKzU5OSw2IEBACiAJYmxvYi0+ZGF0YSA9IGRhdGE7CiAJZGF0YSArPSBzcHJpbnRmKGRhdGEsICJkcml2ZXI6XHQlc1xuIiwgaW50Zi0+cnQyeDAwZGV2LT5vcHMtPm5hbWUpOwogCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAidmVyc2lvbjpcdCVzXG4iLCBEUlZfVkVSU0lPTik7Ci0JZGF0YSArPSBzcHJpbnRmKGRhdGEsICJjb21waWxlZDpcdCVzICVzXG4iLCBfX0RBVEVfXywgX19USU1FX18pOwogCWJsb2ItPnNpemUgPSBzdHJsZW4oYmxvYi0+ZGF0YSk7CiAKIAlyZXR1cm4gZGVidWdmc19jcmVhdGVfYmxvYihuYW1lLCBTX0lSVVNSLCBpbnRmLT5kcml2ZXJfZm9sZGVyLCBibG9iKTsKQEAgLTY1Myw2ICs2ODMsMTIgQEAKIAlpZiAoSVNfRVJSKGludGYtPmRldl9mbGFncykgfHwgIWludGYtPmRldl9mbGFncykKIAkJZ290byBleGl0OwogCisJaW50Zi0+Y2FwX2ZsYWdzID0gZGVidWdmc19jcmVhdGVfZmlsZSgiY2FwX2ZsYWdzIiwgU19JUlVTUiwKKwkJCQkJICAgICAgaW50Zi0+ZHJpdmVyX2ZvbGRlciwgaW50ZiwKKwkJCQkJICAgICAgJnJ0MngwMGRlYnVnX2ZvcF9jYXBfZmxhZ3MpOworCWlmIChJU19FUlIoaW50Zi0+Y2FwX2ZsYWdzKSB8fCAhaW50Zi0+Y2FwX2ZsYWdzKQorCQlnb3RvIGV4aXQ7CisKIAlpbnRmLT5yZWdpc3Rlcl9mb2xkZXIgPQogCSAgICBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInJlZ2lzdGVyIiwgaW50Zi0+ZHJpdmVyX2ZvbGRlcik7CiAJaWYgKElTX0VSUihpbnRmLT5yZWdpc3Rlcl9mb2xkZXIpIHx8ICFpbnRmLT5yZWdpc3Rlcl9mb2xkZXIpCkBAIC03MDYsNyArNzQyLDcgQEAKIAkJCQlpbnRmLCAmcnQyeDAwZGVidWdfZm9wX3F1ZXVlX3N0YXRzKTsKIAogI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX0NSWVBUTwotCWlmICh0ZXN0X2JpdChDT05GSUdfU1VQUE9SVF9IV19DUllQVE8sICZydDJ4MDBkZXYtPmZsYWdzKSkKKwlpZiAodGVzdF9iaXQoQ0FQQUJJTElUWV9IV19DUllQVE8sICZydDJ4MDBkZXYtPmNhcF9mbGFncykpCiAJCWludGYtPmNyeXB0b19zdGF0c19lbnRyeSA9CiAJCSAgICBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJjcnlwdG8iLCBTX0lSVUdPLCBpbnRmLT5xdWV1ZV9mb2xkZXIsCiAJCQkJCWludGYsICZydDJ4MDBkZWJ1Z19mb3BfY3J5cHRvX3N0YXRzKTsKQEAgLTc0NCw2ICs3ODAsNyBAQAogCWRlYnVnZnNfcmVtb3ZlKGludGYtPmNzcl9vZmZfZW50cnkpOwogCWRlYnVnZnNfcmVtb3ZlKGludGYtPnJlZ2lzdGVyX2ZvbGRlcik7CiAJZGVidWdmc19yZW1vdmUoaW50Zi0+ZGV2X2ZsYWdzKTsKKwlkZWJ1Z2ZzX3JlbW92ZShpbnRmLT5jYXBfZmxhZ3MpOwogCWRlYnVnZnNfcmVtb3ZlKGludGYtPmNoaXBzZXRfZW50cnkpOwogCWRlYnVnZnNfcmVtb3ZlKGludGYtPmRyaXZlcl9lbnRyeSk7CiAJZGVidWdmc19yZW1vdmUoaW50Zi0+ZHJpdmVyX2ZvbGRlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGV2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGV2LmMKaW5kZXggODRlYjZhZC4uYzAxOGQ2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CiAKICNpbmNsdWRlICJydDJ4MDAuaCIKICNpbmNsdWRlICJydDJ4MDBsaWIuaCIKQEAgLTcwLDYgKzcxLDcgQEAKIAkgKi8KIAlydDJ4MDBxdWV1ZV9zdGFydF9xdWV1ZXMocnQyeDAwZGV2KTsKIAlydDJ4MDBsaW5rX3N0YXJ0X3R1bmVyKHJ0MngwMGRldik7CisJcnQyeDAwbGlua19zdGFydF9hZ2MocnQyeDAwZGV2KTsKIAogCS8qCiAJICogU3RhcnQgd2F0Y2hkb2cgbW9uaXRvcmluZy4KQEAgLTkyLDYgKzk0LDcgQEAKIAkvKgogCSAqIFN0b3AgYWxsIHF1ZXVlcwogCSAqLworCXJ0MngwMGxpbmtfc3RvcF9hZ2MocnQyeDAwZGV2KTsKIAlydDJ4MDBsaW5rX3N0b3BfdHVuZXIocnQyeDAwZGV2KTsKIAlydDJ4MDBxdWV1ZV9zdG9wX3F1ZXVlcyhydDJ4MDBkZXYpOwogCXJ0MngwMHF1ZXVlX2ZsdXNoX3F1ZXVlcyhydDJ4MDBkZXYsIHRydWUpOwpAQCAtMTM4LDYgKzE0MSwxNiBAQAogCQkJCQkgICAgcnQyeDAwZGV2KTsKIH0KIAorc3RhdGljIHZvaWQgcnQyeDAwbGliX2F1dG93YWtldXAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPQorCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0MngwMF9kZXYsIGF1dG93YWtldXBfd29yay53b3JrKTsKKworCWlmIChydDJ4MDBkZXYtPm9wcy0+bGliLT5zZXRfZGV2aWNlX3N0YXRlKHJ0MngwMGRldiwgU1RBVEVfQVdBS0UpKQorCQlFUlJPUihydDJ4MDBkZXYsICJEZXZpY2UgZmFpbGVkIHRvIHdha2V1cC5cbiIpOworCWNsZWFyX2JpdChDT05GSUdfUE9XRVJTQVZJTkcsICZydDJ4MDBkZXYtPmZsYWdzKTsKK30KKwogLyoKICAqIEludGVycnVwdCBjb250ZXh0IGhhbmRsZXJzLgogICovCkBAIC0xOTcsNyArMjEwLDcgQEAKIAkgKiBoZXJlIGFzIHRoZXkgd2lsbCBmZXRjaCB0aGUgbmV4dCBiZWFjb24gZGlyZWN0bHkgcHJpb3IgdG8KIAkgKiB0cmFuc21pc3Npb24uCiAJICovCi0JaWYgKHRlc3RfYml0KERSSVZFUl9TVVBQT1JUX1BSRV9UQlRUX0lOVEVSUlVQVCwgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCWlmICh0ZXN0X2JpdChDQVBBQklMSVRZX1BSRV9UQlRUX0lOVEVSUlVQVCwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkKIAkJcmV0dXJuOwogCiAJLyogZmV0Y2ggbmV4dCBiZWFjb24gKi8KQEAgLTIyMiw3ICsyMzUsNyBAQAogdm9pZCBydDJ4MDBsaWJfZG1hc3RhcnQoc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSkKIHsKIAlzZXRfYml0KEVOVFJZX09XTkVSX0RFVklDRV9EQVRBLCAmZW50cnktPmZsYWdzKTsKLQlydDJ4MDBxdWV1ZV9pbmRleF9pbmMoZW50cnktPnF1ZXVlLCBRX0lOREVYKTsKKwlydDJ4MDBxdWV1ZV9pbmRleF9pbmMoZW50cnksIFFfSU5ERVgpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbGliX2RtYXN0YXJ0KTsKIApAQCAtMjMwLDcgKzI0Myw3IEBACiB7CiAJc2V0X2JpdChFTlRSWV9EQVRBX1NUQVRVU19QRU5ESU5HLCAmZW50cnktPmZsYWdzKTsKIAljbGVhcl9iaXQoRU5UUllfT1dORVJfREVWSUNFX0RBVEEsICZlbnRyeS0+ZmxhZ3MpOwotCXJ0MngwMHF1ZXVlX2luZGV4X2luYyhlbnRyeS0+cXVldWUsIFFfSU5ERVhfRE1BX0RPTkUpOworCXJ0MngwMHF1ZXVlX2luZGV4X2luYyhlbnRyeSwgUV9JTkRFWF9ETUFfRE9ORSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBsaWJfZG1hZG9uZSk7CiAKQEAgLTI2OCw3ICsyODEsNyBAQAogCS8qCiAJICogUmVtb3ZlIEwyIHBhZGRpbmcgd2hpY2ggd2FzIGFkZGVkIGR1cmluZwogCSAqLwotCWlmICh0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9MMlBBRCwgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCWlmICh0ZXN0X2JpdChSRVFVSVJFX0wyUEFELCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpKQogCQlydDJ4MDBxdWV1ZV9yZW1vdmVfbDJwYWQoZW50cnktPnNrYiwgaGVhZGVyX2xlbmd0aCk7CiAKIAkvKgpAQCAtMjc3LDcgKzI5MCw3IEBACiAJICogbWFjODAyMTEgd2lsbCBleHBlY3QgdGhlIHNhbWUgZGF0YSB0byBiZSBwcmVzZW50IGl0IHRoZQogCSAqIGZyYW1lIGFzIGl0IHdhcyBwYXNzZWQgdG8gdXMuCiAJICovCi0JaWYgKHRlc3RfYml0KENPTkZJR19TVVBQT1JUX0hXX0NSWVBUTywgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCWlmICh0ZXN0X2JpdChDQVBBQklMSVRZX0hXX0NSWVBUTywgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkKIAkJcnQyeDAwY3J5cHRvX3R4X2luc2VydF9pdihlbnRyeS0+c2tiLCBoZWFkZXJfbGVuZ3RoKTsKIAogCS8qCkBAIC0zNTAsMTAgKzM2MywxNCBAQAogCSAqIHdoaWNoIHdvdWxkIGFsbG93IHRoZSByYyBhbGdvcml0aG0gdG8gYmV0dGVyIGRlY2lkZSBvbgogCSAqIHdoaWNoIHJhdGVzIGFyZSBzdWl0YWJsZS4KIAkgKi8KLQlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSB7CisJaWYgKHRlc3RfYml0KFRYRE9ORV9BTVBEVSwgJnR4ZGVzYy0+ZmxhZ3MpIHx8CisJICAgIHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkgewogCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BTVBEVTsKIAkJdHhfaW5mby0+c3RhdHVzLmFtcGR1X2xlbiA9IDE7CiAJCXR4X2luZm8tPnN0YXR1cy5hbXBkdV9hY2tfbGVuID0gc3VjY2VzcyA/IDEgOiAwOworCisJCWlmICghc3VjY2VzcykKKwkJCXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FNUERVX05PX0JBQ0s7CiAJfQogCiAJaWYgKHJhdGVfZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFMpIHsKQEAgLTM3MCw3ICszODcsNyBAQAogCSAqIHNlbmQgdGhlIHN0YXR1cyByZXBvcnQgYmFjay4KIAkgKi8KIAlpZiAoIShza2JkZXNjX2ZsYWdzICYgU0tCREVTQ19OT1RfTUFDODAyMTEpKSB7Ci0JCWlmICh0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9UQVNLTEVUX0NPTlRFWFQsICZydDJ4MDBkZXYtPmZsYWdzKSkKKwkJaWYgKHRlc3RfYml0KFJFUVVJUkVfVEFTS0xFVF9DT05URVhULCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpKQogCQkJaWVlZTgwMjExX3R4X3N0YXR1cyhydDJ4MDBkZXYtPmh3LCBlbnRyeS0+c2tiKTsKIAkJZWxzZQogCQkJaWVlZTgwMjExX3R4X3N0YXR1c19uaShydDJ4MDBkZXYtPmh3LCBlbnRyeS0+c2tiKTsKQEAgLTM4NSw3ICs0MDIsNyBAQAogCiAJcnQyeDAwZGV2LT5vcHMtPmxpYi0+Y2xlYXJfZW50cnkoZW50cnkpOwogCi0JcnQyeDAwcXVldWVfaW5kZXhfaW5jKGVudHJ5LT5xdWV1ZSwgUV9JTkRFWF9ET05FKTsKKwlydDJ4MDBxdWV1ZV9pbmRleF9pbmMoZW50cnksIFFfSU5ERVhfRE9ORSk7CiAKIAkvKgogCSAqIElmIHRoZSBkYXRhIHF1ZXVlIHdhcyBiZWxvdyB0aGUgdGhyZXNob2xkIGJlZm9yZSB0aGUgdHhkb25lCkBAIC00MDksNiArNDI2LDc3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBsaWJfdHhkb25lX25vaW5mbyk7CiAKK3N0YXRpYyB1OCAqcnQyeDAwbGliX2ZpbmRfaWUodTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4sIHU4IGllKQoreworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9ICh2b2lkICopZGF0YTsKKwl1OCAqcG9zLCAqZW5kOworCisJcG9zID0gKHU4ICopbWdtdC0+dS5iZWFjb24udmFyaWFibGU7CisJZW5kID0gZGF0YSArIGxlbjsKKwl3aGlsZSAocG9zIDwgZW5kKSB7CisJCWlmIChwb3MgKyAyICsgcG9zWzFdID4gZW5kKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJaWYgKHBvc1swXSA9PSBpZSkKKwkJCXJldHVybiBwb3M7CisKKwkJcG9zICs9IDIgKyBwb3NbMV07CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHJ0MngwMGxpYl9yeGRvbmVfY2hlY2tfcHMoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgIHN0cnVjdCByeGRvbmVfZW50cnlfZGVzYyAqcnhkZXNjKQoreworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKSBza2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV90aW1faWUgKnRpbV9pZTsKKwl1OCAqdGltOworCXU4IHRpbV9sZW47CisJYm9vbCBjYW07CisKKwkvKiBJZiB0aGlzIGlzIG5vdCBhIGJlYWNvbiwgb3IgaWYgbWFjODAyMTEgaGFzIG5vIHBvd2Vyc2F2aW5nCisJICogY29uZmlndXJlZCwgb3IgaWYgdGhlIGRldmljZSBpcyBhbHJlYWR5IGluIHBvd2Vyc2F2aW5nIG1vZGUKKwkgKiB3ZSBjYW4gZXhpdCBub3cuICovCisJaWYgKGxpa2VseSghaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpIHx8CisJCSAgICEocnQyeDAwZGV2LT5ody0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSkpCisJCXJldHVybjsKKworCS8qIG1pbi4gYmVhY29uIGxlbmd0aCArIEZDU19MRU4gKi8KKwlpZiAoc2tiLT5sZW4gPD0gNDAgKyBGQ1NfTEVOKQorCQlyZXR1cm47CisKKwkvKiBhbmQgb25seSBiZWFjb25zIGZyb20gdGhlIGFzc29jaWF0ZWQgQlNTSUQsIHBsZWFzZSAqLworCWlmICghKHJ4ZGVzYy0+ZGV2X2ZsYWdzICYgUlhET05FX01ZX0JTUykgfHwKKwkgICAgIXJ0MngwMGRldi0+YWlkKQorCQlyZXR1cm47CisKKwlydDJ4MDBkZXYtPmxhc3RfYmVhY29uID0gamlmZmllczsKKworCXRpbSA9IHJ0MngwMGxpYl9maW5kX2llKHNrYi0+ZGF0YSwgc2tiLT5sZW4gLSBGQ1NfTEVOLCBXTEFOX0VJRF9USU0pOworCWlmICghdGltKQorCQlyZXR1cm47CisKKwlpZiAodGltWzFdIDwgc2l6ZW9mKCp0aW1faWUpKQorCQlyZXR1cm47CisKKwl0aW1fbGVuID0gdGltWzFdOworCXRpbV9pZSA9IChzdHJ1Y3QgaWVlZTgwMjExX3RpbV9pZSAqKSAmdGltWzJdOworCisJLyogQ2hlY2sgd2hlbmV2ZXIgdGhlIFBIWSBjYW4gYmUgdHVybmVkIG9mZiBhZ2Fpbi4gKi8KKworCS8qIDEuIFdoYXQgYWJvdXQgYnVmZmVyZWQgdW5pY2FzdCB0cmFmZmljIGZvciBvdXIgQUlEPyAqLworCWNhbSA9IGllZWU4MDIxMV9jaGVja190aW0odGltX2llLCB0aW1fbGVuLCBydDJ4MDBkZXYtPmFpZCk7CisKKwkvKiAyLiBNYXliZSB0aGUgQVAgd2FudHMgdG8gc2VuZCBtdWx0aWNhc3QvYnJvYWRjYXN0IGRhdGE/ICovCisJY2FtIHw9ICh0aW1faWUtPmJpdG1hcF9jdHJsICYgMHgwMSk7CisKKwlpZiAoIWNhbSAmJiAhdGVzdF9iaXQoQ09ORklHX1BPV0VSU0FWSU5HLCAmcnQyeDAwZGV2LT5mbGFncykpCisJCXJ0MngwMGxpYl9jb25maWcocnQyeDAwZGV2LCAmcnQyeDAwZGV2LT5ody0+Y29uZiwKKwkJCQkgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKTsKK30KKwogc3RhdGljIGludCBydDJ4MDBsaWJfcnhkb25lX3JlYWRfc2lnbmFsKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkJCXN0cnVjdCByeGRvbmVfZW50cnlfZGVzYyAqcnhkZXNjKQogewpAQCAtNTExLDggKzU5OSw2IEBACiAJCSAocnhkZXNjLnNpemUgPiBoZWFkZXJfbGVuZ3RoKSAmJgogCQkgKHJ4ZGVzYy5kZXZfZmxhZ3MgJiBSWERPTkVfTDJQQUQpKQogCQlydDJ4MDBxdWV1ZV9yZW1vdmVfbDJwYWQoZW50cnktPnNrYiwgaGVhZGVyX2xlbmd0aCk7Ci0JZWxzZQotCQlydDJ4MDBxdWV1ZV9hbGlnbl9wYXlsb2FkKGVudHJ5LT5za2IsIGhlYWRlcl9sZW5ndGgpOwogCiAJLyogVHJpbSBidWZmZXIgdG8gY29ycmVjdCBzaXplICovCiAJc2tiX3RyaW0oZW50cnktPnNrYiwgcnhkZXNjLnNpemUpOwpAQCAtNTI2LDYgKzYxMiwxMiBAQAogCQlyeGRlc2MuZmxhZ3MgfD0gUlhfRkxBR19IVDsKIAogCS8qCisJICogQ2hlY2sgaWYgdGhpcyBpcyBhIGJlYWNvbiwgYW5kIG1vcmUgZnJhbWVzIGhhdmUgYmVlbgorCSAqIGJ1ZmZlcmVkIHdoaWxlIHdlIHdlcmUgaW4gcG93ZXJzYXZpbmcgbW9kZS4KKwkgKi8KKwlydDJ4MDBsaWJfcnhkb25lX2NoZWNrX3BzKHJ0MngwMGRldiwgZW50cnktPnNrYiwgJnJ4ZGVzYyk7CisKKwkvKgogCSAqIFVwZGF0ZSBleHRyYSBjb21wb25lbnRzCiAJICovCiAJcnQyeDAwbGlua191cGRhdGVfc3RhdHMocnQyeDAwZGV2LCBlbnRyeS0+c2tiLCAmcnhkZXNjKTsKQEAgLTU1NCw3ICs2NDYsNyBAQAogCiBzdWJtaXRfZW50cnk6CiAJZW50cnktPmZsYWdzID0gMDsKLQlydDJ4MDBxdWV1ZV9pbmRleF9pbmMoZW50cnktPnF1ZXVlLCBRX0lOREVYX0RPTkUpOworCXJ0MngwMHF1ZXVlX2luZGV4X2luYyhlbnRyeSwgUV9JTkRFWF9ET05FKTsKIAlpZiAodGVzdF9iaXQoREVWSUNFX1NUQVRFX1BSRVNFTlQsICZydDJ4MDBkZXYtPmZsYWdzKSAmJgogCSAgICB0ZXN0X2JpdChERVZJQ0VfU1RBVEVfRU5BQkxFRF9SQURJTywgJnJ0MngwMGRldi0+ZmxhZ3MpKQogCQlydDJ4MDBkZXYtPm9wcy0+bGliLT5jbGVhcl9lbnRyeShlbnRyeSk7CkBAIC04MDEsMjMgKzg5MywyOCBAQAogCS8qCiAJICogVGFrZSBUWCBoZWFkcm9vbSByZXF1aXJlZCBmb3IgYWxpZ25tZW50IGludG8gYWNjb3VudC4KIAkgKi8KLQlpZiAodGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfTDJQQUQsICZydDJ4MDBkZXYtPmZsYWdzKSkKKwlpZiAodGVzdF9iaXQoUkVRVUlSRV9MMlBBRCwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkKIAkJcnQyeDAwZGV2LT5ody0+ZXh0cmFfdHhfaGVhZHJvb20gKz0gUlQyWDAwX0wyUEFEX1NJWkU7Ci0JZWxzZSBpZiAodGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfRE1BLCAmcnQyeDAwZGV2LT5mbGFncykpCisJZWxzZSBpZiAodGVzdF9iaXQoUkVRVUlSRV9ETUEsICZydDJ4MDBkZXYtPmNhcF9mbGFncykpCiAJCXJ0MngwMGRldi0+aHctPmV4dHJhX3R4X2hlYWRyb29tICs9IFJUMlgwMF9BTElHTl9TSVpFOwogCiAJLyoKIAkgKiBBbGxvY2F0ZSB0eCBzdGF0dXMgRklGTyBmb3IgZHJpdmVyIHVzZS4KIAkgKi8KLQlpZiAodGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfVFhTVEFUVVNfRklGTywgJnJ0MngwMGRldi0+ZmxhZ3MpKSB7CisJaWYgKHRlc3RfYml0KFJFUVVJUkVfVFhTVEFUVVNfRklGTywgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkgewogCQkvKgotCQkgKiBBbGxvY2F0ZSB0eHN0YXR1cyBmaWZvIGFuZCB0YXNrbGV0LCB3ZSB1c2UgYSBzaXplIG9mIDUxMgotCQkgKiBmb3IgdGhlIGtmaWZvIHdoaWNoIGlzIGJpZyBlbm91Z2ggdG8gc3RvcmUgNTEyLzQ9MTI4IHR4Ci0JCSAqIHN0YXR1cyByZXBvcnRzLiBJbiB0aGUgd29yc3QgY2FzZSAodHggc3RhdHVzIGZvciBhbGwgdHgKLQkJICogcXVldWVzIGdldHMgcmVwb3J0ZWQgYmVmb3JlIHdlJ3ZlIGdvdCBhIGNoYW5jZSB0byBoYW5kbGUKLQkJICogdGhlbSkgMjQqND0zODQgdHggc3RhdHVzIHJlcG9ydHMgbmVlZCB0byBiZSBjYWNoZWQuCisJCSAqIEFsbG9jYXRlIHRoZSB0eHN0YXR1cyBmaWZvLiBJbiB0aGUgd29yc3QgY2FzZSB0aGUgdHgKKwkJICogc3RhdHVzIGZpZm8gaGFzIHRvIGhvbGQgdGhlIHR4IHN0YXR1cyBvZiBhbGwgZW50cmllcworCQkgKiBpbiBhbGwgdHggcXVldWVzLiBIZW5jZSwgY2FsY3VsYXRlIHRoZSBrZmlmbyBzaXplIGFzCisJCSAqIHR4X3F1ZXVlcyAqIGVudHJ5X251bSBhbmQgcm91bmQgdXAgdG8gdGhlIG5lYXJlc3QKKwkJICogcG93ZXIgb2YgMi4KIAkJICovCi0JCXN0YXR1cyA9IGtmaWZvX2FsbG9jKCZydDJ4MDBkZXYtPnR4c3RhdHVzX2ZpZm8sIDUxMiwKKwkJaW50IGtmaWZvX3NpemUgPQorCQkJcm91bmR1cF9wb3dfb2ZfdHdvKHJ0MngwMGRldi0+b3BzLT50eF9xdWV1ZXMgKgorCQkJCQkgICBydDJ4MDBkZXYtPm9wcy0+dHgtPmVudHJ5X251bSAqCisJCQkJCSAgIHNpemVvZih1MzIpKTsKKworCQlzdGF0dXMgPSBrZmlmb19hbGxvYygmcnQyeDAwZGV2LT50eHN0YXR1c19maWZvLCBrZmlmb19zaXplLAogCQkJCSAgICAgR0ZQX0tFUk5FTCk7CiAJCWlmIChzdGF0dXMpCiAJCQlyZXR1cm4gc3RhdHVzOwpAQCAtMTAwNyw2ICsxMTA0LDcgQEAKIAl9CiAKIAlJTklUX1dPUksoJnJ0MngwMGRldi0+aW50Zl93b3JrLCBydDJ4MDBsaWJfaW50Zl9zY2hlZHVsZWQpOworCUlOSVRfREVMQVlFRF9XT1JLKCZydDJ4MDBkZXYtPmF1dG93YWtldXBfd29yaywgcnQyeDAwbGliX2F1dG93YWtldXApOwogCiAJLyoKIAkgKiBMZXQgdGhlIGRyaXZlciBwcm9iZSB0aGUgZGV2aWNlIHRvIGRldGVjdCB0aGUgY2FwYWJpbGl0aWVzLgpAQCAtMTA2Myw2ICsxMTYxLDcgQEAKIAkgKi8KIAljYW5jZWxfd29ya19zeW5jKCZydDJ4MDBkZXYtPmludGZfd29yayk7CiAJaWYgKHJ0MngwMF9pc191c2IocnQyeDAwZGV2KSkgeworCQlkZWxfdGltZXJfc3luYygmcnQyeDAwZGV2LT50eHN0YXR1c190aW1lcik7CiAJCWNhbmNlbF93b3JrX3N5bmMoJnJ0MngwMGRldi0+cnhkb25lX3dvcmspOwogCQljYW5jZWxfd29ya19zeW5jKCZydDJ4MDBkZXYtPnR4ZG9uZV93b3JrKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZmlybXdhcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBmaXJtd2FyZS5jCmluZGV4IGJlMGZmNzguLmYzMTZhYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBmaXJtd2FyZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBmaXJtd2FyZS5jCkBAIC05OSw3ICs5OSw3IEBACiB7CiAJaW50IHJldHZhbDsKIAotCWlmICghdGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfRklSTVdBUkUsICZydDJ4MDBkZXYtPmZsYWdzKSkKKwlpZiAoIXRlc3RfYml0KFJFUVVJUkVfRklSTVdBUkUsICZydDJ4MDBkZXYtPmNhcF9mbGFncykpCiAJCXJldHVybiAwOwogCiAJaWYgKCFydDJ4MDBkZXYtPmZ3KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwaHQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBodC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTEyMTlkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBodC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBJdm8gdmFuIERvb3JuIDxJdkRvb3JuQGdtYWlsLmNvbT4KLQk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgotCi0JVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLQlpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0JKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0JTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCi0JR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotCVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0JYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0JRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotCTU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKi8KLQotLyoKLQlNb2R1bGU6IHJ0MngwMGxpYgotCUFic3RyYWN0OiBydDJ4MDAgSFQgc3BlY2lmaWMgcm91dGluZXMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCi0jaW5jbHVkZSAicnQyeDAwLmgiCi0jaW5jbHVkZSAicnQyeDAwbGliLmgiCi0KLXZvaWQgcnQyeDAwaHRfY3JlYXRlX3R4X2Rlc2NyaXB0b3Ioc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSwKLQkJCQkgICBzdHJ1Y3QgdHhlbnRyeV9kZXNjICp0eGRlc2MsCi0JCQkJICAgY29uc3Qgc3RydWN0IHJ0MngwMF9yYXRlICpod3JhdGUpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihlbnRyeS0+c2tiKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnR4cmF0ZSA9ICZ0eF9pbmZvLT5jb250cm9sLnJhdGVzWzBdOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKillbnRyeS0+c2tiLT5kYXRhOwotCi0JaWYgKHR4X2luZm8tPmNvbnRyb2wuc3RhKQotCQl0eGRlc2MtPnUuaHQubXBkdV9kZW5zaXR5ID0KLQkJICAgIHR4X2luZm8tPmNvbnRyb2wuc3RhLT5odF9jYXAuYW1wZHVfZGVuc2l0eTsKLQotCXR4ZGVzYy0+dS5odC5iYV9zaXplID0gNzsJLyogRklYTUU6IFdoYXQgdmFsdWUgaXMgbmVlZGVkPyAqLwotCi0JdHhkZXNjLT51Lmh0LnN0YmMgPQotCSAgICAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1NUQkMpID4+IElFRUU4MDIxMV9UWF9DVExfU1RCQ19TSElGVDsKLQotCS8qCi0JICogSWYgSUVFRTgwMjExX1RYX1JDX01DUyBpcyBzZXQgdHhyYXRlLT5pZHgganVzdCBjb250YWlucyB0aGUKLQkgKiBtY3MgcmF0ZSB0byBiZSB1c2VkCi0JICovCi0JaWYgKHR4cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfTUNTKSB7Ci0JCXR4ZGVzYy0+dS5odC5tY3MgPSB0eHJhdGUtPmlkeDsKLQotCQkvKgotCQkgKiBNSU1PIFBTIHNob3VsZCBiZSBzZXQgdG8gMSBmb3IgU1RBJ3MgdXNpbmcgZHluYW1pYyBTTSBQUwotCQkgKiB3aGVuIHVzaW5nIG1vcmUgdGhlbiBvbmUgdHggc3RyZWFtICg+TUNTNykuCi0JCSAqLwotCQlpZiAodHhfaW5mby0+Y29udHJvbC5zdGEgJiYgdHhkZXNjLT51Lmh0Lm1jcyA+IDcgJiYKLQkJICAgICgodHhfaW5mby0+Y29udHJvbC5zdGEtPmh0X2NhcC5jYXAgJgotCQkgICAgICBJRUVFODAyMTFfSFRfQ0FQX1NNX1BTKSA+PgotCQkgICAgIElFRUU4MDIxMV9IVF9DQVBfU01fUFNfU0hJRlQpID09Ci0JCSAgICBXTEFOX0hUX0NBUF9TTV9QU19EWU5BTUlDKQotCQkJX19zZXRfYml0KEVOVFJZX1RYRF9IVF9NSU1PX1BTLCAmdHhkZXNjLT5mbGFncyk7Ci0JfSBlbHNlIHsKLQkJdHhkZXNjLT51Lmh0Lm1jcyA9IHJ0MngwMF9nZXRfcmF0ZV9tY3MoaHdyYXRlLT5tY3MpOwotCQlpZiAodHhyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfU0hPUlRfUFJFQU1CTEUpCi0JCQl0eGRlc2MtPnUuaHQubWNzIHw9IDB4MDg7Ci0JfQotCi0JLyoKLQkgKiBUaGlzIGZyYW1lIGlzIGVsaWdpYmxlIGZvciBhbiBBTVBEVSwgaG93ZXZlciwgZG9uJ3QgYWdncmVnYXRlCi0JICogZnJhbWVzIHRoYXQgYXJlIGludGVuZGVkIHRvIHByb2JlIGEgc3BlY2lmaWMgdHggcmF0ZS4KLQkgKi8KLQlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVICYmCi0JICAgICEodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1JBVEVfQ1RSTF9QUk9CRSkpCi0JCV9fc2V0X2JpdChFTlRSWV9UWERfSFRfQU1QRFUsICZ0eGRlc2MtPmZsYWdzKTsKLQotCS8qCi0JICogU2V0IDQwTWh6IG1vZGUgaWYgbmVjZXNzYXJ5IChmb3IgbGVnYWN5IHJhdGVzIHRoaXMgd2lsbAotCSAqIGR1cGxpY2F0ZSB0aGUgZnJhbWUgdG8gYm90aCBjaGFubmVscykuCi0JICovCi0JaWYgKHR4cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIIHx8Ci0JICAgIHR4cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfRFVQX0RBVEEpCi0JCV9fc2V0X2JpdChFTlRSWV9UWERfSFRfQldfNDAsICZ0eGRlc2MtPmZsYWdzKTsKLQlpZiAodHhyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSSkKLQkJX19zZXRfYml0KEVOVFJZX1RYRF9IVF9TSE9SVF9HSSwgJnR4ZGVzYy0+ZmxhZ3MpOwotCi0JLyoKLQkgKiBEZXRlcm1pbmUgSUZTIHZhbHVlcwotCSAqIC0gVXNlIFRYT1BfQkFDS09GRiBmb3IgbWFuYWdlbWVudCBmcmFtZXMKLQkgKiAtIFVzZSBUWE9QX1NJRlMgZm9yIGZyYWdtZW50IGJ1cnN0cwotCSAqIC0gVXNlIFRYT1BfSFRUWE9QIGZvciBldmVyeXRoaW5nIGVsc2UKLQkgKgotCSAqIE5vdGU6IHJ0MjgwMCBkZXZpY2VzIHdvbid0IHVzZSBDVFMgcHJvdGVjdGlvbiAoaWYgdXNlZCkKLQkgKiBmb3IgZnJhbWVzIG5vdCB0cmFuc21pdHRlZCB3aXRoIFRYT1BfSFRUWE9QCi0JICovCi0JaWYgKGllZWU4MDIxMV9pc19tZ210KGhkci0+ZnJhbWVfY29udHJvbCkpCi0JCXR4ZGVzYy0+dS5odC50eG9wID0gVFhPUF9CQUNLT0ZGOwotCWVsc2UgaWYgKCEodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0ZJUlNUX0ZSQUdNRU5UKSkKLQkJdHhkZXNjLT51Lmh0LnR4b3AgPSBUWE9QX1NJRlM7Ci0JZWxzZQotCQl0eGRlc2MtPnUuaHQudHhvcCA9IFRYT1BfSFRUWE9QOwotfQotCi11MTYgcnQyeDAwaHRfY2VudGVyX2NoYW5uZWwoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpCi17Ci0Jc3RydWN0IGh3X21vZGVfc3BlYyAqc3BlYyA9ICZydDJ4MDBkZXYtPnNwZWM7Ci0JaW50IGNlbnRlcl9jaGFubmVsOwotCXUxNiBpOwotCi0JLyoKLQkgKiBJbml0aWFsaXplIGNlbnRlciBjaGFubmVsIHRvIGN1cnJlbnQgY2hhbm5lbC4KLQkgKi8KLQljZW50ZXJfY2hhbm5lbCA9IHNwZWMtPmNoYW5uZWxzW2NvbmYtPmNoYW5uZWwtPmh3X3ZhbHVlXS5jaGFubmVsOwotCi0JLyoKLQkgKiBBZGp1c3QgY2VudGVyIGNoYW5uZWwgdG8gSFQ0MCsgYW5kIEhUNDAtIG9wZXJhdGlvbi4KLQkgKi8KLQlpZiAoY29uZl9pc19odDQwX3BsdXMoY29uZikpCi0JCWNlbnRlcl9jaGFubmVsICs9IDI7Ci0JZWxzZSBpZiAoY29uZl9pc19odDQwX21pbnVzKGNvbmYpKQotCQljZW50ZXJfY2hhbm5lbCAtPSAoY2VudGVyX2NoYW5uZWwgPT0gMTQpID8gMSA6IDI7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX2NoYW5uZWxzOyBpKyspCi0JCWlmIChzcGVjLT5jaGFubmVsc1tpXS5jaGFubmVsID09IGNlbnRlcl9jaGFubmVsKQotCQkJcmV0dXJuIGk7Ci0KLQlXQVJOX09OKDEpOwotCXJldHVybiBjb25mLT5jaGFubmVsLT5od192YWx1ZTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaWIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaWIuaAppbmRleCAyZDk0Y2JhLi4zMjJjYzRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGliLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpYi5oCkBAIC0zMiw2ICszMiw3IEBACiAgKi8KICNkZWZpbmUgV0FUQ0hET0dfSU5URVJWQUwJcm91bmRfamlmZmllc19yZWxhdGl2ZShIWikKICNkZWZpbmUgTElOS19UVU5FX0lOVEVSVkFMCXJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoSFopCisjZGVmaW5lIEFHQ19JTlRFUlZBTAkJcm91bmRfamlmZmllc19yZWxhdGl2ZSg0ICogSFopCiAKIC8qCiAgKiBydDJ4MDBfcmF0ZTogUGVyIHJhdGUgZGV2aWNlIGluZm9ybWF0aW9uCkBAIC0xMTksMTYgKzEyMCw2IEBACiB2b2lkIHJ0MngwMHF1ZXVlX2FsaWduX2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IpOwogCiAvKioKLSAqIHJ0MngwMHF1ZXVlX2FsaWduX3BheWxvYWQgLSBBbGlnbiA4MDIuMTEgcGF5bG9hZCB0byA0LWJ5dGUgYm91bmRhcnkKLSAqIEBza2I6IFRoZSBza2IgdG8gYWxpZ24KLSAqIEBoZWFkZXJfbGVuZ3RoOiBMZW5ndGggb2YgODAyLjExIGhlYWRlcgotICoKLSAqIEFsaWduIHRoZSA4MDIuMTEgcGF5bG9hZCB0byBhIDQtYnl0ZSBib3VuZGFyeSwgdGhpcyBjb3VsZAotICogbWVhbiB0aGUgaGVhZGVyIGlzIG5vdCBhbGlnbmVkIHByb3Blcmx5IHRob3VnaC4KLSAqLwotdm9pZCBydDJ4MDBxdWV1ZV9hbGlnbl9wYXlsb2FkKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZWFkZXJfbGVuZ3RoKTsKLQotLyoqCiAgKiBydDJ4MDBxdWV1ZV9pbnNlcnRfbDJwYWQgLSBBbGlnbiA4MDIuMTEgaGVhZGVyICYgcGF5bG9hZCB0byA0LWJ5dGUgYm91bmRhcnkKICAqIEBza2I6IFRoZSBza2IgdG8gYWxpZ24KICAqIEBoZWFkZXJfbGVuZ3RoOiBMZW5ndGggb2YgODAyLjExIGhlYWRlcgpAQCAtMTg0LDE0ICsxNzUsMTQgQEAKIAogLyoqCiAgKiBydDJ4MDBxdWV1ZV9pbmRleF9pbmMgLSBJbmRleCBpbmNyZW1lbnRhdGlvbiBmdW5jdGlvbgotICogQHF1ZXVlOiBRdWV1ZSAoJnN0cnVjdCBkYXRhX3F1ZXVlKSB0byBwZXJmb3JtIHRoZSBhY3Rpb24gb24uCisgKiBAZW50cnk6IFF1ZXVlIGVudHJ5ICgmc3RydWN0IHF1ZXVlX2VudHJ5KSB0byBwZXJmb3JtIHRoZSBhY3Rpb24gb24uCiAgKiBAaW5kZXg6IEluZGV4IHR5cGUgKCZlbnVtIHF1ZXVlX2luZGV4KSB0byBwZXJmb3JtIHRoZSBhY3Rpb24gb24uCiAgKgotICogVGhpcyBmdW5jdGlvbiB3aWxsIGluY3JlYXNlIHRoZSByZXF1ZXN0ZWQgaW5kZXggb24gdGhlIHF1ZXVlLAorICogVGhpcyBmdW5jdGlvbiB3aWxsIGluY3JlYXNlIHRoZSByZXF1ZXN0ZWQgaW5kZXggb24gdGhlIGVudHJ5J3MgcXVldWUsCiAgKiBpdCB3aWxsIGdyYWIgdGhlIGFwcHJvcHJpYXRlIGxvY2tzIGFuZCBoYW5kbGUgcXVldWUgb3ZlcmZsb3cgZXZlbnRzIGJ5CiAgKiByZXNldHRpbmcgdGhlIGluZGV4IHRvIHRoZSBzdGFydCBvZiB0aGUgcXVldWUuCiAgKi8KLXZvaWQgcnQyeDAwcXVldWVfaW5kZXhfaW5jKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSwgZW51bSBxdWV1ZV9pbmRleCBpbmRleCk7Cit2b2lkIHJ0MngwMHF1ZXVlX2luZGV4X2luYyhzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LCBlbnVtIHF1ZXVlX2luZGV4IGluZGV4KTsKIAogLyoqCiAgKiBydDJ4MDBxdWV1ZV9pbml0X3F1ZXVlcyAtIEluaXRpYWxpemUgYWxsIGRhdGEgcXVldWVzCkBAIC0yODEsNiArMjcyLDE4IEBACiB2b2lkIHJ0MngwMGxpbmtfc3RvcF93YXRjaGRvZyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKIAogLyoqCisgKiBydDJ4MDBsaW5rX3N0YXJ0X2FnYyAtIFN0YXJ0IHBlcmlvZGljIGdhaW4gY2FsaWJyYXRpb24KKyAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2LgorICovCit2b2lkIHJ0MngwMGxpbmtfc3RhcnRfYWdjKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOworCisvKioKKyAqIHJ0MngwMGxpbmtfc3RvcF9hZ2MgLSBTdG9wIHBlcmlvZGljIGdhaW4gY2FsaWJyYXRpb24KKyAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2LgorICovCit2b2lkIHJ0MngwMGxpbmtfc3RvcF9hZ2Moc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CisKKy8qKgogICogcnQyeDAwbGlua19yZWdpc3RlciAtIEluaXRpYWxpemUgbGluayB0dW5pbmcgJiB3YXRjaGRvZyBmdW5jdGlvbmFsaXR5CiAgKiBAcnQyeDAwZGV2OiBQb2ludGVyIHRvICZzdHJ1Y3QgcnQyeDAwX2Rldi4KICAqCkBAIC0zODUsNDEgKzM4OCwxNyBAQAogI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX0NSWVBUTyAqLwogCiAvKgotICogSFQgaGFuZGxlcnMuCi0gKi8KLSNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9IVAotdm9pZCBydDJ4MDBodF9jcmVhdGVfdHhfZGVzY3JpcHRvcihzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAotCQkJCSAgIHN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYywKLQkJCQkgICBjb25zdCBzdHJ1Y3QgcnQyeDAwX3JhdGUgKmh3cmF0ZSk7Ci0KLXUxNiBydDJ4MDBodF9jZW50ZXJfY2hhbm5lbChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZik7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHJ0MngwMGh0X2NyZWF0ZV90eF9kZXNjcmlwdG9yKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksCi0JCQkJCQkgc3RydWN0IHR4ZW50cnlfZGVzYyAqdHhkZXNjLAotCQkJCQkJIGNvbnN0IHN0cnVjdCBydDJ4MDBfcmF0ZSAqaHdyYXRlKQotewotfQotCi1zdGF0aWMgaW5saW5lIHUxNiBydDJ4MDBodF9jZW50ZXJfY2hhbm5lbChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZikKLXsKLQlyZXR1cm4gY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWU7Ci19Ci0jZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfSFQgKi8KLQotLyoKICAqIFJGa2lsbCBoYW5kbGVycy4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIHJ0MngwMHJma2lsbF9yZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewotCWlmICh0ZXN0X2JpdChDT05GSUdfU1VQUE9SVF9IV19CVVRUT04sICZydDJ4MDBkZXYtPmZsYWdzKSkKKwlpZiAodGVzdF9iaXQoQ0FQQUJJTElUWV9IV19CVVRUT04sICZydDJ4MDBkZXYtPmNhcF9mbGFncykpCiAJCXdpcGh5X3Jma2lsbF9zdGFydF9wb2xsaW5nKHJ0MngwMGRldi0+aHctPndpcGh5KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHJ0MngwMHJma2lsbF91bnJlZ2lzdGVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7Ci0JaWYgKHRlc3RfYml0KENPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCWlmICh0ZXN0X2JpdChDQVBBQklMSVRZX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkKIAkJd2lwaHlfcmZraWxsX3N0b3BfcG9sbGluZyhydDJ4MDBkZXYtPmh3LT53aXBoeSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaW5rLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGluay5jCmluZGV4IDI5YWJmZGUuLmVhMTBiMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaW5rLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpbmsuYwpAQCAtMTkyLDE3ICsxOTIsNyBAQAogCS8qCiAJICogRGV0ZXJtaW5lIGlmIHNvZnR3YXJlIGRpdmVyc2l0eSBpcyBlbmFibGVkIGZvcgogCSAqIGVpdGhlciB0aGUgVFggb3IgUlggYW50ZW5uYSAob3IgYm90aCkuCi0JICogQWx3YXlzIHBlcmZvcm0gdGhpcyBjaGVjayBzaW5jZSB3aXRoaW4gdGhlIGxpbmsKLQkgKiB0dW5lciBpbnRlcnZhbCB0aGUgY29uZmlndXJhdGlvbiBtaWdodCBoYXZlIGNoYW5nZWQuCiAJICovCi0JYW50LT5mbGFncyAmPSB+QU5URU5OQV9SWF9ESVZFUlNJVFk7Ci0JYW50LT5mbGFncyAmPSB+QU5URU5OQV9UWF9ESVZFUlNJVFk7Ci0KLQlpZiAocnQyeDAwZGV2LT5kZWZhdWx0X2FudC5yeCA9PSBBTlRFTk5BX1NXX0RJVkVSU0lUWSkKLQkJYW50LT5mbGFncyB8PSBBTlRFTk5BX1JYX0RJVkVSU0lUWTsKLQlpZiAocnQyeDAwZGV2LT5kZWZhdWx0X2FudC50eCA9PSBBTlRFTk5BX1NXX0RJVkVSU0lUWSkKLQkJYW50LT5mbGFncyB8PSBBTlRFTk5BX1RYX0RJVkVSU0lUWTsKLQogCWlmICghKGFudC0+ZmxhZ3MgJiBBTlRFTk5BX1JYX0RJVkVSU0lUWSkgJiYKIAkgICAgIShhbnQtPmZsYWdzICYgQU5URU5OQV9UWF9ESVZFUlNJVFkpKSB7CiAJCWFudC0+ZmxhZ3MgPSAwOwpAQCAtMzgzLDcgKzM3Myw3IEBACiAJICogZG8gbm90IHN1cHBvcnQgbGluayB0dW5pbmcgYXQgYWxsLCB3aGlsZSBvdGhlciBkZXZpY2VzIGNhbiBkaXNhYmxlCiAJICogdGhlIGZlYXR1cmUgZnJvbSB0aGUgRUVQUk9NLgogCSAqLwotCWlmICh0ZXN0X2JpdChEUklWRVJfU1VQUE9SVF9MSU5LX1RVTklORywgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCWlmICh0ZXN0X2JpdChDQVBBQklMSVRZX0xJTktfVFVOSU5HLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpKQogCQlydDJ4MDBkZXYtPm9wcy0+bGliLT5saW5rX3R1bmVyKHJ0MngwMGRldiwgcXVhbCwgbGluay0+Y291bnQpOwogCiAJLyoKQEAgLTQxMywxMiArNDAzLDExIEBACiB7CiAJc3RydWN0IGxpbmsgKmxpbmsgPSAmcnQyeDAwZGV2LT5saW5rOwogCi0JaWYgKCF0ZXN0X2JpdChERVZJQ0VfU1RBVEVfUFJFU0VOVCwgJnJ0MngwMGRldi0+ZmxhZ3MpIHx8Ci0JICAgICF0ZXN0X2JpdChEUklWRVJfU1VQUE9SVF9XQVRDSERPRywgJnJ0MngwMGRldi0+ZmxhZ3MpKQotCQlyZXR1cm47Ci0KLQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHJ0MngwMGRldi0+aHcsCi0JCQkJICAgICAmbGluay0+d2F0Y2hkb2dfd29yaywgV0FUQ0hET0dfSU5URVJWQUwpOworCWlmICh0ZXN0X2JpdChERVZJQ0VfU1RBVEVfUFJFU0VOVCwgJnJ0MngwMGRldi0+ZmxhZ3MpICYmCisJICAgIHJ0MngwMGRldi0+b3BzLT5saWItPndhdGNoZG9nKQorCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHJ0MngwMGRldi0+aHcsCisJCQkJCSAgICAgJmxpbmstPndhdGNoZG9nX3dvcmssCisJCQkJCSAgICAgV0FUQ0hET0dfSU5URVJWQUwpOwogfQogCiB2b2lkIHJ0MngwMGxpbmtfc3RvcF93YXRjaGRvZyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQpAQCAtNDQ3LDggKzQzNiw0NiBAQAogCQkJCQkgICAgIFdBVENIRE9HX0lOVEVSVkFMKTsKIH0KIAordm9pZCBydDJ4MDBsaW5rX3N0YXJ0X2FnYyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCXN0cnVjdCBsaW5rICpsaW5rID0gJnJ0MngwMGRldi0+bGluazsKKworCWlmICh0ZXN0X2JpdChERVZJQ0VfU1RBVEVfUFJFU0VOVCwgJnJ0MngwMGRldi0+ZmxhZ3MpICYmCisJICAgIHJ0MngwMGRldi0+b3BzLT5saWItPmdhaW5fY2FsaWJyYXRpb24pCisJCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsocnQyeDAwZGV2LT5odywKKwkJCQkJICAgICAmbGluay0+YWdjX3dvcmssCisJCQkJCSAgICAgQUdDX0lOVEVSVkFMKTsKK30KKwordm9pZCBydDJ4MDBsaW5rX3N0b3BfYWdjKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZydDJ4MDBkZXYtPmxpbmsuYWdjX3dvcmspOworfQorCitzdGF0aWMgdm9pZCBydDJ4MDBsaW5rX2FnYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9CisJICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnQyeDAwX2RldiwgbGluay5hZ2Nfd29yay53b3JrKTsKKwlzdHJ1Y3QgbGluayAqbGluayA9ICZydDJ4MDBkZXYtPmxpbms7CisKKwkvKgorCSAqIFdoZW4gdGhlIHJhZGlvIGlzIHNodXR0aW5nIGRvd24gd2Ugc2hvdWxkCisJICogaW1tZWRpYXRlbHkgY2Vhc2UgdGhlIHdhdGNoZG9nIG1vbml0b3JpbmcuCisJICovCisJaWYgKCF0ZXN0X2JpdChERVZJQ0VfU1RBVEVfRU5BQkxFRF9SQURJTywgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCQlyZXR1cm47CisKKwlydDJ4MDBkZXYtPm9wcy0+bGliLT5nYWluX2NhbGlicmF0aW9uKHJ0MngwMGRldik7CisKKwlpZiAodGVzdF9iaXQoREVWSUNFX1NUQVRFX1BSRVNFTlQsICZydDJ4MDBkZXYtPmZsYWdzKSkKKwkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhydDJ4MDBkZXYtPmh3LAorCQkJCQkgICAgICZsaW5rLT5hZ2Nfd29yaywKKwkJCQkJICAgICBBR0NfSU5URVJWQUwpOworfQorCiB2b2lkIHJ0MngwMGxpbmtfcmVnaXN0ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKKwlJTklUX0RFTEFZRURfV09SSygmcnQyeDAwZGV2LT5saW5rLmFnY193b3JrLCBydDJ4MDBsaW5rX2FnYyk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnJ0MngwMGRldi0+bGluay53YXRjaGRvZ193b3JrLCBydDJ4MDBsaW5rX3dhdGNoZG9nKTsKIAlJTklUX0RFTEFZRURfV09SSygmcnQyeDAwZGV2LT5saW5rLndvcmssIHJ0MngwMGxpbmtfdHVuZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMG1hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMG1hYy5jCmluZGV4IDY2MWM2YmEuLjkzYmVjMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBtYWMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbWFjLmMKQEAgLTExOSw3ICsxMTksNyBAQAogCSAqIFVzZSB0aGUgQVRJTSBxdWV1ZSBpZiBhcHByb3ByaWF0ZSBhbmQgcHJlc2VudC4KIAkgKi8KIAlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1NFTkRfQUZURVJfRFRJTSAmJgotCSAgICB0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9BVElNX1FVRVVFLCAmcnQyeDAwZGV2LT5mbGFncykpCisJICAgIHRlc3RfYml0KFJFUVVJUkVfQVRJTV9RVUVVRSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkKIAkJcWlkID0gUUlEX0FUSU07CiAKIAlxdWV1ZSA9IHJ0MngwMHF1ZXVlX2dldF90eF9xdWV1ZShydDJ4MDBkZXYsIHFpZCk7CkBAIC0xNTgsNyArMTU4LDcgQEAKIAlyZXR1cm47CiAKICBleGl0X2ZhaWw6Ci0JaWVlZTgwMjExX3N0b3BfcXVldWUocnQyeDAwZGV2LT5odywgcWlkKTsKKwlydDJ4MDBxdWV1ZV9wYXVzZV9xdWV1ZShxdWV1ZSk7CiAJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMG1hY190eCk7CkBAIC00MTEsMTEgKzQxMSwxMSBAQAogCSAqIG9mIGRpZmZlcmVudCB0eXBlcywgYnV0IGhhcyBubyBhIHNlcGFyYXRlIGZpbHRlciBmb3IgUFMgUG9sbCBmcmFtZXMsCiAJICogRklGX0NPTlRST0wgZmxhZyBpbXBsaWVzIEZJRl9QU1BPTEwuCiAJICovCi0JaWYgKCF0ZXN0X2JpdChEUklWRVJfU1VQUE9SVF9DT05UUk9MX0ZJTFRFUlMsICZydDJ4MDBkZXYtPmZsYWdzKSkgeworCWlmICghdGVzdF9iaXQoQ0FQQUJJTElUWV9DT05UUk9MX0ZJTFRFUlMsICZydDJ4MDBkZXYtPmNhcF9mbGFncykpIHsKIAkJaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9DT05UUk9MIHx8ICp0b3RhbF9mbGFncyAmIEZJRl9QU1BPTEwpCiAJCQkqdG90YWxfZmxhZ3MgfD0gRklGX0NPTlRST0wgfCBGSUZfUFNQT0xMOwogCX0KLQlpZiAoIXRlc3RfYml0KERSSVZFUl9TVVBQT1JUX0NPTlRST0xfRklMVEVSX1BTUE9MTCwgJnJ0MngwMGRldi0+ZmxhZ3MpKSB7CisJaWYgKCF0ZXN0X2JpdChDQVBBQklMSVRZX0NPTlRST0xfRklMVEVSX1BTUE9MTCwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkgewogCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0NPTlRST0wpCiAJCQkqdG90YWxfZmxhZ3MgfD0gRklGX1BTUE9MTDsKIAl9CkBAIC00OTYsNyArNDk2LDcgQEAKIAogCWlmICghdGVzdF9iaXQoREVWSUNFX1NUQVRFX1BSRVNFTlQsICZydDJ4MDBkZXYtPmZsYWdzKSkKIAkJcmV0dXJuIDA7Ci0JZWxzZSBpZiAoIXRlc3RfYml0KENPTkZJR19TVVBQT1JUX0hXX0NSWVBUTywgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCWVsc2UgaWYgKCF0ZXN0X2JpdChDQVBBQklMSVRZX0hXX0NSWVBUTywgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCWVsc2UgaWYgKGtleS0+a2V5bGVuID4gMzIpCiAJCXJldHVybiAtRU5PU1BDOwpAQCAtNTYyLDcgKzU2Miw3IEBACiB2b2lkIHJ0MngwMG1hY19zd19zY2FuX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKLQlfX3NldF9iaXQoREVWSUNFX1NUQVRFX1NDQU5OSU5HLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJc2V0X2JpdChERVZJQ0VfU1RBVEVfU0NBTk5JTkcsICZydDJ4MDBkZXYtPmZsYWdzKTsKIAlydDJ4MDBsaW5rX3N0b3BfdHVuZXIocnQyeDAwZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMG1hY19zd19zY2FuX3N0YXJ0KTsKQEAgLTU3MCw3ICs1NzAsNyBAQAogdm9pZCBydDJ4MDBtYWNfc3dfc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gaHctPnByaXY7Ci0JX19jbGVhcl9iaXQoREVWSUNFX1NUQVRFX1NDQU5OSU5HLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJY2xlYXJfYml0KERFVklDRV9TVEFURV9TQ0FOTklORywgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCXJ0MngwMGxpbmtfc3RhcnRfdHVuZXIocnQyeDAwZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMG1hY19zd19zY2FuX2NvbXBsZXRlKTsKQEAgLTczNywzICs3MzcsODQgQEAKIAkJcnQyeDAwcXVldWVfZmx1c2hfcXVldWUocXVldWUsIGRyb3ApOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbWFjX2ZsdXNoKTsKKworaW50IHJ0MngwMG1hY19zZXRfYW50ZW5uYShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIHR4X2FudCwgdTMyIHJ4X2FudCkKK3sKKwlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gaHctPnByaXY7CisJc3RydWN0IGxpbmtfYW50ICphbnQgPSAmcnQyeDAwZGV2LT5saW5rLmFudDsKKwlzdHJ1Y3QgYW50ZW5uYV9zZXR1cCAqZGVmID0gJnJ0MngwMGRldi0+ZGVmYXVsdF9hbnQ7CisJc3RydWN0IGFudGVubmFfc2V0dXAgc2V0dXA7CisKKwkvLyBUaGUgYW50ZW5uYSB2YWx1ZSBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgMCwKKwkvLyBvciBleGNlZWQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGFudGVubmEncy4KKwlpZiAoIXR4X2FudCB8fCAodHhfYW50ICYgfjMpIHx8ICFyeF9hbnQgfHwgKHJ4X2FudCAmIH4zKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvLyBXaGVuIHRoZSBjbGllbnQgdHJpZWQgdG8gY29uZmlndXJlIHRoZSBhbnRlbm5hIHRvIG9yIGZyb20KKwkvLyBkaXZlcnNpdHkgbW9kZSwgd2UgbXVzdCByZXNldCB0aGUgZGVmYXVsdCBhbnRlbm5hIGFzIHdlbGwKKwkvLyBhcyB0aGF0IGNvbnRyb2xzIHRoZSBkaXZlcnNpdHkgc3dpdGNoLgorCWlmIChhbnQtPmZsYWdzICYgQU5URU5OQV9UWF9ESVZFUlNJVFkgJiYgdHhfYW50ICE9IDMpCisJCWFudC0+ZmxhZ3MgJj0gfkFOVEVOTkFfVFhfRElWRVJTSVRZOworCWlmIChhbnQtPmZsYWdzICYgQU5URU5OQV9SWF9ESVZFUlNJVFkgJiYgcnhfYW50ICE9IDMpCisJCWFudC0+ZmxhZ3MgJj0gfkFOVEVOTkFfUlhfRElWRVJTSVRZOworCisJLy8gSWYgZGl2ZXJzaXR5IGlzIGJlaW5nIGVuYWJsZWQsIGNoZWNrIGlmIHdlIG5lZWQgaGFyZHdhcmUKKwkvLyBvciBzb2Z0d2FyZSBkaXZlcnNpdHkuIEluIHRoZSBsYXR0ZXIgY2FzZSwgcmVzZXQgdGhlIHZhbHVlLAorCS8vIGFuZCBtYWtlIHN1cmUgd2UgdXBkYXRlIHRoZSBhbnRlbm5hIGZsYWdzIHRvIGhhdmUgdGhlCisJLy8gbGluayB0dW5lciBwaWNrIHVwIHRoZSBkaXZlcnNpdHkgdHVuaW5nLgorCWlmICh0eF9hbnQgPT0gMyAmJiBkZWYtPnR4ID09IEFOVEVOTkFfU1dfRElWRVJTSVRZKSB7CisJCXR4X2FudCA9IEFOVEVOTkFfU1dfRElWRVJTSVRZOworCQlhbnQtPmZsYWdzIHw9IEFOVEVOTkFfVFhfRElWRVJTSVRZOworCX0KKworCWlmIChyeF9hbnQgPT0gMyAmJiBkZWYtPnJ4ID09IEFOVEVOTkFfU1dfRElWRVJTSVRZKSB7CisJCXJ4X2FudCA9IEFOVEVOTkFfU1dfRElWRVJTSVRZOworCQlhbnQtPmZsYWdzIHw9IEFOVEVOTkFfUlhfRElWRVJTSVRZOworCX0KKworCXNldHVwLnR4ID0gdHhfYW50OworCXNldHVwLnJ4ID0gcnhfYW50OworCisJcnQyeDAwbGliX2NvbmZpZ19hbnRlbm5hKHJ0MngwMGRldiwgc2V0dXApOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBtYWNfc2V0X2FudGVubmEpOworCitpbnQgcnQyeDAwbWFjX2dldF9hbnRlbm5hKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgKnR4X2FudCwgdTMyICpyeF9hbnQpCit7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGh3LT5wcml2OworCXN0cnVjdCBsaW5rX2FudCAqYW50ID0gJnJ0MngwMGRldi0+bGluay5hbnQ7CisJc3RydWN0IGFudGVubmFfc2V0dXAgKmFjdGl2ZSA9ICZydDJ4MDBkZXYtPmxpbmsuYW50LmFjdGl2ZTsKKworCS8vIFdoZW4gc29mdHdhcmUgZGl2ZXJzaXR5IGlzIGFjdGl2ZSwgd2UgbXVzdCByZXBvcnQgdGhpcyB0byB0aGUKKwkvLyBjbGllbnQgYW5kIG5vdCB0aGUgY3VycmVudCBhY3RpdmUgYW50ZW5uYSBzdGF0ZS4KKwlpZiAoYW50LT5mbGFncyAmIEFOVEVOTkFfVFhfRElWRVJTSVRZKQorCQkqdHhfYW50ID0gQU5URU5OQV9IV19ESVZFUlNJVFk7CisJZWxzZQorCQkqdHhfYW50ID0gYWN0aXZlLT50eDsKKworCWlmIChhbnQtPmZsYWdzICYgQU5URU5OQV9SWF9ESVZFUlNJVFkpCisJCSpyeF9hbnQgPSBBTlRFTk5BX0hXX0RJVkVSU0lUWTsKKwllbHNlCisJCSpyeF9hbnQgPSBhY3RpdmUtPnJ4OworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBtYWNfZ2V0X2FudGVubmEpOworCit2b2lkIHJ0MngwMG1hY19nZXRfcmluZ3BhcmFtKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICB1MzIgKnR4LCB1MzIgKnR4X21heCwgdTMyICpyeCwgdTMyICpyeF9tYXgpCit7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGh3LT5wcml2OworCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZTsKKworCXR4X3F1ZXVlX2Zvcl9lYWNoKHJ0MngwMGRldiwgcXVldWUpIHsKKwkJKnR4ICs9IHF1ZXVlLT5sZW5ndGg7CisJCSp0eF9tYXggKz0gcXVldWUtPmxpbWl0OworCX0KKworCSpyeCA9IHJ0MngwMGRldi0+cngtPmxlbmd0aDsKKwkqcnhfbWF4ID0gcnQyeDAwZGV2LT5yeC0+bGltaXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBtYWNfZ2V0X3JpbmdwYXJhbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmMKaW5kZXggNGRkODJiMC4uMTcxNDhiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuYwpAQCAtNjAsMTQgKzYwLDE1IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBwY2lfcmVnYnVzeV9yZWFkKTsKIAotdm9pZCBydDJ4MDBwY2lfcnhkb25lKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCitib29sIHJ0MngwMHBjaV9yeGRvbmUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKIAlzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUgPSBydDJ4MDBkZXYtPnJ4OwogCXN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnk7CiAJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpICplbnRyeV9wcml2OwogCXN0cnVjdCBza2JfZnJhbWVfZGVzYyAqc2tiZGVzYzsKKwlpbnQgbWF4X3J4ID0gMTY7CiAKLQl3aGlsZSAoMSkgeworCXdoaWxlICgtLW1heF9yeCkgewogCQllbnRyeSA9IHJ0MngwMHF1ZXVlX2dldF9lbnRyeShxdWV1ZSwgUV9JTkRFWCk7CiAJCWVudHJ5X3ByaXYgPSBlbnRyeS0+cHJpdl9kYXRhOwogCkBAIC05Myw5ICs5NCwyMCBAQAogCQkgKi8KIAkJcnQyeDAwbGliX3J4ZG9uZShlbnRyeSk7CiAJfQorCisJcmV0dXJuICFtYXhfcng7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBwY2lfcnhkb25lKTsKIAordm9pZCBydDJ4MDBwY2lfZmx1c2hfcXVldWUoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlLCBib29sIGRyb3ApCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyAhcnQyeDAwcXVldWVfZW1wdHkocXVldWUpICYmIGkgPCAxMDsgaSsrKQorCQltc2xlZXAoMTApOworfQorRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwcGNpX2ZsdXNoX3F1ZXVlKTsKKwogLyoKICAqIERldmljZSBpbml0aWFsaXphdGlvbiBoYW5kbGVycy4KICAqLwpAQCAtMjM5LDkgKzI1MSw4IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKLWludCBydDJ4MDBwY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK2ludCBydDJ4MDBwY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsIGNvbnN0IHN0cnVjdCBydDJ4MDBfb3BzICpvcHMpCiB7Ci0Jc3RydWN0IHJ0MngwMF9vcHMgKm9wcyA9IChzdHJ1Y3QgcnQyeDAwX29wcyAqKWlkLT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2OwogCWludCByZXR2YWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmgKaW5kZXggNzQ2Y2U4Zi4uZTJjOTlmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuaApAQCAtMTAxLDggKzEwMSwyMSBAQAogLyoqCiAgKiBydDJ4MDBwY2lfcnhkb25lIC0gSGFuZGxlIFJYIGRvbmUgZXZlbnRzCiAgKiBAcnQyeDAwZGV2OiBEZXZpY2UgcG9pbnRlciwgc2VlICZzdHJ1Y3QgcnQyeDAwX2Rldi4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIHN0aWxsIHJ4IGZyYW1lcyBwZW5kaW5nIGFuZCBmYWxzZSBpZiBhbGwKKyAqIHBlbmRpbmcgcnggZnJhbWVzIHdlcmUgcHJvY2Vzc2VkLgogICovCi12b2lkIHJ0MngwMHBjaV9yeGRvbmUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7Citib29sIHJ0MngwMHBjaV9yeGRvbmUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CisKKy8qKgorICogcnQyeDAwcGNpX2ZsdXNoX3F1ZXVlIC0gRmx1c2ggZGF0YSBxdWV1ZQorICogQHF1ZXVlOiBEYXRhIHF1ZXVlIHRvIHN0b3AKKyAqIEBkcm9wOiBUcnVlIHRvIGRyb3AgYWxsIHBlbmRpbmcgZnJhbWVzLgorICoKKyAqIFRoaXMgd2lsbCB3YWl0IGZvciBhIG1heGltdW0gb2YgMTAwbXMsIHdhaXRpbmcgZm9yIHRoZSBxdWV1ZXMKKyAqIHRvIGJlY29tZSBlbXB0eS4KKyAqLwordm9pZCBydDJ4MDBwY2lfZmx1c2hfcXVldWUoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlLCBib29sIGRyb3ApOwogCiAvKgogICogRGV2aWNlIGluaXRpYWxpemF0aW9uIGhhbmRsZXJzLgpAQCAtMTEzLDcgKzEyNiw3IEBACiAvKgogICogUENJIGRyaXZlciBoYW5kbGVycy4KICAqLwotaW50IHJ0MngwMHBjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKTsKK2ludCBydDJ4MDBwY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsIGNvbnN0IHN0cnVjdCBydDJ4MDBfb3BzICpvcHMpOwogdm9pZCBydDJ4MDBwY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KTsKICNpZmRlZiBDT05GSUdfUE0KIGludCBydDJ4MDBwY2lfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKaW5kZXggNDM1ODA1MS4uYWI4YzE2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKQEAgLTYwLDcgKzYwLDcgQEAKIAkgKiBhdCBsZWFzdCA4IGJ5dGVzIGJ5dGVzIGF2YWlsYWJsZSBpbiBoZWFkcm9vbSBmb3IgSVYvRUlWCiAJICogYW5kIDggYnl0ZXMgZm9yIElDViBkYXRhIGFzIHRhaWxyb29uLgogCSAqLwotCWlmICh0ZXN0X2JpdChDT05GSUdfU1VQUE9SVF9IV19DUllQVE8sICZydDJ4MDBkZXYtPmZsYWdzKSkgeworCWlmICh0ZXN0X2JpdChDQVBBQklMSVRZX0hXX0NSWVBUTywgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkgewogCQloZWFkX3NpemUgKz0gODsKIAkJdGFpbF9zaXplICs9IDg7CiAJfQpAQCAtODYsNyArODYsNyBAQAogCW1lbXNldChza2JkZXNjLCAwLCBzaXplb2YoKnNrYmRlc2MpKTsKIAlza2JkZXNjLT5lbnRyeSA9IGVudHJ5OwogCi0JaWYgKHRlc3RfYml0KERSSVZFUl9SRVFVSVJFX0RNQSwgJnJ0MngwMGRldi0+ZmxhZ3MpKSB7CisJaWYgKHRlc3RfYml0KFJFUVVJUkVfRE1BLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpKSB7CiAJCXNrYmRlc2MtPnNrYl9kbWEgPSBkbWFfbWFwX3NpbmdsZShydDJ4MDBkZXYtPmRldiwKIAkJCQkJCSAgc2tiLT5kYXRhLAogCQkJCQkJICBza2ItPmxlbiwKQEAgLTE0OCwxOSArMTQ4LDYgQEAKIAlza2JfdHJpbShza2IsIGZyYW1lX2xlbmd0aCk7CiB9CiAKLXZvaWQgcnQyeDAwcXVldWVfYWxpZ25fcGF5bG9hZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGVhZGVyX2xlbmd0aCkKLXsKLQl1bnNpZ25lZCBpbnQgZnJhbWVfbGVuZ3RoID0gc2tiLT5sZW47Ci0JdW5zaWduZWQgaW50IGFsaWduID0gQUxJR05fU0laRShza2IsIGhlYWRlcl9sZW5ndGgpOwotCi0JaWYgKCFhbGlnbikKLQkJcmV0dXJuOwotCi0Jc2tiX3B1c2goc2tiLCBhbGlnbik7Ci0JbWVtbW92ZShza2ItPmRhdGEsIHNrYi0+ZGF0YSArIGFsaWduLCBmcmFtZV9sZW5ndGgpOwotCXNrYl90cmltKHNrYiwgZnJhbWVfbGVuZ3RoKTsKLX0KLQogdm9pZCBydDJ4MDBxdWV1ZV9pbnNlcnRfbDJwYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRlcl9sZW5ndGgpCiB7CiAJdW5zaWduZWQgaW50IHBheWxvYWRfbGVuZ3RoID0gc2tiLT5sZW4gLSBoZWFkZXJfbGVuZ3RoOwpAQCAtMjI2LDcgKzIxMyw3IEBACiAKIAlfX3NldF9iaXQoRU5UUllfVFhEX0dFTkVSQVRFX1NFUSwgJnR4ZGVzYy0+ZmxhZ3MpOwogCi0JaWYgKCF0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9TV19TRVFOTywgJmVudHJ5LT5xdWV1ZS0+cnQyeDAwZGV2LT5mbGFncykpCisJaWYgKCF0ZXN0X2JpdChSRVFVSVJFX1NXX1NFUU5PLCAmZW50cnktPnF1ZXVlLT5ydDJ4MDBkZXYtPmNhcF9mbGFncykpCiAJCXJldHVybjsKIAogCS8qCkBAIC0zMTUsNiArMzAyLDg1IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBydDJ4MDBxdWV1ZV9jcmVhdGVfdHhfZGVzY3JpcHRvcl9odChzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAorCQkJCQkJc3RydWN0IHR4ZW50cnlfZGVzYyAqdHhkZXNjLAorCQkJCQkJY29uc3Qgc3RydWN0IHJ0MngwMF9yYXRlICpod3JhdGUpCit7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihlbnRyeS0+c2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnR4cmF0ZSA9ICZ0eF9pbmZvLT5jb250cm9sLnJhdGVzWzBdOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKillbnRyeS0+c2tiLT5kYXRhOworCisJaWYgKHR4X2luZm8tPmNvbnRyb2wuc3RhKQorCQl0eGRlc2MtPnUuaHQubXBkdV9kZW5zaXR5ID0KKwkJICAgIHR4X2luZm8tPmNvbnRyb2wuc3RhLT5odF9jYXAuYW1wZHVfZGVuc2l0eTsKKworCXR4ZGVzYy0+dS5odC5iYV9zaXplID0gNzsJLyogRklYTUU6IFdoYXQgdmFsdWUgaXMgbmVlZGVkPyAqLworCisJLyoKKwkgKiBPbmx5IG9uZSBTVEJDIHN0cmVhbSBpcyBzdXBwb3J0ZWQgZm9yIG5vdy4KKwkgKi8KKwlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1NUQkMpCisJCXR4ZGVzYy0+dS5odC5zdGJjID0gMTsKKworCS8qCisJICogSWYgSUVFRTgwMjExX1RYX1JDX01DUyBpcyBzZXQgdHhyYXRlLT5pZHgganVzdCBjb250YWlucyB0aGUKKwkgKiBtY3MgcmF0ZSB0byBiZSB1c2VkCisJICovCisJaWYgKHR4cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfTUNTKSB7CisJCXR4ZGVzYy0+dS5odC5tY3MgPSB0eHJhdGUtPmlkeDsKKworCQkvKgorCQkgKiBNSU1PIFBTIHNob3VsZCBiZSBzZXQgdG8gMSBmb3IgU1RBJ3MgdXNpbmcgZHluYW1pYyBTTSBQUworCQkgKiB3aGVuIHVzaW5nIG1vcmUgdGhlbiBvbmUgdHggc3RyZWFtICg+TUNTNykuCisJCSAqLworCQlpZiAodHhfaW5mby0+Y29udHJvbC5zdGEgJiYgdHhkZXNjLT51Lmh0Lm1jcyA+IDcgJiYKKwkJICAgICgodHhfaW5mby0+Y29udHJvbC5zdGEtPmh0X2NhcC5jYXAgJgorCQkgICAgICBJRUVFODAyMTFfSFRfQ0FQX1NNX1BTKSA+PgorCQkgICAgIElFRUU4MDIxMV9IVF9DQVBfU01fUFNfU0hJRlQpID09CisJCSAgICBXTEFOX0hUX0NBUF9TTV9QU19EWU5BTUlDKQorCQkJX19zZXRfYml0KEVOVFJZX1RYRF9IVF9NSU1PX1BTLCAmdHhkZXNjLT5mbGFncyk7CisJfSBlbHNlIHsKKwkJdHhkZXNjLT51Lmh0Lm1jcyA9IHJ0MngwMF9nZXRfcmF0ZV9tY3MoaHdyYXRlLT5tY3MpOworCQlpZiAodHhyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfU0hPUlRfUFJFQU1CTEUpCisJCQl0eGRlc2MtPnUuaHQubWNzIHw9IDB4MDg7CisJfQorCisJLyoKKwkgKiBUaGlzIGZyYW1lIGlzIGVsaWdpYmxlIGZvciBhbiBBTVBEVSwgaG93ZXZlciwgZG9uJ3QgYWdncmVnYXRlCisJICogZnJhbWVzIHRoYXQgYXJlIGludGVuZGVkIHRvIHByb2JlIGEgc3BlY2lmaWMgdHggcmF0ZS4KKwkgKi8KKwlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVICYmCisJICAgICEodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1JBVEVfQ1RSTF9QUk9CRSkpCisJCV9fc2V0X2JpdChFTlRSWV9UWERfSFRfQU1QRFUsICZ0eGRlc2MtPmZsYWdzKTsKKworCS8qCisJICogU2V0IDQwTWh6IG1vZGUgaWYgbmVjZXNzYXJ5IChmb3IgbGVnYWN5IHJhdGVzIHRoaXMgd2lsbAorCSAqIGR1cGxpY2F0ZSB0aGUgZnJhbWUgdG8gYm90aCBjaGFubmVscykuCisJICovCisJaWYgKHR4cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIIHx8CisJICAgIHR4cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfRFVQX0RBVEEpCisJCV9fc2V0X2JpdChFTlRSWV9UWERfSFRfQldfNDAsICZ0eGRlc2MtPmZsYWdzKTsKKwlpZiAodHhyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSSkKKwkJX19zZXRfYml0KEVOVFJZX1RYRF9IVF9TSE9SVF9HSSwgJnR4ZGVzYy0+ZmxhZ3MpOworCisJLyoKKwkgKiBEZXRlcm1pbmUgSUZTIHZhbHVlcworCSAqIC0gVXNlIFRYT1BfQkFDS09GRiBmb3IgbWFuYWdlbWVudCBmcmFtZXMgZXhjZXB0IGJlYWNvbnMKKwkgKiAtIFVzZSBUWE9QX1NJRlMgZm9yIGZyYWdtZW50IGJ1cnN0cworCSAqIC0gVXNlIFRYT1BfSFRUWE9QIGZvciBldmVyeXRoaW5nIGVsc2UKKwkgKgorCSAqIE5vdGU6IHJ0MjgwMCBkZXZpY2VzIHdvbid0IHVzZSBDVFMgcHJvdGVjdGlvbiAoaWYgdXNlZCkKKwkgKiBmb3IgZnJhbWVzIG5vdCB0cmFuc21pdHRlZCB3aXRoIFRYT1BfSFRUWE9QCisJICovCisJaWYgKGllZWU4MDIxMV9pc19tZ210KGhkci0+ZnJhbWVfY29udHJvbCkgJiYKKwkgICAgIWllZWU4MDIxMV9pc19iZWFjb24oaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJdHhkZXNjLT51Lmh0LnR4b3AgPSBUWE9QX0JBQ0tPRkY7CisJZWxzZSBpZiAoISh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfRklSU1RfRlJBR01FTlQpKQorCQl0eGRlc2MtPnUuaHQudHhvcCA9IFRYT1BfU0lGUzsKKwllbHNlCisJCXR4ZGVzYy0+dS5odC50eG9wID0gVFhPUF9IVFRYT1A7Cit9CisKIHN0YXRpYyB2b2lkIHJ0MngwMHF1ZXVlX2NyZWF0ZV90eF9kZXNjcmlwdG9yKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksCiAJCQkJCSAgICAgc3RydWN0IHR4ZW50cnlfZGVzYyAqdHhkZXNjKQogewpAQCAtNDA5LDggKzQ3NSw4IEBACiAJcnQyeDAwY3J5cHRvX2NyZWF0ZV90eF9kZXNjcmlwdG9yKGVudHJ5LCB0eGRlc2MpOwogCXJ0MngwMHF1ZXVlX2NyZWF0ZV90eF9kZXNjcmlwdG9yX3NlcShlbnRyeSwgdHhkZXNjKTsKIAotCWlmICh0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9IVF9UWF9ERVNDLCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCXJ0MngwMGh0X2NyZWF0ZV90eF9kZXNjcmlwdG9yKGVudHJ5LCB0eGRlc2MsIGh3cmF0ZSk7CisJaWYgKHRlc3RfYml0KFJFUVVJUkVfSFRfVFhfREVTQywgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkKKwkJcnQyeDAwcXVldWVfY3JlYXRlX3R4X2Rlc2NyaXB0b3JfaHQoZW50cnksIHR4ZGVzYywgaHdyYXRlKTsKIAllbHNlCiAJCXJ0MngwMHF1ZXVlX2NyZWF0ZV90eF9kZXNjcmlwdG9yX3BsY3AoZW50cnksIHR4ZGVzYywgaHdyYXRlKTsKIH0KQEAgLTQ0OSw3ICs1MTUsNyBAQAogCS8qCiAJICogTWFwIHRoZSBza2IgdG8gRE1BLgogCSAqLwotCWlmICh0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9ETUEsICZydDJ4MDBkZXYtPmZsYWdzKSkKKwlpZiAodGVzdF9iaXQoUkVRVUlSRV9ETUEsICZydDJ4MDBkZXYtPmNhcF9mbGFncykpCiAJCXJ0MngwMHF1ZXVlX21hcF90eHNrYihlbnRyeSk7CiAKIAlyZXR1cm4gMDsKQEAgLTQ5NSw4ICs1NjEsMTEgQEAKIAlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2M7CiAJdTggcmF0ZV9pZHgsIHJhdGVfZmxhZ3M7CiAKLQlpZiAodW5saWtlbHkocnQyeDAwcXVldWVfZnVsbChxdWV1ZSkpKQorCWlmICh1bmxpa2VseShydDJ4MDBxdWV1ZV9mdWxsKHF1ZXVlKSkpIHsKKwkJRVJST1IocXVldWUtPnJ0MngwMGRldiwKKwkJICAgICAgIkRyb3BwaW5nIGZyYW1lIGR1ZSB0byBmdWxsIHR4IHF1ZXVlICVkLlxuIiwgcXVldWUtPnFpZCk7CiAJCXJldHVybiAtRU5PQlVGUzsKKwl9CiAKIAlpZiAodW5saWtlbHkodGVzdF9hbmRfc2V0X2JpdChFTlRSWV9PV05FUl9ERVZJQ0VfREFUQSwKIAkJCQkgICAgICAmZW50cnktPmZsYWdzKSkpIHsKQEAgLTUzOSw3ICs2MDgsNyBAQAogCSAqLwogCWlmICh0ZXN0X2JpdChFTlRSWV9UWERfRU5DUllQVCwgJnR4ZGVzYy5mbGFncykgJiYKIAkgICAgIXRlc3RfYml0KEVOVFJZX1RYRF9FTkNSWVBUX0lWLCAmdHhkZXNjLmZsYWdzKSkgewotCQlpZiAodGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfQ09QWV9JViwgJnF1ZXVlLT5ydDJ4MDBkZXYtPmZsYWdzKSkKKwkJaWYgKHRlc3RfYml0KFJFUVVJUkVfQ09QWV9JViwgJnF1ZXVlLT5ydDJ4MDBkZXYtPmNhcF9mbGFncykpCiAJCQlydDJ4MDBjcnlwdG9fdHhfY29weV9pdihza2IsICZ0eGRlc2MpOwogCQllbHNlCiAJCQlydDJ4MDBjcnlwdG9fdHhfcmVtb3ZlX2l2KHNrYiwgJnR4ZGVzYyk7CkBAIC01NTMsOSArNjIyLDkgQEAKIAkgKiBQQ0kgYW5kIFVTQiBkZXZpY2VzLCB3aGlsZSBoZWFkZXIgYWxpZ25tZW50IG9ubHkgaXMgdmFsaWQKIAkgKiBmb3IgUENJIGRldmljZXMuCiAJICovCi0JaWYgKHRlc3RfYml0KERSSVZFUl9SRVFVSVJFX0wyUEFELCAmcXVldWUtPnJ0MngwMGRldi0+ZmxhZ3MpKQorCWlmICh0ZXN0X2JpdChSRVFVSVJFX0wyUEFELCAmcXVldWUtPnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkKIAkJcnQyeDAwcXVldWVfaW5zZXJ0X2wycGFkKGVudHJ5LT5za2IsIHR4ZGVzYy5oZWFkZXJfbGVuZ3RoKTsKLQllbHNlIGlmICh0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9ETUEsICZxdWV1ZS0+cnQyeDAwZGV2LT5mbGFncykpCisJZWxzZSBpZiAodGVzdF9iaXQoUkVRVUlSRV9ETUEsICZxdWV1ZS0+cnQyeDAwZGV2LT5jYXBfZmxhZ3MpKQogCQlydDJ4MDBxdWV1ZV9hbGlnbl9mcmFtZShlbnRyeS0+c2tiKTsKIAogCS8qCkBAIC01NzEsNyArNjQwLDcgQEAKIAogCXNldF9iaXQoRU5UUllfREFUQV9QRU5ESU5HLCAmZW50cnktPmZsYWdzKTsKIAotCXJ0MngwMHF1ZXVlX2luZGV4X2luYyhxdWV1ZSwgUV9JTkRFWCk7CisJcnQyeDAwcXVldWVfaW5kZXhfaW5jKGVudHJ5LCBRX0lOREVYKTsKIAlydDJ4MDBxdWV1ZV93cml0ZV90eF9kZXNjcmlwdG9yKGVudHJ5LCAmdHhkZXNjKTsKIAlydDJ4MDBxdWV1ZV9raWNrX3R4X3F1ZXVlKHF1ZXVlLCAmdHhkZXNjKTsKIApAQCAtNjYwLDEwICs3MjksMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkIHJ0MngwMHF1ZXVlX2Zvcl9lYWNoX2VudHJ5KHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSwKK2Jvb2wgcnQyeDAwcXVldWVfZm9yX2VhY2hfZW50cnkoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlLAogCQkJCWVudW0gcXVldWVfaW5kZXggc3RhcnQsCiAJCQkJZW51bSBxdWV1ZV9pbmRleCBlbmQsCi0JCQkJdm9pZCAoKmZuKShzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KSkKKwkJCQl2b2lkICpkYXRhLAorCQkJCWJvb2wgKCpmbikoc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSwKKwkJCQkJICAgdm9pZCAqZGF0YSkpCiB7CiAJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKIAl1bnNpZ25lZCBpbnQgaW5kZXhfc3RhcnQ7CkBAIC02NzQsNyArNzQ1LDcgQEAKIAkJRVJST1IocXVldWUtPnJ0MngwMGRldiwKIAkJICAgICAgIkVudHJ5IHJlcXVlc3RlZCBmcm9tIGludmFsaWQgaW5kZXggcmFuZ2UgKCVkIC0gJWQpXG4iLAogCQkgICAgICBzdGFydCwgZW5kKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKIAkvKgpAQCAtNjkzLDE1ICs3NjQsMjMgQEAKIAkgKiBzZW5kIG91dCBhbGwgZnJhbWVzIGluIHRoZSBjb3JyZWN0IG9yZGVyLgogCSAqLwogCWlmIChpbmRleF9zdGFydCA8IGluZGV4X2VuZCkgewotCQlmb3IgKGkgPSBpbmRleF9zdGFydDsgaSA8IGluZGV4X2VuZDsgaSsrKQotCQkJZm4oJnF1ZXVlLT5lbnRyaWVzW2ldKTsKKwkJZm9yIChpID0gaW5kZXhfc3RhcnQ7IGkgPCBpbmRleF9lbmQ7IGkrKykgeworCQkJaWYgKGZuKCZxdWV1ZS0+ZW50cmllc1tpXSwgZGF0YSkpCisJCQkJcmV0dXJuIHRydWU7CisJCX0KIAl9IGVsc2UgewotCQlmb3IgKGkgPSBpbmRleF9zdGFydDsgaSA8IHF1ZXVlLT5saW1pdDsgaSsrKQotCQkJZm4oJnF1ZXVlLT5lbnRyaWVzW2ldKTsKKwkJZm9yIChpID0gaW5kZXhfc3RhcnQ7IGkgPCBxdWV1ZS0+bGltaXQ7IGkrKykgeworCQkJaWYgKGZuKCZxdWV1ZS0+ZW50cmllc1tpXSwgZGF0YSkpCisJCQkJcmV0dXJuIHRydWU7CisJCX0KIAotCQlmb3IgKGkgPSAwOyBpIDwgaW5kZXhfZW5kOyBpKyspCi0JCQlmbigmcXVldWUtPmVudHJpZXNbaV0pOworCQlmb3IgKGkgPSAwOyBpIDwgaW5kZXhfZW5kOyBpKyspIHsKKwkJCWlmIChmbigmcXVldWUtPmVudHJpZXNbaV0sIGRhdGEpKQorCQkJCXJldHVybiB0cnVlOworCQl9CiAJfQorCisJcmV0dXJuIGZhbHNlOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwcXVldWVfZm9yX2VhY2hfZW50cnkpOwogCkBAIC03MjcsOCArODA2LDkgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMHF1ZXVlX2dldF9lbnRyeSk7CiAKLXZvaWQgcnQyeDAwcXVldWVfaW5kZXhfaW5jKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSwgZW51bSBxdWV1ZV9pbmRleCBpbmRleCkKK3ZvaWQgcnQyeDAwcXVldWVfaW5kZXhfaW5jKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksIGVudW0gcXVldWVfaW5kZXggaW5kZXgpCiB7CisJc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlID0gZW50cnktPnF1ZXVlOwogCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CiAKIAlpZiAodW5saWtlbHkoaW5kZXggPj0gUV9JTkRFWF9NQVgpKSB7CkBAIC03NDMsNyArODIzLDcgQEAKIAlpZiAocXVldWUtPmluZGV4W2luZGV4XSA+PSBxdWV1ZS0+bGltaXQpCiAJCXF1ZXVlLT5pbmRleFtpbmRleF0gPSAwOwogCi0JcXVldWUtPmxhc3RfYWN0aW9uW2luZGV4XSA9IGppZmZpZXM7CisJZW50cnktPmxhc3RfYWN0aW9uID0gamlmZmllczsKIAogCWlmIChpbmRleCA9PSBRX0lOREVYKSB7CiAJCXF1ZXVlLT5sZW5ndGgrKzsKQEAgLTg0OCw3ICs5MjgsNiBAQAogCiB2b2lkIHJ0MngwMHF1ZXVlX2ZsdXNoX3F1ZXVlKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSwgYm9vbCBkcm9wKQogewotCXVuc2lnbmVkIGludCBpOwogCWJvb2wgc3RhcnRlZDsKIAlib29sIHR4X3F1ZXVlID0KIAkJKHF1ZXVlLT5xaWQgPT0gUUlEX0FDX1ZPKSB8fApAQCAtODgzLDIwICs5NjIsMTIgQEAKIAl9CiAKIAkvKgotCSAqIENoZWNrIGlmIGRyaXZlciBzdXBwb3J0cyBmbHVzaGluZywgd2UgY2FuIG9ubHkgZ3VhcmFudGVlCi0JICogZnVsbCBzdXBwb3J0IGZvciBmbHVzaGluZyBpZiB0aGUgZHJpdmVyIGlzIGFibGUKLQkgKiB0byBjYW5jZWwgYWxsIHBlbmRpbmcgZnJhbWVzIChkcm9wID0gdHJ1ZSkuCisJICogQ2hlY2sgaWYgZHJpdmVyIHN1cHBvcnRzIGZsdXNoaW5nLCBpZiB0aGF0IGlzIHRoZSBjYXNlIHdlIGNhbgorCSAqIGRlZmVyIHRoZSBmbHVzaGluZyB0byB0aGUgZHJpdmVyLiBPdGhlcndpc2Ugd2UgbXVzdCB1c2UgdGhlCisJICogYWx0ZXJuYXRpdmUgd2hpY2gganVzdCB3YWl0cyBmb3IgdGhlIHF1ZXVlIHRvIGJlY29tZSBlbXB0eS4KIAkgKi8KLQlpZiAoZHJvcCAmJiBxdWV1ZS0+cnQyeDAwZGV2LT5vcHMtPmxpYi0+Zmx1c2hfcXVldWUpCi0JCXF1ZXVlLT5ydDJ4MDBkZXYtPm9wcy0+bGliLT5mbHVzaF9xdWV1ZShxdWV1ZSk7Ci0KLQkvKgotCSAqIFdoZW4gd2UgZG9uJ3Qgd2FudCB0byBkcm9wIGFueSBmcmFtZXMsIG9yIHdoZW4KLQkgKiB0aGUgZHJpdmVyIGRvZXNuJ3QgZnVsbHkgZmx1c2ggdGhlIHF1ZXVlIGNvcnJlY2x5LAotCSAqIHdlIG11c3Qgd2FpdCBmb3IgdGhlIHF1ZXVlIHRvIGJlY29tZSBlbXB0eS4KLQkgKi8KLQlmb3IgKGkgPSAwOyAhcnQyeDAwcXVldWVfZW1wdHkocXVldWUpICYmIGkgPCAxMDA7IGkrKykKLQkJbXNsZWVwKDEwKTsKKwlpZiAobGlrZWx5KHF1ZXVlLT5ydDJ4MDBkZXYtPm9wcy0+bGliLT5mbHVzaF9xdWV1ZSkpCisJCXF1ZXVlLT5ydDJ4MDBkZXYtPm9wcy0+bGliLT5mbHVzaF9xdWV1ZShxdWV1ZSwgZHJvcCk7CiAKIAkvKgogCSAqIFRoZSBxdWV1ZSBmbHVzaCBoYXMgZmFpbGVkLi4uCkBAIC05NjksMTAgKzEwNDAsOCBAQAogCXF1ZXVlLT5jb3VudCA9IDA7CiAJcXVldWUtPmxlbmd0aCA9IDA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgUV9JTkRFWF9NQVg7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBRX0lOREVYX01BWDsgaSsrKQogCQlxdWV1ZS0+aW5kZXhbaV0gPSAwOwotCQlxdWV1ZS0+bGFzdF9hY3Rpb25baV0gPSBqaWZmaWVzOwotCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnF1ZXVlLT5pbmRleF9sb2NrLCBpcnFmbGFncyk7CiB9CkBAIC0xMDc5LDcgKzExNDgsNyBAQAogCWlmIChzdGF0dXMpCiAJCWdvdG8gZXhpdDsKIAotCWlmICh0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9BVElNX1FVRVVFLCAmcnQyeDAwZGV2LT5mbGFncykpIHsKKwlpZiAodGVzdF9iaXQoUkVRVUlSRV9BVElNX1FVRVVFLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpKSB7CiAJCXN0YXR1cyA9IHJ0MngwMHF1ZXVlX2FsbG9jX2VudHJpZXMocnQyeDAwZGV2LT5hdGltLAogCQkJCQkJICAgcnQyeDAwZGV2LT5vcHMtPmF0aW0pOwogCQlpZiAoc3RhdHVzKQpAQCAtMTEzMSw3ICsxMjAwLDcgQEAKIAlzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWU7CiAJZW51bSBkYXRhX3F1ZXVlX3FpZCBxaWQ7CiAJdW5zaWduZWQgaW50IHJlcV9hdGltID0KLQkgICAgISF0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9BVElNX1FVRVVFLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJICAgICEhdGVzdF9iaXQoUkVRVUlSRV9BVElNX1FVRVVFLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOwogCiAJLyoKIAkgKiBXZSBuZWVkIHRoZSBmb2xsb3dpbmcgcXVldWVzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuaAppbmRleCAyMTc4NjFmLi4xNjdkNDU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuaApAQCAtMjE3LDYgKzIxNyw3IEBACiAJVFhET05FX0ZBTExCQUNLLAogCVRYRE9ORV9GQUlMVVJFLAogCVRYRE9ORV9FWENFU1NJVkVfUkVUUlksCisJVFhET05FX0FNUERVLAogfTsKIAogLyoqCkBAIC0zNjMsNiArMzY0LDcgQEAKICAqIHN0cnVjdCBxdWV1ZV9lbnRyeTogRW50cnkgaW5zaWRlIHRoZSAmc3RydWN0IGRhdGFfcXVldWUKICAqCiAgKiBAZmxhZ3M6IEVudHJ5IGZsYWdzLCBzZWUgJmVudW0gcXVldWVfZW50cnlfZmxhZ3MuCisgKiBAbGFzdF9hY3Rpb246IFRpbWVzdGFtcCBvZiBsYXN0IGNoYW5nZS4KICAqIEBxdWV1ZTogVGhlIGRhdGEgcXVldWUgKCZzdHJ1Y3QgZGF0YV9xdWV1ZSkgdG8gd2hpY2ggdGhpcyBlbnRyeSBiZWxvbmdzLgogICogQHNrYjogVGhlIGJ1ZmZlciB3aGljaCBpcyBjdXJyZW50bHkgYmVpbmcgdHJhbnNtaXR0ZWQgKGZvciBUWCBxdWV1ZSksCiAgKglvciB1c2VkIHRvIGRpcmVjdGx5IHJlY2VpdmUgZGF0YSBpbiAoZm9yIFJYIHF1ZXVlKS4KQEAgLTM3Miw2ICszNzQsNyBAQAogICovCiBzdHJ1Y3QgcXVldWVfZW50cnkgewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBsYXN0X2FjdGlvbjsKIAogCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZTsKIApAQCAtNDYyLDcgKzQ2NSw2IEBACiAJdW5zaWduZWQgc2hvcnQgdGhyZXNob2xkOwogCXVuc2lnbmVkIHNob3J0IGxlbmd0aDsKIAl1bnNpZ25lZCBzaG9ydCBpbmRleFtRX0lOREVYX01BWF07Ci0JdW5zaWduZWQgbG9uZyBsYXN0X2FjdGlvbltRX0lOREVYX01BWF07CiAKIAl1bnNpZ25lZCBzaG9ydCB0eG9wOwogCXVuc2lnbmVkIHNob3J0IGFpZnM7CkBAIC01NzksMTYgKzU4MSwyMiBAQAogICogQHF1ZXVlOiBQb2ludGVyIHRvIEBkYXRhX3F1ZXVlCiAgKiBAc3RhcnQ6ICZlbnVtIHF1ZXVlX2luZGV4IFBvaW50ZXIgdG8gc3RhcnQgaW5kZXgKICAqIEBlbmQ6ICZlbnVtIHF1ZXVlX2luZGV4IFBvaW50ZXIgdG8gZW5kIGluZGV4CisgKiBAZGF0YTogRGF0YSB0byBwYXNzIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbgogICogQGZuOiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCAmc3RydWN0IHF1ZXVlX2VudHJ5CiAgKgogICogVGhpcyB3aWxsIHdhbGsgdGhyb3VnaCBhbGwgZW50cmllcyBpbiB0aGUgcXVldWUsIGluIGNocm9ub2xvZ2ljYWwKICAqIG9yZGVyLiBUaGlzIG1lYW5zIGl0IHdpbGwgc3RhcnQgYXQgdGhlIGN1cnJlbnQgQHN0YXJ0IHBvaW50ZXIKICAqIGFuZCB3aWxsIHdhbGsgdGhyb3VnaCB0aGUgcXVldWUgdW50aWwgaXQgcmVhY2hlcyB0aGUgQGVuZCBwb2ludGVyLgorICoKKyAqIElmIGZuIHJldHVybnMgdHJ1ZSBmb3IgYW4gZW50cnkgcnQyeDAwcXVldWVfZm9yX2VhY2hfZW50cnkgd2lsbCBzdG9wCisgKiBwcm9jZXNzaW5nIGFuZCByZXR1cm4gdHJ1ZSBhcyB3ZWxsLgogICovCi12b2lkIHJ0MngwMHF1ZXVlX2Zvcl9lYWNoX2VudHJ5KHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSwKK2Jvb2wgcnQyeDAwcXVldWVfZm9yX2VhY2hfZW50cnkoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlLAogCQkJCWVudW0gcXVldWVfaW5kZXggc3RhcnQsCiAJCQkJZW51bSBxdWV1ZV9pbmRleCBlbmQsCi0JCQkJdm9pZCAoKmZuKShzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KSk7CisJCQkJdm9pZCAqZGF0YSwKKwkJCQlib29sICgqZm4pKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksCisJCQkJCSAgIHZvaWQgKmRhdGEpKTsKIAogLyoqCiAgKiBydDJ4MDBxdWV1ZV9lbXB0eSAtIENoZWNrIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eS4KQEAgLTYyOCwyMiArNjM2LDI0IEBACiAKIC8qKgogICogcnQyeDAwcXVldWVfc3RhdHVzX3RpbWVvdXQgLSBDaGVjayBpZiBhIHRpbWVvdXQgb2NjdXJyZWQgZm9yIFNUQVRVUyByZXBvcnRzCi0gKiBAcXVldWU6IFF1ZXVlIHRvIGNoZWNrLgorICogQGVudHJ5OiBRdWV1ZSBlbnRyeSB0byBjaGVjay4KICAqLwotc3RhdGljIGlubGluZSBpbnQgcnQyeDAwcXVldWVfc3RhdHVzX3RpbWVvdXQoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlKQorc3RhdGljIGlubGluZSBpbnQgcnQyeDAwcXVldWVfc3RhdHVzX3RpbWVvdXQoc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSkKIHsKLQlyZXR1cm4gdGltZV9hZnRlcihxdWV1ZS0+bGFzdF9hY3Rpb25bUV9JTkRFWF9ETUFfRE9ORV0sCi0JCQkgIHF1ZXVlLT5sYXN0X2FjdGlvbltRX0lOREVYX0RPTkVdICsgKEhaIC8gMTApKTsKKwlpZiAoIXRlc3RfYml0KEVOVFJZX0RBVEFfU1RBVFVTX1BFTkRJTkcsICZlbnRyeS0+ZmxhZ3MpKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHRpbWVfYWZ0ZXIoamlmZmllcywgZW50cnktPmxhc3RfYWN0aW9uICsgbXNlY3NfdG9famlmZmllcygxMDApKTsKIH0KIAogLyoqCi0gKiBydDJ4MDBxdWV1ZV90aW1lb3V0IC0gQ2hlY2sgaWYgYSB0aW1lb3V0IG9jY3VycmVkIGZvciBETUEgdHJhbnNmZXJzCi0gKiBAcXVldWU6IFF1ZXVlIHRvIGNoZWNrLgorICogcnQyeDAwcXVldWVfZG1hX3RpbWVvdXQgLSBDaGVjayBpZiBhIHRpbWVvdXQgb2NjdXJyZWQgZm9yIERNQSB0cmFuc2ZlcnMKKyAqIEBlbnRyeTogUXVldWUgZW50cnkgdG8gY2hlY2suCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHJ0MngwMHF1ZXVlX2RtYV90aW1lb3V0KHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IHJ0MngwMHF1ZXVlX2RtYV90aW1lb3V0KHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnkpCiB7Ci0JcmV0dXJuIHRpbWVfYWZ0ZXIocXVldWUtPmxhc3RfYWN0aW9uW1FfSU5ERVhdLAotCQkJICBxdWV1ZS0+bGFzdF9hY3Rpb25bUV9JTkRFWF9ETUFfRE9ORV0gKyAoSFogLyAxMCkpOworCWlmICghdGVzdF9iaXQoRU5UUllfT1dORVJfREVWSUNFX0RBVEEsICZlbnRyeS0+ZmxhZ3MpKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHRpbWVfYWZ0ZXIoamlmZmllcywgZW50cnktPmxhc3RfYWN0aW9uICsgbXNlY3NfdG9famlmZmllcygxMDApKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmMKaW5kZXggMzZmMzg4Zi4uOGY5MGY2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuYwpAQCAtMTY1LDYgKzE2NSw1OSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwdXNiX3JlZ2J1c3lfcmVhZCk7CiAKKworc3RydWN0IHJ0MngwMF9hc3luY19yZWFkX2RhdGEgeworCV9fbGUzMiByZWc7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCBjcjsKKwlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2OworCWJvb2wgKCpjYWxsYmFjaykoc3RydWN0IHJ0MngwMF9kZXYgKiwgaW50LCB1MzIpOworfTsKKworc3RhdGljIHZvaWQgcnQyeDAwdXNiX3JlZ2lzdGVyX3JlYWRfYXN5bmNfY2Ioc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBydDJ4MDBfYXN5bmNfcmVhZF9kYXRhICpyZCA9IHVyYi0+Y29udGV4dDsKKwlpZiAocmQtPmNhbGxiYWNrKHJkLT5ydDJ4MDBkZXYsIHVyYi0+c3RhdHVzLCBsZTMyX3RvX2NwdShyZC0+cmVnKSkpIHsKKwkJaWYgKHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykgPCAwKQorCQkJa2ZyZWUocmQpOworCX0gZWxzZQorCQlrZnJlZShyZCk7Cit9CisKK3ZvaWQgcnQyeDAwdXNiX3JlZ2lzdGVyX3JlYWRfYXN5bmMoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgICBjb25zdCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorCQkJCSAgIGJvb2wgKCpjYWxsYmFjaykoc3RydWN0IHJ0MngwMF9kZXYqLCBpbnQsIHUzMikpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSB0b191c2JfZGV2aWNlX2ludGYocnQyeDAwZGV2LT5kZXYpOworCXN0cnVjdCB1cmIgKnVyYjsKKwlzdHJ1Y3QgcnQyeDAwX2FzeW5jX3JlYWRfZGF0YSAqcmQ7CisKKwlyZCA9IGttYWxsb2Moc2l6ZW9mKCpyZCksIEdGUF9BVE9NSUMpOworCWlmICghcmQpCisJCXJldHVybjsKKworCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7CisJaWYgKCF1cmIpIHsKKwkJa2ZyZWUocmQpOworCQlyZXR1cm47CisJfQorCisJcmQtPnJ0MngwMGRldiA9IHJ0MngwMGRldjsKKwlyZC0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKwlyZC0+Y3IuYlJlcXVlc3RUeXBlID0gVVNCX1ZFTkRPUl9SRVFVRVNUX0lOOworCXJkLT5jci5iUmVxdWVzdCA9IFVTQl9NVUxUSV9SRUFEOworCXJkLT5jci53VmFsdWUgPSAwOworCXJkLT5jci53SW5kZXggPSBjcHVfdG9fbGUxNihvZmZzZXQpOworCXJkLT5jci53TGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHUzMikpOworCisJdXNiX2ZpbGxfY29udHJvbF91cmIodXJiLCB1c2JfZGV2LCB1c2JfcmN2Y3RybHBpcGUodXNiX2RldiwgMCksCisJCQkgICAgICh1bnNpZ25lZCBjaGFyICopKCZyZC0+Y3IpLCAmcmQtPnJlZywgc2l6ZW9mKHJkLT5yZWcpLAorCQkJICAgICBydDJ4MDB1c2JfcmVnaXN0ZXJfcmVhZF9hc3luY19jYiwgcmQpOworCWlmICh1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpIDwgMCkKKwkJa2ZyZWUocmQpOworCXVzYl9mcmVlX3VyYih1cmIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwdXNiX3JlZ2lzdGVyX3JlYWRfYXN5bmMpOworCiAvKgogICogVFggZGF0YSBoYW5kbGVycy4KICAqLwpAQCAtMjEyLDYgKzI2NSw5IEBACiAJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoRU5UUllfT1dORVJfREVWSUNFX0RBVEEsICZlbnRyeS0+ZmxhZ3MpKQogCQlyZXR1cm47CiAKKwlpZiAocnQyeDAwZGV2LT5vcHMtPmxpYi0+dHhfZG1hX2RvbmUpCisJCXJ0MngwMGRldi0+b3BzLT5saWItPnR4X2RtYV9kb25lKGVudHJ5KTsKKwogCS8qCiAJICogUmVwb3J0IHRoZSBmcmFtZSBhcyBETUEgZG9uZQogCSAqLwpAQCAtMjI3LDEwICsyODMsMTIgQEAKIAkgKiBTY2hlZHVsZSB0aGUgZGVsYXllZCB3b3JrIGZvciByZWFkaW5nIHRoZSBUWCBzdGF0dXMKIAkgKiBmcm9tIHRoZSBkZXZpY2UuCiAJICovCi0JcXVldWVfd29yayhydDJ4MDBkZXYtPndvcmtxdWV1ZSwgJnJ0MngwMGRldi0+dHhkb25lX3dvcmspOworCWlmICghdGVzdF9iaXQoUkVRVUlSRV9UWFNUQVRVU19GSUZPLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpIHx8CisJICAgICFrZmlmb19pc19lbXB0eSgmcnQyeDAwZGV2LT50eHN0YXR1c19maWZvKSkKKwkJcXVldWVfd29yayhydDJ4MDBkZXYtPndvcmtxdWV1ZSwgJnJ0MngwMGRldi0+dHhkb25lX3dvcmspOwogfQogCi1zdGF0aWMgdm9pZCBydDJ4MDB1c2Jfa2lja190eF9lbnRyeShzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KQorc3RhdGljIGJvb2wgcnQyeDAwdXNiX2tpY2tfdHhfZW50cnkoc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSwgdm9pZCogZGF0YSkKIHsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZW50cnktPnF1ZXVlLT5ydDJ4MDBkZXY7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSB0b191c2JfZGV2aWNlX2ludGYocnQyeDAwZGV2LT5kZXYpOwpAQCAtMjQwLDcgKzI5OCw3IEBACiAKIAlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChFTlRSWV9EQVRBX1BFTkRJTkcsICZlbnRyeS0+ZmxhZ3MpIHx8CiAJICAgIHRlc3RfYml0KEVOVFJZX0RBVEFfU1RBVFVTX1BFTkRJTkcsICZlbnRyeS0+ZmxhZ3MpKQotCQlyZXR1cm47CisJCXJldHVybiBmYWxzZTsKIAogCS8qCiAJICogVVNCIGRldmljZXMgY2Fubm90IGJsaW5kbHkgcGFzcyB0aGUgc2tiLT5sZW4gYXMgdGhlCkBAIC0yNjEsNiArMzE5LDggQEAKIAkJc2V0X2JpdChFTlRSWV9EQVRBX0lPX0ZBSUxFRCwgJmVudHJ5LT5mbGFncyk7CiAJCXJ0MngwMGxpYl9kbWFkb25lKGVudHJ5KTsKIAl9CisKKwlyZXR1cm4gZmFsc2U7CiB9CiAKIC8qCkBAIC0zMjMsNyArMzgzLDcgQEAKIAlxdWV1ZV93b3JrKHJ0MngwMGRldi0+d29ya3F1ZXVlLCAmcnQyeDAwZGV2LT5yeGRvbmVfd29yayk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0MngwMHVzYl9raWNrX3J4X2VudHJ5KHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnkpCitzdGF0aWMgYm9vbCBydDJ4MDB1c2Jfa2lja19yeF9lbnRyeShzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LCB2b2lkKiBkYXRhKQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBlbnRyeS0+cXVldWUtPnJ0MngwMGRldjsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IHRvX3VzYl9kZXZpY2VfaW50ZihydDJ4MDBkZXYtPmRldik7CkBAIC0zMzIsNyArMzkyLDcgQEAKIAogCWlmICh0ZXN0X2FuZF9zZXRfYml0KEVOVFJZX09XTkVSX0RFVklDRV9EQVRBLCAmZW50cnktPmZsYWdzKSB8fAogCSAgICB0ZXN0X2JpdChFTlRSWV9EQVRBX1NUQVRVU19QRU5ESU5HLCAmZW50cnktPmZsYWdzKSkKLQkJcmV0dXJuOworCQlyZXR1cm4gZmFsc2U7CiAKIAlydDJ4MDBsaWJfZG1hc3RhcnQoZW50cnkpOwogCkBAIC0zNDgsNiArNDA4LDggQEAKIAkJc2V0X2JpdChFTlRSWV9EQVRBX0lPX0ZBSUxFRCwgJmVudHJ5LT5mbGFncyk7CiAJCXJ0MngwMGxpYl9kbWFkb25lKGVudHJ5KTsKIAl9CisKKwlyZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgcnQyeDAwdXNiX2tpY2tfcXVldWUoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlKQpAQCAtMzU4LDEyICs0MjAsMTggQEAKIAljYXNlIFFJRF9BQ19CRToKIAljYXNlIFFJRF9BQ19CSzoKIAkJaWYgKCFydDJ4MDBxdWV1ZV9lbXB0eShxdWV1ZSkpCi0JCQlydDJ4MDBxdWV1ZV9mb3JfZWFjaF9lbnRyeShxdWV1ZSwgUV9JTkRFWF9ET05FLCBRX0lOREVYLAorCQkJcnQyeDAwcXVldWVfZm9yX2VhY2hfZW50cnkocXVldWUsCisJCQkJCQkgICBRX0lOREVYX0RPTkUsCisJCQkJCQkgICBRX0lOREVYLAorCQkJCQkJICAgTlVMTCwKIAkJCQkJCSAgIHJ0MngwMHVzYl9raWNrX3R4X2VudHJ5KTsKIAkJYnJlYWs7CiAJY2FzZSBRSURfUlg6CiAJCWlmICghcnQyeDAwcXVldWVfZnVsbChxdWV1ZSkpCi0JCQlydDJ4MDBxdWV1ZV9mb3JfZWFjaF9lbnRyeShxdWV1ZSwgUV9JTkRFWF9ET05FLCBRX0lOREVYLAorCQkJcnQyeDAwcXVldWVfZm9yX2VhY2hfZW50cnkocXVldWUsCisJCQkJCQkgICBRX0lOREVYX0RPTkUsCisJCQkJCQkgICBRX0lOREVYLAorCQkJCQkJICAgTlVMTCwKIAkJCQkJCSAgIHJ0MngwMHVzYl9raWNrX3J4X2VudHJ5KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTM3MiwxNCArNDQwLDE0IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDB1c2Jfa2lja19xdWV1ZSk7CiAKLXN0YXRpYyB2b2lkIHJ0MngwMHVzYl9mbHVzaF9lbnRyeShzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KQorc3RhdGljIGJvb2wgcnQyeDAwdXNiX2ZsdXNoX2VudHJ5KHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksIHZvaWQqIGRhdGEpCiB7CiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGVudHJ5LT5xdWV1ZS0+cnQyeDAwZGV2OwogCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYiAqZW50cnlfcHJpdiA9IGVudHJ5LT5wcml2X2RhdGE7CiAJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiX2JjbiAqYmNuX3ByaXYgPSBlbnRyeS0+cHJpdl9kYXRhOwogCiAJaWYgKCF0ZXN0X2JpdChFTlRSWV9PV05FUl9ERVZJQ0VfREFUQSwgJmVudHJ5LT5mbGFncykpCi0JCXJldHVybjsKKwkJcmV0dXJuIGZhbHNlOwogCiAJdXNiX2tpbGxfdXJiKGVudHJ5X3ByaXYtPnVyYik7CiAKQEAgLTM4NywxNyArNDU1LDIwIEBACiAJICogS2lsbCBndWFyZGlhbiB1cmIgKGlmIHJlcXVpcmVkIGJ5IGRyaXZlcikuCiAJICovCiAJaWYgKChlbnRyeS0+cXVldWUtPnFpZCA9PSBRSURfQkVBQ09OKSAmJgotCSAgICAodGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfQkVBQ09OX0dVQVJELCAmcnQyeDAwZGV2LT5mbGFncykpKQorCSAgICAodGVzdF9iaXQoUkVRVUlSRV9CRUFDT05fR1VBUkQsICZydDJ4MDBkZXYtPmNhcF9mbGFncykpKQogCQl1c2Jfa2lsbF91cmIoYmNuX3ByaXYtPmd1YXJkaWFuX3VyYik7CisKKwlyZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgcnQyeDAwdXNiX2ZsdXNoX3F1ZXVlKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSkKK3ZvaWQgcnQyeDAwdXNiX2ZsdXNoX3F1ZXVlKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSwgYm9vbCBkcm9wKQogewogCXN0cnVjdCB3b3JrX3N0cnVjdCAqY29tcGxldGlvbjsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCXJ0MngwMHF1ZXVlX2Zvcl9lYWNoX2VudHJ5KHF1ZXVlLCBRX0lOREVYX0RPTkUsIFFfSU5ERVgsCi0JCQkJICAgcnQyeDAwdXNiX2ZsdXNoX2VudHJ5KTsKKwlpZiAoZHJvcCkKKwkJcnQyeDAwcXVldWVfZm9yX2VhY2hfZW50cnkocXVldWUsIFFfSU5ERVhfRE9ORSwgUV9JTkRFWCwgTlVMTCwKKwkJCQkJICAgcnQyeDAwdXNiX2ZsdXNoX2VudHJ5KTsKIAogCS8qCiAJICogT2J0YWluIHRoZSBxdWV1ZSBjb21wbGV0aW9uIGhhbmRsZXIKQEAgLTQxNiw3ICs0ODcsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IDIwOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewogCQkvKgogCQkgKiBDaGVjayBpZiB0aGUgZHJpdmVyIGlzIGFscmVhZHkgZG9uZSwgb3RoZXJ3aXNlIHdlCiAJCSAqIGhhdmUgdG8gc2xlZXAgYSBsaXR0bGUgd2hpbGUgdG8gZ2l2ZSB0aGUgZHJpdmVyL2h3CkBAIC00NTYsMTUgKzUyNywzMSBAQAogCXF1ZXVlX3dvcmsocXVldWUtPnJ0MngwMGRldi0+d29ya3F1ZXVlLCAmcXVldWUtPnJ0MngwMGRldi0+dHhkb25lX3dvcmspOwogfQogCitzdGF0aWMgaW50IHJ0MngwMHVzYl9zdGF0dXNfdGltZW91dChzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpCit7CisJc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeTsKKworCWVudHJ5ID0gcnQyeDAwcXVldWVfZ2V0X2VudHJ5KHF1ZXVlLCBRX0lOREVYX0RPTkUpOworCXJldHVybiBydDJ4MDBxdWV1ZV9zdGF0dXNfdGltZW91dChlbnRyeSk7Cit9CisKK3N0YXRpYyBpbnQgcnQyeDAwdXNiX2RtYV90aW1lb3V0KHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSkKK3sKKwlzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5OworCisJZW50cnkgPSBydDJ4MDBxdWV1ZV9nZXRfZW50cnkocXVldWUsIFFfSU5ERVhfRE1BX0RPTkUpOworCXJldHVybiBydDJ4MDBxdWV1ZV9kbWFfdGltZW91dChlbnRyeSk7Cit9CisKIHZvaWQgcnQyeDAwdXNiX3dhdGNoZG9nKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7CiAJc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlOwogCiAJdHhfcXVldWVfZm9yX2VhY2gocnQyeDAwZGV2LCBxdWV1ZSkgewogCQlpZiAoIXJ0MngwMHF1ZXVlX2VtcHR5KHF1ZXVlKSkgewotCQkJaWYgKHJ0MngwMHF1ZXVlX2RtYV90aW1lb3V0KHF1ZXVlKSkKKwkJCWlmIChydDJ4MDB1c2JfZG1hX3RpbWVvdXQocXVldWUpKQogCQkJCXJ0MngwMHVzYl93YXRjaGRvZ190eF9kbWEocXVldWUpOwotCQkJaWYgKHJ0MngwMHF1ZXVlX3N0YXR1c190aW1lb3V0KHF1ZXVlKSkKKwkJCWlmIChydDJ4MDB1c2Jfc3RhdHVzX3RpbWVvdXQocXVldWUpKQogCQkJCXJ0MngwMHVzYl93YXRjaGRvZ190eF9zdGF0dXMocXVldWUpOwogCQl9CiAJfQpAQCAtNDg5LDcgKzU3Niw3IEBACiAJZW50cnktPmZsYWdzID0gMDsKIAogCWlmIChlbnRyeS0+cXVldWUtPnFpZCA9PSBRSURfUlgpCi0JCXJ0MngwMHVzYl9raWNrX3J4X2VudHJ5KGVudHJ5KTsKKwkJcnQyeDAwdXNiX2tpY2tfcnhfZW50cnkoZW50cnksIE5VTEwpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwdXNiX2NsZWFyX2VudHJ5KTsKIApAQCAtNTgzLDcgKzY3MCw3IEBACiAJICogdGhlbiB3ZSBhcmUgZG9uZS4KIAkgKi8KIAlpZiAocXVldWUtPnFpZCAhPSBRSURfQkVBQ09OIHx8Ci0JICAgICF0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9CRUFDT05fR1VBUkQsICZydDJ4MDBkZXYtPmZsYWdzKSkKKwkgICAgIXRlc3RfYml0KFJFUVVJUkVfQkVBQ09OX0dVQVJELCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpKQogCQlyZXR1cm4gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBxdWV1ZS0+bGltaXQ7IGkrKykgewpAQCAtNjE4LDcgKzcwNSw3IEBACiAJICogdGhlbiB3ZSBhcmUgZG9uZS4KIAkgKi8KIAlpZiAocXVldWUtPnFpZCAhPSBRSURfQkVBQ09OIHx8Ci0JICAgICF0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9CRUFDT05fR1VBUkQsICZydDJ4MDBkZXYtPmZsYWdzKSkKKwkgICAgIXRlc3RfYml0KFJFUVVJUkVfQkVBQ09OX0dVQVJELCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpKQogCQlyZXR1cm47CiAKIAlmb3IgKGkgPSAwOyBpIDwgcXVldWUtPmxpbWl0OyBpKyspIHsKQEAgLTcwNywxMCArNzk0LDkgQEAKIH0KIAogaW50IHJ0MngwMHVzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdXNiX2ludGYsCi0JCSAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCisJCSAgICBjb25zdCBzdHJ1Y3QgcnQyeDAwX29wcyAqb3BzKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldih1c2JfaW50Zik7Ci0Jc3RydWN0IHJ0MngwMF9vcHMgKm9wcyA9IChzdHJ1Y3QgcnQyeDAwX29wcyAqKWlkLT5kcml2ZXJfaW5mbzsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2OwogCWludCByZXR2YWw7CkBAIC03MzUsNiArODIxLDcgQEAKIAogCUlOSVRfV09SSygmcnQyeDAwZGV2LT5yeGRvbmVfd29yaywgcnQyeDAwdXNiX3dvcmtfcnhkb25lKTsKIAlJTklUX1dPUksoJnJ0MngwMGRldi0+dHhkb25lX3dvcmssIHJ0MngwMHVzYl93b3JrX3R4ZG9uZSk7CisJaW5pdF90aW1lcigmcnQyeDAwZGV2LT50eHN0YXR1c190aW1lcik7CiAKIAlyZXR2YWwgPSBydDJ4MDB1c2JfYWxsb2NfcmVnKHJ0MngwMGRldik7CiAJaWYgKHJldHZhbCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuaAppbmRleCBlMTFjNzU5Li4zMjNjYTdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5oCkBAIC0zNSwxMiArMzUsNiBAQAogfSkKIAogLyoKLSAqIFRoaXMgdmFyaWFibGUgc2hvdWxkIGJlIHVzZWQgd2l0aCB0aGUKLSAqIHVzYl9kcml2ZXIgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLgotICovCi0jZGVmaW5lIFVTQl9ERVZJQ0VfREFUQShfX29wcykJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KShfX29wcykKLQotLyoKICAqIEZvciBVU0IgdmVuZG9yIHJlcXVlc3RzIHdlIG5lZWQgdG8gcGFzcyBhIHRpbWVvdXQKICAqIHRpbWUgaW4gbXMsIGZvciB0aGlzIHdlIHVzZSB0aGUgUkVHSVNURVJfVElNRU9VVCwKICAqIGhvd2V2ZXIgd2hlbiBsb2FkaW5nIGZpcm13YXJlIGEgaGlnaGVyIHZhbHVlIGlzCkBAIC0zNDUsNiArMzM5LDIzIEBACiAJCQkgICBjb25zdCBzdHJ1Y3QgcnQyeDAwX2ZpZWxkMzIgZmllbGQsCiAJCQkgICB1MzIgKnJlZyk7CiAKKy8qKgorICogcnQyeDAwdXNiX3JlZ2lzdGVyX3JlYWRfYXN5bmMgLSBBc3luY2hyb25vdXNseSByZWFkIDMyYml0IHJlZ2lzdGVyIHdvcmQKKyAqIEBydDJ4MDBkZXY6IERldmljZSBwb2ludGVyLCBzZWUgJnN0cnVjdCBydDJ4MDBfZGV2LgorICogQG9mZnNldDogUmVnaXN0ZXIgb2Zmc2V0CisgKiBAY2FsbGJhY2s6IEZ1bmN0b24gdG8gY2FsbCB3aGVuIHJlYWQgY29tcGxldGVzLgorICoKKyAqIFN1Ym1pdCBhIGNvbnRyb2wgVVJCIHRvIHJlYWQgYSAzMmJpdCByZWdpc3Rlci4gVGhpcyBzYWZlIHRvCisgKiBiZSBjYWxsZWQgZnJvbSBhdG9taWMgY29udGV4dC4gIFRoZSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZAorICogd2hlbiB0aGUgVVJCIGNvbXBsZXRlcy4gT3RoZXJ3aXNlIHRoZSBmdW5jdGlvbiBpcyBzaW1pbGFyCisgKiB0byBydDJ4MDB1c2JfcmVnaXN0ZXJfcmVhZCgpLgorICogV2hlbiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSwgdGhlIG1lbW9yeSB3aWxsIGJlIGNsZWFuZWQgdXAsCisgKiB3aGVuIGl0IHJldHVybnMgdHJ1ZSwgdGhlIHVyYiB3aWxsIGJlIGZpcmVkIGFnYWluLgorICovCit2b2lkIHJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkX2FzeW5jKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICAgY29uc3QgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCQkgICBib29sICgqY2FsbGJhY2spKHN0cnVjdCBydDJ4MDBfZGV2KiwgaW50LCB1MzIpKTsKKwogLyoKICAqIFJhZGlvIGhhbmRsZXJzCiAgKi8KQEAgLTM4OSwxMSArNDAwLDEzIEBACiAvKioKICAqIHJ0MngwMHVzYl9mbHVzaF9xdWV1ZSAtIEZsdXNoIGRhdGEgcXVldWUKICAqIEBxdWV1ZTogRGF0YSBxdWV1ZSB0byBzdG9wCisgKiBAZHJvcDogVHJ1ZSB0byBkcm9wIGFsbCBwZW5kaW5nIGZyYW1lcy4KICAqCi0gKiBUaGlzIHdpbGwgd2FsayB0aHJvdWdoIGFsbCBlbnRyaWVzIG9mIHRoZSBxdWV1ZSBhbmQga2lsbCBhbGwKLSAqIFVSQidzIHdoaWNoIHdlcmUgc2VuZCB0byB0aGUgZGV2aWNlLgorICogVGhpcyB3aWxsIHdhbGsgdGhyb3VnaCBhbGwgZW50cmllcyBvZiB0aGUgcXVldWUgYW5kIHdpbGwgb3B0aW9uYWxseQorICoga2lsbCBhbGwgVVJCJ3Mgd2hpY2ggd2VyZSBzZW5kIHRvIHRoZSBkZXZpY2UsIG9yIGF0IGxlYXN0IHdhaXQgdW50aWwKKyAqIHRoZXkgaGF2ZSBiZWVuIHJldHVybmVkIGZyb20gdGhlIGRldmljZS4uCiAgKi8KLXZvaWQgcnQyeDAwdXNiX2ZsdXNoX3F1ZXVlKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSk7Cit2b2lkIHJ0MngwMHVzYl9mbHVzaF9xdWV1ZShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUsIGJvb2wgZHJvcCk7CiAKIC8qKgogICogcnQyeDAwdXNiX3dhdGNoZG9nIC0gV2F0Y2hkb2cgZm9yIFVTQiBjb21tdW5pY2F0aW9uCkBAIC00MTYsNyArNDI5LDcgQEAKICAqIFVTQiBkcml2ZXIgaGFuZGxlcnMuCiAgKi8KIGludCBydDJ4MDB1c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVzYl9pbnRmLAotCQkgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKKwkJICAgIGNvbnN0IHN0cnVjdCBydDJ4MDBfb3BzICpvcHMpOwogdm9pZCBydDJ4MDB1c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdXNiX2ludGYpOwogI2lmZGVmIENPTkZJR19QTQogaW50IHJ0MngwMHVzYl9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICp1c2JfaW50ZiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5jCmluZGV4IDc3ZTgxMTMuLjlkMzVlYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuYwpAQCAtNjgzLDcgKzY4Myw3IEBACiAKIAlydDJ4MDBfc2V0X2ZpZWxkOCgmcjMsIEJCUF9SM19TTUFSVF9NT0RFLCBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjkpKTsKIAlydDJ4MDBfc2V0X2ZpZWxkOCgmcjQsIEJCUF9SNF9SWF9GUkFNRV9FTkQsCi0JCQkgICF0ZXN0X2JpdChDT05GSUdfRlJBTUVfVFlQRSwgJnJ0MngwMGRldi0+ZmxhZ3MpKTsKKwkJCSAgIXRlc3RfYml0KENBUEFCSUxJVFlfRlJBTUVfVFlQRSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSk7CiAKIAkvKgogCSAqIENvbmZpZ3VyZSB0aGUgUlggYW50ZW5uYS4KQEAgLTgxMSwxMCArODExLDEwIEBACiAKIAlpZiAocnQyeDAwZGV2LT5jdXJyX2JhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikgewogCQlzZWwgPSBhbnRlbm5hX3NlbF9hOwotCQlsbmEgPSB0ZXN0X2JpdChDT05GSUdfRVhURVJOQUxfTE5BX0EsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwkJbG5hID0gdGVzdF9iaXQoQ0FQQUJJTElUWV9FWFRFUk5BTF9MTkFfQSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKIAl9IGVsc2UgewogCQlzZWwgPSBhbnRlbm5hX3NlbF9iZzsKLQkJbG5hID0gdGVzdF9iaXQoQ09ORklHX0VYVEVSTkFMX0xOQV9CRywgJnJ0MngwMGRldi0+ZmxhZ3MpOworCQlsbmEgPSB0ZXN0X2JpdChDQVBBQklMSVRZX0VYVEVSTkFMX0xOQV9CRywgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbnRlbm5hX3NlbF9hKTsgaSsrKQpAQCAtODM0LDcgKzgzNCw3IEBACiAJZWxzZSBpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI3KSkKIAkJcnQ2MXBjaV9jb25maWdfYW50ZW5uYV8yeChydDJ4MDBkZXYsIGFudCk7CiAJZWxzZSBpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI5KSkgewotCQlpZiAodGVzdF9iaXQoQ09ORklHX0RPVUJMRV9BTlRFTk5BLCAmcnQyeDAwZGV2LT5mbGFncykpCisJCWlmICh0ZXN0X2JpdChDQVBBQklMSVRZX0RPVUJMRV9BTlRFTk5BLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpKQogCQkJcnQ2MXBjaV9jb25maWdfYW50ZW5uYV8yeChydDJ4MDBkZXYsIGFudCk7CiAJCWVsc2UKIAkJCXJ0NjFwY2lfY29uZmlnX2FudGVubmFfMjUyOShydDJ4MDBkZXYsIGFudCk7CkBAIC04NDgsMTMgKzg0OCwxMyBAQAogCXNob3J0IGxuYV9nYWluID0gMDsKIAogCWlmIChsaWJjb25mLT5jb25mLT5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKLQkJaWYgKHRlc3RfYml0KENPTkZJR19FWFRFUk5BTF9MTkFfQkcsICZydDJ4MDBkZXYtPmZsYWdzKSkKKwkJaWYgKHRlc3RfYml0KENBUEFCSUxJVFlfRVhURVJOQUxfTE5BX0JHLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpKQogCQkJbG5hX2dhaW4gKz0gMTQ7CiAKIAkJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX1JTU0lfT0ZGU0VUX0JHLCAmZWVwcm9tKTsKIAkJbG5hX2dhaW4gLT0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX1JTU0lfT0ZGU0VUX0JHXzEpOwogCX0gZWxzZSB7Ci0JCWlmICh0ZXN0X2JpdChDT05GSUdfRVhURVJOQUxfTE5BX0EsICZydDJ4MDBkZXYtPmZsYWdzKSkKKwkJaWYgKHRlc3RfYml0KENBUEFCSUxJVFlfRVhURVJOQUxfTE5BX0EsICZydDJ4MDBkZXYtPmNhcF9mbGFncykpCiAJCQlsbmFfZ2FpbiArPSAxNDsKIAogCQlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fUlNTSV9PRkZTRVRfQSwgJmVlcHJvbSk7CkBAIC0xMDUwLDE0ICsxMDUwLDE0IEBACiAJaWYgKHJ0MngwMGRldi0+Y3Vycl9iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopIHsKIAkJbG93X2JvdW5kID0gMHgyODsKIAkJdXBfYm91bmQgPSAweDQ4OwotCQlpZiAodGVzdF9iaXQoQ09ORklHX0VYVEVSTkFMX0xOQV9BLCAmcnQyeDAwZGV2LT5mbGFncykpIHsKKwkJaWYgKHRlc3RfYml0KENBUEFCSUxJVFlfRVhURVJOQUxfTE5BX0EsICZydDJ4MDBkZXYtPmNhcF9mbGFncykpIHsKIAkJCWxvd19ib3VuZCArPSAweDEwOwogCQkJdXBfYm91bmQgKz0gMHgxMDsKIAkJfQogCX0gZWxzZSB7CiAJCWxvd19ib3VuZCA9IDB4MjA7CiAJCXVwX2JvdW5kID0gMHg0MDsKLQkJaWYgKHRlc3RfYml0KENPTkZJR19FWFRFUk5BTF9MTkFfQkcsICZydDJ4MDBkZXYtPmZsYWdzKSkgeworCQlpZiAodGVzdF9iaXQoQ0FQQUJJTElUWV9FWFRFUk5BTF9MTkFfQkcsICZydDJ4MDBkZXYtPmNhcF9mbGFncykpIHsKIAkJCWxvd19ib3VuZCArPSAweDEwOwogCQkJdXBfYm91bmQgKz0gMHgxMDsKIAkJfQpAQCAtMjI2MCw4ICsyMjYwLDggQEAKIAlydDYxcGNpX2NvbmZpZyhydDJ4MDBkZXYsICZsaWJjb25mLCBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpOwogfQogCi1zdGF0aWMgdm9pZCBydDYxcGNpX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCQkgICAgIHN0cnVjdCBydDJ4MDBfZmllbGQzMiBpcnFfZmllbGQpCitzdGF0aWMgaW5saW5lIHZvaWQgcnQ2MXBjaV9lbmFibGVfaW50ZXJydXB0KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJCSAgICBzdHJ1Y3QgcnQyeDAwX2ZpZWxkMzIgaXJxX2ZpZWxkKQogewogCXUzMiByZWc7CiAKQEAgLTIzMTMsOCArMjMxMywxMCBAQAogc3RhdGljIHZvaWQgcnQ2MXBjaV9yeGRvbmVfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IChzdHJ1Y3QgcnQyeDAwX2RldiAqKWRhdGE7Ci0JcnQyeDAwcGNpX3J4ZG9uZShydDJ4MDBkZXYpOwotCXJ0NjFwY2lfZW5hYmxlX2ludGVycnVwdChydDJ4MDBkZXYsIElOVF9NQVNLX0NTUl9SWERPTkUpOworCWlmIChydDJ4MDBwY2lfcnhkb25lKHJ0MngwMGRldikpCisJCXJ0MngwMHBjaV9yeGRvbmUocnQyeDAwZGV2KTsKKwllbHNlCisJCXJ0NjFwY2lfZW5hYmxlX2ludGVycnVwdChydDJ4MDBkZXYsIElOVF9NQVNLX0NTUl9SWERPTkUpOwogfQogCiBzdGF0aWMgdm9pZCBydDYxcGNpX2F1dG93YWtlX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQpAQCAtMjUzNSw3ICsyNTM3LDcgQEAKIAkgKiBEZXRlcm1pbmUgbnVtYmVyIG9mIGFudGVubmFzLgogCSAqLwogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQU5URU5OQV9OVU0pID09IDIpCi0JCV9fc2V0X2JpdChDT05GSUdfRE9VQkxFX0FOVEVOTkEsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwkJX19zZXRfYml0KENBUEFCSUxJVFlfRE9VQkxFX0FOVEVOTkEsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CiAKIAkvKgogCSAqIElkZW50aWZ5IGRlZmF1bHQgYW50ZW5uYSBjb25maWd1cmF0aW9uLgpAQCAtMjU0OSwyMCArMjU1MSwyMCBAQAogCSAqIFJlYWQgdGhlIEZyYW1lIHR5cGUuCiAJICovCiAJaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX0ZSQU1FX1RZUEUpKQotCQlfX3NldF9iaXQoQ09ORklHX0ZSQU1FX1RZUEUsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwkJX19zZXRfYml0KENBUEFCSUxJVFlfRlJBTUVfVFlQRSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKIAogCS8qCiAJICogRGV0ZWN0IGlmIHRoaXMgZGV2aWNlIGhhcyBhIGhhcmR3YXJlIGNvbnRyb2xsZWQgcmFkaW8uCiAJICovCiAJaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX0hBUkRXQVJFX1JBRElPKSkKLQkJX19zZXRfYml0KENPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+ZmxhZ3MpOworCQlfX3NldF9iaXQoQ0FQQUJJTElUWV9IV19CVVRUT04sICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CiAKIAkvKgogCSAqIFJlYWQgZnJlcXVlbmN5IG9mZnNldCBhbmQgUkYgcHJvZ3JhbW1pbmcgc2VxdWVuY2UuCiAJICovCiAJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX0ZSRVEsICZlZXByb20pOwogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fRlJFUV9TRVEpKQotCQlfX3NldF9iaXQoQ09ORklHX1JGX1NFUVVFTkNFLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJCV9fc2V0X2JpdChDQVBBQklMSVRZX1JGX1NFUVVFTkNFLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOwogCiAJcnQyeDAwZGV2LT5mcmVxX29mZnNldCA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9GUkVRX09GRlNFVCk7CiAKQEAgLTI1NzIsOSArMjU3NCw5IEBACiAJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX05JQywgJmVlcHJvbSk7CiAKIAlpZiAocnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX05JQ19FWFRFUk5BTF9MTkFfQSkpCi0JCV9fc2V0X2JpdChDT05GSUdfRVhURVJOQUxfTE5BX0EsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwkJX19zZXRfYml0KENBUEFCSUxJVFlfRVhURVJOQUxfTE5BX0EsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CiAJaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9OSUNfRVhURVJOQUxfTE5BX0JHKSkKLQkJX19zZXRfYml0KENPTkZJR19FWFRFUk5BTF9MTkFfQkcsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwkJX19zZXRfYml0KENBUEFCSUxJVFlfRVhURVJOQUxfTE5BX0JHLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOwogCiAJLyoKIAkgKiBXaGVuIHdvcmtpbmcgd2l0aCBhIFJGMjUyOSBjaGlwIHdpdGhvdXQgZG91YmxlIGFudGVubmEsCkBAIC0yNTgyLDcgKzI1ODQsNyBAQAogCSAqIGVlcHJvbSB3b3JkLgogCSAqLwogCWlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjkpICYmCi0JICAgICF0ZXN0X2JpdChDT05GSUdfRE9VQkxFX0FOVEVOTkEsICZydDJ4MDBkZXYtPmZsYWdzKSkgeworCSAgICAhdGVzdF9iaXQoQ0FQQUJJTElUWV9ET1VCTEVfQU5URU5OQSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkgewogCQlydDJ4MDBkZXYtPmRlZmF1bHRfYW50LnJ4ID0KIAkJICAgIEFOVEVOTkFfQSArIHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9OSUNfUlhfRklYRUQpOwogCQlydDJ4MDBkZXYtPmRlZmF1bHRfYW50LnR4ID0KQEAgLTI3OTcsNyArMjc5OSw3IEBACiAJc3BlYy0+c3VwcG9ydGVkX2JhbmRzID0gU1VQUE9SVF9CQU5EXzJHSFo7CiAJc3BlYy0+c3VwcG9ydGVkX3JhdGVzID0gU1VQUE9SVF9SQVRFX0NDSyB8IFNVUFBPUlRfUkFURV9PRkRNOwogCi0JaWYgKCF0ZXN0X2JpdChDT05GSUdfUkZfU0VRVUVOQ0UsICZydDJ4MDBkZXYtPmZsYWdzKSkgeworCWlmICghdGVzdF9iaXQoQ0FQQUJJTElUWV9SRl9TRVFVRU5DRSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkgewogCQlzcGVjLT5udW1fY2hhbm5lbHMgPSAxNDsKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzX25vc2VxOwogCX0gZWxzZSB7CkBAIC0yODY3LDE2ICsyODY5LDE2IEBACiAJICogVGhpcyBkZXZpY2UgaGFzIG11bHRpcGxlIGZpbHRlcnMgZm9yIGNvbnRyb2wgZnJhbWVzLAogCSAqIGJ1dCBoYXMgbm8gYSBzZXBhcmF0ZSBmaWx0ZXIgZm9yIFBTIFBvbGwgZnJhbWVzLgogCSAqLwotCV9fc2V0X2JpdChEUklWRVJfU1VQUE9SVF9DT05UUk9MX0ZJTFRFUlMsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwlfX3NldF9iaXQoQ0FQQUJJTElUWV9DT05UUk9MX0ZJTFRFUlMsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CiAKIAkvKgogCSAqIFRoaXMgZGV2aWNlIHJlcXVpcmVzIGZpcm13YXJlIGFuZCBETUEgbWFwcGVkIHNrYnMuCiAJICovCi0JX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX0ZJUk1XQVJFLCAmcnQyeDAwZGV2LT5mbGFncyk7Ci0JX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX0RNQSwgJnJ0MngwMGRldi0+ZmxhZ3MpOworCV9fc2V0X2JpdChSRVFVSVJFX0ZJUk1XQVJFLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOworCV9fc2V0X2JpdChSRVFVSVJFX0RNQSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKIAlpZiAoIW1vZHBhcmFtX25vaHdjcnlwdCkKLQkJX19zZXRfYml0KENPTkZJR19TVVBQT1JUX0hXX0NSWVBUTywgJnJ0MngwMGRldi0+ZmxhZ3MpOwotCV9fc2V0X2JpdChEUklWRVJfU1VQUE9SVF9MSU5LX1RVTklORywgJnJ0MngwMGRldi0+ZmxhZ3MpOworCQlfX3NldF9iaXQoQ0FQQUJJTElUWV9IV19DUllQVE8sICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CisJX19zZXRfYml0KENBUEFCSUxJVFlfTElOS19UVU5JTkcsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CiAKIAkvKgogCSAqIFNldCB0aGUgcnNzaSBvZmZzZXQuCkBAIC0yOTc3LDYgKzI5NzksOSBAQAogCS5nZXRfdHNmCQk9IHJ0NjFwY2lfZ2V0X3RzZiwKIAkucmZraWxsX3BvbGwJCT0gcnQyeDAwbWFjX3Jma2lsbF9wb2xsLAogCS5mbHVzaAkJCT0gcnQyeDAwbWFjX2ZsdXNoLAorCS5zZXRfYW50ZW5uYQkJPSBydDJ4MDBtYWNfc2V0X2FudGVubmEsCisJLmdldF9hbnRlbm5hCQk9IHJ0MngwMG1hY19nZXRfYW50ZW5uYSwKKwkuZ2V0X3JpbmdwYXJhbQkJPSBydDJ4MDBtYWNfZ2V0X3JpbmdwYXJhbSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnQyeDAwbGliX29wcyBydDYxcGNpX3J0MngwMF9vcHMgPSB7CkBAIC0zMDAxLDYgKzMwMDYsNyBAQAogCS5zdGFydF9xdWV1ZQkJPSBydDYxcGNpX3N0YXJ0X3F1ZXVlLAogCS5raWNrX3F1ZXVlCQk9IHJ0NjFwY2lfa2lja19xdWV1ZSwKIAkuc3RvcF9xdWV1ZQkJPSBydDYxcGNpX3N0b3BfcXVldWUsCisJLmZsdXNoX3F1ZXVlCQk9IHJ0MngwMHBjaV9mbHVzaF9xdWV1ZSwKIAkud3JpdGVfdHhfZGVzYwkJPSBydDYxcGNpX3dyaXRlX3R4X2Rlc2MsCiAJLndyaXRlX2JlYWNvbgkJPSBydDYxcGNpX3dyaXRlX2JlYWNvbiwKIAkuY2xlYXJfYmVhY29uCQk9IHJ0NjFwY2lfY2xlYXJfYmVhY29uLApAQCAtMzA1OCwxMSArMzA2NCwxMSBAQAogICovCiBzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocnQ2MXBjaV9kZXZpY2VfdGFibGUpID0gewogCS8qIFJUMjU2MXMgKi8KLQl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDAzMDEpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0NjFwY2lfb3BzKSB9LAorCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MDMwMSkgfSwKIAkvKiBSVDI1NjEgdjIgKi8KLQl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDAzMDIpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0NjFwY2lfb3BzKSB9LAorCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MDMwMikgfSwKIAkvKiBSVDI2NjEgKi8KLQl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDA0MDEpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0NjFwY2lfb3BzKSB9LAorCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MDQwMSkgfSwKIAl7IDAsIH0KIH07CiAKQEAgLTMwNzcsMTAgKzMwODMsMTYgQEAKIE1PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV9SVDI2NjEpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCitzdGF0aWMgaW50IHJ0NjFwY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsCisJCQkgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBydDJ4MDBwY2lfcHJvYmUocGNpX2RldiwgJnJ0NjFwY2lfb3BzKTsKK30KKwogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHJ0NjFwY2lfZHJpdmVyID0gewogCS5uYW1lCQk9IEtCVUlMRF9NT0ROQU1FLAogCS5pZF90YWJsZQk9IHJ0NjFwY2lfZGV2aWNlX3RhYmxlLAotCS5wcm9iZQkJPSBydDJ4MDBwY2lfcHJvYmUsCisJLnByb2JlCQk9IHJ0NjFwY2lfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChydDJ4MDBwY2lfcmVtb3ZlKSwKIAkuc3VzcGVuZAk9IHJ0MngwMHBjaV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gcnQyeDAwcGNpX3Jlc3VtZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jCmluZGV4IDAyZjExNDguLmFkMjA5NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYwpAQCAtNTk1LDcgKzU5NSw3IEBACiAJc3dpdGNoIChhbnQtPnJ4KSB7CiAJY2FzZSBBTlRFTk5BX0hXX0RJVkVSU0lUWToKIAkJcnQyeDAwX3NldF9maWVsZDgoJnI0LCBCQlBfUjRfUlhfQU5URU5OQV9DT05UUk9MLCAyKTsKLQkJdGVtcCA9ICF0ZXN0X2JpdChDT05GSUdfRlJBTUVfVFlQRSwgJnJ0MngwMGRldi0+ZmxhZ3MpCisJCXRlbXAgPSAhdGVzdF9iaXQoQ0FQQUJJTElUWV9GUkFNRV9UWVBFLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpCiAJCSAgICAgICAmJiAocnQyeDAwZGV2LT5jdXJyX2JhbmQgIT0gSUVFRTgwMjExX0JBTkRfNUdIWik7CiAJCXJ0MngwMF9zZXRfZmllbGQ4KCZyNCwgQkJQX1I0X1JYX0ZSQU1FX0VORCwgdGVtcCk7CiAJCWJyZWFrOwpAQCAtNjM2LDcgKzYzNiw3IEBACiAKIAlydDJ4MDBfc2V0X2ZpZWxkOCgmcjMsIEJCUF9SM19TTUFSVF9NT0RFLCAwKTsKIAlydDJ4MDBfc2V0X2ZpZWxkOCgmcjQsIEJCUF9SNF9SWF9GUkFNRV9FTkQsCi0JCQkgICF0ZXN0X2JpdChDT05GSUdfRlJBTUVfVFlQRSwgJnJ0MngwMGRldi0+ZmxhZ3MpKTsKKwkJCSAgIXRlc3RfYml0KENBUEFCSUxJVFlfRlJBTUVfVFlQRSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSk7CiAKIAkvKgogCSAqIENvbmZpZ3VyZSB0aGUgUlggYW50ZW5uYS4KQEAgLTcwOSwxMCArNzA5LDEwIEBACiAKIAlpZiAocnQyeDAwZGV2LT5jdXJyX2JhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikgewogCQlzZWwgPSBhbnRlbm5hX3NlbF9hOwotCQlsbmEgPSB0ZXN0X2JpdChDT05GSUdfRVhURVJOQUxfTE5BX0EsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwkJbG5hID0gdGVzdF9iaXQoQ0FQQUJJTElUWV9FWFRFUk5BTF9MTkFfQSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKIAl9IGVsc2UgewogCQlzZWwgPSBhbnRlbm5hX3NlbF9iZzsKLQkJbG5hID0gdGVzdF9iaXQoQ09ORklHX0VYVEVSTkFMX0xOQV9CRywgJnJ0MngwMGRldi0+ZmxhZ3MpOworCQlsbmEgPSB0ZXN0X2JpdChDQVBBQklMSVRZX0VYVEVSTkFMX0xOQV9CRywgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbnRlbm5hX3NlbF9hKTsgaSsrKQpAQCAtNzQwLDcgKzc0MCw3IEBACiAJc2hvcnQgbG5hX2dhaW4gPSAwOwogCiAJaWYgKGxpYmNvbmYtPmNvbmYtPmNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgewotCQlpZiAodGVzdF9iaXQoQ09ORklHX0VYVEVSTkFMX0xOQV9CRywgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCQlpZiAodGVzdF9iaXQoQ0FQQUJJTElUWV9FWFRFUk5BTF9MTkFfQkcsICZydDJ4MDBkZXYtPmNhcF9mbGFncykpCiAJCQlsbmFfZ2FpbiArPSAxNDsKIAogCQlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fUlNTSV9PRkZTRVRfQkcsICZlZXByb20pOwpAQCAtOTMwLDcgKzkzMCw3IEBACiAJCWxvd19ib3VuZCA9IDB4Mjg7CiAJCXVwX2JvdW5kID0gMHg0ODsKIAotCQlpZiAodGVzdF9iaXQoQ09ORklHX0VYVEVSTkFMX0xOQV9BLCAmcnQyeDAwZGV2LT5mbGFncykpIHsKKwkJaWYgKHRlc3RfYml0KENBUEFCSUxJVFlfRVhURVJOQUxfTE5BX0EsICZydDJ4MDBkZXYtPmNhcF9mbGFncykpIHsKIAkJCWxvd19ib3VuZCArPSAweDEwOwogCQkJdXBfYm91bmQgKz0gMHgxMDsKIAkJfQpAQCAtOTQ2LDcgKzk0Niw3IEBACiAJCQl1cF9ib3VuZCA9IDB4MWM7CiAJCX0KIAotCQlpZiAodGVzdF9iaXQoQ09ORklHX0VYVEVSTkFMX0xOQV9CRywgJnJ0MngwMGRldi0+ZmxhZ3MpKSB7CisJCWlmICh0ZXN0X2JpdChDQVBBQklMSVRZX0VYVEVSTkFMX0xOQV9CRywgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkgewogCQkJbG93X2JvdW5kICs9IDB4MTQ7CiAJCQl1cF9ib3VuZCArPSAweDEwOwogCQl9CkBAIC0xNjYxLDcgKzE2NjEsNyBAQAogCX0KIAogCWlmIChydDJ4MDBkZXYtPmN1cnJfYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSB7Ci0JCWlmICh0ZXN0X2JpdChDT05GSUdfRVhURVJOQUxfTE5BX0EsICZydDJ4MDBkZXYtPmZsYWdzKSkgeworCQlpZiAodGVzdF9iaXQoQ0FQQUJJTElUWV9FWFRFUk5BTF9MTkFfQSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkgewogCQkJaWYgKGxuYSA9PSAzIHx8IGxuYSA9PSAyKQogCQkJCW9mZnNldCArPSAxMDsKIAkJfSBlbHNlIHsKQEAgLTE4OTksMTMgKzE4OTksMTMgQEAKIAkgKiBSZWFkIHRoZSBGcmFtZSB0eXBlLgogCSAqLwogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQU5URU5OQV9GUkFNRV9UWVBFKSkKLQkJX19zZXRfYml0KENPTkZJR19GUkFNRV9UWVBFLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJCV9fc2V0X2JpdChDQVBBQklMSVRZX0ZSQU1FX1RZUEUsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CiAKIAkvKgogCSAqIERldGVjdCBpZiB0aGlzIGRldmljZSBoYXMgYW4gaGFyZHdhcmUgY29udHJvbGxlZCByYWRpby4KIAkgKi8KIAlpZiAocnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0FOVEVOTkFfSEFSRFdBUkVfUkFESU8pKQotCQlfX3NldF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQlVUVE9OLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJCV9fc2V0X2JpdChDQVBBQklMSVRZX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKIAogCS8qCiAJICogUmVhZCBmcmVxdWVuY3kgb2Zmc2V0LgpAQCAtMTkxOSw4ICsxOTE5LDggQEAKIAlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fTklDLCAmZWVwcm9tKTsKIAogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fTklDX0VYVEVSTkFMX0xOQSkpIHsKLQkJX19zZXRfYml0KENPTkZJR19FWFRFUk5BTF9MTkFfQSwgJnJ0MngwMGRldi0+ZmxhZ3MpOwotCQlfX3NldF9iaXQoQ09ORklHX0VYVEVSTkFMX0xOQV9CRywgJnJ0MngwMGRldi0+ZmxhZ3MpOworCQlfX3NldF9iaXQoQ0FQQUJJTElUWV9FWFRFUk5BTF9MTkFfQSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKKwkJX19zZXRfYml0KENBUEFCSUxJVFlfRVhURVJOQUxfTE5BX0JHLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOwogCX0KIAogCS8qCkBAIC0yMjAwLDE2ICsyMjAwLDE2IEBACiAJICogVGhpcyBkZXZpY2UgaGFzIG11bHRpcGxlIGZpbHRlcnMgZm9yIGNvbnRyb2wgZnJhbWVzLAogCSAqIGJ1dCBoYXMgbm8gYSBzZXBhcmF0ZSBmaWx0ZXIgZm9yIFBTIFBvbGwgZnJhbWVzLgogCSAqLwotCV9fc2V0X2JpdChEUklWRVJfU1VQUE9SVF9DT05UUk9MX0ZJTFRFUlMsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwlfX3NldF9iaXQoQ0FQQUJJTElUWV9DT05UUk9MX0ZJTFRFUlMsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CiAKIAkvKgogCSAqIFRoaXMgZGV2aWNlIHJlcXVpcmVzIGZpcm13YXJlLgogCSAqLwotCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9GSVJNV0FSRSwgJnJ0MngwMGRldi0+ZmxhZ3MpOworCV9fc2V0X2JpdChSRVFVSVJFX0ZJUk1XQVJFLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOwogCWlmICghbW9kcGFyYW1fbm9od2NyeXB0KQotCQlfX3NldF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQ1JZUFRPLCAmcnQyeDAwZGV2LT5mbGFncyk7Ci0JX19zZXRfYml0KERSSVZFUl9TVVBQT1JUX0xJTktfVFVOSU5HLCAmcnQyeDAwZGV2LT5mbGFncyk7Ci0JX19zZXRfYml0KERSSVZFUl9TVVBQT1JUX1dBVENIRE9HLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJCV9fc2V0X2JpdChDQVBBQklMSVRZX0hXX0NSWVBUTywgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKKwlfX3NldF9iaXQoQ0FQQUJJTElUWV9MSU5LX1RVTklORywgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKKwlfX3NldF9iaXQoUkVRVUlSRV9QU19BVVRPV0FLRSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKIAogCS8qCiAJICogU2V0IHRoZSByc3NpIG9mZnNldC4KQEAgLTIzMTEsNiArMjMxMSw5IEBACiAJLmdldF90c2YJCT0gcnQ3M3VzYl9nZXRfdHNmLAogCS5yZmtpbGxfcG9sbAkJPSBydDJ4MDBtYWNfcmZraWxsX3BvbGwsCiAJLmZsdXNoCQkJPSBydDJ4MDBtYWNfZmx1c2gsCisJLnNldF9hbnRlbm5hCQk9IHJ0MngwMG1hY19zZXRfYW50ZW5uYSwKKwkuZ2V0X2FudGVubmEJCT0gcnQyeDAwbWFjX2dldF9hbnRlbm5hLAorCS5nZXRfcmluZ3BhcmFtCQk9IHJ0MngwMG1hY19nZXRfcmluZ3BhcmFtLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydDJ4MDBsaWJfb3BzIHJ0NzN1c2JfcnQyeDAwX29wcyA9IHsKQEAgLTIzODksMTE0ICsyMzkyLDExMyBAQAogICovCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgcnQ3M3VzYl9kZXZpY2VfdGFibGVbXSA9IHsKIAkvKiBBYm9Db20gKi8KLQl7IFVTQl9ERVZJQ0UoMHgwN2I4LCAweGIyMWIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA3YjgsIDB4YjIxYyksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDdiOCwgMHhiMjFkKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwN2I4LCAweGIyMWUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA3YjgsIDB4YjIxZiksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDdiOCwgMHhiMjFiKSB9LAorCXsgVVNCX0RFVklDRSgweDA3YjgsIDB4YjIxYykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2I4LCAweGIyMWQpIH0sCisJeyBVU0JfREVWSUNFKDB4MDdiOCwgMHhiMjFlKSB9LAorCXsgVVNCX0RFVklDRSgweDA3YjgsIDB4YjIxZikgfSwKIAkvKiBBTCAqLwotCXsgVVNCX0RFVklDRSgweDE0YjIsIDB4M2MxMCksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzEwKSB9LAogCS8qIEFtaWdvICovCi0JeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHg5MDIxKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZWIwLCAweDkwMjEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4OTAyMSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZWIwLCAweDkwMjEpIH0sCiAJLyogQU1JVCAgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxOGM1LCAweDAwMDIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE4YzUsIDB4MDAwMikgfSwKIAkvKiBBc2tleSAqLwotCXsgVVNCX0RFVklDRSgweDE2OTAsIDB4MDcyMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTY5MCwgMHgwNzIyKSB9LAogCS8qIEFTVVMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE3MjMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTcyNCksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzIzKSB9LAorCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTcyNCkgfSwKIAkvKiBCZWxraW4gKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDcwNTApLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4NzA1YSksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDUwZCwgMHg5MDViKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDkwNWMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4NzA1YSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDkwNWIpIH0sCisJeyBVU0JfREVWSUNFKDB4MDUwZCwgMHg5MDVjKSB9LAogCS8qIEJpbGxpb250b24gKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNjMxLCAweGMwMTkpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA4ZGQsIDB4MDEyMCksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTYzMSwgMHhjMDE5KSB9LAorCXsgVVNCX0RFVklDRSgweDA4ZGQsIDB4MDEyMCkgfSwKIAkvKiBCdWZmYWxvICovCi0JeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMGQ4KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAwZDkpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDBmNCksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMTE2KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAxMTkpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDEzNyksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMGQ4KSB9LAorCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDBkOSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAwZjQpIH0sCisJeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMTE2KSB9LAorCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDExOSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAxMzcpIH0sCiAJLyogQ0VJVkEgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNzhkLCAweDAyYmUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE3OGQsIDB4MDJiZSkgfSwKIAkvKiBDTmV0ICovCi0JeyBVU0JfREVWSUNFKDB4MTM3MSwgMHg5MDIyKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxMzcxLCAweDkwMzIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDEzNzEsIDB4OTAyMikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxMzcxLCAweDkwMzIpIH0sCiAJLyogQ29uY2VwdHJvbmljICovCi0JeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzIyKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNGIyLCAweDNjMjIpIH0sCiAJLyogQ29yZWdhICovCi0JeyBVU0JfREVWSUNFKDB4MDdhYSwgMHgwMDJlKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2FhLCAweDAwMmUpIH0sCiAJLyogRC1MaW5rICovCi0JeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzAzKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMDQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MwNiksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzA3KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMDMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzA0KSB9LAorCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MwNikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMDcpIH0sCiAJLyogRWRpbWF4ICovCi0JeyBVU0JfREVWSUNFKDB4NzM5MiwgMHg3MzE4KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHg3MzkyLCAweDc2MTgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDczOTIsIDB4NzMxOCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHg3MzkyLCAweDc2MTgpIH0sCiAJLyogRW5HZW5pdXMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDM3MDEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4MzcwMSkgfSwKIAkvKiBHZW10ZWsgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNWE5LCAweDAwMDQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE1YTksIDB4MDAwNCkgfSwKIAkvKiBHaWdhYnl0ZSAqLwotCXsgVVNCX0RFVklDRSgweDEwNDQsIDB4ODAwOCksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTA0NCwgMHg4MDBhKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxMDQ0LCAweDgwMDgpIH0sCisJeyBVU0JfREVWSUNFKDB4MTA0NCwgMHg4MDBhKSB9LAogCS8qIEh1YXdlaS0zQ29tICovCi0JeyBVU0JfREVWSUNFKDB4MTQ3MiwgMHgwMDA5KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNDcyLCAweDAwMDkpIH0sCiAJLyogSGVyY3VsZXMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNmY4LCAweGUwMDIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA2ZjgsIDB4ZTAxMCksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDZmOCwgMHhlMDIwKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNmY4LCAweGUwMDIpIH0sCisJeyBVU0JfREVWSUNFKDB4MDZmOCwgMHhlMDEwKSB9LAorCXsgVVNCX0RFVklDRSgweDA2ZjgsIDB4ZTAyMCkgfSwKIAkvKiBMaW5rc3lzICovCi0JeyBVU0JfREVWSUNFKDB4MTNiMSwgMHgwMDIwKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxM2IxLCAweDAwMjMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDEzYjEsIDB4MDAyOCksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTNiMSwgMHgwMDIwKSB9LAorCXsgVVNCX0RFVklDRSgweDEzYjEsIDB4MDAyMykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxM2IxLCAweDAwMjgpIH0sCiAJLyogTVNJICovCi0JeyBVU0JfREVWSUNFKDB4MGRiMCwgMHg0NjAwKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDY4NzcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4Njg3NCksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRiMCwgMHhhODYxKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweGE4NzQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4NDYwMCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDY4NzcpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRiMCwgMHg2ODc0KSB9LAorCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4YTg2MSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweGE4NzQpIH0sCiAJLyogT3Zpc2xpbmsgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxYjc1LCAweDczMTgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDFiNzUsIDB4NzMxOCkgfSwKIAkvKiBSYWxpbmsgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNGJiLCAweDA5M2QpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MjU3MyksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHgyNjcxKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwODEyLCAweDMxMDEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA0YmIsIDB4MDkzZCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDI1NzMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHgyNjcxKSB9LAorCXsgVVNCX0RFVklDRSgweDA4MTIsIDB4MzEwMSkgfSwKIAkvKiBRY29tICovCi0JeyBVU0JfREVWSUNFKDB4MThlOCwgMHg2MTk2KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxOGU4LCAweDYyMjkpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE4ZTgsIDB4NjIzOCksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MThlOCwgMHg2MTk2KSB9LAorCXsgVVNCX0RFVklDRSgweDE4ZTgsIDB4NjIyOSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxOGU4LCAweDYyMzgpIH0sCiAJLyogU2Ftc3VuZyAqLwotCXsgVVNCX0RFVklDRSgweDA0ZTgsIDB4NDQ3MSksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDRlOCwgMHg0NDcxKSB9LAogCS8qIFNlbmFvICovCi0JeyBVU0JfREVWSUNFKDB4MTc0MCwgMHg3MTAwKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDcxMDApIH0sCiAJLyogU2l0ZWNvbSAqLwotCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAyNCksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDI3KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwMmYpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4OTBhYyksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRmNiwgMHg5NzEyKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwMjQpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDI3KSB9LAorCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAyZikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDkwYWMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHg5NzEyKSB9LAogCS8qIFN1cmVjb20gKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNzY5LCAweDMxZjMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA3NjksIDB4MzFmMykgfSwKIAkvKiBUaWxnaW4gKi8KLQl7IFVTQl9ERVZJQ0UoMHg2OTMzLCAweDUwMDEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDY5MzMsIDB4NTAwMSkgfSwKIAkvKiBQaGlsaXBzICovCi0JeyBVU0JfREVWSUNFKDB4MDQ3MSwgMHgyMDBhKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNDcxLCAweDIwMGEpIH0sCiAJLyogUGxhbmV4ICovCi0JeyBVU0JfREVWSUNFKDB4MjAxOSwgMHhhYjAxKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgyMDE5LCAweGFiNTApLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDIwMTksIDB4YWIwMSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDE5LCAweGFiNTApIH0sCiAJLyogV2lkZVRlbGwgKi8KLQl7IFVTQl9ERVZJQ0UoMHg3MTY3LCAweDM4NDApLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDcxNjcsIDB4Mzg0MCkgfSwKIAkvKiBaY29tICovCi0JeyBVU0JfREVWSUNFKDB4MGNkZSwgMHgwMDFjKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwY2RlLCAweDAwMWMpIH0sCiAJLyogWnlYRUwgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNTg2LCAweDM0MTUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA1ODYsIDB4MzQxNSkgfSwKIAl7IDAsIH0KIH07CiAKQEAgLTI1MDgsMTAgKzI1MTAsMTYgQEAKIE1PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV9SVDI1NzEpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCitzdGF0aWMgaW50IHJ0NzN1c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVzYl9pbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlyZXR1cm4gcnQyeDAwdXNiX3Byb2JlKHVzYl9pbnRmLCAmcnQ3M3VzYl9vcHMpOworfQorCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgcnQ3M3VzYl9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gS0JVSUxEX01PRE5BTUUsCiAJLmlkX3RhYmxlCT0gcnQ3M3VzYl9kZXZpY2VfdGFibGUsCi0JLnByb2JlCQk9IHJ0MngwMHVzYl9wcm9iZSwKKwkucHJvYmUJCT0gcnQ3M3VzYl9wcm9iZSwKIAkuZGlzY29ubmVjdAk9IHJ0MngwMHVzYl9kaXNjb25uZWN0LAogCS5zdXNwZW5kCT0gcnQyeDAwdXNiX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBydDJ4MDB1c2JfcmVzdW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9LY29uZmlnCmluZGV4IGNlNDllMGMuLjVhZWU4YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL0tjb25maWcKQEAgLTEwLDYgKzEwLDE3IEBACiAKIAlJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGl0IGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIGNhbGxlZCBydGw4MTkyY2UKIAorY29uZmlnIFJUTDgxOTJTRQorCXRyaXN0YXRlICJSZWFsdGVrIFJUTDgxOTJTRS9SVEw4MTkxU0UgUENJZSBXaXJlbGVzcyBOZXR3b3JrIEFkYXB0ZXIiCisJZGVwZW5kcyBvbiBNQUM4MDIxMSAmJiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgRldfTE9BREVSCisJc2VsZWN0IFJUTFdJRkkKKwktLS1oZWxwLS0tCisJVGhpcyBpcyB0aGUgZHJpdmVyIGZvciBSZWFsdGVrIFJUTDgxOTJTRS9SVEw4MTkxU0UgODAyLjExbiBQQ0llCisJd2lyZWxlc3MgbmV0d29yayBhZGFwdGVycy4KKworCUlmIHlvdSBjaG9vc2UgdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkIHJ0bDgxOTJzZQorCiBjb25maWcgUlRMODE5MkNVCiAJdHJpc3RhdGUgIlJlYWx0ZWsgUlRMODE5MkNVL1JUTDgxODhDVSBVU0IgV2lyZWxlc3MgTmV0d29yayBBZGFwdGVyIgogCWRlcGVuZHMgb24gTUFDODAyMTEgJiYgVVNCICYmIEVYUEVSSU1FTlRBTApAQCAtMjQsMTAgKzM1LDEwIEBACiAKIGNvbmZpZyBSVExXSUZJCiAJdHJpc3RhdGUKLQlkZXBlbmRzIG9uIFJUTDgxOTJDRSB8fCBSVEw4MTkyQ1UKKwlkZXBlbmRzIG9uIFJUTDgxOTJDRSB8fCBSVEw4MTkyQ1UgfHwgUlRMODE5MlNFCiAJZGVmYXVsdCBtCiAKIGNvbmZpZyBSVEw4MTkyQ19DT01NT04KIAl0cmlzdGF0ZQotCWRlcGVuZHMgb24gUlRMODE5MkNFIHx8IFJUTDgxOTJDVQorCWRlcGVuZHMgb24gUlRMODE5MkNFIHx8IFJUTDgxOTJDVSB8fCBSVEw4MTkyU0UKIAlkZWZhdWx0IG0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL01ha2VmaWxlCmluZGV4IGVjOTM5M2YuLjdhY2NlODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9NYWtlZmlsZQpAQCAtMjIsNSArMjIsNiBAQAogb2JqLSQoQ09ORklHX1JUTDgxOTJDX0NPTU1PTikJKz0gcnRsODE5MmMvCiBvYmotJChDT05GSUdfUlRMODE5MkNFKQkJKz0gcnRsODE5MmNlLwogb2JqLSQoQ09ORklHX1JUTDgxOTJDVSkJCSs9IHJ0bDgxOTJjdS8KK29iai0kKENPTkZJR19SVEw4MTkyU0UpCQkrPSBydGw4MTkyc2UvCiAKIGNjZmxhZ3MteSArPSAtRF9fQ0hFQ0tfRU5ESUFOX18KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9iYXNlLmMKaW5kZXggMGQ3ZDkzZS4uY2NiNmRhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9iYXNlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9iYXNlLmMKQEAgLTUwLDggKzUwLDkgQEAKICAqMykgZnVuY3Rpb25zIGNhbGxlZCBieSBjb3JlLmMKICAqNCkgd3EgJiB0aW1lciBjYWxsYmFjayBmdW5jdGlvbnMKICAqNSkgZnJhbWUgcHJvY2VzcyBmdW5jdGlvbnMKLSAqNikgc3lzZnMgZnVuY3Rpb25zCi0gKjcpIC4uLgorICo2KSBJT1QgZnVuY3Rpb25zCisgKjcpIHN5c2ZzIGZ1bmN0aW9ucworICo4KSAuLi4KICAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC01OSw3ICs2MCw3IEBACiAgKiBtYWM4MDIxMSBpbml0IGZ1bmN0aW9ucwogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHJ0bF9jaGFubmVsdGFibGVbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgcnRsX2NoYW5uZWx0YWJsZV8yZ1tdID0gewogCXsuY2VudGVyX2ZyZXEgPSAyNDEyLCAuaHdfdmFsdWUgPSAxLH0sCiAJey5jZW50ZXJfZnJlcSA9IDI0MTcsIC5od192YWx1ZSA9IDIsfSwKIAl7LmNlbnRlcl9mcmVxID0gMjQyMiwgLmh3X3ZhbHVlID0gMyx9LApAQCAtNzYsNyArNzcsMzQgQEAKIAl7LmNlbnRlcl9mcmVxID0gMjQ4NCwgLmh3X3ZhbHVlID0gMTQsfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcnRsX3JhdGV0YWJsZVtdID0geworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBydGxfY2hhbm5lbHRhYmxlXzVnW10gPSB7CisJey5jZW50ZXJfZnJlcSA9IDUxODAsIC5od192YWx1ZSA9IDM2LH0sCisJey5jZW50ZXJfZnJlcSA9IDUyMDAsIC5od192YWx1ZSA9IDQwLH0sCisJey5jZW50ZXJfZnJlcSA9IDUyMjAsIC5od192YWx1ZSA9IDQ0LH0sCisJey5jZW50ZXJfZnJlcSA9IDUyNDAsIC5od192YWx1ZSA9IDQ4LH0sCisJey5jZW50ZXJfZnJlcSA9IDUyNjAsIC5od192YWx1ZSA9IDUyLH0sCisJey5jZW50ZXJfZnJlcSA9IDUyODAsIC5od192YWx1ZSA9IDU2LH0sCisJey5jZW50ZXJfZnJlcSA9IDUzMDAsIC5od192YWx1ZSA9IDYwLH0sCisJey5jZW50ZXJfZnJlcSA9IDUzMjAsIC5od192YWx1ZSA9IDY0LH0sCisJey5jZW50ZXJfZnJlcSA9IDU1MDAsIC5od192YWx1ZSA9IDEwMCx9LAorCXsuY2VudGVyX2ZyZXEgPSA1NTIwLCAuaHdfdmFsdWUgPSAxMDQsfSwKKwl7LmNlbnRlcl9mcmVxID0gNTU0MCwgLmh3X3ZhbHVlID0gMTA4LH0sCisJey5jZW50ZXJfZnJlcSA9IDU1NjAsIC5od192YWx1ZSA9IDExMix9LAorCXsuY2VudGVyX2ZyZXEgPSA1NTgwLCAuaHdfdmFsdWUgPSAxMTYsfSwKKwl7LmNlbnRlcl9mcmVxID0gNTYwMCwgLmh3X3ZhbHVlID0gMTIwLH0sCisJey5jZW50ZXJfZnJlcSA9IDU2MjAsIC5od192YWx1ZSA9IDEyNCx9LAorCXsuY2VudGVyX2ZyZXEgPSA1NjQwLCAuaHdfdmFsdWUgPSAxMjgsfSwKKwl7LmNlbnRlcl9mcmVxID0gNTY2MCwgLmh3X3ZhbHVlID0gMTMyLH0sCisJey5jZW50ZXJfZnJlcSA9IDU2ODAsIC5od192YWx1ZSA9IDEzNix9LAorCXsuY2VudGVyX2ZyZXEgPSA1NzAwLCAuaHdfdmFsdWUgPSAxNDAsfSwKKwl7LmNlbnRlcl9mcmVxID0gNTc0NSwgLmh3X3ZhbHVlID0gMTQ5LH0sCisJey5jZW50ZXJfZnJlcSA9IDU3NjUsIC5od192YWx1ZSA9IDE1Myx9LAorCXsuY2VudGVyX2ZyZXEgPSA1Nzg1LCAuaHdfdmFsdWUgPSAxNTcsfSwKKwl7LmNlbnRlcl9mcmVxID0gNTgwNSwgLmh3X3ZhbHVlID0gMTYxLH0sCisJey5jZW50ZXJfZnJlcSA9IDU4MjUsIC5od192YWx1ZSA9IDE2NSx9LAorfTsKKworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBydGxfcmF0ZXRhYmxlXzJnW10gPSB7CiAJey5iaXRyYXRlID0gMTAsIC5od192YWx1ZSA9IDB4MDAsfSwKIAl7LmJpdHJhdGUgPSAyMCwgLmh3X3ZhbHVlID0gMHgwMSx9LAogCXsuYml0cmF0ZSA9IDU1LCAuaHdfdmFsdWUgPSAweDAyLH0sCkBAIC05MSwxOCArMTE5LDU3IEBACiAJey5iaXRyYXRlID0gNTQwLCAuaHdfdmFsdWUgPSAweDBiLH0sCiB9OwogCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yYXRlIHJ0bF9yYXRldGFibGVfNWdbXSA9IHsKKwl7LmJpdHJhdGUgPSA2MCwgLmh3X3ZhbHVlID0gMHgwNCx9LAorCXsuYml0cmF0ZSA9IDkwLCAuaHdfdmFsdWUgPSAweDA1LH0sCisJey5iaXRyYXRlID0gMTIwLCAuaHdfdmFsdWUgPSAweDA2LH0sCisJey5iaXRyYXRlID0gMTgwLCAuaHdfdmFsdWUgPSAweDA3LH0sCisJey5iaXRyYXRlID0gMjQwLCAuaHdfdmFsdWUgPSAweDA4LH0sCisJey5iaXRyYXRlID0gMzYwLCAuaHdfdmFsdWUgPSAweDA5LH0sCisJey5iaXRyYXRlID0gNDgwLCAuaHdfdmFsdWUgPSAweDBhLH0sCisJey5iaXRyYXRlID0gNTQwLCAuaHdfdmFsdWUgPSAweDBiLH0sCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBydGxfYmFuZF8yZ2h6ID0gewogCS5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWiwKIAotCS5jaGFubmVscyA9IHJ0bF9jaGFubmVsdGFibGUsCi0JLm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHJ0bF9jaGFubmVsdGFibGUpLAorCS5jaGFubmVscyA9IHJ0bF9jaGFubmVsdGFibGVfMmcsCisJLm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHJ0bF9jaGFubmVsdGFibGVfMmcpLAogCi0JLmJpdHJhdGVzID0gcnRsX3JhdGV0YWJsZSwKLQkubl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUocnRsX3JhdGV0YWJsZSksCisJLmJpdHJhdGVzID0gcnRsX3JhdGV0YWJsZV8yZywKKwkubl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUocnRsX3JhdGV0YWJsZV8yZyksCiAKIAkuaHRfY2FwID0gezB9LAogfTsKIAorc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgcnRsX2JhbmRfNWdoeiA9IHsKKwkuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzVHSFosCisKKwkuY2hhbm5lbHMgPSBydGxfY2hhbm5lbHRhYmxlXzVnLAorCS5uX2NoYW5uZWxzID0gQVJSQVlfU0laRShydGxfY2hhbm5lbHRhYmxlXzVnKSwKKworCS5iaXRyYXRlcyA9IHJ0bF9yYXRldGFibGVfNWcsCisJLm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKHJ0bF9yYXRldGFibGVfNWcpLAorCisJLmh0X2NhcCA9IHswfSwKK307CisKK3N0YXRpYyBjb25zdCB1OCB0aWRfdG9fYWNbXSA9IHsKKwkyLCAvKiBJRUVFODAyMTFfQUNfQkUgKi8KKwkzLCAvKiBJRUVFODAyMTFfQUNfQksgKi8KKwkzLCAvKiBJRUVFODAyMTFfQUNfQksgKi8KKwkyLCAvKiBJRUVFODAyMTFfQUNfQkUgKi8KKwkxLCAvKiBJRUVFODAyMTFfQUNfVkkgKi8KKwkxLCAvKiBJRUVFODAyMTFfQUNfVkkgKi8KKwkwLCAvKiBJRUVFODAyMTFfQUNfVk8gKi8KKwkwLCAvKiBJRUVFODAyMTFfQUNfVk8gKi8KK307CisKK3U4IHJ0bF90aWRfdG9fYWMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHRpZCkKK3sKKwlyZXR1cm4gdGlkX3RvX2FjW3RpZF07Cit9CisKIHN0YXRpYyB2b2lkIF9ydGxfaW5pdF9od19odF9jYXBhYihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgIHN0cnVjdCBpZWVlODAyMTFfc3RhX2h0X2NhcCAqaHRfY2FwKQogewpAQCAtMTE1LDYgKzE4Miw5IEBACiAJICAgIElFRUU4MDIxMV9IVF9DQVBfU0dJXzIwIHwKIAkgICAgSUVFRTgwMjExX0hUX0NBUF9EU1NTQ0NLNDAgfCBJRUVFODAyMTFfSFRfQ0FQX01BWF9BTVNEVTsKIAorCWlmIChydGxwcml2LT5ydGxoYWwuZGlzYWJsZV9hbXNkdV84aykKKwkJaHRfY2FwLT5jYXAgJj0gfklFRUU4MDIxMV9IVF9DQVBfTUFYX0FNU0RVOworCiAJLyoKIAkgKk1heGltdW0gbGVuZ3RoIG9mIEFNUERVIHRoYXQgdGhlIFNUQSBjYW4gcmVjZWl2ZS4KIAkgKkxlbmd0aCA9IDIgXiAoMTMgKyBtYXhfYW1wZHVfbGVuZ3RoX2V4cCkgLSAxIChvY3RldHMpCkBAIC0xNTksMzcgKzIyOSw5OSBAQAogCiBzdGF0aWMgdm9pZCBfcnRsX2luaXRfbWFjODAyMTEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bHByaXYpOwogCXN0cnVjdCBydGxfbWFjICpydGxtYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CiAJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAotCS8qIDwxPiB1c2UgIG1hYy0+YmFuZHMgYXMgbWVtIGZvciBody0+d2lwaHktPmJhbmRzICovCi0Jc2JhbmQgPSAmKHJ0bG1hYy0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0pOwogCi0JLyoKLQkgKiA8Mj4gc2V0IGh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0KLQkgKiB0byBkZWZhdWx0IHZhbHVlKDFUMVIpCi0JICovCi0JbWVtY3B5KCYocnRsbWFjLT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSksICZydGxfYmFuZF8yZ2h6LAotCSAgICAgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCkpOworCWlmIChydGxoYWwtPm1hY3BoeW1vZGUgPT0gU0lOR0xFTUFDX1NJTkdMRVBIWSAmJiBydGxoYWwtPmJhbmRzZXQgPT0KKwkgICAgQkFORF9PTl9CT1RIKSB7CisJCS8qIDE6IDIuNCBHIGJhbmRzICovCisJCS8qIDwxPiB1c2UgIG1hYy0+YmFuZHMgYXMgbWVtIGZvciBody0+d2lwaHktPmJhbmRzICovCisJCXNiYW5kID0gJihydGxtYWMtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdKTsKIAotCS8qIDwzPiBpbml0IGh0IGNhcCBiYXNlIG9uIGFudF9udW0gKi8KLQlfcnRsX2luaXRfaHdfaHRfY2FwYWIoaHcsICZzYmFuZC0+aHRfY2FwKTsKKwkJLyogPDI+IHNldCBody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdCisJCSAqIHRvIGRlZmF1bHQgdmFsdWUoMVQxUikgKi8KKwkJbWVtY3B5KCYocnRsbWFjLT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSksICZydGxfYmFuZF8yZ2h6LAorCQkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kKSk7CiAKLQkvKiA8ND4gc2V0IG1hYy0+c2JhbmQgdG8gd2lwaHktPnNiYW5kICovCi0JaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9IHNiYW5kOworCQkvKiA8Mz4gaW5pdCBodCBjYXAgYmFzZSBvbiBhbnRfbnVtICovCisJCV9ydGxfaW5pdF9od19odF9jYXBhYihodywgJnNiYW5kLT5odF9jYXApOwogCisJCS8qIDw0PiBzZXQgbWFjLT5zYmFuZCB0byB3aXBoeS0+c2JhbmQgKi8KKwkJaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9IHNiYW5kOworCisJCS8qIDI6IDUgRyBiYW5kcyAqLworCQkvKiA8MT4gdXNlICBtYWMtPmJhbmRzIGFzIG1lbSBmb3IgaHctPndpcGh5LT5iYW5kcyAqLworCQlzYmFuZCA9ICYocnRsbWFjLT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSk7CisKKwkJLyogPDI+IHNldCBody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdCisJCSAqIHRvIGRlZmF1bHQgdmFsdWUoMVQxUikgKi8KKwkJbWVtY3B5KCYocnRsbWFjLT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSksICZydGxfYmFuZF81Z2h6LAorCQkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kKSk7CisKKwkJLyogPDM+IGluaXQgaHQgY2FwIGJhc2Ugb24gYW50X251bSAqLworCQlfcnRsX2luaXRfaHdfaHRfY2FwYWIoaHcsICZzYmFuZC0+aHRfY2FwKTsKKworCQkvKiA8ND4gc2V0IG1hYy0+c2JhbmQgdG8gd2lwaHktPnNiYW5kICovCisJCWh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0gPSBzYmFuZDsKKwl9IGVsc2UgeworCQlpZiAocnRsaGFsLT5jdXJyZW50X2JhbmR0eXBlID09IEJBTkRfT05fMl80RykgeworCQkJLyogPDE+IHVzZSAgbWFjLT5iYW5kcyBhcyBtZW0gZm9yIGh3LT53aXBoeS0+YmFuZHMgKi8KKwkJCXNiYW5kID0gJihydGxtYWMtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdKTsKKworCQkJLyogPDI+IHNldCBody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdCisJCQkgKiB0byBkZWZhdWx0IHZhbHVlKDFUMVIpICovCisJCQltZW1jcHkoJihydGxtYWMtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdKSwKKwkJCQkgJnJ0bF9iYW5kXzJnaHosCisJCQkJIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kKSk7CisKKwkJCS8qIDwzPiBpbml0IGh0IGNhcCBiYXNlIG9uIGFudF9udW0gKi8KKwkJCV9ydGxfaW5pdF9od19odF9jYXBhYihodywgJnNiYW5kLT5odF9jYXApOworCisJCQkvKiA8ND4gc2V0IG1hYy0+c2JhbmQgdG8gd2lwaHktPnNiYW5kICovCisJCQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gc2JhbmQ7CisJCX0gZWxzZSBpZiAocnRsaGFsLT5jdXJyZW50X2JhbmR0eXBlID09IEJBTkRfT05fNUcpIHsKKwkJCS8qIDwxPiB1c2UgIG1hYy0+YmFuZHMgYXMgbWVtIGZvciBody0+d2lwaHktPmJhbmRzICovCisJCQlzYmFuZCA9ICYocnRsbWFjLT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSk7CisKKwkJCS8qIDwyPiBzZXQgaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXQorCQkJICogdG8gZGVmYXVsdCB2YWx1ZSgxVDFSKSAqLworCQkJbWVtY3B5KCYocnRsbWFjLT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSksCisJCQkJICZydGxfYmFuZF81Z2h6LAorCQkJCSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCkpOworCisJCQkvKiA8Mz4gaW5pdCBodCBjYXAgYmFzZSBvbiBhbnRfbnVtICovCisJCQlfcnRsX2luaXRfaHdfaHRfY2FwYWIoaHcsICZzYmFuZC0+aHRfY2FwKTsKKworCQkJLyogPDQ+IHNldCBtYWMtPnNiYW5kIHRvIHdpcGh5LT5zYmFuZCAqLworCQkJaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSA9IHNiYW5kOworCQl9IGVsc2UgeworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfRU1FUkcsCisJCQkJICgiRXJyIEJBTkQgJWRcbiIsCisJCQkJIHJ0bGhhbC0+Y3VycmVudF9iYW5kdHlwZSkpOworCQl9CisJfQogCS8qIDw1PiBzZXQgaHcgY2FwcyAqLwogCWh3LT5mbGFncyA9IElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKIAkgICAgSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUyB8Ci0JICAgIElFRUU4MDIxMV9IV19CRUFDT05fRklMVEVSIHwgSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OIHwgLypQUyovCi0JICAgIC8qSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwgKi8KLQkgICAgLypJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0sgfCAqLwotCSAgICAvKklFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1BTIHwgKi8KKwkgICAgSUVFRTgwMjExX0hXX0JFQUNPTl9GSUxURVIgfAorCSAgICBJRUVFODAyMTFfSFdfQU1QRFVfQUdHUkVHQVRJT04gfAogCSAgICBJRUVFODAyMTFfSFdfUkVQT1JUU19UWF9BQ0tfU1RBVFVTIHwgMDsKIAorCS8qIHN3bHBzIG9yIGh3bHBzIGhhcyBiZWVuIHNldCBpbiBkaWZmIGNoaXAgaW4gaW5pdF9zd192YXJzICovCisJaWYgKHJ0bHByaXYtPnBzYy5zd2N0cmxfbHBzKQorCQlody0+ZmxhZ3MgfD0gSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKKwkJCUlFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSyB8CisJCQkvKiBJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUyB8ICovCisJCQkwOworCiAJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPQotCSAgICBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfCBCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpOworCSAgICBCSVQoTkw4MDIxMV9JRlRZUEVfQVApIHwKKwkgICAgQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKKwkgICAgQklUKE5MODAyMTFfSUZUWVBFX0FESE9DKTsKIAogCWh3LT53aXBoeS0+cnRzX3RocmVzaG9sZCA9IDIzNDc7CiAKQEAgLTE5OSw5ICszMzEsMTAgQEAKIAkvKiBUT0RPOiBDb3JyZWN0IHRoaXMgdmFsdWUgZm9yIG91ciBodyAqLwogCS8qIFRPRE86IGRlZmluZSB0aGVzZSBoYXJkIGNvZGUgdmFsdWUgKi8KIAlody0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDEwMDsKLQlody0+bWF4X2xpc3Rlbl9pbnRlcnZhbCA9IDU7CisJaHctPm1heF9saXN0ZW5faW50ZXJ2YWwgPSAxMDsKIAlody0+bWF4X3JhdGVfdHJpZXMgPSA0OwogCS8qIGh3LT5tYXhfcmF0ZXMgPSAxOyAqLworCWh3LT5zdGFfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBydGxfc3RhX2luZm8pOwogCiAJLyogPDY+IG1hYyBhZGRyZXNzICovCiAJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIocnRsZWZ1c2UtPmRldl9hZGRyKSkgewpAQCAtMjMwLDYgKzM2MywxMCBAQAogCQkJICAodm9pZCAqKXJ0bF93YXRjaGRvZ193cV9jYWxsYmFjayk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnJ0bHByaXYtPndvcmtzLmlwc19uaWNfb2ZmX3dxLAogCQkJICAodm9pZCAqKXJ0bF9pcHNfbmljX29mZl93cV9jYWxsYmFjayk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnJ0bHByaXYtPndvcmtzLnBzX3dvcmssCisJCQkgICh2b2lkICopcnRsX3N3bHBzX3dxX2NhbGxiYWNrKTsKKwlJTklUX0RFTEFZRURfV09SSygmcnRscHJpdi0+d29ya3MucHNfcmZvbl93cSwKKwkJCSAgKHZvaWQgKilydGxfc3dscHNfcmZvbl93cV9jYWxsYmFjayk7CiAKIH0KIApAQCAtMjQxLDYgKzM3OCw4IEBACiAKIAljYW5jZWxfZGVsYXllZF93b3JrKCZydGxwcml2LT53b3Jrcy53YXRjaGRvZ193cSk7CiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmcnRscHJpdi0+d29ya3MuaXBzX25pY19vZmZfd3EpOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnJ0bHByaXYtPndvcmtzLnBzX3dvcmspOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnJ0bHByaXYtPndvcmtzLnBzX3Jmb25fd3EpOwogfQogCiB2b2lkIHJ0bF9pbml0X3Jma2lsbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKQEAgLTI1MSwxNCArMzkwLDE2IEBACiAJYm9vbCBibG9ja2VkOwogCXU4IHZhbGlkID0gMDsKIAorCS8qc2V0IGluaXQgc3RhdGUgdG8gb24gKi8KKwlydGxwcml2LT5yZmtpbGwucmZraWxsX3N0YXRlID0gMTsKKwl3aXBoeV9yZmtpbGxfc2V0X2h3X3N0YXRlKGh3LT53aXBoeSwgMCk7CisKIAlyYWRpb19zdGF0ZSA9IHJ0bHByaXYtPmNmZy0+b3BzLT5yYWRpb19vbm9mZl9jaGVja2luZyhodywgJnZhbGlkKTsKIAotCS8qc2V0IGluaXQgc3RhdGUgdG8gdGhhdCBvZiBzd2l0Y2ggKi8KLQlydGxwcml2LT5yZmtpbGwucmZraWxsX3N0YXRlID0gcmFkaW9fc3RhdGU7Ci0JcHJpbnRrKEtFUk5fSU5GTyAicnRsd2lmaTogd2lyZWxlc3Mgc3dpdGNoIGlzICVzXG4iLAotCSAgICAgICBydGxwcml2LT5yZmtpbGwucmZraWxsX3N0YXRlID8gIm9uIiA6ICJvZmYiKTsKLQogCWlmICh2YWxpZCkgeworCQlwcmludGsoS0VSTl9JTkZPICJydGx3aWZpOiB3aXJlbGVzcyBzd2l0Y2ggaXMgJXNcbiIsCisJCQkJcnRscHJpdi0+cmZraWxsLnJma2lsbF9zdGF0ZSA/ICJvbiIgOiAib2ZmIik7CisKIAkJcnRscHJpdi0+cmZraWxsLnJma2lsbF9zdGF0ZSA9IHJhZGlvX3N0YXRlOwogCiAJCWJsb2NrZWQgPSAocnRscHJpdi0+cmZraWxsLnJma2lsbF9zdGF0ZSA9PSAxKSA/IDAgOiAxOwpAQCAtMzA4LDYgKzQ0OSw4IEBACiAJc3Bpbl9sb2NrX2luaXQoJnJ0bHByaXYtPmxvY2tzLnJmX3BzX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZydGxwcml2LT5sb2Nrcy5yZl9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcnRscHJpdi0+bG9ja3MubHBzX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZydGxwcml2LT5sb2Nrcy53YWl0cV9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcnRscHJpdi0+bG9ja3MuY2NrX2FuZF9yd19wYWdlYV9sb2NrKTsKIAogCXJ0bG1hYy0+bGlua19zdGF0ZSA9IE1BQzgwMjExX05PTElOSzsKIApAQCAtMzI3LDEyICs0NzAsNiBAQAogCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CiAKIAlydGxwcml2LT5jZmctPm9wcy0+Z2V0X2h3X3JlZyhodywgSFdfVkFSX1JDUiwgKHU4ICopICgmbWFjLT5yeF9jb25mKSk7Ci0JcnRscHJpdi0+Y2ZnLT5vcHMtPmdldF9od19yZWcoaHcsIEhXX1ZBUl9NR1RfRklMVEVSLAotCQkJCSAgICAgICh1OCAqKSAoJm1hYy0+cnhfbWd0X2ZpbHRlcikpOwotCXJ0bHByaXYtPmNmZy0+b3BzLT5nZXRfaHdfcmVnKGh3LCBIV19WQVJfQ1RSTF9GSUxURVIsCi0JCQkJICAgICAgKHU4ICopICgmbWFjLT5yeF9jdHJsX2ZpbHRlcikpOwotCXJ0bHByaXYtPmNmZy0+b3BzLT5nZXRfaHdfcmVnKGh3LCBIV19WQVJfREFUQV9GSUxURVIsCi0JCQkJICAgICAgKHU4ICopICgmbWFjLT5yeF9kYXRhX2ZpbHRlcikpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zNTksMjggKzQ5Niw0MCBAQAogfQogCiBzdGF0aWMgdm9pZCBfcnRsX3F1ZXJ5X3Nob3J0Z2koc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJCSAgICAgICBzdHJ1Y3QgcnRsX3RjYl9kZXNjICp0Y2JfZGVzYywKIAkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8pCiB7CiAJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKIAl1OCByYXRlX2ZsYWcgPSBpbmZvLT5jb250cm9sLnJhdGVzWzBdLmZsYWdzOwotCisJdTggc2dpXzQwID0gMCwgc2dpXzIwID0gMCwgYndfNDAgPSAwOwogCXRjYl9kZXNjLT51c2Vfc2hvcnRnaSA9IGZhbHNlOwogCi0JaWYgKCFtYWMtPmh0X2VuYWJsZSkKKwlpZiAoc3RhID09IE5VTEwpCiAJCXJldHVybjsKIAotCWlmICghbWFjLT5zZ2lfNDAgJiYgIW1hYy0+c2dpXzIwKQorCXNnaV80MCA9IHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU0dJXzQwOworCXNnaV8yMCA9IHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU0dJXzIwOworCisJaWYgKCEoc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKSkKIAkJcmV0dXJuOwogCi0JaWYgKChtYWMtPmJ3XzQwID09IHRydWUpICYmIG1hYy0+c2dpXzQwKQorCWlmICghc2dpXzQwICYmICFzZ2lfMjApCisJCXJldHVybjsKKworCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQlid180MCA9IG1hYy0+YndfNDA7CisJZWxzZSBpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkJbWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJCWJ3XzQwID0gc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDA7CisKKwlpZiAoKGJ3XzQwID09IHRydWUpICYmIHNnaV80MCkKIAkJdGNiX2Rlc2MtPnVzZV9zaG9ydGdpID0gdHJ1ZTsKLQllbHNlIGlmICgobWFjLT5id180MCA9PSBmYWxzZSkgJiYgbWFjLT5zZ2lfMjApCisJZWxzZSBpZiAoKGJ3XzQwID09IGZhbHNlKSAmJiBzZ2lfMjApCiAJCXRjYl9kZXNjLT51c2Vfc2hvcnRnaSA9IHRydWU7CiAKIAlpZiAoIShyYXRlX2ZsYWcgJiBJRUVFODAyMTFfVFhfUkNfU0hPUlRfR0kpKQogCQl0Y2JfZGVzYy0+dXNlX3Nob3J0Z2kgPSBmYWxzZTsKLQogfQogCiBzdGF0aWMgdm9pZCBfcnRsX3F1ZXJ5X3Byb3RlY3Rpb25fbW9kZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKQEAgLTQwOCwxOSArNTU3LDI1IEBACiAJCXRjYl9kZXNjLT5ydHNfZW5hYmxlID0gdHJ1ZTsKIAkJdGNiX2Rlc2MtPnJ0c19yYXRlID0gcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9SQ19PRkRNX1JBVEUyNE1dOwogCX0KLQogfQogCiBzdGF0aWMgdm9pZCBfcnRsX3R4cmF0ZV9zZWxlY3Rtb2RlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCQkJICAgc3RydWN0IHJ0bF90Y2JfZGVzYyAqdGNiX2Rlc2MpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9zdGFfaW5mbyAqc3RhX2VudHJ5ID0gTlVMTDsKKwl1OCByYXRyX2luZGV4ID0gNzsKIAorCWlmIChzdGEpIHsKKwkJc3RhX2VudHJ5ID0gKHN0cnVjdCBydGxfc3RhX2luZm8gKikgc3RhLT5kcnZfcHJpdjsKKwkJcmF0cl9pbmRleCA9IHN0YV9lbnRyeS0+cmF0cl9pbmRleDsKKwl9CiAJaWYgKCF0Y2JfZGVzYy0+ZGlzYWJsZV9yYXRlZmFsbGJhY2sgfHwgIXRjYl9kZXNjLT51c2VfZHJpdmVyX3JhdGUpIHsKLQkJaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CiAJCQl0Y2JfZGVzYy0+cmF0cl9pbmRleCA9IDA7Ci0JCWVsc2UgaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCX0gZWxzZSBpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKIAkJCWlmICh0Y2JfZGVzYy0+bXVsdGljYXN0IHx8IHRjYl9kZXNjLT5icm9hZGNhc3QpIHsKIAkJCQl0Y2JfZGVzYy0+aHdfcmF0ZSA9CiAJCQkJICAgIHJ0bHByaXYtPmNmZy0+bWFwc1tSVExfUkNfQ0NLX1JBVEUyTV07CkBAIC00MjgsMzYgKzU4Myw2MSBAQAogCQkJfSBlbHNlIHsKIAkJCQkvKiBUT0RPICovCiAJCQl9CisJCQl0Y2JfZGVzYy0+cmF0cl9pbmRleCA9IHJhdHJfaW5kZXg7CisJCX0gZWxzZSBpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwkJCXRjYl9kZXNjLT5yYXRyX2luZGV4ID0gcmF0cl9pbmRleDsKIAkJfQogCX0KIAogCWlmIChydGxwcml2LT5kbS51c2VyYW1hc2spIHsKIAkJLyogVE9ETyB3ZSB3aWxsIGRpZmZlcmVudGlhdGUgYWRob2MgYW5kIHN0YXRpb24gZnV0cnVlICAqLwotCQl0Y2JfZGVzYy0+bWFjX2lkID0gMDsKKwkJaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKKwkJCXRjYl9kZXNjLT5tYWNfaWQgPSAwOwogCi0JCWlmICgobWFjLT5tb2RlID09IFdJUkVMRVNTX01PREVfTl8yNEcpIHx8Ci0JCSAgICAobWFjLT5tb2RlID09IFdJUkVMRVNTX01PREVfTl81RykpIHsKLQkJCXRjYl9kZXNjLT5yYXRyX2luZGV4ID0gUkFUUl9JTlhfV0lSRUxFU1NfTkdCOwotCQl9IGVsc2UgaWYgKG1hYy0+bW9kZSAmIFdJUkVMRVNTX01PREVfRykgewotCQkJdGNiX2Rlc2MtPnJhdHJfaW5kZXggPSBSQVRSX0lOWF9XSVJFTEVTU19HQjsKLQkJfSBlbHNlIGlmIChtYWMtPm1vZGUgJiBXSVJFTEVTU19NT0RFX0IpIHsKLQkJCXRjYl9kZXNjLT5yYXRyX2luZGV4ID0gUkFUUl9JTlhfV0lSRUxFU1NfQjsKKwkJCWlmIChtYWMtPm1vZGUgPT0gV0lSRUxFU1NfTU9ERV9OXzI0RykKKwkJCQl0Y2JfZGVzYy0+cmF0cl9pbmRleCA9IFJBVFJfSU5YX1dJUkVMRVNTX05HQjsKKwkJCWVsc2UgaWYgKG1hYy0+bW9kZSA9PSBXSVJFTEVTU19NT0RFX05fNUcpCisJCQkJdGNiX2Rlc2MtPnJhdHJfaW5kZXggPSBSQVRSX0lOWF9XSVJFTEVTU19ORzsKKwkJCWVsc2UgaWYgKG1hYy0+bW9kZSAmIFdJUkVMRVNTX01PREVfRykKKwkJCQl0Y2JfZGVzYy0+cmF0cl9pbmRleCA9IFJBVFJfSU5YX1dJUkVMRVNTX0dCOworCQkJZWxzZSBpZiAobWFjLT5tb2RlICYgV0lSRUxFU1NfTU9ERV9CKQorCQkJCXRjYl9kZXNjLT5yYXRyX2luZGV4ID0gUkFUUl9JTlhfV0lSRUxFU1NfQjsKKwkJCWVsc2UgaWYgKG1hYy0+bW9kZSAmIFdJUkVMRVNTX01PREVfQSkKKwkJCQl0Y2JfZGVzYy0+cmF0cl9pbmRleCA9IFJBVFJfSU5YX1dJUkVMRVNTX0c7CisJCX0gZWxzZSBpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkJCW1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCQlpZiAoTlVMTCAhPSBzdGEpIHsKKwkJCQlpZiAoc3RhLT5haWQgPiAwKQorCQkJCQl0Y2JfZGVzYy0+bWFjX2lkID0gc3RhLT5haWQgKyAxOworCQkJCWVsc2UKKwkJCQkJdGNiX2Rlc2MtPm1hY19pZCA9IDE7CisJCQl9IGVsc2UgeworCQkJCXRjYl9kZXNjLT5tYWNfaWQgPSAwOworCQkJfQogCQl9CiAJfQogCiB9CiAKIHN0YXRpYyB2b2lkIF9ydGxfcXVlcnlfYmFuZHdpZHRoX21vZGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJCQkgICAgICBzdHJ1Y3QgcnRsX3RjYl9kZXNjICp0Y2JfZGVzYykKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKIAogCXRjYl9kZXNjLT5wYWNrZXRfYncgPSBmYWxzZTsKLQotCWlmICghbWFjLT5id180MCB8fCAhbWFjLT5odF9lbmFibGUpCisJaWYgKCFzdGEpCiAJCXJldHVybjsKLQorCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAorCSAgICBtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQlpZiAoIShzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpIHx8CisJCSAgICAhKHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwKSkKKwkJCXJldHVybjsKKwl9IGVsc2UgaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKKwkJaWYgKCFtYWMtPmJ3XzQwIHx8ICEoc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKSkKKwkJCXJldHVybjsKKwl9CiAJaWYgKHRjYl9kZXNjLT5tdWx0aWNhc3QgfHwgdGNiX2Rlc2MtPmJyb2FkY2FzdCkKIAkJcmV0dXJuOwogCkBAIC00ODQsMjIgKzY2NCwyMSBAQAogCiB2b2lkIHJ0bF9nZXRfdGNiX2Rlc2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbywKKwkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJ0bF90Y2JfZGVzYyAqdGNiX2Rlc2MpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfbWFjICpydGxtYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKShza2ItPmRhdGEpOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSBydGxfZ2V0X2hkcihza2IpOwogCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqdHhyYXRlOwogCV9fbGUxNiBmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKIAotCW1lbXNldCh0Y2JfZGVzYywgMCwgc2l6ZW9mKHN0cnVjdCBydGxfdGNiX2Rlc2MpKTsKKwl0eHJhdGUgPSBpZWVlODAyMTFfZ2V0X3R4X3JhdGUoaHcsIGluZm8pOworCXRjYl9kZXNjLT5od19yYXRlID0gdHhyYXRlLT5od192YWx1ZTsKIAogCWlmIChpZWVlODAyMTFfaXNfZGF0YShmYykpIHsKLQkJdHhyYXRlID0gaWVlZTgwMjExX2dldF90eF9yYXRlKGh3LCBpbmZvKTsKLQkJdGNiX2Rlc2MtPmh3X3JhdGUgPSB0eHJhdGUtPmh3X3ZhbHVlOwotCiAJCS8qCi0JCSAqd2Ugc2V0IGRhdGEgcmF0ZSBSVExfUkNfQ0NLX1JBVEUxTQorCQkgKndlIHNldCBkYXRhIHJhdGUgSU5YIDAKIAkJICppbiBydGxfcmMuYyAgIGlmIHNrYiBpcyBzcGVjaWFsIGRhdGEgb3IKIAkJICptZ3Qgd2hpY2ggbmVlZCBsb3cgZGF0YSByYXRlLgogCQkgKi8KQEAgLTUwOCwxMiArNjg3LDExIEBACiAJCSAqU28gdGNiX2Rlc2MtPmh3X3JhdGUgaXMganVzdCB1c2VkIGZvcgogCQkgKnNwZWNpYWwgZGF0YSBhbmQgbWd0IGZyYW1lcwogCQkgKi8KLQkJaWYgKHRjYl9kZXNjLT5od19yYXRlIDwgcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9SQ19DQ0tfUkFURTExTV0pIHsKKwkJaWYgKGluZm8tPmNvbnRyb2wucmF0ZXNbMF0uaWR4ID09IDAgJiYKKwkJCQlpZWVlODAyMTFfaXNfbnVsbGZ1bmMoZmMpKSB7CiAJCQl0Y2JfZGVzYy0+dXNlX2RyaXZlcl9yYXRlID0gdHJ1ZTsKLQkJCXRjYl9kZXNjLT5yYXRyX2luZGV4ID0gNzsKKwkJCXRjYl9kZXNjLT5yYXRyX2luZGV4ID0gUkFUUl9JTlhfV0lSRUxFU1NfTUM7CiAKLQkJCXRjYl9kZXNjLT5od19yYXRlID0KLQkJCSAgICBydGxwcml2LT5jZmctPm1hcHNbUlRMX1JDX0NDS19SQVRFMU1dOwogCQkJdGNiX2Rlc2MtPmRpc2FibGVfcmF0ZWZhbGxiYWNrID0gMTsKIAkJfSBlbHNlIHsKIAkJCS8qCkBAIC01MjMsNyArNzAxLDcgQEAKIAkJCSAqYW5kIE4gcmF0ZSB3aWxsIGFsbCBiZSBjb250cm9sbGVkIGJ5IEZXCiAJCQkgKndoZW4gdGNiX2Rlc2MtPnVzZV9kcml2ZXJfcmF0ZSA9IGZhbHNlCiAJCQkgKi8KLQkJCWlmIChydGxtYWMtPmh0X2VuYWJsZSkgeworCQkJaWYgKHN0YSAmJiAoc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKSkgewogCQkJCXRjYl9kZXNjLT5od19yYXRlID0gX3J0bF9nZXRfaGlnaGVzdF9uX3JhdGUoaHcpOwogCQkJfSBlbHNlIHsKIAkJCQlpZiAocnRsbWFjLT5tb2RlID09IFdJUkVMRVNTX01PREVfQikgewpAQCAtNTQxLDQzICs3MTksMjUgQEAKIAkJZWxzZSBpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoaWVlZTgwMjExX2dldF9EQShoZHIpKSkKIAkJCXRjYl9kZXNjLT5icm9hZGNhc3QgPSAxOwogCi0JCV9ydGxfdHhyYXRlX3NlbGVjdG1vZGUoaHcsIHRjYl9kZXNjKTsKLQkJX3J0bF9xdWVyeV9iYW5kd2lkdGhfbW9kZShodywgdGNiX2Rlc2MpOworCQlfcnRsX3R4cmF0ZV9zZWxlY3Rtb2RlKGh3LCBzdGEsIHRjYl9kZXNjKTsKKwkJX3J0bF9xdWVyeV9iYW5kd2lkdGhfbW9kZShodywgc3RhLCB0Y2JfZGVzYyk7CiAJCV9ydGxfcXVyZXlfc2hvcnRwcmVhbWJsZV9tb2RlKGh3LCB0Y2JfZGVzYywgaW5mbyk7Ci0JCV9ydGxfcXVlcnlfc2hvcnRnaShodywgdGNiX2Rlc2MsIGluZm8pOworCQlfcnRsX3F1ZXJ5X3Nob3J0Z2koaHcsIHN0YSwgdGNiX2Rlc2MsIGluZm8pOwogCQlfcnRsX3F1ZXJ5X3Byb3RlY3Rpb25fbW9kZShodywgdGNiX2Rlc2MsIGluZm8pOwogCX0gZWxzZSB7CiAJCXRjYl9kZXNjLT51c2VfZHJpdmVyX3JhdGUgPSB0cnVlOwotCQl0Y2JfZGVzYy0+cmF0cl9pbmRleCA9IDc7CisJCXRjYl9kZXNjLT5yYXRyX2luZGV4ID0gUkFUUl9JTlhfV0lSRUxFU1NfTUM7CiAJCXRjYl9kZXNjLT5kaXNhYmxlX3JhdGVmYWxsYmFjayA9IDE7CiAJCXRjYl9kZXNjLT5tYWNfaWQgPSAwOwotCi0JCXRjYl9kZXNjLT5od19yYXRlID0gcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9SQ19DQ0tfUkFURTFNXTsKKwkJdGNiX2Rlc2MtPnBhY2tldF9idyA9IGZhbHNlOwogCX0KIH0KIEVYUE9SVF9TWU1CT0wocnRsX2dldF90Y2JfZGVzYyk7CiAKLWJvb2wgcnRsX3R4X21nbXRfcHJvYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOwotCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopKHNrYi0+ZGF0YSk7Ci0JX19sZTE2IGZjID0gaGRyLT5mcmFtZV9jb250cm9sOwotCi0JaWYgKGllZWU4MDIxMV9pc19hdXRoKGZjKSkgewotCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFTkQsIERCR19ETUVTRywgKCJNQUM4MDIxMV9MSU5LSU5HXG4iKSk7Ci0JCXJ0bF9pcHNfbmljX29uKGh3KTsKLQotCQltYWMtPmxpbmtfc3RhdGUgPSBNQUM4MDIxMV9MSU5LSU5HOwotCX0KLQotCXJldHVybiB0cnVlOwotfQotCiBib29sIHJ0bF9hY3Rpb25fcHJvYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaXNfdHgpCiB7CiAJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopKHNrYi0+ZGF0YSk7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IHJ0bF9nZXRfaGRyKHNrYik7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCV9fbGUxNiBmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKIAl1OCAqYWN0ID0gKHU4ICopICgoKHU4ICopIHNrYi0+ZGF0YSArIE1BQzgwMjExXzNBRERSX0xFTikpOwpAQCAtNjIyLDIyICs3ODIsMjAgQEAKIHU4IHJ0bF9pc19zcGVjaWFsX2RhdGEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IsIHU4IGlzX3R4KQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopKHNrYi0+ZGF0YSk7CiAJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7Ci0JX19sZTE2IGZjID0gaGRyLT5mcmFtZV9jb250cm9sOworCV9fbGUxNiBmYyA9IHJ0bF9nZXRfZmMoc2tiKTsKIAl1MTYgZXRoZXJfdHlwZTsKIAl1OCBtYWNfaGRyX2xlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuX2Zyb21fc2tiKHNrYik7CiAJY29uc3Qgc3RydWN0IGlwaGRyICppcDsKIAogCWlmICghaWVlZTgwMjExX2lzX2RhdGEoZmMpKQotCQlnb3RvIGVuZDsKKwkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKGllZWU4MDIxMV9pc19udWxsZnVuYyhmYykpCi0JCXJldHVybiB0cnVlOwogCiAJaXAgPSAoc3RydWN0IGlwaGRyICopKCh1OCAqKSBza2ItPmRhdGEgKyBtYWNfaGRyX2xlbiArCiAJCQkgICAgICBTTkFQX1NJWkUgKyBQUk9UT0NfVFlQRV9TSVpFKTsKIAlldGhlcl90eXBlID0gKih1MTYgKikgKCh1OCAqKSBza2ItPmRhdGEgKyBtYWNfaGRyX2xlbiArIFNOQVBfU0laRSk7CisJLyoJZXRoZXJfdHlwZSA9IG50b2hzKGV0aGVyX3R5cGUpOyAqLwogCiAJaWYgKEVUSF9QX0lQID09IGV0aGVyX3R5cGUpIHsKIAkJaWYgKElQUFJPVE9fVURQID09IGlwLT5wcm90b2NvbCkgewpAQCAtNjg2LDcgKzg0NCw2IEBACiAJCXJldHVybiB0cnVlOwogCX0KIAotZW5kOgogCXJldHVybiBmYWxzZTsKIH0KIApAQCAtNjk1LDYxICs4NTIsOTIgQEAKICAqIGZ1bmN0aW9ucyBjYWxsZWQgYnkgY29yZS5jCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludCBydGxfdHhfYWdnX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBjb25zdCB1OCAqcmEsIHUxNiB0aWQsIHUxNiAqc3NuKQoraW50IHJ0bF90eF9hZ2dfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQsIHUxNiAqc3NuKQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAlzdHJ1Y3QgcnRsX3RpZF9kYXRhICp0aWRfZGF0YTsKIAlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfc3RhX2luZm8gKnN0YV9lbnRyeSA9IE5VTEw7CiAKLQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFTkQsIERCR19ETUVTRywKLQkJICgib24gcmEgPSAlcE0gdGlkID0gJWRcbiIsIHJhLCB0aWQpKTsKKwlpZiAoc3RhID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHVubGlrZWx5KHRpZCA+PSBNQVhfVElEX0NPVU5UKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAobWFjLT50aWRzW3RpZF0uYWdnLmFnZ19zdGF0ZSAhPSBSVExfQUdHX09GRikgewotCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX1dBUk5JTkcsCi0JCQkgKCJTdGFydCBBR0cgd2hlbiBzdGF0ZSBpcyBub3QgUlRMX0FHR19PRkYgIVxuIikpOworCXN0YV9lbnRyeSA9IChzdHJ1Y3QgcnRsX3N0YV9pbmZvICopc3RhLT5kcnZfcHJpdjsKKwlpZiAoIXN0YV9lbnRyeSkKIAkJcmV0dXJuIC1FTlhJTzsKLQl9Ci0KLQl0aWRfZGF0YSA9ICZtYWMtPnRpZHNbdGlkXTsKLQkqc3NuID0gU0VRX1RPX1NOKHRpZF9kYXRhLT5zZXFfbnVtYmVyKTsKKwl0aWRfZGF0YSA9ICZzdGFfZW50cnktPnRpZHNbdGlkXTsKIAogCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VORCwgREJHX0RNRVNHLAotCQkgKCJIVyBxdWV1ZSBpcyBlbXB0eSB0aWQ6JWRcbiIsIHRpZCkpOwotCXRpZF9kYXRhLT5hZ2cuYWdnX3N0YXRlID0gUlRMX0FHR19PTjsKKwkJICgib24gcmEgPSAlcE0gdGlkID0gJWQgc2VxOiVkXG4iLCBzdGEtPmFkZHIsIHRpZCwKKwkJIHRpZF9kYXRhLT5zZXFfbnVtYmVyKSk7CiAKLQlpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2JfaXJxc2FmZShtYWMtPnZpZiwgcmEsIHRpZCk7CisJKnNzbiA9IHRpZF9kYXRhLT5zZXFfbnVtYmVyOworCXRpZF9kYXRhLT5hZ2cuYWdnX3N0YXRlID0gUlRMX0FHR19TVEFSVDsKKworCWllZWU4MDIxMV9zdGFydF90eF9iYV9jYl9pcnFzYWZlKG1hYy0+dmlmLCBzdGEtPmFkZHIsIHRpZCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHJ0bF90eF9hZ2dfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgY29uc3QgdTggKiByYSwgdTE2IHRpZCkKK2ludCBydGxfdHhfYWdnX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQpCiB7Ci0JaW50IHNzbiA9IC0xOwogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOwogCXN0cnVjdCBydGxfdGlkX2RhdGEgKnRpZF9kYXRhOworCXN0cnVjdCBydGxfc3RhX2luZm8gKnN0YV9lbnRyeSA9IE5VTEw7CiAKLQlpZiAoIXJhKSB7CisJaWYgKHN0YSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghc3RhLT5hZGRyKSB7CiAJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsICgicmEgPSBOVUxMXG4iKSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VORCwgREJHX0RNRVNHLAorCQkgKCJvbiByYSA9ICVwTSB0aWQgPSAlZFxuIiwgc3RhLT5hZGRyLCB0aWQpKTsKKwogCWlmICh1bmxpa2VseSh0aWQgPj0gTUFYX1RJRF9DT1VOVCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKG1hYy0+dGlkc1t0aWRdLmFnZy5hZ2dfc3RhdGUgIT0gUlRMX0FHR19PTikKLQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19XQVJOSU5HLAotCQkJICgiU3RvcHBpbmcgQUdHIHdoaWxlIHN0YXRlIG5vdCBPTiBvciBzdGFydGluZ1xuIikpOworCXN0YV9lbnRyeSA9IChzdHJ1Y3QgcnRsX3N0YV9pbmZvICopc3RhLT5kcnZfcHJpdjsKKwl0aWRfZGF0YSA9ICZzdGFfZW50cnktPnRpZHNbdGlkXTsKKwlzdGFfZW50cnktPnRpZHNbdGlkXS5hZ2cuYWdnX3N0YXRlID0gUlRMX0FHR19TVE9QOwogCi0JdGlkX2RhdGEgPSAmbWFjLT50aWRzW3RpZF07Ci0Jc3NuID0gKHRpZF9kYXRhLT5zZXFfbnVtYmVyICYgSUVFRTgwMjExX1NDVExfU0VRKSA+PiA0OworCWllZWU4MDIxMV9zdG9wX3R4X2JhX2NiX2lycXNhZmUobWFjLT52aWYsIHN0YS0+YWRkciwgdGlkKTsKIAotCW1hYy0+dGlkc1t0aWRdLmFnZy5hZ2dfc3RhdGUgPSBSVExfQUdHX09GRjsKKwlyZXR1cm4gMDsKK30KIAotCWllZWU4MDIxMV9zdG9wX3R4X2JhX2NiX2lycXNhZmUobWFjLT52aWYsIHJhLCB0aWQpOworaW50IHJ0bF90eF9hZ2dfb3BlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF90aWRfZGF0YSAqdGlkX2RhdGE7CisJc3RydWN0IHJ0bF9zdGFfaW5mbyAqc3RhX2VudHJ5ID0gTlVMTDsKKworCWlmIChzdGEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXN0YS0+YWRkcikgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLCAoInJhID0gTlVMTFxuIikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFTkQsIERCR19ETUVTRywKKwkJICgib24gcmEgPSAlcE0gdGlkID0gJWRcbiIsIHN0YS0+YWRkciwgdGlkKSk7CisKKwlpZiAodW5saWtlbHkodGlkID49IE1BWF9USURfQ09VTlQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0YV9lbnRyeSA9IChzdHJ1Y3QgcnRsX3N0YV9pbmZvICopc3RhLT5kcnZfcHJpdjsKKwl0aWRfZGF0YSA9ICZzdGFfZW50cnktPnRpZHNbdGlkXTsKKwlzdGFfZW50cnktPnRpZHNbdGlkXS5hZ2cuYWdnX3N0YXRlID0gUlRMX0FHR19PUEVSQVRJT05BTDsKIAogCXJldHVybiAwOwogfQpAQCAtNzY4LDE4ICs5NTYsMTYgQEAKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKIAlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOwotCiAJYm9vbCBidXN5dHJhZmZpYyA9IGZhbHNlOwogCWJvb2wgaGlnaGVyX2J1c3l0cmFmZmljID0gZmFsc2U7CiAJYm9vbCBoaWdoZXJfYnVzeXJ4dHJhZmZpYyA9IGZhbHNlOwotCWJvb2wgaGlnaGVyX2J1c3l0eHRyYWZmaWMgPSBmYWxzZTsKLQotCXU4IGlkeCA9IDA7CisJdTggaWR4LCB0aWQ7CiAJdTMyIHJ4X2NudF9pbnA0ZXJpb2QgPSAwOwogCXUzMiB0eF9jbnRfaW5wNGVyaW9kID0gMDsKIAl1MzIgYXZlcl9yeF9jbnRfaW5wZXJpb2QgPSAwOwogCXUzMiBhdmVyX3R4X2NudF9pbnBlcmlvZCA9IDA7Ci0KKwl1MzIgYXZlcl90aWR0eF9pbnBlcmlvZFtNQVhfVElEX0NPVU5UXSA9IHswfTsKKwl1MzIgdGlkdHhfaW5wNGVyaW9kW01BWF9USURfQ09VTlRdID0gezB9OwogCWJvb2wgZW50ZXJfcHMgPSBmYWxzZTsKIAogCWlmIChpc19oYWxfc3RvcChydGxoYWwpKQpAQCAtNzkzLDkgKzk3OSw2IEBACiAJCW1hYy0+Y250X2FmdGVyX2xpbmtlZCA9IDA7CiAJfQogCi0JLyogPDI+IERNICovCi0JcnRscHJpdi0+Y2ZnLT5vcHMtPmRtX3dhdGNoZG9nKGh3KTsKLQogCS8qCiAJICo8Mz4gdG8gY2hlY2sgaWYgdHJhZmZpYyBidXN5LCBpZgogCSAqIGJ1c3l0cmFmZmljIHdlIGRvbid0IGNoYW5nZSBjaGFubmVsCkBAIC04MzQsOCArMTAxNywyNyBAQAogCQkJLyogRXh0cmVtZWx5IGhpZ2ggUnggZGF0YS4gKi8KIAkJCWlmIChhdmVyX3J4X2NudF9pbnBlcmlvZCA+IDUwMDApCiAJCQkJaGlnaGVyX2J1c3lyeHRyYWZmaWMgPSB0cnVlOworCQl9CisKKwkJLyogY2hlY2sgZXZlcnkgdGlkJ3MgdHggdHJhZmZpYyAqLworCQlmb3IgKHRpZCA9IDA7IHRpZCA8PSA3OyB0aWQrKykgeworCQkJZm9yIChpZHggPSAwOyBpZHggPD0gMjsgaWR4KyspCisJCQkJcnRscHJpdi0+bGlua19pbmZvLnRpZHR4X2luNHBlcmlvZFt0aWRdW2lkeF0gPQorCQkJCSAgcnRscHJpdi0+bGlua19pbmZvLnRpZHR4X2luNHBlcmlvZFt0aWRdCisJCQkJICBbaWR4ICsgMV07CisJCQlydGxwcml2LT5saW5rX2luZm8udGlkdHhfaW40cGVyaW9kW3RpZF1bM10gPQorCQkJCXJ0bHByaXYtPmxpbmtfaW5mby50aWR0eF9pbnBlcmlvZFt0aWRdOworCisJCQlmb3IgKGlkeCA9IDA7IGlkeCA8PSAzOyBpZHgrKykKKwkJCQl0aWR0eF9pbnA0ZXJpb2RbdGlkXSArPQorCQkJCSAgcnRscHJpdi0+bGlua19pbmZvLnRpZHR4X2luNHBlcmlvZFt0aWRdW2lkeF07CisJCQlhdmVyX3RpZHR4X2lucGVyaW9kW3RpZF0gPSB0aWR0eF9pbnA0ZXJpb2RbdGlkXSAvIDQ7CisJCQlpZiAoYXZlcl90aWR0eF9pbnBlcmlvZFt0aWRdID4gNTAwMCkKKwkJCQlydGxwcml2LT5saW5rX2luZm8uaGlnaGVyX2J1c3l0eHRyYWZmaWNbdGlkXSA9CisJCQkJCQkgICB0cnVlOwogCQkJZWxzZQotCQkJCWhpZ2hlcl9idXN5dHh0cmFmZmljID0gZmFsc2U7CisJCQkJcnRscHJpdi0+bGlua19pbmZvLmhpZ2hlcl9idXN5dHh0cmFmZmljW3RpZF0gPQorCQkJCQkJICAgZmFsc2U7CiAJCX0KIAogCQlpZiAoKChydGxwcml2LT5saW5rX2luZm8ubnVtX3J4X2lucGVyaW9kICsKQEAgLTg1NCwxMSArMTA1NiwxNSBAQAogCiAJcnRscHJpdi0+bGlua19pbmZvLm51bV9yeF9pbnBlcmlvZCA9IDA7CiAJcnRscHJpdi0+bGlua19pbmZvLm51bV90eF9pbnBlcmlvZCA9IDA7CisJZm9yICh0aWQgPSAwOyB0aWQgPD0gNzsgdGlkKyspCisJCXJ0bHByaXYtPmxpbmtfaW5mby50aWR0eF9pbnBlcmlvZFt0aWRdID0gMDsKIAogCXJ0bHByaXYtPmxpbmtfaW5mby5idXN5dHJhZmZpYyA9IGJ1c3l0cmFmZmljOwogCXJ0bHByaXYtPmxpbmtfaW5mby5oaWdoZXJfYnVzeXRyYWZmaWMgPSBoaWdoZXJfYnVzeXRyYWZmaWM7CiAJcnRscHJpdi0+bGlua19pbmZvLmhpZ2hlcl9idXN5cnh0cmFmZmljID0gaGlnaGVyX2J1c3lyeHRyYWZmaWM7CiAKKwkvKiA8Mz4gRE0gKi8KKwlydGxwcml2LT5jZmctPm9wcy0+ZG1fd2F0Y2hkb2coaHcpOwogfQogCiB2b2lkIHJ0bF93YXRjaF9kb2dfdGltZXJfY2FsbGJhY2sodW5zaWduZWQgbG9uZyBkYXRhKQpAQCAtODc1LDYgKzEwODEsMjY4IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCisgKiBmcmFtZSBwcm9jZXNzIGZ1bmN0aW9ucworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1OCAqcnRsX2ZpbmRfaWUodTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4sIHU4IGllKQoreworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9ICh2b2lkICopZGF0YTsKKwl1OCAqcG9zLCAqZW5kOworCisJcG9zID0gKHU4ICopbWdtdC0+dS5iZWFjb24udmFyaWFibGU7CisJZW5kID0gZGF0YSArIGxlbjsKKwl3aGlsZSAocG9zIDwgZW5kKSB7CisJCWlmIChwb3MgKyAyICsgcG9zWzFdID4gZW5kKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJaWYgKHBvc1swXSA9PSBpZSkKKwkJCXJldHVybiBwb3M7CisKKwkJcG9zICs9IDIgKyBwb3NbMV07CisJfQorCXJldHVybiBOVUxMOworfQorCisvKiB3aGVuIHdlIHVzZSAyIHJ4IGFudHMgd2Ugc2VuZCBJRUVFODAyMTFfU01QU19PRkYgKi8KKy8qIHdoZW4gd2UgdXNlIDEgcnggYW50IHdlIHNlbmQgSUVFRTgwMjExX1NNUFNfU1RBVElDICovCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnJ0bF9tYWtlX3NtcHNfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQllbnVtIGllZWU4MDIxMV9zbXBzX21vZGUgc21wcywgdTggKmRhLCB1OCAqYnNzaWQpCit7CisJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqYWN0aW9uX2ZyYW1lOworCisJLyogMjcgPSBoZWFkZXIgKyBjYXRlZ29yeSArIGFjdGlvbiArIHNtcHMgbW9kZSAqLworCXNrYiA9IGRldl9hbGxvY19za2IoMjcgKyBody0+ZXh0cmFfdHhfaGVhZHJvb20pOworCWlmICghc2tiKQorCQlyZXR1cm4gTlVMTDsKKworCXNrYl9yZXNlcnZlKHNrYiwgaHctPmV4dHJhX3R4X2hlYWRyb29tKTsKKwlhY3Rpb25fZnJhbWUgPSAodm9pZCAqKXNrYl9wdXQoc2tiLCAyNyk7CisJbWVtc2V0KGFjdGlvbl9mcmFtZSwgMCwgMjcpOworCW1lbWNweShhY3Rpb25fZnJhbWUtPmRhLCBkYSwgRVRIX0FMRU4pOworCW1lbWNweShhY3Rpb25fZnJhbWUtPnNhLCBydGxlZnVzZS0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkoYWN0aW9uX2ZyYW1lLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKKwlhY3Rpb25fZnJhbWUtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CisJCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BQ1RJT04pOworCWFjdGlvbl9mcmFtZS0+dS5hY3Rpb24uY2F0ZWdvcnkgPSBXTEFOX0NBVEVHT1JZX0hUOworCWFjdGlvbl9mcmFtZS0+dS5hY3Rpb24udS5odF9zbXBzLmFjdGlvbiA9IFdMQU5fSFRfQUNUSU9OX1NNUFM7CisJc3dpdGNoIChzbXBzKSB7CisJY2FzZSBJRUVFODAyMTFfU01QU19BVVRPTUFUSUM6LyogMCAqLworCWNhc2UgSUVFRTgwMjExX1NNUFNfTlVNX01PREVTOi8qIDQgKi8KKwkJV0FSTl9PTigxKTsKKwljYXNlIElFRUU4MDIxMV9TTVBTX09GRjovKiAxICovIC8qTUlNT19QU19OT0xJTUlUKi8KKwkJYWN0aW9uX2ZyYW1lLT51LmFjdGlvbi51Lmh0X3NtcHMuc21wc19jb250cm9sID0KKwkJCQlXTEFOX0hUX1NNUFNfQ09OVFJPTF9ESVNBQkxFRDsvKiAwICovCisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX1NNUFNfU1RBVElDOi8qIDIgKi8gLypNSU1PX1BTX1NUQVRJQyovCisJCWFjdGlvbl9mcmFtZS0+dS5hY3Rpb24udS5odF9zbXBzLnNtcHNfY29udHJvbCA9CisJCQkJV0xBTl9IVF9TTVBTX0NPTlRST0xfU1RBVElDOy8qIDEgKi8KKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfU01QU19EWU5BTUlDOi8qIDMgKi8gLypNSU1PX1BTX0RZTkFNSUMqLworCQlhY3Rpb25fZnJhbWUtPnUuYWN0aW9uLnUuaHRfc21wcy5zbXBzX2NvbnRyb2wgPQorCQkJCVdMQU5fSFRfU01QU19DT05UUk9MX0RZTkFNSUM7LyogMyAqLworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gc2tiOworfQorCitpbnQgcnRsX3NlbmRfc21wc19hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHU4ICpkYSwgdTggKmJzc2lkLAorCQllbnVtIGllZWU4MDIxMV9zbXBzX21vZGUgc21wcykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcnRsX21ha2Vfc21wc19hY3Rpb24oaHcsIHNtcHMsIGRhLCBic3NpZCk7CisJc3RydWN0IHJ0bF90Y2JfZGVzYyB0Y2JfZGVzYzsKKwltZW1zZXQoJnRjYl9kZXNjLCAwLCBzaXplb2Yoc3RydWN0IHJ0bF90Y2JfZGVzYykpOworCisJaWYgKHJ0bHByaXYtPm1hYzgwMjExLmFjdF9zY2FubmluZykKKwkJZ290byBlcnJfZnJlZTsKKworCWlmICghc3RhKQorCQlnb3RvIGVycl9mcmVlOworCisJaWYgKHVubGlrZWx5KGlzX2hhbF9zdG9wKHJ0bGhhbCkgfHwgcHBzYy0+cmZwd3Jfc3RhdGUgIT0gRVJGT04pKQorCQlnb3RvIGVycl9mcmVlOworCisJaWYgKCF0ZXN0X2JpdChSVExfU1RBVFVTX0lOVEVSRkFDRV9TVEFSVCwgJnJ0bHByaXYtPnN0YXR1cykpCisJCWdvdG8gZXJyX2ZyZWU7CisKKwkvKiB0aGlzIGlzIGEgdHlwZSA9IG1nbXQgKiBzdHlwZSA9IGFjdGlvbiBmcmFtZSAqLworCWlmIChza2IpIHsKKwkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCQlzdHJ1Y3QgcnRsX3N0YV9pbmZvICpzdGFfZW50cnkgPQorCQkJKHN0cnVjdCBydGxfc3RhX2luZm8gKikgc3RhLT5kcnZfcHJpdjsKKwkJc3RhX2VudHJ5LT5taW1vX3BzID0gc21wczsKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnVwZGF0ZV9yYXRlX3RibChodywgc3RhLCAwKTsKKworCQlpbmZvLT5jb250cm9sLnJhdGVzWzBdLmlkeCA9IDA7CisJCWluZm8tPmNvbnRyb2wuc3RhID0gc3RhOworCQlpbmZvLT5iYW5kID0gaHctPmNvbmYuY2hhbm5lbC0+YmFuZDsKKwkJcnRscHJpdi0+aW50Zl9vcHMtPmFkYXB0ZXJfdHgoaHcsIHNrYiwgJnRjYl9kZXNjKTsKKwl9CitlcnJfZnJlZToKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIElPVCBmdW5jdGlvbnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGJvb2wgcnRsX2Noa192ZW5kb3Jfb3Vpc3ViKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQlzdHJ1Y3Qgb2N0ZXRfc3RyaW5nIHZlbmRvcl9pZSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJYm9vbCBtYXRjaGVkID0gZmFsc2U7CisJc3RhdGljIHU4IGF0aGNhcF8xW10gPSB7IDB4MDAsIDB4MDMsIDB4N0YgfTsKKwlzdGF0aWMgdTggYXRoY2FwXzJbXSA9IHsgMHgwMCwgMHgxMywgMHg3NCB9OworCXN0YXRpYyB1OCBicm9hZGNhcF8xW10gPSB7IDB4MDAsIDB4MTAsIDB4MTggfTsKKwlzdGF0aWMgdTggYnJvYWRjYXBfMltdID0geyAweDAwLCAweDBhLCAweGY3IH07CisJc3RhdGljIHU4IGJyb2FkY2FwXzNbXSA9IHsgMHgwMCwgMHgwNSwgMHhiNSB9OworCXN0YXRpYyB1OCByYWNhcFtdID0geyAweDAwLCAweDBjLCAweDQzIH07CisJc3RhdGljIHU4IGNpc2NvY2FwW10gPSB7IDB4MDAsIDB4NDAsIDB4OTYgfTsKKwlzdGF0aWMgdTggbWFydmNhcFtdID0geyAweDAwLCAweDUwLCAweDQzIH07CisKKwlpZiAobWVtY21wKHZlbmRvcl9pZS5vY3RldCwgYXRoY2FwXzEsIDMpID09IDAgfHwKKwkJbWVtY21wKHZlbmRvcl9pZS5vY3RldCwgYXRoY2FwXzIsIDMpID09IDApIHsKKwkJcnRscHJpdi0+bWFjODAyMTEudmVuZG9yID0gUEVFUl9BVEg7CisJCW1hdGNoZWQgPSB0cnVlOworCX0gZWxzZSBpZiAobWVtY21wKHZlbmRvcl9pZS5vY3RldCwgYnJvYWRjYXBfMSwgMykgPT0gMCB8fAorCQltZW1jbXAodmVuZG9yX2llLm9jdGV0LCBicm9hZGNhcF8yLCAzKSA9PSAwIHx8CisJCW1lbWNtcCh2ZW5kb3JfaWUub2N0ZXQsIGJyb2FkY2FwXzMsIDMpID09IDApIHsKKwkJcnRscHJpdi0+bWFjODAyMTEudmVuZG9yID0gUEVFUl9CUk9BRDsKKwkJbWF0Y2hlZCA9IHRydWU7CisJfSBlbHNlIGlmIChtZW1jbXAodmVuZG9yX2llLm9jdGV0LCByYWNhcCwgMykgPT0gMCkgeworCQlydGxwcml2LT5tYWM4MDIxMS52ZW5kb3IgPSBQRUVSX1JBTDsKKwkJbWF0Y2hlZCA9IHRydWU7CisJfSBlbHNlIGlmIChtZW1jbXAodmVuZG9yX2llLm9jdGV0LCBjaXNjb2NhcCwgMykgPT0gMCkgeworCQlydGxwcml2LT5tYWM4MDIxMS52ZW5kb3IgPSBQRUVSX0NJU0NPOworCQltYXRjaGVkID0gdHJ1ZTsKKwl9IGVsc2UgaWYgKG1lbWNtcCh2ZW5kb3JfaWUub2N0ZXQsIG1hcnZjYXAsIDMpID09IDApIHsKKwkJcnRscHJpdi0+bWFjODAyMTEudmVuZG9yID0gUEVFUl9NQVJWOworCQltYXRjaGVkID0gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gbWF0Y2hlZDsKK30KKworc3RhdGljIGJvb2wgcnRsX2ZpbmRfMjIxX2llKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqZGF0YSwKKwkJdW5zaWduZWQgaW50IGxlbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQgPSAodm9pZCAqKWRhdGE7CisJc3RydWN0IG9jdGV0X3N0cmluZyB2ZW5kb3JfaWU7CisJdTggKnBvcywgKmVuZDsKKworCXBvcyA9ICh1OCAqKW1nbXQtPnUuYmVhY29uLnZhcmlhYmxlOworCWVuZCA9IGRhdGEgKyBsZW47CisJd2hpbGUgKHBvcyA8IGVuZCkgeworCQlpZiAocG9zWzBdID09IDIyMSkgeworCQkJdmVuZG9yX2llLmxlbmd0aCA9IHBvc1sxXTsKKwkJCXZlbmRvcl9pZS5vY3RldCA9ICZwb3NbMl07CisJCQlpZiAocnRsX2Noa192ZW5kb3Jfb3Vpc3ViKGh3LCB2ZW5kb3JfaWUpKQorCQkJCXJldHVybiB0cnVlOworCQl9CisKKwkJaWYgKHBvcyArIDIgKyBwb3NbMV0gPiBlbmQpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJcG9zICs9IDIgKyBwb3NbMV07CisJfQorCXJldHVybiBmYWxzZTsKK30KKwordm9pZCBydGxfcmVjb2duaXplX3BlZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKWRhdGE7CisJdTMyIHZlbmRvciA9IFBFRVJfVU5LTk9XTjsKKworCXN0YXRpYyB1OCBhcDNfMVszXSA9IHsgMHgwMCwgMHgxNCwgMHhiZiB9OworCXN0YXRpYyB1OCBhcDNfMlszXSA9IHsgMHgwMCwgMHgxYSwgMHg3MCB9OworCXN0YXRpYyB1OCBhcDNfM1szXSA9IHsgMHgwMCwgMHgxZCwgMHg3ZSB9OworCXN0YXRpYyB1OCBhcDRfMVszXSA9IHsgMHgwMCwgMHg5MCwgMHhjYyB9OworCXN0YXRpYyB1OCBhcDRfMlszXSA9IHsgMHgwMCwgMHgwZSwgMHgyZSB9OworCXN0YXRpYyB1OCBhcDRfM1szXSA9IHsgMHgwMCwgMHgxOCwgMHgwMiB9OworCXN0YXRpYyB1OCBhcDRfNFszXSA9IHsgMHgwMCwgMHgxNywgMHgzZiB9OworCXN0YXRpYyB1OCBhcDRfNVszXSA9IHsgMHgwMCwgMHgxYywgMHhkZiB9OworCXN0YXRpYyB1OCBhcDVfMVszXSA9IHsgMHgwMCwgMHgxYywgMHhmMCB9OworCXN0YXRpYyB1OCBhcDVfMlszXSA9IHsgMHgwMCwgMHgyMSwgMHg5MSB9OworCXN0YXRpYyB1OCBhcDVfM1szXSA9IHsgMHgwMCwgMHgyNCwgMHgwMSB9OworCXN0YXRpYyB1OCBhcDVfNFszXSA9IHsgMHgwMCwgMHgxNSwgMHhlOSB9OworCXN0YXRpYyB1OCBhcDVfNVszXSA9IHsgMHgwMCwgMHgxNywgMHg5QSB9OworCXN0YXRpYyB1OCBhcDVfNlszXSA9IHsgMHgwMCwgMHgxOCwgMHhFNyB9OworCXN0YXRpYyB1OCBhcDZfMVszXSA9IHsgMHgwMCwgMHgxNywgMHg5NCB9OworCXN0YXRpYyB1OCBhcDdfMVszXSA9IHsgMHgwMCwgMHgxNCwgMHhhNCB9OworCisJaWYgKG1hYy0+b3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCXJldHVybjsKKworCWlmIChtYWMtPmxpbmtfc3RhdGUgPT0gTUFDODAyMTFfTk9MSU5LKSB7CisJCW1hYy0+dmVuZG9yID0gUEVFUl9VTktOT1dOOworCQlyZXR1cm47CisJfQorCisJaWYgKG1hYy0+Y250X2FmdGVyX2xpbmtlZCA+IDIpCisJCXJldHVybjsKKworCS8qIGNoZWNrIGlmIHRoaXMgcmVhbGx5IGlzIGEgYmVhY29uICovCisJaWYgKCFpZWVlODAyMTFfaXNfYmVhY29uKGhkci0+ZnJhbWVfY29udHJvbCkpCisJCXJldHVybjsKKworCS8qIG1pbi4gYmVhY29uIGxlbmd0aCArIEZDU19MRU4gKi8KKwlpZiAobGVuIDw9IDQwICsgRkNTX0xFTikKKwkJcmV0dXJuOworCisJLyogYW5kIG9ubHkgYmVhY29ucyBmcm9tIHRoZSBhc3NvY2lhdGVkIEJTU0lELCBwbGVhc2UgKi8KKwlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGhkci0+YWRkcjMsIHJ0bHByaXYtPm1hYzgwMjExLmJzc2lkKSkKKwkJcmV0dXJuOworCisJaWYgKHJ0bF9maW5kXzIyMV9pZShodywgZGF0YSwgbGVuKSkKKwkJdmVuZG9yID0gbWFjLT52ZW5kb3I7CisKKwlpZiAoKG1lbWNtcChtYWMtPmJzc2lkLCBhcDVfMSwgMykgPT0gMCkgfHwKKwkJKG1lbWNtcChtYWMtPmJzc2lkLCBhcDVfMiwgMykgPT0gMCkgfHwKKwkJKG1lbWNtcChtYWMtPmJzc2lkLCBhcDVfMywgMykgPT0gMCkgfHwKKwkJKG1lbWNtcChtYWMtPmJzc2lkLCBhcDVfNCwgMykgPT0gMCkgfHwKKwkJKG1lbWNtcChtYWMtPmJzc2lkLCBhcDVfNSwgMykgPT0gMCkgfHwKKwkJKG1lbWNtcChtYWMtPmJzc2lkLCBhcDVfNiwgMykgPT0gMCkgfHwKKwkJdmVuZG9yID09IFBFRVJfQVRIKSB7CisJCXZlbmRvciA9IFBFRVJfQVRIOworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01BQzgwMjExLCBEQkdfTE9VRCwgKCI9PmF0aCBmaW5kXG4iKSk7CisJfSBlbHNlIGlmICgobWVtY21wKG1hYy0+YnNzaWQsIGFwNF80LCAzKSA9PSAwKSB8fAorCQkobWVtY21wKG1hYy0+YnNzaWQsIGFwNF81LCAzKSA9PSAwKSB8fAorCQkobWVtY21wKG1hYy0+YnNzaWQsIGFwNF8xLCAzKSA9PSAwKSB8fAorCQkobWVtY21wKG1hYy0+YnNzaWQsIGFwNF8yLCAzKSA9PSAwKSB8fAorCQkobWVtY21wKG1hYy0+YnNzaWQsIGFwNF8zLCAzKSA9PSAwKSB8fAorCQl2ZW5kb3IgPT0gUEVFUl9SQUwpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9NQUM4MDIxMSwgREJHX0xPVUQsICgiPT5yYWwgZmluZG5cbiIpKTsKKwkJdmVuZG9yID0gUEVFUl9SQUw7CisJfSBlbHNlIGlmIChtZW1jbXAobWFjLT5ic3NpZCwgYXA2XzEsIDMpID09IDAgfHwKKwkJdmVuZG9yID09IFBFRVJfQ0lTQ08pIHsKKwkJdmVuZG9yID0gUEVFUl9DSVNDTzsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9NQUM4MDIxMSwgREJHX0xPVUQsICgiPT5jaXNjbyBmaW5kXG4iKSk7CisJfSBlbHNlIGlmICgobWVtY21wKG1hYy0+YnNzaWQsIGFwM18xLCAzKSA9PSAwKSB8fAorCQkobWVtY21wKG1hYy0+YnNzaWQsIGFwM18yLCAzKSA9PSAwKSB8fAorCQkobWVtY21wKG1hYy0+YnNzaWQsIGFwM18zLCAzKSA9PSAwKSB8fAorCQl2ZW5kb3IgPT0gUEVFUl9CUk9BRCkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01BQzgwMjExLCBEQkdfTE9VRCwgKCI9PmJyb2FkIGZpbmRcbiIpKTsKKwkJdmVuZG9yID0gUEVFUl9CUk9BRDsKKwl9IGVsc2UgaWYgKG1lbWNtcChtYWMtPmJzc2lkLCBhcDdfMSwgMykgPT0gMCB8fAorCQl2ZW5kb3IgPT0gUEVFUl9NQVJWKSB7CisJCXZlbmRvciA9IFBFRVJfTUFSVjsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9NQUM4MDIxMSwgREJHX0xPVUQsICgiPT5tYXJ2IGZpbmRcbiIpKTsKKwl9CisKKwltYWMtPnZlbmRvciA9IHZlbmRvcjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKICAqIHN5c2ZzIGZ1bmN0aW9ucwogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC05NDAsMTIgKzE0MDgsMTMgQEAKIAlpZiAocnRsX3JhdGVfY29udHJvbF9yZWdpc3RlcigpKQogCQlwcmludGsoS0VSTl9FUlIgInJ0bHdpZmk6IFVuYWJsZSB0byByZWdpc3RlciBydGxfcmMsIgogCQkgICAgICAgInVzZSBkZWZhdWx0IFJDICEhXG4iKTsKKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcnRsX2NvcmVfbW9kdWxlX2V4aXQodm9pZCkKIHsKLQkgLypSQyovCisJLypSQyovCiAJcnRsX3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvYmFzZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9iYXNlLmgKaW5kZXggMDQzMDQ1My4uYTkxZjNlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9iYXNlLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9iYXNlLmgKQEAgLTI0LDEzICsyNCwyNiBAQAogICogSHNpbmNodSAzMDAsIFRhaXdhbi4KICAqCiAgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaWZuZGVmIF9fUlRMX0JBU0VfSF9fCiAjZGVmaW5lIF9fUlRMX0JBU0VfSF9fCiAKK2VudW0gYXBfcGVlciB7CisJUEVFUl9VTktOT1dOID0gMCwKKwlQRUVSX1JUTCA9IDEsCisJUEVFUl9SVExfOTJTRSA9IDIsCisJUEVFUl9CUk9BRCA9IDMsCisJUEVFUl9SQUwgPSA0LAorCVBFRVJfQVRIID0gNSwKKwlQRUVSX0NJU0NPID0gNiwKKwlQRUVSX01BUlYgPSA3LAorCVBFRVJfQUlSR08gPSA5LAorCVBFRVJfTUFYID0gMTAsCit9IDsKKwogI2RlZmluZSBSVExfRFVNTVlfT0ZGU0VUCTAKLSNkZWZpbmUgUlRMX1JYX0RFU0NfU0laRQkyNAogI2RlZmluZSBSVExfRFVNTVlfVU5JVAkJOAogI2RlZmluZSBSVExfVFhfRFVNTVlfU0laRQkoUlRMX0RVTU1ZX09GRlNFVCAqIFJUTF9EVU1NWV9VTklUKQogI2RlZmluZSBSVExfVFhfREVTQ19TSVpFCTMyCkBAIC01Myw2ICs2NiwxNCBAQAogI2RlZmluZSBGUkFNRV9PRkZTRVRfU0VRVUVOQ0UJCTIyCiAjZGVmaW5lIEZSQU1FX09GRlNFVF9BRERSRVNTNAkJMjQKIAorI2RlZmluZSBTRVRfODAyMTFfSERSX0ZSQU1FX0NPTlRST0woX2hkciwgX3ZhbCkJCVwKKwlXUklURUVGMkJZVEUoX2hkciwgX3ZhbCkKKyNkZWZpbmUgU0VUXzgwMjExX0hEUl9UWVBFX0FORF9TVUJUWVBFKF9oZHIsIF92YWwpCVwKKwlXUklURUVGMUJZVEUoX2hkciwgX3ZhbCkKKyNkZWZpbmUgU0VUXzgwMjExX0hEUl9QV1JfTUdOVChfaGRyLCBfdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzJCWVRFKF9oZHIsIDEyLCAxLCBfdmFsKQorI2RlZmluZSBTRVRfODAyMTFfSERSX1RPX0RTKF9oZHIsIF92YWwpCQkJXAorCVNFVF9CSVRTX1RPX0xFXzJCWVRFKF9oZHIsIDgsIDEsIF92YWwpCiAKICNkZWZpbmUgU0VUXzgwMjExX1BTX1BPTExfQUlEKF9oZHIsIF92YWwpCQlcCiAJKCoodTE2ICopKCh1OCAqKShfaGRyKSArIDIpID0gbGUxNl90b19jcHUoX3ZhbCkpCkBAIC02NCwxMSArODUsMjcgQEAKICNkZWZpbmUgU0VUXzgwMjExX0hEUl9EVVJBVElPTihfaGRyLCBfdmFsKQlcCiAJKCoodTE2ICopKCh1OCAqKShfaGRyKSArIEZSQU1FX09GRlNFVF9EVVJBVElPTikgPSBsZTE2X3RvX2NwdShfdmFsKSkKICNkZWZpbmUgU0VUXzgwMjExX0hEUl9BRERSRVNTMShfaGRyLCBfdmFsKQlcCi0JbWVtY3B5KCh1OCAqKShfaGRyKStGUkFNRV9PRkZTRVRfQUREUkVTUzEsICh1OCopKF92YWwpLCBFVEhfQUxFTikKKwlDUF9NQUNBRERSKCh1OCAqKShfaGRyKStGUkFNRV9PRkZTRVRfQUREUkVTUzEsICh1OCAqKShfdmFsKSkKICNkZWZpbmUgU0VUXzgwMjExX0hEUl9BRERSRVNTMihfaGRyLCBfdmFsKQlcCi0JbWVtY3B5KCh1OCAqKShfaGRyKSArIEZSQU1FX09GRlNFVF9BRERSRVNTMiwgKHU4ICopKF92YWwpLCBFVEhfQUxFTikKKwlDUF9NQUNBRERSKCh1OCAqKShfaGRyKStGUkFNRV9PRkZTRVRfQUREUkVTUzIsICh1OCAqKShfdmFsKSkKICNkZWZpbmUgU0VUXzgwMjExX0hEUl9BRERSRVNTMyhfaGRyLCBfdmFsKQlcCi0JbWVtY3B5KCh1OCAqKShfaGRyKStGUkFNRV9PRkZTRVRfQUREUkVTUzMsICh1OCAqKShfdmFsKSwgRVRIX0FMRU4pCisJQ1BfTUFDQUREUigodTggKikoX2hkcikrRlJBTUVfT0ZGU0VUX0FERFJFU1MzLCAodTggKikoX3ZhbCkpCisjZGVmaW5lIFNFVF84MDIxMV9IRFJfRlJBR01FTlRfU0VRVUVOQ0UoX2hkciwgX3ZhbCkgIFwKKwlXUklURUVGMkJZVEUoKHU4ICopKF9oZHIpK0ZSQU1FX09GRlNFVF9TRVFVRU5DRSwgX3ZhbCkKKworI2RlZmluZSBTRVRfQkVBQ09OX1BST0JFX1JTUF9USU1FX1NUQU1QX0xPVyhfX3BoZHIsIF9fdmFsKQlcCisJV1JJVEVFRjRCWVRFKCgodTggKikoX19waGRyKSkgKyAyNCwgX192YWwpCisjZGVmaW5lIFNFVF9CRUFDT05fUFJPQkVfUlNQX1RJTUVfU1RBTVBfSElHSChfX3BoZHIsIF9fdmFsKSBcCisJV1JJVEVFRjRCWVRFKCgodTggKikoX19waGRyKSkgKyAyOCwgX192YWwpCisjZGVmaW5lIFNFVF9CRUFDT05fUFJPQkVfUlNQX0JFQUNPTl9JTlRFUlZBTChfX3BoZHIsIF9fdmFsKSBcCisJV1JJVEVFRjJCWVRFKCgodTggKikoX19waGRyKSkgKyAzMiwgX192YWwpCisjZGVmaW5lIEdFVF9CRUFDT05fUFJPQkVfUlNQX0NBUEFCSUxJVFlfSU5GTyhfX3BoZHIpCQlcCisJUkVBREVGMkJZVEUoKCh1OCAqKShfX3BoZHIpKSArIDM0KQorI2RlZmluZSBTRVRfQkVBQ09OX1BST0JFX1JTUF9DQVBBQklMSVRZX0lORk8oX19waGRyLCBfX3ZhbCkgXAorCVdSSVRFRUYyQllURSgoKHU4ICopKF9fcGhkcikpICsgMzQsIF9fdmFsKQorI2RlZmluZSBNQVNLX0JFQUNPTl9QUk9CRV9SU1BfQ0FQQUJJTElUWV9JTkZPKF9fcGhkciwgX192YWwpIFwKKwlTRVRfQkVBQ09OX1BST0JFX1JTUF9DQVBBQklMSVRZX0lORk8oX19waGRyLCBcCisJKEdFVF9CRUFDT05fUFJPQkVfUlNQX0NBUEFCSUxJVFlfSU5GTyhfX3BoZHIpICYgKH4oX192YWwpKSkpCiAKIGludCBydGxfaW5pdF9jb3JlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIHZvaWQgcnRsX2RlaW5pdF9jb3JlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKQEAgLTgwLDE4ICsxMTcsMjcgQEAKIHZvaWQgcnRsX2RlaW5pdF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIAogYm9vbCBydGxfYWN0aW9uX3Byb2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IsIHU4IGlzX3R4KTsKLWJvb2wgcnRsX3R4X21nbXRfcHJvYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB1OCBydGxfaXNfc3BlY2lhbF9kYXRhKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBpc190eCk7CiAKIHZvaWQgcnRsX3dhdGNoX2RvZ190aW1lcl9jYWxsYmFjayh1bnNpZ25lZCBsb25nIGRhdGEpOwotaW50IHJ0bF90eF9hZ2dfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGNvbnN0IHU4ICpyYSwKK2ludCBydGxfdHhfYWdnX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkgICAgIHUxNiB0aWQsIHUxNiAqc3NuKTsKLWludCBydGxfdHhfYWdnX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGNvbnN0IHU4ICpyYSwgdTE2IHRpZCk7CitpbnQgcnRsX3R4X2FnZ19zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkgICAgdTE2IHRpZCk7CitpbnQgcnRsX3R4X2FnZ19vcGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkgICAgdTE2IHRpZCk7CiB2b2lkIHJ0bF93YXRjaGRvZ193cV9jYWxsYmFjayh2b2lkICpkYXRhKTsKIAogdm9pZCBydGxfZ2V0X3RjYl9kZXNjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCisJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBydGxfdGNiX2Rlc2MgKnRjYl9kZXNjKTsKIAoraW50IHJ0bF9zZW5kX3NtcHNfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1OCAqZGEsIHU4ICpic3NpZCwKKwkJZW51bSBpZWVlODAyMTFfc21wc19tb2RlIHNtcHMpOwordTggKnJ0bF9maW5kX2llKHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuLCB1OCBpZSk7Cit2b2lkIHJ0bF9yZWNvZ25pemVfcGVlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pOwordTggcnRsX3RpZF90b19hYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggdGlkKTsKIGV4dGVybiBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHJ0bF9hdHRyaWJ1dGVfZ3JvdXA7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvY2FtLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2NhbS5jCmluZGV4IDUyYzljMTMuLjcyOTVhZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvY2FtLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9jYW0uYwpAQCAtMjMsNiArMjMsOCBAQAogICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCiAgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgogICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlICJ3aWZpLmgiCkBAIC00OSw3ICs1MSw3IEBACiAJdTMyIHRhcmdldF9jb250ZW50ID0gMDsKIAl1OCBlbnRyeV9pOwogCi0JUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0xPVUQsCiAJCSAoImtleV9jb250XzEyODpcbiAleDoleDoleDoleDoleDoleFxuIiwKIAkJICBrZXlfY29udF8xMjhbMF0sIGtleV9jb250XzEyOFsxXSwKIAkJICBrZXlfY29udF8xMjhbMl0sIGtleV9jb250XzEyOFszXSwKQEAgLTY4LDE1ICs3MCwxMyBAQAogCQkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tSV0NBTV0sCiAJCQkJCXRhcmdldF9jb21tYW5kKTsKIAotCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywKLQkJCQkgKCJydGxfY2FtX3Byb2dyYW1fZW50cnkoKTogIgotCQkJCSAgIldSSVRFICV4OiAleFxuIiwKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfTE9VRCwKKwkJCQkgKCJXUklURSAleDogJXhcbiIsCiAJCQkJICBydGxwcml2LT5jZmctPm1hcHNbV0NBTUldLCB0YXJnZXRfY29udGVudCkpOwotCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfTE9VRCwKIAkJCQkgKCJUaGUgS2V5IElEIGlzICVkXG4iLCBlbnRyeV9ubykpOwotCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywKLQkJCQkgKCJydGxfY2FtX3Byb2dyYW1fZW50cnkoKTogIgotCQkJCSAgIldSSVRFICV4OiAleFxuIiwKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfTE9VRCwKKwkJCQkgKCJXUklURSAleDogJXhcbiIsCiAJCQkJICBydGxwcml2LT5jZmctPm1hcHNbUldDQU1dLCB0YXJnZXRfY29tbWFuZCkpOwogCiAJCX0gZWxzZSBpZiAoZW50cnlfaSA9PSAxKSB7CkBAIC05MSwxMiArOTEsMTAgQEAKIAkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbUldDQU1dLAogCQkJCQl0YXJnZXRfY29tbWFuZCk7CiAKLQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfRE1FU0csCi0JCQkJICgicnRsX2NhbV9wcm9ncmFtX2VudHJ5KCk6IFdSSVRFIEE0OiAleFxuIiwKLQkJCQkgIHRhcmdldF9jb250ZW50KSk7Ci0JCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0RNRVNHLAotCQkJCSAoInJ0bF9jYW1fcHJvZ3JhbV9lbnRyeSgpOiBXUklURSBBMDogJXhcbiIsCi0JCQkJICB0YXJnZXRfY29tbWFuZCkpOworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19MT1VELAorCQkJCSAoIldSSVRFIEE0OiAleFxuIiwgdGFyZ2V0X2NvbnRlbnQpKTsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfTE9VRCwKKwkJCQkgKCJXUklURSBBMDogJXhcbiIsIHRhcmdldF9jb21tYW5kKSk7CiAKIAkJfSBlbHNlIHsKIApAQCAtMTEzLDE2ICsxMTEsMTQgQEAKIAkJCQkJdGFyZ2V0X2NvbW1hbmQpOwogCQkJdWRlbGF5KDEwMCk7CiAKLQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfRE1FU0csCi0JCQkJICgicnRsX2NhbV9wcm9ncmFtX2VudHJ5KCk6IFdSSVRFIEE0OiAleFxuIiwKLQkJCQkgIHRhcmdldF9jb250ZW50KSk7Ci0JCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0RNRVNHLAotCQkJCSAoInJ0bF9jYW1fcHJvZ3JhbV9lbnRyeSgpOiBXUklURSBBMDogJXhcbiIsCi0JCQkJICB0YXJnZXRfY29tbWFuZCkpOworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19MT1VELAorCQkJCSAoIldSSVRFIEE0OiAleFxuIiwgdGFyZ2V0X2NvbnRlbnQpKTsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfTE9VRCwKKwkJCQkgKCJXUklURSBBMDogJXhcbiIsIHRhcmdldF9jb21tYW5kKSk7CiAJCX0KIAl9CiAKLQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0RNRVNHLAorCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfTE9VRCwKIAkJICgiYWZ0ZXIgc2V0IGtleSwgdXNjb25maWc6JXhcbiIsIHVzX2NvbmZpZykpOwogfQogCkBAIC0yODksMyArMjg1LDcxIEBACiAKIH0KIEVYUE9SVF9TWU1CT0wocnRsX2NhbV9lbXB0eV9lbnRyeSk7CisKK3U4IHJ0bF9jYW1fZ2V0X2ZyZWVfZW50cnkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpzdGFfYWRkcikKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTMyIGJpdG1hcCA9IChydGxwcml2LT5zZWMuaHdzZWNfY2FtX2JpdG1hcCkgPj4gNDsKKwl1OCBlbnRyeV9pZHggPSAwOworCXU4IGksICphZGRyOworCisJaWYgKE5VTEwgPT0gc3RhX2FkZHIpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19FTUVSRywKKwkJCSgic3RhX2FkZHIgaXMgTlVMTC5cbiIpKTsKKwkJcmV0dXJuIFRPVEFMX0NBTV9FTlRSWTsKKwl9CisJLyogRG9lcyBTVEEgYWxyZWFkeSBleGlzdD8gKi8KKwlmb3IgKGkgPSA0OyBpIDwgVE9UQUxfQ0FNX0VOVFJZOyBpKyspIHsKKwkJYWRkciA9IHJ0bHByaXYtPnNlYy5od3NlY19jYW1fc3RhX2FkZHJbaV07CisJCWlmIChtZW1jbXAoYWRkciwgc3RhX2FkZHIsIEVUSF9BTEVOKSA9PSAwKQorCQkJcmV0dXJuIGk7CisJfQorCS8qIEdldCBhIGZyZWUgQ0FNIGVudHJ5LiAqLworCWZvciAoZW50cnlfaWR4ID0gNDsgZW50cnlfaWR4IDwgVE9UQUxfQ0FNX0VOVFJZOyBlbnRyeV9pZHgrKykgeworCQlpZiAoKGJpdG1hcCAmIEJJVCgwKSkgPT0gMCkgeworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19FTUVSRywKKwkJCQkoIi0tLS0taHdzZWNfY2FtX2JpdG1hcDogMHgleCBlbnRyeV9pZHg9JWRcbiIsCisJCQkJIHJ0bHByaXYtPnNlYy5od3NlY19jYW1fYml0bWFwLCBlbnRyeV9pZHgpKTsKKwkJCXJ0bHByaXYtPnNlYy5od3NlY19jYW1fYml0bWFwIHw9IEJJVCgwKSA8PCBlbnRyeV9pZHg7CisJCQltZW1jcHkocnRscHJpdi0+c2VjLmh3c2VjX2NhbV9zdGFfYWRkcltlbnRyeV9pZHhdLAorCQkJICAgICAgIHN0YV9hZGRyLCBFVEhfQUxFTik7CisJCQlyZXR1cm4gZW50cnlfaWR4OworCQl9CisJCWJpdG1hcCA9IGJpdG1hcCA+PiAxOworCX0KKwlyZXR1cm4gVE9UQUxfQ0FNX0VOVFJZOworfQorRVhQT1JUX1NZTUJPTChydGxfY2FtX2dldF9mcmVlX2VudHJ5KTsKKwordm9pZCBydGxfY2FtX2RlbF9lbnRyeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnN0YV9hZGRyKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1MzIgYml0bWFwOworCXU4IGksICphZGRyOworCisJaWYgKE5VTEwgPT0gc3RhX2FkZHIpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19FTUVSRywKKwkJCSgic3RhX2FkZHIgaXMgTlVMTC5cbiIpKTsKKwl9CisKKwlpZiAoKHN0YV9hZGRyWzBdfHN0YV9hZGRyWzFdfHN0YV9hZGRyWzJdfHN0YV9hZGRyWzNdfFwKKwkJCQlzdGFfYWRkcls0XXxzdGFfYWRkcls1XSkgPT0gMCkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0VNRVJHLAorCQkJKCJzdGFfYWRkciBpcyAwMDowMDowMDowMDowMDowMC5cbiIpKTsKKwkJcmV0dXJuOworCX0KKwkvKiBEb2VzIFNUQSBhbHJlYWR5IGV4aXN0PyAqLworCWZvciAoaSA9IDQ7IGkgPCBUT1RBTF9DQU1fRU5UUlk7IGkrKykgeworCQlhZGRyID0gcnRscHJpdi0+c2VjLmh3c2VjX2NhbV9zdGFfYWRkcltpXTsKKwkJYml0bWFwID0gKHJ0bHByaXYtPnNlYy5od3NlY19jYW1fYml0bWFwKSA+PiBpOworCQlpZiAoKChiaXRtYXAgJiBCSVQoMCkpID09IEJJVCgwKSkgJiYKKwkJICAgIChtZW1jbXAoYWRkciwgc3RhX2FkZHIsIEVUSF9BTEVOKSA9PSAwKSkgeworCQkJLyogUmVtb3ZlIGZyb20gSFcgU2VjdXJpdHkgQ0FNICovCisJCQltZW1zZXQocnRscHJpdi0+c2VjLmh3c2VjX2NhbV9zdGFfYWRkcltpXSwgMCwgRVRIX0FMRU4pOworCQkJcnRscHJpdi0+c2VjLmh3c2VjX2NhbV9iaXRtYXAgJj0gfihCSVQoMCkgPDwgaSk7CisJCQlwcmludGsoS0VSTl9JTkZPICImJiYmJiYmJiZkZWwgZW50cnkgJWRcbiIsIGkpOworCQl9CisJfQorCXJldHVybjsKK30KK0VYUE9SVF9TWU1CT0wocnRsX2NhbV9kZWxfZW50cnkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9jYW0uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvY2FtLmgKaW5kZXggZGQ4MmYwNS4uYzYyZGE0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9jYW0uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2NhbS5oCkBAIC0yMywxMiArMjMsMTMgQEAKICAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAogICogSHNpbmNodSAzMDAsIFRhaXdhbi4KICAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaWZuZGVmIF9fUlRMX0NBTV9IXwogI2RlZmluZSBfX1JUTF9DQU1fSF8KIAotI2RlZmluZSBUT1RBTF9DQU1fRU5UUlkJCQkJCTMyCiAjZGVmaW5lIENBTV9DT05URU5UX0NPVU5UCQkJCTgKIAogI2RlZmluZSBDRkdfREVGQVVMVF9LRVkJCQkJCUJJVCg1KQpAQCAtNDksNSArNTAsNyBAQAogdm9pZCBydGxfY2FtX21hcmtfaW52YWxpZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggdWNfaW5kZXgpOwogdm9pZCBydGxfY2FtX2VtcHR5X2VudHJ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCB1Y19pbmRleCk7CiB2b2lkIHJ0bF9jYW1fcmVzZXRfc2VjX2luZm8oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordTggcnRsX2NhbV9nZXRfZnJlZV9lbnRyeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnN0YV9hZGRyKTsKK3ZvaWQgcnRsX2NhbV9kZWxfZW50cnkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpzdGFfYWRkcik7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9jb3JlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2NvcmUuYwppbmRleCBlNGY0YWVlLi5kMmVjMjUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2NvcmUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2NvcmUuYwpAQCAtMjQsNiArMjQsNyBAQAogICogSHNpbmNodSAzMDAsIFRhaXdhbi4KICAqCiAgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSAid2lmaS5oIgpAQCAtMzUsNyArMzYsNyBAQAogLyptdXRleCBmb3Igc3RhcnQgJiBzdG9wIGlzIG11c3QgaGVyZS4gKi8KIHN0YXRpYyBpbnQgcnRsX29wX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewotCWludCBlcnIgPSAwOworCWludCBlcnI7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CiAKQEAgLTQ1LDEwICs0Niw4IEBACiAJCXJldHVybiAwOwogCW11dGV4X2xvY2soJnJ0bHByaXYtPmxvY2tzLmNvbmZfbXV0ZXgpOwogCWVyciA9IHJ0bHByaXYtPmludGZfb3BzLT5hZGFwdGVyX3N0YXJ0KGh3KTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQlydGxfd2F0Y2hfZG9nX3RpbWVyX2NhbGxiYWNrKCh1bnNpZ25lZCBsb25nKWh3KTsKLW91dDoKKwlpZiAoIWVycikKKwkJcnRsX3dhdGNoX2RvZ190aW1lcl9jYWxsYmFjaygodW5zaWduZWQgbG9uZylodyk7CiAJbXV0ZXhfdW5sb2NrKCZydGxwcml2LT5sb2Nrcy5jb25mX211dGV4KTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtNzIsNiArNzEsNyBAQAogCiAJbWFjLT5saW5rX3N0YXRlID0gTUFDODAyMTFfTk9MSU5LOwogCW1lbXNldChtYWMtPmJzc2lkLCAwLCA2KTsKKwltYWMtPnZlbmRvciA9IFBFRVJfVU5LTk9XTjsKIAogCS8qcmVzZXQgc2VjIGluZm8gKi8KIAlydGxfY2FtX3Jlc2V0X3NlY19pbmZvKGh3KTsKQEAgLTg3LDYgKzg3LDggQEAKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKIAlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3RjYl9kZXNjIHRjYl9kZXNjOworCW1lbXNldCgmdGNiX2Rlc2MsIDAsIHNpemVvZihzdHJ1Y3QgcnRsX3RjYl9kZXNjKSk7CiAKIAlpZiAodW5saWtlbHkoaXNfaGFsX3N0b3AocnRsaGFsKSB8fCBwcHNjLT5yZnB3cl9zdGF0ZSAhPSBFUkZPTikpCiAJCWdvdG8gZXJyX2ZyZWU7CkBAIC05NCw4ICs5Niw4IEBACiAJaWYgKCF0ZXN0X2JpdChSVExfU1RBVFVTX0lOVEVSRkFDRV9TVEFSVCwgJnJ0bHByaXYtPnN0YXR1cykpCiAJCWdvdG8gZXJyX2ZyZWU7CiAKLQotCXJ0bHByaXYtPmludGZfb3BzLT5hZGFwdGVyX3R4KGh3LCBza2IpOworCWlmICghcnRscHJpdi0+aW50Zl9vcHMtPndhaXRxX2luc2VydChodywgc2tiKSkKKwkJcnRscHJpdi0+aW50Zl9vcHMtPmFkYXB0ZXJfdHgoaHcsIHNrYiwgJnRjYl9kZXNjKTsKIAogCXJldHVybjsKIApAQCAtMTM2LDEwICsxMzgsMjYgQEAKIAogCQltYWMtPmxpbmtfc3RhdGUgPSBNQUM4MDIxMV9MSU5LRUQ7CiAJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfYmNuX3JlZyhodyk7CisJCWlmIChydGxwcml2LT5ydGxoYWwuY3VycmVudF9iYW5kdHlwZSA9PSBCQU5EX09OXzJfNEcpCisJCQltYWMtPmJhc2ljX3JhdGVzID0gMHhmZmY7CisJCWVsc2UKKwkJCW1hYy0+YmFzaWNfcmF0ZXMgPSAweGZmMDsKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9CQVNJQ19SQVRFLAorCQkJCSh1OCAqKSAoJm1hYy0+YmFzaWNfcmF0ZXMpKTsKKwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01BQzgwMjExLCBEQkdfTE9VRCwKIAkJCSAoIk5MODAyMTFfSUZUWVBFX0FQXG4iKSk7CisKKwkJbWFjLT5saW5rX3N0YXRlID0gTUFDODAyMTFfTElOS0VEOworCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2Jjbl9yZWcoaHcpOworCQlpZiAocnRscHJpdi0+cnRsaGFsLmN1cnJlbnRfYmFuZHR5cGUgPT0gQkFORF9PTl8yXzRHKQorCQkJbWFjLT5iYXNpY19yYXRlcyA9IDB4ZmZmOworCQllbHNlCisJCQltYWMtPmJhc2ljX3JhdGVzID0gMHhmZjA7CisJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfQkFTSUNfUkFURSwKKwkJCQkodTggKikgKCZtYWMtPmJhc2ljX3JhdGVzKSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCkBAIC0xODYsMTMgKzIwNCwxMiBAQAogCW1hYy0+dmlmID0gTlVMTDsKIAltYWMtPmxpbmtfc3RhdGUgPSBNQUM4MDIxMV9OT0xJTks7CiAJbWVtc2V0KG1hYy0+YnNzaWQsIDAsIDYpOworCW1hYy0+dmVuZG9yID0gUEVFUl9VTktOT1dOOwogCW1hYy0+b3Btb2RlID0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQ7CiAJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9uZXR3b3JrX3R5cGUoaHcsIG1hYy0+b3Btb2RlKTsKLQogCW11dGV4X3VubG9jaygmcnRscHJpdi0+bG9ja3MuY29uZl9tdXRleCk7CiB9CiAKLQogc3RhdGljIGludCBydGxfb3BfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdlZCkKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CkBAIC0yMjQsMTAgKzI0MSwyNSBAQAogCiAJLypGb3IgTFBTICovCiAJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpIHsKLQkJaWYgKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpCi0JCQlydGxfbHBzX2VudGVyKGh3KTsKLQkJZWxzZQotCQkJcnRsX2xwc19sZWF2ZShodyk7CisJCWNhbmNlbF9kZWxheWVkX3dvcmsoJnJ0bHByaXYtPndvcmtzLnBzX3dvcmspOworCQljYW5jZWxfZGVsYXllZF93b3JrKCZydGxwcml2LT53b3Jrcy5wc19yZm9uX3dxKTsKKwkJaWYgKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpIHsKKwkJCXJ0bHByaXYtPnBzYy5zd19wc19lbmFibGVkID0gdHJ1ZTsKKwkJCS8qIHNsZWVwIGhlcmUgaXMgbXVzdCwgb3Igd2UgbWF5IHJlY3YgdGhlIGJlYWNvbiBhbmQKKwkJCSAqIGNhdXNlIG1hYzgwMjExIGludG8gd3JvbmcgcHMgc3RhdGUsIHRoaXMgd2lsbCBjYXVzZQorCQkJICogcG93ZXIgc2F2ZSBudWxsZnVuYyBzZW5kIGZhaWwsIGFuZCBmdXJ0aGVyIGNhdXNlCisJCQkgKiBwa3QgbG9zcywgU28gc2xlZXAgbXVzdCBxdWlja2x5IGJ1dCBub3QgaW1tZWRpYXRseQorCQkJICogYmVjYXVzZSB0aGF0IHdpbGwgY2F1c2UgbnVsbGZ1bmMgc2VuZCBieSBtYWM4MDIxMQorCQkJICogZmFpbCwgYW5kIGNhdXNlIHBrdCBsb3NzLCB3ZSBoYXZlIHRlc3RlZCB0aGF0IDVtQQorCQkJICogaXMgd29ya2VkIHZlcnkgd2VsbCAqLworCQkJaWYgKCFydGxwcml2LT5wc2MubXVsdGlfYnVmZmVyZWQpCisJCQkJcXVldWVfZGVsYXllZF93b3JrKHJ0bHByaXYtPndvcmtzLnJ0bF93cSwKKwkJCQkJCSZydGxwcml2LT53b3Jrcy5wc193b3JrLAorCQkJCQkJTVNFQ1MoNSkpOworCQl9IGVsc2UgeworCQkJcnRsX3N3bHBzX3JmX2F3YWtlKGh3KTsKKwkJCXJ0bHByaXYtPnBzYy5zd19wc19lbmFibGVkID0gZmFsc2U7CisJCX0KIAl9CiAKIAlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9SRVRSWV9MSU1JVFMpIHsKQEAgLTI1OSw3ICsyOTEsNyBAQAogCQljYXNlIE5MODAyMTFfQ0hBTl9OT19IVDoKIAkJCS8qIFNDICovCiAJCQltYWMtPmN1cl80MF9wcmltZV9zYyA9Ci0JCQkgICAgUFJJTUVfQ0hOTF9PRkZTRVRfRE9OVF9DQVJFOworCQkJCVBSSU1FX0NITkxfT0ZGU0VUX0RPTlRfQ0FSRTsKIAkJCXJ0bHBoeS0+Y3VycmVudF9jaGFuX2J3ID0gSFRfQ0hBTk5FTF9XSURUSF8yMDsKIAkJCW1hYy0+YndfNDAgPSBmYWxzZTsKIAkJCWJyZWFrOwpAQCAtMjY3LDcgKzI5OSw3IEBACiAJCQkvKiBTQyAqLwogCQkJbWFjLT5jdXJfNDBfcHJpbWVfc2MgPSBQUklNRV9DSE5MX09GRlNFVF9VUFBFUjsKIAkJCXJ0bHBoeS0+Y3VycmVudF9jaGFuX2J3ID0KLQkJCSAgICBIVF9DSEFOTkVMX1dJRFRIXzIwXzQwOworCQkJCUhUX0NIQU5ORUxfV0lEVEhfMjBfNDA7CiAJCQltYWMtPmJ3XzQwID0gdHJ1ZTsKIAogCQkJLyp3aWRlIGNoYW5uZWwgKi8KQEAgLTI3OCw3ICszMTAsNyBAQAogCQkJLyogU0MgKi8KIAkJCW1hYy0+Y3VyXzQwX3ByaW1lX3NjID0gUFJJTUVfQ0hOTF9PRkZTRVRfTE9XRVI7CiAJCQlydGxwaHktPmN1cnJlbnRfY2hhbl9idyA9Ci0JCQkgICAgSFRfQ0hBTk5FTF9XSURUSF8yMF80MDsKKwkJCQlIVF9DSEFOTkVMX1dJRFRIXzIwXzQwOwogCQkJbWFjLT5id180MCA9IHRydWU7CiAKIAkJCS8qd2lkZSBjaGFubmVsICovCkBAIC0yODgsMTYgKzMyMCwyOSBAQAogCQlkZWZhdWx0OgogCQkJbWFjLT5id180MCA9IGZhbHNlOwogCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKLQkJCQkgKCJzd2l0Y2ggY2FzZSBub3QgcHJvY2Vzc2VkXG4iKSk7CisJCQkJCSgic3dpdGNoIGNhc2Ugbm90IHByb2Nlc3NlZFxuIikpOwogCQkJYnJlYWs7CiAJCX0KIAogCQlpZiAod2lkZV9jaGFuIDw9IDApCiAJCQl3aWRlX2NoYW4gPSAxOworCisJCS8qIEluIHNjYW5uaW5nLCBiZWZvcmUgd2UgZ28gb2ZmY2hhbm5lbCB3ZSBtYXkgc2VuZCBhIHBzPTEgbnVsbAorCQkgKiB0byBBUCwgYW5kIHRoZW4gd2UgbWF5IHNlbmQgYSBwcyA9IDAgbnVsbCB0byBBUCBxdWlja2x5LCBidXQKKwkJICogZmlyc3QgbnVsbCBtYXkgaGF2ZSBjYXVzZWQgQVAgdG8gcHV0IGxvdHMgb2YgcGFja2V0IHRvIGh3IHR4CisJCSAqIGJ1ZmZlci4gVGhlc2UgcGFja2V0cyBtdXN0IGJlIHR4J2QgYmVmb3JlIHdlIGdvIG9mZiBjaGFubmVsCisJCSAqIHNvIHdlIG11c3QgZGVsYXkgbW9yZSB0aW1lIHRvIGxldCBBUCBmbHVzaCB0aGVzZSBwYWNrZXRzCisJCSAqIGJlZm9yZSBnb2luZyBvZmZjaGFubmVsLCBvciBkaXMtYXNzb2NpYXRpb24gb3IgZGVsZXRlIEJBIHdpbGwKKwkJICogaGFwcGVuIGJ5IEFQCisJCSAqLworCQlpZiAocnRscHJpdi0+bWFjODAyMTEub2ZmY2hhbl9kZWxleSkgeworCQkJcnRscHJpdi0+bWFjODAyMTEub2ZmY2hhbl9kZWxleSA9IGZhbHNlOworCQkJbWRlbGF5KDUwKTsKKwkJfQogCQlydGxwaHktPmN1cnJlbnRfY2hhbm5lbCA9IHdpZGVfY2hhbjsKIAotCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2NoYW5uZWxfYWNjZXNzKGh3KTsKIAkJcnRscHJpdi0+Y2ZnLT5vcHMtPnN3aXRjaF9jaGFubmVsKGh3KTsKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9jaGFubmVsX2FjY2Vzcyhodyk7CiAJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfYndfbW9kZShodywKIAkJCQkJICAgICAgIGh3LT5jb25mLmNoYW5uZWxfdHlwZSk7CiAJfQpAQCAtMzQ1LDI3ICszOTAsMjggQEAKIAkJfQogCX0KIAotCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpIHsKLQkJLyoKLQkJICpUT0RPOiBCSVQoNSkgaXMgcHJvYmUgcmVzcG9uc2UgQklUKDgpIGlzIGJlYWNvbgotCQkgKlRPRE86IFVzZSBkZWZpbmUgZm9yIEJJVCg1KSBhbmQgQklUKDgpCi0JCSAqLwotCQlpZiAoKm5ld19mbGFncyAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKQotCQkJbWFjLT5yeF9tZ3RfZmlsdGVyIHw9IChCSVQoNSkgfCBCSVQoOCkpOwotCQllbHNlCi0JCQltYWMtPnJ4X21ndF9maWx0ZXIgJj0gfihCSVQoNSkgfCBCSVQoOCkpOworCS8qIGlmIHNzaWQgbm90IHNldCB0byBodyBkb24ndCBjaGVjayBic3NpZAorCSAqIGhlcmUganVzdCB1c2VkIGZvciBsaW5rZWQgc2Nhbm5pbmcsICYgbGlua2VkCisJICogYW5kIG5vbGluayBjaGVjayBic3NpZCBpcyBzZXQgaW4gc2V0IG5ldHdvcmtfdHlwZSAqLworCWlmICgoY2hhbmdlZF9mbGFncyAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKSAmJgorCQkobWFjLT5saW5rX3N0YXRlID49IE1BQzgwMjExX0xJTktFRCkpIHsKKwkJaWYgKG1hYy0+b3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJCQlpZiAoKm5ld19mbGFncyAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKSB7CisJCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9jaGtfYnNzaWQoaHcsIGZhbHNlKTsKKwkJCX0gZWxzZSB7CisJCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9jaGtfYnNzaWQoaHcsIHRydWUpOworCQkJfQorCQl9CiAJfQogCiAJaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfQ09OVFJPTCkgewogCQlpZiAoKm5ld19mbGFncyAmIEZJRl9DT05UUk9MKSB7CiAJCQltYWMtPnJ4X2NvbmYgfD0gcnRscHJpdi0+Y2ZnLT5tYXBzW01BQ19SQ1JfQUNGXTsKLQkJCW1hYy0+cnhfY3RybF9maWx0ZXIgfD0gUlRMX1NVUFBPUlRFRF9DVFJMX0ZJTFRFUjsKIAogCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9NQUM4MDIxMSwgREJHX0xPVUQsCiAJCQkJICgiRW5hYmxlIHJlY2VpdmUgY29udHJvbCBmcmFtZS5cbiIpKTsKIAkJfSBlbHNlIHsKIAkJCW1hYy0+cnhfY29uZiAmPSB+cnRscHJpdi0+Y2ZnLT5tYXBzW01BQ19SQ1JfQUNGXTsKLQkJCW1hYy0+cnhfY3RybF9maWx0ZXIgJj0gflJUTF9TVVBQT1JURURfQ1RSTF9GSUxURVI7CiAJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01BQzgwMjExLCBEQkdfTE9VRCwKIAkJCQkgKCJEaXNhYmxlIHJlY2VpdmUgY29udHJvbCBmcmFtZS5cbiIpKTsKIAkJfQpAQCAtMzgyLDE0ICs0MjgsNTQgQEAKIAkJCQkgKCJEaXNhYmxlIHJlY2VpdmUgb3RoZXIgQlNTJ3MgZnJhbWUuXG4iKSk7CiAJCX0KIAl9Ci0KLQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywgSFdfVkFSX1JDUiwgKHU4ICopICgmbWFjLT5yeF9jb25mKSk7Ci0JcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9NR1RfRklMVEVSLAotCQkJCSAgICAgICh1OCAqKSAoJm1hYy0+cnhfbWd0X2ZpbHRlcikpOwotCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfQ1RSTF9GSUxURVIsCi0JCQkJICAgICAgKHU4ICopICgmbWFjLT5yeF9jdHJsX2ZpbHRlcikpOwogfQorc3RhdGljIGludCBydGxfb3Bfc3RhX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9zdGFfaW5mbyAqc3RhX2VudHJ5OwogCisJaWYgKHN0YSkgeworCQlzdGFfZW50cnkgPSAoc3RydWN0IHJ0bF9zdGFfaW5mbyAqKSBzdGEtPmRydl9wcml2OworCQlpZiAocnRsaGFsLT5jdXJyZW50X2JhbmR0eXBlID09IEJBTkRfT05fMl80RykgeworCQkJc3RhX2VudHJ5LT53aXJlbGVzc19tb2RlID0gV0lSRUxFU1NfTU9ERV9HOworCQkJaWYgKHN0YS0+c3VwcF9yYXRlc1swXSA8PSAweGYpCisJCQkJc3RhX2VudHJ5LT53aXJlbGVzc19tb2RlID0gV0lSRUxFU1NfTU9ERV9COworCQkJaWYgKHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCA9PSB0cnVlKQorCQkJCXN0YV9lbnRyeS0+d2lyZWxlc3NfbW9kZSA9IFdJUkVMRVNTX01PREVfTl8yNEc7CisJCX0gZWxzZSBpZiAocnRsaGFsLT5jdXJyZW50X2JhbmR0eXBlID09IEJBTkRfT05fNUcpIHsKKwkJCXN0YV9lbnRyeS0+d2lyZWxlc3NfbW9kZSA9IFdJUkVMRVNTX01PREVfQTsKKwkJCWlmIChzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQgPT0gdHJ1ZSkKKwkJCQlzdGFfZW50cnktPndpcmVsZXNzX21vZGUgPSBXSVJFTEVTU19NT0RFX05fMjRHOworCQl9CisKKwkJLyogSSBmb3VuZCBzb21lIHRpbWVzIG1hYzgwMjExIGdpdmUgd3Jvbmcgc3VwcF9yYXRlcyBmb3IgYWRob2MqLworCQlpZiAocnRscHJpdi0+bWFjODAyMTEub3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCQkJc3RhX2VudHJ5LT53aXJlbGVzc19tb2RlID0gV0lSRUxFU1NfTU9ERV9HOworCisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTUFDODAyMTEsIERCR19ETUVTRywKKwkJCSgiQWRkIHN0YSBhZGRyIGlzICJNQUNfRk1UIlxuIiwgTUFDX0FSRyhzdGEtPmFkZHIpKSk7CisJCXJ0bHByaXYtPmNmZy0+b3BzLT51cGRhdGVfcmF0ZV90YmwoaHcsIHN0YSwgMCk7CisJfQorCXJldHVybiAwOworfQorc3RhdGljIGludCBydGxfb3Bfc3RhX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfc3RhX2luZm8gKnN0YV9lbnRyeTsKKwlpZiAoc3RhKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTUFDODAyMTEsIERCR19ETUVTRywKKwkJCSgiUmVtb3ZlIHN0YSBhZGRyIGlzICJNQUNfRk1UIlxuIiwgTUFDX0FSRyhzdGEtPmFkZHIpKSk7CisJCXN0YV9lbnRyeSA9IChzdHJ1Y3QgcnRsX3N0YV9pbmZvICopIHN0YS0+ZHJ2X3ByaXY7CisJCXN0YV9lbnRyeS0+d2lyZWxlc3NfbW9kZSA9IDA7CisJCXN0YV9lbnRyeS0+cmF0cl9pbmRleCA9IDA7CisJfQorCXJldHVybiAwOworfQogc3RhdGljIGludCBfcnRsX2dldF9oYWxfcW51bSh1MTYgcXVldWUpCiB7CiAJaW50IHFudW07CkBAIC00NDYsMTkgKzUzMiwxOCBAQAogCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiwgdTMyIGNoYW5nZWQpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bHByaXYpOwogCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CiAJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSA9IE5VTEw7CiAKIAltdXRleF9sb2NrKCZydGxwcml2LT5sb2Nrcy5jb25mX211dGV4KTsKLQogCWlmICgodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB8fAogCSAgICAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB8fAogCSAgICAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpKSB7Ci0KIAkJaWYgKChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09OKSB8fAogCQkgICAgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCAmJgogCQkgICAgIGJzc19jb25mLT5lbmFibGVfYmVhY29uKSkgewotCiAJCQlpZiAobWFjLT5iZWFjb25fZW5hYmxlZCA9PSAwKSB7CiAJCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9NQUM4MDIxMSwgREJHX0RNRVNHLAogCQkJCQkgKCJCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRFxuIikpOwpAQCAtNDcwLDggKzU1NSwxMyBAQAogCQkJCQkJcnRscHJpdi0+Y2ZnLT5tYXBzCiAJCQkJCQlbUlRMX0lCU1NfSU5UX01BU0tTXSwKIAkJCQkJCTApOworCisJCQkJaWYgKHJ0bHByaXYtPmNmZy0+b3BzLT5saW5rZWRfc2V0X3JlZykKKwkJCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPmxpbmtlZF9zZXRfcmVnKGh3KTsKIAkJCX0KLQkJfSBlbHNlIHsKKwkJfQorCQlpZiAoKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCAmJgorCQkJIWJzc19jb25mLT5lbmFibGVfYmVhY29uKSkgewogCQkJaWYgKG1hYy0+YmVhY29uX2VuYWJsZWQgPT0gMSkgewogCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTUFDODAyMTEsIERCR19ETUVTRywKIAkJCQkJICgiQURIT0MgRElTQUJMRSBCRUFDT05cbiIpKTsKQEAgLTQ4Miw3ICs1NzIsNiBAQAogCQkJCQkJW1JUTF9JQlNTX0lOVF9NQVNLU10pOwogCQkJfQogCQl9Ci0KIAkJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT05fSU5UKSB7CiAJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0JFQUNPTiwgREJHX1RSQUNFLAogCQkJCSAoIkJTU19DSEFOR0VEX0JFQUNPTl9JTlRcbiIpKTsKQEAgLTQ5NCwxMSArNTgzLDI1IEBACiAJLypUT0RPOiByZWZlcmVuY2UgdG8gZW51bSBpZWVlODAyMTFfYnNzX2NoYW5nZSAqLwogCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQVNTT0MpIHsKIAkJaWYgKGJzc19jb25mLT5hc3NvYykgeworCQkJLyogd2Ugc2hvdWxkIHJlc2V0IGFsbCBzZWMgaW5mbyAmIGNhbQorCQkJICogYmVmb3JlIHNldCBjYW0gYWZ0ZXIgbGlua2VkLCB3ZSBzaG91bGQgbm90CisJCQkgKiByZXNldCBpbiBkaXNhc3NvYywgdGhhdCB3aWxsIGNhdXNlIHRraXAtPndlcAorCQkJICogZmFpbCBiZWNhdXNlIHNvbWUgZmxhZyB3aWxsIGJlIHdyb25nICovCisJCQkvKiByZXNldCBzZWMgaW5mbyAqLworCQkJcnRsX2NhbV9yZXNldF9zZWNfaW5mbyhodyk7CisJCQkvKiByZXNldCBjYW0gdG8gZml4IHdlcCBmYWlsIGlzc3VlCisJCQkgKiB3aGVuIGNoYW5nZSBmcm9tIHdwYSB0byB3ZXAgKi8KKwkJCXJ0bF9jYW1fcmVzZXRfYWxsX2VudHJ5KGh3KTsKKwogCQkJbWFjLT5saW5rX3N0YXRlID0gTUFDODAyMTFfTElOS0VEOwogCQkJbWFjLT5jbnRfYWZ0ZXJfbGlua2VkID0gMDsKIAkJCW1hYy0+YXNzb2NfaWQgPSBic3NfY29uZi0+YWlkOwogCQkJbWVtY3B5KG1hYy0+YnNzaWQsIGJzc19jb25mLT5ic3NpZCwgNik7CiAKKwkJCWlmIChydGxwcml2LT5jZmctPm9wcy0+bGlua2VkX3NldF9yZWcpCisJCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPmxpbmtlZF9zZXRfcmVnKGh3KTsKKwkJCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmIHN0YSkKKwkJCQlydGxwcml2LT5jZmctPm9wcy0+dXBkYXRlX3JhdGVfdGJsKGh3LCBzdGEsIDApOwogCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9NQUM4MDIxMSwgREJHX0RNRVNHLAogCQkJCSAoIkJTU19DSEFOR0VEX0FTU09DXG4iKSk7CiAJCX0gZWxzZSB7CkBAIC01MDcsOSArNjEwLDcgQEAKIAogCQkJbWFjLT5saW5rX3N0YXRlID0gTUFDODAyMTFfTk9MSU5LOwogCQkJbWVtc2V0KG1hYy0+YnNzaWQsIDAsIDYpOwotCi0JCQkvKiByZXNldCBzZWMgaW5mbyAqLwotCQkJcnRsX2NhbV9yZXNldF9zZWNfaW5mbyhodyk7CisJCQltYWMtPnZlbmRvciA9IFBFRVJfVU5LTk9XTjsKIAogCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9NQUM4MDIxMSwgREJHX0RNRVNHLAogCQkJCSAoIkJTU19DSEFOR0VEX1VOX0FTU09DXG4iKSk7CkBAIC01NDYsMTQgKzY0NywxMCBAQAogCX0KIAogCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfSFQpIHsKLQkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSA9IE5VTEw7Ci0KIAkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9NQUM4MDIxMSwgREJHX1RSQUNFLAogCQkJICgiQlNTX0NIQU5HRURfSFRcbiIpKTsKLQogCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YShtYWMtPnZpZiwgbWFjLT5ic3NpZCk7Ci0KKwkJc3RhID0gZ2V0X3N0YShodywgdmlmLCAodTggKilic3NfY29uZi0+YnNzaWQpOwogCQlpZiAoc3RhKSB7CiAJCQlpZiAoc3RhLT5odF9jYXAuYW1wZHVfZGVuc2l0eSA+CiAJCQkgICAgbWFjLT5jdXJyZW50X2FtcGR1X2RlbnNpdHkpCkBAIC01NzUsOSArNjcyLDcgQEAKIAl9CiAKIAlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JTU0lEKSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEgPSBOVUxMOwogCQl1MzIgYmFzaWNfcmF0ZXM7Ci0JCXU4IGk7CiAKIAkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9CU1NJRCwKIAkJCQkJICAgICAgKHU4ICopIGJzc19jb25mLT5ic3NpZCk7CkBAIC01ODUsOTYgKzY4MCw2NSBAQAogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01BQzgwMjExLCBEQkdfRE1FU0csCiAJCQkgKE1BQ19GTVQgIlxuIiwgTUFDX0FSRyhic3NfY29uZi0+YnNzaWQpKSk7CiAKKwkJbWFjLT52ZW5kb3IgPSBQRUVSX1VOS05PV047CiAJCW1lbWNweShtYWMtPmJzc2lkLCBic3NfY29uZi0+YnNzaWQsIDYpOwotCQlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihic3NfY29uZi0+YnNzaWQpKSB7Ci0JCQlzd2l0Y2ggKHZpZi0+dHlwZSkgewotCQkJY2FzZSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRDoKLQkJCQlicmVhazsKLQkJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAotCQkJCQkgKCJzd2l0Y2ggY2FzZSBub3QgcHJvY2Vzc1xuIikpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9uZXR3b3JrX3R5cGUoaHcsIHZpZi0+dHlwZSk7Ci0JCX0gZWxzZQotCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9uZXR3b3JrX3R5cGUoaHcsCi0JCQkJCU5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKTsKLQotCQltZW1zZXQobWFjLT5tY3MsIDAsIDE2KTsKLQkJbWFjLT5odF9lbmFibGUgPSBmYWxzZTsKLQkJbWFjLT5zZ2lfNDAgPSBmYWxzZTsKLQkJbWFjLT5zZ2lfMjAgPSBmYWxzZTsKLQotCQlpZiAoIWJzc19jb25mLT51c2Vfc2hvcnRfc2xvdCkKLQkJCW1hYy0+bW9kZSA9IFdJUkVMRVNTX01PREVfQjsKLQkJZWxzZQotCQkJbWFjLT5tb2RlID0gV0lSRUxFU1NfTU9ERV9HOworCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X25ldHdvcmtfdHlwZShodywgdmlmLT50eXBlKTsKIAogCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YShtYWMtPnZpZiwgbWFjLT5ic3NpZCk7Ci0KLQkJaWYgKHN0YSkgewotCQkJaWYgKHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkgewotCQkJCW1hYy0+bW9kZSA9IFdJUkVMRVNTX01PREVfTl8yNEc7Ci0JCQkJbWFjLT5odF9lbmFibGUgPSB0cnVlOwotCQkJfQotCi0JCQlpZiAobWFjLT5odF9lbmFibGUpIHsKLQkJCQl1MTYgaHRfY2FwID0gc3RhLT5odF9jYXAuY2FwOwotCQkJCW1lbWNweShtYWMtPm1jcywgKHU4ICopICgmc3RhLT5odF9jYXAubWNzKSwgMTYpOwotCi0JCQkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCi0JCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTUFDODAyMTEsCi0JCQkJCQkgREJHX0xPVUQsICgiJXggIiwKLQkJCQkJCQkgICAgbWFjLT5tY3NbaV0pKTsKLQkJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01BQzgwMjExLCBEQkdfTE9VRCwKLQkJCQkJICgiXG4iKSk7Ci0KLQkJCQlpZiAoaHRfY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TR0lfNDApCi0JCQkJCW1hYy0+c2dpXzQwID0gdHJ1ZTsKLQotCQkJCWlmIChodF9jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NHSV8yMCkKLQkJCQkJbWFjLT5zZ2lfMjAgPSB0cnVlOwotCi0JCQkJLyoKLQkJCQkgKiBmb3IgY2lzY28gMTI1MiBidzIwIGl0J3Mgd3JvbmcKLQkJCQkgKiBpZiAoaHRfY2FwICYKLQkJCQkgKiAgICAgSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDApIHsKLQkJCQkgKgltYWMtPmJ3XzQwID0gdHJ1ZTsKLQkJCQkgKiB9Ci0JCQkJICovCi0JCQl9CisJCXN0YSA9IGdldF9zdGEoaHcsIHZpZiwgKHU4ICopYnNzX2NvbmYtPmJzc2lkKTsKKwkJaWYgKCFzdGEpIHsKKwkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJZ290byBvdXQ7CiAJCX0KLQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQkJLyptYWM4MDIxMSBqdXN0IGdpdmUgdXMgQ0NLIHJhdGVzIGFueSB0aW1lCi0JCSAqU28gd2UgYWRkIEcgcmF0ZSBpbiBiYXNpYyByYXRlcyB3aGVuCi0JCSBub3QgaW4gQiBtb2RlKi8KLQkJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CQVNJQ19SQVRFUykgewotCQkJaWYgKG1hYy0+bW9kZSA9PSBXSVJFTEVTU19NT0RFX0IpCi0JCQkJYmFzaWNfcmF0ZXMgPSBic3NfY29uZi0+YmFzaWNfcmF0ZXMgfCAweDAwZjsKKwkJaWYgKHJ0bGhhbC0+Y3VycmVudF9iYW5kdHlwZSA9PSBCQU5EX09OXzVHKSB7CisJCQltYWMtPm1vZGUgPSBXSVJFTEVTU19NT0RFX0E7CisJCX0gZWxzZSB7CisJCQlpZiAoc3RhLT5zdXBwX3JhdGVzWzBdIDw9IDB4ZikKKwkJCQltYWMtPm1vZGUgPSBXSVJFTEVTU19NT0RFX0I7CiAJCQllbHNlCi0JCQkJYmFzaWNfcmF0ZXMgPSBic3NfY29uZi0+YmFzaWNfcmF0ZXMgfCAweGZmMDsKKwkJCQltYWMtPm1vZGUgPSBXSVJFTEVTU19NT0RFX0c7CisJCX0KIAotCQkJaWYgKCF2aWYpCi0JCQkJZ290byBvdXQ7CisJCWlmIChzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpIHsKKwkJCWlmIChydGxoYWwtPmN1cnJlbnRfYmFuZHR5cGUgPT0gQkFORF9PTl8yXzRHKQorCQkJCW1hYy0+bW9kZSA9IFdJUkVMRVNTX01PREVfTl8yNEc7CisJCQllbHNlCisJCQkJbWFjLT5tb2RlID0gV0lSRUxFU1NfTU9ERV9OXzVHOworCQl9CisKKwkJLyoganVzdCBzdGF0aW9uIG5lZWQgaXQsIGJlY2F1c2UgaWJzcyAmIGFwIG1vZGUgd2lsbAorCQkgKiBzZXQgaW4gc3RhX2FkZCwgYW5kIHdpbGwgYmUgTlVMTCBoZXJlICovCisJCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCQlzdHJ1Y3QgcnRsX3N0YV9pbmZvICpzdGFfZW50cnk7CisJCQlzdGFfZW50cnkgPSAoc3RydWN0IHJ0bF9zdGFfaW5mbyAqKSBzdGEtPmRydl9wcml2OworCQkJc3RhX2VudHJ5LT53aXJlbGVzc19tb2RlID0gbWFjLT5tb2RlOworCQl9CisKKwkJaWYgKHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkgeworCQkJbWFjLT5odF9lbmFibGUgPSB0cnVlOworCisJCQkvKgorCQkJICogZm9yIGNpc2NvIDEyNTIgYncyMCBpdCdzIHdyb25nCisJCQkgKiBpZiAoaHRfY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDApIHsKKwkJCSAqCW1hYy0+YndfNDAgPSB0cnVlOworCQkJICogfQorCQkJICogKi8KKwkJfQorCisJCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkFTSUNfUkFURVMpIHsKKwkJCS8qIGZvciA1RyBtdXN0IDw8IFJBVEVfNk1fSU5ERVg9NCwKKwkJCSAqIGJlY2F1c2UgNUcgaGF2ZSBubyBjY2sgcmF0ZSovCisJCQlpZiAocnRsaGFsLT5jdXJyZW50X2JhbmR0eXBlID09IEJBTkRfT05fNUcpCisJCQkJYmFzaWNfcmF0ZXMgPSBzdGEtPnN1cHBfcmF0ZXNbMV0gPDwgNDsKKwkJCWVsc2UKKwkJCQliYXNpY19yYXRlcyA9IHN0YS0+c3VwcF9yYXRlc1swXTsKIAogCQkJbWFjLT5iYXNpY19yYXRlcyA9IGJhc2ljX3JhdGVzOwogCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9CQVNJQ19SQVRFLAogCQkJCQkodTggKikgKCZiYXNpY19yYXRlcykpOwotCi0JCQlpZiAocnRscHJpdi0+ZG0udXNlcmFtYXNrKQotCQkJCXJ0bHByaXYtPmNmZy0+b3BzLT51cGRhdGVfcmF0ZV9tYXNrKGh3LCAwKTsKLQkJCWVsc2UKLQkJCQlydGxwcml2LT5jZmctPm9wcy0+dXBkYXRlX3JhdGVfdGFibGUoaHcpOwotCiAJCX0KKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQogCiAJLyoKQEAgLTcxOSw3ICs3ODMsNyBAQAogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOwotCXU4IGJpYnNzID0gKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSA/IDEgOiAwOzsKKwl1OCBiaWJzcyA9IChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgPyAxIDogMDsKIAogCW1hYy0+dHNmID0gdHNmOwogCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfQ09SUkVDVF9UU0YsICh1OCAqKSAoJmJpYnNzKSk7CkBAIC03NjAsMTYgKzgyNCwxNyBAQAogCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX1NUQVJUOgogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01BQzgwMjExLCBEQkdfVFJBQ0UsCiAJCQkgKCJJRUVFODAyMTFfQU1QRFVfVFhfU1RBUlQ6IFRJRDolZFxuIiwgdGlkKSk7Ci0JCXJldHVybiBydGxfdHhfYWdnX3N0YXJ0KGh3LCBzdGEtPmFkZHIsIHRpZCwgc3NuKTsKKwkJcmV0dXJuIHJ0bF90eF9hZ2dfc3RhcnQoaHcsIHN0YSwgdGlkLCBzc24pOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9TVE9QOgogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01BQzgwMjExLCBEQkdfVFJBQ0UsCiAJCQkgKCJJRUVFODAyMTFfQU1QRFVfVFhfU1RPUDogVElEOiVkXG4iLCB0aWQpKTsKLQkJcmV0dXJuIHJ0bF90eF9hZ2dfc3RvcChodywgc3RhLT5hZGRyLCB0aWQpOworCQlyZXR1cm4gcnRsX3R4X2FnZ19zdG9wKGh3LCBzdGEsIHRpZCk7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX09QRVJBVElPTkFMOgogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01BQzgwMjExLCBEQkdfVFJBQ0UsCiAJCQkgKCJJRUVFODAyMTFfQU1QRFVfVFhfT1BFUkFUSU9OQUw6VElEOiVkXG4iLCB0aWQpKTsKKwkJcnRsX3R4X2FnZ19vcGVyKGh3LCBzdGEsIHRpZCk7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUQVJUOgogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01BQzgwMjExLCBEQkdfVFJBQ0UsCkBAIC03OTksOCArODY0LDEyIEBACiAJaWYgKG1hYy0+bGlua19zdGF0ZSA9PSBNQUM4MDIxMV9MSU5LRUQpIHsKIAkJcnRsX2xwc19sZWF2ZShodyk7CiAJCW1hYy0+bGlua19zdGF0ZSA9IE1BQzgwMjExX0xJTktFRF9TQ0FOTklORzsKLQl9IGVsc2UKKwl9IGVsc2UgewogCQlydGxfaXBzX25pY19vbihodyk7CisJfQorCisJLyogRHVhbCBtYWMgKi8KKwlydGxwcml2LT5ydGxoYWwubG9hZF9pbXJhbmRpcWtfc2V0dGluZ19mb3IyZyA9IGZhbHNlOwogCiAJcnRscHJpdi0+Y2ZnLT5vcHMtPmxlZF9jb250cm9sKGh3LCBMRURfQ1RMX1NJVEVfU1VSVkVZKTsKIAlydGxwcml2LT5jZmctPm9wcy0+c2Nhbl9vcGVyYXRpb25fYmFja3VwKGh3LCBTQ0FOX09QVF9CQUNLVVApOwpAQCAtODEyLDIyICs4ODEsMTkgQEAKIAlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOwogCiAJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9NQUM4MDIxMSwgREJHX0xPVUQsICgiXG4iKSk7Ci0KLQlydGxwcml2LT5jZmctPm9wcy0+c2Nhbl9vcGVyYXRpb25fYmFja3VwKGh3LCBTQ0FOX09QVF9SRVNUT1JFKTsKIAltYWMtPmFjdF9zY2FubmluZyA9IGZhbHNlOworCS8qIER1YWwgbWFjICovCisJcnRscHJpdi0+cnRsaGFsLmxvYWRfaW1yYW5kaXFrX3NldHRpbmdfZm9yMmcgPSBmYWxzZTsKKwogCWlmIChtYWMtPmxpbmtfc3RhdGUgPT0gTUFDODAyMTFfTElOS0VEX1NDQU5OSU5HKSB7CiAJCW1hYy0+bGlua19zdGF0ZSA9IE1BQzgwMjExX0xJTktFRDsKLQotCQkvKiBmaXggZndscHMgaXNzdWUgKi8KLQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9uZXR3b3JrX3R5cGUoaHcsIG1hYy0+b3Btb2RlKTsKLQotCQlpZiAocnRscHJpdi0+ZG0udXNlcmFtYXNrKQotCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnVwZGF0ZV9yYXRlX21hc2soaHcsIDApOwotCQllbHNlCi0JCQlydGxwcml2LT5jZmctPm9wcy0+dXBkYXRlX3JhdGVfdGFibGUoaHcpOwotCisJCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCQkvKiBmaXggZndscHMgaXNzdWUgKi8KKwkJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfbmV0d29ya190eXBlKGh3LCBtYWMtPm9wbW9kZSk7CisJCX0KIAl9CiAKKwlydGxwcml2LT5jZmctPm9wcy0+c2Nhbl9vcGVyYXRpb25fYmFja3VwKGh3LCBTQ0FOX09QVF9SRVNUT1JFKTsKIH0KIAogc3RhdGljIGludCBydGxfb3Bfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsCkBAIC04NTgsNDkgKzkyNCw3MyBAQAogCXJ0bF9pcHNfbmljX29uKGh3KTsKIAltdXRleF9sb2NrKCZydGxwcml2LT5sb2Nrcy5jb25mX211dGV4KTsKIAkvKiA8MT4gZ2V0IGVuY3J5cHRpb24gYWxnICovCisKIAlzd2l0Y2ggKGtleS0+Y2lwaGVyKSB7CiAJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDoKIAkJa2V5X3R5cGUgPSBXRVA0MF9FTkNSWVBUSU9OOwogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0RNRVNHLCAoImFsZzpXRVA0MFxuIikpOwotCQlydGxwcml2LT5zZWMudXNlX2RlZmF1bHRrZXkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDoKIAkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywKIAkJCSAoImFsZzpXRVAxMDRcbiIpKTsKIAkJa2V5X3R5cGUgPSBXRVAxMDRfRU5DUllQVElPTjsKLQkJcnRscHJpdi0+c2VjLnVzZV9kZWZhdWx0a2V5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9US0lQOgogCQlrZXlfdHlwZSA9IFRLSVBfRU5DUllQVElPTjsKIAkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywgKCJhbGc6VEtJUFxuIikpOwotCQlpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCi0JCQlydGxwcml2LT5zZWMudXNlX2RlZmF1bHRrZXkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVA6CiAJCWtleV90eXBlID0gQUVTQ0NNUF9FTkNSWVBUSU9OOwogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0RNRVNHLCAoImFsZzpDQ01QXG4iKSk7Ci0JCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJCXJ0bHByaXYtPnNlYy51c2VfZGVmYXVsdGtleSA9IHRydWU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCiAJCQkgKCJhbGdfZXJyOiV4ISEhITpcbiIsIGtleS0+Y2lwaGVyKSk7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CisJaWYgKGtleV90eXBlID09IFdFUDQwX0VOQ1JZUFRJT04gfHwKKwkJCWtleV90eXBlID09IFdFUDEwNF9FTkNSWVBUSU9OIHx8CisJCQltYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkJcnRscHJpdi0+c2VjLnVzZV9kZWZhdWx0a2V5ID0gdHJ1ZTsKKwogCS8qIDwyPiBnZXQga2V5X2lkeCAqLwogCWtleV9pZHggPSAodTgpIChrZXktPmtleWlkeCk7CiAJaWYgKGtleV9pZHggPiAzKQogCQlnb3RvIG91dF91bmxvY2s7CiAJLyogPDM+IGlmIHBhaXJ3aXNlIGtleSBlbmFibGVfaHdfc2VjICovCiAJZ3JvdXBfa2V5ID0gIShrZXktPmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFKTsKLQlpZiAoKCFncm91cF9rZXkpIHx8IChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgfHwKLQkgICAgcnRscHJpdi0+c2VjLnBhaXJ3aXNlX2VuY19hbGdvcml0aG0gPT0gTk9fRU5DUllQVElPTikgewotCQlpZiAocnRscHJpdi0+c2VjLnBhaXJ3aXNlX2VuY19hbGdvcml0aG0gPT0gTk9fRU5DUllQVElPTiAmJgotCQkgICAgKGtleV90eXBlID09IFdFUDQwX0VOQ1JZUFRJT04gfHwKLQkJICAgICBrZXlfdHlwZSA9PSBXRVAxMDRfRU5DUllQVElPTikpCi0JCQl3ZXBfb25seSA9IHRydWU7Ci0JCXJ0bHByaXYtPnNlYy5wYWlyd2lzZV9lbmNfYWxnb3JpdGhtID0ga2V5X3R5cGU7Ci0JCXJ0bHByaXYtPmNmZy0+b3BzLT5lbmFibGVfaHdfc2VjKGh3KTsKKworCS8qIHdlcCBhbHdheXMgYmUgZ3JvdXAga2V5LCBidXQgdGhlcmUgYXJlIHR3byBjb25kaXRpb25zOgorCSAqIDEpIHdlcCBvbmx5OiBpcyBqdXN0IGZvciB3ZXAgZW5jLCBpbiB0aGlzIGNvbmRpdGlvbgorCSAqIHJ0bHByaXYtPnNlYy5wYWlyd2lzZV9lbmNfYWxnb3JpdGhtID09IE5PX0VOQ1JZUFRJT04KKwkgKiB3aWxsIGJlIHRydWUgJiBlbmFibGVfaHdfc2VjIHdpbGwgYmUgc2V0IHdoZW4gd2VwCisJICoga2Ugc2V0dGluZy4KKwkgKiAyKSB3ZXAoZ3JvdXApICsgQUVTKHBhaXJ3aXNlKTogc29tZSBBUCBsaWtlIGNpc2NvCisJICogbWF5IHVzZSBpdCwgaW4gdGhpcyBjb25kaXRpb24gZW5hYmxlX2h3X3NlYyB3aWxsIG5vdAorCSAqIGJlIHNldCB3aGVuIHdlcCBrZXkgc2V0dGluZyAqLworCS8qIHdlIG11c3QgcmVzZXQgc2VjX2luZm8gYWZ0ZXIgbGluZ2tlZCBiZWZvcmUgc2V0IGtleSwKKwkgKiBvciBzb21lIGZsYWcgd2lsbCBiZSB3cm9uZyovCisJaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJCWlmICghZ3JvdXBfa2V5IHx8IGtleV90eXBlID09IFdFUDQwX0VOQ1JZUFRJT04gfHwKKwkJCWtleV90eXBlID09IFdFUDEwNF9FTkNSWVBUSU9OKSB7CisJCQlpZiAoZ3JvdXBfa2V5KQorCQkJCXdlcF9vbmx5ID0gdHJ1ZTsKKwkJCXJ0bHByaXYtPmNmZy0+b3BzLT5lbmFibGVfaHdfc2VjKGh3KTsKKwkJfQorCX0gZWxzZSB7CisJCWlmICgoIWdyb3VwX2tleSkgfHwgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB8fAorCQkgICAgIHJ0bHByaXYtPnNlYy5wYWlyd2lzZV9lbmNfYWxnb3JpdGhtID09IE5PX0VOQ1JZUFRJT04pIHsKKwkJCWlmIChydGxwcml2LT5zZWMucGFpcndpc2VfZW5jX2FsZ29yaXRobSA9PQorCQkJICAgIE5PX0VOQ1JZUFRJT04gJiYKKwkJCSAgICAoa2V5X3R5cGUgPT0gV0VQNDBfRU5DUllQVElPTiB8fAorCQkJICAgIGtleV90eXBlID09IFdFUDEwNF9FTkNSWVBUSU9OKSkKKwkJCQl3ZXBfb25seSA9IHRydWU7CisJCQlydGxwcml2LT5zZWMucGFpcndpc2VfZW5jX2FsZ29yaXRobSA9IGtleV90eXBlOworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywKKwkJCQkoInNldCBlbmFibGVfaHdfc2VjLCBrZXlfdHlwZToleChPUEVOOjAgV0VQNDA6MSIKKwkJCQkiIFRLSVA6MiBBRVM6NCBXRVAxMDQ6NSlcbiIsIGtleV90eXBlKSk7CisJCQlydGxwcml2LT5jZmctPm9wcy0+ZW5hYmxlX2h3X3NlYyhodyk7CisJCX0KIAl9CiAJLyogPDQ+IHNldCBrZXkgYmFzZWQgb24gY21kICovCiAJc3dpdGNoIChjbWQpIHsKQEAgLTkzMiw2ICsxMDIyLDcgQEAKIAkJCWlmICghc3RhKSB7CiAJCQkJUlRfQVNTRVJUKGZhbHNlLCAoInBhaXJ3aXNlIGtleSB3aXRobm90IgogCQkJCQkJICAibWFjX2FkZHJcbiIpKTsKKwogCQkJCWVyciA9IC1FT1BOT1RTVVBQOwogCQkJCWdvdG8gb3V0X3VubG9jazsKIAkJCX0KQEAgLTk1OSw2ICsxMDUwLDEwIEBACiAJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfRE1FU0csCiAJCQkgKCJkaXNhYmxlIGtleSBkZWxldGUgb25lIGVudHJ5XG4iKSk7CiAJCS8qc2V0IGxvY2FsIGJ1ZiBhYm91dCB3ZXAga2V5LiAqLworCQlpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwkJCWlmIChzdGEpCisJCQkJcnRsX2NhbV9kZWxfZW50cnkoaHcsIHN0YS0+YWRkcik7CisJCX0KIAkJbWVtc2V0KHJ0bHByaXYtPnNlYy5rZXlfYnVmW2tleV9pZHhdLCAwLCBrZXktPmtleWxlbik7CiAJCXJ0bHByaXYtPnNlYy5rZXlfbGVuW2tleV9pZHhdID0gMDsKIAkJbWVtY3B5KG1hY19hZGRyLCB6ZXJvX2FkZHIsIEVUSF9BTEVOKTsKQEAgLTEwMTEsNiArMTEwNiwxOCBAQAogCW11dGV4X3VubG9jaygmcnRscHJpdi0+bG9ja3MuY29uZl9tdXRleCk7CiB9CiAKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IG1hYzgwMjExIHRvIGZsdXNoIHR4IGJ1ZmZlcgorICogYmVmb3JlIHN3aXRjaCBjaGFubmxlIG9yIHBvd2VyIHNhdmUsIG9yIHR4IGJ1ZmZlciBwYWNrZXQKKyAqIG1heWJlIHNlbmQgYWZ0ZXIgb2ZmY2hhbm5lbCBvciByZiBzbGVlcCwgdGhpcyBtYXkgY2F1c2UKKyAqIGRpcy1hc3NvY2lhdGlvbiBieSBBUCAqLworc3RhdGljIHZvaWQgcnRsX29wX2ZsdXNoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGRyb3ApCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCisJaWYgKHJ0bHByaXYtPmludGZfb3BzLT5mbHVzaCkKKwkJcnRscHJpdi0+aW50Zl9vcHMtPmZsdXNoKGh3LCBkcm9wKTsKK30KKwogY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgcnRsX29wcyA9IHsKIAkuc3RhcnQgPSBydGxfb3Bfc3RhcnQsCiAJLnN0b3AgPSBydGxfb3Bfc3RvcCwKQEAgLTEwMTksNiArMTEyNiw4IEBACiAJLnJlbW92ZV9pbnRlcmZhY2UgPSBydGxfb3BfcmVtb3ZlX2ludGVyZmFjZSwKIAkuY29uZmlnID0gcnRsX29wX2NvbmZpZywKIAkuY29uZmlndXJlX2ZpbHRlciA9IHJ0bF9vcF9jb25maWd1cmVfZmlsdGVyLAorCS5zdGFfYWRkID0gcnRsX29wX3N0YV9hZGQsCisJLnN0YV9yZW1vdmUgPSBydGxfb3Bfc3RhX3JlbW92ZSwKIAkuc2V0X2tleSA9IHJ0bF9vcF9zZXRfa2V5LAogCS5jb25mX3R4ID0gcnRsX29wX2NvbmZfdHgsCiAJLmJzc19pbmZvX2NoYW5nZWQgPSBydGxfb3BfYnNzX2luZm9fY2hhbmdlZCwKQEAgLTEwMzAsNCArMTEzOSw1IEBACiAJLnN3X3NjYW5fc3RhcnQgPSBydGxfb3Bfc3dfc2Nhbl9zdGFydCwKIAkuc3dfc2Nhbl9jb21wbGV0ZSA9IHJ0bF9vcF9zd19zY2FuX2NvbXBsZXRlLAogCS5yZmtpbGxfcG9sbCA9IHJ0bF9vcF9yZmtpbGxfcG9sbCwKKwkuZmx1c2ggPSBydGxfb3BfZmx1c2gsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9jb3JlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2NvcmUuaAppbmRleCAwZWYzMWMzYy4uNGIyNDdkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9jb3JlLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9jb3JlLmgKQEAgLTI0LDYgKzI0LDcgQEAKICAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCiAgKgogICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2lmbmRlZiBfX1JUTF9DT1JFX0hfXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9lZnVzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9lZnVzZS5jCmluZGV4IDU5MGYxNGYuLjUwZGU2ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvZWZ1c2UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2VmdXNlLmMKQEAgLTUyLDggKzUyLDYgQEAKIAl7MTEsIDAsIDAsIDI4fQogfTsKIAotc3RhdGljIHZvaWQgcmVhZF9lZnVzZV9ieXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgX29mZnNldCwKLQkJCQkJdTggKnBidWYpOwogc3RhdGljIHZvaWQgZWZ1c2Vfc2hhZG93X3JlYWRfMWJ5dGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBvZmZzZXQsCiAJCQkJICAgIHU4ICp2YWx1ZSk7CiBzdGF0aWMgdm9pZCBlZnVzZV9zaGFkb3dfcmVhZF8yYnl0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IG9mZnNldCwKQEAgLTc5LDcgKzc3LDcgQEAKIAkJCQkJdTggKnRhcmdldGRhdGEpOwogc3RhdGljIHU4IGVmdXNlX3dvcmRfZW5hYmxlX2RhdGFfd3JpdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJICAgICAgIHUxNiBlZnVzZV9hZGRyLCB1OCB3b3JkX2VuLCB1OCAqZGF0YSk7Ci1zdGF0aWMgdm9pZCBlZnVzZV9wb3dlcl9zd2l0Y2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGJ3cml0ZSwKK3N0YXRpYyB2b2lkIGVmdXNlX3Bvd2VyX3N3aXRjaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggd3JpdGUsCiAJCQkJCXU4IHB3cnN0YXRlKTsKIHN0YXRpYyB1MTYgZWZ1c2VfZ2V0X2N1cnJlbnRfc2l6ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiBzdGF0aWMgdTggZWZ1c2VfY2FsY3VsYXRlX3dvcmRfY250cyh1OCB3b3JkX2VuKTsKQEAgLTExNSw4ICsxMTMsMTAgQEAKIAl1OCBieXRldGVtcDsKIAl1OCB0ZW1wOwogCXUzMiBrID0gMDsKKwljb25zdCB1MzIgZWZ1c2VfbGVuID0KKwkJcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX1JFQUxfQ09OVEVOVF9TSVpFXTsKIAotCWlmIChhZGRyZXNzIDwgRUZVU0VfUkVBTF9DT05URU5UX0xFTikgeworCWlmIChhZGRyZXNzIDwgZWZ1c2VfbGVuKSB7CiAJCXRlbXAgPSBhZGRyZXNzICYgMHhGRjsKIAkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0NUUkxdICsgMSwKIAkJCSAgICAgICB0ZW1wKTsKQEAgLTE1OCwxMSArMTU4LDEzIEBACiAJdTggYnl0ZXRlbXA7CiAJdTggdGVtcDsKIAl1MzIgayA9IDA7CisJY29uc3QgdTMyIGVmdXNlX2xlbiA9CisJCXJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9SRUFMX0NPTlRFTlRfU0laRV07CiAKIAlSVF9UUkFDRShydGxwcml2LCBDT01QX0VGVVNFLCBEQkdfTE9VRCwKIAkJICgiQWRkcj0leCBEYXRhID0leFxuIiwgYWRkcmVzcywgdmFsdWUpKTsKIAotCWlmIChhZGRyZXNzIDwgRUZVU0VfUkVBTF9DT05URU5UX0xFTikgeworCWlmIChhZGRyZXNzIDwgZWZ1c2VfbGVuKSB7CiAJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9DVFJMXSwgdmFsdWUpOwogCiAJCXRlbXAgPSBhZGRyZXNzICYgMHhGRjsKQEAgLTE5OCw3ICsyMDAsNyBAQAogCiB9CiAKLXN0YXRpYyB2b2lkIHJlYWRfZWZ1c2VfYnl0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IF9vZmZzZXQsIHU4ICpwYnVmKQordm9pZCByZWFkX2VmdXNlX2J5dGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBfb2Zmc2V0LCB1OCAqcGJ1ZikKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJdTMyIHZhbHVlMzI7CkBAIC0yMzMsMjYgKzIzNSw0NSBAQAogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAlzdHJ1Y3QgcnRsX2VmdXNlICpydGxlZnVzZSA9IHJ0bF9lZnVzZShydGxfcHJpdihodykpOwotCXU4IGVmdXNlX3RibFtFRlVTRV9NQVBfTEVOXTsKKwl1OCAqZWZ1c2VfdGJsOwogCXU4IHJ0ZW1wOFsxXTsKIAl1MTYgZWZ1c2VfYWRkciA9IDA7CiAJdTggb2Zmc2V0LCB3cmVuOwogCXUxNiBpOwogCXUxNiBqOwotCXUxNiBlZnVzZV93b3JkW0VGVVNFX01BWF9TRUNUSU9OXVtFRlVTRV9NQVhfV09SRF9VTklUXTsKKwljb25zdCB1MTYgZWZ1c2VfbWF4X3NlY3Rpb24gPQorCQlydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfTUFYX1NFQ1RJT05fTUFQXTsKKwljb25zdCB1MzIgZWZ1c2VfbGVuID0KKwkJcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX1JFQUxfQ09OVEVOVF9TSVpFXTsKKwl1MTYgKiplZnVzZV93b3JkOwogCXUxNiBlZnVzZV91dGlsaXplZCA9IDA7CiAJdTggZWZ1c2VfdXNhZ2U7CiAKLQlpZiAoKF9vZmZzZXQgKyBfc2l6ZV9ieXRlKSA+IEVGVVNFX01BUF9MRU4pIHsKKwlpZiAoKF9vZmZzZXQgKyBfc2l6ZV9ieXRlKSA+IHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9IV1NFVF9NQVhfU0laRV0pIHsKIAkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FRlVTRSwgREJHX0xPVUQsCiAJCQkgKCJyZWFkX2VmdXNlKCk6IEludmFsaWQgb2Zmc2V0KCUjeCkgd2l0aCByZWFkICIKIAkJCSAgImJ5dGVzKCUjeCkhIVxuIiwgX29mZnNldCwgX3NpemVfYnl0ZSkpOwogCQlyZXR1cm47CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IEVGVVNFX01BWF9TRUNUSU9OOyBpKyspCisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBlZnVzZV90YmwgYW5kIGVmdXNlX3dvcmQgKi8KKwllZnVzZV90YmwgPSBrbWFsbG9jKHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9IV1NFVF9NQVhfU0laRV0gKgorCQkJICAgIHNpemVvZih1OCksIEdGUF9BVE9NSUMpOworCWlmICghZWZ1c2VfdGJsKQorCQlyZXR1cm47CisJZWZ1c2Vfd29yZCA9IGttYWxsb2MoRUZVU0VfTUFYX1dPUkRfVU5JVCAqIHNpemVvZih1MTYgKiksIEdGUF9BVE9NSUMpOworCWlmICghZWZ1c2Vfd29yZCkKKwkJZ290byBkb25lOworCWZvciAoaSA9IDA7IGkgPCBFRlVTRV9NQVhfV09SRF9VTklUOyBpKyspIHsKKwkJZWZ1c2Vfd29yZFtpXSA9IGttYWxsb2MoZWZ1c2VfbWF4X3NlY3Rpb24gKiBzaXplb2YodTE2KSwKKwkJCQkJR0ZQX0FUT01JQyk7CisJCWlmICghZWZ1c2Vfd29yZFtpXSkKKwkJCWdvdG8gZG9uZTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZWZ1c2VfbWF4X3NlY3Rpb247IGkrKykKIAkJZm9yIChqID0gMDsgaiA8IEVGVVNFX01BWF9XT1JEX1VOSVQ7IGorKykKLQkJCWVmdXNlX3dvcmRbaV1bal0gPSAweEZGRkY7CisJCQllZnVzZV93b3JkW2pdW2ldID0gMHhGRkZGOwogCiAJcmVhZF9lZnVzZV9ieXRlKGh3LCBlZnVzZV9hZGRyLCBydGVtcDgpOwogCWlmICgqcnRlbXA4ICE9IDB4RkYpIHsKQEAgLTI2MiwxMCArMjgzLDEwIEBACiAJCWVmdXNlX2FkZHIrKzsKIAl9CiAKLQl3aGlsZSAoKCpydGVtcDggIT0gMHhGRikgJiYgKGVmdXNlX2FkZHIgPCBFRlVTRV9SRUFMX0NPTlRFTlRfTEVOKSkgeworCXdoaWxlICgoKnJ0ZW1wOCAhPSAweEZGKSAmJiAoZWZ1c2VfYWRkciA8IGVmdXNlX2xlbikpIHsKIAkJb2Zmc2V0ID0gKCgqcnRlbXA4ID4+IDQpICYgMHgwZik7CiAKLQkJaWYgKG9mZnNldCA8IEVGVVNFX01BWF9TRUNUSU9OKSB7CisJCWlmIChvZmZzZXQgPCBlZnVzZV9tYXhfc2VjdGlvbikgewogCQkJd3JlbiA9ICgqcnRlbXA4ICYgMHgwZik7CiAJCQlSVFBSSU5UKHJ0bHByaXYsIEZFRVBST00sIEVGVVNFX1JFQURfQUxMLAogCQkJCSgib2Zmc2V0LSVkIFdvcmRlbj0leFxuIiwgb2Zmc2V0LCB3cmVuKSk7CkBAIC0yNzksOSArMzAwLDEwIEBACiAJCQkJCXJlYWRfZWZ1c2VfYnl0ZShodywgZWZ1c2VfYWRkciwgcnRlbXA4KTsKIAkJCQkJZWZ1c2VfYWRkcisrOwogCQkJCQllZnVzZV91dGlsaXplZCsrOwotCQkJCQllZnVzZV93b3JkW29mZnNldF1baV0gPSAoKnJ0ZW1wOCAmIDB4ZmYpOworCQkJCQllZnVzZV93b3JkW2ldW29mZnNldF0gPQorCQkJCQkJCSAoKnJ0ZW1wOCAmIDB4ZmYpOwogCi0JCQkJCWlmIChlZnVzZV9hZGRyID49IEVGVVNFX1JFQUxfQ09OVEVOVF9MRU4pCisJCQkJCWlmIChlZnVzZV9hZGRyID49IGVmdXNlX2xlbikKIAkJCQkJCWJyZWFrOwogCiAJCQkJCVJUUFJJTlQocnRscHJpdiwgRkVFUFJPTSwKQEAgLTI5MSwxMCArMzEzLDEwIEBACiAJCQkJCXJlYWRfZWZ1c2VfYnl0ZShodywgZWZ1c2VfYWRkciwgcnRlbXA4KTsKIAkJCQkJZWZ1c2VfYWRkcisrOwogCQkJCQllZnVzZV91dGlsaXplZCsrOwotCQkJCQllZnVzZV93b3JkW29mZnNldF1baV0gfD0KKwkJCQkJZWZ1c2Vfd29yZFtpXVtvZmZzZXRdIHw9CiAJCQkJCSAgICAoKCh1MTYpKnJ0ZW1wOCA8PCA4KSAmIDB4ZmYwMCk7CiAKLQkJCQkJaWYgKGVmdXNlX2FkZHIgPj0gRUZVU0VfUkVBTF9DT05URU5UX0xFTikKKwkJCQkJaWYgKGVmdXNlX2FkZHIgPj0gZWZ1c2VfbGVuKQogCQkJCQkJYnJlYWs7CiAJCQkJfQogCkBAIC0zMDUsMTggKzMyNywxOCBAQAogCQlSVFBSSU5UKHJ0bHByaXYsIEZFRVBST00sIEVGVVNFX1JFQURfQUxMLAogCQkJKCJBZGRyPSVkXG4iLCBlZnVzZV9hZGRyKSk7CiAJCXJlYWRfZWZ1c2VfYnl0ZShodywgZWZ1c2VfYWRkciwgcnRlbXA4KTsKLQkJaWYgKCpydGVtcDggIT0gMHhGRiAmJiAoZWZ1c2VfYWRkciA8IDUxMikpIHsKKwkJaWYgKCpydGVtcDggIT0gMHhGRiAmJiAoZWZ1c2VfYWRkciA8IGVmdXNlX2xlbikpIHsKIAkJCWVmdXNlX3V0aWxpemVkKys7CiAJCQllZnVzZV9hZGRyKys7CiAJCX0KIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgRUZVU0VfTUFYX1NFQ1RJT047IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBlZnVzZV9tYXhfc2VjdGlvbjsgaSsrKSB7CiAJCWZvciAoaiA9IDA7IGogPCBFRlVTRV9NQVhfV09SRF9VTklUOyBqKyspIHsKIAkJCWVmdXNlX3RibFsoaSAqIDgpICsgKGogKiAyKV0gPQotCQkJICAgIChlZnVzZV93b3JkW2ldW2pdICYgMHhmZik7CisJCQkgICAgKGVmdXNlX3dvcmRbal1baV0gJiAweGZmKTsKIAkJCWVmdXNlX3RibFsoaSAqIDgpICsgKChqICogMikgKyAxKV0gPQotCQkJICAgICgoZWZ1c2Vfd29yZFtpXVtqXSA+PiA4KSAmIDB4ZmYpOworCQkJICAgICgoZWZ1c2Vfd29yZFtqXVtpXSA+PiA4KSAmIDB4ZmYpOwogCQl9CiAJfQogCkBAIC0zMjQsMTIgKzM0NiwxNyBAQAogCQlwYnVmW2ldID0gZWZ1c2VfdGJsW19vZmZzZXQgKyBpXTsKIAogCXJ0bGVmdXNlLT5lZnVzZV91c2VkYnl0ZXMgPSBlZnVzZV91dGlsaXplZDsKLQllZnVzZV91c2FnZSA9ICh1OCkoKGVmdXNlX3V0aWxpemVkICogMTAwKSAvIEVGVVNFX1JFQUxfQ09OVEVOVF9MRU4pOworCWVmdXNlX3VzYWdlID0gKHU4KSAoKGVmdXNlX3V0aWxpemVkICogMTAwKSAvIGVmdXNlX2xlbik7CiAJcnRsZWZ1c2UtPmVmdXNlX3VzZWRwZXJjZW50YWdlID0gZWZ1c2VfdXNhZ2U7CiAJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9FRlVTRV9CWVRFUywKIAkJCQkgICAgICAodTggKikmZWZ1c2VfdXRpbGl6ZWQpOwogCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfRUZVU0VfVVNBR0UsCiAJCQkJICAgICAgKHU4ICopJmVmdXNlX3VzYWdlKTsKK2RvbmU6CisJZm9yIChpID0gMDsgaSA8IEVGVVNFX01BWF9XT1JEX1VOSVQ7IGkrKykKKwkJa2ZyZWUoZWZ1c2Vfd29yZFtpXSk7CisJa2ZyZWUoZWZ1c2Vfd29yZCk7CisJa2ZyZWUoZWZ1c2VfdGJsKTsKIH0KIAogYm9vbCBlZnVzZV9zaGFkb3dfdXBkYXRlX2NoayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKQEAgLTMzOCwxMSArMzY1LDExIEBACiAJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKIAl1OCBzZWN0aW9uX2lkeCwgaSwgQmFzZTsKIAl1MTYgd29yZHNfbmVlZCA9IDAsIGhkcl9udW0gPSAwLCB0b3RhbGJ5dGVzLCBlZnVzZV91c2VkOwotCWJvb2wgYndvcmRjaGFuZ2VkLCBicmVzdWx0ID0gdHJ1ZTsKKwlib29sIHdvcmRjaGFuZ2VkLCByZXN1bHQgPSB0cnVlOwogCiAJZm9yIChzZWN0aW9uX2lkeCA9IDA7IHNlY3Rpb25faWR4IDwgMTY7IHNlY3Rpb25faWR4KyspIHsKIAkJQmFzZSA9IHNlY3Rpb25faWR4ICogODsKLQkJYndvcmRjaGFuZ2VkID0gZmFsc2U7CisJCXdvcmRjaGFuZ2VkID0gZmFsc2U7CiAKIAkJZm9yIChpID0gMDsgaSA8IDg7IGkgPSBpICsgMikgewogCQkJaWYgKChydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX0lOSVRfTUFQXVtCYXNlICsgaV0gIT0KQEAgLTM1MSwxMSArMzc4LDExIEBACiAJCQkgICAgIHJ0bGVmdXNlLT5lZnVzZV9tYXBbRUZVU0VfTU9ESUZZX01BUF1bQmFzZSArIGkgKwogCQkJCQkJCQkgICAxXSkpIHsKIAkJCQl3b3Jkc19uZWVkKys7Ci0JCQkJYndvcmRjaGFuZ2VkID0gdHJ1ZTsKKwkJCQl3b3JkY2hhbmdlZCA9IHRydWU7CiAJCQl9CiAJCX0KIAotCQlpZiAoYndvcmRjaGFuZ2VkID09IHRydWUpCisJCWlmICh3b3JkY2hhbmdlZCA9PSB0cnVlKQogCQkJaGRyX251bSsrOwogCX0KIApAQCAtMzY0LDE0ICszOTEsMTQgQEAKIAogCWlmICgodG90YWxieXRlcyArIGVmdXNlX3VzZWQpID49CiAJICAgIChFRlVTRV9NQVhfU0laRSAtIEVGVVNFX09PQl9QUk9URUNUX0JZVEVTKSkKLQkJYnJlc3VsdCA9IGZhbHNlOworCQlyZXN1bHQgPSBmYWxzZTsKIAogCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRUZVU0UsIERCR19MT1VELAogCQkgKCJlZnVzZV9zaGFkb3dfdXBkYXRlX2NoaygpOiB0b3RhbGJ5dGVzKCUjeCksICIKIAkJICAiaGRyX251bSglI3gpLCB3b3Jkc19uZWVkKCUjeCksIGVmdXNlX3VzZWQoJWQpXG4iLAogCQkgIHRvdGFsYnl0ZXMsIGhkcl9udW0sIHdvcmRzX25lZWQsIGVmdXNlX3VzZWQpKTsKIAotCXJldHVybiBicmVzdWx0OworCXJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgZWZ1c2Vfc2hhZG93X3JlYWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHR5cGUsCkBAIC0zOTQsNyArNDIxLDcgQEAKIAllbHNlIGlmICh0eXBlID09IDIpCiAJCWVmdXNlX3NoYWRvd193cml0ZV8yYnl0ZShodywgb2Zmc2V0LCAodTE2KSB2YWx1ZSk7CiAJZWxzZSBpZiAodHlwZSA9PSA0KQotCQllZnVzZV9zaGFkb3dfd3JpdGVfNGJ5dGUoaHcsIG9mZnNldCwgKHUzMikgdmFsdWUpOworCQllZnVzZV9zaGFkb3dfd3JpdGVfNGJ5dGUoaHcsIG9mZnNldCwgdmFsdWUpOwogCiB9CiAKQEAgLTQ3OCw5ICs1MDUsMTAgQEAKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKIAotCWlmIChydGxlZnVzZS0+YXV0b2xvYWRfZmFpbGZsYWcgPT0gdHJ1ZSkgewotCQltZW1zZXQoJnJ0bGVmdXNlLT5lZnVzZV9tYXBbRUZVU0VfSU5JVF9NQVBdWzBdLCAweEZGLCAxMjgpOwotCX0gZWxzZQorCWlmIChydGxlZnVzZS0+YXV0b2xvYWRfZmFpbGZsYWcgPT0gdHJ1ZSkKKwkJbWVtc2V0KCZydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX0lOSVRfTUFQXVswXSwgMHhGRiwKKwkJCXJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9IV1NFVF9NQVhfU0laRV0pOworCWVsc2UKIAkJZWZ1c2VfcmVhZF9hbGxfbWFwKGh3LCAmcnRsZWZ1c2UtPmVmdXNlX21hcFtFRlVTRV9JTklUX01BUF1bMF0pOwogCiAJbWVtY3B5KCZydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX01PRElGWV9NQVBdWzBdLApAQCAtNTcyLDcgKzYwMCw3IEBACiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXU4IHRtcGlkeCA9IDA7Ci0JaW50IGJyZXN1bHQ7CisJaW50IHJlc3VsdDsKIAogCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9DVFJMXSArIDEsCiAJCSAgICAgICAodTgpIChhZGRyICYgMHhmZikpOwpAQCAtNTkyLDE5ICs2MjAsMTggQEAKIAogCWlmICh0bXBpZHggPCAxMDApIHsKIAkJKmRhdGEgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9DVFJMXSk7Ci0JCWJyZXN1bHQgPSB0cnVlOworCQlyZXN1bHQgPSB0cnVlOwogCX0gZWxzZSB7CiAJCSpkYXRhID0gMHhmZjsKLQkJYnJlc3VsdCA9IGZhbHNlOworCQlyZXN1bHQgPSBmYWxzZTsKIAl9Ci0JcmV0dXJuIGJyZXN1bHQ7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIGludCBlZnVzZV9vbmVfYnl0ZV93cml0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IGFkZHIsIHU4IGRhdGEpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXU4IHRtcGlkeCA9IDA7Ci0JYm9vbCBicmVzdWx0OwogCiAJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FRlVTRSwgREJHX0xPVUQsCiAJCSAoIkFkZHIgPSAleCBEYXRhPSV4XG4iLCBhZGRyLCBkYXRhKSk7CkBAIC02MjYsMTcgKzY1MywxNiBAQAogCX0KIAogCWlmICh0bXBpZHggPCAxMDApCi0JCWJyZXN1bHQgPSB0cnVlOwotCWVsc2UKLQkJYnJlc3VsdCA9IGZhbHNlOworCQlyZXR1cm4gdHJ1ZTsKIAotCXJldHVybiBicmVzdWx0OworCXJldHVybiBmYWxzZTsKIH0KIAogc3RhdGljIHZvaWQgZWZ1c2VfcmVhZF9hbGxfbWFwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqIGVmdXNlKQogeworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAllZnVzZV9wb3dlcl9zd2l0Y2goaHcsIGZhbHNlLCB0cnVlKTsKLQlyZWFkX2VmdXNlKGh3LCAwLCAxMjgsIGVmdXNlKTsKKwlyZWFkX2VmdXNlKGh3LCAwLCBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfSFdTRVRfTUFYX1NJWkVdLCBlZnVzZSk7CiAJZWZ1c2VfcG93ZXJfc3dpdGNoKGh3LCBmYWxzZSwgZmFsc2UpOwogfQogCkBAIC02NDQsNyArNjcwLDcgQEAKIAkJCQl1OCBlZnVzZV9kYXRhLCB1OCBvZmZzZXQsIHU4ICp0bXBkYXRhLAogCQkJCXU4ICpyZWFkc3RhdGUpCiB7Ci0JYm9vbCBiZGF0YWVtcHR5ID0gdHJ1ZTsKKwlib29sIGRhdGFlbXB0eSA9IHRydWU7CiAJdTggaG9mZnNldDsKIAl1OCB0bXBpZHg7CiAJdTggaHdvcmRlbjsKQEAgLTY2MCwxMyArNjg2LDEzIEBACiAJCQkgICAgJmVmdXNlX2RhdGEpKSB7CiAJCQkJdG1wZGF0YVt0bXBpZHhdID0gZWZ1c2VfZGF0YTsKIAkJCQlpZiAoZWZ1c2VfZGF0YSAhPSAweGZmKQotCQkJCQliZGF0YWVtcHR5ID0gdHJ1ZTsKKwkJCQkJZGF0YWVtcHR5ID0gdHJ1ZTsKIAkJCX0KIAkJfQogCi0JCWlmIChiZGF0YWVtcHR5ID09IHRydWUpCisJCWlmIChkYXRhZW1wdHkgPT0gdHJ1ZSkgewogCQkJKnJlYWRzdGF0ZSA9IFBHX1NUQVRFX0RBVEE7Ci0JCWVsc2UgeworCQl9IGVsc2UgewogCQkJKmVmdXNlX2FkZHIgPSAqZWZ1c2VfYWRkciArICh3b3JkX2NudHMgKiAyKSArIDE7CiAJCQkqcmVhZHN0YXRlID0gUEdfU1RBVEVfSEVBREVSOwogCQl9CkBAIC02ODAsMTIgKzcwNiw5IEBACiBzdGF0aWMgaW50IGVmdXNlX3BnX3BhY2tldF9yZWFkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBvZmZzZXQsIHU4ICpkYXRhKQogewogCXU4IHJlYWRzdGF0ZSA9IFBHX1NUQVRFX0hFQURFUjsKLQotCWJvb2wgYmNvbnRpbnVhbCA9IHRydWU7Ci0KKwlib29sIGNvbnRpbnVhbCA9IHRydWU7CiAJdTggZWZ1c2VfZGF0YSwgd29yZF9jbnRzID0gMDsKIAl1MTYgZWZ1c2VfYWRkciA9IDA7Ci0JdTggaHdvcmRlbiA9IDA7CiAJdTggdG1wZGF0YVs4XTsKIAogCWlmIChkYXRhID09IE5VTEwpCkBAIC02OTYsNyArNzE5LDcgQEAKIAltZW1zZXQoZGF0YSwgMHhmZiwgUEdQS1RfREFUQV9TSVpFICogc2l6ZW9mKHU4KSk7CiAJbWVtc2V0KHRtcGRhdGEsIDB4ZmYsIFBHUEtUX0RBVEFfU0laRSAqIHNpemVvZih1OCkpOwogCi0Jd2hpbGUgKGJjb250aW51YWwgJiYgKGVmdXNlX2FkZHIgPCBFRlVTRV9NQVhfU0laRSkpIHsKKwl3aGlsZSAoY29udGludWFsICYmIChlZnVzZV9hZGRyIDwgRUZVU0VfTUFYX1NJWkUpKSB7CiAJCWlmIChyZWFkc3RhdGUgJiBQR19TVEFURV9IRUFERVIpIHsKIAkJCWlmIChlZnVzZV9vbmVfYnl0ZV9yZWFkKGh3LCBlZnVzZV9hZGRyLCAmZWZ1c2VfZGF0YSkKIAkJCSAgICAmJiAoZWZ1c2VfZGF0YSAhPSAweEZGKSkKQEAgLTcwNSw5ICs3MjgsOSBAQAogCQkJCQkJICAgICAgb2Zmc2V0LCB0bXBkYXRhLAogCQkJCQkJICAgICAgJnJlYWRzdGF0ZSk7CiAJCQllbHNlCi0JCQkJYmNvbnRpbnVhbCA9IGZhbHNlOworCQkJCWNvbnRpbnVhbCA9IGZhbHNlOwogCQl9IGVsc2UgaWYgKHJlYWRzdGF0ZSAmIFBHX1NUQVRFX0RBVEEpIHsKLQkJCWVmdXNlX3dvcmRfZW5hYmxlX2RhdGFfcmVhZChod29yZGVuLCB0bXBkYXRhLCBkYXRhKTsKKwkJCWVmdXNlX3dvcmRfZW5hYmxlX2RhdGFfcmVhZCgwLCB0bXBkYXRhLCBkYXRhKTsKIAkJCWVmdXNlX2FkZHIgPSBlZnVzZV9hZGRyICsgKHdvcmRfY250cyAqIDIpICsgMTsKIAkJCXJlYWRzdGF0ZSA9IFBHX1NUQVRFX0hFQURFUjsKIAkJfQpAQCAtNzI1LDEzICs3NDgsMTMgQEAKIH0KIAogc3RhdGljIHZvaWQgZWZ1c2Vfd3JpdGVfZGF0YV9jYXNlMShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2ICplZnVzZV9hZGRyLAotCQkJdTggZWZ1c2VfZGF0YSwgdTggb2Zmc2V0LCBpbnQgKmJjb250aW51YWwsCisJCQl1OCBlZnVzZV9kYXRhLCB1OCBvZmZzZXQsIGludCAqY29udGludWFsLAogCQkJdTggKndyaXRlX3N0YXRlLCBzdHJ1Y3QgcGdwa3Rfc3RydWN0ICp0YXJnZXRfcGt0LAotCQkJaW50ICpyZXBlYXRfdGltZXMsIGludCAqYnJlc3VsdCwgdTggd29yZF9lbikKKwkJCWludCAqcmVwZWF0X3RpbWVzLCBpbnQgKnJlc3VsdCwgdTggd29yZF9lbikKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJc3RydWN0IHBncGt0X3N0cnVjdCB0bXBfcGt0OwotCWludCBiZGF0YWVtcHR5ID0gdHJ1ZTsKKwlib29sIGRhdGFlbXB0eSA9IHRydWU7CiAJdTggb3JpZ2luYWxkYXRhWzggKiBzaXplb2YodTgpXTsKIAl1OCBiYWR3b3JkZW4gPSAweDBGOwogCXU4IG1hdGNoX3dvcmRfZW4sIHRtcF93b3JkX2VuOwpAQCAtNzUxLDEwICs3NzQsMTAgQEAKIAkJCXUxNiBhZGRyZXNzID0gKmVmdXNlX2FkZHIgKyAxICsgdG1waW5kZXg7CiAJCQlpZiAoZWZ1c2Vfb25lX2J5dGVfcmVhZChodywgYWRkcmVzcywKIAkJCSAgICAgJmVmdXNlX2RhdGEpICYmIChlZnVzZV9kYXRhICE9IDB4RkYpKQotCQkJCWJkYXRhZW1wdHkgPSBmYWxzZTsKKwkJCQlkYXRhZW1wdHkgPSBmYWxzZTsKIAkJfQogCi0JCWlmIChiZGF0YWVtcHR5ID09IGZhbHNlKSB7CisJCWlmIChkYXRhZW1wdHkgPT0gZmFsc2UpIHsKIAkJCSplZnVzZV9hZGRyID0gKmVmdXNlX2FkZHIgKyAodG1wX3dvcmRfY250cyAqIDIpICsgMTsKIAkJCSp3cml0ZV9zdGF0ZSA9IFBHX1NUQVRFX0hFQURFUjsKIAkJfSBlbHNlIHsKQEAgLTc5OSwyNCArODIyLDI1IEBACiAJCQkJCXRtcF93b3JkX2VuICY9ICh+QklUKDEpKTsKIAogCQkJCWlmICgodGFyZ2V0X3BrdC0+d29yZF9lbiAmIEJJVCgyKSkgXgotCQkJCQkobWF0Y2hfd29yZF9lbiAmIEJJVCgyKSkpCisJCQkJICAgICAobWF0Y2hfd29yZF9lbiAmIEJJVCgyKSkpCiAJCQkJCXRtcF93b3JkX2VuICY9ICh+QklUKDIpKTsKIAogCQkJCWlmICgodGFyZ2V0X3BrdC0+d29yZF9lbiAmIEJJVCgzKSkgXgotCQkJCSAgICAobWF0Y2hfd29yZF9lbiAmIEJJVCgzKSkpCisJCQkJICAgICAobWF0Y2hfd29yZF9lbiAmIEJJVCgzKSkpCiAJCQkJCXRtcF93b3JkX2VuICY9ICh+QklUKDMpKTsKIAogCQkJCWlmICgodG1wX3dvcmRfZW4gJiAweDBGKSAhPSAweDBGKSB7CiAJCQkJCSplZnVzZV9hZGRyID0gZWZ1c2VfZ2V0X2N1cnJlbnRfc2l6ZShodyk7CiAJCQkJCXRhcmdldF9wa3QtPm9mZnNldCA9IG9mZnNldDsKIAkJCQkJdGFyZ2V0X3BrdC0+d29yZF9lbiA9IHRtcF93b3JkX2VuOwotCQkJCX0gZWxzZQotCQkJCQkqYmNvbnRpbnVhbCA9IGZhbHNlOworCQkJCX0gZWxzZSB7CisJCQkJCSpjb250aW51YWwgPSBmYWxzZTsKKwkJCQl9CiAJCQkJKndyaXRlX3N0YXRlID0gUEdfU1RBVEVfSEVBREVSOwogCQkJCSpyZXBlYXRfdGltZXMgKz0gMTsKIAkJCQlpZiAoKnJlcGVhdF90aW1lcyA+IEVGVVNFX1JFUEVBVF9USFJFU0hPTERfKSB7Ci0JCQkJCSpiY29udGludWFsID0gZmFsc2U7Ci0JCQkJCSpicmVzdWx0ID0gZmFsc2U7CisJCQkJCSpjb250aW51YWwgPSBmYWxzZTsKKwkJCQkJKnJlc3VsdCA9IGZhbHNlOwogCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJKmVmdXNlX2FkZHIgKz0gKDIgKiB0bXBfd29yZF9jbnRzKSArIDE7CkBAIC04MzAsOSArODU0LDkgQEAKIH0KIAogc3RhdGljIHZvaWQgZWZ1c2Vfd3JpdGVfZGF0YV9jYXNlMihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2ICplZnVzZV9hZGRyLAotCQkJCSAgIGludCAqYmNvbnRpbnVhbCwgdTggKndyaXRlX3N0YXRlLAorCQkJCSAgIGludCAqY29udGludWFsLCB1OCAqd3JpdGVfc3RhdGUsCiAJCQkJICAgc3RydWN0IHBncGt0X3N0cnVjdCB0YXJnZXRfcGt0LAotCQkJCSAgIGludCAqcmVwZWF0X3RpbWVzLCBpbnQgKmJyZXN1bHQpCisJCQkJICAgaW50ICpyZXBlYXRfdGltZXMsIGludCAqcmVzdWx0KQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAlzdHJ1Y3QgcGdwa3Rfc3RydWN0IHRtcF9wa3Q7CkBAIC04NDYsMTQgKzg3MCwxNCBAQAogCWVmdXNlX29uZV9ieXRlX3dyaXRlKGh3LCAqZWZ1c2VfYWRkciwgcGdfaGVhZGVyKTsKIAllZnVzZV9vbmVfYnl0ZV9yZWFkKGh3LCAqZWZ1c2VfYWRkciwgJnRtcF9oZWFkZXIpOwogCi0JaWYgKHRtcF9oZWFkZXIgPT0gcGdfaGVhZGVyKQorCWlmICh0bXBfaGVhZGVyID09IHBnX2hlYWRlcikgewogCQkqd3JpdGVfc3RhdGUgPSBQR19TVEFURV9EQVRBOwotCWVsc2UgaWYgKHRtcF9oZWFkZXIgPT0gMHhGRikgeworCX0gZWxzZSBpZiAodG1wX2hlYWRlciA9PSAweEZGKSB7CiAJCSp3cml0ZV9zdGF0ZSA9IFBHX1NUQVRFX0hFQURFUjsKIAkJKnJlcGVhdF90aW1lcyArPSAxOwogCQlpZiAoKnJlcGVhdF90aW1lcyA+IEVGVVNFX1JFUEVBVF9USFJFU0hPTERfKSB7Ci0JCQkqYmNvbnRpbnVhbCA9IGZhbHNlOwotCQkJKmJyZXN1bHQgPSBmYWxzZTsKKwkJCSpjb250aW51YWwgPSBmYWxzZTsKKwkJCSpyZXN1bHQgPSBmYWxzZTsKIAkJfQogCX0gZWxzZSB7CiAJCXRtcF9wa3Qub2Zmc2V0ID0gKHRtcF9oZWFkZXIgPj4gNCkgJiAweDBGOwpAQCAtODc1LDE3ICs4OTksMTkgQEAKIAkJCQkJCSAgICAgIHJlb3JnX3dvcmRlbiwKIAkJCQkJCSAgICAgIG9yaWdpbmFsZGF0YSk7CiAJCQkJKmVmdXNlX2FkZHIgPSBlZnVzZV9nZXRfY3VycmVudF9zaXplKGh3KTsKLQkJCSB9IGVsc2UKKwkJCX0gZWxzZSB7CiAJCQkJKmVmdXNlX2FkZHIgPSAqZWZ1c2VfYWRkciArICh0bXBfd29yZF9jbnRzICogMikKIAkJCQkJICAgICAgKyAxOwotCQl9IGVsc2UKKwkJCX0KKwkJfSBlbHNlIHsKIAkJCSplZnVzZV9hZGRyID0gKmVmdXNlX2FkZHIgKyAodG1wX3dvcmRfY250cyAqIDIpICsgMTsKKwkJfQogCiAJCSp3cml0ZV9zdGF0ZSA9IFBHX1NUQVRFX0hFQURFUjsKIAkJKnJlcGVhdF90aW1lcyArPSAxOwogCQlpZiAoKnJlcGVhdF90aW1lcyA+IEVGVVNFX1JFUEVBVF9USFJFU0hPTERfKSB7Ci0JCQkqYmNvbnRpbnVhbCA9IGZhbHNlOwotCQkJKmJyZXN1bHQgPSBmYWxzZTsKKwkJCSpjb250aW51YWwgPSBmYWxzZTsKKwkJCSpyZXN1bHQgPSBmYWxzZTsKIAkJfQogCiAJCVJUUFJJTlQocnRscHJpdiwgRkVFUFJPTSwgRUZVU0VfUEcsCkBAIC04OTksNyArOTI1LDcgQEAKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJc3RydWN0IHBncGt0X3N0cnVjdCB0YXJnZXRfcGt0OwogCXU4IHdyaXRlX3N0YXRlID0gUEdfU1RBVEVfSEVBREVSOwotCWludCBiY29udGludWFsID0gdHJ1ZSwgYmRhdGFlbXB0eSA9IHRydWUsIGJyZXN1bHQgPSB0cnVlOworCWludCBjb250aW51YWwgPSB0cnVlLCBkYXRhZW1wdHkgPSB0cnVlLCByZXN1bHQgPSB0cnVlOwogCXUxNiBlZnVzZV9hZGRyID0gMDsKIAl1OCBlZnVzZV9kYXRhOwogCXU4IHRhcmdldF93b3JkX2NudHMgPSAwOwpAQCAtOTIzLDExICs5NDksMTEgQEAKIAogCVJUUFJJTlQocnRscHJpdiwgRkVFUFJPTSwgRUZVU0VfUEcsICgiZWZ1c2UgUG93ZXIgT05cbiIpKTsKIAotCXdoaWxlIChiY29udGludWFsICYmIChlZnVzZV9hZGRyIDwKKwl3aGlsZSAoY29udGludWFsICYmIChlZnVzZV9hZGRyIDwKIAkgICAgICAgKEVGVVNFX01BWF9TSVpFIC0gRUZVU0VfT09CX1BST1RFQ1RfQllURVMpKSkgewogCiAJCWlmICh3cml0ZV9zdGF0ZSA9PSBQR19TVEFURV9IRUFERVIpIHsKLQkJCWJkYXRhZW1wdHkgPSB0cnVlOworCQkJZGF0YWVtcHR5ID0gdHJ1ZTsKIAkJCWJhZHdvcmRlbiA9IDB4MEY7CiAJCQlSVFBSSU5UKHJ0bHByaXYsIEZFRVBST00sIEVGVVNFX1BHLAogCQkJCSgiZWZ1c2UgUEdfU1RBVEVfSEVBREVSXG4iKSk7CkBAIC05MzYsMzIgKzk2MiwzMCBAQAogCQkJICAgIChlZnVzZV9kYXRhICE9IDB4RkYpKQogCQkJCWVmdXNlX3dyaXRlX2RhdGFfY2FzZTEoaHcsICZlZnVzZV9hZGRyLAogCQkJCQkJICAgICAgIGVmdXNlX2RhdGEsIG9mZnNldCwKLQkJCQkJCSAgICAgICAmYmNvbnRpbnVhbCwKKwkJCQkJCSAgICAgICAmY29udGludWFsLAogCQkJCQkJICAgICAgICZ3cml0ZV9zdGF0ZSwgJnRhcmdldF9wa3QsCi0JCQkJCQkgICAgICAgJnJlcGVhdF90aW1lcywgJmJyZXN1bHQsCisJCQkJCQkgICAgICAgJnJlcGVhdF90aW1lcywgJnJlc3VsdCwKIAkJCQkJCSAgICAgICB3b3JkX2VuKTsKIAkJCWVsc2UKIAkJCQllZnVzZV93cml0ZV9kYXRhX2Nhc2UyKGh3LCAmZWZ1c2VfYWRkciwKLQkJCQkJCSAgICAgICAmYmNvbnRpbnVhbCwKKwkJCQkJCSAgICAgICAmY29udGludWFsLAogCQkJCQkJICAgICAgICZ3cml0ZV9zdGF0ZSwKIAkJCQkJCSAgICAgICB0YXJnZXRfcGt0LAogCQkJCQkJICAgICAgICZyZXBlYXRfdGltZXMsCi0JCQkJCQkgICAgICAgJmJyZXN1bHQpOworCQkJCQkJICAgICAgICZyZXN1bHQpOwogCiAJCX0gZWxzZSBpZiAod3JpdGVfc3RhdGUgPT0gUEdfU1RBVEVfREFUQSkgewogCQkJUlRQUklOVChydGxwcml2LCBGRUVQUk9NLCBFRlVTRV9QRywKIAkJCQkoImVmdXNlIFBHX1NUQVRFX0RBVEFcbiIpKTsKLQkJCWJhZHdvcmRlbiA9IDB4MGY7CiAJCQliYWR3b3JkZW4gPQogCQkJICAgIGVmdXNlX3dvcmRfZW5hYmxlX2RhdGFfd3JpdGUoaHcsIGVmdXNlX2FkZHIgKyAxLAogCQkJCQkJCSB0YXJnZXRfcGt0LndvcmRfZW4sCiAJCQkJCQkJIHRhcmdldF9wa3QuZGF0YSk7CiAKIAkJCWlmICgoYmFkd29yZGVuICYgMHgwRikgPT0gMHgwRikgewotCQkJCWJjb250aW51YWwgPSBmYWxzZTsKKwkJCQljb250aW51YWwgPSBmYWxzZTsKIAkJCX0gZWxzZSB7Ci0JCQkJZWZ1c2VfYWRkciA9Ci0JCQkJICAgIGVmdXNlX2FkZHIgKyAoMiAqIHRhcmdldF93b3JkX2NudHMpICsgMTsKKwkJCQllZnVzZV9hZGRyICs9ICgyICogdGFyZ2V0X3dvcmRfY250cykgKyAxOwogCiAJCQkJdGFyZ2V0X3BrdC5vZmZzZXQgPSBvZmZzZXQ7CiAJCQkJdGFyZ2V0X3BrdC53b3JkX2VuID0gYmFkd29yZGVuOwpAQCAtOTcxLDggKzk5NSw4IEBACiAJCQkJd3JpdGVfc3RhdGUgPSBQR19TVEFURV9IRUFERVI7CiAJCQkJcmVwZWF0X3RpbWVzKys7CiAJCQkJaWYgKHJlcGVhdF90aW1lcyA+IEVGVVNFX1JFUEVBVF9USFJFU0hPTERfKSB7Ci0JCQkJCWJjb250aW51YWwgPSBmYWxzZTsKLQkJCQkJYnJlc3VsdCA9IGZhbHNlOworCQkJCQljb250aW51YWwgPSBmYWxzZTsKKwkJCQkJcmVzdWx0ID0gZmFsc2U7CiAJCQkJfQogCQkJCVJUUFJJTlQocnRscHJpdiwgRkVFUFJPTSwgRUZVU0VfUEcsCiAJCQkJCSgiZWZ1c2UgUEdfU1RBVEVfSEVBREVSLTNcbiIpKTsKQEAgLTEwNzIsMTMgKzEwOTYsMTUgQEAKIAlyZXR1cm4gYmFkd29yZGVuOwogfQogCi1zdGF0aWMgdm9pZCBlZnVzZV9wb3dlcl9zd2l0Y2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGJ3cml0ZSwgdTggcHdyc3RhdGUpCitzdGF0aWMgdm9pZCBlZnVzZV9wb3dlcl9zd2l0Y2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHdyaXRlLCB1OCBwd3JzdGF0ZSkKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKIAl1OCB0ZW1wdmFsOwogCXUxNiB0bXBWMTY7CiAKLQlpZiAocHdyc3RhdGUgPT0gdHJ1ZSkgeworCWlmIChwd3JzdGF0ZSAmJiAocnRsaGFsLT5od190eXBlICE9CisJCUhBUkRXQVJFX1RZUEVfUlRMODE5MlNFKSkgewogCQl0bXBWMTYgPSBydGxfcmVhZF93b3JkKHJ0bHByaXYsCiAJCQkJICAgICAgIHJ0bHByaXYtPmNmZy0+bWFwc1tTWVNfSVNPX0NUUkxdKTsKIAkJaWYgKCEodG1wVjE2ICYgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX1BXQ19FVjEyVl0pKSB7CkBAIC0xMTA2LDIwICsxMTMyLDI5IEBACiAJCX0KIAl9CiAKLQlpZiAocHdyc3RhdGUgPT0gdHJ1ZSkgewotCQlpZiAoYndyaXRlID09IHRydWUpIHsKKwlpZiAocHdyc3RhdGUpIHsKKwkJaWYgKHdyaXRlKSB7CiAJCQl0ZW1wdmFsID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LAogCQkJCQkJcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX1RFU1RdICsKIAkJCQkJCTMpOwotCQkJdGVtcHZhbCAmPSAweDBGOwotCQkJdGVtcHZhbCB8PSAoVk9MVEFHRV9WMjUgPDwgNCk7CisKKwkJCWlmIChydGxoYWwtPmh3X3R5cGUgIT0gSEFSRFdBUkVfVFlQRV9SVEw4MTkyU0UpIHsKKwkJCQl0ZW1wdmFsICY9IDB4MEY7CisJCQkJdGVtcHZhbCB8PSAoVk9MVEFHRV9WMjUgPDwgNCk7CisJCQl9CisKIAkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsCiAJCQkJICAgICAgIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9URVNUXSArIDMsCiAJCQkJICAgICAgICh0ZW1wdmFsIHwgMHg4MCkpOwogCQl9CiAKKwkJaWYgKHJ0bGhhbC0+aHdfdHlwZSA9PSBIQVJEV0FSRV9UWVBFX1JUTDgxOTJTRSkgeworCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0NMS10sCisJCQkJCQkweDAzKTsKKwkJfQorCiAJfSBlbHNlIHsKLQkJaWYgKGJ3cml0ZSA9PSB0cnVlKSB7CisJCWlmICh3cml0ZSkgewogCQkJdGVtcHZhbCA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwKIAkJCQkJCXJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9URVNUXSArCiAJCQkJCQkzKTsKQEAgLTExMjgsMTggKzExNjMsMjMgQEAKIAkJCQkgICAgICAgKHRlbXB2YWwgJiAweDdGKSk7CiAJCX0KIAorCQlpZiAocnRsaGFsLT5od190eXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODE5MlNFKSB7CisJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfQ0xLXSwKKwkJCQkJCTB4MDIpOworCQl9CisKIAl9CiAKIH0KIAogc3RhdGljIHUxNiBlZnVzZV9nZXRfY3VycmVudF9zaXplKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewotCWludCBiY29udGludWFsID0gdHJ1ZTsKKwlpbnQgY29udGludWFsID0gdHJ1ZTsKIAl1MTYgZWZ1c2VfYWRkciA9IDA7CiAJdTggaG9mZnNldCwgaHdvcmRlbjsKIAl1OCBlZnVzZV9kYXRhLCB3b3JkX2NudHM7CiAKLQl3aGlsZSAoYmNvbnRpbnVhbCAmJiBlZnVzZV9vbmVfYnl0ZV9yZWFkKGh3LCBlZnVzZV9hZGRyLCAmZWZ1c2VfZGF0YSkKKwl3aGlsZSAoY29udGludWFsICYmIGVmdXNlX29uZV9ieXRlX3JlYWQoaHcsIGVmdXNlX2FkZHIsICZlZnVzZV9kYXRhKQogCSAgICAgICAmJiAoZWZ1c2VfYWRkciA8IEVGVVNFX01BWF9TSVpFKSkgewogCQlpZiAoZWZ1c2VfZGF0YSAhPSAweEZGKSB7CiAJCQlob2Zmc2V0ID0gKGVmdXNlX2RhdGEgPj4gNCkgJiAweDBGOwpAQCAtMTE0Nyw3ICsxMTg3LDcgQEAKIAkJCXdvcmRfY250cyA9IGVmdXNlX2NhbGN1bGF0ZV93b3JkX2NudHMoaHdvcmRlbik7CiAJCQllZnVzZV9hZGRyID0gZWZ1c2VfYWRkciArICh3b3JkX2NudHMgKiAyKSArIDE7CiAJCX0gZWxzZSB7Ci0JCQliY29udGludWFsID0gZmFsc2U7CisJCQljb250aW51YWwgPSBmYWxzZTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9lZnVzZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9lZnVzZS5oCmluZGV4IDQ3Nzc0ZGQuLjE2NGRhYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvZWZ1c2UuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2VmdXNlLmgKQEAgLTMwLDkgKzMwLDEwIEBACiAjaWZuZGVmIF9fUlRMX0VGVVNFX0hfCiAjZGVmaW5lIF9fUlRMX0VGVVNFX0hfCiAKKyNkZWZpbmUgRUZVU0VfSUNfSURfT0ZGU0VUCQk1MDYKKwogI2RlZmluZSBFRlVTRV9SRUFMX0NPTlRFTlRfTEVOCQk1MTIKICNkZWZpbmUgRUZVU0VfTUFQX0xFTgkJCTEyOAotI2RlZmluZSBFRlVTRV9NQVhfU0VDVElPTgkJMTYKICNkZWZpbmUgRUZVU0VfTUFYX1dPUkRfVU5JVAkJNAogCiAjZGVmaW5lIEVGVVNFX0lOSVRfTUFQCQkJMApAQCAtNTIsNiArNTMsNyBAQAogI2RlZmluZSBfUFJFX0VYRUNVVEVfUkVBRF9DTURfCiAKICNkZWZpbmUgRUZVU0VfUkVQRUFUX1RIUkVTSE9MRF8JCTMKKyNkZWZpbmUgRUZVU0VfRVJST0VfSEFORExFCQkxCiAKIHN0cnVjdCBlZnVzZV9tYXAgewogCXU4IG9mZnNldDsKQEAgLTEwMyw2ICsxMDUsNyBAQAogCXU4IHR4X3Bvd2VyX2dbMTRdOwogfTsKIAorZXh0ZXJuIHZvaWQgcmVhZF9lZnVzZV9ieXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgX29mZnNldCwgdTggKnBidWYpOwogZXh0ZXJuIHZvaWQgZWZ1c2VfaW5pdGlhbGl6ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiBleHRlcm4gdTggZWZ1c2VfcmVhZF8xYnl0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IGFkZHJlc3MpOwogZXh0ZXJuIHZvaWQgZWZ1c2Vfd3JpdGVfMWJ5dGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBhZGRyZXNzLCB1OCB2YWx1ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wY2kuYwppbmRleCA1OTM4ZjZlLi5hNDA5NTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcGNpLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJwY2kuaCIKICNpbmNsdWRlICJiYXNlLmgiCiAjaW5jbHVkZSAicHMuaCIKKyNpbmNsdWRlICJlZnVzZS5oIgogCiBzdGF0aWMgY29uc3QgdTE2IHBjaWJyaWRnZV92ZW5kb3JzW1BDSV9CUklER0VfVkVORE9SX01BWF0gPSB7CiAJSU5URUxfVkVORE9SX0lELApAQCAtNDAsNiArNDEsMzEgQEAKIAlTSVNfVkVORE9SX0lECiB9OwogCitzdGF0aWMgY29uc3QgdTggYWNfdG9faHdxW10gPSB7CisJVk9fUVVFVUUsCisJVklfUVVFVUUsCisJQkVfUVVFVUUsCisJQktfUVVFVUUKK307CisKK3N0YXRpYyB1OCBfcnRsX21hY190b19od3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCV9fbGUxNiBmYyA9IHJ0bF9nZXRfZmMoc2tiKTsKKwl1OCBxdWV1ZV9pbmRleCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOworCisJaWYgKHVubGlrZWx5KGllZWU4MDIxMV9pc19iZWFjb24oZmMpKSkKKwkJcmV0dXJuIEJFQUNPTl9RVUVVRTsKKwlpZiAoaWVlZTgwMjExX2lzX21nbXQoZmMpKQorCQlyZXR1cm4gTUdOVF9RVUVVRTsKKwlpZiAocnRsaGFsLT5od190eXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODE5MlNFKQorCQlpZiAoaWVlZTgwMjExX2lzX251bGxmdW5jKGZjKSkKKwkJCXJldHVybiBISUdIX1FVRVVFOworCisJcmV0dXJuIGFjX3RvX2h3cVtxdWV1ZV9pbmRleF07Cit9CisKIC8qIFVwZGF0ZSBQQ0kgZGVwZW5kZW50IGRlZmF1bHQgc2V0dGluZ3MqLwogc3RhdGljIHZvaWQgX3J0bF9wY2lfdXBkYXRlX2RlZmF1bHRfc2V0dGluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKQEAgLTQ4LDYgKzc0LDcgQEAKIAlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKIAlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOwogCXU4IHBjaWJyaWRnZV92ZW5kb3IgPSBwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX3ZlbmRvcjsKKwl1OCBpbml0X2FzcG07CiAKIAlwcHNjLT5yZWdfcmZwc19sZXZlbCA9IDA7CiAJcHBzYy0+c3VwcG9ydF9hc3BtID0gMDsKQEAgLTEyNSw3ICsxNTIsNyBAQAogCQkJYm9vbCBzdXBwb3J0X2JhY2tkb29yID0gdHJ1ZTsKIAkJCXBwc2MtPnN1cHBvcnRfYXNwbSA9IHN1cHBvcnRfYXNwbTsKIAotCQkJLyppZihwcml2LT5vZW1faWQgPT0gUlRfQ0lEX1RPU0hJQkEgJiYKKwkJCS8qaWYgKHByaXYtPm9lbV9pZCA9PSBSVF9DSURfVE9TSElCQSAmJgogCQkJICAgIXByaXYtPm5kaXNfYWRhcHRlci5hbWRfbDFfcGF0Y2gpCiAJCQkgICBzdXBwb3J0X2JhY2tkb29yID0gZmFsc2U7ICovCiAKQEAgLTE0NSw2ICsxNzIsMTMgQEAKIAkJCSAoInN3aXRjaCBjYXNlIG5vdCBwcm9jZXNzXG4iKSk7CiAJCWJyZWFrOwogCX0KKworCS8qIHRvc2hpYmEgYXNwbSBpc3N1ZSwgdG9zaGliYSB3aWxsIHNldCBhc3BtIHNlbGZseQorCSAqIHNvIHdlIHNob3VsZCBub3Qgc2V0IGFzcG0gaW4gZHJpdmVyICovCisJcGNpX3JlYWRfY29uZmlnX2J5dGUocnRscGNpLT5wZGV2LCAweDgwLCAmaW5pdF9hc3BtKTsKKwlpZiAocnRscHJpdi0+cnRsaGFsLmh3X3R5cGUgPT0gSEFSRFdBUkVfVFlQRV9SVEw4MTkyU0UgJiYKKwkJaW5pdF9hc3BtID09IDB4NDMpCisJCXBwc2MtPnN1cHBvcnRfYXNwbSA9IGZhbHNlOwogfQogCiBzdGF0aWMgYm9vbCBfcnRsX3BjaV9wbGF0Zm9ybV9zd2l0Y2hfZGV2aWNlX3BjaV9hc3BtKApAQCAtMTUyLDI4ICsxODYsMjggQEAKIAkJCXU4IHZhbHVlKQogewogCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7Ci0JYm9vbCBicmVzdWx0ID0gZmFsc2U7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKIAotCXZhbHVlIHw9IDB4NDA7CisJaWYgKHJ0bGhhbC0+aHdfdHlwZSAhPSBIQVJEV0FSRV9UWVBFX1JUTDgxOTJTRSkKKwkJdmFsdWUgfD0gMHg0MDsKIAogCXBjaV93cml0ZV9jb25maWdfYnl0ZShydGxwY2ktPnBkZXYsIDB4ODAsIHZhbHVlKTsKIAotCXJldHVybiBicmVzdWx0OworCXJldHVybiBmYWxzZTsKIH0KIAogLypXaGVuIHdlIHNldCAweDAxIHRvIGVuYWJsZSBjbGsgcmVxdWVzdC4gU2V0IDB4MCB0byBkaXNhYmxlIGNsayByZXEuKi8KIHN0YXRpYyBib29sIF9ydGxfcGNpX3N3aXRjaF9jbGtfcmVxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCB2YWx1ZSkKIHsKIAlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOwotCXU4IGJ1ZmZlcjsKLQlib29sIGJyZXN1bHQgPSBmYWxzZTsKLQotCWJ1ZmZlciA9IHZhbHVlOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CiAKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocnRscGNpLT5wZGV2LCAweDgxLCB2YWx1ZSk7Ci0JYnJlc3VsdCA9IHRydWU7CiAKLQlyZXR1cm4gYnJlc3VsdDsKKwlpZiAocnRsaGFsLT5od190eXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODE5MlNFKQorCQl1ZGVsYXkoMTAwKTsKKworCXJldHVybiB0cnVlOwogfQogCiAvKkRpc2FibGUgUlRMODE5MlNFIEFTUE0gJiBEaXNhYmxlIFBjaSBCcmlkZ2UgQVNQTSovCkBAIC0xOTEsNiArMjI1LDEwIEBACiAJdTE2IHBjaWJyaWRnZV9saW5rY3RybHJlZyA9IHBjaXByaXYtPm5kaXNfYWRhcHRlci4KIAkJCQlwY2licmlkZ2VfbGlua2N0cmxyZWc7CiAJdTE2IGFzcG1sZXZlbCA9IDA7CisJdTggdG1wX3UxYiA9IDA7CisKKwlpZiAoIXBwc2MtPnN1cHBvcnRfYXNwbSkKKwkJcmV0dXJuOwogCiAJaWYgKHBjaWJyaWRnZV92ZW5kb3IgPT0gUENJX0JSSURHRV9WRU5ET1JfVU5LTk9XTikgewogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfVFJBQ0UsCkBAIC0yMDQsMTEgKzI0Miw4IEBACiAJCV9ydGxfcGNpX3N3aXRjaF9jbGtfcmVxKGh3LCAweDApOwogCX0KIAotCWlmICgxKSB7Ci0JCS8qZm9yIHByb21pc2luZyBkZXZpY2Ugd2lsbCBpbiBMMCBzdGF0ZSBhZnRlciBhbiBJL08uICovCi0JCXU4IHRtcF91MWI7Ci0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHJ0bHBjaS0+cGRldiwgMHg4MCwgJnRtcF91MWIpOwotCX0KKwkvKmZvciBwcm9taXNpbmcgZGV2aWNlIHdpbGwgaW4gTDAgc3RhdGUgYWZ0ZXIgYW4gSS9PLiAqLworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHJ0bHBjaS0+cGRldiwgMHg4MCwgJnRtcF91MWIpOwogCiAJLypTZXQgY29ycmVzcG9uZGluZyB2YWx1ZS4gKi8KIAlhc3BtbGV2ZWwgfD0gQklUKDApIHwgQklUKDEpOwpAQCAtMjI0LDcgKzI1OSw2IEBACiAJcnRsX3BjaV9yYXdfd3JpdGVfcG9ydF91Y2hhcihQQ0lfQ09ORl9EQVRBLCBwY2licmlkZ2VfbGlua2N0cmxyZWcpOwogCiAJdWRlbGF5KDUwKTsKLQogfQogCiAvKgpAQCAtMjQ5LDYgKzI4Myw5IEBACiAJdTggdV9wY2licmlkZ2VfYXNwbXNldHRpbmc7CiAJdTggdV9kZXZpY2VfYXNwbXNldHRpbmc7CiAKKwlpZiAoIXBwc2MtPnN1cHBvcnRfYXNwbSkKKwkJcmV0dXJuOworCiAJaWYgKHBjaWJyaWRnZV92ZW5kb3IgPT0gUENJX0JSSURHRV9WRU5ET1JfVU5LTk9XTikgewogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfVFJBQ0UsCiAJCQkgKCJQQ0koQnJpZGdlKSBVTktOT1dOLlxuIikpOwpAQCAtMjkzLDcgKzMzMCw3IEBACiAJCQkJCSAgICAgUlRfUkZfT0ZGX0xFVkxfQ0xLX1JFUSkgPyAxIDogMCk7CiAJCVJUX1NFVF9QU19MRVZFTChwcHNjLCBSVF9SRl9PRkZfTEVWTF9DTEtfUkVRKTsKIAl9Ci0JdWRlbGF5KDIwMCk7CisJdWRlbGF5KDEwMCk7CiB9CiAKIHN0YXRpYyBib29sIHJ0bF9wY2lfZ2V0X2FtZF9sMV9wYXRjaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKQEAgLTMzMCwxMyArMzY3LDEzIEBACiAJdTggY2FwYWJpbGl0eW9mZnNldCA9IHBjaXByaXYtPm5kaXNfYWRhcHRlci5wY2licmlkZ2VfcGNpZWhkcl9vZmZzZXQ7CiAJdTMyIHBjaWNmZ19hZGRycG9ydCA9IHBjaXByaXYtPm5kaXNfYWRhcHRlci5wY2ljZmdfYWRkcnBvcnQ7CiAJdTggbGlua2N0cmxfcmVnOwotCXU4IG51bTRiQnl0ZXM7CisJdTggbnVtNGJieXRlczsKIAotCW51bTRiQnl0ZXMgPSAoY2FwYWJpbGl0eW9mZnNldCArIDB4MTApIC8gNDsKKwludW00YmJ5dGVzID0gKGNhcGFiaWxpdHlvZmZzZXQgKyAweDEwKSAvIDQ7CiAKIAkvKlJlYWQgIExpbmsgQ29udHJvbCBSZWdpc3RlciAqLwogCXJ0bF9wY2lfcmF3X3dyaXRlX3BvcnRfdWxvbmcoUENJX0NPTkZfQUREUkVTUywKLQkJCQkgICAgIHBjaWNmZ19hZGRycG9ydCArIChudW00YkJ5dGVzIDw8IDIpKTsKKwkJCQkgICAgIHBjaWNmZ19hZGRycG9ydCArIChudW00YmJ5dGVzIDw8IDIpKTsKIAlydGxfcGNpX3Jhd19yZWFkX3BvcnRfdWNoYXIoUENJX0NPTkZfREFUQSwgJmxpbmtjdHJsX3JlZyk7CiAKIAlwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX2xpbmtjdHJscmVnID0gbGlua2N0cmxfcmVnOwpAQCAtMzY5LDcgKzQwNiw3IEBACiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4NzBmLCB0bXApOwogfQogCi1zdGF0aWMgdm9pZCBfcnRsX3BjaV9pbml0aWFsaXplX2FkYXB0ZXJfY29tbW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQorc3RhdGljIHZvaWQgcnRsX3BjaV9pbml0X2FzcG0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CiAKQEAgLTM4Myw1MiArNDIwLDYgQEAKIAogfQogCi1zdGF0aWMgdm9pZCBydGxfcGNpX2luaXRfYXNwbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKLXsKLQlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOwotCi0JLypjbG9zZSBBU1BNIGZvciBBTUQgZGVmYXVsdGx5ICovCi0JcnRscGNpLT5jb25zdF9hbWRwY2lfYXNwbSA9IDA7Ci0KLQkvKgotCSAqIEFTUE0gUFMgbW9kZS4KLQkgKiAwIC0gRGlzYWJsZSBBU1BNLAotCSAqIDEgLSBFbmFibGUgQVNQTSB3aXRob3V0IENsb2NrIFJlcSwKLQkgKiAyIC0gRW5hYmxlIEFTUE0gd2l0aCBDbG9jayBSZXEsCi0JICogMyAtIEFsd2F5cyBFbmFibGUgQVNQTSB3aXRoIENsb2NrIFJlcSwKLQkgKiA0IC0gQWx3YXlzIEVuYWJsZSBBU1BNIHdpdGhvdXQgQ2xvY2sgUmVxLgotCSAqIHNldCBkZWZ1bHQgdG8gUlRMODE5MkNFOjMgUlRMODE5MkU6MgotCSAqICovCi0JcnRscGNpLT5jb25zdF9wY2lfYXNwbSA9IDM7Ci0KLQkvKlNldHRpbmcgZm9yIFBDSS1FIGRldmljZSAqLwotCXJ0bHBjaS0+Y29uc3RfZGV2aWNlcGNpX2FzcG1fc2V0dGluZyA9IDB4MDM7Ci0KLQkvKlNldHRpbmcgZm9yIFBDSS1FIGJyaWRnZSAqLwotCXJ0bHBjaS0+Y29uc3RfaG9zdHBjaV9hc3BtX3NldHRpbmcgPSAweDAyOwotCi0JLyoKLQkgKiBJbiBIdy9TdyBSYWRpbyBPZmYgc2l0dWF0aW9uLgotCSAqIDAgLSBEZWZhdWx0LAotCSAqIDEgLSBGcm9tIEFTUE0gc2V0dGluZyB3aXRob3V0IGxvdyBNYWMgUHdyLAotCSAqIDIgLSBGcm9tIEFTUE0gc2V0dGluZyB3aXRoIGxvdyBNYWMgUHdyLAotCSAqIDMgLSBCdXMgRDMKLQkgKiBzZXQgZGVmYXVsdCB0byBSVEw4MTkyQ0U6MCBSVEw4MTkyU0U6MgotCSAqLwotCXJ0bHBjaS0+Y29uc3RfaHdzd19yZm9mZl9kMyA9IDA7Ci0KLQkvKgotCSAqIFRoaXMgc2V0dGluZyB3b3JrcyBmb3IgdGhvc2UgZGV2aWNlIHdpdGgKLQkgKiBiYWNrZG9vciBBU1BNIHNldHRpbmcgc3VjaCBhcyBFUEhZIHNldHRpbmcuCi0JICogMCAtIE5vdCBzdXBwb3J0IEFTUE0sCi0JICogMSAtIFN1cHBvcnQgQVNQTSwKLQkgKiAyIC0gQWNjb3JkaW5nIHRvIGNoaXBzZXQuCi0JICovCi0JcnRscGNpLT5jb25zdF9zdXBwb3J0X3BjaWFzcG0gPSAxOwotCi0JX3J0bF9wY2lfaW5pdGlhbGl6ZV9hZGFwdGVyX2NvbW1vbihodyk7Ci19Ci0KIHN0YXRpYyB2b2lkIF9ydGxfcGNpX2lvX2hhbmRsZXJfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKQEAgLTQ1MCw2ICs0NDEsOTAgQEAKIHsKIH0KIAorc3RhdGljIGJvb2wgX3J0bF91cGRhdGVfZWFybHltb2RlX2luZm8oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCXN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBydGxfdGNiX2Rlc2MgKnRjYl9kZXNjLCB1OCB0aWQpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwl1OCBhZGRpdGlvbmxlbiA9IEZDU19MRU47CisJc3RydWN0IHNrX2J1ZmYgKm5leHRfc2tiOworCisJLyogaGVyZSBvcGVuIGlzIDQsIHdlcC90a2lwIGlzIDgsIGFlcyBpcyAxMiovCisJaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5KQorCQlhZGRpdGlvbmxlbiArPSBpbmZvLT5jb250cm9sLmh3X2tleS0+aWN2X2xlbjsKKworCS8qIFRoZSBtb3N0IHNrYiBudW0gaXMgNiAqLworCXRjYl9kZXNjLT5lbXBrdF9udW0gPSAwOworCXNwaW5fbG9ja19iaCgmcnRscHJpdi0+bG9ja3Mud2FpdHFfbG9jayk7CisJc2tiX3F1ZXVlX3dhbGsoJnJ0bHByaXYtPm1hYzgwMjExLnNrYl93YWl0cVt0aWRdLCBuZXh0X3NrYikgeworCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKm5leHRfaW5mbzsKKworCQluZXh0X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKG5leHRfc2tiKTsKKwkJaWYgKG5leHRfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSB7CisJCQl0Y2JfZGVzYy0+ZW1wa3RfbGVuW3RjYl9kZXNjLT5lbXBrdF9udW1dID0KKwkJCQluZXh0X3NrYi0+bGVuICsgYWRkaXRpb25sZW47CisJCQl0Y2JfZGVzYy0+ZW1wa3RfbnVtKys7CisJCX0gZWxzZSB7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChza2JfcXVldWVfaXNfbGFzdCgmcnRscHJpdi0+bWFjODAyMTEuc2tiX3dhaXRxW3RpZF0sCisJCQkJICAgICAgbmV4dF9za2IpKQorCQkJYnJlYWs7CisKKwkJaWYgKHRjYl9kZXNjLT5lbXBrdF9udW0gPj0gNSkKKwkJCWJyZWFrOworCX0KKwlzcGluX3VubG9ja19iaCgmcnRscHJpdi0+bG9ja3Mud2FpdHFfbG9jayk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoganVzdCBmb3IgZWFybHkgbW9kZSBub3cgKi8KK3N0YXRpYyB2b2lkIF9ydGxfcGNpX3R4X2Noa193YWl0cShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IE5VTEw7CisJaW50IHRpZDsgLyogc2hvdWxkIGJlIGludCAqLworCisJaWYgKCFydGxwcml2LT5ydGxoYWwuZWFybHltb2RlX2VuYWJsZSkKKwkJcmV0dXJuOworCisJLyogd2UganVzZSB1c2UgZW0gZm9yIEJFL0JLL1ZJL1ZPICovCisJZm9yICh0aWQgPSA3OyB0aWQgPj0gMDsgdGlkLS0pIHsKKwkJdTggaHdfcXVldWUgPSBhY190b19od3FbcnRsX3RpZF90b19hYyhodywgdGlkKV07CisJCXN0cnVjdCBydGw4MTkyX3R4X3JpbmcgKnJpbmcgPSAmcnRscGNpLT50eF9yaW5nW2h3X3F1ZXVlXTsKKwkJd2hpbGUgKCFtYWMtPmFjdF9zY2FubmluZyAmJgorCQkgICAgICAgcnRscHJpdi0+cHNjLnJmcHdyX3N0YXRlID09IEVSRk9OKSB7CisJCQlzdHJ1Y3QgcnRsX3RjYl9kZXNjIHRjYl9kZXNjOworCQkJbWVtc2V0KCZ0Y2JfZGVzYywgMCwgc2l6ZW9mKHN0cnVjdCBydGxfdGNiX2Rlc2MpKTsKKworCQkJc3Bpbl9sb2NrX2JoKCZydGxwcml2LT5sb2Nrcy53YWl0cV9sb2NrKTsKKwkJCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZtYWMtPnNrYl93YWl0cVt0aWRdKSAmJgorCQkJICAgKHJpbmctPmVudHJpZXMgLSBza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSkgPiA1KSkgeworCQkJCXNrYiA9IHNrYl9kZXF1ZXVlKCZtYWMtPnNrYl93YWl0cVt0aWRdKTsKKwkJCX0gZWxzZSB7CisJCQkJc3Bpbl91bmxvY2tfYmgoJnJ0bHByaXYtPmxvY2tzLndhaXRxX2xvY2spOworCQkJCWJyZWFrOworCQkJfQorCQkJc3Bpbl91bmxvY2tfYmgoJnJ0bHByaXYtPmxvY2tzLndhaXRxX2xvY2spOworCisJCQkvKiBTb21lIG1hY2FkZHIgY2FuJ3QgZG8gZWFybHkgbW9kZS4gbGlrZQorCQkJICogbXVsdGljYXN0L2Jyb2FkY2FzdC9ub19xb3MgZGF0YSAqLworCQkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwkJCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpCisJCQkJX3J0bF91cGRhdGVfZWFybHltb2RlX2luZm8oaHcsIHNrYiwKKwkJCQkJCQkgICAmdGNiX2Rlc2MsIHRpZCk7CisKKwkJCXJ0bHByaXYtPmludGZfb3BzLT5hZGFwdGVyX3R4KGh3LCBza2IsICZ0Y2JfZGVzYyk7CisJCX0KKwl9Cit9CisKKwogc3RhdGljIHZvaWQgX3J0bF9wY2lfdHhfaXNyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgcHJpbykKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CkBAIC00NjEsNiArNTM2LDggQEAKIAkJc3RydWN0IHJ0bF90eF9kZXNjICplbnRyeSA9ICZyaW5nLT5kZXNjW3JpbmctPmlkeF07CiAJCXN0cnVjdCBza19idWZmICpza2I7CiAJCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKKwkJX19sZTE2IGZjOworCQl1OCB0aWQ7CiAKIAkJdTggb3duID0gKHU4KSBydGxwcml2LT5jZmctPm9wcy0+Z2V0X2Rlc2MoKHU4ICopIGVudHJ5LCB0cnVlLAogCQkJCQkJCSAgSFdfREVTQ19PV04pOwpAQCAtNDgxLDYgKzU1OCwxMCBAQAogCQkJCQkJICAgICAgSFdfREVTQ19UWEJVRkZfQUREUiksCiAJCQkJIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAorCQkvKiByZW1vdmUgZWFybHkgbW9kZSBoZWFkZXIgKi8KKwkJaWYgKHJ0bHByaXYtPnJ0bGhhbC5lYXJseW1vZGVfZW5hYmxlKQorCQkJc2tiX3B1bGwoc2tiLCBFTV9IRFJfTEVOKTsKKwogCQlSVF9UUkFDRShydGxwcml2LCAoQ09NUF9JTlRSIHwgQ09NUF9TRU5EKSwgREJHX1RSQUNFLAogCQkJICgibmV3IHJpbmctPmlkeDolZCwgIgogCQkJICAiZnJlZTogc2tiX3F1ZXVlX2xlbjolZCwgZnJlZTogc2VxOiV4XG4iLApAQCAtNDg4LDYgKzU2OSwzMCBAQAogCQkJICBza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSksCiAJCQkgICoodTE2ICopIChza2ItPmRhdGEgKyAyMikpKTsKIAorCQlpZiAocHJpbyA9PSBUWENNRF9RVUVVRSkgeworCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJZ290byB0eF9zdGF0dXNfb2s7CisKKwkJfQorCisJCS8qIGZvciBzdyBMUFMsIGp1c3QgYWZ0ZXIgTlVMTCBza2Igc2VuZCBvdXQsIHdlIGNhbgorCQkgKiBzdXJlIEFQIGtvd24gd2UgYXJlIHNsZWVwZWQsIG91ciB3ZSBzaG91bGQgbm90IGxldAorCQkgKiByZiB0byBzbGVlcCovCisJCWZjID0gcnRsX2dldF9mYyhza2IpOworCQlpZiAoaWVlZTgwMjExX2lzX251bGxmdW5jKGZjKSkgeworCQkJaWYgKGllZWU4MDIxMV9oYXNfcG0oZmMpKSB7CisJCQkJcnRscHJpdi0+bWFjODAyMTEub2ZmY2hhbl9kZWxleSA9IHRydWU7CisJCQkJcnRscHJpdi0+cHNjLnN0YXRlX2luYXAgPSAxOworCQkJfSBlbHNlIHsKKwkJCQlydGxwcml2LT5wc2Muc3RhdGVfaW5hcCA9IDA7CisJCQl9CisJCX0KKworCQkvKiB1cGRhdGUgdGlkIHR4IHBrdCBudW0gKi8KKwkJdGlkID0gcnRsX2dldF90aWQoc2tiKTsKKwkJaWYgKHRpZCA8PSA3KQorCQkJcnRscHJpdi0+bGlua19pbmZvLnRpZHR4X2lucGVyaW9kW3RpZF0rKzsKKwogCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCQlpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXMoaW5mbyk7CiAKQEAgLTUxMCw3ICs2MTUsNyBAQAogCQkJCQlza2JfZ2V0X3F1ZXVlX21hcHBpbmcKIAkJCQkJKHNrYikpOwogCQl9Ci0KK3R4X3N0YXR1c19vazoKIAkJc2tiID0gTlVMTDsKIAl9CiAKQEAgLTU4MiwyMyArNjg3LDIxIEBACiAJCQkgKnNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSA0KTsKIAkJCSAqLwogCi0JCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikoc2tiLT5kYXRhKTsKLQkJCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOworCQkJaGRyID0gcnRsX2dldF9oZHIoc2tiKTsKKwkJCWZjID0gcnRsX2dldF9mYyhza2IpOwogCi0JCQlpZiAoIXN0YXRzLmNyYykgeworCQkJaWYgKCFzdGF0cy5jcmMgfHwgIXN0YXRzLmh3ZXJyb3IpIHsKIAkJCQltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksICZyeF9zdGF0dXMsCiAJCQkJICAgICAgIHNpemVvZihyeF9zdGF0dXMpKTsKIAotCQkJCWlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkKKwkJCQlpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpIHsKIAkJCQkJOy8qVE9ETyovCi0JCQkJZWxzZSB7Ci0JCQkJCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkKLQkJCQkJCTsvKlRPRE8qLwotCQkJCQllbHNlIHsKLQkJCQkJCXVuaWNhc3QgPSB0cnVlOwotCQkJCQkJcnRscHJpdi0+c3RhdHMucnhieXRlc3VuaWNhc3QgKz0KLQkJCQkJCSAgICBza2ItPmxlbjsKLQkJCQkJfQorCQkJCX0gZWxzZSBpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpIHsKKwkJCQkJOy8qVE9ETyovCisJCQkJfSBlbHNlIHsKKwkJCQkJdW5pY2FzdCA9IHRydWU7CisJCQkJCXJ0bHByaXYtPnN0YXRzLnJ4Ynl0ZXN1bmljYXN0ICs9CisJCQkJCSAgICBza2ItPmxlbjsKIAkJCQl9CiAKIAkJCQlydGxfaXNfc3BlY2lhbF9kYXRhKGh3LCBza2IsIGZhbHNlKTsKQEAgLTYxMiwyOCArNzE1LDM4IEBACiAJCQkJCQkgICAgbnVtX3J4X2lucGVyaW9kKys7CiAJCQkJfQogCi0JCQkJaWYgKHVubGlrZWx5KCFydGxfYWN0aW9uX3Byb2MoaHcsIHNrYiwKLQkJCQkgICAgZmFsc2UpKSkgeworCQkJCS8qIGZvciBzdyBscHMgKi8KKwkJCQlydGxfc3dscHNfYmVhY29uKGh3LCAodm9pZCAqKXNrYi0+ZGF0YSwKKwkJCQkJCSBza2ItPmxlbik7CisJCQkJcnRsX3JlY29nbml6ZV9wZWVyKGh3LCAodm9pZCAqKXNrYi0+ZGF0YSwKKwkJCQkJCSAgIHNrYi0+bGVuKTsKKwkJCQlpZiAoKHJ0bHByaXYtPm1hYzgwMjExLm9wbW9kZSA9PQorCQkJCSAgICAgTkw4MDIxMV9JRlRZUEVfQVApICYmCisJCQkJICAgIChydGxwcml2LT5ydGxoYWwuY3VycmVudF9iYW5kdHlwZSA9PQorCQkJCSAgICAgQkFORF9PTl8yXzRHKSAmJgorCQkJCSAgICAgKGllZWU4MDIxMV9pc19iZWFjb24oZmMpIHx8CisJCQkJICAgICBpZWVlODAyMTFfaXNfcHJvYmVfcmVzcChmYykpKSB7CiAJCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQkJfSBlbHNlIHsKLQkJCQkJc3RydWN0IHNrX2J1ZmYgKnVza2IgPSBOVUxMOwotCQkJCQl1OCAqcGRhdGE7Ci0JCQkJCXVza2IgPSBkZXZfYWxsb2Nfc2tiKHNrYi0+bGVuICsgMTI4KTsKLQkJCQkJaWYgKCF1c2tiKSB7Ci0JCQkJCQlSVF9UUkFDRShydGxwcml2LAotCQkJCQkJCShDT01QX0lOVFIgfCBDT01QX1JFQ1YpLAotCQkJCQkJCURCR19FTUVSRywKLQkJCQkJCQkoImNhbid0IGFsbG9jIHJ4IHNrYlxuIikpOwotCQkJCQkJZ290byBkb25lOwotCQkJCQl9Ci0JCQkJCW1lbWNweShJRUVFODAyMTFfU0tCX1JYQ0IodXNrYiksCi0JCQkJCQkJJnJ4X3N0YXR1cywKLQkJCQkJCQlzaXplb2Yocnhfc3RhdHVzKSk7Ci0JCQkJCXBkYXRhID0gKHU4ICopc2tiX3B1dCh1c2tiLCBza2ItPmxlbik7Ci0JCQkJCW1lbWNweShwZGF0YSwgc2tiLT5kYXRhLCBza2ItPmxlbik7Ci0JCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCQkJCWlmICh1bmxpa2VseSghcnRsX2FjdGlvbl9wcm9jKGh3LCBza2IsCisJCQkJCSAgICBmYWxzZSkpKSB7CisJCQkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQkJCQl9IGVsc2UgeworCQkJCQkJc3RydWN0IHNrX2J1ZmYgKnVza2IgPSBOVUxMOworCQkJCQkJdTggKnBkYXRhOworCQkJCQkJdXNrYiA9IGRldl9hbGxvY19za2Ioc2tiLT5sZW4KKwkJCQkJCQkJICAgICArIDEyOCk7CisJCQkJCQltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHVza2IpLAorCQkJCQkJICAgICAgICZyeF9zdGF0dXMsCisJCQkJCQkgICAgICAgc2l6ZW9mKHJ4X3N0YXR1cykpOworCQkJCQkJcGRhdGEgPSAodTggKilza2JfcHV0KHVza2IsCisJCQkJCQkJc2tiLT5sZW4pOworCQkJCQkJbWVtY3B5KHBkYXRhLCBza2ItPmRhdGEsCisJCQkJCQkgICAgICAgc2tiLT5sZW4pOworCQkJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAotCQkJCQlpZWVlODAyMTFfcnhfaXJxc2FmZShodywgdXNrYik7CisJCQkJCQlpZWVlODAyMTFfcnhfaXJxc2FmZShodywgdXNrYik7CisJCQkJCX0KIAkJCQl9CiAJCQl9IGVsc2UgewogCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CkBAIC02NDgsNyArNzYxLDcgQEAKIAkJCW5ld19za2IgPSBkZXZfYWxsb2Nfc2tiKHJ0bHBjaS0+cnhidWZmZXJzaXplKTsKIAkJCWlmICh1bmxpa2VseSghbmV3X3NrYikpIHsKIAkJCQlSVF9UUkFDRShydGxwcml2LCAoQ09NUF9JTlRSIHwgQ09NUF9SRUNWKSwKLQkJCQkJIERCR19FTUVSRywKKwkJCQkJIERCR19ETUVTRywKIAkJCQkJICgiY2FuJ3QgYWxsb2Mgc2tiIGZvciByeFxuIikpOwogCQkJCWdvdG8gZG9uZTsKIAkJCX0KQEAgLTY2Niw3ICs3NzksNyBAQAogCiAJCX0KIGRvbmU6Ci0JCWJ1ZmZlcmFkZHJlc3MgPSAodTMyKSgqKChkbWFfYWRkcl90ICopIHNrYi0+Y2IpKTsKKwkJYnVmZmVyYWRkcmVzcyA9ICgqKChkbWFfYWRkcl90ICopc2tiLT5jYikpOwogCQl0bXBfb25lID0gMTsKIAkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9kZXNjKCh1OCAqKSBwZGVzYywgZmFsc2UsCiAJCQkJCSAgICBIV19ERVNDX1JYQlVGRl9BRERSLApAQCAtNjk1LDYgKzgwOCw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBkZXZfaWQ7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBpbnRhID0gMDsKIAl1MzIgaW50YiA9IDA7CkBAIC03ODEsMjMgKzg5NSwzNiBAQAogCQlfcnRsX3BjaV90eF9pc3IoaHcsIFZPX1FVRVVFKTsKIAl9CiAKKwlpZiAocnRsaGFsLT5od190eXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODE5MlNFKSB7CisJCWlmIChpbnRhICYgcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9JTVJfQ09NRE9LXSkgeworCQkJcnRscHJpdi0+bGlua19pbmZvLm51bV90eF9pbnBlcmlvZCsrOworCisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOVFIsIERCR19UUkFDRSwKKwkJCQkJKCJDTUQgVFggT0sgaW50ZXJydXB0IVxuIikpOworCQkJX3J0bF9wY2lfdHhfaXNyKGh3LCBUWENNRF9RVUVVRSk7CisJCX0KKwl9CisKIAkvKjwyPiBSeCByZWxhdGVkICovCiAJaWYgKGludGEgJiBydGxwcml2LT5jZmctPm1hcHNbUlRMX0lNUl9ST0tdKSB7CiAJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5UUiwgREJHX1RSQUNFLCAoIlJ4IG9rIGludGVycnVwdCFcbiIpKTsKLQkJdGFza2xldF9zY2hlZHVsZSgmcnRscHJpdi0+d29ya3MuaXJxX3Rhc2tsZXQpOworCQlfcnRsX3BjaV9yeF9pbnRlcnJ1cHQoaHcpOwogCX0KIAogCWlmICh1bmxpa2VseShpbnRhICYgcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9JTVJfUkRVXSkpIHsKIAkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19XQVJOSU5HLAogCQkJICgicnggZGVzY3JpcHRvciB1bmF2YWlsYWJsZSFcbiIpKTsKLQkJdGFza2xldF9zY2hlZHVsZSgmcnRscHJpdi0+d29ya3MuaXJxX3Rhc2tsZXQpOworCQlfcnRsX3BjaV9yeF9pbnRlcnJ1cHQoaHcpOwogCX0KIAogCWlmICh1bmxpa2VseShpbnRhICYgcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9JTVJfUlhGT1ZXXSkpIHsKIAkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19XQVJOSU5HLCAoInJ4IG92ZXJmbG93ICFcbiIpKTsKLQkJdGFza2xldF9zY2hlZHVsZSgmcnRscHJpdi0+d29ya3MuaXJxX3Rhc2tsZXQpOworCQlfcnRsX3BjaV9yeF9pbnRlcnJ1cHQoaHcpOwogCX0KIAorCWlmIChydGxwcml2LT5ydGxoYWwuZWFybHltb2RlX2VuYWJsZSkKKwkJdGFza2xldF9zY2hlZHVsZSgmcnRscHJpdi0+d29ya3MuaXJxX3Rhc2tsZXQpOworCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRscHJpdi0+bG9ja3MuaXJxX3RoX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAKQEAgLTgwOCw3ICs5MzUsNyBAQAogCiBzdGF0aWMgdm9pZCBfcnRsX3BjaV9pcnFfdGFza2xldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKLQlfcnRsX3BjaV9yeF9pbnRlcnJ1cHQoaHcpOworCV9ydGxfcGNpX3R4X2Noa193YWl0cShodyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9ydGxfcGNpX3ByZXBhcmVfYmNuX3Rhc2tsZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCkBAIC04MTYsMTQgKzk0MywxNSBAQAogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOwogCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7Ci0Jc3RydWN0IHJ0bDgxOTJfdHhfcmluZyAqcmluZyA9ICZydGxwY2ktPnR4X3JpbmdbQkVBQ09OX1FVRVVFXTsKKwlzdHJ1Y3QgcnRsODE5Ml90eF9yaW5nICpyaW5nID0gTlVMTDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gTlVMTDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBOVUxMOwogCXN0cnVjdCBza19idWZmICpwc2tiID0gTlVMTDsKIAlzdHJ1Y3QgcnRsX3R4X2Rlc2MgKnBkZXNjID0gTlVMTDsKLQl1bnNpZ25lZCBpbnQgcXVldWVfaW5kZXg7CisJc3RydWN0IHJ0bF90Y2JfZGVzYyB0Y2JfZGVzYzsKIAl1OCB0ZW1wX29uZSA9IDE7CiAKKwltZW1zZXQoJnRjYl9kZXNjLCAwLCBzaXplb2Yoc3RydWN0IHJ0bF90Y2JfZGVzYykpOwogCXJpbmcgPSAmcnRscGNpLT50eF9yaW5nW0JFQUNPTl9RVUVVRV07CiAJcHNrYiA9IF9fc2tiX2RlcXVldWUoJnJpbmctPnF1ZXVlKTsKIAlpZiAocHNrYikKQEAgLTgzMywxNCArOTYxLDExIEBACiAJcHNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGh3LCBtYWMtPnZpZik7CiAJaWYgKHBza2IgPT0gTlVMTCkKIAkJcmV0dXJuOwotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKShwc2tiLT5kYXRhKTsKKwloZHIgPSBydGxfZ2V0X2hkcihwc2tiKTsKIAlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihwc2tiKTsKLQotCXF1ZXVlX2luZGV4ID0gQkVBQ09OX1FVRVVFOwotCiAJcGRlc2MgPSAmcmluZy0+ZGVzY1swXTsKIAlydGxwcml2LT5jZmctPm9wcy0+ZmlsbF90eF9kZXNjKGh3LCBoZHIsICh1OCAqKSBwZGVzYywKLQkJCQkJaW5mbywgcHNrYiwgcXVldWVfaW5kZXgpOworCQlpbmZvLCBwc2tiLCBCRUFDT05fUVVFVUUsICZ0Y2JfZGVzYyk7CiAKIAlfX3NrYl9xdWV1ZV90YWlsKCZyaW5nLT5xdWV1ZSwgcHNrYik7CiAKQEAgLTg4Miw3ICsxMDA3LDYgQEAKIAlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOwogCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CiAJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKLQlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKIAogCXJ0bHBjaS0+dXBfZmlyc3RfdGltZSA9IHRydWU7CiAJcnRscGNpLT5iZWluZ19pbml0X2FkYXB0ZXIgPSBmYWxzZTsKQEAgLTg5MCwzMSArMTAxNCwyMCBAQAogCXJ0bGhhbC0+aHcgPSBodzsKIAlydGxwY2ktPnBkZXYgPSBwZGV2OwogCi0JcHBzYy0+aW5hY3RpdmVwcyA9IGZhbHNlOwotCXBwc2MtPmxlaXN1cmVfcHMgPSB0cnVlOwotCXBwc2MtPmZ3Y3RybF9scHMgPSB0cnVlOwotCXBwc2MtPnJlZ19md2N0cmxfbHBzID0gMzsKLQlwcHNjLT5yZWdfbWF4X2xwc19hd2FrZWludHZsID0gNTsKLQotCWlmIChwcHNjLT5yZWdfZndjdHJsX2xwcyA9PSAxKQotCQlwcHNjLT5md2N0cmxfcHNtb2RlID0gRldfUFNfTUlOX01PREU7Ci0JZWxzZSBpZiAocHBzYy0+cmVnX2Z3Y3RybF9scHMgPT0gMikKLQkJcHBzYy0+ZndjdHJsX3BzbW9kZSA9IEZXX1BTX01BWF9NT0RFOwotCWVsc2UgaWYgKHBwc2MtPnJlZ19md2N0cmxfbHBzID09IDMpCi0JCXBwc2MtPmZ3Y3RybF9wc21vZGUgPSBGV19QU19EVElNX01PREU7Ci0KIAkvKlR4L1J4IHJlbGF0ZWQgdmFyICovCiAJX3J0bF9wY2lfaW5pdF90cnhfdmFyKGh3KTsKIAotCSAvKklCU1MqLyBtYWMtPmJlYWNvbl9pbnRlcnZhbCA9IDEwMDsKKwkvKklCU1MqLyBtYWMtPmJlYWNvbl9pbnRlcnZhbCA9IDEwMDsKIAotCSAvKkFNUERVKi8gbWFjLT5taW5fc3BhY2VfY2ZnID0gMDsKKwkvKkFNUERVKi8KKwltYWMtPm1pbl9zcGFjZV9jZmcgPSAwOwogCW1hYy0+bWF4X21zc19kZW5zaXR5ID0gMDsKIAkvKnNldCBzYW5lIEFNUERVIGRlZmF1bHRzICovCiAJbWFjLT5jdXJyZW50X2FtcGR1X2RlbnNpdHkgPSA3OwogCW1hYy0+Y3VycmVudF9hbXBkdV9mYWN0b3IgPSAzOwogCi0JIC8qUU9TKi8gcnRscGNpLT5hY21fbWV0aG9kID0gZUFjbVdheTJfU1c7CisJLypRT1MqLworCXJ0bHBjaS0+YWNtX21ldGhvZCA9IGVBY21XYXkyX1NXOwogCiAJLyp0YXNrICovCiAJdGFza2xldF9pbml0KCZydGxwcml2LT53b3Jrcy5pcnFfdGFza2xldCwKQEAgLTk1NSw3ICsxMDY4LDggQEAKIAkJICgicXVldWU6JWQsIHJpbmdfYWRkcjolcFxuIiwgcHJpbywgcmluZykpOwogCiAJZm9yIChpID0gMDsgaSA8IGVudHJpZXM7IGkrKykgewotCQluZXh0ZGVzY2FkZHJlc3MgPSAodTMyKSBkbWEgKyAoKGkgKyAxKSAlIGVudHJpZXMpICoKKwkJbmV4dGRlc2NhZGRyZXNzID0gKHUzMikgZG1hICsKKwkJCQkJICAgICAgKChpICsgMSkgJSBlbnRyaWVzKSAqCiAJCQkJCSAgICAgIHNpemVvZigqcmluZyk7CiAKIAkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9kZXNjKCh1OCAqKSYocmluZ1tpXSksCkBAIC0xMDIwLDcgKzExMzQsNyBAQAogCQkJCQkgICBydGxwY2ktPnJ4YnVmZmVyc2l6ZSwKIAkJCQkJICAgUENJX0RNQV9GUk9NREVWSUNFKTsKIAotCQkJYnVmZmVyYWRkcmVzcyA9ICh1MzIpKCooKGRtYV9hZGRyX3QgKilza2ItPmNiKSk7CisJCQlidWZmZXJhZGRyZXNzID0gKCooKGRtYV9hZGRyX3QgKilza2ItPmNiKSk7CiAJCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2Rlc2MoKHU4ICopZW50cnksIGZhbHNlLAogCQkJCQkJICAgIEhXX0RFU0NfUlhCVUZGX0FERFIsCiAJCQkJCQkgICAgKHU4ICopJmJ1ZmZlcmFkZHJlc3MpOwpAQCAtMTIwMyw3MiArMTMxNyw3MyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IF9ydGxfbWFjX3RvX2h3cXVldWUoX19sZTE2IGZjLAotCQl1bnNpZ25lZCBpbnQgbWFjODAyMTFfcXVldWVfaW5kZXgpCi17Ci0JdW5zaWduZWQgaW50IGh3X3F1ZXVlX2luZGV4OwotCi0JaWYgKHVubGlrZWx5KGllZWU4MDIxMV9pc19iZWFjb24oZmMpKSkgewotCQlod19xdWV1ZV9pbmRleCA9IEJFQUNPTl9RVUVVRTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKGllZWU4MDIxMV9pc19tZ210KGZjKSkgewotCQlod19xdWV1ZV9pbmRleCA9IE1HTlRfUVVFVUU7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXN3aXRjaCAobWFjODAyMTFfcXVldWVfaW5kZXgpIHsKLQljYXNlIDA6Ci0JCWh3X3F1ZXVlX2luZGV4ID0gVk9fUVVFVUU7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJaHdfcXVldWVfaW5kZXggPSBWSV9RVUVVRTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlod19xdWV1ZV9pbmRleCA9IEJFX1FVRVVFOzsKLQkJYnJlYWs7Ci0JY2FzZSAzOgotCQlod19xdWV1ZV9pbmRleCA9IEJLX1FVRVVFOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlod19xdWV1ZV9pbmRleCA9IEJFX1FVRVVFOwotCQlSVF9BU1NFUlQoZmFsc2UsICgiUVNMVF9CRSBxdWV1ZSwgc2tiX3F1ZXVlOiVkXG4iLAotCQkJCSAgbWFjODAyMTFfcXVldWVfaW5kZXgpKTsKLQkJYnJlYWs7Ci0JfQotCi1vdXQ6Ci0JcmV0dXJuIGh3X3F1ZXVlX2luZGV4OwotfQotCi1zdGF0aWMgaW50IHJ0bF9wY2lfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgYm9vbCBydGxfcGNpX3R4X2Noa193YWl0cV9pbnNlcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCXN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwotCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEgPSBpbmZvLT5jb250cm9sLnN0YTsKKwlzdHJ1Y3QgcnRsX3N0YV9pbmZvICpzdGFfZW50cnkgPSBOVUxMOworCXU4IHRpZCA9IHJ0bF9nZXRfdGlkKHNrYik7CisKKwlpZiAoIXN0YSkKKwkJcmV0dXJuIGZhbHNlOworCXN0YV9lbnRyeSA9IChzdHJ1Y3QgcnRsX3N0YV9pbmZvICopc3RhLT5kcnZfcHJpdjsKKworCWlmICghcnRscHJpdi0+cnRsaGFsLmVhcmx5bW9kZV9lbmFibGUpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoc3RhX2VudHJ5LT50aWRzW3RpZF0uYWdnLmFnZ19zdGF0ZSAhPSBSVExfQUdHX09QRVJBVElPTkFMKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKF9ydGxfbWFjX3RvX2h3cXVldWUoaHcsIHNrYikgPiBWT19RVUVVRSkKKwkJcmV0dXJuIGZhbHNlOworCWlmICh0aWQgPiA3KQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBtYXliZSBldmVyeSB0aWQgc2hvdWxkIGJlIGNoZWNrZWQgKi8KKwlpZiAoIXJ0bHByaXYtPmxpbmtfaW5mby5oaWdoZXJfYnVzeXR4dHJhZmZpY1t0aWRdKQorCQlyZXR1cm4gZmFsc2U7CisKKwlzcGluX2xvY2tfYmgoJnJ0bHByaXYtPmxvY2tzLndhaXRxX2xvY2spOworCXNrYl9xdWV1ZV90YWlsKCZydGxwcml2LT5tYWM4MDIxMS5za2Jfd2FpdHFbdGlkXSwgc2tiKTsKKwlzcGluX3VubG9ja19iaCgmcnRscHJpdi0+bG9ja3Mud2FpdHFfbG9jayk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGludCBydGxfcGNpX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQlzdHJ1Y3QgcnRsX3RjYl9kZXNjICpwdGNiX2Rlc2MpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfc3RhX2luZm8gKnN0YV9lbnRyeSA9IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEgPSBpbmZvLT5jb250cm9sLnN0YTsKIAlzdHJ1Y3QgcnRsODE5Ml90eF9yaW5nICpyaW5nOwogCXN0cnVjdCBydGxfdHhfZGVzYyAqcGRlc2M7CiAJdTggaWR4OwotCXVuc2lnbmVkIGludCBxdWV1ZV9pbmRleCwgaHdfcXVldWU7CisJdTggaHdfcXVldWUgPSBfcnRsX21hY190b19od3F1ZXVlKGh3LCBza2IpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKShza2ItPmRhdGEpOwotCV9fbGUxNiBmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gcnRsX2dldF9oZHIoc2tiKTsKKwlfX2xlMTYgZmMgPSBydGxfZ2V0X2ZjKHNrYik7CiAJdTggKnBkYV9hZGRyID0gaGRyLT5hZGRyMTsKIAlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOwogCS8qc3NuICovCi0JdTggKnFjID0gTlVMTDsKIAl1OCB0aWQgPSAwOwogCXUxNiBzZXFfbnVtYmVyID0gMDsKIAl1OCBvd247CiAJdTggdGVtcF9vbmUgPSAxOwogCi0JaWYgKGllZWU4MDIxMV9pc19tZ210KGZjKSkKLQkJcnRsX3R4X21nbXRfcHJvYyhodywgc2tiKTsKLQlydGxfYWN0aW9uX3Byb2MoaHcsIHNrYiwgdHJ1ZSk7CisJaWYgKGllZWU4MDIxMV9pc19hdXRoKGZjKSkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFTkQsIERCR19ETUVTRywgKCJNQUM4MDIxMV9MSU5LSU5HXG4iKSk7CisJCXJ0bF9pcHNfbmljX29uKGh3KTsKKwl9CiAKLQlxdWV1ZV9pbmRleCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwotCWh3X3F1ZXVlID0gX3J0bF9tYWNfdG9faHdxdWV1ZShmYywgcXVldWVfaW5kZXgpOworCWlmIChydGxwcml2LT5wc2Muc3dfcHNfZW5hYmxlZCkgeworCQlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpICYmICFpZWVlODAyMTFfaXNfbnVsbGZ1bmMoZmMpICYmCisJCQkhaWVlZTgwMjExX2hhc19wbShmYykpCisJCQloZHItPmZyYW1lX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUE0pOworCX0KKworCXJ0bF9hY3Rpb25fcHJvYyhodywgc2tiLCB0cnVlKTsKIAogCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihwZGFfYWRkcikpCiAJCXJ0bHByaXYtPnN0YXRzLnR4Ynl0ZXNtdWx0aWNhc3QgKz0gc2tiLT5sZW47CkBAIC0xMjc4LDcgKzEzOTMsNiBAQAogCQlydGxwcml2LT5zdGF0cy50eGJ5dGVzdW5pY2FzdCArPSBza2ItPmxlbjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZydGxwcml2LT5sb2Nrcy5pcnFfdGhfbG9jaywgZmxhZ3MpOwotCiAJcmluZyA9ICZydGxwY2ktPnR4X3JpbmdbaHdfcXVldWVdOwogCWlmIChod19xdWV1ZSAhPSBCRUFDT05fUVVFVUUpCiAJCWlkeCA9IChyaW5nLT5pZHggKyBza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSkpICUKQEAgLTEzMDEsNDMgKzE0MTUsMzAgQEAKIAkJcmV0dXJuIHNrYi0+bGVuOwogCX0KIAotCS8qCi0JICppZihpZWVlODAyMTFfaXNfbnVsbGZ1bmMoZmMpKSB7Ci0JICogICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5pcnFfdGhfbG9jaywgZmxhZ3MpOwotCSAqICAgICAgcmV0dXJuIDE7Ci0JICp9Ci0JICovCi0KIAlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgewotCQlxYyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpOwotCQl0aWQgPSBxY1swXSAmIElFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLOworCQl0aWQgPSBydGxfZ2V0X3RpZChza2IpOworCQlpZiAoc3RhKSB7CisJCQlzdGFfZW50cnkgPSAoc3RydWN0IHJ0bF9zdGFfaW5mbyAqKXN0YS0+ZHJ2X3ByaXY7CisJCQlzZXFfbnVtYmVyID0gKGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpICYKKwkJCQkgICAgICBJRUVFODAyMTFfU0NUTF9TRVEpID4+IDQ7CisJCQlzZXFfbnVtYmVyICs9IDE7CiAKLQkJc2VxX251bWJlciA9IG1hYy0+dGlkc1t0aWRdLnNlcV9udW1iZXI7Ci0JCXNlcV9udW1iZXIgJj0gSUVFRTgwMjExX1NDVExfU0VROwotCQkvKgotCQkgKmhkci0+c2VxX2N0cmwgPSBoZHItPnNlcV9jdHJsICYKLQkJICpjcHVfdG9fbGUxNihJRUVFODAyMTFfU0NUTF9GUkFHKTsKLQkJICpoZHItPnNlcV9jdHJsIHw9IGNwdV90b19sZTE2KHNlcV9udW1iZXIpOwotCQkgKi8KLQotCQlzZXFfbnVtYmVyICs9IDE7CisJCQlpZiAoIWllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGhkci0+ZnJhbWVfY29udHJvbCkpCisJCQkJc3RhX2VudHJ5LT50aWRzW3RpZF0uc2VxX251bWJlciA9IHNlcV9udW1iZXI7CisJCX0KIAl9CiAKIAlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpKQogCQlydGxwcml2LT5jZmctPm9wcy0+bGVkX2NvbnRyb2woaHcsIExFRF9DVExfVFgpOwogCi0JcnRscHJpdi0+Y2ZnLT5vcHMtPmZpbGxfdHhfZGVzYyhodywgaGRyLCAodTggKikgcGRlc2MsCi0JCQkJCWluZm8sIHNrYiwgaHdfcXVldWUpOworCXJ0bHByaXYtPmNmZy0+b3BzLT5maWxsX3R4X2Rlc2MoaHcsIGhkciwgKHU4ICopcGRlc2MsCisJCQlpbmZvLCBza2IsIGh3X3F1ZXVlLCBwdGNiX2Rlc2MpOwogCiAJX19za2JfcXVldWVfdGFpbCgmcmluZy0+cXVldWUsIHNrYik7CiAKLQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2Rlc2MoKHU4ICopIHBkZXNjLCB0cnVlLAorCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfZGVzYygodTggKilwZGVzYywgdHJ1ZSwKIAkJCQkgICAgSFdfREVTQ19PV04sICh1OCAqKSZ0ZW1wX29uZSk7CiAKLQlpZiAoIWllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKLQkJaWYgKHFjKQotCQkJbWFjLT50aWRzW3RpZF0uc2VxX251bWJlciA9IHNlcV9udW1iZXI7Ci0JfQogCiAJaWYgKChyaW5nLT5lbnRyaWVzIC0gc2tiX3F1ZXVlX2xlbigmcmluZy0+cXVldWUpKSA8IDIgJiYKIAkgICAgaHdfcXVldWUgIT0gQkVBQ09OX1FVRVVFKSB7CkBAIC0xMzU5LDYgKzE0NjAsMzUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgcnRsX3BjaV9mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBkcm9wKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJdTE2IGkgPSAwOworCWludCBxdWV1ZV9pZDsKKwlzdHJ1Y3QgcnRsODE5Ml90eF9yaW5nICpyaW5nOworCisJZm9yIChxdWV1ZV9pZCA9IFJUTF9QQ0lfTUFYX1RYX1FVRVVFX0NPVU5UIC0gMTsgcXVldWVfaWQgPj0gMDspIHsKKwkJdTMyIHF1ZXVlX2xlbjsKKwkJcmluZyA9ICZwY2lwcml2LT5kZXYudHhfcmluZ1txdWV1ZV9pZF07CisJCXF1ZXVlX2xlbiA9IHNrYl9xdWV1ZV9sZW4oJnJpbmctPnF1ZXVlKTsKKwkJaWYgKHF1ZXVlX2xlbiA9PSAwIHx8IHF1ZXVlX2lkID09IEJFQUNPTl9RVUVVRSB8fAorCQkJcXVldWVfaWQgPT0gVFhDTURfUVVFVUUpIHsKKwkJCXF1ZXVlX2lkLS07CisJCQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCW1zbGVlcCgyMCk7CisJCQlpKys7CisJCX0KKworCQkvKiB3ZSBqdXN0IHdhaXQgMXMgZm9yIGFsbCBxdWV1ZXMgKi8KKwkJaWYgKHJ0bHByaXYtPnBzYy5yZnB3cl9zdGF0ZSA9PSBFUkZPRkYgfHwKKwkJCWlzX2hhbF9zdG9wKHJ0bGhhbCkgfHwgaSA+PSAyMDApCisJCQlyZXR1cm47CisJfQorfQorCiBzdGF0aWMgdm9pZCBydGxfcGNpX2RlaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CkBAIC0xNDc3LDExICsxNjA3LDE0IEBACiAJc3RydWN0IHBjaV9kZXYgKmJyaWRnZV9wZGV2ID0gcGRldi0+YnVzLT5zZWxmOwogCXUxNiB2ZW5kZXJpZDsKIAl1MTYgZGV2aWNlaWQ7CisJdTggcmV2aXNpb25pZDsKIAl1MTYgaXJxbGluZTsKIAl1OCB0bXA7CiAKKwlwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX3ZlbmRvciA9IFBDSV9CUklER0VfVkVORE9SX1VOS05PV047CiAJdmVuZGVyaWQgPSBwZGV2LT52ZW5kb3I7CiAJZGV2aWNlaWQgPSBwZGV2LT5kZXZpY2U7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgMHg4LCAmcmV2aXNpb25pZCk7CiAJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgMHgzQywgJmlycWxpbmUpOwogCiAJaWYgKGRldmljZWlkID09IFJUTF9QQ0lfODE5Ml9ESUQgfHwKQEAgLTE0OTIsNyArMTYyNSw3IEBACiAJICAgIGRldmljZWlkID09IFJUTF9QQ0lfODE3M19ESUQgfHwKIAkgICAgZGV2aWNlaWQgPT0gUlRMX1BDSV84MTcyX0RJRCB8fAogCSAgICBkZXZpY2VpZCA9PSBSVExfUENJXzgxNzFfRElEKSB7Ci0JCXN3aXRjaCAocGRldi0+cmV2aXNpb24pIHsKKwkJc3dpdGNoIChyZXZpc2lvbmlkKSB7CiAJCWNhc2UgUlRMX1BDSV9SRVZJU0lPTl9JRF84MTkyUENJRToKIAkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0RNRVNHLAogCQkJCSAoIjgxOTIgUENJLUUgaXMgZm91bmQgLSAiCkBAIC0xNTIxLDYgKzE2NTQsMTIgQEAKIAkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfRE1FU0csCiAJCQkgKCI4MTkyQyBQQ0ktRSBpcyBmb3VuZCAtICIKIAkJCSAgInZpZC9kaWQ9JXgvJXhcbiIsIHZlbmRlcmlkLCBkZXZpY2VpZCkpOworCX0gZWxzZSBpZiAoZGV2aWNlaWQgPT0gUlRMX1BDSV84MTkyREVfRElEIHx8CisJCSAgIGRldmljZWlkID09IFJUTF9QQ0lfODE5MkRFX0RJRDIpIHsKKwkJcnRsaGFsLT5od190eXBlID0gSEFSRFdBUkVfVFlQRV9SVEw4MTkyREU7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0RNRVNHLAorCQkJICgiODE5MkQgUENJLUUgaXMgZm91bmQgLSAiCisJCQkgICJ2aWQvZGlkPSV4LyV4XG4iLCB2ZW5kZXJpZCwgZGV2aWNlaWQpKTsKIAl9IGVsc2UgewogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX1dBUk5JTkcsCiAJCQkgKCJFcnI6IFVua25vd24gZGV2aWNlIC0iCkBAIC0xNTI5LDYgKzE2NjgsMjUgQEAKIAkJcnRsaGFsLT5od190eXBlID0gUlRMX0RFRkFVTFRfSEFSRFdBUkVfVFlQRTsKIAl9CiAKKwlpZiAocnRsaGFsLT5od190eXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODE5MkRFKSB7CisJCWlmIChyZXZpc2lvbmlkID09IDAgfHwgcmV2aXNpb25pZCA9PSAxKSB7CisJCQlpZiAocmV2aXNpb25pZCA9PSAwKSB7CisJCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULAorCQkJCQkgREJHX0xPVUQsICgiRmluZCA5MkRFIE1BQzAuXG4iKSk7CisJCQkJcnRsaGFsLT5pbnRlcmZhY2VpbmRleCA9IDA7CisJCQl9IGVsc2UgaWYgKHJldmlzaW9uaWQgPT0gMSkgeworCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0xPVUQsCisJCQkJCSgiRmluZCA5MkRFIE1BQzEuXG4iKSk7CisJCQkJcnRsaGFsLT5pbnRlcmZhY2VpbmRleCA9IDE7CisJCQl9CisJCX0gZWxzZSB7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19MT1VELAorCQkJCSgiVW5rbm93biBkZXZpY2UgLSAiCisJCQkJIlZlbmRvcklEL0RldmljZUlEPSV4LyV4LCBSZXZpc2lvbj0leFxuIiwKKwkJCQl2ZW5kZXJpZCwgZGV2aWNlaWQsIHJldmlzaW9uaWQpKTsKKwkJCXJ0bGhhbC0+aW50ZXJmYWNlaW5kZXggPSAwOworCQl9CisJfQogCS8qZmluZCBidXMgaW5mbyAqLwogCXBjaXByaXYtPm5kaXNfYWRhcHRlci5idXNudW1iZXIgPSBwZGV2LT5idXMtPm51bWJlcjsKIAlwY2lwcml2LT5uZGlzX2FkYXB0ZXIuZGV2bnVtYmVyID0gUENJX1NMT1QocGRldi0+ZGV2Zm4pOwpAQCAtMTU1NCwxMiArMTcxMiwxMiBAQAogCQkgICAgUENJX1NMT1QoYnJpZGdlX3BkZXYtPmRldmZuKTsKIAkJcGNpcHJpdi0+bmRpc19hZGFwdGVyLnBjaWJyaWRnZV9mdW5jbnVtID0KIAkJICAgIFBDSV9GVU5DKGJyaWRnZV9wZGV2LT5kZXZmbik7Ci0JCXBjaXByaXYtPm5kaXNfYWRhcHRlci5wY2licmlkZ2VfcGNpZWhkcl9vZmZzZXQgPQotCQkgICAgcGNpX3BjaWVfY2FwKGJyaWRnZV9wZGV2KTsKIAkJcGNpcHJpdi0+bmRpc19hZGFwdGVyLnBjaWNmZ19hZGRycG9ydCA9CiAJCSAgICAocGNpcHJpdi0+bmRpc19hZGFwdGVyLnBjaWJyaWRnZV9idXNudW0gPDwgMTYpIHwKIAkJICAgIChwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX2Rldm51bSA8PCAxMSkgfAogCQkgICAgKHBjaXByaXYtPm5kaXNfYWRhcHRlci5wY2licmlkZ2VfZnVuY251bSA8PCA4KSB8ICgxIDw8IDMxKTsKKwkJcGNpcHJpdi0+bmRpc19hZGFwdGVyLnBjaWJyaWRnZV9wY2llaGRyX29mZnNldCA9CisJCSAgICBwY2lfcGNpZV9jYXAoYnJpZGdlX3BkZXYpOwogCQlwY2lwcml2LT5uZGlzX2FkYXB0ZXIubnVtNGJ5dGVzID0KIAkJICAgIChwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX3BjaWVoZHJfb2Zmc2V0ICsgMHgxMCkgLyA0OwogCkBAIC0xNjQyLDYgKzE4MDAsMTEgQEAKIAlwY2lwcml2ID0gKHZvaWQgKilydGxwcml2LT5wcml2OwogCXBjaXByaXYtPmRldi5wZGV2ID0gcGRldjsKIAorCS8qIGluaXQgY2ZnICYgaW50Zl9vcHMgKi8KKwlydGxwcml2LT5ydGxoYWwuaW50ZXJmYWNlID0gSU5URl9QQ0k7CisJcnRscHJpdi0+Y2ZnID0gKHN0cnVjdCBydGxfaGFsX2NmZyAqKShpZC0+ZHJpdmVyX2RhdGEpOworCXJ0bHByaXYtPmludGZfb3BzID0gJnJ0bF9wY2lfb3BzOworCiAJLyoKIAkgKmluaXQgZGJncCBmbGFncyBiZWZvcmUgYWxsCiAJICpvdGhlciBmdW5jdGlvbnMsIGJlY2F1c2Ugd2Ugd2lsbApAQCAtMTY1OSwxMyArMTgyMiwxNCBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAotCXBtZW1fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMik7Ci0JcG1lbV9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDIpOwotCXBtZW1fZmxhZ3MgPSBwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgMik7CisJcG1lbV9zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBydGxwcml2LT5jZmctPmJhcl9pZCk7CisJcG1lbV9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIHJ0bHByaXYtPmNmZy0+YmFyX2lkKTsKKwlwbWVtX2ZsYWdzID0gcGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIHJ0bHByaXYtPmNmZy0+YmFyX2lkKTsKIAogCS8qc2hhcmVkIG1lbSBzdGFydCAqLwogCXJ0bHByaXYtPmlvLnBjaV9tZW1fc3RhcnQgPQotCQkJKHVuc2lnbmVkIGxvbmcpcGNpX2lvbWFwKHBkZXYsIDIsIHBtZW1fbGVuKTsKKwkJCSh1bnNpZ25lZCBsb25nKXBjaV9pb21hcChwZGV2LAorCQkJcnRscHJpdi0+Y2ZnLT5iYXJfaWQsIHBtZW1fbGVuKTsKIAlpZiAocnRscHJpdi0+aW8ucGNpX21lbV9zdGFydCA9PSAwKSB7CiAJCVJUX0FTU0VSVChmYWxzZSwgKCJDYW4ndCBtYXAgUENJIG1lbVxuIikpOwogCQlnb3RvIGZhaWwyOwpAQCAtMTY4NCwxMSArMTg0OCw2IEBACiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4MDQsIDB4MDYpOwogCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDA0LCAweDA3KTsKIAotCS8qIGluaXQgY2ZnICYgaW50Zl9vcHMgKi8KLQlydGxwcml2LT5ydGxoYWwuaW50ZXJmYWNlID0gSU5URl9QQ0k7Ci0JcnRscHJpdi0+Y2ZnID0gKHN0cnVjdCBydGxfaGFsX2NmZyAqKShpZC0+ZHJpdmVyX2RhdGEpOwotCXJ0bHByaXYtPmludGZfb3BzID0gJnJ0bF9wY2lfb3BzOwotCiAJLyogZmluZCBhZGFwdGVyICovCiAJX3J0bF9wY2lfZmluZF9hZGFwdGVyKHBkZXYsIGh3KTsKIApAQCAtMTgwNiw3ICsxOTY1LDYgQEAKIAogCXJ0bF9wY2lfZGVpbml0KGh3KTsKIAlydGxfZGVpbml0X2NvcmUoaHcpOwotCXJ0bHByaXYtPmNmZy0+b3BzLT5kZWluaXRfc3dfbGVkcyhodyk7CiAJX3J0bF9wY2lfaW9faGFuZGxlcl9yZWxlYXNlKGh3KTsKIAlydGxwcml2LT5jZmctPm9wcy0+ZGVpbml0X3N3X3ZhcnMoaHcpOwogCkBAIC0xODIxLDYgKzE5NzksOSBAQAogCX0KIAogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKworCXJ0bF9wY2lfZGlzYWJsZV9hc3BtKGh3KTsKKwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCWllZWU4MDIxMV9mcmVlX2h3KGh3KTsKQEAgLTE4NDQsMTAgKzIwMDUsMTUgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBpbnQgcnRsX3BjaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCisJcnRscHJpdi0+Y2ZnLT5vcHMtPmh3X3N1c3BlbmQoaHcpOworCXJ0bF9kZWluaXRfcmZraWxsKGh3KTsKKwogCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7Ci0KIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wocnRsX3BjaV9zdXNwZW5kKTsKQEAgLTE4NTUsNiArMjAyMSw4IEBACiBpbnQgcnRsX3BjaV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJaW50IHJldDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CiAJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CkBAIC0xODY1LDE1ICsyMDMzLDIwIEBACiAKIAlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKIAorCXJ0bHByaXYtPmNmZy0+b3BzLT5od19yZXN1bWUoaHcpOworCXJ0bF9pbml0X3Jma2lsbChodyk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKHJ0bF9wY2lfcmVzdW1lKTsKIAogc3RydWN0IHJ0bF9pbnRmX29wcyBydGxfcGNpX29wcyA9IHsKKwkucmVhZF9lZnVzZV9ieXRlID0gcmVhZF9lZnVzZV9ieXRlLAogCS5hZGFwdGVyX3N0YXJ0ID0gcnRsX3BjaV9zdGFydCwKIAkuYWRhcHRlcl9zdG9wID0gcnRsX3BjaV9zdG9wLAogCS5hZGFwdGVyX3R4ID0gcnRsX3BjaV90eCwKKwkuZmx1c2ggPSBydGxfcGNpX2ZsdXNoLAogCS5yZXNldF90cnhfcmluZyA9IHJ0bF9wY2lfcmVzZXRfdHJ4X3JpbmcsCisJLndhaXRxX2luc2VydCA9IHJ0bF9wY2lfdHhfY2hrX3dhaXRxX2luc2VydCwKIAogCS5kaXNhYmxlX2FzcG0gPSBydGxfcGNpX2Rpc2FibGVfYXNwbSwKIAkuZW5hYmxlX2FzcG0gPSBydGxfcGNpX2VuYWJsZV9hc3BtLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wY2kuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcGNpLmgKaW5kZXggMGNhYTgxNC4uNjcxYjFmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wY2kuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BjaS5oCkBAIC0xMDIsOCArMTAyLDggQEAKICNkZWZpbmUgUlRMX1BDSV84MTkxQ0VfRElECTB4ODE3NwkvKjgxOTJjZSAqLwogI2RlZmluZSBSVExfUENJXzgxODhDRV9ESUQJMHg4MTc2CS8qODE5MmNlICovCiAjZGVmaW5lIFJUTF9QQ0lfODE5MkNVX0RJRAkweDgxOTEJLyo4MTkyY2UgKi8KLSNkZWZpbmUgUlRMX1BDSV84MTkyREVfRElECTB4MDkyRAkvKjgxOTJjZSAqLwotI2RlZmluZSBSVExfUENJXzgxOTJEVV9ESUQJMHgwOTJECS8qODE5MmNlICovCisjZGVmaW5lIFJUTF9QQ0lfODE5MkRFX0RJRAkweDgxOTMJLyo4MTkyZGUgKi8KKyNkZWZpbmUgUlRMX1BDSV84MTkyREVfRElEMgkweDAwMkIJLyo5MkRFKi8KIAogLyo4MTkyIHN1cHBvcnQgMTYgcGFnZXMgb2YgSU8gcmVnaXN0ZXJzKi8KICNkZWZpbmUgUlRMX01FTV9NQVBQRURfSU9fUkFOR0VfODE5MFBDSQkJMHgxMDAwCkBAIC0xMjksNiArMTI5LDExIEBACiAJUENJX0JSSURHRV9WRU5ET1JfTUFYLAogfTsKIAorc3RydWN0IHJ0bF9wY2lfY2FwYWJpbGl0aWVzX2hlYWRlciB7CisJdTggY2FwYWJpbGl0eV9pZDsKKwl1OCBuZXh0OworfTsKKwogc3RydWN0IHJ0bF9yeF9kZXNjIHsKIAl1MzIgZHdvcmRbOF07CiB9IF9fcGFja2VkOwpAQCAtMTYxLDcgKzE2Niw5IEBACiAKIAlib29sIGRyaXZlcl9pc19nb2luZ3RvX3VubG9hZDsKIAlib29sIHVwX2ZpcnN0X3RpbWU7CisJYm9vbCBmaXJzdF9pbml0OwogCWJvb2wgYmVpbmdfaW5pdF9hZGFwdGVyOworCWJvb2wgaW5pdF9yZWFkeTsKIAlib29sIGlycV9lbmFibGVkOwogCiAJLypUeCAqLwpAQCAtMTkyLDExICsxOTksMTQgQEAKIAl1OCBjb25zdF9kZXZpY2VwY2lfYXNwbV9zZXR0aW5nOwogCS8qSWYgaXQgc3VwcG9ydHMgQVNQTSwgT2Zmc2V0WzU2MGhdID0gMHg0MCwKIAkgICBvdGhlcndpc2UgT2Zmc2V0WzU2MGhdID0gMHgwMC4gKi8KLQlib29sIGJfc3VwcG9ydF9hc3BtOwotCWJvb2wgYl9zdXBwb3J0X2JhY2tkb29yOworCWJvb2wgc3VwcG9ydF9hc3BtOworCWJvb2wgc3VwcG9ydF9iYWNrZG9vcjsKIAogCS8qUU9TICYgRURDQSAqLwogCWVudW0gYWNtX21ldGhvZCBhY21fbWV0aG9kOworCisJdTE2IHNob3J0cmV0cnlfbGltaXQ7CisJdTE2IGxvbmdyZXRyeV9saW1pdDsKIH07CiAKIHN0cnVjdCBtcF9hZGFwdGVyIHsKQEAgLTIyNyw2ICsyMzcsNyBAQAogCXN0cnVjdCBydGxfcGNpIGRldjsKIAlzdHJ1Y3QgbXBfYWRhcHRlciBuZGlzX2FkYXB0ZXI7CiAJc3RydWN0IHJ0bF9sZWRfY3RsIGxlZGN0bDsKKwlzdHJ1Y3QgYnRfY29leGlzdF9pbmZvIGJ0X2NvZXhpc3Q7CiB9OwogCiAjZGVmaW5lIHJ0bF9wY2lwcml2KGh3KQkJKCgoc3RydWN0IHJ0bF9wY2lfcHJpdiAqKShydGxfcHJpdihodykpLT5wcml2KSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcHMuYwppbmRleCA2YjdlMjE3Li4yYmI3MTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wcy5jCkBAIC0zNiw3ICszNiw2IEBACiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOwogCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7Ci0JYm9vbCBpbml0X3N0YXR1cyA9IHRydWU7CiAKIAkvKjwxPiByZXNldCB0cnggcmluZyAqLwogCWlmIChydGxoYWwtPmludGVyZmFjZSA9PSBJTlRGX1BDSSkKQEAgLTQ5LDcgKzQ4LDYgQEAKIAkvKjwyPiBFbmFibGUgQWRhcHRlciAqLwogCXJ0bHByaXYtPmNmZy0+b3BzLT5od19pbml0KGh3KTsKIAlSVF9DTEVBUl9QU19MRVZFTChwcHNjLCBSVF9SRl9PRkZfTEVWTF9IQUxUX05JQyk7Ci0JLyppbml0X3N0YXR1cyA9IGZhbHNlOyAqLwogCiAJLyo8Mz4gRW5hYmxlIEludGVycnVwdCAqLwogCXJ0bHByaXYtPmNmZy0+b3BzLT5lbmFibGVfaW50ZXJydXB0KGh3KTsKQEAgLTU3LDEzICs1NSwxMiBAQAogCS8qPGVuYWJsZSB0aW1lcj4gKi8KIAlydGxfd2F0Y2hfZG9nX3RpbWVyX2NhbGxiYWNrKCh1bnNpZ25lZCBsb25nKWh3KTsKIAotCXJldHVybiBpbml0X3N0YXR1czsKKwlyZXR1cm4gdHJ1ZTsKIH0KIEVYUE9SVF9TWU1CT0wocnRsX3BzX2VuYWJsZV9uaWMpOwogCiBib29sIHJ0bF9wc19kaXNhYmxlX25pYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKLQlib29sIHN0YXR1cyA9IHRydWU7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCiAJLyo8MT4gU3RvcCBhbGwgdGltZXIgKi8KQEAgLTc1LDcgKzcyLDcgQEAKIAkvKjwzPiBEaXNhYmxlIEFkYXB0ZXIgKi8KIAlydGxwcml2LT5jZmctPm9wcy0+aHdfZGlzYWJsZShodyk7CiAKLQlyZXR1cm4gc3RhdHVzOworCXJldHVybiB0cnVlOwogfQogRVhQT1JUX1NZTUJPTChydGxfcHNfZGlzYWJsZV9uaWMpOwogCkBAIC0xOTMsMTIgKzE5MCwxMyBAQAogCiAJcHBzYy0+c3dyZl9wcm9jZXNzaW5nID0gdHJ1ZTsKIAotCWlmIChwcHNjLT5pbmFjdGl2ZV9wd3JzdGF0ZSA9PSBFUkZPTiAmJiBydGxoYWwtPmludGVyZmFjZSA9PSBJTlRGX1BDSSkgeworCWlmIChwcHNjLT5pbmFjdGl2ZV9wd3JzdGF0ZSA9PSBFUkZPRkYgJiYKKwkgICAgcnRsaGFsLT5pbnRlcmZhY2UgPT0gSU5URl9QQ0kpIHsKIAkJaWYgKChwcHNjLT5yZWdfcmZwc19sZXZlbCAmIFJUX1JGX09GRl9MRVZMX0FTUE0pICYmCi0JCSAgICBSVF9JTl9QU19MRVZFTChwcHNjLCBSVF9SRl9PRkZfTEVWTF9BU1BNKSAmJgorCQkgICAgUlRfSU5fUFNfTEVWRUwocHBzYywgUlRfUFNfTEVWRUxfQVNQTSkgJiYKIAkJICAgIHJ0bGhhbC0+aW50ZXJmYWNlID09IElOVEZfUENJKSB7CiAJCQlydGxwcml2LT5pbnRmX29wcy0+ZGlzYWJsZV9hc3BtKGh3KTsKLQkJCVJUX0NMRUFSX1BTX0xFVkVMKHBwc2MsIFJUX1JGX09GRl9MRVZMX0FTUE0pOworCQkJUlRfQ0xFQVJfUFNfTEVWRUwocHBzYywgUlRfUFNfTEVWRUxfQVNQTSk7CiAJCX0KIAl9CiAKQEAgLTIwNyw5ICsyMDUsMTAgQEAKIAogCWlmIChwcHNjLT5pbmFjdGl2ZV9wd3JzdGF0ZSA9PSBFUkZPRkYgJiYKIAkgICAgcnRsaGFsLT5pbnRlcmZhY2UgPT0gSU5URl9QQ0kpIHsKLQkJaWYgKHBwc2MtPnJlZ19yZnBzX2xldmVsICYgUlRfUkZfT0ZGX0xFVkxfQVNQTSkgeworCQlpZiAocHBzYy0+cmVnX3JmcHNfbGV2ZWwgJiBSVF9SRl9PRkZfTEVWTF9BU1BNICYmCisJCQkhUlRfSU5fUFNfTEVWRUwocHBzYywgUlRfUFNfTEVWRUxfQVNQTSkpIHsKIAkJCXJ0bHByaXYtPmludGZfb3BzLT5lbmFibGVfYXNwbShodyk7Ci0JCQlSVF9TRVRfUFNfTEVWRUwocHBzYywgUlRfUkZfT0ZGX0xFVkxfQVNQTSk7CisJCQlSVF9TRVRfUFNfTEVWRUwocHBzYywgUlRfUFNfTEVWRUxfQVNQTSk7CiAJCX0KIAl9CiAKQEAgLTIzMyw2ICsyMzIsOSBAQAogCQlyZXR1cm47CiAJfQogCisJaWYgKG1hYy0+bGlua19zdGF0ZSA+IE1BQzgwMjExX05PTElOSykKKwkJcmV0dXJuOworCiAJaWYgKGlzX2hhbF9zdG9wKHJ0bGhhbCkpCiAJCXJldHVybjsKIApAQCAtMjg0LDEwICsyODYsMTQgQEAKIHZvaWQgcnRsX2lwc19uaWNfb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CiAJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CiAJZW51bSByZl9wd3JzdGF0ZSBydHN0YXRlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlpZiAobWFjLT5vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJcmV0dXJuOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0bHByaXYtPmxvY2tzLmlwc19sb2NrLCBmbGFncyk7CiAKIAlpZiAocHBzYy0+aW5hY3RpdmVwcykgewpAQCAtMzcwLDggKzM3Niw3IEBACiAJICogICBtb2RlIGFuZCBzZXQgUlBXTSB0byB0dXJuIFJGIG9uLgogCSAqLwogCi0JaWYgKChwcHNjLT5md2N0cmxfbHBzKSAmJiAocHBzYy0+bGVpc3VyZV9wcykgJiYKLQkgICAgIHBwc2MtPnJlcG9ydF9saW5rZWQpIHsKKwlpZiAoKHBwc2MtPmZ3Y3RybF9scHMpICYmIHBwc2MtPnJlcG9ydF9saW5rZWQpIHsKIAkJYm9vbCBmd19jdXJyZW50X2lucHM7CiAJCWlmIChwcHNjLT5kb3QxMV9wc21vZGUgPT0gRUFDVElWRSkgewogCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9SRiwgREJHX0RNRVNHLApAQCAtNDI1LDcgKzQzMCw3IEBACiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXVuc2lnbmVkIGxvbmcgZmxhZzsKIAotCWlmICghKHBwc2MtPmZ3Y3RybF9scHMgJiYgcHBzYy0+bGVpc3VyZV9wcykpCisJaWYgKCFwcHNjLT5md2N0cmxfbHBzKQogCQlyZXR1cm47CiAKIAlpZiAocnRscHJpdi0+c2VjLmJlaW5nX3NldGtleSkKQEAgLTQ0NiwxNyArNDUxLDE2IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnRscHJpdi0+bG9ja3MubHBzX2xvY2ssIGZsYWcpOwogCi0JaWYgKHBwc2MtPmxlaXN1cmVfcHMpIHsKLQkJLyogSWRsZSBmb3IgYSB3aGlsZSBpZiB3ZSBjb25uZWN0IHRvIEFQIGEgd2hpbGUgYWdvLiAqLwotCQlpZiAobWFjLT5jbnRfYWZ0ZXJfbGlua2VkID49IDIpIHsKLQkJCWlmIChwcHNjLT5kb3QxMV9wc21vZGUgPT0gRUFDVElWRSkgewotCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19MT1VELAorCS8qIElkbGUgZm9yIGEgd2hpbGUgaWYgd2UgY29ubmVjdCB0byBBUCBhIHdoaWxlIGFnby4gKi8KKwlpZiAobWFjLT5jbnRfYWZ0ZXJfbGlua2VkID49IDIpIHsKKwkJaWYgKHBwc2MtPmRvdDExX3BzbW9kZSA9PSBFQUNUSVZFKSB7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfTE9VRCwKIAkJCQkJKCJFbnRlciA4MDIuMTEgcG93ZXIgc2F2ZSBtb2RlLi4uXG4iKSk7CiAKLQkJCQlydGxfbHBzX3NldF9wc21vZGUoaHcsIEVBVVRPUFMpOwotCQkJfQorCQkJcnRsX2xwc19zZXRfcHNtb2RlKGh3LCBFQVVUT1BTKTsKIAkJfQogCX0KKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLmxwc19sb2NrLCBmbGFnKTsKIH0KIApAQCAtNDcwLDE3ICs0NzQsMTcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZydGxwcml2LT5sb2Nrcy5scHNfbG9jaywgZmxhZyk7CiAKLQlpZiAocHBzYy0+ZndjdHJsX2xwcyAmJiBwcHNjLT5sZWlzdXJlX3BzKSB7CisJaWYgKHBwc2MtPmZ3Y3RybF9scHMpIHsKIAkJaWYgKHBwc2MtPmRvdDExX3BzbW9kZSAhPSBFQUNUSVZFKSB7CiAKIAkJCS8qRklYIE1FICovCiAJCQlydGxwcml2LT5jZmctPm9wcy0+ZW5hYmxlX2ludGVycnVwdChodyk7CiAKIAkJCWlmIChwcHNjLT5yZWdfcmZwc19sZXZlbCAmIFJUX1JGX0xQU19MRVZFTF9BU1BNICYmCi0JCQkgICAgUlRfSU5fUFNfTEVWRUwocHBzYywgUlRfUkZfTFBTX0xFVkVMX0FTUE0pICYmCisJCQkgICAgUlRfSU5fUFNfTEVWRUwocHBzYywgUlRfUFNfTEVWRUxfQVNQTSkgJiYKIAkJCSAgICBydGxoYWwtPmludGVyZmFjZSA9PSBJTlRGX1BDSSkgewogCQkJCXJ0bHByaXYtPmludGZfb3BzLT5kaXNhYmxlX2FzcG0oaHcpOwotCQkJCVJUX0NMRUFSX1BTX0xFVkVMKHBwc2MsIFJUX1JGX0xQU19MRVZFTF9BU1BNKTsKKwkJCQlSVF9DTEVBUl9QU19MRVZFTChwcHNjLCBSVF9QU19MRVZFTF9BU1BNKTsKIAkJCX0KIAogCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9QT1dFUiwgREJHX0xPVUQsCkBAIC00OTEsMyArNDk1LDIxNCBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5scHNfbG9jaywgZmxhZyk7CiB9CisKKy8qIEZvciBzdyBMUFMqLwordm9pZCBydGxfc3dscHNfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKSBkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfdGltX2llICp0aW1faWU7CisJdTggKnRpbTsKKwl1OCB0aW1fbGVuOworCWJvb2wgdV9idWZmZWQ7CisJYm9vbCBtX2J1ZmZlZDsKKworCWlmIChtYWMtPm9wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQlyZXR1cm47CisKKwlpZiAoIXJ0bHByaXYtPnBzYy5zd2N0cmxfbHBzKQorCQlyZXR1cm47CisKKwlpZiAocnRscHJpdi0+bWFjODAyMTEubGlua19zdGF0ZSAhPSBNQUM4MDIxMV9MSU5LRUQpCisJCXJldHVybjsKKworCWlmICghcnRscHJpdi0+cHNjLnN3X3BzX2VuYWJsZWQpCisJCXJldHVybjsKKworCWlmIChydGxwcml2LT5wc2MuZndjdHJsX2xwcykKKwkJcmV0dXJuOworCisJaWYgKGxpa2VseSghKGh3LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpKSkKKwkJcmV0dXJuOworCisJLyogY2hlY2sgaWYgdGhpcyByZWFsbHkgaXMgYSBiZWFjb24gKi8KKwlpZiAoIWllZWU4MDIxMV9pc19iZWFjb24oaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJcmV0dXJuOworCisJLyogbWluLiBiZWFjb24gbGVuZ3RoICsgRkNTX0xFTiAqLworCWlmIChsZW4gPD0gNDAgKyBGQ1NfTEVOKQorCQlyZXR1cm47CisKKwkvKiBhbmQgb25seSBiZWFjb25zIGZyb20gdGhlIGFzc29jaWF0ZWQgQlNTSUQsIHBsZWFzZSAqLworCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoaGRyLT5hZGRyMywgcnRscHJpdi0+bWFjODAyMTEuYnNzaWQpKQorCQlyZXR1cm47CisKKwlydGxwcml2LT5wc2MubGFzdF9iZWFjb24gPSBqaWZmaWVzOworCisJdGltID0gcnRsX2ZpbmRfaWUoZGF0YSwgbGVuIC0gRkNTX0xFTiwgV0xBTl9FSURfVElNKTsKKwlpZiAoIXRpbSkKKwkJcmV0dXJuOworCisJaWYgKHRpbVsxXSA8IHNpemVvZigqdGltX2llKSkKKwkJcmV0dXJuOworCisJdGltX2xlbiA9IHRpbVsxXTsKKwl0aW1faWUgPSAoc3RydWN0IGllZWU4MDIxMV90aW1faWUgKikgJnRpbVsyXTsKKworCWlmICghV0FSTl9PTl9PTkNFKCFody0+Y29uZi5wc19kdGltX3BlcmlvZCkpCisJCXJ0bHByaXYtPnBzYy5kdGltX2NvdW50ZXIgPSB0aW1faWUtPmR0aW1fY291bnQ7CisKKwkvKiBDaGVjayB3aGVuZXZlciB0aGUgUEhZIGNhbiBiZSB0dXJuZWQgb2ZmIGFnYWluLiAqLworCisJLyogMS4gV2hhdCBhYm91dCBidWZmZXJlZCB1bmljYXN0IHRyYWZmaWMgZm9yIG91ciBBSUQ/ICovCisJdV9idWZmZWQgPSBpZWVlODAyMTFfY2hlY2tfdGltKHRpbV9pZSwgdGltX2xlbiwKKwkJCQkgICAgICAgcnRscHJpdi0+bWFjODAyMTEuYXNzb2NfaWQpOworCisJLyogMi4gTWF5YmUgdGhlIEFQIHdhbnRzIHRvIHNlbmQgbXVsdGljYXN0L2Jyb2FkY2FzdCBkYXRhPyAqLworCW1fYnVmZmVkID0gdGltX2llLT5iaXRtYXBfY3RybCAmIDB4MDE7CisJcnRscHJpdi0+cHNjLm11bHRpX2J1ZmZlcmVkID0gbV9idWZmZWQ7CisKKwkvKiB1bmljYXN0IHdpbGwgcHJvY2VzcyBieSBtYWM4MDIxMSB0aHJvdWdoCisJICogc2V0IH5JRUVFODAyMTFfQ09ORl9QUywgU28gd2UganVzdCBjaGVjaworCSAqIG11bHRpY2FzdCBmcmFtZXMgaGVyZSAqLworCWlmICghbV9idWZmZWQpIHsKKwkJLyogYmFjayB0byBsb3ctcG93ZXIgbGFuZC4gYW5kIGRlbGF5IGlzCisJCSAqIHByZXZlbnQgbnVsbCBwb3dlciBzYXZlIGZyYW1lIHR4IGZhaWwgKi8KKwkJcXVldWVfZGVsYXllZF93b3JrKHJ0bHByaXYtPndvcmtzLnJ0bF93cSwKKwkJCQkmcnRscHJpdi0+d29ya3MucHNfd29yaywgTVNFQ1MoNSkpOworCX0gZWxzZSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19ETUVTRywgKCJ1X2J1ZmZlcmQ6ICV4LCAiCisJCQkJIm1fYnVmZmVyZWQ6ICV4XG4iLCB1X2J1ZmZlZCwgbV9idWZmZWQpKTsKKwl9Cit9CisKK3ZvaWQgcnRsX3N3bHBzX3JmX2F3YWtlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXVuc2lnbmVkIGxvbmcgZmxhZzsKKworCWlmICghcnRscHJpdi0+cHNjLnN3Y3RybF9scHMpCisJCXJldHVybjsKKwlpZiAobWFjLT5saW5rX3N0YXRlICE9IE1BQzgwMjExX0xJTktFRCkKKwkJcmV0dXJuOworCisJaWYgKHBwc2MtPnJlZ19yZnBzX2xldmVsICYgUlRfUkZfTFBTX0xFVkVMX0FTUE0gJiYKKwkJUlRfSU5fUFNfTEVWRUwocHBzYywgUlRfUFNfTEVWRUxfQVNQTSkpIHsKKwkJcnRscHJpdi0+aW50Zl9vcHMtPmRpc2FibGVfYXNwbShodyk7CisJCVJUX0NMRUFSX1BTX0xFVkVMKHBwc2MsIFJUX1BTX0xFVkVMX0FTUE0pOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZydGxwcml2LT5sb2Nrcy5scHNfbG9jaywgZmxhZyk7CisJcnRsX3BzX3NldF9yZl9zdGF0ZShodywgRVJGT04sIFJGX0NIQU5HRV9CWV9QUywgZmFsc2UpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLmxwc19sb2NrLCBmbGFnKTsKK30KKwordm9pZCBydGxfc3dscHNfcmZvbl93cV9jYWxsYmFjayh2b2lkICpkYXRhKQoreworCXN0cnVjdCBydGxfd29ya3MgKnJ0bHdvcmtzID0KKwkgICAgY29udGFpbmVyX29mX2R3b3JrX3J0bChkYXRhLCBzdHJ1Y3QgcnRsX3dvcmtzLCBwc19yZm9uX3dxKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHJ0bHdvcmtzLT5odzsKKworCXJ0bF9zd2xwc19yZl9hd2FrZShodyk7Cit9CisKK3ZvaWQgcnRsX3N3bHBzX3JmX3NsZWVwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCXVuc2lnbmVkIGxvbmcgZmxhZzsKKwl1OCBzbGVlcF9pbnR2OworCisJaWYgKCFydGxwcml2LT5wc2Muc3dfcHNfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJaWYgKChydGxwcml2LT5zZWMuYmVpbmdfc2V0a2V5KSB8fAorCSAgICAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpKQorCQlyZXR1cm47CisKKwkvKnNsZWVwIGFmdGVyIGxpbmtlZCAxMHMsIHRvIGxldCBESENQIGFuZCA0LXdheSBoYW5kc2hha2Ugb2sgZW5vdWdoISEgKi8KKwlpZiAoKG1hYy0+bGlua19zdGF0ZSAhPSBNQUM4MDIxMV9MSU5LRUQpIHx8IChtYWMtPmNudF9hZnRlcl9saW5rZWQgPCA1KSkKKwkJcmV0dXJuOworCisJaWYgKHJ0bHByaXYtPmxpbmtfaW5mby5idXN5dHJhZmZpYykKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0bHByaXYtPmxvY2tzLnJmX3BzX2xvY2ssIGZsYWcpOworCWlmIChydGxwcml2LT5wc2MucmZjaGFuZ2VfaW5wcm9ncmVzcykgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5yZl9wc19sb2NrLCBmbGFnKTsKKwkJcmV0dXJuOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5yZl9wc19sb2NrLCBmbGFnKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZydGxwcml2LT5sb2Nrcy5scHNfbG9jaywgZmxhZyk7CisJcnRsX3BzX3NldF9yZl9zdGF0ZShodywgRVJGU0xFRVAsIFJGX0NIQU5HRV9CWV9QUywgZmFsc2UpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLmxwc19sb2NrLCBmbGFnKTsKKworCWlmIChwcHNjLT5yZWdfcmZwc19sZXZlbCAmIFJUX1JGX09GRl9MRVZMX0FTUE0gJiYKKwkJIVJUX0lOX1BTX0xFVkVMKHBwc2MsIFJUX1BTX0xFVkVMX0FTUE0pKSB7CisJCXJ0bHByaXYtPmludGZfb3BzLT5lbmFibGVfYXNwbShodyk7CisJCVJUX1NFVF9QU19MRVZFTChwcHNjLCBSVF9QU19MRVZFTF9BU1BNKTsKKwl9CisKKwkvKiBoZXJlIGlzIHBvd2VyIHNhdmUgYWxnLCB3aGVuIHRoaXMgYmVhY29uIGlzIERUSU0KKwkgKiB3ZSB3aWxsIHNldCBzbGVlcCB0aW1lIHRvIGR0aW1fcGVyaW9kICogbjsKKwkgKiB3aGVuIHRoaXMgYmVhY29uIGlzIG5vdCBEVElNLCB3ZSB3aWxsIHNldCBzbGVlcAorCSAqIHRpbWUgdG8gc2xlZXBfaW50diA9IHJ0bHByaXYtPnBzYy5kdGltX2NvdW50ZXIgb3IKKwkgKiBNQVhfU1dfTFBTX1NMRUVQX0lOVFYoZGVmYXVsdCBzZXQgdG8gNSkgKi8KKworCWlmIChydGxwcml2LT5wc2MuZHRpbV9jb3VudGVyID09IDApIHsKKwkJaWYgKGh3LT5jb25mLnBzX2R0aW1fcGVyaW9kID09IDEpCisJCQlzbGVlcF9pbnR2ID0gaHctPmNvbmYucHNfZHRpbV9wZXJpb2QgKiAyOworCQllbHNlCisJCQlzbGVlcF9pbnR2ID0gaHctPmNvbmYucHNfZHRpbV9wZXJpb2Q7CisJfSBlbHNlIHsKKwkJc2xlZXBfaW50diA9IHJ0bHByaXYtPnBzYy5kdGltX2NvdW50ZXI7CisJfQorCisJaWYgKHNsZWVwX2ludHYgPiBNQVhfU1dfTFBTX1NMRUVQX0lOVFYpCisJCXNsZWVwX2ludHYgPSBNQVhfU1dfTFBTX1NMRUVQX0lOVFY7CisKKwkvKiB0aGlzIHByaW50IHNob3VsZCBhbHdheXMgYmUgZHRpbV9jb250ZXIgPSAwICYKKwkgKiBzbGVlcCAgPSBkdGltX3BlcmlvZCwgdGhhdCBtZWFvbnMsIHdlIHNob3VsZAorCSAqIGF3YWtlIGJlZm9yZSBldmVyeSBkdGltICovCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9QT1dFUiwgREJHX0RNRVNHLAorCQkgKCJkdGltX2NvdW50ZXI6JXggd2lsbCBzbGVlcCA6JWQiCisJCSAiIGJlYWNvbl9pbnR2XG4iLCBydGxwcml2LT5wc2MuZHRpbV9jb3VudGVyLCBzbGVlcF9pbnR2KSk7CisKKwkvKiB3ZSB0ZXN0ZWQgdGhhdCA0MG1zIGlzIGVub3VnaCBmb3Igc3cgJiBodyBzdyBkZWxheSAqLworCXF1ZXVlX2RlbGF5ZWRfd29yayhydGxwcml2LT53b3Jrcy5ydGxfd3EsICZydGxwcml2LT53b3Jrcy5wc19yZm9uX3dxLAorCQkJTVNFQ1Moc2xlZXBfaW50diAqIG1hYy0+dmlmLT5ic3NfY29uZi5iZWFjb25faW50IC0gNDApKTsKK30KKworCit2b2lkIHJ0bF9zd2xwc193cV9jYWxsYmFjayh2b2lkICpkYXRhKQoreworCXN0cnVjdCBydGxfd29ya3MgKnJ0bHdvcmtzID0gY29udGFpbmVyX29mX2R3b3JrX3J0bChkYXRhLAorCQkJCSAgICAgc3RydWN0IHJ0bF93b3JrcywKKwkJCQkgICAgIHBzX3dvcmspOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcnRsd29ya3MtPmh3OworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlib29sIHBzID0gZmFsc2U7CisKKwlwcyA9IChody0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKTsKKworCS8qIHdlIGNhbiBzbGVlcCBhZnRlciBwcyBudWxsIHNlbmQgb2sgKi8KKwlpZiAocnRscHJpdi0+cHNjLnN0YXRlX2luYXApIHsKKwkJcnRsX3N3bHBzX3JmX3NsZWVwKGh3KTsKKworCQlpZiAocnRscHJpdi0+cHNjLnN0YXRlICYmICFwcykgeworCQkJcnRscHJpdi0+cHNjLnNsZWVwX21zID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0KKwkJCQkJcnRscHJpdi0+cHNjLmxhc3RfYWN0aW9uKTsKKwkJfQorCisJCWlmIChwcykKKwkJCXJ0bHByaXYtPnBzYy5sYXN0X3NsZXB0ID0gamlmZmllczsKKworCQlydGxwcml2LT5wc2MubGFzdF9hY3Rpb24gPSBqaWZmaWVzOworCQlydGxwcml2LT5wc2Muc3RhdGUgPSBwczsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BzLmgKaW5kZXggYWU1NmRhOC4uZTNiZjg5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcHMuaApAQCAtMzAsNiArMzAsOCBAQAogI2lmbmRlZiBfX1JFQUxURUtfUlRMX1BDSV9QU19IX18KICNkZWZpbmUgX19SRUFMVEVLX1JUTF9QQ0lfUFNfSF9fCiAKKyNkZWZpbmUgTUFYX1NXX0xQU19TTEVFUF9JTlRWCTUKKwogYm9vbCBydGxfcHNfc2V0X3JmX3N0YXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJIGVudW0gcmZfcHdyc3RhdGUgc3RhdGVfdG9zZXQsIHUzMiBjaGFuZ2Vzb3VyY2UsCiAJCQkgYm9vbCBwcm90ZWN0X29yX25vdCk7CkBAIC00MCw0ICs0MiwxMSBAQAogdm9pZCBydGxfaXBzX25pY19vZmZfd3FfY2FsbGJhY2sodm9pZCAqZGF0YSk7CiB2b2lkIHJ0bF9scHNfZW50ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogdm9pZCBydGxfbHBzX2xlYXZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwordm9pZCBydGxfc3dscHNfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKTsKK3ZvaWQgcnRsX3N3bHBzX3dxX2NhbGxiYWNrKHZvaWQgKmRhdGEpOwordm9pZCBydGxfc3dscHNfcmZvbl93cV9jYWxsYmFjayh2b2lkICpkYXRhKTsKK3ZvaWQgcnRsX3N3bHBzX3JmX2F3YWtlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsX3N3bHBzX3JmX3NsZWVwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3JjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3JjLmMKaW5kZXggOTE2MzQxMC4uMzBkYTY4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9yYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcmMuYwpAQCAtMzgsMTcgKzM4LDE0IEBACiAgKkNDSzExTSBvciBPRkRNXzU0TSBiYXNlZCBvbiB3aXJlbGVzcyBtb2RlLgogICovCiBzdGF0aWMgdTggX3J0bF9yY19nZXRfaGlnaGVzdF9yaXgoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJCQkgIHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgbm90X2RhdGEpCiB7CiAJc3RydWN0IHJ0bF9tYWMgKnJ0bG1hYyA9IHJ0bF9tYWMocnRscHJpdik7Ci0KLQkvKgotCSAqbWd0IHVzZSAxTSwgYWx0aG91Z2ggd2UgaGF2ZSBjaGVjayBpdAotCSAqYmVmb3JlIHRoaXMgZnVuY3Rpb24gdXNlIHJhdGVfY29udHJvbF9zZW5kX2xvdywKLQkgKndlIHN0aWxsIGNoZWNrIGl0IGhlcmUKLQkgKi8KLQlpZiAobm90X2RhdGEpCi0JCXJldHVybiBydGxwcml2LT5jZmctPm1hcHNbUlRMX1JDX0NDS19SQVRFMU1dOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bHByaXYpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJc3RydWN0IHJ0bF9zdGFfaW5mbyAqc3RhX2VudHJ5ID0gTlVMTDsKKwl1OCB3aXJlbGVzc19tb2RlID0gMDsKIAogCS8qCiAJICp0aGlzIHJhdGUgaXMgbm8gdXNlIGZvciB0cnVlIHJhdGUsIGZpcm13YXJlCkBAIC01NywzNSArNTQsNzggQEAKIAkgKjIuaW4gcnRsX2dldF90Y2JfZGVzYyB3aGVuIHdlIGNoZWNrIHJhdGUgaXMKIAkgKiAgICAgIDFNIHdlIHdpbGwgbm90IHVzZSBGVyByYXRlIGJ1dCB1c2VyIHJhdGUuCiAJICovCi0JaWYgKHJ0bF9pc19zcGVjaWFsX2RhdGEocnRscHJpdi0+bWFjODAyMTEuaHcsIHNrYiwgdHJ1ZSkpIHsKLQkJcmV0dXJuIHJ0bHByaXYtPmNmZy0+bWFwc1tSVExfUkNfQ0NLX1JBVEUxTV07CisJaWYgKHJ0bG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CisJCXJ0bG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCWlmIChzdGEpIHsKKwkJCXN0YV9lbnRyeSA9IChzdHJ1Y3QgcnRsX3N0YV9pbmZvICopIHN0YS0+ZHJ2X3ByaXY7CisJCQl3aXJlbGVzc19tb2RlID0gc3RhX2VudHJ5LT53aXJlbGVzc19tb2RlOworCQl9IGVsc2UgeworCQkJcmV0dXJuIDA7CisJCX0KIAl9IGVsc2UgewotCQlpZiAocnRsbWFjLT5tb2RlID09IFdJUkVMRVNTX01PREVfQikKLQkJCXJldHVybiBydGxwcml2LT5jZmctPm1hcHNbUlRMX1JDX0NDS19SQVRFMTFNXTsKLQkJZWxzZQotCQkJcmV0dXJuIHJ0bHByaXYtPmNmZy0+bWFwc1tSVExfUkNfT0ZETV9SQVRFNTRNXTsKKwkJd2lyZWxlc3NfbW9kZSA9IHJ0bG1hYy0+bW9kZTsKKwl9CisKKwlpZiAocnRsX2lzX3NwZWNpYWxfZGF0YShydGxwcml2LT5tYWM4MDIxMS5odywgc2tiLCB0cnVlKSB8fAorCQkJbm90X2RhdGEpIHsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJaWYgKHJ0bGhhbC0+Y3VycmVudF9iYW5kdHlwZSA9PSBCQU5EX09OXzJfNEcpIHsKKwkJCWlmICh3aXJlbGVzc19tb2RlID09IFdJUkVMRVNTX01PREVfQikgeworCQkJCXJldHVybiBCX01PREVfTUFYX1JJWDsKKwkJCX0gZWxzZSBpZiAod2lyZWxlc3NfbW9kZSA9PSBXSVJFTEVTU19NT0RFX0cpIHsKKwkJCQlyZXR1cm4gR19NT0RFX01BWF9SSVg7CisJCQl9IGVsc2UgeworCQkJCWlmIChnZXRfcmZfdHlwZShydGxwaHkpICE9IFJGXzJUMlIpCisJCQkJCXJldHVybiBOX01PREVfTUNTN19SSVg7CisJCQkJZWxzZQorCQkJCQlyZXR1cm4gTl9NT0RFX01DUzE1X1JJWDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmICh3aXJlbGVzc19tb2RlID09IFdJUkVMRVNTX01PREVfQSkgeworCQkJCXJldHVybiBBX01PREVfTUFYX1JJWDsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGdldF9yZl90eXBlKHJ0bHBoeSkgIT0gUkZfMlQyUikKKwkJCQkJcmV0dXJuIE5fTU9ERV9NQ1M3X1JJWDsKKwkJCQllbHNlCisJCQkJCXJldHVybiBOX01PREVfTUNTMTVfUklYOworCQkJfQorCQl9CiAJfQogfQogCiBzdGF0aWMgdm9pZCBfcnRsX3JjX3JhdGVfc2V0X3NlcmllcyhzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYsCisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZSwKIAkJCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlX2NvbnRyb2wgKnR4cmMsCi0JCQkJICAgIHU4IHRyaWVzLCB1OCByaXgsIGludCBydHNjdHNlbmFibGUsCisJCQkJICAgIHU4IHRyaWVzLCBjaGFyIHJpeCwgaW50IHJ0c2N0c2VuYWJsZSwKIAkJCQkgICAgYm9vbCBub3RfZGF0YSkKIHsKIAlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxwcml2KTsKKwl1OCBzZ2lfMjAgPSAwLCBzZ2lfNDAgPSAwOwogCisJaWYgKHN0YSkgeworCQlzZ2lfMjAgPSBzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NHSV8yMDsKKwkJc2dpXzQwID0gc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TR0lfNDA7CisJfQogCXJhdGUtPmNvdW50ID0gdHJpZXM7Ci0JcmF0ZS0+aWR4ID0gKHJpeCA+IDB4MikgPyByaXggOiAweDI7CisJcmF0ZS0+aWR4ID0gcml4ID49IDB4MDAgPyByaXggOiAweDAwOwogCiAJaWYgKCFub3RfZGF0YSkgewogCQlpZiAodHhyYy0+c2hvcnRfcHJlYW1ibGUpCiAJCQlyYXRlLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFOwotCQlpZiAobWFjLT5id180MCkKLQkJCXJhdGUtPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ180MF9NSFpfV0lEVEg7Ci0JCWlmIChtYWMtPnNnaV8yMCB8fCBtYWMtPnNnaV80MCkKKwkJaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CisJCQltYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQkJaWYgKHN0YSAmJiAoc3RhLT5odF9jYXAuY2FwICYKKwkJCSAgICBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MCkpCisJCQkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSDsKKwkJfSBlbHNlIHsKKwkJCWlmIChtYWMtPmJ3XzQwKQorCQkJCXJhdGUtPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ180MF9NSFpfV0lEVEg7CisJCX0KKwkJaWYgKHNnaV8yMCB8fCBzZ2lfNDApCiAJCQlyYXRlLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfU0hPUlRfR0k7Ci0JCWlmIChtYWMtPmh0X2VuYWJsZSkKKwkJaWYgKHN0YSAmJiBzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpCiAJCQlyYXRlLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfTUNTOwogCX0KIH0KQEAgLTk3LDM5ICsxMzcsMzkgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHhyYy0+c2tiOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGVzID0gdHhfaW5mby0+Y29udHJvbC5yYXRlczsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCV9fbGUxNiBmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKKwlfX2xlMTYgZmMgPSBydGxfZ2V0X2ZjKHNrYik7CiAJdTggdHJ5X3Blcl9yYXRlLCBpLCByaXg7CiAJYm9vbCBub3RfZGF0YSA9ICFpZWVlODAyMTFfaXNfZGF0YShmYyk7CiAKIAlpZiAocmF0ZV9jb250cm9sX3NlbmRfbG93KHN0YSwgcHJpdl9zdGEsIHR4cmMpKQogCQlyZXR1cm47CiAKLQlyaXggPSBfcnRsX3JjX2dldF9oaWdoZXN0X3JpeChydGxwcml2LCBza2IsIG5vdF9kYXRhKTsKLQorCXJpeCA9IF9ydGxfcmNfZ2V0X2hpZ2hlc3Rfcml4KHJ0bHByaXYsIHN0YSwgc2tiLCBub3RfZGF0YSk7CiAJdHJ5X3Blcl9yYXRlID0gMTsKLQlfcnRsX3JjX3JhdGVfc2V0X3NlcmllcyhydGxwcml2LCAmcmF0ZXNbMF0sIHR4cmMsCisJX3J0bF9yY19yYXRlX3NldF9zZXJpZXMocnRscHJpdiwgc3RhLCAmcmF0ZXNbMF0sIHR4cmMsCiAJCQkJdHJ5X3Blcl9yYXRlLCByaXgsIDEsIG5vdF9kYXRhKTsKIAogCWlmICghbm90X2RhdGEpIHsKIAkJZm9yIChpID0gMTsgaSA8IDQ7IGkrKykKLQkJCV9ydGxfcmNfcmF0ZV9zZXRfc2VyaWVzKHJ0bHByaXYsICZyYXRlc1tpXSwKKwkJCV9ydGxfcmNfcmF0ZV9zZXRfc2VyaWVzKHJ0bHByaXYsIHN0YSwgJnJhdGVzW2ldLAogCQkJCQkJdHhyYywgaSwgKHJpeCAtIGkpLCAxLAogCQkJCQkJbm90X2RhdGEpOwogCX0KIH0KIAotc3RhdGljIGJvb2wgX3J0bF90eF9hZ2dyX2NoZWNrKHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiwgdTE2IHRpZCkKK3N0YXRpYyBib29sIF9ydGxfdHhfYWdncl9jaGVjayhzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYsCisJCXN0cnVjdCBydGxfc3RhX2luZm8gKnN0YV9lbnRyeSwgdTE2IHRpZCkKIHsKIAlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxwcml2KTsKIAogCWlmIChtYWMtPmFjdF9zY2FubmluZykKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKG1hYy0+Y250X2FmdGVyX2xpbmtlZCA8IDMpCisJaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKKwkJbWFjLT5jbnRfYWZ0ZXJfbGlua2VkIDwgMykKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKG1hYy0+dGlkc1t0aWRdLmFnZy5hZ2dfc3RhdGUgPT0gUlRMX0FHR19PRkYpCisJaWYgKHN0YV9lbnRyeS0+dGlkc1t0aWRdLmFnZy5hZ2dfc3RhdGUgPT0gUlRMX0FHR19TVE9QKQogCQlyZXR1cm4gdHJ1ZTsKIAogCXJldHVybiBmYWxzZTsKQEAgLTE0MywxMSArMTgzLDkgQEAKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBwcHJpdjsKIAlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxwcml2KTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwotCV9fbGUxNiBmYzsKLQotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKLQlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gcnRsX2dldF9oZHIoc2tiKTsKKwlfX2xlMTYgZmMgPSBydGxfZ2V0X2ZjKHNrYik7CisJc3RydWN0IHJ0bF9zdGFfaW5mbyAqc3RhX2VudHJ5OwogCiAJaWYgKCFwcml2X3N0YSB8fCAhaWVlZTgwMjExX2lzX2RhdGEoZmMpKQogCQlyZXR1cm47CkBAIC0xNTksMTcgKzE5NywyMSBAQAogCSAgICB8fCBpc19icm9hZGNhc3RfZXRoZXJfYWRkcihpZWVlODAyMTFfZ2V0X0RBKGhkcikpKQogCQlyZXR1cm47CiAKLQkvKiBDaGVjayBpZiBhZ2dyZWdhdGlvbiBoYXMgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyB0aWQgKi8KLQlpZiAoY29uZl9pc19odCgmbWFjLT5ody0+Y29uZikgJiYKLQkgICAgIShza2ItPnByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX1BBRSkpKSB7Ci0JCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKSB7Ci0JCQl1OCAqcWMsIHRpZDsKLQotCQkJcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKLQkJCXRpZCA9IHFjWzBdICYgMHhmOwotCi0JCQlpZiAoX3J0bF90eF9hZ2dyX2NoZWNrKHJ0bHByaXYsIHRpZCkpCi0JCQkJaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24oc3RhLCB0aWQsIDUwMDApOworCWlmIChzdGEpIHsKKwkJLyogQ2hlY2sgaWYgYWdncmVnYXRpb24gaGFzIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgdGlkICovCisJCXN0YV9lbnRyeSA9IChzdHJ1Y3QgcnRsX3N0YV9pbmZvICopIHN0YS0+ZHJ2X3ByaXY7CisJCWlmICgoc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkID09IHRydWUpICYmCisJCQkJIShza2ItPnByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX1BBRSkpKSB7CisJCQlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgeworCQkJCXU4IHRpZCA9IHJ0bF9nZXRfdGlkKHNrYik7CisJCQkJaWYgKF9ydGxfdHhfYWdncl9jaGVjayhydGxwcml2LCBzdGFfZW50cnksCisJCQkJICAgIHRpZCkpIHsKKwkJCQkJc3RhX2VudHJ5LT50aWRzW3RpZF0uYWdnLmFnZ19zdGF0ZSA9CisJCQkJCQkJIFJUTF9BR0dfUFJPR1JFU1M7CisJCQkJCWllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKHN0YSwKKwkJCQkJCQkJIHRpZCwgNTAwMCk7CisJCQkJfQorCQkJfQogCQl9CiAJfQogfQpAQCAtMTc4LDQzICsyMjAsNiBAQAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKIAkJCSAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdm9pZCAqcHJpdl9zdGEpCiB7Ci0Jc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcHByaXY7Ci0Jc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRscHJpdik7Ci0JdTggaXNfaHQgPSBjb25mX2lzX2h0KCZtYWMtPmh3LT5jb25mKTsKLQotCWlmICgobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfHwKLQkgICAgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHx8Ci0JICAgIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykpIHsKLQotCQlzd2l0Y2ggKHNiYW5kLT5iYW5kKSB7Ci0JCWNhc2UgSUVFRTgwMjExX0JBTkRfMkdIWjoKLQkJCXJ0bHByaXYtPnJhdGVfcHJpdi0+Y3VyX3JhdGV0YWJfaWR4ID0KLQkJCSAgICBSQVRSX0lOWF9XSVJFTEVTU19HOwotCQkJaWYgKGlzX2h0KQotCQkJCXJ0bHByaXYtPnJhdGVfcHJpdi0+Y3VyX3JhdGV0YWJfaWR4ID0KLQkJCQkgICAgUkFUUl9JTlhfV0lSRUxFU1NfTkdCOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX0JBTkRfNUdIWjoKLQkJCXJ0bHByaXYtPnJhdGVfcHJpdi0+Y3VyX3JhdGV0YWJfaWR4ID0KLQkJCSAgICBSQVRSX0lOWF9XSVJFTEVTU19BOwotCQkJaWYgKGlzX2h0KQotCQkJCXJ0bHByaXYtPnJhdGVfcHJpdi0+Y3VyX3JhdGV0YWJfaWR4ID0KLQkJCQkgICAgUkFUUl9JTlhfV0lSRUxFU1NfTkdCOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX1dBUk5JTkcsCi0JCQkJICgiSW52YWxpZCBiYW5kXG4iKSk7Ci0JCQlydGxwcml2LT5yYXRlX3ByaXYtPmN1cl9yYXRldGFiX2lkeCA9Ci0JCQkgICAgUkFUUl9JTlhfV0lSRUxFU1NfTkdCOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1JBVEUsIERCR19ETUVTRywKLQkJCSAoIkNob29zaW5nIHJhdGUgdGFibGUgaW5kZXg6ICVkXG4iLAotCQkJICBydGxwcml2LT5yYXRlX3ByaXYtPmN1cl9yYXRldGFiX2lkeCkpOwotCi0JfQotCiB9CiAKIHN0YXRpYyB2b2lkIHJ0bF9yYXRlX3VwZGF0ZSh2b2lkICpwcHJpdiwKQEAgLTIyMyw0OSArMjI4LDYgQEAKIAkJCSAgICB1MzIgY2hhbmdlZCwKIAkJCSAgICBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIG9wZXJfY2hhbl90eXBlKQogewotCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHBwcml2OwotCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bHByaXYpOwotCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bHByaXYpOwotCWJvb2wgb3Blcl9jdzQwID0gZmFsc2UsIG9wZXJfc2dpNDA7Ci0JYm9vbCBsb2NhbF9jdzQwID0gbWFjLT5id180MDsKLQlib29sIGxvY2FsX3NnaTQwID0gbWFjLT5zZ2lfNDA7Ci0JdTggaXNfaHQgPSBjb25mX2lzX2h0KCZtYWMtPmh3LT5jb25mKTsKLQotCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX1JDX0hUX0NIQU5HRUQpIHsKLQkJaWYgKG1hYy0+b3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCi0JCQlyZXR1cm47Ci0KLQkJaWYgKHJ0bGhhbC0+aHctPmNvbmYuY2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwTUlOVVMgfHwKLQkJICAgIHJ0bGhhbC0+aHctPmNvbmYuY2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwUExVUykKLQkJCW9wZXJfY3c0MCA9IHRydWU7Ci0KLQkJb3Blcl9zZ2k0MCA9IG1hYy0+c2dpXzQwOwotCi0JCWlmICgobG9jYWxfY3c0MCAhPSBvcGVyX2N3NDApIHx8IChsb2NhbF9zZ2k0MCAhPSBvcGVyX3NnaTQwKSkgewotCQkJc3dpdGNoIChzYmFuZC0+YmFuZCkgewotCQkJY2FzZSBJRUVFODAyMTFfQkFORF8yR0haOgotCQkJCXJ0bHByaXYtPnJhdGVfcHJpdi0+Y3VyX3JhdGV0YWJfaWR4ID0KLQkJCQkgICAgUkFUUl9JTlhfV0lSRUxFU1NfRzsKLQkJCQlpZiAoaXNfaHQpCi0JCQkJCXJ0bHByaXYtPnJhdGVfcHJpdi0+Y3VyX3JhdGV0YWJfaWR4ID0KLQkJCQkJICAgIFJBVFJfSU5YX1dJUkVMRVNTX05HQjsKLQkJCQlicmVhazsKLQkJCWNhc2UgSUVFRTgwMjExX0JBTkRfNUdIWjoKLQkJCQlydGxwcml2LT5yYXRlX3ByaXYtPmN1cl9yYXRldGFiX2lkeCA9Ci0JCQkJICAgIFJBVFJfSU5YX1dJUkVMRVNTX0E7Ci0JCQkJaWYgKGlzX2h0KQotCQkJCQlydGxwcml2LT5yYXRlX3ByaXYtPmN1cl9yYXRldGFiX2lkeCA9Ci0JCQkJCSAgICBSQVRSX0lOWF9XSVJFTEVTU19OR0I7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCi0JCQkJCSAoIkludmFsaWQgYmFuZFxuIikpOwotCQkJCXJ0bHByaXYtPnJhdGVfcHJpdi0+Y3VyX3JhdGV0YWJfaWR4ID0KLQkJCQkgICAgUkFUUl9JTlhfV0lSRUxFU1NfTkdCOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQogfQogCiBzdGF0aWMgdm9pZCAqcnRsX3JhdGVfYWxsb2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3JjLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3JjLmgKaW5kZXggYjQ2NjdjMC4uNGFmYTJjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9yYy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcmMuaApAQCAtMzAsOCArMzAsMTUgQEAKICNpZm5kZWYgX19SVExfUkNfSF9fCiAjZGVmaW5lIF9fUlRMX1JDX0hfXwogCisjZGVmaW5lIEJfTU9ERV9NQVhfUklYIDMKKyNkZWZpbmUgR19NT0RFX01BWF9SSVggMTEKKyNkZWZpbmUgQV9NT0RFX01BWF9SSVggNworCisvKiBpbiBtYWM4MDIxMSBtY3MwLW1jczE1IGlzIGlkeDAtaWR4MTUqLworI2RlZmluZSBOX01PREVfTUNTN19SSVggNworI2RlZmluZSBOX01PREVfTUNTMTVfUklYIDE1CisKIHN0cnVjdCBydGxfcmF0ZV9wcml2IHsKLQl1OCBjdXJfcmF0ZXRhYl9pZHg7CiAJdTggaHRfY2FwOwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9yZWdkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3JlZ2QuYwppbmRleCBkMjZmOTU3Li44ZjY3MThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3JlZ2QuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3JlZ2QuYwpAQCAtNjYsMzEgKzY2LDgzIEBACiAJTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOIHwgXAogCU5MODAyMTFfUlJGX05PX09GRE0pCiAKKy8qIDVHIGNoYW4gMzYgLSBjaGFuIDY0Ki8KKyNkZWZpbmUgUlRMODE5eF81R0haXzUxNTBfNTM1MAlcCisJUkVHX1JVTEUoNTE1MC0xMCwgNTM1MCsxMCwgNDAsIDAsIDMwLCBcCisJTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOIHwgXAorCU5MODAyMTFfUlJGX05PX0lCU1MpCisKKy8qIDVHIGNoYW4gMTAwIC0gY2hhbiAxNjUqLworI2RlZmluZSBSVEw4MTl4XzVHSFpfNTQ3MF81ODUwCVwKKwlSRUdfUlVMRSg1NDcwLTEwLCA1ODUwKzEwLCA0MCwgMCwgMzAsIFwKKwlOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4gfCBcCisJTkw4MDIxMV9SUkZfTk9fSUJTUykKKworLyogNUcgY2hhbiAxNDkgLSBjaGFuIDE2NSovCisjZGVmaW5lIFJUTDgxOXhfNUdIWl81NzI1XzU4NTAJXAorCVJFR19SVUxFKDU3MjUtMTAsIDU4NTArMTAsIDQwLCAwLCAzMCwgXAorCU5MODAyMTFfUlJGX1BBU1NJVkVfU0NBTiB8IFwKKwlOTDgwMjExX1JSRl9OT19JQlNTKQorCisjZGVmaW5lIFJUTDgxOXhfNUdIWl9BTEwJXAorCShSVEw4MTl4XzVHSFpfNTE1MF81MzUwLCBSVEw4MTl4XzVHSFpfNTQ3MF81ODUwKQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gcnRsX3JlZ2RvbV8xMSA9IHsKIAkubl9yZWdfcnVsZXMgPSAxLAogCS5hbHBoYTIgPSAiOTkiLAogCS5yZWdfcnVsZXMgPSB7CiAJCSAgICAgIFJUTDgxOXhfMkdIWl9DSDAxXzExLAotCX0KKwkJICAgICAgfQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluIHJ0bF9yZWdkb21fZ2xvYmFsID0gewotCS5uX3JlZ19ydWxlcyA9IDMsCi0JLmFscGhhMiA9ICI5OSIsCi0JLnJlZ19ydWxlcyA9IHsKLQkJICAgICAgUlRMODE5eF8yR0haX0NIMDFfMTEsCi0JCSAgICAgIFJUTDgxOXhfMkdIWl9DSDEyXzEzLAotCQkgICAgICBSVEw4MTl4XzJHSFpfQ0gxNCwKLQl9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gcnRsX3JlZ2RvbV93b3JsZCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiBydGxfcmVnZG9tXzEyXzEzID0gewogCS5uX3JlZ19ydWxlcyA9IDIsCiAJLmFscGhhMiA9ICI5OSIsCiAJLnJlZ19ydWxlcyA9IHsKIAkJICAgICAgUlRMODE5eF8yR0haX0NIMDFfMTEsCi0JCSAgICAgIFJUTDgxOXhfMkdIWl9DSDEyXzEzLAotCX0KKwkJCSAgUlRMODE5eF8yR0haX0NIMTJfMTMsCisJCSAgICAgIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiBydGxfcmVnZG9tX25vX21pZGJhbmQgPSB7CisJLm5fcmVnX3J1bGVzID0gMywKKwkuYWxwaGEyID0gIjk5IiwKKwkucmVnX3J1bGVzID0geworCQkgICAgICBSVEw4MTl4XzJHSFpfQ0gwMV8xMSwKKwkJCSAgUlRMODE5eF81R0haXzUxNTBfNTM1MCwKKwkJCSAgUlRMODE5eF81R0haXzU3MjVfNTg1MCwKKwkJICAgICAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluIHJ0bF9yZWdkb21fNjBfNjQgPSB7CisJLm5fcmVnX3J1bGVzID0gMywKKwkuYWxwaGEyID0gIjk5IiwKKwkucmVnX3J1bGVzID0geworCQkgICAgICBSVEw4MTl4XzJHSFpfQ0gwMV8xMSwKKwkJCSAgUlRMODE5eF8yR0haX0NIMTJfMTMsCisJCQkgIFJUTDgxOXhfNUdIWl81NzI1XzU4NTAsCisJCSAgICAgIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiBydGxfcmVnZG9tXzE0XzYwXzY0ID0geworCS5uX3JlZ19ydWxlcyA9IDQsCisJLmFscGhhMiA9ICI5OSIsCisJLnJlZ19ydWxlcyA9IHsKKwkJICAgICAgUlRMODE5eF8yR0haX0NIMDFfMTEsCisJCQkgIFJUTDgxOXhfMkdIWl9DSDEyXzEzLAorCQkJICBSVEw4MTl4XzJHSFpfQ0gxNCwKKwkJCSAgUlRMODE5eF81R0haXzU3MjVfNTg1MCwKKwkJICAgICAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluIHJ0bF9yZWdkb21fMTQgPSB7CisJLm5fcmVnX3J1bGVzID0gMywKKwkuYWxwaGEyID0gIjk5IiwKKwkucmVnX3J1bGVzID0geworCQkgICAgICBSVEw4MTl4XzJHSFpfQ0gwMV8xMSwKKwkJCSAgUlRMODE5eF8yR0haX0NIMTJfMTMsCisJCQkgIFJUTDgxOXhfMkdIWl9DSDE0LAorCQkgICAgICB9CiB9OwogCiBzdGF0aWMgYm9vbCBfcnRsX2lzX3JhZGFyX2ZyZXEodTE2IGNlbnRlcl9mcmVxKQpAQCAtMTYyLDYgKzIxNCw4IEBACiAJdTMyIGJhbmR3aWR0aCA9IDA7CiAJaW50IHI7CiAKKwlpZiAoIXdpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSkKKwkJcmV0dXJuOwogCXNiYW5kID0gd2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOwogCiAJLyoKQEAgLTI5MiwyNSArMzQ2LDI2IEBACiB7CiAJc3dpdGNoIChyZWctPmNvdW50cnlfY29kZSkgewogCWNhc2UgQ09VTlRSWV9DT0RFX0ZDQzoKKwkJcmV0dXJuICZydGxfcmVnZG9tX25vX21pZGJhbmQ7CiAJY2FzZSBDT1VOVFJZX0NPREVfSUM6CiAJCXJldHVybiAmcnRsX3JlZ2RvbV8xMTsKIAljYXNlIENPVU5UUllfQ09ERV9FVFNJOgorCWNhc2UgQ09VTlRSWV9DT0RFX1RFTEVDX05FVEdFQVI6CisJCXJldHVybiAmcnRsX3JlZ2RvbV82MF82NDsKIAljYXNlIENPVU5UUllfQ09ERV9TUEFJTjoKIAljYXNlIENPVU5UUllfQ09ERV9GUkFOQ0U6CiAJY2FzZSBDT1VOVFJZX0NPREVfSVNSQUVMOgotCWNhc2UgQ09VTlRSWV9DT0RFX1RFTEVDX05FVEdFQVI6Ci0JCXJldHVybiAmcnRsX3JlZ2RvbV93b3JsZDsKKwljYXNlIENPVU5UUllfQ09ERV9XT1JMRF9XSURFXzEzOgorCQlyZXR1cm4gJnJ0bF9yZWdkb21fMTJfMTM7CiAJY2FzZSBDT1VOVFJZX0NPREVfTUtLOgogCWNhc2UgQ09VTlRSWV9DT0RFX01LSzE6CiAJY2FzZSBDT1VOVFJZX0NPREVfVEVMRUM6CiAJY2FzZSBDT1VOVFJZX0NPREVfTUlDOgotCQlyZXR1cm4gJnJ0bF9yZWdkb21fZ2xvYmFsOworCQlyZXR1cm4gJnJ0bF9yZWdkb21fMTRfNjBfNjQ7CiAJY2FzZSBDT1VOVFJZX0NPREVfR0xPQkFMX0RPTUFJTjoKLQkJcmV0dXJuICZydGxfcmVnZG9tX2dsb2JhbDsKLQljYXNlIENPVU5UUllfQ09ERV9XT1JMRF9XSURFXzEzOgotCQlyZXR1cm4gJnJ0bF9yZWdkb21fd29ybGQ7CisJCXJldHVybiAmcnRsX3JlZ2RvbV8xNDsKIAlkZWZhdWx0OgotCQlyZXR1cm4gJnJ0bF9yZWdkb21fd29ybGQ7CisJCXJldHVybiAmcnRsX3JlZ2RvbV9ub19taWRiYW5kOwogCX0KIH0KIApAQCAtMzIzLDkgKzM3OCwxMSBAQAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZWdkOwogCiAJd2lwaHktPnJlZ19ub3RpZmllciA9IHJlZ19ub3RpZmllcjsKKwogCXdpcGh5LT5mbGFncyB8PSBXSVBIWV9GTEFHX0NVU1RPTV9SRUdVTEFUT1JZOwogCXdpcGh5LT5mbGFncyAmPSB+V0lQSFlfRkxBR19TVFJJQ1RfUkVHVUxBVE9SWTsKIAl3aXBoeS0+ZmxhZ3MgJj0gfldJUEhZX0ZMQUdfRElTQUJMRV9CRUFDT05fSElOVFM7CisKIAlyZWdkID0gX3J0bF9yZWdkb21haW5fc2VsZWN0KHJlZyk7CiAJd2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkod2lwaHksIHJlZ2QpOwogCV9ydGxfcmVnX2FwcGx5X3JhZGFyX2ZsYWdzKHdpcGh5KTsKQEAgLTM1NSw4ICs0MTIsOCBAQAogCWlmICh3aXBoeSA9PSBOVUxMIHx8ICZydGxwcml2LT5yZWdkID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JLyogZm9yY2UgdGhlIGNoYW5uZWwgcGxhbiB0byB3b3JsZCB3aWRlIDEzICovCi0JcnRscHJpdi0+cmVnZC5jb3VudHJ5X2NvZGUgPSBDT1VOVFJZX0NPREVfV09STERfV0lERV8xMzsKKwkvKiBpbml0IGNvdW50cnlfY29kZSBmcm9tIGVmdXNlIGNoYW5uZWwgcGxhbiAqLworCXJ0bHByaXYtPnJlZ2QuY291bnRyeV9jb2RlID0gcnRscHJpdi0+ZWZ1c2UuY2hhbm5lbF9wbGFuOwogCiAJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9SRUdELCBEQkdfVFJBQ0UsCiAJCSAoS0VSTl9ERUJVRyAicnRsOiBFRVBST00gcmVnZG9tYWluOiAweCUweFxuIiwKQEAgLTM3Myw4ICs0MzAsOCBAQAogCWNvdW50cnkgPSBfcnRsX3JlZ2RfZmluZF9jb3VudHJ5KHJ0bHByaXYtPnJlZ2QuY291bnRyeV9jb2RlKTsKIAogCWlmIChjb3VudHJ5KSB7Ci0JCXJ0bHByaXYtPnJlZ2QuYWxwaGEyWzBdID0gY291bnRyeS0+aXNvTmFtZVswXTsKLQkJcnRscHJpdi0+cmVnZC5hbHBoYTJbMV0gPSBjb3VudHJ5LT5pc29OYW1lWzFdOworCQlydGxwcml2LT5yZWdkLmFscGhhMlswXSA9IGNvdW50cnktPmlzb19uYW1lWzBdOworCQlydGxwcml2LT5yZWdkLmFscGhhMlsxXSA9IGNvdW50cnktPmlzb19uYW1lWzFdOwogCX0gZWxzZSB7CiAJCXJ0bHByaXYtPnJlZ2QuYWxwaGEyWzBdID0gJzAnOwogCQlydGxwcml2LT5yZWdkLmFscGhhMlsxXSA9ICcwJzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcmVnZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9yZWdkLmgKaW5kZXggNGNkYmM0YS4uZDIzMTE4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9yZWdkLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9yZWdkLmgKQEAgLTMyLDcgKzMyLDcgQEAKIAogc3RydWN0IGNvdW50cnlfY29kZV90b19lbnVtX3JkIHsKIAl1MTYgY291bnRyeWNvZGU7Ci0JY29uc3QgY2hhciAqaXNvTmFtZTsKKwljb25zdCBjaGFyICppc29fbmFtZTsKIH07CiAKIGVudW0gY291bnRyeV9jb2RlX3R5cGVfdCB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjL2RtX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyYy9kbV9jb21tb24uYwppbmRleCBiYjAyMzI3Li45NzE4MzgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjL2RtX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmMvZG1fY29tbW9uLmMKQEAgLTI4LDEwICsyOCwyNiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSAiZG1fY29tbW9uLmgiCisjaW5jbHVkZSAicGh5X2NvbW1vbi5oIgorI2luY2x1ZGUgIi4uL3BjaS5oIgorI2luY2x1ZGUgIi4uL2Jhc2UuaCIKIAogc3RydWN0IGRpZ190IGRtX2RpZ3RhYmxlOwogc3RhdGljIHN0cnVjdCBwc190IGRtX3BzdGFibGU7CiAKKyNkZWZpbmUgQlRfUlNTSV9TVEFURV9OT1JNQUxfUE9XRVIJQklUX09GRlNFVF9MRU5fTUFTS18zMigwLCAxKQorI2RlZmluZSBCVF9SU1NJX1NUQVRFX0FNRFBVX09GRgkJQklUX09GRlNFVF9MRU5fTUFTS18zMigxLCAxKQorI2RlZmluZSBCVF9SU1NJX1NUQVRFX1NQRUNJQUxfTE9XCUJJVF9PRkZTRVRfTEVOX01BU0tfMzIoMiwgMSkKKyNkZWZpbmUgQlRfUlNTSV9TVEFURV9CR19FRENBX0xPVwlCSVRfT0ZGU0VUX0xFTl9NQVNLXzMyKDMsIDEpCisjZGVmaW5lIEJUX1JTU0lfU1RBVEVfVFhQT1dFUl9MT1cJQklUX09GRlNFVF9MRU5fTUFTS18zMig0LCAxKQorCisjZGVmaW5lIFJUTFBSSVYJCQkoc3RydWN0IHJ0bF9wcml2ICopCisjZGVmaW5lIEdFVF9VTkRFQ09SQVRFRF9BVkVSQUdFX1JTU0koX3ByaXYpCVwKKwkoKFJUTFBSSVYoX3ByaXYpKS0+bWFjODAyMTEub3Btb2RlID09IFwKKwkJCSAgICAgTkw4MDIxMV9JRlRZUEVfQURIT0MpID8JXAorCSgoUlRMUFJJVihfcHJpdikpLT5kbS5lbnRyeV9taW5fdW5kZWNvcmF0ZWRzbW9vdGhlZF9wd2RiKSA6IFwKKwkoKFJUTFBSSVYoX3ByaXYpKS0+ZG0udW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYikKKwogc3RhdGljIGNvbnN0IHUzMiBvZmRtc3dpbmdfdGFibGVbT0ZETV9UQUJMRV9TSVpFXSA9IHsKIAkweDdmODAwMWZlLAogCTB4Nzg4MDAxZTIsCkBAIC0zMDQsNyArMzIwLDcgQEAKIAogc3RhdGljIHZvaWQgcnRsOTJjX2RtX2luaXRpYWxfZ2Fpbl9tdWx0aV9zdGEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7Ci0Jc3RhdGljIHU4IGJpbml0aWFsaXplZDsgLyogaW5pdGlhbGl6ZWQgdG8gZmFsc2UgKi8KKwlzdGF0aWMgdTggaW5pdGlhbGl6ZWQ7IC8qIGluaXRpYWxpemVkIHRvIGZhbHNlICovCiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CiAJbG9uZyByc3NpX3N0cmVuZ3RoID0gcnRscHJpdi0+ZG0uZW50cnlfbWluX3VuZGVjb3JhdGVkc21vb3RoZWRfcHdkYjsKQEAgLTMxNSwxMSArMzMxLDExIEBACiAKIAlpZiAoKG11bHRpX3N0YSA9PSBmYWxzZSkgfHwgKGRtX2RpZ3RhYmxlLmN1cnN0YV9jb25uZWN0Y3RhdGUgIT0KIAkJCQkgICAgIERJR19TVEFfRElTQ09OTkVDVCkpIHsKLQkJYmluaXRpYWxpemVkID0gZmFsc2U7CisJCWluaXRpYWxpemVkID0gZmFsc2U7CiAJCWRtX2RpZ3RhYmxlLmRpZ19leHRfcG9ydF9zdGFnZSA9IERJR19FWFRfUE9SVF9TVEFHRV9NQVg7CiAJCXJldHVybjsKLQl9IGVsc2UgaWYgKGJpbml0aWFsaXplZCA9PSBmYWxzZSkgewotCQliaW5pdGlhbGl6ZWQgPSB0cnVlOworCX0gZWxzZSBpZiAoaW5pdGlhbGl6ZWQgPT0gZmFsc2UpIHsKKwkJaW5pdGlhbGl6ZWQgPSB0cnVlOwogCQlkbV9kaWd0YWJsZS5kaWdfZXh0X3BvcnRfc3RhZ2UgPSBESUdfRVhUX1BPUlRfU1RBR0VfMDsKIAkJZG1fZGlndGFibGUuY3VyX2lndmFsdWUgPSAweDIwOwogCQlydGw5MmNfZG1fd3JpdGVfZGlnKGh3KTsKQEAgLTQ2MSwxMCArNDc3LDcgQEAKIAlpZiAobWFjLT5hY3Rfc2Nhbm5pbmcgPT0gdHJ1ZSkKIAkJcmV0dXJuOwogCi0JaWYgKChtYWMtPmxpbmtfc3RhdGUgPiBNQUM4MDIxMV9OT0xJTkspICYmCi0JICAgIChtYWMtPmxpbmtfc3RhdGUgPCBNQUM4MDIxMV9MSU5LRUQpKQotCQlkbV9kaWd0YWJsZS5jdXJzdGFfY29ubmVjdGN0YXRlID0gRElHX1NUQV9CRUZPUkVfQ09OTkVDVDsKLQllbHNlIGlmIChtYWMtPmxpbmtfc3RhdGUgPj0gTUFDODAyMTFfTElOS0VEKQorCWlmIChtYWMtPmxpbmtfc3RhdGUgPj0gTUFDODAyMTFfTElOS0VEKQogCQlkbV9kaWd0YWJsZS5jdXJzdGFfY29ubmVjdGN0YXRlID0gRElHX1NUQV9DT05ORUNUOwogCWVsc2UKIAkJZG1fZGlndGFibGUuY3Vyc3RhX2Nvbm5lY3RjdGF0ZSA9IERJR19TVEFfRElTQ09OTkVDVDsKQEAgLTU2MiwyMyArNTc1LDQyIEBACiBzdGF0aWMgdm9pZCBydGw5MmNfZG1fY2hlY2tfZWRjYV90dXJibyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wY2lfcHJpdiAqcnRscGNpcHJpdiA9IHJ0bF9wY2lwcml2KGh3KTsKIAlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCiAJc3RhdGljIHU2NCBsYXN0X3R4b2tfY250OwogCXN0YXRpYyB1NjQgbGFzdF9yeG9rX2NudDsKLQl1NjQgY3VyX3R4b2tfY250OwotCXU2NCBjdXJfcnhva19jbnQ7CisJc3RhdGljIHUzMiBsYXN0X2J0X2VkY2FfdWw7CisJc3RhdGljIHUzMiBsYXN0X2J0X2VkY2FfZGw7CisJdTY0IGN1cl90eG9rX2NudCA9IDA7CisJdTY0IGN1cl9yeG9rX2NudCA9IDA7CiAJdTMyIGVkY2FfYmVfdWwgPSAweDVlYTQyYjsKIAl1MzIgZWRjYV9iZV9kbCA9IDB4NWVhNDJiOworCWJvb2wgYnRfY2hhbmdlX2VkY2EgPSBmYWxzZTsKIAotCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJZ290byBkbV9jaGVja2VkY2F0dXJib19leGl0OworCWlmICgobGFzdF9idF9lZGNhX3VsICE9IHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfZWRjYV91bCkgfHwKKwkgICAgKGxhc3RfYnRfZWRjYV9kbCAhPSBydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2VkY2FfZGwpKSB7CisJCXJ0bHByaXYtPmRtLmN1cnJlbnRfdHVyYm9fZWRjYSA9IGZhbHNlOworCQlsYXN0X2J0X2VkY2FfdWwgPSBydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2VkY2FfdWw7CisJCWxhc3RfYnRfZWRjYV9kbCA9IHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfZWRjYV9kbDsKKwl9CisKKwlpZiAocnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9lZGNhX3VsICE9IDApIHsKKwkJZWRjYV9iZV91bCA9IHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfZWRjYV91bDsKKwkJYnRfY2hhbmdlX2VkY2EgPSB0cnVlOworCX0KKworCWlmIChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2VkY2FfZGwgIT0gMCkgeworCQllZGNhX2JlX3VsID0gcnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9lZGNhX2RsOworCQlidF9jaGFuZ2VfZWRjYSA9IHRydWU7CisJfQogCiAJaWYgKG1hYy0+bGlua19zdGF0ZSAhPSBNQUM4MDIxMV9MSU5LRUQpIHsKIAkJcnRscHJpdi0+ZG0uY3VycmVudF90dXJib19lZGNhID0gZmFsc2U7CiAJCXJldHVybjsKIAl9CiAKLQlpZiAoIW1hYy0+aHRfZW5hYmxlKSB7CS8qRklYIE1FUkdFICovCisJaWYgKCghbWFjLT5odF9lbmFibGUpICYmICghcnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9jb2V4aXN0ZW5jZSkpIHsKIAkJaWYgKCEoZWRjYV9iZV91bCAmIDB4ZmZmZjAwMDApKQogCQkJZWRjYV9iZV91bCB8PSAweDAwNWUwMDAwOwogCkBAIC01ODYsMTAgKzYxOCwxMiBAQAogCQkJZWRjYV9iZV9kbCB8PSAweDAwNWUwMDAwOwogCX0KIAotCWlmICgoIXJ0bHByaXYtPmRtLmlzX2FueV9ub25iZXBrdHMpICYmCi0JICAgICghcnRscHJpdi0+ZG0uZGlzYWJsZV9mcmFtZWJ1cnN0aW5nKSkgeworCWlmICgoYnRfY2hhbmdlX2VkY2EpIHx8ICgoIXJ0bHByaXYtPmRtLmlzX2FueV9ub25iZXBrdHMpICYmCisJICAgICAoIXJ0bHByaXYtPmRtLmRpc2FibGVfZnJhbWVidXJzdGluZykpKSB7CisKIAkJY3VyX3R4b2tfY250ID0gcnRscHJpdi0+c3RhdHMudHhieXRlc3VuaWNhc3QgLSBsYXN0X3R4b2tfY250OwogCQljdXJfcnhva19jbnQgPSBydGxwcml2LT5zdGF0cy5yeGJ5dGVzdW5pY2FzdCAtIGxhc3Rfcnhva19jbnQ7CisKIAkJaWYgKGN1cl9yeG9rX2NudCA+IDQgKiBjdXJfdHhva19jbnQpIHsKIAkJCWlmICghcnRscHJpdi0+ZG0uaXNfY3VyX3JkbHN0YXRlIHx8CiAJCQkgICAgIXJ0bHByaXYtPmRtLmN1cnJlbnRfdHVyYm9fZWRjYSkgewpAQCAtNjE4LDcgKzY1Miw2IEBACiAJCX0KIAl9CiAKLWRtX2NoZWNrZWRjYXR1cmJvX2V4aXQ6CiAJcnRscHJpdi0+ZG0uaXNfYW55X25vbmJlcGt0cyA9IGZhbHNlOwogCWxhc3RfdHhva19jbnQgPSBydGxwcml2LT5zdGF0cy50eGJ5dGVzdW5pY2FzdDsKIAlsYXN0X3J4b2tfY250ID0gcnRscHJpdi0+c3RhdHMucnhieXRlc3VuaWNhc3Q7CkBAIC02MzMsMTQgKzY2NiwxNCBAQAogCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CiAJdTggdGhlcm1hbHZhbHVlLCBkZWx0YSwgZGVsdGFfbGNrLCBkZWx0YV9pcWs7CiAJbG9uZyBlbGVfYSwgZWxlX2QsIHRlbXBfY2NrLCB2YWxfeCwgdmFsdWUzMjsKLQlsb25nIHZhbF95LCBlbGVfYzsKLQl1OCBvZmRtX2luZGV4WzJdLCBjY2tfaW5kZXgsIG9mZG1faW5kZXhfb2xkWzJdLCBjY2tfaW5kZXhfb2xkOworCWxvbmcgdmFsX3ksIGVsZV9jID0gMDsKKwl1OCBvZmRtX2luZGV4WzJdLCBjY2tfaW5kZXggPSAwLCBvZmRtX2luZGV4X29sZFsyXSwgY2NrX2luZGV4X29sZCA9IDA7CiAJaW50IGk7CiAJYm9vbCBpczJ0ID0gSVNfOTJDX1NFUklBTChydGxoYWwtPnZlcnNpb24pOwogCXU4IHR4cHdyX2xldmVsWzJdID0gezAsIDB9OwogCXU4IG9mZG1fbWluX2luZGV4ID0gNiwgcmY7CiAKLQlydGxwcml2LT5kbS50eHBvd2VyX3RyYWNraW5nSW5pdCA9IHRydWU7CisJcnRscHJpdi0+ZG0udHhwb3dlcl90cmFja2luZ2luaXQgPSB0cnVlOwogCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVJfVFJBQ0tJTkcsIERCR19MT1VELAogCQkgKCJydGw5MmNfZG1fdHhwb3dlcl90cmFja2luZ19jYWxsYmFja190aGVybWFsbWV0ZXJcbiIpKTsKIApAQCAtNjgzLDcgKzcxNiw2IEBACiAJCQlmb3IgKGkgPSAwOyBpIDwgT0ZETV9UQUJMRV9MRU5HVEg7IGkrKykgewogCQkJCWlmIChlbGVfZCA9PSAob2ZkbXN3aW5nX3RhYmxlW2ldICYKIAkJCQkgICAgTUFTS09GRE1fRCkpIHsKLQkJCQkJb2ZkbV9pbmRleF9vbGRbMV0gPSAodTgpIGk7CiAKIAkJCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9QT1dFUl9UUkFDS0lORywKIAkJCQkJICAgREJHX0xPVUQsCkBAIC0xMDYyLDcgKzEwOTQsNyBAQAogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAogCXJ0bHByaXYtPmRtLnR4cG93ZXJfdHJhY2tpbmcgPSB0cnVlOwotCXJ0bHByaXYtPmRtLnR4cG93ZXJfdHJhY2tpbmdJbml0ID0gZmFsc2U7CisJcnRscHJpdi0+ZG0udHhwb3dlcl90cmFja2luZ2luaXQgPSBmYWxzZTsKIAogCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVJfVFJBQ0tJTkcsIERCR19MT1VELAogCQkgKCJwTWdudEluZm8tPnR4cG93ZXJfdHJhY2tpbmcgPSAlZFxuIiwKQEAgLTExMzIsNiArMTE2NCw3IEBACiAJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKIAlzdHJ1Y3QgcmF0ZV9hZGFwdGl2ZSAqcF9yYSA9ICYocnRscHJpdi0+cmEpOwogCXUzMiBsb3dfcnNzaXRocmVzaF9mb3JfcmEsIGhpZ2hfcnNzaXRocmVzaF9mb3JfcmE7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSA9IE5VTEw7CiAKIAlpZiAoaXNfaGFsX3N0b3AocnRsaGFsKSkgewogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1JBVEUsIERCR19MT1VELApAQCAtMTE0NSw4ICsxMTc4LDggQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChtYWMtPmxpbmtfc3RhdGUgPT0gTUFDODAyMTFfTElOS0VEKSB7Ci0KKwlpZiAobWFjLT5saW5rX3N0YXRlID09IE1BQzgwMjExX0xJTktFRCAmJgorCSAgICBtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CiAJCXN3aXRjaCAocF9yYS0+cHJlX3JhdHJfc3RhdGUpIHsKIAkJY2FzZSBETV9SQVRSX1NUQV9ISUdIOgogCQkJaGlnaF9yc3NpdGhyZXNoX2Zvcl9yYSA9IDUwOwpAQCAtMTE4NSwxMCArMTIxOCwxMyBAQAogCQkJCSAoIlByZVN0YXRlID0gJWQsIEN1clN0YXRlID0gJWRcbiIsCiAJCQkJICBwX3JhLT5wcmVfcmF0cl9zdGF0ZSwgcF9yYS0+cmF0cl9zdGF0ZSkpOwogCi0JCQlydGxwcml2LT5jZmctPm9wcy0+dXBkYXRlX3JhdGVfbWFzayhodywKKwkJCXJjdV9yZWFkX2xvY2soKTsKKwkJCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YShtYWMtPnZpZiwgbWFjLT5ic3NpZCk7CisJCQlydGxwcml2LT5jZmctPm9wcy0+dXBkYXRlX3JhdGVfdGJsKGh3LCBzdGEsCiAJCQkJCXBfcmEtPnJhdHJfc3RhdGUpOwogCiAJCQlwX3JhLT5wcmVfcmF0cl9zdGF0ZSA9IHBfcmEtPnJhdHJfc3RhdGU7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJfQogCX0KIH0KQEAgLTEyMDIsNTEgKzEyMzgsNiBAQAogCWRtX3BzdGFibGUucnNzaV92YWxfbWluID0gMDsKIH0KIAotc3RhdGljIHZvaWQgcnRsOTJjX2RtXzFyX2NjYShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKLXsKLQlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7Ci0Jc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKLQotCWlmIChkbV9wc3RhYmxlLnJzc2lfdmFsX21pbiAhPSAwKSB7Ci0JCWlmIChkbV9wc3RhYmxlLnByZV9jY2FzdGF0ZSA9PSBDQ0FfMlIpIHsKLQkJCWlmIChkbV9wc3RhYmxlLnJzc2lfdmFsX21pbiA+PSAzNSkKLQkJCQlkbV9wc3RhYmxlLmN1cl9jY2FzYXRlID0gQ0NBXzFSOwotCQkJZWxzZQotCQkJCWRtX3BzdGFibGUuY3VyX2NjYXNhdGUgPSBDQ0FfMlI7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoZG1fcHN0YWJsZS5yc3NpX3ZhbF9taW4gPD0gMzApCi0JCQkJZG1fcHN0YWJsZS5jdXJfY2Nhc2F0ZSA9IENDQV8yUjsKLQkJCWVsc2UKLQkJCQlkbV9wc3RhYmxlLmN1cl9jY2FzYXRlID0gQ0NBXzFSOwotCQl9Ci0JfSBlbHNlIHsKLQkJZG1fcHN0YWJsZS5jdXJfY2Nhc2F0ZSA9IENDQV9NQVg7Ci0JfQotCi0JaWYgKGRtX3BzdGFibGUucHJlX2NjYXN0YXRlICE9IGRtX3BzdGFibGUuY3VyX2NjYXNhdGUpIHsKLQkJaWYgKGRtX3BzdGFibGUuY3VyX2NjYXNhdGUgPT0gQ0NBXzFSKSB7Ci0JCQlpZiAoZ2V0X3JmX3R5cGUocnRscGh5KSA9PSBSRl8yVDJSKSB7Ci0JCQkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX1RSWFBBVEhFTkFCTEUsCi0JCQkJCSAgICAgIE1BU0tCWVRFMCwgMHgxMyk7Ci0JCQkJcnRsX3NldF9iYnJlZyhodywgMHhlNzAsIE1BU0tCWVRFMywgMHgyMCk7Ci0JCQl9IGVsc2UgewotCQkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJPRkRNMF9UUlhQQVRIRU5BQkxFLAotCQkJCQkgICAgICBNQVNLQllURTAsIDB4MjMpOwotCQkJCXJ0bF9zZXRfYmJyZWcoaHcsIDB4ZTcwLCAweDdmYzAwMDAwLCAweDEwYyk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlydGxfc2V0X2JicmVnKGh3LCBST0ZETTBfVFJYUEFUSEVOQUJMRSwgTUFTS0JZVEUwLAotCQkJCSAgICAgIDB4MzMpOwotCQkJcnRsX3NldF9iYnJlZyhodywgMHhlNzAsIE1BU0tCWVRFMywgMHg2Myk7Ci0JCX0KLQkJZG1fcHN0YWJsZS5wcmVfY2Nhc3RhdGUgPSBkbV9wc3RhYmxlLmN1cl9jY2FzYXRlOwotCX0KLQotCVJUX1RSQUNFKHJ0bHByaXYsIERCR19MT1VELCBEQkdfTE9VRCwgKCJDQ0FTdGFnZSA9ICVzXG4iLAotCQkJCQkgICAgICAgKGRtX3BzdGFibGUuY3VyX2NjYXNhdGUgPT0KLQkJCQkJCTApID8gIjFSQ0NBIiA6ICIyUkNDQSIpKTsKLX0KLQogdm9pZCBydGw5MmNfZG1fcmZfc2F2aW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBiZm9yY2VfaW5fbm9ybWFsKQogewogCXN0YXRpYyB1OCBpbml0aWFsaXplOwpAQCAtMTM1Miw3ICsxMzQzLDkgQEAKIAl9CiAKIAlpZiAoSVNfOTJDX1NFUklBTChydGxoYWwtPnZlcnNpb24pKQotCQlydGw5MmNfZG1fMXJfY2NhKGh3KTsKKwkJOy8qIHJ0bDkyY19kbV8xcl9jY2EoaHcpOyAqLworCWVsc2UKKwkJcnRsOTJjX2RtX3JmX3NhdmluZyhodywgZmFsc2UpOwogfQogCiB2b2lkIHJ0bDkyY19kbV9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQpAQCAtMTM2OSw2ICsxMzYyLDg0IEBACiB9CiBFWFBPUlRfU1lNQk9MKHJ0bDkyY19kbV9pbml0KTsKIAordm9pZCBydGw5MmNfZG1fZHluYW1pY190eHBvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJbG9uZyB1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiOworCisJaWYgKCFydGxwcml2LT5kbS5keW5hbWljX3R4cG93ZXJfZW5hYmxlKQorCQlyZXR1cm47CisKKwlpZiAocnRscHJpdi0+ZG0uZG1fZmxhZyAmIEhBTF9ETV9ISVBXUl9ESVNBQkxFKSB7CisJCXJ0bHByaXYtPmRtLmR5bmFtaWNfdHhoaWdocG93ZXJfbHZsID0gVFhISUdIUFdSTEVWRUxfTk9STUFMOworCQlyZXR1cm47CisJfQorCisJaWYgKChtYWMtPmxpbmtfc3RhdGUgPCBNQUM4MDIxMV9MSU5LRUQpICYmCisJICAgIChydGxwcml2LT5kbS5lbnRyeV9taW5fdW5kZWNvcmF0ZWRzbW9vdGhlZF9wd2RiID09IDApKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19UUkFDRSwKKwkJCSAoIk5vdCBjb25uZWN0ZWQgdG8gYW55XG4iKSk7CisKKwkJcnRscHJpdi0+ZG0uZHluYW1pY190eGhpZ2hwb3dlcl9sdmwgPSBUWEhJR0hQV1JMRVZFTF9OT1JNQUw7CisKKwkJcnRscHJpdi0+ZG0ubGFzdF9kdHBfbHZsID0gVFhISUdIUFdSTEVWRUxfTk9STUFMOworCQlyZXR1cm47CisJfQorCisJaWYgKG1hYy0+bGlua19zdGF0ZSA+PSBNQUM4MDIxMV9MSU5LRUQpIHsKKwkJaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCQl1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiID0KKwkJCSAgICBydGxwcml2LT5kbS5lbnRyeV9taW5fdW5kZWNvcmF0ZWRzbW9vdGhlZF9wd2RiOworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9QT1dFUiwgREJHX0xPVUQsCisJCQkJICgiQVAgQ2xpZW50IFBXREIgPSAweCVseFxuIiwKKwkJCQkgIHVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIpKTsKKwkJfSBlbHNlIHsKKwkJCXVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPQorCQkJICAgIHJ0bHByaXYtPmRtLnVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGI7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfTE9VRCwKKwkJCQkgKCJTVEEgRGVmYXVsdCBQb3J0IFBXREIgPSAweCVseFxuIiwKKwkJCQkgIHVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIpKTsKKwkJfQorCX0gZWxzZSB7CisJCXVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPQorCQkgICAgcnRscHJpdi0+ZG0uZW50cnlfbWluX3VuZGVjb3JhdGVkc21vb3RoZWRfcHdkYjsKKworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfTE9VRCwKKwkJCSAoIkFQIEV4dCBQb3J0IFBXREIgPSAweCVseFxuIiwKKwkJCSAgdW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYikpOworCX0KKworCWlmICh1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiID49IFRYX1BPV0VSX05FQVJfRklFTERfVEhSRVNIX0xWTDIpIHsKKwkJcnRscHJpdi0+ZG0uZHluYW1pY190eGhpZ2hwb3dlcl9sdmwgPSBUWEhJR0hQV1JMRVZFTF9MRVZFTDE7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19MT1VELAorCQkJICgiVFhISUdIUFdSTEVWRUxfTEVWRUwxIChUeFB3cj0weDApXG4iKSk7CisJfSBlbHNlIGlmICgodW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYiA8CisJCSAgICAoVFhfUE9XRVJfTkVBUl9GSUVMRF9USFJFU0hfTFZMMiAtIDMpKSAmJgorCQkgICAodW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYiA+PQorCQkgICAgVFhfUE9XRVJfTkVBUl9GSUVMRF9USFJFU0hfTFZMMSkpIHsKKworCQlydGxwcml2LT5kbS5keW5hbWljX3R4aGlnaHBvd2VyX2x2bCA9IFRYSElHSFBXUkxFVkVMX0xFVkVMMTsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9QT1dFUiwgREJHX0xPVUQsCisJCQkgKCJUWEhJR0hQV1JMRVZFTF9MRVZFTDEgKFR4UHdyPTB4MTApXG4iKSk7CisJfSBlbHNlIGlmICh1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiIDwKKwkJICAgKFRYX1BPV0VSX05FQVJfRklFTERfVEhSRVNIX0xWTDEgLSA1KSkgeworCQlydGxwcml2LT5kbS5keW5hbWljX3R4aGlnaHBvd2VyX2x2bCA9IFRYSElHSFBXUkxFVkVMX05PUk1BTDsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9QT1dFUiwgREJHX0xPVUQsCisJCQkgKCJUWEhJR0hQV1JMRVZFTF9OT1JNQUxcbiIpKTsKKwl9CisKKwlpZiAoKHJ0bHByaXYtPmRtLmR5bmFtaWNfdHhoaWdocG93ZXJfbHZsICE9IHJ0bHByaXYtPmRtLmxhc3RfZHRwX2x2bCkpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9QT1dFUiwgREJHX0xPVUQsCisJCQkgKCJQSFlfU2V0VHhQb3dlckxldmVsODE5MlMoKSBDaGFubmVsID0gJWRcbiIsCisJCQkgIHJ0bHBoeS0+Y3VycmVudF9jaGFubmVsKSk7CisJCXJ0bDkyY19waHlfc2V0X3R4cG93ZXJfbGV2ZWwoaHcsIHJ0bHBoeS0+Y3VycmVudF9jaGFubmVsKTsKKwl9CisKKwlydGxwcml2LT5kbS5sYXN0X2R0cF9sdmwgPSBydGxwcml2LT5kbS5keW5hbWljX3R4aGlnaHBvd2VyX2x2bDsKK30KKwogdm9pZCBydGw5MmNfZG1fd2F0Y2hkb2coc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwpAQCAtMTM4OCwxMSArMTQ1OSwzMjEgQEAKIAkJcnRsOTJjX2RtX2RpZyhodyk7CiAJCXJ0bDkyY19kbV9mYWxzZV9hbGFybV9jb3VudGVyX3N0YXRpc3RpY3MoaHcpOwogCQlydGw5MmNfZG1fZHluYW1pY19iYl9wb3dlcnNhdmluZyhodyk7Ci0JCXJ0bHByaXYtPmNmZy0+b3BzLT5kbV9keW5hbWljX3R4cG93ZXIoaHcpOworCQlydGw5MmNfZG1fZHluYW1pY190eHBvd2VyKGh3KTsKIAkJcnRsOTJjX2RtX2NoZWNrX3R4cG93ZXJfdHJhY2tpbmcoaHcpOwogCQlydGw5MmNfZG1fcmVmcmVzaF9yYXRlX2FkYXB0aXZlX21hc2soaHcpOworCQlydGw5MmNfZG1fYnRfY29leGlzdChodyk7CiAJCXJ0bDkyY19kbV9jaGVja19lZGNhX3R1cmJvKGh3KTsKLQogCX0KIH0KIEVYUE9SVF9TWU1CT0wocnRsOTJjX2RtX3dhdGNoZG9nKTsKKwordTggcnRsOTJjX2J0X3Jzc2lfc3RhdGVfY2hhbmdlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpydGxwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOworCWxvbmcgdW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYjsKKwl1OCBjdXJyX2J0X3Jzc2lfc3RhdGUgPSAweDAwOworCisJaWYgKHJ0bHByaXYtPm1hYzgwMjExLmxpbmtfc3RhdGUgPT0gTUFDODAyMTFfTElOS0VEKSB7CisJCXVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPQorCQkJCSBHRVRfVU5ERUNPUkFURURfQVZFUkFHRV9SU1NJKHJ0bHByaXYpOworCX0gZWxzZSB7CisJCWlmIChydGxwcml2LT5kbS5lbnRyeV9taW5fdW5kZWNvcmF0ZWRzbW9vdGhlZF9wd2RiID09IDApCisJCQl1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiID0gMTAwOworCQllbHNlCisJCQl1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiID0KKwkJCQlydGxwcml2LT5kbS5lbnRyeV9taW5fdW5kZWNvcmF0ZWRzbW9vdGhlZF9wd2RiOworCX0KKworCS8qIENoZWNrIFJTU0kgdG8gZGV0ZXJtaW5lIEhpZ2hQb3dlci9Ob3JtYWxQb3dlciBzdGF0ZSBmb3IKKwkgKiBCVCBjb2V4aXN0ZW5jZS4gKi8KKwlpZiAodW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYiA+PSA2NykKKwkJY3Vycl9idF9yc3NpX3N0YXRlICY9ICh+QlRfUlNTSV9TVEFURV9OT1JNQUxfUE9XRVIpOworCWVsc2UgaWYgKHVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPCA2MikKKwkJY3Vycl9idF9yc3NpX3N0YXRlIHw9IEJUX1JTU0lfU1RBVEVfTk9STUFMX1BPV0VSOworCisJLyogQ2hlY2sgUlNTSSB0byBkZXRlcm1pbmUgQU1QRFUgc2V0dGluZyBmb3IgQlQgY29leGlzdGVuY2UuICovCisJaWYgKHVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPj0gNDApCisJCWN1cnJfYnRfcnNzaV9zdGF0ZSAmPSAofkJUX1JTU0lfU1RBVEVfQU1EUFVfT0ZGKTsKKwllbHNlIGlmICh1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiIDw9IDMyKQorCQljdXJyX2J0X3Jzc2lfc3RhdGUgfD0gQlRfUlNTSV9TVEFURV9BTURQVV9PRkY7CisKKwkvKiBNYXJrZWQgUlNTSSBzdGF0ZS4gSXQgd2lsbCBiZSB1c2VkIHRvIGRldGVybWluZSBCVCBjb2V4aXN0ZW5jZQorCSAqIHNldHRpbmcgbGF0ZXIuICovCisJaWYgKHVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPCAzNSkKKwkJY3Vycl9idF9yc3NpX3N0YXRlIHw9ICBCVF9SU1NJX1NUQVRFX1NQRUNJQUxfTE9XOworCWVsc2UKKwkJY3Vycl9idF9yc3NpX3N0YXRlICY9ICh+QlRfUlNTSV9TVEFURV9TUEVDSUFMX0xPVyk7CisKKwkvKiBTZXQgVHggUG93ZXIgYWNjb3JkaW5nIHRvIEJUIHN0YXR1cy4gKi8KKwlpZiAodW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYiA+PSAzMCkKKwkJY3Vycl9idF9yc3NpX3N0YXRlIHw9ICBCVF9SU1NJX1NUQVRFX1RYUE9XRVJfTE9XOworCWVsc2UgaWYgKHVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPCAyNSkKKwkJY3Vycl9idF9yc3NpX3N0YXRlICY9ICh+QlRfUlNTSV9TVEFURV9UWFBPV0VSX0xPVyk7CisKKwkvKiBDaGVjayBCVCBzdGF0ZSByZWxhdGVkIHRvIEJUX0lkbGUgaW4gQi9HIG1vZGUuICovCisJaWYgKHVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPCAxNSkKKwkJY3Vycl9idF9yc3NpX3N0YXRlIHw9ICBCVF9SU1NJX1NUQVRFX0JHX0VEQ0FfTE9XOworCWVsc2UKKwkJY3Vycl9idF9yc3NpX3N0YXRlICY9ICh+QlRfUlNTSV9TVEFURV9CR19FRENBX0xPVyk7CisKKwlpZiAoY3Vycl9idF9yc3NpX3N0YXRlICE9IHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfcnNzaV9zdGF0ZSkgeworCQlydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X3Jzc2lfc3RhdGUgPSBjdXJyX2J0X3Jzc2lfc3RhdGU7CisJCXJldHVybiB0cnVlOworCX0gZWxzZSB7CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKHJ0bDkyY19idF9yc3NpX3N0YXRlX2NoYW5nZSk7CisKK3N0YXRpYyBib29sIHJ0bDkyY19idF9zdGF0ZV9jaGFuZ2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpX3ByaXYgKnJ0bHBjaXByaXYgPSBydGxfcGNpcHJpdihodyk7CisKKwl1MzIgcG9sbGluZywgcmF0aW9fdHgsIHJhdGlvX3ByaTsKKwl1MzIgYnRfdHgsIGJ0X3ByaTsKKwl1OCBidF9zdGF0ZTsKKwl1OCBjdXJfc2VydmljZV90eXBlOworCisJaWYgKHJ0bHByaXYtPm1hYzgwMjExLmxpbmtfc3RhdGUgPCBNQUM4MDIxMV9MSU5LRUQpCisJCXJldHVybiBmYWxzZTsKKworCWJ0X3N0YXRlID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCAweDRmZCk7CisJYnRfdHggPSBydGxfcmVhZF9kd29yZChydGxwcml2LCAweDQ4OCk7CisJYnRfdHggPSBidF90eCAmIDB4MDBmZmZmZmY7CisJYnRfcHJpID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgMHg0OGMpOworCWJ0X3ByaSA9IGJ0X3ByaSAmIDB4MDBmZmZmZmY7CisJcG9sbGluZyA9IHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsIDB4NDkwKTsKKworCWlmIChidF90eCA9PSAweGZmZmZmZmZmICYmIGJ0X3ByaSA9PSAweGZmZmZmZmZmICYmCisJICAgIHBvbGxpbmcgPT0gMHhmZmZmZmZmZiAmJiBidF9zdGF0ZSA9PSAweGZmKQorCQlyZXR1cm4gZmFsc2U7CisKKwlidF9zdGF0ZSAmPSBCSVRfT0ZGU0VUX0xFTl9NQVNLXzMyKDAsIDEpOworCWlmIChidF9zdGF0ZSAhPSBydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2N1cl9zdGF0ZSkgeworCQlydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2N1cl9zdGF0ZSA9IGJ0X3N0YXRlOworCisJCWlmIChydGxwY2lwcml2LT5idF9jb2V4aXN0LnJlZ19idF9zY28gPT0gMykgeworCQkJcnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9zZXJ2aWNlID0gQlRfSURMRTsKKworCQkJYnRfc3RhdGUgPSBidF9zdGF0ZSB8CisJCQkgICgocnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9hbnRfaXNvbGF0aW9uID09IDEpID8KKwkJCSAgMCA6IEJJVF9PRkZTRVRfTEVOX01BU0tfMzIoMSwgMSkpIHwKKwkJCSAgQklUX09GRlNFVF9MRU5fTUFTS18zMigyLCAxKTsKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4NGZkLCBidF9zdGF0ZSk7CisJCX0KKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmF0aW9fdHggPSBidF90eCAqIDEwMDAgLyBwb2xsaW5nOworCXJhdGlvX3ByaSA9IGJ0X3ByaSAqIDEwMDAgLyBwb2xsaW5nOworCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QucmF0aW9fdHggPSByYXRpb190eDsKKwlydGxwY2lwcml2LT5idF9jb2V4aXN0LnJhdGlvX3ByaSA9IHJhdGlvX3ByaTsKKworCWlmIChidF9zdGF0ZSAmJiBydGxwY2lwcml2LT5idF9jb2V4aXN0LnJlZ19idF9zY28gPT0gMykgeworCisJCWlmICgocmF0aW9fdHggPCAzMCkgICYmIChyYXRpb19wcmkgPCAzMCkpCisJCQljdXJfc2VydmljZV90eXBlID0gQlRfSURMRTsKKwkJZWxzZSBpZiAoKHJhdGlvX3ByaSA+IDExMCkgJiYgKHJhdGlvX3ByaSA8IDI1MCkpCisJCQljdXJfc2VydmljZV90eXBlID0gQlRfU0NPOworCQllbHNlIGlmICgocmF0aW9fdHggPj0gMjAwKSAmJiAocmF0aW9fcHJpID49IDIwMCkpCisJCQljdXJfc2VydmljZV90eXBlID0gQlRfQlVTWTsKKwkJZWxzZSBpZiAoKHJhdGlvX3R4ID49IDM1MCkgJiYgKHJhdGlvX3R4IDwgNTAwKSkKKwkJCWN1cl9zZXJ2aWNlX3R5cGUgPSBCVF9PVEhFUkJVU1k7CisJCWVsc2UgaWYgKHJhdGlvX3R4ID49IDUwMCkKKwkJCWN1cl9zZXJ2aWNlX3R5cGUgPSBCVF9QQU47CisJCWVsc2UKKwkJCWN1cl9zZXJ2aWNlX3R5cGUgPSBCVF9PVEhFUl9BQ1RJT047CisKKwkJaWYgKGN1cl9zZXJ2aWNlX3R5cGUgIT0gcnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9zZXJ2aWNlKSB7CisJCQlydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X3NlcnZpY2UgPSBjdXJfc2VydmljZV90eXBlOworCQkJYnRfc3RhdGUgPSBidF9zdGF0ZSB8CisJCQkgICAoKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfYW50X2lzb2xhdGlvbiA9PSAxKSA/CisJCQkgICAwIDogQklUX09GRlNFVF9MRU5fTUFTS18zMigxLCAxKSkgfAorCQkJICAgKChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X3NlcnZpY2UgIT0gQlRfSURMRSkgPworCQkJICAgMCA6IEJJVF9PRkZTRVRfTEVOX01BU0tfMzIoMiwgMSkpOworCisJCQkvKiBBZGQgaW50ZXJydXB0IG1pZ3JhdGlvbiB3aGVuIGJ0IGlzIG5vdCBpbmkKKwkJCSAqIGlkbGUgc3RhdGUgKG5vIHRyYWZmaWMpLiAqLworCQkJaWYgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfc2VydmljZSAhPSBCVF9JRExFKSB7CisJCQkJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgMHg1MDQsIDB4MGNjYyk7CisJCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHg1MDYsIDB4NTQpOworCQkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4NTA3LCAweDU0KTsKKwkJCX0gZWxzZSB7CisJCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHg1MDYsIDB4MDApOworCQkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4NTA3LCAweDAwKTsKKwkJCX0KKworCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHg0ZmQsIGJ0X3N0YXRlKTsKKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCisJcmV0dXJuIGZhbHNlOworCit9CisKK3N0YXRpYyBib29sIHJ0bDkyY19idF93aWZpX2Nvbm5lY3RfY2hhbmdlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdGF0aWMgYm9vbCBtZWRpYV9jb25uZWN0OworCisJaWYgKHJ0bHByaXYtPm1hYzgwMjExLmxpbmtfc3RhdGUgPCBNQUM4MDIxMV9MSU5LRUQpIHsKKwkJbWVkaWFfY29ubmVjdCA9IGZhbHNlOworCX0gZWxzZSB7CisJCWlmICghbWVkaWFfY29ubmVjdCkgeworCQkJbWVkaWFfY29ubmVjdCA9IHRydWU7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQltZWRpYV9jb25uZWN0ID0gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDkyY19idF9zZXRfbm9ybWFsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpydGxwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOworCisKKwlpZiAocnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9zZXJ2aWNlID09IEJUX09USEVSQlVTWSkgeworCQlydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2VkY2FfdWwgPSAweDVlYTcyYjsKKwkJcnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9lZGNhX2RsID0gMHg1ZWE3MmI7CisJfSBlbHNlIGlmIChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X3NlcnZpY2UgPT0gQlRfQlVTWSkgeworCQlydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2VkY2FfdWwgPSAweDVlYjgyZjsKKwkJcnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9lZGNhX2RsID0gMHg1ZWI4MmY7CisJfSBlbHNlIGlmIChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X3NlcnZpY2UgPT0gQlRfU0NPKSB7CisJCWlmIChydGxwY2lwcml2LT5idF9jb2V4aXN0LnJhdGlvX3R4ID4gMTYwKSB7CisJCQlydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2VkY2FfdWwgPSAweDVlYTcyZjsKKwkJCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfZWRjYV9kbCA9IDB4NWVhNzJmOworCQl9IGVsc2UgeworCQkJcnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9lZGNhX3VsID0gMHg1ZWEzMmI7CisJCQlydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2VkY2FfZGwgPSAweDVlYTQyYjsKKwkJfQorCX0gZWxzZSB7CisJCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfZWRjYV91bCA9IDA7CisJCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfZWRjYV9kbCA9IDA7CisJfQorCisJaWYgKChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X3NlcnZpY2UgIT0gQlRfSURMRSkgJiYKKwkgICAgIChydGxwcml2LT5tYWM4MDIxMS5tb2RlID09IFdJUkVMRVNTX01PREVfRyB8fAorCSAgICAgKHJ0bHByaXYtPm1hYzgwMjExLm1vZGUgPT0gKFdJUkVMRVNTX01PREVfRyB8IFdJUkVMRVNTX01PREVfQikpKSAmJgorCSAgICAgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfcnNzaV9zdGF0ZSAmCisJICAgICBCVF9SU1NJX1NUQVRFX0JHX0VEQ0FfTE9XKSkgeworCQlydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2VkY2FfdWwgPSAweDVlYjgyYjsKKwkJcnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9lZGNhX2RsID0gMHg1ZWI4MmI7CisJfQorfQorCitzdGF0aWMgdm9pZCBydGw5MmNfYnRfYW50X2lzb2xhdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wY2lfcHJpdiAqcnRscGNpcHJpdiA9IHJ0bF9wY2lwcml2KGh3KTsKKworCisJLyogT25seSBlbmFibGUgSFcgQlQgY29leGlzdCB3aGVuIEJUIGluICJCdXN5IiBzdGF0ZS4gKi8KKwlpZiAocnRscHJpdi0+bWFjODAyMTEudmVuZG9yID09IFBFRVJfQ0lTQ08gJiYKKwkgICAgcnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9zZXJ2aWNlID09IEJUX09USEVSX0FDVElPTikgeworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfR1BJT19NVVhDRkcsIDB4YTApOworCX0gZWxzZSB7CisJCWlmICgocnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9zZXJ2aWNlID09IEJUX0JVU1kpICYmCisJCSAgICAocnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9yc3NpX3N0YXRlICYKKwkJICAgICBCVF9SU1NJX1NUQVRFX05PUk1BTF9QT1dFUikpIHsKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19HUElPX01VWENGRywgMHhhMCk7CisJCX0gZWxzZSBpZiAoKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfc2VydmljZSA9PQorCQkJICAgIEJUX09USEVSX0FDVElPTikgJiYgKHJ0bHByaXYtPm1hYzgwMjExLm1vZGUgPAorCQkJICAgIFdJUkVMRVNTX01PREVfTl8yNEcpICYmCisJCQkgICAgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfcnNzaV9zdGF0ZSAmCisJCQkgICAgQlRfUlNTSV9TVEFURV9TUEVDSUFMX0xPVykpIHsKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19HUElPX01VWENGRywgMHhhMCk7CisJCX0gZWxzZSBpZiAocnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9zZXJ2aWNlID09IEJUX1BBTikgeworCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0dQSU9fTVVYQ0ZHLCAweDAwKTsKKwkJfSBlbHNlIHsKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19HUElPX01VWENGRywgMHgwMCk7CisJCX0KKwl9CisKKwlpZiAocnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9zZXJ2aWNlID09IEJUX1BBTikKKwkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19HUElPX1BJTl9DVFJMLCAweDEwMTAwKTsKKwllbHNlCisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfR1BJT19QSU5fQ1RSTCwgMHgwKTsKKworCWlmIChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X3Jzc2lfc3RhdGUgJgorCSAgICBCVF9SU1NJX1NUQVRFX05PUk1BTF9QT1dFUikgeworCQlydGw5MmNfYnRfc2V0X25vcm1hbChodyk7CisJfSBlbHNlIHsKKwkJcnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9lZGNhX3VsID0gMDsKKwkJcnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9lZGNhX2RsID0gMDsKKwl9CisKKwlpZiAocnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9zZXJ2aWNlICE9IEJUX0lETEUpIHsKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9yZnJlZyhodywKKwkJCQkgUkY5MF9QQVRIX0EsCisJCQkJIDB4MWUsCisJCQkJIDB4ZjAsIDB4Zik7CisJfSBlbHNlIHsKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9yZnJlZyhodywKKwkJICAgICBSRjkwX1BBVEhfQSwgMHgxZSwgMHhmMCwKKwkJICAgICBydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X3JmcmVnX29yaWdpbl8xZSk7CisJfQorCisJaWYgKCFydGxwcml2LT5kbS5keW5hbWljX3R4cG93ZXJfZW5hYmxlKSB7CisJCWlmIChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X3NlcnZpY2UgIT0gQlRfSURMRSkgeworCQkJaWYgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfcnNzaV9zdGF0ZSAmCisJCQkJQlRfUlNTSV9TVEFURV9UWFBPV0VSX0xPVykgeworCQkJCXJ0bHByaXYtPmRtLmR5bmFtaWNfdHhoaWdocG93ZXJfbHZsID0KKwkJCQkJCQlUWEhJR0hQV1JMRVZFTF9CVDI7CisJCQl9IGVsc2UgeworCQkJCXJ0bHByaXYtPmRtLmR5bmFtaWNfdHhoaWdocG93ZXJfbHZsID0KKwkJCQkJVFhISUdIUFdSTEVWRUxfQlQxOworCQkJfQorCQl9IGVsc2UgeworCQkJcnRscHJpdi0+ZG0uZHluYW1pY190eGhpZ2hwb3dlcl9sdmwgPQorCQkJCVRYSElHSFBXUkxFVkVMX05PUk1BTDsKKwkJfQorCQlydGw5MmNfcGh5X3NldF90eHBvd2VyX2xldmVsKGh3LAorCQkJcnRscHJpdi0+cGh5LmN1cnJlbnRfY2hhbm5lbCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBydGw5MmNfY2hlY2tfYnRfY2hhbmdlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpydGxwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOworCisJaWYgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfY3VyX3N0YXRlKSB7CisJCWlmIChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2FudF9pc29sYXRpb24pCisJCQlydGw5MmNfYnRfYW50X2lzb2xhdGlvbihodyk7CisJfSBlbHNlIHsKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0dQSU9fTVVYQ0ZHLCAweDAwKTsKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9yZnJlZyhodywgUkY5MF9QQVRIX0EsIDB4MWUsIDB4ZjAsCisJCQkJcnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9yZnJlZ19vcmlnaW5fMWUpOworCisJCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfZWRjYV91bCA9IDA7CisJCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfZWRjYV9kbCA9IDA7CisJfQorfQorCit2b2lkIHJ0bDkyY19kbV9idF9jb2V4aXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcGNpX3ByaXYgKnJ0bHBjaXByaXYgPSBydGxfcGNpcHJpdihodyk7CisKKwlib29sIHdpZmlfY29ubmVjdF9jaGFuZ2U7CisJYm9vbCBidF9zdGF0ZV9jaGFuZ2U7CisJYm9vbCByc3NpX3N0YXRlX2NoYW5nZTsKKworCWlmICgocnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9jb2V4aXN0ZW5jZSkgJiYKKwkgICAgIChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2NvZXhpc3RfdHlwZSA9PSBCVF9DU1JfQkM0KSkgeworCisJCXdpZmlfY29ubmVjdF9jaGFuZ2UgPSBydGw5MmNfYnRfd2lmaV9jb25uZWN0X2NoYW5nZShodyk7CisJCWJ0X3N0YXRlX2NoYW5nZSA9IHJ0bDkyY19idF9zdGF0ZV9jaGFuZ2UoaHcpOworCQlyc3NpX3N0YXRlX2NoYW5nZSA9IHJ0bDkyY19idF9yc3NpX3N0YXRlX2NoYW5nZShodyk7CisKKwkJaWYgKHdpZmlfY29ubmVjdF9jaGFuZ2UgfHwgYnRfc3RhdGVfY2hhbmdlIHx8IHJzc2lfc3RhdGVfY2hhbmdlKQorCQkJcnRsOTJjX2NoZWNrX2J0X2NoYW5nZShodyk7CisJfQorfQorRVhQT1JUX1NZTUJPTChydGw5MmNfZG1fYnRfY29leGlzdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjL2RtX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyYy9kbV9jb21tb24uaAppbmRleCBiOWNiYjBhLi5iOTczNmQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjL2RtX2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmMvZG1fY29tbW9uLmgKQEAgLTIwMCw1ICsyMDAsNyBAQAogdm9pZCBydGw5MmNfcGh5X2FwX2NhbGlicmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgY2hhciBkZWx0YSk7CiB2b2lkIHJ0bDkyY19waHlfbGNfY2FsaWJyYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIHZvaWQgcnRsOTJjX3BoeV9pcV9jYWxpYnJhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgcmVjb3ZlcnkpOwordm9pZCBydGw5MmNfZG1fZHluYW1pY190eHBvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJjX2RtX2J0X2NvZXhpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmMvZndfY29tbW9uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjL2Z3X2NvbW1vbi5jCmluZGV4IDI4YTZjZTMuLjUwMzAzZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmMvZndfY29tbW9uLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyYy9md19jb21tb24uYwpAQCAtMTcxLDcgKzE3MSw2IEBACiBzdGF0aWMgaW50IF9ydGw5MmNfZndfZnJlZV90b19nbyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7Ci0JaW50IGVyciA9IC1FSU87CiAJdTMyIGNvdW50ZXIgPSAwOwogCXUzMiB2YWx1ZTMyOwogCkBAIC0xODQsNyArMTgzLDcgQEAKIAkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKIAkJCSAoImNoa3N1bSByZXBvcnQgZmFpbGwgISBSRUdfTUNVRldETDoweCUwOHggLlxuIiwKIAkJCSAgdmFsdWUzMikpOwotCQlnb3RvIGV4aXQ7CisJCXJldHVybiAtRUlPOwogCX0KIAogCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRlcsIERCR19UUkFDRSwKQEAgLTIwNCw4ICsyMDMsNyBAQAogCQkJCSAoIlBvbGxpbmcgRlcgcmVhZHkgc3VjY2VzcyEhIgogCQkJCSAiIFJFR19NQ1VGV0RMOjB4JTA4eCAuXG4iLAogCQkJCSB2YWx1ZTMyKSk7Ci0JCQllcnIgPSAwOwotCQkJZ290byBleGl0OworCQkJcmV0dXJuIDA7CiAJCX0KIAogCQltZGVsYXkoRldfODE5MkNfUE9MTElOR19ERUxBWSk7CkBAIC0yMTQsOSArMjEyLDcgQEAKIAogCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCiAJCSAoIlBvbGxpbmcgRlcgcmVhZHkgZmFpbCEhIFJFR19NQ1VGV0RMOjB4JTA4eCAuXG4iLCB2YWx1ZTMyKSk7Ci0KLWV4aXQ6Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gLUVJTzsKIH0KIAogaW50IHJ0bDkyY19kb3dubG9hZF9mdyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKQEAgLTIyNiwzMiArMjIyLDE2IEBACiAJc3RydWN0IHJ0bDkyY19maXJtd2FyZV9oZWFkZXIgKnBmd2hlYWRlcjsKIAl1OCAqcGZ3ZGF0YTsKIAl1MzIgZndzaXplOwotCWludCBlcnI7CiAJZW51bSB2ZXJzaW9uXzgxOTJjIHZlcnNpb24gPSBydGxoYWwtPnZlcnNpb247Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZTsKIAotCXByaW50ayhLRVJOX0lORk8gInJ0bDgxOTJjdTogTG9hZGluZyBmaXJtd2FyZSBmaWxlICVzXG4iLAorCXByaW50ayhLRVJOX0lORk8gInJ0bDgxOTJjOiBMb2FkaW5nIGZpcm13YXJlIGZpbGUgJXNcbiIsCiAJICAgICAgIHJ0bHByaXYtPmNmZy0+ZndfbmFtZSk7Ci0JZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZmlybXdhcmUsIHJ0bHByaXYtPmNmZy0+ZndfbmFtZSwKLQkJCSAgICAgICBydGxwcml2LT5pby5kZXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJydGw4MTkyY3U6IEZpcm13YXJlIGxvYWRpbmcgZmFpbGVkXG4iKTsKKwlpZiAoIXJ0bGhhbC0+cGZpcm13YXJlKQogCQlyZXR1cm4gMTsKLQl9Ci0KLQlpZiAoZmlybXdhcmUtPnNpemUgPiAweDQwMDApIHsKLQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKLQkJCSAoIkZpcm13YXJlIGlzIHRvbyBiaWchXG4iKSk7Ci0JCXJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQltZW1jcHkocnRsaGFsLT5wZmlybXdhcmUsIGZpcm13YXJlLT5kYXRhLCBmaXJtd2FyZS0+c2l6ZSk7Ci0JZndzaXplID0gZmlybXdhcmUtPnNpemU7Ci0JcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7CiAKIAlwZndoZWFkZXIgPSAoc3RydWN0IHJ0bDkyY19maXJtd2FyZV9oZWFkZXIgKilydGxoYWwtPnBmaXJtd2FyZTsKIAlwZndkYXRhID0gKHU4ICopIHJ0bGhhbC0+cGZpcm13YXJlOworCWZ3c2l6ZSA9IHJ0bGhhbC0+ZndzaXplOwogCiAJaWYgKElTX0ZXX0hFQURFUl9FWElTVChwZndoZWFkZXIpKSB7CiAJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRlcsIERCR19ETUVTRywKQEAgLTI2Nyw4ICsyNDcsNyBAQAogCV9ydGw5MmNfd3JpdGVfZncoaHcsIHZlcnNpb24sIHBmd2RhdGEsIGZ3c2l6ZSk7CiAJX3J0bDkyY19lbmFibGVfZndfZG93bmxvYWQoaHcsIGZhbHNlKTsKIAotCWVyciA9IF9ydGw5MmNfZndfZnJlZV90b19nbyhodyk7Ci0JaWYgKGVycikgeworCWlmIChfcnRsOTJjX2Z3X2ZyZWVfdG9fZ28oaHcpKSB7CiAJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCiAJCQkgKCJGaXJtd2FyZSBpcyBub3QgcmVhZHkgdG8gcnVuIVxuIikpOwogCX0gZWxzZSB7CkBAIC0zMDAsMTAgKzI3OSw5IEBACiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CiAJdTggYm94bnVtOwotCXUxNiBib3hfcmVnLCBib3hfZXh0cmVnOworCXUxNiBib3hfcmVnID0gMCwgYm94X2V4dHJlZyA9IDA7CiAJdTggdTFiX3RtcDsKIAlib29sIGlzZndfcmVhZCA9IGZhbHNlOwotCXU4IGJ1Zl9pbmRleCA9IDA7CiAJYm9vbCBid3JpdGVfc3VjZXNzID0gZmFsc2U7CiAJdTggd2FpdF9oMmNfbGltbWl0ID0gMTAwOwogCXU4IHdhaXRfd3JpdGVoMmNfbGltbWl0ID0gMTAwOwpAQCAtNDE0LDcgKzM5Miw3IEBACiAJCWNhc2UgMToKIAkJCWJveGNvbnRlbnRbMF0gJj0gfihCSVQoNykpOwogCQkJbWVtY3B5KCh1OCAqKSAoYm94Y29udGVudCkgKyAxLAotCQkJICAgICAgIHBfY21kYnVmZmVyICsgYnVmX2luZGV4LCAxKTsKKwkJCSAgICAgICBwX2NtZGJ1ZmZlciwgMSk7CiAKIAkJCWZvciAoaWR4ID0gMDsgaWR4IDwgNDsgaWR4KyspIHsKIAkJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBib3hfcmVnICsgaWR4LApAQCAtNDI0LDcgKzQwMiw3IEBACiAJCWNhc2UgMjoKIAkJCWJveGNvbnRlbnRbMF0gJj0gfihCSVQoNykpOwogCQkJbWVtY3B5KCh1OCAqKSAoYm94Y29udGVudCkgKyAxLAotCQkJICAgICAgIHBfY21kYnVmZmVyICsgYnVmX2luZGV4LCAyKTsKKwkJCSAgICAgICBwX2NtZGJ1ZmZlciwgMik7CiAKIAkJCWZvciAoaWR4ID0gMDsgaWR4IDwgNDsgaWR4KyspIHsKIAkJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBib3hfcmVnICsgaWR4LApAQCAtNDM0LDcgKzQxMiw3IEBACiAJCWNhc2UgMzoKIAkJCWJveGNvbnRlbnRbMF0gJj0gfihCSVQoNykpOwogCQkJbWVtY3B5KCh1OCAqKSAoYm94Y29udGVudCkgKyAxLAotCQkJICAgICAgIHBfY21kYnVmZmVyICsgYnVmX2luZGV4LCAzKTsKKwkJCSAgICAgICBwX2NtZGJ1ZmZlciwgMyk7CiAKIAkJCWZvciAoaWR4ID0gMDsgaWR4IDwgNDsgaWR4KyspIHsKIAkJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBib3hfcmVnICsgaWR4LApAQCAtNDQ0LDkgKzQyMiw5IEBACiAJCWNhc2UgNDoKIAkJCWJveGNvbnRlbnRbMF0gfD0gKEJJVCg3KSk7CiAJCQltZW1jcHkoKHU4ICopIChib3hleHRjb250ZW50KSwKLQkJCSAgICAgICBwX2NtZGJ1ZmZlciArIGJ1Zl9pbmRleCwgMik7CisJCQkgICAgICAgcF9jbWRidWZmZXIsIDIpOwogCQkJbWVtY3B5KCh1OCAqKSAoYm94Y29udGVudCkgKyAxLAotCQkJICAgICAgIHBfY21kYnVmZmVyICsgYnVmX2luZGV4ICsgMiwgMik7CisJCQkgICAgICAgcF9jbWRidWZmZXIgKyAyLCAyKTsKIAogCQkJZm9yIChpZHggPSAwOyBpZHggPCAyOyBpZHgrKykgewogCQkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIGJveF9leHRyZWcgKyBpZHgsCkBAIC00NjEsOSArNDM5LDkgQEAKIAkJY2FzZSA1OgogCQkJYm94Y29udGVudFswXSB8PSAoQklUKDcpKTsKIAkJCW1lbWNweSgodTggKikgKGJveGV4dGNvbnRlbnQpLAotCQkJICAgICAgIHBfY21kYnVmZmVyICsgYnVmX2luZGV4LCAyKTsKKwkJCSAgICAgICBwX2NtZGJ1ZmZlciwgMik7CiAJCQltZW1jcHkoKHU4ICopIChib3hjb250ZW50KSArIDEsCi0JCQkgICAgICAgcF9jbWRidWZmZXIgKyBidWZfaW5kZXggKyAyLCAzKTsKKwkJCSAgICAgICBwX2NtZGJ1ZmZlciArIDIsIDMpOwogCiAJCQlmb3IgKGlkeCA9IDA7IGlkeCA8IDI7IGlkeCsrKSB7CiAJCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgYm94X2V4dHJlZyArIGlkeCwKQEAgLTU2MSw2ICs1MzksMzkgQEAKIH0KIEVYUE9SVF9TWU1CT0wocnRsOTJjX3NldF9md19wd3Jtb2RlX2NtZCk7CiAKK3N0YXRpYyBib29sIF9ydGw5MmNfY21kX3NlbmRfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCXN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJc3RydWN0IHJ0bDgxOTJfdHhfcmluZyAqcmluZzsKKwlzdHJ1Y3QgcnRsX3R4X2Rlc2MgKnBkZXNjOworCXU4IG93bjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBza19idWZmICpwc2tiID0gTlVMTDsKKworCXJpbmcgPSAmcnRscGNpLT50eF9yaW5nW0JFQUNPTl9RVUVVRV07CisKKwlwc2tiID0gX19za2JfZGVxdWV1ZSgmcmluZy0+cXVldWUpOworCWlmIChwc2tiKQorCQlrZnJlZV9za2IocHNrYik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnRscHJpdi0+bG9ja3MuaXJxX3RoX2xvY2ssIGZsYWdzKTsKKworCXBkZXNjID0gJnJpbmctPmRlc2NbMF07CisJb3duID0gKHU4KSBydGxwcml2LT5jZmctPm9wcy0+Z2V0X2Rlc2MoKHU4ICopIHBkZXNjLCB0cnVlLCBIV19ERVNDX09XTik7CisKKwlydGxwcml2LT5jZmctPm9wcy0+ZmlsbF90eF9jbWRkZXNjKGh3LCAodTggKikgcGRlc2MsIDEsIDEsIHNrYik7CisKKwlfX3NrYl9xdWV1ZV90YWlsKCZyaW5nLT5xdWV1ZSwgc2tiKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLmlycV90aF9sb2NrLCBmbGFncyk7CisKKwlydGxwcml2LT5jZmctPm9wcy0+dHhfcG9sbGluZyhodywgQkVBQ09OX1FVRVVFKTsKKworCXJldHVybiB0cnVlOworfQorCiAjZGVmaW5lIEJFQUNPTl9QRwkJMCAvKi0+MSovCiAjZGVmaW5lIFBTUE9MTF9QRwkJMgogI2RlZmluZSBOVUxMX1BHCQkJMwpAQCAtNjc4LDcgKzY4OSw3IEBACiAJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKIH07CiAKLXZvaWQgcnRsOTJjX3NldF9md19yc3ZkcGFnZXBrdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBiX2RsX2ZpbmlzaGVkKQordm9pZCBydGw5MmNfc2V0X2Z3X3JzdmRwYWdlcGt0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGRsX2ZpbmlzaGVkKQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOwpAQCAtNjg3LDEyICs2OTgsMTIgQEAKIAl1MzIgdG90YWxwYWNrZXRsZW47CiAJYm9vbCBydHN0YXR1czsKIAl1OCB1MVJzdmRQYWdlTG9jWzNdID0gezB9OwotCWJvb2wgYl9kbG9rID0gZmFsc2U7CisJYm9vbCBkbG9rID0gZmFsc2U7CiAKIAl1OCAqYmVhY29uOwotCXU4ICpwX3BzcG9sbDsKKwl1OCAqcHNwb2xsOwogCXU4ICpudWxsZnVuYzsKLQl1OCAqcF9wcm9iZXJzcDsKKwl1OCAqcHJvYmVyc3A7CiAJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAkJCQkoMSkgYmVhY29uCiAJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTcwMywxMCArNzE0LDEwIEBACiAJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJCQkJKDIpIHBzLXBvbGwKIAktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JcF9wc3BvbGwgPSAmcmVzZXJ2ZWRfcGFnZV9wYWNrZXRbUFNQT0xMX1BHICogMTI4XTsKLQlTRVRfODAyMTFfUFNfUE9MTF9BSUQocF9wc3BvbGwsIChtYWMtPmFzc29jX2lkIHwgMHhjMDAwKSk7Ci0JU0VUXzgwMjExX1BTX1BPTExfQlNTSUQocF9wc3BvbGwsIG1hYy0+YnNzaWQpOwotCVNFVF84MDIxMV9QU19QT0xMX1RBKHBfcHNwb2xsLCBtYWMtPm1hY19hZGRyKTsKKwlwc3BvbGwgPSAmcmVzZXJ2ZWRfcGFnZV9wYWNrZXRbUFNQT0xMX1BHICogMTI4XTsKKwlTRVRfODAyMTFfUFNfUE9MTF9BSUQocHNwb2xsLCAobWFjLT5hc3NvY19pZCB8IDB4YzAwMCkpOworCVNFVF84MDIxMV9QU19QT0xMX0JTU0lEKHBzcG9sbCwgbWFjLT5ic3NpZCk7CisJU0VUXzgwMjExX1BTX1BPTExfVEEocHNwb2xsLCBtYWMtPm1hY19hZGRyKTsKIAogCVNFVF9IMkNDTURfUlNWRFBBR0VfTE9DX1BTUE9MTCh1MVJzdmRQYWdlTG9jLCBQU1BPTExfUEcpOwogCkBAIC03MjMsMTAgKzczNCwxMCBAQAogCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJCQkJKDQpIHByb2JlIHJlc3BvbnNlCiAJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JcF9wcm9iZXJzcCA9ICZyZXNlcnZlZF9wYWdlX3BhY2tldFtQUk9CRVJTUF9QRyAqIDEyOF07Ci0JU0VUXzgwMjExX0hEUl9BRERSRVNTMShwX3Byb2JlcnNwLCBtYWMtPmJzc2lkKTsKLQlTRVRfODAyMTFfSERSX0FERFJFU1MyKHBfcHJvYmVyc3AsIG1hYy0+bWFjX2FkZHIpOwotCVNFVF84MDIxMV9IRFJfQUREUkVTUzMocF9wcm9iZXJzcCwgbWFjLT5ic3NpZCk7CisJcHJvYmVyc3AgPSAmcmVzZXJ2ZWRfcGFnZV9wYWNrZXRbUFJPQkVSU1BfUEcgKiAxMjhdOworCVNFVF84MDIxMV9IRFJfQUREUkVTUzEocHJvYmVyc3AsIG1hYy0+YnNzaWQpOworCVNFVF84MDIxMV9IRFJfQUREUkVTUzIocHJvYmVyc3AsIG1hYy0+bWFjX2FkZHIpOworCVNFVF84MDIxMV9IRFJfQUREUkVTUzMocHJvYmVyc3AsIG1hYy0+YnNzaWQpOwogCiAJU0VUX0gyQ0NNRF9SU1ZEUEFHRV9MT0NfUFJPQkVfUlNQKHUxUnN2ZFBhZ2VMb2MsIFBST0JFUlNQX1BHKTsKIApAQCAtNzQ0LDEyICs3NTUsMTIgQEAKIAltZW1jcHkoKHU4ICopIHNrYl9wdXQoc2tiLCB0b3RhbHBhY2tldGxlbiksCiAJICAgICAgICZyZXNlcnZlZF9wYWdlX3BhY2tldCwgdG90YWxwYWNrZXRsZW4pOwogCi0JcnRzdGF0dXMgPSBydGxwcml2LT5jZmctPm9wcy0+Y21kX3NlbmRfcGFja2V0KGh3LCBza2IpOworCXJ0c3RhdHVzID0gX3J0bDkyY19jbWRfc2VuZF9wYWNrZXQoaHcsIHNrYik7CiAKIAlpZiAocnRzdGF0dXMpCi0JCWJfZGxvayA9IHRydWU7CisJCWRsb2sgPSB0cnVlOwogCi0JaWYgKGJfZGxvaykgeworCWlmIChkbG9rKSB7CiAJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19MT1VELAogCQkJICgiU2V0IFJTVkQgcGFnZSBsb2NhdGlvbiB0byBGdy5cbiIpKTsKIAkJUlRfUFJJTlRfREFUQShydGxwcml2LCBDT01QX0NNRCwgREJHX0RNRVNHLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyYy9md19jb21tb24uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmMvZndfY29tbW9uLmgKaW5kZXggM2RiMzNiZC4uM2Q1ODIzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyYy9md19jb21tb24uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjL2Z3X2NvbW1vbi5oCkBAIC0yNyw4ICsyNyw4IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaWZuZGVmIF9fUlRMOTJDX19GV19fSF9fCi0jZGVmaW5lIF9fUlRMOTJDX19GV19fSF9fCisjaWZuZGVmIF9fUlRMOTJDX19GV19fQ09NTU9OX19IX18KKyNkZWZpbmUgX19SVEw5MkNfX0ZXX19DT01NT05fX0hfXwogCiAjZGVmaW5lIEZXXzgxOTJDX1NJWkUJCQkJMHgzMDAwCiAjZGVmaW5lIEZXXzgxOTJDX1NUQVJUX0FERFJFU1MJCQkweDEwMDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmMvcGh5X2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyYy9waHlfY29tbW9uLmMKaW5kZXggYTcwMjI4Mi4uYzU0MjRjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyYy9waHlfY29tbW9uLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyYy9waHlfY29tbW9uLmMKQEAgLTc4LDI3ICs3OCwyOSBAQAogCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUkYsIERCR19UUkFDRSwgKCJyZWdhZGRyKCUjeCksIGJpdG1hc2soJSN4KSwiCiAJCQkJCSAgICAgICAiIGRhdGEoJSN4KVxuIiwgcmVnYWRkciwgYml0bWFzaywKIAkJCQkJICAgICAgIGRhdGEpKTsKKwogfQogRVhQT1JUX1NZTUJPTChydGw5MmNfcGh5X3NldF9iYl9yZWcpOwogCiB1MzIgX3J0bDkyY19waHlfZndfcmZfc2VyaWFsX3JlYWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCSBlbnVtIHJhZGlvX3BhdGggcmZwYXRoLCB1MzIgb2Zmc2V0KQorCQkJCSAgZW51bSByYWRpb19wYXRoIHJmcGF0aCwgdTMyIG9mZnNldCkKIHsKIAlSVF9BU1NFUlQoZmFsc2UsICgiZGVwcmVjYXRlZCFcbiIpKTsKIAlyZXR1cm4gMDsKKwogfQogRVhQT1JUX1NZTUJPTChfcnRsOTJjX3BoeV9md19yZl9zZXJpYWxfcmVhZCk7CiAKIHZvaWQgX3J0bDkyY19waHlfZndfcmZfc2VyaWFsX3dyaXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCQkgICBlbnVtIHJhZGlvX3BhdGggcmZwYXRoLCB1MzIgb2Zmc2V0LAotCQkJCQkgICB1MzIgZGF0YSkKKwkJCQkgICAgZW51bSByYWRpb19wYXRoIHJmcGF0aCwgdTMyIG9mZnNldCwKKwkJCQkgICAgdTMyIGRhdGEpCiB7CiAJUlRfQVNTRVJUKGZhbHNlLCAoImRlcHJlY2F0ZWQhXG4iKSk7CiB9CiBFWFBPUlRfU1lNQk9MKF9ydGw5MmNfcGh5X2Z3X3JmX3NlcmlhbF93cml0ZSk7CiAKIHUzMiBfcnRsOTJjX3BoeV9yZl9zZXJpYWxfcmVhZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgICBlbnVtIHJhZGlvX3BhdGggcmZwYXRoLCB1MzIgb2Zmc2V0KQorCQkJICAgICAgIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsIHUzMiBvZmZzZXQpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CkBAIC0xNDksOCArMTUxLDggQEAKIEVYUE9SVF9TWU1CT0woX3J0bDkyY19waHlfcmZfc2VyaWFsX3JlYWQpOwogCiB2b2lkIF9ydGw5MmNfcGh5X3JmX3NlcmlhbF93cml0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkJZW51bSByYWRpb19wYXRoIHJmcGF0aCwgdTMyIG9mZnNldCwKLQkJCQkJdTMyIGRhdGEpCisJCQkJIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsIHUzMiBvZmZzZXQsCisJCQkJIHUzMiBkYXRhKQogewogCXUzMiBkYXRhX2FuZF9hZGRyOwogCXUzMiBuZXdvZmZzZXQ7CkBAIC0xOTcsNiArMTk5LDcgQEAKIAlydGxfc2V0X2JicmVnKGh3LCAweGU4MCwgMHgwYzAwMDAwMCwgMHgyKTsKIAlydGxfc2V0X2JicmVnKGh3LCAweGU4OCwgMHgwYzAwMDAwMCwgMHgyKTsKIH0KKwogYm9vbCBydGw5MmNfcGh5X3JmX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CkBAIC0yNDEsMTMgKzI0NCwxNCBAQAogCXJ0bHBoeS0+Y2NrX2hpZ2hfcG93ZXIgPSAoYm9vbCkgKHJ0bF9nZXRfYmJyZWcoaHcsCiAJCQkJCQlSRlBHQTBfWEFfSFNTSVBBUkFNRVRFUjIsCiAJCQkJCQkweDIwMCkpOworCiAJcmV0dXJuIHRydWU7CiB9CiBFWFBPUlRfU1lNQk9MKF9ydGw5MmNfcGh5X2JiODE5MmNfY29uZmlnX3BhcmFmaWxlKTsKIAogdm9pZCBfcnRsOTJjX3N0b3JlX3B3ckluZGV4X2RpZmZyYXRlX29mZnNldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkJCSAgIHUzMiByZWdhZGRyLCB1MzIgYml0bWFzaywKLQkJCQkJCSAgIHUzMiBkYXRhKQorCQkJCQkgICAgdTMyIHJlZ2FkZHIsIHUzMiBiaXRtYXNrLAorCQkJCQkgICAgdTMyIGRhdGEpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CkBAIC0zMTcsNjEgKzMyMSw0OCBAQAogCX0KIAlpZiAocmVnYWRkciA9PSBSVFhBR0NfQl9SQVRFNTRfMjQpIHsKIAkJcnRscGh5LT5NQ1NfVFhQV1JbcnRscGh5LT5wd3Jncm91cF9jbnRdWzldID0gZGF0YTsKLQogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19UUkFDRSwKIAkJCSAoIk1DU1R4UG93ZXJMZXZlbE9yaWdpbmFsT2Zmc2V0WyVkXVs5XSA9IDB4JXhcbiIsCiAJCQkgIHJ0bHBoeS0+cHdyZ3JvdXBfY250LAogCQkJICBydGxwaHktPk1DU19UWFBXUltydGxwaHktPnB3cmdyb3VwX2NudF1bOV0pKTsKIAl9Ci0KIAlpZiAocmVnYWRkciA9PSBSVFhBR0NfQl9DQ0sxXzU1X01DUzMyKSB7CiAJCXJ0bHBoeS0+TUNTX1RYUFdSW3J0bHBoeS0+cHdyZ3JvdXBfY250XVsxNF0gPSBkYXRhOwotCiAJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX1RSQUNFLAogCQkJICgiTUNTVHhQb3dlckxldmVsT3JpZ2luYWxPZmZzZXRbJWRdWzE0XSA9IDB4JXhcbiIsCiAJCQkgIHJ0bHBoeS0+cHdyZ3JvdXBfY250LAogCQkJICBydGxwaHktPk1DU19UWFBXUltydGxwaHktPnB3cmdyb3VwX2NudF1bMTRdKSk7CiAJfQotCiAJaWYgKHJlZ2FkZHIgPT0gUlRYQUdDX0JfQ0NLMTFfQV9DQ0syXzExICYmIGJpdG1hc2sgPT0gMHgwMDAwMDBmZikgewogCQlydGxwaHktPk1DU19UWFBXUltydGxwaHktPnB3cmdyb3VwX2NudF1bMTVdID0gZGF0YTsKLQogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19UUkFDRSwKIAkJCSAoIk1DU1R4UG93ZXJMZXZlbE9yaWdpbmFsT2Zmc2V0WyVkXVsxNV0gPSAweCV4XG4iLAogCQkJICBydGxwaHktPnB3cmdyb3VwX2NudCwKIAkJCSAgcnRscGh5LT5NQ1NfVFhQV1JbcnRscGh5LT5wd3Jncm91cF9jbnRdWzE1XSkpOwogCX0KLQogCWlmIChyZWdhZGRyID09IFJUWEFHQ19CX01DUzAzX01DUzAwKSB7CiAJCXJ0bHBoeS0+TUNTX1RYUFdSW3J0bHBoeS0+cHdyZ3JvdXBfY250XVsxMF0gPSBkYXRhOwotCiAJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX1RSQUNFLAogCQkJICgiTUNTVHhQb3dlckxldmVsT3JpZ2luYWxPZmZzZXRbJWRdWzEwXSA9IDB4JXhcbiIsCiAJCQkgIHJ0bHBoeS0+cHdyZ3JvdXBfY250LAogCQkJICBydGxwaHktPk1DU19UWFBXUltydGxwaHktPnB3cmdyb3VwX2NudF1bMTBdKSk7CiAJfQotCiAJaWYgKHJlZ2FkZHIgPT0gUlRYQUdDX0JfTUNTMDdfTUNTMDQpIHsKIAkJcnRscGh5LT5NQ1NfVFhQV1JbcnRscGh5LT5wd3Jncm91cF9jbnRdWzExXSA9IGRhdGE7Ci0KIAkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfVFJBQ0UsCiAJCQkgKCJNQ1NUeFBvd2VyTGV2ZWxPcmlnaW5hbE9mZnNldFslZF1bMTFdID0gMHgleFxuIiwKIAkJCSAgcnRscGh5LT5wd3Jncm91cF9jbnQsCiAJCQkgIHJ0bHBoeS0+TUNTX1RYUFdSW3J0bHBoeS0+cHdyZ3JvdXBfY250XVsxMV0pKTsKIAl9Ci0KIAlpZiAocmVnYWRkciA9PSBSVFhBR0NfQl9NQ1MxMV9NQ1MwOCkgewogCQlydGxwaHktPk1DU19UWFBXUltydGxwaHktPnB3cmdyb3VwX2NudF1bMTJdID0gZGF0YTsKLQogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19UUkFDRSwKIAkJCSAoIk1DU1R4UG93ZXJMZXZlbE9yaWdpbmFsT2Zmc2V0WyVkXVsxMl0gPSAweCV4XG4iLAogCQkJICBydGxwaHktPnB3cmdyb3VwX2NudCwKIAkJCSAgcnRscGh5LT5NQ1NfVFhQV1JbcnRscGh5LT5wd3Jncm91cF9jbnRdWzEyXSkpOwogCX0KLQogCWlmIChyZWdhZGRyID09IFJUWEFHQ19CX01DUzE1X01DUzEyKSB7CiAJCXJ0bHBoeS0+TUNTX1RYUFdSW3J0bHBoeS0+cHdyZ3JvdXBfY250XVsxM10gPSBkYXRhOwotCiAJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX1RSQUNFLAogCQkJICgiTUNTVHhQb3dlckxldmVsT3JpZ2luYWxPZmZzZXRbJWRdWzEzXSA9IDB4JXhcbiIsCiAJCQkgIHJ0bHBoeS0+cHdyZ3JvdXBfY250LApAQCAtNTgzLDYgKzU3NCw3IEBACiAKIAlydGxwaHktPmN1cl9jY2tfdHhwd3JpZHggPSBjY2twb3dlcmxldmVsWzBdOwogCXJ0bHBoeS0+Y3VyX29mZG0yNGdfdHhwd3JpZHggPSBvZmRtcG93ZXJsZXZlbFswXTsKKwogfQogCiB2b2lkIHJ0bDkyY19waHlfc2V0X3R4cG93ZXJfbGV2ZWwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGNoYW5uZWwpCkBAIC02MTEsNyArNjAzLDYgQEAKIAlzdHJ1Y3QgcnRsX2VmdXNlICpydGxlZnVzZSA9IHJ0bF9lZnVzZShydGxfcHJpdihodykpOwogCXU4IGlkeDsKIAl1OCByZl9wYXRoOwotCiAJdTggY2NrdHhwd3JpZHggPSBfcnRsOTJjX3BoeV9kYm1fdG9fdHhwd3JfSWR4KGh3LAogCQkJCQkJICAgICAgV0lSRUxFU1NfTU9ERV9CLAogCQkJCQkJICAgICAgcG93ZXJfaW5kYm0pOwpAQCAtNjM5LDExICs2MzAsNiBAQAogfQogRVhQT1JUX1NZTUJPTChydGw5MmNfcGh5X3VwZGF0ZV90eHBvd2VyX2RibSk7CiAKLXZvaWQgcnRsOTJjX3BoeV9zZXRfYmVhY29uX2h3X3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IGJlYWNvbmludGVydmFsKQotewotfQotRVhQT1JUX1NZTUJPTChydGw5MmNfcGh5X3NldF9iZWFjb25faHdfcmVnKTsKLQogdTggX3J0bDkyY19waHlfZGJtX3RvX3R4cHdyX0lkeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQllbnVtIHdpcmVsZXNzX21vZGUgd2lyZWxlc3Ntb2RlLAogCQkJCWxvbmcgcG93ZXJfaW5kYm0pCkBAIC03NDEsOSArNzI3LDkgQEAKIAlpZiAocnRscGh5LT5zZXRfYndtb2RlX2lucHJvZ3Jlc3MpCiAJCXJldHVybjsKIAlydGxwaHktPnNldF9id21vZGVfaW5wcm9ncmVzcyA9IHRydWU7Ci0JaWYgKCghaXNfaGFsX3N0b3AocnRsaGFsKSkgJiYgIShSVF9DQU5OT1RfSU8oaHcpKSkKLQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnBoeV9zZXRfYndfbW9kZV9jYWxsYmFjayhodyk7Ci0JZWxzZSB7CisJaWYgKCghaXNfaGFsX3N0b3AocnRsaGFsKSkgJiYgIShSVF9DQU5OT1RfSU8oaHcpKSkgeworCQlydGxwaHktPnNldF9id21vZGVfaW5wcm9ncmVzcyA9IGZhbHNlOworCX0gZWxzZSB7CiAJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfV0FSTklORywKIAkJCSAoIkZBTFNFIGRyaXZlciBzbGVlcCBvciB1bmxvYWRcbiIpKTsKIAkJcnRscGh5LT5zZXRfYndtb2RlX2lucHJvZ3Jlc3MgPSBmYWxzZTsKQEAgLTc3Myw4ICs3NTksOSBAQAogCQkJCW1kZWxheShkZWxheSk7CiAJCQllbHNlCiAJCQkJY29udGludWU7Ci0JCX0gZWxzZQorCQl9IGVsc2UgewogCQkJcnRscGh5LT5zd19jaG5sX2lucHJvZ3Jlc3MgPSBmYWxzZTsKKwkJfQogCQlicmVhazsKIAl9IHdoaWxlICh0cnVlKTsKIAlSVF9UUkFDRShydGxwcml2LCBDT01QX1NDQU4sIERCR19UUkFDRSwgKCI8PT1cbiIpKTsKQEAgLTgxMSw5ICs3OTgsMzIgQEAKIH0KIEVYUE9SVF9TWU1CT0wocnRsOTJjX3BoeV9zd19jaG5sKTsKIAotc3RhdGljIGJvb2wgX3J0bDkyY19waHlfc3dfY2hubF9zdGVwX2J5X3N0ZXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCSAgICAgdTggY2hhbm5lbCwgdTggKnN0YWdlLCB1OCAqc3RlcCwKLQkJCQkJICAgICB1MzIgKmRlbGF5KQorc3RhdGljIGJvb2wgX3J0bDkyY19waHlfc2V0X3N3X2NobmxfY21kYXJyYXkoc3RydWN0IHN3Y2hubGNtZCAqY21kdGFibGUsCisJCQkJCSAgICAgdTMyIGNtZHRhYmxlaWR4LCB1MzIgY21kdGFibGVzeiwKKwkJCQkJICAgICBlbnVtIHN3Y2hubGNtZF9pZCBjbWRpZCwKKwkJCQkJICAgICB1MzIgcGFyYTEsIHUzMiBwYXJhMiwgdTMyIG1zZGVsYXkpCit7CisJc3RydWN0IHN3Y2hubGNtZCAqcGNtZDsKKworCWlmIChjbWR0YWJsZSA9PSBOVUxMKSB7CisJCVJUX0FTU0VSVChmYWxzZSwgKCJjbWR0YWJsZSBjYW5ub3QgYmUgTlVMTC5cbiIpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChjbWR0YWJsZWlkeCA+PSBjbWR0YWJsZXN6KQorCQlyZXR1cm4gZmFsc2U7CisKKwlwY21kID0gY21kdGFibGUgKyBjbWR0YWJsZWlkeDsKKwlwY21kLT5jbWRpZCA9IGNtZGlkOworCXBjbWQtPnBhcmExID0gcGFyYTE7CisJcGNtZC0+cGFyYTIgPSBwYXJhMjsKKwlwY21kLT5tc2RlbGF5ID0gbXNkZWxheTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBfcnRsOTJjX3BoeV9zd19jaG5sX3N0ZXBfYnlfc3RlcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgICB1OCBjaGFubmVsLCB1OCAqc3RhZ2UsIHU4ICpzdGVwLAorCQkJCSAgICAgIHUzMiAqZGVsYXkpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CkBAIC05MTcsMjkgKzkyNyw2IEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgYm9vbCBfcnRsOTJjX3BoeV9zZXRfc3dfY2hubF9jbWRhcnJheShzdHJ1Y3Qgc3djaG5sY21kICpjbWR0YWJsZSwKLQkJCQkJICAgICB1MzIgY21kdGFibGVpZHgsIHUzMiBjbWR0YWJsZXN6LAotCQkJCQkgICAgIGVudW0gc3djaG5sY21kX2lkIGNtZGlkLAotCQkJCQkgICAgIHUzMiBwYXJhMSwgdTMyIHBhcmEyLCB1MzIgbXNkZWxheSkKLXsKLQlzdHJ1Y3Qgc3djaG5sY21kICpwY21kOwotCi0JaWYgKGNtZHRhYmxlID09IE5VTEwpIHsKLQkJUlRfQVNTRVJUKGZhbHNlLCAoImNtZHRhYmxlIGNhbm5vdCBiZSBOVUxMLlxuIikpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JaWYgKGNtZHRhYmxlaWR4ID49IGNtZHRhYmxlc3opCi0JCXJldHVybiBmYWxzZTsKLQotCXBjbWQgPSBjbWR0YWJsZSArIGNtZHRhYmxlaWR4OwotCXBjbWQtPmNtZGlkID0gY21kaWQ7Ci0JcGNtZC0+cGFyYTEgPSBwYXJhMTsKLQlwY21kLT5wYXJhMiA9IHBhcmEyOwotCXBjbWQtPm1zZGVsYXkgPSBtc2RlbGF5OwotCXJldHVybiB0cnVlOwotfQotCiBib29sIHJ0bDgxOTJfcGh5X2NoZWNrX2lzX2xlZ2FsX3JmcGF0aChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIHJmcGF0aCkKIHsKIAlyZXR1cm4gdHJ1ZTsKQEAgLTEwMDIsMTMgKzk4OSwxMyBAQAogCXJlZ19lYmMgPSBydGxfZ2V0X2JicmVnKGh3LCAweGViYywgTUFTS0RXT1JEKTsKIAlyZWdfZWM0ID0gcnRsX2dldF9iYnJlZyhodywgMHhlYzQsIE1BU0tEV09SRCk7CiAJcmVnX2VjYyA9IHJ0bF9nZXRfYmJyZWcoaHcsIDB4ZWNjLCBNQVNLRFdPUkQpOworCiAJaWYgKCEocmVnX2VhYyAmIEJJVCgzMSkpICYmCiAJICAgICgoKHJlZ19lYjQgJiAweDAzRkYwMDAwKSA+PiAxNikgIT0gMHgxNDIpICYmCiAJICAgICgoKHJlZ19lYmMgJiAweDAzRkYwMDAwKSA+PiAxNikgIT0gMHg0MikpCiAJCXJlc3VsdCB8PSAweDAxOwogCWVsc2UKIAkJcmV0dXJuIHJlc3VsdDsKLQogCWlmICghKHJlZ19lYWMgJiBCSVQoMzApKSAmJgogCSAgICAoKChyZWdfZWM0ICYgMHgwM0ZGMDAwMCkgPj4gMTYpICE9IDB4MTMyKSAmJgogCSAgICAoKChyZWdfZWNjICYgMHgwM0ZGMDAwMCkgPj4gMTYpICE9IDB4MzYpKQpAQCAtMTAyMyw5ICsxMDEwLDkgQEAKIAl1MzIgb2xkdmFsXzAsIHgsIHR4MF9hLCByZWc7CiAJbG9uZyB5LCB0eDBfYzsKIAotCWlmIChmaW5hbF9jYW5kaWRhdGUgPT0gMHhGRikKKwlpZiAoZmluYWxfY2FuZGlkYXRlID09IDB4RkYpIHsKIAkJcmV0dXJuOwotCWVsc2UgaWYgKGlxa19vaykgeworCX0gZWxzZSBpZiAoaXFrX29rKSB7CiAJCW9sZHZhbF8wID0gKHJ0bF9nZXRfYmJyZWcoaHcsIFJPRkRNMF9YQVRYSVFJTUJBTEFOQ0UsCiAJCQkJCSAgTUFTS0RXT1JEKSA+PiAyMikgJiAweDNGRjsKIAkJeCA9IHJlc3VsdFtmaW5hbF9jYW5kaWRhdGVdWzBdOwpAQCAtMTA2Myw5ICsxMDUwLDkgQEAKIAl1MzIgb2xkdmFsXzEsIHgsIHR4MV9hLCByZWc7CiAJbG9uZyB5LCB0eDFfYzsKIAotCWlmIChmaW5hbF9jYW5kaWRhdGUgPT0gMHhGRikKKwlpZiAoZmluYWxfY2FuZGlkYXRlID09IDB4RkYpIHsKIAkJcmV0dXJuOwotCWVsc2UgaWYgKGlxa19vaykgeworCX0gZWxzZSBpZiAoaXFrX29rKSB7CiAJCW9sZHZhbF8xID0gKHJ0bF9nZXRfYmJyZWcoaHcsIFJPRkRNMF9YQlRYSVFJTUJBTEFOQ0UsCiAJCQkJCSAgTUFTS0RXT1JEKSA+PiAyMikgJiAweDNGRjsKIAkJeCA9IHJlc3VsdFtmaW5hbF9jYW5kaWRhdGVdWzRdOwpAQCAtMTI4Miw2ICsxMjY5LDcgQEAKIAkJCQkJCSAgIFJGUEdBMF9YQV9IU1NJUEFSQU1FVEVSMSwKIAkJCQkJCSAgIEJJVCg4KSk7CiAJfQorCiAJaWYgKCFydGxwaHktPnJmcGlfZW5hYmxlKQogCQlfcnRsOTJjX3BoeV9waV9tb2RlX3N3aXRjaChodywgdHJ1ZSk7CiAJaWYgKHQgPT0gMCkgewpAQCAtMTMxNyw5ICsxMzA1LDEwIEBACiAJCQkJCTB4M0ZGMDAwMCkgPj4gMTY7CiAJCQlicmVhazsKIAkJfSBlbHNlIGlmIChpID09IChyZXRyeWNvdW50IC0gMSkgJiYgcGF0aGFfb2sgPT0gMHgwMSkKKwogCQkJcmVzdWx0W3RdWzBdID0gKHJ0bF9nZXRfYmJyZWcoaHcsIDB4ZTk0LAogCQkJCQkJICAgICAgTUFTS0RXT1JEKSAmIDB4M0ZGMDAwMCkgPj4KLQkJCQkJCSAgICAgIDE2OworCQkJICAgIDE2OwogCQlyZXN1bHRbdF1bMV0gPQogCQkgICAgKHJ0bF9nZXRfYmJyZWcoaHcsIDB4ZTljLCBNQVNLRFdPUkQpICYgMHgzRkYwMDAwKSA+PiAxNjsKIApAQCAtMTM3NSw4ICsxMzY0LDcgQEAKIHN0YXRpYyB2b2lkIF9ydGw5MmNfcGh5X2FwX2NhbGlicmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICAgIGNoYXIgZGVsdGEsIGJvb2wgaXMydCkKIHsKLQkvKiBUaGlzIHJvdXRpbmUgaXMgZGVsaWJlcmF0ZWx5IGR1bW1pZWQgb3V0IGZvciBsYXRlciBmaXhlcyAqLwotI2lmIDAKKyNpZiAwIC8qIFRoaXMgcm91dGluZSBpcyBkZWxpYmVyYXRlbHkgZHVtbWllZCBvdXQgZm9yIGxhdGVyIGZpeGVzICovCiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CiAJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKQEAgLTE0MzQsNyArMTQyMiw3IEBACiAJCTB4MDRkYjI1YTQsIDB4MGIxYjI1YTQKIAl9OwogCi0JdTMyIGFwa19vZmZzZXRbUEFUSF9OVU1dID0geyAweGI2OCwgMHhiNmMgfTsKKwljb25zdCB1MzIgYXBrX29mZnNldFtQQVRIX05VTV0gPSB7IDB4YjY4LCAweGI2YyB9OwogCiAJdTMyIGFwa19ub3JtYWxfb2Zmc2V0W1BBVEhfTlVNXSA9IHsgMHhiMjgsIDB4Yjk4IH07CiAKQEAgLTE0NjMsMTMgKzE0NTEsMTUgQEAKIAkJMHgwMDA1MDAwNgogCX07CiAKLQljb25zdCB1MzIgYXBrX3Jlc3VsdFtQQVRIX05VTV1bQVBLX0JCX1JFR19OVU1dOworCXUzMiBhcGtfcmVzdWx0W1BBVEhfTlVNXVtBUEtfQkJfUkVHX05VTV07CiAKIAlsb25nIGJiX29mZnNldCwgZGVsdGFfdiwgZGVsdGFfb2Zmc2V0OwogCiAJaWYgKCFpczJ0KQogCQlwYXRoYm91bmQgPSAxOwogCisJcmV0dXJuOworCiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgUEFUSF9OVU07IGluZGV4KyspIHsKIAkJYXBrX29mZnNldFtpbmRleF0gPSBhcGtfbm9ybWFsX29mZnNldFtpbmRleF07CiAJCWFwa192YWx1ZVtpbmRleF0gPSBhcGtfbm9ybWFsX3ZhbHVlW2luZGV4XTsKQEAgLTE3MzAsOCArMTcyMCw3IEBACiAJCQkgICAgICAgMHgwOCkpOwogCiAJfQotCi0JcnRscGh5LT5hcGtfZG9uZSA9IHRydWU7CisJcnRscGh5LT5iX2Fwa19kb25lID0gdHJ1ZTsKICNlbmRpZgogfQogCkBAIC0xNzU4LDYgKzE3NDcsNyBAQAogCQkJcnRsX3NldF9iYnJlZyhodywgUkZQR0EwX1hBX1JGSU5URVJGQUNFT0UsIDB4MzAwLCAweDEpOwogCiAJfQorCiB9CiAKICN1bmRlZiBJUUtfQUREQV9SRUdfTlVNCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjL3BoeV9jb21tb24uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmMvcGh5X2NvbW1vbi5oCmluZGV4IDUzZmZiMDkuLjlhMjY0YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmMvcGh5X2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmMvcGh5X2NvbW1vbi5oCkBAIC0yNyw4ICsyNyw4IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaWZuZGVmIF9fUlRMOTJDX1BIWV9IX18KLSNkZWZpbmUgX19SVEw5MkNfUEhZX0hfXworI2lmbmRlZiBfX1JUTDkyQ19QSFlfQ09NTU9OX0hfXworI2RlZmluZSBfX1JUTDkyQ19QSFlfQ09NTU9OX0hfXwogCiAjZGVmaW5lIE1BWF9QUkVDTURfQ05UCQkJMTYKICNkZWZpbmUgTUFYX1JGREVQRU5EQ01EX0NOVAkJMTYKQEAgLTM5LDYgKzM5LDcgQEAKICNkZWZpbmUgUlRfQ0FOTk9UX0lPKGh3KQkJZmFsc2UKICNkZWZpbmUgSElHSFBPV0VSX1JBRElPQV9BUlJBWUxFTgkyMgogCisjZGVmaW5lIElRS19BRERBX1JFR19OVU0JCTE2CiAjZGVmaW5lIE1BWF9UT0xFUkFOQ0UJCQk1CiAjZGVmaW5lCUlRS19ERUxBWV9USU1FCQkJMQogCkBAIC01Niw2ICs1Nyw3IEBACiAjZGVmaW5lIElRS19BRERBX1JFR19OVU0JCTE2CiAjZGVmaW5lIElRS19NQUNfUkVHX05VTQkJCTQKIAorI2RlZmluZSBJUUtfREVMQVlfVElNRQkJCTEKICNkZWZpbmUgUkY5MF9QQVRIX01BWAkJCTIKIAogI2RlZmluZSBDVF9PRkZTRVRfTUFDX0FERFIJCTBYMTYKQEAgLTc3LDYgKzc5LDcgQEAKIAogI2RlZmluZSBSVEw5MkNfTUFYX1BBVEhfTlVNCQkyCiAjZGVmaW5lIExMVF9MQVNUX0VOVFJZX09GX1RYX1BLVF9CVUZGRVIJMjU1CisKIGVudW0gc3djaG5sY21kX2lkIHsKIAlDTURJRF9FTkQsCiAJQ01ESURfU0VUX1RYUE9XRVJPV0VSX0xFVkVMLApAQCAtMTg0LDQ1ICsxODcsNDEgQEAKIAl1MzIgbWNzX29yaWdpbmFsX29mZnNldFs0XVsxNl07CiB9OwogCi1leHRlcm4gdTMyIHJ0bDkyY19waHlfcXVlcnlfYmJfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAordTMyIHJ0bDkyY19waHlfcXVlcnlfYmJfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgIHUzMiByZWdhZGRyLCB1MzIgYml0bWFzayk7Ci1leHRlcm4gdm9pZCBydGw5MmNfcGh5X3NldF9iYl9yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCit2b2lkIHJ0bDkyY19waHlfc2V0X2JiX3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgIHUzMiByZWdhZGRyLCB1MzIgYml0bWFzaywgdTMyIGRhdGEpOwotZXh0ZXJuIHUzMiBydGw5MmNfcGh5X3F1ZXJ5X3JmX3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKK3UzMiBydGw5MmNfcGh5X3F1ZXJ5X3JmX3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICBlbnVtIHJhZGlvX3BhdGggcmZwYXRoLCB1MzIgcmVnYWRkciwKIAkJCQkgICB1MzIgYml0bWFzayk7Ci1leHRlcm4gdm9pZCBydGw5MmNfcGh5X3NldF9yZl9yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICBlbnVtIHJhZGlvX3BhdGggcmZwYXRoLCB1MzIgcmVnYWRkciwKLQkJCQkgIHUzMiBiaXRtYXNrLCB1MzIgZGF0YSk7Ci1leHRlcm4gYm9vbCBydGw5MmNfcGh5X21hY19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwotZXh0ZXJuIGJvb2wgcnRsOTJjX3BoeV9iYl9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwotZXh0ZXJuIGJvb2wgcnRsOTJjX3BoeV9yZl9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwotZXh0ZXJuIGJvb2wgcnRsOTJjX3BoeV9jb25maWdfcmZfd2l0aF9mZWFkZXJmaWxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorYm9vbCBydGw5MmNfcGh5X21hY19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworYm9vbCBydGw5MmNfcGh5X2JiX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Citib29sIHJ0bDkyY19waHlfcmZfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK2Jvb2wgcnRsOTJjX3BoeV9jb25maWdfcmZfd2l0aF9mZWFkZXJmaWxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCQkJIGVudW0gcmFkaW9fcGF0aCByZnBhdGgpOwotZXh0ZXJuIHZvaWQgcnRsOTJjX3BoeV9nZXRfaHdfcmVnX29yaWdpbmFsdmFsdWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwotZXh0ZXJuIHZvaWQgcnRsOTJjX3BoeV9nZXRfdHhwb3dlcl9sZXZlbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKK3ZvaWQgcnRsOTJjX3BoeV9nZXRfaHdfcmVnX29yaWdpbmFsdmFsdWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw5MmNfcGh5X2dldF90eHBvd2VyX2xldmVsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCQkgbG9uZyAqcG93ZXJsZXZlbCk7Ci1leHRlcm4gdm9pZCBydGw5MmNfcGh5X3NldF90eHBvd2VyX2xldmVsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBjaGFubmVsKTsKLWV4dGVybiBib29sIHJ0bDkyY19waHlfdXBkYXRlX3R4cG93ZXJfZGJtKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAordm9pZCBydGw5MmNfcGh5X3NldF90eHBvd2VyX2xldmVsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBjaGFubmVsKTsKK2Jvb2wgcnRsOTJjX3BoeV91cGRhdGVfdHhwb3dlcl9kYm0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCSAgbG9uZyBwb3dlcl9pbmRibSk7Ci1leHRlcm4gdm9pZCBydGw5MmNfcGh5X3NjYW5fb3BlcmF0aW9uX2JhY2t1cChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKK3ZvaWQgcnRsOTJjX3BoeV9zY2FuX29wZXJhdGlvbl9iYWNrdXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCSAgICAgdTggb3BlcmF0aW9uKTsKLWV4dGVybiB2b2lkIHJ0bDkyY19waHlfc2V0X2J3X21vZGVfY2FsbGJhY2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwotZXh0ZXJuIHZvaWQgcnRsOTJjX3BoeV9zZXRfYndfbW9kZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKK3ZvaWQgcnRsOTJjX3BoeV9zZXRfYndfbW9kZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoX3R5cGUpOwotZXh0ZXJuIHZvaWQgcnRsOTJjX3BoeV9zd19jaG5sX2NhbGxiYWNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKLWV4dGVybiB1OCBydGw5MmNfcGh5X3N3X2Nobmwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwotZXh0ZXJuIHZvaWQgcnRsOTJjX3BoeV9pcV9jYWxpYnJhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgYl9yZWNvdmVyeSk7Ci1leHRlcm4gdm9pZCBydGw5MmNfcGh5X3NldF9iZWFjb25faHdfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAordm9pZCBydGw5MmNfcGh5X3N3X2NobmxfY2FsbGJhY2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordTggcnRsOTJjX3BoeV9zd19jaG5sKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJjX3BoeV9pcV9jYWxpYnJhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgYl9yZWNvdmVyeSk7Cit2b2lkIHJ0bDkyY19waHlfc2V0X2JlYWNvbl9od19yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCSB1MTYgYmVhY29uaW50ZXJ2YWwpOwogdm9pZCBydGw5MmNfcGh5X2FwX2NhbGlicmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgY2hhciBkZWx0YSk7CiB2b2lkIHJ0bDkyY19waHlfbGNfY2FsaWJyYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIHZvaWQgcnRsOTJjX3BoeV9zZXRfcmZwYXRoX3N3aXRjaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBibWFpbik7CiBib29sIHJ0bDkyY19waHlfY29uZmlnX3JmX3dpdGhfaGVhZGVyZmlsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkJICBlbnVtIHJhZGlvX3BhdGggcmZwYXRoKTsKLWV4dGVybiBib29sIHJ0bDgxOTJfcGh5X2NoZWNrX2lzX2xlZ2FsX3JmcGF0aChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKK2Jvb2wgcnRsODE5Ml9waHlfY2hlY2tfaXNfbGVnYWxfcmZwYXRoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCQkgICAgICB1MzIgcmZwYXRoKTsKLWV4dGVybiBib29sIHJ0bDkyY19waHlfc2V0X3JmX3Bvd2VyX3N0YXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorYm9vbCBydGw5MmNfcGh5X3NldF9yZl9wb3dlcl9zdGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkJICBlbnVtIHJmX3B3cnN0YXRlIHJmcHdyX3N0YXRlKTsKIHZvaWQgcnRsOTJjZV9waHlfc2V0X3JmX29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIHZvaWQgcnRsOTJjX3BoeV9zZXRfaW8oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwpAQCAtMjM1LDEyICsyMzQsMjUgQEAKIAkJCQllbnVtIHdpcmVsZXNzX21vZGUgd2lyZWxlc3Ntb2RlLAogCQkJCWxvbmcgcG93ZXJfaW5kYm0pOwogdm9pZCBfcnRsOTJjX3BoeV9pbml0X2JiX3JmX3JlZ2lzdGVyX2RlZmluaXRpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwotc3RhdGljIGJvb2wgX3J0bDkyY19waHlfc2V0X3N3X2NobmxfY21kYXJyYXkoc3RydWN0IHN3Y2hubGNtZCAqY21kdGFibGUsCi0JCQkJCSAgICAgdTMyIGNtZHRhYmxlaWR4LCB1MzIgY21kdGFibGVzeiwKLQkJCQkJICAgICBlbnVtIHN3Y2hubGNtZF9pZCBjbWRpZCwgdTMyIHBhcmExLAotCQkJCQkgICAgIHUzMiBwYXJhMiwgdTMyIG1zZGVsYXkpOwotc3RhdGljIGJvb2wgX3J0bDkyY19waHlfc3dfY2hubF9zdGVwX2J5X3N0ZXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCSAgICAgdTggY2hhbm5lbCwgdTggKnN0YWdlLCB1OCAqc3RlcCwKLQkJCQkJICAgICB1MzIgKmRlbGF5KTsKK3ZvaWQgX3J0bDkyY19waHlfc2V0X3JmX3NsZWVwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK2Jvb2wgX3J0bDkyY19waHlfc3dfY2hubF9zdGVwX2J5X3N0ZXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgdTggY2hhbm5lbCwgdTggKnN0YWdlLCB1OCAqc3RlcCwKKwkJCQkgICAgICB1MzIgKmRlbGF5KTsKK3U4IHJ0bDkyY19idF9yc3NpX3N0YXRlX2NoYW5nZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit1MzIgX3J0bDkyY19waHlfZndfcmZfc2VyaWFsX3JlYWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICBlbnVtIHJhZGlvX3BhdGggcmZwYXRoLCB1MzIgb2Zmc2V0KTsKK3ZvaWQgX3J0bDkyY19waHlfZndfcmZfc2VyaWFsX3dyaXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICBlbnVtIHJhZGlvX3BhdGggcmZwYXRoLCB1MzIgb2Zmc2V0LAorCQkJCSAgICB1MzIgZGF0YSk7Cit1MzIgX3J0bDkyY19waHlfcmZfc2VyaWFsX3JlYWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgICAgZW51bSByYWRpb19wYXRoIHJmcGF0aCwgdTMyIG9mZnNldCk7Cit2b2lkIF9ydGw5MmNfcGh5X3JmX3NlcmlhbF93cml0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgZW51bSByYWRpb19wYXRoIHJmcGF0aCwgdTMyIG9mZnNldCwKKwkJCQkgdTMyIGRhdGEpOworYm9vbCBfcnRsOTJjX3BoeV9iYjgxOTJjX2NvbmZpZ19wYXJhZmlsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIF9ydGw5MmNfc3RvcmVfcHdySW5kZXhfZGlmZnJhdGVfb2Zmc2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgICAgdTMyIHJlZ2FkZHIsIHUzMiBiaXRtYXNrLAorCQkJCQkgICAgdTMyIGRhdGEpOworYm9vbCBydGw5MmNfcGh5X3NldF9pb19jbWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gaW9fdHlwZSBpb3R5cGUpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL2RlZi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvZGVmLmgKaW5kZXggMmY1NzdjOC4uMzVmZjdkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvZGVmLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvZGVmLmgKQEAgLTEyMSwxOSArMTIxLDYgQEAKICNkZWZpbmUgQ0hJUF85MkMJCQkweDAxCiAjZGVmaW5lIENISVBfODhDCQkJMHgwMAogCi0vKiBBZGQgdmVuZG9yIGluZm9ybWF0aW9uIGludG8gY2hpcCB2ZXJzaW9uIGRlZmluaXRpb24uCi0gKiBBZGQgVU1DIEItQ3V0IGFuZCBSVEw4NzIzIGNoaXAgaW5mbyBkZWZpbml0aW9uLgotICoKLSAqIEJJVCA3CVJlc2VydmVkCi0gKiBCSVQgNglVTUMgQkN1dAotICogQklUIDUJTWFudWZhY3R1cmVyKFRTTUMvVU1DKQotICogQklUIDQJVEVTVC9OT1JNQUwKLSAqIEJJVCAzCTg3MjMgVmVyc2lvbgotICogQklUIDIJODcyMz8KLSAqIEJJVCAxCTFUMlI/Ci0gKiBCSVQgMAk4OEMvOTJDCi0qLwotCiBlbnVtIHZlcnNpb25fODE5MmMgewogCVZFUlNJT05fQV9DSElQXzkyQyA9IDB4MDEsCiAJVkVSU0lPTl9BX0NISVBfODhDID0gMHgwMCwKQEAgLTI4MCwyMCArMjY3LDYgQEAKIAl1OCAqcF9jbWRidWZmZXI7CiB9OwogCi1zdGF0aWMgaW5saW5lIHU4IF9ydGw5MmNfZ2V0X2NobmxfZ3JvdXAodTggY2hubCkKLXsKLQl1OCBncm91cCA9IDA7Ci0KLQlpZiAoY2hubCA8IDMpCi0JCWdyb3VwID0gMDsKLQllbHNlIGlmIChjaG5sIDwgOSkKLQkJZ3JvdXAgPSAxOwotCWVsc2UKLQkJZ3JvdXAgPSAyOwotCi0JcmV0dXJuIGdyb3VwOwotfQotCiAvKiBOT1RFOiByZWZlcmVuY2UgdG8gcnRsODE5MmNfcmF0ZXMgc3RydWN0ICovCiBzdGF0aWMgaW5saW5lIGludCBfcnRsOTJjX3JhdGVfbWFwcGluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBpc0hULAogCQkJCSAgICAgICB1OCBkZXNjX3JhdGUsIGJvb2wgZmlyc3RfYW1wZHUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9kbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvZG0uYwppbmRleCA3ZDc2NTA0Li4yZGYzM2U1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9kbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL2RtLmMKQEAgLTI5LDEwICsyOSwxMiBAQAogCiAjaW5jbHVkZSAiLi4vd2lmaS5oIgogI2luY2x1ZGUgIi4uL2Jhc2UuaCIKKyNpbmNsdWRlICIuLi9wY2kuaCIKICNpbmNsdWRlICJyZWcuaCIKICNpbmNsdWRlICJkZWYuaCIKICNpbmNsdWRlICJwaHkuaCIKICNpbmNsdWRlICJkbS5oIgorI2luY2x1ZGUgIi4uL3J0bDgxOTJjL2Z3X2NvbW1vbi5oIgogCiB2b2lkIHJ0bDkyY2VfZG1fZHluYW1pY190eHBvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvZG0uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL2RtLmgKaW5kZXggMzYzMDJlYi4uMDdkZDk1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvZG0uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9kbS5oCkBAIC0xOTIsNiArMTkyLDcgQEAKIHZvaWQgcnRsOTJjX2RtX2NoZWNrX3R4cG93ZXJfdHJhY2tpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogdm9pZCBydGw5MmNfZG1faW5pdF9yYXRlX2FkYXB0aXZlX21hc2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogdm9pZCBydGw5MmNfZG1fcmZfc2F2aW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBiZm9yY2VfaW5fbm9ybWFsKTsKK3ZvaWQgcnRsOTJjX2RtX2J0X2NvZXhpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogdm9pZCBydGw5MmNlX2RtX2R5bmFtaWNfdHhwb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL2h3LmMKaW5kZXggMDU0NzdmNDYuLmRlZmI0MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL2h3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvaHcuYwpAQCAtMzAsMTIgKzMwLDE0IEBACiAjaW5jbHVkZSAiLi4vd2lmaS5oIgogI2luY2x1ZGUgIi4uL2VmdXNlLmgiCiAjaW5jbHVkZSAiLi4vYmFzZS5oIgorI2luY2x1ZGUgIi4uL3JlZ2QuaCIKICNpbmNsdWRlICIuLi9jYW0uaCIKICNpbmNsdWRlICIuLi9wcy5oIgogI2luY2x1ZGUgIi4uL3BjaS5oIgogI2luY2x1ZGUgInJlZy5oIgogI2luY2x1ZGUgImRlZi5oIgogI2luY2x1ZGUgInBoeS5oIgorI2luY2x1ZGUgIi4uL3J0bDgxOTJjL2Z3X2NvbW1vbi5oIgogI2luY2x1ZGUgImRtLmgiCiAjaW5jbHVkZSAibGVkLmgiCiAjaW5jbHVkZSAiaHcuaCIKQEAgLTEzNywxNSArMTM5LDYgQEAKIAogCQlicmVhazsKIAkJfQotCWNhc2UgSFdfVkFSX01HVF9GSUxURVI6Ci0JCSooKHUxNiAqKSAodmFsKSkgPSBydGxfcmVhZF93b3JkKHJ0bHByaXYsIFJFR19SWEZMVE1BUDApOwotCQlicmVhazsKLQljYXNlIEhXX1ZBUl9DVFJMX0ZJTFRFUjoKLQkJKigodTE2ICopICh2YWwpKSA9IHJ0bF9yZWFkX3dvcmQocnRscHJpdiwgUkVHX1JYRkxUTUFQMSk7Ci0JCWJyZWFrOwotCWNhc2UgSFdfVkFSX0RBVEFfRklMVEVSOgotCQkqKCh1MTYgKikgKHZhbCkpID0gcnRsX3JlYWRfd29yZChydGxwcml2LCBSRUdfUlhGTFRNQVAyKTsKLQkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKIAkJCSAoInN3aXRjaCBjYXNlIG5vdCBwcm9jZXNzXG4iKSk7CkBAIC0xNTYsNiArMTQ5LDcgQEAKIHZvaWQgcnRsOTJjZV9zZXRfaHdfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCB2YXJpYWJsZSwgdTggKnZhbCkKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wY2lfcHJpdiAqcnRscGNpcHJpdiA9IHJ0bF9wY2lwcml2KGh3KTsKIAlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOwogCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CiAJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKQEAgLTE3OCw3ICsxNzIsNyBAQAogCQkJcmF0ZV9jZmcgfD0gMHgwMTsKIAkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19SUlNSLCByYXRlX2NmZyAmIDB4ZmYpOwogCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1JSU1IgKyAxLAotCQkJCSAgICAgICAocmF0ZV9jZmcgPj4gOCkmMHhmZik7CisJCQkJICAgICAgIChyYXRlX2NmZyA+PiA4KSAmIDB4ZmYpOwogCQkJd2hpbGUgKHJhdGVfY2ZnID4gMHgxKSB7CiAJCQkJcmF0ZV9jZmcgPSAocmF0ZV9jZmcgPj4gMSk7CiAJCQkJcmF0ZV9pbmRleCsrOwpAQCAtMjc2LDEzICsyNzAsMTkgQEAKIAkJCWJyZWFrOwogCQl9CiAJY2FzZSBIV19WQVJfQU1QRFVfRkFDVE9SOnsKLQkJCXU4IHJlZ3Rvc2V0X25vcm1hbFs0XSA9IHsgMHg0MSwgMHhhOCwgMHg3MiwgMHhiOSB9OworCQkJdTggcmVndG9zZXRfbm9ybWFsWzRdID0gezB4NDEsIDB4YTgsIDB4NzIsIDB4Yjl9OworCQkJdTggcmVndG9zZXRfYnRbNF0gPSB7MHgzMSwgMHg3NCwgMHg0MiwgMHg5N307CiAKIAkJCXU4IGZhY3Rvcl90b3NldDsKIAkJCXU4ICpwX3JlZ3Rvc2V0ID0gTlVMTDsKIAkJCXU4IGluZGV4ID0gMDsKIAotCQkJcF9yZWd0b3NldCA9IHJlZ3Rvc2V0X25vcm1hbDsKKwkJCWlmICgocnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9jb2V4aXN0ZW5jZSkgJiYKKwkJCSAgICAocnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9jb2V4aXN0X3R5cGUgPT0KKwkJCSAgICBCVF9DU1JfQkM0KSkKKwkJCQlwX3JlZ3Rvc2V0ID0gcmVndG9zZXRfYnQ7CisJCQllbHNlCisJCQkJcF9yZWd0b3NldCA9IHJlZ3Rvc2V0X25vcm1hbDsKIAogCQkJZmFjdG9yX3Rvc2V0ID0gKigodTggKikgdmFsKTsKIAkJCWlmIChmYWN0b3JfdG9zZXQgPD0gMykgewpAQCAtMzE3LDQ1ICszMTcsNyBAQAogCQl9CiAJY2FzZSBIV19WQVJfQUNfUEFSQU06ewogCQkJdTggZV9hY2kgPSAqKCh1OCAqKSB2YWwpOwotCQkJdTMyIHU0Yl9hY19wYXJhbTsKLQkJCXUxNiBjd19taW4gPSBsZTE2X3RvX2NwdShtYWMtPmFjW2VfYWNpXS5jd19taW4pOwotCQkJdTE2IGN3X21heCA9IGxlMTZfdG9fY3B1KG1hYy0+YWNbZV9hY2ldLmN3X21heCk7Ci0JCQl1MTYgdHhfb3AgPSBsZTE2X3RvX2NwdShtYWMtPmFjW2VfYWNpXS50eF9vcCk7Ci0KLQkJCXU0Yl9hY19wYXJhbSA9ICh1MzIpIG1hYy0+YWNbZV9hY2ldLmFpZnM7Ci0JCQl1NGJfYWNfcGFyYW0gfD0gKCh1MzIpY3dfbWluCi0JCQkJCSAmIDB4RikgPDwgQUNfUEFSQU1fRUNXX01JTl9PRkZTRVQ7Ci0JCQl1NGJfYWNfcGFyYW0gfD0gKCh1MzIpY3dfbWF4ICYKLQkJCQkJIDB4RikgPDwgQUNfUEFSQU1fRUNXX01BWF9PRkZTRVQ7Ci0JCQl1NGJfYWNfcGFyYW0gfD0gKHUzMil0eF9vcCA8PCBBQ19QQVJBTV9UWE9QX09GRlNFVDsKLQotCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9NTE1FLCBEQkdfTE9VRCwKLQkJCQkgKCJxdWV1ZToleCwgYWNfcGFyYW06JXhcbiIsIGVfYWNpLAotCQkJCSAgdTRiX2FjX3BhcmFtKSk7Ci0KLQkJCXN3aXRjaCAoZV9hY2kpIHsKLQkJCWNhc2UgQUMxX0JLOgotCQkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfRURDQV9CS19QQVJBTSwKLQkJCQkJCXU0Yl9hY19wYXJhbSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEFDMF9CRToKLQkJCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0VEQ0FfQkVfUEFSQU0sCi0JCQkJCQl1NGJfYWNfcGFyYW0pOwotCQkJCWJyZWFrOwotCQkJY2FzZSBBQzJfVkk6Ci0JCQkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19FRENBX1ZJX1BBUkFNLAotCQkJCQkJdTRiX2FjX3BhcmFtKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQUMzX1ZPOgotCQkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfRURDQV9WT19QQVJBTSwKLQkJCQkJCXU0Yl9hY19wYXJhbSk7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCVJUX0FTU0VSVChmYWxzZSwKLQkJCQkgICgiU2V0SHdSZWc4MTg1KCk6IGludmFsaWQgYWNpOiAlZCAhXG4iLAotCQkJCSAgIGVfYWNpKSk7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCQlydGw5MmNfZG1faW5pdF9lZGNhX3R1cmJvKGh3KTsKIAogCQkJaWYgKHJ0bHBjaS0+YWNtX21ldGhvZCAhPSBlQWNtV2F5Ml9TVykKIAkJCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywKQEAgLTUyNiw5ICs0ODgsNiBAQAogCWNhc2UgSFdfVkFSX0NPUlJFQ1RfVFNGOnsKIAkJCXU4IGJ0eXBlX2lic3MgPSAoKHU4ICopICh2YWwpKVswXTsKIAotCQkJLypidHlwZV9pYnNzID0gKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSA/Ci0JCQkJCTEgOiAwOyovCi0KIAkJCWlmIChidHlwZV9pYnNzID09IHRydWUpCiAJCQkJX3J0bDkyY2Vfc3RvcF90eF9iZWFjb24oaHcpOwogCkBAIC01MzcsNyArNDk2LDcgQEAKIAkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfVFNGVFIsCiAJCQkJCSh1MzIpIChtYWMtPnRzZiAmIDB4ZmZmZmZmZmYpKTsKIAkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfVFNGVFIgKyA0LAotCQkJCQkodTMyKSAoKG1hYy0+dHNmID4+IDMyKSYweGZmZmZmZmZmKSk7CisJCQkJCSh1MzIpICgobWFjLT50c2YgPj4gMzIpICYgMHhmZmZmZmZmZikpOwogCiAJCQlfcnRsOTJjZV9zZXRfYmNuX2N0cmxfcmVnKGh3LCBCSVQoMyksIDApOwogCkBAIC01NDcsMTUgKzUwNiw2IEBACiAJCQlicmVhazsKIAogCQl9Ci0JY2FzZSBIV19WQVJfTUdUX0ZJTFRFUjoKLQkJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgUkVHX1JYRkxUTUFQMCwgKih1MTYgKikgdmFsKTsKLQkJYnJlYWs7Ci0JY2FzZSBIV19WQVJfQ1RSTF9GSUxURVI6Ci0JCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19SWEZMVE1BUDEsICoodTE2ICopIHZhbCk7Ci0JCWJyZWFrOwotCWNhc2UgSFdfVkFSX0RBVEFfRklMVEVSOgotCQlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfUlhGTFRNQVAyLCAqKHUxNiAqKSB2YWwpOwotCQlicmVhazsKIAlkZWZhdWx0OgogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLCAoInN3aXRjaCBjYXNlICIKIAkJCQkJCQkibm90IHByb2Nlc3NcbiIpKTsKQEAgLTY3OSwxMiArNjI5LDEyIEBACiAJCXJ0bDkyY2Vfc3dfbGVkX29uKGh3LCBwTGVkMCk7CiAJZWxzZQogCQlydGw5MmNlX3N3X2xlZF9vZmYoaHcsIHBMZWQwKTsKLQogfQogCiBzdGF0aWMgYm9vbCBfcnRsOTJjZV9pbml0X21hYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wY2lfcHJpdiAqcnRscGNpcHJpdiA9IHJ0bF9wY2lwcml2KGh3KTsKIAlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOwogCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CiAKQEAgLTY5Myw5ICs2NDMsMjIgQEAKIAl1MTYgcmV0cnk7CiAKIAlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfUlNWX0NUUkwsIDB4MDApOworCWlmIChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2NvZXhpc3RlbmNlKSB7CisJCXUzMiB2YWx1ZTMyOworCQl2YWx1ZTMyID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgUkVHX0FQU19GU01DTyk7CisJCXZhbHVlMzIgfD0gKFNPUF9BQkcgfCBTT1BfQU1CIHwgWE9QX0JUQ0spOworCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0FQU19GU01DTywgdmFsdWUzMik7CisJfQogCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TUFMwX0NUUkwsIDB4MmIpOwogCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BRkVfWFRBTF9DVFJMLCAweDBGKTsKIAorCWlmIChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2NvZXhpc3RlbmNlKSB7CisJCXUzMiB1NGJfdG1wID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgUkVHX0FGRV9YVEFMX0NUUkwpOworCisJCXU0Yl90bXAgJj0gKH4weDAwMDI0ODAwKTsKKwkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19BRkVfWFRBTF9DVFJMLCB1NGJfdG1wKTsKKwl9CisKIAlieXRldG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfQVBTX0ZTTUNPICsgMSkgfCBCSVQoMCk7CiAJdWRlbGF5KDIpOwogCkBAIC03MjYsMTAgKzY4OSwxNSBAQAogCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TWVNfSVNPX0NUUkwgKyAxLCAweDgyKTsKIAl1ZGVsYXkoMik7CiAKKwlpZiAocnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9jb2V4aXN0ZW5jZSkgeworCQlieXRldG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfQUZFX1hUQUxfQ1RSTCsyKSAmIDB4ZmQ7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BRkVfWFRBTF9DVFJMKzIsIGJ5dGV0bXApOworCX0KKwogCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19DUiwgMHgyZmYpOwogCiAJaWYgKF9ydGw5MmNlX2xsdF90YWJsZV9pbml0KGh3KSA9PSBmYWxzZSkKLQkJcmV0dXJuIGZhbHNlOzsKKwkJcmV0dXJuIGZhbHNlOwogCiAJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19ISVNSLCAweGZmZmZmZmZmKTsKIAlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfSElTUkUsIDB4ZmYpOwpAQCAtNzg2LDEzICs3NTQsMTQgQEAKIAogCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfTUNVVFNUXzEsIDB4MCk7CiAKLQlyZXR1cm4gdHJ1ZTs7CisJcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyB2b2lkIF9ydGw5MmNlX2h3X2NvbmZpZ3VyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOwogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpydGxwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOwogCXU4IHJlZ19id19vcG1vZGU7CiAJdTMyIHJlZ19yYXRyLCByZWdfcHJzcjsKIApAQCAtODI0LDcgKzc5MywxMSBAQAogCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfUkFSRlJDLCAweDAxMDAwMDAwKTsKIAlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX1JBUkZSQyArIDQsIDB4MDcwNjA1MDQpOwogCi0JcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19BR0dMRU5fTE1ULCAweGI5NzJhODQxKTsKKwlpZiAoKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfY29leGlzdGVuY2UpICYmCisJICAgIChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2NvZXhpc3RfdHlwZSA9PSBCVF9DU1JfQkM0KSkKKwkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19BR0dMRU5fTE1ULCAweDk3NDI3NDMxKTsKKwllbHNlCisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfQUdHTEVOX0xNVCwgMHhiOTcyYTg0MSk7CiAKIAlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQVRJTVdORCwgMHgyKTsKIApAQCAtODQwLDExICs4MTMsMjAgQEAKIAlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfUElGUywgMHgxQyk7CiAJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0FHR1JfQlJFQUtfVElNRSwgMHgxNik7CiAKLQlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfTkFWX1BST1RfTEVOLCAweDAwMjApOworCWlmICgocnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9jb2V4aXN0ZW5jZSkgJiYKKwkgICAgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfY29leGlzdF90eXBlID09IEJUX0NTUl9CQzQpKSB7CisJCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19OQVZfUFJPVF9MRU4sIDB4MDAyMCk7CisJCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19QUk9UX01PREVfQ1RSTCwgMHgwNDAyKTsKKwl9IGVsc2UgeworCQlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfTkFWX1BST1RfTEVOLCAweDAwMjApOworCQlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfTkFWX1BST1RfTEVOLCAweDAwMjApOworCX0KIAotCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19OQVZfUFJPVF9MRU4sIDB4MDAyMCk7Ci0KLQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0ZBU1RfRURDQV9DVFJMLCAweDA4NjY2Nik7CisJaWYgKChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2NvZXhpc3RlbmNlKSAmJgorCSAgICAgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfY29leGlzdF90eXBlID09IEJUX0NTUl9CQzQpKQorCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0ZBU1RfRURDQV9DVFJMLCAweDAzMDg2NjY2KTsKKwllbHNlCisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfRkFTVF9FRENBX0NUUkwsIDB4MDg2NjY2KTsKIAogCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BQ0tUTywgMHg0MCk7CiAKQEAgLTk0OCw4ICs5MzAsOCBAQAogCX0KIAogCXJ0bGhhbC0+bGFzdF9obWVib3hudW0gPSAwOwotCXJ0bDkyY2VfcGh5X21hY19jb25maWcoaHcpOwotCXJ0bDkyY2VfcGh5X2JiX2NvbmZpZyhodyk7CisJcnRsOTJjX3BoeV9tYWNfY29uZmlnKGh3KTsKKwlydGw5MmNfcGh5X2JiX2NvbmZpZyhodyk7CiAJcnRscGh5LT5yZl9tb2RlID0gUkZfT1BfQllfU1dfM1dJUkU7CiAJcnRsOTJjX3BoeV9yZl9jb25maWcoaHcpOwogCXJ0bHBoeS0+cmZyZWdfY2hubHZhbFswXSA9IHJ0bF9nZXRfcmZyZWcoaHcsIChlbnVtIHJhZGlvX3BhdGgpMCwKQEAgLTk2MiwxNSArOTQ0LDIwIEBACiAJX3J0bDkyY2VfaHdfY29uZmlndXJlKGh3KTsKIAlydGxfY2FtX3Jlc2V0X2FsbF9lbnRyeShodyk7CiAJcnRsOTJjZV9lbmFibGVfaHdfc2VjdXJpdHlfY29uZmlnKGh3KTsKKwogCXBwc2MtPnJmcHdyX3N0YXRlID0gRVJGT047CisKIAlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywgSFdfVkFSX0VUSEVSX0FERFIsIG1hYy0+bWFjX2FkZHIpOwogCV9ydGw5MmNlX2VuYWJsZV9hc3BtX2JhY2tfZG9vcihodyk7CiAJcnRscHJpdi0+aW50Zl9vcHMtPmVuYWJsZV9hc3BtKGh3KTsKKworCXJ0bDgxOTJjZV9idF9od19pbml0KGh3KTsKKwogCWlmIChwcHNjLT5yZnB3cl9zdGF0ZSA9PSBFUkZPTikgewogCQlydGw5MmNfcGh5X3NldF9yZnBhdGhfc3dpdGNoKGh3LCAxKTsKLQkJaWYgKGlxa19pbml0aWFsaXplZCkKKwkJaWYgKGlxa19pbml0aWFsaXplZCkgewogCQkJcnRsOTJjX3BoeV9pcV9jYWxpYnJhdGUoaHcsIHRydWUpOwotCQllbHNlIHsKKwkJfSBlbHNlIHsKIAkJCXJ0bDkyY19waHlfaXFfY2FsaWJyYXRlKGh3LCBmYWxzZSk7CiAJCQlpcWtfaW5pdGlhbGl6ZWQgPSB0cnVlOwogCQl9CkBAIC0xMTI4LDc1ICsxMTE1LDYyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9ydGw5MmNlX3NldF9jaGVja19ic3NpZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgIGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSkKK3ZvaWQgcnRsOTJjZV9zZXRfY2hlY2tfYnNzaWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgY2hlY2tfYnNzaWQpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXUzMiByZWdfcmNyID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgUkVHX1JDUik7Ci0JdTggZmlsdGVyb3V0X25vbl9hc3NvY2lhdGVkX2Jzc2lkID0gZmFsc2U7CiAKLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgotCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQkJZmlsdGVyb3V0X25vbl9hc3NvY2lhdGVkX2Jzc2lkID0gdHJ1ZTsKLQkJYnJlYWs7Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRDoKLQljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KKwlpZiAocnRscHJpdi0+cHNjLnJmcHdyX3N0YXRlICE9IEVSRk9OKQorCQlyZXR1cm47CiAKLQlpZiAoZmlsdGVyb3V0X25vbl9hc3NvY2lhdGVkX2Jzc2lkID09IHRydWUpIHsKKwlpZiAoY2hlY2tfYnNzaWQgPT0gdHJ1ZSkgewogCQlyZWdfcmNyIHw9IChSQ1JfQ0JTU0lEX0RBVEEgfCBSQ1JfQ0JTU0lEX0JDTik7CiAJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfUkNSLAogCQkJCQkgICAgICAodTggKikgKCZyZWdfcmNyKSk7CiAJCV9ydGw5MmNlX3NldF9iY25fY3RybF9yZWcoaHcsIDAsIEJJVCg0KSk7Ci0JfSBlbHNlIGlmIChmaWx0ZXJvdXRfbm9uX2Fzc29jaWF0ZWRfYnNzaWQgPT0gZmFsc2UpIHsKKwl9IGVsc2UgaWYgKGNoZWNrX2Jzc2lkID09IGZhbHNlKSB7CiAJCXJlZ19yY3IgJj0gKH4oUkNSX0NCU1NJRF9EQVRBIHwgUkNSX0NCU1NJRF9CQ04pKTsKIAkJX3J0bDkyY2Vfc2V0X2Jjbl9jdHJsX3JlZyhodywgQklUKDQpLCAwKTsKIAkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsCiAJCQkJCSAgICAgIEhXX1ZBUl9SQ1IsICh1OCAqKSAoJnJlZ19yY3IpKTsKIAl9CisKIH0KIAogaW50IHJ0bDkyY2Vfc2V0X25ldHdvcmtfdHlwZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBubDgwMjExX2lmdHlwZSB0eXBlKQogeworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwogCWlmIChfcnRsOTJjZV9zZXRfbWVkaWFfc3RhdHVzKGh3LCB0eXBlKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCV9ydGw5MmNlX3NldF9jaGVja19ic3NpZChodywgdHlwZSk7CisKKwlpZiAocnRscHJpdi0+bWFjODAyMTEubGlua19zdGF0ZSA9PSBNQUM4MDIxMV9MSU5LRUQpIHsKKwkJaWYgKHR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApCisJCQlydGw5MmNlX3NldF9jaGVja19ic3NpZChodywgdHJ1ZSk7CisJfSBlbHNlIHsKKwkJcnRsOTJjZV9zZXRfY2hlY2tfYnNzaWQoaHcsIGZhbHNlKTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIAorLyogZG9uJ3Qgc2V0IFJFR19FRENBX0JFX1BBUkFNIGhlcmUgYmVjYXVzZSBtYWM4MDIxMSB3aWxsIHNlbmQgcGt0IHdoZW4gc2NhbiAqLwogdm9pZCBydGw5MmNlX3NldF9xb3Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBhY2kpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwotCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7Ci0JdTMyIHU0Yl9hY19wYXJhbTsKLQl1MTYgY3dfbWluID0gbGUxNl90b19jcHUobWFjLT5hY1thY2ldLmN3X21pbik7Ci0JdTE2IGN3X21heCA9IGxlMTZfdG9fY3B1KG1hYy0+YWNbYWNpXS5jd19tYXgpOwotCXUxNiB0eF9vcCA9IGxlMTZfdG9fY3B1KG1hYy0+YWNbYWNpXS50eF9vcCk7Ci0KIAlydGw5MmNfZG1faW5pdF9lZGNhX3R1cmJvKGh3KTsKLQl1NGJfYWNfcGFyYW0gPSAodTMyKSBtYWMtPmFjW2FjaV0uYWlmczsKLQl1NGJfYWNfcGFyYW0gfD0gKHUzMikgKChjd19taW4gJiAweEYpIDw8IEFDX1BBUkFNX0VDV19NSU5fT0ZGU0VUKTsKLQl1NGJfYWNfcGFyYW0gfD0gKHUzMikgKChjd19tYXggJiAweEYpIDw8IEFDX1BBUkFNX0VDV19NQVhfT0ZGU0VUKTsKLQl1NGJfYWNfcGFyYW0gfD0gKHUzMikgKHR4X29wIDw8IEFDX1BBUkFNX1RYT1BfT0ZGU0VUKTsKLQlSVF9UUkFDRShydGxwcml2LCBDT01QX1FPUywgREJHX0RNRVNHLAotCQkgKCJxdWV1ZToleCwgYWNfcGFyYW06JXggYWlmczoleCBjd21pbjoleCBjd21heDoleCB0eG9wOiV4XG4iLAotCQkgIGFjaSwgdTRiX2FjX3BhcmFtLCBtYWMtPmFjW2FjaV0uYWlmcywgY3dfbWluLAotCQkgIGN3X21heCwgdHhfb3ApKTsKIAlzd2l0Y2ggKGFjaSkgewogCWNhc2UgQUMxX0JLOgotCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0VEQ0FfQktfUEFSQU0sIHU0Yl9hY19wYXJhbSk7CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfRURDQV9CS19QQVJBTSwgMHhhNDRmKTsKIAkJYnJlYWs7CiAJY2FzZSBBQzBfQkU6Ci0JCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfRURDQV9CRV9QQVJBTSwgdTRiX2FjX3BhcmFtKTsKKwkJLyogcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19FRENBX0JFX1BBUkFNLCB1NGJfYWNfcGFyYW0pOyAqLwogCQlicmVhazsKIAljYXNlIEFDMl9WSToKLQkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19FRENBX1ZJX1BBUkFNLCB1NGJfYWNfcGFyYW0pOworCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0VEQ0FfVklfUEFSQU0sIDB4NWU0MzIyKTsKIAkJYnJlYWs7CiAJY2FzZSBBQzNfVk86Ci0JCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfRURDQV9WT19QQVJBTSwgdTRiX2FjX3BhcmFtKTsKKwkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19FRENBX1ZPX1BBUkFNLCAweDJmMzIyMik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCVJUX0FTU0VSVChmYWxzZSwgKCJpbnZhbGlkIGFjaTogJWQgIVxuIiwgYWNpKSk7CkBAIC0xMjI3LDggKzEyMDEsMTAgQEAKIHN0YXRpYyB2b2lkIF9ydGw5MmNlX3Bvd2Vyb2ZmX2FkYXB0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpX3ByaXYgKnJ0bHBjaXByaXYgPSBydGxfcGNpcHJpdihodyk7CiAJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKIAl1OCB1MWJfdG1wOworCXUzMiB1NGJfdG1wOwogCiAJcnRscHJpdi0+aW50Zl9vcHMtPmVuYWJsZV9hc3BtKGh3KTsKIAlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfVFhQQVVTRSwgMHhGRik7CkBAIC0xMjQzLDEzICsxMjE5LDI3IEBACiAJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX01DVUZXREwsIDB4MDApOwogCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfR1BJT19QSU5fQ1RSTCwgMHgwMDAwMDAwMCk7CiAJdTFiX3RtcCA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUkVHX0dQSU9fUElOX0NUUkwpOwotCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfR1BJT19QSU5fQ1RSTCwgMHgwMEZGMDAwMCB8Ci0JCQkodTFiX3RtcCA8PCA4KSk7CisJaWYgKChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2NvZXhpc3RlbmNlKSAmJgorCSAgICAgKChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2NvZXhpc3RfdHlwZSA9PSBCVF9DU1JfQkM0KSB8fAorCSAgICAgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfY29leGlzdF90eXBlID09IEJUX0NTUl9CQzgpKSkgeworCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0dQSU9fUElOX0NUUkwsIDB4MDBGMzAwMDAgfAorCQkJCSh1MWJfdG1wIDw8IDgpKTsKKwl9IGVsc2UgeworCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0dQSU9fUElOX0NUUkwsIDB4MDBGRjAwMDAgfAorCQkJCSh1MWJfdG1wIDw8IDgpKTsKKwl9CiAJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgUkVHX0dQSU9fSU9fU0VMLCAweDA3OTApOwogCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19MRURDRkcwLCAweDgwODApOwogCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BRkVfUExMX0NUUkwsIDB4ODApOwogCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TUFMwX0NUUkwsIDB4MjMpOwotCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BRkVfWFRBTF9DVFJMLCAweDBlKTsKKwlpZiAocnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9jb2V4aXN0ZW5jZSkgeworCQl1NGJfdG1wID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgUkVHX0FGRV9YVEFMX0NUUkwpOworCQl1NGJfdG1wIHw9IDB4MDM4MjQ4MDA7CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfQUZFX1hUQUxfQ1RSTCwgdTRiX3RtcCk7CisJfSBlbHNlIHsKKwkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19BRkVfWFRBTF9DVFJMLCAweDBlKTsKKwl9CisKIAlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfUlNWX0NUUkwsIDB4MGUpOwogCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BUFNfRlNNQ08gKyAxLCAweDEwKTsKIH0KQEAgLTEzMjcsNiArMTMxNyw3IEBACiAKIAlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOVFIsIERCR19MT1VELAogCQkgKCJhZGRfbXNyOiV4LCBybV9tc3I6JXhcbiIsIGFkZF9tc3IsIHJtX21zcikpOworCiAJaWYgKGFkZF9tc3IpCiAJCXJ0bHBjaS0+aXJxX21hc2tbMF0gfD0gYWRkX21zcjsKIAlpZiAocm1fbXNyKQpAQCAtMTU4Miw3ICsxNTczLDcgQEAKIAkJCSAoIlJUTDgxOVggTm90IGJvb3QgZnJvbSBlZXByb20sIGNoZWNrIGl0ICEhIikpOwogCX0KIAotCVJUX1BSSU5UX0RBVEEocnRscHJpdiwgQ09NUF9JTklULCBEQkdfTE9VRCwgKCJNQVBcbiIpLAorCVJUX1BSSU5UX0RBVEEocnRscHJpdiwgQ09NUF9JTklULCBEQkdfRE1FU0csICgiTUFQXG4iKSwKIAkJICAgICAgaHdpbmZvLCBIV1NFVF9NQVhfU0laRSk7CiAKIAllZXByb21faWQgPSAqKCh1MTYgKikmaHdpbmZvWzBdKTsKQEAgLTE2MTAsNiArMTYwMSwxMCBAQAogCQkJCQkgICAgIHJ0bGVmdXNlLT5hdXRvbG9hZF9mYWlsZmxhZywKIAkJCQkJICAgICBod2luZm8pOwogCisJcnRsODE5MmNlX3JlYWRfYnRfY29leGlzdF9pbmZvX2Zyb21faHdwZyhodywKKwkJCQkJCSBydGxlZnVzZS0+YXV0b2xvYWRfZmFpbGZsYWcsCisJCQkJCQkgaHdpbmZvKTsKKwogCXJ0bGVmdXNlLT5lZXByb21fY2hhbm5lbHBsYW4gPSAqKHU4ICopJmh3aW5mb1tFRVBST01fQ0hBTk5FTFBMQU5dOwogCXJ0bGVmdXNlLT5lZXByb21fdmVyc2lvbiA9ICoodTE2ICopJmh3aW5mb1tFRVBST01fVkVSU0lPTl07CiAJcnRsZWZ1c2UtPnR4cHdyX2Zyb21lcHJvbSA9IHRydWU7CkBAIC0xNjE4LDYgKzE2MTMsOSBAQAogCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0xPVUQsCiAJCSAoIkVFUFJPTSBDdXN0b21lciBJRDogMHglMnhcbiIsIHJ0bGVmdXNlLT5lZXByb21fb2VtaWQpKTsKIAorCS8qIHNldCBjaGFubmVsIHBhbG4gdG8gd29ybGQgd2lkZSAxMyAqLworCXJ0bGVmdXNlLT5jaGFubmVsX3BsYW4gPSBDT1VOVFJZX0NPREVfV09STERfV0lERV8xMzsKKwogCWlmIChydGxoYWwtPm9lbV9pZCA9PSBSVF9DSURfREVGQVVMVCkgewogCQlzd2l0Y2ggKHJ0bGVmdXNlLT5lZXByb21fb2VtaWQpIHsKIAkJY2FzZSBFRVBST01fQ0lEX0RFRkFVTFQ6CkBAIC0xNzAxLDMwICsxNjk5LDM2IEBACiAJfSBlbHNlIHsKIAkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywgKCJBdXRvbG9hZCBFUlIhIVxuIikpOwogCX0KLQogCV9ydGw5MmNlX2hhbF9jdXN0b21pemVkX2JlaGF2aW9yKGh3KTsKIH0KIAotdm9pZCBydGw5MmNlX3VwZGF0ZV9oYWxfcmF0ZV90YWJsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3N0YXRpYyB2b2lkIHJ0bDkyY2VfdXBkYXRlX2hhbF9yYXRlX3RhYmxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpydGxwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOwogCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CiAJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKLQotCXUzMiByYXRyX3ZhbHVlID0gKHUzMikgbWFjLT5iYXNpY19yYXRlczsKLQl1OCAqbWNzcmF0ZSA9IG1hYy0+bWNzOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJdTMyIHJhdHJfdmFsdWU7CiAJdTggcmF0cl9pbmRleCA9IDA7CiAJdTggbm1vZGUgPSBtYWMtPmh0X2VuYWJsZTsKLQl1OCBtaW1vX3BzID0gMTsKKwl1OCBtaW1vX3BzID0gSUVFRTgwMjExX1NNUFNfT0ZGOwogCXUxNiBzaG9ydGdpX3JhdGU7CiAJdTMyIHRtcF9yYXRyX3ZhbHVlOwogCXU4IGN1cnR4YndfNDBtaHogPSBtYWMtPmJ3XzQwOwotCXU4IGN1cnNob3J0Z2lfNDBtaHogPSBtYWMtPnNnaV80MDsKLQl1OCBjdXJzaG9ydGdpXzIwbWh6ID0gbWFjLT5zZ2lfMjA7CisJdTggY3Vyc2hvcnRnaV80MG1oeiA9IChzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NHSV80MCkgPworCQkJICAgICAgIDEgOiAwOworCXU4IGN1cnNob3J0Z2lfMjBtaHogPSAoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TR0lfMjApID8KKwkJCSAgICAgICAxIDogMDsKIAllbnVtIHdpcmVsZXNzX21vZGUgd2lyZWxlc3Ntb2RlID0gbWFjLT5tb2RlOwogCi0JcmF0cl92YWx1ZSB8PSAoKCoodTE2ICopIChtY3NyYXRlKSkpIDw8IDEyOwotCisJaWYgKHJ0bGhhbC0+Y3VycmVudF9iYW5kdHlwZSA9PSBCQU5EX09OXzVHKQorCQlyYXRyX3ZhbHVlID0gc3RhLT5zdXBwX3JhdGVzWzFdIDw8IDQ7CisJZWxzZQorCQlyYXRyX3ZhbHVlID0gc3RhLT5zdXBwX3JhdGVzWzBdOworCXJhdHJfdmFsdWUgfD0gKHN0YS0+aHRfY2FwLm1jcy5yeF9tYXNrWzFdIDw8IDIwIHwKKwkJCXN0YS0+aHRfY2FwLm1jcy5yeF9tYXNrWzBdIDw8IDEyKTsKIAlzd2l0Y2ggKHdpcmVsZXNzbW9kZSkgewogCWNhc2UgV0lSRUxFU1NfTU9ERV9COgogCQlpZiAocmF0cl92YWx1ZSAmIDB4MDAwMDAwMGMpCkBAIC0xNzM4LDcgKzE3NDIsNyBAQAogCWNhc2UgV0lSRUxFU1NfTU9ERV9OXzI0RzoKIAljYXNlIFdJUkVMRVNTX01PREVfTl81RzoKIAkJbm1vZGUgPSAxOwotCQlpZiAobWltb19wcyA9PSAwKSB7CisJCWlmIChtaW1vX3BzID09IElFRUU4MDIxMV9TTVBTX1NUQVRJQykgewogCQkJcmF0cl92YWx1ZSAmPSAweDAwMDdGMDA1OwogCQl9IGVsc2UgewogCQkJdTMyIHJhdHJfbWFzazsKQEAgLTE3NjEsMTAgKzE3NjUsMTkgQEAKIAkJYnJlYWs7CiAJfQogCi0JcmF0cl92YWx1ZSAmPSAweDBGRkZGRkZGOworCWlmICgocnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9jb2V4aXN0ZW5jZSkgJiYKKwkgICAgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfY29leGlzdF90eXBlID09IEJUX0NTUl9CQzQpICYmCisJICAgIChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2N1cl9zdGF0ZSkgJiYKKwkgICAgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfYW50X2lzb2xhdGlvbikgJiYKKwkgICAgKChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X3NlcnZpY2UgPT0gQlRfU0NPKSB8fAorCSAgICAocnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9zZXJ2aWNlID09IEJUX0JVU1kpKSkKKwkJcmF0cl92YWx1ZSAmPSAweDBmZmZjZmMwOworCWVsc2UKKwkJcmF0cl92YWx1ZSAmPSAweDBGRkZGRkZGOwogCi0JaWYgKG5tb2RlICYmICgoY3VydHhid180MG1oeiAmJiBjdXJzaG9ydGdpXzQwbWh6KSB8fCAoIWN1cnR4YndfNDBtaHogJiYKLQkJICAgICAgIGN1cnNob3J0Z2lfMjBtaHopKSkgeworCWlmIChubW9kZSAmJiAoKGN1cnR4YndfNDBtaHogJiYKKwkJCSBjdXJzaG9ydGdpXzQwbWh6KSB8fCAoIWN1cnR4YndfNDBtaHogJiYKKwkJCQkJICAgICAgIGN1cnNob3J0Z2lfMjBtaHopKSkgewogCiAJCXJhdHJfdmFsdWUgfD0gMHgxMDAwMDAwMDsKIAkJdG1wX3JhdHJfdmFsdWUgPSAocmF0cl92YWx1ZSA+PiAxMik7CkBAIC0xNzg0LDI0ICsxNzk3LDQyIEBACiAJCSAoIiV4XG4iLCBydGxfcmVhZF9kd29yZChydGxwcml2LCBSRUdfQVJGUjApKSk7CiB9CiAKLXZvaWQgcnRsOTJjZV91cGRhdGVfaGFsX3JhdGVfbWFzayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggcnNzaV9sZXZlbCkKK3N0YXRpYyB2b2lkIHJ0bDkyY2VfdXBkYXRlX2hhbF9yYXRlX21hc2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHU4IHJzc2lfbGV2ZWwpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CiAJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKLQl1MzIgcmF0cl9iaXRtYXAgPSAodTMyKSBtYWMtPmJhc2ljX3JhdGVzOwotCXU4ICpwX21jc3JhdGUgPSBtYWMtPm1jczsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfc3RhX2luZm8gKnN0YV9lbnRyeSA9IE5VTEw7CisJdTMyIHJhdHJfYml0bWFwOwogCXU4IHJhdHJfaW5kZXg7Ci0JdTggY3VydHhid180MG1oeiA9IG1hYy0+YndfNDA7Ci0JdTggY3Vyc2hvcnRnaV80MG1oeiA9IG1hYy0+c2dpXzQwOwotCXU4IGN1cnNob3J0Z2lfMjBtaHogPSBtYWMtPnNnaV8yMDsKLQllbnVtIHdpcmVsZXNzX21vZGUgd2lyZWxlc3Ntb2RlID0gbWFjLT5tb2RlOworCXU4IGN1cnR4YndfNDBtaHogPSAoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDApCisJCQkJPyAxIDogMDsKKwl1OCBjdXJzaG9ydGdpXzQwbWh6ID0gKHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU0dJXzQwKSA/CisJCQkJMSA6IDA7CisJdTggY3Vyc2hvcnRnaV8yMG1oeiA9IChzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NHSV8yMCkgPworCQkJCTEgOiAwOworCWVudW0gd2lyZWxlc3NfbW9kZSB3aXJlbGVzc21vZGUgPSAwOwogCWJvb2wgc2hvcnRnaSA9IGZhbHNlOwogCXU4IHJhdGVfbWFza1s1XTsKIAl1OCBtYWNpZCA9IDA7Ci0JdTggbWltb3BzID0gMTsKKwl1OCBtaW1vX3BzID0gSUVFRTgwMjExX1NNUFNfT0ZGOwogCi0JcmF0cl9iaXRtYXAgfD0gKHBfbWNzcmF0ZVsxXSA8PCAyMCkgfCAocF9tY3NyYXRlWzBdIDw8IDEyKTsKKwlzdGFfZW50cnkgPSAoc3RydWN0IHJ0bF9zdGFfaW5mbyAqKSBzdGEtPmRydl9wcml2OworCXdpcmVsZXNzbW9kZSA9IHN0YV9lbnRyeS0+d2lyZWxlc3NfbW9kZTsKKwlpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJY3VydHhid180MG1oeiA9IG1hYy0+YndfNDA7CisJZWxzZSBpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkJbWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJCW1hY2lkID0gc3RhLT5haWQgKyAxOworCisJaWYgKHJ0bGhhbC0+Y3VycmVudF9iYW5kdHlwZSA9PSBCQU5EX09OXzVHKQorCQlyYXRyX2JpdG1hcCA9IHN0YS0+c3VwcF9yYXRlc1sxXSA8PCA0OworCWVsc2UKKwkJcmF0cl9iaXRtYXAgPSBzdGEtPnN1cHBfcmF0ZXNbMF07CisJcmF0cl9iaXRtYXAgfD0gKHN0YS0+aHRfY2FwLm1jcy5yeF9tYXNrWzFdIDw8IDIwIHwKKwkJCXN0YS0+aHRfY2FwLm1jcy5yeF9tYXNrWzBdIDw8IDEyKTsKIAlzd2l0Y2ggKHdpcmVsZXNzbW9kZSkgewogCWNhc2UgV0lSRUxFU1NfTU9ERV9COgogCQlyYXRyX2luZGV4ID0gUkFUUl9JTlhfV0lSRUxFU1NfQjsKQEAgLTE4MjgsNyArMTg1OSw3IEBACiAJY2FzZSBXSVJFTEVTU19NT0RFX05fNUc6CiAJCXJhdHJfaW5kZXggPSBSQVRSX0lOWF9XSVJFTEVTU19OR0I7CiAKLQkJaWYgKG1pbW9wcyA9PSAwKSB7CisJCWlmIChtaW1vX3BzID09IElFRUU4MDIxMV9TTVBTX1NUQVRJQykgewogCQkJaWYgKHJzc2lfbGV2ZWwgPT0gMSkKIAkJCQlyYXRyX2JpdG1hcCAmPSAweDAwMDcwMDAwOwogCQkJZWxzZSBpZiAocnNzaV9sZXZlbCA9PSAyKQpAQCAtMTg5Miw4ICsxOTIzLDggQEAKIAl9CiAJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9SQVRSLCBEQkdfRE1FU0csCiAJCSAoInJhdHJfYml0bWFwIDoleFxuIiwgcmF0cl9iaXRtYXApKTsKLQkqKHUzMiAqKSZyYXRlX21hc2sgPSAocmF0cl9iaXRtYXAgJiAweDBmZmZmZmZmKSB8Ci0JCQkJICAgICAgIChyYXRyX2luZGV4IDw8IDI4KTsKKwkqKHUzMiAqKSZyYXRlX21hc2sgPSBFRjRCWVRFKChyYXRyX2JpdG1hcCAmIDB4MGZmZmZmZmYpIHwKKwkJCQkgICAgIChyYXRyX2luZGV4IDw8IDI4KSk7CiAJcmF0ZV9tYXNrWzRdID0gbWFjaWQgfCAoc2hvcnRnaSA/IDB4MjAgOiAweDAwKSB8IDB4ODA7CiAJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9SQVRSLCBEQkdfRE1FU0csICgiUmF0ZV9pbmRleDoleCwgIgogCQkJCQkJICJyYXRyX3ZhbDoleCwgJXg6JXg6JXg6JXg6JXhcbiIsCkBAIC0xOTAyLDYgKzE5MzMsMjAgQEAKIAkJCQkJCSByYXRlX21hc2tbMl0sIHJhdGVfbWFza1szXSwKIAkJCQkJCSByYXRlX21hc2tbNF0pKTsKIAlydGw5MmNfZmlsbF9oMmNfY21kKGh3LCBIMkNfUkFfTUFTSywgNSwgcmF0ZV9tYXNrKTsKKworCWlmIChtYWNpZCAhPSAwKQorCQlzdGFfZW50cnktPnJhdHJfaW5kZXggPSByYXRyX2luZGV4OworfQorCit2b2lkIHJ0bDkyY2VfdXBkYXRlX2hhbF9yYXRlX3RibChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTggcnNzaV9sZXZlbCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwlpZiAocnRscHJpdi0+ZG0udXNlcmFtYXNrKQorCQlydGw5MmNlX3VwZGF0ZV9oYWxfcmF0ZV9tYXNrKGh3LCBzdGEsIHJzc2lfbGV2ZWwpOworCWVsc2UKKwkJcnRsOTJjZV91cGRhdGVfaGFsX3JhdGVfdGFibGUoaHcsIHN0YSk7CiB9CiAKIHZvaWQgcnRsOTJjZV91cGRhdGVfY2hhbm5lbF9hY2Nlc3Nfc2V0dGluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKQEAgLTE5MTksNyArMTk2NCw3IEBACiAJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9TSUZTLCAodTggKikmc2lmc190aW1lcik7CiB9CiAKLWJvb2wgcnRsOTJjZV9ncGlvX3JhZGlvX29uX29mZl9jaGVja2luZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKiB2YWxpZCkKK2Jvb2wgcnRsOTJjZV9ncGlvX3JhZGlvX29uX29mZl9jaGVja2luZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnZhbGlkKQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKQEAgLTE5MjksNyArMTk3NCw3IEBACiAJYm9vbCBhY3R1YWxseXNldCA9IGZhbHNlOwogCXVuc2lnbmVkIGxvbmcgZmxhZzsKIAotCWlmICgocnRscGNpLT51cF9maXJzdF90aW1lID09IDEpIHx8IChydGxwY2ktPmJlaW5nX2luaXRfYWRhcHRlcikpCisJaWYgKHJ0bHBjaS0+YmVpbmdfaW5pdF9hZGFwdGVyKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlpZiAocHBzYy0+c3dyZl9wcm9jZXNzaW5nKQpAQCAtMTk0NiwxMiArMTk5MSw2IEBACiAKIAljdXJfcmZzdGF0ZSA9IHBwc2MtPnJmcHdyX3N0YXRlOwogCi0JaWYgKChwcHNjLT5yZWdfcmZwc19sZXZlbCAmIFJUX1JGX09GRl9MRVZMX0FTUE0pICYmCi0JICAgIFJUX0lOX1BTX0xFVkVMKHBwc2MsIFJUX1JGX09GRl9MRVZMX0FTUE0pKSB7Ci0JCXJ0bHByaXYtPmludGZfb3BzLT5kaXNhYmxlX2FzcG0oaHcpOwotCQlSVF9DTEVBUl9QU19MRVZFTChwcHNjLCBSVF9SRl9PRkZfTEVWTF9BU1BNKTsKLQl9Ci0KIAlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfTUFDX1BJTk1VWF9DRkcsIHJ0bF9yZWFkX2J5dGUocnRscHJpdiwKIAkJICAgICAgIFJFR19NQUNfUElOTVVYX0NGRykmfihCSVQoMykpKTsKIApAQCAtMTk3NiwzOCArMjAxNSwxMyBAQAogCX0KIAogCWlmIChhY3R1YWxseXNldCkgewotCQlpZiAoZV9yZnBvd2Vyc3RhdGVfdG9zZXQgPT0gRVJGT04pIHsKLQkJCWlmICgocHBzYy0+cmVnX3JmcHNfbGV2ZWwgJiBSVF9SRl9PRkZfTEVWTF9BU1BNKSAmJgotCQkJICAgIFJUX0lOX1BTX0xFVkVMKHBwc2MsIFJUX1JGX09GRl9MRVZMX0FTUE0pKSB7Ci0JCQkJcnRscHJpdi0+aW50Zl9vcHMtPmRpc2FibGVfYXNwbShodyk7Ci0JCQkJUlRfQ0xFQVJfUFNfTEVWRUwocHBzYywgUlRfUkZfT0ZGX0xFVkxfQVNQTSk7Ci0JCQl9Ci0JCX0KLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcnRscHJpdi0+bG9ja3MucmZfcHNfbG9jaywgZmxhZyk7Ci0JCXBwc2MtPnJmY2hhbmdlX2lucHJvZ3Jlc3MgPSBmYWxzZTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRscHJpdi0+bG9ja3MucmZfcHNfbG9jaywgZmxhZyk7Ci0KLQkJaWYgKGVfcmZwb3dlcnN0YXRlX3Rvc2V0ID09IEVSRk9GRikgewotCQkJaWYgKHBwc2MtPnJlZ19yZnBzX2xldmVsICYgUlRfUkZfT0ZGX0xFVkxfQVNQTSkgewotCQkJCXJ0bHByaXYtPmludGZfb3BzLT5lbmFibGVfYXNwbShodyk7Ci0JCQkJUlRfU0VUX1BTX0xFVkVMKHBwc2MsIFJUX1JGX09GRl9MRVZMX0FTUE0pOwotCQkJfQotCQl9Ci0KLQl9IGVsc2UgaWYgKGVfcmZwb3dlcnN0YXRlX3Rvc2V0ID09IEVSRk9GRiB8fCBjdXJfcmZzdGF0ZSA9PSBFUkZPRkYpIHsKLQkJaWYgKHBwc2MtPnJlZ19yZnBzX2xldmVsICYgUlRfUkZfT0ZGX0xFVkxfSEFMVF9OSUMpCi0JCQlSVF9TRVRfUFNfTEVWRUwocHBzYywgUlRfUkZfT0ZGX0xFVkxfSEFMVF9OSUMpOwotCi0JCWlmIChwcHNjLT5yZWdfcmZwc19sZXZlbCAmIFJUX1JGX09GRl9MRVZMX0FTUE0pIHsKLQkJCXJ0bHByaXYtPmludGZfb3BzLT5lbmFibGVfYXNwbShodyk7Ci0JCQlSVF9TRVRfUFNfTEVWRUwocHBzYywgUlRfUkZfT0ZGX0xFVkxfQVNQTSk7Ci0JCX0KLQogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcnRscHJpdi0+bG9ja3MucmZfcHNfbG9jaywgZmxhZyk7CiAJCXBwc2MtPnJmY2hhbmdlX2lucHJvZ3Jlc3MgPSBmYWxzZTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRscHJpdi0+bG9ja3MucmZfcHNfbG9jaywgZmxhZyk7CiAJfSBlbHNlIHsKKwkJaWYgKHBwc2MtPnJlZ19yZnBzX2xldmVsICYgUlRfUkZfT0ZGX0xFVkxfSEFMVF9OSUMpCisJCQlSVF9TRVRfUFNfTEVWRUwocHBzYywgUlRfUkZfT0ZGX0xFVkxfSEFMVF9OSUMpOworCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZydGxwcml2LT5sb2Nrcy5yZl9wc19sb2NrLCBmbGFnKTsKIAkJcHBzYy0+cmZjaGFuZ2VfaW5wcm9ncmVzcyA9IGZhbHNlOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5yZl9wc19sb2NrLCBmbGFnKTsKQEAgLTIwODYsMTUgKzIxMDAsMzEgQEAKIAkJCQltYWNhZGRyID0gY2FtX2NvbnN0X2Jyb2FkOwogCQkJCWVudHJ5X2lkID0ga2V5X2luZGV4OwogCQkJfSBlbHNlIHsKKwkJCQlpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwkJCQkJZW50cnlfaWQgPSBydGxfY2FtX2dldF9mcmVlX2VudHJ5KGh3LAorCQkJCQkJCQkgcF9tYWNhZGRyKTsKKwkJCQkJaWYgKGVudHJ5X2lkID49ICBUT1RBTF9DQU1fRU5UUlkpIHsKKwkJCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLAorCQkJCQkJICAgICBEQkdfRU1FUkcsCisJCQkJCQkgICAgICgiQ2FuIG5vdCBmaW5kIGZyZWUgaHciCisJCQkJCQkgICAgICIgc2VjdXJpdHkgY2FtIGVudHJ5XG4iKSk7CisJCQkJCQlyZXR1cm47CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQllbnRyeV9pZCA9IENBTV9QQUlSV0lTRV9LRVlfUE9TSVRJT047CisJCQkJfQorCiAJCQkJa2V5X2luZGV4ID0gUEFJUldJU0VfS0VZSURYOwotCQkJCWVudHJ5X2lkID0gQ0FNX1BBSVJXSVNFX0tFWV9QT1NJVElPTjsKIAkJCQlpc19wYWlyd2lzZSA9IHRydWU7CiAJCQl9CiAJCX0KIAogCQlpZiAocnRscHJpdi0+c2VjLmtleV9sZW5ba2V5X2luZGV4XSA9PSAwKSB7CiAJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0RNRVNHLAotCQkJCSAoImRlbGV0ZSBvbmUgZW50cnlcbiIpKTsKKwkJCQkgKCJkZWxldGUgb25lIGVudHJ5LCBlbnRyeV9pZCBpcyAlZFxuIiwKKwkJCQkgZW50cnlfaWQpKTsKKwkJCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKKwkJCQlydGxfY2FtX2RlbF9lbnRyeShodywgcF9tYWNhZGRyKTsKIAkJCXJ0bF9jYW1fZGVsZXRlX29uZV9lbnRyeShodywgcF9tYWNhZGRyLCBlbnRyeV9pZCk7CiAJCX0gZWxzZSB7CiAJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0xPVUQsCkBAIC0yMTQ2LDMgKzIxNzYsMTMyIEBACiAJCX0KIAl9CiB9CisKK3N0YXRpYyB2b2lkIHJ0bDgxOTJjZV9idF92YXJfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpydGxwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOworCisJcnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9jb2V4aXN0ZW5jZSA9CisJCQlydGxwY2lwcml2LT5idF9jb2V4aXN0LmVlcHJvbV9idF9jb2V4aXN0OworCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfYW50X251bSA9CisJCQlydGxwY2lwcml2LT5idF9jb2V4aXN0LmVlcHJvbV9idF9hbnRfbnVtOworCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfY29leGlzdF90eXBlID0KKwkJCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuZWVwcm9tX2J0X3R5cGU7CisKKwlpZiAocnRscGNpcHJpdi0+YnRfY29leGlzdC5yZWdfYnRfaXNvID09IDIpCisJCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfYW50X2lzb2xhdGlvbiA9CisJCQlydGxwY2lwcml2LT5idF9jb2V4aXN0LmVlcHJvbV9idF9hbnRfaXNvbGF0aW9uOworCWVsc2UKKwkJcnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9hbnRfaXNvbGF0aW9uID0KKwkJCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QucmVnX2J0X2lzbzsKKworCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfcmFkaW9fc2hhcmVkX3R5cGUgPQorCQkJcnRscGNpcHJpdi0+YnRfY29leGlzdC5lZXByb21fYnRfcmFkaW9fc2hhcmVkOworCisJaWYgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfY29leGlzdGVuY2UpIHsKKworCQlpZiAocnRscGNpcHJpdi0+YnRfY29leGlzdC5yZWdfYnRfc2NvID09IDEpCisJCQlydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X3NlcnZpY2UgPSBCVF9PVEhFUl9BQ1RJT047CisJCWVsc2UgaWYgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QucmVnX2J0X3NjbyA9PSAyKQorCQkJcnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9zZXJ2aWNlID0gQlRfU0NPOworCQllbHNlIGlmIChydGxwY2lwcml2LT5idF9jb2V4aXN0LnJlZ19idF9zY28gPT0gNCkKKwkJCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfc2VydmljZSA9IEJUX0JVU1k7CisJCWVsc2UgaWYgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QucmVnX2J0X3NjbyA9PSA1KQorCQkJcnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9zZXJ2aWNlID0gQlRfT1RIRVJCVVNZOworCQllbHNlCisJCQlydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X3NlcnZpY2UgPSBCVF9JRExFOworCisJCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfZWRjYV91bCA9IDA7CisJCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfZWRjYV9kbCA9IDA7CisJCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfcnNzaV9zdGF0ZSA9IDB4ZmY7CisJfQorfQorCit2b2lkIHJ0bDgxOTJjZV9yZWFkX2J0X2NvZXhpc3RfaW5mb19mcm9tX2h3cGcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSAgICAgIGJvb2wgYXV0b19sb2FkX2ZhaWwsIHU4ICpod2luZm8pCit7CisJc3RydWN0IHJ0bF9wY2lfcHJpdiAqcnRscGNpcHJpdiA9IHJ0bF9wY2lwcml2KGh3KTsKKwl1OCB2YWx1ZTsKKworCWlmICghYXV0b19sb2FkX2ZhaWwpIHsKKwkJcnRscGNpcHJpdi0+YnRfY29leGlzdC5lZXByb21fYnRfY29leGlzdCA9CisJCQkJCSgoaHdpbmZvW1JGX09QVElPTjFdICYgMHhlMCkgPj4gNSk7CisJCXZhbHVlID0gaHdpbmZvW1JGX09QVElPTjRdOworCQlydGxwY2lwcml2LT5idF9jb2V4aXN0LmVlcHJvbV9idF90eXBlID0gKCh2YWx1ZSAmIDB4ZSkgPj4gMSk7CisJCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuZWVwcm9tX2J0X2FudF9udW0gPSAodmFsdWUgJiAweDEpOworCQlydGxwY2lwcml2LT5idF9jb2V4aXN0LmVlcHJvbV9idF9hbnRfaXNvbGF0aW9uID0KKwkJCQkJCQkgKCh2YWx1ZSAmIDB4MTApID4+IDQpOworCQlydGxwY2lwcml2LT5idF9jb2V4aXN0LmVlcHJvbV9idF9yYWRpb19zaGFyZWQgPQorCQkJCQkJCSAoKHZhbHVlICYgMHgyMCkgPj4gNSk7CisJfSBlbHNlIHsKKwkJcnRscGNpcHJpdi0+YnRfY29leGlzdC5lZXByb21fYnRfY29leGlzdCA9IDA7CisJCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuZWVwcm9tX2J0X3R5cGUgPSBCVF8yV0lSRTsKKwkJcnRscGNpcHJpdi0+YnRfY29leGlzdC5lZXByb21fYnRfYW50X251bSA9IEFOVF9YMjsKKwkJcnRscGNpcHJpdi0+YnRfY29leGlzdC5lZXByb21fYnRfYW50X2lzb2xhdGlvbiA9IDA7CisJCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuZWVwcm9tX2J0X3JhZGlvX3NoYXJlZCA9IEJUX1JBRElPX1NIQVJFRDsKKwl9CisKKwlydGw4MTkyY2VfYnRfdmFyX2luaXQoaHcpOworfQorCit2b2lkIHJ0bDgxOTJjZV9idF9yZWdfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpydGxwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOworCisJLyogMDpMb3csIDE6SGlnaCwgMjpGcm9tIEVmdXNlLiAqLworCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QucmVnX2J0X2lzbyA9IDI7CisJLyogMDpJZGxlLCAxOk5vbmUtU0NPLCAyOlNDTywgMzpGcm9tIENvdW50ZXIuICovCisJcnRscGNpcHJpdi0+YnRfY29leGlzdC5yZWdfYnRfc2NvID0gMzsKKwkvKiAwOkRpc2FibGUgQlQgY29udHJvbCBBLU1QRFUsIDE6RW5hYmxlIEJUIGNvbnRyb2wgQS1NUERVLiAqLworCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QucmVnX2J0X3NjbyA9IDA7Cit9CisKKwordm9pZCBydGw4MTkyY2VfYnRfaHdfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpydGxwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOworCisJdTggdTFfdG1wOworCisJaWYgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfY29leGlzdGVuY2UgJiYKKwkgICAgKChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2NvZXhpc3RfdHlwZSA9PSBCVF9DU1JfQkM0KSB8fAorCSAgICAgIHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfY29leGlzdF90eXBlID09IEJUX0NTUl9CQzgpKSB7CisKKwkJaWYgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfYW50X2lzb2xhdGlvbikKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19HUElPX01VWENGRywgMHhhMCk7CisKKwkJdTFfdG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCAweDRmZCkgJgorCQkJIEJJVF9PRkZTRVRfTEVOX01BU0tfMzIoMCwgMSk7CisJCXUxX3RtcCA9IHUxX3RtcCB8CisJCQkgKChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2FudF9pc29sYXRpb24gPT0gMSkgPworCQkJIDAgOiBCSVRfT0ZGU0VUX0xFTl9NQVNLXzMyKDEsIDEpKSB8CisJCQkgKChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X3NlcnZpY2UgPT0gQlRfU0NPKSA/CisJCQkgMCA6IEJJVF9PRkZTRVRfTEVOX01BU0tfMzIoMiwgMSkpOworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCAweDRmZCwgdTFfdG1wKTsKKworCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0JUX0NPRVhfVEFCTEUrNCwgMHhhYWFhOWFhYSk7CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfQlRfQ09FWF9UQUJMRSs4LCAweGZmYmQwMDQwKTsKKwkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19CVF9DT0VYX1RBQkxFKzB4YywgMHg0MDAwMDAxMCk7CisKKwkJLyogQ29uZmlnIHRvIDFUMVIuICovCisJCWlmIChydGxwaHktPnJmX3R5cGUgPT0gUkZfMVQxUikgeworCQkJdTFfdG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBST0ZETTBfVFJYUEFUSEVOQUJMRSk7CisJCQl1MV90bXAgJj0gfihCSVRfT0ZGU0VUX0xFTl9NQVNLXzMyKDEsIDEpKTsKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJPRkRNMF9UUlhQQVRIRU5BQkxFLCB1MV90bXApOworCisJCQl1MV90bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJPRkRNMV9UUlhQQVRIRU5BQkxFKTsKKwkJCXUxX3RtcCAmPSB+KEJJVF9PRkZTRVRfTEVOX01BU0tfMzIoMSwgMSkpOworCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUk9GRE0xX1RSWFBBVEhFTkFCTEUsIHUxX3RtcCk7CisJCX0KKwl9Cit9CisKK3ZvaWQgcnRsOTJjZV9zdXNwZW5kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworfQorCit2b2lkIHJ0bDkyY2VfcmVzdW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL2h3LmgKaW5kZXggYTNkZmRiNi4uMDdkYmUzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9ody5oCkBAIC0zMCw3ICszMCwxOCBAQAogI2lmbmRlZiBfX1JUTDkyQ0VfSFdfSF9fCiAjZGVmaW5lIF9fUlRMOTJDRV9IV19IX18KIAotI2RlZmluZSBIMkNfUkFfTUFTSwk2CitzdGF0aWMgaW5saW5lIHU4IF9ydGw5MmNfZ2V0X2NobmxfZ3JvdXAodTggY2hubCkKK3sKKwl1OCBncm91cDsKKworCWlmIChjaG5sIDwgMykKKwkJZ3JvdXAgPSAwOworCWVsc2UgaWYgKGNobmwgPCA5KQorCQlncm91cCA9IDE7CisJZWxzZQorCQlncm91cCA9IDI7CisJcmV0dXJuIGdyb3VwOworfQogCiB2b2lkIHJ0bDkyY2VfZ2V0X2h3X3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggdmFyaWFibGUsIHU4ICp2YWwpOwogdm9pZCBydGw5MmNlX3JlYWRfZWVwcm9tX2luZm8oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwpAQCAtNDEsMjggKzUyLDI3IEBACiB2b2lkIHJ0bDkyY2VfZW5hYmxlX2ludGVycnVwdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiB2b2lkIHJ0bDkyY2VfZGlzYWJsZV9pbnRlcnJ1cHQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogaW50IHJ0bDkyY2Vfc2V0X25ldHdvcmtfdHlwZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBubDgwMjExX2lmdHlwZSB0eXBlKTsKK3ZvaWQgcnRsOTJjZV9zZXRfY2hlY2tfYnNzaWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgY2hlY2tfYnNzaWQpOwogdm9pZCBydGw5MmNlX3NldF9xb3Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBhY2kpOwogdm9pZCBydGw5MmNlX3NldF9iZWFjb25fcmVsYXRlZF9yZWdpc3RlcnMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogdm9pZCBydGw5MmNlX3NldF9iZWFjb25faW50ZXJ2YWwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogdm9pZCBydGw5MmNlX3VwZGF0ZV9pbnRlcnJ1cHRfbWFzayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICB1MzIgYWRkX21zciwgdTMyIHJtX21zcik7CiB2b2lkIHJ0bDkyY2Vfc2V0X2h3X3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggdmFyaWFibGUsIHU4ICp2YWwpOwotdm9pZCBydGw5MmNlX3VwZGF0ZV9oYWxfcmF0ZV90YWJsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Ci12b2lkIHJ0bDkyY2VfdXBkYXRlX2hhbF9yYXRlX21hc2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHJzc2lfbGV2ZWwpOwordm9pZCBydGw5MmNlX3VwZGF0ZV9oYWxfcmF0ZV90Ymwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHU4IHJzc2lfbGV2ZWwpOwogdm9pZCBydGw5MmNlX3VwZGF0ZV9jaGFubmVsX2FjY2Vzc19zZXR0aW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIGJvb2wgcnRsOTJjZV9ncGlvX3JhZGlvX29uX29mZl9jaGVja2luZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnZhbGlkKTsKIHZvaWQgcnRsOTJjZV9lbmFibGVfaHdfc2VjdXJpdHlfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIHZvaWQgcnRsOTJjZV9zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIga2V5X2luZGV4LAogCQkgICAgIHU4ICpwX21hY2FkZHIsIGJvb2wgaXNfZ3JvdXAsIHU4IGVuY19hbGdvLAogCQkgICAgIGJvb2wgaXNfd2Vwa2V5LCBib29sIGNsZWFyX2FsbCk7Ci1ib29sIF9ydGw5MmNlX3BoeV9jb25maWdfbWFjX3dpdGhfaGVhZGVyZmlsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Ci12b2lkIHJ0bDkyY19zZXRfZndfcnN2ZHBhZ2Vwa3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgYl9kbF9maW5pc2hlZCk7Ci12b2lkIHJ0bDkyY19zZXRfZndfcHdybW9kZV9jbWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IG1vZGUpOwotdm9pZCBydGw5MmNfc2V0X2Z3X2pvaW5ic3NfcmVwb3J0X2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggbXN0YXR1cyk7Ci1pbnQgcnRsOTJjX2Rvd25sb2FkX2Z3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKLXZvaWQgcnRsOTJjX2Zpcm13YXJlX3NlbGZyZXNldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Ci12b2lkIHJ0bDkyY19maWxsX2gyY19jbWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgdTggZWxlbWVudF9pZCwgdTMyIGNtZF9sZW4sIHU4ICpwX2NtZGJ1ZmZlcik7Ci1ib29sIHJ0bDkyY2VfcGh5X21hY19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworCit2b2lkIHJ0bDgxOTJjZV9yZWFkX2J0X2NvZXhpc3RfaW5mb19mcm9tX2h3cGcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQlib29sIGF1dG9sb2FkX2ZhaWwsIHU4ICpod2luZm8pOwordm9pZCBydGw4MTkyY2VfYnRfcmVnX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw4MTkyY2VfYnRfaHdfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyY2Vfc3VzcGVuZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyY2VfcmVzdW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9sZWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL2xlZC5jCmluZGV4IDdiMWRhOGQuLjlkZDFlZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL2xlZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL2xlZC5jCkBAIC0zMiw2ICszMiwxNCBAQAogI2luY2x1ZGUgInJlZy5oIgogI2luY2x1ZGUgImxlZC5oIgogCitzdGF0aWMgdm9pZCBfcnRsOTJjZV9pbml0X2xlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgIHN0cnVjdCBydGxfbGVkICpwbGVkLCBlbnVtIHJ0bF9sZWRfcGluIGxlZHBpbikKK3sKKwlwbGVkLT5odyA9IGh3OworCXBsZWQtPmxlZHBpbiA9IGxlZHBpbjsKKwlwbGVkLT5sZWRvbiA9IGZhbHNlOworfQorCiB2b2lkIHJ0bDkyY2Vfc3dfbGVkX29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgcnRsX2xlZCAqcGxlZCkKIHsKIAl1OCBsZWRjZmc7CkBAIC05NywxMyArMTA1LDEyIEBACiAKIHZvaWQgcnRsOTJjZV9pbml0X3N3X2xlZHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CisJc3RydWN0IHJ0bF9wY2lfcHJpdiAqcGNpcHJpdiA9IHJ0bF9wY2lwcml2KGh3KTsKKwlfcnRsOTJjZV9pbml0X2xlZChodywgJihwY2lwcml2LT5sZWRjdGwuc3dfbGVkMCksIExFRF9QSU5fTEVEMCk7CisJX3J0bDkyY2VfaW5pdF9sZWQoaHcsICYocGNpcHJpdi0+bGVkY3RsLnN3X2xlZDEpLCBMRURfUElOX0xFRDEpOwogfQogCi12b2lkIHJ0bDkyY2VfZGVpbml0X3N3X2xlZHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCi17Ci19Ci0KLXZvaWQgX3J0bDkyY2Vfc3dfbGVkX2NvbnRyb2woc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCitzdGF0aWMgdm9pZCBfcnRsOTJjZV9zd19sZWRfY29udHJvbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICAgZW51bSBsZWRfY3RsX21vZGUgbGVkYWN0aW9uKQogewogCXN0cnVjdCBydGxfcGNpX3ByaXYgKnBjaXByaXYgPSBydGxfcGNpcHJpdihodyk7CkBAIC0xMzgsNyArMTQ1LDcgQEAKIAkgICAgIGxlZGFjdGlvbiA9PSBMRURfQ1RMX1BPV0VSX09OKSkgewogCQlyZXR1cm47CiAJfQotCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTEVELCBEQkdfTE9VRCwgKCJsZWRhY3Rpb24gJWQsXG4iLAorCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTEVELCBEQkdfTE9VRCwgKCJsZWRhY3Rpb24gJWQuXG4iLAogCQkJCWxlZGFjdGlvbikpOwogCV9ydGw5MmNlX3N3X2xlZF9jb250cm9sKGh3LCBsZWRhY3Rpb24pOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvbGVkLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9sZWQuaAppbmRleCAxMGRhMzAxLi43ZGZjY2VhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9sZWQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9sZWQuaApAQCAtMzEsMTEgKzMxLDggQEAKICNkZWZpbmUgX19SVEw5MkNFX0xFRF9IX18KIAogdm9pZCBydGw5MmNlX2luaXRfc3dfbGVkcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Ci12b2lkIHJ0bDkyY2VfZGVpbml0X3N3X2xlZHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogdm9pZCBydGw5MmNlX3N3X2xlZF9vbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHJ0bF9sZWQgKnBsZWQpOwogdm9pZCBydGw5MmNlX3N3X2xlZF9vZmYoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBydGxfbGVkICpwbGVkKTsKIHZvaWQgcnRsOTJjZV9sZWRfY29udHJvbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBsZWRfY3RsX21vZGUgbGVkYWN0aW9uKTsKLXZvaWQgX3J0bDkyY2Vfc3dfbGVkX2NvbnRyb2woc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgIGVudW0gbGVkX2N0bF9tb2RlIGxlZGFjdGlvbik7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvcGh5LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9waHkuYwppbmRleCBkMDU0MWU4Li43M2FlOGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9waHkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9waHkuYwpAQCAtMzgsNyArMzgsOSBAQAogI2luY2x1ZGUgImRtLmgiCiAjaW5jbHVkZSAidGFibGUuaCIKIAotdTMyIHJ0bDkyY2VfcGh5X3F1ZXJ5X3JmX3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKK3N0YXRpYyBib29sIF9ydGw5MmNfcGh5X2NvbmZpZ19tYWNfd2l0aF9oZWFkZXJmaWxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwordTMyIHJ0bDkyY19waHlfcXVlcnlfcmZfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJICAgIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsIHUzMiByZWdhZGRyLCB1MzIgYml0bWFzaykKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CkBAIC03Myw5ICs3NSw0NyBAQAogCXJldHVybiByZWFkYmFja192YWx1ZTsKIH0KIAorYm9vbCBydGw5MmNfcGh5X21hY19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJYm9vbCBpczkyYyA9IElTXzkyQ19TRVJJQUwocnRsaGFsLT52ZXJzaW9uKTsKKwlib29sIHJ0c3RhdHVzID0gX3J0bDkyY19waHlfY29uZmlnX21hY193aXRoX2hlYWRlcmZpbGUoaHcpOworCisJaWYgKGlzOTJjKQorCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCAweDE0LCAweDcxKTsKKwlyZXR1cm4gcnRzdGF0dXM7Cit9CisKK2Jvb2wgcnRsOTJjX3BoeV9iYl9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJYm9vbCBydHN0YXR1cyA9IHRydWU7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXUxNiByZWd2YWw7CisJdTMyIHJlZ3ZhbGR3OworCXU4IHJlZ19od3BhcmFmaWxlID0gMTsKKworCV9ydGw5MmNfcGh5X2luaXRfYmJfcmZfcmVnaXN0ZXJfZGVmaW5pdGlvbihodyk7CisJcmVndmFsID0gcnRsX3JlYWRfd29yZChydGxwcml2LCBSRUdfU1lTX0ZVTkNfRU4pOworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19TWVNfRlVOQ19FTiwKKwkJICAgICAgIHJlZ3ZhbCB8IEJJVCgxMykgfCBCSVQoMCkgfCBCSVQoMSkpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BRkVfUExMX0NUUkwsIDB4ODMpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BRkVfUExMX0NUUkwgKyAxLCAweGRiKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfUkZfQ1RSTCwgUkZfRU4gfCBSRl9SU1RCIHwgUkZfU0RNUlNUQik7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1NZU19GVU5DX0VOLAorCQkgICAgICAgRkVOX1BQTEwgfCBGRU5fUENJRUEgfCBGRU5fRElPX1BDSUUgfAorCQkgICAgICAgRkVOX0JCX0dMQl9SU1RuIHwgRkVOX0JCUlNUQik7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0FGRV9YVEFMX0NUUkwgKyAxLCAweDgwKTsKKwlyZWd2YWxkdyA9IHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsIFJFR19MRURDRkcwKTsKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0xFRENGRzAsIHJlZ3ZhbGR3IHwgQklUKDIzKSk7CisJaWYgKHJlZ19od3BhcmFmaWxlID09IDEpCisJCXJ0c3RhdHVzID0gX3J0bDkyY19waHlfYmI4MTkyY19jb25maWdfcGFyYWZpbGUoaHcpOworCXJldHVybiBydHN0YXR1czsKK30KKwogdm9pZCBydGw5MmNlX3BoeV9zZXRfcmZfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJICAgZW51bSByYWRpb19wYXRoIHJmcGF0aCwKLQkJCSAgIHUzMiByZWdhZGRyLCB1MzIgYml0bWFzaywgdTMyIGRhdGEpCisJCQkgICAgZW51bSByYWRpb19wYXRoIHJmcGF0aCwKKwkJCSAgICB1MzIgcmVnYWRkciwgdTMyIGJpdG1hc2ssIHUzMiBkYXRhKQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOwpAQCAtMTIxLDQ1ICsxNjEsNyBAQAogCQkJCQkgICAgICAgYml0bWFzaywgZGF0YSwgcmZwYXRoKSk7CiB9CiAKLWJvb2wgcnRsOTJjZV9waHlfbWFjX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKLXsKLQlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7Ci0Jc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKLQlib29sIGlzOTJjID0gSVNfOTJDX1NFUklBTChydGxoYWwtPnZlcnNpb24pOwotCWJvb2wgcnRzdGF0dXMgPSBfcnRsOTJjZV9waHlfY29uZmlnX21hY193aXRoX2hlYWRlcmZpbGUoaHcpOwotCi0JaWYgKGlzOTJjKQotCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCAweDE0LCAweDcxKTsKLQlyZXR1cm4gcnRzdGF0dXM7Ci19Ci0KLWJvb2wgcnRsOTJjZV9waHlfYmJfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewotCWJvb2wgcnRzdGF0dXMgPSB0cnVlOwotCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKLQl1MTYgcmVndmFsOwotCXUzMiByZWd2YWxkdzsKLQl1OCByZWdfaHdwYXJhZmlsZSA9IDE7Ci0KLQlfcnRsOTJjX3BoeV9pbml0X2JiX3JmX3JlZ2lzdGVyX2RlZmluaXRpb24oaHcpOwotCXJlZ3ZhbCA9IHJ0bF9yZWFkX3dvcmQocnRscHJpdiwgUkVHX1NZU19GVU5DX0VOKTsKLQlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfU1lTX0ZVTkNfRU4sCi0JCSAgICAgICByZWd2YWwgfCBCSVQoMTMpIHwgQklUKDApIHwgQklUKDEpKTsKLQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQUZFX1BMTF9DVFJMLCAweDgzKTsKLQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQUZFX1BMTF9DVFJMICsgMSwgMHhkYik7Ci0JcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1JGX0NUUkwsIFJGX0VOIHwgUkZfUlNUQiB8IFJGX1NETVJTVEIpOwotCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TWVNfRlVOQ19FTiwKLQkJICAgICAgIEZFTl9QUExMIHwgRkVOX1BDSUVBIHwgRkVOX0RJT19QQ0lFIHwKLQkJICAgICAgIEZFTl9CQl9HTEJfUlNUbiB8IEZFTl9CQlJTVEIpOwotCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BRkVfWFRBTF9DVFJMICsgMSwgMHg4MCk7Ci0JcmVndmFsZHcgPSBydGxfcmVhZF9kd29yZChydGxwcml2LCBSRUdfTEVEQ0ZHMCk7Ci0JcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19MRURDRkcwLCByZWd2YWxkdyB8IEJJVCgyMykpOwotCWlmIChyZWdfaHdwYXJhZmlsZSA9PSAxKQotCQlydHN0YXR1cyA9IF9ydGw5MmNfcGh5X2JiODE5MmNfY29uZmlnX3BhcmFmaWxlKGh3KTsKLQlyZXR1cm4gcnRzdGF0dXM7Ci19Ci0KLWJvb2wgX3J0bDkyY2VfcGh5X2NvbmZpZ19tYWNfd2l0aF9oZWFkZXJmaWxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQorc3RhdGljIGJvb2wgX3J0bDkyY19waHlfY29uZmlnX21hY193aXRoX2hlYWRlcmZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXUzMiBpOwpAQCAtMTc3LDcgKzE3OSw3IEBACiB9CiAKIGJvb2wgX3J0bDkyY2VfcGh5X2NvbmZpZ19iYl93aXRoX2hlYWRlcmZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCQkgIHU4IGNvbmZpZ3R5cGUpCisJCQkJCSAgICB1OCBjb25maWd0eXBlKQogewogCWludCBpOwogCXUzMiAqcGh5X3JlZ2FycmF5X3RhYmxlOwpAQCAtMjM2LDcgKzIzOCw3IEBACiB9CiAKIGJvb2wgX3J0bDkyY2VfcGh5X2NvbmZpZ19iYl93aXRoX3BnaGVhZGVyZmlsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkJCSAgICB1OCBjb25maWd0eXBlKQorCQkJCQkgICAgICB1OCBjb25maWd0eXBlKQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAlpbnQgaTsKQEAgLTI3NCw3ICsyNzYsNyBAQAogCXJldHVybiB0cnVlOwogfQogCi1ib29sIHJ0bDkyY2VfcGh5X2NvbmZpZ19yZl93aXRoX2hlYWRlcmZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCitib29sIHJ0bDkyY19waHlfY29uZmlnX3JmX3dpdGhfaGVhZGVyZmlsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkJICBlbnVtIHJhZGlvX3BhdGggcmZwYXRoKQogewogCkBAIC0zNjQsNzQgKzM2Niw2IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgcnRsOTJjZV9waHlfc2V0X2J3X21vZGVfY2FsbGJhY2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCi17Ci0Jc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwotCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7Ci0Jc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKLQlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOwotCXU4IHJlZ19id19vcG1vZGU7Ci0JdTggcmVnX3Byc3JfcnNjOwotCi0JUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TQ0FOLCBEQkdfVFJBQ0UsCi0JCSAoIlN3aXRjaCB0byAlcyBiYW5kd2lkdGhcbiIsCi0JCSAgcnRscGh5LT5jdXJyZW50X2NoYW5fYncgPT0gSFRfQ0hBTk5FTF9XSURUSF8yMCA/Ci0JCSAgIjIwTUh6IiA6ICI0ME1IeiIpKQotCi0JICAgIGlmIChpc19oYWxfc3RvcChydGxoYWwpKQotCQlyZXR1cm47Ci0KLQlyZWdfYndfb3Btb2RlID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfQldPUE1PREUpOwotCXJlZ19wcnNyX3JzYyA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUkVHX1JSU1IgKyAyKTsKLQotCXN3aXRjaCAocnRscGh5LT5jdXJyZW50X2NoYW5fYncpIHsKLQljYXNlIEhUX0NIQU5ORUxfV0lEVEhfMjA6Ci0JCXJlZ19id19vcG1vZGUgfD0gQldfT1BNT0RFXzIwTUhaOwotCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQldPUE1PREUsIHJlZ19id19vcG1vZGUpOwotCQlicmVhazsKLQotCWNhc2UgSFRfQ0hBTk5FTF9XSURUSF8yMF80MDoKLQkJcmVnX2J3X29wbW9kZSAmPSB+QldfT1BNT0RFXzIwTUhaOwotCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQldPUE1PREUsIHJlZ19id19vcG1vZGUpOwotCi0JCXJlZ19wcnNyX3JzYyA9Ci0JCSAgICAocmVnX3Byc3JfcnNjICYgMHg5MCkgfCAobWFjLT5jdXJfNDBfcHJpbWVfc2MgPDwgNSk7Ci0JCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19SUlNSICsgMiwgcmVnX3Byc3JfcnNjKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAotCQkJICgidW5rbm93biBiYW5kd2lkdGg6ICUjWFxuIiwgcnRscGh5LT5jdXJyZW50X2NoYW5fYncpKTsKLQkJYnJlYWs7Ci0JfQotCi0Jc3dpdGNoIChydGxwaHktPmN1cnJlbnRfY2hhbl9idykgewotCWNhc2UgSFRfQ0hBTk5FTF9XSURUSF8yMDoKLQkJcnRsX3NldF9iYnJlZyhodywgUkZQR0EwX1JGTU9ELCBCUkZNT0QsIDB4MCk7Ci0JCXJ0bF9zZXRfYmJyZWcoaHcsIFJGUEdBMV9SRk1PRCwgQlJGTU9ELCAweDApOwotCQlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfQU5BTE9HUEFSQU1FVEVSMiwgQklUKDEwKSwgMSk7Ci0JCWJyZWFrOwotCWNhc2UgSFRfQ0hBTk5FTF9XSURUSF8yMF80MDoKLQkJcnRsX3NldF9iYnJlZyhodywgUkZQR0EwX1JGTU9ELCBCUkZNT0QsIDB4MSk7Ci0JCXJ0bF9zZXRfYmJyZWcoaHcsIFJGUEdBMV9SRk1PRCwgQlJGTU9ELCAweDEpOwotCQlydGxfc2V0X2JicmVnKGh3LCBSQ0NLMF9TWVNURU0sIEJDQ0tfU0lERUJBTkQsCi0JCQkgICAgICAobWFjLT5jdXJfNDBfcHJpbWVfc2MgPj4gMSkpOwotCQlydGxfc2V0X2JicmVnKGh3LCBST0ZETTFfTFNURiwgMHhDMDAsIG1hYy0+Y3VyXzQwX3ByaW1lX3NjKTsKLQkJcnRsX3NldF9iYnJlZyhodywgUkZQR0EwX0FOQUxPR1BBUkFNRVRFUjIsIEJJVCgxMCksIDApOwotCQlydGxfc2V0X2JicmVnKGh3LCAweDgxOCwgKEJJVCgyNikgfCBCSVQoMjcpKSwKLQkJCSAgICAgIChtYWMtPmN1cl80MF9wcmltZV9zYyA9PQotCQkJICAgICAgIEhBTF9QUklNRV9DSE5MX09GRlNFVF9MT1dFUikgPyAyIDogMSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCi0JCQkgKCJ1bmtub3duIGJhbmR3aWR0aDogJSNYXG4iLCBydGxwaHktPmN1cnJlbnRfY2hhbl9idykpOwotCQlicmVhazsKLQl9Ci0JcnRsOTJjX3BoeV9yZjYwNTJfc2V0X2JhbmR3aWR0aChodywgcnRscGh5LT5jdXJyZW50X2NoYW5fYncpOwotCXJ0bHBoeS0+c2V0X2J3bW9kZV9pbnByb2dyZXNzID0gZmFsc2U7Ci0JUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TQ0FOLCBEQkdfVFJBQ0UsICgiPD09XG4iKSk7Ci19Ci0KIHZvaWQgX3J0bDkyY2VfcGh5X2xjX2NhbGlicmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBpczJ0KQogewogCXU4IHRtcHJlZzsKQEAgLTQ3Nyw2ICs0MTEsMzYgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIF9ydGw5MmNlX3BoeV9zZXRfcmZfc2xlZXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJdTMyIHU0Yl90bXA7CisJdTggZGVsYXkgPSA1OworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19UWFBBVVNFLCAweEZGKTsKKwlydGxfc2V0X3JmcmVnKGh3LCBSRjkwX1BBVEhfQSwgMHgwMCwgUkZSRUdfT0ZGU0VUX01BU0ssIDB4MDApOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BUFNEX0NUUkwsIDB4NDApOworCXU0Yl90bXAgPSBydGxfZ2V0X3JmcmVnKGh3LCBSRjkwX1BBVEhfQSwgMCwgUkZSRUdfT0ZGU0VUX01BU0spOworCXdoaWxlICh1NGJfdG1wICE9IDAgJiYgZGVsYXkgPiAwKSB7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BUFNEX0NUUkwsIDB4MCk7CisJCXJ0bF9zZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9BLCAweDAwLCBSRlJFR19PRkZTRVRfTUFTSywgMHgwMCk7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BUFNEX0NUUkwsIDB4NDApOworCQl1NGJfdG1wID0gcnRsX2dldF9yZnJlZyhodywgUkY5MF9QQVRIX0EsIDAsIFJGUkVHX09GRlNFVF9NQVNLKTsKKwkJZGVsYXktLTsKKwl9CisJaWYgKGRlbGF5ID09IDApIHsKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0FQU0RfQ1RSTCwgMHgwMCk7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TWVNfRlVOQ19FTiwgMHhFMik7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TWVNfRlVOQ19FTiwgMHhFMyk7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19UWFBBVVNFLCAweDAwKTsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9QT1dFUiwgREJHX1RSQUNFLAorCQkJICgiU3dpdGNoIFJGIHRpbWVvdXQgISEhLlxuIikpOworCQlyZXR1cm47CisJfQorCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TWVNfRlVOQ19FTiwgMHhFMik7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1NQUzBfQ1RSTCwgMHgyMik7Cit9CisKIHN0YXRpYyBib29sIF9ydGw5MmNlX3BoeV9zZXRfcmZfcG93ZXJfc3RhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCSAgICBlbnVtIHJmX3B3cnN0YXRlIHJmcHdyX3N0YXRlKQogewpAQCAtNTIzLDMzICs0ODcsNiBAQAogCQkJYnJlYWs7CiAJCX0KIAljYXNlIEVSRk9GRjp7Ci0JCQlmb3IgKHF1ZXVlX2lkID0gMCwgaSA9IDA7Ci0JCQkgICAgIHF1ZXVlX2lkIDwgUlRMX1BDSV9NQVhfVFhfUVVFVUVfQ09VTlQ7KSB7Ci0JCQkJcmluZyA9ICZwY2lwcml2LT5kZXYudHhfcmluZ1txdWV1ZV9pZF07Ci0JCQkJaWYgKHNrYl9xdWV1ZV9sZW4oJnJpbmctPnF1ZXVlKSA9PSAwIHx8Ci0JCQkJICAgIHF1ZXVlX2lkID09IEJFQUNPTl9RVUVVRSkgewotCQkJCQlxdWV1ZV9pZCsrOwotCQkJCQljb250aW51ZTsKLQkJCQl9IGVsc2UgewotCQkJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX1dBUk5JTkcsCi0JCQkJCQkgKCJlUmYgT2ZmL1NsZWVwOiAlZCB0aW1lcyAiCi0JCQkJCQkgICJUY2JCdXN5UXVldWVbJWRdICIKLQkJCQkJCSAgIj0lZCBiZWZvcmUgZG96ZSFcbiIsIChpICsgMSksCi0JCQkJCQkgIHF1ZXVlX2lkLAotCQkJCQkJICBza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSkpKTsKLQkJCQkJdWRlbGF5KDEwKTsKLQkJCQkJaSsrOwotCQkJCX0KLQkJCQlpZiAoaSA+PSBNQVhfRE9aRV9XQUlUSU5HX1RJTUVTXzl4KSB7Ci0JCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfV0FSTklORywKLQkJCQkJCSAoIlxuRVJGT0ZGOiAlZCB0aW1lcyAiCi0JCQkJCQkgICJUY2JCdXN5UXVldWVbJWRdID0gJWQgIVxuIiwKLQkJCQkJCSAgTUFYX0RPWkVfV0FJVElOR19USU1FU185eCwKLQkJCQkJCSAgcXVldWVfaWQsCi0JCQkJCQkgIHNrYl9xdWV1ZV9sZW4oJnJpbmctPnF1ZXVlKSkpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9CiAJCQlpZiAocHBzYy0+cmVnX3JmcHNfbGV2ZWwgJiBSVF9SRl9PRkZfTEVWTF9IQUxUX05JQykgewogCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUkYsIERCR19ETUVTRywKIAkJCQkJICgiSVBTIFNldCBlUmYgbmljIGRpc2FibGVcbiIpKTsKQEAgLTU4MSw2ICs1MTgsNyBAQAogCQkJCQkJICAiVGNiQnVzeVF1ZXVlWyVkXSA9JWQgYmVmb3JlICIKIAkJCQkJCSAgImRvemUhXG4iLCAoaSArIDEpLCBxdWV1ZV9pZCwKIAkJCQkJCSAgc2tiX3F1ZXVlX2xlbigmcmluZy0+cXVldWUpKSk7CisKIAkJCQkJdWRlbGF5KDEwKTsKIAkJCQkJaSsrOwogCQkJCX0KQEAgLTU5OSw3ICs1MzcsNyBAQAogCQkJCSAgamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0KIAkJCQkJCSAgIHBwc2MtPmxhc3RfYXdha2VfamlmZmllcykpKTsKIAkJCXBwc2MtPmxhc3Rfc2xlZXBfamlmZmllcyA9IGppZmZpZXM7Ci0JCQlfcnRsOTJjX3BoeV9zZXRfcmZfc2xlZXAoaHcpOworCQkJX3J0bDkyY2VfcGh5X3NldF9yZl9zbGVlcChodyk7CiAJCQlicmVhazsKIAkJfQogCWRlZmF1bHQ6CkBAIC02MTQsMTAgKzU1MiwxMSBAQAogCXJldHVybiBicmVzdWx0OwogfQogCi1ib29sIHJ0bDkyY2VfcGh5X3NldF9yZl9wb3dlcl9zdGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKK2Jvb2wgcnRsOTJjX3BoeV9zZXRfcmZfcG93ZXJfc3RhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJICAgZW51bSByZl9wd3JzdGF0ZSByZnB3cl9zdGF0ZSkKIHsKIAlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwogCWJvb2wgYnJlc3VsdCA9IGZhbHNlOwogCiAJaWYgKHJmcHdyX3N0YXRlID09IHBwc2MtPnJmcHdyX3N0YXRlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvcGh5LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9waHkuaAppbmRleCBhMzcyNjdlLi5hZDU4MDg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9waHkuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9waHkuaApAQCAtMzksNiArMzksNyBAQAogI2RlZmluZSBSVF9DQU5OT1RfSU8oaHcpCQlmYWxzZQogI2RlZmluZSBISUdIUE9XRVJfUkFESU9BX0FSUkFZTEVOCTIyCiAKKyNkZWZpbmUgSVFLX0FEREFfUkVHX05VTQkJMTYKICNkZWZpbmUgTUFYX1RPTEVSQU5DRQkJCTUKICNkZWZpbmUJSVFLX0RFTEFZX1RJTUUJCQkxCiAKQEAgLTU2LDYgKzU3LDggQEAKICNkZWZpbmUgSVFLX0FEREFfUkVHX05VTQkJMTYKICNkZWZpbmUgSVFLX01BQ19SRUdfTlVNCQkJNAogCisjZGVmaW5lIElRS19ERUxBWV9USU1FCQkJMQorCiAjZGVmaW5lIFJGOTBfUEFUSF9NQVgJCQkyCiAKICNkZWZpbmUgQ1RfT0ZGU0VUX01BQ19BRERSCQkwWDE2CkBAIC03Niw3ICs3OSw3IEBACiAjZGVmaW5lIENUX09GRlNFVF9DVVNUT01FUl9JRAkJMHg3RgogCiAjZGVmaW5lIFJUTDkyQ19NQVhfUEFUSF9OVU0JCTIKLSNkZWZpbmUgTExUX0xBU1RfRU5UUllfT0ZfVFhfUEtUX0JVRkZFUgkyNTUKKwogZW51bSBzd2NobmxjbWRfaWQgewogCUNNRElEX0VORCwKIAlDTURJRF9TRVRfVFhQT1dFUk9XRVJfTEVWRUwsCkBAIC0xODQsNDMgKzE4Nyw0NCBAQAogCXUzMiBtY3Nfb3JpZ2luYWxfb2Zmc2V0WzRdWzE2XTsKIH07CiAKLWV4dGVybiB1MzIgcnRsOTJjX3BoeV9xdWVyeV9iYl9yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCitib29sIHJ0bDkyY19waHlfYmJfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3UzMiBydGw5MmNfcGh5X3F1ZXJ5X2JiX3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICB1MzIgcmVnYWRkciwgdTMyIGJpdG1hc2spOwotZXh0ZXJuIHZvaWQgcnRsOTJjX3BoeV9zZXRfYmJfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAordm9pZCBydGw5MmNfcGh5X3NldF9iYl9yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJICB1MzIgcmVnYWRkciwgdTMyIGJpdG1hc2ssIHUzMiBkYXRhKTsKLWV4dGVybiB1MzIgcnRsOTJjX3BoeV9xdWVyeV9yZl9yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCit1MzIgcnRsOTJjX3BoeV9xdWVyeV9yZl9yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJICAgZW51bSByYWRpb19wYXRoIHJmcGF0aCwgdTMyIHJlZ2FkZHIsCiAJCQkJICAgdTMyIGJpdG1hc2spOwogZXh0ZXJuIHZvaWQgcnRsOTJjZV9waHlfc2V0X3JmX3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsIHUzMiByZWdhZGRyLAotCQkJCSAgdTMyIGJpdG1hc2ssIHUzMiBkYXRhKTsKLWV4dGVybiBib29sIHJ0bDkyY19waHlfbWFjX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisJCQkJICAgZW51bSByYWRpb19wYXRoIHJmcGF0aCwgdTMyIHJlZ2FkZHIsCisJCQkJICAgdTMyIGJpdG1hc2ssIHUzMiBkYXRhKTsKK2Jvb2wgcnRsOTJjX3BoeV9tYWNfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIGJvb2wgcnRsOTJjZV9waHlfYmJfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKLWV4dGVybiBib29sIHJ0bDkyY19waHlfcmZfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKLWV4dGVybiBib29sIHJ0bDkyY19waHlfY29uZmlnX3JmX3dpdGhfZmVhZGVyZmlsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKK2Jvb2wgcnRsOTJjX3BoeV9yZl9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworYm9vbCBydGw5MmNfcGh5X2NvbmZpZ19yZl93aXRoX2ZlYWRlcmZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCQkgZW51bSByYWRpb19wYXRoIHJmcGF0aCk7Ci1leHRlcm4gdm9pZCBydGw5MmNfcGh5X2dldF9od19yZWdfb3JpZ2luYWx2YWx1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Ci1leHRlcm4gdm9pZCBydGw5MmNfcGh5X2dldF90eHBvd2VyX2xldmVsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAordm9pZCBydGw5MmNfcGh5X2dldF9od19yZWdfb3JpZ2luYWx2YWx1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyY19waHlfZ2V0X3R4cG93ZXJfbGV2ZWwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCSBsb25nICpwb3dlcmxldmVsKTsKLWV4dGVybiB2b2lkIHJ0bDkyY19waHlfc2V0X3R4cG93ZXJfbGV2ZWwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGNoYW5uZWwpOwotZXh0ZXJuIGJvb2wgcnRsOTJjX3BoeV91cGRhdGVfdHhwb3dlcl9kYm0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCit2b2lkIHJ0bDkyY19waHlfc2V0X3R4cG93ZXJfbGV2ZWwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGNoYW5uZWwpOworYm9vbCBydGw5MmNfcGh5X3VwZGF0ZV90eHBvd2VyX2RibShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkJICBsb25nIHBvd2VyX2luZGJtKTsKLWV4dGVybiB2b2lkIHJ0bDkyY19waHlfc2Nhbl9vcGVyYXRpb25fYmFja3VwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAordm9pZCBydGw5MmNfcGh5X3NjYW5fb3BlcmF0aW9uX2JhY2t1cChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkJICAgICB1OCBvcGVyYXRpb24pOwotZXh0ZXJuIHZvaWQgcnRsOTJjX3BoeV9zZXRfYndfbW9kZV9jYWxsYmFjayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Ci1leHRlcm4gdm9pZCBydGw5MmNfcGh5X3NldF9id19tb2RlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAordm9pZCBydGw5MmNfcGh5X3NldF9id19tb2RlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hfdHlwZSk7Ci1leHRlcm4gdm9pZCBydGw5MmNfcGh5X3N3X2NobmxfY2FsbGJhY2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwotZXh0ZXJuIHU4IHJ0bDkyY19waHlfc3dfY2hubChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Ci1leHRlcm4gdm9pZCBydGw5MmNfcGh5X2lxX2NhbGlicmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBiX3JlY292ZXJ5KTsKLWV4dGVybiB2b2lkIHJ0bDkyY19waHlfc2V0X2JlYWNvbl9od19yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCit2b2lkIHJ0bDkyY19waHlfc3dfY2hubF9jYWxsYmFjayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit1OCBydGw5MmNfcGh5X3N3X2Nobmwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw5MmNfcGh5X2lxX2NhbGlicmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBiX3JlY292ZXJ5KTsKK3ZvaWQgcnRsOTJjX3BoeV9zZXRfYmVhY29uX2h3X3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkJIHUxNiBiZWFjb25pbnRlcnZhbCk7CiB2b2lkIHJ0bDkyY19waHlfYXBfY2FsaWJyYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBjaGFyIGRlbHRhKTsKIHZvaWQgcnRsOTJjX3BoeV9sY19jYWxpYnJhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBfcnRsOTJjZV9waHlfbGNfY2FsaWJyYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGlzMnQpOwogdm9pZCBydGw5MmNfcGh5X3NldF9yZnBhdGhfc3dpdGNoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGJtYWluKTsKIGJvb2wgcnRsOTJjX3BoeV9jb25maWdfcmZfd2l0aF9oZWFkZXJmaWxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCQkgIGVudW0gcmFkaW9fcGF0aCByZnBhdGgpOwotZXh0ZXJuIGJvb2wgcnRsODE5Ml9waHlfY2hlY2tfaXNfbGVnYWxfcmZwYXRoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorYm9vbCBydGw4MTkyX3BoeV9jaGVja19pc19sZWdhbF9yZnBhdGgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCSAgICAgIHUzMiByZnBhdGgpOwogYm9vbCBydGw5MmNfcGh5X3NldF9pb19jbWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gaW9fdHlwZSBpb3R5cGUpOwogYm9vbCBydGw5MmNlX3BoeV9zZXRfcmZfcG93ZXJfc3RhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCkBAIC0yMzcsOSArMjQxLDYgQEAKIHZvaWQgX3J0bDkyY19waHlfcmZfc2VyaWFsX3dyaXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCQllbnVtIHJhZGlvX3BhdGggcmZwYXRoLCB1MzIgb2Zmc2V0LAogCQkJCQl1MzIgZGF0YSk7Ci12b2lkIF9ydGw5MmNfc3RvcmVfcHdySW5kZXhfZGlmZnJhdGVfb2Zmc2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCQkJICAgdTMyIHJlZ2FkZHIsIHUzMiBiaXRtYXNrLAotCQkJCQkJICAgdTMyIGRhdGEpOwogdm9pZCBfcnRsOTJjX3BoeV9md19yZl9zZXJpYWxfd3JpdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCSAgIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsIHUzMiBvZmZzZXQsCiAJCQkJCSAgIHUzMiBkYXRhKTsKQEAgLTI1MCw1ICsyNTEsMTEgQEAKIHZvaWQgX3J0bDkyY19waHlfaW5pdF9iYl9yZl9yZWdpc3Rlcl9kZWZpbml0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIGJvb2wgX3J0bDkyY19waHlfYmI4MTkyY19jb25maWdfcGFyYWZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogdm9pZCBfcnRsOTJjX3BoeV9zZXRfcmZfc2xlZXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworYm9vbCBydGw5MmNfcGh5X3NldF9yZl9wb3dlcl9zdGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICBlbnVtIHJmX3B3cnN0YXRlIHJmcHdyX3N0YXRlKTsKK2Jvb2wgX3J0bDkyY2VfcGh5X2NvbmZpZ19iYl93aXRoX2hlYWRlcmZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSAgICB1OCBjb25maWd0eXBlKTsKK2Jvb2wgX3J0bDkyY2VfcGh5X2NvbmZpZ19iYl93aXRoX3BnaGVhZGVyZmlsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJICAgICAgdTggY29uZmlndHlwZSk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvcmVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9yZWcuaAppbmRleCBiMDg2OGE2Li41OThjZWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9yZWcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9yZWcuaApAQCAtNzIsNiArNzIsNyBAQAogI2RlZmluZSBSRUdfR1BJT19JT19TRUxfMgkJCTB4MDA2MgogLyogUlRMODcyMyBXSUZJL0JUL0dQUyBNdWx0aS1GdW5jdGlvbiBjb250cm9sIHNvdXJjZS4gKi8KICNkZWZpbmUgUkVHX01VTFRJX0ZVTkNfQ1RSTAkJCTB4MDA2OAorCiAjZGVmaW5lIFJFR19NQ1VGV0RMCQkJCTB4MDA4MAogCiAjZGVmaW5lIFJFR19ITUVCT1hfRVhUXzAJCQkweDAwODgKQEAgLTU0Miw3ICs1NDMsNyBAQAogI2RlZmluZQlJTVJfT0NQSU5UCQkJCUJJVCgxKQogI2RlZmluZQlJTVJfV0xBTk9GRgkJCQlCSVQoMCkKIAotI2RlZmluZQlIV1NFVF9NQVhfU0laRQkJCQkxMjgKKyNkZWZpbmUgRUZVU0VfUkVBTF9DT05URU5UX0xFTgkJCTUxMgogCiAjZGVmaW5lCUVFUFJPTV9ERUZBVUxUX1RTU0kJCQkweDAKICNkZWZpbmUgRUVQUk9NX0RFRkFVTFRfVFhQT1dFUkRJRkYJCTB4MApAQCAtNjU2LDYgKzY1Nyw3IEBACiAjZGVmaW5lCVNUT1BCRQkJCQkJQklUKDEpCiAjZGVmaW5lCVNUT1BCSwkJCQkJQklUKDApCiAKKyNkZWZpbmUJUkNSX0FQUEZDUwkJCQlCSVQoMzEpCiAjZGVmaW5lCVJDUl9BUFBfRkNTCQkJCUJJVCgzMSkKICNkZWZpbmUJUkNSX0FQUF9NSUMJCQkJQklUKDMwKQogI2RlZmluZQlSQ1JfQVBQX0lDVgkJCQlCSVQoMjkpCkBAIC02ODgsNiArNjkwLDcgQEAKIAogI2RlZmluZSBSRUdfVVNCX0lORk8JCQkJMHhGRTE3CiAjZGVmaW5lIFJFR19VU0JfU1BFQ0lBTF9PUFRJT04JCQkweEZFNTUKKwogI2RlZmluZSBSRUdfVVNCX0RNQV9BR0dfVE8JCQkweEZFNUIKICNkZWZpbmUgUkVHX1VTQl9BR0dfVE8JCQkJMHhGRTVDCiAjZGVmaW5lIFJFR19VU0JfQUdHX1RICQkJCTB4RkU1RApAQCAtNzc1LDcgKzc3OCw2IEBACiAKICNkZWZpbmUJQk9PVF9GUk9NX0VFUFJPTQkJCUJJVCg0KQogI2RlZmluZQlFRVBST01fRU4JCQkJQklUKDUpCi0jZGVmaW5lCUVFUFJPTVNFTAkJCQlCT09UX0ZST01fRUVQUk9NCiAKICNkZWZpbmUgQUZFX0JHRU4JCQkJQklUKDApCiAjZGVmaW5lIEFGRV9NQkVOCQkJCUJJVCgxKQpAQCAtOTAxLDI4ICs5MDMsNyBAQAogI2RlZmluZSBCRF9QS0dfU0VMCQkJCUJJVCgyNSkKICNkZWZpbmUgQkRfSENJX1NFTAkJCQlCSVQoMjYpCiAjZGVmaW5lIFRZUEVfSUQJCQkJCUJJVCgyNykKLQotLyogUkVHX0dQSU9fT1VUU1RTIChGb3IgUlRMODcyMyBvbmx5KSAqLwotI2RlZmluZQlFRlNfSENJX1NFTAkJCQkoQklUKDApfEJJVCgxKSkKLSNkZWZpbmUJUEFEX0hDSV9TRUwJCQkJKEJJVCgyKXxCSVQoMykpCi0jZGVmaW5lCUhDSV9TRUwJCQkJCShCSVQoNCl8QklUKDUpKQotI2RlZmluZQlQS0dfU0VMX0hDSQkJCQlCSVQoNikKLSNkZWZpbmUJRkVOX0dQUwkJCQkJQklUKDcpCi0jZGVmaW5lCUZFTl9CVAkJCQkJQklUKDgpCi0jZGVmaW5lCUZFTl9XTAkJCQkJQklUKDkpCi0jZGVmaW5lCUZFTl9QQ0kJCQkJCUJJVCgxMCkKLSNkZWZpbmUJRkVOX1VTQgkJCQkJQklUKDExKQotI2RlZmluZQlCVFJGX0hXUEROX04JCQkJQklUKDEyKQotI2RlZmluZQlXTFJGX0hXUEROX04JCQkJQklUKDEzKQotI2RlZmluZQlQRE5fQlRfTgkJCQlCSVQoMTQpCi0jZGVmaW5lCVBETl9HUFNfTgkJCQlCSVQoMTUpCi0jZGVmaW5lCUJUX0NUTF9IV1BETgkJCQlCSVQoMTYpCi0jZGVmaW5lCUdQU19DVExfSFdQRE4JCQkJQklUKDE3KQotI2RlZmluZQlQUEhZX1NVU0IJCQkJQklUKDIwKQotI2RlZmluZQlVUEhZX1NVU0IJCQkJQklUKDIxKQotI2RlZmluZQlQQ0lfU1VTRU4JCQkJQklUKDIyKQotI2RlZmluZQlVU0JfU1VTRU4JCQkJQklUKDIzKQotI2RlZmluZQlSRl9STF9JRAkJCShCSVQoMzEpIHwgQklUKDMwKSB8IEJJVCgyOSkgfCBCSVQoMjgpKQorI2RlZmluZQlSRl9STF9JRAkJKEJJVCgzMSkgfCBCSVQoMzApIHwgQklUKDI5KSB8IEJJVCgyOCkpCiAKICNkZWZpbmUgQ0hJUF9WRVJfUlRMX01BU0sJCQkweEYwMDAKICNkZWZpbmUgQ0hJUF9WRVJfUlRMX1NISUZUCQkJMTIKQEAgLTEwNzcsNiArMTA1OCw3IEBACiAjZGVmaW5lIF9SQVJGX1JDOCh4KQkJCQkoKCh4KSAmIDB4MUYpIDw8IDI0KQogCiAjZGVmaW5lIEFDX1BBUkFNX1RYT1BfT0ZGU0VUCQkJMTYKKyNkZWZpbmUgQUNfUEFSQU1fVFhPUF9MSU1JVF9PRkZTRVQJCTE2CiAjZGVmaW5lIEFDX1BBUkFNX0VDV19NQVhfT0ZGU0VUCQkJMTIKICNkZWZpbmUgQUNfUEFSQU1fRUNXX01JTl9PRkZTRVQJCQk4CiAjZGVmaW5lIEFDX1BBUkFNX0FJRlNfT0ZGU0VUCQkJMApAQCAtMTIyMSwzNCArMTIwMywxMiBAQAogI2RlZmluZSBFUFJPTV9DTURfQ09ORklHCQkJMHgzCiAjZGVmaW5lIEVQUk9NX0NNRF9MT0FECQkJCTEKIAotI2RlZmluZQlIV1NFVF9NQVhfU0laRV85MlMJCUhXU0VUX01BWF9TSVpFCisjZGVmaW5lCUhXU0VUX01BWF9TSVpFXzkyUwkJCUhXU0VUX01BWF9TSVpFCisKKyNkZWZpbmUJV0xfSFdQRE5fRU4JCQkJQklUKDApCiAKICNkZWZpbmUJSEFMXzgxOTJDX0hXX0dQSU9fV1BTX0JJVAkJQklUKDIpCiAKLS8qIFJFR19NVUxUSV9GVU5DX0NUUkwoRm9yIFJUTDg3MjMgT25seSkgKi8KLS8qIEVuYWJsZSBHUElPWzldIGFzIFdpRmkgSFcgUERuIHNvdXJjZSAqLwotI2RlZmluZQlXTF9IV1BETl9FTgkJCQlCSVQoMCkKLS8qIFdpRmkgSFcgUERuIHBvbGFyaXR5IGNvbnRyb2wgKi8KLSNkZWZpbmUJV0xfSFdQRE5fU0wJCQkJQklUKDEpCi0vKiBXaUZpIGZ1bmN0aW9uIGVuYWJsZSAqLwotI2RlZmluZQlXTF9GVU5DX0VOCQkJCUJJVCgyKQotLyogRW5hYmxlIEdQSU9bOV0gYXMgV2lGaSBSRiBIVyBQRG4gc291cmNlICovCi0jZGVmaW5lCVdMX0hXUk9GX0VOCQkJCUJJVCgzKQotLyogRW5hYmxlIEdQSU9bMTFdIGFzIEJUIEhXIFBEbiBzb3VyY2UgKi8KLSNkZWZpbmUJQlRfSFdQRE5fRU4JCQkJQklUKDE2KQotLyogQlQgSFcgUERuIHBvbGFyaXR5IGNvbnRyb2wgKi8KLSNkZWZpbmUJQlRfSFdQRE5fU0wJCQkJQklUKDE3KQotLyogQlQgZnVuY3Rpb24gZW5hYmxlICovCi0jZGVmaW5lCUJUX0ZVTkNfRU4JCQkJQklUKDE4KQotLyogRW5hYmxlIEdQSU9bMTFdIGFzIEJUL0dQUyBSRiBIVyBQRG4gc291cmNlICovCi0jZGVmaW5lCUJUX0hXUk9GX0VOCQkJCUJJVCgxOSkKLS8qIEVuYWJsZSBHUElPWzEwXSBhcyBHUFMgSFcgUERuIHNvdXJjZSAqLwotI2RlZmluZQlHUFNfSFdQRE5fRU4JCQkJQklUKDIwKQotLyogR1BTIEhXIFBEbiBwb2xhcml0eSBjb250cm9sICovCi0jZGVmaW5lCUdQU19IV1BETl9TTAkJCQlCSVQoMjEpCi0vKiBHUFMgZnVuY3Rpb24gZW5hYmxlICovCi0jZGVmaW5lCUdQU19GVU5DX0VOCQkJCUJJVCgyMikKLQogI2RlZmluZQlSUE1BQ19SRVNFVAkJCQkweDEwMAogI2RlZmluZQlSUE1BQ19UWFNUQVJUCQkJCTB4MTA0CiAjZGVmaW5lCVJQTUFDX1RYTEVHQUNZU0lHCQkJMHgxMDgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3JmLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9yZi5jCmluZGV4IDY2OWIxMTYuLjkwZDBmMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3JmLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvcmYuYwpAQCAtMzQsOSArMzQsOSBAQAogI2luY2x1ZGUgInJmLmgiCiAjaW5jbHVkZSAiZG0uaCIKIAotc3RhdGljIGJvb2wgX3J0bDkyY19waHlfcmY2MDUyX2NvbmZpZ19wYXJhZmlsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CitzdGF0aWMgYm9vbCBfcnRsOTJjZV9waHlfcmY2MDUyX2NvbmZpZ19wYXJhZmlsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiAKLXZvaWQgcnRsOTJjX3BoeV9yZjYwNTJfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggYmFuZHdpZHRoKQordm9pZCBydGw5MmNlX3BoeV9yZjYwNTJfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggYmFuZHdpZHRoKQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOwpAQCAtNjIsNyArNjIsNyBAQAogfQogCiB2b2lkIHJ0bDkyY2VfcGh5X3JmNjA1Ml9zZXRfY2NrX3R4cG93ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgICAgIHU4ICpwcG93ZXJsZXZlbCkKKwkJCQkJdTggKnBwb3dlcmxldmVsKQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOwpAQCAtMTI4LDggKzEyOCw3IEBACiAKIAl0bXB2YWwgPSB0eF9hZ2NbUkY5MF9QQVRIX0FdID4+IDg7CiAKLQlpZiAobWFjLT5tb2RlID09IFdJUkVMRVNTX01PREVfQikKLQkJdG1wdmFsID0gdG1wdmFsICYgMHhmZjAwZmZmZjsKKwl0bXB2YWwgPSB0bXB2YWwgJiAweGZmMDBmZmZmOwogCiAJcnRsX3NldF9iYnJlZyhodywgUlRYQUdDX0JfQ0NLMTFfQV9DQ0syXzExLCAweGZmZmZmZjAwLCB0bXB2YWwpOwogCkBAIC0yMDIsNyArMjAxLDcgQEAKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKIAlzdHJ1Y3QgcnRsX2VmdXNlICpydGxlZnVzZSA9IHJ0bF9lZnVzZShydGxfcHJpdihodykpOwotCXU4IGksIGNobmxncm91cCwgcHdyX2RpZmZfbGltaXRbNF07CisJdTggaSwgY2hubGdyb3VwID0gMCwgcHdyX2RpZmZfbGltaXRbNF07CiAJdTMyIHdyaXRlVmFsLCBjdXN0b21lcl9saW1pdCwgcmY7CiAKIAlmb3IgKHJmID0gMDsgcmYgPCAyOyByZisrKSB7CkBAIC00NDAsMTYgKzQzOSwxNyBAQAogCWVsc2UKIAkJcnRscGh5LT5udW1fdG90YWxfcmZwYXRoID0gMjsKIAotCXJldHVybiBfcnRsOTJjX3BoeV9yZjYwNTJfY29uZmlnX3BhcmFmaWxlKGh3KTsKKwlyZXR1cm4gX3J0bDkyY2VfcGh5X3JmNjA1Ml9jb25maWdfcGFyYWZpbGUoaHcpOworCiB9CiAKLXN0YXRpYyBib29sIF9ydGw5MmNfcGh5X3JmNjA1Ml9jb25maWdfcGFyYWZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCitzdGF0aWMgYm9vbCBfcnRsOTJjZV9waHlfcmY2MDUyX2NvbmZpZ19wYXJhZmlsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKLQl1MzIgdTRfcmVndmFsdWU7CisJdTMyIHU0X3JlZ3ZhbHVlID0gMDsKIAl1OCByZnBhdGg7Ci0JYm9vbCBydHN0YXR1czsKKwlib29sIHJ0c3RhdHVzID0gdHJ1ZTsKIAlzdHJ1Y3QgYmJfcmVnX2RlZiAqcHBoeXJlZzsKIAogCWZvciAocmZwYXRoID0gMDsgcmZwYXRoIDwgcnRscGh5LT5udW1fdG90YWxfcmZwYXRoOyByZnBhdGgrKykgewpAQCAtNDg0LDEyICs0ODQsMTIgQEAKIAogCQlzd2l0Y2ggKHJmcGF0aCkgewogCQljYXNlIFJGOTBfUEFUSF9BOgotCQkJcnRzdGF0dXMgPSBydGw5MmNlX3BoeV9jb25maWdfcmZfd2l0aF9oZWFkZXJmaWxlKGh3LAotCQkJCQkoZW51bSByYWRpb19wYXRoKSByZnBhdGgpOworCQkJcnRzdGF0dXMgPSBydGw5MmNfcGh5X2NvbmZpZ19yZl93aXRoX2hlYWRlcmZpbGUoaHcsCisJCQkJCQkoZW51bSByYWRpb19wYXRoKXJmcGF0aCk7CiAJCQlicmVhazsKIAkJY2FzZSBSRjkwX1BBVEhfQjoKLQkJCXJ0c3RhdHVzID0gcnRsOTJjZV9waHlfY29uZmlnX3JmX3dpdGhfaGVhZGVyZmlsZShodywKLQkJCQkJKGVudW0gcmFkaW9fcGF0aCkgcmZwYXRoKTsKKwkJCXJ0c3RhdHVzID0gcnRsOTJjX3BoeV9jb25maWdfcmZfd2l0aF9oZWFkZXJmaWxlKGh3LAorCQkJCQkJKGVudW0gcmFkaW9fcGF0aClyZnBhdGgpOwogCQkJYnJlYWs7CiAJCWNhc2UgUkY5MF9QQVRIX0M6CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3JmLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9yZi5oCmluZGV4IDNhYTUyMGMuLjM5ZmYwMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3JmLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvcmYuaApAQCAtMzQsMTQgKzM0LDExIEBACiAjZGVmaW5lIFJGNjA1Ml9NQVhfUkVHCQkJMHgzRgogI2RlZmluZSBSRjYwNTJfTUFYX1BBVEgJCQkyCiAKLWV4dGVybiB2b2lkIHJ0bDkyY19waHlfcmY2MDUyX3NldF9iYW5kd2lkdGgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCSAgICB1OCBiYW5kd2lkdGgpOwotZXh0ZXJuIHZvaWQgcnRsOTJjX3BoeV9yZjYwNTJfc2V0X2Nja190eHBvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCQkgICAgICB1OCAqcHBvd2VybGV2ZWwpOwotZXh0ZXJuIHZvaWQgcnRsOTJjX3BoeV9yZjYwNTJfc2V0X29mZG1fdHhwb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkJICAgICAgIHU4ICpwcG93ZXJsZXZlbCwgdTggY2hhbm5lbCk7Ci1ib29sIHJ0bDkyY2VfcGh5X3JmNjA1Ml9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwotYm9vbCBydGw5MmNlX3BoeV9jb25maWdfcmZfd2l0aF9oZWFkZXJmaWxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCQkgIGVudW0gcmFkaW9fcGF0aCByZnBhdGgpOwotCitleHRlcm4gdm9pZCBydGw5MmNlX3BoeV9yZjYwNTJfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJICAgICB1OCBiYW5kd2lkdGgpOworZXh0ZXJuIHZvaWQgcnRsOTJjZV9waHlfcmY2MDUyX3NldF9jY2tfdHhwb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJICAgICAgIHU4ICpwcG93ZXJsZXZlbCk7CitleHRlcm4gdm9pZCBydGw5MmNlX3BoeV9yZjYwNTJfc2V0X29mZG1fdHhwb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJCXU4ICpwcG93ZXJsZXZlbCwgdTggY2hhbm5lbCk7CitleHRlcm4gYm9vbCBydGw5MmNlX3BoeV9yZjYwNTJfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2Uvc3cuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3N3LmMKaW5kZXggYjFjYzRkNC4uMzkwYmJiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2Uvc3cuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9zdy5jCkBAIC00MiwxMCArNDIsNTggQEAKICNpbmNsdWRlICJ0cnguaCIKICNpbmNsdWRlICJsZWQuaCIKIAorc3RhdGljIHZvaWQgcnRsOTJjX2luaXRfYXNwbV92YXJzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisKKwkvKmNsb3NlIEFTUE0gZm9yIEFNRCBkZWZhdWx0bHkgKi8KKwlydGxwY2ktPmNvbnN0X2FtZHBjaV9hc3BtID0gMDsKKworCS8qCisJICogQVNQTSBQUyBtb2RlLgorCSAqIDAgLSBEaXNhYmxlIEFTUE0sCisJICogMSAtIEVuYWJsZSBBU1BNIHdpdGhvdXQgQ2xvY2sgUmVxLAorCSAqIDIgLSBFbmFibGUgQVNQTSB3aXRoIENsb2NrIFJlcSwKKwkgKiAzIC0gQWx3eWFzIEVuYWJsZSBBU1BNIHdpdGggQ2xvY2sgUmVxLAorCSAqIDQgLSBBbHdheXMgRW5hYmxlIEFTUE0gd2l0aG91dCBDbG9jayBSZXEuCisJICogc2V0IGRlZnVsdCB0byBSVEw4MTkyQ0U6MyBSVEw4MTkyRToyCisJICogKi8KKwlydGxwY2ktPmNvbnN0X3BjaV9hc3BtID0gMzsKKworCS8qU2V0dGluZyBmb3IgUENJLUUgZGV2aWNlICovCisJcnRscGNpLT5jb25zdF9kZXZpY2VwY2lfYXNwbV9zZXR0aW5nID0gMHgwMzsKKworCS8qU2V0dGluZyBmb3IgUENJLUUgYnJpZGdlICovCisJcnRscGNpLT5jb25zdF9ob3N0cGNpX2FzcG1fc2V0dGluZyA9IDB4MDI7CisKKwkvKgorCSAqIEluIEh3L1N3IFJhZGlvIE9mZiBzaXR1YXRpb24uCisJICogMCAtIERlZmF1bHQsCisJICogMSAtIEZyb20gQVNQTSBzZXR0aW5nIHdpdGhvdXQgbG93IE1hYyBQd3IsCisJICogMiAtIEZyb20gQVNQTSBzZXR0aW5nIHdpdGggbG93IE1hYyBQd3IsCisJICogMyAtIEJ1cyBEMworCSAqIHNldCBkZWZhdWx0IHRvIFJUTDgxOTJDRTowIFJUTDgxOTJTRToyCisJICovCisJcnRscGNpLT5jb25zdF9od3N3X3Jmb2ZmX2QzID0gMDsKKworCS8qCisJICogVGhpcyBzZXR0aW5nIHdvcmtzIGZvciB0aG9zZSBkZXZpY2Ugd2l0aAorCSAqIGJhY2tkb29yIEFTUE0gc2V0dGluZyBzdWNoIGFzIEVQSFkgc2V0dGluZy4KKwkgKiAwIC0gTm90IHN1cHBvcnQgQVNQTSwKKwkgKiAxIC0gU3VwcG9ydCBBU1BNLAorCSAqIDIgLSBBY2NvcmRpbmcgdG8gY2hpcHNldC4KKwkgKi8KKwlydGxwY2ktPmNvbnN0X3N1cHBvcnRfcGNpYXNwbSA9IDE7Cit9CisKIGludCBydGw5MmNfaW5pdF9zd192YXJzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogeworCWludCBlcnI7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZTsKKworCXJ0bDgxOTJjZV9idF9yZWdfaW5pdChodyk7CiAKIAlydGxwcml2LT5kbS5kbV9pbml0aWFsZ2Fpbl9lbmFibGUgPSAxOwogCXJ0bHByaXYtPmRtLmRtX2ZsYWcgPSAwOwpAQCAtNTMsNyArMTAxLDEyIEBACiAJcnRscHJpdi0+ZG0udGhlcm1hbHZhbHVlID0gMDsKIAlydGxwY2ktPnRyYW5zbWl0X2NvbmZpZyA9IENGRU5ERk9STSB8IEJJVCgxMikgfCBCSVQoMTMpOwogCi0JcnRscGNpLT5yZWNlaXZlX2NvbmZpZyA9IChSQ1JfQVBQX0ZDUyB8CisJLyogY29tcGF0aWJsZSA1RyBiYW5kIDg4Y2UganVzdCAyLjRHIGJhbmQgJiBzbXNwICovCisJcnRscHJpdi0+cnRsaGFsLmN1cnJlbnRfYmFuZHR5cGUgPSBCQU5EX09OXzJfNEc7CisJcnRscHJpdi0+cnRsaGFsLmJhbmRzZXQgPSBCQU5EX09OXzJfNEc7CisJcnRscHJpdi0+cnRsaGFsLm1hY3BoeW1vZGUgPSBTSU5HTEVNQUNfU0lOR0xFUEhZOworCisJcnRscGNpLT5yZWNlaXZlX2NvbmZpZyA9IChSQ1JfQVBQRkNTIHwKIAkJCQkgIFJDUl9BTUYgfAogCQkJCSAgUkNSX0FERiB8CiAJCQkJICBSQ1JfQVBQX01JQyB8CkBAIC03NiwxMyArMTI5LDQ5IEBACiAKIAlydGxwY2ktPmlycV9tYXNrWzFdID0gKHUzMikgKElNUl9DUFdNIHwgSU1SX0MySENNRCB8IDApOwogCi0JcnRscHJpdi0+cnRsaGFsLnBmaXJtd2FyZSA9ICh1OCAqKSB2bWFsbG9jKDB4NDAwMCk7CisJLyogZm9yIExQUyAmIElQUyAqLworCXJ0bHByaXYtPnBzYy5pbmFjdGl2ZXBzID0gcnRscHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5pbmFjdGl2ZXBzOworCXJ0bHByaXYtPnBzYy5zd2N0cmxfbHBzID0gcnRscHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5zd2N0cmxfbHBzOworCXJ0bHByaXYtPnBzYy5md2N0cmxfbHBzID0gcnRscHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5md2N0cmxfbHBzOworCXJ0bHByaXYtPnBzYy5yZWdfZndjdHJsX2xwcyA9IDM7CisJcnRscHJpdi0+cHNjLnJlZ19tYXhfbHBzX2F3YWtlaW50dmwgPSA1OworCS8qIGZvciBBU1BNLCB5b3UgY2FuIGNsb3NlIGFzcG0gdGhyb3VnaAorCSAqIHNldCBjb25zdF9zdXBwb3J0X3BjaWFzcG0gPSAwICovCisJcnRsOTJjX2luaXRfYXNwbV92YXJzKGh3KTsKKworCWlmIChydGxwcml2LT5wc2MucmVnX2Z3Y3RybF9scHMgPT0gMSkKKwkJcnRscHJpdi0+cHNjLmZ3Y3RybF9wc21vZGUgPSBGV19QU19NSU5fTU9ERTsKKwllbHNlIGlmIChydGxwcml2LT5wc2MucmVnX2Z3Y3RybF9scHMgPT0gMikKKwkJcnRscHJpdi0+cHNjLmZ3Y3RybF9wc21vZGUgPSBGV19QU19NQVhfTU9ERTsKKwllbHNlIGlmIChydGxwcml2LT5wc2MucmVnX2Z3Y3RybF9scHMgPT0gMykKKwkJcnRscHJpdi0+cHNjLmZ3Y3RybF9wc21vZGUgPSBGV19QU19EVElNX01PREU7CisKKwkvKiBmb3IgZmlybXdhcmUgYnVmICovCisJcnRscHJpdi0+cnRsaGFsLnBmaXJtd2FyZSA9IHZ6YWxsb2MoMHg0MDAwKTsKIAlpZiAoIXJ0bHByaXYtPnJ0bGhhbC5wZmlybXdhcmUpIHsKIAkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKIAkJCSAoIkNhbid0IGFsbG9jIGJ1ZmZlciBmb3IgZncuXG4iKSk7CiAJCXJldHVybiAxOwogCX0KIAorCS8qIHJlcXVlc3QgZncgKi8KKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZmaXJtd2FyZSwgcnRscHJpdi0+Y2ZnLT5md19uYW1lLAorCQkJcnRscHJpdi0+aW8uZGV2KTsKKwlpZiAoZXJyKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkgKCJGYWlsZWQgdG8gcmVxdWVzdCBmaXJtd2FyZSFcbiIpKTsKKwkJcmV0dXJuIDE7CisJfQorCWlmIChmaXJtd2FyZS0+c2l6ZSA+IDB4NDAwMCkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJICgiRmlybXdhcmUgaXMgdG9vIGJpZyFcbiIpKTsKKwkJcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7CisJCXJldHVybiAxOworCX0KKwltZW1jcHkocnRscHJpdi0+cnRsaGFsLnBmaXJtd2FyZSwgZmlybXdhcmUtPmRhdGEsIGZpcm13YXJlLT5zaXplKTsKKwlydGxwcml2LT5ydGxoYWwuZndzaXplID0gZmlybXdhcmUtPnNpemU7CisJcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTAzLDE3ICsxOTIsMTkgQEAKIAkuaW50ZXJydXB0X3JlY29nbml6ZWQgPSBydGw5MmNlX2ludGVycnVwdF9yZWNvZ25pemVkLAogCS5od19pbml0ID0gcnRsOTJjZV9od19pbml0LAogCS5od19kaXNhYmxlID0gcnRsOTJjZV9jYXJkX2Rpc2FibGUsCisJLmh3X3N1c3BlbmQgPSBydGw5MmNlX3N1c3BlbmQsCisJLmh3X3Jlc3VtZSA9IHJ0bDkyY2VfcmVzdW1lLAogCS5lbmFibGVfaW50ZXJydXB0ID0gcnRsOTJjZV9lbmFibGVfaW50ZXJydXB0LAogCS5kaXNhYmxlX2ludGVycnVwdCA9IHJ0bDkyY2VfZGlzYWJsZV9pbnRlcnJ1cHQsCiAJLnNldF9uZXR3b3JrX3R5cGUgPSBydGw5MmNlX3NldF9uZXR3b3JrX3R5cGUsCisJLnNldF9jaGtfYnNzaWQgPSBydGw5MmNlX3NldF9jaGVja19ic3NpZCwKIAkuc2V0X3FvcyA9IHJ0bDkyY2Vfc2V0X3FvcywKIAkuc2V0X2Jjbl9yZWcgPSBydGw5MmNlX3NldF9iZWFjb25fcmVsYXRlZF9yZWdpc3RlcnMsCiAJLnNldF9iY25faW50diA9IHJ0bDkyY2Vfc2V0X2JlYWNvbl9pbnRlcnZhbCwKIAkudXBkYXRlX2ludGVycnVwdF9tYXNrID0gcnRsOTJjZV91cGRhdGVfaW50ZXJydXB0X21hc2ssCiAJLmdldF9od19yZWcgPSBydGw5MmNlX2dldF9od19yZWcsCiAJLnNldF9od19yZWcgPSBydGw5MmNlX3NldF9od19yZWcsCi0JLnVwZGF0ZV9yYXRlX3RhYmxlID0gcnRsOTJjZV91cGRhdGVfaGFsX3JhdGVfdGFibGUsCi0JLnVwZGF0ZV9yYXRlX21hc2sgPSBydGw5MmNlX3VwZGF0ZV9oYWxfcmF0ZV9tYXNrLAorCS51cGRhdGVfcmF0ZV90YmwgPSBydGw5MmNlX3VwZGF0ZV9oYWxfcmF0ZV90YmwsCiAJLmZpbGxfdHhfZGVzYyA9IHJ0bDkyY2VfdHhfZmlsbF9kZXNjLAogCS5maWxsX3R4X2NtZGRlc2MgPSBydGw5MmNlX3R4X2ZpbGxfY21kZGVzYywKIAkucXVlcnlfcnhfZGVzYyA9IHJ0bDkyY2VfcnhfcXVlcnlfZGVzYywKQEAgLTEyMyw3ICsyMTQsNyBAQAogCS5zd2l0Y2hfY2hhbm5lbCA9IHJ0bDkyY19waHlfc3dfY2hubCwKIAkuZG1fd2F0Y2hkb2cgPSBydGw5MmNfZG1fd2F0Y2hkb2csCiAJLnNjYW5fb3BlcmF0aW9uX2JhY2t1cCA9IHJ0bDkyY19waHlfc2Nhbl9vcGVyYXRpb25fYmFja3VwLAotCS5zZXRfcmZfcG93ZXJfc3RhdGUgPSBydGw5MmNlX3BoeV9zZXRfcmZfcG93ZXJfc3RhdGUsCisJLnNldF9yZl9wb3dlcl9zdGF0ZSA9IHJ0bDkyY19waHlfc2V0X3JmX3Bvd2VyX3N0YXRlLAogCS5sZWRfY29udHJvbCA9IHJ0bDkyY2VfbGVkX2NvbnRyb2wsCiAJLnNldF9kZXNjID0gcnRsOTJjZV9zZXRfZGVzYywKIAkuZ2V0X2Rlc2MgPSBydGw5MmNlX2dldF9kZXNjLApAQCAtMTMxLDI3ICsyMjIsMjkgQEAKIAkuZW5hYmxlX2h3X3NlYyA9IHJ0bDkyY2VfZW5hYmxlX2h3X3NlY3VyaXR5X2NvbmZpZywKIAkuc2V0X2tleSA9IHJ0bDkyY2Vfc2V0X2tleSwKIAkuaW5pdF9zd19sZWRzID0gcnRsOTJjZV9pbml0X3N3X2xlZHMsCi0JLmRlaW5pdF9zd19sZWRzID0gcnRsOTJjZV9kZWluaXRfc3dfbGVkcywKIAkuZ2V0X2JicmVnID0gcnRsOTJjX3BoeV9xdWVyeV9iYl9yZWcsCiAJLnNldF9iYnJlZyA9IHJ0bDkyY19waHlfc2V0X2JiX3JlZywKLQkuZ2V0X3JmcmVnID0gcnRsOTJjZV9waHlfcXVlcnlfcmZfcmVnLAogCS5zZXRfcmZyZWcgPSBydGw5MmNlX3BoeV9zZXRfcmZfcmVnLAotCS5jbWRfc2VuZF9wYWNrZXQgPSBfcnRsOTJjX2NtZF9zZW5kX3BhY2tldCwKKwkuZ2V0X3JmcmVnID0gcnRsOTJjX3BoeV9xdWVyeV9yZl9yZWcsCiAJLnBoeV9yZjYwNTJfY29uZmlnID0gcnRsOTJjZV9waHlfcmY2MDUyX2NvbmZpZywKIAkucGh5X3JmNjA1Ml9zZXRfY2NrX3R4cG93ZXIgPSBydGw5MmNlX3BoeV9yZjYwNTJfc2V0X2Nja190eHBvd2VyLAogCS5waHlfcmY2MDUyX3NldF9vZmRtX3R4cG93ZXIgPSBydGw5MmNlX3BoeV9yZjYwNTJfc2V0X29mZG1fdHhwb3dlciwKIAkuY29uZmlnX2JiX3dpdGhfaGVhZGVyZmlsZSA9IF9ydGw5MmNlX3BoeV9jb25maWdfYmJfd2l0aF9oZWFkZXJmaWxlLAogCS5jb25maWdfYmJfd2l0aF9wZ2hlYWRlcmZpbGUgPSBfcnRsOTJjZV9waHlfY29uZmlnX2JiX3dpdGhfcGdoZWFkZXJmaWxlLAogCS5waHlfbGNfY2FsaWJyYXRlID0gX3J0bDkyY2VfcGh5X2xjX2NhbGlicmF0ZSwKLQkucGh5X3NldF9id19tb2RlX2NhbGxiYWNrID0gcnRsOTJjZV9waHlfc2V0X2J3X21vZGVfY2FsbGJhY2ssCiAJLmRtX2R5bmFtaWNfdHhwb3dlciA9IHJ0bDkyY2VfZG1fZHluYW1pY190eHBvd2VyLAogfTsKIAogc3RhdGljIHN0cnVjdCBydGxfbW9kX3BhcmFtcyBydGw5MmNlX21vZF9wYXJhbXMgPSB7Ci0JLnN3X2NyeXB0byA9IDAsCisJLnN3X2NyeXB0byA9IGZhbHNlLAorCS5pbmFjdGl2ZXBzID0gdHJ1ZSwKKwkuc3djdHJsX2xwcyA9IGZhbHNlLAorCS5md2N0cmxfbHBzID0gdHJ1ZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcnRsX2hhbF9jZmcgcnRsOTJjZV9oYWxfY2ZnID0geworCS5iYXJfaWQgPSAyLAorCS53cml0ZV9yZWFkYmFjayA9IHRydWUsCiAJLm5hbWUgPSAicnRsOTJjX3BjaSIsCiAJLmZ3X25hbWUgPSAicnRsd2lmaS9ydGw4MTkyY2Z3LmJpbiIsCiAJLm9wcyA9ICZydGw4MTkyY2VfaGFsX29wcywKQEAgLTE3NSw2ICsyNjgsOCBAQAogCS5tYXBzW0VGVVNFX0xPQURFUl9DTEtfRU5dID0gTE9BREVSX0NMS19FTiwKIAkubWFwc1tFRlVTRV9BTkE4TV0gPSBFRlVTRV9BTkE4TSwKIAkubWFwc1tFRlVTRV9IV1NFVF9NQVhfU0laRV0gPSBIV1NFVF9NQVhfU0laRSwKKwkubWFwc1tFRlVTRV9NQVhfU0VDVElPTl9NQVBdID0gRUZVU0VfTUFYX1NFQ1RJT04sCisJLm1hcHNbRUZVU0VfUkVBTF9DT05URU5UX1NJWkVdID0gRUZVU0VfUkVBTF9DT05URU5UX0xFTiwKIAogCS5tYXBzW1JXQ0FNXSA9IFJFR19DQU1DTUQsCiAJLm1hcHNbV0NBTUldID0gUkVHX0NBTVdSSVRFLApAQCAtMjM5LDcgKzMzNCw3IEBACiAJLm1hcHNbUlRMX1JDX0hUX1JBVEVNQ1MxNV0gPSBERVNDOTJDX1JBVEVNQ1MxNSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBydGw5MmNlX3BjaV9pZHNbXSBfX2RldmluaXRkYXRhID0geworREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocnRsOTJjZV9wY2lfaWRzKSA9IHsKIAl7UlRMX1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9SRUFMVEVLLCAweDgxOTEsIHJ0bDkyY2VfaGFsX2NmZyl9LAogCXtSVExfUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JFQUxURUssIDB4ODE3OCwgcnRsOTJjZV9oYWxfY2ZnKX0sCiAJe1JUTF9QQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUkVBTFRFSywgMHg4MTc3LCBydGw5MmNlX2hhbF9jZmcpfSwKQEAgLTI1Nyw3ICszNTIsMTMgQEAKIE1PRFVMRV9GSVJNV0FSRSgicnRsd2lmaS9ydGw4MTkyY2Z3LmJpbiIpOwogCiBtb2R1bGVfcGFyYW1fbmFtZWQoc3dlbmMsIHJ0bDkyY2VfbW9kX3BhcmFtcy5zd19jcnlwdG8sIGJvb2wsIDA0NDQpOworbW9kdWxlX3BhcmFtX25hbWVkKGlwcywgcnRsOTJjZV9tb2RfcGFyYW1zLmluYWN0aXZlcHMsIGJvb2wsIDA0NDQpOworbW9kdWxlX3BhcmFtX25hbWVkKHN3bHBzLCBydGw5MmNlX21vZF9wYXJhbXMuc3djdHJsX2xwcywgYm9vbCwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fbmFtZWQoZndscHMsIHJ0bDkyY2VfbW9kX3BhcmFtcy5md2N0cmxfbHBzLCBib29sLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0Moc3dlbmMsICJ1c2luZyBoYXJkd2FyZSBjcnlwdG8gKGRlZmF1bHQgMCBbaGFyZHdhcmVdKVxuIik7CitNT0RVTEVfUEFSTV9ERVNDKGlwcywgInVzaW5nIG5vIGxpbmsgcG93ZXIgc2F2ZSAoZGVmYXVsdCAxIGlzIG9wZW4pXG4iKTsKK01PRFVMRV9QQVJNX0RFU0MoZndscHMsICJ1c2luZyBsaW5rZWQgZncgY29udHJvbCBwb3dlciBzYXZlICIKKwkJICIoZGVmYXVsdCAxIGlzIG9wZW4pXG4iKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHJ0bDkyY2VfZHJpdmVyID0gewogCS5uYW1lID0gS0JVSUxEX01PRE5BTUUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9zdy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2Uvc3cuaAppbmRleCAzNmU2NTc2Li5iN2RjMzI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9zdy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3N3LmgKQEAgLTMzLDE5ICszMyw5IEBACiBpbnQgcnRsOTJjX2luaXRfc3dfdmFycyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiB2b2lkIHJ0bDkyY19kZWluaXRfc3dfdmFycyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiB2b2lkIHJ0bDkyY19pbml0X3Zhcl9tYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwotYm9vbCBfcnRsOTJjX2NtZF9zZW5kX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci12b2lkIHJ0bDkyY2VfcGh5X3JmNjA1Ml9zZXRfY2NrX3R4cG93ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCXU4ICpwcG93ZXJsZXZlbCk7Ci12b2lkIHJ0bDkyY2VfcGh5X3JmNjA1Ml9zZXRfb2ZkbV90eHBvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCQkgdTggKnBwb3dlcmxldmVsLCB1OCBjaGFubmVsKTsKIGJvb2wgX3J0bDkyY2VfcGh5X2NvbmZpZ19iYl93aXRoX2hlYWRlcmZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCQkgIHU4IGNvbmZpZ3R5cGUpOworCQkJCQkgICAgdTggY29uZmlndHlwZSk7CiBib29sIF9ydGw5MmNlX3BoeV9jb25maWdfYmJfd2l0aF9wZ2hlYWRlcmZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCQkgICAgdTggY29uZmlndHlwZSk7Ci12b2lkIF9ydGw5MmNlX3BoeV9sY19jYWxpYnJhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgaXMydCk7Ci11MzIgcnRsOTJjZV9waHlfcXVlcnlfcmZfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJICAgIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsIHUzMiByZWdhZGRyLCB1MzIgYml0bWFzayk7Ci12b2lkIHJ0bDkyY2VfcGh5X3NldF9id19tb2RlX2NhbGxiYWNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwkJCQkJICAgICAgdTggY29uZmlndHlwZSk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvdHJ4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS90cnguYwppbmRleCBhYTJiNTgxLi41NGIyYmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS90cnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS90cnguYwpAQCAtMzYsNDIgKzM2LDE2IEBACiAjaW5jbHVkZSAidHJ4LmgiCiAjaW5jbHVkZSAibGVkLmgiCiAKLXN0YXRpYyBlbnVtIHJ0bF9kZXNjX3FzZWwgX3J0bDkyY2VfbWFwX2h3cXVldWVfdG9fZndxdWV1ZShfX2xlMTYgZmMsCi0JCQkJCQkJICB1bnNpZ25lZCBpbnQKLQkJCQkJCQkgIHNrYl9xdWV1ZSkKK3N0YXRpYyB1OCBfcnRsOTJjZV9tYXBfaHdxdWV1ZV90b19md3F1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHU4IGh3X3F1ZXVlKQogewotCWVudW0gcnRsX2Rlc2NfcXNlbCBxc2VsOworCV9fbGUxNiBmYyA9IHJ0bF9nZXRfZmMoc2tiKTsKIAotCWlmICh1bmxpa2VseShpZWVlODAyMTFfaXNfYmVhY29uKGZjKSkpIHsKLQkJcXNlbCA9IFFTTFRfQkVBQ09OOwotCQlyZXR1cm4gcXNlbDsKLQl9CisJaWYgKHVubGlrZWx5KGllZWU4MDIxMV9pc19iZWFjb24oZmMpKSkKKwkJcmV0dXJuIFFTTFRfQkVBQ09OOworCWlmIChpZWVlODAyMTFfaXNfbWdtdChmYykpCisJCXJldHVybiBRU0xUX01HTlQ7CiAKLQlpZiAoaWVlZTgwMjExX2lzX21nbXQoZmMpKSB7Ci0JCXFzZWwgPSBRU0xUX01HTlQ7Ci0JCXJldHVybiBxc2VsOwotCX0KLQotCXN3aXRjaCAoc2tiX3F1ZXVlKSB7Ci0JY2FzZSBWT19RVUVVRToKLQkJcXNlbCA9IFFTTFRfVk87Ci0JCWJyZWFrOwotCWNhc2UgVklfUVVFVUU6Ci0JCXFzZWwgPSBRU0xUX1ZJOwotCQlicmVhazsKLQljYXNlIEJFX1FVRVVFOgotCQlxc2VsID0gUVNMVF9CRTsKLQkJYnJlYWs7Ci0JY2FzZSBCS19RVUVVRToKLQkJcXNlbCA9IFFTTFRfQks7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXFzZWwgPSBRU0xUX0JFOwotCQlSVF9BU1NFUlQoZmFsc2UsICgiQkUgcXVldWUsIHNrYl9xdWV1ZTolZCwiCi0JCQkJICAiIHNldCBxc2VsID0gMHglWFxuIiwgc2tiX3F1ZXVlLCBRU0xUX0JFKSk7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gcXNlbDsKKwlyZXR1cm4gc2tiLT5wcmlvcml0eTsKIH0KIAogc3RhdGljIGludCBfcnRsOTJjZV9yYXRlX21hcHBpbmcoYm9vbCBpc2h0LCB1OCBkZXNjX3JhdGUsIGJvb2wgZmlyc3RfYW1wZHUpCkBAIC0yNTUsNiArMjI5LDcgQEAKIAl1OCBldm0sIHB3ZGJfYWxsLCByZl9yeF9udW0gPSAwOwogCXU4IGksIG1heF9zcGF0aWFsX3N0cmVhbTsKIAl1MzIgcnNzaSwgdG90YWxfcnNzaSA9IDA7CisJYm9vbCBpbl9wb3dlcnNhdmVtb2RlID0gZmFsc2U7CiAJYm9vbCBpc19jY2tfcmF0ZTsKIAogCWlzX2Nja19yYXRlID0gUlhfSEFMX0lTX0NDS19SQVRFKHBkZXNjKTsKQEAgLTI3MCw5ICsyNDUsMTMgQEAKIAkJdTggcmVwb3J0LCBjY2tfaGlnaHB3cjsKIAkJY2NrX2J1ZiA9IChzdHJ1Y3QgcGh5X3N0c19jY2tfODE5MnNfdCAqKXBfZHJ2aW5mbzsKIAotCQljY2tfaGlnaHB3ciA9ICh1OCkgcnRsX2dldF9iYnJlZyhodywKLQkJCQkJIFJGUEdBMF9YQV9IU1NJUEFSQU1FVEVSMiwKLQkJCQkJIEJJVCg5KSk7CisJCWlmICghaW5fcG93ZXJzYXZlbW9kZSkKKwkJCWNja19oaWdocHdyID0gKHU4KSBydGxfZ2V0X2JicmVnKGh3LAorCQkJCQkJIFJGUEdBMF9YQV9IU1NJUEFSQU1FVEVSMiwKKwkJCQkJCSBCSVQoOSkpOworCQllbHNlCisJCQljY2tfaGlnaHB3ciA9IGZhbHNlOworCiAJCWlmICghY2NrX2hpZ2hwd3IpIHsKIAkJCXU4IGNja19hZ2NfcnB0ID0gY2NrX2J1Zi0+Y2NrX2FnY19ycHQ7CiAJCQlyZXBvcnQgPSBjY2tfYnVmLT5jY2tfYWdjX3JwdCAmIDB4YzA7CkBAIC0zOTgsNiArMzc3LDcgQEAKIAogCQlpZiAocnRscHJpdi0+c3RhdHMudWlfcnNzaS50b3RhbF9udW0rKyA+PQogCQkgICAgUEhZX1JTU0lfU0xJRF9XSU5fTUFYKSB7CisKIAkJCXJ0bHByaXYtPnN0YXRzLnVpX3Jzc2kudG90YWxfbnVtID0KIAkJCSAgICBQSFlfUlNTSV9TTElEX1dJTl9NQVg7CiAJCQlsYXN0X3Jzc2kgPQpAQCAtNDI0LDEwICs0MDQsNiBAQAogCWlmICghcHN0YXRzLT5pc19jY2sgJiYgcHN0YXRzLT5wYWNrZXRfdG9zZWxmKSB7CiAJCWZvciAocmZwYXRoID0gUkY5MF9QQVRIX0E7IHJmcGF0aCA8IHJ0bHBoeS0+bnVtX3RvdGFsX3JmcGF0aDsKIAkJICAgICByZnBhdGgrKykgewotCi0JCQlpZiAoIXJ0bDgxOTJfcGh5X2NoZWNrX2lzX2xlZ2FsX3JmcGF0aChodywgcmZwYXRoKSkKLQkJCQljb250aW51ZTsKLQogCQkJaWYgKHJ0bHByaXYtPnN0YXRzLnJ4X3Jzc2lfcGVyY2VudGFnZVtyZnBhdGhdID09IDApIHsKIAkJCQlydGxwcml2LT5zdGF0cy5yeF9yc3NpX3BlcmNlbnRhZ2VbcmZwYXRoXSA9CiAJCQkJICAgIHBzdGF0cy0+cnhfbWltb19zaWduYWxzdHJlbmd0aFtyZnBhdGhdOwpAQCAtNzIzLDcgKzY5OSw3IEBACiB2b2lkIHJ0bDkyY2VfdHhfZmlsbF9kZXNjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLCB1OCAqcGRlc2NfdHgsCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgdW5zaWduZWQgaW50IHF1ZXVlX2luZGV4KQorCQkJICB1OCBod19xdWV1ZSwgc3RydWN0IHJ0bF90Y2JfZGVzYyAqdGNiX2Rlc2MpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CkBAIC03MzIsMTYgKzcwOCw5IEBACiAJYm9vbCBkZWZhdWx0YWRhcHRlciA9IHRydWU7CiAJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKIAl1OCAqcGRlc2MgPSAodTggKikgcGRlc2NfdHg7Ci0Jc3RydWN0IHJ0bF90Y2JfZGVzYyB0Y2JfZGVzYzsKLQl1OCAqcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKLQl1OCB0aWQgPSBxY1swXSAmIElFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLOwogCXUxNiBzZXFfbnVtYmVyOwogCV9fbGUxNiBmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKLQl1OCByYXRlX2ZsYWcgPSBpbmZvLT5jb250cm9sLnJhdGVzWzBdLmZsYWdzOwotCi0JZW51bSBydGxfZGVzY19xc2VsIGZ3X3FzZWwgPQotCSAgICBfcnRsOTJjZV9tYXBfaHdxdWV1ZV90b19md3F1ZXVlKGZjLCBxdWV1ZV9pbmRleCk7Ci0KKwl1OCBmd19xc2VsID0gX3J0bDkyY2VfbWFwX2h3cXVldWVfdG9fZndxdWV1ZShza2IsIGh3X3F1ZXVlKTsKIAlib29sIGZpcnN0c2VnID0gKChoZHItPnNlcV9jdHJsICYKIAkJCSAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NDVExfRlJBRykpID09IDApOwogCkBAIC03NTEsNTYgKzcyMCw2OCBAQAogCWRtYV9hZGRyX3QgbWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKHJ0bHBjaS0+cGRldiwKIAkJCQkJICAgIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCiAJCQkJCSAgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwl1OCBid180MCA9IDA7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJc3RhID0gZ2V0X3N0YShodywgbWFjLT52aWYsIG1hYy0+YnNzaWQpOworCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCWJ3XzQwID0gbWFjLT5id180MDsKKwl9IGVsc2UgaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CisJCW1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCWlmIChzdGEpCisJCQlid180MCA9IHN0YS0+aHRfY2FwLmNhcCAmCisJCQkJSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDA7CisJfQogCiAJc2VxX251bWJlciA9IChsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKSAmIElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNDsKIAotCXJ0bF9nZXRfdGNiX2Rlc2MoaHcsIGluZm8sIHNrYiwgJnRjYl9kZXNjKTsKKwlydGxfZ2V0X3RjYl9kZXNjKGh3LCBpbmZvLCBzdGEsIHNrYiwgdGNiX2Rlc2MpOwogCiAJQ0xFQVJfUENJX1RYX0RFU0NfQ09OVEVOVChwZGVzYywgc2l6ZW9mKHN0cnVjdCB0eF9kZXNjXzkyYykpOwogCisJaWYgKGllZWU4MDIxMV9pc19udWxsZnVuYyhmYykgfHwgaWVlZTgwMjExX2lzX2N0bChmYykpIHsKKwkJZmlyc3RzZWcgPSB0cnVlOworCQlsYXN0c2VnID0gdHJ1ZTsKKwl9CiAJaWYgKGZpcnN0c2VnKSB7CiAJCVNFVF9UWF9ERVNDX09GRlNFVChwZGVzYywgVVNCX0hXREVTQ19IRUFERVJfTEVOKTsKIAotCQlTRVRfVFhfREVTQ19UWF9SQVRFKHBkZXNjLCB0Y2JfZGVzYy5od19yYXRlKTsKKwkJU0VUX1RYX0RFU0NfVFhfUkFURShwZGVzYywgdGNiX2Rlc2MtPmh3X3JhdGUpOwogCi0JCWlmICh0Y2JfZGVzYy51c2Vfc2hvcnRnaSB8fCB0Y2JfZGVzYy51c2Vfc2hvcnRwcmVhbWJsZSkKKwkJaWYgKHRjYl9kZXNjLT51c2Vfc2hvcnRnaSB8fCB0Y2JfZGVzYy0+dXNlX3Nob3J0cHJlYW1ibGUpCiAJCQlTRVRfVFhfREVTQ19EQVRBX1NIT1JUR0kocGRlc2MsIDEpOwogCi0JCWlmIChtYWMtPnRpZHNbdGlkXS5hZ2cuYWdnX3N0YXRlID09IFJUTF9BR0dfT04gJiYKLQkJICAgIGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkgeworCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSB7CiAJCQlTRVRfVFhfREVTQ19BR0dfQlJFQUsocGRlc2MsIDEpOwogCQkJU0VUX1RYX0RFU0NfTUFYX0FHR19OVU0ocGRlc2MsIDB4MTQpOwogCQl9CiAJCVNFVF9UWF9ERVNDX1NFUShwZGVzYywgc2VxX251bWJlcik7CiAKLQkJU0VUX1RYX0RFU0NfUlRTX0VOQUJMRShwZGVzYywgKCh0Y2JfZGVzYy5ydHNfZW5hYmxlICYmCi0JCQkJCQkhdGNiX2Rlc2MuCisJCVNFVF9UWF9ERVNDX1JUU19FTkFCTEUocGRlc2MsICgodGNiX2Rlc2MtPnJ0c19lbmFibGUgJiYKKwkJCQkJCSF0Y2JfZGVzYy0+CiAJCQkJCQljdHNfZW5hYmxlKSA/IDEgOiAwKSk7CiAJCVNFVF9UWF9ERVNDX0hXX1JUU19FTkFCTEUocGRlc2MsCi0JCQkJCSAgKCh0Y2JfZGVzYy5ydHNfZW5hYmxlCi0JCQkJCSAgICB8fCB0Y2JfZGVzYy5jdHNfZW5hYmxlKSA/IDEgOiAwKSk7Ci0JCVNFVF9UWF9ERVNDX0NUUzJTRUxGKHBkZXNjLCAoKHRjYl9kZXNjLmN0c19lbmFibGUpID8gMSA6IDApKTsKLQkJU0VUX1RYX0RFU0NfUlRTX1NUQkMocGRlc2MsICgodGNiX2Rlc2MucnRzX3N0YmMpID8gMSA6IDApKTsKKwkJCQkJICAoKHRjYl9kZXNjLT5ydHNfZW5hYmxlCisJCQkJCSAgICB8fCB0Y2JfZGVzYy0+Y3RzX2VuYWJsZSkgPyAxIDogMCkpOworCQlTRVRfVFhfREVTQ19DVFMyU0VMRihwZGVzYywgKCh0Y2JfZGVzYy0+Y3RzX2VuYWJsZSkgPyAxIDogMCkpOworCQlTRVRfVFhfREVTQ19SVFNfU1RCQyhwZGVzYywgKCh0Y2JfZGVzYy0+cnRzX3N0YmMpID8gMSA6IDApKTsKIAotCQlTRVRfVFhfREVTQ19SVFNfUkFURShwZGVzYywgdGNiX2Rlc2MucnRzX3JhdGUpOworCQlTRVRfVFhfREVTQ19SVFNfUkFURShwZGVzYywgdGNiX2Rlc2MtPnJ0c19yYXRlKTsKIAkJU0VUX1RYX0RFU0NfUlRTX0JXKHBkZXNjLCAwKTsKLQkJU0VUX1RYX0RFU0NfUlRTX1NDKHBkZXNjLCB0Y2JfZGVzYy5ydHNfc2MpOworCQlTRVRfVFhfREVTQ19SVFNfU0MocGRlc2MsIHRjYl9kZXNjLT5ydHNfc2MpOwogCQlTRVRfVFhfREVTQ19SVFNfU0hPUlQocGRlc2MsCi0JCQkJICAgICAgKCh0Y2JfZGVzYy5ydHNfcmF0ZSA8PSBERVNDOTJDX1JBVEU1NE0pID8KLQkJCQkgICAgICAodGNiX2Rlc2MucnRzX3VzZV9zaG9ydHByZWFtYmxlID8gMSA6IDApCi0JCQkJICAgICAgOiAodGNiX2Rlc2MucnRzX3VzZV9zaG9ydGdpID8gMSA6IDApKSk7CisJCQkJICAgICAgKCh0Y2JfZGVzYy0+cnRzX3JhdGUgPD0gREVTQzkyQ19SQVRFNTRNKSA/CisJCQkJICAgICAgICh0Y2JfZGVzYy0+cnRzX3VzZV9zaG9ydHByZWFtYmxlID8gMSA6IDApCisJCQkJICAgICAgIDogKHRjYl9kZXNjLT5ydHNfdXNlX3Nob3J0Z2kgPyAxIDogMCkpKTsKIAotCQlpZiAobWFjLT5id180MCkgewotCQkJaWYgKHRjYl9kZXNjLnBhY2tldF9idykgeworCQlpZiAoYndfNDApIHsKKwkJCWlmICh0Y2JfZGVzYy0+cGFja2V0X2J3KSB7CiAJCQkJU0VUX1RYX0RFU0NfREFUQV9CVyhwZGVzYywgMSk7CiAJCQkJU0VUX1RYX0RFU0NfVFhfU1VCX0NBUlJJRVIocGRlc2MsIDMpOwogCQkJfSBlbHNlIHsKIAkJCQlTRVRfVFhfREVTQ19EQVRBX0JXKHBkZXNjLCAwKTsKLQotCQkJCWlmIChyYXRlX2ZsYWcgJiBJRUVFODAyMTFfVFhfUkNfRFVQX0RBVEEpIHsKLQkJCQkJU0VUX1RYX0RFU0NfVFhfU1VCX0NBUlJJRVIocGRlc2MsCi0JCQkJCQkJbWFjLT5jdXJfNDBfcHJpbWVfc2MpOwotCQkJCX0KKwkJCQlTRVRfVFhfREVTQ19UWF9TVUJfQ0FSUklFUihwZGVzYywKKwkJCQkJCSBtYWMtPmN1cl80MF9wcmltZV9zYyk7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlTRVRfVFhfREVTQ19EQVRBX0JXKHBkZXNjLCAwKTsKQEAgLTgxMCwxMyArNzkxLDEwIEBACiAJCVNFVF9UWF9ERVNDX0xJTklQKHBkZXNjLCAwKTsKIAkJU0VUX1RYX0RFU0NfUEtUX1NJWkUocGRlc2MsICh1MTYpIHNrYi0+bGVuKTsKIAotCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YShtYWMtPnZpZiwgbWFjLT5ic3NpZCk7CiAJCWlmIChzdGEpIHsKIAkJCXU4IGFtcGR1X2RlbnNpdHkgPSBzdGEtPmh0X2NhcC5hbXBkdV9kZW5zaXR5OwogCQkJU0VUX1RYX0RFU0NfQU1QRFVfREVOU0lUWShwZGVzYywgYW1wZHVfZGVuc2l0eSk7CiAJCX0KLQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkJaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5KSB7CiAJCQlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mID0KQEAgLTg0NCw3ICs4MjIsNyBAQAogCQlTRVRfVFhfREVTQ19EQVRBX1JBVEVfRkJfTElNSVQocGRlc2MsIDB4MUYpOwogCQlTRVRfVFhfREVTQ19SVFNfUkFURV9GQl9MSU1JVChwZGVzYywgMHhGKTsKIAkJU0VUX1RYX0RFU0NfRElTQUJMRV9GQihwZGVzYywgMCk7Ci0JCVNFVF9UWF9ERVNDX1VTRV9SQVRFKHBkZXNjLCB0Y2JfZGVzYy51c2VfZHJpdmVyX3JhdGUgPyAxIDogMCk7CisJCVNFVF9UWF9ERVNDX1VTRV9SQVRFKHBkZXNjLCB0Y2JfZGVzYy0+dXNlX2RyaXZlcl9yYXRlID8gMSA6IDApOwogCiAJCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKSB7CiAJCQlpZiAobWFjLT5yZGdfZW4pIHsKQEAgLTg1NSwyNCArODMzLDI0IEBACiAJCQl9CiAJCX0KIAl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlTRVRfVFhfREVTQ19GSVJTVF9TRUcocGRlc2MsIChmaXJzdHNlZyA/IDEgOiAwKSk7CiAJU0VUX1RYX0RFU0NfTEFTVF9TRUcocGRlc2MsIChsYXN0c2VnID8gMSA6IDApKTsKIAogCVNFVF9UWF9ERVNDX1RYX0JVRkZFUl9TSVpFKHBkZXNjLCAodTE2KSBza2ItPmxlbik7CiAKLQlTRVRfVFhfREVTQ19UWF9CVUZGRVJfQUREUkVTUyhwZGVzYywgY3B1X3RvX2xlMzIobWFwcGluZykpOworCVNFVF9UWF9ERVNDX1RYX0JVRkZFUl9BRERSRVNTKHBkZXNjLCBtYXBwaW5nKTsKIAogCWlmIChydGxwcml2LT5kbS51c2VyYW1hc2spIHsKLQkJU0VUX1RYX0RFU0NfUkFURV9JRChwZGVzYywgdGNiX2Rlc2MucmF0cl9pbmRleCk7Ci0JCVNFVF9UWF9ERVNDX01BQ0lEKHBkZXNjLCB0Y2JfZGVzYy5tYWNfaWQpOworCQlTRVRfVFhfREVTQ19SQVRFX0lEKHBkZXNjLCB0Y2JfZGVzYy0+cmF0cl9pbmRleCk7CisJCVNFVF9UWF9ERVNDX01BQ0lEKHBkZXNjLCB0Y2JfZGVzYy0+bWFjX2lkKTsKIAl9IGVsc2UgewotCQlTRVRfVFhfREVTQ19SQVRFX0lEKHBkZXNjLCAweEMgKyB0Y2JfZGVzYy5yYXRyX2luZGV4KTsKLQkJU0VUX1RYX0RFU0NfTUFDSUQocGRlc2MsIHRjYl9kZXNjLnJhdHJfaW5kZXgpOworCQlTRVRfVFhfREVTQ19SQVRFX0lEKHBkZXNjLCAweEMgKyB0Y2JfZGVzYy0+cmF0cl9pbmRleCk7CisJCVNFVF9UWF9ERVNDX01BQ0lEKHBkZXNjLCB0Y2JfZGVzYy0+cmF0cl9pbmRleCk7CiAJfQogCi0JaWYgKCghaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgJiYgcHBzYy0+bGVpc3VyZV9wcyAmJgotCSAgICBwcHNjLT5md2N0cmxfbHBzKSB7CisJaWYgKCghaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgJiYgcHBzYy0+ZndjdHJsX2xwcykgewogCQlTRVRfVFhfREVTQ19IV1NFUV9FTihwZGVzYywgMSk7CiAJCVNFVF9UWF9ERVNDX1BLVF9JRChwZGVzYywgOCk7CiAKQEAgLTkyMyw3ICs5MDEsNyBAQAogCiAJU0VUX1RYX0RFU0NfVFhfQlVGRkVSX1NJWkUocGRlc2MsICh1MTYpIChza2ItPmxlbikpOwogCi0JU0VUX1RYX0RFU0NfVFhfQlVGRkVSX0FERFJFU1MocGRlc2MsIGNwdV90b19sZTMyKG1hcHBpbmcpKTsKKwlTRVRfVFhfREVTQ19UWF9CVUZGRVJfQUREUkVTUyhwZGVzYywgbWFwcGluZyk7CiAKIAlTRVRfVFhfREVTQ19SQVRFX0lEKHBkZXNjLCA3KTsKIAlTRVRfVFhfREVTQ19NQUNJRChwZGVzYywgMCk7CkBAIC0xMDIxLDcgKzk5OSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotdm9pZCBydGw5MmNlX3R4X3BvbGxpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHVuc2lnbmVkIGludCBod19xdWV1ZSkKK3ZvaWQgcnRsOTJjZV90eF9wb2xsaW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBod19xdWV1ZSkKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJaWYgKGh3X3F1ZXVlID09IEJFQUNPTl9RVUVVRSkgewpAQCAtMTAzMiwzNSArMTAxMCwzIEBACiAJfQogfQogCi1ib29sIF9ydGw5MmNfY21kX3NlbmRfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKLQlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOwotCXN0cnVjdCBydGw4MTkyX3R4X3JpbmcgKnJpbmc7Ci0Jc3RydWN0IHJ0bF90eF9kZXNjICpwZGVzYzsKLQl1OCBvd247Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3Qgc2tfYnVmZiAqcHNrYiA9IE5VTEw7Ci0KLQlyaW5nID0gJnJ0bHBjaS0+dHhfcmluZ1tCRUFDT05fUVVFVUVdOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJ0bHByaXYtPmxvY2tzLmlycV90aF9sb2NrLCBmbGFncyk7Ci0KLQlwc2tiID0gX19za2JfZGVxdWV1ZSgmcmluZy0+cXVldWUpOwotCWlmIChwc2tiKQotCQlrZnJlZV9za2IocHNrYik7Ci0KLQlwZGVzYyA9ICZyaW5nLT5kZXNjWzBdOwotCW93biA9ICh1OCkgcnRscHJpdi0+Y2ZnLT5vcHMtPmdldF9kZXNjKCh1OCAqKSBwZGVzYywgdHJ1ZSwgSFdfREVTQ19PV04pOwotCi0JcnRscHJpdi0+Y2ZnLT5vcHMtPmZpbGxfdHhfY21kZGVzYyhodywgKHU4ICopIHBkZXNjLCAxLCAxLCBza2IpOwotCi0JX19za2JfcXVldWVfdGFpbCgmcmluZy0+cXVldWUsIHNrYik7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5pcnFfdGhfbG9jaywgZmxhZ3MpOwotCi0JcnRscHJpdi0+Y2ZnLT5vcHMtPnR4X3BvbGxpbmcoaHcsIEJFQUNPTl9RVUVVRSk7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3RyeC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvdHJ4LmgKaW5kZXggODAzYWRjYy4uMGYxMTc3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvdHJ4LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvdHJ4LmgKQEAgLTUzMiw5ICs1MzIsOSBAQAogI2RlZmluZSBDTEVBUl9QQ0lfVFhfREVTQ19DT05URU5UKF9fcGRlc2MsIF9zaXplKQlcCiBkbyB7CQkJCQkJCVwKIAlpZiAoX3NpemUgPiBUWF9ERVNDX05FWFRfREVTQ19PRkZTRVQpCQlcCi0JCW1lbXNldCgodm9pZCAqKV9fcGRlc2MsIDAsIFRYX0RFU0NfTkVYVF9ERVNDX09GRlNFVCk7CVwKKwkJbWVtc2V0KF9fcGRlc2MsIDAsIFRYX0RFU0NfTkVYVF9ERVNDX09GRlNFVCk7CVwKIAllbHNlCQkJCQkJXAotCQltZW1zZXQoKHZvaWQgKilfX3BkZXNjLCAwLCBfc2l6ZSk7CVwKKwkJbWVtc2V0KF9fcGRlc2MsIDAsIF9zaXplKTsJXAogfSB3aGlsZSAoMCk7CiAKICNkZWZpbmUgUlhfSEFMX0lTX0NDS19SQVRFKF9wZGVzYylcCkBAIC03MjQsMTcgKzcyNCwxNiBAQAogdm9pZCBydGw5MmNlX3R4X2ZpbGxfZGVzYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCSAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKIAkJCSAgdTggKnBkZXNjLCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCi0JCQkgIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBxc2VsKTsKKwkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaHdfcXVldWUsCisJCQkgIHN0cnVjdCBydGxfdGNiX2Rlc2MgKnB0Y2JfZGVzYyk7CiBib29sIHJ0bDkyY2VfcnhfcXVlcnlfZGVzYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCSAgIHN0cnVjdCBydGxfc3RhdHMgKnN0YXRzLAogCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cywKIAkJCSAgIHU4ICpwZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB2b2lkIHJ0bDkyY2Vfc2V0X2Rlc2ModTggKnBkZXNjLCBib29sIGlzdHgsIHU4IGRlc2NfbmFtZSwgdTggKnZhbCk7CiB1MzIgcnRsOTJjZV9nZXRfZGVzYyh1OCAqcGRlc2MsIGJvb2wgaXN0eCwgdTggZGVzY19uYW1lKTsKLXZvaWQgcnRsOTJjZV90eF9wb2xsaW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1bnNpZ25lZCBpbnQgaHdfcXVldWUpOwordm9pZCBydGw5MmNlX3R4X3BvbGxpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGh3X3F1ZXVlKTsKIHZvaWQgcnRsOTJjZV90eF9maWxsX2NtZGRlc2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpwZGVzYywKIAkJCSAgICAgYm9vbCBiX2ZpcnN0c2VnLCBib29sIGJfbGFzdHNlZywKIAkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1ib29sIF9ydGw5MmNfY21kX3NlbmRfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS9ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY3UvaHcuYwppbmRleCA5NDQ0ZTc2Li41MmUyYWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS9ody5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L2h3LmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJtYWMuaCIKICNpbmNsdWRlICJkbS5oIgogI2luY2x1ZGUgImh3LmgiCisjaW5jbHVkZSAiLi4vcnRsODE5MmNlL2h3LmgiCiAjaW5jbHVkZSAidHJ4LmgiCiAjaW5jbHVkZSAibGVkLmgiCiAjaW5jbHVkZSAidGFibGUuaCIKQEAgLTYwNSwxMCArNjA2LDEwIEBACiAJaWYgKCFJU19OT1JNQUxfQ0hJUChydGxoYWwtPnZlcnNpb24pKQogCQlyZXR1cm47CiAJdG1wX3UxYiA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUkVHXzkzNDZDUik7Ci0JcnRsZWZ1c2UtPmVwcm9tdHlwZSA9ICh0bXBfdTFiICYgRUVQUk9NU0VMKSA/CisJcnRsZWZ1c2UtPmVwcm9tdHlwZSA9ICh0bXBfdTFiICYgQk9PVF9GUk9NX0VFUFJPTSkgPwogCQkJICAgICAgIEVFUFJPTV85M0M0NiA6IEVFUFJPTV9CT09UX0VGVVNFOwogCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0RNRVNHLCAoIkJvb3QgZnJvbSAlc1xuIiwKLQkJICh0bXBfdTFiICYgRUVQUk9NU0VMKSA/ICJFRVJST00iIDogIkVGVVNFIikpOworCQkgKHRtcF91MWIgJiBCT09UX0ZST01fRUVQUk9NKSA/ICJFRVJST00iIDogIkVGVVNFIikpOwogCXJ0bGVmdXNlLT5hdXRvbG9hZF9mYWlsZmxhZyA9ICh0bXBfdTFiICYgRUVQUk9NX0VOKSA/IGZhbHNlIDogdHJ1ZTsKIAlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19MT1VELCAoIkF1dG9sb2FkICVzXG4iLAogCQkgKHRtcF91MWIgJiBFRVBST01fRU4pID8gIk9LISEiIDogIkVSUiEhIikpOwpAQCAtOTIxLDcgKzkyMiw3IEBACiAJCQkJCSAgICAgICB1OCBvdXRfZXBfbnVtLAogCQkJCQkgICAgICAgdTggcXVldWVfc2VsKQogewotCXU4CWhxX3NlbGU7CisJdTggaHFfc2VsZSA9IDA7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCiAJc3dpdGNoIChvdXRfZXBfbnVtKSB7CkBAIC05NzcsNyArOTc4LDcgQEAKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKIAotCW1hYy0+cnhfY29uZiA9IChSQ1JfQVBNIHwgUkNSX0FNIHwgUkNSX0FERiB8IFJDUl9BQiB8IFJDUl9BUFBfRkNTIHwKKwltYWMtPnJ4X2NvbmYgPSAoUkNSX0FQTSB8IFJDUl9BTSB8IFJDUl9BREYgfCBSQ1JfQUIgfCBSQ1JfQVBQRkNTIHwKIAkJICAgICAgUkNSX0FQUF9JQ1YgfCBSQ1JfQU1GIHwgUkNSX0hUQ19MT0NfQ1RSTCB8CiAJCSAgICAgIFJDUl9BUFBfTUlDIHwgUkNSX0FQUF9QSFlTVFMgfCBSQ1JfQUNSQzMyKTsKIAlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX1JDUiwgbWFjLT5yeF9jb25mKTsKQEAgLTIxODIsNyArMjE4Myw5IEBACiAJfQogfQogCi12b2lkIHJ0bDkyY3VfdXBkYXRlX2hhbF9yYXRlX3RhYmxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQordm9pZCBydGw5MmN1X3VwZGF0ZV9oYWxfcmF0ZV90YWJsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJCSAgIHU4IHJzc2lfbGV2ZWwpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS9ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY3UvaHcuaAppbmRleCA2MmFmNTU1Li4zMmY4NWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS9ody5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L2h3LmgKQEAgLTk4LDEzICs5OCwxNCBAQAogCQkJCSAgIHUzMiBhZGRfbXNyLCB1MzIgcm1fbXNyKTsKIHZvaWQgcnRsOTJjdV9nZXRfaHdfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCB2YXJpYWJsZSwgdTggKnZhbCk7CiB2b2lkIHJ0bDkyY3Vfc2V0X2h3X3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggdmFyaWFibGUsIHU4ICp2YWwpOwotdm9pZCBydGw5MmN1X3VwZGF0ZV9oYWxfcmF0ZV90YWJsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyY3VfdXBkYXRlX2hhbF9yYXRlX3RhYmxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCQkJICAgdTggcnNzaV9sZXZlbCk7CiB2b2lkIHJ0bDkyY3VfdXBkYXRlX2hhbF9yYXRlX21hc2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHJzc2lfbGV2ZWwpOwogCiB2b2lkIHJ0bDkyY3VfdXBkYXRlX2NoYW5uZWxfYWNjZXNzX3NldHRpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogYm9vbCBydGw5MmN1X2dwaW9fcmFkaW9fb25fb2ZmX2NoZWNraW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqIHZhbGlkKTsKIHZvaWQgcnRsOTJjdV9zZXRfY2hlY2tfYnNzaWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgY2hlY2tfYnNzaWQpOwotdTggX3J0bDkyY19nZXRfY2hubF9ncm91cCh1OCBjaG5sKTsKIGludCBydGw5MmNfZG93bmxvYWRfZncoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogdm9pZCBydGw5MmNfc2V0X2Z3X3B3cm1vZGVfY21kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBtb2RlKTsKIHZvaWQgcnRsOTJjX3NldF9md19yc3ZkcGFnZXBrdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBkbF9maW5pc2hlZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS9waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3BoeS5jCmluZGV4IDRlMDIwZTYuLjlhM2QwMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3BoeS5jCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSAidGFibGUuaCIKIAogdTMyIHJ0bDkyY3VfcGh5X3F1ZXJ5X3JmX3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICBlbnVtIHJhZGlvX3BhdGggcmZwYXRoLCB1MzIgcmVnYWRkciwgdTMyIGJpdG1hc2spCisJCQkgICAgIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsIHUzMiByZWdhZGRyLCB1MzIgYml0bWFzaykKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJdTMyIG9yaWdpbmFsX3ZhbHVlLCByZWFkYmFja192YWx1ZSwgYml0c2hpZnQ7CkBAIC02NCw4ICs2NCw4IEBACiB9CiAKIHZvaWQgcnRsOTJjdV9waHlfc2V0X3JmX3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsCi0JCQkgICB1MzIgcmVnYWRkciwgdTMyIGJpdG1hc2ssIHUzMiBkYXRhKQorCQkJICAgIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsCisJCQkgICAgdTMyIHJlZ2FkZHIsIHUzMiBiaXRtYXNrLCB1MzIgZGF0YSkKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKQEAgLTE2Myw3ICsxNjMsNyBAQAogfQogCiBib29sIF9ydGw5MmN1X3BoeV9jb25maWdfYmJfd2l0aF9oZWFkZXJmaWxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCQkJICB1OCBjb25maWd0eXBlKQorCQkJCQkgICAgdTggY29uZmlndHlwZSkKIHsKIAlpbnQgaTsKIAl1MzIgKnBoeV9yZWdhcnJheV90YWJsZTsKQEAgLTIyMyw3ICsyMjMsNyBAQAogfQogCiBib29sIF9ydGw5MmN1X3BoeV9jb25maWdfYmJfd2l0aF9wZ2hlYWRlcmZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCQkgICAgdTggY29uZmlndHlwZSkKKwkJCQkJICAgICAgdTggY29uZmlndHlwZSkKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKQEAgLTQ1OSw3ICs0NTksNyBAQAogCX0KIH0KIAotYm9vbCBfcnRsOTJjdV9waHlfc2V0X3JmX3Bvd2VyX3N0YXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorc3RhdGljIGJvb2wgX3J0bDkyY3VfcGh5X3NldF9yZl9wb3dlcl9zdGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkJICAgIGVudW0gcmZfcHdyc3RhdGUgcmZwd3Jfc3RhdGUpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwpAQCAtNTk1LDcgKzU5NSw3IEBACiB9CiAKIGJvb2wgcnRsOTJjdV9waHlfc2V0X3JmX3Bvd2VyX3N0YXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgIGVudW0gcmZfcHdyc3RhdGUgcmZwd3Jfc3RhdGUpCisJCQkJICAgIGVudW0gcmZfcHdyc3RhdGUgcmZwd3Jfc3RhdGUpCiB7CiAJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CiAJYm9vbCBicmVzdWx0ID0gZmFsc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS9waHkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3BoeS5oCmluZGV4IDA2Mjk5NTUuLmZmODFhNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3BoeS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3BoeS5oCkBAIC0zNCwzICszNCwxNyBAQAogdm9pZCBydGw5MmNfcGh5X3NldF9pbyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiBib29sIF9ydGw5MmN1X3BoeV9jb25maWdfbWFjX3dpdGhfaGVhZGVyZmlsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiBib29sIHJ0bDkyY3VfcGh5X2JiX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit1MzIgcnRsOTJjdV9waHlfcXVlcnlfcmZfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICBlbnVtIHJhZGlvX3BhdGggcmZwYXRoLCB1MzIgcmVnYWRkciwgdTMyIGJpdG1hc2spOwordm9pZCBydGw5MmN1X3BoeV9zZXRfcmZfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsCisJCQkgICAgdTMyIHJlZ2FkZHIsIHUzMiBiaXRtYXNrLCB1MzIgZGF0YSk7Citib29sIHJ0bDkyY3VfcGh5X21hY19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworYm9vbCBfcnRsOTJjdV9waHlfY29uZmlnX2JiX3dpdGhfcGdoZWFkZXJmaWxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgICAgICB1OCBjb25maWd0eXBlKTsKK3ZvaWQgX3J0bDkyY3VfcGh5X2xjX2NhbGlicmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBpczJ0KTsKK2Jvb2wgX3J0bDkyY3VfcGh5X2NvbmZpZ19iYl93aXRoX2hlYWRlcmZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSAgICB1OCBjb25maWd0eXBlKTsKK3ZvaWQgcnRsOTJjdV9waHlfc2V0X2J3X21vZGVfY2FsbGJhY2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworYm9vbCBydGw5MmN1X3BoeV9zZXRfcmZfcG93ZXJfc3RhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgIGVudW0gcmZfcHdyc3RhdGUgcmZwd3Jfc3RhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY3UvcmYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3JmLmMKaW5kZXggMWM3OWMyMi4uYzc1NzZlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY3UvcmYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS9yZi5jCkBAIC02Miw3ICs2Miw3IEBACiB9CiAKIHZvaWQgcnRsOTJjdV9waHlfcmY2MDUyX3NldF9jY2tfdHhwb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgICAgdTggKnBwb3dlcmxldmVsKQorCQkJCQl1OCAqcHBvd2VybGV2ZWwpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CkBAIC0zODksNyArMzg5LDcgQEAKIH0KIAogdm9pZCBydGw5MmN1X3BoeV9yZjYwNTJfc2V0X29mZG1fdHhwb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkJdTggKnBwb3dlcmxldmVsLCB1OCBjaGFubmVsKQorCQkJCQkgdTggKnBwb3dlcmxldmVsLCB1OCBjaGFubmVsKQogewogCXUzMiB3cml0ZVZhbFsyXSwgcG93ZXJCYXNlMFsyXSwgcG93ZXJCYXNlMVsyXTsKIAl1OCBpbmRleCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS9yZi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY3UvcmYuaAppbmRleCA4NmMyNzI4Li41MDBhMjA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS9yZi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3JmLmgKQEAgLTQzLDUgKzQzLDkgQEAKIGJvb2wgcnRsOTJjdV9waHlfcmY2MDUyX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiBib29sIHJ0bDkyY3VfcGh5X2NvbmZpZ19yZl93aXRoX2hlYWRlcmZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCSAgZW51bSByYWRpb19wYXRoIHJmcGF0aCk7Cit2b2lkIHJ0bDkyY3VfcGh5X3JmNjA1Ml9zZXRfY2NrX3R4cG93ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCXU4ICpwcG93ZXJsZXZlbCk7Cit2b2lkIHJ0bDkyY3VfcGh5X3JmNjA1Ml9zZXRfb2ZkbV90eHBvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgdTggKnBwb3dlcmxldmVsLCB1OCBjaGFubmVsKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS9zdy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY3Uvc3cuYwppbmRleCA3MTI0NGEzLi5iZWU3YzE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS9zdy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3N3LmMKQEAgLTk0LDcgKzk0LDcgQEAKIAkudXBkYXRlX2ludGVycnVwdF9tYXNrID0gcnRsOTJjdV91cGRhdGVfaW50ZXJydXB0X21hc2ssCiAJLmdldF9od19yZWcgPSBydGw5MmN1X2dldF9od19yZWcsCiAJLnNldF9od19yZWcgPSBydGw5MmN1X3NldF9od19yZWcsCi0JLnVwZGF0ZV9yYXRlX3RhYmxlID0gcnRsOTJjdV91cGRhdGVfaGFsX3JhdGVfdGFibGUsCisJLnVwZGF0ZV9yYXRlX3RibCA9IHJ0bDkyY3VfdXBkYXRlX2hhbF9yYXRlX3RhYmxlLAogCS51cGRhdGVfcmF0ZV9tYXNrID0gcnRsOTJjdV91cGRhdGVfaGFsX3JhdGVfbWFzaywKIAkuZmlsbF90eF9kZXNjID0gcnRsOTJjdV90eF9maWxsX2Rlc2MsCiAJLmZpbGxfZmFrZV90eGRlc2MgPSBydGw5MmN1X2ZpbGxfZmFrZV90eGRlc2MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS90cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3RyeC5jCmluZGV4IGQwYjBkNDMuLjNhOTJiYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3RyeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3RyeC5jCkBAIC0zNzIsNyArMzcyLDcgQEAKIAlfX2xlMTYgZmM7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAotCW1lbXNldChyeF9zdGF0dXMsIDAsIHNpemVvZihyeF9zdGF0dXMpKTsKKwltZW1zZXQocnhfc3RhdHVzLCAwLCBzaXplb2YoKnJ4X3N0YXR1cykpOwogCXJ4ZGVzYwk9IHNrYi0+ZGF0YTsKIAlza2JfbGVuCT0gc2tiLT5sZW47CiAJZHJ2aW5mb19sZW4gPSAoR0VUX1JYX0RFU0NfRFJWSU5GT19TSVpFKHJ4ZGVzYykgKiBSVExfUlhfRFJWX0lORk9fVU5JVCk7CkBAIC00MzQsNyArNDM0LDcgQEAKIAkJICIweCUwMlhcbiIsIGZjLCAodTMyKWhkci0+YWRkcjFbMF0sICh1MzIpaGRyLT5hZGRyMVsxXSwKIAkJICh1MzIpaGRyLT5hZGRyMVsyXSwgKHUzMiloZHItPmFkZHIxWzNdLCAodTMyKWhkci0+YWRkcjFbNF0sCiAJCSAodTMyKWhkci0+YWRkcjFbNV0pKTsKLQltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksICZyeF9zdGF0dXMsIHNpemVvZihyeF9zdGF0dXMpKTsKKwltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksIHJ4X3N0YXR1cywgc2l6ZW9mKCpyeF9zdGF0dXMpKTsKIAlpZWVlODAyMTFfcnhfaXJxc2FmZShodywgc2tiKTsKIH0KIApAQCAtNDk4LDE0ICs0OTgsMTQgQEAKIHZvaWQgcnRsOTJjdV90eF9maWxsX2Rlc2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsIHU4ICpwZGVzY190eCwKIAkJCSAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICB1bnNpZ25lZCBpbnQgcXVldWVfaW5kZXgpCisJCQkgIHU4IHF1ZXVlX2luZGV4LAorCQkJICBzdHJ1Y3QgcnRsX3RjYl9kZXNjICp0Y2JfZGVzYykKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKIAlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKIAlib29sIGRlZmF1bHRhZGFwdGVyID0gdHJ1ZTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhOwotCXN0cnVjdCBydGxfdGNiX2Rlc2MgdGNiX2Rlc2M7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSA9IGluZm8tPmNvbnRyb2wuc3RhID0gaW5mby0+Y29udHJvbC5zdGE7CiAJdTggKnFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7CiAJdTggdGlkID0gcWNbMF0gJiBJRUVFODAyMTFfUU9TX0NUTF9USURfTUFTSzsKIAl1MTYgc2VxX251bWJlcjsKQEAgLTUxNywxNSArNTE3LDE1IEBACiAJdTggKnR4ZGVzYzsKIAogCXNlcV9udW1iZXIgPSAobGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCkgJiBJRUVFODAyMTFfU0NUTF9TRVEpID4+IDQ7Ci0JcnRsX2dldF90Y2JfZGVzYyhodywgaW5mbywgc2tiLCAmdGNiX2Rlc2MpOworCXJ0bF9nZXRfdGNiX2Rlc2MoaHcsIGluZm8sIHN0YSwgc2tiLCB0Y2JfZGVzYyk7CiAJdHhkZXNjID0gKHU4ICopc2tiX3B1c2goc2tiLCBSVExfVFhfSEVBREVSX1NJWkUpOwogCW1lbXNldCh0eGRlc2MsIDAsIFJUTF9UWF9IRUFERVJfU0laRSk7CiAJU0VUX1RYX0RFU0NfUEtUX1NJWkUodHhkZXNjLCBwa3RsZW4pOwogCVNFVF9UWF9ERVNDX0xJTklQKHR4ZGVzYywgMCk7CiAJU0VUX1RYX0RFU0NfUEtUX09GRlNFVCh0eGRlc2MsIFJUTF9EVU1NWV9PRkZTRVQpOwogCVNFVF9UWF9ERVNDX09GRlNFVCh0eGRlc2MsIFJUTF9UWF9IRUFERVJfU0laRSk7Ci0JU0VUX1RYX0RFU0NfVFhfUkFURSh0eGRlc2MsIHRjYl9kZXNjLmh3X3JhdGUpOwotCWlmICh0Y2JfZGVzYy51c2Vfc2hvcnRnaSB8fCB0Y2JfZGVzYy51c2Vfc2hvcnRwcmVhbWJsZSkKKwlTRVRfVFhfREVTQ19UWF9SQVRFKHR4ZGVzYywgdGNiX2Rlc2MtPmh3X3JhdGUpOworCWlmICh0Y2JfZGVzYy0+dXNlX3Nob3J0Z2kgfHwgdGNiX2Rlc2MtPnVzZV9zaG9ydHByZWFtYmxlKQogCQlTRVRfVFhfREVTQ19EQVRBX1NIT1JUR0kodHhkZXNjLCAxKTsKIAlpZiAobWFjLT50aWRzW3RpZF0uYWdnLmFnZ19zdGF0ZSA9PSBSVExfQUdHX09OICYmCiAJCSAgICBpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpIHsKQEAgLTUzNSwyMSArNTM1LDIxIEBACiAJCVNFVF9UWF9ERVNDX0FHR19CUkVBSyh0eGRlc2MsIDEpOwogCX0KIAlTRVRfVFhfREVTQ19TRVEodHhkZXNjLCBzZXFfbnVtYmVyKTsKLQlTRVRfVFhfREVTQ19SVFNfRU5BQkxFKHR4ZGVzYywgKCh0Y2JfZGVzYy5ydHNfZW5hYmxlICYmCi0JCQkgICAgICAgIXRjYl9kZXNjLmN0c19lbmFibGUpID8gMSA6IDApKTsKLQlTRVRfVFhfREVTQ19IV19SVFNfRU5BQkxFKHR4ZGVzYywgKCh0Y2JfZGVzYy5ydHNfZW5hYmxlIHx8Ci0JCQkJICB0Y2JfZGVzYy5jdHNfZW5hYmxlKSA/IDEgOiAwKSk7Ci0JU0VUX1RYX0RFU0NfQ1RTMlNFTEYodHhkZXNjLCAoKHRjYl9kZXNjLmN0c19lbmFibGUpID8gMSA6IDApKTsKLQlTRVRfVFhfREVTQ19SVFNfU1RCQyh0eGRlc2MsICgodGNiX2Rlc2MucnRzX3N0YmMpID8gMSA6IDApKTsKLQlTRVRfVFhfREVTQ19SVFNfUkFURSh0eGRlc2MsIHRjYl9kZXNjLnJ0c19yYXRlKTsKKwlTRVRfVFhfREVTQ19SVFNfRU5BQkxFKHR4ZGVzYywgKCh0Y2JfZGVzYy0+cnRzX2VuYWJsZSAmJgorCQkJICAgICAgICF0Y2JfZGVzYy0+Y3RzX2VuYWJsZSkgPyAxIDogMCkpOworCVNFVF9UWF9ERVNDX0hXX1JUU19FTkFCTEUodHhkZXNjLCAoKHRjYl9kZXNjLT5ydHNfZW5hYmxlIHx8CisJCQkJICB0Y2JfZGVzYy0+Y3RzX2VuYWJsZSkgPyAxIDogMCkpOworCVNFVF9UWF9ERVNDX0NUUzJTRUxGKHR4ZGVzYywgKCh0Y2JfZGVzYy0+Y3RzX2VuYWJsZSkgPyAxIDogMCkpOworCVNFVF9UWF9ERVNDX1JUU19TVEJDKHR4ZGVzYywgKCh0Y2JfZGVzYy0+cnRzX3N0YmMpID8gMSA6IDApKTsKKwlTRVRfVFhfREVTQ19SVFNfUkFURSh0eGRlc2MsIHRjYl9kZXNjLT5ydHNfcmF0ZSk7CiAJU0VUX1RYX0RFU0NfUlRTX0JXKHR4ZGVzYywgMCk7Ci0JU0VUX1RYX0RFU0NfUlRTX1NDKHR4ZGVzYywgdGNiX2Rlc2MucnRzX3NjKTsKKwlTRVRfVFhfREVTQ19SVFNfU0ModHhkZXNjLCB0Y2JfZGVzYy0+cnRzX3NjKTsKIAlTRVRfVFhfREVTQ19SVFNfU0hPUlQodHhkZXNjLAotCQkJICAgICAgKCh0Y2JfZGVzYy5ydHNfcmF0ZSA8PSBERVNDOTJDX1JBVEU1NE0pID8KLQkJCSAgICAgICAodGNiX2Rlc2MucnRzX3VzZV9zaG9ydHByZWFtYmxlID8gMSA6IDApCi0JCQkgICAgICAgOiAodGNiX2Rlc2MucnRzX3VzZV9zaG9ydGdpID8gMSA6IDApKSk7CisJCQkgICAgICAoKHRjYl9kZXNjLT5ydHNfcmF0ZSA8PSBERVNDOTJDX1JBVEU1NE0pID8KKwkJCSAgICAgICAodGNiX2Rlc2MtPnJ0c191c2Vfc2hvcnRwcmVhbWJsZSA/IDEgOiAwKQorCQkJICAgICAgIDogKHRjYl9kZXNjLT5ydHNfdXNlX3Nob3J0Z2kgPyAxIDogMCkpKTsKIAlpZiAobWFjLT5id180MCkgewotCQlpZiAodGNiX2Rlc2MucGFja2V0X2J3KSB7CisJCWlmICh0Y2JfZGVzYy0+cGFja2V0X2J3KSB7CiAJCQlTRVRfVFhfREVTQ19EQVRBX0JXKHR4ZGVzYywgMSk7CiAJCQlTRVRfVFhfREVTQ19EQVRBX1NDKHR4ZGVzYywgMyk7CiAJCX0gZWxzZSB7CkBAIC01OTAsNyArNTkwLDcgQEAKIAlTRVRfVFhfREVTQ19EQVRBX1JBVEVfRkJfTElNSVQodHhkZXNjLCAweDFGKTsKIAlTRVRfVFhfREVTQ19SVFNfUkFURV9GQl9MSU1JVCh0eGRlc2MsIDB4Rik7CiAJU0VUX1RYX0RFU0NfRElTQUJMRV9GQih0eGRlc2MsIDApOwotCVNFVF9UWF9ERVNDX1VTRV9SQVRFKHR4ZGVzYywgdGNiX2Rlc2MudXNlX2RyaXZlcl9yYXRlID8gMSA6IDApOworCVNFVF9UWF9ERVNDX1VTRV9SQVRFKHR4ZGVzYywgdGNiX2Rlc2MtPnVzZV9kcml2ZXJfcmF0ZSA/IDEgOiAwKTsKIAlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgewogCQlpZiAobWFjLT5yZGdfZW4pIHsKIAkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VORCwgREJHX1RSQUNFLApAQCAtNjAwLDExICs2MDAsMTEgQEAKIAkJfQogCX0KIAlpZiAocnRscHJpdi0+ZG0udXNlcmFtYXNrKSB7Ci0JCVNFVF9UWF9ERVNDX1JBVEVfSUQodHhkZXNjLCB0Y2JfZGVzYy5yYXRyX2luZGV4KTsKLQkJU0VUX1RYX0RFU0NfTUFDSUQodHhkZXNjLCB0Y2JfZGVzYy5tYWNfaWQpOworCQlTRVRfVFhfREVTQ19SQVRFX0lEKHR4ZGVzYywgdGNiX2Rlc2MtPnJhdHJfaW5kZXgpOworCQlTRVRfVFhfREVTQ19NQUNJRCh0eGRlc2MsIHRjYl9kZXNjLT5tYWNfaWQpOwogCX0gZWxzZSB7Ci0JCVNFVF9UWF9ERVNDX1JBVEVfSUQodHhkZXNjLCAweEMgKyB0Y2JfZGVzYy5yYXRyX2luZGV4KTsKLQkJU0VUX1RYX0RFU0NfTUFDSUQodHhkZXNjLCB0Y2JfZGVzYy5yYXRyX2luZGV4KTsKKwkJU0VUX1RYX0RFU0NfUkFURV9JRCh0eGRlc2MsIDB4QyArIHRjYl9kZXNjLT5yYXRyX2luZGV4KTsKKwkJU0VUX1RYX0RFU0NfTUFDSUQodHhkZXNjLCB0Y2JfZGVzYy0+cmF0cl9pbmRleCk7CiAJfQogCWlmICgoIWllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpICYmIHBwc2MtPmxlaXN1cmVfcHMgJiYKIAkgICAgICBwcHNjLT5md2N0cmxfbHBzKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS90cnguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3RyeC5oCmluZGV4IGIzOTZkNDYuLjUzZGU1ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3RyeC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3RyeC5oCkBAIC0zNyw2ICszNyw4IEBACiAjZGVmaW5lIFJUTDkyQ19TSVpFX01BWF9SWF9CVUZGRVIJCTE1MzYwICAgLyogODE5MiAqLwogI2RlZmluZSBSWF9EUlZfSU5GT19TSVpFX1VOSVQJCQk4CiAKKyNkZWZpbmUgUlRMX0FHR19PTgkJCQkxCisKIGVudW0gdXNiX3J4X2FnZ19tb2RlIHsKIAlVU0JfUlhfQUdHX0RJU0FCTEUsCiAJVVNCX1JYX0FHR19ETUEsCkBAIC00MTksNyArNDIxLDggQEAKIHZvaWQgcnRsOTJjdV90eF9maWxsX2Rlc2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsIHU4ICpwZGVzY190eCwKIAkJCSAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICB1bnNpZ25lZCBpbnQgcXVldWVfaW5kZXgpOworCQkJICB1OCBxdWV1ZV9pbmRleCwKKwkJCSAgc3RydWN0IHJ0bF90Y2JfZGVzYyAqdGNiX2Rlc2MpOwogdm9pZCBydGw5MmN1X2ZpbGxfZmFrZV90eGRlc2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICogcERlc2MsCiAJCQkgICAgICB1MzIgYnVmZmVyX2xlbiwgYm9vbCBiSXNQc1BvbGwpOwogdm9pZCBydGw5MmN1X3R4X2ZpbGxfY21kZGVzYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdlYjEzOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL01ha2VmaWxlCkBAIC0wLDAgKzEsMTUgQEAKK3J0bDgxOTJzZS1vYmpzIDo9CQlcCisJCWRtLm8JCVwKKwkJZncubwkJXAorCQlody5vCQlcCisJCWxlZC5vCQlcCisJCXBoeS5vCQlcCisJCXJmLm8JCVwKKwkJc3cubwkJXAorCQl0YWJsZS5vCQlcCisJCXRyeC5vCisKK29iai0kKENPTkZJR19SVEw4MTkyU0UpICs9IHJ0bDgxOTJzZS5vCisKK2NjZmxhZ3MteSArPSAtRF9fQ0hFQ0tfRU5ESUFOX18KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvZGVmLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9kZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTgyOGYyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvZGVmLmgKQEAgLTAsMCArMSw1OTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX1JFQUxURUtfOTJTX0RFRl9IX18KKyNkZWZpbmUgX19SRUFMVEVLXzkyU19ERUZfSF9fCisKKyNkZWZpbmUgUlhfTVBEVV9RVUVVRQkJCQkwCisjZGVmaW5lIFJYX0NNRF9RVUVVRQkJCQkxCisjZGVmaW5lIFJYX01BWF9RVUVVRQkJCQkyCisKKyNkZWZpbmUgREVTQzkyU19SQVRFMU0JCQkJMHgwMAorI2RlZmluZSBERVNDOTJTX1JBVEUyTQkJCQkweDAxCisjZGVmaW5lIERFU0M5MlNfUkFURTVfNU0JCQkweDAyCisjZGVmaW5lIERFU0M5MlNfUkFURTExTQkJCQkweDAzCisjZGVmaW5lIERFU0M5MlNfUkFURTZNCQkJCTB4MDQKKyNkZWZpbmUgREVTQzkyU19SQVRFOU0JCQkJMHgwNQorI2RlZmluZSBERVNDOTJTX1JBVEUxMk0JCQkJMHgwNgorI2RlZmluZSBERVNDOTJTX1JBVEUxOE0JCQkJMHgwNworI2RlZmluZSBERVNDOTJTX1JBVEUyNE0JCQkJMHgwOAorI2RlZmluZSBERVNDOTJTX1JBVEUzNk0JCQkJMHgwOQorI2RlZmluZSBERVNDOTJTX1JBVEU0OE0JCQkJMHgwYQorI2RlZmluZSBERVNDOTJTX1JBVEU1NE0JCQkJMHgwYgorI2RlZmluZSBERVNDOTJTX1JBVEVNQ1MwCQkJMHgwYworI2RlZmluZSBERVNDOTJTX1JBVEVNQ1MxCQkJMHgwZAorI2RlZmluZSBERVNDOTJTX1JBVEVNQ1MyCQkJMHgwZQorI2RlZmluZSBERVNDOTJTX1JBVEVNQ1MzCQkJMHgwZgorI2RlZmluZSBERVNDOTJTX1JBVEVNQ1M0CQkJMHgxMAorI2RlZmluZSBERVNDOTJTX1JBVEVNQ1M1CQkJMHgxMQorI2RlZmluZSBERVNDOTJTX1JBVEVNQ1M2CQkJMHgxMgorI2RlZmluZSBERVNDOTJTX1JBVEVNQ1M3CQkJMHgxMworI2RlZmluZSBERVNDOTJTX1JBVEVNQ1M4CQkJMHgxNAorI2RlZmluZSBERVNDOTJTX1JBVEVNQ1M5CQkJMHgxNQorI2RlZmluZSBERVNDOTJTX1JBVEVNQ1MxMAkJCTB4MTYKKyNkZWZpbmUgREVTQzkyU19SQVRFTUNTMTEJCQkweDE3CisjZGVmaW5lIERFU0M5MlNfUkFURU1DUzEyCQkJMHgxOAorI2RlZmluZSBERVNDOTJTX1JBVEVNQ1MxMwkJCTB4MTkKKyNkZWZpbmUgREVTQzkyU19SQVRFTUNTMTQJCQkweDFhCisjZGVmaW5lIERFU0M5MlNfUkFURU1DUzE1CQkJMHgxYgorI2RlZmluZSBERVNDOTJTX1JBVEVNQ1MxNV9TRwkJCTB4MWMKKyNkZWZpbmUgREVTQzkyU19SQVRFTUNTMzIJCQkweDIwCisKKyNkZWZpbmUgU0hPUlRfU0xPVF9USU1FCQkJCTkKKyNkZWZpbmUgTk9OX1NIT1JUX1NMT1RfVElNRQkJCTIwCisKKy8qIFJ4IHNtb290aCBmYWN0b3IgKi8KKyNkZWZpbmUJUlhfU01PT1RIX0ZBQ1RPUgkJCTIwCisKKy8qIFF1ZXVlIFNlbGVjdCBWYWx1ZSBpbiBUeERlc2MgKi8KKyNkZWZpbmUgUVNMVF9CSwkJCQkJMHgyCisjZGVmaW5lIFFTTFRfQkUJCQkJCTB4MAorI2RlZmluZSBRU0xUX1ZJCQkJCQkweDUKKyNkZWZpbmUgUVNMVF9WTwkJCQkJMHg2CisjZGVmaW5lIFFTTFRfQkVBQ09OCQkJCTB4MTAKKyNkZWZpbmUgUVNMVF9ISUdICQkJCTB4MTEKKyNkZWZpbmUgUVNMVF9NR05UCQkJCTB4MTIKKyNkZWZpbmUgUVNMVF9DTUQJCQkJMHgxMworCisjZGVmaW5lCVBIWV9SU1NJX1NMSURfV0lOX01BWAkJCTEwMAorI2RlZmluZQlQSFlfTElOS1FVQUxJVFlfU0xJRF9XSU5fTUFYCQkyMAorI2RlZmluZQlQSFlfQkVBQ09OX1JTU0lfU0xJRF9XSU5fTUFYCQkxMAorCisvKiBUeCBEZXNjICovCisjZGVmaW5lIFRYX0RFU0NfU0laRV9SVEw4MTkyUwkJCSgxNiAqIDQpCisjZGVmaW5lIFRYX0NNRERFU0NfU0laRV9SVEw4MTkyUwkJKDE2ICogNCkKKworLyogRGVmaW5lIGEgbWFjcm8gdGhhdCB0YWtlcyBhIGxlMzIgd29yZCwgY29udmVydHMgaXQgdG8gaG9zdCBvcmRlcmluZywKKyAqIHJpZ2h0IHNoaWZ0cyBieSBhIHNwZWNpZmllZCBjb3VudCwgY3JlYXRlcyBhIG1hc2sgb2YgdGhlIHNwZWNpZmllZAorICogYml0IGNvdW50LCBhbmQgZXh0cmFjdHMgdGhhdCBudW1iZXIgb2YgYml0cy4KKyAqLworCisjZGVmaW5lIFNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MsIF9fc2hpZnQsIF9fbWFzaykJCVwKKwkoKGxlMzJfdG9fY3B1KCooKChfX2xlMzIgKikoX19wZGVzYykpKSkgPj4gKF9fc2hpZnQpKSAmCVwKKwlCSVRfTEVOX01BU0tfMzIoX19tYXNrKSkKKworLyogRGVmaW5lIGEgbWFjcm8gdGhhdCBjbGVhcnMgYSBiaXQgZmllbGQgaW4gYW4gbGUzMiB3b3JkIGFuZAorICogc2V0cyB0aGUgc3BlY2lmaWVkIHZhbHVlIGludG8gdGhhdCBiaXQgZmllbGQuIFRoZSByZXN1bHRpbmcKKyAqIHZhbHVlIHJlbWFpbnMgaW4gbGUzMiBvcmRlcmluZzsgaG93ZXZlciwgaXQgaXMgcHJvcGVybHkgY29udmVydGVkCisgKiB0byBob3N0IG9yZGVyaW5nIGZvciB0aGUgY2xlYXIgYW5kIHNldCBvcGVyYXRpb25zIGJlZm9yZSBjb252ZXJzaW9uCisgKiBiYWNrIHRvIGxlMzIuCisgKi8KKworI2RlZmluZSBTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYywgX19zaGlmdCwgX19sZW4sIF9fdmFsKQlcCisJKCooX19sZTMyICopKF9fcGRlc2MpID0JCQkJCVwKKwkoY3B1X3RvX2xlMzIoKGxlMzJfdG9fY3B1KCooKF9fbGUzMiAqKShfX3BkZXNjKSkpICYJXAorCSh+KEJJVF9PRkZTRVRfTEVOX01BU0tfMzIoKF9fc2hpZnQpLCBfX2xlbikpKSkgfAlcCisJKCgodTMyKShfX3ZhbCkgJiBCSVRfTEVOX01BU0tfMzIoX19sZW4pKSA8PCAoX19zaGlmdCkpKSkpOworCisvKiBtYWNyb3MgdG8gcmVhZC93cml0ZSB2YXJpb3VzIGZpZWxkcyBpbiBSWCBvciBUWCBkZXNjcmlwdG9ycyAqLworCisvKiBEd29yZCAwICovCisjZGVmaW5lIFNFVF9UWF9ERVNDX1BLVF9TSVpFKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYywgMCwgMTYsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19PRkZTRVQoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjLCAxNiwgOCwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1RZUEUoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjLCAyNCwgMiwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0xBU1RfU0VHKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYywgMjYsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19GSVJTVF9TRUcoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjLCAyNywgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0xJTklQKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYywgMjgsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19BTVNEVShfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MsIDI5LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfR1JFRU5fRklFTEQoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjLCAzMCwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX09XTihfX3BkZXNjLCBfX3ZhbCkJCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjLCAzMSwgMSwgX192YWwpCisKKyNkZWZpbmUgR0VUX1RYX0RFU0NfT1dOKF9fcGRlc2MpCQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjLCAzMSwgMSkKKworLyogRHdvcmQgMSAqLworI2RlZmluZSBTRVRfVFhfREVTQ19NQUNJRChfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyA0LCAwLCA1LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfTU9SRV9EQVRBKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDQsIDUsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19NT1JFX0ZSQUcoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgNCwgNiwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1BJRlMoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgNCwgNywgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1FVRVVFX1NFTChfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyA0LCA4LCA1LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfQUNLX1BPTElDWShfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyA0LCAxMywgMiwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX05PX0FDTShfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyA0LCAxNSwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX05PTl9RT1MoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgNCwgMTYsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19LRVlfSUQoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgNCwgMTcsIDIsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19PVUkoX19wZGVzYywgX192YWwpCQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDQsIDE5LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfUEtUX1RZUEUoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgNCwgMjAsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19FTl9ERVNDX0lEKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDQsIDIxLCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfU0VDX1RZUEUoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgNCwgMjIsIDIsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19XRFMoX19wZGVzYywgX192YWwpCQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDQsIDI0LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfSFRDKF9fcGRlc2MsIF9fdmFsKQkJCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyA0LCAyNSwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1BLVF9PRkZTRVQoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgNCwgMjYsIDUsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19IV1BDKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDQsIDI3LCAxLCBfX3ZhbCkKKworLyogRHdvcmQgMiAqLworI2RlZmluZSBTRVRfVFhfREVTQ19EQVRBX1JFVFJZX0xJTUlUKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgOCwgMCwgNiwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1JFVFJZX0xJTUlUX0VOQUJMRShfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDgsIDYsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19UU0ZMKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDgsIDcsIDUsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19SVFNfUkVUUllfQ09VTlQoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyA4LCAxMiwgNiwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0RBVEFfUkVUUllfQ09VTlQoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyA4LCAxOCwgNiwgX192YWwpCisjZGVmaW5lCVNFVF9UWF9ERVNDX1JTVkRfTUFDSUQoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRSgoKF9fcGRlc2MpICsgOCksIDI0LCA1LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfQUdHX0VOQUJMRShfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyA4LCAyOSwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0FHR19CUkVBSyhfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyA4LCAzMCwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX09XTl9NQUMoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgOCwgMzEsIDEsIF9fdmFsKQorCisvKiBEd29yZCAzICovCisjZGVmaW5lIFNFVF9UWF9ERVNDX05FWFRfSEVBUF9QQUdFKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMTIsIDAsIDgsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19UQUlMX1BBR0UoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMTIsIDgsIDgsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19TRVEoX19wZGVzYywgX192YWwpCQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDEyLCAxNiwgMTIsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19GUkFHKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDEyLCAyOCwgNCwgX192YWwpCisKKy8qIER3b3JkIDQgKi8KKyNkZWZpbmUgU0VUX1RYX0RFU0NfUlRTX1JBVEUoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMTYsIDAsIDYsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19ESVNBQkxFX1JUU19GQihfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDE2LCA2LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfUlRTX1JBVEVfRkJfTElNSVQoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyAxNiwgNywgNCwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0NUU19FTkFCTEUoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMTYsIDExLCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfUlRTX0VOQUJMRShfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyAxNiwgMTIsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19SQV9CUlNSX0lEKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDE2LCAxMywgMywgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1RYSFQoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMTYsIDE2LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfVFhfU0hPUlQoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMTYsIDE3LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfVFhfQkFORFdJRFRIKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMTYsIDE4LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfVFhfU1VCX0NBUlJJRVIoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyAxNiwgMTksIDIsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19UWF9TVEJDKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDE2LCAyMSwgMiwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1RYX1JFVkVSU0VfRElSRUNUSU9OKF9fcGRlc2MsIF9fdmFsKQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyAxNiwgMjMsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19SVFNfSFQoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMTYsIDI0LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfUlRTX1NIT1JUKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDE2LCAyNSwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1JUU19CQU5EV0lEVEgoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyAxNiwgMjYsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19SVFNfU1VCX0NBUlJJRVIoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyAxNiwgMjcsIDIsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19SVFNfU1RCQyhfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyAxNiwgMjksIDIsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19VU0VSX1JBVEUoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMTYsIDMxLCAxLCBfX3ZhbCkKKworLyogRHdvcmQgNSAqLworI2RlZmluZSBTRVRfVFhfREVTQ19QQUNLRVRfSUQoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMjAsIDAsIDksIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19UWF9SQVRFKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDIwLCA5LCA2LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfRElTQUJMRV9GQihfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyAyMCwgMTUsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19EQVRBX1JBVEVfRkJfTElNSVQoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyAyMCwgMTYsIDUsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19UWF9BR0MoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMjAsIDIxLCAxMSwgX192YWwpCisKKy8qIER3b3JkIDYgKi8KKyNkZWZpbmUgU0VUX1RYX0RFU0NfSVBfQ0hFQ0tfU1VNKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMjQsIDAsIDE2LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfVENQX0NIRUNLX1NVTShfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDI0LCAxNiwgMTYsIF9fdmFsKQorCisvKiBEd29yZCA3ICovCisjZGVmaW5lIFNFVF9UWF9ERVNDX1RYX0JVRkZFUl9TSVpFKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMjgsIDAsIDE2LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfSVBfSEVBREVSX09GRlNFVChfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDI4LCAxNiwgOCwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1RDUF9FTkFCTEUoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMjgsIDMxLCAxLCBfX3ZhbCkKKworLyogRHdvcmQgOCAqLworI2RlZmluZSBTRVRfVFhfREVTQ19UWF9CVUZGRVJfQUREUkVTUyhfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDMyLCAwLCAzMiwgX192YWwpCisjZGVmaW5lIEdFVF9UWF9ERVNDX1RYX0JVRkZFUl9BRERSRVNTKF9fcGRlc2MpCQkJXAorCVNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MgKyAzMiwgMCwgMzIpCisKKy8qIER3b3JkIDkgKi8KKyNkZWZpbmUgU0VUX1RYX0RFU0NfTkVYVF9ERVNDX0FERFJFU1MoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyAzNiwgMCwgMzIsIF9fdmFsKQorCisvKiBCZWNhdXNlIHRoZSBQQ0kgVHggZGVzY3JpcHRvcnMgYXJlIGNoYWllZCBhdCB0aGUKKyAqIGluaXRpYWxpemF0aW9uIGFuZCBhbGwgdGhlIE5leHREZXNjQWRkcmVzc2VzIGluCisgKiB0aGVzZSBkZXNjcmlwdG9ycyBjYW5ub3Qgbm90IGJlIGNsZWFyZWQgKCxvcgorICogZHJpdmVyL0hXIGNhbm5vdCBmaW5kIHRoZSBuZXh0IGRlc2NyaXB0b3IpLCB0aGUKKyAqIG9mZnNldCAzNiAoTmV4dERlc2NBZGRyZXNzZXMpIGlzIHJlc2VydmVkIHdoZW4KKyAqIHRoZSBkZXNjIGlzIGNsZWFyZWQuICovCisjZGVmaW5lCVRYX0RFU0NfTkVYVF9ERVNDX09GRlNFVAkJCTM2CisjZGVmaW5lIENMRUFSX1BDSV9UWF9ERVNDX0NPTlRFTlQoX19wZGVzYywgX3NpemUpCQlcCitkbyB7CQkJCQkJCQlcCisJaWYgKF9zaXplID4gVFhfREVTQ19ORVhUX0RFU0NfT0ZGU0VUKQkJCVwKKwkJbWVtc2V0KF9fcGRlc2MsIDAsIFRYX0RFU0NfTkVYVF9ERVNDX09GRlNFVCk7CVwKKwllbHNlCQkJCQkJCVwKKwkJbWVtc2V0KF9fcGRlc2MsIDAsIF9zaXplKTsJCQlcCit9IHdoaWxlICgwKTsKKworLyogUnggRGVzYyAqLworI2RlZmluZSBSWF9TVEFUVVNfREVTQ19TSVpFCQkJCTI0CisjZGVmaW5lIFJYX0RSVl9JTkZPX1NJWkVfVU5JVAkJCQk4CisKKy8qIERXT1JEIDAgKi8KKyNkZWZpbmUgU0VUX1JYX1NUQVRVU19ERVNDX1BLVF9MRU4oX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MsIDAsIDE0LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1JYX1NUQVRVU19ERVNDX0NSQzMyKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjLCAxNCwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19JQ1YoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjLCAxNSwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19EUlZJTkZPX1NJWkUoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MsIDE2LCA0LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1JYX1NUQVRVU19ERVNDX1NFQ1VSSVRZKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjLCAyMCwgMywgX192YWwpCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19RT1MoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjLCAyMywgMSwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19TSElGVChfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYywgMjQsIDIsIF9fdmFsKQorI2RlZmluZSBTRVRfUlhfU1RBVFVTX0RFU0NfUEhZX1NUQVRVUyhfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYywgMjYsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfUlhfU1RBVFVTX0RFU0NfU1dERUMoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MsIDI3LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1JYX1NUQVRVU19ERVNDX0xBU1RfU0VHKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjLCAyOCwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19GSVJTVF9TRUcoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MsIDI5LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1JYX1NUQVRVU19ERVNDX0VPUihfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MsIDMwLCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1JYX1NUQVRVU19ERVNDX09XTihfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MsIDMxLCAxLCBfX3ZhbCkKKworI2RlZmluZSBHRVRfUlhfU1RBVFVTX0RFU0NfUEtUX0xFTihfX3BkZXNjKQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjLCAwLCAxNCkKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX0NSQzMyKF9fcGRlc2MpCQkJXAorCVNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MsIDE0LCAxKQorI2RlZmluZSBHRVRfUlhfU1RBVFVTX0RFU0NfSUNWKF9fcGRlc2MpCQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjLCAxNSwgMSkKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX0RSVklORk9fU0laRShfX3BkZXNjKQkJXAorCVNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MsIDE2LCA0KQorI2RlZmluZSBHRVRfUlhfU1RBVFVTX0RFU0NfU0VDVVJJVFkoX19wZGVzYykJCQlcCisJU0hJRlRfQU5EX01BU0tfTEUoX19wZGVzYywgMjAsIDMpCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVTQ19RT1MoX19wZGVzYykJCQkJXAorCVNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MsIDIzLCAxKQorI2RlZmluZSBHRVRfUlhfU1RBVFVTX0RFU0NfU0hJRlQoX19wZGVzYykJCQlcCisJU0hJRlRfQU5EX01BU0tfTEUoX19wZGVzYywgMjQsIDIpCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVTQ19QSFlfU1RBVFVTKF9fcGRlc2MpCQkJXAorCVNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MsIDI2LCAxKQorI2RlZmluZSBHRVRfUlhfU1RBVFVTX0RFU0NfU1dERUMoX19wZGVzYykJCQlcCisJU0hJRlRfQU5EX01BU0tfTEUoX19wZGVzYywgMjcsIDEpCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVTQ19MQVNUX1NFRyhfX3BkZXNjKQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjLCAyOCwgMSkKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX0ZJUlNUX1NFRyhfX3BkZXNjKQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjLCAyOSwgMSkKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX0VPUihfX3BkZXNjKQkJCQlcCisJU0hJRlRfQU5EX01BU0tfTEUoX19wZGVzYywgMzAsIDEpCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVTQ19PV04oX19wZGVzYykJCQkJXAorCVNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MsIDMxLCAxKQorCisvKiBEV09SRCAxICovCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19NQUNJRChfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDQsIDAsIDUsIF9fdmFsKQorI2RlZmluZSBTRVRfUlhfU1RBVFVTX0RFU0NfVElEKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDQsIDUsIDQsIF9fdmFsKQorI2RlZmluZSBTRVRfUlhfU1RBVFVTX0RFU0NfUEFHR1IoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyA0LCAxNCwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19GQUdHUihfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDQsIDE1LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1JYX1NUQVRVU19ERVNDX0ExX0ZJVChfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDQsIDE2LCA0LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1JYX1NUQVRVU19ERVNDX0EyX0ZJVChfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDQsIDIwLCA0LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1JYX1NUQVRVU19ERVNDX1BBTShfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyA0LCAyNCwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19QV1IoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgNCwgMjUsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfUlhfU1RBVFVTX0RFU0NfTU9SRURBVEEoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyA0LCAyNiwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19NT1JFRlJBRyhfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDQsIDI3LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1JYX1NUQVRVU19ERVNDX1RZUEUoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgNCwgMjgsIDIsIF9fdmFsKQorI2RlZmluZSBTRVRfUlhfU1RBVFVTX0RFU0NfTUMoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgNCwgMzAsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfUlhfU1RBVFVTX0RFU0NfQkMoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgNCwgMzEsIDEsIF9fdmFsKQorCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVDX01BQ0lEKF9fcGRlc2MpCQkJXAorCVNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MgKyA0LCAwLCA1KQorI2RlZmluZSBHRVRfUlhfU1RBVFVTX0RFU0NfVElEKF9fcGRlc2MpCQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjICsgNCwgNSwgNCkKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX1BBR0dSKF9fcGRlc2MpCQkJXAorCVNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MgKyA0LCAxNCwgMSkKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX0ZBR0dSKF9fcGRlc2MpCQkJXAorCVNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MgKyA0LCAxNSwgMSkKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX0ExX0ZJVChfX3BkZXNjKQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjICsgNCwgMTYsIDQpCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVTQ19BMl9GSVQoX19wZGVzYykJCQlcCisJU0hJRlRfQU5EX01BU0tfTEUoX19wZGVzYyArIDQsIDIwLCA0KQorI2RlZmluZSBHRVRfUlhfU1RBVFVTX0RFU0NfUEFNKF9fcGRlc2MpCQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjICsgNCwgMjQsIDEpCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVTQ19QV1IoX19wZGVzYykJCQkJXAorCVNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MgKyA0LCAyNSwgMSkKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX01PUkVfREFUQShfX3BkZXNjKQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjICsgNCwgMjYsIDEpCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVTQ19NT1JFX0ZSQUcoX19wZGVzYykJCQlcCisJU0hJRlRfQU5EX01BU0tfTEUoX19wZGVzYyArIDQsIDI3LCAxKQorI2RlZmluZSBHRVRfUlhfU1RBVFVTX0RFU0NfVFlQRShfX3BkZXNjKQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjICsgNCwgMjgsIDIpCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVTQ19NQyhfX3BkZXNjKQkJCQlcCisJU0hJRlRfQU5EX01BU0tfTEUoX19wZGVzYyArIDQsIDMwLCAxKQorI2RlZmluZSBHRVRfUlhfU1RBVFVTX0RFU0NfQkMoX19wZGVzYykJCQkJXAorCVNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MgKyA0LCAzMSwgMSkKKworLyogRFdPUkQgMiAqLworI2RlZmluZSBTRVRfUlhfU1RBVFVTX0RFU0NfU0VRKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDgsIDAsIDEyLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1JYX1NUQVRVU19ERVNDX0ZSQUcoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgOCwgMTIsIDQsIF9fdmFsKQorI2RlZmluZSBTRVRfUlhfU1RBVFVTX0RFU0NfTkVYVF9QS1RMRU4oX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyA4LCAxNiwgOCwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19ORVhUX0lORChfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDgsIDMwLCAxLCBfX3ZhbCkKKworI2RlZmluZSBHRVRfUlhfU1RBVFVTX0RFU0NfU0VRKF9fcGRlc2MpCQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjICsgOCwgMCwgMTIpCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVTQ19GUkFHKF9fcGRlc2MpCQkJXAorCVNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MgKyA4LCAxMiwgNCkKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX05FWFRfUEtUTEVOKF9fcGRlc2MpCQkJXAorCVNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MgKyA4LCAxNiwgOCkKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX05FWFRfSU5EKF9fcGRlc2MpCQkJXAorCVNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MgKyA4LCAzMCwgMSkKKworLyogRFdPUkQgMyAqLworI2RlZmluZSBTRVRfUlhfU1RBVFVTX0RFU0NfUlhfTUNTKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMTIsIDAsIDYsIF9fdmFsKQorI2RlZmluZSBTRVRfUlhfU1RBVFVTX0RFU0NfUlhfSFQoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyAxMiwgNiwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19BTVNEVShfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDEyLCA3LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1JYX1NUQVRVU19ERVNDX1NQTENQKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMTIsIDgsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfUlhfU1RBVFVTX0RFU0NfQlcoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMTIsIDksIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfUlhfU1RBVFVTX0RFU0NfSFRDKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDEyLCAxMCwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19UQ1BfQ0hLX1JQVChfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDEyLCAxMSwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19JUF9DSEtfUlBUKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMTIsIDEyLCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1JYX1NUQVRVU19ERVNDX1RDUF9DSEtfVkFMSUQoX19wZGVzYywgX192YWwpCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDEyLCAxMywgMSwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19IV1BDX0VSUihfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDEyLCAxNCwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19IV1BDX0lORChfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDEyLCAxNSwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19JVjAoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMTIsIDE2LCAxNiwgX192YWwpCisKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX1JYX01DUyhfX3BkZXNjKQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjICsgMTIsIDAsIDYpCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVTQ19SWF9IVChfX3BkZXNjKQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjICsgMTIsIDYsIDEpCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVTQ19BTVNEVShfX3BkZXNjKQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjICsgMTIsIDcsIDEpCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVTQ19TUExDUChfX3BkZXNjKQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjICsgMTIsIDgsIDEpCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVTQ19CVyhfX3BkZXNjKQkJCQlcCisJU0hJRlRfQU5EX01BU0tfTEUoX19wZGVzYyArIDEyLCA5LCAxKQorI2RlZmluZSBHRVRfUlhfU1RBVFVTX0RFU0NfSFRDKF9fcGRlc2MpCQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjICsgMTIsIDEwLCAxKQorI2RlZmluZSBHRVRfUlhfU1RBVFVTX0RFU0NfVENQX0NIS19SUFQoX19wZGVzYykJCQlcCisJU0hJRlRfQU5EX01BU0tfTEUoX19wZGVzYyArIDEyLCAxMSwgMSkKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX0lQX0NIS19SUFQoX19wZGVzYykJCQlcCisJU0hJRlRfQU5EX01BU0tfTEUoX19wZGVzYyArIDEyLCAxMiwgMSkKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX1RDUF9DSEtfVkFMSUQoX19wZGVzYykJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjICsgMTIsIDEzLCAxKQorI2RlZmluZSBHRVRfUlhfU1RBVFVTX0RFU0NfSFdQQ19FUlIoX19wZGVzYykJCQlcCisJU0hJRlRfQU5EX01BU0tfTEUoX19wZGVzYyArIDEyLCAxNCwgMSkKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX0hXUENfSU5EKF9fcGRlc2MpCQkJXAorCVNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MgKyAxMiwgMTUsIDEpCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVTQ19JVjAoX19wZGVzYykJCQkJXAorCVNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MgKyAxMiwgMTYsIDE2KQorCisvKiBEV09SRCA0ICovCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19JVjEoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMTYsIDAsIDMyLCBfX3ZhbCkKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX0lWMShfX3BkZXNjKQkJCQlcCisJU0hJRlRfQU5EX01BU0tfTEUoX19wZGVzYyArIDE2LCAwLCAzMikKKworLyogRFdPUkQgNSAqLworI2RlZmluZSBTRVRfUlhfU1RBVFVTX0RFU0NfVFNGTChfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyAyMCwgMCwgMzIsIF9fdmFsKQorI2RlZmluZSBHRVRfUlhfU1RBVFVTX0RFU0NfVFNGTChfX3BkZXNjKQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjICsgMjAsIDAsIDMyKQorCisvKiBEV09SRCA2ICovCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfX0RFU0NfQlVGRl9BRERSKF9fcGRlc2MsIF9fdmFsKQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyAyNCwgMCwgMzIsIF9fdmFsKQorCisjZGVmaW5lIFJYX0hBTF9JU19DQ0tfUkFURShfcGRlc2MpXAorCShHRVRfUlhfU1RBVFVTX0RFU0NfUlhfTUNTKF9wZGVzYykgPT0gREVTQzkyU19SQVRFMU0gfHwJXAorCSBHRVRfUlhfU1RBVFVTX0RFU0NfUlhfTUNTKF9wZGVzYykgPT0gREVTQzkyU19SQVRFMk0gfHwJXAorCSBHRVRfUlhfU1RBVFVTX0RFU0NfUlhfTUNTKF9wZGVzYykgPT0gREVTQzkyU19SQVRFNV81TSB8fFwKKwkgR0VUX1JYX1NUQVRVU19ERVNDX1JYX01DUyhfcGRlc2MpID09IERFU0M5MlNfUkFURTExTSkKKworZW51bSByZl9vcHR5cGUgeworCVJGX09QX0JZX1NXXzNXSVJFID0gMCwKKwlSRl9PUF9CWV9GVywKKwlSRl9PUF9NQVgKK307CisKK2VudW0gaWNfaW5mZXJpb3JpdHkgeworCUlDX0lORkVSSU9SSVRZX0EgPSAwLAorCUlDX0lORkVSSU9SSVRZX0IgPSAxLAorfTsKKworZW51bSBmd2NtZF9pb3R5cGUgeworCS8qIEZvciBESUcgRE0gKi8KKwlGV19DTURfRElHX0VOQUJMRSA9IDAsCisJRldfQ01EX0RJR19ESVNBQkxFID0gMSwKKwlGV19DTURfRElHX0hBTFQgPSAyLAorCUZXX0NNRF9ESUdfUkVTVU1FID0gMywKKwkvKiBGb3IgSGlnaCBQb3dlciBETSAqLworCUZXX0NNRF9ISUdIX1BXUl9FTkFCTEUgPSA0LAorCUZXX0NNRF9ISUdIX1BXUl9ESVNBQkxFID0gNSwKKwkvKiBGb3IgUmF0ZSBhZGFwdGl2ZSBETSAqLworCUZXX0NNRF9SQV9SRVNFVCA9IDYsCisJRldfQ01EX1JBX0FDVElWRSA9IDcsCisJRldfQ01EX1JBX1JFRlJFU0hfTiA9IDgsCisJRldfQ01EX1JBX1JFRlJFU0hfQkcgPSA5LAorCUZXX0NNRF9SQV9JTklUID0gMTAsCisJLyogRm9yIEZXIHN1cHBvcnRlZCBJUUsgKi8KKwlGV19DTURfSVFLX0lOSVQgPSAxMSwKKwkvKiBUeCBwb3dlciB0cmFja2luZyBzd2l0Y2gsCisJICogTVAgZHJpdmVyIG9ubHkgKi8KKwlGV19DTURfVFhQV1JfVFJBQ0tfRU5BQkxFID0gMTIsCisJLyogVHggcG93ZXIgdHJhY2tpbmcgc3dpdGNoLAorCSAqIE1QIGRyaXZlciBvbmx5ICovCisJRldfQ01EX1RYUFdSX1RSQUNLX0RJU0FCTEUgPSAxMywKKwkvKiBUeCBwb3dlciB0cmFja2luZyB3aXRoIHRoZXJtYWwKKwkgKiBpbmRpY2F0aW9uLCBmb3IgTm9ybWFsIGRyaXZlciAqLworCUZXX0NNRF9UWFBXUl9UUkFDS19USEVSTUFMID0gMTQsCisJRldfQ01EX1BBVVNFX0RNX0JZX1NDQU4gPSAxNSwKKwlGV19DTURfUkVTVU1FX0RNX0JZX1NDQU4gPSAxNiwKKwlGV19DTURfUkFfUkVGUkVTSF9OX0NPTUIgPSAxNywKKwlGV19DTURfUkFfUkVGUkVTSF9CR19DT01CID0gMTgsCisJRldfQ01EX0FOVEVOTkFfU1dfRU5BQkxFID0gMTksCisJRldfQ01EX0FOVEVOTkFfU1dfRElTQUJMRSA9IDIwLAorCS8qIFR4IFN0YXR1cyByZXBvcnQgZm9yIENDWCBmcm9tIEZXICovCisJRldfQ01EX1RYX0ZFRURCQUNLX0NDWF9FTkFCTEUgPSAyMSwKKwkvKiBJbmRpZmF0ZSBmaXJtd2FyZSB0aGF0IGRyaXZlcgorCSAqIGVudGVycyBMUFMsIEZvciBQUy1Qb2xsIGlzc3VlICovCisJRldfQ01EX0xQU19FTlRFUiA9IDIyLAorCS8qIEluZGljYXRlIGZpcm13YXJlIHRoYXQgZHJpdmVyCisJICogbGVhdmUgTFBTKi8KKwlGV19DTURfTFBTX0xFQVZFID0gMjMsCisJLyogU2V0IERJRyBtb2RlIHRvIHNpZ25hbCBzdHJlbmd0aCAqLworCUZXX0NNRF9ESUdfTU9ERV9TUyA9IDI0LAorCS8qIFNldCBESUcgbW9kZSB0byBmYWxzZSBhbGFybS4gKi8KKwlGV19DTURfRElHX01PREVfRkEgPSAyNSwKKwlGV19DTURfQUREX0EyX0VOVFJZID0gMjYsCisJRldfQ01EX0NUUkxfRE1fQllfRFJJVkVSID0gMjcsCisJRldfQ01EX0NUUkxfRE1fQllfRFJJVkVSX05FVyA9IDI4LAorCUZXX0NNRF9QQVBFX0NPTlRST0wgPSAyOSwKKwlGV19DTURfSVFLX0VOQUJMRSA9IDMwLAorfTsKKworLyoKKyAqIERyaXZlciBpbmZvIGNvbnRhaW4gUEhZIHN0YXR1cworICogYW5kIG90aGVyIHZhcmlhYmVsIHNpemUgaW5mbworICogUEhZIFN0YXR1cyBjb250ZW50IGFzIGJlbG93CisgKi8KK3N0cnVjdCAgcnhfZndpbmZvIHsKKwkvKiBEV09SRCAwICovCisJdTggZ2Fpbl90cnN3WzRdOworCS8qIERXT1JEIDEgKi8KKwl1OCBwd2RiX2FsbDsKKwl1OCBjZm9zaG9bNF07CisJLyogRFdPUkQgMiAqLworCXU4IGNmb3RhaWxbNF07CisJLyogRFdPUkQgMyAqLworCXM4IHJ4ZXZtWzJdOworCXM4IHJ4c25yWzRdOworCS8qIERXT1JEIDQgKi8KKwl1OCBwZHNuclsyXTsKKwkvKiBEV09SRCA1ICovCisJdTggY3NpX2N1cnJlbnRbMl07CisJdTggY3NpX3RhcmdldFsyXTsKKwkvKiBEV09SRCA2ICovCisJdTggc2lnZXZtOworCXU4IG1heF9leF9wd3I7CisJdTggZXhfaW50Zl9mbGFnOjE7CisJdTggc2dpX2VuOjE7CisJdTggcnhzYzoyOworCXU4IHJlc2VydmU6NDsKK307CisKK3N0cnVjdCBwaHlfc3RzX2Nja184MTkyc190IHsKKwl1OCBhZGNfcHdkYl94WzRdOworCXU4IHNxX3JwdDsKKwl1OCBjY2tfYWdjX3JwdDsKK307CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9kbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvZG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTg2ZGI4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvZG0uYwpAQCAtMCwwICsxLDczMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICIuLi93aWZpLmgiCisjaW5jbHVkZSAiLi4vYmFzZS5oIgorI2luY2x1ZGUgInJlZy5oIgorI2luY2x1ZGUgImRlZi5oIgorI2luY2x1ZGUgInBoeS5oIgorI2luY2x1ZGUgImRtLmgiCisjaW5jbHVkZSAiZncuaCIKKworc3RydWN0IGRpZ190IGRpZ3RhYmxlOworc3RhdGljIGNvbnN0IHUzMiBlZGNhX3NldHRpbmdfZGxbUEVFUl9NQVhdID0geworCTB4YTQ0ZiwJCS8qIDAgVU5LTk9XTiAqLworCTB4NWVhNDRmLAkvKiAxIFJFQUxURUtfOTAgKi8KKwkweDVlYTQ0ZiwJLyogMiBSRUFMVEVLXzkyU0UgKi8KKwkweGE2MzAsCQkvKiAzIEJST0FECSovCisJMHhhNDRmLAkJLyogNCBSQUwgKi8KKwkweGE2MzAsCQkvKiA1IEFUSCAqLworCTB4YTYzMCwJCS8qIDYgQ0lTQ08gKi8KKwkweGE0MmIsCQkvKiA3IE1BUlYgKi8KK307CisKK3N0YXRpYyBjb25zdCB1MzIgZWRjYV9zZXR0aW5nX2RsX2dtb2RlW1BFRVJfTUFYXSA9IHsKKwkweDQzMjIsCQkvKiAwIFVOS05PV04gKi8KKwkweGE0NGYsCQkvKiAxIFJFQUxURUtfOTAgKi8KKwkweDVlYTQ0ZiwJLyogMiBSRUFMVEVLXzkyU0UgKi8KKwkweGE0MmIsCQkvKiAzIEJST0FEICovCisJMHg1ZTQzMjIsCS8qIDQgUkFMICovCisJMHg0MzIyLAkJLyogNSBBVEggKi8KKwkweGE0MzAsCQkvKiA2IENJU0NPICovCisJMHg1ZWE0NGYsCS8qIDcgTUFSViAqLworfTsKKworc3RhdGljIGNvbnN0IHUzMiBlZGNhX3NldHRpbmdfdWxbUEVFUl9NQVhdID0geworCTB4NWU0MzIyLAkvKiAwIFVOS05PV04gKi8KKwkweGE0NGYsCQkvKiAxIFJFQUxURUtfOTAgKi8KKwkweDVlYTQ0ZiwJLyogMiBSRUFMVEVLXzkyU0UgKi8KKwkweDVlYTMyMiwJLyogMyBCUk9BRCAqLworCTB4NWVhNDIyLAkvKiA0IFJBTCAqLworCTB4NWVhMzIyLAkvKiA1IEFUSCAqLworCTB4M2VhNDRmLAkvKiA2IENJU0NPICovCisJMHg1ZWE0NGYsCS8qIDcgTUFSViAqLworfTsKKworc3RhdGljIHZvaWQgX3J0bDkyc19kbV9jaGVja19lZGNhX3R1cmJvKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCisJc3RhdGljIHU2NCBsYXN0X3R4b2tfY250OworCXN0YXRpYyB1NjQgbGFzdF9yeG9rX2NudDsKKwl1NjQgY3VyX3R4b2tfY250ID0gMDsKKwl1NjQgY3VyX3J4b2tfY250ID0gMDsKKworCXUzMiBlZGNhX2JlX3VsID0gZWRjYV9zZXR0aW5nX3VsW21hYy0+dmVuZG9yXTsKKwl1MzIgZWRjYV9iZV9kbCA9IGVkY2Ffc2V0dGluZ19kbFttYWMtPnZlbmRvcl07CisJdTMyIGVkY2FfZ21vZGUgPSBlZGNhX3NldHRpbmdfZGxfZ21vZGVbbWFjLT52ZW5kb3JdOworCisJaWYgKG1hYy0+bGlua19zdGF0ZSAhPSBNQUM4MDIxMV9MSU5LRUQpIHsKKwkJcnRscHJpdi0+ZG0uY3VycmVudF90dXJib19lZGNhID0gZmFsc2U7CisJCWdvdG8gZG1fY2hlY2tlZGNhdHVyYm9fZXhpdDsKKwl9CisKKwlpZiAoKCFydGxwcml2LT5kbS5pc19hbnlfbm9uYmVwa3RzKSAmJgorCSAgICAoIXJ0bHByaXYtPmRtLmRpc2FibGVfZnJhbWVidXJzdGluZykpIHsKKwkJY3VyX3R4b2tfY250ID0gcnRscHJpdi0+c3RhdHMudHhieXRlc3VuaWNhc3QgLSBsYXN0X3R4b2tfY250OworCQljdXJfcnhva19jbnQgPSBydGxwcml2LT5zdGF0cy5yeGJ5dGVzdW5pY2FzdCAtIGxhc3Rfcnhva19jbnQ7CisKKwkJaWYgKHJ0bHByaXYtPnBoeS5yZl90eXBlID09IFJGXzFUMlIpIHsKKwkJCWlmIChjdXJfdHhva19jbnQgPiA0ICogY3VyX3J4b2tfY250KSB7CisJCQkJLyogVXBsaW5rIFRQIGlzIHByZXNlbnQuICovCisJCQkJaWYgKHJ0bHByaXYtPmRtLmlzX2N1cl9yZGxzdGF0ZSB8fAorCQkJCQkhcnRscHJpdi0+ZG0uY3VycmVudF90dXJib19lZGNhKSB7CisJCQkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBFRENBUEFSQV9CRSwKKwkJCQkJCQllZGNhX2JlX3VsKTsKKwkJCQkJcnRscHJpdi0+ZG0uaXNfY3VyX3JkbHN0YXRlID0gZmFsc2U7CisJCQkJfQorCQkJfSBlbHNlIHsvKiBCYWxhbmNlIFRQIGlzIHByZXNlbnQuICovCisJCQkJaWYgKCFydGxwcml2LT5kbS5pc19jdXJfcmRsc3RhdGUgfHwKKwkJCQkJIXJ0bHByaXYtPmRtLmN1cnJlbnRfdHVyYm9fZWRjYSkgeworCQkJCQlpZiAobWFjLT5tb2RlID09IFdJUkVMRVNTX01PREVfRyB8fAorCQkJCQkgICAgbWFjLT5tb2RlID09IFdJUkVMRVNTX01PREVfQikKKwkJCQkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LAorCQkJCQkJCQlFRENBUEFSQV9CRSwKKwkJCQkJCQkJZWRjYV9nbW9kZSk7CisJCQkJCWVsc2UKKwkJCQkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LAorCQkJCQkJCQlFRENBUEFSQV9CRSwKKwkJCQkJCQkJZWRjYV9iZV9kbCk7CisJCQkJCXJ0bHByaXYtPmRtLmlzX2N1cl9yZGxzdGF0ZSA9IHRydWU7CisJCQkJfQorCQkJfQorCQkJcnRscHJpdi0+ZG0uY3VycmVudF90dXJib19lZGNhID0gdHJ1ZTsKKwkJfSBlbHNlIHsKKwkJCWlmIChjdXJfcnhva19jbnQgPiA0ICogY3VyX3R4b2tfY250KSB7CisJCQkJaWYgKCFydGxwcml2LT5kbS5pc19jdXJfcmRsc3RhdGUgfHwKKwkJCQkJIXJ0bHByaXYtPmRtLmN1cnJlbnRfdHVyYm9fZWRjYSkgeworCQkJCQlpZiAobWFjLT5tb2RlID09IFdJUkVMRVNTX01PREVfRyB8fAorCQkJCQkgICAgbWFjLT5tb2RlID09IFdJUkVMRVNTX01PREVfQikKKwkJCQkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LAorCQkJCQkJCQlFRENBUEFSQV9CRSwKKwkJCQkJCQkJZWRjYV9nbW9kZSk7CisJCQkJCWVsc2UKKwkJCQkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LAorCQkJCQkJCQlFRENBUEFSQV9CRSwKKwkJCQkJCQkJZWRjYV9iZV9kbCk7CisJCQkJCXJ0bHByaXYtPmRtLmlzX2N1cl9yZGxzdGF0ZSA9IHRydWU7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAocnRscHJpdi0+ZG0uaXNfY3VyX3JkbHN0YXRlIHx8CisJCQkJCSFydGxwcml2LT5kbS5jdXJyZW50X3R1cmJvX2VkY2EpIHsKKwkJCQkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIEVEQ0FQQVJBX0JFLAorCQkJCQkJCWVkY2FfYmVfdWwpOworCQkJCQlydGxwcml2LT5kbS5pc19jdXJfcmRsc3RhdGUgPSBmYWxzZTsKKwkJCQl9CisJCQl9CisJCQlydGxwcml2LT5kbS5jdXJyZW50X3R1cmJvX2VkY2EgPSB0cnVlOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHJ0bHByaXYtPmRtLmN1cnJlbnRfdHVyYm9fZWRjYSkgeworCQkJdTggdG1wID0gQUMwX0JFOworCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9BQ19QQVJBTSwKKwkJCQkJCSAgICAgICh1OCAqKSgmdG1wKSk7CisJCQlydGxwcml2LT5kbS5jdXJyZW50X3R1cmJvX2VkY2EgPSBmYWxzZTsKKwkJfQorCX0KKworZG1fY2hlY2tlZGNhdHVyYm9fZXhpdDoKKwlydGxwcml2LT5kbS5pc19hbnlfbm9uYmVwa3RzID0gZmFsc2U7CisJbGFzdF90eG9rX2NudCA9IHJ0bHByaXYtPnN0YXRzLnR4Ynl0ZXN1bmljYXN0OworCWxhc3Rfcnhva19jbnQgPSBydGxwcml2LT5zdGF0cy5yeGJ5dGVzdW5pY2FzdDsKK30KKworc3RhdGljIHZvaWQgX3J0bDkyc19kbV90eHBvd2VydHJhY2tpbmdfY2FsbGJhY2tfdGhlcm1hbG1ldGVyKAorCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKKwl1OCB0aGVybWFsdmFsdWUgPSAwOworCisJcnRscHJpdi0+ZG0udHhwb3dlcl90cmFja2luZ2luaXQgPSB0cnVlOworCisJdGhlcm1hbHZhbHVlID0gKHU4KXJ0bF9nZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9BLCBSRl9UX01FVEVSLCAweDFmKTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVJfVFJBQ0tJTkcsIERCR19MT1VELAorCQkgKCJSZWFkYmFjayBUaGVybWFsIE1ldGVyID0gMHgleCBwcmUgdGhlcm1hbCBtZXRlciAweCV4ICIKKwkJICAiZWVwcm9tX3RoZXJtYWxtZXRlciAweCV4XG4iLCB0aGVybWFsdmFsdWUsCisJCSAgcnRscHJpdi0+ZG0udGhlcm1hbHZhbHVlLCBydGxlZnVzZS0+ZWVwcm9tX3RoZXJtYWxtZXRlcikpOworCisJaWYgKHRoZXJtYWx2YWx1ZSkgeworCQlydGxwcml2LT5kbS50aGVybWFsdmFsdWUgPSB0aGVybWFsdmFsdWU7CisJCXJ0bDkyc19waHlfc2V0X2Z3X2NtZChodywgRldfQ01EX1RYUFdSX1RSQUNLX1RIRVJNQUwpOworCX0KKworCXJ0bHByaXYtPmRtLnR4cG93ZXJjb3VudCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MnNfZG1fY2hlY2tfdHhwb3dlcnRyYWNraW5nX3RoZXJtYWxtZXRlcigKKwkJCQkJc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJc3RhdGljIHU4IHRtX3RyaWdnZXI7CisJdTggdHhfcG93ZXJfY2hlY2tjbnQgPSA1OworCisJLyogMlQyUiBUUCBpc3N1ZSAqLworCWlmIChydGxwaHktPnJmX3R5cGUgPT0gUkZfMlQyUikKKwkJcmV0dXJuOworCisJaWYgKCFydGxwcml2LT5kbS50eHBvd2VyX3RyYWNraW5nKQorCQlyZXR1cm47CisKKwlpZiAocnRscHJpdi0+ZG0udHhwb3dlcmNvdW50IDw9IHR4X3Bvd2VyX2NoZWNrY250KSB7CisJCXJ0bHByaXYtPmRtLnR4cG93ZXJjb3VudCsrOworCQlyZXR1cm47CisJfQorCisJaWYgKCF0bV90cmlnZ2VyKSB7CisJCXJ0bF9zZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9BLCBSRl9UX01FVEVSLAorCQkJICAgICAgUkZSRUdfT0ZGU0VUX01BU0ssIDB4NjApOworCQl0bV90cmlnZ2VyID0gMTsKKwl9IGVsc2UgeworCQlfcnRsOTJzX2RtX3R4cG93ZXJ0cmFja2luZ19jYWxsYmFja190aGVybWFsbWV0ZXIoaHcpOworCQl0bV90cmlnZ2VyID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MnNfZG1fcmVmcmVzaF9yYXRlYWRhcHRpdmVfbWFzayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCByYXRlX2FkYXB0aXZlICpyYSA9ICYocnRscHJpdi0+cmEpOworCisJdTMyIGxvd19yc3NpX3RocmVzaCA9IDA7CisJdTMyIG1pZGRsZV9yc3NpX3RocmVzaCA9IDA7CisJdTMyIGhpZ2hfcnNzaV90aHJlc2ggPSAwOworCXU4IHJzc2lfbGV2ZWw7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSA9IE5VTEw7CisKKwlpZiAoaXNfaGFsX3N0b3AocnRsaGFsKSkKKwkJcmV0dXJuOworCisJaWYgKCFydGxwcml2LT5kbS51c2VyYW1hc2spCisJCXJldHVybjsKKworCWlmICghcnRscHJpdi0+ZG0uaW5mb3JtX2Z3X2RyaXZlcmN0cmxkbSkgeworCQlydGw5MnNfcGh5X3NldF9md19jbWQoaHcsIEZXX0NNRF9DVFJMX0RNX0JZX0RSSVZFUik7CisJCXJ0bHByaXYtPmRtLmluZm9ybV9md19kcml2ZXJjdHJsZG0gPSB0cnVlOworCX0KKworCXJjdV9yZWFkX2xvY2soKTsKKwlpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJc3RhID0gZ2V0X3N0YShodywgbWFjLT52aWYsIG1hYy0+YnNzaWQpOworCWlmICgobWFjLT5saW5rX3N0YXRlID09IE1BQzgwMjExX0xJTktFRCkgJiYKKwkgICAgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pKSB7CisJCXN3aXRjaCAocmEtPnByZV9yYXRyX3N0YXRlKSB7CisJCWNhc2UgRE1fUkFUUl9TVEFfSElHSDoKKwkJCWhpZ2hfcnNzaV90aHJlc2ggPSA0MDsKKwkJCW1pZGRsZV9yc3NpX3RocmVzaCA9IDMwOworCQkJbG93X3Jzc2lfdGhyZXNoID0gMjA7CisJCQlicmVhazsKKwkJY2FzZSBETV9SQVRSX1NUQV9NSURETEU6CisJCQloaWdoX3Jzc2lfdGhyZXNoID0gNDQ7CisJCQltaWRkbGVfcnNzaV90aHJlc2ggPSAzMDsKKwkJCWxvd19yc3NpX3RocmVzaCA9IDIwOworCQkJYnJlYWs7CisJCWNhc2UgRE1fUkFUUl9TVEFfTE9XOgorCQkJaGlnaF9yc3NpX3RocmVzaCA9IDQ0OworCQkJbWlkZGxlX3Jzc2lfdGhyZXNoID0gMzQ7CisJCQlsb3dfcnNzaV90aHJlc2ggPSAyMDsKKwkJCWJyZWFrOworCQljYXNlIERNX1JBVFJfU1RBX1VMVFJBTE9XOgorCQkJaGlnaF9yc3NpX3RocmVzaCA9IDQ0OworCQkJbWlkZGxlX3Jzc2lfdGhyZXNoID0gMzQ7CisJCQlsb3dfcnNzaV90aHJlc2ggPSAyNDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaGlnaF9yc3NpX3RocmVzaCA9IDQ0OworCQkJbWlkZGxlX3Jzc2lfdGhyZXNoID0gMzQ7CisJCQlsb3dfcnNzaV90aHJlc2ggPSAyNDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHJ0bHByaXYtPmRtLnVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPgorCQkgICAgKGxvbmcpaGlnaF9yc3NpX3RocmVzaCkgeworCQkJcmEtPnJhdHJfc3RhdGUgPSBETV9SQVRSX1NUQV9ISUdIOworCQkJcnNzaV9sZXZlbCA9IDE7CisJCX0gZWxzZSBpZiAocnRscHJpdi0+ZG0udW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYiA+CisJCQkgICAobG9uZyltaWRkbGVfcnNzaV90aHJlc2gpIHsKKwkJCXJhLT5yYXRyX3N0YXRlID0gRE1fUkFUUl9TVEFfTE9XOworCQkJcnNzaV9sZXZlbCA9IDM7CisJCX0gZWxzZSBpZiAocnRscHJpdi0+ZG0udW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYiA+CisJCQkgICAobG9uZylsb3dfcnNzaV90aHJlc2gpIHsKKwkJCXJhLT5yYXRyX3N0YXRlID0gRE1fUkFUUl9TVEFfTE9XOworCQkJcnNzaV9sZXZlbCA9IDU7CisJCX0gZWxzZSB7CisJCQlyYS0+cmF0cl9zdGF0ZSA9IERNX1JBVFJfU1RBX1VMVFJBTE9XOworCQkJcnNzaV9sZXZlbCA9IDY7CisJCX0KKworCQlpZiAocmEtPnByZV9yYXRyX3N0YXRlICE9IHJhLT5yYXRyX3N0YXRlKSB7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1JBVEUsIERCR19MT1VELCAoIlJTU0kgPSAlbGQgIgorCQkJCSJSU1NJX0xFVkVMID0gJWQgUHJlU3RhdGUgPSAlZCwgQ3VyU3RhdGUgPSAlZFxuIiwKKwkJCQlydGxwcml2LT5kbS51bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiLAorCQkJCXJhLT5yYXRyX3N0YXRlLAorCQkJCXJhLT5wcmVfcmF0cl9zdGF0ZSwgcmEtPnJhdHJfc3RhdGUpKTsKKworCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnVwZGF0ZV9yYXRlX3RibChodywgc3RhLAorCQkJCQkJCSAgIHJhLT5yYXRyX3N0YXRlKTsKKwkJCXJhLT5wcmVfcmF0cl9zdGF0ZSA9IHJhLT5yYXRyX3N0YXRlOworCQl9CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJzX2RtX3N3aXRjaF9iYXNlYmFuZF9tcmMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCWJvb2wgY3VycmVudF9tcmM7CisJYm9vbCBlbmFibGVfbXJjID0gdHJ1ZTsKKwlsb25nIHRtcGVudHJ5X21heHB3ZGIgPSAwOworCXU4IHJzc2lfYSA9IDA7CisJdTggcnNzaV9iID0gMDsKKworCWlmIChpc19oYWxfc3RvcChydGxoYWwpKQorCQlyZXR1cm47CisKKwlpZiAoKHJ0bHBoeS0+cmZfdHlwZSA9PSBSRl8xVDFSKSB8fCAocnRscGh5LT5yZl90eXBlID09IFJGXzJUMlIpKQorCQlyZXR1cm47CisKKwlydGxwcml2LT5jZmctPm9wcy0+Z2V0X2h3X3JlZyhodywgSFdfVkFSX01SQywgKHU4ICopKCZjdXJyZW50X21yYykpOworCisJaWYgKG1hYy0+bGlua19zdGF0ZSA+PSBNQUM4MDIxMV9MSU5LRUQpIHsKKwkJaWYgKHJ0bHByaXYtPmRtLnVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPiB0bXBlbnRyeV9tYXhwd2RiKSB7CisJCQlyc3NpX2EgPSBydGxwcml2LT5zdGF0cy5yeF9yc3NpX3BlcmNlbnRhZ2VbUkY5MF9QQVRIX0FdOworCQkJcnNzaV9iID0gcnRscHJpdi0+c3RhdHMucnhfcnNzaV9wZXJjZW50YWdlW1JGOTBfUEFUSF9CXTsKKwkJfQorCX0KKworCS8qIE1SQyBzZXR0aW5ncyB3b3VsZCBOT1QgYWZmZWN0IFRQIG9uIFdpcmVsZXNzIEIgbW9kZS4gKi8KKwlpZiAobWFjLT5tb2RlICE9IFdJUkVMRVNTX01PREVfQikgeworCQlpZiAoKHJzc2lfYSA9PSAwKSAmJiAocnNzaV9iID09IDApKSB7CisJCQllbmFibGVfbXJjID0gdHJ1ZTsKKwkJfSBlbHNlIGlmIChyc3NpX2IgPiAzMCkgeworCQkJLyogVHVybiBvbiBCLVBhdGggKi8KKwkJCWVuYWJsZV9tcmMgPSB0cnVlOworCQl9IGVsc2UgaWYgKHJzc2lfYiA8IDUpIHsKKwkJCS8qIFR1cm4gb2ZmIEItcGF0aCAgKi8KKwkJCWVuYWJsZV9tcmMgPSBmYWxzZTsKKwkJLyogVGFrZSBjYXJlIG9mIFJTU0kgZGlmZmVyZW50aWF0aW9uLiAqLworCQl9IGVsc2UgaWYgKHJzc2lfYSA+IDE1ICYmIChyc3NpX2EgPj0gcnNzaV9iKSkgeworCQkJaWYgKChyc3NpX2EgLSByc3NpX2IpID4gMTUpCisJCQkJLyogVHVybiBvZmYgQi1wYXRoICAqLworCQkJCWVuYWJsZV9tcmMgPSBmYWxzZTsKKwkJCWVsc2UgaWYgKChyc3NpX2EgLSByc3NpX2IpIDwgMTApCisJCQkJLyogVHVybiBvbiBCLVBhdGggKi8KKwkJCQllbmFibGVfbXJjID0gdHJ1ZTsKKwkJCWVsc2UKKwkJCQllbmFibGVfbXJjID0gY3VycmVudF9tcmM7CisJCX0gZWxzZSB7CisJCQkvKiBUdXJuIG9uIEItUGF0aCAqLworCQkJZW5hYmxlX21yYyA9IHRydWU7CisJCX0KKwl9CisKKwkvKiBVcGRhdGUgTVJDIHNldHRpbmdzIGlmIG5lZWRlZC4gKi8KKwlpZiAoZW5hYmxlX21yYyAhPSBjdXJyZW50X21yYykKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9NUkMsCisJCQkJCSAgICAgICh1OCAqKSZlbmFibGVfbXJjKTsKKworfQorCit2b2lkIHJ0bDkyc19kbV9pbml0X2VkY2FfdHVyYm8oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCisJcnRscHJpdi0+ZG0uY3VycmVudF90dXJib19lZGNhID0gZmFsc2U7CisJcnRscHJpdi0+ZG0uaXNfYW55X25vbmJlcGt0cyA9IGZhbHNlOworCXJ0bHByaXYtPmRtLmlzX2N1cl9yZGxzdGF0ZSA9IGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJzX2RtX2luaXRfcmF0ZV9hZGFwdGl2ZV9tYXNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcmF0ZV9hZGFwdGl2ZSAqcmEgPSAmKHJ0bHByaXYtPnJhKTsKKworCXJhLT5yYXRyX3N0YXRlID0gRE1fUkFUUl9TVEFfTUFYOworCXJhLT5wcmVfcmF0cl9zdGF0ZSA9IERNX1JBVFJfU1RBX01BWDsKKworCWlmIChydGxwcml2LT5kbS5kbV90eXBlID09IERNX1RZUEVfQllEUklWRVIpCisJCXJ0bHByaXYtPmRtLnVzZXJhbWFzayA9IHRydWU7CisJZWxzZQorCQlydGxwcml2LT5kbS51c2VyYW1hc2sgPSBmYWxzZTsKKworCXJ0bHByaXYtPmRtLnVzZXJhbWFzayA9IGZhbHNlOworCXJ0bHByaXYtPmRtLmluZm9ybV9md19kcml2ZXJjdHJsZG0gPSBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgX3J0bDkyc19kbV9pbml0X3R4cG93ZXJ0cmFja2luZ190aGVybWFsbWV0ZXIoCisJCQkJc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCisJcnRscHJpdi0+ZG0udHhwb3dlcl90cmFja2luZyA9IHRydWU7CisJcnRscHJpdi0+ZG0udHhwb3dlcmNvdW50ID0gMDsKKwlydGxwcml2LT5kbS50eHBvd2VyX3RyYWNraW5naW5pdCA9IGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJzX2RtX2ZhbHNlX2FsYXJtX2NvdW50ZXJfc3RhdGlzdGljcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IGZhbHNlX2FsYXJtX3N0YXRpc3RpY3MgKmZhbHNlYWxtX2NudCA9ICYocnRscHJpdi0+ZmFsc2VhbG1fY250KTsKKwl1MzIgcmV0X3ZhbHVlOworCisJcmV0X3ZhbHVlID0gcnRsX2dldF9iYnJlZyhodywgUk9GRE1fUEhZQ09VTlRFUjEsIE1BU0tEV09SRCk7CisJZmFsc2VhbG1fY250LT5jbnRfcGFyaXR5X2ZhaWwgPSAoKHJldF92YWx1ZSAmIDB4ZmZmZjAwMDApID4+IDE2KTsKKworCXJldF92YWx1ZSA9IHJ0bF9nZXRfYmJyZWcoaHcsIFJPRkRNX1BIWUNPVU5URVIyLCBNQVNLRFdPUkQpOworCWZhbHNlYWxtX2NudC0+Y250X3JhdGVfaWxsZWdhbCA9IChyZXRfdmFsdWUgJiAweGZmZmYpOworCWZhbHNlYWxtX2NudC0+Y250X2NyYzhfZmFpbCA9ICgocmV0X3ZhbHVlICYgMHhmZmZmMDAwMCkgPj4gMTYpOworCXJldF92YWx1ZSA9IHJ0bF9nZXRfYmJyZWcoaHcsIFJPRkRNX1BIWUNPVU5URVIzLCBNQVNLRFdPUkQpOworCWZhbHNlYWxtX2NudC0+Y250X21jc19mYWlsID0gKHJldF92YWx1ZSAmIDB4ZmZmZik7CisKKwlmYWxzZWFsbV9jbnQtPmNudF9vZmRtX2ZhaWwgPSBmYWxzZWFsbV9jbnQtPmNudF9wYXJpdHlfZmFpbCArCisJCWZhbHNlYWxtX2NudC0+Y250X3JhdGVfaWxsZWdhbCArIGZhbHNlYWxtX2NudC0+Y250X2NyYzhfZmFpbCArCisJCWZhbHNlYWxtX2NudC0+Y250X21jc19mYWlsOworCisJLyogcmVhZCBDQ0sgZmFsc2UgYWxhcm0gKi8KKwlyZXRfdmFsdWUgPSBydGxfZ2V0X2JicmVnKGh3LCAweGM2NCwgTUFTS0RXT1JEKTsKKwlmYWxzZWFsbV9jbnQtPmNudF9jY2tfZmFpbCA9IChyZXRfdmFsdWUgJiAweGZmZmYpOworCWZhbHNlYWxtX2NudC0+Y250X2FsbCA9CWZhbHNlYWxtX2NudC0+Y250X29mZG1fZmFpbCArCisJCWZhbHNlYWxtX2NudC0+Y250X2Nja19mYWlsOworfQorCitzdGF0aWMgdm9pZCBydGw5MnNfYmFja29mZl9lbmFibGVfZmxhZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IGZhbHNlX2FsYXJtX3N0YXRpc3RpY3MgKmZhbHNlYWxtX2NudCA9ICYocnRscHJpdi0+ZmFsc2VhbG1fY250KTsKKworCWlmIChmYWxzZWFsbV9jbnQtPmNudF9hbGwgPiBkaWd0YWJsZS5mYV9oaWdodGhyZXNoKSB7CisJCWlmICgoZGlndGFibGUuYmFja29mZl92YWwgLSA2KSA8CisJCQlkaWd0YWJsZS5iYWNrb2ZmdmFsX3JhbmdlX21pbikKKwkJCWRpZ3RhYmxlLmJhY2tvZmZfdmFsID0gZGlndGFibGUuYmFja29mZnZhbF9yYW5nZV9taW47CisJCWVsc2UKKwkJCWRpZ3RhYmxlLmJhY2tvZmZfdmFsIC09IDY7CisJfSBlbHNlIGlmIChmYWxzZWFsbV9jbnQtPmNudF9hbGwgPCBkaWd0YWJsZS5mYV9sb3d0aHJlc2gpIHsKKwkJaWYgKChkaWd0YWJsZS5iYWNrb2ZmX3ZhbCArIDYpID4KKwkJCWRpZ3RhYmxlLmJhY2tvZmZ2YWxfcmFuZ2VfbWF4KQorCQkJZGlndGFibGUuYmFja29mZl92YWwgPQorCQkJCSBkaWd0YWJsZS5iYWNrb2ZmdmFsX3JhbmdlX21heDsKKwkJZWxzZQorCQkJZGlndGFibGUuYmFja29mZl92YWwgKz0gNjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MnNfZG1faW5pdGlhbF9nYWluX3N0YV9iZWZvcmVjb25uZWN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgZmFsc2VfYWxhcm1fc3RhdGlzdGljcyAqZmFsc2VhbG1fY250ID0gJihydGxwcml2LT5mYWxzZWFsbV9jbnQpOworCXN0YXRpYyB1OCBpbml0aWFsaXplZCwgZm9yY2Vfd3JpdGU7CisJdTggaW5pdGlhbF9nYWluID0gMDsKKworCWlmICgoZGlndGFibGUucHJlX3N0YV9jb25uZWN0c3RhdGUgPT0gZGlndGFibGUuY3VyX3N0YV9jb25uZWN0c3RhdGUpIHx8CisJCShkaWd0YWJsZS5jdXJfc3RhX2Nvbm5lY3RzdGF0ZSA9PSBESUdfU1RBX0JFRk9SRV9DT05ORUNUKSkgeworCQlpZiAoZGlndGFibGUuY3VyX3N0YV9jb25uZWN0c3RhdGUgPT0gRElHX1NUQV9CRUZPUkVfQ09OTkVDVCkgeworCQkJaWYgKHJ0bHByaXYtPnBzYy5yZnB3cl9zdGF0ZSAhPSBFUkZPTikKKwkJCQlyZXR1cm47CisKKwkJCWlmIChkaWd0YWJsZS5iYWNrb2ZmX2VuYWJsZV9mbGFnID09IHRydWUpCisJCQkJcnRsOTJzX2JhY2tvZmZfZW5hYmxlX2ZsYWcoaHcpOworCQkJZWxzZQorCQkJCWRpZ3RhYmxlLmJhY2tvZmZfdmFsID0gRE1fRElHX0JBQ0tPRkY7CisKKwkJCWlmICgoZGlndGFibGUucnNzaV92YWwgKyAxMCAtIGRpZ3RhYmxlLmJhY2tvZmZfdmFsKSA+CisJCQkJZGlndGFibGUucnhfZ2Fpbl9yYW5nZV9tYXgpCisJCQkJZGlndGFibGUuY3VyX2lndmFsdWUgPQorCQkJCQkJZGlndGFibGUucnhfZ2Fpbl9yYW5nZV9tYXg7CisJCQllbHNlIGlmICgoZGlndGFibGUucnNzaV92YWwgKyAxMCAtIGRpZ3RhYmxlLmJhY2tvZmZfdmFsKQorCQkJCSA8IGRpZ3RhYmxlLnJ4X2dhaW5fcmFuZ2VfbWluKQorCQkJCWRpZ3RhYmxlLmN1cl9pZ3ZhbHVlID0KKwkJCQkJCWRpZ3RhYmxlLnJ4X2dhaW5fcmFuZ2VfbWluOworCQkJZWxzZQorCQkJCWRpZ3RhYmxlLmN1cl9pZ3ZhbHVlID0gZGlndGFibGUucnNzaV92YWwgKyAxMCAtCisJCQkJCQlkaWd0YWJsZS5iYWNrb2ZmX3ZhbDsKKworCQkJaWYgKGZhbHNlYWxtX2NudC0+Y250X2FsbCA+IDEwMDAwKQorCQkJCWRpZ3RhYmxlLmN1cl9pZ3ZhbHVlID0KKwkJCQkJIChkaWd0YWJsZS5jdXJfaWd2YWx1ZSA+IDB4MzMpID8KKwkJCQkJIGRpZ3RhYmxlLmN1cl9pZ3ZhbHVlIDogMHgzMzsKKworCQkJaWYgKGZhbHNlYWxtX2NudC0+Y250X2FsbCA+IDE2MDAwKQorCQkJCWRpZ3RhYmxlLmN1cl9pZ3ZhbHVlID0KKwkJCQkJCSBkaWd0YWJsZS5yeF9nYWluX3JhbmdlX21heDsKKwkJLyogY29ubmVjdGVkIC0+IGNvbm5lY3RlZCBvciBkaXNjb25uZWN0ZWQgLT4gZGlzY29ubmVjdGVkICAqLworCQl9IGVsc2UgeworCQkJLyogRmlybXdhcmUgY29udHJvbCBESUcsIGRvIG5vdGhpbmcgaW4gZHJpdmVyIGRtICovCisJCQlyZXR1cm47CisJCX0KKwkJLyogZGlzY29ubmVjdGVkIC0+IGNvbm5lY3RlZCBvciBjb25uZWN0ZWQgLT4KKwkJICogZGlzY29ubmVjdGVkIG9yIGJlZm9yZWNvbm5lY3QtPihkaXMpY29ubmVjdGVkICovCisJfSBlbHNlIHsKKwkJLyogRW5hYmxlIEZXIERJRyAqLworCQlkaWd0YWJsZS5kaWdfZXh0X3BvcnRfc3RhZ2UgPSBESUdfRVhUX1BPUlRfU1RBR0VfTUFYOworCQlydGw5MnNfcGh5X3NldF9md19jbWQoaHcsIEZXX0NNRF9ESUdfRU5BQkxFKTsKKworCQlkaWd0YWJsZS5iYWNrb2ZmX3ZhbCA9IERNX0RJR19CQUNLT0ZGOworCQlkaWd0YWJsZS5jdXJfaWd2YWx1ZSA9IHJ0bHByaXYtPnBoeS5kZWZhdWx0X2luaXRpYWxnYWluWzBdOworCQlkaWd0YWJsZS5wcmVfaWd2YWx1ZSA9IDA7CisJCXJldHVybjsKKwl9CisKKwkvKiBGb3JjZWQgd3JpdGluZyB0byBwcmV2ZW50IGZyb20gZnctZGlnIG92ZXJ3cml0aW5nLiAqLworCWlmIChkaWd0YWJsZS5wcmVfaWd2YWx1ZSAhPSBydGxfZ2V0X2JicmVnKGh3LCBST0ZETTBfWEFBR0NDT1JFMSwKKwkJCQkJCSAgTUFTS0JZVEUwKSkKKwkJZm9yY2Vfd3JpdGUgPSAxOworCisJaWYgKChkaWd0YWJsZS5wcmVfaWd2YWx1ZSAhPSBkaWd0YWJsZS5jdXJfaWd2YWx1ZSkgfHwKKwkgICAgIWluaXRpYWxpemVkIHx8IGZvcmNlX3dyaXRlKSB7CisJCS8qIERpc2FibGUgRlcgRElHICovCisJCXJ0bDkyc19waHlfc2V0X2Z3X2NtZChodywgRldfQ01EX0RJR19ESVNBQkxFKTsKKworCQlpbml0aWFsX2dhaW4gPSAodTgpZGlndGFibGUuY3VyX2lndmFsdWU7CisKKwkJLyogU2V0IGluaXRpYWwgZ2Fpbi4gKi8KKwkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX1hBQUdDQ09SRTEsIE1BU0tCWVRFMCwgaW5pdGlhbF9nYWluKTsKKwkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX1hCQUdDQ09SRTEsIE1BU0tCWVRFMCwgaW5pdGlhbF9nYWluKTsKKwkJZGlndGFibGUucHJlX2lndmFsdWUgPSBkaWd0YWJsZS5jdXJfaWd2YWx1ZTsKKwkJaW5pdGlhbGl6ZWQgPSAxOworCQlmb3JjZV93cml0ZSA9IDA7CisJfQorfQorCitzdGF0aWMgdm9pZCBfcnRsOTJzX2RtX2N0cmxfaW5pdGdhaW5fYnl0d29wb3J0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCWlmIChydGxwcml2LT5tYWM4MDIxMS5hY3Rfc2Nhbm5pbmcpCisJCXJldHVybjsKKworCS8qIERlY2lkZSB0aGUgY3VycmVudCBzdGF0dXMgYW5kIGlmIG1vZGlmeSBpbml0aWFsIGdhaW4gb3Igbm90ICovCisJaWYgKHJ0bHByaXYtPm1hYzgwMjExLmxpbmtfc3RhdGUgPj0gTUFDODAyMTFfTElOS0VEIHx8CisJICAgIHJ0bHByaXYtPm1hYzgwMjExLm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkJZGlndGFibGUuY3VyX3N0YV9jb25uZWN0c3RhdGUgPSBESUdfU1RBX0NPTk5FQ1Q7CisJZWxzZQorCQlkaWd0YWJsZS5jdXJfc3RhX2Nvbm5lY3RzdGF0ZSA9IERJR19TVEFfRElTQ09OTkVDVDsKKworCWRpZ3RhYmxlLnJzc2lfdmFsID0gcnRscHJpdi0+ZG0udW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYjsKKworCS8qIENoYW5nZSBkaWcgbW9kZSB0byByc3NpICovCisJaWYgKGRpZ3RhYmxlLmN1cl9zdGFfY29ubmVjdHN0YXRlICE9IERJR19TVEFfRElTQ09OTkVDVCkgeworCQlpZiAoZGlndGFibGUuZGlnX3R3b3BvcnRfYWxnb3JpdGhtID09CisJCSAgICBESUdfVFdPX1BPUlRfQUxHT19GQUxTRV9BTEFSTSkgeworCQkJZGlndGFibGUuZGlnX3R3b3BvcnRfYWxnb3JpdGhtID0gRElHX1RXT19QT1JUX0FMR09fUlNTSTsKKwkJCXJ0bDkyc19waHlfc2V0X2Z3X2NtZChodywgRldfQ01EX0RJR19NT0RFX1NTKTsKKwkJfQorCX0KKworCV9ydGw5MnNfZG1fZmFsc2VfYWxhcm1fY291bnRlcl9zdGF0aXN0aWNzKGh3KTsKKwlfcnRsOTJzX2RtX2luaXRpYWxfZ2Fpbl9zdGFfYmVmb3JlY29ubmVjdChodyk7CisKKwlkaWd0YWJsZS5wcmVfc3RhX2Nvbm5lY3RzdGF0ZSA9IGRpZ3RhYmxlLmN1cl9zdGFfY29ubmVjdHN0YXRlOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJzX2RtX2N0cmxfaW5pdGdhaW5fYnlyc3NpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCisJLyogMlQyUiBUUCBpc3N1ZSAqLworCWlmIChydGxwaHktPnJmX3R5cGUgPT0gUkZfMlQyUikKKwkJcmV0dXJuOworCisJaWYgKCFydGxwcml2LT5kbS5kbV9pbml0aWFsZ2Fpbl9lbmFibGUpCisJCXJldHVybjsKKworCWlmIChkaWd0YWJsZS5kaWdfZW5hYmxlX2ZsYWcgPT0gZmFsc2UpCisJCXJldHVybjsKKworCV9ydGw5MnNfZG1fY3RybF9pbml0Z2Fpbl9ieXR3b3BvcnQoaHcpOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJzX2RtX2R5bmFtaWNfdHhwb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCWxvbmcgdW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYjsKKwlsb25nIHR4cHdyX3RocmVzaG9sZF9sdjEsIHR4cHdyX3RocmVzaG9sZF9sdjI7CisKKwkvKiAyVDJSIFRQIGlzc3VlICovCisJaWYgKHJ0bHBoeS0+cmZfdHlwZSA9PSBSRl8yVDJSKQorCQlyZXR1cm47CisKKwlpZiAoIXJ0bHByaXYtPmRtLmR5bmFtaWNfdHhwb3dlcl9lbmFibGUgfHwKKwkgICAgcnRscHJpdi0+ZG0uZG1fZmxhZyAmIEhBTF9ETV9ISVBXUl9ESVNBQkxFKSB7CisJCXJ0bHByaXYtPmRtLmR5bmFtaWNfdHhoaWdocG93ZXJfbHZsID0gVFhfSElHSFBXUl9MRVZFTF9OT1JNQUw7CisJCXJldHVybjsKKwl9CisKKwlpZiAoKG1hYy0+bGlua19zdGF0ZSA8IE1BQzgwMjExX0xJTktFRCkgJiYKKwkgICAgKHJ0bHByaXYtPmRtLmVudHJ5X21pbl91bmRlY29yYXRlZHNtb290aGVkX3B3ZGIgPT0gMCkpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9QT1dFUiwgREJHX1RSQUNFLAorCQkJICgiTm90IGNvbm5lY3RlZCB0byBhbnlcbiIpKTsKKworCQlydGxwcml2LT5kbS5keW5hbWljX3R4aGlnaHBvd2VyX2x2bCA9IFRYX0hJR0hQV1JfTEVWRUxfTk9STUFMOworCisJCXJ0bHByaXYtPmRtLmxhc3RfZHRwX2x2bCA9IFRYX0hJR0hQV1JfTEVWRUxfTk9STUFMOworCQlyZXR1cm47CisJfQorCisJaWYgKG1hYy0+bGlua19zdGF0ZSA+PSBNQUM4MDIxMV9MSU5LRUQpIHsKKwkJaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCQl1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiID0KKwkJCSAgICBydGxwcml2LT5kbS5lbnRyeV9taW5fdW5kZWNvcmF0ZWRzbW9vdGhlZF9wd2RiOworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9QT1dFUiwgREJHX0xPVUQsCisJCQkJICgiQVAgQ2xpZW50IFBXREIgPSAweCVseFxuIiwKKwkJCQkgIHVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIpKTsKKwkJfSBlbHNlIHsKKwkJCXVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPQorCQkJICAgIHJ0bHByaXYtPmRtLnVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGI7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfTE9VRCwKKwkJCQkgKCJTVEEgRGVmYXVsdCBQb3J0IFBXREIgPSAweCVseFxuIiwKKwkJCQkgIHVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIpKTsKKwkJfQorCX0gZWxzZSB7CisJCXVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPQorCQkgICAgcnRscHJpdi0+ZG0uZW50cnlfbWluX3VuZGVjb3JhdGVkc21vb3RoZWRfcHdkYjsKKworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfTE9VRCwKKwkJCSAoIkFQIEV4dCBQb3J0IFBXREIgPSAweCVseFxuIiwKKwkJCSAgdW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYikpOworCX0KKworCXR4cHdyX3RocmVzaG9sZF9sdjIgPSBUWF9QT1dFUl9ORUFSX0ZJRUxEX1RIUkVTSF9MVkwyOworCXR4cHdyX3RocmVzaG9sZF9sdjEgPSBUWF9QT1dFUl9ORUFSX0ZJRUxEX1RIUkVTSF9MVkwxOworCisJaWYgKHJ0bF9nZXRfYmJyZWcoaHcsIDB4YzkwLCBNQVNLQllURTApID09IDEpCisJCXJ0bHByaXYtPmRtLmR5bmFtaWNfdHhoaWdocG93ZXJfbHZsID0gVFhfSElHSFBXUl9MRVZFTF9OT1JNQUw7CisJZWxzZSBpZiAodW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYiA+PSB0eHB3cl90aHJlc2hvbGRfbHYyKQorCQlydGxwcml2LT5kbS5keW5hbWljX3R4aGlnaHBvd2VyX2x2bCA9IFRYX0hJR0hQV1JfTEVWRUxfTk9STUFMMjsKKwllbHNlIGlmICgodW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYiA8ICh0eHB3cl90aHJlc2hvbGRfbHYyIC0gMykpICYmCisJCSh1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiID49IHR4cHdyX3RocmVzaG9sZF9sdjEpKQorCQlydGxwcml2LT5kbS5keW5hbWljX3R4aGlnaHBvd2VyX2x2bCA9IFRYX0hJR0hQV1JfTEVWRUxfTk9STUFMMTsKKwllbHNlIGlmICh1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiIDwgKHR4cHdyX3RocmVzaG9sZF9sdjEgLSAzKSkKKwkJcnRscHJpdi0+ZG0uZHluYW1pY190eGhpZ2hwb3dlcl9sdmwgPSBUWF9ISUdIUFdSX0xFVkVMX05PUk1BTDsKKworCWlmICgocnRscHJpdi0+ZG0uZHluYW1pY190eGhpZ2hwb3dlcl9sdmwgIT0gcnRscHJpdi0+ZG0ubGFzdF9kdHBfbHZsKSkKKwkJcnRsOTJzX3BoeV9zZXRfdHhwb3dlcihodywgcnRscGh5LT5jdXJyZW50X2NoYW5uZWwpOworCisJcnRscHJpdi0+ZG0ubGFzdF9kdHBfbHZsID0gcnRscHJpdi0+ZG0uZHluYW1pY190eGhpZ2hwb3dlcl9sdmw7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MnNfZG1faW5pdF9kaWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCisJLyogRGlzYWJsZSBESUcgc2NoZW1lIG5vdy4qLworCWRpZ3RhYmxlLmRpZ19lbmFibGVfZmxhZyA9IHRydWU7CisJZGlndGFibGUuYmFja29mZl9lbmFibGVfZmxhZyA9IHRydWU7CisKKwlpZiAoKHJ0bHByaXYtPmRtLmRtX3R5cGUgPT0gRE1fVFlQRV9CWURSSVZFUikgJiYKKwkgICAgKGhhbF9nZXRfZmlybXdhcmV2ZXJzaW9uKHJ0bHByaXYpID49IDB4M2MpKQorCQlkaWd0YWJsZS5kaWdfYWxnb3JpdGhtID0gRElHX0FMR09fQllfVE9XX1BPUlQ7CisJZWxzZQorCQlkaWd0YWJsZS5kaWdfYWxnb3JpdGhtID0KKwkJCSBESUdfQUxHT19CRUZPUkVfQ09OTkVDVF9CWV9SU1NJX0FORF9BTEFSTTsKKworCWRpZ3RhYmxlLmRpZ190d29wb3J0X2FsZ29yaXRobSA9IERJR19UV09fUE9SVF9BTEdPX1JTU0k7CisJZGlndGFibGUuZGlnX2V4dF9wb3J0X3N0YWdlID0gRElHX0VYVF9QT1JUX1NUQUdFX01BWDsKKwkvKiBvZmY9YnkgcmVhbCByc3NpIHZhbHVlLCBvbj1ieSBkaWd0YWJsZS5yc3NpX3ZhbCBmb3IgbmV3IGRpZyAqLworCWRpZ3RhYmxlLmRpZ19kYmdtb2RlID0gRE1fREJHX09GRjsKKwlkaWd0YWJsZS5kaWdfc2xnb3JpdGhtX3N3aXRjaCA9IDA7CisKKwkvKiAyMDA3LzEwLzA0IE1IIERlZmluZSBpbml0IGdhaW4gdGhyZXNob2wuICovCisJZGlndGFibGUuZGlnX3N0YXRlID0gRE1fU1RBX0RJR19NQVg7CisJZGlndGFibGUuZGlnX2hpZ2hwd3JzdGF0ZSA9IERNX1NUQV9ESUdfTUFYOworCisJZGlndGFibGUuY3VyX3N0YV9jb25uZWN0c3RhdGUgPSBESUdfU1RBX0RJU0NPTk5FQ1Q7CisJZGlndGFibGUucHJlX3N0YV9jb25uZWN0c3RhdGUgPSBESUdfU1RBX0RJU0NPTk5FQ1Q7CisJZGlndGFibGUuY3VyX2FwX2Nvbm5lY3RzdGF0ZSA9IERJR19BUF9ESVNDT05ORUNUOworCWRpZ3RhYmxlLnByZV9hcF9jb25uZWN0c3RhdGUgPSBESUdfQVBfRElTQ09OTkVDVDsKKworCWRpZ3RhYmxlLnJzc2lfbG93dGhyZXNoID0gRE1fRElHX1RIUkVTSF9MT1c7CisJZGlndGFibGUucnNzaV9oaWdodGhyZXNoID0gRE1fRElHX1RIUkVTSF9ISUdIOworCisJZGlndGFibGUuZmFfbG93dGhyZXNoID0gRE1fRkFMU0VBTEFSTV9USFJFU0hfTE9XOworCWRpZ3RhYmxlLmZhX2hpZ2h0aHJlc2ggPSBETV9GQUxTRUFMQVJNX1RIUkVTSF9ISUdIOworCisJZGlndGFibGUucnNzaV9oaWdocG93ZXJfbG93dGhyZXNoID0gRE1fRElHX0hJR0hfUFdSX1RIUkVTSF9MT1c7CisJZGlndGFibGUucnNzaV9oaWdocG93ZXJfaGlnaHRocmVzaCA9IERNX0RJR19ISUdIX1BXUl9USFJFU0hfSElHSDsKKworCS8qIGZvciBkaWcgZGVidWcgcnNzaSB2YWx1ZSAqLworCWRpZ3RhYmxlLnJzc2lfdmFsID0gNTA7CisJZGlndGFibGUuYmFja29mZl92YWwgPSBETV9ESUdfQkFDS09GRjsKKwlkaWd0YWJsZS5yeF9nYWluX3JhbmdlX21heCA9IERNX0RJR19NQVg7CisKKwlkaWd0YWJsZS5yeF9nYWluX3JhbmdlX21pbiA9IERNX0RJR19NSU47CisKKwlkaWd0YWJsZS5iYWNrb2ZmdmFsX3JhbmdlX21heCA9IERNX0RJR19CQUNLT0ZGX01BWDsKKwlkaWd0YWJsZS5iYWNrb2ZmdmFsX3JhbmdlX21pbiA9IERNX0RJR19CQUNLT0ZGX01JTjsKK30KKworc3RhdGljIHZvaWQgX3J0bDkyc19kbV9pbml0X2R5bmFtaWNfdHhwb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwlpZiAoKGhhbF9nZXRfZmlybXdhcmV2ZXJzaW9uKHJ0bHByaXYpID49IDYwKSAmJgorCSAgICAocnRscHJpdi0+ZG0uZG1fdHlwZSA9PSBETV9UWVBFX0JZRFJJVkVSKSkKKwkJcnRscHJpdi0+ZG0uZHluYW1pY190eHBvd2VyX2VuYWJsZSA9IHRydWU7CisJZWxzZQorCQlydGxwcml2LT5kbS5keW5hbWljX3R4cG93ZXJfZW5hYmxlID0gZmFsc2U7CisKKwlydGxwcml2LT5kbS5sYXN0X2R0cF9sdmwgPSBUWF9ISUdIUFdSX0xFVkVMX05PUk1BTDsKKwlydGxwcml2LT5kbS5keW5hbWljX3R4aGlnaHBvd2VyX2x2bCA9IFRYX0hJR0hQV1JfTEVWRUxfTk9STUFMOworfQorCit2b2lkIHJ0bDkyc19kbV9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCXJ0bHByaXYtPmRtLmRtX3R5cGUgPSBETV9UWVBFX0JZRFJJVkVSOworCXJ0bHByaXYtPmRtLnVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPSAtMTsKKworCV9ydGw5MnNfZG1faW5pdF9keW5hbWljX3R4cG93ZXIoaHcpOworCXJ0bDkyc19kbV9pbml0X2VkY2FfdHVyYm8oaHcpOworCV9ydGw5MnNfZG1faW5pdF9yYXRlX2FkYXB0aXZlX21hc2soaHcpOworCV9ydGw5MnNfZG1faW5pdF90eHBvd2VydHJhY2tpbmdfdGhlcm1hbG1ldGVyKGh3KTsKKwlfcnRsOTJzX2RtX2luaXRfZGlnKGh3KTsKKworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBXRk01LCBGV19DQ0FfQ0hLX0VOQUJMRSk7Cit9CisKK3ZvaWQgcnRsOTJzX2RtX3dhdGNoZG9nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCV9ydGw5MnNfZG1fY2hlY2tfZWRjYV90dXJibyhodyk7CisJX3J0bDkyc19kbV9jaGVja190eHBvd2VydHJhY2tpbmdfdGhlcm1hbG1ldGVyKGh3KTsKKwlfcnRsOTJzX2RtX2N0cmxfaW5pdGdhaW5fYnlyc3NpKGh3KTsKKwlfcnRsOTJzX2RtX2R5bmFtaWNfdHhwb3dlcihodyk7CisJX3J0bDkyc19kbV9yZWZyZXNoX3JhdGVhZGFwdGl2ZV9tYXNrKGh3KTsKKwlfcnRsOTJzX2RtX3N3aXRjaF9iYXNlYmFuZF9tcmMoaHcpOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9kbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvZG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDUxYTU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvZG0uaApAQCAtMCwwICsxLDE2NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmCV9fUlRMXzkyU19ETV9IX18KKyNkZWZpbmUgX19SVExfOTJTX0RNX0hfXworCitzdHJ1Y3QgZGlnX3QgeworCXU4IGRpZ19lbmFibGVfZmxhZzsKKwl1OCBkaWdfYWxnb3JpdGhtOworCXU4IGRpZ190d29wb3J0X2FsZ29yaXRobTsKKwl1OCBkaWdfZXh0X3BvcnRfc3RhZ2U7CisJdTggZGlnX2RiZ21vZGU7CisJdTggZGlnX3NsZ29yaXRobV9zd2l0Y2g7CisKKwlsb25nIHJzc2lfbG93dGhyZXNoOworCWxvbmcgcnNzaV9oaWdodGhyZXNoOworCisJdTMyIGZhX2xvd3RocmVzaDsKKwl1MzIgZmFfaGlnaHRocmVzaDsKKworCWxvbmcgcnNzaV9oaWdocG93ZXJfbG93dGhyZXNoOworCWxvbmcgcnNzaV9oaWdocG93ZXJfaGlnaHRocmVzaDsKKworCXU4IGRpZ19zdGF0ZTsKKwl1OCBkaWdfaGlnaHB3cnN0YXRlOworCXU4IGN1cl9zdGFfY29ubmVjdHN0YXRlOworCXU4IHByZV9zdGFfY29ubmVjdHN0YXRlOworCXU4IGN1cl9hcF9jb25uZWN0c3RhdGU7CisJdTggcHJlX2FwX2Nvbm5lY3RzdGF0ZTsKKworCXU4IGN1cl9wZF90aHN0YXRlOworCXU4IHByZV9wZF90aHN0YXRlOworCXU4IGN1cl9jc19yYXRpb3N0YXRlOworCXU4IHByZV9jc19yYXRpb3N0YXRlOworCisJdTMyIHByZV9pZ3ZhbHVlOworCXUzMgljdXJfaWd2YWx1ZTsKKworCXU4IGJhY2tvZmZfZW5hYmxlX2ZsYWc7CisJY2hhciBiYWNrb2ZmX3ZhbDsKKwljaGFyIGJhY2tvZmZ2YWxfcmFuZ2VfbWF4OworCWNoYXIgYmFja29mZnZhbF9yYW5nZV9taW47CisJdTggcnhfZ2Fpbl9yYW5nZV9tYXg7CisJdTggcnhfZ2Fpbl9yYW5nZV9taW47CisKKwlsb25nIHJzc2lfdmFsOworfTsKKworZW51bSBkbV9kaWdfYWxnIHsKKwlESUdfQUxHT19CWV9GQUxTRV9BTEFSTSA9IDAsCisJRElHX0FMR09fQllfUlNTSQk9IDEsCisJRElHX0FMR09fQkVGT1JFX0NPTk5FQ1RfQllfUlNTSV9BTkRfQUxBUk0gPSAyLAorCURJR19BTEdPX0JZX1RPV19QT1JUID0gMywKKwlESUdfQUxHT19NQVgKK307CisKK2VudW0gZG1fZGlnX3R3b19wb3J0X2FsZyB7CisJRElHX1RXT19QT1JUX0FMR09fUlNTSSA9IDAsCisJRElHX1RXT19QT1JUX0FMR09fRkFMU0VfQUxBUk0gPSAxLAorfTsKKworZW51bSBkbV9kaWdfZGJnIHsKKwlETV9EQkdfT0ZGID0gMCwKKwlETV9EQkdfT04gPSAxLAorCURNX0RCR19NQVgKK307CisKK2VudW0gZG1fZGlnX3N0YSB7CisJRE1fU1RBX0RJR19PRkYgPSAwLAorCURNX1NUQV9ESUdfT04sCisJRE1fU1RBX0RJR19NQVgKK307CisKK2VudW0gZG1fZGlnX2Nvbm5lY3QgeworCURJR19TVEFfRElTQ09OTkVDVCA9IDAsCisJRElHX1NUQV9DT05ORUNUID0gMSwKKwlESUdfU1RBX0JFRk9SRV9DT05ORUNUID0gMiwKKwlESUdfQVBfRElTQ09OTkVDVCA9IDMsCisJRElHX0FQX0NPTk5FQ1QgPSA0LAorCURJR19BUF9BRERfU1RBVElPTiA9IDUsCisJRElHX0NPTk5FQ1RfTUFYCit9OworCitlbnVtIGRtX2RpZ19leHRfcG9ydF9hbGcgeworCURJR19FWFRfUE9SVF9TVEFHRV8wID0gMCwKKwlESUdfRVhUX1BPUlRfU1RBR0VfMSA9IDEsCisJRElHX0VYVF9QT1JUX1NUQUdFXzIgPSAyLAorCURJR19FWFRfUE9SVF9TVEFHRV8zID0gMywKKwlESUdfRVhUX1BPUlRfU1RBR0VfTUFYID0gNCwKK307CisKK2VudW0gZG1fcmF0cl9zdGEgeworCURNX1JBVFJfU1RBX0hJR0ggPSAwLAorCURNX1JBVFJfU1RBX01JRERMRUhJR0ggPSAxLAorCURNX1JBVFJfU1RBX01JRERMRSA9IDIsCisJRE1fUkFUUl9TVEFfTUlERExFTE9XID0gMywKKwlETV9SQVRSX1NUQV9MT1cgPSA0LAorCURNX1JBVFJfU1RBX1VMVFJBTE9XID0gNSwKKwlETV9SQVRSX1NUQV9NQVgKK307CisKKyNkZWZpbmUgRE1fVFlQRV9CWUZXCQkJMAorI2RlZmluZSBETV9UWVBFX0JZRFJJVkVSCQkxCisKKyNkZWZpbmUJVFhfSElHSF9QV1JfTEVWRUxfTk9STUFMCTAKKyNkZWZpbmUJVFhfSElHSF9QV1JfTEVWRUxfTEVWRUwxCTEKKyNkZWZpbmUJVFhfSElHSF9QV1JfTEVWRUxfTEVWRUwyCTIKKworI2RlZmluZQlIQUxfRE1fRElHX0RJU0FCTEUJCUJJVCgwKQkvKiBEaXNhYmxlIERpZyAqLworI2RlZmluZQlIQUxfRE1fSElQV1JfRElTQUJMRQkJQklUKDEpCS8qIERpc2FibGUgSGlnaCBQb3dlciAqLworCisjZGVmaW5lCVRYX0hJR0hQV1JfTEVWRUxfTk9STUFMCQkwCisjZGVmaW5lCVRYX0hJR0hQV1JfTEVWRUxfTk9STUFMMQkxCisjZGVmaW5lCVRYX0hJR0hQV1JfTEVWRUxfTk9STUFMMgkyCisKKyNkZWZpbmUJVFhfUE9XRVJfTkVBUl9GSUVMRF9USFJFU0hfTFZMMgk3NAorI2RlZmluZQlUWF9QT1dFUl9ORUFSX0ZJRUxEX1RIUkVTSF9MVkwxCTY3CisKKyNkZWZpbmUgRE1fRElHX1RIUkVTSF9ISUdICQk0MAorI2RlZmluZSBETV9ESUdfVEhSRVNIX0xPVwkJMzUKKyNkZWZpbmUJRE1fRkFMU0VBTEFSTV9USFJFU0hfTE9XCTQwCisjZGVmaW5lCURNX0ZBTFNFQUxBUk1fVEhSRVNIX0hJR0gJMTAwMAorI2RlZmluZQlETV9ESUdfSElHSF9QV1JfVEhSRVNIX0hJR0gJNzUKKyNkZWZpbmUJRE1fRElHX0hJR0hfUFdSX1RIUkVTSF9MT1cJNzAKKyNkZWZpbmUJRE1fRElHX0JBQ0tPRkYJCQkxMgorI2RlZmluZQlETV9ESUdfTUFYCQkJMHgzZQorI2RlZmluZQlETV9ESUdfTUlOCQkJMHgxYworI2RlZmluZQlETV9ESUdfTUlOX05ldGNvcmUJCTB4MTIKKyNkZWZpbmUJRE1fRElHX0JBQ0tPRkZfTUFYCQkxMgorI2RlZmluZQlETV9ESUdfQkFDS09GRl9NSU4JCS00CisKK2V4dGVybiBzdHJ1Y3QgZGlnX3QgZGlndGFibGU7CisKK3ZvaWQgcnRsOTJzX2RtX3dhdGNoZG9nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJzX2RtX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw5MnNfZG1faW5pdF9lZGNhX3R1cmJvKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL2Z3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9mdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNWFmMDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9mdy5jCkBAIC0wLDAgKzEsNjU0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIi4uL3dpZmkuaCIKKyNpbmNsdWRlICIuLi9wY2kuaCIKKyNpbmNsdWRlICIuLi9iYXNlLmgiCisjaW5jbHVkZSAicmVnLmgiCisjaW5jbHVkZSAiZGVmLmgiCisjaW5jbHVkZSAiZncuaCIKKworc3RhdGljIHZvaWQgX3J0bDkyc19md19zZXRfcnFwbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUlFQTiwgMHhmZmZmZmZmZik7CisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJRUE4gKyA0LCAweGZmZmZmZmZmKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSUVBOICsgOCwgMHhmZik7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUlFQTiArIDB4QiwgMHg4MCk7Cit9CisKK3N0YXRpYyBib29sIF9ydGw5MnNfZmlybXdhcmVfZW5hYmxlX2NwdShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTMyIGljaGVja3RpbWUgPSAyMDA7CisJdTE2IHRtcHUyYjsKKwl1OCB0bXB1MWIsIGNwdXN0YXR1cyA9IDA7CisKKwlfcnRsOTJzX2Z3X3NldF9ycXBuKGh3KTsKKworCS8qIEVuYWJsZSBDUFUuICovCisJdG1wdTFiID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBTWVNfQ0xLUik7CisJLyogQUZFIHNvdXJjZSAqLworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFNZU19DTEtSLCAodG1wdTFiIHwgU1lTX0NQVV9DTEtTRUwpKTsKKworCXRtcHUyYiA9IHJ0bF9yZWFkX3dvcmQocnRscHJpdiwgUkVHX1NZU19GVU5DX0VOKTsKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfU1lTX0ZVTkNfRU4sICh0bXB1MmIgfCBGRU5fQ1BVRU4pKTsKKworCS8qIFBvbGxpbmcgSU1FTSBSZWFkeSBhZnRlciBDUFUgaGFzIHJlZmlsbGVkLiAqLworCWRvIHsKKwkJY3B1c3RhdHVzID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBUQ1IpOworCQlpZiAoY3B1c3RhdHVzICYgSU1FTV9SRFkpIHsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0xPVUQsCisJCQkJKCJJTUVNIFJlYWR5IGFmdGVyIENQVSBoYXMgcmVmaWxsZWQuXG4iKSk7CisJCQlicmVhazsKKwkJfQorCisJCXVkZWxheSgxMDApOworCX0gd2hpbGUgKGljaGVja3RpbWUtLSk7CisKKwlpZiAoIShjcHVzdGF0dXMgJiBJTUVNX1JEWSkpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgZW51bSBmd19zdGF0dXMgX3J0bDkyc19maXJtd2FyZV9nZXRfbmV4dHN0YXR1cygKKwkJZW51bSBmd19zdGF0dXMgZndfY3VycmVudHN0YXR1cykKK3sKKwllbnVtIGZ3X3N0YXR1cwluZXh0X2Z3c3RhdHVzID0gMDsKKworCXN3aXRjaCAoZndfY3VycmVudHN0YXR1cykgeworCWNhc2UgRldfU1RBVFVTX0lOSVQ6CisJCW5leHRfZndzdGF0dXMgPSBGV19TVEFUVVNfTE9BRF9JTUVNOworCQlicmVhazsKKwljYXNlIEZXX1NUQVRVU19MT0FEX0lNRU06CisJCW5leHRfZndzdGF0dXMgPSBGV19TVEFUVVNfTE9BRF9FTUVNOworCQlicmVhazsKKwljYXNlIEZXX1NUQVRVU19MT0FEX0VNRU06CisJCW5leHRfZndzdGF0dXMgPSBGV19TVEFUVVNfTE9BRF9ETUVNOworCQlicmVhazsKKwljYXNlIEZXX1NUQVRVU19MT0FEX0RNRU06CisJCW5leHRfZndzdGF0dXMgPSBGV19TVEFUVVNfUkVBRFk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiBuZXh0X2Z3c3RhdHVzOworfQorCitzdGF0aWMgdTggX3J0bDkyc19maXJtd2FyZV9oZWFkZXJfbWFwX3JmdHlwZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKworCXN3aXRjaCAocnRscGh5LT5yZl90eXBlKSB7CisJY2FzZSBSRl8xVDFSOgorCQlyZXR1cm4gMHgxMTsKKwkJYnJlYWs7CisJY2FzZSBSRl8xVDJSOgorCQlyZXR1cm4gMHgxMjsKKwkJYnJlYWs7CisJY2FzZSBSRl8yVDJSOgorCQlyZXR1cm4gMHgyMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfRU1FUkcsCisJCQkgKCJVbmtub3duIFJGIHR5cGUoJXgpXG4iLAorCQkJIHJ0bHBoeS0+cmZfdHlwZSkpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDB4MjI7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MnNfZmlybXdhcmVoZWFkZXJfcHJpdmV1cGRhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCXN0cnVjdCBmd19wcml2ICpwZndfcHJpdikKK3sKKwkvKiBVcGRhdGUgUkYgdHlwZXMgZm9yIFJBVFIgc2V0dGluZ3MuICovCisJcGZ3X3ByaXYtPnJmX2NvbmZpZyA9IF9ydGw5MnNfZmlybXdhcmVfaGVhZGVyX21hcF9yZnR5cGUoaHcpOworfQorCisKKworc3RhdGljIGJvb2wgX3J0bDkyc19jbWRfc2VuZF9wYWNrZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCXN0cnVjdCBza19idWZmICpza2IsIHU4IGxhc3QpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJc3RydWN0IHJ0bDgxOTJfdHhfcmluZyAqcmluZzsKKwlzdHJ1Y3QgcnRsX3R4X2Rlc2MgKnBkZXNjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggaWR4ID0gMDsKKworCXJpbmcgPSAmcnRscGNpLT50eF9yaW5nW1RYQ01EX1FVRVVFXTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZydGxwcml2LT5sb2Nrcy5pcnFfdGhfbG9jaywgZmxhZ3MpOworCisJaWR4ID0gKHJpbmctPmlkeCArIHNrYl9xdWV1ZV9sZW4oJnJpbmctPnF1ZXVlKSkgJSByaW5nLT5lbnRyaWVzOworCXBkZXNjID0gJnJpbmctPmRlc2NbaWR4XTsKKwlydGxwcml2LT5jZmctPm9wcy0+ZmlsbF90eF9jbWRkZXNjKGh3LCAodTggKilwZGVzYywgMSwgMSwgc2tiKTsKKwlfX3NrYl9xdWV1ZV90YWlsKCZyaW5nLT5xdWV1ZSwgc2tiKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLmlycV90aF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgX3J0bDkyc19maXJtd2FyZV9kb3dubG9hZGNvZGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCXU4ICpjb2RlX3ZpcnR1YWxfYWRkcmVzcywgdTMyIGJ1ZmZlcl9sZW4pCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHJ0bF90Y2JfZGVzYyAqdGNiX2Rlc2M7CisJdW5zaWduZWQgY2hhciAqc2VnX3B0cjsKKwl1MTYgZnJhZ190aHJlc2hvbGQgPSBNQVhfRklSTVdBUkVfQ09ERV9TSVpFOworCXUxNiBmcmFnX2xlbmd0aCwgZnJhZ19vZmZzZXQgPSAwOworCXUxNiBleHRyYV9kZXNjb2Zmc2V0ID0gMDsKKwl1OCBsYXN0X2luaXBrdCA9IDA7CisKKwlfcnRsOTJzX2Z3X3NldF9ycXBuKGh3KTsKKworCWlmIChidWZmZXJfbGVuID49IE1BWF9GSVJNV0FSRV9DT0RFX1NJWkUpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSgiU2l6ZSBvdmVyIEZJUk1XQVJFX0NPREVfU0laRSFcbiIpKTsKKworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJZXh0cmFfZGVzY29mZnNldCA9IDA7CisKKwlkbyB7CisJCWlmICgoYnVmZmVyX2xlbiAtIGZyYWdfb2Zmc2V0KSA+IGZyYWdfdGhyZXNob2xkKSB7CisJCQlmcmFnX2xlbmd0aCA9IGZyYWdfdGhyZXNob2xkICsgZXh0cmFfZGVzY29mZnNldDsKKwkJfSBlbHNlIHsKKwkJCWZyYWdfbGVuZ3RoID0gKHUxNikoYnVmZmVyX2xlbiAtIGZyYWdfb2Zmc2V0ICsKKwkJCQkJICAgIGV4dHJhX2Rlc2NvZmZzZXQpOworCQkJbGFzdF9pbmlwa3QgPSAxOworCQl9CisKKwkJLyogQWxsb2NhdGUgc2tiIGJ1ZmZlciB0byBjb250YWluIGZpcm13YXJlICovCisJCS8qIGluZm8gYW5kIHR4IGRlc2NyaXB0b3IgaW5mby4gKi8KKwkJc2tiID0gZGV2X2FsbG9jX3NrYihmcmFnX2xlbmd0aCk7CisJCXNrYl9yZXNlcnZlKHNrYiwgZXh0cmFfZGVzY29mZnNldCk7CisJCXNlZ19wdHIgPSAodTggKilza2JfcHV0KHNrYiwgKHUzMikoZnJhZ19sZW5ndGggLQorCQkJCQlleHRyYV9kZXNjb2Zmc2V0KSk7CisJCW1lbWNweShzZWdfcHRyLCBjb2RlX3ZpcnR1YWxfYWRkcmVzcyArIGZyYWdfb2Zmc2V0LAorCQkgICAgICAgKHUzMikoZnJhZ19sZW5ndGggLSBleHRyYV9kZXNjb2Zmc2V0KSk7CisKKwkJdGNiX2Rlc2MgPSAoc3RydWN0IHJ0bF90Y2JfZGVzYyAqKShza2ItPmNiKTsKKwkJdGNiX2Rlc2MtPnF1ZXVlX2luZGV4ID0gVFhDTURfUVVFVUU7CisJCXRjYl9kZXNjLT5jbWRfb3JfaW5pdCA9IERFU0NfUEFDS0VUX1RZUEVfSU5JVDsKKwkJdGNiX2Rlc2MtPmxhc3RfaW5pcGt0ID0gbGFzdF9pbmlwa3Q7CisKKwkJX3J0bDkyc19jbWRfc2VuZF9wYWNrZXQoaHcsIHNrYiwgbGFzdF9pbmlwa3QpOworCisJCWZyYWdfb2Zmc2V0ICs9IChmcmFnX2xlbmd0aCAtIGV4dHJhX2Rlc2NvZmZzZXQpOworCisJfSB3aGlsZSAoZnJhZ19vZmZzZXQgPCBidWZmZXJfbGVuKTsKKworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFRQX1BPTEwsIFRQUE9MTF9DUSk7CisKKwlyZXR1cm4gdHJ1ZSA7Cit9CisKK3N0YXRpYyBib29sIF9ydGw5MnNfZmlybXdhcmVfY2hlY2tyZWFkeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJdTggbG9hZGZ3X3N0YXR1cykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRfZmlybXdhcmUgKmZpcm13YXJlID0gKHN0cnVjdCBydF9maXJtd2FyZSAqKXJ0bGhhbC0+cGZpcm13YXJlOworCXUzMiB0bXB1NGI7CisJdTggY3B1c3RhdHVzID0gMDsKKwlzaG9ydCBwb2xsaW5nY250ID0gMTAwMDsKKwlib29sIHJ0c3RhdHVzID0gdHJ1ZTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0xPVUQsICgiTG9hZFN0YXVzKCVkKVxuIiwKKwkJIGxvYWRmd19zdGF0dXMpKTsKKworCWZpcm13YXJlLT5md3N0YXR1cyA9IChlbnVtIGZ3X3N0YXR1cylsb2FkZndfc3RhdHVzOworCisJc3dpdGNoIChsb2FkZndfc3RhdHVzKSB7CisJY2FzZSBGV19TVEFUVVNfTE9BRF9JTUVNOgorCQkvKiBQb2xsaW5nIElNRU0gY29kZSBkb25lLiAqLworCQlkbyB7CisJCQljcHVzdGF0dXMgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFRDUik7CisJCQlpZiAoY3B1c3RhdHVzICYgSU1FTV9DT0RFX0RPTkUpCisJCQkJYnJlYWs7CisJCQl1ZGVsYXkoNSk7CisJCX0gd2hpbGUgKHBvbGxpbmdjbnQtLSk7CisKKwkJaWYgKCEoY3B1c3RhdHVzICYgSU1FTV9DSEtfUlBUKSB8fCAocG9sbGluZ2NudCA8PSAwKSkgeworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCQkgKCJGV19TVEFUVVNfTE9BRF9JTUVNIgorCQkJCSAiIEZBSUwgQ1BVLCBTdGF0dXM9JXhcclxuIiwgY3B1c3RhdHVzKSk7CisJCQlnb3RvIHN0YXR1c19jaGVja19mYWlsOworCQl9CisJCWJyZWFrOworCisJY2FzZSBGV19TVEFUVVNfTE9BRF9FTUVNOgorCQkvKiBDaGVjayBQdXQgQ29kZSBPSyBhbmQgVHVybiBPbiBDUFUgKi8KKwkJLyogUG9sbGluZyBFTUVNIGNvZGUgZG9uZS4gKi8KKwkJZG8geworCQkJY3B1c3RhdHVzID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBUQ1IpOworCQkJaWYgKGNwdXN0YXR1cyAmIEVNRU1fQ09ERV9ET05FKQorCQkJCWJyZWFrOworCQkJdWRlbGF5KDUpOworCQl9IHdoaWxlIChwb2xsaW5nY250LS0pOworCisJCWlmICghKGNwdXN0YXR1cyAmIEVNRU1fQ0hLX1JQVCkgfHwgKHBvbGxpbmdjbnQgPD0gMCkpIHsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkJICgiRldfU1RBVFVTX0xPQURfRU1FTSIKKwkJCQkgIiBGQUlMIENQVSwgU3RhdHVzPSV4XHJcbiIsIGNwdXN0YXR1cykpOworCQkJZ290byBzdGF0dXNfY2hlY2tfZmFpbDsKKwkJfQorCisJCS8qIFR1cm4gT24gQ1BVICovCisJCXJ0c3RhdHVzID0gX3J0bDkyc19maXJtd2FyZV9lbmFibGVfY3B1KGh3KTsKKwkJaWYgKHJ0c3RhdHVzICE9IHRydWUpIHsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkJICgiRW5hYmxlIENQVSBmYWlsIVxuIikpOworCQkJZ290byBzdGF0dXNfY2hlY2tfZmFpbDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgRldfU1RBVFVTX0xPQURfRE1FTToKKwkJLyogUG9sbGluZyBETUVNIGNvZGUgZG9uZSAqLworCQlkbyB7CisJCQljcHVzdGF0dXMgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFRDUik7CisJCQlpZiAoY3B1c3RhdHVzICYgRE1FTV9DT0RFX0RPTkUpCisJCQkJYnJlYWs7CisJCQl1ZGVsYXkoNSk7CisJCX0gd2hpbGUgKHBvbGxpbmdjbnQtLSk7CisKKwkJaWYgKCEoY3B1c3RhdHVzICYgRE1FTV9DT0RFX0RPTkUpIHx8IChwb2xsaW5nY250IDw9IDApKSB7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJCSAoIlBvbGxpbmcgIERNRU0gY29kZSBkb25lIgorCQkJCSAiIGZhaWwgISBjcHVzdGF0dXMoJSN4KVxuIiwgY3B1c3RhdHVzKSk7CisJCQlnb3RvIHN0YXR1c19jaGVja19mYWlsOworCQl9CisKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfTE9VRCwKKwkJCSAoIkRNRU0gY29kZSBkb3dubG9hZCBzdWNjZXNzLCIKKwkJCSIgY3B1c3RhdHVzKCUjeClcbiIsIGNwdXN0YXR1cykpOworCisJCS8qIFByZXZlbnQgRGVsYXkgdG9vIG11Y2ggYW5kIGJlaW5nIHNjaGVkdWxlZCBvdXQgKi8KKwkJLyogUG9sbGluZyBMb2FkIEZpcm13YXJlIHJlYWR5ICovCisJCXBvbGxpbmdjbnQgPSAyMDAwOworCQlkbyB7CisJCQljcHVzdGF0dXMgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFRDUik7CisJCQlpZiAoY3B1c3RhdHVzICYgRldSRFkpCisJCQkJYnJlYWs7CisJCQl1ZGVsYXkoNDApOworCQl9IHdoaWxlIChwb2xsaW5nY250LS0pOworCisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0xPVUQsCisJCQkgKCJQb2xsaW5nIExvYWQgRmlybXdhcmUgcmVhZHksIgorCQkJIiBjcHVzdGF0dXMoJXgpXG4iLAljcHVzdGF0dXMpKTsKKworCQlpZiAoKChjcHVzdGF0dXMgJiBMT0FEX0ZXX1JFQURZKSAhPSBMT0FEX0ZXX1JFQURZKSB8fAorCQkgICAgKHBvbGxpbmdjbnQgPD0gMCkpIHsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkJICgiUG9sbGluZyBMb2FkIEZpcm13YXJlIgorCQkJCSIgcmVhZHkgZmFpbCAhIGNwdXN0YXR1cygleClcbiIsIGNwdXN0YXR1cykpOworCQkJZ290byBzdGF0dXNfY2hlY2tfZmFpbDsKKwkJfQorCisJCS8qIElmIHJpZ2h0IGhlcmUsIHdlIGNhbiBzZXQgVENSL1JDUiB0byBkZXNpcmVkIHZhbHVlICAqLworCQkvKiBhbmQgY29uZmlnIE1BQyBsb29rYmFjayBtb2RlIHRvIG5vcm1hbCBtb2RlICovCisJCXRtcHU0YiA9IHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsIFRDUik7CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBUQ1IsICh0bXB1NGIgJiAoflRDUl9JQ1YpKSk7CisKKwkJdG1wdTRiID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgUkNSKTsKKwkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJDUiwgKHRtcHU0YiB8IFJDUl9BUFBGQ1MgfAorCQkJCVJDUl9BUFBfSUNWIHwgUkNSX0FQUF9NSUMpKTsKKworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19MT1VELAorCQkJICgiQ3VycmVudCBSQ1Igc2V0dGluZ3MoJSN4KVxuIiwgdG1wdTRiKSk7CisKKwkJLyogU2V0IHRvIG5vcm1hbCBtb2RlLiAqLworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBMQktNRF9TRUwsIExCS19OT1JNQUwpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0VNRVJHLAorCQkJICgiVW5rbm93biBzdGF0dXMgY2hlY2shXG4iKSk7CisJCXJ0c3RhdHVzID0gZmFsc2U7CisJCWJyZWFrOworCX0KKworc3RhdHVzX2NoZWNrX2ZhaWw6CisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfTE9VRCwgKCJsb2FkZndfc3RhdHVzKCVkKSwgIgorCQkgInJ0c3RhdHVzKCV4KVxuIiwgbG9hZGZ3X3N0YXR1cywgcnRzdGF0dXMpKTsKKwlyZXR1cm4gcnRzdGF0dXM7Cit9CisKK2ludCBydGw5MnNfZG93bmxvYWRfZncoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0X2Zpcm13YXJlICpmaXJtd2FyZSA9IE5VTEw7CisJc3RydWN0IGZ3X2hkciAqcGZ3aGVhZGVyOworCXN0cnVjdCBmd19wcml2ICpwZndfcHJpdiA9IE5VTEw7CisJdTggKnB1Y19tYXBwZWRmaWxlID0gTlVMTDsKKwl1MzIgdWxfZmlsZWxlbmd0aCA9IDA7CisJdTMyIGZpbGVfbGVuZ3RoID0gMDsKKwl1OCBmd2hkcl9zaXplID0gUlRfODE5MlNfRklSTVdBUkVfSERSX1NJWkU7CisJdTggZndzdGF0dXMgPSBGV19TVEFUVVNfSU5JVDsKKwlib29sIHJ0c3RhdHVzID0gdHJ1ZTsKKworCWlmICghcnRsaGFsLT5wZmlybXdhcmUpCisJCXJldHVybiAxOworCisJZmlybXdhcmUgPSAoc3RydWN0IHJ0X2Zpcm13YXJlICopcnRsaGFsLT5wZmlybXdhcmU7CisJZmlybXdhcmUtPmZ3c3RhdHVzID0gRldfU1RBVFVTX0lOSVQ7CisKKwlwdWNfbWFwcGVkZmlsZSA9IGZpcm13YXJlLT5zel9md190bXBidWZmZXI7CisJZmlsZV9sZW5ndGggPSBmaXJtd2FyZS0+c3pfZndfdG1wYnVmZmVybGVuOworCisJLyogMS4gUmV0cmlldmUgRlcgaGVhZGVyLiAqLworCWZpcm13YXJlLT5wZndoZWFkZXIgPSAoc3RydWN0IGZ3X2hkciAqKSBwdWNfbWFwcGVkZmlsZTsKKwlwZndoZWFkZXIgPSBmaXJtd2FyZS0+cGZ3aGVhZGVyOworCWZpcm13YXJlLT5maXJtd2FyZXZlcnNpb24gPSAgYnl0ZShwZndoZWFkZXItPnZlcnNpb24sIDApOworCWZpcm13YXJlLT5wZndoZWFkZXItPmZ3cHJpdi5oY2lfc2VsID0gMTsvKiBwY2llICovCisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19MT1VELCAoInNpZ25hdHVyZToleCwgdmVyc2lvbjoiCisJCSAiJXgsIHNpemU6JXgsIgorCQkgImltZW1zaXplOiV4LCBzcmFtIHNpemU6JXhcbiIsIHBmd2hlYWRlci0+c2lnbmF0dXJlLAorCQkgcGZ3aGVhZGVyLT52ZXJzaW9uLCBwZndoZWFkZXItPmRtZW1fc2l6ZSwKKwkJIHBmd2hlYWRlci0+aW1nX2ltZW1fc2l6ZSwgcGZ3aGVhZGVyLT5pbWdfc3JhbV9zaXplKSk7CisKKwkvKiAyLiBSZXRyaWV2ZSBJTUVNIGltYWdlLiAqLworCWlmICgocGZ3aGVhZGVyLT5pbWdfaW1lbV9zaXplID09IDApIHx8IChwZndoZWFkZXItPmltZ19pbWVtX3NpemUgPgorCSAgICBzaXplb2YoZmlybXdhcmUtPmZ3X2ltZW0pKSkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJKCJtZW1vcnkgZm9yIGRhdGEgaW1hZ2UgaXMgbGVzcyB0aGFuIElNRU0gcmVxdWlyZWRcbiIpKTsKKwkJZ290byBmYWlsOworCX0gZWxzZSB7CisJCXB1Y19tYXBwZWRmaWxlICs9IGZ3aGRyX3NpemU7CisKKwkJbWVtY3B5KGZpcm13YXJlLT5md19pbWVtLCBwdWNfbWFwcGVkZmlsZSwKKwkJICAgICAgIHBmd2hlYWRlci0+aW1nX2ltZW1fc2l6ZSk7CisJCWZpcm13YXJlLT5md19pbWVtX2xlbiA9IHBmd2hlYWRlci0+aW1nX2ltZW1fc2l6ZTsKKwl9CisKKwkvKiAzLiBSZXRyaWVjdmUgRU1FTSBpbWFnZS4gKi8KKwlpZiAocGZ3aGVhZGVyLT5pbWdfc3JhbV9zaXplID4gc2l6ZW9mKGZpcm13YXJlLT5md19lbWVtKSkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJKCJtZW1vcnkgZm9yIGRhdGEgaW1hZ2UgaXMgbGVzcyB0aGFuIEVNRU0gcmVxdWlyZWRcbiIpKTsKKwkJZ290byBmYWlsOworCX0gZWxzZSB7CisJCXB1Y19tYXBwZWRmaWxlICs9IGZpcm13YXJlLT5md19pbWVtX2xlbjsKKworCQltZW1jcHkoZmlybXdhcmUtPmZ3X2VtZW0sIHB1Y19tYXBwZWRmaWxlLAorCQkgICAgICAgcGZ3aGVhZGVyLT5pbWdfc3JhbV9zaXplKTsKKwkJZmlybXdhcmUtPmZ3X2VtZW1fbGVuID0gcGZ3aGVhZGVyLT5pbWdfc3JhbV9zaXplOworCX0KKworCS8qIDQuIGRvd25sb2FkIGZ3IG5vdyAqLworCWZ3c3RhdHVzID0gX3J0bDkyc19maXJtd2FyZV9nZXRfbmV4dHN0YXR1cyhmaXJtd2FyZS0+ZndzdGF0dXMpOworCXdoaWxlIChmd3N0YXR1cyAhPSBGV19TVEFUVVNfUkVBRFkpIHsKKwkJLyogSW1hZ2UgYnVmZmVyIHJlZGlyZWN0aW9uLiAqLworCQlzd2l0Y2ggKGZ3c3RhdHVzKSB7CisJCWNhc2UgRldfU1RBVFVTX0xPQURfSU1FTToKKwkJCXB1Y19tYXBwZWRmaWxlID0gZmlybXdhcmUtPmZ3X2ltZW07CisJCQl1bF9maWxlbGVuZ3RoID0gZmlybXdhcmUtPmZ3X2ltZW1fbGVuOworCQkJYnJlYWs7CisJCWNhc2UgRldfU1RBVFVTX0xPQURfRU1FTToKKwkJCXB1Y19tYXBwZWRmaWxlID0gZmlybXdhcmUtPmZ3X2VtZW07CisJCQl1bF9maWxlbGVuZ3RoID0gZmlybXdhcmUtPmZ3X2VtZW1fbGVuOworCQkJYnJlYWs7CisJCWNhc2UgRldfU1RBVFVTX0xPQURfRE1FTToKKwkJCS8qIFBhcnRpYWwgdXBkYXRlIHRoZSBjb250ZW50IG9mIGhlYWRlciBwcml2YXRlLiAqLworCQkJcGZ3aGVhZGVyID0gZmlybXdhcmUtPnBmd2hlYWRlcjsKKwkJCXBmd19wcml2ID0gJnBmd2hlYWRlci0+Zndwcml2OworCQkJX3J0bDkyc19maXJtd2FyZWhlYWRlcl9wcml2ZXVwZGF0ZShodywgcGZ3X3ByaXYpOworCQkJcHVjX21hcHBlZGZpbGUgPSAodTggKikoZmlybXdhcmUtPnBmd2hlYWRlcikgKworCQkJCQlSVF84MTkyU19GSVJNV0FSRV9IRFJfRVhDTFVERV9QUklfU0laRTsKKwkJCXVsX2ZpbGVsZW5ndGggPSBmd2hkcl9zaXplIC0KKwkJCQkJUlRfODE5MlNfRklSTVdBUkVfSERSX0VYQ0xVREVfUFJJX1NJWkU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkJCSgiVW5leHBlY3RlZCBEb3dubG9hZCBzdGVwISFcbiIpKTsKKwkJCWdvdG8gZmFpbDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogPDI+IERvd25sb2FkIGltYWdlIGZpbGUgKi8KKwkJcnRzdGF0dXMgPSBfcnRsOTJzX2Zpcm13YXJlX2Rvd25sb2FkY29kZShodywgcHVjX21hcHBlZGZpbGUsCisJCQkJdWxfZmlsZWxlbmd0aCk7CisKKwkJaWYgKHJ0c3RhdHVzICE9IHRydWUpIHsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsICgiZmFpbCFcbiIpKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCisJCS8qIDwzPiBDaGVjayB3aGV0aGVyIGxvYWQgRlcgcHJvY2VzcyBpcyByZWFkeSAqLworCQlydHN0YXR1cyA9IF9ydGw5MnNfZmlybXdhcmVfY2hlY2tyZWFkeShodywgZndzdGF0dXMpOworCQlpZiAocnRzdGF0dXMgIT0gdHJ1ZSkgeworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywgKCJmYWlsIVxuIikpOworCQkJZ290byBmYWlsOworCQl9CisKKwkJZndzdGF0dXMgPSBfcnRsOTJzX2Zpcm13YXJlX2dldF9uZXh0c3RhdHVzKGZpcm13YXJlLT5md3N0YXR1cyk7CisJfQorCisJcmV0dXJuIHJ0c3RhdHVzOworZmFpbDoKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBfcnRsOTJzX2ZpbGxfaDJjX2NtZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaDJjYnVmZmVybGVuLAorCQkJCXUzMiBjbWRfbnVtLCB1MzIgKnBlbGVtZW50X2lkLCB1MzIgKnBjbWRfbGVuLAorCQkJCXU4ICoqcGNtYl9idWZmZXIsIHU4ICpjbWRfc3RhcnRfc2VxKQoreworCXUzMiB0b3RhbGxlbiA9IDAsIGxlbiA9IDAsIHR4X2Rlc2NsZW4gPSAwOworCXUzMiBwcmVfY29udGludWVvZmZzZXQgPSAwOworCXU4ICpwaDJjX2J1ZmZlcjsKKwl1OCBpID0gMDsKKworCWRvIHsKKwkJLyogOCAtIEJ5dGUgYWxpZ21lbnQgKi8KKwkJbGVuID0gSDJDX1RYX0NNRF9IRFJfTEVOICsgTl9CWVRFX0FMSUdNRU5UKHBjbWRfbGVuW2ldLCA4KTsKKworCQkvKiBCdWZmZXIgbGVuZ3RoIGlzIG5vdCBlbm91Z2ggKi8KKwkJaWYgKGgyY2J1ZmZlcmxlbiA8IHRvdGFsbGVuICsgbGVuICsgdHhfZGVzY2xlbikKKwkJCWJyZWFrOworCisJCS8qIENsZWFyIGNvbnRlbnQgKi8KKwkJcGgyY19idWZmZXIgPSAodTggKilza2JfcHV0KHNrYiwgKHUzMilsZW4pOworCQltZW1zZXQoKHBoMmNfYnVmZmVyICsgdG90YWxsZW4gKyB0eF9kZXNjbGVuKSwgMCwgbGVuKTsKKworCQkvKiBDTUQgbGVuICovCisJCVNFVF9CSVRTX1RPX0xFXzRCWVRFKChwaDJjX2J1ZmZlciArIHRvdGFsbGVuICsgdHhfZGVzY2xlbiksCisJCQkJICAgICAgMCwgMTYsIHBjbWRfbGVuW2ldKTsKKworCQkvKiBDTUQgSUQgKi8KKwkJU0VUX0JJVFNfVE9fTEVfNEJZVEUoKHBoMmNfYnVmZmVyICsgdG90YWxsZW4gKyB0eF9kZXNjbGVuKSwKKwkJCQkgICAgICAxNiwgOCwgcGVsZW1lbnRfaWRbaV0pOworCisJCS8qIENNRCBTZXF1ZW5jZSAqLworCQkqY21kX3N0YXJ0X3NlcSA9ICpjbWRfc3RhcnRfc2VxICUgMHg4MDsKKwkJU0VUX0JJVFNfVE9fTEVfNEJZVEUoKHBoMmNfYnVmZmVyICsgdG90YWxsZW4gKyB0eF9kZXNjbGVuKSwKKwkJCQkgICAgICAyNCwgNywgKmNtZF9zdGFydF9zZXEpOworCQkrKypjbWRfc3RhcnRfc2VxOworCisJCS8qIENvcHkgbWVtb3J5ICovCisJCW1lbWNweSgocGgyY19idWZmZXIgKyB0b3RhbGxlbiArIHR4X2Rlc2NsZW4gKworCQkJSDJDX1RYX0NNRF9IRFJfTEVOKSwgcGNtYl9idWZmZXJbaV0sIHBjbWRfbGVuW2ldKTsKKworCQkvKiBDTUQgY29udGludWUgKi8KKwkJLyogc2V0IHRoZSBjb250aW51ZSBpbiBwcmV2b2l1cyBjbWQuICovCisJCWlmIChpIDwgY21kX251bSAtIDEpCisJCQlTRVRfQklUU19UT19MRV80QllURSgocGgyY19idWZmZXIgKyBwcmVfY29udGludWVvZmZzZXQpLAorCQkJCQkgICAgICAzMSwgMSwgMSk7CisKKwkJcHJlX2NvbnRpbnVlb2Zmc2V0ID0gdG90YWxsZW47CisKKwkJdG90YWxsZW4gKz0gbGVuOworCX0gd2hpbGUgKCsraSA8IGNtZF9udW0pOworCisJcmV0dXJuIHRvdGFsbGVuOworfQorCitzdGF0aWMgdTMyIF9ydGw5MnNfZ2V0X2gyY19jbWRsZW4odTMyIGgyY2J1ZmZlcmxlbiwgdTMyIGNtZF9udW0sIHUzMiAqcGNtZF9sZW4pCit7CisJdTMyIHRvdGFsbGVuID0gMCwgbGVuID0gMCwgdHhfZGVzY2xlbiA9IDA7CisJdTggaSA9IDA7CisKKwlkbyB7CisJCS8qIDggLSBCeXRlIGFsaWdtZW50ICovCisJCWxlbiA9IEgyQ19UWF9DTURfSERSX0xFTiArIE5fQllURV9BTElHTUVOVChwY21kX2xlbltpXSwgOCk7CisKKwkJLyogQnVmZmVyIGxlbmd0aCBpcyBub3QgZW5vdWdoICovCisJCWlmIChoMmNidWZmZXJsZW4gPCB0b3RhbGxlbiArIGxlbiArIHR4X2Rlc2NsZW4pCisJCQlicmVhazsKKworCQl0b3RhbGxlbiArPSBsZW47CisJfSB3aGlsZSAoKytpIDwgY21kX251bSk7CisKKwlyZXR1cm4gdG90YWxsZW4gKyB0eF9kZXNjbGVuOworfQorCitzdGF0aWMgYm9vbCBfcnRsOTJzX2Zpcm13YXJlX3NldF9oMmNfY21kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBoMmNfY21kLAorCQkJCQkgdTggKnBjbWRfYnVmZmVyKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfdGNiX2Rlc2MgKmNiX2Rlc2M7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1MzIJZWxlbWVudF9pZCA9IDA7CisJdTMyCWNtZF9sZW4gPSAwOworCXUzMglsZW47CisKKwlzd2l0Y2ggKGgyY19jbWQpIHsKKwljYXNlIEZXX0gyQ19TRVRQV1JNT0RFOgorCQllbGVtZW50X2lkID0gSDJDX1NFVFBXUk1PREVfQ01EIDsKKwkJY21kX2xlbiA9IHNpemVvZihzdHJ1Y3QgaDJjX3NldF9wd3Jtb2RlX3Bhcm0pOworCQlicmVhazsKKwljYXNlIEZXX0gyQ19KT0lOQlNTUlBUOgorCQllbGVtZW50X2lkID0gSDJDX0pPSU5CU1NSUFRfQ01EOworCQljbWRfbGVuID0gc2l6ZW9mKHN0cnVjdCBoMmNfam9pbmJzc19ycHRfcGFybSk7CisJCWJyZWFrOworCWNhc2UgRldfSDJDX1dPV0xBTl9VUERBVEVfR1RLOgorCQllbGVtZW50X2lkID0gSDJDX1dPV0xBTl9VUERBVEVfR1RLX0NNRDsKKwkJY21kX2xlbiA9IHNpemVvZihzdHJ1Y3QgaDJjX3dwYV90d29fd2F5X3Bhcm0pOworCQlicmVhazsKKwljYXNlIEZXX0gyQ19XT1dMQU5fVVBEQVRFX0lWOgorCQllbGVtZW50X2lkID0gSDJDX1dPV0xBTl9VUERBVEVfSVZfQ01EOworCQljbWRfbGVuID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZyk7CisJCWJyZWFrOworCWNhc2UgRldfSDJDX1dPV0xBTl9PRkZMT0FEOgorCQllbGVtZW50X2lkID0gSDJDX1dPV0xBTl9GV19PRkZMT0FEOworCQljbWRfbGVuID0gc2l6ZW9mKHU4KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJbGVuID0gX3J0bDkyc19nZXRfaDJjX2NtZGxlbihNQVhfVFJBTlNNSVRfQlVGRkVSX1NJWkUsIDEsICZjbWRfbGVuKTsKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbik7CisJY2JfZGVzYyA9IChzdHJ1Y3QgcnRsX3RjYl9kZXNjICopKHNrYi0+Y2IpOworCWNiX2Rlc2MtPnF1ZXVlX2luZGV4ID0gVFhDTURfUVVFVUU7CisJY2JfZGVzYy0+Y21kX29yX2luaXQgPSBERVNDX1BBQ0tFVF9UWVBFX05PUk1BTDsKKwljYl9kZXNjLT5sYXN0X2luaXBrdCA9IGZhbHNlOworCisJX3J0bDkyc19maWxsX2gyY19jbWQoc2tiLCBNQVhfVFJBTlNNSVRfQlVGRkVSX1NJWkUsIDEsICZlbGVtZW50X2lkLAorCQkJJmNtZF9sZW4sICZwY21kX2J1ZmZlciwJJnJ0bGhhbC0+aDJjX3R4Y21kX3NlcSk7CisJX3J0bDkyc19jbWRfc2VuZF9wYWNrZXQoaHcsIHNrYiwgZmFsc2UpOworCXJ0bHByaXYtPmNmZy0+b3BzLT50eF9wb2xsaW5nKGh3LCBUWENNRF9RVUVVRSk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBydGw5MnNfc2V0X2Z3X3B3cm1vZGVfY21kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBNb2RlKQoreworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IGgyY19zZXRfcHdybW9kZV9wYXJtCXB3cm1vZGU7CisJdTE2IG1heF93YWtldXBfcGVyaW9kID0gMDsKKworCXB3cm1vZGUubW9kZSA9IE1vZGU7CisJcHdybW9kZS5mbGFnX2xvd190cmFmZmljX2VuID0gMDsKKwlwd3Jtb2RlLmZsYWdfbHBuYXZfZW4gPSAwOworCXB3cm1vZGUuZmxhZ19yZl9sb3dfc25yX2VuID0gMDsKKwlwd3Jtb2RlLmZsYWdfZHBzX2VuID0gMDsKKwlwd3Jtb2RlLmJjbl9yeF9lbiA9IDA7CisJcHdybW9kZS5iY25fdG8gPSAwOworCVNFVF9CSVRTX1RPX0xFXzJCWVRFKCh1OCAqKSgmcHdybW9kZSkgKyA4LCAwLCAxNiwKKwkJCW1hYy0+dmlmLT5ic3NfY29uZi5iZWFjb25faW50KTsKKwlwd3Jtb2RlLmFwcF9pdHYgPSAwOworCXB3cm1vZGUuYXdha2VfYmNuX2l0dmwgPSBwcHNjLT5yZWdfbWF4X2xwc19hd2FrZWludHZsOworCXB3cm1vZGUuc21hcnRfcHMgPSAxOworCXB3cm1vZGUuYmNuX3Bhc3NfcGVyaW9kID0gMTA7CisKKwkvKiBTZXQgYmVhY29uIHBhc3MgY291bnQgKi8KKwlpZiAocHdybW9kZS5tb2RlID09IEZXX1BTX01JTl9NT0RFKQorCQltYXhfd2FrZXVwX3BlcmlvZCA9IG1hYy0+dmlmLT5ic3NfY29uZi5iZWFjb25faW50OworCWVsc2UgaWYgKHB3cm1vZGUubW9kZSA9PSBGV19QU19NQVhfTU9ERSkKKwkJbWF4X3dha2V1cF9wZXJpb2QgPSBtYWMtPnZpZi0+YnNzX2NvbmYuYmVhY29uX2ludCAqCisJCQltYWMtPnZpZi0+YnNzX2NvbmYuZHRpbV9wZXJpb2Q7CisKKwlpZiAobWF4X3dha2V1cF9wZXJpb2QgPj0gNTAwKQorCQlwd3Jtb2RlLmJjbl9wYXNzX2NudCA9IDE7CisJZWxzZSBpZiAoKG1heF93YWtldXBfcGVyaW9kID49IDMwMCkgJiYgKG1heF93YWtldXBfcGVyaW9kIDwgNTAwKSkKKwkJcHdybW9kZS5iY25fcGFzc19jbnQgPSAyOworCWVsc2UgaWYgKChtYXhfd2FrZXVwX3BlcmlvZCA+PSAyMDApICYmIChtYXhfd2FrZXVwX3BlcmlvZCA8IDMwMCkpCisJCXB3cm1vZGUuYmNuX3Bhc3NfY250ID0gMzsKKwllbHNlIGlmICgobWF4X3dha2V1cF9wZXJpb2QgPj0gMjApICYmIChtYXhfd2FrZXVwX3BlcmlvZCA8IDIwMCkpCisJCXB3cm1vZGUuYmNuX3Bhc3NfY250ID0gNTsKKwllbHNlCisJCXB3cm1vZGUuYmNuX3Bhc3NfY250ID0gMTsKKworCV9ydGw5MnNfZmlybXdhcmVfc2V0X2gyY19jbWQoaHcsIEZXX0gyQ19TRVRQV1JNT0RFLCAodTggKikmcHdybW9kZSk7CisKK30KKwordm9pZCBydGw5MnNfc2V0X2Z3X2pvaW5ic3NfcmVwb3J0X2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJdTggbXN0YXR1cywgdTggcHNfcW9zaW5mbykKK3sKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBoMmNfam9pbmJzc19ycHRfcGFybSBqb2luYnNzX3JwdDsKKworCWpvaW5ic3NfcnB0Lm9wbW9kZSA9IG1zdGF0dXM7CisJam9pbmJzc19ycHQucHNfcW9zX2luZm8gPSBwc19xb3NpbmZvOworCWpvaW5ic3NfcnB0LmJzc2lkWzBdID0gbWFjLT5ic3NpZFswXTsKKwlqb2luYnNzX3JwdC5ic3NpZFsxXSA9IG1hYy0+YnNzaWRbMV07CisJam9pbmJzc19ycHQuYnNzaWRbMl0gPSBtYWMtPmJzc2lkWzJdOworCWpvaW5ic3NfcnB0LmJzc2lkWzNdID0gbWFjLT5ic3NpZFszXTsKKwlqb2luYnNzX3JwdC5ic3NpZFs0XSA9IG1hYy0+YnNzaWRbNF07CisJam9pbmJzc19ycHQuYnNzaWRbNV0gPSBtYWMtPmJzc2lkWzVdOworCVNFVF9CSVRTX1RPX0xFXzJCWVRFKCh1OCAqKSgmam9pbmJzc19ycHQpICsgOCwgMCwgMTYsCisJCQltYWMtPnZpZi0+YnNzX2NvbmYuYmVhY29uX2ludCk7CisJU0VUX0JJVFNfVE9fTEVfMkJZVEUoKHU4ICopKCZqb2luYnNzX3JwdCkgKyAxMCwgMCwgMTYsIG1hYy0+YXNzb2NfaWQpOworCisJX3J0bDkyc19maXJtd2FyZV9zZXRfaDJjX2NtZChodywgRldfSDJDX0pPSU5CU1NSUFQsICh1OCAqKSZqb2luYnNzX3JwdCk7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL2Z3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9mdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0Y2M1MDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9mdy5oCkBAIC0wLDAgKzEsMzc1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19SRUFMVEVLX0ZJUk1XQVJFOTJTX0hfXworI2RlZmluZSBfX1JFQUxURUtfRklSTVdBUkU5MlNfSF9fCisKKyNkZWZpbmUgUlRMODE5MF9NQVhfRklSTVdBUkVfQ09ERV9TSVpFCQk2NDAwMAorI2RlZmluZSBSVEw4MTkwX0NQVV9TVEFSVF9PRkZTRVQJCTB4ODAKKy8qIEZpcm13YXJlIExvY2FsIGJ1ZmZlciBzaXplLiA2NGsgKi8KKyNkZWZpbmUJTUFYX0ZJUk1XQVJFX0NPREVfU0laRQkJCTB4RkYwMAorCisjZGVmaW5lCVJUXzgxOTJTX0ZJUk1XQVJFX0hEUl9TSVpFCQk4MAorI2RlZmluZSBSVF84MTkyU19GSVJNV0FSRV9IRFJfRVhDTFVERV9QUklfU0laRQkzMgorCisvKiBzdXBwb3J0IHRpbGwgNjQgYml0IGJ1cyB3aWR0aCBPUyAqLworI2RlZmluZSBNQVhfREVWX0FERFJfU0laRQkJCTgKKyNkZWZpbmUgTUFYX0ZJUk1XQVJFX0lORk9STUFUSU9OX1NJWkUJCTMyCisjZGVmaW5lIE1BWF84MDJfMTFfSEVBREVSX0xFTkdUSAkJKDQwICsgXAorCQkJCQkJTUFYX0ZJUk1XQVJFX0lORk9STUFUSU9OX1NJWkUpCisjZGVmaW5lIEVOQ1JZUFRJT05fTUFYX09WRVJIRUFECQkJMTI4CisjZGVmaW5lIE1BWF9GUkFHTUVOVF9DT1VOVAkJCTgKKyNkZWZpbmUgTUFYX1RSQU5TTUlUX0JVRkZFUl9TSVpFCQkoMTYwMCArIFwKKwkJCQkJCShNQVhfODAyXzExX0hFQURFUl9MRU5HVEggKyBcCisJCQkJCQlFTkNSWVBUSU9OX01BWF9PVkVSSEVBRCkgKlwKKwkJCQkJCU1BWF9GUkFHTUVOVF9DT1VOVCkKKworI2RlZmluZSBIMkNfVFhfQ01EX0hEUl9MRU4JCQk4CisKKy8qIFRoZSBmb2xsb3dpbmcgRE0gY29udHJvbCBjb2RlIGFyZSBmb3IgUmVnMHgzNjQsICovCisjZGVmaW5lCUZXX0RJR19FTkFCTEVfQ1RMCQkJQklUKDApCisjZGVmaW5lCUZXX0hJR0hfUFdSX0VOQUJMRV9DVEwJCQlCSVQoMSkKKyNkZWZpbmUJRldfU1NfQ1RMCQkJCUJJVCgyKQorI2RlZmluZQlGV19SQV9JTklUX0NUTAkJCQlCSVQoMykKKyNkZWZpbmUJRldfUkFfQkdfQ1RMCQkJCUJJVCg0KQorI2RlZmluZQlGV19SQV9OX0NUTAkJCQlCSVQoNSkKKyNkZWZpbmUJRldfUFdSX1RSS19DVEwJCQkJQklUKDYpCisjZGVmaW5lCUZXX0lRS19DVEwJCQkJQklUKDcpCisjZGVmaW5lCUZXX0ZBX0NUTAkJCQlCSVQoOCkKKyNkZWZpbmUJRldfRFJJVkVSX0NUUkxfRE1fQ1RMCQkJQklUKDkpCisjZGVmaW5lCUZXX1BBUEVfQ1RMX0JZX1NXX0hXCQkJQklUKDEwKQorI2RlZmluZQlGV19ESVNBQkxFX0FMTF9ETQkJCTAKKyNkZWZpbmUJRldfUFdSX1RSS19QQVJBTV9DTFIJCQkweDAwMDBmZmZmCisjZGVmaW5lCUZXX1JBX1BBUkFNX0NMUgkJCQkweGZmZmYwMDAwCisKK2VudW0gZGVzY19wYWNrZXRfdHlwZSB7CisJREVTQ19QQUNLRVRfVFlQRV9JTklUID0gMCwKKwlERVNDX1BBQ0tFVF9UWVBFX05PUk1BTCA9IDEsCit9OworCisvKiA4LWJ5dGVzIGFsaWdubWVudCByZXF1aXJlZCAqLworc3RydWN0IGZ3X3ByaXYgeworCS8qIC0tLSBsb25nIHdvcmQgMCAtLS0tICovCisJLyogMHgxMjogQ0UgcHJvZHVjdCwgMHg5MjogSVQgcHJvZHVjdCAqLworCXU4IHNpZ25hdHVyZV8wOworCS8qIDB4ODc6IENFIHByb2R1Y3QsIDB4ODE6IElUIHByb2R1Y3QgKi8KKwl1OCBzaWduYXR1cmVfMTsKKwkvKiAweDgxOiBQQ0ktQVAsIDAxOlBDSWUsIDAyOiA5MlMtVSwKKwkgKiAweDgyOiBVU0ItQVAsIDB4MTI6IDcyUy1VLCAwMzpTRElPICovCisJdTggaGNpX3NlbDsKKwkvKiB0aGUgc2FtZSB2YWx1ZSBhcyByZWlnc3RlciB2YWx1ZSAgKi8KKwl1OCBjaGlwX3ZlcnNpb247CisJLyogY3VzdG9tZXIgIElEIGxvdyBieXRlICovCisJdTggY3VzdG9tZXJfaWRfMDsKKwkvKiBjdXN0b21lciAgSUQgaGlnaCBieXRlICovCisJdTggY3VzdG9tZXJfaWRfMTsKKwkvKiAweDExOiAgMVQxUiwgMHgxMjogMVQyUiwKKwkgKiAweDkyOiAxVDJSIHR1cmJvLCAweDIyOiAyVDJSICovCisJdTggcmZfY29uZmlnOworCS8qIDQ6IDRFUCwgNjogNkVQLCAxMTogMTFFUCAqLworCXU4IHVzYl9lcF9udW07CisKKwkvKiAtLS0gbG9uZyB3b3JkIDEgLS0tLSAqLworCS8qIHJlZ3VsYXRvcnkgY2xhc3MgYml0IG1hcCAwICovCisJdTggcmVndWxhdG9yeV9jbGFzc18wOworCS8qIHJlZ3VsYXRvcnkgY2xhc3MgYml0IG1hcCAxICovCisJdTggcmVndWxhdG9yeV9jbGFzc18xOworCS8qIHJlZ3VsYXRvcnkgY2xhc3MgYml0IG1hcCAyICovCisJdTggcmVndWxhdG9yeV9jbGFzc18yOworCS8qIHJlZ3VsYXRvcnkgY2xhc3MgYml0IG1hcCAzICovCisJdTggcmVndWxhdG9yeV9jbGFzc18zOworCS8qIDA6U1dTSSwgMTpIV1NJLCAyOkhXUEkgKi8KKwl1OCByZmludGZzOworCXU4IGRlZl9uZXR0eXBlOworCXU4IHJzdmQwMTA7CisJdTggcnN2ZDAxMTsKKworCS8qIC0tLSBsb25nIHdvcmQgMiAtLS0tICovCisJLyogMHgwMDogbm9ybWFsLCAweDAzOiBNQUNMQkssIDB4MDE6IFBIWUxCSyAqLworCXU4IGxia19tb2RlOworCS8qIDE6IGZvciBNUCB1c2UsIDA6IGZvciBub3JtYWwKKwkgKiBkcml2ZXIgKHRvIGJlIGRpc2N1c3NlZCkgKi8KKwl1OCBtcF9tb2RlOworCXU4IHJzdmQwMjA7CisJdTggcnN2ZDAyMTsKKwl1OCByc3ZkMDIyOworCXU4IHJzdmQwMjM7CisJdTggcnN2ZDAyNDsKKwl1OCByc3ZkMDI1OworCisJLyogLS0tIGxvbmcgd29yZCAzIC0tLS0gKi8KKwkvKiBRb1MgZW5hYmxlICovCisJdTggcW9zX2VuOworCS8qIDQwTUh6IEJXIGVuYWJsZSAqLworCS8qIDQxODEgY29udmVydCBBTVNEVSB0byBBTVBEVSwgMDogZGlzYWJsZSAqLworCXU4IGJ3XzQwbWh6X2VuOworCXU4IGFtc2R1MmFtcGR1X2VuOworCS8qIDExbiBBTVBEVSBlbmFibGUgKi8KKwl1OCBhbXBkdV9lbjsKKwkvKiBGVyBvZmZsb2FkcywgMDogZHJpdmVyIGhhbmRsZXMgKi8KKwl1OCByYXRlX2NvbnRyb2xfb2ZmbG9hZDsKKwkvKiBGVyBvZmZsb2FkcywgMDogZHJpdmVyIGhhbmRsZXMgKi8KKwl1OCBhZ2dyZWdhdGlvbl9vZmZsb2FkOworCXU4IHJzdmQwMzA7CisJdTggcnN2ZDAzMTsKKworCS8qIC0tLSBsb25nIHdvcmQgNCAtLS0tICovCisJLyogMS4gRlcgb2ZmbG9hZHMsIDA6IGRyaXZlciBoYW5kbGVzICovCisJdTggYmVhY29uX29mZmxvYWQ7CisJLyogMi4gRlcgb2ZmbG9hZHMsIDA6IGRyaXZlciBoYW5kbGVzICovCisJdTggbWxtZV9vZmZsb2FkOworCS8qIDMuIEZXIG9mZmxvYWRzLCAwOiBkcml2ZXIgaGFuZGxlcyAqLworCXU4IGh3cGNfb2ZmbG9hZDsKKwkvKiA0LiBGVyBvZmZsb2FkcywgMDogZHJpdmVyIGhhbmRsZXMgKi8KKwl1OCB0Y3BfY2hlY2tzdW1fb2ZmbG9hZDsKKwkvKiA1LiBGVyBvZmZsb2FkcywgMDogZHJpdmVyIGhhbmRsZXMgKi8KKwl1OCB0Y3Bfb2ZmbG9hZDsKKwkvKiA2LiBGVyBvZmZsb2FkcywgMDogZHJpdmVyIGhhbmRsZXMgKi8KKwl1OCBwc19jb250cm9sX29mZmxvYWQ7CisJLyogNy4gRlcgb2ZmbG9hZHMsIDA6IGRyaXZlciBoYW5kbGVzICovCisJdTggd3dsYW5fb2ZmbG9hZDsKKwl1OCByc3ZkMDQwOworCisJLyogLS0tIGxvbmcgd29yZCA1IC0tLS0gKi8KKwkvKiB0Y3AgdHggcGFja2V0IGxlbmd0aCBsb3cgYnl0ZSAqLworCXU4IHRjcF90eF9mcmFtZV9sZW5fTDsKKwkvKiB0Y3AgdHggcGFja2V0IGxlbmd0aCBoaWdoIGJ5dGUgKi8KKwl1OCB0Y3BfdHhfZnJhbWVfbGVuX0g7CisJLyogdGNwIHJ4IHBhY2tldCBsZW5ndGggbG93IGJ5dGUgKi8KKwl1OCB0Y3BfcnhfZnJhbWVfbGVuX0w7CisJLyogdGNwIHJ4IHBhY2tldCBsZW5ndGggaGlnaCBieXRlICovCisJdTggdGNwX3J4X2ZyYW1lX2xlbl9IOworCXU4IHJzdmQwNTA7CisJdTggcnN2ZDA1MTsKKwl1OCByc3ZkMDUyOworCXU4IHJzdmQwNTM7Cit9OworCisvKiA4LWJ5dGUgYWxpbm1lbnQgcmVxdWlyZWQgKi8KK3N0cnVjdCBmd19oZHIgeworCisJLyogLS0tIExPTkcgV09SRCAwIC0tLS0gKi8KKwl1MTYgc2lnbmF0dXJlOworCS8qIDB4ODAwMCB+IDB4OEZGRiBmb3IgRlBHQSB2ZXJzaW9uLAorCSAqIDB4MDAwMCB+IDB4N0ZGRiBmb3IgQVNJQyB2ZXJzaW9uLCAqLworCXUxNiB2ZXJzaW9uOworCS8qIGRlZmluZSB0aGUgc2l6ZSBvZiBib290IGxvYWRlciAqLworCXUzMiBkbWVtX3NpemU7CisKKworCS8qIC0tLSBMT05HIFdPUkQgMSAtLS0tICovCisJLyogZGVmaW5lIHRoZSBzaXplIG9mIEZXIGluIElNRU0gKi8KKwl1MzIgaW1nX2ltZW1fc2l6ZTsKKwkvKiBkZWZpbmUgdGhlIHNpemUgb2YgRlcgaW4gU1JBTSAqLworCXUzMiBpbWdfc3JhbV9zaXplOworCisJLyogLS0tIExPTkcgV09SRCAyIC0tLS0gKi8KKwkvKiBkZWZpbmUgdGhlIHNpemUgb2YgRE1FTSB2YXJpYWJsZSAqLworCXUzMiBmd19wcml2X3NpemU7CisJdTMyIHJzdmQwOworCisJLyogLS0tIExPTkcgV09SRCAzIC0tLS0gKi8KKwl1MzIgcnN2ZDE7CisJdTMyIHJzdmQyOworCisJc3RydWN0IGZ3X3ByaXYgZndwcml2OworCit9IDsKKworZW51bSBmd19zdGF0dXMgeworCUZXX1NUQVRVU19JTklUID0gMCwKKwlGV19TVEFUVVNfTE9BRF9JTUVNID0gMSwKKwlGV19TVEFUVVNfTE9BRF9FTUVNID0gMiwKKwlGV19TVEFUVVNfTE9BRF9ETUVNID0gMywKKwlGV19TVEFUVVNfUkVBRFkgPSA0LAorfTsKKworc3RydWN0IHJ0X2Zpcm13YXJlIHsKKwlzdHJ1Y3QgZndfaGRyICpwZndoZWFkZXI7CisJZW51bSBmd19zdGF0dXMgZndzdGF0dXM7CisJdTE2IGZpcm13YXJldmVyc2lvbjsKKwl1OCBmd19pbWVtW1JUTDgxOTBfTUFYX0ZJUk1XQVJFX0NPREVfU0laRV07CisJdTggZndfZW1lbVtSVEw4MTkwX01BWF9GSVJNV0FSRV9DT0RFX1NJWkVdOworCXUzMiBmd19pbWVtX2xlbjsKKwl1MzIgZndfZW1lbV9sZW47CisJdTggc3pfZndfdG1wYnVmZmVyWzE2NDAwMF07CisJdTMyIHN6X2Z3X3RtcGJ1ZmZlcmxlbjsKKwl1MTYgY21kcGFja2V0X2ZyYWd0aHJlc29sZDsKK307CisKK3N0cnVjdCBoMmNfc2V0X3B3cm1vZGVfcGFybSB7CisJdTggbW9kZTsKKwl1OCBmbGFnX2xvd190cmFmZmljX2VuOworCXU4IGZsYWdfbHBuYXZfZW47CisJdTggZmxhZ19yZl9sb3dfc25yX2VuOworCS8qIDE6IGRwcywgMDogMzJrICovCisJdTggZmxhZ19kcHNfZW47CisJdTggYmNuX3J4X2VuOworCXU4IGJjbl9wYXNzX2NudDsKKwkvKiBiZWFjb24gVE8gKG1zKS4gwqHCpz0wwqHCqCBubyBsaW1pdC4gKi8KKwl1OCBiY25fdG87CisJdTE2CWJjbl9pdHY7CisJLyogb25seSBmb3IgVk9JUCBtb2RlLiAqLworCXU4IGFwcF9pdHY7CisJdTggYXdha2VfYmNuX2l0dmw7CisJdTggc21hcnRfcHM7CisJLyogdW5pdDogMTAwIG1zICovCisJdTggYmNuX3Bhc3NfcGVyaW9kOworfTsKKworc3RydWN0IGgyY19qb2luYnNzX3JwdF9wYXJtIHsKKwl1OCBvcG1vZGU7CisJdTggcHNfcW9zX2luZm87CisJdTggYnNzaWRbNl07CisJdTE2IGJjbml0djsKKwl1MTYgYWlkOworfSA7CisKK3N0cnVjdCBoMmNfd3BhX3B0ayB7CisJLyogRUFQT0wtS2V5IEtleSBDb25maXJtYXRpb24gS2V5IChLQ0spICovCisJdTgga2NrWzE2XTsKKwkvKiBFQVBPTC1LZXkgS2V5IEVuY3J5cHRpb24gS2V5IChLRUspICovCisJdTgga2VrWzE2XTsKKwkvKiBUZW1wb3JhbCBLZXkgMSAoVEsxKSAqLworCXU4IHRrMVsxNl07CisJdW5pb24geworCQkvKiBUZW1wb3JhbCBLZXkgMiAoVEsyKSAqLworCQl1OCB0azJbMTZdOworCQlzdHJ1Y3QgeworCQkJdTggdHhfbWljX2tleVs4XTsKKwkJCXU4IHJ4X21pY19rZXlbOF07CisJCX0gYXRodTsKKwl9IHU7Cit9OworCitzdHJ1Y3QgaDJjX3dwYV90d29fd2F5X3Bhcm0geworCS8qIGFsZ29yaXRobSBUS0lQIG9yIEFFUyAqLworCXU4IHBhaXJ3aXNlX2VuX2FsZzsKKwl1OCBncm91cF9lbl9hbGc7CisJc3RydWN0IGgyY193cGFfcHRrIHdwYV9wdGtfdmFsdWU7Cit9IDsKKworZW51bSBoMmNfY21kIHsKKwlGV19IMkNfU0VUUFdSTU9ERSA9IDAsCisJRldfSDJDX0pPSU5CU1NSUFQgPSAxLAorCUZXX0gyQ19XT1dMQU5fVVBEQVRFX0dUSyA9IDIsCisJRldfSDJDX1dPV0xBTl9VUERBVEVfSVYgPSAzLAorCUZXX0gyQ19XT1dMQU5fT0ZGTE9BRCA9IDQsCit9OworCitlbnVtIGZ3X2gyY19jbWQgeworCUgyQ19SRUFEX01BQ1JFR19DTUQsCQkJCS8qMCovCisJSDJDX1dSSVRFX01BQ1JFR19DTUQsCisJSDJDX1JFQURCQl9DTUQsCisJSDJDX1dSSVRFQkJfQ01ELAorCUgyQ19SRUFEUkZfQ01ELAorCUgyQ19XUklURVJGX0NNRCwJCQkJLyo1Ki8KKwlIMkNfUkVBRF9FRVBST01fQ01ELAorCUgyQ19XUklURV9FRVBST01fQ01ELAorCUgyQ19SRUFEX0VGVVNFX0NNRCwKKwlIMkNfV1JJVEVfRUZVU0VfQ01ELAorCUgyQ19SRUFEX0NBTV9DTUQsCQkJCS8qMTAqLworCUgyQ19XUklURV9DQU1fQ01ELAorCUgyQ19TRVRCQ05JVFZfQ01ELAorCUgyQ19TRVRNQklEQ0ZHX0NNRCwKKwlIMkNfSk9JTkJTU19DTUQsCisJSDJDX0RJU0NPTk5FQ1RfQ01ELAkJCQkvKjE1Ki8KKwlIMkNfQ1JFQVRFQlNTX0NNRCwKKwlIMkNfU0VUT1BNb2RlX0NNRCwKKwlIMkNfU0lURVNVUlZFWV9DTUQsCisJSDJDX1NFVEFVVEhfQ01ELAorCUgyQ19TRVRLRVlfQ01ELAkJCQkJLyoyMCovCisJSDJDX1NFVFNUQUtFWV9DTUQsCisJSDJDX1NFVEFTU09DU1RBX0NNRCwKKwlIMkNfREVMQVNTT0NTVEFfQ01ELAorCUgyQ19TRVRTVEFQV1JTVEFURV9DTUQsCisJSDJDX1NFVEJBU0lDUkFURV9DTUQsCQkJCS8qMjUqLworCUgyQ19HRVRCQVNJQ1JBVEVfQ01ELAorCUgyQ19TRVREQVRBUkFURV9DTUQsCisJSDJDX0dFVERBVEFSQVRFX0NNRCwKKwlIMkNfU0VUUEhZSU5GT19DTUQsCisJSDJDX0dFVFBIWUlORk9fQ01ELAkJCQkvKjMwKi8KKwlIMkNfU0VUUEhZX0NNRCwKKwlIMkNfR0VUUEhZX0NNRCwKKwlIMkNfUkVBRFJTU0lfQ01ELAorCUgyQ19SRUFER0FJTl9DTUQsCisJSDJDX1NFVEFUSU1fQ01ELAkJCQkvKjM1Ki8KKwlIMkNfU0VUUFdSTU9ERV9DTUQsCisJSDJDX0pPSU5CU1NSUFRfQ01ELAorCUgyQ19TRVRSQVRBQkxFX0NNRCwKKwlIMkNfR0VUUkFUQUJMRV9DTUQsCisJSDJDX0dFVENDWFJFUE9SVF9DTUQsCQkJCS8qNDAqLworCUgyQ19HRVREVE1SRVBPUlRfQ01ELAorCUgyQ19HRVRUWFJBVEVTVEFUSUNTX0NNRCwKKwlIMkNfU0VUVVNCU1VTUEVORF9DTUQsCisJSDJDX1NFVEgyQ0xCS19DTUQsCisJSDJDX1RNUDEsCQkJCQkvKjQ1Ki8KKwlIMkNfV09XTEFOX1VQREFURV9HVEtfQ01ELAorCUgyQ19XT1dMQU5fRldfT0ZGTE9BRCwKKwlIMkNfVE1QMiwKKwlIMkNfVE1QMywKKwlIMkNfV09XTEFOX1VQREFURV9JVl9DTUQsCQkJLyo1MCovCisJSDJDX1RNUDQsCisJTUFYX0gyQ0NNRAkJCQkJLyo1MiovCit9OworCisvKiBUaGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgdXNlZCBmb3IgRlcKKyAqIENNRCBtYXAgYW5kIHBhcmFtZXRlciB1cGRhdGVkLiAqLworI2RlZmluZSBGV19DTURfSU9fQ0xSKHJ0bHByaXYsIF9CaXQpCQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJdWRlbGF5KDEwMDApOwkJCQkJXAorCQlydGxwcml2LT5ydGxoYWwuZndjbWRfaW9tYXAgJj0gKH5fQml0KTsJCVwKKwl9IHdoaWxlICgwKTsKKworI2RlZmluZSBGV19DTURfSU9fVVBEQVRFKHJ0bHByaXYsIF92YWwpCQkJCVwKKwlydGxwcml2LT5ydGxoYWwuZndjbWRfaW9tYXAgPSBfdmFsOworCisjZGVmaW5lIEZXX0NNRF9JT19TRVQocnRscHJpdiwgX3ZhbCkJCQkJXAorCWRvIHsJCQkJCQkJXAorCQlydGxfd3JpdGVfd29yZChydGxwcml2LCBMQlVTX01PTl9BRERSLCAodTE2KV92YWwpOwlcCisJCUZXX0NNRF9JT19VUERBVEUocnRscHJpdiwgX3ZhbCk7CQlcCisJfSB3aGlsZSAoMCk7CisKKyNkZWZpbmUgRldfQ01EX1BBUkFfU0VUKHJ0bHByaXYsIF92YWwpCQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIExCVVNfQUREUl9NQVNLLCBfdmFsKTsJXAorCQlydGxwcml2LT5ydGxoYWwuZndjbWRfaW9wYXJhbSA9IF92YWw7CQlcCisJfSB3aGlsZSAoMCk7CisKKyNkZWZpbmUgRldfQ01EX0lPX1FVRVJZKHJ0bHByaXYpCQkJCVwKKwkodTE2KShydGxwcml2LT5ydGxoYWwuZndjbWRfaW9tYXApCisjZGVmaW5lIEZXX0NNRF9JT19QQVJBX1FVRVJZKHJ0bHByaXYpCQkJCVwKKwkoKHUzMikocnRscHJpdi0+cnRsaGFsLmZ3Y21kX2lvcGFyYW0pKQorCitpbnQgcnRsOTJzX2Rvd25sb2FkX2Z3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJzX3NldF9md19wd3Jtb2RlX2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggbW9kZSk7Cit2b2lkIHJ0bDkyc19zZXRfZndfam9pbmJzc19yZXBvcnRfY21kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgIHU4IG1zdGF0dXMsIHU4IHBzX3Fvc2luZm8pOworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL2h3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU5MDA1ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL2h3LmMKQEAgLTAsMCArMSwyNTEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIi4uL3dpZmkuaCIKKyNpbmNsdWRlICIuLi9lZnVzZS5oIgorI2luY2x1ZGUgIi4uL2Jhc2UuaCIKKyNpbmNsdWRlICIuLi9yZWdkLmgiCisjaW5jbHVkZSAiLi4vY2FtLmgiCisjaW5jbHVkZSAiLi4vcHMuaCIKKyNpbmNsdWRlICIuLi9wY2kuaCIKKyNpbmNsdWRlICJyZWcuaCIKKyNpbmNsdWRlICJkZWYuaCIKKyNpbmNsdWRlICJwaHkuaCIKKyNpbmNsdWRlICJkbS5oIgorI2luY2x1ZGUgImZ3LmgiCisjaW5jbHVkZSAibGVkLmgiCisjaW5jbHVkZSAiaHcuaCIKKwordm9pZCBydGw5MnNlX2dldF9od19yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHZhcmlhYmxlLCB1OCAqdmFsKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCisJc3dpdGNoICh2YXJpYWJsZSkgeworCWNhc2UgSFdfVkFSX1JDUjogeworCQkJKigodTMyICopICh2YWwpKSA9IHJ0bHBjaS0+cmVjZWl2ZV9jb25maWc7CisJCQlicmVhazsKKwkJfQorCWNhc2UgSFdfVkFSX1JGX1NUQVRFOiB7CisJCQkqKChlbnVtIHJmX3B3cnN0YXRlICopKHZhbCkpID0gcHBzYy0+cmZwd3Jfc3RhdGU7CisJCQlicmVhazsKKwkJfQorCWNhc2UgSFdfVkFSX0ZXX1BTTU9ERV9TVEFUVVM6IHsKKwkJCSooKGJvb2wgKikgKHZhbCkpID0gcHBzYy0+ZndfY3VycmVudF9pbnBzbW9kZTsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBIV19WQVJfQ09SUkVDVF9UU0Y6IHsKKwkJCXU2NCB0c2Y7CisJCQl1MzIgKnB0c2ZfbG93ID0gKHUzMiAqKSZ0c2Y7CisJCQl1MzIgKnB0c2ZfaGlnaCA9ICgodTMyICopJnRzZikgKyAxOworCisJCQkqcHRzZl9oaWdoID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgKFRTRlIgKyA0KSk7CisJCQkqcHRzZl9sb3cgPSBydGxfcmVhZF9kd29yZChydGxwcml2LCBUU0ZSKTsKKworCQkJKigodTY0ICopICh2YWwpKSA9IHRzZjsKKworCQkJYnJlYWs7CisJCX0KKwljYXNlIEhXX1ZBUl9NUkM6IHsKKwkJCSooKGJvb2wgKikodmFsKSkgPSBydGxwcml2LT5kbS5jdXJyZW50X21yY19zd2l0Y2g7CisJCQlicmVhazsKKwkJfQorCWRlZmF1bHQ6IHsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkJICgic3dpdGNoIGNhc2Ugbm90IHByb2Nlc3NcbiIpKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCit2b2lkIHJ0bDkyc2Vfc2V0X2h3X3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggdmFyaWFibGUsIHU4ICp2YWwpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CisKKwlzd2l0Y2ggKHZhcmlhYmxlKSB7CisJY2FzZSBIV19WQVJfRVRIRVJfQUREUjp7CisJCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgSURSMCwgKCh1MzIgKikodmFsKSlbMF0pOworCQkJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgSURSNCwgKCh1MTYgKikodmFsICsgNCkpWzBdKTsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBIV19WQVJfQkFTSUNfUkFURTp7CisJCQl1MTYgcmF0ZV9jZmcgPSAoKHUxNiAqKSB2YWwpWzBdOworCQkJdTggcmF0ZV9pbmRleCA9IDA7CisKKwkJCWlmIChydGxoYWwtPnZlcnNpb24gPT0gVkVSU0lPTl84MTkyU19BQ1VUKQorCQkJCXJhdGVfY2ZnID0gcmF0ZV9jZmcgJiAweDE1MDsKKwkJCWVsc2UKKwkJCQlyYXRlX2NmZyA9IHJhdGVfY2ZnICYgMHgxNWY7CisKKwkJCXJhdGVfY2ZnIHw9IDB4MDE7CisKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJSU1IsIHJhdGVfY2ZnICYgMHhmZik7CisJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSUlNSICsgMSwKKwkJCQkgICAgICAgKHJhdGVfY2ZnID4+IDgpICYgMHhmZik7CisKKwkJCXdoaWxlIChyYXRlX2NmZyA+IDB4MSkgeworCQkJCXJhdGVfY2ZnID0gKHJhdGVfY2ZnID4+IDEpOworCQkJCXJhdGVfaW5kZXgrKzsKKwkJCX0KKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIElOSVJUU01DU19TRUwsIHJhdGVfaW5kZXgpOworCisJCQlicmVhazsKKwkJfQorCWNhc2UgSFdfVkFSX0JTU0lEOnsKKwkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBCU1NJRFIsICgodTMyICopKHZhbCkpWzBdKTsKKwkJCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIEJTU0lEUiArIDQsCisJCQkJICAgICAgICgodTE2ICopKHZhbCArIDQpKVswXSk7CisJCQlicmVhazsKKwkJfQorCWNhc2UgSFdfVkFSX1NJRlM6eworCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgU0lGU19PRkRNLCB2YWxbMF0pOworCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgU0lGU19PRkRNICsgMSwgdmFsWzFdKTsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBIV19WQVJfU0xPVF9USU1FOnsKKwkJCXU4IGVfYWNpOworCisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01MTUUsIERCR19MT1VELAorCQkJCSAoIkhXX1ZBUl9TTE9UX1RJTUUgJXhcbiIsIHZhbFswXSkpOworCisJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBTTE9UX1RJTUUsIHZhbFswXSk7CisKKwkJCWZvciAoZV9hY2kgPSAwOyBlX2FjaSA8IEFDX01BWDsgZV9hY2krKykgeworCQkJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LAorCQkJCQkJSFdfVkFSX0FDX1BBUkFNLAorCQkJCQkJKHU4ICopKCZlX2FjaSkpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwljYXNlIEhXX1ZBUl9BQ0tfUFJFQU1CTEU6eworCQkJdTggcmVnX3RtcDsKKwkJCXU4IHNob3J0X3ByZWFtYmxlID0gKGJvb2wpICgqKHU4ICopIHZhbCk7CisJCQlyZWdfdG1wID0gKG1hYy0+Y3VyXzQwX3ByaW1lX3NjKSA8PCA1OworCQkJaWYgKHNob3J0X3ByZWFtYmxlKQorCQkJCXJlZ190bXAgfD0gMHg4MDsKKworCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUlJTUiArIDIsIHJlZ190bXApOworCQkJYnJlYWs7CisJCX0KKwljYXNlIEhXX1ZBUl9BTVBEVV9NSU5fU1BBQ0U6eworCQkJdTggbWluX3NwYWNpbmdfdG9fc2V0OworCQkJdTggc2VjX21pbl9zcGFjZTsKKworCQkJbWluX3NwYWNpbmdfdG9fc2V0ID0gKigodTggKil2YWwpOworCQkJaWYgKG1pbl9zcGFjaW5nX3RvX3NldCA8PSA3KSB7CisJCQkJaWYgKHJ0bHByaXYtPnNlYy5wYWlyd2lzZV9lbmNfYWxnb3JpdGhtID09CisJCQkJICAgIE5PX0VOQ1JZUFRJT04pCisJCQkJCXNlY19taW5fc3BhY2UgPSAwOworCQkJCWVsc2UKKwkJCQkJc2VjX21pbl9zcGFjZSA9IDE7CisKKwkJCQlpZiAobWluX3NwYWNpbmdfdG9fc2V0IDwgc2VjX21pbl9zcGFjZSkKKwkJCQkJbWluX3NwYWNpbmdfdG9fc2V0ID0gc2VjX21pbl9zcGFjZTsKKwkJCQlpZiAobWluX3NwYWNpbmdfdG9fc2V0ID4gNSkKKwkJCQkJbWluX3NwYWNpbmdfdG9fc2V0ID0gNTsKKworCQkJCW1hYy0+bWluX3NwYWNlX2NmZyA9CisJCQkJCQkoKG1hYy0+bWluX3NwYWNlX2NmZyAmIDB4ZjgpIHwKKwkJCQkJCW1pbl9zcGFjaW5nX3RvX3NldCk7CisKKwkJCQkqdmFsID0gbWluX3NwYWNpbmdfdG9fc2V0OworCisJCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9NTE1FLCBEQkdfTE9VRCwKKwkJCQkJICgiU2V0IEhXX1ZBUl9BTVBEVV9NSU5fU1BBQ0U6ICUjeFxuIiwKKwkJCQkJICBtYWMtPm1pbl9zcGFjZV9jZmcpKTsKKworCQkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIEFNUERVX01JTl9TUEFDRSwKKwkJCQkJICAgICAgIG1hYy0+bWluX3NwYWNlX2NmZyk7CisJCQl9CisJCQlicmVhazsKKwkJfQorCWNhc2UgSFdfVkFSX1NIT1JUR0lfREVOU0lUWTp7CisJCQl1OCBkZW5zaXR5X3RvX3NldDsKKworCQkJZGVuc2l0eV90b19zZXQgPSAqKCh1OCAqKSB2YWwpOworCQkJbWFjLT5taW5fc3BhY2VfY2ZnID0gcnRscHJpdi0+cnRsaGFsLm1pbnNwYWNlX2NmZzsKKwkJCW1hYy0+bWluX3NwYWNlX2NmZyB8PSAoZGVuc2l0eV90b19zZXQgPDwgMyk7CisKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTUxNRSwgREJHX0xPVUQsCisJCQkJICgiU2V0IEhXX1ZBUl9TSE9SVEdJX0RFTlNJVFk6ICUjeFxuIiwKKwkJCQkgIG1hYy0+bWluX3NwYWNlX2NmZykpOworCisJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBBTVBEVV9NSU5fU1BBQ0UsCisJCQkJICAgICAgIG1hYy0+bWluX3NwYWNlX2NmZyk7CisKKwkJCWJyZWFrOworCQl9CisJY2FzZSBIV19WQVJfQU1QRFVfRkFDVE9SOnsKKwkJCXU4IGZhY3Rvcl90b3NldDsKKwkJCXU4IHJlZ3Rvc2V0OworCQkJdTggZmFjdG9ybGV2ZWxbMThdID0geworCQkJCTIsIDQsIDQsIDcsIDcsIDEzLCAxMywKKwkJCQkxMywgMiwgNywgNywgMTMsIDEzLAorCQkJCTE1LCAxNSwgMTUsIDE1LCAwfTsKKwkJCXU4IGluZGV4ID0gMDsKKworCQkJZmFjdG9yX3Rvc2V0ID0gKigodTggKikgdmFsKTsKKwkJCWlmIChmYWN0b3JfdG9zZXQgPD0gMykgeworCQkJCWZhY3Rvcl90b3NldCA9ICgxIDw8IChmYWN0b3JfdG9zZXQgKyAyKSk7CisJCQkJaWYgKGZhY3Rvcl90b3NldCA+IDB4ZikKKwkJCQkJZmFjdG9yX3Rvc2V0ID0gMHhmOworCisJCQkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgMTc7IGluZGV4KyspIHsKKwkJCQkJaWYgKGZhY3RvcmxldmVsW2luZGV4XSA+IGZhY3Rvcl90b3NldCkKKwkJCQkJCWZhY3RvcmxldmVsW2luZGV4XSA9CisJCQkJCQkJCSBmYWN0b3JfdG9zZXQ7CisJCQkJfQorCisJCQkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgODsgaW5kZXgrKykgeworCQkJCQlyZWd0b3NldCA9ICgoZmFjdG9ybGV2ZWxbaW5kZXggKiAyXSkgfAorCQkJCQkJICAgIChmYWN0b3JsZXZlbFtpbmRleCAqCisJCQkJCQkgICAgMiArIDFdIDw8IDQpKTsKKwkJCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwKKwkJCQkJCSAgICAgICBBR0dMRU5fTE1UX0wgKyBpbmRleCwKKwkJCQkJCSAgICAgICByZWd0b3NldCk7CisJCQkJfQorCisJCQkJcmVndG9zZXQgPSAoKGZhY3RvcmxldmVsWzE2XSkgfAorCQkJCQkgICAgKGZhY3RvcmxldmVsWzE3XSA8PCA0KSk7CisJCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgQUdHTEVOX0xNVF9ILCByZWd0b3NldCk7CisKKwkJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01MTUUsIERCR19MT1VELAorCQkJCQkgKCJTZXQgSFdfVkFSX0FNUERVX0ZBQ1RPUjogJSN4XG4iLAorCQkJCQkgIGZhY3Rvcl90b3NldCkpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwljYXNlIEhXX1ZBUl9BQ19QQVJBTTp7CisJCQl1OCBlX2FjaSA9ICooKHU4ICopIHZhbCk7CisJCQlydGw5MnNfZG1faW5pdF9lZGNhX3R1cmJvKGh3KTsKKworCQkJaWYgKHJ0bHBjaS0+YWNtX21ldGhvZCAhPSBlQWNtV2F5Ml9TVykKKwkJCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywKKwkJCQkJCSBIV19WQVJfQUNNX0NUUkwsCisJCQkJCQkgKHU4ICopKCZlX2FjaSkpOworCQkJYnJlYWs7CisJCX0KKwljYXNlIEhXX1ZBUl9BQ01fQ1RSTDp7CisJCQl1OCBlX2FjaSA9ICooKHU4ICopIHZhbCk7CisJCQl1bmlvbiBhY2lfYWlmc24gKnBfYWNpX2FpZnNuID0gKHVuaW9uIGFjaV9haWZzbiAqKSgmKAorCQkJCQkJCW1hYy0+YWNbMF0uYWlmcykpOworCQkJdTggYWNtID0gcF9hY2lfYWlmc24tPmYuYWNtOworCQkJdTggYWNtX2N0cmwgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIEFjbUh3Q3RybCk7CisKKwkJCWFjbV9jdHJsID0gYWNtX2N0cmwgfCAoKHJ0bHBjaS0+YWNtX21ldGhvZCA9PSAyKSA/CisJCQkJICAgMHgwIDogMHgxKTsKKworCQkJaWYgKGFjbSkgeworCQkJCXN3aXRjaCAoZV9hY2kpIHsKKwkJCQljYXNlIEFDMF9CRToKKwkJCQkJYWNtX2N0cmwgfD0gQWNtSHdfQmVxRW47CisJCQkJCWJyZWFrOworCQkJCWNhc2UgQUMyX1ZJOgorCQkJCQlhY21fY3RybCB8PSBBY21Id19WaXFFbjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBBQzNfVk86CisJCQkJCWFjbV9jdHJsIHw9IEFjbUh3X1ZvcUVuOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX1dBUk5JTkcsCisJCQkJCQkgKCJIV19WQVJfQUNNX0NUUkwgYWNtIHNldCAiCisJCQkJCQkgICJmYWlsZWQ6IGVBQ0kgaXMgJWRcbiIsIGFjbSkpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXN3aXRjaCAoZV9hY2kpIHsKKwkJCQljYXNlIEFDMF9CRToKKwkJCQkJYWNtX2N0cmwgJj0gKH5BY21Id19CZXFFbik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgQUMyX1ZJOgorCQkJCQlhY21fY3RybCAmPSAofkFjbUh3X1ZpcUVuKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBBQzNfVk86CisJCQkJCWFjbV9jdHJsICY9ICh+QWNtSHdfQmVxRW4pOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJCQkJICgic3dpdGNoIGNhc2Ugbm90IHByb2Nlc3NcbiIpKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1FPUywgREJHX1RSQUNFLAorCQkJCSAoIkhXX1ZBUl9BQ01fQ1RSTCBXcml0ZSAweCVYXG4iLCBhY21fY3RybCkpOworCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgQWNtSHdDdHJsLCBhY21fY3RybCk7CisJCQlicmVhazsKKwkJfQorCWNhc2UgSFdfVkFSX1JDUjp7CisJCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkNSLCAoKHUzMiAqKSAodmFsKSlbMF0pOworCQkJcnRscGNpLT5yZWNlaXZlX2NvbmZpZyA9ICgodTMyICopICh2YWwpKVswXTsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBIV19WQVJfUkVUUllfTElNSVQ6eworCQkJdTggcmV0cnlfbGltaXQgPSAoKHU4ICopICh2YWwpKVswXTsKKworCQkJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgUkVUUllfTElNSVQsCisJCQkJICAgICAgIHJldHJ5X2xpbWl0IDw8IFJFVFJZX0xJTUlUX1NIT1JUX1NISUZUIHwKKwkJCQkgICAgICAgcmV0cnlfbGltaXQgPDwgUkVUUllfTElNSVRfTE9OR19TSElGVCk7CisJCQlicmVhazsKKwkJfQorCWNhc2UgSFdfVkFSX0RVQUxfVFNGX1JTVDogeworCQkJYnJlYWs7CisJCX0KKwljYXNlIEhXX1ZBUl9FRlVTRV9CWVRFUzogeworCQkJcnRsZWZ1c2UtPmVmdXNlX3VzZWRieXRlcyA9ICooKHUxNiAqKSB2YWwpOworCQkJYnJlYWs7CisJCX0KKwljYXNlIEhXX1ZBUl9FRlVTRV9VU0FHRTogeworCQkJcnRsZWZ1c2UtPmVmdXNlX3VzZWRwZXJjZW50YWdlID0gKigodTggKikgdmFsKTsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBIV19WQVJfSU9fQ01EOiB7CisJCQlicmVhazsKKwkJfQorCWNhc2UgSFdfVkFSX1dQQV9DT05GSUc6IHsKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TRUNSLCAqKCh1OCAqKSB2YWwpKTsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBIV19WQVJfU0VUX1JQV006eworCQkJYnJlYWs7CisJCX0KKwljYXNlIEhXX1ZBUl9IMkNfRldfUFdSTU9ERTp7CisJCQlicmVhazsKKwkJfQorCWNhc2UgSFdfVkFSX0ZXX1BTTU9ERV9TVEFUVVM6IHsKKwkJCXBwc2MtPmZ3X2N1cnJlbnRfaW5wc21vZGUgPSAqKChib29sICopIHZhbCk7CisJCQlicmVhazsKKwkJfQorCWNhc2UgSFdfVkFSX0gyQ19GV19KT0lOQlNTUlBUOnsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBIV19WQVJfQUlEOnsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBIV19WQVJfQ09SUkVDVF9UU0Y6eworCQkJYnJlYWs7CisJCX0KKwljYXNlIEhXX1ZBUl9NUkM6IHsKKwkJCWJvb2wgYm1yY190b3NldCA9ICooKGJvb2wgKil2YWwpOworCQkJdTggdTFiZGF0YSA9IDA7CisKKwkJCWlmIChibXJjX3Rvc2V0KSB7CisJCQkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX1RSWFBBVEhFTkFCTEUsCisJCQkJCSAgICAgIE1BU0tCWVRFMCwgMHgzMyk7CisJCQkJdTFiZGF0YSA9ICh1OClydGxfZ2V0X2JicmVnKGh3LAorCQkJCQkJUk9GRE0xX1RSWFBBVEhFTkFCTEUsCisJCQkJCQlNQVNLQllURTApOworCQkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJPRkRNMV9UUlhQQVRIRU5BQkxFLAorCQkJCQkgICAgICBNQVNLQllURTAsCisJCQkJCSAgICAgICgodTFiZGF0YSAmIDB4ZjApIHwgMHgwMykpOworCQkJCXUxYmRhdGEgPSAodTgpcnRsX2dldF9iYnJlZyhodywKKwkJCQkJCVJPRkRNMF9UUlhQQVRIRU5BQkxFLAorCQkJCQkJTUFTS0JZVEUxKTsKKwkJCQlydGxfc2V0X2JicmVnKGh3LCBST0ZETTBfVFJYUEFUSEVOQUJMRSwKKwkJCQkJICAgICAgTUFTS0JZVEUxLAorCQkJCQkgICAgICAodTFiZGF0YSB8IDB4MDQpKTsKKworCQkJCS8qIFVwZGF0ZSBjdXJyZW50IHNldHRpbmdzLiAqLworCQkJCXJ0bHByaXYtPmRtLmN1cnJlbnRfbXJjX3N3aXRjaCA9IGJtcmNfdG9zZXQ7CisJCQl9IGVsc2UgeworCQkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJPRkRNMF9UUlhQQVRIRU5BQkxFLAorCQkJCQkgICAgICBNQVNLQllURTAsIDB4MTMpOworCQkJCXUxYmRhdGEgPSAodTgpcnRsX2dldF9iYnJlZyhodywKKwkJCQkJCSBST0ZETTFfVFJYUEFUSEVOQUJMRSwKKwkJCQkJCSBNQVNLQllURTApOworCQkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJPRkRNMV9UUlhQQVRIRU5BQkxFLAorCQkJCQkgICAgICBNQVNLQllURTAsCisJCQkJCSAgICAgICgodTFiZGF0YSAmIDB4ZjApIHwgMHgwMSkpOworCQkJCXUxYmRhdGEgPSAodTgpcnRsX2dldF9iYnJlZyhodywKKwkJCQkJCVJPRkRNMF9UUlhQQVRIRU5BQkxFLAorCQkJCQkJTUFTS0JZVEUxKTsKKwkJCQlydGxfc2V0X2JicmVnKGh3LCBST0ZETTBfVFJYUEFUSEVOQUJMRSwKKwkJCQkJICAgICAgTUFTS0JZVEUxLCAodTFiZGF0YSAmIDB4ZmIpKTsKKworCQkJCS8qIFVwZGF0ZSBjdXJyZW50IHNldHRpbmdzLiAqLworCQkJCXJ0bHByaXYtPmRtLmN1cnJlbnRfbXJjX3N3aXRjaCA9IGJtcmNfdG9zZXQ7CisJCQl9CisKKwkJCWJyZWFrOworCQl9CisJZGVmYXVsdDoKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoInN3aXRjaCBjYXNlIG5vdCBwcm9jZXNzXG4iKSk7CisJCWJyZWFrOworCX0KKworfQorCit2b2lkIHJ0bDkyc2VfZW5hYmxlX2h3X3NlY3VyaXR5X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTggc2VjX3JlZ192YWx1ZSA9IDB4MDsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0xPVUQsICgiUGFpcndpc2VFbmNBbGdvcml0aG0gPSAlZCAiCisJCSAiR3JvdXBFbmNBbGdvcml0aG0gPSAlZFxuIiwKKwkJIHJ0bHByaXYtPnNlYy5wYWlyd2lzZV9lbmNfYWxnb3JpdGhtLAorCQkgcnRscHJpdi0+c2VjLmdyb3VwX2VuY19hbGdvcml0aG0pKTsKKworCWlmIChydGxwcml2LT5jZmctPm1vZF9wYXJhbXMtPnN3X2NyeXB0byB8fCBydGxwcml2LT5zZWMudXNlX3N3X3NlYykgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0RNRVNHLAorCQkJICgibm90IG9wZW4gaHcgZW5jcnlwdGlvblxuIikpOworCQlyZXR1cm47CisJfQorCisJc2VjX3JlZ192YWx1ZSA9IFNDUl9UWEVOQ0VOQUJMRSB8IFNDUl9SWEVOQ0VOQUJMRTsKKworCWlmIChydGxwcml2LT5zZWMudXNlX2RlZmF1bHRrZXkpIHsKKwkJc2VjX3JlZ192YWx1ZSB8PSBTQ1JfVFhVU0VESzsKKwkJc2VjX3JlZ192YWx1ZSB8PSBTQ1JfUlhVU0VESzsKKwl9CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0xPVUQsICgiVGhlIFNFQ1ItdmFsdWUgJXhcbiIsCisJCQlzZWNfcmVnX3ZhbHVlKSk7CisKKwlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywgSFdfVkFSX1dQQV9DT05GSUcsICZzZWNfcmVnX3ZhbHVlKTsKKworfQorCitzdGF0aWMgdTggX3J0bDkyY2VfaGFsc2V0X3N5c2NsayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggZGF0YSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTggd2FpdGNvdW50ID0gMTAwOworCWJvb2wgYnJlc3VsdCA9IGZhbHNlOworCXU4IHRtcHZhbHVlOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgU1lTX0NMS1IgKyAxLCBkYXRhKTsKKworCS8qIFdhaXQgdGhlIE1BQyBzeW5jaHJvbml6ZWQuICovCisJdWRlbGF5KDQwMCk7CisKKwkvKiBDaGVjayBpZiBpdCBpcyBzZXQgcmVhZHkuICovCisJdG1wdmFsdWUgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFNZU19DTEtSICsgMSk7CisJYnJlc3VsdCA9ICgodG1wdmFsdWUgJiBCSVQoNykpID09IChkYXRhICYgQklUKDcpKSk7CisKKwlpZiAoKGRhdGEgJiAoQklUKDYpIHwgQklUKDcpKSkgPT0gZmFsc2UpIHsKKwkJd2FpdGNvdW50ID0gMTAwOworCQl0bXB2YWx1ZSA9IDA7CisKKwkJd2hpbGUgKDEpIHsKKwkJCXdhaXRjb3VudC0tOworCisJCQl0bXB2YWx1ZSA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgU1lTX0NMS1IgKyAxKTsKKwkJCWlmICgodG1wdmFsdWUgJiBCSVQoNikpKQorCQkJCWJyZWFrOworCisJCQlwcmludGsoS0VSTl9FUlIgIndhaXQgZm9yIEJJVCg2KSByZXR1cm4gdmFsdWUgJXhcbiIsCisJCQkgICAgICAgdG1wdmFsdWUpOworCQkJaWYgKHdhaXRjb3VudCA9PSAwKQorCQkJCWJyZWFrOworCisJCQl1ZGVsYXkoMTApOworCQl9CisKKwkJaWYgKHdhaXRjb3VudCA9PSAwKQorCQkJYnJlc3VsdCA9IGZhbHNlOworCQllbHNlCisJCQlicmVzdWx0ID0gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gYnJlc3VsdDsKK30KKwordm9pZCBydGw4MTkyc2VfZ3Bpb2JpdDNfY2ZnX2lucHV0bW9kZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTggdTF0bXA7CisKKwkvKiBUaGUgZm9sbG93aW5nIGNvbmZpZyBHUElPIGZ1bmN0aW9uICovCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgTUFDX1BJTk1VWF9DRkcsIChHUElPTVVYX0VOIHwgR1BJT1NFTF9HUElPKSk7CisJdTF0bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIEdQSU9fSU9fU0VMKTsKKworCS8qIGNvbmZpZyBHUElPMyB0byBpbnB1dCAqLworCXUxdG1wICY9IEhBTF84MTkyU19IV19HUElPX09GRl9NQVNLOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIEdQSU9fSU9fU0VMLCB1MXRtcCk7CisKK30KKworc3RhdGljIHU4IF9ydGw5MnNlX3JmX29ub2ZmX2RldGVjdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTggdTF0bXA7CisJdTggcmV0dmFsID0gRVJGT047CisKKwkvKiBUaGUgZm9sbG93aW5nIGNvbmZpZyBHUElPIGZ1bmN0aW9uICovCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgTUFDX1BJTk1VWF9DRkcsIChHUElPTVVYX0VOIHwgR1BJT1NFTF9HUElPKSk7CisJdTF0bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIEdQSU9fSU9fU0VMKTsKKworCS8qIGNvbmZpZyBHUElPMyB0byBpbnB1dCAqLworCXUxdG1wICY9IEhBTF84MTkyU19IV19HUElPX09GRl9NQVNLOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIEdQSU9fSU9fU0VMLCB1MXRtcCk7CisKKwkvKiBPbiBzb21lIG9mIHRoZSBwbGF0Zm9ybSwgZHJpdmVyIGNhbm5vdCByZWFkIGNvcnJlY3QKKwkgKiB2YWx1ZSB3aXRob3V0IGRlbGF5IGJldHdlZW4gV3JpdGVfR1BJT19TRUwgYW5kIFJlYWRfR1BJT19JTiAqLworCW1kZWxheSgxMCk7CisKKwkvKiBjaGVjayBHUElPMyAqLworCXUxdG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBHUElPX0lOKTsKKwlyZXR2YWwgPSAodTF0bXAgJiBIQUxfODE5MlNfSFdfR1BJT19PRkZfQklUKSA/IEVSRk9OIDogRVJGT0ZGOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX3J0bDkyc2VfbWFjY29uZmlnX2JlZm9yZV9md2Rvd25sb2FkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCisJdTggaTsKKwl1OCB0bXB1MWI7CisJdTE2IHRtcHUyYjsKKwl1OCBwb2xsaW5nY250ID0gMjA7CisKKwlpZiAocnRscGNpLT5maXJzdF9pbml0KSB7CisJCS8qIFJlc2V0IFBDSUUgRGlnaXRhbCAqLworCQl0bXB1MWIgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19TWVNfRlVOQ19FTiArIDEpOworCQl0bXB1MWIgJj0gMHhGRTsKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1NZU19GVU5DX0VOICsgMSwgdG1wdTFiKTsKKwkJdWRlbGF5KDEpOworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfU1lTX0ZVTkNfRU4gKyAxLCB0bXB1MWIgfCBCSVQoMCkpOworCX0KKworCS8qIFN3aXRjaCB0byBTVyBJTyBjb250cm9sICovCisJdG1wdTFiID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCAoU1lTX0NMS1IgKyAxKSk7CisJaWYgKHRtcHUxYiAmIEJJVCg3KSkgeworCQl0bXB1MWIgJj0gfihCSVQoNikgfCBCSVQoNykpOworCisJCS8qIFNldCBmYWlsZWQsIHJldHVybiB0byBwcmV2ZW50IGhhbmcuICovCisJCWlmICghX3J0bDkyY2VfaGFsc2V0X3N5c2NsayhodywgdG1wdTFiKSkKKwkJCXJldHVybjsKKwl9CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBBRkVfUExMX0NUUkwsIDB4MCk7CisJdWRlbGF5KDUwKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBMRE9BMTVfQ1RSTCwgMHgzNCk7CisJdWRlbGF5KDUwKTsKKworCS8qIENsZWFyIEZXIFJQV00gZm9yIEZXIGNvbnRyb2wgTFBTLiovCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUlBXTSwgMHgwKTsKKworCS8qIFJlc2V0IE1BQy1JTyBhbmQgQ1BVIGFuZCBDb3JlIERpZ2l0YWwgQklUKDEwKS8xMS8xNSAqLworCXRtcHUxYiA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUkVHX1NZU19GVU5DX0VOICsgMSk7CisJdG1wdTFiICY9IDB4NzM7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1NZU19GVU5DX0VOICsgMSwgdG1wdTFiKTsKKwkvKiB3YWl0IGZvciBCSVQgMTAvMTEvMTUgdG8gcHVsbCBoaWdoIGF1dG9tYXRpY2FsbHkhISAqLworCW1kZWxheSgxKTsKKworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIENNRFIsIDApOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFRDUiwgMCk7CisKKwkvKiBEYXRhIHNoZWV0IG5vdCBkZWZpbmUgMHg1NjIhISEgQ29weSBmcm9tIFdNQUMhISEhISAqLworCXRtcHUxYiA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgMHg1NjIpOworCXRtcHUxYiB8PSAweDA4OworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4NTYyLCB0bXB1MWIpOworCXRtcHUxYiAmPSB+KEJJVCgzKSk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHg1NjIsIHRtcHUxYik7CisKKwkvKiBFbmFibGUgQUZFIGNsb2NrIHNvdXJjZSAqLworCXRtcHUxYiA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgQUZFX1hUQUxfQ1RSTCk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgQUZFX1hUQUxfQ1RSTCwgKHRtcHUxYiB8IDB4MDEpKTsKKwkvKiBEZWxheSAxLjVtcyAqLworCW1kZWxheSgyKTsKKwl0bXB1MWIgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIEFGRV9YVEFMX0NUUkwgKyAxKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBBRkVfWFRBTF9DVFJMICsgMSwgKHRtcHUxYiAmIDB4ZmIpKTsKKworCS8qIEVuYWJsZSBBRkUgTWFjcm8gQmxvY2sncyBCYW5kZ2FwICovCisJdG1wdTFiID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBBRkVfTUlTQyk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgQUZFX01JU0MsICh0bXB1MWIgfCBCSVQoMCkpKTsKKwltZGVsYXkoMSk7CisKKwkvKiBFbmFibGUgQUZFIE1iaWFzICovCisJdG1wdTFiID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBBRkVfTUlTQyk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgQUZFX01JU0MsICh0bXB1MWIgfCAweDAyKSk7CisJbWRlbGF5KDEpOworCisJLyogRW5hYmxlIExET0ExNSBibG9jawkqLworCXRtcHUxYiA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgTERPQTE1X0NUUkwpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIExET0ExNV9DVFJMLCAodG1wdTFiIHwgQklUKDApKSk7CisKKwkvKiBTZXQgRGlnaXRhbCBWZGQgdG8gUmV0ZW50aW9uIGlzb2xhdGlvbiBQYXRoLiAqLworCXRtcHUyYiA9IHJ0bF9yZWFkX3dvcmQocnRscHJpdiwgUkVHX1NZU19JU09fQ1RSTCk7CisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgUkVHX1NZU19JU09fQ1RSTCwgKHRtcHUyYiB8IEJJVCgxMSkpKTsKKworCS8qIEZvciB3YXJtIHJlYm9vdCBOSUMgZGlzYXBwZXJhIGJ1Zy4gKi8KKwl0bXB1MmIgPSBydGxfcmVhZF93b3JkKHJ0bHByaXYsIFJFR19TWVNfRlVOQ19FTik7CisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgUkVHX1NZU19GVU5DX0VOLCAodG1wdTJiIHwgQklUKDEzKSkpOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1NZU19JU09fQ1RSTCArIDEsIDB4NjgpOworCisJLyogRW5hYmxlIEFGRSBQTEwgTWFjcm8gQmxvY2sgKi8KKwkvKiBXZSBuZWVkIHRvIGRlbGF5IDEwMHUgYmVmb3JlIGVuYWJsaW5nIFBMTC4gKi8KKwl1ZGVsYXkoMjAwKTsKKwl0bXB1MWIgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIEFGRV9QTExfQ1RSTCk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgQUZFX1BMTF9DVFJMLCAodG1wdTFiIHwgQklUKDApIHwgQklUKDQpKSk7CisKKwkvKiBmb3IgZGl2aWRlciByZXNldCAgKi8KKwl1ZGVsYXkoMTAwKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBBRkVfUExMX0NUUkwsICh0bXB1MWIgfCBCSVQoMCkgfAorCQkgICAgICAgQklUKDQpIHwgQklUKDYpKSk7CisJdWRlbGF5KDEwKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBBRkVfUExMX0NUUkwsICh0bXB1MWIgfCBCSVQoMCkgfCBCSVQoNCkpKTsKKwl1ZGVsYXkoMTApOworCisJLyogRW5hYmxlIE1BQyA4ME1IWiBjbG9jayAgKi8KKwl0bXB1MWIgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIEFGRV9QTExfQ1RSTCArIDEpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIEFGRV9QTExfQ1RSTCArIDEsICh0bXB1MWIgfCBCSVQoMCkpKTsKKwltZGVsYXkoMSk7CisKKwkvKiBSZWxlYXNlIGlzb2xhdGlvbiBBRkUgUExMICYgTUQgKi8KKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfU1lTX0lTT19DVFJMLCAweEE2KTsKKworCS8qIEVuYWJsZSBNQUMgY2xvY2sgKi8KKwl0bXB1MmIgPSBydGxfcmVhZF93b3JkKHJ0bHByaXYsIFNZU19DTEtSKTsKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBTWVNfQ0xLUiwgKHRtcHUyYiB8IEJJVCgxMikgfCBCSVQoMTEpKSk7CisKKwkvKiBFbmFibGUgQ29yZSBkaWdpdGFsIGFuZCBlbmFibGUgSU9SRUcgUi9XICovCisJdG1wdTJiID0gcnRsX3JlYWRfd29yZChydGxwcml2LCBSRUdfU1lTX0ZVTkNfRU4pOworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19TWVNfRlVOQ19FTiwgKHRtcHUyYiB8IEJJVCgxMSkpKTsKKworCXRtcHUxYiA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUkVHX1NZU19GVU5DX0VOICsgMSk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1NZU19GVU5DX0VOICsgMSwgdG1wdTFiICYgfihCSVQoNykpKTsKKworCS8qIGVuYWJsZSBSRUdfRU4gKi8KKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfU1lTX0ZVTkNfRU4sICh0bXB1MmIgfCBCSVQoMTEpIHwgQklUKDE1KSkpOworCisJLyogU3dpdGNoIHRoZSBjb250cm9sIHBhdGguICovCisJdG1wdTJiID0gcnRsX3JlYWRfd29yZChydGxwcml2LCBTWVNfQ0xLUik7CisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgU1lTX0NMS1IsICh0bXB1MmIgJiAofkJJVCgyKSkpKTsKKworCXRtcHUxYiA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgKFNZU19DTEtSICsgMSkpOworCXRtcHUxYiA9ICgodG1wdTFiIHwgQklUKDcpKSAmICh+QklUKDYpKSk7CisJaWYgKCFfcnRsOTJjZV9oYWxzZXRfc3lzY2xrKGh3LCB0bXB1MWIpKQorCQlyZXR1cm47IC8qIFNldCBmYWlsZWQsIHJldHVybiB0byBwcmV2ZW50IGhhbmcuICovCisKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBDTURSLCAweDA3RkMpOworCisJLyogTUggV2UgbXVzdCBlbmFibGUgdGhlIHNlY3Rpb24gb2YgY29kZSB0byBwcmV2ZW50IGxvYWQgSU1FTSBmYWlsLiAqLworCS8qIExvYWQgTUFDIHJlZ2lzdGVyIGZyb20gV01BYyB0ZW1wb3JhcmlseSBXZSBzaW11bGF0ZSBtYWNyZWcuICovCisJLyogdHh0IEhXIHdpbGwgcHJvdmlkZSBNQUMgdHh0IGxhdGVyICAqLworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4NiwgMHgzMCk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHg0OSwgMHhmMCk7CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCAweDRiLCAweDgxKTsKKworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4YjUsIDB4MjEpOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHhkYywgMHhmZik7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHhkZCwgMHhmZik7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHhkZSwgMHhmZik7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHhkZiwgMHhmZik7CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCAweDExYSwgMHgwMCk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHgxMWIsIDB4MDApOworCisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIElOSU1DU19TRUwgKyBpLCAweDFiKTsKKworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4MjM2LCAweGZmKTsKKworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4NTAzLCAweDIyKTsKKworCWlmIChwcHNjLT5zdXBwb3J0X2FzcG0gJiYgIXBwc2MtPnN1cHBvcnRfYmFja2Rvb3IpCisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4NTYwLCAweDQwKTsKKwllbHNlCisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4NTYwLCAweDAwKTsKKworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIERCR19QT1JULCAweDkxKTsKKworCS8qIFNldCBSWCBEZXNjIEFkZHJlc3MgKi8KKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkRRREEsIHJ0bHBjaS0+cnhfcmluZ1tSWF9NUERVX1FVRVVFXS5kbWEpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSQ0RBLCBydGxwY2ktPnJ4X3JpbmdbUlhfQ01EX1FVRVVFXS5kbWEpOworCisJLyogU2V0IFRYIERlc2MgQWRkcmVzcyAqLworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBUQktEQSwgcnRscGNpLT50eF9yaW5nW0JLX1FVRVVFXS5kbWEpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBUQkVEQSwgcnRscGNpLT50eF9yaW5nW0JFX1FVRVVFXS5kbWEpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBUVklEQSwgcnRscGNpLT50eF9yaW5nW1ZJX1FVRVVFXS5kbWEpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBUVk9EQSwgcnRscGNpLT50eF9yaW5nW1ZPX1FVRVVFXS5kbWEpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBUQkRBLCBydGxwY2ktPnR4X3JpbmdbQkVBQ09OX1FVRVVFXS5kbWEpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBUQ0RBLCBydGxwY2ktPnR4X3JpbmdbVFhDTURfUVVFVUVdLmRtYSk7CisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFRNREEsIHJ0bHBjaS0+dHhfcmluZ1tNR05UX1FVRVVFXS5kbWEpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBUSFBEQSwgcnRscGNpLT50eF9yaW5nW0hJR0hfUVVFVUVdLmRtYSk7CisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIEhEQSwgcnRscGNpLT50eF9yaW5nW0hDQ0FfUVVFVUVdLmRtYSk7CisKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBDTURSLCAweDM3RkMpOworCisJLyogVG8gbWFrZSBzdXJlIHRoYXQgVHhETUEgY2FuIHJlYWR5IHRvIGRvd25sb2FkIEZXLiAqLworCS8qIFdlIHNob3VsZCByZXNldCBUeERNQSBpZiBJTUVNIFJQVCB3YXMgbm90IHJlYWR5LiAqLworCWRvIHsKKwkJdG1wdTFiID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBUQ1IpOworCQlpZiAoKHRtcHUxYiAmIFRYRE1BX0lOSVRfVkFMVUUpID09IFRYRE1BX0lOSVRfVkFMVUUpCisJCQlicmVhazsKKworCQl1ZGVsYXkoNSk7CisJfSB3aGlsZSAocG9sbGluZ2NudC0tKTsKKworCWlmIChwb2xsaW5nY250IDw9IDApIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoIlBvbGxpbmcgVFhETUFfSU5JVF9WQUxVRSAiCisJCQkgInRpbWVvdXQhISBDdXJyZW50IFRDUiglI3gpXG4iLCB0bXB1MWIpKTsKKwkJdG1wdTFiID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBDTURSKTsKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgQ01EUiwgdG1wdTFiICYgKH5UWERNQV9FTikpOworCQl1ZGVsYXkoMik7CisJCS8qIFJlc2V0IFR4RE1BICovCisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIENNRFIsIHRtcHUxYiB8IFRYRE1BX0VOKTsKKwl9CisKKwkvKiBBZnRlciBNQUNJTyByZXNldCx3ZSBtdXN0IHJlZnJlc2ggTEVEIHN0YXRlLiAqLworCWlmICgocHBzYy0+cmZvZmZfcmVhc29uID09IFJGX0NIQU5HRV9CWV9JUFMpIHx8CisJICAgKHBwc2MtPnJmb2ZmX3JlYXNvbiA9PSAwKSkgeworCQlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOworCQlzdHJ1Y3QgcnRsX2xlZCAqcExlZDAgPSAmKHBjaXByaXYtPmxlZGN0bC5zd19sZWQwKTsKKwkJZW51bSByZl9wd3JzdGF0ZSByZnB3cl9zdGF0ZV90b3NldDsKKwkJcmZwd3Jfc3RhdGVfdG9zZXQgPSBfcnRsOTJzZV9yZl9vbm9mZl9kZXRlY3QoaHcpOworCisJCWlmIChyZnB3cl9zdGF0ZV90b3NldCA9PSBFUkZPTikKKwkJCXJ0bDkyc2Vfc3dfbGVkX29uKGh3LCBwTGVkMCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBfcnRsOTJzZV9tYWNjb25maWdfYWZ0ZXJfZndkb3dubG9hZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX2VmdXNlICpydGxlZnVzZSA9IHJ0bF9lZnVzZShydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJdTggaTsKKwl1MTYgdG1wdTJiOworCisJLyogMS4gU3lzdGVtIENvbmZpZ3VyZSBSZWdpc3RlciAoT2Zmc2V0OiAweDAwMDAgLSAweDAwM0YpICovCisKKwkvKiAyLiBDb21tYW5kIENvbnRyb2wgUmVnaXN0ZXIgKE9mZnNldDogMHgwMDQwIC0gMHgwMDRGKSAqLworCS8qIFR1cm4gb24gMHg0MCBDb21tYW5kIHJlZ2lzdGVyICovCisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgQ01EUiwgKEJCUlNUTiB8IEJCX0dMQl9SU1ROIHwKKwkJCVNDSEVEVUxFX0VOIHwgTUFDUlhFTiB8IE1BQ1RYRU4gfCBERE1BX0VOIHwgRlcySFdfRU4gfAorCQkJUlhETUFfRU4gfCBUWERNQV9FTiB8IEhDSV9SWERNQV9FTiB8IEhDSV9UWERNQV9FTikpOworCisJLyogU2V0IFRDUiBUWCBETUEgcHJlIDIgRlVMTCBlbmFibGUgYml0CSovCisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFRDUiwgcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgVENSKSB8CisJCQlUWERNQVBSRTJGVUxMKTsKKworCS8qIFNldCBSQ1IJKi8KKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkNSLCBydGxwY2ktPnJlY2VpdmVfY29uZmlnKTsKKworCS8qIDMuIE1BQ0lEIFNldHRpbmcgUmVnaXN0ZXIgKE9mZnNldDogMHgwMDUwIC0gMHgwMDdGKSAqLworCisJLyogNC4gVGltaW5nIENvbnRyb2wgUmVnaXN0ZXIgIChPZmZzZXQ6IDB4MDA4MCAtIDB4MDA5RikgKi8KKwkvKiBTZXQgQ0NLL09GRE0gU0lGUyAqLworCS8qIENDSyBTSUZTIHNoYWxsIGFsd2F5cyBiZSAxMHVzLiAqLworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFNJRlNfQ0NLLCAweDBhMGEpOworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFNJRlNfT0ZETSwgMHgxMDEwKTsKKworCS8qIFNldCBBY2tUaW1lb3V0ICovCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgQUNLX1RJTUVPVVQsIDB4NDApOworCisJLyogQmVhY29uIHJlbGF0ZWQgKi8KKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBCQ05fSU5URVJWQUwsIDEwMCk7CisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgQVRJTVdORCwgMik7CisKKwkvKiA1LiBGSUZPIENvbnRyb2wgUmVnaXN0ZXIgKE9mZnNldDogMHgwMEEwIC0gMHgwMTVGKSAqLworCS8qIDUuMSBJbml0aWFsaXplIE51bWJlciBvZiBSZXNlcnZlZCBQYWdlcyBpbiBGaXJtd2FyZSBRdWV1ZSAqLworCS8qIEZpcm13YXJlIGFsbG9jYXRlIG5vdywgYXNzb2NpYXRlIHdpdGggRlcgaW50ZXJuYWwgc2V0dGluZy4hISEgKi8KKworCS8qIDUuMiBTZXR0aW5nIFRYL1JYIHBhZ2Ugc2l6ZSAwLzEvMi8zLzQ9NjQvMTI4LzI1Ni81MTIvMTAyNCAqLworCS8qIDUuMyBTZXQgZHJpdmVyIGluZm8sIHdlIG9ubHkgYWNjZXB0IFBIWSBzdGF0dXMgbm93LiAqLworCS8qIDUuNCBTZXQgUlhETUEgYXJiaXRyYXRpb24gdG8gY29udHJvbCBSWERNQS9NQUMvRlcgUi9XIGZvciBSWEZJRk8gICovCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUlhETUEsIHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUlhETUEpIHwgQklUKDYpKTsKKworCS8qIDYuIEFkYXB0aXZlIENvbnRyb2wgUmVnaXN0ZXIgIChPZmZzZXQ6IDB4MDE2MCAtIDB4MDFDRikgKi8KKwkvKiBTZXQgUlJTUiB0byBhbGwgbGVnYWN5IHJhdGUgYW5kIEhUIHJhdGUKKwkgKiBDQ0sgcmF0ZSBpcyBzdXBwb3J0ZWQgYnkgZGVmYXVsdC4KKwkgKiBDQ0sgcmF0ZSB3aWxsIGJlIGZpbHRlcmVkIG91dCBvbmx5IHdoZW4gYXNzb2NpYXRlZAorCSAqIEFQIGRvZXMgbm90IHN1cHBvcnQgaXQuCisJICogT25seSBlbmFibGUgQUNLIHJhdGUgdG8gT0ZETSAyNE0KKwkgKiBEaXNhYmxlIFJSU1IgZm9yIENDSyByYXRlIGluIEEtQ3V0CSovCisKKwlpZiAocnRsaGFsLT52ZXJzaW9uID09IFZFUlNJT05fODE5MlNfQUNVVCkKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUlJTUiwgMHhmMCk7CisJZWxzZSBpZiAocnRsaGFsLT52ZXJzaW9uID09IFZFUlNJT05fODE5MlNfQkNVVCkKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUlJTUiwgMHhmZik7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUlJTUiArIDEsIDB4MDEpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJSU1IgKyAyLCAweDAwKTsKKworCS8qIEEtQ3V0IElDIGRvIG5vdCBzdXBwb3J0IENDSyByYXRlLiBXZSBmb3JiaWQgQVJGUiB0byAqLworCS8qIGZhbGxiYWNrIHRvIENDSyByYXRlICovCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQkvKkRpc2FibGUgUlJTUiBmb3IgQ0NLIHJhdGUgaW4gQS1DdXQgKi8KKwkJaWYgKHJ0bGhhbC0+dmVyc2lvbiA9PSBWRVJTSU9OXzgxOTJTX0FDVVQpCisJCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgQVJGUjAgKyBpICogNCwgMHgxZjBmZjBmMCk7CisJfQorCisJLyogRGlmZmVyZW50IHJhdGUgdXNlIGRpZmZlcmVudCBBTVBEVSBzaXplICovCisJLyogTUNTMzIvIE1DUzE1X1NHIHVzZSBtYXggQU1QRFUgc2l6ZSAxNSoyPTMwSyAqLworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIEFHR0xFTl9MTVRfSCwgMHgwZik7CisJLyogTUNTMC8xLzIvMyB1c2UgbWF4IEFNUERVIHNpemUgNCoyPThLICovCisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgQUdHTEVOX0xNVF9MLCAweDc0NDIpOworCS8qIE1DUzQvNSB1c2UgbWF4IEFNUERVIHNpemUgOCoyPTE2SyA2LzcgdXNlIDEwKjI9MjBLICovCisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgQUdHTEVOX0xNVF9MICsgMiwgMHhkZGQ3KTsKKwkvKiBNQ1M4LzkgdXNlIG1heCBBTVBEVSBzaXplIDgqMj0xNksgMTAvMTEgdXNlIDEwKjI9MjBLICovCisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgQUdHTEVOX0xNVF9MICsgNCwgMHhkNzcyKTsKKwkvKiBNQ1MxMi8xMy8xNC8xNSB1c2UgbWF4IEFNUERVIHNpemUgMTUqMj0zMEsgKi8KKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBBR0dMRU5fTE1UX0wgKyA2LCAweGZmZmQpOworCisJLyogU2V0IERhdGEgLyBSZXNwb25zZSBhdXRvIHJhdGUgZmFsbGFjayByZXRyeSBjb3VudCAqLworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBEQVJGUkMsIDB4MDQwMTAwMDApOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBEQVJGUkMgKyA0LCAweDA5MDcwNjA1KTsKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkFSRlJDLCAweDA0MDEwMDAwKTsKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkFSRlJDICsgNCwgMHgwOTA3MDYwNSk7CisKKwkvKiA3LiBFRENBIFNldHRpbmcgUmVnaXN0ZXIgKE9mZnNldDogMHgwMUQwIC0gMHgwMUZGKSAqLworCS8qIFNldCBhbGwgcmF0ZSB0byBzdXBwb3J0IFNHICovCisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgU0dfUkFURSwgMHhGRkZGKTsKKworCS8qIDguIFdNQUMsIEJBLCBhbmQgQ0NYIHJlbGF0ZWQgUmVnaXN0ZXIgKE9mZnNldDogMHgwMjAwIC0gMHgwMjNGKSAqLworCS8qIFNldCBOQVYgcHJvdGVjdGlvbiBsZW5ndGggKi8KKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBOQVZfUFJPVF9MRU4sIDB4MDA4MCk7CisJLyogQ0YtRU5EIFRocmVzaG9sZCAqLworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIENGRU5EX1RILCAweEZGKTsKKwkvKiBTZXQgQU1QRFUgbWluaW11bSBzcGFjZSAqLworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIEFNUERVX01JTl9TUEFDRSwgMHgwNyk7CisJLyogU2V0IFRYT1Agc3RhbGwgY29udHJvbCBmb3Igc2V2ZXJhbCBxdWV1ZS9ISS9CQ04vTUdULyAqLworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFRYT1BfU1RBTExfQ1RSTCwgMHgwMCk7CisKKwkvKiA5LiBTZWN1cml0eSBDb250cm9sIFJlZ2lzdGVyIChPZmZzZXQ6IDB4MDI0MCAtIDB4MDI1RikgKi8KKwkvKiAxMC4gUG93ZXIgU2F2ZSBDb250cm9sIFJlZ2lzdGVyIChPZmZzZXQ6IDB4MDI2MCAtIDB4MDJERikgKi8KKwkvKiAxMS4gR2VuZXJhbCBQdXJwb3NlIFJlZ2lzdGVyIChPZmZzZXQ6IDB4MDJFMCAtIDB4MDJGRikgKi8KKwkvKiAxMi4gSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIChPZmZzZXQ6IDB4MDMwMCAtIDB4MDMwRikgKi8KKwkvKiAxMy4gVGVzdCBNb2RlIGFuZCBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChPZmZzZXQ6IDB4MDMxMCAtIDB4MDM0RikgKi8KKworCS8qIDE0LiBTZXQgZHJpdmVyIGluZm8sIHdlIG9ubHkgYWNjZXB0IFBIWSBzdGF0dXMgbm93LiAqLworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJYRFJWSU5GT19TWiwgNCk7CisKKwkvKiAxNS4gRm9yIEVFUFJPTSBSL1cgV29ya2Fyb3VuZCAqLworCS8qIDE2LiBGb3IgRUZVU0UgdG8gc2hhcmUgUkVHX1NZU19GVU5DX0VOIHdpdGggRUVQUk9NISEhICovCisJdG1wdTJiID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfU1lTX0ZVTkNfRU4pOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TWVNfRlVOQ19FTiwgdG1wdTJiIHwgQklUKDEzKSk7CisJdG1wdTJiID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfU1lTX0lTT19DVFJMKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfU1lTX0lTT19DVFJMLCB0bXB1MmIgJiAofkJJVCg4KSkpOworCisJLyogMTcuIEZvciBFRlVTRSAqLworCS8qIFdlIG1heSBSL1cgRUZVU0UgaW4gRUVQUk9NIG1vZGUgKi8KKwlpZiAocnRsZWZ1c2UtPmVwcm9tdHlwZSA9PSBFRVBST01fQk9PVF9FRlVTRSkgeworCQl1OAl0ZW1wdmFsOworCisJCXRlbXB2YWwgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19TWVNfSVNPX0NUUkwgKyAxKTsKKwkJdGVtcHZhbCAmPSAweEZFOworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfU1lTX0lTT19DVFJMICsgMSwgdGVtcHZhbCk7CisKKwkJLyogQ2hhbmdlIFByb2dyYW0gdGltaW5nICovCisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19FRlVTRV9DVFJMICsgMywgMHg3Mik7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0RNRVNHLCAoIkVGVVNFIENPTkZJRyBPS1xuIikpOworCX0KKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0RNRVNHLCAoIk9LXG4iKSk7CisKK30KKworc3RhdGljIHZvaWQgX3J0bDkyc2VfaHdfY29uZmlndXJlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKworCXU4IHJlZ19id19vcG1vZGUgPSAwOworCXUzMiByZWdfcmF0ciA9IDAsIHJlZ19ycnNyID0gMDsKKwl1OCByZWd0bXAgPSAwOworCisJcmVnX2J3X29wbW9kZSA9IEJXX09QTU9ERV8yME1IWjsKKwlyZWdfcmF0ciA9IFJBVEVfQUxMX0NDSyB8IFJBVEVfQUxMX09GRE1fQUcgfCBSQVRFX0FMTF9PRkRNXzFTUyB8CisJCQkJUkFURV9BTExfT0ZETV8yU1M7CisJcmVnX3Jyc3IgPSBSQVRFX0FMTF9DQ0sgfCBSQVRFX0FMTF9PRkRNX0FHOworCisJcmVndG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBJTklSVFNNQ1NfU0VMKTsKKwlyZWdfcnJzciA9ICgocmVnX3Jyc3IgJiAweDAwMGZmZmZmKSA8PCA4KSB8IHJlZ3RtcDsKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgSU5JUlRTTUNTX1NFTCwgcmVnX3Jyc3IpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIEJXX09QTU9ERSwgcmVnX2J3X29wbW9kZSk7CisKKwkvKiBTZXQgUmV0cnkgTGltaXQgaGVyZSAqLworCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfUkVUUllfTElNSVQsCisJCQkodTggKikoJnJ0bHBjaS0+c2hvcnRyZXRyeV9saW1pdCkpOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgTUxULCAweDhmKTsKKworCS8qIEZvciBNaW4gU3BhY2luZyBjb25maWd1cmF0aW9uLiAqLworCXN3aXRjaCAocnRscGh5LT5yZl90eXBlKSB7CisJY2FzZSBSRl8xVDJSOgorCWNhc2UgUkZfMVQxUjoKKwkJcnRsaGFsLT5taW5zcGFjZV9jZmcgPSAoTUFYX01TU19ERU5TSVRZXzFUIDw8IDMpOworCQlicmVhazsKKwljYXNlIFJGXzJUMlI6CisJY2FzZSBSRl8yVDJSX0dSRUVOOgorCQlydGxoYWwtPm1pbnNwYWNlX2NmZyA9IChNQVhfTVNTX0RFTlNJVFlfMlQgPDwgMyk7CisJCWJyZWFrOworCX0KKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBBTVBEVV9NSU5fU1BBQ0UsIHJ0bGhhbC0+bWluc3BhY2VfY2ZnKTsKK30KKworaW50IHJ0bDkyc2VfaHdfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKKwl1OCB0bXBfYnl0ZSA9IDA7CisKKwlib29sIHJ0c3RhdHVzID0gdHJ1ZTsKKwl1OCB0bXBfdTFiOworCWludCBlcnIgPSBmYWxzZTsKKwl1OCBpOworCWludCB3ZGNhcHJhX2FkZFtdID0geworCQlFRENBUEFSQV9CRSwgRURDQVBBUkFfQkssCisJCUVEQ0FQQVJBX1ZJLCBFRENBUEFSQV9WT307CisJdTggc2Vjcl92YWx1ZSA9IDB4MDsKKworCXJ0bHBjaS0+YmVpbmdfaW5pdF9hZGFwdGVyID0gdHJ1ZTsKKworCXJ0bHByaXYtPmludGZfb3BzLT5kaXNhYmxlX2FzcG0oaHcpOworCisJLyogMS4gTUFDIEluaXRpYWxpemUgKi8KKwkvKiBCZWZvcmUgRlcgZG93bmxvYWQsIHdlIGhhdmUgdG8gc2V0IHNvbWUgTUFDIHJlZ2lzdGVyICovCisJX3J0bDkyc2VfbWFjY29uZmlnX2JlZm9yZV9md2Rvd25sb2FkKGh3KTsKKworCXJ0bGhhbC0+dmVyc2lvbiA9IChlbnVtIHZlcnNpb25fODE5MnMpKChydGxfcmVhZF9kd29yZChydGxwcml2LAorCQkJUE1DX0ZTTSkgPj4gMTYpICYgMHhGKTsKKworCXJ0bDgxOTJzZV9ncGlvYml0M19jZmdfaW5wdXRtb2RlKGh3KTsKKworCS8qIDIuIGRvd25sb2FkIGZpcm13YXJlICovCisJcnRzdGF0dXMgPSBydGw5MnNfZG93bmxvYWRfZncoaHcpOworCWlmICghcnRzdGF0dXMpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19XQVJOSU5HLAorCQkJICgiRmFpbGVkIHRvIGRvd25sb2FkIEZXLiAiCisJCQkgIkluaXQgSFcgd2l0aG91dCBGVyBub3cuLiwgUGxlYXNlIGNvcHkgRlcgaW50byIKKwkJCSAiL2xpYi9maXJtd2FyZS9ydGx3aWZpXG4iKSk7CisJCXJ0bGhhbC0+ZndfcmVhZHkgPSBmYWxzZTsKKwl9IGVsc2UgeworCQlydGxoYWwtPmZ3X3JlYWR5ID0gdHJ1ZTsKKwl9CisKKwkvKiBBZnRlciBGVyBkb3dubG9hZCwgd2UgaGF2ZSB0byByZXNldCBNQUMgcmVnaXN0ZXIgKi8KKwlfcnRsOTJzZV9tYWNjb25maWdfYWZ0ZXJfZndkb3dubG9hZChodyk7CisKKwkvKlJldHJpZXZlIGRlZmF1bHQgRlcgQ21kIElPIG1hcC4gKi8KKwlydGxoYWwtPmZ3Y21kX2lvbWFwID0JcnRsX3JlYWRfd29yZChydGxwcml2LCBMQlVTX01PTl9BRERSKTsKKwlydGxoYWwtPmZ3Y21kX2lvcGFyYW0gPSBydGxfcmVhZF9kd29yZChydGxwcml2LCBMQlVTX0FERFJfTUFTSyk7CisKKwkvKiAzLiBJbml0aWFsaXplIE1BQy9QSFkgQ29uZmlnIGJ5IE1BQ1BIWV9yZWcudHh0ICovCisJaWYgKHJ0bDkyc19waHlfbWFjX2NvbmZpZyhodykgIT0gdHJ1ZSkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLCAoIk1BQyBDb25maWcgZmFpbGVkXG4iKSk7CisJCXJldHVybiBydHN0YXR1czsKKwl9CisKKwkvKiBNYWtlIHN1cmUgQkIvUkYgd3JpdGUgT0suIFdlIHNob3VsZCBwcmV2ZW50IGVudGVyIElQUy4gcmFkaW8gb2ZmLiAqLworCS8qIFdlIG11c3Qgc2V0IGZsYWcgYXZvaWQgQkIvUkYgY29uZmlnIHBlcmlvZCBsYXRlciEhICovCisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIENNRFIsIDB4MzdGQyk7CisKKwkvKiA0LiBJbml0aWFsaXplIEJCIEFmdGVyIE1BQyBDb25maWcgUEhZX3JlZy50eHQsIEFHQ19UYWIudHh0ICovCisJaWYgKHJ0bDkyc19waHlfYmJfY29uZmlnKGh3KSAhPSB0cnVlKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0VNRVJHLCAoIkJCIENvbmZpZyBmYWlsZWRcbiIpKTsKKwkJcmV0dXJuIHJ0c3RhdHVzOworCX0KKworCS8qIDUuIEluaXRpYWlsemUgUkYgUkFJT19BLnR4dCBSRiBSQUlPX0IudHh0ICovCisJLyogQmVmb3JlIGluaXRhbGl6aW5nIFJGLiBXZSBjYW4gbm90IHVzZSBGVyB0byBkbyBSRi1SL1cuICovCisKKwlydGxwaHktPnJmX21vZGUgPSBSRl9PUF9CWV9TV18zV0lSRTsKKworCS8qIFJGIFBvd2VyIFNhdmUgKi8KKyNpZiAwCisJLyogSC9XIG9yIFMvVyBSRiBPRkYgYmVmb3JlIHNsZWVwLiAqLworCWlmIChydGxwcml2LT5wc2MucmZvZmZfcmVhc29uID4gUkZfQ0hBTkdFX0JZX1BTKSB7CisJCXUzMiByZm9mZnJlYXNvbiA9IHJ0bHByaXYtPnBzYy5yZm9mZl9yZWFzb247CisKKwkJcnRscHJpdi0+cHNjLnJmb2ZmX3JlYXNvbiA9IFJGX0NIQU5HRV9CWV9JTklUOworCQlydGxwcml2LT5wc2MucmZwd3Jfc3RhdGUgPSBFUkZPTjsKKwkJcnRsX3BzX3NldF9yZl9zdGF0ZShodywgRVJGT0ZGLCByZm9mZnJlYXNvbiwgdHJ1ZSk7CisJfSBlbHNlIHsKKwkJLyogZ3BpbyByYWRpbyBvbi9vZmYgaXMgb3V0IG9mIGFkYXB0ZXIgc3RhcnQgKi8KKwkJaWYgKHJ0bHByaXYtPnBzYy5od3JhZGlvb2ZmID09IGZhbHNlKSB7CisJCQlydGxwcml2LT5wc2MucmZwd3Jfc3RhdGUgPSBFUkZPTjsKKwkJCXJ0bHByaXYtPnBzYy5yZm9mZl9yZWFzb24gPSAwOworCQl9CisJfQorI2VuZGlmCisKKwkvKiBCZWZvcmUgUkYtUi9XIHdlIG11c3QgZXhlY3V0ZSB0aGUgSU8gZnJvbSBTY290dCdzIHN1Z2dlc3Rpb24uICovCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgQUZFX1hUQUxfQ1RSTCArIDEsIDB4REIpOworCWlmIChydGxoYWwtPnZlcnNpb24gPT0gVkVSU0lPTl84MTkyU19BQ1VUKQorCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBTUFMxX0NUUkwgKyAzLCAweDA3KTsKKwllbHNlCisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJGX0NUUkwsIDB4MDcpOworCisJaWYgKHJ0bDkyc19waHlfcmZfY29uZmlnKGh3KSAhPSB0cnVlKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0RNRVNHLCAoIlJGIENvbmZpZyBmYWlsZWRcbiIpKTsKKwkJcmV0dXJuIHJ0c3RhdHVzOworCX0KKworCS8qIEFmdGVyIHJlYWQgcHJlZGVmaW5lZCBUWFQsIHdlIG11c3Qgc2V0IEJCL01BQy9SRgorCSAqIHJlZ2lzdGVyIGFzIG91ciByZXF1aXJlbWVudCAqLworCisJcnRscGh5LT5yZnJlZ19jaG5sdmFsWzBdID0gcnRsOTJzX3BoeV9xdWVyeV9yZl9yZWcoaHcsCisJCQkJCQkJICAgKGVudW0gcmFkaW9fcGF0aCkwLAorCQkJCQkJCSAgIFJGX0NITkxCVywKKwkJCQkJCQkgICBSRlJFR19PRkZTRVRfTUFTSyk7CisJcnRscGh5LT5yZnJlZ19jaG5sdmFsWzFdID0gcnRsOTJzX3BoeV9xdWVyeV9yZl9yZWcoaHcsCisJCQkJCQkJICAgKGVudW0gcmFkaW9fcGF0aCkxLAorCQkJCQkJCSAgIFJGX0NITkxCVywKKwkJCQkJCQkgICBSRlJFR19PRkZTRVRfTUFTSyk7CisKKwkvKi0tLS0gU2V0IENDSyBhbmQgT0ZETSBCbG9jayAiT04iLS0tLSovCisJcnRsX3NldF9iYnJlZyhodywgUkZQR0EwX1JGTU9ELCBCQ0NLRU4sIDB4MSk7CisJcnRsX3NldF9iYnJlZyhodywgUkZQR0EwX1JGTU9ELCBCT0ZETUVOLCAweDEpOworCisJLyozIFNldCBIYXJkd2FyZShEbyBub3RoaW5nIG5vdykgKi8KKwlfcnRsOTJzZV9od19jb25maWd1cmUoaHcpOworCisJLyogUmVhZCBFRVBST00gVFggcG93ZXIgaW5kZXggYW5kIFBIWV9SRUdfUEcudHh0IHRvIGNhcHR1cmUgY29ycmVjdCAqLworCS8qIFRYIHBvd2VyIGluZGV4IGZvciBkaWZmZXJlbnQgcmF0ZSBzZXQuICovCisJLyogR2V0IG9yaWdpbmFsIGh3IHJlZyB2YWx1ZXMgKi8KKwlydGw5MnNfcGh5X2dldF9od19yZWdfb3JpZ2luYWx2YWx1ZShodyk7CisJLyogV3JpdGUgY29ycmVjdCB0eCBwb3dlciBpbmRleCAqLworCXJ0bDkyc19waHlfc2V0X3R4cG93ZXIoaHcsIHJ0bHBoeS0+Y3VycmVudF9jaGFubmVsKTsKKworCS8qIFdlIG11c3Qgc2V0IE1BQyBhZGRyZXNzIGFmdGVyIGZpcm13YXJlIGRvd25sb2FkLiAqLworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIE1BQ0lEUjAgKyBpLCBydGxlZnVzZS0+ZGV2X2FkZHJbaV0pOworCisJLyogRUVQUk9NIFIvVyB3b3JrYXJvdW5kICovCisJdG1wX3UxYiA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgTUFDX1BJTk1VWF9DRkcpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIE1BQ19QSU5NVVhfQ0ZHLCB0bXBfdTFiICYgKH5CSVQoMykpKTsKKworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4NGQsIDB4MCk7CisKKwlpZiAoaGFsX2dldF9maXJtd2FyZXZlcnNpb24ocnRscHJpdikgPj0gMHg0OSkgeworCQl0bXBfYnl0ZSA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgRldfUlNWRF9QR19DUlRMKSAmICh+QklUKDQpKTsKKwkJdG1wX2J5dGUgPSB0bXBfYnl0ZSB8IEJJVCg1KTsKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgRldfUlNWRF9QR19DUlRMLCB0bXBfYnl0ZSk7CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBUWERFU0NfTVNLLCAweEZGRkZDRkZGKTsKKwl9CisKKwkvKiBXZSBlbmFibGUgaGlnaCBwb3dlciBhbmQgUkEgcmVsYXRlZCBtZWNoYW5pc20gYWZ0ZXIgTklDCisJICogaW5pdGlhbGl6ZWQuICovCisJcnRsOTJzX3BoeV9zZXRfZndfY21kKGh3LCBGV19DTURfUkFfSU5JVCk7CisKKwkvKiBBZGQgdG8gcHJldmVudCBBU1BNIGJ1Zy4gKi8KKwkvKiBBbHdheXMgZW5hYmxlIGhzdCBhbmQgTklDIGNsb2NrIHJlcXVlc3QuICovCisJcnRsOTJzX3BoeV9zd2l0Y2hfZXBoeV9wYXJhbWV0ZXIoaHcpOworCisJLyogU2VjdXJpdHkgcmVsYXRlZAorCSAqIDEuIENsZWFyIGFsbCBIL1cga2V5cy4KKwkgKiAyLiBFbmFibGUgSC9XIGVuY3J5cHRpb24vZGVjcnlwdGlvbi4gKi8KKwlydGxfY2FtX3Jlc2V0X2FsbF9lbnRyeShodyk7CisJc2Vjcl92YWx1ZSB8PSBTQ1JfVFhFTkNFTkFCTEU7CisJc2Vjcl92YWx1ZSB8PSBTQ1JfUlhFTkNFTkFCTEU7CisJc2Vjcl92YWx1ZSB8PSBTQ1JfTk9TS01DOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TRUNSLCBzZWNyX3ZhbHVlKTsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCB3ZGNhcHJhX2FkZFtpXSwgMHg1ZTQzMjIpOworCisJaWYgKHJ0bHBoeS0+cmZfdHlwZSA9PSBSRl8xVDJSKSB7CisJCWJvb2wgbXJjMnNldCA9IHRydWU7CisJCS8qIFR1cm4gb24gQi1QYXRoICovCisJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfTVJDLCAodTggKikmbXJjMnNldCk7CisJfQorCisJcnRscHJpdi0+Y2ZnLT5vcHMtPmxlZF9jb250cm9sKGh3LCBMRURfQ1RMX1BPV0VSX09OKTsKKwlydGw5MnNfZG1faW5pdChodyk7CisJcnRscGNpLT5iZWluZ19pbml0X2FkYXB0ZXIgPSBmYWxzZTsKKworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgcnRsOTJzZV9zZXRfbWFjX2FkZHIoc3RydWN0IHJ0bF9pbyAqaW8sIGNvbnN0IHU4ICogYWRkcikKK3sKK30KKwordm9pZCBydGw5MnNlX3NldF9jaGVja19ic3NpZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBjaGVja19ic3NpZCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKwl1MzIgcmVnX3JjciA9IHJ0bHBjaS0+cmVjZWl2ZV9jb25maWc7CisKKwlpZiAocnRscHJpdi0+cHNjLnJmcHdyX3N0YXRlICE9IEVSRk9OKQorCQlyZXR1cm47CisKKwlpZiAoY2hlY2tfYnNzaWQgPT0gdHJ1ZSkgeworCQlyZWdfcmNyIHw9IChSQ1JfQ0JTU0lEKTsKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9SQ1IsICh1OCAqKSgmcmVnX3JjcikpOworCX0gZWxzZSBpZiAoY2hlY2tfYnNzaWQgPT0gZmFsc2UpIHsKKwkJcmVnX3JjciAmPSAoflJDUl9DQlNTSUQpOworCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywgSFdfVkFSX1JDUiwgKHU4ICopKCZyZWdfcmNyKSk7CisJfQorCit9CisKK3N0YXRpYyBpbnQgX3J0bDkyc2Vfc2V0X21lZGlhX3N0YXR1cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgIGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTggYnRfbXNyID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBNU1IpOworCWVudW0gbGVkX2N0bF9tb2RlIGxlZGFjdGlvbiA9IExFRF9DVExfTk9fTElOSzsKKwl1MzIgdGVtcDsKKwlidF9tc3IgJj0gfk1TUl9MSU5LX01BU0s7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOgorCQlidF9tc3IgfD0gKE1TUl9MSU5LX05PTkUgPDwgTVNSX0xJTktfU0hJRlQpOworCQlsZWRhY3Rpb24gPSBMRURfQ1RMX0xJTks7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX1RSQUNFLAorCQkJICgiU2V0IE5ldHdvcmsgdHlwZSB0byBOTyBMSU5LIVxuIikpOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQlidF9tc3IgfD0gKE1TUl9MSU5LX0FESE9DIDw8IE1TUl9MSU5LX1NISUZUKTsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfVFJBQ0UsCisJCQkgKCJTZXQgTmV0d29yayB0eXBlIHRvIEFkIEhvYyFcbiIpKTsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQlidF9tc3IgfD0gKE1TUl9MSU5LX01BTkFHRUQgPDwgTVNSX0xJTktfU0hJRlQpOworCQlsZWRhY3Rpb24gPSBMRURfQ1RMX0xJTks7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX1RSQUNFLAorCQkJICgiU2V0IE5ldHdvcmsgdHlwZSB0byBTVEEhXG4iKSk7CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJCWJ0X21zciB8PSAoTVNSX0xJTktfTUFTVEVSIDw8IE1TUl9MSU5LX1NISUZUKTsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfVFJBQ0UsCisJCQkgKCJTZXQgTmV0d29yayB0eXBlIHRvIEFQIVxuIikpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJICgiTmV0d29yayB0eXBlICVkIG5vdCBzdXBwb3J0IVxuIiwgdHlwZSkpOworCQlyZXR1cm4gMTsKKwkJYnJlYWs7CisKKwl9CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCAoTVNSKSwgYnRfbXNyKTsKKworCXRlbXAgPSBydGxfcmVhZF9kd29yZChydGxwcml2LCBUQ1IpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBUQ1IsIHRlbXAgJiAofkJJVCg4KSkpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBUQ1IsIHRlbXAgfCBCSVQoOCkpOworCisKKwlyZXR1cm4gMDsKK30KKworLyogSFdfVkFSX01FRElBX1NUQVRVUyAmIEhXX1ZBUl9DRUNIS19CU1NJRCAqLworaW50IHJ0bDkyc2Vfc2V0X25ldHdvcmtfdHlwZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBubDgwMjExX2lmdHlwZSB0eXBlKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCWlmIChfcnRsOTJzZV9zZXRfbWVkaWFfc3RhdHVzKGh3LCB0eXBlKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKHJ0bHByaXYtPm1hYzgwMjExLmxpbmtfc3RhdGUgPT0gTUFDODAyMTFfTElOS0VEKSB7CisJCWlmICh0eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKQorCQkJcnRsOTJzZV9zZXRfY2hlY2tfYnNzaWQoaHcsIHRydWUpOworCX0gZWxzZSB7CisJCXJ0bDkyc2Vfc2V0X2NoZWNrX2Jzc2lkKGh3LCBmYWxzZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIGRvbid0IHNldCBSRUdfRURDQV9CRV9QQVJBTSBoZXJlIGJlY2F1c2UgbWFjODAyMTEgd2lsbCBzZW5kIHBrdCB3aGVuIHNjYW4gKi8KK3ZvaWQgcnRsOTJzZV9zZXRfcW9zKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgYWNpKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlydGw5MnNfZG1faW5pdF9lZGNhX3R1cmJvKGh3KTsKKworCXN3aXRjaCAoYWNpKSB7CisJY2FzZSBBQzFfQks6CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBFRENBUEFSQV9CSywgMHhhNDRmKTsKKwkJYnJlYWs7CisJY2FzZSBBQzBfQkU6CisJCS8qIHJ0bF93cml0ZV9kd29yZChydGxwcml2LCBFRENBUEFSQV9CRSwgdTRiX2FjX3BhcmFtKTsgKi8KKwkJYnJlYWs7CisJY2FzZSBBQzJfVkk6CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBFRENBUEFSQV9WSSwgMHg1ZTQzMjIpOworCQlicmVhazsKKwljYXNlIEFDM19WTzoKKwkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIEVEQ0FQQVJBX1ZPLCAweDJmMzIyMik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVJUX0FTU0VSVChmYWxzZSwgKCJpbnZhbGlkIGFjaTogJWQgIVxuIiwgYWNpKSk7CisJCWJyZWFrOworCX0KK30KKwordm9pZCBydGw5MnNlX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgSU5UQV9NQVNLLCBydGxwY2ktPmlycV9tYXNrWzBdKTsKKwkvKiBTdXBwb3J0IEJpdCAzMi0zNyhBc3NpZ24gYXMgQml0IDAtNSkgaW50ZXJydXB0IHNldHRpbmcgbm93ICovCisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIElOVEFfTUFTSyArIDQsIHJ0bHBjaS0+aXJxX21hc2tbMV0gJiAweDNGKTsKKworCXJ0bHBjaS0+aXJxX2VuYWJsZWQgPSB0cnVlOworfQorCit2b2lkIHJ0bDkyc2VfZGlzYWJsZV9pbnRlcnJ1cHQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgSU5UQV9NQVNLLCAwKTsKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgSU5UQV9NQVNLICsgNCwgMCk7CisKKwlydGxwY2ktPmlycV9lbmFibGVkID0gZmFsc2U7Cit9CisKKworc3RhdGljIHU4IF9ydGw5MnNfc2V0X3N5c2NsayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggZGF0YSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTggd2FpdGNudCA9IDEwMDsKKwlib29sIHJlc3VsdCA9IGZhbHNlOworCXU4IHRtcDsKKworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFNZU19DTEtSICsgMSwgZGF0YSk7CisKKwkvKiBXYWl0IHRoZSBNQUMgc3luY2hyb25pemVkLiAqLworCXVkZWxheSg0MDApOworCisJLyogQ2hlY2sgaWYgaXQgaXMgc2V0IHJlYWR5LiAqLworCXRtcCA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgU1lTX0NMS1IgKyAxKTsKKwlyZXN1bHQgPSAoKHRtcCAmIEJJVCg3KSkgPT0gKGRhdGEgJiBCSVQoNykpKTsKKworCWlmICgoZGF0YSAmIChCSVQoNikgfCBCSVQoNykpKSA9PSBmYWxzZSkgeworCQl3YWl0Y250ID0gMTAwOworCQl0bXAgPSAwOworCisJCXdoaWxlICgxKSB7CisJCQl3YWl0Y250LS07CisJCQl0bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFNZU19DTEtSICsgMSk7CisKKwkJCWlmICgodG1wICYgQklUKDYpKSkKKwkJCQlicmVhazsKKworCQkJcHJpbnRrKEtFUk5fRVJSICJ3YWl0IGZvciBCSVQoNikgcmV0dXJuIHZhbHVlICV4XG4iLAorCQkJICAgICAgIHRtcCk7CisKKwkJCWlmICh3YWl0Y250ID09IDApCisJCQkJYnJlYWs7CisJCQl1ZGVsYXkoMTApOworCQl9CisKKwkJaWYgKHdhaXRjbnQgPT0gMCkKKwkJCXJlc3VsdCA9IGZhbHNlOworCQllbHNlCisJCQlyZXN1bHQgPSB0cnVlOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MnNfcGh5X3NldF9yZmhhbHQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CisJdTggdTFidG1wOworCisJaWYgKHJ0bGhhbC0+ZHJpdmVyX2dvaW5nMnVubG9hZCkKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHg1NjAsIDB4MCk7CisKKwkvKiBQb3dlciBzYXZlIGZvciBCQi9SRiAqLworCXUxYnRtcCA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgTERPVjEyRF9DVFJMKTsKKwl1MWJ0bXAgfD0gQklUKDApOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIExET1YxMkRfQ1RSTCwgdTFidG1wKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBTUFMxX0NUUkwsIDB4MCk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgVFhQQVVTRSwgMHhGRik7CisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgQ01EUiwgMHg1N0ZDKTsKKwl1ZGVsYXkoMTAwKTsKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBDTURSLCAweDc3RkMpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFBIWV9DQ0EsIDB4MCk7CisJdWRlbGF5KDEwKTsKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBDTURSLCAweDM3RkMpOworCXVkZWxheSgxMCk7CisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgQ01EUiwgMHg3N0ZDKTsKKwl1ZGVsYXkoMTApOworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIENNRFIsIDB4NTdGQyk7CisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgQ01EUiwgMHgwMDAwKTsKKworCWlmIChydGxoYWwtPmRyaXZlcl9nb2luZzJ1bmxvYWQpIHsKKwkJdTFidG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCAoUkVHX1NZU19GVU5DX0VOICsgMSkpOworCQl1MWJ0bXAgJj0gfihCSVQoMCkpOworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfU1lTX0ZVTkNfRU4gKyAxLCB1MWJ0bXApOworCX0KKworCXUxYnRtcCA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgKFNZU19DTEtSICsgMSkpOworCisJLyogQWRkIGRlc2NyaXB0aW9uLiBBZnRlciBzd2l0Y2ggY29udHJvbCBwYXRoLiByZWdpc3RlcgorCSAqIGFmdGVyIHBhZ2UxIHdpbGwgYmUgaW52aXNpYmxlLiBXZSBjYW4gbm90IGRvIGFueSBJTworCSAqIGZvciByZWdpc3Rlcj4weDQwLiBBZnRlciByZXN1bWUmTUFDSU8gcmVzZXQsIHdlIG5lZWQKKwkgKiB0byByZW1lbWJlciBwcmV2aW91cyByZWcgY29udGVudC4gKi8KKwlpZiAodTFidG1wICYgQklUKDcpKSB7CisJCXUxYnRtcCAmPSB+KEJJVCg2KSB8IEJJVCg3KSk7CisJCWlmICghX3J0bDkyc19zZXRfc3lzY2xrKGh3LCB1MWJ0bXApKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIlN3aXRjaCBjdHJsIHBhdGggZmFpbFxuIik7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKiBQb3dlciBzYXZlIGZvciBNQUMgKi8KKwlpZiAocHBzYy0+cmZvZmZfcmVhc29uID09IFJGX0NIQU5HRV9CWV9JUFMgICYmCisJCSFydGxoYWwtPmRyaXZlcl9nb2luZzJ1bmxvYWQpIHsKKwkJLyogZW5hYmxlIExFRCBmdW5jdGlvbiAqLworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCAweDAzLCAweEY5KTsKKwkvKiBTVy9IVyByYWRpbyBvZmYgb3IgaGFsdCBhZGFwdGVyISEgRm9yIGV4YW1wbGUgUzMvUzQgKi8KKwl9IGVsc2UgeworCQkvKiBMRUQgZnVuY3Rpb24gZGlzYWJsZS4gUG93ZXIgcmFuZ2UgaXMgYWJvdXQgOG1BIG5vdy4gKi8KKwkJLyogaWYgd3JpdGUgMHhGMSBkaXNjb25uZXRfcGNpIHBvd2VyCisJCSAqCSBpZmNvbmZpZyB3bGFuMCBkb3duIHBvd2VyIGFyZSBib3RoIGhpZ2ggMzU6NzAgKi8KKwkJLyogaWYgd3JpdGUgb3hGOSBkaXNjb25uZXRfcGNpIHBvd2VyCisJCSAqIGlmY29uZmlnIHdsYW4wIGRvd24gcG93ZXIgYXJlIGJvdGggbG93ICAxMjo0NSovCisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4MDMsIDB4RjkpOworCX0KKworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFNZU19DTEtSICsgMSwgMHg3MCk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgQUZFX1BMTF9DVFJMICsgMSwgMHg2OCk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgIEFGRV9QTExfQ1RSTCwgMHgwMCk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgTERPQTE1X0NUUkwsIDB4MzQpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIEFGRV9YVEFMX0NUUkwsIDB4MEUpOworCVJUX1NFVF9QU19MRVZFTChwcHNjLCBSVF9SRl9PRkZfTEVWTF9IQUxUX05JQyk7CisKK30KKworc3RhdGljIHZvaWQgX3J0bDkyc2VfZ2VuX3JlZnJlc2hsZWRzdGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOworCXN0cnVjdCBydGxfbGVkICpwTGVkMCA9ICYocGNpcHJpdi0+bGVkY3RsLnN3X2xlZDApOworCisJaWYgKHJ0bHBjaS0+dXBfZmlyc3RfdGltZSA9PSAxKQorCQlyZXR1cm47CisKKwlpZiAocnRscHJpdi0+cHNjLnJmb2ZmX3JlYXNvbiA9PSBSRl9DSEFOR0VfQllfSVBTKQorCQlydGw5MnNlX3N3X2xlZF9vbihodywgcExlZDApOworCWVsc2UKKwkJcnRsOTJzZV9zd19sZWRfb2ZmKGh3LCBwTGVkMCk7Cit9CisKKworc3RhdGljIHZvaWQgX3J0bDkyc2VfcG93ZXJfZG9tYWluX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXUxNiB0bXB1MmI7CisJdTggdG1wdTFiOworCisJcnRscHJpdi0+cHNjLnB3cmRvbWFpbl9wcm90ZWN0ID0gdHJ1ZTsKKworCXRtcHUxYiA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgKFNZU19DTEtSICsgMSkpOworCWlmICh0bXB1MWIgJiBCSVQoNykpIHsKKwkJdG1wdTFiICY9IH4oQklUKDYpIHwgQklUKDcpKTsKKwkJaWYgKCFfcnRsOTJzX3NldF9zeXNjbGsoaHcsIHRtcHUxYikpIHsKKwkJCXJ0bHByaXYtPnBzYy5wd3Jkb21haW5fcHJvdGVjdCA9IGZhbHNlOworCQkJcmV0dXJuOworCQl9CisJfQorCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgQUZFX1BMTF9DVFJMLCAweDApOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIExET0ExNV9DVFJMLCAweDM0KTsKKworCS8qIFJlc2V0IE1BQy1JTyBhbmQgQ1BVIGFuZCBDb3JlIERpZ2l0YWwgQklUMTAvMTEvMTUgKi8KKwl0bXB1MWIgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFNZU19GVU5DX0VOICsgMSk7CisKKwkvKiBJZiBJUFMgd2UgbmVlZCB0byB0dXJuIExFRCBvbi4gU28gd2Ugbm90CisJICogbm90IGRpc2FibGUgQklUIDMvNyBvZiByZWczLiAqLworCWlmIChydGxwcml2LT5wc2MucmZvZmZfcmVhc29uICYgKFJGX0NIQU5HRV9CWV9JUFMgfCBSRl9DSEFOR0VfQllfSFcpKQorCQl0bXB1MWIgJj0gMHhGQjsKKwllbHNlCisJCXRtcHUxYiAmPSAweDczOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgU1lTX0ZVTkNfRU4gKyAxLCB0bXB1MWIpOworCS8qIHdhaXQgZm9yIEJJVCAxMC8xMS8xNSB0byBwdWxsIGhpZ2ggYXV0b21hdGljYWxseSEhICovCisJbWRlbGF5KDEpOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgQ01EUiwgMCk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgVENSLCAwKTsKKworCS8qIERhdGEgc2hlZXQgbm90IGRlZmluZSAweDU2MiEhISBDb3B5IGZyb20gV01BQyEhISEhICovCisJdG1wdTFiID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCAweDU2Mik7CisJdG1wdTFiIHw9IDB4MDg7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHg1NjIsIHRtcHUxYik7CisJdG1wdTFiICY9IH4oQklUKDMpKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCAweDU2MiwgdG1wdTFiKTsKKworCS8qIEVuYWJsZSBBRkUgY2xvY2sgc291cmNlICovCisJdG1wdTFiID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBBRkVfWFRBTF9DVFJMKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBBRkVfWFRBTF9DVFJMLCAodG1wdTFiIHwgMHgwMSkpOworCS8qIERlbGF5IDEuNW1zICovCisJdWRlbGF5KDE1MDApOworCXRtcHUxYiA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgQUZFX1hUQUxfQ1RSTCArIDEpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIEFGRV9YVEFMX0NUUkwgKyAxLCAodG1wdTFiICYgMHhmYikpOworCisJLyogRW5hYmxlIEFGRSBNYWNybyBCbG9jaydzIEJhbmRnYXAgKi8KKwl0bXB1MWIgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIEFGRV9NSVNDKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBBRkVfTUlTQywgKHRtcHUxYiB8IEJJVCgwKSkpOworCW1kZWxheSgxKTsKKworCS8qIEVuYWJsZSBBRkUgTWJpYXMgKi8KKwl0bXB1MWIgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIEFGRV9NSVNDKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBBRkVfTUlTQywgKHRtcHUxYiB8IDB4MDIpKTsKKwltZGVsYXkoMSk7CisKKwkvKiBFbmFibGUgTERPQTE1IGJsb2NrICovCisJdG1wdTFiID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBMRE9BMTVfQ1RSTCk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgTERPQTE1X0NUUkwsICh0bXB1MWIgfCBCSVQoMCkpKTsKKworCS8qIFNldCBEaWdpdGFsIFZkZCB0byBSZXRlbnRpb24gaXNvbGF0aW9uIFBhdGguICovCisJdG1wdTJiID0gcnRsX3JlYWRfd29yZChydGxwcml2LCBTWVNfSVNPX0NUUkwpOworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFNZU19JU09fQ1RSTCwgKHRtcHUyYiB8IEJJVCgxMSkpKTsKKworCisJLyogRm9yIHdhcm0gcmVib290IE5JQyBkaXNhcHBlcmEgYnVnLiAqLworCXRtcHUyYiA9IHJ0bF9yZWFkX3dvcmQocnRscHJpdiwgU1lTX0ZVTkNfRU4pOworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFNZU19GVU5DX0VOLCAodG1wdTJiIHwgQklUKDEzKSkpOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgU1lTX0lTT19DVFJMICsgMSwgMHg2OCk7CisKKwkvKiBFbmFibGUgQUZFIFBMTCBNYWNybyBCbG9jayAqLworCXRtcHUxYiA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgQUZFX1BMTF9DVFJMKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBBRkVfUExMX0NUUkwsICh0bXB1MWIgfCBCSVQoMCkgfCBCSVQoNCkpKTsKKwkvKiBFbmFibGUgTUFDIDgwTUhaIGNsb2NrICovCisJdG1wdTFiID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBBRkVfUExMX0NUUkwgKyAxKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBBRkVfUExMX0NUUkwgKyAxLCAodG1wdTFiIHwgQklUKDApKSk7CisJbWRlbGF5KDEpOworCisJLyogUmVsZWFzZSBpc29sYXRpb24gQUZFIFBMTCAmIE1EICovCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgU1lTX0lTT19DVFJMLCAweEE2KTsKKworCS8qIEVuYWJsZSBNQUMgY2xvY2sgKi8KKwl0bXB1MmIgPSBydGxfcmVhZF93b3JkKHJ0bHByaXYsIFNZU19DTEtSKTsKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBTWVNfQ0xLUiwgKHRtcHUyYiB8IEJJVCgxMikgfCBCSVQoMTEpKSk7CisKKwkvKiBFbmFibGUgQ29yZSBkaWdpdGFsIGFuZCBlbmFibGUgSU9SRUcgUi9XICovCisJdG1wdTJiID0gcnRsX3JlYWRfd29yZChydGxwcml2LCBTWVNfRlVOQ19FTik7CisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgU1lTX0ZVTkNfRU4sICh0bXB1MmIgfCBCSVQoMTEpKSk7CisJLyogZW5hYmxlIFJFR19FTiAqLworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFNZU19GVU5DX0VOLCAodG1wdTJiIHwgQklUKDExKSB8IEJJVCgxNSkpKTsKKworCS8qIFN3aXRjaCB0aGUgY29udHJvbCBwYXRoLiAqLworCXRtcHUyYiA9IHJ0bF9yZWFkX3dvcmQocnRscHJpdiwgU1lTX0NMS1IpOworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFNZU19DTEtSLCAodG1wdTJiICYgKH5CSVQoMikpKSk7CisKKwl0bXB1MWIgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIChTWVNfQ0xLUiArIDEpKTsKKwl0bXB1MWIgPSAoKHRtcHUxYiB8IEJJVCg3KSkgJiAofkJJVCg2KSkpOworCWlmICghX3J0bDkyc19zZXRfc3lzY2xrKGh3LCB0bXB1MWIpKSB7CisJCXJ0bHByaXYtPnBzYy5wd3Jkb21haW5fcHJvdGVjdCA9IGZhbHNlOworCQlyZXR1cm47CisJfQorCisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgQ01EUiwgMHgzN0ZDKTsKKworCS8qIEFmdGVyIE1BQ0lPIHJlc2V0LHdlIG11c3QgcmVmcmVzaCBMRUQgc3RhdGUuICovCisJX3J0bDkyc2VfZ2VuX3JlZnJlc2hsZWRzdGF0ZShodyk7CisKKwlydGxwcml2LT5wc2MucHdyZG9tYWluX3Byb3RlY3QgPSBmYWxzZTsKK30KKwordm9pZCBydGw5MnNlX2NhcmRfZGlzYWJsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCWVudW0gbmw4MDIxMV9pZnR5cGUgb3Btb2RlOworCXU4IHdhaXQgPSAzMDsKKworCXJ0bHByaXYtPmludGZfb3BzLT5lbmFibGVfYXNwbShodyk7CisKKwlpZiAocnRscGNpLT5kcml2ZXJfaXNfZ29pbmd0b191bmxvYWQgfHwKKwkJcHBzYy0+cmZvZmZfcmVhc29uID4gUkZfQ0hBTkdFX0JZX1BTKQorCQlydGxwcml2LT5jZmctPm9wcy0+bGVkX2NvbnRyb2woaHcsIExFRF9DVExfUE9XRVJfT0ZGKTsKKworCS8qIHdlIHNob3VsZCBjaG5nZSBHUElPIHRvIGlucHV0IG1vZGUKKwkgKiB0aGlzIHdpbGwgZHJvcCBhd2F5IGN1cnJlbnQgYWJvdXQgMjVtQSovCisJcnRsODE5MnNlX2dwaW9iaXQzX2NmZ19pbnB1dG1vZGUoaHcpOworCisJLyogdGhpcyBpcyB2ZXJ5IGltcG9ydGFudCBmb3IgaXBzIHBvd2VyIHNhdmUgKi8KKwl3aGlsZSAod2FpdC0tID49IDEwICYmIHJ0bHByaXYtPnBzYy5wd3Jkb21haW5fcHJvdGVjdCkgeworCQlpZiAocnRscHJpdi0+cHNjLnB3cmRvbWFpbl9wcm90ZWN0KQorCQkJbWRlbGF5KDIwKTsKKwkJZWxzZQorCQkJYnJlYWs7CisJfQorCisJbWFjLT5saW5rX3N0YXRlID0gTUFDODAyMTFfTk9MSU5LOworCW9wbW9kZSA9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOworCV9ydGw5MnNlX3NldF9tZWRpYV9zdGF0dXMoaHcsIG9wbW9kZSk7CisKKwlfcnRsOTJzX3BoeV9zZXRfcmZoYWx0KGh3KTsKKwl1ZGVsYXkoMTAwKTsKK30KKwordm9pZCBydGw5MnNlX2ludGVycnVwdF9yZWNvZ25pemVkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgKnBfaW50YSwKKwkJCSAgICAgdTMyICpwX2ludGIpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisKKwkqcF9pbnRhID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgSVNSKSAmIHJ0bHBjaS0+aXJxX21hc2tbMF07CisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIElTUiwgKnBfaW50YSk7CisKKwkqcF9pbnRiID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgSVNSICsgNCkgJiBydGxwY2ktPmlycV9tYXNrWzFdOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBJU1IgKyA0LCAqcF9pbnRiKTsKK30KKwordm9pZCBydGw5MnNlX3NldF9iZWFjb25fcmVsYXRlZF9yZWdpc3RlcnMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJdTE2IGJjbnRpbWVfY2ZnID0gMDsKKwl1MTYgYmNuX2N3ID0gNiwgYmNuX2lmcyA9IDB4ZjsKKwl1MTYgYXRpbV93aW5kb3cgPSAyOworCisJLyogQVRJTSBXaW5kb3cgKGluIHVuaXQgb2YgVFUpLiAqLworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIEFUSU1XTkQsIGF0aW1fd2luZG93KTsKKworCS8qIEJlYWNvbiBpbnRlcnZhbCAoaW4gdW5pdCBvZiBUVSkuICovCisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgQkNOX0lOVEVSVkFMLCBtYWMtPmJlYWNvbl9pbnRlcnZhbCk7CisKKwkvKiBEcnZFcmx5SW50IChpbiB1bml0IG9mIFRVKS4gKFRpbWUgdG8gc2VuZAorCSAqIGludGVycnVwdCB0byBub3RpZnkgZHJpdmVyIHRvIGNoYW5nZQorCSAqIGJlYWNvbiBjb250ZW50KSAqLworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIEJDTl9EUlZfRUFSTFlfSU5ULCAxMCA8PCA0KTsKKworCS8qIEJjbkRNQVRJTShpbiB1bml0IG9mIHVzKS4gSW5kaWNhdGVzIHRoZQorCSAqIHRpbWUgYmVmb3JlIFRCVFQgdG8gcGVyZm9ybSBiZWFjb24gcXVldWUgRE1BICAqLworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIEJDTl9ETUFUSU1FLCAyNTYpOworCisJLyogRm9yY2UgYmVhY29uIGZyYW1lIHRyYW5zbWlzc2lvbiBldmVuCisJICogYWZ0ZXIgcmVjZWl2aW5nIGJlYWNvbiBmcmFtZSBmcm9tCisJICogb3RoZXIgYWQgaG9jIFNUQSAqLworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIEJDTl9FUlJfVEhSRVNILCAxMDApOworCisJLyogQmVhY29uIFRpbWUgQ29uZmlndXJhdGlvbiAqLworCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkJYmNudGltZV9jZmcgfD0gKGJjbl9jdyA8PCBCQ05fVENGR19DV19TSElGVCk7CisKKwkvKiBUT0RPOiBiY25faWZzIG1heSByZXF1aXJlZCB0byBiZSBjaGFuZ2VkIG9uIEFTSUMgKi8KKwliY250aW1lX2NmZyB8PSBiY25faWZzIDw8IEJDTl9UQ0ZHX0lGUzsKKworCS8qZm9yIGJlYWNvbiBjaGFuZ2VkICovCisJcnRsOTJzX3BoeV9zZXRfYmVhY29uX2h3cmVnKGh3LCBtYWMtPmJlYWNvbl9pbnRlcnZhbCk7Cit9CisKK3ZvaWQgcnRsOTJzZV9zZXRfYmVhY29uX2ludGVydmFsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXUxNiBiY25faW50ZXJ2YWwgPSBtYWMtPmJlYWNvbl9pbnRlcnZhbDsKKworCS8qIEJlYWNvbiBpbnRlcnZhbCAoaW4gdW5pdCBvZiBUVSkuICovCisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgQkNOX0lOVEVSVkFMLCBiY25faW50ZXJ2YWwpOworCS8qIDIwMDguMTAuMjQgYWRkZWQgYnkgdHlubGkgZm9yIGJlYWNvbiBjaGFuZ2VkLiAqLworCXJ0bDkyc19waHlfc2V0X2JlYWNvbl9od3JlZyhodywgYmNuX2ludGVydmFsKTsKK30KKwordm9pZCBydGw5MnNlX3VwZGF0ZV9pbnRlcnJ1cHRfbWFzayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJdTMyIGFkZF9tc3IsIHUzMiBybV9tc3IpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOVFIsIERCR19MT1VELAorCQkgKCJhZGRfbXNyOiV4LCBybV9tc3I6JXhcbiIsIGFkZF9tc3IsIHJtX21zcikpOworCisJaWYgKGFkZF9tc3IpCisJCXJ0bHBjaS0+aXJxX21hc2tbMF0gfD0gYWRkX21zcjsKKworCWlmIChybV9tc3IpCisJCXJ0bHBjaS0+aXJxX21hc2tbMF0gJj0gKH5ybV9tc3IpOworCisJcnRsOTJzZV9kaXNhYmxlX2ludGVycnVwdChodyk7CisJcnRsOTJzZV9lbmFibGVfaW50ZXJydXB0KGh3KTsKK30KKworc3RhdGljIHZvaWQgX3J0bDgxOTJzZV9nZXRfSUNfSW5mZXJpb3JpdHkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXU4IGVmdXNlX2lkOworCisJcnRsaGFsLT5pY19jbGFzcyA9IElDX0lORkVSSU9SSVRZX0E7CisKKwkvKiBPbmx5IHJldHJpZXZpbmcgd2hpbGUgdXNpbmcgRUZVU0UuICovCisJaWYgKChydGxlZnVzZS0+ZXByb210eXBlID09IEVFUFJPTV9CT09UX0VGVVNFKSAmJgorCQkhcnRsZWZ1c2UtPmF1dG9sb2FkX2ZhaWxmbGFnKSB7CisJCWVmdXNlX2lkID0gZWZ1c2VfcmVhZF8xYnl0ZShodywgRUZVU0VfSUNfSURfT0ZGU0VUKTsKKworCQlpZiAoZWZ1c2VfaWQgPT0gMHhmZSkKKwkJCXJ0bGhhbC0+aWNfY2xhc3MgPSBJQ19JTkZFUklPUklUWV9COworCX0KK30KKworc3RhdGljIHZvaWQgX3J0bDkyc2VfcmVhZF9hZGFwdGVyX2luZm8oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwl1MTYgaSwgdXN2YWx1ZTsKKwl1MTYJZWVwcm9tX2lkOworCXU4IHRlbXB2YWw7CisJdTggaHdpbmZvW0hXU0VUX01BWF9TSVpFXzkyU107CisJdTggcmZfcGF0aCwgaW5kZXg7CisKKwlpZiAocnRsZWZ1c2UtPmVwcm9tdHlwZSA9PSBFRVBST01fOTNDNDYpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoIlJUTDgxOVggTm90IGJvb3QgZnJvbSBlZXByb20sIGNoZWNrIGl0ICEhIikpOworCX0gZWxzZSBpZiAocnRsZWZ1c2UtPmVwcm9tdHlwZSA9PSBFRVBST01fQk9PVF9FRlVTRSkgeworCQlydGxfZWZ1c2Vfc2hhZG93X21hcF91cGRhdGUoaHcpOworCisJCW1lbWNweSgodm9pZCAqKWh3aW5mbywgKHZvaWQgKikKKwkJCSZydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX0lOSVRfTUFQXVswXSwKKwkJCUhXU0VUX01BWF9TSVpFXzkyUyk7CisJfQorCisJUlRfUFJJTlRfREFUQShydGxwcml2LCBDT01QX0lOSVQsIERCR19ETUVTRywgKCJNQVBcbiIpLAorCQkgICAgICBod2luZm8sIEhXU0VUX01BWF9TSVpFXzkyUyk7CisKKwllZXByb21faWQgPSAqKCh1MTYgKikmaHdpbmZvWzBdKTsKKwlpZiAoZWVwcm9tX2lkICE9IFJUTDgxOTBfRUVQUk9NX0lEKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfV0FSTklORywKKwkJCSAoIkVFUFJPTSBJRCglI3gpIGlzIGludmFsaWQhIVxuIiwgZWVwcm9tX2lkKSk7CisJCXJ0bGVmdXNlLT5hdXRvbG9hZF9mYWlsZmxhZyA9IHRydWU7CisJfSBlbHNlIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfTE9VRCwgKCJBdXRvbG9hZCBPS1xuIikpOworCQlydGxlZnVzZS0+YXV0b2xvYWRfZmFpbGZsYWcgPSBmYWxzZTsKKwl9CisKKwlpZiAocnRsZWZ1c2UtPmF1dG9sb2FkX2ZhaWxmbGFnID09IHRydWUpCisJCXJldHVybjsKKworCV9ydGw4MTkyc2VfZ2V0X0lDX0luZmVyaW9yaXR5KGh3KTsKKworCS8qIFJlYWQgSUMgVmVyc2lvbiAmJiBDaGFubmVsIFBsYW4gKi8KKwkvKiBWSUQsIERJRAkgU0UJMHhBLUQgKi8KKwlydGxlZnVzZS0+ZWVwcm9tX3ZpZCA9ICoodTE2ICopJmh3aW5mb1tFRVBST01fVklEXTsKKwlydGxlZnVzZS0+ZWVwcm9tX2RpZCA9ICoodTE2ICopJmh3aW5mb1tFRVBST01fRElEXTsKKwlydGxlZnVzZS0+ZWVwcm9tX3N2aWQgPSAqKHUxNiAqKSZod2luZm9bRUVQUk9NX1NWSURdOworCXJ0bGVmdXNlLT5lZXByb21fc21pZCA9ICoodTE2ICopJmh3aW5mb1tFRVBST01fU01JRF07CisJcnRsZWZ1c2UtPmVlcHJvbV92ZXJzaW9uID0gKih1MTYgKikmaHdpbmZvW0VFUFJPTV9WRVJTSU9OXTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0xPVUQsCisJCQkoIkVFUFJPTUlkID0gMHglNHhcbiIsIGVlcHJvbV9pZCkpOworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0xPVUQsCisJCQkoIkVFUFJPTSBWSUQgPSAweCU0eFxuIiwgcnRsZWZ1c2UtPmVlcHJvbV92aWQpKTsKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19MT1VELAorCQkJKCJFRVBST00gRElEID0gMHglNHhcbiIsIHJ0bGVmdXNlLT5lZXByb21fZGlkKSk7CisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfTE9VRCwKKwkJCSgiRUVQUk9NIFNWSUQgPSAweCU0eFxuIiwgcnRsZWZ1c2UtPmVlcHJvbV9zdmlkKSk7CisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfTE9VRCwKKwkJCSgiRUVQUk9NIFNNSUQgPSAweCU0eFxuIiwgcnRsZWZ1c2UtPmVlcHJvbV9zbWlkKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSArPSAyKSB7CisJCXVzdmFsdWUgPSAqKHUxNiAqKSZod2luZm9bRUVQUk9NX01BQ19BRERSICsgaV07CisJCSooKHUxNiAqKSAoJnJ0bGVmdXNlLT5kZXZfYWRkcltpXSkpID0gdXN2YWx1ZTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBNQUNJRFIwICsgaSwgcnRsZWZ1c2UtPmRldl9hZGRyW2ldKTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0RNRVNHLAorCQkgKE1BQ19GTVQgIlxuIiwgTUFDX0FSRyhydGxlZnVzZS0+ZGV2X2FkZHIpKSk7CisKKwkvKiBHZXQgVHggUG93ZXIgTGV2ZWwgYnkgQ2hhbm5lbCAqLworCS8qIFJlYWQgVHggcG93ZXIgb2YgQ2hhbm5lbCAxIH4gMTQgZnJvbSBFRVBST00uICovCisJLyogOTJTIHN1dXBwb3J0IFJGIEEgJiBCICovCisJZm9yIChyZl9wYXRoID0gMDsgcmZfcGF0aCA8IDI7IHJmX3BhdGgrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCQkvKiBSZWFkIENDSyBSRiBBICYgQiBUeCBwb3dlciAgKi8KKwkJCXJ0bGVmdXNlLT5lZXByb21fY2hubGFyZWFfdHhwd3JfY2NrW3JmX3BhdGhdW2ldID0KKwkJCWh3aW5mb1tFRVBST01fVFhQT1dFUkJBU0UgKyByZl9wYXRoICogMyArIGldOworCisJCQkvKiBSZWFkIE9GRE0gUkYgQSAmIEIgVHggcG93ZXIgZm9yIDFUICovCisJCQlydGxlZnVzZS0+ZWVwcm9tX2NobmxhcmVhX3R4cHdyX2h0NDBfMXNbcmZfcGF0aF1baV0gPQorCQkJaHdpbmZvW0VFUFJPTV9UWFBPV0VSQkFTRSArIDYgKyByZl9wYXRoICogMyArIGldOworCisJCQkvKiBSZWFkIE9GRE0gUkYgQSAmIEIgVHggcG93ZXIgZm9yIDJUICovCisJCQlydGxlZnVzZS0+ZWVwcm9tX2NobmxhcmVhX3R4cHdyX2h0NDBfMnNkaWlmW3JmX3BhdGhdW2ldCisJCQkJID0gaHdpbmZvW0VFUFJPTV9UWFBPV0VSQkFTRSArIDEyICsKKwkJCQkgICByZl9wYXRoICogMyArIGldOworCQl9CisJfQorCisJZm9yIChyZl9wYXRoID0gMDsgcmZfcGF0aCA8IDI7IHJmX3BhdGgrKykKKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJCVJUUFJJTlQocnRscHJpdiwgRklOSVQsIElOSVRfRUVQUk9NLAorCQkJCSgiUkYoJWQpIEVFUFJPTSBDQ0sgQXJlYSglZCkgPSAweCV4XG4iLCByZl9wYXRoLAorCQkJCWksIHJ0bGVmdXNlLT5lZXByb21fY2hubGFyZWFfdHhwd3JfY2NrCisJCQkJCVtyZl9wYXRoXVtpXSkpOworCWZvciAocmZfcGF0aCA9IDA7IHJmX3BhdGggPCAyOyByZl9wYXRoKyspCisJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCQlSVFBSSU5UKHJ0bHByaXYsIEZJTklULCBJTklUX0VFUFJPTSwKKwkJCQkoIlJGKCVkKSBFRVBST00gSFQ0MCAxUyBBcmVhKCVkKSA9IDB4JXhcbiIsCisJCQkJIHJmX3BhdGgsIGksCisJCQkJIHJ0bGVmdXNlLT5lZXByb21fY2hubGFyZWFfdHhwd3JfaHQ0MF8xcworCQkJCQkJW3JmX3BhdGhdW2ldKSk7CisJZm9yIChyZl9wYXRoID0gMDsgcmZfcGF0aCA8IDI7IHJmX3BhdGgrKykKKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJCVJUUFJJTlQocnRscHJpdiwgRklOSVQsIElOSVRfRUVQUk9NLAorCQkJCSgiUkYoJWQpIEVFUFJPTSBIVDQwIDJTIERpZmYgQXJlYSglZCkgPSAweCV4XG4iLAorCQkJCSByZl9wYXRoLCBpLAorCQkJCSBydGxlZnVzZS0+ZWVwcm9tX2NobmxhcmVhX3R4cHdyX2h0NDBfMnNkaWlmCisJCQkJCVtyZl9wYXRoXVtpXSkpOworCisJZm9yIChyZl9wYXRoID0gMDsgcmZfcGF0aCA8IDI7IHJmX3BhdGgrKykgeworCisJCS8qIEFzc2lnbiBkZWRpY2F0ZWQgY2hhbm5lbCB0eCBwb3dlciAqLworCQlmb3IgKGkgPSAwOyBpIDwgMTQ7IGkrKykJeworCQkJLyogY2hhbm5lbCAxfjMgdXNlIHRoZSBzYW1lIFR4IFBvd2VyIExldmVsLiAqLworCQkJaWYgKGkgPCAzKQorCQkJCWluZGV4ID0gMDsKKwkJCS8qIENoYW5uZWwgNC04ICovCisJCQllbHNlIGlmIChpIDwgOCkKKwkJCQlpbmRleCA9IDE7CisJCQkvKiBDaGFubmVsIDktMTQgKi8KKwkJCWVsc2UKKwkJCQlpbmRleCA9IDI7CisKKwkJCS8qIFJlY29yZCBBICYgQiBDQ0sgL09GRE0gLSAxVC8yVCBDaGFubmVsIGFyZWEKKwkJCSAqIHR4IHBvd2VyICovCisJCQlydGxlZnVzZS0+dHhwd3JsZXZlbF9jY2tbcmZfcGF0aF1baV0gID0KKwkJCQlydGxlZnVzZS0+ZWVwcm9tX2NobmxhcmVhX3R4cHdyX2NjaworCQkJCQkJCVtyZl9wYXRoXVtpbmRleF07CisJCQlydGxlZnVzZS0+dHhwd3JsZXZlbF9odDQwXzFzW3JmX3BhdGhdW2ldICA9CisJCQkJcnRsZWZ1c2UtPmVlcHJvbV9jaG5sYXJlYV90eHB3cl9odDQwXzFzCisJCQkJCQkJW3JmX3BhdGhdW2luZGV4XTsKKwkJCXJ0bGVmdXNlLT50eHB3cmxldmVsX2h0NDBfMnNbcmZfcGF0aF1baV0gID0KKwkJCQlydGxlZnVzZS0+ZWVwcm9tX2NobmxhcmVhX3R4cHdyX2h0NDBfMnNkaWlmCisJCQkJCQkJW3JmX3BhdGhdW2luZGV4XTsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCAxNDsgaSsrKSB7CisJCQlSVFBSSU5UKHJ0bHByaXYsIEZJTklULCBJTklUX1R4UG93ZXIsCisJCQkJKCJSRiglZCktQ2goJWQpIFtDQ0sgLyBIVDQwXzFTIC8gSFQ0MF8yU10gPSAiCisJCQkJICJbMHgleCAvIDB4JXggLyAweCV4XVxuIiwgcmZfcGF0aCwgaSwKKwkJCQkgcnRsZWZ1c2UtPnR4cHdybGV2ZWxfY2NrW3JmX3BhdGhdW2ldLAorCQkJCSBydGxlZnVzZS0+dHhwd3JsZXZlbF9odDQwXzFzW3JmX3BhdGhdW2ldLAorCQkJCSBydGxlZnVzZS0+dHhwd3JsZXZlbF9odDQwXzJzW3JmX3BhdGhdW2ldKSk7CisJCX0KKwl9CisKKwlmb3IgKHJmX3BhdGggPSAwOyByZl9wYXRoIDwgMjsgcmZfcGF0aCsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJCS8qIFJlYWQgUG93ZXIgZGlmZiBsaW1pdC4gKi8KKwkJCXJ0bGVmdXNlLT5lZXByb21fcHdyZ3JvdXBbcmZfcGF0aF1baV0gPQorCQkJCWh3aW5mb1tFRVBST01fVFhQV1JHUk9VUCArIHJmX3BhdGggKiAzICsgaV07CisJCX0KKwl9CisKKwlmb3IgKHJmX3BhdGggPSAwOyByZl9wYXRoIDwgMjsgcmZfcGF0aCsrKSB7CisJCS8qIEZpbGwgUHdyIGdyb3VwICovCisJCWZvciAoaSA9IDA7IGkgPCAxNDsgaSsrKSB7CisJCQkvKiBDaGFuZWwgMS0zICovCisJCQlpZiAoaSA8IDMpCisJCQkJaW5kZXggPSAwOworCQkJLyogQ2hhbm5lbCA0LTggKi8KKwkJCWVsc2UgaWYgKGkgPCA4KQorCQkJCWluZGV4ID0gMTsKKwkJCS8qIENoYW5uZWwgOS0xMyAqLworCQkJZWxzZQorCQkJCWluZGV4ID0gMjsKKworCQkJcnRsZWZ1c2UtPnB3cmdyb3VwX2h0MjBbcmZfcGF0aF1baV0gPQorCQkJCShydGxlZnVzZS0+ZWVwcm9tX3B3cmdyb3VwW3JmX3BhdGhdW2luZGV4XSAmCisJCQkJMHhmKTsKKwkJCXJ0bGVmdXNlLT5wd3Jncm91cF9odDQwW3JmX3BhdGhdW2ldID0KKwkJCQkoKHJ0bGVmdXNlLT5lZXByb21fcHdyZ3JvdXBbcmZfcGF0aF1baW5kZXhdICYKKwkJCQkweGYwKSA+PiA0KTsKKworCQkJUlRQUklOVChydGxwcml2LCBGSU5JVCwgSU5JVF9UeFBvd2VyLAorCQkJCSgiUkYtJWQgcHdyZ3JvdXBfaHQyMFslZF0gPSAweCV4XG4iLAorCQkJCSByZl9wYXRoLCBpLAorCQkJCSBydGxlZnVzZS0+cHdyZ3JvdXBfaHQyMFtyZl9wYXRoXVtpXSkpOworCQkJUlRQUklOVChydGxwcml2LCBGSU5JVCwgSU5JVF9UeFBvd2VyLAorCQkJCSgiUkYtJWQgcHdyZ3JvdXBfaHQ0MFslZF0gPSAweCV4XG4iLAorCQkJCSByZl9wYXRoLCBpLAorCQkJCSBydGxlZnVzZS0+cHdyZ3JvdXBfaHQ0MFtyZl9wYXRoXVtpXSkpOworCQkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCAxNDsgaSsrKSB7CisJCS8qIFJlYWQgdHggcG93ZXIgZGlmZmVyZW5jZSBiZXR3ZWVuIEhUIE9GRE0gMjAvNDAgTUhaICovCisJCS8qIGNoYW5uZWwgMS0zICovCisJCWlmIChpIDwgMykKKwkJCWluZGV4ID0gMDsKKwkJLyogQ2hhbm5lbCA0LTggKi8KKwkJZWxzZSBpZiAoaSA8IDgpCisJCQlpbmRleCA9IDE7CisJCS8qIENoYW5uZWwgOS0xNCAqLworCQllbHNlCisJCQlpbmRleCA9IDI7CisKKwkJdGVtcHZhbCA9ICgqKHU4ICopJmh3aW5mb1tFRVBST01fVFhfUFdSX0hUMjBfRElGRiArCisJCQkgICBpbmRleF0pICYgMHhmZjsKKwkJcnRsZWZ1c2UtPnR4cHdyX2h0MjBkaWZmW1JGOTBfUEFUSF9BXVtpXSA9ICh0ZW1wdmFsICYgMHhGKTsKKwkJcnRsZWZ1c2UtPnR4cHdyX2h0MjBkaWZmW1JGOTBfUEFUSF9CXVtpXSA9CisJCQkJCQkgKCh0ZW1wdmFsID4+IDQpICYgMHhGKTsKKworCQkvKiBSZWFkIE9GRE08LT5IVCB0eCBwb3dlciBkaWZmICovCisJCS8qIENoYW5uZWwgMS0zICovCisJCWlmIChpIDwgMykKKwkJCWluZGV4ID0gMDsKKwkJLyogQ2hhbm5lbCA0LTggKi8KKwkJZWxzZSBpZiAoaSA8IDgpCisJCQlpbmRleCA9IDB4MTE7CisJCS8qIENoYW5uZWwgOS0xNCAqLworCQllbHNlCisJCQlpbmRleCA9IDE7CisKKwkJdGVtcHZhbCA9ICgqKHU4ICopJmh3aW5mb1tFRVBST01fVFhfUFdSX09GRE1fRElGRiArIGluZGV4XSkKKwkJCQkgICYgMHhmZjsKKwkJcnRsZWZ1c2UtPnR4cHdyX2xlZ2FjeWh0ZGlmZltSRjkwX1BBVEhfQV1baV0gPQorCQkJCSAodGVtcHZhbCAmIDB4Rik7CisJCXJ0bGVmdXNlLT50eHB3cl9sZWdhY3lodGRpZmZbUkY5MF9QQVRIX0JdW2ldID0KKwkJCQkgKCh0ZW1wdmFsID4+IDQpICYgMHhGKTsKKworCQl0ZW1wdmFsID0gKCoodTggKikmaHdpbmZvW1RYX1BXUl9TQUZFVFlfQ0hLXSk7CisJCXJ0bGVmdXNlLT50eHB3cl9zYWZldHlmbGFnID0gKHRlbXB2YWwgJiAweDAxKTsKKwl9CisKKwlydGxlZnVzZS0+ZWVwcm9tX3JlZ3VsYXRvcnkgPSAwOworCWlmIChydGxlZnVzZS0+ZWVwcm9tX3ZlcnNpb24gPj0gMikgeworCQkvKiBCSVQoMCl+MiAqLworCQlpZiAocnRsZWZ1c2UtPmVlcHJvbV92ZXJzaW9uID49IDQpCisJCQlydGxlZnVzZS0+ZWVwcm9tX3JlZ3VsYXRvcnkgPQorCQkJCSAoaHdpbmZvW0VFUFJPTV9SRUdVTEFUT1JZXSAmIDB4Nyk7CisJCWVsc2UgLyogQklUKDApICovCisJCQlydGxlZnVzZS0+ZWVwcm9tX3JlZ3VsYXRvcnkgPQorCQkJCSAoaHdpbmZvW0VFUFJPTV9SRUdVTEFUT1JZXSAmIDB4MSk7CisJfQorCVJUUFJJTlQocnRscHJpdiwgRklOSVQsIElOSVRfVHhQb3dlciwKKwkJKCJlZXByb21fcmVndWxhdG9yeSA9IDB4JXhcbiIsIHJ0bGVmdXNlLT5lZXByb21fcmVndWxhdG9yeSkpOworCisJZm9yIChpID0gMDsgaSA8IDE0OyBpKyspCisJCVJUUFJJTlQocnRscHJpdiwgRklOSVQsIElOSVRfVHhQb3dlciwKKwkJCSgiUkYtQSBIdDIwIHRvIEhUNDAgRGlmZlslZF0gPSAweCV4XG4iLCBpLAorCQkJIHJ0bGVmdXNlLT50eHB3cl9odDIwZGlmZltSRjkwX1BBVEhfQV1baV0pKTsKKwlmb3IgKGkgPSAwOyBpIDwgMTQ7IGkrKykKKwkJUlRQUklOVChydGxwcml2LCBGSU5JVCwgSU5JVF9UeFBvd2VyLAorCQkJKCJSRi1BIExlZ2FjeSB0byBIdDQwIERpZmZbJWRdID0gMHgleFxuIiwgaSwKKwkJCSBydGxlZnVzZS0+dHhwd3JfbGVnYWN5aHRkaWZmW1JGOTBfUEFUSF9BXVtpXSkpOworCWZvciAoaSA9IDA7IGkgPCAxNDsgaSsrKQorCQlSVFBSSU5UKHJ0bHByaXYsIEZJTklULCBJTklUX1R4UG93ZXIsCisJCQkoIlJGLUIgSHQyMCB0byBIVDQwIERpZmZbJWRdID0gMHgleFxuIiwgaSwKKwkJCSBydGxlZnVzZS0+dHhwd3JfaHQyMGRpZmZbUkY5MF9QQVRIX0JdW2ldKSk7CisJZm9yIChpID0gMDsgaSA8IDE0OyBpKyspCisJCVJUUFJJTlQocnRscHJpdiwgRklOSVQsIElOSVRfVHhQb3dlciwKKwkJCSgiUkYtQiBMZWdhY3kgdG8gSFQ0MCBEaWZmWyVkXSA9IDB4JXhcbiIsIGksCisJCQkgcnRsZWZ1c2UtPnR4cHdyX2xlZ2FjeWh0ZGlmZltSRjkwX1BBVEhfQl1baV0pKTsKKworCVJUUFJJTlQocnRscHJpdiwgRklOSVQsIElOSVRfVHhQb3dlciwgKCJUeFB3clNhZmV0eUZsYWcgPSAlZFxuIiwKKwkJcnRsZWZ1c2UtPnR4cHdyX3NhZmV0eWZsYWcpKTsKKworCS8qIFJlYWQgUkYtaW5kaWNhdGlvbiBhbmQgVHggUG93ZXIgZ2FpbgorCSAqIGluZGV4IGRpZmYgb2YgbGVnYWN5IHRvIEhUIE9GRE0gcmF0ZS4gKi8KKwl0ZW1wdmFsID0gKCoodTggKikmaHdpbmZvW0VFUFJPTV9SRklORF9QT1dFUkRJRkZdKSAmIDB4ZmY7CisJcnRsZWZ1c2UtPmVlcHJvbV90eHBvd2VyZGlmZiA9IHRlbXB2YWw7CisJcnRsZWZ1c2UtPmxlZ2FjeV9odHR4cG93ZXJkaWZmID0KKwkJcnRsZWZ1c2UtPnR4cHdyX2xlZ2FjeWh0ZGlmZltSRjkwX1BBVEhfQV1bMF07CisKKwlSVFBSSU5UKHJ0bHByaXYsIEZJTklULCBJTklUX1R4UG93ZXIsICgiVHhQb3dlckRpZmYgPSAlI3hcbiIsCisJCXJ0bGVmdXNlLT5lZXByb21fdHhwb3dlcmRpZmYpKTsKKworCS8qIEdldCBUU1NJIHZhbHVlIGZvciBlYWNoIHBhdGguICovCisJdXN2YWx1ZSA9ICoodTE2ICopJmh3aW5mb1tFRVBST01fVFNTSV9BXTsKKwlydGxlZnVzZS0+ZWVwcm9tX3Rzc2lbUkY5MF9QQVRIX0FdID0gKHU4KSgodXN2YWx1ZSAmIDB4ZmYwMCkgPj4gOCk7CisJdXN2YWx1ZSA9ICoodTggKikmaHdpbmZvW0VFUFJPTV9UU1NJX0JdOworCXJ0bGVmdXNlLT5lZXByb21fdHNzaVtSRjkwX1BBVEhfQl0gPSAodTgpKHVzdmFsdWUgJiAweGZmKTsKKworCVJUUFJJTlQocnRscHJpdiwgRklOSVQsIElOSVRfVHhQb3dlciwgKCJUU1NJX0EgPSAweCV4LCBUU1NJX0IgPSAweCV4XG4iLAorCQkgcnRsZWZ1c2UtPmVlcHJvbV90c3NpW1JGOTBfUEFUSF9BXSwKKwkJIHJ0bGVmdXNlLT5lZXByb21fdHNzaVtSRjkwX1BBVEhfQl0pKTsKKworCS8qIFJlYWQgYW50ZW5uYSB0eCBwb3dlciBvZmZzZXQgb2YgQi9DL0QgdG8gQSAgZnJvbSBFRVBST00gKi8KKwkvKiBhbmQgcmVhZCBUaGVybWFsTWV0ZXIgZnJvbSBFRVBST00gKi8KKwl0ZW1wdmFsID0gKih1OCAqKSZod2luZm9bRUVQUk9NX1RIRVJNQUxNRVRFUl07CisJcnRsZWZ1c2UtPmVlcHJvbV90aGVybWFsbWV0ZXIgPSB0ZW1wdmFsOworCVJUUFJJTlQocnRscHJpdiwgRklOSVQsIElOSVRfVHhQb3dlciwgKCJ0aGVybWFsbWV0ZXIgPSAweCV4XG4iLAorCQlydGxlZnVzZS0+ZWVwcm9tX3RoZXJtYWxtZXRlcikpOworCisJLyogVGhlcm1hbE1ldGVyLCBCSVQoMCl+MyBmb3IgUkZJQzEsIEJJVCg0KX43IGZvciBSRklDMiAqLworCXJ0bGVmdXNlLT50aGVybWFsbWV0ZXJbMF0gPSAocnRsZWZ1c2UtPmVlcHJvbV90aGVybWFsbWV0ZXIgJiAweDFmKTsKKwlydGxlZnVzZS0+dHNzaV8xM2RibSA9IHJ0bGVmdXNlLT5lZXByb21fdGhlcm1hbG1ldGVyICogMTAwOworCisJLyogUmVhZCBDcnlzdGFsQ2FwIGZyb20gRUVQUk9NICovCisJdGVtcHZhbCA9ICgqKHU4ICopJmh3aW5mb1tFRVBST01fQ1JZU1RBTENBUF0pID4+IDQ7CisJcnRsZWZ1c2UtPmVlcHJvbV9jcnlzdGFsY2FwID0gdGVtcHZhbDsKKwkvKiBDcnlzdGFsQ2FwLCBCSVQoMTIpfjE1ICovCisJcnRsZWZ1c2UtPmNyeXN0YWxjYXAgPSBydGxlZnVzZS0+ZWVwcm9tX2NyeXN0YWxjYXA7CisKKwkvKiBSZWFkIElDIFZlcnNpb24gJiYgQ2hhbm5lbCBQbGFuICovCisJLyogVmVyc2lvbiBJRCwgQ2hhbm5lbCBwbGFuICovCisJcnRsZWZ1c2UtPmVlcHJvbV9jaGFubmVscGxhbiA9ICoodTggKikmaHdpbmZvW0VFUFJPTV9DSEFOTkVMUExBTl07CisJcnRsZWZ1c2UtPnR4cHdyX2Zyb21lcHJvbSA9IHRydWU7CisJUlRQUklOVChydGxwcml2LCBGSU5JVCwgSU5JVF9UeFBvd2VyLCAoIkVFUFJPTSBDaGFubmVsUGxhbiA9IDB4JTR4XG4iLAorCQlydGxlZnVzZS0+ZWVwcm9tX2NoYW5uZWxwbGFuKSk7CisKKwkvKiBSZWFkIEN1c3RvbWVyIElEIG9yIEJvYXJkIFR5cGUhISEgKi8KKwl0ZW1wdmFsID0gKih1OCAqKSZod2luZm9bRUVQUk9NX0JPQVJEVFlQRV07CisJLyogQ2hhbmdlIFJGIHR5cGUgZGVmaW5pdGlvbiAqLworCWlmICh0ZW1wdmFsID09IDApCisJCXJ0bHBoeS0+cmZfdHlwZSA9IFJGXzJUMlI7CisJZWxzZSBpZiAodGVtcHZhbCA9PSAxKQorCQlydGxwaHktPnJmX3R5cGUgPSBSRl8xVDJSOworCWVsc2UgaWYgKHRlbXB2YWwgPT0gMikKKwkJcnRscGh5LT5yZl90eXBlID0gUkZfMVQyUjsKKwllbHNlIGlmICh0ZW1wdmFsID09IDMpCisJCXJ0bHBoeS0+cmZfdHlwZSA9IFJGXzFUMVI7CisKKwkvKiAxVDJSIGJ1dCAxU1MgKDF4MSByZWNlaXZlIGNvbWJpbmluZykgKi8KKwlydGxlZnVzZS0+YjF4MV9yZWN2Y29tYmluZSA9IGZhbHNlOworCWlmIChydGxwaHktPnJmX3R5cGUgPT0gUkZfMVQyUikgeworCQl0ZW1wdmFsID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCAweDA3KTsKKwkJaWYgKCEodGVtcHZhbCAmIEJJVCgwKSkpIHsKKwkJCXJ0bGVmdXNlLT5iMXgxX3JlY3Zjb21iaW5lID0gdHJ1ZTsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0xPVUQsCisJCQkJKCJSRl9UWVBFPTFUMlIgYnV0IG9ubHkgMVNTXG4iKSk7CisJCX0KKwl9CisJcnRsZWZ1c2UtPmIxc3Nfc3VwcG9ydCA9IHJ0bGVmdXNlLT5iMXgxX3JlY3Zjb21iaW5lOworCXJ0bGVmdXNlLT5lZXByb21fb2VtaWQgPSAqKHU4ICopJmh3aW5mb1tFRVBST01fQ1VTVE9NSURdOworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfTE9VRCwgKCJFRVBST00gQ3VzdG9tZXIgSUQ6IDB4JTJ4IiwKKwkJCXJ0bGVmdXNlLT5lZXByb21fb2VtaWQpKTsKKworCS8qIHNldCBjaGFubmVsIHBhbG4gdG8gd29ybGQgd2lkZSAxMyAqLworCXJ0bGVmdXNlLT5jaGFubmVsX3BsYW4gPSBDT1VOVFJZX0NPREVfV09STERfV0lERV8xMzsKK30KKwordm9pZCBydGw5MnNlX3JlYWRfZWVwcm9tX2luZm8oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisJdTggdG1wX3UxYiA9IDA7CisKKwl0bXBfdTFiID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBFUFJPTV9DTUQpOworCisJaWYgKHRtcF91MWIgJiBCSVQoNCkpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfRE1FU0csICgiQm9vdCBmcm9tIEVFUFJPTVxuIikpOworCQlydGxlZnVzZS0+ZXByb210eXBlID0gRUVQUk9NXzkzQzQ2OworCX0gZWxzZSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0RNRVNHLCAoIkJvb3QgZnJvbSBFRlVTRVxuIikpOworCQlydGxlZnVzZS0+ZXByb210eXBlID0gRUVQUk9NX0JPT1RfRUZVU0U7CisJfQorCisJaWYgKHRtcF91MWIgJiBCSVQoNSkpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfTE9VRCwgKCJBdXRvbG9hZCBPS1xuIikpOworCQlydGxlZnVzZS0+YXV0b2xvYWRfZmFpbGZsYWcgPSBmYWxzZTsKKwkJX3J0bDkyc2VfcmVhZF9hZGFwdGVyX2luZm8oaHcpOworCX0gZWxzZSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsICgiQXV0b2xvYWQgRVJSISFcbiIpKTsKKwkJcnRsZWZ1c2UtPmF1dG9sb2FkX2ZhaWxmbGFnID0gdHJ1ZTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDkyc2VfdXBkYXRlX2hhbF9yYXRlX3RhYmxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXUzMiByYXRyX3ZhbHVlOworCXU4IHJhdHJfaW5kZXggPSAwOworCXU4IG5tb2RlID0gbWFjLT5odF9lbmFibGU7CisJdTggbWltb19wcyA9IElFRUU4MDIxMV9TTVBTX09GRjsKKwl1MTYgc2hvcnRnaV9yYXRlID0gMDsKKwl1MzIgdG1wX3JhdHJfdmFsdWUgPSAwOworCXU4IGN1cnR4YndfNDBtaHogPSBtYWMtPmJ3XzQwOworCXU4IGN1cnNob3J0Z2lfNDBtaHogPSAoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TR0lfNDApID8KKwkJCQkxIDogMDsKKwl1OCBjdXJzaG9ydGdpXzIwbWh6ID0gKHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU0dJXzIwKSA/CisJCQkJMSA6IDA7CisJZW51bSB3aXJlbGVzc19tb2RlIHdpcmVsZXNzbW9kZSA9IG1hYy0+bW9kZTsKKworCWlmIChydGxoYWwtPmN1cnJlbnRfYmFuZHR5cGUgPT0gQkFORF9PTl81RykKKwkJcmF0cl92YWx1ZSA9IHN0YS0+c3VwcF9yYXRlc1sxXSA8PCA0OworCWVsc2UKKwkJcmF0cl92YWx1ZSA9IHN0YS0+c3VwcF9yYXRlc1swXTsKKwlyYXRyX3ZhbHVlIHw9IChzdGEtPmh0X2NhcC5tY3MucnhfbWFza1sxXSA8PCAyMCB8CisJCQlzdGEtPmh0X2NhcC5tY3MucnhfbWFza1swXSA8PCAxMik7CisJc3dpdGNoICh3aXJlbGVzc21vZGUpIHsKKwljYXNlIFdJUkVMRVNTX01PREVfQjoKKwkJcmF0cl92YWx1ZSAmPSAweDAwMDAwMDBEOworCQlicmVhazsKKwljYXNlIFdJUkVMRVNTX01PREVfRzoKKwkJcmF0cl92YWx1ZSAmPSAweDAwMDAwRkY1OworCQlicmVhazsKKwljYXNlIFdJUkVMRVNTX01PREVfTl8yNEc6CisJY2FzZSBXSVJFTEVTU19NT0RFX05fNUc6CisJCW5tb2RlID0gMTsKKwkJaWYgKG1pbW9fcHMgPT0gSUVFRTgwMjExX1NNUFNfU1RBVElDKSB7CisJCQlyYXRyX3ZhbHVlICY9IDB4MDAwN0YwMDU7CisJCX0gZWxzZSB7CisJCQl1MzIgcmF0cl9tYXNrOworCisJCQlpZiAoZ2V0X3JmX3R5cGUocnRscGh5KSA9PSBSRl8xVDJSIHx8CisJCQkgICAgZ2V0X3JmX3R5cGUocnRscGh5KSA9PSBSRl8xVDFSKSB7CisJCQkJaWYgKGN1cnR4YndfNDBtaHopCisJCQkJCXJhdHJfbWFzayA9IDB4MDAwZmYwMTU7CisJCQkJZWxzZQorCQkJCQlyYXRyX21hc2sgPSAweDAwMGZmMDA1OworCQkJfSBlbHNlIHsKKwkJCQlpZiAoY3VydHhid180MG1oeikKKwkJCQkJcmF0cl9tYXNrID0gMHgwZjBmZjAxNTsKKwkJCQllbHNlCisJCQkJCXJhdHJfbWFzayA9IDB4MGYwZmYwMDU7CisJCQl9CisKKwkJCXJhdHJfdmFsdWUgJj0gcmF0cl9tYXNrOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmIChydGxwaHktPnJmX3R5cGUgPT0gUkZfMVQyUikKKwkJCXJhdHJfdmFsdWUgJj0gMHgwMDBmZjBmZjsKKwkJZWxzZQorCQkJcmF0cl92YWx1ZSAmPSAweDBmMGZmMGZmOworCisJCWJyZWFrOworCX0KKworCWlmIChydGxwcml2LT5ydGxoYWwudmVyc2lvbiA+PSBWRVJTSU9OXzgxOTJTX0JDVVQpCisJCXJhdHJfdmFsdWUgJj0gMHgwRkZGRkZGRjsKKwllbHNlIGlmIChydGxwcml2LT5ydGxoYWwudmVyc2lvbiA9PSBWRVJTSU9OXzgxOTJTX0FDVVQpCisJCXJhdHJfdmFsdWUgJj0gMHgwRkZGRkZGMDsKKworCWlmIChubW9kZSAmJiAoKGN1cnR4YndfNDBtaHogJiYKKwkJCSBjdXJzaG9ydGdpXzQwbWh6KSB8fCAoIWN1cnR4YndfNDBtaHogJiYKKwkJCQkJCSBjdXJzaG9ydGdpXzIwbWh6KSkpIHsKKworCQlyYXRyX3ZhbHVlIHw9IDB4MTAwMDAwMDA7CisJCXRtcF9yYXRyX3ZhbHVlID0gKHJhdHJfdmFsdWUgPj4gMTIpOworCisJCWZvciAoc2hvcnRnaV9yYXRlID0gMTU7IHNob3J0Z2lfcmF0ZSA+IDA7IHNob3J0Z2lfcmF0ZS0tKSB7CisJCQlpZiAoKDEgPDwgc2hvcnRnaV9yYXRlKSAmIHRtcF9yYXRyX3ZhbHVlKQorCQkJCWJyZWFrOworCQl9CisKKwkJc2hvcnRnaV9yYXRlID0gKHNob3J0Z2lfcmF0ZSA8PCAxMikgfCAoc2hvcnRnaV9yYXRlIDw8IDgpIHwKKwkJICAgIChzaG9ydGdpX3JhdGUgPDwgNCkgfCAoc2hvcnRnaV9yYXRlKTsKKworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBTR19SQVRFLCBzaG9ydGdpX3JhdGUpOworCX0KKworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBBUkZSMCArIHJhdHJfaW5kZXggKiA0LCByYXRyX3ZhbHVlKTsKKwlpZiAocmF0cl92YWx1ZSAmIDB4ZmZmZmYwMDApCisJCXJ0bDkyc19waHlfc2V0X2Z3X2NtZChodywgRldfQ01EX1JBX1JFRlJFU0hfTik7CisJZWxzZQorCQlydGw5MnNfcGh5X3NldF9md19jbWQoaHcsIEZXX0NNRF9SQV9SRUZSRVNIX0JHKTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUkFUUiwgREJHX0RNRVNHLAorCQkgKCIleFxuIiwgcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgQVJGUjApKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDkyc2VfdXBkYXRlX2hhbF9yYXRlX21hc2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJCQkgdTggcnNzaV9sZXZlbCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9zdGFfaW5mbyAqc3RhX2VudHJ5ID0gTlVMTDsKKwl1MzIgcmF0cl9iaXRtYXA7CisJdTggcmF0cl9pbmRleCA9IDA7CisJdTggY3VydHhid180MG1oeiA9IChzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MCkKKwkJCQk/IDEgOiAwOworCXU4IGN1cnNob3J0Z2lfNDBtaHogPSAoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TR0lfNDApID8KKwkJCQkxIDogMDsKKwl1OCBjdXJzaG9ydGdpXzIwbWh6ID0gKHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU0dJXzIwKSA/CisJCQkJMSA6IDA7CisJZW51bSB3aXJlbGVzc19tb2RlIHdpcmVsZXNzbW9kZSA9IDA7CisJYm9vbCBzaG9ydGdpID0gZmFsc2U7CisJdTMyIHJhdHJfdmFsdWUgPSAwOworCXU4IHNob3J0Z2lfcmF0ZSA9IDA7CisJdTMyIG1hc2sgPSAwOworCXUzMiBiYW5kID0gMDsKKwlib29sIGJtdWx0aWNhc3QgPSBmYWxzZTsKKwl1OCBtYWNpZCA9IDA7CisJdTggbWltb19wcyA9IElFRUU4MDIxMV9TTVBTX09GRjsKKworCXN0YV9lbnRyeSA9IChzdHJ1Y3QgcnRsX3N0YV9pbmZvICopIHN0YS0+ZHJ2X3ByaXY7CisJd2lyZWxlc3Ntb2RlID0gc3RhX2VudHJ5LT53aXJlbGVzc19tb2RlOworCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQljdXJ0eGJ3XzQwbWh6ID0gbWFjLT5id180MDsKKwllbHNlIGlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAorCQltYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkJbWFjaWQgPSBzdGEtPmFpZCArIDE7CisKKwlpZiAocnRsaGFsLT5jdXJyZW50X2JhbmR0eXBlID09IEJBTkRfT05fNUcpCisJCXJhdHJfYml0bWFwID0gc3RhLT5zdXBwX3JhdGVzWzFdIDw8IDQ7CisJZWxzZQorCQlyYXRyX2JpdG1hcCA9IHN0YS0+c3VwcF9yYXRlc1swXTsKKwlyYXRyX2JpdG1hcCB8PSAoc3RhLT5odF9jYXAubWNzLnJ4X21hc2tbMV0gPDwgMjAgfAorCQkJc3RhLT5odF9jYXAubWNzLnJ4X21hc2tbMF0gPDwgMTIpOworCXN3aXRjaCAod2lyZWxlc3Ntb2RlKSB7CisJY2FzZSBXSVJFTEVTU19NT0RFX0I6CisJCWJhbmQgfD0gV0lSRUxFU1NfMTFCOworCQlyYXRyX2luZGV4ID0gUkFUUl9JTlhfV0lSRUxFU1NfQjsKKwkJaWYgKHJhdHJfYml0bWFwICYgMHgwMDAwMDAwYykKKwkJCXJhdHJfYml0bWFwICY9IDB4MDAwMDAwMGQ7CisJCWVsc2UKKwkJCXJhdHJfYml0bWFwICY9IDB4MDAwMDAwMGY7CisJCWJyZWFrOworCWNhc2UgV0lSRUxFU1NfTU9ERV9HOgorCQliYW5kIHw9IChXSVJFTEVTU18xMUcgfCBXSVJFTEVTU18xMUIpOworCQlyYXRyX2luZGV4ID0gUkFUUl9JTlhfV0lSRUxFU1NfR0I7CisKKwkJaWYgKHJzc2lfbGV2ZWwgPT0gMSkKKwkJCXJhdHJfYml0bWFwICY9IDB4MDAwMDBmMDA7CisJCWVsc2UgaWYgKHJzc2lfbGV2ZWwgPT0gMikKKwkJCXJhdHJfYml0bWFwICY9IDB4MDAwMDBmZjA7CisJCWVsc2UKKwkJCXJhdHJfYml0bWFwICY9IDB4MDAwMDBmZjU7CisJCWJyZWFrOworCWNhc2UgV0lSRUxFU1NfTU9ERV9BOgorCQliYW5kIHw9IFdJUkVMRVNTXzExQTsKKwkJcmF0cl9pbmRleCA9IFJBVFJfSU5YX1dJUkVMRVNTX0E7CisJCXJhdHJfYml0bWFwICY9IDB4MDAwMDBmZjA7CisJCWJyZWFrOworCWNhc2UgV0lSRUxFU1NfTU9ERV9OXzI0RzoKKwljYXNlIFdJUkVMRVNTX01PREVfTl81RzoKKwkJYmFuZCB8PSAoV0lSRUxFU1NfMTFOIHwgV0lSRUxFU1NfMTFHIHwgV0lSRUxFU1NfMTFCKTsKKwkJcmF0cl9pbmRleCA9IFJBVFJfSU5YX1dJUkVMRVNTX05HQjsKKworCQlpZiAobWltb19wcyA9PSBJRUVFODAyMTFfU01QU19TVEFUSUMpIHsKKwkJCWlmIChyc3NpX2xldmVsID09IDEpCisJCQkJcmF0cl9iaXRtYXAgJj0gMHgwMDA3MDAwMDsKKwkJCWVsc2UgaWYgKHJzc2lfbGV2ZWwgPT0gMikKKwkJCQlyYXRyX2JpdG1hcCAmPSAweDAwMDdmMDAwOworCQkJZWxzZQorCQkJCXJhdHJfYml0bWFwICY9IDB4MDAwN2YwMDU7CisJCX0gZWxzZSB7CisJCQlpZiAocnRscGh5LT5yZl90eXBlID09IFJGXzFUMlIgfHwKKwkJCQlydGxwaHktPnJmX3R5cGUgPT0gUkZfMVQxUikgeworCQkJCWlmIChyc3NpX2xldmVsID09IDEpIHsKKwkJCQkJCXJhdHJfYml0bWFwICY9IDB4MDAwZjAwMDA7CisJCQkJfSBlbHNlIGlmIChyc3NpX2xldmVsID09IDMpIHsKKwkJCQkJcmF0cl9iaXRtYXAgJj0gMHgwMDBmYzAwMDsKKwkJCQl9IGVsc2UgaWYgKHJzc2lfbGV2ZWwgPT0gNSkgeworCQkJCQkJcmF0cl9iaXRtYXAgJj0gMHgwMDBmZjAwMDsKKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoY3VydHhid180MG1oeikKKwkJCQkJCXJhdHJfYml0bWFwICY9IDB4MDAwZmYwMTU7CisJCQkJCWVsc2UKKwkJCQkJCXJhdHJfYml0bWFwICY9IDB4MDAwZmYwMDU7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAocnNzaV9sZXZlbCA9PSAxKSB7CisJCQkJCXJhdHJfYml0bWFwICY9IDB4MGY4ZjAwMDA7CisJCQkJfSBlbHNlIGlmIChyc3NpX2xldmVsID09IDMpIHsKKwkJCQkJcmF0cl9iaXRtYXAgJj0gMHgwZjhmYzAwMDsKKwkJCQl9IGVsc2UgaWYgKHJzc2lfbGV2ZWwgPT0gNSkgeworCQkJCQlyYXRyX2JpdG1hcCAmPSAweDBmOGZmMDAwOworCQkJCX0gZWxzZSB7CisJCQkJCWlmIChjdXJ0eGJ3XzQwbWh6KQorCQkJCQkJcmF0cl9iaXRtYXAgJj0gMHgwZjhmZjAxNTsKKwkJCQkJZWxzZQorCQkJCQkJcmF0cl9iaXRtYXAgJj0gMHgwZjhmZjAwNTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlpZiAoKGN1cnR4YndfNDBtaHogJiYgY3Vyc2hvcnRnaV80MG1oeikgfHwKKwkJICAgICghY3VydHhid180MG1oeiAmJiBjdXJzaG9ydGdpXzIwbWh6KSkgeworCQkJaWYgKG1hY2lkID09IDApCisJCQkJc2hvcnRnaSA9IHRydWU7CisJCQllbHNlIGlmIChtYWNpZCA9PSAxKQorCQkJCXNob3J0Z2kgPSBmYWxzZTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQliYW5kIHw9IChXSVJFTEVTU18xMU4gfCBXSVJFTEVTU18xMUcgfCBXSVJFTEVTU18xMUIpOworCQlyYXRyX2luZGV4ID0gUkFUUl9JTlhfV0lSRUxFU1NfTkdCOworCisJCWlmIChydGxwaHktPnJmX3R5cGUgPT0gUkZfMVQyUikKKwkJCXJhdHJfYml0bWFwICY9IDB4MDAwZmYwZmY7CisJCWVsc2UKKwkJCXJhdHJfYml0bWFwICY9IDB4MGY4ZmYwZmY7CisJCWJyZWFrOworCX0KKworCWlmIChydGxwcml2LT5ydGxoYWwudmVyc2lvbiA+PSBWRVJTSU9OXzgxOTJTX0JDVVQpCisJCXJhdHJfYml0bWFwICY9IDB4MEZGRkZGRkY7CisJZWxzZSBpZiAocnRscHJpdi0+cnRsaGFsLnZlcnNpb24gPT0gVkVSU0lPTl84MTkyU19BQ1VUKQorCQlyYXRyX2JpdG1hcCAmPSAweDBGRkZGRkYwOworCisJaWYgKHNob3J0Z2kpIHsKKwkJcmF0cl9iaXRtYXAgfD0gMHgxMDAwMDAwMDsKKwkJLyogR2V0IE1BWCBNQ1MgYXZhaWxhYmxlLiAqLworCQlyYXRyX3ZhbHVlID0gKHJhdHJfYml0bWFwID4+IDEyKTsKKwkJZm9yIChzaG9ydGdpX3JhdGUgPSAxNTsgc2hvcnRnaV9yYXRlID4gMDsgc2hvcnRnaV9yYXRlLS0pIHsKKwkJCWlmICgoMSA8PCBzaG9ydGdpX3JhdGUpICYgcmF0cl92YWx1ZSkKKwkJCQlicmVhazsKKwkJfQorCisJCXNob3J0Z2lfcmF0ZSA9IChzaG9ydGdpX3JhdGUgPDwgMTIpIHwgKHNob3J0Z2lfcmF0ZSA8PCA4KSB8CisJCQkoc2hvcnRnaV9yYXRlIDw8IDQpIHwgKHNob3J0Z2lfcmF0ZSk7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFNHX1JBVEUsIHNob3J0Z2lfcmF0ZSk7CisJfQorCisJbWFzayB8PSAoYm11bHRpY2FzdCA/IDEgOiAwKSA8PCA5IHwgKG1hY2lkICYgMHgxZikgPDwgNCB8IChiYW5kICYgMHhmKTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUkFUUiwgREJHX1RSQUNFLCAoIm1hc2sgPSAleCwgYml0bWFwID0gJXhcbiIsCisJCQltYXNrLCByYXRyX2JpdG1hcCkpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCAweDJjNCwgcmF0cl9iaXRtYXApOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBXRk01LCAoRldfUkFfVVBEQVRFX01BU0sgfCAobWFzayA8PCA4KSkpOworCisJaWYgKG1hY2lkICE9IDApCisJCXN0YV9lbnRyeS0+cmF0cl9pbmRleCA9IHJhdHJfaW5kZXg7Cit9CisKK3ZvaWQgcnRsOTJzZV91cGRhdGVfaGFsX3JhdGVfdGJsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1OCByc3NpX2xldmVsKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCWlmIChydGxwcml2LT5kbS51c2VyYW1hc2spCisJCXJ0bDkyc2VfdXBkYXRlX2hhbF9yYXRlX21hc2soaHcsIHN0YSwgcnNzaV9sZXZlbCk7CisJZWxzZQorCQlydGw5MnNlX3VwZGF0ZV9oYWxfcmF0ZV90YWJsZShodywgc3RhKTsKK30KKwordm9pZCBydGw5MnNlX3VwZGF0ZV9jaGFubmVsX2FjY2Vzc19zZXR0aW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXUxNiBzaWZzX3RpbWVyOworCisJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9TTE9UX1RJTUUsCisJCQkJICAgICAgKHU4ICopJm1hYy0+c2xvdF90aW1lKTsKKwlzaWZzX3RpbWVyID0gMHgwZTBlOworCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfU0lGUywgKHU4ICopJnNpZnNfdGltZXIpOworCit9CisKKy8qIHRoaXMgaWZ1bmN0aW9uIGlzIGZvciBSRktJTEwsIGl0J3MgZGlmZmVyZW50IHdpdGggd2luZG93cywKKyAqIGJlY2F1c2UgVUkgd2lsbCBkaXNhYmxlIHdpcmVsZXNzIHdoZW4gR1BJTyBSYWRpbyBPZmYuCisgKiBBbmQgaGVyZSB3ZSBub3QgY2hlY2sgb3IgRGlzYWJsZS9FbmFibGUgQVNQTSBsaWtlIHdpbmRvd3MqLworYm9vbCBydGw5MnNlX2dwaW9fcmFkaW9fb25fb2ZmX2NoZWNraW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqdmFsaWQpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJZW51bSByZl9wd3JzdGF0ZSByZnB3cl90b3NldCwgY3VyX3Jmc3RhdGU7CisJdW5zaWduZWQgbG9uZyBmbGFnID0gMDsKKwlib29sIGFjdHVhbGx5c2V0ID0gZmFsc2U7CisJYm9vbCB0dXJub25ieXBvd2VyZG9tYWluID0gZmFsc2U7CisKKwkvKiBqdXN0IDgxOTFzZSBjYW4gY2hlY2sgZ3BpbyBiZWZvcmUgZmlyc3R1cCwgOTJjLzkyZCBoYXZlIGZpeGVkIGl0ICovCisJaWYgKChydGxwY2ktPnVwX2ZpcnN0X3RpbWUgPT0gMSkgfHwgKHJ0bHBjaS0+YmVpbmdfaW5pdF9hZGFwdGVyKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHBwc2MtPnN3cmZfcHJvY2Vzc2luZykKKwkJcmV0dXJuIGZhbHNlOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0bHByaXYtPmxvY2tzLnJmX3BzX2xvY2ssIGZsYWcpOworCWlmIChwcHNjLT5yZmNoYW5nZV9pbnByb2dyZXNzKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLnJmX3BzX2xvY2ssIGZsYWcpOworCQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIHsKKwkJcHBzYy0+cmZjaGFuZ2VfaW5wcm9ncmVzcyA9IHRydWU7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLnJmX3BzX2xvY2ssIGZsYWcpOworCX0KKworCWN1cl9yZnN0YXRlID0gcHBzYy0+cmZwd3Jfc3RhdGU7CisKKwkvKiBiZWNhdXNlIGFmdGVyIF9ydGw5MnNfcGh5X3NldF9yZmhhbHQsIGFsbCBwb3dlcgorCSAqIGNsb3NlZCwgc28gd2UgbXVzdCBvcGVuIHNvbWUgcG93ZXIgZm9yIEdQSU8gY2hlY2ssCisJICogb3Igd2Ugd2lsbCBhbHdheXMgY2hlY2sgR1BJTyBSRk9GRiBoZXJlLAorCSAqIEFuZCB3ZSBzaG91bGQgY2xvc2UgcG93ZXIgYWZ0ZXIgR1BJTyBjaGVjayAqLworCWlmIChSVF9JTl9QU19MRVZFTChwcHNjLCBSVF9SRl9PRkZfTEVWTF9IQUxUX05JQykpIHsKKwkJX3J0bDkyc2VfcG93ZXJfZG9tYWluX2luaXQoaHcpOworCQl0dXJub25ieXBvd2VyZG9tYWluID0gdHJ1ZTsKKwl9CisKKwlyZnB3cl90b3NldCA9IF9ydGw5MnNlX3JmX29ub2ZmX2RldGVjdChodyk7CisKKwlpZiAoKHBwc2MtPmh3cmFkaW9vZmYgPT0gdHJ1ZSkgJiYgKHJmcHdyX3Rvc2V0ID09IEVSRk9OKSkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1JGLCBEQkdfRE1FU0csCisJCQkgKCJSRktJTEwtSFcgUmFkaW8gT04sIFJGIE9OXG4iKSk7CisKKwkJcmZwd3JfdG9zZXQgPSBFUkZPTjsKKwkJcHBzYy0+aHdyYWRpb29mZiA9IGZhbHNlOworCQlhY3R1YWxseXNldCA9IHRydWU7CisJfSBlbHNlIGlmICgocHBzYy0+aHdyYWRpb29mZiA9PSBmYWxzZSkgJiYgKHJmcHdyX3Rvc2V0ID09IEVSRk9GRikpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9SRiwgREJHX0RNRVNHLAorCQkJICgiUkZLSUxMLUhXIFJhZGlvIE9GRiwgUkYgT0ZGXG4iKSk7CisKKwkJcmZwd3JfdG9zZXQgPSBFUkZPRkY7CisJCXBwc2MtPmh3cmFkaW9vZmYgPSB0cnVlOworCQlhY3R1YWxseXNldCA9IHRydWU7CisJfQorCisJaWYgKGFjdHVhbGx5c2V0KSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZydGxwcml2LT5sb2Nrcy5yZl9wc19sb2NrLCBmbGFnKTsKKwkJcHBzYy0+cmZjaGFuZ2VfaW5wcm9ncmVzcyA9IGZhbHNlOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5yZl9wc19sb2NrLCBmbGFnKTsKKworCS8qIHRoaXMgbm90IGluY2x1ZGUgaWZjb25maWcgd2xhbjAgZG93biBjYXNlICovCisJLyogfSBlbHNlIGlmIChyZnB3cl90b3NldCA9PSBFUkZPRkYgfHwgY3VyX3Jmc3RhdGUgPT0gRVJGT0ZGKSB7ICovCisJfSBlbHNlIHsKKwkJLyogYmVjYXVzZSBwb3dlcl9kb21haW5faW5pdCBtYXkgYmUgaGFwcGVuIHdoZW4KKwkJICogX3J0bDkyc19waHlfc2V0X3JmaGFsdCwgdGhpcyB3aWxsIG9wZW4gc29tZSBwb3dlcnMKKwkJICogYW5kIGNhdXNlIGN1cnJlbnQgaW5jcmVhc2luZyBhYm91dCA0MCBtQSBmb3IgaXBzLAorCQkgKiByZm9mZiBhbmQgaWZjb25maWcgZG93biwgc28gd2Ugc2V0CisJCSAqIF9ydGw5MnNfcGh5X3NldF9yZmhhbHQgYWdhaW4gaGVyZSAqLworCQlpZiAocHBzYy0+cmVnX3JmcHNfbGV2ZWwgJiBSVF9SRl9PRkZfTEVWTF9IQUxUX05JQyAmJgorCQkJdHVybm9uYnlwb3dlcmRvbWFpbikgeworCQkJX3J0bDkyc19waHlfc2V0X3JmaGFsdChodyk7CisJCQlSVF9TRVRfUFNfTEVWRUwocHBzYywgUlRfUkZfT0ZGX0xFVkxfSEFMVF9OSUMpOworCQl9CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0bHByaXYtPmxvY2tzLnJmX3BzX2xvY2ssIGZsYWcpOworCQlwcHNjLT5yZmNoYW5nZV9pbnByb2dyZXNzID0gZmFsc2U7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLnJmX3BzX2xvY2ssIGZsYWcpOworCX0KKworCSp2YWxpZCA9IDE7CisJcmV0dXJuICFwcHNjLT5od3JhZGlvb2ZmOworCit9CisKKy8qIElzX3dlcGtleSBqdXN0IHVzZWQgZm9yIFdFUCB1c2VkIGFzIGdyb3VwICYgcGFpcndpc2Uga2V5CisgKiBpZiBwYWlyd2lzZSBpcyBBRVMgYW5nIGdyb3VwIGlzIFdFUCBJc193ZXBrZXkgPT0gZmFsc2UuKi8KK3ZvaWQgcnRsOTJzZV9zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIga2V5X2luZGV4LCB1OCAqcF9tYWNhZGRyLAorCWJvb2wgaXNfZ3JvdXAsIHU4IGVuY19hbGdvLCBib29sIGlzX3dlcGtleSwgYm9vbCBjbGVhcl9hbGwpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKKwl1OCAqbWFjYWRkciA9IHBfbWFjYWRkcjsKKworCXUzMiBlbnRyeV9pZCA9IDA7CisJYm9vbCBpc19wYWlyd2lzZSA9IGZhbHNlOworCisJc3RhdGljIHU4IGNhbV9jb25zdF9hZGRyWzRdWzZdID0geworCQl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJCXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxfSwKKwkJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDJ9LAorCQl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwM30KKwl9OworCXN0YXRpYyB1OCBjYW1fY29uc3RfYnJvYWRbXSA9IHsKKwkJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorCX07CisKKwlpZiAoY2xlYXJfYWxsKSB7CisJCXU4IGlkeCA9IDA7CisJCXU4IGNhbV9vZmZzZXQgPSAwOworCQl1OCBjbGVhcl9udW1iZXIgPSA1OworCisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfRE1FU0csICgiY2xlYXJfYWxsXG4iKSk7CisKKwkJZm9yIChpZHggPSAwOyBpZHggPCBjbGVhcl9udW1iZXI7IGlkeCsrKSB7CisJCQlydGxfY2FtX21hcmtfaW52YWxpZChodywgY2FtX29mZnNldCArIGlkeCk7CisJCQlydGxfY2FtX2VtcHR5X2VudHJ5KGh3LCBjYW1fb2Zmc2V0ICsgaWR4KTsKKworCQkJaWYgKGlkeCA8IDUpIHsKKwkJCQltZW1zZXQocnRscHJpdi0+c2VjLmtleV9idWZbaWR4XSwgMCwKKwkJCQkgICAgICAgTUFYX0tFWV9MRU4pOworCQkJCXJ0bHByaXYtPnNlYy5rZXlfbGVuW2lkeF0gPSAwOworCQkJfQorCQl9CisKKwl9IGVsc2UgeworCQlzd2l0Y2ggKGVuY19hbGdvKSB7CisJCWNhc2UgV0VQNDBfRU5DUllQVElPTjoKKwkJCWVuY19hbGdvID0gQ0FNX1dFUDQwOworCQkJYnJlYWs7CisJCWNhc2UgV0VQMTA0X0VOQ1JZUFRJT046CisJCQllbmNfYWxnbyA9IENBTV9XRVAxMDQ7CisJCQlicmVhazsKKwkJY2FzZSBUS0lQX0VOQ1JZUFRJT046CisJCQllbmNfYWxnbyA9IENBTV9US0lQOworCQkJYnJlYWs7CisJCWNhc2UgQUVTQ0NNUF9FTkNSWVBUSU9OOgorCQkJZW5jX2FsZ28gPSBDQU1fQUVTOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJCQkoInN3aXRjaCBjYXNlIG5vdCBwcm9jZXNzXG4iKSk7CisJCQllbmNfYWxnbyA9IENBTV9US0lQOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaXNfd2Vwa2V5IHx8IHJ0bHByaXYtPnNlYy51c2VfZGVmYXVsdGtleSkgeworCQkJbWFjYWRkciA9IGNhbV9jb25zdF9hZGRyW2tleV9pbmRleF07CisJCQllbnRyeV9pZCA9IGtleV9pbmRleDsKKwkJfSBlbHNlIHsKKwkJCWlmIChpc19ncm91cCkgeworCQkJCW1hY2FkZHIgPSBjYW1fY29uc3RfYnJvYWQ7CisJCQkJZW50cnlfaWQgPSBrZXlfaW5kZXg7CisJCQl9IGVsc2UgeworCQkJCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgeworCQkJCQllbnRyeV9pZCA9IHJ0bF9jYW1fZ2V0X2ZyZWVfZW50cnkoaHcsCisJCQkJCQkJCSBwX21hY2FkZHIpOworCQkJCQlpZiAoZW50cnlfaWQgPj0gIFRPVEFMX0NBTV9FTlRSWSkgeworCQkJCQkJUlRfVFJBQ0UocnRscHJpdiwKKwkJCQkJCSAgIENPTVBfU0VDLCBEQkdfRU1FUkcsCisJCQkJCQkgICAoIkNhbiBub3QgZmluZCBmcmVlIGh3IgorCQkJCQkJICAgIiBzZWN1cml0eSBjYW0gZW50cnlcbiIpKTsKKwkJCQkJCXJldHVybjsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWVudHJ5X2lkID0gQ0FNX1BBSVJXSVNFX0tFWV9QT1NJVElPTjsKKwkJCQl9CisKKwkJCQlrZXlfaW5kZXggPSBQQUlSV0lTRV9LRVlJRFg7CisJCQkJaXNfcGFpcndpc2UgPSB0cnVlOworCQkJfQorCQl9CisKKwkJaWYgKHJ0bHByaXYtPnNlYy5rZXlfbGVuW2tleV9pbmRleF0gPT0gMCkgeworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywKKwkJCQkgKCJkZWxldGUgb25lIGVudHJ5LCBlbnRyeV9pZCBpcyAlZFxuIiwKKwkJCQkgZW50cnlfaWQpKTsKKwkJCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKKwkJCQlydGxfY2FtX2RlbF9lbnRyeShodywgcF9tYWNhZGRyKTsKKwkJCXJ0bF9jYW1fZGVsZXRlX29uZV9lbnRyeShodywgcF9tYWNhZGRyLCBlbnRyeV9pZCk7CisJCX0gZWxzZSB7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0xPVUQsCisJCQkJICgiVGhlIGluc2VydCBLRVkgbGVuZ3RoIGlzICVkXG4iLAorCQkJCSAgcnRscHJpdi0+c2VjLmtleV9sZW5bUEFJUldJU0VfS0VZSURYXSkpOworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19MT1VELAorCQkJCSAoIlRoZSBpbnNlcnQgS0VZICBpcyAleCAleFxuIiwKKwkJCQkgIHJ0bHByaXYtPnNlYy5rZXlfYnVmWzBdWzBdLAorCQkJCSAgcnRscHJpdi0+c2VjLmtleV9idWZbMF1bMV0pKTsKKworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywKKwkJCQkgKCJhZGQgb25lIGVudHJ5XG4iKSk7CisJCQlpZiAoaXNfcGFpcndpc2UpIHsKKwkJCQlSVF9QUklOVF9EQVRBKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfTE9VRCwKKwkJCQkgICAgICAiUGFpcndpYXNlIEtleSBjb250ZW50IDoiLAorCQkJCSAgICAgICBydGxwcml2LT5zZWMucGFpcndpc2Vfa2V5LAorCQkJCSAgICAgICBydGxwcml2LT5zZWMua2V5X2xlbltQQUlSV0lTRV9LRVlJRFhdKTsKKworCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfRE1FU0csCisJCQkJCSAoInNldCBQYWlyd2lhc2Uga2V5XG4iKSk7CisKKwkJCQlydGxfY2FtX2FkZF9vbmVfZW50cnkoaHcsIG1hY2FkZHIsIGtleV9pbmRleCwKKwkJCQkJZW50cnlfaWQsIGVuY19hbGdvLAorCQkJCQlDQU1fQ09ORklHX05PX1VTRURLLAorCQkJCQlydGxwcml2LT5zZWMua2V5X2J1ZltrZXlfaW5kZXhdKTsKKwkJCX0gZWxzZSB7CisJCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywKKwkJCQkJICgic2V0IGdyb3VwIGtleVxuIikpOworCisJCQkJaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCQkJCXJ0bF9jYW1fYWRkX29uZV9lbnRyeShodywKKwkJCQkJCXJ0bGVmdXNlLT5kZXZfYWRkciwKKwkJCQkJCVBBSVJXSVNFX0tFWUlEWCwKKwkJCQkJCUNBTV9QQUlSV0lTRV9LRVlfUE9TSVRJT04sCisJCQkJCQllbmNfYWxnbywgQ0FNX0NPTkZJR19OT19VU0VESywKKwkJCQkJCXJ0bHByaXYtPnNlYy5rZXlfYnVmW2VudHJ5X2lkXSk7CisJCQkJfQorCisJCQkJcnRsX2NhbV9hZGRfb25lX2VudHJ5KGh3LCBtYWNhZGRyLCBrZXlfaW5kZXgsCisJCQkJCSAgICAgIGVudHJ5X2lkLCBlbmNfYWxnbywKKwkJCQkJICAgICAgQ0FNX0NPTkZJR19OT19VU0VESywKKwkJCQkJICAgICAgcnRscHJpdi0+c2VjLmtleV9idWZbZW50cnlfaWRdKTsKKwkJCX0KKworCQl9CisJfQorfQorCit2b2lkIHJ0bDkyc2Vfc3VzcGVuZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCisJcnRscGNpLT51cF9maXJzdF90aW1lID0gdHJ1ZTsKK30KKwordm9pZCBydGw5MnNlX3Jlc3VtZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXUzMiB2YWw7CisKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocnRscGNpLT5wZGV2LCAweDQwLCAmdmFsKTsKKwlpZiAoKHZhbCAmIDB4MDAwMGZmMDApICE9IDApCisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocnRscGNpLT5wZGV2LCAweDQwLAorCQkJdmFsICYgMHhmZmZmMDBmZik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvaHcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTYwYTliCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvaHcuaApAQCAtMCwwICsxLDc5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19SRUFMVEVLX1BDSTkyU0VfSFdfSF9fCisjZGVmaW5lIF9fUkVBTFRFS19QQ0k5MlNFX0hXX0hfXworCisjZGVmaW5lIE1TUl9MSU5LX01BTkFHRUQgICAyCisjZGVmaW5lIE1TUl9MSU5LX05PTkUgICAgICAwCisjZGVmaW5lIE1TUl9MSU5LX1NISUZUICAgICAwCisjZGVmaW5lIE1TUl9MSU5LX0FESE9DICAgICAxCisjZGVmaW5lIE1TUl9MSU5LX01BU1RFUiAgICAzCisKK2VudW0gV0lSRUxFU1NfTkVUV09SS19UWVBFIHsKKwlXSVJFTEVTU18xMUIgPSAxLAorCVdJUkVMRVNTXzExRyA9IDIsCisJV0lSRUxFU1NfMTFBID0gNCwKKwlXSVJFTEVTU18xMU4gPSA4Cit9OworCit2b2lkIHJ0bDkyc2VfZ2V0X2h3X3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCXU4IHZhcmlhYmxlLCB1OCAqdmFsKTsKK3ZvaWQgcnRsOTJzZV9yZWFkX2VlcHJvbV9pbmZvKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJzZV9pbnRlcnJ1cHRfcmVjb2duaXplZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgIHUzMiAqaW50YSwgdTMyICppbnRiKTsKK2ludCBydGw5MnNlX2h3X2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw5MnNlX2NhcmRfZGlzYWJsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyc2VfZW5hYmxlX2ludGVycnVwdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyc2VfZGlzYWJsZV9pbnRlcnJ1cHQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworaW50IHJ0bDkyc2Vfc2V0X25ldHdvcmtfdHlwZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgZW51bSBubDgwMjExX2lmdHlwZSB0eXBlKTsKK3ZvaWQgcnRsOTJzZV9zZXRfY2hlY2tfYnNzaWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgY2hlY2tfYnNzaWQpOwordm9pZCBydGw5MnNlX3NldF9tYWNfYWRkcihzdHJ1Y3QgcnRsX2lvICppbywgY29uc3QgdTggKiBhZGRyKTsKK3ZvaWQgcnRsOTJzZV9zZXRfcW9zKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgYWNpKTsKK3ZvaWQgcnRsOTJzZV9zZXRfYmVhY29uX3JlbGF0ZWRfcmVnaXN0ZXJzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJzZV9zZXRfYmVhY29uX2ludGVydmFsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJzZV91cGRhdGVfaW50ZXJydXB0X21hc2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgdTMyIGFkZF9tc3IsIHUzMiBybV9tc3IpOwordm9pZCBydGw5MnNlX3NldF9od19yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHZhcmlhYmxlLAorCQkJdTggKnZhbCk7Cit2b2lkIHJ0bDkyc2VfdXBkYXRlX2hhbF9yYXRlX3RibChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTggcnNzaV9sZXZlbCk7Cit2b2lkIHJ0bDkyc2VfdXBkYXRlX2NoYW5uZWxfYWNjZXNzX3NldHRpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworYm9vbCBydGw5MnNlX2dwaW9fcmFkaW9fb25fb2ZmX2NoZWNraW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQl1OCAqdmFsaWQpOwordm9pZCBydGw4MTkyc2VfZ3Bpb2JpdDNfY2ZnX2lucHV0bW9kZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyc2VfZW5hYmxlX2h3X3NlY3VyaXR5X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyc2Vfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJICAgICB1MzIga2V5X2luZGV4LCB1OCAqbWFjYWRkciwgYm9vbCBpc19ncm91cCwKKwkJICAgICB1OCBlbmNfYWxnbywgYm9vbCBpc193ZXBrZXksIGJvb2wgY2xlYXJfYWxsKTsKK3ZvaWQgcnRsOTJzZV9zdXNwZW5kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJzZV9yZXN1bWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvbGVkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9sZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDRmNjY2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvbGVkLmMKQEAgLTAsMCArMSwxNDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiLi4vd2lmaS5oIgorI2luY2x1ZGUgIi4uL3BjaS5oIgorI2luY2x1ZGUgInJlZy5oIgorI2luY2x1ZGUgImxlZC5oIgorCitzdGF0aWMgdm9pZCBfcnRsOTJzZV9pbml0X2xlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgIHN0cnVjdCBydGxfbGVkICpwbGVkLCBlbnVtIHJ0bF9sZWRfcGluIGxlZHBpbikKK3sKKwlwbGVkLT5odyA9IGh3OworCXBsZWQtPmxlZHBpbiA9IGxlZHBpbjsKKwlwbGVkLT5sZWRvbiA9IGZhbHNlOworfQorCit2b2lkIHJ0bDkyc2VfaW5pdF9zd19sZWRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcGNpX3ByaXYgKnBjaXByaXYgPSBydGxfcGNpcHJpdihodyk7CisJX3J0bDkyc2VfaW5pdF9sZWQoaHcsICYocGNpcHJpdi0+bGVkY3RsLnN3X2xlZDApLCBMRURfUElOX0xFRDApOworCV9ydGw5MnNlX2luaXRfbGVkKGh3LCAmKHBjaXByaXYtPmxlZGN0bC5zd19sZWQxKSwgTEVEX1BJTl9MRUQxKTsKK30KKwordm9pZCBydGw5MnNlX3N3X2xlZF9vbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHJ0bF9sZWQgKnBsZWQpCit7CisJdTggbGVkY2ZnOworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTEVELCBEQkdfTE9VRCwKKwkJICgiTGVkQWRkcjolWCBsZWRwaW49JWRcbiIsIExFRENGRywgcGxlZC0+bGVkcGluKSk7CisKKwlsZWRjZmcgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIExFRENGRyk7CisKKwlzd2l0Y2ggKHBsZWQtPmxlZHBpbikgeworCWNhc2UgTEVEX1BJTl9HUElPMDoKKwkJYnJlYWs7CisJY2FzZSBMRURfUElOX0xFRDA6CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIExFRENGRywgbGVkY2ZnICYgMHhmMCk7CisJCWJyZWFrOworCWNhc2UgTEVEX1BJTl9MRUQxOgorCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBMRURDRkcsIGxlZGNmZyAmIDB4MGYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJICgic3dpdGNoIGNhc2Ugbm90IHByb2Nlc3NcbiIpKTsKKwkJYnJlYWs7CisJfQorCXBsZWQtPmxlZG9uID0gdHJ1ZTsKK30KKwordm9pZCBydGw5MnNlX3N3X2xlZF9vZmYoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBydGxfbGVkICpwbGVkKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOworCXU4IGxlZGNmZzsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTEVELCBEQkdfTE9VRCwKKwkJICgiTGVkQWRkcjolWCBsZWRwaW49JWRcbiIsIExFRENGRywgcGxlZC0+bGVkcGluKSk7CisKKwlsZWRjZmcgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIExFRENGRyk7CisKKwlzd2l0Y2ggKHBsZWQtPmxlZHBpbikgeworCWNhc2UgTEVEX1BJTl9HUElPMDoKKwkJYnJlYWs7CisJY2FzZSBMRURfUElOX0xFRDA6CisJCWxlZGNmZyAmPSAweGYwOworCQlpZiAocGNpcHJpdi0+bGVkY3RsLmxlZF9vcGVuZHJhaW4gPT0gdHJ1ZSkKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIExFRENGRywgKGxlZGNmZyB8IEJJVCgxKSkpOworCQllbHNlCisJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBMRURDRkcsIChsZWRjZmcgfCBCSVQoMykpKTsKKwkJYnJlYWs7CisJY2FzZSBMRURfUElOX0xFRDE6CisJCWxlZGNmZyAmPSAweDBmOworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBMRURDRkcsIChsZWRjZmcgfCBCSVQoMykpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoInN3aXRjaCBjYXNlIG5vdCBwcm9jZXNzXG4iKSk7CisJCWJyZWFrOworCX0KKwlwbGVkLT5sZWRvbiA9IGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJzZV9zd19sZWRfY29udHJvbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgZW51bSBsZWRfY3RsX21vZGUgbGVkYWN0aW9uKQoreworCXN0cnVjdCBydGxfcGNpX3ByaXYgKnBjaXByaXYgPSBydGxfcGNpcHJpdihodyk7CisJc3RydWN0IHJ0bF9sZWQgKnBMZWQwID0gJihwY2lwcml2LT5sZWRjdGwuc3dfbGVkMCk7CisJc3dpdGNoIChsZWRhY3Rpb24pIHsKKwljYXNlIExFRF9DVExfUE9XRVJfT046CisJY2FzZSBMRURfQ1RMX0xJTks6CisJY2FzZSBMRURfQ1RMX05PX0xJTks6CisJCXJ0bDkyc2Vfc3dfbGVkX29uKGh3LCBwTGVkMCk7CisJCWJyZWFrOworCWNhc2UgTEVEX0NUTF9QT1dFUl9PRkY6CisJCXJ0bDkyc2Vfc3dfbGVkX29mZihodywgcExlZDApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3ZvaWQgcnRsOTJzZV9sZWRfY29udHJvbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBsZWRfY3RsX21vZGUgbGVkYWN0aW9uKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKworCWlmICgocHBzYy0+cmZvZmZfcmVhc29uID4gUkZfQ0hBTkdFX0JZX1BTKSAmJgorCSAgICAobGVkYWN0aW9uID09IExFRF9DVExfVFggfHwKKwkgICAgbGVkYWN0aW9uID09IExFRF9DVExfUlggfHwKKwkgICAgbGVkYWN0aW9uID09IExFRF9DVExfU0lURV9TVVJWRVkgfHwKKwkgICAgbGVkYWN0aW9uID09IExFRF9DVExfTElOSyB8fAorCSAgICBsZWRhY3Rpb24gPT0gTEVEX0NUTF9OT19MSU5LIHx8CisJICAgIGxlZGFjdGlvbiA9PSBMRURfQ1RMX1NUQVJUX1RPX0xJTksgfHwKKwkgICAgbGVkYWN0aW9uID09IExFRF9DVExfUE9XRVJfT04pKSB7CisJCXJldHVybjsKKwl9CisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9MRUQsIERCR19MT1VELCAoImxlZGFjdGlvbiAlZCxcbiIsCisJCSBsZWRhY3Rpb24pKTsKKworCV9ydGw5MnNlX3N3X2xlZF9jb250cm9sKGh3LCBsZWRhY3Rpb24pOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tbGVkLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9sZWQuaApzaW1pbGFyaXR5IGluZGV4IDYyJQpjb3B5IGZyb20gZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWxlZC5oCmNvcHkgdG8gZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvbGVkLmgKaW5kZXggOTZmMzIzZC4uOGNjZTM4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWxlZC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL2xlZC5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0xOSwxNSArMTksMTkgQEAKICAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCiAgKgogICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqICBJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KLSAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19SRUFMVEVLX1BDSTkyU0VfTEVEX0hfXworI2RlZmluZSBfX1JFQUxURUtfUENJOTJTRV9MRURfSF9fCiAKLSNpZm5kZWYgX19pd2xfYWduX2xlZF9oX18KLSNkZWZpbmUgX19pd2xfYWduX2xlZF9oX18KK3ZvaWQgcnRsOTJzZV9pbml0X3N3X2xlZHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw5MnNlX3N3X2xlZF9vbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywJc3RydWN0IHJ0bF9sZWQgKnBsZWQpOwordm9pZCBydGw5MnNlX3N3X2xlZF9vZmYoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBydGxfbGVkICpwbGVkKTsKK3ZvaWQgcnRsOTJzZV9sZWRfY29udHJvbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBsZWRfY3RsX21vZGUgbGVkYWN0aW9uKTsKIAotZXh0ZXJuIGNvbnN0IHN0cnVjdCBpd2xfbGVkX29wcyBpd2xhZ25fbGVkX29wczsKLXZvaWQgaXdsYWduX2xlZF9lbmFibGUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKLQotI2VuZGlmIC8qIF9faXdsX2Fnbl9sZWRfaF9fICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL3BoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvcGh5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNiNDVlNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL3BoeS5jCkBAIC0wLDAgKzEsMTc0MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICIuLi93aWZpLmgiCisjaW5jbHVkZSAiLi4vcGNpLmgiCisjaW5jbHVkZSAiLi4vcHMuaCIKKyNpbmNsdWRlICJyZWcuaCIKKyNpbmNsdWRlICJkZWYuaCIKKyNpbmNsdWRlICJwaHkuaCIKKyNpbmNsdWRlICJyZi5oIgorI2luY2x1ZGUgImRtLmgiCisjaW5jbHVkZSAiZncuaCIKKyNpbmNsdWRlICJody5oIgorI2luY2x1ZGUgInRhYmxlLmgiCisKK3N0YXRpYyB1MzIgX3J0bDkyc19waHlfY2FsY3VsYXRlX2JpdF9zaGlmdCh1MzIgYml0bWFzaykKK3sKKwl1MzIgaTsKKworCWZvciAoaSA9IDA7IGkgPD0gMzE7IGkrKykgeworCQlpZiAoKChiaXRtYXNrID4+IGkpICYgMHgxKSA9PSAxKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGk7Cit9CisKK3UzMiBydGw5MnNfcGh5X3F1ZXJ5X2JiX3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIHJlZ2FkZHIsIHUzMiBiaXRtYXNrKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1MzIgcmV0dXJudmFsdWUgPSAwLCBvcmlnaW5hbHZhbHVlLCBiaXRzaGlmdDsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUkYsIERCR19UUkFDRSwgKCJyZWdhZGRyKCUjeCksIGJpdG1hc2soJSN4KVxuIiwKKwkJCXJlZ2FkZHIsIGJpdG1hc2spKTsKKworCW9yaWdpbmFsdmFsdWUgPSBydGxfcmVhZF9kd29yZChydGxwcml2LCByZWdhZGRyKTsKKwliaXRzaGlmdCA9IF9ydGw5MnNfcGh5X2NhbGN1bGF0ZV9iaXRfc2hpZnQoYml0bWFzayk7CisJcmV0dXJudmFsdWUgPSAob3JpZ2luYWx2YWx1ZSAmIGJpdG1hc2spID4+IGJpdHNoaWZ0OworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9SRiwgREJHX1RSQUNFLAorCQkgKCJCQlIgTUFTSz0weCV4IEFkZHJbMHgleF09MHgleFxuIiwKKwkJIGJpdG1hc2ssIHJlZ2FkZHIsIG9yaWdpbmFsdmFsdWUpKTsKKworCXJldHVybiByZXR1cm52YWx1ZTsKKworfQorCit2b2lkIHJ0bDkyc19waHlfc2V0X2JiX3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIHJlZ2FkZHIsIHUzMiBiaXRtYXNrLAorCQkJICAgdTMyIGRhdGEpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXUzMiBvcmlnaW5hbHZhbHVlLCBiaXRzaGlmdDsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUkYsIERCR19UUkFDRSwgKCJyZWdhZGRyKCUjeCksIGJpdG1hc2soJSN4KSwiCisJCQkiIGRhdGEoJSN4KVxuIiwgcmVnYWRkciwgYml0bWFzaywgZGF0YSkpOworCisJaWYgKGJpdG1hc2sgIT0gTUFTS0RXT1JEKSB7CisJCW9yaWdpbmFsdmFsdWUgPSBydGxfcmVhZF9kd29yZChydGxwcml2LCByZWdhZGRyKTsKKwkJYml0c2hpZnQgPSBfcnRsOTJzX3BoeV9jYWxjdWxhdGVfYml0X3NoaWZ0KGJpdG1hc2spOworCQlkYXRhID0gKChvcmlnaW5hbHZhbHVlICYgKH5iaXRtYXNrKSkgfCAoZGF0YSA8PCBiaXRzaGlmdCkpOworCX0KKworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCByZWdhZGRyLCBkYXRhKTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUkYsIERCR19UUkFDRSwgKCJyZWdhZGRyKCUjeCksIGJpdG1hc2soJSN4KSwiCisJCQkiIGRhdGEoJSN4KVxuIiwJcmVnYWRkciwgYml0bWFzaywgZGF0YSkpOworCit9CisKK3N0YXRpYyB1MzIgX3J0bDkyc19waHlfcmZfc2VyaWFsX3JlYWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgZW51bSByYWRpb19wYXRoIHJmcGF0aCwgdTMyIG9mZnNldCkKK3sKKworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCXN0cnVjdCBiYl9yZWdfZGVmICpwcGh5cmVnID0gJnJ0bHBoeS0+cGh5cmVnX2RlZltyZnBhdGhdOworCXUzMiBuZXdvZmZzZXQ7CisJdTMyIHRtcGxvbmcsIHRtcGxvbmcyOworCXU4IHJmcGlfZW5hYmxlID0gMDsKKwl1MzIgcmV0dmFsdWUgPSAwOworCisJb2Zmc2V0ICY9IDB4M2Y7CisJbmV3b2Zmc2V0ID0gb2Zmc2V0OworCisJdG1wbG9uZyA9IHJ0bF9nZXRfYmJyZWcoaHcsIFJGUEdBMF9YQV9IU1NJUEFSQU1FVEVSMiwgTUFTS0RXT1JEKTsKKworCWlmIChyZnBhdGggPT0gUkY5MF9QQVRIX0EpCisJCXRtcGxvbmcyID0gdG1wbG9uZzsKKwllbHNlCisJCXRtcGxvbmcyID0gcnRsX2dldF9iYnJlZyhodywgcHBoeXJlZy0+cmZoc3NpX3BhcmEyLCBNQVNLRFdPUkQpOworCisJdG1wbG9uZzIgPSAodG1wbG9uZzIgJiAofkJMU1NJX1JFQURBRERSRVNTKSkgfCAobmV3b2Zmc2V0IDw8IDIzKSB8CisJCQlCTFNTSV9SRUFERURHRTsKKworCXJ0bF9zZXRfYmJyZWcoaHcsIFJGUEdBMF9YQV9IU1NJUEFSQU1FVEVSMiwgTUFTS0RXT1JELAorCQkgICAgICB0bXBsb25nICYgKH5CTFNTSV9SRUFERURHRSkpOworCisJbWRlbGF5KDEpOworCisJcnRsX3NldF9iYnJlZyhodywgcHBoeXJlZy0+cmZoc3NpX3BhcmEyLCBNQVNLRFdPUkQsIHRtcGxvbmcyKTsKKwltZGVsYXkoMSk7CisKKwlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfWEFfSFNTSVBBUkFNRVRFUjIsIE1BU0tEV09SRCwgdG1wbG9uZyB8CisJCSAgICAgIEJMU1NJX1JFQURFREdFKTsKKwltZGVsYXkoMSk7CisKKwlpZiAocmZwYXRoID09IFJGOTBfUEFUSF9BKQorCQlyZnBpX2VuYWJsZSA9ICh1OClydGxfZ2V0X2JicmVnKGh3LCBSRlBHQTBfWEFfSFNTSVBBUkFNRVRFUjEsCisJCQkJCQlCSVQoOCkpOworCWVsc2UgaWYgKHJmcGF0aCA9PSBSRjkwX1BBVEhfQikKKwkJcmZwaV9lbmFibGUgPSAodTgpcnRsX2dldF9iYnJlZyhodywgUkZQR0EwX1hCX0hTU0lQQVJBTUVURVIxLAorCQkJCQkJQklUKDgpKTsKKworCWlmIChyZnBpX2VuYWJsZSkKKwkJcmV0dmFsdWUgPSBydGxfZ2V0X2JicmVnKGh3LCBwcGh5cmVnLT5yZmxzc2lfcmVhZGJhY2twaSwKKwkJCQkJIEJMU1NJX1JFQURCQUNLX0RBVEEpOworCWVsc2UKKwkJcmV0dmFsdWUgPSBydGxfZ2V0X2JicmVnKGh3LCBwcGh5cmVnLT5yZmxzc2lfcmVhZGJhY2ssCisJCQkJCSBCTFNTSV9SRUFEQkFDS19EQVRBKTsKKworCXJldHZhbHVlID0gcnRsX2dldF9iYnJlZyhodywgcHBoeXJlZy0+cmZsc3NpX3JlYWRiYWNrLAorCQkJCSBCTFNTSV9SRUFEQkFDS19EQVRBKTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUkYsIERCR19UUkFDRSwgKCJSRlItJWQgQWRkclsweCV4XT0weCV4XG4iLAorCQkgcmZwYXRoLCBwcGh5cmVnLT5yZmxzc2lfcmVhZGJhY2ssIHJldHZhbHVlKSk7CisKKwlyZXR1cm4gcmV0dmFsdWU7CisKK30KKworc3RhdGljIHZvaWQgX3J0bDkyc19waHlfcmZfc2VyaWFsX3dyaXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQllbnVtIHJhZGlvX3BhdGggcmZwYXRoLCB1MzIgb2Zmc2V0LAorCQkJCQl1MzIgZGF0YSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlzdHJ1Y3QgYmJfcmVnX2RlZiAqcHBoeXJlZyA9ICZydGxwaHktPnBoeXJlZ19kZWZbcmZwYXRoXTsKKwl1MzIgZGF0YV9hbmRfYWRkciA9IDA7CisJdTMyIG5ld29mZnNldDsKKworCW9mZnNldCAmPSAweDNmOworCW5ld29mZnNldCA9IG9mZnNldDsKKworCWRhdGFfYW5kX2FkZHIgPSAoKG5ld29mZnNldCA8PCAyMCkgfCAoZGF0YSAmIDB4MDAwZmZmZmYpKSAmIDB4MGZmZmZmZmY7CisJcnRsX3NldF9iYnJlZyhodywgcHBoeXJlZy0+cmYzd2lyZV9vZmZzZXQsIE1BU0tEV09SRCwgZGF0YV9hbmRfYWRkcik7CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX1JGLCBEQkdfVFJBQ0UsICgiUkZXLSVkIEFkZHJbMHgleF09MHgleFxuIiwKKwkJIHJmcGF0aCwgcHBoeXJlZy0+cmYzd2lyZV9vZmZzZXQsIGRhdGFfYW5kX2FkZHIpKTsKK30KKworCit1MzIgcnRsOTJzX3BoeV9xdWVyeV9yZl9yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsCisJCQkgICAgdTMyIHJlZ2FkZHIsIHUzMiBiaXRtYXNrKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1MzIgb3JpZ2luYWxfdmFsdWUsIHJlYWRiYWNrX3ZhbHVlLCBiaXRzaGlmdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9SRiwgREJHX1RSQUNFLCAoInJlZ2FkZHIoJSN4KSwgcmZwYXRoKCUjeCksICIKKwkJICJiaXRtYXNrKCUjeClcbiIsIHJlZ2FkZHIsIHJmcGF0aCwgYml0bWFzaykpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0bHByaXYtPmxvY2tzLnJmX2xvY2ssIGZsYWdzKTsKKworCW9yaWdpbmFsX3ZhbHVlID0gX3J0bDkyc19waHlfcmZfc2VyaWFsX3JlYWQoaHcsIHJmcGF0aCwgcmVnYWRkcik7CisKKwliaXRzaGlmdCA9IF9ydGw5MnNfcGh5X2NhbGN1bGF0ZV9iaXRfc2hpZnQoYml0bWFzayk7CisJcmVhZGJhY2tfdmFsdWUgPSAob3JpZ2luYWxfdmFsdWUgJiBiaXRtYXNrKSA+PiBiaXRzaGlmdDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLnJmX2xvY2ssIGZsYWdzKTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUkYsIERCR19UUkFDRSwgKCJyZWdhZGRyKCUjeCksIHJmcGF0aCglI3gpLCAiCisJCSAiYml0bWFzayglI3gpLCBvcmlnaW5hbF92YWx1ZSglI3gpXG4iLCByZWdhZGRyLCByZnBhdGgsCisJCSBiaXRtYXNrLCBvcmlnaW5hbF92YWx1ZSkpOworCisJcmV0dXJuIHJlYWRiYWNrX3ZhbHVlOworfQorCit2b2lkIHJ0bDkyc19waHlfc2V0X3JmX3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSByYWRpb19wYXRoIHJmcGF0aCwKKwkJCSAgIHUzMiByZWdhZGRyLCB1MzIgYml0bWFzaywgdTMyIGRhdGEpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJdTMyIG9yaWdpbmFsX3ZhbHVlLCBiaXRzaGlmdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCEoKHJ0bHBoeS0+cmZfcGF0aG1hcCA+PiByZnBhdGgpICYgMHgxKSkKKwkJcmV0dXJuOworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9SRiwgREJHX1RSQUNFLCAoInJlZ2FkZHIoJSN4KSwgYml0bWFzayglI3gpLCIKKwkJICIgZGF0YSglI3gpLCByZnBhdGgoJSN4KVxuIiwgcmVnYWRkciwgYml0bWFzaywgZGF0YSwgcmZwYXRoKSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnRscHJpdi0+bG9ja3MucmZfbG9jaywgZmxhZ3MpOworCisJaWYgKGJpdG1hc2sgIT0gUkZSRUdfT0ZGU0VUX01BU0spIHsKKwkJb3JpZ2luYWxfdmFsdWUgPSBfcnRsOTJzX3BoeV9yZl9zZXJpYWxfcmVhZChodywgcmZwYXRoLAorCQkJCQkJCSAgICByZWdhZGRyKTsKKwkJYml0c2hpZnQgPSBfcnRsOTJzX3BoeV9jYWxjdWxhdGVfYml0X3NoaWZ0KGJpdG1hc2spOworCQlkYXRhID0gKChvcmlnaW5hbF92YWx1ZSAmICh+Yml0bWFzaykpIHwgKGRhdGEgPDwgYml0c2hpZnQpKTsKKwl9CisKKwlfcnRsOTJzX3BoeV9yZl9zZXJpYWxfd3JpdGUoaHcsIHJmcGF0aCwgcmVnYWRkciwgZGF0YSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5yZl9sb2NrLCBmbGFncyk7CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX1JGLCBEQkdfVFJBQ0UsICgicmVnYWRkciglI3gpLCBiaXRtYXNrKCUjeCksICIKKwkJICJkYXRhKCUjeCksIHJmcGF0aCglI3gpXG4iLCByZWdhZGRyLCBiaXRtYXNrLCBkYXRhLCByZnBhdGgpKTsKKworfQorCit2b2lkIHJ0bDkyc19waHlfc2Nhbl9vcGVyYXRpb25fYmFja3VwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgIHU4IG9wZXJhdGlvbikKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKworCWlmICghaXNfaGFsX3N0b3AocnRsaGFsKSkgeworCQlzd2l0Y2ggKG9wZXJhdGlvbikgeworCQljYXNlIFNDQU5fT1BUX0JBQ0tVUDoKKwkJCXJ0bDkyc19waHlfc2V0X2Z3X2NtZChodywgRldfQ01EX1BBVVNFX0RNX0JZX1NDQU4pOworCQkJYnJlYWs7CisJCWNhc2UgU0NBTl9PUFRfUkVTVE9SRToKKwkJCXJ0bDkyc19waHlfc2V0X2Z3X2NtZChodywgRldfQ01EX1JFU1VNRV9ETV9CWV9TQ0FOKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCQkgKCJVbmtub3duIG9wZXJhdGlvbi5cbiIpKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCit2b2lkIHJ0bDkyc19waHlfc2V0X2J3X21vZGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaF90eXBlKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwl1OCByZWdfYndfb3Btb2RlOworCXU4IHJlZ19wcnNyX3JzYzsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0NBTiwgREJHX1RSQUNFLCAoIlN3aXRjaCB0byAlcyBiYW5kd2lkdGhcbiIsCisJCSAgcnRscGh5LT5jdXJyZW50X2NoYW5fYncgPT0gSFRfQ0hBTk5FTF9XSURUSF8yMCA/CisJCSAgIjIwTUh6IiA6ICI0ME1IeiIpKTsKKworCWlmIChydGxwaHktPnNldF9id21vZGVfaW5wcm9ncmVzcykKKwkJcmV0dXJuOworCWlmIChpc19oYWxfc3RvcChydGxoYWwpKQorCQlyZXR1cm47CisKKwlydGxwaHktPnNldF9id21vZGVfaW5wcm9ncmVzcyA9IHRydWU7CisKKwlyZWdfYndfb3Btb2RlID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBCV19PUE1PREUpOworCXJlZ19wcnNyX3JzYyA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUlJTUiArIDIpOworCisJc3dpdGNoIChydGxwaHktPmN1cnJlbnRfY2hhbl9idykgeworCWNhc2UgSFRfQ0hBTk5FTF9XSURUSF8yMDoKKwkJcmVnX2J3X29wbW9kZSB8PSBCV19PUE1PREVfMjBNSFo7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIEJXX09QTU9ERSwgcmVnX2J3X29wbW9kZSk7CisJCWJyZWFrOworCWNhc2UgSFRfQ0hBTk5FTF9XSURUSF8yMF80MDoKKwkJcmVnX2J3X29wbW9kZSAmPSB+QldfT1BNT0RFXzIwTUhaOworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBCV19PUE1PREUsIHJlZ19id19vcG1vZGUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJICgidW5rbm93biBiYW5kd2lkdGg6ICUjWFxuIiwKKwkJCSBydGxwaHktPmN1cnJlbnRfY2hhbl9idykpOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKHJ0bHBoeS0+Y3VycmVudF9jaGFuX2J3KSB7CisJY2FzZSBIVF9DSEFOTkVMX1dJRFRIXzIwOgorCQlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfUkZNT0QsIEJSRk1PRCwgMHgwKTsKKwkJcnRsX3NldF9iYnJlZyhodywgUkZQR0ExX1JGTU9ELCBCUkZNT0QsIDB4MCk7CisKKwkJaWYgKHJ0bGhhbC0+dmVyc2lvbiA+PSBWRVJTSU9OXzgxOTJTX0JDVVQpCisJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRlBHQTBfQU5BTE9HUEFSQU1FVEVSMiwgMHg1OCk7CisJCWJyZWFrOworCWNhc2UgSFRfQ0hBTk5FTF9XSURUSF8yMF80MDoKKwkJcnRsX3NldF9iYnJlZyhodywgUkZQR0EwX1JGTU9ELCBCUkZNT0QsIDB4MSk7CisJCXJ0bF9zZXRfYmJyZWcoaHcsIFJGUEdBMV9SRk1PRCwgQlJGTU9ELCAweDEpOworCisJCXJ0bF9zZXRfYmJyZWcoaHcsIFJDQ0swX1NZU1RFTSwgQkNDS19TSURFQkFORCwKKwkJCQkobWFjLT5jdXJfNDBfcHJpbWVfc2MgPj4gMSkpOworCQlydGxfc2V0X2JicmVnKGh3LCBST0ZETTFfTFNURiwgMHhDMDAsIG1hYy0+Y3VyXzQwX3ByaW1lX3NjKTsKKworCQlpZiAocnRsaGFsLT52ZXJzaW9uID49IFZFUlNJT05fODE5MlNfQkNVVCkKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJGUEdBMF9BTkFMT0dQQVJBTUVURVIyLCAweDE4KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoInVua25vd24gYmFuZHdpZHRoOiAlI1hcbiIsIHJ0bHBoeS0+Y3VycmVudF9jaGFuX2J3KSk7CisJCWJyZWFrOworCX0KKworCXJ0bDkyc19waHlfcmY2MDUyX3NldF9iYW5kd2lkdGgoaHcsIHJ0bHBoeS0+Y3VycmVudF9jaGFuX2J3KTsKKwlydGxwaHktPnNldF9id21vZGVfaW5wcm9ncmVzcyA9IGZhbHNlOworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0NBTiwgREJHX1RSQUNFLCAoIjw9PVxuIikpOworfQorCitzdGF0aWMgYm9vbCBfcnRsOTJzX3BoeV9zZXRfc3dfY2hubF9jbWRhcnJheShzdHJ1Y3Qgc3djaG5sY21kICpjbWR0YWJsZSwKKwkJdTMyIGNtZHRhYmxlaWR4LCB1MzIgY21kdGFibGVzeiwgZW51bSBzd2NobmxjbWRfaWQgY21kaWQsCisJCXUzMiBwYXJhMSwgdTMyIHBhcmEyLCB1MzIgbXNkZWxheSkKK3sKKwlzdHJ1Y3Qgc3djaG5sY21kICpwY21kOworCisJaWYgKGNtZHRhYmxlID09IE5VTEwpIHsKKwkJUlRfQVNTRVJUKGZhbHNlLCAoImNtZHRhYmxlIGNhbm5vdCBiZSBOVUxMLlxuIikpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKGNtZHRhYmxlaWR4ID49IGNtZHRhYmxlc3opCisJCXJldHVybiBmYWxzZTsKKworCXBjbWQgPSBjbWR0YWJsZSArIGNtZHRhYmxlaWR4OworCXBjbWQtPmNtZGlkID0gY21kaWQ7CisJcGNtZC0+cGFyYTEgPSBwYXJhMTsKKwlwY21kLT5wYXJhMiA9IHBhcmEyOworCXBjbWQtPm1zZGVsYXkgPSBtc2RlbGF5OworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIF9ydGw5MnNfcGh5X3N3X2Nobmxfc3RlcF9ieV9zdGVwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCSAgICAgdTggY2hhbm5lbCwgdTggKnN0YWdlLCB1OCAqc3RlcCwgdTMyICpkZWxheSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlzdHJ1Y3Qgc3djaG5sY21kIHByZWNvbW1vbmNtZFtNQVhfUFJFQ01EX0NOVF07CisJdTMyIHByZWNvbW1vbmNtZGNudDsKKwlzdHJ1Y3Qgc3djaG5sY21kIHBvc3Rjb21tb25jbWRbTUFYX1BPU1RDTURfQ05UXTsKKwl1MzIgcG9zdGNvbW1vbmNtZGNudDsKKwlzdHJ1Y3Qgc3djaG5sY21kIHJmZGVwZW5kY21kW01BWF9SRkRFUEVORENNRF9DTlRdOworCXUzMiByZmRlcGVuZGNtZGNudDsKKwlzdHJ1Y3Qgc3djaG5sY21kICpjdXJyZW50Y21kID0gTlVMTDsKKwl1OCByZnBhdGg7CisJdTggbnVtX3RvdGFsX3JmcGF0aCA9IHJ0bHBoeS0+bnVtX3RvdGFsX3JmcGF0aDsKKworCXByZWNvbW1vbmNtZGNudCA9IDA7CisJX3J0bDkyc19waHlfc2V0X3N3X2NobmxfY21kYXJyYXkocHJlY29tbW9uY21kLCBwcmVjb21tb25jbWRjbnQrKywKKwkJCU1BWF9QUkVDTURfQ05ULCBDTURJRF9TRVRfVFhQT1dFUk9XRVJfTEVWRUwsIDAsIDAsIDApOworCV9ydGw5MnNfcGh5X3NldF9zd19jaG5sX2NtZGFycmF5KHByZWNvbW1vbmNtZCwgcHJlY29tbW9uY21kY250KyssCisJCQlNQVhfUFJFQ01EX0NOVCwgQ01ESURfRU5ELCAwLCAwLCAwKTsKKworCXBvc3Rjb21tb25jbWRjbnQgPSAwOworCisJX3J0bDkyc19waHlfc2V0X3N3X2NobmxfY21kYXJyYXkocG9zdGNvbW1vbmNtZCwgcG9zdGNvbW1vbmNtZGNudCsrLAorCQkJTUFYX1BPU1RDTURfQ05ULCBDTURJRF9FTkQsIDAsIDAsIDApOworCisJcmZkZXBlbmRjbWRjbnQgPSAwOworCisJUlRfQVNTRVJUKChjaGFubmVsID49IDEgJiYgY2hhbm5lbCA8PSAxNCksCisJCSAgKCJpbGxlZ2FsIGNoYW5uZWwgZm9yIFplYnJhOiAlZFxuIiwgY2hhbm5lbCkpOworCisJX3J0bDkyc19waHlfc2V0X3N3X2NobmxfY21kYXJyYXkocmZkZXBlbmRjbWQsIHJmZGVwZW5kY21kY250KyssCisJCQkJCSBNQVhfUkZERVBFTkRDTURfQ05ULCBDTURJRF9SRl9XUklURVJFRywKKwkJCQkJIFJGX0NITkxCVywgY2hhbm5lbCwgMTApOworCisJX3J0bDkyc19waHlfc2V0X3N3X2NobmxfY21kYXJyYXkocmZkZXBlbmRjbWQsIHJmZGVwZW5kY21kY250KyssCisJCQlNQVhfUkZERVBFTkRDTURfQ05ULCBDTURJRF9FTkQsIDAsIDAsIDApOworCisJZG8geworCQlzd2l0Y2ggKCpzdGFnZSkgeworCQljYXNlIDA6CisJCQljdXJyZW50Y21kID0gJnByZWNvbW1vbmNtZFsqc3RlcF07CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJY3VycmVudGNtZCA9ICZyZmRlcGVuZGNtZFsqc3RlcF07CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJY3VycmVudGNtZCA9ICZwb3N0Y29tbW9uY21kWypzdGVwXTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGN1cnJlbnRjbWQtPmNtZGlkID09IENNRElEX0VORCkgeworCQkJaWYgKCgqc3RhZ2UpID09IDIpIHsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0gZWxzZSB7CisJCQkJKCpzdGFnZSkrKzsKKwkJCQkoKnN0ZXApID0gMDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCisJCXN3aXRjaCAoY3VycmVudGNtZC0+Y21kaWQpIHsKKwkJY2FzZSBDTURJRF9TRVRfVFhQT1dFUk9XRVJfTEVWRUw6CisJCQlydGw5MnNfcGh5X3NldF90eHBvd2VyKGh3LCBjaGFubmVsKTsKKwkJCWJyZWFrOworCQljYXNlIENNRElEX1dSSVRFUE9SVF9VTE9ORzoKKwkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBjdXJyZW50Y21kLT5wYXJhMSwKKwkJCQkJY3VycmVudGNtZC0+cGFyYTIpOworCQkJYnJlYWs7CisJCWNhc2UgQ01ESURfV1JJVEVQT1JUX1VTSE9SVDoKKwkJCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIGN1cnJlbnRjbWQtPnBhcmExLAorCQkJCSAgICAgICAodTE2KWN1cnJlbnRjbWQtPnBhcmEyKTsKKwkJCWJyZWFrOworCQljYXNlIENNRElEX1dSSVRFUE9SVF9VQ0hBUjoKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIGN1cnJlbnRjbWQtPnBhcmExLAorCQkJCSAgICAgICAodTgpY3VycmVudGNtZC0+cGFyYTIpOworCQkJYnJlYWs7CisJCWNhc2UgQ01ESURfUkZfV1JJVEVSRUc6CisJCQlmb3IgKHJmcGF0aCA9IDA7IHJmcGF0aCA8IG51bV90b3RhbF9yZnBhdGg7IHJmcGF0aCsrKSB7CisJCQkJcnRscGh5LT5yZnJlZ19jaG5sdmFsW3JmcGF0aF0gPQorCQkJCQkgKChydGxwaHktPnJmcmVnX2Nobmx2YWxbcmZwYXRoXSAmCisJCQkJCSAweGZmZmZmYzAwKSB8IGN1cnJlbnRjbWQtPnBhcmEyKTsKKwkJCQlydGxfc2V0X3JmcmVnKGh3LCAoZW51bSByYWRpb19wYXRoKXJmcGF0aCwKKwkJCQkJICAgICAgY3VycmVudGNtZC0+cGFyYTEsCisJCQkJCSAgICAgIFJGUkVHX09GRlNFVF9NQVNLLAorCQkJCQkgICAgICBydGxwaHktPnJmcmVnX2Nobmx2YWxbcmZwYXRoXSk7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkJICgic3dpdGNoIGNhc2Ugbm90IHByb2Nlc3NcbiIpKTsKKwkJCWJyZWFrOworCQl9CisKKwkJYnJlYWs7CisJfSB3aGlsZSAodHJ1ZSk7CisKKwkoKmRlbGF5KSA9IGN1cnJlbnRjbWQtPm1zZGVsYXk7CisJKCpzdGVwKSsrOworCXJldHVybiBmYWxzZTsKK30KKwordTggcnRsOTJzX3BoeV9zd19jaG5sKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJdTMyIGRlbGF5OworCWJvb2wgcmV0OworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TQ0FOLCBEQkdfVFJBQ0UsCisJCSAoInN3aXRjaCB0byBjaGFubmVsJWRcbiIsCisJCSBydGxwaHktPmN1cnJlbnRfY2hhbm5lbCkpOworCisJaWYgKHJ0bHBoeS0+c3dfY2hubF9pbnByb2dyZXNzKQorCQlyZXR1cm4gMDsKKworCWlmIChydGxwaHktPnNldF9id21vZGVfaW5wcm9ncmVzcykKKwkJcmV0dXJuIDA7CisKKwlpZiAoaXNfaGFsX3N0b3AocnRsaGFsKSkKKwkJcmV0dXJuIDA7CisKKwlydGxwaHktPnN3X2NobmxfaW5wcm9ncmVzcyA9IHRydWU7CisJcnRscGh5LT5zd19jaG5sX3N0YWdlID0gMDsKKwlydGxwaHktPnN3X2Nobmxfc3RlcCA9IDA7CisKKwlkbyB7CisJCWlmICghcnRscGh5LT5zd19jaG5sX2lucHJvZ3Jlc3MpCisJCQlicmVhazsKKworCQlyZXQgPSBfcnRsOTJzX3BoeV9zd19jaG5sX3N0ZXBfYnlfc3RlcChodywKKwkJCQkgcnRscGh5LT5jdXJyZW50X2NoYW5uZWwsCisJCQkJICZydGxwaHktPnN3X2Nobmxfc3RhZ2UsCisJCQkJICZydGxwaHktPnN3X2Nobmxfc3RlcCwgJmRlbGF5KTsKKwkJaWYgKCFyZXQpIHsKKwkJCWlmIChkZWxheSA+IDApCisJCQkJbWRlbGF5KGRlbGF5KTsKKwkJCWVsc2UKKwkJCQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCXJ0bHBoeS0+c3dfY2hubF9pbnByb2dyZXNzID0gZmFsc2U7CisJCX0KKwkJYnJlYWs7CisJfSB3aGlsZSAodHJ1ZSk7CisKKwlydGxwaHktPnN3X2NobmxfaW5wcm9ncmVzcyA9IGZhbHNlOworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TQ0FOLCBEQkdfVFJBQ0UsICgiPD09XG4iKSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgX3J0bDkyc2VfcGh5X3NldF9yZl9zbGVlcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTggdTFidG1wOworCisJdTFidG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBMRE9WMTJEX0NUUkwpOworCXUxYnRtcCB8PSBCSVQoMCk7CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBMRE9WMTJEX0NUUkwsIHUxYnRtcCk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgU1BTMV9DVFJMLCAweDApOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFRYUEFVU0UsIDB4RkYpOworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIENNRFIsIDB4NTdGQyk7CisJdWRlbGF5KDEwMCk7CisKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBDTURSLCAweDc3RkMpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFBIWV9DQ0EsIDB4MCk7CisJdWRlbGF5KDEwKTsKKworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIENNRFIsIDB4MzdGQyk7CisJdWRlbGF5KDEwKTsKKworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIENNRFIsIDB4NzdGQyk7CisJdWRlbGF5KDEwKTsKKworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIENNRFIsIDB4NTdGQyk7CisKKwkvKiB3ZSBzaG91bGQgY2huZ2UgR1BJTyB0byBpbnB1dCBtb2RlCisJICogdGhpcyB3aWxsIGRyb3AgYXdheSBjdXJyZW50IGFib3V0IDI1bUEqLworCXJ0bDgxOTJzZV9ncGlvYml0M19jZmdfaW5wdXRtb2RlKGh3KTsKK30KKworYm9vbCBydGw5MnNfcGh5X3NldF9yZl9wb3dlcl9zdGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICBlbnVtIHJmX3B3cnN0YXRlIHJmcHdyX3N0YXRlKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CisJYm9vbCBicmVzdWx0ID0gdHJ1ZTsKKwl1OCBpLCBxdWV1ZV9pZDsKKwlzdHJ1Y3QgcnRsODE5Ml90eF9yaW5nICpyaW5nID0gTlVMTDsKKworCWlmIChyZnB3cl9zdGF0ZSA9PSBwcHNjLT5yZnB3cl9zdGF0ZSkKKwkJcmV0dXJuIGZhbHNlOworCisJcHBzYy0+c2V0X3JmcG93ZXJzdGF0ZV9pbnByb2dyZXNzID0gdHJ1ZTsKKworCXN3aXRjaCAocmZwd3Jfc3RhdGUpIHsKKwljYXNlIEVSRk9OOnsKKwkJCWlmICgocHBzYy0+cmZwd3Jfc3RhdGUgPT0gRVJGT0ZGKSAmJgorCQkJICAgIFJUX0lOX1BTX0xFVkVMKHBwc2MsIFJUX1JGX09GRl9MRVZMX0hBTFRfTklDKSkgeworCisJCQkJYm9vbCBydHN0YXR1czsKKwkJCQl1MzIgSW5pdGlhbGl6ZUNvdW50ID0gMDsKKwkJCQlkbyB7CisJCQkJCUluaXRpYWxpemVDb3VudCsrOworCQkJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1JGLCBEQkdfRE1FU0csCisJCQkJCQkgKCJJUFMgU2V0IGVSZiBuaWMgZW5hYmxlXG4iKSk7CisJCQkJCXJ0c3RhdHVzID0gcnRsX3BzX2VuYWJsZV9uaWMoaHcpOworCQkJCX0gd2hpbGUgKChydHN0YXR1cyAhPSB0cnVlKSAmJgorCQkJCQkgKEluaXRpYWxpemVDb3VudCA8IDEwKSk7CisKKwkJCQlSVF9DTEVBUl9QU19MRVZFTChwcHNjLAorCQkJCQkJICBSVF9SRl9PRkZfTEVWTF9IQUxUX05JQyk7CisJCQl9IGVsc2UgeworCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19ETUVTRywKKwkJCQkJICgiYXdha2UsIHNsZWVwZWQ6JWQgbXMgIgorCQkJCQkic3RhdGVfaW5hcDoleFxuIiwKKwkJCQkJamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0KKwkJCQkJcHBzYy0+bGFzdF9zbGVlcF9qaWZmaWVzKSwKKwkJCQkJcnRscHJpdi0+cHNjLnN0YXRlX2luYXApKTsKKwkJCQlwcHNjLT5sYXN0X2F3YWtlX2ppZmZpZXMgPSBqaWZmaWVzOworCQkJCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIENNRFIsIDB4MzdGQyk7CisJCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgVFhQQVVTRSwgMHgwMCk7CisJCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUEhZX0NDQSwgMHgzKTsKKwkJCX0KKworCQkJaWYgKG1hYy0+bGlua19zdGF0ZSA9PSBNQUM4MDIxMV9MSU5LRUQpCisJCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPmxlZF9jb250cm9sKGh3LAorCQkJCQkJCSBMRURfQ1RMX0xJTkspOworCQkJZWxzZQorCQkJCXJ0bHByaXYtPmNmZy0+b3BzLT5sZWRfY29udHJvbChodywKKwkJCQkJCQkgTEVEX0NUTF9OT19MSU5LKTsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBFUkZPRkY6eworCQkJaWYgKHBwc2MtPnJlZ19yZnBzX2xldmVsICYgUlRfUkZfT0ZGX0xFVkxfSEFMVF9OSUMpIHsKKwkJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1JGLCBEQkdfRE1FU0csCisJCQkJCSAoIklQUyBTZXQgZVJmIG5pYyBkaXNhYmxlXG4iKSk7CisJCQkJcnRsX3BzX2Rpc2FibGVfbmljKGh3KTsKKwkJCQlSVF9TRVRfUFNfTEVWRUwocHBzYywgUlRfUkZfT0ZGX0xFVkxfSEFMVF9OSUMpOworCQkJfSBlbHNlIHsKKwkJCQlpZiAocHBzYy0+cmZvZmZfcmVhc29uID09IFJGX0NIQU5HRV9CWV9JUFMpCisJCQkJCXJ0bHByaXYtPmNmZy0+b3BzLT5sZWRfY29udHJvbChodywKKwkJCQkJCQkgTEVEX0NUTF9OT19MSU5LKTsKKwkJCQllbHNlCisJCQkJCXJ0bHByaXYtPmNmZy0+b3BzLT5sZWRfY29udHJvbChodywKKwkJCQkJCQkgTEVEX0NUTF9QT1dFUl9PRkYpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwljYXNlIEVSRlNMRUVQOgorCQkJaWYgKHBwc2MtPnJmcHdyX3N0YXRlID09IEVSRk9GRikKKwkJCQlicmVhazsKKworCQkJZm9yIChxdWV1ZV9pZCA9IDAsIGkgPSAwOworCQkJICAgICBxdWV1ZV9pZCA8IFJUTF9QQ0lfTUFYX1RYX1FVRVVFX0NPVU5UOykgeworCQkJCXJpbmcgPSAmcGNpcHJpdi0+ZGV2LnR4X3JpbmdbcXVldWVfaWRdOworCQkJCWlmIChza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSkgPT0gMCB8fAorCQkJCQlxdWV1ZV9pZCA9PSBCRUFDT05fUVVFVUUpIHsKKwkJCQkJcXVldWVfaWQrKzsKKwkJCQkJY29udGludWU7CisJCQkJfSBlbHNlIHsKKwkJCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19XQVJOSU5HLAorCQkJCQkJICgiZVJmIE9mZi9TbGVlcDogIgorCQkJCQkJICIlZCB0aW1lcyBUY2JCdXN5UXVldWVbJWRdID0gIgorCQkJCQkJICIlZCBiZWZvcmUgZG96ZSFcbiIsCisJCQkJCQkgKGkgKyAxKSwgcXVldWVfaWQsCisJCQkJCQkgc2tiX3F1ZXVlX2xlbigmcmluZy0+cXVldWUpKSk7CisKKwkJCQkJdWRlbGF5KDEwKTsKKwkJCQkJaSsrOworCQkJCX0KKworCQkJCWlmIChpID49IE1BWF9ET1pFX1dBSVRJTkdfVElNRVNfOXgpIHsKKwkJCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19XQVJOSU5HLAorCQkJCQkJICgiXG5FUkZPRkY6ICVkIHRpbWVzIgorCQkJCQkJICJUY2JCdXN5UXVldWVbJWRdID0gJWQgIVxuIiwKKwkJCQkJCSBNQVhfRE9aRV9XQUlUSU5HX1RJTUVTXzl4LAorCQkJCQkJIHF1ZXVlX2lkLAorCQkJCQkJIHNrYl9xdWV1ZV9sZW4oJnJpbmctPnF1ZXVlKSkpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19ETUVTRywKKwkJCQkgKCJTZXQgRVJGU0xFRVAgYXdha2VkOiVkIG1zXG4iLAorCQkJCSBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLQorCQkJCSBwcHNjLT5sYXN0X2F3YWtlX2ppZmZpZXMpKSk7CisKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19ETUVTRywKKwkJCQkgKCJzbGVlcCBhd2FrZWQ6JWQgbXMgIgorCQkJCSJzdGF0ZV9pbmFwOiV4XG4iLCBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLQorCQkJCXBwc2MtPmxhc3RfYXdha2VfamlmZmllcyksCisJCQkJcnRscHJpdi0+cHNjLnN0YXRlX2luYXApKTsKKwkJCXBwc2MtPmxhc3Rfc2xlZXBfamlmZmllcyA9IGppZmZpZXM7CisJCQlfcnRsOTJzZV9waHlfc2V0X3JmX3NsZWVwKGh3KTsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoInN3aXRjaCBjYXNlIG5vdCBwcm9jZXNzXG4iKSk7CisJCWJyZXN1bHQgPSBmYWxzZTsKKwkJYnJlYWs7CisJfQorCisJaWYgKGJyZXN1bHQpCisJCXBwc2MtPnJmcHdyX3N0YXRlID0gcmZwd3Jfc3RhdGU7CisKKwlwcHNjLT5zZXRfcmZwb3dlcnN0YXRlX2lucHJvZ3Jlc3MgPSBmYWxzZTsKKworCXJldHVybiBicmVzdWx0OworfQorCitzdGF0aWMgYm9vbCBfcnRsOTJzX3BoeV9jb25maWdfcmZwYV9iaWFzX2N1cnJlbnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCQkgZW51bSByYWRpb19wYXRoIHJmcGF0aCkKK3sKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCWJvb2wgcnRzdGF0dXMgPSB0cnVlOworCXUzMiB0bXB2YWwgPSAwOworCisJLyogSWYgaW5mZXJpb3JpdHkgSUMsIHdlIGhhdmUgdG8gaW5jcmVhc2UgdGhlIFBBIGJpYXMgY3VycmVudCAqLworCWlmIChydGxoYWwtPmljX2NsYXNzICE9IElDX0lORkVSSU9SSVRZX0EpIHsKKwkJdG1wdmFsID0gcnRsOTJzX3BoeV9xdWVyeV9yZl9yZWcoaHcsIHJmcGF0aCwgUkZfSVBBLCAweGYpOworCQlydGw5MnNfcGh5X3NldF9yZl9yZWcoaHcsIHJmcGF0aCwgUkZfSVBBLCAweGYsIHRtcHZhbCArIDEpOworCX0KKworCXJldHVybiBydHN0YXR1czsKK30KKworc3RhdGljIHZvaWQgX3J0bDkyc19zdG9yZV9wd3JpbmRleF9kaWZmcmF0ZV9vZmZzZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCXUzMiByZWdfYWRkciwgdTMyIGJpdG1hc2ssIHUzMiBkYXRhKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCisJaWYgKHJlZ19hZGRyID09IFJUWEFHQ19SQVRFMThfMDYpCisJCXJ0bHBoeS0+bWNzX3R4cHdybGV2ZWxfb3JpZ29mZnNldFtydGxwaHktPnB3cmdyb3VwX2NudF1bMF0gPQorCQkJCQkJCQkJIGRhdGE7CisJaWYgKHJlZ19hZGRyID09IFJUWEFHQ19SQVRFNTRfMjQpCisJCXJ0bHBoeS0+bWNzX3R4cHdybGV2ZWxfb3JpZ29mZnNldFtydGxwaHktPnB3cmdyb3VwX2NudF1bMV0gPQorCQkJCQkJCQkJIGRhdGE7CisJaWYgKHJlZ19hZGRyID09IFJUWEFHQ19DQ0tfTUNTMzIpCisJCXJ0bHBoeS0+bWNzX3R4cHdybGV2ZWxfb3JpZ29mZnNldFtydGxwaHktPnB3cmdyb3VwX2NudF1bNl0gPQorCQkJCQkJCQkJIGRhdGE7CisJaWYgKHJlZ19hZGRyID09IFJUWEFHQ19NQ1MwM19NQ1MwMCkKKwkJcnRscGh5LT5tY3NfdHhwd3JsZXZlbF9vcmlnb2Zmc2V0W3J0bHBoeS0+cHdyZ3JvdXBfY250XVsyXSA9CisJCQkJCQkJCQkgZGF0YTsKKwlpZiAocmVnX2FkZHIgPT0gUlRYQUdDX01DUzA3X01DUzA0KQorCQlydGxwaHktPm1jc190eHB3cmxldmVsX29yaWdvZmZzZXRbcnRscGh5LT5wd3Jncm91cF9jbnRdWzNdID0KKwkJCQkJCQkJCSBkYXRhOworCWlmIChyZWdfYWRkciA9PSBSVFhBR0NfTUNTMTFfTUNTMDgpCisJCXJ0bHBoeS0+bWNzX3R4cHdybGV2ZWxfb3JpZ29mZnNldFtydGxwaHktPnB3cmdyb3VwX2NudF1bNF0gPQorCQkJCQkJCQkJIGRhdGE7CisJaWYgKHJlZ19hZGRyID09IFJUWEFHQ19NQ1MxNV9NQ1MxMikgeworCQlydGxwaHktPm1jc190eHB3cmxldmVsX29yaWdvZmZzZXRbcnRscGh5LT5wd3Jncm91cF9jbnRdWzVdID0KKwkJCQkJCQkJCSBkYXRhOworCQlydGxwaHktPnB3cmdyb3VwX2NudCsrOworCX0KK30KKworc3RhdGljIHZvaWQgX3J0bDkyc19waHlfaW5pdF9yZWdpc3Rlcl9kZWZpbml0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCisJLypSRiBJbnRlcmZhY2UgU293cnR3YXJlIENvbnRyb2wgKi8KKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0FdLnJmaW50ZnMgPSBSRlBHQTBfWEFCX1JGSU5URVJGQUNFU1c7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9CXS5yZmludGZzID0gUkZQR0EwX1hBQl9SRklOVEVSRkFDRVNXOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQ10ucmZpbnRmcyA9IFJGUEdBMF9YQ0RfUkZJTlRFUkZBQ0VTVzsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0RdLnJmaW50ZnMgPSBSRlBHQTBfWENEX1JGSU5URVJGQUNFU1c7CisKKwkvKiBSRiBJbnRlcmZhY2UgUmVhZGJhY2sgVmFsdWUgKi8KKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0FdLnJmaW50ZmkgPSBSRlBHQTBfWEFCX1JGSU5URVJGQUNFUkI7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9CXS5yZmludGZpID0gUkZQR0EwX1hBQl9SRklOVEVSRkFDRVJCOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQ10ucmZpbnRmaSA9IFJGUEdBMF9YQ0RfUkZJTlRFUkZBQ0VSQjsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0RdLnJmaW50ZmkgPSBSRlBHQTBfWENEX1JGSU5URVJGQUNFUkI7CisKKwkvKiBSRiBJbnRlcmZhY2UgT3V0cHV0IChhbmQgRW5hYmxlKSAqLworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQV0ucmZpbnRmbyA9IFJGUEdBMF9YQV9SRklOVEVSRkFDRU9FOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQl0ucmZpbnRmbyA9IFJGUEdBMF9YQl9SRklOVEVSRkFDRU9FOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQ10ucmZpbnRmbyA9IFJGUEdBMF9YQ19SRklOVEVSRkFDRU9FOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfRF0ucmZpbnRmbyA9IFJGUEdBMF9YRF9SRklOVEVSRkFDRU9FOworCisJLyogUkYgSW50ZXJmYWNlIChPdXRwdXQgYW5kKSAgRW5hYmxlICovCisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9BXS5yZmludGZlID0gUkZQR0EwX1hBX1JGSU5URVJGQUNFT0U7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9CXS5yZmludGZlID0gUkZQR0EwX1hCX1JGSU5URVJGQUNFT0U7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9DXS5yZmludGZlID0gUkZQR0EwX1hDX1JGSU5URVJGQUNFT0U7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9EXS5yZmludGZlID0gUkZQR0EwX1hEX1JGSU5URVJGQUNFT0U7CisKKwkvKiBBZGRyIG9mIExTU0kuIFdpcnRlIFJGIHJlZ2lzdGVyIGJ5IGRyaXZlciAqLworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQV0ucmYzd2lyZV9vZmZzZXQgPQorCQkJCQkJIFJGUEdBMF9YQV9MU1NJUEFSQU1FVEVSOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQl0ucmYzd2lyZV9vZmZzZXQgPQorCQkJCQkJIFJGUEdBMF9YQl9MU1NJUEFSQU1FVEVSOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQ10ucmYzd2lyZV9vZmZzZXQgPQorCQkJCQkJIFJGUEdBMF9YQ19MU1NJUEFSQU1FVEVSOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfRF0ucmYzd2lyZV9vZmZzZXQgPQorCQkJCQkJIFJGUEdBMF9YRF9MU1NJUEFSQU1FVEVSOworCisJLyogUkYgcGFyYW1ldGVyICovCisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9BXS5yZmxzc2lfc2VsZWN0ID0gUkZQR0EwX1hBQl9SRlBBUkFNRVRFUjsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0JdLnJmbHNzaV9zZWxlY3QgPSBSRlBHQTBfWEFCX1JGUEFSQU1FVEVSOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQ10ucmZsc3NpX3NlbGVjdCA9IFJGUEdBMF9YQ0RfUkZQQVJBTUVURVI7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9EXS5yZmxzc2lfc2VsZWN0ID0gUkZQR0EwX1hDRF9SRlBBUkFNRVRFUjsKKworCS8qIFR4IEFHQyBHYWluIFN0YWdlIChzYW1lIGZvciBhbGwgcGF0aC4gU2hvdWxkIHdlIHJlbW92ZSB0aGlzPykgKi8KKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0FdLnJmdHhnYWluX3N0YWdlID0gUkZQR0EwX1RYR0FJTlNUQUdFOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQl0ucmZ0eGdhaW5fc3RhZ2UgPSBSRlBHQTBfVFhHQUlOU1RBR0U7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9DXS5yZnR4Z2Fpbl9zdGFnZSA9IFJGUEdBMF9UWEdBSU5TVEFHRTsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0RdLnJmdHhnYWluX3N0YWdlID0gUkZQR0EwX1RYR0FJTlNUQUdFOworCisJLyogVHJhbmNlaXZlciBBfkQgSFNTSSBQYXJhbWV0ZXItMSAqLworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQV0ucmZoc3NpX3BhcmExID0gUkZQR0EwX1hBX0hTU0lQQVJBTUVURVIxOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQl0ucmZoc3NpX3BhcmExID0gUkZQR0EwX1hCX0hTU0lQQVJBTUVURVIxOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQ10ucmZoc3NpX3BhcmExID0gUkZQR0EwX1hDX0hTU0lQQVJBTUVURVIxOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfRF0ucmZoc3NpX3BhcmExID0gUkZQR0EwX1hEX0hTU0lQQVJBTUVURVIxOworCisJLyogVHJhbmNlaXZlciBBfkQgSFNTSSBQYXJhbWV0ZXItMiAqLworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQV0ucmZoc3NpX3BhcmEyID0gUkZQR0EwX1hBX0hTU0lQQVJBTUVURVIyOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQl0ucmZoc3NpX3BhcmEyID0gUkZQR0EwX1hCX0hTU0lQQVJBTUVURVIyOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQ10ucmZoc3NpX3BhcmEyID0gUkZQR0EwX1hDX0hTU0lQQVJBTUVURVIyOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfRF0ucmZoc3NpX3BhcmEyID0gUkZQR0EwX1hEX0hTU0lQQVJBTUVURVIyOworCisJLyogUkYgc3dpdGNoIENvbnRyb2wgKi8KKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0FdLnJmc3dpdGNoX2NvbnRyb2wgPQorCQkJCQkJIFJGUEdBMF9YQUJfU1dJVENIQ09OVFJPTDsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0JdLnJmc3dpdGNoX2NvbnRyb2wgPQorCQkJCQkJIFJGUEdBMF9YQUJfU1dJVENIQ09OVFJPTDsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0NdLnJmc3dpdGNoX2NvbnRyb2wgPQorCQkJCQkJIFJGUEdBMF9YQ0RfU1dJVENIQ09OVFJPTDsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0RdLnJmc3dpdGNoX2NvbnRyb2wgPQorCQkJCQkJIFJGUEdBMF9YQ0RfU1dJVENIQ09OVFJPTDsKKworCS8qIEFHQyBjb250cm9sIDEgICovCisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9BXS5yZmFnY19jb250cm9sMSA9IFJPRkRNMF9YQUFHQ0NPUkUxOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQl0ucmZhZ2NfY29udHJvbDEgPSBST0ZETTBfWEJBR0NDT1JFMTsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0NdLnJmYWdjX2NvbnRyb2wxID0gUk9GRE0wX1hDQUdDQ09SRTE7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9EXS5yZmFnY19jb250cm9sMSA9IFJPRkRNMF9YREFHQ0NPUkUxOworCisJLyogQUdDIGNvbnRyb2wgMiAgKi8KKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0FdLnJmYWdjX2NvbnRyb2wyID0gUk9GRE0wX1hBQUdDQ09SRTI7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9CXS5yZmFnY19jb250cm9sMiA9IFJPRkRNMF9YQkFHQ0NPUkUyOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQ10ucmZhZ2NfY29udHJvbDIgPSBST0ZETTBfWENBR0NDT1JFMjsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0RdLnJmYWdjX2NvbnRyb2wyID0gUk9GRE0wX1hEQUdDQ09SRTI7CisKKwkvKiBSWCBBRkUgY29udHJvbCAxICAqLworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQV0ucmZyeGlxX2ltYmFsYW5jZSA9CisJCQkJCQkgUk9GRE0wX1hBUlhJUUlNQkFMQU5DRTsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0JdLnJmcnhpcV9pbWJhbGFuY2UgPQorCQkJCQkJIFJPRkRNMF9YQlJYSVFJTUJBTEFOQ0U7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9DXS5yZnJ4aXFfaW1iYWxhbmNlID0KKwkJCQkJCSBST0ZETTBfWENSWElRSU1CQUxBTkNFOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfRF0ucmZyeGlxX2ltYmFsYW5jZSA9CisJCQkJCQkgUk9GRE0wX1hEUlhJUUlNQkFMQU5DRTsKKworCS8qIFJYIEFGRSBjb250cm9sIDEgICAqLworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQV0ucmZyeF9hZmUgPSBST0ZETTBfWEFSWEFGRTsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0JdLnJmcnhfYWZlID0gUk9GRE0wX1hCUlhBRkU7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9DXS5yZnJ4X2FmZSA9IFJPRkRNMF9YQ1JYQUZFOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfRF0ucmZyeF9hZmUgPSBST0ZETTBfWERSWEFGRTsKKworCS8qIFR4IEFGRSBjb250cm9sIDEgICovCisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9BXS5yZnR4aXFfaW1iYWxhbmNlID0KKwkJCQkJCSBST0ZETTBfWEFUWElRSU1CQUxBTkNFOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQl0ucmZ0eGlxX2ltYmFsYW5jZSA9CisJCQkJCQkgUk9GRE0wX1hCVFhJUUlNQkFMQU5DRTsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0NdLnJmdHhpcV9pbWJhbGFuY2UgPQorCQkJCQkJIFJPRkRNMF9YQ1RYSVFJTUJBTEFOQ0U7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9EXS5yZnR4aXFfaW1iYWxhbmNlID0KKwkJCQkJCSBST0ZETTBfWERUWElRSU1CQUxBTkNFOworCisJLyogVHggQUZFIGNvbnRyb2wgMiAgKi8KKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0FdLnJmdHhfYWZlID0gUk9GRE0wX1hBVFhBRkU7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9CXS5yZnR4X2FmZSA9IFJPRkRNMF9YQlRYQUZFOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQ10ucmZ0eF9hZmUgPSBST0ZETTBfWENUWEFGRTsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0RdLnJmdHhfYWZlID0gUk9GRE0wX1hEVFhBRkU7CisKKwkvKiBUcmFuY2VpdmVyIExTU0kgUmVhZGJhY2sgKi8KKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0FdLnJmbHNzaV9yZWFkYmFjayA9CisJCQkgUkZQR0EwX1hBX0xTU0lSRUFEQkFDSzsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0JdLnJmbHNzaV9yZWFkYmFjayA9CisJCQkgUkZQR0EwX1hCX0xTU0lSRUFEQkFDSzsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0NdLnJmbHNzaV9yZWFkYmFjayA9CisJCQkgUkZQR0EwX1hDX0xTU0lSRUFEQkFDSzsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0RdLnJmbHNzaV9yZWFkYmFjayA9CisJCQkgUkZQR0EwX1hEX0xTU0lSRUFEQkFDSzsKKworCS8qIFRyYW5jZWl2ZXIgTFNTSSBSZWFkYmFjayBQSSBtb2RlICAqLworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQV0ucmZsc3NpX3JlYWRiYWNrcGkgPQorCQkJIFRSQU5TQ0VJVkVSQV9IU1BJX1JFQURCQUNLOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQl0ucmZsc3NpX3JlYWRiYWNrcGkgPQorCQkJIFRSQU5TQ0VJVkVSQl9IU1BJX1JFQURCQUNLOworfQorCisKK3N0YXRpYyBib29sIF9ydGw5MnNfcGh5X2NvbmZpZ19iYihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggY29uZmlndHlwZSkKK3sKKwlpbnQgaTsKKwl1MzIgKnBoeV9yZWdfdGFibGU7CisJdTMyICphZ2NfdGFibGU7CisJdTE2IHBoeV9yZWdfbGVuLCBhZ2NfbGVuOworCisJYWdjX2xlbiA9IEFHQ1RBQl9BUlJBWUxFTkdUSDsKKwlhZ2NfdGFibGUgPSBydGw4MTkyc2VhZ2N0YWJfYXJyYXk7CisJLyogRGVmYXVsdCBSRl90eXBlOiAyVDJSICovCisJcGh5X3JlZ19sZW4gPSBQSFlfUkVHXzJUMlJBUlJBWUxFTkdUSDsKKwlwaHlfcmVnX3RhYmxlID0gcnRsODE5MnNlcGh5X3JlZ18ydDJyYXJyYXk7CisKKwlpZiAoY29uZmlndHlwZSA9PSBCQVNFQkFORF9DT05GSUdfUEhZX1JFRykgeworCQlmb3IgKGkgPSAwOyBpIDwgcGh5X3JlZ19sZW47IGkgPSBpICsgMikgeworCQkJaWYgKHBoeV9yZWdfdGFibGVbaV0gPT0gMHhmZSkKKwkJCQltZGVsYXkoNTApOworCQkJZWxzZSBpZiAocGh5X3JlZ190YWJsZVtpXSA9PSAweGZkKQorCQkJCW1kZWxheSg1KTsKKwkJCWVsc2UgaWYgKHBoeV9yZWdfdGFibGVbaV0gPT0gMHhmYykKKwkJCQltZGVsYXkoMSk7CisJCQllbHNlIGlmIChwaHlfcmVnX3RhYmxlW2ldID09IDB4ZmIpCisJCQkJdWRlbGF5KDUwKTsKKwkJCWVsc2UgaWYgKHBoeV9yZWdfdGFibGVbaV0gPT0gMHhmYSkKKwkJCQl1ZGVsYXkoNSk7CisJCQllbHNlIGlmIChwaHlfcmVnX3RhYmxlW2ldID09IDB4ZjkpCisJCQkJdWRlbGF5KDEpOworCisJCQkvKiBBZGQgZGVsYXkgZm9yIEVDUyBUMjAgJiBMRyBtYWxvdyBwbGF0Zm9ybSwgKi8KKwkJCXVkZWxheSgxKTsKKworCQkJcnRsOTJzX3BoeV9zZXRfYmJfcmVnKGh3LCBwaHlfcmVnX3RhYmxlW2ldLCBNQVNLRFdPUkQsCisJCQkJCXBoeV9yZWdfdGFibGVbaSArIDFdKTsKKwkJfQorCX0gZWxzZSBpZiAoY29uZmlndHlwZSA9PSBCQVNFQkFORF9DT05GSUdfQUdDX1RBQikgeworCQlmb3IgKGkgPSAwOyBpIDwgYWdjX2xlbjsgaSA9IGkgKyAyKSB7CisJCQlydGw5MnNfcGh5X3NldF9iYl9yZWcoaHcsIGFnY190YWJsZVtpXSwgTUFTS0RXT1JELAorCQkJCQlhZ2NfdGFibGVbaSArIDFdKTsKKworCQkJLyogQWRkIGRlbGF5IGZvciBFQ1MgVDIwICYgTEcgbWFsb3cgcGxhdGZvcm0gKi8KKwkJCXVkZWxheSgxKTsKKwkJfQorCX0KKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBfcnRsOTJzX3BoeV9zZXRfYmJfdG9fZGlmZl9yZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJICB1OCBjb25maWd0eXBlKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCXUzMiAqcGh5X3JlZ2FycmF5Mnh0eHJfdGFibGU7CisJdTE2IHBoeV9yZWdhcnJheTJ4dHhyX2xlbjsKKwlpbnQgaTsKKworCWlmIChydGxwaHktPnJmX3R5cGUgPT0gUkZfMVQxUikgeworCQlwaHlfcmVnYXJyYXkyeHR4cl90YWJsZSA9IHJ0bDgxOTJzZXBoeV9jaGFuZ2V0b18xdDFyYXJyYXk7CisJCXBoeV9yZWdhcnJheTJ4dHhyX2xlbiA9IFBIWV9DSEFOR0VUT18xVDFSQVJSQVlMRU5HVEg7CisJfSBlbHNlIGlmIChydGxwaHktPnJmX3R5cGUgPT0gUkZfMVQyUikgeworCQlwaHlfcmVnYXJyYXkyeHR4cl90YWJsZSA9IHJ0bDgxOTJzZXBoeV9jaGFuZ2V0b18xdDJyYXJyYXk7CisJCXBoeV9yZWdhcnJheTJ4dHhyX2xlbiA9IFBIWV9DSEFOR0VUT18xVDJSQVJSQVlMRU5HVEg7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChjb25maWd0eXBlID09IEJBU0VCQU5EX0NPTkZJR19QSFlfUkVHKSB7CisJCWZvciAoaSA9IDA7IGkgPCBwaHlfcmVnYXJyYXkyeHR4cl9sZW47IGkgPSBpICsgMykgeworCQkJaWYgKHBoeV9yZWdhcnJheTJ4dHhyX3RhYmxlW2ldID09IDB4ZmUpCisJCQkJbWRlbGF5KDUwKTsKKwkJCWVsc2UgaWYgKHBoeV9yZWdhcnJheTJ4dHhyX3RhYmxlW2ldID09IDB4ZmQpCisJCQkJbWRlbGF5KDUpOworCQkJZWxzZSBpZiAocGh5X3JlZ2FycmF5Mnh0eHJfdGFibGVbaV0gPT0gMHhmYykKKwkJCQltZGVsYXkoMSk7CisJCQllbHNlIGlmIChwaHlfcmVnYXJyYXkyeHR4cl90YWJsZVtpXSA9PSAweGZiKQorCQkJCXVkZWxheSg1MCk7CisJCQllbHNlIGlmIChwaHlfcmVnYXJyYXkyeHR4cl90YWJsZVtpXSA9PSAweGZhKQorCQkJCXVkZWxheSg1KTsKKwkJCWVsc2UgaWYgKHBoeV9yZWdhcnJheTJ4dHhyX3RhYmxlW2ldID09IDB4ZjkpCisJCQkJdWRlbGF5KDEpOworCisJCQlydGw5MnNfcGh5X3NldF9iYl9yZWcoaHcsIHBoeV9yZWdhcnJheTJ4dHhyX3RhYmxlW2ldLAorCQkJCXBoeV9yZWdhcnJheTJ4dHhyX3RhYmxlW2kgKyAxXSwKKwkJCQlwaHlfcmVnYXJyYXkyeHR4cl90YWJsZVtpICsgMl0pOworCQl9CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIF9ydGw5MnNfcGh5X2NvbmZpZ19iYl93aXRoX3BnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgIHU4IGNvbmZpZ3R5cGUpCit7CisJaW50IGk7CisJdTMyICpwaHlfdGFibGVfcGc7CisJdTE2IHBoeV9wZ19sZW47CisKKwlwaHlfcGdfbGVuID0gUEhZX1JFR19BUlJBWV9QR0xFTkdUSDsKKwlwaHlfdGFibGVfcGcgPSBydGw4MTkyc2VwaHlfcmVnX2FycmF5X3BnOworCisJaWYgKGNvbmZpZ3R5cGUgPT0gQkFTRUJBTkRfQ09ORklHX1BIWV9SRUcpIHsKKwkJZm9yIChpID0gMDsgaSA8IHBoeV9wZ19sZW47IGkgPSBpICsgMykgeworCQkJaWYgKHBoeV90YWJsZV9wZ1tpXSA9PSAweGZlKQorCQkJCW1kZWxheSg1MCk7CisJCQllbHNlIGlmIChwaHlfdGFibGVfcGdbaV0gPT0gMHhmZCkKKwkJCQltZGVsYXkoNSk7CisJCQllbHNlIGlmIChwaHlfdGFibGVfcGdbaV0gPT0gMHhmYykKKwkJCQltZGVsYXkoMSk7CisJCQllbHNlIGlmIChwaHlfdGFibGVfcGdbaV0gPT0gMHhmYikKKwkJCQl1ZGVsYXkoNTApOworCQkJZWxzZSBpZiAocGh5X3RhYmxlX3BnW2ldID09IDB4ZmEpCisJCQkJdWRlbGF5KDUpOworCQkJZWxzZSBpZiAocGh5X3RhYmxlX3BnW2ldID09IDB4ZjkpCisJCQkJdWRlbGF5KDEpOworCisJCQlfcnRsOTJzX3N0b3JlX3B3cmluZGV4X2RpZmZyYXRlX29mZnNldChodywKKwkJCQkJcGh5X3RhYmxlX3BnW2ldLAorCQkJCQlwaHlfdGFibGVfcGdbaSArIDFdLAorCQkJCQlwaHlfdGFibGVfcGdbaSArIDJdKTsKKwkJCXJ0bDkyc19waHlfc2V0X2JiX3JlZyhodywgcGh5X3RhYmxlX3BnW2ldLAorCQkJCQlwaHlfdGFibGVfcGdbaSArIDFdLAorCQkJCQlwaHlfdGFibGVfcGdbaSArIDJdKTsKKwkJfQorCX0KKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBfcnRsOTJzX3BoeV9iYl9jb25maWdfcGFyYWZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKKwlib29sIHJ0c3RhdHVzID0gdHJ1ZTsKKworCS8qIDEuIFJlYWQgUEhZX1JFRy5UWFQgQkIgSU5JVCEhICovCisJLyogV2Ugd2lsbCBzZXBhcmF0ZSBhcyAxVDFSLzFUMlIvMVQyUl9HUkVFTi8yVDJSICovCisJaWYgKHJ0bHBoeS0+cmZfdHlwZSA9PSBSRl8xVDJSIHx8IHJ0bHBoeS0+cmZfdHlwZSA9PSBSRl8yVDJSIHx8CisJICAgIHJ0bHBoeS0+cmZfdHlwZSA9PSBSRl8xVDFSIHx8IHJ0bHBoeS0+cmZfdHlwZSA9PSBSRl8yVDJSX0dSRUVOKSB7CisJCXJ0c3RhdHVzID0gX3J0bDkyc19waHlfY29uZmlnX2JiKGh3LCBCQVNFQkFORF9DT05GSUdfUEhZX1JFRyk7CisKKwkJaWYgKHJ0bHBoeS0+cmZfdHlwZSAhPSBSRl8yVDJSICYmCisJCSAgICBydGxwaHktPnJmX3R5cGUgIT0gUkZfMlQyUl9HUkVFTikKKwkJCS8qIHNvIHdlIHNob3VsZCByZWNvbmZpZyBCQiByZWcgd2l0aCB0aGUgcmlnaHQKKwkJCSAqIFBIWSBwYXJhbWV0ZXJzLiAqLworCQkJcnRzdGF0dXMgPSBfcnRsOTJzX3BoeV9zZXRfYmJfdG9fZGlmZl9yZihodywKKwkJCQkJCUJBU0VCQU5EX0NPTkZJR19QSFlfUkVHKTsKKwl9IGVsc2UgeworCQlydHN0YXR1cyA9IGZhbHNlOworCX0KKworCWlmIChydHN0YXR1cyAhPSB0cnVlKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0VNRVJHLAorCQkJICgiV3JpdGUgQkIgUmVnIEZhaWwhISIpKTsKKwkJZ290byBwaHlfQkI4MTkwX0NvbmZpZ19QYXJhRmlsZV9GYWlsOworCX0KKworCS8qIDIuIElmIEVFUFJPTSBvciBFRlVTRSBhdXRvbG9hZCBPSywgV2UgbXVzdCBjb25maWcgYnkKKwkgKiAgICBQSFlfUkVHX1BHLnR4dCAqLworCWlmIChydGxlZnVzZS0+YXV0b2xvYWRfZmFpbGZsYWcgPT0gZmFsc2UpIHsKKwkJcnRscGh5LT5wd3Jncm91cF9jbnQgPSAwOworCisJCXJ0c3RhdHVzID0gX3J0bDkyc19waHlfY29uZmlnX2JiX3dpdGhfcGcoaHcsCisJCQkJCQkgQkFTRUJBTkRfQ09ORklHX1BIWV9SRUcpOworCX0KKwlpZiAocnRzdGF0dXMgIT0gdHJ1ZSkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19FTUVSRywKKwkJCSAoIl9ydGw5MnNfcGh5X2JiX2NvbmZpZ19wYXJhZmlsZSgpOiAiCisJCQkgIkJCX1BHIFJlZyBGYWlsISEiKSk7CisJCWdvdG8gcGh5X0JCODE5MF9Db25maWdfUGFyYUZpbGVfRmFpbDsKKwl9CisKKwkvKiAzLiBCQiBBR0MgdGFibGUgSW5pdGlhbGl6YXRpb24gKi8KKwlydHN0YXR1cyA9IF9ydGw5MnNfcGh5X2NvbmZpZ19iYihodywgQkFTRUJBTkRfQ09ORklHX0FHQ19UQUIpOworCisJaWYgKHJ0c3RhdHVzICE9IHRydWUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICAiX3J0bDkyc19waHlfYmJfY29uZmlnX3BhcmFmaWxlKCk6ICIKKwkJICAgICAgICJBR0MgVGFibGUgRmFpbFxuIik7CisJCWdvdG8gcGh5X0JCODE5MF9Db25maWdfUGFyYUZpbGVfRmFpbDsKKwl9CisKKwkvKiBDaGVjayBpZiB0aGUgQ0NLIEhpZ2hQb3dlciBpcyB0dXJuZWQgT04uICovCisJLyogVGhpcyBpcyB1c2VkIHRvIGNhbGN1bGF0ZSBQV0RCLiAqLworCXJ0bHBoeS0+Y2NrX2hpZ2hfcG93ZXIgPSAoYm9vbCkocnRsOTJzX3BoeV9xdWVyeV9iYl9yZWcoaHcsCisJCQlSRlBHQTBfWEFfSFNTSVBBUkFNRVRFUjIsIDB4MjAwKSk7CisKK3BoeV9CQjgxOTBfQ29uZmlnX1BhcmFGaWxlX0ZhaWw6CisJcmV0dXJuIHJ0c3RhdHVzOworfQorCit1OCBydGw5MnNfcGh5X2NvbmZpZ19yZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSByYWRpb19wYXRoIHJmcGF0aCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlpbnQgaTsKKwlib29sIHJ0c3RhdHVzID0gdHJ1ZTsKKwl1MzIgKnJhZGlvX2FfdGFibGU7CisJdTMyICpyYWRpb19iX3RhYmxlOworCXUxNiByYWRpb19hX3RibGVuLCByYWRpb19iX3RibGVuOworCisJcmFkaW9fYV90YmxlbiA9IFJBRElPQV8xVF9BUlJBWUxFTkdUSDsKKwlyYWRpb19hX3RhYmxlID0gcnRsODE5MnNlcmFkaW9hXzF0X2FycmF5OworCisJLyogVXNpbmcgR3JlZW4gbW9kZSBhcnJheSB0YWJsZSBmb3IgUkZfMlQyUl9HUkVFTiAqLworCWlmIChydGxwaHktPnJmX3R5cGUgPT0gUkZfMlQyUl9HUkVFTikgeworCQlyYWRpb19iX3RhYmxlID0gcnRsODE5MnNlcmFkaW9iX2dtX2FycmF5OworCQlyYWRpb19iX3RibGVuID0gUkFESU9CX0dNX0FSUkFZTEVOR1RIOworCX0gZWxzZSB7CisJCXJhZGlvX2JfdGFibGUgPSBydGw4MTkyc2VyYWRpb2JfYXJyYXk7CisJCXJhZGlvX2JfdGJsZW4gPSBSQURJT0JfQVJSQVlMRU5HVEg7CisJfQorCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfTE9VRCwgKCJSYWRpbyBObyAleFxuIiwgcmZwYXRoKSk7CisJcnRzdGF0dXMgPSB0cnVlOworCisJc3dpdGNoIChyZnBhdGgpIHsKKwljYXNlIFJGOTBfUEFUSF9BOgorCQlmb3IgKGkgPSAwOyBpIDwgcmFkaW9fYV90YmxlbjsgaSA9IGkgKyAyKSB7CisJCQlpZiAocmFkaW9fYV90YWJsZVtpXSA9PSAweGZlKQorCQkJCS8qIERlbGF5IHNwZWNpZmljIG1zLiBPbmx5IFJGIGNvbmZpZ3VyYXRpb24KKwkJCQkgKiByZXF1aXJlcyBkZWxheS4gKi8KKwkJCQltZGVsYXkoNTApOworCQkJZWxzZSBpZiAocmFkaW9fYV90YWJsZVtpXSA9PSAweGZkKQorCQkJCW1kZWxheSg1KTsKKwkJCWVsc2UgaWYgKHJhZGlvX2FfdGFibGVbaV0gPT0gMHhmYykKKwkJCQltZGVsYXkoMSk7CisJCQllbHNlIGlmIChyYWRpb19hX3RhYmxlW2ldID09IDB4ZmIpCisJCQkJdWRlbGF5KDUwKTsKKwkJCWVsc2UgaWYgKHJhZGlvX2FfdGFibGVbaV0gPT0gMHhmYSkKKwkJCQl1ZGVsYXkoNSk7CisJCQllbHNlIGlmIChyYWRpb19hX3RhYmxlW2ldID09IDB4ZjkpCisJCQkJdWRlbGF5KDEpOworCQkJZWxzZQorCQkJCXJ0bDkyc19waHlfc2V0X3JmX3JlZyhodywgcmZwYXRoLAorCQkJCQkJICAgICAgcmFkaW9fYV90YWJsZVtpXSwKKwkJCQkJCSAgICAgIE1BU0syMEJJVFMsCisJCQkJCQkgICAgICByYWRpb19hX3RhYmxlW2kgKyAxXSk7CisKKwkJCS8qIEFkZCBkZWxheSBmb3IgRUNTIFQyMCAmIExHIG1hbG93IHBsYXRmb3JtICovCisJCQl1ZGVsYXkoMSk7CisJCX0KKworCQkvKiBQQSBCaWFzIGN1cnJlbnQgZm9yIGluZmVyaW9yaXR5IElDICovCisJCV9ydGw5MnNfcGh5X2NvbmZpZ19yZnBhX2JpYXNfY3VycmVudChodywgcmZwYXRoKTsKKwkJYnJlYWs7CisJY2FzZSBSRjkwX1BBVEhfQjoKKwkJZm9yIChpID0gMDsgaSA8IHJhZGlvX2JfdGJsZW47IGkgPSBpICsgMikgeworCQkJaWYgKHJhZGlvX2JfdGFibGVbaV0gPT0gMHhmZSkKKwkJCQkvKiBEZWxheSBzcGVjaWZpYyBtcy4gT25seSBSRiBjb25maWd1cmF0aW9uCisJCQkJICogcmVxdWlyZXMgZGVsYXkuKi8KKwkJCQltZGVsYXkoNTApOworCQkJZWxzZSBpZiAocmFkaW9fYl90YWJsZVtpXSA9PSAweGZkKQorCQkJCW1kZWxheSg1KTsKKwkJCWVsc2UgaWYgKHJhZGlvX2JfdGFibGVbaV0gPT0gMHhmYykKKwkJCQltZGVsYXkoMSk7CisJCQllbHNlIGlmIChyYWRpb19iX3RhYmxlW2ldID09IDB4ZmIpCisJCQkJdWRlbGF5KDUwKTsKKwkJCWVsc2UgaWYgKHJhZGlvX2JfdGFibGVbaV0gPT0gMHhmYSkKKwkJCQl1ZGVsYXkoNSk7CisJCQllbHNlIGlmIChyYWRpb19iX3RhYmxlW2ldID09IDB4ZjkpCisJCQkJdWRlbGF5KDEpOworCQkJZWxzZQorCQkJCXJ0bDkyc19waHlfc2V0X3JmX3JlZyhodywgcmZwYXRoLAorCQkJCQkJICAgICAgcmFkaW9fYl90YWJsZVtpXSwKKwkJCQkJCSAgICAgIE1BU0syMEJJVFMsCisJCQkJCQkgICAgICByYWRpb19iX3RhYmxlW2kgKyAxXSk7CisKKwkJCS8qIEFkZCBkZWxheSBmb3IgRUNTIFQyMCAmIExHIG1hbG93IHBsYXRmb3JtICovCisJCQl1ZGVsYXkoMSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBSRjkwX1BBVEhfQzoKKwkJOworCQlicmVhazsKKwljYXNlIFJGOTBfUEFUSF9EOgorCQk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiBydHN0YXR1czsKK30KKworCitib29sIHJ0bDkyc19waHlfbWFjX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTMyIGk7CisJdTMyIGFycmF5bGVuZ3RoOworCXUzMiAqcHRyYUFycmF5OworCisJYXJyYXlsZW5ndGggPSBNQUNfMlRfQVJSQVlMRU5HVEg7CisJcHRyYUFycmF5ID0gcnRsODE5MnNlbWFjXzJ0X2FycmF5OworCisJZm9yIChpID0gMDsgaSA8IGFycmF5bGVuZ3RoOyBpID0gaSArIDIpCisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIHB0cmFBcnJheVtpXSwgKHU4KXB0cmFBcnJheVtpICsgMV0pOworCisJcmV0dXJuIHRydWU7Cit9CisKKworYm9vbCBydGw5MnNfcGh5X2JiX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlib29sIHJ0c3RhdHVzID0gdHJ1ZTsKKwl1OCBwYXRobWFwLCBpbmRleCwgcmZfbnVtID0gMDsKKwl1OCBwYXRoMSwgcGF0aDI7CisKKwlfcnRsOTJzX3BoeV9pbml0X3JlZ2lzdGVyX2RlZmluaXRpb24oaHcpOworCisJLyogQ29uZmlnIEJCIGFuZCBBR0MgKi8KKwlydHN0YXR1cyA9IF9ydGw5MnNfcGh5X2JiX2NvbmZpZ19wYXJhZmlsZShodyk7CisKKworCS8qIENoZWNrIEJCL1JGIGNvbmZpdXJhdGlvbiBzZXR0aW5nLiAqLworCS8qIFdlIG9ubHkgbmVlZCB0byBjb25maWd1cmUgUkYgd2hpY2ggaXMgdHVybmVkIG9uLiAqLworCXBhdGgxID0gKHU4KShydGw5MnNfcGh5X3F1ZXJ5X2JiX3JlZyhodywgUkZQR0EwX1RYSU5GTywgMHhmKSk7CisJbWRlbGF5KDEwKTsKKwlwYXRoMiA9ICh1OCkocnRsOTJzX3BoeV9xdWVyeV9iYl9yZWcoaHcsIFJPRkRNMF9UUlhQQVRIRU5BQkxFLCAweGYpKTsKKwlwYXRobWFwID0gcGF0aDEgfCBwYXRoMjsKKworCXJ0bHBoeS0+cmZfcGF0aG1hcCA9IHBhdGhtYXA7CisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgNDsgaW5kZXgrKykgeworCQlpZiAoKHBhdGhtYXAgPj4gaW5kZXgpICYgMHgxKQorCQkJcmZfbnVtKys7CisJfQorCisJaWYgKChydGxwaHktPnJmX3R5cGUgPT0gUkZfMVQxUiAmJiByZl9udW0gIT0gMSkgfHwKKwkgICAgKHJ0bHBoeS0+cmZfdHlwZSA9PSBSRl8xVDJSICYmIHJmX251bSAhPSAyKSB8fAorCSAgICAocnRscGh5LT5yZl90eXBlID09IFJGXzJUMlIgJiYgcmZfbnVtICE9IDIpIHx8CisJICAgIChydGxwaHktPnJmX3R5cGUgPT0gUkZfMlQyUl9HUkVFTiAmJiByZl9udW0gIT0gMikpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfRU1FUkcsCisJCQkgKCJSRl9UeXBlKCV4KSBkb2VzIG5vdCBtYXRjaCAiCisJCQkgIlJGX051bSgleCkhIVxuIiwgcnRscGh5LT5yZl90eXBlLCByZl9udW0pKTsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfRU1FUkcsCisJCQkgKCJwYXRoMSAweCV4LCBwYXRoMiAweCV4LCBwYXRobWFwICIKKwkJCSAgIjB4JXhcbiIsIHBhdGgxLCBwYXRoMiwgcGF0aG1hcCkpOworCX0KKworCXJldHVybiBydHN0YXR1czsKK30KKworYm9vbCBydGw5MnNfcGh5X3JmX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKworCS8qIEluaXRpYWxpemUgZ2VuZXJhbCBnbG9iYWwgdmFsdWUgKi8KKwlpZiAocnRscGh5LT5yZl90eXBlID09IFJGXzFUMVIpCisJCXJ0bHBoeS0+bnVtX3RvdGFsX3JmcGF0aCA9IDE7CisJZWxzZQorCQlydGxwaHktPm51bV90b3RhbF9yZnBhdGggPSAyOworCisJLyogQ29uZmlnIEJCIGFuZCBSRiAqLworCXJldHVybiBydGw5MnNfcGh5X3JmNjA1Ml9jb25maWcoaHcpOworfQorCit2b2lkIHJ0bDkyc19waHlfZ2V0X2h3X3JlZ19vcmlnaW5hbHZhbHVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCisJLyogcmVhZCByeCBpbml0aWFsIGdhaW4gKi8KKwlydGxwaHktPmRlZmF1bHRfaW5pdGlhbGdhaW5bMF0gPSBydGxfZ2V0X2JicmVnKGh3LAorCQkJUk9GRE0wX1hBQUdDQ09SRTEsIE1BU0tCWVRFMCk7CisJcnRscGh5LT5kZWZhdWx0X2luaXRpYWxnYWluWzFdID0gcnRsX2dldF9iYnJlZyhodywKKwkJCVJPRkRNMF9YQkFHQ0NPUkUxLCBNQVNLQllURTApOworCXJ0bHBoeS0+ZGVmYXVsdF9pbml0aWFsZ2FpblsyXSA9IHJ0bF9nZXRfYmJyZWcoaHcsCisJCQlST0ZETTBfWENBR0NDT1JFMSwgTUFTS0JZVEUwKTsKKwlydGxwaHktPmRlZmF1bHRfaW5pdGlhbGdhaW5bM10gPSBydGxfZ2V0X2JicmVnKGh3LAorCQkJUk9GRE0wX1hEQUdDQ09SRTEsIE1BU0tCWVRFMCk7CisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfTE9VRCwgKCJEZWZhdWx0IGluaXRpYWwgZ2FpbiAiCisJCSAiKGM1MD0weCV4LCBjNTg9MHgleCwgYzYwPTB4JXgsIGM2OD0weCV4KVxuIiwKKwkJIHJ0bHBoeS0+ZGVmYXVsdF9pbml0aWFsZ2FpblswXSwKKwkJIHJ0bHBoeS0+ZGVmYXVsdF9pbml0aWFsZ2FpblsxXSwKKwkJIHJ0bHBoeS0+ZGVmYXVsdF9pbml0aWFsZ2FpblsyXSwKKwkJIHJ0bHBoeS0+ZGVmYXVsdF9pbml0aWFsZ2FpblszXSkpOworCisJLyogcmVhZCBmcmFtZXN5bmMgKi8KKwlydGxwaHktPmZyYW1lc3luYyA9IHJ0bF9nZXRfYmJyZWcoaHcsIFJPRkRNMF9SWERFVEVDVE9SMywgTUFTS0JZVEUwKTsKKwlydGxwaHktPmZyYW1lc3luY19jMzQgPSBydGxfZ2V0X2JicmVnKGh3LCBST0ZETTBfUlhERVRFQ1RPUjIsCisJCQkJCSAgICAgIE1BU0tEV09SRCk7CisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfTE9VRCwKKwkJICgiRGVmYXVsdCBmcmFtZXN5bmMgKDB4JXgpID0gMHgleFxuIiwKKwkJIFJPRkRNMF9SWERFVEVDVE9SMywgcnRscGh5LT5mcmFtZXN5bmMpKTsKKworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJzX3BoeV9nZXRfdHhwb3dlcl9pbmRleChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggY2hhbm5lbCwKKwkJCQkJICB1OCAqY2NrcG93ZXJsZXZlbCwgdTggKm9mZG1wb3dlckxldmVsKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisJdTggaW5kZXggPSAoY2hhbm5lbCAtIDEpOworCisJLyogMS4gQ0NLICovCisJLyogUkYtQSAqLworCWNja3Bvd2VybGV2ZWxbMF0gPSBydGxlZnVzZS0+dHhwd3JsZXZlbF9jY2tbMF1baW5kZXhdOworCS8qIFJGLUIgKi8KKwljY2twb3dlcmxldmVsWzFdID0gcnRsZWZ1c2UtPnR4cHdybGV2ZWxfY2NrWzFdW2luZGV4XTsKKworCS8qIDIuIE9GRE0gZm9yIDFUIG9yIDJUICovCisJaWYgKHJ0bHBoeS0+cmZfdHlwZSA9PSBSRl8xVDJSIHx8IHJ0bHBoeS0+cmZfdHlwZSA9PSBSRl8xVDFSKSB7CisJCS8qIFJlYWQgSFQgNDAgT0ZETSBUWCBwb3dlciAqLworCQlvZmRtcG93ZXJMZXZlbFswXSA9IHJ0bGVmdXNlLT50eHB3cmxldmVsX2h0NDBfMXNbMF1baW5kZXhdOworCQlvZmRtcG93ZXJMZXZlbFsxXSA9IHJ0bGVmdXNlLT50eHB3cmxldmVsX2h0NDBfMXNbMV1baW5kZXhdOworCX0gZWxzZSBpZiAocnRscGh5LT5yZl90eXBlID09IFJGXzJUMlIpIHsKKwkJLyogUmVhZCBIVCA0MCBPRkRNIFRYIHBvd2VyICovCisJCW9mZG1wb3dlckxldmVsWzBdID0gcnRsZWZ1c2UtPnR4cHdybGV2ZWxfaHQ0MF8yc1swXVtpbmRleF07CisJCW9mZG1wb3dlckxldmVsWzFdID0gcnRsZWZ1c2UtPnR4cHdybGV2ZWxfaHQ0MF8yc1sxXVtpbmRleF07CisJfQorfQorCitzdGF0aWMgdm9pZCBfcnRsOTJzX3BoeV9jY3hwb3dlcl9pbmRleGNoZWNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQl1OCBjaGFubmVsLCB1OCAqY2NrcG93ZXJsZXZlbCwgdTggKm9mZG1wb3dlcmxldmVsKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCisJcnRscGh5LT5jdXJfY2NrX3R4cHdyaWR4ID0gY2NrcG93ZXJsZXZlbFswXTsKKwlydGxwaHktPmN1cl9vZmRtMjRnX3R4cHdyaWR4ID0gb2ZkbXBvd2VybGV2ZWxbMF07Cit9CisKK3ZvaWQgcnRsOTJzX3BoeV9zZXRfdHhwb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTgJY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKKwkvKiBbMF06UkYtQSwgWzFdOlJGLUIgKi8KKwl1OCBjY2twb3dlcmxldmVsWzJdLCBvZmRtcG93ZXJMZXZlbFsyXTsKKworCWlmIChydGxlZnVzZS0+dHhwd3JfZnJvbWVwcm9tID09IGZhbHNlKQorCQlyZXR1cm47CisKKwkvKiBNYWlubHkgd2UgdXNlIFJGLUEgVHggUG93ZXIgdG8gd3JpdGUgdGhlIFR4IFBvd2VyIHJlZ2lzdGVycywKKwkgKiBidXQgdGhlIFJGLUIgVHggUG93ZXIgbXVzdCBiZSBjYWxjdWxhdGVkIGJ5IHRoZSBhbnRlbm5hIGRpZmYuCisJICogU28gd2UgaGF2ZSB0byByZXdyaXRlIEFudGVubmEgZ2FpbiBvZmZzZXQgcmVnaXN0ZXIgaGVyZS4KKwkgKiBQbGVhc2UgcmVmZXIgdG8gQkIgcmVnaXN0ZXIgMHg4MGMKKwkgKiAxLiBGb3IgQ0NLLgorCSAqIDIuIEZvciBPRkRNIDFUIG9yIDJUICovCisJX3J0bDkyc19waHlfZ2V0X3R4cG93ZXJfaW5kZXgoaHcsIGNoYW5uZWwsICZjY2twb3dlcmxldmVsWzBdLAorCQkJJm9mZG1wb3dlckxldmVsWzBdKTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19MT1VELAorCQkJKCJDaGFubmVsLSVkLCBjY2tQb3dlckxldmVsIChBIC8gQikgPSAiCisJCQkiMHgleCAvIDB4JXgsICAgb2ZkbVBvd2VyTGV2ZWwgKEEgLyBCKSA9IDB4JXggLyAweCV4XG4iLAorCQkJY2hhbm5lbCwgY2NrcG93ZXJsZXZlbFswXSwgY2NrcG93ZXJsZXZlbFsxXSwKKwkJCW9mZG1wb3dlckxldmVsWzBdLCBvZmRtcG93ZXJMZXZlbFsxXSkpOworCisJX3J0bDkyc19waHlfY2N4cG93ZXJfaW5kZXhjaGVjayhodywgY2hhbm5lbCwgJmNja3Bvd2VybGV2ZWxbMF0sCisJCQkmb2ZkbXBvd2VyTGV2ZWxbMF0pOworCisJcnRsOTJzX3BoeV9yZjYwNTJfc2V0X2Nja3R4cG93ZXIoaHcsIGNja3Bvd2VybGV2ZWxbMF0pOworCXJ0bDkyc19waHlfcmY2MDUyX3NldF9vZmRtdHhwb3dlcihodywgJm9mZG1wb3dlckxldmVsWzBdLCBjaGFubmVsKTsKKworfQorCit2b2lkIHJ0bDkyc19waHlfY2hrX2Z3Y21kX2lvZG9uZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTE2IHBvbGxpbmdjbnQgPSAxMDAwMDsKKwl1MzIgdG1wdmFsdWU7CisKKwkvKiBNYWtlIHN1cmUgdGhhdCBDTUQgSU8gaGFzIGJlIGFjY2VwdGVkIGJ5IEZXLiAqLworCWRvIHsKKwkJdWRlbGF5KDEwKTsKKworCQl0bXB2YWx1ZSA9IHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsIFdGTTUpOworCQlpZiAodG1wdmFsdWUgPT0gMCkKKwkJCWJyZWFrOworCX0gd2hpbGUgKC0tcG9sbGluZ2NudCk7CisKKwlpZiAocG9sbGluZ2NudCA9PSAwKQorCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLCAoIlNldCBGVyBDbWQgZmFpbCEhXG4iKSk7Cit9CisKKworc3RhdGljIHZvaWQgX3J0bDkyc19waHlfc2V0X2Z3Y21kX2lvKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJdTMyIGlucHV0LCBjdXJyZW50X2FpZCA9IDA7CisKKwlpZiAoaXNfaGFsX3N0b3AocnRsaGFsKSkKKwkJcmV0dXJuOworCisJLyogV2UgcmUtbWFwIFJBIHJlbGF0ZWQgQ01EIElPIHRvIGNvbWJpbmF0aW9uYWwgb25lcyAqLworCS8qIGlmIEZXIHZlcnNpb24gaXMgdi41MiBvciBsYXRlci4gKi8KKwlzd2l0Y2ggKHJ0bGhhbC0+Y3VycmVudF9md2NtZF9pbykgeworCWNhc2UgRldfQ01EX1JBX1JFRlJFU0hfTjoKKwkJcnRsaGFsLT5jdXJyZW50X2Z3Y21kX2lvID0gRldfQ01EX1JBX1JFRlJFU0hfTl9DT01COworCQlicmVhazsKKwljYXNlIEZXX0NNRF9SQV9SRUZSRVNIX0JHOgorCQlydGxoYWwtPmN1cnJlbnRfZndjbWRfaW8gPSBGV19DTURfUkFfUkVGUkVTSF9CR19DT01COworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKHJ0bGhhbC0+Y3VycmVudF9md2NtZF9pbykgeworCWNhc2UgRldfQ01EX1JBX1JFU0VUOgorCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0NNRCwgREJHX0RNRVNHLAorCQkJICgiRldfQ01EX1JBX1JFU0VUXG4iKSk7CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBXRk01LCBGV19SQV9SRVNFVCk7CisJCXJ0bDkyc19waHlfY2hrX2Z3Y21kX2lvZG9uZShodyk7CisJCWJyZWFrOworCWNhc2UgRldfQ01EX1JBX0FDVElWRToKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9DTUQsIERCR19ETUVTRywKKwkJCSAoIkZXX0NNRF9SQV9BQ1RJVkVcbiIpKTsKKwkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFdGTTUsIEZXX1JBX0FDVElWRSk7CisJCXJ0bDkyc19waHlfY2hrX2Z3Y21kX2lvZG9uZShodyk7CisJCWJyZWFrOworCWNhc2UgRldfQ01EX1JBX1JFRlJFU0hfTjoKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9DTUQsIERCR19ETUVTRywKKwkJCSAoIkZXX0NNRF9SQV9SRUZSRVNIX05cbiIpKTsKKwkJaW5wdXQgPSBGV19SQV9SRUZSRVNIOworCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgV0ZNNSwgaW5wdXQpOworCQlydGw5MnNfcGh5X2Noa19md2NtZF9pb2RvbmUoaHcpOworCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgV0ZNNSwgRldfUkFfRU5BQkxFX1JTU0lfTUFTSyk7CisJCXJ0bDkyc19waHlfY2hrX2Z3Y21kX2lvZG9uZShodyk7CisJCWJyZWFrOworCWNhc2UgRldfQ01EX1JBX1JFRlJFU0hfQkc6CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfQ01ELCBEQkdfRE1FU0csCisJCQkgKCJGV19DTURfUkFfUkVGUkVTSF9CR1xuIikpOworCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgV0ZNNSwgRldfUkFfUkVGUkVTSCk7CisJCXJ0bDkyc19waHlfY2hrX2Z3Y21kX2lvZG9uZShodyk7CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBXRk01LCBGV19SQV9ESVNBQkxFX1JTU0lfTUFTSyk7CisJCXJ0bDkyc19waHlfY2hrX2Z3Y21kX2lvZG9uZShodyk7CisJCWJyZWFrOworCWNhc2UgRldfQ01EX1JBX1JFRlJFU0hfTl9DT01COgorCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0NNRCwgREJHX0RNRVNHLAorCQkJICgiRldfQ01EX1JBX1JFRlJFU0hfTl9DT01CXG4iKSk7CisJCWlucHV0ID0gRldfUkFfSU9UX05fQ09NQjsKKwkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFdGTTUsIGlucHV0KTsKKwkJcnRsOTJzX3BoeV9jaGtfZndjbWRfaW9kb25lKGh3KTsKKwkJYnJlYWs7CisJY2FzZSBGV19DTURfUkFfUkVGUkVTSF9CR19DT01COgorCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0NNRCwgREJHX0RNRVNHLAorCQkJICgiRldfQ01EX1JBX1JFRlJFU0hfQkdfQ09NQlxuIikpOworCQlpbnB1dCA9IEZXX1JBX0lPVF9CR19DT01COworCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgV0ZNNSwgaW5wdXQpOworCQlydGw5MnNfcGh5X2Noa19md2NtZF9pb2RvbmUoaHcpOworCQlicmVhazsKKwljYXNlIEZXX0NNRF9JUUtfRU5BQkxFOgorCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0NNRCwgREJHX0RNRVNHLAorCQkJICgiRldfQ01EX0lRS19FTkFCTEVcbiIpKTsKKwkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFdGTTUsIEZXX0lRS19FTkFCTEUpOworCQlydGw5MnNfcGh5X2Noa19md2NtZF9pb2RvbmUoaHcpOworCQlicmVhazsKKwljYXNlIEZXX0NNRF9QQVVTRV9ETV9CWV9TQ0FOOgorCQkvKiBMb3dlciBpbml0aWFsIGdhaW4gKi8KKwkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX1hBQUdDQ09SRTEsIE1BU0tCWVRFMCwgMHgxNyk7CisJCXJ0bF9zZXRfYmJyZWcoaHcsIFJPRkRNMF9YQkFHQ0NPUkUxLCBNQVNLQllURTAsIDB4MTcpOworCQkvKiBDQ0EgdGhyZXNob2xkICovCisJCXJ0bF9zZXRfYmJyZWcoaHcsIFJDQ0swX0NDQSwgTUFTS0JZVEUyLCAweDQwKTsKKwkJYnJlYWs7CisJY2FzZSBGV19DTURfUkVTVU1FX0RNX0JZX1NDQU46CisJCS8qIENDQSB0aHJlc2hvbGQgKi8KKwkJcnRsX3NldF9iYnJlZyhodywgUkNDSzBfQ0NBLCBNQVNLQllURTIsIDB4Y2QpOworCQlydGw5MnNfcGh5X3NldF90eHBvd2VyKGh3LCBydGxwaHktPmN1cnJlbnRfY2hhbm5lbCk7CisJCWJyZWFrOworCWNhc2UgRldfQ01EX0hJR0hfUFdSX0RJU0FCTEU6CisJCWlmIChydGxwcml2LT5kbS5kbV9mbGFnICYgSEFMX0RNX0hJUFdSX0RJU0FCTEUpCisJCQlicmVhazsKKworCQkvKiBMb3dlciBpbml0aWFsIGdhaW4gKi8KKwkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX1hBQUdDQ09SRTEsIE1BU0tCWVRFMCwgMHgxNyk7CisJCXJ0bF9zZXRfYmJyZWcoaHcsIFJPRkRNMF9YQkFHQ0NPUkUxLCBNQVNLQllURTAsIDB4MTcpOworCQkvKiBDQ0EgdGhyZXNob2xkICovCisJCXJ0bF9zZXRfYmJyZWcoaHcsIFJDQ0swX0NDQSwgTUFTS0JZVEUyLCAweDQwKTsKKwkJYnJlYWs7CisJY2FzZSBGV19DTURfSElHSF9QV1JfRU5BQkxFOgorCQlpZiAoKHJ0bHByaXYtPmRtLmRtX2ZsYWcgJiBIQUxfRE1fSElQV1JfRElTQUJMRSkgfHwKKwkJCShydGxwcml2LT5kbS5keW5hbWljX3R4cG93ZXJfZW5hYmxlID09IHRydWUpKQorCQkJYnJlYWs7CisKKwkJLyogQ0NBIHRocmVzaG9sZCAqLworCQlydGxfc2V0X2JicmVnKGh3LCBSQ0NLMF9DQ0EsIE1BU0tCWVRFMiwgMHhjZCk7CisJCWJyZWFrOworCWNhc2UgRldfQ01EX0xQU19FTlRFUjoKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9DTUQsIERCR19ETUVTRywKKwkJCSAoIkZXX0NNRF9MUFNfRU5URVJcbiIpKTsKKwkJY3VycmVudF9haWQgPSBydGxwcml2LT5tYWM4MDIxMS5hc3NvY19pZDsKKwkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFdGTTUsIChGV19MUFNfRU5URVIgfAorCQkJCSgoY3VycmVudF9haWQgfCAweGMwMDApIDw8IDgpKSk7CisJCXJ0bDkyc19waHlfY2hrX2Z3Y21kX2lvZG9uZShodyk7CisJCS8qIEZXIHNldCBUWE9QIGRpc2FibGUgaGVyZSwgc28gZGlzYWJsZSBFRENBCisJCSAqIHR1cmJvIG1vZGUgdW50aWwgZHJpdmVyIGxlYXZlIExQUyAqLworCQlicmVhazsKKwljYXNlIEZXX0NNRF9MUFNfTEVBVkU6CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfQ01ELCBEQkdfRE1FU0csCisJCQkgKCJGV19DTURfTFBTX0xFQVZFXG4iKSk7CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBXRk01LCBGV19MUFNfTEVBVkUpOworCQlydGw5MnNfcGh5X2Noa19md2NtZF9pb2RvbmUoaHcpOworCQlicmVhazsKKwljYXNlIEZXX0NNRF9BRERfQTJfRU5UUlk6CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfQ01ELCBEQkdfRE1FU0csCisJCQkgKCJGV19DTURfQUREX0EyX0VOVFJZXG4iKSk7CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBXRk01LCBGV19BRERfQTJfRU5UUlkpOworCQlydGw5MnNfcGh5X2Noa19md2NtZF9pb2RvbmUoaHcpOworCQlicmVhazsKKwljYXNlIEZXX0NNRF9DVFJMX0RNX0JZX0RSSVZFUjoKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9DTUQsIERCR19MT1VELAorCQkJICgiRldfQ01EX0NUUkxfRE1fQllfRFJJVkVSXG4iKSk7CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBXRk01LCBGV19DVFJMX0RNX0JZX0RSSVZFUik7CisJCXJ0bDkyc19waHlfY2hrX2Z3Y21kX2lvZG9uZShodyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcnRsOTJzX3BoeV9jaGtfZndjbWRfaW9kb25lKGh3KTsKKworCS8qIENsZWFyIEZXIENNRCBvcGVyYXRpb24gZmxhZy4gKi8KKwlydGxoYWwtPnNldF9md2NtZF9pbnByb2dyZXNzID0gZmFsc2U7Cit9CisKK2Jvb2wgcnRsOTJzX3BoeV9zZXRfZndfY21kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIGZ3Y21kX2lvdHlwZSBmd19jbWRpbykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX2VmdXNlICpydGxlZnVzZSA9IHJ0bF9lZnVzZShydGxfcHJpdihodykpOworCXUzMglmd19wYXJhbSA9IEZXX0NNRF9JT19QQVJBX1FVRVJZKHJ0bHByaXYpOworCXUxNglmd19jbWRtYXAgPSBGV19DTURfSU9fUVVFUlkocnRscHJpdik7CisJYm9vbCBiUG9zdFByb2Nlc3NpbmcgPSBmYWxzZTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfQ01ELCBEQkdfTE9VRCwKKwkJCSgiU2V0IEZXIENtZCglI3gpLCBzZXRfZndjbWRfaW5wcm9ncmVzcyglZClcbiIsCisJCQlmd19jbWRpbywgcnRsaGFsLT5zZXRfZndjbWRfaW5wcm9ncmVzcykpOworCisJZG8geworCQkvKiBXZSByZS1tYXAgdG8gY29tYmluZWQgRlcgQ01EIG9uZXMgaWYgZmlybXdhcmUgdmVyc2lvbiAqLworCQkvKiBpcyB2LjUzIG9yIGxhdGVyLiAqLworCQlzd2l0Y2ggKGZ3X2NtZGlvKSB7CisJCWNhc2UgRldfQ01EX1JBX1JFRlJFU0hfTjoKKwkJCWZ3X2NtZGlvID0gRldfQ01EX1JBX1JFRlJFU0hfTl9DT01COworCQkJYnJlYWs7CisJCWNhc2UgRldfQ01EX1JBX1JFRlJFU0hfQkc6CisJCQlmd19jbWRpbyA9IEZXX0NNRF9SQV9SRUZSRVNIX0JHX0NPTUI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJLyogSWYgZmlybXdhcmUgdmVyc2lvbiBpcyB2LjYyIG9yIGxhdGVyLAorCQkgKiB1c2UgRldfQ01EX0lPX1NFVCBmb3IgRldfQ01EX0NUUkxfRE1fQllfRFJJVkVSICovCisJCWlmIChoYWxfZ2V0X2Zpcm13YXJldmVyc2lvbihydGxwcml2KSA+PSAweDNFKSB7CisJCQlpZiAoZndfY21kaW8gPT0gRldfQ01EX0NUUkxfRE1fQllfRFJJVkVSKQorCQkJCWZ3X2NtZGlvID0gRldfQ01EX0NUUkxfRE1fQllfRFJJVkVSX05FVzsKKwkJfQorCisKKwkJLyogV2Ugc2hhbGwgcmV2aXNlIGFsbCBGVyBDbWQgSU8gaW50byBSZWcweDM2NAorCQkgKiBETSBtYXAgdGFibGUgaW4gdGhlIGZ1dHVyZS4gKi8KKwkJc3dpdGNoIChmd19jbWRpbykgeworCQljYXNlIEZXX0NNRF9SQV9JTklUOgorCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9DTUQsIERCR19MT1VELCAoIlJBIGluaXQhIVxuIikpOworCQkJZndfY21kbWFwIHw9IEZXX1JBX0lOSVRfQ1RMOworCQkJRldfQ01EX0lPX1NFVChydGxwcml2LCBmd19jbWRtYXApOworCQkJLyogQ2xlYXIgY29udHJvbCBmbGFnIHRvIHN5bmMgd2l0aCBGVy4gKi8KKwkJCUZXX0NNRF9JT19DTFIocnRscHJpdiwgRldfUkFfSU5JVF9DVEwpOworCQkJYnJlYWs7CisJCWNhc2UgRldfQ01EX0RJR19ESVNBQkxFOgorCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9DTUQsIERCR19MT1VELAorCQkJCSAoIlNldCBESUcgZGlzYWJsZSEhXG4iKSk7CisJCQlmd19jbWRtYXAgJj0gfkZXX0RJR19FTkFCTEVfQ1RMOworCQkJRldfQ01EX0lPX1NFVChydGxwcml2LCBmd19jbWRtYXApOworCQkJYnJlYWs7CisJCWNhc2UgRldfQ01EX0RJR19FTkFCTEU6CisJCWNhc2UgRldfQ01EX0RJR19SRVNVTUU6CisJCQlpZiAoIShydGxwcml2LT5kbS5kbV9mbGFnICYgSEFMX0RNX0RJR19ESVNBQkxFKSkgeworCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfQ01ELCBEQkdfTE9VRCwKKwkJCQkJKCJTZXQgRElHIGVuYWJsZSBvciByZXN1bWUhIVxuIikpOworCQkJCWZ3X2NtZG1hcCB8PSAoRldfRElHX0VOQUJMRV9DVEwgfCBGV19TU19DVEwpOworCQkJCUZXX0NNRF9JT19TRVQocnRscHJpdiwgZndfY21kbWFwKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEZXX0NNRF9ESUdfSEFMVDoKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfQ01ELCBEQkdfTE9VRCwKKwkJCQkgKCJTZXQgRElHIGhhbHQhIVxuIikpOworCQkJZndfY21kbWFwICY9IH4oRldfRElHX0VOQUJMRV9DVEwgfCBGV19TU19DVEwpOworCQkJRldfQ01EX0lPX1NFVChydGxwcml2LCBmd19jbWRtYXApOworCQkJYnJlYWs7CisJCWNhc2UgRldfQ01EX1RYUFdSX1RSQUNLX1RIRVJNQUw6IHsKKwkJCXU4CXRoZXJtYWx2YWwgPSAwOworCQkJZndfY21kbWFwIHw9IEZXX1BXUl9UUktfQ1RMOworCisJCQkvKiBDbGVhciBGVyBwYXJhbWV0ZXIgaW4gdGVybXMgb2YgdGhlcm1hbCBwYXJ0cy4gKi8KKwkJCWZ3X3BhcmFtICY9IEZXX1BXUl9UUktfUEFSQU1fQ0xSOworCisJCQl0aGVybWFsdmFsID0gcnRscHJpdi0+ZG0udGhlcm1hbHZhbHVlOworCQkJZndfcGFyYW0gfD0gKCh0aGVybWFsdmFsIDw8IDI0KSB8CisJCQkJICAgICAocnRsZWZ1c2UtPnRoZXJtYWxtZXRlclswXSA8PCAxNikpOworCisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0NNRCwgREJHX0xPVUQsCisJCQkJICgiU2V0IFR4UHdyIHRyYWNraW5nISEgIgorCQkJCSAiRndDbWRNYXAoJSN4KSwgRndQYXJhbSglI3gpXG4iLAorCQkJCSBmd19jbWRtYXAsIGZ3X3BhcmFtKSk7CisKKwkJCUZXX0NNRF9QQVJBX1NFVChydGxwcml2LCBmd19wYXJhbSk7CisJCQlGV19DTURfSU9fU0VUKHJ0bHByaXYsIGZ3X2NtZG1hcCk7CisKKwkJCS8qIENsZWFyIGNvbnRyb2wgZmxhZyB0byBzeW5jIHdpdGggRlcuICovCisJCQlGV19DTURfSU9fQ0xSKHJ0bHByaXYsIEZXX1BXUl9UUktfQ1RMKTsKKwkJCX0KKwkJCWJyZWFrOworCQkvKiBUaGUgZm9sbG93aW5nIEZXIENNRHMgYXJlIG9ubHkgY29tcGF0aWJsZSB0bworCQkgKiB2LjUzIG9yIGxhdGVyLiAqLworCQljYXNlIEZXX0NNRF9SQV9SRUZSRVNIX05fQ09NQjoKKwkJCWZ3X2NtZG1hcCB8PSBGV19SQV9OX0NUTDsKKworCQkJLyogQ2xlYXIgUkEgQkcgbW9kZSBjb250cm9sLiAqLworCQkJZndfY21kbWFwICY9IH4oRldfUkFfQkdfQ1RMIHwgRldfUkFfSU5JVF9DVEwpOworCisJCQkvKiBDbGVhciBGVyBwYXJhbWV0ZXIgaW4gdGVybXMgb2YgUkEgcGFydHMuICovCisJCQlmd19wYXJhbSAmPSBGV19SQV9QQVJBTV9DTFI7CisKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfQ01ELCBEQkdfTE9VRCwKKwkJCQkgKCJbRlcgQ01EXSBbTmV3IFZlcnNpb25dICIKKwkJCQkgIlNldCBSQS9JT1QgQ29tYiBpbiBuIG1vZGUhISBGd0NtZE1hcCglI3gpLCAiCisJCQkJICJGd1BhcmFtKCUjeClcbiIsIGZ3X2NtZG1hcCwgZndfcGFyYW0pKTsKKworCQkJRldfQ01EX1BBUkFfU0VUKHJ0bHByaXYsIGZ3X3BhcmFtKTsKKwkJCUZXX0NNRF9JT19TRVQocnRscHJpdiwgZndfY21kbWFwKTsKKworCQkJLyogQ2xlYXIgY29udHJvbCBmbGFnIHRvIHN5bmMgd2l0aCBGVy4gKi8KKwkJCUZXX0NNRF9JT19DTFIocnRscHJpdiwgRldfUkFfTl9DVEwpOworCQkJYnJlYWs7CisJCWNhc2UgRldfQ01EX1JBX1JFRlJFU0hfQkdfQ09NQjoKKwkJCWZ3X2NtZG1hcCB8PSBGV19SQV9CR19DVEw7CisKKwkJCS8qIENsZWFyIFJBIG4tbW9kZSBjb250cm9sLiAqLworCQkJZndfY21kbWFwICY9IH4oRldfUkFfTl9DVEwgfCBGV19SQV9JTklUX0NUTCk7CisJCQkvKiBDbGVhciBGVyBwYXJhbWV0ZXIgaW4gdGVybXMgb2YgUkEgcGFydHMuICovCisJCQlmd19wYXJhbSAmPSBGV19SQV9QQVJBTV9DTFI7CisKKwkJCUZXX0NNRF9QQVJBX1NFVChydGxwcml2LCBmd19wYXJhbSk7CisJCQlGV19DTURfSU9fU0VUKHJ0bHByaXYsIGZ3X2NtZG1hcCk7CisKKwkJCS8qIENsZWFyIGNvbnRyb2wgZmxhZyB0byBzeW5jIHdpdGggRlcuICovCisJCQlGV19DTURfSU9fQ0xSKHJ0bHByaXYsIEZXX1JBX0JHX0NUTCk7CisJCQlicmVhazsKKwkJY2FzZSBGV19DTURfSVFLX0VOQUJMRToKKwkJCWZ3X2NtZG1hcCB8PSBGV19JUUtfQ1RMOworCQkJRldfQ01EX0lPX1NFVChydGxwcml2LCBmd19jbWRtYXApOworCQkJLyogQ2xlYXIgY29udHJvbCBmbGFnIHRvIHN5bmMgd2l0aCBGVy4gKi8KKwkJCUZXX0NNRF9JT19DTFIocnRscHJpdiwgRldfSVFLX0NUTCk7CisJCQlicmVhazsKKwkJLyogVGhlIGZvbGxvd2luZyBGVyBDTUQgaXMgY29tcGF0aWJsZSB0byB2LjYyIG9yIGxhdGVyLiAgKi8KKwkJY2FzZSBGV19DTURfQ1RSTF9ETV9CWV9EUklWRVJfTkVXOgorCQkJZndfY21kbWFwIHw9IEZXX0RSSVZFUl9DVFJMX0RNX0NUTDsKKwkJCUZXX0NNRF9JT19TRVQocnRscHJpdiwgZndfY21kbWFwKTsKKwkJCWJyZWFrOworCQkvKiAgVGhlIGZvbGxvd2VkIEZXIENtZHMgbmVlZHMgcG9zdC1wcm9jZXNzaW5nIGxhdGVyLiAqLworCQljYXNlIEZXX0NNRF9SRVNVTUVfRE1fQllfU0NBTjoKKwkJCWZ3X2NtZG1hcCB8PSAoRldfRElHX0VOQUJMRV9DVEwgfAorCQkJCSAgICAgIEZXX0hJR0hfUFdSX0VOQUJMRV9DVEwgfAorCQkJCSAgICAgIEZXX1NTX0NUTCk7CisKKwkJCWlmIChydGxwcml2LT5kbS5kbV9mbGFnICYgSEFMX0RNX0RJR19ESVNBQkxFIHx8CisJCQkJIWRpZ3RhYmxlLmRpZ19lbmFibGVfZmxhZykKKwkJCQlmd19jbWRtYXAgJj0gfkZXX0RJR19FTkFCTEVfQ1RMOworCisJCQlpZiAoKHJ0bHByaXYtPmRtLmRtX2ZsYWcgJiBIQUxfRE1fSElQV1JfRElTQUJMRSkgfHwKKwkJCSAgICAocnRscHJpdi0+ZG0uZHluYW1pY190eHBvd2VyX2VuYWJsZSA9PSB0cnVlKSkKKwkJCQlmd19jbWRtYXAgJj0gfkZXX0hJR0hfUFdSX0VOQUJMRV9DVEw7CisKKwkJCWlmICgoZGlndGFibGUuZGlnX2V4dF9wb3J0X3N0YWdlID09CisJCQkgICAgRElHX0VYVF9QT1JUX1NUQUdFXzApIHx8CisJCQkgICAgKGRpZ3RhYmxlLmRpZ19leHRfcG9ydF9zdGFnZSA9PQorCQkJICAgIERJR19FWFRfUE9SVF9TVEFHRV8xKSkKKwkJCQlmd19jbWRtYXAgJj0gfkZXX0RJR19FTkFCTEVfQ1RMOworCisJCQlGV19DTURfSU9fU0VUKHJ0bHByaXYsIGZ3X2NtZG1hcCk7CisJCQliUG9zdFByb2Nlc3NpbmcgPSB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgRldfQ01EX1BBVVNFX0RNX0JZX1NDQU46CisJCQlmd19jbWRtYXAgJj0gfihGV19ESUdfRU5BQkxFX0NUTCB8CisJCQkJICAgICAgIEZXX0hJR0hfUFdSX0VOQUJMRV9DVEwgfAorCQkJCSAgICAgICBGV19TU19DVEwpOworCQkJRldfQ01EX0lPX1NFVChydGxwcml2LCBmd19jbWRtYXApOworCQkJYlBvc3RQcm9jZXNzaW5nID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIEZXX0NNRF9ISUdIX1BXUl9ESVNBQkxFOgorCQkJZndfY21kbWFwICY9IH5GV19ISUdIX1BXUl9FTkFCTEVfQ1RMOworCQkJRldfQ01EX0lPX1NFVChydGxwcml2LCBmd19jbWRtYXApOworCQkJYlBvc3RQcm9jZXNzaW5nID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIEZXX0NNRF9ISUdIX1BXUl9FTkFCTEU6CisJCQlpZiAoIShydGxwcml2LT5kbS5kbV9mbGFnICYgSEFMX0RNX0hJUFdSX0RJU0FCTEUpICYmCisJCQkJKHJ0bHByaXYtPmRtLmR5bmFtaWNfdHhwb3dlcl9lbmFibGUgIT0gdHJ1ZSkpIHsKKwkJCQlmd19jbWRtYXAgfD0gKEZXX0hJR0hfUFdSX0VOQUJMRV9DVEwgfAorCQkJCQkgICAgICBGV19TU19DVEwpOworCQkJCUZXX0NNRF9JT19TRVQocnRscHJpdiwgZndfY21kbWFwKTsKKwkJCQliUG9zdFByb2Nlc3NpbmcgPSB0cnVlOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgRldfQ01EX0RJR19NT0RFX0ZBOgorCQkJZndfY21kbWFwIHw9IEZXX0ZBX0NUTDsKKwkJCUZXX0NNRF9JT19TRVQocnRscHJpdiwgZndfY21kbWFwKTsKKwkJCWJyZWFrOworCQljYXNlIEZXX0NNRF9ESUdfTU9ERV9TUzoKKwkJCWZ3X2NtZG1hcCAmPSB+RldfRkFfQ1RMOworCQkJRldfQ01EX0lPX1NFVChydGxwcml2LCBmd19jbWRtYXApOworCQkJYnJlYWs7CisJCWNhc2UgRldfQ01EX1BBUEVfQ09OVFJPTDoKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfQ01ELCBEQkdfTE9VRCwKKwkJCQkgKCJbRlcgQ01EXSBTZXQgUEFQRSBDb250cm9sXG4iKSk7CisJCQlmd19jbWRtYXAgJj0gfkZXX1BBUEVfQ1RMX0JZX1NXX0hXOworCisJCQlGV19DTURfSU9fU0VUKHJ0bHByaXYsIGZ3X2NtZG1hcCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qIFBhc3MgdG8gb3JpZ2luYWwgRlcgQ01EIHByb2Nlc3NpbmcgY2FsbGJhY2sKKwkJCSAqIHJvdXRpbmUuICovCisJCQliUG9zdFByb2Nlc3NpbmcgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlIChmYWxzZSk7CisKKwkvKiBXZSBzaGFsbCBwb3N0IHByb2Nlc3NpbmcgdGhlc2UgRlcgQ01EIGlmCisJICogdmFyaWFibGUgYlBvc3RQcm9jZXNzaW5nIGlzIHNldC4gKi8KKwlpZiAoYlBvc3RQcm9jZXNzaW5nICYmICFydGxoYWwtPnNldF9md2NtZF9pbnByb2dyZXNzKSB7CisJCXJ0bGhhbC0+c2V0X2Z3Y21kX2lucHJvZ3Jlc3MgPSB0cnVlOworCQkvKiBVcGRhdGUgY3VycmVudCBGVyBDbWQgZm9yIGNhbGxiYWNrIHVzZS4gKi8KKwkJcnRsaGFsLT5jdXJyZW50X2Z3Y21kX2lvID0gZndfY21kaW87CisJfSBlbHNlIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCV9ydGw5MnNfcGh5X3NldF9md2NtZF9pbyhodyk7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYwl2b2lkIF9ydGw5MnNfcGh5X2NoZWNrX2VwaHlfc3dpdGNocmVhZHkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXUzMglkZWxheSA9IDEwMDsKKwl1OAlyZWd1MTsKKworCXJlZ3UxID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCAweDU1NCk7CisJd2hpbGUgKChyZWd1MSAmIEJJVCg1KSkgJiYgKGRlbGF5ID4gMCkpIHsKKwkJcmVndTEgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIDB4NTU0KTsKKwkJZGVsYXktLTsKKwkJLyogV2UgZGVsYXkgb25seSA1MHVzIHRvIHByZXZlbnQKKwkJICogYmVpbmcgc2NoZWR1bGVkIG91dC4gKi8KKwkJdWRlbGF5KDUwKTsKKwl9Cit9CisKK3ZvaWQgcnRsOTJzX3BoeV9zd2l0Y2hfZXBoeV9wYXJhbWV0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCisJLyogVGhlIHdheSB0byBiZSBjYXBhYmxlIHRvIHN3aXRjaCBjbG9jayByZXF1ZXN0CisJICogd2hlbiB0aGUgUEcgc2V0dGluZyBkb2VzIG5vdCBzdXBwb3J0IGNsb2NrIHJlcXVlc3QuCisJICogVGhpcyBpcyB0aGUgYmFja2Rvb3Igc29sdXRpb24gdG8gc3dpdGNoIGNsb2NrCisJICogcmVxdWVzdCBiZWZvcmUgQVNQTSBvciBEMy4gKi8KKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgMHg1NDAsIDB4NzNjMTEpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCAweDU0OCwgMHgyNDA3Yyk7CisKKwkvKiBTd2l0Y2ggRVBIWSBwYXJhbWV0ZXIhISEhICovCisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgMHg1NTAsIDB4MTAwMCk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHg1NTQsIDB4MjApOworCV9ydGw5MnNfcGh5X2NoZWNrX2VwaHlfc3dpdGNocmVhZHkoaHcpOworCisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgMHg1NTAsIDB4YTBlYik7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHg1NTQsIDB4M2UpOworCV9ydGw5MnNfcGh5X2NoZWNrX2VwaHlfc3dpdGNocmVhZHkoaHcpOworCisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgMHg1NTAsIDB4ZmY4MCk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHg1NTQsIDB4MzkpOworCV9ydGw5MnNfcGh5X2NoZWNrX2VwaHlfc3dpdGNocmVhZHkoaHcpOworCisJLyogRGVsYXkgTDEgZW50ZXIgdGltZSAqLworCWlmIChwcHNjLT5zdXBwb3J0X2FzcG0gJiYgIXBwc2MtPnN1cHBvcnRfYmFja2Rvb3IpCisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4NTYwLCAweDQwKTsKKwllbHNlCisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4NTYwLCAweDAwKTsKKworfQorCit2b2lkIHJ0bDkyc19waHlfc2V0X2JlYWNvbl9od3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IEJlYWNvbkludGVydmFsKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgV0ZNNSwgMHhGMTAwMDAwMCB8IChCZWFjb25JbnRlcnZhbCA8PCA4KSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9waHkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL3BoeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZTUwNGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9waHkuaApAQCAtMCwwICsxLDEwMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fUlRMOTJTX1BIWV9IX18KKyNkZWZpbmUgX19SVEw5MlNfUEhZX0hfXworCisjZGVmaW5lIE1BWF9UWFBXUl9JRFhfTk1PREVfOTJTCQk2MworI2RlZmluZSBNQVhfRE9aRV9XQUlUSU5HX1RJTUVTXzl4CTY0CisKKy8qIENoYW5uZWwgc3dpdGNoOlRoZSBzaXplIG9mCisgKiBjb21tYW5kIHRhYmxlcyBmb3Igc3dpdGNoIGNoYW5uZWwgKi8KKyNkZWZpbmUgTUFYX1BSRUNNRF9DTlQJCQkxNgorI2RlZmluZSBNQVhfUkZERVBFTkRDTURfQ05UCQkxNgorI2RlZmluZSBNQVhfUE9TVENNRF9DTlQJCQkxNgorCisjZGVmaW5lIFJGOTBfUEFUSF9NQVgJCQk0CisKK2VudW0gdmVyc2lvbl84MTkycyB7CisJVkVSU0lPTl84MTkyU19BQ1VULAorCVZFUlNJT05fODE5MlNfQkNVVCwKKwlWRVJTSU9OXzgxOTJTX0NDVVQKK307CisKK2VudW0gc3djaG5sY21kX2lkIHsKKwlDTURJRF9FTkQsCisJQ01ESURfU0VUX1RYUE9XRVJPV0VSX0xFVkVMLAorCUNNRElEX0JCUkVHV1JJVEUxMCwKKwlDTURJRF9XUklURVBPUlRfVUxPTkcsCisJQ01ESURfV1JJVEVQT1JUX1VTSE9SVCwKKwlDTURJRF9XUklURVBPUlRfVUNIQVIsCisJQ01ESURfUkZfV1JJVEVSRUcsCit9OworCitzdHJ1Y3Qgc3djaG5sY21kIHsKKwllbnVtIHN3Y2hubGNtZF9pZCBjbWRpZDsKKwl1MzIgcGFyYTE7CisJdTMyIHBhcmEyOworCXUzMiBtc2RlbGF5OworfTsKKworZW51bSBiYXNlYmFuZF9jb25maWdfdHlwZSB7CisJLyogUmFkaW8gUGF0aCBBICovCisJQkFTRUJBTkRfQ09ORklHX1BIWV9SRUcgPSAwLAorCS8qIFJhZGlvIFBhdGggQiAqLworCUJBU0VCQU5EX0NPTkZJR19BR0NfVEFCID0gMSwKK307CisKKyNkZWZpbmUgaGFsX2dldF9maXJtd2FyZXZlcnNpb24ocnRscHJpdikgXAorCSgoKHN0cnVjdCBydF9maXJtd2FyZSAqKShydGxwcml2LT5ydGxoYWwucGZpcm13YXJlKSktPmZpcm13YXJldmVyc2lvbikKKwordTMyIHJ0bDkyc19waHlfcXVlcnlfYmJfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgcmVnYWRkciwgdTMyIGJpdG1hc2spOwordm9pZCBydGw5MnNfcGh5X3NldF9iYl9yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiByZWdhZGRyLCB1MzIgYml0bWFzaywKKwkJCSAgIHUzMiBkYXRhKTsKK3ZvaWQgcnRsOTJzX3BoeV9zY2FuX29wZXJhdGlvbl9iYWNrdXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IG9wZXJhdGlvbik7Cit1MzIgcnRsOTJzX3BoeV9xdWVyeV9yZl9yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsCisJCQkgICAgdTMyIHJlZ2FkZHIsIHUzMiBiaXRtYXNrKTsKK3ZvaWQgcnRsOTJzX3BoeV9zZXRfcmZfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAllbnVtIHJhZGlvX3BhdGggcmZwYXRoLAorCQkJICAgdTMyIHJlZ2FkZHIsIHUzMiBiaXRtYXNrLCB1MzIgZGF0YSk7Cit2b2lkIHJ0bDkyc19waHlfc2V0X2J3X21vZGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaF90eXBlKTsKK3U4IHJ0bDkyc19waHlfc3dfY2hubChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Citib29sIHJ0bDkyc19waHlfc2V0X3JmX3Bvd2VyX3N0YXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgIGVudW0gcmZfcHdyc3RhdGUgcmZwb3dlcl9zdGF0ZSk7Citib29sIHJ0bDkyc19waHlfbWFjX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyc19waHlfc3dpdGNoX2VwaHlfcGFyYW1ldGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK2Jvb2wgcnRsOTJzX3BoeV9iYl9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworYm9vbCBydGw5MnNfcGh5X3JmX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyc19waHlfZ2V0X2h3X3JlZ19vcmlnaW5hbHZhbHVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJzX3BoeV9zZXRfdHhwb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTgJY2hhbm5lbCk7Citib29sIHJ0bDkyc19waHlfc2V0X2Z3X2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBmd2NtZF9pb3R5cGUgZndjbWRfaW8pOwordm9pZCBydGw5MnNfcGh5X2Noa19md2NtZF9pb2RvbmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw5MnNfcGh5X3NldF9iZWFjb25faHdyZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBiZWFjb25pbnRlcnZhbCk7Cit1OCBydGw5MnNfcGh5X2NvbmZpZ19yZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSByYWRpb19wYXRoIHJmcGF0aCkgOworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvcmVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTE2ZWFkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvcmVnLmgKQEAgLTAsMCArMSwxMTg4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19SRUFMVEVLXzkyU19SRUdfSF9fCisjZGVmaW5lIF9fUkVBTFRFS185MlNfUkVHX0hfXworCisvKiAxLiBTeXN0ZW0gQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMgICovCisjZGVmaW5lCVJFR19TWVNfSVNPX0NUUkwJCQkweDAwMDAKKyNkZWZpbmUJUkVHX1NZU19GVU5DX0VOCQkJCTB4MDAwMgorI2RlZmluZQlQTUNfRlNNCQkJCQkweDAwMDQKKyNkZWZpbmUJU1lTX0NMS1IJCQkJMHgwMDA4CisjZGVmaW5lCUVQUk9NX0NNRAkJCQkweDAwMEEKKyNkZWZpbmUJRUVfVlBECQkJCQkweDAwMEMKKyNkZWZpbmUJQUZFX01JU0MJCQkJMHgwMDEwCisjZGVmaW5lCVNQUzBfQ1RSTAkJCQkweDAwMTEKKyNkZWZpbmUJU1BTMV9DVFJMCQkJCTB4MDAxOAorI2RlZmluZQlSRl9DVFJMCQkJCQkweDAwMUYKKyNkZWZpbmUJTERPQTE1X0NUUkwJCQkJMHgwMDIwCisjZGVmaW5lCUxET1YxMkRfQ1RSTAkJCQkweDAwMjEKKyNkZWZpbmUJTERPSENJMTJfQ1RSTAkJCQkweDAwMjIKKyNkZWZpbmUJTERPX1VTQl9TRElPCQkJCTB4MDAyMworI2RlZmluZQlMUExET19DVFJMCQkJCTB4MDAyNAorI2RlZmluZQlBRkVfWFRBTF9DVFJMCQkJCTB4MDAyNgorI2RlZmluZQlBRkVfUExMX0NUUkwJCQkJMHgwMDI4CisjZGVmaW5lCVJFR19FRlVTRV9DVFJMCQkJCTB4MDAzMAorI2RlZmluZQlSRUdfRUZVU0VfVEVTVAkJCQkweDAwMzQKKyNkZWZpbmUJUFdSX0RBVEEJCQkJMHgwMDM4CisjZGVmaW5lCURCR19QT1JUCQkJCTB4MDAzQQorI2RlZmluZQlEUFNfVElNRVIJCQkJMHgwMDNDCisjZGVmaW5lCVJDTEtfTU9OCQkJCTB4MDAzRQorCisvKiAyLiBDb21tYW5kIENvbnRyb2wgUmVnaXN0ZXJzCSAgKi8KKyNkZWZpbmUJQ01EUgkJCQkJMHgwMDQwCisjZGVmaW5lCVRYUEFVU0UJCQkJCTB4MDA0MgorI2RlZmluZQlMQktNRF9TRUwJCQkJMHgwMDQzCisjZGVmaW5lCVRDUgkJCQkJMHgwMDQ0CisjZGVmaW5lCVJDUgkJCQkJMHgwMDQ4CisjZGVmaW5lCU1TUgkJCQkJMHgwMDRDCisjZGVmaW5lCVNZU0ZfQ0ZHCQkJCTB4MDA0RAorI2RlZmluZQlSWF9QS1lfTElNSVQJCQkJMHgwMDRFCisjZGVmaW5lCU1CSURDVFJMCQkJCTB4MDA0RgorCisvKiAzLiBNQUNJRCBTZXR0aW5nIFJlZ2lzdGVycwkgKi8KKyNkZWZpbmUJTUFDSURSCQkJCQkweDAwNTAKKyNkZWZpbmUJTUFDSURSMAkJCQkJMHgwMDUwCisjZGVmaW5lCU1BQ0lEUjQJCQkJCTB4MDA1NAorI2RlZmluZQlCU1NJRFIJCQkJCTB4MDA1OAorI2RlZmluZQlIV1ZJRAkJCQkJMHgwMDVFCisjZGVmaW5lCU1BUgkJCQkJMHgwMDYwCisjZGVmaW5lCU1CSURDQU1DT05URU5UCQkJCTB4MDA2OAorI2RlZmluZQlNQklEQ0FNQ0ZHCQkJCTB4MDA3MAorI2RlZmluZQlCVUlMRFRJTUUJCQkJMHgwMDc0CisjZGVmaW5lCUJVSUxEVVNFUgkJCQkweDAwNzgKKworI2RlZmluZQlJRFIwCQkJCQlNQUNJRFIwCisjZGVmaW5lCUlEUjQJCQkJCU1BQ0lEUjQKKworLyogNC4gVGltaW5nIENvbnRyb2wgUmVnaXN0ZXJzCSAqLworI2RlZmluZQlUU0ZSCQkJCQkweDAwODAKKyNkZWZpbmUJU0xPVF9USU1FCQkJCTB4MDA4OQorI2RlZmluZQlVU1RJTUUJCQkJCTB4MDA4QQorI2RlZmluZQlTSUZTX0NDSwkJCQkweDAwOEMKKyNkZWZpbmUJU0lGU19PRkRNCQkJCTB4MDA4RQorI2RlZmluZQlQSUZTX1RJTUUJCQkJMHgwMDkwCisjZGVmaW5lCUFDS19USU1FT1VUCQkJCTB4MDA5MQorI2RlZmluZQlFSUZTVFIJCQkJCTB4MDA5MgorI2RlZmluZQlCQ05fSU5URVJWQUwJCQkJMHgwMDk0CisjZGVmaW5lCUFUSU1XTkQJCQkJCTB4MDA5NgorI2RlZmluZQlCQ05fRFJWX0VBUkxZX0lOVAkJCTB4MDA5OAorI2RlZmluZQlCQ05fRE1BVElNRQkJCQkweDAwOUEKKyNkZWZpbmUJQkNOX0VSUl9USFJFU0gJCQkJMHgwMDlDCisjZGVmaW5lCU1MVAkJCQkJMHgwMDlECisjZGVmaW5lCVJTVkRfTUFDX1RVTkVfVVMJCQkweDAwOUUKKworLyogNS4gRklGTyBDb250cm9sIFJlZ2lzdGVycwkgICovCisjZGVmaW5lIFJRUE4JCQkJCTB4MDBBMAorI2RlZmluZQlSUVBOMQkJCQkJMHgwMEEwCisjZGVmaW5lCVJRUE4yCQkJCQkweDAwQTEKKyNkZWZpbmUJUlFQTjMJCQkJCTB4MDBBMgorI2RlZmluZQlSUVBONAkJCQkJMHgwMEEzCisjZGVmaW5lCVJRUE41CQkJCQkweDAwQTQKKyNkZWZpbmUJUlFQTjYJCQkJCTB4MDBBNQorI2RlZmluZQlSUVBONwkJCQkJMHgwMEE2CisjZGVmaW5lCVJRUE44CQkJCQkweDAwQTcKKyNkZWZpbmUJUlFQTjkJCQkJCTB4MDBBOAorI2RlZmluZQlSUVBOMTAJCQkJCTB4MDBBOQorI2RlZmluZQlMRF9SUVBOCQkJCQkweDAwQUIKKyNkZWZpbmUJUlhGRl9CTkRZCQkJCTB4MDBBQworI2RlZmluZQlSWFJQVF9CTkRZCQkJCTB4MDBCMAorI2RlZmluZQlUWFBLVEJVRl9QR0JORFkJCQkJMHgwMEI0CisjZGVmaW5lCVBCUAkJCQkJMHgwMEI1CisjZGVmaW5lCVJYRFJWSU5GT19TWgkJCQkweDAwQjYKKyNkZWZpbmUJVFhGRl9TVEFUVVMJCQkJMHgwMEI3CisjZGVmaW5lCVJYRkZfU1RBVFVTCQkJCTB4MDBCOAorI2RlZmluZQlUWEZGX0VNUFRZX1RICQkJCTB4MDBCOQorI2RlZmluZQlTRElPX1JYX0JMS1NaCQkJCTB4MDBCQworI2RlZmluZQlSWERNQQkJCQkJMHgwMEJECisjZGVmaW5lCVJYUEtUX05VTQkJCQkweDAwQkUKKyNkZWZpbmUJQzJIQ01EX1VEVF9TSVpFCQkJCTB4MDBDMAorI2RlZmluZQlDMkhDTURfVURUX0FERFIJCQkJMHgwMEMyCisjZGVmaW5lCUZJRk9QQUdFMQkJCQkweDAwQzQKKyNkZWZpbmUJRklGT1BBR0UyCQkJCTB4MDBDOAorI2RlZmluZQlGSUZPUEFHRTMJCQkJMHgwMENDCisjZGVmaW5lCUZJRk9QQUdFNAkJCQkweDAwRDAKKyNkZWZpbmUJRklGT1BBR0U1CQkJCTB4MDBENAorI2RlZmluZQlGV19SU1ZEX1BHX0NSVEwJCQkJMHgwMEQ4CisjZGVmaW5lCVJYRE1BX0FHR19QR19USAkJCQkweDAwRDkKKyNkZWZpbmUJVFhERVNDX01TSwkJCQkweDAwREMKKyNkZWZpbmUJVFhSUFRGRl9SRFBUUgkJCQkweDAwRTAKKyNkZWZpbmUJVFhSUFRGRl9XVFBUUgkJCQkweDAwRTQKKyNkZWZpbmUJQzJIRkZfUkRQVFIJCQkJMHgwMEU4CisjZGVmaW5lCUMySEZGX1dUUFRSCQkJCTB4MDBFQworI2RlZmluZQlSWEZGMF9SRFBUUgkJCQkweDAwRjAKKyNkZWZpbmUJUlhGRjBfV1RQVFIJCQkJMHgwMEY0CisjZGVmaW5lCVJYRkYxX1JEUFRSCQkJCTB4MDBGOAorI2RlZmluZQlSWEZGMV9XVFBUUgkJCQkweDAwRkMKKyNkZWZpbmUJUlhSUFQwX1JEUFRSCQkJCTB4MDEwMAorI2RlZmluZQlSWFJQVDBfV1RQVFIJCQkJMHgwMTA0CisjZGVmaW5lCVJYUlBUMV9SRFBUUgkJCQkweDAxMDgKKyNkZWZpbmUJUlhSUFQxX1dUUFRSCQkJCTB4MDEwQworI2RlZmluZQlSWDBfVURUX1NJWkUJCQkJMHgwMTEwCisjZGVmaW5lCVJYMVBLVE5VTQkJCQkweDAxMTQKKyNkZWZpbmUJUlhGSUxURVJNQVAJCQkJMHgwMTE2CisjZGVmaW5lCVJYRklMVEVSTUFQX0dQMQkJCQkweDAxMTgKKyNkZWZpbmUJUlhGSUxURVJNQVBfR1AyCQkJCTB4MDExQQorI2RlZmluZQlSWEZJTFRFUk1BUF9HUDMJCQkJMHgwMTFDCisjZGVmaW5lCUJDTlFfQ1RSTAkJCQkweDAxMjAKKyNkZWZpbmUJTUdUUV9DVFJMCQkJCTB4MDEyNAorI2RlZmluZQlISVFfQ1RSTAkJCQkweDAxMjgKKyNkZWZpbmUJVk9USUQ3X0NUUkwJCQkJMHgwMTJjCisjZGVmaW5lCVZPVElENl9DVFJMCQkJCTB4MDEzMAorI2RlZmluZQlWSVRJRDVfQ1RSTAkJCQkweDAxMzQKKyNkZWZpbmUJVklUSUQ0X0NUUkwJCQkJMHgwMTM4CisjZGVmaW5lCUJFVElEM19DVFJMCQkJCTB4MDEzYworI2RlZmluZQlCRVRJRDBfQ1RSTAkJCQkweDAxNDAKKyNkZWZpbmUJQktUSUQyX0NUUkwJCQkJMHgwMTQ0CisjZGVmaW5lCUJLVElEMV9DVFJMCQkJCTB4MDE0OAorI2RlZmluZQlDTURRX0NUUkwJCQkJMHgwMTRjCisjZGVmaW5lCVRYUEtUX05VTV9DVFJMCQkJCTB4MDE1MAorI2RlZmluZQlUWFFfUEdBREQJCQkJMHgwMTUyCisjZGVmaW5lCVRYRkZfUEdfTlVNCQkJCTB4MDE1NAorI2RlZmluZQlUUlhETUFfU1RBVFVTCQkJCTB4MDE1NgorCisvKiA2LiBBZGFwdGl2ZSBDb250cm9sIFJlZ2lzdGVycyAgICovCisjZGVmaW5lCUlOSU1DU19TRUwJCQkJMHgwMTYwCisjZGVmaW5lCVRYX1JBVEVfUkVHCQkJCUlOSU1DU19TRUwKKyNkZWZpbmUJSU5JUlRTTUNTX1NFTAkJCQkweDAxODAKKyNkZWZpbmUJUlJTUgkJCQkJMHgwMTgxCisjZGVmaW5lCUFSRlIwCQkJCQkweDAxODQKKyNkZWZpbmUJQVJGUjEJCQkJCTB4MDE4OAorI2RlZmluZQlBUkZSMgkJCQkJMHgwMThDCisjZGVmaW5lCUFSRlIzCQkJCQkweDAxOTAKKyNkZWZpbmUJQVJGUjQJCQkJCTB4MDE5NAorI2RlZmluZQlBUkZSNQkJCQkJMHgwMTk4CisjZGVmaW5lCUFSRlI2CQkJCQkweDAxOUMKKyNkZWZpbmUJQVJGUjcJCQkJCTB4MDFBMAorI2RlZmluZQlBR0dMRU5fTE1UX0gJCQkJMHgwMUE3CisjZGVmaW5lCUFHR0xFTl9MTVRfTAkJCQkweDAxQTgKKyNkZWZpbmUJREFSRlJDCQkJCQkweDAxQjAKKyNkZWZpbmUJUkFSRlJDCQkJCQkweDAxQjgKKyNkZWZpbmUJTUNTX1RYQUdDCQkJCTB4MDFDMAorI2RlZmluZQlDQ0tfVFhBR0MJCQkJMHgwMUM4CisKKy8qIDcuIEVEQ0EgU2V0dGluZyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUJRURDQVBBUkFfVk8JCQkJMHgwMUQwCisjZGVmaW5lCUVEQ0FQQVJBX1ZJCQkJCTB4MDFENAorI2RlZmluZQlFRENBUEFSQV9CRQkJCQkweDAxRDgKKyNkZWZpbmUJRURDQVBBUkFfQksJCQkJMHgwMURDCisjZGVmaW5lCUJDTlRDRkcJCQkJCTB4MDFFMAorI2RlZmluZQlDV1JSCQkJCQkweDAxRTIKKyNkZWZpbmUJQUNNQVZHCQkJCQkweDAxRTQKKyNkZWZpbmUJQWNtSHdDdHJsCQkJCTB4MDFFNworI2RlZmluZQlWT19BRE1UTQkJCQkweDAxRTgKKyNkZWZpbmUJVklfQURNVE0JCQkJMHgwMUVDCisjZGVmaW5lCUJFX0FETVRNCQkJCTB4MDFGMAorI2RlZmluZQlSRVRSWV9MSU1JVAkJCQkweDAxRjQKKyNkZWZpbmUJU0dfUkFURQkJCQkJMHgwMUY2CisKKy8qIDguIFdNQUMsIEJBIGFuZCBDQ1ggcmVsYXRlZCBSZWdpc3Rlci4gKi8KKyNkZWZpbmUJTkFWX0NUUkwJCQkJMHgwMjAwCisjZGVmaW5lCUJXX09QTU9ERQkJCQkweDAyMDMKKyNkZWZpbmUJQkFDQU1DTUQJCQkJMHgwMjA0CisjZGVmaW5lCUJBQ0FNQ09OVEVOVAkJCQkweDAyMDgKKworLyogdGhlIDB4Mnh4IHJlZ2lzdGVyIFdNQUMgZGVmaW5pdGlvbiAqLworI2RlZmluZQlMQkRMWQkJCQkJMHgwMjEwCisjZGVmaW5lCUZXRExZCQkJCQkweDAyMTEKKyNkZWZpbmUJSFdQQ19SWF9DVFJMCQkJCTB4MDIxOAorI2RlZmluZQlNUUlSCQkJCQkweDAyMjAKKyNkZWZpbmUJTUFJUgkJCQkJMHgwMjIyCisjZGVmaW5lCU1TSVIJCQkJCTB4MDIyNAorI2RlZmluZQlDTE1fUkVTVUxUCQkJCTB4MDIyNworI2RlZmluZQlOSE1fUlBJX0NOVAkJCQkweDAyMjgKKyNkZWZpbmUJUlhFUlJfUlBUCQkJCTB4MDIzMAorI2RlZmluZQlOQVZfUFJPVF9MRU4JCQkJMHgwMjM0CisjZGVmaW5lCUNGRU5EX1RICQkJCTB4MDIzNgorI2RlZmluZQlBTVBEVV9NSU5fU1BBQ0UJCQkJMHgwMjM3CisjZGVmaW5lCVRYT1BfU1RBTExfQ1RSTAkJCQkweDAyMzgKKworLyogOS4gU2VjdXJpdHkgQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUJUkVHX1JXQ0FNCQkJCTB4MDI0MAorI2RlZmluZQlSRUdfV0NBTUkJCQkJMHgwMjQ0CisjZGVmaW5lCVJFR19SQ0FNTwkJCQkweDAyNDgKKyNkZWZpbmUJUkVHX0NBTURCRwkJCQkweDAyNEMKKyNkZWZpbmUJUkVHX1NFQ1IJCQkJMHgwMjUwCisKKy8qIDEwLiBQb3dlciBTYXZlIENvbnRyb2wgUmVnaXN0ZXJzICovCisjZGVmaW5lCVdPV19DVFJMCQkJCTB4MDI2MAorI2RlZmluZQlQU1NUQVRVUwkJCQkweDAyNjEKKyNkZWZpbmUJUFNTV0lUQ0gJCQkJMHgwMjYyCisjZGVmaW5lCU1JTU9QU19XQUlUX1BFUklPRAkJCTB4MDI2MworI2RlZmluZQlMUE5BVl9DVFJMCQkJCTB4MDI2NAorI2RlZmluZQlXRk0wCQkJCQkweDAyNzAKKyNkZWZpbmUJV0ZNMQkJCQkJMHgwMjgwCisjZGVmaW5lCVdGTTIJCQkJCTB4MDI5MAorI2RlZmluZQlXRk0zCQkJCQkweDAyQTAKKyNkZWZpbmUJV0ZNNAkJCQkJMHgwMkIwCisjZGVmaW5lCVdGTTUJCQkJCTB4MDJDMAorI2RlZmluZQlXRkNSQwkJCQkJMHgwMkQwCisjZGVmaW5lCUZXX1JQVF9SRUcJCQkJMHgwMmM0CisKKy8qIDExLiBHZW5lcmFsIFB1cnBvc2UgUmVnaXN0ZXJzICovCisjZGVmaW5lCVBTVElNRQkJCQkJMHgwMkUwCisjZGVmaW5lCVRJTUVSMAkJCQkJMHgwMkU0CisjZGVmaW5lCVRJTUVSMQkJCQkJMHgwMkU4CisjZGVmaW5lCUdQSU9fQ1RSTAkJCQkweDAyRUMKKyNkZWZpbmUJR1BJT19JTgkJCQkJMHgwMkVDCisjZGVmaW5lCUdQSU9fT1VUCQkJCTB4MDJFRAorI2RlZmluZQlHUElPX0lPX1NFTAkJCQkweDAyRUUKKyNkZWZpbmUJR1BJT19NT0QJCQkJMHgwMkVGCisjZGVmaW5lCUdQSU9fSU5UQ1RSTAkJCQkweDAyRjAKKyNkZWZpbmUJTUFDX1BJTk1VWF9DRkcJCQkJMHgwMkYxCisjZGVmaW5lCUxFRENGRwkJCQkJMHgwMkYyCisjZGVmaW5lCVBIWV9SRUcJCQkJCTB4MDJGMworI2RlZmluZQlQSFlfUkVHX0RBVEEJCQkJMHgwMkY0CisjZGVmaW5lCVJFR19FRlVTRV9DTEsJCQkJMHgwMkY4CisKKy8qIDEyLiBIb3N0IEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXJzICovCisjZGVmaW5lCUlOVEFfTUFTSwkJCQkweDAzMDAKKyNkZWZpbmUJSVNSCQkJCQkweDAzMDgKKworLyogMTMuIFRlc3QgTW9kZSBhbmQgRGVidWcgQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUJREJHX1BPUlRfU1dJVENICQkJCTB4MDAzQQorI2RlZmluZQlCSVNUCQkJCQkweDAzMTAKKyNkZWZpbmUJREJTCQkJCQkweDAzMTQKKyNkZWZpbmUJQ1BVSU5TVAkJCQkJMHgwMzE4CisjZGVmaW5lCUNQVUNBVVNFCQkJCTB4MDMxQworI2RlZmluZQlMQlVTX0VSUl9BRERSCQkJCTB4MDMyMAorI2RlZmluZQlMQlVTX0VSUl9DTUQJCQkJMHgwMzI0CisjZGVmaW5lCUxCVVNfRVJSX0RBVEFfTAkJCQkweDAzMjgKKyNkZWZpbmUJTEJVU19FUlJfREFUQV9ICQkJCTB4MDMyQworI2RlZmluZQlMWF9FWENFUFRJT05fQUREUgkJCTB4MDMzMAorI2RlZmluZQlXREdfQ1RSTAkJCQkweDAzMzQKKyNkZWZpbmUJSU5UTVRVCQkJCQkweDAzMzgKKyNkZWZpbmUJSU5UTQkJCQkJMHgwMzNBCisjZGVmaW5lCUZETE9DS1RVUk4wCQkJCTB4MDMzQworI2RlZmluZQlGRExPQ0tUVVJOMQkJCQkweDAzM0QKKyNkZWZpbmUJVFJYUEtUQlVGX0RCR19EQVRBCQkJMHgwMzQwCisjZGVmaW5lCVRSWFBLVEJVRl9EQkdfQ1RSTAkJCTB4MDM0OAorI2RlZmluZQlEUExMCQkJCQkweDAzNEEKKyNkZWZpbmUJQ0JVU19FUlJfQUREUgkJCQkweDAzNTAKKyNkZWZpbmUJQ0JVU19FUlJfQ01ECQkJCTB4MDM1NAorI2RlZmluZQlDQlVTX0VSUl9EQVRBX0wJCQkJMHgwMzU4CisjZGVmaW5lCUNCVVNfRVJSX0RBVEFfSAkJCQkweDAzNUMKKyNkZWZpbmUJVVNCX1NJRV9JTlRGX0FERFIJCQkweDAzNjAKKyNkZWZpbmUJVVNCX1NJRV9JTlRGX1dECQkJCTB4MDM2MQorI2RlZmluZQlVU0JfU0lFX0lOVEZfUkQJCQkJMHgwMzYyCisjZGVmaW5lCVVTQl9TSUVfSU5URl9DVFJMCQkJMHgwMzYzCisjZGVmaW5lIExCVVNfTU9OX0FERFIJCQkJMHgwMzY0CisjZGVmaW5lIExCVVNfQUREUl9NQVNLCQkJCTB4MDM2OAorCisvKiBCb3VuZGFyeSBpcyAweDM3RiAqLworCisvKiAxNC4gUENJRSBjb25maWcgcmVnaXN0ZXIgKi8KKyNkZWZpbmUJVFBfUE9MTAkJCQkJMHgwNTAwCisjZGVmaW5lCVBNX0NUUkwJCQkJCTB4MDUwMgorI2RlZmluZQlQQ0lGCQkJCQkweDA1MDMKKworI2RlZmluZQlUSFBEQQkJCQkJMHgwNTE0CisjZGVmaW5lCVRNREEJCQkJCTB4MDUxOAorI2RlZmluZQlUQ0RBCQkJCQkweDA1MUMKKyNkZWZpbmUJSERBCQkJCQkweDA1MjAKKyNkZWZpbmUJVFZPREEJCQkJCTB4MDUyNAorI2RlZmluZQlUVklEQQkJCQkJMHgwNTI4CisjZGVmaW5lCVRCRURBCQkJCQkweDA1MkMKKyNkZWZpbmUJVEJLREEJCQkJCTB4MDUzMAorI2RlZmluZQlUQkRBCQkJCQkweDA1MzQKKyNkZWZpbmUJUkNEQQkJCQkJMHgwNTM4CisjZGVmaW5lCVJEUURBCQkJCQkweDA1M0MKKyNkZWZpbmUJREJJX1dEQVRBCQkJCTB4MDU0MAorI2RlZmluZQlEQklfUkRBVEEJCQkJMHgwNTQ0CisjZGVmaW5lCURCSV9DVFJMCQkJCTB4MDU0OAorI2RlZmluZQlNRElPX0RBVEEJCQkJMHgwNTUwCisjZGVmaW5lCU1ESU9fQ1RSTAkJCQkweDA1NTQKKyNkZWZpbmUJUENJX1JQV00JCQkJMHgwNTYxCisjZGVmaW5lCVBDSV9DUFdNCQkJCTB4MDU2MworCisvKiBDb25maWcgcmVnaXN0ZXIJKE9mZnNldCAweDgwMC0pICovCisjZGVmaW5lCVBIWV9DQ0EJCQkJCTB4ODAzCisKKy8qIE1pbiBTcGFjaW5nIHJlbGF0ZWQgc2V0dGluZ3MuICovCisjZGVmaW5lCU1BWF9NU1NfREVOU0lUWV8yVAkJCTB4MTMKKyNkZWZpbmUJTUFYX01TU19ERU5TSVRZXzFUCQkJMHgwQQorCisvKiBSeCBETUEgQ29udHJvbCByZWxhdGVkIHNldHRpbmdzICovCisjZGVmaW5lCVJYRE1BX0FHR19FTgkJCQlCSVQoNykKKworI2RlZmluZQlSUFdNCQkJCQlQQ0lfUlBXTQorCisvKiBSZWdzaXRlciBCaXQgYW5kIENvbnRlbnQgZGVmaW5pdGlvbiAgKi8KKworI2RlZmluZQlJU09fTUQyUFAJCQkJQklUKDApCisjZGVmaW5lCUlTT19QQTJQQ0lFCQkJCUJJVCgzKQorI2RlZmluZQlJU09fUExMMk1ECQkJCUJJVCg0KQorI2RlZmluZQlJU09fUFdDX0RWMlJQCQkJCUJJVCgxMSkKKyNkZWZpbmUJSVNPX1BXQ19SVjJSUAkJCQlCSVQoMTIpCisKKworI2RlZmluZQlGRU5fTVJFR0VOCQkJCUJJVCgxNSkKKyNkZWZpbmUJRkVOX0RDT1JFCQkJCUJJVCgxMSkKKyNkZWZpbmUJRkVOX0NQVUVOCQkJCUJJVCgxMCkKKworI2RlZmluZQlQQURfSFdQRF9JRE4JCQkJQklUKDIyKQorCisjZGVmaW5lCVNZU19DTEtTRUxfODBNCQkJCUJJVCgwKQorI2RlZmluZQlTWVNfUFNfQ0xLU0VMCQkJCUJJVCgxKQorI2RlZmluZQlTWVNfQ1BVX0NMS1NFTAkJCQlCSVQoMikKKyNkZWZpbmUJU1lTX01BQ19DTEtfRU4JCQkJQklUKDExKQorI2RlZmluZQlTWVNfU1dIV19TRUwJCQkJQklUKDE0KQorI2RlZmluZQlTWVNfRldIV19TRUwJCQkJQklUKDE1KQorCisjZGVmaW5lCUNtZEVFUFJPTV9FbgkJCQlCSVQoNSkKKyNkZWZpbmUJQ21kRUVSUE9NU0VMCQkJCUJJVCg0KQorI2RlZmluZQlDbWQ5MzQ2Q1JfOTM1NlNFTAkJCUJJVCg0KQorCisjZGVmaW5lCUFGRV9NQkVOCQkJCUJJVCgxKQorI2RlZmluZQlBRkVfQkdFTgkJCQlCSVQoMCkKKworI2RlZmluZQlTUFMxX1NXRU4JCQkJQklUKDEpCisjZGVmaW5lCVNQUzFfTERFTgkJCQlCSVQoMCkKKworI2RlZmluZQlSRl9FTgkJCQkJQklUKDApCisjZGVmaW5lCVJGX1JTVEIJCQkJCUJJVCgxKQorI2RlZmluZQlSRl9TRE1SU1RCCQkJCUJJVCgyKQorCisjZGVmaW5lCUxEQTE1X0VOCQkJCUJJVCgwKQorCisjZGVmaW5lCUxEVjEyX0VOCQkJCUJJVCgwKQorI2RlZmluZQlMRFYxMl9TREJZCQkJCUJJVCgxKQorCisjZGVmaW5lCVhUQUxfR0FURV9BRkUJCQkJQklUKDEwKQorCisjZGVmaW5lCUFQTExfRU4JCQkJCUJJVCgwKQorCisjZGVmaW5lCUFGUl9DYXJkQkVuCQkJCUJJVCgwKQorI2RlZmluZQlBRlJfQ0xLUlVOX1NFTAkJCQlCSVQoMSkKKyNkZWZpbmUJQUZSX0Z1bmNSZWdFbgkJCQlCSVQoMikKKworI2RlZmluZQlBUFNET0ZGX1NUQVRVUwkJCQlCSVQoMTUpCisjZGVmaW5lCUFQU0RPRkYJCQkJCUJJVCgxNCkKKyNkZWZpbmUJQkJSU1ROCQkJCQlCSVQoMTMpCisjZGVmaW5lCUJCX0dMQl9SU1ROCQkJCUJJVCgxMikKKyNkZWZpbmUJU0NIRURVTEVfRU4JCQkJQklUKDEwKQorI2RlZmluZQlNQUNSWEVOCQkJCQlCSVQoOSkKKyNkZWZpbmUJTUFDVFhFTgkJCQkJQklUKDgpCisjZGVmaW5lCURETUFfRU4JCQkJCUJJVCg3KQorI2RlZmluZQlGVzJIV19FTgkJCQlCSVQoNikKKyNkZWZpbmUJUlhETUFfRU4JCQkJQklUKDUpCisjZGVmaW5lCVRYRE1BX0VOCQkJCUJJVCg0KQorI2RlZmluZQlIQ0lfUlhETUFfRU4JCQkJQklUKDMpCisjZGVmaW5lCUhDSV9UWERNQV9FTgkJCQlCSVQoMikKKworI2RlZmluZQlTdG9wSENDQQkJCQlCSVQoNikKKyNkZWZpbmUJU3RvcEhpZ2gJCQkJQklUKDUpCisjZGVmaW5lCVN0b3BNZ3QJCQkJCUJJVCg0KQorI2RlZmluZQlTdG9wVk8JCQkJCUJJVCgzKQorI2RlZmluZQlTdG9wVkkJCQkJCUJJVCgyKQorI2RlZmluZQlTdG9wQkUJCQkJCUJJVCgxKQorI2RlZmluZQlTdG9wQksJCQkJCUJJVCgwKQorCisjZGVmaW5lCUxCS19OT1JNQUwJCQkJMHgwMAorI2RlZmluZQlMQktfTUFDX0xCCQkJCShCSVQoMCkgfCBCSVQoMSkgfCBCSVQoMykpCisjZGVmaW5lCUxCS19NQUNfRExCCQkJCShCSVQoMCkgfCBCSVQoMSkpCisjZGVmaW5lCUxCS19ETUFfTEIJCQkJKEJJVCgwKSB8IEJJVCgxKSB8IEJJVCgyKSkKKworI2RlZmluZQlUQ1BfT0ZETF9FTgkJCQlCSVQoMjUpCisjZGVmaW5lCUhXUENfVFhfRU4JCQkJQklUKDI0KQorI2RlZmluZQlUWERNQVBSRTJGVUxMCQkJCUJJVCgyMykKKyNkZWZpbmUJRElTQ1cJCQkJCUJJVCgyMCkKKyNkZWZpbmUJVENSSUNWCQkJCQlCSVQoMTkpCisjZGVmaW5lCUNmZW5kRm9ybQkJCQlCSVQoMTcpCisjZGVmaW5lCVRDUkNSQwkJCQkJQklUKDE2KQorI2RlZmluZQlGQUtFX0lNRU1fRU4JCQkJQklUKDE1KQorI2RlZmluZQlUU0ZSU1QJCQkJCUJJVCg5KQorI2RlZmluZQlUU0ZFTgkJCQkJQklUKDgpCisjZGVmaW5lCUZXQUxMUkRZCQkJCShCSVQoMCkgfCBCSVQoMSkgfCBCSVQoMikgfCBcCisJCQkJCQlCSVQoMykgfCBCSVQoNCkgfCBCSVQoNSkgfCBcCisJCQkJCQlCSVQoNikgfCBCSVQoNykpCisjZGVmaW5lCUZXUkRZCQkJCQlCSVQoNykKKyNkZWZpbmUJQkFTRUNIRwkJCQkJQklUKDYpCisjZGVmaW5lCUlNRU0JCQkJCUJJVCg1KQorI2RlZmluZQlETUVNX0NPREVfRE9ORQkJCQlCSVQoNCkKKyNkZWZpbmUJRVhUX0lNRU1fQ0hLX1JQVAkJCUJJVCgzKQorI2RlZmluZQlFWFRfSU1FTV9DT0RFX0RPTkUJCQlCSVQoMikKKyNkZWZpbmUJSU1FTV9DSEtfUlBUCQkJCUJJVCgxKQorI2RlZmluZQlJTUVNX0NPREVfRE9ORQkJCQlCSVQoMCkKKyNkZWZpbmUJSU1FTV9DT0RFX0RPTkUJCQkJQklUKDApCisjZGVmaW5lCUlNRU1fQ0hLX1JQVAkJCQlCSVQoMSkKKyNkZWZpbmUJRU1FTV9DT0RFX0RPTkUJCQkJQklUKDIpCisjZGVmaW5lCUVNRU1fQ0hLX1JQVAkJCQlCSVQoMykKKyNkZWZpbmUJRE1FTV9DT0RFX0RPTkUJCQkJQklUKDQpCisjZGVmaW5lCUlNRU1fUkRZCQkJCUJJVCg1KQorI2RlZmluZQlCQVNFQ0hHCQkJCQlCSVQoNikKKyNkZWZpbmUJRldSRFkJCQkJCUJJVCg3KQorI2RlZmluZQlMT0FEX0ZXX1JFQURZCQkJCShJTUVNX0NPREVfRE9ORSB8IFwKKwkJCQkJCUlNRU1fQ0hLX1JQVCB8IFwKKwkJCQkJCUVNRU1fQ09ERV9ET05FIHwgXAorCQkJCQkJRU1FTV9DSEtfUlBUIHwgXAorCQkJCQkJRE1FTV9DT0RFX0RPTkUgfCBcCisJCQkJCQlJTUVNX1JEWSB8IFwKKwkJCQkJCUJBU0VDSEcgfCBcCisJCQkJCQlGV1JEWSkKKyNkZWZpbmUJVENSX1RTRkVOCQkJCUJJVCg4KQorI2RlZmluZQlUQ1JfVFNGUlNUCQkJCUJJVCg5KQorI2RlZmluZQlUQ1JfRkFLRV9JTUVNX0VOCQkJQklUKDE1KQorI2RlZmluZQlUQ1JfQ1JDCQkJCQlCSVQoMTYpCisjZGVmaW5lCVRDUl9JQ1YJCQkJCUJJVCgxOSkKKyNkZWZpbmUJVENSX0RJU0NXCQkJCUJJVCgyMCkKKyNkZWZpbmUJVENSX0hXUENfVFhfRU4JCQkJQklUKDI0KQorI2RlZmluZQlUQ1JfVENQX09GRExfRU4JCQkJQklUKDI1KQorI2RlZmluZQlUWERNQV9JTklUX1ZBTFVFCQkJKElNRU1fQ0hLX1JQVCB8IFwKKwkJCQkJCUVYVF9JTUVNX0NIS19SUFQpCisKKyNkZWZpbmUJUkNSX0FQUEZDUwkJCQlCSVQoMzEpCisjZGVmaW5lCVJDUl9ESVNfRU5DXzJCWVRFCQkJQklUKDMwKQorI2RlZmluZQlSQ1JfRElTX0FFU18yQllURQkJCUJJVCgyOSkKKyNkZWZpbmUJUkNSX0hUQ19MT0NfQ1RSTAkJCUJJVCgyOCkKKyNkZWZpbmUJUkNSX0VOTUJJRAkJCQlCSVQoMjcpCisjZGVmaW5lCVJDUl9SWF9UQ1BPRkRMX0VOCQkJQklUKDI2KQorI2RlZmluZQlSQ1JfQVBQX1BIWVNUX1JYRkYJCQlCSVQoMjUpCisjZGVmaW5lCVJDUl9BUFBfUEhZU1RfU1RBRkYJCQlCSVQoMjQpCisjZGVmaW5lCVJDUl9DQlNTSUQJCQkJQklUKDIzKQorI2RlZmluZQlSQ1JfQVBXUk1HVAkJCQlCSVQoMjIpCisjZGVmaW5lCVJDUl9BREQzCQkJCUJJVCgyMSkKKyNkZWZpbmUJUkNSX0FNRgkJCQkJQklUKDIwKQorI2RlZmluZQlSQ1JfQUNGCQkJCQlCSVQoMTkpCisjZGVmaW5lCVJDUl9BREYJCQkJCUJJVCgxOCkKKyNkZWZpbmUJUkNSX0FQUF9NSUMJCQkJQklUKDE3KQorI2RlZmluZQlSQ1JfQVBQX0lDVgkJCQlCSVQoMTYpCisjZGVmaW5lCVJDUl9SWEZUSAkJCQlCSVQoMTMpCisjZGVmaW5lCVJDUl9BSUNWCQkJCUJJVCgxMikKKyNkZWZpbmUJUkNSX1JYREVTQ19MS19FTgkJCUJJVCgxMSkKKyNkZWZpbmUJUkNSX0FQUF9CQV9TU04JCQkJQklUKDYpCisjZGVmaW5lCVJDUl9BQ1JDMzIJCQkJQklUKDUpCisjZGVmaW5lCVJDUl9SWFNIRlRfRU4JCQkJQklUKDQpCisjZGVmaW5lCVJDUl9BQgkJCQkJQklUKDMpCisjZGVmaW5lCVJDUl9BTQkJCQkJQklUKDIpCisjZGVmaW5lCVJDUl9BUE0JCQkJCUJJVCgxKQorI2RlZmluZQlSQ1JfQUFQCQkJCQlCSVQoMCkKKyNkZWZpbmUJUkNSX01YRE1BX09GRlNFVAkJCTgKKyNkZWZpbmUJUkNSX0ZJRk9fT0ZGU0VUCQkJCTEzCisKKworI2RlZmluZSBNU1JfTElOS19NQVNLCQkJCSgoMSA8PCAwKSB8ICgxIDw8IDEpKQorI2RlZmluZSBNU1JfTElOS19NQU5BR0VECQkJMgorI2RlZmluZSBNU1JfTElOS19OT05FCQkJCTAKKyNkZWZpbmUgTVNSX0xJTktfU0hJRlQJCQkJMAorI2RlZmluZSBNU1JfTElOS19BREhPQwkJCQkxCisjZGVmaW5lIE1TUl9MSU5LX01BU1RFUgkJCQkzCisjZGVmaW5lCU1TUl9OT0xJTksJCQkJMHgwMAorI2RlZmluZQlNU1JfQURIT0MJCQkJMHgwMQorI2RlZmluZQlNU1JfSU5GUkEJCQkJMHgwMgorI2RlZmluZQlNU1JfQVAJCQkJCTB4MDMKKworI2RlZmluZQlFTlVBUlQJCQkJCUJJVCg3KQorI2RlZmluZQlFTkpUQUcJCQkJCUJJVCgzKQorI2RlZmluZQlCVE1PREUJCQkJCShCSVQoMikgfCBCSVQoMSkpCisjZGVmaW5lCUVOQlQJCQkJCUJJVCgwKQorCisjZGVmaW5lCUVOTUJJRAkJCQkJQklUKDcpCisjZGVmaW5lCUJDTlVNCQkJCQkoQklUKDYpIHwgQklUKDUpIHwgQklUKDQpKQorCisjZGVmaW5lCVVTVElNRV9FRENBCQkJCTB4RkYwMAorI2RlZmluZQlVU1RJTUVfVFNGCQkJCTB4MDBGRgorCisjZGVmaW5lCVNJRlNfVFJYCQkJCTB4RkYwMAorI2RlZmluZQlTSUZTX0NUWAkJCQkweDAwRkYKKworI2RlZmluZQlFTlNXQkNOCQkJCQlCSVQoMTUpCisjZGVmaW5lCURSVkVSTFlfVFUJCQkJMHgwRkYwCisjZGVmaW5lCURSVkVSTFlfVVMJCQkJMHgwMDBGCisjZGVmaW5lCUJDTl9UQ0ZHX0NXX1NISUZUCQkJOAorI2RlZmluZQlCQ05fVENGR19JRlMJCQkJMAorCisjZGVmaW5lCVJSU1JfUlNDX09GRlNFVAkJCQkyMQorI2RlZmluZQlSUlNSX1NIT1JUX09GRlNFVAkJCTIzCisjZGVmaW5lCVJSU1JfUlNDX0JXXzQwTQkJCQkweDYwMDAwMAorI2RlZmluZQlSUlNSX1JTQ19VUFNVQkNITkwJCQkweDQwMDAwMAorI2RlZmluZQlSUlNSX1JTQ19MT1dTVUJDSE5MCQkJMHgyMDAwMDAKKyNkZWZpbmUJUlJTUl9TSE9SVAkJCQkweDgwMDAwMAorI2RlZmluZQlSUlNSXzFNCQkJCQlCSVQoMCkKKyNkZWZpbmUJUlJTUl8yTQkJCQkJQklUKDEpCisjZGVmaW5lCVJSU1JfNV81TQkJCQlCSVQoMikKKyNkZWZpbmUJUlJTUl8xMU0JCQkJQklUKDMpCisjZGVmaW5lCVJSU1JfNk0JCQkJCUJJVCg0KQorI2RlZmluZQlSUlNSXzlNCQkJCQlCSVQoNSkKKyNkZWZpbmUJUlJTUl8xMk0JCQkJQklUKDYpCisjZGVmaW5lCVJSU1JfMThNCQkJCUJJVCg3KQorI2RlZmluZQlSUlNSXzI0TQkJCQlCSVQoOCkKKyNkZWZpbmUJUlJTUl8zNk0JCQkJQklUKDkpCisjZGVmaW5lCVJSU1JfNDhNCQkJCUJJVCgxMCkKKyNkZWZpbmUJUlJTUl81NE0JCQkJQklUKDExKQorI2RlZmluZQlSUlNSX01DUzAJCQkJQklUKDEyKQorI2RlZmluZQlSUlNSX01DUzEJCQkJQklUKDEzKQorI2RlZmluZQlSUlNSX01DUzIJCQkJQklUKDE0KQorI2RlZmluZQlSUlNSX01DUzMJCQkJQklUKDE1KQorI2RlZmluZQlSUlNSX01DUzQJCQkJQklUKDE2KQorI2RlZmluZQlSUlNSX01DUzUJCQkJQklUKDE3KQorI2RlZmluZQlSUlNSX01DUzYJCQkJQklUKDE4KQorI2RlZmluZQlSUlNSX01DUzcJCQkJQklUKDE5KQorI2RlZmluZQlCUlNSX0Fja1Nob3J0UG1iCQkJQklUKDIzKQorCisjZGVmaW5lCVJBVFJfMU0JCQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUJUkFUUl8yTQkJCQkJMHgwMDAwMDAwMgorI2RlZmluZQlSQVRSXzU1TQkJCQkweDAwMDAwMDA0CisjZGVmaW5lCVJBVFJfMTFNCQkJCTB4MDAwMDAwMDgKKyNkZWZpbmUJUkFUUl82TQkJCQkJMHgwMDAwMDAxMAorI2RlZmluZQlSQVRSXzlNCQkJCQkweDAwMDAwMDIwCisjZGVmaW5lCVJBVFJfMTJNCQkJCTB4MDAwMDAwNDAKKyNkZWZpbmUJUkFUUl8xOE0JCQkJMHgwMDAwMDA4MAorI2RlZmluZQlSQVRSXzI0TQkJCQkweDAwMDAwMTAwCisjZGVmaW5lCVJBVFJfMzZNCQkJCTB4MDAwMDAyMDAKKyNkZWZpbmUJUkFUUl80OE0JCQkJMHgwMDAwMDQwMAorI2RlZmluZQlSQVRSXzU0TQkJCQkweDAwMDAwODAwCisjZGVmaW5lCVJBVFJfTUNTMAkJCQkweDAwMDAxMDAwCisjZGVmaW5lCVJBVFJfTUNTMQkJCQkweDAwMDAyMDAwCisjZGVmaW5lCVJBVFJfTUNTMgkJCQkweDAwMDA0MDAwCisjZGVmaW5lCVJBVFJfTUNTMwkJCQkweDAwMDA4MDAwCisjZGVmaW5lCVJBVFJfTUNTNAkJCQkweDAwMDEwMDAwCisjZGVmaW5lCVJBVFJfTUNTNQkJCQkweDAwMDIwMDAwCisjZGVmaW5lCVJBVFJfTUNTNgkJCQkweDAwMDQwMDAwCisjZGVmaW5lCVJBVFJfTUNTNwkJCQkweDAwMDgwMDAwCisjZGVmaW5lCVJBVFJfTUNTOAkJCQkweDAwMTAwMDAwCisjZGVmaW5lCVJBVFJfTUNTOQkJCQkweDAwMjAwMDAwCisjZGVmaW5lCVJBVFJfTUNTMTAJCQkJMHgwMDQwMDAwMAorI2RlZmluZQlSQVRSX01DUzExCQkJCTB4MDA4MDAwMDAKKyNkZWZpbmUJUkFUUl9NQ1MxMgkJCQkweDAxMDAwMDAwCisjZGVmaW5lCVJBVFJfTUNTMTMJCQkJMHgwMjAwMDAwMAorI2RlZmluZQlSQVRSX01DUzE0CQkJCTB4MDQwMDAwMDAKKyNkZWZpbmUJUkFUUl9NQ1MxNQkJCQkweDA4MDAwMDAwCisKKyNkZWZpbmUJUkFURV9BTExfQ0NLCQkJCShSQVRSXzFNIHwgUkFUUl8yTSB8IFwKKwkJCQkJCVJBVFJfNTVNIHwgUkFUUl8xMU0pCisjZGVmaW5lCVJBVEVfQUxMX09GRE1fQUcJCQkoUkFUUl82TSB8IFJBVFJfOU0gfCBcCisJCQkJCQlSQVRSXzEyTSB8IFJBVFJfMThNIHwgXAorCQkJCQkJUkFUUl8yNE0gfCBSQVRSXzM2TSB8IFwKKwkJCQkJCVJBVFJfNDhNIHwgUkFUUl81NE0pCisjZGVmaW5lCVJBVEVfQUxMX09GRE1fMVNTCQkJKFJBVFJfTUNTMCB8IFJBVFJfTUNTMSB8IFwKKwkJCQkJCVJBVFJfTUNTMiB8IFJBVFJfTUNTMyB8IFwKKwkJCQkJCVJBVFJfTUNTNCB8IFJBVFJfTUNTNSB8IFwKKwkJCQkJCVJBVFJfTUNTNiB8IFJBVFJfTUNTNykKKyNkZWZpbmUJUkFURV9BTExfT0ZETV8yU1MJCQkoUkFUUl9NQ1M4IHwgUkFUUl9NQ1M5IHwgXAorCQkJCQkJUkFUUl9NQ1MxMCB8IFJBVFJfTUNTMTEgfCBcCisJCQkJCQlSQVRSX01DUzEyIHwgUkFUUl9NQ1MxMyB8IFwKKwkJCQkJCVJBVFJfTUNTMTQgfCBSQVRSX01DUzE1KQorCisjZGVmaW5lCUFDX1BBUkFNX1RYT1BfTElNSVRfT0ZGU0VUCQkxNgorI2RlZmluZQlBQ19QQVJBTV9FQ1dfTUFYX09GRlNFVAkJCTEyCisjZGVmaW5lCUFDX1BBUkFNX0VDV19NSU5fT0ZGU0VUCQkJOAorI2RlZmluZQlBQ19QQVJBTV9BSUZTX09GRlNFVAkJCTAKKworI2RlZmluZQlBY21Id19Id0VuCQkJCUJJVCgwKQorI2RlZmluZQlBY21Id19CZXFFbgkJCQlCSVQoMSkKKyNkZWZpbmUJQWNtSHdfVmlxRW4JCQkJQklUKDIpCisjZGVmaW5lCUFjbUh3X1ZvcUVuCQkJCUJJVCgzKQorI2RlZmluZQlBY21Id19CZXFTdGF0dXMJCQkJQklUKDQpCisjZGVmaW5lCUFjbUh3X1ZpcVN0YXR1cwkJCQlCSVQoNSkKKyNkZWZpbmUJQWNtSHdfVm9xU3RhdHVzCQkJCUJJVCg2KQorCisjZGVmaW5lCVJFVFJZX0xJTUlUX1NIT1JUX1NISUZUCQkJOAorI2RlZmluZQlSRVRSWV9MSU1JVF9MT05HX1NISUZUCQkJMAorCisjZGVmaW5lCU5BVl9VUFBFUl9FTgkJCQlCSVQoMTYpCisjZGVmaW5lCU5BVl9VUFBFUgkJCQkweEZGMDAKKyNkZWZpbmUJTkFWX1JUU1JTVAkJCQkweEZGCisKKyNkZWZpbmUJQldfT1BNT0RFXzIwTUhaCQkJCUJJVCgyKQorI2RlZmluZQlCV19PUE1PREVfNUcJCQkJQklUKDEpCisjZGVmaW5lCUJXX09QTU9ERV8xMUoJCQkJQklUKDApCisKKyNkZWZpbmUJUlhFUlJfUlBUX1JTVAkJCQlCSVQoMjcpCisjZGVmaW5lCVJYRVJSX09GRE1fUFBEVQkJCQkwCisjZGVmaW5lCVJYRVJSX09GRE1fRkFMU0VfQUxBUk0JCQkxCisjZGVmaW5lCVJYRVJSX09GRE1fTVBEVV9PSwkJCTIKKyNkZWZpbmUJUlhFUlJfT0ZETV9NUERVX0ZBSUwJCQkzCisjZGVmaW5lCVJYRVJSX0NDS19QUERVCQkJCTQKKyNkZWZpbmUJUlhFUlJfQ0NLX0ZBTFNFX0FMQVJNCQkJNQorI2RlZmluZQlSWEVSUl9DQ0tfTVBEVV9PSwkJCTYKKyNkZWZpbmUJUlhFUlJfQ0NLX01QRFVfRkFJTAkJCTcKKyNkZWZpbmUJUlhFUlJfSFRfUFBEVQkJCQk4CisjZGVmaW5lCVJYRVJSX0hUX0ZBTFNFX0FMQVJNCQkJOQorI2RlZmluZQlSWEVSUl9IVF9NUERVX1RPVEFMCQkJMTAKKyNkZWZpbmUJUlhFUlJfSFRfTVBEVV9PSwkJCTExCisjZGVmaW5lCVJYRVJSX0hUX01QRFVfRkFJTAkJCTEyCisjZGVmaW5lCVJYRVJSX1JYX0ZVTExfRFJPUAkJCTE1CisKKyNkZWZpbmUJU0NSX1RYVVNFREsJCQkJQklUKDApCisjZGVmaW5lCVNDUl9SWFVTRURLCQkJCUJJVCgxKQorI2RlZmluZQlTQ1JfVFhFTkNFTkFCTEUJCQkJQklUKDIpCisjZGVmaW5lCVNDUl9SWEVOQ0VOQUJMRQkJCQlCSVQoMykKKyNkZWZpbmUJU0NSX1NLQllBMgkJCQlCSVQoNCkKKyNkZWZpbmUJU0NSX05PU0tNQwkJCQlCSVQoNSkKKworI2RlZmluZQlDQU1fVkFMSUQJCQkJQklUKDE1KQorI2RlZmluZQlDQU1fTk9UVkFMSUQJCQkJMHgwMDAwCisjZGVmaW5lCUNBTV9VU0VESwkJCQlCSVQoNSkKKworI2RlZmluZQlDQU1fTk9ORQkJCQkweDAKKyNkZWZpbmUJQ0FNX1dFUDQwCQkJCTB4MDEKKyNkZWZpbmUJQ0FNX1RLSVAJCQkJMHgwMgorI2RlZmluZQlDQU1fQUVTCQkJCQkweDA0CisjZGVmaW5lCUNBTV9XRVAxMDQJCQkJMHgwNQorCisjZGVmaW5lCVRPVEFMX0NBTV9FTlRSWQkJCQkzMgorI2RlZmluZQlIQUxGX0NBTV9FTlRSWQkJCQkxNgorCisjZGVmaW5lCUNBTV9XUklURQkJCQlCSVQoMTYpCisjZGVmaW5lCUNBTV9SRUFECQkJCTB4MDAwMDAwMDAKKyNkZWZpbmUJQ0FNX1BPTExJTklHCQkJCUJJVCgzMSkKKworI2RlZmluZQlXT1dfUE1FTgkJCQlCSVQoMCkKKyNkZWZpbmUJV09XX1dPTUVOCQkJCUJJVCgxKQorI2RlZmluZQlXT1dfTUFHSUMJCQkJQklUKDIpCisjZGVmaW5lCVdPV19VV0YJCQkJCUJJVCgzKQorCisjZGVmaW5lCUdQSU9NVVhfRU4JCQkJQklUKDMpCisjZGVmaW5lCUdQSU9TRUxfR1BJTwkJCQkwCisjZGVmaW5lCUdQSU9TRUxfUEhZREJHCQkJCTEKKyNkZWZpbmUJR1BJT1NFTF9CVAkJCQkyCisjZGVmaW5lCUdQSU9TRUxfV0xBTkRCRwkJCQkzCisjZGVmaW5lCUdQSU9TRUxfR1BJT19NQVNLCQkJKH4oQklUKDApfEJJVCgxKSkpCisKKyNkZWZpbmUJSFNUX1JEQlVTWQkJCQlCSVQoMCkKKyNkZWZpbmUJQ1BVX1dUQlVTWQkJCQlCSVQoMSkKKworI2RlZmluZQlJTVI4MTkwX0RJU0FCTEVECQkJMHgwCisjZGVmaW5lCUlNUl9DUFVFUlIJCQkJQklUKDUpCisjZGVmaW5lCUlNUl9BVElNRU5ECQkJCUJJVCg0KQorI2RlZmluZQlJTVJfVEJET0sJCQkJQklUKDMpCisjZGVmaW5lCUlNUl9UQkRFUgkJCQlCSVQoMikKKyNkZWZpbmUJSU1SX0JDTkRNQUlOVDgJCQkJQklUKDEpCisjZGVmaW5lCUlNUl9CQ05ETUFJTlQ3CQkJCUJJVCgwKQorI2RlZmluZQlJTVJfQkNORE1BSU5UNgkJCQlCSVQoMzEpCisjZGVmaW5lCUlNUl9CQ05ETUFJTlQ1CQkJCUJJVCgzMCkKKyNkZWZpbmUJSU1SX0JDTkRNQUlOVDQJCQkJQklUKDI5KQorI2RlZmluZQlJTVJfQkNORE1BSU5UMwkJCQlCSVQoMjgpCisjZGVmaW5lCUlNUl9CQ05ETUFJTlQyCQkJCUJJVCgyNykKKyNkZWZpbmUJSU1SX0JDTkRNQUlOVDEJCQkJQklUKDI2KQorI2RlZmluZQlJTVJfQkNORE9LOAkJCQlCSVQoMjUpCisjZGVmaW5lCUlNUl9CQ05ET0s3CQkJCUJJVCgyNCkKKyNkZWZpbmUJSU1SX0JDTkRPSzYJCQkJQklUKDIzKQorI2RlZmluZQlJTVJfQkNORE9LNQkJCQlCSVQoMjIpCisjZGVmaW5lCUlNUl9CQ05ET0s0CQkJCUJJVCgyMSkKKyNkZWZpbmUJSU1SX0JDTkRPSzMJCQkJQklUKDIwKQorI2RlZmluZQlJTVJfQkNORE9LMgkJCQlCSVQoMTkpCisjZGVmaW5lCUlNUl9CQ05ET0sxCQkJCUJJVCgxOCkKKyNkZWZpbmUJSU1SX1RJTUVPVVQyCQkJCUJJVCgxNykKKyNkZWZpbmUJSU1SX1RJTUVPVVQxCQkJCUJJVCgxNikKKyNkZWZpbmUJSU1SX1RYRk9WVwkJCQlCSVQoMTUpCisjZGVmaW5lCUlNUl9QU1RJTUVPVVQJCQkJQklUKDE0KQorI2RlZmluZQlJTVJfQkNOSU5UCQkJCUJJVCgxMykKKyNkZWZpbmUJSU1SX1JYRk9WVwkJCQlCSVQoMTIpCisjZGVmaW5lCUlNUl9SRFUJCQkJCUJJVCgxMSkKKyNkZWZpbmUJSU1SX1JYQ01ET0sJCQkJQklUKDEwKQorI2RlZmluZQlJTVJfQkRPSwkJCQlCSVQoOSkKKyNkZWZpbmUJSU1SX0hJR0hET0sJCQkJQklUKDgpCisjZGVmaW5lCUlNUl9DT01ET0sJCQkJQklUKDcpCisjZGVmaW5lCUlNUl9NR05URE9LCQkJCUJJVCg2KQorI2RlZmluZQlJTVJfSENDQURPSwkJCQlCSVQoNSkKKyNkZWZpbmUJSU1SX0JLRE9LCQkJCUJJVCg0KQorI2RlZmluZQlJTVJfQkVET0sJCQkJQklUKDMpCisjZGVmaW5lCUlNUl9WSURPSwkJCQlCSVQoMikKKyNkZWZpbmUJSU1SX1ZPRE9LCQkJCUJJVCgxKQorI2RlZmluZQlJTVJfUk9LCQkJCQlCSVQoMCkKKworI2RlZmluZQlUUFBPTExfQktRCQkJCUJJVCgwKQorI2RlZmluZQlUUFBPTExfQkVRCQkJCUJJVCgxKQorI2RlZmluZQlUUFBPTExfVklRCQkJCUJJVCgyKQorI2RlZmluZQlUUFBPTExfVk9RCQkJCUJJVCgzKQorI2RlZmluZQlUUFBPTExfQlEJCQkJQklUKDQpCisjZGVmaW5lCVRQUE9MTF9DUQkJCQlCSVQoNSkKKyNkZWZpbmUJVFBQT0xMX01RCQkJCUJJVCg2KQorI2RlZmluZQlUUFBPTExfSFEJCQkJQklUKDcpCisjZGVmaW5lCVRQUE9MTF9IQ0NBUQkJCQlCSVQoOCkKKyNkZWZpbmUJVFBQT0xMX1NUT1BCSwkJCQlCSVQoOSkKKyNkZWZpbmUJVFBQT0xMX1NUT1BCRQkJCQlCSVQoMTApCisjZGVmaW5lCVRQUE9MTF9TVE9QVkkJCQkJQklUKDExKQorI2RlZmluZQlUUFBPTExfU1RPUFZPCQkJCUJJVCgxMikKKyNkZWZpbmUJVFBQT0xMX1NUT1BNR1QJCQkJQklUKDEzKQorI2RlZmluZQlUUFBPTExfU1RPUEhJR0gJCQkJQklUKDE0KQorI2RlZmluZQlUUFBPTExfU1RPUEhDQ0EJCQkJQklUKDE1KQorI2RlZmluZQlUUFBPTExfU0hJRlQJCQkJOAorCisjZGVmaW5lCUNDWF9DTURfQ0xNX0VOQUJMRQkJCUJJVCgwKQorI2RlZmluZQlDQ1hfQ01EX05ITV9FTkFCTEUJCQlCSVQoMSkKKyNkZWZpbmUJQ0NYX0NNRF9GVU5DVElPTl9FTkFCTEUJCQlCSVQoOCkKKyNkZWZpbmUJQ0NYX0NNRF9JR05PUkVfQ0NBCQkJQklUKDkpCisjZGVmaW5lCUNDWF9DTURfSUdOT1JFX1RYT04JCQlCSVQoMTApCisjZGVmaW5lCUNDWF9DTE1fUkVTVUxUX1JFQURZCQkJQklUKDE2KQorI2RlZmluZQlDQ1hfTkhNX1JFU1VMVF9SRUFEWQkJCUJJVCgxNikKKyNkZWZpbmUJQ0NYX0NNRF9SRVNFVAkJCQkweDAKKworCisjZGVmaW5lCUhXU0VUX01BWF9TSVpFXzkyUwkJCTEyOAorI2RlZmluZSBFRlVTRV9NQVhfU0VDVElPTgkJCTE2CisjZGVmaW5lIEVGVVNFX1JFQUxfQ09OVEVOVF9MRU4JCQk1MTIKKworI2RlZmluZSBSVEw4MTkwX0VFUFJPTV9JRAkJCTB4ODEyOQorI2RlZmluZSBFRVBST01fSFBPTgkJCQkweDAyCisjZGVmaW5lIEVFUFJPTV9DTEsJCQkJMHgwNgorI2RlZmluZSBFRVBST01fVEVTVFIJCQkJMHgwOAorCisjZGVmaW5lIEVFUFJPTV9WSUQJCQkJMHgwQQorI2RlZmluZSBFRVBST01fRElECQkJCTB4MEMKKyNkZWZpbmUgRUVQUk9NX1NWSUQJCQkJMHgwRQorI2RlZmluZSBFRVBST01fU01JRAkJCQkweDEwCisKKyNkZWZpbmUgRUVQUk9NX01BQ19BRERSCQkJCTB4MTIKKyNkZWZpbmUgRUVQUk9NX05PREVfQUREUkVTU19CWVRFXzAJCTB4MTIKKworI2RlZmluZSBFRVBST01fUFdESUZGCQkJCTB4NTQKKworI2RlZmluZSBFRVBST01fVFhQT1dFUkJBU0UJCQkweDUwCisjZGVmaW5lCUVFUFJPTV9UWF9QV1JfSU5ERVhfUkFOR0UJCTI4CisKKyNkZWZpbmUgRUVQUk9NX1RYX1BXUl9IVDIwX0RJRkYJCQkweDYyCisjZGVmaW5lIERFRkFVTFRfSFQyMF9UWFBXUl9ESUZGCQkJMgorI2RlZmluZSBFRVBST01fVFhfUFdSX09GRE1fRElGRgkJCTB4NjUKKworI2RlZmluZQlFRVBST01fVFhQV1JHUk9VUAkJCTB4NjcKKyNkZWZpbmUgRUVQUk9NX1JFR1VMQVRPUlkJCQkweDZECisKKyNkZWZpbmUgVFhfUFdSX1NBRkVUWV9DSEsJCQkweDZECisjZGVmaW5lIEVFUFJPTV9UWFBXSU5ERVhfQ0NLXzI0RwkJMHg1RAorI2RlZmluZSBFRVBST01fVFhQV0lOREVYX09GRE1fMjRHCQkweDZCCisjZGVmaW5lIEVFUFJPTV9IVDJUX0NIMV9BCQkJMHg2YworI2RlZmluZSBFRVBST01fSFQyVF9DSDdfQQkJCTB4NmQKKyNkZWZpbmUgRUVQUk9NX0hUMlRfQ0gxM19BCQkJMHg2ZQorI2RlZmluZSBFRVBST01fSFQyVF9DSDFfQgkJCTB4NmYKKyNkZWZpbmUgRUVQUk9NX0hUMlRfQ0g3X0IJCQkweDcwCisjZGVmaW5lIEVFUFJPTV9IVDJUX0NIMTNfQgkJCTB4NzEKKworI2RlZmluZSBFRVBST01fVFNTSV9BCQkJCTB4NzQKKyNkZWZpbmUgRUVQUk9NX1RTU0lfQgkJCQkweDc1CisKKyNkZWZpbmUJRUVQUk9NX1JGSU5EX1BPV0VSRElGRgkJCTB4NzYKKyNkZWZpbmUJRUVQUk9NX0RFRkFVTFRfTEVHQUNZSFRUWFBPV0VSRElGRgkweDMKKworI2RlZmluZSBFRVBST01fVEhFUk1BTE1FVEVSCQkJMHg3NworI2RlZmluZQlFRVBST01fQkxVRVRPT1RIX0NPRVhJU1QJCTB4NzgKKyNkZWZpbmUJRUVQUk9NX0JMVUVUT09USF9UWVBFCQkJMHg0ZgorCisjZGVmaW5lCUVFUFJPTV9PUFRJT05BTAkJCQkweDc4CisjZGVmaW5lCUVFUFJPTV9XT1dMQU4JCQkJMHg3OAorCisjZGVmaW5lIEVFUFJPTV9DUllTVEFMQ0FQCQkJMHg3OQorI2RlZmluZSBFRVBST01fQ0hBTk5FTFBMQU4JCQkweDdCCisjZGVmaW5lIEVFUFJPTV9WRVJTSU9OCQkJCTB4N0MKKyNkZWZpbmUJRUVQUk9NX0NVU1RPTUlECQkJCTB4N0EKKyNkZWZpbmUgRUVQUk9NX0JPQVJEVFlQRQkJCTB4N0UKKworI2RlZmluZQlFRVBST01fQ0hBTk5FTF9QTEFOX0ZDQwkJCTB4MAorI2RlZmluZQlFRVBST01fQ0hBTk5FTF9QTEFOX0lDCQkJMHgxCisjZGVmaW5lCUVFUFJPTV9DSEFOTkVMX1BMQU5fRVRTSQkJMHgyCisjZGVmaW5lCUVFUFJPTV9DSEFOTkVMX1BMQU5fU1BBSU4JCTB4MworI2RlZmluZQlFRVBST01fQ0hBTk5FTF9QTEFOX0ZSQU5DRQkJMHg0CisjZGVmaW5lCUVFUFJPTV9DSEFOTkVMX1BMQU5fTUtLCQkJMHg1CisjZGVmaW5lCUVFUFJPTV9DSEFOTkVMX1BMQU5fTUtLMQkJMHg2CisjZGVmaW5lCUVFUFJPTV9DSEFOTkVMX1BMQU5fSVNSQUVMCQkweDcKKyNkZWZpbmUJRUVQUk9NX0NIQU5ORUxfUExBTl9URUxFQwkJMHg4CisjZGVmaW5lCUVFUFJPTV9DSEFOTkVMX1BMQU5fR0xPQkFMX0RPTUFJTgkweDkKKyNkZWZpbmUJRUVQUk9NX0NIQU5ORUxfUExBTl9XT1JMRF9XSURFXzEzCTB4QQorI2RlZmluZQlFRVBST01fQ0hBTk5FTF9QTEFOX05DQwkJCTB4QgorI2RlZmluZQlFRVBST01fQ0hBTk5FTF9QTEFOX0JZX0hXX01BU0sJCTB4ODAKKworI2RlZmluZQlGV19ESUdfRElTQUJMRQkJCQkweGZkMDBjYzAwCisjZGVmaW5lCUZXX0RJR19FTkFCTEUJCQkJMHhmZDAwMDAwMAorI2RlZmluZQlGV19ESUdfSEFMVAkJCQkweGZkMDAwMDAxCisjZGVmaW5lCUZXX0RJR19SRVNVTUUJCQkJMHhmZDAwMDAwMgorI2RlZmluZQlGV19ISUdIX1BXUl9ESVNBQkxFCQkJMHhmZDAwMDAwOAorI2RlZmluZQlGV19ISUdIX1BXUl9FTkFCTEUJCQkweGZkMDAwMDA5CisjZGVmaW5lCUZXX0FERF9BMl9FTlRSWQkJCQkweGZkMDAwMDE2CisjZGVmaW5lCUZXX1RYUFdSX1RSQUNLX0VOQUJMRQkJCTB4ZmQwMDAwMTcKKyNkZWZpbmUJRldfVFhQV1JfVFJBQ0tfRElTQUJMRQkJCTB4ZmQwMDAwMTgKKyNkZWZpbmUJRldfVFhQV1JfVFJBQ0tfVEhFUk1BTAkJCTB4ZmQwMDAwMTkKKyNkZWZpbmUJRldfVFhBTlRfU1dJVENIX0VOQUJMRQkJCTB4ZmQwMDAwMjMKKyNkZWZpbmUJRldfVFhBTlRfU1dJVENIX0RJU0FCTEUJCQkweGZkMDAwMDI0CisjZGVmaW5lCUZXX1JBX0lOSVQJCQkJMHhmZDAwMDAyNgorI2RlZmluZQlGV19DVFJMX0RNX0JZX0RSSVZFUgkJCTBYZmQwMDAwMmEKKyNkZWZpbmUJRldfUkFfSU9UX0JHX0NPTUIJCQkweGZkMDAwMDMwCisjZGVmaW5lCUZXX1JBX0lPVF9OX0NPTUIJCQkweGZkMDAwMDMxCisjZGVmaW5lCUZXX1JBX1JFRlJFU0gJCQkJMHhmZDAwMDBhMAorI2RlZmluZQlGV19SQV9VUERBVEVfTUFTSwkJCTB4ZmQwMDAwYTIKKyNkZWZpbmUJRldfUkFfRElTQUJMRQkJCQkweGZkMDAwMGE0CisjZGVmaW5lCUZXX1JBX0FDVElWRQkJCQkweGZkMDAwMGE2CisjZGVmaW5lCUZXX1JBX0RJU0FCTEVfUlNTSV9NQVNLCQkJMHhmZDAwMDBhYworI2RlZmluZQlGV19SQV9FTkFCTEVfUlNTSV9NQVNLCQkJMHhmZDAwMDBhZAorI2RlZmluZQlGV19SQV9SRVNFVAkJCQkweGZkMDAwMGFmCisjZGVmaW5lCUZXX0RNX0RJU0FCTEUJCQkJMHhmZDAwYWEwMAorI2RlZmluZQlGV19JUUtfRU5BQkxFCQkJCTB4ZjAwMDAwMjAKKyNkZWZpbmUJRldfSVFLX1NVQ0NFU1MJCQkJMHgwMDAwZGRkZAorI2RlZmluZQlGV19JUUtfRkFJTAkJCQkweDAwMDBmZmZmCisjZGVmaW5lCUZXX09QX0ZBSUxVUkUJCQkJMHhmZmZmZmZmZgorI2RlZmluZQlGV19UWF9GRUVEQkFDS19OT05FCQkJMHhmYjAwMDAwMAorI2RlZmluZQlGV19UWF9GRUVEQkFDS19EVE1fRU5BQkxFCQkoRldfVFhfRkVFREJBQ0tfTk9ORSB8IDB4MSkKKyNkZWZpbmUJRldfVFhfRkVFREJBQ0tfQ0NYX0VOQUJMCQkoRldfVFhfRkVFREJBQ0tfTk9ORSB8IDB4MikKKyNkZWZpbmUJRldfQkJfUkVTRVRfRU5BQkxFCQkJMHhmZjAwMDAwZAorI2RlZmluZQlGV19CQl9SRVNFVF9ESVNBQkxFCQkJMHhmZjAwMDAwZQorI2RlZmluZQlGV19DQ0FfQ0hLX0VOQUJMRQkJCTB4ZmYwMDAwMTEKKyNkZWZpbmUJRldfQ0NLX1JFU0VUX0NOVAkJCTB4ZmYwMDAwMTMKKyNkZWZpbmUJRldfTFBTX0VOVEVSCQkJCTB4ZmUwMDAwMTAKKyNkZWZpbmUJRldfTFBTX0xFQVZFCQkJCTB4ZmUwMDAwMTEKKyNkZWZpbmUJRldfSU5ESVJFQ1RfUkVBRAkJCTB4ZjIwMDAwMDAKKyNkZWZpbmUJRldfSU5ESVJFQ1RfV1JJVEUJCQkweGYyMDAwMDAxCisjZGVmaW5lCUZXX0NIQU5fU0VUCQkJCTB4ZjMwMDAwMDEKKworI2RlZmluZSBSRlBDCQkJCQkweDVGCisjZGVmaW5lIFJDUl85MzU2U0VMCQkJCUJJVCg2KQorI2RlZmluZSBUQ1JfTFJMX09GRlNFVAkJCQkwCisjZGVmaW5lIFRDUl9TUkxfT0ZGU0VUCQkJCTgKKyNkZWZpbmUgVENSX01YRE1BX09GRlNFVAkJCTIxCisjZGVmaW5lIFRDUl9TQVQJCQkJCUJJVCgyNCkKKyNkZWZpbmUgUkNSX01YRE1BX09GRlNFVAkJCTgKKyNkZWZpbmUgUkNSX0ZJRk9fT0ZGU0VUCQkJCTEzCisjZGVmaW5lIFJDUl9Pbmx5RXJsUGt0CQkJCUJJVCgzMSkKKyNkZWZpbmUgQ1dSCQkJCQkweERDCisjZGVmaW5lIFJFVFJZQ1RSCQkJCTB4REUKKworI2RlZmluZSBDUFVfR0VOX1NZU1RFTV9SRVNFVAkJCTB4MDAwMDAwMDEKKworI2RlZmluZQlDQ1hfQ09NTUFORF9SRUcJCQkJMHg4OTAKKyNkZWZpbmUJQ0xNX1BFUklPRF9SRUcJCQkJMHg4OTQKKyNkZWZpbmUJTkhNX1BFUklPRF9SRUcJCQkJMHg4OTYKKworI2RlZmluZQlOSE1fVEhSRVNIT0xEMAkJCQkweDg5OAorI2RlZmluZQlOSE1fVEhSRVNIT0xEMQkJCQkweDg5OQorI2RlZmluZQlOSE1fVEhSRVNIT0xEMgkJCQkweDg5QQorI2RlZmluZQlOSE1fVEhSRVNIT0xEMwkJCQkweDg5QgorI2RlZmluZQlOSE1fVEhSRVNIT0xENAkJCQkweDg5QworI2RlZmluZQlOSE1fVEhSRVNIT0xENQkJCQkweDg5RAorI2RlZmluZQlOSE1fVEhSRVNIT0xENgkJCQkweDg5RQorI2RlZmluZQlDTE1fUkVTVUxUX1JFRwkJCQkweDhEMAorI2RlZmluZQlOSE1fUkVTVUxUX1JFRwkJCQkweDhENAorI2RlZmluZQlOSE1fUlBJX0NPVU5URVIwCQkJMHg4RDgKKyNkZWZpbmUJTkhNX1JQSV9DT1VOVEVSMQkJCTB4OEQ5CisjZGVmaW5lCU5ITV9SUElfQ09VTlRFUjIJCQkweDhEQQorI2RlZmluZQlOSE1fUlBJX0NPVU5URVIzCQkJMHg4REIKKyNkZWZpbmUJTkhNX1JQSV9DT1VOVEVSNAkJCTB4OERDCisjZGVmaW5lCU5ITV9SUElfQ09VTlRFUjUJCQkweDhERAorI2RlZmluZQlOSE1fUlBJX0NPVU5URVI2CQkJMHg4REUKKyNkZWZpbmUJTkhNX1JQSV9DT1VOVEVSNwkJCTB4OERGCisKKyNkZWZpbmUJSEFMXzgxOTJTX0hXX0dQSU9fT0ZGX0JJVAkJQklUKDMpCisjZGVmaW5lCUhBTF84MTkyU19IV19HUElPX09GRl9NQVNLCQkweEY3CisjZGVmaW5lCUhBTF84MTkyU19IV19HUElPX1dQU19CSVQJCUJJVCg0KQorCisjZGVmaW5lCVJQTUFDX1JFU0VUCQkJCTB4MTAwCisjZGVmaW5lCVJQTUFDX1RYU1RBUlQJCQkJMHgxMDQKKyNkZWZpbmUJUlBNQUNfVFhMRUdBQ1lTSUcJCQkweDEwOAorI2RlZmluZQlSUE1BQ19UWEhUU0lHMQkJCQkweDEwYworI2RlZmluZQlSUE1BQ19UWEhUU0lHMgkJCQkweDExMAorI2RlZmluZQlSUE1BQ19QSFlERUJVRwkJCQkweDExNAorI2RlZmluZQlSUE1BQ19UWFBBQ0tFVE5OTQkJCTB4MTE4CisjZGVmaW5lCVJQTUFDX1RYSURMRQkJCQkweDExYworI2RlZmluZQlSUE1BQ19UWE1BQ0hFQURFUjAJCQkweDEyMAorI2RlZmluZQlSUE1BQ19UWE1BQ0hFQURFUjEJCQkweDEyNAorI2RlZmluZQlSUE1BQ19UWE1BQ0hFQURFUjIJCQkweDEyOAorI2RlZmluZQlSUE1BQ19UWE1BQ0hFQURFUjMJCQkweDEyYworI2RlZmluZQlSUE1BQ19UWE1BQ0hFQURFUjQJCQkweDEzMAorI2RlZmluZQlSUE1BQ19UWE1BQ0hFQURFUjUJCQkweDEzNAorI2RlZmluZQlSUE1BQ19UWERBVEFUWVBFCQkJMHgxMzgKKyNkZWZpbmUJUlBNQUNfVFhSQU5ET01TRUVECQkJMHgxM2MKKyNkZWZpbmUJUlBNQUNfQ0NLUExDUFBSRUFNQkxFCQkJMHgxNDAKKyNkZWZpbmUJUlBNQUNfQ0NLUExDUEhFQURFUgkJCTB4MTQ0CisjZGVmaW5lCVJQTUFDX0NDS0NSQzE2CQkJCTB4MTQ4CisjZGVmaW5lCVJQTUFDX09GRE1SWENSQzMyT0sJCQkweDE3MAorI2RlZmluZQlSUE1BQ19PRkRNUlhDUkMzMkVSCQkJMHgxNzQKKyNkZWZpbmUJUlBNQUNfT0ZETVJYUEFSSVRZRVIJCQkweDE3OAorI2RlZmluZQlSUE1BQ19PRkRNUlhDUkM4RVIJCQkweDE3YworI2RlZmluZQlSUE1BQ19DQ0tDUlhSQzE2RVIJCQkweDE4MAorI2RlZmluZQlSUE1BQ19DQ0tDUlhSQzMyRVIJCQkweDE4NAorI2RlZmluZQlSUE1BQ19DQ0tDUlhSQzMyT0sJCQkweDE4OAorI2RlZmluZQlSUE1BQ19UWFNUQVRVUwkJCQkweDE4YworCisjZGVmaW5lCVJGX0JCX0NNRF9BRERSCQkJCTB4MDJjMAorI2RlZmluZQlSRl9CQl9DTURfREFUQQkJCQkweDAyYzQKKworI2RlZmluZQlSRlBHQTBfUkZNT0QJCQkJMHg4MDAKKworI2RlZmluZQlSRlBHQTBfVFhJTkZPCQkJCTB4ODA0CisjZGVmaW5lCVJGUEdBMF9QU0RGVU5DVElPTgkJCTB4ODA4CisKKyNkZWZpbmUJUkZQR0EwX1RYR0FJTlNUQUdFCQkJMHg4MGMKKworI2RlZmluZQlSRlBHQTBfUkZUSU1JTkcxCQkJMHg4MTAKKyNkZWZpbmUJUkZQR0EwX1JGVElNSU5HMgkJCTB4ODE0CisjZGVmaW5lCVJGUEdBMF9YQV9IU1NJUEFSQU1FVEVSMQkJMHg4MjAKKyNkZWZpbmUJUkZQR0EwX1hBX0hTU0lQQVJBTUVURVIyCQkweDgyNAorI2RlZmluZQlSRlBHQTBfWEJfSFNTSVBBUkFNRVRFUjEJCTB4ODI4CisjZGVmaW5lCVJGUEdBMF9YQl9IU1NJUEFSQU1FVEVSMgkJMHg4MmMKKyNkZWZpbmUJUkZQR0EwX1hDX0hTU0lQQVJBTUVURVIxCQkweDgzMAorI2RlZmluZQlSRlBHQTBfWENfSFNTSVBBUkFNRVRFUjIJCTB4ODM0CisjZGVmaW5lCVJGUEdBMF9YRF9IU1NJUEFSQU1FVEVSMQkJMHg4MzgKKyNkZWZpbmUJUkZQR0EwX1hEX0hTU0lQQVJBTUVURVIyCQkweDgzYworI2RlZmluZQlSRlBHQTBfWEFfTFNTSVBBUkFNRVRFUgkJCTB4ODQwCisjZGVmaW5lCVJGUEdBMF9YQl9MU1NJUEFSQU1FVEVSCQkJMHg4NDQKKyNkZWZpbmUJUkZQR0EwX1hDX0xTU0lQQVJBTUVURVIJCQkweDg0OAorI2RlZmluZQlSRlBHQTBfWERfTFNTSVBBUkFNRVRFUgkJCTB4ODRjCisKKyNkZWZpbmUJUkZQR0EwX1JGV0FLRVVQX1BBUkFNRVRFUgkJMHg4NTAKKyNkZWZpbmUJUkZQR0EwX1JGU0xFRVBVUF9QQVJBTUVURVIJCTB4ODU0CisKKyNkZWZpbmUJUkZQR0EwX1hBQl9TV0lUQ0hDT05UUk9MCQkweDg1OAorI2RlZmluZQlSRlBHQTBfWENEX1NXSVRDSENPTlRST0wJCTB4ODVjCisKKyNkZWZpbmUJUkZQR0EwX1hBX1JGSU5URVJGQUNFT0UJCQkweDg2MAorI2RlZmluZQlSRlBHQTBfWEJfUkZJTlRFUkZBQ0VPRQkJCTB4ODY0CisjZGVmaW5lCVJGUEdBMF9YQ19SRklOVEVSRkFDRU9FCQkJMHg4NjgKKyNkZWZpbmUJUkZQR0EwX1hEX1JGSU5URVJGQUNFT0UJCQkweDg2YworCisjZGVmaW5lCVJGUEdBMF9YQUJfUkZJTlRFUkZBQ0VTVwkJMHg4NzAKKyNkZWZpbmUJUkZQR0EwX1hDRF9SRklOVEVSRkFDRVNXCQkweDg3NAorCisjZGVmaW5lCVJGUEdBMF9YQUJfUkZQQVJBTUVURVIJCQkweDg3OAorI2RlZmluZQlSRlBHQTBfWENEX1JGUEFSQU1FVEVSCQkJMHg4N2MKKworI2RlZmluZQlSRlBHQTBfQU5BTE9HUEFSQU1FVEVSMQkJCTB4ODgwCisjZGVmaW5lCVJGUEdBMF9BTkFMT0dQQVJBTUVURVIyCQkJMHg4ODQKKyNkZWZpbmUJUkZQR0EwX0FOQUxPR1BBUkFNRVRFUjMJCQkweDg4OAorI2RlZmluZQlSRlBHQTBfQU5BTE9HUEFSQU1FVEVSNAkJCTB4ODhjCisKKyNkZWZpbmUJUkZQR0EwX1hBX0xTU0lSRUFEQkFDSwkJCTB4OGEwCisjZGVmaW5lCVJGUEdBMF9YQl9MU1NJUkVBREJBQ0sJCQkweDhhNAorI2RlZmluZQlSRlBHQTBfWENfTFNTSVJFQURCQUNLCQkJMHg4YTgKKyNkZWZpbmUJUkZQR0EwX1hEX0xTU0lSRUFEQkFDSwkJCTB4OGFjCisKKyNkZWZpbmUJUkZQR0EwX1BTRFJFUE9SVAkJCTB4OGI0CisjZGVmaW5lCVRSQU5TQ0VJVkVSQV9IU1BJX1JFQURCQUNLCQkweDhiOAorI2RlZmluZQlUUkFOU0NFSVZFUkJfSFNQSV9SRUFEQkFDSwkJMHg4YmMKKyNkZWZpbmUJUkZQR0EwX1hBQl9SRklOVEVSRkFDRVJCCQkweDhlMAorI2RlZmluZQlSRlBHQTBfWENEX1JGSU5URVJGQUNFUkIJCTB4OGU0CisjZGVmaW5lCVJGUEdBMV9SRk1PRAkJCQkweDkwMAorCisjZGVmaW5lCVJGUEdBMV9UWEJMT0NLCQkJCTB4OTA0CisjZGVmaW5lCVJGUEdBMV9ERUJVR1NFTEVDVAkJCTB4OTA4CisjZGVmaW5lCVJGUEdBMV9UWElORk8JCQkJMHg5MGMKKworI2RlZmluZQlSQ0NLMF9TWVNURU0JCQkJMHhhMDAKKworI2RlZmluZQlSQ0NLMF9BRkVTRVRUSU5HCQkJMHhhMDQKKyNkZWZpbmUJUkNDSzBfQ0NBCQkJCTB4YTA4CisKKyNkZWZpbmUJUkNDSzBfUlhBR0MxCQkJCTB4YTBjCisjZGVmaW5lCVJDQ0swX1JYQUdDMgkJCQkweGExMAorCisjZGVmaW5lCVJDQ0swX1JYSFAJCQkJMHhhMTQKKworI2RlZmluZQlSQ0NLMF9EU1BQQVJBTUVURVIxCQkJMHhhMTgKKyNkZWZpbmUJUkNDSzBfRFNQUEFSQU1FVEVSMgkJCTB4YTFjCisKKyNkZWZpbmUJUkNDSzBfVFhGSUxURVIxCQkJCTB4YTIwCisjZGVmaW5lCVJDQ0swX1RYRklMVEVSMgkJCQkweGEyNAorI2RlZmluZQlSQ0NLMF9ERUJVR1BPUlQJCQkJMHhhMjgKKyNkZWZpbmUJUkNDSzBfRkFMU0VBTEFSTVJFUE9SVAkJCTB4YTJjCisjZGVmaW5lCVJDQ0swX1RSU1NJUkVQT1JUCQkJMHhhNTAKKyNkZWZpbmUJUkNDSzBfUlhSRVBPUlQJCQkJMHhhNTQKKyNkZWZpbmUJUkNDSzBfRkFDT1VOVEVSTE9XRVIJCQkweGE1YworI2RlZmluZQlSQ0NLMF9GQUNPVU5URVJVUFBFUgkJCTB4YTU4CisKKyNkZWZpbmUJUk9GRE0wX0xTVEYJCQkJMHhjMDAKKworI2RlZmluZQlST0ZETTBfVFJYUEFUSEVOQUJMRQkJCTB4YzA0CisjZGVmaW5lCVJPRkRNMF9UUk1VWFBBUgkJCQkweGMwOAorI2RlZmluZQlST0ZETTBfVFJTV0lTT0xBVElPTgkJCTB4YzBjCisKKyNkZWZpbmUJUk9GRE0wX1hBUlhBRkUJCQkJMHhjMTAKKyNkZWZpbmUJUk9GRE0wX1hBUlhJUUlNQkFMQU5DRQkJCTB4YzE0CisjZGVmaW5lCVJPRkRNMF9YQlJYQUZFCQkJCTB4YzE4CisjZGVmaW5lCVJPRkRNMF9YQlJYSVFJTUJBTEFOQ0UJCQkweGMxYworI2RlZmluZQlST0ZETTBfWENSWEFGRQkJCQkweGMyMAorI2RlZmluZQlST0ZETTBfWENSWElRSU1CQUxBTkNFCQkJMHhjMjQKKyNkZWZpbmUJUk9GRE0wX1hEUlhBRkUJCQkJMHhjMjgKKyNkZWZpbmUJUk9GRE0wX1hEUlhJUUlNQkFMQU5DRQkJCTB4YzJjCisKKyNkZWZpbmUJUk9GRE0wX1JYREVURUNUT1IxCQkJMHhjMzAKKyNkZWZpbmUJUk9GRE0wX1JYREVURUNUT1IyCQkJMHhjMzQKKyNkZWZpbmUJUk9GRE0wX1JYREVURUNUT1IzCQkJMHhjMzgKKyNkZWZpbmUJUk9GRE0wX1JYREVURUNUT1I0CQkJMHhjM2MKKworI2RlZmluZQlST0ZETTBfUlhEU1AJCQkJMHhjNDAKKyNkZWZpbmUJUk9GRE0wX0NGT19BTkRfREFHQwkJCTB4YzQ0CisjZGVmaW5lCVJPRkRNMF9DQ0FEUk9QX1RIUkVTSE9MRAkJMHhjNDgKKyNkZWZpbmUJUk9GRE0wX0VDQ0FfVEhSRVNIT0xECQkJMHhjNGMKKworI2RlZmluZQlST0ZETTBfWEFBR0NDT1JFMQkJCTB4YzUwCisjZGVmaW5lCVJPRkRNMF9YQUFHQ0NPUkUyCQkJMHhjNTQKKyNkZWZpbmUJUk9GRE0wX1hCQUdDQ09SRTEJCQkweGM1OAorI2RlZmluZQlST0ZETTBfWEJBR0NDT1JFMgkJCTB4YzVjCisjZGVmaW5lCVJPRkRNMF9YQ0FHQ0NPUkUxCQkJMHhjNjAKKyNkZWZpbmUJUk9GRE0wX1hDQUdDQ09SRTIJCQkweGM2NAorI2RlZmluZQlST0ZETTBfWERBR0NDT1JFMQkJCTB4YzY4CisjZGVmaW5lCVJPRkRNMF9YREFHQ0NPUkUyCQkJMHhjNmMKKworI2RlZmluZQlST0ZETTBfQUdDUEFSQU1FVEVSMQkJCTB4YzcwCisjZGVmaW5lCVJPRkRNMF9BR0NQQVJBTUVURVIyCQkJMHhjNzQKKyNkZWZpbmUJUk9GRE0wX0FHQ1JTU0lUQUJMRQkJCTB4Yzc4CisjZGVmaW5lCVJPRkRNMF9IVFNURkFHQwkJCQkweGM3YworCisjZGVmaW5lCVJPRkRNMF9YQVRYSVFJTUJBTEFOQ0UJCQkweGM4MAorI2RlZmluZQlST0ZETTBfWEFUWEFGRQkJCQkweGM4NAorI2RlZmluZQlST0ZETTBfWEJUWElRSU1CQUxBTkNFCQkJMHhjODgKKyNkZWZpbmUJUk9GRE0wX1hCVFhBRkUJCQkJMHhjOGMKKyNkZWZpbmUJUk9GRE0wX1hDVFhJUUlNQkFMQU5DRQkJCTB4YzkwCisjZGVmaW5lCVJPRkRNMF9YQ1RYQUZFCQkJCTB4Yzk0CisjZGVmaW5lCVJPRkRNMF9YRFRYSVFJTUJBTEFOQ0UJCQkweGM5OAorI2RlZmluZQlST0ZETTBfWERUWEFGRQkJCQkweGM5YworCisjZGVmaW5lCVJPRkRNMF9SWEhQX1BBUkFNRVRFUgkJCTB4Y2UwCisjZGVmaW5lCVJPRkRNMF9UWFBTRVVET19OT0lTRV9XR1QJCTB4Y2U0CisjZGVmaW5lCVJPRkRNMF9GUkFNRV9TWU5DCQkJMHhjZjAKKyNkZWZpbmUJUk9GRE0wX0RGU1JFUE9SVAkJCTB4Y2Y0CisjZGVmaW5lCVJPRkRNMF9UWENPRUZGMQkJCQkweGNhNAorI2RlZmluZQlST0ZETTBfVFhDT0VGRjIJCQkJMHhjYTgKKyNkZWZpbmUJUk9GRE0wX1RYQ09FRkYzCQkJCTB4Y2FjCisjZGVmaW5lCVJPRkRNMF9UWENPRUZGNAkJCQkweGNiMAorI2RlZmluZQlST0ZETTBfVFhDT0VGRjUJCQkJMHhjYjQKKyNkZWZpbmUJUk9GRE0wX1RYQ09FRkY2CQkJCTB4Y2I4CisKKworI2RlZmluZQlST0ZETTFfTFNURgkJCQkweGQwMAorI2RlZmluZQlST0ZETTFfVFJYUEFUSEVOQUJMRQkJCTB4ZDA0CisKKyNkZWZpbmUJUk9GRE0xX0NGTwkJCQkweGQwOAorI2RlZmluZQlST0ZETTFfQ1NJMQkJCQkweGQxMAorI2RlZmluZQlST0ZETTFfU0JECQkJCTB4ZDE0CisjZGVmaW5lCVJPRkRNMV9DU0kyCQkJCTB4ZDE4CisjZGVmaW5lCVJPRkRNMV9DRk9UUkFDS0lORwkJCTB4ZDJjCisjZGVmaW5lCVJPRkRNMV9UUlhNRVNBVVJFMQkJCTB4ZDM0CisjZGVmaW5lCVJPRkRNMV9JTlRGX0RFVAkJCQkweGQzYworI2RlZmluZQlST0ZETTFfUFNFVURPX05PSVNFU1RBVEVBQgkJMHhkNTAKKyNkZWZpbmUJUk9GRE0xX1BTRVVET19OT0lTRVNUQVRFQ0QJCTB4ZDU0CisjZGVmaW5lCVJPRkRNMV9SWF9QU0VVRE9fTk9JU0VfV0dUCQkweGQ1OAorCisjZGVmaW5lCVJPRkRNX1BIWUNPVU5URVIxCQkJMHhkYTAKKyNkZWZpbmUJUk9GRE1fUEhZQ09VTlRFUjIJCQkweGRhNAorI2RlZmluZQlST0ZETV9QSFlDT1VOVEVSMwkJCTB4ZGE4CisKKyNkZWZpbmUJUk9GRE1fU0hPUlRfQ0ZPQUIJCQkweGRhYworI2RlZmluZQlST0ZETV9TSE9SVF9DRk9DRAkJCTB4ZGIwCisjZGVmaW5lCVJPRkRNX0xPTkdfQ0ZPQUIJCQkweGRiNAorI2RlZmluZQlST0ZETV9MT05HX0NGT0NECQkJMHhkYjgKKyNkZWZpbmUJUk9GRE1fVEFJTF9DRk9BQgkJCTB4ZGJjCisjZGVmaW5lCVJPRkRNX1RBSUxfQ0ZPQ0QJCQkweGRjMAorI2RlZmluZQlST0ZETV9QV19NRUFTVVJFMQkJCTB4ZGM0CisjZGVmaW5lCVJPRkRNX1BXX01FQVNVUkUyCQkJMHhkYzgKKyNkZWZpbmUJUk9GRE1fQldfUkVQT1JUCQkJCTB4ZGNjCisjZGVmaW5lCVJPRkRNX0FHQ19SRVBPUlQJCQkweGRkMAorI2RlZmluZQlST0ZETV9SWFNOUgkJCQkweGRkNAorI2RlZmluZQlST0ZETV9SWEVWTUNTSQkJCQkweGRkOAorI2RlZmluZQlST0ZETV9TSUdfUkVQT1JUCQkJMHhkZGMKKworCisjZGVmaW5lCVJUWEFHQ19SQVRFMThfMDYJCQkweGUwMAorI2RlZmluZQlSVFhBR0NfUkFURTU0XzI0CQkJMHhlMDQKKyNkZWZpbmUJUlRYQUdDX0NDS19NQ1MzMgkJCTB4ZTA4CisjZGVmaW5lCVJUWEFHQ19NQ1MwM19NQ1MwMAkJCTB4ZTEwCisjZGVmaW5lCVJUWEFHQ19NQ1MwN19NQ1MwNAkJCTB4ZTE0CisjZGVmaW5lCVJUWEFHQ19NQ1MxMV9NQ1MwOAkJCTB4ZTE4CisjZGVmaW5lCVJUWEFHQ19NQ1MxNV9NQ1MxMgkJCTB4ZTFjCisKKworI2RlZmluZQlSRl9BQwkJCQkJMHgwMAorI2RlZmluZQlSRl9JUUFESl9HMQkJCQkweDAxCisjZGVmaW5lCVJGX0lRQURKX0cyCQkJCTB4MDIKKyNkZWZpbmUJUkZfUE9XX1RSU1cJCQkJMHgwNQorI2RlZmluZQlSRl9HQUlOX1JYCQkJCTB4MDYKKyNkZWZpbmUJUkZfR0FJTl9UWAkJCQkweDA3CisjZGVmaW5lCVJGX1RYTV9JREFDCQkJCTB4MDgKKyNkZWZpbmUJUkZfQlNfSVFHRU4JCQkJMHgwRgorCisjZGVmaW5lCVJGX01PREUxCQkJCTB4MTAKKyNkZWZpbmUJUkZfTU9ERTIJCQkJMHgxMQorI2RlZmluZQlSRl9SWF9BR0NfSFAJCQkJMHgxMgorI2RlZmluZQlSRl9UWF9BR0MJCQkJMHgxMworI2RlZmluZQlSRl9CSUFTCQkJCQkweDE0CisjZGVmaW5lCVJGX0lQQQkJCQkJMHgxNQorI2RlZmluZQlSRl9QT1dfQUJJTElUWQkJCQkweDE3CisjZGVmaW5lCVJGX01PREVfQUcJCQkJMHgxOAorI2RlZmluZQlSRl9DSEFOTkVMCQkJCTB4MTgKKyNkZWZpbmUJUkZfQ0hOTEJXCQkJCTB4MTgKKyNkZWZpbmUJUkZfVE9QCQkJCQkweDE5CisjZGVmaW5lCVJGX1JYX0cxCQkJCTB4MUEKKyNkZWZpbmUJUkZfUlhfRzIJCQkJMHgxQgorI2RlZmluZQlSRl9SWF9CQjIJCQkJMHgxQworI2RlZmluZQlSRl9SWF9CQjEJCQkJMHgxRAorI2RlZmluZQlSRl9SQ0sxCQkJCQkweDFFCisjZGVmaW5lCVJGX1JDSzIJCQkJCTB4MUYKKworI2RlZmluZQlSRl9UWF9HMQkJCQkweDIwCisjZGVmaW5lCVJGX1RYX0cyCQkJCTB4MjEKKyNkZWZpbmUJUkZfVFhfRzMJCQkJMHgyMgorI2RlZmluZQlSRl9UWF9CQjEJCQkJMHgyMworI2RlZmluZQlSRl9UX01FVEVSCQkJCTB4MjQKKyNkZWZpbmUJUkZfU1lOX0cxCQkJCTB4MjUKKyNkZWZpbmUJUkZfU1lOX0cyCQkJCTB4MjYKKyNkZWZpbmUJUkZfU1lOX0czCQkJCTB4MjcKKyNkZWZpbmUJUkZfU1lOX0c0CQkJCTB4MjgKKyNkZWZpbmUJUkZfU1lOX0c1CQkJCTB4MjkKKyNkZWZpbmUJUkZfU1lOX0c2CQkJCTB4MkEKKyNkZWZpbmUJUkZfU1lOX0c3CQkJCTB4MkIKKyNkZWZpbmUJUkZfU1lOX0c4CQkJCTB4MkMKKworI2RlZmluZQlSRl9SQ0tfT1MJCQkJMHgzMAorI2RlZmluZQlSRl9UWFBBX0cxCQkJCTB4MzEKKyNkZWZpbmUJUkZfVFhQQV9HMgkJCQkweDMyCisjZGVmaW5lCVJGX1RYUEFfRzMJCQkJMHgzMworCisjZGVmaW5lCUJSRk1PRAkJCQkJMHgxCisjZGVmaW5lCUJDQ0tFTgkJCQkJMHgxMDAwMDAwCisjZGVmaW5lCUJPRkRNRU4JCQkJCTB4MjAwMDAwMAorCisjZGVmaW5lCUJYQlRYQUdDCQkJCTB4ZjAwCisjZGVmaW5lCUJYQ1RYQUdDCQkJCTB4ZjAwMAorI2RlZmluZQlCWERUWEFHQwkJCQkweGYwMDAwCisKKyNkZWZpbmUJQjNXSVJFX0RBVEFMRU5HVEgJCQkweDgwMAorI2RlZmluZQlCM1dJUkVfQUREUkVTU0xFTkdUSAkJCTB4NDAwCisKKyNkZWZpbmUJQlJGU0lfUkZFTlYJCQkJMHgxMAorCisjZGVmaW5lCUJMU1NJX1JFQURBRERSRVNTCQkJMHg3ZjgwMDAwMAorI2RlZmluZQlCTFNTSV9SRUFERURHRQkJCQkweDgwMDAwMDAwCisjZGVmaW5lCUJMU1NJX1JFQURCQUNLX0RBVEEJCQkweGZmZmZmCisKKyNkZWZpbmUJQkFEQ0xLUEhBU0UJCQkJMHg0MDAwMDAwCisKKyNkZWZpbmUJQkNDS19TSURFQkFORAkJCQkweDEwCisKKyNkZWZpbmUJQlRYX0FHQ1JBVEVDQ0sJCQkJMHg3ZjAwCisKKyNkZWZpbmUJTUFTS0JZVEUwCQkJCTB4ZmYKKyNkZWZpbmUJTUFTS0JZVEUxCQkJCTB4ZmYwMAorI2RlZmluZQlNQVNLQllURTIJCQkJMHhmZjAwMDAKKyNkZWZpbmUJTUFTS0JZVEUzCQkJCTB4ZmYwMDAwMDAKKyNkZWZpbmUJTUFTS0hXT1JECQkJCTB4ZmZmZjAwMDAKKyNkZWZpbmUJTUFTS0xXT1JECQkJCTB4MDAwMGZmZmYKKyNkZWZpbmUJTUFTS0RXT1JECQkJCTB4ZmZmZmZmZmYKKworI2RlZmluZQlNQUtTMTJCSVRTCQkJCTB4ZmZmZmYKKyNkZWZpbmUJTUFTSzIwQklUUwkJCQkweGZmZmZmCisjZGVmaW5lIFJGUkVHX09GRlNFVF9NQVNLCQkJMHhmZmZmZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL3JmLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9yZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkM2E0ODMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9yZi5jCkBAIC0wLDAgKzEsNTQ2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIi4uL3dpZmkuaCIKKyNpbmNsdWRlICJyZWcuaCIKKyNpbmNsdWRlICJkZWYuaCIKKyNpbmNsdWRlICJwaHkuaCIKKyNpbmNsdWRlICJyZi5oIgorI2luY2x1ZGUgImRtLmgiCisKKworc3RhdGljIHZvaWQgX3J0bDkyc19nZXRfcG93ZXJiYXNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqcF9wd3JsZXZlbCwKKwkJCQkgIHU4IGNobmwsIHUzMiAqb2ZkbWJhc2UsIHUzMiAqbWNzYmFzZSwKKwkJCQkgIHU4ICpwX2ZpbmFsX3B3cmlkeCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlzdHJ1Y3QgcnRsX2VmdXNlICpydGxlZnVzZSA9IHJ0bF9lZnVzZShydGxfcHJpdihodykpOworCXUzMiBwd3JiYXNlMCwgcHdyYmFzZTE7CisJdTggbGVnYWN5X3B3cmRpZmYgPSAwLCBodDIwX3B3cmRpZmYgPSAwOworCXU4IGksIHB3cmxldmVsWzRdOworCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKKwkJcHdybGV2ZWxbaV0gPSBwX3B3cmxldmVsW2ldOworCisJLyogV2Ugb25seSBjYXJlIGFib3V0IHRoZSBwYXRoIEEgZm9yIGxlZ2FjeS4gKi8KKwlpZiAocnRsZWZ1c2UtPmVlcHJvbV92ZXJzaW9uIDwgMikgeworCQlwd3JiYXNlMCA9IHB3cmxldmVsWzBdICsgKHJ0bGVmdXNlLT5sZWdhY3lfaHR0eHBvd2VyZGlmZiAmIDB4Zik7CisJfSBlbHNlIGlmIChydGxlZnVzZS0+ZWVwcm9tX3ZlcnNpb24gPj0gMikgeworCQlsZWdhY3lfcHdyZGlmZiA9IHJ0bGVmdXNlLT50eHB3cl9sZWdhY3lodGRpZmYKKwkJCQkJCVtSRjkwX1BBVEhfQV1bY2hubCAtIDFdOworCisJCS8qIEZvciBsZWdhY3kgT0ZETSwgdHggcHdyIGFsd2F5cyA+IEhUIE9GRE0gcHdyLgorCQkgKiBXZSBkbyBub3QgY2FyZSBQYXRoIEIKKwkJICogbGVnYWN5IE9GRE0gcHdyIGRpZmYuIE5PIEJCIHJlZ2lzdGVyCisJCSAqIHRvIG5vdGlmeSBIVy4gKi8KKwkJcHdyYmFzZTAgPSBwd3JsZXZlbFswXSArIGxlZ2FjeV9wd3JkaWZmOworCX0KKworCXB3cmJhc2UwID0gKHB3cmJhc2UwIDw8IDI0KSB8IChwd3JiYXNlMCA8PCAxNikgfCAocHdyYmFzZTAgPDwgOCkgfAorCQkgICAgcHdyYmFzZTA7CisJKm9mZG1iYXNlID0gcHdyYmFzZTA7CisKKwkvKiBNQ1MgcmF0ZXMgKi8KKwlpZiAocnRsZWZ1c2UtPmVlcHJvbV92ZXJzaW9uID49IDIpIHsKKwkJLyogQ2hlY2sgSFQyMCB0byBIVDQwIGRpZmYJKi8KKwkJaWYgKHJ0bHBoeS0+Y3VycmVudF9jaGFuX2J3ID09IEhUX0NIQU5ORUxfV0lEVEhfMjApIHsKKwkJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJCQkvKiByZi1BLCByZi1CICovCisJCQkJLyogSFQgMjA8LT40MCBwd3IgZGlmZiAqLworCQkJCWh0MjBfcHdyZGlmZiA9IHJ0bGVmdXNlLT50eHB3cl9odDIwZGlmZgorCQkJCQkJCVtpXVtjaG5sIC0gMV07CisKKwkJCQlpZiAoaHQyMF9wd3JkaWZmIDwgOCkgLyogMH4rNyAqLworCQkJCQlwd3JsZXZlbFtpXSArPSBodDIwX3B3cmRpZmY7CisJCQkJZWxzZSAvKiBpbmRleDgtMTU9LTh+LTEgKi8KKwkJCQkJcHdybGV2ZWxbaV0gLT0gKDE2IC0gaHQyMF9wd3JkaWZmKTsKKwkJCX0KKwkJfQorCX0KKworCS8qIHVzZSBpbmRleCBvZiByZi1BICovCisJcHdyYmFzZTEgPSBwd3JsZXZlbFswXTsKKwlwd3JiYXNlMSA9IChwd3JiYXNlMSA8PCAyNCkgfCAocHdyYmFzZTEgPDwgMTYpIHwgKHB3cmJhc2UxIDw8IDgpIHwKKwkJCQlwd3JiYXNlMTsKKwkqbWNzYmFzZSA9IHB3cmJhc2UxOworCisJLyogVGhlIGZvbGxvd2luZyBpcyBmb3IgQW50ZW5uYQorCSAqIGRpZmYgZnJvbSBBbnQtQiB0byBBbnQtQSAqLworCXBfZmluYWxfcHdyaWR4WzBdID0gcHdybGV2ZWxbMF07CisJcF9maW5hbF9wd3JpZHhbMV0gPSBwd3JsZXZlbFsxXTsKKworCXN3aXRjaCAocnRsZWZ1c2UtPmVlcHJvbV9yZWd1bGF0b3J5KSB7CisJY2FzZSAzOgorCQkvKiBUaGUgZm9sbG93aW5nIGlzIGZvciBjYWxjdWxhdGlvbgorCQkgKiBvZiB0aGUgcG93ZXIgZGlmZiBmb3IgQW50LUIgdG8gQW50LUEuICovCisJCWlmIChydGxwaHktPmN1cnJlbnRfY2hhbl9idyA9PSBIVF9DSEFOTkVMX1dJRFRIXzIwXzQwKSB7CisJCQlwX2ZpbmFsX3B3cmlkeFswXSArPSBydGxlZnVzZS0+cHdyZ3JvdXBfaHQ0MAorCQkJCQkJW1JGOTBfUEFUSF9BXVsKKwkJCQkJCWNobmwgLSAxXTsKKwkJCXBfZmluYWxfcHdyaWR4WzFdICs9IHJ0bGVmdXNlLT5wd3Jncm91cF9odDQwCisJCQkJCQlbUkY5MF9QQVRIX0JdWworCQkJCQkJY2hubCAtIDFdOworCQl9IGVsc2UgeworCQkJcF9maW5hbF9wd3JpZHhbMF0gKz0gcnRsZWZ1c2UtPnB3cmdyb3VwX2h0MjAKKwkJCQkJCVtSRjkwX1BBVEhfQV1bCisJCQkJCQljaG5sIC0gMV07CisJCQlwX2ZpbmFsX3B3cmlkeFsxXSArPSBydGxlZnVzZS0+cHdyZ3JvdXBfaHQyMAorCQkJCQkJW1JGOTBfUEFUSF9CXVsKKwkJCQkJCWNobmwgLSAxXTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAocnRscGh5LT5jdXJyZW50X2NoYW5fYncgPT0gSFRfQ0hBTk5FTF9XSURUSF8yMF80MCkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfTE9VRCwgKCI0ME1IeiBmaW5hbHB3cl9pZHggIgorCQkJIihBIC8gQikgPSAweCV4IC8gMHgleFxuIiwgcF9maW5hbF9wd3JpZHhbMF0sCisJCQlwX2ZpbmFsX3B3cmlkeFsxXSkpOworCX0gZWxzZSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19MT1VELCAoIjIwTUh6IGZpbmFscHdyX2lkeCAiCisJCQkiKEEgLyBCKSA9IDB4JXggLyAweCV4XG4iLCBwX2ZpbmFsX3B3cmlkeFswXSwKKwkJCSBwX2ZpbmFsX3B3cmlkeFsxXSkpOworCX0KK30KKworc3RhdGljIHZvaWQgX3J0bDkyc19zZXRfYW50ZW5uYWRpZmYoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgIHU4ICpwX2ZpbmFsX3B3cmlkeCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCWNoYXIgYW50X3B3cl9kaWZmID0gMDsKKwl1MzIJdTRyZWdfdmFsID0gMDsKKworCWlmIChydGxwaHktPnJmX3R5cGUgPT0gUkZfMlQyUikgeworCQlhbnRfcHdyX2RpZmYgPSBwX2ZpbmFsX3B3cmlkeFsxXSAtIHBfZmluYWxfcHdyaWR4WzBdOworCisJCS8qIHJhbmdlIGlzIGZyb20gN34tOCwKKwkJICogaW5kZXggPSAweDB+MHhmICovCisJCWlmIChhbnRfcHdyX2RpZmYgPiA3KQorCQkJYW50X3B3cl9kaWZmID0gNzsKKwkJaWYgKGFudF9wd3JfZGlmZiA8IC04KQorCQkJYW50X3B3cl9kaWZmID0gLTg7CisKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9QT1dFUiwgREJHX0xPVUQsCisJCQkgKCJBbnRlbm5hIERpZmYgZnJvbSBSRi1CICIKKwkJCSJ0byBSRi1BID0gJWQgKDB4JXgpXG4iLCBhbnRfcHdyX2RpZmYsCisJCQkgYW50X3B3cl9kaWZmICYgMHhmKSk7CisKKwkJYW50X3B3cl9kaWZmICY9IDB4ZjsKKwl9CisKKwkvKiBBbnRlbm5hIFRYIHBvd2VyIGRpZmZlcmVuY2UgKi8KKwlydGxlZnVzZS0+YW50ZW5uYV90eHB3ZGlmZlsyXSA9IDA7LyogUkYtRCwgZG9uJ3QgY2FyZSAqLworCXJ0bGVmdXNlLT5hbnRlbm5hX3R4cHdkaWZmWzFdID0gMDsvKiBSRi1DLCBkb24ndCBjYXJlICovCisJcnRsZWZ1c2UtPmFudGVubmFfdHhwd2RpZmZbMF0gPSAodTgpKGFudF9wd3JfZGlmZik7CS8qIFJGLUIgKi8KKworCXU0cmVnX3ZhbCA9IHJ0bGVmdXNlLT5hbnRlbm5hX3R4cHdkaWZmWzJdIDw8IDggfAorCQkJCXJ0bGVmdXNlLT5hbnRlbm5hX3R4cHdkaWZmWzFdIDw8IDQgfAorCQkJCXJ0bGVmdXNlLT5hbnRlbm5hX3R4cHdkaWZmWzBdOworCisJcnRsX3NldF9iYnJlZyhodywgUkZQR0EwX1RYR0FJTlNUQUdFLCAoQlhCVFhBR0MgfCBCWENUWEFHQyB8IEJYRFRYQUdDKSwKKwkJICAgICAgdTRyZWdfdmFsKTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19MT1VELAorCQkgKCJXcml0ZSBCQ0QtRGlmZigweCV4KSA9IDB4JXhcbiIsCisJCSBSRlBHQTBfVFhHQUlOU1RBR0UsIHU0cmVnX3ZhbCkpOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJzX2dldF90eHBvd2VyX3dyaXRldmFsX2J5cmVndWxhdG9yeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJCSAgICAgIHU4IGNobmwsIHU4IGluZGV4LAorCQkJCQkJICAgICAgdTMyIHB3cmJhc2UwLAorCQkJCQkJICAgICAgdTMyIHB3cmJhc2UxLAorCQkJCQkJICAgICAgdTMyICpwX291dHdyaXRlX3ZhbCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlzdHJ1Y3QgcnRsX2VmdXNlICpydGxlZnVzZSA9IHJ0bF9lZnVzZShydGxfcHJpdihodykpOworCXU4IGksIGNobmxncm91cCwgcHdyZGlmZl9saW1pdFs0XTsKKwl1MzIgd3JpdGV2YWwsIGN1c3RvbWVyX2xpbWl0OworCisJLyogSW5kZXggMCAmIDE9IGxlZ2FjeSBPRkRNLCAyLTU9SFRfTUNTIHJhdGUgKi8KKwlzd2l0Y2ggKHJ0bGVmdXNlLT5lZXByb21fcmVndWxhdG9yeSkgeworCWNhc2UgMDoKKwkJLyogUmVhbHRlayBiZXR0ZXIgcGVyZm9ybWFuY2UgaW5jcmVhc2UgcG93ZXIgZGlmZgorCQkgKiBkZWZpbmVkIGJ5IFJlYWx0ZWsgZm9yIGxhcmdlIHBvd2VyICovCisJCWNobmxncm91cCA9IDA7CisKKwkJd3JpdGV2YWwgPSBydGxwaHktPm1jc190eHB3cmxldmVsX29yaWdvZmZzZXQKKwkJCQlbY2hubGdyb3VwXVtpbmRleF0gKworCQkJCSgoaW5kZXggPCAyKSA/IHB3cmJhc2UwIDogcHdyYmFzZTEpOworCisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19MT1VELAorCQkJICgiUlRLIGJldHRlciBwZXJmb3JtYW5jZSwgIgorCQkJICJ3cml0ZXZhbCA9IDB4JXhcbiIsIHdyaXRldmFsKSk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJLyogUmVhbHRlayByZWd1bGF0b3J5IGluY3JlYXNlIHBvd2VyIGRpZmYgZGVmaW5lZAorCQkgKiBieSBSZWFsdGVrIGZvciByZWd1bGF0b3J5ICovCisJCWlmIChydGxwaHktPmN1cnJlbnRfY2hhbl9idyA9PSBIVF9DSEFOTkVMX1dJRFRIXzIwXzQwKSB7CisJCQl3cml0ZXZhbCA9ICgoaW5kZXggPCAyKSA/IHB3cmJhc2UwIDogcHdyYmFzZTEpOworCisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfTE9VRCwKKwkJCQkgKCJSZWFsdGVrIHJlZ3VsYXRvcnksICIKKwkJCQkgIjQwTUh6LCB3cml0ZXZhbCA9IDB4JXhcbiIsIHdyaXRldmFsKSk7CisJCX0gZWxzZSB7CisJCQlpZiAocnRscGh5LT5wd3Jncm91cF9jbnQgPT0gMSkKKwkJCQljaG5sZ3JvdXAgPSAwOworCisJCQlpZiAocnRscGh5LT5wd3Jncm91cF9jbnQgPj0gMykgeworCQkJCWlmIChjaG5sIDw9IDMpCisJCQkJCWNobmxncm91cCA9IDA7CisJCQkJZWxzZSBpZiAoY2hubCA+PSA0ICYmIGNobmwgPD0gOCkKKwkJCQkJY2hubGdyb3VwID0gMTsKKwkJCQllbHNlIGlmIChjaG5sID4gOCkKKwkJCQkJY2hubGdyb3VwID0gMjsKKwkJCQlpZiAocnRscGh5LT5wd3Jncm91cF9jbnQgPT0gNCkKKwkJCQkJY2hubGdyb3VwKys7CisJCQl9CisKKwkJCXdyaXRldmFsID0gcnRscGh5LT5tY3NfdHhwd3JsZXZlbF9vcmlnb2Zmc2V0CisJCQkJCVtjaG5sZ3JvdXBdW2luZGV4XQorCQkJCQkrICgoaW5kZXggPCAyKSA/CisJCQkJCXB3cmJhc2UwIDogcHdyYmFzZTEpOworCisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfTE9VRCwKKwkJCQkgKCJSZWFsdGVrIHJlZ3VsYXRvcnksICIKKwkJCQkgIjIwTUh6LCB3cml0ZXZhbCA9IDB4JXhcbiIsIHdyaXRldmFsKSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAyOgorCQkvKiBCZXR0ZXIgcmVndWxhdG9yeSBkb24ndCBpbmNyZWFzZSBhbnkgcG93ZXIgZGlmZiAqLworCQl3cml0ZXZhbCA9ICgoaW5kZXggPCAyKSA/IHB3cmJhc2UwIDogcHdyYmFzZTEpOworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfTE9VRCwKKwkJCSAoIkJldHRlciByZWd1bGF0b3J5LCAiCisJCQkgIndyaXRldmFsID0gMHgleFxuIiwgd3JpdGV2YWwpKTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQkvKiBDdXN0b21lciBkZWZpbmVkIHBvd2VyIGRpZmYuIGluY3JlYXNlIHBvd2VyIGRpZmYKKwkJICBkZWZpbmVkIGJ5IGN1c3RvbWVyLiAqLworCQljaG5sZ3JvdXAgPSAwOworCisJCWlmIChydGxwaHktPmN1cnJlbnRfY2hhbl9idyA9PSBIVF9DSEFOTkVMX1dJRFRIXzIwXzQwKSB7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfTE9VRCwKKwkJCQkoImN1c3RvbWVyJ3MgbGltaXQsIDQwTUh6ID0gMHgleFxuIiwKKwkJCQlydGxlZnVzZS0+cHdyZ3JvdXBfaHQ0MAorCQkJCVtSRjkwX1BBVEhfQV1bY2hubCAtIDFdKSk7CisJCX0gZWxzZSB7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfTE9VRCwKKwkJCQkoImN1c3RvbWVyJ3MgbGltaXQsIDIwTUh6ID0gMHgleFxuIiwKKwkJCQlydGxlZnVzZS0+cHdyZ3JvdXBfaHQyMAorCQkJCVtSRjkwX1BBVEhfQV1bY2hubCAtIDFdKSk7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQlwd3JkaWZmX2xpbWl0W2ldID0KKwkJCQkodTgpKChydGxwaHktPm1jc190eHB3cmxldmVsX29yaWdvZmZzZXQKKwkJCQlbY2hubGdyb3VwXVtpbmRleF0gJiAoMHg3ZiA8PCAoaSAqIDgpKSkKKwkJCQk+PiAoaSAqIDgpKTsKKworCQkJaWYgKHJ0bHBoeS0+Y3VycmVudF9jaGFuX2J3ID09CisJCQkgICAgSFRfQ0hBTk5FTF9XSURUSF8yMF80MCkgeworCQkJCWlmIChwd3JkaWZmX2xpbWl0W2ldID4KKwkJCQkgICAgcnRsZWZ1c2UtPnB3cmdyb3VwX2h0NDAKKwkJCQkgICAgW1JGOTBfUEFUSF9BXVtjaG5sIC0gMV0pIHsKKwkJCQkJcHdyZGlmZl9saW1pdFtpXSA9CisJCQkJCSAgcnRsZWZ1c2UtPnB3cmdyb3VwX2h0MjAKKwkJCQkJICBbUkY5MF9QQVRIX0FdW2NobmwgLSAxXTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmIChwd3JkaWZmX2xpbWl0W2ldID4KKwkJCQkgICAgcnRsZWZ1c2UtPnB3cmdyb3VwX2h0MjAKKwkJCQkgICAgW1JGOTBfUEFUSF9BXVtjaG5sIC0gMV0pIHsKKwkJCQkJcHdyZGlmZl9saW1pdFtpXSA9CisJCQkJCSAgICBydGxlZnVzZS0+cHdyZ3JvdXBfaHQyMAorCQkJCQkgICAgW1JGOTBfUEFUSF9BXVtjaG5sIC0gMV07CisJCQkJfQorCQkJfQorCQl9CisKKwkJY3VzdG9tZXJfbGltaXQgPSAocHdyZGlmZl9saW1pdFszXSA8PCAyNCkgfAorCQkJCShwd3JkaWZmX2xpbWl0WzJdIDw8IDE2KSB8CisJCQkJKHB3cmRpZmZfbGltaXRbMV0gPDwgOCkgfAorCQkJCShwd3JkaWZmX2xpbWl0WzBdKTsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9QT1dFUiwgREJHX0xPVUQsCisJCQkgKCJDdXN0b21lcidzIGxpbWl0ID0gMHgleFxuIiwKKwkJCSBjdXN0b21lcl9saW1pdCkpOworCisJCXdyaXRldmFsID0gY3VzdG9tZXJfbGltaXQgKyAoKGluZGV4IDwgMikgPworCQkJCQkgICAgIHB3cmJhc2UwIDogcHdyYmFzZTEpOworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfTE9VRCwKKwkJCSAoIkN1c3RvbWVyLCB3cml0ZXZhbCA9ICIKKwkJCSAiMHgleFxuIiwgd3JpdGV2YWwpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY2hubGdyb3VwID0gMDsKKwkJd3JpdGV2YWwgPSBydGxwaHktPm1jc190eHB3cmxldmVsX29yaWdvZmZzZXRbY2hubGdyb3VwXVtpbmRleF0gKworCQkJCSgoaW5kZXggPCAyKSA/IHB3cmJhc2UwIDogcHdyYmFzZTEpOworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfTE9VRCwKKwkJCSAoIlJUSyBiZXR0ZXIgcGVyZm9ybWFuY2UsICIKKwkJCSAid3JpdGV2YWwgPSAweCV4XG4iLCB3cml0ZXZhbCkpOworCQlicmVhazsKKwl9CisKKwlpZiAocnRscHJpdi0+ZG0uZHluYW1pY190eGhpZ2hwb3dlcl9sdmwgPT0gVFhfSElHSF9QV1JfTEVWRUxfTEVWRUwxKQorCQl3cml0ZXZhbCA9IDB4MTAxMDEwMTA7CisJZWxzZSBpZiAocnRscHJpdi0+ZG0uZHluYW1pY190eGhpZ2hwb3dlcl9sdmwgPT0KKwkJIFRYX0hJR0hfUFdSX0xFVkVMX0xFVkVMMikKKwkJd3JpdGV2YWwgPSAweDA7CisKKwkqcF9vdXR3cml0ZV92YWwgPSB3cml0ZXZhbDsKKworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJzX3dyaXRlX29mZG1fcG93ZXJyZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCXU4IGluZGV4LCB1MzIgdmFsKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisJdTE2IHJlZ29mZnNldFs2XSA9IHsweGUwMCwgMHhlMDQsIDB4ZTEwLCAweGUxNCwgMHhlMTgsIDB4ZTFjfTsKKwl1OCBpLCByZmFfcHdyWzRdOworCXU4IHJmYV9sb3dlcl9ib3VuZCA9IDAsIHJmYV91cHBlcl9ib3VuZCA9IDAsIHJmX3B3cl9kaWZmID0gMDsKKwl1MzIgd3JpdGV2YWwgPSB2YWw7CisKKwkvKiBJZiBwYXRoIEEgYW5kIFBhdGggQiBjb2V4aXN0LCB3ZSBtdXN0IGxpbWl0IFBhdGggQSB0eCBwb3dlci4KKwkgKiBQcm90ZWN0IFBhdGggQiBwd3Igb3ZlciBvciB1bmRlciBmbG93LiBXZSBuZWVkIHRvIGNhbGN1bGF0ZQorCSAqIHVwcGVyIGFuZCBsb3dlciBib3VuZCBvZiBwYXRoIEEgdHggcG93ZXIuICovCisJaWYgKHJ0bHBoeS0+cmZfdHlwZSA9PSBSRl8yVDJSKSB7CisJCXJmX3B3cl9kaWZmID0gcnRsZWZ1c2UtPmFudGVubmFfdHhwd2RpZmZbMF07CisKKwkJLyogRGlmZj0tOH4tMSAqLworCQlpZiAocmZfcHdyX2RpZmYgPj0gOCkgeworCQkJLyogUHJldmVudCB1bmRlcmZsb3chISAqLworCQkJcmZhX2xvd2VyX2JvdW5kID0gMHgxMCAtIHJmX3B3cl9kaWZmOworCQkvKiBpZiAocmZfcHdyX2RpZmYgPj0gMCkgRGlmZiA9IDAtNyAqLworCQl9IGVsc2UgeworCQkJcmZhX3VwcGVyX2JvdW5kID0gUkY2MDUyX01BWF9UWF9QV1IgLSByZl9wd3JfZGlmZjsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJcmZhX3B3cltpXSA9ICh1OCkoKHdyaXRldmFsICYgKDB4N2YgPDwgKGkgKiA4KSkpID4+IChpICogOCkpOworCQlpZiAocmZhX3B3cltpXSAgPiBSRjYwNTJfTUFYX1RYX1BXUikKKwkJCXJmYV9wd3JbaV0gID0gUkY2MDUyX01BWF9UWF9QV1I7CisKKwkJLyogSWYgcGF0aCBBIGFuZCBQYXRoIEIgY29leGlzdCwgd2UgbXVzdCBsaW1pdCBQYXRoIEEgdHggcG93ZXIuCisJCSAqIFByb3RlY3QgUGF0aCBCIHB3ciBvdmVyIG9yIHVuZGVyIGZsb3cuIFdlIG5lZWQgdG8gY2FsY3VsYXRlCisJCSAqIHVwcGVyIGFuZCBsb3dlciBib3VuZCBvZiBwYXRoIEEgdHggcG93ZXIuICovCisJCWlmIChydGxwaHktPnJmX3R5cGUgPT0gUkZfMlQyUikgeworCQkJLyogRGlmZj0tOH4tMSAqLworCQkJaWYgKHJmX3B3cl9kaWZmID49IDgpIHsKKwkJCQkvKiBQcmV2ZW50IHVuZGVyZmxvdyEhICovCisJCQkJaWYgKHJmYV9wd3JbaV0gPCByZmFfbG93ZXJfYm91bmQpCisJCQkJCXJmYV9wd3JbaV0gPSByZmFfbG93ZXJfYm91bmQ7CisJCQkvKiBEaWZmID0gMC03ICovCisJCQl9IGVsc2UgaWYgKHJmX3B3cl9kaWZmID49IDEpIHsKKwkJCQkvKiBQcmV2ZW50IG92ZXJmbG93ICovCisJCQkJaWYgKHJmYV9wd3JbaV0gPiByZmFfdXBwZXJfYm91bmQpCisJCQkJCXJmYV9wd3JbaV0gPSByZmFfdXBwZXJfYm91bmQ7CisJCQl9CisJCX0KKworCX0KKworCXdyaXRldmFsID0gKHJmYV9wd3JbM10gPDwgMjQpIHwgKHJmYV9wd3JbMl0gPDwgMTYpIHwgKHJmYV9wd3JbMV0gPDwgOCkgfAorCQkJCXJmYV9wd3JbMF07CisKKwlydGxfc2V0X2JicmVnKGh3LCByZWdvZmZzZXRbaW5kZXhdLCAweDdmN2Y3ZjdmLCB3cml0ZXZhbCk7Cit9CisKK3ZvaWQgcnRsOTJzX3BoeV9yZjYwNTJfc2V0X29mZG10eHBvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgICB1OCAqcF9wd3JsZXZlbCwgdTggY2hubCkKK3sKKwl1MzIgd3JpdGV2YWwsIHB3cmJhc2UwLCBwd3JiYXNlMTsKKwl1OCBpbmRleCA9IDA7CisJdTggZmluYWxwd3JfaWR4WzRdOworCisJX3J0bDkyc19nZXRfcG93ZXJiYXNlKGh3LCBwX3B3cmxldmVsLCBjaG5sLCAmcHdyYmFzZTAsICZwd3JiYXNlMSwKKwkJCSZmaW5hbHB3cl9pZHhbMF0pOworCV9ydGw5MnNfc2V0X2FudGVubmFkaWZmKGh3LCAmZmluYWxwd3JfaWR4WzBdKTsKKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IDY7IGluZGV4KyspIHsKKwkJX3J0bDkyc19nZXRfdHhwb3dlcl93cml0ZXZhbF9ieXJlZ3VsYXRvcnkoaHcsIGNobmwsIGluZGV4LAorCQkJCXB3cmJhc2UwLCBwd3JiYXNlMSwgJndyaXRldmFsKTsKKworCQlfcnRsOTJzX3dyaXRlX29mZG1fcG93ZXJyZWcoaHcsIGluZGV4LCB3cml0ZXZhbCk7CisJfQorfQorCit2b2lkIHJ0bDkyc19waHlfcmY2MDUyX3NldF9jY2t0eHBvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBwd3JsZXZlbCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX2VmdXNlICpydGxlZnVzZSA9IHJ0bF9lZnVzZShydGxfcHJpdihodykpOworCXUzMiB0eGFnYyA9IDA7CisJYm9vbCBkb250X2luY19jY2tfb3JfdHVyYm9zY2Fub2ZmID0gZmFsc2U7CisKKwlpZiAoKChydGxlZnVzZS0+ZWVwcm9tX3ZlcnNpb24gPj0gMikgJiYKKwkgICAgICAocnRsZWZ1c2UtPnR4cHdyX3NhZmV0eWZsYWcgPT0gMSkpIHx8CisJICAgICAgKChydGxlZnVzZS0+ZWVwcm9tX3ZlcnNpb24gPj0gMikgJiYKKwkgICAgICAocnRsZWZ1c2UtPmVlcHJvbV9yZWd1bGF0b3J5ICE9IDApKSkKKwkJZG9udF9pbmNfY2NrX29yX3R1cmJvc2Nhbm9mZiA9IHRydWU7CisKKwlpZiAobWFjLT5hY3Rfc2Nhbm5pbmcgPT0gdHJ1ZSkgeworCQl0eGFnYyA9IDB4M2Y7CisJCWlmIChkb250X2luY19jY2tfb3JfdHVyYm9zY2Fub2ZmKQorCQkJdHhhZ2MgPSBwd3JsZXZlbDsKKwl9IGVsc2UgeworCQl0eGFnYyA9IHB3cmxldmVsOworCisJCWlmIChydGxwcml2LT5kbS5keW5hbWljX3R4aGlnaHBvd2VyX2x2bCA9PQorCQkgICAgVFhfSElHSF9QV1JfTEVWRUxfTEVWRUwxKQorCQkJdHhhZ2MgPSAweDEwOworCQllbHNlIGlmIChydGxwcml2LT5kbS5keW5hbWljX3R4aGlnaHBvd2VyX2x2bCA9PQorCQkJVFhfSElHSF9QV1JfTEVWRUxfTEVWRUwyKQorCQkJdHhhZ2MgPSAweDA7CisJfQorCisJaWYgKHR4YWdjID4gUkY2MDUyX01BWF9UWF9QV1IpCisJCXR4YWdjID0gUkY2MDUyX01BWF9UWF9QV1I7CisKKwlydGxfc2V0X2JicmVnKGh3LCBSVFhBR0NfQ0NLX01DUzMyLCBCVFhfQUdDUkFURUNDSywgdHhhZ2MpOworCit9CisKK2Jvb2wgcnRsOTJzX3BoeV9yZjYwNTJfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCXUzMiB1NHJlZ192YWwgPSAwOworCXU4IHJmcGF0aDsKKwlib29sIHJ0c3RhdHVzID0gdHJ1ZTsKKwlzdHJ1Y3QgYmJfcmVnX2RlZiAqcHBoeXJlZzsKKworCS8qIEluaXRpYWxpemUgUkYgKi8KKwlmb3IgKHJmcGF0aCA9IDA7IHJmcGF0aCA8IHJ0bHBoeS0+bnVtX3RvdGFsX3JmcGF0aDsgcmZwYXRoKyspIHsKKworCQlwcGh5cmVnID0gJnJ0bHBoeS0+cGh5cmVnX2RlZltyZnBhdGhdOworCisJCS8qIFN0b3JlIG9yaWdpbmFsIFJGRU5WIGNvbnRyb2wgdHlwZSAqLworCQlzd2l0Y2ggKHJmcGF0aCkgeworCQljYXNlIFJGOTBfUEFUSF9BOgorCQljYXNlIFJGOTBfUEFUSF9DOgorCQkJdTRyZWdfdmFsID0gcnRsOTJzX3BoeV9xdWVyeV9iYl9yZWcoaHcsCisJCQkJCQkJICAgIHBwaHlyZWctPnJmaW50ZnMsCisJCQkJCQkJICAgIEJSRlNJX1JGRU5WKTsKKwkJCWJyZWFrOworCQljYXNlIFJGOTBfUEFUSF9COgorCQljYXNlIFJGOTBfUEFUSF9EOgorCQkJdTRyZWdfdmFsID0gcnRsOTJzX3BoeV9xdWVyeV9iYl9yZWcoaHcsCisJCQkJCQkJICAgIHBwaHlyZWctPnJmaW50ZnMsCisJCQkJCQkJICAgIEJSRlNJX1JGRU5WIDw8IDE2KTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogU2V0IFJGX0VOViBlbmFibGUgKi8KKwkJcnRsOTJzX3BoeV9zZXRfYmJfcmVnKGh3LCBwcGh5cmVnLT5yZmludGZlLAorCQkJCSAgICAgIEJSRlNJX1JGRU5WIDw8IDE2LCAweDEpOworCisJCS8qIFNldCBSRl9FTlYgb3V0cHV0IGhpZ2ggKi8KKwkJcnRsOTJzX3BoeV9zZXRfYmJfcmVnKGh3LCBwcGh5cmVnLT5yZmludGZvLCBCUkZTSV9SRkVOViwgMHgxKTsKKworCQkvKiBTZXQgYml0IG51bWJlciBvZiBBZGRyZXNzIGFuZCBEYXRhIGZvciBSRiByZWdpc3RlciAqLworCQlydGw5MnNfcGh5X3NldF9iYl9yZWcoaHcsIHBwaHlyZWctPnJmaHNzaV9wYXJhMiwKKwkJCQlCM1dJUkVfQUREUkVTU0xFTkdUSCwgMHgwKTsKKwkJcnRsOTJzX3BoeV9zZXRfYmJfcmVnKGh3LCBwcGh5cmVnLT5yZmhzc2lfcGFyYTIsCisJCQkJQjNXSVJFX0RBVEFMRU5HVEgsIDB4MCk7CisKKwkJLyogSW5pdGlhbGl6ZSBSRiBmb20gY29ubmZpZ3VyYXRpb24gZmlsZSAqLworCQlzd2l0Y2ggKHJmcGF0aCkgeworCQljYXNlIFJGOTBfUEFUSF9BOgorCQkJcnRzdGF0dXMgPSBydGw5MnNfcGh5X2NvbmZpZ19yZihodywKKwkJCQkJCShlbnVtIHJhZGlvX3BhdGgpcmZwYXRoKTsKKwkJCWJyZWFrOworCQljYXNlIFJGOTBfUEFUSF9COgorCQkJcnRzdGF0dXMgPSBydGw5MnNfcGh5X2NvbmZpZ19yZihodywKKwkJCQkJCShlbnVtIHJhZGlvX3BhdGgpcmZwYXRoKTsKKwkJCWJyZWFrOworCQljYXNlIFJGOTBfUEFUSF9DOgorCQkJYnJlYWs7CisJCWNhc2UgUkY5MF9QQVRIX0Q6CisJCQlicmVhazsKKwkJfQorCisJCS8qIFJlc3RvcmUgUkZFTlYgY29udHJvbCB0eXBlICovCisJCXN3aXRjaCAocmZwYXRoKSB7CisJCWNhc2UgUkY5MF9QQVRIX0E6CisJCWNhc2UgUkY5MF9QQVRIX0M6CisJCQlydGw5MnNfcGh5X3NldF9iYl9yZWcoaHcsIHBwaHlyZWctPnJmaW50ZnMsIEJSRlNJX1JGRU5WLAorCQkJCQkgICAgICB1NHJlZ192YWwpOworCQkJYnJlYWs7CisJCWNhc2UgUkY5MF9QQVRIX0I6CisJCWNhc2UgUkY5MF9QQVRIX0Q6CisJCQlydGw5MnNfcGh5X3NldF9iYl9yZWcoaHcsIHBwaHlyZWctPnJmaW50ZnMsCisJCQkJCSAgICAgIEJSRlNJX1JGRU5WIDw8IDE2LAorCQkJCQkgICAgICB1NHJlZ192YWwpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAocnRzdGF0dXMgIT0gdHJ1ZSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJSYWRpb1slZF0gRmFpbCEhIiwgcmZwYXRoKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCisJfQorCisJcmV0dXJuIHJ0c3RhdHVzOworCitmYWlsOgorCXJldHVybiBydHN0YXR1czsKK30KKwordm9pZCBydGw5MnNfcGh5X3JmNjA1Ml9zZXRfYmFuZHdpZHRoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBiYW5kd2lkdGgpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisKKwlzd2l0Y2ggKGJhbmR3aWR0aCkgeworCWNhc2UgSFRfQ0hBTk5FTF9XSURUSF8yMDoKKwkJcnRscGh5LT5yZnJlZ19jaG5sdmFsWzBdID0gKChydGxwaHktPnJmcmVnX2Nobmx2YWxbMF0gJgorCQkJCQkgICAweGZmZmZmM2ZmKSB8IDB4MDQwMCk7CisJCXJ0bF9zZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9BLCBSRl9DSE5MQlcsIFJGUkVHX09GRlNFVF9NQVNLLAorCQkJCQlydGxwaHktPnJmcmVnX2Nobmx2YWxbMF0pOworCQlicmVhazsKKwljYXNlIEhUX0NIQU5ORUxfV0lEVEhfMjBfNDA6CisJCXJ0bHBoeS0+cmZyZWdfY2hubHZhbFswXSA9ICgocnRscGh5LT5yZnJlZ19jaG5sdmFsWzBdICYKKwkJCQkJICAgIDB4ZmZmZmYzZmYpKTsKKwkJcnRsX3NldF9yZnJlZyhodywgUkY5MF9QQVRIX0EsIFJGX0NITkxCVywgUkZSRUdfT0ZGU0VUX01BU0ssCisJCQkJCXJ0bHBoeS0+cmZyZWdfY2hubHZhbFswXSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkgKCJ1bmtub3duIGJhbmR3aWR0aDogJSNYXG4iLAorCQkJIGJhbmR3aWR0aCkpOworCQlicmVhazsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9yZi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvcmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODQzYmFhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvcmYuaApAQCAtMCwwICsxLDQzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19JTkNfUlRMOTJTX1JGX0gKKyNkZWZpbmUgX19JTkNfUlRMOTJTX1JGX0gKKworI2RlZmluZQlSRjYwNTJfTUFYX1RYX1BXUgkweDNGCisKK3ZvaWQgcnRsOTJzX3BoeV9yZjYwNTJfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgIHU4IGJhbmR3aWR0aCk7Citib29sIHJ0bDkyc19waHlfcmY2MDUyX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykgOwordm9pZCBydGw5MnNfcGh5X3JmNjA1Ml9zZXRfY2NrdHhwb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgICB1OCBwb3dlcmxldmVsKTsKK3ZvaWQgcnRsOTJzX3BoeV9yZjYwNTJfc2V0X29mZG10eHBvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgICB1OCAqcF9wd3JsZXZlbCwgdTggY2hubCk7CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9zdy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2Uvc3cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzZjYjFkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2Uvc3cuYwpAQCAtMCwwICsxLDQyMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyNpbmNsdWRlICIuLi93aWZpLmgiCisjaW5jbHVkZSAiLi4vY29yZS5oIgorI2luY2x1ZGUgIi4uL3BjaS5oIgorI2luY2x1ZGUgInJlZy5oIgorI2luY2x1ZGUgImRlZi5oIgorI2luY2x1ZGUgInBoeS5oIgorI2luY2x1ZGUgImRtLmgiCisjaW5jbHVkZSAiZncuaCIKKyNpbmNsdWRlICJody5oIgorI2luY2x1ZGUgInN3LmgiCisjaW5jbHVkZSAidHJ4LmgiCisjaW5jbHVkZSAibGVkLmgiCisKK3N0YXRpYyB2b2lkIHJ0bDkyc19pbml0X2FzcG1fdmFycyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCisJLypjbG9zZSBBU1BNIGZvciBBTUQgZGVmYXVsdGx5ICovCisJcnRscGNpLT5jb25zdF9hbWRwY2lfYXNwbSA9IDA7CisKKwkvKgorCSAqIEFTUE0gUFMgbW9kZS4KKwkgKiAwIC0gRGlzYWJsZSBBU1BNLAorCSAqIDEgLSBFbmFibGUgQVNQTSB3aXRob3V0IENsb2NrIFJlcSwKKwkgKiAyIC0gRW5hYmxlIEFTUE0gd2l0aCBDbG9jayBSZXEsCisJICogMyAtIEFsd3lhcyBFbmFibGUgQVNQTSB3aXRoIENsb2NrIFJlcSwKKwkgKiA0IC0gQWx3YXlzIEVuYWJsZSBBU1BNIHdpdGhvdXQgQ2xvY2sgUmVxLgorCSAqIHNldCBkZWZ1bHQgdG8gUlRMODE5MkNFOjMgUlRMODE5MkU6MgorCSAqICovCisJcnRscGNpLT5jb25zdF9wY2lfYXNwbSA9IDI7CisKKwkvKlNldHRpbmcgZm9yIFBDSS1FIGRldmljZSAqLworCXJ0bHBjaS0+Y29uc3RfZGV2aWNlcGNpX2FzcG1fc2V0dGluZyA9IDB4MDM7CisKKwkvKlNldHRpbmcgZm9yIFBDSS1FIGJyaWRnZSAqLworCXJ0bHBjaS0+Y29uc3RfaG9zdHBjaV9hc3BtX3NldHRpbmcgPSAweDAyOworCisJLyoKKwkgKiBJbiBIdy9TdyBSYWRpbyBPZmYgc2l0dWF0aW9uLgorCSAqIDAgLSBEZWZhdWx0LAorCSAqIDEgLSBGcm9tIEFTUE0gc2V0dGluZyB3aXRob3V0IGxvdyBNYWMgUHdyLAorCSAqIDIgLSBGcm9tIEFTUE0gc2V0dGluZyB3aXRoIGxvdyBNYWMgUHdyLAorCSAqIDMgLSBCdXMgRDMKKwkgKiBzZXQgZGVmYXVsdCB0byBSVEw4MTkyQ0U6MCBSVEw4MTkyU0U6MgorCSAqLworCXJ0bHBjaS0+Y29uc3RfaHdzd19yZm9mZl9kMyA9IDI7CisKKwkvKgorCSAqIFRoaXMgc2V0dGluZyB3b3JrcyBmb3IgdGhvc2UgZGV2aWNlIHdpdGgKKwkgKiBiYWNrZG9vciBBU1BNIHNldHRpbmcgc3VjaCBhcyBFUEhZIHNldHRpbmcuCisJICogMCAtIE5vdCBzdXBwb3J0IEFTUE0sCisJICogMSAtIFN1cHBvcnQgQVNQTSwKKwkgKiAyIC0gQWNjb3JkaW5nIHRvIGNoaXBzZXQuCisJICovCisJcnRscGNpLT5jb25zdF9zdXBwb3J0X3BjaWFzcG0gPSAyOworfQorCitzdGF0aWMgaW50IHJ0bDkyc19pbml0X3N3X3ZhcnMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZTsKKwlzdHJ1Y3QgcnRfZmlybXdhcmUgKnBmaXJtd2FyZSA9IE5VTEw7CisJaW50IGVyciA9IDA7CisJdTE2IGVhcmx5cnh0aHJlc2hvbGQgPSA3OworCisJcnRscHJpdi0+ZG0uZG1faW5pdGlhbGdhaW5fZW5hYmxlID0gMTsKKwlydGxwcml2LT5kbS5kbV9mbGFnID0gMDsKKwlydGxwcml2LT5kbS5kaXNhYmxlX2ZyYW1lYnVyc3RpbmcgPSAwOworCXJ0bHByaXYtPmRtLnRoZXJtYWx2YWx1ZSA9IDA7CisJcnRscHJpdi0+ZG0udXNlcmFtYXNrID0gdHJ1ZTsKKworCS8qIGNvbXBhdGlibGUgNUcgYmFuZCA5MXNlIGp1c3QgMi40RyBiYW5kICYgc21zcCAqLworCXJ0bHByaXYtPnJ0bGhhbC5jdXJyZW50X2JhbmR0eXBlID0gQkFORF9PTl8yXzRHOworCXJ0bHByaXYtPnJ0bGhhbC5iYW5kc2V0ID0gQkFORF9PTl8yXzRHOworCXJ0bHByaXYtPnJ0bGhhbC5tYWNwaHltb2RlID0gU0lOR0xFTUFDX1NJTkdMRVBIWTsKKworCXJ0bHBjaS0+dHJhbnNtaXRfY29uZmlnID0gMDsKKworCXJ0bHBjaS0+cmVjZWl2ZV9jb25maWcgPQorCQkJUkNSX0FQUEZDUyB8CisJCQlSQ1JfQVBXUk1HVCB8CisJCQkvKlJDUl9BREQzIHwqLworCQkJUkNSX0FNRgl8CisJCQlSQ1JfQURGIHwKKwkJCVJDUl9BUFBfTUlDIHwKKwkJCVJDUl9BUFBfSUNWIHwKKwkJCVJDUl9BSUNWIHwKKwkJCS8qIEFjY2VwdCBJQ1YgZXJyb3IsIENSQzMyIEVycm9yICovCisJCQlSQ1JfQUNSQzMyIHwKKwkJCVJDUl9BQiB8CisJCQkvKiBBY2NlcHQgQnJvYWRjYXN0LCBNdWx0aWNhc3QgKi8KKwkJCVJDUl9BTQl8CisJCQkvKiBBY2NlcHQgUGh5c2ljYWwgbWF0Y2ggKi8KKwkJCVJDUl9BUE0gfAorCQkJLyogQWNjZXB0IERlc3RpbmF0aW9uIEFkZHJlc3MgcGFja2V0cyAqLworCQkJLypSQ1JfQUFQIHwqLworCQkJUkNSX0FQUF9QSFlTVF9TVEFGRiB8CisJCQkvKiBBY2NlcHQgUEhZIHN0YXR1cyAqLworCQkJUkNSX0FQUF9QSFlTVF9SWEZGIHwKKwkJCShlYXJseXJ4dGhyZXNob2xkIDw8IFJDUl9GSUZPX09GRlNFVCk7CisKKwlydGxwY2ktPmlycV9tYXNrWzBdID0gKHUzMikKKwkJCShJTVJfUk9LIHwKKwkJCUlNUl9WT0RPSyB8CisJCQlJTVJfVklET0sgfAorCQkJSU1SX0JFRE9LIHwKKwkJCUlNUl9CS0RPSyB8CisJCQlJTVJfSENDQURPSyB8CisJCQlJTVJfTUdOVERPSyB8CisJCQlJTVJfQ09NRE9LIHwKKwkJCUlNUl9ISUdIRE9LIHwKKwkJCUlNUl9CRE9LIHwKKwkJCUlNUl9SWENNRE9LIHwKKwkJCS8qSU1SX1RJTUVPVVQwIHwqLworCQkJSU1SX1JEVSB8CisJCQlJTVJfUlhGT1ZXCXwKKwkJCUlNUl9CQ05JTlQKKwkJCS8qfCBJTVJfVFhGT1ZXKi8KKwkJCS8qfCBJTVJfVEJET0sgfAorCQkJSU1SX1RCREVSKi8pOworCisJcnRscGNpLT5pcnFfbWFza1sxXSA9ICh1MzIpIDA7CisKKwlydGxwY2ktPnNob3J0cmV0cnlfbGltaXQgPSAweDMwOworCXJ0bHBjaS0+bG9uZ3JldHJ5X2xpbWl0ID0gMHgzMDsKKworCXJ0bHBjaS0+Zmlyc3RfaW5pdCA9IHRydWU7CisKKwkvKiBmb3IgTFBTICYgSVBTICovCisJcnRscHJpdi0+cHNjLmluYWN0aXZlcHMgPSBydGxwcml2LT5jZmctPm1vZF9wYXJhbXMtPmluYWN0aXZlcHM7CisJcnRscHJpdi0+cHNjLnN3Y3RybF9scHMgPSBydGxwcml2LT5jZmctPm1vZF9wYXJhbXMtPnN3Y3RybF9scHM7CisJcnRscHJpdi0+cHNjLmZ3Y3RybF9scHMgPSBydGxwcml2LT5jZmctPm1vZF9wYXJhbXMtPmZ3Y3RybF9scHM7CisJcnRscHJpdi0+cHNjLnJlZ19md2N0cmxfbHBzID0gMzsKKwlydGxwcml2LT5wc2MucmVnX21heF9scHNfYXdha2VpbnR2bCA9IDU7CisJLyogZm9yIEFTUE0sIHlvdSBjYW4gY2xvc2UgYXNwbSB0aHJvdWdoCisJICogc2V0IGNvbnN0X3N1cHBvcnRfcGNpYXNwbSA9IDAgKi8KKwlydGw5MnNfaW5pdF9hc3BtX3ZhcnMoaHcpOworCisJaWYgKHJ0bHByaXYtPnBzYy5yZWdfZndjdHJsX2xwcyA9PSAxKQorCQlydGxwcml2LT5wc2MuZndjdHJsX3BzbW9kZSA9IEZXX1BTX01JTl9NT0RFOworCWVsc2UgaWYgKHJ0bHByaXYtPnBzYy5yZWdfZndjdHJsX2xwcyA9PSAyKQorCQlydGxwcml2LT5wc2MuZndjdHJsX3BzbW9kZSA9IEZXX1BTX01BWF9NT0RFOworCWVsc2UgaWYgKHJ0bHByaXYtPnBzYy5yZWdfZndjdHJsX2xwcyA9PSAzKQorCQlydGxwcml2LT5wc2MuZndjdHJsX3BzbW9kZSA9IEZXX1BTX0RUSU1fTU9ERTsKKworCS8qIGZvciBmaXJtd2FyZSBidWYgKi8KKwlydGxwcml2LT5ydGxoYWwucGZpcm13YXJlID0gdnphbGxvYyhzaXplb2Yoc3RydWN0IHJ0X2Zpcm13YXJlKSk7CisJaWYgKCFydGxwcml2LT5ydGxoYWwucGZpcm13YXJlKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkgKCJDYW4ndCBhbGxvYyBidWZmZXIgZm9yIGZ3LlxuIikpOworCQlyZXR1cm4gMTsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJydGw4MTkyc2U6IERyaXZlciBmb3IgUmVhbHRlayBSVEw4MTkyU0UvUlRMODE5MVNFXG4iCisJICAgICAgICIgICAgICAgICAgIExvYWRpbmcgZmlybXdhcmUgJXNcbiIsIHJ0bHByaXYtPmNmZy0+ZndfbmFtZSk7CisJLyogcmVxdWVzdCBmdyAqLworCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmZpcm13YXJlLCBydGxwcml2LT5jZmctPmZ3X25hbWUsCisJCQlydGxwcml2LT5pby5kZXYpOworCWlmIChlcnIpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoIkZhaWxlZCB0byByZXF1ZXN0IGZpcm13YXJlIVxuIikpOworCQlyZXR1cm4gMTsKKwl9CisJaWYgKGZpcm13YXJlLT5zaXplID4gc2l6ZW9mKHN0cnVjdCBydF9maXJtd2FyZSkpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoIkZpcm13YXJlIGlzIHRvbyBiaWchXG4iKSk7CisJCXJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpOworCQlyZXR1cm4gMTsKKwl9CisKKwlwZmlybXdhcmUgPSAoc3RydWN0IHJ0X2Zpcm13YXJlICopcnRscHJpdi0+cnRsaGFsLnBmaXJtd2FyZTsKKwltZW1jcHkocGZpcm13YXJlLT5zel9md190bXBidWZmZXIsIGZpcm13YXJlLT5kYXRhLCBmaXJtd2FyZS0+c2l6ZSk7CisJcGZpcm13YXJlLT5zel9md190bXBidWZmZXJsZW4gPSBmaXJtd2FyZS0+c2l6ZTsKKwlyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDkyc19kZWluaXRfc3dfdmFycyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwlpZiAocnRscHJpdi0+cnRsaGFsLnBmaXJtd2FyZSkgeworCQl2ZnJlZShydGxwcml2LT5ydGxoYWwucGZpcm13YXJlKTsKKwkJcnRscHJpdi0+cnRsaGFsLnBmaXJtd2FyZSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHJ0bF9oYWxfb3BzIHJ0bDgxOTJzZV9oYWxfb3BzID0geworCS5pbml0X3N3X3ZhcnMgPSBydGw5MnNfaW5pdF9zd192YXJzLAorCS5kZWluaXRfc3dfdmFycyA9IHJ0bDkyc19kZWluaXRfc3dfdmFycywKKwkucmVhZF9lZXByb21faW5mbyA9IHJ0bDkyc2VfcmVhZF9lZXByb21faW5mbywKKwkuaW50ZXJydXB0X3JlY29nbml6ZWQgPSBydGw5MnNlX2ludGVycnVwdF9yZWNvZ25pemVkLAorCS5od19pbml0ID0gcnRsOTJzZV9od19pbml0LAorCS5od19kaXNhYmxlID0gcnRsOTJzZV9jYXJkX2Rpc2FibGUsCisJLmh3X3N1c3BlbmQgPSBydGw5MnNlX3N1c3BlbmQsCisJLmh3X3Jlc3VtZSA9IHJ0bDkyc2VfcmVzdW1lLAorCS5lbmFibGVfaW50ZXJydXB0ID0gcnRsOTJzZV9lbmFibGVfaW50ZXJydXB0LAorCS5kaXNhYmxlX2ludGVycnVwdCA9IHJ0bDkyc2VfZGlzYWJsZV9pbnRlcnJ1cHQsCisJLnNldF9uZXR3b3JrX3R5cGUgPSBydGw5MnNlX3NldF9uZXR3b3JrX3R5cGUsCisJLnNldF9jaGtfYnNzaWQgPSBydGw5MnNlX3NldF9jaGVja19ic3NpZCwKKwkuc2V0X3FvcyA9IHJ0bDkyc2Vfc2V0X3FvcywKKwkuc2V0X2Jjbl9yZWcgPSBydGw5MnNlX3NldF9iZWFjb25fcmVsYXRlZF9yZWdpc3RlcnMsCisJLnNldF9iY25faW50diA9IHJ0bDkyc2Vfc2V0X2JlYWNvbl9pbnRlcnZhbCwKKwkudXBkYXRlX2ludGVycnVwdF9tYXNrID0gcnRsOTJzZV91cGRhdGVfaW50ZXJydXB0X21hc2ssCisJLmdldF9od19yZWcgPSBydGw5MnNlX2dldF9od19yZWcsCisJLnNldF9od19yZWcgPSBydGw5MnNlX3NldF9od19yZWcsCisJLnVwZGF0ZV9yYXRlX3RibCA9IHJ0bDkyc2VfdXBkYXRlX2hhbF9yYXRlX3RibCwKKwkuZmlsbF90eF9kZXNjID0gcnRsOTJzZV90eF9maWxsX2Rlc2MsCisJLmZpbGxfdHhfY21kZGVzYyA9IHJ0bDkyc2VfdHhfZmlsbF9jbWRkZXNjLAorCS5xdWVyeV9yeF9kZXNjID0gcnRsOTJzZV9yeF9xdWVyeV9kZXNjLAorCS5zZXRfY2hhbm5lbF9hY2Nlc3MgPSBydGw5MnNlX3VwZGF0ZV9jaGFubmVsX2FjY2Vzc19zZXR0aW5nLAorCS5yYWRpb19vbm9mZl9jaGVja2luZyA9IHJ0bDkyc2VfZ3Bpb19yYWRpb19vbl9vZmZfY2hlY2tpbmcsCisJLnNldF9id19tb2RlID0gcnRsOTJzX3BoeV9zZXRfYndfbW9kZSwKKwkuc3dpdGNoX2NoYW5uZWwgPSBydGw5MnNfcGh5X3N3X2NobmwsCisJLmRtX3dhdGNoZG9nID0gcnRsOTJzX2RtX3dhdGNoZG9nLAorCS5zY2FuX29wZXJhdGlvbl9iYWNrdXAgPSBydGw5MnNfcGh5X3NjYW5fb3BlcmF0aW9uX2JhY2t1cCwKKwkuc2V0X3JmX3Bvd2VyX3N0YXRlID0gcnRsOTJzX3BoeV9zZXRfcmZfcG93ZXJfc3RhdGUsCisJLmxlZF9jb250cm9sID0gcnRsOTJzZV9sZWRfY29udHJvbCwKKwkuc2V0X2Rlc2MgPSBydGw5MnNlX3NldF9kZXNjLAorCS5nZXRfZGVzYyA9IHJ0bDkyc2VfZ2V0X2Rlc2MsCisJLnR4X3BvbGxpbmcgPSBydGw5MnNlX3R4X3BvbGxpbmcsCisJLmVuYWJsZV9od19zZWMgPSBydGw5MnNlX2VuYWJsZV9od19zZWN1cml0eV9jb25maWcsCisJLnNldF9rZXkgPSBydGw5MnNlX3NldF9rZXksCisJLmluaXRfc3dfbGVkcyA9IHJ0bDkyc2VfaW5pdF9zd19sZWRzLAorCS5nZXRfYmJyZWcgPSBydGw5MnNfcGh5X3F1ZXJ5X2JiX3JlZywKKwkuc2V0X2JicmVnID0gcnRsOTJzX3BoeV9zZXRfYmJfcmVnLAorCS5nZXRfcmZyZWcgPSBydGw5MnNfcGh5X3F1ZXJ5X3JmX3JlZywKKwkuc2V0X3JmcmVnID0gcnRsOTJzX3BoeV9zZXRfcmZfcmVnLAorfTsKKworc3RhdGljIHN0cnVjdCBydGxfbW9kX3BhcmFtcyBydGw5MnNlX21vZF9wYXJhbXMgPSB7CisJLnN3X2NyeXB0byA9IGZhbHNlLAorCS5pbmFjdGl2ZXBzID0gdHJ1ZSwKKwkuc3djdHJsX2xwcyA9IHRydWUsCisJLmZ3Y3RybF9scHMgPSBmYWxzZSwKK307CisKKy8qIEJlY2F1c2UgbWVtb3J5IFIvVyBidXJzdGluZyB3aWxsIGNhdXNlIHN5c3RlbSBoYW5nL2NyYXNoCisgKiBmb3IgOTJzZSwgc28gd2UgZG9uJ3QgcmVhZCBiYWNrIGFmdGVyIGV2ZXJ5IHdyaXRlIGFjdGlvbiAqLworc3RhdGljIHN0cnVjdCBydGxfaGFsX2NmZyBydGw5MnNlX2hhbF9jZmcgPSB7CisJLmJhcl9pZCA9IDEsCisJLndyaXRlX3JlYWRiYWNrID0gZmFsc2UsCisJLm5hbWUgPSAicnRsOTJzX3BjaSIsCisJLmZ3X25hbWUgPSAicnRsd2lmaS9ydGw4MTkyc2Vmdy5iaW4iLAorCS5vcHMgPSAmcnRsODE5MnNlX2hhbF9vcHMsCisJLm1vZF9wYXJhbXMgPSAmcnRsOTJzZV9tb2RfcGFyYW1zLAorCisJLm1hcHNbU1lTX0lTT19DVFJMXSA9IFJFR19TWVNfSVNPX0NUUkwsCisJLm1hcHNbU1lTX0ZVTkNfRU5dID0gUkVHX1NZU19GVU5DX0VOLAorCS5tYXBzW1NZU19DTEtdID0gU1lTX0NMS1IsCisJLm1hcHNbTUFDX1JDUl9BTV0gPSBSQ1JfQU0sCisJLm1hcHNbTUFDX1JDUl9BQl0gPSBSQ1JfQUIsCisJLm1hcHNbTUFDX1JDUl9BQ1JDMzJdID0gUkNSX0FDUkMzMiwKKwkubWFwc1tNQUNfUkNSX0FDRl0gPSBSQ1JfQUNGLAorCS5tYXBzW01BQ19SQ1JfQUFQXSA9IFJDUl9BQVAsCisKKwkubWFwc1tFRlVTRV9URVNUXSA9IFJFR19FRlVTRV9URVNULAorCS5tYXBzW0VGVVNFX0NUUkxdID0gUkVHX0VGVVNFX0NUUkwsCisJLm1hcHNbRUZVU0VfQ0xLXSA9IFJFR19FRlVTRV9DTEssCisJLm1hcHNbRUZVU0VfQ0xLX0NUUkxdID0gUkVHX0VGVVNFX0NUUkwsCisJLm1hcHNbRUZVU0VfUFdDX0VWMTJWXSA9IDAsIC8qIG5vdXNlIGZvciA4MTkyc2UgKi8KKwkubWFwc1tFRlVTRV9GRU5fRUxEUl0gPSAwLCAvKiBub3VzZSBmb3IgODE5MnNlICovCisJLm1hcHNbRUZVU0VfTE9BREVSX0NMS19FTl0gPSAwLC8qIG5vdXNlIGZvciA4MTkyc2UgKi8KKwkubWFwc1tFRlVTRV9BTkE4TV0gPSBFRlVTRV9BTkE4TSwKKwkubWFwc1tFRlVTRV9IV1NFVF9NQVhfU0laRV0gPSBIV1NFVF9NQVhfU0laRV85MlMsCisJLm1hcHNbRUZVU0VfTUFYX1NFQ1RJT05fTUFQXSA9IEVGVVNFX01BWF9TRUNUSU9OLAorCS5tYXBzW0VGVVNFX1JFQUxfQ09OVEVOVF9TSVpFXSA9IEVGVVNFX1JFQUxfQ09OVEVOVF9MRU4sCisKKwkubWFwc1tSV0NBTV0gPSBSRUdfUldDQU0sCisJLm1hcHNbV0NBTUldID0gUkVHX1dDQU1JLAorCS5tYXBzW1JDQU1PXSA9IFJFR19SQ0FNTywKKwkubWFwc1tDQU1EQkddID0gUkVHX0NBTURCRywKKwkubWFwc1tTRUNSXSA9IFJFR19TRUNSLAorCS5tYXBzW1NFQ19DQU1fTk9ORV0gPSBDQU1fTk9ORSwKKwkubWFwc1tTRUNfQ0FNX1dFUDQwXSA9IENBTV9XRVA0MCwKKwkubWFwc1tTRUNfQ0FNX1RLSVBdID0gQ0FNX1RLSVAsCisJLm1hcHNbU0VDX0NBTV9BRVNdID0gQ0FNX0FFUywKKwkubWFwc1tTRUNfQ0FNX1dFUDEwNF0gPSBDQU1fV0VQMTA0LAorCisJLm1hcHNbUlRMX0lNUl9CQ05ETUFJTlQ2XSA9IElNUl9CQ05ETUFJTlQ2LAorCS5tYXBzW1JUTF9JTVJfQkNORE1BSU5UNV0gPSBJTVJfQkNORE1BSU5UNSwKKwkubWFwc1tSVExfSU1SX0JDTkRNQUlOVDRdID0gSU1SX0JDTkRNQUlOVDQsCisJLm1hcHNbUlRMX0lNUl9CQ05ETUFJTlQzXSA9IElNUl9CQ05ETUFJTlQzLAorCS5tYXBzW1JUTF9JTVJfQkNORE1BSU5UMl0gPSBJTVJfQkNORE1BSU5UMiwKKwkubWFwc1tSVExfSU1SX0JDTkRNQUlOVDFdID0gSU1SX0JDTkRNQUlOVDEsCisJLm1hcHNbUlRMX0lNUl9CQ05ET0s4XSA9IElNUl9CQ05ET0s4LAorCS5tYXBzW1JUTF9JTVJfQkNORE9LN10gPSBJTVJfQkNORE9LNywKKwkubWFwc1tSVExfSU1SX0JDTkRPSzZdID0gSU1SX0JDTkRPSzYsCisJLm1hcHNbUlRMX0lNUl9CQ05ET0s1XSA9IElNUl9CQ05ET0s1LAorCS5tYXBzW1JUTF9JTVJfQkNORE9LNF0gPSBJTVJfQkNORE9LNCwKKwkubWFwc1tSVExfSU1SX0JDTkRPSzNdID0gSU1SX0JDTkRPSzMsCisJLm1hcHNbUlRMX0lNUl9CQ05ET0syXSA9IElNUl9CQ05ET0syLAorCS5tYXBzW1JUTF9JTVJfQkNORE9LMV0gPSBJTVJfQkNORE9LMSwKKwkubWFwc1tSVExfSU1SX1RJTUVPVVQyXSA9IElNUl9USU1FT1VUMiwKKwkubWFwc1tSVExfSU1SX1RJTUVPVVQxXSA9IElNUl9USU1FT1VUMSwKKworCS5tYXBzW1JUTF9JTVJfVFhGT1ZXXSA9IElNUl9UWEZPVlcsCisJLm1hcHNbUlRMX0lNUl9QU1RJTUVPVVRdID0gSU1SX1BTVElNRU9VVCwKKwkubWFwc1tSVExfSU1SX0JjbkludF0gPSBJTVJfQkNOSU5ULAorCS5tYXBzW1JUTF9JTVJfUlhGT1ZXXSA9IElNUl9SWEZPVlcsCisJLm1hcHNbUlRMX0lNUl9SRFVdID0gSU1SX1JEVSwKKwkubWFwc1tSVExfSU1SX0FUSU1FTkRdID0gSU1SX0FUSU1FTkQsCisJLm1hcHNbUlRMX0lNUl9CRE9LXSA9IElNUl9CRE9LLAorCS5tYXBzW1JUTF9JTVJfTUdOVERPS10gPSBJTVJfTUdOVERPSywKKwkubWFwc1tSVExfSU1SX1RCREVSXSA9IElNUl9UQkRFUiwKKwkubWFwc1tSVExfSU1SX0hJR0hET0tdID0gSU1SX0hJR0hET0ssCisJLm1hcHNbUlRMX0lNUl9DT01ET0tdID0gSU1SX0NPTURPSywKKwkubWFwc1tSVExfSU1SX1RCRE9LXSA9IElNUl9UQkRPSywKKwkubWFwc1tSVExfSU1SX0JLRE9LXSA9IElNUl9CS0RPSywKKwkubWFwc1tSVExfSU1SX0JFRE9LXSA9IElNUl9CRURPSywKKwkubWFwc1tSVExfSU1SX1ZJRE9LXSA9IElNUl9WSURPSywKKwkubWFwc1tSVExfSU1SX1ZPRE9LXSA9IElNUl9WT0RPSywKKwkubWFwc1tSVExfSU1SX1JPS10gPSBJTVJfUk9LLAorCS5tYXBzW1JUTF9JQlNTX0lOVF9NQVNLU10gPSAoSU1SX0JDTklOVCB8IElNUl9UQkRPSyB8IElNUl9UQkRFUiksCisKKwkubWFwc1tSVExfUkNfQ0NLX1JBVEUxTV0gPSBERVNDOTJTX1JBVEUxTSwKKwkubWFwc1tSVExfUkNfQ0NLX1JBVEUyTV0gPSBERVNDOTJTX1JBVEUyTSwKKwkubWFwc1tSVExfUkNfQ0NLX1JBVEU1XzVNXSA9IERFU0M5MlNfUkFURTVfNU0sCisJLm1hcHNbUlRMX1JDX0NDS19SQVRFMTFNXSA9IERFU0M5MlNfUkFURTExTSwKKwkubWFwc1tSVExfUkNfT0ZETV9SQVRFNk1dID0gREVTQzkyU19SQVRFNk0sCisJLm1hcHNbUlRMX1JDX09GRE1fUkFURTlNXSA9IERFU0M5MlNfUkFURTlNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEUxMk1dID0gREVTQzkyU19SQVRFMTJNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEUxOE1dID0gREVTQzkyU19SQVRFMThNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEUyNE1dID0gREVTQzkyU19SQVRFMjRNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEUzNk1dID0gREVTQzkyU19SQVRFMzZNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEU0OE1dID0gREVTQzkyU19SQVRFNDhNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEU1NE1dID0gREVTQzkyU19SQVRFNTRNLAorCisJLm1hcHNbUlRMX1JDX0hUX1JBVEVNQ1M3XSA9IERFU0M5MlNfUkFURU1DUzcsCisJLm1hcHNbUlRMX1JDX0hUX1JBVEVNQ1MxNV0gPSBERVNDOTJTX1JBVEVNQ1MxNSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBydGw5MnNlX3BjaV9pZHNbXSBfX2RldmluaXRkYXRhID0geworCXtSVExfUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JFQUxURUssIDB4ODE5MiwgcnRsOTJzZV9oYWxfY2ZnKX0sCisJe1JUTF9QQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUkVBTFRFSywgMHg4MTcxLCBydGw5MnNlX2hhbF9jZmcpfSwKKwl7UlRMX1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9SRUFMVEVLLCAweDgxNzIsIHJ0bDkyc2VfaGFsX2NmZyl9LAorCXtSVExfUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JFQUxURUssIDB4ODE3MywgcnRsOTJzZV9oYWxfY2ZnKX0sCisJe1JUTF9QQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUkVBTFRFSywgMHg4MTc0LCBydGw5MnNlX2hhbF9jZmcpfSwKKwl7fSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBydGw5MnNlX3BjaV9pZHMpOworCitNT0RVTEVfQVVUSE9SKCJsaXpoYW9taW5nCTxjaGFvbWluZ19saUByZWFsc2lsLmNvbS5jbj4iKTsKK01PRFVMRV9BVVRIT1IoIlJlYWx0ZWsgV2xhbkZBRQk8d2xhbmZhZUByZWFsdGVrLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiUmVhbHRlayA4MTkyUy84MTkxUyA4MDIuMTFuIFBDSSB3aXJlbGVzcyIpOworTU9EVUxFX0ZJUk1XQVJFKCJydGx3aWZpL3J0bDgxOTJzZWZ3LmJpbiIpOworCittb2R1bGVfcGFyYW1fbmFtZWQoc3dlbmMsIHJ0bDkyc2VfbW9kX3BhcmFtcy5zd19jcnlwdG8sIGJvb2wsIDA0NDQpOworbW9kdWxlX3BhcmFtX25hbWVkKGlwcywgcnRsOTJzZV9tb2RfcGFyYW1zLmluYWN0aXZlcHMsIGJvb2wsIDA0NDQpOworbW9kdWxlX3BhcmFtX25hbWVkKHN3bHBzLCBydGw5MnNlX21vZF9wYXJhbXMuc3djdHJsX2xwcywgYm9vbCwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fbmFtZWQoZndscHMsIHJ0bDkyc2VfbW9kX3BhcmFtcy5md2N0cmxfbHBzLCBib29sLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moc3dlbmMsICJ1c2luZyBoYXJkd2FyZSBjcnlwdG8gKGRlZmF1bHQgMCBbaGFyZHdhcmVdKVxuIik7CitNT0RVTEVfUEFSTV9ERVNDKGlwcywgInVzaW5nIG5vIGxpbmsgcG93ZXIgc2F2ZSAoZGVmYXVsdCAxIGlzIG9wZW4pXG4iKTsKK01PRFVMRV9QQVJNX0RFU0Moc3dscHMsICJ1c2luZyBsaW5rZWQgc3cgY29udHJvbCBwb3dlciBzYXZlIChkZWZhdWx0IDEgaXMgIgorCQkgIm9wZW4pXG4iKTsKKworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcnRsOTJzZV9kcml2ZXIgPSB7CisJLm5hbWUgPSBLQlVJTERfTU9ETkFNRSwKKwkuaWRfdGFibGUgPSBydGw5MnNlX3BjaV9pZHMsCisJLnByb2JlID0gcnRsX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gcnRsX3BjaV9kaXNjb25uZWN0LAorCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPSBydGxfcGNpX3N1c3BlbmQsCisJLnJlc3VtZSA9IHJ0bF9wY2lfcmVzdW1lLAorI2VuZGlmCisKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHJ0bDkyc2VfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnJ0bDkyc2VfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlSVF9BU1NFUlQoZmFsc2UsICgiOiBObyBkZXZpY2UgZm91bmRcbiIpKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBydGw5MnNlX21vZHVsZV9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZydGw5MnNlX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHJ0bDkyc2VfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQocnRsOTJzZV9tb2R1bGVfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tbGVkLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9zdy5oCnNpbWlsYXJpdHkgaW5kZXggNjglCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1sZWQuaApyZW5hbWUgdG8gZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2Uvc3cuaAppbmRleCA5NmYzMjNkLi5mYzRlYjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tbGVkLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2Uvc3cuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMTksMTUgKzE5LDE4IEBACiAgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgogICoKICAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiAgSW50ZWwgTGludXggV2lyZWxlc3MgPGlsd0BsaW51eC5pbnRlbC5jb20+Ci0gKiBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19SRUFMVEVLX1BDSTkyU0VfU1dfSF9fCisjZGVmaW5lIF9fUkVBTFRFS19QQ0k5MlNFX1NXX0hfXwogCi0jaWZuZGVmIF9faXdsX2Fnbl9sZWRfaF9fCi0jZGVmaW5lIF9faXdsX2Fnbl9sZWRfaF9fCisjZGVmaW5lIEVGVVNFX01BWF9TRUNUSU9OCTE2CiAKLWV4dGVybiBjb25zdCBzdHJ1Y3QgaXdsX2xlZF9vcHMgaXdsYWduX2xlZF9vcHM7Ci12b2lkIGl3bGFnbl9sZWRfZW5hYmxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitpbnQgcnRsOTJzZV9pbml0X3N3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJzZV9kZWluaXRfc3coc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw5MnNlX2luaXRfdmFyX21hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiAKLSNlbmRpZiAvKiBfX2l3bF9hZ25fbGVkX2hfXyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS90YWJsZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvdGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTQxODViCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvdGFibGUuYwpAQCAtMCwwICsxLDYzNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKiBDcmVhdGVkIG9uICAyMDEwLyA1LzE4LCAgMTo0MQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAidGFibGUuaCIKKwordTMyIHJ0bDgxOTJzZXBoeV9yZWdfMnQycmFycmF5W1BIWV9SRUdfMlQyUkFSUkFZTEVOR1RIXSA9IHsKKwkweDAxYywgMHgwNzAwMDAwMCwKKwkweDgwMCwgMHgwMDA0MDAwMCwKKwkweDgwNCwgMHgwMDAwODAwMywKKwkweDgwOCwgMHgwMDAwZmMwMCwKKwkweDgwYywgMHgwMDAwMDAwYSwKKwkweDgxMCwgMHgxMDAwNTA4OCwKKwkweDgxNCwgMHgwMjBjM2QxMCwKKwkweDgxOCwgMHgwMDIwMDE4NSwKKwkweDgxYywgMHgwMDAwMDAwMCwKKwkweDgyMCwgMHgwMTAwMDAwMCwKKwkweDgyNCwgMHgwMDM5MDAwNCwKKwkweDgyOCwgMHgwMTAwMDAwMCwKKwkweDgyYywgMHgwMDM5MDAwNCwKKwkweDgzMCwgMHgwMDAwMDAwNCwKKwkweDgzNCwgMHgwMDY5MDIwMCwKKwkweDgzOCwgMHgwMDAwMDAwNCwKKwkweDgzYywgMHgwMDY5MDIwMCwKKwkweDg0MCwgMHgwMDAxMDAwMCwKKwkweDg0NCwgMHgwMDAxMDAwMCwKKwkweDg0OCwgMHgwMDAwMDAwMCwKKwkweDg0YywgMHgwMDAwMDAwMCwKKwkweDg1MCwgMHgwMDAwMDAwMCwKKwkweDg1NCwgMHgwMDAwMDAwMCwKKwkweDg1OCwgMHg0ODQ4NDg0OCwKKwkweDg1YywgMHg2NWE5NjVhOSwKKwkweDg2MCwgMHgwZjdmMDEzMCwKKwkweDg2NCwgMHgwZjdmMDEzMCwKKwkweDg2OCwgMHgwZjdmMDEzMCwKKwkweDg2YywgMHgwZjdmMDEzMCwKKwkweDg3MCwgMHgwMzAwMDcwMCwKKwkweDg3NCwgMHgwMzAwMDMwMCwKKwkweDg3OCwgMHgwMDAyMDAwMiwKKwkweDg3YywgMHgwMDRmMDIwMSwKKwkweDg4MCwgMHhhODMwMGFjMSwKKwkweDg4NCwgMHgwMDAwMDA1OCwKKwkweDg4OCwgMHgwMDAwMDAwOCwKKwkweDg4YywgMHgwMDAwMDAwNCwKKwkweDg5MCwgMHgwMDAwMDAwMCwKKwkweDg5NCwgMHhmZmZmZmZmZSwKKwkweDg5OCwgMHg0MDMwMjAxMCwKKwkweDg5YywgMHgwMDcwNjA1MCwKKwkweDhiMCwgMHgwMDAwMDAwMCwKKwkweDhlMCwgMHgwMDAwMDAwMCwKKwkweDhlNCwgMHgwMDAwMDAwMCwKKwkweGUwMCwgMHgzMDMzMzMzMywKKwkweGUwNCwgMHgyYTJkMmUyZiwKKwkweGUwOCwgMHgwMDAwMzIzMiwKKwkweGUxMCwgMHgzMDMzMzMzMywKKwkweGUxNCwgMHgyYTJkMmUyZiwKKwkweGUxOCwgMHgzMDMzMzMzMywKKwkweGUxYywgMHgyYTJkMmUyZiwKKwkweGUzMCwgMHgwMTAwN2MwMCwKKwkweGUzNCwgMHgwMTAwNDgwMCwKKwkweGUzOCwgMHgxMDAwZGMxZiwKKwkweGUzYywgMHgxMDAwOGMxZiwKKwkweGU0MCwgMHgwMjE0MDBhMCwKKwkweGU0NCwgMHgyODE2MDBhMCwKKwkweGU0OCwgMHhmODAwMDAwMSwKKwkweGU0YywgMHgwMDAwMjkxMCwKKwkweGU1MCwgMHgwMTAwN2MwMCwKKwkweGU1NCwgMHgwMTAwNDgwMCwKKwkweGU1OCwgMHgxMDAwZGMxZiwKKwkweGU1YywgMHgxMDAwOGMxZiwKKwkweGU2MCwgMHgwMjE0MDBhMCwKKwkweGU2NCwgMHgyODE2MDBhMCwKKwkweGU2YywgMHgwMDAwMjkxMCwKKwkweGU3MCwgMHgzMWVkOTJmYiwKKwkweGU3NCwgMHgzNjE1MzZmYiwKKwkweGU3OCwgMHgzNjE1MzZmYiwKKwkweGU3YywgMHgzNjE1MzZmYiwKKwkweGU4MCwgMHgzNjE1MzZmYiwKKwkweGU4NCwgMHgwMDBkOTJmYiwKKwkweGU4OCwgMHgwMDBkOTJmYiwKKwkweGU4YywgMHgzMWVkOTJmYiwKKwkweGVkMCwgMHgzMWVkOTJmYiwKKwkweGVkNCwgMHgzMWVkOTJmYiwKKwkweGVkOCwgMHgwMDBkOTJmYiwKKwkweGVkYywgMHgwMDBkOTJmYiwKKwkweGVlMCwgMHgwMDBkOTJmYiwKKwkweGVlNCwgMHgwMTVlNTQ0OCwKKwkweGVlOCwgMHgyMTU1NTQ0OCwKKwkweDkwMCwgMHgwMDAwMDAwMCwKKwkweDkwNCwgMHgwMDAwMDAyMywKKwkweDkwOCwgMHgwMDAwMDAwMCwKKwkweDkwYywgMHgwMTEyMTMxMywKKwkweGEwMCwgMHgwMGQwNDdjOCwKKwkweGEwNCwgMHg4MGZmMDAwOCwKKwkweGEwOCwgMHg4Y2NkODMwMCwKKwkweGEwYywgMHgyZTYyMTIwZiwKKwkweGExMCwgMHg5NTAwYmI3OCwKKwkweGExNCwgMHgxMTE0NDAyOCwKKwkweGExOCwgMHgwMDg4MTExNywKKwkweGExYywgMHg4OTE0MGYwMCwKKwkweGEyMCwgMHgxYTFiMDAwMCwKKwkweGEyNCwgMHgwOTBlMTMxNywKKwkweGEyOCwgMHgwMDAwMDIwNCwKKwkweGEyYywgMHgxMGQzMDAwMCwKKwkweGMwMCwgMHg0MDA3MWQ0MCwKKwkweGMwNCwgMHgwMGEwNTYzMywKKwkweGMwOCwgMHgwMDAwMDBlNCwKKwkweGMwYywgMHg2YzZjNmM2YywKKwkweGMxMCwgMHgwODgwMDAwMCwKKwkweGMxNCwgMHg0MDAwMDEwMCwKKwkweGMxOCwgMHgwODAwMDAwMCwKKwkweGMxYywgMHg0MDAwMDEwMCwKKwkweGMyMCwgMHgwODAwMDAwMCwKKwkweGMyNCwgMHg0MDAwMDEwMCwKKwkweGMyOCwgMHgwODAwMDAwMCwKKwkweGMyYywgMHg0MDAwMDEwMCwKKwkweGMzMCwgMHg2ZGU5YWM0NCwKKwkweGMzNCwgMHg0Njk2NTJjZiwKKwkweGMzOCwgMHg0OTc5NTk5NCwKKwkweGMzYywgMHgwYTk3OTc2NCwKKwkweGM0MCwgMHgxZjdjNDAzZiwKKwkweGM0NCwgMHgwMDAxMDBiNywKKwkweGM0OCwgMHhlYzAyMDAwMCwKKwkweGM0YywgMHgwMDdmMDM3ZiwKKwkweGM1MCwgMHg2OTU0MzQyMCwKKwkweGM1NCwgMHg0MzNjMDA5NCwKKwkweGM1OCwgMHg2OTU0MzQyMCwKKwkweGM1YywgMHg0MzNjMDA5NCwKKwkweGM2MCwgMHg2OTU0MzQyMCwKKwkweGM2NCwgMHg0MzNjMDA5NCwKKwkweGM2OCwgMHg2OTU0MzQyMCwKKwkweGM2YywgMHg0MzNjMDA5NCwKKwkweGM3MCwgMHgyYzdmMDAwZCwKKwkweGM3NCwgMHgwMTg2MTU1YiwKKwkweGM3OCwgMHgwMDAwMDAxZiwKKwkweGM3YywgMHgwMGI5MTYxMiwKKwkweGM4MCwgMHg0MDAwMDEwMCwKKwkweGM4NCwgMHgyMGY2MDAwMCwKKwkweGM4OCwgMHgyMDAwMDA4MCwKKwkweGM4YywgMHgyMDIwMDAwMCwKKwkweGM5MCwgMHg0MDAwMDEwMCwKKwkweGM5NCwgMHgwMDAwMDAwMCwKKwkweGM5OCwgMHg0MDAwMDEwMCwKKwkweGM5YywgMHgwMDAwMDAwMCwKKwkweGNhMCwgMHgwMDQ5MjQ5MiwKKwkweGNhNCwgMHgwMDAwMDAwMCwKKwkweGNhOCwgMHgwMDAwMDAwMCwKKwkweGNhYywgMHgwMDAwMDAwMCwKKwkweGNiMCwgMHgwMDAwMDAwMCwKKwkweGNiNCwgMHgwMDAwMDAwMCwKKwkweGNiOCwgMHgwMDAwMDAwMCwKKwkweGNiYywgMHgyODAwMDAwMCwKKwkweGNjMCwgMHgwMDAwMDAwMCwKKwkweGNjNCwgMHgwMDAwMDAwMCwKKwkweGNjOCwgMHgwMDAwMDAwMCwKKwkweGNjYywgMHgwMDAwMDAwMCwKKwkweGNkMCwgMHgwMDAwMDAwMCwKKwkweGNkNCwgMHgwMDAwMDAwMCwKKwkweGNkOCwgMHg2NGIyMjQyNywKKwkweGNkYywgMHgwMDc2NjkzMiwKKwkweGNlMCwgMHgwMDIyMjIyMiwKKwkweGNlNCwgMHgwMDAwMDAwMCwKKwkweGNlOCwgMHgzNzY0NDMwMiwKKwkweGNlYywgMHgyZjk3ZDQwYywKKwkweGQwMCwgMHgwMDAwMDc1MCwKKwkweGQwNCwgMHgwMDAwMDQwMywKKwkweGQwOCwgMHgwMDAwOTA3ZiwKKwkweGQwYywgMHgwMDAwMDAwMSwKKwkweGQxMCwgMHhhMDYzMzMzMywKKwkweGQxNCwgMHgzMzMzM2M2MywKKwkweGQxOCwgMHg2YThmNWI2YiwKKwkweGQxYywgMHgwMDAwMDAwMCwKKwkweGQyMCwgMHgwMDAwMDAwMCwKKwkweGQyNCwgMHgwMDAwMDAwMCwKKwkweGQyOCwgMHgwMDAwMDAwMCwKKwkweGQyYywgMHhjYzk3OTk3NSwKKwkweGQzMCwgMHgwMDAwMDAwMCwKKwkweGQzNCwgMHgwMDAwMDAwMCwKKwkweGQzOCwgMHgwMDAwMDAwMCwKKwkweGQzYywgMHgwMDAyNzI5MywKKwkweGQ0MCwgMHgwMDAwMDAwMCwKKwkweGQ0NCwgMHgwMDAwMDAwMCwKKwkweGQ0OCwgMHgwMDAwMDAwMCwKKwkweGQ1MCwgMHg2NDM3MTQwYSwKKwkweGQ1NCwgMHgwMjRkYmQwMiwKKwkweGQ1OCwgMHgwMDAwMDAwMCwKKwkweGQ1YywgMHgzMDAzMjA2NCwKKwkweGQ2MCwgMHg0NjUzZGU2OCwKKwkweGQ2NCwgMHgwMDUxOGEzYywKKwkweGQ2OCwgMHgwMDAwMjEwMSwKKwkweGYxNCwgMHgwMDAwMDAwMywKKwkweGY0YywgMHgwMDAwMDAwMCwKKwkweGYwMCwgMHgwMDAwMDMwMCwKK307CisKK3UzMiBydGw4MTkyc2VwaHlfY2hhbmdldG9fMXQxcmFycmF5W1BIWV9DSEFOR0VUT18xVDFSQVJSQVlMRU5HVEhdID0geworCTB4ODQ0LCAweGZmZmZmZmZmLCAweDAwMDEwMDAwLAorCTB4ODA0LCAweDAwMDAwMDBmLCAweDAwMDAwMDAxLAorCTB4ODI0LCAweDAwZjAwMDBmLCAweDAwMzAwMDA0LAorCTB4ODJjLCAweDAwZjAwMDBmLCAweDAwMTAwMDAyLAorCTB4ODcwLCAweDA0MDAwMDAwLCAweDAwMDAwMDAxLAorCTB4ODY0LCAweDAwMDAwNDAwLCAweDAwMDAwMDAwLAorCTB4ODc4LCAweDAwMGYwMDBmLCAweDAwMDAwMDAyLAorCTB4ZTc0LCAweDBmMDAwMDAwLCAweDAwMDAwMDAyLAorCTB4ZTc4LCAweDBmMDAwMDAwLCAweDAwMDAwMDAyLAorCTB4ZTdjLCAweDBmMDAwMDAwLCAweDAwMDAwMDAyLAorCTB4ZTgwLCAweDBmMDAwMDAwLCAweDAwMDAwMDAyLAorCTB4OTBjLCAweDAwMDAwMGZmLCAweDAwMDAwMDExLAorCTB4YzA0LCAweDAwMDAwMGZmLCAweDAwMDAwMDExLAorCTB4ZDA0LCAweDAwMDAwMDBmLCAweDAwMDAwMDAxLAorCTB4MWY0LCAweGZmZmYwMDAwLCAweDAwMDA3Nzc3LAorCTB4MjM0LCAweGY4MDAwMDAwLCAweDAwMDAwMDBhLAorfTsKKwordTMyIHJ0bDgxOTJzZXBoeV9jaGFuZ2V0b18xdDJyYXJyYXlbUEhZX0NIQU5HRVRPXzFUMlJBUlJBWUxFTkdUSF0gPSB7CisJMHg4MDQsIDB4MDAwMDAwMGYsIDB4MDAwMDAwMDMsCisJMHg4MjQsIDB4MDBmMDAwMGYsIDB4MDAzMDAwMDQsCisJMHg4MmMsIDB4MDBmMDAwMGYsIDB4MDAzMDAwMDIsCisJMHg4NzAsIDB4MDQwMDAwMDAsIDB4MDAwMDAwMDEsCisJMHg4NjQsIDB4MDAwMDA0MDAsIDB4MDAwMDAwMDAsCisJMHg4NzgsIDB4MDAwZjAwMGYsIDB4MDAwMDAwMDIsCisJMHhlNzQsIDB4MGYwMDAwMDAsIDB4MDAwMDAwMDIsCisJMHhlNzgsIDB4MGYwMDAwMDAsIDB4MDAwMDAwMDIsCisJMHhlN2MsIDB4MGYwMDAwMDAsIDB4MDAwMDAwMDIsCisJMHhlODAsIDB4MGYwMDAwMDAsIDB4MDAwMDAwMDIsCisJMHg5MGMsIDB4MDAwMDAwZmYsIDB4MDAwMDAwMTEsCisJMHhjMDQsIDB4MDAwMDAwZmYsIDB4MDAwMDAwMzMsCisJMHhkMDQsIDB4MDAwMDAwMGYsIDB4MDAwMDAwMDMsCisJMHgxZjQsIDB4ZmZmZjAwMDAsIDB4MDAwMDc3NzcsCisJMHgyMzQsIDB4ZjgwMDAwMDAsIDB4MDAwMDAwMGEsCit9OworCit1MzIgcnRsODE5MnNlcGh5X3JlZ19hcnJheV9wZ1tQSFlfUkVHX0FSUkFZX1BHTEVOR1RIXSA9IHsKKwkweGUwMCwgMHhmZmZmZmZmZiwgMHgwNjA5MDkwOSwKKwkweGUwNCwgMHhmZmZmZmZmZiwgMHgwMDAzMDQwNiwKKwkweGUwOCwgMHgwMDAwZmYwMCwgMHgwMDAwMDAwMCwKKwkweGUxMCwgMHhmZmZmZmZmZiwgMHgwYTBjMGQwZSwKKwkweGUxNCwgMHhmZmZmZmZmZiwgMHgwNDA3MDgwOSwKKwkweGUxOCwgMHhmZmZmZmZmZiwgMHgwYTBjMGQwZSwKKwkweGUxYywgMHhmZmZmZmZmZiwgMHgwNDA3MDgwOSwKKwkweGUwMCwgMHhmZmZmZmZmZiwgMHgwNDA0MDQwNCwKKwkweGUwNCwgMHhmZmZmZmZmZiwgMHgwMDAyMDIwNCwKKwkweGUwOCwgMHgwMDAwZmYwMCwgMHgwMDAwMDAwMCwKKwkweGUxMCwgMHhmZmZmZmZmZiwgMHgwMjA0MDQwNCwKKwkweGUxNCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMiwKKwkweGUxOCwgMHhmZmZmZmZmZiwgMHgwMjA0MDQwNCwKKwkweGUxYywgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMiwKKwkweGUwMCwgMHhmZmZmZmZmZiwgMHgwNDA0MDQwNCwKKwkweGUwNCwgMHhmZmZmZmZmZiwgMHgwMDAyMDIwNCwKKwkweGUwOCwgMHgwMDAwZmYwMCwgMHgwMDAwMDAwMCwKKwkweGUxMCwgMHhmZmZmZmZmZiwgMHgwMjA0MDQwNCwKKwkweGUxNCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMiwKKwkweGUxOCwgMHhmZmZmZmZmZiwgMHgwMjA0MDQwNCwKKwkweGUxYywgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMiwKKwkweGUwMCwgMHhmZmZmZmZmZiwgMHgwMjAyMDIwMiwKKwkweGUwNCwgMHhmZmZmZmZmZiwgMHgwMDAyMDIwMiwKKwkweGUwOCwgMHgwMDAwZmYwMCwgMHgwMDAwMDAwMCwKKwkweGUxMCwgMHhmZmZmZmZmZiwgMHgwMjAyMDIwMiwKKwkweGUxNCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMiwKKwkweGUxOCwgMHhmZmZmZmZmZiwgMHgwMjAyMDIwMiwKKwkweGUxYywgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMiwKK307CisKK3UzMiBydGw4MTkyc2VyYWRpb2FfMXRfYXJyYXlbUkFESU9BXzFUX0FSUkFZTEVOR1RIXSA9IHsKKwkweDAwMCwgMHgwMDAzMDE1OSwKKwkweDAwMSwgMHgwMDAzMDI1MCwKKwkweDAwMiwgMHgwMDAxMDAwMCwKKwkweDAxMCwgMHgwMDA4MDAwZiwKKwkweDAxMSwgMHgwMDAyMzFmYywKKwkweDAxMCwgMHgwMDBjMDAwZiwKKwkweDAxMSwgMHgwMDAzZjlmOCwKKwkweDAxMCwgMHgwMDAyMDAwZiwKKwkweDAxMSwgMHgwMDAyMDEwMSwKKwkweDAxNCwgMHgwMDAxMDkzZSwKKwkweDAxNCwgMHgwMDA5MDkzZSwKKwkweDAxNSwgMHgwMDAwZjhmNCwKKwkweDAxNywgMHgwMDBmNjUwMCwKKwkweDAxYSwgMHgwMDAxMzA1NiwKKwkweDAxYiwgMHgwMDA2MDAwMCwKKwkweDAxYywgMHgwMDAwMDMwMCwKKwkweDAxZSwgMHgwMDAzMTA1OSwKKwkweDAyMSwgMHgwMDA1NDAwMCwKKwkweDAyMiwgMHgwMDAwMDgzYywKKwkweDAyMywgMHgwMDAwMTU1OCwKKwkweDAyNCwgMHgwMDAwMDA2MCwKKwkweDAyNSwgMHgwMDAyMjU4MywKKwkweDAyNiwgMHgwMDAwZjIwMCwKKwkweDAyNywgMHgwMDBlYWNmMSwKKwkweDAyOCwgMHgwMDA5YmQ1NCwKKwkweDAyOSwgMHgwMDAwNDU4MiwKKwkweDAyYSwgMHgwMDAwMDAwMSwKKwkweDAyYiwgMHgwMDAyMTMzNCwKKwkweDAyYSwgMHgwMDAwMDAwMCwKKwkweDAyYiwgMHgwMDAwMDAwYSwKKwkweDAyYSwgMHgwMDAwMDAwMSwKKwkweDAyYiwgMHgwMDAwMDgwOCwKKwkweDAyYiwgMHgwMDA1MzMzMywKKwkweDAyYywgMHgwMDAwMDAwYywKKwkweDAyYSwgMHgwMDAwMDAwMiwKKwkweDAyYiwgMHgwMDAwMDgwOCwKKwkweDAyYiwgMHgwMDA1YjMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwMywKKwkweDAyYiwgMHgwMDAwMDgwOCwKKwkweDAyYiwgMHgwMDA2MzMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwNCwKKwkweDAyYiwgMHgwMDAwMDgwOCwKKwkweDAyYiwgMHgwMDA2YjMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwNSwKKwkweDAyYiwgMHgwMDAwMDcwOSwKKwkweDAyYiwgMHgwMDA1MzMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwNiwKKwkweDAyYiwgMHgwMDAwMDcwOSwKKwkweDAyYiwgMHgwMDA1YjMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwNywKKwkweDAyYiwgMHgwMDAwMDcwOSwKKwkweDAyYiwgMHgwMDA2MzMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwOCwKKwkweDAyYiwgMHgwMDAwMDcwOSwKKwkweDAyYiwgMHgwMDA2YjMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwOSwKKwkweDAyYiwgMHgwMDAwMDYwYSwKKwkweDAyYiwgMHgwMDA1MzMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwYSwKKwkweDAyYiwgMHgwMDAwMDYwYSwKKwkweDAyYiwgMHgwMDA1YjMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwYiwKKwkweDAyYiwgMHgwMDAwMDYwYSwKKwkweDAyYiwgMHgwMDA2MzMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwYywKKwkweDAyYiwgMHgwMDAwMDYwYSwKKwkweDAyYiwgMHgwMDA2YjMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwZCwKKwkweDAyYiwgMHgwMDAwMDUwYiwKKwkweDAyYiwgMHgwMDA1MzMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwZSwKKwkweDAyYiwgMHgwMDAwMDUwYiwKKwkweDAyYiwgMHgwMDA2NjYyMywKKwkweDAyYywgMHgwMDAwMDAxYSwKKwkweDAyYSwgMHgwMDBlNDAwMCwKKwkweDAzMCwgMHgwMDAyMDAwMCwKKwkweDAzMSwgMHgwMDBiOTYzMSwKKwkweDAzMiwgMHgwMDAwMTMwZCwKKwkweDAzMywgMHgwMDAwMDE4NywKKwkweDAxMywgMHgwMDAxOWU2YywKKwkweDAxMywgMHgwMDAxNWU5NCwKKwkweDAwMCwgMHgwMDAxMDE1OSwKKwkweDAxOCwgMHgwMDAwZjQwMSwKKwkweDBmZSwgMHgwMDAwMDAwMCwKKwkweDAxZSwgMHgwMDAzMTA1YiwKKwkweDBmZSwgMHgwMDAwMDAwMCwKKwkweDAwMCwgMHgwMDAzMDE1OSwKKwkweDAxMCwgMHgwMDA0MDAwZiwKKwkweDAxMSwgMHgwMDAyMDNmOSwKK307CisKK3UzMiBydGw4MTkyc2VyYWRpb2JfYXJyYXlbUkFESU9CX0FSUkFZTEVOR1RIXSA9IHsKKwkweDAwMCwgMHgwMDAzMDE1OSwKKwkweDAwMSwgMHgwMDAwMTA0MSwKKwkweDAwMiwgMHgwMDAxMTAwMCwKKwkweDAwNSwgMHgwMDA4MGZjMCwKKwkweDAwNywgMHgwMDBmYzgwMywKKwkweDAxMywgMHgwMDAxN2NiMCwKKwkweDAxMywgMHgwMDAxMWNjMCwKKwkweDAxMywgMHgwMDAwZGM2MCwKKwkweDAxMywgMHgwMDAwOGM2MCwKKwkweDAxMywgMHgwMDAwNDQ1MCwKKwkweDAxMywgMHgwMDAwMDAyMCwKK307CisKK3UzMiBydGw4MTkyc2VyYWRpb2JfZ21fYXJyYXlbUkFESU9CX0dNX0FSUkFZTEVOR1RIXSA9IHsKKwkweDAwMCwgMHgwMDAzMDE1OSwKKwkweDAwMSwgMHgwMDAwMTA0MSwKKwkweDAwMiwgMHgwMDAxMTAwMCwKKwkweDAwNSwgMHgwMDA4MGZjMCwKKwkweDAwNywgMHgwMDBmYzgwMywKK307CisKK3UzMiBydGw4MTkyc2VtYWNfMnRfYXJyYXlbTUFDXzJUX0FSUkFZTEVOR1RIXSA9IHsKKwkweDAyMCwgMHgwMDAwMDAzNSwKKwkweDA0OCwgMHgwMDAwMDAwZSwKKwkweDA0OSwgMHgwMDAwMDBmMCwKKwkweDA0YSwgMHgwMDAwMDA3NywKKwkweDA0YiwgMHgwMDAwMDA4MywKKwkweDBiNSwgMHgwMDAwMDAyMSwKKwkweDBkYywgMHgwMDAwMDBmZiwKKwkweDBkZCwgMHgwMDAwMDBmZiwKKwkweDBkZSwgMHgwMDAwMDBmZiwKKwkweDBkZiwgMHgwMDAwMDBmZiwKKwkweDExNiwgMHgwMDAwMDAwMCwKKwkweDExNywgMHgwMDAwMDAwMCwKKwkweDExOCwgMHgwMDAwMDAwMCwKKwkweDExOSwgMHgwMDAwMDAwMCwKKwkweDExYSwgMHgwMDAwMDAwMCwKKwkweDExYiwgMHgwMDAwMDAwMCwKKwkweDExYywgMHgwMDAwMDAwMCwKKwkweDExZCwgMHgwMDAwMDAwMCwKKwkweDE2MCwgMHgwMDAwMDAwYiwKKwkweDE2MSwgMHgwMDAwMDAwYiwKKwkweDE2MiwgMHgwMDAwMDAwYiwKKwkweDE2MywgMHgwMDAwMDAwYiwKKwkweDE2NCwgMHgwMDAwMDAwYiwKKwkweDE2NSwgMHgwMDAwMDAwYiwKKwkweDE2NiwgMHgwMDAwMDAwYiwKKwkweDE2NywgMHgwMDAwMDAwYiwKKwkweDE2OCwgMHgwMDAwMDAwYiwKKwkweDE2OSwgMHgwMDAwMDAwYiwKKwkweDE2YSwgMHgwMDAwMDAwYiwKKwkweDE2YiwgMHgwMDAwMDAwYiwKKwkweDE2YywgMHgwMDAwMDAwYiwKKwkweDE2ZCwgMHgwMDAwMDAwYiwKKwkweDE2ZSwgMHgwMDAwMDAwYiwKKwkweDE2ZiwgMHgwMDAwMDAwYiwKKwkweDE3MCwgMHgwMDAwMDAwYiwKKwkweDE3MSwgMHgwMDAwMDAwYiwKKwkweDE3MiwgMHgwMDAwMDAwYiwKKwkweDE3MywgMHgwMDAwMDAwYiwKKwkweDE3NCwgMHgwMDAwMDAwYiwKKwkweDE3NSwgMHgwMDAwMDAwYiwKKwkweDE3NiwgMHgwMDAwMDAwYiwKKwkweDE3NywgMHgwMDAwMDAwYiwKKwkweDE3OCwgMHgwMDAwMDAwYiwKKwkweDE3OSwgMHgwMDAwMDAwYiwKKwkweDE3YSwgMHgwMDAwMDAwYiwKKwkweDE3YiwgMHgwMDAwMDAwYiwKKwkweDE3YywgMHgwMDAwMDAwYiwKKwkweDE3ZCwgMHgwMDAwMDAwYiwKKwkweDE3ZSwgMHgwMDAwMDAwYiwKKwkweDE3ZiwgMHgwMDAwMDAwYiwKKwkweDIzNiwgMHgwMDAwMDAwYywKKwkweDUwMywgMHgwMDAwMDAyMiwKKwkweDU2MCwgMHgwMDAwMDAwMCwKK307CisKK3UzMiBydGw4MTkyc2VhZ2N0YWJfYXJyYXlbQUdDVEFCX0FSUkFZTEVOR1RIXSA9IHsKKwkweGM3OCwgMHg3ZjAwMDAwMSwKKwkweGM3OCwgMHg3ZjAxMDAwMSwKKwkweGM3OCwgMHg3ZTAyMDAwMSwKKwkweGM3OCwgMHg3ZDAzMDAwMSwKKwkweGM3OCwgMHg3YzA0MDAwMSwKKwkweGM3OCwgMHg3YjA1MDAwMSwKKwkweGM3OCwgMHg3YTA2MDAwMSwKKwkweGM3OCwgMHg3OTA3MDAwMSwKKwkweGM3OCwgMHg3ODA4MDAwMSwKKwkweGM3OCwgMHg3NzA5MDAwMSwKKwkweGM3OCwgMHg3NjBhMDAwMSwKKwkweGM3OCwgMHg3NTBiMDAwMSwKKwkweGM3OCwgMHg3NDBjMDAwMSwKKwkweGM3OCwgMHg3MzBkMDAwMSwKKwkweGM3OCwgMHg3MjBlMDAwMSwKKwkweGM3OCwgMHg3MTBmMDAwMSwKKwkweGM3OCwgMHg3MDEwMDAwMSwKKwkweGM3OCwgMHg2ZjExMDAwMSwKKwkweGM3OCwgMHg2ZjEyMDAwMSwKKwkweGM3OCwgMHg2ZTEzMDAwMSwKKwkweGM3OCwgMHg2ZDE0MDAwMSwKKwkweGM3OCwgMHg2ZDE1MDAwMSwKKwkweGM3OCwgMHg2YzE2MDAwMSwKKwkweGM3OCwgMHg2YjE3MDAwMSwKKwkweGM3OCwgMHg2YTE4MDAwMSwKKwkweGM3OCwgMHg2YTE5MDAwMSwKKwkweGM3OCwgMHg2OTFhMDAwMSwKKwkweGM3OCwgMHg2ODFiMDAwMSwKKwkweGM3OCwgMHg2NzFjMDAwMSwKKwkweGM3OCwgMHg2NjFkMDAwMSwKKwkweGM3OCwgMHg2NTFlMDAwMSwKKwkweGM3OCwgMHg2NDFmMDAwMSwKKwkweGM3OCwgMHg2MzIwMDAwMSwKKwkweGM3OCwgMHg0YzIxMDAwMSwKKwkweGM3OCwgMHg0YjIyMDAwMSwKKwkweGM3OCwgMHg0YTIzMDAwMSwKKwkweGM3OCwgMHg0OTI0MDAwMSwKKwkweGM3OCwgMHg0ODI1MDAwMSwKKwkweGM3OCwgMHg0NzI2MDAwMSwKKwkweGM3OCwgMHg0NjI3MDAwMSwKKwkweGM3OCwgMHg0NTI4MDAwMSwKKwkweGM3OCwgMHg0NDI5MDAwMSwKKwkweGM3OCwgMHgyYzJhMDAwMSwKKwkweGM3OCwgMHgyYjJiMDAwMSwKKwkweGM3OCwgMHgyYTJjMDAwMSwKKwkweGM3OCwgMHgyOTJkMDAwMSwKKwkweGM3OCwgMHgyODJlMDAwMSwKKwkweGM3OCwgMHgyNzJmMDAwMSwKKwkweGM3OCwgMHgyNjMwMDAwMSwKKwkweGM3OCwgMHgyNTMxMDAwMSwKKwkweGM3OCwgMHgyNDMyMDAwMSwKKwkweGM3OCwgMHgyMzMzMDAwMSwKKwkweGM3OCwgMHgyMjM0MDAwMSwKKwkweGM3OCwgMHgwOTM1MDAwMSwKKwkweGM3OCwgMHgwODM2MDAwMSwKKwkweGM3OCwgMHgwNzM3MDAwMSwKKwkweGM3OCwgMHgwNjM4MDAwMSwKKwkweGM3OCwgMHgwNTM5MDAwMSwKKwkweGM3OCwgMHgwNDNhMDAwMSwKKwkweGM3OCwgMHgwMzNiMDAwMSwKKwkweGM3OCwgMHgwMjNjMDAwMSwKKwkweGM3OCwgMHgwMTNkMDAwMSwKKwkweGM3OCwgMHgwMDNlMDAwMSwKKwkweGM3OCwgMHgwMDNmMDAwMSwKKwkweGM3OCwgMHg3ZjQwMDAwMSwKKwkweGM3OCwgMHg3ZjQxMDAwMSwKKwkweGM3OCwgMHg3ZTQyMDAwMSwKKwkweGM3OCwgMHg3ZDQzMDAwMSwKKwkweGM3OCwgMHg3YzQ0MDAwMSwKKwkweGM3OCwgMHg3YjQ1MDAwMSwKKwkweGM3OCwgMHg3YTQ2MDAwMSwKKwkweGM3OCwgMHg3OTQ3MDAwMSwKKwkweGM3OCwgMHg3ODQ4MDAwMSwKKwkweGM3OCwgMHg3NzQ5MDAwMSwKKwkweGM3OCwgMHg3NjRhMDAwMSwKKwkweGM3OCwgMHg3NTRiMDAwMSwKKwkweGM3OCwgMHg3NDRjMDAwMSwKKwkweGM3OCwgMHg3MzRkMDAwMSwKKwkweGM3OCwgMHg3MjRlMDAwMSwKKwkweGM3OCwgMHg3MTRmMDAwMSwKKwkweGM3OCwgMHg3MDUwMDAwMSwKKwkweGM3OCwgMHg2ZjUxMDAwMSwKKwkweGM3OCwgMHg2ZjUyMDAwMSwKKwkweGM3OCwgMHg2ZTUzMDAwMSwKKwkweGM3OCwgMHg2ZDU0MDAwMSwKKwkweGM3OCwgMHg2ZDU1MDAwMSwKKwkweGM3OCwgMHg2YzU2MDAwMSwKKwkweGM3OCwgMHg2YjU3MDAwMSwKKwkweGM3OCwgMHg2YTU4MDAwMSwKKwkweGM3OCwgMHg2YTU5MDAwMSwKKwkweGM3OCwgMHg2OTVhMDAwMSwKKwkweGM3OCwgMHg2ODViMDAwMSwKKwkweGM3OCwgMHg2NzVjMDAwMSwKKwkweGM3OCwgMHg2NjVkMDAwMSwKKwkweGM3OCwgMHg2NTVlMDAwMSwKKwkweGM3OCwgMHg2NDVmMDAwMSwKKwkweGM3OCwgMHg2MzYwMDAwMSwKKwkweGM3OCwgMHg0YzYxMDAwMSwKKwkweGM3OCwgMHg0YjYyMDAwMSwKKwkweGM3OCwgMHg0YTYzMDAwMSwKKwkweGM3OCwgMHg0OTY0MDAwMSwKKwkweGM3OCwgMHg0ODY1MDAwMSwKKwkweGM3OCwgMHg0NzY2MDAwMSwKKwkweGM3OCwgMHg0NjY3MDAwMSwKKwkweGM3OCwgMHg0NTY4MDAwMSwKKwkweGM3OCwgMHg0NDY5MDAwMSwKKwkweGM3OCwgMHgyYzZhMDAwMSwKKwkweGM3OCwgMHgyYjZiMDAwMSwKKwkweGM3OCwgMHgyYTZjMDAwMSwKKwkweGM3OCwgMHgyOTZkMDAwMSwKKwkweGM3OCwgMHgyODZlMDAwMSwKKwkweGM3OCwgMHgyNzZmMDAwMSwKKwkweGM3OCwgMHgyNjcwMDAwMSwKKwkweGM3OCwgMHgyNTcxMDAwMSwKKwkweGM3OCwgMHgyNDcyMDAwMSwKKwkweGM3OCwgMHgyMzczMDAwMSwKKwkweGM3OCwgMHgyMjc0MDAwMSwKKwkweGM3OCwgMHgwOTc1MDAwMSwKKwkweGM3OCwgMHgwODc2MDAwMSwKKwkweGM3OCwgMHgwNzc3MDAwMSwKKwkweGM3OCwgMHgwNjc4MDAwMSwKKwkweGM3OCwgMHgwNTc5MDAwMSwKKwkweGM3OCwgMHgwNDdhMDAwMSwKKwkweGM3OCwgMHgwMzdiMDAwMSwKKwkweGM3OCwgMHgwMjdjMDAwMSwKKwkweGM3OCwgMHgwMTdkMDAwMSwKKwkweGM3OCwgMHgwMDdlMDAwMSwKKwkweGM3OCwgMHgwMDdmMDAwMSwKKwkweGM3OCwgMHgzMDAwMDAxZSwKKwkweGM3OCwgMHgzMDAxMDAxZSwKKwkweGM3OCwgMHgzMDAyMDAxZSwKKwkweGM3OCwgMHgzMDAzMDAxZSwKKwkweGM3OCwgMHgzMDA0MDAxZSwKKwkweGM3OCwgMHgzNDA1MDAxZSwKKwkweGM3OCwgMHgzODA2MDAxZSwKKwkweGM3OCwgMHgzZTA3MDAxZSwKKwkweGM3OCwgMHgzZTA4MDAxZSwKKwkweGM3OCwgMHg0NDA5MDAxZSwKKwkweGM3OCwgMHg0NjBhMDAxZSwKKwkweGM3OCwgMHg0ODBiMDAxZSwKKwkweGM3OCwgMHg0ODBjMDAxZSwKKwkweGM3OCwgMHg0ZTBkMDAxZSwKKwkweGM3OCwgMHg1NjBlMDAxZSwKKwkweGM3OCwgMHg1YTBmMDAxZSwKKwkweGM3OCwgMHg1ZTEwMDAxZSwKKwkweGM3OCwgMHg2MjExMDAxZSwKKwkweGM3OCwgMHg2YzEyMDAxZSwKKwkweGM3OCwgMHg3MjEzMDAxZSwKKwkweGM3OCwgMHg3MjE0MDAxZSwKKwkweGM3OCwgMHg3MjE1MDAxZSwKKwkweGM3OCwgMHg3MjE2MDAxZSwKKwkweGM3OCwgMHg3MjE3MDAxZSwKKwkweGM3OCwgMHg3MjE4MDAxZSwKKwkweGM3OCwgMHg3MjE5MDAxZSwKKwkweGM3OCwgMHg3MjFhMDAxZSwKKwkweGM3OCwgMHg3MjFiMDAxZSwKKwkweGM3OCwgMHg3MjFjMDAxZSwKKwkweGM3OCwgMHg3MjFkMDAxZSwKKwkweGM3OCwgMHg3MjFlMDAxZSwKKwkweGM3OCwgMHg3MjFmMDAxZSwKK307CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL3RhYmxlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS90YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZWQ2ZDk1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvdGFibGUuaApAQCAtMCwwICsxLDQ5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgUmVhbHRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0lOQ19IQUw4MTkyU0VfRldfSU1HX0gKKyNkZWZpbmUgX19JTkNfSEFMODE5MlNFX0ZXX0lNR19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKkNyZWF0ZWQgb24gIDIwMTAvIDQvMTIsICA1OjU2Ki8KKworI2RlZmluZSBQSFlfUkVHXzJUMlJBUlJBWUxFTkdUSCAzNzIKK2V4dGVybiB1MzIgcnRsODE5MnNlcGh5X3JlZ18ydDJyYXJyYXlbUEhZX1JFR18yVDJSQVJSQVlMRU5HVEhdOworI2RlZmluZSBQSFlfQ0hBTkdFVE9fMVQxUkFSUkFZTEVOR1RIIDQ4CitleHRlcm4gdTMyIHJ0bDgxOTJzZXBoeV9jaGFuZ2V0b18xdDFyYXJyYXlbUEhZX0NIQU5HRVRPXzFUMVJBUlJBWUxFTkdUSF07CisjZGVmaW5lIFBIWV9DSEFOR0VUT18xVDJSQVJSQVlMRU5HVEggNDUKK2V4dGVybiB1MzIgcnRsODE5MnNlcGh5X2NoYW5nZXRvXzF0MnJhcnJheVtQSFlfQ0hBTkdFVE9fMVQyUkFSUkFZTEVOR1RIXTsKKyNkZWZpbmUgUEhZX1JFR19BUlJBWV9QR0xFTkdUSCA4NAorZXh0ZXJuIHUzMiBydGw4MTkyc2VwaHlfcmVnX2FycmF5X3BnW1BIWV9SRUdfQVJSQVlfUEdMRU5HVEhdOworI2RlZmluZSBSQURJT0FfMVRfQVJSQVlMRU5HVEggMjAyCitleHRlcm4gdTMyIHJ0bDgxOTJzZXJhZGlvYV8xdF9hcnJheVtSQURJT0FfMVRfQVJSQVlMRU5HVEhdOworI2RlZmluZSBSQURJT0JfQVJSQVlMRU5HVEggMjIKK2V4dGVybiB1MzIgcnRsODE5MnNlcmFkaW9iX2FycmF5W1JBRElPQl9BUlJBWUxFTkdUSF07CisjZGVmaW5lIFJBRElPQl9HTV9BUlJBWUxFTkdUSCAxMAorZXh0ZXJuIHUzMiBydGw4MTkyc2VyYWRpb2JfZ21fYXJyYXlbUkFESU9CX0dNX0FSUkFZTEVOR1RIXTsKKyNkZWZpbmUgTUFDXzJUX0FSUkFZTEVOR1RIIDEwNgorZXh0ZXJuIHUzMiBydGw4MTkyc2VtYWNfMnRfYXJyYXlbTUFDXzJUX0FSUkFZTEVOR1RIXTsKKyNkZWZpbmUgQUdDVEFCX0FSUkFZTEVOR1RIIDMyMAorZXh0ZXJuIHUzMiBydGw4MTkyc2VhZ2N0YWJfYXJyYXlbQUdDVEFCX0FSUkFZTEVOR1RIXTsKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL3RyeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvdHJ4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNmNDQyMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL3RyeC5jCkBAIC0wLDAgKzEsOTc2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIi4uL3dpZmkuaCIKKyNpbmNsdWRlICIuLi9wY2kuaCIKKyNpbmNsdWRlICIuLi9iYXNlLmgiCisjaW5jbHVkZSAicmVnLmgiCisjaW5jbHVkZSAiZGVmLmgiCisjaW5jbHVkZSAicGh5LmgiCisjaW5jbHVkZSAiZncuaCIKKyNpbmNsdWRlICJ0cnguaCIKKyNpbmNsdWRlICJsZWQuaCIKKworc3RhdGljIHU4IF9ydGw5MnNlX21hcF9od3F1ZXVlX3RvX2Z3cXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwJdTggc2tiX3F1ZXVlKQoreworCV9fbGUxNiBmYyA9IHJ0bF9nZXRfZmMoc2tiKTsKKworCWlmICh1bmxpa2VseShpZWVlODAyMTFfaXNfYmVhY29uKGZjKSkpCisJCXJldHVybiBRU0xUX0JFQUNPTjsKKwlpZiAoaWVlZTgwMjExX2lzX21nbXQoZmMpKQorCQlyZXR1cm4gUVNMVF9NR05UOworCWlmIChpZWVlODAyMTFfaXNfbnVsbGZ1bmMoZmMpKQorCQlyZXR1cm4gUVNMVF9ISUdIOworCisJcmV0dXJuIHNrYi0+cHJpb3JpdHk7Cit9CisKK3N0YXRpYyBpbnQgX3J0bDkyc2VfcmF0ZV9tYXBwaW5nKGJvb2wgaXNodCwgdTggZGVzY19yYXRlLCBib29sIGZpcnN0X2FtcGR1KQoreworCWludCByYXRlX2lkeCA9IDA7CisKKwlpZiAoZmlyc3RfYW1wZHUpIHsKKwkJaWYgKGZhbHNlID09IGlzaHQpIHsKKwkJCXN3aXRjaCAoZGVzY19yYXRlKSB7CisJCQljYXNlIERFU0M5MlNfUkFURTFNOgorCQkJCXJhdGVfaWR4ID0gMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgREVTQzkyU19SQVRFMk06CisJCQkJcmF0ZV9pZHggPSAxOworCQkJCWJyZWFrOworCQkJY2FzZSBERVNDOTJTX1JBVEU1XzVNOgorCQkJCXJhdGVfaWR4ID0gMjsKKwkJCQlicmVhazsKKwkJCWNhc2UgREVTQzkyU19SQVRFMTFNOgorCQkJCXJhdGVfaWR4ID0gMzsKKwkJCQlicmVhazsKKwkJCWNhc2UgREVTQzkyU19SQVRFNk06CisJCQkJcmF0ZV9pZHggPSA0OworCQkJCWJyZWFrOworCQkJY2FzZSBERVNDOTJTX1JBVEU5TToKKwkJCQlyYXRlX2lkeCA9IDU7CisJCQkJYnJlYWs7CisJCQljYXNlIERFU0M5MlNfUkFURTEyTToKKwkJCQlyYXRlX2lkeCA9IDY7CisJCQkJYnJlYWs7CisJCQljYXNlIERFU0M5MlNfUkFURTE4TToKKwkJCQlyYXRlX2lkeCA9IDc7CisJCQkJYnJlYWs7CisJCQljYXNlIERFU0M5MlNfUkFURTI0TToKKwkJCQlyYXRlX2lkeCA9IDg7CisJCQkJYnJlYWs7CisJCQljYXNlIERFU0M5MlNfUkFURTM2TToKKwkJCQlyYXRlX2lkeCA9IDk7CisJCQkJYnJlYWs7CisJCQljYXNlIERFU0M5MlNfUkFURTQ4TToKKwkJCQlyYXRlX2lkeCA9IDEwOworCQkJCWJyZWFrOworCQkJY2FzZSBERVNDOTJTX1JBVEU1NE06CisJCQkJcmF0ZV9pZHggPSAxMTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcmF0ZV9pZHggPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgeworCQkJcmF0ZV9pZHggPSAxMTsKKwkJfQorCisJCXJldHVybiByYXRlX2lkeDsKKwl9CisKKwlzd2l0Y2ggKGRlc2NfcmF0ZSkgeworCWNhc2UgREVTQzkyU19SQVRFMU06CisJCXJhdGVfaWR4ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBERVNDOTJTX1JBVEUyTToKKwkJcmF0ZV9pZHggPSAxOworCQlicmVhazsKKwljYXNlIERFU0M5MlNfUkFURTVfNU06CisJCXJhdGVfaWR4ID0gMjsKKwkJYnJlYWs7CisJY2FzZSBERVNDOTJTX1JBVEUxMU06CisJCXJhdGVfaWR4ID0gMzsKKwkJYnJlYWs7CisJY2FzZSBERVNDOTJTX1JBVEU2TToKKwkJcmF0ZV9pZHggPSA0OworCQlicmVhazsKKwljYXNlIERFU0M5MlNfUkFURTlNOgorCQlyYXRlX2lkeCA9IDU7CisJCWJyZWFrOworCWNhc2UgREVTQzkyU19SQVRFMTJNOgorCQlyYXRlX2lkeCA9IDY7CisJCWJyZWFrOworCWNhc2UgREVTQzkyU19SQVRFMThNOgorCQlyYXRlX2lkeCA9IDc7CisJCWJyZWFrOworCWNhc2UgREVTQzkyU19SQVRFMjRNOgorCQlyYXRlX2lkeCA9IDg7CisJCWJyZWFrOworCWNhc2UgREVTQzkyU19SQVRFMzZNOgorCQlyYXRlX2lkeCA9IDk7CisJCWJyZWFrOworCWNhc2UgREVTQzkyU19SQVRFNDhNOgorCQlyYXRlX2lkeCA9IDEwOworCQlicmVhazsKKwljYXNlIERFU0M5MlNfUkFURTU0TToKKwkJcmF0ZV9pZHggPSAxMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmF0ZV9pZHggPSAxMTsKKwkJYnJlYWs7CisJfQorCXJldHVybiByYXRlX2lkeDsKK30KKworc3RhdGljIHU4IF9ydGw5MnNfcXVlcnlfcnhwd3JwZXJjZW50YWdlKGNoYXIgYW50cG93ZXIpCit7CisJaWYgKChhbnRwb3dlciA8PSAtMTAwKSB8fCAoYW50cG93ZXIgPj0gMjApKQorCQlyZXR1cm4gMDsKKwllbHNlIGlmIChhbnRwb3dlciA+PSAwKQorCQlyZXR1cm4gMTAwOworCWVsc2UKKwkJcmV0dXJuIDEwMCArIGFudHBvd2VyOworfQorCitzdGF0aWMgdTggX3J0bDkyc19ldm1fZGJfdG9fcGVyY2VudGFnZShjaGFyIHZhbHVlKQoreworCWNoYXIgcmV0X3ZhbDsKKwlyZXRfdmFsID0gdmFsdWU7CisKKwlpZiAocmV0X3ZhbCA+PSAwKQorCQlyZXRfdmFsID0gMDsKKworCWlmIChyZXRfdmFsIDw9IC0zMykKKwkJcmV0X3ZhbCA9IC0zMzsKKworCXJldF92YWwgPSAwIC0gcmV0X3ZhbDsKKwlyZXRfdmFsICo9IDM7CisKKwlpZiAocmV0X3ZhbCA9PSA5OSkKKwkJcmV0X3ZhbCA9IDEwMDsKKworCXJldHVybiByZXRfdmFsOworfQorCitzdGF0aWMgbG9uZyBfcnRsOTJzZV90cmFuc2xhdGVfdG9kYm0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICB1OCBzaWduYWxfc3RyZW5ndGhfaW5kZXgpCit7CisJbG9uZyBzaWduYWxfcG93ZXI7CisKKwlzaWduYWxfcG93ZXIgPSAobG9uZykoKHNpZ25hbF9zdHJlbmd0aF9pbmRleCArIDEpID4+IDEpOworCXNpZ25hbF9wb3dlciAtPSA5NTsKKwlyZXR1cm4gc2lnbmFsX3Bvd2VyOworfQorCitzdGF0aWMgbG9uZyBfcnRsOTJzZV9zaWduYWxfc2NhbGVfbWFwcGluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJbG9uZyBjdXJyc2lnKQoreworCWxvbmcgcmV0c2lnID0gMDsKKworCS8qIFN0ZXAgMS4gU2NhbGUgbWFwcGluZy4gKi8KKwlpZiAoY3VycnNpZyA+IDQ3KQorCQlyZXRzaWcgPSAxMDA7CisJZWxzZSBpZiAoY3VycnNpZyA+IDE0ICYmIGN1cnJzaWcgPD0gNDcpCisJCXJldHNpZyA9IDEwMCAtICgoNDcgLSBjdXJyc2lnKSAqIDMpIC8gMjsKKwllbHNlIGlmIChjdXJyc2lnID4gMiAmJiBjdXJyc2lnIDw9IDE0KQorCQlyZXRzaWcgPSA0OCAtICgoMTQgLSBjdXJyc2lnKSAqIDE1KSAvIDc7CisJZWxzZSBpZiAoY3VycnNpZyA+PSAwKQorCQlyZXRzaWcgPSBjdXJyc2lnICogOSArIDE7CisKKwlyZXR1cm4gcmV0c2lnOworfQorCisKK3N0YXRpYyB2b2lkIF9ydGw5MnNlX3F1ZXJ5X3J4cGh5c3RhdHVzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgICBzdHJ1Y3QgcnRsX3N0YXRzICpwc3RhdHMsIHU4ICpwZGVzYywKKwkJCQkgICAgICAgc3RydWN0IHJ4X2Z3aW5mbyAqcF9kcnZpbmZvLAorCQkJCSAgICAgICBib29sIHBhY2tldF9tYXRjaF9ic3NpZCwKKwkJCQkgICAgICAgYm9vbCBwYWNrZXRfdG9zZWxmLAorCQkJCSAgICAgICBib29sIHBhY2tldF9iZWFjb24pCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBwaHlfc3RzX2Nja184MTkyc190ICpjY2tfYnVmOworCXM4IHJ4X3B3cl9hbGwgPSAwLCByeF9wd3JbNF07CisJdTggcmZfcnhfbnVtID0gMCwgZXZtLCBwd2RiX2FsbDsKKwl1OCBpLCBtYXhfc3BhdGlhbF9zdHJlYW07CisJdTMyIHJzc2ksIHRvdGFsX3Jzc2kgPSAwOworCWJvb2wgaW5fcG93ZXJzYXZlbW9kZSA9IGZhbHNlOworCWJvb2wgaXNfY2NrX3JhdGU7CisKKwlpc19jY2tfcmF0ZSA9IFJYX0hBTF9JU19DQ0tfUkFURShwZGVzYyk7CisJcHN0YXRzLT5wYWNrZXRfbWF0Y2hic3NpZCA9IHBhY2tldF9tYXRjaF9ic3NpZDsKKwlwc3RhdHMtPnBhY2tldF90b3NlbGYgPSBwYWNrZXRfdG9zZWxmOworCXBzdGF0cy0+aXNfY2NrID0gaXNfY2NrX3JhdGU7CisJcHN0YXRzLT5wYWNrZXRfYmVhY29uID0gcGFja2V0X2JlYWNvbjsKKwlwc3RhdHMtPmlzX2NjayA9IGlzX2Nja19yYXRlOworCXBzdGF0cy0+cnhfbWltb19zaWduYWxxdWFsaXR5WzBdID0gLTE7CisJcHN0YXRzLT5yeF9taW1vX3NpZ25hbHF1YWxpdHlbMV0gPSAtMTsKKworCWlmIChpc19jY2tfcmF0ZSkgeworCQl1OCByZXBvcnQsIGNja19oaWdocHdyOworCQljY2tfYnVmID0gKHN0cnVjdCBwaHlfc3RzX2Nja184MTkyc190ICopcF9kcnZpbmZvOworCisJCWlmICghaW5fcG93ZXJzYXZlbW9kZSkKKwkJCWNja19oaWdocHdyID0gKHU4KSBydGxfZ2V0X2JicmVnKGh3LAorCQkJCQkJUkZQR0EwX1hBX0hTU0lQQVJBTUVURVIyLAorCQkJCQkJMHgyMDApOworCQllbHNlCisJCQljY2tfaGlnaHB3ciA9IGZhbHNlOworCisJCWlmICghY2NrX2hpZ2hwd3IpIHsKKwkJCXU4IGNja19hZ2NfcnB0ID0gY2NrX2J1Zi0+Y2NrX2FnY19ycHQ7CisJCQlyZXBvcnQgPSBjY2tfYnVmLT5jY2tfYWdjX3JwdCAmIDB4YzA7CisJCQlyZXBvcnQgPSByZXBvcnQgPj4gNjsKKwkJCXN3aXRjaCAocmVwb3J0KSB7CisJCQljYXNlIDB4MzoKKwkJCQlyeF9wd3JfYWxsID0gLTQwIC0gKGNja19hZ2NfcnB0ICYgMHgzZSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4MjoKKwkJCQlyeF9wd3JfYWxsID0gLTIwIC0gKGNja19hZ2NfcnB0ICYgMHgzZSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4MToKKwkJCQlyeF9wd3JfYWxsID0gLTIgLSAoY2NrX2FnY19ycHQgJiAweDNlKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMHgwOgorCQkJCXJ4X3B3cl9hbGwgPSAxNCAtIChjY2tfYWdjX3JwdCAmIDB4M2UpOworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgeworCQkJdTggY2NrX2FnY19ycHQgPSBjY2tfYnVmLT5jY2tfYWdjX3JwdDsKKwkJCXJlcG9ydCA9IHBfZHJ2aW5mby0+Y2Zvc2hvWzBdICYgMHg2MDsKKwkJCXJlcG9ydCA9IHJlcG9ydCA+PiA1OworCQkJc3dpdGNoIChyZXBvcnQpIHsKKwkJCWNhc2UgMHgzOgorCQkJCXJ4X3B3cl9hbGwgPSAtNDAgLSAoKGNja19hZ2NfcnB0ICYgMHgxZikgPDwgMSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4MjoKKwkJCQlyeF9wd3JfYWxsID0gLTIwIC0gKChjY2tfYWdjX3JwdCAmIDB4MWYpIDw8IDEpOworCQkJCWJyZWFrOworCQkJY2FzZSAweDE6CisJCQkJcnhfcHdyX2FsbCA9IC0yIC0gKChjY2tfYWdjX3JwdCAmIDB4MWYpIDw8IDEpOworCQkJCWJyZWFrOworCQkJY2FzZSAweDA6CisJCQkJcnhfcHdyX2FsbCA9IDE0IC0gKChjY2tfYWdjX3JwdCAmIDB4MWYpIDw8IDEpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJcHdkYl9hbGwgPSBfcnRsOTJzX3F1ZXJ5X3J4cHdycGVyY2VudGFnZShyeF9wd3JfYWxsKTsKKworCQkvKiBDQ0sgZ2FpbiBpcyBzbWFsbGVyIHRoYW4gT0ZETS9NQ1MgZ2FpbiwgICovCisJCS8qIHNvIHdlIGFkZCBnYWluIGRpZmYgYnkgZXhwZXJpZW5jZXMsIHRoZSB2YWwgaXMgNiAqLworCQlwd2RiX2FsbCArPSA2OworCQlpZiAocHdkYl9hbGwgPiAxMDApCisJCQlwd2RiX2FsbCA9IDEwMDsKKwkJLyogbW9kaWZ5IHRoZSBvZmZzZXQgdG8gbWFrZSB0aGUgc2FtZSBnYWluIGluZGV4IHdpdGggT0ZETS4gKi8KKwkJaWYgKHB3ZGJfYWxsID4gMzQgJiYgcHdkYl9hbGwgPD0gNDIpCisJCQlwd2RiX2FsbCAtPSAyOworCQllbHNlIGlmIChwd2RiX2FsbCA+IDI2ICYmIHB3ZGJfYWxsIDw9IDM0KQorCQkJcHdkYl9hbGwgLT0gNjsKKwkJZWxzZSBpZiAocHdkYl9hbGwgPiAxNCAmJiBwd2RiX2FsbCA8PSAyNikKKwkJCXB3ZGJfYWxsIC09IDg7CisJCWVsc2UgaWYgKHB3ZGJfYWxsID4gNCAmJiBwd2RiX2FsbCA8PSAxNCkKKwkJCXB3ZGJfYWxsIC09IDQ7CisKKwkJcHN0YXRzLT5yeF9wd2RiX2FsbCA9IHB3ZGJfYWxsOworCQlwc3RhdHMtPnJlY3ZzaWduYWxwb3dlciA9IHJ4X3B3cl9hbGw7CisKKwkJaWYgKHBhY2tldF9tYXRjaF9ic3NpZCkgeworCQkJdTggc3E7CisJCQlpZiAocHN0YXRzLT5yeF9wd2RiX2FsbCA+IDQwKSB7CisJCQkJc3EgPSAxMDA7CisJCQl9IGVsc2UgeworCQkJCXNxID0gY2NrX2J1Zi0+c3FfcnB0OworCQkJCWlmIChzcSA+IDY0KQorCQkJCQlzcSA9IDA7CisJCQkJZWxzZSBpZiAoc3EgPCAyMCkKKwkJCQkJc3EgPSAxMDA7CisJCQkJZWxzZQorCQkJCQlzcSA9ICgoNjQgLSBzcSkgKiAxMDApIC8gNDQ7CisJCQl9CisKKwkJCXBzdGF0cy0+c2lnbmFscXVhbGl0eSA9IHNxOworCQkJcHN0YXRzLT5yeF9taW1vX3NpZ25hbHF1YWxpdHlbMF0gPSBzcTsKKwkJCXBzdGF0cy0+cnhfbWltb19zaWduYWxxdWFsaXR5WzFdID0gLTE7CisJCX0KKwl9IGVsc2UgeworCQlydGxwcml2LT5kbS5yZnBhdGhfcnhlbmFibGVbMF0gPQorCQkgICAgcnRscHJpdi0+ZG0ucmZwYXRoX3J4ZW5hYmxlWzFdID0gdHJ1ZTsKKwkJZm9yIChpID0gUkY5MF9QQVRIX0E7IGkgPCBSRjkwX1BBVEhfTUFYOyBpKyspIHsKKwkJCWlmIChydGxwcml2LT5kbS5yZnBhdGhfcnhlbmFibGVbaV0pCisJCQkJcmZfcnhfbnVtKys7CisKKwkJCXJ4X3B3cltpXSA9ICgocF9kcnZpbmZvLT5nYWluX3Ryc3dbaV0gJgorCQkJCSAgICAweDNmKSAqIDIpIC0gMTEwOworCQkJcnNzaSA9IF9ydGw5MnNfcXVlcnlfcnhwd3JwZXJjZW50YWdlKHJ4X3B3cltpXSk7CisJCQl0b3RhbF9yc3NpICs9IHJzc2k7CisJCQlydGxwcml2LT5zdGF0cy5yeF9zbnJfZGJbaV0gPQorCQkJCQkgKGxvbmcpKHBfZHJ2aW5mby0+cnhzbnJbaV0gLyAyKTsKKworCQkJaWYgKHBhY2tldF9tYXRjaF9ic3NpZCkKKwkJCQlwc3RhdHMtPnJ4X21pbW9fc2lnbmFsc3RyZW5ndGhbaV0gPSAodTgpIHJzc2k7CisJCX0KKworCQlyeF9wd3JfYWxsID0gKChwX2RydmluZm8tPnB3ZGJfYWxsID4+IDEpICYgMHg3ZikgLSAxMTA7CisJCXB3ZGJfYWxsID0gX3J0bDkyc19xdWVyeV9yeHB3cnBlcmNlbnRhZ2UocnhfcHdyX2FsbCk7CisJCXBzdGF0cy0+cnhfcHdkYl9hbGwgPSBwd2RiX2FsbDsKKwkJcHN0YXRzLT5yeHBvd2VyID0gcnhfcHdyX2FsbDsKKwkJcHN0YXRzLT5yZWN2c2lnbmFscG93ZXIgPSByeF9wd3JfYWxsOworCisJCWlmIChHRVRfUlhfU1RBVFVTX0RFU0NfUlhfSFQocGRlc2MpICYmCisJCQlHRVRfUlhfU1RBVFVTX0RFU0NfUlhfTUNTKHBkZXNjKSA+PSBERVNDOTJTX1JBVEVNQ1M4ICYmCisJCSAgICBHRVRfUlhfU1RBVFVTX0RFU0NfUlhfTUNTKHBkZXNjKSA8PSBERVNDOTJTX1JBVEVNQ1MxNSkKKwkJCW1heF9zcGF0aWFsX3N0cmVhbSA9IDI7CisJCWVsc2UKKwkJCW1heF9zcGF0aWFsX3N0cmVhbSA9IDE7CisKKwkJZm9yIChpID0gMDsgaSA8IG1heF9zcGF0aWFsX3N0cmVhbTsgaSsrKSB7CisJCQlldm0gPSBfcnRsOTJzX2V2bV9kYl90b19wZXJjZW50YWdlKHBfZHJ2aW5mby0+cnhldm1baV0pOworCisJCQlpZiAocGFja2V0X21hdGNoX2Jzc2lkKSB7CisJCQkJaWYgKGkgPT0gMCkKKwkJCQkJcHN0YXRzLT5zaWduYWxxdWFsaXR5ID0gKHU4KShldm0gJgorCQkJCQkJCQkgMHhmZik7CisJCQkJcHN0YXRzLT5yeF9taW1vX3NpZ25hbHF1YWxpdHlbaV0gPQorCQkJCQkJCSAodTgpIChldm0gJiAweGZmKTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChpc19jY2tfcmF0ZSkKKwkJcHN0YXRzLT5zaWduYWxzdHJlbmd0aCA9ICh1OCkoX3J0bDkyc2Vfc2lnbmFsX3NjYWxlX21hcHBpbmcoaHcsCisJCQkJCSBwd2RiX2FsbCkpOworCWVsc2UgaWYgKHJmX3J4X251bSAhPSAwKQorCQlwc3RhdHMtPnNpZ25hbHN0cmVuZ3RoID0gKHU4KSAoX3J0bDkyc2Vfc2lnbmFsX3NjYWxlX21hcHBpbmcoaHcsCisJCQkJdG90YWxfcnNzaSAvPSByZl9yeF9udW0pKTsKK30KKworc3RhdGljIHZvaWQgX3J0bDkyc2VfcHJvY2Vzc191aV9yc3NpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgc3RydWN0IHJ0bF9zdGF0cyAqcHN0YXRzKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCXU4IHJmcGF0aDsKKwl1MzIgbGFzdF9yc3NpLCB0bXB2YWw7CisKKwlpZiAocHN0YXRzLT5wYWNrZXRfdG9zZWxmIHx8IHBzdGF0cy0+cGFja2V0X2JlYWNvbikgeworCQlydGxwcml2LT5zdGF0cy5yc3NpX2NhbGN1bGF0ZV9jbnQrKzsKKworCQlpZiAocnRscHJpdi0+c3RhdHMudWlfcnNzaS50b3RhbF9udW0rKyA+PQorCQkgICAgUEhZX1JTU0lfU0xJRF9XSU5fTUFYKSB7CisJCQlydGxwcml2LT5zdGF0cy51aV9yc3NpLnRvdGFsX251bSA9CisJCQkJCSBQSFlfUlNTSV9TTElEX1dJTl9NQVg7CisJCQlsYXN0X3Jzc2kgPSBydGxwcml2LT5zdGF0cy51aV9yc3NpLmVsZW1lbnRzWworCQkJCXJ0bHByaXYtPnN0YXRzLnVpX3Jzc2kuaW5kZXhdOworCQkJcnRscHJpdi0+c3RhdHMudWlfcnNzaS50b3RhbF92YWwgLT0gbGFzdF9yc3NpOworCQl9CisKKwkJcnRscHJpdi0+c3RhdHMudWlfcnNzaS50b3RhbF92YWwgKz0gcHN0YXRzLT5zaWduYWxzdHJlbmd0aDsKKwkJcnRscHJpdi0+c3RhdHMudWlfcnNzaS5lbGVtZW50c1tydGxwcml2LT5zdGF0cy51aV9yc3NpLmluZGV4KytdCisJCQkgPSBwc3RhdHMtPnNpZ25hbHN0cmVuZ3RoOworCisJCWlmIChydGxwcml2LT5zdGF0cy51aV9yc3NpLmluZGV4ID49IFBIWV9SU1NJX1NMSURfV0lOX01BWCkKKwkJCXJ0bHByaXYtPnN0YXRzLnVpX3Jzc2kuaW5kZXggPSAwOworCisJCXRtcHZhbCA9IHJ0bHByaXYtPnN0YXRzLnVpX3Jzc2kudG90YWxfdmFsIC8KKwkJCXJ0bHByaXYtPnN0YXRzLnVpX3Jzc2kudG90YWxfbnVtOworCQlydGxwcml2LT5zdGF0cy5zaWduYWxfc3RyZW5ndGggPSBfcnRsOTJzZV90cmFuc2xhdGVfdG9kYm0oaHcsCisJCQkJCQkJCSh1OCkgdG1wdmFsKTsKKwkJcHN0YXRzLT5yc3NpID0gcnRscHJpdi0+c3RhdHMuc2lnbmFsX3N0cmVuZ3RoOworCX0KKworCWlmICghcHN0YXRzLT5pc19jY2sgJiYgcHN0YXRzLT5wYWNrZXRfdG9zZWxmKSB7CisJCWZvciAocmZwYXRoID0gUkY5MF9QQVRIX0E7IHJmcGF0aCA8IHJ0bHBoeS0+bnVtX3RvdGFsX3JmcGF0aDsKKwkJICAgICByZnBhdGgrKykgeworCQkJaWYgKHJ0bHByaXYtPnN0YXRzLnJ4X3Jzc2lfcGVyY2VudGFnZVtyZnBhdGhdID09IDApIHsKKwkJCQlydGxwcml2LT5zdGF0cy5yeF9yc3NpX3BlcmNlbnRhZ2VbcmZwYXRoXSA9CisJCQkJICAgIHBzdGF0cy0+cnhfbWltb19zaWduYWxzdHJlbmd0aFtyZnBhdGhdOworCisJCQl9CisKKwkJCWlmIChwc3RhdHMtPnJ4X21pbW9fc2lnbmFsc3RyZW5ndGhbcmZwYXRoXSA+CisJCQkgICAgcnRscHJpdi0+c3RhdHMucnhfcnNzaV9wZXJjZW50YWdlW3JmcGF0aF0pIHsKKwkJCQlydGxwcml2LT5zdGF0cy5yeF9yc3NpX3BlcmNlbnRhZ2VbcmZwYXRoXSA9CisJCQkJICAgICgocnRscHJpdi0+c3RhdHMucnhfcnNzaV9wZXJjZW50YWdlW3JmcGF0aF0KKwkJCQkgICAgKiAoUlhfU01PT1RIX0ZBQ1RPUiAtIDEpKSArCisJCQkJICAgIChwc3RhdHMtPnJ4X21pbW9fc2lnbmFsc3RyZW5ndGhbcmZwYXRoXSkpIC8KKwkJCQkgICAgKFJYX1NNT09USF9GQUNUT1IpOworCisJCQkJcnRscHJpdi0+c3RhdHMucnhfcnNzaV9wZXJjZW50YWdlW3JmcGF0aF0gPQorCQkJCSAgICBydGxwcml2LT5zdGF0cy5yeF9yc3NpX3BlcmNlbnRhZ2VbcmZwYXRoXQorCQkJCSAgICArIDE7CisJCQl9IGVsc2UgeworCQkJCXJ0bHByaXYtPnN0YXRzLnJ4X3Jzc2lfcGVyY2VudGFnZVtyZnBhdGhdID0KKwkJCQkgICAgKChydGxwcml2LT5zdGF0cy5yeF9yc3NpX3BlcmNlbnRhZ2VbcmZwYXRoXQorCQkJCSAgICAqIChSWF9TTU9PVEhfRkFDVE9SIC0gMSkpICsKKwkJCQkgICAgKHBzdGF0cy0+cnhfbWltb19zaWduYWxzdHJlbmd0aFtyZnBhdGhdKSkgLworCQkJCSAgICAoUlhfU01PT1RIX0ZBQ1RPUik7CisJCQl9CisKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgX3J0bDkyc2VfdXBkYXRlX3J4c2lnbmFsc3RhdGlzdGljcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJICAgICAgIHN0cnVjdCBydGxfc3RhdHMgKnBzdGF0cykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJaW50IHdlaWdodGluZyA9IDA7CisKKwlpZiAocnRscHJpdi0+c3RhdHMucmVjdl9zaWduYWxfcG93ZXIgPT0gMCkKKwkJcnRscHJpdi0+c3RhdHMucmVjdl9zaWduYWxfcG93ZXIgPSBwc3RhdHMtPnJlY3ZzaWduYWxwb3dlcjsKKworCWlmIChwc3RhdHMtPnJlY3ZzaWduYWxwb3dlciA+IHJ0bHByaXYtPnN0YXRzLnJlY3Zfc2lnbmFsX3Bvd2VyKQorCQl3ZWlnaHRpbmcgPSA1OworCWVsc2UgaWYgKHBzdGF0cy0+cmVjdnNpZ25hbHBvd2VyIDwgcnRscHJpdi0+c3RhdHMucmVjdl9zaWduYWxfcG93ZXIpCisJCXdlaWdodGluZyA9ICgtNSk7CisKKwlydGxwcml2LT5zdGF0cy5yZWN2X3NpZ25hbF9wb3dlciA9IChydGxwcml2LT5zdGF0cy5yZWN2X3NpZ25hbF9wb3dlciAqIDUKKwkJCQkJICAgKyBwc3RhdHMtPnJlY3ZzaWduYWxwb3dlciArCisJCQkJCSAgIHdlaWdodGluZykgLyA2OworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJzZV9wcm9jZXNzX3B3ZGIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICBzdHJ1Y3QgcnRsX3N0YXRzICpwc3RhdHMpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJbG9uZyB1bmRlY19zbV9wd2RiID0gMDsKKworCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQlyZXR1cm47CisJfSBlbHNlIHsKKwkJdW5kZWNfc21fcHdkYiA9CisJCSAgICBydGxwcml2LT5kbS51bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiOworCX0KKworCWlmIChwc3RhdHMtPnBhY2tldF90b3NlbGYgfHwgcHN0YXRzLT5wYWNrZXRfYmVhY29uKSB7CisJCWlmICh1bmRlY19zbV9wd2RiIDwgMCkKKwkJCXVuZGVjX3NtX3B3ZGIgPSBwc3RhdHMtPnJ4X3B3ZGJfYWxsOworCisJCWlmIChwc3RhdHMtPnJ4X3B3ZGJfYWxsID4gKHUzMikgdW5kZWNfc21fcHdkYikgeworCQkJdW5kZWNfc21fcHdkYiA9CisJCQkgICAgKCgodW5kZWNfc21fcHdkYikgKgorCQkJICAgIChSWF9TTU9PVEhfRkFDVE9SIC0gMSkpICsKKwkJCSAgICAocHN0YXRzLT5yeF9wd2RiX2FsbCkpIC8gKFJYX1NNT09USF9GQUNUT1IpOworCisJCQl1bmRlY19zbV9wd2RiID0gdW5kZWNfc21fcHdkYiArIDE7CisJCX0gZWxzZSB7CisJCQl1bmRlY19zbV9wd2RiID0gKCgodW5kZWNfc21fcHdkYikgKgorCQkJICAgICAgKFJYX1NNT09USF9GQUNUT1IgLSAxKSkgKyAocHN0YXRzLT5yeF9wd2RiX2FsbCkpIC8KKwkJCSAgICAgIChSWF9TTU9PVEhfRkFDVE9SKTsKKwkJfQorCisJCXJ0bHByaXYtPmRtLnVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPSB1bmRlY19zbV9wd2RiOworCQlfcnRsOTJzZV91cGRhdGVfcnhzaWduYWxzdGF0aXN0aWNzKGh3LCBwc3RhdHMpOworCX0KK30KKworc3RhdGljIHZvaWQgcnRsXzkyc19wcm9jZXNzX3N0cmVhbXMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgIHN0cnVjdCBydGxfc3RhdHMgKnBzdGF0cykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTMyIHN0cmVhbTsKKworCWZvciAoc3RyZWFtID0gMDsgc3RyZWFtIDwgMjsgc3RyZWFtKyspIHsKKwkJaWYgKHBzdGF0cy0+cnhfbWltb19zaWduYWxxdWFsaXR5W3N0cmVhbV0gIT0gLTEpIHsKKwkJCWlmIChydGxwcml2LT5zdGF0cy5yeF9ldm1fcGVyY2VudGFnZVtzdHJlYW1dID09IDApIHsKKwkJCQlydGxwcml2LT5zdGF0cy5yeF9ldm1fcGVyY2VudGFnZVtzdHJlYW1dID0KKwkJCQkgICAgcHN0YXRzLT5yeF9taW1vX3NpZ25hbHF1YWxpdHlbc3RyZWFtXTsKKwkJCX0KKworCQkJcnRscHJpdi0+c3RhdHMucnhfZXZtX3BlcmNlbnRhZ2Vbc3RyZWFtXSA9CisJCQkgICAgKChydGxwcml2LT5zdGF0cy5yeF9ldm1fcGVyY2VudGFnZVtzdHJlYW1dICoKKwkJCQkJKFJYX1NNT09USF9GQUNUT1IgLSAxKSkgKworCQkJICAgICAocHN0YXRzLT5yeF9taW1vX3NpZ25hbHF1YWxpdHlbc3RyZWFtXSAqCisJCQkJCTEpKSAvIChSWF9TTU9PVEhfRkFDVE9SKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgX3J0bDkyc2VfcHJvY2Vzc191aV9saW5rX3F1YWxpdHkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSAgICAgc3RydWN0IHJ0bF9zdGF0cyAqcHN0YXRzKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1MzIgbGFzdF9ldm0gPSAwLCB0bXB2YWw7CisKKwlpZiAocHN0YXRzLT5zaWduYWxxdWFsaXR5ICE9IDApIHsKKwkJaWYgKHBzdGF0cy0+cGFja2V0X3Rvc2VsZiB8fCBwc3RhdHMtPnBhY2tldF9iZWFjb24pIHsKKworCQkJaWYgKHJ0bHByaXYtPnN0YXRzLnVpX2xpbmtfcXVhbGl0eS50b3RhbF9udW0rKyA+PQorCQkJICAgIFBIWV9MSU5LUVVBTElUWV9TTElEX1dJTl9NQVgpIHsKKwkJCQlydGxwcml2LT5zdGF0cy51aV9saW5rX3F1YWxpdHkudG90YWxfbnVtID0KKwkJCQkgICAgUEhZX0xJTktRVUFMSVRZX1NMSURfV0lOX01BWDsKKwkJCQlsYXN0X2V2bSA9CisJCQkJICAgIHJ0bHByaXYtPnN0YXRzLnVpX2xpbmtfcXVhbGl0eS5lbGVtZW50c1sKKwkJCQkgICAgcnRscHJpdi0+c3RhdHMudWlfbGlua19xdWFsaXR5LmluZGV4XTsKKwkJCQlydGxwcml2LT5zdGF0cy51aV9saW5rX3F1YWxpdHkudG90YWxfdmFsIC09CisJCQkJICAgIGxhc3RfZXZtOworCQkJfQorCisJCQlydGxwcml2LT5zdGF0cy51aV9saW5rX3F1YWxpdHkudG90YWxfdmFsICs9CisJCQkgICAgcHN0YXRzLT5zaWduYWxxdWFsaXR5OworCQkJcnRscHJpdi0+c3RhdHMudWlfbGlua19xdWFsaXR5LmVsZW1lbnRzWworCQkJCXJ0bHByaXYtPnN0YXRzLnVpX2xpbmtfcXVhbGl0eS5pbmRleCsrXSA9CisJCQkgICAgcHN0YXRzLT5zaWduYWxxdWFsaXR5OworCisJCQlpZiAocnRscHJpdi0+c3RhdHMudWlfbGlua19xdWFsaXR5LmluZGV4ID49CisJCQkgICAgUEhZX0xJTktRVUFMSVRZX1NMSURfV0lOX01BWCkKKwkJCQlydGxwcml2LT5zdGF0cy51aV9saW5rX3F1YWxpdHkuaW5kZXggPSAwOworCisJCQl0bXB2YWwgPSBydGxwcml2LT5zdGF0cy51aV9saW5rX3F1YWxpdHkudG90YWxfdmFsIC8KKwkJCSAgICBydGxwcml2LT5zdGF0cy51aV9saW5rX3F1YWxpdHkudG90YWxfbnVtOworCQkJcnRscHJpdi0+c3RhdHMuc2lnbmFsX3F1YWxpdHkgPSB0bXB2YWw7CisKKwkJCXJ0bHByaXYtPnN0YXRzLmxhc3Rfc2lnc3RyZW5ndGhfaW5wZXJjZW50ID0gdG1wdmFsOworCisJCQlydGxfOTJzX3Byb2Nlc3Nfc3RyZWFtcyhodywgcHN0YXRzKTsKKworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBfcnRsOTJzZV9wcm9jZXNzX3BoeWluZm8oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICB1OCAqYnVmZmVyLAorCQkJCSAgICAgc3RydWN0IHJ0bF9zdGF0cyAqcGN1cnJlbnRfc3RhdHMpCit7CisKKwlpZiAoIXBjdXJyZW50X3N0YXRzLT5wYWNrZXRfbWF0Y2hic3NpZCAmJgorCSAgICAhcGN1cnJlbnRfc3RhdHMtPnBhY2tldF9iZWFjb24pCisJCXJldHVybjsKKworCV9ydGw5MnNlX3Byb2Nlc3NfdWlfcnNzaShodywgcGN1cnJlbnRfc3RhdHMpOworCV9ydGw5MnNlX3Byb2Nlc3NfcHdkYihodywgcGN1cnJlbnRfc3RhdHMpOworCV9ydGw5MnNlX3Byb2Nlc3NfdWlfbGlua19xdWFsaXR5KGh3LCBwY3VycmVudF9zdGF0cyk7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MnNlX3RyYW5zbGF0ZV9yeF9zaWduYWxfc3R1ZmYoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCXN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBydGxfc3RhdHMgKnBzdGF0cywKKwkJdTggKnBkZXNjLCBzdHJ1Y3QgcnhfZndpbmZvICpwX2RydmluZm8pCit7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX2VmdXNlICpydGxlZnVzZSA9IHJ0bF9lZnVzZShydGxfcHJpdihodykpOworCisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwl1OCAqdG1wX2J1ZjsKKwl1OCAqcHJhZGRyOworCXU4ICpwc2FkZHI7CisJX19sZTE2IGZjOworCXUxNiB0eXBlLCBjZmM7CisJYm9vbCBwYWNrZXRfbWF0Y2hic3NpZCwgcGFja2V0X3Rvc2VsZiwgcGFja2V0X2JlYWNvbjsKKworCXRtcF9idWYgPSBza2ItPmRhdGEgKyBwc3RhdHMtPnJ4X2RydmluZm9fc2l6ZSArIHBzdGF0cy0+cnhfYnVmc2hpZnQ7CisKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKil0bXBfYnVmOworCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOworCWNmYyA9IGxlMTZfdG9fY3B1KGZjKTsKKwl0eXBlID0gV0xBTl9GQ19HRVRfVFlQRShmYyk7CisJcHJhZGRyID0gaGRyLT5hZGRyMTsKKwlwc2FkZHIgPSBoZHItPmFkZHIyOworCisJcGFja2V0X21hdGNoYnNzaWQgPSAoKElFRUU4MDIxMV9GVFlQRV9DVEwgIT0gdHlwZSkgJiYKKwkgICAgICghY29tcGFyZV9ldGhlcl9hZGRyKG1hYy0+YnNzaWQsIChjZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTKSA/CisJCQloZHItPmFkZHIxIDogKGNmYyAmIElFRUU4MDIxMV9GQ1RMX0ZST01EUykgPworCQkJaGRyLT5hZGRyMiA6IGhkci0+YWRkcjMpKSAmJiAoIXBzdGF0cy0+aHdlcnJvcikgJiYKKwkJCSghcHN0YXRzLT5jcmMpICYmICghcHN0YXRzLT5pY3YpKTsKKworCXBhY2tldF90b3NlbGYgPSBwYWNrZXRfbWF0Y2hic3NpZCAmJgorCSAgICAoIWNvbXBhcmVfZXRoZXJfYWRkcihwcmFkZHIsIHJ0bGVmdXNlLT5kZXZfYWRkcikpOworCisJaWYgKGllZWU4MDIxMV9pc19iZWFjb24oZmMpKQorCQlwYWNrZXRfYmVhY29uID0gdHJ1ZTsKKworCV9ydGw5MnNlX3F1ZXJ5X3J4cGh5c3RhdHVzKGh3LCBwc3RhdHMsIHBkZXNjLCBwX2RydmluZm8sCisJCQlwYWNrZXRfbWF0Y2hic3NpZCwgcGFja2V0X3Rvc2VsZiwgcGFja2V0X2JlYWNvbik7CisJX3J0bDkyc2VfcHJvY2Vzc19waHlpbmZvKGh3LCB0bXBfYnVmLCBwc3RhdHMpOworfQorCitib29sIHJ0bDkyc2VfcnhfcXVlcnlfZGVzYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHJ0bF9zdGF0cyAqc3RhdHMsCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzLCB1OCAqcGRlc2MsCisJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCByeF9md2luZm8gKnBfZHJ2aW5mbzsKKwl1MzIgcGh5c3RhdHVzID0gKHUzMilHRVRfUlhfU1RBVFVTX0RFU0NfUEhZX1NUQVRVUyhwZGVzYyk7CisKKwlzdGF0cy0+bGVuZ3RoID0gKHUxNilHRVRfUlhfU1RBVFVTX0RFU0NfUEtUX0xFTihwZGVzYyk7CisJc3RhdHMtPnJ4X2RydmluZm9fc2l6ZSA9ICh1OClHRVRfUlhfU1RBVFVTX0RFU0NfRFJWSU5GT19TSVpFKHBkZXNjKSAqIDg7CisJc3RhdHMtPnJ4X2J1ZnNoaWZ0ID0gKHU4KShHRVRfUlhfU1RBVFVTX0RFU0NfU0hJRlQocGRlc2MpICYgMHgwMyk7CisJc3RhdHMtPmljdiA9ICh1MTYpR0VUX1JYX1NUQVRVU19ERVNDX0lDVihwZGVzYyk7CisJc3RhdHMtPmNyYyA9ICh1MTYpR0VUX1JYX1NUQVRVU19ERVNDX0NSQzMyKHBkZXNjKTsKKwlzdGF0cy0+aHdlcnJvciA9ICh1MTYpKHN0YXRzLT5jcmMgfCBzdGF0cy0+aWN2KTsKKwlzdGF0cy0+ZGVjcnlwdGVkID0gIUdFVF9SWF9TVEFUVVNfREVTQ19TV0RFQyhwZGVzYyk7CisKKwlzdGF0cy0+cmF0ZSA9ICh1OClHRVRfUlhfU1RBVFVTX0RFU0NfUlhfTUNTKHBkZXNjKTsKKwlzdGF0cy0+c2hvcnRwcmVhbWJsZSA9ICh1MTYpR0VUX1JYX1NUQVRVU19ERVNDX1NQTENQKHBkZXNjKTsKKwlzdGF0cy0+aXNhbXBkdSA9IChib29sKShHRVRfUlhfU1RBVFVTX0RFU0NfUEFHR1IocGRlc2MpID09IDEpOworCXN0YXRzLT50aW1lc3RhbXBfbG93ID0gR0VUX1JYX1NUQVRVU19ERVNDX1RTRkwocGRlc2MpOworCXN0YXRzLT5yeF9pczQwTWh6cGFja2V0ID0gKGJvb2wpR0VUX1JYX1NUQVRVU19ERVNDX0JXKHBkZXNjKTsKKworCWlmIChzdGF0cy0+aHdlcnJvcikKKwkJcmV0dXJuIGZhbHNlOworCisJcnhfc3RhdHVzLT5mcmVxID0gaHctPmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXE7CisJcnhfc3RhdHVzLT5iYW5kID0gaHctPmNvbmYuY2hhbm5lbC0+YmFuZDsKKworCWlmIChHRVRfUlhfU1RBVFVTX0RFU0NfQ1JDMzIocGRlc2MpKQorCQlyeF9zdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19GQUlMRURfRkNTX0NSQzsKKworCWlmICghR0VUX1JYX1NUQVRVU19ERVNDX1NXREVDKHBkZXNjKSkKKwkJcnhfc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfREVDUllQVEVEOworCisJaWYgKEdFVF9SWF9TVEFUVVNfREVTQ19CVyhwZGVzYykpCisJCXJ4X3N0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHXzQwTUhaOworCisJaWYgKEdFVF9SWF9TVEFUVVNfREVTQ19SWF9IVChwZGVzYykpCisJCXJ4X3N0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX0hUOworCisJcnhfc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfTUFDVElNRV9NUERVOworCisJaWYgKHN0YXRzLT5kZWNyeXB0ZWQpCisJCXJ4X3N0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX0RFQ1JZUFRFRDsKKworCXJ4X3N0YXR1cy0+cmF0ZV9pZHggPSBfcnRsOTJzZV9yYXRlX21hcHBpbmcoKGJvb2wpCisJCQlHRVRfUlhfU1RBVFVTX0RFU0NfUlhfSFQocGRlc2MpLAorCQkJKHU4KUdFVF9SWF9TVEFUVVNfREVTQ19SWF9NQ1MocGRlc2MpLAorCQkJKGJvb2wpR0VUX1JYX1NUQVRVU19ERVNDX1BBR0dSKHBkZXNjKSk7CisKKworCXJ4X3N0YXR1cy0+bWFjdGltZSA9IEdFVF9SWF9TVEFUVVNfREVTQ19UU0ZMKHBkZXNjKTsKKwlpZiAocGh5c3RhdHVzID09IHRydWUpIHsKKwkJcF9kcnZpbmZvID0gKHN0cnVjdCByeF9md2luZm8gKikoc2tiLT5kYXRhICsKKwkJCQkJCSBzdGF0cy0+cnhfYnVmc2hpZnQpOworCQlfcnRsOTJzZV90cmFuc2xhdGVfcnhfc2lnbmFsX3N0dWZmKGh3LCBza2IsIHN0YXRzLCBwZGVzYywKKwkJCQkJCSAgIHBfZHJ2aW5mbyk7CisJfQorCisJLypyeF9zdGF0dXMtPnF1YWwgPSBzdGF0cy0+c2lnbmFsOyAqLworCXJ4X3N0YXR1cy0+c2lnbmFsID0gc3RhdHMtPnJzc2kgKyAxMDsKKwkvKnJ4X3N0YXR1cy0+bm9pc2UgPSAtc3RhdHMtPm5vaXNlOyAqLworCisJcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgcnRsOTJzZV90eF9maWxsX2Rlc2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsIHU4ICpwZGVzY190eCwKKwkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQl1OCBod19xdWV1ZSwgc3RydWN0IHJ0bF90Y2JfZGVzYyAqcHRjYl9kZXNjKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhID0gaW5mby0+Y29udHJvbC5zdGE7CisJdTggKnBkZXNjID0gKHU4ICopIHBkZXNjX3R4OworCXUxNiBzZXFfbnVtYmVyOworCV9fbGUxNiBmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKKwl1OCByZXNlcnZlZF9tYWNpZCA9IDA7CisJdTggZndfcXNlbCA9IF9ydGw5MnNlX21hcF9od3F1ZXVlX3RvX2Z3cXVldWUoc2tiLCBod19xdWV1ZSk7CisJYm9vbCBmaXJzdHNlZyA9ICghKGhkci0+c2VxX2N0cmwgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfU0NUTF9GUkFHKSkpOworCWJvb2wgbGFzdHNlZyA9ICghKGhkci0+ZnJhbWVfY29udHJvbCAmCisJCQljcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9NT1JFRlJBR1MpKSk7CisJZG1hX2FkZHJfdCBtYXBwaW5nID0gcGNpX21hcF9zaW5nbGUocnRscGNpLT5wZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLAorCQkgICAgUENJX0RNQV9UT0RFVklDRSk7CisJdTggYndfNDAgPSAwOworCisJaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKKwkJYndfNDAgPSBtYWMtPmJ3XzQwOworCX0gZWxzZSBpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkJbWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwkJaWYgKHN0YSkKKwkJCWJ3XzQwID0gc3RhLT5odF9jYXAuY2FwICYKKwkJCQkgICAgSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDA7CisJfQorCisJc2VxX251bWJlciA9IChsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKSAmIElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNDsKKworCXJ0bF9nZXRfdGNiX2Rlc2MoaHcsIGluZm8sIHN0YSwgc2tiLCBwdGNiX2Rlc2MpOworCisJQ0xFQVJfUENJX1RYX0RFU0NfQ09OVEVOVChwZGVzYywgVFhfREVTQ19TSVpFX1JUTDgxOTJTKTsKKworCWlmIChmaXJzdHNlZykgeworCQlpZiAocnRscHJpdi0+ZG0udXNlcmFtYXNrKSB7CisJCQkvKiBzZXQgdHhkZXNjIG1hY0lkICovCisJCQlpZiAocHRjYl9kZXNjLT5tYWNfaWQgPCAzMikgeworCQkJCVNFVF9UWF9ERVNDX01BQ0lEKHBkZXNjLCBwdGNiX2Rlc2MtPm1hY19pZCk7CisJCQkJcmVzZXJ2ZWRfbWFjaWQgfD0gcHRjYl9kZXNjLT5tYWNfaWQ7CisJCQl9CisJCX0KKwkJU0VUX1RYX0RFU0NfUlNWRF9NQUNJRChwZGVzYywgcmVzZXJ2ZWRfbWFjaWQpOworCisJCVNFVF9UWF9ERVNDX1RYSFQocGRlc2MsICgocHRjYl9kZXNjLT5od19yYXRlID49CisJCQkJIERFU0M5MlNfUkFURU1DUzApID8gMSA6IDApKTsKKworCQlpZiAocnRsaGFsLT52ZXJzaW9uID09IFZFUlNJT05fODE5MlNfQUNVVCkgeworCQkJaWYgKHB0Y2JfZGVzYy0+aHdfcmF0ZSA9PSBERVNDOTJTX1JBVEUxTSB8fAorCQkJCXB0Y2JfZGVzYy0+aHdfcmF0ZSAgPT0gREVTQzkyU19SQVRFMk0gfHwKKwkJCQlwdGNiX2Rlc2MtPmh3X3JhdGUgPT0gREVTQzkyU19SQVRFNV81TSB8fAorCQkJCXB0Y2JfZGVzYy0+aHdfcmF0ZSA9PSBERVNDOTJTX1JBVEUxMU0pIHsKKwkJCQlwdGNiX2Rlc2MtPmh3X3JhdGUgPSBERVNDOTJTX1JBVEUxMk07CisJCQl9CisJCX0KKworCQlTRVRfVFhfREVTQ19UWF9SQVRFKHBkZXNjLCBwdGNiX2Rlc2MtPmh3X3JhdGUpOworCisJCWlmIChwdGNiX2Rlc2MtPnVzZV9zaG9ydGdpIHx8IHB0Y2JfZGVzYy0+dXNlX3Nob3J0cHJlYW1ibGUpCisJCQlTRVRfVFhfREVTQ19UWF9TSE9SVChwZGVzYywgMCk7CisKKwkJLyogQWdncmVnYXRpb24gcmVsYXRlZCAqLworCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKQorCQkJU0VUX1RYX0RFU0NfQUdHX0VOQUJMRShwZGVzYywgMSk7CisKKwkJLyogRm9yIEFNUERVLCB3ZSBtdXN0IGluc2VydCBTU04gaW50byBUWF9ERVNDICovCisJCVNFVF9UWF9ERVNDX1NFUShwZGVzYywgc2VxX251bWJlcik7CisKKwkJLyogUHJvdGVjdGlvbiBtb2RlIHJlbGF0ZWQgKi8KKwkJLyogRm9yIDkyUywgaWYgUlRTL0NUUyBhcmUgc2V0LCBIVyB3aWxsIGV4ZWN1dGUgUlRTLiAqLworCQkvKiBXZSBjaG9vc2Ugb25seSBvbmUgcHJvdGVjdGlvbiBtb2RlIHRvIGV4ZWN1dGUgKi8KKwkJU0VUX1RYX0RFU0NfUlRTX0VOQUJMRShwZGVzYywgKChwdGNiX2Rlc2MtPnJ0c19lbmFibGUgJiYKKwkJCQkhcHRjYl9kZXNjLT5jdHNfZW5hYmxlKSA/IDEgOiAwKSk7CisJCVNFVF9UWF9ERVNDX0NUU19FTkFCTEUocGRlc2MsICgocHRjYl9kZXNjLT5jdHNfZW5hYmxlKSA/CisJCQkJICAgICAgIDEgOiAwKSk7CisJCVNFVF9UWF9ERVNDX1JUU19TVEJDKHBkZXNjLCAoKHB0Y2JfZGVzYy0+cnRzX3N0YmMpID8gMSA6IDApKTsKKworCQlTRVRfVFhfREVTQ19SVFNfUkFURShwZGVzYywgcHRjYl9kZXNjLT5ydHNfcmF0ZSk7CisJCVNFVF9UWF9ERVNDX1JUU19CQU5EV0lEVEgocGRlc2MsIDApOworCQlTRVRfVFhfREVTQ19SVFNfU1VCX0NBUlJJRVIocGRlc2MsIHB0Y2JfZGVzYy0+cnRzX3NjKTsKKwkJU0VUX1RYX0RFU0NfUlRTX1NIT1JUKHBkZXNjLCAoKHB0Y2JfZGVzYy0+cnRzX3JhdGUgPD0KKwkJICAgICAgIERFU0M5MlNfUkFURTU0TSkgPworCQkgICAgICAgKHB0Y2JfZGVzYy0+cnRzX3VzZV9zaG9ydHByZWFtYmxlID8gMSA6IDApCisJCSAgICAgICA6IChwdGNiX2Rlc2MtPnJ0c191c2Vfc2hvcnRnaSA/IDEgOiAwKSkpOworCisKKwkJLyogU2V0IEJhbmR3aWR0aCBhbmQgc3ViLWNoYW5uZWwgc2V0dGluZ3MuICovCisJCWlmIChid180MCkgeworCQkJaWYgKHB0Y2JfZGVzYy0+cGFja2V0X2J3KSB7CisJCQkJU0VUX1RYX0RFU0NfVFhfQkFORFdJRFRIKHBkZXNjLCAxKTsKKwkJCQkvKiB1c2UgZHVwbGljYXRlZCBtb2RlICovCisJCQkJU0VUX1RYX0RFU0NfVFhfU1VCX0NBUlJJRVIocGRlc2MsIDApOworCQkJfSBlbHNlIHsKKwkJCQlTRVRfVFhfREVTQ19UWF9CQU5EV0lEVEgocGRlc2MsIDApOworCQkJCVNFVF9UWF9ERVNDX1RYX1NVQl9DQVJSSUVSKHBkZXNjLAorCQkJCQkJICAgbWFjLT5jdXJfNDBfcHJpbWVfc2MpOworCQkJfQorCQl9IGVsc2UgeworCQkJU0VUX1RYX0RFU0NfVFhfQkFORFdJRFRIKHBkZXNjLCAwKTsKKwkJCVNFVF9UWF9ERVNDX1RYX1NVQl9DQVJSSUVSKHBkZXNjLCAwKTsKKwkJfQorCisJCS8qIDMgRmlsbCBuZWNlc3NhcnkgZmllbGQgaW4gRmlyc3QgRGVzY3JpcHRvciAqLworCQkvKkRXT1JEIDAqLworCQlTRVRfVFhfREVTQ19MSU5JUChwZGVzYywgMCk7CisJCVNFVF9UWF9ERVNDX09GRlNFVChwZGVzYywgMzIpOworCQlTRVRfVFhfREVTQ19QS1RfU0laRShwZGVzYywgKHUxNikgc2tiLT5sZW4pOworCisJCS8qRFdPUkQgMSovCisJCVNFVF9UWF9ERVNDX1JBX0JSU1JfSUQocGRlc2MsIHB0Y2JfZGVzYy0+cmF0cl9pbmRleCk7CisKKwkJLyogRmlsbCBzZWN1cml0eSByZWxhdGVkICovCisJCWlmIChpbmZvLT5jb250cm9sLmh3X2tleSkgeworCQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5Y29uZjsKKworCQkJa2V5Y29uZiA9IGluZm8tPmNvbnRyb2wuaHdfa2V5OworCQkJc3dpdGNoIChrZXljb25mLT5jaXBoZXIpIHsKKwkJCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA6CisJCQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDoKKwkJCQlTRVRfVFhfREVTQ19TRUNfVFlQRShwZGVzYywgMHgxKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfVEtJUDoKKwkJCQlTRVRfVFhfREVTQ19TRUNfVFlQRShwZGVzYywgMHgyKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUDoKKwkJCQlTRVRfVFhfREVTQ19TRUNfVFlQRShwZGVzYywgMHgzKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJU0VUX1RYX0RFU0NfU0VDX1RZUEUocGRlc2MsIDB4MCk7CisJCQkJYnJlYWs7CisKKwkJCX0KKwkJfQorCisJCS8qIFNldCBQYWNrZXQgSUQgKi8KKwkJU0VUX1RYX0RFU0NfUEFDS0VUX0lEKHBkZXNjLCAwKTsKKworCQkvKiBXZSB3aWxsIGFzc2lnbiBtYWdlbWVudCBxdWV1ZSB0byBCSy4gKi8KKwkJU0VUX1RYX0RFU0NfUVVFVUVfU0VMKHBkZXNjLCBmd19xc2VsKTsKKworCQkvKiBBbHdhc3kgZW5hYmxlIGFsbCByYXRlIGZhbGxiYWNrIHJhbmdlICovCisJCVNFVF9UWF9ERVNDX0RBVEFfUkFURV9GQl9MSU1JVChwZGVzYywgMHgxRik7CisKKwkJLyogRml4OiBJIGRvbid0IGtvd24gd2h5IGh3IHVzZSA2LjVNIHRvIHR4IHdoZW4gc2V0IGl0ICovCisJCVNFVF9UWF9ERVNDX1VTRVJfUkFURShwZGVzYywKKwkJCQkgICAgICBwdGNiX2Rlc2MtPnVzZV9kcml2ZXJfcmF0ZSA/IDEgOiAwKTsKKworCQkvKiBTZXQgTk9OX1FPUyBiaXQuICovCisJCWlmICghaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkKKwkJCVNFVF9UWF9ERVNDX05PTl9RT1MocGRlc2MsIDEpOworCisJfQorCisJLyogRmlsbCBmaWVsZHMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gYmUgaW5pdGlhbGl6ZWQKKwkgKiBpbiBhbGwgb2YgdGhlIGRlc2NyaXB0b3JzICovCisJLypEV09SRCAwICovCisJU0VUX1RYX0RFU0NfRklSU1RfU0VHKHBkZXNjLCAoZmlyc3RzZWcgPyAxIDogMCkpOworCVNFVF9UWF9ERVNDX0xBU1RfU0VHKHBkZXNjLCAobGFzdHNlZyA/IDEgOiAwKSk7CisKKwkvKiBEV09SRCA3ICovCisJU0VUX1RYX0RFU0NfVFhfQlVGRkVSX1NJWkUocGRlc2MsICh1MTYpIHNrYi0+bGVuKTsKKworCS8qIERPV1JEIDggKi8KKwlTRVRfVFhfREVTQ19UWF9CVUZGRVJfQUREUkVTUyhwZGVzYywgY3B1X3RvX2xlMzIobWFwcGluZykpOworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRU5ELCBEQkdfVFJBQ0UsICgiXG4iKSk7Cit9CisKK3ZvaWQgcnRsOTJzZV90eF9maWxsX2NtZGRlc2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpwZGVzYywKKwlib29sIGZpcnN0c2VnLCBib29sIGxhc3RzZWcsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfdGNiX2Rlc2MgKnRjYl9kZXNjID0gKHN0cnVjdCBydGxfdGNiX2Rlc2MgKikoc2tiLT5jYik7CisKKwlkbWFfYWRkcl90IG1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZShydGxwY2ktPnBkZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCisJCQlQQ0lfRE1BX1RPREVWSUNFKTsKKworICAgIC8qIENsZWFyIGFsbCBzdGF0dXMJKi8KKwlDTEVBUl9QQ0lfVFhfREVTQ19DT05URU5UKHBkZXNjLCBUWF9DTURERVNDX1NJWkVfUlRMODE5MlMpOworCisJLyogVGhpcyBiaXQgaW5kaWNhdGUgdGhpcyBwYWNrZXQgaXMgdXNlZCBmb3IgRlcgZG93bmxvYWQuICovCisJaWYgKHRjYl9kZXNjLT5jbWRfb3JfaW5pdCA9PSBERVNDX1BBQ0tFVF9UWVBFX0lOSVQpIHsKKwkJLyogRm9yIGZpcm13YXJlIGRvd25sYW9kIHdlIG9ubHkgbmVlZCB0byBzZXQgTElOSVAgKi8KKwkJU0VUX1RYX0RFU0NfTElOSVAocGRlc2MsIHRjYl9kZXNjLT5sYXN0X2luaXBrdCk7CisKKwkJLyogOTJTRSBtdXN0IHNldCBhcyAxIGZvciBmaXJtd2FyZSBkb3dubG9hZCBIVyBETUEgZXJyb3IgKi8KKwkJU0VUX1RYX0RFU0NfRklSU1RfU0VHKHBkZXNjLCAxKTsKKwkJU0VUX1RYX0RFU0NfTEFTVF9TRUcocGRlc2MsIDEpOworCisJCS8qIDkyU0UgbmVlZCBub3QgdG8gc2V0IFRYIHBhY2tldCBzaXplIHdoZW4gZmlybXdhcmUgZG93bmxvYWQgKi8KKwkJU0VUX1RYX0RFU0NfUEtUX1NJWkUocGRlc2MsICh1MTYpKHNrYi0+bGVuKSk7CisJCVNFVF9UWF9ERVNDX1RYX0JVRkZFUl9TSVpFKHBkZXNjLCAodTE2KShza2ItPmxlbikpOworCQlTRVRfVFhfREVTQ19UWF9CVUZGRVJfQUREUkVTUyhwZGVzYywgY3B1X3RvX2xlMzIobWFwcGluZykpOworCisJCVNFVF9UWF9ERVNDX09XTihwZGVzYywgMSk7CisJfSBlbHNlIHsgLyogSDJDIENvbW1hbmQgRGVzYyBmb3JtYXQgKEhvc3QgVFhDTUQpICovCisJCS8qIDkyU0UgbXVzdCBzZXQgYXMgMSBmb3IgZmlybXdhcmUgZG93bmxvYWQgSFcgRE1BIGVycm9yICovCisJCVNFVF9UWF9ERVNDX0ZJUlNUX1NFRyhwZGVzYywgMSk7CisJCVNFVF9UWF9ERVNDX0xBU1RfU0VHKHBkZXNjLCAxKTsKKworCQlTRVRfVFhfREVTQ19PRkZTRVQocGRlc2MsIDB4MjApOworCisJCS8qIEJ1ZmZlciBzaXplICsgY29tbWFuZCBoZWFkZXIgKi8KKwkJU0VUX1RYX0RFU0NfUEtUX1NJWkUocGRlc2MsICh1MTYpKHNrYi0+bGVuKSk7CisJCS8qIEZpeGVkIHF1ZXVlIG9mIEgyQyBjb21tYW5kICovCisJCVNFVF9UWF9ERVNDX1FVRVVFX1NFTChwZGVzYywgMHgxMyk7CisKKwkJU0VUX0JJVFNfVE9fTEVfNEJZVEUoc2tiLT5kYXRhLCAyNCwgNywgcnRsaGFsLT5oMmNfdHhjbWRfc2VxKTsKKworCQlTRVRfVFhfREVTQ19UWF9CVUZGRVJfU0laRShwZGVzYywgKHUxNikoc2tiLT5sZW4pKTsKKwkJU0VUX1RYX0RFU0NfVFhfQlVGRkVSX0FERFJFU1MocGRlc2MsIGNwdV90b19sZTMyKG1hcHBpbmcpKTsKKworCQlTRVRfVFhfREVTQ19PV04ocGRlc2MsIDEpOworCisJfQorfQorCit2b2lkIHJ0bDkyc2Vfc2V0X2Rlc2ModTggKnBkZXNjLCBib29sIGlzdHgsIHU4IGRlc2NfbmFtZSwgdTggKnZhbCkKK3sKKwlpZiAoaXN0eCA9PSB0cnVlKSB7CisJCXN3aXRjaCAoZGVzY19uYW1lKSB7CisJCWNhc2UgSFdfREVTQ19PV046CisJCQlTRVRfVFhfREVTQ19PV04ocGRlc2MsIDEpOworCQkJYnJlYWs7CisJCWNhc2UgSFdfREVTQ19UWF9ORVhUREVTQ19BRERSOgorCQkJU0VUX1RYX0RFU0NfTkVYVF9ERVNDX0FERFJFU1MocGRlc2MsICoodTMyICopIHZhbCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVJUX0FTU0VSVChmYWxzZSwgKCJFUlIgdHhkZXNjIDolZCBub3QgcHJvY2Vzc1xuIiwKKwkJCQkgIGRlc2NfbmFtZSkpOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlzd2l0Y2ggKGRlc2NfbmFtZSkgeworCQljYXNlIEhXX0RFU0NfUlhPV046CisJCQlTRVRfUlhfU1RBVFVTX0RFU0NfT1dOKHBkZXNjLCAxKTsKKwkJCWJyZWFrOworCQljYXNlIEhXX0RFU0NfUlhCVUZGX0FERFI6CisJCQlTRVRfUlhfU1RBVFVTX19ERVNDX0JVRkZfQUREUihwZGVzYywgKih1MzIgKikgdmFsKTsKKwkJCWJyZWFrOworCQljYXNlIEhXX0RFU0NfUlhQS1RfTEVOOgorCQkJU0VUX1JYX1NUQVRVU19ERVNDX1BLVF9MRU4ocGRlc2MsICoodTMyICopIHZhbCk7CisJCQlicmVhazsKKwkJY2FzZSBIV19ERVNDX1JYRVJPOgorCQkJU0VUX1JYX1NUQVRVU19ERVNDX0VPUihwZGVzYywgMSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVJUX0FTU0VSVChmYWxzZSwgKCJFUlIgcnhkZXNjIDolZCBub3QgcHJvY2Vzc1xuIiwKKwkJCQkgIGRlc2NfbmFtZSkpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3UzMiBydGw5MnNlX2dldF9kZXNjKHU4ICpkZXNjLCBib29sIGlzdHgsIHU4IGRlc2NfbmFtZSkKK3sKKwl1MzIgcmV0ID0gMDsKKworCWlmIChpc3R4ID09IHRydWUpIHsKKwkJc3dpdGNoIChkZXNjX25hbWUpIHsKKwkJY2FzZSBIV19ERVNDX09XTjoKKwkJCXJldCA9IEdFVF9UWF9ERVNDX09XTihkZXNjKTsKKwkJCWJyZWFrOworCQljYXNlIEhXX0RFU0NfVFhCVUZGX0FERFI6CisJCQlyZXQgPSBHRVRfVFhfREVTQ19UWF9CVUZGRVJfQUREUkVTUyhkZXNjKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJUlRfQVNTRVJUKGZhbHNlLCAoIkVSUiB0eGRlc2MgOiVkIG5vdCBwcm9jZXNzXG4iLAorCQkJCSAgZGVzY19uYW1lKSk7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCXN3aXRjaCAoZGVzY19uYW1lKSB7CisJCWNhc2UgSFdfREVTQ19PV046CisJCQlyZXQgPSBHRVRfUlhfU1RBVFVTX0RFU0NfT1dOKGRlc2MpOworCQkJYnJlYWs7CisJCWNhc2UgSFdfREVTQ19SWFBLVF9MRU46CisJCQlyZXQgPSBHRVRfUlhfU1RBVFVTX0RFU0NfUEtUX0xFTihkZXNjKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJUlRfQVNTRVJUKGZhbHNlLCAoIkVSUiByeGRlc2MgOiVkIG5vdCBwcm9jZXNzXG4iLAorCQkJCSAgZGVzY19uYW1lKSk7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJ0bDkyc2VfdHhfcG9sbGluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggaHdfcXVldWUpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFRQX1BPTEwsIEJJVCgwKSA8PCAoaHdfcXVldWUpKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL3RyeC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvdHJ4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU4NjJjNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL3RyeC5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX1JFQUxURUtfUENJOTJTRV9UUlhfSF9fCisjZGVmaW5lIF9fUkVBTFRFS19QQ0k5MlNFX1RSWF9IX18KKwordm9pZCBydGw5MnNlX3R4X2ZpbGxfZGVzYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKKwkJCSAgdTggKnBkZXNjLCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCisJCQkgIHN0cnVjdCBza19idWZmICpza2IsIHU4IGh3X3F1ZXVlLAorCQkJICBzdHJ1Y3QgcnRsX3RjYl9kZXNjICpwdGNiX2Rlc2MpOwordm9pZCBydGw5MnNlX3R4X2ZpbGxfY21kZGVzYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnBkZXNjLCBib29sIGZpcnN0c2VnLAorCQkJICAgICBib29sIGxhc3RzZWcsIHN0cnVjdCBza19idWZmICpza2IpOworYm9vbCBydGw5MnNlX3J4X3F1ZXJ5X2Rlc2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBydGxfc3RhdHMgKnN0YXRzLAorCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cywgdTggKnBkZXNjLAorCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIHJ0bDkyc2Vfc2V0X2Rlc2ModTggKnBkZXNjLCBib29sIGlzdHgsIHU4IGRlc2NfbmFtZSwgdTggKnZhbCk7Cit1MzIgcnRsOTJzZV9nZXRfZGVzYyh1OCAqcGRlc2MsIGJvb2wgaXN0eCwgdTggZGVzY19uYW1lKTsKK3ZvaWQgcnRsOTJzZV90eF9wb2xsaW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBod19xdWV1ZSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS91c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvdXNiLmMKaW5kZXggZjVkODU3My4uYTkzNjdlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS91c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3VzYi5jCkBAIC04NTIsNiArODUyLDcgQEAKIAlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlzdHJ1Y3QgcnRsX3R4X2Rlc2MgKnBkZXNjID0gTlVMTDsKKwlzdHJ1Y3QgcnRsX3RjYl9kZXNjIHRjYl9kZXNjOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikoc2tiLT5kYXRhKTsKIAlfX2xlMTYgZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CiAJdTggKnBkYV9hZGRyID0gaGRyLT5hZGRyMTsKQEAgLTg2MCw4ICs4NjEsMTcgQEAKIAl1OCB0aWQgPSAwOwogCXUxNiBzZXFfbnVtYmVyID0gMDsKIAotCWlmIChpZWVlODAyMTFfaXNfbWdtdChmYykpCi0JCXJ0bF90eF9tZ210X3Byb2MoaHcsIHNrYik7CisJaWYgKGllZWU4MDIxMV9pc19hdXRoKGZjKSkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFTkQsIERCR19ETUVTRywgKCJNQUM4MDIxMV9MSU5LSU5HXG4iKSk7CisJCXJ0bF9pcHNfbmljX29uKGh3KTsKKwl9CisKKwlpZiAocnRscHJpdi0+cHNjLnN3X3BzX2VuYWJsZWQpIHsKKwkJaWYgKGllZWU4MDIxMV9pc19kYXRhKGZjKSAmJiAhaWVlZTgwMjExX2lzX251bGxmdW5jKGZjKSAmJgorCQkgICAgIWllZWU4MDIxMV9oYXNfcG0oZmMpKQorCQkJaGRyLT5mcmFtZV9jb250cm9sIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BNKTsKKwl9CisKIAlydGxfYWN0aW9uX3Byb2MoaHcsIHNrYiwgdHJ1ZSk7CiAJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKHBkYV9hZGRyKSkKIAkJcnRscHJpdi0+c3RhdHMudHhieXRlc211bHRpY2FzdCArPSBza2ItPmxlbjsKQEAgLTg3OCw3ICs4ODgsNyBAQAogCQlzZXFfbnVtYmVyIDw8PSA0OwogCX0KIAlydGxwcml2LT5jZmctPm9wcy0+ZmlsbF90eF9kZXNjKGh3LCBoZHIsICh1OCAqKXBkZXNjLCBpbmZvLCBza2IsCi0JCQkJCWh3X3F1ZXVlKTsKKwkJCQkJaHdfcXVldWUsICZ0Y2JfZGVzYyk7CiAJaWYgKCFpZWVlODAyMTFfaGFzX21vcmVmcmFncyhoZHItPmZyYW1lX2NvbnRyb2wpKSB7CiAJCWlmIChxYykKIAkJCW1hYy0+dGlkc1t0aWRdLnNlcV9udW1iZXIgPSBzZXFfbnVtYmVyOwpAQCAtODg3LDcgKzg5Nyw4IEBACiAJCXJ0bHByaXYtPmNmZy0+b3BzLT5sZWRfY29udHJvbChodywgTEVEX0NUTF9UWCk7CiB9CiAKLXN0YXRpYyBpbnQgcnRsX3VzYl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgcnRsX3VzYl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICAgc3RydWN0IHJ0bF90Y2JfZGVzYyAqZHVtbXkpCiB7CiAJc3RydWN0IHJ0bF91c2IgKnJ0bHVzYiA9IHJ0bF91c2JkZXYocnRsX3VzYnByaXYoaHcpKTsKIAlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS91c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvdXNiLmgKaW5kZXggYWJhZGZlOS4uZDJhNjNmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS91c2IuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3VzYi5oCkBAIC0zMSw2ICszMSw4IEBACiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAKKyNkZWZpbmUgUlRMX1JYX0RFU0NfU0laRQkJMjQKKwogI2RlZmluZSBSVExfVVNCX0RFVklDRSh2ZW5kLCBwcm9kLCBjZmcpIFwKIAkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSwgXAogCS5pZFZlbmRvciA9ICh2ZW5kKSwgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS93aWZpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3dpZmkuaAppbmRleCAwN2RiOTVmLi42OTMzOTVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3dpZmkuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3dpZmkuaApAQCAtNjgsNiArNjgsOCBAQAogI2RlZmluZSBRQlNTX0xPQURfU0laRQkJCQk1CiAjZGVmaW5lIE1BWF9XTU1FTEVfTEVOR1RICQkJNjQKIAorI2RlZmluZSBUT1RBTF9DQU1fRU5UUlkJCQkJMzIKKwogLypzbG90IHRpbWUgZm9yIDExZy4gKi8KICNkZWZpbmUgUlRMX1NMT1RfVElNRV85CQkJCTkKICNkZWZpbmUgUlRMX1NMT1RfVElNRV8yMAkJCTIwCkBAIC05NCw4ICs5NiwxMCBAQAogI2RlZmluZQlDSEFOTkVMX0dST1VQX01BWF81RwkJOQogI2RlZmluZSBDSEFOTkVMX01BWF9OVU1CRVJfMkcJCTE0CiAjZGVmaW5lIEFWR19USEVSTUFMX05VTQkJCTgKKyNkZWZpbmUgTUFYX1RJRF9DT1VOVAkJCTkKIAogLyogZm9yIGVhcmx5IG1vZGUgKi8KKyNkZWZpbmUgRkNTX0xFTgkJCQk0CiAjZGVmaW5lIEVNX0hEUl9MRU4JCQk4CiBlbnVtIGludGZfdHlwZSB7CiAJSU5URl9QQ0kgPSAwLApAQCAtMTU5LDYgKzE2Myw4IEBACiAoSVNfSEFSRFdBUkVfVFlQRV84MTkyREUocnRsaGFsKSB8fCBJU19IQVJEV0FSRV9UWVBFXzgxOTJEVShydGxoYWwpKQogI2RlZmluZQlJU19IQVJEV0FSRV9UWVBFXzg3MjMocnRsaGFsKQkJCVwKIChJU19IQVJEV0FSRV9UWVBFXzg3MjNFKHJ0bGhhbCkgfHwgSVNfSEFSRFdBUkVfVFlQRV84NzIzVShydGxoYWwpKQorI2RlZmluZSBJU19IQVJEV0FSRV9UWVBFXzg3MjNVKHJ0bGhhbCkJCQlcCisJKHJ0bGhhbC0+aHdfdHlwZSA9PSBIQVJEV0FSRV9UWVBFX1JUTDg3MjNVKQogCiBlbnVtIHNjYW5fb3BlcmF0aW9uX2JhY2t1cF9vcHQgewogCVNDQU5fT1BUX0JBQ0tVUCA9IDAsCkBAIC0yOTcsNiArMzAzLDkgQEAKIAlIV19WQVJfREFUQV9GSUxURVIsCiB9OwogCisjZGVmaW5lIEhXU0VUX01BWF9TSVpFCQkJCTEyOAorI2RlZmluZSBFRlVTRV9NQVhfU0VDVElPTgkJCTE2CisKIGVudW0gX1JUX01FRElBX1NUQVRVUyB7CiAJUlRfTUVESUFfRElTQ09OTkVDVCA9IDAsCiAJUlRfTUVESUFfQ09OTkVDVCA9IDEKQEAgLTc2Niw3ICs3NzUsNyBAQAogI2RlZmluZSBJUUtfTUFUUklYX1JFR19OVU0JOAogI2RlZmluZSBJUUtfTUFUUklYX1NFVFRJTkdTX05VTQkoMSArIDI0ICsgMjEpCiBzdHJ1Y3QgaXFrX21hdHJpeF9yZWdzIHsKLQlib29sIGJfaXFrX2RvbmU7CisJYm9vbCBpcWtfZG9uZTsKIAlsb25nIHZhbHVlWzFdW0lRS19NQVRSSVhfUkVHX05VTV07CiB9OwogCkBAIC04NDMsNiArODUyLDcgQEAKIAlib29sIGFwa19kb25lOwogCXUzMiByZWdfcmYzY1syXTsJLyogcGF0aEEgLyBwYXRoQiAgKi8KIAorCS8qIGJmc3luYyAqLwogCXU4IGZyYW1lc3luYzsKIAl1MzIgZnJhbWVzeW5jX2MzNDsKIApAQCAtODUyLDYgKzg2MiwxMCBAQAogfTsKIAogI2RlZmluZSBNQVhfVElEX0NPVU5UCQkJCTkKKyNkZWZpbmUgUlRMX0FHR19TVE9QCQkJCTAKKyNkZWZpbmUgUlRMX0FHR19QUk9HUkVTUwkJCTEKKyNkZWZpbmUgUlRMX0FHR19TVEFSVAkJCQkyCisjZGVmaW5lIFJUTF9BR0dfT1BFUkFUSU9OQUwJCQkzCiAjZGVmaW5lIFJUTF9BR0dfT0ZGCQkJCTAKICNkZWZpbmUgUlRMX0FHR19PTgkJCQkxCiAjZGVmaW5lIFJUTF9BR0dfRU1QVFlJTkdfSFdfUVVFVUVfQUREQkEJCTIKQEAgLTg3MSw2ICs4ODUsMTMgQEAKIAlzdHJ1Y3QgcnRsX2h0X2FnZyBhZ2c7CiB9OwogCitzdHJ1Y3QgcnRsX3N0YV9pbmZvIHsKKwl1OCByYXRyX2luZGV4OworCXU4IHdpcmVsZXNzX21vZGU7CisJdTggbWltb19wczsKKwlzdHJ1Y3QgcnRsX3RpZF9kYXRhIHRpZHNbTUFYX1RJRF9DT1VOVF07Cit9IF9fcGFja2VkOworCiBzdHJ1Y3QgcnRsX3ByaXY7CiBzdHJ1Y3QgcnRsX2lvIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CkBAIC04OTQsNiArOTE1LDcgQEAKIAl1MzIoKnJlYWQzMl9zeW5jKSAoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LCB1MzIgYWRkcik7CiAJaW50ICgqcmVhZE5fc3luYykgKHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiwgdTMyIGFkZHIsIHUxNiBsZW4sCiAJCQkgICAgdTggKnBkYXRhKTsKKwogfTsKIAogc3RydWN0IHJ0bF9tYWMgewpAQCAtOTE2LDYgKzkzOCw4IEBACiAJaW50IG5fY2hhbm5lbHM7CiAJaW50IG5fYml0cmF0ZXM7CiAKKwlib29sIG9mZmNoYW5fZGVsZXk7CisKIAkvKmZpbHRlcnMgKi8KIAl1MzIgcnhfY29uZjsKIAl1MTYgcnhfbWd0X2ZpbHRlcjsKQEAgLTEwMzIsNyArMTA1Niw5IEBACiAJZW51bSBydF9lbmNfYWxnIHBhaXJ3aXNlX2VuY19hbGdvcml0aG07CiAJLypFbmNyeXB0aW9uIEFsZ29yaXRobSBmb3IgQnJvY2FzdC9NdWx0aWNhc3QgKi8KIAllbnVtIHJ0X2VuY19hbGcgZ3JvdXBfZW5jX2FsZ29yaXRobTsKLQorCS8qQ2FtIEVudHJ5IEJpdG1hcCAqLworCXUzMiBod3NlY19jYW1fYml0bWFwOworCXU4IGh3c2VjX2NhbV9zdGFfYWRkcltUT1RBTF9DQU1fRU5UUlldW0VUSF9BTEVOXTsKIAkvKmxvY2FsIEtleSBidWZmZXIsIGluZHggMCBpcyBmb3IKIAkgICBwYWlyd2lzZSBrZXkgMS00IGlzIGZvciBhZ291cCBrZXkuICovCiAJdTgga2V5X2J1ZltLRVlfQlVGX1NJWkVdW01BWF9LRVlfTEVOXTsKQEAgLTEwNTMsNyArMTA3OSw3IEBACiAJYm9vbCBjdXJyZW50X3R1cmJvX2VkY2E7CiAJYm9vbCBpc19hbnlfbm9uYmVwa3RzOwkvKm91dCBkbSAqLwogCWJvb2wgaXNfY3VyX3JkbHN0YXRlOwotCWJvb2wgdHhwb3dlcl90cmFja2luZ0luaXQ7CisJYm9vbCB0eHBvd2VyX3RyYWNraW5naW5pdDsKIAlib29sIGRpc2FibGVfZnJhbWVidXJzdGluZzsKIAlib29sIGNja19pbmNoMTQ7CiAJYm9vbCB0eHBvd2VyX3RyYWNraW5nOwpAQCAtMTA3OSw3ICsxMTA1LDYgQEAKIAlib29sIGRpc2FibGVfdHhfaW50OwogCWNoYXIgb2ZkbV9pbmRleFsyXTsKIAljaGFyIGNja19pbmRleDsKLQl1OCBwb3dlcl9pbmRleF9iYWNrdXBbNl07CiB9OwogCiAjZGVmaW5lCUVGVVNFX01BWF9MT0dJQ0FMX1NJWkUJCQkyNTYKQEAgLTExNzUsNiArMTIwMCw3IEBACiAJICogb3RoZXJ3aXNlIE9mZnNldFs1NjBoXSA9IDB4MDAuCiAJICogKi8KIAlib29sIHN1cHBvcnRfYXNwbTsKKwogCWJvb2wgc3VwcG9ydF9iYWNrZG9vcjsKIAogCS8qZm9yIExQUyAqLwpAQCAtMTIwMSw3ICsxMjI3LDYgQEAKIAogCS8qanVzdCBmb3IgUENJRSBBU1BNICovCiAJdTggY29uc3RfYW1kcGNpX2FzcG07Ci0KIAlib29sIHB3cmRvd25fbW9kZTsKIAogCWVudW0gcmZfcHdyc3RhdGUgaW5hY3RpdmVfcHdyc3RhdGU7CkBAIC0xMjgyLDYgKzEzMDcsMTAgQEAKIAlib29sIGJ1c3l0cmFmZmljOwogCWJvb2wgaGlnaGVyX2J1c3l0cmFmZmljOwogCWJvb2wgaGlnaGVyX2J1c3lyeHRyYWZmaWM7CisKKwl1MzIgdGlkdHhfaW40cGVyaW9kW01BWF9USURfQ09VTlRdWzRdOworCXUzMiB0aWR0eF9pbnBlcmlvZFtNQVhfVElEX0NPVU5UXTsKKwlib29sIGhpZ2hlcl9idXN5dHh0cmFmZmljW01BWF9USURfQ09VTlRdOwogfTsKIAogc3RydWN0IHJ0bF90Y2JfZGVzYyB7CkBAIC0xMzQ0LDEzICsxMzczLDE1IEBACiAJCQkJICAgICAgIHUzMiBhZGRfbXNyLCB1MzIgcm1fbXNyKTsKIAl2b2lkICgqZ2V0X2h3X3JlZykgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCB2YXJpYWJsZSwgdTggKnZhbCk7CiAJdm9pZCAoKnNldF9od19yZWcpIChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggdmFyaWFibGUsIHU4ICp2YWwpOwotCXZvaWQgKCp1cGRhdGVfcmF0ZV90YWJsZSkgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwl2b2lkICgqdXBkYXRlX3JhdGVfdGJsKSAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1OCByc3NpX2xldmVsKTsKIAl2b2lkICgqdXBkYXRlX3JhdGVfbWFzaykgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCByc3NpX2xldmVsKTsKIAl2b2lkICgqZmlsbF90eF9kZXNjKSAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLCB1OCAqcGRlc2NfdHgsCiAJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCi0JCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcXVldWVfaW5kZXgpOwotCXZvaWQgKCpmaWxsX2Zha2VfdHhkZXNjKSAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICogcERlc2MsCisJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBod19xdWV1ZSwKKwkJCSAgICAgIHN0cnVjdCBydGxfdGNiX2Rlc2MgKnB0Y2JfZGVzYyk7CisJdm9pZCAoKmZpbGxfZmFrZV90eGRlc2MpIChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnBEZXNjLAogCQkJCSAgdTMyIGJ1ZmZlcl9sZW4sIGJvb2wgYklzUHNQb2xsKTsKIAl2b2lkICgqZmlsbF90eF9jbWRkZXNjKSAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpwZGVzYywKIAkJCQkgYm9vbCBmaXJzdHNlZywgYm9vbCBsYXN0c2VnLApAQCAtMTM3MCwxMCArMTQwMSwxMCBAQAogCQkJICAgICBlbnVtIGxlZF9jdGxfbW9kZSBsZWRhY3Rpb24pOwogCXZvaWQgKCpzZXRfZGVzYykgKHU4ICpwZGVzYywgYm9vbCBpc3R4LCB1OCBkZXNjX25hbWUsIHU4ICp2YWwpOwogCXUzMiAoKmdldF9kZXNjKSAodTggKnBkZXNjLCBib29sIGlzdHgsIHU4IGRlc2NfbmFtZSk7Ci0Jdm9pZCAoKnR4X3BvbGxpbmcpIChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdW5zaWduZWQgaW50IGh3X3F1ZXVlKTsKKwl2b2lkICgqdHhfcG9sbGluZykgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBod19xdWV1ZSk7CiAJdm9pZCAoKmVuYWJsZV9od19zZWMpIChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiAJdm9pZCAoKnNldF9rZXkpIChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGtleV9pbmRleCwKLQkJCSB1OCAqcF9tYWNhZGRyLCBib29sIGlzX2dyb3VwLCB1OCBlbmNfYWxnbywKKwkJCSB1OCAqbWFjYWRkciwgYm9vbCBpc19ncm91cCwgdTggZW5jX2FsZ28sCiAJCQkgYm9vbCBpc193ZXBrZXksIGJvb2wgY2xlYXJfYWxsKTsKIAl2b2lkICgqaW5pdF9zd19sZWRzKSAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogCXZvaWQgKCpkZWluaXRfc3dfbGVkcykgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKQEAgLTEzODQsNiArMTQxNSw3IEBACiAJCQkgIHUzMiByZWdhZGRyLCB1MzIgYml0bWFzayk7CiAJdm9pZCAoKnNldF9yZnJlZykgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIHJhZGlvX3BhdGggcmZwYXRoLAogCQkJICAgdTMyIHJlZ2FkZHIsIHUzMiBiaXRtYXNrLCB1MzIgZGF0YSk7CisJdm9pZCAoKmxpbmtlZF9zZXRfcmVnKSAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogCWJvb2wgKCpwaHlfcmY2MDUyX2NvbmZpZykgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIAl2b2lkICgqcGh5X3JmNjA1Ml9zZXRfY2NrX3R4cG93ZXIpIChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkJICAgIHU4ICpwb3dlcmxldmVsKTsKQEAgLTE0MDQsNyArMTQzNiw5IEBACiAJaW50ICgqYWRhcHRlcl9zdGFydCkgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIAl2b2lkICgqYWRhcHRlcl9zdG9wKSAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogCi0JaW50ICgqYWRhcHRlcl90eCkgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwlpbnQgKCphZGFwdGVyX3R4KSAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IsCisJCQlzdHJ1Y3QgcnRsX3RjYl9kZXNjICpwdGNiX2Rlc2MpOworCXZvaWQgKCpmbHVzaCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgZHJvcCk7CiAJaW50ICgqcmVzZXRfdHJ4X3JpbmcpIChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiAJYm9vbCAoKndhaXRxX2luc2VydCkgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIApAQCAtMTQxOCw2ICsxNDUyLDE1IEBACiBzdHJ1Y3QgcnRsX21vZF9wYXJhbXMgewogCS8qIGRlZmF1bHQ6IDAgPSB1c2luZyBoYXJkd2FyZSBlbmNyeXB0aW9uICovCiAJaW50IHN3X2NyeXB0bzsKKworCS8qIGRlZmF1bHQ6IDEgPSB1c2luZyBubyBsaW5rZWQgcG93ZXIgc2F2ZSAqLworCWJvb2wgaW5hY3RpdmVwczsKKworCS8qIGRlZmF1bHQ6IDEgPSB1c2luZyBsaW5rZWQgc3cgcG93ZXIgc2F2ZSAqLworCWJvb2wgc3djdHJsX2xwczsKKworCS8qIGRlZmF1bHQ6IDEgPSB1c2luZyBsaW5rZWQgZncgcG93ZXIgc2F2ZSAqLworCWJvb2wgZndjdHJsX2xwczsKIH07CiAKIHN0cnVjdCBydGxfaGFsX3VzYmludF9jZmcgewpAQCAtMTQ0NSw2ICsxNDg4LDcgQEAKIAogc3RydWN0IHJ0bF9oYWxfY2ZnIHsKIAl1OCBiYXJfaWQ7CisJYm9vbCB3cml0ZV9yZWFkYmFjazsKIAljaGFyICpuYW1lOwogCWNoYXIgKmZ3X25hbWU7CiAJc3RydWN0IHJ0bF9oYWxfb3BzICpvcHM7CkBAIC0xNDY5LDcgKzE1MTMsNiBAQAogCXNwaW5sb2NrX3QgcmZfbG9jazsKIAlzcGlubG9ja190IGxwc19sb2NrOwogCXNwaW5sb2NrX3Qgd2FpdHFfbG9jazsKLQlzcGlubG9ja190IHR4X3VyYl9sb2NrOwogCiAJLypEdWFsIG1hYyovCiAJc3BpbmxvY2tfdCBjY2tfYW5kX3J3X3BhZ2VhX2xvY2s7CkBAIC0xNjIxLDE5ICsxNjY0LDE5IEBACiAJdTMyIGJ0X2VkY2FfdWw7CiAJdTMyIGJ0X2VkY2FfZGw7CiAKLQlib29sIGJfaW5pdF9zZXQ7Ci0JYm9vbCBiX2J0X2J1c3lfdHJhZmZpYzsKLQlib29sIGJfYnRfdHJhZmZpY19tb2RlX3NldDsKLQlib29sIGJfYnRfbm9uX3RyYWZmaWNfbW9kZV9zZXQ7CisJYm9vbCBpbml0X3NldDsKKwlib29sIGJ0X2J1c3lfdHJhZmZpYzsKKwlib29sIGJ0X3RyYWZmaWNfbW9kZV9zZXQ7CisJYm9vbCBidF9ub25fdHJhZmZpY19tb2RlX3NldDsKIAotCWJvb2wgYl9md19jb2V4aXN0X2FsbF9vZmY7Ci0JYm9vbCBiX3N3X2NvZXhpc3RfYWxsX29mZjsKKwlib29sIGZ3X2NvZXhpc3RfYWxsX29mZjsKKwlib29sIHN3X2NvZXhpc3RfYWxsX29mZjsKIAl1MzIgY3VycmVudF9zdGF0ZTsKIAl1MzIgcHJldmlvdXNfc3RhdGU7CiAJdTggYnRfcHJlX3Jzc2lfc3RhdGU7CiAKLQl1OCBiX3JlZ19idF9pc287Ci0JdTggYl9yZWdfYnRfc2NvOworCXU4IHJlZ19idF9pc287CisJdTggcmVnX2J0X3NjbzsKIAogfTsKIApAQCAtMTY1MywxMyArMTY5NiwyMyBAQAogI2RlZmluZSBFRjRCWVRFKF92YWwpCQlcCiAJKGxlMzJfdG9fY3B1KF92YWwpKQogCisvKiBSZWFkIGRhdGEgZnJvbSBtZW1vcnkgKi8KKyNkZWZpbmUgUkVBREVGMUJZVEUoX3B0cikJXAorCUVGMUJZVEUoKigodTggKikoX3B0cikpKQogLyogUmVhZCBsZTE2IGRhdGEgZnJvbSBtZW1vcnkgYW5kIGNvbnZlcnQgdG8gaG9zdCBvcmRlcmluZyAqLwogI2RlZmluZSBSRUFERUYyQllURShfcHRyKQlcCiAJRUYyQllURSgqKCh1MTYgKikoX3B0cikpKQorI2RlZmluZSBSRUFERUY0QllURShfcHRyKQlcCisJRUY0QllURSgqKCh1MzIgKikoX3B0cikpKQogCisvKiBXcml0ZSBkYXRhIHRvIG1lbW9yeSAqLworI2RlZmluZSBXUklURUVGMUJZVEUoX3B0ciwgX3ZhbCkJXAorCSgqKCh1OCAqKShfcHRyKSkpID0gRUYxQllURShfdmFsKQogLyogV3JpdGUgbGUxNiBkYXRhIHRvIG1lbW9yeSBpbiBob3N0IG9yZGVyaW5nICovCiAjZGVmaW5lIFdSSVRFRUYyQllURShfcHRyLCBfdmFsKQlcCiAJKCooKHUxNiAqKShfcHRyKSkpID0gRUYyQllURShfdmFsKQorI2RlZmluZSBXUklURUVGNEJZVEUoX3B0ciwgX3ZhbCkJXAorCSgqKCh1MTYgKikoX3B0cikpKSA9IEVGMkJZVEUoX3ZhbCkKIAogLyogQ3JlYXRlIGEgYml0IG1hc2sKICAqIEV4YW1wbGVzOgpAQCAtMTY5OCw2ICsxNzUxLDI1IEBACiAjZGVmaW5lIExFX1AxQllURV9UT19IT1NUXzFCWVRFKF9fcHN0YXJ0KSBcCiAJKEVGMUJZVEUoKigodTggKikoX19wc3RhcnQpKSkpCiAKKy8qRGVzY3JpcHRpb246CitUcmFuc2xhdGUgc3ViZmllbGQgKGNvbnRpbnVvdXMgYml0cyBpbiBsaXR0bGUtZW5kaWFuKSBvZiA0LWJ5dGUKK3ZhbHVlIHRvIGhvc3QgYnl0ZSBvcmRlcmluZy4qLworI2RlZmluZSBMRV9CSVRTX1RPXzRCWVRFKF9fcHN0YXJ0LCBfX2JpdG9mZnNldCwgX19iaXRsZW4pIFwKKwkoIFwKKwkJKExFX1A0QllURV9UT19IT1NUXzRCWVRFKF9fcHN0YXJ0KSA+PiAoX19iaXRvZmZzZXQpKSAgJiBcCisJCUJJVF9MRU5fTUFTS18zMihfX2JpdGxlbikgXAorCSkKKyNkZWZpbmUgTEVfQklUU19UT18yQllURShfX3BzdGFydCwgX19iaXRvZmZzZXQsIF9fYml0bGVuKSBcCisJKCBcCisJCShMRV9QMkJZVEVfVE9fSE9TVF8yQllURShfX3BzdGFydCkgPj4gKF9fYml0b2Zmc2V0KSkgJiBcCisJCUJJVF9MRU5fTUFTS18xNihfX2JpdGxlbikgXAorCSkKKyNkZWZpbmUgTEVfQklUU19UT18xQllURShfX3BzdGFydCwgX19iaXRvZmZzZXQsIF9fYml0bGVuKSBcCisJKCBcCisJCShMRV9QMUJZVEVfVE9fSE9TVF8xQllURShfX3BzdGFydCkgPj4gKF9fYml0b2Zmc2V0KSkgJiBcCisJCUJJVF9MRU5fTUFTS184KF9fYml0bGVuKSBcCisJKQorCiAvKiBEZXNjcmlwdGlvbjoKICAqIE1hc2sgc3ViZmllbGQgKGNvbnRpbnVvdXMgYml0cyBpbiBsaXR0bGUtZW5kaWFuKSBvZiA0LWJ5dGUgdmFsdWUKICAqIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBpbiA0LWJ5dGUgdmFsdWUgaW4gaG9zdCBieXRlIG9yZGVyaW5nLgpAQCAtMTcyMSw2ICsxNzkzLDE4IEBACiAvKiBEZXNjcmlwdGlvbjoKICAqIFNldCBzdWJmaWVsZCBvZiBsaXR0bGUtZW5kaWFuIDQtYnl0ZSB2YWx1ZSB0byBzcGVjaWZpZWQgdmFsdWUuCiAgKi8KKyNkZWZpbmUgU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wc3RhcnQsIF9fYml0b2Zmc2V0LCBfX2JpdGxlbiwgX192YWwpIFwKKwkqKCh1MzIgKikoX19wc3RhcnQpKSA9IEVGNEJZVEUgXAorCSggXAorCQlMRV9CSVRTX0NMRUFSRURfVE9fNEJZVEUoX19wc3RhcnQsIF9fYml0b2Zmc2V0LCBfX2JpdGxlbikgfCBcCisJCSgoKCh1MzIpX192YWwpICYgQklUX0xFTl9NQVNLXzMyKF9fYml0bGVuKSkgPDwgKF9fYml0b2Zmc2V0KSkgXAorCSk7CisjZGVmaW5lIFNFVF9CSVRTX1RPX0xFXzJCWVRFKF9fcHN0YXJ0LCBfX2JpdG9mZnNldCwgX19iaXRsZW4sIF9fdmFsKSBcCisJKigodTE2ICopKF9fcHN0YXJ0KSkgPSBFRjJCWVRFIFwKKwkoIFwKKwkJTEVfQklUU19DTEVBUkVEX1RPXzJCWVRFKF9fcHN0YXJ0LCBfX2JpdG9mZnNldCwgX19iaXRsZW4pIHwgXAorCQkoKCgodTE2KV9fdmFsKSAmIEJJVF9MRU5fTUFTS18xNihfX2JpdGxlbikpIDw8IChfX2JpdG9mZnNldCkpIFwKKwkpOwogI2RlZmluZSBTRVRfQklUU19UT19MRV8xQllURShfX3BzdGFydCwgX19iaXRvZmZzZXQsIF9fYml0bGVuLCBfX3ZhbCkgXAogCSooKHU4ICopKF9fcHN0YXJ0KSkgPSBFRjFCWVRFIFwKIAkoIFwKQEAgLTE3MjgsMTIgKzE4MTIsMTYgQEAKIAkJKCgoKHU4KV9fdmFsKSAmIEJJVF9MRU5fTUFTS184KF9fYml0bGVuKSkgPDwgKF9fYml0b2Zmc2V0KSkgXAogCSk7CiAKKyNkZWZpbmUJTl9CWVRFX0FMSUdNRU5UKF9fdmFsdWUsIF9fYWxpZ21lbnQpICgoX19hbGlnbWVudCA9PSAxKSA/IFwKKwkoX192YWx1ZSkgOiAoKChfX3ZhbHVlICsgX19hbGlnbWVudCAtIDEpIC8gX19hbGlnbWVudCkgKiBfX2FsaWdtZW50KSkKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAltZW0gYWNjZXNzIG1hY3JvIGRlZmluZSBlbmQKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNkZWZpbmUgYnl0ZSh4LCBuKSAoKHggPj4gKDggKiBuKSkgJiAweGZmKQogCisjZGVmaW5lIHBhY2tldF9nZXRfdHlwZShfcGFja2V0KSAoRUYxQllURSgoX3BhY2tldCkub2N0ZXRbMF0pICYgMHhGQykKICNkZWZpbmUgUlRMX1dBVENIX0RPR19USU1FCTIwMDAKICNkZWZpbmUgTVNFQ1ModCkJCW1zZWNzX3RvX2ppZmZpZXModCkKICNkZWZpbmUgV0xBTl9GQ19HRVRfVkVSUyhmYykJKGxlMTZfdG9fY3B1KGZjKSAmIElFRUU4MDIxMV9GQ1RMX1ZFUlMpCkBAIC0xNzY4LDYgKzE4NTYsMTUgQEAKICNkZWZpbmUgY29udGFpbmVyX29mX2R3b3JrX3J0bCh4LCB5LCB6KSBcCiAJY29udGFpbmVyX29mKGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKSwgeSwgeikKIAorI2RlZmluZSBGSUxMX09DVEVUX1NUUklORyhfb3MsIF9vY3RldCwgX2xlbikJXAorCQkoX29zKS5vY3RldCA9ICh1OCAqKShfb2N0ZXQpOwkJXAorCQkoX29zKS5sZW5ndGggPSAoX2xlbik7CisKKyNkZWZpbmUgQ1BfTUFDQUREUihkZXMsIHNyYykJXAorCSgoZGVzKVswXSA9IChzcmMpWzBdLCAoZGVzKVsxXSA9IChzcmMpWzFdLFwKKwkoZGVzKVsyXSA9IChzcmMpWzJdLCAoZGVzKVszXSA9IChzcmMpWzNdLFwKKwkoZGVzKVs0XSA9IChzcmMpWzRdLCAoZGVzKVs1XSA9IChzcmMpWzVdKQorCiBzdGF0aWMgaW5saW5lIHU4IHJ0bF9yZWFkX2J5dGUoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LCB1MzIgYWRkcikKIHsKIAlyZXR1cm4gcnRscHJpdi0+aW8ucmVhZDhfc3luYyhydGxwcml2LCBhZGRyKTsKQEAgLTE3ODYsMTcgKzE4ODMsMjYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBydGxfd3JpdGVfYnl0ZShzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYsIHUzMiBhZGRyLCB1OCB2YWw4KQogewogCXJ0bHByaXYtPmlvLndyaXRlOF9hc3luYyhydGxwcml2LCBhZGRyLCB2YWw4KTsKKworCWlmIChydGxwcml2LT5jZmctPndyaXRlX3JlYWRiYWNrKQorCQlydGxwcml2LT5pby5yZWFkOF9zeW5jKHJ0bHByaXYsIGFkZHIpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcnRsX3dyaXRlX3dvcmQoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LCB1MzIgYWRkciwgdTE2IHZhbDE2KQogewogCXJ0bHByaXYtPmlvLndyaXRlMTZfYXN5bmMocnRscHJpdiwgYWRkciwgdmFsMTYpOworCisJaWYgKHJ0bHByaXYtPmNmZy0+d3JpdGVfcmVhZGJhY2spCisJCXJ0bHByaXYtPmlvLnJlYWQxNl9zeW5jKHJ0bHByaXYsIGFkZHIpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcnRsX3dyaXRlX2R3b3JkKHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiwKIAkJCQkgICB1MzIgYWRkciwgdTMyIHZhbDMyKQogewogCXJ0bHByaXYtPmlvLndyaXRlMzJfYXN5bmMocnRscHJpdiwgYWRkciwgdmFsMzIpOworCisJaWYgKHJ0bHByaXYtPmNmZy0+d3JpdGVfcmVhZGJhY2spCisJCXJ0bHByaXYtPmlvLnJlYWQzMl9zeW5jKHJ0bHByaXYsIGFkZHIpOwogfQogCiBzdGF0aWMgaW5saW5lIHUzMiBydGxfZ2V0X2JicmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LApAQCAtMTg1NSw0ICsxOTYxLDMxIEBACiAJcmV0dXJuIHJ0bHBoeS0+cmZfdHlwZTsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqcnRsX2dldF9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopKHNrYi0+ZGF0YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19sZTE2IHJ0bF9nZXRfZmMoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gcnRsX2dldF9oZHIoc2tiKS0+ZnJhbWVfY29udHJvbDsKK30KKworc3RhdGljIGlubGluZSB1MTYgcnRsX2dldF90aWRfaChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQoreworCXJldHVybiAoaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcikpWzBdICYgSUVFRTgwMjExX1FPU19DVExfVElEX01BU0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IHJ0bF9nZXRfdGlkKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIHJ0bF9nZXRfdGlkX2gocnRsX2dldF9oZHIoc2tiKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGllZWU4MDIxMV9zdGEgKmdldF9zdGEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCQkgICAgdTggKmJzc2lkKQoreworCXJldHVybiBpZWVlODAyMTFfZmluZF9zdGEodmlmLCBic3NpZCk7Cit9CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL2NtZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL2NtZC5oCmluZGV4IGU1Yzc0YzYuLjc5Y2E1MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9jbWQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvY21kLmgKQEAgLTMxMyw4ICszMTMsOCBAQAogfSBfX3BhY2tlZDsKIAogZW51bSB3bDEyNTFfY21kX3BzX21vZGUgewotCVNUQVRJT05fQUNUSVZFX01PREUsCi0JU1RBVElPTl9QT1dFUl9TQVZFX01PREUKKwlDSElQX0FDVElWRV9NT0RFLAorCUNISVBfUE9XRVJfU0FWRV9NT0RFCiB9OwogCiBzdHJ1Y3Qgd2wxMjUxX2NtZF9wc19wYXJhbXMgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL2V2ZW50LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvZXZlbnQuYwppbmRleCBkZmM0NTc5Li45ZjE1Y2NhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvZXZlbnQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvZXZlbnQuYwpAQCAtNjgsMTQgKzY4LDE2IEBACiAJaWYgKHZlY3RvciAmIEJTU19MT1NFX0VWRU5UX0lEKSB7CiAJCXdsMTI1MV9kZWJ1ZyhERUJVR19FVkVOVCwgIkJTU19MT1NFX0VWRU5UIik7CiAKLQkJaWYgKHdsLT5wc21fcmVxdWVzdGVkICYmIHdsLT5wc20pIHsKKwkJaWYgKHdsLT5wc21fcmVxdWVzdGVkICYmCisJCSAgICB3bC0+c3RhdGlvbl9tb2RlICE9IFNUQVRJT05fQUNUSVZFX01PREUpIHsKIAkJCXJldCA9IHdsMTI1MV9wc19zZXRfbW9kZSh3bCwgU1RBVElPTl9BQ1RJVkVfTU9ERSk7CiAJCQlpZiAocmV0IDwgMCkKIAkJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQogCi0JaWYgKHZlY3RvciAmIFNZTkNIUk9OSVpBVElPTl9USU1FT1VUX0VWRU5UX0lEICYmIHdsLT5wc20pIHsKKwlpZiAodmVjdG9yICYgU1lOQ0hST05JWkFUSU9OX1RJTUVPVVRfRVZFTlRfSUQgJiYKKwkgICAgd2wtPnN0YXRpb25fbW9kZSAhPSBTVEFUSU9OX0FDVElWRV9NT0RFKSB7CiAJCXdsMTI1MV9kZWJ1ZyhERUJVR19FVkVOVCwgIlNZTkNIUk9OSVpBVElPTl9USU1FT1VUX0VWRU5UIik7CiAKIAkJLyogaW5kaWNhdGUgdG8gdGhlIHN0YWNrLCB0aGF0IGJlYWNvbnMgaGF2ZSBiZWVuIGxvc3QgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvbWFpbi5jCmluZGV4IDEyYzllNjMuLmExNGE0OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL21haW4uYwpAQCAtNDk3LDcgKzQ5Nyw3IEBACiAJd2wtPnJ4X2xhc3RfaWQgPSAwOwogCXdsLT5uZXh0X3R4X2NvbXBsZXRlID0gMDsKIAl3bC0+ZWxwID0gZmFsc2U7Ci0Jd2wtPnBzbSA9IDA7CisJd2wtPnN0YXRpb25fbW9kZSA9IFNUQVRJT05fQUNUSVZFX01PREU7CiAJd2wtPnR4X3F1ZXVlX3N0b3BwZWQgPSBmYWxzZTsKIAl3bC0+cG93ZXJfbGV2ZWwgPSBXTDEyNTFfREVGQVVMVF9QT1dFUl9MRVZFTDsKIAl3bC0+cnNzaV90aG9sZCA9IDA7CkBAIC02MzIsMTMgKzYzMiwyOSBAQAogCiAJCXdsLT5wc21fcmVxdWVzdGVkID0gZmFsc2U7CiAKLQkJaWYgKHdsLT5wc20pIHsKKwkJaWYgKHdsLT5zdGF0aW9uX21vZGUgIT0gU1RBVElPTl9BQ1RJVkVfTU9ERSkgewogCQkJcmV0ID0gd2wxMjUxX3BzX3NldF9tb2RlKHdsLCBTVEFUSU9OX0FDVElWRV9NT0RFKTsKIAkJCWlmIChyZXQgPCAwKQogCQkJCWdvdG8gb3V0X3NsZWVwOwogCQl9CiAJfQogCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfSURMRSkgeworCQlpZiAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9JRExFKSB7CisJCQlyZXQgPSB3bDEyNTFfcHNfc2V0X21vZGUod2wsIFNUQVRJT05fSURMRSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIG91dF9zbGVlcDsKKwkJfSBlbHNlIHsKKwkJCXJldCA9IHdsMTI1MV9wc19zZXRfbW9kZSh3bCwgU1RBVElPTl9BQ1RJVkVfTU9ERSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIG91dF9zbGVlcDsKKwkJCXJldCA9IHdsMTI1MV9qb2luKHdsLCB3bC0+YnNzX3R5cGUsIHdsLT5jaGFubmVsLAorCQkJCQkgIHdsLT5iZWFjb25faW50LCB3bC0+ZHRpbV9wZXJpb2QpOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBvdXRfc2xlZXA7CisJCX0KKwl9CisKIAlpZiAoY29uZi0+cG93ZXJfbGV2ZWwgIT0gd2wtPnBvd2VyX2xldmVsKSB7CiAJCXJldCA9IHdsMTI1MV9hY3hfdHhfcG93ZXIod2wsIGNvbmYtPnBvd2VyX2xldmVsKTsKIAkJaWYgKHJldCA8IDApCkBAIC0xMzg0LDcgKzE0MDAsNyBAQAogCXdsLT5yeF9jb25maWcgPSBXTDEyNTFfREVGQVVMVF9SWF9DT05GSUc7CiAJd2wtPnJ4X2ZpbHRlciA9IFdMMTI1MV9ERUZBVUxUX1JYX0ZJTFRFUjsKIAl3bC0+ZWxwID0gZmFsc2U7Ci0Jd2wtPnBzbSA9IDA7CisJd2wtPnN0YXRpb25fbW9kZSA9IFNUQVRJT05fQUNUSVZFX01PREU7CiAJd2wtPnBzbV9yZXF1ZXN0ZWQgPSBmYWxzZTsKIAl3bC0+dHhfcXVldWVfc3RvcHBlZCA9IGZhbHNlOwogCXdsLT5wb3dlcl9sZXZlbCA9IFdMMTI1MV9ERUZBVUxUX1BPV0VSX0xFVkVMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL3BzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvcHMuYwppbmRleCA5Y2M1MTQ3Li5kYjcxOWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvcHMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvcHMuYwpAQCAtMzksNyArMzksNyBAQAogCiAJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKIAotCWlmICh3bC0+ZWxwIHx8ICF3bC0+cHNtKQorCWlmICh3bC0+ZWxwIHx8IHdsLT5zdGF0aW9uX21vZGUgPT0gU1RBVElPTl9BQ1RJVkVfTU9ERSkKIAkJZ290byBvdXQ7CiAKIAl3bDEyNTFfZGVidWcoREVCVUdfUFNNLCAiY2hpcCB0byBlbHAiKTsKQEAgLTU3LDcgKzU3LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGRlbGF5OwogCi0JaWYgKHdsLT5wc20pIHsKKwlpZiAod2wtPnN0YXRpb25fbW9kZSAhPSBTVEFUSU9OX0FDVElWRV9NT0RFKSB7CiAJCWRlbGF5ID0gbXNlY3NfdG9famlmZmllcyhFTFBfRU5UUllfREVMQVkpOwogCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHdsLT5odywgJndsLT5lbHBfd29yaywgZGVsYXkpOwogCX0KQEAgLTEwNCw3ICsxMDQsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgd2wxMjUxX3BzX3NldF9tb2RlKHN0cnVjdCB3bDEyNTEgKndsLCBlbnVtIHdsMTI1MV9jbWRfcHNfbW9kZSBtb2RlKQoraW50IHdsMTI1MV9wc19zZXRfbW9kZShzdHJ1Y3Qgd2wxMjUxICp3bCwgZW51bSB3bDEyNTFfc3RhdGlvbl9tb2RlIG1vZGUpCiB7CiAJaW50IHJldDsKIApAQCAtMTI4LDE1ICsxMjgsMjQgQEAKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwogCi0JCXJldCA9IHdsMTI1MV9jbWRfcHNfbW9kZSh3bCwgU1RBVElPTl9QT1dFUl9TQVZFX01PREUpOworCQlyZXQgPSB3bDEyNTFfY21kX3BzX21vZGUod2wsIENISVBfUE9XRVJfU0FWRV9NT0RFKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwogCiAJCXJldCA9IHdsMTI1MV9hY3hfc2xlZXBfYXV0aCh3bCwgV0wxMjUxX1BTTV9FTFApOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CisJCWJyZWFrOworCWNhc2UgU1RBVElPTl9JRExFOgorCQl3bDEyNTFfZGVidWcoREVCVUdfUFNNLCAiZW50ZXJpbmcgaWRsZSIpOwogCi0JCXdsLT5wc20gPSAxOworCQlyZXQgPSB3bDEyNTFfYWN4X3NsZWVwX2F1dGgod2wsIFdMMTI1MV9QU01fRUxQKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IHdsMTI1MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfRElTQ09OTkVDVCwgTlVMTCwgMCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKIAkJYnJlYWs7CiAJY2FzZSBTVEFUSU9OX0FDVElWRV9NT0RFOgogCWRlZmF1bHQ6CkBAIC0xNjMsMTMgKzE3MiwxMyBAQAogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAKLQkJcmV0ID0gd2wxMjUxX2NtZF9wc19tb2RlKHdsLCBTVEFUSU9OX0FDVElWRV9NT0RFKTsKKwkJcmV0ID0gd2wxMjUxX2NtZF9wc19tb2RlKHdsLCBDSElQX0FDVElWRV9NT0RFKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwogCi0JCXdsLT5wc20gPSAwOwogCQlicmVhazsKIAl9CisJd2wtPnN0YXRpb25fbW9kZSA9IG1vZGU7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL3BzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvcHMuaAppbmRleCA1NWMzZGRhLi43NWVmYWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvcHMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvcHMuaApAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgIndsMTI1MS5oIgogI2luY2x1ZGUgImFjeC5oIgogCi1pbnQgd2wxMjUxX3BzX3NldF9tb2RlKHN0cnVjdCB3bDEyNTEgKndsLCBlbnVtIHdsMTI1MV9jbWRfcHNfbW9kZSBtb2RlKTsKK2ludCB3bDEyNTFfcHNfc2V0X21vZGUoc3RydWN0IHdsMTI1MSAqd2wsIGVudW0gd2wxMjUxX3N0YXRpb25fbW9kZSBtb2RlKTsKIHZvaWQgd2wxMjUxX3BzX2VscF9zbGVlcChzdHJ1Y3Qgd2wxMjUxICp3bCk7CiBpbnQgd2wxMjUxX3BzX2VscF93YWtldXAoc3RydWN0IHdsMTI1MSAqd2wpOwogdm9pZCB3bDEyNTFfZWxwX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS93bDEyNTEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS93bDEyNTEuaAppbmRleCBiYjIzY2Q1Li5hNzdmMWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvd2wxMjUxLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL3dsMTI1MS5oCkBAIC0xMjksNiArMTI5LDEyIEBACiAJUEFSVF9UQUJMRV9MRU4KIH07CiAKK2VudW0gd2wxMjUxX3N0YXRpb25fbW9kZSB7CisJU1RBVElPTl9BQ1RJVkVfTU9ERSwKKwlTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERSwKKwlTVEFUSU9OX0lETEUsCit9OworCiBzdHJ1Y3Qgd2wxMjUxX3BhcnRpdGlvbiB7CiAJdTMyIHNpemU7CiAJdTMyIHN0YXJ0OwpAQCAtMzU4LDggKzM2NCw3IEBACiAKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIGVscF93b3JrOwogCi0JLyogd2UgY2FuIGJlIGluIHBzbSwgYnV0IG5vdCBpbiBlbHAsIHdlIGhhdmUgdG8gZGlmZmVyZW50aWF0ZSAqLwotCWJvb2wgcHNtOworCWVudW0gd2wxMjUxX3N0YXRpb25fbW9kZSBzdGF0aW9uX21vZGU7CiAKIAkvKiBQU00gbW9kZSByZXF1ZXN0ZWQgKi8KIAlib29sIHBzbV9yZXF1ZXN0ZWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9LY29uZmlnCmluZGV4IDY5MmViZmYuLjM1Y2U3YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9LY29uZmlnCkBAIC0zLDcgKzMsNyBAQAogCWRlcGVuZHMgb24gTUFDODAyMTEgJiYgRVhQRVJJTUVOVEFMCiAJLS0taGVscC0tLQogCSAgVGhpcyB3aWxsIGVuYWJsZSBUSSB3bDEyeHggZHJpdmVyIHN1cHBvcnQgZm9yIHRoZSBmb2xsb3dpbmcgY2hpcHM6Ci0JICB3bDEyNzEgYW5kIHdsMTI3My4KKwkgIHdsMTI3MSwgd2wxMjczLCB3bDEyODEgYW5kIHdsMTI4My4KIAkgIFRoZSBkcml2ZXJzIG1ha2UgdXNlIG9mIHRoZSBtYWM4MDIxMSBzdGFjay4KIAogY29uZmlnIFdMMTJYWApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2FjeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2FjeC5jCmluZGV4IGEzZGI3NTUuLmM2ZWU1MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9hY3guYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvYWN4LmMKQEAgLTMyNSwxMiArMzI1LDE5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IHdsMTI3MV9hY3hfcnRzX3RocmVzaG9sZChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTE2IHJ0c190aHJlc2hvbGQpCitpbnQgd2wxMjcxX2FjeF9ydHNfdGhyZXNob2xkKHN0cnVjdCB3bDEyNzEgKndsLCB1MzIgcnRzX3RocmVzaG9sZCkKIHsKIAlzdHJ1Y3QgYWN4X3J0c190aHJlc2hvbGQgKnJ0czsKIAlpbnQgcmV0OwogCi0Jd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBydHMgdGhyZXNob2xkIik7CisJLyoKKwkgKiBJZiB0aGUgUlRTIHRocmVzaG9sZCBpcyBub3QgY29uZmlndXJlZCBvciBvdXQgb2YgcmFuZ2UsIHVzZSB0aGUKKwkgKiBkZWZhdWx0IHZhbHVlLgorCSAqLworCWlmIChydHNfdGhyZXNob2xkID4gSUVFRTgwMjExX01BWF9SVFNfVEhSRVNIT0xEKQorCQlydHNfdGhyZXNob2xkID0gd2wtPmNvbmYucngucnRzX3RocmVzaG9sZDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggcnRzIHRocmVzaG9sZDogJWQiLCBydHNfdGhyZXNob2xkKTsKIAogCXJ0cyA9IGt6YWxsb2Moc2l6ZW9mKCpydHMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXJ0cykgewpAQCAtMzM4LDcgKzM0NSw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJ0cy0+dGhyZXNob2xkID0gY3B1X3RvX2xlMTYocnRzX3RocmVzaG9sZCk7CisJcnRzLT50aHJlc2hvbGQgPSBjcHVfdG9fbGUxNigodTE2KXJ0c190aHJlc2hvbGQpOwogCiAJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIERPVDExX1JUU19USFJFU0hPTEQsIHJ0cywgc2l6ZW9mKCpydHMpKTsKIAlpZiAocmV0IDwgMCkgewpAQCAtNTQwLDEzICs1NDcsMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgd2wxMjcxX2FjeF9zZ19jZmcoc3RydWN0IHdsMTI3MSAqd2wpCitpbnQgd2wxMjcxX2FjeF9zdGFfc2dfY2ZnKHN0cnVjdCB3bDEyNzEgKndsKQogewotCXN0cnVjdCBhY3hfYnRfd2xhbl9jb2V4X3BhcmFtICpwYXJhbTsKKwlzdHJ1Y3QgYWN4X3N0YV9idF93bGFuX2NvZXhfcGFyYW0gKnBhcmFtOwogCXN0cnVjdCBjb25mX3NnX3NldHRpbmdzICpjID0gJndsLT5jb25mLnNnOwogCWludCBpLCByZXQ7CiAKLQl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHNnIGNmZyIpOworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggc2cgc3RhIGNmZyIpOwogCiAJcGFyYW0gPSBremFsbG9jKHNpemVvZigqcGFyYW0pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBhcmFtKSB7CkBAIC01NTUsOCArNTYyLDM4IEBACiAJfQogCiAJLyogQlQtV0xBTiBjb2V4dCBwYXJhbWV0ZXJzICovCi0JZm9yIChpID0gMDsgaSA8IENPTkZfU0dfUEFSQU1TX01BWDsgaSsrKQotCQlwYXJhbS0+cGFyYW1zW2ldID0gY3B1X3RvX2xlMzIoYy0+cGFyYW1zW2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgQ09ORl9TR19TVEFfUEFSQU1TX01BWDsgaSsrKQorCQlwYXJhbS0+cGFyYW1zW2ldID0gY3B1X3RvX2xlMzIoYy0+c3RhX3BhcmFtc1tpXSk7CisJcGFyYW0tPnBhcmFtX2lkeCA9IENPTkZfU0dfUEFSQU1TX0FMTDsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfU0dfQ0ZHLCBwYXJhbSwgc2l6ZW9mKCpwYXJhbSkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHNnIGNvbmZpZzogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShwYXJhbSk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfYXBfc2dfY2ZnKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCBhY3hfYXBfYnRfd2xhbl9jb2V4X3BhcmFtICpwYXJhbTsKKwlzdHJ1Y3QgY29uZl9zZ19zZXR0aW5ncyAqYyA9ICZ3bC0+Y29uZi5zZzsKKwlpbnQgaSwgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBzZyBhcCBjZmciKTsKKworCXBhcmFtID0ga3phbGxvYyhzaXplb2YoKnBhcmFtKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwYXJhbSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBCVC1XTEFOIGNvZXh0IHBhcmFtZXRlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQ09ORl9TR19BUF9QQVJBTVNfTUFYOyBpKyspCisJCXBhcmFtLT5wYXJhbXNbaV0gPSBjcHVfdG9fbGUzMihjLT5hcF9wYXJhbXNbaV0pOwogCXBhcmFtLT5wYXJhbV9pZHggPSBDT05GX1NHX1BBUkFNU19BTEw7CiAKIAlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1NHX0NGRywgcGFyYW0sIHNpemVvZigqcGFyYW0pKTsKQEAgLTgwNCw3ICs4NDEsOCBAQAogCXN0cnVjdCBhY3hfYXBfcmF0ZV9wb2xpY3kgKmFjeDsKIAlpbnQgcmV0ID0gMDsKIAotCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggYXAgcmF0ZSBwb2xpY3kiKTsKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGFwIHJhdGUgcG9saWN5ICVkIHJhdGVzIDB4JXgiLAorCQkgICAgIGlkeCwgYy0+ZW5hYmxlZF9yYXRlcyk7CiAKIAlhY3ggPSBremFsbG9jKHNpemVvZigqYWN4KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFhY3gpIHsKQEAgLTg5OCwxMiArOTM2LDE5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IHdsMTI3MV9hY3hfZnJhZ190aHJlc2hvbGQoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiBmcmFnX3RocmVzaG9sZCkKK2ludCB3bDEyNzFfYWN4X2ZyYWdfdGhyZXNob2xkKHN0cnVjdCB3bDEyNzEgKndsLCB1MzIgZnJhZ190aHJlc2hvbGQpCiB7CiAJc3RydWN0IGFjeF9mcmFnX3RocmVzaG9sZCAqYWN4OwogCWludCByZXQgPSAwOwogCi0Jd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBmcmFnIHRocmVzaG9sZCIpOworCS8qCisJICogSWYgdGhlIGZyYWdtZW50YXRpb24gaXMgbm90IGNvbmZpZ3VyZWQgb3Igb3V0IG9mIHJhbmdlLCB1c2UgdGhlCisJICogZGVmYXVsdCB2YWx1ZS4KKwkgKi8KKwlpZiAoZnJhZ190aHJlc2hvbGQgPiBJRUVFODAyMTFfTUFYX0ZSQUdfVEhSRVNIT0xEKQorCQlmcmFnX3RocmVzaG9sZCA9IHdsLT5jb25mLnR4LmZyYWdfdGhyZXNob2xkOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBmcmFnIHRocmVzaG9sZDogJWQiLCBmcmFnX3RocmVzaG9sZCk7CiAKIAlhY3ggPSBremFsbG9jKHNpemVvZigqYWN4KSwgR0ZQX0tFUk5FTCk7CiAKQEAgLTkxMiw3ICs5NTcsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlhY3gtPmZyYWdfdGhyZXNob2xkID0gY3B1X3RvX2xlMTYoZnJhZ190aHJlc2hvbGQpOworCWFjeC0+ZnJhZ190aHJlc2hvbGQgPSBjcHVfdG9fbGUxNigodTE2KWZyYWdfdGhyZXNob2xkKTsKIAlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX0ZSQUdfQ0ZHLCBhY3gsIHNpemVvZigqYWN4KSk7CiAJaWYgKHJldCA8IDApIHsKIAkJd2wxMjcxX3dhcm5pbmcoIlNldHRpbmcgb2YgZnJhZyB0aHJlc2hvbGQgZmFpbGVkOiAlZCIsIHJldCk7CkBAIC05NTQsNiArOTk5LDcgQEAKIGludCB3bDEyNzFfYWN4X2FwX21lbV9jZmcoc3RydWN0IHdsMTI3MSAqd2wpCiB7CiAJc3RydWN0IHdsMTI3MV9hY3hfYXBfY29uZmlnX21lbW9yeSAqbWVtX2NvbmY7CisJc3RydWN0IGNvbmZfbWVtb3J5X3NldHRpbmdzICptZW07CiAJaW50IHJldDsKIAogCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJ3bDEyNzEgbWVtIGNmZyIpOwpAQCAtOTY0LDExICsxMDEwLDIxIEBACiAJCWdvdG8gb3V0OwogCX0KIAorCWlmICh3bC0+Y2hpcC5pZCA9PSBDSElQX0lEXzEyODNfUEcyMCkKKwkJLyoKKwkJICogRklYTUU6IFRoZSAxMjh4IEFQIEZXIGRvZXMgbm90IHlldCBzdXBwb3J0IGR5bmFtaWMgbWVtb3J5LgorCQkgKiBVc2UgdGhlIGJhc2UgbWVtb3J5IGNvbmZpZ3VyYXRpb24gZm9yIDEyOHggZm9yIG5vdy4gVGhpcworCQkgKiBzaG91bGQgYmUgZmluZSB0dW5lZCBpbiB0aGUgZnV0dXJlLgorCQkgKi8KKwkJbWVtID0gJndsLT5jb25mLm1lbV93bDEyOHg7CisJZWxzZQorCQltZW0gPSAmd2wtPmNvbmYubWVtX3dsMTI3eDsKKwogCS8qIG1lbW9yeSBjb25maWcgKi8KLQltZW1fY29uZi0+bnVtX3N0YXRpb25zID0gd2wtPmNvbmYubWVtLm51bV9zdGF0aW9uczsKLQltZW1fY29uZi0+cnhfbWVtX2Jsb2NrX251bSA9IHdsLT5jb25mLm1lbS5yeF9ibG9ja19udW07Ci0JbWVtX2NvbmYtPnR4X21pbl9tZW1fYmxvY2tfbnVtID0gd2wtPmNvbmYubWVtLnR4X21pbl9ibG9ja19udW07Ci0JbWVtX2NvbmYtPm51bV9zc2lkX3Byb2ZpbGVzID0gd2wtPmNvbmYubWVtLnNzaWRfcHJvZmlsZXM7CisJbWVtX2NvbmYtPm51bV9zdGF0aW9ucyA9IG1lbS0+bnVtX3N0YXRpb25zOworCW1lbV9jb25mLT5yeF9tZW1fYmxvY2tfbnVtID0gbWVtLT5yeF9ibG9ja19udW07CisJbWVtX2NvbmYtPnR4X21pbl9tZW1fYmxvY2tfbnVtID0gbWVtLT50eF9taW5fYmxvY2tfbnVtOworCW1lbV9jb25mLT5udW1fc3NpZF9wcm9maWxlcyA9IG1lbS0+c3NpZF9wcm9maWxlczsKIAltZW1fY29uZi0+dG90YWxfdHhfZGVzY3JpcHRvcnMgPSBjcHVfdG9fbGUzMihBQ1hfVFhfREVTQ1JJUFRPUlMpOwogCiAJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9NRU1fQ0ZHLCBtZW1fY29uZiwKQEAgLTk4Niw2ICsxMDQyLDcgQEAKIGludCB3bDEyNzFfYWN4X3N0YV9tZW1fY2ZnKHN0cnVjdCB3bDEyNzEgKndsKQogewogCXN0cnVjdCB3bDEyNzFfYWN4X3N0YV9jb25maWdfbWVtb3J5ICptZW1fY29uZjsKKwlzdHJ1Y3QgY29uZl9tZW1vcnlfc2V0dGluZ3MgKm1lbTsKIAlpbnQgcmV0OwogCiAJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgIndsMTI3MSBtZW0gY2ZnIik7CkBAIC05OTYsMTYgKzEwNTMsMjEgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJaWYgKHdsLT5jaGlwLmlkID09IENISVBfSURfMTI4M19QRzIwKQorCQltZW0gPSAmd2wtPmNvbmYubWVtX3dsMTI4eDsKKwllbHNlCisJCW1lbSA9ICZ3bC0+Y29uZi5tZW1fd2wxMjd4OworCiAJLyogbWVtb3J5IGNvbmZpZyAqLwotCW1lbV9jb25mLT5udW1fc3RhdGlvbnMgPSB3bC0+Y29uZi5tZW0ubnVtX3N0YXRpb25zOwotCW1lbV9jb25mLT5yeF9tZW1fYmxvY2tfbnVtID0gd2wtPmNvbmYubWVtLnJ4X2Jsb2NrX251bTsKLQltZW1fY29uZi0+dHhfbWluX21lbV9ibG9ja19udW0gPSB3bC0+Y29uZi5tZW0udHhfbWluX2Jsb2NrX251bTsKLQltZW1fY29uZi0+bnVtX3NzaWRfcHJvZmlsZXMgPSB3bC0+Y29uZi5tZW0uc3NpZF9wcm9maWxlczsKKwltZW1fY29uZi0+bnVtX3N0YXRpb25zID0gbWVtLT5udW1fc3RhdGlvbnM7CisJbWVtX2NvbmYtPnJ4X21lbV9ibG9ja19udW0gPSBtZW0tPnJ4X2Jsb2NrX251bTsKKwltZW1fY29uZi0+dHhfbWluX21lbV9ibG9ja19udW0gPSBtZW0tPnR4X21pbl9ibG9ja19udW07CisJbWVtX2NvbmYtPm51bV9zc2lkX3Byb2ZpbGVzID0gbWVtLT5zc2lkX3Byb2ZpbGVzOwogCW1lbV9jb25mLT50b3RhbF90eF9kZXNjcmlwdG9ycyA9IGNwdV90b19sZTMyKEFDWF9UWF9ERVNDUklQVE9SUyk7Ci0JbWVtX2NvbmYtPmR5bl9tZW1fZW5hYmxlID0gd2wtPmNvbmYubWVtLmR5bmFtaWNfbWVtb3J5OwotCW1lbV9jb25mLT50eF9mcmVlX3JlcSA9IHdsLT5jb25mLm1lbS5taW5fcmVxX3R4X2Jsb2NrczsKLQltZW1fY29uZi0+cnhfZnJlZV9yZXEgPSB3bC0+Y29uZi5tZW0ubWluX3JlcV9yeF9ibG9ja3M7Ci0JbWVtX2NvbmYtPnR4X21pbiA9IHdsLT5jb25mLm1lbS50eF9taW47CisJbWVtX2NvbmYtPmR5bl9tZW1fZW5hYmxlID0gbWVtLT5keW5hbWljX21lbW9yeTsKKwltZW1fY29uZi0+dHhfZnJlZV9yZXEgPSBtZW0tPm1pbl9yZXFfdHhfYmxvY2tzOworCW1lbV9jb25mLT5yeF9mcmVlX3JlcSA9IG1lbS0+bWluX3JlcV9yeF9ibG9ja3M7CisJbWVtX2NvbmYtPnR4X21pbiA9IG1lbS0+dHhfbWluOwogCiAJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9NRU1fQ0ZHLCBtZW1fY29uZiwKIAkJCQkgICBzaXplb2YoKm1lbV9jb25mKSk7CkBAIC0xMDE5LDYgKzEwODEsMzIgQEAKIAlyZXR1cm4gcmV0OwogfQogCitpbnQgd2wxMjcxX2FjeF9ob3N0X2lmX2NmZ19iaXRtYXAoc3RydWN0IHdsMTI3MSAqd2wsIHUzMiBob3N0X2NmZ19iaXRtYXApCit7CisJc3RydWN0IHdsMTI3MV9hY3hfaG9zdF9jb25maWdfYml0bWFwICpiaXRtYXBfY29uZjsKKwlpbnQgcmV0OworCisJYml0bWFwX2NvbmYgPSBremFsbG9jKHNpemVvZigqYml0bWFwX2NvbmYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJpdG1hcF9jb25mKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWJpdG1hcF9jb25mLT5ob3N0X2NmZ19iaXRtYXAgPSBjcHVfdG9fbGUzMihob3N0X2NmZ19iaXRtYXApOworCisJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9IT1NUX0lGX0NGR19CSVRNQVAsCisJCQkJICAgYml0bWFwX2NvbmYsIHNpemVvZigqYml0bWFwX2NvbmYpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfd2FybmluZygid2wxMjcxIGJpdG1hcCBjb25maWcgb3B0IGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShiaXRtYXBfY29uZik7CisKKwlyZXR1cm4gcmV0OworfQorCiBpbnQgd2wxMjcxX2FjeF9pbml0X21lbV9jb25maWcoc3RydWN0IHdsMTI3MSAqd2wpCiB7CiAJaW50IHJldDsKQEAgLTE1NjcsMyArMTY1NSw2OCBAQAogCWtmcmVlKGFjeCk7CiAJcmV0dXJuIHJldDsKIH0KKworaW50IHdsMTI3MV9hY3hfc2V0X2FwX2JlYWNvbl9maWx0ZXIoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBhY3hfYXBfYmVhY29uX2ZpbHRlciAqYWN4ID0gTlVMTDsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBzZXQgYXAgYmVhY29uIGZpbHRlcjogJWQiLCBlbmFibGUpOworCisJYWN4ID0ga3phbGxvYyhzaXplb2YoKmFjeCksIEdGUF9LRVJORUwpOworCWlmICghYWN4KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWFjeC0+ZW5hYmxlID0gZW5hYmxlID8gMSA6IDA7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX0FQX0JFQUNPTl9GSUxURVJfT1BULAorCQkJCSAgIGFjeCwgc2l6ZW9mKCphY3gpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfd2FybmluZygiYWN4IHNldCBhcCBiZWFjb24gZmlsdGVyIGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShhY3gpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfYWN4X2ZtX2NvZXgoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IHdsMTI3MV9hY3hfZm1fY29leCAqYWN4OworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGZtIGNvZXggc2V0dGluZyIpOworCisJYWN4ID0ga3phbGxvYyhzaXplb2YoKmFjeCksIEdGUF9LRVJORUwpOworCWlmICghYWN4KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWFjeC0+ZW5hYmxlID0gd2wtPmNvbmYuZm1fY29leC5lbmFibGU7CisJYWN4LT5zd2FsbG93X3BlcmlvZCA9IHdsLT5jb25mLmZtX2NvZXguc3dhbGxvd19wZXJpb2Q7CisJYWN4LT5uX2RpdmlkZXJfZnJlZl9zZXRfMSA9IHdsLT5jb25mLmZtX2NvZXgubl9kaXZpZGVyX2ZyZWZfc2V0XzE7CisJYWN4LT5uX2RpdmlkZXJfZnJlZl9zZXRfMiA9IHdsLT5jb25mLmZtX2NvZXgubl9kaXZpZGVyX2ZyZWZfc2V0XzI7CisJYWN4LT5tX2RpdmlkZXJfZnJlZl9zZXRfMSA9CisJCWNwdV90b19sZTE2KHdsLT5jb25mLmZtX2NvZXgubV9kaXZpZGVyX2ZyZWZfc2V0XzEpOworCWFjeC0+bV9kaXZpZGVyX2ZyZWZfc2V0XzIgPQorCQljcHVfdG9fbGUxNih3bC0+Y29uZi5mbV9jb2V4Lm1fZGl2aWRlcl9mcmVmX3NldF8yKTsKKwlhY3gtPmNvZXhfcGxsX3N0YWJpbGl6YXRpb25fdGltZSA9CisJCWNwdV90b19sZTMyKHdsLT5jb25mLmZtX2NvZXguY29leF9wbGxfc3RhYmlsaXphdGlvbl90aW1lKTsKKwlhY3gtPmxkb19zdGFiaWxpemF0aW9uX3RpbWUgPQorCQljcHVfdG9fbGUxNih3bC0+Y29uZi5mbV9jb2V4Lmxkb19zdGFiaWxpemF0aW9uX3RpbWUpOworCWFjeC0+Zm1fZGlzdHVyYmVkX2JhbmRfbWFyZ2luID0KKwkJd2wtPmNvbmYuZm1fY29leC5mbV9kaXN0dXJiZWRfYmFuZF9tYXJnaW47CisJYWN4LT5zd2FsbG93X2Nsa19kaWZmID0gd2wtPmNvbmYuZm1fY29leC5zd2FsbG93X2Nsa19kaWZmOworCisJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9GTV9DT0VYX0NGRywgYWN4LCBzaXplb2YoKmFjeCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJhY3ggZm0gY29leCBzZXR0aW5nIGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShhY3gpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvYWN4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvYWN4LmgKaW5kZXggZGQxOWIwMS4uOWE4OTVlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2FjeC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9hY3guaApAQCAtMzAzLDcgKzMwMyw2IEBACiAJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwogCiAJdTggZW5hYmxlOwotCiAJLyoKIAkgKiBUaGUgbnVtYmVyIG9mIGJlYWNvbnMgd2l0aG91dCB0aGUgdW5pY2FzdCBUSU0KIAkgKiBiaXQgc2V0IHRoYXQgdGhlIGZpcm13YXJlIGJ1ZmZlcnMgYmVmb3JlCkBAIC0zNzAsMTQgKzM2OSwyMyBAQAogCXU4IHBhZFszXTsKIH0gX19wYWNrZWQ7CiAKLXN0cnVjdCBhY3hfYnRfd2xhbl9jb2V4X3BhcmFtIHsKK3N0cnVjdCBhY3hfc3RhX2J0X3dsYW5fY29leF9wYXJhbSB7CiAJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwogCi0JX19sZTMyIHBhcmFtc1tDT05GX1NHX1BBUkFNU19NQVhdOworCV9fbGUzMiBwYXJhbXNbQ09ORl9TR19TVEFfUEFSQU1TX01BWF07CiAJdTggcGFyYW1faWR4OwogCXU4IHBhZGRpbmdbM107CiB9IF9fcGFja2VkOwogCitzdHJ1Y3QgYWN4X2FwX2J0X3dsYW5fY29leF9wYXJhbSB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJX19sZTMyIHBhcmFtc1tDT05GX1NHX0FQX1BBUkFNU19NQVhdOworCXU4IHBhcmFtX2lkeDsKKwl1OCBwYWRkaW5nWzNdOworfSBfX3BhY2tlZDsKKworCiBzdHJ1Y3QgYWN4X2Rjb19pdHJpbV9wYXJhbXMgewogCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKIApAQCAtOTM5LDYgKzk0NywxNiBAQAogCXU4IHBhZGRpbmc7CiB9IF9fcGFja2VkOwogCisjZGVmaW5lIEhPU1RfSUZfQ0ZHX1JYX0ZJRk9fRU5BQkxFICAgICBCSVQoMCkKKyNkZWZpbmUgSE9TVF9JRl9DRkdfVFhfRVhUUkFfQkxLU19TV0FQIEJJVCgxKQorI2RlZmluZSBIT1NUX0lGX0NGR19UWF9QQURfVE9fU0RJT19CTEsgQklUKDMpCisKK3N0cnVjdCB3bDEyNzFfYWN4X2hvc3RfY29uZmlnX2JpdG1hcCB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJX19sZTMyIGhvc3RfY2ZnX2JpdG1hcDsKK30gX19wYWNrZWQ7CisKIGVudW0gewogCVdMMTI3MV9BQ1hfVFJJR19UWVBFX0xFVkVMID0gMCwKIAlXTDEyNzFfQUNYX1RSSUdfVFlQRV9FREdFLApAQCAtMTE2Miw2ICsxMTgwLDcyIEBACiAJdTggcGFkZGluZzFbMl07CiB9IF9fcGFja2VkOwogCitzdHJ1Y3QgYWN4X2FwX2JlYWNvbl9maWx0ZXIgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKworCXU4IGVuYWJsZTsKKwl1OCBwYWRbM107Cit9IF9fcGFja2VkOworCisvKgorICogQUNYX0ZNX0NPRVhfQ0ZHCisgKiBzZXQgdGhlIEZNIGNvLWV4aXN0ZW5jZSBwYXJhbWV0ZXJzLgorICovCitzdHJ1Y3Qgd2wxMjcxX2FjeF9mbV9jb2V4IHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisJLyogZW5hYmxlKDEpIC8gZGlzYWJsZSgwKSB0aGUgRk0gQ29leCBmZWF0dXJlICovCisJdTggZW5hYmxlOworCS8qCisJICogU3dhbGxvdyBwZXJpb2QgdXNlZCBpbiBDT0VYIFBMTCBzd2FsbG93aW5nIG1lY2hhbmlzbS4KKwkgKiAweEZGID0gdXNlIEZXIGRlZmF1bHQKKwkgKi8KKwl1OCBzd2FsbG93X3BlcmlvZDsKKwkvKgorCSAqIFRoZSBOIGRpdmlkZXIgdXNlZCBpbiBDT0VYIFBMTCBzd2FsbG93aW5nIG1lY2hhbmlzbSBmb3IgRnJlZiBvZgorCSAqIDM4LjQvMTkuMiBNaHouIDB4RkYgPSB1c2UgRlcgZGVmYXVsdAorCSAqLworCXU4IG5fZGl2aWRlcl9mcmVmX3NldF8xOworCS8qCisJICogVGhlIE4gZGl2aWRlciB1c2VkIGluIENPRVggUExMIHN3YWxsb3dpbmcgbWVjaGFuaXNtIGZvciBGcmVmIG9mCisJICogMjYvNTIgTWh6LiAweEZGID0gdXNlIEZXIGRlZmF1bHQKKwkgKi8KKwl1OCBuX2RpdmlkZXJfZnJlZl9zZXRfMjsKKwkvKgorCSAqIFRoZSBNIGRpdmlkZXIgdXNlZCBpbiBDT0VYIFBMTCBzd2FsbG93aW5nIG1lY2hhbmlzbSBmb3IgRnJlZiBvZgorCSAqIDM4LjQvMTkuMiBNaHouIDB4RkZGRiA9IHVzZSBGVyBkZWZhdWx0CisJICovCisJX19sZTE2IG1fZGl2aWRlcl9mcmVmX3NldF8xOworCS8qCisJICogVGhlIE0gZGl2aWRlciB1c2VkIGluIENPRVggUExMIHN3YWxsb3dpbmcgbWVjaGFuaXNtIGZvciBGcmVmIG9mCisJICogMjYvNTIgTWh6LiAweEZGRkYgPSB1c2UgRlcgZGVmYXVsdAorCSAqLworCV9fbGUxNiBtX2RpdmlkZXJfZnJlZl9zZXRfMjsKKwkvKgorCSAqIFRoZSB0aW1lIGR1cmF0aW9uIGluIHVTZWMgcmVxdWlyZWQgZm9yIENPRVggUExMIHRvIHN0YWJpbGl6ZS4KKwkgKiAweEZGRkZGRkZGID0gdXNlIEZXIGRlZmF1bHQKKwkgKi8KKwlfX2xlMzIgY29leF9wbGxfc3RhYmlsaXphdGlvbl90aW1lOworCS8qCisJICogVGhlIHRpbWUgZHVyYXRpb24gaW4gdVNlYyByZXF1aXJlZCBmb3IgTERPIHRvIHN0YWJpbGl6ZS4KKwkgKiAweEZGRkZGRkZGID0gdXNlIEZXIGRlZmF1bHQKKwkgKi8KKwlfX2xlMTYgbGRvX3N0YWJpbGl6YXRpb25fdGltZTsKKwkvKgorCSAqIFRoZSBkaXN0dXJiZWQgZnJlcXVlbmN5IGJhbmQgbWFyZ2luIGFyb3VuZCB0aGUgZGlzdHVyYmVkIGZyZXF1ZW5jeQorCSAqIGNlbnRlciAoc2luZ2xlIHNpZGVkKS4KKwkgKiBGb3IgZXhhbXBsZSwgaWYgMiBpcyBjb25maWd1cmVkLCB0aGUgZm9sbG93aW5nIGNoYW5uZWxzIHdpbGwgYmUKKwkgKiBjb25zaWRlcmVkIGRpc3R1cmJlZCBjaGFubmVsOgorCSAqICAgODAgKy0gMC4xIE1IeiwgOTEgKy0gMC4xIE1IeiwgOTggKy0gMC4xIE1IeiwgMTAyICstIDAuMSBNSAorCSAqIDB4RkYgPSB1c2UgRlcgZGVmYXVsdAorCSAqLworCXU4IGZtX2Rpc3R1cmJlZF9iYW5kX21hcmdpbjsKKwkvKgorCSAqIFRoZSBzd2FsbG93IGNsb2NrIGRpZmZlcmVuY2Ugb2YgdGhlIHN3YWxsb3dpbmcgbWVjaGFuaXNtLgorCSAqIDB4RkYgPSB1c2UgRlcgZGVmYXVsdAorCSAqLworCXU4IHN3YWxsb3dfY2xrX2RpZmY7Cit9IF9fcGFja2VkOworCiBlbnVtIHsKIAlBQ1hfV0FLRV9VUF9DT05ESVRJT05TICAgICAgPSAweDAwMDIsCiAJQUNYX01FTV9DRkcgICAgICAgICAgICAgICAgID0gMHgwMDAzLApAQCAtMTE4MCw2ICsxMjY0LDcgQEAKIAlBQ1hfVElEX0NGRyAgICAgICAgICAgICAgICAgPSAweDAwMUEsCiAJQUNYX1BTX1JYX1NUUkVBTUlORyAgICAgICAgID0gMHgwMDFCLAogCUFDWF9CRUFDT05fRklMVEVSX09QVCAgICAgICA9IDB4MDAxRiwKKwlBQ1hfQVBfQkVBQ09OX0ZJTFRFUl9PUFQgICAgPSAweDAwMjAsCiAJQUNYX05PSVNFX0hJU1QgICAgICAgICAgICAgID0gMHgwMDIxLAogCUFDWF9IREtfVkVSU0lPTiAgICAgICAgICAgICA9IDB4MDAyMiwgLyogPz8/ICovCiAJQUNYX1BEX1RIUkVTSE9MRCAgICAgICAgICAgID0gMHgwMDIzLApAQCAtMTE5MSw2ICsxMjc2LDcgQEAKIAlBQ1hfQkNOX0RUSU1fT1BUSU9OUyAgICAgICAgPSAweDAwMzEsCiAJQUNYX1NHX0VOQUJMRSAgICAgICAgICAgICAgID0gMHgwMDMyLAogCUFDWF9TR19DRkcgICAgICAgICAgICAgICAgICA9IDB4MDAzMywKKwlBQ1hfRk1fQ09FWF9DRkcgICAgICAgICAgICAgPSAweDAwMzQsCiAJQUNYX0JFQUNPTl9GSUxURVJfVEFCTEUgICAgID0gMHgwMDM4LAogCUFDWF9BUlBfSVBfRklMVEVSICAgICAgICAgICA9IDB4MDAzOSwKIAlBQ1hfUk9BTUlOR19TVEFUSVNUSUNTX1RCTCAgPSAweDAwM0IsCkBAIC0xMjQ3LDEzICsxMzMzLDE0IEBACiBpbnQgd2wxMjcxX2FjeF9ncm91cF9hZGRyZXNzX3RibChzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCBlbmFibGUsCiAJCQkJIHZvaWQgKm1jX2xpc3QsIHUzMiBtY19saXN0X2xlbik7CiBpbnQgd2wxMjcxX2FjeF9zZXJ2aWNlX3BlcmlvZF90aW1lb3V0KHN0cnVjdCB3bDEyNzEgKndsKTsKLWludCB3bDEyNzFfYWN4X3J0c190aHJlc2hvbGQoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiBydHNfdGhyZXNob2xkKTsKK2ludCB3bDEyNzFfYWN4X3J0c190aHJlc2hvbGQoc3RydWN0IHdsMTI3MSAqd2wsIHUzMiBydHNfdGhyZXNob2xkKTsKIGludCB3bDEyNzFfYWN4X2Rjb19pdHJpbV9wYXJhbXMoc3RydWN0IHdsMTI3MSAqd2wpOwogaW50IHdsMTI3MV9hY3hfYmVhY29uX2ZpbHRlcl9vcHQoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgZW5hYmxlX2ZpbHRlcik7CiBpbnQgd2wxMjcxX2FjeF9iZWFjb25fZmlsdGVyX3RhYmxlKHN0cnVjdCB3bDEyNzEgKndsKTsKIGludCB3bDEyNzFfYWN4X2Nvbm5fbW9uaXRfcGFyYW1zKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGVuYWJsZSk7CiBpbnQgd2wxMjcxX2FjeF9zZ19lbmFibGUoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgZW5hYmxlKTsKLWludCB3bDEyNzFfYWN4X3NnX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX2FjeF9zdGFfc2dfY2ZnKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfYWN4X2FwX3NnX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CiBpbnQgd2wxMjcxX2FjeF9jY2FfdGhyZXNob2xkKHN0cnVjdCB3bDEyNzEgKndsKTsKIGludCB3bDEyNzFfYWN4X2Jjbl9kdGltX29wdGlvbnMoc3RydWN0IHdsMTI3MSAqd2wpOwogaW50IHdsMTI3MV9hY3hfYWlkKHN0cnVjdCB3bDEyNzEgKndsLCB1MTYgYWlkKTsKQEAgLTEyNzAsMTEgKzEzNTcsMTIgQEAKIGludCB3bDEyNzFfYWN4X3RpZF9jZmcoc3RydWN0IHdsMTI3MSAqd2wsIHU4IHF1ZXVlX2lkLCB1OCBjaGFubmVsX3R5cGUsCiAJCSAgICAgICB1OCB0c2lkLCB1OCBwc19zY2hlbWUsIHU4IGFja19wb2xpY3ksCiAJCSAgICAgICB1MzIgYXBzZF9jb25mMCwgdTMyIGFwc2RfY29uZjEpOwotaW50IHdsMTI3MV9hY3hfZnJhZ190aHJlc2hvbGQoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiBmcmFnX3RocmVzaG9sZCk7CitpbnQgd2wxMjcxX2FjeF9mcmFnX3RocmVzaG9sZChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTMyIGZyYWdfdGhyZXNob2xkKTsKIGludCB3bDEyNzFfYWN4X3R4X2NvbmZpZ19vcHRpb25zKHN0cnVjdCB3bDEyNzEgKndsKTsKIGludCB3bDEyNzFfYWN4X2FwX21lbV9jZmcoc3RydWN0IHdsMTI3MSAqd2wpOwogaW50IHdsMTI3MV9hY3hfc3RhX21lbV9jZmcoc3RydWN0IHdsMTI3MSAqd2wpOwogaW50IHdsMTI3MV9hY3hfaW5pdF9tZW1fY29uZmlnKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfYWN4X2hvc3RfaWZfY2ZnX2JpdG1hcChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTMyIGhvc3RfY2ZnX2JpdG1hcCk7CiBpbnQgd2wxMjcxX2FjeF9pbml0X3J4X2ludGVycnVwdChzdHJ1Y3Qgd2wxMjcxICp3bCk7CiBpbnQgd2wxMjcxX2FjeF9zbWFydF9yZWZsZXgoc3RydWN0IHdsMTI3MSAqd2wpOwogaW50IHdsMTI3MV9hY3hfYmV0X2VuYWJsZShzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCBlbmFibGUpOwpAQCAtMTI5OSw1ICsxMzg3LDcgQEAKIGludCB3bDEyNzFfYWN4X21heF90eF9yZXRyeShzdHJ1Y3Qgd2wxMjcxICp3bCk7CiBpbnQgd2wxMjcxX2FjeF9jb25maWdfcHMoc3RydWN0IHdsMTI3MSAqd2wpOwogaW50IHdsMTI3MV9hY3hfc2V0X2luY29ubmVjdGlvbl9zdGEoc3RydWN0IHdsMTI3MSAqd2wsIHU4ICphZGRyKTsKK2ludCB3bDEyNzFfYWN4X3NldF9hcF9iZWFjb25fZmlsdGVyKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGVuYWJsZSk7CitpbnQgd2wxMjcxX2FjeF9mbV9jb2V4KHN0cnVjdCB3bDEyNzEgKndsKTsKIAogI2VuZGlmIC8qIF9fV0wxMjcxX0FDWF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9ib290LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvYm9vdC5jCmluZGV4IDY5MzRkZmYuLmIwN2Y4YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9ib290LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2Jvb3QuYwpAQCAtMjIsNiArMjIsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvd2wxMnh4Lmg+CiAKICNpbmNsdWRlICJhY3guaCIKICNpbmNsdWRlICJyZWcuaCIKQEAgLTI0MywzMyArMjQ0LDU3IEBACiAJaWYgKHdsLT5udnMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQkvKgotCSAqIEZJWE1FOiB0aGUgTEVHQUNZIE5WUyBpbWFnZSBzdXBwb3J0IChOVlMncyBtaXNzaW5nIHRoZSA1R0h6IGJhbmQKLQkgKiBjb25maWd1cmF0aW9ucykgY2FuIGJlIHJlbW92ZWQgd2hlbiB0aG9zZSBOVlMgZmlsZXMgc3RvcCBmbG9hdGluZwotCSAqIGFyb3VuZC4KLQkgKi8KLQlpZiAod2wtPm52c19sZW4gPT0gc2l6ZW9mKHN0cnVjdCB3bDEyNzFfbnZzX2ZpbGUpIHx8Ci0JICAgIHdsLT5udnNfbGVuID09IFdMMTI3MV9JTklfTEVHQUNZX05WU19GSUxFX1NJWkUpIHsKLQkJLyogZm9yIG5vdyAxMWEgaXMgdW5zdXBwb3J0ZWQgaW4gQVAgbW9kZSAqLwotCQlpZiAod2wtPmJzc190eXBlICE9IEJTU19UWVBFX0FQX0JTUyAmJgotCQkgICAgd2wtPm52cy0+Z2VuZXJhbF9wYXJhbXMuZHVhbF9tb2RlX3NlbGVjdCkKLQkJCXdsLT5lbmFibGVfMTFhID0gdHJ1ZTsKLQl9CisJaWYgKHdsLT5jaGlwLmlkID09IENISVBfSURfMTI4M19QRzIwKSB7CisJCXN0cnVjdCB3bDEyOHhfbnZzX2ZpbGUgKm52cyA9IChzdHJ1Y3Qgd2wxMjh4X252c19maWxlICopd2wtPm52czsKIAotCWlmICh3bC0+bnZzX2xlbiAhPSBzaXplb2Yoc3RydWN0IHdsMTI3MV9udnNfZmlsZSkgJiYKLQkgICAgKHdsLT5udnNfbGVuICE9IFdMMTI3MV9JTklfTEVHQUNZX05WU19GSUxFX1NJWkUgfHwKLQkgICAgIHdsLT5lbmFibGVfMTFhKSkgewotCQl3bDEyNzFfZXJyb3IoIm52cyBzaXplIGlzIG5vdCBhcyBleHBlY3RlZDogJXp1ICE9ICV6dSIsCi0JCQkgICAgIHdsLT5udnNfbGVuLCBzaXplb2Yoc3RydWN0IHdsMTI3MV9udnNfZmlsZSkpOwotCQlrZnJlZSh3bC0+bnZzKTsKLQkJd2wtPm52cyA9IE5VTEw7Ci0JCXdsLT5udnNfbGVuID0gMDsKLQkJcmV0dXJuIC1FSUxTRVE7Ci0JfQorCQlpZiAod2wtPm52c19sZW4gPT0gc2l6ZW9mKHN0cnVjdCB3bDEyOHhfbnZzX2ZpbGUpKSB7CisJCQlpZiAobnZzLT5nZW5lcmFsX3BhcmFtcy5kdWFsX21vZGVfc2VsZWN0KQorCQkJCXdsLT5lbmFibGVfMTFhID0gdHJ1ZTsKKwkJfSBlbHNlIHsKKwkJCXdsMTI3MV9lcnJvcigibnZzIHNpemUgaXMgbm90IGFzIGV4cGVjdGVkOiAlenUgIT0gJXp1IiwKKwkJCQkgICAgIHdsLT5udnNfbGVuLAorCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCB3bDEyOHhfbnZzX2ZpbGUpKTsKKwkJCWtmcmVlKHdsLT5udnMpOworCQkJd2wtPm52cyA9IE5VTEw7CisJCQl3bC0+bnZzX2xlbiA9IDA7CisJCQlyZXR1cm4gLUVJTFNFUTsKKwkJfQogCi0JLyogb25seSB0aGUgZmlyc3QgcGFydCBvZiB0aGUgTlZTIG5lZWRzIHRvIGJlIHVwbG9hZGVkICovCi0JbnZzX2xlbiA9IHNpemVvZih3bC0+bnZzLT5udnMpOwotCW52c19wdHIgPSAodTggKil3bC0+bnZzLT5udnM7CisJCS8qIG9ubHkgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIE5WUyBuZWVkcyB0byBiZSB1cGxvYWRlZCAqLworCQludnNfbGVuID0gc2l6ZW9mKG52cy0+bnZzKTsKKwkJbnZzX3B0ciA9ICh1OCAqKW52cy0+bnZzOworCisJfSBlbHNlIHsKKwkJc3RydWN0IHdsMTI3MV9udnNfZmlsZSAqbnZzID0KKwkJCShzdHJ1Y3Qgd2wxMjcxX252c19maWxlICopd2wtPm52czsKKwkJLyoKKwkJICogRklYTUU6IHRoZSBMRUdBQ1kgTlZTIGltYWdlIHN1cHBvcnQgKE5WUydzIG1pc3NpbmcgdGhlIDVHSHoKKwkJICogYmFuZCBjb25maWd1cmF0aW9ucykgY2FuIGJlIHJlbW92ZWQgd2hlbiB0aG9zZSBOVlMgZmlsZXMgc3RvcAorCQkgKiBmbG9hdGluZyBhcm91bmQuCisJCSAqLworCQlpZiAod2wtPm52c19sZW4gPT0gc2l6ZW9mKHN0cnVjdCB3bDEyNzFfbnZzX2ZpbGUpIHx8CisJCSAgICB3bC0+bnZzX2xlbiA9PSBXTDEyNzFfSU5JX0xFR0FDWV9OVlNfRklMRV9TSVpFKSB7CisJCQkvKiBmb3Igbm93IDExYSBpcyB1bnN1cHBvcnRlZCBpbiBBUCBtb2RlICovCisJCQlpZiAod2wtPmJzc190eXBlICE9IEJTU19UWVBFX0FQX0JTUyAmJgorCQkJICAgIG52cy0+Z2VuZXJhbF9wYXJhbXMuZHVhbF9tb2RlX3NlbGVjdCkKKwkJCQl3bC0+ZW5hYmxlXzExYSA9IHRydWU7CisJCX0KKworCQlpZiAod2wtPm52c19sZW4gIT0gc2l6ZW9mKHN0cnVjdCB3bDEyNzFfbnZzX2ZpbGUpICYmCisJCSAgICAod2wtPm52c19sZW4gIT0gV0wxMjcxX0lOSV9MRUdBQ1lfTlZTX0ZJTEVfU0laRSB8fAorCQkgICAgIHdsLT5lbmFibGVfMTFhKSkgeworCQkJd2wxMjcxX2Vycm9yKCJudnMgc2l6ZSBpcyBub3QgYXMgZXhwZWN0ZWQ6ICV6dSAhPSAlenUiLAorCQkJCXdsLT5udnNfbGVuLCBzaXplb2Yoc3RydWN0IHdsMTI3MV9udnNfZmlsZSkpOworCQkJa2ZyZWUod2wtPm52cyk7CisJCQl3bC0+bnZzID0gTlVMTDsKKwkJCXdsLT5udnNfbGVuID0gMDsKKwkJCXJldHVybiAtRUlMU0VROworCQl9CisKKwkJLyogb25seSB0aGUgZmlyc3QgcGFydCBvZiB0aGUgTlZTIG5lZWRzIHRvIGJlIHVwbG9hZGVkICovCisJCW52c19sZW4gPSBzaXplb2YobnZzLT5udnMpOworCQludnNfcHRyID0gKHU4ICopIG52cy0+bnZzOworCX0KIAogCS8qIHVwZGF0ZSBjdXJyZW50IE1BQyBhZGRyZXNzIHRvIE5WUyAqLwogCW52c19wdHJbMTFdID0gd2wtPm1hY19hZGRyWzBdOwpAQCAtMzE5LDEwICszNDQsMTMgQEAKIAkvKgogCSAqIFdlJ3ZlIHJlYWNoZWQgdGhlIGZpcnN0IHplcm8gbGVuZ3RoLCB0aGUgZmlyc3QgTlZTIHRhYmxlCiAJICogaXMgbG9jYXRlZCBhdCBhbiBhbGlnbmVkIG9mZnNldCB3aGljaCBpcyBhdCBsZWFzdCA3IGJ5dGVzIGZ1cnRoZXIuCisJICogTk9URTogVGhlIHdsLT5udnMtPm52cyBlbGVtZW50IG11c3QgYmUgZmlyc3QsIGluIG9yZGVyIHRvCisJICogc2ltcGxpZnkgdGhlIGNhc3RpbmcsIHdlIGFzc3VtZSBpdCBpcyBhdCB0aGUgYmVnaW5uaW5nIG9mCisJICogdGhlIHdsLT5udnMgc3RydWN0dXJlLgogCSAqLwotCW52c19wdHIgPSAodTggKil3bC0+bnZzLT5udnMgKwotCQkJQUxJR04obnZzX3B0ciAtICh1OCAqKXdsLT5udnMtPm52cyArIDcsIDQpOwotCW52c19sZW4gLT0gbnZzX3B0ciAtICh1OCAqKXdsLT5udnMtPm52czsKKwludnNfcHRyID0gKHU4ICopd2wtPm52cyArCisJCQlBTElHTihudnNfcHRyIC0gKHU4ICopd2wtPm52cyArIDcsIDQpOworCW52c19sZW4gLT0gbnZzX3B0ciAtICh1OCAqKXdsLT5udnM7CiAKIAkvKiBOb3cgd2UgbXVzdCBzZXQgdGhlIHBhcnRpdGlvbiBjb3JyZWN0bHkgKi8KIAl3bDEyNzFfc2V0X3BhcnRpdGlvbih3bCwgJnBhcnRfdGFibGVbUEFSVF9XT1JLXSk7CkBAIC00NTAsMTAgKzQ3OCwxNCBAQAogCQlESVNDT05ORUNUX0VWRU5UX0NPTVBMRVRFX0lEIHwKIAkJUlNTSV9TTlJfVFJJR0dFUl8wX0VWRU5UX0lEIHwKIAkJUFNQT0xMX0RFTElWRVJZX0ZBSUxVUkVfRVZFTlRfSUQgfAotCQlTT0ZUX0dFTUlOSV9TRU5TRV9FVkVOVF9JRDsKKwkJU09GVF9HRU1JTklfU0VOU0VfRVZFTlRfSUQgfAorCQlQRVJJT0RJQ19TQ0FOX1JFUE9SVF9FVkVOVF9JRCB8CisJCVBFUklPRElDX1NDQU5fQ09NUExFVEVfRVZFTlRfSUQ7CiAKIAlpZiAod2wtPmJzc190eXBlID09IEJTU19UWVBFX0FQX0JTUykKIAkJd2wtPmV2ZW50X21hc2sgfD0gU1RBX1JFTU9WRV9DT01QTEVURV9FVkVOVF9JRDsKKwllbHNlCisJCXdsLT5ldmVudF9tYXNrIHw9IERVTU1ZX1BBQ0tFVF9FVkVOVF9JRDsKIAogCXJldCA9IHdsMTI3MV9ldmVudF91bm1hc2sod2wpOwogCWlmIChyZXQgPCAwKSB7CkBAIC00OTMsMjQgKzUyNSwxNTkgQEAKIAkJd2wtPnF1aXJrcyB8PSBXTDEyWFhfUVVJUktfRU5EX09GX1RSQU5TQUNUSU9OOwogfQogCi0vKiB1cGxvYWRzIE5WUyBhbmQgZmlybXdhcmUgKi8KLWludCB3bDEyNzFfbG9hZF9maXJtd2FyZShzdHJ1Y3Qgd2wxMjcxICp3bCkKK3N0YXRpYyBpbnQgd2wxMjh4X3N3aXRjaF90Y3hvX3RvX2ZyZWYoc3RydWN0IHdsMTI3MSAqd2wpCiB7Ci0JaW50IHJldCA9IDA7Ci0JdTMyIHRtcCwgY2xrLCBwYXVzZTsKKwl1MTYgc3BhcmVfcmVnOworCisJLyogTWFzayBiaXRzIFsyXSAmIFs4OjRdIGluIHRoZSBzeXNfY2xrX2NmZyByZWdpc3RlciAqLworCXNwYXJlX3JlZyA9IHdsMTI3MV90b3BfcmVnX3JlYWQod2wsIFdMX1NQQVJFX1JFRyk7CisJaWYgKHNwYXJlX3JlZyA9PSAweEZGRkYpCisJCXJldHVybiAtRUZBVUxUOworCXNwYXJlX3JlZyB8PSAoQklUKDMpIHwgQklUKDUpIHwgQklUKDYpKTsKKwl3bDEyNzFfdG9wX3JlZ193cml0ZSh3bCwgV0xfU1BBUkVfUkVHLCBzcGFyZV9yZWcpOworCisJLyogRW5hYmxlIEZSRUZfQ0xLX1JFUSAmIG11eCBNQ1MgYW5kIGNvZXggUExMcyB0byBGUkVGICovCisJd2wxMjcxX3RvcF9yZWdfd3JpdGUod2wsIFNZU19DTEtfQ0ZHX1JFRywKKwkJCSAgICAgV0xfQ0xLX1JFUV9UWVBFX1BHMiB8IE1DU19QTExfQ0xLX1NFTF9GUkVGKTsKKworCS8qIERlbGF5IGV4ZWN1dGlvbiBmb3IgMTVtc2VjLCB0byBsZXQgdGhlIEhXIHNldHRsZSAqLworCW1kZWxheSgxNSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgd2wxMjh4X2lzX3RjeG9fdmFsaWQoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJdTE2IHRjeG9fZGV0ZWN0aW9uOworCisJdGN4b19kZXRlY3Rpb24gPSB3bDEyNzFfdG9wX3JlZ19yZWFkKHdsLCBUQ1hPX0NMS19ERVRFQ1RfUkVHKTsKKwlpZiAodGN4b19kZXRlY3Rpb24gJiBUQ1hPX0RFVF9GQUlMRUQpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCB3bDEyOHhfaXNfZnJlZl92YWxpZChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwl1MTYgZnJlZl9kZXRlY3Rpb247CisKKwlmcmVmX2RldGVjdGlvbiA9IHdsMTI3MV90b3BfcmVnX3JlYWQod2wsIEZSRUZfQ0xLX0RFVEVDVF9SRUcpOworCWlmIChmcmVmX2RldGVjdGlvbiAmIEZSRUZfQ0xLX0RFVEVDVF9GQUlMKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGludCB3bDEyOHhfbWFudWFsbHlfY29uZmlndXJlX21jc19wbGwoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJd2wxMjcxX3RvcF9yZWdfd3JpdGUod2wsIE1DU19QTExfTV9SRUcsIE1DU19QTExfTV9SRUdfVkFMKTsKKwl3bDEyNzFfdG9wX3JlZ193cml0ZSh3bCwgTUNTX1BMTF9OX1JFRywgTUNTX1BMTF9OX1JFR19WQUwpOworCXdsMTI3MV90b3BfcmVnX3dyaXRlKHdsLCBNQ1NfUExMX0NPTkZJR19SRUcsIE1DU19QTExfQ09ORklHX1JFR19WQUwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjh4X2NvbmZpZ3VyZV9tY3NfcGxsKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgY2xrKQoreworCXUxNiBzcGFyZV9yZWc7CisJdTE2IHBsbF9jb25maWc7CisJdTggaW5wdXRfZnJlcTsKKworCS8qIE1hc2sgYml0cyBbMzoxXSBpbiB0aGUgc3lzX2Nsa19jZmcgcmVnaXN0ZXIgKi8KKwlzcGFyZV9yZWcgPSB3bDEyNzFfdG9wX3JlZ19yZWFkKHdsLCBXTF9TUEFSRV9SRUcpOworCWlmIChzcGFyZV9yZWcgPT0gMHhGRkZGKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlzcGFyZV9yZWcgfD0gQklUKDIpOworCXdsMTI3MV90b3BfcmVnX3dyaXRlKHdsLCBXTF9TUEFSRV9SRUcsIHNwYXJlX3JlZyk7CisKKwkvKiBIYW5kbGUgc3BlY2lhbCBjYXNlcyBvZiB0aGUgVENYTyBjbG9jayAqLworCWlmICh3bC0+dGN4b19jbG9jayA9PSBXTDEyWFhfVENYT0NMT0NLXzE2XzggfHwKKwkgICAgd2wtPnRjeG9fY2xvY2sgPT0gV0wxMlhYX1RDWE9DTE9DS18zM182KQorCQlyZXR1cm4gd2wxMjh4X21hbnVhbGx5X2NvbmZpZ3VyZV9tY3NfcGxsKHdsKTsKKworCS8qIFNldCB0aGUgaW5wdXQgZnJlcXVlbmN5IGFjY29yZGluZyB0byB0aGUgc2VsZWN0ZWQgY2xvY2sgc291cmNlICovCisJaW5wdXRfZnJlcSA9IChjbGsgJiAxKSArIDE7CisKKwlwbGxfY29uZmlnID0gd2wxMjcxX3RvcF9yZWdfcmVhZCh3bCwgTUNTX1BMTF9DT05GSUdfUkVHKTsKKwlpZiAocGxsX2NvbmZpZyA9PSAweEZGRkYpCisJCXJldHVybiAtRUZBVUxUOworCXBsbF9jb25maWcgfD0gKGlucHV0X2ZyZXEgPDwgTUNTX1NFTF9JTl9GUkVRX1NISUZUKTsKKwlwbGxfY29uZmlnIHw9IE1DU19QTExfRU5BQkxFX0hQOworCXdsMTI3MV90b3BfcmVnX3dyaXRlKHdsLCBNQ1NfUExMX0NPTkZJR19SRUcsIHBsbF9jb25maWcpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXTDEyOHggaGFzIHR3byBjbG9ja3MgaW5wdXQgLSBUQ1hPIGFuZCBGUkVGLgorICogVENYTyBpcyB0aGUgbWFpbiBjbG9jayBvZiB0aGUgZGV2aWNlLCB3aGlsZSBGUkVGIGlzIHVzZWQgdG8gc3luYworICogYmV0d2VlbiB0aGUgR1BTIGFuZCB0aGUgY2VsbHVsYXIgbW9kZW0uCisgKiBJbiBjYXNlcyB3aGVyZSBUQ1hPIGlzIDMyLjczNk1IeiBvciAxNi4zNjhNSHosIHRoZSBGUkVGIHdpbGwgYmUgdXNlZAorICogYXMgdGhlIFdMQU4vQlQgbWFpbiBjbG9jay4KKyAqLworc3RhdGljIGludCB3bDEyOHhfYm9vdF9jbGsoc3RydWN0IHdsMTI3MSAqd2wsIGludCAqc2VsZWN0ZWRfY2xvY2spCit7CisJdTE2IHN5c19jbGtfY2ZnOworCisJLyogRm9yIFhUQUwtb25seSBtb2RlcywgRlJFRiB3aWxsIGJlIHVzZWQgYWZ0ZXIgc3dpdGNoaW5nIGZyb20gVENYTyAqLworCWlmICh3bC0+cmVmX2Nsb2NrID09IFdMMTJYWF9SRUZDTE9DS18yNl9YVEFMIHx8CisJICAgIHdsLT5yZWZfY2xvY2sgPT0gV0wxMlhYX1JFRkNMT0NLXzM4X1hUQUwpIHsKKwkJaWYgKCF3bDEyOHhfc3dpdGNoX3RjeG9fdG9fZnJlZih3bCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBmcmVmX2NsazsKKwl9CisKKwkvKiBRdWVyeSB0aGUgSFcsIHRvIGRldGVybWluZSB3aGljaCBjbG9jayBzb3VyY2Ugd2Ugc2hvdWxkIHVzZSAqLworCXN5c19jbGtfY2ZnID0gd2wxMjcxX3RvcF9yZWdfcmVhZCh3bCwgU1lTX0NMS19DRkdfUkVHKTsKKwlpZiAoc3lzX2Nsa19jZmcgPT0gMHhGRkZGKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoc3lzX2Nsa19jZmcgJiBQUkNNX0NNX0VOX01VWF9XTEFOX0ZSRUYpCisJCWdvdG8gZnJlZl9jbGs7CisKKwkvKiBJZiBUQ1hPIGlzIGVpdGhlciAzMi43MzZNSHogb3IgMTYuMzY4TUh6LCBzd2l0Y2ggdG8gRlJFRiAqLworCWlmICh3bC0+dGN4b19jbG9jayA9PSBXTDEyWFhfVENYT0NMT0NLXzE2XzM2OCB8fAorCSAgICB3bC0+dGN4b19jbG9jayA9PSBXTDEyWFhfVENYT0NMT0NLXzMyXzczNikgeworCQlpZiAoIXdsMTI4eF9zd2l0Y2hfdGN4b190b19mcmVmKHdsKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlnb3RvIGZyZWZfY2xrOworCX0KKworCS8qIFRDWE8gY2xvY2sgaXMgc2VsZWN0ZWQgKi8KKwlpZiAoIXdsMTI4eF9pc190Y3hvX3ZhbGlkKHdsKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJKnNlbGVjdGVkX2Nsb2NrID0gd2wtPnRjeG9fY2xvY2s7CisJZ290byBjb25maWdfbWNzX3BsbDsKKworZnJlZl9jbGs6CisJLyogRlJFRiBjbG9jayBpcyBzZWxlY3RlZCAqLworCWlmICghd2wxMjh4X2lzX2ZyZWZfdmFsaWQod2wpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkqc2VsZWN0ZWRfY2xvY2sgPSB3bC0+cmVmX2Nsb2NrOworCitjb25maWdfbWNzX3BsbDoKKwlyZXR1cm4gd2wxMjh4X2NvbmZpZ3VyZV9tY3NfcGxsKHdsLCAqc2VsZWN0ZWRfY2xvY2spOworfQorCitzdGF0aWMgaW50IHdsMTI3eF9ib290X2NsayhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwl1MzIgcGF1c2U7CisJdTMyIGNsazsKIAogCXdsMTI3MV9ib290X2h3X3ZlcnNpb24od2wpOwogCi0JaWYgKHdsLT5yZWZfY2xvY2sgPT0gMCB8fCB3bC0+cmVmX2Nsb2NrID09IDIgfHwgd2wtPnJlZl9jbG9jayA9PSA0KQorCWlmICh3bC0+cmVmX2Nsb2NrID09IENPTkZfUkVGX0NMS18xOV8yX0UgfHwKKwkgICAgd2wtPnJlZl9jbG9jayA9PSBDT05GX1JFRl9DTEtfMzhfNF9FIHx8CisJICAgIHdsLT5yZWZfY2xvY2sgPT0gQ09ORl9SRUZfQ0xLXzM4XzRfTV9YVEFMKQogCQkvKiByZWYgY2xrOiAxOS4yLzM4LjQvMzguNC1YVEFMICovCiAJCWNsayA9IDB4MzsKLQllbHNlIGlmICh3bC0+cmVmX2Nsb2NrID09IDEgfHwgd2wtPnJlZl9jbG9jayA9PSAzKQorCWVsc2UgaWYgKHdsLT5yZWZfY2xvY2sgPT0gQ09ORl9SRUZfQ0xLXzI2X0UgfHwKKwkJIHdsLT5yZWZfY2xvY2sgPT0gQ09ORl9SRUZfQ0xLXzUyX0UpCiAJCS8qIHJlZiBjbGs6IDI2LzUyICovCiAJCWNsayA9IDB4NTsKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKHdsLT5yZWZfY2xvY2sgIT0gMCkgeworCWlmICh3bC0+cmVmX2Nsb2NrICE9IENPTkZfUkVGX0NMS18xOV8yX0UpIHsKIAkJdTE2IHZhbDsKIAkJLyogU2V0IGNsb2NrIHR5cGUgKG9wZW4gZHJhaW4pICovCiAJCXZhbCA9IHdsMTI3MV90b3BfcmVnX3JlYWQod2wsIE9DUF9SRUdfQ0xLX1RZUEUpOwpAQCAtNTQwLDYgKzcwNywyNiBAQAogCXBhdXNlIHw9IFdVX0NPVU5URVJfUEFVU0VfVkFMOwogCXdsMTI3MV93cml0ZTMyKHdsLCBXVV9DT1VOVEVSX1BBVVNFLCBwYXVzZSk7CiAKKwlyZXR1cm4gMDsKK30KKworLyogdXBsb2FkcyBOVlMgYW5kIGZpcm13YXJlICovCitpbnQgd2wxMjcxX2xvYWRfZmlybXdhcmUoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJaW50IHJldCA9IDA7CisJdTMyIHRtcCwgY2xrOworCWludCBzZWxlY3RlZF9jbG9jayA9IC0xOworCisJaWYgKHdsLT5jaGlwLmlkID09IENISVBfSURfMTI4M19QRzIwKSB7CisJCXJldCA9IHdsMTI4eF9ib290X2Nsayh3bCwgJnNlbGVjdGVkX2Nsb2NrKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgeworCQlyZXQgPSB3bDEyN3hfYm9vdF9jbGsod2wpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCX0KKwogCS8qIENvbnRpbnVlIHRoZSBFTFAgd2FrZSB1cCBzZXF1ZW5jZSAqLwogCXdsMTI3MV93cml0ZTMyKHdsLCBXRUxQX0FSTV9DT01NQU5ELCBXRUxQX0FSTV9DT01NQU5EX1ZBTCk7CiAJdWRlbGF5KDUwMCk7CkBAIC01NTUsNyArNzQyLDEyIEBACiAKIAl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwgImNsazIgMHgleCIsIGNsayk7CiAKLQljbGsgfD0gKHdsLT5yZWZfY2xvY2sgPDwgMSkgPDwgNDsKKwlpZiAod2wtPmNoaXAuaWQgPT0gQ0hJUF9JRF8xMjgzX1BHMjApIHsKKwkJY2xrIHw9ICgoc2VsZWN0ZWRfY2xvY2sgJiAweDMpIDw8IDEpIDw8IDQ7CisJfSBlbHNlIHsKKwkJY2xrIHw9ICh3bC0+cmVmX2Nsb2NrIDw8IDEpIDw8IDQ7CisJfQorCiAJd2wxMjcxX3dyaXRlMzIod2wsIERSUFdfU0NSQVRDSF9TVEFSVCwgY2xrKTsKIAogCXdsMTI3MV9zZXRfcGFydGl0aW9uKHdsLCAmcGFydF90YWJsZVtQQVJUX1dPUktdKTsKQEAgLTU4NSwxNiArNzc3LDEyIEBACiAJLyogNi4gcmVhZCB0aGUgRUVQUk9NIHBhcmFtZXRlcnMgKi8KIAl0bXAgPSB3bDEyNzFfcmVhZDMyKHdsLCBTQ1JfUEFEMik7CiAKLQlyZXQgPSB3bDEyNzFfYm9vdF93cml0ZV9pcnFfcG9sYXJpdHkod2wpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKLQotCXdsMTI3MV93cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9NQVNLLAotCQkgICAgICAgV0wxMjcxX0FDWF9BTExfRVZFTlRTX1ZFQ1RPUik7Ci0KIAkvKiBXTDEyNzE6IFRoZSByZWZlcmVuY2UgZHJpdmVyIHNraXBzIHN0ZXBzIDcgdG8gMTAgKGp1bXBzIGRpcmVjdGx5CiAJICogdG8gdXBsb2FkX2Z3KSAqLwogCisJaWYgKHdsLT5jaGlwLmlkID09IENISVBfSURfMTI4M19QRzIwKQorCQl3bDEyNzFfdG9wX3JlZ193cml0ZSh3bCwgU0RJT19JT19EUywgd2wtPmNvbmYuaGNpX2lvX2RzKTsKKwogCXJldCA9IHdsMTI3MV9ib290X3VwbG9hZF9maXJtd2FyZSh3bCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0OwpAQCAtNjE4LDYgKzgwNiwxMyBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dDsKIAorCXJldCA9IHdsMTI3MV9ib290X3dyaXRlX2lycV9wb2xhcml0eSh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJd2wxMjcxX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX01BU0ssCisJCSAgICAgICBXTDEyNzFfQUNYX0FMTF9FVkVOVFNfVkVDVE9SKTsKKwogCS8qIEVuYWJsZSBmaXJtd2FyZSBpbnRlcnJ1cHRzIG5vdyAqLwogCXdsMTI3MV9ib290X2VuYWJsZV9pbnRlcnJ1cHRzKHdsKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2Jvb3QuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9ib290LmgKaW5kZXggMTcyMjliOC4uZThmODI1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2Jvb3QuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvYm9vdC5oCkBAIC03NCw0ICs3NCw1NiBAQAogI2RlZmluZSBGUkVGX0NMS19QT0xBUklUWV9CSVRTIDB4ZmZmZmY4ZmYKICNkZWZpbmUgQ0xLX1JFUV9PVVROX1NFTCAgICAgICAweDcwMAogCisvKiBQTEwgY29uZmlndXJhdGlvbiBhbGdvcml0aG0gZm9yIHdsMTI4eCAqLworI2RlZmluZSBTWVNfQ0xLX0NGR19SRUcgICAgICAgICAgICAgIDB4MjIwMAorLyogQml0WzBdICAgLSAgMC1UQ1hPLCAgMS1GUkVGICovCisjZGVmaW5lIE1DU19QTExfQ0xLX1NFTF9GUkVGICAgICAgICAgQklUKDApCisvKiBCaXRbMzoyXSAtIDAxLVRDWE8sIDEwLUZSRUYgKi8KKyNkZWZpbmUgV0xfQ0xLX1JFUV9UWVBFX0ZSRUYgICAgICAgICBCSVQoMykKKyNkZWZpbmUgV0xfQ0xLX1JFUV9UWVBFX1BHMiAgICAgICAgICAoQklUKDMpIHwgQklUKDIpKQorLyogQml0WzRdICAgLSAgMC1UQ1hPLCAgMS1GUkVGICovCisjZGVmaW5lIFBSQ01fQ01fRU5fTVVYX1dMQU5fRlJFRiAgICAgQklUKDQpCisKKyNkZWZpbmUgVENYT19JTE9BRF9JTlRfUkVHICAgICAgICAgICAweDIyNjQKKyNkZWZpbmUgVENYT19DTEtfREVURUNUX1JFRyAgICAgICAgICAweDIyNjYKKworI2RlZmluZSBUQ1hPX0RFVF9GQUlMRUQgICAgICAgICAgICAgIEJJVCg0KQorCisjZGVmaW5lIEZSRUZfSUxPQURfSU5UX1JFRyAgICAgICAgICAgMHgyMDg0CisjZGVmaW5lIEZSRUZfQ0xLX0RFVEVDVF9SRUcgICAgICAgICAgMHgyMDg2CisjZGVmaW5lIEZSRUZfQ0xLX0RFVEVDVF9GQUlMICAgICAgICAgQklUKDQpCisKKy8qIFVzZSB0aGlzIHJlZyBmb3IgbWFza2luZyBkdXJpbmcgZHJpdmVyIGFjY2VzcyAqLworI2RlZmluZSBXTF9TUEFSRV9SRUcgICAgICAgICAgICAgICAgIDB4MjMyMAorI2RlZmluZSBXTF9TUEFSRV9WQUwgICAgICAgICAgICAgICAgIEJJVCgyKQorLyogQml0WzY6NTozXSAtICBtYXNrIHdsIHdyaXRlIFNZU19DTEtfQ0ZHWzg6NToyOjRdICovCisjZGVmaW5lIFdMX1NQQVJFX01BU0tfODUyNiAgICAgICAgICAgKEJJVCg2KSB8IEJJVCg1KSB8IEJJVCgzKSkKKworI2RlZmluZSBQTExfTE9DS19DT1VOVEVSU19SRUcgICAgICAgIDB4RDhDCisjZGVmaW5lIFBMTF9MT0NLX0NPVU5URVJTX0NPRVggICAgICAgMHgwRgorI2RlZmluZSBQTExfTE9DS19DT1VOVEVSU19NQ1MgICAgICAgIDB4RjAKKyNkZWZpbmUgTUNTX1BMTF9PVkVSUklERV9SRUcgICAgICAgICAweEQ5MAorI2RlZmluZSBNQ1NfUExMX0NPTkZJR19SRUcgICAgICAgICAgIDB4RDkyCisjZGVmaW5lIE1DU19TRUxfSU5fRlJFUV9NQVNLICAgICAgICAgMHgwMDcwCisjZGVmaW5lIE1DU19TRUxfSU5fRlJFUV9TSElGVCAgICAgICAgNAorI2RlZmluZSBNQ1NfUExMX0NPTkZJR19SRUdfVkFMICAgICAgIDB4NzMKKyNkZWZpbmUgTUNTX1BMTF9FTkFCTEVfSFAgICAgICAgICAgICAoQklUKDApIHwgQklUKDEpKQorCisjZGVmaW5lIE1DU19QTExfTV9SRUcgICAgICAgICAgICAgICAgMHhEOTQKKyNkZWZpbmUgTUNTX1BMTF9OX1JFRyAgICAgICAgICAgICAgICAweEQ5NgorI2RlZmluZSBNQ1NfUExMX01fUkVHX1ZBTCAgICAgICAgICAgIDB4QzgKKyNkZWZpbmUgTUNTX1BMTF9OX1JFR19WQUwgICAgICAgICAgICAweDA3CisKKyNkZWZpbmUgU0RJT19JT19EUyAgICAgICAgICAgICAgICAgICAweGQxNAorCisvKiBTRElPL3dTUEkgRFMgY29uZmlndXJhdGlvbiB2YWx1ZXMgKi8KK2VudW0geworCUhDSV9JT19EU184TUEgPSAwLAorCUhDSV9JT19EU180TUEgPSAxLCAvKiBkZWZhdWx0ICovCisJSENJX0lPX0RTXzZNQSA9IDIsCisJSENJX0lPX0RTXzJNQSA9IDMsCit9OworCisvKiBlbmQgUExMIGNvbmZpZ3VyYXRpb24gYWxnb3JpdGhtIGZvciB3bDEyOHggKi8KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvY21kLmMKaW5kZXggOTYzMjQzMy4uNDI5MzVhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2NtZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9jbWQuYwpAQCAtNzYsNyArNzYsNyBAQAogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgewogCQkJd2wxMjcxX2Vycm9yKCJjb21tYW5kIGNvbXBsZXRlIHRpbWVvdXQiKTsKIAkJCXJldCA9IC1FVElNRURPVVQ7Ci0JCQlnb3RvIG91dDsKKwkJCWdvdG8gZmFpbDsKIAkJfQogCiAJCXBvbGxfY291bnQrKzsKQEAgLTk2LDIxICs5NiwyNSBAQAogCXN0YXR1cyA9IGxlMTZfdG9fY3B1KGNtZC0+c3RhdHVzKTsKIAlpZiAoc3RhdHVzICE9IENNRF9TVEFUVVNfU1VDQ0VTUykgewogCQl3bDEyNzFfZXJyb3IoImNvbW1hbmQgZXhlY3V0ZSBmYWlsdXJlICVkIiwgc3RhdHVzKTsKLQkJaWVlZTgwMjExX3F1ZXVlX3dvcmsod2wtPmh3LCAmd2wtPnJlY292ZXJ5X3dvcmspOwogCQlyZXQgPSAtRUlPOworCQlnb3RvIGZhaWw7CiAJfQogCiAJd2wxMjcxX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX0FDSywKIAkJICAgICAgIFdMMTI3MV9BQ1hfSU5UUl9DTURfQ09NUExFVEUpOworCXJldHVybiAwOwogCi1vdXQ6CitmYWlsOgorCVdBUk5fT04oMSk7CisJaWVlZTgwMjExX3F1ZXVlX3dvcmsod2wtPmh3LCAmd2wtPnJlY292ZXJ5X3dvcmspOwogCXJldHVybiByZXQ7CiB9CiAKIGludCB3bDEyNzFfY21kX2dlbmVyYWxfcGFybXMoc3RydWN0IHdsMTI3MSAqd2wpCiB7CiAJc3RydWN0IHdsMTI3MV9nZW5lcmFsX3Bhcm1zX2NtZCAqZ2VuX3Bhcm1zOwotCXN0cnVjdCB3bDEyNzFfaW5pX2dlbmVyYWxfcGFyYW1zICpncCA9ICZ3bC0+bnZzLT5nZW5lcmFsX3BhcmFtczsKKwlzdHJ1Y3Qgd2wxMjcxX2luaV9nZW5lcmFsX3BhcmFtcyAqZ3AgPQorCQkmKChzdHJ1Y3Qgd2wxMjcxX252c19maWxlICopd2wtPm52cyktPmdlbmVyYWxfcGFyYW1zOwogCWJvb2wgYW5zd2VyID0gZmFsc2U7CiAJaW50IHJldDsKIApAQCAtMTI4LDYgKzEzMiw1MiBAQAogCWlmIChncC0+dHhfYmlwX2ZlbV9hdXRvX2RldGVjdCkKIAkJYW5zd2VyID0gdHJ1ZTsKIAorCS8qIE92ZXJyaWRlIHRoZSBSRUYgQ0xLIGZyb20gdGhlIE5WUyB3aXRoIHRoZSBvbmUgZnJvbSBwbGF0Zm9ybSBkYXRhICovCisJZ2VuX3Bhcm1zLT5nZW5lcmFsX3BhcmFtcy5yZWZfY2xvY2sgPSB3bC0+cmVmX2Nsb2NrOworCisJcmV0ID0gd2wxMjcxX2NtZF90ZXN0KHdsLCBnZW5fcGFybXMsIHNpemVvZigqZ2VuX3Bhcm1zKSwgYW5zd2VyKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfd2FybmluZygiQ01EX0lOSV9GSUxFX0dFTkVSQUxfUEFSQU0gZmFpbGVkIik7CisJCWdvdG8gb3V0OworCX0KKworCWdwLT50eF9iaXBfZmVtX21hbnVmYWN0dXJlciA9CisJCWdlbl9wYXJtcy0+Z2VuZXJhbF9wYXJhbXMudHhfYmlwX2ZlbV9tYW51ZmFjdHVyZXI7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQ01ELCAiRkVNIGF1dG9kZXRlY3Q6ICVzLCBtYW51ZmFjdHVyZXI6ICVkXG4iLAorCQkgICAgIGFuc3dlciA/ICJhdXRvIiA6ICJtYW51YWwiLCBncC0+dHhfYmlwX2ZlbV9tYW51ZmFjdHVyZXIpOworCitvdXQ6CisJa2ZyZWUoZ2VuX3Bhcm1zKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjh4X2NtZF9nZW5lcmFsX3Bhcm1zKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCB3bDEyOHhfZ2VuZXJhbF9wYXJtc19jbWQgKmdlbl9wYXJtczsKKwlzdHJ1Y3Qgd2wxMjh4X2luaV9nZW5lcmFsX3BhcmFtcyAqZ3AgPQorCQkmKChzdHJ1Y3Qgd2wxMjh4X252c19maWxlICopd2wtPm52cyktPmdlbmVyYWxfcGFyYW1zOworCWJvb2wgYW5zd2VyID0gZmFsc2U7CisJaW50IHJldDsKKworCWlmICghd2wtPm52cykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlnZW5fcGFybXMgPSBremFsbG9jKHNpemVvZigqZ2VuX3Bhcm1zKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFnZW5fcGFybXMpCisJCXJldHVybiAtRU5PTUVNOworCisJZ2VuX3Bhcm1zLT50ZXN0LmlkID0gVEVTVF9DTURfSU5JX0ZJTEVfR0VORVJBTF9QQVJBTTsKKworCW1lbWNweSgmZ2VuX3Bhcm1zLT5nZW5lcmFsX3BhcmFtcywgZ3AsIHNpemVvZigqZ3ApKTsKKworCWlmIChncC0+dHhfYmlwX2ZlbV9hdXRvX2RldGVjdCkKKwkJYW5zd2VyID0gdHJ1ZTsKKworCS8qIFJlcGxhY2UgUkVGIGFuZCBUQ1hPIENMS3Mgd2l0aCB0aGUgb25lcyBmcm9tIHBsYXRmb3JtIGRhdGEgKi8KKwlnZW5fcGFybXMtPmdlbmVyYWxfcGFyYW1zLnJlZl9jbG9jayA9IHdsLT5yZWZfY2xvY2s7CisJZ2VuX3Bhcm1zLT5nZW5lcmFsX3BhcmFtcy50Y3hvX3JlZl9jbG9jayA9IHdsLT50Y3hvX2Nsb2NrOworCiAJcmV0ID0gd2wxMjcxX2NtZF90ZXN0KHdsLCBnZW5fcGFybXMsIHNpemVvZigqZ2VuX3Bhcm1zKSwgYW5zd2VyKTsKIAlpZiAocmV0IDwgMCkgewogCQl3bDEyNzFfd2FybmluZygiQ01EX0lOSV9GSUxFX0dFTkVSQUxfUEFSQU0gZmFpbGVkIik7CkBAIC0xNDcsOCArMTk3LDkgQEAKIAogaW50IHdsMTI3MV9jbWRfcmFkaW9fcGFybXMoc3RydWN0IHdsMTI3MSAqd2wpCiB7CisJc3RydWN0IHdsMTI3MV9udnNfZmlsZSAqbnZzID0gKHN0cnVjdCB3bDEyNzFfbnZzX2ZpbGUgKil3bC0+bnZzOwogCXN0cnVjdCB3bDEyNzFfcmFkaW9fcGFybXNfY21kICpyYWRpb19wYXJtczsKLQlzdHJ1Y3Qgd2wxMjcxX2luaV9nZW5lcmFsX3BhcmFtcyAqZ3AgPSAmd2wtPm52cy0+Z2VuZXJhbF9wYXJhbXM7CisJc3RydWN0IHdsMTI3MV9pbmlfZ2VuZXJhbF9wYXJhbXMgKmdwID0gJm52cy0+Z2VuZXJhbF9wYXJhbXM7CiAJaW50IHJldDsKIAogCWlmICghd2wtPm52cykKQEAgLTE2MSwxOCArMjEyLDE4IEBACiAJcmFkaW9fcGFybXMtPnRlc3QuaWQgPSBURVNUX0NNRF9JTklfRklMRV9SQURJT19QQVJBTTsKIAogCS8qIDIuNEdIeiBwYXJhbWV0ZXJzICovCi0JbWVtY3B5KCZyYWRpb19wYXJtcy0+c3RhdGljX3BhcmFtc18yLCAmd2wtPm52cy0+c3RhdF9yYWRpb19wYXJhbXNfMiwKKwltZW1jcHkoJnJhZGlvX3Bhcm1zLT5zdGF0aWNfcGFyYW1zXzIsICZudnMtPnN0YXRfcmFkaW9fcGFyYW1zXzIsCiAJICAgICAgIHNpemVvZihzdHJ1Y3Qgd2wxMjcxX2luaV9iYW5kX3BhcmFtc18yKSk7CiAJbWVtY3B5KCZyYWRpb19wYXJtcy0+ZHluX3BhcmFtc18yLAotCSAgICAgICAmd2wtPm52cy0+ZHluX3JhZGlvX3BhcmFtc18yW2dwLT50eF9iaXBfZmVtX21hbnVmYWN0dXJlcl0ucGFyYW1zLAorCSAgICAgICAmbnZzLT5keW5fcmFkaW9fcGFyYW1zXzJbZ3AtPnR4X2JpcF9mZW1fbWFudWZhY3R1cmVyXS5wYXJhbXMsCiAJICAgICAgIHNpemVvZihzdHJ1Y3Qgd2wxMjcxX2luaV9mZW1fcGFyYW1zXzIpKTsKIAogCS8qIDVHSHogcGFyYW1ldGVycyAqLwogCW1lbWNweSgmcmFkaW9fcGFybXMtPnN0YXRpY19wYXJhbXNfNSwKLQkgICAgICAgJndsLT5udnMtPnN0YXRfcmFkaW9fcGFyYW1zXzUsCisJICAgICAgICZudnMtPnN0YXRfcmFkaW9fcGFyYW1zXzUsCiAJICAgICAgIHNpemVvZihzdHJ1Y3Qgd2wxMjcxX2luaV9iYW5kX3BhcmFtc181KSk7CiAJbWVtY3B5KCZyYWRpb19wYXJtcy0+ZHluX3BhcmFtc181LAotCSAgICAgICAmd2wtPm52cy0+ZHluX3JhZGlvX3BhcmFtc181W2dwLT50eF9iaXBfZmVtX21hbnVmYWN0dXJlcl0ucGFyYW1zLAorCSAgICAgICAmbnZzLT5keW5fcmFkaW9fcGFyYW1zXzVbZ3AtPnR4X2JpcF9mZW1fbWFudWZhY3R1cmVyXS5wYXJhbXMsCiAJICAgICAgIHNpemVvZihzdHJ1Y3Qgd2wxMjcxX2luaV9mZW1fcGFyYW1zXzUpKTsKIAogCXdsMTI3MV9kdW1wKERFQlVHX0NNRCwgIlRFU1RfQ01EX0lOSV9GSUxFX1JBRElPX1BBUkFNOiAiLApAQCAtMTg2LDYgKzIzNyw1MCBAQAogCXJldHVybiByZXQ7CiB9CiAKK2ludCB3bDEyOHhfY21kX3JhZGlvX3Bhcm1zKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCB3bDEyOHhfbnZzX2ZpbGUgKm52cyA9IChzdHJ1Y3Qgd2wxMjh4X252c19maWxlICopd2wtPm52czsKKwlzdHJ1Y3Qgd2wxMjh4X3JhZGlvX3Bhcm1zX2NtZCAqcmFkaW9fcGFybXM7CisJc3RydWN0IHdsMTI4eF9pbmlfZ2VuZXJhbF9wYXJhbXMgKmdwID0gJm52cy0+Z2VuZXJhbF9wYXJhbXM7CisJaW50IHJldDsKKworCWlmICghd2wtPm52cykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyYWRpb19wYXJtcyA9IGt6YWxsb2Moc2l6ZW9mKCpyYWRpb19wYXJtcyksIEdGUF9LRVJORUwpOworCWlmICghcmFkaW9fcGFybXMpCisJCXJldHVybiAtRU5PTUVNOworCisJcmFkaW9fcGFybXMtPnRlc3QuaWQgPSBURVNUX0NNRF9JTklfRklMRV9SQURJT19QQVJBTTsKKworCS8qIDIuNEdIeiBwYXJhbWV0ZXJzICovCisJbWVtY3B5KCZyYWRpb19wYXJtcy0+c3RhdGljX3BhcmFtc18yLCAmbnZzLT5zdGF0X3JhZGlvX3BhcmFtc18yLAorCSAgICAgICBzaXplb2Yoc3RydWN0IHdsMTI4eF9pbmlfYmFuZF9wYXJhbXNfMikpOworCW1lbWNweSgmcmFkaW9fcGFybXMtPmR5bl9wYXJhbXNfMiwKKwkgICAgICAgJm52cy0+ZHluX3JhZGlvX3BhcmFtc18yW2dwLT50eF9iaXBfZmVtX21hbnVmYWN0dXJlcl0ucGFyYW1zLAorCSAgICAgICBzaXplb2Yoc3RydWN0IHdsMTI4eF9pbmlfZmVtX3BhcmFtc18yKSk7CisKKwkvKiA1R0h6IHBhcmFtZXRlcnMgKi8KKwltZW1jcHkoJnJhZGlvX3Bhcm1zLT5zdGF0aWNfcGFyYW1zXzUsCisJICAgICAgICZudnMtPnN0YXRfcmFkaW9fcGFyYW1zXzUsCisJICAgICAgIHNpemVvZihzdHJ1Y3Qgd2wxMjh4X2luaV9iYW5kX3BhcmFtc181KSk7CisJbWVtY3B5KCZyYWRpb19wYXJtcy0+ZHluX3BhcmFtc181LAorCSAgICAgICAmbnZzLT5keW5fcmFkaW9fcGFyYW1zXzVbZ3AtPnR4X2JpcF9mZW1fbWFudWZhY3R1cmVyXS5wYXJhbXMsCisJICAgICAgIHNpemVvZihzdHJ1Y3Qgd2wxMjh4X2luaV9mZW1fcGFyYW1zXzUpKTsKKworCXJhZGlvX3Bhcm1zLT5mZW1fdmVuZG9yX2FuZF9vcHRpb25zID0gbnZzLT5mZW1fdmVuZG9yX2FuZF9vcHRpb25zOworCisJd2wxMjcxX2R1bXAoREVCVUdfQ01ELCAiVEVTVF9DTURfSU5JX0ZJTEVfUkFESU9fUEFSQU06ICIsCisJCSAgICByYWRpb19wYXJtcywgc2l6ZW9mKCpyYWRpb19wYXJtcykpOworCisJcmV0ID0gd2wxMjcxX2NtZF90ZXN0KHdsLCByYWRpb19wYXJtcywgc2l6ZW9mKCpyYWRpb19wYXJtcyksIDApOworCWlmIChyZXQgPCAwKQorCQl3bDEyNzFfd2FybmluZygiQ01EX0lOSV9GSUxFX1JBRElPX1BBUkFNIGZhaWxlZCIpOworCisJa2ZyZWUocmFkaW9fcGFybXMpOworCXJldHVybiByZXQ7Cit9CisKIGludCB3bDEyNzFfY21kX2V4dF9yYWRpb19wYXJtcyhzdHJ1Y3Qgd2wxMjcxICp3bCkKIHsKIAlzdHJ1Y3Qgd2wxMjcxX2V4dF9yYWRpb19wYXJtc19jbWQgKmV4dF9yYWRpb19wYXJtczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9jbWQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9jbWQuaAppbmRleCA1NGMxMmU3Li41Y2FjOTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvY21kLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2NtZC5oCkBAIC0zMiw3ICszMiw5IEBACiBpbnQgd2wxMjcxX2NtZF9zZW5kKHN0cnVjdCB3bDEyNzEgKndsLCB1MTYgaWQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwKIAkJICAgIHNpemVfdCByZXNfbGVuKTsKIGludCB3bDEyNzFfY21kX2dlbmVyYWxfcGFybXMoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI4eF9jbWRfZ2VuZXJhbF9wYXJtcyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CiBpbnQgd2wxMjcxX2NtZF9yYWRpb19wYXJtcyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjh4X2NtZF9yYWRpb19wYXJtcyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CiBpbnQgd2wxMjcxX2NtZF9leHRfcmFkaW9fcGFybXMoc3RydWN0IHdsMTI3MSAqd2wpOwogaW50IHdsMTI3MV9jbWRfam9pbihzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggYnNzX3R5cGUpOwogaW50IHdsMTI3MV9jbWRfdGVzdChzdHJ1Y3Qgd2wxMjcxICp3bCwgdm9pZCAqYnVmLCBzaXplX3QgYnVmX2xlbiwgdTggYW5zd2VyKTsKQEAgLTQxNSw2ICs0MTcsMjEgQEAKIAl1OCBwYWRkaW5nWzNdOwogfSBfX3BhY2tlZDsKIAorc3RydWN0IHdsMTI4eF9nZW5lcmFsX3Bhcm1zX2NtZCB7CisJc3RydWN0IHdsMTI3MV9jbWRfaGVhZGVyIGhlYWRlcjsKKworCXN0cnVjdCB3bDEyNzFfY21kX3Rlc3RfaGVhZGVyIHRlc3Q7CisKKwlzdHJ1Y3Qgd2wxMjh4X2luaV9nZW5lcmFsX3BhcmFtcyBnZW5lcmFsX3BhcmFtczsKKworCXU4IHNyX2RlYnVnX3RhYmxlW1dMMTI3MV9JTklfTUFYX1NNQVJUX1JFRkxFWF9QQVJBTV07CisJdTggc3Jfc2VuX25fcDsKKwl1OCBzcl9zZW5fbl9wX2dhaW47CisJdTggc3Jfc2VuX25ybjsKKwl1OCBzcl9zZW5fcHJuOworCXU4IHBhZGRpbmdbM107Cit9IF9fcGFja2VkOworCiBzdHJ1Y3Qgd2wxMjcxX3JhZGlvX3Bhcm1zX2NtZCB7CiAJc3RydWN0IHdsMTI3MV9jbWRfaGVhZGVyIGhlYWRlcjsKIApAQCAtNDMxLDYgKzQ0OCwyMyBAQAogCXU4IHBhZGRpbmczWzJdOwogfSBfX3BhY2tlZDsKIAorc3RydWN0IHdsMTI4eF9yYWRpb19wYXJtc19jbWQgeworCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7CisKKwlzdHJ1Y3Qgd2wxMjcxX2NtZF90ZXN0X2hlYWRlciB0ZXN0OworCisJLyogU3RhdGljIHJhZGlvIHBhcmFtZXRlcnMgKi8KKwlzdHJ1Y3Qgd2wxMjh4X2luaV9iYW5kX3BhcmFtc18yIHN0YXRpY19wYXJhbXNfMjsKKwlzdHJ1Y3Qgd2wxMjh4X2luaV9iYW5kX3BhcmFtc181IHN0YXRpY19wYXJhbXNfNTsKKworCXU4IGZlbV92ZW5kb3JfYW5kX29wdGlvbnM7CisKKwkvKiBEeW5hbWljIHJhZGlvIHBhcmFtZXRlcnMgKi8KKwlzdHJ1Y3Qgd2wxMjh4X2luaV9mZW1fcGFyYW1zXzIgZHluX3BhcmFtc18yOworCXU4IHBhZGRpbmcyOworCXN0cnVjdCB3bDEyOHhfaW5pX2ZlbV9wYXJhbXNfNSBkeW5fcGFyYW1zXzU7Cit9IF9fcGFja2VkOworCiBzdHJ1Y3Qgd2wxMjcxX2V4dF9yYWRpb19wYXJtc19jbWQgewogCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9jb25mLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvY29uZi5oCmluZGV4IDhhODMyMzguLjFhYjZjODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9jb25mLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2NvbmYuaApAQCAtMzk2LDEyICszOTYsNDMgQEAKIAlDT05GX1NHX1RFTVBfUEFSQU1fMywKIAlDT05GX1NHX1RFTVBfUEFSQU1fNCwKIAlDT05GX1NHX1RFTVBfUEFSQU1fNSwKLQlDT05GX1NHX1BBUkFNU19NQVgsCisKKwkvKgorCSAqIEFQIGJlYWNvbiBtaXNzCisJICoKKwkgKiBSYW5nZTogMCAtIDI1NQorCSAqLworCUNPTkZfU0dfQVBfQkVBQ09OX01JU1NfVFgsCisKKwkvKgorCSAqIEFQIFJYIHdpbmRvdyBsZW5ndGgKKwkgKgorCSAqIFJhbmdlOiAwIC0gNTAKKwkgKi8KKwlDT05GX1NHX1JYX1dJTkRPV19MRU5HVEgsCisKKwkvKgorCSAqIEFQIGNvbm5lY3Rpb24gcHJvdGVjdGlvbiB0aW1lCisJICoKKwkgKiBSYW5nZTogMCAtIDUwMDAKKwkgKi8KKwlDT05GX1NHX0FQX0NPTk5FQ1RJT05fUFJPVEVDVElPTl9USU1FLAorCisJQ09ORl9TR19URU1QX1BBUkFNXzYsCisJQ09ORl9TR19URU1QX1BBUkFNXzcsCisJQ09ORl9TR19URU1QX1BBUkFNXzgsCisJQ09ORl9TR19URU1QX1BBUkFNXzksCisJQ09ORl9TR19URU1QX1BBUkFNXzEwLAorCisJQ09ORl9TR19TVEFfUEFSQU1TX01BWCA9IENPTkZfU0dfVEVNUF9QQVJBTV81ICsgMSwKKwlDT05GX1NHX0FQX1BBUkFNU19NQVggPSBDT05GX1NHX1RFTVBfUEFSQU1fMTAgKyAxLAorCiAJQ09ORl9TR19QQVJBTVNfQUxMID0gMHhmZgogfTsKIAogc3RydWN0IGNvbmZfc2dfc2V0dGluZ3MgewotCXUzMiBwYXJhbXNbQ09ORl9TR19QQVJBTVNfTUFYXTsKKwl1MzIgc3RhX3BhcmFtc1tDT05GX1NHX1NUQV9QQVJBTVNfTUFYXTsKKwl1MzIgYXBfcGFyYW1zW0NPTkZfU0dfQVBfUEFSQU1TX01BWF07CiAJdTggc3RhdGU7CiB9OwogCkBAIC01MDksNiArNTQwLDEyIEBACiAJQ09ORl9IV19CSVRfUkFURV8zNk1CUFMgfCBDT05GX0hXX0JJVF9SQVRFXzQ4TUJQUyB8ICAgICAgXAogCUNPTkZfSFdfQklUX1JBVEVfNTRNQlBTKQogCisjZGVmaW5lIENPTkZfVFhfT0ZETV9SQVRFUyAoQ09ORl9IV19CSVRfUkFURV82TUJQUyB8ICAgICAgICAgICAgIFwKKwlDT05GX0hXX0JJVF9SQVRFXzEyTUJQUyB8IENPTkZfSFdfQklUX1JBVEVfMjRNQlBTIHwgICAgICBcCisJQ09ORl9IV19CSVRfUkFURV8zNk1CUFMgfCBDT05GX0hXX0JJVF9SQVRFXzQ4TUJQUyB8ICAgICAgXAorCUNPTkZfSFdfQklUX1JBVEVfNTRNQlBTKQorCisKIC8qCiAgKiBEZWZhdWx0IHJhdGVzIGZvciBtYW5hZ2VtZW50IHRyYWZmaWMgd2hlbiBvcGVyYXRpbmcgaW4gQVAgbW9kZS4gVGhpcwogICogc2hvdWxkIGJlIGNvbmZpZ3VyZWQgYWNjb3JkaW5nIHRvIHRoZSBiYXNpYyByYXRlIHNldCBvZiB0aGUgQVAKQEAgLTUxNiw2ICs1NTMsMTMgQEAKICNkZWZpbmUgQ09ORl9UWF9BUF9ERUZBVUxUX01HTVRfUkFURVMgIChDT05GX0hXX0JJVF9SQVRFXzFNQlBTIHwgXAogCUNPTkZfSFdfQklUX1JBVEVfMk1CUFMgfCBDT05GX0hXX0JJVF9SQVRFXzVfNU1CUFMpCiAKKy8qCisgKiBEZWZhdWx0IHJhdGVzIGZvciB3b3JraW5nIGFzIElCU1MuIHVzZSAxMWIgcmF0ZXMKKyAqLworI2RlZmluZSBDT05GX1RYX0lCU1NfREVGQVVMVF9SQVRFUyAgKENPTkZfSFdfQklUX1JBVEVfMU1CUFMgfCAgICAgICBcCisJCUNPTkZfSFdfQklUX1JBVEVfMk1CUFMgfCBDT05GX0hXX0JJVF9SQVRFXzVfNU1CUFMgfCBcCisJCUNPTkZfSFdfQklUX1JBVEVfMTFNQlBTKTsKKwogc3RydWN0IGNvbmZfdHhfcmF0ZV9jbGFzcyB7CiAKIAkvKgpAQCAtNjY3LDIyICs3MTEsNiBAQAogCXN0cnVjdCBjb25mX3R4X2FjX2NhdGVnb3J5IGFjX2NvbmZbQ09ORl9UWF9NQVhfQUNfQ09VTlRdOwogCiAJLyoKLQkgKiBDb25maWd1cmF0aW9uIGZvciByYXRlIGNsYXNzZXMgaW4gQVAtbW9kZS4gVGhlc2UgcmF0ZSBjbGFzc2VzCi0JICogYXJlIGZvciB0aGUgQUMgVFggcXVldWVzCi0JICovCi0Jc3RydWN0IGNvbmZfdHhfcmF0ZV9jbGFzcyBhcF9yY19jb25mW0NPTkZfVFhfTUFYX0FDX0NPVU5UXTsKLQotCS8qCi0JICogTWFuYWdlbWVudCBUWCByYXRlIGNsYXNzIGZvciBBUC1tb2RlLgotCSAqLwotCXN0cnVjdCBjb25mX3R4X3JhdGVfY2xhc3MgYXBfbWdtdF9jb25mOwotCi0JLyoKLQkgKiBCcm9hZGNhc3QgVFggcmF0ZSBjbGFzcyBmb3IgQVAtbW9kZS4KLQkgKi8KLQlzdHJ1Y3QgY29uZl90eF9yYXRlX2NsYXNzIGFwX2Jjc3RfY29uZjsKLQotCS8qCiAJICogQVAtbW9kZSAtIGFsbG93IHRoaXMgbnVtYmVyIG9mIFRYIHJldHJpZXMgdG8gYSBzdGF0aW9uIGJlZm9yZSBhbgogCSAqIGV2ZW50IGlzIHRyaWdnZXJlZCBmcm9tIEZXLgogCSAqLwpAQCAtMTAwNCw3ICsxMDMyLDkgQEAKIAlDT05GX1JFRl9DTEtfMTlfMl9FLAogCUNPTkZfUkVGX0NMS18yNl9FLAogCUNPTkZfUkVGX0NMS18zOF80X0UsCi0JQ09ORl9SRUZfQ0xLXzUyX0UKKwlDT05GX1JFRl9DTEtfNTJfRSwKKwlDT05GX1JFRl9DTEtfMzhfNF9NX1hUQUwsCisJQ09ORl9SRUZfQ0xLXzI2X01fWFRBTCwKIH07CiAKIGVudW0gc2luZ2xlX2R1YWxfYmFuZF9lbnVtIHsKQEAgLTEwMTgsMTUgKzEwNDgsNiBAQAogI2RlZmluZSBDT05GX05VTUJFUl9PRl9DSEFOTkVMU18yXzQgMTQKICNkZWZpbmUgQ09ORl9OVU1CRVJfT0ZfQ0hBTk5FTFNfNSAgIDM1CiAKLXN0cnVjdCBjb25mX3JhZGlvX3Bhcm1zIHsKLQkvKgotCSAqIEZFTSBwYXJhbWV0ZXIgc2V0IHRvIHVzZQotCSAqCi0JICogUmFuZ2U6IDAgb3IgMQotCSAqLwotCXU4IGZlbTsKLX07Ci0KIHN0cnVjdCBjb25mX2l0cmltX3NldHRpbmdzIHsKIAkvKiBlbmFibGUgZGNvIGl0cmltICovCiAJdTggZW5hYmxlOwpAQCAtMTEyNiw2ICsxMTQ3LDI2IEBACiAKIH07CiAKK3N0cnVjdCBjb25mX3NjaGVkX3NjYW5fc2V0dGluZ3MgeworCS8qIG1pbmltdW0gdGltZSB0byB3YWl0IG9uIHRoZSBjaGFubmVsIGZvciBhY3RpdmUgc2NhbnMgKGluIFRVcykgKi8KKwl1MTYgbWluX2R3ZWxsX3RpbWVfYWN0aXZlOworCisJLyogbWF4aW11bSB0aW1lIHRvIHdhaXQgb24gdGhlIGNoYW5uZWwgZm9yIGFjdGl2ZSBzY2FucyAoaW4gVFVzKSAqLworCXUxNiBtYXhfZHdlbGxfdGltZV9hY3RpdmU7CisKKwkvKiB0aW1lIHRvIHdhaXQgb24gdGhlIGNoYW5uZWwgZm9yIHBhc3NpdmUgc2NhbnMgKGluIFRVcykgKi8KKwl1MzIgZHdlbGxfdGltZV9wYXNzaXZlOworCisJLyogbnVtYmVyIG9mIHByb2JlIHJlcXVlc3RzIHRvIHNlbmQgb24gZWFjaCBjaGFubmVsIGluIGFjdGl2ZSBzY2FucyAqLworCXU4IG51bV9wcm9iZV9yZXFzOworCisJLyogUlNTSSB0aHJlc2hvbGQgdG8gYmUgdXNlZCBmb3IgZmlsdGVyaW5nICovCisJczggcnNzaV90aHJlc2hvbGQ7CisKKwkvKiBTTlIgdGhyZXNob2xkIHRvIGJlIHVzZWQgZm9yIGZpbHRlcmluZyAqLworCXM4IHNucl90aHJlc2hvbGQ7Cit9OworCiAvKiB0aGVzZSBhcmUgbnVtYmVyIG9mIGNoYW5uZWxzIG9uIHRoZSBiYW5kIGRpdmlkZWQgYnkgdHdvLCByb3VuZGVkIHVwICovCiAjZGVmaW5lIENPTkZfVFhfUFdSX0NPTVBFTlNBVElPTl9MRU5fMiA3CiAjZGVmaW5lIENPTkZfVFhfUFdSX0NPTVBFTlNBVElPTl9MRU5fNSAxOApAQCAtMTE5MSw2ICsxMjMyLDE5IEBACiAJdTggdHhfbWluOwogfTsKIAorc3RydWN0IGNvbmZfZm1fY29leCB7CisJdTggZW5hYmxlOworCXU4IHN3YWxsb3dfcGVyaW9kOworCXU4IG5fZGl2aWRlcl9mcmVmX3NldF8xOworCXU4IG5fZGl2aWRlcl9mcmVmX3NldF8yOworCXUxNiBtX2RpdmlkZXJfZnJlZl9zZXRfMTsKKwl1MTYgbV9kaXZpZGVyX2ZyZWZfc2V0XzI7CisJdTMyIGNvZXhfcGxsX3N0YWJpbGl6YXRpb25fdGltZTsKKwl1MTYgbGRvX3N0YWJpbGl6YXRpb25fdGltZTsKKwl1OCBmbV9kaXN0dXJiZWRfYmFuZF9tYXJnaW47CisJdTggc3dhbGxvd19jbGtfZGlmZjsKK307CisKIHN0cnVjdCBjb25mX2Rydl9zZXR0aW5ncyB7CiAJc3RydWN0IGNvbmZfc2dfc2V0dGluZ3Mgc2c7CiAJc3RydWN0IGNvbmZfcnhfc2V0dGluZ3Mgcng7CkBAIC0xMjAwLDkgKzEyNTQsMTMgQEAKIAlzdHJ1Y3QgY29uZl9wbV9jb25maWdfc2V0dGluZ3MgcG1fY29uZmlnOwogCXN0cnVjdCBjb25mX3JvYW1fdHJpZ2dlcl9zZXR0aW5ncyByb2FtX3RyaWdnZXI7CiAJc3RydWN0IGNvbmZfc2Nhbl9zZXR0aW5ncyBzY2FuOworCXN0cnVjdCBjb25mX3NjaGVkX3NjYW5fc2V0dGluZ3Mgc2NoZWRfc2NhbjsKIAlzdHJ1Y3QgY29uZl9yZl9zZXR0aW5ncyByZjsKIAlzdHJ1Y3QgY29uZl9odF9zZXR0aW5nIGh0OwotCXN0cnVjdCBjb25mX21lbW9yeV9zZXR0aW5ncyBtZW07CisJc3RydWN0IGNvbmZfbWVtb3J5X3NldHRpbmdzIG1lbV93bDEyN3g7CisJc3RydWN0IGNvbmZfbWVtb3J5X3NldHRpbmdzIG1lbV93bDEyOHg7CisJc3RydWN0IGNvbmZfZm1fY29leCBmbV9jb2V4OworCXU4IGhjaV9pb19kczsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9kZWJ1Z2ZzLmMKaW5kZXggOGU3NWIwOS4uZjFmOGRmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2RlYnVnZnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvZGVidWdmcy5jCkBAIC0yNjcsNyArMjY3LDcgQEAKIAl9CiAJYnVmW2xlbl0gPSAnXDAnOwogCi0JcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmdmFsdWUpOworCXJldCA9IGtzdHJ0b3VsKGJ1ZiwgMCwgJnZhbHVlKTsKIAlpZiAocmV0IDwgMCkgewogCQl3bDEyNzFfd2FybmluZygiaWxsZWdhbCB2YWx1ZSBpbiBncGlvX3Bvd2VyIik7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjkxLDYgKzI5MSwyNDIgQEAKIAkubGxzZWVrID0gZGVmYXVsdF9sbHNlZWssCiB9OwogCitzdGF0aWMgc3NpemVfdCBzdGFydF9yZWNvdmVyeV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkgICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisJaWVlZTgwMjExX3F1ZXVlX3dvcmsod2wtPmh3LCAmd2wtPnJlY292ZXJ5X3dvcmspOworCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3RhcnRfcmVjb3Zlcnlfb3BzID0geworCS53cml0ZSA9IHN0YXJ0X3JlY292ZXJ5X3dyaXRlLAorCS5vcGVuID0gd2wxMjcxX29wZW5fZmlsZV9nZW5lcmljLAorCS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywKK307CisKK3N0YXRpYyBzc2l6ZV90IGRyaXZlcl9zdGF0ZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB3bDEyNzEgKndsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWludCByZXMgPSAwOworCWNoYXIgYnVmWzEwMjRdOworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworI2RlZmluZSBEUklWRVJfU1RBVEVfUFJJTlQoeCwgZm10KSAgIFwKKwkocmVzICs9IHNjbnByaW50ZihidWYgKyByZXMsIHNpemVvZihidWYpIC0gcmVzLFwKKwkJCSAgI3ggIiA9ICIgZm10ICJcbiIsIHdsLT54KSkKKworI2RlZmluZSBEUklWRVJfU1RBVEVfUFJJTlRfTE9ORyh4KSBEUklWRVJfU1RBVEVfUFJJTlQoeCwgIiVsZCIpCisjZGVmaW5lIERSSVZFUl9TVEFURV9QUklOVF9JTlQoeCkgIERSSVZFUl9TVEFURV9QUklOVCh4LCAiJWQiKQorI2RlZmluZSBEUklWRVJfU1RBVEVfUFJJTlRfU1RSKHgpICBEUklWRVJfU1RBVEVfUFJJTlQoeCwgIiVzIikKKyNkZWZpbmUgRFJJVkVSX1NUQVRFX1BSSU5UX0xIRVgoeCkgRFJJVkVSX1NUQVRFX1BSSU5UKHgsICIweCVseCIpCisjZGVmaW5lIERSSVZFUl9TVEFURV9QUklOVF9IRVgoeCkgIERSSVZFUl9TVEFURV9QUklOVCh4LCAiMHgleCIpCisKKwlEUklWRVJfU1RBVEVfUFJJTlRfSU5UKHR4X2Jsb2Nrc19hdmFpbGFibGUpOworCURSSVZFUl9TVEFURV9QUklOVF9JTlQodHhfYWxsb2NhdGVkX2Jsb2Nrcyk7CisJRFJJVkVSX1NUQVRFX1BSSU5UX0lOVCh0eF9mcmFtZXNfY250KTsKKwlEUklWRVJfU1RBVEVfUFJJTlRfTEhFWCh0eF9mcmFtZXNfbWFwWzBdKTsKKwlEUklWRVJfU1RBVEVfUFJJTlRfSU5UKHR4X3F1ZXVlX2NvdW50KTsKKwlEUklWRVJfU1RBVEVfUFJJTlRfSU5UKHR4X3BhY2tldHNfY291bnQpOworCURSSVZFUl9TVEFURV9QUklOVF9JTlQodHhfcmVzdWx0c19jb3VudCk7CisJRFJJVkVSX1NUQVRFX1BSSU5UX0xIRVgoZmxhZ3MpOworCURSSVZFUl9TVEFURV9QUklOVF9JTlQodHhfYmxvY2tzX2ZyZWVkWzBdKTsKKwlEUklWRVJfU1RBVEVfUFJJTlRfSU5UKHR4X2Jsb2Nrc19mcmVlZFsxXSk7CisJRFJJVkVSX1NUQVRFX1BSSU5UX0lOVCh0eF9ibG9ja3NfZnJlZWRbMl0pOworCURSSVZFUl9TVEFURV9QUklOVF9JTlQodHhfYmxvY2tzX2ZyZWVkWzNdKTsKKwlEUklWRVJfU1RBVEVfUFJJTlRfSU5UKHR4X3NlY3VyaXR5X2xhc3Rfc2VxKTsKKwlEUklWRVJfU1RBVEVfUFJJTlRfSU5UKHJ4X2NvdW50ZXIpOworCURSSVZFUl9TVEFURV9QUklOVF9JTlQoc2Vzc2lvbl9jb3VudGVyKTsKKwlEUklWRVJfU1RBVEVfUFJJTlRfSU5UKHN0YXRlKTsKKwlEUklWRVJfU1RBVEVfUFJJTlRfSU5UKGJzc190eXBlKTsKKwlEUklWRVJfU1RBVEVfUFJJTlRfSU5UKGNoYW5uZWwpOworCURSSVZFUl9TVEFURV9QUklOVF9IRVgocmF0ZV9zZXQpOworCURSSVZFUl9TVEFURV9QUklOVF9IRVgoYmFzaWNfcmF0ZV9zZXQpOworCURSSVZFUl9TVEFURV9QUklOVF9IRVgoYmFzaWNfcmF0ZSk7CisJRFJJVkVSX1NUQVRFX1BSSU5UX0lOVChiYW5kKTsKKwlEUklWRVJfU1RBVEVfUFJJTlRfSU5UKGJlYWNvbl9pbnQpOworCURSSVZFUl9TVEFURV9QUklOVF9JTlQocHNtX2VudHJ5X3JldHJ5KTsKKwlEUklWRVJfU1RBVEVfUFJJTlRfSU5UKHBzX3BvbGxfZmFpbHVyZXMpOworCURSSVZFUl9TVEFURV9QUklOVF9IRVgoZmlsdGVycyk7CisJRFJJVkVSX1NUQVRFX1BSSU5UX0hFWChyeF9jb25maWcpOworCURSSVZFUl9TVEFURV9QUklOVF9IRVgocnhfZmlsdGVyKTsKKwlEUklWRVJfU1RBVEVfUFJJTlRfSU5UKHBvd2VyX2xldmVsKTsKKwlEUklWRVJfU1RBVEVfUFJJTlRfSU5UKHJzc2lfdGhvbGQpOworCURSSVZFUl9TVEFURV9QUklOVF9JTlQobGFzdF9yc3NpX2V2ZW50KTsKKwlEUklWRVJfU1RBVEVfUFJJTlRfSU5UKHNnX2VuYWJsZWQpOworCURSSVZFUl9TVEFURV9QUklOVF9JTlQoZW5hYmxlXzExYSk7CisJRFJJVkVSX1NUQVRFX1BSSU5UX0lOVChub2lzZSk7CisJRFJJVkVSX1NUQVRFX1BSSU5UX0xIRVgoYXBfaGxpZF9tYXBbMF0pOworCURSSVZFUl9TVEFURV9QUklOVF9JTlQobGFzdF90eF9obGlkKTsKKwlEUklWRVJfU1RBVEVfUFJJTlRfSU5UKGJhX3N1cHBvcnQpOworCURSSVZFUl9TVEFURV9QUklOVF9IRVgoYmFfcnhfYml0bWFwKTsKKwlEUklWRVJfU1RBVEVfUFJJTlRfSEVYKGFwX2Z3X3BzX21hcCk7CisJRFJJVkVSX1NUQVRFX1BSSU5UX0xIRVgoYXBfcHNfbWFwKTsKKwlEUklWRVJfU1RBVEVfUFJJTlRfSEVYKHF1aXJrcyk7CisJRFJJVkVSX1NUQVRFX1BSSU5UX0hFWChpcnEpOworCURSSVZFUl9TVEFURV9QUklOVF9IRVgocmVmX2Nsb2NrKTsKKwlEUklWRVJfU1RBVEVfUFJJTlRfSEVYKHRjeG9fY2xvY2spOworCURSSVZFUl9TVEFURV9QUklOVF9IRVgoaHdfcGdfdmVyKTsKKwlEUklWRVJfU1RBVEVfUFJJTlRfSEVYKHBsYXRmb3JtX3F1aXJrcyk7CisJRFJJVkVSX1NUQVRFX1BSSU5UX0hFWChjaGlwLmlkKTsKKwlEUklWRVJfU1RBVEVfUFJJTlRfU1RSKGNoaXAuZndfdmVyX3N0cik7CisJRFJJVkVSX1NUQVRFX1BSSU5UX0lOVChzY2hlZF9zY2FubmluZyk7CisKKyN1bmRlZiBEUklWRVJfU1RBVEVfUFJJTlRfSU5UCisjdW5kZWYgRFJJVkVSX1NUQVRFX1BSSU5UX0xPTkcKKyN1bmRlZiBEUklWRVJfU1RBVEVfUFJJTlRfSEVYCisjdW5kZWYgRFJJVkVSX1NUQVRFX1BSSU5UX0xIRVgKKyN1bmRlZiBEUklWRVJfU1RBVEVfUFJJTlRfU1RSCisjdW5kZWYgRFJJVkVSX1NUQVRFX1BSSU5UCisKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHJlcyk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRyaXZlcl9zdGF0ZV9vcHMgPSB7CisJLnJlYWQgPSBkcml2ZXJfc3RhdGVfcmVhZCwKKwkub3BlbiA9IHdsMTI3MV9vcGVuX2ZpbGVfZ2VuZXJpYywKKwkubGxzZWVrID0gZGVmYXVsdF9sbHNlZWssCit9OworCitzdGF0aWMgc3NpemVfdCBkdGltX2ludGVydmFsX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB3bDEyNzEgKndsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXU4IHZhbHVlOworCisJaWYgKHdsLT5jb25mLmNvbm4ud2FrZV91cF9ldmVudCA9PSBDT05GX1dBS0VfVVBfRVZFTlRfRFRJTSB8fAorCSAgICB3bC0+Y29uZi5jb25uLndha2VfdXBfZXZlbnQgPT0gQ09ORl9XQUtFX1VQX0VWRU5UX05fRFRJTSkKKwkJdmFsdWUgPSB3bC0+Y29uZi5jb25uLmxpc3Rlbl9pbnRlcnZhbDsKKwllbHNlCisJCXZhbHVlID0gMDsKKworCXJldHVybiB3bDEyNzFfZm9ybWF0X2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsICIlZFxuIiwgdmFsdWUpOworfQorCitzdGF0aWMgc3NpemVfdCBkdGltX2ludGVydmFsX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCSAgIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1ZlsxMF07CisJc2l6ZV90IGxlbjsKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCWludCByZXQ7CisKKwlsZW4gPSBtaW4oY291bnQsIHNpemVvZihidWYpIC0gMSk7CisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCWJ1ZltsZW5dID0gJ1wwJzsKKworCXJldCA9IGtzdHJ0b3VsKGJ1ZiwgMCwgJnZhbHVlKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfd2FybmluZygiaWxsZWdhbCB2YWx1ZSBmb3IgZHRpbV9pbnRlcnZhbCIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodmFsdWUgPCAxIHx8IHZhbHVlID4gMTApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImR0aW0gdmFsdWUgaXMgbm90IGluIHZhbGlkIHJhbmdlIik7CisJCXJldHVybiAtRVJBTkdFOworCX0KKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwl3bC0+Y29uZi5jb25uLmxpc3Rlbl9pbnRlcnZhbCA9IHZhbHVlOworCS8qIGZvciBzb21lIHJlYXNvbiB0aGVyZSBhcmUgZGlmZmVyZW50IGV2ZW50IHR5cGVzIGZvciAxIGFuZCA+MSAqLworCWlmICh2YWx1ZSA9PSAxKQorCQl3bC0+Y29uZi5jb25uLndha2VfdXBfZXZlbnQgPSBDT05GX1dBS0VfVVBfRVZFTlRfRFRJTTsKKwllbHNlCisJCXdsLT5jb25mLmNvbm4ud2FrZV91cF9ldmVudCA9IENPTkZfV0FLRV9VUF9FVkVOVF9OX0RUSU07CisKKwkvKgorCSAqIHdlIGRvbid0IHJlY29uZmlndXJlIEFDWF9XQUtFX1VQX0NPTkRJVElPTlMgbm93LCBzbyBpdCB3aWxsIG9ubHkKKwkgKiB0YWtlIGVmZmVjdCBvbiB0aGUgbmV4dCB0aW1lIHdlIGVudGVyIHBzbS4KKwkgKi8KKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdGltX2ludGVydmFsX29wcyA9IHsKKwkucmVhZCA9IGR0aW1faW50ZXJ2YWxfcmVhZCwKKwkud3JpdGUgPSBkdGltX2ludGVydmFsX3dyaXRlLAorCS5vcGVuID0gd2wxMjcxX29wZW5fZmlsZV9nZW5lcmljLAorCS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywKK307CisKK3N0YXRpYyBzc2l6ZV90IGJlYWNvbl9pbnRlcnZhbF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB3bDEyNzEgKndsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXU4IHZhbHVlOworCisJaWYgKHdsLT5jb25mLmNvbm4ud2FrZV91cF9ldmVudCA9PSBDT05GX1dBS0VfVVBfRVZFTlRfQkVBQ09OIHx8CisJICAgIHdsLT5jb25mLmNvbm4ud2FrZV91cF9ldmVudCA9PSBDT05GX1dBS0VfVVBfRVZFTlRfTl9CRUFDT05TKQorCQl2YWx1ZSA9IHdsLT5jb25mLmNvbm4ubGlzdGVuX2ludGVydmFsOworCWVsc2UKKwkJdmFsdWUgPSAwOworCisJcmV0dXJuIHdsMTI3MV9mb3JtYXRfYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgIiVkXG4iLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJlYWNvbl9pbnRlcnZhbF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkgICAgIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB3bDEyNzEgKndsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzEwXTsKKwlzaXplX3QgbGVuOworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisJaW50IHJldDsKKworCWxlbiA9IG1pbihjb3VudCwgc2l6ZW9mKGJ1ZikgLSAxKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYnVmW2xlbl0gPSAnXDAnOworCisJcmV0ID0ga3N0cnRvdWwoYnVmLCAwLCAmdmFsdWUpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJpbGxlZ2FsIHZhbHVlIGZvciBiZWFjb25faW50ZXJ2YWwiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHZhbHVlIDwgMSB8fCB2YWx1ZSA+IDI1NSkgeworCQl3bDEyNzFfd2FybmluZygiYmVhY29uIGludGVydmFsIHZhbHVlIGlzIG5vdCBpbiB2YWxpZCByYW5nZSIpOworCQlyZXR1cm4gLUVSQU5HRTsKKwl9CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJd2wtPmNvbmYuY29ubi5saXN0ZW5faW50ZXJ2YWwgPSB2YWx1ZTsKKwkvKiBmb3Igc29tZSByZWFzb24gdGhlcmUgYXJlIGRpZmZlcmVudCBldmVudCB0eXBlcyBmb3IgMSBhbmQgPjEgKi8KKwlpZiAodmFsdWUgPT0gMSkKKwkJd2wtPmNvbmYuY29ubi53YWtlX3VwX2V2ZW50ID0gQ09ORl9XQUtFX1VQX0VWRU5UX0JFQUNPTjsKKwllbHNlCisJCXdsLT5jb25mLmNvbm4ud2FrZV91cF9ldmVudCA9IENPTkZfV0FLRV9VUF9FVkVOVF9OX0JFQUNPTlM7CisKKwkvKgorCSAqIHdlIGRvbid0IHJlY29uZmlndXJlIEFDWF9XQUtFX1VQX0NPTkRJVElPTlMgbm93LCBzbyBpdCB3aWxsIG9ubHkKKwkgKiB0YWtlIGVmZmVjdCBvbiB0aGUgbmV4dCB0aW1lIHdlIGVudGVyIHBzbS4KKwkgKi8KKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiZWFjb25faW50ZXJ2YWxfb3BzID0geworCS5yZWFkID0gYmVhY29uX2ludGVydmFsX3JlYWQsCisJLndyaXRlID0gYmVhY29uX2ludGVydmFsX3dyaXRlLAorCS5vcGVuID0gd2wxMjcxX29wZW5fZmlsZV9nZW5lcmljLAorCS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywKK307CisKIHN0YXRpYyBpbnQgd2wxMjcxX2RlYnVnZnNfYWRkX2ZpbGVzKHN0cnVjdCB3bDEyNzEgKndsLAogCQkJCSAgICAgc3RydWN0IGRlbnRyeSAqcm9vdGRpcikKIHsKQEAgLTM5OSw2ICs2MzUsMTAgQEAKIAlERUJVR0ZTX0FERChleGNlc3NpdmVfcmV0cmllcywgcm9vdGRpcik7CiAKIAlERUJVR0ZTX0FERChncGlvX3Bvd2VyLCByb290ZGlyKTsKKwlERUJVR0ZTX0FERChzdGFydF9yZWNvdmVyeSwgcm9vdGRpcik7CisJREVCVUdGU19BREQoZHJpdmVyX3N0YXRlLCByb290ZGlyKTsKKwlERUJVR0ZTX0FERChkdGltX2ludGVydmFsLCByb290ZGlyKTsKKwlERUJVR0ZTX0FERChiZWFjb25faW50ZXJ2YWwsIHJvb3RkaXIpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9ldmVudC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2V2ZW50LmMKaW5kZXggMWIxNzBjNS4uYzNjNTU0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2V2ZW50LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2V2ZW50LmMKQEAgLTMzLDYgKzMzLDcgQEAKIHsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yazsKIAlzdHJ1Y3Qgd2wxMjcxICp3bDsKKwlpbnQgcmV0OwogCiAJZHdvcmsgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayk7CiAJd2wgPSBjb250YWluZXJfb2YoZHdvcmssIHN0cnVjdCB3bDEyNzEsIHBzcG9sbF93b3JrKTsKQEAgLTU1LDggKzU2LDEzIEBACiAJICogZGVsaXZlcnkgZmFpbHVyZSBvY2N1cnJlZCwgYW5kIG5vLW9uZSBjaGFuZ2VkIHN0YXRlIHNpbmNlLCBzbwogCSAqIHdlIHNob3VsZCBnbyBiYWNrIHRvIHBvd2Vyc2F2ZS4KIAkgKi8KKwlyZXQgPSB3bDEyNzFfcHNfZWxwX3dha2V1cCh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCiAJd2wxMjcxX3BzX3NldF9tb2RlKHdsLCBTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERSwgd2wtPmJhc2ljX3JhdGUsIHRydWUpOwogCisJd2wxMjcxX3BzX2VscF9zbGVlcCh3bCk7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwogfTsKQEAgLTEzMiw4ICsxMzgsMTAgQEAKIAkJaWYgKHJldCA8IDApCiAJCQlicmVhazsKIAotCQkvKiBnbyB0byBleHRyZW1lbHkgbG93IHBvd2VyIG1vZGUgKi8KLQkJd2wxMjcxX3BzX2VscF9zbGVlcCh3bCk7CisJCWlmICh3bC0+cHNfY29tcGwpIHsKKwkJCWNvbXBsZXRlKHdsLT5wc19jb21wbCk7CisJCQl3bC0+cHNfY29tcGwgPSBOVUxMOworCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtMTg3LDYgKzE5NSwyMiBAQAogCQl3bDEyNzFfc2Nhbl9zdG0od2wpOwogCX0KIAorCWlmICh2ZWN0b3IgJiBQRVJJT0RJQ19TQ0FOX1JFUE9SVF9FVkVOVF9JRCkgeworCQl3bDEyNzFfZGVidWcoREVCVUdfRVZFTlQsICJQRVJJT0RJQ19TQ0FOX1JFUE9SVF9FVkVOVCAiCisJCQkgICAgICIoc3RhdHVzIDB4JTB4KSIsIG1ib3gtPnNjaGVkdWxlZF9zY2FuX3N0YXR1cyk7CisKKwkJd2wxMjcxX3NjYW5fc2NoZWRfc2Nhbl9yZXN1bHRzKHdsKTsKKwl9CisKKwlpZiAodmVjdG9yICYgUEVSSU9ESUNfU0NBTl9DT01QTEVURV9FVkVOVF9JRCkgeworCQl3bDEyNzFfZGVidWcoREVCVUdfRVZFTlQsICJQRVJJT0RJQ19TQ0FOX0NPTVBMRVRFX0VWRU5UICIKKwkJCSAgICAgIihzdGF0dXMgMHglMHgpIiwgbWJveC0+c2NoZWR1bGVkX3NjYW5fc3RhdHVzKTsKKwkJaWYgKHdsLT5zY2hlZF9zY2FubmluZykgeworCQkJd2wxMjcxX3NjYW5fc2NoZWRfc2Nhbl9zdG9wKHdsKTsKKwkJCWllZWU4MDIxMV9zY2hlZF9zY2FuX3N0b3BwZWQod2wtPmh3KTsKKwkJfQorCX0KKwogCS8qIGRpc2FibGUgZHluYW1pYyBQUyB3aGVuIHJlcXVlc3RlZCBieSB0aGUgZmlybXdhcmUgKi8KIAlpZiAodmVjdG9yICYgU09GVF9HRU1JTklfU0VOU0VfRVZFTlRfSUQgJiYKIAkgICAgd2wtPmJzc190eXBlID09IEJTU19UWVBFX1NUQV9CU1MpIHsKQEAgLTIyOCw2ICsyNTIsMTIgQEAKIAkJCXdsMTI3MV9ldmVudF9yc3NpX3RyaWdnZXIod2wsIG1ib3gpOwogCX0KIAorCWlmICgodmVjdG9yICYgRFVNTVlfUEFDS0VUX0VWRU5UX0lEKSAmJiAhaXNfYXApIHsKKwkJd2wxMjcxX2RlYnVnKERFQlVHX0VWRU5ULCAiRFVNTVlfUEFDS0VUX0lEX0VWRU5UX0lEIik7CisJCWlmICh3bC0+dmlmKQorCQkJd2wxMjcxX3R4X2R1bW15X3BhY2tldCh3bCk7CisJfQorCiAJaWYgKHdsLT52aWYgJiYgYmVhY29uX2xvc3MpCiAJCWllZWU4MDIxMV9jb25uZWN0aW9uX2xvc3Mod2wtPnZpZik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9ldmVudC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2V2ZW50LmgKaW5kZXggMGU4MDg4Ni4uYjZjZjA2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2V2ZW50LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2V2ZW50LmgKQEAgLTU5LDcgKzU5LDEwIEBACiAJQlNTX0xPU0VfRVZFTlRfSUQJCQkgPSBCSVQoMTgpLAogCVJFR0FJTkVEX0JTU19FVkVOVF9JRAkJCSA9IEJJVCgxOSksCiAJUk9BTUlOR19UUklHR0VSX01BWF9UWF9SRVRSWV9FVkVOVF9JRAkgPSBCSVQoMjApLAotCVNUQV9SRU1PVkVfQ09NUExFVEVfRVZFTlRfSUQJCSA9IEJJVCgyMSksIC8qIEFQICovCisJLyogU1RBOiBkdW1teSBwYWtldCBmb3IgZHluYW1pYyBtZW0gYmxvY2tzICovCisJRFVNTVlfUEFDS0VUX0VWRU5UX0lEICAgICAgICAgICAgICAgICAgICA9IEJJVCgyMSksCisJLyogQVA6IFNUQSByZW1vdmUgY29tcGxldGUgKi8KKwlTVEFfUkVNT1ZFX0NPTVBMRVRFX0VWRU5UX0lEICAgICAgICAgICAgID0gQklUKDIxKSwKIAlTT0ZUX0dFTUlOSV9TRU5TRV9FVkVOVF9JRAkJID0gQklUKDIyKSwKIAlTT0ZUX0dFTUlOSV9QUkVESUNUSU9OX0VWRU5UX0lECQkgPSBCSVQoMjMpLAogCVNPRlRfR0VNSU5JX0FWQUxBTkNIRV9FVkVOVF9JRAkJID0gQklUKDI0KSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9pbmkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9pbmkuaAppbmRleCBjMzMwYTI1Li4xNDIwYzg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvaW5pLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2luaS5oCkBAIC00MSw2ICs0MSwyOCBAQAogCXU4IHNyZjNbV0wxMjcxX0lOSV9NQVhfU01BUlRfUkVGTEVYX1BBUkFNXTsKIH0gX19wYWNrZWQ7CiAKKyNkZWZpbmUgV0wxMjhYX0lOSV9NQVhfU0VUVElOR1NfUEFSQU0gNAorCitzdHJ1Y3Qgd2wxMjh4X2luaV9nZW5lcmFsX3BhcmFtcyB7CisJdTggcmVmX2Nsb2NrOworCXU4IHNldHRsaW5nX3RpbWU7CisJdTggY2xrX3ZhbGlkX29uX3dha2V1cDsKKwl1OCB0Y3hvX3JlZl9jbG9jazsKKwl1OCB0Y3hvX3NldHRsaW5nX3RpbWU7CisJdTggdGN4b192YWxpZF9vbl93YWtldXA7CisJdTggdGN4b19sZG9fdm9sdGFnZTsKKwl1OCB4dGFsX2l0cmltX3ZhbDsKKwl1OCBwbGF0Zm9ybV9jb25mOworCXU4IGR1YWxfbW9kZV9zZWxlY3Q7CisJdTggdHhfYmlwX2ZlbV9hdXRvX2RldGVjdDsKKwl1OCB0eF9iaXBfZmVtX21hbnVmYWN0dXJlcjsKKwl1OCBnZW5lcmFsX3NldHRpbmdzW1dMMTI4WF9JTklfTUFYX1NFVFRJTkdTX1BBUkFNXTsKKwl1OCBzcl9zdGF0ZTsKKwl1OCBzcmYxW1dMMTI3MV9JTklfTUFYX1NNQVJUX1JFRkxFWF9QQVJBTV07CisJdTggc3JmMltXTDEyNzFfSU5JX01BWF9TTUFSVF9SRUZMRVhfUEFSQU1dOworCXU4IHNyZjNbV0wxMjcxX0lOSV9NQVhfU01BUlRfUkVGTEVYX1BBUkFNXTsKK30gX19wYWNrZWQ7CisKICNkZWZpbmUgV0wxMjcxX0lOSV9SU1NJX1BST0NFU1NfQ09NUEVOU19TSVpFIDE1CiAKIHN0cnVjdCB3bDEyNzFfaW5pX2JhbmRfcGFyYW1zXzIgewpAQCAtNDksOSArNzEsMTYgQEAKIAl1OCByeF9yc3NpX3Byb2Nlc3NfY29tcGVuc1tXTDEyNzFfSU5JX1JTU0lfUFJPQ0VTU19DT01QRU5TX1NJWkVdOwogfSBfX3BhY2tlZDsKIAotI2RlZmluZSBXTDEyNzFfSU5JX1JBVEVfR1JPVVBfQ09VTlQgNgogI2RlZmluZSBXTDEyNzFfSU5JX0NIQU5ORUxfQ09VTlRfMiAxNAogCitzdHJ1Y3Qgd2wxMjh4X2luaV9iYW5kX3BhcmFtc18yIHsKKwl1OCByeF90cmFjZV9pbnNlcnRpb25fbG9zczsKKwl1OCB0eF90cmFjZV9sb3NzW1dMMTI3MV9JTklfQ0hBTk5FTF9DT1VOVF8yXTsKKwl1OCByeF9yc3NpX3Byb2Nlc3NfY29tcGVuc1tXTDEyNzFfSU5JX1JTU0lfUFJPQ0VTU19DT01QRU5TX1NJWkVdOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBXTDEyNzFfSU5JX1JBVEVfR1JPVVBfQ09VTlQgNgorCiBzdHJ1Y3Qgd2wxMjcxX2luaV9mZW1fcGFyYW1zXzIgewogCV9fbGUxNiB0eF9iaXBfcmVmX3BkX3ZvbHRhZ2U7CiAJdTggdHhfYmlwX3JlZl9wb3dlcjsKQEAgLTY4LDYgKzk3LDI4IEBACiAJdTggbm9ybWFsX3RvX2RlZ3JhZGVkX2hpZ2hfdGhyOwogfSBfX3BhY2tlZDsKIAorI2RlZmluZSBXTDEyOFhfSU5JX1JBVEVfR1JPVVBfQ09VTlQgNworLyogbG93IGFuZCBoaWdoIHRlbXBlcmF0dXJlcyAqLworI2RlZmluZSBXTDEyOFhfSU5JX1BEX1ZTX1RFTVBFUkFUVVJFX1JBTkdFUyAyCisKK3N0cnVjdCB3bDEyOHhfaW5pX2ZlbV9wYXJhbXNfMiB7CisJX19sZTE2IHR4X2JpcF9yZWZfcGRfdm9sdGFnZTsKKwl1OCB0eF9iaXBfcmVmX3Bvd2VyOworCXU4IHR4X2JpcF9yZWZfb2Zmc2V0OworCXU4IHR4X3Blcl9yYXRlX3B3cl9saW1pdHNfbm9ybWFsW1dMMTI4WF9JTklfUkFURV9HUk9VUF9DT1VOVF07CisJdTggdHhfcGVyX3JhdGVfcHdyX2xpbWl0c19kZWdyYWRlZFtXTDEyOFhfSU5JX1JBVEVfR1JPVVBfQ09VTlRdOworCXU4IHR4X3Blcl9yYXRlX3B3cl9saW1pdHNfZXh0cmVtZVtXTDEyOFhfSU5JX1JBVEVfR1JPVVBfQ09VTlRdOworCXU4IHR4X3Blcl9jaGFuX3B3cl9saW1pdHNfMTFiW1dMMTI3MV9JTklfQ0hBTk5FTF9DT1VOVF8yXTsKKwl1OCB0eF9wZXJfY2hhbl9wd3JfbGltaXRzX29mZG1bV0wxMjcxX0lOSV9DSEFOTkVMX0NPVU5UXzJdOworCXU4IHR4X3BkX3ZzX3JhdGVfb2Zmc2V0c1tXTDEyOFhfSU5JX1JBVEVfR1JPVVBfQ09VTlRdOworCXU4IHR4X2liaWFzW1dMMTI4WF9JTklfUkFURV9HUk9VUF9DT1VOVCArIDFdOworCXU4IHR4X3BkX3ZzX2NoYW5fb2Zmc2V0c1tXTDEyNzFfSU5JX0NIQU5ORUxfQ09VTlRfMl07CisJdTggdHhfcGRfdnNfdGVtcGVyYXR1cmVbV0wxMjhYX0lOSV9QRF9WU19URU1QRVJBVFVSRV9SQU5HRVNdOworCXU4IHJ4X2ZlbV9pbnNlcnRpb25fbG9zczsKKwl1OCBkZWdyYWRlZF9sb3dfdG9fbm9ybWFsX3RocjsKKwl1OCBub3JtYWxfdG9fZGVncmFkZWRfaGlnaF90aHI7Cit9IF9fcGFja2VkOworCiAjZGVmaW5lIFdMMTI3MV9JTklfQ0hBTk5FTF9DT1VOVF81IDM1CiAjZGVmaW5lIFdMMTI3MV9JTklfU1VCX0JBTkRfQ09VTlRfNSA3CiAKQEAgLTc3LDYgKzEyOCwxMiBAQAogCXU4IHJ4X3Jzc2lfcHJvY2Vzc19jb21wZW5zW1dMMTI3MV9JTklfUlNTSV9QUk9DRVNTX0NPTVBFTlNfU0laRV07CiB9IF9fcGFja2VkOwogCitzdHJ1Y3Qgd2wxMjh4X2luaV9iYW5kX3BhcmFtc181IHsKKwl1OCByeF90cmFjZV9pbnNlcnRpb25fbG9zc1tXTDEyNzFfSU5JX1NVQl9CQU5EX0NPVU5UXzVdOworCXU4IHR4X3RyYWNlX2xvc3NbV0wxMjcxX0lOSV9DSEFOTkVMX0NPVU5UXzVdOworCXU4IHJ4X3Jzc2lfcHJvY2Vzc19jb21wZW5zW1dMMTI3MV9JTklfUlNTSV9QUk9DRVNTX0NPTVBFTlNfU0laRV07Cit9IF9fcGFja2VkOworCiBzdHJ1Y3Qgd2wxMjcxX2luaV9mZW1fcGFyYW1zXzUgewogCV9fbGUxNiB0eF9iaXBfcmVmX3BkX3ZvbHRhZ2VbV0wxMjcxX0lOSV9TVUJfQkFORF9DT1VOVF81XTsKIAl1OCB0eF9iaXBfcmVmX3Bvd2VyW1dMMTI3MV9JTklfU1VCX0JBTkRfQ09VTlRfNV07CkBAIC05Miw2ICsxNDksMjMgQEAKIAl1OCBub3JtYWxfdG9fZGVncmFkZWRfaGlnaF90aHI7CiB9IF9fcGFja2VkOwogCitzdHJ1Y3Qgd2wxMjh4X2luaV9mZW1fcGFyYW1zXzUgeworCV9fbGUxNiB0eF9iaXBfcmVmX3BkX3ZvbHRhZ2VbV0wxMjcxX0lOSV9TVUJfQkFORF9DT1VOVF81XTsKKwl1OCB0eF9iaXBfcmVmX3Bvd2VyW1dMMTI3MV9JTklfU1VCX0JBTkRfQ09VTlRfNV07CisJdTggdHhfYmlwX3JlZl9vZmZzZXRbV0wxMjcxX0lOSV9TVUJfQkFORF9DT1VOVF81XTsKKwl1OCB0eF9wZXJfcmF0ZV9wd3JfbGltaXRzX25vcm1hbFtXTDEyOFhfSU5JX1JBVEVfR1JPVVBfQ09VTlRdOworCXU4IHR4X3Blcl9yYXRlX3B3cl9saW1pdHNfZGVncmFkZWRbV0wxMjhYX0lOSV9SQVRFX0dST1VQX0NPVU5UXTsKKwl1OCB0eF9wZXJfcmF0ZV9wd3JfbGltaXRzX2V4dHJlbWVbV0wxMjhYX0lOSV9SQVRFX0dST1VQX0NPVU5UXTsKKwl1OCB0eF9wZXJfY2hhbl9wd3JfbGltaXRzX29mZG1bV0wxMjcxX0lOSV9DSEFOTkVMX0NPVU5UXzVdOworCXU4IHR4X3BkX3ZzX3JhdGVfb2Zmc2V0c1tXTDEyOFhfSU5JX1JBVEVfR1JPVVBfQ09VTlRdOworCXU4IHR4X2liaWFzW1dMMTI4WF9JTklfUkFURV9HUk9VUF9DT1VOVF07CisJdTggdHhfcGRfdnNfY2hhbl9vZmZzZXRzW1dMMTI3MV9JTklfQ0hBTk5FTF9DT1VOVF81XTsKKwl1OCB0eF9wZF92c190ZW1wZXJhdHVyZVtXTDEyNzFfSU5JX1NVQl9CQU5EX0NPVU5UXzUgKgorCQlXTDEyOFhfSU5JX1BEX1ZTX1RFTVBFUkFUVVJFX1JBTkdFU107CisJdTggcnhfZmVtX2luc2VydGlvbl9sb3NzW1dMMTI3MV9JTklfU1VCX0JBTkRfQ09VTlRfNV07CisJdTggZGVncmFkZWRfbG93X3RvX25vcm1hbF90aHI7CisJdTggbm9ybWFsX3RvX2RlZ3JhZGVkX2hpZ2hfdGhyOworfSBfX3BhY2tlZDsKIAogLyogTlZTIGRhdGEgc3RydWN0dXJlICovCiAjZGVmaW5lIFdMMTI3MV9JTklfTlZTX1NFQ1RJT05fU0laRQkJICAgICA0NjgKQEAgLTEwMCw3ICsxNzQsNyBAQAogI2RlZmluZSBXTDEyNzFfSU5JX0xFR0FDWV9OVlNfRklMRV9TSVpFICAgICAgICAgICAgICA4MDAKIAogc3RydWN0IHdsMTI3MV9udnNfZmlsZSB7Ci0JLyogTlZTIHNlY3Rpb24gKi8KKwkvKiBOVlMgc2VjdGlvbiAtIG11c3QgYmUgZmlyc3QhICovCiAJdTggbnZzW1dMMTI3MV9JTklfTlZTX1NFQ1RJT05fU0laRV07CiAKIAkvKiBJTkkgc2VjdGlvbiAqLwpAQCAtMTIwLDQgKzE5NCwyNCBAQAogCX0gZHluX3JhZGlvX3BhcmFtc181W1dMMTI3MV9JTklfRkVNX01PRFVMRV9DT1VOVF07CiB9IF9fcGFja2VkOwogCitzdHJ1Y3Qgd2wxMjh4X252c19maWxlIHsKKwkvKiBOVlMgc2VjdGlvbiAtIG11c3QgYmUgZmlyc3QhICovCisJdTggbnZzW1dMMTI3MV9JTklfTlZTX1NFQ1RJT05fU0laRV07CisKKwkvKiBJTkkgc2VjdGlvbiAqLworCXN0cnVjdCB3bDEyOHhfaW5pX2dlbmVyYWxfcGFyYW1zIGdlbmVyYWxfcGFyYW1zOworCXU4IGZlbV92ZW5kb3JfYW5kX29wdGlvbnM7CisJc3RydWN0IHdsMTI4eF9pbmlfYmFuZF9wYXJhbXNfMiBzdGF0X3JhZGlvX3BhcmFtc18yOworCXU4IHBhZGRpbmcyOworCXN0cnVjdCB7CisJCXN0cnVjdCB3bDEyOHhfaW5pX2ZlbV9wYXJhbXNfMiBwYXJhbXM7CisJCXU4IHBhZGRpbmc7CisJfSBkeW5fcmFkaW9fcGFyYW1zXzJbV0wxMjcxX0lOSV9GRU1fTU9EVUxFX0NPVU5UXTsKKwlzdHJ1Y3Qgd2wxMjh4X2luaV9iYW5kX3BhcmFtc181IHN0YXRfcmFkaW9fcGFyYW1zXzU7CisJdTggcGFkZGluZzM7CisJc3RydWN0IHsKKwkJc3RydWN0IHdsMTI4eF9pbmlfZmVtX3BhcmFtc181IHBhcmFtczsKKwkJdTggcGFkZGluZzsKKwl9IGR5bl9yYWRpb19wYXJhbXNfNVtXTDEyNzFfSU5JX0ZFTV9NT0RVTEVfQ09VTlRdOworfSBfX3BhY2tlZDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2luaXQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9pbml0LmMKaW5kZXggNjA3MmZlNC4uYThmNGYxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2luaXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvaW5pdC5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiY21kLmgiCiAjaW5jbHVkZSAicmVnLmgiCiAjaW5jbHVkZSAidHguaCIKKyNpbmNsdWRlICJpby5oIgogCiBpbnQgd2wxMjcxX3N0YV9pbml0X3RlbXBsYXRlc19jb25maWcoc3RydWN0IHdsMTI3MSAqd2wpCiB7CkBAIC0yNTcsNyArMjU4LDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IHdsMTI3MV9hY3hfcnRzX3RocmVzaG9sZCh3bCwgd2wtPmNvbmYucngucnRzX3RocmVzaG9sZCk7CisJcmV0ID0gd2wxMjcxX2FjeF9ydHNfdGhyZXNob2xkKHdsLCB3bC0+aHctPndpcGh5LT5ydHNfdGhyZXNob2xkKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMjg0LDcgKzI4NSwxMCBAQAogewogCWludCByZXQ7CiAKLQlyZXQgPSB3bDEyNzFfYWN4X3NnX2NmZyh3bCk7CisJaWYgKHdsLT5ic3NfdHlwZSA9PSBCU1NfVFlQRV9BUF9CU1MpCisJCXJldCA9IHdsMTI3MV9hY3hfYXBfc2dfY2ZnKHdsKTsKKwllbHNlCisJCXJldCA9IHdsMTI3MV9hY3hfc3RhX3NnX2NmZyh3bCk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTMyMSw5ICszMjUsMTEgQEAKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gd2wxMjcxX2NtZF9leHRfcmFkaW9fcGFybXMod2wpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OworCWlmICh3bC0+Y2hpcC5pZCAhPSBDSElQX0lEXzEyODNfUEcyMCkgeworCQlyZXQgPSB3bDEyNzFfY21kX2V4dF9yYWRpb19wYXJtcyh3bCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CiAKIAkvKiBQUyBjb25maWcgKi8KIAlyZXQgPSB3bDEyNzFfYWN4X2NvbmZpZ19wcyh3bCk7CkBAIC0zNDgsOCArMzU0LDggQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCS8qIEJsdWV0b290aCBXTEFOIGNvZXhpc3RlbmNlICovCi0JcmV0ID0gd2wxMjcxX2luaXRfcHRhKHdsKTsKKwkvKiBGTSBXTEFOIGNvZXhpc3RlbmNlICovCisJcmV0ID0gd2wxMjcxX2FjeF9mbV9jb2V4KHdsKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtNDA3LDcgKzQxMyw3IEBACiAKIHN0YXRpYyBpbnQgd2wxMjcxX2FwX2h3X2luaXQoc3RydWN0IHdsMTI3MSAqd2wpCiB7Ci0JaW50IHJldCwgaTsKKwlpbnQgcmV0OwogCiAJcmV0ID0gd2wxMjcxX2FwX2luaXRfdGVtcGxhdGVzX2NvbmZpZyh3bCk7CiAJaWYgKHJldCA8IDApCkBAIC00MTgsMjMgKzQyNCw3IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQkvKiBDb25maWd1cmUgaW5pdGlhbCBUWCByYXRlIGNsYXNzZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgd2wtPmNvbmYudHguYWNfY29uZl9jb3VudDsgaSsrKSB7Ci0JCXJldCA9IHdsMTI3MV9hY3hfYXBfcmF0ZV9wb2xpY3kod2wsCi0JCQkJJndsLT5jb25mLnR4LmFwX3JjX2NvbmZbaV0sIGkpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0ID0gd2wxMjcxX2FjeF9hcF9yYXRlX3BvbGljeSh3bCwKLQkJCQkJJndsLT5jb25mLnR4LmFwX21nbXRfY29uZiwKLQkJCQkJQUNYX1RYX0FQX01PREVfTUdNVF9SQVRFKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHdsMTI3MV9hY3hfYXBfcmF0ZV9wb2xpY3kod2wsCi0JCQkJCSZ3bC0+Y29uZi50eC5hcF9iY3N0X2NvbmYsCi0JCQkJCUFDWF9UWF9BUF9NT0RFX0JDU1RfUkFURSk7CisJcmV0ID0gd2wxMjcxX2luaXRfYXBfcmF0ZXMod2wpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC00NDksNyArNDM5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB3bDEyNzFfYXBfaHdfaW5pdF9wb3N0X21lbShzdHJ1Y3Qgd2wxMjcxICp3bCkKK2ludCB3bDEyNzFfYXBfaW5pdF90ZW1wbGF0ZXMoc3RydWN0IHdsMTI3MSAqd2wpCiB7CiAJaW50IHJldDsKIApAQCAtNDY1LDYgKzQ1NSw3MCBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCisJLyoKKwkgKiB3aGVuIG9wZXJhdGluZyBhcyBBUCB3ZSB3YW50IHRvIHJlY2VpdmUgZXh0ZXJuYWwgYmVhY29ucyBmb3IKKwkgKiBjb25maWd1cmluZyBFUlAgcHJvdGVjdGlvbi4KKwkgKi8KKwlyZXQgPSB3bDEyNzFfYWN4X3NldF9hcF9iZWFjb25fZmlsdGVyKHdsLCBmYWxzZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bDEyNzFfYXBfaHdfaW5pdF9wb3N0X21lbShzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlyZXR1cm4gd2wxMjcxX2FwX2luaXRfdGVtcGxhdGVzKHdsKTsKK30KKworaW50IHdsMTI3MV9pbml0X2FwX3JhdGVzKHN0cnVjdCB3bDEyNzEgKndsKQoreworCWludCBpLCByZXQ7CisJc3RydWN0IGNvbmZfdHhfcmF0ZV9jbGFzcyByYzsKKwl1MzIgc3VwcG9ydGVkX3JhdGVzOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FQLCAiQVAgYmFzaWMgcmF0ZSBzZXQ6IDB4JXgiLCB3bC0+YmFzaWNfcmF0ZV9zZXQpOworCisJaWYgKHdsLT5iYXNpY19yYXRlX3NldCA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJjLmVuYWJsZWRfcmF0ZXMgPSB3bC0+YmFzaWNfcmF0ZV9zZXQ7CisJcmMubG9uZ19yZXRyeV9saW1pdCA9IDEwOworCXJjLnNob3J0X3JldHJ5X2xpbWl0ID0gMTA7CisJcmMuYWZsYWdzID0gMDsKKwlyZXQgPSB3bDEyNzFfYWN4X2FwX3JhdGVfcG9saWN5KHdsLCAmcmMsIEFDWF9UWF9BUF9NT0RFX01HTVRfUkFURSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiB1c2UgdGhlIG1pbiBiYXNpYyByYXRlIGZvciBBUCBicm9hZGNhc3QvbXVsdGljYXN0ICovCisJcmMuZW5hYmxlZF9yYXRlcyA9IHdsMTI3MV90eF9taW5fcmF0ZV9nZXQod2wpOworCXJjLnNob3J0X3JldHJ5X2xpbWl0ID0gMTA7CisJcmMubG9uZ19yZXRyeV9saW1pdCA9IDEwOworCXJjLmFmbGFncyA9IDA7CisJcmV0ID0gd2wxMjcxX2FjeF9hcF9yYXRlX3BvbGljeSh3bCwgJnJjLCBBQ1hfVFhfQVBfTU9ERV9CQ1NUX1JBVEUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyoKKwkgKiBJZiB0aGUgYmFzaWMgcmF0ZXMgY29udGFpbiBPRkRNIHJhdGVzLCB1c2UgT0ZETSBvbmx5CisJICogcmF0ZXMgZm9yIHVuaWNhc3QgVFggYXMgd2VsbC4gRWxzZSB1c2UgYWxsIHN1cHBvcnRlZCByYXRlcy4KKwkgKi8KKwlpZiAoKHdsLT5iYXNpY19yYXRlX3NldCAmIENPTkZfVFhfT0ZETV9SQVRFUykpCisJCXN1cHBvcnRlZF9yYXRlcyA9IENPTkZfVFhfT0ZETV9SQVRFUzsKKwllbHNlCisJCXN1cHBvcnRlZF9yYXRlcyA9IENPTkZfVFhfQVBfRU5BQkxFRF9SQVRFUzsKKworCS8qIGNvbmZpZ3VyZSB1bmljYXN0IFRYIHJhdGUgY2xhc3NlcyAqLworCWZvciAoaSA9IDA7IGkgPCB3bC0+Y29uZi50eC5hY19jb25mX2NvdW50OyBpKyspIHsKKwkJcmMuZW5hYmxlZF9yYXRlcyA9IHN1cHBvcnRlZF9yYXRlczsKKwkJcmMuc2hvcnRfcmV0cnlfbGltaXQgPSAxMDsKKwkJcmMubG9uZ19yZXRyeV9saW1pdCA9IDEwOworCQlyYy5hZmxhZ3MgPSAwOworCQlyZXQgPSB3bDEyNzFfYWN4X2FwX3JhdGVfcG9saWN5KHdsLCAmcmMsIGkpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTUwNCw2ICs1NTgsMjcgQEAKIAlyZXR1cm4gcmV0OwogfQogCitpbnQgd2wxMjcxX2NoaXBfc3BlY2lmaWNfaW5pdChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmICh3bC0+Y2hpcC5pZCA9PSBDSElQX0lEXzEyODNfUEcyMCkgeworCQl1MzIgaG9zdF9jZmdfYml0bWFwID0gSE9TVF9JRl9DRkdfUlhfRklGT19FTkFCTEU7CisKKwkJaWYgKHdsLT5xdWlya3MgJiBXTDEyWFhfUVVJUktfQkxPQ0tTSVpFX0FMSUdOTUVOVCkKKwkJCS8qIEVuYWJsZSBTRElPIHBhZGRpbmcgKi8KKwkJCWhvc3RfY2ZnX2JpdG1hcCB8PSBIT1NUX0lGX0NGR19UWF9QQURfVE9fU0RJT19CTEs7CisKKwkJLyogTXVzdCBiZSBiZWZvcmUgd2wxMjcxX2FjeF9pbml0X21lbV9jb25maWcoKSAqLworCQlyZXQgPSB3bDEyNzFfYWN4X2hvc3RfaWZfY2ZnX2JpdG1hcCh3bCwgaG9zdF9jZmdfYml0bWFwKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKwl9CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworCiBpbnQgd2wxMjcxX2h3X2luaXQoc3RydWN0IHdsMTI3MSAqd2wpCiB7CiAJc3RydWN0IGNvbmZfdHhfYWNfY2F0ZWdvcnkgKmNvbmZfYWM7CkBAIC01MTEsMTEgKzU4NiwyMiBAQAogCWludCByZXQsIGk7CiAJYm9vbCBpc19hcCA9ICh3bC0+YnNzX3R5cGUgPT0gQlNTX1RZUEVfQVBfQlNTKTsKIAotCXJldCA9IHdsMTI3MV9jbWRfZ2VuZXJhbF9wYXJtcyh3bCk7CisJaWYgKHdsLT5jaGlwLmlkID09IENISVBfSURfMTI4M19QRzIwKQorCQlyZXQgPSB3bDEyOHhfY21kX2dlbmVyYWxfcGFybXMod2wpOworCWVsc2UKKwkJcmV0ID0gd2wxMjcxX2NtZF9nZW5lcmFsX3Bhcm1zKHdsKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IHdsMTI3MV9jbWRfcmFkaW9fcGFybXMod2wpOworCWlmICh3bC0+Y2hpcC5pZCA9PSBDSElQX0lEXzEyODNfUEcyMCkKKwkJcmV0ID0gd2wxMjh4X2NtZF9yYWRpb19wYXJtcyh3bCk7CisJZWxzZQorCQlyZXQgPSB3bDEyNzFfY21kX3JhZGlvX3Bhcm1zKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIENoaXAtc3BlY2lmaWMgaW5pdCAqLworCXJldCA9IHdsMTI3MV9jaGlwX3NwZWNpZmljX2luaXQod2wpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC01MjgsNiArNjE0LDExIEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKKwkvKiBCbHVldG9vdGggV0xBTiBjb2V4aXN0ZW5jZSAqLworCXJldCA9IHdsMTI3MV9pbml0X3B0YSh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKIAkvKiBEZWZhdWx0IG1lbW9yeSBjb25maWd1cmF0aW9uICovCiAJcmV0ID0gd2wxMjcxX2FjeF9pbml0X21lbV9jb25maWcod2wpOwogCWlmIChyZXQgPCAwKQpAQCAtNTY3LDcgKzY1OCw3IEBACiAJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOwogCiAJLyogRGVmYXVsdCBmcmFnbWVudGF0aW9uIHRocmVzaG9sZCAqLwotCXJldCA9IHdsMTI3MV9hY3hfZnJhZ190aHJlc2hvbGQod2wsIHdsLT5jb25mLnR4LmZyYWdfdGhyZXNob2xkKTsKKwlyZXQgPSB3bDEyNzFfYWN4X2ZyYWdfdGhyZXNob2xkKHdsLCB3bC0+aHctPndpcGh5LT5mcmFnX3RocmVzaG9sZCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvaW5pdC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2luaXQuaAppbmRleCAzYThiZDNmLi4zYTNjMjMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvaW5pdC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9pbml0LmgKQEAgLTMxLDYgKzMxLDkgQEAKIGludCB3bDEyNzFfaW5pdF9waHlfY29uZmlnKHN0cnVjdCB3bDEyNzEgKndsKTsKIGludCB3bDEyNzFfaW5pdF9wdGEoc3RydWN0IHdsMTI3MSAqd2wpOwogaW50IHdsMTI3MV9pbml0X2VuZXJneV9kZXRlY3Rpb24oc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9jaGlwX3NwZWNpZmljX2luaXQoc3RydWN0IHdsMTI3MSAqd2wpOwogaW50IHdsMTI3MV9od19pbml0KHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfaW5pdF9hcF9yYXRlcyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX2FwX2luaXRfdGVtcGxhdGVzKHN0cnVjdCB3bDEyNzEgKndsKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9pby5jCmluZGV4IGQ1NTdmNzMuLmRhNWMxYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9pby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9pby5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAid2wxMnh4LmgiCiAjaW5jbHVkZSAid2wxMnh4XzgwMjExLmgiCiAjaW5jbHVkZSAiaW8uaCIKKyNpbmNsdWRlICJ0eC5oIgogCiAjZGVmaW5lIE9DUF9DTURfTE9PUCAgMzIKIApAQCAtNDMsNiArNDQsMTYgQEAKICNkZWZpbmUgT0NQX1NUQVRVU19SRVFfRkFJTEVEIDB4MjAwMDAKICNkZWZpbmUgT0NQX1NUQVRVU19SRVNQX0VSUk9SIDB4MzAwMDAKIAorYm9vbCB3bDEyNzFfc2V0X2Jsb2NrX3NpemUoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJaWYgKHdsLT5pZl9vcHMtPnNldF9ibG9ja19zaXplKSB7CisJCXdsLT5pZl9vcHMtPnNldF9ibG9ja19zaXplKHdsLCBXTDEyWFhfQlVTX0JMT0NLX1NJWkUpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgd2wxMjcxX2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3Qgd2wxMjcxICp3bCkKIHsKIAl3bC0+aWZfb3BzLT5kaXNhYmxlX2lycSh3bCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9pby5oCmluZGV4IDAwYzc3MWUuLmJlZWQ2MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9pby5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9pby5oCkBAIC0xNjksNSArMTY5LDggQEAKIHN0cnVjdCBpZWVlODAyMTFfaHcgKndsMTI3MV9hbGxvY19odyh2b2lkKTsKIGludCB3bDEyNzFfZnJlZV9odyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CiBpcnFyZXR1cm5fdCB3bDEyNzFfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpOworYm9vbCB3bDEyNzFfc2V0X2Jsb2NrX3NpemUoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV90eF9kdW1teV9wYWNrZXQoc3RydWN0IHdsMTI3MSAqd2wpOwordm9pZCB3bDEyNzFfY29uZmlndXJlX2ZpbHRlcnMoc3RydWN0IHdsMTI3MSAqd2wsIHVuc2lnbmVkIGludCBmaWx0ZXJzKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L21haW4uYwppbmRleCA4YjNjOGQxLi5iYzAwZTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9tYWluLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3dsMTJ4eC5oPgogCiAjaW5jbHVkZSAid2wxMnh4LmgiCiAjaW5jbHVkZSAid2wxMnh4XzgwMjExLmgiCkBAIC01MCwxMSArNTEsMTEgQEAKIAogc3RhdGljIHN0cnVjdCBjb25mX2Rydl9zZXR0aW5ncyBkZWZhdWx0X2NvbmYgPSB7CiAJLnNnID0gewotCQkucGFyYW1zID0geworCQkuc3RhX3BhcmFtcyA9IHsKIAkJCVtDT05GX1NHX0JUX1BFUl9USFJFU0hPTERdICAgICAgICAgICAgICAgICAgPSA3NTAwLAogCQkJW0NPTkZfU0dfSFYzX01BWF9PVkVSUklERV0gICAgICAgICAgICAgICAgICA9IDAsCiAJCQlbQ09ORl9TR19CVF9ORlNfU0FNUExFX0lOVEVSVkFMXSAgICAgICAgICAgID0gNDAwLAotCQkJW0NPTkZfU0dfQlRfTE9BRF9SQVRJT10gICAgICAgICAgICAgICAgICAgICA9IDUwLAorCQkJW0NPTkZfU0dfQlRfTE9BRF9SQVRJT10gICAgICAgICAgICAgICAgICAgICA9IDIwMCwKIAkJCVtDT05GX1NHX0FVVE9fUFNfTU9ERV0gICAgICAgICAgICAgICAgICAgICAgPSAxLAogCQkJW0NPTkZfU0dfQVVUT19TQ0FOX1BST0JFX1JFUV0gICAgICAgICAgICAgICA9IDE3MCwKIAkJCVtDT05GX1NHX0FDVElWRV9TQ0FOX0RVUkFUSU9OX0ZBQ1RPUl9IVjNdICAgPSA1MCwKQEAgLTEwMCw2ICsxMDEsNjEgQEAKIAkJCVtDT05GX1NHX0RIQ1BfVElNRV0gICAgICAgICAgICAgICAgICAgICAgICAgPSA1MDAwLAogCQkJW0NPTkZfU0dfQUNUSVZFX1NDQU5fRFVSQVRJT05fRkFDVE9SX0EyRFBdICA9IDEwMCwKIAkJfSwKKwkJLmFwX3BhcmFtcyA9IHsKKwkJCVtDT05GX1NHX0JUX1BFUl9USFJFU0hPTERdICAgICAgICAgICAgICAgICAgPSA3NTAwLAorCQkJW0NPTkZfU0dfSFYzX01BWF9PVkVSUklERV0gICAgICAgICAgICAgICAgICA9IDAsCisJCQlbQ09ORl9TR19CVF9ORlNfU0FNUExFX0lOVEVSVkFMXSAgICAgICAgICAgID0gNDAwLAorCQkJW0NPTkZfU0dfQlRfTE9BRF9SQVRJT10gICAgICAgICAgICAgICAgICAgICA9IDUwLAorCQkJW0NPTkZfU0dfQVVUT19QU19NT0RFXSAgICAgICAgICAgICAgICAgICAgICA9IDEsCisJCQlbQ09ORl9TR19BVVRPX1NDQU5fUFJPQkVfUkVRXSAgICAgICAgICAgICAgID0gMTcwLAorCQkJW0NPTkZfU0dfQUNUSVZFX1NDQU5fRFVSQVRJT05fRkFDVE9SX0hWM10gICA9IDUwLAorCQkJW0NPTkZfU0dfQU5URU5OQV9DT05GSUdVUkFUSU9OXSAgICAgICAgICAgICA9IDAsCisJCQlbQ09ORl9TR19CRUFDT05fTUlTU19QRVJDRU5UXSAgICAgICAgICAgICAgID0gNjAsCisJCQlbQ09ORl9TR19SQVRFX0FEQVBUX1RIUkVTSF0gICAgICAgICAgICAgICAgID0gNjQsCisJCQlbQ09ORl9TR19SQVRFX0FEQVBUX1NOUl0gICAgICAgICAgICAgICAgICAgID0gMSwKKwkJCVtDT05GX1NHX1dMQU5fUFNfQlRfQUNMX01BU1RFUl9NSU5fQlJdICAgICAgPSAxMCwKKwkJCVtDT05GX1NHX1dMQU5fUFNfQlRfQUNMX01BU1RFUl9NQVhfQlJdICAgICAgPSAyNSwKKwkJCVtDT05GX1NHX1dMQU5fUFNfTUFYX0JUX0FDTF9NQVNURVJfQlJdICAgICAgPSAyNSwKKwkJCVtDT05GX1NHX1dMQU5fUFNfQlRfQUNMX1NMQVZFX01JTl9CUl0gICAgICAgPSAyMCwKKwkJCVtDT05GX1NHX1dMQU5fUFNfQlRfQUNMX1NMQVZFX01BWF9CUl0gICAgICAgPSAyNSwKKwkJCVtDT05GX1NHX1dMQU5fUFNfTUFYX0JUX0FDTF9TTEFWRV9CUl0gICAgICAgPSAyNSwKKwkJCVtDT05GX1NHX1dMQU5fUFNfQlRfQUNMX01BU1RFUl9NSU5fRURSXSAgICAgPSA3LAorCQkJW0NPTkZfU0dfV0xBTl9QU19CVF9BQ0xfTUFTVEVSX01BWF9FRFJdICAgICA9IDI1LAorCQkJW0NPTkZfU0dfV0xBTl9QU19NQVhfQlRfQUNMX01BU1RFUl9FRFJdICAgICA9IDI1LAorCQkJW0NPTkZfU0dfV0xBTl9QU19CVF9BQ0xfU0xBVkVfTUlOX0VEUl0gICAgICA9IDgsCisJCQlbQ09ORl9TR19XTEFOX1BTX0JUX0FDTF9TTEFWRV9NQVhfRURSXSAgICAgID0gMjUsCisJCQlbQ09ORl9TR19XTEFOX1BTX01BWF9CVF9BQ0xfU0xBVkVfRURSXSAgICAgID0gMjUsCisJCQlbQ09ORl9TR19SWFRdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMTIwMCwKKwkJCVtDT05GX1NHX1RYVF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxMDAwLAorCQkJW0NPTkZfU0dfQURBUFRJVkVfUlhUX1RYVF0gICAgICAgICAgICAgICAgICA9IDEsCisJCQlbQ09ORl9TR19QU19QT0xMX1RJTUVPVVRdICAgICAgICAgICAgICAgICAgID0gMTAsCisJCQlbQ09ORl9TR19VUFNEX1RJTUVPVVRdICAgICAgICAgICAgICAgICAgICAgID0gMTAsCisJCQlbQ09ORl9TR19XTEFOX0FDVElWRV9CVF9BQ0xfTUFTVEVSX01JTl9FRFJdID0gNywKKwkJCVtDT05GX1NHX1dMQU5fQUNUSVZFX0JUX0FDTF9NQVNURVJfTUFYX0VEUl0gPSAxNSwKKwkJCVtDT05GX1NHX1dMQU5fQUNUSVZFX01BWF9CVF9BQ0xfTUFTVEVSX0VEUl0gPSAxNSwKKwkJCVtDT05GX1NHX1dMQU5fQUNUSVZFX0JUX0FDTF9TTEFWRV9NSU5fRURSXSAgPSA4LAorCQkJW0NPTkZfU0dfV0xBTl9BQ1RJVkVfQlRfQUNMX1NMQVZFX01BWF9FRFJdICA9IDIwLAorCQkJW0NPTkZfU0dfV0xBTl9BQ1RJVkVfTUFYX0JUX0FDTF9TTEFWRV9FRFJdICA9IDE1LAorCQkJW0NPTkZfU0dfV0xBTl9BQ1RJVkVfQlRfQUNMX01JTl9CUl0gICAgICAgICA9IDIwLAorCQkJW0NPTkZfU0dfV0xBTl9BQ1RJVkVfQlRfQUNMX01BWF9CUl0gICAgICAgICA9IDUwLAorCQkJW0NPTkZfU0dfV0xBTl9BQ1RJVkVfTUFYX0JUX0FDTF9CUl0gICAgICAgICA9IDEwLAorCQkJW0NPTkZfU0dfUEFTU0lWRV9TQ0FOX0RVUkFUSU9OX0ZBQ1RPUl9IVjNdICA9IDIwMCwKKwkJCVtDT05GX1NHX1BBU1NJVkVfU0NBTl9EVVJBVElPTl9GQUNUT1JfQTJEUF0gPSA4MDAsCisJCQlbQ09ORl9TR19QQVNTSVZFX1NDQU5fQTJEUF9CVF9USU1FXSAgICAgICAgID0gNzUsCisJCQlbQ09ORl9TR19QQVNTSVZFX1NDQU5fQTJEUF9XTEFOX1RJTUVdICAgICAgID0gMTUsCisJCQlbQ09ORl9TR19IVjNfTUFYX1NFUlZFRF0gICAgICAgICAgICAgICAgICAgID0gNiwKKwkJCVtDT05GX1NHX0RIQ1BfVElNRV0gICAgICAgICAgICAgICAgICAgICAgICAgPSA1MDAwLAorCQkJW0NPTkZfU0dfQUNUSVZFX1NDQU5fRFVSQVRJT05fRkFDVE9SX0EyRFBdICA9IDEwMCwKKwkJCVtDT05GX1NHX1RFTVBfUEFSQU1fMV0gICAgICAgICAgICAgICAgICAgICAgPSAwLAorCQkJW0NPTkZfU0dfVEVNUF9QQVJBTV8yXSAgICAgICAgICAgICAgICAgICAgICA9IDAsCisJCQlbQ09ORl9TR19URU1QX1BBUkFNXzNdICAgICAgICAgICAgICAgICAgICAgID0gMCwKKwkJCVtDT05GX1NHX1RFTVBfUEFSQU1fNF0gICAgICAgICAgICAgICAgICAgICAgPSAwLAorCQkJW0NPTkZfU0dfVEVNUF9QQVJBTV81XSAgICAgICAgICAgICAgICAgICAgICA9IDAsCisJCQlbQ09ORl9TR19BUF9CRUFDT05fTUlTU19UWF0gICAgICAgICAgICAgICAgID0gMywKKwkJCVtDT05GX1NHX1JYX1dJTkRPV19MRU5HVEhdICAgICAgICAgICAgICAgICAgPSA2LAorCQkJW0NPTkZfU0dfQVBfQ09OTkVDVElPTl9QUk9URUNUSU9OX1RJTUVdICAgICA9IDUwLAorCQkJW0NPTkZfU0dfVEVNUF9QQVJBTV82XSAgICAgICAgICAgICAgICAgICAgICA9IDEsCisJCX0sCiAJCS5zdGF0ZSA9IENPTkZfU0dfUFJPVEVDVElWRSwKIAl9LAogCS5yeCA9IHsKQEAgLTEwNyw3ICsxNjMsNyBAQAogCQkucGFja2V0X2RldGVjdGlvbl90aHJlc2hvbGQgID0gMCwKIAkJLnBzX3BvbGxfdGltZW91dCAgICAgICAgICAgICA9IDE1LAogCQkudXBzZF90aW1lb3V0ICAgICAgICAgICAgICAgID0gMTUsCi0JCS5ydHNfdGhyZXNob2xkICAgICAgICAgICAgICAgPSAyMzQ3LAorCQkucnRzX3RocmVzaG9sZCAgICAgICAgICAgICAgID0gSUVFRTgwMjExX01BWF9SVFNfVEhSRVNIT0xELAogCQkucnhfY2NhX3RocmVzaG9sZCAgICAgICAgICAgID0gMCwKIAkJLmlycV9ibGtfdGhyZXNob2xkICAgICAgICAgICA9IDB4RkZGRiwKIAkJLmlycV9wa3RfdGhyZXNob2xkICAgICAgICAgICA9IDAsCkBAIC0xNTMsNDQgKzIwOSw2IEBACiAJCQkJLnR4X29wX2xpbWl0ID0gMTUwNCwKIAkJCX0sCiAJCX0sCi0JCS5hcF9yY19jb25mICAgICAgICAgICAgICAgICAgPSB7Ci0JCQlbMF0gPSB7Ci0JCQkJLmVuYWJsZWRfcmF0ZXMgPSBDT05GX1RYX0FQX0VOQUJMRURfUkFURVMsCi0JCQkJLnNob3J0X3JldHJ5X2xpbWl0ID0gMTAsCi0JCQkJLmxvbmdfcmV0cnlfbGltaXQgPSAxMCwKLQkJCQkuYWZsYWdzICAgICAgPSAwLAotCQkJfSwKLQkJCVsxXSA9IHsKLQkJCQkuZW5hYmxlZF9yYXRlcyA9IENPTkZfVFhfQVBfRU5BQkxFRF9SQVRFUywKLQkJCQkuc2hvcnRfcmV0cnlfbGltaXQgPSAxMCwKLQkJCQkubG9uZ19yZXRyeV9saW1pdCA9IDEwLAotCQkJCS5hZmxhZ3MgICAgICA9IDAsCi0JCQl9LAotCQkJWzJdID0gewotCQkJCS5lbmFibGVkX3JhdGVzID0gQ09ORl9UWF9BUF9FTkFCTEVEX1JBVEVTLAotCQkJCS5zaG9ydF9yZXRyeV9saW1pdCA9IDEwLAotCQkJCS5sb25nX3JldHJ5X2xpbWl0ID0gMTAsCi0JCQkJLmFmbGFncyAgICAgID0gMCwKLQkJCX0sCi0JCQlbM10gPSB7Ci0JCQkJLmVuYWJsZWRfcmF0ZXMgPSBDT05GX1RYX0FQX0VOQUJMRURfUkFURVMsCi0JCQkJLnNob3J0X3JldHJ5X2xpbWl0ID0gMTAsCi0JCQkJLmxvbmdfcmV0cnlfbGltaXQgPSAxMCwKLQkJCQkuYWZsYWdzICAgICAgPSAwLAotCQkJfSwKLQkJfSwKLQkJLmFwX21nbXRfY29uZiA9IHsKLQkJCS5lbmFibGVkX3JhdGVzICAgICAgID0gQ09ORl9UWF9BUF9ERUZBVUxUX01HTVRfUkFURVMsCi0JCQkuc2hvcnRfcmV0cnlfbGltaXQgICA9IDEwLAotCQkJLmxvbmdfcmV0cnlfbGltaXQgICAgPSAxMCwKLQkJCS5hZmxhZ3MgICAgICAgICAgICAgID0gMCwKLQkJfSwKLQkJLmFwX2Jjc3RfY29uZiA9IHsKLQkJCS5lbmFibGVkX3JhdGVzICAgICAgID0gQ09ORl9IV19CSVRfUkFURV8xTUJQUywKLQkJCS5zaG9ydF9yZXRyeV9saW1pdCAgID0gMTAsCi0JCQkubG9uZ19yZXRyeV9saW1pdCAgICA9IDEwLAotCQkJLmFmbGFncyAgICAgICAgICAgICAgPSAwLAotCQl9LAogCQkuYXBfbWF4X3R4X3JldHJpZXMgPSAxMDAsCiAJCS50aWRfY29uZl9jb3VudCA9IDQsCiAJCS50aWRfY29uZiA9IHsKQEAgLTIzOSwxMiArMjU3LDE2IEBACiAJCS53YWtlX3VwX2V2ZW50ICAgICAgICAgICAgICAgPSBDT05GX1dBS0VfVVBfRVZFTlRfRFRJTSwKIAkJLmxpc3Rlbl9pbnRlcnZhbCAgICAgICAgICAgICA9IDEsCiAJCS5iY25fZmlsdF9tb2RlICAgICAgICAgICAgICAgPSBDT05GX0JDTl9GSUxUX01PREVfRU5BQkxFRCwKLQkJLmJjbl9maWx0X2llX2NvdW50ICAgICAgICAgICA9IDEsCisJCS5iY25fZmlsdF9pZV9jb3VudCAgICAgICAgICAgPSAyLAogCQkuYmNuX2ZpbHRfaWUgPSB7CiAJCQlbMF0gPSB7CiAJCQkJLmllICAgICAgICAgID0gV0xBTl9FSURfQ0hBTk5FTF9TV0lUQ0gsCiAJCQkJLnJ1bGUgICAgICAgID0gQ09ORl9CQ05fUlVMRV9QQVNTX09OX0FQUEVBUkFOQ0UsCi0JCQl9CisJCQl9LAorCQkJWzFdID0geworCQkJCS5pZSAgICAgICAgICA9IFdMQU5fRUlEX0hUX0lORk9STUFUSU9OLAorCQkJCS5ydWxlICAgICAgICA9IENPTkZfQkNOX1JVTEVfUEFTU19PTl9DSEFOR0UsCisJCQl9LAogCQl9LAogCQkuc3luY2hfZmFpbF90aG9sZCAgICAgICAgICAgID0gMTAsCiAJCS5ic3NfbG9zZV90aW1lb3V0ICAgICAgICAgICAgPSAxMDAsCkBAIC0yNTQsOSArMjc2LDkgQEAKIAkJLnBzX3BvbGxfdGhyZXNob2xkICAgICAgICAgICA9IDEwLAogCQkucHNfcG9sbF9yZWNvdmVyeV9wZXJpb2QgICAgID0gNzAwLAogCQkuYmV0X2VuYWJsZSAgICAgICAgICAgICAgICAgID0gQ09ORl9CRVRfTU9ERV9FTkFCTEUsCi0JCS5iZXRfbWF4X2NvbnNlY3V0aXZlICAgICAgICAgPSAxMCwKKwkJLmJldF9tYXhfY29uc2VjdXRpdmUgICAgICAgICA9IDUwLAogCQkucHNtX2VudHJ5X3JldHJpZXMgICAgICAgICAgID0gNSwKLQkJLnBzbV9leGl0X3JldHJpZXMgICAgICAgICAgICA9IDI1NSwKKwkJLnBzbV9leGl0X3JldHJpZXMgICAgICAgICAgICA9IDE2LAogCQkucHNtX2VudHJ5X251bGxmdW5jX3JldHJpZXMgID0gMywKIAkJLnBzbV9lbnRyeV9oYW5nb3Zlcl9wZXJpb2QgICA9IDEsCiAJCS5rZWVwX2FsaXZlX2ludGVydmFsICAgICAgICAgPSA1NTAwMCwKQEAgLTI4NCw2ICszMDYsMTUgQEAKIAkJLm1heF9kd2VsbF90aW1lX3Bhc3NpdmUgICAgICAgPSAxMDAwMDAsCiAJCS5udW1fcHJvYmVfcmVxcyAgICAgICAgICAgICAgID0gMiwKIAl9LAorCS5zY2hlZF9zY2FuID0geworCQkvKiBzY2hlZF9zY2FuIHJlcXVpcmVzIGR3ZWxsIHRpbWVzIGluIFRVIGluc3RlYWQgb2YgVFUvMTAwMCAqLworCQkubWluX2R3ZWxsX3RpbWVfYWN0aXZlID0gOCwKKwkJLm1heF9kd2VsbF90aW1lX2FjdGl2ZSA9IDMwLAorCQkuZHdlbGxfdGltZV9wYXNzaXZlICAgID0gMTAwLAorCQkubnVtX3Byb2JlX3JlcXMgICAgICAgID0gMiwKKwkJLnJzc2lfdGhyZXNob2xkICAgICAgICA9IC05MCwKKwkJLnNucl90aHJlc2hvbGQgICAgICAgICA9IDAsCisJfSwKIAkucmYgPSB7CiAJCS50eF9wZXJfY2hhbm5lbF9wb3dlcl9jb21wZW5zYXRpb25fMiA9IHsKIAkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCkBAIC0yOTgsMTkgKzMyOSw0MyBAQAogCQkudHhfYmFfd2luX3NpemUgPSA2NCwKIAkJLmluYWN0aXZpdHlfdGltZW91dCA9IDEwMDAwLAogCX0sCi0JLm1lbSA9IHsKKwkubWVtX3dsMTI3eCA9IHsKIAkJLm51bV9zdGF0aW9ucyAgICAgICAgICAgICAgICAgPSAxLAogCQkuc3NpZF9wcm9maWxlcyAgICAgICAgICAgICAgICA9IDEsCiAJCS5yeF9ibG9ja19udW0gICAgICAgICAgICAgICAgID0gNzAsCiAJCS50eF9taW5fYmxvY2tfbnVtICAgICAgICAgICAgID0gNDAsCi0JCS5keW5hbWljX21lbW9yeSAgICAgICAgICAgICAgID0gMCwKKwkJLmR5bmFtaWNfbWVtb3J5ICAgICAgICAgICAgICAgPSAxLAogCQkubWluX3JlcV90eF9ibG9ja3MgICAgICAgICAgICA9IDEwMCwKIAkJLm1pbl9yZXFfcnhfYmxvY2tzICAgICAgICAgICAgPSAyMiwKIAkJLnR4X21pbiAgICAgICAgICAgICAgICAgICAgICAgPSAyNywKLQl9CisJfSwKKwkubWVtX3dsMTI4eCA9IHsKKwkJLm51bV9zdGF0aW9ucyAgICAgICAgICAgICAgICAgPSAxLAorCQkuc3NpZF9wcm9maWxlcyAgICAgICAgICAgICAgICA9IDEsCisJCS5yeF9ibG9ja19udW0gICAgICAgICAgICAgICAgID0gNDAsCisJCS50eF9taW5fYmxvY2tfbnVtICAgICAgICAgICAgID0gNDAsCisJCS5keW5hbWljX21lbW9yeSAgICAgICAgICAgICAgID0gMSwKKwkJLm1pbl9yZXFfdHhfYmxvY2tzICAgICAgICAgICAgPSA0NSwKKwkJLm1pbl9yZXFfcnhfYmxvY2tzICAgICAgICAgICAgPSAyMiwKKwkJLnR4X21pbiAgICAgICAgICAgICAgICAgICAgICAgPSAyNywKKwl9LAorCS5mbV9jb2V4ID0geworCQkuZW5hYmxlICAgICAgICAgICAgICAgICAgICAgICA9IHRydWUsCisJCS5zd2FsbG93X3BlcmlvZCAgICAgICAgICAgICAgID0gNSwKKwkJLm5fZGl2aWRlcl9mcmVmX3NldF8xICAgICAgICAgPSAweGZmLCAgICAgICAvKiBkZWZhdWx0ICovCisJCS5uX2RpdmlkZXJfZnJlZl9zZXRfMiAgICAgICAgID0gMTIsCisJCS5tX2RpdmlkZXJfZnJlZl9zZXRfMSAgICAgICAgID0gMTQ4LAorCQkubV9kaXZpZGVyX2ZyZWZfc2V0XzIgICAgICAgICA9IDB4ZmZmZiwgICAgIC8qIGRlZmF1bHQgKi8KKwkJLmNvZXhfcGxsX3N0YWJpbGl6YXRpb25fdGltZSAgPSAweGZmZmZmZmZmLCAvKiBkZWZhdWx0ICovCisJCS5sZG9fc3RhYmlsaXphdGlvbl90aW1lICAgICAgID0gMHhmZmZmLCAgICAgLyogZGVmYXVsdCAqLworCQkuZm1fZGlzdHVyYmVkX2JhbmRfbWFyZ2luICAgICA9IDB4ZmYsICAgICAgIC8qIGRlZmF1bHQgKi8KKwkJLnN3YWxsb3dfY2xrX2RpZmYgICAgICAgICAgICAgPSAweGZmLCAgICAgICAvKiBkZWZhdWx0ICovCisJfSwKKwkuaGNpX2lvX2RzID0gSENJX0lPX0RTXzZNQSwKIH07CiAKLXN0YXRpYyB2b2lkIF9fd2wxMjcxX29wX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IHdsMTI3MSAqd2wpOworc3RhdGljIHZvaWQgX193bDEyNzFfb3BfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3Qgd2wxMjcxICp3bCwKKwkJCQkJIGJvb2wgcmVzZXRfdHhfcXVldWVzKTsKIHN0YXRpYyB2b2lkIHdsMTI3MV9mcmVlX2FwX2tleXMoc3RydWN0IHdsMTI3MSAqd2wpOwogCiAKQEAgLTMyOSw2ICszODQsNyBAQAogCX0sCiB9OwogCitzdGF0aWMgREVGSU5FX01VVEVYKHdsX2xpc3RfbXV0ZXgpOwogc3RhdGljIExJU1RfSEVBRCh3bF9saXN0KTsKIAogc3RhdGljIGludCB3bDEyNzFfZGV2X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm1lLCB1bnNpZ25lZCBsb25nIHdoYXQsCkBAIC0zNTksMTAgKzQxNSwxMiBAQAogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKIAl3bF90ZW1wID0gaHctPnByaXY7CisJbXV0ZXhfbG9jaygmd2xfbGlzdF9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh3bCwgJndsX2xpc3QsIGxpc3QpIHsKIAkJaWYgKHdsID09IHdsX3RlbXApCiAJCQlicmVhazsKIAl9CisJbXV0ZXhfdW5sb2NrKCZ3bF9saXN0X211dGV4KTsKIAlpZiAod2wgIT0gd2xfdGVtcCkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCkBAIC00MzgsMTUgKzQ5NiwzMCBAQAogCXN0cnVjdCBjb25mX3R4X3RpZCAqY29uZl90aWQ7CiAJaW50IHJldCwgaTsKIAotCXJldCA9IHdsMTI3MV9jbWRfZ2VuZXJhbF9wYXJtcyh3bCk7CisJaWYgKHdsLT5jaGlwLmlkID09IENISVBfSURfMTI4M19QRzIwKQorCQlyZXQgPSB3bDEyOHhfY21kX2dlbmVyYWxfcGFybXMod2wpOworCWVsc2UKKwkJcmV0ID0gd2wxMjcxX2NtZF9nZW5lcmFsX3Bhcm1zKHdsKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IHdsMTI3MV9jbWRfcmFkaW9fcGFybXMod2wpOworCWlmICh3bC0+Y2hpcC5pZCA9PSBDSElQX0lEXzEyODNfUEcyMCkKKwkJcmV0ID0gd2wxMjh4X2NtZF9yYWRpb19wYXJtcyh3bCk7CisJZWxzZQorCQlyZXQgPSB3bDEyNzFfY21kX3JhZGlvX3Bhcm1zKHdsKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IHdsMTI3MV9jbWRfZXh0X3JhZGlvX3Bhcm1zKHdsKTsKKwlpZiAod2wtPmNoaXAuaWQgIT0gQ0hJUF9JRF8xMjgzX1BHMjApIHsKKwkJcmV0ID0gd2wxMjcxX2NtZF9leHRfcmFkaW9fcGFybXMod2wpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogQ2hpcC1zcGVjaWZpYyBpbml0aWFsaXphdGlvbnMgKi8KKwlyZXQgPSB3bDEyNzFfY2hpcF9zcGVjaWZpY19pbml0KHdsKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtNDc3LDYgKzU1MCwxMSBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKIAorCS8qIEZNIFdMQU4gY29leGlzdGVuY2UgKi8KKwlyZXQgPSB3bDEyNzFfYWN4X2ZtX2NvZXgod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKKwogCS8qIEVuZXJneSBkZXRlY3Rpb24gKi8KIAlyZXQgPSB3bDEyNzFfaW5pdF9lbmVyZ3lfZGV0ZWN0aW9uKHdsKTsKIAlpZiAocmV0IDwgMCkKQEAgLTU5MywxNSArNjcxLDE3IEBACiB7CiAJc3RydWN0IHdsMTI3MV9md19jb21tb25fc3RhdHVzICpzdGF0dXMgPSAmZnVsbF9zdGF0dXMtPmNvbW1vbjsKIAlzdHJ1Y3QgdGltZXNwZWMgdHM7Ci0JdTMyIHRvdGFsID0gMDsKKwl1MzIgb2xkX3R4X2Jsa19jb3VudCA9IHdsLT50eF9ibG9ja3NfYXZhaWxhYmxlOworCXUzMiBmcmVlZF9ibG9ja3MgPSAwOwogCWludCBpOwogCi0JaWYgKHdsLT5ic3NfdHlwZSA9PSBCU1NfVFlQRV9BUF9CU1MpCisJaWYgKHdsLT5ic3NfdHlwZSA9PSBCU1NfVFlQRV9BUF9CU1MpIHsKIAkJd2wxMjcxX3Jhd19yZWFkKHdsLCBGV19TVEFUVVNfQUREUiwgc3RhdHVzLAogCQkJCXNpemVvZihzdHJ1Y3Qgd2wxMjcxX2Z3X2FwX3N0YXR1cyksIGZhbHNlKTsKLQllbHNlCisJfSBlbHNlIHsKIAkJd2wxMjcxX3Jhd19yZWFkKHdsLCBGV19TVEFUVVNfQUREUiwgc3RhdHVzLAogCQkJCXNpemVvZihzdHJ1Y3Qgd2wxMjcxX2Z3X3N0YV9zdGF0dXMpLCBmYWxzZSk7CisJfQogCiAJd2wxMjcxX2RlYnVnKERFQlVHX0lSUSwgImludHI6IDB4JXggKGZ3X3J4X2NvdW50ZXIgPSAlZCwgIgogCQkgICAgICJkcnZfcnhfY291bnRlciA9ICVkLCB0eF9yZXN1bHRzX2NvdW50ZXIgPSAlZCkiLApAQCAtNjEyLDIzICs2OTIsMzggQEAKIAogCS8qIHVwZGF0ZSBudW1iZXIgb2YgYXZhaWxhYmxlIFRYIGJsb2NrcyAqLwogCWZvciAoaSA9IDA7IGkgPCBOVU1fVFhfUVVFVUVTOyBpKyspIHsKLQkJdTMyIGNudCA9IGxlMzJfdG9fY3B1KHN0YXR1cy0+dHhfcmVsZWFzZWRfYmxrc1tpXSkgLQotCQkJd2wtPnR4X2Jsb2Nrc19mcmVlZFtpXTsKKwkJZnJlZWRfYmxvY2tzICs9IGxlMzJfdG9fY3B1KHN0YXR1cy0+dHhfcmVsZWFzZWRfYmxrc1tpXSkgLQorCQkJCXdsLT50eF9ibG9ja3NfZnJlZWRbaV07CiAKIAkJd2wtPnR4X2Jsb2Nrc19mcmVlZFtpXSA9CiAJCQlsZTMyX3RvX2NwdShzdGF0dXMtPnR4X3JlbGVhc2VkX2Jsa3NbaV0pOwotCQl3bC0+dHhfYmxvY2tzX2F2YWlsYWJsZSArPSBjbnQ7Ci0JCXRvdGFsICs9IGNudDsKKwl9CisKKwl3bC0+dHhfYWxsb2NhdGVkX2Jsb2NrcyAtPSBmcmVlZF9ibG9ja3M7CisKKwlpZiAod2wtPmJzc190eXBlID09IEJTU19UWVBFX0FQX0JTUykgeworCQkvKiBVcGRhdGUgbnVtIG9mIGFsbG9jYXRlZCBUWCBibG9ja3MgcGVyIGxpbmsgYW5kIHBzIHN0YXR1cyAqLworCQl3bDEyNzFfaXJxX3VwZGF0ZV9saW5rc19zdGF0dXMod2wsICZmdWxsX3N0YXR1cy0+YXApOworCQl3bC0+dHhfYmxvY2tzX2F2YWlsYWJsZSArPSBmcmVlZF9ibG9ja3M7CisJfSBlbHNlIHsKKwkJaW50IGF2YWlsID0gZnVsbF9zdGF0dXMtPnN0YS50eF90b3RhbCAtIHdsLT50eF9hbGxvY2F0ZWRfYmxvY2tzOworCisJCS8qCisJCSAqIFRoZSBGVyBtaWdodCBjaGFuZ2UgdGhlIHRvdGFsIG51bWJlciBvZiBUWCBtZW1ibG9ja3MgYmVmb3JlCisJCSAqIHdlIGdldCBhIG5vdGlmaWNhdGlvbiBhYm91dCBibG9ja3MgYmVpbmcgcmVsZWFzZWQuIFRodXMsIHRoZQorCQkgKiBhdmFpbGFibGUgYmxvY2tzIGNhbGN1bGF0aW9uIG1pZ2h0IHlpZWxkIGEgdGVtcG9yYXJ5IHJlc3VsdAorCQkgKiB3aGljaCBpcyBsb3dlciB0aGFuIHRoZSBhY3R1YWwgYXZhaWxhYmxlIGJsb2Nrcy4gS2VlcGluZyBpbgorCQkgKiBtaW5kIHRoYXQgb25seSBibG9ja3MgdGhhdCB3ZXJlIGFsbG9jYXRlZCBjYW4gYmUgbW92ZWQgZnJvbQorCQkgKiBUWCB0byBSWCwgdHhfYmxvY2tzX2F2YWlsYWJsZSBzaG91bGQgbmV2ZXIgZGVjcmVhc2UgaGVyZS4KKwkJICovCisJCXdsLT50eF9ibG9ja3NfYXZhaWxhYmxlID0gbWF4KChpbnQpd2wtPnR4X2Jsb2Nrc19hdmFpbGFibGUsCisJCQkJCSAgICAgIGF2YWlsKTsKIAl9CiAKIAkvKiBpZiBtb3JlIGJsb2NrcyBhcmUgYXZhaWxhYmxlIG5vdywgdHggd29yayBjYW4gYmUgc2NoZWR1bGVkICovCi0JaWYgKHRvdGFsKQorCWlmICh3bC0+dHhfYmxvY2tzX2F2YWlsYWJsZSA+IG9sZF90eF9ibGtfY291bnQpCiAJCWNsZWFyX2JpdChXTDEyNzFfRkxBR19GV19UWF9CVVNZLCAmd2wtPmZsYWdzKTsKIAotCS8qIGZvciBBUCB1cGRhdGUgbnVtIG9mIGFsbG9jYXRlZCBUWCBibG9ja3MgcGVyIGxpbmsgYW5kIHBzIHN0YXR1cyAqLwotCWlmICh3bC0+YnNzX3R5cGUgPT0gQlNTX1RZUEVfQVBfQlNTKQotCQl3bDEyNzFfaXJxX3VwZGF0ZV9saW5rc19zdGF0dXMod2wsICZmdWxsX3N0YXR1cy0+YXApOwotCiAJLyogdXBkYXRlIHRoZSBob3N0LWNoaXBzZXQgdGltZSBvZmZzZXQgKi8KIAlnZXRuc3RpbWVvZmRheSgmdHMpOwogCXdsLT50aW1lX29mZnNldCA9ICh0aW1lc3BlY190b19ucygmdHMpID4+IDEwKSAtCkBAIC02NzQsNiArNzY5LDEzIEBACiAJc2V0X2JpdChXTDEyNzFfRkxBR19UWF9QRU5ESU5HLCAmd2wtPmZsYWdzKTsKIAljYW5jZWxfd29ya19zeW5jKCZ3bC0+dHhfd29yayk7CiAKKwkvKgorCSAqIEluIGNhc2UgZWRnZSB0cmlnZ2VyZWQgaW50ZXJydXB0IG11c3QgYmUgdXNlZCwgd2UgY2Fubm90IGl0ZXJhdGUKKwkgKiBtb3JlIHRoYW4gb25jZSB3aXRob3V0IGludHJvZHVjaW5nIHJhY2UgY29uZGl0aW9ucyB3aXRoIHRoZSBoYXJkaXJxLgorCSAqLworCWlmICh3bC0+cGxhdGZvcm1fcXVpcmtzICYgV0wxMlhYX1BMQVRGT1JNX1FVSVJLX0VER0VfSVJRKQorCQlsb29wY291bnQgPSAxOworCiAJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKIAogCXdsMTI3MV9kZWJ1ZyhERUJVR19JUlEsICJJUlEgd29yayIpOwpAQCAtNzg1LDExICs4ODcsMTcgQEAKIAogCXN3aXRjaCAod2wtPmJzc190eXBlKSB7CiAJY2FzZSBCU1NfVFlQRV9BUF9CU1M6Ci0JCWZ3X25hbWUgPSBXTDEyNzFfQVBfRldfTkFNRTsKKwkJaWYgKHdsLT5jaGlwLmlkID09IENISVBfSURfMTI4M19QRzIwKQorCQkJZndfbmFtZSA9IFdMMTI4WF9BUF9GV19OQU1FOworCQllbHNlCisJCQlmd19uYW1lID0gV0wxMjdYX0FQX0ZXX05BTUU7CiAJCWJyZWFrOwogCWNhc2UgQlNTX1RZUEVfSUJTUzoKIAljYXNlIEJTU19UWVBFX1NUQV9CU1M6Ci0JCWZ3X25hbWUgPSBXTDEyNzFfRldfTkFNRTsKKwkJaWYgKHdsLT5jaGlwLmlkID09IENISVBfSURfMTI4M19QRzIwKQorCQkJZndfbmFtZSA9IFdMMTI4WF9GV19OQU1FOworCQllbHNlCisJCQlmd19uYW1lCT0gV0wxMjcxX0ZXX05BTUU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXdsMTI3MV9lcnJvcigibm8gY29tcGF0aWJsZSBmaXJtd2FyZSBmb3IgYnNzX3R5cGUgJWQiLApAQCAtODM4LDE0ICs5NDYsMTQgQEAKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwogCWludCByZXQ7CiAKLQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgV0wxMjcxX05WU19OQU1FLCB3bDEyNzFfd2xfdG9fZGV2KHdsKSk7CisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIFdMMTJYWF9OVlNfTkFNRSwgd2wxMjcxX3dsX3RvX2Rldih3bCkpOwogCiAJaWYgKHJldCA8IDApIHsKIAkJd2wxMjcxX2Vycm9yKCJjb3VsZCBub3QgZ2V0IG52cyBmaWxlOiAlZCIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCi0Jd2wtPm52cyA9IGttZW1kdXAoZnctPmRhdGEsIHNpemVvZihzdHJ1Y3Qgd2wxMjcxX252c19maWxlKSwgR0ZQX0tFUk5FTCk7CisJd2wtPm52cyA9IGttZW1kdXAoZnctPmRhdGEsIGZ3LT5zaXplLCBHRlBfS0VSTkVMKTsKIAogCWlmICghd2wtPm52cykgewogCQl3bDEyNzFfZXJyb3IoImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBudnMgZmlsZSIpOwpAQCAtODcxLDE1ICs5NzksMzAgQEAKIAlpZiAod2wtPnN0YXRlICE9IFdMMTI3MV9TVEFURV9PTikKIAkJZ290byBvdXQ7CiAKLQl3bDEyNzFfaW5mbygiSGFyZHdhcmUgcmVjb3ZlcnkgaW4gcHJvZ3Jlc3MuIik7CisJd2wxMjcxX2luZm8oIkhhcmR3YXJlIHJlY292ZXJ5IGluIHByb2dyZXNzLiBGVyB2ZXI6ICVzIHBjOiAweCV4IiwKKwkJICAgIHdsLT5jaGlwLmZ3X3Zlcl9zdHIsIHdsMTI3MV9yZWFkMzIod2wsIFNDUl9QQUQ0KSk7CiAKIAlpZiAodGVzdF9iaXQoV0wxMjcxX0ZMQUdfU1RBX0FTU09DSUFURUQsICZ3bC0+ZmxhZ3MpKQogCQlpZWVlODAyMTFfY29ubmVjdGlvbl9sb3NzKHdsLT52aWYpOwogCisJLyogUHJldmVudCBzcHVyaW91cyBUWCBkdXJpbmcgRlcgcmVzdGFydCAqLworCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyh3bC0+aHcpOworCisJaWYgKHdsLT5zY2hlZF9zY2FubmluZykgeworCQlpZWVlODAyMTFfc2NoZWRfc2Nhbl9zdG9wcGVkKHdsLT5odyk7CisJCXdsLT5zY2hlZF9zY2FubmluZyA9IGZhbHNlOworCX0KKwogCS8qIHJlYm9vdCB0aGUgY2hpcHNldCAqLwotCV9fd2wxMjcxX29wX3JlbW92ZV9pbnRlcmZhY2Uod2wpOworCV9fd2wxMjcxX29wX3JlbW92ZV9pbnRlcmZhY2Uod2wsIGZhbHNlKTsKIAlpZWVlODAyMTFfcmVzdGFydF9odyh3bC0+aHcpOwogCisJLyoKKwkgKiBJdHMgc2FmZSB0byBlbmFibGUgVFggbm93IC0gdGhlIHF1ZXVlcyBhcmUgc3RvcHBlZCBhZnRlciBhIHJlcXVlc3QKKwkgKiB0byByZXN0YXJ0IHRoZSBIVy4KKwkgKi8KKwlpZWVlODAyMTFfd2FrZV9xdWV1ZXMod2wtPmh3KTsKKwogb3V0OgogCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKIH0KQEAgLTk1MCwxMCArMTA3MywyNSBAQAogCQl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwgImNoaXAgaWQgMHgleCAoMTI3MSBQRzIwKSIsCiAJCQkgICAgIHdsLT5jaGlwLmlkKTsKIAorCQkvKiBlbmQtb2YtdHJhbnNhY3Rpb24gZmxhZyBzaG91bGQgYmUgc2V0IGluIHdsMTI3eCBBUCBtb2RlICovCisJCWlmICh3bC0+YnNzX3R5cGUgPT0gQlNTX1RZUEVfQVBfQlNTKQorCQkJd2wtPnF1aXJrcyB8PSBXTDEyWFhfUVVJUktfRU5EX09GX1RSQU5TQUNUSU9OOworCiAJCXJldCA9IHdsMTI3MV9zZXR1cCh3bCk7CiAJCWlmIChyZXQgPCAwKQogCQkJZ290byBvdXQ7CiAJCWJyZWFrOworCWNhc2UgQ0hJUF9JRF8xMjgzX1BHMjA6CisJCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAiY2hpcCBpZCAweCV4ICgxMjgzIFBHMjApIiwKKwkJCSAgICAgd2wtPmNoaXAuaWQpOworCisJCXJldCA9IHdsMTI3MV9zZXR1cCh3bCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisJCWlmICh3bDEyNzFfc2V0X2Jsb2NrX3NpemUod2wpKQorCQkJd2wtPnF1aXJrcyB8PSBXTDEyWFhfUVVJUktfQkxPQ0tTSVpFX0FMSUdOTUVOVDsKKwkJYnJlYWs7CisJY2FzZSBDSElQX0lEXzEyODNfUEcxMDoKIAlkZWZhdWx0OgogCQl3bDEyNzFfd2FybmluZygidW5zdXBwb3J0ZWQgY2hpcCBpZDogMHgleCIsIHdsLT5jaGlwLmlkKTsKIAkJcmV0ID0gLUVOT0RFVjsKQEAgLTk3OCw2ICsxMTE2LDI0IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGludCB3bDEyNzFfZ2V0X2Z3X3Zlcl9xdWlya3Moc3RydWN0IHdsMTI3MSAqd2wpCit7CisJdW5zaWduZWQgaW50IHF1aXJrcyA9IDA7CisJdW5zaWduZWQgaW50ICpmd192ZXIgPSB3bC0+Y2hpcC5md192ZXI7CisKKwkvKiBPbmx5IGZvciB3bDEyN3ggKi8KKwlpZiAoKGZ3X3ZlcltGV19WRVJfQ0hJUF0gPT0gRldfVkVSX0NISVBfV0wxMjdYKSAmJgorCSAgICAvKiBDaGVjayBTVEEgdmVyc2lvbiAqLworCSAgICAoKChmd192ZXJbRldfVkVSX0lGX1RZUEVdID09IEZXX1ZFUl9JRl9UWVBFX1NUQSkgJiYKKwkgICAgICAoZndfdmVyW0ZXX1ZFUl9NSU5PUl0gPCBGV19WRVJfTUlOT1JfMV9TUEFSRV9TVEFfTUlOKSkgfHwKKwkgICAgIC8qIENoZWNrIEFQIHZlcnNpb24gKi8KKwkgICAgICgoZndfdmVyW0ZXX1ZFUl9JRl9UWVBFXSA9PSBGV19WRVJfSUZfVFlQRV9BUCkgJiYKKwkgICAgICAoZndfdmVyW0ZXX1ZFUl9NSU5PUl0gPCBGV19WRVJfTUlOT1JfMV9TUEFSRV9BUF9NSU4pKSkpCisJCXF1aXJrcyB8PSBXTDEyWFhfUVVJUktfVVNFXzJfU1BBUkVfQkxPQ0tTOworCisJcmV0dXJuIHF1aXJrczsKK30KKwogaW50IHdsMTI3MV9wbHRfc3RhcnQoc3RydWN0IHdsMTI3MSAqd2wpCiB7CiAJaW50IHJldHJpZXMgPSBXTDEyNzFfQk9PVF9SRVRSSUVTOwpAQCAtMTAxMyw2ICsxMTY5LDkgQEAKIAkJd2wtPnN0YXRlID0gV0wxMjcxX1NUQVRFX1BMVDsKIAkJd2wxMjcxX25vdGljZSgiZmlybXdhcmUgYm9vdGVkIGluIFBMVCBtb2RlICglcykiLAogCQkJICAgICAgd2wtPmNoaXAuZndfdmVyX3N0cik7CisKKwkJLyogQ2hlY2sgaWYgYW55IHF1aXJrcyBhcmUgbmVlZGVkIHdpdGggb2xkZXIgZncgdmVyc2lvbnMgKi8KKwkJd2wtPnF1aXJrcyB8PSB3bDEyNzFfZ2V0X2Z3X3Zlcl9xdWlya3Mod2wpOwogCQlnb3RvIG91dDsKIAogaXJxX2Rpc2FibGU6CkBAIC0xMDQwLDcgKzExOTksNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBfX3dsMTI3MV9wbHRfc3RvcChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3N0YXRpYyBpbnQgX193bDEyNzFfcGx0X3N0b3Aoc3RydWN0IHdsMTI3MSAqd2wpCiB7CiAJaW50IHJldCA9IDA7CiAKQEAgLTExMjQsMTAgKzEyODMsMjE5IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPndsX2xvY2ssIGZsYWdzKTsKIH0KIAoraW50IHdsMTI3MV90eF9kdW1teV9wYWNrZXQoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOworCXNldF9iaXQoV0wxMjcxX0ZMQUdfRFVNTVlfUEFDS0VUX1BFTkRJTkcsICZ3bC0+ZmxhZ3MpOworCXdsLT50eF9xdWV1ZV9jb3VudCsrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT53bF9sb2NrLCBmbGFncyk7CisKKwkvKiBUaGUgRlcgaXMgbG93IG9uIFJYIG1lbW9yeSBibG9ja3MsIHNvIHNlbmQgdGhlIGR1bW15IHBhY2tldCBhc2FwICovCisJaWYgKCF0ZXN0X2JpdChXTDEyNzFfRkxBR19GV19UWF9CVVNZLCAmd2wtPmZsYWdzKSkKKwkJd2wxMjcxX3R4X3dvcmtfbG9ja2VkKHdsKTsKKworCS8qCisJICogSWYgdGhlIEZXIFRYIGlzIGJ1c3ksIFRYIHdvcmsgd2lsbCBiZSBzY2hlZHVsZWQgYnkgdGhlIHRocmVhZGVkCisJICogaW50ZXJydXB0IGhhbmRsZXIgZnVuY3Rpb24KKwkgKi8KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoZSBzaXplIG9mIHRoZSBkdW1teSBwYWNrZXQgc2hvdWxkIGJlIGF0IGxlYXN0IDE0MDAgYnl0ZXMuIEhvd2V2ZXIsIGluCisgKiBvcmRlciB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGJ1cyB0cmFuc2FjdGlvbnMsIGFsaWduaW5nIGl0IHRvIDUxMiBieXRlcworICogYm91bmRhcmllcyBjb3VsZCBiZSBiZW5lZmljaWFsLCBwZXJmb3JtYW5jZSB3aXNlCisgKi8KKyNkZWZpbmUgVE9UQUxfVFhfRFVNTVlfUEFDS0VUX1NJWkUgKEFMSUdOKDE0MDAsIDUxMikpCisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqd2wxMnh4X2FsbG9jX2R1bW15X3BhY2tldChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICpoZHI7CisJdW5zaWduZWQgaW50IGR1bW15X3BhY2tldF9zaXplOworCisJZHVtbXlfcGFja2V0X3NpemUgPSBUT1RBTF9UWF9EVU1NWV9QQUNLRVRfU0laRSAtCisJCQkgICAgc2l6ZW9mKHN0cnVjdCB3bDEyNzFfdHhfaHdfZGVzY3IpIC0gc2l6ZW9mKCpoZHIpOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihUT1RBTF9UWF9EVU1NWV9QQUNLRVRfU0laRSk7CisJaWYgKCFza2IpIHsKKwkJd2wxMjcxX3dhcm5pbmcoIkZhaWxlZCB0byBhbGxvY2F0ZSBhIGR1bW15IHBhY2tldCBza2IiKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJc2tiX3Jlc2VydmUoc2tiLCBzaXplb2Yoc3RydWN0IHdsMTI3MV90eF9od19kZXNjcikpOworCisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKmhkcikpOworCW1lbXNldChoZHIsIDAsIHNpemVvZigqaGRyKSk7CisJaGRyLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0RBVEEgfAorCQkJCQkgSUVFRTgwMjExX1NUWVBFX05VTExGVU5DIHwKKwkJCQkJIElFRUU4MDIxMV9GQ1RMX1RPRFMpOworCisJbWVtc2V0KHNrYl9wdXQoc2tiLCBkdW1teV9wYWNrZXRfc2l6ZSksIDAsIGR1bW15X3BhY2tldF9zaXplKTsKKworCS8qIER1bW15IHBhY2tldHMgcmVxdWlyZSB0aGUgVElEIHRvIGJlIG1hbmFnZW1lbnQgKi8KKwlza2ItPnByaW9yaXR5ID0gV0wxMjcxX1RJRF9NR01UOworCisJLyogSW5pdGlhbGl6ZSBhbGwgZmllbGRzIHRoYXQgbWlnaHQgYmUgdXNlZCAqLworCXNrYl9zZXRfcXVldWVfbWFwcGluZyhza2IsIDApOworCW1lbXNldChJRUVFODAyMTFfU0tCX0NCKHNrYiksIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8pKTsKKworCXJldHVybiBza2I7Cit9CisKKwogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB3bDEyNzFfZGV2X25vdGlmaWVyID0gewogCS5ub3RpZmllcl9jYWxsID0gd2wxMjcxX2Rldl9ub3RpZnksCiB9OwogCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHdsMTI3MV9jb25maWd1cmVfc3VzcGVuZChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgcmV0OworCisJaWYgKHdsLT5ic3NfdHlwZSAhPSBCU1NfVFlQRV9TVEFfQlNTKQorCQlyZXR1cm4gMDsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwlyZXQgPSB3bDEyNzFfcHNfZWxwX3dha2V1cCh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X3VubG9jazsKKworCS8qIGVudGVyIHBzbSBpZiBuZWVkZWQqLworCWlmICghdGVzdF9iaXQoV0wxMjcxX0ZMQUdfUFNNLCAmd2wtPmZsYWdzKSkgeworCQlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhjb21wbCk7CisKKwkJd2wtPnBzX2NvbXBsID0gJmNvbXBsOworCQlyZXQgPSB3bDEyNzFfcHNfc2V0X21vZGUod2wsIFNUQVRJT05fUE9XRVJfU0FWRV9NT0RFLAorCQkJCSAgIHdsLT5iYXNpY19yYXRlLCB0cnVlKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dF9zbGVlcDsKKworCQkvKiB3ZSBtdXN0IHVubG9jayBoZXJlIHNvIHdlIHdpbGwgYmUgYWJsZSB0byBnZXQgZXZlbnRzICovCisJCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOworCQltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisKKwkJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KAorCQkJJmNvbXBsLCBtc2Vjc190b19qaWZmaWVzKFdMMTI3MV9QU19DT01QTEVURV9USU1FT1VUKSk7CisJCWlmIChyZXQgPD0gMCkgeworCQkJd2wxMjcxX3dhcm5pbmcoImNvdWxkbid0IGVudGVyIHBzIG1vZGUhIik7CisJCQlyZXQgPSAtRUJVU1k7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCS8qIHRha2UgbXV0ZXggYWdhaW4sIGFuZCB3YWtldXAgKi8KKwkJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCQlyZXQgPSB3bDEyNzFfcHNfZWxwX3dha2V1cCh3bCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXRfdW5sb2NrOworCX0KK291dF9zbGVlcDoKKwl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworb3V0OgorCXJldHVybiByZXQ7CisKK30KKworc3RhdGljIHZvaWQgd2wxMjcxX2NvbmZpZ3VyZV9yZXN1bWUoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJaW50IHJldDsKKworCWlmICh3bC0+YnNzX3R5cGUgIT0gQlNTX1RZUEVfU1RBX0JTUykKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKwlyZXQgPSB3bDEyNzFfcHNfZWxwX3dha2V1cCh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJLyogZXhpdCBwc20gaWYgaXQgd2Fzbid0IGNvbmZpZ3VyZWQgKi8KKwlpZiAoIXRlc3RfYml0KFdMMTI3MV9GTEFHX1BTTV9SRVFVRVNURUQsICZ3bC0+ZmxhZ3MpKQorCQl3bDEyNzFfcHNfc2V0X21vZGUod2wsIFNUQVRJT05fQUNUSVZFX01PREUsCisJCQkJICAgd2wtPmJhc2ljX3JhdGUsIHRydWUpOworCisJd2wxMjcxX3BzX2VscF9zbGVlcCh3bCk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworfQorCitzdGF0aWMgaW50IHdsMTI3MV9vcF9zdXNwZW5kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgIHN0cnVjdCBjZmc4MDIxMV93b3dsYW4gKndvdykKK3sKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OworCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIHN1c3BlbmQgd293PSVkIiwgISF3b3cpOworCXdsLT53b3dfZW5hYmxlZCA9ICEhd293OworCWlmICh3bC0+d293X2VuYWJsZWQpIHsKKwkJaW50IHJldDsKKwkJcmV0ID0gd2wxMjcxX2NvbmZpZ3VyZV9zdXNwZW5kKHdsKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXdsMTI3MV93YXJuaW5nKCJjb3VsZG4ndCBwcmVwYXJlIGRldmljZSB0byBzdXNwZW5kIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCS8qIGZsdXNoIGFueSByZW1haW5pbmcgd29yayAqLworCQl3bDEyNzFfZGVidWcoREVCVUdfTUFDODAyMTEsICJmbHVzaGluZyByZW1haW5pbmcgd29ya3MiKTsKKwkJZmx1c2hfZGVsYXllZF93b3JrKCZ3bC0+c2Nhbl9jb21wbGV0ZV93b3JrKTsKKworCQkvKgorCQkgKiBkaXNhYmxlIGFuZCByZS1lbmFibGUgaW50ZXJydXB0cyBpbiBvcmRlciB0byBmbHVzaAorCQkgKiB0aGUgdGhyZWFkZWRfaXJxCisJCSAqLworCQl3bDEyNzFfZGlzYWJsZV9pbnRlcnJ1cHRzKHdsKTsKKworCQkvKgorCQkgKiBzZXQgc3VzcGVuZGVkIGZsYWcgdG8gYXZvaWQgdHJpZ2dlcmluZyBhIG5ldyB0aHJlYWRlZF9pcnEKKwkJICogd29yay4gbm8gbmVlZCBmb3Igc3BpbmxvY2sgYXMgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuCisJCSAqLworCQlzZXRfYml0KFdMMTI3MV9GTEFHX1NVU1BFTkRFRCwgJndsLT5mbGFncyk7CisKKwkJd2wxMjcxX2VuYWJsZV9pbnRlcnJ1cHRzKHdsKTsKKwkJZmx1c2hfd29yaygmd2wtPnR4X3dvcmspOworCQlmbHVzaF9kZWxheWVkX3dvcmsoJndsLT5wc3BvbGxfd29yayk7CisJCWZsdXNoX2RlbGF5ZWRfd29yaygmd2wtPmVscF93b3JrKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX29wX3Jlc3VtZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OworCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIHJlc3VtZSB3b3c9JWQiLAorCQkgICAgIHdsLT53b3dfZW5hYmxlZCk7CisKKwkvKgorCSAqIHJlLWVuYWJsZSBpcnFfd29yayBlbnF1ZXVpbmcsIGFuZCBjYWxsIGlycV93b3JrIGRpcmVjdGx5IGlmCisJICogdGhlcmUgaXMgYSBwZW5kaW5nIHdvcmsuCisJICovCisJaWYgKHdsLT53b3dfZW5hYmxlZCkgeworCQlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQlib29sIHJ1bl9pcnFfd29yayA9IGZhbHNlOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOworCQljbGVhcl9iaXQoV0wxMjcxX0ZMQUdfU1VTUEVOREVELCAmd2wtPmZsYWdzKTsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChXTDEyNzFfRkxBR19QRU5ESU5HX1dPUkssICZ3bC0+ZmxhZ3MpKQorCQkJcnVuX2lycV93b3JrID0gdHJ1ZTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPndsX2xvY2ssIGZsYWdzKTsKKworCQlpZiAocnVuX2lycV93b3JrKSB7CisJCQl3bDEyNzFfZGVidWcoREVCVUdfTUFDODAyMTEsCisJCQkJICAgICAicnVuIHBvc3Rwb25lZCBpcnFfd29yayBkaXJlY3RseSIpOworCQkJd2wxMjcxX2lycSgwLCB3bCk7CisJCQl3bDEyNzFfZW5hYmxlX2ludGVycnVwdHMod2wpOworCQl9CisKKwkJd2wxMjcxX2NvbmZpZ3VyZV9yZXN1bWUod2wpOworCX0KKworCXJldHVybiAwOworfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgd2wxMjcxX29wX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIHN0YXJ0Iik7CkBAIC0xMTc0LDYgKzE1NDIsMTYgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJLyoKKwkgKiBpbiBzb21lIHZlcnkgY29ybmVyIGNhc2UgSFcgcmVjb3Zlcnkgc2NlbmFyaW9zIGl0cyBwb3NzaWJsZSB0bworCSAqIGdldCBoZXJlIGJlZm9yZSBfX3dsMTI3MV9vcF9yZW1vdmVfaW50ZXJmYWNlIGlzIGNvbXBsZXRlLCBzbworCSAqIG9wdCBvdXQgaWYgdGhhdCBpcyB0aGUgY2FzZS4KKwkgKi8KKwlpZiAodGVzdF9iaXQoV0wxMjcxX0ZMQUdfSUZfSU5JVElBTElaRUQsICZ3bC0+ZmxhZ3MpKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCiAJc3dpdGNoICh2aWYtPnR5cGUpIHsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJCXdsLT5ic3NfdHlwZSA9IEJTU19UWVBFX1NUQV9CU1M7CkBAIC0xMjQyLDYgKzE2MjAsNyBAQAogCiAJd2wtPnZpZiA9IHZpZjsKIAl3bC0+c3RhdGUgPSBXTDEyNzFfU1RBVEVfT047CisJc2V0X2JpdChXTDEyNzFfRkxBR19JRl9JTklUSUFMSVpFRCwgJndsLT5mbGFncyk7CiAJd2wxMjcxX2luZm8oImZpcm13YXJlIGJvb3RlZCAoJXMpIiwgd2wtPmNoaXAuZndfdmVyX3N0cik7CiAKIAkvKiB1cGRhdGUgaHcvZncgdmVyc2lvbiBpbmZvIGluIHdpcGh5IHN0cnVjdCAqLwpAQCAtMTI0OSw2ICsxNjI4LDkgQEAKIAlzdHJuY3B5KHdpcGh5LT5md192ZXJzaW9uLCB3bC0+Y2hpcC5md192ZXJfc3RyLAogCQlzaXplb2Yod2lwaHktPmZ3X3ZlcnNpb24pKTsKIAorCS8qIENoZWNrIGlmIGFueSBxdWlya3MgYXJlIG5lZWRlZCB3aXRoIG9sZGVyIGZ3IHZlcnNpb25zICovCisJd2wtPnF1aXJrcyB8PSB3bDEyNzFfZ2V0X2Z3X3Zlcl9xdWlya3Mod2wpOworCiAJLyoKIAkgKiBOb3cgd2Uga25vdyBpZiAxMWEgaXMgc3VwcG9ydGVkIChpbmZvIGZyb20gdGhlIE5WUyksIHNvIGRpc2FibGUKIAkgKiAxMWEgY2hhbm5lbHMgaWYgbm90IHN1cHBvcnRlZApAQCAtMTI2MiwyMyArMTY0NCwzMCBAQAogb3V0OgogCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKIAorCW11dGV4X2xvY2soJndsX2xpc3RfbXV0ZXgpOwogCWlmICghcmV0KQogCQlsaXN0X2FkZCgmd2wtPmxpc3QsICZ3bF9saXN0KTsKKwltdXRleF91bmxvY2soJndsX2xpc3RfbXV0ZXgpOwogCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgX193bDEyNzFfb3BfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3Qgd2wxMjcxICp3bCkKK3N0YXRpYyB2b2lkIF9fd2wxMjcxX29wX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IHdsMTI3MSAqd2wsCisJCQkJCSBib29sIHJlc2V0X3R4X3F1ZXVlcykKIHsKIAlpbnQgaTsKIAogCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIHJlbW92ZSBpbnRlcmZhY2UiKTsKIAorCS8qIGJlY2F1c2Ugb2YgaGFyZHdhcmUgcmVjb3ZlcnksIHdlIG1heSBnZXQgaGVyZSB0d2ljZSAqLworCWlmICh3bC0+c3RhdGUgIT0gV0wxMjcxX1NUQVRFX09OKQorCQlyZXR1cm47CisKIAl3bDEyNzFfaW5mbygiZG93biIpOwogCisJbXV0ZXhfbG9jaygmd2xfbGlzdF9tdXRleCk7CiAJbGlzdF9kZWwoJndsLT5saXN0KTsKLQotCVdBUk5fT04od2wtPnN0YXRlICE9IFdMMTI3MV9TVEFURV9PTik7CisJbXV0ZXhfdW5sb2NrKCZ3bF9saXN0X211dGV4KTsKIAogCS8qIGVuYWJsZSBkeW4gcHMganVzdCBpbiBjYXNlIChpZiBsZWZ0IG9uIGR1ZSB0byBmdyBjcmFzaCBldGMpICovCiAJaWYgKHdsLT5ic3NfdHlwZSA9PSBCU1NfVFlQRV9TVEFfQlNTKQpAQCAtMTI4NiwxMiArMTY3NSwxNSBAQAogCiAJaWYgKHdsLT5zY2FuLnN0YXRlICE9IFdMMTI3MV9TQ0FOX1NUQVRFX0lETEUpIHsKIAkJd2wtPnNjYW4uc3RhdGUgPSBXTDEyNzFfU0NBTl9TVEFURV9JRExFOwotCQlrZnJlZSh3bC0+c2Nhbi5zY2FubmVkX2NoKTsKLQkJd2wtPnNjYW4uc2Nhbm5lZF9jaCA9IE5VTEw7CisJCW1lbXNldCh3bC0+c2Nhbi5zY2FubmVkX2NoLCAwLCBzaXplb2Yod2wtPnNjYW4uc2Nhbm5lZF9jaCkpOwogCQl3bC0+c2Nhbi5yZXEgPSBOVUxMOwogCQlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQod2wtPmh3LCB0cnVlKTsKIAl9CiAKKwkvKgorCSAqIHRoaXMgbXVzdCBiZSBiZWZvcmUgdGhlIGNhbmNlbF93b3JrIGNhbGxzIGJlbG93LCBzbyB0aGF0IHRoZSB3b3JrCisJICogZnVuY3Rpb25zIGRvbid0IHBlcmZvcm0gZnVydGhlciB3b3JrLgorCSAqLwogCXdsLT5zdGF0ZSA9IFdMMTI3MV9TVEFURV9PRkY7CiAKIAltdXRleF91bmxvY2soJndsLT5tdXRleCk7CkBAIC0xMzA3LDcgKzE2OTksNyBAQAogCW11dGV4X2xvY2soJndsLT5tdXRleCk7CiAKIAkvKiBsZXQncyBub3RpZnkgTUFDODAyMTEgYWJvdXQgdGhlIHJlbWFpbmluZyBwZW5kaW5nIFRYIGZyYW1lcyAqLwotCXdsMTI3MV90eF9yZXNldCh3bCk7CisJd2wxMjcxX3R4X3Jlc2V0KHdsLCByZXNldF90eF9xdWV1ZXMpOwogCXdsMTI3MV9wb3dlcl9vZmYod2wpOwogCiAJbWVtc2V0KHdsLT5ic3NpZCwgMCwgRVRIX0FMRU4pOwpAQCAtMTMyMSw2ICsxNzEzLDcgQEAKIAl3bC0+cHNtX2VudHJ5X3JldHJ5ID0gMDsKIAl3bC0+cG93ZXJfbGV2ZWwgPSBXTDEyNzFfREVGQVVMVF9QT1dFUl9MRVZFTDsKIAl3bC0+dHhfYmxvY2tzX2F2YWlsYWJsZSA9IDA7CisJd2wtPnR4X2FsbG9jYXRlZF9ibG9ja3MgPSAwOwogCXdsLT50eF9yZXN1bHRzX2NvdW50ID0gMDsKIAl3bC0+dHhfcGFja2V0c19jb3VudCA9IDA7CiAJd2wtPnR4X3NlY3VyaXR5X2xhc3Rfc2VxID0gMDsKQEAgLTEzMjgsMTMgKzE3MjEsMjAgQEAKIAl3bC0+dGltZV9vZmZzZXQgPSAwOwogCXdsLT5zZXNzaW9uX2NvdW50ZXIgPSAwOwogCXdsLT5yYXRlX3NldCA9IENPTkZfVFhfUkFURV9NQVNLX0JBU0lDOwotCXdsLT5mbGFncyA9IDA7CiAJd2wtPnZpZiA9IE5VTEw7CiAJd2wtPmZpbHRlcnMgPSAwOwogCXdsMTI3MV9mcmVlX2FwX2tleXMod2wpOwogCW1lbXNldCh3bC0+YXBfaGxpZF9tYXAsIDAsIHNpemVvZih3bC0+YXBfaGxpZF9tYXApKTsKIAl3bC0+YXBfZndfcHNfbWFwID0gMDsKIAl3bC0+YXBfcHNfbWFwID0gMDsKKwl3bC0+c2NoZWRfc2Nhbm5pbmcgPSBmYWxzZTsKKworCS8qCisJICogdGhpcyBpcyBwZXJmb3JtZWQgYWZ0ZXIgdGhlIGNhbmNlbF93b3JrIGNhbGxzIGFuZCB0aGUgYXNzb2NpYXRlZAorCSAqIG11dGV4X2xvY2ssIHNvIHRoYXQgd2wxMjcxX29wX2FkZF9pbnRlcmZhY2UgZG9lcyBub3QgYWNjaWRlbnRhbGx5CisJICogZ2V0IGV4ZWN1dGVkIGJlZm9yZSBhbGwgdGhlc2UgdmFycyBoYXZlIGJlZW4gcmVzZXQuCisJICovCisJd2wtPmZsYWdzID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBOVU1fVFhfUVVFVUVTOyBpKyspCiAJCXdsLT50eF9ibG9ja3NfZnJlZWRbaV0gPSAwOwpAQCAtMTM2MSwxNCArMTc2MSwxNCBAQAogCSAqLwogCWlmICh3bC0+dmlmKSB7CiAJCVdBUk5fT04od2wtPnZpZiAhPSB2aWYpOwotCQlfX3dsMTI3MV9vcF9yZW1vdmVfaW50ZXJmYWNlKHdsKTsKKwkJX193bDEyNzFfb3BfcmVtb3ZlX2ludGVyZmFjZSh3bCwgdHJ1ZSk7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwogCWNhbmNlbF93b3JrX3N5bmMoJndsLT5yZWNvdmVyeV93b3JrKTsKIH0KIAotc3RhdGljIHZvaWQgd2wxMjcxX2NvbmZpZ3VyZV9maWx0ZXJzKHN0cnVjdCB3bDEyNzEgKndsLCB1bnNpZ25lZCBpbnQgZmlsdGVycykKK3ZvaWQgd2wxMjcxX2NvbmZpZ3VyZV9maWx0ZXJzKHN0cnVjdCB3bDEyNzEgKndsLCB1bnNpZ25lZCBpbnQgZmlsdGVycykKIHsKIAl3bDEyNzFfc2V0X2RlZmF1bHRfZmlsdGVycyh3bCk7CiAKQEAgLTE0MzEsMTAgKzE4MzEsMTAgQEAKIAkgKiBPbmUgb2YgdGhlIHNpZGUgZWZmZWN0cyBvZiB0aGUgSk9JTiBjb21tYW5kIGlzIHRoYXQgaXMgY2xlYXJzCiAJICogV1BBL1dQQTIga2V5cyBmcm9tIHRoZSBjaGlwc2V0LiBQZXJmb3JtaW5nIGEgSk9JTiB3aGlsZSBhc3NvY2lhdGVkCiAJICogdG8gYSBXUEEvV1BBMiBhY2Nlc3MgcG9pbnQgd2lsbCB0aGVyZWZvcmUga2lsbCB0aGUgZGF0YS1wYXRoLgotCSAqIEN1cnJlbnRseSB0aGVyZSBpcyBubyBzdXBwb3J0ZWQgc2NlbmFyaW8gZm9yIEpPSU4gZHVyaW5nCi0JICogYXNzb2NpYXRpb24gLSBpZiBpdCBiZWNvbWVzIGEgc3VwcG9ydGVkIHNjZW5hcmlvLCB0aGUgV1BBL1dQQTIga2V5cwotCSAqIG11c3QgYmUgaGFuZGxlZCBzb21laG93LgotCSAqCisJICogQ3VycmVudGx5IHRoZSBvbmx5IHZhbGlkIHNjZW5hcmlvIGZvciBKT0lOIGR1cmluZyBhc3NvY2lhdGlvbgorCSAqIGlzIG9uIHJvYW1pbmcsIGluIHdoaWNoIGNhc2Ugd2Ugd2lsbCBhbHNvIGJlIGdpdmVuIG5ldyBrZXlzLgorCSAqIEtlZXAgdGhlIGJlbG93IG1lc3NhZ2UgZm9yIG5vdywgdW5sZXNzIGl0IHN0YXJ0cyBib3RoZXJpbmcKKwkgKiB1c2VycyB3aG8gcmVhbGx5IGxpa2UgdG8gcm9hbSBhIGxvdCA6KQogCSAqLwogCWlmICh0ZXN0X2JpdChXTDEyNzFfRkxBR19TVEFfQVNTT0NJQVRFRCwgJndsLT5mbGFncykpCiAJCXdsMTI3MV9pbmZvKCJKT0lOIHdoaWxlIGFzc29jaWF0ZWQuIik7CkBAIC0xNDkwLDcgKzE4OTAsNyBAQAogCWNsZWFyX2JpdChXTDEyNzFfRkxBR19KT0lORUQsICZ3bC0+ZmxhZ3MpOwogCW1lbXNldCh3bC0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKIAotCS8qIHN0b3AgZmlsdGVydGluZyBwYWNrZXRzIGJhc2VkIG9uIGJzc2lkICovCisJLyogc3RvcCBmaWx0ZXJpbmcgcGFja2V0cyBiYXNlZCBvbiBic3NpZCAqLwogCXdsMTI3MV9jb25maWd1cmVfZmlsdGVycyh3bCwgRklGX09USEVSX0JTUyk7CiAKIG91dDoKQEAgLTE1MzAsNiArMTkzMCwxMyBAQAogCQl3bC0+c2Vzc2lvbl9jb3VudGVyKys7CiAJCWlmICh3bC0+c2Vzc2lvbl9jb3VudGVyID49IFNFU1NJT05fQ09VTlRFUl9NQVgpCiAJCQl3bC0+c2Vzc2lvbl9jb3VudGVyID0gMDsKKworCQkvKiBUaGUgY3VycmVudCBmaXJtd2FyZSBvbmx5IHN1cHBvcnRzIHNjaGVkX3NjYW4gaW4gaWRsZSAqLworCQlpZiAod2wtPnNjaGVkX3NjYW5uaW5nKSB7CisJCQl3bDEyNzFfc2Nhbl9zY2hlZF9zY2FuX3N0b3Aod2wpOworCQkJaWVlZTgwMjExX3NjaGVkX3NjYW5fc3RvcHBlZCh3bC0+aHcpOworCQl9CisKIAkJcmV0ID0gd2wxMjcxX2R1bW15X2pvaW4od2wpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gb3V0OwpAQCAtMTU2OSw3ICsxOTc2LDEyIEBACiAJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKIAogCWlmICh1bmxpa2VseSh3bC0+c3RhdGUgPT0gV0wxMjcxX1NUQVRFX09GRikpIHsKLQkJcmV0ID0gLUVBR0FJTjsKKwkJLyogd2Ugc3VwcG9ydCBjb25maWd1cmluZyB0aGUgY2hhbm5lbCBhbmQgYmFuZCB3aGlsZSBvZmYgKi8KKwkJaWYgKChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwpKSB7CisJCQl3bC0+YmFuZCA9IGNvbmYtPmNoYW5uZWwtPmJhbmQ7CisJCQl3bC0+Y2hhbm5lbCA9IGNoYW5uZWw7CisJCX0KKwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTIwNzcsNiArMjQ4OSw2MCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgd2wxMjcxX29wX3NjaGVkX3NjYW5fc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQkgICAgICBzdHJ1Y3QgY2ZnODAyMTFfc2NoZWRfc2Nhbl9yZXF1ZXN0ICpyZXEsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zY2hlZF9zY2FuX2llcyAqaWVzKQoreworCXN0cnVjdCB3bDEyNzEgKndsID0gaHctPnByaXY7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIndsMTI3MV9vcF9zY2hlZF9zY2FuX3N0YXJ0Iik7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJcmV0ID0gd2wxMjcxX3BzX2VscF93YWtldXAod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXJldCA9IHdsMTI3MV9zY2FuX3NjaGVkX3NjYW5fY29uZmlnKHdsLCByZXEsIGllcyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X3NsZWVwOworCisJcmV0ID0gd2wxMjcxX3NjYW5fc2NoZWRfc2Nhbl9zdGFydCh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X3NsZWVwOworCisJd2wtPnNjaGVkX3NjYW5uaW5nID0gdHJ1ZTsKKworb3V0X3NsZWVwOgorCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB3bDEyNzFfb3Bfc2NoZWRfc2Nhbl9zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX01BQzgwMjExLCAid2wxMjcxX29wX3NjaGVkX3NjYW5fc3RvcCIpOworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwl3bDEyNzFfc2Nhbl9zY2hlZF9zY2FuX3N0b3Aod2wpOworCisJd2wxMjcxX3BzX2VscF9zbGVlcCh3bCk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworfQorCiBzdGF0aWMgaW50IHdsMTI3MV9vcF9zZXRfZnJhZ190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiB2YWx1ZSkKIHsKIAlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OwpAQCAtMjA5Myw3ICsyNTU5LDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAKLQlyZXQgPSB3bDEyNzFfYWN4X2ZyYWdfdGhyZXNob2xkKHdsLCAodTE2KXZhbHVlKTsKKwlyZXQgPSB3bDEyNzFfYWN4X2ZyYWdfdGhyZXNob2xkKHdsLCB2YWx1ZSk7CiAJaWYgKHJldCA8IDApCiAJCXdsMTI3MV93YXJuaW5nKCJ3bDEyNzFfb3Bfc2V0X2ZyYWdfdGhyZXNob2xkIGZhaWxlZDogJWQiLCByZXQpOwogCkBAIC0yMTIxLDcgKzI1ODcsNyBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dDsKIAotCXJldCA9IHdsMTI3MV9hY3hfcnRzX3RocmVzaG9sZCh3bCwgKHUxNikgdmFsdWUpOworCXJldCA9IHdsMTI3MV9hY3hfcnRzX3RocmVzaG9sZCh3bCwgdmFsdWUpOwogCWlmIChyZXQgPCAwKQogCQl3bDEyNzFfd2FybmluZygid2wxMjcxX29wX3NldF9ydHNfdGhyZXNob2xkIGZhaWxlZDogJWQiLCByZXQpOwogCkBAIC0yMTM2LDIwICsyNjAyLDI0IEBACiBzdGF0aWMgaW50IHdsMTI3MV9zc2lkX3NldChzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICBpbnQgb2Zmc2V0KQogewotCXU4ICpwdHIgPSBza2ItPmRhdGEgKyBvZmZzZXQ7CisJdTggc3NpZF9sZW47CisJY29uc3QgdTggKnB0ciA9IGNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfU1NJRCwgc2tiLT5kYXRhICsgb2Zmc2V0LAorCQkJCQkgc2tiLT5sZW4gLSBvZmZzZXQpOwogCi0JLyogZmluZCB0aGUgbG9jYXRpb24gb2YgdGhlIHNzaWQgaW4gdGhlIGJlYWNvbiAqLwotCXdoaWxlIChwdHIgPCBza2ItPmRhdGEgKyBza2ItPmxlbikgewotCQlpZiAocHRyWzBdID09IFdMQU5fRUlEX1NTSUQpIHsKLQkJCXdsLT5zc2lkX2xlbiA9IHB0clsxXTsKLQkJCW1lbWNweSh3bC0+c3NpZCwgcHRyKzIsIHdsLT5zc2lkX2xlbik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlwdHIgKz0gKHB0clsxXSArIDIpOworCWlmICghcHRyKSB7CisJCXdsMTI3MV9lcnJvcigiTm8gU1NJRCBpbiBJRXMhIik7CisJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCXdsMTI3MV9lcnJvcigiTm8gU1NJRCBpbiBJRXMhXG4iKTsKLQlyZXR1cm4gLUVOT0VOVDsKKwlzc2lkX2xlbiA9IHB0clsxXTsKKwlpZiAoc3NpZF9sZW4gPiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKSB7CisJCXdsMTI3MV9lcnJvcigiU1NJRCBpcyB0b28gbG9uZyEiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd2wtPnNzaWRfbGVuID0gc3NpZF9sZW47CisJbWVtY3B5KHdsLT5zc2lkLCBwdHIrMiwgc3NpZF9sZW4pOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHdsMTI3MV9ic3NfZXJwX2luZm9fY2hhbmdlZChzdHJ1Y3Qgd2wxMjcxICp3bCwKQEAgLTIyNjQsMjQgKzI3MzQsMTkgQEAKIAogCWlmICgoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JBU0lDX1JBVEVTKSkgewogCQl1MzIgcmF0ZXMgPSBic3NfY29uZi0+YmFzaWNfcmF0ZXM7Ci0JCXN0cnVjdCBjb25mX3R4X3JhdGVfY2xhc3MgbWdtdF9yYzsKIAogCQl3bC0+YmFzaWNfcmF0ZV9zZXQgPSB3bDEyNzFfdHhfZW5hYmxlZF9yYXRlc19nZXQod2wsIHJhdGVzKTsKIAkJd2wtPmJhc2ljX3JhdGUgPSB3bDEyNzFfdHhfbWluX3JhdGVfZ2V0KHdsKTsKLQkJd2wxMjcxX2RlYnVnKERFQlVHX0FQLCAiYmFzaWMgcmF0ZXM6IDB4JXgiLAotCQkJICAgICB3bC0+YmFzaWNfcmF0ZV9zZXQpOwogCi0JCS8qIHVwZGF0ZSB0aGUgQVAgbWFuYWdlbWVudCByYXRlIHBvbGljeSB3aXRoIHRoZSBuZXcgcmF0ZXMgKi8KLQkJbWdtdF9yYy5lbmFibGVkX3JhdGVzID0gd2wtPmJhc2ljX3JhdGVfc2V0OwotCQltZ210X3JjLmxvbmdfcmV0cnlfbGltaXQgPSAxMDsKLQkJbWdtdF9yYy5zaG9ydF9yZXRyeV9saW1pdCA9IDEwOwotCQltZ210X3JjLmFmbGFncyA9IDA7Ci0JCXJldCA9IHdsMTI3MV9hY3hfYXBfcmF0ZV9wb2xpY3kod2wsICZtZ210X3JjLAotCQkJCQkJQUNYX1RYX0FQX01PREVfTUdNVF9SQVRFKTsKKwkJcmV0ID0gd2wxMjcxX2luaXRfYXBfcmF0ZXMod2wpOwogCQlpZiAocmV0IDwgMCkgewotCQkJd2wxMjcxX2Vycm9yKCJBUCBtZ210IHBvbGljeSBjaGFuZ2UgZmFpbGVkICVkIiwgcmV0KTsKKwkJCXdsMTI3MV9lcnJvcigiQVAgcmF0ZSBwb2xpY3kgY2hhbmdlIGZhaWxlZCAlZCIsIHJldCk7CiAJCQlnb3RvIG91dDsKIAkJfQorCisJCXJldCA9IHdsMTI3MV9hcF9pbml0X3RlbXBsYXRlcyh3bCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CiAJfQogCiAJcmV0ID0gd2wxMjcxX2Jzc19iZWFjb25faW5mb19jaGFuZ2VkKHdsLCB2aWYsIGJzc19jb25mLCBjaGFuZ2VkKTsKQEAgLTIzMTQsNiArMjc3OSwyNCBAQAogCQl9CiAJfQogCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9JQlNTKSB7CisJCXdsMTI3MV9kZWJ1ZyhERUJVR19BREhPQywgImlic3Nfam9pbmVkOiAlZCIsCisJCQkgICAgIGJzc19jb25mLT5pYnNzX2pvaW5lZCk7CisKKwkJaWYgKGJzc19jb25mLT5pYnNzX2pvaW5lZCkgeworCQkJdTMyIHJhdGVzID0gYnNzX2NvbmYtPmJhc2ljX3JhdGVzOworCQkJd2wtPmJhc2ljX3JhdGVfc2V0ID0gd2wxMjcxX3R4X2VuYWJsZWRfcmF0ZXNfZ2V0KHdsLAorCQkJCQkJCQkJIHJhdGVzKTsKKwkJCXdsLT5iYXNpY19yYXRlID0gd2wxMjcxX3R4X21pbl9yYXRlX2dldCh3bCk7CisKKwkJCS8qIGJ5IGRlZmF1bHQsIHVzZSAxMWIgcmF0ZXMgKi8KKwkJCXdsLT5yYXRlX3NldCA9IENPTkZfVFhfSUJTU19ERUZBVUxUX1JBVEVTOworCQkJcmV0ID0gd2wxMjcxX2FjeF9zdGFfcmF0ZV9wb2xpY2llcyh3bCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIG91dDsKKwkJfQorCX0KKwogCXJldCA9IHdsMTI3MV9ic3NfZXJwX2luZm9fY2hhbmdlZCh3bCwgYnNzX2NvbmYsIGNoYW5nZWQpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dDsKQEAgLTI1MDMsOCArMjk4NiwxMCBAQAogCQkJfQogCQl9IGVsc2UgewogCQkJLyogdXNlIGRlZmF1bHRzIHdoZW4gbm90IGFzc29jaWF0ZWQgKi8KKwkJCWJvb2wgd2FzX2Fzc29jID0KKwkJCSAgICAhIXRlc3RfYW5kX2NsZWFyX2JpdChXTDEyNzFfRkxBR19TVEFfQVNTT0NJQVRFRCwKKwkJCQkJCSAmd2wtPmZsYWdzKTsKIAkJCWNsZWFyX2JpdChXTDEyNzFfRkxBR19TVEFfU1RBVEVfU0VOVCwgJndsLT5mbGFncyk7Ci0JCQljbGVhcl9iaXQoV0wxMjcxX0ZMQUdfU1RBX0FTU09DSUFURUQsICZ3bC0+ZmxhZ3MpOwogCQkJd2wtPmFpZCA9IDA7CiAKIAkJCS8qIGZyZWUgcHJvYmUtcmVxdWVzdCB0ZW1wbGF0ZSAqLwpAQCAtMjUzMCw4ICszMDE1LDEwIEBACiAJCQkJZ290byBvdXQ7CiAKIAkJCS8qIHJlc3RvcmUgdGhlIGJzc2lkIGZpbHRlciBhbmQgZ28gdG8gZHVtbXkgYnNzaWQgKi8KLQkJCXdsMTI3MV91bmpvaW4od2wpOwotCQkJd2wxMjcxX2R1bW15X2pvaW4od2wpOworCQkJaWYgKHdhc19hc3NvYykgeworCQkJCXdsMTI3MV91bmpvaW4od2wpOworCQkJCXdsMTI3MV9kdW1teV9qb2luKHdsKTsKKwkJCX0KIAkJfQogCX0KIApAQCAtMjY1MCwzMiArMzEzNywzMSBAQAogCQljb25mX3RpZC0+YWNrX3BvbGljeSA9IENPTkZfQUNLX1BPTElDWV9MRUdBQ1k7CiAJCWNvbmZfdGlkLT5hcHNkX2NvbmZbMF0gPSAwOwogCQljb25mX3RpZC0+YXBzZF9jb25mWzFdID0gMDsKLQl9IGVsc2UgewotCQlyZXQgPSB3bDEyNzFfcHNfZWxwX3dha2V1cCh3bCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXQ7CisJCWdvdG8gb3V0OworCX0KIAotCQkvKgotCQkgKiB0aGUgdHhvcCBpcyBjb25mZWQgaW4gdW5pdHMgb2YgMzJ1cyBieSB0aGUgbWFjODAyMTEsCi0JCSAqIHdlIG5lZWQgdXMKLQkJICovCi0JCXJldCA9IHdsMTI3MV9hY3hfYWNfY2ZnKHdsLCB3bDEyNzFfdHhfZ2V0X3F1ZXVlKHF1ZXVlKSwKLQkJCQkJcGFyYW1zLT5jd19taW4sIHBhcmFtcy0+Y3dfbWF4LAotCQkJCQlwYXJhbXMtPmFpZnMsIHBhcmFtcy0+dHhvcCA8PCA1KTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dF9zbGVlcDsKKwlyZXQgPSB3bDEyNzFfcHNfZWxwX3dha2V1cCh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OwogCi0JCXJldCA9IHdsMTI3MV9hY3hfdGlkX2NmZyh3bCwgd2wxMjcxX3R4X2dldF9xdWV1ZShxdWV1ZSksCi0JCQkJCSBDT05GX0NIQU5ORUxfVFlQRV9FRENGLAotCQkJCQkgd2wxMjcxX3R4X2dldF9xdWV1ZShxdWV1ZSksCi0JCQkJCSBwc19zY2hlbWUsIENPTkZfQUNLX1BPTElDWV9MRUdBQ1ksCi0JCQkJCSAwLCAwKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dF9zbGVlcDsKKwkvKgorCSAqIHRoZSB0eG9wIGlzIGNvbmZlZCBpbiB1bml0cyBvZiAzMnVzIGJ5IHRoZSBtYWM4MDIxMSwKKwkgKiB3ZSBuZWVkIHVzCisJICovCisJcmV0ID0gd2wxMjcxX2FjeF9hY19jZmcod2wsIHdsMTI3MV90eF9nZXRfcXVldWUocXVldWUpLAorCQkJCXBhcmFtcy0+Y3dfbWluLCBwYXJhbXMtPmN3X21heCwKKwkJCQlwYXJhbXMtPmFpZnMsIHBhcmFtcy0+dHhvcCA8PCA1KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfc2xlZXA7CisKKwlyZXQgPSB3bDEyNzFfYWN4X3RpZF9jZmcod2wsIHdsMTI3MV90eF9nZXRfcXVldWUocXVldWUpLAorCQkJCSBDT05GX0NIQU5ORUxfVFlQRV9FRENGLAorCQkJCSB3bDEyNzFfdHhfZ2V0X3F1ZXVlKHF1ZXVlKSwKKwkJCQkgcHNfc2NoZW1lLCBDT05GX0FDS19QT0xJQ1lfTEVHQUNZLAorCQkJCSAwLCAwKTsKIAogb3V0X3NsZWVwOgotCQl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKLQl9CisJd2wxMjcxX3BzX2VscF9zbGVlcCh3bCk7CiAKIG91dDoKIAltdXRleF91bmxvY2soJndsLT5tdXRleCk7CkBAIC0yODQ3LDEwICszMzMzLDExIEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IHdsMTI3MV9vcF9hbXBkdV9hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCQkgICBlbnVtIGllZWU4MDIxMV9hbXBkdV9tbG1lX2FjdGlvbiBhY3Rpb24sCi0JCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkLCB1MTYgKnNzbiwKLQkJCSAgIHU4IGJ1Zl9zaXplKQorc3RhdGljIGludCB3bDEyNzFfb3BfYW1wZHVfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQkgIGVudW0gaWVlZTgwMjExX2FtcGR1X21sbWVfYWN0aW9uIGFjdGlvbiwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQsIHUxNiAqc3NuLAorCQkJCSAgdTggYnVmX3NpemUpCiB7CiAJc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKIAlpbnQgcmV0OwpAQCAtMjkwNyw2ICszMzk0LDI4IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGJvb2wgd2wxMjcxX3R4X2ZyYW1lc19wZW5kaW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCB3bDEyNzEgKndsID0gaHctPnByaXY7CisJYm9vbCByZXQgPSBmYWxzZTsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwlpZiAodW5saWtlbHkod2wtPnN0YXRlID09IFdMMTI3MV9TVEFURV9PRkYpKQorCQlnb3RvIG91dDsKKworCS8qIHBhY2tldHMgYXJlIGNvbnNpZGVyZWQgcGVuZGluZyBpZiBpbiB0aGUgVFggcXVldWUgb3IgdGhlIEZXICovCisJcmV0ID0gKHdsLT50eF9xdWV1ZV9jb3VudCA+IDApIHx8ICh3bC0+dHhfZnJhbWVzX2NudCA+IDApOworCisJLyogdGhlIGFib3ZlIGlzIGFwcHJvcHJpYXRlIGZvciBTVEEgbW9kZSBmb3IgUFMgcHVycG9zZXMgKi8KKwlXQVJOX09OKHdsLT5ic3NfdHlwZSAhPSBCU1NfVFlQRV9TVEFfQlNTKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKIC8qIGNhbid0IGJlIGNvbnN0LCBtYWM4MDIxMSB3cml0ZXMgdG8gdGhpcyAqLwogc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSB3bDEyNzFfcmF0ZXNbXSA9IHsKIAl7IC5iaXRyYXRlID0gMTAsCkBAIC0zMDAzLDcgKzM1MTIsOCBAQAogCiAjaWZkZWYgQ09ORklHX1dMMTJYWF9IVAogI2RlZmluZSBXTDEyWFhfSFRfQ0FQIHsgXAotCS5jYXAgPSBJRUVFODAyMTFfSFRfQ0FQX0dSTl9GTEQgfCBJRUVFODAyMTFfSFRfQ0FQX1NHSV8yMCwgXAorCS5jYXAgPSBJRUVFODAyMTFfSFRfQ0FQX0dSTl9GTEQgfCBJRUVFODAyMTFfSFRfQ0FQX1NHSV8yMCB8IFwKKwkgICAgICAgKDEgPDwgSUVFRTgwMjExX0hUX0NBUF9SWF9TVEJDX1NISUZUKSwgXAogCS5odF9zdXBwb3J0ZWQgPSB0cnVlLCBcCiAJLmFtcGR1X2ZhY3RvciA9IElFRUU4MDIxMV9IVF9NQVhfQU1QRFVfOEssIFwKIAkuYW1wZHVfZGVuc2l0eSA9IElFRUU4MDIxMV9IVF9NUERVX0RFTlNJVFlfOCwgXApAQCAtMzE0MiwxMiArMzY1MiwxOCBAQAogCS5zdG9wID0gd2wxMjcxX29wX3N0b3AsCiAJLmFkZF9pbnRlcmZhY2UgPSB3bDEyNzFfb3BfYWRkX2ludGVyZmFjZSwKIAkucmVtb3ZlX2ludGVyZmFjZSA9IHdsMTI3MV9vcF9yZW1vdmVfaW50ZXJmYWNlLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kID0gd2wxMjcxX29wX3N1c3BlbmQsCisJLnJlc3VtZSA9IHdsMTI3MV9vcF9yZXN1bWUsCisjZW5kaWYKIAkuY29uZmlnID0gd2wxMjcxX29wX2NvbmZpZywKIAkucHJlcGFyZV9tdWx0aWNhc3QgPSB3bDEyNzFfb3BfcHJlcGFyZV9tdWx0aWNhc3QsCiAJLmNvbmZpZ3VyZV9maWx0ZXIgPSB3bDEyNzFfb3BfY29uZmlndXJlX2ZpbHRlciwKIAkudHggPSB3bDEyNzFfb3BfdHgsCiAJLnNldF9rZXkgPSB3bDEyNzFfb3Bfc2V0X2tleSwKIAkuaHdfc2NhbiA9IHdsMTI3MV9vcF9od19zY2FuLAorCS5zY2hlZF9zY2FuX3N0YXJ0ID0gd2wxMjcxX29wX3NjaGVkX3NjYW5fc3RhcnQsCisJLnNjaGVkX3NjYW5fc3RvcCA9IHdsMTI3MV9vcF9zY2hlZF9zY2FuX3N0b3AsCiAJLmJzc19pbmZvX2NoYW5nZWQgPSB3bDEyNzFfb3BfYnNzX2luZm9fY2hhbmdlZCwKIAkuc2V0X2ZyYWdfdGhyZXNob2xkID0gd2wxMjcxX29wX3NldF9mcmFnX3RocmVzaG9sZCwKIAkuc2V0X3J0c190aHJlc2hvbGQgPSB3bDEyNzFfb3Bfc2V0X3J0c190aHJlc2hvbGQsCkBAIC0zMTU3LDYgKzM2NzMsNyBAQAogCS5zdGFfYWRkID0gd2wxMjcxX29wX3N0YV9hZGQsCiAJLnN0YV9yZW1vdmUgPSB3bDEyNzFfb3Bfc3RhX3JlbW92ZSwKIAkuYW1wZHVfYWN0aW9uID0gd2wxMjcxX29wX2FtcGR1X2FjdGlvbiwKKwkudHhfZnJhbWVzX3BlbmRpbmcgPSB3bDEyNzFfdHhfZnJhbWVzX3BlbmRpbmcsCiAJQ0ZHODAyMTFfVEVTVE1PREVfQ01EKHdsMTI3MV90bV9jbWQpCiB9OwogCkBAIC0zMjA3LDggKzM3MjQsNyBAQAogCXVuc2lnbmVkIGxvbmcgcmVzOwogCWludCByZXQ7CiAKLQlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmcmVzKTsKLQorCXJldCA9IGtzdHJ0b3VsKGJ1ZiwgMTAsICZyZXMpOwogCWlmIChyZXQgPCAwKSB7CiAJCXdsMTI3MV93YXJuaW5nKCJpbmNvcnJlY3QgdmFsdWUgd3JpdHRlbiB0byBidF9jb2V4X21vZGUiKTsKIAkJcmV0dXJuIGNvdW50OwpAQCAtMzI3Myw3ICszNzg5LDExIEBACiAKIAlyZXQgPSB3bDEyNzFfZmV0Y2hfbnZzKHdsKTsKIAlpZiAocmV0ID09IDApIHsKLQkJdTggKm52c19wdHIgPSAodTggKil3bC0+bnZzLT5udnM7CisJCS8qIE5PVEU6IFRoZSB3bC0+bnZzLT5udnMgZWxlbWVudCBtdXN0IGJlIGZpcnN0LCBpbgorCQkgKiBvcmRlciB0byBzaW1wbGlmeSB0aGUgY2FzdGluZywgd2UgYXNzdW1lIGl0IGlzIGF0CisJCSAqIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHdsLT5udnMgc3RydWN0dXJlLgorCQkgKi8KKwkJdTggKm52c19wdHIgPSAodTggKil3bC0+bnZzOwogCiAJCXdsLT5tYWNfYWRkclswXSA9IG52c19wdHJbMTFdOwogCQl3bC0+bWFjX2FkZHJbMV0gPSBudnNfcHRyWzEwXTsKQEAgLTMzNDIsNiArMzg2Miw3IEBACiAJCUlFRUU4MDIxMV9IV19DT05ORUNUSU9OX01PTklUT1IgfAogCQlJRUVFODAyMTFfSFdfU1VQUE9SVFNfQ1FNX1JTU0kgfAogCQlJRUVFODAyMTFfSFdfUkVQT1JUU19UWF9BQ0tfU1RBVFVTIHwKKwkJSUVFRTgwMjExX0hXX1NQRUNUUlVNX01HTVQgfAogCQlJRUVFODAyMTFfSFdfQVBfTElOS19QUzsKIAogCXdsLT5ody0+d2lwaHktPmNpcGhlcl9zdWl0ZXMgPSBjaXBoZXJfc3VpdGVzOwpAQCAtMzM1OCw2ICszODc5LDEwIEBACiAJd2wtPmh3LT53aXBoeS0+bWF4X3NjYW5faWVfbGVuID0gV0wxMjcxX0NNRF9URU1QTF9NQVhfU0laRSAtCiAJCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZWFkZXIpOwogCisJLyogbWFrZSBzdXJlIGFsbCBvdXIgY2hhbm5lbHMgZml0IGluIHRoZSBzY2FubmVkX2NoIGJpdG1hc2sgKi8KKwlCVUlMRF9CVUdfT04oQVJSQVlfU0laRSh3bDEyNzFfY2hhbm5lbHMpICsKKwkJICAgICBBUlJBWV9TSVpFKHdsMTI3MV9jaGFubmVsc181Z2h6KSA+CisJCSAgICAgV0wxMjcxX01BWF9DSEFOTkVMUyk7CiAJLyoKIAkgKiBXZSBrZWVwIGxvY2FsIGNvcGllcyBvZiB0aGUgYmFuZCBzdHJ1Y3RzIGJlY2F1c2Ugd2UgbmVlZCB0bwogCSAqIG1vZGlmeSB0aGVtIG9uIGEgcGVyLWRldmljZSBiYXNpcy4KQEAgLTM0NTgsNiArMzk4Myw4IEBACiAJd2wtPmFwX3BzX21hcCA9IDA7CiAJd2wtPmFwX2Z3X3BzX21hcCA9IDA7CiAJd2wtPnF1aXJrcyA9IDA7CisJd2wtPnBsYXRmb3JtX3F1aXJrcyA9IDA7CisJd2wtPnNjaGVkX3NjYW5uaW5nID0gZmFsc2U7CiAKIAltZW1zZXQod2wtPnR4X2ZyYW1lc19tYXAsIDAsIHNpemVvZih3bC0+dHhfZnJhbWVzX21hcCkpOwogCWZvciAoaSA9IDA7IGkgPCBBQ1hfVFhfREVTQ1JJUFRPUlM7IGkrKykKQEAgLTM0NzgsMTEgKzQwMDUsMTcgQEAKIAkJZ290byBlcnJfaHc7CiAJfQogCisJd2wtPmR1bW15X3BhY2tldCA9IHdsMTJ4eF9hbGxvY19kdW1teV9wYWNrZXQod2wpOworCWlmICghd2wtPmR1bW15X3BhY2tldCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9hZ2dyOworCX0KKwogCS8qIFJlZ2lzdGVyIHBsYXRmb3JtIGRldmljZSAqLwogCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcih3bC0+cGxhdF9kZXYpOwogCWlmIChyZXQpIHsKIAkJd2wxMjcxX2Vycm9yKCJjb3VsZG4ndCByZWdpc3RlciBwbGF0Zm9ybSBkZXZpY2UiKTsKLQkJZ290byBlcnJfYWdncjsKKwkJZ290byBlcnJfZHVtbXlfcGFja2V0OwogCX0KIAlkZXZfc2V0X2RydmRhdGEoJndsLT5wbGF0X2Rldi0+ZGV2LCB3bCk7CiAKQEAgLTM1MDgsNiArNDA0MSw5IEBACiBlcnJfcGxhdGZvcm06CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIod2wtPnBsYXRfZGV2KTsKIAorZXJyX2R1bW15X3BhY2tldDoKKwlkZXZfa2ZyZWVfc2tiKHdsLT5kdW1teV9wYWNrZXQpOworCiBlcnJfYWdncjoKIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXdsLT5hZ2dyX2J1Ziwgb3JkZXIpOwogCkBAIC0zNTI3LDYgKzQwNjMsNyBAQAogaW50IHdsMTI3MV9mcmVlX2h3KHN0cnVjdCB3bDEyNzEgKndsKQogewogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHdsLT5wbGF0X2Rldik7CisJZGV2X2tmcmVlX3NrYih3bC0+ZHVtbXlfcGFja2V0KTsKIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXdsLT5hZ2dyX2J1ZiwKIAkJCWdldF9vcmRlcihXTDEyNzFfQUdHUl9CVUZGRVJfU0laRSkpOwogCWtmcmVlKHdsLT5wbGF0X2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvcHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9wcy5jCmluZGV4IDk3MWYxM2UuLmI1OWI2NzcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvcHMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvcHMuYwpAQCAtNDMsNiArNDMsMTAgQEAKIAlpZiAodW5saWtlbHkod2wtPnN0YXRlID09IFdMMTI3MV9TVEFURV9PRkYpKQogCQlnb3RvIG91dDsKIAorCS8qIG91ciB3b3JrIG1pZ2h0IGhhdmUgYmVlbiBhbHJlYWR5IGNhbmNlbGxlZCAqLworCWlmICh1bmxpa2VseSghdGVzdF9iaXQoV0wxMjcxX0ZMQUdfRUxQX1JFUVVFU1RFRCwgJndsLT5mbGFncykpKQorCQlnb3RvIG91dDsKKwogCWlmICh0ZXN0X2JpdChXTDEyNzFfRkxBR19JTl9FTFAsICZ3bC0+ZmxhZ3MpIHx8CiAJICAgICghdGVzdF9iaXQoV0wxMjcxX0ZMQUdfUFNNLCAmd2wtPmZsYWdzKSAmJgogCSAgICAgIXRlc3RfYml0KFdMMTI3MV9GTEFHX0lETEUsICZ3bC0+ZmxhZ3MpKSkKQEAgLTYxLDEyICs2NSwxNiBAQAogLyogUm91dGluZXMgdG8gdG9nZ2xlIHNsZWVwIG1vZGUgd2hpbGUgaW4gRUxQICovCiB2b2lkIHdsMTI3MV9wc19lbHBfc2xlZXAoc3RydWN0IHdsMTI3MSAqd2wpCiB7Ci0JaWYgKHRlc3RfYml0KFdMMTI3MV9GTEFHX1BTTSwgJndsLT5mbGFncykgfHwKLQkgICAgdGVzdF9iaXQoV0wxMjcxX0ZMQUdfSURMRSwgJndsLT5mbGFncykpIHsKLQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmd2wtPmVscF93b3JrKTsKLQkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayh3bC0+aHcsICZ3bC0+ZWxwX3dvcmssCi0JCQkJCSAgICAgbXNlY3NfdG9famlmZmllcyhFTFBfRU5UUllfREVMQVkpKTsKLQl9CisJLyogd2Ugc2hvdWxkbid0IGdldCBjb25zZWN1dGl2ZSBzbGVlcCByZXF1ZXN0cyAqLworCWlmIChXQVJOX09OKHRlc3RfYW5kX3NldF9iaXQoV0wxMjcxX0ZMQUdfRUxQX1JFUVVFU1RFRCwgJndsLT5mbGFncykpKQorCQlyZXR1cm47CisKKwlpZiAoIXRlc3RfYml0KFdMMTI3MV9GTEFHX1BTTSwgJndsLT5mbGFncykgJiYKKwkgICAgIXRlc3RfYml0KFdMMTI3MV9GTEFHX0lETEUsICZ3bC0+ZmxhZ3MpKQorCQlyZXR1cm47CisKKwlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHdsLT5odywgJndsLT5lbHBfd29yaywKKwkJCQkgICAgIG1zZWNzX3RvX2ppZmZpZXMoRUxQX0VOVFJZX0RFTEFZKSk7CiB9CiAKIGludCB3bDEyNzFfcHNfZWxwX3dha2V1cChzdHJ1Y3Qgd2wxMjcxICp3bCkKQEAgLTc3LDYgKzg1LDE2IEBACiAJdTMyIHN0YXJ0X3RpbWUgPSBqaWZmaWVzOwogCWJvb2wgcGVuZGluZyA9IGZhbHNlOwogCisJLyoKKwkgKiB3ZSBtaWdodCB0cnkgdG8gd2FrZSB1cCBldmVuIGlmIHdlIGRpZG4ndCBnbyB0byBzbGVlcAorCSAqIGJlZm9yZSAoZS5nLiBvbiBib290KQorCSAqLworCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdMMTI3MV9GTEFHX0VMUF9SRVFVRVNURUQsICZ3bC0+ZmxhZ3MpKQorCQlyZXR1cm4gMDsKKworCS8qIGRvbid0IGNhbmNlbF9zeW5jIGFzIGl0IG1pZ2h0IGNvbnRlbmQgZm9yIGEgbXV0ZXggYW5kIGRlYWRsb2NrICovCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmd2wtPmVscF93b3JrKTsKKwogCWlmICghdGVzdF9iaXQoV0wxMjcxX0ZMQUdfSU5fRUxQLCAmd2wtPmZsYWdzKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTE0OSw5ICsxNjcsNiBAQAogCWNhc2UgU1RBVElPTl9BQ1RJVkVfTU9ERToKIAlkZWZhdWx0OgogCQl3bDEyNzFfZGVidWcoREVCVUdfUFNNLCAibGVhdmluZyBwc20iKTsKLQkJcmV0ID0gd2wxMjcxX3BzX2VscF93YWtldXAod2wpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7CiAKIAkJLyogZGlzYWJsZSBiZWFjb24gZWFybHkgdGVybWluYXRpb24gKi8KIAkJcmV0ID0gd2wxMjcxX2FjeF9iZXRfZW5hYmxlKHdsLCBmYWxzZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvcHMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9wcy5oCmluZGV4IGM0MWJkMGEuLjI1ZWI5YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9wcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9wcy5oCkBAIC0zNSw0ICszNSw2IEBACiB2b2lkIHdsMTI3MV9wc19saW5rX3N0YXJ0KHN0cnVjdCB3bDEyNzEgKndsLCB1OCBobGlkLCBib29sIGNsZWFuX3F1ZXVlcyk7CiB2b2lkIHdsMTI3MV9wc19saW5rX2VuZChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggaGxpZCk7CiAKKyNkZWZpbmUgV0wxMjcxX1BTX0NPTVBMRVRFX1RJTUVPVVQgNTAwCisKICNlbmRpZiAvKiBfX1dMMTI3MV9QU19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9yZWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9yZWcuaAppbmRleCA5OTA5NjA3Li40NDBhNGVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3JlZy5oCkBAIC0yMDcsNiArMjA3LDggQEAKIAogI2RlZmluZSBDSElQX0lEXzEyNzFfUEcxMCAgICAgICAgICAgICAgKDB4NDAzMDEwMSkKICNkZWZpbmUgQ0hJUF9JRF8xMjcxX1BHMjAgICAgICAgICAgICAgICgweDQwMzAxMTEpCisjZGVmaW5lIENISVBfSURfMTI4M19QRzEwICAgICAgICAgICAgICAoMHgwNTAzMDEwMSkKKyNkZWZpbmUgQ0hJUF9JRF8xMjgzX1BHMjAgICAgICAgICAgICAgICgweDA1MDMwMTExKQogCiAjZGVmaW5lIEVOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU0NTApCiAKQEAgLTQ1MiwyNCArNDU0LDExIEBACiAjZGVmaW5lIEhJX0NGR19VQVJUX1RYX09VVF9HUElPXzE0ICAweDAwMDAwMjAwCiAjZGVmaW5lIEhJX0NGR19VQVJUX1RYX09VVF9HUElPXzcgICAweDAwMDAwNDAwCiAKLS8qCi0gKiBOT1RFOiBVU0VfQUNUSVZFX0hJR0ggY29tcGlsYXRpb24gZmxhZyBzaG91bGQgYmUgZGVmaW5lZCBpbiBtYWtlZmlsZQotICogICAgICAgZm9yIHBsYXRmb3JtcyB1c2luZyBhY3RpdmUgaGlnaCBpbnRlcnJ1cHQgbGV2ZWwKLSAqLwotI2lmZGVmIFVTRV9BQ1RJVkVfSElHSAogI2RlZmluZSBISV9DRkdfREVGX1ZBTCAgICAgICAgICAgICAgXAogCShISV9DRkdfVUFSVF9FTkFCTEUgfCAgICAgICAgXAogCUhJX0NGR19SU1QyMzJfRU5BQkxFIHwgICAgICBcCiAJSElfQ0ZHX0NMT0NLX1JFUV9TRUxFQ1QgfCAgIFwKIAlISV9DRkdfSE9TVF9JTlRfRU5BQkxFKQotI2Vsc2UKLSNkZWZpbmUgSElfQ0ZHX0RFRl9WQUwgICAgICAgICAgICAgIFwKLQkoSElfQ0ZHX1VBUlRfRU5BQkxFIHwgICAgICAgIFwKLQlISV9DRkdfUlNUMjMyX0VOQUJMRSB8ICAgICAgXAotCUhJX0NGR19DTE9DS19SRVFfU0VMRUNUIHwgICBcCi0JSElfQ0ZHX0hPU1RfSU5UX0VOQUJMRSkKLQotI2VuZGlmCiAKICNkZWZpbmUgUkVGX0ZSRVFfMTlfMiAgICAgICAgICAgICAgICAgICAgICAgMAogI2RlZmluZSBSRUZfRlJFUV8yNl8wICAgICAgICAgICAgICAgICAgICAgICAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9yeC5jCmluZGV4IDkxOWI1OWYuLjcwMDkxMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9yeC5jCkBAIC00OCwxOCArNDgsMTQgQEAKIAkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cywKIAkJCSAgICAgdTggYmVhY29uKQogewotCWVudW0gaWVlZTgwMjExX2JhbmQgZGVzY19iYW5kOwotCiAJbWVtc2V0KHN0YXR1cywgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzKSk7CiAKLQlzdGF0dXMtPmJhbmQgPSB3bC0+YmFuZDsKLQogCWlmICgoZGVzYy0+ZmxhZ3MgJiBXTDEyNzFfUlhfREVTQ19CQU5EX01BU0spID09IFdMMTI3MV9SWF9ERVNDX0JBTkRfQkcpCi0JCWRlc2NfYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CisJCXN0YXR1cy0+YmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CiAJZWxzZQotCQlkZXNjX2JhbmQgPSBJRUVFODAyMTFfQkFORF81R0haOworCQlzdGF0dXMtPmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haOwogCi0Jc3RhdHVzLT5yYXRlX2lkeCA9IHdsMTI3MV9yYXRlX3RvX2lkeChkZXNjLT5yYXRlLCBkZXNjX2JhbmQpOworCXN0YXR1cy0+cmF0ZV9pZHggPSB3bDEyNzFfcmF0ZV90b19pZHgoZGVzYy0+cmF0ZSwgc3RhdHVzLT5iYW5kKTsKIAogI2lmZGVmIENPTkZJR19XTDEyWFhfSFQKIAkvKiAxMW4gc3VwcG9ydCAqLwpAQCAtNzYsMTUgKzcyLDE5IEBACiAJICovCiAJd2wtPm5vaXNlID0gZGVzYy0+cnNzaSAtIChkZXNjLT5zbnIgPj4gMSk7CiAKLQlzdGF0dXMtPmZyZXEgPSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koZGVzYy0+Y2hhbm5lbCwgZGVzY19iYW5kKTsKKwlzdGF0dXMtPmZyZXEgPSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koZGVzYy0+Y2hhbm5lbCwKKwkJCQkJCSAgICAgIHN0YXR1cy0+YmFuZCk7CiAKIAlpZiAoZGVzYy0+ZmxhZ3MgJiBXTDEyNzFfUlhfREVTQ19FTkNSWVBUX01BU0spIHsKLQkJc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfSVZfU1RSSVBQRUQgfCBSWF9GTEFHX01NSUNfU1RSSVBQRUQ7CisJCXU4IGRlc2NfZXJyX2NvZGUgPSBkZXNjLT5zdGF0dXMgJiBXTDEyNzFfUlhfREVTQ19TVEFUVVNfTUFTSzsKIAotCQlpZiAobGlrZWx5KCEoZGVzYy0+c3RhdHVzICYgV0wxMjcxX1JYX0RFU0NfREVDUllQVF9GQUlMKSkpCi0JCQlzdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19ERUNSWVBURUQ7Ci0JCWlmICh1bmxpa2VseShkZXNjLT5zdGF0dXMgJiBXTDEyNzFfUlhfREVTQ19NSUNfRkFJTCkpCisJCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX0lWX1NUUklQUEVEIHwgUlhfRkxBR19NTUlDX1NUUklQUEVEIHwKKwkJCQlSWF9GTEFHX0RFQ1JZUFRFRDsKKworCQlpZiAodW5saWtlbHkoZGVzY19lcnJfY29kZSA9PSBXTDEyNzFfUlhfREVTQ19NSUNfRkFJTCkpIHsKIAkJCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX01NSUNfRVJST1I7CisJCQl3bDEyNzFfd2FybmluZygiTWljaGFlbCBNSUMgZXJyb3IiKTsKKwkJfQogCX0KIH0KIApAQCAtMTAzLDYgKzEwMywyNSBAQAogCWlmICh1bmxpa2VseSh3bC0+c3RhdGUgPT0gV0wxMjcxX1NUQVRFX1BMVCkpCiAJCXJldHVybiAtRUlOVkFMOwogCisJLyogdGhlIGRhdGEgcmVhZCBzdGFydHMgd2l0aCB0aGUgZGVzY3JpcHRvciAqLworCWRlc2MgPSAoc3RydWN0IHdsMTI3MV9yeF9kZXNjcmlwdG9yICopIGRhdGE7CisKKwlzd2l0Y2ggKGRlc2MtPnN0YXR1cyAmIFdMMTI3MV9SWF9ERVNDX1NUQVRVU19NQVNLKSB7CisJLyogZGlzY2FyZCBjb3JydXB0ZWQgcGFja2V0cyAqLworCWNhc2UgV0wxMjcxX1JYX0RFU0NfRFJJVkVSX1JYX1FfRkFJTDoKKwljYXNlIFdMMTI3MV9SWF9ERVNDX0RFQ1JZUFRfRkFJTDoKKwkJd2wxMjcxX3dhcm5pbmcoImNvcnJ1cHRlZCBwYWNrZXQgaW4gUlggd2l0aCBzdGF0dXM6IDB4JXgiLAorCQkJICAgICAgIGRlc2MtPnN0YXR1cyAmIFdMMTI3MV9SWF9ERVNDX1NUQVRVU19NQVNLKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJY2FzZSBXTDEyNzFfUlhfREVTQ19TVUNDRVNTOgorCWNhc2UgV0wxMjcxX1JYX0RFU0NfTUlDX0ZBSUw6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXdsMTI3MV9lcnJvcigiaW52YWxpZCBSWCBkZXNjcmlwdG9yIHN0YXR1czogMHgleCIsCisJCQkgICAgIGRlc2MtPnN0YXR1cyAmIFdMMTI3MV9SWF9ERVNDX1NUQVRVU19NQVNLKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJc2tiID0gX19kZXZfYWxsb2Nfc2tiKGxlbmd0aCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFza2IpIHsKIAkJd2wxMjcxX2Vycm9yKCJDb3VsZG4ndCBhbGxvY2F0ZSBSWCBmcmFtZSIpOwpAQCAtMTEyLDkgKzEzMSw2IEBACiAJYnVmID0gc2tiX3B1dChza2IsIGxlbmd0aCk7CiAJbWVtY3B5KGJ1ZiwgZGF0YSwgbGVuZ3RoKTsKIAotCS8qIHRoZSBkYXRhIHJlYWQgc3RhcnRzIHdpdGggdGhlIGRlc2NyaXB0b3IgKi8KLQlkZXNjID0gKHN0cnVjdCB3bDEyNzFfcnhfZGVzY3JpcHRvciAqKSBidWY7Ci0KIAkvKiBub3cgd2UgcHVsbCB0aGUgZGVzY3JpcHRvciBvdXQgb2YgdGhlIGJ1ZmZlciAqLwogCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpkZXNjKSk7CiAKQEAgLTEyNCw3ICsxNDAsOCBAQAogCiAJd2wxMjcxX3J4X3N0YXR1cyh3bCwgZGVzYywgSUVFRTgwMjExX1NLQl9SWENCKHNrYiksIGJlYWNvbik7CiAKLQl3bDEyNzFfZGVidWcoREVCVUdfUlgsICJyeCBza2IgMHglcDogJWQgQiAlcyIsIHNrYiwgc2tiLT5sZW4sCisJd2wxMjcxX2RlYnVnKERFQlVHX1JYLCAicnggc2tiIDB4JXA6ICVkIEIgJXMiLCBza2IsCisJCSAgICAgc2tiLT5sZW4gLSBkZXNjLT5wYWRfbGVuLAogCQkgICAgIGJlYWNvbiA/ICJiZWFjb24iIDogIiIpOwogCiAJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIGRlc2MtPnBhZF9sZW4pOwpAQCAtMTYzLDE4ICsxODAsMjUgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJLyoKLQkJICogQ2hvb3NlIHRoZSBibG9jayB3ZSB3YW50IHRvIHJlYWQKLQkJICogRm9yIGFnZ3JlZ2F0ZWQgcGFja2V0cywgb25seSB0aGUgZmlyc3QgbWVtb3J5IGJsb2NrIHNob3VsZAotCQkgKiBiZSByZXRyaWV2ZWQuIFRoZSBGVyB0YWtlcyBjYXJlIG9mIHRoZSByZXN0LgotCQkgKi8KLQkJbWVtX2Jsb2NrID0gd2wxMjcxX3J4X2dldF9tZW1fYmxvY2soc3RhdHVzLCBkcnZfcnhfY291bnRlcik7Ci0JCXdsLT5yeF9tZW1fcG9vbF9hZGRyLmFkZHIgPSAobWVtX2Jsb2NrIDw8IDgpICsKLQkJCWxlMzJfdG9fY3B1KHdsX21lbV9tYXAtPnBhY2tldF9tZW1vcnlfcG9vbF9zdGFydCk7Ci0JCXdsLT5yeF9tZW1fcG9vbF9hZGRyLmFkZHJfZXh0cmEgPQotCQkJd2wtPnJ4X21lbV9wb29sX2FkZHIuYWRkciArIDQ7Ci0JCXdsMTI3MV93cml0ZSh3bCwgV0wxMjcxX1NMVl9SRUdfREFUQSwgJndsLT5yeF9tZW1fcG9vbF9hZGRyLAotCQkJCXNpemVvZih3bC0+cnhfbWVtX3Bvb2xfYWRkciksIGZhbHNlKTsKKwkJaWYgKHdsLT5jaGlwLmlkICE9IENISVBfSURfMTI4M19QRzIwKSB7CisJCQkvKgorCQkJICogQ2hvb3NlIHRoZSBibG9jayB3ZSB3YW50IHRvIHJlYWQKKwkJCSAqIEZvciBhZ2dyZWdhdGVkIHBhY2tldHMsIG9ubHkgdGhlIGZpcnN0IG1lbW9yeSBibG9jaworCQkJICogc2hvdWxkIGJlIHJldHJpZXZlZC4gVGhlIEZXIHRha2VzIGNhcmUgb2YgdGhlIHJlc3QuCisJCQkgKi8KKwkJCW1lbV9ibG9jayA9IHdsMTI3MV9yeF9nZXRfbWVtX2Jsb2NrKHN0YXR1cywKKwkJCQkJCQkgICAgZHJ2X3J4X2NvdW50ZXIpOworCisJCQl3bC0+cnhfbWVtX3Bvb2xfYWRkci5hZGRyID0gKG1lbV9ibG9jayA8PCA4KSArCisJCQkgICBsZTMyX3RvX2NwdSh3bF9tZW1fbWFwLT5wYWNrZXRfbWVtb3J5X3Bvb2xfc3RhcnQpOworCisJCQl3bC0+cnhfbWVtX3Bvb2xfYWRkci5hZGRyX2V4dHJhID0KKwkJCQl3bC0+cnhfbWVtX3Bvb2xfYWRkci5hZGRyICsgNDsKKworCQkJd2wxMjcxX3dyaXRlKHdsLCBXTDEyNzFfU0xWX1JFR19EQVRBLAorCQkJCSAgICAgJndsLT5yeF9tZW1fcG9vbF9hZGRyLAorCQkJCSAgICAgc2l6ZW9mKHdsLT5yeF9tZW1fcG9vbF9hZGRyKSwgZmFsc2UpOworCQl9CiAKIAkJLyogUmVhZCBhbGwgYXZhaWxhYmxlIHBhY2tldHMgYXQgb25jZSAqLwogCQl3bDEyNzFfcmVhZCh3bCwgV0wxMjcxX1NMVl9NRU1fREFUQSwgd2wtPmFnZ3JfYnVmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NjYW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zY2FuLmMKaW5kZXggNDIwNjUzYS4uZjM3ZTVhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NjYW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc2Nhbi5jCkBAIC00OCw4ICs0OCw3IEBACiAJCWdvdG8gb3V0OwogCiAJd2wtPnNjYW4uc3RhdGUgPSBXTDEyNzFfU0NBTl9TVEFURV9JRExFOwotCWtmcmVlKHdsLT5zY2FuLnNjYW5uZWRfY2gpOwotCXdsLT5zY2FuLnNjYW5uZWRfY2ggPSBOVUxMOworCW1lbXNldCh3bC0+c2Nhbi5zY2FubmVkX2NoLCAwLCBzaXplb2Yod2wtPnNjYW4uc2Nhbm5lZF9jaCkpOwogCXdsLT5zY2FuLnJlcSA9IE5VTEw7CiAJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHdsLT5odywgZmFsc2UpOwogCkBAIC04Nyw3ICs4Niw3IEBACiAKIAkJZmxhZ3MgPSByZXEtPmNoYW5uZWxzW2ldLT5mbGFnczsKIAotCQlpZiAoIXdsLT5zY2FuLnNjYW5uZWRfY2hbaV0gJiYKKwkJaWYgKCF0ZXN0X2JpdChpLCB3bC0+c2Nhbi5zY2FubmVkX2NoKSAmJgogCQkgICAgIShmbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKSAmJgogCQkgICAgKCghIShmbGFncyAmIElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTikpID09IHBhc3NpdmUpICYmCiAJCSAgICAocmVxLT5jaGFubmVsc1tpXS0+YmFuZCA9PSBiYW5kKSkgewpAQCAtMTI0LDcgKzEyMyw3IEBACiAJCQltZW1zZXQoJmNoYW5uZWxzW2pdLmJzc2lkX21zYiwgMHhmZiwgMik7CiAKIAkJCS8qIE1hcmsgdGhlIGNoYW5uZWxzIHdlIGFscmVhZHkgdXNlZCAqLwotCQkJd2wtPnNjYW4uc2Nhbm5lZF9jaFtpXSA9IHRydWU7CisJCQlzZXRfYml0KGksIHdsLT5zY2FuLnNjYW5uZWRfY2gpOwogCiAJCQlqKys7CiAJCX0KQEAgLTI5MSw2ICsyOTAsMTIgQEAKIGludCB3bDEyNzFfc2NhbihzdHJ1Y3Qgd2wxMjcxICp3bCwgY29uc3QgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbiwKIAkJc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKQogeworCS8qCisJICogY2ZnODAyMTEgc2hvdWxkIGd1YXJhbnRlZSB0aGF0IHdlIGRvbid0IGdldCBtb3JlIGNoYW5uZWxzCisJICogdGhhbiB3aGF0IHdlIGhhdmUgcmVnaXN0ZXJlZC4KKwkgKi8KKwlCVUdfT04ocmVxLT5uX2NoYW5uZWxzID4gV0wxMjcxX01BWF9DSEFOTkVMUyk7CisKIAlpZiAod2wtPnNjYW4uc3RhdGUgIT0gV0wxMjcxX1NDQU5fU1RBVEVfSURMRSkKIAkJcmV0dXJuIC1FQlVTWTsKIApAQCAtMzA0LDEwICszMDksOCBAQAogCX0KIAogCXdsLT5zY2FuLnJlcSA9IHJlcTsKKwltZW1zZXQod2wtPnNjYW4uc2Nhbm5lZF9jaCwgMCwgc2l6ZW9mKHdsLT5zY2FuLnNjYW5uZWRfY2gpKTsKIAotCXdsLT5zY2FuLnNjYW5uZWRfY2ggPSBrY2FsbG9jKHJlcS0+bl9jaGFubmVscywKLQkJCQkgICAgICBzaXplb2YoKndsLT5zY2FuLnNjYW5uZWRfY2gpLAotCQkJCSAgICAgIEdGUF9LRVJORUwpOwogCS8qIHdlIGFzc3VtZSBmYWlsdXJlIHNvIHRoYXQgdGltZW91dCBzY2VuYXJpb3MgYXJlIGhhbmRsZWQgY29ycmVjdGx5ICovCiAJd2wtPnNjYW4uZmFpbGVkID0gdHJ1ZTsKIAlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHdsLT5odywgJndsLT5zY2FuX2NvbXBsZXRlX3dvcmssCkBAIC0zMTcsMyArMzIwLDI0NiBAQAogCiAJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBpbnQKK3dsMTI3MV9zY2FuX2dldF9zY2hlZF9zY2FuX2NoYW5uZWxzKHN0cnVjdCB3bDEyNzEgKndsLAorCQkJCSAgICBzdHJ1Y3QgY2ZnODAyMTFfc2NoZWRfc2Nhbl9yZXF1ZXN0ICpyZXEsCisJCQkJICAgIHN0cnVjdCBjb25uX3NjYW5fY2hfcGFyYW1zICpjaGFubmVscywKKwkJCQkgICAgdTMyIGJhbmQsIGJvb2wgcmFkYXIsIGJvb2wgcGFzc2l2ZSwKKwkJCQkgICAgaW50IHN0YXJ0KQoreworCXN0cnVjdCBjb25mX3NjaGVkX3NjYW5fc2V0dGluZ3MgKmMgPSAmd2wtPmNvbmYuc2NoZWRfc2NhbjsKKwlpbnQgaSwgajsKKwl1MzIgZmxhZ3M7CisKKwlmb3IgKGkgPSAwLCBqID0gc3RhcnQ7CisJICAgICBpIDwgcmVxLT5uX2NoYW5uZWxzICYmIGogPCBNQVhfQ0hBTk5FTFNfQUxMX0JBTkRTOworCSAgICAgaSsrKSB7CisJCWZsYWdzID0gcmVxLT5jaGFubmVsc1tpXS0+ZmxhZ3M7CisKKwkJaWYgKCEoZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkgJiYKKwkJICAgICgoZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4pID09IHBhc3NpdmUpICYmCisJCSAgICAoKGZsYWdzICYgSUVFRTgwMjExX0NIQU5fUkFEQVIpID09IHJhZGFyKSAmJgorCQkgICAgKHJlcS0+Y2hhbm5lbHNbaV0tPmJhbmQgPT0gYmFuZCkpIHsKKwkJCXdsMTI3MV9kZWJ1ZyhERUJVR19TQ0FOLCAiYmFuZCAlZCwgY2VudGVyX2ZyZXEgJWQgIiwKKwkJCQkgICAgIHJlcS0+Y2hhbm5lbHNbaV0tPmJhbmQsCisJCQkJICAgICByZXEtPmNoYW5uZWxzW2ldLT5jZW50ZXJfZnJlcSk7CisJCQl3bDEyNzFfZGVidWcoREVCVUdfU0NBTiwgImh3X3ZhbHVlICVkLCBmbGFncyAlWCIsCisJCQkJICAgICByZXEtPmNoYW5uZWxzW2ldLT5od192YWx1ZSwKKwkJCQkgICAgIHJlcS0+Y2hhbm5lbHNbaV0tPmZsYWdzKTsKKwkJCXdsMTI3MV9kZWJ1ZyhERUJVR19TQ0FOLCAibWF4X3Bvd2VyICVkIiwKKwkJCQkgICAgIHJlcS0+Y2hhbm5lbHNbaV0tPm1heF9wb3dlcik7CisKKwkJCWlmIChmbGFncyAmIElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTikgeworCQkJCWNoYW5uZWxzW2pdLnBhc3NpdmVfZHVyYXRpb24gPQorCQkJCQljcHVfdG9fbGUxNihjLT5kd2VsbF90aW1lX3Bhc3NpdmUpOworCQkJfSBlbHNlIHsKKwkJCQljaGFubmVsc1tqXS5taW5fZHVyYXRpb24gPQorCQkJCQljcHVfdG9fbGUxNihjLT5taW5fZHdlbGxfdGltZV9hY3RpdmUpOworCQkJCWNoYW5uZWxzW2pdLm1heF9kdXJhdGlvbiA9CisJCQkJCWNwdV90b19sZTE2KGMtPm1heF9kd2VsbF90aW1lX2FjdGl2ZSk7CisJCQl9CisJCQljaGFubmVsc1tqXS50eF9wb3dlcl9hdHQgPSByZXEtPmNoYW5uZWxzW2pdLT5tYXhfcG93ZXI7CisJCQljaGFubmVsc1tqXS5jaGFubmVsID0gcmVxLT5jaGFubmVsc1tpXS0+aHdfdmFsdWU7CisKKwkJCWorKzsKKwkJfQorCX0KKworCXJldHVybiBqIC0gc3RhcnQ7Cit9CisKK3N0YXRpYyBpbnQKK3dsMTI3MV9zY2FuX3NjaGVkX3NjYW5fY2hhbm5lbHMoc3RydWN0IHdsMTI3MSAqd2wsCisJCQkJc3RydWN0IGNmZzgwMjExX3NjaGVkX3NjYW5fcmVxdWVzdCAqcmVxLAorCQkJCXN0cnVjdCB3bDEyNzFfY21kX3NjaGVkX3NjYW5fY29uZmlnICpjZmcpCit7CisJaW50IGlkeCA9IDA7CisKKwljZmctPnBhc3NpdmVbMF0gPQorCQl3bDEyNzFfc2Nhbl9nZXRfc2NoZWRfc2Nhbl9jaGFubmVscyh3bCwgcmVxLCBjZmctPmNoYW5uZWxzLAorCQkJCQkJICAgIElFRUU4MDIxMV9CQU5EXzJHSFosCisJCQkJCQkgICAgZmFsc2UsIHRydWUsIGlkeCk7CisJaWR4ICs9IGNmZy0+cGFzc2l2ZVswXTsKKworCWNmZy0+YWN0aXZlWzBdID0KKwkJd2wxMjcxX3NjYW5fZ2V0X3NjaGVkX3NjYW5fY2hhbm5lbHMod2wsIHJlcSwgY2ZnLT5jaGFubmVscywKKwkJCQkJCSAgICBJRUVFODAyMTFfQkFORF8yR0haLAorCQkJCQkJICAgIGZhbHNlLCBmYWxzZSwgaWR4KTsKKwlpZHggKz0gY2ZnLT5hY3RpdmVbMF07CisKKwljZmctPnBhc3NpdmVbMV0gPQorCQl3bDEyNzFfc2Nhbl9nZXRfc2NoZWRfc2Nhbl9jaGFubmVscyh3bCwgcmVxLCBjZmctPmNoYW5uZWxzLAorCQkJCQkJICAgIElFRUU4MDIxMV9CQU5EXzVHSFosCisJCQkJCQkgICAgZmFsc2UsIHRydWUsIGlkeCk7CisJaWR4ICs9IGNmZy0+cGFzc2l2ZVsxXTsKKworCWNmZy0+YWN0aXZlWzFdID0KKwkJd2wxMjcxX3NjYW5fZ2V0X3NjaGVkX3NjYW5fY2hhbm5lbHMod2wsIHJlcSwgY2ZnLT5jaGFubmVscywKKwkJCQkJCSAgICBJRUVFODAyMTFfQkFORF81R0haLAorCQkJCQkJICAgIGZhbHNlLCBmYWxzZSwgMTQpOworCWlkeCArPSBjZmctPmFjdGl2ZVsxXTsKKworCWNmZy0+ZGZzID0KKwkJd2wxMjcxX3NjYW5fZ2V0X3NjaGVkX3NjYW5fY2hhbm5lbHMod2wsIHJlcSwgY2ZnLT5jaGFubmVscywKKwkJCQkJCSAgICBJRUVFODAyMTFfQkFORF81R0haLAorCQkJCQkJICAgIHRydWUsIGZhbHNlLCBpZHgpOworCWlkeCArPSBjZmctPmRmczsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19TQ0FOLCAiICAgIDIuNEdIejogYWN0aXZlICVkIHBhc3NpdmUgJWQiLAorCQkgICAgIGNmZy0+YWN0aXZlWzBdLCBjZmctPnBhc3NpdmVbMF0pOworCXdsMTI3MV9kZWJ1ZyhERUJVR19TQ0FOLCAiICAgIDVHSHo6IGFjdGl2ZSAlZCBwYXNzaXZlICVkIiwKKwkJICAgICBjZmctPmFjdGl2ZVsxXSwgY2ZnLT5wYXNzaXZlWzFdKTsKKworCXJldHVybiBpZHg7Cit9CisKK2ludCB3bDEyNzFfc2Nhbl9zY2hlZF9zY2FuX2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCwKKwkJCQkgIHN0cnVjdCBjZmc4MDIxMV9zY2hlZF9zY2FuX3JlcXVlc3QgKnJlcSwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfc2NoZWRfc2Nhbl9pZXMgKmllcykKK3sKKwlzdHJ1Y3Qgd2wxMjcxX2NtZF9zY2hlZF9zY2FuX2NvbmZpZyAqY2ZnID0gTlVMTDsKKwlzdHJ1Y3QgY29uZl9zY2hlZF9zY2FuX3NldHRpbmdzICpjID0gJndsLT5jb25mLnNjaGVkX3NjYW47CisJaW50IGksIHRvdGFsX2NoYW5uZWxzLCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQ01ELCAiY21kIHNjaGVkX3NjYW4gc2NhbiBjb25maWciKTsKKworCWNmZyA9IGt6YWxsb2Moc2l6ZW9mKCpjZmcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNmZykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljZmctPnJzc2lfdGhyZXNob2xkID0gYy0+cnNzaV90aHJlc2hvbGQ7CisJY2ZnLT5zbnJfdGhyZXNob2xkICA9IGMtPnNucl90aHJlc2hvbGQ7CisJY2ZnLT5uX3Byb2JlX3JlcXMgPSBjLT5udW1fcHJvYmVfcmVxczsKKwkvKiBjeWNsZXMgc2V0IHRvIDAgaXQgbWVhbnMgaW5maW5pdGUgKHVudGlsIG1hbnVhbGx5IHN0b3BwZWQpICovCisJY2ZnLT5jeWNsZXMgPSAwOworCS8qIHJlcG9ydCBBUHMgd2hlbiBhdCBsZWFzdCAxIGlzIGZvdW5kICovCisJY2ZnLT5yZXBvcnRfYWZ0ZXIgPSAxOworCS8qIGRvbid0IHN0b3Agc2Nhbm5pbmcgYXV0b21hdGljYWxseSB3aGVuIHNvbWV0aGluZyBpcyBmb3VuZCAqLworCWNmZy0+dGVybWluYXRlID0gMDsKKwljZmctPnRhZyA9IFdMMTI3MV9TQ0FOX0RFRkFVTFRfVEFHOworCS8qIGRvbid0IGZpbHRlciBvbiBCU1MgdHlwZSAqLworCWNmZy0+YnNzX3R5cGUgPSBTQ0FOX0JTU19UWVBFX0FOWTsKKwkvKiBjdXJyZW50bHkgTkw4MDIxMSBzdXBwb3J0cyBvbmx5IGEgc2luZ2xlIGludGVydmFsICovCisJZm9yIChpID0gMDsgaSA8IFNDQU5fTUFYX0NZQ0xFX0lOVEVSVkFMUzsgaSsrKQorCQljZmctPmludGVydmFsc1tpXSA9IGNwdV90b19sZTMyKHJlcS0+aW50ZXJ2YWwpOworCisJaWYgKHJlcS0+c3NpZHNbMF0uc3NpZF9sZW4gJiYgcmVxLT5zc2lkc1swXS5zc2lkKSB7CisJCWNmZy0+ZmlsdGVyX3R5cGUgPSBTQ0FOX1NTSURfRklMVEVSX1NQRUNJRklDOworCQljZmctPnNzaWRfbGVuID0gcmVxLT5zc2lkc1swXS5zc2lkX2xlbjsKKwkJbWVtY3B5KGNmZy0+c3NpZCwgcmVxLT5zc2lkc1swXS5zc2lkLAorCQkgICAgICAgcmVxLT5zc2lkc1swXS5zc2lkX2xlbik7CisJfSBlbHNlIHsKKwkJY2ZnLT5maWx0ZXJfdHlwZSA9IFNDQU5fU1NJRF9GSUxURVJfQU5ZOworCQljZmctPnNzaWRfbGVuID0gMDsKKwl9CisKKwl0b3RhbF9jaGFubmVscyA9IHdsMTI3MV9zY2FuX3NjaGVkX3NjYW5fY2hhbm5lbHMod2wsIHJlcSwgY2ZnKTsKKwlpZiAodG90YWxfY2hhbm5lbHMgPT0gMCkgeworCQl3bDEyNzFfZXJyb3IoInNjYW4gY2hhbm5lbCBsaXN0IGlzIGVtcHR5Iik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChjZmctPmFjdGl2ZVswXSkgeworCQlyZXQgPSB3bDEyNzFfY21kX2J1aWxkX3Byb2JlX3JlcSh3bCwgcmVxLT5zc2lkc1swXS5zc2lkLAorCQkJCQkJIHJlcS0+c3NpZHNbMF0uc3NpZF9sZW4sCisJCQkJCQkgaWVzLT5pZVtJRUVFODAyMTFfQkFORF8yR0haXSwKKwkJCQkJCSBpZXMtPmxlbltJRUVFODAyMTFfQkFORF8yR0haXSwKKwkJCQkJCSBJRUVFODAyMTFfQkFORF8yR0haKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXdsMTI3MV9lcnJvcigiMi40R0h6IFBST0JFIHJlcXVlc3QgdGVtcGxhdGUgZmFpbGVkIik7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWlmIChjZmctPmFjdGl2ZVsxXSkgeworCQlyZXQgPSB3bDEyNzFfY21kX2J1aWxkX3Byb2JlX3JlcSh3bCwgIHJlcS0+c3NpZHNbMF0uc3NpZCwKKwkJCQkJCSByZXEtPnNzaWRzWzBdLnNzaWRfbGVuLAorCQkJCQkJIGllcy0+aWVbSUVFRTgwMjExX0JBTkRfNUdIWl0sCisJCQkJCQkgaWVzLT5sZW5bSUVFRTgwMjExX0JBTkRfNUdIWl0sCisJCQkJCQkgSUVFRTgwMjExX0JBTkRfNUdIWik7CisJCWlmIChyZXQgPCAwKSB7CisJCQl3bDEyNzFfZXJyb3IoIjVHSHogUFJPQkUgcmVxdWVzdCB0ZW1wbGF0ZSBmYWlsZWQiKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJd2wxMjcxX2R1bXAoREVCVUdfU0NBTiwgIlNDQU5fQ0ZHOiAiLCBjZmcsIHNpemVvZigqY2ZnKSk7CisKKwlyZXQgPSB3bDEyNzFfY21kX3NlbmQod2wsIENNRF9DT05ORUNUSU9OX1NDQU5fQ0ZHLCBjZmcsCisJCQkgICAgICBzaXplb2YoKmNmZyksIDApOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV9lcnJvcigiU0NBTiBjb25maWd1cmF0aW9uIGZhaWxlZCIpOworCQlnb3RvIG91dDsKKwl9CitvdXQ6CisJa2ZyZWUoY2ZnKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX3NjYW5fc2NoZWRfc2Nhbl9zdGFydChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlzdHJ1Y3Qgd2wxMjcxX2NtZF9zY2hlZF9zY2FuX3N0YXJ0ICpzdGFydDsKKwlpbnQgcmV0ID0gMDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19DTUQsICJjbWQgcGVyaW9kaWMgc2NhbiBzdGFydCIpOworCisJaWYgKHdsLT5ic3NfdHlwZSAhPSBCU1NfVFlQRV9TVEFfQlNTKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAoIXRlc3RfYml0KFdMMTI3MV9GTEFHX0lETEUsICZ3bC0+ZmxhZ3MpKQorCQlyZXR1cm4gLUVCVVNZOworCisJc3RhcnQgPSBremFsbG9jKHNpemVvZigqc3RhcnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXJ0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXN0YXJ0LT50YWcgPSBXTDEyNzFfU0NBTl9ERUZBVUxUX1RBRzsKKworCXJldCA9IHdsMTI3MV9jbWRfc2VuZCh3bCwgQ01EX1NUQVJUX1BFUklPRElDX1NDQU4sIHN0YXJ0LAorCQkJICAgICAgc2l6ZW9mKCpzdGFydCksIDApOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV9lcnJvcigiZmFpbGVkIHRvIHNlbmQgc2NhbiBzdGFydCBjb21tYW5kIik7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCitvdXRfZnJlZToKKwlrZnJlZShzdGFydCk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCB3bDEyNzFfc2Nhbl9zY2hlZF9zY2FuX3Jlc3VsdHMoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJd2wxMjcxX2RlYnVnKERFQlVHX1NDQU4sICJnb3QgcGVyaW9kaWMgc2NhbiByZXN1bHRzIik7CisKKwlpZWVlODAyMTFfc2NoZWRfc2Nhbl9yZXN1bHRzKHdsLT5odyk7Cit9CisKK3ZvaWQgd2wxMjcxX3NjYW5fc2NoZWRfc2Nhbl9zdG9wKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCB3bDEyNzFfY21kX3NjaGVkX3NjYW5fc3RvcCAqc3RvcDsKKwlpbnQgcmV0ID0gMDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19DTUQsICJjbWQgcGVyaW9kaWMgc2NhbiBzdG9wIik7CisKKwkvKiBGSVhNRTogd2hhdCB0byBkbyBpZiBhbGxvYydpbmcgdG8gc3RvcCBmYWlscz8gKi8KKwlzdG9wID0ga3phbGxvYyhzaXplb2YoKnN0b3ApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0b3ApIHsKKwkJd2wxMjcxX2Vycm9yKCJmYWlsZWQgdG8gYWxsb2MgbWVtb3J5IHRvIHNlbmQgc2NoZWQgc2NhbiBzdG9wIik7CisJCXJldHVybjsKKwl9CisKKwlzdG9wLT50YWcgPSBXTDEyNzFfU0NBTl9ERUZBVUxUX1RBRzsKKworCXJldCA9IHdsMTI3MV9jbWRfc2VuZCh3bCwgQ01EX1NUT1BfUEVSSU9ESUNfU0NBTiwgc3RvcCwKKwkJCSAgICAgIHNpemVvZigqc3RvcCksIDApOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV9lcnJvcigiZmFpbGVkIHRvIHNlbmQgc2NoZWQgc2NhbiBzdG9wIGNvbW1hbmQiKTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisJd2wtPnNjaGVkX3NjYW5uaW5nID0gZmFsc2U7CisKK291dF9mcmVlOgorCWtmcmVlKHN0b3ApOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NjYW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zY2FuLmgKaW5kZXggNDIxYTc1MC4uYzgzMzE5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NjYW4uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc2Nhbi5oCkBAIC0zMyw2ICszMywxMiBAQAogCQkJCWNvbnN0IHU4ICppZSwgc2l6ZV90IGllX2xlbiwgdTggYmFuZCk7CiB2b2lkIHdsMTI3MV9zY2FuX3N0bShzdHJ1Y3Qgd2wxMjcxICp3bCk7CiB2b2lkIHdsMTI3MV9zY2FuX2NvbXBsZXRlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK2ludCB3bDEyNzFfc2Nhbl9zY2hlZF9zY2FuX2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCwKKwkJCQkgICAgIHN0cnVjdCBjZmc4MDIxMV9zY2hlZF9zY2FuX3JlcXVlc3QgKnJlcSwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc2NoZWRfc2Nhbl9pZXMgKmllcyk7CitpbnQgd2wxMjcxX3NjYW5fc2NoZWRfc2Nhbl9zdGFydChzdHJ1Y3Qgd2wxMjcxICp3bCk7Cit2b2lkIHdsMTI3MV9zY2FuX3NjaGVkX3NjYW5fc3RvcChzdHJ1Y3Qgd2wxMjcxICp3bCk7Cit2b2lkIHdsMTI3MV9zY2FuX3NjaGVkX3NjYW5fcmVzdWx0cyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CiAKICNkZWZpbmUgV0wxMjcxX1NDQU5fTUFYX0NIQU5ORUxTICAgICAgIDI0CiAjZGVmaW5lIFdMMTI3MV9TQ0FOX0RFRkFVTFRfVEFHICAgICAgICAxCkBAIC0xMDYsNCArMTEyLDExMiBAQAogCV9fbGUzMiB0aW1lb3V0OwogfSBfX3BhY2tlZDsKIAorI2RlZmluZSBNQVhfQ0hBTk5FTFNfQUxMX0JBTkRTIDQxCisjZGVmaW5lIFNDQU5fTUFYX0NZQ0xFX0lOVEVSVkFMUyAxNgorI2RlZmluZSBTQ0FOX01BWF9CQU5EUyAzCisKK2VudW0geworCVNDQU5fQ0hBTk5FTF9UWVBFXzJHSFpfUEFTU0lWRSwKKwlTQ0FOX0NIQU5ORUxfVFlQRV8yR0haX0FDVElWRSwKKwlTQ0FOX0NIQU5ORUxfVFlQRV81R0haX1BBU1NJVkUsCisJU0NBTl9DSEFOTkVMX1RZUEVfNUdIWl9BQ1RJVkUsCisJU0NBTl9DSEFOTkVMX1RZUEVfNUdIWl9ERlMsCit9OworCitlbnVtIHsKKwlTQ0FOX1NTSURfRklMVEVSX0FOWSAgICAgID0gMCwKKwlTQ0FOX1NTSURfRklMVEVSX1NQRUNJRklDID0gMSwKKwlTQ0FOX1NTSURfRklMVEVSX0xJU1QgICAgID0gMiwKKwlTQ0FOX1NTSURfRklMVEVSX0RJU0FCTEVEID0gMworfTsKKworZW51bSB7CisJU0NBTl9CU1NfVFlQRV9JTkRFUEVOREVOVCwKKwlTQ0FOX0JTU19UWVBFX0lORlJBU1RSVUNUVVJFLAorCVNDQU5fQlNTX1RZUEVfQU5ZLAorfTsKKworc3RydWN0IGNvbm5fc2Nhbl9jaF9wYXJhbXMgeworCV9fbGUxNiBtaW5fZHVyYXRpb247CisJX19sZTE2IG1heF9kdXJhdGlvbjsKKwlfX2xlMTYgcGFzc2l2ZV9kdXJhdGlvbjsKKworCXU4ICBjaGFubmVsOworCXU4ICB0eF9wb3dlcl9hdHQ7CisKKwkvKiBiaXQgMDogREZTIGNoYW5uZWw7IGJpdCAxOiBERlMgZW5hYmxlZCAqLworCXU4ICBmbGFnczsKKworCXU4ICBwYWRkaW5nWzNdOworfSBfX3BhY2tlZDsKKworc3RydWN0IHdsMTI3MV9jbWRfc2NoZWRfc2Nhbl9jb25maWcgeworCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7CisKKwlfX2xlMzIgaW50ZXJ2YWxzW1NDQU5fTUFYX0NZQ0xFX0lOVEVSVkFMU107CisKKwlzOCByc3NpX3RocmVzaG9sZDsgLyogZm9yIGZpbHRlcmluZyAoaW4gZEJtKSAqLworCXM4IHNucl90aHJlc2hvbGQ7ICAvKiBmb3IgZmlsdGVyaW5nIChpbiBkQikgKi8KKworCXU4IGN5Y2xlczsgICAgICAgLyogbWF4aW11bSBudW1iZXIgb2Ygc2NhbiBjeWNsZXMgKi8KKwl1OCByZXBvcnRfYWZ0ZXI7IC8qIHJlcG9ydCB3aGVuIHRoaXMgbnVtYmVyIG9mIHJlc3VsdHMgYXJlIHJlY2VpdmVkICovCisJdTggdGVybWluYXRlOyAgICAvKiBzdG9wIHNjYW5uaW5nIGFmdGVyIHJlcG9ydGluZyAqLworCisJdTggdGFnOworCXU4IGJzc190eXBlOyAvKiBmb3IgZmlsdGVyaW5nICovCisJdTggZmlsdGVyX3R5cGU7CisKKwl1OCBzc2lkX2xlbjsgICAgIC8qIEZvciBTQ0FOX1NTSURfRklMVEVSX1NQRUNJRklDICovCisJdTggc3NpZFtJV19FU1NJRF9NQVhfU0laRV07CisKKwl1OCBuX3Byb2JlX3JlcXM7IC8qIE51bWJlciBvZiBwcm9iZXMgcmVxdWVzdHMgcGVyIGNoYW5uZWwgKi8KKworCXU4IHBhc3NpdmVbU0NBTl9NQVhfQkFORFNdOworCXU4IGFjdGl2ZVtTQ0FOX01BWF9CQU5EU107CisKKwl1OCBkZnM7CisKKwl1OCBwYWRkaW5nWzNdOworCisJc3RydWN0IGNvbm5fc2Nhbl9jaF9wYXJhbXMgY2hhbm5lbHNbTUFYX0NIQU5ORUxTX0FMTF9CQU5EU107Cit9IF9fcGFja2VkOworCisKKyNkZWZpbmUgU0NIRURfU0NBTl9NQVhfU1NJRFMgOAorCitlbnVtIHsKKwlTQ0FOX1NTSURfVFlQRV9QVUJMSUMgPSAwLAorCVNDQU5fU1NJRF9UWVBFX0hJRERFTiA9IDEsCit9OworCitzdHJ1Y3Qgd2wxMjcxX3NzaWQgeworCXU4IHR5cGU7CisJdTggbGVuOworCXU4IHNzaWRbSVdfRVNTSURfTUFYX1NJWkVdOworCS8qIHU4IHBhZGRpbmdbMl07ICovCit9IF9fcGFja2VkOworCitzdHJ1Y3Qgd2wxMjcxX2NtZF9zY2hlZF9zY2FuX3NzaWRfbGlzdCB7CisJc3RydWN0IHdsMTI3MV9jbWRfaGVhZGVyIGhlYWRlcjsKKworCXU4IG5fc3NpZHM7CisJc3RydWN0IHdsMTI3MV9zc2lkIHNzaWRzW1NDSEVEX1NDQU5fTUFYX1NTSURTXTsKKwl1OCBwYWRkaW5nWzNdOworfSBfX3BhY2tlZDsKKworc3RydWN0IHdsMTI3MV9jbWRfc2NoZWRfc2Nhbl9zdGFydCB7CisJc3RydWN0IHdsMTI3MV9jbWRfaGVhZGVyIGhlYWRlcjsKKworCXU4IHRhZzsKKwl1OCBwYWRkaW5nWzNdOworfSBfX3BhY2tlZDsKKworc3RydWN0IHdsMTI3MV9jbWRfc2NoZWRfc2Nhbl9zdG9wIHsKKwlzdHJ1Y3Qgd2wxMjcxX2NtZF9oZWFkZXIgaGVhZGVyOworCisJdTggdGFnOworCXU4IHBhZGRpbmdbM107Cit9IF9fcGFja2VkOworCisKICNlbmRpZiAvKiBfX1dMMTI3MV9TQ0FOX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NkaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zZGlvLmMKaW5kZXggYjFjN2QwMy4uNTM2ZTUwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NkaW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc2Rpby5jCkBAIC01MSw2ICs1MSwxMyBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoc2Rpbywgd2wxMjcxX2RldmljZXMpOwogCitzdGF0aWMgdm9pZCB3bDEyNzFfc2Rpb19zZXRfYmxvY2tfc2l6ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgdW5zaWduZWQgaW50IGJsa3N6KQoreworCXNkaW9fY2xhaW1faG9zdCh3bC0+aWZfcHJpdik7CisJc2Rpb19zZXRfYmxvY2tfc2l6ZSh3bC0+aWZfcHJpdiwgYmxrc3opOworCXNkaW9fcmVsZWFzZV9ob3N0KHdsLT5pZl9wcml2KTsKK30KKwogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2Rpb19mdW5jICp3bF90b19mdW5jKHN0cnVjdCB3bDEyNzEgKndsKQogewogCXJldHVybiB3bC0+aWZfcHJpdjsKQEAgLTc1LDYgKzgyLDE2IEBACiAJCWNvbXBsZXRlKHdsLT5lbHBfY29tcGwpOwogCQl3bC0+ZWxwX2NvbXBsID0gTlVMTDsKIAl9CisKKwlpZiAodGVzdF9iaXQoV0wxMjcxX0ZMQUdfU1VTUEVOREVELCAmd2wtPmZsYWdzKSkgeworCQkvKiBkb24ndCBlbnF1ZXVlIGEgd29yayByaWdodCBub3cuIG1hcmsgaXQgYXMgcGVuZGluZyAqLworCQlzZXRfYml0KFdMMTI3MV9GTEFHX1BFTkRJTkdfV09SSywgJndsLT5mbGFncyk7CisJCXdsMTI3MV9kZWJ1ZyhERUJVR19JUlEsICJzaG91bGQgbm90IGVucXVldWUgd29yayIpOworCQlkaXNhYmxlX2lycV9ub3N5bmMod2wtPmlycSk7CisJCXBtX3dha2V1cF9ldmVudCh3bDEyNzFfc2Rpb193bF90b19kZXYod2wpLCAwKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPndsX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIElSUV9XQUtFX1RIUkVBRDsKQEAgLTIwMyw3ICsyMjAsOCBAQAogCS5wb3dlcgkJPSB3bDEyNzFfc2Rpb19zZXRfcG93ZXIsCiAJLmRldgkJPSB3bDEyNzFfc2Rpb193bF90b19kZXYsCiAJLmVuYWJsZV9pcnEJPSB3bDEyNzFfc2Rpb19lbmFibGVfaW50ZXJydXB0cywKLQkuZGlzYWJsZV9pcnEJPSB3bDEyNzFfc2Rpb19kaXNhYmxlX2ludGVycnVwdHMKKwkuZGlzYWJsZV9pcnEJPSB3bDEyNzFfc2Rpb19kaXNhYmxlX2ludGVycnVwdHMsCisJLnNldF9ibG9ja19zaXplID0gd2wxMjcxX3NkaW9fc2V0X2Jsb2NrX3NpemUsCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB3bDEyNzFfcHJvYmUoc3RydWN0IHNkaW9fZnVuYyAqZnVuYywKQEAgLTIxMiw2ICsyMzAsOCBAQAogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwogCWNvbnN0IHN0cnVjdCB3bDEyeHhfcGxhdGZvcm1fZGF0YSAqd2xhbl9kYXRhOwogCXN0cnVjdCB3bDEyNzEgKndsOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisJbW1jX3BtX2ZsYWdfdCBtbWNmbGFnczsKIAlpbnQgcmV0OwogCiAJLyogV2UgYXJlIG9ubHkgYWJsZSB0byBoYW5kbGUgdGhlIHdsYW4gZnVuY3Rpb24gKi8KQEAgLTIzMCw2ICsyNTAsOSBAQAogCS8qIEdyYWIgYWNjZXNzIHRvIEZOMCBmb3IgRUxQIHJlZy4gKi8KIAlmdW5jLT5jYXJkLT5xdWlya3MgfD0gTU1DX1FVSVJLX0xFTklFTlRfRk4wOwogCisJLyogVXNlIGJsb2NrIG1vZGUgZm9yIHRyYW5zZmVycmluZyBvdmVyIG9uZSBibG9jayBzaXplIG9mIGRhdGEgKi8KKwlmdW5jLT5jYXJkLT5xdWlya3MgfD0gTU1DX1FVSVJLX0JMS1NaX0ZPUl9CWVRFX01PREU7CisKIAl3bGFuX2RhdGEgPSB3bDEyeHhfZ2V0X3BsYXRmb3JtX2RhdGEoKTsKIAlpZiAoSVNfRVJSKHdsYW5fZGF0YSkpIHsKIAkJcmV0ID0gUFRSX0VSUih3bGFuX2RhdGEpOwpAQCAtMjM5LDE3ICsyNjIsMzQgQEAKIAogCXdsLT5pcnEgPSB3bGFuX2RhdGEtPmlycTsKIAl3bC0+cmVmX2Nsb2NrID0gd2xhbl9kYXRhLT5ib2FyZF9yZWZfY2xvY2s7CisJd2wtPnRjeG9fY2xvY2sgPSB3bGFuX2RhdGEtPmJvYXJkX3RjeG9fY2xvY2s7CisJd2wtPnBsYXRmb3JtX3F1aXJrcyA9IHdsYW5fZGF0YS0+cGxhdGZvcm1fcXVpcmtzOworCisJaWYgKHdsLT5wbGF0Zm9ybV9xdWlya3MgJiBXTDEyWFhfUExBVEZPUk1fUVVJUktfRURHRV9JUlEpCisJCWlycWZsYWdzID0gSVJRRl9UUklHR0VSX1JJU0lORzsKKwllbHNlCisJCWlycWZsYWdzID0gSVJRRl9UUklHR0VSX0hJR0ggfCBJUlFGX09ORVNIT1Q7CiAKIAlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycSh3bC0+aXJxLCB3bDEyNzFfaGFyZGlycSwgd2wxMjcxX2lycSwKLQkJCQkgICBJUlFGX1RSSUdHRVJfSElHSCB8IElSUUZfT05FU0hPVCwKKwkJCQkgICBpcnFmbGFncywKIAkJCQkgICBEUklWRVJfTkFNRSwgd2wpOwogCWlmIChyZXQgPCAwKSB7CiAJCXdsMTI3MV9lcnJvcigicmVxdWVzdF9pcnEoKSBmYWlsZWQ6ICVkIiwgcmV0KTsKIAkJZ290byBvdXRfZnJlZTsKIAl9CiAKKwllbmFibGVfaXJxX3dha2Uod2wtPmlycSk7CisJZGV2aWNlX2luaXRfd2FrZXVwKHdsMTI3MV9zZGlvX3dsX3RvX2Rldih3bCksIDEpOworCiAJZGlzYWJsZV9pcnEod2wtPmlycSk7CiAKKwkvKiBpZiBzZGlvIGNhbiBrZWVwIHBvd2VyIHdoaWxlIGhvc3QgaXMgc3VzcGVuZGVkLCBlbmFibGUgd293ICovCisJbW1jZmxhZ3MgPSBzZGlvX2dldF9ob3N0X3BtX2NhcHMoZnVuYyk7CisJd2wxMjcxX2RlYnVnKERFQlVHX1NESU8sICJzZGlvIFBNIGNhcHMgPSAweCV4IiwgbW1jZmxhZ3MpOworCisJaWYgKG1tY2ZsYWdzICYgTU1DX1BNX0tFRVBfUE9XRVIpCisJCWh3LT53aXBoeS0+d293bGFuLmZsYWdzID0gV0lQSFlfV09XTEFOX0FOWTsKKwogCXJldCA9IHdsMTI3MV9pbml0X2llZWU4MDIxMSh3bCk7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfaXJxOwpAQCAtMjg0LDE5ICszMjQsNjEgQEAKIAlwbV9ydW50aW1lX2dldF9ub3Jlc3VtZSgmZnVuYy0+ZGV2KTsKIAogCXdsMTI3MV91bnJlZ2lzdGVyX2h3KHdsKTsKKwlkZXZpY2VfaW5pdF93YWtldXAod2wxMjcxX3NkaW9fd2xfdG9fZGV2KHdsKSwgMCk7CisJZGlzYWJsZV9pcnFfd2FrZSh3bC0+aXJxKTsKIAlmcmVlX2lycSh3bC0+aXJxLCB3bCk7CiAJd2wxMjcxX2ZyZWVfaHcod2wpOwogfQogCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IHdsMTI3MV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAkvKiBUZWxsIE1NQy9TRElPIGNvcmUgaXQncyBPSyB0byBwb3dlciBkb3duIHRoZSBjYXJkCiAJICogKGlmIGl0IGlzbid0IGFscmVhZHkpLCBidXQgbm90IHRvIHJlbW92ZSBpdCBjb21wbGV0ZWx5ICovCi0JcmV0dXJuIDA7CisJc3RydWN0IHNkaW9fZnVuYyAqZnVuYyA9IGRldl90b19zZGlvX2Z1bmMoZGV2KTsKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IHNkaW9fZ2V0X2RydmRhdGEoZnVuYyk7CisJbW1jX3BtX2ZsYWdfdCBzZGlvX2ZsYWdzOworCWludCByZXQgPSAwOworCisJd2wxMjcxX2RlYnVnKERFQlVHX01BQzgwMjExLCAid2wxMjcxIHN1c3BlbmQuIHdvd19lbmFibGVkOiAlZCIsCisJCSAgICAgd2wtPndvd19lbmFibGVkKTsKKworCS8qIGNoZWNrIHdoZXRoZXIgc2RpbyBzaG91bGQga2VlcCBwb3dlciAqLworCWlmICh3bC0+d293X2VuYWJsZWQpIHsKKwkJc2Rpb19mbGFncyA9IHNkaW9fZ2V0X2hvc3RfcG1fY2FwcyhmdW5jKTsKKworCQlpZiAoIShzZGlvX2ZsYWdzICYgTU1DX1BNX0tFRVBfUE9XRVIpKSB7CisJCQl3bDEyNzFfZXJyb3IoImNhbid0IGtlZXAgcG93ZXIgd2hpbGUgaG9zdCAiCisJCQkJICAgICAiaXMgc3VzcGVuZGVkIik7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKworCQkvKiBrZWVwIHBvd2VyIHdoaWxlIGhvc3Qgc3VzcGVuZGVkICovCisJCXJldCA9IHNkaW9fc2V0X2hvc3RfcG1fZmxhZ3MoZnVuYywgTU1DX1BNX0tFRVBfUE9XRVIpOworCQlpZiAocmV0KSB7CisJCQl3bDEyNzFfZXJyb3IoImVycm9yIHdoaWxlIHRyeWluZyB0byBrZWVwIHBvd2VyIik7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCS8qIHJlbGVhc2UgaG9zdCAqLworCQlzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTsKKwl9CitvdXQ6CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB3bDEyNzFfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jID0gZGV2X3RvX3NkaW9fZnVuYyhkZXYpOworCXN0cnVjdCB3bDEyNzEgKndsID0gc2Rpb19nZXRfZHJ2ZGF0YShmdW5jKTsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIndsMTI3MSByZXN1bWUiKTsKKwlpZiAod2wtPndvd19lbmFibGVkKSB7CisJCS8qIGNsYWltIGJhY2sgaG9zdCAqLworCQlzZGlvX2NsYWltX2hvc3QoZnVuYyk7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMwNCwxNSArMzg2LDE4IEBACiAJLnN1c3BlbmQJPSB3bDEyNzFfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHdsMTI3MV9yZXN1bWUsCiB9OworI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgd2wxMjcxX3NkaW9fZHJpdmVyID0gewogCS5uYW1lCQk9ICJ3bDEyNzFfc2RpbyIsCiAJLmlkX3RhYmxlCT0gd2wxMjcxX2RldmljZXMsCiAJLnByb2JlCQk9IHdsMTI3MV9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHdsMTI3MV9yZW1vdmUpLAorI2lmZGVmIENPTkZJR19QTQogCS5kcnYgPSB7CiAJCS5wbSA9ICZ3bDEyNzFfc2Rpb19wbV9vcHMsCiAJfSwKKyNlbmRpZgogfTsKIAogc3RhdGljIGludCBfX2luaXQgd2wxMjcxX2luaXQodm9pZCkKQEAgLTM0Myw0ICs0MjgsNiBAQAogTU9EVUxFX0FVVEhPUigiTHVjaWFubyBDb2VsaG8gPGNvZWxob0B0aS5jb20+Iik7CiBNT0RVTEVfQVVUSE9SKCJKdXVzbyBPaWthcmluZW4gPGp1dXNvLm9pa2FyaW5lbkBub2tpYS5jb20+Iik7CiBNT0RVTEVfRklSTVdBUkUoV0wxMjcxX0ZXX05BTUUpOwotTU9EVUxFX0ZJUk1XQVJFKFdMMTI3MV9BUF9GV19OQU1FKTsKK01PRFVMRV9GSVJNV0FSRShXTDEyOFhfRldfTkFNRSk7CitNT0RVTEVfRklSTVdBUkUoV0wxMjdYX0FQX0ZXX05BTUUpOworTU9EVUxFX0ZJUk1XQVJFKFdMMTI4WF9BUF9GV19OQU1FKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zZGlvX3Rlc3QuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zZGlvX3Rlc3QuYwppbmRleCA5ZmNiZDNkLi5mMjg5MTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc2Rpb190ZXN0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NkaW9fdGVzdC5jCkBAIC0xODksNyArMTg5LDEyIEBACiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKIAlpbnQgcmV0OwogCi0JcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIFdMMTI3MV9GV19OQU1FLCB3bDEyNzFfd2xfdG9fZGV2KHdsKSk7CisJaWYgKHdsLT5jaGlwLmlkID09IENISVBfSURfMTI4M19QRzIwKQorCQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgV0wxMjhYX0ZXX05BTUUsCisJCQkJICAgICAgIHdsMTI3MV93bF90b19kZXYod2wpKTsKKwllbHNlCisJCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBXTDEyNzFfRldfTkFNRSwKKwkJCQkgICAgICAgd2wxMjcxX3dsX3RvX2Rldih3bCkpOwogCiAJaWYgKHJldCA8IDApIHsKIAkJd2wxMjcxX2Vycm9yKCJjb3VsZCBub3QgZ2V0IGZpcm13YXJlOiAlZCIsIHJldCk7CkBAIC0yMjcsMTQgKzIzMiwxNCBAQAogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CiAJaW50IHJldDsKIAotCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBXTDEyNzFfTlZTX05BTUUsIHdsMTI3MV93bF90b19kZXYod2wpKTsKKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgV0wxMlhYX05WU19OQU1FLCB3bDEyNzFfd2xfdG9fZGV2KHdsKSk7CiAKIAlpZiAocmV0IDwgMCkgewogCQl3bDEyNzFfZXJyb3IoImNvdWxkIG5vdCBnZXQgbnZzIGZpbGU6ICVkIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQl3bC0+bnZzID0ga21lbWR1cChmdy0+ZGF0YSwgc2l6ZW9mKHN0cnVjdCB3bDEyNzFfbnZzX2ZpbGUpLCBHRlBfS0VSTkVMKTsKKwl3bC0+bnZzID0ga21lbWR1cChmdy0+ZGF0YSwgZnctPnNpemUsIEdGUF9LRVJORUwpOwogCiAJaWYgKCF3bC0+bnZzKSB7CiAJCXdsMTI3MV9lcnJvcigiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIG52cyBmaWxlIik7CkBAIC0yODgsNiArMjkzLDExIEBACiAJCXdsMTI3MV9ub3RpY2UoImNoaXAgaWQgMHgleCAoMTI3MSBQRzIwKSIsCiAJCQkJd2wtPmNoaXAuaWQpOwogCQlicmVhazsKKwljYXNlIENISVBfSURfMTI4M19QRzIwOgorCQl3bDEyNzFfbm90aWNlKCJjaGlwIGlkIDB4JXggKDEyODMgUEcyMCkiLAorCQkJCXdsLT5jaGlwLmlkKTsKKwkJYnJlYWs7CisJY2FzZSBDSElQX0lEXzEyODNfUEcxMDoKIAlkZWZhdWx0OgogCQl3bDEyNzFfd2FybmluZygidW5zdXBwb3J0ZWQgY2hpcCBpZDogMHgleCIsIHdsLT5jaGlwLmlkKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC00MDcsNiArNDE3LDkgQEAKIAkvKiBHcmFiIGFjY2VzcyB0byBGTjAgZm9yIEVMUCByZWcuICovCiAJZnVuYy0+Y2FyZC0+cXVpcmtzIHw9IE1NQ19RVUlSS19MRU5JRU5UX0ZOMDsKIAorCS8qIFVzZSBibG9jayBtb2RlIGZvciB0cmFuc2ZlcnJpbmcgb3ZlciBvbmUgYmxvY2sgc2l6ZSBvZiBkYXRhICovCisJZnVuYy0+Y2FyZC0+cXVpcmtzIHw9IE1NQ19RVUlSS19CTEtTWl9GT1JfQllURV9NT0RFOworCiAJd2xhbl9kYXRhID0gd2wxMnh4X2dldF9wbGF0Zm9ybV9kYXRhKCk7CiAJaWYgKElTX0VSUih3bGFuX2RhdGEpKSB7CiAJCXJldCA9IFBUUl9FUlIod2xhbl9kYXRhKTsKQEAgLTQxNiw2ICs0MjksNyBAQAogCiAJd2wtPmlycSA9IHdsYW5fZGF0YS0+aXJxOwogCXdsLT5yZWZfY2xvY2sgPSB3bGFuX2RhdGEtPmJvYXJkX3JlZl9jbG9jazsKKwl3bC0+dGN4b19jbG9jayA9IHdsYW5fZGF0YS0+Ym9hcmRfdGN4b19jbG9jazsKIAogCXNkaW9fc2V0X2RydmRhdGEoZnVuYywgd2xfdGVzdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zcGkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zcGkuYwppbmRleCBmZmM3NDViLi41MTY2MmJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc3BpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NwaS5jCkBAIC0zNTUsNyArMzU1LDggQEAKIAkucG93ZXIJCT0gd2wxMjcxX3NwaV9zZXRfcG93ZXIsCiAJLmRldgkJPSB3bDEyNzFfc3BpX3dsX3RvX2RldiwKIAkuZW5hYmxlX2lycQk9IHdsMTI3MV9zcGlfZW5hYmxlX2ludGVycnVwdHMsCi0JLmRpc2FibGVfaXJxCT0gd2wxMjcxX3NwaV9kaXNhYmxlX2ludGVycnVwdHMKKwkuZGlzYWJsZV9pcnEJPSB3bDEyNzFfc3BpX2Rpc2FibGVfaW50ZXJydXB0cywKKwkuc2V0X2Jsb2NrX3NpemUgPSBOVUxMLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgd2wxMjcxX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCkBAIC0zNjMsNiArMzY0LDcgQEAKIAlzdHJ1Y3Qgd2wxMnh4X3BsYXRmb3JtX2RhdGEgKnBkYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwogCXN0cnVjdCB3bDEyNzEgKndsOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CiAJaW50IHJldDsKIAogCXBkYXRhID0gc3BpLT5kZXYucGxhdGZvcm1fZGF0YTsKQEAgLTQwMCw2ICs0MDIsMTMgQEAKIAl9CiAKIAl3bC0+cmVmX2Nsb2NrID0gcGRhdGEtPmJvYXJkX3JlZl9jbG9jazsKKwl3bC0+dGN4b19jbG9jayA9IHBkYXRhLT5ib2FyZF90Y3hvX2Nsb2NrOworCXdsLT5wbGF0Zm9ybV9xdWlya3MgPSBwZGF0YS0+cGxhdGZvcm1fcXVpcmtzOworCisJaWYgKHdsLT5wbGF0Zm9ybV9xdWlya3MgJiBXTDEyWFhfUExBVEZPUk1fUVVJUktfRURHRV9JUlEpCisJCWlycWZsYWdzID0gSVJRRl9UUklHR0VSX1JJU0lORzsKKwllbHNlCisJCWlycWZsYWdzID0gSVJRRl9UUklHR0VSX0hJR0ggfCBJUlFGX09ORVNIT1Q7CiAKIAl3bC0+aXJxID0gc3BpLT5pcnE7CiAJaWYgKHdsLT5pcnEgPCAwKSB7CkBAIC00MDksNyArNDE4LDcgQEAKIAl9CiAKIAlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycSh3bC0+aXJxLCB3bDEyNzFfaGFyZGlycSwgd2wxMjcxX2lycSwKLQkJCQkgICBJUlFGX1RSSUdHRVJfSElHSCB8IElSUUZfT05FU0hPVCwKKwkJCQkgICBpcnFmbGFncywKIAkJCQkgICBEUklWRVJfTkFNRSwgd2wpOwogCWlmIChyZXQgPCAwKSB7CiAJCXdsMTI3MV9lcnJvcigicmVxdWVzdF9pcnEoKSBmYWlsZWQ6ICVkIiwgcmV0KTsKQEAgLTQ5MCw1ICs0OTksNyBAQAogTU9EVUxFX0FVVEhPUigiTHVjaWFubyBDb2VsaG8gPGNvZWxob0B0aS5jb20+Iik7CiBNT0RVTEVfQVVUSE9SKCJKdXVzbyBPaWthcmluZW4gPGp1dXNvLm9pa2FyaW5lbkBub2tpYS5jb20+Iik7CiBNT0RVTEVfRklSTVdBUkUoV0wxMjcxX0ZXX05BTUUpOwotTU9EVUxFX0ZJUk1XQVJFKFdMMTI3MV9BUF9GV19OQU1FKTsKK01PRFVMRV9GSVJNV0FSRShXTDEyOFhfRldfTkFNRSk7CitNT0RVTEVfRklSTVdBUkUoV0wxMjdYX0FQX0ZXX05BTUUpOworTU9EVUxFX0ZJUk1XQVJFKFdMMTI4WF9BUF9GV19OQU1FKTsKIE1PRFVMRV9BTElBUygic3BpOndsMTI3MSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3Rlc3Rtb2RlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvdGVzdG1vZGUuYwppbmRleCA2ZWMwNmE0Li5kYTM1MWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvdGVzdG1vZGUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvdGVzdG1vZGUuYwpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAid2wxMnh4LmgiCiAjaW5jbHVkZSAiYWN4LmgiCisjaW5jbHVkZSAicmVnLmgiCiAKICNkZWZpbmUgV0wxMjcxX1RNX01BWF9EQVRBX0xFTkdUSCAxMDI0CiAKQEAgLTIwNCw3ICsyMDUsMTAgQEAKIAogCWtmcmVlKHdsLT5udnMpOwogCi0JaWYgKGxlbiAhPSBzaXplb2Yoc3RydWN0IHdsMTI3MV9udnNfZmlsZSkpCisJaWYgKCh3bC0+Y2hpcC5pZCA9PSBDSElQX0lEXzEyODNfUEcyMCkgJiYKKwkgICAgKGxlbiAhPSBzaXplb2Yoc3RydWN0IHdsMTI4eF9udnNfZmlsZSkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwllbHNlIGlmIChsZW4gIT0gc2l6ZW9mKHN0cnVjdCB3bDEyNzFfbnZzX2ZpbGUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXdsLT5udnMgPSBremFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC90eC5jCmluZGV4IDVlOWVmN2QuLmNhM2FiMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC90eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC90eC5jCkBAIC02NSwxMSArNjUsMzYgQEAKIHN0YXRpYyB2b2lkIHdsMTI3MV9mcmVlX3R4X2lkKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgaWQpCiB7CiAJaWYgKF9fdGVzdF9hbmRfY2xlYXJfYml0KGlkLCB3bC0+dHhfZnJhbWVzX21hcCkpIHsKKwkJaWYgKHVubGlrZWx5KHdsLT50eF9mcmFtZXNfY250ID09IEFDWF9UWF9ERVNDUklQVE9SUykpCisJCQljbGVhcl9iaXQoV0wxMjcxX0ZMQUdfRldfVFhfQlVTWSwgJndsLT5mbGFncyk7CisKIAkJd2wtPnR4X2ZyYW1lc1tpZF0gPSBOVUxMOwogCQl3bC0+dHhfZnJhbWVzX2NudC0tOwogCX0KIH0KIAorc3RhdGljIGludCB3bDEyNzFfdHhfdXBkYXRlX2ZpbHRlcnMoc3RydWN0IHdsMTI3MSAqd2wsCisJCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopKHNrYi0+ZGF0YSArCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgd2wxMjcxX3R4X2h3X2Rlc2NyKSk7CisKKwkvKgorCSAqIHN0b3AgYnNzaWQtYmFzZWQgZmlsdGVyaW5nIGJlZm9yZSB0cmFuc21pdHRpbmcgYXV0aGVudGljYXRpb24KKwkgKiByZXF1ZXN0cy4gdGhpcyB3YXkgdGhlIGh3IHdpbGwgbmV2ZXIgZHJvcCBhdXRoZW50aWNhdGlvbgorCSAqIHJlc3BvbnNlcyBjb21pbmcgZnJvbSBCU1NJRHMgaXQgaXNuJ3QgZmFtaWxpYXIgd2l0aCAoZS5nLiBvbgorCSAqIHJvYW1pbmcpCisJICovCisJaWYgKCFpZWVlODAyMTFfaXNfYXV0aChoZHItPmZyYW1lX2NvbnRyb2wpKQorCQlyZXR1cm4gMDsKKworCXdsMTI3MV9jb25maWd1cmVfZmlsdGVycyh3bCwgRklGX09USEVSX0JTUyk7CisKKwlyZXR1cm4gd2wxMjcxX2FjeF9yeF9jb25maWcod2wsIHdsLT5yeF9jb25maWcsIHdsLT5yeF9maWx0ZXIpOworfQorCiBzdGF0aWMgdm9pZCB3bDEyNzFfdHhfYXBfdXBkYXRlX2luY29ubmVjdGlvbl9zdGEoc3RydWN0IHdsMTI3MSAqd2wsCiAJCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTEyNywxMyArMTUyLDI5IEBACiAJfQogfQogCitzdGF0aWMgdW5zaWduZWQgaW50IHdsMTJ4eF9jYWxjX3BhY2tldF9hbGlnbm1lbnQoc3RydWN0IHdsMTI3MSAqd2wsCisJCQkJCQl1bnNpZ25lZCBpbnQgcGFja2V0X2xlbmd0aCkKK3sKKwlpZiAod2wtPnF1aXJrcyAmIFdMMTJYWF9RVUlSS19CTE9DS1NJWkVfQUxJR05NRU5UKQorCQlyZXR1cm4gQUxJR04ocGFja2V0X2xlbmd0aCwgV0wxMlhYX0JVU19CTE9DS19TSVpFKTsKKwllbHNlCisJCXJldHVybiBBTElHTihwYWNrZXRfbGVuZ3RoLCBXTDEyNzFfVFhfQUxJR05fVE8pOworfQorCiBzdGF0aWMgaW50IHdsMTI3MV90eF9hbGxvY2F0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGV4dHJhLAogCQkJCXUzMiBidWZfb2Zmc2V0LCB1OCBobGlkKQogewogCXN0cnVjdCB3bDEyNzFfdHhfaHdfZGVzY3IgKmRlc2M7CiAJdTMyIHRvdGFsX2xlbiA9IHNrYi0+bGVuICsgc2l6ZW9mKHN0cnVjdCB3bDEyNzFfdHhfaHdfZGVzY3IpICsgZXh0cmE7CisJdTMyIGxlbjsKIAl1MzIgdG90YWxfYmxvY2tzOwogCWludCBpZCwgcmV0ID0gLUVCVVNZOworCXUzMiBzcGFyZV9ibG9ja3M7CisKKwlpZiAodW5saWtlbHkod2wtPnF1aXJrcyAmIFdMMTJYWF9RVUlSS19VU0VfMl9TUEFSRV9CTE9DS1MpKQorCQlzcGFyZV9ibG9ja3MgPSAyOworCWVsc2UKKwkJc3BhcmVfYmxvY2tzID0gMTsKIAogCWlmIChidWZfb2Zmc2V0ICsgdG90YWxfbGVuID4gV0wxMjcxX0FHR1JfQlVGRkVSX1NJWkUpCiAJCXJldHVybiAtRUFHQUlOOwpAQCAtMTQ1LDE3ICsxODYsMjcgQEAKIAogCS8qIGFwcHJveGltYXRlIHRoZSBudW1iZXIgb2YgYmxvY2tzIHJlcXVpcmVkIGZvciB0aGlzIHBhY2tldAogCSAgIGluIHRoZSBmaXJtd2FyZSAqLwotCXRvdGFsX2Jsb2NrcyA9IHRvdGFsX2xlbiArIFRYX0hXX0JMT0NLX1NJWkUgLSAxOwotCXRvdGFsX2Jsb2NrcyA9IHRvdGFsX2Jsb2NrcyAvIFRYX0hXX0JMT0NLX1NJWkUgKyBUWF9IV19CTE9DS19TUEFSRTsKKwlsZW4gPSB3bDEyeHhfY2FsY19wYWNrZXRfYWxpZ25tZW50KHdsLCB0b3RhbF9sZW4pOworCisJdG90YWxfYmxvY2tzID0gKGxlbiArIFRYX0hXX0JMT0NLX1NJWkUgLSAxKSAvIFRYX0hXX0JMT0NLX1NJWkUgKworCQlzcGFyZV9ibG9ja3M7CisKIAlpZiAodG90YWxfYmxvY2tzIDw9IHdsLT50eF9ibG9ja3NfYXZhaWxhYmxlKSB7CiAJCWRlc2MgPSAoc3RydWN0IHdsMTI3MV90eF9od19kZXNjciAqKXNrYl9wdXNoKAogCQkJc2tiLCB0b3RhbF9sZW4gLSBza2ItPmxlbik7CiAKLQkJZGVzYy0+ZXh0cmFfbWVtX2Jsb2NrcyA9IFRYX0hXX0JMT0NLX1NQQVJFOwotCQlkZXNjLT50b3RhbF9tZW1fYmxvY2tzID0gdG90YWxfYmxvY2tzOworCQkvKiBIVyBkZXNjcmlwdG9yIGZpZWxkcyBjaGFuZ2UgYmV0d2VlbiB3bDEyN3ggYW5kIHdsMTI4eCAqLworCQlpZiAod2wtPmNoaXAuaWQgPT0gQ0hJUF9JRF8xMjgzX1BHMjApIHsKKwkJCWRlc2MtPndsMTI4eF9tZW0udG90YWxfbWVtX2Jsb2NrcyA9IHRvdGFsX2Jsb2NrczsKKwkJfSBlbHNlIHsKKwkJCWRlc2MtPndsMTI3eF9tZW0uZXh0cmFfYmxvY2tzID0gc3BhcmVfYmxvY2tzOworCQkJZGVzYy0+d2wxMjd4X21lbS50b3RhbF9tZW1fYmxvY2tzID0gdG90YWxfYmxvY2tzOworCQl9CisKIAkJZGVzYy0+aWQgPSBpZDsKIAogCQl3bC0+dHhfYmxvY2tzX2F2YWlsYWJsZSAtPSB0b3RhbF9ibG9ja3M7CisJCXdsLT50eF9hbGxvY2F0ZWRfYmxvY2tzICs9IHRvdGFsX2Jsb2NrczsKIAogCQlpZiAod2wtPmJzc190eXBlID09IEJTU19UWVBFX0FQX0JTUykKIAkJCXdsLT5saW5rc1tobGlkXS5hbGxvY2F0ZWRfYmxrcyArPSB0b3RhbF9ibG9ja3M7CkBAIC0xNzIsMTMgKzIyMywxOCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBib29sIHdsMTJ4eF9pc19kdW1teV9wYWNrZXQoc3RydWN0IHdsMTI3MSAqd2wsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIHdsLT5kdW1teV9wYWNrZXQgPT0gc2tiOworfQorCiBzdGF0aWMgdm9pZCB3bDEyNzFfdHhfZmlsbF9oZHIoc3RydWN0IHdsMTI3MSAqd2wsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgICB1MzIgZXh0cmEsIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqY29udHJvbCwKIAkJCSAgICAgIHU4IGhsaWQpCiB7CiAJc3RydWN0IHRpbWVzcGVjIHRzOwogCXN0cnVjdCB3bDEyNzFfdHhfaHdfZGVzY3IgKmRlc2M7Ci0JaW50IHBhZCwgYWMsIHJhdGVfaWR4OworCWludCBhbGlnbmVkX2xlbiwgYWMsIHJhdGVfaWR4OwogCXM2NCBob3N0dGltZTsKIAl1MTYgdHhfYXR0cjsKIApAQCAtMjAyLDEyICsyNTgsMjUgQEAKIAllbHNlCiAJCWRlc2MtPmxpZmVfdGltZSA9IGNwdV90b19sZTE2KFRYX0hXX0FQX01PREVfUEtUX0xJRkVUSU1FX1RVKTsKIAotCS8qIGNvbmZpZ3VyZSB0aGUgdHggYXR0cmlidXRlcyAqLwotCXR4X2F0dHIgPSB3bC0+c2Vzc2lvbl9jb3VudGVyIDw8IFRYX0hXX0FUVFJfT0ZTVF9TRVNTSU9OX0NPVU5URVI7Ci0KLQkvKiBxdWV1ZSAod2UgdXNlIHNhbWUgaWRlbnRpZmllcnMgZm9yIHRpZCdzIGFuZCBhYydzICovCisJLyogcXVldWUgKi8KIAlhYyA9IHdsMTI3MV90eF9nZXRfcXVldWUoc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwotCWRlc2MtPnRpZCA9IGFjOworCWRlc2MtPnRpZCA9IHNrYi0+cHJpb3JpdHk7CisKKwlpZiAod2wxMnh4X2lzX2R1bW15X3BhY2tldCh3bCwgc2tiKSkgeworCQkvKgorCQkgKiBGVyBleHBlY3RzIHRoZSBkdW1teSBwYWNrZXQgdG8gaGF2ZSBhbiBpbnZhbGlkIHNlc3Npb24gaWQgLQorCQkgKiBhbnkgc2Vzc2lvbiBpZCB0aGF0IGlzIGRpZmZlcmVudCB0aGFuIHRoZSBvbmUgc2V0IGluIHRoZSBqb2luCisJCSAqLworCQl0eF9hdHRyID0gKCh+d2wtPnNlc3Npb25fY291bnRlcikgPDwKKwkJCSAgIFRYX0hXX0FUVFJfT0ZTVF9TRVNTSU9OX0NPVU5URVIpICYKKwkJCSAgIFRYX0hXX0FUVFJfU0VTU0lPTl9DT1VOVEVSOworCisJCXR4X2F0dHIgfD0gVFhfSFdfQVRUUl9UWF9EVU1NWV9SRVE7CisJfSBlbHNlIHsKKwkJLyogY29uZmlndXJlIHRoZSB0eCBhdHRyaWJ1dGVzICovCisJCXR4X2F0dHIgPQorCQkJd2wtPnNlc3Npb25fY291bnRlciA8PCBUWF9IV19BVFRSX09GU1RfU0VTU0lPTl9DT1VOVEVSOworCX0KIAogCWlmICh3bC0+YnNzX3R5cGUgIT0gQlNTX1RZUEVfQVBfQlNTKSB7CiAJCWRlc2MtPmFpZCA9IGhsaWQ7CkBAIC0yMzcsMjAgKzMwNiwzNyBAQAogCXR4X2F0dHIgfD0gcmF0ZV9pZHggPDwgVFhfSFdfQVRUUl9PRlNUX1JBVEVfUE9MSUNZOwogCWRlc2MtPnJlc2VydmVkID0gMDsKIAotCS8qIGFsaWduIHRoZSBsZW5ndGggKGFuZCBzdG9yZSBpbiB0ZXJtcyBvZiB3b3JkcykgKi8KLQlwYWQgPSBBTElHTihza2ItPmxlbiwgV0wxMjcxX1RYX0FMSUdOX1RPKTsKLQlkZXNjLT5sZW5ndGggPSBjcHVfdG9fbGUxNihwYWQgPj4gMik7CisJYWxpZ25lZF9sZW4gPSB3bDEyeHhfY2FsY19wYWNrZXRfYWxpZ25tZW50KHdsLCBza2ItPmxlbik7CiAKLQkvKiBjYWxjdWxhdGUgbnVtYmVyIG9mIHBhZGRpbmcgYnl0ZXMgKi8KLQlwYWQgPSBwYWQgLSBza2ItPmxlbjsKLQl0eF9hdHRyIHw9IHBhZCA8PCBUWF9IV19BVFRSX09GU1RfTEFTVF9XT1JEX1BBRDsKKwlpZiAod2wtPmNoaXAuaWQgPT0gQ0hJUF9JRF8xMjgzX1BHMjApIHsKKwkJZGVzYy0+d2wxMjh4X21lbS5leHRyYV9ieXRlcyA9IGFsaWduZWRfbGVuIC0gc2tiLT5sZW47CisJCWRlc2MtPmxlbmd0aCA9IGNwdV90b19sZTE2KGFsaWduZWRfbGVuID4+IDIpOworCisJCXdsMTI3MV9kZWJ1ZyhERUJVR19UWCwgInR4X2ZpbGxfaGRyOiBobGlkOiAlZCAiCisJCQkgICAgICJ0eF9hdHRyOiAweCV4IGxlbjogJWQgbGlmZTogJWQgbWVtOiAlZCIsCisJCQkgICAgIGRlc2MtPmhsaWQsIHR4X2F0dHIsCisJCQkgICAgIGxlMTZfdG9fY3B1KGRlc2MtPmxlbmd0aCksCisJCQkgICAgIGxlMTZfdG9fY3B1KGRlc2MtPmxpZmVfdGltZSksCisJCQkgICAgIGRlc2MtPndsMTI4eF9tZW0udG90YWxfbWVtX2Jsb2Nrcyk7CisJfSBlbHNlIHsKKwkJaW50IHBhZDsKKworCQkvKiBTdG9yZSB0aGUgYWxpZ25lZCBsZW5ndGggaW4gdGVybXMgb2Ygd29yZHMgKi8KKwkJZGVzYy0+bGVuZ3RoID0gY3B1X3RvX2xlMTYoYWxpZ25lZF9sZW4gPj4gMik7CisKKwkJLyogY2FsY3VsYXRlIG51bWJlciBvZiBwYWRkaW5nIGJ5dGVzICovCisJCXBhZCA9IGFsaWduZWRfbGVuIC0gc2tiLT5sZW47CisJCXR4X2F0dHIgfD0gcGFkIDw8IFRYX0hXX0FUVFJfT0ZTVF9MQVNUX1dPUkRfUEFEOworCisJCXdsMTI3MV9kZWJ1ZyhERUJVR19UWCwgInR4X2ZpbGxfaGRyOiBwYWQ6ICVkIGhsaWQ6ICVkICIKKwkJCSAgICAgInR4X2F0dHI6IDB4JXggbGVuOiAlZCBsaWZlOiAlZCBtZW06ICVkIiwgcGFkLAorCQkJICAgICBkZXNjLT5obGlkLCB0eF9hdHRyLAorCQkJICAgICBsZTE2X3RvX2NwdShkZXNjLT5sZW5ndGgpLAorCQkJICAgICBsZTE2X3RvX2NwdShkZXNjLT5saWZlX3RpbWUpLAorCQkJICAgICBkZXNjLT53bDEyN3hfbWVtLnRvdGFsX21lbV9ibG9ja3MpOworCX0KIAogCWRlc2MtPnR4X2F0dHIgPSBjcHVfdG9fbGUxNih0eF9hdHRyKTsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19UWCwgInR4X2ZpbGxfaGRyOiBwYWQ6ICVkIGhsaWQ6ICVkICIKLQkJInR4X2F0dHI6IDB4JXggbGVuOiAlZCBsaWZlOiAlZCBtZW06ICVkIiwgcGFkLCBkZXNjLT5obGlkLAotCQlsZTE2X3RvX2NwdShkZXNjLT50eF9hdHRyKSwgbGUxNl90b19jcHUoZGVzYy0+bGVuZ3RoKSwKLQkJbGUxNl90b19jcHUoZGVzYy0+bGlmZV90aW1lKSwgZGVzYy0+dG90YWxfbWVtX2Jsb2Nrcyk7CiB9CiAKIC8qIGNhbGxlciBtdXN0IGhvbGQgd2wtPm11dGV4ICovCkBAIC0zMDAsMTkgKzM4NiwyOSBAQAogCWlmICh3bC0+YnNzX3R5cGUgPT0gQlNTX1RZUEVfQVBfQlNTKSB7CiAJCXdsMTI3MV90eF9hcF91cGRhdGVfaW5jb25uZWN0aW9uX3N0YSh3bCwgc2tiKTsKIAkJd2wxMjcxX3R4X3JlZ3VsYXRlX2xpbmsod2wsIGhsaWQpOworCX0gZWxzZSB7CisJCXdsMTI3MV90eF91cGRhdGVfZmlsdGVycyh3bCwgc2tiKTsKIAl9CiAKIAl3bDEyNzFfdHhfZmlsbF9oZHIod2wsIHNrYiwgZXh0cmEsIGluZm8sIGhsaWQpOwogCiAJLyoKLQkgKiBUaGUgbGVuZ3RoIG9mIGVhY2ggcGFja2V0IGlzIHN0b3JlZCBpbiB0ZXJtcyBvZiB3b3Jkcy4gVGh1cywgd2UgbXVzdAotCSAqIHBhZCB0aGUgc2tiIGRhdGEgdG8gbWFrZSBzdXJlIGl0cyBsZW5ndGggaXMgYWxpZ25lZC4KLQkgKiBUaGUgbnVtYmVyIG9mIHBhZGRpbmcgYnl0ZXMgaXMgY29tcHV0ZWQgYW5kIHNldCBpbiB3bDEyNzFfdHhfZmlsbF9oZHIKKwkgKiBUaGUgbGVuZ3RoIG9mIGVhY2ggcGFja2V0IGlzIHN0b3JlZCBpbiB0ZXJtcyBvZgorCSAqIHdvcmRzLiBUaHVzLCB3ZSBtdXN0IHBhZCB0aGUgc2tiIGRhdGEgdG8gbWFrZSBzdXJlIGl0cworCSAqIGxlbmd0aCBpcyBhbGlnbmVkLiAgVGhlIG51bWJlciBvZiBwYWRkaW5nIGJ5dGVzIGlzIGNvbXB1dGVkCisJICogYW5kIHNldCBpbiB3bDEyNzFfdHhfZmlsbF9oZHIuCisJICogSW4gc3BlY2lhbCBjYXNlcywgd2Ugd2FudCB0byBhbGlnbiB0byBhIHNwZWNpZmljIGJsb2NrIHNpemUKKwkgKiAoZWcuIGZvciB3bDEyOHggd2l0aCBTRElPIHdlIGFsaWduIHRvIDI1NikuCiAJICovCi0JdG90YWxfbGVuID0gQUxJR04oc2tiLT5sZW4sIFdMMTI3MV9UWF9BTElHTl9UTyk7CisJdG90YWxfbGVuID0gd2wxMnh4X2NhbGNfcGFja2V0X2FsaWdubWVudCh3bCwgc2tiLT5sZW4pOworCiAJbWVtY3B5KHdsLT5hZ2dyX2J1ZiArIGJ1Zl9vZmZzZXQsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwogCW1lbXNldCh3bC0+YWdncl9idWYgKyBidWZfb2Zmc2V0ICsgc2tiLT5sZW4sIDAsIHRvdGFsX2xlbiAtIHNrYi0+bGVuKTsKIAorCS8qIFJldmVydCBzaWRlIGVmZmVjdHMgaW4gdGhlIGR1bW15IHBhY2tldCBza2IsIHNvIGl0IGNhbiBiZSByZXVzZWQgKi8KKwlpZiAod2wxMnh4X2lzX2R1bW15X3BhY2tldCh3bCwgc2tiKSkKKwkJc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHdsMTI3MV90eF9od19kZXNjcikpOworCiAJcmV0dXJuIHRvdGFsX2xlbjsKIH0KIApAQCAtNDI1LDEwICs1MjEsMjMgQEAKIAogc3RhdGljIHN0cnVjdCBza19idWZmICp3bDEyNzFfc2tiX2RlcXVldWUoc3RydWN0IHdsMTI3MSAqd2wpCiB7Ci0JaWYgKHdsLT5ic3NfdHlwZSA9PSBCU1NfVFlQRV9BUF9CU1MpCi0JCXJldHVybiB3bDEyNzFfYXBfc2tiX2RlcXVldWUod2wpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CiAKLQlyZXR1cm4gd2wxMjcxX3N0YV9za2JfZGVxdWV1ZSh3bCk7CisJaWYgKHdsLT5ic3NfdHlwZSA9PSBCU1NfVFlQRV9BUF9CU1MpCisJCXNrYiA9IHdsMTI3MV9hcF9za2JfZGVxdWV1ZSh3bCk7CisJZWxzZQorCQlza2IgPSB3bDEyNzFfc3RhX3NrYl9kZXF1ZXVlKHdsKTsKKworCWlmICghc2tiICYmCisJICAgIHRlc3RfYW5kX2NsZWFyX2JpdChXTDEyNzFfRkxBR19EVU1NWV9QQUNLRVRfUEVORElORywgJndsLT5mbGFncykpIHsKKwkJc2tiID0gd2wtPmR1bW15X3BhY2tldDsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJndsLT53bF9sb2NrLCBmbGFncyk7CisJCXdsLT50eF9xdWV1ZV9jb3VudC0tOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOworCX0KKworCXJldHVybiBza2I7CiB9CiAKIHN0YXRpYyB2b2lkIHdsMTI3MV9za2JfcXVldWVfaGVhZChzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTQzNiw3ICs1NDUsOSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHEgPSB3bDEyNzFfdHhfZ2V0X3F1ZXVlKHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKIAotCWlmICh3bC0+YnNzX3R5cGUgPT0gQlNTX1RZUEVfQVBfQlNTKSB7CisJaWYgKHdsMTJ4eF9pc19kdW1teV9wYWNrZXQod2wsIHNrYikpIHsKKwkJc2V0X2JpdChXTDEyNzFfRkxBR19EVU1NWV9QQUNLRVRfUEVORElORywgJndsLT5mbGFncyk7CisJfSBlbHNlIGlmICh3bC0+YnNzX3R5cGUgPT0gQlNTX1RZUEVfQVBfQlNTKSB7CiAJCXU4IGhsaWQgPSB3bDEyNzFfdHhfZ2V0X2hsaWQoc2tiKTsKIAkJc2tiX3F1ZXVlX2hlYWQoJndsLT5saW5rc1tobGlkXS50eF9xdWV1ZVtxXSwgc2tiKTsKIApAQCAtNDU0LDIyICs1NjUsMTQgQEAKIHZvaWQgd2wxMjcxX3R4X3dvcmtfbG9ja2VkKHN0cnVjdCB3bDEyNzEgKndsKQogewogCXN0cnVjdCBza19idWZmICpza2I7Ci0JYm9vbCB3b2tlbl91cCA9IGZhbHNlOwogCXUzMiBidWZfb2Zmc2V0ID0gMDsKIAlib29sIHNlbnRfcGFja2V0cyA9IGZhbHNlOwogCWludCByZXQ7CiAKIAlpZiAodW5saWtlbHkod2wtPnN0YXRlID09IFdMMTI3MV9TVEFURV9PRkYpKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuOwogCiAJd2hpbGUgKChza2IgPSB3bDEyNzFfc2tiX2RlcXVldWUod2wpKSkgewotCQlpZiAoIXdva2VuX3VwKSB7Ci0JCQlyZXQgPSB3bDEyNzFfcHNfZWxwX3dha2V1cCh3bCk7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlnb3RvIG91dF9hY2s7Ci0JCQl3b2tlbl91cCA9IHRydWU7Ci0JCX0KLQogCQlyZXQgPSB3bDEyNzFfcHJlcGFyZV90eF9mcmFtZSh3bCwgc2tiLCBidWZfb2Zmc2V0KTsKIAkJaWYgKHJldCA9PSAtRUFHQUlOKSB7CiAJCQkvKgpAQCAtNTE2LDE4ICs2MTksMjIgQEAKIAogCQl3bDEyNzFfaGFuZGxlX3R4X2xvd193YXRlcm1hcmsod2wpOwogCX0KLQotb3V0OgotCWlmICh3b2tlbl91cCkKLQkJd2wxMjcxX3BzX2VscF9zbGVlcCh3bCk7CiB9CiAKIHZvaWQgd2wxMjcxX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCB3bDEyNzEgKndsID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3bDEyNzEsIHR4X3dvcmspOworCWludCByZXQ7CiAKIAltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKIAl3bDEyNzFfdHhfd29ya19sb2NrZWQod2wpOworCisJd2wxMjcxX3BzX2VscF9zbGVlcCh3bCk7CitvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwogfQogCkBAIC01NDksNiArNjU2LDExIEBACiAJc2tiID0gd2wtPnR4X2ZyYW1lc1tpZF07CiAJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAorCWlmICh3bDEyeHhfaXNfZHVtbXlfcGFja2V0KHdsLCBza2IpKSB7CisJCXdsMTI3MV9mcmVlX3R4X2lkKHdsLCBpZCk7CisJCXJldHVybjsKKwl9CisKIAkvKiB1cGRhdGUgdGhlIFRYIHN0YXR1cyBpbmZvICovCiAJaWYgKHJlc3VsdC0+c3RhdHVzID09IFRYX1NVQ0NFU1MpIHsKIAkJaWYgKCEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykpCkBAIC02NTcsOCArNzY5LDggQEAKIAl3bDEyNzFfaGFuZGxlX3R4X2xvd193YXRlcm1hcmsod2wpOwogfQogCi0vKiBjYWxsZXIgbXVzdCBob2xkIHdsLT5tdXRleCAqLwotdm9pZCB3bDEyNzFfdHhfcmVzZXQoc3RydWN0IHdsMTI3MSAqd2wpCisvKiBjYWxsZXIgbXVzdCBob2xkIHdsLT5tdXRleCBhbmQgVFggbXVzdCBiZSBzdG9wcGVkICovCit2b2lkIHdsMTI3MV90eF9yZXNldChzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCByZXNldF90eF9xdWV1ZXMpCiB7CiAJaW50IGk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTY3OCwxMCArNzkwLDEzIEBACiAJCQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZ3bC0+dHhfcXVldWVbaV0pKSkgewogCQkJCXdsMTI3MV9kZWJ1ZyhERUJVR19UWCwgImZyZWVpbmcgc2tiIDB4JXAiLAogCQkJCQkgICAgIHNrYik7Ci0JCQkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQkJCQlpbmZvLT5zdGF0dXMucmF0ZXNbMF0uaWR4ID0gLTE7Ci0JCQkJaW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50ID0gMDsKLQkJCQlpZWVlODAyMTFfdHhfc3RhdHVzKHdsLT5odywgc2tiKTsKKworCQkJCWlmICghd2wxMnh4X2lzX2R1bW15X3BhY2tldCh3bCwgc2tiKSkgeworCQkJCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCQkJCQlpbmZvLT5zdGF0dXMucmF0ZXNbMF0uaWR4ID0gLTE7CisJCQkJCWluZm8tPnN0YXR1cy5yYXRlc1swXS5jb3VudCA9IDA7CisJCQkJCWllZWU4MDIxMV90eF9zdGF0dXMod2wtPmh3LCBza2IpOworCQkJCX0KIAkJCX0KIAkJfQogCX0KQEAgLTY5MSw4ICs4MDYsMTAgQEAKIAkvKgogCSAqIE1ha2Ugc3VyZSB0aGUgZHJpdmVyIGlzIGF0IGEgY29uc2lzdGVudCBzdGF0ZSwgaW4gY2FzZSB0aGlzCiAJICogZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYSBjb250ZXh0IG90aGVyIHRoYW4gaW50ZXJmYWNlIHJlbW92YWwuCisJICogVGhpcyBjYWxsIHdpbGwgYWx3YXlzIHdha2UgdGhlIFRYIHF1ZXVlcy4KIAkgKi8KLQl3bDEyNzFfaGFuZGxlX3R4X2xvd193YXRlcm1hcmsod2wpOworCWlmIChyZXNldF90eF9xdWV1ZXMpCisJCXdsMTI3MV9oYW5kbGVfdHhfbG93X3dhdGVybWFyayh3bCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQUNYX1RYX0RFU0NSSVBUT1JTOyBpKyspIHsKIAkJaWYgKHdsLT50eF9mcmFtZXNbaV0gPT0gTlVMTCkKQEAgLTcwMiwyMSArODE5LDI3IEBACiAJCXdsMTI3MV9mcmVlX3R4X2lkKHdsLCBpKTsKIAkJd2wxMjcxX2RlYnVnKERFQlVHX1RYLCAiZnJlZWluZyBza2IgMHglcCIsIHNrYik7CiAKLQkJLyogUmVtb3ZlIHByaXZhdGUgaGVhZGVycyBiZWZvcmUgcGFzc2luZyB0aGUgc2tiIHRvIG1hYzgwMjExICovCi0JCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0JCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCB3bDEyNzFfdHhfaHdfZGVzY3IpKTsKLQkJaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5ICYmCi0JCSAgICBpbmZvLT5jb250cm9sLmh3X2tleS0+Y2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVApIHsKLQkJCWludCBoZHJsZW4gPSBpZWVlODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihza2IpOwotCQkJbWVtbW92ZShza2ItPmRhdGEgKyBXTDEyNzFfVEtJUF9JVl9TUEFDRSwgc2tiLT5kYXRhLAotCQkJCWhkcmxlbik7Ci0JCQlza2JfcHVsbChza2IsIFdMMTI3MV9US0lQX0lWX1NQQUNFKTsKKwkJaWYgKCF3bDEyeHhfaXNfZHVtbXlfcGFja2V0KHdsLCBza2IpKSB7CisJCQkvKgorCQkJICogUmVtb3ZlIHByaXZhdGUgaGVhZGVycyBiZWZvcmUgcGFzc2luZyB0aGUgc2tiIHRvCisJCQkgKiBtYWM4MDIxMQorCQkJICovCisJCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCQkJc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHdsMTI3MV90eF9od19kZXNjcikpOworCQkJaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5ICYmCisJCQkgICAgaW5mby0+Y29udHJvbC5od19rZXktPmNpcGhlciA9PQorCQkJICAgIFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVApIHsKKwkJCQlpbnQgaGRybGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2Ioc2tiKTsKKwkJCQltZW1tb3ZlKHNrYi0+ZGF0YSArIFdMMTI3MV9US0lQX0lWX1NQQUNFLAorCQkJCQlza2ItPmRhdGEsIGhkcmxlbik7CisJCQkJc2tiX3B1bGwoc2tiLCBXTDEyNzFfVEtJUF9JVl9TUEFDRSk7CisJCQl9CisKKwkJCWluZm8tPnN0YXR1cy5yYXRlc1swXS5pZHggPSAtMTsKKwkJCWluZm8tPnN0YXR1cy5yYXRlc1swXS5jb3VudCA9IDA7CisKKwkJCWllZWU4MDIxMV90eF9zdGF0dXMod2wtPmh3LCBza2IpOwogCQl9Ci0KLQkJaW5mby0+c3RhdHVzLnJhdGVzWzBdLmlkeCA9IC0xOwotCQlpbmZvLT5zdGF0dXMucmF0ZXNbMF0uY291bnQgPSAwOwotCi0JCWllZWU4MDIxMV90eF9zdGF0dXMod2wtPmh3LCBza2IpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3R4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvdHguaAppbmRleCAwMmYwN2ZhLi44MzJmOTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvdHguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvdHguaApAQCAtMjUsNyArMjUsNiBAQAogI2lmbmRlZiBfX1RYX0hfXwogI2RlZmluZSBfX1RYX0hfXwogCi0jZGVmaW5lIFRYX0hXX0JMT0NLX1NQQVJFICAgICAgICAgICAgICAgIDIKICNkZWZpbmUgVFhfSFdfQkxPQ0tfU0laRSAgICAgICAgICAgICAgICAgMjUyCiAKICNkZWZpbmUgVFhfSFdfTUdNVF9QS1RfTElGRVRJTUVfVFUgICAgICAgMjAwMApAQCAtNDEsNiArNDAsNyBAQAogCQkJCQkgIEJJVCg4KSB8IEJJVCg5KSkKICNkZWZpbmUgVFhfSFdfQVRUUl9MQVNUX1dPUkRfUEFEICAgICAgICAgKEJJVCgxMCkgfCBCSVQoMTEpKQogI2RlZmluZSBUWF9IV19BVFRSX1RYX0NNUExUX1JFUSAgICAgICAgICBCSVQoMTIpCisjZGVmaW5lIFRYX0hXX0FUVFJfVFhfRFVNTVlfUkVRICAgICAgICAgIEJJVCgxMykKIAogI2RlZmluZSBUWF9IV19BVFRSX09GU1RfU0FWRV9SRVRSSUVTICAgICAwCiAjZGVmaW5lIFRYX0hXX0FUVFJfT0ZTVF9IRUFERVJfUEFEICAgICAgIDEKQEAgLTU1LDIwICs1NSw2MCBAQAogI2RlZmluZSBXTDEyNzFfVFhfQUxJR05fVE8gNAogI2RlZmluZSBXTDEyNzFfVEtJUF9JVl9TUEFDRSA0CiAKKy8qIFVzZWQgZm9yIG1hbmFnZW1lbnQgZnJhbWVzIGFuZCBkdW1teSBwYWNrZXRzICovCisjZGVmaW5lIFdMMTI3MV9USURfTUdNVCA3CisKK3N0cnVjdCB3bDEyN3hfdHhfbWVtIHsKKwkvKgorCSAqIE51bWJlciBvZiBleHRyYSBtZW1vcnkgYmxvY2tzIHRvIGFsbG9jYXRlIGZvciB0aGlzIHBhY2tldAorCSAqIGluIGFkZGl0aW9uIHRvIHRoZSBudW1iZXIgb2YgYmxvY2tzIGRlcml2ZWQgZnJvbSB0aGUgcGFja2V0CisJICogbGVuZ3RoLgorCSAqLworCXU4IGV4dHJhX2Jsb2NrczsKKwkvKgorCSAqIFRvdGFsIG51bWJlciBvZiBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSB0aGUgaG9zdCBmb3IKKwkgKiB0aGlzIHBhY2tldC4gTXVzdCBiZSBlcXVhbCBvciBncmVhdGVyIHRoYW4gdGhlIGFjdHVhbAorCSAqIGJsb2NrcyBudW1iZXIgYWxsb2NhdGVkIGJ5IEhXLgorCSAqLworCXU4IHRvdGFsX21lbV9ibG9ja3M7Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qgd2wxMjh4X3R4X21lbSB7CisJLyoKKwkgKiBUb3RhbCBudW1iZXIgb2YgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgdGhlIGhvc3QgZm9yCisJICogdGhpcyBwYWNrZXQuCisJICovCisJdTggdG90YWxfbWVtX2Jsb2NrczsKKwkvKgorCSAqIE51bWJlciBvZiBleHRyYSBieXRlcywgYXQgdGhlIGVuZCBvZiB0aGUgZnJhbWUuIHRoZSBob3N0CisJICogdXNlcyB0aGlzIHBhZGRpbmcgdG8gY29tcGxldGUgZWFjaCBmcmFtZSB0byBpbnRlZ2VyIG51bWJlcgorCSAqIG9mIFNESU8gYmxvY2tzLgorCSAqLworCXU4IGV4dHJhX2J5dGVzOworfSBfX3BhY2tlZDsKKworLyoKKyAqIE9uIHdsMTI4eCBiYXNlZCBkZXZpY2VzLCB3aGVuIFRYIHBhY2tldHMgYXJlIGFnZ3JlZ2F0ZWQsIGVhY2ggcGFja2V0CisgKiBzaXplIG11c3QgYmUgYWxpZ25lZCB0byB0aGUgU0RJTyBibG9jayBzaXplLiBUaGUgbWF4aW11bSBibG9jayBzaXplCisgKiBpcyBib3VuZGVkIGJ5IHRoZSB0eXBlIG9mIHRoZSBwYWRkZWQgYnl0ZXMgZmllbGQgdGhhdCBpcyBzZW50IHRvIHRoZQorICogRlcuIEN1cnJlbnRseSB0aGUgdHlwZSBpcyB1OCwgc28gdGhlIG1heGltdW0gYmxvY2sgc2l6ZSBpcyAyNTYgYnl0ZXMuCisgKi8KKyNkZWZpbmUgV0wxMlhYX0JVU19CTE9DS19TSVpFIG1pbig1MTJ1LAlcCisJICAgICgxdSA8PCAoOCAqIHNpemVvZigoKHN0cnVjdCB3bDEyOHhfdHhfbWVtICopIDApLT5leHRyYV9ieXRlcykpKSkKKwogc3RydWN0IHdsMTI3MV90eF9od19kZXNjciB7CiAJLyogTGVuZ3RoIG9mIHBhY2tldCBpbiB3b3JkcywgaW5jbHVkaW5nIGRlc2NyaXB0b3IraGVhZGVyK2RhdGEgKi8KIAlfX2xlMTYgbGVuZ3RoOwotCS8qIE51bWJlciBvZiBleHRyYSBtZW1vcnkgYmxvY2tzIHRvIGFsbG9jYXRlIGZvciB0aGlzIHBhY2tldCBpbgotCSAgIGFkZGl0aW9uIHRvIHRoZSBudW1iZXIgb2YgYmxvY2tzIGRlcml2ZWQgZnJvbSB0aGUgcGFja2V0IGxlbmd0aCAqLwotCXU4IGV4dHJhX21lbV9ibG9ja3M7Ci0JLyogVG90YWwgbnVtYmVyIG9mIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5IHRoZSBob3N0IGZvciB0aGlzIHBhY2tldC4KLQkgICBNdXN0IGJlIGVxdWFsIG9yIGdyZWF0ZXIgdGhhbiB0aGUgYWN0dWFsIGJsb2NrcyBudW1iZXIgYWxsb2NhdGVkIGJ5Ci0JICAgSFchISAqLwotCXU4IHRvdGFsX21lbV9ibG9ja3M7CisJdW5pb24geworCQlzdHJ1Y3Qgd2wxMjd4X3R4X21lbSB3bDEyN3hfbWVtOworCQlzdHJ1Y3Qgd2wxMjh4X3R4X21lbSB3bDEyOHhfbWVtOworCX0gX19wYWNrZWQ7CiAJLyogRGV2aWNlIHRpbWUgKGluIHVzKSB3aGVuIHRoZSBwYWNrZXQgYXJyaXZlZCB0byB0aGUgZHJpdmVyICovCiAJX19sZTMyIHN0YXJ0X3RpbWU7Ci0JLyogTWF4IGRlbGF5IGluIFRVcyB1bnRpbCB0cmFuc21pc3Npb24uIFRoZSBsYXN0IGRldmljZSB0aW1lIHRoZQotCSAgIHBhY2tldCBjYW4gYmUgdHJhbnNtaXR0ZWQgaXM6IHN0YXJ0VGltZSsoMTAyNCpMaWZlVGltZSkgKi8KKwkvKgorCSAqIE1heCBkZWxheSBpbiBUVXMgdW50aWwgdHJhbnNtaXNzaW9uLiBUaGUgbGFzdCBkZXZpY2UgdGltZSB0aGUKKwkgKiBwYWNrZXQgY2FuIGJlIHRyYW5zbWl0dGVkIGlzOiBzdGFydF90aW1lICsgKDEwMjQgKiBsaWZlX3RpbWUpCisJICovCiAJX19sZTE2IGxpZmVfdGltZTsKIAkvKiBCaXR3aXNlIGZpZWxkcyAtIHNlZSBUWF9BVFRSLi4uIGRlZmluaXRpb25zIGFib3ZlLiAqLwogCV9fbGUxNiB0eF9hdHRyOwpAQCAtMTQ1LDcgKzE4NSw3IEBACiB2b2lkIHdsMTI3MV90eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiB2b2lkIHdsMTI3MV90eF93b3JrX2xvY2tlZChzdHJ1Y3Qgd2wxMjcxICp3bCk7CiB2b2lkIHdsMTI3MV90eF9jb21wbGV0ZShzdHJ1Y3Qgd2wxMjcxICp3bCk7Ci12b2lkIHdsMTI3MV90eF9yZXNldChzdHJ1Y3Qgd2wxMjcxICp3bCk7Cit2b2lkIHdsMTI3MV90eF9yZXNldChzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCByZXNldF90eF9xdWV1ZXMpOwogdm9pZCB3bDEyNzFfdHhfZmx1c2goc3RydWN0IHdsMTI3MSAqd2wpOwogdTggd2wxMjcxX3JhdGVfdG9faWR4KGludCByYXRlLCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpOwogdTMyIHdsMTI3MV90eF9lbmFibGVkX3JhdGVzX2dldChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTMyIHJhdGVfc2V0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyeHguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyeHguaAppbmRleCA4NmJlODNlLi5mYmU4ZjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMnh4LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTJ4eC5oCkBAIC0xMzEsOSArMTMxLDE2IEBACiAKIAogI2RlZmluZSBXTDEyNzFfRldfTkFNRSAidGktY29ubmVjdGl2aXR5L3dsMTI3MS1mdy0yLmJpbiIKLSNkZWZpbmUgV0wxMjcxX0FQX0ZXX05BTUUgInRpLWNvbm5lY3Rpdml0eS93bDEyNzEtZnctYXAuYmluIgorI2RlZmluZSBXTDEyOFhfRldfTkFNRSAidGktY29ubmVjdGl2aXR5L3dsMTI4eC1mdy5iaW4iCisjZGVmaW5lIFdMMTI3WF9BUF9GV19OQU1FICJ0aS1jb25uZWN0aXZpdHkvd2wxMjcxLWZ3LWFwLmJpbiIKKyNkZWZpbmUgV0wxMjhYX0FQX0ZXX05BTUUgInRpLWNvbm5lY3Rpdml0eS93bDEyOHgtZnctYXAuYmluIgogCi0jZGVmaW5lIFdMMTI3MV9OVlNfTkFNRSAidGktY29ubmVjdGl2aXR5L3dsMTI3MS1udnMuYmluIgorLyoKKyAqIHdsMTI3eCBhbmQgd2wxMjh4IGFyZSB1c2luZyB0aGUgc2FtZSBOVlMgZmlsZSBuYW1lLiBIb3dldmVyLCB0aGUKKyAqIGluaSBwYXJhbWV0ZXJzIGJldHdlZW4gdGhlbSBhcmUgZGlmZmVyZW50LiAgVGhlIGRyaXZlciB2YWxpZGF0ZXMKKyAqIHRoZSBjb3JyZWN0IE5WUyBzaXplIGluIHdsMTI3MV9ib290X3VwbG9hZF9udnMoKS4KKyAqLworI2RlZmluZSBXTDEyWFhfTlZTX05BTUUgInRpLWNvbm5lY3Rpdml0eS93bDEyNzEtbnZzLmJpbiIKIAogI2RlZmluZSBXTDEyNzFfVFhfU0VDVVJJVFlfTE8xNihzKSAoKHUxNikoKHMpICYgMHhmZmZmKSkKICNkZWZpbmUgV0wxMjcxX1RYX1NFQ1VSSVRZX0hJMzIocykgKCh1MzIpKCgocykgPj4gMTYpICYgMHhmZmZmZmZmZikpCkBAIC0yMDAsMTMgKzIwNywyOSBAQAogCiBzdHJ1Y3Qgd2wxMjcxOwogCi0jZGVmaW5lIFdMMTJYWF9OVU1fRldfVkVSIDUKK2VudW0geworCUZXX1ZFUl9DSElQLAorCUZXX1ZFUl9JRl9UWVBFLAorCUZXX1ZFUl9NQUpPUiwKKwlGV19WRVJfU1VCVFlQRSwKKwlGV19WRVJfTUlOT1IsCiAKLS8qIEZJWE1FOiBJJ20gbm90IHN1cmUgYWJvdXQgdGhpcyBzdHJ1Y3R1cmUgbmFtZSAqLworCU5VTV9GV19WRVIKK307CisKKyNkZWZpbmUgRldfVkVSX0NISVBfV0wxMjdYIDYKKyNkZWZpbmUgRldfVkVSX0NISVBfV0wxMjhYIDcKKworI2RlZmluZSBGV19WRVJfSUZfVFlQRV9TVEEgMQorI2RlZmluZSBGV19WRVJfSUZfVFlQRV9BUCAgMgorCisjZGVmaW5lIEZXX1ZFUl9NSU5PUl8xX1NQQVJFX1NUQV9NSU4gNTgKKyNkZWZpbmUgRldfVkVSX01JTk9SXzFfU1BBUkVfQVBfTUlOICA0NworCiBzdHJ1Y3Qgd2wxMjcxX2NoaXAgewogCXUzMiBpZDsKIAljaGFyIGZ3X3Zlcl9zdHJbRVRIVE9PTF9CVVNJTkZPX0xFTl07Ci0JdW5zaWduZWQgaW50IGZ3X3ZlcltXTDEyWFhfTlVNX0ZXX1ZFUl07CisJdW5zaWduZWQgaW50IGZ3X3ZlcltOVU1fRldfVkVSXTsKIH07CiAKIHN0cnVjdCB3bDEyNzFfc3RhdHMgewpAQCAtMjYxLDYgKzI4NCw4IEBACiAJdTggIHR4X3RvdGFsOwogCXU4ICByZXNlcnZlZDE7CiAJX19sZTE2IHJlc2VydmVkMjsKKwkvKiBUb3RhbCBzdHJ1Y3R1cmUgc2l6ZSBpcyA2OCBieXRlcyAqLworCXUzMiBwYWRkaW5nOwogfSBfX3BhY2tlZDsKIAogc3RydWN0IHdsMTI3MV9md19mdWxsX3N0YXR1cyB7CkBAIC0yNzcsOSArMzAyLDEwIEBACiAJdTMyIGFkZHJfZXh0cmE7CiB9OwogCisjZGVmaW5lIFdMMTI3MV9NQVhfQ0hBTk5FTFMgNjQKIHN0cnVjdCB3bDEyNzFfc2NhbiB7CiAJc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxOwotCWJvb2wgKnNjYW5uZWRfY2g7CisJdW5zaWduZWQgbG9uZyBzY2FubmVkX2NoW0JJVFNfVE9fTE9OR1MoV0wxMjcxX01BWF9DSEFOTkVMUyldOwogCWJvb2wgZmFpbGVkOwogCXU4IHN0YXRlOwogCXU4IHNzaWRbSVdfRVNTSURfTUFYX1NJWkUrMV07CkBAIC0yOTcsNiArMzIzLDcgQEAKIAlzdHJ1Y3QgZGV2aWNlKiAoKmRldikoc3RydWN0IHdsMTI3MSAqd2wpOwogCXZvaWQgKCplbmFibGVfaXJxKShzdHJ1Y3Qgd2wxMjcxICp3bCk7CiAJdm9pZCAoKmRpc2FibGVfaXJxKShzdHJ1Y3Qgd2wxMjcxICp3bCk7CisJdm9pZCAoKnNldF9ibG9ja19zaXplKSAoc3RydWN0IHdsMTI3MSAqd2wsIHVuc2lnbmVkIGludCBibGtzeik7CiB9OwogCiAjZGVmaW5lIE1BWF9OVU1fS0VZUyAxNApAQCAtMzE5LDE1ICszNDYsMTkgQEAKIAlXTDEyNzFfRkxBR19UWF9RVUVVRV9TVE9QUEVELAogCVdMMTI3MV9GTEFHX1RYX1BFTkRJTkcsCiAJV0wxMjcxX0ZMQUdfSU5fRUxQLAorCVdMMTI3MV9GTEFHX0VMUF9SRVFVRVNURUQsCiAJV0wxMjcxX0ZMQUdfUFNNLAogCVdMMTI3MV9GTEFHX1BTTV9SRVFVRVNURUQsCiAJV0wxMjcxX0ZMQUdfSVJRX1JVTk5JTkcsCiAJV0wxMjcxX0ZMQUdfSURMRSwKLQlXTDEyNzFfRkxBR19JRExFX1JFUVVFU1RFRCwKIAlXTDEyNzFfRkxBR19QU1BPTExfRkFJTFVSRSwKIAlXTDEyNzFfRkxBR19TVEFfU1RBVEVfU0VOVCwKIAlXTDEyNzFfRkxBR19GV19UWF9CVVNZLAotCVdMMTI3MV9GTEFHX0FQX1NUQVJURUQKKwlXTDEyNzFfRkxBR19BUF9TVEFSVEVELAorCVdMMTI3MV9GTEFHX0lGX0lOSVRJQUxJWkVELAorCVdMMTI3MV9GTEFHX0RVTU1ZX1BBQ0tFVF9QRU5ESU5HLAorCVdMMTI3MV9GTEFHX1NVU1BFTkRFRCwKKwlXTDEyNzFfRkxBR19QRU5ESU5HX1dPUkssCiB9OwogCiBzdHJ1Y3Qgd2wxMjcxX2xpbmsgewpAQCAtMzcxLDcgKzQwMiw3IEBACiAJdTggKmZ3OwogCXNpemVfdCBmd19sZW47CiAJdTggZndfYnNzX3R5cGU7Ci0Jc3RydWN0IHdsMTI3MV9udnNfZmlsZSAqbnZzOworCXZvaWQgKm52czsKIAlzaXplX3QgbnZzX2xlbjsKIAogCXM4IGh3X3BnX3ZlcjsKQEAgLTM4OSw2ICs0MjAsNyBAQAogCS8qIEFjY291bnRpbmcgZm9yIGFsbG9jYXRlZCAvIGF2YWlsYWJsZSBUWCBibG9ja3Mgb24gSFcgKi8KIAl1MzIgdHhfYmxvY2tzX2ZyZWVkW05VTV9UWF9RVUVVRVNdOwogCXUzMiB0eF9ibG9ja3NfYXZhaWxhYmxlOworCXUzMiB0eF9hbGxvY2F0ZWRfYmxvY2tzOwogCXUzMiB0eF9yZXN1bHRzX2NvdW50OwogCiAJLyogVHJhbnNtaXR0ZWQgVFggcGFja2V0cyBjb3VudGVyIGZvciBjaGlwc2V0IGludGVyZmFjZSAqLwpAQCAtNDMwLDYgKzQ2Miw5IEBACiAJLyogSW50ZXJtZWRpYXRlIGJ1ZmZlciwgdXNlZCBmb3IgcGFja2V0IGFnZ3JlZ2F0aW9uICovCiAJdTggKmFnZ3JfYnVmOwogCisJLyogUmV1c2FibGUgZHVtbXkgcGFja2V0IHRlbXBsYXRlICovCisJc3RydWN0IHNrX2J1ZmYgKmR1bW15X3BhY2tldDsKKwogCS8qIE5ldHdvcmsgc3RhY2sgd29yayAgKi8KIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgbmV0c3RhY2tfd29yazsKIApAQCAtNDQ2LDYgKzQ4MSw4IEBACiAJc3RydWN0IHdsMTI3MV9zY2FuIHNjYW47CiAJc3RydWN0IGRlbGF5ZWRfd29yayBzY2FuX2NvbXBsZXRlX3dvcms7CiAKKwlib29sIHNjaGVkX3NjYW5uaW5nOworCiAJLyogcHJvYmUtcmVxIHRlbXBsYXRlIGZvciB0aGUgY3VycmVudCBBUCAqLwogCXN0cnVjdCBza19idWZmICpwcm9iZXJlcTsKIApAQCAtNDc2LDYgKzUxMyw3IEBACiAJdW5zaWduZWQgaW50IHJ4X2ZpbHRlcjsKIAogCXN0cnVjdCBjb21wbGV0aW9uICplbHBfY29tcGw7CisJc3RydWN0IGNvbXBsZXRpb24gKnBzX2NvbXBsOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgZWxwX3dvcms7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBwc3BvbGxfd29yazsKIApAQCAtNTI3LDYgKzU2NSwxNCBAQAogCWJvb2wgYmFfc3VwcG9ydDsKIAl1OCBiYV9yeF9iaXRtYXA7CiAKKwlpbnQgdGN4b19jbG9jazsKKworCS8qCisJICogd293bGFuIHRyaWdnZXIgd2FzIGNvbmZpZ3VyZWQgZHVyaW5nIHN1c3BlbmQuCisJICogKGN1cnJlbnRseSwgb25seSAiQU5ZIiB0cmlnZ2VyIGlzIHN1cHBvcnRlZCkKKwkgKi8KKwlib29sIHdvd19lbmFibGVkOworCiAJLyoKIAkgKiBBUC1tb2RlIC0gbGlua3MgaW5kZXhlZCBieSBITElELiBUaGUgZ2xvYmFsIGFuZCBicm9hZGNhc3QgbGlua3MKIAkgKiBhcmUgYWx3YXlzIGFjdGl2ZS4KQEAgLTU0NCw2ICs1OTAsOSBAQAogCiAJLyogUXVpcmtzIG9mIHNwZWNpZmljIGhhcmR3YXJlIHJldmlzaW9ucyAqLwogCXVuc2lnbmVkIGludCBxdWlya3M7CisKKwkvKiBQbGF0Zm9ybSBsaW1pdGF0aW9ucyAqLworCXVuc2lnbmVkIGludCBwbGF0Zm9ybV9xdWlya3M7CiB9OwogCiBzdHJ1Y3Qgd2wxMjcxX3N0YXRpb24gewpAQCAtNTc2LDYgKzYyNSwxNSBAQAogLyogUXVpcmtzICovCiAKIC8qIEVhY2ggUlgvVFggdHJhbnNhY3Rpb24gcmVxdWlyZXMgYW4gZW5kLW9mLXRyYW5zYWN0aW9uIHRyYW5zZmVyICovCi0jZGVmaW5lIFdMMTJYWF9RVUlSS19FTkRfT0ZfVFJBTlNBQ1RJT04JQklUKDApCisjZGVmaW5lIFdMMTJYWF9RVUlSS19FTkRfT0ZfVFJBTlNBQ1RJT04JCUJJVCgwKQorCisvKgorICogT2xkZXIgZmlybXdhcmVzIHVzZSAyIHNwYXJlIFRYIGJsb2NrcworICogKGZvciBTVEEgPCA2LjEuMy41MC41OCBvciBmb3IgQVAgPCA2LjIuMC4wLjQ3KQorICovCisjZGVmaW5lIFdMMTJYWF9RVUlSS19VU0VfMl9TUEFSRV9CTE9DS1MJCUJJVCgxKQorCisvKiBXTDEyOFggcmVxdWlyZXMgYWdncmVnYXRlZCBwYWNrZXRzIHRvIGJlIGFsaWduZWQgdG8gdGhlIFNESU8gYmxvY2sgc2l6ZSAqLworI2RlZmluZSBXTDEyWFhfUVVJUktfQkxPQ0tTSVpFX0FMSUdOTUVOVAlCSVQoMikKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmMKaW5kZXggYTczYTMwNS4uZmYzMDZkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuYwpAQCAtNTU3LDcgKzU1Nyw3IEBACiAJcmV0dXJuIHI7CiB9CiAKLS8qIENSMTU3IGNhbiBiZSBvcHRpb25hbGx5IHBhdGNoZWQgYnkgdGhlIEVFUFJPTSBmb3Igb3JpZ2luYWwgWkQxMjExICovCisvKiBaRF9DUjE1NyBjYW4gYmUgb3B0aW9uYWxseSBwYXRjaGVkIGJ5IHRoZSBFRVBST00gZm9yIG9yaWdpbmFsIFpEMTIxMSAqLwogc3RhdGljIGludCBwYXRjaF9jcjE1NyhzdHJ1Y3QgemRfY2hpcCAqY2hpcCkKIHsKIAlpbnQgcjsKQEAgLTU3MSw3ICs1NzEsNyBAQAogCQlyZXR1cm4gcjsKIAogCWRldl9kYmdfZih6ZF9jaGlwX2RldihjaGlwKSwgInBhdGNoaW5nIHZhbHVlICV4XG4iLCB2YWx1ZSA+PiA4KTsKLQlyZXR1cm4gemRfaW93cml0ZTMyX2xvY2tlZChjaGlwLCB2YWx1ZSA+PiA4LCBDUjE1Nyk7CisJcmV0dXJuIHpkX2lvd3JpdGUzMl9sb2NrZWQoY2hpcCwgdmFsdWUgPj4gOCwgWkRfQ1IxNTcpOwogfQogCiAvKgpAQCAtNTkzLDggKzU5Myw4IEBACiBpbnQgemRfY2hpcF9nZW5lcmljX3BhdGNoXzZtX2JhbmQoc3RydWN0IHpkX2NoaXAgKmNoaXAsIGludCBjaGFubmVsKQogewogCXN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxc1tdID0gewotCQl7IENSMTI4LCAweDE0IH0sIHsgQ1IxMjksIDB4MTIgfSwgeyBDUjEzMCwgMHgxMCB9LAotCQl7IENSNDcsICAweDFlIH0sCisJCXsgWkRfQ1IxMjgsIDB4MTQgfSwgeyBaRF9DUjEyOSwgMHgxMiB9LCB7IFpEX0NSMTMwLCAweDEwIH0sCisJCXsgWkRfQ1I0NywgIDB4MWUgfSwKIAl9OwogCiAJLyogRklYTUU6IENoYW5uZWwgMTEgaXMgbm90IHRoZSBlZGdlIGZvciBhbGwgcmVndWxhdG9yeSBkb21haW5zLiAqLwpAQCAtNjA4LDY5ICs2MDgsNjkgQEAKIHN0YXRpYyBpbnQgemQxMjExX2h3X3Jlc2V0X3BoeShzdHJ1Y3QgemRfY2hpcCAqY2hpcCkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHpkX2lvcmVxMTYgaW9yZXFzW10gPSB7Ci0JCXsgQ1IwLCAgIDB4MGEgfSwgeyBDUjEsICAgMHgwNiB9LCB7IENSMiwgICAweDI2IH0sCi0JCXsgQ1IzLCAgIDB4MzggfSwgeyBDUjQsICAgMHg4MCB9LCB7IENSOSwgICAweGEwIH0sCi0JCXsgQ1IxMCwgIDB4ODEgfSwgeyBDUjExLCAgMHgwMCB9LCB7IENSMTIsICAweDdmIH0sCi0JCXsgQ1IxMywgIDB4OGMgfSwgeyBDUjE0LCAgMHg4MCB9LCB7IENSMTUsICAweDNkIH0sCi0JCXsgQ1IxNiwgIDB4MjAgfSwgeyBDUjE3LCAgMHgxZSB9LCB7IENSMTgsICAweDBhIH0sCi0JCXsgQ1IxOSwgIDB4NDggfSwgeyBDUjIwLCAgMHgwYyB9LCB7IENSMjEsICAweDBjIH0sCi0JCXsgQ1IyMiwgIDB4MjMgfSwgeyBDUjIzLCAgMHg5MCB9LCB7IENSMjQsICAweDE0IH0sCi0JCXsgQ1IyNSwgIDB4NDAgfSwgeyBDUjI2LCAgMHgxMCB9LCB7IENSMjcsICAweDE5IH0sCi0JCXsgQ1IyOCwgIDB4N2YgfSwgeyBDUjI5LCAgMHg4MCB9LCB7IENSMzAsICAweDRiIH0sCi0JCXsgQ1IzMSwgIDB4NjAgfSwgeyBDUjMyLCAgMHg0MyB9LCB7IENSMzMsICAweDA4IH0sCi0JCXsgQ1IzNCwgIDB4MDYgfSwgeyBDUjM1LCAgMHgwYSB9LCB7IENSMzYsICAweDAwIH0sCi0JCXsgQ1IzNywgIDB4MDAgfSwgeyBDUjM4LCAgMHgzOCB9LCB7IENSMzksICAweDBjIH0sCi0JCXsgQ1I0MCwgIDB4ODQgfSwgeyBDUjQxLCAgMHgyYSB9LCB7IENSNDIsICAweDgwIH0sCi0JCXsgQ1I0MywgIDB4MTAgfSwgeyBDUjQ0LCAgMHgxMiB9LCB7IENSNDYsICAweGZmIH0sCi0JCXsgQ1I0NywgIDB4MUUgfSwgeyBDUjQ4LCAgMHgyNiB9LCB7IENSNDksICAweDViIH0sCi0JCXsgQ1I2NCwgIDB4ZDAgfSwgeyBDUjY1LCAgMHgwNCB9LCB7IENSNjYsICAweDU4IH0sCi0JCXsgQ1I2NywgIDB4YzkgfSwgeyBDUjY4LCAgMHg4OCB9LCB7IENSNjksICAweDQxIH0sCi0JCXsgQ1I3MCwgIDB4MjMgfSwgeyBDUjcxLCAgMHgxMCB9LCB7IENSNzIsICAweGZmIH0sCi0JCXsgQ1I3MywgIDB4MzIgfSwgeyBDUjc0LCAgMHgzMCB9LCB7IENSNzUsICAweDY1IH0sCi0JCXsgQ1I3NiwgIDB4NDEgfSwgeyBDUjc3LCAgMHgxYiB9LCB7IENSNzgsICAweDMwIH0sCi0JCXsgQ1I3OSwgIDB4NjggfSwgeyBDUjgwLCAgMHg2NCB9LCB7IENSODEsICAweDY0IH0sCi0JCXsgQ1I4MiwgIDB4MDAgfSwgeyBDUjgzLCAgMHgwMCB9LCB7IENSODQsICAweDAwIH0sCi0JCXsgQ1I4NSwgIDB4MDIgfSwgeyBDUjg2LCAgMHgwMCB9LCB7IENSODcsICAweDAwIH0sCi0JCXsgQ1I4OCwgIDB4ZmYgfSwgeyBDUjg5LCAgMHhmYyB9LCB7IENSOTAsICAweDAwIH0sCi0JCXsgQ1I5MSwgIDB4MDAgfSwgeyBDUjkyLCAgMHgwMCB9LCB7IENSOTMsICAweDA4IH0sCi0JCXsgQ1I5NCwgIDB4MDAgfSwgeyBDUjk1LCAgMHgwMCB9LCB7IENSOTYsICAweGZmIH0sCi0JCXsgQ1I5NywgIDB4ZTcgfSwgeyBDUjk4LCAgMHgwMCB9LCB7IENSOTksICAweDAwIH0sCi0JCXsgQ1IxMDAsIDB4MDAgfSwgeyBDUjEwMSwgMHhhZSB9LCB7IENSMTAyLCAweDAyIH0sCi0JCXsgQ1IxMDMsIDB4MDAgfSwgeyBDUjEwNCwgMHgwMyB9LCB7IENSMTA1LCAweDY1IH0sCi0JCXsgQ1IxMDYsIDB4MDQgfSwgeyBDUjEwNywgMHgwMCB9LCB7IENSMTA4LCAweDBhIH0sCi0JCXsgQ1IxMDksIDB4YWEgfSwgeyBDUjExMCwgMHhhYSB9LCB7IENSMTExLCAweDI1IH0sCi0JCXsgQ1IxMTIsIDB4MjUgfSwgeyBDUjExMywgMHgwMCB9LCB7IENSMTE5LCAweDFlIH0sCi0JCXsgQ1IxMjUsIDB4OTAgfSwgeyBDUjEyNiwgMHgwMCB9LCB7IENSMTI3LCAweDAwIH0sCisJCXsgWkRfQ1IwLCAgIDB4MGEgfSwgeyBaRF9DUjEsICAgMHgwNiB9LCB7IFpEX0NSMiwgICAweDI2IH0sCisJCXsgWkRfQ1IzLCAgIDB4MzggfSwgeyBaRF9DUjQsICAgMHg4MCB9LCB7IFpEX0NSOSwgICAweGEwIH0sCisJCXsgWkRfQ1IxMCwgIDB4ODEgfSwgeyBaRF9DUjExLCAgMHgwMCB9LCB7IFpEX0NSMTIsICAweDdmIH0sCisJCXsgWkRfQ1IxMywgIDB4OGMgfSwgeyBaRF9DUjE0LCAgMHg4MCB9LCB7IFpEX0NSMTUsICAweDNkIH0sCisJCXsgWkRfQ1IxNiwgIDB4MjAgfSwgeyBaRF9DUjE3LCAgMHgxZSB9LCB7IFpEX0NSMTgsICAweDBhIH0sCisJCXsgWkRfQ1IxOSwgIDB4NDggfSwgeyBaRF9DUjIwLCAgMHgwYyB9LCB7IFpEX0NSMjEsICAweDBjIH0sCisJCXsgWkRfQ1IyMiwgIDB4MjMgfSwgeyBaRF9DUjIzLCAgMHg5MCB9LCB7IFpEX0NSMjQsICAweDE0IH0sCisJCXsgWkRfQ1IyNSwgIDB4NDAgfSwgeyBaRF9DUjI2LCAgMHgxMCB9LCB7IFpEX0NSMjcsICAweDE5IH0sCisJCXsgWkRfQ1IyOCwgIDB4N2YgfSwgeyBaRF9DUjI5LCAgMHg4MCB9LCB7IFpEX0NSMzAsICAweDRiIH0sCisJCXsgWkRfQ1IzMSwgIDB4NjAgfSwgeyBaRF9DUjMyLCAgMHg0MyB9LCB7IFpEX0NSMzMsICAweDA4IH0sCisJCXsgWkRfQ1IzNCwgIDB4MDYgfSwgeyBaRF9DUjM1LCAgMHgwYSB9LCB7IFpEX0NSMzYsICAweDAwIH0sCisJCXsgWkRfQ1IzNywgIDB4MDAgfSwgeyBaRF9DUjM4LCAgMHgzOCB9LCB7IFpEX0NSMzksICAweDBjIH0sCisJCXsgWkRfQ1I0MCwgIDB4ODQgfSwgeyBaRF9DUjQxLCAgMHgyYSB9LCB7IFpEX0NSNDIsICAweDgwIH0sCisJCXsgWkRfQ1I0MywgIDB4MTAgfSwgeyBaRF9DUjQ0LCAgMHgxMiB9LCB7IFpEX0NSNDYsICAweGZmIH0sCisJCXsgWkRfQ1I0NywgIDB4MUUgfSwgeyBaRF9DUjQ4LCAgMHgyNiB9LCB7IFpEX0NSNDksICAweDViIH0sCisJCXsgWkRfQ1I2NCwgIDB4ZDAgfSwgeyBaRF9DUjY1LCAgMHgwNCB9LCB7IFpEX0NSNjYsICAweDU4IH0sCisJCXsgWkRfQ1I2NywgIDB4YzkgfSwgeyBaRF9DUjY4LCAgMHg4OCB9LCB7IFpEX0NSNjksICAweDQxIH0sCisJCXsgWkRfQ1I3MCwgIDB4MjMgfSwgeyBaRF9DUjcxLCAgMHgxMCB9LCB7IFpEX0NSNzIsICAweGZmIH0sCisJCXsgWkRfQ1I3MywgIDB4MzIgfSwgeyBaRF9DUjc0LCAgMHgzMCB9LCB7IFpEX0NSNzUsICAweDY1IH0sCisJCXsgWkRfQ1I3NiwgIDB4NDEgfSwgeyBaRF9DUjc3LCAgMHgxYiB9LCB7IFpEX0NSNzgsICAweDMwIH0sCisJCXsgWkRfQ1I3OSwgIDB4NjggfSwgeyBaRF9DUjgwLCAgMHg2NCB9LCB7IFpEX0NSODEsICAweDY0IH0sCisJCXsgWkRfQ1I4MiwgIDB4MDAgfSwgeyBaRF9DUjgzLCAgMHgwMCB9LCB7IFpEX0NSODQsICAweDAwIH0sCisJCXsgWkRfQ1I4NSwgIDB4MDIgfSwgeyBaRF9DUjg2LCAgMHgwMCB9LCB7IFpEX0NSODcsICAweDAwIH0sCisJCXsgWkRfQ1I4OCwgIDB4ZmYgfSwgeyBaRF9DUjg5LCAgMHhmYyB9LCB7IFpEX0NSOTAsICAweDAwIH0sCisJCXsgWkRfQ1I5MSwgIDB4MDAgfSwgeyBaRF9DUjkyLCAgMHgwMCB9LCB7IFpEX0NSOTMsICAweDA4IH0sCisJCXsgWkRfQ1I5NCwgIDB4MDAgfSwgeyBaRF9DUjk1LCAgMHgwMCB9LCB7IFpEX0NSOTYsICAweGZmIH0sCisJCXsgWkRfQ1I5NywgIDB4ZTcgfSwgeyBaRF9DUjk4LCAgMHgwMCB9LCB7IFpEX0NSOTksICAweDAwIH0sCisJCXsgWkRfQ1IxMDAsIDB4MDAgfSwgeyBaRF9DUjEwMSwgMHhhZSB9LCB7IFpEX0NSMTAyLCAweDAyIH0sCisJCXsgWkRfQ1IxMDMsIDB4MDAgfSwgeyBaRF9DUjEwNCwgMHgwMyB9LCB7IFpEX0NSMTA1LCAweDY1IH0sCisJCXsgWkRfQ1IxMDYsIDB4MDQgfSwgeyBaRF9DUjEwNywgMHgwMCB9LCB7IFpEX0NSMTA4LCAweDBhIH0sCisJCXsgWkRfQ1IxMDksIDB4YWEgfSwgeyBaRF9DUjExMCwgMHhhYSB9LCB7IFpEX0NSMTExLCAweDI1IH0sCisJCXsgWkRfQ1IxMTIsIDB4MjUgfSwgeyBaRF9DUjExMywgMHgwMCB9LCB7IFpEX0NSMTE5LCAweDFlIH0sCisJCXsgWkRfQ1IxMjUsIDB4OTAgfSwgeyBaRF9DUjEyNiwgMHgwMCB9LCB7IFpEX0NSMTI3LCAweDAwIH0sCiAJCXsgfSwKLQkJeyBDUjUsICAgMHgwMCB9LCB7IENSNiwgICAweDAwIH0sIHsgQ1I3LCAgIDB4MDAgfSwKLQkJeyBDUjgsICAgMHgwMCB9LCB7IENSOSwgICAweDIwIH0sIHsgQ1IxMiwgIDB4ZjAgfSwKLQkJeyBDUjIwLCAgMHgwZSB9LCB7IENSMjEsICAweDBlIH0sIHsgQ1IyNywgIDB4MTAgfSwKLQkJeyBDUjQ0LCAgMHgzMyB9LCB7IENSNDcsICAweDFFIH0sIHsgQ1I4MywgIDB4MjQgfSwKLQkJeyBDUjg0LCAgMHgwNCB9LCB7IENSODUsICAweDAwIH0sIHsgQ1I4NiwgIDB4MEMgfSwKLQkJeyBDUjg3LCAgMHgxMiB9LCB7IENSODgsICAweDBDIH0sIHsgQ1I4OSwgIDB4MDAgfSwKLQkJeyBDUjkwLCAgMHgxMCB9LCB7IENSOTEsICAweDA4IH0sIHsgQ1I5MywgIDB4MDAgfSwKLQkJeyBDUjk0LCAgMHgwMSB9LCB7IENSOTUsICAweDAwIH0sIHsgQ1I5NiwgIDB4NTAgfSwKLQkJeyBDUjk3LCAgMHgzNyB9LCB7IENSOTgsICAweDM1IH0sIHsgQ1IxMDEsIDB4MTMgfSwKLQkJeyBDUjEwMiwgMHgyNyB9LCB7IENSMTAzLCAweDI3IH0sIHsgQ1IxMDQsIDB4MTggfSwKLQkJeyBDUjEwNSwgMHgxMiB9LCB7IENSMTA5LCAweDI3IH0sIHsgQ1IxMTAsIDB4MjcgfSwKLQkJeyBDUjExMSwgMHgyNyB9LCB7IENSMTEyLCAweDI3IH0sIHsgQ1IxMTMsIDB4MjcgfSwKLQkJeyBDUjExNCwgMHgyNyB9LCB7IENSMTE1LCAweDI2IH0sIHsgQ1IxMTYsIDB4MjQgfSwKLQkJeyBDUjExNywgMHhmYyB9LCB7IENSMTE4LCAweGZhIH0sIHsgQ1IxMjAsIDB4NGYgfSwKLQkJeyBDUjEyNSwgMHhhYSB9LCB7IENSMTI3LCAweDAzIH0sIHsgQ1IxMjgsIDB4MTQgfSwKLQkJeyBDUjEyOSwgMHgxMiB9LCB7IENSMTMwLCAweDEwIH0sIHsgQ1IxMzEsIDB4MEMgfSwKLQkJeyBDUjEzNiwgMHhkZiB9LCB7IENSMTM3LCAweDQwIH0sIHsgQ1IxMzgsIDB4YTAgfSwKLQkJeyBDUjEzOSwgMHhiMCB9LCB7IENSMTQwLCAweDk5IH0sIHsgQ1IxNDEsIDB4ODIgfSwKLQkJeyBDUjE0MiwgMHg1NCB9LCB7IENSMTQzLCAweDFjIH0sIHsgQ1IxNDQsIDB4NmMgfSwKLQkJeyBDUjE0NywgMHgwNyB9LCB7IENSMTQ4LCAweDRjIH0sIHsgQ1IxNDksIDB4NTAgfSwKLQkJeyBDUjE1MCwgMHgwZSB9LCB7IENSMTUxLCAweDE4IH0sIHsgQ1IxNjAsIDB4ZmUgfSwKLQkJeyBDUjE2MSwgMHhlZSB9LCB7IENSMTYyLCAweGFhIH0sIHsgQ1IxNjMsIDB4ZmEgfSwKLQkJeyBDUjE2NCwgMHhmYSB9LCB7IENSMTY1LCAweGVhIH0sIHsgQ1IxNjYsIDB4YmUgfSwKLQkJeyBDUjE2NywgMHhiZSB9LCB7IENSMTY4LCAweDZhIH0sIHsgQ1IxNjksIDB4YmEgfSwKLQkJeyBDUjE3MCwgMHhiYSB9LCB7IENSMTcxLCAweGJhIH0sCi0JCS8qIE5vdGU6IENSMjA0IG11c3QgbGVhZCB0aGUgQ1IyMDMgKi8KLQkJeyBDUjIwNCwgMHg3ZCB9LAorCQl7IFpEX0NSNSwgICAweDAwIH0sIHsgWkRfQ1I2LCAgIDB4MDAgfSwgeyBaRF9DUjcsICAgMHgwMCB9LAorCQl7IFpEX0NSOCwgICAweDAwIH0sIHsgWkRfQ1I5LCAgIDB4MjAgfSwgeyBaRF9DUjEyLCAgMHhmMCB9LAorCQl7IFpEX0NSMjAsICAweDBlIH0sIHsgWkRfQ1IyMSwgIDB4MGUgfSwgeyBaRF9DUjI3LCAgMHgxMCB9LAorCQl7IFpEX0NSNDQsICAweDMzIH0sIHsgWkRfQ1I0NywgIDB4MUUgfSwgeyBaRF9DUjgzLCAgMHgyNCB9LAorCQl7IFpEX0NSODQsICAweDA0IH0sIHsgWkRfQ1I4NSwgIDB4MDAgfSwgeyBaRF9DUjg2LCAgMHgwQyB9LAorCQl7IFpEX0NSODcsICAweDEyIH0sIHsgWkRfQ1I4OCwgIDB4MEMgfSwgeyBaRF9DUjg5LCAgMHgwMCB9LAorCQl7IFpEX0NSOTAsICAweDEwIH0sIHsgWkRfQ1I5MSwgIDB4MDggfSwgeyBaRF9DUjkzLCAgMHgwMCB9LAorCQl7IFpEX0NSOTQsICAweDAxIH0sIHsgWkRfQ1I5NSwgIDB4MDAgfSwgeyBaRF9DUjk2LCAgMHg1MCB9LAorCQl7IFpEX0NSOTcsICAweDM3IH0sIHsgWkRfQ1I5OCwgIDB4MzUgfSwgeyBaRF9DUjEwMSwgMHgxMyB9LAorCQl7IFpEX0NSMTAyLCAweDI3IH0sIHsgWkRfQ1IxMDMsIDB4MjcgfSwgeyBaRF9DUjEwNCwgMHgxOCB9LAorCQl7IFpEX0NSMTA1LCAweDEyIH0sIHsgWkRfQ1IxMDksIDB4MjcgfSwgeyBaRF9DUjExMCwgMHgyNyB9LAorCQl7IFpEX0NSMTExLCAweDI3IH0sIHsgWkRfQ1IxMTIsIDB4MjcgfSwgeyBaRF9DUjExMywgMHgyNyB9LAorCQl7IFpEX0NSMTE0LCAweDI3IH0sIHsgWkRfQ1IxMTUsIDB4MjYgfSwgeyBaRF9DUjExNiwgMHgyNCB9LAorCQl7IFpEX0NSMTE3LCAweGZjIH0sIHsgWkRfQ1IxMTgsIDB4ZmEgfSwgeyBaRF9DUjEyMCwgMHg0ZiB9LAorCQl7IFpEX0NSMTI1LCAweGFhIH0sIHsgWkRfQ1IxMjcsIDB4MDMgfSwgeyBaRF9DUjEyOCwgMHgxNCB9LAorCQl7IFpEX0NSMTI5LCAweDEyIH0sIHsgWkRfQ1IxMzAsIDB4MTAgfSwgeyBaRF9DUjEzMSwgMHgwQyB9LAorCQl7IFpEX0NSMTM2LCAweGRmIH0sIHsgWkRfQ1IxMzcsIDB4NDAgfSwgeyBaRF9DUjEzOCwgMHhhMCB9LAorCQl7IFpEX0NSMTM5LCAweGIwIH0sIHsgWkRfQ1IxNDAsIDB4OTkgfSwgeyBaRF9DUjE0MSwgMHg4MiB9LAorCQl7IFpEX0NSMTQyLCAweDU0IH0sIHsgWkRfQ1IxNDMsIDB4MWMgfSwgeyBaRF9DUjE0NCwgMHg2YyB9LAorCQl7IFpEX0NSMTQ3LCAweDA3IH0sIHsgWkRfQ1IxNDgsIDB4NGMgfSwgeyBaRF9DUjE0OSwgMHg1MCB9LAorCQl7IFpEX0NSMTUwLCAweDBlIH0sIHsgWkRfQ1IxNTEsIDB4MTggfSwgeyBaRF9DUjE2MCwgMHhmZSB9LAorCQl7IFpEX0NSMTYxLCAweGVlIH0sIHsgWkRfQ1IxNjIsIDB4YWEgfSwgeyBaRF9DUjE2MywgMHhmYSB9LAorCQl7IFpEX0NSMTY0LCAweGZhIH0sIHsgWkRfQ1IxNjUsIDB4ZWEgfSwgeyBaRF9DUjE2NiwgMHhiZSB9LAorCQl7IFpEX0NSMTY3LCAweGJlIH0sIHsgWkRfQ1IxNjgsIDB4NmEgfSwgeyBaRF9DUjE2OSwgMHhiYSB9LAorCQl7IFpEX0NSMTcwLCAweGJhIH0sIHsgWkRfQ1IxNzEsIDB4YmEgfSwKKwkJLyogTm90ZTogWkRfQ1IyMDQgbXVzdCBsZWFkIHRoZSBaRF9DUjIwMyAqLworCQl7IFpEX0NSMjA0LCAweDdkIH0sCiAJCXsgfSwKLQkJeyBDUjIwMywgMHgzMCB9LAorCQl7IFpEX0NSMjAzLCAweDMwIH0sCiAJfTsKIAogCWludCByLCB0OwpAQCAtNjk3LDYyICs2OTcsNjIgQEAKIHN0YXRpYyBpbnQgemQxMjExYl9od19yZXNldF9waHkoc3RydWN0IHpkX2NoaXAgKmNoaXApCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxc1tdID0gewotCQl7IENSMCwgICAweDE0IH0sIHsgQ1IxLCAgIDB4MDYgfSwgeyBDUjIsICAgMHgyNiB9LAotCQl7IENSMywgICAweDM4IH0sIHsgQ1I0LCAgIDB4ODAgfSwgeyBDUjksICAgMHhlMCB9LAotCQl7IENSMTAsICAweDgxIH0sCi0JCS8qIHBvd2VyIGNvbnRyb2wgeyB7IENSMTEsICAxIDw8IDYgfSwgKi8KLQkJeyBDUjExLCAgMHgwMCB9LAotCQl7IENSMTIsICAweGYwIH0sIHsgQ1IxMywgIDB4OGMgfSwgeyBDUjE0LCAgMHg4MCB9LAotCQl7IENSMTUsICAweDNkIH0sIHsgQ1IxNiwgIDB4MjAgfSwgeyBDUjE3LCAgMHgxZSB9LAotCQl7IENSMTgsICAweDBhIH0sIHsgQ1IxOSwgIDB4NDggfSwKLQkJeyBDUjIwLCAgMHgxMCB9LCAvKiBPcmc6MHgwRSwgQ29tVHJlbmQ6UmFsTGluayBBUCAqLwotCQl7IENSMjEsICAweDBlIH0sIHsgQ1IyMiwgIDB4MjMgfSwgeyBDUjIzLCAgMHg5MCB9LAotCQl7IENSMjQsICAweDE0IH0sIHsgQ1IyNSwgIDB4NDAgfSwgeyBDUjI2LCAgMHgxMCB9LAotCQl7IENSMjcsICAweDEwIH0sIHsgQ1IyOCwgIDB4N2YgfSwgeyBDUjI5LCAgMHg4MCB9LAotCQl7IENSMzAsICAweDRiIH0sIC8qIEFTSUMvRldULCBubyBqb2ludGx5IGRlY29kZXIgKi8KLQkJeyBDUjMxLCAgMHg2MCB9LCB7IENSMzIsICAweDQzIH0sIHsgQ1IzMywgIDB4MDggfSwKLQkJeyBDUjM0LCAgMHgwNiB9LCB7IENSMzUsICAweDBhIH0sIHsgQ1IzNiwgIDB4MDAgfSwKLQkJeyBDUjM3LCAgMHgwMCB9LCB7IENSMzgsICAweDM4IH0sIHsgQ1IzOSwgIDB4MGMgfSwKLQkJeyBDUjQwLCAgMHg4NCB9LCB7IENSNDEsICAweDJhIH0sIHsgQ1I0MiwgIDB4ODAgfSwKLQkJeyBDUjQzLCAgMHgxMCB9LCB7IENSNDQsICAweDMzIH0sIHsgQ1I0NiwgIDB4ZmYgfSwKLQkJeyBDUjQ3LCAgMHgxRSB9LCB7IENSNDgsICAweDI2IH0sIHsgQ1I0OSwgIDB4NWIgfSwKLQkJeyBDUjY0LCAgMHhkMCB9LCB7IENSNjUsICAweDA0IH0sIHsgQ1I2NiwgIDB4NTggfSwKLQkJeyBDUjY3LCAgMHhjOSB9LCB7IENSNjgsICAweDg4IH0sIHsgQ1I2OSwgIDB4NDEgfSwKLQkJeyBDUjcwLCAgMHgyMyB9LCB7IENSNzEsICAweDEwIH0sIHsgQ1I3MiwgIDB4ZmYgfSwKLQkJeyBDUjczLCAgMHgzMiB9LCB7IENSNzQsICAweDMwIH0sIHsgQ1I3NSwgIDB4NjUgfSwKLQkJeyBDUjc2LCAgMHg0MSB9LCB7IENSNzcsICAweDFiIH0sIHsgQ1I3OCwgIDB4MzAgfSwKLQkJeyBDUjc5LCAgMHhmMCB9LCB7IENSODAsICAweDY0IH0sIHsgQ1I4MSwgIDB4NjQgfSwKLQkJeyBDUjgyLCAgMHgwMCB9LCB7IENSODMsICAweDI0IH0sIHsgQ1I4NCwgIDB4MDQgfSwKLQkJeyBDUjg1LCAgMHgwMCB9LCB7IENSODYsICAweDBjIH0sIHsgQ1I4NywgIDB4MTIgfSwKLQkJeyBDUjg4LCAgMHgwYyB9LCB7IENSODksICAweDAwIH0sIHsgQ1I5MCwgIDB4NTggfSwKLQkJeyBDUjkxLCAgMHgwNCB9LCB7IENSOTIsICAweDAwIH0sIHsgQ1I5MywgIDB4MDAgfSwKLQkJeyBDUjk0LCAgMHgwMSB9LAotCQl7IENSOTUsICAweDIwIH0sIC8qIFpEMTIxMUIgKi8KLQkJeyBDUjk2LCAgMHg1MCB9LCB7IENSOTcsICAweDM3IH0sIHsgQ1I5OCwgIDB4MzUgfSwKLQkJeyBDUjk5LCAgMHgwMCB9LCB7IENSMTAwLCAweDAxIH0sIHsgQ1IxMDEsIDB4MTMgfSwKLQkJeyBDUjEwMiwgMHgyNyB9LCB7IENSMTAzLCAweDI3IH0sIHsgQ1IxMDQsIDB4MTggfSwKLQkJeyBDUjEwNSwgMHgxMiB9LCB7IENSMTA2LCAweDA0IH0sIHsgQ1IxMDcsIDB4MDAgfSwKLQkJeyBDUjEwOCwgMHgwYSB9LCB7IENSMTA5LCAweDI3IH0sIHsgQ1IxMTAsIDB4MjcgfSwKLQkJeyBDUjExMSwgMHgyNyB9LCB7IENSMTEyLCAweDI3IH0sIHsgQ1IxMTMsIDB4MjcgfSwKLQkJeyBDUjExNCwgMHgyNyB9LCB7IENSMTE1LCAweDI2IH0sIHsgQ1IxMTYsIDB4MjQgfSwKLQkJeyBDUjExNywgMHhmYyB9LCB7IENSMTE4LCAweGZhIH0sIHsgQ1IxMTksIDB4MWUgfSwKLQkJeyBDUjEyNSwgMHg5MCB9LCB7IENSMTI2LCAweDAwIH0sIHsgQ1IxMjcsIDB4MDAgfSwKLQkJeyBDUjEyOCwgMHgxNCB9LCB7IENSMTI5LCAweDEyIH0sIHsgQ1IxMzAsIDB4MTAgfSwKLQkJeyBDUjEzMSwgMHgwYyB9LCB7IENSMTM2LCAweGRmIH0sIHsgQ1IxMzcsIDB4YTAgfSwKLQkJeyBDUjEzOCwgMHhhOCB9LCB7IENSMTM5LCAweGI0IH0sIHsgQ1IxNDAsIDB4OTggfSwKLQkJeyBDUjE0MSwgMHg4MiB9LCB7IENSMTQyLCAweDUzIH0sIHsgQ1IxNDMsIDB4MWMgfSwKLQkJeyBDUjE0NCwgMHg2YyB9LCB7IENSMTQ3LCAweDA3IH0sIHsgQ1IxNDgsIDB4NDAgfSwKLQkJeyBDUjE0OSwgMHg0MCB9LCAvKiBPcmc6MHg1MCBDb21UcmVuZDpSYWxMaW5rIEFQICovCi0JCXsgQ1IxNTAsIDB4MTQgfSwgLyogT3JnOjB4MEUgQ29tVHJlbmQ6UmFsTGluayBBUCAqLwotCQl7IENSMTUxLCAweDE4IH0sIHsgQ1IxNTksIDB4NzAgfSwgeyBDUjE2MCwgMHhmZSB9LAotCQl7IENSMTYxLCAweGVlIH0sIHsgQ1IxNjIsIDB4YWEgfSwgeyBDUjE2MywgMHhmYSB9LAotCQl7IENSMTY0LCAweGZhIH0sIHsgQ1IxNjUsIDB4ZWEgfSwgeyBDUjE2NiwgMHhiZSB9LAotCQl7IENSMTY3LCAweGJlIH0sIHsgQ1IxNjgsIDB4NmEgfSwgeyBDUjE2OSwgMHhiYSB9LAotCQl7IENSMTcwLCAweGJhIH0sIHsgQ1IxNzEsIDB4YmEgfSwKLQkJLyogTm90ZTogQ1IyMDQgbXVzdCBsZWFkIHRoZSBDUjIwMyAqLwotCQl7IENSMjA0LCAweDdkIH0sCisJCXsgWkRfQ1IwLCAgIDB4MTQgfSwgeyBaRF9DUjEsICAgMHgwNiB9LCB7IFpEX0NSMiwgICAweDI2IH0sCisJCXsgWkRfQ1IzLCAgIDB4MzggfSwgeyBaRF9DUjQsICAgMHg4MCB9LCB7IFpEX0NSOSwgICAweGUwIH0sCisJCXsgWkRfQ1IxMCwgIDB4ODEgfSwKKwkJLyogcG93ZXIgY29udHJvbCB7IHsgWkRfQ1IxMSwgIDEgPDwgNiB9LCAqLworCQl7IFpEX0NSMTEsICAweDAwIH0sCisJCXsgWkRfQ1IxMiwgIDB4ZjAgfSwgeyBaRF9DUjEzLCAgMHg4YyB9LCB7IFpEX0NSMTQsICAweDgwIH0sCisJCXsgWkRfQ1IxNSwgIDB4M2QgfSwgeyBaRF9DUjE2LCAgMHgyMCB9LCB7IFpEX0NSMTcsICAweDFlIH0sCisJCXsgWkRfQ1IxOCwgIDB4MGEgfSwgeyBaRF9DUjE5LCAgMHg0OCB9LAorCQl7IFpEX0NSMjAsICAweDEwIH0sIC8qIE9yZzoweDBFLCBDb21UcmVuZDpSYWxMaW5rIEFQICovCisJCXsgWkRfQ1IyMSwgIDB4MGUgfSwgeyBaRF9DUjIyLCAgMHgyMyB9LCB7IFpEX0NSMjMsICAweDkwIH0sCisJCXsgWkRfQ1IyNCwgIDB4MTQgfSwgeyBaRF9DUjI1LCAgMHg0MCB9LCB7IFpEX0NSMjYsICAweDEwIH0sCisJCXsgWkRfQ1IyNywgIDB4MTAgfSwgeyBaRF9DUjI4LCAgMHg3ZiB9LCB7IFpEX0NSMjksICAweDgwIH0sCisJCXsgWkRfQ1IzMCwgIDB4NGIgfSwgLyogQVNJQy9GV1QsIG5vIGpvaW50bHkgZGVjb2RlciAqLworCQl7IFpEX0NSMzEsICAweDYwIH0sIHsgWkRfQ1IzMiwgIDB4NDMgfSwgeyBaRF9DUjMzLCAgMHgwOCB9LAorCQl7IFpEX0NSMzQsICAweDA2IH0sIHsgWkRfQ1IzNSwgIDB4MGEgfSwgeyBaRF9DUjM2LCAgMHgwMCB9LAorCQl7IFpEX0NSMzcsICAweDAwIH0sIHsgWkRfQ1IzOCwgIDB4MzggfSwgeyBaRF9DUjM5LCAgMHgwYyB9LAorCQl7IFpEX0NSNDAsICAweDg0IH0sIHsgWkRfQ1I0MSwgIDB4MmEgfSwgeyBaRF9DUjQyLCAgMHg4MCB9LAorCQl7IFpEX0NSNDMsICAweDEwIH0sIHsgWkRfQ1I0NCwgIDB4MzMgfSwgeyBaRF9DUjQ2LCAgMHhmZiB9LAorCQl7IFpEX0NSNDcsICAweDFFIH0sIHsgWkRfQ1I0OCwgIDB4MjYgfSwgeyBaRF9DUjQ5LCAgMHg1YiB9LAorCQl7IFpEX0NSNjQsICAweGQwIH0sIHsgWkRfQ1I2NSwgIDB4MDQgfSwgeyBaRF9DUjY2LCAgMHg1OCB9LAorCQl7IFpEX0NSNjcsICAweGM5IH0sIHsgWkRfQ1I2OCwgIDB4ODggfSwgeyBaRF9DUjY5LCAgMHg0MSB9LAorCQl7IFpEX0NSNzAsICAweDIzIH0sIHsgWkRfQ1I3MSwgIDB4MTAgfSwgeyBaRF9DUjcyLCAgMHhmZiB9LAorCQl7IFpEX0NSNzMsICAweDMyIH0sIHsgWkRfQ1I3NCwgIDB4MzAgfSwgeyBaRF9DUjc1LCAgMHg2NSB9LAorCQl7IFpEX0NSNzYsICAweDQxIH0sIHsgWkRfQ1I3NywgIDB4MWIgfSwgeyBaRF9DUjc4LCAgMHgzMCB9LAorCQl7IFpEX0NSNzksICAweGYwIH0sIHsgWkRfQ1I4MCwgIDB4NjQgfSwgeyBaRF9DUjgxLCAgMHg2NCB9LAorCQl7IFpEX0NSODIsICAweDAwIH0sIHsgWkRfQ1I4MywgIDB4MjQgfSwgeyBaRF9DUjg0LCAgMHgwNCB9LAorCQl7IFpEX0NSODUsICAweDAwIH0sIHsgWkRfQ1I4NiwgIDB4MGMgfSwgeyBaRF9DUjg3LCAgMHgxMiB9LAorCQl7IFpEX0NSODgsICAweDBjIH0sIHsgWkRfQ1I4OSwgIDB4MDAgfSwgeyBaRF9DUjkwLCAgMHg1OCB9LAorCQl7IFpEX0NSOTEsICAweDA0IH0sIHsgWkRfQ1I5MiwgIDB4MDAgfSwgeyBaRF9DUjkzLCAgMHgwMCB9LAorCQl7IFpEX0NSOTQsICAweDAxIH0sCisJCXsgWkRfQ1I5NSwgIDB4MjAgfSwgLyogWkQxMjExQiAqLworCQl7IFpEX0NSOTYsICAweDUwIH0sIHsgWkRfQ1I5NywgIDB4MzcgfSwgeyBaRF9DUjk4LCAgMHgzNSB9LAorCQl7IFpEX0NSOTksICAweDAwIH0sIHsgWkRfQ1IxMDAsIDB4MDEgfSwgeyBaRF9DUjEwMSwgMHgxMyB9LAorCQl7IFpEX0NSMTAyLCAweDI3IH0sIHsgWkRfQ1IxMDMsIDB4MjcgfSwgeyBaRF9DUjEwNCwgMHgxOCB9LAorCQl7IFpEX0NSMTA1LCAweDEyIH0sIHsgWkRfQ1IxMDYsIDB4MDQgfSwgeyBaRF9DUjEwNywgMHgwMCB9LAorCQl7IFpEX0NSMTA4LCAweDBhIH0sIHsgWkRfQ1IxMDksIDB4MjcgfSwgeyBaRF9DUjExMCwgMHgyNyB9LAorCQl7IFpEX0NSMTExLCAweDI3IH0sIHsgWkRfQ1IxMTIsIDB4MjcgfSwgeyBaRF9DUjExMywgMHgyNyB9LAorCQl7IFpEX0NSMTE0LCAweDI3IH0sIHsgWkRfQ1IxMTUsIDB4MjYgfSwgeyBaRF9DUjExNiwgMHgyNCB9LAorCQl7IFpEX0NSMTE3LCAweGZjIH0sIHsgWkRfQ1IxMTgsIDB4ZmEgfSwgeyBaRF9DUjExOSwgMHgxZSB9LAorCQl7IFpEX0NSMTI1LCAweDkwIH0sIHsgWkRfQ1IxMjYsIDB4MDAgfSwgeyBaRF9DUjEyNywgMHgwMCB9LAorCQl7IFpEX0NSMTI4LCAweDE0IH0sIHsgWkRfQ1IxMjksIDB4MTIgfSwgeyBaRF9DUjEzMCwgMHgxMCB9LAorCQl7IFpEX0NSMTMxLCAweDBjIH0sIHsgWkRfQ1IxMzYsIDB4ZGYgfSwgeyBaRF9DUjEzNywgMHhhMCB9LAorCQl7IFpEX0NSMTM4LCAweGE4IH0sIHsgWkRfQ1IxMzksIDB4YjQgfSwgeyBaRF9DUjE0MCwgMHg5OCB9LAorCQl7IFpEX0NSMTQxLCAweDgyIH0sIHsgWkRfQ1IxNDIsIDB4NTMgfSwgeyBaRF9DUjE0MywgMHgxYyB9LAorCQl7IFpEX0NSMTQ0LCAweDZjIH0sIHsgWkRfQ1IxNDcsIDB4MDcgfSwgeyBaRF9DUjE0OCwgMHg0MCB9LAorCQl7IFpEX0NSMTQ5LCAweDQwIH0sIC8qIE9yZzoweDUwIENvbVRyZW5kOlJhbExpbmsgQVAgKi8KKwkJeyBaRF9DUjE1MCwgMHgxNCB9LCAvKiBPcmc6MHgwRSBDb21UcmVuZDpSYWxMaW5rIEFQICovCisJCXsgWkRfQ1IxNTEsIDB4MTggfSwgeyBaRF9DUjE1OSwgMHg3MCB9LCB7IFpEX0NSMTYwLCAweGZlIH0sCisJCXsgWkRfQ1IxNjEsIDB4ZWUgfSwgeyBaRF9DUjE2MiwgMHhhYSB9LCB7IFpEX0NSMTYzLCAweGZhIH0sCisJCXsgWkRfQ1IxNjQsIDB4ZmEgfSwgeyBaRF9DUjE2NSwgMHhlYSB9LCB7IFpEX0NSMTY2LCAweGJlIH0sCisJCXsgWkRfQ1IxNjcsIDB4YmUgfSwgeyBaRF9DUjE2OCwgMHg2YSB9LCB7IFpEX0NSMTY5LCAweGJhIH0sCisJCXsgWkRfQ1IxNzAsIDB4YmEgfSwgeyBaRF9DUjE3MSwgMHhiYSB9LAorCQkvKiBOb3RlOiBaRF9DUjIwNCBtdXN0IGxlYWQgdGhlIFpEX0NSMjAzICovCisJCXsgWkRfQ1IyMDQsIDB4N2QgfSwKIAkJe30sCi0JCXsgQ1IyMDMsIDB4MzAgfSwKKwkJeyBaRF9DUjIwMywgMHgzMCB9LAogCX07CiAKIAlpbnQgciwgdDsKQEAgLTEyMDAsMjQgKzEyMDAsMjQgQEAKIHN0YXRpYyBpbnQgdXBkYXRlX3B3cl9pbnQoc3RydWN0IHpkX2NoaXAgKmNoaXAsIHU4IGNoYW5uZWwpCiB7CiAJdTggdmFsdWUgPSBjaGlwLT5wd3JfaW50X3ZhbHVlc1tjaGFubmVsIC0gMV07Ci0JcmV0dXJuIHpkX2lvd3JpdGUxNl9sb2NrZWQoY2hpcCwgdmFsdWUsIENSMzEpOworCXJldHVybiB6ZF9pb3dyaXRlMTZfbG9ja2VkKGNoaXAsIHZhbHVlLCBaRF9DUjMxKTsKIH0KIAogc3RhdGljIGludCB1cGRhdGVfcHdyX2NhbChzdHJ1Y3QgemRfY2hpcCAqY2hpcCwgdTggY2hhbm5lbCkKIHsKIAl1OCB2YWx1ZSA9IGNoaXAtPnB3cl9jYWxfdmFsdWVzW2NoYW5uZWwtMV07Ci0JcmV0dXJuIHpkX2lvd3JpdGUxNl9sb2NrZWQoY2hpcCwgdmFsdWUsIENSNjgpOworCXJldHVybiB6ZF9pb3dyaXRlMTZfbG9ja2VkKGNoaXAsIHZhbHVlLCBaRF9DUjY4KTsKIH0KIAogc3RhdGljIGludCB1cGRhdGVfb2ZkbV9jYWwoc3RydWN0IHpkX2NoaXAgKmNoaXAsIHU4IGNoYW5uZWwpCiB7CiAJc3RydWN0IHpkX2lvcmVxMTYgaW9yZXFzWzNdOwogCi0JaW9yZXFzWzBdLmFkZHIgPSBDUjY3OworCWlvcmVxc1swXS5hZGRyID0gWkRfQ1I2NzsKIAlpb3JlcXNbMF0udmFsdWUgPSBjaGlwLT5vZmRtX2NhbF92YWx1ZXNbT0ZETV8zNk1fSU5ERVhdW2NoYW5uZWwtMV07Ci0JaW9yZXFzWzFdLmFkZHIgPSBDUjY2OworCWlvcmVxc1sxXS5hZGRyID0gWkRfQ1I2NjsKIAlpb3JlcXNbMV0udmFsdWUgPSBjaGlwLT5vZmRtX2NhbF92YWx1ZXNbT0ZETV80OE1fSU5ERVhdW2NoYW5uZWwtMV07Ci0JaW9yZXFzWzJdLmFkZHIgPSBDUjY1OworCWlvcmVxc1syXS5hZGRyID0gWkRfQ1I2NTsKIAlpb3JlcXNbMl0udmFsdWUgPSBjaGlwLT5vZmRtX2NhbF92YWx1ZXNbT0ZETV81NE1fSU5ERVhdW2NoYW5uZWwtMV07CiAKIAlyZXR1cm4gemRfaW93cml0ZTE2YV9sb2NrZWQoY2hpcCwgaW9yZXFzLCBBUlJBWV9TSVpFKGlvcmVxcykpOwpAQCAtMTIzNiw5ICsxMjM2LDkgQEAKIAkJcmV0dXJuIHI7CiAJaWYgKHpkX2NoaXBfaXNfemQxMjExYihjaGlwKSkgewogCQlzdGF0aWMgY29uc3Qgc3RydWN0IHpkX2lvcmVxMTYgaW9yZXFzW10gPSB7Ci0JCQl7IENSNjksIDB4MjggfSwKKwkJCXsgWkRfQ1I2OSwgMHgyOCB9LAogCQkJe30sCi0JCQl7IENSNjksIDB4MmEgfSwKKwkJCXsgWkRfQ1I2OSwgMHgyYSB9LAogCQl9OwogCiAJCXIgPSB1cGRhdGVfb2ZkbV9jYWwoY2hpcCwgY2hhbm5lbCk7CkBAIC0xMjY5LDcgKzEyNjksNyBAQAogCWlmIChyKQogCQlyZXR1cm4gcjsKIAlkZXZfZGJnX2YoemRfY2hpcF9kZXYoY2hpcCksICJwYXRjaGluZyB2YWx1ZSAleFxuIiwgdmFsdWUgJiAweGZmKTsKLQlyZXR1cm4gemRfaW93cml0ZTE2X2xvY2tlZChjaGlwLCB2YWx1ZSAmIDB4ZmYsIENSNDcpOworCXJldHVybiB6ZF9pb3dyaXRlMTZfbG9ja2VkKGNoaXAsIHZhbHVlICYgMHhmZiwgWkRfQ1I0Nyk7CiB9CiAKIGludCB6ZF9jaGlwX3NldF9jaGFubmVsKHN0cnVjdCB6ZF9jaGlwICpjaGlwLCB1OCBjaGFubmVsKQpAQCAtMTUwNSw5ICsxNTA1LDkgQEAKIGludCB6ZF9yZndyaXRlX2NyX2xvY2tlZChzdHJ1Y3QgemRfY2hpcCAqY2hpcCwgdTMyIHZhbHVlKQogewogCWNvbnN0IHN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxc1tdID0gewotCQl7IENSMjQ0LCAodmFsdWUgPj4gMTYpICYgMHhmZiB9LAotCQl7IENSMjQzLCAodmFsdWUgPj4gIDgpICYgMHhmZiB9LAotCQl7IENSMjQyLCAgdmFsdWUgICAgICAgICYgMHhmZiB9LAorCQl7IFpEX0NSMjQ0LCAodmFsdWUgPj4gMTYpICYgMHhmZiB9LAorCQl7IFpEX0NSMjQzLCAodmFsdWUgPj4gIDgpICYgMHhmZiB9LAorCQl7IFpEX0NSMjQyLCAgdmFsdWUgICAgICAgICYgMHhmZiB9LAogCX07CiAJWkRfQVNTRVJUKG11dGV4X2lzX2xvY2tlZCgmY2hpcC0+bXV0ZXgpKTsKIAlyZXR1cm4gemRfaW93cml0ZTE2YV9sb2NrZWQoY2hpcCwgaW9yZXFzLCBBUlJBWV9TSVpFKGlvcmVxcykpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5oCmluZGV4IDE0ZTQ0MDIuLjRiZTdjM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmgKQEAgLTYxLDI3NyArNjEsMjg4IEBACiAjZGVmaW5lIEZXUkFXX0RBVEEob2Zmc2V0KSAoKHpkX2FkZHJfdCkoRldfU1RBUlQgKyAob2Zmc2V0KSkpCiAKIC8qIDgtYml0IGhhcmR3YXJlIHJlZ2lzdGVycyAqLwotI2RlZmluZSBDUjAgICBDVExfUkVHKDB4MDAwMCkKLSNkZWZpbmUgQ1IxICAgQ1RMX1JFRygweDAwMDQpCi0jZGVmaW5lIENSMiAgIENUTF9SRUcoMHgwMDA4KQotI2RlZmluZSBDUjMgICBDVExfUkVHKDB4MDAwQykKKyNkZWZpbmUgWkRfQ1IwICAgQ1RMX1JFRygweDAwMDApCisjZGVmaW5lIFpEX0NSMSAgIENUTF9SRUcoMHgwMDA0KQorI2RlZmluZSBaRF9DUjIgICBDVExfUkVHKDB4MDAwOCkKKyNkZWZpbmUgWkRfQ1IzICAgQ1RMX1JFRygweDAwMEMpCiAKLSNkZWZpbmUgQ1I1ICAgQ1RMX1JFRygweDAwMTApCisjZGVmaW5lIFpEX0NSNSAgIENUTF9SRUcoMHgwMDEwKQogLyoJYml0IDU6IGlmIHNldCBzaG9ydCBwcmVhbWJsZSB1c2VkCiAgKgliaXQgNjogZmlsdGVyIGJhbmQgLSBKYXBhbiBjaGFubmVsIDE0IG9uLCBlbHNlIG9mZgogICovCi0jZGVmaW5lIENSNiAgIENUTF9SRUcoMHgwMDE0KQotI2RlZmluZSBDUjcgICBDVExfUkVHKDB4MDAxOCkKLSNkZWZpbmUgQ1I4ICAgQ1RMX1JFRygweDAwMUMpCisjZGVmaW5lIFpEX0NSNiAgIENUTF9SRUcoMHgwMDE0KQorI2RlZmluZSBaRF9DUjcgICBDVExfUkVHKDB4MDAxOCkKKyNkZWZpbmUgWkRfQ1I4ICAgQ1RMX1JFRygweDAwMUMpCiAKLSNkZWZpbmUgQ1I0ICAgQ1RMX1JFRygweDAwMjApCisjZGVmaW5lIFpEX0NSNCAgIENUTF9SRUcoMHgwMDIwKQogCi0jZGVmaW5lIENSOSAgIENUTF9SRUcoMHgwMDI0KQotLyoJYml0IDI6IGFudGVubmEgc3dpdGNoICh0b2dldGhlciB3aXRoIENSMTApICovCi0jZGVmaW5lIENSMTAgIENUTF9SRUcoMHgwMDI4KQotLyoJYml0IDE6IGFudGVubmEgc3dpdGNoICh0b2dldGhlciB3aXRoIENSOSkKLSAqCVJGMjk1OSBjb250cm9scyB3aXRoIENSMTEgcmFkaW9uIG9uIGFuZCBvZmYKKyNkZWZpbmUgWkRfQ1I5ICAgQ1RMX1JFRygweDAwMjQpCisvKgliaXQgMjogYW50ZW5uYSBzd2l0Y2ggKHRvZ2V0aGVyIHdpdGggWkRfQ1IxMCkgKi8KKyNkZWZpbmUgWkRfQ1IxMCAgQ1RMX1JFRygweDAwMjgpCisvKgliaXQgMTogYW50ZW5uYSBzd2l0Y2ggKHRvZ2V0aGVyIHdpdGggWkRfQ1I5KQorICoJUkYyOTU5IGNvbnRyb2xzIHdpdGggWkRfQ1IxMSByYWRpb24gb24gYW5kIG9mZgogICovCi0jZGVmaW5lIENSMTEgIENUTF9SRUcoMHgwMDJDKQorI2RlZmluZSBaRF9DUjExICBDVExfUkVHKDB4MDAyQykKIC8qCWJpdCA2OiAgVFggcG93ZXIgY29udHJvbCBmb3IgT0ZETQotICoJUkYyOTU5IGNvbnRyb2xzIHdpdGggQ1IxMCByYWRpbyBvbiBhbmQgb2ZmCisgKglSRjI5NTkgY29udHJvbHMgd2l0aCBaRF9DUjEwIHJhZGlvIG9uIGFuZCBvZmYKICAqLwotI2RlZmluZSBDUjEyICBDVExfUkVHKDB4MDAzMCkKLSNkZWZpbmUgQ1IxMyAgQ1RMX1JFRygweDAwMzQpCi0jZGVmaW5lIENSMTQgIENUTF9SRUcoMHgwMDM4KQotI2RlZmluZSBDUjE1ICBDVExfUkVHKDB4MDAzQykKLSNkZWZpbmUgQ1IxNiAgQ1RMX1JFRygweDAwNDApCi0jZGVmaW5lIENSMTcgIENUTF9SRUcoMHgwMDQ0KQotI2RlZmluZSBDUjE4ICBDVExfUkVHKDB4MDA0OCkKLSNkZWZpbmUgQ1IxOSAgQ1RMX1JFRygweDAwNEMpCi0jZGVmaW5lIENSMjAgIENUTF9SRUcoMHgwMDUwKQotI2RlZmluZSBDUjIxICBDVExfUkVHKDB4MDA1NCkKLSNkZWZpbmUgQ1IyMiAgQ1RMX1JFRygweDAwNTgpCi0jZGVmaW5lIENSMjMgIENUTF9SRUcoMHgwMDVDKQotI2RlZmluZSBDUjI0ICBDVExfUkVHKDB4MDA2MCkJLyogQ0NBIHRocmVzaG9sZCAqLwotI2RlZmluZSBDUjI1ICBDVExfUkVHKDB4MDA2NCkKLSNkZWZpbmUgQ1IyNiAgQ1RMX1JFRygweDAwNjgpCi0jZGVmaW5lIENSMjcgIENUTF9SRUcoMHgwMDZDKQotI2RlZmluZSBDUjI4ICBDVExfUkVHKDB4MDA3MCkKLSNkZWZpbmUgQ1IyOSAgQ1RMX1JFRygweDAwNzQpCi0jZGVmaW5lIENSMzAgIENUTF9SRUcoMHgwMDc4KQotI2RlZmluZSBDUjMxICBDVExfUkVHKDB4MDA3QykJLyogVFggcG93ZXIgY29udHJvbCBmb3IgUkYgaW4gQ0NLIG1vZGUgKi8KLSNkZWZpbmUgQ1IzMiAgQ1RMX1JFRygweDAwODApCi0jZGVmaW5lIENSMzMgIENUTF9SRUcoMHgwMDg0KQotI2RlZmluZSBDUjM0ICBDVExfUkVHKDB4MDA4OCkKLSNkZWZpbmUgQ1IzNSAgQ1RMX1JFRygweDAwOEMpCi0jZGVmaW5lIENSMzYgIENUTF9SRUcoMHgwMDkwKQotI2RlZmluZSBDUjM3ICBDVExfUkVHKDB4MDA5NCkKLSNkZWZpbmUgQ1IzOCAgQ1RMX1JFRygweDAwOTgpCi0jZGVmaW5lIENSMzkgIENUTF9SRUcoMHgwMDlDKQotI2RlZmluZSBDUjQwICBDVExfUkVHKDB4MDBBMCkKLSNkZWZpbmUgQ1I0MSAgQ1RMX1JFRygweDAwQTQpCi0jZGVmaW5lIENSNDIgIENUTF9SRUcoMHgwMEE4KQotI2RlZmluZSBDUjQzICBDVExfUkVHKDB4MDBBQykKLSNkZWZpbmUgQ1I0NCAgQ1RMX1JFRygweDAwQjApCi0jZGVmaW5lIENSNDUgIENUTF9SRUcoMHgwMEI0KQotI2RlZmluZSBDUjQ2ICBDVExfUkVHKDB4MDBCOCkKLSNkZWZpbmUgQ1I0NyAgQ1RMX1JFRygweDAwQkMpCS8qIENDSyBiYXNlYmFuZCBnYWluCi0JICAgICAgICAgICAgICAgICAgICAgICAgICogKHBhdGNoIHZhbHVlIG1pZ2h0IGJlIGluIEVFUFJPTSkKLQkJCQkgKi8KLSNkZWZpbmUgQ1I0OCAgQ1RMX1JFRygweDAwQzApCi0jZGVmaW5lIENSNDkgIENUTF9SRUcoMHgwMEM0KQotI2RlZmluZSBDUjUwICBDVExfUkVHKDB4MDBDOCkKLSNkZWZpbmUgQ1I1MSAgQ1RMX1JFRygweDAwQ0MpCS8qIFRYIHBvd2VyIGNvbnRyb2wgZm9yIFJGIGluIDYtMzZNIG1vZGVzICovCi0jZGVmaW5lIENSNTIgIENUTF9SRUcoMHgwMEQwKQkvKiBUWCBwb3dlciBjb250cm9sIGZvciBSRiBpbiA0OE0gbW9kZSAqLwotI2RlZmluZSBDUjUzICBDVExfUkVHKDB4MDBENCkJLyogVFggcG93ZXIgY29udHJvbCBmb3IgUkYgaW4gNTRNIG1vZGUgKi8KLSNkZWZpbmUgQ1I1NCAgQ1RMX1JFRygweDAwRDgpCi0jZGVmaW5lIENSNTUgIENUTF9SRUcoMHgwMERDKQotI2RlZmluZSBDUjU2ICBDVExfUkVHKDB4MDBFMCkKLSNkZWZpbmUgQ1I1NyAgQ1RMX1JFRygweDAwRTQpCi0jZGVmaW5lIENSNTggIENUTF9SRUcoMHgwMEU4KQotI2RlZmluZSBDUjU5ICBDVExfUkVHKDB4MDBFQykKLSNkZWZpbmUgQ1I2MCAgQ1RMX1JFRygweDAwRjApCi0jZGVmaW5lIENSNjEgIENUTF9SRUcoMHgwMEY0KQotI2RlZmluZSBDUjYyICBDVExfUkVHKDB4MDBGOCkKLSNkZWZpbmUgQ1I2MyAgQ1RMX1JFRygweDAwRkMpCi0jZGVmaW5lIENSNjQgIENUTF9SRUcoMHgwMTAwKQotI2RlZmluZSBDUjY1ICBDVExfUkVHKDB4MDEwNCkgLyogT0ZETSA1NE0gY2FsaWJyYXRpb24gKi8KLSNkZWZpbmUgQ1I2NiAgQ1RMX1JFRygweDAxMDgpIC8qIE9GRE0gNDhNIGNhbGlicmF0aW9uICovCi0jZGVmaW5lIENSNjcgIENUTF9SRUcoMHgwMTBDKSAvKiBPRkRNIDM2TSBjYWxpYnJhdGlvbiAqLwotI2RlZmluZSBDUjY4ICBDVExfUkVHKDB4MDExMCkgLyogQ0NLIGNhbGlicmF0aW9uICovCi0jZGVmaW5lIENSNjkgIENUTF9SRUcoMHgwMTE0KQotI2RlZmluZSBDUjcwICBDVExfUkVHKDB4MDExOCkKLSNkZWZpbmUgQ1I3MSAgQ1RMX1JFRygweDAxMUMpCi0jZGVmaW5lIENSNzIgIENUTF9SRUcoMHgwMTIwKQotI2RlZmluZSBDUjczICBDVExfUkVHKDB4MDEyNCkKLSNkZWZpbmUgQ1I3NCAgQ1RMX1JFRygweDAxMjgpCi0jZGVmaW5lIENSNzUgIENUTF9SRUcoMHgwMTJDKQotI2RlZmluZSBDUjc2ICBDVExfUkVHKDB4MDEzMCkKLSNkZWZpbmUgQ1I3NyAgQ1RMX1JFRygweDAxMzQpCi0jZGVmaW5lIENSNzggIENUTF9SRUcoMHgwMTM4KQotI2RlZmluZSBDUjc5ICBDVExfUkVHKDB4MDEzQykKLSNkZWZpbmUgQ1I4MCAgQ1RMX1JFRygweDAxNDApCi0jZGVmaW5lIENSODEgIENUTF9SRUcoMHgwMTQ0KQotI2RlZmluZSBDUjgyICBDVExfUkVHKDB4MDE0OCkKLSNkZWZpbmUgQ1I4MyAgQ1RMX1JFRygweDAxNEMpCi0jZGVmaW5lIENSODQgIENUTF9SRUcoMHgwMTUwKQotI2RlZmluZSBDUjg1ICBDVExfUkVHKDB4MDE1NCkKLSNkZWZpbmUgQ1I4NiAgQ1RMX1JFRygweDAxNTgpCi0jZGVmaW5lIENSODcgIENUTF9SRUcoMHgwMTVDKQotI2RlZmluZSBDUjg4ICBDVExfUkVHKDB4MDE2MCkKLSNkZWZpbmUgQ1I4OSAgQ1RMX1JFRygweDAxNjQpCi0jZGVmaW5lIENSOTAgIENUTF9SRUcoMHgwMTY4KQotI2RlZmluZSBDUjkxICBDVExfUkVHKDB4MDE2QykKLSNkZWZpbmUgQ1I5MiAgQ1RMX1JFRygweDAxNzApCi0jZGVmaW5lIENSOTMgIENUTF9SRUcoMHgwMTc0KQotI2RlZmluZSBDUjk0ICBDVExfUkVHKDB4MDE3OCkKLSNkZWZpbmUgQ1I5NSAgQ1RMX1JFRygweDAxN0MpCi0jZGVmaW5lIENSOTYgIENUTF9SRUcoMHgwMTgwKQotI2RlZmluZSBDUjk3ICBDVExfUkVHKDB4MDE4NCkKLSNkZWZpbmUgQ1I5OCAgQ1RMX1JFRygweDAxODgpCi0jZGVmaW5lIENSOTkgIENUTF9SRUcoMHgwMThDKQotI2RlZmluZSBDUjEwMCBDVExfUkVHKDB4MDE5MCkKLSNkZWZpbmUgQ1IxMDEgQ1RMX1JFRygweDAxOTQpCi0jZGVmaW5lIENSMTAyIENUTF9SRUcoMHgwMTk4KQotI2RlZmluZSBDUjEwMyBDVExfUkVHKDB4MDE5QykKLSNkZWZpbmUgQ1IxMDQgQ1RMX1JFRygweDAxQTApCi0jZGVmaW5lIENSMTA1IENUTF9SRUcoMHgwMUE0KQotI2RlZmluZSBDUjEwNiBDVExfUkVHKDB4MDFBOCkKLSNkZWZpbmUgQ1IxMDcgQ1RMX1JFRygweDAxQUMpCi0jZGVmaW5lIENSMTA4IENUTF9SRUcoMHgwMUIwKQotI2RlZmluZSBDUjEwOSBDVExfUkVHKDB4MDFCNCkKLSNkZWZpbmUgQ1IxMTAgQ1RMX1JFRygweDAxQjgpCi0jZGVmaW5lIENSMTExIENUTF9SRUcoMHgwMUJDKQotI2RlZmluZSBDUjExMiBDVExfUkVHKDB4MDFDMCkKLSNkZWZpbmUgQ1IxMTMgQ1RMX1JFRygweDAxQzQpCi0jZGVmaW5lIENSMTE0IENUTF9SRUcoMHgwMUM4KQotI2RlZmluZSBDUjExNSBDVExfUkVHKDB4MDFDQykKLSNkZWZpbmUgQ1IxMTYgQ1RMX1JFRygweDAxRDApCi0jZGVmaW5lIENSMTE3IENUTF9SRUcoMHgwMUQ0KQotI2RlZmluZSBDUjExOCBDVExfUkVHKDB4MDFEOCkKLSNkZWZpbmUgQ1IxMTkgQ1RMX1JFRygweDAxREMpCi0jZGVmaW5lIENSMTIwIENUTF9SRUcoMHgwMUUwKQotI2RlZmluZSBDUjEyMSBDVExfUkVHKDB4MDFFNCkKLSNkZWZpbmUgQ1IxMjIgQ1RMX1JFRygweDAxRTgpCi0jZGVmaW5lIENSMTIzIENUTF9SRUcoMHgwMUVDKQotI2RlZmluZSBDUjEyNCBDVExfUkVHKDB4MDFGMCkKLSNkZWZpbmUgQ1IxMjUgQ1RMX1JFRygweDAxRjQpCi0jZGVmaW5lIENSMTI2IENUTF9SRUcoMHgwMUY4KQotI2RlZmluZSBDUjEyNyBDVExfUkVHKDB4MDFGQykKLSNkZWZpbmUgQ1IxMjggQ1RMX1JFRygweDAyMDApCi0jZGVmaW5lIENSMTI5IENUTF9SRUcoMHgwMjA0KQotI2RlZmluZSBDUjEzMCBDVExfUkVHKDB4MDIwOCkKLSNkZWZpbmUgQ1IxMzEgQ1RMX1JFRygweDAyMEMpCi0jZGVmaW5lIENSMTMyIENUTF9SRUcoMHgwMjEwKQotI2RlZmluZSBDUjEzMyBDVExfUkVHKDB4MDIxNCkKLSNkZWZpbmUgQ1IxMzQgQ1RMX1JFRygweDAyMTgpCi0jZGVmaW5lIENSMTM1IENUTF9SRUcoMHgwMjFDKQotI2RlZmluZSBDUjEzNiBDVExfUkVHKDB4MDIyMCkKLSNkZWZpbmUgQ1IxMzcgQ1RMX1JFRygweDAyMjQpCi0jZGVmaW5lIENSMTM4IENUTF9SRUcoMHgwMjI4KQotI2RlZmluZSBDUjEzOSBDVExfUkVHKDB4MDIyQykKLSNkZWZpbmUgQ1IxNDAgQ1RMX1JFRygweDAyMzApCi0jZGVmaW5lIENSMTQxIENUTF9SRUcoMHgwMjM0KQotI2RlZmluZSBDUjE0MiBDVExfUkVHKDB4MDIzOCkKLSNkZWZpbmUgQ1IxNDMgQ1RMX1JFRygweDAyM0MpCi0jZGVmaW5lIENSMTQ0IENUTF9SRUcoMHgwMjQwKQotI2RlZmluZSBDUjE0NSBDVExfUkVHKDB4MDI0NCkKLSNkZWZpbmUgQ1IxNDYgQ1RMX1JFRygweDAyNDgpCi0jZGVmaW5lIENSMTQ3IENUTF9SRUcoMHgwMjRDKQotI2RlZmluZSBDUjE0OCBDVExfUkVHKDB4MDI1MCkKLSNkZWZpbmUgQ1IxNDkgQ1RMX1JFRygweDAyNTQpCi0jZGVmaW5lIENSMTUwIENUTF9SRUcoMHgwMjU4KQotI2RlZmluZSBDUjE1MSBDVExfUkVHKDB4MDI1QykKLSNkZWZpbmUgQ1IxNTIgQ1RMX1JFRygweDAyNjApCi0jZGVmaW5lIENSMTUzIENUTF9SRUcoMHgwMjY0KQotI2RlZmluZSBDUjE1NCBDVExfUkVHKDB4MDI2OCkKLSNkZWZpbmUgQ1IxNTUgQ1RMX1JFRygweDAyNkMpCi0jZGVmaW5lIENSMTU2IENUTF9SRUcoMHgwMjcwKQotI2RlZmluZSBDUjE1NyBDVExfUkVHKDB4MDI3NCkKLSNkZWZpbmUgQ1IxNTggQ1RMX1JFRygweDAyNzgpCi0jZGVmaW5lIENSMTU5IENUTF9SRUcoMHgwMjdDKQotI2RlZmluZSBDUjE2MCBDVExfUkVHKDB4MDI4MCkKLSNkZWZpbmUgQ1IxNjEgQ1RMX1JFRygweDAyODQpCi0jZGVmaW5lIENSMTYyIENUTF9SRUcoMHgwMjg4KQotI2RlZmluZSBDUjE2MyBDVExfUkVHKDB4MDI4QykKLSNkZWZpbmUgQ1IxNjQgQ1RMX1JFRygweDAyOTApCi0jZGVmaW5lIENSMTY1IENUTF9SRUcoMHgwMjk0KQotI2RlZmluZSBDUjE2NiBDVExfUkVHKDB4MDI5OCkKLSNkZWZpbmUgQ1IxNjcgQ1RMX1JFRygweDAyOUMpCi0jZGVmaW5lIENSMTY4IENUTF9SRUcoMHgwMkEwKQotI2RlZmluZSBDUjE2OSBDVExfUkVHKDB4MDJBNCkKLSNkZWZpbmUgQ1IxNzAgQ1RMX1JFRygweDAyQTgpCi0jZGVmaW5lIENSMTcxIENUTF9SRUcoMHgwMkFDKQotI2RlZmluZSBDUjE3MiBDVExfUkVHKDB4MDJCMCkKLSNkZWZpbmUgQ1IxNzMgQ1RMX1JFRygweDAyQjQpCi0jZGVmaW5lIENSMTc0IENUTF9SRUcoMHgwMkI4KQotI2RlZmluZSBDUjE3NSBDVExfUkVHKDB4MDJCQykKLSNkZWZpbmUgQ1IxNzYgQ1RMX1JFRygweDAyQzApCi0jZGVmaW5lIENSMTc3IENUTF9SRUcoMHgwMkM0KQotI2RlZmluZSBDUjE3OCBDVExfUkVHKDB4MDJDOCkKLSNkZWZpbmUgQ1IxNzkgQ1RMX1JFRygweDAyQ0MpCi0jZGVmaW5lIENSMTgwIENUTF9SRUcoMHgwMkQwKQotI2RlZmluZSBDUjE4MSBDVExfUkVHKDB4MDJENCkKLSNkZWZpbmUgQ1IxODIgQ1RMX1JFRygweDAyRDgpCi0jZGVmaW5lIENSMTgzIENUTF9SRUcoMHgwMkRDKQotI2RlZmluZSBDUjE4NCBDVExfUkVHKDB4MDJFMCkKLSNkZWZpbmUgQ1IxODUgQ1RMX1JFRygweDAyRTQpCi0jZGVmaW5lIENSMTg2IENUTF9SRUcoMHgwMkU4KQotI2RlZmluZSBDUjE4NyBDVExfUkVHKDB4MDJFQykKLSNkZWZpbmUgQ1IxODggQ1RMX1JFRygweDAyRjApCi0jZGVmaW5lIENSMTg5IENUTF9SRUcoMHgwMkY0KQotI2RlZmluZSBDUjE5MCBDVExfUkVHKDB4MDJGOCkKLSNkZWZpbmUgQ1IxOTEgQ1RMX1JFRygweDAyRkMpCi0jZGVmaW5lIENSMTkyIENUTF9SRUcoMHgwMzAwKQotI2RlZmluZSBDUjE5MyBDVExfUkVHKDB4MDMwNCkKLSNkZWZpbmUgQ1IxOTQgQ1RMX1JFRygweDAzMDgpCi0jZGVmaW5lIENSMTk1IENUTF9SRUcoMHgwMzBDKQotI2RlZmluZSBDUjE5NiBDVExfUkVHKDB4MDMxMCkKLSNkZWZpbmUgQ1IxOTcgQ1RMX1JFRygweDAzMTQpCi0jZGVmaW5lIENSMTk4IENUTF9SRUcoMHgwMzE4KQotI2RlZmluZSBDUjE5OSBDVExfUkVHKDB4MDMxQykKLSNkZWZpbmUgQ1IyMDAgQ1RMX1JFRygweDAzMjApCi0jZGVmaW5lIENSMjAxIENUTF9SRUcoMHgwMzI0KQotI2RlZmluZSBDUjIwMiBDVExfUkVHKDB4MDMyOCkKLSNkZWZpbmUgQ1IyMDMgQ1RMX1JFRygweDAzMkMpCS8qIEkyQyBidXMgdGVtcGxhdGUgdmFsdWUgJiBmbGFzaCBjb250cm9sICovCi0jZGVmaW5lIENSMjA0IENUTF9SRUcoMHgwMzMwKQotI2RlZmluZSBDUjIwNSBDVExfUkVHKDB4MDMzNCkKLSNkZWZpbmUgQ1IyMDYgQ1RMX1JFRygweDAzMzgpCi0jZGVmaW5lIENSMjA3IENUTF9SRUcoMHgwMzNDKQotI2RlZmluZSBDUjIwOCBDVExfUkVHKDB4MDM0MCkKLSNkZWZpbmUgQ1IyMDkgQ1RMX1JFRygweDAzNDQpCi0jZGVmaW5lIENSMjEwIENUTF9SRUcoMHgwMzQ4KQotI2RlZmluZSBDUjIxMSBDVExfUkVHKDB4MDM0QykKLSNkZWZpbmUgQ1IyMTIgQ1RMX1JFRygweDAzNTApCi0jZGVmaW5lIENSMjEzIENUTF9SRUcoMHgwMzU0KQotI2RlZmluZSBDUjIxNCBDVExfUkVHKDB4MDM1OCkKLSNkZWZpbmUgQ1IyMTUgQ1RMX1JFRygweDAzNUMpCi0jZGVmaW5lIENSMjE2IENUTF9SRUcoMHgwMzYwKQotI2RlZmluZSBDUjIxNyBDVExfUkVHKDB4MDM2NCkKLSNkZWZpbmUgQ1IyMTggQ1RMX1JFRygweDAzNjgpCi0jZGVmaW5lIENSMjE5IENUTF9SRUcoMHgwMzZDKQotI2RlZmluZSBDUjIyMCBDVExfUkVHKDB4MDM3MCkKLSNkZWZpbmUgQ1IyMjEgQ1RMX1JFRygweDAzNzQpCi0jZGVmaW5lIENSMjIyIENUTF9SRUcoMHgwMzc4KQotI2RlZmluZSBDUjIyMyBDVExfUkVHKDB4MDM3QykKLSNkZWZpbmUgQ1IyMjQgQ1RMX1JFRygweDAzODApCi0jZGVmaW5lIENSMjI1IENUTF9SRUcoMHgwMzg0KQotI2RlZmluZSBDUjIyNiBDVExfUkVHKDB4MDM4OCkKLSNkZWZpbmUgQ1IyMjcgQ1RMX1JFRygweDAzOEMpCi0jZGVmaW5lIENSMjI4IENUTF9SRUcoMHgwMzkwKQotI2RlZmluZSBDUjIyOSBDVExfUkVHKDB4MDM5NCkKLSNkZWZpbmUgQ1IyMzAgQ1RMX1JFRygweDAzOTgpCi0jZGVmaW5lIENSMjMxIENUTF9SRUcoMHgwMzlDKQotI2RlZmluZSBDUjIzMiBDVExfUkVHKDB4MDNBMCkKLSNkZWZpbmUgQ1IyMzMgQ1RMX1JFRygweDAzQTQpCi0jZGVmaW5lIENSMjM0IENUTF9SRUcoMHgwM0E4KQotI2RlZmluZSBDUjIzNSBDVExfUkVHKDB4MDNBQykKLSNkZWZpbmUgQ1IyMzYgQ1RMX1JFRygweDAzQjApCisjZGVmaW5lIFpEX0NSMTIgIENUTF9SRUcoMHgwMDMwKQorI2RlZmluZSBaRF9DUjEzICBDVExfUkVHKDB4MDAzNCkKKyNkZWZpbmUgWkRfQ1IxNCAgQ1RMX1JFRygweDAwMzgpCisjZGVmaW5lIFpEX0NSMTUgIENUTF9SRUcoMHgwMDNDKQorI2RlZmluZSBaRF9DUjE2ICBDVExfUkVHKDB4MDA0MCkKKyNkZWZpbmUgWkRfQ1IxNyAgQ1RMX1JFRygweDAwNDQpCisjZGVmaW5lIFpEX0NSMTggIENUTF9SRUcoMHgwMDQ4KQorI2RlZmluZSBaRF9DUjE5ICBDVExfUkVHKDB4MDA0QykKKyNkZWZpbmUgWkRfQ1IyMCAgQ1RMX1JFRygweDAwNTApCisjZGVmaW5lIFpEX0NSMjEgIENUTF9SRUcoMHgwMDU0KQorI2RlZmluZSBaRF9DUjIyICBDVExfUkVHKDB4MDA1OCkKKyNkZWZpbmUgWkRfQ1IyMyAgQ1RMX1JFRygweDAwNUMpCisjZGVmaW5lIFpEX0NSMjQgIENUTF9SRUcoMHgwMDYwKQkvKiBDQ0EgdGhyZXNob2xkICovCisjZGVmaW5lIFpEX0NSMjUgIENUTF9SRUcoMHgwMDY0KQorI2RlZmluZSBaRF9DUjI2ICBDVExfUkVHKDB4MDA2OCkKKyNkZWZpbmUgWkRfQ1IyNyAgQ1RMX1JFRygweDAwNkMpCisjZGVmaW5lIFpEX0NSMjggIENUTF9SRUcoMHgwMDcwKQorI2RlZmluZSBaRF9DUjI5ICBDVExfUkVHKDB4MDA3NCkKKyNkZWZpbmUgWkRfQ1IzMCAgQ1RMX1JFRygweDAwNzgpCisjZGVmaW5lIFpEX0NSMzEgIENUTF9SRUcoMHgwMDdDKQkvKiBUWCBwb3dlciBjb250cm9sIGZvciBSRiBpbgorCQkJCQkgKiBDQ0sgbW9kZQorCQkJCQkgKi8KKyNkZWZpbmUgWkRfQ1IzMiAgQ1RMX1JFRygweDAwODApCisjZGVmaW5lIFpEX0NSMzMgIENUTF9SRUcoMHgwMDg0KQorI2RlZmluZSBaRF9DUjM0ICBDVExfUkVHKDB4MDA4OCkKKyNkZWZpbmUgWkRfQ1IzNSAgQ1RMX1JFRygweDAwOEMpCisjZGVmaW5lIFpEX0NSMzYgIENUTF9SRUcoMHgwMDkwKQorI2RlZmluZSBaRF9DUjM3ICBDVExfUkVHKDB4MDA5NCkKKyNkZWZpbmUgWkRfQ1IzOCAgQ1RMX1JFRygweDAwOTgpCisjZGVmaW5lIFpEX0NSMzkgIENUTF9SRUcoMHgwMDlDKQorI2RlZmluZSBaRF9DUjQwICBDVExfUkVHKDB4MDBBMCkKKyNkZWZpbmUgWkRfQ1I0MSAgQ1RMX1JFRygweDAwQTQpCisjZGVmaW5lIFpEX0NSNDIgIENUTF9SRUcoMHgwMEE4KQorI2RlZmluZSBaRF9DUjQzICBDVExfUkVHKDB4MDBBQykKKyNkZWZpbmUgWkRfQ1I0NCAgQ1RMX1JFRygweDAwQjApCisjZGVmaW5lIFpEX0NSNDUgIENUTF9SRUcoMHgwMEI0KQorI2RlZmluZSBaRF9DUjQ2ICBDVExfUkVHKDB4MDBCOCkKKyNkZWZpbmUgWkRfQ1I0NyAgQ1RMX1JFRygweDAwQkMpCS8qIENDSyBiYXNlYmFuZCBnYWluCisJCQkJCSAqIChwYXRjaCB2YWx1ZSBtaWdodCBiZSBpbiBFRVBST00pCisJCQkJCSAqLworI2RlZmluZSBaRF9DUjQ4ICBDVExfUkVHKDB4MDBDMCkKKyNkZWZpbmUgWkRfQ1I0OSAgQ1RMX1JFRygweDAwQzQpCisjZGVmaW5lIFpEX0NSNTAgIENUTF9SRUcoMHgwMEM4KQorI2RlZmluZSBaRF9DUjUxICBDVExfUkVHKDB4MDBDQykJLyogVFggcG93ZXIgY29udHJvbCBmb3IgUkYgaW4KKwkJCQkJICogNi0zNk0gbW9kZXMKKwkJCQkJICovCisjZGVmaW5lIFpEX0NSNTIgIENUTF9SRUcoMHgwMEQwKQkvKiBUWCBwb3dlciBjb250cm9sIGZvciBSRiBpbgorCQkJCQkgKiA0OE0gbW9kZQorCQkJCQkgKi8KKyNkZWZpbmUgWkRfQ1I1MyAgQ1RMX1JFRygweDAwRDQpCS8qIFRYIHBvd2VyIGNvbnRyb2wgZm9yIFJGIGluCisJCQkJCSAqIDU0TSBtb2RlCisJCQkJCSAqLworI2RlZmluZSBaRF9DUjU0ICBDVExfUkVHKDB4MDBEOCkKKyNkZWZpbmUgWkRfQ1I1NSAgQ1RMX1JFRygweDAwREMpCisjZGVmaW5lIFpEX0NSNTYgIENUTF9SRUcoMHgwMEUwKQorI2RlZmluZSBaRF9DUjU3ICBDVExfUkVHKDB4MDBFNCkKKyNkZWZpbmUgWkRfQ1I1OCAgQ1RMX1JFRygweDAwRTgpCisjZGVmaW5lIFpEX0NSNTkgIENUTF9SRUcoMHgwMEVDKQorI2RlZmluZSBaRF9DUjYwICBDVExfUkVHKDB4MDBGMCkKKyNkZWZpbmUgWkRfQ1I2MSAgQ1RMX1JFRygweDAwRjQpCisjZGVmaW5lIFpEX0NSNjIgIENUTF9SRUcoMHgwMEY4KQorI2RlZmluZSBaRF9DUjYzICBDVExfUkVHKDB4MDBGQykKKyNkZWZpbmUgWkRfQ1I2NCAgQ1RMX1JFRygweDAxMDApCisjZGVmaW5lIFpEX0NSNjUgIENUTF9SRUcoMHgwMTA0KSAvKiBPRkRNIDU0TSBjYWxpYnJhdGlvbiAqLworI2RlZmluZSBaRF9DUjY2ICBDVExfUkVHKDB4MDEwOCkgLyogT0ZETSA0OE0gY2FsaWJyYXRpb24gKi8KKyNkZWZpbmUgWkRfQ1I2NyAgQ1RMX1JFRygweDAxMEMpIC8qIE9GRE0gMzZNIGNhbGlicmF0aW9uICovCisjZGVmaW5lIFpEX0NSNjggIENUTF9SRUcoMHgwMTEwKSAvKiBDQ0sgY2FsaWJyYXRpb24gKi8KKyNkZWZpbmUgWkRfQ1I2OSAgQ1RMX1JFRygweDAxMTQpCisjZGVmaW5lIFpEX0NSNzAgIENUTF9SRUcoMHgwMTE4KQorI2RlZmluZSBaRF9DUjcxICBDVExfUkVHKDB4MDExQykKKyNkZWZpbmUgWkRfQ1I3MiAgQ1RMX1JFRygweDAxMjApCisjZGVmaW5lIFpEX0NSNzMgIENUTF9SRUcoMHgwMTI0KQorI2RlZmluZSBaRF9DUjc0ICBDVExfUkVHKDB4MDEyOCkKKyNkZWZpbmUgWkRfQ1I3NSAgQ1RMX1JFRygweDAxMkMpCisjZGVmaW5lIFpEX0NSNzYgIENUTF9SRUcoMHgwMTMwKQorI2RlZmluZSBaRF9DUjc3ICBDVExfUkVHKDB4MDEzNCkKKyNkZWZpbmUgWkRfQ1I3OCAgQ1RMX1JFRygweDAxMzgpCisjZGVmaW5lIFpEX0NSNzkgIENUTF9SRUcoMHgwMTNDKQorI2RlZmluZSBaRF9DUjgwICBDVExfUkVHKDB4MDE0MCkKKyNkZWZpbmUgWkRfQ1I4MSAgQ1RMX1JFRygweDAxNDQpCisjZGVmaW5lIFpEX0NSODIgIENUTF9SRUcoMHgwMTQ4KQorI2RlZmluZSBaRF9DUjgzICBDVExfUkVHKDB4MDE0QykKKyNkZWZpbmUgWkRfQ1I4NCAgQ1RMX1JFRygweDAxNTApCisjZGVmaW5lIFpEX0NSODUgIENUTF9SRUcoMHgwMTU0KQorI2RlZmluZSBaRF9DUjg2ICBDVExfUkVHKDB4MDE1OCkKKyNkZWZpbmUgWkRfQ1I4NyAgQ1RMX1JFRygweDAxNUMpCisjZGVmaW5lIFpEX0NSODggIENUTF9SRUcoMHgwMTYwKQorI2RlZmluZSBaRF9DUjg5ICBDVExfUkVHKDB4MDE2NCkKKyNkZWZpbmUgWkRfQ1I5MCAgQ1RMX1JFRygweDAxNjgpCisjZGVmaW5lIFpEX0NSOTEgIENUTF9SRUcoMHgwMTZDKQorI2RlZmluZSBaRF9DUjkyICBDVExfUkVHKDB4MDE3MCkKKyNkZWZpbmUgWkRfQ1I5MyAgQ1RMX1JFRygweDAxNzQpCisjZGVmaW5lIFpEX0NSOTQgIENUTF9SRUcoMHgwMTc4KQorI2RlZmluZSBaRF9DUjk1ICBDVExfUkVHKDB4MDE3QykKKyNkZWZpbmUgWkRfQ1I5NiAgQ1RMX1JFRygweDAxODApCisjZGVmaW5lIFpEX0NSOTcgIENUTF9SRUcoMHgwMTg0KQorI2RlZmluZSBaRF9DUjk4ICBDVExfUkVHKDB4MDE4OCkKKyNkZWZpbmUgWkRfQ1I5OSAgQ1RMX1JFRygweDAxOEMpCisjZGVmaW5lIFpEX0NSMTAwIENUTF9SRUcoMHgwMTkwKQorI2RlZmluZSBaRF9DUjEwMSBDVExfUkVHKDB4MDE5NCkKKyNkZWZpbmUgWkRfQ1IxMDIgQ1RMX1JFRygweDAxOTgpCisjZGVmaW5lIFpEX0NSMTAzIENUTF9SRUcoMHgwMTlDKQorI2RlZmluZSBaRF9DUjEwNCBDVExfUkVHKDB4MDFBMCkKKyNkZWZpbmUgWkRfQ1IxMDUgQ1RMX1JFRygweDAxQTQpCisjZGVmaW5lIFpEX0NSMTA2IENUTF9SRUcoMHgwMUE4KQorI2RlZmluZSBaRF9DUjEwNyBDVExfUkVHKDB4MDFBQykKKyNkZWZpbmUgWkRfQ1IxMDggQ1RMX1JFRygweDAxQjApCisjZGVmaW5lIFpEX0NSMTA5IENUTF9SRUcoMHgwMUI0KQorI2RlZmluZSBaRF9DUjExMCBDVExfUkVHKDB4MDFCOCkKKyNkZWZpbmUgWkRfQ1IxMTEgQ1RMX1JFRygweDAxQkMpCisjZGVmaW5lIFpEX0NSMTEyIENUTF9SRUcoMHgwMUMwKQorI2RlZmluZSBaRF9DUjExMyBDVExfUkVHKDB4MDFDNCkKKyNkZWZpbmUgWkRfQ1IxMTQgQ1RMX1JFRygweDAxQzgpCisjZGVmaW5lIFpEX0NSMTE1IENUTF9SRUcoMHgwMUNDKQorI2RlZmluZSBaRF9DUjExNiBDVExfUkVHKDB4MDFEMCkKKyNkZWZpbmUgWkRfQ1IxMTcgQ1RMX1JFRygweDAxRDQpCisjZGVmaW5lIFpEX0NSMTE4IENUTF9SRUcoMHgwMUQ4KQorI2RlZmluZSBaRF9DUjExOSBDVExfUkVHKDB4MDFEQykKKyNkZWZpbmUgWkRfQ1IxMjAgQ1RMX1JFRygweDAxRTApCisjZGVmaW5lIFpEX0NSMTIxIENUTF9SRUcoMHgwMUU0KQorI2RlZmluZSBaRF9DUjEyMiBDVExfUkVHKDB4MDFFOCkKKyNkZWZpbmUgWkRfQ1IxMjMgQ1RMX1JFRygweDAxRUMpCisjZGVmaW5lIFpEX0NSMTI0IENUTF9SRUcoMHgwMUYwKQorI2RlZmluZSBaRF9DUjEyNSBDVExfUkVHKDB4MDFGNCkKKyNkZWZpbmUgWkRfQ1IxMjYgQ1RMX1JFRygweDAxRjgpCisjZGVmaW5lIFpEX0NSMTI3IENUTF9SRUcoMHgwMUZDKQorI2RlZmluZSBaRF9DUjEyOCBDVExfUkVHKDB4MDIwMCkKKyNkZWZpbmUgWkRfQ1IxMjkgQ1RMX1JFRygweDAyMDQpCisjZGVmaW5lIFpEX0NSMTMwIENUTF9SRUcoMHgwMjA4KQorI2RlZmluZSBaRF9DUjEzMSBDVExfUkVHKDB4MDIwQykKKyNkZWZpbmUgWkRfQ1IxMzIgQ1RMX1JFRygweDAyMTApCisjZGVmaW5lIFpEX0NSMTMzIENUTF9SRUcoMHgwMjE0KQorI2RlZmluZSBaRF9DUjEzNCBDVExfUkVHKDB4MDIxOCkKKyNkZWZpbmUgWkRfQ1IxMzUgQ1RMX1JFRygweDAyMUMpCisjZGVmaW5lIFpEX0NSMTM2IENUTF9SRUcoMHgwMjIwKQorI2RlZmluZSBaRF9DUjEzNyBDVExfUkVHKDB4MDIyNCkKKyNkZWZpbmUgWkRfQ1IxMzggQ1RMX1JFRygweDAyMjgpCisjZGVmaW5lIFpEX0NSMTM5IENUTF9SRUcoMHgwMjJDKQorI2RlZmluZSBaRF9DUjE0MCBDVExfUkVHKDB4MDIzMCkKKyNkZWZpbmUgWkRfQ1IxNDEgQ1RMX1JFRygweDAyMzQpCisjZGVmaW5lIFpEX0NSMTQyIENUTF9SRUcoMHgwMjM4KQorI2RlZmluZSBaRF9DUjE0MyBDVExfUkVHKDB4MDIzQykKKyNkZWZpbmUgWkRfQ1IxNDQgQ1RMX1JFRygweDAyNDApCisjZGVmaW5lIFpEX0NSMTQ1IENUTF9SRUcoMHgwMjQ0KQorI2RlZmluZSBaRF9DUjE0NiBDVExfUkVHKDB4MDI0OCkKKyNkZWZpbmUgWkRfQ1IxNDcgQ1RMX1JFRygweDAyNEMpCisjZGVmaW5lIFpEX0NSMTQ4IENUTF9SRUcoMHgwMjUwKQorI2RlZmluZSBaRF9DUjE0OSBDVExfUkVHKDB4MDI1NCkKKyNkZWZpbmUgWkRfQ1IxNTAgQ1RMX1JFRygweDAyNTgpCisjZGVmaW5lIFpEX0NSMTUxIENUTF9SRUcoMHgwMjVDKQorI2RlZmluZSBaRF9DUjE1MiBDVExfUkVHKDB4MDI2MCkKKyNkZWZpbmUgWkRfQ1IxNTMgQ1RMX1JFRygweDAyNjQpCisjZGVmaW5lIFpEX0NSMTU0IENUTF9SRUcoMHgwMjY4KQorI2RlZmluZSBaRF9DUjE1NSBDVExfUkVHKDB4MDI2QykKKyNkZWZpbmUgWkRfQ1IxNTYgQ1RMX1JFRygweDAyNzApCisjZGVmaW5lIFpEX0NSMTU3IENUTF9SRUcoMHgwMjc0KQorI2RlZmluZSBaRF9DUjE1OCBDVExfUkVHKDB4MDI3OCkKKyNkZWZpbmUgWkRfQ1IxNTkgQ1RMX1JFRygweDAyN0MpCisjZGVmaW5lIFpEX0NSMTYwIENUTF9SRUcoMHgwMjgwKQorI2RlZmluZSBaRF9DUjE2MSBDVExfUkVHKDB4MDI4NCkKKyNkZWZpbmUgWkRfQ1IxNjIgQ1RMX1JFRygweDAyODgpCisjZGVmaW5lIFpEX0NSMTYzIENUTF9SRUcoMHgwMjhDKQorI2RlZmluZSBaRF9DUjE2NCBDVExfUkVHKDB4MDI5MCkKKyNkZWZpbmUgWkRfQ1IxNjUgQ1RMX1JFRygweDAyOTQpCisjZGVmaW5lIFpEX0NSMTY2IENUTF9SRUcoMHgwMjk4KQorI2RlZmluZSBaRF9DUjE2NyBDVExfUkVHKDB4MDI5QykKKyNkZWZpbmUgWkRfQ1IxNjggQ1RMX1JFRygweDAyQTApCisjZGVmaW5lIFpEX0NSMTY5IENUTF9SRUcoMHgwMkE0KQorI2RlZmluZSBaRF9DUjE3MCBDVExfUkVHKDB4MDJBOCkKKyNkZWZpbmUgWkRfQ1IxNzEgQ1RMX1JFRygweDAyQUMpCisjZGVmaW5lIFpEX0NSMTcyIENUTF9SRUcoMHgwMkIwKQorI2RlZmluZSBaRF9DUjE3MyBDVExfUkVHKDB4MDJCNCkKKyNkZWZpbmUgWkRfQ1IxNzQgQ1RMX1JFRygweDAyQjgpCisjZGVmaW5lIFpEX0NSMTc1IENUTF9SRUcoMHgwMkJDKQorI2RlZmluZSBaRF9DUjE3NiBDVExfUkVHKDB4MDJDMCkKKyNkZWZpbmUgWkRfQ1IxNzcgQ1RMX1JFRygweDAyQzQpCisjZGVmaW5lIFpEX0NSMTc4IENUTF9SRUcoMHgwMkM4KQorI2RlZmluZSBaRF9DUjE3OSBDVExfUkVHKDB4MDJDQykKKyNkZWZpbmUgWkRfQ1IxODAgQ1RMX1JFRygweDAyRDApCisjZGVmaW5lIFpEX0NSMTgxIENUTF9SRUcoMHgwMkQ0KQorI2RlZmluZSBaRF9DUjE4MiBDVExfUkVHKDB4MDJEOCkKKyNkZWZpbmUgWkRfQ1IxODMgQ1RMX1JFRygweDAyREMpCisjZGVmaW5lIFpEX0NSMTg0IENUTF9SRUcoMHgwMkUwKQorI2RlZmluZSBaRF9DUjE4NSBDVExfUkVHKDB4MDJFNCkKKyNkZWZpbmUgWkRfQ1IxODYgQ1RMX1JFRygweDAyRTgpCisjZGVmaW5lIFpEX0NSMTg3IENUTF9SRUcoMHgwMkVDKQorI2RlZmluZSBaRF9DUjE4OCBDVExfUkVHKDB4MDJGMCkKKyNkZWZpbmUgWkRfQ1IxODkgQ1RMX1JFRygweDAyRjQpCisjZGVmaW5lIFpEX0NSMTkwIENUTF9SRUcoMHgwMkY4KQorI2RlZmluZSBaRF9DUjE5MSBDVExfUkVHKDB4MDJGQykKKyNkZWZpbmUgWkRfQ1IxOTIgQ1RMX1JFRygweDAzMDApCisjZGVmaW5lIFpEX0NSMTkzIENUTF9SRUcoMHgwMzA0KQorI2RlZmluZSBaRF9DUjE5NCBDVExfUkVHKDB4MDMwOCkKKyNkZWZpbmUgWkRfQ1IxOTUgQ1RMX1JFRygweDAzMEMpCisjZGVmaW5lIFpEX0NSMTk2IENUTF9SRUcoMHgwMzEwKQorI2RlZmluZSBaRF9DUjE5NyBDVExfUkVHKDB4MDMxNCkKKyNkZWZpbmUgWkRfQ1IxOTggQ1RMX1JFRygweDAzMTgpCisjZGVmaW5lIFpEX0NSMTk5IENUTF9SRUcoMHgwMzFDKQorI2RlZmluZSBaRF9DUjIwMCBDVExfUkVHKDB4MDMyMCkKKyNkZWZpbmUgWkRfQ1IyMDEgQ1RMX1JFRygweDAzMjQpCisjZGVmaW5lIFpEX0NSMjAyIENUTF9SRUcoMHgwMzI4KQorI2RlZmluZSBaRF9DUjIwMyBDVExfUkVHKDB4MDMyQykJLyogSTJDIGJ1cyB0ZW1wbGF0ZSB2YWx1ZSAmIGZsYXNoCisJCQkJCSAqIGNvbnRyb2wKKwkJCQkJICovCisjZGVmaW5lIFpEX0NSMjA0IENUTF9SRUcoMHgwMzMwKQorI2RlZmluZSBaRF9DUjIwNSBDVExfUkVHKDB4MDMzNCkKKyNkZWZpbmUgWkRfQ1IyMDYgQ1RMX1JFRygweDAzMzgpCisjZGVmaW5lIFpEX0NSMjA3IENUTF9SRUcoMHgwMzNDKQorI2RlZmluZSBaRF9DUjIwOCBDVExfUkVHKDB4MDM0MCkKKyNkZWZpbmUgWkRfQ1IyMDkgQ1RMX1JFRygweDAzNDQpCisjZGVmaW5lIFpEX0NSMjEwIENUTF9SRUcoMHgwMzQ4KQorI2RlZmluZSBaRF9DUjIxMSBDVExfUkVHKDB4MDM0QykKKyNkZWZpbmUgWkRfQ1IyMTIgQ1RMX1JFRygweDAzNTApCisjZGVmaW5lIFpEX0NSMjEzIENUTF9SRUcoMHgwMzU0KQorI2RlZmluZSBaRF9DUjIxNCBDVExfUkVHKDB4MDM1OCkKKyNkZWZpbmUgWkRfQ1IyMTUgQ1RMX1JFRygweDAzNUMpCisjZGVmaW5lIFpEX0NSMjE2IENUTF9SRUcoMHgwMzYwKQorI2RlZmluZSBaRF9DUjIxNyBDVExfUkVHKDB4MDM2NCkKKyNkZWZpbmUgWkRfQ1IyMTggQ1RMX1JFRygweDAzNjgpCisjZGVmaW5lIFpEX0NSMjE5IENUTF9SRUcoMHgwMzZDKQorI2RlZmluZSBaRF9DUjIyMCBDVExfUkVHKDB4MDM3MCkKKyNkZWZpbmUgWkRfQ1IyMjEgQ1RMX1JFRygweDAzNzQpCisjZGVmaW5lIFpEX0NSMjIyIENUTF9SRUcoMHgwMzc4KQorI2RlZmluZSBaRF9DUjIyMyBDVExfUkVHKDB4MDM3QykKKyNkZWZpbmUgWkRfQ1IyMjQgQ1RMX1JFRygweDAzODApCisjZGVmaW5lIFpEX0NSMjI1IENUTF9SRUcoMHgwMzg0KQorI2RlZmluZSBaRF9DUjIyNiBDVExfUkVHKDB4MDM4OCkKKyNkZWZpbmUgWkRfQ1IyMjcgQ1RMX1JFRygweDAzOEMpCisjZGVmaW5lIFpEX0NSMjI4IENUTF9SRUcoMHgwMzkwKQorI2RlZmluZSBaRF9DUjIyOSBDVExfUkVHKDB4MDM5NCkKKyNkZWZpbmUgWkRfQ1IyMzAgQ1RMX1JFRygweDAzOTgpCisjZGVmaW5lIFpEX0NSMjMxIENUTF9SRUcoMHgwMzlDKQorI2RlZmluZSBaRF9DUjIzMiBDVExfUkVHKDB4MDNBMCkKKyNkZWZpbmUgWkRfQ1IyMzMgQ1RMX1JFRygweDAzQTQpCisjZGVmaW5lIFpEX0NSMjM0IENUTF9SRUcoMHgwM0E4KQorI2RlZmluZSBaRF9DUjIzNSBDVExfUkVHKDB4MDNBQykKKyNkZWZpbmUgWkRfQ1IyMzYgQ1RMX1JFRygweDAzQjApCiAKLSNkZWZpbmUgQ1IyNDAgQ1RMX1JFRygweDAzQzApCi0vKgliaXQgNzogIGhvc3QtY29udHJvbGxlZCBSRiByZWdpc3RlciB3cml0ZXMKLSAqIENSMjQxLUNSMjQ1OiBmb3IgaGFyZHdhcmUgY29udHJvbGxlZCB3cml0aW5nIG9mIFJGIGJpdHMsIG5vdCBuZWVkZWQgZm9yCi0gKiAgICAgICAgICAgICAgVVNCCisjZGVmaW5lIFpEX0NSMjQwIENUTF9SRUcoMHgwM0MwKQorLyogICAgICAgICAgICAgYml0IDc6IGhvc3QtY29udHJvbGxlZCBSRiByZWdpc3RlciB3cml0ZXMKKyAqIFpEX0NSMjQxLVpEX0NSMjQ1OiBmb3IgaGFyZHdhcmUgY29udHJvbGxlZCB3cml0aW5nIG9mIFJGIGJpdHMsIG5vdCBuZWVkZWQgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgVVNCCiAgKi8KLSNkZWZpbmUgQ1IyNDEgQ1RMX1JFRygweDAzQzQpCi0jZGVmaW5lIENSMjQyIENUTF9SRUcoMHgwM0M4KQotI2RlZmluZSBDUjI0MyBDVExfUkVHKDB4MDNDQykKLSNkZWZpbmUgQ1IyNDQgQ1RMX1JFRygweDAzRDApCi0jZGVmaW5lIENSMjQ1IENUTF9SRUcoMHgwM0Q0KQorI2RlZmluZSBaRF9DUjI0MSBDVExfUkVHKDB4MDNDNCkKKyNkZWZpbmUgWkRfQ1IyNDIgQ1RMX1JFRygweDAzQzgpCisjZGVmaW5lIFpEX0NSMjQzIENUTF9SRUcoMHgwM0NDKQorI2RlZmluZSBaRF9DUjI0NCBDVExfUkVHKDB4MDNEMCkKKyNkZWZpbmUgWkRfQ1IyNDUgQ1RMX1JFRygweDAzRDQpCiAKLSNkZWZpbmUgQ1IyNTEgQ1RMX1JFRygweDAzRUMpCS8qIG9ubHkgdXNlZCBmb3IgYWN0aXZhdGlvbiBhbmQgZGVhY3RpdmF0aW9uIG9mCi0JCQkJICogQWlyb2hhIFJGcyBBTDIyMzAgYW5kIEFMNzIzMEIKLQkJCQkgKi8KLSNkZWZpbmUgQ1IyNTIgQ1RMX1JFRygweDAzRjApCi0jZGVmaW5lIENSMjUzIENUTF9SRUcoMHgwM0Y0KQotI2RlZmluZSBDUjI1NCBDVExfUkVHKDB4MDNGOCkKLSNkZWZpbmUgQ1IyNTUgQ1RMX1JFRygweDAzRkMpCisjZGVmaW5lIFpEX0NSMjUxIENUTF9SRUcoMHgwM0VDKQkvKiBvbmx5IHVzZWQgZm9yIGFjdGl2YXRpb24gYW5kCisJCQkJCSAqIGRlYWN0aXZhdGlvbiBvZiBBaXJvaGEgUkZzIEFMMjIzMAorCQkJCQkgKiBhbmQgQUw3MjMwQgorCQkJCQkgKi8KKyNkZWZpbmUgWkRfQ1IyNTIgQ1RMX1JFRygweDAzRjApCisjZGVmaW5lIFpEX0NSMjUzIENUTF9SRUcoMHgwM0Y0KQorI2RlZmluZSBaRF9DUjI1NCBDVExfUkVHKDB4MDNGOCkKKyNkZWZpbmUgWkRfQ1IyNTUgQ1RMX1JFRygweDAzRkMpCiAKICNkZWZpbmUgQ1JfTUFYX1BIWV9SRUcgMjU1CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3JmLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9yZi5oCmluZGV4IDc5ZGMxMDMuLjcyNWI3YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3JmLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfcmYuaApAQCAtNTUsNyArNTUsNyBAQAogCSAqIGRlZmF1bHRzIHRvIDEgKHllcykgKi8KIAl1OCB1cGRhdGVfY2hhbm5lbF9pbnQ6MTsKIAotCS8qIHdoZXRoZXIgQ1I0NyBzaG91bGQgYmUgcGF0Y2hlZCBmcm9tIHRoZSBFRVBST00sIGlmIHRoZSBhcHByb3ByaWF0ZQorCS8qIHdoZXRoZXIgWkRfQ1I0NyBzaG91bGQgYmUgcGF0Y2hlZCBmcm9tIHRoZSBFRVBST00sIGlmIHRoZSBhcHByb3ByaWF0ZQogCSAqIGZsYWcgaXMgc2V0IGluIHRoZSBQT0QuIFRoZSB2ZW5kb3IgZHJpdmVyIHN1Z2dlc3RzIHRoYXQgdGhpcyBzaG91bGQKIAkgKiBiZSBkb25lIGZvciBhbGwgUkYncywgYnV0IGEgYnVnIGluIHRoZWlyIGNvZGUgcHJldmVudHMgYnV0IHRoZWlyCiAJICogSFdfT3ZlcldyaXRlUGh5UmVnRnJvbUUyUCgpIHJvdXRpbmUgZnJvbSBldmVyIHRha2luZyBlZmZlY3QuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9yZl9hbDIyMzAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3JmX2FsMjIzMC5jCmluZGV4IDc0YThmN2EuLjEyYmFiY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3JmX2FsMjIzMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3JmX2FsMjIzMC5jCkBAIC02MSwzMSArNjEsMzEgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgemRfaW9yZXExNiB6ZDEyMTFiX2lvcmVxc19zaGFyZWRfMVtdID0gewotCXsgQ1IyNDAsIDB4NTcgfSwgeyBDUjksICAgMHhlMCB9LAorCXsgWkRfQ1IyNDAsIDB4NTcgfSwgeyBaRF9DUjksICAgMHhlMCB9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxc19pbml0X2FsMjIzMHNbXSA9IHsKLQl7IENSNDcsICAgMHgxZSB9LCAvKiBNQVJLXzAwMiAqLwotCXsgQ1IxMDYsICAweDIyIH0sCi0JeyBDUjEwNywgIDB4MmEgfSwgLyogTUFSS18wMDIgKi8KLQl7IENSMTA5LCAgMHgxMyB9LCAvKiBNQVJLXzAwMiAqLwotCXsgQ1IxMTgsICAweGY4IH0sIC8qIE1BUktfMDAyICovCi0JeyBDUjExOSwgIDB4MTIgfSwgeyBDUjEyMiwgIDB4ZTAgfSwKLQl7IENSMTI4LCAgMHgxMCB9LCAvKiBNQVJLXzAwMSBmcm9tIDB4ZS0+MHgxMCAqLwotCXsgQ1IxMjksICAweDBlIH0sIC8qIE1BUktfMDAxIGZyb20gMHhkLT4weDBlICovCi0JeyBDUjEzMCwgIDB4MTAgfSwgLyogTUFSS18wMDEgZnJvbSAweGItPjB4MGQgKi8KKwl7IFpEX0NSNDcsICAgMHgxZSB9LCAvKiBNQVJLXzAwMiAqLworCXsgWkRfQ1IxMDYsICAweDIyIH0sCisJeyBaRF9DUjEwNywgIDB4MmEgfSwgLyogTUFSS18wMDIgKi8KKwl7IFpEX0NSMTA5LCAgMHgxMyB9LCAvKiBNQVJLXzAwMiAqLworCXsgWkRfQ1IxMTgsICAweGY4IH0sIC8qIE1BUktfMDAyICovCisJeyBaRF9DUjExOSwgIDB4MTIgfSwgeyBaRF9DUjEyMiwgIDB4ZTAgfSwKKwl7IFpEX0NSMTI4LCAgMHgxMCB9LCAvKiBNQVJLXzAwMSBmcm9tIDB4ZS0+MHgxMCAqLworCXsgWkRfQ1IxMjksICAweDBlIH0sIC8qIE1BUktfMDAxIGZyb20gMHhkLT4weDBlICovCisJeyBaRF9DUjEzMCwgIDB4MTAgfSwgLyogTUFSS18wMDEgZnJvbSAweGItPjB4MGQgKi8KIH07CiAKIHN0YXRpYyBpbnQgemQxMjExYl9hbDIyMzBfZmluYWxpemVfcmYoc3RydWN0IHpkX2NoaXAgKmNoaXApCiB7CiAJaW50IHI7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxc1tdID0gewotCQl7IENSODAsICAweDMwIH0sIHsgQ1I4MSwgIDB4MzAgfSwgeyBDUjc5LCAgMHg1OCB9LAotCQl7IENSMTIsICAweGYwIH0sIHsgQ1I3NywgIDB4MWIgfSwgeyBDUjc4LCAgMHg1OCB9LAotCQl7IENSMjAzLCAweDA2IH0sCisJCXsgWkRfQ1I4MCwgIDB4MzAgfSwgeyBaRF9DUjgxLCAgMHgzMCB9LCB7IFpEX0NSNzksICAweDU4IH0sCisJCXsgWkRfQ1IxMiwgIDB4ZjAgfSwgeyBaRF9DUjc3LCAgMHgxYiB9LCB7IFpEX0NSNzgsICAweDU4IH0sCisJCXsgWkRfQ1IyMDMsIDB4MDYgfSwKIAkJeyB9LAogCi0JCXsgQ1IyNDAsIDB4ODAgfSwKKwkJeyBaRF9DUjI0MCwgMHg4MCB9LAogCX07CiAKIAlyID0gemRfaW93cml0ZTE2YV9sb2NrZWQoY2hpcCwgaW9yZXFzLCBBUlJBWV9TSVpFKGlvcmVxcykpOwpAQCAtOTQsMTIgKzk0LDEyIEBACiAKIAkvKiByZWxhdGVkIHRvIGFudGVubmEgc2VsZWN0aW9uPyAqLwogCWlmIChjaGlwLT5uZXdfcGh5X2xheW91dCkgewotCQlyID0gemRfaW93cml0ZTE2X2xvY2tlZChjaGlwLCAweGUxLCBDUjkpOworCQlyID0gemRfaW93cml0ZTE2X2xvY2tlZChjaGlwLCAweGUxLCBaRF9DUjkpOwogCQlpZiAocikKIAkJCXJldHVybiByOwogCX0KIAotCXJldHVybiB6ZF9pb3dyaXRlMTZfbG9ja2VkKGNoaXAsIDB4MDYsIENSMjAzKTsKKwlyZXR1cm4gemRfaW93cml0ZTE2X2xvY2tlZChjaGlwLCAweDA2LCBaRF9DUjIwMyk7CiB9CiAKIHN0YXRpYyBpbnQgemQxMjExX2FsMjIzMF9pbml0X2h3KHN0cnVjdCB6ZF9yZiAqcmYpCkBAIC0xMDgsNDAgKzEwOCw0MCBAQAogCXN0cnVjdCB6ZF9jaGlwICpjaGlwID0gemRfcmZfdG9fY2hpcChyZik7CiAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHpkX2lvcmVxMTYgaW9yZXFzX2luaXRbXSA9IHsKLQkJeyBDUjE1LCAgIDB4MjAgfSwgeyBDUjIzLCAgIDB4NDAgfSwgeyBDUjI0LCAgMHgyMCB9LAotCQl7IENSMjYsICAgMHgxMSB9LCB7IENSMjgsICAgMHgzZSB9LCB7IENSMjksICAweDAwIH0sCi0JCXsgQ1I0NCwgICAweDMzIH0sIHsgQ1IxMDYsICAweDJhIH0sIHsgQ1IxMDcsIDB4MWEgfSwKLQkJeyBDUjEwOSwgIDB4MDkgfSwgeyBDUjExMCwgIDB4MjcgfSwgeyBDUjExMSwgMHgyYiB9LAotCQl7IENSMTEyLCAgMHgyYiB9LCB7IENSMTE5LCAgMHgwYSB9LCB7IENSMTAsICAweDg5IH0sCisJCXsgWkRfQ1IxNSwgICAweDIwIH0sIHsgWkRfQ1IyMywgICAweDQwIH0sIHsgWkRfQ1IyNCwgIDB4MjAgfSwKKwkJeyBaRF9DUjI2LCAgIDB4MTEgfSwgeyBaRF9DUjI4LCAgIDB4M2UgfSwgeyBaRF9DUjI5LCAgMHgwMCB9LAorCQl7IFpEX0NSNDQsICAgMHgzMyB9LCB7IFpEX0NSMTA2LCAgMHgyYSB9LCB7IFpEX0NSMTA3LCAweDFhIH0sCisJCXsgWkRfQ1IxMDksICAweDA5IH0sIHsgWkRfQ1IxMTAsICAweDI3IH0sIHsgWkRfQ1IxMTEsIDB4MmIgfSwKKwkJeyBaRF9DUjExMiwgIDB4MmIgfSwgeyBaRF9DUjExOSwgIDB4MGEgfSwgeyBaRF9DUjEwLCAgMHg4OSB9LAogCQkvKiBmb3IgbmV3ZXN0ICgzcmQgY3V0KSBBTDIzMDAgKi8KLQkJeyBDUjE3LCAgIDB4MjggfSwKLQkJeyBDUjI2LCAgIDB4OTMgfSwgeyBDUjM0LCAgIDB4MzAgfSwKKwkJeyBaRF9DUjE3LCAgIDB4MjggfSwKKwkJeyBaRF9DUjI2LCAgIDB4OTMgfSwgeyBaRF9DUjM0LCAgIDB4MzAgfSwKIAkJLyogZm9yIG5ld2VzdCAoM3JkIGN1dCkgQUwyMzAwICovCi0JCXsgQ1IzNSwgICAweDNlIH0sCi0JCXsgQ1I0MSwgICAweDI0IH0sIHsgQ1I0NCwgICAweDMyIH0sCisJCXsgWkRfQ1IzNSwgICAweDNlIH0sCisJCXsgWkRfQ1I0MSwgICAweDI0IH0sIHsgWkRfQ1I0NCwgICAweDMyIH0sCiAJCS8qIGZvciBuZXdlc3QgKDNyZCBjdXQpIEFMMjMwMCAqLwotCQl7IENSNDYsICAgMHg5NiB9LAotCQl7IENSNDcsICAgMHgxZSB9LCB7IENSNzksICAgMHg1OCB9LCB7IENSODAsICAweDMwIH0sCi0JCXsgQ1I4MSwgICAweDMwIH0sIHsgQ1I4NywgICAweDBhIH0sIHsgQ1I4OSwgIDB4MDQgfSwKLQkJeyBDUjkyLCAgIDB4MGEgfSwgeyBDUjk5LCAgIDB4MjggfSwgeyBDUjEwMCwgMHgwMCB9LAotCQl7IENSMTAxLCAgMHgxMyB9LCB7IENSMTAyLCAgMHgyNyB9LCB7IENSMTA2LCAweDI0IH0sCi0JCXsgQ1IxMDcsICAweDJhIH0sIHsgQ1IxMDksICAweDA5IH0sIHsgQ1IxMTAsIDB4MTMgfSwKLQkJeyBDUjExMSwgIDB4MWYgfSwgeyBDUjExMiwgIDB4MWYgfSwgeyBDUjExMywgMHgyNyB9LAotCQl7IENSMTE0LCAgMHgyNyB9LAorCQl7IFpEX0NSNDYsICAgMHg5NiB9LAorCQl7IFpEX0NSNDcsICAgMHgxZSB9LCB7IFpEX0NSNzksICAgMHg1OCB9LCB7IFpEX0NSODAsICAweDMwIH0sCisJCXsgWkRfQ1I4MSwgICAweDMwIH0sIHsgWkRfQ1I4NywgICAweDBhIH0sIHsgWkRfQ1I4OSwgIDB4MDQgfSwKKwkJeyBaRF9DUjkyLCAgIDB4MGEgfSwgeyBaRF9DUjk5LCAgIDB4MjggfSwgeyBaRF9DUjEwMCwgMHgwMCB9LAorCQl7IFpEX0NSMTAxLCAgMHgxMyB9LCB7IFpEX0NSMTAyLCAgMHgyNyB9LCB7IFpEX0NSMTA2LCAweDI0IH0sCisJCXsgWkRfQ1IxMDcsICAweDJhIH0sIHsgWkRfQ1IxMDksICAweDA5IH0sIHsgWkRfQ1IxMTAsIDB4MTMgfSwKKwkJeyBaRF9DUjExMSwgIDB4MWYgfSwgeyBaRF9DUjExMiwgIDB4MWYgfSwgeyBaRF9DUjExMywgMHgyNyB9LAorCQl7IFpEX0NSMTE0LCAgMHgyNyB9LAogCQkvKiBmb3IgbmV3ZXN0ICgzcmQgY3V0KSBBTDIzMDAgKi8KLQkJeyBDUjExNSwgIDB4MjQgfSwKLQkJeyBDUjExNiwgIDB4MjQgfSwgeyBDUjExNywgIDB4ZjQgfSwgeyBDUjExOCwgMHhmYyB9LAotCQl7IENSMTE5LCAgMHgxMCB9LCB7IENSMTIwLCAgMHg0ZiB9LCB7IENSMTIxLCAweDc3IH0sCi0JCXsgQ1IxMjIsICAweGUwIH0sIHsgQ1IxMzcsICAweDg4IH0sIHsgQ1IyNTIsIDB4ZmYgfSwKLQkJeyBDUjI1MywgIDB4ZmYgfSwKKwkJeyBaRF9DUjExNSwgIDB4MjQgfSwKKwkJeyBaRF9DUjExNiwgIDB4MjQgfSwgeyBaRF9DUjExNywgIDB4ZjQgfSwgeyBaRF9DUjExOCwgMHhmYyB9LAorCQl7IFpEX0NSMTE5LCAgMHgxMCB9LCB7IFpEX0NSMTIwLCAgMHg0ZiB9LCB7IFpEX0NSMTIxLCAweDc3IH0sCisJCXsgWkRfQ1IxMjIsICAweGUwIH0sIHsgWkRfQ1IxMzcsICAweDg4IH0sIHsgWkRfQ1IyNTIsIDB4ZmYgfSwKKwkJeyBaRF9DUjI1MywgIDB4ZmYgfSwKIAl9OwogCiAJc3RhdGljIGNvbnN0IHN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxc19wbGxbXSA9IHsKIAkJLyogc2hkbmIoUExMX09OKT0wICovCi0JCXsgQ1IyNTEsICAweDJmIH0sCisJCXsgWkRfQ1IyNTEsICAweDJmIH0sCiAJCS8qIHNoZG5iKFBMTF9PTik9MSAqLwotCQl7IENSMjUxLCAgMHgzZiB9LAotCQl7IENSMTM4LCAgMHgyOCB9LCB7IENSMjAzLCAgMHgwNiB9LAorCQl7IFpEX0NSMjUxLCAgMHgzZiB9LAorCQl7IFpEX0NSMTM4LCAgMHgyOCB9LCB7IFpEX0NSMjAzLCAgMHgwNiB9LAogCX07CiAKIAlzdGF0aWMgY29uc3QgdTMyIHJ2MVtdID0gewpAQCAtMTYxLDcgKzE2MSw3IEBACiAJCTB4MDgwNWI2LAogCQkweDAxMTY4NywKIAkJMHgwMDA2ODgsCi0JCTB4MDQwM2I5LCAvKiBleHRlcm5hbCBjb250cm9sIFRYIHBvd2VyIChDUjMxKSAqLworCQkweDA0MDNiOSwgLyogZXh0ZXJuYWwgY29udHJvbCBUWCBwb3dlciAoWkRfQ1IzMSkgKi8KIAkJMHgwMGRiYmEsCiAJCTB4MDAwOTliLAogCQkweDBiZGZmYywKQEAgLTIyMSw1MiArMjIxLDU0IEBACiAJc3RydWN0IHpkX2NoaXAgKmNoaXAgPSB6ZF9yZl90b19jaGlwKHJmKTsKIAogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgemRfaW9yZXExNiBpb3JlcXMxW10gPSB7Ci0JCXsgQ1IxMCwgIDB4ODkgfSwgeyBDUjE1LCAgMHgyMCB9LAotCQl7IENSMTcsICAweDJCIH0sIC8qIGZvciBuZXdlc3QoM3JkIGN1dCkgQUwyMjMwICovCi0JCXsgQ1IyMywgIDB4NDAgfSwgeyBDUjI0LCAgMHgyMCB9LCB7IENSMjYsICAweDkzIH0sCi0JCXsgQ1IyOCwgIDB4M2UgfSwgeyBDUjI5LCAgMHgwMCB9LAotCQl7IENSMzMsICAweDI4IH0sIC8qIDU2MjEgKi8KLQkJeyBDUjM0LCAgMHgzMCB9LAotCQl7IENSMzUsICAweDNlIH0sIC8qIGZvciBuZXdlc3QoM3JkIGN1dCkgQUwyMjMwICovCi0JCXsgQ1I0MSwgIDB4MjQgfSwgeyBDUjQ0LCAgMHgzMiB9LAotCQl7IENSNDYsICAweDk5IH0sIC8qIGZvciBuZXdlc3QoM3JkIGN1dCkgQUwyMjMwICovCi0JCXsgQ1I0NywgIDB4MWUgfSwKKwkJeyBaRF9DUjEwLCAgMHg4OSB9LCB7IFpEX0NSMTUsICAweDIwIH0sCisJCXsgWkRfQ1IxNywgIDB4MkIgfSwgLyogZm9yIG5ld2VzdCgzcmQgY3V0KSBBTDIyMzAgKi8KKwkJeyBaRF9DUjIzLCAgMHg0MCB9LCB7IFpEX0NSMjQsICAweDIwIH0sIHsgWkRfQ1IyNiwgIDB4OTMgfSwKKwkJeyBaRF9DUjI4LCAgMHgzZSB9LCB7IFpEX0NSMjksICAweDAwIH0sCisJCXsgWkRfQ1IzMywgIDB4MjggfSwgLyogNTYyMSAqLworCQl7IFpEX0NSMzQsICAweDMwIH0sCisJCXsgWkRfQ1IzNSwgIDB4M2UgfSwgLyogZm9yIG5ld2VzdCgzcmQgY3V0KSBBTDIyMzAgKi8KKwkJeyBaRF9DUjQxLCAgMHgyNCB9LCB7IFpEX0NSNDQsICAweDMyIH0sCisJCXsgWkRfQ1I0NiwgIDB4OTkgfSwgLyogZm9yIG5ld2VzdCgzcmQgY3V0KSBBTDIyMzAgKi8KKwkJeyBaRF9DUjQ3LCAgMHgxZSB9LAogCiAJCS8qIFpEMTIxMUIgMDUuMDYuMTAgKi8KLQkJeyBDUjQ4LCAgMHgwNiB9LCB7IENSNDksICAweGY5IH0sIHsgQ1I1MSwgIDB4MDEgfSwKLQkJeyBDUjUyLCAgMHg4MCB9LCB7IENSNTMsICAweDdlIH0sIHsgQ1I2NSwgIDB4MDAgfSwKLQkJeyBDUjY2LCAgMHgwMCB9LCB7IENSNjcsICAweDAwIH0sIHsgQ1I2OCwgIDB4MDAgfSwKLQkJeyBDUjY5LCAgMHgyOCB9LAorCQl7IFpEX0NSNDgsICAweDA2IH0sIHsgWkRfQ1I0OSwgIDB4ZjkgfSwgeyBaRF9DUjUxLCAgMHgwMSB9LAorCQl7IFpEX0NSNTIsICAweDgwIH0sIHsgWkRfQ1I1MywgIDB4N2UgfSwgeyBaRF9DUjY1LCAgMHgwMCB9LAorCQl7IFpEX0NSNjYsICAweDAwIH0sIHsgWkRfQ1I2NywgIDB4MDAgfSwgeyBaRF9DUjY4LCAgMHgwMCB9LAorCQl7IFpEX0NSNjksICAweDI4IH0sCiAKLQkJeyBDUjc5LCAgMHg1OCB9LCB7IENSODAsICAweDMwIH0sIHsgQ1I4MSwgIDB4MzAgfSwKLQkJeyBDUjg3LCAgMHgwYSB9LCB7IENSODksICAweDA0IH0sCi0JCXsgQ1I5MSwgIDB4MDAgfSwgLyogNTYyMSAqLwotCQl7IENSOTIsICAweDBhIH0sCi0JCXsgQ1I5OCwgIDB4OGQgfSwgLyogNDgwNCwgIGZvciAxMjEyIG5ldyBhbGdvcml0aG0gKi8KLQkJeyBDUjk5LCAgMHgwMCB9LCAvKiA1NjIxICovCi0JCXsgQ1IxMDEsIDB4MTMgfSwgeyBDUjEwMiwgMHgyNyB9LAotCQl7IENSMTA2LCAweDI0IH0sIC8qIGZvciBuZXdlc3QoM3JkIGN1dCkgQUwyMjMwICovCi0JCXsgQ1IxMDcsIDB4MmEgfSwKLQkJeyBDUjEwOSwgMHgxMyB9LCAvKiA0ODA0LCBmb3IgMTIxMiBuZXcgYWxnb3JpdGhtICovCi0JCXsgQ1IxMTAsIDB4MWYgfSwgLyogNDgwNCwgZm9yIDEyMTIgbmV3IGFsZ29yaXRobSAqLwotCQl7IENSMTExLCAweDFmIH0sIHsgQ1IxMTIsIDB4MWYgfSwgeyBDUjExMywgMHgyNyB9LAotCQl7IENSMTE0LCAweDI3IH0sCi0JCXsgQ1IxMTUsIDB4MjYgfSwgLyogMjQtPjI2IGF0IDQ5MDIgZm9yIG5ld2VzdCgzcmQgY3V0KSBBTDIyMzAgKi8KLQkJeyBDUjExNiwgMHgyNCB9LAotCQl7IENSMTE3LCAweGZhIH0sIC8qIGZvciAxMjExYiAqLwotCQl7IENSMTE4LCAweGZhIH0sIC8qIGZvciAxMjExYiAqLwotCQl7IENSMTE5LCAweDEwIH0sCi0JCXsgQ1IxMjAsIDB4NGYgfSwKLQkJeyBDUjEyMSwgMHg2YyB9LCAvKiBmb3IgMTIxMWIgKi8KLQkJeyBDUjEyMiwgMHhmYyB9LCAvKiBFMC0+RkMgYXQgNDkwMiAqLwotCQl7IENSMTIzLCAweDU3IH0sIC8qIDU2MjMgKi8KLQkJeyBDUjEyNSwgMHhhZCB9LCAvKiA0ODA0LCBmb3IgMTIxMiBuZXcgYWxnb3JpdGhtICovCi0JCXsgQ1IxMjYsIDB4NmMgfSwgLyogNTYxNCAqLwotCQl7IENSMTI3LCAweDAzIH0sIC8qIDQ4MDQsIGZvciAxMjEyIG5ldyBhbGdvcml0aG0gKi8KLQkJeyBDUjEzNywgMHg1MCB9LCAvKiA1NjE0ICovCi0JCXsgQ1IxMzgsIDB4YTggfSwKLQkJeyBDUjE0NCwgMHhhYyB9LCAvKiA1NjIxICovCi0JCXsgQ1IxNTAsIDB4MGQgfSwgeyBDUjI1MiwgMHgzNCB9LCB7IENSMjUzLCAweDM0IH0sCisJCXsgWkRfQ1I3OSwgIDB4NTggfSwgeyBaRF9DUjgwLCAgMHgzMCB9LCB7IFpEX0NSODEsICAweDMwIH0sCisJCXsgWkRfQ1I4NywgIDB4MGEgfSwgeyBaRF9DUjg5LCAgMHgwNCB9LAorCQl7IFpEX0NSOTEsICAweDAwIH0sIC8qIDU2MjEgKi8KKwkJeyBaRF9DUjkyLCAgMHgwYSB9LAorCQl7IFpEX0NSOTgsICAweDhkIH0sIC8qIDQ4MDQsICBmb3IgMTIxMiBuZXcgYWxnb3JpdGhtICovCisJCXsgWkRfQ1I5OSwgIDB4MDAgfSwgLyogNTYyMSAqLworCQl7IFpEX0NSMTAxLCAweDEzIH0sIHsgWkRfQ1IxMDIsIDB4MjcgfSwKKwkJeyBaRF9DUjEwNiwgMHgyNCB9LCAvKiBmb3IgbmV3ZXN0KDNyZCBjdXQpIEFMMjIzMCAqLworCQl7IFpEX0NSMTA3LCAweDJhIH0sCisJCXsgWkRfQ1IxMDksIDB4MTMgfSwgLyogNDgwNCwgZm9yIDEyMTIgbmV3IGFsZ29yaXRobSAqLworCQl7IFpEX0NSMTEwLCAweDFmIH0sIC8qIDQ4MDQsIGZvciAxMjEyIG5ldyBhbGdvcml0aG0gKi8KKwkJeyBaRF9DUjExMSwgMHgxZiB9LCB7IFpEX0NSMTEyLCAweDFmIH0sIHsgWkRfQ1IxMTMsIDB4MjcgfSwKKwkJeyBaRF9DUjExNCwgMHgyNyB9LAorCQl7IFpEX0NSMTE1LCAweDI2IH0sIC8qIDI0LT4yNiBhdCA0OTAyIGZvciBuZXdlc3QoM3JkIGN1dCkKKwkJCQkgICAgICogQUwyMjMwCisJCQkJICAgICAqLworCQl7IFpEX0NSMTE2LCAweDI0IH0sCisJCXsgWkRfQ1IxMTcsIDB4ZmEgfSwgLyogZm9yIDEyMTFiICovCisJCXsgWkRfQ1IxMTgsIDB4ZmEgfSwgLyogZm9yIDEyMTFiICovCisJCXsgWkRfQ1IxMTksIDB4MTAgfSwKKwkJeyBaRF9DUjEyMCwgMHg0ZiB9LAorCQl7IFpEX0NSMTIxLCAweDZjIH0sIC8qIGZvciAxMjExYiAqLworCQl7IFpEX0NSMTIyLCAweGZjIH0sIC8qIEUwLT5GQyBhdCA0OTAyICovCisJCXsgWkRfQ1IxMjMsIDB4NTcgfSwgLyogNTYyMyAqLworCQl7IFpEX0NSMTI1LCAweGFkIH0sIC8qIDQ4MDQsIGZvciAxMjEyIG5ldyBhbGdvcml0aG0gKi8KKwkJeyBaRF9DUjEyNiwgMHg2YyB9LCAvKiA1NjE0ICovCisJCXsgWkRfQ1IxMjcsIDB4MDMgfSwgLyogNDgwNCwgZm9yIDEyMTIgbmV3IGFsZ29yaXRobSAqLworCQl7IFpEX0NSMTM3LCAweDUwIH0sIC8qIDU2MTQgKi8KKwkJeyBaRF9DUjEzOCwgMHhhOCB9LAorCQl7IFpEX0NSMTQ0LCAweGFjIH0sIC8qIDU2MjEgKi8KKwkJeyBaRF9DUjE1MCwgMHgwZCB9LCB7IFpEX0NSMjUyLCAweDM0IH0sIHsgWkRfQ1IyNTMsIDB4MzQgfSwKIAl9OwogCiAJc3RhdGljIGNvbnN0IHUzMiBydjFbXSA9IHsKQEAgLTI4NCw3ICsyODYsNyBAQAogCQkweDZkYTAxMCwgLyogUmVnNiB1cGRhdGUgZm9yIE1QIHZlcnNpbyAqLwogCQkweGUzNjI4MCwgLyogTW9kaWZpZWQgYnkganhpYW8gZm9yIEJvci1DaGluIG9uIDIwMDQvMDgvMDIgKi8KIAkJMHgxMTYwMDAsCi0JCTB4OWRjMDIwLCAvKiBFeHRlcm5hbCBjb250cm9sIFRYIHBvd2VyIChDUjMxKSAqLworCQkweDlkYzAyMCwgLyogRXh0ZXJuYWwgY29udHJvbCBUWCBwb3dlciAoWkRfQ1IzMSkgKi8KIAkJMHg1ZGRiMDAsIC8qIFJlZ0EgdXBkYXRlIGZvciBNUCB2ZXJzaW9uICovCiAJCTB4ZDk5MDAwLCAvKiBSZWdCIHVwZGF0ZSBmb3IgTVAgdmVyc2lvbiAqLwogCQkweDNmZmJkMCwgLyogUmVnQyB1cGRhdGUgZm9yIE1QIHZlcnNpb24gKi8KQEAgLTI5NSw4ICsyOTcsOCBAQAogCX07CiAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHpkX2lvcmVxMTYgaW9yZXFzMltdID0gewotCQl7IENSMjUxLCAweDJmIH0sIC8qIHNoZG5iKFBMTF9PTik9MCAqLwotCQl7IENSMjUxLCAweDdmIH0sIC8qIHNoZG5iKFBMTF9PTik9MSAqLworCQl7IFpEX0NSMjUxLCAweDJmIH0sIC8qIHNoZG5iKFBMTF9PTik9MCAqLworCQl7IFpEX0NSMjUxLCAweDdmIH0sIC8qIHNoZG5iKFBMTF9PTik9MSAqLwogCX07CiAKIAlzdGF0aWMgY29uc3QgdTMyIHJ2M1tdID0gewpAQCAtMzA4LDcgKzMxMCw3IEBACiAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHpkX2lvcmVxMTYgaW9yZXFzM1tdID0gewogCQkvKiByZWxhdGVkIHRvIDZNIGJhbmQgZWRnZSBwYXRjaGluZywgaGFwcGVucyB1bmNvbmRpdGlvbmFsbHkgKi8KLQkJeyBDUjEyOCwgMHgxNCB9LCB7IENSMTI5LCAweDEyIH0sIHsgQ1IxMzAsIDB4MTAgfSwKKwkJeyBaRF9DUjEyOCwgMHgxNCB9LCB7IFpEX0NSMTI5LCAweDEyIH0sIHsgWkRfQ1IxMzAsIDB4MTAgfSwKIAl9OwogCiAJciA9IHpkX2lvd3JpdGUxNmFfbG9ja2VkKGNoaXAsIHpkMTIxMWJfaW9yZXFzX3NoYXJlZF8xLApAQCAtMzYxLDggKzM2Myw4IEBACiAJY29uc3QgdTMyICpydiA9IHpkMTIxMV9hbDIyMzBfdGFibGVbY2hhbm5lbC0xXTsKIAlzdHJ1Y3QgemRfY2hpcCAqY2hpcCA9IHpkX3JmX3RvX2NoaXAocmYpOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgemRfaW9yZXExNiBpb3JlcXNbXSA9IHsKLQkJeyBDUjEzOCwgMHgyOCB9LAotCQl7IENSMjAzLCAweDA2IH0sCisJCXsgWkRfQ1IxMzgsIDB4MjggfSwKKwkJeyBaRF9DUjIwMywgMHgwNiB9LAogCX07CiAKIAlyID0gemRfcmZ3cml0ZXZfbG9ja2VkKGNoaXAsIHJ2LCAzLCBSRl9SVl9CSVRTKTsKQEAgLTM5Myw4ICszOTUsOCBAQAogewogCXN0cnVjdCB6ZF9jaGlwICpjaGlwID0gemRfcmZfdG9fY2hpcChyZik7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxc1tdID0gewotCQl7IENSMTEsICAweDAwIH0sCi0JCXsgQ1IyNTEsIDB4M2YgfSwKKwkJeyBaRF9DUjExLCAgMHgwMCB9LAorCQl7IFpEX0NSMjUxLCAweDNmIH0sCiAJfTsKIAogCXJldHVybiB6ZF9pb3dyaXRlMTZhX2xvY2tlZChjaGlwLCBpb3JlcXMsIEFSUkFZX1NJWkUoaW9yZXFzKSk7CkBAIC00MDQsOCArNDA2LDggQEAKIHsKIAlzdHJ1Y3QgemRfY2hpcCAqY2hpcCA9IHpkX3JmX3RvX2NoaXAocmYpOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgemRfaW9yZXExNiBpb3JlcXNbXSA9IHsKLQkJeyBDUjExLCAgMHgwMCB9LAotCQl7IENSMjUxLCAweDdmIH0sCisJCXsgWkRfQ1IxMSwgIDB4MDAgfSwKKwkJeyBaRF9DUjI1MSwgMHg3ZiB9LAogCX07CiAKIAlyZXR1cm4gemRfaW93cml0ZTE2YV9sb2NrZWQoY2hpcCwgaW9yZXFzLCBBUlJBWV9TSVpFKGlvcmVxcykpOwpAQCAtNDE1LDggKzQxNyw4IEBACiB7CiAJc3RydWN0IHpkX2NoaXAgKmNoaXAgPSB6ZF9yZl90b19jaGlwKHJmKTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHpkX2lvcmVxMTYgaW9yZXFzW10gPSB7Ci0JCXsgQ1IxMSwgIDB4MDQgfSwKLQkJeyBDUjI1MSwgMHgyZiB9LAorCQl7IFpEX0NSMTEsICAweDA0IH0sCisJCXsgWkRfQ1IyNTEsIDB4MmYgfSwKIAl9OwogCiAJcmV0dXJuIHpkX2lvd3JpdGUxNmFfbG9ja2VkKGNoaXAsIGlvcmVxcywgQVJSQVlfU0laRShpb3JlcXMpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3JmX2FsNzIzMGIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3JmX2FsNzIzMGIuYwppbmRleCA2NTA5NWQ2Li4zODVjNjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9yZl9hbDcyMzBiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfcmZfYWw3MjMwYi5jCkBAIC02OCwxOSArNjgsMTkgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgemRfaW9yZXExNiBpb3JlcXNfc3dbXSA9IHsKLQl7IENSMTI4LCAweDE0IH0sIHsgQ1IxMjksIDB4MTIgfSwgeyBDUjEzMCwgMHgxMCB9LAotCXsgQ1IzOCwgIDB4MzggfSwgeyBDUjEzNiwgMHhkZiB9LAorCXsgWkRfQ1IxMjgsIDB4MTQgfSwgeyBaRF9DUjEyOSwgMHgxMiB9LCB7IFpEX0NSMTMwLCAweDEwIH0sCisJeyBaRF9DUjM4LCAgMHgzOCB9LCB7IFpEX0NSMTM2LCAweGRmIH0sCiB9OwogCiBzdGF0aWMgaW50IHpkMTIxMWJfYWw3MjMwYl9maW5hbGl6ZShzdHJ1Y3QgemRfY2hpcCAqY2hpcCkKIHsKIAlpbnQgcjsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHpkX2lvcmVxMTYgaW9yZXFzW10gPSB7Ci0JCXsgQ1I4MCwgIDB4MzAgfSwgeyBDUjgxLCAgMHgzMCB9LCB7IENSNzksICAweDU4IH0sCi0JCXsgQ1IxMiwgIDB4ZjAgfSwgeyBDUjc3LCAgMHgxYiB9LCB7IENSNzgsICAweDU4IH0sCi0JCXsgQ1IyMDMsIDB4MDQgfSwKKwkJeyBaRF9DUjgwLCAgMHgzMCB9LCB7IFpEX0NSODEsICAweDMwIH0sIHsgWkRfQ1I3OSwgIDB4NTggfSwKKwkJeyBaRF9DUjEyLCAgMHhmMCB9LCB7IFpEX0NSNzcsICAweDFiIH0sIHsgWkRfQ1I3OCwgIDB4NTggfSwKKwkJeyBaRF9DUjIwMywgMHgwNCB9LAogCQl7IH0sCi0JCXsgQ1IyNDAsIDB4ODAgfSwKKwkJeyBaRF9DUjI0MCwgMHg4MCB9LAogCX07CiAKIAlyID0gemRfaW93cml0ZTE2YV9sb2NrZWQoY2hpcCwgaW9yZXFzLCBBUlJBWV9TSVpFKGlvcmVxcykpOwpAQCAtODksMTIgKzg5LDEyIEBACiAKIAlpZiAoY2hpcC0+bmV3X3BoeV9sYXlvdXQpIHsKIAkJLyogYW50ZW5uYSBzZWxlY3Rpb24/ICovCi0JCXIgPSB6ZF9pb3dyaXRlMTZfbG9ja2VkKGNoaXAsIDB4ZTUsIENSOSk7CisJCXIgPSB6ZF9pb3dyaXRlMTZfbG9ja2VkKGNoaXAsIDB4ZTUsIFpEX0NSOSk7CiAJCWlmIChyKQogCQkJcmV0dXJuIHI7CiAJfQogCi0JcmV0dXJuIHpkX2lvd3JpdGUxNl9sb2NrZWQoY2hpcCwgMHgwNCwgQ1IyMDMpOworCXJldHVybiB6ZF9pb3dyaXRlMTZfbG9ja2VkKGNoaXAsIDB4MDQsIFpEX0NSMjAzKTsKIH0KIAogc3RhdGljIGludCB6ZDEyMTFfYWw3MjMwYl9pbml0X2h3KHN0cnVjdCB6ZF9yZiAqcmYpCkBAIC0xMDYsNjYgKzEwNiw2NiBAQAogCSAqIHNwZWNpZmllZCAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgemRfaW9yZXExNiBpb3JlcXNfMVtdID0gewogCQkvKiBUaGlzIG9uZSBpcyA3MjMwLXNwZWNpZmljLCBhbmQgaGFwcGVucyBiZWZvcmUgdGhlIHJlc3QgKi8KLQkJeyBDUjI0MCwgIDB4NTcgfSwKKwkJeyBaRF9DUjI0MCwgIDB4NTcgfSwKIAkJeyB9LAogCi0JCXsgQ1IxNSwgICAweDIwIH0sIHsgQ1IyMywgICAweDQwIH0sIHsgQ1IyNCwgIDB4MjAgfSwKLQkJeyBDUjI2LCAgIDB4MTEgfSwgeyBDUjI4LCAgIDB4M2UgfSwgeyBDUjI5LCAgMHgwMCB9LAotCQl7IENSNDQsICAgMHgzMyB9LAorCQl7IFpEX0NSMTUsICAgMHgyMCB9LCB7IFpEX0NSMjMsICAgMHg0MCB9LCB7IFpEX0NSMjQsICAweDIwIH0sCisJCXsgWkRfQ1IyNiwgICAweDExIH0sIHsgWkRfQ1IyOCwgICAweDNlIH0sIHsgWkRfQ1IyOSwgIDB4MDAgfSwKKwkJeyBaRF9DUjQ0LCAgIDB4MzMgfSwKIAkJLyogVGhpcyB2YWx1ZSBpcyBkaWZmZXJlbnQgZm9yIDcyMzAgKHdhczogMHgyYSkgKi8KLQkJeyBDUjEwNiwgIDB4MjIgfSwKLQkJeyBDUjEwNywgIDB4MWEgfSwgeyBDUjEwOSwgIDB4MDkgfSwgeyBDUjExMCwgIDB4MjcgfSwKLQkJeyBDUjExMSwgIDB4MmIgfSwgeyBDUjExMiwgIDB4MmIgfSwgeyBDUjExOSwgIDB4MGEgfSwKKwkJeyBaRF9DUjEwNiwgIDB4MjIgfSwKKwkJeyBaRF9DUjEwNywgIDB4MWEgfSwgeyBaRF9DUjEwOSwgIDB4MDkgfSwgeyBaRF9DUjExMCwgIDB4MjcgfSwKKwkJeyBaRF9DUjExMSwgIDB4MmIgfSwgeyBaRF9DUjExMiwgIDB4MmIgfSwgeyBaRF9DUjExOSwgIDB4MGEgfSwKIAkJLyogVGhpcyBoYXBwZW5lZCBmdXJ0aGVyIGRvd24gaW4gQUwyMjMwLAogCQkgKiBhbmQgdGhlIHZhbHVlIGNoYW5nZWQgKHdhczogMHhlMCkgKi8KLQkJeyBDUjEyMiwgIDB4ZmMgfSwKLQkJeyBDUjEwLCAgIDB4ODkgfSwKKwkJeyBaRF9DUjEyMiwgIDB4ZmMgfSwKKwkJeyBaRF9DUjEwLCAgIDB4ODkgfSwKIAkJLyogZm9yIG5ld2VzdCAoM3JkIGN1dCkgQUwyMzAwICovCi0JCXsgQ1IxNywgICAweDI4IH0sCi0JCXsgQ1IyNiwgICAweDkzIH0sIHsgQ1IzNCwgICAweDMwIH0sCisJCXsgWkRfQ1IxNywgICAweDI4IH0sCisJCXsgWkRfQ1IyNiwgICAweDkzIH0sIHsgWkRfQ1IzNCwgICAweDMwIH0sCiAJCS8qIGZvciBuZXdlc3QgKDNyZCBjdXQpIEFMMjMwMCAqLwotCQl7IENSMzUsICAgMHgzZSB9LAotCQl7IENSNDEsICAgMHgyNCB9LCB7IENSNDQsICAgMHgzMiB9LAorCQl7IFpEX0NSMzUsICAgMHgzZSB9LAorCQl7IFpEX0NSNDEsICAgMHgyNCB9LCB7IFpEX0NSNDQsICAgMHgzMiB9LAogCQkvKiBmb3IgbmV3ZXN0ICgzcmQgY3V0KSBBTDIzMDAgKi8KLQkJeyBDUjQ2LCAgIDB4OTYgfSwKLQkJeyBDUjQ3LCAgIDB4MWUgfSwgeyBDUjc5LCAgIDB4NTggfSwgeyBDUjgwLCAgMHgzMCB9LAotCQl7IENSODEsICAgMHgzMCB9LCB7IENSODcsICAgMHgwYSB9LCB7IENSODksICAweDA0IH0sCi0JCXsgQ1I5MiwgICAweDBhIH0sIHsgQ1I5OSwgICAweDI4IH0sCisJCXsgWkRfQ1I0NiwgICAweDk2IH0sCisJCXsgWkRfQ1I0NywgICAweDFlIH0sIHsgWkRfQ1I3OSwgICAweDU4IH0sIHsgWkRfQ1I4MCwgIDB4MzAgfSwKKwkJeyBaRF9DUjgxLCAgIDB4MzAgfSwgeyBaRF9DUjg3LCAgIDB4MGEgfSwgeyBaRF9DUjg5LCAgMHgwNCB9LAorCQl7IFpEX0NSOTIsICAgMHgwYSB9LCB7IFpEX0NSOTksICAgMHgyOCB9LAogCQkvKiBUaGlzIHZhbHVlIGlzIGRpZmZlcmVudCBmb3IgNzIzMCAod2FzOiAweDAwKSAqLwotCQl7IENSMTAwLCAgMHgwMiB9LAotCQl7IENSMTAxLCAgMHgxMyB9LCB7IENSMTAyLCAgMHgyNyB9LAorCQl7IFpEX0NSMTAwLCAgMHgwMiB9LAorCQl7IFpEX0NSMTAxLCAgMHgxMyB9LCB7IFpEX0NSMTAyLCAgMHgyNyB9LAogCQkvKiBUaGlzIHZhbHVlIGlzIGRpZmZlcmVudCBmb3IgNzIzMCAod2FzOiAweDI0KSAqLwotCQl7IENSMTA2LCAgMHgyMiB9LAorCQl7IFpEX0NSMTA2LCAgMHgyMiB9LAogCQkvKiBUaGlzIHZhbHVlIGlzIGRpZmZlcmVudCBmb3IgNzIzMCAod2FzOiAweDJhKSAqLwotCQl7IENSMTA3LCAgMHgzZiB9LAotCQl7IENSMTA5LCAgMHgwOSB9LAorCQl7IFpEX0NSMTA3LCAgMHgzZiB9LAorCQl7IFpEX0NSMTA5LCAgMHgwOSB9LAogCQkvKiBUaGlzIHZhbHVlIGlzIGRpZmZlcmVudCBmb3IgNzIzMCAod2FzOiAweDEzKSAqLwotCQl7IENSMTEwLCAgMHgxZiB9LAotCQl7IENSMTExLCAgMHgxZiB9LCB7IENSMTEyLCAgMHgxZiB9LCB7IENSMTEzLCAweDI3IH0sCi0JCXsgQ1IxMTQsICAweDI3IH0sCisJCXsgWkRfQ1IxMTAsICAweDFmIH0sCisJCXsgWkRfQ1IxMTEsICAweDFmIH0sIHsgWkRfQ1IxMTIsICAweDFmIH0sIHsgWkRfQ1IxMTMsIDB4MjcgfSwKKwkJeyBaRF9DUjExNCwgIDB4MjcgfSwKIAkJLyogZm9yIG5ld2VzdCAoM3JkIGN1dCkgQUwyMzAwICovCi0JCXsgQ1IxMTUsICAweDI0IH0sCisJCXsgWkRfQ1IxMTUsICAweDI0IH0sCiAJCS8qIFRoaXMgdmFsdWUgaXMgZGlmZmVyZW50IGZvciA3MjMwICh3YXM6IDB4MjQpICovCi0JCXsgQ1IxMTYsICAweDNmIH0sCisJCXsgWkRfQ1IxMTYsICAweDNmIH0sCiAJCS8qIFRoaXMgdmFsdWUgaXMgZGlmZmVyZW50IGZvciA3MjMwICh3YXM6IDB4ZjQpICovCi0JCXsgQ1IxMTcsICAweGZhIH0sCi0JCXsgQ1IxMTgsICAweGZjIH0sIHsgQ1IxMTksICAweDEwIH0sIHsgQ1IxMjAsIDB4NGYgfSwKLQkJeyBDUjEyMSwgIDB4NzcgfSwgeyBDUjEzNywgIDB4ODggfSwKKwkJeyBaRF9DUjExNywgIDB4ZmEgfSwKKwkJeyBaRF9DUjExOCwgIDB4ZmMgfSwgeyBaRF9DUjExOSwgIDB4MTAgfSwgeyBaRF9DUjEyMCwgMHg0ZiB9LAorCQl7IFpEX0NSMTIxLCAgMHg3NyB9LCB7IFpEX0NSMTM3LCAgMHg4OCB9LAogCQkvKiBUaGlzIG9uZSBpcyA3MjMwLXNwZWNpZmljICovCi0JCXsgQ1IxMzgsICAweGE4IH0sCisJCXsgWkRfQ1IxMzgsICAweGE4IH0sCiAJCS8qIFRoaXMgdmFsdWUgaXMgZGlmZmVyZW50IGZvciA3MjMwICh3YXM6IDB4ZmYpICovCi0JCXsgQ1IyNTIsICAweDM0IH0sCisJCXsgWkRfQ1IyNTIsICAweDM0IH0sCiAJCS8qIFRoaXMgdmFsdWUgaXMgZGlmZmVyZW50IGZvciA3MjMwICh3YXM6IDB4ZmYpICovCi0JCXsgQ1IyNTMsICAweDM0IH0sCisJCXsgWkRfQ1IyNTMsICAweDM0IH0sCiAKIAkJLyogUExMX09GRiAqLwotCQl7IENSMjUxLCAweDJmIH0sCisJCXsgWkRfQ1IyNTEsIDB4MmYgfSwKIAl9OwogCiAJc3RhdGljIGNvbnN0IHN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxc18yW10gPSB7Ci0JCXsgQ1IyNTEsIDB4M2YgfSwgLyogUExMX09OICovCi0JCXsgQ1IxMjgsIDB4MTQgfSwgeyBDUjEyOSwgMHgxMiB9LCB7IENSMTMwLCAweDEwIH0sCi0JCXsgQ1IzOCwgIDB4MzggfSwgeyBDUjEzNiwgMHhkZiB9LAorCQl7IFpEX0NSMjUxLCAweDNmIH0sIC8qIFBMTF9PTiAqLworCQl7IFpEX0NSMTI4LCAweDE0IH0sIHsgWkRfQ1IxMjksIDB4MTIgfSwgeyBaRF9DUjEzMCwgMHgxMCB9LAorCQl7IFpEX0NSMzgsICAweDM4IH0sIHsgWkRfQ1IxMzYsIDB4ZGYgfSwKIAl9OwogCiAJciA9IHpkX2lvd3JpdGUxNmFfbG9ja2VkKGNoaXAsIGlvcmVxc18xLCBBUlJBWV9TSVpFKGlvcmVxc18xKSk7CkBAIC0xOTIsMTAgKzE5MiwxMCBAQAogCWlmIChyKQogCQlyZXR1cm4gcjsKIAotCXIgPSB6ZF9pb3dyaXRlMTZfbG9ja2VkKGNoaXAsIDB4MDYsIENSMjAzKTsKKwlyID0gemRfaW93cml0ZTE2X2xvY2tlZChjaGlwLCAweDA2LCBaRF9DUjIwMyk7CiAJaWYgKHIpCiAJCXJldHVybiByOwotCXIgPSB6ZF9pb3dyaXRlMTZfbG9ja2VkKGNoaXAsIDB4ODAsIENSMjQwKTsKKwlyID0gemRfaW93cml0ZTE2X2xvY2tlZChjaGlwLCAweDgwLCBaRF9DUjI0MCk7CiAJaWYgKHIpCiAJCXJldHVybiByOwogCkBAIC0yMDgsNzkgKzIwOCw3OSBAQAogCXN0cnVjdCB6ZF9jaGlwICpjaGlwID0gemRfcmZfdG9fY2hpcChyZik7CiAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHpkX2lvcmVxMTYgaW9yZXFzXzFbXSA9IHsKLQkJeyBDUjI0MCwgMHg1NyB9LCB7IENSOSwgICAweDkgfSwKKwkJeyBaRF9DUjI0MCwgMHg1NyB9LCB7IFpEX0NSOSwgICAweDkgfSwKIAkJeyB9LAotCQl7IENSMTAsICAweDhiIH0sIHsgQ1IxNSwgIDB4MjAgfSwKLQkJeyBDUjE3LCAgMHgyQiB9LCAvKiBmb3IgbmV3ZXN0ICgzcmQgY3V0KSBBTDIyMzAgKi8KLQkJeyBDUjIwLCAgMHgxMCB9LCAvKiA0TjI1LT5TdG9uZSBSZXF1ZXN0ICovCi0JCXsgQ1IyMywgIDB4NDAgfSwgeyBDUjI0LCAgMHgyMCB9LCB7IENSMjYsICAweDkzIH0sCi0JCXsgQ1IyOCwgIDB4M2UgfSwgeyBDUjI5LCAgMHgwMCB9LAotCQl7IENSMzMsICAweDI4IH0sIC8qIDU2MTMgKi8KLQkJeyBDUjM0LCAgMHgzMCB9LAotCQl7IENSMzUsICAweDNlIH0sIC8qIGZvciBuZXdlc3QgKDNyZCBjdXQpIEFMMjIzMCAqLwotCQl7IENSNDEsICAweDI0IH0sIHsgQ1I0NCwgIDB4MzIgfSwKLQkJeyBDUjQ2LCAgMHg5OSB9LCAvKiBmb3IgbmV3ZXN0ICgzcmQgY3V0KSBBTDIyMzAgKi8KLQkJeyBDUjQ3LCAgMHgxZSB9LAorCQl7IFpEX0NSMTAsICAweDhiIH0sIHsgWkRfQ1IxNSwgIDB4MjAgfSwKKwkJeyBaRF9DUjE3LCAgMHgyQiB9LCAvKiBmb3IgbmV3ZXN0ICgzcmQgY3V0KSBBTDIyMzAgKi8KKwkJeyBaRF9DUjIwLCAgMHgxMCB9LCAvKiA0TjI1LT5TdG9uZSBSZXF1ZXN0ICovCisJCXsgWkRfQ1IyMywgIDB4NDAgfSwgeyBaRF9DUjI0LCAgMHgyMCB9LCB7IFpEX0NSMjYsICAweDkzIH0sCisJCXsgWkRfQ1IyOCwgIDB4M2UgfSwgeyBaRF9DUjI5LCAgMHgwMCB9LAorCQl7IFpEX0NSMzMsICAweDI4IH0sIC8qIDU2MTMgKi8KKwkJeyBaRF9DUjM0LCAgMHgzMCB9LAorCQl7IFpEX0NSMzUsICAweDNlIH0sIC8qIGZvciBuZXdlc3QgKDNyZCBjdXQpIEFMMjIzMCAqLworCQl7IFpEX0NSNDEsICAweDI0IH0sIHsgWkRfQ1I0NCwgIDB4MzIgfSwKKwkJeyBaRF9DUjQ2LCAgMHg5OSB9LCAvKiBmb3IgbmV3ZXN0ICgzcmQgY3V0KSBBTDIyMzAgKi8KKwkJeyBaRF9DUjQ3LCAgMHgxZSB9LAogCiAJCS8qIFpEMTIxNSA1NjEwICovCi0JCXsgQ1I0OCwgIDB4MDAgfSwgeyBDUjQ5LCAgMHgwMCB9LCB7IENSNTEsICAweDAxIH0sCi0JCXsgQ1I1MiwgIDB4ODAgfSwgeyBDUjUzLCAgMHg3ZSB9LCB7IENSNjUsICAweDAwIH0sCi0JCXsgQ1I2NiwgIDB4MDAgfSwgeyBDUjY3LCAgMHgwMCB9LCB7IENSNjgsICAweDAwIH0sCi0JCXsgQ1I2OSwgIDB4MjggfSwKKwkJeyBaRF9DUjQ4LCAgMHgwMCB9LCB7IFpEX0NSNDksICAweDAwIH0sIHsgWkRfQ1I1MSwgIDB4MDEgfSwKKwkJeyBaRF9DUjUyLCAgMHg4MCB9LCB7IFpEX0NSNTMsICAweDdlIH0sIHsgWkRfQ1I2NSwgIDB4MDAgfSwKKwkJeyBaRF9DUjY2LCAgMHgwMCB9LCB7IFpEX0NSNjcsICAweDAwIH0sIHsgWkRfQ1I2OCwgIDB4MDAgfSwKKwkJeyBaRF9DUjY5LCAgMHgyOCB9LAogCi0JCXsgQ1I3OSwgIDB4NTggfSwgeyBDUjgwLCAgMHgzMCB9LCB7IENSODEsICAweDMwIH0sCi0JCXsgQ1I4NywgIDB4MEEgfSwgeyBDUjg5LCAgMHgwNCB9LAotCQl7IENSOTAsICAweDU4IH0sIC8qIDUxMTIgKi8KLQkJeyBDUjkxLCAgMHgwMCB9LCAvKiA1NjEzICovCi0JCXsgQ1I5MiwgIDB4MGEgfSwKLQkJeyBDUjk4LCAgMHg4ZCB9LCAvKiA0ODA0LCBmb3IgMTIxMiBuZXcgYWxnb3JpdGhtICovCi0JCXsgQ1I5OSwgIDB4MDAgfSwgeyBDUjEwMCwgMHgwMiB9LCB7IENSMTAxLCAweDEzIH0sCi0JCXsgQ1IxMDIsIDB4MjcgfSwKLQkJeyBDUjEwNiwgMHgyMCB9LCAvKiBjaGFuZ2UgdG8gMHgyNCBmb3IgQUw3MjMwQiAqLwotCQl7IENSMTA5LCAweDEzIH0sIC8qIDQ4MDQsIGZvciAxMjEyIG5ldyBhbGdvcml0aG0gKi8KLQkJeyBDUjExMiwgMHgxZiB9LAorCQl7IFpEX0NSNzksICAweDU4IH0sIHsgWkRfQ1I4MCwgIDB4MzAgfSwgeyBaRF9DUjgxLCAgMHgzMCB9LAorCQl7IFpEX0NSODcsICAweDBBIH0sIHsgWkRfQ1I4OSwgIDB4MDQgfSwKKwkJeyBaRF9DUjkwLCAgMHg1OCB9LCAvKiA1MTEyICovCisJCXsgWkRfQ1I5MSwgIDB4MDAgfSwgLyogNTYxMyAqLworCQl7IFpEX0NSOTIsICAweDBhIH0sCisJCXsgWkRfQ1I5OCwgIDB4OGQgfSwgLyogNDgwNCwgZm9yIDEyMTIgbmV3IGFsZ29yaXRobSAqLworCQl7IFpEX0NSOTksICAweDAwIH0sIHsgWkRfQ1IxMDAsIDB4MDIgfSwgeyBaRF9DUjEwMSwgMHgxMyB9LAorCQl7IFpEX0NSMTAyLCAweDI3IH0sCisJCXsgWkRfQ1IxMDYsIDB4MjAgfSwgLyogY2hhbmdlIHRvIDB4MjQgZm9yIEFMNzIzMEIgKi8KKwkJeyBaRF9DUjEwOSwgMHgxMyB9LCAvKiA0ODA0LCBmb3IgMTIxMiBuZXcgYWxnb3JpdGhtICovCisJCXsgWkRfQ1IxMTIsIDB4MWYgfSwKIAl9OwogCiAJc3RhdGljIGNvbnN0IHN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxc19uZXdfcGh5W10gPSB7Ci0JCXsgQ1IxMDcsIDB4MjggfSwKLQkJeyBDUjExMCwgMHgxZiB9LCAvKiA1MTI3LCAweDEzLT4weDFmICovCi0JCXsgQ1IxMTEsIDB4MWYgfSwgLyogMHgxMyB0byAweDFmIGZvciBBTDcyMzBCICovCi0JCXsgQ1IxMTYsIDB4MmEgfSwgeyBDUjExOCwgMHhmYSB9LCB7IENSMTE5LCAweDEyIH0sCi0JCXsgQ1IxMjEsIDB4NmMgfSwgLyogNTYxMyAqLworCQl7IFpEX0NSMTA3LCAweDI4IH0sCisJCXsgWkRfQ1IxMTAsIDB4MWYgfSwgLyogNTEyNywgMHgxMy0+MHgxZiAqLworCQl7IFpEX0NSMTExLCAweDFmIH0sIC8qIDB4MTMgdG8gMHgxZiBmb3IgQUw3MjMwQiAqLworCQl7IFpEX0NSMTE2LCAweDJhIH0sIHsgWkRfQ1IxMTgsIDB4ZmEgfSwgeyBaRF9DUjExOSwgMHgxMiB9LAorCQl7IFpEX0NSMTIxLCAweDZjIH0sIC8qIDU2MTMgKi8KIAl9OwogCiAJc3RhdGljIGNvbnN0IHN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxc19vbGRfcGh5W10gPSB7Ci0JCXsgQ1IxMDcsIDB4MjQgfSwKLQkJeyBDUjExMCwgMHgxMyB9LCAvKiA1MTI3LCAweDEzLT4weDFmICovCi0JCXsgQ1IxMTEsIDB4MTMgfSwgLyogMHgxMyB0byAweDFmIGZvciBBTDcyMzBCICovCi0JCXsgQ1IxMTYsIDB4MjQgfSwgeyBDUjExOCwgMHhmYyB9LCB7IENSMTE5LCAweDExIH0sCi0JCXsgQ1IxMjEsIDB4NmEgfSwgLyogNTYxMyAqLworCQl7IFpEX0NSMTA3LCAweDI0IH0sCisJCXsgWkRfQ1IxMTAsIDB4MTMgfSwgLyogNTEyNywgMHgxMy0+MHgxZiAqLworCQl7IFpEX0NSMTExLCAweDEzIH0sIC8qIDB4MTMgdG8gMHgxZiBmb3IgQUw3MjMwQiAqLworCQl7IFpEX0NSMTE2LCAweDI0IH0sIHsgWkRfQ1IxMTgsIDB4ZmMgfSwgeyBaRF9DUjExOSwgMHgxMSB9LAorCQl7IFpEX0NSMTIxLCAweDZhIH0sIC8qIDU2MTMgKi8KIAl9OwogCiAJc3RhdGljIGNvbnN0IHN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxc18yW10gPSB7Ci0JCXsgQ1IxMTMsIDB4MjcgfSwgeyBDUjExNCwgMHgyNyB9LCB7IENSMTE1LCAweDI0IH0sCi0JCXsgQ1IxMTcsIDB4ZmEgfSwgeyBDUjEyMCwgMHg0ZiB9LAotCQl7IENSMTIyLCAweGZjIH0sIC8qIEUwLT5GQ2ggYXQgNDkwMSAqLwotCQl7IENSMTIzLCAweDU3IH0sIC8qIDU2MTMgKi8KLQkJeyBDUjEyNSwgMHhhZCB9LCAvKiA0ODA0LCBmb3IgMTIxMiBuZXcgYWxnb3JpdGhtICovCi0JCXsgQ1IxMjYsIDB4NmMgfSwgLyogNTYxMyAqLwotCQl7IENSMTI3LCAweDAzIH0sIC8qIDQ4MDQsIGZvciAxMjEyIG5ldyBhbGdvcml0aG0gKi8KLQkJeyBDUjEzMCwgMHgxMCB9LAotCQl7IENSMTMxLCAweDAwIH0sIC8qIDUxMTIgKi8KLQkJeyBDUjEzNywgMHg1MCB9LCAvKiA1NjEzICovCi0JCXsgQ1IxMzgsIDB4YTggfSwgLyogNTExMiAqLwotCQl7IENSMTQ0LCAweGFjIH0sIC8qIDU2MTMgKi8KLQkJeyBDUjE0OCwgMHg0MCB9LCAvKiA1MTEyICovCi0JCXsgQ1IxNDksIDB4NDAgfSwgLyogNE8wNywgNTAtPjQwICovCi0JCXsgQ1IxNTAsIDB4MWEgfSwgLyogNTExMiwgMEMtPjFBICovCi0JCXsgQ1IyNTIsIDB4MzQgfSwgeyBDUjI1MywgMHgzNCB9LAotCQl7IENSMjUxLCAweDJmIH0sIC8qIFBMTF9PRkYgKi8KKwkJeyBaRF9DUjExMywgMHgyNyB9LCB7IFpEX0NSMTE0LCAweDI3IH0sIHsgWkRfQ1IxMTUsIDB4MjQgfSwKKwkJeyBaRF9DUjExNywgMHhmYSB9LCB7IFpEX0NSMTIwLCAweDRmIH0sCisJCXsgWkRfQ1IxMjIsIDB4ZmMgfSwgLyogRTAtPkZDaCBhdCA0OTAxICovCisJCXsgWkRfQ1IxMjMsIDB4NTcgfSwgLyogNTYxMyAqLworCQl7IFpEX0NSMTI1LCAweGFkIH0sIC8qIDQ4MDQsIGZvciAxMjEyIG5ldyBhbGdvcml0aG0gKi8KKwkJeyBaRF9DUjEyNiwgMHg2YyB9LCAvKiA1NjEzICovCisJCXsgWkRfQ1IxMjcsIDB4MDMgfSwgLyogNDgwNCwgZm9yIDEyMTIgbmV3IGFsZ29yaXRobSAqLworCQl7IFpEX0NSMTMwLCAweDEwIH0sCisJCXsgWkRfQ1IxMzEsIDB4MDAgfSwgLyogNTExMiAqLworCQl7IFpEX0NSMTM3LCAweDUwIH0sIC8qIDU2MTMgKi8KKwkJeyBaRF9DUjEzOCwgMHhhOCB9LCAvKiA1MTEyICovCisJCXsgWkRfQ1IxNDQsIDB4YWMgfSwgLyogNTYxMyAqLworCQl7IFpEX0NSMTQ4LCAweDQwIH0sIC8qIDUxMTIgKi8KKwkJeyBaRF9DUjE0OSwgMHg0MCB9LCAvKiA0TzA3LCA1MC0+NDAgKi8KKwkJeyBaRF9DUjE1MCwgMHgxYSB9LCAvKiA1MTEyLCAwQy0+MUEgKi8KKwkJeyBaRF9DUjI1MiwgMHgzNCB9LCB7IFpEX0NSMjUzLCAweDM0IH0sCisJCXsgWkRfQ1IyNTEsIDB4MmYgfSwgLyogUExMX09GRiAqLwogCX07CiAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHpkX2lvcmVxMTYgaW9yZXFzXzNbXSA9IHsKLQkJeyBDUjI1MSwgMHg3ZiB9LCAvKiBQTExfT04gKi8KLQkJeyBDUjEyOCwgMHgxNCB9LCB7IENSMTI5LCAweDEyIH0sIHsgQ1IxMzAsIDB4MTAgfSwKLQkJeyBDUjM4LCAgMHgzOCB9LCB7IENSMTM2LCAweGRmIH0sCisJCXsgWkRfQ1IyNTEsIDB4N2YgfSwgLyogUExMX09OICovCisJCXsgWkRfQ1IxMjgsIDB4MTQgfSwgeyBaRF9DUjEyOSwgMHgxMiB9LCB7IFpEX0NSMTMwLCAweDEwIH0sCisJCXsgWkRfQ1IzOCwgIDB4MzggfSwgeyBaRF9DUjEzNiwgMHhkZiB9LAogCX07CiAKIAlyID0gemRfaW93cml0ZTE2YV9sb2NrZWQoY2hpcCwgaW9yZXFzXzEsIEFSUkFZX1NJWkUoaW9yZXFzXzEpKTsKQEAgLTMzMSwxNiArMzMxLDE2IEBACiAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHpkX2lvcmVxMTYgaW9yZXFzW10gPSB7CiAJCS8qIFBMTF9PTiAqLwotCQl7IENSMjUxLCAweDNmIH0sCi0JCXsgQ1IyMDMsIDB4MDYgfSwgeyBDUjI0MCwgMHgwOCB9LAorCQl7IFpEX0NSMjUxLCAweDNmIH0sCisJCXsgWkRfQ1IyMDMsIDB4MDYgfSwgeyBaRF9DUjI0MCwgMHgwOCB9LAogCX07CiAKLQlyID0gemRfaW93cml0ZTE2X2xvY2tlZChjaGlwLCAweDU3LCBDUjI0MCk7CisJciA9IHpkX2lvd3JpdGUxNl9sb2NrZWQoY2hpcCwgMHg1NywgWkRfQ1IyNDApOwogCWlmIChyKQogCQlyZXR1cm4gcjsKIAogCS8qIFBMTF9PRkYgKi8KLQlyID0gemRfaW93cml0ZTE2X2xvY2tlZChjaGlwLCAweDJmLCBDUjI1MSk7CisJciA9IHpkX2lvd3JpdGUxNl9sb2NrZWQoY2hpcCwgMHgyZiwgWkRfQ1IyNTEpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKIApAQCAtMzc2LDE1ICszNzYsMTUgQEAKIAljb25zdCB1MzIgKnJ2ID0gY2hhbl9ydltjaGFubmVsLTFdOwogCXN0cnVjdCB6ZF9jaGlwICpjaGlwID0gemRfcmZfdG9fY2hpcChyZik7CiAKLQlyID0gemRfaW93cml0ZTE2X2xvY2tlZChjaGlwLCAweDU3LCBDUjI0MCk7CisJciA9IHpkX2lvd3JpdGUxNl9sb2NrZWQoY2hpcCwgMHg1NywgWkRfQ1IyNDApOwogCWlmIChyKQogCQlyZXR1cm4gcjsKLQlyID0gemRfaW93cml0ZTE2X2xvY2tlZChjaGlwLCAweGU0LCBDUjkpOworCXIgPSB6ZF9pb3dyaXRlMTZfbG9ja2VkKGNoaXAsIDB4ZTQsIFpEX0NSOSk7CiAJaWYgKHIpCiAJCXJldHVybiByOwogCiAJLyogUExMX09GRiAqLwotCXIgPSB6ZF9pb3dyaXRlMTZfbG9ja2VkKGNoaXAsIDB4MmYsIENSMjUxKTsKKwlyID0gemRfaW93cml0ZTE2X2xvY2tlZChjaGlwLCAweDJmLCBaRF9DUjI1MSk7CiAJaWYgKHIpCiAJCXJldHVybiByOwogCXIgPSB6ZF9yZndyaXRldl9jcl9sb2NrZWQoY2hpcCwgc3RkX3J2LCBBUlJBWV9TSVpFKHN0ZF9ydikpOwpAQCAtNDEwLDcgKzQxMCw3IEBACiAJaWYgKHIpCiAJCXJldHVybiByOwogCi0JciA9IHpkX2lvd3JpdGUxNl9sb2NrZWQoY2hpcCwgMHg3ZiwgQ1IyNTEpOworCXIgPSB6ZF9pb3dyaXRlMTZfbG9ja2VkKGNoaXAsIDB4N2YsIFpEX0NSMjUxKTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAKQEAgLTQyMSw4ICs0MjEsOCBAQAogewogCXN0cnVjdCB6ZF9jaGlwICpjaGlwID0gemRfcmZfdG9fY2hpcChyZik7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxc1tdID0gewotCQl7IENSMTEsICAweDAwIH0sCi0JCXsgQ1IyNTEsIDB4M2YgfSwKKwkJeyBaRF9DUjExLCAgMHgwMCB9LAorCQl7IFpEX0NSMjUxLCAweDNmIH0sCiAJfTsKIAogCXJldHVybiB6ZF9pb3dyaXRlMTZhX2xvY2tlZChjaGlwLCBpb3JlcXMsIEFSUkFZX1NJWkUoaW9yZXFzKSk7CkBAIC00MzIsOCArNDMyLDggQEAKIHsKIAlzdHJ1Y3QgemRfY2hpcCAqY2hpcCA9IHpkX3JmX3RvX2NoaXAocmYpOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgemRfaW9yZXExNiBpb3JlcXNbXSA9IHsKLQkJeyBDUjExLCAgMHgwMCB9LAotCQl7IENSMjUxLCAweDdmIH0sCisJCXsgWkRfQ1IxMSwgIDB4MDAgfSwKKwkJeyBaRF9DUjI1MSwgMHg3ZiB9LAogCX07CiAKIAlyZXR1cm4gemRfaW93cml0ZTE2YV9sb2NrZWQoY2hpcCwgaW9yZXFzLCBBUlJBWV9TSVpFKGlvcmVxcykpOwpAQCAtNDQzLDggKzQ0Myw4IEBACiB7CiAJc3RydWN0IHpkX2NoaXAgKmNoaXAgPSB6ZF9yZl90b19jaGlwKHJmKTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHpkX2lvcmVxMTYgaW9yZXFzW10gPSB7Ci0JCXsgQ1IxMSwgIDB4MDQgfSwKLQkJeyBDUjI1MSwgMHgyZiB9LAorCQl7IFpEX0NSMTEsICAweDA0IH0sCisJCXsgWkRfQ1IyNTEsIDB4MmYgfSwKIAl9OwogCiAJcmV0dXJuIHpkX2lvd3JpdGUxNmFfbG9ja2VkKGNoaXAsIGlvcmVxcywgQVJSQVlfU0laRShpb3JlcXMpKTsKQEAgLTQ1Niw3ICs0NTYsNyBAQAogewogCXN0cnVjdCB6ZF9jaGlwICpjaGlwID0gemRfcmZfdG9fY2hpcChyZik7CiAJc3RydWN0IHpkX2lvcmVxMTYgaW9yZXFzW10gPSB7Ci0JCXsgQ1IxMjgsIDB4MTQgfSwgeyBDUjEyOSwgMHgxMiB9LAorCQl7IFpEX0NSMTI4LCAweDE0IH0sIHsgWkRfQ1IxMjksIDB4MTIgfSwKIAl9OwogCiAJLyogRklYTUU6IENoYW5uZWwgMTEgaXMgbm90IHRoZSBlZGdlIGZvciBhbGwgcmVndWxhdG9yeSBkb21haW5zLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfcmZfcmYyOTU5LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9yZl9yZjI5NTkuYwppbmRleCBlMzYxMTc0Li43ODRkOWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9yZl9yZjI5NTkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9yZl9yZjI5NTkuYwpAQCAtMTUyLDQ0ICsxNTIsNDQgQEAKIAlzdHJ1Y3QgemRfY2hpcCAqY2hpcCA9IHpkX3JmX3RvX2NoaXAocmYpOwogCiAJc3RhdGljIGNvbnN0IHN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxc1tdID0gewotCQl7IENSMiwgICAweDFFIH0sIHsgQ1I5LCAgIDB4MjAgfSwgeyBDUjEwLCAgMHg4OSB9LAotCQl7IENSMTEsICAweDAwIH0sIHsgQ1IxNSwgIDB4RDAgfSwgeyBDUjE3LCAgMHg2OCB9LAotCQl7IENSMTksICAweDRhIH0sIHsgQ1IyMCwgIDB4MGMgfSwgeyBDUjIxLCAgMHgwRSB9LAotCQl7IENSMjMsICAweDQ4IH0sCisJCXsgWkRfQ1IyLCAgIDB4MUUgfSwgeyBaRF9DUjksICAgMHgyMCB9LCB7IFpEX0NSMTAsICAweDg5IH0sCisJCXsgWkRfQ1IxMSwgIDB4MDAgfSwgeyBaRF9DUjE1LCAgMHhEMCB9LCB7IFpEX0NSMTcsICAweDY4IH0sCisJCXsgWkRfQ1IxOSwgIDB4NGEgfSwgeyBaRF9DUjIwLCAgMHgwYyB9LCB7IFpEX0NSMjEsICAweDBFIH0sCisJCXsgWkRfQ1IyMywgIDB4NDggfSwKIAkJLyogbm9ybWFsIHNpemUgZm9yIGNjYSB0aHJlc2hvbGQgKi8KLQkJeyBDUjI0LCAgMHgxNCB9LAotCQkvKiB7IENSMjQsICAweDIwIH0sICovCi0JCXsgQ1IyNiwgIDB4OTAgfSwgeyBDUjI3LCAgMHgzMCB9LCB7IENSMjksICAweDIwIH0sCi0JCXsgQ1IzMSwgIDB4YjIgfSwgeyBDUjMyLCAgMHg0MyB9LCB7IENSMzMsICAweDI4IH0sCi0JCXsgQ1IzOCwgIDB4MzAgfSwgeyBDUjM0LCAgMHgwZiB9LCB7IENSMzUsICAweEYwIH0sCi0JCXsgQ1I0MSwgIDB4MmEgfSwgeyBDUjQ2LCAgMHg3RiB9LCB7IENSNDcsICAweDFFIH0sCi0JCXsgQ1I1MSwgIDB4YzUgfSwgeyBDUjUyLCAgMHhjNSB9LCB7IENSNTMsICAweGM1IH0sCi0JCXsgQ1I3OSwgIDB4NTggfSwgeyBDUjgwLCAgMHgzMCB9LCB7IENSODEsICAweDMwIH0sCi0JCXsgQ1I4MiwgIDB4MDAgfSwgeyBDUjgzLCAgMHgyNCB9LCB7IENSODQsICAweDA0IH0sCi0JCXsgQ1I4NSwgIDB4MDAgfSwgeyBDUjg2LCAgMHgxMCB9LCB7IENSODcsICAweDJBIH0sCi0JCXsgQ1I4OCwgIDB4MTAgfSwgeyBDUjg5LCAgMHgyNCB9LCB7IENSOTAsICAweDE4IH0sCi0JCS8qIHsgQ1I5MSwgIDB4MTggfSwgKi8KKwkJeyBaRF9DUjI0LCAgMHgxNCB9LAorCQkvKiB7IFpEX0NSMjQsICAweDIwIH0sICovCisJCXsgWkRfQ1IyNiwgIDB4OTAgfSwgeyBaRF9DUjI3LCAgMHgzMCB9LCB7IFpEX0NSMjksICAweDIwIH0sCisJCXsgWkRfQ1IzMSwgIDB4YjIgfSwgeyBaRF9DUjMyLCAgMHg0MyB9LCB7IFpEX0NSMzMsICAweDI4IH0sCisJCXsgWkRfQ1IzOCwgIDB4MzAgfSwgeyBaRF9DUjM0LCAgMHgwZiB9LCB7IFpEX0NSMzUsICAweEYwIH0sCisJCXsgWkRfQ1I0MSwgIDB4MmEgfSwgeyBaRF9DUjQ2LCAgMHg3RiB9LCB7IFpEX0NSNDcsICAweDFFIH0sCisJCXsgWkRfQ1I1MSwgIDB4YzUgfSwgeyBaRF9DUjUyLCAgMHhjNSB9LCB7IFpEX0NSNTMsICAweGM1IH0sCisJCXsgWkRfQ1I3OSwgIDB4NTggfSwgeyBaRF9DUjgwLCAgMHgzMCB9LCB7IFpEX0NSODEsICAweDMwIH0sCisJCXsgWkRfQ1I4MiwgIDB4MDAgfSwgeyBaRF9DUjgzLCAgMHgyNCB9LCB7IFpEX0NSODQsICAweDA0IH0sCisJCXsgWkRfQ1I4NSwgIDB4MDAgfSwgeyBaRF9DUjg2LCAgMHgxMCB9LCB7IFpEX0NSODcsICAweDJBIH0sCisJCXsgWkRfQ1I4OCwgIDB4MTAgfSwgeyBaRF9DUjg5LCAgMHgyNCB9LCB7IFpEX0NSOTAsICAweDE4IH0sCisJCS8qIHsgWkRfQ1I5MSwgIDB4MTggfSwgKi8KIAkJLyogc2hvdWxkIHNvbHZlIGNvbnRpbnVvdXMgQ1RTIGZyYW1lIHByb2JsZW1zICovCi0JCXsgQ1I5MSwgIDB4MDAgfSwKLQkJeyBDUjkyLCAgMHgwYSB9LCB7IENSOTMsICAweDAwIH0sIHsgQ1I5NCwgIDB4MDEgfSwKLQkJeyBDUjk1LCAgMHgwMCB9LCB7IENSOTYsICAweDQwIH0sIHsgQ1I5NywgIDB4MzcgfSwKLQkJeyBDUjk4LCAgMHgwNSB9LCB7IENSOTksICAweDI4IH0sIHsgQ1IxMDAsIDB4MDAgfSwKLQkJeyBDUjEwMSwgMHgxMyB9LCB7IENSMTAyLCAweDI3IH0sIHsgQ1IxMDMsIDB4MjcgfSwKLQkJeyBDUjEwNCwgMHgxOCB9LCB7IENSMTA1LCAweDEyIH0sCisJCXsgWkRfQ1I5MSwgIDB4MDAgfSwKKwkJeyBaRF9DUjkyLCAgMHgwYSB9LCB7IFpEX0NSOTMsICAweDAwIH0sIHsgWkRfQ1I5NCwgIDB4MDEgfSwKKwkJeyBaRF9DUjk1LCAgMHgwMCB9LCB7IFpEX0NSOTYsICAweDQwIH0sIHsgWkRfQ1I5NywgIDB4MzcgfSwKKwkJeyBaRF9DUjk4LCAgMHgwNSB9LCB7IFpEX0NSOTksICAweDI4IH0sIHsgWkRfQ1IxMDAsIDB4MDAgfSwKKwkJeyBaRF9DUjEwMSwgMHgxMyB9LCB7IFpEX0NSMTAyLCAweDI3IH0sIHsgWkRfQ1IxMDMsIDB4MjcgfSwKKwkJeyBaRF9DUjEwNCwgMHgxOCB9LCB7IFpEX0NSMTA1LCAweDEyIH0sCiAJCS8qIG5vcm1hbCBzaXplICovCi0JCXsgQ1IxMDYsIDB4MWEgfSwKLQkJLyogeyBDUjEwNiwgMHgyMiB9LCAqLwotCQl7IENSMTA3LCAweDI0IH0sIHsgQ1IxMDgsIDB4MGEgfSwgeyBDUjEwOSwgMHgxMyB9LAotCQl7IENSMTEwLCAweDJGIH0sIHsgQ1IxMTEsIDB4MjcgfSwgeyBDUjExMiwgMHgyNyB9LAotCQl7IENSMTEzLCAweDI3IH0sIHsgQ1IxMTQsIDB4MjcgfSwgeyBDUjExNSwgMHg0MCB9LAotCQl7IENSMTE2LCAweDQwIH0sIHsgQ1IxMTcsIDB4RjAgfSwgeyBDUjExOCwgMHhGMCB9LAotCQl7IENSMTE5LCAweDE2IH0sCisJCXsgWkRfQ1IxMDYsIDB4MWEgfSwKKwkJLyogeyBaRF9DUjEwNiwgMHgyMiB9LCAqLworCQl7IFpEX0NSMTA3LCAweDI0IH0sIHsgWkRfQ1IxMDgsIDB4MGEgfSwgeyBaRF9DUjEwOSwgMHgxMyB9LAorCQl7IFpEX0NSMTEwLCAweDJGIH0sIHsgWkRfQ1IxMTEsIDB4MjcgfSwgeyBaRF9DUjExMiwgMHgyNyB9LAorCQl7IFpEX0NSMTEzLCAweDI3IH0sIHsgWkRfQ1IxMTQsIDB4MjcgfSwgeyBaRF9DUjExNSwgMHg0MCB9LAorCQl7IFpEX0NSMTE2LCAweDQwIH0sIHsgWkRfQ1IxMTcsIDB4RjAgfSwgeyBaRF9DUjExOCwgMHhGMCB9LAorCQl7IFpEX0NSMTE5LCAweDE2IH0sCiAJCS8qIG5vIFRYIGNvbnRpbnVhdGlvbiAqLwotCQl7IENSMTIyLCAweDAwIH0sCi0JCS8qIHsgQ1IxMjIsIDB4ZmYgfSwgKi8KLQkJeyBDUjEyNywgMHgwMyB9LCB7IENSMTMxLCAweDA4IH0sIHsgQ1IxMzgsIDB4MjggfSwKLQkJeyBDUjE0OCwgMHg0NCB9LCB7IENSMTUwLCAweDEwIH0sIHsgQ1IxNjksIDB4QkIgfSwKLQkJeyBDUjE3MCwgMHhCQiB9LAorCQl7IFpEX0NSMTIyLCAweDAwIH0sCisJCS8qIHsgWkRfQ1IxMjIsIDB4ZmYgfSwgKi8KKwkJeyBaRF9DUjEyNywgMHgwMyB9LCB7IFpEX0NSMTMxLCAweDA4IH0sIHsgWkRfQ1IxMzgsIDB4MjggfSwKKwkJeyBaRF9DUjE0OCwgMHg0NCB9LCB7IFpEX0NSMTUwLCAweDEwIH0sIHsgWkRfQ1IxNjksIDB4QkIgfSwKKwkJeyBaRF9DUjE3MCwgMHhCQiB9LAogCX07CiAKIAlzdGF0aWMgY29uc3QgdTMyIHJ2W10gPSB7CkBAIC0yMTAsNyArMjEwLDcgQEAKIAkJICovCiAJCTB4Mjk0MTI4LCAvKiBpbnRlcm5hbCBwb3dlciAqLwogCQkvKiAweDI4MjUyYywgKi8gLyogRXh0ZXJuYWwgY29udHJvbCBUWCBwb3dlciAqLwotCQkvKiBDUjMxX0NDSywgQ1I1MV82LTM2TSwgQ1I1Ml80OE0sIENSNTNfNTRNICovCisJCS8qIFpEX0NSMzFfQ0NLLCBaRF9DUjUxXzYtMzZNLCBaRF9DUjUyXzQ4TSwgWkRfQ1I1M181NE0gKi8KIAkJMHgyYzAwMDAsCiAJCTB4MzAwMDAwLAogCQkweDM0MDAwMCwgIC8qIFJFRzEzKDB4RCkgKi8KQEAgLTI0NSw4ICsyNDUsOCBAQAogc3RhdGljIGludCByZjI5NTlfc3dpdGNoX3JhZGlvX29uKHN0cnVjdCB6ZF9yZiAqcmYpCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxc1tdID0gewotCQl7IENSMTAsIDB4ODkgfSwKLQkJeyBDUjExLCAweDAwIH0sCisJCXsgWkRfQ1IxMCwgMHg4OSB9LAorCQl7IFpEX0NSMTEsIDB4MDAgfSwKIAl9OwogCXN0cnVjdCB6ZF9jaGlwICpjaGlwID0gemRfcmZfdG9fY2hpcChyZik7CiAKQEAgLTI1Niw4ICsyNTYsOCBAQAogc3RhdGljIGludCByZjI5NTlfc3dpdGNoX3JhZGlvX29mZihzdHJ1Y3QgemRfcmYgKnJmKQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgemRfaW9yZXExNiBpb3JlcXNbXSA9IHsKLQkJeyBDUjEwLCAweDE1IH0sCi0JCXsgQ1IxMSwgMHg4MSB9LAorCQl7IFpEX0NSMTAsIDB4MTUgfSwKKwkJeyBaRF9DUjExLCAweDgxIH0sCiAJfTsKIAlzdHJ1Y3QgemRfY2hpcCAqY2hpcCA9IHpkX3JmX3RvX2NoaXAocmYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9yZl91dzI0NTMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3JmX3V3MjQ1My5jCmluZGV4IGJhMGEwY2MuLmM0ZDMyNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3JmX3V3MjQ1My5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3JmX3V3MjQ1My5jCkBAIC0zMTQsNDIgKzMxNCw0NCBAQAogCXN0cnVjdCB6ZF9jaGlwICpjaGlwID0gemRfcmZfdG9fY2hpcChyZik7CiAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHpkX2lvcmVxMTYgaW9yZXFzW10gPSB7Ci0JCXsgQ1IxMCwgIDB4ODkgfSwgeyBDUjE1LCAgMHgyMCB9LAotCQl7IENSMTcsICAweDI4IH0sIC8qIDYxMTIgbm8gY2hhbmdlICovCi0JCXsgQ1IyMywgIDB4MzggfSwgeyBDUjI0LCAgMHgyMCB9LCB7IENSMjYsICAweDkzIH0sCi0JCXsgQ1IyNywgIDB4MTUgfSwgeyBDUjI4LCAgMHgzZSB9LCB7IENSMjksICAweDAwIH0sCi0JCXsgQ1IzMywgIDB4MjggfSwgeyBDUjM0LCAgMHgzMCB9LAotCQl7IENSMzUsICAweDQzIH0sIC8qIDYxMTIgM2UtPjQzICovCi0JCXsgQ1I0MSwgIDB4MjQgfSwgeyBDUjQ0LCAgMHgzMiB9LAotCQl7IENSNDYsICAweDkyIH0sIC8qIDYxMTIgOTYtPjkyICovCi0JCXsgQ1I0NywgIDB4MWUgfSwKLQkJeyBDUjQ4LCAgMHgwNCB9LCAvKiA1NjAyIFJvZ2VyICovCi0JCXsgQ1I0OSwgIDB4ZmEgfSwgeyBDUjc5LCAgMHg1OCB9LCB7IENSODAsICAweDMwIH0sCi0JCXsgQ1I4MSwgIDB4MzAgfSwgeyBDUjg3LCAgMHgwYSB9LCB7IENSODksICAweDA0IH0sCi0JCXsgQ1I5MSwgIDB4MDAgfSwgeyBDUjkyLCAgMHgwYSB9LCB7IENSOTgsICAweDhkIH0sCi0JCXsgQ1I5OSwgIDB4MjggfSwgeyBDUjEwMCwgMHgwMiB9LAotCQl7IENSMTAxLCAweDA5IH0sIC8qIDYxMTIgMTMtPjFmIDYyMjAgMWYtPjEzIDY0MDcgMTMtPjkgKi8KLQkJeyBDUjEwMiwgMHgyNyB9LAotCQl7IENSMTA2LCAweDFjIH0sIC8qIDVkMDcgNTExMiAxZi0+MWMgNjIyMCAxYy0+MWYgNjIyMSAxZi0+MWMgKi8KLQkJeyBDUjEwNywgMHgxYyB9LCAvKiA2MjIwIDFjLT4xYSA1MjIxIDFhLT4xYyAqLwotCQl7IENSMTA5LCAweDEzIH0sCi0JCXsgQ1IxMTAsIDB4MWYgfSwgLyogNjExMiAxMy0+MWYgNjIyMSAxZi0+MTMgNjQwNyAxMy0+MHgwOSAqLwotCQl7IENSMTExLCAweDEzIH0sIHsgQ1IxMTIsIDB4MWYgfSwgeyBDUjExMywgMHgyNyB9LAotCQl7IENSMTE0LCAweDIzIH0sIC8qIDYyMjEgMjctPjIzICovCi0JCXsgQ1IxMTUsIDB4MjQgfSwgLyogNjExMiAyNC0+MWMgNjIyMCAxYy0+MjQgKi8KLQkJeyBDUjExNiwgMHgyNCB9LCAvKiA2MjIwIDFjLT4yNCAqLwotCQl7IENSMTE3LCAweGZhIH0sIC8qIDYxMTIgZmEtPmY4IDYyMjAgZjgtPmY0IDYyMjAgZjQtPmZhICovCi0JCXsgQ1IxMTgsIDB4ZjAgfSwgLyogNWQwNyA2MTEyIGYwLT5mMiA2MjIwIGYyLT5mMCAqLwotCQl7IENSMTE5LCAweDFhIH0sIC8qIDYxMTIgMWEtPjEwIDYyMjAgMTAtPjE0IDYyMjAgMTQtPjFhICovCi0JCXsgQ1IxMjAsIDB4NGYgfSwKLQkJeyBDUjEyMSwgMHgxZiB9LCAvKiA2MjIwIDRmLT4xZiAqLwotCQl7IENSMTIyLCAweGYwIH0sIHsgQ1IxMjMsIDB4NTcgfSwgeyBDUjEyNSwgMHhhZCB9LAotCQl7IENSMTI2LCAweDZjIH0sIHsgQ1IxMjcsIDB4MDMgfSwKLQkJeyBDUjEyOCwgMHgxNCB9LCAvKiA2MzAyIDEyLT4xMSAqLwotCQl7IENSMTI5LCAweDEyIH0sIC8qIDYzMDEgMTAtPjBmICovCi0JCXsgQ1IxMzAsIDB4MTAgfSwgeyBDUjEzNywgMHg1MCB9LCB7IENSMTM4LCAweGE4IH0sCi0JCXsgQ1IxNDQsIDB4YWMgfSwgeyBDUjE0NiwgMHgyMCB9LCB7IENSMjUyLCAweGZmIH0sCi0JCXsgQ1IyNTMsIDB4ZmYgfSwKKwkJeyBaRF9DUjEwLCAgMHg4OSB9LCB7IFpEX0NSMTUsICAweDIwIH0sCisJCXsgWkRfQ1IxNywgIDB4MjggfSwgLyogNjExMiBubyBjaGFuZ2UgKi8KKwkJeyBaRF9DUjIzLCAgMHgzOCB9LCB7IFpEX0NSMjQsICAweDIwIH0sIHsgWkRfQ1IyNiwgIDB4OTMgfSwKKwkJeyBaRF9DUjI3LCAgMHgxNSB9LCB7IFpEX0NSMjgsICAweDNlIH0sIHsgWkRfQ1IyOSwgIDB4MDAgfSwKKwkJeyBaRF9DUjMzLCAgMHgyOCB9LCB7IFpEX0NSMzQsICAweDMwIH0sCisJCXsgWkRfQ1IzNSwgIDB4NDMgfSwgLyogNjExMiAzZS0+NDMgKi8KKwkJeyBaRF9DUjQxLCAgMHgyNCB9LCB7IFpEX0NSNDQsICAweDMyIH0sCisJCXsgWkRfQ1I0NiwgIDB4OTIgfSwgLyogNjExMiA5Ni0+OTIgKi8KKwkJeyBaRF9DUjQ3LCAgMHgxZSB9LAorCQl7IFpEX0NSNDgsICAweDA0IH0sIC8qIDU2MDIgUm9nZXIgKi8KKwkJeyBaRF9DUjQ5LCAgMHhmYSB9LCB7IFpEX0NSNzksICAweDU4IH0sIHsgWkRfQ1I4MCwgIDB4MzAgfSwKKwkJeyBaRF9DUjgxLCAgMHgzMCB9LCB7IFpEX0NSODcsICAweDBhIH0sIHsgWkRfQ1I4OSwgIDB4MDQgfSwKKwkJeyBaRF9DUjkxLCAgMHgwMCB9LCB7IFpEX0NSOTIsICAweDBhIH0sIHsgWkRfQ1I5OCwgIDB4OGQgfSwKKwkJeyBaRF9DUjk5LCAgMHgyOCB9LCB7IFpEX0NSMTAwLCAweDAyIH0sCisJCXsgWkRfQ1IxMDEsIDB4MDkgfSwgLyogNjExMiAxMy0+MWYgNjIyMCAxZi0+MTMgNjQwNyAxMy0+OSAqLworCQl7IFpEX0NSMTAyLCAweDI3IH0sCisJCXsgWkRfQ1IxMDYsIDB4MWMgfSwgLyogNWQwNyA1MTEyIDFmLT4xYyA2MjIwIDFjLT4xZgorCQkJCSAgICAgKiA2MjIxIDFmLT4xYworCQkJCSAgICAgKi8KKwkJeyBaRF9DUjEwNywgMHgxYyB9LCAvKiA2MjIwIDFjLT4xYSA1MjIxIDFhLT4xYyAqLworCQl7IFpEX0NSMTA5LCAweDEzIH0sCisJCXsgWkRfQ1IxMTAsIDB4MWYgfSwgLyogNjExMiAxMy0+MWYgNjIyMSAxZi0+MTMgNjQwNyAxMy0+MHgwOSAqLworCQl7IFpEX0NSMTExLCAweDEzIH0sIHsgWkRfQ1IxMTIsIDB4MWYgfSwgeyBaRF9DUjExMywgMHgyNyB9LAorCQl7IFpEX0NSMTE0LCAweDIzIH0sIC8qIDYyMjEgMjctPjIzICovCisJCXsgWkRfQ1IxMTUsIDB4MjQgfSwgLyogNjExMiAyNC0+MWMgNjIyMCAxYy0+MjQgKi8KKwkJeyBaRF9DUjExNiwgMHgyNCB9LCAvKiA2MjIwIDFjLT4yNCAqLworCQl7IFpEX0NSMTE3LCAweGZhIH0sIC8qIDYxMTIgZmEtPmY4IDYyMjAgZjgtPmY0IDYyMjAgZjQtPmZhICovCisJCXsgWkRfQ1IxMTgsIDB4ZjAgfSwgLyogNWQwNyA2MTEyIGYwLT5mMiA2MjIwIGYyLT5mMCAqLworCQl7IFpEX0NSMTE5LCAweDFhIH0sIC8qIDYxMTIgMWEtPjEwIDYyMjAgMTAtPjE0IDYyMjAgMTQtPjFhICovCisJCXsgWkRfQ1IxMjAsIDB4NGYgfSwKKwkJeyBaRF9DUjEyMSwgMHgxZiB9LCAvKiA2MjIwIDRmLT4xZiAqLworCQl7IFpEX0NSMTIyLCAweGYwIH0sIHsgWkRfQ1IxMjMsIDB4NTcgfSwgeyBaRF9DUjEyNSwgMHhhZCB9LAorCQl7IFpEX0NSMTI2LCAweDZjIH0sIHsgWkRfQ1IxMjcsIDB4MDMgfSwKKwkJeyBaRF9DUjEyOCwgMHgxNCB9LCAvKiA2MzAyIDEyLT4xMSAqLworCQl7IFpEX0NSMTI5LCAweDEyIH0sIC8qIDYzMDEgMTAtPjBmICovCisJCXsgWkRfQ1IxMzAsIDB4MTAgfSwgeyBaRF9DUjEzNywgMHg1MCB9LCB7IFpEX0NSMTM4LCAweGE4IH0sCisJCXsgWkRfQ1IxNDQsIDB4YWMgfSwgeyBaRF9DUjE0NiwgMHgyMCB9LCB7IFpEX0NSMjUyLCAweGZmIH0sCisJCXsgWkRfQ1IyNTMsIDB4ZmYgfSwKIAl9OwogCiAJc3RhdGljIGNvbnN0IHUzMiBydltdID0gewpAQCAtNDMzLDcgKzQzNSw3IEBACiAJICogdGhlIG9uZSB0aGF0IHByb2R1Y2VkIGEgbG9jay4gKi8KIAlVVzI0NTNfUFJJVihyZiktPmNvbmZpZyA9IGZvdW5kX2NvbmZpZyArIDE7CiAKLQlyZXR1cm4gemRfaW93cml0ZTE2X2xvY2tlZChjaGlwLCAweDA2LCBDUjIwMyk7CisJcmV0dXJuIHpkX2lvd3JpdGUxNl9sb2NrZWQoY2hpcCwgMHgwNiwgWkRfQ1IyMDMpOwogfQogCiBzdGF0aWMgaW50IHV3MjQ1M19zZXRfY2hhbm5lbChzdHJ1Y3QgemRfcmYgKnJmLCB1OCBjaGFubmVsKQpAQCAtNDQ1LDggKzQ0Nyw4IEBACiAJc3RydWN0IHpkX2NoaXAgKmNoaXAgPSB6ZF9yZl90b19jaGlwKHJmKTsKIAogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgemRfaW9yZXExNiBpb3JlcXNbXSA9IHsKLQkJeyBDUjgwLCAgMHgzMCB9LCB7IENSODEsICAweDMwIH0sIHsgQ1I3OSwgIDB4NTggfSwKLQkJeyBDUjEyLCAgMHhmMCB9LCB7IENSNzcsICAweDFiIH0sIHsgQ1I3OCwgIDB4NTggfSwKKwkJeyBaRF9DUjgwLCAgMHgzMCB9LCB7IFpEX0NSODEsICAweDMwIH0sIHsgWkRfQ1I3OSwgIDB4NTggfSwKKwkJeyBaRF9DUjEyLCAgMHhmMCB9LCB7IFpEX0NSNzcsICAweDFiIH0sIHsgWkRfQ1I3OCwgIDB4NTggfSwKIAl9OwogCiAJciA9IHV3MjQ1M19zeW50aF9zZXRfY2hhbm5lbChjaGlwLCBjaGFubmVsLCBhdXRvY2FsKTsKQEAgLTQ3NCw3ICs0NzYsNyBAQAogCWlmIChyKQogCQlyZXR1cm4gcjsKIAotCXJldHVybiB6ZF9pb3dyaXRlMTZfbG9ja2VkKGNoaXAsIDB4MDYsIENSMjAzKTsKKwlyZXR1cm4gemRfaW93cml0ZTE2X2xvY2tlZChjaGlwLCAweDA2LCBaRF9DUjIwMyk7CiB9CiAKIHN0YXRpYyBpbnQgdXcyNDUzX3N3aXRjaF9yYWRpb19vbihzdHJ1Y3QgemRfcmYgKnJmKQpAQCAtNDgyLDcgKzQ4NCw3IEBACiAJaW50IHI7CiAJc3RydWN0IHpkX2NoaXAgKmNoaXAgPSB6ZF9yZl90b19jaGlwKHJmKTsKIAlzdHJ1Y3QgemRfaW9yZXExNiBpb3JlcXNbXSA9IHsKLQkJeyBDUjExLCAgMHgwMCB9LCB7IENSMjUxLCAweDNmIH0sCisJCXsgWkRfQ1IxMSwgIDB4MDAgfSwgeyBaRF9DUjI1MSwgMHgzZiB9LAogCX07CiAKIAkvKiBlbnRlciBSWFRYIG1vZGUgKi8KQEAgLTUwMSw3ICs1MDMsNyBAQAogCWludCByOwogCXN0cnVjdCB6ZF9jaGlwICpjaGlwID0gemRfcmZfdG9fY2hpcChyZik7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxc1tdID0gewotCQl7IENSMTEsICAweDA0IH0sIHsgQ1IyNTEsIDB4MmYgfSwKKwkJeyBaRF9DUjExLCAgMHgwNCB9LCB7IFpEX0NSMjUxLCAweDJmIH0sCiAJfTsKIAogCS8qIGVudGVyIElETEUgbW9kZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYwppbmRleCBhYjYwN2JiLi4wZTgxOTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYwpAQCAtMTg5MywxMCArMTg5MywxMCBAQAogCiAJZGV2X2RiZ19mKHpkX3VzYl9kZXYodXNiKSwgInZhbHVlICUjMDl4IGJpdHMgJWRcbiIsIHZhbHVlLCBiaXRzKTsKIAotCXIgPSB6ZF91c2JfaW9yZWFkMTYodXNiLCAmYml0X3ZhbHVlX3RlbXBsYXRlLCBDUjIwMyk7CisJciA9IHpkX3VzYl9pb3JlYWQxNih1c2IsICZiaXRfdmFsdWVfdGVtcGxhdGUsIFpEX0NSMjAzKTsKIAlpZiAocikgewogCQlkZXZfZGJnX2YoemRfdXNiX2Rldih1c2IpLAotCQkJImVycm9yICVkOiBDb3VsZG4ndCByZWFkIENSMjAzXG4iLCByKTsKKwkJCSJlcnJvciAlZDogQ291bGRuJ3QgcmVhZCBaRF9DUjIwM1xuIiwgcik7CiAJCXJldHVybiByOwogCX0KIAliaXRfdmFsdWVfdGVtcGxhdGUgJj0gfihSRl9JRl9MRXxSRl9DTEt8UkZfREFUQSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5oCmluZGV4IDMyNWQwZjkuLmJmOTQyODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5oCkBAIC0xMDksNyArMTA5LDcgQEAKIAlfX2xlMTYgYml0czsKIAkvKiBSRjI1OTU6IDI0ICovCiAJX19sZTE2IGJpdF92YWx1ZXNbMF07Ci0JLyogKENSMjAzICYgfihSRl9JRl9MRSB8IFJGX0NMSyB8IFJGX0RBVEEpKSB8IChiaXQgPyBSRl9EQVRBIDogMCkgKi8KKwkvKiAoWkRfQ1IyMDMgJiB+KFJGX0lGX0xFIHwgUkZfQ0xLIHwgUkZfREFUQSkpIHwgKGJpdCA/IFJGX0RBVEEgOiAwKSAqLwogfSBfX3BhY2tlZDsKIAogLyogVVNCIGludGVycnVwdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmggYi9kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9jb21tb24uaAppbmRleCA1ZDdiYmYyLi4xNjFmMjA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9jb21tb24uaAorKysgYi9kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9jb21tb24uaApAQCAtNzMsOSArNzMsNiBAQAogCXN0cnVjdCB2bV9zdHJ1Y3QgKnR4X2NvbW1zX2FyZWE7CiAJc3RydWN0IHZtX3N0cnVjdCAqcnhfY29tbXNfYXJlYTsKIAotCS8qIEZsYWdzIHRoYXQgbXVzdCBub3QgYmUgc2V0IGluIGRldi0+ZmVhdHVyZXMgKi8KLQl1MzIgZmVhdHVyZXNfZGlzYWJsZWQ7Ci0KIAkvKiBGcm9udGVuZCBmZWF0dXJlIGluZm9ybWF0aW9uLiAqLwogCXU4IGNhbl9zZzoxOwogCXU4IGdzbzoxOwpAQCAtMTA5LDggKzEwNiw4IEBACiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdGluZ190b19mcmVlOwogfTsKIAotI2RlZmluZSBYRU5fTkVUSUZfVFhfUklOR19TSVpFIF9fUklOR19TSVpFKChzdHJ1Y3QgeGVuX25ldGlmX3R4X3NyaW5nICopMCwgUEFHRV9TSVpFKQotI2RlZmluZSBYRU5fTkVUSUZfUlhfUklOR19TSVpFIF9fUklOR19TSVpFKChzdHJ1Y3QgeGVuX25ldGlmX3J4X3NyaW5nICopMCwgUEFHRV9TSVpFKQorI2RlZmluZSBYRU5fTkVUSUZfVFhfUklOR19TSVpFIF9fQ09OU1RfUklOR19TSVpFKHhlbl9uZXRpZl90eCwgUEFHRV9TSVpFKQorI2RlZmluZSBYRU5fTkVUSUZfUlhfUklOR19TSVpFIF9fQ09OU1RfUklOR19TSVpFKHhlbl9uZXRpZl9yeCwgUEFHRV9TSVpFKQogCiBzdHJ1Y3QgeGVudmlmICp4ZW52aWZfYWxsb2Moc3RydWN0IGRldmljZSAqcGFyZW50LAogCQkJICAgIGRvbWlkX3QgZG9taWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYyBiL2RyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jCmluZGV4IGRlNTY5Y2MuLjBjYTg2ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jCisrKyBiL2RyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jCkBAIC0xNjUsNjkgKzE2NSwxOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB4ZW52aWZfc2V0X2ZlYXR1cmVzKHN0cnVjdCB4ZW52aWYgKnZpZikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdmlmLT5kZXY7Ci0JdTMyIGZlYXR1cmVzID0gZGV2LT5mZWF0dXJlczsKLQotCWlmICh2aWYtPmNhbl9zZykKLQkJZmVhdHVyZXMgfD0gTkVUSUZfRl9TRzsKLQlpZiAodmlmLT5nc28gfHwgdmlmLT5nc29fcHJlZml4KQotCQlmZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKLQlpZiAodmlmLT5jc3VtKQotCQlmZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU07Ci0KLQlmZWF0dXJlcyAmPSB+KHZpZi0+ZmVhdHVyZXNfZGlzYWJsZWQpOwotCi0JaWYgKCEoZmVhdHVyZXMgJiBORVRJRl9GX1NHKSAmJiBkZXYtPm10dSA+IEVUSF9EQVRBX0xFTikKLQkJZGV2LT5tdHUgPSBFVEhfREFUQV9MRU47Ci0KLQlkZXYtPmZlYXR1cmVzID0gZmVhdHVyZXM7Ci19Ci0KLXN0YXRpYyBpbnQgeGVudmlmX3NldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQorc3RhdGljIHUzMiB4ZW52aWZfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcykKIHsKIAlzdHJ1Y3QgeGVudmlmICp2aWYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWlmIChkYXRhKSB7Ci0JCWlmICghdmlmLT5jc3VtKQotCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCQl2aWYtPmZlYXR1cmVzX2Rpc2FibGVkICY9IH5ORVRJRl9GX0lQX0NTVU07Ci0JfSBlbHNlIHsKLQkJdmlmLT5mZWF0dXJlc19kaXNhYmxlZCB8PSBORVRJRl9GX0lQX0NTVU07Ci0JfQogCi0JeGVudmlmX3NldF9mZWF0dXJlcyh2aWYpOwotCXJldHVybiAwOwotfQorCWlmICghdmlmLT5jYW5fc2cpCisJCWZlYXR1cmVzICY9IH5ORVRJRl9GX1NHOworCWlmICghdmlmLT5nc28gJiYgIXZpZi0+Z3NvX3ByZWZpeCkKKwkJZmVhdHVyZXMgJj0gfk5FVElGX0ZfVFNPOworCWlmICghdmlmLT5jc3VtKQorCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9JUF9DU1VNOwogCi1zdGF0aWMgaW50IHhlbnZpZl9zZXRfc2coc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IHhlbnZpZiAqdmlmID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpZiAoZGF0YSkgewotCQlpZiAoIXZpZi0+Y2FuX3NnKQotCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCQl2aWYtPmZlYXR1cmVzX2Rpc2FibGVkICY9IH5ORVRJRl9GX1NHOwotCX0gZWxzZSB7Ci0JCXZpZi0+ZmVhdHVyZXNfZGlzYWJsZWQgfD0gTkVUSUZfRl9TRzsKLQl9Ci0KLQl4ZW52aWZfc2V0X2ZlYXR1cmVzKHZpZik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgeGVudmlmX3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IHhlbnZpZiAqdmlmID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpZiAoZGF0YSkgewotCQlpZiAoIXZpZi0+Z3NvICYmICF2aWYtPmdzb19wcmVmaXgpCi0JCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JCXZpZi0+ZmVhdHVyZXNfZGlzYWJsZWQgJj0gfk5FVElGX0ZfVFNPOwotCX0gZWxzZSB7Ci0JCXZpZi0+ZmVhdHVyZXNfZGlzYWJsZWQgfD0gTkVUSUZfRl9UU087Ci0JfQotCi0JeGVudmlmX3NldF9mZWF0dXJlcyh2aWYpOwotCXJldHVybiAwOworCXJldHVybiBmZWF0dXJlczsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB4ZW52aWZfc3RhdCB7CkBAIC0yNzQsMTIgKzIyMyw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgeGVudmlmX2V0aHRvb2xfb3BzID0gewotCS5nZXRfdHhfY3N1bQk9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCi0JLnNldF90eF9jc3VtCT0geGVudmlmX3NldF90eF9jc3VtLAotCS5nZXRfc2cJCT0gZXRodG9vbF9vcF9nZXRfc2csCi0JLnNldF9zZwkJPSB4ZW52aWZfc2V0X3NnLAotCS5nZXRfdHNvCT0gZXRodG9vbF9vcF9nZXRfdHNvLAotCS5zZXRfdHNvCT0geGVudmlmX3NldF90c28sCiAJLmdldF9saW5rCT0gZXRodG9vbF9vcF9nZXRfbGluaywKIAogCS5nZXRfc3NldF9jb3VudCA9IHhlbnZpZl9nZXRfc3NldF9jb3VudCwKQEAgLTI5Myw2ICsyMzYsNyBAQAogCS5uZG9fb3Blbgk9IHhlbnZpZl9vcGVuLAogCS5uZG9fc3RvcAk9IHhlbnZpZl9jbG9zZSwKIAkubmRvX2NoYW5nZV9tdHUJPSB4ZW52aWZfY2hhbmdlX210dSwKKwkubmRvX2ZpeF9mZWF0dXJlcyA9IHhlbnZpZl9maXhfZmVhdHVyZXMsCiB9OwogCiBzdHJ1Y3QgeGVudmlmICp4ZW52aWZfYWxsb2Moc3RydWN0IGRldmljZSAqcGFyZW50LCBkb21pZF90IGRvbWlkLApAQCAtMzMxLDcgKzI3NSw4IEBACiAJdmlmLT5jcmVkaXRfdGltZW91dC5leHBpcmVzID0gamlmZmllczsKIAogCWRldi0+bmV0ZGV2X29wcwk9ICZ4ZW52aWZfbmV0ZGV2X29wczsKLQl4ZW52aWZfc2V0X2ZlYXR1cmVzKHZpZik7CisJZGV2LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1RTTzsKKwlkZXYtPmZlYXR1cmVzID0gZGV2LT5od19mZWF0dXJlczsKIAlTRVRfRVRIVE9PTF9PUFMoZGV2LCAmeGVudmlmX2V0aHRvb2xfb3BzKTsKIAogCWRldi0+dHhfcXVldWVfbGVuID0gWEVOVklGX1FVRVVFX0xFTkdUSDsKQEAgLTM2Nyw4ICszMTIsNiBAQAogCWlmICh2aWYtPmlycSkKIAkJcmV0dXJuIDA7CiAKLQl4ZW52aWZfc2V0X2ZlYXR1cmVzKHZpZik7Ci0KIAllcnIgPSB4ZW5fbmV0YmtfbWFwX2Zyb250ZW5kX3JpbmdzKHZpZiwgdHhfcmluZ19yZWYsIHJ4X3JpbmdfcmVmKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnI7CkBAIC0zODQsOSArMzI3LDEyIEBACiAJeGVudmlmX2dldCh2aWYpOwogCiAJcnRubF9sb2NrKCk7Ci0JbmV0aWZfY2Fycmllcl9vbih2aWYtPmRldik7CiAJaWYgKG5ldGlmX3J1bm5pbmcodmlmLT5kZXYpKQogCQl4ZW52aWZfdXAodmlmKTsKKwlpZiAoIXZpZi0+Y2FuX3NnICYmIHZpZi0+ZGV2LT5tdHUgPiBFVEhfREFUQV9MRU4pCisJCWRldl9zZXRfbXR1KHZpZi0+ZGV2LCBFVEhfREFUQV9MRU4pOworCW5ldGRldl91cGRhdGVfZmVhdHVyZXModmlmLT5kZXYpOworCW5ldGlmX2NhcnJpZXJfb24odmlmLT5kZXYpOwogCXJ0bmxfdW5sb2NrKCk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL3hlbmJ1cy5jIGIvZHJpdmVycy9uZXQveGVuLW5ldGJhY2sveGVuYnVzLmMKaW5kZXggMjJiOGMzNS4uMWNlNzI5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQveGVuLW5ldGJhY2sveGVuYnVzLmMKKysrIGIvZHJpdmVycy9uZXQveGVuLW5ldGJhY2sveGVuYnVzLmMKQEAgLTI2LDcgKzI2LDcgQEAKIAlzdHJ1Y3QgeGVudmlmICp2aWY7CiAJZW51bSB4ZW5idXNfc3RhdGUgZnJvbnRlbmRfc3RhdGU7CiAJc3RydWN0IHhlbmJ1c193YXRjaCBob3RwbHVnX3N0YXR1c193YXRjaDsKLQlpbnQgaGF2ZV9ob3RwbHVnX3N0YXR1c193YXRjaDoxOworCXU4IGhhdmVfaG90cGx1Z19zdGF0dXNfd2F0Y2g6MTsKIH07CiAKIHN0YXRpYyBpbnQgY29ubmVjdF9yaW5ncyhzdHJ1Y3QgYmFja2VuZF9pbmZvICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMgYi9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYwppbmRleCA1YzhkOWMzLi5kYjlhNzYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYworKysgYi9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYwpAQCAtMTE0MCw2ICsxMTQwLDQyIEBACiAJZ250dGFiX2ZyZWVfZ3JhbnRfcmVmZXJlbmNlcyhucC0+Z3JlZl9yeF9oZWFkKTsKIH0KIAorc3RhdGljIHUzMiB4ZW5uZXRfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcykKK3sKKwlzdHJ1Y3QgbmV0ZnJvbnRfaW5mbyAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCB2YWw7CisKKwlpZiAoZmVhdHVyZXMgJiBORVRJRl9GX1NHKSB7CisJCWlmICh4ZW5idXNfc2NhbmYoWEJUX05JTCwgbnAtPnhiZGV2LT5vdGhlcmVuZCwgImZlYXR1cmUtc2ciLAorCQkJCSAiJWQiLCAmdmFsKSA8IDApCisJCQl2YWwgPSAwOworCisJCWlmICghdmFsKQorCQkJZmVhdHVyZXMgJj0gfk5FVElGX0ZfU0c7CisJfQorCisJaWYgKGZlYXR1cmVzICYgTkVUSUZfRl9UU08pIHsKKwkJaWYgKHhlbmJ1c19zY2FuZihYQlRfTklMLCBucC0+eGJkZXYtPm90aGVyZW5kLAorCQkJCSAiZmVhdHVyZS1nc28tdGNwdjQiLCAiJWQiLCAmdmFsKSA8IDApCisJCQl2YWwgPSAwOworCisJCWlmICghdmFsKQorCQkJZmVhdHVyZXMgJj0gfk5FVElGX0ZfVFNPOworCX0KKworCXJldHVybiBmZWF0dXJlczsKK30KKworc3RhdGljIGludCB4ZW5uZXRfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcykKK3sKKwlpZiAoIShmZWF0dXJlcyAmIE5FVElGX0ZfU0cpICYmIGRldi0+bXR1ID4gRVRIX0RBVEFfTEVOKSB7CisJCW5ldGRldl9pbmZvKGRldiwgIlJlZHVjaW5nIE1UVSBiZWNhdXNlIG5vIFNHIG9mZmxvYWQiKTsKKwkJZGV2LT5tdHUgPSBFVEhfREFUQV9MRU47CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgeGVubmV0X25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuICAgICAgICAgICAgPSB4ZW5uZXRfb3BlbiwKIAkubmRvX3VuaW5pdCAgICAgICAgICA9IHhlbm5ldF91bmluaXQsCkBAIC0xMTQ4LDYgKzExODQsOCBAQAogCS5uZG9fY2hhbmdlX210dQkgICAgID0geGVubmV0X2NoYW5nZV9tdHUsCiAJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBldGhfbWFjX2FkZHIsCiAJLm5kb192YWxpZGF0ZV9hZGRyICAgPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX2ZpeF9mZWF0dXJlcyAgICA9IHhlbm5ldF9maXhfZmVhdHVyZXMsCisJLm5kb19zZXRfZmVhdHVyZXMgICAgPSB4ZW5uZXRfc2V0X2ZlYXR1cmVzLAogfTsKIAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICogX19kZXZpbml0IHhlbm5ldF9jcmVhdGVfZGV2KHN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYpCkBAIC0xMjA5LDcgKzEyNDcsMTcgQEAKIAluZXRkZXYtPm5ldGRldl9vcHMJPSAmeGVubmV0X25ldGRldl9vcHM7CiAKIAluZXRpZl9uYXBpX2FkZChuZXRkZXYsICZucC0+bmFwaSwgeGVubmV0X3BvbGwsIDY0KTsKLQluZXRkZXYtPmZlYXR1cmVzICAgICAgICA9IE5FVElGX0ZfSVBfQ1NVTTsKKwluZXRkZXYtPmZlYXR1cmVzICAgICAgICA9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNIHwKKwkJCQkgIE5FVElGX0ZfR1NPX1JPQlVTVDsKKwluZXRkZXYtPmh3X2ZlYXR1cmVzCT0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9TRyB8IE5FVElGX0ZfVFNPOworCisJLyoKKyAgICAgICAgICogQXNzdW1lIHRoYXQgYWxsIGh3IGZlYXR1cmVzIGFyZSBhdmFpbGFibGUgZm9yIG5vdy4gVGhpcyBzZXQKKyAgICAgICAgICogd2lsbCBiZSBhZGp1c3RlZCBieSB0aGUgY2FsbCB0byBuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKCkgaW4KKyAgICAgICAgICogeGVubmV0X2Nvbm5lY3QoKSB3aGljaCBpcyB0aGUgZWFybGllc3QgcG9pbnQgd2hlcmUgd2UgY2FuCisgICAgICAgICAqIG5lZ290aWF0ZSB3aXRoIHRoZSBiYWNrZW5kIHJlZ2FyZGluZyBzdXBwb3J0ZWQgZmVhdHVyZXMuCisgICAgICAgICAqLworCW5ldGRldi0+ZmVhdHVyZXMgfD0gbmV0ZGV2LT5od19mZWF0dXJlczsKIAogCVNFVF9FVEhUT09MX09QUyhuZXRkZXYsICZ4ZW5uZXRfZXRodG9vbF9vcHMpOwogCVNFVF9ORVRERVZfREVWKG5ldGRldiwgJmRldi0+ZGV2KTsKQEAgLTE0MTYsOCArMTQ2NCw3IEBACiAJCWdvdG8gZmFpbDsKIAogCWVyciA9IGJpbmRfZXZ0Y2huX3RvX2lycWhhbmRsZXIoaW5mby0+ZXZ0Y2huLCB4ZW5uZXRfaW50ZXJydXB0LAotCQkJCQlJUlFGX1NBTVBMRV9SQU5ET00sIG5ldGRldi0+bmFtZSwKLQkJCQkJbmV0ZGV2KTsKKwkJCQkJMCwgbmV0ZGV2LT5uYW1lLCBuZXRkZXYpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGZhaWw7CiAJbmV0ZGV2LT5pcnEgPSBlcnI7CkBAIC0xNTEwLDU0ICsxNTU3LDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHhlbm5ldF9zZXRfc2coc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0JaWYgKGRhdGEpIHsKLQkJc3RydWN0IG5ldGZyb250X2luZm8gKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQkJaW50IHZhbDsKLQotCQlpZiAoeGVuYnVzX3NjYW5mKFhCVF9OSUwsIG5wLT54YmRldi0+b3RoZXJlbmQsICJmZWF0dXJlLXNnIiwKLQkJCQkgIiVkIiwgJnZhbCkgPCAwKQotCQkJdmFsID0gMDsKLQkJaWYgKCF2YWwpCi0JCQlyZXR1cm4gLUVOT1NZUzsKLQl9IGVsc2UgaWYgKGRldi0+bXR1ID4gRVRIX0RBVEFfTEVOKQotCQlkZXYtPm10dSA9IEVUSF9EQVRBX0xFTjsKLQotCXJldHVybiBldGh0b29sX29wX3NldF9zZyhkZXYsIGRhdGEpOwotfQotCi1zdGF0aWMgaW50IHhlbm5ldF9zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCWlmIChkYXRhKSB7Ci0JCXN0cnVjdCBuZXRmcm9udF9pbmZvICpucCA9IG5ldGRldl9wcml2KGRldik7Ci0JCWludCB2YWw7Ci0KLQkJaWYgKHhlbmJ1c19zY2FuZihYQlRfTklMLCBucC0+eGJkZXYtPm90aGVyZW5kLAotCQkJCSAiZmVhdHVyZS1nc28tdGNwdjQiLCAiJWQiLCAmdmFsKSA8IDApCi0JCQl2YWwgPSAwOwotCQlpZiAoIXZhbCkKLQkJCXJldHVybiAtRU5PU1lTOwotCX0KLQotCXJldHVybiBldGh0b29sX29wX3NldF90c28oZGV2LCBkYXRhKTsKLX0KLQotc3RhdGljIHZvaWQgeGVubmV0X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCS8qIFR1cm4gb2ZmIGFsbCBHU08gYml0cyBleGNlcHQgUk9CVVNULiAqLwotCWRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfR1NPX01BU0s7Ci0JZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0dTT19ST0JVU1Q7Ci0JeGVubmV0X3NldF9zZyhkZXYsIDApOwotCi0JLyogV2UgbmVlZCBjaGVja3N1bSBvZmZsb2FkIHRvIGVuYWJsZSBzY2F0dGVyL2dhdGhlciBhbmQgVFNPLiAqLwotCWlmICghKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0lQX0NTVU0pKQotCQlyZXR1cm47Ci0KLQlpZiAoIXhlbm5ldF9zZXRfc2coZGV2LCAxKSkKLQkJeGVubmV0X3NldF90c28oZGV2LCAxKTsKLX0KLQogc3RhdGljIGludCB4ZW5uZXRfY29ubmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuZXRmcm9udF9pbmZvICpucCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xNTgyLDcgKzE1ODEsNyBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQl4ZW5uZXRfc2V0X2ZlYXR1cmVzKGRldik7CisJbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpOwogCiAJc3Bpbl9sb2NrX2JoKCZucC0+cnhfbG9jayk7CiAJc3Bpbl9sb2NrX2lycSgmbnAtPnR4X2xvY2spOwpAQCAtMTcxMCw5ICsxNzA5LDYgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB4ZW5uZXRfZXRodG9vbF9vcHMgPQogewotCS5zZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3Bfc2V0X3R4X2NzdW0sCi0JLnNldF9zZyA9IHhlbm5ldF9zZXRfc2csCi0JLnNldF90c28gPSB4ZW5uZXRfc2V0X3RzbywKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAogCiAJLmdldF9zc2V0X2NvdW50ID0geGVubmV0X2dldF9zc2V0X2NvdW50LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9pcnEuYyBiL2RyaXZlcnMvb2YvaXJxLmMKaW5kZXggNzViMGQzYy4uOWY2ODlmMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2YvaXJxLmMKKysrIGIvZHJpdmVycy9vZi9pcnEuYwpAQCAtNTYsNyArNTYsNyBAQAogICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGludGVycnVwdCBwYXJlbnQgbm9kZSwgb3IgTlVMTCBpZiB0aGUgaW50ZXJydXB0CiAgKiBwYXJlbnQgY291bGQgbm90IGJlIGRldGVybWluZWQuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2lycV9maW5kX3BhcmVudChzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkKQorc3RydWN0IGRldmljZV9ub2RlICpvZl9pcnFfZmluZF9wYXJlbnQoc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnA7CiAJY29uc3QgX19iZTMyICpwYXJwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3BjLmMKaW5kZXggYmM4Y2U0OC4uZjMzMDMzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYworKysgYi9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9wYy5jCkBAIC0xNjIxLDcgKzE2MjEsNyBAQAogCXU4IG9yaWd2YWwsIHI7CiAJaWYgKHZlcmJvc2VfcHJvYmluZykKIAkJcHJpbnRrKEtFUk5fREVCVUcgIklUODcwNSBTdXBlci1JTyBkZXRlY3Rpb24sIG5vdyB0ZXN0aW5nIHBvcnQgMkUgLi4uXG4iKTsKLQlpZiAoIXJlcXVlc3RfcmVnaW9uKDB4MmUsIDIsIF9fZnVuY19fKSkKKwlpZiAoIXJlcXVlc3RfbXV4ZWRfcmVnaW9uKDB4MmUsIDIsIF9fZnVuY19fKSkKIAkJcmV0dXJuOwogCW9yaWd2YWwgPSBpbmIoMHgyZSk7CQkvKiBTYXZlIG9yaWdpbmFsIHZhbHVlICovCiAJb3V0YigweDg3LCAweDJlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnCmluZGV4IDA0ODVlMzkuLjQ4NWMwOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZwpAQCAtMTExLDcgKzExMSw3IEBACiAJICBBbGwtSW4tT25lIG1hY2hpbmVzLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwKLQkgIGJlIGNhbGxlZCBkZWxsLXdtaS4KKwkgIGJlIGNhbGxlZCBkZWxsLXdtaS1haW8uCiAKIAogY29uZmlnIEZVSklUU1VfTEFQVE9QCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL2ludGVsX21pZF9iYXR0ZXJ5LmMgYi9kcml2ZXJzL3Bvd2VyL2ludGVsX21pZF9iYXR0ZXJ5LmMKaW5kZXggYmNlM2EwMS4uY2ZmY2I3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9pbnRlbF9taWRfYmF0dGVyeS5jCisrKyBiL2RyaXZlcnMvcG93ZXIvaW50ZWxfbWlkX2JhdHRlcnkuYwpAQCAtNTIyLDcgKzUyMiw3IEBACiAJaWYgKHJldHZhbCkgewogCQlkZXZfd2FybihwYmktPmRldiwgIiVzKCk6IGlwYyBwbWljIHJlYWQgZmFpbGVkXG4iLAogCQkJCQkJCQlfX2Z1bmNfXyk7Ci0JCXJldHVybiByZXR2YWw7OworCQlyZXR1cm4gcmV0dmFsOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODk5OC5jIGIvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODk5OC5jCmluZGV4IDQzNDEwMjYuLmY1N2U5YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL21heDg5OTguYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4OTk4LmMKQEAgLTQwNSw4ICs0MDUsOCBAQAogCXN3aXRjaCAoYnVjaykgewogCWNhc2UgTUFYODk5OF9CVUNLMToKIAkJZGV2X2RiZyhtYXg4OTk4LT5kZXYsCi0JCQkiQlVDSzEsIGk6JWQsIGJ1Y2sxX3ZvbDE6JWQsIGJ1Y2sxX3ZvbDI6JWRcblwKLQkJCSBidWNrMV92b2wzOiVkLCBidWNrMV92b2w0OiVkXG4iLAorCQkJIkJVQ0sxLCBpOiVkLCBidWNrMV92b2wxOiVkLCBidWNrMV92b2wyOiVkXG4iCisJCQkiYnVjazFfdm9sMzolZCwgYnVjazFfdm9sNDolZFxuIiwKIAkJCWksIG1heDg5OTgtPmJ1Y2sxX3ZvbFswXSwgbWF4ODk5OC0+YnVjazFfdm9sWzFdLAogCQkJbWF4ODk5OC0+YnVjazFfdm9sWzJdLCBtYXg4OTk4LT5idWNrMV92b2xbM10pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9tYzEzNzgzLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvbWMxMzc4My1yZWd1bGF0b3IuYwppbmRleCAyMzI0OWNiLi5iOGEwMGM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9tYzEzNzgzLXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL21jMTM3ODMtcmVndWxhdG9yLmMKQEAgLTM0MSw3ICszNDEsNyBAQAogCXN0cnVjdCBtYzEzNzgzX3JlZ3VsYXRvcl9pbml0X2RhdGEgKmluaXRfZGF0YTsKIAlpbnQgaSwgcmV0OwogCi0JZGV2X2RiZygmcGRldi0+ZGV2LCAibWMxMzc4M19yZWd1bGF0b3JfcHJvYmUgaWQgJWRcbiIsIHBkZXYtPmlkKTsKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICIlcyBpZCAlZFxuIiwgX19mdW5jX18sIHBkZXYtPmlkKTsKIAogCXByaXYgPSBremFsbG9jKHNpemVvZigqcHJpdikgKwogCQkJcGRhdGEtPm51bV9yZWd1bGF0b3JzICogc2l6ZW9mKHByaXYtPnJlZ3VsYXRvcnNbMF0pLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMgYi9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYwppbmRleCBkYThhYTc1Li5mMWZhMjQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYwpAQCAtODQ1LDEyICs4NDUsMTAgQEAKIHsKIAlzdHJ1Y3QgY2hiayAqIHBfY2g7CiAgICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICAqZGV2OwotICAgICAgICBzdHJ1Y3QgY2xhd19wcml2YmsgKiAgICAgICBwcml2cHRyOwogCiAJcF9jaCA9IChzdHJ1Y3QgY2hiayAqKSBkYXRhOwogICAgICAgICBkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilwX2NoLT5uZGV2OwogCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJJUlF0YXNrIik7Ci0JcHJpdnB0ciA9IChzdHJ1Y3QgY2xhd19wcml2YmsgKilkZXYtPm1sX3ByaXY7CiAgICAgICAgIHVucGFja19yZWFkKGRldik7CiAgICAgICAgIGNsZWFyX2JpdChDTEFXX0JIX0FDVElWRSwgKHZvaWQgKikmcF9jaC0+ZmxhZ19hKTsKIAlDTEFXX0RCRl9URVhUKDQsIHRyYWNlLCAiVHNrbGV0WHQiKTsKQEAgLTEwMjYsNyArMTAyNCw2IEBACiAgICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICAqZGV2OwogICAgICAgICBzdHJ1Y3QgY2xhd19wcml2YmsgKnByaXZwdHI9TlVMTDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqcGtfc2tiOwotCWludAlyYzsKIAogCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJjbGF3X3dydCIpOwogICAgICAgICBpZiAocF9jaC0+Y2xhd19zdGF0ZSA9PSBDTEFXX1NUT1ApCkBAIC0xMDM4LDcgKzEwMzUsNyBAQAogCSAgICAhc2tiX3F1ZXVlX2VtcHR5KCZwX2NoLT5jb2xsZWN0X3F1ZXVlKSkgewogCSAgCXBrX3NrYiA9IGNsYXdfcGFja19za2IocHJpdnB0cik7CiAJCXdoaWxlIChwa19za2IgIT0gTlVMTCkgewotCQkJcmMgPSBjbGF3X2h3X3R4KCBwa19za2IsIGRldiwxKTsKKwkJCWNsYXdfaHdfdHgocGtfc2tiLCBkZXYsIDEpOwogCQkJaWYgKHByaXZwdHItPndyaXRlX2ZyZWVfY291bnQgPiAwKSB7CiAJICAgCQkJcGtfc2tiID0gY2xhd19wYWNrX3NrYihwcml2cHRyKTsKIAkJCX0gZWxzZQpAQCAtMTMyMiwxNSArMTMxOSwxMiBAQAogICAgICAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICAgICAgICpwRGF0YUFkZHJlc3M7CiAgICAgICAgIHN0cnVjdCBlbmRjY3cgICAgICAgICAgICAgICAgICAgKnBFbmQ7CiAgICAgICAgIHN0cnVjdCBjY3cxICAgICAgICAgICAgICAgICAgICAgdGVtcENDVzsKLSAgICAgICAgc3RydWN0IGNoYmsgICAgICAgICAgICAgICAgICAgICAqcF9jaDsKIAlzdHJ1Y3QgY2xhd19lbnYJCQkqcF9lbnY7Ci0gICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jazsKIAlzdHJ1Y3QgY2xhd3BoCQkJKnBrX2hlYWQ7CiAJc3RydWN0IGNoYmsJCQkqY2g7CiAKIAlDTEFXX0RCRl9URVhUKDQsIHRyYWNlLCAiaHdfdHgiKTsKIAlwcml2cHRyID0gKHN0cnVjdCBjbGF3X3ByaXZiayAqKShkZXYtPm1sX3ByaXYpOwotCXBfY2ggPSAoc3RydWN0IGNoYmsgKikmcHJpdnB0ci0+Y2hhbm5lbFtXUklURV9DSEFOTkVMXTsKIAlwX2VudiA9cHJpdnB0ci0+cF9lbnY7CiAJY2xhd19mcmVlX3dydF9idWYoZGV2KTsJLyogQ2xlYW4gdXAgZnJlZSBjaGFpbiBpZiBwb3NpYmxlICovCiAgICAgICAgIC8qICBzY2FuIHRoZSB3cml0ZSBxdWV1ZSB0byBmcmVlIGFueSBjb21wbGV0ZWQgd3JpdGUgcGFja2V0cyAgICovCkBAIC0xNTExLDEyICsxNTA1LDYgQEAKIAogICAgICAgICB9IC8qIGVuZGlmIChwX2ZpcnN0X2NjdyE9TlVMTCkgICovCiAgICAgICAgIGRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JaWYgKGxpbmtpZD09MCkgewotICAgICAgICAJbG9jaz1MT0NLX05POwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgIHsKLSAgICAgICAgICAgICAgICBsb2NrPUxPQ0tfWUVTOwotICAgICAgICB9CiAgICAgICAgIGNsYXdfc3RydF9vdXRfSU8oZGV2ICk7CiAgICAgICAgIC8qICAgICAgaWYgd3JpdGUgZnJlZSBjb3VudCBpcyB6ZXJvICwgc2V0IE5PQlVGRkVSICAgICAgICovCiAJaWYgKHByaXZwdHItPndyaXRlX2ZyZWVfY291bnQ9PTApIHsKQEAgLTI4MjEsMTUgKzI4MDksMTEgQEAKIHsKIAogCXN0cnVjdCBjbGF3X3ByaXZiayAqcHJpdnB0ciA9IChzdHJ1Y3QgY2xhd19wcml2YmsgKilkZXYtPm1sX3ByaXY7Ci0gICAgICAgIHN0cnVjdCBjY3diaypwX2ZpcnN0X2NjdzsKLQlzdHJ1Y3QgY2N3YmsqcF9sYXN0X2NjdzsKIAlzdHJ1Y3QgY2N3YmsqcF90aGlzX2NjdzsKIAlzdHJ1Y3QgY2N3YmsqcF9uZXh0X2NjdzsKIAogCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJmcmVld3J0YiIpOwogICAgICAgICAvKiAgc2NhbiB0aGUgd3JpdGUgcXVldWUgdG8gZnJlZSBhbnkgY29tcGxldGVkIHdyaXRlIHBhY2tldHMgICAqLwotICAgICAgICBwX2ZpcnN0X2Njdz1OVUxMOwotICAgICAgICBwX2xhc3RfY2N3PU5VTEw7CiAgICAgICAgIHBfdGhpc19jY3c9cHJpdnB0ci0+cF93cml0ZV9hY3RpdmVfZmlyc3Q7CiAgICAgICAgIHdoaWxlICggKHBfdGhpc19jY3chPU5VTEwpICYmIChwX3RoaXNfY2N3LT5oZWFkZXIuZmxhZyE9Q0xBV19QRU5ESU5HKSkKICAgICAgICAgewpAQCAtMzA3Miw3ICszMDU2LDcgQEAKIHsKIAlzdHJ1Y3QgY2xhd19wcml2YmsgKnByaXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7Ci0JaW50CXJldDsKKwlpbnQgcmV0ID0gMDsKIAogCUNMQVdfREJGX1RFWFRfKDIsIHNldHVwLCAiJXMiLCBkZXZfbmFtZSgmY2dkZXYtPmRldikpOwogCXByaXYgPSBkZXZfZ2V0X2RydmRhdGEoJmNnZGV2LT5kZXYpOwpAQCAtMzA5NSw3ICszMDc5LDcgQEAKIAl9CiAJY2N3X2RldmljZV9zZXRfb2ZmbGluZShjZ2Rldi0+Y2RldlsxXSk7CiAJY2N3X2RldmljZV9zZXRfb2ZmbGluZShjZ2Rldi0+Y2RldlswXSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbWFpbi5jCmluZGV4IGMxODkyOTYuLjQyNjc4N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX21haW4uYwpAQCAtNjcyLDcgKzY3Miw2IEBACiAJaW50IGNjd19pZHg7CiAJdW5zaWduZWQgbG9uZyBoaTsKIAl1bnNpZ25lZCBsb25nIHNhdmVmbGFncyA9IDA7CS8qIGF2b2lkcyBjb21waWxlciB3YXJuaW5nICovCi0JX191MTYgYmxvY2tfbGVuOwogCiAJQ1RDTV9QUl9ERUJVRygiRW50ZXIgJXM6ICVzLCBjcD0laSBjaD0weCVwIGlkPSVzIHN0YXRlPSVzXG4iLAogCQkJX19mdW5jX18sIGRldi0+bmFtZSwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBjaCwKQEAgLTcxOSw3ICs3MTgsNiBAQAogCSAqLwogCWF0b21pY19pbmMoJnNrYi0+dXNlcnMpOwogCi0JYmxvY2tfbGVuID0gc2tiLT5sZW4gKyBUSF9IRUFERVJfTEVOR1RIICsgUERVX0hFQURFUl9MRU5HVEg7CiAJLyoKIAkgKiBJREFMIHN1cHBvcnQgaW4gQ1RDTSBpcyBicm9rZW4sIHNvIHdlIGhhdmUgdG8KIAkgKiBjYXJlIGFib3V0IHNrYidzIGFib3ZlIDJHIG91cnNlbHZlcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tcGMuYyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tcGMuYwppbmRleCBiNjQ4ODFmLi5kYTRjNzQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbXBjLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX21wYy5jCkBAIC02NTMsNyArNjUzLDYgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcmNoLT5uZXRkZXY7CiAJc3RydWN0IGN0Y21fcHJpdiAqcHJpdiA9IGRldi0+bWxfcHJpdjsKIAlzdHJ1Y3QgbXBjX2dyb3VwICpncnAgPSBwcml2LT5tcGNnOwotCWludCByYyA9IDA7CiAJc3RydWN0IHRoX3N3ZWVwICpoZWFkZXI7CiAJc3RydWN0IHNrX2J1ZmYgKnN3ZWVwX3NrYjsKIAlzdHJ1Y3QgY2hhbm5lbCAqY2ggID0gcHJpdi0+Y2hhbm5lbFtDVENNX1dSSVRFXTsKQEAgLTY2NSwxNiArNjY0LDE0IEBACiAJCUNUQ01fREJGX1RFWFRfKE1QQ19FUlJPUiwgQ1RDX0RCRl9FUlJPUiwKIAkJCSIlcyglcyk6IHN3ZWVwX3NrYiBhbGxvY2F0aW9uIEVSUk9SXG4iLAogCQkJQ1RDTV9GVU5UQUlMLCByY2gtPmlkKTsKLQkJcmMgPSAtRU5PTUVNOwotCQkJCWdvdG8gZG9uZTsKKwkJZ290byBkb25lOwogCX0KIAogCWhlYWRlciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0aF9zd2VlcCksIGdmcF90eXBlKCkpOwogCiAJaWYgKCFoZWFkZXIpIHsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc3dlZXBfc2tiKTsKLQkJcmMgPSAtRU5PTUVNOwotCQkJCWdvdG8gZG9uZTsKKwkJZ290byBkb25lOwogCX0KIAogCWhlYWRlci0+dGgudGhfc2VnCT0gMHgwMCA7CkBAIC0xMzcwLDggKzEzNjcsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICAqZGV2ID0gYXJnOwogCXN0cnVjdCBjdGNtX3ByaXYgICAgKnByaXY7CiAJc3RydWN0IG1wY19ncm91cCAqZ3JwOwotCWludCByYyA9IDA7Ci0Jc3RydWN0IGNoYW5uZWwgKndjaCwgKnJjaDsKKwlzdHJ1Y3QgY2hhbm5lbCAqd2NoOwogCiAJQlVHX09OKGRldiA9PSBOVUxMKTsKIAlDVENNX1BSX0RFQlVHKCJFbnRlciAlczogJXNcbiIsCV9fZnVuY19fLCBkZXYtPm5hbWUpOwpAQCAtMTM5Niw3ICsxMzkyLDYgQEAKIAkJZnNtX2RlbHRpbWVyKCZwcml2LT5yZXN0YXJ0X3RpbWVyKTsKIAogCXdjaCA9IHByaXYtPmNoYW5uZWxbQ1RDTV9XUklURV07Ci0JcmNoID0gcHJpdi0+Y2hhbm5lbFtDVENNX1JFQURdOwogCiAJc3dpdGNoIChncnAtPnNhdmVkX3N0YXRlKSB7CiAJY2FzZSBNUENHX1NUQVRFX1JFU0VUOgpAQCAtMTQzNSw3ICsxNDMwLDcgQEAKIAogCWlmIChncnAtPnNlbmRfcWxsY19kaXNjID09IDEpIHsKIAkJZ3JwLT5zZW5kX3FsbGNfZGlzYyA9IDA7Ci0JCXJjID0gbXBjX3NlbmRfcWxsY19kaXNjb250YWN0KGRldik7CisJCW1wY19zZW5kX3FsbGNfZGlzY29udGFjdChkZXYpOwogCX0KIAogCS8qIERPIE5PVCBpc3N1ZSBERVZfRVZFTlRfU1RPUCBkaXJlY3RseSBvdXQgb2YgdGhpcyBjb2RlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jIGIvZHJpdmVycy9zMzkwL25ldC9sY3MuYwppbmRleCA0OWQxY2ZjLi5jM2I4MDY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMKQEAgLTE0ODMsNyArMTQ4Myw2IEBACiAJc3RydWN0IGxjc19jaGFubmVsICpjaGFubmVsOwogCXN0cnVjdCBsY3NfYnVmZmVyICppb2I7CiAJaW50IGJ1Zl9pZHg7Ci0JaW50IHJjOwogCiAJY2hhbm5lbCA9IChzdHJ1Y3QgbGNzX2NoYW5uZWwgKikgZGF0YTsKIAlMQ1NfREJGX1RFWFRfKDUsIHRyYWNlLCAidGxldCVzIiwgZGV2X25hbWUoJmNoYW5uZWwtPmNjd2Rldi0+ZGV2KSk7CkBAIC0xNTAwLDE0ICsxNDk5LDExIEBACiAJY2hhbm5lbC0+YnVmX2lkeCA9IGJ1Zl9pZHg7CiAKIAlpZiAoY2hhbm5lbC0+c3RhdGUgPT0gTENTX0NIX1NUQVRFX1NUT1BQRUQpCi0JCS8vIEZJWE1FOiB3aGF0IGlmIHJjICE9IDAgPz8KLQkJcmMgPSBsY3Nfc3RhcnRfY2hhbm5lbChjaGFubmVsKTsKKwkJbGNzX3N0YXJ0X2NoYW5uZWwoY2hhbm5lbCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKGNoYW5uZWwtPmNjd2RldiksIGZsYWdzKTsKIAlpZiAoY2hhbm5lbC0+c3RhdGUgPT0gTENTX0NIX1NUQVRFX1NVU1BFTkRFRCAmJgotCSAgICBjaGFubmVsLT5pb2JbY2hhbm5lbC0+aW9faWR4XS5zdGF0ZSA9PSBMQ1NfQlVGX1NUQVRFX1JFQURZKSB7Ci0JCS8vIEZJWE1FOiB3aGF0IGlmIHJjICE9IDAgPz8KLQkJcmMgPSBfX2xjc19yZXN1bWVfY2hhbm5lbChjaGFubmVsKTsKLQl9CisJICAgIGNoYW5uZWwtPmlvYltjaGFubmVsLT5pb19pZHhdLnN0YXRlID09IExDU19CVUZfU1RBVEVfUkVBRFkpCisJCV9fbGNzX3Jlc3VtZV9jaGFubmVsKGNoYW5uZWwpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKGNoYW5uZWwtPmNjd2RldiksIGZsYWdzKTsKIAogCS8qIFNvbWV0aGluZyBoYXBwZW5lZCBvbiB0aGUgY2hhbm5lbC4gV2FrZSB1cCB3YWl0ZXJzLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9uZXRpdWN2LmMgYi9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYwppbmRleCBiNmE2MzU2Li4zMjUxMzMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYwpAQCAtMTk5NCw4ICsxOTk0LDYgQEAKIAkJCSAgIG5ldGl1Y3Zfc2V0dXBfbmV0ZGV2aWNlKTsKIAlpZiAoIWRldikKIAkJcmV0dXJuIE5VTEw7Ci0JaWYgKGRldl9hbGxvY19uYW1lKGRldiwgZGV2LT5uYW1lKSA8IDApCi0JCWdvdG8gb3V0X25ldGRldjsKIAogCXByaXZwdHIgPSBuZXRkZXZfcHJpdihkZXYpOwogCXByaXZwdHItPmZzbSA9IGluaXRfZnNtKCJuZXRpdWN2ZGV2IiwgZGV2X3N0YXRlX25hbWVzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaCBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmgKaW5kZXggYWYzZjdiMC4uNTVjNmFhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZS5oCkBAIC00MDcsMTIgKzQwNyw2IEBACiAJaW50IG5leHRfYnVmX3RvX2luaXQ7CiB9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDI1NikpKTsKIAotLyogcG9zc2libGUgdHlwZXMgb2YgcWV0aCBsYXJnZV9zZW5kIHN1cHBvcnQgKi8KLWVudW0gcWV0aF9sYXJnZV9zZW5kX3R5cGVzIHsKLQlRRVRIX0xBUkdFX1NFTkRfTk8sCi0JUUVUSF9MQVJHRV9TRU5EX1RTTywKLX07Ci0KIHN0cnVjdCBxZXRoX3FkaW9fb3V0X2J1ZmZlciB7CiAJc3RydWN0IHFkaW9fYnVmZmVyICpidWZmZXI7CiAJYXRvbWljX3Qgc3RhdGU7CkBAIC02MzcsNiArNjMxLDggQEAKIAlfX3UzMiBjc3VtX21hc2s7CiAJX191MzIgdHhfY3N1bV9tYXNrOwogCWVudW0gcWV0aF9pcGFfcHJvbWlzY19tb2RlcyBwcm9taXNjX21vZGU7CisJX191MzIgZGlhZ2Fzc19zdXBwb3J0OworCV9fdTMyIGh3dHJhcDsKIH07CiAKIHN0cnVjdCBxZXRoX2NhcmRfb3B0aW9ucyB7CkBAIC02NDUsMTMgKzY0MSwxMSBAQAogCXN0cnVjdCBxZXRoX2lwYV9pbmZvIGFkcDsgLypBZGFwdGVyIHBhcmFtZXRlcnMqLwogCXN0cnVjdCBxZXRoX3JvdXRpbmdfaW5mbyByb3V0ZTY7CiAJc3RydWN0IHFldGhfaXBhX2luZm8gaXBhNjsKLQllbnVtIHFldGhfY2hlY2tzdW1fdHlwZXMgY2hlY2tzdW1fdHlwZTsKIAlpbnQgYnJvYWRjYXN0X21vZGU7CiAJaW50IG1hY2FkZHJfbW9kZTsKIAlpbnQgZmFrZV9icm9hZGNhc3Q7CiAJaW50IGFkZF9oaGxlbjsKIAlpbnQgbGF5ZXIyOwotCWVudW0gcWV0aF9sYXJnZV9zZW5kX3R5cGVzIGxhcmdlX3NlbmQ7CiAJaW50IHBlcmZvcm1hbmNlX3N0YXRzOwogCWludCByeF9zZ19jYjsKIAllbnVtIHFldGhfaXBhX2lzb2xhdGlvbl9tb2RlcyBpc29sYXRpb247CkBAIC03NjAsNiArNzU0LDE0IEBACiAJcndsb2NrX3Qgcndsb2NrOwogfTsKIAorc3RydWN0IHFldGhfdHJhcF9pZCB7CisJX191MTYgbHBhcm5yOworCWNoYXIgdm1uYW1lWzhdOworCV9fdTggY2hwaWQ7CisJX191OCBzc2lkOworCV9fdTE2IGRldm5vOworfSBfX3BhY2tlZDsKKwogLypzb21lIGhlbHBlciBmdW5jdGlvbnMqLwogI2RlZmluZSBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpICgoKGNhcmQpLT5kZXYpPyAoY2FyZCktPmRldi0+bmFtZSA6ICIiKQogCkBAIC03OTQsNiArNzk2LDEyIEBACiAJbGlzdF9hZGRfdGFpbCgmZW50cnktPmxpc3QsICZjYXJkLT5xZGlvLmluX2J1Zl9wb29sLmVudHJ5X2xpc3QpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBxZXRoX2lzX2RpYWdhc3Nfc3VwcG9ydGVkKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCWVudW0gcWV0aF9kaWFnc19jbWRzIGNtZCkKK3sKKwlyZXR1cm4gY2FyZC0+aW5mby5kaWFnYXNzX3N1cHBvcnQgJiAoX191MzIpY21kOworfQorCiBleHRlcm4gc3RydWN0IGNjd2dyb3VwX2RyaXZlciBxZXRoX2wyX2Njd2dyb3VwX2RyaXZlcjsKIGV4dGVybiBzdHJ1Y3QgY2N3Z3JvdXBfZHJpdmVyIHFldGhfbDNfY2N3Z3JvdXBfZHJpdmVyOwogY29uc3QgY2hhciAqcWV0aF9nZXRfY2FyZG5hbWVfc2hvcnQoc3RydWN0IHFldGhfY2FyZCAqKTsKQEAgLTg3OSw2ICs4ODcsOCBAQAogaW50IHFldGhfY29yZV9ldGh0b29sX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZXRodG9vbF9jbWQgKik7CiBpbnQgcWV0aF9zZXRfYWNjZXNzX2N0cmxfb25saW5lKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpOwogaW50IHFldGhfaGRyX2Noa19hbmRfYm91bmNlKHN0cnVjdCBza19idWZmICosIGludCk7CitpbnQgcWV0aF9od190cmFwKHN0cnVjdCBxZXRoX2NhcmQgKiwgZW51bSBxZXRoX2RpYWdzX3RyYXBfYWN0aW9uKTsKK2ludCBxZXRoX3F1ZXJ5X2lwYXNzaXN0cyhzdHJ1Y3QgcWV0aF9jYXJkICosIGVudW0gcWV0aF9wcm90X3ZlcnNpb25zIHByb3QpOwogCiAvKiBleHBvcnRzIGZvciBPU04gKi8KIGludCBxZXRoX29zbl9hc3Npc3Qoc3RydWN0IG5ldF9kZXZpY2UgKiwgdm9pZCAqLCBpbnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCmluZGV4IDg1Y2M1MzEuLjUwMzY3OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgPGFzbS9lYmNkaWMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzaW5mby5oPgogCiAjaW5jbHVkZSAicWV0aF9jb3JlLmgiCiAKQEAgLTM0OSw2ICszNTAsOCBAQAogCQkJCQkgICBjYXJkLT5pbmZvLmNocGlkKTsKIAkJCQluZXRpZl9jYXJyaWVyX29uKGNhcmQtPmRldik7CiAJCQkJY2FyZC0+bGFuX29ubGluZSA9IDE7CisJCQkJaWYgKGNhcmQtPmluZm8uaHd0cmFwKQorCQkJCQljYXJkLT5pbmZvLmh3dHJhcCA9IDI7CiAJCQkJcWV0aF9zY2hlZHVsZV9yZWNvdmVyeShjYXJkKTsKIAkJCQlyZXR1cm4gTlVMTDsKIAkJCWNhc2UgSVBBX0NNRF9NT0RDQ0lEOgpAQCAtMTAzOSw3ICsxMDQyLDYgQEAKIHsKIAljYXJkLT5vcHRpb25zLnJvdXRlNC50eXBlID0gTk9fUk9VVEVSOwogCWNhcmQtPm9wdGlvbnMucm91dGU2LnR5cGUgPSBOT19ST1VURVI7Ci0JY2FyZC0+b3B0aW9ucy5jaGVja3N1bV90eXBlID0gUUVUSF9DSEVDS1NVTV9ERUZBVUxUOwogCWNhcmQtPm9wdGlvbnMuYnJvYWRjYXN0X21vZGUgPSBRRVRIX1RSX0JST0FEQ0FTVF9BTExSSU5HUzsKIAljYXJkLT5vcHRpb25zLm1hY2FkZHJfbW9kZSA9IFFFVEhfVFJfTUFDQUREUl9OT05DQU5PTklDQUw7CiAJY2FyZC0+b3B0aW9ucy5mYWtlX2Jyb2FkY2FzdCA9IDA7CkBAIC0yNTc0LDYgKzI1NzYsMTQyIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChxZXRoX3F1ZXJ5X3NldGFkYXB0ZXJwYXJtcyk7CiAKK3N0YXRpYyBpbnQgcWV0aF9xdWVyeV9pcGFzc2lzdHNfY2Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKwkJc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LCB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOworCisJUUVUSF9EQkZfVEVYVChTRVRVUCwgMiwgInFpcGFzc2NiIik7CisKKwljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKSBkYXRhOworCWlmIChjbWQtPmhkci5wcm90X3ZlcnNpb24gPT0gUUVUSF9QUk9UX0lQVjQpIHsKKwkJY2FyZC0+b3B0aW9ucy5pcGE0LnN1cHBvcnRlZF9mdW5jcyA9IGNtZC0+aGRyLmlwYV9zdXBwb3J0ZWQ7CisJCWNhcmQtPm9wdGlvbnMuaXBhNC5lbmFibGVkX2Z1bmNzID0gY21kLT5oZHIuaXBhX2VuYWJsZWQ7CisJfSBlbHNlIHsKKwkJY2FyZC0+b3B0aW9ucy5pcGE2LnN1cHBvcnRlZF9mdW5jcyA9IGNtZC0+aGRyLmlwYV9zdXBwb3J0ZWQ7CisJCWNhcmQtPm9wdGlvbnMuaXBhNi5lbmFibGVkX2Z1bmNzID0gY21kLT5oZHIuaXBhX2VuYWJsZWQ7CisJfQorCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJzdXBwZW5ibCIpOworCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiJXgiLCBjbWQtPmhkci5pcGFfc3VwcG9ydGVkKTsKKwlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIiV4IiwgY21kLT5oZHIuaXBhX2VuYWJsZWQpOworCXJldHVybiAwOworfQorCitpbnQgcWV0aF9xdWVyeV9pcGFzc2lzdHMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgZW51bSBxZXRoX3Byb3RfdmVyc2lvbnMgcHJvdCkKK3sKKwlpbnQgcmM7CisJc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOworCisJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICJxaXBhc3NpJWkiLCBwcm90KTsKKwlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIElQQV9DTURfUUlQQVNTSVNULCBwcm90KTsKKwlyYyA9IHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwgcWV0aF9xdWVyeV9pcGFzc2lzdHNfY2IsIE5VTEwpOworCXJldHVybiByYzsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHFldGhfcXVlcnlfaXBhc3Npc3RzKTsKKworc3RhdGljIGludCBxZXRoX3F1ZXJ5X3NldGRpYWdhc3NfY2Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKwkJc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LCB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOworCV9fdTE2IHJjOworCisJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKilkYXRhOworCXJjID0gY21kLT5oZHIucmV0dXJuX2NvZGU7CisJaWYgKHJjKQorCQlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgMiwgImRpYWdxOiV4IiwgcmMpOworCWVsc2UKKwkJY2FyZC0+aW5mby5kaWFnYXNzX3N1cHBvcnQgPSBjbWQtPmRhdGEuZGlhZ2Fzcy5leHQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9xdWVyeV9zZXRkaWFnYXNzKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOworCXN0cnVjdCBxZXRoX2lwYV9jbWQgICAgKmNtZDsKKworCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJxZGlhZ2FzcyIpOworCWlvYiA9IHFldGhfZ2V0X2lwYWNtZF9idWZmZXIoY2FyZCwgSVBBX0NNRF9TRVRfRElBR19BU1MsIDApOworCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKKwljbWQtPmRhdGEuZGlhZ2Fzcy5zdWJjbWRfbGVuID0gMTY7CisJY21kLT5kYXRhLmRpYWdhc3Muc3ViY21kID0gUUVUSF9ESUFHU19DTURfUVVFUlk7CisJcmV0dXJuIHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwgcWV0aF9xdWVyeV9zZXRkaWFnYXNzX2NiLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgcWV0aF9nZXRfdHJhcF9pZChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgcWV0aF90cmFwX2lkICp0aWQpCit7CisJdW5zaWduZWQgbG9uZyBpbmZvID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCXN0cnVjdCBzeXNpbmZvXzJfMl8yICppbmZvMjIyID0gKHN0cnVjdCBzeXNpbmZvXzJfMl8yICopaW5mbzsKKwlzdHJ1Y3Qgc3lzaW5mb18zXzJfMiAqaW5mbzMyMiA9IChzdHJ1Y3Qgc3lzaW5mb18zXzJfMiAqKWluZm87CisJc3RydWN0IGNjd19kZXZfaWQgY2N3aWQ7CisJaW50IGxldmVsLCByYzsKKworCXRpZC0+Y2hwaWQgPSBjYXJkLT5pbmZvLmNocGlkOworCWNjd19kZXZpY2VfZ2V0X2lkKENBUkRfUkRFVihjYXJkKSwgJmNjd2lkKTsKKwl0aWQtPnNzaWQgPSBjY3dpZC5zc2lkOworCXRpZC0+ZGV2bm8gPSBjY3dpZC5kZXZubzsKKwlpZiAoIWluZm8pCisJCXJldHVybjsKKworCXJjID0gc3RzaShOVUxMLCAwLCAwLCAwKTsKKwlpZiAocmMgPT0gLUVOT1NZUykKKwkJbGV2ZWwgPSByYzsKKwllbHNlCisJCWxldmVsID0gKCgodW5zaWduZWQgaW50KSByYykgPj4gMjgpOworCisJaWYgKChsZXZlbCA+PSAyKSAmJiAoc3RzaShpbmZvMjIyLCAyLCAyLCAyKSAhPSAtRU5PU1lTKSkKKwkJdGlkLT5scGFybnIgPSBpbmZvMjIyLT5scGFyX251bWJlcjsKKworCWlmICgobGV2ZWwgPj0gMykgJiYgKHN0c2koaW5mbzMyMiwgMywgMiwgMikgIT0gLUVOT1NZUykpIHsKKwkJRUJDQVNDKGluZm8zMjItPnZtWzBdLm5hbWUsIHNpemVvZihpbmZvMzIyLT52bVswXS5uYW1lKSk7CisJCW1lbWNweSh0aWQtPnZtbmFtZSwgaW5mbzMyMi0+dm1bMF0ubmFtZSwgc2l6ZW9mKHRpZC0+dm1uYW1lKSk7CisJfQorCWZyZWVfcGFnZShpbmZvKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgcWV0aF9od190cmFwX2NiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCXN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSwgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKKwlfX3UxNiByYzsKKworCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopZGF0YTsKKwlyYyA9IGNtZC0+aGRyLnJldHVybl9jb2RlOworCWlmIChyYykKKwkJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDIsICJ0cmFwYzoleCIsIHJjKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHFldGhfaHdfdHJhcChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBlbnVtIHFldGhfZGlhZ3NfdHJhcF9hY3Rpb24gYWN0aW9uKQoreworCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKKwlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7CisKKwlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAiZGlhZ3RyYXAiKTsKKwlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIElQQV9DTURfU0VUX0RJQUdfQVNTLCAwKTsKKwljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CisJY21kLT5kYXRhLmRpYWdhc3Muc3ViY21kX2xlbiA9IDgwOworCWNtZC0+ZGF0YS5kaWFnYXNzLnN1YmNtZCA9IFFFVEhfRElBR1NfQ01EX1RSQVA7CisJY21kLT5kYXRhLmRpYWdhc3MudHlwZSA9IDE7CisJY21kLT5kYXRhLmRpYWdhc3MuYWN0aW9uID0gYWN0aW9uOworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBRRVRIX0RJQUdTX1RSQVBfQVJNOgorCQljbWQtPmRhdGEuZGlhZ2Fzcy5vcHRpb25zID0gMHgwMDAzOworCQljbWQtPmRhdGEuZGlhZ2Fzcy5leHQgPSAweDAwMDEwMDAwICsKKwkJCXNpemVvZihzdHJ1Y3QgcWV0aF90cmFwX2lkKTsKKwkJcWV0aF9nZXRfdHJhcF9pZChjYXJkLAorCQkJKHN0cnVjdCBxZXRoX3RyYXBfaWQgKiljbWQtPmRhdGEuZGlhZ2Fzcy5jZGF0YSk7CisJCWJyZWFrOworCWNhc2UgUUVUSF9ESUFHU19UUkFQX0RJU0FSTToKKwkJY21kLT5kYXRhLmRpYWdhc3Mub3B0aW9ucyA9IDB4MDAwMTsKKwkJYnJlYWs7CisJY2FzZSBRRVRIX0RJQUdTX1RSQVBfQ0FQVFVSRToKKwkJYnJlYWs7CisJfQorCXJldHVybiBxZXRoX3NlbmRfaXBhX2NtZChjYXJkLCBpb2IsIHFldGhfaHdfdHJhcF9jYiwgTlVMTCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChxZXRoX2h3X3RyYXApOworCiBpbnQgcWV0aF9jaGVja19xZGlvX2Vycm9ycyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgcWRpb19idWZmZXIgKmJ1ZiwKIAkJdW5zaWduZWQgaW50IHFkaW9fZXJyb3IsIGNvbnN0IGNoYXIgKmRiZnRleHQpCiB7CkBAIC0zOTAzLDYgKzQwNDEsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNjd19kcml2ZXIgcWV0aF9jY3dfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CisJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCQkubmFtZSA9ICJxZXRoIiwKIAl9LAogCS5pZHMgPSBxZXRoX2lkcywKQEAgLTM5ODQsNiArNDEyMywxNSBAQAogCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjVlcnIlZCIsIHJjKTsKIAkJZ290byBvdXQ7CiAJfQorCisJY2FyZC0+b3B0aW9ucy5pcGE0LnN1cHBvcnRlZF9mdW5jcyA9IDA7CisJY2FyZC0+b3B0aW9ucy5hZHAuc3VwcG9ydGVkX2Z1bmNzID0gMDsKKwljYXJkLT5pbmZvLmRpYWdhc3Nfc3VwcG9ydCA9IDA7CisJcWV0aF9xdWVyeV9pcGFzc2lzdHMoY2FyZCwgUUVUSF9QUk9UX0lQVjQpOworCWlmIChxZXRoX2lzX3N1cHBvcnRlZChjYXJkLCBJUEFfU0VUQURBUFRFUlBBUk1TKSkKKwkJcWV0aF9xdWVyeV9zZXRhZGFwdGVycGFybXMoY2FyZCk7CisJaWYgKHFldGhfYWRwX3N1cHBvcnRlZChjYXJkLCBJUEFfU0VUQURQX1NFVF9ESUFHX0FTU0lTVCkpCisJCXFldGhfcXVlcnlfc2V0ZGlhZ2FzcyhjYXJkKTsKIAlyZXR1cm4gMDsKIG91dDoKIAlkZXZfd2FybigmY2FyZC0+Z2Rldi0+ZGV2LCAiVGhlIHFldGggZGV2aWNlIGRyaXZlciBmYWlsZWQgdG8gcmVjb3ZlciAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tcGMuaCBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21wYy5oCmluZGV4IDA3ZDU4ODguLmU1YTlkMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21wYy5oCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21wYy5oCkBAIC04MCwxNCArODAsNiBAQAogCVFFVEhfVFJfQlJPQURDQVNUX0xPQ0FMICAgID0gMSwKIH07CiAKLS8qIHRoZXNlIHZhbHVlcyBtYXRjaCBDSEVDS1NVTV8qIGluIGluY2x1ZGUvbGludXgvc2tidWZmLmggKi8KLWVudW0gcWV0aF9jaGVja3N1bV90eXBlcyB7Ci0JU1dfQ0hFQ0tTVU1NSU5HID0gMCwgLyogVE9ETzogc2V0IHRvIGJpdCBmbGFnIHVzZWQgaW4gSVBBIENvbW1hbmQgKi8KLQlIV19DSEVDS1NVTU1JTkcgPSAxLAotCU5PX0NIRUNLU1VNTUlORyA9IDIsCi19OwotI2RlZmluZSBRRVRIX0NIRUNLU1VNX0RFRkFVTFQgU1dfQ0hFQ0tTVU1NSU5HCi0KIC8qCiAgKiBSb3V0aW5nIHN0dWZmCiAgKi8KQEAgLTQ1Niw2ICs0NDgsMTIgQEAKIAlRRVRIX0RJQUdTX0NNRF9UUkFDRV9RVUVSWQk9IDB4MDAxMCwKIH07CiAKK2VudW0gcWV0aF9kaWFnc190cmFwX2FjdGlvbiB7CisJUUVUSF9ESUFHU19UUkFQX0FSTQk9IDB4MDEsCisJUUVUSF9ESUFHU19UUkFQX0RJU0FSTQk9IDB4MDIsCisJUUVUSF9ESUFHU19UUkFQX0NBUFRVUkUgPSAweDA0LAorfTsKKwogc3RydWN0IHFldGhfaXBhY21kX2RpYWdhc3MgewogCV9fdTMyICBob3N0X3RvZDI7CiAJX191MzI6MzI7CkBAIC00NjUsNyArNDYzLDggQEAKIAlfX3U4ICAgdHlwZTsKIAlfX3U4ICAgYWN0aW9uOwogCV9fdTE2ICBvcHRpb25zOwotCV9fdTMyOjMyOworCV9fdTMyICBleHQ7CisJX191OCAgIGNkYXRhWzY0XTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBIZWFkZXIgZm9yIGVhY2ggSVBBIGNvbW1hbmQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX3N5cy5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfc3lzLmMKaW5kZXggYjVlOTY3Yy4uMGE4ZTg2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfc3lzLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfc3lzLmMKQEAgLTUzMCw2ICs1MzAsNjYgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihpc29sYXRpb24sIDA2NDQsIHFldGhfZGV2X2lzb2xhdGlvbl9zaG93LAogCQkgICBxZXRoX2Rldl9pc29sYXRpb25fc3RvcmUpOwogCitzdGF0aWMgc3NpemVfdCBxZXRoX2h3X3RyYXBfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoIWNhcmQpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjYXJkLT5pbmZvLmh3dHJhcCkKKwkJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgNSwgImFybVxuIik7CisJZWxzZQorCQlyZXR1cm4gc25wcmludGYoYnVmLCA4LCAiZGlzYXJtXG4iKTsKK30KKworc3RhdGljIHNzaXplX3QgcWV0aF9od190cmFwX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmMgPSAwOworCWNoYXIgKnRtcCwgKmN1cnRva2VuOworCWludCBzdGF0ZSA9IDA7CisJY3VydG9rZW4gPSAoY2hhciAqKWJ1ZjsKKworCWlmICghY2FyZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZjYXJkLT5jb25mX211dGV4KTsKKwlpZiAoY2FyZC0+c3RhdGUgPT0gQ0FSRF9TVEFURV9TT0ZUU0VUVVAgfHwgY2FyZC0+c3RhdGUgPT0gQ0FSRF9TVEFURV9VUCkKKwkJc3RhdGUgPSAxOworCXRtcCA9IHN0cnNlcCgmY3VydG9rZW4sICJcbiIpOworCisJaWYgKCFzdHJjbXAodG1wLCAiYXJtIikgJiYgIWNhcmQtPmluZm8uaHd0cmFwKSB7CisJCWlmIChzdGF0ZSkgeworCQkJaWYgKHFldGhfaXNfZGlhZ2Fzc19zdXBwb3J0ZWQoY2FyZCwKKwkJCSAgICBRRVRIX0RJQUdTX0NNRF9UUkFQKSkgeworCQkJCXJjID0gcWV0aF9od190cmFwKGNhcmQsIFFFVEhfRElBR1NfVFJBUF9BUk0pOworCQkJCWlmICghcmMpCisJCQkJCWNhcmQtPmluZm8uaHd0cmFwID0gMTsKKwkJCX0gZWxzZQorCQkJCXJjID0gLUVJTlZBTDsKKwkJfSBlbHNlCisJCQljYXJkLT5pbmZvLmh3dHJhcCA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKHRtcCwgImRpc2FybSIpICYmIGNhcmQtPmluZm8uaHd0cmFwKSB7CisJCWlmIChzdGF0ZSkgeworCQkJcmMgPSBxZXRoX2h3X3RyYXAoY2FyZCwgUUVUSF9ESUFHU19UUkFQX0RJU0FSTSk7CisJCQlpZiAoIXJjKQorCQkJCWNhcmQtPmluZm8uaHd0cmFwID0gMDsKKwkJfSBlbHNlCisJCQljYXJkLT5pbmZvLmh3dHJhcCA9IDA7CisJfSBlbHNlIGlmICghc3RyY21wKHRtcCwgInRyYXAiKSAmJiBzdGF0ZSAmJiBjYXJkLT5pbmZvLmh3dHJhcCkKKwkJcmMgPSBxZXRoX2h3X3RyYXAoY2FyZCwgUUVUSF9ESUFHU19UUkFQX0NBUFRVUkUpOworCWVsc2UKKwkJcmMgPSAtRUlOVkFMOworCisJbXV0ZXhfdW5sb2NrKCZjYXJkLT5jb25mX211dGV4KTsKKwlyZXR1cm4gcmMgPyByYyA6IGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoaHdfdHJhcCwgMDY0NCwgcWV0aF9od190cmFwX3Nob3csCisJCSAgIHFldGhfaHdfdHJhcF9zdG9yZSk7CisKIHN0YXRpYyBzc2l6ZV90IHFldGhfZGV2X2Jsa3Rfc2hvdyhjaGFyICpidWYsIHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGludCB2YWx1ZSkKIHsKIApAQCAtNjUzLDYgKzcxMyw3IEBACiAJJmRldl9hdHRyX3BlcmZvcm1hbmNlX3N0YXRzLmF0dHIsCiAJJmRldl9hdHRyX2xheWVyMi5hdHRyLAogCSZkZXZfYXR0cl9pc29sYXRpb24uYXR0ciwKKwkmZGV2X2F0dHJfaHdfdHJhcC5hdHRyLAogCU5VTEwsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYwppbmRleCA2ZmJhYWNiLi5iNzBiNDdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMKQEAgLTQyMCwxMCArNDIwLDcgQEAKIAkJY2FzZSBRRVRIX0hFQURFUl9UWVBFX0xBWUVSMjoKIAkJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKIAkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHNrYi0+ZGV2KTsKLQkJCWlmIChjYXJkLT5vcHRpb25zLmNoZWNrc3VtX3R5cGUgPT0gTk9fQ0hFQ0tTVU1NSU5HKQotCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7Ci0JCQllbHNlCi0JCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCQkJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfODAyXzIpKQogCQkJCSooKF9fdTMyICopc2tiLT5jYikgPSArK2NhcmQtPnNlcW5vLnBrdF9zZXFubzsKIAkJCWxlbiA9IHNrYi0+bGVuOwpAQCAtODc5LDYgKzg3Niw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPnZpZF9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmY2FyZC0+bWNfbGlzdCk7CiAJY2FyZC0+b3B0aW9ucy5sYXllcjIgPSAxOworCWNhcmQtPmluZm8uaHd0cmFwID0gMDsKIAljYXJkLT5kaXNjaXBsaW5lLnN0YXJ0X3BvbGwgPSBxZXRoX3FkaW9fc3RhcnRfcG9sbDsKIAljYXJkLT5kaXNjaXBsaW5lLmlucHV0X2hhbmRsZXIgPSAocWRpb19oYW5kbGVyX3QgKikKIAkJcWV0aF9xZGlvX2lucHV0X2hhbmRsZXI7CkBAIC05OTcsNiArOTk1LDEzIEBACiAJaWYgKGNhcmQtPmluZm8udHlwZSAhPSBRRVRIX0NBUkRfVFlQRV9PU04pCiAJCXFldGhfbDJfc2VuZF9zZXRtYWMoY2FyZCwgJmNhcmQtPmRldi0+ZGV2X2FkZHJbMF0pOwogCisJaWYgKHFldGhfaXNfZGlhZ2Fzc19zdXBwb3J0ZWQoY2FyZCwgUUVUSF9ESUFHU19DTURfVFJBUCkpIHsKKwkJaWYgKGNhcmQtPmluZm8uaHd0cmFwICYmCisJCSAgICBxZXRoX2h3X3RyYXAoY2FyZCwgUUVUSF9ESUFHU19UUkFQX0FSTSkpCisJCQljYXJkLT5pbmZvLmh3dHJhcCA9IDA7CisJfSBlbHNlCisJCWNhcmQtPmluZm8uaHd0cmFwID0gMDsKKwogCWNhcmQtPnN0YXRlID0gQ0FSRF9TVEFURV9IQVJEU0VUVVA7CiAJbWVtc2V0KCZjYXJkLT5yeCwgMCwgc2l6ZW9mKHN0cnVjdCBxZXRoX3J4KSk7CiAJcWV0aF9wcmludF9zdGF0dXNfbWVzc2FnZShjYXJkKTsKQEAgLTEwOTUsNiArMTEwMCwxMCBAQAogCWlmIChjYXJkLT5kZXYgJiYgbmV0aWZfY2Fycmllcl9vayhjYXJkLT5kZXYpKQogCQluZXRpZl9jYXJyaWVyX29mZihjYXJkLT5kZXYpOwogCXJlY292ZXJfZmxhZyA9IGNhcmQtPnN0YXRlOworCWlmICgoIXJlY292ZXJ5X21vZGUgJiYgY2FyZC0+aW5mby5od3RyYXApIHx8IGNhcmQtPmluZm8uaHd0cmFwID09IDIpIHsKKwkJcWV0aF9od190cmFwKGNhcmQsIFFFVEhfRElBR1NfVFJBUF9ESVNBUk0pOworCQljYXJkLT5pbmZvLmh3dHJhcCA9IDE7CisJfQogCXFldGhfbDJfc3RvcF9jYXJkKGNhcmQsIHJlY292ZXJ5X21vZGUpOwogCXJjICA9IGNjd19kZXZpY2Vfc2V0X29mZmxpbmUoQ0FSRF9EREVWKGNhcmQpKTsKIAlyYzIgPSBjY3dfZGV2aWNlX3NldF9vZmZsaW5lKENBUkRfV0RFVihjYXJkKSk7CkBAIC0xMTYwLDYgKzExNjksOCBAQAogc3RhdGljIHZvaWQgcWV0aF9sMl9zaHV0ZG93bihzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpnZGV2KQogewogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoJmdkZXYtPmRldik7CisJaWYgKChnZGV2LT5zdGF0ZSA9PSBDQ1dHUk9VUF9PTkxJTkUpICYmIGNhcmQtPmluZm8uaHd0cmFwKQorCQlxZXRoX2h3X3RyYXAoY2FyZCwgUUVUSF9ESUFHU19UUkFQX0RJU0FSTSk7CiAJcWV0aF9xZGlvX2NsZWFyX2NhcmQoY2FyZCwgMCk7CiAJcWV0aF9jbGVhcl9xZGlvX2J1ZmZlcnMoY2FyZCk7CiB9CkBAIC0xMTc1LDYgKzExODYsOCBAQAogCWlmIChnZGV2LT5zdGF0ZSA9PSBDQ1dHUk9VUF9PRkZMSU5FKQogCQlyZXR1cm4gMDsKIAlpZiAoY2FyZC0+c3RhdGUgPT0gQ0FSRF9TVEFURV9VUCkgeworCQlpZiAoY2FyZC0+aW5mby5od3RyYXApCisJCQlxZXRoX2h3X3RyYXAoY2FyZCwgUUVUSF9ESUFHU19UUkFQX0RJU0FSTSk7CiAJCV9fcWV0aF9sMl9zZXRfb2ZmbGluZShjYXJkLT5nZGV2LCAxKTsKIAl9IGVsc2UKIAkJX19xZXRoX2wyX3NldF9vZmZsaW5lKGNhcmQtPmdkZXYsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzLmggYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDMuaAppbmRleCBlNzA1YjI3Li4xNGE0M2FlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDMuaAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDMuaApAQCAtNjIsOCArNjIsNiBAQAogaW50IHFldGhfbDNfYWRkX3J4aXAoc3RydWN0IHFldGhfY2FyZCAqLCBlbnVtIHFldGhfcHJvdF92ZXJzaW9ucywgY29uc3QgdTggKik7CiB2b2lkIHFldGhfbDNfZGVsX3J4aXAoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgZW51bSBxZXRoX3Byb3RfdmVyc2lvbnMsCiAJCQljb25zdCB1OCAqKTsKLWludCBxZXRoX2wzX3NldF9sYXJnZV9zZW5kKHN0cnVjdCBxZXRoX2NhcmQgKiwgZW51bSBxZXRoX2xhcmdlX3NlbmRfdHlwZXMpOwotaW50IHFldGhfbDNfc2V0X3J4X2NzdW0oc3RydWN0IHFldGhfY2FyZCAqLCBlbnVtIHFldGhfY2hlY2tzdW1fdHlwZXMpOwogaW50IHFldGhfbDNfaXNfYWRkcl9jb3ZlcmVkX2J5X2lwYXRvKHN0cnVjdCBxZXRoX2NhcmQgKiwgc3RydWN0IHFldGhfaXBhZGRyICopOwogCiAjZW5kaWYgLyogX19RRVRIX0wzX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMKaW5kZXggMTQyZTVmNi4uZmQ2OWRhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfbWFpbi5jCkBAIC00MywzMyArNDMsNiBAQAogc3RhdGljIGludCBfX3FldGhfbDNfc2V0X29ubGluZShzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICosIGludCk7CiBzdGF0aWMgaW50IF9fcWV0aF9sM19zZXRfb2ZmbGluZShzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICosIGludCk7CiAKLWludCBxZXRoX2wzX3NldF9sYXJnZV9zZW5kKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCi0JCWVudW0gcWV0aF9sYXJnZV9zZW5kX3R5cGVzIHR5cGUpCi17Ci0JaW50IHJjID0gMDsKLQotCWNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCA9IHR5cGU7Ci0JaWYgKGNhcmQtPmRldiA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQotCWlmIChjYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQgPT0gUUVUSF9MQVJHRV9TRU5EX1RTTykgewotCQlpZiAocWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX09VVEJPVU5EX1RTTykpIHsKLQkJCWNhcmQtPmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU08gfCBORVRJRl9GX1NHIHwKLQkJCQkJTkVUSUZfRl9JUF9DU1VNOwotCQl9IGVsc2UgewotCQkJY2FyZC0+ZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9TRyB8Ci0JCQkJCU5FVElGX0ZfSVBfQ1NVTSk7Ci0JCQljYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQgPSBRRVRIX0xBUkdFX1NFTkRfTk87Ci0JCQlyYyA9IC1FT1BOT1RTVVBQOwotCQl9Ci0JfSBlbHNlIHsKLQkJY2FyZC0+ZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9TRyB8Ci0JCQkJCU5FVElGX0ZfSVBfQ1NVTSk7Ci0JCWNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCA9IFFFVEhfTEFSR0VfU0VORF9OTzsKLQl9Ci0JcmV0dXJuIHJjOwotfQotCiBzdGF0aWMgaW50IHFldGhfbDNfaXN4ZGlnaXQoY2hhciAqYnVmKQogewogCXdoaWxlICgqYnVmKSB7CkBAIC0xMzA0LDM5ICsxMjc3LDYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgcWV0aF9sM19xdWVyeV9pcGFzc2lzdHNfY2Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKLQkJc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LCB1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOwotCi0JUUVUSF9EQkZfVEVYVChTRVRVUCwgMiwgInFpcGFzc2NiIik7Ci0KLQljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKSBkYXRhOwotCWlmIChjbWQtPmhkci5wcm90X3ZlcnNpb24gPT0gUUVUSF9QUk9UX0lQVjQpIHsKLQkJY2FyZC0+b3B0aW9ucy5pcGE0LnN1cHBvcnRlZF9mdW5jcyA9IGNtZC0+aGRyLmlwYV9zdXBwb3J0ZWQ7Ci0JCWNhcmQtPm9wdGlvbnMuaXBhNC5lbmFibGVkX2Z1bmNzID0gY21kLT5oZHIuaXBhX2VuYWJsZWQ7Ci0JfSBlbHNlIHsKLQkJY2FyZC0+b3B0aW9ucy5pcGE2LnN1cHBvcnRlZF9mdW5jcyA9IGNtZC0+aGRyLmlwYV9zdXBwb3J0ZWQ7Ci0JCWNhcmQtPm9wdGlvbnMuaXBhNi5lbmFibGVkX2Z1bmNzID0gY21kLT5oZHIuaXBhX2VuYWJsZWQ7Ci0JfQotCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJzdXBwZW5ibCIpOwotCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiJXgiLCBjbWQtPmhkci5pcGFfc3VwcG9ydGVkKTsKLQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIiV4IiwgY21kLT5oZHIuaXBhX2VuYWJsZWQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHFldGhfbDNfcXVlcnlfaXBhc3Npc3RzKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCi0JCQkJZW51bSBxZXRoX3Byb3RfdmVyc2lvbnMgcHJvdCkKLXsKLQlpbnQgcmM7Ci0Jc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOwotCi0JUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICJxaXBhc3NpJWkiLCBwcm90KTsKLQlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIElQQV9DTURfUUlQQVNTSVNULCBwcm90KTsKLQlyYyA9IHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwgcWV0aF9sM19xdWVyeV9pcGFzc2lzdHNfY2IsIE5VTEwpOwotCXJldHVybiByYzsKLX0KLQogI2lmZGVmIENPTkZJR19RRVRIX0lQVjYKIHN0YXRpYyBpbnQgcWV0aF9sM19zb2Z0c2V0dXBfaXB2NihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQogewpAQCAtMTM0Nyw3ICsxMjg3LDcgQEAKIAlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkKIAkJZ290byBvdXQ7CiAKLQlyYyA9IHFldGhfbDNfcXVlcnlfaXBhc3Npc3RzKGNhcmQsIFFFVEhfUFJPVF9JUFY2KTsKKwlyYyA9IHFldGhfcXVlcnlfaXBhc3Npc3RzKGNhcmQsIFFFVEhfUFJPVF9JUFY2KTsKIAlpZiAocmMpIHsKIAkJZGV2X2VycigmY2FyZC0+Z2Rldi0+ZGV2LAogCQkJIkFjdGl2YXRpbmcgSVB2NiBzdXBwb3J0IGZvciAlcyBmYWlsZWRcbiIsCkBAIC0xNDcyLDY4ICsxNDEyLDM4IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBxZXRoX2wzX3NldF9yeF9jc3VtKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCi0JZW51bSBxZXRoX2NoZWNrc3VtX3R5cGVzIGNzdW1fdHlwZSkKK2ludCBxZXRoX2wzX3NldF9yeF9jc3VtKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGludCBvbikKIHsKIAlpbnQgcmMgPSAwOwogCi0JaWYgKGNhcmQtPm9wdGlvbnMuY2hlY2tzdW1fdHlwZSA9PSBIV19DSEVDS1NVTU1JTkcpIHsKLQkJaWYgKChjc3VtX3R5cGUgIT0gSFdfQ0hFQ0tTVU1NSU5HKSAmJgotCQkJKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfRE9XTikpIHsKLQkJCXJjID0gcWV0aF9sM19zZW5kX3NpbXBsZV9zZXRhc3NwYXJtcyhjYXJkLAotCQkJCUlQQV9JTkJPVU5EX0NIRUNLU1VNLCBJUEFfQ01EX0FTU19TVE9QLCAwKTsKLQkJCWlmIChyYykKLQkJCQlyZXR1cm4gLUVJTzsKLQkJfQorCWlmIChvbikgeworCQlyYyA9IHFldGhfbDNfc2VuZF9jaGVja3N1bV9jb21tYW5kKGNhcmQpOworCQlpZiAocmMpCisJCQlyZXR1cm4gLUVJTzsKKwkJZGV2X2luZm8oJmNhcmQtPmdkZXYtPmRldiwKKwkJCSJIVyBDaGVja3N1bW1pbmcgKGluYm91bmQpIGVuYWJsZWRcbiIpOwogCX0gZWxzZSB7Ci0JCWlmIChjc3VtX3R5cGUgPT0gSFdfQ0hFQ0tTVU1NSU5HKSB7Ci0JCQlpZiAoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9ET1dOKSB7Ci0JCQkJaWYgKCFxZXRoX2lzX3N1cHBvcnRlZChjYXJkLAotCQkJCSAgICBJUEFfSU5CT1VORF9DSEVDS1NVTSkpCi0JCQkJCXJldHVybiAtRVBFUk07Ci0JCQkJcmMgPSBxZXRoX2wzX3NlbmRfY2hlY2tzdW1fY29tbWFuZChjYXJkKTsKLQkJCQlpZiAocmMpCi0JCQkJCXJldHVybiAtRUlPOwotCQkJfQotCQl9CisJCXJjID0gcWV0aF9sM19zZW5kX3NpbXBsZV9zZXRhc3NwYXJtcyhjYXJkLAorCQkJSVBBX0lOQk9VTkRfQ0hFQ0tTVU0sIElQQV9DTURfQVNTX1NUT1AsIDApOworCQlpZiAocmMpCisJCQlyZXR1cm4gLUVJTzsKIAl9Ci0JY2FyZC0+b3B0aW9ucy5jaGVja3N1bV90eXBlID0gY3N1bV90eXBlOwotCXJldHVybiByYzsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHFldGhfbDNfc3RhcnRfaXBhX2NoZWNrc3VtKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCiB7Ci0JaW50IHJjID0gMDsKLQogCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDMsICJzdHJ0Y3N1bSIpOwogCi0JaWYgKGNhcmQtPm9wdGlvbnMuY2hlY2tzdW1fdHlwZSA9PSBOT19DSEVDS1NVTU1JTkcpIHsKLQkJZGV2X2luZm8oJmNhcmQtPmdkZXYtPmRldiwKLQkJCSJVc2luZyBubyBjaGVja3N1bW1pbmcgb24gJXMuXG4iLAotCQkJUUVUSF9DQVJEX0lGTkFNRShjYXJkKSk7Ci0JCXJldHVybiAwOworCWlmIChjYXJkLT5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pIHsKKwkJcnRubF9sb2NrKCk7CisJCS8qIGZvcmNlIHNldF9mZWF0dXJlcyBjYWxsICovCisJCWNhcmQtPmRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfUlhDU1VNOworCQluZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGNhcmQtPmRldik7CisJCXJ0bmxfdW5sb2NrKCk7CiAJfQotCWlmIChjYXJkLT5vcHRpb25zLmNoZWNrc3VtX3R5cGUgPT0gU1dfQ0hFQ0tTVU1NSU5HKSB7Ci0JCWRldl9pbmZvKCZjYXJkLT5nZGV2LT5kZXYsCi0JCQkiVXNpbmcgU1cgY2hlY2tzdW1taW5nIG9uICVzLlxuIiwKLQkJCVFFVEhfQ0FSRF9JRk5BTUUoY2FyZCkpOwotCQlyZXR1cm4gMDsKLQl9Ci0JaWYgKCFxZXRoX2lzX3N1cHBvcnRlZChjYXJkLCBJUEFfSU5CT1VORF9DSEVDS1NVTSkpIHsKLQkJZGV2X2luZm8oJmNhcmQtPmdkZXYtPmRldiwKLQkJCSJJbmJvdW5kIEhXIENoZWNrc3VtbWluZyBub3QgIgotCQkJInN1cHBvcnRlZCBvbiAlcyxcbmNvbnRpbnVpbmcgIgotCQkJInVzaW5nIEluYm91bmQgU1cgQ2hlY2tzdW1taW5nXG4iLAotCQkJUUVUSF9DQVJEX0lGTkFNRShjYXJkKSk7Ci0JCWNhcmQtPm9wdGlvbnMuY2hlY2tzdW1fdHlwZSA9IFNXX0NIRUNLU1VNTUlORzsKLQkJcmV0dXJuIDA7Ci0JfQotCXJjID0gcWV0aF9sM19zZW5kX2NoZWNrc3VtX2NvbW1hbmQoY2FyZCk7Ci0JaWYgKCFyYykKLQkJZGV2X2luZm8oJmNhcmQtPmdkZXYtPmRldiwKLQkJCSJIVyBDaGVja3N1bW1pbmcgKGluYm91bmQpIGVuYWJsZWRcbiIpOwotCi0JcmV0dXJuIHJjOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHFldGhfbDNfc3RhcnRfaXBhX3R4X2NoZWNrc3VtKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCkBAIC0xNTgwLDEwICsxNDkwLDggQEAKIAkJCWRldl9pbmZvKCZjYXJkLT5nZGV2LT5kZXYsCiAJCQkJIk91dGJvdW5kIFRTTyBlbmFibGVkXG4iKTsKIAl9Ci0JaWYgKHJjICYmIChjYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQgPT0gUUVUSF9MQVJHRV9TRU5EX1RTTykpIHsKLQkJY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID0gUUVUSF9MQVJHRV9TRU5EX05POwotCQljYXJkLT5kZXYtPmZlYXR1cmVzICY9IH4oTkVUSUZfRl9UU08gfCBORVRJRl9GX1NHKTsKLQl9CisJaWYgKHJjKQorCQljYXJkLT5kZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTIwNjQsMTQgKzE5NzIsNyBAQAogCQlpc192bGFuID0gMTsKIAl9CiAKLQlzd2l0Y2ggKGNhcmQtPm9wdGlvbnMuY2hlY2tzdW1fdHlwZSkgewotCWNhc2UgU1dfQ0hFQ0tTVU1NSU5HOgotCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7Ci0JCWJyZWFrOwotCWNhc2UgTk9fQ0hFQ0tTVU1NSU5HOgotCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCQlicmVhazsKLQljYXNlIEhXX0NIRUNLU1VNTUlORzoKKwlpZiAoY2FyZC0+ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSB7CiAJCWlmICgoaGRyLT5oZHIubDMuZXh0X2ZsYWdzICYKIAkJICAgIChRRVRIX0hEUl9FWFRfQ1NVTV9IRFJfUkVRIHwKIAkJICAgICBRRVRIX0hEUl9FWFRfQ1NVTV9UUkFOU1BfUkVRKSkgPT0KQEAgLTIwODAsNyArMTk4MSw4IEBACiAJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCQllbHNlCiAJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7Ci0JfQorCX0gZWxzZQorCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CiAKIAlyZXR1cm4gaXNfdmxhbjsKIH0KQEAgLTMwMjQsNyArMjkyNiw3IEBACiAJc3RydWN0IHFldGhfcWRpb19vdXRfcSAqcXVldWUgPSBjYXJkLT5xZGlvLm91dF9xcwogCQlbcWV0aF9nZXRfcHJpb3JpdHlfcXVldWUoY2FyZCwgc2tiLCBpcHYsIGNhc3RfdHlwZSldOwogCWludCB0eF9ieXRlcyA9IHNrYi0+bGVuOwotCWVudW0gcWV0aF9sYXJnZV9zZW5kX3R5cGVzIGxhcmdlX3NlbmQgPSBRRVRIX0xBUkdFX1NFTkRfTk87CisJYm9vbCBsYXJnZV9zZW5kOwogCWludCBkYXRhX29mZnNldCA9IC0xOwogCWludCBucl9mcmFnczsKIApAQCAtMzA0Niw4ICsyOTQ4LDcgQEAKIAkJY2FyZC0+cGVyZl9zdGF0cy5vdXRib3VuZF9zdGFydF90aW1lID0gcWV0aF9nZXRfbWljcm9zKCk7CiAJfQogCi0JaWYgKHNrYl9pc19nc28oc2tiKSkKLQkJbGFyZ2Vfc2VuZCA9IGNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZDsKKwlsYXJnZV9zZW5kID0gc2tiX2lzX2dzbyhza2IpOwogCiAJaWYgKChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfSVFEKSAmJiAoIWxhcmdlX3NlbmQpICYmCiAJICAgIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID09IDApKSB7CkBAIC0zMDk2LDcgKzI5OTcsNyBAQAogCS8qIGZpeCBoYXJkd2FyZSBsaW1pdGF0aW9uOiBhcyBsb25nIGFzIHdlIGRvIG5vdCBoYXZlIHNiYWwKIAkgKiBjaGFpbmluZyB3ZSBjYW4gbm90IHNlbmQgbG9uZyBmcmFnIGxpc3RzCiAJICovCi0JaWYgKGxhcmdlX3NlbmQgPT0gUUVUSF9MQVJHRV9TRU5EX1RTTykgeworCWlmIChsYXJnZV9zZW5kKSB7CiAJCWlmIChxZXRoX2wzX3Rzb19lbGVtZW50cyhuZXdfc2tiKSArIDEgPiAxNikgewogCQkJaWYgKHNrYl9saW5lYXJpemUobmV3X3NrYikpCiAJCQkJZ290byB0eF9kcm9wOwpAQCAtMzEwNSw4ICszMDA2LDcgQEAKIAkJfQogCX0KIAotCWlmICgobGFyZ2Vfc2VuZCA9PSBRRVRIX0xBUkdFX1NFTkRfVFNPKSAmJgotCSAgICAoY2FzdF90eXBlID09IFJUTl9VTlNQRUMpKSB7CisJaWYgKGxhcmdlX3NlbmQgJiYgKGNhc3RfdHlwZSA9PSBSVE5fVU5TUEVDKSkgewogCQloZHIgPSAoc3RydWN0IHFldGhfaGRyICopc2tiX3B1c2gobmV3X3NrYiwKIAkJCQkJCXNpemVvZihzdHJ1Y3QgcWV0aF9oZHJfdHNvKSk7CiAJCW1lbXNldChoZHIsIDAsIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHJfdHNvKSk7CkBAIC0zMTQxLDcgKzMwNDEsNyBAQAogCiAJaWYgKGNhcmQtPmluZm8udHlwZSAhPSBRRVRIX0NBUkRfVFlQRV9JUUQpIHsKIAkJaW50IGxlbjsKLQkJaWYgKGxhcmdlX3NlbmQgPT0gUUVUSF9MQVJHRV9TRU5EX1RTTykKKwkJaWYgKGxhcmdlX3NlbmQpCiAJCQlsZW4gPSAoKHVuc2lnbmVkIGxvbmcpdGNwX2hkcihuZXdfc2tiKSArCiAJCQkJdGNwX2hkcihuZXdfc2tiKS0+ZG9mZiAqIDQpIC0KIAkJCQkodW5zaWduZWQgbG9uZyluZXdfc2tiLT5kYXRhOwpAQCAtMzE2Miw3ICszMDYyLDcgQEAKIAkJaWYgKG5ld19za2IgIT0gc2tiKQogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJaWYgKGNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMpIHsKLQkJCWlmIChsYXJnZV9zZW5kICE9IFFFVEhfTEFSR0VfU0VORF9OTykgeworCQkJaWYgKGxhcmdlX3NlbmQpIHsKIAkJCQljYXJkLT5wZXJmX3N0YXRzLmxhcmdlX3NlbmRfYnl0ZXMgKz0gdHhfYnl0ZXM7CiAJCQkJY2FyZC0+cGVyZl9zdGF0cy5sYXJnZV9zZW5kX2NudCsrOwogCQkJfQpAQCAtMzI0OCw2NSArMzE0OCw0MiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTMyIHFldGhfbDNfZXRodG9vbF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHUzMiBxZXRoX2wzX2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmVhdHVyZXMpCiB7CiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+bWxfcHJpdjsKIAotCXJldHVybiAoY2FyZC0+b3B0aW9ucy5jaGVja3N1bV90eXBlID09IEhXX0NIRUNLU1VNTUlORyk7CisJaWYgKCFxZXRoX2lzX3N1cHBvcnRlZChjYXJkLCBJUEFfT1VUQk9VTkRfQ0hFQ0tTVU0pKQorCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9JUF9DU1VNOworCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX09VVEJPVU5EX1RTTykpCisJCWZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzsKKwlpZiAoIXFldGhfaXNfc3VwcG9ydGVkKGNhcmQsIElQQV9JTkJPVU5EX0NIRUNLU1VNKSkKKwkJZmVhdHVyZXMgJj0gfk5FVElGX0ZfUlhDU1VNOworCisJcmV0dXJuIGZlYXR1cmVzOwogfQogCi1zdGF0aWMgaW50IHFldGhfbDNfZXRodG9vbF9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3N0YXRpYyBpbnQgcWV0aF9sM19zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZlYXR1cmVzKQogewogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPm1sX3ByaXY7Ci0JZW51bSBxZXRoX2NoZWNrc3VtX3R5cGVzIGNzdW1fdHlwZTsKKwl1MzIgY2hhbmdlZCA9IGRldi0+ZmVhdHVyZXMgXiBmZWF0dXJlczsKKwlpbnQgZXJyOwogCi0JaWYgKGRhdGEpCi0JCWNzdW1fdHlwZSA9IEhXX0NIRUNLU1VNTUlORzsKLQllbHNlCi0JCWNzdW1fdHlwZSA9IFNXX0NIRUNLU1VNTUlORzsKKwlpZiAoIShjaGFuZ2VkICYgTkVUSUZfRl9SWENTVU0pKQorCQlyZXR1cm4gMDsKIAotCXJldHVybiBxZXRoX2wzX3NldF9yeF9jc3VtKGNhcmQsIGNzdW1fdHlwZSk7Ci19CisJaWYgKGNhcmQtPnN0YXRlID09IENBUkRfU1RBVEVfRE9XTiB8fAorCSAgICBjYXJkLT5zdGF0ZSA9PSBDQVJEX1NUQVRFX1JFQ09WRVIpCisJCXJldHVybiAwOwogCi1zdGF0aWMgaW50IHFldGhfbDNfZXRodG9vbF9zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPm1sX3ByaXY7Ci0JaW50IHJjID0gMDsKKwllcnIgPSBxZXRoX2wzX3NldF9yeF9jc3VtKGNhcmQsIGZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pOworCWlmIChlcnIpCisJCWRldi0+ZmVhdHVyZXMgPSBmZWF0dXJlcyBeIE5FVElGX0ZfUlhDU1VNOwogCi0JaWYgKGRhdGEpIHsKLQkJcmMgPSBxZXRoX2wzX3NldF9sYXJnZV9zZW5kKGNhcmQsIFFFVEhfTEFSR0VfU0VORF9UU08pOwotCX0gZWxzZSB7Ci0JCWRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfVFNPOwotCQljYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQgPSBRRVRIX0xBUkdFX1NFTkRfTk87Ci0JfQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBxZXRoX2wzX2V0aHRvb2xfc2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+bWxfcHJpdjsKLQotCWlmIChkYXRhKSB7Ci0JCWlmIChxZXRoX2lzX3N1cHBvcnRlZChjYXJkLCBJUEFfT1VUQk9VTkRfQ0hFQ0tTVU0pKQotCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU07Ci0JCWVsc2UKLQkJCXJldHVybiAtRVBFUk07Ci0JfSBlbHNlCi0JCWRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfSVBfQ1NVTTsKLQotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcWV0aF9sM19ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAotCS5nZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCi0JLnNldF90eF9jc3VtID0gcWV0aF9sM19ldGh0b29sX3NldF90eF9jc3VtLAotCS5nZXRfcnhfY3N1bSA9IHFldGhfbDNfZXRodG9vbF9nZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0gPSBxZXRoX2wzX2V0aHRvb2xfc2V0X3J4X2NzdW0sCi0JLmdldF9zZyAgICAgID0gZXRodG9vbF9vcF9nZXRfc2csCi0JLnNldF9zZyAgICAgID0gZXRodG9vbF9vcF9zZXRfc2csCi0JLmdldF90c28gICAgID0gZXRodG9vbF9vcF9nZXRfdHNvLAotCS5zZXRfdHNvICAgICA9IHFldGhfbDNfZXRodG9vbF9zZXRfdHNvLAogCS5nZXRfc3RyaW5ncyA9IHFldGhfY29yZV9nZXRfc3RyaW5ncywKIAkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBxZXRoX2NvcmVfZ2V0X2V0aHRvb2xfc3RhdHMsCiAJLmdldF9zc2V0X2NvdW50ID0gcWV0aF9jb3JlX2dldF9zc2V0X2NvdW50LApAQCAtMzM0Nyw2ICszMjI0LDggQEAKIAkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHFldGhfbDNfc2V0X211bHRpY2FzdF9saXN0LAogCS5uZG9fZG9faW9jdGwJICAgCT0gcWV0aF9sM19kb19pb2N0bCwKIAkubmRvX2NoYW5nZV9tdHUJICAgCT0gcWV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fZml4X2ZlYXR1cmVzICAgCT0gcWV0aF9sM19maXhfZmVhdHVyZXMsCisJLm5kb19zZXRfZmVhdHVyZXMgICAJPSBxZXRoX2wzX3NldF9mZWF0dXJlcywKIAkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIJPSBxZXRoX2wzX3ZsYW5fcnhfcmVnaXN0ZXIsCiAJLm5kb192bGFuX3J4X2FkZF92aWQJPSBxZXRoX2wzX3ZsYW5fcnhfYWRkX3ZpZCwKIAkubmRvX3ZsYW5fcnhfa2lsbF92aWQgICA9IHFldGhfbDNfdmxhbl9yeF9raWxsX3ZpZCwKQEAgLTMzNjIsNiArMzI0MSw4IEBACiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBxZXRoX2wzX3NldF9tdWx0aWNhc3RfbGlzdCwKIAkubmRvX2RvX2lvY3RsCSAgIAk9IHFldGhfbDNfZG9faW9jdGwsCiAJLm5kb19jaGFuZ2VfbXR1CSAgIAk9IHFldGhfY2hhbmdlX210dSwKKwkubmRvX2ZpeF9mZWF0dXJlcyAgIAk9IHFldGhfbDNfZml4X2ZlYXR1cmVzLAorCS5uZG9fc2V0X2ZlYXR1cmVzICAgCT0gcWV0aF9sM19zZXRfZmVhdHVyZXMsCiAJLm5kb192bGFuX3J4X3JlZ2lzdGVyCT0gcWV0aF9sM192bGFuX3J4X3JlZ2lzdGVyLAogCS5uZG9fdmxhbl9yeF9hZGRfdmlkCT0gcWV0aF9sM192bGFuX3J4X2FkZF92aWQsCiAJLm5kb192bGFuX3J4X2tpbGxfdmlkICAgPSBxZXRoX2wzX3ZsYW5fcnhfa2lsbF92aWQsCkBAIC0zMzkyLDggKzMyNzMsMTIgQEAKIAkJCWlmICghKGNhcmQtPmluZm8udW5pcXVlX2lkICYgVU5JUVVFX0lEX05PVF9CWV9DQVJEKSkKIAkJCQljYXJkLT5kZXYtPmRldl9pZCA9IGNhcmQtPmluZm8udW5pcXVlX2lkICYKIAkJCQkJCQkgMHhmZmZmOwotCQkJaWYgKCFjYXJkLT5pbmZvLmd1ZXN0bGFuKQotCQkJCWNhcmQtPmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9HUk87CisJCQlpZiAoIWNhcmQtPmluZm8uZ3Vlc3RsYW4pIHsKKwkJCQljYXJkLT5kZXYtPmh3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8CisJCQkJCU5FVElGX0ZfUlhDU1VNIHwgTkVUSUZfRl9JUF9DU1VNIHwKKwkJCQkJTkVUSUZfRl9UU087CisJCQkJY2FyZC0+ZGV2LT5mZWF0dXJlcyA9IE5FVElGX0ZfUlhDU1VNOworCQkJfQogCQl9CiAJfSBlbHNlIGlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfSVFEKSB7CiAJCWNhcmQtPmRldiA9IGFsbG9jX25ldGRldigwLCAiaHNpJWQiLCBldGhlcl9zZXR1cCk7CkBAIC0zNDI2LDE1ICszMzExLDEzIEBACiAKIAlxZXRoX2wzX2NyZWF0ZV9kZXZpY2VfYXR0cmlidXRlcygmZ2Rldi0+ZGV2KTsKIAljYXJkLT5vcHRpb25zLmxheWVyMiA9IDA7CisJY2FyZC0+aW5mby5od3RyYXAgPSAwOwogCWNhcmQtPmRpc2NpcGxpbmUuc3RhcnRfcG9sbCA9IHFldGhfcWRpb19zdGFydF9wb2xsOwogCWNhcmQtPmRpc2NpcGxpbmUuaW5wdXRfaGFuZGxlciA9IChxZGlvX2hhbmRsZXJfdCAqKQogCQlxZXRoX3FkaW9faW5wdXRfaGFuZGxlcjsKIAljYXJkLT5kaXNjaXBsaW5lLm91dHB1dF9oYW5kbGVyID0gKHFkaW9faGFuZGxlcl90ICopCiAJCXFldGhfcWRpb19vdXRwdXRfaGFuZGxlcjsKIAljYXJkLT5kaXNjaXBsaW5lLnJlY292ZXIgPSBxZXRoX2wzX3JlY292ZXI7Ci0JaWYgKChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfT1NEKSB8fAotCSAgICAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TWCkpCi0JCWNhcmQtPm9wdGlvbnMuY2hlY2tzdW1fdHlwZSA9IEhXX0NIRUNLU1VNTUlORzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzQ4MCwxMyArMzM2MywxOCBAQAogCQlnb3RvIG91dF9yZW1vdmU7CiAJfQogCi0JcWV0aF9sM19xdWVyeV9pcGFzc2lzdHMoY2FyZCwgUUVUSF9QUk9UX0lQVjQpOwotCiAJaWYgKCFjYXJkLT5kZXYgJiYgcWV0aF9sM19zZXR1cF9uZXRkZXYoY2FyZCkpIHsKIAkJcmMgPSAtRU5PREVWOwogCQlnb3RvIG91dF9yZW1vdmU7CiAJfQogCisJaWYgKHFldGhfaXNfZGlhZ2Fzc19zdXBwb3J0ZWQoY2FyZCwgUUVUSF9ESUFHU19DTURfVFJBUCkpIHsKKwkJaWYgKGNhcmQtPmluZm8uaHd0cmFwICYmCisJCSAgICBxZXRoX2h3X3RyYXAoY2FyZCwgUUVUSF9ESUFHU19UUkFQX0FSTSkpCisJCQljYXJkLT5pbmZvLmh3dHJhcCA9IDA7CisJfSBlbHNlCisJCWNhcmQtPmluZm8uaHd0cmFwID0gMDsKKwogCWNhcmQtPnN0YXRlID0gQ0FSRF9TVEFURV9IQVJEU0VUVVA7CiAJbWVtc2V0KCZjYXJkLT5yeCwgMCwgc2l6ZW9mKHN0cnVjdCBxZXRoX3J4KSk7CiAJcWV0aF9wcmludF9zdGF0dXNfbWVzc2FnZShjYXJkKTsKQEAgLTM1MTYsNyArMzQwNCw2IEBACiAJCXJjID0gcWV0aF9sM19zdGFydF9pcGFzc2lzdHMoY2FyZCk7CiAJCWlmIChyYykKIAkJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiM2VyciVkIiwgcmMpOwotCQlxZXRoX2wzX3NldF9sYXJnZV9zZW5kKGNhcmQsIGNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCk7CiAJCXJjID0gcWV0aF9sM19zZXRyb3V0aW5nX3Y0KGNhcmQpOwogCQlpZiAocmMpCiAJCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjRlcnIlZCIsIHJjKTsKQEAgLTM1ODksNiArMzQ3NiwxMCBAQAogCWlmIChjYXJkLT5kZXYgJiYgbmV0aWZfY2Fycmllcl9vayhjYXJkLT5kZXYpKQogCQluZXRpZl9jYXJyaWVyX29mZihjYXJkLT5kZXYpOwogCXJlY292ZXJfZmxhZyA9IGNhcmQtPnN0YXRlOworCWlmICgoIXJlY292ZXJ5X21vZGUgJiYgY2FyZC0+aW5mby5od3RyYXApIHx8IGNhcmQtPmluZm8uaHd0cmFwID09IDIpIHsKKwkJcWV0aF9od190cmFwKGNhcmQsIFFFVEhfRElBR1NfVFJBUF9ESVNBUk0pOworCQljYXJkLT5pbmZvLmh3dHJhcCA9IDE7CisJfQogCXFldGhfbDNfc3RvcF9jYXJkKGNhcmQsIHJlY292ZXJ5X21vZGUpOwogCXJjICA9IGNjd19kZXZpY2Vfc2V0X29mZmxpbmUoQ0FSRF9EREVWKGNhcmQpKTsKIAlyYzIgPSBjY3dfZGV2aWNlX3NldF9vZmZsaW5lKENBUkRfV0RFVihjYXJkKSk7CkBAIC0zNjQ0LDYgKzM1MzUsOCBAQAogc3RhdGljIHZvaWQgcWV0aF9sM19zaHV0ZG93bihzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpnZGV2KQogewogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoJmdkZXYtPmRldik7CisJaWYgKChnZGV2LT5zdGF0ZSA9PSBDQ1dHUk9VUF9PTkxJTkUpICYmIGNhcmQtPmluZm8uaHd0cmFwKQorCQlxZXRoX2h3X3RyYXAoY2FyZCwgUUVUSF9ESUFHU19UUkFQX0RJU0FSTSk7CiAJcWV0aF9xZGlvX2NsZWFyX2NhcmQoY2FyZCwgMCk7CiAJcWV0aF9jbGVhcl9xZGlvX2J1ZmZlcnMoY2FyZCk7CiB9CkBAIC0zNjU5LDYgKzM1NTIsOCBAQAogCWlmIChnZGV2LT5zdGF0ZSA9PSBDQ1dHUk9VUF9PRkZMSU5FKQogCQlyZXR1cm4gMDsKIAlpZiAoY2FyZC0+c3RhdGUgPT0gQ0FSRF9TVEFURV9VUCkgeworCQlpZiAoY2FyZC0+aW5mby5od3RyYXApCisJCQlxZXRoX2h3X3RyYXAoY2FyZCwgUUVUSF9ESUFHU19UUkFQX0RJU0FSTSk7CiAJCV9fcWV0aF9sM19zZXRfb2ZmbGluZShjYXJkLT5nZGV2LCAxKTsKIAl9IGVsc2UKIAkJX19xZXRoX2wzX3NldF9vZmZsaW5lKGNhcmQtPmdkZXYsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX3N5cy5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX3N5cy5jCmluZGV4IDY3Y2ZhNjguLmNkOTkyMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19zeXMuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfc3lzLmMKQEAgLTE1LDE2ICsxNSw2IEBACiAjZGVmaW5lIFFFVEhfREVWSUNFX0FUVFIoX2lkLCBfbmFtZSwgX21vZGUsIF9zaG93LCBfc3RvcmUpIFwKIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyXyMjX2lkID0gX19BVFRSKF9uYW1lLCBfbW9kZSwgX3Nob3csIF9zdG9yZSkKIAotc3RhdGljIGNvbnN0IGNoYXIgKnFldGhfbDNfZ2V0X2NoZWNrc3VtX3N0cihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQotewotCWlmIChjYXJkLT5vcHRpb25zLmNoZWNrc3VtX3R5cGUgPT0gU1dfQ0hFQ0tTVU1NSU5HKQotCQlyZXR1cm4gInN3IjsKLQllbHNlIGlmIChjYXJkLT5vcHRpb25zLmNoZWNrc3VtX3R5cGUgPT0gSFdfQ0hFQ0tTVU1NSU5HKQotCQlyZXR1cm4gImh3IjsKLQllbHNlCi0JCXJldHVybiAibm8iOwotfQotCiBzdGF0aWMgc3NpemVfdCBxZXRoX2wzX2Rldl9yb3V0ZV9zaG93KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCiAJCQlzdHJ1Y3QgcWV0aF9yb3V0aW5nX2luZm8gKnJvdXRlLCBjaGFyICpidWYpCiB7CkBAIC0yOTUsNTEgKzI4NSw2IEBACiBzdGF0aWMgREVWSUNFX0FUVFIoY2Fub25pY2FsX21hY2FkZHIsIDA2NDQsIHFldGhfbDNfZGV2X2Nhbm9uaWNhbF9tYWNhZGRyX3Nob3csCiAJCSAgIHFldGhfbDNfZGV2X2Nhbm9uaWNhbF9tYWNhZGRyX3N0b3JlKTsKIAotc3RhdGljIHNzaXplX3QgcWV0aF9sM19kZXZfY2hlY2tzdW1fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlcyBjaGVja3N1bW1pbmdcbiIsCi0JCQlxZXRoX2wzX2dldF9jaGVja3N1bV9zdHIoY2FyZCkpOwotfQotCi1zdGF0aWMgc3NpemVfdCBxZXRoX2wzX2Rldl9jaGVja3N1bV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JZW51bSBxZXRoX2NoZWNrc3VtX3R5cGVzIGNzdW1fdHlwZTsKLQljaGFyICp0bXA7Ci0JaW50IHJjID0gMDsKLQotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQltdXRleF9sb2NrKCZjYXJkLT5jb25mX211dGV4KTsKLQl0bXAgPSBzdHJzZXAoKGNoYXIgKiopICZidWYsICJcbiIpOwotCWlmICghc3RyY21wKHRtcCwgInN3X2NoZWNrc3VtbWluZyIpKQotCQljc3VtX3R5cGUgPSBTV19DSEVDS1NVTU1JTkc7Ci0JZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJod19jaGVja3N1bW1pbmciKSkKLQkJY3N1bV90eXBlID0gSFdfQ0hFQ0tTVU1NSU5HOwotCWVsc2UgaWYgKCFzdHJjbXAodG1wLCAibm9fY2hlY2tzdW1taW5nIikpCi0JCWNzdW1fdHlwZSA9IE5PX0NIRUNLU1VNTUlORzsKLQllbHNlIHsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlyYyA9IHFldGhfbDNfc2V0X3J4X2NzdW0oY2FyZCwgY3N1bV90eXBlKTsKLW91dDoKLQltdXRleF91bmxvY2soJmNhcmQtPmNvbmZfbXV0ZXgpOwotCXJldHVybiByYyA/IHJjIDogY291bnQ7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihjaGVja3N1bW1pbmcsIDA2NDQsIHFldGhfbDNfZGV2X2NoZWNrc3VtX3Nob3csCi0JCXFldGhfbDNfZGV2X2NoZWNrc3VtX3N0b3JlKTsKLQogc3RhdGljIHNzaXplX3QgcWV0aF9sM19kZXZfc25pZmZlcl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTQwMiw2MSArMzQ3LDEzIEBACiBzdGF0aWMgREVWSUNFX0FUVFIoc25pZmZlciwgMDY0NCwgcWV0aF9sM19kZXZfc25pZmZlcl9zaG93LAogCQlxZXRoX2wzX2Rldl9zbmlmZmVyX3N0b3JlKTsKIAotc3RhdGljIHNzaXplX3QgcWV0aF9sM19kZXZfbGFyZ2Vfc2VuZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzd2l0Y2ggKGNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCkgewotCWNhc2UgUUVUSF9MQVJHRV9TRU5EX05POgotCQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgIm5vIik7Ci0JY2FzZSBRRVRIX0xBUkdFX1NFTkRfVFNPOgotCQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgIlRTTyIpOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCAiTi9BIik7Ci0JfQotfQotCi1zdGF0aWMgc3NpemVfdCBxZXRoX2wzX2Rldl9sYXJnZV9zZW5kX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQllbnVtIHFldGhfbGFyZ2Vfc2VuZF90eXBlcyB0eXBlOwotCWludCByYyA9IDA7Ci0JY2hhciAqdG1wOwotCi0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQl0bXAgPSBzdHJzZXAoKGNoYXIgKiopICZidWYsICJcbiIpOwotCWlmICghc3RyY21wKHRtcCwgIm5vIikpCi0JCXR5cGUgPSBRRVRIX0xBUkdFX1NFTkRfTk87Ci0JZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJUU08iKSkKLQkJdHlwZSA9IFFFVEhfTEFSR0VfU0VORF9UU087Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW11dGV4X2xvY2soJmNhcmQtPmNvbmZfbXV0ZXgpOwotCWlmIChjYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQgIT0gdHlwZSkKLQkJcmMgPSBxZXRoX2wzX3NldF9sYXJnZV9zZW5kKGNhcmQsIHR5cGUpOwotCW11dGV4X3VubG9jaygmY2FyZC0+Y29uZl9tdXRleCk7Ci0JcmV0dXJuIHJjID8gcmMgOiBjb3VudDsKLX0KLQotc3RhdGljIERFVklDRV9BVFRSKGxhcmdlX3NlbmQsIDA2NDQsIHFldGhfbDNfZGV2X2xhcmdlX3NlbmRfc2hvdywKLQkJICAgcWV0aF9sM19kZXZfbGFyZ2Vfc2VuZF9zdG9yZSk7Ci0KIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpxZXRoX2wzX2RldmljZV9hdHRyc1tdID0gewogCSZkZXZfYXR0cl9yb3V0ZTQuYXR0ciwKIAkmZGV2X2F0dHJfcm91dGU2LmF0dHIsCiAJJmRldl9hdHRyX2Zha2VfYnJvYWRjYXN0LmF0dHIsCiAJJmRldl9hdHRyX2Jyb2FkY2FzdF9tb2RlLmF0dHIsCiAJJmRldl9hdHRyX2Nhbm9uaWNhbF9tYWNhZGRyLmF0dHIsCi0JJmRldl9hdHRyX2NoZWNrc3VtbWluZy5hdHRyLAogCSZkZXZfYXR0cl9zbmlmZmVyLmF0dHIsCi0JJmRldl9hdHRyX2xhcmdlX3NlbmQuYXR0ciwKIAlOVUxMLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljYXNtL2FpY2FzbV9zeW1ib2wuYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpY2FzbS9haWNhc21fc3ltYm9sLmMKaW5kZXggMDc4ZWQ2MC4uMjMyYWZmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljYXNtL2FpY2FzbV9zeW1ib2wuYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWNhc20vYWljYXNtX3N5bWJvbC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIEFpYzd4eHggU0NTSSBob3N0IGFkYXB0ZXIgZmlybXdhcmUgYXNzc2VtYmxlciBzeW1ib2wgdGFibGUgaW1wbGVtZW50YXRpb24KKyAqIEFpYzd4eHggU0NTSSBob3N0IGFkYXB0ZXIgZmlybXdhcmUgYXNzZW1ibGVyIHN5bWJvbCB0YWJsZSBpbXBsZW1lbnRhdGlvbgogICoKICAqIENvcHlyaWdodCAoYykgMTk5NyBKdXN0aW4gVC4gR2liYnMuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDIgQWRhcHRlYyBJbmMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWNhc20vYWljYXNtX3N5bWJvbC5oIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljYXNtL2FpY2FzbV9zeW1ib2wuaAppbmRleCAyYmE3M2FlLi4zNGJiY2FkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWNhc20vYWljYXNtX3N5bWJvbC5oCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpY2FzbS9haWNhc21fc3ltYm9sLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQWljN3h4eCBTQ1NJIGhvc3QgYWRhcHRlciBmaXJtd2FyZSBhc3NzZW1ibGVyIHN5bWJvbCB0YWJsZSBkZWZpbml0aW9ucworICogQWljN3h4eCBTQ1NJIGhvc3QgYWRhcHRlciBmaXJtd2FyZSBhc3NlbWJsZXIgc3ltYm9sIHRhYmxlIGRlZmluaXRpb25zCiAgKgogICogQ29weXJpZ2h0IChjKSAxOTk3IEp1c3RpbiBULiBHaWJicy4KICAqIENvcHlyaWdodCAoYykgMjAwMiBBZGFwdGVjIEluYy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2hiYS5jIGIvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3JfaGJhLmMKaW5kZXggZGE3Yjk4OC4uZjk4MDYwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3JfaGJhLmMKKysrIGIvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3JfaGJhLmMKQEAgLTc1LDggKzc1LDEwIEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkFSRUNBIChBUkMxMXh4LzEyeHgvMTZ4eC8xODgwKSBTQVRBL1NBUyBSQUlEIEhvc3QgQnVzIEFkYXB0ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKIE1PRFVMRV9WRVJTSU9OKEFSQ01TUl9EUklWRVJfVkVSU0lPTik7Ci1zdGF0aWMgaW50IHNsZWVwdGltZSA9IDEwOwotc3RhdGljIGludCByZXRyeWNvdW50ID0gMTI7CisKKyNkZWZpbmUJQVJDTVNSX1NMRUVQVElNRQkxMAorI2RlZmluZQlBUkNNU1JfUkVUUllDT1VOVAkxMgorCiB3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3E7CiBzdGF0aWMgaW50IGFyY21zcl9pb3BfbWVzc2FnZV94ZmVyKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IsCiAJCQkJCXN0cnVjdCBzY3NpX2NtbmQgKmNtZCk7CkBAIC0xNzEsMjQgKzE3Myw2IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqLwotaW50IGFyY21zcl9zbGVlcF9mb3JfYnVzX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKLXsKLQkJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBOVUxMOwotCQlpbnQgaSwgaXNsZWVwOwotCQlzaG9zdCA9IGNtZC0+ZGV2aWNlLT5ob3N0OwotCQlpc2xlZXAgPSBzbGVlcHRpbWUgLyAxMDsKLQkJaWYgKGlzbGVlcCA+IDApIHsKLQkJCWZvciAoaSA9IDA7IGkgPCBpc2xlZXA7IGkrKykgewotCQkJCW1zbGVlcCgxMDAwMCk7Ci0JCQl9Ci0JCX0KLQotCQlpc2xlZXAgPSBzbGVlcHRpbWUgJSAxMDsKLQkJaWYgKGlzbGVlcCA+IDApIHsKLQkJCW1zbGVlcChpc2xlZXAqMTAwMCk7Ci0JCX0KLQkJcmV0dXJuIDA7Ci19CiAKIHN0YXRpYyB2b2lkIGFyY21zcl9mcmVlX2hiYl9tdShzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiKQogewpAQCAtMzIzLDY2ICszMDcsNjQgQEAKIAogCWRlZmF1bHQ6IGFjYi0+YWRhcHRlcl90eXBlID0gQUNCX0FEQVBURVJfVFlQRV9BOwogCX0KLX0JCit9CiAKIHN0YXRpYyB1aW50OF90IGFyY21zcl9oYmFfd2FpdF9tc2dpbnRfcmVhZHkoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYikKIHsKIAlzdHJ1Y3QgTWVzc2FnZVVuaXRfQSBfX2lvbWVtICpyZWcgPSBhY2ItPnBtdUE7Ci0JdWludDMyX3QgSW5kZXg7Ci0JdWludDhfdCBSZXRyaWVzID0gMHgwMDsKLQlkbyB7Ci0JCWZvciAoSW5kZXggPSAwOyBJbmRleCA8IDEwMDsgSW5kZXgrKykgewotCQkJaWYgKHJlYWRsKCZyZWctPm91dGJvdW5kX2ludHN0YXR1cykgJgotCQkJCQlBUkNNU1JfTVVfT1VUQk9VTkRfTUVTU0FHRTBfSU5UKSB7Ci0JCQkJd3JpdGVsKEFSQ01TUl9NVV9PVVRCT1VORF9NRVNTQUdFMF9JTlQsCi0JCQkJCSZyZWctPm91dGJvdW5kX2ludHN0YXR1cyk7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCQltc2xlZXAoMTApOwotCQl9LyptYXggMSBzZWNvbmRzKi8KKwlpbnQgaTsKIAotCX0gd2hpbGUgKFJldHJpZXMrKyA8IDIwKTsvKm1heCAyMCBzZWMqLworCWZvciAoaSA9IDA7IGkgPCAyMDAwOyBpKyspIHsKKwkJaWYgKHJlYWRsKCZyZWctPm91dGJvdW5kX2ludHN0YXR1cykgJgorCQkJCUFSQ01TUl9NVV9PVVRCT1VORF9NRVNTQUdFMF9JTlQpIHsKKwkJCXdyaXRlbChBUkNNU1JfTVVfT1VUQk9VTkRfTUVTU0FHRTBfSU5ULAorCQkJCSZyZWctPm91dGJvdW5kX2ludHN0YXR1cyk7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQltc2xlZXAoMTApOworCX0gLyogbWF4IDIwIHNlY29uZHMgKi8KKwogCXJldHVybiBmYWxzZTsKIH0KIAogc3RhdGljIHVpbnQ4X3QgYXJjbXNyX2hiYl93YWl0X21zZ2ludF9yZWFkeShzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiKQogewogCXN0cnVjdCBNZXNzYWdlVW5pdF9CICpyZWcgPSBhY2ItPnBtdUI7Ci0JdWludDMyX3QgSW5kZXg7Ci0JdWludDhfdCBSZXRyaWVzID0gMHgwMDsKLQlkbyB7Ci0JCWZvciAoSW5kZXggPSAwOyBJbmRleCA8IDEwMDsgSW5kZXgrKykgewotCQkJaWYgKHJlYWRsKHJlZy0+aW9wMmRydl9kb29yYmVsbCkKLQkJCQkmIEFSQ01TUl9JT1AyRFJWX01FU1NBR0VfQ01EX0RPTkUpIHsKLQkJCQl3cml0ZWwoQVJDTVNSX01FU1NBR0VfSU5UX0NMRUFSX1BBVFRFUk4KLQkJCQkJLCByZWctPmlvcDJkcnZfZG9vcmJlbGwpOwotCQkJCXdyaXRlbChBUkNNU1JfRFJWMklPUF9FTkRfT0ZfSU5URVJSVVBULCByZWctPmRydjJpb3BfZG9vcmJlbGwpOwotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQkJbXNsZWVwKDEwKTsKLQkJfS8qbWF4IDEgc2Vjb25kcyovCisJaW50IGk7CiAKLQl9IHdoaWxlIChSZXRyaWVzKysgPCAyMCk7LyptYXggMjAgc2VjKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjAwMDsgaSsrKSB7CisJCWlmIChyZWFkbChyZWctPmlvcDJkcnZfZG9vcmJlbGwpCisJCQkmIEFSQ01TUl9JT1AyRFJWX01FU1NBR0VfQ01EX0RPTkUpIHsKKwkJCXdyaXRlbChBUkNNU1JfTUVTU0FHRV9JTlRfQ0xFQVJfUEFUVEVSTiwKKwkJCQkJcmVnLT5pb3AyZHJ2X2Rvb3JiZWxsKTsKKwkJCXdyaXRlbChBUkNNU1JfRFJWMklPUF9FTkRfT0ZfSU5URVJSVVBULAorCQkJCQlyZWctPmRydjJpb3BfZG9vcmJlbGwpOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJbXNsZWVwKDEwKTsKKwl9IC8qIG1heCAyMCBzZWNvbmRzICovCisKIAlyZXR1cm4gZmFsc2U7CiB9CiAKIHN0YXRpYyB1aW50OF90IGFyY21zcl9oYmNfd2FpdF9tc2dpbnRfcmVhZHkoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKnBBQ0IpCiB7CiAJc3RydWN0IE1lc3NhZ2VVbml0X0MgKnBoYmNtdSA9IChzdHJ1Y3QgTWVzc2FnZVVuaXRfQyAqKXBBQ0ItPnBtdUM7Ci0JdW5zaWduZWQgY2hhciBSZXRyaWVzID0gMHgwMDsKLQl1aW50MzJfdCBJbmRleDsKLQlkbyB7Ci0JCWZvciAoSW5kZXggPSAwOyBJbmRleCA8IDEwMDsgSW5kZXgrKykgewotCQkJaWYgKHJlYWRsKCZwaGJjbXUtPm91dGJvdW5kX2Rvb3JiZWxsKSAmIEFSQ01TUl9IQkNNVV9JT1AyRFJWX01FU1NBR0VfQ01EX0RPTkUpIHsKLQkJCQl3cml0ZWwoQVJDTVNSX0hCQ01VX0lPUDJEUlZfTUVTU0FHRV9DTURfRE9ORV9ET09SQkVMTF9DTEVBUiwgJnBoYmNtdS0+b3V0Ym91bmRfZG9vcmJlbGxfY2xlYXIpOy8qY2xlYXIgaW50ZXJydXB0Ki8KLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJCS8qIG9uZSB1cyBkZWxheQkqLwotCQkJbXNsZWVwKDEwKTsKLQkJfSAvKm1heCAxIHNlY29uZHMqLwotCX0gd2hpbGUgKFJldHJpZXMrKyA8IDIwKTsgLyptYXggMjAgc2VjKi8KKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAyMDAwOyBpKyspIHsKKwkJaWYgKHJlYWRsKCZwaGJjbXUtPm91dGJvdW5kX2Rvb3JiZWxsKQorCQkJCSYgQVJDTVNSX0hCQ01VX0lPUDJEUlZfTUVTU0FHRV9DTURfRE9ORSkgeworCQkJd3JpdGVsKEFSQ01TUl9IQkNNVV9JT1AyRFJWX01FU1NBR0VfQ01EX0RPTkVfRE9PUkJFTExfQ0xFQVIsCisJCQkJJnBoYmNtdS0+b3V0Ym91bmRfZG9vcmJlbGxfY2xlYXIpOyAvKmNsZWFyIGludGVycnVwdCovCisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQltc2xlZXAoMTApOworCX0gLyogbWF4IDIwIHNlY29uZHMgKi8KKwogCXJldHVybiBmYWxzZTsKIH0KKwogc3RhdGljIHZvaWQgYXJjbXNyX2ZsdXNoX2hiYV9jYWNoZShzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiKQogewogCXN0cnVjdCBNZXNzYWdlVW5pdF9BIF9faW9tZW0gKnJlZyA9IGFjYi0+cG11QTsKQEAgLTQ1OSwxMCArNDQxLDExIEBACiAJc3RydWN0IENvbW1hbmRDb250cm9sQmxvY2sgKmNjYl90bXA7CiAJaW50IGkgPSAwLCBqID0gMDsKIAlkbWFfYWRkcl90IGNkYl9waHlhZGRyOwotCXVuc2lnbmVkIGxvbmcgcm91bmR1cF9jY2JzaXplID0gMCwgb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgcm91bmR1cF9jY2JzaXplOwogCXVuc2lnbmVkIGxvbmcgbWF4X3hmZXJfbGVuOwogCXVuc2lnbmVkIGxvbmcgbWF4X3NnX2VudHJ5czsKIAl1aW50MzJfdCAgZmlybV9jb25maWdfdmVyc2lvbjsKKwogCWZvciAoaSA9IDA7IGkgPCBBUkNNU1JfTUFYX1RBUkdFVElEOyBpKyspCiAJCWZvciAoaiA9IDA7IGogPCBBUkNNU1JfTUFYX1RBUkdFVExVTjsgaisrKQogCQkJYWNiLT5kZXZzdGF0ZVtpXVtqXSA9IEFSRUNBX1JBSURfR09ORTsKQEAgLTQ3MiwyMyArNDU1LDIwIEBACiAJZmlybV9jb25maWdfdmVyc2lvbiA9IGFjYi0+ZmlybV9jZmdfdmVyc2lvbjsKIAlpZigoZmlybV9jb25maWdfdmVyc2lvbiAmIDB4RkYpID49IDMpewogCQltYXhfeGZlcl9sZW4gPSAoQVJDTVNSX0NEQl9TR19QQUdFX0xFTkdUSCA8PCAoKGZpcm1fY29uZmlnX3ZlcnNpb24gPj4gOCkgJiAweEZGKSkgKiAxMDI0Oy8qIG1heCA0TSBieXRlICovCi0JCW1heF9zZ19lbnRyeXMgPSAobWF4X3hmZXJfbGVuLzQwOTYpOwkKKwkJbWF4X3NnX2VudHJ5cyA9IChtYXhfeGZlcl9sZW4vNDA5Nik7CiAJfQogCWFjYi0+aG9zdC0+bWF4X3NlY3RvcnMgPSBtYXhfeGZlcl9sZW4vNTEyOwogCWFjYi0+aG9zdC0+c2dfdGFibGVzaXplID0gbWF4X3NnX2VudHJ5czsKIAlyb3VuZHVwX2NjYnNpemUgPSByb3VuZHVwKHNpemVvZihzdHJ1Y3QgQ29tbWFuZENvbnRyb2xCbG9jaykgKyAobWF4X3NnX2VudHJ5cyAtIDEpICogc2l6ZW9mKHN0cnVjdCBTRzY0RU5UUlkpLCAzMik7Ci0JYWNiLT51bmNhY2hlX3NpemUgPSByb3VuZHVwX2NjYnNpemUgKiBBUkNNU1JfTUFYX0ZSRUVDQ0JfTlVNICsgMzI7CisJYWNiLT51bmNhY2hlX3NpemUgPSByb3VuZHVwX2NjYnNpemUgKiBBUkNNU1JfTUFYX0ZSRUVDQ0JfTlVNOwogCWRtYV9jb2hlcmVudCA9IGRtYV9hbGxvY19jb2hlcmVudCgmcGRldi0+ZGV2LCBhY2ItPnVuY2FjaGVfc2l6ZSwgJmRtYV9jb2hlcmVudF9oYW5kbGUsIEdGUF9LRVJORUwpOwogCWlmKCFkbWFfY29oZXJlbnQpewotCQlwcmludGsoS0VSTl9OT1RJQ0UgImFyY21zciVkOiBkbWFfYWxsb2NfY29oZXJlbnQgZ290IGVycm9yIFxuIiwgYWNiLT5ob3N0LT5ob3N0X25vKTsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJhcmNtc3IlZDogZG1hX2FsbG9jX2NvaGVyZW50IGdvdCBlcnJvclxuIiwgYWNiLT5ob3N0LT5ob3N0X25vKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWFjYi0+ZG1hX2NvaGVyZW50ID0gZG1hX2NvaGVyZW50OwogCWFjYi0+ZG1hX2NvaGVyZW50X2hhbmRsZSA9IGRtYV9jb2hlcmVudF9oYW5kbGU7CiAJbWVtc2V0KGRtYV9jb2hlcmVudCwgMCwgYWNiLT51bmNhY2hlX3NpemUpOwotCW9mZnNldCA9IHJvdW5kdXAoKHVuc2lnbmVkIGxvbmcpZG1hX2NvaGVyZW50LCAzMikgLSAodW5zaWduZWQgbG9uZylkbWFfY29oZXJlbnQ7Ci0JZG1hX2NvaGVyZW50X2hhbmRsZSA9IGRtYV9jb2hlcmVudF9oYW5kbGUgKyBvZmZzZXQ7Ci0JZG1hX2NvaGVyZW50ID0gKHN0cnVjdCBDb21tYW5kQ29udHJvbEJsb2NrICopZG1hX2NvaGVyZW50ICsgb2Zmc2V0OwogCWNjYl90bXAgPSBkbWFfY29oZXJlbnQ7CiAJYWNiLT52aXIycGh5X29mZnNldCA9ICh1bnNpZ25lZCBsb25nKWRtYV9jb2hlcmVudCAtICh1bnNpZ25lZCBsb25nKWRtYV9jb2hlcmVudF9oYW5kbGU7CiAJZm9yKGkgPSAwOyBpIDwgQVJDTVNSX01BWF9GUkVFQ0NCX05VTTsgaSsrKXsKQEAgLTI2MDIsMTIgKzI1ODIsOCBAQAogCQlpZiAoY2RiX3BoeWFkZHJfaGkzMiAhPSAwKSB7CiAJCQlzdHJ1Y3QgTWVzc2FnZVVuaXRfQyAqcmVnID0gKHN0cnVjdCBNZXNzYWdlVW5pdF9DICopYWNiLT5wbXVDOwogCi0JCQlpZiAoY2RiX3BoeWFkZHJfaGkzMiAhPSAwKSB7Ci0JCQkJdW5zaWduZWQgY2hhciBSZXRyaWVzID0gMHgwMDsKLQkJCQlkbyB7Ci0JCQkJCXByaW50ayhLRVJOX05PVElDRSAiYXJjbXNyJWQ6IGNkYl9waHlhZGRyX2hpMzI9MHgleCBcbiIsIGFjYi0+YWRhcHRlcl9pbmRleCwgY2RiX3BoeWFkZHJfaGkzMik7Ci0JCQkJfSB3aGlsZSAoUmV0cmllcysrIDwgMTAwKTsKLQkJCX0KKwkJCXByaW50ayhLRVJOX05PVElDRSAiYXJjbXNyJWQ6IGNkYl9waHlhZGRyX2hpMzI9MHgleFxuIiwKKwkJCQkJYWNiLT5hZGFwdGVyX2luZGV4LCBjZGJfcGh5YWRkcl9oaTMyKTsKIAkJCXdyaXRlbChBUkNNU1JfU0lHTkFUVVJFX1NFVF9DT05GSUcsICZyZWctPm1zZ2NvZGVfcndidWZmZXJbMF0pOwogCQkJd3JpdGVsKGNkYl9waHlhZGRyX2hpMzIsICZyZWctPm1zZ2NvZGVfcndidWZmZXJbMV0pOwogCQkJd3JpdGVsKEFSQ01TUl9JTkJPVU5EX01FU0cwX1NFVF9DT05GSUcsICZyZWctPmluYm91bmRfbXNnYWRkcjApOwpAQCAtMjk1NSwxMiArMjkzMSwxMiBAQAogCQkJCWFyY21zcl9oYXJkd2FyZV9yZXNldChhY2IpOwogCQkJCWFjYi0+YWNiX2ZsYWdzICY9IH5BQ0JfRl9JT1BfSU5JVEVEOwogc2xlZXBfYWdhaW46Ci0JCQkJYXJjbXNyX3NsZWVwX2Zvcl9idXNfcmVzZXQoY21kKTsKKwkJCQlzc2xlZXAoQVJDTVNSX1NMRUVQVElNRSk7CiAJCQkJaWYgKChyZWFkbCgmcmVnLT5vdXRib3VuZF9tc2dhZGRyMSkgJiBBUkNNU1JfT1VUQk9VTkRfTUVTRzFfRklSTVdBUkVfT0spID09IDApIHsKLQkJCQkJcHJpbnRrKEtFUk5fRVJSICJhcmNtc3IlZDogd2FpdGluZyBmb3IgaHcgYnVzIHJlc2V0IHJldHVybiwgcmV0cnk9JWQgXG4iLCBhY2ItPmhvc3QtPmhvc3Rfbm8sIHJldHJ5X2NvdW50KTsKLQkJCQkJaWYgKHJldHJ5X2NvdW50ID4gcmV0cnljb3VudCkgeworCQkJCQlwcmludGsoS0VSTl9FUlIgImFyY21zciVkOiB3YWl0aW5nIGZvciBodyBidXMgcmVzZXQgcmV0dXJuLCByZXRyeT0lZFxuIiwgYWNiLT5ob3N0LT5ob3N0X25vLCByZXRyeV9jb3VudCk7CisJCQkJCWlmIChyZXRyeV9jb3VudCA+IEFSQ01TUl9SRVRSWUNPVU5UKSB7CiAJCQkJCQlhY2ItPmZ3X2ZsYWcgPSBGV19ERUFETE9DSzsKLQkJCQkJCXByaW50ayhLRVJOX0VSUiAiYXJjbXNyJWQ6IHdhaXRpbmcgZm9yIGh3IGJ1cyByZXNldCByZXR1cm4sIFJFVFJZIFRFUk1JTkFURUQhISBcbiIsIGFjYi0+aG9zdC0+aG9zdF9ubyk7CisJCQkJCQlwcmludGsoS0VSTl9FUlIgImFyY21zciVkOiB3YWl0aW5nIGZvciBodyBidXMgcmVzZXQgcmV0dXJuLCBSRVRSWSBURVJNSU5BVEVEISFcbiIsIGFjYi0+aG9zdC0+aG9zdF9ubyk7CiAJCQkJCQlyZXR1cm4gRkFJTEVEOwogCQkJCQl9CiAJCQkJCXJldHJ5X2NvdW50Kys7CkBAIC0zMDI1LDEyICszMDAxLDEyIEBACiAJCQkJYXJjbXNyX2hhcmR3YXJlX3Jlc2V0KGFjYik7CiAJCQkJYWNiLT5hY2JfZmxhZ3MgJj0gfkFDQl9GX0lPUF9JTklURUQ7CiBzbGVlcDoKLQkJCQlhcmNtc3Jfc2xlZXBfZm9yX2J1c19yZXNldChjbWQpOworCQkJCXNzbGVlcChBUkNNU1JfU0xFRVBUSU1FKTsKIAkJCQlpZiAoKHJlYWRsKCZyZWctPmhvc3RfZGlhZ25vc3RpYykgJiAweDA0KSAhPSAwKSB7Ci0JCQkJCXByaW50ayhLRVJOX0VSUiAiYXJjbXNyJWQ6IHdhaXRpbmcgZm9yIGh3IGJ1cyByZXNldCByZXR1cm4sIHJldHJ5PSVkIFxuIiwgYWNiLT5ob3N0LT5ob3N0X25vLCByZXRyeV9jb3VudCk7Ci0JCQkJCWlmIChyZXRyeV9jb3VudCA+IHJldHJ5Y291bnQpIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSICJhcmNtc3IlZDogd2FpdGluZyBmb3IgaHcgYnVzIHJlc2V0IHJldHVybiwgcmV0cnk9JWRcbiIsIGFjYi0+aG9zdC0+aG9zdF9ubywgcmV0cnlfY291bnQpOworCQkJCQlpZiAocmV0cnlfY291bnQgPiBBUkNNU1JfUkVUUllDT1VOVCkgewogCQkJCQkJYWNiLT5md19mbGFnID0gRldfREVBRExPQ0s7Ci0JCQkJCQlwcmludGsoS0VSTl9FUlIgImFyY21zciVkOiB3YWl0aW5nIGZvciBodyBidXMgcmVzZXQgcmV0dXJuLCBSRVRSWSBURVJNSU5BVEVEISEgXG4iLCBhY2ItPmhvc3QtPmhvc3Rfbm8pOworCQkJCQkJcHJpbnRrKEtFUk5fRVJSICJhcmNtc3IlZDogd2FpdGluZyBmb3IgaHcgYnVzIHJlc2V0IHJldHVybiwgUkVUUlkgVEVSTUlOQVRFRCEhXG4iLCBhY2ItPmhvc3QtPmhvc3Rfbm8pOwogCQkJCQkJcmV0dXJuIEZBSUxFRDsKIAkJCQkJfQogCQkJCQlyZXRyeV9jb3VudCsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlLmggYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmUuaAppbmRleCAxY2I4YTVlLi4xZDdiOTc2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlLmgKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlLmgKQEAgLTEsNSArMSw1IEBACiAvKioKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTAgU2VydmVyRW5naW5lcworICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMSBFbXVsZXgKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtOCwxMSArOCwxMSBAQAogICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCiAgKgogICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KKyAqIGxpbnV4LWRyaXZlcnNAZW11bGV4LmNvbQogICoKLSAqIFNlcnZlckVuZ2luZXMKLSAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCi0gKiBTdW5ueXZhbGUsIENBIDk0MDg1CisgKiBFbXVsZXgKKyAqIDMzMzMgU3VzYW4gU3RyZWV0CisgKiBDb3N0YSBNZXNhLCBDQSA5MjYyNgogICovCiAKICNpZm5kZWYgQkVJU0NTSV9ICmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5jIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuYwppbmRleCBhZDI0NjM2Li5iOGE4MmYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmMKQEAgLTEsNSArMSw1IEBACiAvKioKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTAgU2VydmVyRW5naW5lcworICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMSBFbXVsZXgKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtOCwxMSArOCwxMSBAQAogICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCiAgKgogICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KKyAqIGxpbnV4LWRyaXZlcnNAZW11bGV4LmNvbQogICoKLSAqIFNlcnZlckVuZ2luZXMKLSAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCi0gKiBTdW5ueXZhbGUsIENBIDk0MDg1CisgKiBFbXVsZXgKKyAqIDMzMzMgU3VzYW4gU3RyZWV0CisgKiBDb3N0YSBNZXNhLCBDQSA5MjYyNgogICovCiAKICNpbmNsdWRlICJiZS5oIgpAQCAtNDU4LDYgKzQ1OCw3IEBACiAJcmVxX2hkci0+b3Bjb2RlID0gb3Bjb2RlOwogCXJlcV9oZHItPnN1YnN5c3RlbSA9IHN1YnN5c3RlbTsKIAlyZXFfaGRyLT5yZXF1ZXN0X2xlbmd0aCA9IGNwdV90b19sZTMyKGNtZF9sZW4gLSBzaXplb2YoKnJlcV9oZHIpKTsKKwlyZXFfaGRyLT50aW1lb3V0ID0gMTIwOwogfQogCiBzdGF0aWMgdm9pZCBiZV9jbWRfcGFnZV9hZGRyc19wcmVwYXJlKHN0cnVjdCBwaHlzX2FkZHIgKnBhZ2VzLCB1MzIgbWF4X3BhZ2VzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuaCBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmgKaW5kZXggZmJkMWRjMi4uNDk3ZWIyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuaAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5oCkBAIC0xLDUgKzEsNSBAQAogLyoqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDEwIFNlcnZlckVuZ2luZXMKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTEgRW11bGV4CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTgsMTEgKzgsMTEgQEAKICAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgogICoKICAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCisgKiBsaW51eC1kcml2ZXJzQGVtdWxleC5jb20KICAqCi0gKiBTZXJ2ZXJFbmdpbmVzCi0gKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQotICogU3Vubnl2YWxlLCBDQSA5NDA4NQorICogRW11bGV4CisgKiAzMzMzIFN1c2FuIFN0cmVldAorICogQ29zdGEgTWVzYSwgQ0EgOTI2MjYKICAqLwogCiAjaWZuZGVmIEJFSVNDU0lfQ01EU19ICmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5jCmluZGV4IDg2OGNjNTUuLjNjYWQxMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5jCkBAIC0xLDUgKzEsNSBAQAogLyoqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDEwIFNlcnZlckVuZ2luZXMKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTEgRW11bGV4CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTcsMTUgKzcsMTQgQEAKICAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKICAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgogICoKLSAqIFdyaXR0ZW4gYnk6IEpheWFtb2hhbiBLYWxsaWNrYWwgKGpheWFtb2hhbmtAc2VydmVyZW5naW5lcy5jb20pCisgKiBXcml0dGVuIGJ5OiBKYXlhbW9oYW4gS2FsbGlja2FsIChqYXlhbW9oYW4ua2FsbGlja2FsQGVtdWxleC5jb20pCiAgKgogICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KKyAqIGxpbnV4LWRyaXZlcnNAZW11bGV4LmNvbQogICoKLSAqIFNlcnZlckVuZ2luZXMKLSAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCi0gKiBTdW5ueXZhbGUsIENBIDk0MDg1Ci0gKgorICogRW11bGV4CisgKiAzMzMzIFN1c2FuIFN0cmVldAorICogQ29zdGEgTWVzYSwgQ0EgOTI2MjYKICAqLwogCiAjaW5jbHVkZSA8c2NzaS9saWJpc2NzaS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmggYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuaAppbmRleCA5YzUzMjc5Li5mZjYwYjdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuaAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuaApAQCAtMSw1ICsxLDUgQEAKIC8qKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMCBTZXJ2ZXJFbmdpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDExIEVtdWxleAogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC03LDE1ICs3LDE0IEBACiAgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCiAgKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KICAqCi0gKiBXcml0dGVuIGJ5OiBKYXlhbW9oYW4gS2FsbGlja2FsIChqYXlhbW9oYW5rQHNlcnZlcmVuZ2luZXMuY29tKQorICogV3JpdHRlbiBieTogSmF5YW1vaGFuIEthbGxpY2thbCAoamF5YW1vaGFuLmthbGxpY2thbEBlbXVsZXguY29tKQogICoKICAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCisgKiBsaW51eC1kcml2ZXJzQGVtdWxleC5jb20KICAqCi0gKiBTZXJ2ZXJFbmdpbmVzCi0gKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQotICogU3Vubnl2YWxlLCBDQSA5NDA4NQotICoKKyAqIEVtdWxleAorICogMzMzMyBTdXNhbiBTdHJlZXQKKyAqIENvc3RhIE1lc2EsIENBIDkyNjI2CiAgKi8KIAogI2lmbmRlZiBfQkVfSVNDU0lfCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uYwppbmRleCAyNGUyMGJhLi45NGI5YTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmMKQEAgLTEsNSArMSw1IEBACiAvKioKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTAgU2VydmVyRW5naW5lcworICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMSBFbXVsZXgKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNywxNiArNywxNiBAQAogICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAogICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCiAgKgotICogV3JpdHRlbiBieTogSmF5YW1vaGFuIEthbGxpY2thbCAoamF5YW1vaGFua0BzZXJ2ZXJlbmdpbmVzLmNvbSkKKyAqIFdyaXR0ZW4gYnk6IEpheWFtb2hhbiBLYWxsaWNrYWwgKGpheWFtb2hhbi5rYWxsaWNrYWxAZW11bGV4LmNvbSkKICAqCiAgKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQorICogbGludXgtZHJpdmVyc0BlbXVsZXguY29tCiAgKgotICogIFNlcnZlckVuZ2luZXMKLSAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCi0gKiBTdW5ueXZhbGUsIENBIDk0MDg1Ci0gKgorICogRW11bGV4CisgKiAzMzMzIFN1c2FuIFN0cmVldAorICogQ29zdGEgTWVzYSwgQ0EgOTI2MjYKICAqLworCiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC00MjAsNyArNDIwLDggQEAKIAlyZXR1cm4gMDsKIAogZnJlZV9rc2V0OgotCWlzY3NpX2Jvb3RfZGVzdHJveV9rc2V0KHBoYmEtPmJvb3Rfa3NldCk7CisJaWYgKHBoYmEtPmJvb3Rfa3NldCkKKwkJaXNjc2lfYm9vdF9kZXN0cm95X2tzZXQocGhiYS0+Ym9vdF9rc2V0KTsKIAlyZXR1cm4gLUVOT01FTTsKIH0KIApAQCAtNjE4LDcgKzYxOSw3IEBACiAJCQkJICAgICsgQkUyX05PUE9VVF9SRVEpKTsKIAlwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybCA9IHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfY291bnQ7CiAJcGhiYS0+cGFyYW1zLmFzeW5jcGR1c19wZXJfY3RybCA9IHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfY291bnQgKiAyOwotCXBoYmEtPnBhcmFtcy5pY2RzX3Blcl9jdHJsID0gcGhiYS0+ZndfY29uZmlnLmlzY3NpX2ljZF9jb3VudDs7CisJcGhiYS0+cGFyYW1zLmljZHNfcGVyX2N0cmwgPSBwaGJhLT5md19jb25maWcuaXNjc2lfaWNkX2NvdW50OwogCXBoYmEtPnBhcmFtcy5udW1fc2dlX3Blcl9pbyA9IEJFMl9TR0U7CiAJcGhiYS0+cGFyYW1zLmRlZnBkdV9oZHJfc3ogPSBCRTJfREVGUERVX0hEUl9TWjsKIAlwaGJhLT5wYXJhbXMuZGVmcGR1X2RhdGFfc3ogPSBCRTJfREVGUERVX0RBVEFfU1o7CkBAIC03ODEsNyArNzgyLDcgQEAKIAlpbnQgaXNyOwogCiAJcGhiYSA9IGRldl9pZDsKLQljdHJsID0gJnBoYmEtPmN0cmw7OworCWN0cmwgPSAmcGhiYS0+Y3RybDsKIAlpc3IgPSBpb3JlYWQzMihjdHJsLT5jc3IgKyBDRVZfSVNSMF9PRkZTRVQgKwogCQkgICAgICAgKFBDSV9GVU5DKGN0cmwtPnBkZXYtPmRldmZuKSAqIENFVl9JU1JfU0laRSkpOwogCWlmICghaXNyKQpAQCAtMzQ2NCwyMyArMzQ2NSwyMyBAQAogCWFkZHIgPSAodTggX19pb21lbSAqKSAoKHU4IF9faW9tZW0gKikgY3RybC0+cGNpY2ZnICsKIAkJCVBDSUNGR19NRU1CQVJfQ1RSTF9JTlRfQ1RSTF9PRkZTRVQpOwogCXJlZyA9IGlvcmVhZDMyKGFkZHIpOwotCVNFX0RFQlVHKERCR19MVkxfOCwgInJlZyA9eCUwOHhcbiIsIHJlZyk7CiAKIAllbmFibGVkID0gcmVnICYgTUVNQkFSX0NUUkxfSU5UX0NUUkxfSE9TVElOVFJfTUFTSzsKIAlpZiAoIWVuYWJsZWQpIHsKIAkJcmVnIHw9IE1FTUJBUl9DVFJMX0lOVF9DVFJMX0hPU1RJTlRSX01BU0s7CiAJCVNFX0RFQlVHKERCR19MVkxfOCwgInJlZyA9eCUwOHggYWRkcj0lcFxuIiwgcmVnLCBhZGRyKTsKIAkJaW93cml0ZTMyKHJlZywgYWRkcik7Ci0JCWlmICghcGhiYS0+bXNpeF9lbmFibGVkKSB7Ci0JCQllcSA9ICZwaHdpX2NvbnRleHQtPmJlX2VxWzBdLnE7CisJfQorCisJaWYgKCFwaGJhLT5tc2l4X2VuYWJsZWQpIHsKKwkJZXEgPSAmcGh3aV9jb250ZXh0LT5iZV9lcVswXS5xOworCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJlcS0+aWQ9JWRcbiIsIGVxLT5pZCk7CisJCWh3aV9yaW5nX2VxX2RiKHBoYmEsIGVxLT5pZCwgMCwgMCwgMSwgMSk7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8PSBwaGJhLT5udW1fY3B1czsgaSsrKSB7CisJCQllcSA9ICZwaHdpX2NvbnRleHQtPmJlX2VxW2ldLnE7CiAJCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJlcS0+aWQ9JWRcbiIsIGVxLT5pZCk7CiAJCQlod2lfcmluZ19lcV9kYihwaGJhLCBlcS0+aWQsIDAsIDAsIDEsIDEpOwotCQl9IGVsc2UgewotCQkJZm9yIChpID0gMDsgaSA8PSBwaGJhLT5udW1fY3B1czsgaSsrKSB7Ci0JCQkJZXEgPSAmcGh3aV9jb250ZXh0LT5iZV9lcVtpXS5xOwotCQkJCVNFX0RFQlVHKERCR19MVkxfOCwgImVxLT5pZD0lZFxuIiwgZXEtPmlkKTsKLQkJCQlod2lfcmluZ19lcV9kYihwaGJhLCBlcS0+aWQsIDAsIDAsIDEsIDEpOwotCQkJfQogCQl9CiAJfQogfQpAQCAtNDAxOSwxMiArNDAyMCwxNyBAQAogCQlod2lfd3JpdGVfYnVmZmVyKHB3cmIsIHRhc2spOwogCQlicmVhazsKIAljYXNlIElTQ1NJX09QX05PT1BfT1VUOgotCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwKLQkJCSAgICAgIElOSV9SRF9DTUQpOwotCQlpZiAodGFzay0+aGRyLT50dHQgPT0gSVNDU0lfUkVTRVJWRURfVEFHKQorCQlpZiAodGFzay0+aGRyLT50dHQgIT0gSVNDU0lfUkVTRVJWRURfVEFHKSB7CisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwKKwkJCQkgICAgICBUR1RfRE1fQ01EKTsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBjbWRzbl9pdHQsCisJCQkJICAgICAgcHdyYiwgMCk7CiAJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgZG1zZywgcHdyYiwgMCk7Ci0JCWVsc2UKKwkJfSBlbHNlIHsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlLCBwd3JiLAorCQkJCSAgICAgIElOSV9SRF9DTUQpOwogCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGRtc2csIHB3cmIsIDEpOworCQl9CiAJCWh3aV93cml0ZV9idWZmZXIocHdyYiwgdGFzayk7CiAJCWJyZWFrOwogCWNhc2UgSVNDU0lfT1BfVEVYVDoKQEAgLTQxNDQsMTAgKzQxNTAsMTEgQEAKIAkJCSAgICBwaGJhLT5jdHJsLm1ib3hfbWVtX2FsbG9jZWQuc2l6ZSwKIAkJCSAgICBwaGJhLT5jdHJsLm1ib3hfbWVtX2FsbG9jZWQudmEsCiAJCQkgICAgcGhiYS0+Y3RybC5tYm94X21lbV9hbGxvY2VkLmRtYSk7CisJaWYgKHBoYmEtPmJvb3Rfa3NldCkKKwkJaXNjc2lfYm9vdF9kZXN0cm95X2tzZXQocGhiYS0+Ym9vdF9rc2V0KTsKIAlpc2NzaV9ob3N0X3JlbW92ZShwaGJhLT5zaG9zdCk7CiAJcGNpX2Rldl9wdXQocGhiYS0+cGNpZGV2KTsKIAlpc2NzaV9ob3N0X2ZyZWUocGhiYS0+c2hvc3QpOwotCWlzY3NpX2Jvb3RfZGVzdHJveV9rc2V0KHBoYmEtPmJvb3Rfa3NldCk7CiB9CiAKIHN0YXRpYyB2b2lkIGJlaXNjc2lfbXNpeF9lbmFibGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uaCBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmgKaW5kZXggOTBlYjc0Zi4uMDgxYzE3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uaAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5oCkBAIC0xLDUgKzEsNSBAQAogLyoqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDEwIFNlcnZlckVuZ2luZXMKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTEgRW11bGV4CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTcsMTUgKzcsMTQgQEAKICAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKICAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgogICoKLSAqIFdyaXR0ZW4gYnk6IEpheWFtb2hhbiBLYWxsaWNrYWwgKGpheWFtb2hhbmtAc2VydmVyZW5naW5lcy5jb20pCisgKiBXcml0dGVuIGJ5OiBKYXlhbW9oYW4gS2FsbGlja2FsIChqYXlhbW9oYW4ua2FsbGlja2FsQGVtdWxleC5jb20pCiAgKgogICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KKyAqIGxpbnV4LWRyaXZlcnNAZW11bGV4LmNvbQogICoKLSAqIFNlcnZlckVuZ2luZXMKLSAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCi0gKiBTdW5ueXZhbGUsIENBIDk0MDg1Ci0gKgorICogRW11bGV4CisgKiAzMzMzIFN1c2FuIFN0cmVldAorICogQ29zdGEgTWVzYSwgQ0EgOTI2MjYKICAqLwogCiAjaWZuZGVmIF9CRUlTQ1NJX01BSU5fCkBAIC0zNSw3ICszNCw3IEBACiAKICNpbmNsdWRlICJiZS5oIgogI2RlZmluZSBEUlZfTkFNRQkJImJlMmlzY3NpIgotI2RlZmluZSBCVUlMRF9TVFIJCSIyLjAuNTQ5LjAiCisjZGVmaW5lIEJVSUxEX1NUUgkJIjIuMTAzLjI5OC4wIgogI2RlZmluZSBCRV9OQU1FCQkJIlNlcnZlckVuZ2luZXMgQmxhZGVFbmdpbmUyIiBcCiAJCQkJIkxpbnV4IGlTQ1NJIERyaXZlciB2ZXJzaW9uIiBCVUlMRF9TVFIKICNkZWZpbmUgRFJWX0RFU0MJCUJFX05BTUUgIiAiICJEcml2ZXIiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWdtdC5jIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuYwppbmRleCA4NzczMjRmLi40NDc2MmNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWdtdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmMKQEAgLTEsNSArMSw1IEBACiAvKioKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTAgU2VydmVyRW5naW5lcworICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMSBFbXVsZXgKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNywxNSArNywxNCBAQAogICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAogICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCiAgKgotICogV3JpdHRlbiBieTogSmF5YW1vaGFuIEthbGxpY2thbCAoamF5YW1vaGFua0BzZXJ2ZXJlbmdpbmVzLmNvbSkKKyAqIFdyaXR0ZW4gYnk6IEpheWFtb2hhbiBLYWxsaWNrYWwgKGpheWFtb2hhbi5rYWxsaWNrYWxAZW11bGV4LmNvbSkKICAqCiAgKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQorICogbGludXgtZHJpdmVyc0BlbXVsZXguY29tCiAgKgotICogU2VydmVyRW5naW5lcwotICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKLSAqIFN1bm55dmFsZSwgQ0EgOTQwODUKLSAqCisgKiBFbXVsZXgKKyAqIDMzMzMgU3VzYW4gU3RyZWV0CisgKiBDb3N0YSBNZXNhLCBDQSA5MjYyNgogICovCiAKICNpbmNsdWRlICJiZV9tZ210LmgiCkBAIC0yMDMsOCArMjAyLDggQEAKIAkJCSAgIE9QQ09ERV9DT01NT05fSVNDU0lfQ0xFQU5VUCwgc2l6ZW9mKCpyZXEpKTsKIAogCXJlcS0+Y2h1dGUgPSBjaHV0ZTsKLQlyZXEtPmhkcl9yaW5nX2lkID0gMDsKLQlyZXEtPmRhdGFfcmluZ19pZCA9IDA7CisJcmVxLT5oZHJfcmluZ19pZCA9IGNwdV90b19sZTE2KEhXSV9HRVRfREVGX0hEUlFfSUQocGhiYSkpOworCXJlcS0+ZGF0YV9yaW5nX2lkID0gY3B1X3RvX2xlMTYoSFdJX0dFVF9ERUZfQlVGUV9JRChwaGJhKSk7CiAKIAlzdGF0dXMgPSAgYmVfbWNjX25vdGlmeV93YWl0KHBoYmEpOwogCWlmIChzdGF0dXMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWdtdC5oIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuaAppbmRleCBiOWFjZWRmLi4wODQyODgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWdtdC5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmgKQEAgLTEsNSArMSw1IEBACiAvKioKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTAgU2VydmVyRW5naW5lcworICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMSBFbXVsZXgKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNywxNSArNywxNCBAQAogICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAogICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCiAgKgotICogV3JpdHRlbiBieTogSmF5YW1vaGFuIEthbGxpY2thbCAoamF5YW1vaGFua0BzZXJ2ZXJlbmdpbmVzLmNvbSkKKyAqIFdyaXR0ZW4gYnk6IEpheWFtb2hhbiBLYWxsaWNrYWwgKGpheWFtb2hhbi5rYWxsaWNrYWxAZW11bGV4LmNvbSkKICAqCiAgKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQorICogbGludXgtZHJpdmVyc0BlbXVsZXguY29tCiAgKgotICogU2VydmVyRW5naW5lcwotICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKLSAqIFN1bm55dmFsZSwgQ0EgOTQwODUKLSAqCisgKiBFbXVsZXgKKyAqIDMzMzMgU3VzYW4gU3RyZWV0CisgKiBDb3N0YSBNZXNhLCBDQSA5MjYyNgogICovCiAKICNpZm5kZWYgX0JFSVNDU0lfTUdNVF8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZC5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkLmMKaW5kZXggMGZkNTEwYS4uNTliNWU5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkLmMKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkLmMKQEAgLTU3LDkgKzU3LDE5IEBACiBpbnQJCWJmYV9kZWJ1Z2ZzX2VuYWJsZSA9IDE7CiBpbnQJCW1zaXhfZGlzYWJsZV9jYiA9IDAsIG1zaXhfZGlzYWJsZV9jdCA9IDA7CiAKKy8qIEZpcm13YXJlIHJlbGVhdGVkICovCiB1MzIJYmZpX2ltYWdlX2N0X2ZjX3NpemUsIGJmaV9pbWFnZV9jdF9jbmFfc2l6ZSwgYmZpX2ltYWdlX2NiX2ZjX3NpemU7CiB1MzIgICAgICpiZmlfaW1hZ2VfY3RfZmMsICpiZmlfaW1hZ2VfY3RfY25hLCAqYmZpX2ltYWdlX2NiX2ZjOwogCisjZGVmaW5lIEJGQURfRldfRklMRV9DVF9GQyAgICAgICJjdGZ3X2ZjLmJpbiIKKyNkZWZpbmUgQkZBRF9GV19GSUxFX0NUX0NOQSAgICAgImN0ZndfY25hLmJpbiIKKyNkZWZpbmUgQkZBRF9GV19GSUxFX0NCX0ZDICAgICAgImNiZndfZmMuYmluIgorCitzdGF0aWMgdTMyICpiZmFkX2xvYWRfZndpbWcoc3RydWN0IHBjaV9kZXYgKnBkZXYpOworc3RhdGljIHZvaWQgYmZhZF9mcmVlX2Z3aW1nKHZvaWQpOworc3RhdGljIHZvaWQgYmZhZF9yZWFkX2Zpcm13YXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MzIgKipiZmlfaW1hZ2UsCisJCXUzMiAqYmZpX2ltYWdlX3NpemUsIGNoYXIgKmZ3X25hbWUpOworCiBzdGF0aWMgY29uc3QgY2hhciAqbXNpeF9uYW1lX2N0W10gPSB7CiAJImNwZTAiLCAiY3BlMSIsICJjcGUyIiwgImNwZTMiLAogCSJybWUwIiwgInJtZTEiLCAicm1lMiIsICJybWUzIiwKQEAgLTIyMiw2ICsyMzIsOSBAQAogCQlpZiAoKGJmYWQtPmJmYWRfZmxhZ3MgJiBCRkFEX0hBTF9JTklUX0RPTkUpKSB7CiAJCQliZmFfc21fc2VuZF9ldmVudChiZmFkLCBCRkFEX0VfSU5JVF9TVUNDRVNTKTsKIAkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkiYmZhICVzOiBiZmEgaW5pdCBmYWlsZWRcbiIsCisJCQkJYmZhZC0+cGNpX25hbWUpOwogCQkJYmZhZC0+YmZhZF9mbGFncyB8PSBCRkFEX0hBTF9JTklUX0ZBSUw7CiAJCQliZmFfc21fc2VuZF9ldmVudChiZmFkLCBCRkFEX0VfSU5JVF9GQUlMRUQpOwogCQl9CkBAIC05OTEsMTAgKzEwMDQsNiBAQAogCQliZmFkLT5wcG9ydC5yb2xlcyB8PSBCRkFfTFBPUlRfUk9MRV9GQ1BfSU07CiAJfQogCi0JLyogU2V0dXAgdGhlIGRlYnVnZnMgbm9kZSBmb3IgdGhpcyBzY3NpX2hvc3QgKi8KLQlpZiAoYmZhX2RlYnVnZnNfZW5hYmxlKQotCQliZmFkX2RlYnVnZnNfaW5pdCgmYmZhZC0+cHBvcnQpOwotCiAJYmZhZC0+YmZhZF9mbGFncyB8PSBCRkFEX0NGR19QUE9SVF9ET05FOwogCiBvdXQ6CkBAIC0xMDA0LDEwICsxMDEzLDYgQEAKIHZvaWQKIGJmYWRfdW5jZmdfcHBvcnQoc3RydWN0IGJmYWRfcyAqYmZhZCkKIHsKLQkvKiBSZW1vdmUgdGhlIGRlYnVnZnMgbm9kZSBmb3IgdGhpcyBzY3NpX2hvc3QgKi8KLQlrZnJlZShiZmFkLT5yZWdkYXRhKTsKLQliZmFkX2RlYnVnZnNfZXhpdCgmYmZhZC0+cHBvcnQpOwotCiAJaWYgKChzdXBwb3J0ZWRfZmM0cyAmIEJGQV9MUE9SVF9ST0xFX0ZDUF9JTSkgJiYKIAkgICAgKGJmYWQtPnBwb3J0LnJvbGVzICYgQkZBX0xQT1JUX1JPTEVfRkNQX0lNKSkgewogCQliZmFkX2ltX3Njc2lfaG9zdF9mcmVlKGJmYWQsIGJmYWQtPnBwb3J0LmltX3BvcnQpOwpAQCAtMTM4OSw2ICsxMzk0LDEwIEBACiAJYmZhZC0+cHBvcnQuYmZhZCA9IGJmYWQ7CiAJSU5JVF9MSVNUX0hFQUQoJmJmYWQtPnBiY192cG9ydF9saXN0KTsKIAorCS8qIFNldHVwIHRoZSBkZWJ1Z2ZzIG5vZGUgZm9yIHRoaXMgYmZhZCAqLworCWlmIChiZmFfZGVidWdmc19lbmFibGUpCisJCWJmYWRfZGVidWdmc19pbml0KCZiZmFkLT5wcG9ydCk7CisKIAlyZXR2YWwgPSBiZmFkX2Rydl9pbml0KGJmYWQpOwogCWlmIChyZXR2YWwgIT0gQkZBX1NUQVRVU19PSykKIAkJZ290byBvdXRfZHJ2X2luaXRfZmFpbHVyZTsKQEAgLTE0MDQsNiArMTQxMyw5IEBACiAJYmZhX2RldGFjaCgmYmZhZC0+YmZhKTsKIAliZmFkX2hhbF9tZW1fcmVsZWFzZShiZmFkKTsKIG91dF9kcnZfaW5pdF9mYWlsdXJlOgorCS8qIFJlbW92ZSB0aGUgZGVidWdmcyBub2RlIGZvciB0aGlzIGJmYWQgKi8KKwlrZnJlZShiZmFkLT5yZWdkYXRhKTsKKwliZmFkX2RlYnVnZnNfZXhpdCgmYmZhZC0+cHBvcnQpOwogCW11dGV4X2xvY2soJmJmYWRfbXV0ZXgpOwogCWJmYWRfaW5zdC0tOwogCWxpc3RfZGVsKCZiZmFkLT5saXN0X2VudHJ5KTsKQEAgLTE0NDUsNiArMTQ1NywxMCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOwogCWJmYWRfaGFsX21lbV9yZWxlYXNlKGJmYWQpOwogCisJLyogUmVtb3ZlIHRoZSBkZWJ1Z2ZzIG5vZGUgZm9yIHRoaXMgYmZhZCAqLworCWtmcmVlKGJmYWQtPnJlZ2RhdGEpOworCWJmYWRfZGVidWdmc19leGl0KCZiZmFkLT5wcG9ydCk7CisKIAkvKiBDbGVhbmluZyB0aGUgQkZBRCBpbnN0YW5jZSAqLwogCW11dGV4X2xvY2soJmJmYWRfbXV0ZXgpOwogCWJmYWRfaW5zdC0tOwpAQCAtMTU1MCw3ICsxNTY2LDcgQEAKIH0KIAogLyogRmlybXdhcmUgaGFuZGxpbmcgKi8KLXUzMiAqCitzdGF0aWMgdm9pZAogYmZhZF9yZWFkX2Zpcm13YXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MzIgKipiZmlfaW1hZ2UsCiAJCXUzMiAqYmZpX2ltYWdlX3NpemUsIGNoYXIgKmZ3X25hbWUpCiB7CkBAIC0xNTU4LDI3ICsxNTc0LDI1IEBACiAKIAlpZiAocmVxdWVzdF9maXJtd2FyZSgmZncsIGZ3X25hbWUsICZwZGV2LT5kZXYpKSB7CiAJCXByaW50ayhLRVJOX0FMRVJUICJDYW4ndCBsb2NhdGUgZmlybXdhcmUgJXNcbiIsIGZ3X25hbWUpOwotCQlnb3RvIGVycm9yOworCQkqYmZpX2ltYWdlID0gTlVMTDsKKwkJZ290byBvdXQ7CiAJfQogCiAJKmJmaV9pbWFnZSA9IHZtYWxsb2MoZnctPnNpemUpOwogCWlmIChOVUxMID09ICpiZmlfaW1hZ2UpIHsKIAkJcHJpbnRrKEtFUk5fQUxFUlQgIkZhaWwgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBmdyBpbWFnZSAiCiAJCQkic2l6ZT0leCFcbiIsICh1MzIpIGZ3LT5zaXplKTsKLQkJZ290byBlcnJvcjsKKwkJZ290byBvdXQ7CiAJfQogCiAJbWVtY3B5KCpiZmlfaW1hZ2UsIGZ3LT5kYXRhLCBmdy0+c2l6ZSk7CiAJKmJmaV9pbWFnZV9zaXplID0gZnctPnNpemUvc2l6ZW9mKHUzMik7Ci0KLQlyZXR1cm4gKmJmaV9pbWFnZTsKLQotZXJyb3I6Ci0JcmV0dXJuIE5VTEw7CitvdXQ6CisJcmVsZWFzZV9maXJtd2FyZShmdyk7CiB9CiAKLXUzMiAqCi1iZmFkX2dldF9maXJtd2FyZV9idWYoc3RydWN0IHBjaV9kZXYgKnBkZXYpCitzdGF0aWMgdTMyICoKK2JmYWRfbG9hZF9md2ltZyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlpZiAocGRldi0+ZGV2aWNlID09IEJGQV9QQ0lfREVWSUNFX0lEX0NUX0ZDKSB7CiAJCWlmIChiZmlfaW1hZ2VfY3RfZmNfc2l6ZSA9PSAwKQpAQCAtMTU5OCw2ICsxNjEyLDE3IEBACiAJfQogfQogCitzdGF0aWMgdm9pZAorYmZhZF9mcmVlX2Z3aW1nKHZvaWQpCit7CisJaWYgKGJmaV9pbWFnZV9jdF9mY19zaXplICYmIGJmaV9pbWFnZV9jdF9mYykKKwkJdmZyZWUoYmZpX2ltYWdlX2N0X2ZjKTsKKwlpZiAoYmZpX2ltYWdlX2N0X2NuYV9zaXplICYmIGJmaV9pbWFnZV9jdF9jbmEpCisJCXZmcmVlKGJmaV9pbWFnZV9jdF9jbmEpOworCWlmIChiZmlfaW1hZ2VfY2JfZmNfc2l6ZSAmJiBiZmlfaW1hZ2VfY2JfZmMpCisJCXZmcmVlKGJmaV9pbWFnZV9jYl9mYyk7Cit9CisKIG1vZHVsZV9pbml0KGJmYWRfaW5pdCk7CiBtb2R1bGVfZXhpdChiZmFkX2V4aXQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2RlYnVnZnMuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9kZWJ1Z2ZzLmMKaW5kZXggYzY2ZTMyZS4uNDhiZTBjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2RlYnVnZnMuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfZGVidWdmcy5jCkBAIC0yOCwxMCArMjgsMTAgQEAKICAqIG1vdW50IC10IGRlYnVnZnMgbm9uZSAvc3lzL2tlcm5lbC9kZWJ1ZwogICoKICAqIEJGQSBIaWVyYXJjaHk6Ci0gKgktIGJmYS9ob3N0IwotICogd2hlcmUgdGhlIGhvc3QgbnVtYmVyIGNvcnJlc3BvbmRzIHRvIHRoZSBvbmUgdW5kZXIgL3N5cy9jbGFzcy9zY3NpX2hvc3QvaG9zdCMKKyAqCS0gYmZhL3BjaV9kZXY6PHBjaV9uYW1lPgorICogd2hlcmUgdGhlIHBjaV9uYW1lIGNvcnJlc3BvbmRzIHRvIHRoZSBvbmUgdW5kZXIgL3N5cy9idXMvcGNpL2RyaXZlcnMvYmZhCiAgKgotICogRGVidWdnaW5nIHNlcnZpY2UgYXZhaWxhYmxlIHBlciBob3N0OgorICogRGVidWdnaW5nIHNlcnZpY2UgYXZhaWxhYmxlIHBlciBwY2lfZGV2OgogICogZnd0cmM6ICBUbyBjb2xsZWN0IGN1cnJlbnQgZmlybXdhcmUgdHJhY2UuCiAgKiBkcnZ0cmM6IFRvIGNvbGxlY3QgY3VycmVudCBkcml2ZXIgdHJhY2UKICAqIGZ3c2F2ZTogVG8gY29sbGVjdCBsYXN0IHNhdmVkIGZ3IHRyYWNlIGFzIGEgcmVzdWx0IG9mIGZpcm13YXJlIGNyYXNoLgpAQCAtNDg5LDExICs0ODksOSBAQAogaW5saW5lIHZvaWQKIGJmYWRfZGVidWdmc19pbml0KHN0cnVjdCBiZmFkX3BvcnRfcyAqcG9ydCkKIHsKLQlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPSBwb3J0LT5pbV9wb3J0OwotCXN0cnVjdCBiZmFkX3MgKmJmYWQgPSBpbV9wb3J0LT5iZmFkOwotCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gaW1fcG9ydC0+c2hvc3Q7CisJc3RydWN0IGJmYWRfcyAqYmZhZCA9IHBvcnQtPmJmYWQ7CiAJY29uc3Qgc3RydWN0IGJmYWRfZGVidWdmc19lbnRyeSAqZmlsZTsKLQljaGFyIG5hbWVbMTZdOworCWNoYXIgbmFtZVs2NF07CiAJaW50IGk7CiAKIAlpZiAoIWJmYV9kZWJ1Z2ZzX2VuYWJsZSkKQEAgLTUxMCwxNyArNTA4LDE1IEBACiAJCX0KIAl9CiAKLQkvKgotCSAqIFNldHVwIHRoZSBob3N0IyBkaXJlY3RvcnkgZm9yIHRoZSBwb3J0LAotCSAqIGNvcnJlc3BvbmRzIHRvIHRoZSBzY3NpX2hvc3QgbnVtIG9mIHRoaXMgcG9ydC4KLQkgKi8KLQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJob3N0JWQiLCBzaG9zdC0+aG9zdF9ubyk7CisJLyogU2V0dXAgdGhlIHBjaV9kZXYgZGVidWdmcyBkaXJlY3RvcnkgZm9yIHRoZSBwb3J0ICovCisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAicGNpX2RldjolcyIsIGJmYWQtPnBjaV9uYW1lKTsKIAlpZiAoIXBvcnQtPnBvcnRfZGVidWdmc19yb290KSB7CiAJCXBvcnQtPnBvcnRfZGVidWdmc19yb290ID0KIAkJCWRlYnVnZnNfY3JlYXRlX2RpcihuYW1lLCBiZmFfZGVidWdmc19yb290KTsKIAkJaWYgKCFwb3J0LT5wb3J0X2RlYnVnZnNfcm9vdCkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCSJCRkEgaG9zdCByb290IGRpciBjcmVhdGlvbiBmYWlsZWRcbiIpOworCQkJCSJiZmEgJXM6IGRlYnVnZnMgcm9vdCBjcmVhdGlvbiBmYWlsZWRcbiIsCisJCQkJYmZhZC0+cGNpX25hbWUpOwogCQkJZ290byBlcnI7CiAJCX0KIApAQCAtNTM2LDggKzUzMiw4IEBACiAJCQkJCQkJZmlsZS0+Zm9wcyk7CiAJCQlpZiAoIWJmYWQtPmJmYWRfZGVudHJ5X2ZpbGVzW2ldKSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCQkiQkZBIGhvc3QlZDogY3JlYXRlICVzIGVudHJ5IGZhaWxlZFxuIiwKLQkJCQkJc2hvc3QtPmhvc3Rfbm8sIGZpbGUtPm5hbWUpOworCQkJCQkiYmZhICVzOiBkZWJ1Z2ZzICVzIGNyZWF0aW9uIGZhaWxlZFxuIiwKKwkJCQkJYmZhZC0+cGNpX25hbWUsIGZpbGUtPm5hbWUpOwogCQkJCWdvdG8gZXJyOwogCQkJfQogCQl9CkBAIC01NTAsOCArNTQ2LDcgQEAKIGlubGluZSB2b2lkCiBiZmFkX2RlYnVnZnNfZXhpdChzdHJ1Y3QgYmZhZF9wb3J0X3MgKnBvcnQpCiB7Ci0Jc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0gcG9ydC0+aW1fcG9ydDsKLQlzdHJ1Y3QgYmZhZF9zICpiZmFkID0gaW1fcG9ydC0+YmZhZDsKKwlzdHJ1Y3QgYmZhZF9zICpiZmFkID0gcG9ydC0+YmZhZDsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJmYWRfZGVidWdmc19maWxlcyk7IGkrKykgewpAQCAtNTYyLDkgKzU1Nyw3IEBACiAJfQogCiAJLyoKLQkgKiBSZW1vdmUgdGhlIGhvc3QjIGRpcmVjdG9yeSBmb3IgdGhlIHBvcnQsCi0JICogY29ycmVzcG9uZHMgdG8gdGhlIHNjc2lfaG9zdCBudW0gb2YgdGhpcyBwb3J0LgotCSovCisJICogUmVtb3ZlIHRoZSBwY2lfZGV2IGRlYnVnZnMgZGlyZWN0b3J5IGZvciB0aGUgcG9ydCAqLwogCWlmIChwb3J0LT5wb3J0X2RlYnVnZnNfcm9vdCkgewogCQlkZWJ1Z2ZzX3JlbW92ZShwb3J0LT5wb3J0X2RlYnVnZnNfcm9vdCk7CiAJCXBvcnQtPnBvcnRfZGVidWdmc19yb290ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbS5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ltLmgKaW5kZXggYmZlZTYzYi4uYzI5NmM4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ltLmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ltLmgKQEAgLTE0MSwyOSArMTQxLDQgQEAKIAogaXJxcmV0dXJuX3QgYmZhZF9pbnR4KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiAKLS8qIEZpcm13YXJlIHJlbGVhdGVkICovCi0jZGVmaW5lIEJGQURfRldfRklMRV9DVF9GQyAgICAgICJjdGZ3X2ZjLmJpbiIKLSNkZWZpbmUgQkZBRF9GV19GSUxFX0NUX0NOQSAgICAgImN0ZndfY25hLmJpbiIKLSNkZWZpbmUgQkZBRF9GV19GSUxFX0NCX0ZDICAgICAgImNiZndfZmMuYmluIgotCi11MzIgKmJmYWRfZ2V0X2Zpcm13YXJlX2J1ZihzdHJ1Y3QgcGNpX2RldiAqcGRldik7Ci11MzIgKmJmYWRfcmVhZF9maXJtd2FyZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTMyICoqYmZpX2ltYWdlLAotCQl1MzIgKmJmaV9pbWFnZV9zaXplLCBjaGFyICpmd19uYW1lKTsKLQotc3RhdGljIGlubGluZSB1MzIgKgotYmZhZF9sb2FkX2Z3aW1nKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXJldHVybiBiZmFkX2dldF9maXJtd2FyZV9idWYocGRldik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotYmZhZF9mcmVlX2Z3aW1nKHZvaWQpCi17Ci0JaWYgKGJmaV9pbWFnZV9jdF9mY19zaXplICYmIGJmaV9pbWFnZV9jdF9mYykKLQkJdmZyZWUoYmZpX2ltYWdlX2N0X2ZjKTsKLQlpZiAoYmZpX2ltYWdlX2N0X2NuYV9zaXplICYmIGJmaV9pbWFnZV9jdF9jbmEpCi0JCXZmcmVlKGJmaV9pbWFnZV9jdF9jbmEpOwotCWlmIChiZmlfaW1hZ2VfY2JfZmNfc2l6ZSAmJiBiZmlfaW1hZ2VfY2JfZmMpCi0JCXZmcmVlKGJmaV9pbWFnZV9jYl9mYyk7Ci19CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjLmggYi9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmYy5oCmluZGV4IGI2ZDM1MGEuLjBhNDA0YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjLmgKKysrIGIvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmMuaApAQCAtMTMwLDcgKzEzMCw3IEBACiAjZGVmaW5lIEJOWDJGQ19UTV9USU1FT1VUCQk2MAkvKiBzZWNzICovCiAjZGVmaW5lIEJOWDJGQ19JT19USU1FT1VUCQkyMDAwMFVMCS8qIG1zZWNzICovCiAKLSNkZWZpbmUgQk5YMkZDX1dBSVRfQ05UCQkJMTIwCisjZGVmaW5lIEJOWDJGQ19XQUlUX0NOVAkJCTEyMDAKICNkZWZpbmUgQk5YMkZDX0ZXX1RJTUVPVVQJCSgzICogSFopCiAjZGVmaW5lIFBPUlRfTUFYCQkJMgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19mY29lLmMgYi9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19mY29lLmMKaW5kZXggZTJlNjQ3NS4uYWIyNTVmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfZmNvZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2Zjb2UuYwpAQCAtNjY0LDcgKzY2NCw3IEBACiAJc3RydWN0IGZjb2VfcG9ydCAqcG9ydCA9IGxwb3J0X3ByaXYobHBvcnQpOwogCXN0cnVjdCBibngyZmNfaGJhICpoYmEgPSBwb3J0LT5wcml2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBoYmEtPm5ldGRldjsKLQlzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZCA9IHsgRVRIVE9PTF9HU0VUIH07CisJc3RydWN0IGV0aHRvb2xfY21kIGVjbWQ7CiAKIAlpZiAoIWRldl9ldGh0b29sX2dldF9zZXR0aW5ncyhuZXRkZXYsICZlY21kKSkgewogCQlscG9ydC0+bGlua19zdXBwb3J0ZWRfc3BlZWRzICY9CkBAIC02NzUsMTIgKzY3NSwxNSBAQAogCQlpZiAoZWNtZC5zdXBwb3J0ZWQgJiBTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsKQogCQkJbHBvcnQtPmxpbmtfc3VwcG9ydGVkX3NwZWVkcyB8PSBGQ19QT1JUU1BFRURfMTBHQklUOwogCi0JCWlmIChlY21kLnNwZWVkID09IFNQRUVEXzEwMDApCisJCXN3aXRjaCAoZXRodG9vbF9jbWRfc3BlZWQoJmVjbWQpKSB7CisJCWNhc2UgU1BFRURfMTAwMDoKIAkJCWxwb3J0LT5saW5rX3NwZWVkID0gRkNfUE9SVFNQRUVEXzFHQklUOwotCQlpZiAoZWNtZC5zcGVlZCA9PSBTUEVFRF8xMDAwMCkKKwkJCWJyZWFrOworCQljYXNlIFNQRUVEXzEwMDAwOgogCQkJbHBvcnQtPmxpbmtfc3BlZWQgPSBGQ19QT1JUU1BFRURfMTBHQklUOworCQkJYnJlYWs7CisJCX0KIAl9Ci0JcmV0dXJuOwogfQogc3RhdGljIGludCBibngyZmNfbGlua19vayhzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0KQogewpAQCAtMTEzMCw3ICsxMTMzLDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqcGh5c19kZXY7CiAKIAloYmEgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGJueDJmY19oYmEsIGtyZWYpOwotCUJOWDJGQ19IQkFfREJHKGhiYS0+Y3Rsci5scCwgIkludGVyZmFjZSBpcyBiZWluZyByZWxlYXNlZFxuIik7CisJQk5YMkZDX01JU0NfREJHKCJJbnRlcmZhY2UgaXMgYmVpbmcgcmVsZWFzZWRcbiIpOwogCiAJbmV0ZGV2ID0gaGJhLT5uZXRkZXY7CiAJcGh5c19kZXYgPSBoYmEtPnBoeXNfZGV2OwpAQCAtMTI1NCwyMCArMTI1NywxNyBAQAogc3RhdGljIHN0cnVjdCBmY19scG9ydCAqYm54MmZjX2lmX2NyZWF0ZShzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhLAogCQkJCSAgc3RydWN0IGRldmljZSAqcGFyZW50LCBpbnQgbnBpdikKIHsKLQlzdHJ1Y3QgZmNfbHBvcnQJCSpscG9ydCA9IE5VTEw7CisJc3RydWN0IGZjX2xwb3J0CQkqbHBvcnQsICpuX3BvcnQ7CiAJc3RydWN0IGZjb2VfcG9ydAkqcG9ydDsKIAlzdHJ1Y3QgU2NzaV9Ib3N0CSpzaG9zdDsKIAlzdHJ1Y3QgZmNfdnBvcnQJCSp2cG9ydCA9IGRldl90b192cG9ydChwYXJlbnQpOwogCWludAkJCXJjID0gMDsKIAogCS8qIEFsbG9jYXRlIFNjc2lfSG9zdCBzdHJ1Y3R1cmUgKi8KLQlpZiAoIW5waXYpIHsKLQkJbHBvcnQgPSBsaWJmY19ob3N0X2FsbG9jKCZibngyZmNfc2hvc3RfdGVtcGxhdGUsCi0JCQkJCSAgc2l6ZW9mKHN0cnVjdCBmY29lX3BvcnQpKTsKLQl9IGVsc2UgewotCQlscG9ydCA9IGxpYmZjX3Zwb3J0X2NyZWF0ZSh2cG9ydCwKLQkJCQkJICAgc2l6ZW9mKHN0cnVjdCBmY29lX3BvcnQpKTsKLQl9CisJaWYgKCFucGl2KQorCQlscG9ydCA9IGxpYmZjX2hvc3RfYWxsb2MoJmJueDJmY19zaG9zdF90ZW1wbGF0ZSwgc2l6ZW9mKCpwb3J0KSk7CisJZWxzZQorCQlscG9ydCA9IGxpYmZjX3Zwb3J0X2NyZWF0ZSh2cG9ydCwgc2l6ZW9mKCpwb3J0KSk7CiAKIAlpZiAoIWxwb3J0KSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggImNvdWxkIG5vdCBhbGxvY2F0ZSBzY3NpIGhvc3Qgc3RydWN0dXJlXG4iKTsKQEAgLTEyODUsNyArMTI4NSw2IEBACiAJCWdvdG8gbHBfY29uZmlnX2VycjsKIAogCWlmIChucGl2KSB7Ci0JCXZwb3J0ID0gZGV2X3RvX3Zwb3J0KHBhcmVudCk7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIlNldHRpbmcgdnBvcnQgbmFtZXMsIDB4JWxsWCAweCVsbFhcbiIsCiAJCQl2cG9ydC0+bm9kZV9uYW1lLCB2cG9ydC0+cG9ydF9uYW1lKTsKIAkJZmNfc2V0X3d3bm4obHBvcnQsIHZwb3J0LT5ub2RlX25hbWUpOwpAQCAtMTMxNCwxMiArMTMxMywxNyBAQAogCWZjX2hvc3RfcG9ydF90eXBlKGxwb3J0LT5ob3N0KSA9IEZDX1BPUlRUWVBFX1VOS05PV047CiAKIAkvKiBBbGxvY2F0ZSBleGNoYW5nZSBtYW5hZ2VyICovCi0JaWYgKCFucGl2KSB7CisJaWYgKCFucGl2KQogCQlyYyA9IGJueDJmY19lbV9jb25maWcobHBvcnQpOwotCQlpZiAocmMpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIkVycm9yIG9uIGJueDJmY19lbV9jb25maWdcbiIpOwotCQkJZ290byBzaG9zdF9lcnI7Ci0JCX0KKwllbHNlIHsKKwkJc2hvc3QgPSB2cG9ydF90b19zaG9zdCh2cG9ydCk7CisJCW5fcG9ydCA9IHNob3N0X3ByaXYoc2hvc3QpOworCQlyYyA9IGZjX2V4Y2hfbWdyX2xpc3RfY2xvbmUobl9wb3J0LCBscG9ydCk7CisJfQorCisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkVycm9yIG9uIGJueDJmY19lbV9jb25maWdcbiIpOworCQlnb3RvIHNob3N0X2VycjsKIAl9CiAKIAlibngyZmNfaW50ZXJmYWNlX2dldChoYmEpOwpAQCAtMTM1Miw4ICsxMzU2LDYgQEAKIAkvKiBGcmVlIGV4aXN0aW5nIHRyYW5zbWl0IHNrYnMgKi8KIAlmY29lX2NsZWFuX3BlbmRpbmdfcXVldWUobHBvcnQpOwogCi0JYm54MmZjX2ludGVyZmFjZV9wdXQoaGJhKTsKLQogCS8qIEZyZWUgcXVldWVkIHBhY2tldHMgZm9yIHRoZSByZWNlaXZlIHRocmVhZCAqLwogCWJueDJmY19jbGVhbl9yeF9xdWV1ZShscG9ydCk7CiAKQEAgLTEzNzIsNiArMTM3NCw4IEBACiAKIAkvKiBSZWxlYXNlIFNjc2lfSG9zdCAqLwogCXNjc2lfaG9zdF9wdXQobHBvcnQtPmhvc3QpOworCisJYm54MmZjX2ludGVyZmFjZV9wdXQoaGJhKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19od2kuYyBiL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2h3aS5jCmluZGV4IDFiNjgwZTIuLmY3NTZkNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2h3aS5jCisrKyBiL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2h3aS5jCkBAIC01MjIsNiArNTIyLDcgQEAKIAlmcCA9IGZjX2ZyYW1lX2FsbG9jKGxwb3J0LCBwYXlsb2FkX2xlbik7CiAJaWYgKCFmcCkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJmY19mcmFtZV9hbGxvYyBmYWlsdXJlXG4iKTsKKwkJa2ZyZWUodW5zb2xfZWxzKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNTQ3LDYgKzU0OCw3IEBACiAJCQkJICovCiAJCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZHJvcHBpbmcgRUxTIDB4JXhcbiIsIG9wKTsKIAkJCQlrZnJlZV9za2Ioc2tiKTsKKwkJCQlrZnJlZSh1bnNvbF9lbHMpOwogCQkJCXJldHVybjsKIAkJCX0KIAkJfQpAQCAtNTYzLDYgKzU2NSw3IEBACiAJfSBlbHNlIHsKIAkJQk5YMkZDX0hCQV9EQkcobHBvcnQsICJmaF9yX2N0bCA9IDB4JXhcbiIsIGZoLT5maF9yX2N0bCk7CiAJCWtmcmVlX3NrYihza2IpOworCQlrZnJlZSh1bnNvbF9lbHMpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfaW8uYyBiL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2lvLmMKaW5kZXggMWRlY2VmYi4uYjViNWMzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfaW8uYworKysgYi9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19pby5jCkBAIC0xNjYzLDYgKzE2NjMsMTIgQEAKIAl0Z3QgPSAoc3RydWN0IGJueDJmY19ycG9ydCAqKSZycFsxXTsKIAogCWlmICghdGVzdF9iaXQoQk5YMkZDX0ZMQUdfU0VTU0lPTl9SRUFEWSwgJnRndC0+ZmxhZ3MpKSB7CisJCWlmICh0ZXN0X2JpdChCTlgyRkNfRkxBR19VUExEX1JFUV9DT01QTCwgJnRndC0+ZmxhZ3MpKSAgeworCQkJc2NfY21kLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKKwkJCXNjX2NtZC0+c2NzaV9kb25lKHNjX2NtZCk7CisJCQlyZXR1cm4gMDsKKworCQl9CiAJCS8qCiAJCSAqIFNlc3Npb24gaXMgbm90IG9mZmxvYWRlZCB5ZXQuIExldCBTQ1NJLW1sIHJldHJ5CiAJCSAqIHRoZSBjb21tYW5kLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2NvbnN0YW50cy5jIGIvZHJpdmVycy9zY3NpL2NvbnN0YW50cy5jCmluZGV4IGQwYzgyMzQuLjQ1MGUwMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jb25zdGFudHMuYworKysgYi9kcml2ZXJzL3Njc2kvY29uc3RhbnRzLmMKQEAgLTM0LDcgKzM0LDcgQEAKIHN0YXRpYyBjb25zdCBjaGFyICogY2RiX2J5dGUwX25hbWVzW10gPSB7CiAvKiAwMC0wMyAqLyAiVGVzdCBVbml0IFJlYWR5IiwgIlJlemVybyBVbml0L1Jld2luZCIsIE5VTEwsICJSZXF1ZXN0IFNlbnNlIiwKIC8qIDA0LTA3ICovICJGb3JtYXQgVW5pdC9NZWRpdW0iLCAiUmVhZCBCbG9jayBMaW1pdHMiLCBOVUxMLAotCSAgICAiUmVhc3NzaWduIEJsb2NrcyIsCisJICAgICJSZWFzc2lnbiBCbG9ja3MiLAogLyogMDgtMGQgKi8gIlJlYWQoNikiLCBOVUxMLCAiV3JpdGUoNikiLCAiU2Vlayg2KSIsIE5VTEwsIE5VTEwsCiAvKiAwZS0xMiAqLyBOVUxMLCAiUmVhZCBSZXZlcnNlIiwgIldyaXRlIEZpbGVtYXJrcyIsICJTcGFjZSIsICJJbnF1aXJ5IiwgIAogLyogMTMtMTYgKi8gIlZlcmlmeSg2KSIsICJSZWNvdmVyIEJ1ZmZlcmVkIERhdGEiLCAiTW9kZSBTZWxlY3QoNikiLApAQCAtNzcyLDYgKzc3Miw3IEBACiAJezB4MzgwMiwgIkVzbiAtIHBvd2VyIG1hbmFnZW1lbnQgY2xhc3MgZXZlbnQifSwKIAl7MHgzODA0LCAiRXNuIC0gbWVkaWEgY2xhc3MgZXZlbnQifSwKIAl7MHgzODA2LCAiRXNuIC0gZGV2aWNlIGJ1c3kgY2xhc3MgZXZlbnQifSwKKwl7MHgzODA3LCAiVGhpbiBQcm92aXNpb25pbmcgc29mdCB0aHJlc2hvbGQgcmVhY2hlZCJ9LAogCiAJezB4MzkwMCwgIlNhdmluZyBwYXJhbWV0ZXJzIG5vdCBzdXBwb3J0ZWQifSwKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmMgYi9kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuYwppbmRleCBkZTc2NGVhLi5hMmE5YzdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuYworKysgYi9kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuYwpAQCAtNDUwLDEyICs0NTAsMTMgQEAKIAlyZXR1cm4gY3NrOwogfQogCi1zdGF0aWMgc3RydWN0IHJ0YWJsZSAqZmluZF9yb3V0ZV9pcHY0KF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAorc3RhdGljIHN0cnVjdCBydGFibGUgKmZpbmRfcm91dGVfaXB2NChzdHJ1Y3QgZmxvd2k0ICpmbDQsCisJCQkJICAgICAgX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCiAJCQkJICAgICAgX19iZTE2IHNwb3J0LCBfX2JlMTYgZHBvcnQsIHU4IHRvcykKIHsKIAlzdHJ1Y3QgcnRhYmxlICpydDsKIAotCXJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKCZpbml0X25ldCwgTlVMTCwgZGFkZHIsIHNhZGRyLAorCXJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKCZpbml0X25ldCwgZmw0LCBOVUxMLCBkYWRkciwgc2FkZHIsCiAJCQkJICAgZHBvcnQsIHNwb3J0LCBJUFBST1RPX1RDUCwgdG9zLCAwKTsKIAlpZiAoSVNfRVJSKHJ0KSkKIAkJcmV0dXJuIE5VTEw7CkBAIC00NzAsNiArNDcxLDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKIAlzdHJ1Y3QgY3hnYmlfZGV2aWNlICpjZGV2OwogCXN0cnVjdCBydGFibGUgKnJ0ID0gTlVMTDsKKwlzdHJ1Y3QgZmxvd2k0IGZsNDsKIAlzdHJ1Y3QgY3hnYmlfc29jayAqY3NrID0gTlVMTDsKIAl1bnNpZ25lZCBpbnQgbXR1ID0gMDsKIAlpbnQgcG9ydCA9IDB4RkZGRjsKQEAgLTQ4Miw3ICs0ODQsNyBAQAogCQlnb3RvIGVycl9vdXQ7CiAJfQogCi0JcnQgPSBmaW5kX3JvdXRlX2lwdjQoMCwgZGFkZHItPnNpbl9hZGRyLnNfYWRkciwgMCwgZGFkZHItPnNpbl9wb3J0LCAwKTsKKwlydCA9IGZpbmRfcm91dGVfaXB2NCgmZmw0LCAwLCBkYWRkci0+c2luX2FkZHIuc19hZGRyLCAwLCBkYWRkci0+c2luX3BvcnQsIDApOwogCWlmICghcnQpIHsKIAkJcHJfaW5mbygibm8gcm91dGUgdG8gaXB2NCAweCV4LCBwb3J0ICV1LlxuIiwKIAkJCWRhZGRyLT5zaW5fYWRkci5zX2FkZHIsIGRhZGRyLT5zaW5fcG9ydCk7CkBAIC01MzEsNyArNTMzLDcgQEAKIAljc2stPmRhZGRyLnNpbl9hZGRyLnNfYWRkciA9IGRhZGRyLT5zaW5fYWRkci5zX2FkZHI7CiAJY3NrLT5kYWRkci5zaW5fcG9ydCA9IGRhZGRyLT5zaW5fcG9ydDsKIAljc2stPmRhZGRyLnNpbl9mYW1pbHkgPSBkYWRkci0+c2luX2ZhbWlseTsKLQljc2stPnNhZGRyLnNpbl9hZGRyLnNfYWRkciA9IHJ0LT5ydF9zcmM7CisJY3NrLT5zYWRkci5zaW5fYWRkci5zX2FkZHIgPSBmbDQuc2FkZHI7CiAKIAlyZXR1cm4gY3NrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGMzOTV4LmMgYi9kcml2ZXJzL3Njc2kvZGMzOTV4LmMKaW5kZXggYjEwYjM4NC4uZjViNzE4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RjMzk1eC5jCisrKyBiL2RyaXZlcnMvc2NzaS9kYzM5NXguYwpAQCAtNzc4LDggKzc3OCw4IEBACiBzdGF0aWMgdm9pZCBzcmJfd2FpdGluZ19pbnNlcnQoc3RydWN0IERldmljZUN0bEJsayAqZGNiLAogCQlzdHJ1Y3QgU2NzaVJlcUJsayAqc3JiKQogewotCWRwcmludGtkYmcoREJHXzAsICJzcmJfd2FpdGluZ19pbnNlcnQ6IChwaWQjJWxpKSA8JTAyaS0laT4gc3JiPSVwXG4iLAotCQlzcmItPmNtZC0+c2VyaWFsX251bWJlciwgZGNiLT50YXJnZXRfaWQsIGRjYi0+dGFyZ2V0X2x1biwgc3JiKTsKKwlkcHJpbnRrZGJnKERCR18wLCAic3JiX3dhaXRpbmdfaW5zZXJ0OiAoMHglcCkgPCUwMmktJWk+IHNyYj0lcFxuIiwKKwkJc3JiLT5jbWQsIGRjYi0+dGFyZ2V0X2lkLCBkY2ItPnRhcmdldF9sdW4sIHNyYik7CiAJbGlzdF9hZGQoJnNyYi0+bGlzdCwgJmRjYi0+c3JiX3dhaXRpbmdfbGlzdCk7CiB9CiAKQEAgLTc4NywxNiArNzg3LDE2IEBACiBzdGF0aWMgdm9pZCBzcmJfd2FpdGluZ19hcHBlbmQoc3RydWN0IERldmljZUN0bEJsayAqZGNiLAogCQlzdHJ1Y3QgU2NzaVJlcUJsayAqc3JiKQogewotCWRwcmludGtkYmcoREJHXzAsICJzcmJfd2FpdGluZ19hcHBlbmQ6IChwaWQjJWxpKSA8JTAyaS0laT4gc3JiPSVwXG4iLAotCQkgc3JiLT5jbWQtPnNlcmlhbF9udW1iZXIsIGRjYi0+dGFyZ2V0X2lkLCBkY2ItPnRhcmdldF9sdW4sIHNyYik7CisJZHByaW50a2RiZyhEQkdfMCwgInNyYl93YWl0aW5nX2FwcGVuZDogKDB4JXApIDwlMDJpLSVpPiBzcmI9JXBcbiIsCisJCSBzcmItPmNtZCwgZGNiLT50YXJnZXRfaWQsIGRjYi0+dGFyZ2V0X2x1biwgc3JiKTsKIAlsaXN0X2FkZF90YWlsKCZzcmItPmxpc3QsICZkY2ItPnNyYl93YWl0aW5nX2xpc3QpOwogfQogCiAKIHN0YXRpYyB2b2lkIHNyYl9nb2luZ19hcHBlbmQoc3RydWN0IERldmljZUN0bEJsayAqZGNiLCBzdHJ1Y3QgU2NzaVJlcUJsayAqc3JiKQogewotCWRwcmludGtkYmcoREJHXzAsICJzcmJfZ29pbmdfYXBwZW5kOiAocGlkIyVsaSkgPCUwMmktJWk+IHNyYj0lcFxuIiwKLQkJc3JiLT5jbWQtPnNlcmlhbF9udW1iZXIsIGRjYi0+dGFyZ2V0X2lkLCBkY2ItPnRhcmdldF9sdW4sIHNyYik7CisJZHByaW50a2RiZyhEQkdfMCwgInNyYl9nb2luZ19hcHBlbmQ6ICgweCVwKSA8JTAyaS0laT4gc3JiPSVwXG4iLAorCQlzcmItPmNtZCwgZGNiLT50YXJnZXRfaWQsIGRjYi0+dGFyZ2V0X2x1biwgc3JiKTsKIAlsaXN0X2FkZF90YWlsKCZzcmItPmxpc3QsICZkY2ItPnNyYl9nb2luZ19saXN0KTsKIH0KIApAQCAtODA1LDggKzgwNSw4IEBACiB7CiAJc3RydWN0IFNjc2lSZXFCbGsgKmk7CiAJc3RydWN0IFNjc2lSZXFCbGsgKnRtcDsKLQlkcHJpbnRrZGJnKERCR18wLCAic3JiX2dvaW5nX3JlbW92ZTogKHBpZCMlbGkpIDwlMDJpLSVpPiBzcmI9JXBcbiIsCi0JCXNyYi0+Y21kLT5zZXJpYWxfbnVtYmVyLCBkY2ItPnRhcmdldF9pZCwgZGNiLT50YXJnZXRfbHVuLCBzcmIpOworCWRwcmludGtkYmcoREJHXzAsICJzcmJfZ29pbmdfcmVtb3ZlOiAoMHglcCkgPCUwMmktJWk+IHNyYj0lcFxuIiwKKwkJc3JiLT5jbWQsIGRjYi0+dGFyZ2V0X2lkLCBkY2ItPnRhcmdldF9sdW4sIHNyYik7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaSwgdG1wLCAmZGNiLT5zcmJfZ29pbmdfbGlzdCwgbGlzdCkKIAkJaWYgKGkgPT0gc3JiKSB7CkBAIC04MjEsOCArODIxLDggQEAKIHsKIAlzdHJ1Y3QgU2NzaVJlcUJsayAqaTsKIAlzdHJ1Y3QgU2NzaVJlcUJsayAqdG1wOwotCWRwcmludGtkYmcoREJHXzAsICJzcmJfd2FpdGluZ19yZW1vdmU6IChwaWQjJWxpKSA8JTAyaS0laT4gc3JiPSVwXG4iLAotCQlzcmItPmNtZC0+c2VyaWFsX251bWJlciwgZGNiLT50YXJnZXRfaWQsIGRjYi0+dGFyZ2V0X2x1biwgc3JiKTsKKwlkcHJpbnRrZGJnKERCR18wLCAic3JiX3dhaXRpbmdfcmVtb3ZlOiAoMHglcCkgPCUwMmktJWk+IHNyYj0lcFxuIiwKKwkJc3JiLT5jbWQsIGRjYi0+dGFyZ2V0X2lkLCBkY2ItPnRhcmdldF9sdW4sIHNyYik7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaSwgdG1wLCAmZGNiLT5zcmJfd2FpdGluZ19saXN0LCBsaXN0KQogCQlpZiAoaSA9PSBzcmIpIHsKQEAgLTgzNiw4ICs4MzYsOCBAQAogCQlzdHJ1Y3QgU2NzaVJlcUJsayAqc3JiKQogewogCWRwcmludGtkYmcoREJHXzAsCi0JCSJzcmJfZ29pbmdfdG9fd2FpdGluZ19tb3ZlOiAocGlkIyVsaSkgPCUwMmktJWk+IHNyYj0lcFxuIiwKLQkJc3JiLT5jbWQtPnNlcmlhbF9udW1iZXIsIGRjYi0+dGFyZ2V0X2lkLCBkY2ItPnRhcmdldF9sdW4sIHNyYik7CisJCSJzcmJfZ29pbmdfdG9fd2FpdGluZ19tb3ZlOiAoMHglcCkgPCUwMmktJWk+IHNyYj0lcFxuIiwKKwkJc3JiLT5jbWQsIGRjYi0+dGFyZ2V0X2lkLCBkY2ItPnRhcmdldF9sdW4sIHNyYik7CiAJbGlzdF9tb3ZlKCZzcmItPmxpc3QsICZkY2ItPnNyYl93YWl0aW5nX2xpc3QpOwogfQogCkBAIC04NDYsOCArODQ2LDggQEAKIAkJc3RydWN0IFNjc2lSZXFCbGsgKnNyYikKIHsKIAlkcHJpbnRrZGJnKERCR18wLAotCQkic3JiX3dhaXRpbmdfdG9fZ29pbmdfbW92ZTogKHBpZCMlbGkpIDwlMDJpLSVpPiBzcmI9JXBcbiIsCi0JCXNyYi0+Y21kLT5zZXJpYWxfbnVtYmVyLCBkY2ItPnRhcmdldF9pZCwgZGNiLT50YXJnZXRfbHVuLCBzcmIpOworCQkic3JiX3dhaXRpbmdfdG9fZ29pbmdfbW92ZTogKDB4JXApIDwlMDJpLSVpPiBzcmI9JXBcbiIsCisJCXNyYi0+Y21kLCBkY2ItPnRhcmdldF9pZCwgZGNiLT50YXJnZXRfbHVuLCBzcmIpOwogCWxpc3RfbW92ZSgmc3JiLT5saXN0LCAmZGNiLT5zcmJfZ29pbmdfbGlzdCk7CiB9CiAKQEAgLTk4Miw4ICs5ODIsOCBAQAogewogCWludCBuc2VnOwogCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciA9IGNtZC0+c2NfZGF0YV9kaXJlY3Rpb247Ci0JZHByaW50a2RiZyhEQkdfMCwgImJ1aWxkX3NyYjogKHBpZCMlbGkpIDwlMDJpLSVpPlxuIiwKLQkJY21kLT5zZXJpYWxfbnVtYmVyLCBkY2ItPnRhcmdldF9pZCwgZGNiLT50YXJnZXRfbHVuKTsKKwlkcHJpbnRrZGJnKERCR18wLCAiYnVpbGRfc3JiOiAoMHglcCkgPCUwMmktJWk+XG4iLAorCQljbWQsIGRjYi0+dGFyZ2V0X2lkLCBkY2ItPnRhcmdldF9sdW4pOwogCiAJc3JiLT5kY2IgPSBkY2I7CiAJc3JiLT5jbWQgPSBjbWQ7CkBAIC0xMDg2LDggKzEwODYsOCBAQAogCXN0cnVjdCBTY3NpUmVxQmxrICpzcmI7CiAJc3RydWN0IEFkYXB0ZXJDdGxCbGsgKmFjYiA9CiAJICAgIChzdHJ1Y3QgQWRhcHRlckN0bEJsayAqKWNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKLQlkcHJpbnRrZGJnKERCR18wLCAicXVldWVfY29tbWFuZDogKHBpZCMlbGkpIDwlMDJpLSVpPiBjbW5kPTB4JTAyeFxuIiwKLQkJY21kLT5zZXJpYWxfbnVtYmVyLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4sIGNtZC0+Y21uZFswXSk7CisJZHByaW50a2RiZyhEQkdfMCwgInF1ZXVlX2NvbW1hbmQ6ICgweCVwKSA8JTAyaS0laT4gY21uZD0weCUwMnhcbiIsCisJCWNtZCwgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuLCBjbWQtPmNtbmRbMF0pOwogCiAJLyogQXNzdW1lIEJBRF9UQVJHRVQ7IHdpbGwgYmUgY2xlYXJlZCBsYXRlciAqLwogCWNtZC0+cmVzdWx0ID0gRElEX0JBRF9UQVJHRVQgPDwgMTY7CkBAIC0xMTQwLDcgKzExNDAsNyBAQAogCQkvKiBwcm9jZXNzIGltbWVkaWF0ZWx5ICovCiAJCXNlbmRfc3JiKGFjYiwgc3JiKTsKIAl9Ci0JZHByaW50a2RiZyhEQkdfMSwgInF1ZXVlX2NvbW1hbmQ6IChwaWQjJWxpKSBkb25lXG4iLCBjbWQtPnNlcmlhbF9udW1iZXIpOworCWRwcmludGtkYmcoREJHXzEsICJxdWV1ZV9jb21tYW5kOiAoMHglcCkgZG9uZVxuIiwgY21kKTsKIAlyZXR1cm4gMDsKIAogY29tcGxldGU6CkBAIC0xMjAzLDkgKzEyMDMsOSBAQAogCQkJZHByaW50a2woS0VSTl9JTkZPLCAiZHVtcDogc3JiPSVwIGNtZD0lcCBPT09QUyFcbiIsCiAJCQkJc3JiLCBzcmItPmNtZCk7CiAJCWVsc2UKLQkJCWRwcmludGtsKEtFUk5fSU5GTywgImR1bXA6IHNyYj0lcCBjbWQ9JXAgKHBpZCMlbGkpICIKKwkJCWRwcmludGtsKEtFUk5fSU5GTywgImR1bXA6IHNyYj0lcCBjbWQ9JXAgIgogCQkJCSAiY21uZD0weCUwMnggPCUwMmktJWk+XG4iLAotCQkJCXNyYiwgc3JiLT5jbWQsIHNyYi0+Y21kLT5zZXJpYWxfbnVtYmVyLAorCQkJCXNyYiwgc3JiLT5jbWQsCiAJCQkJc3JiLT5jbWQtPmNtbmRbMF0sIHNyYi0+Y21kLT5kZXZpY2UtPmlkLAogCQkJICAgICAgIAlzcmItPmNtZC0+ZGV2aWNlLT5sdW4pOwogCQlwcmludGsoIiAgc2dsaXN0PSVwIGNudD0laSBpZHg9JWkgbGVuPSV6dVxuIiwKQEAgLTEzMDEsOCArMTMwMSw4IEBACiAJc3RydWN0IEFkYXB0ZXJDdGxCbGsgKmFjYiA9CiAJCShzdHJ1Y3QgQWRhcHRlckN0bEJsayAqKWNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKIAlkcHJpbnRrbChLRVJOX0lORk8sCi0JCSJlaF9idXNfcmVzZXQ6IChwaWQjJWxpKSB0YXJnZXQ9PCUwMmktJWk+IGNtZD0lcFxuIiwKLQkJY21kLT5zZXJpYWxfbnVtYmVyLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4sIGNtZCk7CisJCSJlaF9idXNfcmVzZXQ6ICgwJXApIHRhcmdldD08JTAyaS0laT4gY21kPSVwXG4iLAorCQljbWQsIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1biwgY21kKTsKIAogCWlmICh0aW1lcl9wZW5kaW5nKCZhY2ItPndhaXRpbmdfdGltZXIpKQogCQlkZWxfdGltZXIoJmFjYi0+d2FpdGluZ190aW1lcik7CkBAIC0xMzY4LDggKzEzNjgsOCBAQAogCSAgICAoc3RydWN0IEFkYXB0ZXJDdGxCbGsgKiljbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7CiAJc3RydWN0IERldmljZUN0bEJsayAqZGNiOwogCXN0cnVjdCBTY3NpUmVxQmxrICpzcmI7Ci0JZHByaW50a2woS0VSTl9JTkZPLCAiZWhfYWJvcnQ6IChwaWQjJWxpKSB0YXJnZXQ9PCUwMmktJWk+IGNtZD0lcFxuIiwKLQkJY21kLT5zZXJpYWxfbnVtYmVyLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4sIGNtZCk7CisJZHByaW50a2woS0VSTl9JTkZPLCAiZWhfYWJvcnQ6ICgweCVwKSB0YXJnZXQ9PCUwMmktJWk+IGNtZD0lcFxuIiwKKwkJY21kLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4sIGNtZCk7CiAKIAlkY2IgPSBmaW5kX2RjYihhY2IsIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1bik7CiAJaWYgKCFkY2IpIHsKQEAgLTE0OTUsOCArMTQ5NSw4IEBACiAJdTE2IHNfc3RhdDIsIHJldHVybl9jb2RlOwogCXU4IHNfc3RhdCwgc2NzaWNvbW1hbmQsIGksIGlkZW50aWZ5X21lc3NhZ2U7CiAJdTggKnB0cjsKLQlkcHJpbnRrZGJnKERCR18wLCAic3RhcnRfc2NzaTogKHBpZCMlbGkpIDwlMDJpLSVpPiBzcmI9JXBcbiIsCi0JCXNyYi0+Y21kLT5zZXJpYWxfbnVtYmVyLCBkY2ItPnRhcmdldF9pZCwgZGNiLT50YXJnZXRfbHVuLCBzcmIpOworCWRwcmludGtkYmcoREJHXzAsICJzdGFydF9zY3NpOiAoMHglcCkgPCUwMmktJWk+IHNyYj0lcFxuIiwKKwkJZGNiLT50YXJnZXRfaWQsIGRjYi0+dGFyZ2V0X2x1biwgc3JiKTsKIAogCXNyYi0+dGFnX251bWJlciA9IFRBR19OT05FOwkvKiBhY2ItPnRhZ19tYXhfbnVtOiBoYWQgZXJyb3IgcmVhZCBpbiBlZXByb20gKi8KIApAQCAtMTUwNSw4ICsxNTA1LDggQEAKIAlzX3N0YXQyID0gREMzOTV4X3JlYWQxNihhY2IsIFRSTV9TMTA0MF9TQ1NJX1NUQVRVUyk7CiAjaWYgMQogCWlmIChzX3N0YXQgJiAweDIwIC8qIHNfc3RhdDIgJiAweDAyMDAwICovICkgewotCQlkcHJpbnRrZGJnKERCR19LRywgInN0YXJ0X3Njc2k6IChwaWQjJWxpKSBCVVNZICUwMnggJTA0eFxuIiwKLQkJCXNyYi0+Y21kLT5zZXJpYWxfbnVtYmVyLCBzX3N0YXQsIHNfc3RhdDIpOworCQlkcHJpbnRrZGJnKERCR19LRywgInN0YXJ0X3Njc2k6ICgweCVwKSBCVVNZICUwMnggJTA0eFxuIiwKKwkJCXNfc3RhdCwgc19zdGF0Mik7CiAJCS8qCiAJCSAqIFRyeSBhbnl3YXk/CiAJCSAqCkBAIC0xNTIyLDE2ICsxNTIyLDE1IEBACiAJfQogI2VuZGlmCiAJaWYgKGFjYi0+YWN0aXZlX2RjYikgewotCQlkcHJpbnRrbChLRVJOX0RFQlVHLCAic3RhcnRfc2NzaTogKHBpZCMlbGkpIEF0dGVtcHQgdG8gc3RhcnQgYSIKLQkJCSJjb21tYW5kIHdoaWxlIGFub3RoZXIgY29tbWFuZCAocGlkIyVsaSkgaXMgYWN0aXZlLiIsCi0JCQlzcmItPmNtZC0+c2VyaWFsX251bWJlciwKKwkJZHByaW50a2woS0VSTl9ERUJVRywgInN0YXJ0X3Njc2k6ICgweCVwKSBBdHRlbXB0IHRvIHN0YXJ0IGEiCisJCQkiY29tbWFuZCB3aGlsZSBhbm90aGVyIGNvbW1hbmQgKDB4JXApIGlzIGFjdGl2ZS4iLAorCQkJc3JiLT5jbWQsCiAJCQlhY2ItPmFjdGl2ZV9kY2ItPmFjdGl2ZV9zcmIgPwotCQkJICAgIGFjYi0+YWN0aXZlX2RjYi0+YWN0aXZlX3NyYi0+Y21kLT5zZXJpYWxfbnVtYmVyIDogMCk7CisJCQkgICAgYWNiLT5hY3RpdmVfZGNiLT5hY3RpdmVfc3JiLT5jbWQgOiAwKTsKIAkJcmV0dXJuIDE7CiAJfQogCWlmIChEQzM5NXhfcmVhZDE2KGFjYiwgVFJNX1MxMDQwX1NDU0lfU1RBVFVTKSAmIFNDU0lJTlRFUlJVUFQpIHsKLQkJZHByaW50a2RiZyhEQkdfS0csICJzdGFydF9zY3NpOiAocGlkIyVsaSkgRmFpbGVkIChidXN5KVxuIiwKLQkJCXNyYi0+Y21kLT5zZXJpYWxfbnVtYmVyKTsKKwkJZHByaW50a2RiZyhEQkdfS0csICJzdGFydF9zY3NpOiAoMHglcCkgRmFpbGVkIChidXN5KVxuIiwgc3JiLT5jbWQpOwogCQlyZXR1cm4gMTsKIAl9CiAJLyogQWxsb3cgc3RhcnRpbmcgb2YgU0NTSSBjb21tYW5kcyBoYWxmIGEgc2Vjb25kIGJlZm9yZSB3ZSBhbGxvdyB0aGUgbWlkLWxldmVsCkBAIC0xNjAzLDkgKzE2MDIsOSBAQAogCQkJdGFnX251bWJlcisrOwogCQl9CiAJCWlmICh0YWdfbnVtYmVyID49IGRjYi0+bWF4X2NvbW1hbmQpIHsKLQkJCWRwcmludGtsKEtFUk5fV0FSTklORywgInN0YXJ0X3Njc2k6IChwaWQjJWxpKSAiCisJCQlkcHJpbnRrbChLRVJOX1dBUk5JTkcsICJzdGFydF9zY3NpOiAoMHglcCkgIgogCQkJCSJPdXQgb2YgdGFncyB0YXJnZXQ9PCUwMmktJWk+KVxuIiwKLQkJCQlzcmItPmNtZC0+c2VyaWFsX251bWJlciwgc3JiLT5jbWQtPmRldmljZS0+aWQsCisJCQkJc3JiLT5jbWQsIHNyYi0+Y21kLT5kZXZpY2UtPmlkLAogCQkJCXNyYi0+Y21kLT5kZXZpY2UtPmx1bik7CiAJCQlzcmItPnN0YXRlID0gU1JCX1JFQURZOwogCQkJREMzOTV4X3dyaXRlMTYoYWNiLCBUUk1fUzEwNDBfU0NTSV9DT05UUk9MLApAQCAtMTYyMyw4ICsxNjIyLDggQEAKICNlbmRpZgogLypwb2xsaW5nOiovCiAJLyogU2VuZCBDREIgLi5jb21tYW5kIGJsb2NrIC4uLi4uLi4uLiAqLwotCWRwcmludGtkYmcoREJHX0tHLCAic3RhcnRfc2NzaTogKHBpZCMlbGkpIDwlMDJpLSVpPiBjbW5kPTB4JTAyeCB0YWc9JWlcbiIsCi0JCXNyYi0+Y21kLT5zZXJpYWxfbnVtYmVyLCBzcmItPmNtZC0+ZGV2aWNlLT5pZCwgc3JiLT5jbWQtPmRldmljZS0+bHVuLAorCWRwcmludGtkYmcoREJHX0tHLCAic3RhcnRfc2NzaTogKDB4JXApIDwlMDJpLSVpPiBjbW5kPTB4JTAyeCB0YWc9JWlcbiIsCisJCXNyYi0+Y21kLCBzcmItPmNtZC0+ZGV2aWNlLT5pZCwgc3JiLT5jbWQtPmRldmljZS0+bHVuLAogCQlzcmItPmNtZC0+Y21uZFswXSwgc3JiLT50YWdfbnVtYmVyKTsKIAlpZiAoc3JiLT5mbGFnICYgQVVUT19SRVFTRU5TRSkgewogCQlEQzM5NXhfd3JpdGU4KGFjYiwgVFJNX1MxMDQwX1NDU0lfRklGTywgUkVRVUVTVF9TRU5TRSk7CkBAIC0xNjQ3LDggKzE2NDYsOCBAQAogCQkgKiB3ZSBjYXVnaHQgYW4gaW50ZXJydXB0IChtdXN0IGJlIHJlc2V0IG9yIHJlc2VsZWN0aW9uIC4uLiApCiAJCSAqIDogTGV0J3MgcHJvY2VzcyBpdCBmaXJzdCEKIAkJICovCi0JCWRwcmludGtkYmcoREJHXzAsICJzdGFydF9zY3NpOiAocGlkIyVsaSkgPCUwMmktJWk+IEZhaWxlZCAtIGJ1c3lcbiIsCi0JCQlzcmItPmNtZC0+c2VyaWFsX251bWJlciwgZGNiLT50YXJnZXRfaWQsIGRjYi0+dGFyZ2V0X2x1bik7CisJCWRwcmludGtkYmcoREJHXzAsICJzdGFydF9zY3NpOiAoMHglcCkgPCUwMmktJWk+IEZhaWxlZCAtIGJ1c3lcbiIsCisJCQlzcmItPmNtZCwgZGNiLT50YXJnZXRfaWQsIGRjYi0+dGFyZ2V0X2x1bik7CiAJCXNyYi0+c3RhdGUgPSBTUkJfUkVBRFk7CiAJCWZyZWVfdGFnKGRjYiwgc3JiKTsKIAkJc3JiLT5tc2dfY291bnQgPSAwOwpAQCAtMTg0Myw3ICsxODQyLDcgQEAKIHN0YXRpYyB2b2lkIG1zZ291dF9waGFzZTAoc3RydWN0IEFkYXB0ZXJDdGxCbGsgKmFjYiwgc3RydWN0IFNjc2lSZXFCbGsgKnNyYiwKIAkJdTE2ICpwc2NzaV9zdGF0dXMpCiB7Ci0JZHByaW50a2RiZyhEQkdfMCwgIm1zZ291dF9waGFzZTA6IChwaWQjJWxpKVxuIiwgc3JiLT5jbWQtPnNlcmlhbF9udW1iZXIpOworCWRwcmludGtkYmcoREJHXzAsICJtc2dvdXRfcGhhc2UwOiAoMHglcClcbiIsIHNyYi0+Y21kKTsKIAlpZiAoc3JiLT5zdGF0ZSAmIChTUkJfVU5FWFBFQ1RfUkVTRUwgKyBTUkJfQUJPUlRfU0VOVCkpCiAJCSpwc2NzaV9zdGF0dXMgPSBQSF9CVVNfRlJFRTsJLyouLiBpbml0aWFsIHBoYXNlICovCiAKQEAgLTE4NTcsMTggKzE4NTYsMTggQEAKIHsKIAl1MTYgaTsKIAl1OCAqcHRyOwotCWRwcmludGtkYmcoREJHXzAsICJtc2dvdXRfcGhhc2UxOiAocGlkIyVsaSlcbiIsIHNyYi0+Y21kLT5zZXJpYWxfbnVtYmVyKTsKKwlkcHJpbnRrZGJnKERCR18wLCAibXNnb3V0X3BoYXNlMTogKDB4JXApXG4iLCBzcmItPmNtZCk7CiAKIAljbGVhcl9maWZvKGFjYiwgIm1zZ291dF9waGFzZTEiKTsKIAlpZiAoIShzcmItPnN0YXRlICYgU1JCX01TR09VVCkpIHsKIAkJc3JiLT5zdGF0ZSB8PSBTUkJfTVNHT1VUOwogCQlkcHJpbnRrbChLRVJOX0RFQlVHLAotCQkJIm1zZ291dF9waGFzZTE6IChwaWQjJWxpKSBQaGFzZSB1bmV4cGVjdGVkXG4iLAotCQkJc3JiLT5jbWQtPnNlcmlhbF9udW1iZXIpOwkvKiBTbyB3aGF0ID8gKi8KKwkJCSJtc2dvdXRfcGhhc2UxOiAoMHglcCkgUGhhc2UgdW5leHBlY3RlZFxuIiwKKwkJCXNyYi0+Y21kKTsJLyogU28gd2hhdCA/ICovCiAJfQogCWlmICghc3JiLT5tc2dfY291bnQpIHsKLQkJZHByaW50a2RiZyhEQkdfMCwgIm1zZ291dF9waGFzZTE6IChwaWQjJWxpKSBOT1AgbXNnXG4iLAotCQkJc3JiLT5jbWQtPnNlcmlhbF9udW1iZXIpOworCQlkcHJpbnRrZGJnKERCR18wLCAibXNnb3V0X3BoYXNlMTogKDB4JXApIE5PUCBtc2dcbiIsCisJCQlzcmItPmNtZCk7CiAJCURDMzk1eF93cml0ZTgoYWNiLCBUUk1fUzEwNDBfU0NTSV9GSUZPLCBNU0dfTk9QKTsKIAkJREMzOTV4X3dyaXRlMTYoYWNiLCBUUk1fUzEwNDBfU0NTSV9DT05UUk9MLCBET19EQVRBTEFUQ0gpOwkvKiBpdCdzIGltcG9ydGFudCBmb3IgYXRuIHN0b3AgKi8KIAkJREMzOTV4X3dyaXRlOChhY2IsIFRSTV9TMTA0MF9TQ1NJX0NPTU1BTkQsIFNDTURfRklGT19PVVQpOwpAQCAtMTg4OCw3ICsxODg3LDcgQEAKIHN0YXRpYyB2b2lkIGNvbW1hbmRfcGhhc2UwKHN0cnVjdCBBZGFwdGVyQ3RsQmxrICphY2IsIHN0cnVjdCBTY3NpUmVxQmxrICpzcmIsCiAJCXUxNiAqcHNjc2lfc3RhdHVzKQogewotCWRwcmludGtkYmcoREJHXzAsICJjb21tYW5kX3BoYXNlMDogKHBpZCMlbGkpXG4iLCBzcmItPmNtZC0+c2VyaWFsX251bWJlcik7CisJZHByaW50a2RiZyhEQkdfMCwgImNvbW1hbmRfcGhhc2UwOiAoMHglcClcbiIsIHNyYi0+Y21kKTsKIAlEQzM5NXhfd3JpdGUxNihhY2IsIFRSTV9TMTA0MF9TQ1NJX0NPTlRST0wsIERPX0RBVEFMQVRDSCk7CiB9CiAKQEAgLTE4OTksNyArMTg5OCw3IEBACiAJc3RydWN0IERldmljZUN0bEJsayAqZGNiOwogCXU4ICpwdHI7CiAJdTE2IGk7Ci0JZHByaW50a2RiZyhEQkdfMCwgImNvbW1hbmRfcGhhc2UxOiAocGlkIyVsaSlcbiIsIHNyYi0+Y21kLT5zZXJpYWxfbnVtYmVyKTsKKwlkcHJpbnRrZGJnKERCR18wLCAiY29tbWFuZF9waGFzZTE6ICgweCVwKVxuIiwgc3JiLT5jbWQpOwogCiAJY2xlYXJfZmlmbyhhY2IsICJjb21tYW5kX3BoYXNlMSIpOwogCURDMzk1eF93cml0ZTE2KGFjYiwgVFJNX1MxMDQwX1NDU0lfQ09OVFJPTCwgRE9fQ0xSQVROKTsKQEAgLTIwNDEsOCArMjA0MCw4IEBACiAJc3RydWN0IERldmljZUN0bEJsayAqZGNiID0gc3JiLT5kY2I7CiAJdTE2IHNjc2lfc3RhdHVzID0gKnBzY3NpX3N0YXR1czsKIAl1MzIgZF9sZWZ0X2NvdW50ZXIgPSAwOwotCWRwcmludGtkYmcoREJHXzAsICJkYXRhX291dF9waGFzZTA6IChwaWQjJWxpKSA8JTAyaS0laT5cbiIsCi0JCXNyYi0+Y21kLT5zZXJpYWxfbnVtYmVyLCBzcmItPmNtZC0+ZGV2aWNlLT5pZCwgc3JiLT5jbWQtPmRldmljZS0+bHVuKTsKKwlkcHJpbnRrZGJnKERCR18wLCAiZGF0YV9vdXRfcGhhc2UwOiAoMHglcCkgPCUwMmktJWk+XG4iLAorCQlzcmItPmNtZCwgc3JiLT5jbWQtPmRldmljZS0+aWQsIHNyYi0+Y21kLT5kZXZpY2UtPmx1bik7CiAKIAkvKgogCSAqIEtHOiBXZSBuZWVkIHRvIGRyYWluIHRoZSBidWZmZXJzIGJlZm9yZSB3ZSBkcmF3IGFueSBjb25jbHVzaW9ucyEKQEAgLTIxNzEsOCArMjE3MCw4IEBACiBzdGF0aWMgdm9pZCBkYXRhX291dF9waGFzZTEoc3RydWN0IEFkYXB0ZXJDdGxCbGsgKmFjYiwgc3RydWN0IFNjc2lSZXFCbGsgKnNyYiwKIAkJdTE2ICpwc2NzaV9zdGF0dXMpCiB7Ci0JZHByaW50a2RiZyhEQkdfMCwgImRhdGFfb3V0X3BoYXNlMTogKHBpZCMlbGkpIDwlMDJpLSVpPlxuIiwKLQkJc3JiLT5jbWQtPnNlcmlhbF9udW1iZXIsIHNyYi0+Y21kLT5kZXZpY2UtPmlkLCBzcmItPmNtZC0+ZGV2aWNlLT5sdW4pOworCWRwcmludGtkYmcoREJHXzAsICJkYXRhX291dF9waGFzZTE6ICgweCVwKSA8JTAyaS0laT5cbiIsCisJCXNyYi0+Y21kLCBzcmItPmNtZC0+ZGV2aWNlLT5pZCwgc3JiLT5jbWQtPmRldmljZS0+bHVuKTsKIAljbGVhcl9maWZvKGFjYiwgImRhdGFfb3V0X3BoYXNlMSIpOwogCS8qIGRvIHByZXBhcmUgYmVmb3JlIHRyYW5zZmVyIHdoZW4gZGF0YSBvdXQgcGhhc2UgKi8KIAlkYXRhX2lvX3RyYW5zZmVyKGFjYiwgc3JiLCBYRkVSREFUQU9VVCk7CkBAIC0yMTgzLDggKzIxODIsOCBAQAogewogCXUxNiBzY3NpX3N0YXR1cyA9ICpwc2NzaV9zdGF0dXM7CiAKLQlkcHJpbnRrZGJnKERCR18wLCAiZGF0YV9pbl9waGFzZTA6IChwaWQjJWxpKSA8JTAyaS0laT5cbiIsCi0JCXNyYi0+Y21kLT5zZXJpYWxfbnVtYmVyLCBzcmItPmNtZC0+ZGV2aWNlLT5pZCwgc3JiLT5jbWQtPmRldmljZS0+bHVuKTsKKwlkcHJpbnRrZGJnKERCR18wLCAiZGF0YV9pbl9waGFzZTA6ICgweCVwKSA8JTAyaS0laT5cbiIsCisJCXNyYi0+Y21kLCBzcmItPmNtZC0+ZGV2aWNlLT5pZCwgc3JiLT5jbWQtPmRldmljZS0+bHVuKTsKIAogCS8qCiAJICogS0c6IERhdGFJbiBpcyBtdWNoIG1vcmUgdHJpY2t5IHRoYW4gRGF0YU91dC4gV2hlbiB0aGUgZGV2aWNlIGlzIGZpbmlzaGVkCkBAIC0yMjA0LDggKzIyMDMsOCBAQAogCQl1bnNpZ25lZCBpbnQgc2MsIGZjOwogCiAJCWlmIChzY3NpX3N0YXR1cyAmIFBBUklUWUVSUk9SKSB7Ci0JCQlkcHJpbnRrbChLRVJOX0lORk8sICJkYXRhX2luX3BoYXNlMDogKHBpZCMlbGkpICIKLQkJCQkiUGFyaXR5IEVycm9yXG4iLCBzcmItPmNtZC0+c2VyaWFsX251bWJlcik7CisJCQlkcHJpbnRrbChLRVJOX0lORk8sICJkYXRhX2luX3BoYXNlMDogKDB4JXApICIKKwkJCQkiUGFyaXR5IEVycm9yXG4iLCBzcmItPmNtZCk7CiAJCQlzcmItPnN0YXR1cyB8PSBQQVJJVFlfRVJST1I7CiAJCX0KIAkJLyoKQEAgLTIzOTQsOCArMjM5Myw4IEBACiBzdGF0aWMgdm9pZCBkYXRhX2luX3BoYXNlMShzdHJ1Y3QgQWRhcHRlckN0bEJsayAqYWNiLCBzdHJ1Y3QgU2NzaVJlcUJsayAqc3JiLAogCQl1MTYgKnBzY3NpX3N0YXR1cykKIHsKLQlkcHJpbnRrZGJnKERCR18wLCAiZGF0YV9pbl9waGFzZTE6IChwaWQjJWxpKSA8JTAyaS0laT5cbiIsCi0JCXNyYi0+Y21kLT5zZXJpYWxfbnVtYmVyLCBzcmItPmNtZC0+ZGV2aWNlLT5pZCwgc3JiLT5jbWQtPmRldmljZS0+bHVuKTsKKwlkcHJpbnRrZGJnKERCR18wLCAiZGF0YV9pbl9waGFzZTE6ICgweCVwKSA8JTAyaS0laT5cbiIsCisJCXNyYi0+Y21kLCBzcmItPmNtZC0+ZGV2aWNlLT5pZCwgc3JiLT5jbWQtPmRldmljZS0+bHVuKTsKIAlkYXRhX2lvX3RyYW5zZmVyKGFjYiwgc3JiLCBYRkVSREFUQUlOKTsKIH0KIApAQCAtMjQwNiw4ICsyNDA1LDggQEAKIAlzdHJ1Y3QgRGV2aWNlQ3RsQmxrICpkY2IgPSBzcmItPmRjYjsKIAl1OCBidmFsOwogCWRwcmludGtkYmcoREJHXzAsCi0JCSJkYXRhX2lvX3RyYW5zZmVyOiAocGlkIyVsaSkgPCUwMmktJWk+ICVjIGxlbj0laSwgc2c9KCVpLyVpKVxuIiwKLQkJc3JiLT5jbWQtPnNlcmlhbF9udW1iZXIsIHNyYi0+Y21kLT5kZXZpY2UtPmlkLCBzcmItPmNtZC0+ZGV2aWNlLT5sdW4sCisJCSJkYXRhX2lvX3RyYW5zZmVyOiAoMHglcCkgPCUwMmktJWk+ICVjIGxlbj0laSwgc2c9KCVpLyVpKVxuIiwKKwkJc3JiLT5jbWQsIHNyYi0+Y21kLT5kZXZpY2UtPmlkLCBzcmItPmNtZC0+ZGV2aWNlLT5sdW4sCiAJCSgoaW9fZGlyICYgRE1BQ01EX0RJUikgPyAncicgOiAndycpLAogCQlzcmItPnRvdGFsX3hmZXJfbGVuZ3RoLCBzcmItPnNnX2luZGV4LCBzcmItPnNnX2NvdW50KTsKIAlpZiAoc3JiID09IGFjYi0+dG1wX3NyYikKQEAgLTI1NzksOCArMjU3OCw4IEBACiBzdGF0aWMgdm9pZCBzdGF0dXNfcGhhc2UwKHN0cnVjdCBBZGFwdGVyQ3RsQmxrICphY2IsIHN0cnVjdCBTY3NpUmVxQmxrICpzcmIsCiAJCXUxNiAqcHNjc2lfc3RhdHVzKQogewotCWRwcmludGtkYmcoREJHXzAsICJzdGF0dXNfcGhhc2UwOiAocGlkIyVsaSkgPCUwMmktJWk+XG4iLAotCQlzcmItPmNtZC0+c2VyaWFsX251bWJlciwgc3JiLT5jbWQtPmRldmljZS0+aWQsIHNyYi0+Y21kLT5kZXZpY2UtPmx1bik7CisJZHByaW50a2RiZyhEQkdfMCwgInN0YXR1c19waGFzZTA6ICgweCVwKSA8JTAyaS0laT5cbiIsCisJCXNyYi0+Y21kLCBzcmItPmNtZC0+ZGV2aWNlLT5pZCwgc3JiLT5jbWQtPmRldmljZS0+bHVuKTsKIAlzcmItPnRhcmdldF9zdGF0dXMgPSBEQzM5NXhfcmVhZDgoYWNiLCBUUk1fUzEwNDBfU0NTSV9GSUZPKTsKIAlzcmItPmVuZF9tZXNzYWdlID0gREMzOTV4X3JlYWQ4KGFjYiwgVFJNX1MxMDQwX1NDU0lfRklGTyk7CS8qIGdldCBtZXNzYWdlICovCiAJc3JiLT5zdGF0ZSA9IFNSQl9DT01QTEVURUQ7CkBAIC0yNTkzLDggKzI1OTIsOCBAQAogc3RhdGljIHZvaWQgc3RhdHVzX3BoYXNlMShzdHJ1Y3QgQWRhcHRlckN0bEJsayAqYWNiLCBzdHJ1Y3QgU2NzaVJlcUJsayAqc3JiLAogCQl1MTYgKnBzY3NpX3N0YXR1cykKIHsKLQlkcHJpbnRrZGJnKERCR18wLCAic3RhdHVzX3BoYXNlMTogKHBpZCMlbGkpIDwlMDJpLSVpPlxuIiwKLQkJc3JiLT5jbWQtPnNlcmlhbF9udW1iZXIsIHNyYi0+Y21kLT5kZXZpY2UtPmlkLCBzcmItPmNtZC0+ZGV2aWNlLT5sdW4pOworCWRwcmludGtkYmcoREJHXzAsICJzdGF0dXNfcGhhc2UxOiAoMHglcCkgPCUwMmktJWk+XG4iLAorCQlzcmItPmNtZCwgc3JiLT5jbWQtPmRldmljZS0+aWQsIHNyYi0+Y21kLT5kZXZpY2UtPmx1bik7CiAJc3JiLT5zdGF0ZSA9IFNSQl9TVEFUVVM7CiAJREMzOTV4X3dyaXRlMTYoYWNiLCBUUk1fUzEwNDBfU0NTSV9DT05UUk9MLCBET19EQVRBTEFUQ0gpOwkvKiBpdCdzIGltcG9ydGFudCBmb3IgYXRuIHN0b3AgKi8KIAlEQzM5NXhfd3JpdGU4KGFjYiwgVFJNX1MxMDQwX1NDU0lfQ09NTUFORCwgU0NNRF9DT01QKTsKQEAgLTI2MzUsOCArMjYzNCw4IEBACiB7CiAJc3RydWN0IFNjc2lSZXFCbGsgKnNyYiA9IE5VTEw7CiAJc3RydWN0IFNjc2lSZXFCbGsgKmk7Ci0JZHByaW50a2RiZyhEQkdfMCwgIm1zZ2luX3F0YWc6IChwaWQjJWxpKSB0YWc9JWkgc3JiPSVwXG4iLAotCQkgICBzcmItPmNtZC0+c2VyaWFsX251bWJlciwgdGFnLCBzcmIpOworCWRwcmludGtkYmcoREJHXzAsICJtc2dpbl9xdGFnOiAoMHglcCkgdGFnPSVpIHNyYj0lcFxuIiwKKwkJICAgc3JiLT5jbWQsIHRhZywgc3JiKTsKIAogCWlmICghKGRjYi0+dGFnX21hc2sgJiAoMSA8PCB0YWcpKSkKIAkJZHByaW50a2woS0VSTl9ERUJVRywKQEAgLTI2NTQsOCArMjY1Myw4IEBACiAJaWYgKCFzcmIpCiAJCWdvdG8gbWluZ3gwOwogCi0JZHByaW50a2RiZyhEQkdfMCwgIm1zZ2luX3F0YWc6IChwaWQjJWxpKSA8JTAyaS0laT5cbiIsCi0JCXNyYi0+Y21kLT5zZXJpYWxfbnVtYmVyLCBzcmItPmRjYi0+dGFyZ2V0X2lkLCBzcmItPmRjYi0+dGFyZ2V0X2x1bik7CisJZHByaW50a2RiZyhEQkdfMCwgIm1zZ2luX3F0YWc6ICgweCVwKSA8JTAyaS0laT5cbiIsCisJCXNyYi0+Y21kLCBzcmItPmRjYi0+dGFyZ2V0X2lkLCBzcmItPmRjYi0+dGFyZ2V0X2x1bik7CiAJaWYgKGRjYi0+ZmxhZyAmIEFCT1JUX0RFVl8pIHsKIAkJLypzcmItPnN0YXRlID0gU1JCX0FCT1JUX1NFTlQ7ICovCiAJCWVuYWJsZV9tc2dvdXRfYWJvcnQoYWNiLCBzcmIpOwpAQCAtMjg2NSw3ICsyODY0LDcgQEAKIAkJdTE2ICpwc2NzaV9zdGF0dXMpCiB7CiAJc3RydWN0IERldmljZUN0bEJsayAqZGNiID0gYWNiLT5hY3RpdmVfZGNiOwotCWRwcmludGtkYmcoREJHXzAsICJtc2dpbl9waGFzZTA6IChwaWQjJWxpKVxuIiwgc3JiLT5jbWQtPnNlcmlhbF9udW1iZXIpOworCWRwcmludGtkYmcoREJHXzAsICJtc2dpbl9waGFzZTA6ICgweCVwKVxuIiwgc3JiLT5jbWQpOwogCiAJc3JiLT5tc2dpbl9idWZbYWNiLT5tc2dfbGVuKytdID0gREMzOTV4X3JlYWQ4KGFjYiwgVFJNX1MxMDQwX1NDU0lfRklGTyk7CiAJaWYgKG1zZ2luX2NvbXBsZXRlZChzcmItPm1zZ2luX2J1ZiwgYWNiLT5tc2dfbGVuKSkgewpAQCAtMjkzMSw5ICsyOTMwLDkgQEAKIAkJCSAqIFNBVkUgUE9JTlRFUiBtYXkgYmUgaWdub3JlZCBhcyB3ZSBoYXZlIHRoZSBzdHJ1Y3QKIAkJCSAqIFNjc2lSZXFCbGsqIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2NzaSBjb21tYW5kLgogCQkJICovCi0JCQlkcHJpbnRrZGJnKERCR18wLCAibXNnaW5fcGhhc2UwOiAocGlkIyVsaSkgIgorCQkJZHByaW50a2RiZyhEQkdfMCwgIm1zZ2luX3BoYXNlMDogKDB4JXApICIKIAkJCQkiU0FWRSBQT0lOVEVSIHJlbT0laSBJZ25vcmVcbiIsCi0JCQkJc3JiLT5jbWQtPnNlcmlhbF9udW1iZXIsIHNyYi0+dG90YWxfeGZlcl9sZW5ndGgpOworCQkJCXNyYi0+Y21kLCBzcmItPnRvdGFsX3hmZXJfbGVuZ3RoKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgUkVTVE9SRV9QT0lOVEVSUzoKQEAgLTI5NDEsOSArMjk0MCw5IEBACiAJCQlicmVhazsKIAogCQljYXNlIEFCT1JUOgotCQkJZHByaW50a2RiZyhEQkdfMCwgIm1zZ2luX3BoYXNlMDogKHBpZCMlbGkpICIKKwkJCWRwcmludGtkYmcoREJHXzAsICJtc2dpbl9waGFzZTA6ICgweCVwKSAiCiAJCQkJIjwlMDJpLSVpPiBBQk9SVCBtc2dcbiIsCi0JCQkJc3JiLT5jbWQtPnNlcmlhbF9udW1iZXIsIGRjYi0+dGFyZ2V0X2lkLAorCQkJCXNyYi0+Y21kLCBkY2ItPnRhcmdldF9pZCwKIAkJCQlkY2ItPnRhcmdldF9sdW4pOwogCQkJZGNiLT5mbGFnIHw9IEFCT1JUX0RFVl87CiAJCQllbmFibGVfbXNnb3V0X2Fib3J0KGFjYiwgc3JiKTsKQEAgLTI5NzUsNyArMjk3NCw3IEBACiBzdGF0aWMgdm9pZCBtc2dpbl9waGFzZTEoc3RydWN0IEFkYXB0ZXJDdGxCbGsgKmFjYiwgc3RydWN0IFNjc2lSZXFCbGsgKnNyYiwKIAkJdTE2ICpwc2NzaV9zdGF0dXMpCiB7Ci0JZHByaW50a2RiZyhEQkdfMCwgIm1zZ2luX3BoYXNlMTogKHBpZCMlbGkpXG4iLCBzcmItPmNtZC0+c2VyaWFsX251bWJlcik7CisJZHByaW50a2RiZyhEQkdfMCwgIm1zZ2luX3BoYXNlMTogKDB4JXApXG4iLCBzcmItPmNtZCk7CiAJY2xlYXJfZmlmbyhhY2IsICJtc2dpbl9waGFzZTEiKTsKIAlEQzM5NXhfd3JpdGUzMihhY2IsIFRSTV9TMTA0MF9TQ1NJX0NPVU5URVIsIDEpOwogCWlmICghKHNyYi0+c3RhdGUgJiBTUkJfTVNHSU4pKSB7CkBAIC0zMDQxLDcgKzMwNDAsNyBAQAogCX0KIAlzcmIgPSBkY2ItPmFjdGl2ZV9zcmI7CiAJYWNiLT5hY3RpdmVfZGNiID0gTlVMTDsKLQlkcHJpbnRrZGJnKERCR18wLCAiZGlzY29ubmVjdDogKHBpZCMlbGkpXG4iLCBzcmItPmNtZC0+c2VyaWFsX251bWJlcik7CisJZHByaW50a2RiZyhEQkdfMCwgImRpc2Nvbm5lY3Q6ICgweCVwKVxuIiwgc3JiLT5jbWQpOwogCiAJc3JiLT5zY3NpX3BoYXNlID0gUEhfQlVTX0ZSRUU7CS8qIGluaXRpYWwgcGhhc2UgKi8KIAljbGVhcl9maWZvKGFjYiwgImRpc2Nvbm5lY3QiKTsKQEAgLTMwNzEsMTQgKzMwNzAsMTQgQEAKIAkJCSAgICAmJiBzcmItPnN0YXRlICE9IFNSQl9NU0dPVVQpIHsKIAkJCQlzcmItPnN0YXRlID0gU1JCX1JFQURZOwogCQkJCWRwcmludGtsKEtFUk5fREVCVUcsCi0JCQkJCSJkaXNjb25uZWN0OiAocGlkIyVsaSkgVW5leHBlY3RlZFxuIiwKLQkJCQkJc3JiLT5jbWQtPnNlcmlhbF9udW1iZXIpOworCQkJCQkiZGlzY29ubmVjdDogKDB4JXApIFVuZXhwZWN0ZWRcbiIsCisJCQkJCXNyYi0+Y21kKTsKIAkJCQlzcmItPnRhcmdldF9zdGF0dXMgPSBTQ1NJX1NUQVRfU0VMX1RJTUVPVVQ7CiAJCQkJZ290byBkaXNjMTsKIAkJCX0gZWxzZSB7CiAJCQkJLyogTm9ybWFsIHNlbGVjdGlvbiB0aW1lb3V0ICovCi0JCQkJZHByaW50a2RiZyhEQkdfS0csICJkaXNjb25uZWN0OiAocGlkIyVsaSkgIgotCQkJCQkiPCUwMmktJWk+IFNlbFRPXG4iLCBzcmItPmNtZC0+c2VyaWFsX251bWJlciwKKwkJCQlkcHJpbnRrZGJnKERCR19LRywgImRpc2Nvbm5lY3Q6ICgweCVwKSAiCisJCQkJCSI8JTAyaS0laT4gU2VsVE9cbiIsIHNyYi0+Y21kLAogCQkJCQlkY2ItPnRhcmdldF9pZCwgZGNiLT50YXJnZXRfbHVuKTsKIAkJCQlpZiAoc3JiLT5yZXRyeV9jb3VudCsrID4gREMzOTV4X01BWF9SRVRSSUVTCiAJCQkJICAgIHx8IGFjYi0+c2Nhbl9kZXZpY2VzKSB7CkBAIC0zMDg5LDggKzMwODgsOCBAQAogCQkJCWZyZWVfdGFnKGRjYiwgc3JiKTsKIAkJCQlzcmJfZ29pbmdfdG9fd2FpdGluZ19tb3ZlKGRjYiwgc3JiKTsKIAkJCQlkcHJpbnRrZGJnKERCR19LRywKLQkJCQkJImRpc2Nvbm5lY3Q6IChwaWQjJWxpKSBSZXRyeVxuIiwKLQkJCQkJc3JiLT5jbWQtPnNlcmlhbF9udW1iZXIpOworCQkJCQkiZGlzY29ubmVjdDogKDB4JXApIFJldHJ5XG4iLAorCQkJCQlzcmItPmNtZCk7CiAJCQkJd2FpdGluZ19zZXRfdGltZXIoYWNiLCBIWiAvIDIwKTsKIAkJCX0KIAkJfSBlbHNlIGlmIChzcmItPnN0YXRlICYgU1JCX0RJU0NPTk5FQ1QpIHsKQEAgLTMxNDIsOSArMzE0MSw5IEBACiAJCX0KIAkJLyogV2h5IHRoZSBpZiA/ICovCiAJCWlmICghYWNiLT5zY2FuX2RldmljZXMpIHsKLQkJCWRwcmludGtkYmcoREJHX0tHLCAicmVzZWxlY3Q6IChwaWQjJWxpKSA8JTAyaS0laT4gIgorCQkJZHByaW50a2RiZyhEQkdfS0csICJyZXNlbGVjdDogKDB4JXApIDwlMDJpLSVpPiAiCiAJCQkJIkFyYiBsb3N0IGJ1dCBSZXNlbCB3aW4gcnNlbD0laSBzdGF0PTB4JTA0eFxuIiwKLQkJCQlzcmItPmNtZC0+c2VyaWFsX251bWJlciwgZGNiLT50YXJnZXRfaWQsCisJCQkJc3JiLT5jbWQsIGRjYi0+dGFyZ2V0X2lkLAogCQkJCWRjYi0+dGFyZ2V0X2x1biwgcnNlbF90YXJfbHVuX2lkLAogCQkJCURDMzk1eF9yZWFkMTYoYWNiLCBUUk1fUzEwNDBfU0NTSV9TVEFUVVMpKTsKIAkJCWFyYmxvc3RmbGFnID0gMTsKQEAgLTMzMTgsNyArMzMxNyw3IEBACiAJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyID0gY21kLT5zY19kYXRhX2RpcmVjdGlvbjsKIAlpbnQgY2tjX29ubHkgPSAxOwogCi0JZHByaW50a2RiZyhEQkdfMSwgInNyYl9kb25lOiAocGlkIyVsaSkgPCUwMmktJWk+XG4iLCBzcmItPmNtZC0+c2VyaWFsX251bWJlciwKKwlkcHJpbnRrZGJnKERCR18xLCAic3JiX2RvbmU6ICgweCVwKSA8JTAyaS0laT5cbiIsIHNyYi0+Y21kLAogCQlzcmItPmNtZC0+ZGV2aWNlLT5pZCwgc3JiLT5jbWQtPmRldmljZS0+bHVuKTsKIAlkcHJpbnRrZGJnKERCR19TRywgInNyYl9kb25lOiBzcmI9JXAgc2c9JWkoJWkvJWkpIGJ1Zj0lcFxuIiwKIAkJICAgc3JiLCBzY3NpX3NnX2NvdW50KGNtZCksIHNyYi0+c2dfaW5kZXgsIHNyYi0+c2dfY291bnQsCkBAIC0zNDk3LDkgKzM0OTYsOSBAQAogCWNtZC0+U0NwLmJ1ZmZlcnNfcmVzaWR1YWwgPSAwOwogCWlmIChkZWJ1Z19lbmFibGVkKERCR19LRykpIHsKIAkJaWYgKHNyYi0+dG90YWxfeGZlcl9sZW5ndGgpCi0JCQlkcHJpbnRrZGJnKERCR19LRywgInNyYl9kb25lOiAocGlkIyVsaSkgPCUwMmktJWk+ICIKKwkJCWRwcmludGtkYmcoREJHX0tHLCAic3JiX2RvbmU6ICgweCVwKSA8JTAyaS0laT4gIgogCQkJCSJjbW5kPTB4JTAyeCBNaXNzZWQgJWkgYnl0ZXNcbiIsCi0JCQkJY21kLT5zZXJpYWxfbnVtYmVyLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4sCisJCQkJY21kLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4sCiAJCQkJY21kLT5jbW5kWzBdLCBzcmItPnRvdGFsX3hmZXJfbGVuZ3RoKTsKIAl9CiAKQEAgLTM1MDgsOCArMzUwNyw4IEBACiAJaWYgKHNyYiA9PSBhY2ItPnRtcF9zcmIpCiAJCWRwcmludGtsKEtFUk5fRVJSLCAic3JiX2RvbmU6IEVSUk9SISBDb21wbGV0ZWQgY21kIHdpdGggdG1wX3NyYlxuIik7CiAJZWxzZSB7Ci0JCWRwcmludGtkYmcoREJHXzAsICJzcmJfZG9uZTogKHBpZCMlbGkpIGRvbmUgcmVzdWx0PTB4JTA4eFxuIiwKLQkJCWNtZC0+c2VyaWFsX251bWJlciwgY21kLT5yZXN1bHQpOworCQlkcHJpbnRrZGJnKERCR18wLCAic3JiX2RvbmU6ICgweCVwKSBkb25lIHJlc3VsdD0weCUwOHhcbiIsCisJCQljbWQsIGNtZC0+cmVzdWx0KTsKIAkJc3JiX2ZyZWVfaW5zZXJ0KGFjYiwgc3JiKTsKIAl9CiAJcGNpX3VubWFwX3NyYihhY2IsIHNyYik7CkBAIC0zNTM4LDcgKzM1MzcsNyBAQAogCQkJcCA9IHNyYi0+Y21kOwogCQkJZGlyID0gcC0+c2NfZGF0YV9kaXJlY3Rpb247CiAJCQlyZXN1bHQgPSBNS19SRVMoMCwgZGlkX2ZsYWcsIDAsIDApOwotCQkJcHJpbnRrKCJHOiVsaSglMDJpLSVpKSAiLCBwLT5zZXJpYWxfbnVtYmVyLAorCQkJcHJpbnRrKCJHOiVwKCUwMmktJWkpICIsIHAsCiAJCQkgICAgICAgcC0+ZGV2aWNlLT5pZCwgcC0+ZGV2aWNlLT5sdW4pOwogCQkJc3JiX2dvaW5nX3JlbW92ZShkY2IsIHNyYik7CiAJCQlmcmVlX3RhZyhkY2IsIHNyYik7CkBAIC0zNTY4LDcgKzM1NjcsNyBAQAogCQkJcCA9IHNyYi0+Y21kOwogCiAJCQlyZXN1bHQgPSBNS19SRVMoMCwgZGlkX2ZsYWcsIDAsIDApOwotCQkJcHJpbnRrKCJXOiVsaTwlMDJpLSVpPiIsIHAtPnNlcmlhbF9udW1iZXIsIHAtPmRldmljZS0+aWQsCisJCQlwcmludGsoIlc6JXA8JTAyaS0laT4iLCBwLCBwLT5kZXZpY2UtPmlkLAogCQkJICAgICAgIHAtPmRldmljZS0+bHVuKTsKIAkJCXNyYl93YWl0aW5nX3JlbW92ZShkY2IsIHNyYik7CiAJCQlzcmJfZnJlZV9pbnNlcnQoYWNiLCBzcmIpOwpAQCAtMzY3Nyw4ICszNjc2LDggQEAKIAkJc3RydWN0IFNjc2lSZXFCbGsgKnNyYikKIHsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSBzcmItPmNtZDsKLQlkcHJpbnRrZGJnKERCR18xLCAicmVxdWVzdF9zZW5zZTogKHBpZCMlbGkpIDwlMDJpLSVpPlxuIiwKLQkJY21kLT5zZXJpYWxfbnVtYmVyLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pOworCWRwcmludGtkYmcoREJHXzEsICJyZXF1ZXN0X3NlbnNlOiAoMHglcCkgPCUwMmktJWk+XG4iLAorCQljbWQsIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1bik7CiAKIAlzcmItPmZsYWcgfD0gQVVUT19SRVFTRU5TRTsKIAlzcmItPmFkYXB0ZXJfc3RhdHVzID0gMDsKQEAgLTM3MDgsOCArMzcwNyw4IEBACiAKIAlpZiAoc3RhcnRfc2NzaShhY2IsIGRjYiwgc3JiKSkgewkvKiBTaG91bGQgb25seSBoYXBwZW4sIGlmIHNiLiBlbHNlIGdyYWJzIHRoZSBidXMgKi8KIAkJZHByaW50a2woS0VSTl9ERUJVRywKLQkJCSJyZXF1ZXN0X3NlbnNlOiAocGlkIyVsaSkgZmFpbGVkIDwlMDJpLSVpPlxuIiwKLQkJCXNyYi0+Y21kLT5zZXJpYWxfbnVtYmVyLCBkY2ItPnRhcmdldF9pZCwgZGNiLT50YXJnZXRfbHVuKTsKKwkJCSJyZXF1ZXN0X3NlbnNlOiAoMHglcCkgZmFpbGVkIDwlMDJpLSVpPlxuIiwKKwkJCXNyYi0+Y21kLCBkY2ItPnRhcmdldF9pZCwgZGNiLT50YXJnZXRfbHVuKTsKIAkJc3JiX2dvaW5nX3RvX3dhaXRpbmdfbW92ZShkY2IsIHNyYik7CiAJCXdhaXRpbmdfc2V0X3RpbWVyKGFjYiwgSFogLyAxMDApOwogCX0KQEAgLTQ3MTcsMTMgKzQ3MTYsMTMgQEAKIAkJCQlkY2ItPnRhcmdldF9pZCwgZGNiLT50YXJnZXRfbHVuLAogCQkJCWxpc3Rfc2l6ZSgmZGNiLT5zcmJfd2FpdGluZ19saXN0KSk7CiAgICAgICAgICAgICAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeShzcmIsICZkY2ItPnNyYl93YWl0aW5nX2xpc3QsIGxpc3QpCi0JCQlTUFJJTlRGKCIgJWxpIiwgc3JiLT5jbWQtPnNlcmlhbF9udW1iZXIpOworCQkJU1BSSU5URigiICVwIiwgc3JiLT5jbWQpOwogCQlpZiAoIWxpc3RfZW1wdHkoJmRjYi0+c3JiX2dvaW5nX2xpc3QpKQogCQkJU1BSSU5URigiXG5EQ0IgKCUwMmktJWkpOiBHb2luZyAgOiAlaToiLAogCQkJCWRjYi0+dGFyZ2V0X2lkLCBkY2ItPnRhcmdldF9sdW4sCiAJCQkJbGlzdF9zaXplKCZkY2ItPnNyYl9nb2luZ19saXN0KSk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoc3JiLCAmZGNiLT5zcmJfZ29pbmdfbGlzdCwgbGlzdCkKLQkJCVNQUklOVEYoIiAlbGkiLCBzcmItPmNtZC0+c2VyaWFsX251bWJlcik7CisJCQlTUFJJTlRGKCIgJXAiLCBzcmItPmNtZCk7CiAJCWlmICghbGlzdF9lbXB0eSgmZGNiLT5zcmJfd2FpdGluZ19saXN0KSB8fCAhbGlzdF9lbXB0eSgmZGNiLT5zcmJfZ29pbmdfbGlzdCkpCiAJCQlTUFJJTlRGKCJcbiIpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2FsdWEuYyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2FsdWEuYwppbmRleCA0MmZlNTI5Li42ZmVjOWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9hbHVhLmMKKysrIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfYWx1YS5jCkBAIC03ODIsNyArNzgyLDcgQEAKIAloLT5zZGV2ID0gc2RldjsKIAogCWVyciA9IGFsdWFfaW5pdGlhbGl6ZShzZGV2LCBoKTsKLQlpZiAoZXJyICE9IFNDU0lfREhfT0spCisJaWYgKChlcnIgIT0gU0NTSV9ESF9PSykgJiYgKGVyciAhPSBTQ1NJX0RIX0RFVl9PRkZMSU5FRCkpCiAJCWdvdG8gZmFpbGVkOwogCiAJaWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9yZGFjLmMgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9yZGFjLmMKaW5kZXggMjkzYzE4My4uZTdmYzcwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfcmRhYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX3JkYWMuYwpAQCAtMTgyLDE0ICsxODIsMjQgQEAKIAlzdHJ1Y3QgcmRhY19jb250cm9sbGVyCSpjdGxyOwogI2RlZmluZSBVTklOSVRJQUxJWkVEX0xVTgkoMSA8PCA4KQogCXVuc2lnbmVkCQlsdW47CisKKyNkZWZpbmUgUkRBQ19NT0RFCQkwCisjZGVmaW5lIFJEQUNfTU9ERV9BVlQJCTEKKyNkZWZpbmUgUkRBQ19NT0RFX0lPU0hJUAkyCisJdW5zaWduZWQgY2hhcgkJbW9kZTsKKwogI2RlZmluZSBSREFDX1NUQVRFX0FDVElWRQkwCiAjZGVmaW5lIFJEQUNfU1RBVEVfUEFTU0lWRQkxCiAJdW5zaWduZWQgY2hhcgkJc3RhdGU7CiAKICNkZWZpbmUgUkRBQ19MVU5fVU5PV05FRAkwCiAjZGVmaW5lIFJEQUNfTFVOX09XTkVECQkxCi0jZGVmaW5lIFJEQUNfTFVOX0FWVAkJMgogCWNoYXIJCQlsdW5fc3RhdGU7CisKKyNkZWZpbmUgUkRBQ19QUkVGRVJSRUQJCTAKKyNkZWZpbmUgUkRBQ19OT05fUFJFRkVSUkVECTEKKwljaGFyCQkJcHJlZmVycmVkOworCiAJdW5zaWduZWQgY2hhcgkJc2Vuc2VbU0NTSV9TRU5TRV9CVUZGRVJTSVpFXTsKIAl1bmlvbgkJCXsKIAkJc3RydWN0IGMyX2lucXVpcnkgYzI7CkBAIC0xOTksMTEgKzIwOSwxNSBAQAogCX0gaW5xOwogfTsKIAorc3RhdGljIGNvbnN0IGNoYXIgKm1vZGVbXSA9IHsKKwkiUkRBQyIsCisJIkFWVCIsCisJIklPU0hJUCIsCit9Owogc3RhdGljIGNvbnN0IGNoYXIgKmx1bl9zdGF0ZVtdID0KIHsKIAkidW5vd25lZCIsCiAJIm93bmVkIiwKLQkib3duZWQgKEFWVCBtb2RlKSIsCiB9OwogCiBzdHJ1Y3QgcmRhY19xdWV1ZV9kYXRhIHsKQEAgLTQ1OCwyNSArNDcyLDMzIEBACiAJaW50IGVycjsKIAlzdHJ1Y3QgYzlfaW5xdWlyeSAqaW5xcDsKIAotCWgtPmx1bl9zdGF0ZSA9IFJEQUNfTFVOX1VOT1dORUQ7CiAJaC0+c3RhdGUgPSBSREFDX1NUQVRFX0FDVElWRTsKIAllcnIgPSBzdWJtaXRfaW5xdWlyeShzZGV2LCAweEM5LCBzaXplb2Yoc3RydWN0IGM5X2lucXVpcnkpLCBoKTsKIAlpZiAoZXJyID09IFNDU0lfREhfT0spIHsKIAkJaW5xcCA9ICZoLT5pbnEuYzk7Ci0JCWlmICgoaW5xcC0+YXZ0ZV9jdnAgPj4gNykgPT0gMHgxKSB7Ci0JCQkvKiBMVU4gaW4gQVZUIG1vZGUgKi8KLQkJCXNkZXZfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGV2LAotCQkJCSAgICAiJXM6IEFWVCBtb2RlIGRldGVjdGVkXG4iLAotCQkJCSAgICBSREFDX05BTUUpOwotCQkJaC0+bHVuX3N0YXRlID0gUkRBQ19MVU5fQVZUOwotCQl9IGVsc2UgaWYgKChpbnFwLT5hdnRlX2N2cCAmIDB4MSkgIT0gMCkgewotCQkJLyogTFVOIHdhcyBvd25lZCBieSB0aGUgY29udHJvbGxlciAqLwotCQkJaC0+bHVuX3N0YXRlID0gUkRBQ19MVU5fT1dORUQ7Ci0JCX0KLQl9CisJCS8qIGRldGVjdCB0aGUgb3BlcmF0aW5nIG1vZGUgKi8KKwkJaWYgKChpbnFwLT5hdnRlX2N2cCA+PiA1KSAmIDB4MSkKKwkJCWgtPm1vZGUgPSBSREFDX01PREVfSU9TSElQOyAvKiBMVU4gaW4gSU9TSElQIG1vZGUgKi8KKwkJZWxzZSBpZiAoaW5xcC0+YXZ0ZV9jdnAgPj4gNykKKwkJCWgtPm1vZGUgPSBSREFDX01PREVfQVZUOyAvKiBMVU4gaW4gQVZUIG1vZGUgKi8KKwkJZWxzZQorCQkJaC0+bW9kZSA9IFJEQUNfTU9ERTsgLyogTFVOIGluIFJEQUMgbW9kZSAqLwogCi0JaWYgKGgtPmx1bl9zdGF0ZSA9PSBSREFDX0xVTl9VTk9XTkVEKQotCQloLT5zdGF0ZSA9IFJEQUNfU1RBVEVfUEFTU0lWRTsKKwkJLyogVXBkYXRlIG93bmVyc2hpcCAqLworCQlpZiAoaW5xcC0+YXZ0ZV9jdnAgJiAweDEpCisJCQloLT5sdW5fc3RhdGUgPSBSREFDX0xVTl9PV05FRDsKKwkJZWxzZSB7CisJCQloLT5sdW5fc3RhdGUgPSBSREFDX0xVTl9VTk9XTkVEOworCQkJaWYgKGgtPm1vZGUgPT0gUkRBQ19NT0RFKQorCQkJCWgtPnN0YXRlID0gUkRBQ19TVEFURV9QQVNTSVZFOworCQl9CisKKwkJLyogVXBkYXRlIHBhdGggcHJpbyovCisJCWlmIChpbnFwLT5wYXRoX3ByaW8gJiAweDEpCisJCQloLT5wcmVmZXJyZWQgPSBSREFDX1BSRUZFUlJFRDsKKwkJZWxzZQorCQkJaC0+cHJlZmVycmVkID0gUkRBQ19OT05fUFJFRkVSUkVEOworCX0KIAogCXJldHVybiBlcnI7CiB9CkBAIC02NDgsMTIgKzY3MCwyNyBAQAogewogCXN0cnVjdCByZGFjX2RoX2RhdGEgKmggPSBnZXRfcmRhY19kYXRhKHNkZXYpOwogCWludCBlcnIgPSBTQ1NJX0RIX09LOworCWludCBhY3QgPSAwOwogCiAJZXJyID0gY2hlY2tfb3duZXJzaGlwKHNkZXYsIGgpOwogCWlmIChlcnIgIT0gU0NTSV9ESF9PSykKIAkJZ290byBkb25lOwogCi0JaWYgKGgtPmx1bl9zdGF0ZSA9PSBSREFDX0xVTl9VTk9XTkVEKSB7CisJc3dpdGNoIChoLT5tb2RlKSB7CisJY2FzZSBSREFDX01PREU6CisJCWlmIChoLT5sdW5fc3RhdGUgPT0gUkRBQ19MVU5fVU5PV05FRCkKKwkJCWFjdCA9IDE7CisJCWJyZWFrOworCWNhc2UgUkRBQ19NT0RFX0lPU0hJUDoKKwkJaWYgKChoLT5sdW5fc3RhdGUgPT0gUkRBQ19MVU5fVU5PV05FRCkgJiYKKwkJICAgIChoLT5wcmVmZXJyZWQgPT0gUkRBQ19QUkVGRVJSRUQpKQorCQkJYWN0ID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKGFjdCkgewogCQllcnIgPSBxdWV1ZV9tb2RlX3NlbGVjdChzZGV2LCBmbiwgZGF0YSk7CiAJCWlmIChlcnIgPT0gU0NTSV9ESF9PSykKIAkJCXJldHVybiAwOwpAQCAtODM2LDggKzg3Myw5IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrLCBmbGFncyk7CiAKIAlzZGV2X3ByaW50ayhLRVJOX05PVElDRSwgc2RldiwKLQkJICAgICIlczogTFVOICVkICglcylcbiIsCi0JCSAgICBSREFDX05BTUUsIGgtPmx1biwgbHVuX3N0YXRlWyhpbnQpaC0+bHVuX3N0YXRlXSk7CisJCSAgICAiJXM6IExVTiAlZCAoJXMpICglcylcbiIsCisJCSAgICBSREFDX05BTUUsIGgtPmx1biwgbW9kZVsoaW50KWgtPm1vZGVdLAorCQkgICAgbHVuX3N0YXRlWyhpbnQpaC0+bHVuX3N0YXRlXSk7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RwdF9pMm8uYyBiL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMKaW5kZXggY2ZmY2IxMC4uYjRmNmM5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RwdF9pMm8uYworKysgYi9kcml2ZXJzL3Njc2kvZHB0X2kyby5jCkBAIC03ODAsNyArNzgwLDcgQEAKIAkJcmV0dXJuIEZBSUxFRDsKIAl9CiAJcEhiYSA9IChhZHB0X2hiYSopIGNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXTsKLQlwcmludGsoS0VSTl9JTkZPIiVzOiBUcnlpbmcgdG8gQWJvcnQgY21kPSVsZFxuIixwSGJhLT5uYW1lLCBjbWQtPnNlcmlhbF9udW1iZXIpOworCXByaW50ayhLRVJOX0lORk8iJXM6IFRyeWluZyB0byBBYm9ydFxuIixwSGJhLT5uYW1lKTsKIAlpZiAoKGRwdGRldmljZSA9ICh2b2lkKikgKGNtZC0+ZGV2aWNlLT5ob3N0ZGF0YSkpID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogVW5hYmxlIHRvIGFib3J0OiBObyBkZXZpY2UgaW4gY21uZFxuIixwSGJhLT5uYW1lKTsKIAkJcmV0dXJuIEZBSUxFRDsKQEAgLTgwMiwxMCArODAyLDEwIEBACiAJCQlwcmludGsoS0VSTl9JTkZPIiVzOiBBYm9ydCBjbWQgbm90IHN1cHBvcnRlZFxuIixwSGJhLT5uYW1lKTsKIAkJCXJldHVybiBGQUlMRUQ7CiAJCX0KLQkJcHJpbnRrKEtFUk5fSU5GTyIlczogQWJvcnQgY21kPSVsZCBmYWlsZWQuXG4iLHBIYmEtPm5hbWUsIGNtZC0+c2VyaWFsX251bWJlcik7CisJCXByaW50ayhLRVJOX0lORk8iJXM6IEFib3J0IGZhaWxlZC5cbiIscEhiYS0+bmFtZSk7CiAJCXJldHVybiBGQUlMRUQ7CiAJfSAKLQlwcmludGsoS0VSTl9JTkZPIiVzOiBBYm9ydCBjbWQ9JWxkIGNvbXBsZXRlLlxuIixwSGJhLT5uYW1lLCBjbWQtPnNlcmlhbF9udW1iZXIpOworCXByaW50ayhLRVJOX0lORk8iJXM6IEFib3J0IGNvbXBsZXRlLlxuIixwSGJhLT5uYW1lKTsKIAlyZXR1cm4gU1VDQ0VTUzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2VhdGEuYyBiL2RyaXZlcnMvc2NzaS9lYXRhLmMKaW5kZXggMGViNGZlNi4uOTRkZTg4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2VhdGEuYworKysgYi9kcml2ZXJzL3Njc2kvZWF0YS5jCkBAIC0xNzY2LDggKzE3NjYsOCBAQAogCXN0cnVjdCBtc2NwICpjcHA7CiAKIAlpZiAoU0NwbnQtPmhvc3Rfc2NyaWJibGUpCi0JCXBhbmljKCIlczogcWNvbW0sIHBpZCAlbGQsIFNDcG50ICVwIGFscmVhZHkgYWN0aXZlLlxuIiwKLQkJICAgICAgaGEtPmJvYXJkX25hbWUsIFNDcG50LT5zZXJpYWxfbnVtYmVyLCBTQ3BudCk7CisJCXBhbmljKCIlczogcWNvbW0sIFNDcG50ICVwIGFscmVhZHkgYWN0aXZlLlxuIiwKKwkJICAgICAgaGEtPmJvYXJkX25hbWUsIFNDcG50KTsKIAogCS8qIGkgaXMgdGhlIG1haWxib3ggbnVtYmVyLCBsb29rIGZvciB0aGUgZmlyc3QgZnJlZSBtYWlsYm94CiAJICAgc3RhcnRpbmcgZnJvbSBsYXN0X2NwX3VzZWQgKi8KQEAgLTE4MDEsNyArMTgwMSw3IEBACiAKIAlpZiAoZG9fdHJhY2UpCiAJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgU0NwbnQsCi0JCQkicWNvbW0sIG1ib3ggJWQsIHBpZCAlbGQuXG4iLCBpLCBTQ3BudC0+c2VyaWFsX251bWJlcik7CisJCQkicWNvbW0sIG1ib3ggJWQuXG4iLCBpKTsKIAogCWNwcC0+cmVxc2VuID0gMTsKIAljcHAtPmRpc3ByaSA9IDE7CkBAIC0xODMzLDggKzE4MzMsNyBAQAogCWlmIChkb19kbWEoc2hvc3QtPmlvX3BvcnQsIGNwcC0+Y3BfZG1hX2FkZHIsIFNFTkRfQ1BfRE1BKSkgewogCQl1bm1hcF9kbWEoaSwgaGEpOwogCQlTQ3BudC0+aG9zdF9zY3JpYmJsZSA9IE5VTEw7Ci0JCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgU0NwbnQsCi0JCQkicWNvbW0sIHBpZCAlbGQsIGFkYXB0ZXIgYnVzeS5cbiIsIFNDcG50LT5zZXJpYWxfbnVtYmVyKTsKKwkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBTQ3BudCwgInFjb21tLCBhZGFwdGVyIGJ1c3kuXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC0xODUxLDE0ICsxODUwLDEyIEBACiAJdW5zaWduZWQgaW50IGk7CiAKIAlpZiAoU0NhcmctPmhvc3Rfc2NyaWJibGUgPT0gTlVMTCkgewotCQlzY21kX3ByaW50ayhLRVJOX0lORk8sIFNDYXJnLAotCQkJImFib3J0LCBwaWQgJWxkIGluYWN0aXZlLlxuIiwgU0NhcmctPnNlcmlhbF9udW1iZXIpOworCQlzY21kX3ByaW50ayhLRVJOX0lORk8sIFNDYXJnLCAiYWJvcnQsIGNtZCBpbmFjdGl2ZS5cbiIpOwogCQlyZXR1cm4gU1VDQ0VTUzsKIAl9CiAKIAlpID0gKih1bnNpZ25lZCBpbnQgKilTQ2FyZy0+aG9zdF9zY3JpYmJsZTsKLQlzY21kX3ByaW50ayhLRVJOX1dBUk5JTkcsIFNDYXJnLAotCQkiYWJvcnQsIG1ib3ggJWQsIHBpZCAlbGQuXG4iLCBpLCBTQ2FyZy0+c2VyaWFsX251bWJlcik7CisJc2NtZF9wcmludGsoS0VSTl9XQVJOSU5HLCBTQ2FyZywgImFib3J0LCBtYm94ICVkLlxuIiwgaSk7CiAKIAlpZiAoaSA+PSBzaG9zdC0+Y2FuX3F1ZXVlKQogCQlwYW5pYygiJXM6IGFib3J0LCBpbnZhbGlkIFNDYXJnLT5ob3N0X3NjcmliYmxlLlxuIiwgaGEtPmJvYXJkX25hbWUpOwpAQCAtMTkwMiw4ICsxODk5LDggQEAKIAkJU0NhcmctPnJlc3VsdCA9IERJRF9BQk9SVCA8PCAxNjsKIAkJU0NhcmctPmhvc3Rfc2NyaWJibGUgPSBOVUxMOwogCQloYS0+Y3Bfc3RhdFtpXSA9IEZSRUU7Ci0JCXByaW50aygiJXMsIGFib3J0LCBtYm94ICVkIHJlYWR5LCBESURfQUJPUlQsIHBpZCAlbGQgZG9uZS5cbiIsCi0JCSAgICAgICBoYS0+Ym9hcmRfbmFtZSwgaSwgU0NhcmctPnNlcmlhbF9udW1iZXIpOworCQlwcmludGsoIiVzLCBhYm9ydCwgbWJveCAlZCByZWFkeSwgRElEX0FCT1JULCBkb25lLlxuIiwKKwkJICAgICAgIGhhLT5ib2FyZF9uYW1lLCBpKTsKIAkJU0NhcmctPnNjc2lfZG9uZShTQ2FyZyk7CiAJCXJldHVybiBTVUNDRVNTOwogCX0KQEAgLTE5MTksMTMgKzE5MTYsMTIgQEAKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IFNDYXJnLT5kZXZpY2UtPmhvc3Q7CiAJc3RydWN0IGhvc3RkYXRhICpoYSA9IChzdHJ1Y3QgaG9zdGRhdGEgKilzaG9zdC0+aG9zdGRhdGE7CiAKLQlzY21kX3ByaW50ayhLRVJOX0lORk8sIFNDYXJnLAotCQkicmVzZXQsIGVudGVyLCBwaWQgJWxkLlxuIiwgU0NhcmctPnNlcmlhbF9udW1iZXIpOworCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgU0NhcmcsICJyZXNldCwgZW50ZXIuXG4iKTsKIAogCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAKIAlpZiAoU0NhcmctPmhvc3Rfc2NyaWJibGUgPT0gTlVMTCkKLQkJcHJpbnRrKCIlczogcmVzZXQsIHBpZCAlbGQgaW5hY3RpdmUuXG4iLCBoYS0+Ym9hcmRfbmFtZSwgU0NhcmctPnNlcmlhbF9udW1iZXIpOworCQlwcmludGsoIiVzOiByZXNldCwgaW5hY3RpdmUuXG4iLCBoYS0+Ym9hcmRfbmFtZSk7CiAKIAlpZiAoaGEtPmluX3Jlc2V0KSB7CiAJCXByaW50aygiJXM6IHJlc2V0LCBleGl0LCBhbHJlYWR5IGluIHJlc2V0LlxuIiwgaGEtPmJvYXJkX25hbWUpOwpAQCAtMTk2NCwxNCArMTk2MCwxNCBAQAogCiAJCWlmIChoYS0+Y3Bfc3RhdFtpXSA9PSBSRUFEWSB8fCBoYS0+Y3Bfc3RhdFtpXSA9PSBBQk9SVElORykgewogCQkJaGEtPmNwX3N0YXRbaV0gPSBBQk9SVElORzsKLQkJCXByaW50aygiJXM6IHJlc2V0LCBtYm94ICVkIGFib3J0aW5nLCBwaWQgJWxkLlxuIiwKLQkJCSAgICAgICBoYS0+Ym9hcmRfbmFtZSwgaSwgU0NwbnQtPnNlcmlhbF9udW1iZXIpOworCQkJcHJpbnRrKCIlczogcmVzZXQsIG1ib3ggJWQgYWJvcnRpbmcuXG4iLAorCQkJICAgICAgIGhhLT5ib2FyZF9uYW1lLCBpKTsKIAkJfQogCiAJCWVsc2UgewogCQkJaGEtPmNwX3N0YXRbaV0gPSBJTl9SRVNFVDsKLQkJCXByaW50aygiJXM6IHJlc2V0LCBtYm94ICVkIGluIHJlc2V0LCBwaWQgJWxkLlxuIiwKLQkJCSAgICAgICBoYS0+Ym9hcmRfbmFtZSwgaSwgU0NwbnQtPnNlcmlhbF9udW1iZXIpOworCQkJcHJpbnRrKCIlczogcmVzZXQsIG1ib3ggJWQgaW4gcmVzZXQuXG4iLAorCQkJICAgICAgIGhhLT5ib2FyZF9uYW1lLCBpKTsKIAkJfQogCiAJCWlmIChTQ3BudC0+aG9zdF9zY3JpYmJsZSA9PSBOVUxMKQpAQCAtMjAyNSw4ICsyMDIxLDggQEAKIAkJCWhhLT5jcF9zdGF0W2ldID0gTE9DS0VEOwogCiAJCQlwcmludGsKLQkJCSAgICAoIiVzLCByZXNldCwgbWJveCAlZCBsb2NrZWQsIERJRF9SRVNFVCwgcGlkICVsZCBkb25lLlxuIiwKLQkJCSAgICAgaGEtPmJvYXJkX25hbWUsIGksIFNDcG50LT5zZXJpYWxfbnVtYmVyKTsKKwkJCSAgICAoIiVzLCByZXNldCwgbWJveCAlZCBsb2NrZWQsIERJRF9SRVNFVCwgZG9uZS5cbiIsCisJCQkgICAgIGhhLT5ib2FyZF9uYW1lLCBpKTsKIAkJfQogCiAJCWVsc2UgaWYgKGhhLT5jcF9zdGF0W2ldID09IEFCT1JUSU5HKSB7CkBAIC0yMDM5LDggKzIwMzUsOCBAQAogCQkJaGEtPmNwX3N0YXRbaV0gPSBGUkVFOwogCiAJCQlwcmludGsKLQkJCSAgICAoIiVzLCByZXNldCwgbWJveCAlZCBhYm9ydGluZywgRElEX1JFU0VULCBwaWQgJWxkIGRvbmUuXG4iLAotCQkJICAgICBoYS0+Ym9hcmRfbmFtZSwgaSwgU0NwbnQtPnNlcmlhbF9udW1iZXIpOworCQkJICAgICgiJXMsIHJlc2V0LCBtYm94ICVkIGFib3J0aW5nLCBESURfUkVTRVQsIGRvbmUuXG4iLAorCQkJICAgICBoYS0+Ym9hcmRfbmFtZSwgaSk7CiAJCX0KIAogCQllbHNlCkBAIC0yMDU0LDcgKzIwNTAsNyBAQAogCWRvX3RyYWNlID0gMDsKIAogCWlmIChhcmdfZG9uZSkKLQkJcHJpbnRrKCIlczogcmVzZXQsIGV4aXQsIHBpZCAlbGQgZG9uZS5cbiIsIGhhLT5ib2FyZF9uYW1lLCBTQ2FyZy0+c2VyaWFsX251bWJlcik7CisJCXByaW50aygiJXM6IHJlc2V0LCBleGl0LCBkb25lLlxuIiwgaGEtPmJvYXJkX25hbWUpOwogCWVsc2UKIAkJcHJpbnRrKCIlczogcmVzZXQsIGV4aXQuXG4iLCBoYS0+Ym9hcmRfbmFtZSk7CiAKQEAgLTIyMzgsMTAgKzIyMzQsMTAgQEAKIAkJCWNwcCA9ICZoYS0+Y3Bba107CiAJCQlTQ3BudCA9IGNwcC0+U0NwbnQ7CiAJCQlzY21kX3ByaW50ayhLRVJOX0lORk8sIFNDcG50LAotCQkJICAgICIlcyBwaWQgJWxkIG1iICVkIGZjICVkIG5yICVkIHNlYyAlbGQgbnMgJXUiCisJCQkgICAgIiVzIG1iICVkIGZjICVkIG5yICVkIHNlYyAlbGQgbnMgJXUiCiAJCQkgICAgICIgY3VyICVsZCBzOiVjIHI6JWMgcmV2OiVjIGluOiVjIG92OiVjIHhkICVkLlxuIiwKIAkJCSAgICAgKGloZGxyID8gImloZGxyIiA6ICJxY29tbSIpLAotCQkJICAgICBTQ3BudC0+c2VyaWFsX251bWJlciwgaywgZmx1c2hjb3VudCwKKwkJCSAgICAgaywgZmx1c2hjb3VudCwKIAkJCSAgICAgbl9yZWFkeSwgYmxrX3JxX3BvcyhTQ3BudC0+cmVxdWVzdCksCiAJCQkgICAgIGJsa19ycV9zZWN0b3JzKFNDcG50LT5yZXF1ZXN0KSwgY3Vyc2VjLCBZRVNOTyhzKSwKIAkJCSAgICAgWUVTTk8ociksIFlFU05PKHJldiksIFlFU05PKGlucHV0X29ubHkpLApAQCAtMjI4NSwxMCArMjI4MSwxMCBAQAogCiAJCWlmIChkb19kbWEoZGV2LT5ob3N0LT5pb19wb3J0LCBjcHAtPmNwX2RtYV9hZGRyLCBTRU5EX0NQX0RNQSkpIHsKIAkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgU0NwbnQsCi0JCQkgICAgIiVzLCBwaWQgJWxkLCBtYm94ICVkLCBhZGFwdGVyIgorCQkJICAgICIlcywgbWJveCAlZCwgYWRhcHRlciIKIAkJCSAgICAgIiBidXN5LCB3aWxsIGFib3J0LlxuIiwKIAkJCSAgICAgKGloZGxyID8gImloZGxyIiA6ICJxY29tbSIpLAotCQkJICAgICBTQ3BudC0+c2VyaWFsX251bWJlciwgayk7CisJCQkgICAgIGspOwogCQkJaGEtPmNwX3N0YXRba10gPSBBQk9SVElORzsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0yMzk4LDEyICsyMzk0LDEyIEBACiAJCXBhbmljKCIlczogaWhkbHIsIG1ib3ggJWQsIFNDcG50ID09IE5VTEwuXG4iLCBoYS0+Ym9hcmRfbmFtZSwgaSk7CiAKIAlpZiAoU0NwbnQtPmhvc3Rfc2NyaWJibGUgPT0gTlVMTCkKLQkJcGFuaWMoIiVzOiBpaGRsciwgbWJveCAlZCwgcGlkICVsZCwgU0NwbnQgJXAgZ2FyYmxlZC5cbiIsIGhhLT5ib2FyZF9uYW1lLAotCQkgICAgICBpLCBTQ3BudC0+c2VyaWFsX251bWJlciwgU0NwbnQpOworCQlwYW5pYygiJXM6IGloZGxyLCBtYm94ICVkLCBTQ3BudCAlcCBnYXJibGVkLlxuIiwgaGEtPmJvYXJkX25hbWUsCisJCSAgICAgIGksIFNDcG50KTsKIAogCWlmICgqKHVuc2lnbmVkIGludCAqKVNDcG50LT5ob3N0X3NjcmliYmxlICE9IGkpCi0JCXBhbmljKCIlczogaWhkbHIsIG1ib3ggJWQsIHBpZCAlbGQsIGluZGV4IG1pc21hdGNoICVkLlxuIiwKLQkJICAgICAgaGEtPmJvYXJkX25hbWUsIGksIFNDcG50LT5zZXJpYWxfbnVtYmVyLAorCQlwYW5pYygiJXM6IGloZGxyLCBtYm94ICVkLCBpbmRleCBtaXNtYXRjaCAlZC5cbiIsCisJCSAgICAgIGhhLT5ib2FyZF9uYW1lLCBpLAogCQkgICAgICAqKHVuc2lnbmVkIGludCAqKVNDcG50LT5ob3N0X3NjcmliYmxlKTsKIAogCXN5bmNfZG1hKGksIGhhKTsKQEAgLTI0NDksMTEgKzI0NDUsMTEgQEAKIAkJaWYgKHNwcC0+dGFyZ2V0X3N0YXR1cyAmJiBTQ3BudC0+ZGV2aWNlLT50eXBlID09IFRZUEVfRElTSyAmJgogCQkgICAgKCEodHN0YXR1cyA9PSBDSEVDS19DT05ESVRJT04gJiYgaGEtPmlvY291bnQgPD0gMTAwMCAmJgogCQkgICAgICAgKFNDcG50LT5zZW5zZV9idWZmZXJbMl0gJiAweGYpID09IE5PVF9SRUFEWSkpKQotCQkJcHJpbnRrKCIlczogaWhkbHIsIHRhcmdldCAlZC4lZDolZCwgcGlkICVsZCwgIgorCQkJcHJpbnRrKCIlczogaWhkbHIsIHRhcmdldCAlZC4lZDolZCwgIgogCQkJICAgICAgICJ0YXJnZXRfc3RhdHVzIDB4JXgsIHNlbnNlIGtleSAweCV4LlxuIiwKIAkJCSAgICAgICBoYS0+Ym9hcmRfbmFtZSwKIAkJCSAgICAgICBTQ3BudC0+ZGV2aWNlLT5jaGFubmVsLCBTQ3BudC0+ZGV2aWNlLT5pZCwKLQkJCSAgICAgICBTQ3BudC0+ZGV2aWNlLT5sdW4sIFNDcG50LT5zZXJpYWxfbnVtYmVyLAorCQkJICAgICAgIFNDcG50LT5kZXZpY2UtPmx1biwKIAkJCSAgICAgICBzcHAtPnRhcmdldF9zdGF0dXMsIFNDcG50LT5zZW5zZV9idWZmZXJbMl0pOwogCiAJCWhhLT50YXJnZXRfdG9bU0NwbnQtPmRldmljZS0+aWRdW1NDcG50LT5kZXZpY2UtPmNoYW5uZWxdID0gMDsKQEAgLTI1MjIsOSArMjUxOCw5IEBACiAJICAgIGRvX3RyYWNlIHx8IG1zZ19ieXRlKHNwcC0+dGFyZ2V0X3N0YXR1cykpCiAjZW5kaWYKIAkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBTQ3BudCwgImloZGxyLCBtYm94ICUyZCwgZXJyIDB4JXg6JXgsIgotCQkgICAgICAgIiBwaWQgJWxkLCByZWcgMHgleCwgY291bnQgJWQuXG4iLAorCQkgICAgICAgIiByZWcgMHgleCwgY291bnQgJWQuXG4iLAogCQkgICAgICAgaSwgc3BwLT5hZGFwdGVyX3N0YXR1cywgc3BwLT50YXJnZXRfc3RhdHVzLAotCQkgICAgICAgU0NwbnQtPnNlcmlhbF9udW1iZXIsIHJlZywgaGEtPmlvY291bnQpOworCQkgICAgICAgcmVnLCBoYS0+aW9jb3VudCk7CiAKIAl1bm1hcF9kbWEoaSwgaGEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZWF0YV9waW8uYyBiL2RyaXZlcnMvc2NzaS9lYXRhX3Bpby5jCmluZGV4IDRhOTY0MWUuLmQ1ZjgzNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9lYXRhX3Bpby5jCisrKyBiL2RyaXZlcnMvc2NzaS9lYXRhX3Bpby5jCkBAIC0zNzIsOCArMzcyLDcgQEAKIAljcC0+c3RhdHVzID0gVVNFRDsJLyogY2xhaW0gZnJlZSBzbG90ICovCiAKIAlEQkcoREJHX1FVRVVFLCBzY21kX3ByaW50ayhLRVJOX0RFQlVHLCBjbWQsCi0JCSJlYXRhX3Bpb19xdWV1ZSBwaWQgJWxkLCB5ICVkXG4iLAotCQljbWQtPnNlcmlhbF9udW1iZXIsIHkpKTsKKwkJImVhdGFfcGlvX3F1ZXVlIDB4JXAsIHkgJWRcbiIsIGNtZCwgeSkpOwogCiAJY21kLT5zY3NpX2RvbmUgPSAodm9pZCAqKSBkb25lOwogCkBAIC00MTcsOCArNDE2LDggQEAKIAlpZiAoZWF0YV9waW9fc2VuZF9jb21tYW5kKGJhc2UsIEVBVEFfQ01EX1BJT19TRU5EX0NQKSkgewogCQljbWQtPnJlc3VsdCA9IERJRF9CVVNfQlVTWSA8PCAxNjsKIAkJc2NtZF9wcmludGsoS0VSTl9OT1RJQ0UsIGNtZCwKLQkJCSJlYXRhX3Bpb19xdWV1ZSBwaWQgJWxkLCBIQkEgYnVzeSwgIgotCQkJInJldHVybmluZyBESURfQlVTX0JVU1ksIGRvbmUuXG4iLCBjbWQtPnNlcmlhbF9udW1iZXIpOworCQkJImVhdGFfcGlvX3F1ZXVlIHBpZCAweCVwLCBIQkEgYnVzeSwgIgorCQkJInJldHVybmluZyBESURfQlVTX0JVU1ksIGRvbmUuXG4iLCBjbWQpOwogCQlkb25lKGNtZCk7CiAJCWNwLT5zdGF0dXMgPSBGUkVFOwogCQlyZXR1cm4gMDsKQEAgLTQzMiw4ICs0MzEsOCBAQAogCQlvdXR3KDAsIGJhc2UgKyBIQV9SREFUQSk7CiAKIAlEQkcoREJHX1FVRVVFLCBzY21kX3ByaW50ayhLRVJOX0RFQlVHLCBjbWQsCi0JCSJRdWV1ZWQgYmFzZSAlIy40bHggcGlkOiAlbGQgIgotCQkic2xvdCAlZCBpcnEgJWRcbiIsIHNoLT5iYXNlLCBjbWQtPnNlcmlhbF9udW1iZXIsIHksIHNoLT5pcnEpKTsKKwkJIlF1ZXVlZCBiYXNlICUjLjRseCBjbWQ6IDB4JXAgIgorCQkic2xvdCAlZCBpcnEgJWRcbiIsIHNoLT5iYXNlLCBjbWQsIHksIHNoLT5pcnEpKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDQ1LDggKzQ0NCw3IEBACiAJdW5zaWduZWQgaW50IGxvb3AgPSAxMDA7CiAKIAlEQkcoREJHX0FCTk9STSwgc2NtZF9wcmludGsoS0VSTl9XQVJOSU5HLCBjbWQsCi0JCSJlYXRhX3Bpb19hYm9ydCBjYWxsZWQgcGlkOiAlbGRcbiIsCi0JCWNtZC0+c2VyaWFsX251bWJlcikpOworCQkiZWF0YV9waW9fYWJvcnQgY2FsbGVkIHBpZDogMHglcFxuIiwgY21kKSk7CiAKIAl3aGlsZSAoaW5iKGNtZC0+ZGV2aWNlLT5ob3N0LT5iYXNlICsgSEFfUkFVWFNUQVQpICYgSEFfQUJVU1kpCiAJCWlmICgtLWxvb3AgPT0gMCkgewpAQCAtNDgxLDggKzQ3OSw3IEBACiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNtZC0+ZGV2aWNlLT5ob3N0OwogCiAJREJHKERCR19BQk5PUk0sIHNjbWRfcHJpbnRrKEtFUk5fV0FSTklORywgY21kLAotCQkiZWF0YV9waW9fcmVzZXQgY2FsbGVkIHBpZDolbGRcbiIsCi0JCWNtZC0+c2VyaWFsX251bWJlcikpOworCQkiZWF0YV9waW9fcmVzZXQgY2FsbGVkXG4iKSk7CiAKIAlzcGluX2xvY2tfaXJxKGhvc3QtPmhvc3RfbG9jayk7CiAKQEAgLTUwMSw3ICs0OTgsNyBAQAogCiAJCXNwID0gSEQoY21kKS0+Y2NiW3hdLmNtZDsKIAkJSEQoY21kKS0+Y2NiW3hdLnN0YXR1cyA9IFJFU0VUOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJlYXRhX3Bpb19yZXNldDogc2xvdCAlZCBpbiByZXNldCwgcGlkICVsZC5cbiIsIHgsIHNwLT5zZXJpYWxfbnVtYmVyKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiZWF0YV9waW9fcmVzZXQ6IHNsb3QgJWQgaW4gcmVzZXQuXG4iLCB4KTsKIAogCQlpZiAoc3AgPT0gTlVMTCkKIAkJCXBhbmljKCJlYXRhX3Bpb19yZXNldDogc2xvdCAlZCwgc3A9PU5VTEwuXG4iLCB4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9lc3Bfc2NzaS5jIGIvZHJpdmVycy9zY3NpL2VzcF9zY3NpLmMKaW5kZXggNTc1NTg1Mi4uMzk0ZWQ5ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9lc3Bfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9lc3Bfc2NzaS5jCkBAIC03MDgsOCArNzA4LDcgQEAKIAl0cCA9ICZlc3AtPnRhcmdldFt0Z3RdOwogCWxwID0gZGV2LT5ob3N0ZGF0YTsKIAotCWxpc3RfZGVsKCZlbnQtPmxpc3QpOwotCWxpc3RfYWRkKCZlbnQtPmxpc3QsICZlc3AtPmFjdGl2ZV9jbWRzKTsKKwlsaXN0X21vdmUoJmVudC0+bGlzdCwgJmVzcC0+YWN0aXZlX2NtZHMpOwogCiAJZXNwLT5hY3RpdmVfY21kID0gZW50OwogCkBAIC0xMDU5LDcgKzEwNTgsNyBAQAogCWVzcC0+b3BzLT5zZW5kX2RtYV9jbWQoZXNwLCBlc3AtPmNvbW1hbmRfYmxvY2tfZG1hLAogCQkJICAgICAgIDIsIDIsIDEsIEVTUF9DTURfRE1BIHwgRVNQX0NNRF9USSk7CiAKLQkvKiBBQ0sgdGhlIG1zc3NhZ2UuICAqLworCS8qIEFDSyB0aGUgbWVzc2FnZS4gICovCiAJc2NzaV9lc3BfY21kKGVzcCwgRVNQX0NNRF9NT0spOwogCiAJZm9yIChpID0gMDsgaSA8IEVTUF9SRVNFTEVDVF9UQUdfTElNSVQ7IGkrKykgewpAQCAtMTI0NCw4ICsxMjQzLDcgQEAKIAkJLyogTm93IHRoYXQgdGhlIHN0YXRlIGlzIHVud291bmQgcHJvcGVybHksIHB1dCBiYWNrIG9udG8KIAkJICogdGhlIGlzc3VlIHF1ZXVlLiAgVGhpcyBjb21tYW5kIGlzIG5vIGxvbmdlciBhY3RpdmUuCiAJCSAqLwotCQlsaXN0X2RlbCgmZW50LT5saXN0KTsKLQkJbGlzdF9hZGQoJmVudC0+bGlzdCwgJmVzcC0+cXVldWVkX2NtZHMpOworCQlsaXN0X21vdmUoJmVudC0+bGlzdCwgJmVzcC0+cXVldWVkX2NtZHMpOwogCQllc3AtPmFjdGl2ZV9jbWQgPSBOVUxMOwogCiAJCS8qIFJldHVybiB2YWx1ZSBpZ25vcmVkIGJ5IGNhbGxlciwgaXQgZGlyZWN0bHkgaW52b2tlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZS5jIGIvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZS5jCmluZGV4IGJkZTZlZTUuLmNjMjNiZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mY29lL2Zjb2UuYworKysgYi9kcml2ZXJzL3Njc2kvZmNvZS9mY29lLmMKQEAgLTM4MSw0OSArMzgxLDYgQEAKIH0KIAogLyoqCi0gKiBmY29lX2ludGVyZmFjZV9jbGVhbnVwKCkgLSBDbGVhbiB1cCBhIEZDb0UgaW50ZXJmYWNlCi0gKiBAZmNvZTogVGhlIEZDb0UgaW50ZXJmYWNlIHRvIGJlIGNsZWFuZWQgdXAKLSAqCi0gKiBDYWxsZXIgbXVzdCBiZSBob2xkaW5nIHRoZSBSVE5MIG11dGV4Ci0gKi8KLXZvaWQgZmNvZV9pbnRlcmZhY2VfY2xlYW51cChzdHJ1Y3QgZmNvZV9pbnRlcmZhY2UgKmZjb2UpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGZjb2UtPm5ldGRldjsKLQlzdHJ1Y3QgZmNvZV9jdGxyICpmaXAgPSAmZmNvZS0+Y3RscjsKLQl1OCBmbG9naV9tYWRkcltFVEhfQUxFTl07Ci0JY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHM7Ci0KLQkvKgotCSAqIERvbid0IGxpc3RlbiBmb3IgRXRoZXJuZXQgcGFja2V0cyBhbnltb3JlLgotCSAqIHN5bmNocm9uaXplX25ldCgpIGVuc3VyZXMgdGhhdCB0aGUgcGFja2V0IGhhbmRsZXJzIGFyZSBub3QgcnVubmluZwotCSAqIG9uIGFub3RoZXIgQ1BVLiBkZXZfcmVtb3ZlX3BhY2soKSB3b3VsZCBkbyB0aGF0LCB0aGlzIGNhbGxzIHRoZQotCSAqIHVuc3luY3Jvbml6ZWQgdmVyc2lvbiBfX2Rldl9yZW1vdmVfcGFjaygpIHRvIGF2b2lkIG11bHRpcGxlIGRlbGF5cy4KLQkgKi8KLQlfX2Rldl9yZW1vdmVfcGFjaygmZmNvZS0+ZmNvZV9wYWNrZXRfdHlwZSk7Ci0JX19kZXZfcmVtb3ZlX3BhY2soJmZjb2UtPmZpcF9wYWNrZXRfdHlwZSk7Ci0Jc3luY2hyb25pemVfbmV0KCk7Ci0KLQkvKiBEZWxldGUgc2Vjb25kYXJ5IE1BQyBhZGRyZXNzZXMgKi8KLQltZW1jcHkoZmxvZ2lfbWFkZHIsICh1OFs2XSkgRkNfRkNPRV9GTE9HSV9NQUMsIEVUSF9BTEVOKTsKLQlkZXZfdWNfZGVsKG5ldGRldiwgZmxvZ2lfbWFkZHIpOwotCWlmIChmaXAtPnNwbWEpCi0JCWRldl91Y19kZWwobmV0ZGV2LCBmaXAtPmN0bF9zcmNfYWRkcik7Ci0JaWYgKGZpcC0+bW9kZSA9PSBGSVBfTU9ERV9WTjJWTikgewotCQlkZXZfbWNfZGVsKG5ldGRldiwgRklQX0FMTF9WTjJWTl9NQUNTKTsKLQkJZGV2X21jX2RlbChuZXRkZXYsIEZJUF9BTExfUDJQX01BQ1MpOwotCX0gZWxzZQotCQlkZXZfbWNfZGVsKG5ldGRldiwgRklQX0FMTF9FTk9ERV9NQUNTKTsKLQotCS8qIFRlbGwgdGhlIExMRCB3ZSBhcmUgZG9uZSB3LyBGQ29FICovCi0Jb3BzID0gbmV0ZGV2LT5uZXRkZXZfb3BzOwotCWlmIChvcHMtPm5kb19mY29lX2Rpc2FibGUpIHsKLQkJaWYgKG9wcy0+bmRvX2Zjb2VfZGlzYWJsZShuZXRkZXYpKQotCQkJRkNPRV9ORVRERVZfREJHKG5ldGRldiwgIkZhaWxlZCB0byBkaXNhYmxlIEZDb0UiCi0JCQkJCSIgc3BlY2lmaWMgZmVhdHVyZSBmb3IgTExELlxuIik7Ci0JfQotfQotCi0vKioKICAqIGZjb2VfaW50ZXJmYWNlX3JlbGVhc2UoKSAtIGZjb2VfcG9ydCBrcmVmIHJlbGVhc2UgZnVuY3Rpb24KICAqIEBrcmVmOiBFbWJlZGRlZCByZWZlcmVuY2UgY291bnQgaW4gYW4gZmNvZV9pbnRlcmZhY2Ugc3RydWN0CiAgKi8KQEAgLTQ2MCw2ICs0MTcsNjggQEAKIH0KIAogLyoqCisgKiBmY29lX2ludGVyZmFjZV9jbGVhbnVwKCkgLSBDbGVhbiB1cCBhIEZDb0UgaW50ZXJmYWNlCisgKiBAZmNvZTogVGhlIEZDb0UgaW50ZXJmYWNlIHRvIGJlIGNsZWFuZWQgdXAKKyAqCisgKiBDYWxsZXIgbXVzdCBiZSBob2xkaW5nIHRoZSBSVE5MIG11dGV4CisgKi8KK3ZvaWQgZmNvZV9pbnRlcmZhY2VfY2xlYW51cChzdHJ1Y3QgZmNvZV9pbnRlcmZhY2UgKmZjb2UpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGZjb2UtPm5ldGRldjsKKwlzdHJ1Y3QgZmNvZV9jdGxyICpmaXAgPSAmZmNvZS0+Y3RscjsKKwl1OCBmbG9naV9tYWRkcltFVEhfQUxFTl07CisJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHM7CisJc3RydWN0IGZjb2VfcG9ydCAqcG9ydCA9IGxwb3J0X3ByaXYoZmNvZS0+Y3Rsci5scCk7CisKKwlGQ09FX05FVERFVl9EQkcobmV0ZGV2LCAiRGVzdHJveWluZyBpbnRlcmZhY2VcbiIpOworCisJLyogTG9nb3V0IG9mIHRoZSBmYWJyaWMgKi8KKwlmY19mYWJyaWNfbG9nb2ZmKGZjb2UtPmN0bHIubHApOworCisJLyogQ2xlYW51cCB0aGUgZmNfbHBvcnQgKi8KKwlmY19scG9ydF9kZXN0cm95KGZjb2UtPmN0bHIubHApOworCisJLyogU3RvcCB0aGUgdHJhbnNtaXQgcmV0cnkgdGltZXIgKi8KKwlkZWxfdGltZXJfc3luYygmcG9ydC0+dGltZXIpOworCisJLyogRnJlZSBleGlzdGluZyB0cmFuc21pdCBza2JzICovCisJZmNvZV9jbGVhbl9wZW5kaW5nX3F1ZXVlKGZjb2UtPmN0bHIubHApOworCisJLyoKKwkgKiBEb24ndCBsaXN0ZW4gZm9yIEV0aGVybmV0IHBhY2tldHMgYW55bW9yZS4KKwkgKiBzeW5jaHJvbml6ZV9uZXQoKSBlbnN1cmVzIHRoYXQgdGhlIHBhY2tldCBoYW5kbGVycyBhcmUgbm90IHJ1bm5pbmcKKwkgKiBvbiBhbm90aGVyIENQVS4gZGV2X3JlbW92ZV9wYWNrKCkgd291bGQgZG8gdGhhdCwgdGhpcyBjYWxscyB0aGUKKwkgKiB1bnN5bmNyb25pemVkIHZlcnNpb24gX19kZXZfcmVtb3ZlX3BhY2soKSB0byBhdm9pZCBtdWx0aXBsZSBkZWxheXMuCisJICovCisJX19kZXZfcmVtb3ZlX3BhY2soJmZjb2UtPmZjb2VfcGFja2V0X3R5cGUpOworCV9fZGV2X3JlbW92ZV9wYWNrKCZmY29lLT5maXBfcGFja2V0X3R5cGUpOworCXN5bmNocm9uaXplX25ldCgpOworCisJLyogRGVsZXRlIHNlY29uZGFyeSBNQUMgYWRkcmVzc2VzICovCisJbWVtY3B5KGZsb2dpX21hZGRyLCAodThbNl0pIEZDX0ZDT0VfRkxPR0lfTUFDLCBFVEhfQUxFTik7CisJZGV2X3VjX2RlbChuZXRkZXYsIGZsb2dpX21hZGRyKTsKKwlpZiAoZmlwLT5zcG1hKQorCQlkZXZfdWNfZGVsKG5ldGRldiwgZmlwLT5jdGxfc3JjX2FkZHIpOworCWlmIChmaXAtPm1vZGUgPT0gRklQX01PREVfVk4yVk4pIHsKKwkJZGV2X21jX2RlbChuZXRkZXYsIEZJUF9BTExfVk4yVk5fTUFDUyk7CisJCWRldl9tY19kZWwobmV0ZGV2LCBGSVBfQUxMX1AyUF9NQUNTKTsKKwl9IGVsc2UKKwkJZGV2X21jX2RlbChuZXRkZXYsIEZJUF9BTExfRU5PREVfTUFDUyk7CisKKwlpZiAoIWlzX3plcm9fZXRoZXJfYWRkcihwb3J0LT5kYXRhX3NyY19hZGRyKSkKKwkJZGV2X3VjX2RlbChuZXRkZXYsIHBvcnQtPmRhdGFfc3JjX2FkZHIpOworCisJLyogVGVsbCB0aGUgTExEIHdlIGFyZSBkb25lIHcvIEZDb0UgKi8KKwlvcHMgPSBuZXRkZXYtPm5ldGRldl9vcHM7CisJaWYgKG9wcy0+bmRvX2Zjb2VfZGlzYWJsZSkgeworCQlpZiAob3BzLT5uZG9fZmNvZV9kaXNhYmxlKG5ldGRldikpCisJCQlGQ09FX05FVERFVl9EQkcobmV0ZGV2LCAiRmFpbGVkIHRvIGRpc2FibGUgRkNvRSIKKwkJCQkJIiBzcGVjaWZpYyBmZWF0dXJlIGZvciBMTEQuXG4iKTsKKwl9CisJZmNvZV9pbnRlcmZhY2VfcHV0KGZjb2UpOworfQorCisvKioKICAqIGZjb2VfZmlwX3JlY3YoKSAtIEhhbmRsZXIgZm9yIHJlY2VpdmVkIEZJUCBmcmFtZXMKICAqIEBza2I6ICAgICAgVGhlIHJlY2VpdmUgc2tiCiAgKiBAbmV0ZGV2OiAgIFRoZSBhc3NvY2lhdGVkIG5ldCBkZXZpY2UKQEAgLTgyMSwzOSArODQwLDkgQEAKICAqIGZjb2VfaWZfZGVzdHJveSgpIC0gVGVhciBkb3duIGEgU1cgRkNvRSBpbnN0YW5jZQogICogQGxwb3J0OiBUaGUgbG9jYWwgcG9ydCB0byBiZSBkZXN0cm95ZWQKICAqCi0gKiBMb2NraW5nOiBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBSVE5MIG11dGV4IGhlbGQgYW5kIFJUTkwgbXV0ZXgKLSAqIG5lZWRlZCB0byBiZSBkcm9wcGVkIGJ5IHRoaXMgZnVuY3Rpb24gc2luY2Ugbm90IGRyb3BwaW5nIFJUTkwKLSAqIHdvdWxkIGNhdXNlIGNpcmN1bGFyIGxvY2tpbmcgd2FybmluZyBvbiBzeW5jaHJvbm91cyBmaXAgd29ya2VyCi0gKiBjYW5jZWxsaW5nIHRocnUgZmNvZV9pbnRlcmZhY2VfcHV0IGludm9rZWQgYnkgdGhpcyBmdW5jdGlvbi4KLSAqCiAgKi8KIHN0YXRpYyB2b2lkIGZjb2VfaWZfZGVzdHJveShzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0KQogewotCXN0cnVjdCBmY29lX3BvcnQgKnBvcnQgPSBscG9ydF9wcml2KGxwb3J0KTsKLQlzdHJ1Y3QgZmNvZV9pbnRlcmZhY2UgKmZjb2UgPSBwb3J0LT5wcml2OwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBmY29lLT5uZXRkZXY7Ci0KLQlGQ09FX05FVERFVl9EQkcobmV0ZGV2LCAiRGVzdHJveWluZyBpbnRlcmZhY2VcbiIpOwotCi0JLyogTG9nb3V0IG9mIHRoZSBmYWJyaWMgKi8KLQlmY19mYWJyaWNfbG9nb2ZmKGxwb3J0KTsKLQotCS8qIENsZWFudXAgdGhlIGZjX2xwb3J0ICovCi0JZmNfbHBvcnRfZGVzdHJveShscG9ydCk7Ci0KLQkvKiBTdG9wIHRoZSB0cmFuc21pdCByZXRyeSB0aW1lciAqLwotCWRlbF90aW1lcl9zeW5jKCZwb3J0LT50aW1lcik7Ci0KLQkvKiBGcmVlIGV4aXN0aW5nIHRyYW5zbWl0IHNrYnMgKi8KLQlmY29lX2NsZWFuX3BlbmRpbmdfcXVldWUobHBvcnQpOwotCi0JaWYgKCFpc196ZXJvX2V0aGVyX2FkZHIocG9ydC0+ZGF0YV9zcmNfYWRkcikpCi0JCWRldl91Y19kZWwobmV0ZGV2LCBwb3J0LT5kYXRhX3NyY19hZGRyKTsKLQlydG5sX3VubG9jaygpOwotCi0JLyogcmVjZWl2ZXMgbWF5IG5vdCBiZSBzdG9wcGVkIHVudGlsIGFmdGVyIHRoaXMgKi8KLQlmY29lX2ludGVyZmFjZV9wdXQoZmNvZSk7Ci0KIAkvKiBGcmVlIHF1ZXVlZCBwYWNrZXRzIGZvciB0aGUgcGVyLUNQVSByZWNlaXZlIHRocmVhZHMgKi8KIAlmY29lX3BlcmNwdV9jbGVhbihscG9ydCk7CiAKQEAgLTE3ODMsMjMgKzE3NzIsOCBAQAogCWludCByYyA9IDA7CiAKIAltdXRleF9sb2NrKCZmY29lX2NvbmZpZ19tdXRleCk7Ci0jaWZkZWYgQ09ORklHX0ZDT0VfTU9EVUxFCi0JLyoKLQkgKiBNYWtlIHN1cmUgdGhlIG1vZHVsZSBoYXMgYmVlbiBpbml0aWFsaXplZCwgYW5kIGlzIG5vdCBhYm91dCB0byBiZQotCSAqIHJlbW92ZWQuICBNb2R1bGUgcGFyYW10ZXIgc3lzZnMgZmlsZXMgYXJlIHdyaXRhYmxlIGJlZm9yZSB0aGUKLQkgKiBtb2R1bGVfaW5pdCBmdW5jdGlvbiBpcyBjYWxsZWQgYW5kIGFmdGVyIG1vZHVsZV9leGl0LgotCSAqLwotCWlmIChUSElTX01PRFVMRS0+c3RhdGUgIT0gTU9EVUxFX1NUQVRFX0xJVkUpIHsKLQkJcmMgPSAtRU5PREVWOwotCQlnb3RvIG91dF9ub2RldjsKLQl9Ci0jZW5kaWYKIAotCWlmICghcnRubF90cnlsb2NrKCkpIHsKLQkJbXV0ZXhfdW5sb2NrKCZmY29lX2NvbmZpZ19tdXRleCk7Ci0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JfQotCisJcnRubF9sb2NrKCk7CiAJZmNvZSA9IGZjb2VfaG9zdGxpc3RfbG9va3VwX3BvcnQobmV0ZGV2KTsKIAlydG5sX3VubG9jaygpOwogCkBAIC0xODA5LDcgKzE3ODMsNiBAQAogCX0gZWxzZQogCQlyYyA9IC1FTk9ERVY7CiAKLW91dF9ub2RldjoKIAltdXRleF91bmxvY2soJmZjb2VfY29uZmlnX211dGV4KTsKIAlyZXR1cm4gcmM7CiB9CkBAIC0xODI4LDIyICsxODAxLDcgQEAKIAlpbnQgcmMgPSAwOwogCiAJbXV0ZXhfbG9jaygmZmNvZV9jb25maWdfbXV0ZXgpOwotI2lmZGVmIENPTkZJR19GQ09FX01PRFVMRQotCS8qCi0JICogTWFrZSBzdXJlIHRoZSBtb2R1bGUgaGFzIGJlZW4gaW5pdGlhbGl6ZWQsIGFuZCBpcyBub3QgYWJvdXQgdG8gYmUKLQkgKiByZW1vdmVkLiAgTW9kdWxlIHBhcmFtdGVyIHN5c2ZzIGZpbGVzIGFyZSB3cml0YWJsZSBiZWZvcmUgdGhlCi0JICogbW9kdWxlX2luaXQgZnVuY3Rpb24gaXMgY2FsbGVkIGFuZCBhZnRlciBtb2R1bGVfZXhpdC4KLQkgKi8KLQlpZiAoVEhJU19NT0RVTEUtPnN0YXRlICE9IE1PRFVMRV9TVEFURV9MSVZFKSB7Ci0JCXJjID0gLUVOT0RFVjsKLQkJZ290byBvdXRfbm9kZXY7Ci0JfQotI2VuZGlmCi0JaWYgKCFydG5sX3RyeWxvY2soKSkgewotCQltdXRleF91bmxvY2soJmZjb2VfY29uZmlnX211dGV4KTsKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQl9Ci0KKwlydG5sX2xvY2soKTsKIAlmY29lID0gZmNvZV9ob3N0bGlzdF9sb29rdXBfcG9ydChuZXRkZXYpOwogCXJ0bmxfdW5sb2NrKCk7CiAKQEAgLTE4NTIsNyArMTgxMCw2IEBACiAJZWxzZSBpZiAoIWZjb2VfbGlua19vayhmY29lLT5jdGxyLmxwKSkKIAkJZmNvZV9jdGxyX2xpbmtfdXAoJmZjb2UtPmN0bHIpOwogCi1vdXRfbm9kZXY6CiAJbXV0ZXhfdW5sb2NrKCZmY29lX2NvbmZpZ19tdXRleCk7CiAJcmV0dXJuIHJjOwogfQpAQCAtMTg2OCwzNSArMTgyNSwyMiBAQAogc3RhdGljIGludCBmY29lX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgZmNvZV9pbnRlcmZhY2UgKmZjb2U7CisJc3RydWN0IGZjX2xwb3J0ICpscG9ydDsKIAlpbnQgcmMgPSAwOwogCiAJbXV0ZXhfbG9jaygmZmNvZV9jb25maWdfbXV0ZXgpOwotI2lmZGVmIENPTkZJR19GQ09FX01PRFVMRQotCS8qCi0JICogTWFrZSBzdXJlIHRoZSBtb2R1bGUgaGFzIGJlZW4gaW5pdGlhbGl6ZWQsIGFuZCBpcyBub3QgYWJvdXQgdG8gYmUKLQkgKiByZW1vdmVkLiAgTW9kdWxlIHBhcmFtdGVyIHN5c2ZzIGZpbGVzIGFyZSB3cml0YWJsZSBiZWZvcmUgdGhlCi0JICogbW9kdWxlX2luaXQgZnVuY3Rpb24gaXMgY2FsbGVkIGFuZCBhZnRlciBtb2R1bGVfZXhpdC4KLQkgKi8KLQlpZiAoVEhJU19NT0RVTEUtPnN0YXRlICE9IE1PRFVMRV9TVEFURV9MSVZFKSB7Ci0JCXJjID0gLUVOT0RFVjsKLQkJZ290byBvdXRfbm9kZXY7Ci0JfQotI2VuZGlmCi0JaWYgKCFydG5sX3RyeWxvY2soKSkgewotCQltdXRleF91bmxvY2soJmZjb2VfY29uZmlnX211dGV4KTsKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQl9Ci0KKwlydG5sX2xvY2soKTsKIAlmY29lID0gZmNvZV9ob3N0bGlzdF9sb29rdXBfcG9ydChuZXRkZXYpOwogCWlmICghZmNvZSkgewogCQlydG5sX3VubG9jaygpOwogCQlyYyA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0X25vZGV2OwogCX0KLQlmY29lX2ludGVyZmFjZV9jbGVhbnVwKGZjb2UpOworCWxwb3J0ID0gZmNvZS0+Y3Rsci5scDsKIAlsaXN0X2RlbCgmZmNvZS0+bGlzdCk7Ci0JLyogUlROTCBtdXRleCBpcyBkcm9wcGVkIGJ5IGZjb2VfaWZfZGVzdHJveSAqLwotCWZjb2VfaWZfZGVzdHJveShmY29lLT5jdGxyLmxwKTsKKwlmY29lX2ludGVyZmFjZV9jbGVhbnVwKGZjb2UpOworCXJ0bmxfdW5sb2NrKCk7CisJZmNvZV9pZl9kZXN0cm95KGxwb3J0KTsKIG91dF9ub2RldjoKIAltdXRleF91bmxvY2soJmZjb2VfY29uZmlnX211dGV4KTsKIAlyZXR1cm4gcmM7CkBAIC0xOTEyLDggKzE4NTYsNiBAQAogCiAJcG9ydCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZmNvZV9wb3J0LCBkZXN0cm95X3dvcmspOwogCW11dGV4X2xvY2soJmZjb2VfY29uZmlnX211dGV4KTsKLQlydG5sX2xvY2soKTsKLQkvKiBSVE5MIG11dGV4IGlzIGRyb3BwZWQgYnkgZmNvZV9pZl9kZXN0cm95ICovCiAJZmNvZV9pZl9kZXN0cm95KHBvcnQtPmxwb3J0KTsKIAltdXRleF91bmxvY2soJmZjb2VfY29uZmlnX211dGV4KTsKIH0KQEAgLTE5NDgsMjMgKzE4OTAsNyBAQAogCXN0cnVjdCBmY19scG9ydCAqbHBvcnQ7CiAKIAltdXRleF9sb2NrKCZmY29lX2NvbmZpZ19tdXRleCk7Ci0KLQlpZiAoIXJ0bmxfdHJ5bG9jaygpKSB7Ci0JCW11dGV4X3VubG9jaygmZmNvZV9jb25maWdfbXV0ZXgpOwotCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCX0KLQotI2lmZGVmIENPTkZJR19GQ09FX01PRFVMRQotCS8qCi0JICogTWFrZSBzdXJlIHRoZSBtb2R1bGUgaGFzIGJlZW4gaW5pdGlhbGl6ZWQsIGFuZCBpcyBub3QgYWJvdXQgdG8gYmUKLQkgKiByZW1vdmVkLiAgTW9kdWxlIHBhcmFtdGVyIHN5c2ZzIGZpbGVzIGFyZSB3cml0YWJsZSBiZWZvcmUgdGhlCi0JICogbW9kdWxlX2luaXQgZnVuY3Rpb24gaXMgY2FsbGVkIGFuZCBhZnRlciBtb2R1bGVfZXhpdC4KLQkgKi8KLQlpZiAoVEhJU19NT0RVTEUtPnN0YXRlICE9IE1PRFVMRV9TVEFURV9MSVZFKSB7Ci0JCXJjID0gLUVOT0RFVjsKLQkJZ290byBvdXRfbm9kZXY7Ci0JfQotI2VuZGlmCisJcnRubF9sb2NrKCk7CiAKIAkvKiBsb29rIGZvciBleGlzdGluZyBscG9ydCAqLwogCWlmIChmY29lX2hvc3RsaXN0X2xvb2t1cChuZXRkZXYpKSB7CkBAIC0yMDI2LDcgKzE5NTIsNyBAQAogaW50IGZjb2VfbGlua19zcGVlZF91cGRhdGUoc3RydWN0IGZjX2xwb3J0ICpscG9ydCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZmNvZV9uZXRkZXYobHBvcnQpOwotCXN0cnVjdCBldGh0b29sX2NtZCBlY21kID0geyBFVEhUT09MX0dTRVQgfTsKKwlzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZDsKIAogCWlmICghZGV2X2V0aHRvb2xfZ2V0X3NldHRpbmdzKG5ldGRldiwgJmVjbWQpKSB7CiAJCWxwb3J0LT5saW5rX3N1cHBvcnRlZF9zcGVlZHMgJj0KQEAgLTIwMzcsMTEgKzE5NjMsMTQgQEAKIAkJaWYgKGVjbWQuc3VwcG9ydGVkICYgU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCkKIAkJCWxwb3J0LT5saW5rX3N1cHBvcnRlZF9zcGVlZHMgfD0KIAkJCQlGQ19QT1JUU1BFRURfMTBHQklUOwotCQlpZiAoZWNtZC5zcGVlZCA9PSBTUEVFRF8xMDAwKQorCQlzd2l0Y2ggKGV0aHRvb2xfY21kX3NwZWVkKCZlY21kKSkgeworCQljYXNlIFNQRUVEXzEwMDA6CiAJCQlscG9ydC0+bGlua19zcGVlZCA9IEZDX1BPUlRTUEVFRF8xR0JJVDsKLQkJaWYgKGVjbWQuc3BlZWQgPT0gU1BFRURfMTAwMDApCisJCQlicmVhazsKKwkJY2FzZSBTUEVFRF8xMDAwMDoKIAkJCWxwb3J0LT5saW5rX3NwZWVkID0gRkNfUE9SVFNQRUVEXzEwR0JJVDsKLQorCQkJYnJlYWs7CisJCX0KIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAtMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9mY29lL2Zjb2VfY3Rsci5jIGIvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZV9jdGxyLmMKaW5kZXggOWQzOGJlMi4uMjI5ZTRhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZV9jdGxyLmMKKysrIGIvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZV9jdGxyLmMKQEAgLTk3OCwxMCArOTc4LDggQEAKIAkgKiB0aGUgRkNGIHRoYXQgYW5zd2VycyBtdWx0aWNhc3Qgc29saWNpdGF0aW9ucywgbm90IHRoZSBvdGhlcnMgdGhhdAogCSAqIGFyZSBzZW5kaW5nIHBlcmlvZGljIG11bHRpY2FzdCBhZHZlcnRpc2VtZW50cy4KIAkgKi8KLQlpZiAobXR1X3ZhbGlkKSB7Ci0JCWxpc3RfZGVsKCZmY2YtPmxpc3QpOwotCQlsaXN0X2FkZCgmZmNmLT5saXN0LCAmZmlwLT5mY2ZzKTsKLQl9CisJaWYgKG10dV92YWxpZCkKKwkJbGlzdF9tb3ZlKCZmY2YtPmxpc3QsICZmaXAtPmZjZnMpOwogCiAJLyoKIAkgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCB2YWxpZGF0ZWQgRkNGLCBub3RlIHRoZSB0aW1lIGFuZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZV90cmFuc3BvcnQuYyBiL2RyaXZlcnMvc2NzaS9mY29lL2Zjb2VfdHJhbnNwb3J0LmMKaW5kZXggMjU4Njg0MS4uZjgxZjc3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZV90cmFuc3BvcnQuYworKysgYi9kcml2ZXJzL3Njc2kvZmNvZS9mY29lX3RyYW5zcG9ydC5jCkBAIC0zMzUsNyArMzM1LDcgQEAKIEVYUE9SVF9TWU1CT0woZmNvZV90cmFuc3BvcnRfYXR0YWNoKTsKIAogLyoqCi0gKiBmY29lX3RyYW5zcG9ydF9hdHRhY2ggLSBEZXRhY2hlcyBhbiBGQ29FIHRyYW5zcG9ydAorICogZmNvZV90cmFuc3BvcnRfZGV0YWNoIC0gRGV0YWNoZXMgYW4gRkNvRSB0cmFuc3BvcnQKICAqIEBmdDogVGhlIGZjb2UgdHJhbnNwb3J0IHRvIGJlIGF0dGFjaGVkCiAgKgogICogUmV0dXJucyA6IDAgZm9yIHN1Y2Nlc3MKQEAgLTM0Myw2ICszNDMsNyBAQAogaW50IGZjb2VfdHJhbnNwb3J0X2RldGFjaChzdHJ1Y3QgZmNvZV90cmFuc3BvcnQgKmZ0KQogewogCWludCByYyA9IDA7CisJc3RydWN0IGZjb2VfbmV0ZGV2X21hcHBpbmcgKm5tID0gTlVMTCwgKnRtcDsKIAogCW11dGV4X2xvY2soJmZ0X211dGV4KTsKIAlpZiAoIWZ0LT5hdHRhY2hlZCkgewpAQCAtMzUyLDYgKzM1MywxOSBAQAogCQlnb3RvIG91dF9hdHRhY2g7CiAJfQogCisJLyogcmVtb3ZlIG5ldGRldiBtYXBwaW5nIGZvciB0aGlzIHRyYW5zcG9ydCBhcyBpdCBpcyBnb2luZyBhd2F5ICovCisJbXV0ZXhfbG9jaygmZm5fbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShubSwgdG1wLCAmZmNvZV9uZXRkZXZzLCBsaXN0KSB7CisJCWlmIChubS0+ZnQgPT0gZnQpIHsKKwkJCUxJQkZDT0VfVFJBTlNQT1JUX0RCRygidHJhbnNwb3J0ICVzIGdvaW5nIGF3YXksICIKKwkJCQkicmVtb3ZlIGl0cyBuZXRkZXYgbWFwcGluZyBmb3IgJXNcbiIsCisJCQkJZnQtPm5hbWUsIG5tLT5uZXRkZXYtPm5hbWUpOworCQkJbGlzdF9kZWwoJm5tLT5saXN0KTsKKwkJCWtmcmVlKG5tKTsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmZuX211dGV4KTsKKwogCWxpc3RfZGVsKCZmdC0+bGlzdCk7CiAJZnQtPmF0dGFjaGVkID0gZmFsc2U7CiAJTElCRkNPRV9UUkFOU1BPUlRfREJHKCJkZXRhY2hpbmcgdHJhbnNwb3J0ICVzXG4iLCBmdC0+bmFtZSk7CkBAIC0zNzEsOSArMzg1LDkgQEAKIAlpID0gaiA9IHNwcmludGYoYnVmZmVyLCAiQXR0YWNoZWQgRkNvRSB0cmFuc3BvcnRzOiIpOwogCW11dGV4X2xvY2soJmZ0X211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZ0LCAmZmNvZV90cmFuc3BvcnRzLCBsaXN0KSB7Ci0JCWkgKz0gc25wcmludGYoJmJ1ZmZlcltpXSwgSUZOQU1TSVosICIlcyAiLCBmdC0+bmFtZSk7Ci0JCWlmIChpID49IFBBR0VfU0laRSkKKwkJaWYgKGkgPj0gUEFHRV9TSVpFIC0gSUZOQU1TSVopCiAJCQlicmVhazsKKwkJaSArPSBzbnByaW50ZigmYnVmZmVyW2ldLCBJRk5BTVNJWiwgIiVzICIsIGZ0LT5uYW1lKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZmdF9tdXRleCk7CiAJaWYgKGkgPT0gaikKQEAgLTUzMCw5ICs1NDQsNiBAQAogCXN0cnVjdCBmY29lX3RyYW5zcG9ydCAqZnQgPSBOVUxMOwogCWVudW0gZmlwX3N0YXRlIGZpcF9tb2RlID0gKGVudW0gZmlwX3N0YXRlKShsb25nKWtwLT5hcmc7CiAKLQlpZiAoIW11dGV4X3RyeWxvY2soJmZ0X211dGV4KSkKLQkJcmV0dXJuIHJlc3RhcnRfc3lzY2FsbCgpOwotCiAjaWZkZWYgQ09ORklHX0xJQkZDT0VfTU9EVUxFCiAJLyoKIAkgKiBNYWtlIHN1cmUgdGhlIG1vZHVsZSBoYXMgYmVlbiBpbml0aWFsaXplZCwgYW5kIGlzIG5vdCBhYm91dCB0byBiZQpAQCAtNTQzLDYgKzU1NCw4IEBACiAJCWdvdG8gb3V0X25vZGV2OwogI2VuZGlmCiAKKwltdXRleF9sb2NrKCZmdF9tdXRleCk7CisKIAluZXRkZXYgPSBmY29lX2lmX3RvX25ldGRldihidWZmZXIpOwogCWlmICghbmV0ZGV2KSB7CiAJCUxJQkZDT0VfVFJBTlNQT1JUX0RCRygiSW52YWxpZCBkZXZpY2UgJXMuXG4iLCBidWZmZXIpOwpAQCAtNTg2LDEwICs1OTksNyBAQAogCWRldl9wdXQobmV0ZGV2KTsKIG91dF9ub2RldjoKIAltdXRleF91bmxvY2soJmZ0X211dGV4KTsKLQlpZiAocmMgPT0gLUVSRVNUQVJUU1lTKQotCQlyZXR1cm4gcmVzdGFydF9zeXNjYWxsKCk7Ci0JZWxzZQotCQlyZXR1cm4gcmM7CisJcmV0dXJuIHJjOwogfQogCiAvKioKQEAgLTYwOCw5ICs2MTgsNiBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBOVUxMOwogCXN0cnVjdCBmY29lX3RyYW5zcG9ydCAqZnQgPSBOVUxMOwogCi0JaWYgKCFtdXRleF90cnlsb2NrKCZmdF9tdXRleCkpCi0JCXJldHVybiByZXN0YXJ0X3N5c2NhbGwoKTsKLQogI2lmZGVmIENPTkZJR19MSUJGQ09FX01PRFVMRQogCS8qCiAJICogTWFrZSBzdXJlIHRoZSBtb2R1bGUgaGFzIGJlZW4gaW5pdGlhbGl6ZWQsIGFuZCBpcyBub3QgYWJvdXQgdG8gYmUKQEAgLTYyMSw2ICs2MjgsOCBAQAogCQlnb3RvIG91dF9ub2RldjsKICNlbmRpZgogCisJbXV0ZXhfbG9jaygmZnRfbXV0ZXgpOworCiAJbmV0ZGV2ID0gZmNvZV9pZl90b19uZXRkZXYoYnVmZmVyKTsKIAlpZiAoIW5ldGRldikgewogCQlMSUJGQ09FX1RSQU5TUE9SVF9EQkcoImludmFsaWQgZGV2aWNlICVzLlxuIiwgYnVmZmVyKTsKQEAgLTY0NSwxMSArNjU0LDcgQEAKIAlkZXZfcHV0KG5ldGRldik7CiBvdXRfbm9kZXY6CiAJbXV0ZXhfdW5sb2NrKCZmdF9tdXRleCk7Ci0KLQlpZiAocmMgPT0gLUVSRVNUQVJUU1lTKQotCQlyZXR1cm4gcmVzdGFydF9zeXNjYWxsKCk7Ci0JZWxzZQotCQlyZXR1cm4gcmM7CisJcmV0dXJuIHJjOwogfQogCiAvKioKQEAgLTY2Nyw5ICs2NzIsNiBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBOVUxMOwogCXN0cnVjdCBmY29lX3RyYW5zcG9ydCAqZnQgPSBOVUxMOwogCi0JaWYgKCFtdXRleF90cnlsb2NrKCZmdF9tdXRleCkpCi0JCXJldHVybiByZXN0YXJ0X3N5c2NhbGwoKTsKLQogI2lmZGVmIENPTkZJR19MSUJGQ09FX01PRFVMRQogCS8qCiAJICogTWFrZSBzdXJlIHRoZSBtb2R1bGUgaGFzIGJlZW4gaW5pdGlhbGl6ZWQsIGFuZCBpcyBub3QgYWJvdXQgdG8gYmUKQEAgLTY4MCw2ICs2ODIsOCBAQAogCQlnb3RvIG91dF9ub2RldjsKICNlbmRpZgogCisJbXV0ZXhfbG9jaygmZnRfbXV0ZXgpOworCiAJbmV0ZGV2ID0gZmNvZV9pZl90b19uZXRkZXYoYnVmZmVyKTsKIAlpZiAoIW5ldGRldikKIAkJZ290byBvdXRfbm9kZXY7CkBAIC03MTYsOSArNzIwLDYgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgZmNvZV90cmFuc3BvcnQgKmZ0ID0gTlVMTDsKIAotCWlmICghbXV0ZXhfdHJ5bG9jaygmZnRfbXV0ZXgpKQotCQlyZXR1cm4gcmVzdGFydF9zeXNjYWxsKCk7Ci0KICNpZmRlZiBDT05GSUdfTElCRkNPRV9NT0RVTEUKIAkvKgogCSAqIE1ha2Ugc3VyZSB0aGUgbW9kdWxlIGhhcyBiZWVuIGluaXRpYWxpemVkLCBhbmQgaXMgbm90IGFib3V0IHRvIGJlCkBAIC03MjksNiArNzMwLDggQEAKIAkJZ290byBvdXRfbm9kZXY7CiAjZW5kaWYKIAorCW11dGV4X2xvY2soJmZ0X211dGV4KTsKKwogCW5ldGRldiA9IGZjb2VfaWZfdG9fbmV0ZGV2KGJ1ZmZlcik7CiAJaWYgKCFuZXRkZXYpCiAJCWdvdG8gb3V0X25vZGV2OwpAQCAtNzQzLDEwICs3NDYsNyBAQAogCWRldl9wdXQobmV0ZGV2KTsKIG91dF9ub2RldjoKIAltdXRleF91bmxvY2soJmZ0X211dGV4KTsKLQlpZiAocmMgPT0gLUVSRVNUQVJUU1lTKQotCQlyZXR1cm4gcmVzdGFydF9zeXNjYWxsKCk7Ci0JZWxzZQotCQlyZXR1cm4gcmM7CisJcmV0dXJuIHJjOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ocHNhLmMgYi9kcml2ZXJzL3Njc2kvaHBzYS5jCmluZGV4IDQxNWFkNGYuLmM2YzA0MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ocHNhLmMKKysrIGIvZHJpdmVycy9zY3NpL2hwc2EuYwpAQCAtMjczLDcgKzI3Myw3IEBACiAJCQkicGVyZm9ybWFudCIgOiAic2ltcGxlIik7CiB9CiAKLS8qIExpc3Qgb2YgY29udHJvbGxlcnMgd2hpY2ggY2Fubm90IGJlIHJlc2V0IG9uIGtleGVjIHdpdGggcmVzZXRfZGV2aWNlcyAqLworLyogTGlzdCBvZiBjb250cm9sbGVycyB3aGljaCBjYW5ub3QgYmUgaGFyZCByZXNldCBvbiBrZXhlYyB3aXRoIHJlc2V0X2RldmljZXMgKi8KIHN0YXRpYyB1MzIgdW5yZXNldHRhYmxlX2NvbnRyb2xsZXJbXSA9IHsKIAkweDMyNGExMDNDLCAvKiBTbWFydCBBcnJheSBQNzEybSAqLwogCTB4MzI0YjEwM0MsIC8qIFNtYXJ0QXJyYXkgUDcxMW0gKi8KQEAgLTI5MSwxNiArMjkxLDQ1IEBACiAJMHg0MDlEMEUxMSwgLyogU21hcnQgQXJyYXkgNjQwMCBFTSAqLwogfTsKIAotc3RhdGljIGludCBjdGxyX2lzX3Jlc2V0dGFibGUoc3RydWN0IGN0bHJfaW5mbyAqaCkKKy8qIExpc3Qgb2YgY29udHJvbGxlcnMgd2hpY2ggY2Fubm90IGV2ZW4gYmUgc29mdCByZXNldCAqLworc3RhdGljIHUzMiBzb2Z0X3VucmVzZXR0YWJsZV9jb250cm9sbGVyW10gPSB7CisJLyogRXhjbHVkZSA2NDB4IGJvYXJkcy4gIFRoZXNlIGFyZSB0d28gcGNpIGRldmljZXMgaW4gb25lIHNsb3QKKwkgKiB3aGljaCBzaGFyZSBhIGJhdHRlcnkgYmFja2VkIGNhY2hlIG1vZHVsZS4gIE9uZSBjb250cm9scyB0aGUKKwkgKiBjYWNoZSwgdGhlIG90aGVyIGFjY2Vzc2VzIHRoZSBjYWNoZSB0aHJvdWdoIHRoZSBvbmUgdGhhdCBjb250cm9scworCSAqIGl0LiAgSWYgd2UgcmVzZXQgdGhlIG9uZSBjb250cm9sbGluZyB0aGUgY2FjaGUsIHRoZSBvdGhlciB3aWxsCisJICogbGlrZWx5IG5vdCBiZSBoYXBweS4gIEp1c3QgZm9yYmlkIHJlc2V0dGluZyB0aGlzIGNvbmpvaW5lZCBtZXNzLgorCSAqIFRoZSA2NDB4IGlzbid0IHJlYWxseSBzdXBwb3J0ZWQgYnkgaHBzYSBhbnl3YXkuCisJICovCisJMHg0MDlDMEUxMSwgLyogU21hcnQgQXJyYXkgNjQwMCAqLworCTB4NDA5RDBFMTEsIC8qIFNtYXJ0IEFycmF5IDY0MDAgRU0gKi8KK307CisKK3N0YXRpYyBpbnQgY3Rscl9pc19oYXJkX3Jlc2V0dGFibGUodTMyIGJvYXJkX2lkKQogewogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodW5yZXNldHRhYmxlX2NvbnRyb2xsZXIpOyBpKyspCi0JCWlmICh1bnJlc2V0dGFibGVfY29udHJvbGxlcltpXSA9PSBoLT5ib2FyZF9pZCkKKwkJaWYgKHVucmVzZXR0YWJsZV9jb250cm9sbGVyW2ldID09IGJvYXJkX2lkKQogCQkJcmV0dXJuIDA7CiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyBpbnQgY3Rscl9pc19zb2Z0X3Jlc2V0dGFibGUodTMyIGJvYXJkX2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc29mdF91bnJlc2V0dGFibGVfY29udHJvbGxlcik7IGkrKykKKwkJaWYgKHNvZnRfdW5yZXNldHRhYmxlX2NvbnRyb2xsZXJbaV0gPT0gYm9hcmRfaWQpCisJCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBjdGxyX2lzX3Jlc2V0dGFibGUodTMyIGJvYXJkX2lkKQoreworCXJldHVybiBjdGxyX2lzX2hhcmRfcmVzZXR0YWJsZShib2FyZF9pZCkgfHwKKwkJY3Rscl9pc19zb2Z0X3Jlc2V0dGFibGUoYm9hcmRfaWQpOworfQorCiBzdGF0aWMgc3NpemVfdCBob3N0X3Nob3dfcmVzZXR0YWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTMwOCw3ICszMzcsNyBAQAogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAogCWggPSBzaG9zdF90b19oYmEoc2hvc3QpOwotCXJldHVybiBzbnByaW50ZihidWYsIDIwLCAiJWRcbiIsIGN0bHJfaXNfcmVzZXR0YWJsZShoKSk7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMjAsICIlZFxuIiwgY3Rscl9pc19yZXNldHRhYmxlKGgtPmJvYXJkX2lkKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX2xvZ2ljYWxfZGV2X2FkZHJfbW9kZSh1bnNpZ25lZCBjaGFyIHNjc2kzYWRkcltdKQpAQCAtOTI5LDEzICs5NTgsNiBAQAogCS8qIG5vdGhpbmcgdG8gZG8uICovCiB9CiAKLXN0YXRpYyB2b2lkIGhwc2Ffc2NzaV9zZXR1cChzdHJ1Y3QgY3Rscl9pbmZvICpoKQotewotCWgtPm5kZXZpY2VzID0gMDsKLQloLT5zY3NpX2hvc3QgPSBOVUxMOwotCXNwaW5fbG9ja19pbml0KCZoLT5kZXZsb2NrKTsKLX0KLQogc3RhdGljIHZvaWQgaHBzYV9mcmVlX3NnX2NoYWluX2Jsb2NrcyhzdHJ1Y3QgY3Rscl9pbmZvICpoKQogewogCWludCBpOwpAQCAtMTAwNiw4ICsxMDI4LDcgQEAKIAlwY2lfdW5tYXBfc2luZ2xlKGgtPnBkZXYsIHRlbXA2NC52YWwsIGNoYWluX3NnLT5MZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwogfQogCi1zdGF0aWMgdm9pZCBjb21wbGV0ZV9zY3NpX2NvbW1hbmQoc3RydWN0IENvbW1hbmRMaXN0ICpjcCwKLQlpbnQgdGltZW91dCwgdTMyIHRhZykKK3N0YXRpYyB2b2lkIGNvbXBsZXRlX3Njc2lfY29tbWFuZChzdHJ1Y3QgQ29tbWFuZExpc3QgKmNwKQogewogCXN0cnVjdCBzY3NpX2NtbmQgKmNtZDsKIAlzdHJ1Y3QgY3Rscl9pbmZvICpoOwpAQCAtMTMwOCw3ICsxMzI5LDcgQEAKIAlpbnQgcmV0cnlfY291bnQgPSAwOwogCiAJZG8gewotCQltZW1zZXQoYy0+ZXJyX2luZm8sIDAsIHNpemVvZihjLT5lcnJfaW5mbykpOworCQltZW1zZXQoYy0+ZXJyX2luZm8sIDAsIHNpemVvZigqYy0+ZXJyX2luZm8pKTsKIAkJaHBzYV9zY3NpX2RvX3NpbXBsZV9jbWRfY29yZShoLCBjKTsKIAkJcmV0cnlfY291bnQrKzsKIAl9IHdoaWxlIChjaGVja19mb3JfdW5pdF9hdHRlbnRpb24oaCwgYykgJiYgcmV0cnlfY291bnQgPD0gMyk7CkBAIC0xNTcwLDYgKzE1OTEsNyBAQAogCSJNU0EyMDI0IiwKIAkiTVNBMjMxMiIsCiAJIk1TQTIzMjQiLAorCSJQMjAwMCBHMyBTQVMiLAogCU5VTEwsCiB9OwogCkBAIC0yNzUxLDYgKzI3NzMsMjYgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgX19kZXZpbml0IGhwc2Ffc2VuZF9ob3N0X3Jlc2V0KHN0cnVjdCBjdGxyX2luZm8gKmgsCisJdW5zaWduZWQgY2hhciAqc2NzaTNhZGRyLCB1OCByZXNldF90eXBlKQoreworCXN0cnVjdCBDb21tYW5kTGlzdCAqYzsKKworCWMgPSBjbWRfYWxsb2MoaCk7CisJaWYgKCFjKQorCQlyZXR1cm4gLUVOT01FTTsKKwlmaWxsX2NtZChjLCBIUFNBX0RFVklDRV9SRVNFVF9NU0csIGgsIE5VTEwsIDAsIDAsCisJCVJBSURfQ1RMUl9MVU5JRCwgVFlQRV9NU0cpOworCWMtPlJlcXVlc3QuQ0RCWzFdID0gcmVzZXRfdHlwZTsgLyogZmlsbF9jbWQgZGVmYXVsdHMgdG8gdGFyZ2V0IHJlc2V0ICovCisJYy0+d2FpdGluZyA9IE5VTEw7CisJZW5xdWV1ZV9jbWRfYW5kX3N0YXJ0X2lvKGgsIGMpOworCS8qIERvbid0IHdhaXQgZm9yIGNvbXBsZXRpb24sIHRoZSByZXNldCB3b24ndCBjb21wbGV0ZS4gIERvbid0IGZyZWUKKwkgKiB0aGUgY29tbWFuZCBlaXRoZXIuICBUaGlzIGlzIHRoZSBsYXN0IGNvbW1hbmQgd2Ugd2lsbCBzZW5kIGJlZm9yZQorCSAqIHJlLWluaXRpYWxpemluZyBldmVyeXRoaW5nLCBzbyBpdCBkb2Vzbid0IG1hdHRlciBhbmQgd29uJ3QgbGVhay4KKwkgKi8KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgZmlsbF9jbWQoc3RydWN0IENvbW1hbmRMaXN0ICpjLCB1OCBjbWQsIHN0cnVjdCBjdGxyX2luZm8gKmgsCiAJdm9pZCAqYnVmZiwgc2l6ZV90IHNpemUsIHU4IHBhZ2VfY29kZSwgdW5zaWduZWQgY2hhciAqc2NzaTNhZGRyLAogCWludCBjbWRfdHlwZSkKQEAgLTI4MjgsNyArMjg3MCw4IEBACiAJCQljLT5SZXF1ZXN0LlR5cGUuQXR0cmlidXRlID0gQVRUUl9TSU1QTEU7CiAJCQljLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID0gWEZFUl9OT05FOwogCQkJYy0+UmVxdWVzdC5UaW1lb3V0ID0gMDsgLyogRG9uJ3QgdGltZSBvdXQgKi8KLQkJCWMtPlJlcXVlc3QuQ0RCWzBdID0gIDB4MDE7IC8qIFJFU0VUX01TRyBpcyAweDAxICovCisJCQltZW1zZXQoJmMtPlJlcXVlc3QuQ0RCWzBdLCAwLCBzaXplb2YoYy0+UmVxdWVzdC5DREIpKTsKKwkJCWMtPlJlcXVlc3QuQ0RCWzBdID0gIGNtZDsKIAkJCWMtPlJlcXVlc3QuQ0RCWzFdID0gMHgwMzsgIC8qIFJlc2V0IHRhcmdldCBhYm92ZSAqLwogCQkJLyogSWYgYnl0ZXMgNC03IGFyZSB6ZXJvLCBpdCBtZWFucyByZXNldCB0aGUgKi8KIAkJCS8qIEx1bklEIGRldmljZSAqLwpAQCAtMjkzNiw3ICsyOTc5LDcgQEAKIHsKIAlyZW1vdmVRKGMpOwogCWlmIChsaWtlbHkoYy0+Y21kX3R5cGUgPT0gQ01EX1NDU0kpKQotCQljb21wbGV0ZV9zY3NpX2NvbW1hbmQoYywgMCwgcmF3X3RhZyk7CisJCWNvbXBsZXRlX3Njc2lfY29tbWFuZChjKTsKIAllbHNlIGlmIChjLT5jbWRfdHlwZSA9PSBDTURfSU9DVExfUEVORCkKIAkJY29tcGxldGUoYy0+d2FpdGluZyk7CiB9CkBAIC0yOTk0LDYgKzMwMzcsNjMgQEAKIAlyZXR1cm4gbmV4dF9jb21tYW5kKGgpOwogfQogCisvKiBTb21lIGNvbnRyb2xsZXJzLCBsaWtlIHA0MDAsIHdpbGwgZ2l2ZSB1cyBvbmUgaW50ZXJydXB0CisgKiBhZnRlciBhIHNvZnQgcmVzZXQsIGV2ZW4gaWYgd2UgdHVybmVkIGludGVycnVwdHMgb2ZmLgorICogT25seSBuZWVkIHRvIGNoZWNrIGZvciB0aGlzIGluIHRoZSBocHNhX3h4eF9kaXNjYXJkX2NvbXBsZXRpb25zCisgKiBmdW5jdGlvbnMuCisgKi8KK3N0YXRpYyBpbnQgaWdub3JlX2JvZ3VzX2ludGVycnVwdChzdHJ1Y3QgY3Rscl9pbmZvICpoKQoreworCWlmIChsaWtlbHkoIXJlc2V0X2RldmljZXMpKQorCQlyZXR1cm4gMDsKKworCWlmIChsaWtlbHkoaC0+aW50ZXJydXB0c19lbmFibGVkKSkKKwkJcmV0dXJuIDA7CisKKwlkZXZfaW5mbygmaC0+cGRldi0+ZGV2LCAiUmVjZWl2ZWQgaW50ZXJydXB0IHdoaWxlIGludGVycnVwdHMgZGlzYWJsZWQgIgorCQkiKGtub3duIGZpcm13YXJlIGJ1Zy4pICBJZ25vcmluZy5cbiIpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBocHNhX2ludHhfZGlzY2FyZF9jb21wbGV0aW9ucyhpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGN0bHJfaW5mbyAqaCA9IGRldl9pZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiByYXdfdGFnOworCisJaWYgKGlnbm9yZV9ib2d1c19pbnRlcnJ1cHQoaCkpCisJCXJldHVybiBJUlFfTk9ORTsKKworCWlmIChpbnRlcnJ1cHRfbm90X2Zvcl91cyhoKSkKKwkJcmV0dXJuIElSUV9OT05FOworCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5sb2NrLCBmbGFncyk7CisJd2hpbGUgKGludGVycnVwdF9wZW5kaW5nKGgpKSB7CisJCXJhd190YWcgPSBnZXRfbmV4dF9jb21wbGV0aW9uKGgpOworCQl3aGlsZSAocmF3X3RhZyAhPSBGSUZPX0VNUFRZKQorCQkJcmF3X3RhZyA9IG5leHRfY29tbWFuZChoKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IGhwc2FfbXNpeF9kaXNjYXJkX2NvbXBsZXRpb25zKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgY3Rscl9pbmZvICpoID0gZGV2X2lkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHJhd190YWc7CisKKwlpZiAoaWdub3JlX2JvZ3VzX2ludGVycnVwdChoKSkKKwkJcmV0dXJuIElSUV9OT05FOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKKwlyYXdfdGFnID0gZ2V0X25leHRfY29tcGxldGlvbihoKTsKKwl3aGlsZSAocmF3X3RhZyAhPSBGSUZPX0VNUFRZKQorCQlyYXdfdGFnID0gbmV4dF9jb21tYW5kKGgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKIHN0YXRpYyBpcnFyZXR1cm5fdCBkb19ocHNhX2ludHJfaW50eChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IGN0bHJfaW5mbyAqaCA9IGRldl9pZDsKQEAgLTMxMzIsMTEgKzMyMzIsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBocHNhX3NvZnRfcmVzZXRfY29udHJvbGxlcihwKSBocHNhX21lc3NhZ2UocCwgMSwgMCkKICNkZWZpbmUgaHBzYV9ub29wKHApIGhwc2FfbWVzc2FnZShwLCAzLCAwKQogCiBzdGF0aWMgaW50IGhwc2FfY29udHJvbGxlcl9oYXJkX3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCXZvaWQgKiBfX2lvbWVtIHZhZGRyLCBib29sIHVzZV9kb29yYmVsbCkKKwl2b2lkICogX19pb21lbSB2YWRkciwgdTMyIHVzZV9kb29yYmVsbCkKIHsKIAl1MTYgcG1jc3I7CiAJaW50IHBvczsKQEAgLTMxNDcsOCArMzI0Niw3IEBACiAJCSAqIG90aGVyIHdheSB1c2luZyB0aGUgZG9vcmJlbGwgcmVnaXN0ZXIuCiAJCSAqLwogCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAidXNpbmcgZG9vcmJlbGwgdG8gcmVzZXQgY29udHJvbGxlclxuIik7Ci0JCXdyaXRlbChET09SQkVMTF9DVExSX1JFU0VULCB2YWRkciArIFNBNV9ET09SQkVMTCk7Ci0JCW1zbGVlcCgxMDAwKTsKKwkJd3JpdGVsKHVzZV9kb29yYmVsbCwgdmFkZHIgKyBTQTVfRE9PUkJFTEwpOwogCX0gZWxzZSB7IC8qIFRyeSB0byBkbyBpdCB0aGUgUENJIHBvd2VyIHN0YXRlIHdheSAqLwogCiAJCS8qIFF1b3RpbmcgZnJvbSB0aGUgT3BlbiBDSVNTIFNwZWNpZmljYXRpb246ICJUaGUgUG93ZXIKQEAgLTMxNzksMTIgKzMyNzcsNjMgQEAKIAkJcG1jc3IgJj0gflBDSV9QTV9DVFJMX1NUQVRFX01BU0s7CiAJCXBtY3NyIHw9IFBDSV9EMDsKIAkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIHBvcyArIFBDSV9QTV9DVFJMLCBwbWNzcik7Ci0KLQkJbXNsZWVwKDUwMCk7CiAJfQogCXJldHVybiAwOwogfQogCitzdGF0aWMgX19kZXZpbml0IHZvaWQgaW5pdF9kcml2ZXJfdmVyc2lvbihjaGFyICpkcml2ZXJfdmVyc2lvbiwgaW50IGxlbikKK3sKKwltZW1zZXQoZHJpdmVyX3ZlcnNpb24sIDAsIGxlbik7CisJc3RybmNweShkcml2ZXJfdmVyc2lvbiwgImhwc2EgIiBIUFNBX0RSSVZFUl9WRVJTSU9OLCBsZW4gLSAxKTsKK30KKworc3RhdGljIF9fZGV2aW5pdCBpbnQgd3JpdGVfZHJpdmVyX3Zlcl90b19jZmd0YWJsZSgKKwlzdHJ1Y3QgQ2ZnVGFibGUgX19pb21lbSAqY2ZndGFibGUpCit7CisJY2hhciAqZHJpdmVyX3ZlcnNpb247CisJaW50IGksIHNpemUgPSBzaXplb2YoY2ZndGFibGUtPmRyaXZlcl92ZXJzaW9uKTsKKworCWRyaXZlcl92ZXJzaW9uID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRyaXZlcl92ZXJzaW9uKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWluaXRfZHJpdmVyX3ZlcnNpb24oZHJpdmVyX3ZlcnNpb24sIHNpemUpOworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisJCXdyaXRlYihkcml2ZXJfdmVyc2lvbltpXSwgJmNmZ3RhYmxlLT5kcml2ZXJfdmVyc2lvbltpXSk7CisJa2ZyZWUoZHJpdmVyX3ZlcnNpb24pOworCXJldHVybiAwOworfQorCitzdGF0aWMgX19kZXZpbml0IHZvaWQgcmVhZF9kcml2ZXJfdmVyX2Zyb21fY2ZndGFibGUoCisJc3RydWN0IENmZ1RhYmxlIF9faW9tZW0gKmNmZ3RhYmxlLCB1bnNpZ25lZCBjaGFyICpkcml2ZXJfdmVyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihjZmd0YWJsZS0+ZHJpdmVyX3ZlcnNpb24pOyBpKyspCisJCWRyaXZlcl92ZXJbaV0gPSByZWFkYigmY2ZndGFibGUtPmRyaXZlcl92ZXJzaW9uW2ldKTsKK30KKworc3RhdGljIF9fZGV2aW5pdCBpbnQgY29udHJvbGxlcl9yZXNldF9mYWlsZWQoCisJc3RydWN0IENmZ1RhYmxlIF9faW9tZW0gKmNmZ3RhYmxlKQoreworCisJY2hhciAqZHJpdmVyX3ZlciwgKm9sZF9kcml2ZXJfdmVyOworCWludCByYywgc2l6ZSA9IHNpemVvZihjZmd0YWJsZS0+ZHJpdmVyX3ZlcnNpb24pOworCisJb2xkX2RyaXZlcl92ZXIgPSBrbWFsbG9jKDIgKiBzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW9sZF9kcml2ZXJfdmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKwlkcml2ZXJfdmVyID0gb2xkX2RyaXZlcl92ZXIgKyBzaXplOworCisJLyogQWZ0ZXIgYSByZXNldCwgdGhlIDMyIGJ5dGVzIG9mICJkcml2ZXIgdmVyc2lvbiIgaW4gdGhlIGNmZ3RhYmxlCisJICogc2hvdWxkIGhhdmUgYmVlbiBjaGFuZ2VkLCBvdGhlcndpc2Ugd2Uga25vdyB0aGUgcmVzZXQgZmFpbGVkLgorCSAqLworCWluaXRfZHJpdmVyX3ZlcnNpb24ob2xkX2RyaXZlcl92ZXIsIHNpemUpOworCXJlYWRfZHJpdmVyX3Zlcl9mcm9tX2NmZ3RhYmxlKGNmZ3RhYmxlLCBkcml2ZXJfdmVyKTsKKwlyYyA9ICFtZW1jbXAoZHJpdmVyX3Zlciwgb2xkX2RyaXZlcl92ZXIsIHNpemUpOworCWtmcmVlKG9sZF9kcml2ZXJfdmVyKTsKKwlyZXR1cm4gcmM7Cit9CiAvKiBUaGlzIGRvZXMgYSBoYXJkIHJlc2V0IG9mIHRoZSBjb250cm9sbGVyIHVzaW5nIFBDSSBwb3dlciBtYW5hZ2VtZW50CiAgKiBzdGF0ZXMgb3IgdGhlIHVzaW5nIHRoZSBkb29yYmVsbCByZWdpc3Rlci4KICAqLwpAQCAtMzE5NSwxMCArMzM0NCwxMCBAQAogCXU2NCBjZmdfYmFzZV9hZGRyX2luZGV4OwogCXZvaWQgX19pb21lbSAqdmFkZHI7CiAJdW5zaWduZWQgbG9uZyBwYWRkcjsKLQl1MzIgbWlzY19md19zdXBwb3J0LCBhY3RpdmVfdHJhbnNwb3J0OworCXUzMiBtaXNjX2Z3X3N1cHBvcnQ7CiAJaW50IHJjOwogCXN0cnVjdCBDZmdUYWJsZSBfX2lvbWVtICpjZmd0YWJsZTsKLQlib29sIHVzZV9kb29yYmVsbDsKKwl1MzIgdXNlX2Rvb3JiZWxsOwogCXUzMiBib2FyZF9pZDsKIAl1MTYgY29tbWFuZF9yZWdpc3RlcjsKIApAQCAtMzIxNSwyMCArMzM2NCwxNSBAQAogCSAqIHVzaW5nIHRoZSBkb29yYmVsbCByZWdpc3Rlci4KIAkgKi8KIAotCS8qIEV4Y2x1ZGUgNjQweCBib2FyZHMuICBUaGVzZSBhcmUgdHdvIHBjaSBkZXZpY2VzIGluIG9uZSBzbG90Ci0JICogd2hpY2ggc2hhcmUgYSBiYXR0ZXJ5IGJhY2tlZCBjYWNoZSBtb2R1bGUuICBPbmUgY29udHJvbHMgdGhlCi0JICogY2FjaGUsIHRoZSBvdGhlciBhY2Nlc3NlcyB0aGUgY2FjaGUgdGhyb3VnaCB0aGUgb25lIHRoYXQgY29udHJvbHMKLQkgKiBpdC4gIElmIHdlIHJlc2V0IHRoZSBvbmUgY29udHJvbGxpbmcgdGhlIGNhY2hlLCB0aGUgb3RoZXIgd2lsbAotCSAqIGxpa2VseSBub3QgYmUgaGFwcHkuICBKdXN0IGZvcmJpZCByZXNldHRpbmcgdGhpcyBjb25qb2luZWQgbWVzcy4KLQkgKiBUaGUgNjQweCBpc24ndCByZWFsbHkgc3VwcG9ydGVkIGJ5IGhwc2EgYW55d2F5LgotCSAqLwogCXJjID0gaHBzYV9sb29rdXBfYm9hcmRfaWQocGRldiwgJmJvYXJkX2lkKTsKLQlpZiAocmMgPCAwKSB7CisJaWYgKHJjIDwgMCB8fCAhY3Rscl9pc19yZXNldHRhYmxlKGJvYXJkX2lkKSkgewogCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiTm90IHJlc2V0dGluZyBkZXZpY2UuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCWlmIChib2FyZF9pZCA9PSAweDQwOUMwRTExIHx8IGJvYXJkX2lkID09IDB4NDA5RDBFMTEpCi0JCXJldHVybiAtRU5PVFNVUFA7CisKKwkvKiBpZiBjb250cm9sbGVyIGlzIHNvZnQtIGJ1dCBub3QgaGFyZCByZXNldHRhYmxlLi4uICovCisJaWYgKCFjdGxyX2lzX2hhcmRfcmVzZXR0YWJsZShib2FyZF9pZCkpCisJCXJldHVybiAtRU5PVFNVUFA7IC8qIHRyeSBzb2Z0IHJlc2V0IGxhdGVyLiAqLwogCiAJLyogU2F2ZSB0aGUgUENJIGNvbW1hbmQgcmVnaXN0ZXIgKi8KIAlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCA0LCAmY29tbWFuZF9yZWdpc3Rlcik7CkBAIC0zMjU3LDEwICszNDAxLDI4IEBACiAJCXJjID0gLUVOT01FTTsKIAkJZ290byB1bm1hcF92YWRkcjsKIAl9CisJcmMgPSB3cml0ZV9kcml2ZXJfdmVyX3RvX2NmZ3RhYmxlKGNmZ3RhYmxlKTsKKwlpZiAocmMpCisJCWdvdG8gdW5tYXBfdmFkZHI7CiAKLQkvKiBJZiByZXNldCB2aWEgZG9vcmJlbGwgcmVnaXN0ZXIgaXMgc3VwcG9ydGVkLCB1c2UgdGhhdC4gKi8KKwkvKiBJZiByZXNldCB2aWEgZG9vcmJlbGwgcmVnaXN0ZXIgaXMgc3VwcG9ydGVkLCB1c2UgdGhhdC4KKwkgKiBUaGVyZSBhcmUgdHdvIHN1Y2ggbWV0aG9kcy4gIEZhdm9yIHRoZSBuZXdlc3QgbWV0aG9kLgorCSAqLwogCW1pc2NfZndfc3VwcG9ydCA9IHJlYWRsKCZjZmd0YWJsZS0+bWlzY19md19zdXBwb3J0KTsKLQl1c2VfZG9vcmJlbGwgPSBtaXNjX2Z3X3N1cHBvcnQgJiBNSVNDX0ZXX0RPT1JCRUxMX1JFU0VUOworCXVzZV9kb29yYmVsbCA9IG1pc2NfZndfc3VwcG9ydCAmIE1JU0NfRldfRE9PUkJFTExfUkVTRVQyOworCWlmICh1c2VfZG9vcmJlbGwpIHsKKwkJdXNlX2Rvb3JiZWxsID0gRE9PUkJFTExfQ1RMUl9SRVNFVDI7CisJfSBlbHNlIHsKKwkJdXNlX2Rvb3JiZWxsID0gbWlzY19md19zdXBwb3J0ICYgTUlTQ19GV19ET09SQkVMTF9SRVNFVDsKKwkJaWYgKHVzZV9kb29yYmVsbCkgeworCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIkNvbnRyb2xsZXIgY2xhaW1zIHRoYXQgIgorCQkJCSInQml0IDIgZG9vcmJlbGwgcmVzZXQnIGlzICIKKwkJCQkic3VwcG9ydGVkLCBidXQgbm90ICdiaXQgNSBkb29yYmVsbCByZXNldCcuICAiCisJCQkJIkZpcm13YXJlIHVwZGF0ZSBpcyByZWNvbW1lbmRlZC5cbiIpOworCQkJcmMgPSAtRU5PVFNVUFA7IC8qIHRyeSBzb2Z0IHJlc2V0ICovCisJCQlnb3RvIHVubWFwX2NmZ3RhYmxlOworCQl9CisJfQogCiAJcmMgPSBocHNhX2NvbnRyb2xsZXJfaGFyZF9yZXNldChwZGV2LCB2YWRkciwgdXNlX2Rvb3JiZWxsKTsKIAlpZiAocmMpCkBAIC0zMjc5LDMwICszNDQxLDMyIEBACiAJbXNsZWVwKEhQU0FfUE9TVF9SRVNFVF9QQVVTRV9NU0VDUyk7CiAKIAkvKiBXYWl0IGZvciBib2FyZCB0byBiZWNvbWUgbm90IHJlYWR5LCB0aGVuIHJlYWR5LiAqLwotCWRldl9pbmZvKCZwZGV2LT5kZXYsICJXYWl0aW5nIGZvciBib2FyZCB0byBiZWNvbWUgcmVhZHkuXG4iKTsKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiV2FpdGluZyBmb3IgYm9hcmQgdG8gcmVzZXQuXG4iKTsKIAlyYyA9IGhwc2Ffd2FpdF9mb3JfYm9hcmRfc3RhdGUocGRldiwgdmFkZHIsIEJPQVJEX05PVF9SRUFEWSk7Ci0JaWYgKHJjKQorCWlmIChyYykgewogCQlkZXZfd2FybigmcGRldi0+ZGV2LAotCQkJImZhaWxlZCB3YWl0aW5nIGZvciBib2FyZCB0byBiZWNvbWUgbm90IHJlYWR5XG4iKTsKKwkJCSJmYWlsZWQgd2FpdGluZyBmb3IgYm9hcmQgdG8gcmVzZXQuIgorCQkJIiBXaWxsIHRyeSBzb2Z0IHJlc2V0LlxuIik7CisJCXJjID0gLUVOT1RTVVBQOyAvKiBOb3QgZXhwZWN0ZWQsIGJ1dCB0cnkgc29mdCByZXNldCBsYXRlciAqLworCQlnb3RvIHVubWFwX2NmZ3RhYmxlOworCX0KIAlyYyA9IGhwc2Ffd2FpdF9mb3JfYm9hcmRfc3RhdGUocGRldiwgdmFkZHIsIEJPQVJEX1JFQURZKTsKIAlpZiAocmMpIHsKIAkJZGV2X3dhcm4oJnBkZXYtPmRldiwKLQkJCSJmYWlsZWQgd2FpdGluZyBmb3IgYm9hcmQgdG8gYmVjb21lIHJlYWR5XG4iKTsKKwkJCSJmYWlsZWQgd2FpdGluZyBmb3IgYm9hcmQgdG8gYmVjb21lIHJlYWR5ICIKKwkJCSJhZnRlciBoYXJkIHJlc2V0XG4iKTsKIAkJZ290byB1bm1hcF9jZmd0YWJsZTsKIAl9Ci0JZGV2X2luZm8oJnBkZXYtPmRldiwgImJvYXJkIHJlYWR5LlxuIik7CiAKLQkvKiBDb250cm9sbGVyIHNob3VsZCBiZSBpbiBzaW1wbGUgbW9kZSBhdCB0aGlzIHBvaW50LiAgSWYgaXQncyBub3QsCi0JICogSXQgbWVhbnMgd2UncmUgb24gb25lIG9mIHRob3NlIGNvbnRyb2xsZXJzIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydAotCSAqIHRoZSBkb29yYmVsbCByZXNldCBtZXRob2QgYW5kIG9uIHdoaWNoIHRoZSBQQ0kgcG93ZXIgbWFuYWdlbWVudCByZXNldAotCSAqIG1ldGhvZCBkb2Vzbid0IHdvcmsgKFA4MDAsIGZvciBleGFtcGxlLikKLQkgKiBJbiB0aG9zZSBjYXNlcywgZG9uJ3QgdHJ5IHRvIHByb2NlZWQsIGFzIGl0IGdlbmVyYWxseSBkb2Vzbid0IHdvcmsuCi0JICovCi0JYWN0aXZlX3RyYW5zcG9ydCA9IHJlYWRsKCZjZmd0YWJsZS0+VHJhbnNwb3J0QWN0aXZlKTsKLQlpZiAoYWN0aXZlX3RyYW5zcG9ydCAmIFBFUkZPUk1BTlRfTU9ERSkgewotCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIHN1Y2Nlc3NmdWxseSByZXNldCBjb250cm9sbGVyLCIKLQkJCSIgSWdub3JpbmcgY29udHJvbGxlci5cbiIpOwotCQlyYyA9IC1FTk9ERVY7CisJcmMgPSBjb250cm9sbGVyX3Jlc2V0X2ZhaWxlZCh2YWRkcik7CisJaWYgKHJjIDwgMCkKKwkJZ290byB1bm1hcF9jZmd0YWJsZTsKKwlpZiAocmMpIHsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIlVuYWJsZSB0byBzdWNjZXNzZnVsbHkgcmVzZXQgIgorCQkJImNvbnRyb2xsZXIuIFdpbGwgdHJ5IHNvZnQgcmVzZXQuXG4iKTsKKwkJcmMgPSAtRU5PVFNVUFA7CisJfSBlbHNlIHsKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgImJvYXJkIHJlYWR5IGFmdGVyIGhhcmQgcmVzZXQuXG4iKTsKIAl9CiAKIHVubWFwX2NmZ3RhYmxlOgpAQCAtMzU0Myw2ICszNzA3LDkgQEAKIAkJICAgICAgIGNmZ19iYXNlX2FkZHJfaW5kZXgpICsgY2ZnX29mZnNldCwgc2l6ZW9mKCpoLT5jZmd0YWJsZSkpOwogCWlmICghaC0+Y2ZndGFibGUpCiAJCXJldHVybiAtRU5PTUVNOworCXJjID0gd3JpdGVfZHJpdmVyX3Zlcl90b19jZmd0YWJsZShoLT5jZmd0YWJsZSk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CiAJLyogRmluZCBwZXJmb3JtYW50IG1vZGUgdGFibGUuICovCiAJdHJhbnNfb2Zmc2V0ID0gcmVhZGwoJmgtPmNmZ3RhYmxlLT5UcmFuc01ldGhvZE9mZnNldCk7CiAJaC0+dHJhbnN0YWJsZSA9IHJlbWFwX3BjaV9tZW0ocGNpX3Jlc291cmNlX3N0YXJ0KGgtPnBkZXYsCkBAIC0zNzc3LDExICszOTQ0LDEyIEBACiAJICogZHVlIHRvIGNvbmNlcm5zIGFib3V0IHNoYXJlZCBiYndjIGJldHdlZW4gNjQwMi82NDA0IHBhaXIuCiAJICovCiAJaWYgKHJjID09IC1FTk9UU1VQUCkKLQkJcmV0dXJuIDA7IC8qIGp1c3QgdHJ5IHRvIGRvIHRoZSBrZHVtcCBhbnlob3cuICovCisJCXJldHVybiByYzsgLyoganVzdCB0cnkgdG8gZG8gdGhlIGtkdW1wIGFueWhvdy4gKi8KIAlpZiAocmMpCiAJCXJldHVybiAtRU5PREVWOwogCiAJLyogTm93IHRyeSB0byBnZXQgdGhlIGNvbnRyb2xsZXIgdG8gcmVzcG9uZCB0byBhIG5vLW9wICovCisJZGV2X3dhcm4oJnBkZXYtPmRldiwgIldhaXRpbmcgZm9yIGNvbnRyb2xsZXIgdG8gcmVzcG9uZCB0byBuby1vcFxuIik7CiAJZm9yIChpID0gMDsgaSA8IEhQU0FfUE9TVF9SRVNFVF9OT09QX1JFVFJJRVM7IGkrKykgewogCQlpZiAoaHBzYV9ub29wKHBkZXYpID09IDApCiAJCQlicmVhazsKQEAgLTM3OTIsMTggKzM5NjAsMTMzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBfX2RldmluaXQgaW50IGhwc2FfYWxsb2NhdGVfY21kX3Bvb2woc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwloLT5jbWRfcG9vbF9iaXRzID0ga3phbGxvYygKKwkJRElWX1JPVU5EX1VQKGgtPm5yX2NtZHMsIEJJVFNfUEVSX0xPTkcpICoKKwkJc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLCBHRlBfS0VSTkVMKTsKKwloLT5jbWRfcG9vbCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGgtPnBkZXYsCisJCSAgICBoLT5ucl9jbWRzICogc2l6ZW9mKCpoLT5jbWRfcG9vbCksCisJCSAgICAmKGgtPmNtZF9wb29sX2RoYW5kbGUpKTsKKwloLT5lcnJpbmZvX3Bvb2wgPSBwY2lfYWxsb2NfY29uc2lzdGVudChoLT5wZGV2LAorCQkgICAgaC0+bnJfY21kcyAqIHNpemVvZigqaC0+ZXJyaW5mb19wb29sKSwKKwkJICAgICYoaC0+ZXJyaW5mb19wb29sX2RoYW5kbGUpKTsKKwlpZiAoKGgtPmNtZF9wb29sX2JpdHMgPT0gTlVMTCkKKwkgICAgfHwgKGgtPmNtZF9wb29sID09IE5VTEwpCisJICAgIHx8IChoLT5lcnJpbmZvX3Bvb2wgPT0gTlVMTCkpIHsKKwkJZGV2X2VycigmaC0+cGRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeSBpbiAlcyIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBocHNhX2ZyZWVfY21kX3Bvb2woc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwlrZnJlZShoLT5jbWRfcG9vbF9iaXRzKTsKKwlpZiAoaC0+Y21kX3Bvb2wpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoaC0+cGRldiwKKwkJCSAgICBoLT5ucl9jbWRzICogc2l6ZW9mKHN0cnVjdCBDb21tYW5kTGlzdCksCisJCQkgICAgaC0+Y21kX3Bvb2wsIGgtPmNtZF9wb29sX2RoYW5kbGUpOworCWlmIChoLT5lcnJpbmZvX3Bvb2wpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoaC0+cGRldiwKKwkJCSAgICBoLT5ucl9jbWRzICogc2l6ZW9mKHN0cnVjdCBFcnJvckluZm8pLAorCQkJICAgIGgtPmVycmluZm9fcG9vbCwKKwkJCSAgICBoLT5lcnJpbmZvX3Bvb2xfZGhhbmRsZSk7Cit9CisKK3N0YXRpYyBpbnQgaHBzYV9yZXF1ZXN0X2lycShzdHJ1Y3QgY3Rscl9pbmZvICpoLAorCWlycXJldHVybl90ICgqbXNpeGhhbmRsZXIpKGludCwgdm9pZCAqKSwKKwlpcnFyZXR1cm5fdCAoKmludHhoYW5kbGVyKShpbnQsIHZvaWQgKikpCit7CisJaW50IHJjOworCisJaWYgKGgtPm1zaXhfdmVjdG9yIHx8IGgtPm1zaV92ZWN0b3IpCisJCXJjID0gcmVxdWVzdF9pcnEoaC0+aW50cltoLT5pbnRyX21vZGVdLCBtc2l4aGFuZGxlciwKKwkJCQlJUlFGX0RJU0FCTEVELCBoLT5kZXZuYW1lLCBoKTsKKwllbHNlCisJCXJjID0gcmVxdWVzdF9pcnEoaC0+aW50cltoLT5pbnRyX21vZGVdLCBpbnR4aGFuZGxlciwKKwkJCQlJUlFGX0RJU0FCTEVELCBoLT5kZXZuYW1lLCBoKTsKKwlpZiAocmMpIHsKKwkJZGV2X2VycigmaC0+cGRldi0+ZGV2LCAidW5hYmxlIHRvIGdldCBpcnEgJWQgZm9yICVzXG4iLAorCQkgICAgICAgaC0+aW50cltoLT5pbnRyX21vZGVdLCBoLT5kZXZuYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBocHNhX2tkdW1wX3NvZnRfcmVzZXQoc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwlpZiAoaHBzYV9zZW5kX2hvc3RfcmVzZXQoaCwgUkFJRF9DVExSX0xVTklELAorCQlIUFNBX1JFU0VUX1RZUEVfQ09OVFJPTExFUikpIHsKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgIlJlc2V0dGluZyBhcnJheSBjb250cm9sbGVyIGZhaWxlZC5cbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkZXZfaW5mbygmaC0+cGRldi0+ZGV2LCAiV2FpdGluZyBmb3IgYm9hcmQgdG8gc29mdCByZXNldC5cbiIpOworCWlmIChocHNhX3dhaXRfZm9yX2JvYXJkX3N0YXRlKGgtPnBkZXYsIGgtPnZhZGRyLCBCT0FSRF9OT1RfUkVBRFkpKSB7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJTb2Z0IHJlc2V0IGhhZCBubyBlZmZlY3QuXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWRldl9pbmZvKCZoLT5wZGV2LT5kZXYsICJCb2FyZCByZXNldCwgYXdhaXRpbmcgUkVBRFkgc3RhdHVzLlxuIik7CisJaWYgKGhwc2Ffd2FpdF9mb3JfYm9hcmRfc3RhdGUoaC0+cGRldiwgaC0+dmFkZHIsIEJPQVJEX1JFQURZKSkgeworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiQm9hcmQgZmFpbGVkIHRvIGJlY29tZSByZWFkeSAiCisJCQkiYWZ0ZXIgc29mdCByZXNldC5cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhwc2FfdW5kb19hbGxvY2F0aW9uc19hZnRlcl9rZHVtcF9zb2Z0X3Jlc2V0KHN0cnVjdCBjdGxyX2luZm8gKmgpCit7CisJZnJlZV9pcnEoaC0+aW50cltoLT5pbnRyX21vZGVdLCBoKTsKKyNpZmRlZiBDT05GSUdfUENJX01TSQorCWlmIChoLT5tc2l4X3ZlY3RvcikKKwkJcGNpX2Rpc2FibGVfbXNpeChoLT5wZGV2KTsKKwllbHNlIGlmIChoLT5tc2lfdmVjdG9yKQorCQlwY2lfZGlzYWJsZV9tc2koaC0+cGRldik7CisjZW5kaWYgLyogQ09ORklHX1BDSV9NU0kgKi8KKwlocHNhX2ZyZWVfc2dfY2hhaW5fYmxvY2tzKGgpOworCWhwc2FfZnJlZV9jbWRfcG9vbChoKTsKKwlrZnJlZShoLT5ibG9ja0ZldGNoVGFibGUpOworCXBjaV9mcmVlX2NvbnNpc3RlbnQoaC0+cGRldiwgaC0+cmVwbHlfcG9vbF9zaXplLAorCQloLT5yZXBseV9wb29sLCBoLT5yZXBseV9wb29sX2RoYW5kbGUpOworCWlmIChoLT52YWRkcikKKwkJaW91bm1hcChoLT52YWRkcik7CisJaWYgKGgtPnRyYW5zdGFibGUpCisJCWlvdW5tYXAoaC0+dHJhbnN0YWJsZSk7CisJaWYgKGgtPmNmZ3RhYmxlKQorCQlpb3VubWFwKGgtPmNmZ3RhYmxlKTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKGgtPnBkZXYpOworCWtmcmVlKGgpOworfQorCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBocHNhX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCSAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewogCWludCBkYWMsIHJjOwogCXN0cnVjdCBjdGxyX2luZm8gKmg7CisJaW50IHRyeV9zb2Z0X3Jlc2V0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKG51bWJlcl9vZl9jb250cm9sbGVycyA9PSAwKQogCQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICJcbiIpOwogCiAJcmMgPSBocHNhX2luaXRfcmVzZXRfZGV2aWNlcyhwZGV2KTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKKwlpZiAocmMpIHsKKwkJaWYgKHJjICE9IC1FTk9UU1VQUCkKKwkJCXJldHVybiByYzsKKwkJLyogSWYgdGhlIHJlc2V0IGZhaWxzIGluIGEgcGFydGljdWxhciB3YXkgKGl0IGhhcyBubyB3YXkgdG8gZG8KKwkJICogYSBwcm9wZXIgaGFyZCByZXNldCwgc28gcmV0dXJucyAtRU5PVFNVUFApIHdlIGNhbiB0cnkgdG8gZG8KKwkJICogYSBzb2Z0IHJlc2V0IG9uY2Ugd2UgZ2V0IHRoZSBjb250cm9sbGVyIGNvbmZpZ3VyZWQgdXAgdG8gdGhlCisJCSAqIHBvaW50IHRoYXQgaXQgY2FuIGFjY2VwdCBhIGNvbW1hbmQuCisJCSAqLworCQl0cnlfc29mdF9yZXNldCA9IDE7CisJCXJjID0gMDsKKwl9CisKK3JlaW5pdF9hZnRlcl9zb2Z0X3Jlc2V0OgogCiAJLyogQ29tbWFuZCBzdHJ1Y3R1cmVzIG11c3QgYmUgYWxpZ25lZCBvbiBhIDMyLWJ5dGUgYm91bmRhcnkgYmVjYXVzZQogCSAqIHRoZSA1IGxvd2VyIGJpdHMgb2YgdGhlIGFkZHJlc3MgYXJlIHVzZWQgYnkgdGhlIGhhcmR3YXJlLiBhbmQgYnkKQEAgLTM4NDcsNTQgKzQxMzAsODIgQEAKIAkvKiBtYWtlIHN1cmUgdGhlIGJvYXJkIGludGVycnVwdHMgYXJlIG9mZiAqLwogCWgtPmFjY2Vzcy5zZXRfaW50cl9tYXNrKGgsIEhQU0FfSU5UUl9PRkYpOwogCi0JaWYgKGgtPm1zaXhfdmVjdG9yIHx8IGgtPm1zaV92ZWN0b3IpCi0JCXJjID0gcmVxdWVzdF9pcnEoaC0+aW50cltoLT5pbnRyX21vZGVdLCBkb19ocHNhX2ludHJfbXNpLAotCQkJCUlSUUZfRElTQUJMRUQsIGgtPmRldm5hbWUsIGgpOwotCWVsc2UKLQkJcmMgPSByZXF1ZXN0X2lycShoLT5pbnRyW2gtPmludHJfbW9kZV0sIGRvX2hwc2FfaW50cl9pbnR4LAotCQkJCUlSUUZfRElTQUJMRUQsIGgtPmRldm5hbWUsIGgpOwotCWlmIChyYykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gZ2V0IGlycSAlZCBmb3IgJXNcbiIsCi0JCSAgICAgICBoLT5pbnRyW2gtPmludHJfbW9kZV0sIGgtPmRldm5hbWUpOworCWlmIChocHNhX3JlcXVlc3RfaXJxKGgsIGRvX2hwc2FfaW50cl9tc2ksIGRvX2hwc2FfaW50cl9pbnR4KSkKIAkJZ290byBjbGVhbjI7Ci0JfQotCiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzOiA8MHgleD4gYXQgSVJRICVkJXMgdXNpbmcgREFDXG4iLAogCSAgICAgICBoLT5kZXZuYW1lLCBwZGV2LT5kZXZpY2UsCiAJICAgICAgIGgtPmludHJbaC0+aW50cl9tb2RlXSwgZGFjID8gIiIgOiAiIG5vdCIpOwotCi0JaC0+Y21kX3Bvb2xfYml0cyA9Ci0JICAgIGttYWxsb2MoKChoLT5ucl9jbWRzICsgQklUU19QRVJfTE9ORyAtCi0JCSAgICAgIDEpIC8gQklUU19QRVJfTE9ORykgKiBzaXplb2YodW5zaWduZWQgbG9uZyksIEdGUF9LRVJORUwpOwotCWgtPmNtZF9wb29sID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoaC0+cGRldiwKLQkJICAgIGgtPm5yX2NtZHMgKiBzaXplb2YoKmgtPmNtZF9wb29sKSwKLQkJICAgICYoaC0+Y21kX3Bvb2xfZGhhbmRsZSkpOwotCWgtPmVycmluZm9fcG9vbCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGgtPnBkZXYsCi0JCSAgICBoLT5ucl9jbWRzICogc2l6ZW9mKCpoLT5lcnJpbmZvX3Bvb2wpLAotCQkgICAgJihoLT5lcnJpbmZvX3Bvb2xfZGhhbmRsZSkpOwotCWlmICgoaC0+Y21kX3Bvb2xfYml0cyA9PSBOVUxMKQotCSAgICB8fCAoaC0+Y21kX3Bvb2wgPT0gTlVMTCkKLQkgICAgfHwgKGgtPmVycmluZm9fcG9vbCA9PSBOVUxMKSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5Iik7Ci0JCXJjID0gLUVOT01FTTsKKwlpZiAoaHBzYV9hbGxvY2F0ZV9jbWRfcG9vbChoKSkKIAkJZ290byBjbGVhbjQ7Ci0JfQogCWlmIChocHNhX2FsbG9jYXRlX3NnX2NoYWluX2Jsb2NrcyhoKSkKIAkJZ290byBjbGVhbjQ7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmaC0+c2Nhbl93YWl0X3F1ZXVlKTsKIAloLT5zY2FuX2ZpbmlzaGVkID0gMTsgLyogbm8gc2NhbiBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MgKi8KIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBoKTsKLQltZW1zZXQoaC0+Y21kX3Bvb2xfYml0cywgMCwKLQkgICAgICAgKChoLT5ucl9jbWRzICsgQklUU19QRVJfTE9ORyAtCi0JCSAxKSAvIEJJVFNfUEVSX0xPTkcpICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKwloLT5uZGV2aWNlcyA9IDA7CisJaC0+c2NzaV9ob3N0ID0gTlVMTDsKKwlzcGluX2xvY2tfaW5pdCgmaC0+ZGV2bG9jayk7CisJaHBzYV9wdXRfY3Rscl9pbnRvX3BlcmZvcm1hbnRfbW9kZShoKTsKIAotCWhwc2Ffc2NzaV9zZXR1cChoKTsKKwkvKiBBdCB0aGlzIHBvaW50LCB0aGUgY29udHJvbGxlciBpcyByZWFkeSB0byB0YWtlIGNvbW1hbmRzLgorCSAqIE5vdywgaWYgcmVzZXRfZGV2aWNlcyBhbmQgdGhlIGhhcmQgcmVzZXQgZGlkbid0IHdvcmssIHRyeQorCSAqIHRoZSBzb2Z0IHJlc2V0IGFuZCBzZWUgaWYgdGhhdCB3b3Jrcy4KKwkgKi8KKwlpZiAodHJ5X3NvZnRfcmVzZXQpIHsKKworCQkvKiBUaGlzIGlzIGtpbmQgb2YgZ3Jvc3MuICBXZSBtYXkgb3IgbWF5IG5vdCBnZXQgYSBjb21wbGV0aW9uCisJCSAqIGZyb20gdGhlIHNvZnQgcmVzZXQgY29tbWFuZCwgYW5kIGlmIHdlIGRvLCB0aGVuIHRoZSB2YWx1ZQorCQkgKiBmcm9tIHRoZSBmaWZvIG1heSBvciBtYXkgbm90IGJlIHZhbGlkLiAgU28sIHdlIHdhaXQgMTAgc2VjcworCQkgKiBhZnRlciB0aGUgcmVzZXQgdGhyb3dpbmcgYXdheSBhbnkgY29tcGxldGlvbnMgd2UgZ2V0IGR1cmluZworCQkgKiB0aGF0IHRpbWUuICBVbnJlZ2lzdGVyIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgcmVnaXN0ZXIKKwkJICogZmFrZSBvbmVzIHRvIHNjb29wIHVwIGFueSByZXNpZHVhbCBjb21wbGV0aW9ucy4KKwkJICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5sb2NrLCBmbGFncyk7CisJCWgtPmFjY2Vzcy5zZXRfaW50cl9tYXNrKGgsIEhQU0FfSU5UUl9PRkYpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CisJCWZyZWVfaXJxKGgtPmludHJbaC0+aW50cl9tb2RlXSwgaCk7CisJCXJjID0gaHBzYV9yZXF1ZXN0X2lycShoLCBocHNhX21zaXhfZGlzY2FyZF9jb21wbGV0aW9ucywKKwkJCQkJaHBzYV9pbnR4X2Rpc2NhcmRfY29tcGxldGlvbnMpOworCQlpZiAocmMpIHsKKwkJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdF9pcnEgYWZ0ZXIgIgorCQkJCSJzb2Z0IHJlc2V0LlxuIik7CisJCQlnb3RvIGNsZWFuNDsKKwkJfQorCisJCXJjID0gaHBzYV9rZHVtcF9zb2Z0X3Jlc2V0KGgpOworCQlpZiAocmMpCisJCQkvKiBOZWl0aGVyIGhhcmQgbm9yIHNvZnQgcmVzZXQgd29ya2VkLCB3ZSdyZSBob3NlZC4gKi8KKwkJCWdvdG8gY2xlYW40OworCisJCWRldl9pbmZvKCZoLT5wZGV2LT5kZXYsICJCb2FyZCBSRUFEWS5cbiIpOworCQlkZXZfaW5mbygmaC0+cGRldi0+ZGV2LAorCQkJIldhaXRpbmcgZm9yIHN0YWxlIGNvbXBsZXRpb25zIHRvIGRyYWluLlxuIik7CisJCWgtPmFjY2Vzcy5zZXRfaW50cl9tYXNrKGgsIEhQU0FfSU5UUl9PTik7CisJCW1zbGVlcCgxMDAwMCk7CisJCWgtPmFjY2Vzcy5zZXRfaW50cl9tYXNrKGgsIEhQU0FfSU5UUl9PRkYpOworCisJCXJjID0gY29udHJvbGxlcl9yZXNldF9mYWlsZWQoaC0+Y2ZndGFibGUpOworCQlpZiAocmMpCisJCQlkZXZfaW5mbygmaC0+cGRldi0+ZGV2LAorCQkJCSJTb2Z0IHJlc2V0IGFwcGVhcnMgdG8gaGF2ZSBmYWlsZWQuXG4iKTsKKworCQkvKiBzaW5jZSB0aGUgY29udHJvbGxlcidzIHJlc2V0LCB3ZSBoYXZlIHRvIGdvIGJhY2sgYW5kIHJlLWluaXQKKwkJICogZXZlcnl0aGluZy4gIEVhc2llc3QgdG8ganVzdCBmb3JnZXQgd2hhdCB3ZSd2ZSBkb25lIGFuZCBkbyBpdAorCQkgKiBhbGwgb3ZlciBhZ2Fpbi4KKwkJICovCisJCWhwc2FfdW5kb19hbGxvY2F0aW9uc19hZnRlcl9rZHVtcF9zb2Z0X3Jlc2V0KGgpOworCQl0cnlfc29mdF9yZXNldCA9IDA7CisJCWlmIChyYykKKwkJCS8qIGRvbid0IGdvIHRvIGNsZWFuNCwgd2UgYWxyZWFkeSB1bmFsbG9jYXRlZCAqLworCQkJcmV0dXJuIC1FTk9ERVY7CisKKwkJZ290byByZWluaXRfYWZ0ZXJfc29mdF9yZXNldDsKKwl9CiAKIAkvKiBUdXJuIHRoZSBpbnRlcnJ1cHRzIG9uIHNvIHdlIGNhbiBzZXJ2aWNlIHJlcXVlc3RzICovCiAJaC0+YWNjZXNzLnNldF9pbnRyX21hc2soaCwgSFBTQV9JTlRSX09OKTsKIAotCWhwc2FfcHV0X2N0bHJfaW50b19wZXJmb3JtYW50X21vZGUoaCk7CiAJaHBzYV9oYmFfaW5xdWlyeShoKTsKIAlocHNhX3JlZ2lzdGVyX3Njc2koaCk7CS8qIGhvb2sgb3Vyc2VsdmVzIGludG8gU0NTSSBzdWJzeXN0ZW0gKi8KIAloLT5idXN5X2luaXRpYWxpemluZyA9IDA7CkBAIC0zOTAyLDE2ICs0MjEzLDcgQEAKIAogY2xlYW40OgogCWhwc2FfZnJlZV9zZ19jaGFpbl9ibG9ja3MoaCk7Ci0Ja2ZyZWUoaC0+Y21kX3Bvb2xfYml0cyk7Ci0JaWYgKGgtPmNtZF9wb29sKQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGgtPnBkZXYsCi0JCQkgICAgaC0+bnJfY21kcyAqIHNpemVvZihzdHJ1Y3QgQ29tbWFuZExpc3QpLAotCQkJICAgIGgtPmNtZF9wb29sLCBoLT5jbWRfcG9vbF9kaGFuZGxlKTsKLQlpZiAoaC0+ZXJyaW5mb19wb29sKQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGgtPnBkZXYsCi0JCQkgICAgaC0+bnJfY21kcyAqIHNpemVvZihzdHJ1Y3QgRXJyb3JJbmZvKSwKLQkJCSAgICBoLT5lcnJpbmZvX3Bvb2wsCi0JCQkgICAgaC0+ZXJyaW5mb19wb29sX2RoYW5kbGUpOworCWhwc2FfZnJlZV9jbWRfcG9vbChoKTsKIAlmcmVlX2lycShoLT5pbnRyW2gtPmludHJfbW9kZV0sIGgpOwogY2xlYW4yOgogY2xlYW4xOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2hwc2EuaCBiL2RyaXZlcnMvc2NzaS9ocHNhLmgKaW5kZXggNjIxYTE1My4uNmQ4ZGNkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2hwc2EuaAorKysgYi9kcml2ZXJzL3Njc2kvaHBzYS5oCkBAIC0xMjcsMTAgKzEyNywxMiBAQAogfTsKICNkZWZpbmUgSFBTQV9BQk9SVF9NU0cgMAogI2RlZmluZSBIUFNBX0RFVklDRV9SRVNFVF9NU0cgMQotI2RlZmluZSBIUFNBX0JVU19SRVNFVF9NU0cgMgotI2RlZmluZSBIUFNBX0hPU1RfUkVTRVRfTVNHIDMKKyNkZWZpbmUgSFBTQV9SRVNFVF9UWVBFX0NPTlRST0xMRVIgMHgwMAorI2RlZmluZSBIUFNBX1JFU0VUX1RZUEVfQlVTIDB4MDEKKyNkZWZpbmUgSFBTQV9SRVNFVF9UWVBFX1RBUkdFVCAweDAzCisjZGVmaW5lIEhQU0FfUkVTRVRfVFlQRV9MVU4gMHgwNAogI2RlZmluZSBIUFNBX01TR19TRU5EX1JFVFJZX0xJTUlUIDEwCi0jZGVmaW5lIEhQU0FfTVNHX1NFTkRfUkVUUllfSU5URVJWQUxfTVNFQ1MgMTAwMAorI2RlZmluZSBIUFNBX01TR19TRU5EX1JFVFJZX0lOVEVSVkFMX01TRUNTICgxMDAwMCkKIAogLyogTWF4aW11bSB0aW1lIGluIHNlY29uZHMgZHJpdmVyIHdpbGwgd2FpdCBmb3IgY29tbWFuZCBjb21wbGV0aW9ucwogICogd2hlbiBwb2xsaW5nIGJlZm9yZSBnaXZpbmcgdXAuCkBAIC0xNTUsNyArMTU3LDcgQEAKICAqIEhQU0FfQk9BUkRfUkVBRFlfSVRFUkFUSU9OUyBhcmUgZGVyaXZlZCBmcm9tIHRob3NlLgogICovCiAjZGVmaW5lIEhQU0FfQk9BUkRfUkVBRFlfV0FJVF9TRUNTICgxMjApCi0jZGVmaW5lIEhQU0FfQk9BUkRfTk9UX1JFQURZX1dBSVRfU0VDUyAoMTApCisjZGVmaW5lIEhQU0FfQk9BUkRfTk9UX1JFQURZX1dBSVRfU0VDUyAoMTAwKQogI2RlZmluZSBIUFNBX0JPQVJEX1JFQURZX1BPTExfSU5URVJWQUxfTVNFQ1MgKDEwMCkKICNkZWZpbmUgSFBTQV9CT0FSRF9SRUFEWV9QT0xMX0lOVEVSVkFMIFwKIAkoKEhQU0FfQk9BUkRfUkVBRFlfUE9MTF9JTlRFUlZBTF9NU0VDUyAqIEhaKSAvIDEwMDApCkBAIC0yMTIsNiArMjE0LDcgQEAKIAlkZXZfZGJnKCZoLT5wZGV2LT5kZXYsICJTZW5kaW5nICV4LCB0YWcgPSAleFxuIiwgYy0+YnVzYWRkciwKIAkJYy0+SGVhZGVyLlRhZy5sb3dlcik7CiAJd3JpdGVsKGMtPmJ1c2FkZHIsIGgtPnZhZGRyICsgU0E1X1JFUVVFU1RfUE9SVF9PRkZTRVQpOworCSh2b2lkKSByZWFkbChoLT52YWRkciArIFNBNV9SRVFVRVNUX1BPUlRfT0ZGU0VUKTsKIAloLT5jb21tYW5kc19vdXRzdGFuZGluZysrOwogCWlmIChoLT5jb21tYW5kc19vdXRzdGFuZGluZyA+IGgtPm1heF9vdXRzdGFuZGluZykKIAkJaC0+bWF4X291dHN0YW5kaW5nID0gaC0+Y29tbWFuZHNfb3V0c3RhbmRpbmc7CkBAIC0yMjcsMTAgKzIzMCwxMiBAQAogCWlmICh2YWwpIHsgLyogVHVybiBpbnRlcnJ1cHRzIG9uICovCiAJCWgtPmludGVycnVwdHNfZW5hYmxlZCA9IDE7CiAJCXdyaXRlbCgwLCBoLT52YWRkciArIFNBNV9SRVBMWV9JTlRSX01BU0tfT0ZGU0VUKTsKKwkJKHZvaWQpIHJlYWRsKGgtPnZhZGRyICsgU0E1X1JFUExZX0lOVFJfTUFTS19PRkZTRVQpOwogCX0gZWxzZSB7IC8qIFR1cm4gdGhlbSBvZmYgKi8KIAkJaC0+aW50ZXJydXB0c19lbmFibGVkID0gMDsKIAkJd3JpdGVsKFNBNV9JTlRSX09GRiwKIAkJCWgtPnZhZGRyICsgU0E1X1JFUExZX0lOVFJfTUFTS19PRkZTRVQpOworCQkodm9pZCkgcmVhZGwoaC0+dmFkZHIgKyBTQTVfUkVQTFlfSU5UUl9NQVNLX09GRlNFVCk7CiAJfQogfQogCkBAIC0yMzksMTAgKzI0NCwxMiBAQAogCWlmICh2YWwpIHsgLyogdHVybiBvbiBpbnRlcnJ1cHRzICovCiAJCWgtPmludGVycnVwdHNfZW5hYmxlZCA9IDE7CiAJCXdyaXRlbCgwLCBoLT52YWRkciArIFNBNV9SRVBMWV9JTlRSX01BU0tfT0ZGU0VUKTsKKwkJKHZvaWQpIHJlYWRsKGgtPnZhZGRyICsgU0E1X1JFUExZX0lOVFJfTUFTS19PRkZTRVQpOwogCX0gZWxzZSB7CiAJCWgtPmludGVycnVwdHNfZW5hYmxlZCA9IDA7CiAJCXdyaXRlbChTQTVfUEVSRl9JTlRSX09GRiwKIAkJCWgtPnZhZGRyICsgU0E1X1JFUExZX0lOVFJfTUFTS19PRkZTRVQpOworCQkodm9pZCkgcmVhZGwoaC0+dmFkZHIgKyBTQTVfUkVQTFlfSU5UUl9NQVNLX09GRlNFVCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaHBzYV9jbWQuaCBiL2RyaXZlcnMvc2NzaS9ocHNhX2NtZC5oCmluZGV4IDE4NDY0OTAuLjU1ZDc0MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ocHNhX2NtZC5oCisrKyBiL2RyaXZlcnMvc2NzaS9ocHNhX2NtZC5oCkBAIC0xMDEsNiArMTAxLDcgQEAKICNkZWZpbmUgQ0ZHVEJMX0NoYW5nZVJlcSAgICAgICAgMHgwMDAwMDAwMWwKICNkZWZpbmUgQ0ZHVEJMX0FjY0NtZHMgICAgICAgICAgMHgwMDAwMDAwMWwKICNkZWZpbmUgRE9PUkJFTExfQ1RMUl9SRVNFVAkweDAwMDAwMDA0bAorI2RlZmluZSBET09SQkVMTF9DVExSX1JFU0VUMgkweDAwMDAwMDIwbAogCiAjZGVmaW5lIENGR1RCTF9UcmFuc19TaW1wbGUgICAgIDB4MDAwMDAwMDJsCiAjZGVmaW5lIENGR1RCTF9UcmFuc19QZXJmb3JtYW50IDB4MDAwMDAwMDRsCkBAIC0yNTYsMTQgKzI1Nyw2IEBACiAjZGVmaW5lIENNRF9JT0NUTF9QRU5EICAweDAxCiAjZGVmaW5lIENNRF9TQ1NJCTB4MDMKIAotLyogVGhpcyBzdHJ1Y3R1cmUgbmVlZHMgdG8gYmUgZGl2aXNpYmxlIGJ5IDMyIGZvciBuZXcKLSAqIGluZGV4aW5nIG1ldGhvZCBhbmQgcGVyZm9ybWFudCBtb2RlLgotICovCi0jZGVmaW5lIFBBRDMyIDMyCi0jZGVmaW5lIFBBRDY0RElGRiAwCi0jZGVmaW5lIFVTRUVYVFJBICgoc2l6ZW9mKHZvaWQgKikgLSA0KS80KQotI2RlZmluZSBQQURTSVpFIChQQUQzMiArIFBBRDY0RElGRiAqIFVTRUVYVFJBKQotCiAjZGVmaW5lIERJUkVDVF9MT09LVVBfU0hJRlQgNQogI2RlZmluZSBESVJFQ1RfTE9PS1VQX0JJVCAweDEwCiAjZGVmaW5lIERJUkVDVF9MT09LVVBfTUFTSyAofigoMSA8PCBESVJFQ1RfTE9PS1VQX1NISUZUKSAtIDEpKQpAQCAtMzQ1LDYgKzMzOCw4IEBACiAJdTgJCXJlc2VydmVkWzB4NzggLSAweDU4XTsKIAl1MzIJCW1pc2NfZndfc3VwcG9ydDsgLyogb2Zmc2V0IDB4NzggKi8KICNkZWZpbmUJCQlNSVNDX0ZXX0RPT1JCRUxMX1JFU0VUICgweDAyKQorI2RlZmluZQkJCU1JU0NfRldfRE9PUkJFTExfUkVTRVQyICgweDAxMCkKKwl1OAkJZHJpdmVyX3ZlcnNpb25bMzJdOwogfTsKIAogI2RlZmluZSBOVU1fQkxPQ0tGRVRDSF9FTlRSSUVTIDgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12c2NzaS5jIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMKaW5kZXggMDQxOTU4NC4uM2QzOTFkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMKQEAgLTE4NDksOCArMTg0OSw3IEBACiAJCXJjID0gaWJtdnNjc2lfb3BzLT5yZXNldF9jcnFfcXVldWUoJmhvc3RkYXRhLT5xdWV1ZSwgaG9zdGRhdGEpOwogCQlpZiAoIXJjKQogCQkJcmMgPSBpYm12c2NzaV9vcHMtPnNlbmRfY3JxKGhvc3RkYXRhLCAweEMwMDEwMDAwMDAwMDAwMDBMTCwgMCk7Ci0JCWlmICghcmMpCi0JCQlyYyA9IHZpb19lbmFibGVfaW50ZXJydXB0cyh0b192aW9fZGV2KGhvc3RkYXRhLT5kZXYpKTsKKwkJdmlvX2VuYWJsZV9pbnRlcnJ1cHRzKHRvX3Zpb19kZXYoaG9zdGRhdGEtPmRldikpOwogCX0gZWxzZSBpZiAoaG9zdGRhdGEtPnJlZW5hYmxlX2NycSkgewogCQlzbXBfcm1iKCk7CiAJCWFjdGlvbiA9ICJlbmFibGUiOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2luMjAwMC5jIGIvZHJpdmVycy9zY3NpL2luMjAwMC5jCmluZGV4IDY1NjhhYWIuLjkyMTA5YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pbjIwMDAuYworKysgYi9kcml2ZXJzL3Njc2kvaW4yMDAwLmMKQEAgLTM0Myw3ICszNDMsNyBAQAogCWluc3RhbmNlID0gY21kLT5kZXZpY2UtPmhvc3Q7CiAJaG9zdGRhdGEgPSAoc3RydWN0IElOMjAwMF9ob3N0ZGF0YSAqKSBpbnN0YW5jZS0+aG9zdGRhdGE7CiAKLQlEQihEQl9RVUVVRV9DT01NQU5ELCBzY21kX3ByaW50ayhLRVJOX0RFQlVHLCBjbWQsICJRLSUwMngtJWxkKCIsIGNtZC0+Y21uZFswXSwgY21kLT5zZXJpYWxfbnVtYmVyKSkKKwlEQihEQl9RVUVVRV9DT01NQU5ELCBzY21kX3ByaW50ayhLRVJOX0RFQlVHLCBjbWQsICJRLSUwMngoIiwgY21kLT5jbW5kWzBdKSkKIAogLyogU2V0IHVwIGEgZmV3IGZpZWxkcyBpbiB0aGUgU2NzaV9DbW5kIHN0cnVjdHVyZSBmb3Igb3VyIG93biB1c2U6CiAgKiAgLSBob3N0X3NjcmliYmxlIGlzIHRoZSBwb2ludGVyIHRvIHRoZSBuZXh0IGNtZCBpbiB0aGUgaW5wdXQgcXVldWUKQEAgLTQyNyw3ICs0MjcsNyBAQAogCiAJaW4yMDAwX2V4ZWN1dGUoY21kLT5kZXZpY2UtPmhvc3QpOwogCi0JREIoREJfUVVFVUVfQ09NTUFORCwgcHJpbnRrKCIpUS0lbGQgIiwgY21kLT5zZXJpYWxfbnVtYmVyKSkKKwlEQihEQl9RVUVVRV9DT01NQU5ELCBwcmludGsoIilRICIpKQogCSAgICByZXR1cm4gMDsKIH0KIApAQCAtNzA1LDcgKzcwNSw3IEBACiAJICogdG8gc2VhcmNoIHRoZSBpbnB1dF9RIGFnYWluLi4uCiAJICovCiAKLQlEQihEQl9FWEVDVVRFLCBwcmludGsoIiVzJWxkKUVYLTIgIiwgKGNtZC0+U0NwLnBoYXNlKSA/ICJkOiIgOiAiIiwgY21kLT5zZXJpYWxfbnVtYmVyKSkKKwlEQihEQl9FWEVDVVRFLCBwcmludGsoIiVzKUVYLTIgIiwgKGNtZC0+U0NwLnBoYXNlKSA/ICJkOiIgOiAiIikpCiAKIH0KIApAQCAtMTE0OSw3ICsxMTQ5LDcgQEAKIAljYXNlIENTUl9YRkVSX0RPTkUgfCBQSFNfQ09NTUFORDoKIAljYXNlIENTUl9VTkVYUCB8IFBIU19DT01NQU5EOgogCWNhc2UgQ1NSX1NSVl9SRVEgfCBQSFNfQ09NTUFORDoKLQkJREIoREJfSU5UUiwgcHJpbnRrKCJDTU5ELSUwMngsJWxkIiwgY21kLT5jbW5kWzBdLCBjbWQtPnNlcmlhbF9udW1iZXIpKQorCQlEQihEQl9JTlRSLCBwcmludGsoIkNNTkQtJTAyeCIsIGNtZC0+Y21uZFswXSkpCiAJCSAgICB0cmFuc2Zlcl9waW8oY21kLT5jbW5kLCBjbWQtPmNtZF9sZW4sIERBVEFfT1VUX0RJUiwgaG9zdGRhdGEpOwogCQlob3N0ZGF0YS0+c3RhdGUgPSBTX0NPTk5FQ1RFRDsKIAkJYnJlYWs7CkBAIC0xMTkxLDcgKzExOTEsNyBAQAogCQlzd2l0Y2ggKG1zZykgewogCiAJCWNhc2UgQ09NTUFORF9DT01QTEVURToKLQkJCURCKERCX0lOVFIsIHByaW50aygiQ0NNUC0lbGQiLCBjbWQtPnNlcmlhbF9udW1iZXIpKQorCQkJREIoREJfSU5UUiwgcHJpbnRrKCJDQ01QIikpCiAJCQkgICAgd3JpdGVfMzM5M19jbWQoaG9zdGRhdGEsIFdEX0NNRF9ORUdBVEVfQUNLKTsKIAkJCWhvc3RkYXRhLT5zdGF0ZSA9IFNfUFJFX0NNUF9ESVNDOwogCQkJYnJlYWs7CkBAIC0xMzI5LDcgKzEzMjksNyBAQAogCiAJCXdyaXRlXzMzOTMoaG9zdGRhdGEsIFdEX1NPVVJDRV9JRCwgU1JDSURfRVIpOwogCQlpZiAocGhzID09IDB4NjApIHsKLQkJCURCKERCX0lOVFIsIHByaW50aygiU1gtRE9ORS0lbGQiLCBjbWQtPnNlcmlhbF9udW1iZXIpKQorCQkJREIoREJfSU5UUiwgcHJpbnRrKCJTWC1ET05FIikpCiAJCQkgICAgY21kLT5TQ3AuTWVzc2FnZSA9IENPTU1BTkRfQ09NUExFVEU7CiAJCQlsdW4gPSByZWFkXzMzOTMoaG9zdGRhdGEsIFdEX1RBUkdFVF9MVU4pOwogCQkJREIoREJfSU5UUiwgcHJpbnRrKCI6JWQuJWQiLCBjbWQtPlNDcC5TdGF0dXMsIGx1bikpCkBAIC0xMzUwLDcgKzEzNTAsNyBAQAogCiAJCQlpbjIwMDBfZXhlY3V0ZShpbnN0YW5jZSk7CiAJCX0gZWxzZSB7Ci0JCQlwcmludGsoIiUwMng6JTAyeDolMDJ4LSVsZDogVW5rbm93biBTRUxfWEZFUl9ET05FIHBoYXNlISEtLS0iLCBhc3IsIHNyLCBwaHMsIGNtZC0+c2VyaWFsX251bWJlcik7CisJCQlwcmludGsoIiUwMng6JTAyeDolMDJ4OiBVbmtub3duIFNFTF9YRkVSX0RPTkUgcGhhc2UhIS0tLSIsIGFzciwgc3IsIHBocyk7CiAJCX0KIAkJYnJlYWs7CiAKQEAgLTE0MTcsNyArMTQxNyw3IEBACiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGluc3RhbmNlLT5ob3N0X2xvY2ssIGZsYWdzKTsKIAkJCXJldHVybiBJUlFfSEFORExFRDsKIAkJfQotCQlEQihEQl9JTlRSLCBwcmludGsoIlVORVhQX0RJU0MtJWxkIiwgY21kLT5zZXJpYWxfbnVtYmVyKSkKKwkJREIoREJfSU5UUiwgcHJpbnRrKCJVTkVYUF9ESVNDIikpCiAJCSAgICBob3N0ZGF0YS0+Y29ubmVjdGVkID0gTlVMTDsKIAkJaG9zdGRhdGEtPmJ1c3lbY21kLT5kZXZpY2UtPmlkXSAmPSB+KDEgPDwgY21kLT5kZXZpY2UtPmx1bik7CiAJCWhvc3RkYXRhLT5zdGF0ZSA9IFNfVU5DT05ORUNURUQ7CkBAIC0xNDQyLDcgKzE0NDIsNyBAQAogICovCiAKIAkJd3JpdGVfMzM5Myhob3N0ZGF0YSwgV0RfU09VUkNFX0lELCBTUkNJRF9FUik7Ci0JCURCKERCX0lOVFIsIHByaW50aygiRElTQy0lbGQiLCBjbWQtPnNlcmlhbF9udW1iZXIpKQorCQlEQihEQl9JTlRSLCBwcmludGsoIkRJU0MiKSkKIAkJICAgIGlmIChjbWQgPT0gTlVMTCkgewogCQkJcHJpbnRrKCIgLSBBbHJlYWR5IGRpc2Nvbm5lY3RlZCEgIik7CiAJCQlob3N0ZGF0YS0+c3RhdGUgPSBTX1VOQ09OTkVDVEVEOwpAQCAtMTU3NSw3ICsxNTc1LDYgQEAKIAkJfSBlbHNlCiAJCQlob3N0ZGF0YS0+c3RhdGUgPSBTX0NPTk5FQ1RFRDsKIAotCQlEQihEQl9JTlRSLCBwcmludGsoIi0lbGQiLCBjbWQtPnNlcmlhbF9udW1iZXIpKQogCQkgICAgYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtMTcwNCw3ICsxNzAzLDcgQEAKIAkJCQlwcmV2LT5ob3N0X3NjcmliYmxlID0gY21kLT5ob3N0X3NjcmliYmxlOwogCQkJY21kLT5ob3N0X3NjcmliYmxlID0gTlVMTDsKIAkJCWNtZC0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAic2NzaSVkOiBBYm9ydCAtIHJlbW92aW5nIGNvbW1hbmQgJWxkIGZyb20gaW5wdXRfUS4gIiwgaW5zdGFuY2UtPmhvc3Rfbm8sIGNtZC0+c2VyaWFsX251bWJlcik7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJzY3NpJWQ6IEFib3J0IC0gcmVtb3ZpbmcgY29tbWFuZCBmcm9tIGlucHV0X1EuICIsIGluc3RhbmNlLT5ob3N0X25vKTsKIAkJCWNtZC0+c2NzaV9kb25lKGNtZCk7CiAJCQlyZXR1cm4gU1VDQ0VTUzsKIAkJfQpAQCAtMTcyNSw3ICsxNzI0LDcgQEAKIAogCWlmIChob3N0ZGF0YS0+Y29ubmVjdGVkID09IGNtZCkgewogCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgInNjc2klZDogQWJvcnRpbmcgY29ubmVjdGVkIGNvbW1hbmQgJWxkIC0gIiwgaW5zdGFuY2UtPmhvc3Rfbm8sIGNtZC0+c2VyaWFsX251bWJlcik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInNjc2klZDogQWJvcnRpbmcgY29ubmVjdGVkIGNvbW1hbmQgLSAiLCBpbnN0YW5jZS0+aG9zdF9ubyk7CiAKIAkJcHJpbnRrKCJzZW5kaW5nIHdkMzNjOTMgQUJPUlQgY29tbWFuZCAtICIpOwogCQl3cml0ZV8zMzkzKGhvc3RkYXRhLCBXRF9DT05UUk9MLCBDVFJMX0lESSB8IENUUkxfRURJIHwgQ1RSTF9QT0xMRUQpOwpAQCAtMjI3MCw3ICsyMjY5LDcgQEAKIAkJc3RyY2F0KGJwLCAiXG5jb25uZWN0ZWQ6ICAgICAiKTsKIAkJaWYgKGhkLT5jb25uZWN0ZWQpIHsKIAkJCWNtZCA9IChTY3NpX0NtbmQgKikgaGQtPmNvbm5lY3RlZDsKLQkJCXNwcmludGYodGJ1ZiwgIiAlbGQtJWQ6JWQoJTAyeCkiLCBjbWQtPnNlcmlhbF9udW1iZXIsIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1biwgY21kLT5jbW5kWzBdKTsKKwkJCXNwcmludGYodGJ1ZiwgIiAlZDolZCglMDJ4KSIsIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1biwgY21kLT5jbW5kWzBdKTsKIAkJCXN0cmNhdChicCwgdGJ1Zik7CiAJCX0KIAl9CkBAIC0yMjc4LDcgKzIyNzcsNyBAQAogCQlzdHJjYXQoYnAsICJcbmlucHV0X1E6ICAgICAgICIpOwogCQljbWQgPSAoU2NzaV9DbW5kICopIGhkLT5pbnB1dF9ROwogCQl3aGlsZSAoY21kKSB7Ci0JCQlzcHJpbnRmKHRidWYsICIgJWxkLSVkOiVkKCUwMngpIiwgY21kLT5zZXJpYWxfbnVtYmVyLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4sIGNtZC0+Y21uZFswXSk7CisJCQlzcHJpbnRmKHRidWYsICIgJWQ6JWQoJTAyeCkiLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4sIGNtZC0+Y21uZFswXSk7CiAJCQlzdHJjYXQoYnAsIHRidWYpOwogCQkJY21kID0gKFNjc2lfQ21uZCAqKSBjbWQtPmhvc3Rfc2NyaWJibGU7CiAJCX0KQEAgLTIyODcsNyArMjI4Niw3IEBACiAJCXN0cmNhdChicCwgIlxuZGlzY29ubmVjdGVkX1E6Iik7CiAJCWNtZCA9IChTY3NpX0NtbmQgKikgaGQtPmRpc2Nvbm5lY3RlZF9ROwogCQl3aGlsZSAoY21kKSB7Ci0JCQlzcHJpbnRmKHRidWYsICIgJWxkLSVkOiVkKCUwMngpIiwgY21kLT5zZXJpYWxfbnVtYmVyLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4sIGNtZC0+Y21uZFswXSk7CisJCQlzcHJpbnRmKHRidWYsICIgJWQ6JWQoJTAyeCkiLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4sIGNtZC0+Y21uZFswXSk7CiAJCQlzdHJjYXQoYnAsIHRidWYpOwogCQkJY21kID0gKFNjc2lfQ21uZCAqKSBjbWQtPmhvc3Rfc2NyaWJibGU7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pcHIuYyBiL2RyaXZlcnMvc2NzaS9pcHIuYwppbmRleCAwNjIxMjM4Li4xMjg2OGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXByLmMKKysrIGIvZHJpdmVycy9zY3NpL2lwci5jCkBAIC02MCw2ICs2MCw3IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CkBAIC0yNzE3LDEzICsyNzE4LDE4IEBACiAJCQl1bnNpZ25lZCBsb25nIHBjaV9hZGRyZXNzLCB1MzIgbGVuZ3RoKQogewogCWludCBieXRlc19jb3BpZWQgPSAwOwotCWludCBjdXJfbGVuLCByYywgcmVtX2xlbiwgcmVtX3BhZ2VfbGVuOworCWludCBjdXJfbGVuLCByYywgcmVtX2xlbiwgcmVtX3BhZ2VfbGVuLCBtYXhfZHVtcF9zaXplOwogCV9fYmUzMiAqcGFnZTsKIAl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3MgPSAwOwogCXN0cnVjdCBpcHJfaW9hX2R1bXAgKmlvYV9kdW1wID0gJmlvYV9jZmctPmR1bXAtPmlvYV9kdW1wOwogCisJaWYgKGlvYV9jZmctPnNpczY0KQorCQltYXhfZHVtcF9zaXplID0gSVBSX0ZNVDNfTUFYX0lPQV9EVU1QX1NJWkU7CisJZWxzZQorCQltYXhfZHVtcF9zaXplID0gSVBSX0ZNVDJfTUFYX0lPQV9EVU1QX1NJWkU7CisKIAl3aGlsZSAoYnl0ZXNfY29waWVkIDwgbGVuZ3RoICYmCi0JICAgICAgIChpb2FfZHVtcC0+aGRyLmxlbiArIGJ5dGVzX2NvcGllZCkgPCBJUFJfTUFYX0lPQV9EVU1QX1NJWkUpIHsKKwkgICAgICAgKGlvYV9kdW1wLT5oZHIubGVuICsgYnl0ZXNfY29waWVkKSA8IG1heF9kdW1wX3NpemUpIHsKIAkJaWYgKGlvYV9kdW1wLT5wYWdlX29mZnNldCA+PSBQQUdFX1NJWkUgfHwKIAkJICAgIGlvYV9kdW1wLT5wYWdlX29mZnNldCA9PSAwKSB7CiAJCQlwYWdlID0gKF9fYmUzMiAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfQVRPTUlDKTsKQEAgLTI4ODUsOCArMjg5MSw4IEBACiAJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzID0gMDsKIAlzdHJ1Y3QgaXByX2RyaXZlcl9kdW1wICpkcml2ZXJfZHVtcCA9ICZkdW1wLT5kcml2ZXJfZHVtcDsKIAlzdHJ1Y3QgaXByX2lvYV9kdW1wICppb2FfZHVtcCA9ICZkdW1wLT5pb2FfZHVtcDsKLQl1MzIgbnVtX2VudHJpZXMsIHN0YXJ0X29mZiwgZW5kX29mZjsKLQl1MzIgYnl0ZXNfdG9fY29weSwgYnl0ZXNfY29waWVkLCByYzsKKwl1MzIgbnVtX2VudHJpZXMsIG1heF9udW1fZW50cmllcywgc3RhcnRfb2ZmLCBlbmRfb2ZmOworCXUzMiBtYXhfZHVtcF9zaXplLCBieXRlc190b19jb3B5LCBieXRlc19jb3BpZWQsIHJjOwogCXN0cnVjdCBpcHJfc2R0ICpzZHQ7CiAJaW50IHZhbGlkID0gMTsKIAlpbnQgaTsKQEAgLTI5NDcsOCArMjk1MywxOCBAQAogCSBvbiBlbnRyaWVzIGluIHRoaXMgdGFibGUgKi8KIAlzZHQgPSAmaW9hX2R1bXAtPnNkdDsKIAorCWlmIChpb2FfY2ZnLT5zaXM2NCkgeworCQltYXhfbnVtX2VudHJpZXMgPSBJUFJfRk1UM19OVU1fU0RUX0VOVFJJRVM7CisJCW1heF9kdW1wX3NpemUgPSBJUFJfRk1UM19NQVhfSU9BX0RVTVBfU0laRTsKKwl9IGVsc2UgeworCQltYXhfbnVtX2VudHJpZXMgPSBJUFJfRk1UMl9OVU1fU0RUX0VOVFJJRVM7CisJCW1heF9kdW1wX3NpemUgPSBJUFJfRk1UMl9NQVhfSU9BX0RVTVBfU0laRTsKKwl9CisKKwlieXRlc190b19jb3B5ID0gb2Zmc2V0b2Yoc3RydWN0IGlwcl9zZHQsIGVudHJ5KSArCisJCQkobWF4X251bV9lbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBpcHJfc2R0X2VudHJ5KSk7CiAJcmMgPSBpcHJfZ2V0X2xkdW1wX2RhdGFfc2VjdGlvbihpb2FfY2ZnLCBzdGFydF9hZGRyLCAoX19iZTMyICopc2R0LAotCQkJCQlzaXplb2Yoc3RydWN0IGlwcl9zZHQpIC8gc2l6ZW9mKF9fYmUzMikpOworCQkJCQlieXRlc190b19jb3B5IC8gc2l6ZW9mKF9fYmUzMikpOwogCiAJLyogU21hcnQgRHVtcCB0YWJsZSBpcyByZWFkeSB0byB1c2UgYW5kIHRoZSBmaXJzdCBlbnRyeSBpcyB2YWxpZCAqLwogCWlmIChyYyB8fCAoKGJlMzJfdG9fY3B1KHNkdC0+aGRyLnN0YXRlKSAhPSBJUFJfRk1UM19TRFRfUkVBRFlfVE9fVVNFKSAmJgpAQCAtMjk2NCwxMyArMjk4MCwyMCBAQAogCiAJbnVtX2VudHJpZXMgPSBiZTMyX3RvX2NwdShzZHQtPmhkci5udW1fZW50cmllc191c2VkKTsKIAotCWlmIChudW1fZW50cmllcyA+IElQUl9OVU1fU0RUX0VOVFJJRVMpCi0JCW51bV9lbnRyaWVzID0gSVBSX05VTV9TRFRfRU5UUklFUzsKKwlpZiAobnVtX2VudHJpZXMgPiBtYXhfbnVtX2VudHJpZXMpCisJCW51bV9lbnRyaWVzID0gbWF4X251bV9lbnRyaWVzOworCisJLyogVXBkYXRlIGR1bXAgbGVuZ3RoIHRvIHRoZSBhY3R1YWwgZGF0YSB0byBiZSBjb3BpZWQgKi8KKwlkdW1wLT5kcml2ZXJfZHVtcC5oZHIubGVuICs9IHNpemVvZihzdHJ1Y3QgaXByX3NkdF9oZWFkZXIpOworCWlmIChpb2FfY2ZnLT5zaXM2NCkKKwkJZHVtcC0+ZHJpdmVyX2R1bXAuaGRyLmxlbiArPSBudW1fZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgaXByX3NkdF9lbnRyeSk7CisJZWxzZQorCQlkdW1wLT5kcml2ZXJfZHVtcC5oZHIubGVuICs9IG1heF9udW1fZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgaXByX3NkdF9lbnRyeSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlvYV9jZmctPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2VudHJpZXM7IGkrKykgewotCQlpZiAoaW9hX2R1bXAtPmhkci5sZW4gPiBJUFJfTUFYX0lPQV9EVU1QX1NJWkUpIHsKKwkJaWYgKGlvYV9kdW1wLT5oZHIubGVuID4gbWF4X2R1bXBfc2l6ZSkgewogCQkJZHJpdmVyX2R1bXAtPmhkci5zdGF0dXMgPSBJUFJfRFVNUF9TVEFUVVNfUVVBTF9TVUNDRVNTOwogCQkJYnJlYWs7CiAJCX0KQEAgLTI5ODksNyArMzAxMiw3IEBACiAJCQkJCXZhbGlkID0gMDsKIAkJCX0KIAkJCWlmICh2YWxpZCkgewotCQkJCWlmIChieXRlc190b19jb3B5ID4gSVBSX01BWF9JT0FfRFVNUF9TSVpFKSB7CisJCQkJaWYgKGJ5dGVzX3RvX2NvcHkgPiBtYXhfZHVtcF9zaXplKSB7CiAJCQkJCXNkdC0+ZW50cnlbaV0uZmxhZ3MgJj0gfklQUl9TRFRfVkFMSURfRU5UUlk7CiAJCQkJCWNvbnRpbnVlOwogCQkJCX0KQEAgLTMwNDQsNiArMzA2Nyw3IEBACiAJZm9yIChpID0gMDsgaSA8IGR1bXAtPmlvYV9kdW1wLm5leHRfcGFnZV9pbmRleDsgaSsrKQogCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGR1bXAtPmlvYV9kdW1wLmlvYV9kYXRhW2ldKTsKIAorCXZmcmVlKGR1bXAtPmlvYV9kdW1wLmlvYV9kYXRhKTsKIAlrZnJlZShkdW1wKTsKIAlMRUFWRTsKIH0KQEAgLTM4MzUsNyArMzg1OSw3IEBACiAJc3RydWN0IGlwcl9kdW1wICpkdW1wOwogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFncyA9IDA7CiAJY2hhciAqc3JjOwotCWludCBsZW47CisJaW50IGxlbiwgc2R0X2VuZDsKIAlzaXplX3QgcmMgPSBjb3VudDsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKQEAgLTM4NzUsOSArMzg5OSwxNyBAQAogCiAJb2ZmIC09IHNpemVvZihkdW1wLT5kcml2ZXJfZHVtcCk7CiAKLQlpZiAoY291bnQgJiYgb2ZmIDwgb2Zmc2V0b2Yoc3RydWN0IGlwcl9pb2FfZHVtcCwgaW9hX2RhdGEpKSB7Ci0JCWlmIChvZmYgKyBjb3VudCA+IG9mZnNldG9mKHN0cnVjdCBpcHJfaW9hX2R1bXAsIGlvYV9kYXRhKSkKLQkJCWxlbiA9IG9mZnNldG9mKHN0cnVjdCBpcHJfaW9hX2R1bXAsIGlvYV9kYXRhKSAtIG9mZjsKKwlpZiAoaW9hX2NmZy0+c2lzNjQpCisJCXNkdF9lbmQgPSBvZmZzZXRvZihzdHJ1Y3QgaXByX2lvYV9kdW1wLCBzZHQuZW50cnkpICsKKwkJCSAgKGJlMzJfdG9fY3B1KGR1bXAtPmlvYV9kdW1wLnNkdC5oZHIubnVtX2VudHJpZXNfdXNlZCkgKgorCQkJICAgc2l6ZW9mKHN0cnVjdCBpcHJfc2R0X2VudHJ5KSk7CisJZWxzZQorCQlzZHRfZW5kID0gb2Zmc2V0b2Yoc3RydWN0IGlwcl9pb2FfZHVtcCwgc2R0LmVudHJ5KSArCisJCQkgIChJUFJfRk1UMl9OVU1fU0RUX0VOVFJJRVMgKiBzaXplb2Yoc3RydWN0IGlwcl9zZHRfZW50cnkpKTsKKworCWlmIChjb3VudCAmJiBvZmYgPCBzZHRfZW5kKSB7CisJCWlmIChvZmYgKyBjb3VudCA+IHNkdF9lbmQpCisJCQlsZW4gPSBzZHRfZW5kIC0gb2ZmOwogCQllbHNlCiAJCQlsZW4gPSBjb3VudDsKIAkJc3JjID0gKHU4ICopJmR1bXAtPmlvYV9kdW1wICsgb2ZmOwpAQCAtMzg4Nyw3ICszOTE5LDcgQEAKIAkJY291bnQgLT0gbGVuOwogCX0KIAotCW9mZiAtPSBvZmZzZXRvZihzdHJ1Y3QgaXByX2lvYV9kdW1wLCBpb2FfZGF0YSk7CisJb2ZmIC09IHNkdF9lbmQ7CiAKIAl3aGlsZSAoY291bnQpIHsKIAkJaWYgKChvZmYgJiBQQUdFX01BU0spICE9ICgob2ZmICsgY291bnQpICYgUEFHRV9NQVNLKSkKQEAgLTM5MTYsNiArMzk0OCw3IEBACiBzdGF0aWMgaW50IGlwcl9hbGxvY19kdW1wKHN0cnVjdCBpcHJfaW9hX2NmZyAqaW9hX2NmZykKIHsKIAlzdHJ1Y3QgaXByX2R1bXAgKmR1bXA7CisJX19iZTMyICoqaW9hX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzID0gMDsKIAogCWR1bXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXByX2R1bXApLCBHRlBfS0VSTkVMKTsKQEAgLTM5MjUsNiArMzk1OCwxOSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwlpZiAoaW9hX2NmZy0+c2lzNjQpCisJCWlvYV9kYXRhID0gdm1hbGxvYyhJUFJfRk1UM19NQVhfTlVNX0RVTVBfUEFHRVMgKiBzaXplb2YoX19iZTMyICopKTsKKwllbHNlCisJCWlvYV9kYXRhID0gdm1hbGxvYyhJUFJfRk1UMl9NQVhfTlVNX0RVTVBfUEFHRVMgKiBzaXplb2YoX19iZTMyICopKTsKKworCWlmICghaW9hX2RhdGEpIHsKKwkJaXByX2VycigiRHVtcCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlrZnJlZShkdW1wKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZHVtcC0+aW9hX2R1bXAuaW9hX2RhdGEgPSBpb2FfZGF0YTsKKwogCWtyZWZfaW5pdCgmZHVtcC0+a3JlZik7CiAJZHVtcC0+aW9hX2NmZyA9IGlvYV9jZmc7CiAKQEAgLTM5MzIsNiArMzk3OCw3IEBACiAKIAlpZiAoSU5BQ1RJVkUgIT0gaW9hX2NmZy0+c2R0X3N0YXRlKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKwkJdmZyZWUoZHVtcC0+aW9hX2R1bXAuaW9hX2RhdGEpOwogCQlrZnJlZShkdW1wKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNDk1Myw5ICs1MDAwLDM1IEBACiAgKiAJSVJRX05PTkUgLyBJUlFfSEFORExFRAogICoqLwogc3RhdGljIGlycXJldHVybl90IGlwcl9oYW5kbGVfb3RoZXJfaW50ZXJydXB0KHN0cnVjdCBpcHJfaW9hX2NmZyAqaW9hX2NmZywKLQkJCQkJICAgICAgdm9sYXRpbGUgdTMyIGludF9yZWcpCisJCQkJCSAgICAgIHUzMiBpbnRfcmVnKQogewogCWlycXJldHVybl90IHJjID0gSVJRX0hBTkRMRUQ7CisJdTMyIGludF9tYXNrX3JlZzsKKworCWludF9tYXNrX3JlZyA9IHJlYWRsKGlvYV9jZmctPnJlZ3Muc2Vuc2VfaW50ZXJydXB0X21hc2tfcmVnMzIpOworCWludF9yZWcgJj0gfmludF9tYXNrX3JlZzsKKworCS8qIElmIGFuIGludGVycnVwdCBvbiB0aGUgYWRhcHRlciBkaWQgbm90IG9jY3VyLCBpZ25vcmUgaXQuCisJICogT3IgaW4gdGhlIGNhc2Ugb2YgU0lTIDY0LCBjaGVjayBmb3IgYSBzdGFnZSBjaGFuZ2UgaW50ZXJydXB0LgorCSAqLworCWlmICgoaW50X3JlZyAmIElQUl9QQ0lJX09QRVJfSU5URVJSVVBUUykgPT0gMCkgeworCQlpZiAoaW9hX2NmZy0+c2lzNjQpIHsKKwkJCWludF9tYXNrX3JlZyA9IHJlYWRsKGlvYV9jZmctPnJlZ3Muc2Vuc2VfaW50ZXJydXB0X21hc2tfcmVnKTsKKwkJCWludF9yZWcgPSByZWFkbChpb2FfY2ZnLT5yZWdzLnNlbnNlX2ludGVycnVwdF9yZWcpICYgfmludF9tYXNrX3JlZzsKKwkJCWlmIChpbnRfcmVnICYgSVBSX1BDSUlfSVBMX1NUQUdFX0NIQU5HRSkgeworCisJCQkJLyogY2xlYXIgc3RhZ2UgY2hhbmdlICovCisJCQkJd3JpdGVsKElQUl9QQ0lJX0lQTF9TVEFHRV9DSEFOR0UsIGlvYV9jZmctPnJlZ3MuY2xyX2ludGVycnVwdF9yZWcpOworCQkJCWludF9yZWcgPSByZWFkbChpb2FfY2ZnLT5yZWdzLnNlbnNlX2ludGVycnVwdF9yZWcpICYgfmludF9tYXNrX3JlZzsKKwkJCQlsaXN0X2RlbCgmaW9hX2NmZy0+cmVzZXRfY21kLT5xdWV1ZSk7CisJCQkJZGVsX3RpbWVyKCZpb2FfY2ZnLT5yZXNldF9jbWQtPnRpbWVyKTsKKwkJCQlpcHJfcmVzZXRfaW9hX2pvYihpb2FfY2ZnLT5yZXNldF9jbWQpOworCQkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJCX0KKwkJfQorCisJCXJldHVybiBJUlFfTk9ORTsKKwl9CiAKIAlpZiAoaW50X3JlZyAmIElQUl9QQ0lJX0lPQV9UUkFOU19UT19PUEVSKSB7CiAJCS8qIE1hc2sgdGhlIGludGVycnVwdCAqLwpAQCAtNDk2OCw2ICs1MDQxLDEzIEBACiAJCWxpc3RfZGVsKCZpb2FfY2ZnLT5yZXNldF9jbWQtPnF1ZXVlKTsKIAkJZGVsX3RpbWVyKCZpb2FfY2ZnLT5yZXNldF9jbWQtPnRpbWVyKTsKIAkJaXByX3Jlc2V0X2lvYV9qb2IoaW9hX2NmZy0+cmVzZXRfY21kKTsKKwl9IGVsc2UgaWYgKChpbnRfcmVnICYgSVBSX1BDSUlfSFJSUV9VUERBVEVEKSA9PSBpbnRfcmVnKSB7CisJCWlmIChpcHJfZGVidWcgJiYgcHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJZGV2X2VycigmaW9hX2NmZy0+cGRldi0+ZGV2LAorCQkJCSJTcHVyaW91cyBpbnRlcnJ1cHQgZGV0ZWN0ZWQuIDB4JTA4WFxuIiwgaW50X3JlZyk7CisJCXdyaXRlbChJUFJfUENJSV9IUlJRX1VQREFURUQsIGlvYV9jZmctPnJlZ3MuY2xyX2ludGVycnVwdF9yZWczMik7CisJCWludF9yZWcgPSByZWFkbChpb2FfY2ZnLT5yZWdzLnNlbnNlX2ludGVycnVwdF9yZWczMik7CisJCXJldHVybiBJUlFfTk9ORTsKIAl9IGVsc2UgewogCQlpZiAoaW50X3JlZyAmIElQUl9QQ0lJX0lPQV9VTklUX0NIRUNLRUQpCiAJCQlpb2FfY2ZnLT5pb2FfdW5pdF9jaGVja2VkID0gMTsKQEAgLTUwMTYsMTAgKzUwOTYsMTEgQEAKIHsKIAlzdHJ1Y3QgaXByX2lvYV9jZmcgKmlvYV9jZmcgPSAoc3RydWN0IGlwcl9pb2FfY2ZnICopZGV2cDsKIAl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3MgPSAwOwotCXZvbGF0aWxlIHUzMiBpbnRfcmVnLCBpbnRfbWFza19yZWc7CisJdTMyIGludF9yZWcgPSAwOwogCXUzMiBpb2FzYzsKIAl1MTYgY21kX2luZGV4OwogCWludCBudW1faHJycSA9IDA7CisJaW50IGlycV9ub25lID0gMDsKIAlzdHJ1Y3QgaXByX2NtbmQgKmlwcl9jbWQ7CiAJaXJxcmV0dXJuX3QgcmMgPSBJUlFfTk9ORTsKIApAQCAtNTAzMSwzMyArNTExMiw2IEBACiAJCXJldHVybiBJUlFfTk9ORTsKIAl9CiAKLQlpbnRfbWFza19yZWcgPSByZWFkbChpb2FfY2ZnLT5yZWdzLnNlbnNlX2ludGVycnVwdF9tYXNrX3JlZzMyKTsKLQlpbnRfcmVnID0gcmVhZGwoaW9hX2NmZy0+cmVncy5zZW5zZV9pbnRlcnJ1cHRfcmVnMzIpICYgfmludF9tYXNrX3JlZzsKLQotCS8qIElmIGFuIGludGVycnVwdCBvbiB0aGUgYWRhcHRlciBkaWQgbm90IG9jY3VyLCBpZ25vcmUgaXQuCi0JICogT3IgaW4gdGhlIGNhc2Ugb2YgU0lTIDY0LCBjaGVjayBmb3IgYSBzdGFnZSBjaGFuZ2UgaW50ZXJydXB0LgotCSAqLwotCWlmICh1bmxpa2VseSgoaW50X3JlZyAmIElQUl9QQ0lJX09QRVJfSU5URVJSVVBUUykgPT0gMCkpIHsKLQkJaWYgKGlvYV9jZmctPnNpczY0KSB7Ci0JCQlpbnRfbWFza19yZWcgPSByZWFkbChpb2FfY2ZnLT5yZWdzLnNlbnNlX2ludGVycnVwdF9tYXNrX3JlZyk7Ci0JCQlpbnRfcmVnID0gcmVhZGwoaW9hX2NmZy0+cmVncy5zZW5zZV9pbnRlcnJ1cHRfcmVnKSAmIH5pbnRfbWFza19yZWc7Ci0JCQlpZiAoaW50X3JlZyAmIElQUl9QQ0lJX0lQTF9TVEFHRV9DSEFOR0UpIHsKLQotCQkJCS8qIGNsZWFyIHN0YWdlIGNoYW5nZSAqLwotCQkJCXdyaXRlbChJUFJfUENJSV9JUExfU1RBR0VfQ0hBTkdFLCBpb2FfY2ZnLT5yZWdzLmNscl9pbnRlcnJ1cHRfcmVnKTsKLQkJCQlpbnRfcmVnID0gcmVhZGwoaW9hX2NmZy0+cmVncy5zZW5zZV9pbnRlcnJ1cHRfcmVnKSAmIH5pbnRfbWFza19yZWc7Ci0JCQkJbGlzdF9kZWwoJmlvYV9jZmctPnJlc2V0X2NtZC0+cXVldWUpOwotCQkJCWRlbF90aW1lcigmaW9hX2NmZy0+cmVzZXRfY21kLT50aW1lcik7Ci0JCQkJaXByX3Jlc2V0X2lvYV9qb2IoaW9hX2NmZy0+cmVzZXRfY21kKTsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlvYV9jZmctPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7Ci0JCQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCQkJfQotCQl9Ci0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOwotCQlyZXR1cm4gSVJRX05PTkU7Ci0JfQotCiAJd2hpbGUgKDEpIHsKIAkJaXByX2NtZCA9IE5VTEw7CiAKQEAgLTUwOTcsNyArNTE1MSw3IEBACiAJCQkvKiBDbGVhciB0aGUgUENJIGludGVycnVwdCAqLwogCQkJZG8gewogCQkJCXdyaXRlbChJUFJfUENJSV9IUlJRX1VQREFURUQsIGlvYV9jZmctPnJlZ3MuY2xyX2ludGVycnVwdF9yZWczMik7Ci0JCQkJaW50X3JlZyA9IHJlYWRsKGlvYV9jZmctPnJlZ3Muc2Vuc2VfaW50ZXJydXB0X3JlZzMyKSAmIH5pbnRfbWFza19yZWc7CisJCQkJaW50X3JlZyA9IHJlYWRsKGlvYV9jZmctPnJlZ3Muc2Vuc2VfaW50ZXJydXB0X3JlZzMyKTsKIAkJCX0gd2hpbGUgKGludF9yZWcgJiBJUFJfUENJSV9IUlJRX1VQREFURUQgJiYKIAkJCQkJbnVtX2hycnErKyA8IElQUl9NQVhfSFJSUV9SRVRSSUVTKTsKIApAQCAtNTEwNyw2ICs1MTYxLDkgQEAKIAkJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJCQl9CiAKKwkJfSBlbHNlIGlmIChyYyA9PSBJUlFfTk9ORSAmJiBpcnFfbm9uZSA9PSAwKSB7CisJCQlpbnRfcmVnID0gcmVhZGwoaW9hX2NmZy0+cmVncy5zZW5zZV9pbnRlcnJ1cHRfcmVnMzIpOworCQkJaXJxX25vbmUrKzsKIAkJfSBlbHNlCiAJCQlicmVhazsKIAl9CkBAIC01MTQzLDcgKzUyMDAsOCBAQAogCiAJbnNlZyA9IHNjc2lfZG1hX21hcChzY3NpX2NtZCk7CiAJaWYgKG5zZWcgPCAwKSB7Ci0JCWRldl9lcnIoJmlvYV9jZmctPnBkZXYtPmRldiwgInBjaV9tYXBfc2cgZmFpbGVkIVxuIik7CisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQlkZXZfZXJyKCZpb2FfY2ZnLT5wZGV2LT5kZXYsICJwY2lfbWFwX3NnIGZhaWxlZCFcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC01NzczLDcgKzU4MzEsOCBAQAogCQl9CiAKIAkJaW9hcmNiLT5jbWRfcGt0LmZsYWdzX2hpIHw9IElQUl9GTEFHU19ISV9OT19MSU5LX0RFU0M7Ci0JCWlvYXJjYi0+Y21kX3BrdC5mbGFnc19sbyB8PSBJUFJfRkxBR1NfTE9fREVMQVlfQUZURVJfUlNUOworCQlpZiAoaXByX2lzX2dzY3NpKHJlcykpCisJCQlpb2FyY2ItPmNtZF9wa3QuZmxhZ3NfbG8gfD0gSVBSX0ZMQUdTX0xPX0RFTEFZX0FGVEVSX1JTVDsKIAkJaW9hcmNiLT5jbWRfcGt0LmZsYWdzX2xvIHw9IElQUl9GTEFHU19MT19BTElHTkVEX0JGUjsKIAkJaW9hcmNiLT5jbWRfcGt0LmZsYWdzX2xvIHw9IGlwcl9nZXRfdGFza19hdHRyaWJ1dGVzKHNjc2lfY21kKTsKIAl9CkBAIC03NTE2LDcgKzc1NzUsNyBAQAogc3RhdGljIGludCBpcHJfcmVzZXRfcmVzdG9yZV9jZmdfc3BhY2Uoc3RydWN0IGlwcl9jbW5kICppcHJfY21kKQogewogCXN0cnVjdCBpcHJfaW9hX2NmZyAqaW9hX2NmZyA9IGlwcl9jbWQtPmlvYV9jZmc7Ci0Jdm9sYXRpbGUgdTMyIGludF9yZWc7CisJdTMyIGludF9yZWc7CiAKIAlFTlRFUjsKIAlpb2FfY2ZnLT5wZGV2LT5zdGF0ZV9zYXZlZCA9IHRydWU7CkBAIC03NTU1LDcgKzc2MTQsMTAgQEAKIAkJaXByX2NtZC0+am9iX3N0ZXAgPSBpcHJfcmVzZXRfZW5hYmxlX2lvYTsKIAogCQlpZiAoR0VUX0RVTVAgPT0gaW9hX2NmZy0+c2R0X3N0YXRlKSB7Ci0JCQlpcHJfcmVzZXRfc3RhcnRfdGltZXIoaXByX2NtZCwgSVBSX0RVTVBfVElNRU9VVCk7CisJCQlpZiAoaW9hX2NmZy0+c2lzNjQpCisJCQkJaXByX3Jlc2V0X3N0YXJ0X3RpbWVyKGlwcl9jbWQsIElQUl9TSVM2NF9EVU1QX1RJTUVPVVQpOworCQkJZWxzZQorCQkJCWlwcl9yZXNldF9zdGFydF90aW1lcihpcHJfY21kLCBJUFJfU0lTMzJfRFVNUF9USU1FT1VUKTsKIAkJCWlwcl9jbWQtPmpvYl9zdGVwID0gaXByX3Jlc2V0X3dhaXRfZm9yX2R1bXA7CiAJCQlzY2hlZHVsZV93b3JrKCZpb2FfY2ZnLT53b3JrX3EpOwogCQkJcmV0dXJuIElQUl9SQ19KT0JfUkVUVVJOOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lwci5oIGIvZHJpdmVycy9zY3NpL2lwci5oCmluZGV4IDEzZjQyNWYuLmY5M2Y4NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pcHIuaAorKysgYi9kcml2ZXJzL3Njc2kvaXByLmgKQEAgLTM4LDggKzM4LDggQEAKIC8qCiAgKiBMaXRlcmFscwogICovCi0jZGVmaW5lIElQUl9EUklWRVJfVkVSU0lPTiAiMi41LjEiCi0jZGVmaW5lIElQUl9EUklWRVJfREFURSAiKEF1Z3VzdCAxMCwgMjAxMCkiCisjZGVmaW5lIElQUl9EUklWRVJfVkVSU0lPTiAiMi41LjIiCisjZGVmaW5lIElQUl9EUklWRVJfREFURSAiKEFwcmlsIDI3LCAyMDExKSIKIAogLyoKICAqIElQUl9NQVhfQ01EX1BFUl9MVU46IFRoaXMgZGVmaW5lcyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygb3V0c3RhbmRpbmcKQEAgLTIxNyw3ICsyMTcsOCBAQAogI2RlZmluZSBJUFJfQ0hFQ0tfRk9SX1JFU0VUX1RJTUVPVVQJCShIWiAvIDEwKQogI2RlZmluZSBJUFJfV0FJVF9GT1JfQklTVF9USU1FT1VUCQkoMiAqIEhaKQogI2RlZmluZSBJUFJfUENJX1JFU0VUX1RJTUVPVVQJCQkoSFogLyAyKQotI2RlZmluZSBJUFJfRFVNUF9USU1FT1VUCQkJKDE1ICogSFopCisjZGVmaW5lIElQUl9TSVMzMl9EVU1QX1RJTUVPVVQJCQkoMTUgKiBIWikKKyNkZWZpbmUgSVBSX1NJUzY0X0RVTVBfVElNRU9VVAkJCSg0MCAqIEhaKQogI2RlZmluZSBJUFJfRFVNUF9ERUxBWV9TRUNPTkRTCQkJNAogI2RlZmluZSBJUFJfRFVNUF9ERUxBWV9USU1FT1VUCQkJKElQUl9EVU1QX0RFTEFZX1NFQ09ORFMgKiBIWikKIApAQCAtMjg1LDkgKzI4NiwxMiBAQAogLyoKICAqIER1bXAgbGl0ZXJhbHMKICAqLwotI2RlZmluZSBJUFJfTUFYX0lPQV9EVU1QX1NJWkUJCQkJKDQgKiAxMDI0ICogMTAyNCkKLSNkZWZpbmUgSVBSX05VTV9TRFRfRU5UUklFUwkJCQk1MTEKLSNkZWZpbmUgSVBSX01BWF9OVU1fRFVNUF9QQUdFUwkoKElQUl9NQVhfSU9BX0RVTVBfU0laRSAvIFBBR0VfU0laRSkgKyAxKQorI2RlZmluZSBJUFJfRk1UMl9NQVhfSU9BX0RVTVBfU0laRQkJCSg0ICogMTAyNCAqIDEwMjQpCisjZGVmaW5lIElQUl9GTVQzX01BWF9JT0FfRFVNUF9TSVpFCQkJKDMyICogMTAyNCAqIDEwMjQpCisjZGVmaW5lIElQUl9GTVQyX05VTV9TRFRfRU5UUklFUwkJCTUxMQorI2RlZmluZSBJUFJfRk1UM19OVU1fU0RUX0VOVFJJRVMJCQkweEZGRgorI2RlZmluZSBJUFJfRk1UMl9NQVhfTlVNX0RVTVBfUEFHRVMJKChJUFJfRk1UMl9NQVhfSU9BX0RVTVBfU0laRSAvIFBBR0VfU0laRSkgKyAxKQorI2RlZmluZSBJUFJfRk1UM19NQVhfTlVNX0RVTVBfUEFHRVMJKChJUFJfRk1UM19NQVhfSU9BX0RVTVBfU0laRSAvIFBBR0VfU0laRSkgKyAxKQogCiAvKgogICogTWlzYyBsaXRlcmFscwpAQCAtNDc0LDcgKzQ3OCw3IEBACiAKIAl1OCBmbGFnc19sbzsKICNkZWZpbmUgSVBSX0ZMQUdTX0xPX0FMSUdORURfQkZSCQkweDIwCi0jZGVmaW5lIElQUl9GTEFHU19MT19ERUxBWV9BRlRFUl9SU1QJMHgxMAorI2RlZmluZSBJUFJfRkxBR1NfTE9fREVMQVlfQUZURVJfUlNUCQkweDEwCiAjZGVmaW5lIElQUl9GTEFHU19MT19VTlRBR0dFRF9UQVNLCQkweDAwCiAjZGVmaW5lIElQUl9GTEFHU19MT19TSU1QTEVfVEFTSwkJMHgwMgogI2RlZmluZSBJUFJfRkxBR1NfTE9fT1JERVJFRF9UQVNLCQkweDA0CkBAIC0xMTY0LDcgKzExNjgsNyBAQAogCiBzdHJ1Y3QgaXByX3NkdCB7CiAJc3RydWN0IGlwcl9zZHRfaGVhZGVyIGhkcjsKLQlzdHJ1Y3QgaXByX3NkdF9lbnRyeSBlbnRyeVtJUFJfTlVNX1NEVF9FTlRSSUVTXTsKKwlzdHJ1Y3QgaXByX3NkdF9lbnRyeSBlbnRyeVtJUFJfRk1UM19OVU1fU0RUX0VOVFJJRVNdOwogfV9fYXR0cmlidXRlX18oKHBhY2tlZCwgYWxpZ25lZCAoNCkpKTsKIAogc3RydWN0IGlwcl91Y19zZHQgewpAQCAtMTYwOCw3ICsxNjEyLDcgQEAKIHN0cnVjdCBpcHJfaW9hX2R1bXAgewogCXN0cnVjdCBpcHJfZHVtcF9lbnRyeV9oZWFkZXIgaGRyOwogCXN0cnVjdCBpcHJfc2R0IHNkdDsKLQlfX2JlMzIgKmlvYV9kYXRhW0lQUl9NQVhfTlVNX0RVTVBfUEFHRVNdOworCV9fYmUzMiAqKmlvYV9kYXRhOwogCXUzMiByZXNlcnZlZDsKIAl1MzIgbmV4dF9wYWdlX2luZGV4OwogCXUzMiBwYWdlX29mZnNldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19mY3AuYyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19mY3AuYwppbmRleCA1Yjc5OWEzLi4yYTNhNDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2ZjcC5jCkBAIC01Nyw5ICs1Nyw2IEBACiAjZGVmaW5lIEZDX1NSQl9SRUFECQkoMSA8PCAxKQogI2RlZmluZSBGQ19TUkJfV1JJVEUJCSgxIDw8IDApCiAKLS8qIGNvbnN0YW50IGFkZGVkIHRvIGVfZF90b3YgdGltZW91dCB0byBnZXQgcmVjX3RvdiB2YWx1ZSAqLwotI2RlZmluZSBSRUNfVE9WX0NPTlNUCQkxCi0KIC8qCiAgKiBUaGUgU0NwLnB0ciBzaG91bGQgYmUgdGVzdGVkIGFuZCBzZXQgdW5kZXIgdGhlIHNjc2lfcGt0X3F1ZXVlIGxvY2sKICAqLwpAQCAtMjQ4LDcgKzI0NSw3IEBACiAvKioKICAqIGZjX2ZjcF90aW1lcl9zZXQoKSAtIFN0YXJ0IGEgdGltZXIgZm9yIGEgZmNwX3BrdAogICogQGZzcDogICBUaGUgRkNQIHBhY2tldCB0byBzdGFydCBhIHRpbWVyIGZvcgotICogQGRlbGF5OiBUaGUgdGltZW91dCBwZXJpb2QgZm9yIHRoZSB0aW1lcgorICogQGRlbGF5OiBUaGUgdGltZW91dCBwZXJpb2QgaW4gamlmZmllcwogICovCiBzdGF0aWMgdm9pZCBmY19mY3BfdGltZXJfc2V0KHN0cnVjdCBmY19mY3BfcGt0ICpmc3AsIHVuc2lnbmVkIGxvbmcgZGVsYXkpCiB7CkBAIC0zMzUsMjIgKzMzMiwyMyBAQAogLyoqCiAgKiBmY19mY3BfY2FuX3F1ZXVlX3JhbXBfdXAoKSAtIGluY3JlYXNlcyBjYW5fcXVldWUKICAqIEBscG9ydDogbHBvcnQgdG8gcmFtcCB1cCBjYW5fcXVldWUKLSAqCi0gKiBMb2NraW5nIG5vdGVzOiBDYWxsZWQgd2l0aCBTY3NpX0hvc3QgbG9jayBoZWxkCiAgKi8KIHN0YXRpYyB2b2lkIGZjX2ZjcF9jYW5fcXVldWVfcmFtcF91cChzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0KQogewogCXN0cnVjdCBmY19mY3BfaW50ZXJuYWwgKnNpID0gZmNfZ2V0X3Njc2lfaW50ZXJuYWwobHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGNhbl9xdWV1ZTsKIAorCXNwaW5fbG9ja19pcnFzYXZlKGxwb3J0LT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwogCWlmIChzaS0+bGFzdF9jYW5fcXVldWVfcmFtcF91cF90aW1lICYmCiAJICAgICh0aW1lX2JlZm9yZShqaWZmaWVzLCBzaS0+bGFzdF9jYW5fcXVldWVfcmFtcF91cF90aW1lICsKIAkJCSBGQ19DQU5fUVVFVUVfUEVSSU9EKSkpCi0JCXJldHVybjsKKwkJZ290byB1bmxvY2s7CiAKIAlpZiAodGltZV9iZWZvcmUoamlmZmllcywgc2ktPmxhc3RfY2FuX3F1ZXVlX3JhbXBfZG93bl90aW1lICsKIAkJCUZDX0NBTl9RVUVVRV9QRVJJT0QpKQotCQlyZXR1cm47CisJCWdvdG8gdW5sb2NrOwogCiAJc2ktPmxhc3RfY2FuX3F1ZXVlX3JhbXBfdXBfdGltZSA9IGppZmZpZXM7CiAKQEAgLTM2Miw2ICszNjAsOSBAQAogCWxwb3J0LT5ob3N0LT5jYW5fcXVldWUgPSBjYW5fcXVldWU7CiAJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBscG9ydC0+aG9zdCwgImxpYmZjOiBpbmNyZWFzZWQgIgogCQkgICAgICJjYW5fcXVldWUgdG8gJWQuXG4iLCBjYW5fcXVldWUpOworCit1bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShscG9ydC0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiB9CiAKIC8qKgpAQCAtMzczLDE4ICszNzQsMTkgQEAKICAqIGNvbW1hbmRzIGNvbXBsZXRlIG9yIHRpbWVvdXQsIHRoZW4gdHJ5IGFnYWluIHdpdGggYSByZWR1Y2VkCiAgKiBjYW5fcXVldWUuIEV2ZW50dWFsbHkgd2Ugd2lsbCBoaXQgdGhlIHBvaW50IHdoZXJlIHdlIHJ1bgogICogb24gYWxsIHJlc2VydmVkIHN0cnVjdHMuCi0gKgotICogTG9ja2luZyBub3RlczogQ2FsbGVkIHdpdGggU2NzaV9Ib3N0IGxvY2sgaGVsZAogICovCiBzdGF0aWMgdm9pZCBmY19mY3BfY2FuX3F1ZXVlX3JhbXBfZG93bihzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0KQogewogCXN0cnVjdCBmY19mY3BfaW50ZXJuYWwgKnNpID0gZmNfZ2V0X3Njc2lfaW50ZXJuYWwobHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGNhbl9xdWV1ZTsKIAorCXNwaW5fbG9ja19pcnFzYXZlKGxwb3J0LT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwogCWlmIChzaS0+bGFzdF9jYW5fcXVldWVfcmFtcF9kb3duX3RpbWUgJiYKIAkgICAgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHNpLT5sYXN0X2Nhbl9xdWV1ZV9yYW1wX2Rvd25fdGltZSArCiAJCQkgRkNfQ0FOX1FVRVVFX1BFUklPRCkpKQotCQlyZXR1cm47CisJCWdvdG8gdW5sb2NrOwogCiAJc2ktPmxhc3RfY2FuX3F1ZXVlX3JhbXBfZG93bl90aW1lID0gamlmZmllczsKIApAQCAtMzk1LDYgKzM5Nyw5IEBACiAJbHBvcnQtPmhvc3QtPmNhbl9xdWV1ZSA9IGNhbl9xdWV1ZTsKIAlzaG9zdF9wcmludGsoS0VSTl9FUlIsIGxwb3J0LT5ob3N0LCAibGliZmM6IENvdWxkIG5vdCBhbGxvY2F0ZSBmcmFtZS5cbiIKIAkJICAgICAiUmVkdWNpbmcgY2FuX3F1ZXVlIHRvICVkLlxuIiwgY2FuX3F1ZXVlKTsKKwordW5sb2NrOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobHBvcnQtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogfQogCiAvKgpAQCAtNDA5LDE2ICs0MTQsMTMgQEAKIAkJCQkJCSAgc2l6ZV90IGxlbikKIHsKIAlzdHJ1Y3QgZmNfZnJhbWUgKmZwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlmcCA9IGZjX2ZyYW1lX2FsbG9jKGxwb3J0LCBsZW4pOwogCWlmIChsaWtlbHkoZnApKQogCQlyZXR1cm4gZnA7CiAKIAkvKiBlcnJvciBjYXNlICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUobHBvcnQtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCWZjX2ZjcF9jYW5fcXVldWVfcmFtcF9kb3duKGxwb3J0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxwb3J0LT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMTA5MywxNiArMTA5NSwxNCBAQAogLyoqCiAgKiBnZXRfZnNwX3JlY190b3YoKSAtIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgUkVDX1RPVgogICogQGZzcDogdGhlIEZDUCBwYWNrZXQKKyAqCisgKiBSZXR1cm5zIHJlYyB0b3YgaW4gamlmZmllcyBhcyBycHJpdi0+ZV9kX3RvdiArIDEgc2Vjb25kCiAgKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9mc3BfcmVjX3RvdihzdHJ1Y3QgZmNfZmNwX3BrdCAqZnNwKQogewotCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQ7Ci0Jc3RydWN0IGZjX3Jwb3J0X2xpYmZjX3ByaXYgKnJwcml2OworCXN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICpycHJpdiA9IGZzcC0+cnBvcnQtPmRkX2RhdGE7CiAKLQlycG9ydCA9IGZzcC0+cnBvcnQ7Ci0JcnByaXYgPSBycG9ydC0+ZGRfZGF0YTsKLQotCXJldHVybiBycHJpdi0+ZV9kX3RvdiArIFJFQ19UT1ZfQ09OU1Q7CisJcmV0dXJuIG1zZWNzX3RvX2ppZmZpZXMocnByaXYtPmVfZF90b3YpICsgSFo7CiB9CiAKIC8qKgpAQCAtMTEyMiw3ICsxMTIyLDYgQEAKIAlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcnByaXY7CiAJY29uc3Qgc2l6ZV90IGxlbiA9IHNpemVvZihmc3AtPmNkYl9jbWQpOwogCWludCByYyA9IDA7Ci0JdW5zaWduZWQgaW50IHJlY190b3Y7CiAKIAlpZiAoZmNfZmNwX2xvY2tfcGt0KGZzcCkpCiAJCXJldHVybiAwOwpAQCAtMTE1MywxMiArMTE1Miw5IEBACiAJZnNwLT5zZXFfcHRyID0gc2VxOwogCWZjX2ZjcF9wa3RfaG9sZChmc3ApOwkvKiBob2xkIGZvciBmY19mY3BfcGt0X2Rlc3Ryb3kgKi8KIAotCXJlY190b3YgPSBnZXRfZnNwX3JlY190b3YoZnNwKTsKLQogCXNldHVwX3RpbWVyKCZmc3AtPnRpbWVyLCBmY19mY3BfdGltZW91dCwgKHVuc2lnbmVkIGxvbmcpZnNwKTsKLQogCWlmIChycHJpdi0+ZmxhZ3MgJiBGQ19SUF9GTEFHU19SRUNfU1VQUE9SVEVEKQotCQlmY19mY3BfdGltZXJfc2V0KGZzcCwgcmVjX3Rvdik7CisJCWZjX2ZjcF90aW1lcl9zZXQoZnNwLCBnZXRfZnNwX3JlY190b3YoZnNwKSk7CiAKIHVubG9jazoKIAlmY19mY3BfdW5sb2NrX3BrdChmc3ApOwpAQCAtMTIzNSwxNiArMTIzMSwxNCBAQAogewogCXN0cnVjdCBmY19mY3BfcGt0ICpmc3AgPSAoc3RydWN0IGZjX2ZjcF9wa3QgKilkYXRhOwogCXN0cnVjdCBmY19scG9ydCAqbHBvcnQgPSBmc3AtPmxwOwotCXVuc2lnbmVkIGludCByZWNfdG92OwogCiAJaWYgKGxwb3J0LT50dC5mY3BfY21kX3NlbmQobHBvcnQsIGZzcCwgZmNfdG1fZG9uZSkpIHsKIAkJaWYgKGZzcC0+cmVjb3ZfcmV0cnkrKyA+PSBGQ19NQVhfUkVDT1ZfUkVUUlkpCiAJCQlyZXR1cm47CiAJCWlmIChmY19mY3BfbG9ja19wa3QoZnNwKSkKIAkJCXJldHVybjsKLQkJcmVjX3RvdiA9IGdldF9mc3BfcmVjX3Rvdihmc3ApOwogCQlzZXR1cF90aW1lcigmZnNwLT50aW1lciwgZmNfbHVuX3Jlc2V0X3NlbmQsICh1bnNpZ25lZCBsb25nKWZzcCk7Ci0JCWZjX2ZjcF90aW1lcl9zZXQoZnNwLCByZWNfdG92KTsKKwkJZmNfZmNwX3RpbWVyX3NldChmc3AsIGdldF9mc3BfcmVjX3Rvdihmc3ApKTsKIAkJZmNfZmNwX3VubG9ja19wa3QoZnNwKTsKIAl9CiB9CkBAIC0xNTM2LDEyICsxNTMwLDExIEBACiAJCQl9CiAJCQlmY19mY3Bfc3JyKGZzcCwgcl9jdGwsIG9mZnNldCk7CiAJCX0gZWxzZSBpZiAoZV9zdGF0ICYgRVNCX1NUX1NFUV9JTklUKSB7Ci0JCQl1bnNpZ25lZCBpbnQgcmVjX3RvdiA9IGdldF9mc3BfcmVjX3Rvdihmc3ApOwogCQkJLyoKIAkJCSAqIFRoZSByZW1vdGUgcG9ydCBoYXMgdGhlIGluaXRpYXRpdmUsIHNvIGp1c3QKIAkJCSAqIGtlZXAgd2FpdGluZyBmb3IgaXQgdG8gY29tcGxldGUuCiAJCQkgKi8KLQkJCWZjX2ZjcF90aW1lcl9zZXQoZnNwLCByZWNfdG92KTsKKwkJCWZjX2ZjcF90aW1lcl9zZXQoZnNwLCAgZ2V0X2ZzcF9yZWNfdG92KGZzcCkpOwogCQl9IGVsc2UgewogCiAJCQkvKgpAQCAtMTcwNSw3ICsxNjk4LDYgQEAKIHsKIAlzdHJ1Y3QgZmNfZmNwX3BrdCAqZnNwID0gYXJnOwogCXN0cnVjdCBmY19mcmFtZV9oZWFkZXIgKmZoOwotCXVuc2lnbmVkIGludCByZWNfdG92OwogCiAJaWYgKElTX0VSUihmcCkpIHsKIAkJZmNfZmNwX3Nycl9lcnJvcihmc3AsIGZwKTsKQEAgLTE3MzIsOCArMTcyNCw3IEBACiAJc3dpdGNoIChmY19mcmFtZV9wYXlsb2FkX29wKGZwKSkgewogCWNhc2UgRUxTX0xTX0FDQzoKIAkJZnNwLT5yZWNvdl9yZXRyeSA9IDA7Ci0JCXJlY190b3YgPSBnZXRfZnNwX3JlY190b3YoZnNwKTsKLQkJZmNfZmNwX3RpbWVyX3NldChmc3AsIHJlY190b3YpOworCQlmY19mY3BfdGltZXJfc2V0KGZzcCwgZ2V0X2ZzcF9yZWNfdG92KGZzcCkpOwogCQlicmVhazsKIAljYXNlIEVMU19MU19SSlQ6CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19scG9ydC5jIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2xwb3J0LmMKaW5kZXggOTA2YmJjYS4uMzg5YWI4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2xwb3J0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2xwb3J0LmMKQEAgLTE1OTAsNyArMTU5MCw2IEBACiAgKi8KIGludCBmY19scG9ydF9jb25maWcoc3RydWN0IGZjX2xwb3J0ICpscG9ydCkKIHsKLQlJTklUX0xJU1RfSEVBRCgmbHBvcnQtPmVtYV9saXN0KTsKIAlJTklUX0RFTEFZRURfV09SSygmbHBvcnQtPnJldHJ5X3dvcmssIGZjX2xwb3J0X3RpbWVvdXQpOwogCW11dGV4X2luaXQoJmxwb3J0LT5scF9tdXRleCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmMuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmMuaAppbmRleCA2MGU5OGE2Mi4uMDJkNTNkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmYy5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmMuaApAQCAtODA1LDYgKzgwNSw4IEBACiAJc3RydWN0IGRlbnRyeSAqaWRpYWdfcm9vdDsKIAlzdHJ1Y3QgZGVudHJ5ICppZGlhZ19wY2lfY2ZnOwogCXN0cnVjdCBkZW50cnkgKmlkaWFnX3F1ZV9pbmZvOworCXN0cnVjdCBkZW50cnkgKmlkaWFnX3F1ZV9hY2M7CisJc3RydWN0IGRlbnRyeSAqaWRpYWdfZHJiX2FjYzsKICNlbmRpZgogCiAJLyogVXNlZCBmb3IgZGVmZXJyZWQgZnJlZWluZyBvZiBFTFMgZGF0YSBidWZmZXJzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCmluZGV4IDE3ZDc4OTMuLjhkY2JmOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCkBAIC00NTMyLDcgKzQ1MzIsNyBAQAogICoKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBscGZjX2dldF9jZmdwYXJhbSgpIHJvdXRpbmUgdG8gc2V0IHRoZQogICogbW9kdWxlIGxwZmNfbG9nX3ZlcmJvc2UgaW50byB0aGUgQHBoYmEgY2ZnX2xvZ192ZXJib3NlIGZvciB1c2Ugd2l0aAotICogbG9nIG1lc3NzYWdlIGFjY29yZGluZyB0byB0aGUgbW9kdWxlJ3MgbHBmY19sb2dfdmVyYm9zZSBwYXJhbWV0ZXIgc2V0dGluZworICogbG9nIG1lc3NhZ2UgYWNjb3JkaW5nIHRvIHRoZSBtb2R1bGUncyBscGZjX2xvZ192ZXJib3NlIHBhcmFtZXRlciBzZXR0aW5nCiAgKiBiZWZvcmUgaGJhIHBvcnQgb3IgdnBvcnQgY3JlYXRlZC4KICAqKi8KIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2JzZy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ic2cuYwppbmRleCA3N2IyODcxLi44NTNlNTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2JzZy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYnNnLmMKQEAgLTU5OCw3ICs1OTgsNyBAQAogCWRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5jbWRpb2NicSA9IGNtZGlvY2JxOwogCWRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5yc3Bpb2NicSA9IHJzcGlvY2JxOwogCWRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5zZXRfam9iID0gam9iOwotCWRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5ibXAgPSBOVUxMOzsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IuYm1wID0gTlVMTDsKIAlkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IubmRscCA9IG5kbHA7CiAKIAlpZiAocGhiYS0+Y2ZnX3BvbGwgJiBESVNBQkxFX0ZDUF9SSU5HX0lOVCkgewpAQCAtMjQyNiw2ICsyNDI2LDcgQEAKIHsKIAlzdHJ1Y3QgYnNnX2pvYl9kYXRhICpkZF9kYXRhOwogCXN0cnVjdCBmY19ic2dfam9iICpqb2I7CisJc3RydWN0IGxwZmNfbWJ4X25lbWJlZF9jbWQgKm5lbWJlZF9zZ2U7CiAJdWludDMyX3Qgc2l6ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVpbnQ4X3QgKnRvOwpAQCAtMjQ2OSw5ICsyNDcwLDggQEAKIAkJCW1lbWNweSh0bywgZnJvbSwgc2l6ZSk7CiAJCX0gZWxzZSBpZiAoKHBoYmEtPnNsaV9yZXYgPT0gTFBGQ19TTElfUkVWNCkgJiYKIAkJCShwbWJveHEtPnUubWIubWJ4Q29tbWFuZCA9PSBNQlhfU0xJNF9DT05GSUcpKSB7Ci0JCQlzdHJ1Y3QgbHBmY19tYnhfbmVtYmVkX2NtZCAqbmVtYmVkX3NnZSA9Ci0JCQkJKHN0cnVjdCBscGZjX21ieF9uZW1iZWRfY21kICopCi0JCQkJJnBtYm94cS0+dS5tYi51bi52YXJXb3Jkc1swXTsKKwkJCW5lbWJlZF9zZ2UgPSAoc3RydWN0IGxwZmNfbWJ4X25lbWJlZF9jbWQgKikKKwkJCQkJJnBtYm94cS0+dS5tYi51bi52YXJXb3Jkc1swXTsKIAogCQkJZnJvbSA9ICh1aW50OF90ICopZGRfZGF0YS0+Y29udGV4dF91bi5tYm94LmRtcC0+ZG1hLgogCQkJCQkJdmlydDsKQEAgLTI0OTYsMTYgKzI0OTYsMTggQEAKIAkJCQkJam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwKIAkJCQkJZnJvbSwgc2l6ZSk7CiAJCWpvYi0+cmVwbHktPnJlc3VsdCA9IDA7Ci0KKwkJLyogbmVlZCB0byBob2xkIHRoZSBsb2NrIHVudGlsIHdlIHNldCBqb2ItPmRkX2RhdGEgdG8gTlVMTAorCQkgKiB0byBob2xkIG9mZiB0aGUgdGltZW91dCBoYW5kbGVyIHJldHVybmluZyB0byB0aGUgbWlkLWxheWVyCisJCSAqIHdoaWxlIHdlIGFyZSBzdGlsbCBwcm9jZXNzaW5nIHRoZSBqb2IuCisJCSAqLwogCQlqb2ItPmRkX2RhdGEgPSBOVUxMOworCQlkZF9kYXRhLT5jb250ZXh0X3VuLm1ib3guc2V0X2pvYiA9IE5VTEw7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKIAkJam9iLT5qb2JfZG9uZShqb2IpOworCX0gZWxzZSB7CisJCWRkX2RhdGEtPmNvbnRleHRfdW4ubWJveC5zZXRfam9iID0gTlVMTDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOwogCX0KLQlkZF9kYXRhLT5jb250ZXh0X3VuLm1ib3guc2V0X2pvYiA9IE5VTEw7Ci0JLyogbmVlZCB0byBob2xkIHRoZSBsb2NrIHVudGlsIHdlIGNhbGwgam9iIGRvbmUgdG8gaG9sZCBvZmYKLQkgKiB0aGUgdGltZW91dCBoYW5kbGVyIHJldHVybmluZyB0byB0aGUgbWlkbGF5ZXIgd2hpbGUKLQkgKiB3ZSBhcmUgc3RpbGxwcm9jZXNzaW5nIHRoZSBqb2IKLQkgKi8KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CiAKIAlrZnJlZShkZF9kYXRhLT5jb250ZXh0X3VuLm1ib3gubWIpOwogCW1lbXBvb2xfZnJlZShkZF9kYXRhLT5jb250ZXh0X3VuLm1ib3gucG1ib3hxLCBwaGJhLT5tYm94X21lbV9wb29sKTsKQEAgLTI2NDQsNiArMjY0NiwxMSBAQAogCXN0cnVjdCB1bHBfYmRlNjQgKnJ4YnBsID0gTlVMTDsKIAlzdHJ1Y3QgZGZjX21ib3hfcmVxICptYm94X3JlcSA9IChzdHJ1Y3QgZGZjX21ib3hfcmVxICopCiAJCWpvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWQ7CisJc3RydWN0IFJFQURfRVZFTlRfTE9HX1ZBUiAqcmRFdmVudExvZzsKKwl1aW50MzJfdCB0cmFuc21pdF9sZW5ndGgsIHJlY2VpdmVfbGVuZ3RoLCBtb2RlOworCXN0cnVjdCBscGZjX21ieF9uZW1iZWRfY21kICpuZW1iZWRfc2dlOworCXN0cnVjdCBtYm94X2hlYWRlciAqaGVhZGVyOworCXN0cnVjdCB1bHBfYmRlNjQgKmJkZTsKIAl1aW50OF90ICpleHQgPSBOVUxMOwogCWludCByYyA9IDA7CiAJdWludDhfdCAqZnJvbTsKQEAgLTI2NTEsOSArMjY1OCwxNiBAQAogCS8qIGluIGNhc2Ugbm8gZGF0YSBpcyB0cmFuc2ZlcnJlZCAqLwogCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CiAKKwkvKiBzYW5pdHkgY2hlY2sgdG8gcHJvdGVjdCBkcml2ZXIgKi8KKwlpZiAoam9iLT5yZXBseV9wYXlsb2FkLnBheWxvYWRfbGVuID4gQlNHX01CT1hfU0laRSB8fAorCSAgICBqb2ItPnJlcXVlc3RfcGF5bG9hZC5wYXlsb2FkX2xlbiA+IEJTR19NQk9YX1NJWkUpIHsKKwkJcmMgPSAtRVJBTkdFOworCQlnb3RvIGpvYl9kb25lOworCX0KKwogCS8qIGNoZWNrIGlmIHJlcXVlc3RlZCBleHRlbmRlZCBkYXRhIGxlbmd0aHMgYXJlIHZhbGlkICovCi0JaWYgKChtYm94X3JlcS0+aW5FeHRXTGVuID4gTUFJTEJPWF9FWFRfU0laRSkgfHwKLQkJKG1ib3hfcmVxLT5vdXRFeHRXTGVuID4gTUFJTEJPWF9FWFRfU0laRSkpIHsKKwlpZiAoKG1ib3hfcmVxLT5pbkV4dFdMZW4gPiBCU0dfTUJPWF9TSVpFL3NpemVvZih1aW50MzJfdCkpIHx8CisJICAgIChtYm94X3JlcS0+b3V0RXh0V0xlbiA+IEJTR19NQk9YX1NJWkUvc2l6ZW9mKHVpbnQzMl90KSkpIHsKIAkJcmMgPSAtRVJBTkdFOwogCQlnb3RvIGpvYl9kb25lOwogCX0KQEAgLTI3NDQsOCArMjc1OCw4IEBACiAJICogdXNlIG91cnMKIAkgKi8KIAlpZiAocG1iLT5tYnhDb21tYW5kID09IE1CWF9SVU5fQklVX0RJQUc2NCkgewotCQl1aW50MzJfdCB0cmFuc21pdF9sZW5ndGggPSBwbWItPnVuLnZhcldvcmRzWzFdOwotCQl1aW50MzJfdCByZWNlaXZlX2xlbmd0aCA9IHBtYi0+dW4udmFyV29yZHNbNF07CisJCXRyYW5zbWl0X2xlbmd0aCA9IHBtYi0+dW4udmFyV29yZHNbMV07CisJCXJlY2VpdmVfbGVuZ3RoID0gcG1iLT51bi52YXJXb3Jkc1s0XTsKIAkJLyogdHJhbnNtaXQgbGVuZ3RoIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gcmVjZWl2ZSBsZW5ndGggb3IKIAkJICogbWFpbGJveCBleHRlbnNpb24gc2l6ZQogCQkgKi8KQEAgLTI3OTUsMTAgKzI4MDksOSBAQAogCQlmcm9tICs9IHNpemVvZihNQUlMQk9YX3QpOwogCQltZW1jcHkoKHVpbnQ4X3QgKilkbXAtPmRtYS52aXJ0LCBmcm9tLCB0cmFuc21pdF9sZW5ndGgpOwogCX0gZWxzZSBpZiAocG1iLT5tYnhDb21tYW5kID09IE1CWF9SRUFEX0VWRU5UX0xPRykgewotCQlzdHJ1Y3QgUkVBRF9FVkVOVF9MT0dfVkFSICpyZEV2ZW50TG9nID0KLQkJCSZwbWItPnVuLnZhclJkRXZlbnRMb2cgOwotCQl1aW50MzJfdCByZWNlaXZlX2xlbmd0aCA9IHJkRXZlbnRMb2ctPnJjdl9iZGU2NC50dXMuZi5iZGVTaXplOwotCQl1aW50MzJfdCBtb2RlID0JIGJmX2dldChscGZjX2V2ZW50X2xvZywgcmRFdmVudExvZyk7CisJCXJkRXZlbnRMb2cgPSAmcG1iLT51bi52YXJSZEV2ZW50TG9nOworCQlyZWNlaXZlX2xlbmd0aCA9IHJkRXZlbnRMb2ctPnJjdl9iZGU2NC50dXMuZi5iZGVTaXplOworCQltb2RlID0gYmZfZ2V0KGxwZmNfZXZlbnRfbG9nLCByZEV2ZW50TG9nKTsKIAogCQkvKiByZWNlaXZlIGxlbmd0aCBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIG1haWxib3gKIAkJICogZXh0ZW5zaW9uIHNpemUKQEAgLTI4NDMsNyArMjg1Niw3IEBACiAJCQkvKiByZWJ1aWxkIHRoZSBjb21tYW5kIGZvciBzbGk0IHVzaW5nIG91ciBvd24gYnVmZmVycwogCQkJKiBsaWtlIHdlIGRvIGZvciBiaXUgZGlhZ3MKIAkJCSovCi0JCQl1aW50MzJfdCByZWNlaXZlX2xlbmd0aCA9IHBtYi0+dW4udmFyV29yZHNbMl07CisJCQlyZWNlaXZlX2xlbmd0aCA9IHBtYi0+dW4udmFyV29yZHNbMl07CiAJCQkvKiByZWNlaXZlIGxlbmd0aCBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIG1haWxib3gKIAkJCSAqIGV4dGVuc2lvbiBzaXplCiAJCQkgKi8KQEAgLTI4NzksOCArMjg5Miw3IEBACiAJCQlwbWItPnVuLnZhcldvcmRzWzRdID0gcHV0UGFkZHJIaWdoKGRtcC0+ZG1hLnBoeXMpOwogCQl9IGVsc2UgaWYgKChwbWItPm1ieENvbW1hbmQgPT0gTUJYX1VQREFURV9DRkcpICYmCiAJCQlwbWItPnVuLnZhclVwZGF0ZUNmZy5jbykgewotCQkJc3RydWN0IHVscF9iZGU2NCAqYmRlID0KLQkJCQkoc3RydWN0IHVscF9iZGU2NCAqKSZwbWItPnVuLnZhcldvcmRzWzRdOworCQkJYmRlID0gKHN0cnVjdCB1bHBfYmRlNjQgKikmcG1iLT51bi52YXJXb3Jkc1s0XTsKIAogCQkJLyogYmRlIHNpemUgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBtYWlsYm94IGV4dCBzaXplICovCiAJCQlpZiAoYmRlLT50dXMuZi5iZGVTaXplID4gTUFJTEJPWF9FWFRfU0laRSkgewpAQCAtMjkyMSwxMCArMjkzMyw2IEBACiAJCQltZW1jcHkoKHVpbnQ4X3QgKilkbXAtPmRtYS52aXJ0LCBmcm9tLAogCQkJCWJkZS0+dHVzLmYuYmRlU2l6ZSk7CiAJCX0gZWxzZSBpZiAocG1iLT5tYnhDb21tYW5kID09IE1CWF9TTEk0X0NPTkZJRykgewotCQkJc3RydWN0IGxwZmNfbWJ4X25lbWJlZF9jbWQgKm5lbWJlZF9zZ2U7Ci0JCQlzdHJ1Y3QgbWJveF9oZWFkZXIgKmhlYWRlcjsKLQkJCXVpbnQzMl90IHJlY2VpdmVfbGVuZ3RoOwotCiAJCQkvKiByZWJ1aWxkIHRoZSBjb21tYW5kIGZvciBzbGk0IHVzaW5nIG91ciBvd24gYnVmZmVycwogCQkJKiBsaWtlIHdlIGRvIGZvciBiaXUgZGlhZ3MKIAkJCSovCkBAIC0zMzg2LDYgKzMzOTQsNyBAQAogCWpvYi0+ZGRfZGF0YSA9IE5VTEw7CiAJcmV0dXJuIHJjOwogfQorCiAvKioKICAqIGxwZmNfYnNnX2hzdF92ZW5kb3IgLSBwcm9jZXNzIGEgdmVuZG9yLXNwZWNpZmljIGZjX2JzZ19qb2IKICAqIEBqb2I6IGZjX2JzZ19qb2IgdG8gaGFuZGxlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2JzZy5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ic2cuaAppbmRleCBhMmMzM2U3Li5iNTQyYWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2JzZy5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYnNnLmgKQEAgLTEwOSwzICsxMDksMTMzIEBACiAJdWludDMyX3QgeHJpOyAvKiByZXR1cm4gdGhlIHhyaSBvZiB0aGUgaW9jYiBleGNoYW5nZSAqLwogfTsKIAorLyoKKyAqIG1hY3JvcyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGZvciBoYW5kbGluZyBzbGktY29uZmlnIG1haWxib3ggY29tbWFuZAorICogcGFzcy10aHJvdWdoIHN1cHBvcnQsIHRoaXMgaGVhZGVyIGZpbGUgaXMgc2hhcmVkIGJldHdlZW4gdXNlciBhbmQKKyAqIGtlcm5lbCBzcGFjZXMsIG5vdGUgdGhlIHNldCBvZiBtYWNyb3MgYXJlIGR1cGxpY2F0ZXMgZnJvbSBscGZjX2h3NC5oLAorICogd2l0aCBtYWNybyBuYW1lcyBwcmVmaXhlZCB3aXRoIGJzZ18sIGFzIHRoZSBtYWNyb3MgZGVmaW5lZCBpbgorICogbHBmY19odzQuaCBhcmUgbm90IGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlLgorICovCisKKy8qIE1hY3JvcyB0byBkZWFsIHdpdGggYml0IGZpZWxkcy4gRWFjaCBiaXQgZmllbGQgbXVzdCBoYXZlIDMgI2RlZmluZXMKKyAqIGFzc29jaWF0ZWQgd2l0aCBpdCAoX1NISUZULCBfTUFTSywgYW5kIF9XT1JEKS4KKyAqIEVHLiBGb3IgYSBiaXQgZmllbGQgdGhhdCBpcyBpbiB0aGUgN3RoIGJpdCBvZiB0aGUgImZpZWxkNCIgZmllbGQgb2YgYQorICogc3RydWN0dXJlIGFuZCBpcyAyIGJpdHMgaW4gc2l6ZSB0aGUgZm9sbG93aW5nICNkZWZpbmVzIG11c3QgZXhpc3Q6CisgKiAgICAgIHN0cnVjdCB0ZW1wIHsKKyAqICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICAgZmllbGQxOworICogICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgICBmaWVsZDI7CisgKiAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgIGZpZWxkMzsKKyAqICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICAgZmllbGQ0OworICogICAgICAjZGVmaW5lIGV4YW1wbGVfYml0X2ZpZWxkX1NISUZUICAgICAgICAgNworICogICAgICAjZGVmaW5lIGV4YW1wbGVfYml0X2ZpZWxkX01BU0sgICAgICAgICAgMHgwMworICogICAgICAjZGVmaW5lIGV4YW1wbGVfYml0X2ZpZWxkX1dPUkQgICAgICAgICAgZmllbGQ0CisgKiAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgIGZpZWxkNTsKKyAqICAgICAgfTsKKyAqIFRoZW4gdGhlIG1hY3JvcyBiZWxvdyBtYXkgYmUgdXNlZCB0byBnZXQgb3Igc2V0IHRoZSB2YWx1ZSBvZiB0aGF0IGZpZWxkLgorICogRUcuIFRvIGdldCB0aGUgdmFsdWUgb2YgdGhlIGJpdCBmaWVsZCBmcm9tIHRoZSBhYm92ZSBleGFtcGxlOgorICogICAgICBzdHJ1Y3QgdGVtcCB0MTsKKyAqICAgICAgdmFsdWUgPSBic2dfYmZfZ2V0KGV4YW1wbGVfYml0X2ZpZWxkLCAmdDEpOworICogQW5kIHRoZW4gdG8gc2V0IHRoYXQgYml0IGZpZWxkOgorICogICAgICBic2dfYmZfc2V0KGV4YW1wbGVfYml0X2ZpZWxkLCAmdDEsIDIpOworICogT3IgY2xlYXIgdGhhdCBiaXQgZmllbGQ6CisgKiAgICAgIGJzZ19iZl9zZXQoZXhhbXBsZV9iaXRfZmllbGQsICZ0MSwgMCk7CisgKi8KKyNkZWZpbmUgYnNnX2JmX2dldF9sZTMyKG5hbWUsIHB0cikgXAorCSgobGUzMl90b19jcHUoKHB0ciktPm5hbWUjI19XT1JEKSA+PiBuYW1lIyNfU0hJRlQpICYgbmFtZSMjX01BU0spCisjZGVmaW5lIGJzZ19iZl9nZXQobmFtZSwgcHRyKSBcCisJKCgocHRyKS0+bmFtZSMjX1dPUkQgPj4gbmFtZSMjX1NISUZUKSAmIG5hbWUjI19NQVNLKQorI2RlZmluZSBic2dfYmZfc2V0X2xlMzIobmFtZSwgcHRyLCB2YWx1ZSkgXAorCSgocHRyKS0+bmFtZSMjX1dPUkQgPSBjcHVfdG9fbGUzMigoKCgodmFsdWUpICYgXAorCW5hbWUjI19NQVNLKSA8PCBuYW1lIyNfU0hJRlQpIHwgKGxlMzJfdG9fY3B1KChwdHIpLT5uYW1lIyNfV09SRCkgJiBcCisJfihuYW1lIyNfTUFTSyA8PCBuYW1lIyNfU0hJRlQpKSkpKQorI2RlZmluZSBic2dfYmZfc2V0KG5hbWUsIHB0ciwgdmFsdWUpIFwKKwkoKHB0ciktPm5hbWUjI19XT1JEID0gKCgoKHZhbHVlKSAmIG5hbWUjI19NQVNLKSA8PCBuYW1lIyNfU0hJRlQpIHwgXAorCSgocHRyKS0+bmFtZSMjX1dPUkQgJiB+KG5hbWUjI19NQVNLIDw8IG5hbWUjI19TSElGVCkpKSkKKworLyoKKyAqIFRoZSBzbGlfY29uZmlnIHN0cnVjdHVyZSBzcGVjaWZpZWQgaGVyZSBpcyBiYXNlZCBvbiB0aGUgZm9sbG93aW5nCisgKiByZXN0cmljdGlvbjoKKyAqCisgKiAtLSBTTElfQ09ORklHIEVNQj0wLCBjYXJyeWluZyBNU0VzLCB3aWxsIGNhcnJ5IHN1YmNvbW1hbmRzIHdpdGhvdXQKKyAqICAgIGNhcnJ5aW5nIEhCRC4KKyAqIC0tIFNMSV9DT05GSUcgRU1CPTEsIG5vdCBjYXJyeWluZyBNU0UsIHdpbGwgY2Fycnkgc3ViY29tbWFuZHMgd2l0aCBvcgorICogICAgd2l0aG91dCBjYXJyeWluZyBIQkRzLgorICovCisKK3N0cnVjdCBscGZjX3NsaV9jb25maWdfbXNlIHsKKwl1aW50MzJfdCBwYV9sbzsKKwl1aW50MzJfdCBwYV9oaTsKKwl1aW50MzJfdCBidWZfbGVuOworI2RlZmluZSBscGZjX21ib3hfc2xpX2NvbmZpZ19tc2VfbGVuX1NISUZUCTAKKyNkZWZpbmUgbHBmY19tYm94X3NsaV9jb25maWdfbXNlX2xlbl9NQVNLCTB4ZmZmZmZmCisjZGVmaW5lIGxwZmNfbWJveF9zbGlfY29uZmlnX21zZV9sZW5fV09SRAlidWZfbGVuCit9OworCitzdHJ1Y3QgbHBmY19zbGlfY29uZmlnX3N1YmNtZF9oYmQgeworCXVpbnQzMl90IGJ1Zl9sZW47CisjZGVmaW5lIGxwZmNfbWJveF9zbGlfY29uZmlnX2VjbW5faGJkX2xlbl9TSElGVAkwCisjZGVmaW5lIGxwZmNfbWJveF9zbGlfY29uZmlnX2VjbW5faGJkX2xlbl9NQVNLCTB4ZmZmZmZmCisjZGVmaW5lIGxwZmNfbWJveF9zbGlfY29uZmlnX2VjbW5faGJkX2xlbl9XT1JECWJ1Zl9sZW4KKwl1aW50MzJfdCBwYV9sbzsKKwl1aW50MzJfdCBwYV9oaTsKK307CisKK3N0cnVjdCBscGZjX3NsaV9jb25maWdfaGRyIHsKKwl1aW50MzJfdCB3b3JkMTsKKyNkZWZpbmUgbHBmY19tYm94X2hkcl9lbWJfU0hJRlQJCTAKKyNkZWZpbmUgbHBmY19tYm94X2hkcl9lbWJfTUFTSwkJMHgwMDAwMDAwMQorI2RlZmluZSBscGZjX21ib3hfaGRyX2VtYl9XT1JECQl3b3JkMQorI2RlZmluZSBscGZjX21ib3hfaGRyX21zZV9jbnRfU0hJRlQJMworI2RlZmluZSBscGZjX21ib3hfaGRyX21zZV9jbnRfTUFTSwkweDAwMDAwMDFmCisjZGVmaW5lIGxwZmNfbWJveF9oZHJfbXNlX2NudF9XT1JECXdvcmQxCisJdWludDMyX3QgcGF5bG9hZF9sZW5ndGg7CisJdWludDMyX3QgdGFnX2xvOworCXVpbnQzMl90IHRhZ19oaTsKKwl1aW50MzJfdCByZXNlcnZlZDU7Cit9OworCitzdHJ1Y3QgbHBmY19zbGlfY29uZmlnX2dlbmVyaWMgeworCXN0cnVjdCBscGZjX3NsaV9jb25maWdfaGRyCXNsaV9jb25maWdfaGRyOworI2RlZmluZSBMUEZDX01CWF9TTElfQ09ORklHX01BWF9NU0UgICAgIDE5CisJc3RydWN0IGxwZmNfc2xpX2NvbmZpZ19tc2UJbXNlW0xQRkNfTUJYX1NMSV9DT05GSUdfTUFYX01TRV07Cit9OworCitzdHJ1Y3QgbHBmY19zbGlfY29uZmlnX3N1YmNtbmQgeworCXN0cnVjdCBscGZjX3NsaV9jb25maWdfaGRyCXNsaV9jb25maWdfaGRyOworCXVpbnQzMl90IHdvcmQ2OworI2RlZmluZSBscGZjX3N1YmNtbmRfb3Bjb2RlX1NISUZUCTAKKyNkZWZpbmUgbHBmY19zdWJjbW5kX29wY29kZV9NQVNLCTB4ZmYKKyNkZWZpbmUgbHBmY19zdWJjbW5kX29wY29kZV9XT1JECXdvcmQ2CisjZGVmaW5lIGxwZmNfc3ViY21uZF9zdWJzeXNfU0hJRlQJOAorI2RlZmluZSBscGZjX3N1YmNtbmRfc3Vic3lzX01BU0sJMHhmZgorI2RlZmluZSBscGZjX3N1YmNtbmRfc3Vic3lzX1dPUkQJd29yZDYKKwl1aW50MzJfdCB0aW1lb3V0OworCXVpbnQzMl90IHJlcXVlc3RfbGVuZ3RoOworCXVpbnQzMl90IHdvcmQ5OworI2RlZmluZSBscGZjX3N1YmNtbmRfdmVyc2lvbl9TSElGVAkwCisjZGVmaW5lIGxwZmNfc3ViY21uZF92ZXJzaW9uX01BU0sJMHhmZgorI2RlZmluZSBscGZjX3N1YmNtbmRfdmVyc2lvbl9XT1JECXdvcmQ5CisJdWludDMyX3Qgd29yZDEwOworI2RlZmluZSBscGZjX3N1YmNtbmRfYXNrX3JkX2xlbl9TSElGVAkwCisjZGVmaW5lIGxwZmNfc3ViY21uZF9hc2tfcmRfbGVuX01BU0sJMHhmZmZmZmYKKyNkZWZpbmUgbHBmY19zdWJjbW5kX2Fza19yZF9sZW5fV09SRAl3b3JkMTAKKwl1aW50MzJfdCByZF9vZmZzZXQ7CisJdWludDMyX3Qgb2JqX25hbWVbMjZdOworCXVpbnQzMl90IGhiZF9jb3VudDsKKyNkZWZpbmUgTFBGQ19NQlhfU0xJX0NPTkZJR19NQVhfSEJECTEwCisJc3RydWN0IGxwZmNfc2xpX2NvbmZpZ19zdWJjbWRfaGJkICAgaGJkW0xQRkNfTUJYX1NMSV9DT05GSUdfTUFYX0hCRF07Cit9OworCitzdHJ1Y3QgbHBmY19zbGlfY29uZmlnX21ib3ggeworCXVpbnQzMl90IHdvcmQwOworI2RlZmluZSBscGZjX21xZV9zdGF0dXNfU0hJRlQJCTE2CisjZGVmaW5lIGxwZmNfbXFlX3N0YXR1c19NQVNLCQkweDAwMDBGRkZGCisjZGVmaW5lIGxwZmNfbXFlX3N0YXR1c19XT1JECQl3b3JkMAorI2RlZmluZSBscGZjX21xZV9jb21tYW5kX1NISUZUCQk4CisjZGVmaW5lIGxwZmNfbXFlX2NvbW1hbmRfTUFTSwkJMHgwMDAwMDBGRgorI2RlZmluZSBscGZjX21xZV9jb21tYW5kX1dPUkQJCXdvcmQwCisJdW5pb24geworCQlzdHJ1Y3QgbHBmY19zbGlfY29uZmlnX2dlbmVyaWMJc2xpX2NvbmZpZ19nZW5lcmljOworCQlzdHJ1Y3QgbHBmY19zbGlfY29uZmlnX3N1YmNtbmQJc2xpX2NvbmZpZ19zdWJjbW5kOworCX0gdW47Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYwppbmRleCAzZDk2Nzc0Li5jOTNmY2EwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYwpAQCAtMTExOSwxNzIgKzExMTksMTQgQEAKIH0KIAogLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogaURpYWcgZGVidWdmcyBmaWxlIGFjY2VzcyBtZXRob2RzCi0gKi8KLQotLyoKLSAqIGlEaWFnIFBDSSBjb25maWcgc3BhY2UgcmVnaXN0ZXIgYWNjZXNzIG1ldGhvZHM6CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCi0gKiBUaGUgUENJIGNvbmZpZyBzcGFjZSByZWdpc3RlciBhY2Nlc3NlZXMgb2YgcmVhZCwgd3JpdGUsIHJlYWQtbW9kaWZ5LXdyaXRlCi0gKiBmb3Igc2V0IGJpdHMsIGFuZCByZWFkLW1vZGlmeS13cml0ZSBmb3IgY2xlYXIgYml0cyB0byBTTEk0IFBDSSBmdW5jdGlvbnMKLSAqIGFyZSBwcm92aWRlZC4gSW4gdGhlIHByb3BlciBTTEk0IFBDSSBmdW5jdGlvbidzIGRlYnVnZnMgaURpYWcgZGlyZWN0b3J5LAorICogQWxsIGFjY2VzcyBtZXRob2RzIGFyZSB0aHJvdWdoIHRoZSBwcm9wZXIgU0xJNCBQQ0kgZnVuY3Rpb24ncyBkZWJ1Z2ZzCisgKiBpRGlhZyBkaXJlY3Rvcnk6CiAgKgotICogICAgICAvc3lzL2tlcm5lbC9kZWJ1Zy9scGZjL2ZuPCM+L2lEaWFnCi0gKgotICogdGhlIGFjY2VzcyBpcyB0aHJvdWdoIHRoZSBkZWJ1Z2ZzIGVudHJ5IHBjaUNmZzoKLSAqCi0gKiAxLiBGb3IgUENJIGNvbmZpZyBzcGFjZSByZWdpc3RlciByZWFkIGFjY2VzcywgdGhlcmUgYXJlIHR3byByZWFkIG1ldGhvZHM6Ci0gKiAgICBBKSByZWFkIGEgc2luZ2xlIFBDSSBjb25maWcgc3BhY2UgcmVnaXN0ZXIgaW4gdGhlIHNpemUgb2YgYSBieXRlCi0gKiAgICAoOCBiaXRzKSwgYSB3b3JkICgxNiBiaXRzKSwgb3IgYSBkd29yZCAoMzIgYml0cyk7IG9yIEIpIGJyb3dzZSB0aHJvdWdoCi0gKiAgICB0aGUgNEsgZXh0ZW5kZWQgUENJIGNvbmZpZyBzcGFjZS4KLSAqCi0gKiAgICBBKSBSZWFkIGEgc2luZ2xlIFBDSSBjb25maWcgc3BhY2UgcmVnaXN0ZXIgY29uc2lzdHMgb2YgdHdvIHN0ZXBzOgotICoKLSAqICAgIFN0ZXAtMTogU2V0IHVwIFBDSSBjb25maWcgc3BhY2UgcmVnaXN0ZXIgcmVhZCBjb21tYW5kLCB0aGUgY29tbWFuZAotICogICAgc3ludGF4IGlzLAotICoKLSAqICAgICAgICBlY2hvIDEgPHdoZXJlPiA8Y291bnQ+ID4gcGNpQ2ZnCi0gKgotICogICAgd2hlcmUsIDEgaXMgdGhlIGlEaWFnIGNvbW1hbmQgZm9yIFBDSSBjb25maWcgc3BhY2UgcmVhZCwgPHdoZXJlPiBpcyB0aGUKLSAqICAgIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRldmljZSdzIFBDSSBjb25maWcgc3BhY2UgdG8gcmVhZCBmcm9tLAotICogICAgYW5kIDxjb3VudD4gaXMgdGhlIHNpemUgb2YgUENJIGNvbmZpZyBzcGFjZSByZWdpc3RlciBkYXRhIHRvIHJlYWQgYmFjaywKLSAqICAgIGl0IHdpbGwgYmUgMSBmb3IgcmVhZGluZyBhIGJ5dGUgKDggYml0cyksIDIgZm9yIHJlYWRpbmcgYSB3b3JkICgxNiBiaXRzCi0gKiAgICBvciAyIGJ5dGVzKSwgb3IgNCBmb3IgcmVhZGluZyBhIGR3b3JkICgzMiBiaXRzIG9yIDQgYnl0ZXMpLgotICoKLSAqICAgIFNldHAtMjogUGVyZm9ybSB0aGUgZGVidWdmcyByZWFkIG9wZXJhdGlvbiB0byBleGVjdXRlIHRoZSBpZGlhZyBjb21tYW5kCi0gKiAgICBzZXQgdXAgaW4gU3RlcC0xLAotICoKLSAqICAgICAgICBjYXQgcGNpQ2ZnCi0gKgotICogICAgRXhhbXBsZXM6Ci0gKiAgICBUbyByZWFkIFBDSSBkZXZpY2UncyB2ZW5kb3ItaWQgYW5kIGRldmljZS1pZCBmcm9tIFBDSSBjb25maWcgc3BhY2UsCi0gKgotICogICAgICAgIGVjaG8gMSAwIDQgPiBwY2lDZmcKLSAqICAgICAgICBjYXQgcGNpQ2ZnCi0gKgotICogICAgVG8gcmVhZCBQQ0kgZGV2aWNlJ3MgY3Vycm50IGNvbW1hbmQgZnJvbSBjb25maWcgc3BhY2UsCi0gKgotICogICAgICAgIGVjaG8gMSA0IDIgPiBwY2lDZmcKLSAqICAgICAgICBjYXQgcGNpQ2ZnCi0gKgotICogICAgQikgQnJvd3NlIHRocm91Z2ggdGhlIGVudGlyZSA0SyBleHRlbmRlZCBQQ0kgY29uZmlnIHNwYWNlIGFsc28gY29uc2lzdHMKLSAqICAgIG9mIHR3byBzdGVwczoKLSAqCi0gKiAgICBTdGVwLTE6IFNldCB1cCBQQ0kgY29uZmlnIHNwYWNlIHJlZ2lzdGVyIGJyb3dzaW5nIGNvbW1hbmQsIHRoZSBjb21tYW5kCi0gKiAgICBzeW50YXggaXMsCi0gKgotICogICAgICAgIGVjaG8gMSAwIDQwOTYgPiBwY2lDZmcKLSAqCi0gKiAgICB3aGVyZSwgMSBpcyB0aGUgaURpYWcgY29tbWFuZCBmb3IgUENJIGNvbmZpZyBzcGFjZSByZWFkLCAwIG11c3QgYmUgdXNlZAotICogICAgYXMgdGhlIG9mZnNldCBmb3IgUENJIGNvbmZpZyBzcGFjZSByZWdpc3RlciBicm93c2UsIGFuZCA0MDk2IG11c3QgYmUKLSAqICAgIHVzZWQgYXMgdGhlIGNvdW50IGZvciBQQ0kgY29uZmlnIHNwYWNlIHJlZ2lzdGVyIGJyb3dzZS4KLSAqCi0gKiAgICBTdGVwLTI6IFJlcGVhdGVseSBpc3N1ZSB0aGUgZGVidWdmcyByZWFkIG9wZXJhdGlvbiB0byBicm93c2UgdGhyb3VnaAotICogICAgdGhlIGVudGlyZSBQQ0kgY29uZmlnIHNwYWNlIHJlZ2lzdGVyczoKLSAqCi0gKiAgICAgICAgY2F0IHBjaUNmZwotICogICAgICAgIGNhdCBwY2lDZmcKLSAqICAgICAgICBjYXQgcGNpQ2ZnCi0gKiAgICAgICAgLi4uCi0gKgotICogICAgV2hlbiBicm93c2luZyB0byB0aGUgZW5kIG9mIHRoZSA0SyBQQ0kgY29uZmlnIHNwYWNlLCB0aGUgYnJvd3NlIG1ldGhvZAotICogICAgc2hhbGwgd3JhcCBhcm91bmQgdG8gc3RhcnQgcmVhZGluZyBmcm9tIGJlZ2lubmluZyBhZ2FpbiwgYW5kIGFnYWluLi4uCi0gKgotICogMi4gRm9yIFBDSSBjb25maWcgc3BhY2UgcmVnaXN0ZXIgd3JpdGUgYWNjZXNzLCBpdCBzdXBwb3J0cyBhIHNpbmdsZSBQQ0kKLSAqICAgIGNvbmZpZyBzcGFjZSByZWdpc3RlciB3cml0ZSBpbiB0aGUgc2l6ZSBvZiBhIGJ5dGUgKDggYml0cyksIGEgd29yZAotICogICAgKDE2IGJpdHMpLCBvciBhIGR3b3JkICgzMiBiaXRzKS4gVGhlIGNvbW1hbmQgc3ludGF4IGlzLAotICoKLSAqICAgICAgICBlY2hvIDIgPHdoZXJlPiA8Y291bnQ+IDx2YWx1ZT4gPiBwY2lDZmcKLSAqCi0gKiAgICB3aGVyZSwgMiBpcyB0aGUgaURpYWcgY29tbWFuZCBmb3IgUENJIGNvbmZpZyBzcGFjZSB3cml0ZSwgPHdoZXJlPiBpcwotICogICAgdGhlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRldmljZSdzIFBDSSBjb25maWcgc3BhY2UgdG8gd3JpdGUKLSAqICAgIGludG8sIDxjb3VudD4gaXMgdGhlIHNpemUgb2YgZGF0YSB0byB3cml0ZSBpbnRvIHRoZSBQQ0kgY29uZmlnIHNwYWNlLAotICogICAgaXQgd2lsbCBiZSAxIGZvciB3cml0aW5nIGEgYnl0ZSAoOCBiaXRzKSwgMiBmb3Igd3JpdGluZyBhIHdvcmQgKDE2IGJpdHMKLSAqICAgIG9yIDIgYnl0ZXMpLCBvciA0IGZvciB3cml0aW5nIGEgZHdvcmQgKDMyIGJpdHMgb3IgNCBieXRlcyksIGFuZCA8dmFsdWU+Ci0gKiAgICBpcyB0aGUgZGF0YSB0byBiZSB3cml0dGVuIGludG8gdGhlIFBDSSBjb25maWcgc3BhY2UgcmVnaXN0ZXIgYXQgdGhlCi0gKiAgICBvZmZzZXQuCi0gKgotICogICAgRXhhbXBsZXM6Ci0gKiAgICBUbyBkaXNhYmxlIFBDSSBkZXZpY2UncyBpbnRlcnJ1cHQgYXNzZXJ0aW9uLAotICoKLSAqICAgIDEpIFJlYWQgaW4gZGV2aWNlJ3MgUENJIGNvbmZpZyBzcGFjZSByZWdpc3RlciBjb21tYW5kIGZpZWxkIDxjbWQ+OgotICoKLSAqICAgICAgICAgICBlY2hvIDEgNCAyID4gcGNpQ2ZnCi0gKiAgICAgICAgICAgY2F0IHBjaUNmZwotICoKLSAqICAgIDIpIFNldCBiaXQgMTAgKEludGVycnVwdCBEaXNhYmxlIGJpdCkgaW4gdGhlIDxjbWQ+OgotICoKLSAqICAgICAgICAgICA8Y21kPiA9IDxjbWQ+IHwgKDEgPCAxMCkKLSAqCi0gKiAgICAzKSBXcml0ZSB0aGUgbW9kaWZpZWQgY29tbWFuZCBiYWNrOgotICoKLSAqICAgICAgICAgICBlY2hvIDIgNCAyIDxjbWQ+ID4gcGNpQ2ZnCi0gKgotICogMy4gRm9yIFBDSSBjb25maWcgc3BhY2UgcmVnaXN0ZXIgc2V0IGJpdHMgYWNjZXNzLCBpdCBzdXBwb3J0cyBhIHNpbmdsZSBQQ0kKLSAqICAgIGNvbmZpZyBzcGFjZSByZWdpc3RlciBzZXQgYml0cyBpbiB0aGUgc2l6ZSBvZiBhIGJ5dGUgKDggYml0cyksIGEgd29yZAotICogICAgKDE2IGJpdHMpLCBvciBhIGR3b3JkICgzMiBiaXRzKS4gVGhlIGNvbW1hbmQgc3ludGF4IGlzLAotICoKLSAqICAgICAgICBlY2hvIDMgPHdoZXJlPiA8Y291bnQ+IDxiaXRtYXNrPiA+IHBjaUNmZwotICoKLSAqICAgIHdoZXJlLCAzIGlzIHRoZSBpRGlhZyBjb21tYW5kIGZvciBQQ0kgY29uZmlnIHNwYWNlIHNldCBiaXRzLCA8d2hlcmU+IGlzCi0gKiAgICB0aGUgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZGV2aWNlJ3MgUENJIGNvbmZpZyBzcGFjZSB0byBzZXQKLSAqICAgIGJpdHMgaW50bywgPGNvdW50PiBpcyB0aGUgc2l6ZSBvZiB0aGUgYml0bWFzayB0byBzZXQgaW50byB0aGUgUENJIGNvbmZpZwotICogICAgc3BhY2UsIGl0IHdpbGwgYmUgMSBmb3Igc2V0dGluZyBhIGJ5dGUgKDggYml0cyksIDIgZm9yIHNldHRpbmcgYSB3b3JkCi0gKiAgICAoMTYgYml0cyBvciAyIGJ5dGVzKSwgb3IgNCBmb3Igc2V0dGluZyBhIGR3b3JkICgzMiBiaXRzIG9yIDQgYnl0ZXMpLCBhbmQKLSAqICAgIDxiaXRtYXNrPiBpcyB0aGUgYml0bWFzaywgaW5kaWNhdGluZyB0aGUgYml0cyB0byBiZSBzZXQgaW50byB0aGUgUENJCi0gKiAgICBjb25maWcgc3BhY2UgcmVnaXN0ZXIgYXQgdGhlIG9mZnNldC4gVGhlIGxvZ2ljIHBlcmZvcm1lZCB0byB0aGUgY29udGVudAotICogICAgb2YgdGhlIFBDSSBjb25maWcgc3BhY2UgcmVnaXN0ZXIsIHJlZ3ZhbCwgaXMsCi0gKgotICogICAgICAgIHJlZ3ZhbCB8PSA8Yml0bWFzaz4KLSAqCi0gKiA0LiBGb3IgUENJIGNvbmZpZyBzcGFjZSByZWdpc3RlciBjbGVhciBiaXRzIGFjY2VzcywgaXQgc3VwcG9ydHMgYSBzaW5nbGUKLSAqICAgIFBDSSBjb25maWcgc3BhY2UgcmVnaXN0ZXIgY2xlYXIgYml0cyBpbiB0aGUgc2l6ZSBvZiBhIGJ5dGUgKDggYml0cyksCi0gKiAgICBhIHdvcmQgKDE2IGJpdHMpLCBvciBhIGR3b3JkICgzMiBiaXRzKS4gVGhlIGNvbW1hbmQgc3ludGF4IGlzLAotICoKLSAqICAgICAgICBlY2hvIDQgPHdoZXJlPiA8Y291bnQ+IDxiaXRtYXNrPiA+IHBjaUNmZwotICoKLSAqICAgIHdoZXJlLCA0IGlzIHRoZSBpRGlhZyBjb21tYW5kIGZvciBQQ0kgY29uZmlnIHNwYWNlIGNsZWFyIGJpdHMsIDx3aGVyZT4KLSAqICAgIGlzIHRoZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkZXZpY2UncyBQQ0kgY29uZmlnIHNwYWNlIHRvCi0gKiAgICBjbGVhciBiaXRzIGZyb20sIDxjb3VudD4gaXMgdGhlIHNpemUgb2YgdGhlIGJpdG1hc2sgdG8gc2V0IGludG8gdGhlIFBDSQotICogICAgY29uZmlnIHNwYWNlLCBpdCB3aWxsIGJlIDEgZm9yIHNldHRpbmcgYSBieXRlICg4IGJpdHMpLCAyIGZvciBzZXR0aW5nCi0gKiAgICBhIHdvcmQoMTYgYml0cyBvciAyIGJ5dGVzKSwgb3IgNCBmb3Igc2V0dGluZyBhIGR3b3JkICgzMiBiaXRzIG9yIDQKLSAqICAgIGJ5dGVzKSwgYW5kIDxiaXRtYXNrPiBpcyB0aGUgYml0bWFzaywgaW5kaWNhdGluZyB0aGUgYml0cyB0byBiZSBjbGVhcmVkCi0gKiAgICBmcm9tIHRoZSBQQ0kgY29uZmlnIHNwYWNlIHJlZ2lzdGVyIGF0IHRoZSBvZmZzZXQuIHRoZSBsb2dpYyBwZXJmb3JtZWQKLSAqICAgIHRvIHRoZSBjb250ZW50IG9mIHRoZSBQQ0kgY29uZmlnIHNwYWNlIHJlZ2lzdGVyLCByZWd2YWwsIGlzLAotICoKLSAqICAgICAgICByZWd2YWwgJj0gfjxiaXRtYXNrPgotICoKLSAqIE5vdGUsIGZvciBhbGwgc2luZ2xlIHJlZ2lzdGVyIHJlYWQsIHdyaXRlLCBzZXQgYml0cywgb3IgY2xlYXIgYml0cyBhY2Nlc3MsCi0gKiB0aGUgb2Zmc2V0ICg8d2hlcmU+KSBtdXN0IGJlIGFsaWduZWQgd2l0aCB0aGUgc2l6ZSBvZiB0aGUgZGF0YToKLSAqCi0gKiBGb3IgZGF0YSBzaXplIG9mIGJ5dGUgKDggYml0cyksIHRoZSBvZmZzZXQgbXVzdCBiZSBhbGlnbmVkIHRvIHRoZSBieXRlCi0gKiBib3VuZGFyeTsgZm9yIGRhdGEgc2l6ZSBvZiB3b3JkICgxNiBiaXRzKSwgdGhlIG9mZnNldCBtdXN0IGJlIGFsaWduZWQKLSAqIHRvIHRoZSB3b3JkIGJvdW5kYXJ5OyB3aGlsZSBmb3IgZGF0YSBzaXplIG9mIGR3b3JkICgzMiBiaXRzKSwgdGhlIG9mZnNldAotICogbXVzdCBiZSBhbGlnbmVkIHRvIHRoZSBkd29yZCBib3VuZGFyeS4gT3RoZXJ3aXNlLCB0aGUgaW50ZXJmYWNlIHdpbGwKLSAqIHJldHVybiB0aGUgZXJyb3I6Ci0gKgotICogICAgICItYmFzaDogZWNobzogd3JpdGUgZXJyb3I6IEludmFsaWQgYXJndW1lbnQiLgotICoKLSAqIEZvciBleGFtcGxlOgotICoKLSAqICAgICBlY2hvIDEgMiA0ID4gcGNpQ2ZnCi0gKiAgICAgLWJhc2g6IGVjaG86IHdyaXRlIGVycm9yOiBJbnZhbGlkIGFyZ3VtZW50Ci0gKgotICogTm90ZSBhbHNvLCBhbGwgb2YgdGhlIG51bWJlcnMgaW4gdGhlIGNvbW1hbmQgZmllbGRzIGZvciBhbGwgcmVhZCwgd3JpdGUsCi0gKiBzZXQgYml0cywgYW5kIGNsZWFyIGJpdHMgUENJIGNvbmZpZyBzcGFjZSByZWdpc3RlciBjb21tYW5kIGZpZWxkcyBjYW4gYmUKLSAqIGVpdGhlciBkZWNpbWFsIG9yIGhleC4KLSAqCi0gKiBGb3IgZXhhbXBsZSwKLSAqICAgICBlY2hvIDEgMCA0MDk2ID4gcGNpQ2ZnCi0gKgotICogd2lsbCBiZSB0aGUgc2FtZSBhcwotICogICAgIGVjaG8gMSAwIDB4MTAwMCA+IHBjaUNmZwotICoKLSAqIEFuZCwKLSAqICAgICBlY2hvIDIgMTU1IDEgMTAgPiBwY2lDZmcKLSAqCi0gKiB3aWxsIGJlCi0gKiAgICAgZWNobyAyIDB4OWIgMSAweGEgPiBwY2lDZmcKKyAqICAgICAvc3lzL2tlcm5lbC9kZWJ1Zy9scGZjL2ZuPCM+L2lEaWFnCiAgKi8KIAogLyoqCkBAIC0xMzMxLDEwICsxMTczLDEwIEBACiAJZm9yIChpID0gMDsgaSA8IExQRkNfSURJQUdfQ01EX0RBVEFfU0laRTsgaSsrKSB7CiAJCXN0ZXBfc3RyID0gc3Ryc2VwKCZwYnVmLCAiXHQgIik7CiAJCWlmICghc3RlcF9zdHIpCi0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBpOwogCQlpZGlhZ19jbWQtPmRhdGFbaV0gPSBzaW1wbGVfc3RydG9sKHN0ZXBfc3RyLCBOVUxMLCAwKTsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGk7CiB9CiAKIC8qKgpAQCAtMTQwMyw3ICsxMjQ1LDcgQEAKICAqIERlc2NyaXB0aW9uOgogICogVGhpcyByb3V0aW5lIGZyZWVzIHRoZSBidWZmZXIgdGhhdCB3YXMgYWxsb2NhdGVkIHdoZW4gdGhlIGRlYnVnZnMgZmlsZQogICogd2FzIG9wZW5lZC4gSXQgYWxzbyByZXNldCB0aGUgZmllbGRzIGluIHRoZSBpZGlhZyBjb21tYW5kIHN0cnVjdCBpbiB0aGUKLSAqIGNhc2UgdGhlIGNvbW1hbmQgaXMgbm90IGNvbnRpbnVvdXMgYnJvd3Npbmcgb2YgdGhlIGRhdGEgc3RydWN0dXJlLgorICogY2FzZSBvZiBjb21tYW5kIGZvciB3cml0ZSBvcGVyYXRpb24uCiAgKgogICogUmV0dXJuczoKICAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB6ZXJvLgpAQCAtMTQxMywxOCArMTI1NSwyMCBAQAogewogCXN0cnVjdCBscGZjX2RlYnVnICpkZWJ1ZyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAotCS8qIFJlYWQgUENJIGNvbmZpZyByZWdpc3RlciwgaWYgbm90IHJlYWQgYWxsLCBjbGVhciBjb21tYW5kIGZpZWxkcyAqLwotCWlmICgoZGVidWctPm9wID09IExQRkNfSURJQUdfT1BfUkQpICYmCi0JICAgIChpZGlhZy5jbWQub3Bjb2RlID09IExQRkNfSURJQUdfQ01EX1BDSUNGR19SRCkpCi0JCWlmICgoaWRpYWcuY21kLmRhdGFbMV0gPT0gc2l6ZW9mKHVpbnQ4X3QpKSB8fAotCQkgICAgKGlkaWFnLmNtZC5kYXRhWzFdID09IHNpemVvZih1aW50MTZfdCkpIHx8Ci0JCSAgICAoaWRpYWcuY21kLmRhdGFbMV0gPT0gc2l6ZW9mKHVpbnQzMl90KSkpCisJaWYgKGRlYnVnLT5vcCA9PSBMUEZDX0lESUFHX09QX1dSKSB7CisJCXN3aXRjaCAoaWRpYWcuY21kLm9wY29kZSkgeworCQljYXNlIExQRkNfSURJQUdfQ01EX1BDSUNGR19XUjoKKwkJY2FzZSBMUEZDX0lESUFHX0NNRF9QQ0lDRkdfU1Q6CisJCWNhc2UgTFBGQ19JRElBR19DTURfUENJQ0ZHX0NMOgorCQljYXNlIExQRkNfSURJQUdfQ01EX1FVRUFDQ19XUjoKKwkJY2FzZSBMUEZDX0lESUFHX0NNRF9RVUVBQ0NfU1Q6CisJCWNhc2UgTFBGQ19JRElBR19DTURfUVVFQUNDX0NMOgogCQkJbWVtc2V0KCZpZGlhZywgMCwgc2l6ZW9mKGlkaWFnKSk7Ci0KLQkvKiBXcml0ZSBQQ0kgY29uZmlnIHJlZ2lzdGVyLCBjbGVhciBjb21tYW5kIGZpZWxkcyAqLwotCWlmICgoZGVidWctPm9wID09IExQRkNfSURJQUdfT1BfV1IpICYmCi0JICAgIChpZGlhZy5jbWQub3Bjb2RlID09IExQRkNfSURJQUdfQ01EX1BDSUNGR19XUikpCi0JCW1lbXNldCgmaWRpYWcsIDAsIHNpemVvZihpZGlhZykpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KIAogCS8qIEZyZWUgdGhlIGJ1ZmZlcnMgdG8gdGhlIGZpbGUgb3BlcmF0aW9uICovCiAJa2ZyZWUoZGVidWctPmJ1ZmZlcik7CkBAIC0xNTA0LDcgKzEzNDgsNyBAQAogCQlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfUENJX0NGR19TSVpFLWxlbiwKIAkJCQkiJTAzeDogJTA4eFxuIiwgd2hlcmUsIHUzMnZhbCk7CiAJCWJyZWFrOwotCWNhc2UgTFBGQ19QQ0lfQ0ZHX1NJWkU6IC8qIGJyb3dzZSBhbGwgKi8KKwljYXNlIExQRkNfUENJX0NGR19CUk9XU0U6IC8qIGJyb3dzZSBhbGwgKi8KIAkJZ290byBwY2ljZmdfYnJvd3NlOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTU4NiwxNiArMTQzMCwyMSBAQAogCWRlYnVnLT5vcCA9IExQRkNfSURJQUdfT1BfV1I7CiAKIAlyYyA9IGxwZmNfaWRpYWdfY21kX2dldChidWYsIG5ieXRlcywgJmlkaWFnLmNtZCk7Ci0JaWYgKHJjKQorCWlmIChyYyA8IDApCiAJCXJldHVybiByYzsKIAogCWlmIChpZGlhZy5jbWQub3Bjb2RlID09IExQRkNfSURJQUdfQ01EX1BDSUNGR19SRCkgeworCQkvKiBTYW5pdHkgY2hlY2sgb24gUENJIGNvbmZpZyByZWFkIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgKi8KKwkJaWYgKHJjICE9IExQRkNfUENJX0NGR19SRF9DTURfQVJHKQorCQkJZ290byBlcnJvcl9vdXQ7CiAJCS8qIFJlYWQgY29tbWFuZCBmcm9tIFBDSSBjb25maWcgc3BhY2UsIHNldCB1cCBjb21tYW5kIGZpZWxkcyAqLwogCQl3aGVyZSA9IGlkaWFnLmNtZC5kYXRhWzBdOwogCQljb3VudCA9IGlkaWFnLmNtZC5kYXRhWzFdOwotCQlpZiAoY291bnQgPT0gTFBGQ19QQ0lfQ0ZHX1NJWkUpIHsKLQkJCWlmICh3aGVyZSAhPSAwKQorCQlpZiAoY291bnQgPT0gTFBGQ19QQ0lfQ0ZHX0JST1dTRSkgeworCQkJaWYgKHdoZXJlICUgc2l6ZW9mKHVpbnQzMl90KSkKIAkJCQlnb3RvIGVycm9yX291dDsKKwkJCS8qIFN0YXJ0aW5nIG9mZnNldCB0byBicm93c2UgKi8KKwkJCWlkaWFnLm9mZnNldC5sYXN0X3JkID0gd2hlcmU7CiAJCX0gZWxzZSBpZiAoKGNvdW50ICE9IHNpemVvZih1aW50OF90KSkgJiYKIAkJCSAgIChjb3VudCAhPSBzaXplb2YodWludDE2X3QpKSAmJgogCQkJICAgKGNvdW50ICE9IHNpemVvZih1aW50MzJfdCkpKQpAQCAtMTYyMSw2ICsxNDcwLDkgQEAKIAl9IGVsc2UgaWYgKGlkaWFnLmNtZC5vcGNvZGUgPT0gTFBGQ19JRElBR19DTURfUENJQ0ZHX1dSIHx8CiAJCSAgIGlkaWFnLmNtZC5vcGNvZGUgPT0gTFBGQ19JRElBR19DTURfUENJQ0ZHX1NUIHx8CiAJCSAgIGlkaWFnLmNtZC5vcGNvZGUgPT0gTFBGQ19JRElBR19DTURfUENJQ0ZHX0NMKSB7CisJCS8qIFNhbml0eSBjaGVjayBvbiBQQ0kgY29uZmlnIHdyaXRlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgKi8KKwkJaWYgKHJjICE9IExQRkNfUENJX0NGR19XUl9DTURfQVJHKQorCQkJZ290byBlcnJvcl9vdXQ7CiAJCS8qIFdyaXRlIGNvbW1hbmQgdG8gUENJIGNvbmZpZyBzcGFjZSwgcmVhZC1tb2RpZnktd3JpdGUgKi8KIAkJd2hlcmUgPSBpZGlhZy5jbWQuZGF0YVswXTsKIAkJY291bnQgPSBpZGlhZy5jbWQuZGF0YVsxXTsKQEAgLTE3NTMsMTAgKzE2MDUsMTIgQEAKIAlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfUVVFX0lORk9fR0VUX0JVRl9TSVpFLWxlbiwKIAkJCSJTbG93LXBhdGggRVEgaW5mb3JtYXRpb246XG4iKTsKIAlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfUVVFX0lORk9fR0VUX0JVRl9TSVpFLWxlbiwKLQkJCSJcdElEIFslMDJkXSwgRVFFLUNPVU5UIFslMDRkXSwgIgotCQkJIkhPU1QtSU5ERVggWyUwNHhdLCBQT1JULUlOREVYIFslMDR4XVxuXG4iLAorCQkJIlx0RVFJRFslMDJkXSwgIgorCQkJIlFFLUNPVU5UWyUwNGRdLCBRRS1TSVpFWyUwNGRdLCAiCisJCQkiSE9TVC1JTkRFWFslMDRkXSwgUE9SVC1JTkRFWFslMDRkXVxuXG4iLAogCQkJcGhiYS0+c2xpNF9oYmEuc3BfZXEtPnF1ZXVlX2lkLAogCQkJcGhiYS0+c2xpNF9oYmEuc3BfZXEtPmVudHJ5X2NvdW50LAorCQkJcGhiYS0+c2xpNF9oYmEuc3BfZXEtPmVudHJ5X3NpemUsCiAJCQlwaGJhLT5zbGk0X2hiYS5zcF9lcS0+aG9zdF9pbmRleCwKIAkJCXBoYmEtPnNsaTRfaGJhLnNwX2VxLT5oYmFfaW5kZXgpOwogCkBAIC0xNzY1LDEwICsxNjE5LDEyIEBACiAJCQkiRmFzdC1wYXRoIEVRIGluZm9ybWF0aW9uOlxuIik7CiAJZm9yIChmY3BfcWlkeCA9IDA7IGZjcF9xaWR4IDwgcGhiYS0+Y2ZnX2ZjcF9lcV9jb3VudDsgZmNwX3FpZHgrKykgewogCQlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfUVVFX0lORk9fR0VUX0JVRl9TSVpFLWxlbiwKLQkJCQkiXHRJRCBbJTAyZF0sIEVRRS1DT1VOVCBbJTA0ZF0sICIKLQkJCQkiSE9TVC1JTkRFWCBbJTA0eF0sIFBPUlQtSU5ERVggWyUwNHhdXG4iLAorCQkJCSJcdEVRSURbJTAyZF0sICIKKwkJCQkiUUUtQ09VTlRbJTA0ZF0sIFFFLVNJWkVbJTA0ZF0sICIKKwkJCQkiSE9TVC1JTkRFWFslMDRkXSwgUE9SVC1JTkRFWFslMDRkXVxuIiwKIAkJCQlwaGJhLT5zbGk0X2hiYS5mcF9lcVtmY3BfcWlkeF0tPnF1ZXVlX2lkLAogCQkJCXBoYmEtPnNsaTRfaGJhLmZwX2VxW2ZjcF9xaWR4XS0+ZW50cnlfY291bnQsCisJCQkJcGhiYS0+c2xpNF9oYmEuZnBfZXFbZmNwX3FpZHhdLT5lbnRyeV9zaXplLAogCQkJCXBoYmEtPnNsaTRfaGJhLmZwX2VxW2ZjcF9xaWR4XS0+aG9zdF9pbmRleCwKIAkJCQlwaGJhLT5zbGk0X2hiYS5mcF9lcVtmY3BfcWlkeF0tPmhiYV9pbmRleCk7CiAJfQpAQCAtMTc3Niw4OSArMTYzMiwxMDEgQEAKIAogCS8qIEdldCBtYWlsYm94IGNvbXBsZXRlIHF1ZXVlIGluZm9ybWF0aW9uICovCiAJbGVuICs9IHNucHJpbnRmKHBidWZmZXIrbGVuLCBMUEZDX1FVRV9JTkZPX0dFVF9CVUZfU0laRS1sZW4sCi0JCQkiTWFpbGJveCBDUSBpbmZvcm1hdGlvbjpcbiIpOworCQkJIlNsb3ctcGF0aCBNQlggQ1EgaW5mb3JtYXRpb246XG4iKTsKIAlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfUVVFX0lORk9fR0VUX0JVRl9TSVpFLWxlbiwKLQkJCSJcdFx0QXNzb2NpYXRlZCBFUS1JRCBbJTAyZF06XG4iLAorCQkJIkFzc29jaWF0ZWQgRVFJRFslMDJkXTpcbiIsCiAJCQlwaGJhLT5zbGk0X2hiYS5tYnhfY3EtPmFzc29jX3FpZCk7CiAJbGVuICs9IHNucHJpbnRmKHBidWZmZXIrbGVuLCBMUEZDX1FVRV9JTkZPX0dFVF9CVUZfU0laRS1sZW4sCi0JCQkiXHRJRCBbJTAyZF0sIENRRS1DT1VOVCBbJTA0ZF0sICIKLQkJCSJIT1NULUlOREVYIFslMDR4XSwgUE9SVC1JTkRFWCBbJTA0eF1cblxuIiwKKwkJCSJcdENRSURbJTAyZF0sICIKKwkJCSJRRS1DT1VOVFslMDRkXSwgUUUtU0laRVslMDRkXSwgIgorCQkJIkhPU1QtSU5ERVhbJTA0ZF0sIFBPUlQtSU5ERVhbJTA0ZF1cblxuIiwKIAkJCXBoYmEtPnNsaTRfaGJhLm1ieF9jcS0+cXVldWVfaWQsCiAJCQlwaGJhLT5zbGk0X2hiYS5tYnhfY3EtPmVudHJ5X2NvdW50LAorCQkJcGhiYS0+c2xpNF9oYmEubWJ4X2NxLT5lbnRyeV9zaXplLAogCQkJcGhiYS0+c2xpNF9oYmEubWJ4X2NxLT5ob3N0X2luZGV4LAogCQkJcGhiYS0+c2xpNF9oYmEubWJ4X2NxLT5oYmFfaW5kZXgpOwogCiAJLyogR2V0IHNsb3ctcGF0aCBjb21wbGV0ZSBxdWV1ZSBpbmZvcm1hdGlvbiAqLwogCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19RVUVfSU5GT19HRVRfQlVGX1NJWkUtbGVuLAotCQkJIlNsb3ctcGF0aCBDUSBpbmZvcm1hdGlvbjpcbiIpOworCQkJIlNsb3ctcGF0aCBFTFMgQ1EgaW5mb3JtYXRpb246XG4iKTsKIAlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfUVVFX0lORk9fR0VUX0JVRl9TSVpFLWxlbiwKLQkJCSJcdFx0QXNzb2NpYXRlZCBFUS1JRCBbJTAyZF06XG4iLAorCQkJIkFzc29jaWF0ZWQgRVFJRFslMDJkXTpcbiIsCiAJCQlwaGJhLT5zbGk0X2hiYS5lbHNfY3EtPmFzc29jX3FpZCk7CiAJbGVuICs9IHNucHJpbnRmKHBidWZmZXIrbGVuLCBMUEZDX1FVRV9JTkZPX0dFVF9CVUZfU0laRS1sZW4sCi0JCQkiXHRJRCBbJTAyZF0sIENRRS1DT1VOVCBbJTA0ZF0sICIKLQkJCSJIT1NULUlOREVYIFslMDR4XSwgUE9SVC1JTkRFWCBbJTA0eF1cblxuIiwKKwkJCSJcdENRSUQgWyUwMmRdLCAiCisJCQkiUUUtQ09VTlRbJTA0ZF0sIFFFLVNJWkVbJTA0ZF0sICIKKwkJCSJIT1NULUlOREVYWyUwNGRdLCBQT1JULUlOREVYWyUwNGRdXG5cbiIsCiAJCQlwaGJhLT5zbGk0X2hiYS5lbHNfY3EtPnF1ZXVlX2lkLAogCQkJcGhiYS0+c2xpNF9oYmEuZWxzX2NxLT5lbnRyeV9jb3VudCwKKwkJCXBoYmEtPnNsaTRfaGJhLmVsc19jcS0+ZW50cnlfc2l6ZSwKIAkJCXBoYmEtPnNsaTRfaGJhLmVsc19jcS0+aG9zdF9pbmRleCwKIAkJCXBoYmEtPnNsaTRfaGJhLmVsc19jcS0+aGJhX2luZGV4KTsKIAogCS8qIEdldCBmYXN0LXBhdGggY29tcGxldGUgcXVldWUgaW5mb3JtYXRpb24gKi8KIAlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfUVVFX0lORk9fR0VUX0JVRl9TSVpFLWxlbiwKLQkJCSJGYXN0LXBhdGggQ1EgaW5mb3JtYXRpb246XG4iKTsKKwkJCSJGYXN0LXBhdGggRkNQIENRIGluZm9ybWF0aW9uOlxuIik7CiAJZm9yIChmY3BfcWlkeCA9IDA7IGZjcF9xaWR4IDwgcGhiYS0+Y2ZnX2ZjcF9lcV9jb3VudDsgZmNwX3FpZHgrKykgewogCQlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfUVVFX0lORk9fR0VUX0JVRl9TSVpFLWxlbiwKLQkJCQkiXHRcdEFzc29jaWF0ZWQgRVEtSUQgWyUwMmRdOlxuIiwKKwkJCQkiQXNzb2NpYXRlZCBFUUlEWyUwMmRdOlxuIiwKIAkJCQlwaGJhLT5zbGk0X2hiYS5mY3BfY3FbZmNwX3FpZHhdLT5hc3NvY19xaWQpOwogCQlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfUVVFX0lORk9fR0VUX0JVRl9TSVpFLWxlbiwKLQkJIlx0SUQgWyUwMmRdLCBFUUUtQ09VTlQgWyUwNGRdLCAiCi0JCSJIT1NULUlOREVYIFslMDR4XSwgUE9SVC1JTkRFWCBbJTA0eF1cbiIsCi0JCXBoYmEtPnNsaTRfaGJhLmZjcF9jcVtmY3BfcWlkeF0tPnF1ZXVlX2lkLAotCQlwaGJhLT5zbGk0X2hiYS5mY3BfY3FbZmNwX3FpZHhdLT5lbnRyeV9jb3VudCwKLQkJcGhiYS0+c2xpNF9oYmEuZmNwX2NxW2ZjcF9xaWR4XS0+aG9zdF9pbmRleCwKLQkJcGhiYS0+c2xpNF9oYmEuZmNwX2NxW2ZjcF9xaWR4XS0+aGJhX2luZGV4KTsKKwkJCQkiXHRDUUlEWyUwMmRdLCAiCisJCQkJIlFFLUNPVU5UWyUwNGRdLCBRRS1TSVpFWyUwNGRdLCAiCisJCQkJIkhPU1QtSU5ERVhbJTA0ZF0sIFBPUlQtSU5ERVhbJTA0ZF1cbiIsCisJCQkJcGhiYS0+c2xpNF9oYmEuZmNwX2NxW2ZjcF9xaWR4XS0+cXVldWVfaWQsCisJCQkJcGhiYS0+c2xpNF9oYmEuZmNwX2NxW2ZjcF9xaWR4XS0+ZW50cnlfY291bnQsCisJCQkJcGhiYS0+c2xpNF9oYmEuZmNwX2NxW2ZjcF9xaWR4XS0+ZW50cnlfc2l6ZSwKKwkJCQlwaGJhLT5zbGk0X2hiYS5mY3BfY3FbZmNwX3FpZHhdLT5ob3N0X2luZGV4LAorCQkJCXBoYmEtPnNsaTRfaGJhLmZjcF9jcVtmY3BfcWlkeF0tPmhiYV9pbmRleCk7CiAJfQogCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19RVUVfSU5GT19HRVRfQlVGX1NJWkUtbGVuLCAiXG4iKTsKIAogCS8qIEdldCBtYWlsYm94IHF1ZXVlIGluZm9ybWF0aW9uICovCiAJbGVuICs9IHNucHJpbnRmKHBidWZmZXIrbGVuLCBMUEZDX1FVRV9JTkZPX0dFVF9CVUZfU0laRS1sZW4sCi0JCQkiTWFpbGJveCBNUSBpbmZvcm1hdGlvbjpcbiIpOworCQkJIlNsb3ctcGF0aCBNQlggTVEgaW5mb3JtYXRpb246XG4iKTsKIAlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfUVVFX0lORk9fR0VUX0JVRl9TSVpFLWxlbiwKLQkJCSJcdFx0QXNzb2NpYXRlZCBDUS1JRCBbJTAyZF06XG4iLAorCQkJIkFzc29jaWF0ZWQgQ1FJRFslMDJkXTpcbiIsCiAJCQlwaGJhLT5zbGk0X2hiYS5tYnhfd3EtPmFzc29jX3FpZCk7CiAJbGVuICs9IHNucHJpbnRmKHBidWZmZXIrbGVuLCBMUEZDX1FVRV9JTkZPX0dFVF9CVUZfU0laRS1sZW4sCi0JCQkiXHRJRCBbJTAyZF0sIE1RRS1DT1VOVCBbJTA0ZF0sICIKLQkJCSJIT1NULUlOREVYIFslMDR4XSwgUE9SVC1JTkRFWCBbJTA0eF1cblxuIiwKKwkJCSJcdFdRSURbJTAyZF0sICIKKwkJCSJRRS1DT1VOVFslMDRkXSwgUUUtU0laRVslMDRkXSwgIgorCQkJIkhPU1QtSU5ERVhbJTA0ZF0sIFBPUlQtSU5ERVhbJTA0ZF1cblxuIiwKIAkJCXBoYmEtPnNsaTRfaGJhLm1ieF93cS0+cXVldWVfaWQsCiAJCQlwaGJhLT5zbGk0X2hiYS5tYnhfd3EtPmVudHJ5X2NvdW50LAorCQkJcGhiYS0+c2xpNF9oYmEubWJ4X3dxLT5lbnRyeV9zaXplLAogCQkJcGhiYS0+c2xpNF9oYmEubWJ4X3dxLT5ob3N0X2luZGV4LAogCQkJcGhiYS0+c2xpNF9oYmEubWJ4X3dxLT5oYmFfaW5kZXgpOwogCiAJLyogR2V0IHNsb3ctcGF0aCB3b3JrIHF1ZXVlIGluZm9ybWF0aW9uICovCiAJbGVuICs9IHNucHJpbnRmKHBidWZmZXIrbGVuLCBMUEZDX1FVRV9JTkZPX0dFVF9CVUZfU0laRS1sZW4sCi0JCQkiU2xvdy1wYXRoIFdRIGluZm9ybWF0aW9uOlxuIik7CisJCQkiU2xvdy1wYXRoIEVMUyBXUSBpbmZvcm1hdGlvbjpcbiIpOwogCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19RVUVfSU5GT19HRVRfQlVGX1NJWkUtbGVuLAotCQkJIlx0XHRBc3NvY2lhdGVkIENRLUlEIFslMDJkXTpcbiIsCisJCQkiQXNzb2NpYXRlZCBDUUlEWyUwMmRdOlxuIiwKIAkJCXBoYmEtPnNsaTRfaGJhLmVsc193cS0+YXNzb2NfcWlkKTsKIAlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfUVVFX0lORk9fR0VUX0JVRl9TSVpFLWxlbiwKLQkJCSJcdElEIFslMDJkXSwgV1FFLUNPVU5UIFslMDRkXSwgIgotCQkJIkhPU1QtSU5ERVggWyUwNHhdLCBQT1JULUlOREVYIFslMDR4XVxuXG4iLAorCQkJIlx0V1FJRFslMDJkXSwgIgorCQkJIlFFLUNPVU5UWyUwNGRdLCBRRS1TSVpFWyUwNGRdLCAiCisJCQkiSE9TVC1JTkRFWFslMDRkXSwgUE9SVC1JTkRFWFslMDRkXVxuXG4iLAogCQkJcGhiYS0+c2xpNF9oYmEuZWxzX3dxLT5xdWV1ZV9pZCwKIAkJCXBoYmEtPnNsaTRfaGJhLmVsc193cS0+ZW50cnlfY291bnQsCisJCQlwaGJhLT5zbGk0X2hiYS5lbHNfd3EtPmVudHJ5X3NpemUsCiAJCQlwaGJhLT5zbGk0X2hiYS5lbHNfd3EtPmhvc3RfaW5kZXgsCiAJCQlwaGJhLT5zbGk0X2hiYS5lbHNfd3EtPmhiYV9pbmRleCk7CiAKIAkvKiBHZXQgZmFzdC1wYXRoIHdvcmsgcXVldWUgaW5mb3JtYXRpb24gKi8KIAlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfUVVFX0lORk9fR0VUX0JVRl9TSVpFLWxlbiwKLQkJCSJGYXN0LXBhdGggV1EgaW5mb3JtYXRpb246XG4iKTsKKwkJCSJGYXN0LXBhdGggRkNQIFdRIGluZm9ybWF0aW9uOlxuIik7CiAJZm9yIChmY3BfcWlkeCA9IDA7IGZjcF9xaWR4IDwgcGhiYS0+Y2ZnX2ZjcF93cV9jb3VudDsgZmNwX3FpZHgrKykgewogCQlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfUVVFX0lORk9fR0VUX0JVRl9TSVpFLWxlbiwKLQkJCQkiXHRcdEFzc29jaWF0ZWQgQ1EtSUQgWyUwMmRdOlxuIiwKKwkJCQkiQXNzb2NpYXRlZCBDUUlEWyUwMmRdOlxuIiwKIAkJCQlwaGJhLT5zbGk0X2hiYS5mY3Bfd3FbZmNwX3FpZHhdLT5hc3NvY19xaWQpOwogCQlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfUVVFX0lORk9fR0VUX0JVRl9TSVpFLWxlbiwKLQkJCQkiXHRJRCBbJTAyZF0sIFdRRS1DT1VOVCBbJTA0ZF0sICIKLQkJCQkiSE9TVC1JTkRFWCBbJTA0eF0sIFBPUlQtSU5ERVggWyUwNHhdXG4iLAorCQkJCSJcdFdRSURbJTAyZF0sICIKKwkJCQkiUUUtQ09VTlRbJTA0ZF0sIFdRRS1TSVpFWyUwNGRdLCAiCisJCQkJIkhPU1QtSU5ERVhbJTA0ZF0sIFBPUlQtSU5ERVhbJTA0ZF1cbiIsCiAJCQkJcGhiYS0+c2xpNF9oYmEuZmNwX3dxW2ZjcF9xaWR4XS0+cXVldWVfaWQsCiAJCQkJcGhiYS0+c2xpNF9oYmEuZmNwX3dxW2ZjcF9xaWR4XS0+ZW50cnlfY291bnQsCisJCQkJcGhiYS0+c2xpNF9oYmEuZmNwX3dxW2ZjcF9xaWR4XS0+ZW50cnlfc2l6ZSwKIAkJCQlwaGJhLT5zbGk0X2hiYS5mY3Bfd3FbZmNwX3FpZHhdLT5ob3N0X2luZGV4LAogCQkJCXBoYmEtPnNsaTRfaGJhLmZjcF93cVtmY3BfcWlkeF0tPmhiYV9pbmRleCk7CiAJfQpAQCAtMTg2OCwyNiArMTczNiw1OTcgQEAKIAlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfUVVFX0lORk9fR0VUX0JVRl9TSVpFLWxlbiwKIAkJCSJTbG93LXBhdGggUlEgaW5mb3JtYXRpb246XG4iKTsKIAlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfUVVFX0lORk9fR0VUX0JVRl9TSVpFLWxlbiwKLQkJCSJcdFx0QXNzb2NpYXRlZCBDUS1JRCBbJTAyZF06XG4iLAorCQkJIkFzc29jaWF0ZWQgQ1FJRFslMDJkXTpcbiIsCiAJCQlwaGJhLT5zbGk0X2hiYS5oZHJfcnEtPmFzc29jX3FpZCk7CiAJbGVuICs9IHNucHJpbnRmKHBidWZmZXIrbGVuLCBMUEZDX1FVRV9JTkZPX0dFVF9CVUZfU0laRS1sZW4sCi0JCQkiXHRJRCBbJTAyZF0sIFJIUUUtQ09VTlQgWyUwNGRdLCAiCi0JCQkiSE9TVC1JTkRFWCBbJTA0eF0sIFBPUlQtSU5ERVggWyUwNHhdXG4iLAorCQkJIlx0SFFJRFslMDJkXSwgIgorCQkJIlFFLUNPVU5UWyUwNGRdLCBRRS1TSVpFWyUwNGRdLCAiCisJCQkiSE9TVC1JTkRFWFslMDRkXSwgUE9SVC1JTkRFWFslMDRkXVxuIiwKIAkJCXBoYmEtPnNsaTRfaGJhLmhkcl9ycS0+cXVldWVfaWQsCiAJCQlwaGJhLT5zbGk0X2hiYS5oZHJfcnEtPmVudHJ5X2NvdW50LAorCQkJcGhiYS0+c2xpNF9oYmEuaGRyX3JxLT5lbnRyeV9zaXplLAogCQkJcGhiYS0+c2xpNF9oYmEuaGRyX3JxLT5ob3N0X2luZGV4LAogCQkJcGhiYS0+c2xpNF9oYmEuaGRyX3JxLT5oYmFfaW5kZXgpOwogCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19RVUVfSU5GT19HRVRfQlVGX1NJWkUtbGVuLAotCQkJIlx0SUQgWyUwMmRdLCBSRFFFLUNPVU5UIFslMDRkXSwgIgotCQkJIkhPU1QtSU5ERVggWyUwNHhdLCBQT1JULUlOREVYIFslMDR4XVxuIiwKKwkJCSJcdERRSURbJTAyZF0sICIKKwkJCSJRRS1DT1VOVFslMDRkXSwgUUUtU0laRVslMDRkXSwgIgorCQkJIkhPU1QtSU5ERVhbJTA0ZF0sIFBPUlQtSU5ERVhbJTA0ZF1cbiIsCiAJCQlwaGJhLT5zbGk0X2hiYS5kYXRfcnEtPnF1ZXVlX2lkLAogCQkJcGhiYS0+c2xpNF9oYmEuZGF0X3JxLT5lbnRyeV9jb3VudCwKKwkJCXBoYmEtPnNsaTRfaGJhLmRhdF9ycS0+ZW50cnlfc2l6ZSwKIAkJCXBoYmEtPnNsaTRfaGJhLmRhdF9ycS0+aG9zdF9pbmRleCwKIAkJCXBoYmEtPnNsaTRfaGJhLmRhdF9ycS0+aGJhX2luZGV4KTsKIAogCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIG5ieXRlcywgcHBvcywgcGJ1ZmZlciwgbGVuKTsKIH0KIAorLyoqCisgKiBscGZjX2lkaWFnX3F1ZV9wYXJhbV9jaGVjayAtIHF1ZXVlIGFjY2VzcyBjb21tYW5kIHBhcmFtZXRlciBzYW5pdHkgY2hlY2sKKyAqIEBxOiBUaGUgcG9pbnRlciB0byBxdWV1ZSBzdHJ1Y3R1cmUuCisgKiBAaW5kZXg6IFRoZSBpbmRleCBpbnRvIGEgcXVldWUgZW50cnkuCisgKiBAY291bnQ6IFRoZSBudW1iZXIgb2YgcXVldWUgZW50cmllcyB0byBhY2Nlc3MuCisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGUgcm91dGluZSBwZXJmb3JtcyBzYW5pdHkgY2hlY2sgb24gZGV2aWNlIHF1ZXVlIGFjY2VzcyBtZXRob2QgY29tbWFuZHMuCisgKgorICogUmV0dXJuczoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAtRUlOVkFMIHdoZW4gZmFpbHMgdGhlIHNhbml0eSBjaGVjaywgb3RoZXJ3aXNlLCBpdAorICogcmV0dXJucyAwLgorICoqLworc3RhdGljIGludAorbHBmY19pZGlhZ19xdWVfcGFyYW1fY2hlY2soc3RydWN0IGxwZmNfcXVldWUgKnEsIGludCBpbmRleCwgaW50IGNvdW50KQoreworCS8qIE9ubHkgc3VwcG9ydCBzaW5nbGUgZW50cnkgcmVhZCBvciBicm93c2luZyAqLworCWlmICgoY291bnQgIT0gMSkgJiYgKGNvdW50ICE9IExQRkNfUVVFX0FDQ19CUk9XU0UpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoaW5kZXggPiBxLT5lbnRyeV9jb3VudCAtIDEpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOworfQorCisvKioKKyAqIGxwZmNfaWRpYWdfcXVlYWNjX3JlYWRfcWUgLSByZWFkIGEgc2luZ2xlIGVudHJ5IGZyb20gdGhlIGdpdmVuIHF1ZXVlIGluZGV4CisgKiBAcGJ1ZmZlcjogVGhlIHBvaW50ZXIgdG8gYnVmZmVyIHRvIGNvcHkgdGhlIHJlYWQgZGF0YSBpbnRvLgorICogQHBxdWU6IFRoZSBwb2ludGVyIHRvIHRoZSBxdWV1ZSB0byBiZSByZWFkLgorICogQGluZGV4OiBUaGUgaW5kZXggaW50byB0aGUgcXVldWUgZW50cnkuCisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIHJvdXRpbmUgcmVhZHMgb3V0IGEgc2luZ2xlIGVudHJ5IGZyb20gdGhlIGdpdmVuIHF1ZXVlJ3MgaW5kZXggbG9jYXRpb24KKyAqIGFuZCBjb3BpZXMgaXQgaW50byB0aGUgYnVmZmVyIHByb3ZpZGVkLgorICoKKyAqIFJldHVybnM6CisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCB3aGVuIGl0IGZhaWxzLCBvdGhlcndpc2UsIGl0IHJldHVybnMgdGhlIGxlbmd0aCBvZgorICogdGhlIGRhdGEgcmVhZCBpbnRvIHRoZSBidWZmZXIgcHJvdmlkZWQuCisgKiovCitzdGF0aWMgaW50CitscGZjX2lkaWFnX3F1ZWFjY19yZWFkX3FlKGNoYXIgKnBidWZmZXIsIGludCBsZW4sIHN0cnVjdCBscGZjX3F1ZXVlICpwcXVlLAorCQkJICB1aW50MzJfdCBpbmRleCkKK3sKKwlpbnQgb2Zmc2V0LCBlc2l6ZTsKKwl1aW50MzJfdCAqcGVudHJ5OworCisJaWYgKCFwYnVmZmVyIHx8ICFwcXVlKQorCQlyZXR1cm4gMDsKKworCWVzaXplID0gcHF1ZS0+ZW50cnlfc2l6ZTsKKwlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfUVVFX0FDQ19CVUZfU0laRS1sZW4sCisJCQkiUUUtSU5ERVhbJTA0ZF06XG4iLCBpbmRleCk7CisKKwlvZmZzZXQgPSAwOworCXBlbnRyeSA9IHBxdWUtPnFlW2luZGV4XS5hZGRyZXNzOworCXdoaWxlIChlc2l6ZSA+IDApIHsKKwkJbGVuICs9IHNucHJpbnRmKHBidWZmZXIrbGVuLCBMUEZDX1FVRV9BQ0NfQlVGX1NJWkUtbGVuLAorCQkJCSIlMDh4ICIsICpwZW50cnkpOworCQlwZW50cnkrKzsKKwkJb2Zmc2V0ICs9IHNpemVvZih1aW50MzJfdCk7CisJCWVzaXplIC09IHNpemVvZih1aW50MzJfdCk7CisJCWlmIChlc2l6ZSA+IDAgJiYgIShvZmZzZXQgJSAoNCAqIHNpemVvZih1aW50MzJfdCkpKSkKKwkJCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwKKwkJCQkJTFBGQ19RVUVfQUNDX0JVRl9TSVpFLWxlbiwgIlxuIik7CisJfQorCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19RVUVfQUNDX0JVRl9TSVpFLWxlbiwgIlxuIik7CisKKwlyZXR1cm4gbGVuOworfQorCisvKioKKyAqIGxwZmNfaWRpYWdfcXVlYWNjX3JlYWQgLSBpZGlhZyBkZWJ1Z2ZzIHJlYWQgcG9ydCBxdWV1ZQorICogQGZpbGU6IFRoZSBmaWxlIHBvaW50ZXIgdG8gcmVhZCBmcm9tLgorICogQGJ1ZjogVGhlIGJ1ZmZlciB0byBjb3B5IHRoZSBkYXRhIHRvLgorICogQG5ieXRlczogVGhlIG51bWJlciBvZiBieXRlcyB0byByZWFkLgorICogQHBwb3M6IFRoZSBwb3NpdGlvbiBpbiB0aGUgZmlsZSB0byBzdGFydCByZWFkaW5nIGZyb20uCisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIHJvdXRpbmUgcmVhZHMgZGF0YSBmcm9tIHRoZSBAcGhiYSBkZXZpY2UgcXVldWUgbWVtb3J5IGFjY29yZGluZyB0byB0aGUKKyAqIGlkaWFnIGNvbW1hbmQsIGFuZCBjb3BpZXMgdG8gdXNlciBAYnVmLiBEZXBlbmRpbmcgb24gdGhlIHF1ZXVlIGR1bXAgcmVhZAorICogY29tbWFuZCBzZXR1cCwgaXQgZG9lcyBlaXRoZXIgYSBzaW5nbGUgcXVldWUgZW50cnkgcmVhZCBvciBicm93aW5nIHRocm91Z2gKKyAqIGFsbCBlbnRyaWVzIG9mIHRoZSBxdWV1ZS4KKyAqCisgKiBSZXR1cm5zOgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBhbW91bnQgb2YgZGF0YSB0aGF0IHdhcyByZWFkICh0aGlzIGNvdWxkIGJlIGxlc3MKKyAqIHRoYW4gQG5ieXRlcyBpZiB0aGUgZW5kIG9mIHRoZSBmaWxlIHdhcyByZWFjaGVkKSBvciBhIG5lZ2F0aXZlIGVycm9yIHZhbHVlLgorICoqLworc3RhdGljIHNzaXplX3QKK2xwZmNfaWRpYWdfcXVlYWNjX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBuYnl0ZXMsCisJCSAgICAgICBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGxwZmNfZGVidWcgKmRlYnVnID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXVpbnQzMl90IGxhc3RfaW5kZXgsIGluZGV4LCBjb3VudDsKKwlzdHJ1Y3QgbHBmY19xdWV1ZSAqcHF1ZSA9IE5VTEw7CisJY2hhciAqcGJ1ZmZlcjsKKwlpbnQgbGVuID0gMDsKKworCS8qIFRoaXMgaXMgYSB1c2VyIHJlYWQgb3BlcmF0aW9uICovCisJZGVidWctPm9wID0gTFBGQ19JRElBR19PUF9SRDsKKworCWlmICghZGVidWctPmJ1ZmZlcikKKwkJZGVidWctPmJ1ZmZlciA9IGttYWxsb2MoTFBGQ19RVUVfQUNDX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRlYnVnLT5idWZmZXIpCisJCXJldHVybiAwOworCXBidWZmZXIgPSBkZWJ1Zy0+YnVmZmVyOworCisJaWYgKCpwcG9zKQorCQlyZXR1cm4gMDsKKworCWlmIChpZGlhZy5jbWQub3Bjb2RlID09IExQRkNfSURJQUdfQ01EX1FVRUFDQ19SRCkgeworCQlpbmRleCA9IGlkaWFnLmNtZC5kYXRhWzJdOworCQljb3VudCA9IGlkaWFnLmNtZC5kYXRhWzNdOworCQlwcXVlID0gKHN0cnVjdCBscGZjX3F1ZXVlICopaWRpYWcucHRyX3ByaXZhdGU7CisJfSBlbHNlCisJCXJldHVybiAwOworCisJLyogQnJvd3NlIHRoZSBxdWV1ZSBzdGFydGluZyBmcm9tIGluZGV4ICovCisJaWYgKGNvdW50ID09IExQRkNfUVVFX0FDQ19CUk9XU0UpCisJCWdvdG8gcXVlX2Jyb3dzZTsKKworCS8qIFJlYWQgYSBzaW5nbGUgZW50cnkgZnJvbSB0aGUgcXVldWUgKi8KKwlsZW4gPSBscGZjX2lkaWFnX3F1ZWFjY19yZWFkX3FlKHBidWZmZXIsIGxlbiwgcHF1ZSwgaW5kZXgpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgbmJ5dGVzLCBwcG9zLCBwYnVmZmVyLCBsZW4pOworCitxdWVfYnJvd3NlOgorCisJLyogQnJvd3NlIGFsbCBlbnRyaWVzIGZyb20gdGhlIHF1ZXVlICovCisJbGFzdF9pbmRleCA9IGlkaWFnLm9mZnNldC5sYXN0X3JkOworCWluZGV4ID0gbGFzdF9pbmRleDsKKworCXdoaWxlIChsZW4gPCBMUEZDX1FVRV9BQ0NfU0laRSAtIHBxdWUtPmVudHJ5X3NpemUpIHsKKwkJbGVuID0gbHBmY19pZGlhZ19xdWVhY2NfcmVhZF9xZShwYnVmZmVyLCBsZW4sIHBxdWUsIGluZGV4KTsKKwkJaW5kZXgrKzsKKwkJaWYgKGluZGV4ID4gcHF1ZS0+ZW50cnlfY291bnQgLSAxKQorCQkJYnJlYWs7CisJfQorCisJLyogU2V0IHVwIHRoZSBvZmZzZXQgZm9yIG5leHQgcG9ydGlvbiBvZiBwY2kgY2ZnIHJlYWQgKi8KKwlpZiAoaW5kZXggPiBwcXVlLT5lbnRyeV9jb3VudCAtIDEpCisJCWluZGV4ID0gMDsKKwlpZGlhZy5vZmZzZXQubGFzdF9yZCA9IGluZGV4OworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgbmJ5dGVzLCBwcG9zLCBwYnVmZmVyLCBsZW4pOworfQorCisvKioKKyAqIGxwZmNfaWRpYWdfcXVlYWNjX3dyaXRlIC0gU3ludGF4IGNoZWNrIGFuZCBzZXQgdXAgaWRpYWcgcXVlYWNjIGNvbW1hbmRzCisgKiBAZmlsZTogVGhlIGZpbGUgcG9pbnRlciB0byByZWFkIGZyb20uCisgKiBAYnVmOiBUaGUgYnVmZmVyIHRvIGNvcHkgdGhlIHVzZXIgZGF0YSBmcm9tLgorICogQG5ieXRlczogVGhlIG51bWJlciBvZiBieXRlcyB0byBnZXQuCisgKiBAcHBvczogVGhlIHBvc2l0aW9uIGluIHRoZSBmaWxlIHRvIHN0YXJ0IHJlYWRpbmcgZnJvbS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgZ2V0IHRoZSBkZWJ1Z2ZzIGlkaWFnIGNvbW1hbmQgc3RydWN0IGZyb20gdXNlciBzcGFjZSBhbmQgdGhlbgorICogcGVyZm9ybSB0aGUgc3ludGF4IGNoZWNrIGZvciBwb3J0IHF1ZXVlIHJlYWQgKGR1bXApIG9yIHdyaXRlIChzZXQpIGNvbW1hbmQKKyAqIGFjY29yZGluZ2x5LiBJbiB0aGUgY2FzZSBvZiBwb3J0IHF1ZXVlIHJlYWQgY29tbWFuZCwgaXQgc2V0cyB1cCB0aGUgY29tbWFuZAorICogaW4gdGhlIGlkaWFnIGNvbW1hbmQgc3RydWN0IGZvciB0aGUgZm9sbG93aW5nIGRlYnVnZnMgcmVhZCBvcGVyYXRpb24uIEluCisgKiB0aGUgY2FzZSBvZiBwb3J0IHF1ZXVlIHdyaXRlIG9wZXJhdGlvbiwgaXQgZXhlY3V0ZXMgdGhlIHdyaXRlIG9wZXJhdGlvbgorICogaW50byB0aGUgcG9ydCBxdWV1ZSBlbnRyeSBhY2NvcmRpbmdseS4KKyAqCisgKiBJdCByZXR1cm5zIHRoZSBAbmJ5dGdlcyBwYXNzaW5nIGluIGZyb20gZGVidWdmcyB1c2VyIHNwYWNlIHdoZW4gc3VjY2Vzc2Z1bC4KKyAqIEluIGNhc2Ugb2YgZXJyb3IgY29uZGl0aW9ucywgaXQgcmV0dXJucyBwcm9wZXIgZXJyb3IgY29kZSBiYWNrIHRvIHRoZSB1c2VyCisgKiBzcGFjZS4KKyAqKi8KK3N0YXRpYyBzc2l6ZV90CitscGZjX2lkaWFnX3F1ZWFjY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCXNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgbHBmY19kZWJ1ZyAqZGVidWcgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKHN0cnVjdCBscGZjX2hiYSAqKWRlYnVnLT5pX3ByaXZhdGU7CisJdWludDMyX3QgcWlkeCwgcXVldHAsIHF1ZWlkLCBpbmRleCwgY291bnQsIG9mZnNldCwgdmFsdWU7CisJdWludDMyX3QgKnBlbnRyeTsKKwlzdHJ1Y3QgbHBmY19xdWV1ZSAqcHF1ZTsKKwlpbnQgcmM7CisKKwkvKiBUaGlzIGlzIGEgdXNlciB3cml0ZSBvcGVyYXRpb24gKi8KKwlkZWJ1Zy0+b3AgPSBMUEZDX0lESUFHX09QX1dSOworCisJcmMgPSBscGZjX2lkaWFnX2NtZF9nZXQoYnVmLCBuYnl0ZXMsICZpZGlhZy5jbWQpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCS8qIEdldCBhbmQgc2FuaXR5IGNoZWNrIG9uIGNvbW1hbmQgZmVpbGRzICovCisJcXVldHAgID0gaWRpYWcuY21kLmRhdGFbMF07CisJcXVlaWQgID0gaWRpYWcuY21kLmRhdGFbMV07CisJaW5kZXggID0gaWRpYWcuY21kLmRhdGFbMl07CisJY291bnQgID0gaWRpYWcuY21kLmRhdGFbM107CisJb2Zmc2V0ID0gaWRpYWcuY21kLmRhdGFbNF07CisJdmFsdWUgID0gaWRpYWcuY21kLmRhdGFbNV07CisKKwkvKiBTYW5pdHkgY2hlY2sgb24gY29tbWFuZCBsaW5lIGFyZ3VtZW50cyAqLworCWlmIChpZGlhZy5jbWQub3Bjb2RlID09IExQRkNfSURJQUdfQ01EX1FVRUFDQ19XUiB8fAorCSAgICBpZGlhZy5jbWQub3Bjb2RlID09IExQRkNfSURJQUdfQ01EX1FVRUFDQ19TVCB8fAorCSAgICBpZGlhZy5jbWQub3Bjb2RlID09IExQRkNfSURJQUdfQ01EX1FVRUFDQ19DTCkgeworCQlpZiAocmMgIT0gTFBGQ19RVUVfQUNDX1dSX0NNRF9BUkcpCisJCQlnb3RvIGVycm9yX291dDsKKwkJaWYgKGNvdW50ICE9IDEpCisJCQlnb3RvIGVycm9yX291dDsKKwl9IGVsc2UgaWYgKGlkaWFnLmNtZC5vcGNvZGUgPT0gTFBGQ19JRElBR19DTURfUVVFQUNDX1JEKSB7CisJCWlmIChyYyAhPSBMUEZDX1FVRV9BQ0NfUkRfQ01EX0FSRykKKwkJCWdvdG8gZXJyb3Jfb3V0OworCX0gZWxzZQorCQlnb3RvIGVycm9yX291dDsKKworCXN3aXRjaCAocXVldHApIHsKKwljYXNlIExQRkNfSURJQUdfRVE6CisJCS8qIFNsb3ctcGF0aCBldmVudCBxdWV1ZSAqLworCQlpZiAocGhiYS0+c2xpNF9oYmEuc3BfZXEtPnF1ZXVlX2lkID09IHF1ZWlkKSB7CisJCQkvKiBTYW5pdHkgY2hlY2sgKi8KKwkJCXJjID0gbHBmY19pZGlhZ19xdWVfcGFyYW1fY2hlY2soCisJCQkJCXBoYmEtPnNsaTRfaGJhLnNwX2VxLCBpbmRleCwgY291bnQpOworCQkJaWYgKHJjKQorCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJaWRpYWcucHRyX3ByaXZhdGUgPSBwaGJhLT5zbGk0X2hiYS5zcF9lcTsKKwkJCWdvdG8gcGFzc19jaGVjazsKKwkJfQorCQkvKiBGYXN0LXBhdGggZXZlbnQgcXVldWUgKi8KKwkJZm9yIChxaWR4ID0gMDsgcWlkeCA8IHBoYmEtPmNmZ19mY3BfZXFfY291bnQ7IHFpZHgrKykgeworCQkJaWYgKHBoYmEtPnNsaTRfaGJhLmZwX2VxW3FpZHhdLT5xdWV1ZV9pZCA9PSBxdWVpZCkgeworCQkJCS8qIFNhbml0eSBjaGVjayAqLworCQkJCXJjID0gbHBmY19pZGlhZ19xdWVfcGFyYW1fY2hlY2soCisJCQkJCQlwaGJhLT5zbGk0X2hiYS5mcF9lcVtxaWR4XSwKKwkJCQkJCWluZGV4LCBjb3VudCk7CisJCQkJaWYgKHJjKQorCQkJCQlnb3RvIGVycm9yX291dDsKKwkJCQlpZGlhZy5wdHJfcHJpdmF0ZSA9IHBoYmEtPnNsaTRfaGJhLmZwX2VxW3FpZHhdOworCQkJCWdvdG8gcGFzc19jaGVjazsKKwkJCX0KKwkJfQorCQlnb3RvIGVycm9yX291dDsKKwkJYnJlYWs7CisJY2FzZSBMUEZDX0lESUFHX0NROgorCQkvKiBNQlggY29tcGxldGUgcXVldWUgKi8KKwkJaWYgKHBoYmEtPnNsaTRfaGJhLm1ieF9jcS0+cXVldWVfaWQgPT0gcXVlaWQpIHsKKwkJCS8qIFNhbml0eSBjaGVjayAqLworCQkJcmMgPSBscGZjX2lkaWFnX3F1ZV9wYXJhbV9jaGVjaygKKwkJCQkJcGhiYS0+c2xpNF9oYmEubWJ4X2NxLCBpbmRleCwgY291bnQpOworCQkJaWYgKHJjKQorCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJaWRpYWcucHRyX3ByaXZhdGUgPSBwaGJhLT5zbGk0X2hiYS5tYnhfY3E7CisJCQlnb3RvIHBhc3NfY2hlY2s7CisJCX0KKwkJLyogRUxTIGNvbXBsZXRlIHF1ZXVlICovCisJCWlmIChwaGJhLT5zbGk0X2hiYS5lbHNfY3EtPnF1ZXVlX2lkID09IHF1ZWlkKSB7CisJCQkvKiBTYW5pdHkgY2hlY2sgKi8KKwkJCXJjID0gbHBmY19pZGlhZ19xdWVfcGFyYW1fY2hlY2soCisJCQkJCXBoYmEtPnNsaTRfaGJhLmVsc19jcSwgaW5kZXgsIGNvdW50KTsKKwkJCWlmIChyYykKKwkJCQlnb3RvIGVycm9yX291dDsKKwkJCWlkaWFnLnB0cl9wcml2YXRlID0gcGhiYS0+c2xpNF9oYmEuZWxzX2NxOworCQkJZ290byBwYXNzX2NoZWNrOworCQl9CisJCS8qIEZDUCBjb21wbGV0ZSBxdWV1ZSAqLworCQlmb3IgKHFpZHggPSAwOyBxaWR4IDwgcGhiYS0+Y2ZnX2ZjcF9lcV9jb3VudDsgcWlkeCsrKSB7CisJCQlpZiAocGhiYS0+c2xpNF9oYmEuZmNwX2NxW3FpZHhdLT5xdWV1ZV9pZCA9PSBxdWVpZCkgeworCQkJCS8qIFNhbml0eSBjaGVjayAqLworCQkJCXJjID0gbHBmY19pZGlhZ19xdWVfcGFyYW1fY2hlY2soCisJCQkJCQlwaGJhLT5zbGk0X2hiYS5mY3BfY3FbcWlkeF0sCisJCQkJCQlpbmRleCwgY291bnQpOworCQkJCWlmIChyYykKKwkJCQkJZ290byBlcnJvcl9vdXQ7CisJCQkJaWRpYWcucHRyX3ByaXZhdGUgPQorCQkJCQkJcGhiYS0+c2xpNF9oYmEuZmNwX2NxW3FpZHhdOworCQkJCWdvdG8gcGFzc19jaGVjazsKKwkJCX0KKwkJfQorCQlnb3RvIGVycm9yX291dDsKKwkJYnJlYWs7CisJY2FzZSBMUEZDX0lESUFHX01ROgorCQkvKiBNQlggd29yayBxdWV1ZSAqLworCQlpZiAocGhiYS0+c2xpNF9oYmEubWJ4X3dxLT5xdWV1ZV9pZCA9PSBxdWVpZCkgeworCQkJLyogU2FuaXR5IGNoZWNrICovCisJCQlyYyA9IGxwZmNfaWRpYWdfcXVlX3BhcmFtX2NoZWNrKAorCQkJCQlwaGJhLT5zbGk0X2hiYS5tYnhfd3EsIGluZGV4LCBjb3VudCk7CisJCQlpZiAocmMpCisJCQkJZ290byBlcnJvcl9vdXQ7CisJCQlpZGlhZy5wdHJfcHJpdmF0ZSA9IHBoYmEtPnNsaTRfaGJhLm1ieF93cTsKKwkJCWdvdG8gcGFzc19jaGVjazsKKwkJfQorCQlicmVhazsKKwljYXNlIExQRkNfSURJQUdfV1E6CisJCS8qIEVMUyB3b3JrIHF1ZXVlICovCisJCWlmIChwaGJhLT5zbGk0X2hiYS5lbHNfd3EtPnF1ZXVlX2lkID09IHF1ZWlkKSB7CisJCQkvKiBTYW5pdHkgY2hlY2sgKi8KKwkJCXJjID0gbHBmY19pZGlhZ19xdWVfcGFyYW1fY2hlY2soCisJCQkJCXBoYmEtPnNsaTRfaGJhLmVsc193cSwgaW5kZXgsIGNvdW50KTsKKwkJCWlmIChyYykKKwkJCQlnb3RvIGVycm9yX291dDsKKwkJCWlkaWFnLnB0cl9wcml2YXRlID0gcGhiYS0+c2xpNF9oYmEuZWxzX3dxOworCQkJZ290byBwYXNzX2NoZWNrOworCQl9CisJCS8qIEZDUCB3b3JrIHF1ZXVlICovCisJCWZvciAocWlkeCA9IDA7IHFpZHggPCBwaGJhLT5jZmdfZmNwX3dxX2NvdW50OyBxaWR4KyspIHsKKwkJCWlmIChwaGJhLT5zbGk0X2hiYS5mY3Bfd3FbcWlkeF0tPnF1ZXVlX2lkID09IHF1ZWlkKSB7CisJCQkJLyogU2FuaXR5IGNoZWNrICovCisJCQkJcmMgPSBscGZjX2lkaWFnX3F1ZV9wYXJhbV9jaGVjaygKKwkJCQkJCXBoYmEtPnNsaTRfaGJhLmZjcF93cVtxaWR4XSwKKwkJCQkJCWluZGV4LCBjb3VudCk7CisJCQkJaWYgKHJjKQorCQkJCQlnb3RvIGVycm9yX291dDsKKwkJCQlpZGlhZy5wdHJfcHJpdmF0ZSA9CisJCQkJCXBoYmEtPnNsaTRfaGJhLmZjcF93cVtxaWR4XTsKKwkJCQlnb3RvIHBhc3NfY2hlY2s7CisJCQl9CisJCX0KKwkJZ290byBlcnJvcl9vdXQ7CisJCWJyZWFrOworCWNhc2UgTFBGQ19JRElBR19SUToKKwkJLyogSERSIHF1ZXVlICovCisJCWlmIChwaGJhLT5zbGk0X2hiYS5oZHJfcnEtPnF1ZXVlX2lkID09IHF1ZWlkKSB7CisJCQkvKiBTYW5pdHkgY2hlY2sgKi8KKwkJCXJjID0gbHBmY19pZGlhZ19xdWVfcGFyYW1fY2hlY2soCisJCQkJCXBoYmEtPnNsaTRfaGJhLmhkcl9ycSwgaW5kZXgsIGNvdW50KTsKKwkJCWlmIChyYykKKwkJCQlnb3RvIGVycm9yX291dDsKKwkJCWlkaWFnLnB0cl9wcml2YXRlID0gcGhiYS0+c2xpNF9oYmEuaGRyX3JxOworCQkJZ290byBwYXNzX2NoZWNrOworCQl9CisJCS8qIERBVCBxdWV1ZSAqLworCQlpZiAocGhiYS0+c2xpNF9oYmEuZGF0X3JxLT5xdWV1ZV9pZCA9PSBxdWVpZCkgeworCQkJLyogU2FuaXR5IGNoZWNrICovCisJCQlyYyA9IGxwZmNfaWRpYWdfcXVlX3BhcmFtX2NoZWNrKAorCQkJCQlwaGJhLT5zbGk0X2hiYS5kYXRfcnEsIGluZGV4LCBjb3VudCk7CisJCQlpZiAocmMpCisJCQkJZ290byBlcnJvcl9vdXQ7CisJCQlpZGlhZy5wdHJfcHJpdmF0ZSA9IHBoYmEtPnNsaTRfaGJhLmRhdF9ycTsKKwkJCWdvdG8gcGFzc19jaGVjazsKKwkJfQorCQlnb3RvIGVycm9yX291dDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZ290byBlcnJvcl9vdXQ7CisJCWJyZWFrOworCX0KKworcGFzc19jaGVjazoKKworCWlmIChpZGlhZy5jbWQub3Bjb2RlID09IExQRkNfSURJQUdfQ01EX1FVRUFDQ19SRCkgeworCQlpZiAoY291bnQgPT0gTFBGQ19RVUVfQUNDX0JST1dTRSkKKwkJCWlkaWFnLm9mZnNldC5sYXN0X3JkID0gaW5kZXg7CisJfQorCisJaWYgKGlkaWFnLmNtZC5vcGNvZGUgPT0gTFBGQ19JRElBR19DTURfUVVFQUNDX1dSIHx8CisJICAgIGlkaWFnLmNtZC5vcGNvZGUgPT0gTFBGQ19JRElBR19DTURfUVVFQUNDX1NUIHx8CisJICAgIGlkaWFnLmNtZC5vcGNvZGUgPT0gTFBGQ19JRElBR19DTURfUVVFQUNDX0NMKSB7CisJCS8qIEFkZGl0aW9uYWwgc2FuaXR5IGNoZWNrcyBvbiB3cml0ZSBvcGVyYXRpb24gKi8KKwkJcHF1ZSA9IChzdHJ1Y3QgbHBmY19xdWV1ZSAqKWlkaWFnLnB0cl9wcml2YXRlOworCQlpZiAob2Zmc2V0ID4gcHF1ZS0+ZW50cnlfc2l6ZS9zaXplb2YodWludDMyX3QpIC0gMSkKKwkJCWdvdG8gZXJyb3Jfb3V0OworCQlwZW50cnkgPSBwcXVlLT5xZVtpbmRleF0uYWRkcmVzczsKKwkJcGVudHJ5ICs9IG9mZnNldDsKKwkJaWYgKGlkaWFnLmNtZC5vcGNvZGUgPT0gTFBGQ19JRElBR19DTURfUVVFQUNDX1dSKQorCQkJKnBlbnRyeSA9IHZhbHVlOworCQlpZiAoaWRpYWcuY21kLm9wY29kZSA9PSBMUEZDX0lESUFHX0NNRF9RVUVBQ0NfU1QpCisJCQkqcGVudHJ5IHw9IHZhbHVlOworCQlpZiAoaWRpYWcuY21kLm9wY29kZSA9PSBMUEZDX0lESUFHX0NNRF9RVUVBQ0NfQ0wpCisJCQkqcGVudHJ5ICY9IH52YWx1ZTsKKwl9CisJcmV0dXJuIG5ieXRlczsKKworZXJyb3Jfb3V0OgorCS8qIENsZWFuIG91dCBjb21tYW5kIHN0cnVjdHVyZSBvbiBjb21tYW5kIGVycm9yIG91dCAqLworCW1lbXNldCgmaWRpYWcsIDAsIHNpemVvZihpZGlhZykpOworCXJldHVybiAtRUlOVkFMOworfQorCisvKioKKyAqIGxwZmNfaWRpYWdfZHJiYWNjX3JlYWRfcmVnIC0gaWRpYWcgZGVidWdmcyByZWFkIGEgZG9vcmJlbGwgcmVnaXN0ZXIKKyAqIEBwaGJhOiBUaGUgcG9pbnRlciB0byBoYmEgc3RydWN0dXJlLgorICogQHBidWZmZXI6IFRoZSBwb2ludGVyIHRvIHRoZSBidWZmZXIgdG8gY29weSB0aGUgZGF0YSB0by4KKyAqIEBsZW46IFRoZSBsZW5naHQgb2YgYnl0ZXMgdG8gY29waWVkLgorICogQGRyYnJlZ2lkOiBUaGUgaWQgdG8gZG9vcmJlbGwgcmVnaXN0ZXJzLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyByb3V0aW5lIHJlYWRzIGEgZG9vcmJlbGwgcmVnaXN0ZXIgYW5kIGNvcGllcyBpdHMgY29udGVudCB0byB0aGUKKyAqIHVzZXIgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQHBidWZmZXIuCisgKgorICogUmV0dXJuczoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgYW1vdW50IG9mIGRhdGEgdGhhdCB3YXMgY29waWVkIGludG8gQHBidWZmZXIuCisgKiovCitzdGF0aWMgaW50CitscGZjX2lkaWFnX2RyYmFjY19yZWFkX3JlZyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIGNoYXIgKnBidWZmZXIsCisJCQkgICBpbnQgbGVuLCB1aW50MzJfdCBkcmJyZWdpZCkKK3sKKworCWlmICghcGJ1ZmZlcikKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGRyYnJlZ2lkKSB7CisJY2FzZSBMUEZDX0RSQl9FUUNROgorCQlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfRFJCX0FDQ19CVUZfU0laRS1sZW4sCisJCQkJIkVRQ1EtRFJCLVJFRzogMHglMDh4XG4iLAorCQkJCXJlYWRsKHBoYmEtPnNsaTRfaGJhLkVRQ1FEQnJlZ2FkZHIpKTsKKwkJYnJlYWs7CisJY2FzZSBMUEZDX0RSQl9NUToKKwkJbGVuICs9IHNucHJpbnRmKHBidWZmZXIrbGVuLCBMUEZDX0RSQl9BQ0NfQlVGX1NJWkUtbGVuLAorCQkJCSJNUS1EUkItUkVHOiAgIDB4JTA4eFxuIiwKKwkJCQlyZWFkbChwaGJhLT5zbGk0X2hiYS5NUURCcmVnYWRkcikpOworCQlicmVhazsKKwljYXNlIExQRkNfRFJCX1dROgorCQlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfRFJCX0FDQ19CVUZfU0laRS1sZW4sCisJCQkJIldRLURSQi1SRUc6ICAgMHglMDh4XG4iLAorCQkJCXJlYWRsKHBoYmEtPnNsaTRfaGJhLldRREJyZWdhZGRyKSk7CisJCWJyZWFrOworCWNhc2UgTFBGQ19EUkJfUlE6CisJCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19EUkJfQUNDX0JVRl9TSVpFLWxlbiwKKwkJCQkiUlEtRFJCLVJFRzogICAweCUwOHhcbiIsCisJCQkJcmVhZGwocGhiYS0+c2xpNF9oYmEuUlFEQnJlZ2FkZHIpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGxlbjsKK30KKworLyoqCisgKiBscGZjX2lkaWFnX2RyYmFjY19yZWFkIC0gaWRpYWcgZGVidWdmcyByZWFkIHBvcnQgZG9vcmJlbGwKKyAqIEBmaWxlOiBUaGUgZmlsZSBwb2ludGVyIHRvIHJlYWQgZnJvbS4KKyAqIEBidWY6IFRoZSBidWZmZXIgdG8gY29weSB0aGUgZGF0YSB0by4KKyAqIEBuYnl0ZXM6IFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC4KKyAqIEBwcG9zOiBUaGUgcG9zaXRpb24gaW4gdGhlIGZpbGUgdG8gc3RhcnQgcmVhZGluZyBmcm9tLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyByb3V0aW5lIHJlYWRzIGRhdGEgZnJvbSB0aGUgQHBoYmEgZGV2aWNlIGRvb3JiZWxsIHJlZ2lzdGVyIGFjY29yZGluZworICogdG8gdGhlIGlkaWFnIGNvbW1hbmQsIGFuZCBjb3BpZXMgdG8gdXNlciBAYnVmLiBEZXBlbmRpbmcgb24gdGhlIGRvb3JiZWxsCisgKiByZWdpc3RlciByZWFkIGNvbW1hbmQgc2V0dXAsIGl0IGRvZXMgZWl0aGVyIGEgc2luZ2xlIGRvb3JiZWxsIHJlZ2lzdGVyCisgKiByZWFkIG9yIGR1bXAgYWxsIGRvb3JiZWxsIHJlZ2lzdGVycy4KKyAqCisgKiBSZXR1cm5zOgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBhbW91bnQgb2YgZGF0YSB0aGF0IHdhcyByZWFkICh0aGlzIGNvdWxkIGJlIGxlc3MKKyAqIHRoYW4gQG5ieXRlcyBpZiB0aGUgZW5kIG9mIHRoZSBmaWxlIHdhcyByZWFjaGVkKSBvciBhIG5lZ2F0aXZlIGVycm9yIHZhbHVlLgorICoqLworc3RhdGljIHNzaXplX3QKK2xwZmNfaWRpYWdfZHJiYWNjX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBuYnl0ZXMsCisJCSAgICAgICBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGxwZmNfZGVidWcgKmRlYnVnID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEgKilkZWJ1Zy0+aV9wcml2YXRlOworCXVpbnQzMl90IGRyYl9yZWdfaWQsIGk7CisJY2hhciAqcGJ1ZmZlcjsKKwlpbnQgbGVuID0gMDsKKworCS8qIFRoaXMgaXMgYSB1c2VyIHJlYWQgb3BlcmF0aW9uICovCisJZGVidWctPm9wID0gTFBGQ19JRElBR19PUF9SRDsKKworCWlmICghZGVidWctPmJ1ZmZlcikKKwkJZGVidWctPmJ1ZmZlciA9IGttYWxsb2MoTFBGQ19EUkJfQUNDX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRlYnVnLT5idWZmZXIpCisJCXJldHVybiAwOworCXBidWZmZXIgPSBkZWJ1Zy0+YnVmZmVyOworCisJaWYgKCpwcG9zKQorCQlyZXR1cm4gMDsKKworCWlmIChpZGlhZy5jbWQub3Bjb2RlID09IExQRkNfSURJQUdfQ01EX0RSQkFDQ19SRCkKKwkJZHJiX3JlZ19pZCA9IGlkaWFnLmNtZC5kYXRhWzBdOworCWVsc2UKKwkJcmV0dXJuIDA7CisKKwlpZiAoZHJiX3JlZ19pZCA9PSBMUEZDX0RSQl9BQ0NfQUxMKQorCQlmb3IgKGkgPSAxOyBpIDw9IExQRkNfRFJCX01BWDsgaSsrKQorCQkJbGVuID0gbHBmY19pZGlhZ19kcmJhY2NfcmVhZF9yZWcocGhiYSwKKwkJCQkJCQkgcGJ1ZmZlciwgbGVuLCBpKTsKKwllbHNlCisJCWxlbiA9IGxwZmNfaWRpYWdfZHJiYWNjX3JlYWRfcmVnKHBoYmEsCisJCQkJCQkgcGJ1ZmZlciwgbGVuLCBkcmJfcmVnX2lkKTsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIG5ieXRlcywgcHBvcywgcGJ1ZmZlciwgbGVuKTsKK30KKworLyoqCisgKiBscGZjX2lkaWFnX2RyYmFjY193cml0ZSAtIFN5bnRheCBjaGVjayBhbmQgc2V0IHVwIGlkaWFnIGRyYmFjYyBjb21tYW5kcworICogQGZpbGU6IFRoZSBmaWxlIHBvaW50ZXIgdG8gcmVhZCBmcm9tLgorICogQGJ1ZjogVGhlIGJ1ZmZlciB0byBjb3B5IHRoZSB1c2VyIGRhdGEgZnJvbS4KKyAqIEBuYnl0ZXM6IFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gZ2V0LgorICogQHBwb3M6IFRoZSBwb3NpdGlvbiBpbiB0aGUgZmlsZSB0byBzdGFydCByZWFkaW5nIGZyb20uCisgKgorICogVGhpcyByb3V0aW5lIGdldCB0aGUgZGVidWdmcyBpZGlhZyBjb21tYW5kIHN0cnVjdCBmcm9tIHVzZXIgc3BhY2UgYW5kIHRoZW4KKyAqIHBlcmZvcm0gdGhlIHN5bnRheCBjaGVjayBmb3IgcG9ydCBkb29yYmVsbCByZWdpc3RlciByZWFkIChkdW1wKSBvciB3cml0ZQorICogKHNldCkgY29tbWFuZCBhY2NvcmRpbmdseS4gSW4gdGhlIGNhc2Ugb2YgcG9ydCBxdWV1ZSByZWFkIGNvbW1hbmQsIGl0IHNldHMKKyAqIHVwIHRoZSBjb21tYW5kIGluIHRoZSBpZGlhZyBjb21tYW5kIHN0cnVjdCBmb3IgdGhlIGZvbGxvd2luZyBkZWJ1Z2ZzIHJlYWQKKyAqIG9wZXJhdGlvbi4gSW4gdGhlIGNhc2Ugb2YgcG9ydCBkb29yYmVsbCByZWdpc3RlciB3cml0ZSBvcGVyYXRpb24sIGl0CisgKiBleGVjdXRlcyB0aGUgd3JpdGUgb3BlcmF0aW9uIGludG8gdGhlIHBvcnQgZG9vcmJlbGwgcmVnaXN0ZXIgYWNjb3JkaW5nbHkuCisgKgorICogSXQgcmV0dXJucyB0aGUgQG5ieXRnZXMgcGFzc2luZyBpbiBmcm9tIGRlYnVnZnMgdXNlciBzcGFjZSB3aGVuIHN1Y2Nlc3NmdWwuCisgKiBJbiBjYXNlIG9mIGVycm9yIGNvbmRpdGlvbnMsIGl0IHJldHVybnMgcHJvcGVyIGVycm9yIGNvZGUgYmFjayB0byB0aGUgdXNlcgorICogc3BhY2UuCisgKiovCitzdGF0aWMgc3NpemVfdAorbHBmY19pZGlhZ19kcmJhY2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQlzaXplX3QgbmJ5dGVzLCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGxwZmNfZGVidWcgKmRlYnVnID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEgKilkZWJ1Zy0+aV9wcml2YXRlOworCXVpbnQzMl90IGRyYl9yZWdfaWQsIHZhbHVlLCByZWdfdmFsOworCXZvaWQgX19pb21lbSAqZHJiX3JlZzsKKwlpbnQgcmM7CisKKwkvKiBUaGlzIGlzIGEgdXNlciB3cml0ZSBvcGVyYXRpb24gKi8KKwlkZWJ1Zy0+b3AgPSBMUEZDX0lESUFHX09QX1dSOworCisJcmMgPSBscGZjX2lkaWFnX2NtZF9nZXQoYnVmLCBuYnl0ZXMsICZpZGlhZy5jbWQpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCS8qIFNhbml0eSBjaGVjayBvbiBjb21tYW5kIGxpbmUgYXJndW1lbnRzICovCisJZHJiX3JlZ19pZCA9IGlkaWFnLmNtZC5kYXRhWzBdOworCXZhbHVlID0gaWRpYWcuY21kLmRhdGFbMV07CisKKwlpZiAoaWRpYWcuY21kLm9wY29kZSA9PSBMUEZDX0lESUFHX0NNRF9EUkJBQ0NfV1IgfHwKKwkgICAgaWRpYWcuY21kLm9wY29kZSA9PSBMUEZDX0lESUFHX0NNRF9EUkJBQ0NfU1QgfHwKKwkgICAgaWRpYWcuY21kLm9wY29kZSA9PSBMUEZDX0lESUFHX0NNRF9EUkJBQ0NfQ0wpIHsKKwkJaWYgKHJjICE9IExQRkNfRFJCX0FDQ19XUl9DTURfQVJHKQorCQkJZ290byBlcnJvcl9vdXQ7CisJCWlmIChkcmJfcmVnX2lkID4gTFBGQ19EUkJfTUFYKQorCQkJZ290byBlcnJvcl9vdXQ7CisJfSBlbHNlIGlmIChpZGlhZy5jbWQub3Bjb2RlID09IExQRkNfSURJQUdfQ01EX0RSQkFDQ19SRCkgeworCQlpZiAocmMgIT0gTFBGQ19EUkJfQUNDX1JEX0NNRF9BUkcpCisJCQlnb3RvIGVycm9yX291dDsKKwkJaWYgKChkcmJfcmVnX2lkID4gTFBGQ19EUkJfTUFYKSAmJgorCQkgICAgKGRyYl9yZWdfaWQgIT0gTFBGQ19EUkJfQUNDX0FMTCkpCisJCQlnb3RvIGVycm9yX291dDsKKwl9IGVsc2UKKwkJZ290byBlcnJvcl9vdXQ7CisKKwkvKiBQZXJmb3JtIHRoZSB3cml0ZSBhY2Nlc3Mgb3BlcmF0aW9uICovCisJaWYgKGlkaWFnLmNtZC5vcGNvZGUgPT0gTFBGQ19JRElBR19DTURfRFJCQUNDX1dSIHx8CisJICAgIGlkaWFnLmNtZC5vcGNvZGUgPT0gTFBGQ19JRElBR19DTURfRFJCQUNDX1NUIHx8CisJICAgIGlkaWFnLmNtZC5vcGNvZGUgPT0gTFBGQ19JRElBR19DTURfRFJCQUNDX0NMKSB7CisJCXN3aXRjaCAoZHJiX3JlZ19pZCkgeworCQljYXNlIExQRkNfRFJCX0VRQ1E6CisJCQlkcmJfcmVnID0gcGhiYS0+c2xpNF9oYmEuRVFDUURCcmVnYWRkcjsKKwkJCWJyZWFrOworCQljYXNlIExQRkNfRFJCX01ROgorCQkJZHJiX3JlZyA9IHBoYmEtPnNsaTRfaGJhLk1RREJyZWdhZGRyOworCQkJYnJlYWs7CisJCWNhc2UgTFBGQ19EUkJfV1E6CisJCQlkcmJfcmVnID0gcGhiYS0+c2xpNF9oYmEuV1FEQnJlZ2FkZHI7CisJCQlicmVhazsKKwkJY2FzZSBMUEZDX0RSQl9SUToKKwkJCWRyYl9yZWcgPSBwaGJhLT5zbGk0X2hiYS5SUURCcmVnYWRkcjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBlcnJvcl9vdXQ7CisJCX0KKworCQlpZiAoaWRpYWcuY21kLm9wY29kZSA9PSBMUEZDX0lESUFHX0NNRF9EUkJBQ0NfV1IpCisJCQlyZWdfdmFsID0gdmFsdWU7CisJCWlmIChpZGlhZy5jbWQub3Bjb2RlID09IExQRkNfSURJQUdfQ01EX0RSQkFDQ19TVCkgeworCQkJcmVnX3ZhbCA9IHJlYWRsKGRyYl9yZWcpOworCQkJcmVnX3ZhbCB8PSB2YWx1ZTsKKwkJfQorCQlpZiAoaWRpYWcuY21kLm9wY29kZSA9PSBMUEZDX0lESUFHX0NNRF9EUkJBQ0NfQ0wpIHsKKwkJCXJlZ192YWwgPSByZWFkbChkcmJfcmVnKTsKKwkJCXJlZ192YWwgJj0gfnZhbHVlOworCQl9CisJCXdyaXRlbChyZWdfdmFsLCBkcmJfcmVnKTsKKwkJcmVhZGwoZHJiX3JlZyk7IC8qIGZsdXNoICovCisJfQorCXJldHVybiBuYnl0ZXM7CisKK2Vycm9yX291dDoKKwkvKiBDbGVhbiBvdXQgY29tbWFuZCBzdHJ1Y3R1cmUgb24gY29tbWFuZCBlcnJvciBvdXQgKi8KKwltZW1zZXQoJmlkaWFnLCAwLCBzaXplb2YoaWRpYWcpKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKwogI3VuZGVmIGxwZmNfZGVidWdmc19vcF9kaXNjX3RyYwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHBmY19kZWJ1Z2ZzX29wX2Rpc2NfdHJjID0gewogCS5vd25lciA9ICAgICAgICBUSElTX01PRFVMRSwKQEAgLTE5ODYsNiArMjQyNSwyNiBAQAogCS5yZWxlYXNlID0gICAgICBscGZjX2lkaWFnX3JlbGVhc2UsCiB9OwogCisjdW5kZWYgbHBmY19pZGlhZ19vcF9xdWVhY2MKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxwZmNfaWRpYWdfb3BfcXVlQWNjID0geworCS5vd25lciA9ICAgICAgICBUSElTX01PRFVMRSwKKwkub3BlbiA9ICAgICAgICAgbHBmY19pZGlhZ19vcGVuLAorCS5sbHNlZWsgPSAgICAgICBscGZjX2RlYnVnZnNfbHNlZWssCisJLnJlYWQgPSAgICAgICAgIGxwZmNfaWRpYWdfcXVlYWNjX3JlYWQsCisJLndyaXRlID0gICAgICAgIGxwZmNfaWRpYWdfcXVlYWNjX3dyaXRlLAorCS5yZWxlYXNlID0gICAgICBscGZjX2lkaWFnX2NtZF9yZWxlYXNlLAorfTsKKworI3VuZGVmIGxwZmNfaWRpYWdfb3BfZHJiYWNjCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscGZjX2lkaWFnX29wX2RyYkFjYyA9IHsKKwkub3duZXIgPSAgICAgICAgVEhJU19NT0RVTEUsCisJLm9wZW4gPSAgICAgICAgIGxwZmNfaWRpYWdfb3BlbiwKKwkubGxzZWVrID0gICAgICAgbHBmY19kZWJ1Z2ZzX2xzZWVrLAorCS5yZWFkID0gICAgICAgICBscGZjX2lkaWFnX2RyYmFjY19yZWFkLAorCS53cml0ZSA9ICAgICAgICBscGZjX2lkaWFnX2RyYmFjY193cml0ZSwKKwkucmVsZWFzZSA9ICAgICAgbHBmY19pZGlhZ19jbWRfcmVsZWFzZSwKK307CisKICNlbmRpZgogCiAvKioKQEAgLTIyNjEsNiArMjcyMCwzMiBAQAogCQl9CiAJfQogCisJLyogaURpYWcgYWNjZXNzIFBDSSBmdW5jdGlvbiBxdWV1ZSAqLworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgInF1ZUFjYyIpOworCWlmICghcGhiYS0+aWRpYWdfcXVlX2FjYykgeworCQlwaGJhLT5pZGlhZ19xdWVfYWNjID0KKwkJCWRlYnVnZnNfY3JlYXRlX2ZpbGUobmFtZSwgU19JRlJFR3xTX0lSVUdPfFNfSVdVU1IsCisJCQkJcGhiYS0+aWRpYWdfcm9vdCwgcGhiYSwgJmxwZmNfaWRpYWdfb3BfcXVlQWNjKTsKKwkJaWYgKCFwaGJhLT5pZGlhZ19xdWVfYWNjKSB7CisJCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX0lOSVQsCisJCQkJCSAiMjkyNiBDYW4ndCBjcmVhdGUgaWRpYWcgZGVidWdmc1xuIik7CisJCQlnb3RvIGRlYnVnX2ZhaWxlZDsKKwkJfQorCX0KKworCS8qIGlEaWFnIGFjY2VzcyBQQ0kgZnVuY3Rpb24gZG9vcmJlbGwgcmVnaXN0ZXJzICovCisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiZHJiQWNjIik7CisJaWYgKCFwaGJhLT5pZGlhZ19kcmJfYWNjKSB7CisJCXBoYmEtPmlkaWFnX2RyYl9hY2MgPQorCQkJZGVidWdmc19jcmVhdGVfZmlsZShuYW1lLCBTX0lGUkVHfFNfSVJVR098U19JV1VTUiwKKwkJCQlwaGJhLT5pZGlhZ19yb290LCBwaGJhLCAmbHBmY19pZGlhZ19vcF9kcmJBY2MpOworCQlpZiAoIXBoYmEtPmlkaWFnX2RyYl9hY2MpIHsKKwkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJCQkJICIyOTI3IENhbid0IGNyZWF0ZSBpZGlhZyBkZWJ1Z2ZzXG4iKTsKKwkJCWdvdG8gZGVidWdfZmFpbGVkOworCQl9CisJfQorCiBkZWJ1Z19mYWlsZWQ6CiAJcmV0dXJuOwogI2VuZGlmCkBAIC0yMzM5LDYgKzI4MjQsMTYgQEAKIAkJICogaURpYWcgcmVsZWFzZQogCQkgKi8KIAkJaWYgKHBoYmEtPnNsaV9yZXYgPT0gTFBGQ19TTElfUkVWNCkgeworCQkJaWYgKHBoYmEtPmlkaWFnX2RyYl9hY2MpIHsKKwkJCQkvKiBpRGlhZyBkcmJBY2MgKi8KKwkJCQlkZWJ1Z2ZzX3JlbW92ZShwaGJhLT5pZGlhZ19kcmJfYWNjKTsKKwkJCQlwaGJhLT5pZGlhZ19kcmJfYWNjID0gTlVMTDsKKwkJCX0KKwkJCWlmIChwaGJhLT5pZGlhZ19xdWVfYWNjKSB7CisJCQkJLyogaURpYWcgcXVlQWNjICovCisJCQkJZGVidWdmc19yZW1vdmUocGhiYS0+aWRpYWdfcXVlX2FjYyk7CisJCQkJcGhiYS0+aWRpYWdfcXVlX2FjYyA9IE5VTEw7CisJCQl9CiAJCQlpZiAocGhiYS0+aWRpYWdfcXVlX2luZm8pIHsKIAkJCQkvKiBpRGlhZyBxdWVJbmZvICovCiAJCQkJZGVidWdmc19yZW1vdmUocGhiYS0+aWRpYWdfcXVlX2luZm8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuaAppbmRleCA5MWI5YTk0Li42NTI1YTVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuaApAQCAtMzksMTMgKzM5LDQyIEBACiAvKiBoYnFpbmZvIG91dHB1dCBidWZmZXIgc2l6ZSAqLwogI2RlZmluZSBMUEZDX0hCUUlORk9fU0laRSA4MTkyCiAKLS8qIHJkUGNpQ29uZiBvdXRwdXQgYnVmZmVyIHNpemUgKi8KKy8qIHBjaUNvbmYgKi8KKyNkZWZpbmUgTFBGQ19QQ0lfQ0ZHX0JST1dTRSAweGZmZmYKKyNkZWZpbmUgTFBGQ19QQ0lfQ0ZHX1JEX0NNRF9BUkcgMgorI2RlZmluZSBMUEZDX1BDSV9DRkdfV1JfQ01EX0FSRyAzCiAjZGVmaW5lIExQRkNfUENJX0NGR19TSVpFIDQwOTYKICNkZWZpbmUgTFBGQ19QQ0lfQ0ZHX1JEX0JVRl9TSVpFIChMUEZDX1BDSV9DRkdfU0laRS8yKQogI2RlZmluZSBMUEZDX1BDSV9DRkdfUkRfU0laRSAoTFBGQ19QQ0lfQ0ZHX1NJWkUvNCkKIAotLyogcXVldWUgaW5mbyBvdXRwdXQgYnVmZmVyIHNpemUgKi8KLSNkZWZpbmUgTFBGQ19RVUVfSU5GT19HRVRfQlVGX1NJWkUgMjA0OAorLyogcXVldWUgaW5mbyAqLworI2RlZmluZSBMUEZDX1FVRV9JTkZPX0dFVF9CVUZfU0laRSA0MDk2CisKKy8qIHF1ZXVlIGFjYyAqLworI2RlZmluZSBMUEZDX1FVRV9BQ0NfQlJPV1NFIDB4ZmZmZgorI2RlZmluZSBMUEZDX1FVRV9BQ0NfUkRfQ01EX0FSRyA0CisjZGVmaW5lIExQRkNfUVVFX0FDQ19XUl9DTURfQVJHIDYKKyNkZWZpbmUgTFBGQ19RVUVfQUNDX0JVRl9TSVpFIDQwOTYKKyNkZWZpbmUgTFBGQ19RVUVfQUNDX1NJWkUgKExQRkNfUVVFX0FDQ19CVUZfU0laRS8yKQorCisjZGVmaW5lIExQRkNfSURJQUdfRVEgMQorI2RlZmluZSBMUEZDX0lESUFHX0NRIDIKKyNkZWZpbmUgTFBGQ19JRElBR19NUSAzCisjZGVmaW5lIExQRkNfSURJQUdfV1EgNAorI2RlZmluZSBMUEZDX0lESUFHX1JRIDUKKworLyogZG9vcmJlbGwgYWNjICovCisjZGVmaW5lIExQRkNfRFJCX0FDQ19BTEwgMHhmZmZmCisjZGVmaW5lIExQRkNfRFJCX0FDQ19SRF9DTURfQVJHIDEKKyNkZWZpbmUgTFBGQ19EUkJfQUNDX1dSX0NNRF9BUkcgMgorI2RlZmluZSBMUEZDX0RSQl9BQ0NfQlVGX1NJWkUgMjU2CisKKyNkZWZpbmUgTFBGQ19EUkJfRVFDUSAxCisjZGVmaW5lIExQRkNfRFJCX01RICAgMgorI2RlZmluZSBMUEZDX0RSQl9XUSAgIDMKKyNkZWZpbmUgTFBGQ19EUkJfUlEgICA0CisKKyNkZWZpbmUgTFBGQ19EUkJfTUFYICA0CiAKICNkZWZpbmUgU0laRV9VOCAgc2l6ZW9mKHVpbnQ4X3QpCiAjZGVmaW5lIFNJWkVfVTE2IHNpemVvZih1aW50MTZfdCkKQEAgLTczLDEzICsxMDIsMjMgQEAKIAl1aW50MzJfdCBsYXN0X3JkOwogfTsKIAotI2RlZmluZSBMUEZDX0lESUFHX0NNRF9EQVRBX1NJWkUgNAorI2RlZmluZSBMUEZDX0lESUFHX0NNRF9EQVRBX1NJWkUgOAogc3RydWN0IGxwZmNfaWRpYWdfY21kIHsKIAl1aW50MzJfdCBvcGNvZGU7CiAjZGVmaW5lIExQRkNfSURJQUdfQ01EX1BDSUNGR19SRCAweDAwMDAwMDAxCiAjZGVmaW5lIExQRkNfSURJQUdfQ01EX1BDSUNGR19XUiAweDAwMDAwMDAyCiAjZGVmaW5lIExQRkNfSURJQUdfQ01EX1BDSUNGR19TVCAweDAwMDAwMDAzCiAjZGVmaW5lIExQRkNfSURJQUdfQ01EX1BDSUNGR19DTCAweDAwMDAwMDA0CisKKyNkZWZpbmUgTFBGQ19JRElBR19DTURfUVVFQUNDX1JEIDB4MDAwMDAwMTEKKyNkZWZpbmUgTFBGQ19JRElBR19DTURfUVVFQUNDX1dSIDB4MDAwMDAwMTIKKyNkZWZpbmUgTFBGQ19JRElBR19DTURfUVVFQUNDX1NUIDB4MDAwMDAwMTMKKyNkZWZpbmUgTFBGQ19JRElBR19DTURfUVVFQUNDX0NMIDB4MDAwMDAwMTQKKworI2RlZmluZSBMUEZDX0lESUFHX0NNRF9EUkJBQ0NfUkQgMHgwMDAwMDAyMQorI2RlZmluZSBMUEZDX0lESUFHX0NNRF9EUkJBQ0NfV1IgMHgwMDAwMDAyMgorI2RlZmluZSBMUEZDX0lESUFHX0NNRF9EUkJBQ0NfU1QgMHgwMDAwMDAyMworI2RlZmluZSBMUEZDX0lESUFHX0NNRF9EUkJBQ0NfQ0wgMHgwMDAwMDAyNAogCXVpbnQzMl90IGRhdGFbTFBGQ19JRElBR19DTURfREFUQV9TSVpFXTsKIH07CiAKQEAgLTg3LDYgKzEyNiw3IEBACiAJdWludDMyX3QgYWN0aXZlOwogCXN0cnVjdCBscGZjX2lkaWFnX2NtZCBjbWQ7CiAJc3RydWN0IGxwZmNfaWRpYWdfb2Zmc2V0IG9mZnNldDsKKwl2b2lkICpwdHJfcHJpdmF0ZTsKIH07CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMKaW5kZXggZDM0YjY5Zi4uZTJjNDUyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jCkBAIC02NzAsNiArNjcwLDcgQEAKIAkJCSAqIERyaXZlciBuZWVkcyB0byByZS1yZWcgVlBJIGluIG9yZGVyIGZvciBmL3cKIAkJCSAqIHRvIHVwZGF0ZSB0aGUgTUFDIGFkZHJlc3MuCiAJCQkgKi8KKwkJCWxwZmNfbmxwX3NldF9zdGF0ZSh2cG9ydCwgbmRscCwgTkxQX1NURV9VTk1BUFBFRF9OT0RFKTsKIAkJCWxwZmNfcmVnaXN0ZXJfbmV3X3Zwb3J0KHBoYmEsIHZwb3J0LCBuZGxwKTsKIAkJCXJldHVybiAwOwogCX0KQEAgLTg2OSw4ICs4NzAsOCBAQAogCQkgKi8KIAkJaWYgKChwaGJhLT5oYmFfZmxhZyAmIEhCQV9GSVBfU1VQUE9SVCkgJiYKIAkJICAgIChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfRElTQ09WRVJZKSAmJgotCQkgICAgKGlyc3AtPnVscFN0YXR1cyAhPSBJT1NUQVRfTE9DQUxfUkVKRUNUKSAmJgotCQkgICAgKGlyc3AtPnVuLnVscFdvcmRbNF0gIT0gSU9FUlJfU0xJX0FCT1JURUQpKSB7CisJCSAgICAhKChpcnNwLT51bHBTdGF0dXMgPT0gSU9TVEFUX0xPQ0FMX1JFSkVDVCkgJiYKKwkJICAgICAoaXJzcC0+dW4udWxwV29yZFs0XSA9PSBJT0VSUl9TTElfQUJPUlRFRCkpKSB7CiAJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfRklQIHwgTE9HX0VMUywKIAkJCQkJIjI2MTEgRkxPR0kgZmFpbGVkIG9uIEZDRiAoeCV4KSwgIgogCQkJCQkic3RhdHVzOngleC94JXgsIHRtbzp4JXgsIHBlcmZvcm0gIgpAQCAtMTA4NSwxNCArMTA4NiwxNSBAQAogCWlmIChzcC0+Y21uLmZjcGhIaWdoIDwgRkNfUEgzKQogCQlzcC0+Y21uLmZjcGhIaWdoID0gRkNfUEgzOwogCi0JaWYgICgocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KSAmJgotCSAgICAgKGJmX2dldChscGZjX3NsaV9pbnRmX2lmX3R5cGUsICZwaGJhLT5zbGk0X2hiYS5zbGlfaW50ZikgPT0KLQkgICAgICBMUEZDX1NMSV9JTlRGX0lGX1RZUEVfMCkpIHsKLQkJZWxzaW9jYi0+aW9jYi51bHBDdF9oID0gKChTTEk0X0NUX0ZDRkkgPj4gMSkgJiAxKTsKLQkJZWxzaW9jYi0+aW9jYi51bHBDdF9sID0gKFNMSTRfQ1RfRkNGSSAmIDEpOwotCQkvKiBGTE9HSSBuZWVkcyB0byBiZSAzIGZvciBXUUUgRkNGSSAqLwotCQkvKiBTZXQgdGhlIGZjZmkgdG8gdGhlIGZjZmkgd2UgcmVnaXN0ZXJlZCB3aXRoICovCi0JCWVsc2lvY2ItPmlvY2IudWxwQ29udGV4dCA9IHBoYmEtPmZjZi5mY2ZpOworCWlmICAocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KSB7CisJCWlmIChiZl9nZXQobHBmY19zbGlfaW50Zl9pZl90eXBlLCAmcGhiYS0+c2xpNF9oYmEuc2xpX2ludGYpID09CisJCSAgICBMUEZDX1NMSV9JTlRGX0lGX1RZUEVfMCkgeworCQkJZWxzaW9jYi0+aW9jYi51bHBDdF9oID0gKChTTEk0X0NUX0ZDRkkgPj4gMSkgJiAxKTsKKwkJCWVsc2lvY2ItPmlvY2IudWxwQ3RfbCA9IChTTEk0X0NUX0ZDRkkgJiAxKTsKKwkJCS8qIEZMT0dJIG5lZWRzIHRvIGJlIDMgZm9yIFdRRSBGQ0ZJICovCisJCQkvKiBTZXQgdGhlIGZjZmkgdG8gdGhlIGZjZmkgd2UgcmVnaXN0ZXJlZCB3aXRoICovCisJCQllbHNpb2NiLT5pb2NiLnVscENvbnRleHQgPSBwaGJhLT5mY2YuZmNmaTsKKwkJfQogCX0gZWxzZSBpZiAocGhiYS0+c2xpM19vcHRpb25zICYgTFBGQ19TTEkzX05QSVZfRU5BQkxFRCkgewogCQlzcC0+Y21uLnJlcXVlc3RfbXVsdGlwbGVfTnBvcnQgPSAxOwogCQkvKiBGb3IgRkxPR0ksIExldCBGTE9HSSByc3Agc2V0IHRoZSBOUG9ydElEIGZvciBWUEkgMCAqLwpAQCAtNDEwNywxMyArNDEwOSwxMyBAQAogCXBjbWQgKz0gc2l6ZW9mKHVpbnQzMl90KTsKIAlycnEgPSAoc3RydWN0IFJSUSAqKXBjbWQ7CiAJcnJxLT5ycnFfZXhjaGcgPSBiZTMyX3RvX2NwdShycnEtPnJycV9leGNoZyk7Ci0JcnhpZCA9IGJlMTZfdG9fY3B1KGJmX2dldChycnFfcnhpZCwgcnJxKSk7CisJcnhpZCA9IGJmX2dldChycnFfcnhpZCwgcnJxKTsKIAogCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fSU5GTywgTE9HX0VMUywKIAkJCSIyODgzIENsZWFyIFJSUSBmb3IgU0lEOngleCBPWElEOngleCBSWElEOngleCIKIAkJCSIgeCV4IHgleFxuIiwKIAkJCWJlMzJfdG9fY3B1KGJmX2dldChycnFfZGlkLCBycnEpKSwKLQkJCWJlMTZfdG9fY3B1KGJmX2dldChycnFfb3hpZCwgcnJxKSksCisJCQliZl9nZXQocnJxX294aWQsIHJycSksCiAJCQlyeGlkLAogCQkJaW9jYi0+aW90YWcsIGlvY2ItPmlvY2IudWxwQ29udGV4dCk7CiAKQEAgLTQxMjEsNyArNDEyMyw3IEBACiAJCSJDbGVhciBSUlE6ICBkaWQ6eCV4IGZsZzp4JXggZXhjaGc6eCUuMDh4IiwKIAkJbmRscC0+bmxwX0RJRCwgbmRscC0+bmxwX2ZsYWcsIHJycS0+cnJxX2V4Y2hnKTsKIAlpZiAodnBvcnQtPmZjX215RElEID09IGJlMzJfdG9fY3B1KGJmX2dldChycnFfZGlkLCBycnEpKSkKLQkJeHJpID0gYmUxNl90b19jcHUoYmZfZ2V0KHJycV9veGlkLCBycnEpKTsKKwkJeHJpID0gYmZfZ2V0KHJycV9veGlkLCBycnEpOwogCWVsc2UKIAkJeHJpID0gcnhpZDsKIAlwcnJxID0gbHBmY19nZXRfYWN0aXZlX3JycSh2cG9ydCwgeHJpLCBuZGxwLT5ubHBfRElEKTsKQEAgLTcyOTAsOCArNzI5Miw5IEBACiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gY21kaW9jYi0+dnBvcnQ7CiAJSU9DQl90ICppcnNwOwogCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOwotCW5kbHAgPSAoc3RydWN0IGxwZmNfbm9kZWxpc3QgKiljbWRpb2NiLT5jb250ZXh0MTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydCk7CiAKKwluZGxwID0gKHN0cnVjdCBscGZjX25vZGVsaXN0ICopY21kaW9jYi0+Y29udGV4dDE7CiAJaXJzcCA9ICZyc3Bpb2NiLT5pb2NiOwogCWxwZmNfZGVidWdmc19kaXNjX3RyYyh2cG9ydCwgTFBGQ19ESVNDX1RSQ19FTFNfQ01ELAogCQkiTE9HTyBucGl2IGNtcGw6ICBzdGF0dXM6eCV4L3gleCBkaWQ6eCV4IiwKQEAgLTczMDIsNiArNzMwNSwxOSBAQAogCiAJLyogVHJpZ2dlciB0aGUgcmVsZWFzZSBvZiB0aGUgbmRscCBhZnRlciBsb2dvICovCiAJbHBmY19ubHBfcHV0KG5kbHApOworCisJLyogTlBJViBMT0dPIGNvbXBsZXRlcyB0byBOUG9ydCA8bmxwX0RJRD4gKi8KKwlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0lORk8sIExPR19FTFMsCisJCQkgIjI5MjggTlBJViBMT0dPIGNvbXBsZXRlcyB0byBOUG9ydCB4JXggIgorCQkJICJEYXRhOiB4JXggeCV4IHgleCB4JXhcbiIsCisJCQkgbmRscC0+bmxwX0RJRCwgaXJzcC0+dWxwU3RhdHVzLCBpcnNwLT51bi51bHBXb3JkWzRdLAorCQkJIGlyc3AtPnVscFRpbWVvdXQsIHZwb3J0LT5udW1fZGlzY19ub2Rlcyk7CisKKwlpZiAoaXJzcC0+dWxwU3RhdHVzID09IElPU1RBVF9TVUNDRVNTKSB7CisJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCXZwb3J0LT5mY19mbGFnICY9IH5GQ19GQUJSSUM7CisJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwl9CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYwppbmRleCAzMDE0OTgzLi43YTM1ZGY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMSBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBDaHJpc3RvcGggSGVsbHdpZyAgICAgICAgICAgICAgKgpAQCAtMzU2OSw2ICszNTY5LDEwIEBACiAJCSJycG9ydCBhZGQ6ICAgICAgIGRpZDp4JXggZmxnOngleCB0eXBlIHgleCIsCiAJCW5kbHAtPm5scF9ESUQsIG5kbHAtPm5scF9mbGFnLCBuZGxwLT5ubHBfdHlwZSk7CiAKKwkvKiBEb24ndCBhZGQgdGhlIHJlbW90ZSBwb3J0IGlmIHVubG9hZGluZy4gKi8KKwlpZiAodnBvcnQtPmxvYWRfZmxhZyAmIEZDX1VOTE9BRElORykKKwkJcmV0dXJuOworCiAJbmRscC0+cnBvcnQgPSBycG9ydCA9IGZjX3JlbW90ZV9wb3J0X2FkZChzaG9zdCwgMCwgJnJwb3J0X2lkcyk7CiAJaWYgKCFycG9ydCB8fCAhZ2V0X2RldmljZSgmcnBvcnQtPmRldikpIHsKIAkJZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsICZwaGJhLT5wY2lkZXYtPmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHcuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHcuaAppbmRleCA5NWYxMWVkLi44NmI2ZjdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3LmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ody5oCkBAIC0xMDAyLDcgKzEwMDIsNyBAQAogI2RlZmluZSAgU0xJX01HTVRfR1JQTCAgICAgMHgxMDIJLyogR2V0IHJlZ2lzdGVyZWQgUG9ydCBsaXN0ICovCiAjZGVmaW5lICBTTElfTUdNVF9HUEFUICAgICAweDExMAkvKiBHZXQgUG9ydCBhdHRyaWJ1dGVzICovCiAjZGVmaW5lICBTTElfTUdNVF9SSEJBICAgICAweDIwMAkvKiBSZWdpc3RlciBIQkEgKi8KLSNkZWZpbmUgIFNMSV9NR01UX1JIQVQgICAgIDB4MjAxCS8qIFJlZ2lzdGVyIEhCQSBhdHR0cmlidXRlcyAqLworI2RlZmluZSAgU0xJX01HTVRfUkhBVCAgICAgMHgyMDEJLyogUmVnaXN0ZXIgSEJBIGF0dHJpYnV0ZXMgKi8KICNkZWZpbmUgIFNMSV9NR01UX1JQUlQgICAgIDB4MjEwCS8qIFJlZ2lzdGVyIFBvcnQgKi8KICNkZWZpbmUgIFNMSV9NR01UX1JQQSAgICAgIDB4MjExCS8qIFJlZ2lzdGVyIFBvcnQgYXR0cmlidXRlcyAqLwogI2RlZmluZSAgU0xJX01HTVRfREhCQSAgICAgMHgzMDAJLyogRGUtcmVnaXN0ZXIgSEJBICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3NC5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19odzQuaAppbmRleCA4NDMzYWMwLi40ZGZmNjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3NC5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHc0LmgKQEAgLTEwNTksNiArMTA1OSwxMSBAQAogI2RlZmluZSBscGZjX3JxX2NvbnRleHRfcnFlX3NpemVfU0hJRlQJOAkJLyogVmVyc2lvbiAxIE9ubHkgKi8KICNkZWZpbmUgbHBmY19ycV9jb250ZXh0X3JxZV9zaXplX01BU0sJMHgwMDAwMDAwRgogI2RlZmluZSBscGZjX3JxX2NvbnRleHRfcnFlX3NpemVfV09SRAl3b3JkMAorI2RlZmluZSBMUEZDX1JRRV9TSVpFXzgJCTIKKyNkZWZpbmUgTFBGQ19SUUVfU0laRV8xNgkzCisjZGVmaW5lIExQRkNfUlFFX1NJWkVfMzIJNAorI2RlZmluZSBMUEZDX1JRRV9TSVpFXzY0CTUKKyNkZWZpbmUgTFBGQ19SUUVfU0laRV8xMjgJNgogI2RlZmluZSBscGZjX3JxX2NvbnRleHRfcGFnZV9zaXplX1NISUZUCTAJCS8qIFZlcnNpb24gMSBPbmx5ICovCiAjZGVmaW5lIGxwZmNfcnFfY29udGV4dF9wYWdlX3NpemVfTUFTSwkweDAwMDAwMEZGCiAjZGVmaW5lIGxwZmNfcnFfY29udGV4dF9wYWdlX3NpemVfV09SRAl3b3JkMApAQCAtMjEwOCw2ICsyMTEzLDggQEAKICNkZWZpbmUgc2dsX3BwX2FsaWduX1dPUkQJCQl3b3JkMTIKIAl1aW50MzJfdCByc3ZkXzEzXzYzWzUxXTsKIH07CisjZGVmaW5lIFNMSTRfUEFHRV9BTElHTihhZGRyKSAoKChhZGRyKSsoKFNMSTRfUEFHRV9TSVpFKS0xKSkgXAorCQkJICAgICAgICYofigoU0xJNF9QQUdFX1NJWkUpLTEpKSkKIAogc3RydWN0IGxwZmNfc2xpNF9wYXJhbWV0ZXJzIHsKIAl1aW50MzJfdCB3b3JkMDsKQEAgLTI0OTEsNiArMjQ5OCw5IEBACiAjZGVmaW5lIHdxZV9yZXF0YWdfU0hJRlQgICAgICAwCiAjZGVmaW5lIHdxZV9yZXF0YWdfTUFTSyAgICAgICAweDAwMDBGRkZGCiAjZGVmaW5lIHdxZV9yZXF0YWdfV09SRCAgICAgICB3b3JkOQorI2RlZmluZSB3cWVfdGVtcF9ycGlfU0hJRlQgICAgMTYKKyNkZWZpbmUgd3FlX3RlbXBfcnBpX01BU0sgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgd3FlX3RlbXBfcnBpX1dPUkQgICAgIHdvcmQ5CiAjZGVmaW5lIHdxZV9yY3ZveGlkX1NISUZUICAgICAxNgogI2RlZmluZSB3cWVfcmN2b3hpZF9NQVNLICAgICAgMHgwMDAwRkZGRgogI2RlZmluZSB3cWVfcmN2b3hpZF9XT1JEICAgICAgd29yZDkKQEAgLTI1MjQsNyArMjUzNCw3IEBACiAjZGVmaW5lIHdxZV93cWVzX1dPUkQgICAgICAgICB3b3JkMTAKIC8qIE5vdGUgdGhhdCB0aGlzIGZpZWxkIG92ZXJsYXBzIGFib3ZlIGZpZWxkcyAqLwogI2RlZmluZSB3cWVfd3FpZF9TSElGVCAgICAgICAgMQotI2RlZmluZSB3cWVfd3FpZF9NQVNLICAgICAgICAgMHgwMDAwMDA3ZgorI2RlZmluZSB3cWVfd3FpZF9NQVNLICAgICAgICAgMHgwMDAwN2ZmZgogI2RlZmluZSB3cWVfd3FpZF9XT1JEICAgICAgICAgd29yZDEwCiAjZGVmaW5lIHdxZV9wcmlfU0hJRlQgICAgICAgICAxNgogI2RlZmluZSB3cWVfcHJpX01BU0sgICAgICAgICAgMHgwMDAwMDAwNwpAQCAtMjYyMSw3ICsyNjMxLDExIEBACiAJdWludDMyX3QgcnN2ZDQ7CiAJc3RydWN0IHdxZV9kaWQgd3FlX2Rlc3Q7CiAJc3RydWN0IHdxZV9jb21tb24gd3FlX2NvbTsgLyogd29yZHMgNi0xMSAqLwotCXVpbnQzMl90IHJzdmRfMTJfMTVbNF07CisJdWludDMyX3Qgd29yZDEyOworI2RlZmluZSB3cWVfcnNwX3RlbXBfcnBpX1NISUZUICAgIDAKKyNkZWZpbmUgd3FlX3JzcF90ZW1wX3JwaV9NQVNLICAgICAweDAwMDBGRkZGCisjZGVmaW5lIHdxZV9yc3BfdGVtcF9ycGlfV09SRCAgICAgd29yZDEyCisJdWludDMyX3QgcnN2ZF8xM18xNVszXTsKIH07CiAKIHN0cnVjdCB4bWl0X2Jsc19yc3A2NF93cWUgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYwppbmRleCA1MDVmODg0Li43ZGRhMDM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYwpAQCAtMzIwOSw5ICszMjA5LDkgQEAKIAlwaGJhLT5zbGk0X2hiYS5saW5rX3N0YXRlLmxvZ2ljYWxfc3BlZWQgPQogCQkJYmZfZ2V0KGxwZmNfYWNxZV9sb2dpY2FsX2xpbmtfc3BlZWQsIGFjcWVfbGluayk7CiAJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX1NMSSwKLQkJCSIyOTAwIEFzeW5jIEZDb0UgTGluayBldmVudCAtIFNwZWVkOiVkR0JpdCBkdXBsZXg6eCV4ICIKLQkJCSJMQSBUeXBlOngleCBQb3J0IFR5cGU6JWQgUG9ydCBOdW1iZXI6JWQgTG9naWNhbCAiCi0JCQkic3BlZWQ6JWRNYnBzIEZhdWx0OiVkXG4iLAorCQkJIjI5MDAgQXN5bmMgRkMvRkNvRSBMaW5rIGV2ZW50IC0gU3BlZWQ6JWRHQml0ICIKKwkJCSJkdXBsZXg6eCV4IExBIFR5cGU6eCV4IFBvcnQgVHlwZTolZCBQb3J0IE51bWJlcjolZCAiCisJCQkiTG9naWNhbCBzcGVlZDolZE1icHMgRmF1bHQ6JWRcbiIsCiAJCQlwaGJhLT5zbGk0X2hiYS5saW5rX3N0YXRlLnNwZWVkLAogCQkJcGhiYS0+c2xpNF9oYmEubGlua19zdGF0ZS50b3BvbG9neSwKIAkJCXBoYmEtPnNsaTRfaGJhLmxpbmtfc3RhdGUuc3RhdHVzLApAQCAtNDkwNiw2ICs0OTA2LDcgQEAKIAl1aW50MTZfdCBycGlfbGltaXQsIGN1cnJfcnBpX3JhbmdlOwogCXN0cnVjdCBscGZjX2RtYWJ1ZiAqZG1hYnVmOwogCXN0cnVjdCBscGZjX3JwaV9oZHIgKnJwaV9oZHI7CisJdWludDMyX3QgcnBpX2NvdW50OwogCiAJcnBpX2xpbWl0ID0gcGhiYS0+c2xpNF9oYmEubWF4X2NmZ19wYXJhbS5ycGlfYmFzZSArCiAJCSAgICBwaGJhLT5zbGk0X2hiYS5tYXhfY2ZnX3BhcmFtLm1heF9ycGkgLSAxOwpAQCAtNDkyMCw3ICs0OTIxLDkgQEAKIAkgKiBhbmQgdG8gYWxsb3cgdGhlIGZ1bGwgbWF4X3JwaSByYW5nZSBwZXIgcG9ydC4KIAkgKi8KIAlpZiAoKGN1cnJfcnBpX3JhbmdlICsgKExQRkNfUlBJX0hEUl9DT1VOVCAtIDEpKSA+IHJwaV9saW1pdCkKLQkJcmV0dXJuIE5VTEw7CisJCXJwaV9jb3VudCA9IHJwaV9saW1pdCAtIGN1cnJfcnBpX3JhbmdlOworCWVsc2UKKwkJcnBpX2NvdW50ID0gTFBGQ19SUElfSERSX0NPVU5UOwogCiAJLyoKIAkgKiBGaXJzdCBhbGxvY2F0ZSB0aGUgcHJvdG9jb2wgaGVhZGVyIHJlZ2lvbiBmb3IgdGhlIHBvcnQuICBUaGUKQEAgLTQ5NjEsNyArNDk2NCw3IEBACiAJICogVGhlIG5leHRfcnBpIHN0b3JlcyB0aGUgbmV4dCBtb2R1bGUtNjQgcnBpIHZhbHVlIHRvIHBvc3QKIAkgKiBpbiBhbnkgc3Vic2VxdWVudCBycGkgbWVtb3J5IHJlZ2lvbiBwb3N0aW5ncy4KIAkgKi8KLQlwaGJhLT5zbGk0X2hiYS5uZXh0X3JwaSArPSBMUEZDX1JQSV9IRFJfQ09VTlQ7CisJcGhiYS0+c2xpNF9oYmEubmV4dF9ycGkgKz0gcnBpX2NvdW50OwogCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJcmV0dXJuIHJwaV9oZHI7CiAKQEAgLTcwMDQsNyArNzAwNyw4IEBACiAJCWxwZmNfc2xpNF9iYXIwX3JlZ2lzdGVyX21lbW1hcChwaGJhLCBpZl90eXBlKTsKIAl9CiAKLQlpZiAocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDIpKSB7CisJaWYgKChpZl90eXBlID09IExQRkNfU0xJX0lOVEZfSUZfVFlQRV8wKSAmJgorCSAgICAocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDIpKSkgewogCQkvKgogCQkgKiBNYXAgU0xJNCBpZiB0eXBlIDAgSEJBIENvbnRyb2wgUmVnaXN0ZXIgYmFzZSB0byBhIGtlcm5lbAogCQkgKiB2aXJ0dWFsIGFkZHJlc3MgYW5kIHNldHVwIHRoZSByZWdpc3RlcnMuCkBAIC03MDIxLDcgKzcwMjUsOCBAQAogCQlscGZjX3NsaTRfYmFyMV9yZWdpc3Rlcl9tZW1tYXAocGhiYSk7CiAJfQogCi0JaWYgKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCA0KSkgeworCWlmICgoaWZfdHlwZSA9PSBMUEZDX1NMSV9JTlRGX0lGX1RZUEVfMCkgJiYKKwkgICAgKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCA0KSkpIHsKIAkJLyoKIAkJICogTWFwIFNMSTQgaWYgdHlwZSAwIEhCQSBEb29yYmVsbCBSZWdpc3RlciBiYXNlIHRvIGEga2VybmVsCiAJCSAqIHZpcnR1YWwgYWRkcmVzcyBhbmQgc2V0dXAgdGhlIHJlZ2lzdGVycy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWJveC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMKaW5kZXggZmJhYjk3My4uZTZjZTkwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMKQEAgLTE3MzYsNyArMTczNiw3IEBACiAJfQogCiAJLyogU2V0dXAgZm9yIHRoZSBub25lLWVtYmVkZGVkIG1ib3ggY29tbWFuZCAqLwotCXBjb3VudCA9IChQQUdFX0FMSUdOKGxlbmd0aCkpL1NMSTRfUEFHRV9TSVpFOworCXBjb3VudCA9IChTTEk0X1BBR0VfQUxJR04obGVuZ3RoKSkvU0xJNF9QQUdFX1NJWkU7CiAJcGNvdW50ID0gKHBjb3VudCA+IExQRkNfU0xJNF9NQlhfU0dFX01BWF9QQUdFUykgPwogCQkJCUxQRkNfU0xJNF9NQlhfU0dFX01BWF9QQUdFUyA6IHBjb3VudDsKIAkvKiBBbGxvY2F0ZSByZWNvcmQgZm9yIGtlZXBpbmcgU0dFIHZpcnR1YWwgYWRkcmVzc2VzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCmluZGV4IGZlN2NjODQuLjg0ZTQ0ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCkBAIC0zMjM4LDkgKzMyMzgsOCBAQAogCWlmICghbHBmY19jbWQpIHsKIAkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9XQVJOSU5HLCBMT0dfRkNQLAogCQkJICIyODczIFNDU0kgTGF5ZXIgSS9PIEFib3J0IFJlcXVlc3QgSU8gQ01QTCBTdGF0dXMgIgotCQkJICJ4JXggSUQgJWQgIgotCQkJICJMVU4gJWQgc251bSAlI2x4XG4iLCByZXQsIGNtbmQtPmRldmljZS0+aWQsCi0JCQkgY21uZC0+ZGV2aWNlLT5sdW4sIGNtbmQtPnNlcmlhbF9udW1iZXIpOworCQkJICJ4JXggSUQgJWQgTFVOICVkXG4iLAorCQkJIHJldCwgY21uZC0+ZGV2aWNlLT5pZCwgY21uZC0+ZGV2aWNlLT5sdW4pOwogCQlyZXR1cm4gU1VDQ0VTUzsKIAl9CiAKQEAgLTMzMTgsMTYgKzMzMTcsMTUgQEAKIAkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19GQ1AsCiAJCQkJICIwNzQ4IGFib3J0IGhhbmRsZXIgdGltZWQgb3V0IHdhaXRpbmcgIgogCQkJCSAiZm9yIGFib3J0IHRvIGNvbXBsZXRlOiByZXQgJSN4LCBJRCAlZCwgIgotCQkJCSAiTFVOICVkLCBzbnVtICUjbHhcbiIsCi0JCQkJIHJldCwgY21uZC0+ZGV2aWNlLT5pZCwgY21uZC0+ZGV2aWNlLT5sdW4sCi0JCQkJIGNtbmQtPnNlcmlhbF9udW1iZXIpOworCQkJCSAiTFVOICVkXG4iLAorCQkJCSByZXQsIGNtbmQtPmRldmljZS0+aWQsIGNtbmQtPmRldmljZS0+bHVuKTsKIAl9CiAKICBvdXQ6CiAJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9XQVJOSU5HLCBMT0dfRkNQLAogCQkJICIwNzQ5IFNDU0kgTGF5ZXIgSS9PIEFib3J0IFJlcXVlc3QgU3RhdHVzIHgleCBJRCAlZCAiCi0JCQkgIkxVTiAlZCBzbnVtICUjbHhcbiIsIHJldCwgY21uZC0+ZGV2aWNlLT5pZCwKLQkJCSBjbW5kLT5kZXZpY2UtPmx1biwgY21uZC0+c2VyaWFsX251bWJlcik7CisJCQkgIkxVTiAlZFxuIiwgcmV0LCBjbW5kLT5kZXZpY2UtPmlkLAorCQkJIGNtbmQtPmRldmljZS0+bHVuKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYwppbmRleCBkYWNhYmJlLi5mZDU4MzVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMKQEAgLTMwNDAsNyArMzA0MCw3IEBACiAJbGlzdF9hZGRfdGFpbCgmcnNwaW9jYnAtPmxpc3QsICYocHJpbmctPmlvY2JfY29udGludWVxKSk7CiAJcHJpbmctPmlvY2JfY29udGludWVxX2NudCsrOwogCi0JLyogTm93LCBkZXRlcm1pbmUgd2hldGVociB0aGUgbGlzdCBpcyBjb21wbGV0ZWQgZm9yIHByb2Nlc3NpbmcgKi8KKwkvKiBOb3csIGRldGVybWluZSB3aGV0aGVyIHRoZSBsaXN0IGlzIGNvbXBsZXRlZCBmb3IgcHJvY2Vzc2luZyAqLwogCWlyc3AgPSAmcnNwaW9jYnAtPmlvY2I7CiAJaWYgKGlyc3AtPnVscExlKSB7CiAJCS8qCkBAIC00NzY5LDggKzQ3NjksNyBAQAogCWVsc2UKIAkJcGhiYS0+aGJhX2ZsYWcgJj0gfkhCQV9GSVBfU1VQUE9SVDsKIAotCWlmIChwaGJhLT5zbGlfcmV2ICE9IExQRkNfU0xJX1JFVjQgfHwKLQkgICAgIShwaGJhLT5oYmFfZmxhZyAmIEhCQV9GQ09FX01PREUpKSB7CisJaWYgKHBoYmEtPnNsaV9yZXYgIT0gTFBGQ19TTElfUkVWNCkgewogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19NQk9YIHwgTE9HX1NMSSwKIAkJCSIwMzc2IFJFQURfUkVWIEVycm9yLiBTTEkgTGV2ZWwgJWQgIgogCQkJIkZDb0UgZW5hYmxlZCAlZFxuIiwKQEAgLTUwMTgsMTAgKzUwMTcsMTEgQEAKIAkJbHBmY19yZWdfZmNmaShwaGJhLCBtYm94cSk7CiAJCW1ib3hxLT52cG9ydCA9IHBoYmEtPnBwb3J0OwogCQlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgbWJveHEsIE1CWF9QT0xMKTsKLQkJaWYgKHJjID09IE1CWF9TVUNDRVNTKQotCQkJcmMgPSAwOwotCQllbHNlCisJCWlmIChyYyAhPSBNQlhfU1VDQ0VTUykKIAkJCWdvdG8gb3V0X3Vuc2V0X3F1ZXVlOworCQlyYyA9IDA7CisJCXBoYmEtPmZjZi5mY2ZpID0gYmZfZ2V0KGxwZmNfcmVnX2ZjZmlfZmNmaSwKKwkJCQkJJm1ib3hxLT51Lm1xZS51bi5yZWdfZmNmaSk7CiAJfQogCS8qCiAJICogVGhlIHBvcnQgaXMgcmVhZHksIHNldCB0aGUgaG9zdCdzIGxpbmsgc3RhdGUgdG8gTElOS19ET1dOCkBAIC02NDAyLDYgKzY0MDIsNyBAQAogCXVpbnQzMl90IGVsc19pZCA9IExQRkNfRUxTX0lEX0RFRkFVTFQ7CiAJaW50IG51bUJkZXMsIGk7CiAJc3RydWN0IHVscF9iZGU2NCBiZGU7CisJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHA7CiAKIAlmaXAgPSBwaGJhLT5oYmFfZmxhZyAmIEhCQV9GSVBfU1VQUE9SVDsKIAkvKiBUaGUgZmNwIGNvbW1hbmRzIHdpbGwgc2V0IGNvbW1hbmQgdHlwZSAqLwpAQCAtNjQ0Nyw2ICs2NDQ4LDcgQEAKIAogCXN3aXRjaCAoaW9jYnEtPmlvY2IudWxwQ29tbWFuZCkgewogCWNhc2UgQ01EX0VMU19SRVFVRVNUNjRfQ1I6CisJCW5kbHAgPSAoc3RydWN0IGxwZmNfbm9kZWxpc3QgKilpb2NicS0+Y29udGV4dDE7CiAJCWlmICghaW9jYnEtPmlvY2IudWxwTGUpIHsKIAkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX1NMSSwKIAkJCQkiMjAwNyBPbmx5IExpbWl0ZWQgRWRpdGlvbiBjbWQgRm9ybWF0IgpAQCAtNjQ3Miw2ICs2NDc0LDcgQEAKIAkJCWVsc19pZCA9ICgoaW9jYnEtPmlvY2JfZmxhZyAmIExQRkNfRklQX0VMU19JRF9NQVNLKQogCQkJCQk+PiBMUEZDX0ZJUF9FTFNfSURfU0hJRlQpOwogCQl9CisJCWJmX3NldCh3cWVfdGVtcF9ycGksICZ3cWUtPmVsc19yZXEud3FlX2NvbSwgbmRscC0+bmxwX3JwaSk7CiAJCWJmX3NldCh3cWVfZWxzX2lkLCAmd3FlLT5lbHNfcmVxLndxZV9jb20sIGVsc19pZCk7CiAJCWJmX3NldCh3cWVfZGJkZSwgJndxZS0+ZWxzX3JlcS53cWVfY29tLCAxKTsKIAkJYmZfc2V0KHdxZV9pb2QsICZ3cWUtPmVsc19yZXEud3FlX2NvbSwgTFBGQ19XUUVfSU9EX1JFQUQpOwpAQCAtNjYwNCw2ICs2NjA3LDcgQEAKIAkJY29tbWFuZF90eXBlID0gT1RIRVJfQ09NTUFORDsKIAlicmVhazsKIAljYXNlIENNRF9YTUlUX0VMU19SU1A2NF9DWDoKKwkJbmRscCA9IChzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKWlvY2JxLT5jb250ZXh0MTsKIAkJLyogd29yZHMwLTIgQkRFIG1lbWNweSAqLwogCQkvKiB3b3JkMyBpb2NiPWlvdGFnMzIgd3FlPXJlc3BvbnNlX3BheWxvYWRfbGVuICovCiAJCXdxZS0+eG1pdF9lbHNfcnNwLnJlc3BvbnNlX3BheWxvYWRfbGVuID0geG1pdF9sZW47CkBAIC02NjI2LDYgKzY2MzAsNyBAQAogCQliZl9zZXQod3FlX2xlbmxvYywgJndxZS0+eG1pdF9lbHNfcnNwLndxZV9jb20sCiAJCSAgICAgICBMUEZDX1dRRV9MRU5MT0NfV09SRDMpOwogCQliZl9zZXQod3FlX2ViZGVfY250LCAmd3FlLT54bWl0X2Vsc19yc3Aud3FlX2NvbSwgMCk7CisJCWJmX3NldCh3cWVfcnNwX3RlbXBfcnBpLCAmd3FlLT54bWl0X2Vsc19yc3AsIG5kbHAtPm5scF9ycGkpOwogCQljb21tYW5kX3R5cGUgPSBPVEhFUl9DT01NQU5EOwogCWJyZWFrOwogCWNhc2UgQ01EX0NMT1NFX1hSSV9DTjoKQEAgLTEwNTIyLDggKzEwNTI3LDggQEAKIAliZl9zZXQobHBmY19tYm94X2hkcl92ZXJzaW9uLCAmc2hkci0+cmVxdWVzdCwKIAkgICAgICAgcGhiYS0+c2xpNF9oYmEucGNfc2xpNF9wYXJhbXMuY3F2KTsKIAlpZiAocGhiYS0+c2xpNF9oYmEucGNfc2xpNF9wYXJhbXMuY3F2ID09IExQRkNfUV9DUkVBVEVfVkVSU0lPTl8yKSB7Ci0JCWJmX3NldChscGZjX21ieF9jcV9jcmVhdGVfcGFnZV9zaXplLCAmY3FfY3JlYXRlLT51LnJlcXVlc3QsCi0JCSAgICAgICAoUEFHRV9TSVpFL1NMSTRfUEFHRV9TSVpFKSk7CisJCS8qIEZXIG9ubHkgc3VwcG9ydHMgMS4gU2hvdWxkIGJlIFBBR0VfU0laRS9TTEk0X1BBR0VfU0laRSAqLworCQliZl9zZXQobHBmY19tYnhfY3FfY3JlYXRlX3BhZ2Vfc2l6ZSwgJmNxX2NyZWF0ZS0+dS5yZXF1ZXN0LCAxKTsKIAkJYmZfc2V0KGxwZmNfY3FfZXFfaWRfMiwgJmNxX2NyZWF0ZS0+dS5yZXF1ZXN0LmNvbnRleHQsCiAJCSAgICAgICBlcS0+cXVldWVfaWQpOwogCX0gZWxzZSB7CkBAIC0xMDk2Nyw2ICsxMDk3MiwxMiBAQAogCQkgICAgICAgJnJxX2NyZWF0ZS0+dS5yZXF1ZXN0LmNvbnRleHQsCiAJCSAgICAgICBocnEtPmVudHJ5X2NvdW50KTsKIAkJcnFfY3JlYXRlLT51LnJlcXVlc3QuY29udGV4dC5idWZmZXJfc2l6ZSA9IExQRkNfSERSX0JVRl9TSVpFOworCQliZl9zZXQobHBmY19ycV9jb250ZXh0X3JxZV9zaXplLAorCQkgICAgICAgJnJxX2NyZWF0ZS0+dS5yZXF1ZXN0LmNvbnRleHQsCisJCSAgICAgICBMUEZDX1JRRV9TSVpFXzgpOworCQliZl9zZXQobHBmY19ycV9jb250ZXh0X3BhZ2Vfc2l6ZSwKKwkJICAgICAgICZycV9jcmVhdGUtPnUucmVxdWVzdC5jb250ZXh0LAorCQkgICAgICAgKFBBR0VfU0laRS9TTEk0X1BBR0VfU0laRSkpOwogCX0gZWxzZSB7CiAJCXN3aXRjaCAoaHJxLT5lbnRyeV9jb3VudCkgewogCQlkZWZhdWx0OgpAQCAtMTEwNDIsOSArMTEwNTMsMTIgQEAKIAkgICAgICAgcGhiYS0+c2xpNF9oYmEucGNfc2xpNF9wYXJhbXMucnF2KTsKIAlpZiAocGhiYS0+c2xpNF9oYmEucGNfc2xpNF9wYXJhbXMucnF2ID09IExQRkNfUV9DUkVBVEVfVkVSU0lPTl8xKSB7CiAJCWJmX3NldChscGZjX3JxX2NvbnRleHRfcnFlX2NvdW50XzEsCi0JCSAgICAgICAmcnFfY3JlYXRlLT51LnJlcXVlc3QuY29udGV4dCwKLQkJICAgICAgIGhycS0+ZW50cnlfY291bnQpOworCQkgICAgICAgJnJxX2NyZWF0ZS0+dS5yZXF1ZXN0LmNvbnRleHQsIGhycS0+ZW50cnlfY291bnQpOwogCQlycV9jcmVhdGUtPnUucmVxdWVzdC5jb250ZXh0LmJ1ZmZlcl9zaXplID0gTFBGQ19EQVRBX0JVRl9TSVpFOworCQliZl9zZXQobHBmY19ycV9jb250ZXh0X3JxZV9zaXplLCAmcnFfY3JlYXRlLT51LnJlcXVlc3QuY29udGV4dCwKKwkJICAgICAgIExQRkNfUlFFX1NJWkVfOCk7CisJCWJmX3NldChscGZjX3JxX2NvbnRleHRfcGFnZV9zaXplLCAmcnFfY3JlYXRlLT51LnJlcXVlc3QuY29udGV4dCwKKwkJICAgICAgIChQQUdFX1NJWkUvU0xJNF9QQUdFX1NJWkUpKTsKIAl9IGVsc2UgewogCQlzd2l0Y2ggKGRycS0+ZW50cnlfY291bnQpIHsKIAkJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdmVyc2lvbi5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192ZXJzaW9uLmgKaW5kZXggMjQwNGQxZC4uYzAzOTIxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192ZXJzaW9uLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192ZXJzaW9uLmgKQEAgLTE4LDcgKzE4LDcgQEAKICAqIGluY2x1ZGVkIHdpdGggdGhpcyBwYWNrYWdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2RlZmluZSBMUEZDX0RSSVZFUl9WRVJTSU9OICI4LjMuMjIiCisjZGVmaW5lIExQRkNfRFJJVkVSX1ZFUlNJT04gIjguMy4yMyIKICNkZWZpbmUgTFBGQ19EUklWRVJfTkFNRQkJImxwZmMiCiAjZGVmaW5lIExQRkNfU1BfRFJJVkVSX0hBTkRMRVJfTkFNRQkibHBmYzpzcCIKICNkZWZpbmUgTFBGQ19GUF9EUklWRVJfSEFORExFUl9OQU1FCSJscGZjOmZwIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQuYwppbmRleCBmMjY4NGRkLi41YzE3NzY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQuYworKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQuYwpAQCAtMTQ2OSw4ICsxNDY5LDggQEAKIAkJCWlmKCBzY2ItPnN0YXRlICYgU0NCX0FCT1JUICkgewogCiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCSJtZWdhcmFpZDogYWJvcnRlZCBjbWQgJWx4WyV4XSBjb21wbGV0ZS5cbiIsCi0JCQkJCXNjYi0+Y21kLT5zZXJpYWxfbnVtYmVyLCBzY2ItPmlkeCk7CisJCQkJIm1lZ2FyYWlkOiBhYm9ydGVkIGNtZCBbJXhdIGNvbXBsZXRlLlxuIiwKKwkJCQkJc2NiLT5pZHgpOwogCiAJCQkJc2NiLT5jbWQtPnJlc3VsdCA9IChESURfQUJPUlQgPDwgMTYpOwogCkBAIC0xNDg4LDggKzE0ODgsOCBAQAogCQkJaWYoIHNjYi0+c3RhdGUgJiBTQ0JfUkVTRVQgKSB7CiAKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJIm1lZ2FyYWlkOiByZXNldCBjbWQgJWx4WyV4XSBjb21wbGV0ZS5cbiIsCi0JCQkJCXNjYi0+Y21kLT5zZXJpYWxfbnVtYmVyLCBzY2ItPmlkeCk7CisJCQkJIm1lZ2FyYWlkOiByZXNldCBjbWQgWyV4XSBjb21wbGV0ZS5cbiIsCisJCQkJCXNjYi0+aWR4KTsKIAogCQkJCXNjYi0+Y21kLT5yZXN1bHQgPSAoRElEX1JFU0VUIDw8IDE2KTsKIApAQCAtMTk1OCw4ICsxOTU4LDggQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCSpwb3MsICpuZXh0OwogCXNjYl90CQkJKnNjYjsKIAotCXByaW50ayhLRVJOX1dBUk5JTkcgIm1lZ2FyYWlkOiAlcy0lbHggY21kPSV4IDxjPSVkIHQ9JWQgbD0lZD5cbiIsCi0JICAgICAoYW9yID09IFNDQl9BQk9SVCk/ICJBQk9SVElORyI6IlJFU0VUIiwgY21kLT5zZXJpYWxfbnVtYmVyLAorCXByaW50ayhLRVJOX1dBUk5JTkcgIm1lZ2FyYWlkOiAlcyBjbWQ9JXggPGM9JWQgdD0lZCBsPSVkPlxuIiwKKwkgICAgIChhb3IgPT0gU0NCX0FCT1JUKT8gIkFCT1JUSU5HIjoiUkVTRVQiLAogCSAgICAgY21kLT5jbW5kWzBdLCBjbWQtPmRldmljZS0+Y2hhbm5lbCwgCiAJICAgICBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pOwogCkBAIC0xOTgzLDkgKzE5ODMsOSBAQAogCQkJaWYoIHNjYi0+c3RhdGUgJiBTQ0JfSVNTVUVEICkgewogCiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCQkibWVnYXJhaWQ6ICVzLSVseFsleF0sIGZ3IG93bmVyLlxuIiwKKwkJCQkJIm1lZ2FyYWlkOiAlc1sleF0sIGZ3IG93bmVyLlxuIiwKIAkJCQkJKGFvcj09U0NCX0FCT1JUKSA/ICJBQk9SVElORyI6IlJFU0VUIiwKLQkJCQkJY21kLT5zZXJpYWxfbnVtYmVyLCBzY2ItPmlkeCk7CisJCQkJCXNjYi0+aWR4KTsKIAogCQkJCXJldHVybiBGQUxTRTsKIAkJCX0KQEAgLTE5OTYsOSArMTk5Niw5IEBACiAJCQkJICogbGlzdAogCQkJCSAqLwogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCQkJIm1lZ2FyYWlkOiAlcy0lbHhbJXhdLCBkcml2ZXIgb3duZXIuXG4iLAorCQkJCQkibWVnYXJhaWQ6ICVzLVsleF0sIGRyaXZlciBvd25lci5cbiIsCiAJCQkJCShhb3I9PVNDQl9BQk9SVCkgPyAiQUJPUlRJTkciOiJSRVNFVCIsCi0JCQkJCWNtZC0+c2VyaWFsX251bWJlciwgc2NiLT5pZHgpOworCQkJCQlzY2ItPmlkeCk7CiAKIAkJCQltZWdhX2ZyZWVfc2NiKGFkYXB0ZXIsIHNjYik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tYm94LmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfbWJveC5jCmluZGV4IDFkYmEzMjguLjJlNjYxOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tYm94LmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21ib3guYwpAQCAtMjMxNSw4ICsyMzE1LDggQEAKIAkJLy8gV2FzIGFuIGFib3J0IGlzc3VlZCBmb3IgdGhpcyBjb21tYW5kIGVhcmxpZXIKIAkJaWYgKHNjYi0+c3RhdGUgJiBTQ0JfQUJPUlQpIHsKIAkJCWNvbl9sb2coQ0xfQU5OLCAoS0VSTl9OT1RJQ0UKLQkJCSJtZWdhcmFpZDogYWJvcnRlZCBjbWQgJWx4WyV4XSBjb21wbGV0ZWRcbiIsCi0JCQkJc2NwLT5zZXJpYWxfbnVtYmVyLCBzY2ItPnNubykpOworCQkJIm1lZ2FyYWlkOiBhYm9ydGVkIGNtZCBbJXhdIGNvbXBsZXRlZFxuIiwKKwkJCQlzY2ItPnNubykpOwogCQl9CiAKIAkJLyoKQEAgLTI0NzIsOCArMjQ3Miw4IEBACiAJcmFpZF9kZXYJPSBBREFQMlJBSURERVYoYWRhcHRlcik7CiAKIAljb25fbG9nKENMX0FOTiwgKEtFUk5fV0FSTklORwotCQkibWVnYXJhaWQ6IGFib3J0aW5nLSVsZCBjbWQ9JXggPGM9JWQgdD0lZCBsPSVkPlxuIiwKLQkJc2NwLT5zZXJpYWxfbnVtYmVyLCBzY3AtPmNtbmRbMF0sIFNDUDJDSEFOTkVMKHNjcCksCisJCSJtZWdhcmFpZDogYWJvcnRpbmcgY21kPSV4IDxjPSVkIHQ9JWQgbD0lZD5cbiIsCisJCXNjcC0+Y21uZFswXSwgU0NQMkNIQU5ORUwoc2NwKSwKIAkJU0NQMlRBUkdFVChzY3ApLCBTQ1AyTFVOKHNjcCkpKTsKIAogCS8vIElmIEZXIGhhcyBzdG9wcGVkIHJlc3BvbmRpbmcsIHNpbXBseSByZXR1cm4gZmFpbHVyZQpAQCAtMjQ5Niw5ICsyNDk2LDggQEAKIAkJCWxpc3RfZGVsX2luaXQoJnNjYi0+bGlzdCk7CS8vIGZyb20gY29tcGxldGVkIGxpc3QKIAogCQkJY29uX2xvZyhDTF9BTk4sIChLRVJOX1dBUk5JTkcKLQkJCSJtZWdhcmFpZDogJWxkOiVkWyVkOiVkXSwgYWJvcnQgZnJvbSBjb21wbGV0ZWQgbGlzdFxuIiwKLQkJCQlzY3AtPnNlcmlhbF9udW1iZXIsIHNjYi0+c25vLAotCQkJCXNjYi0+ZGV2X2NoYW5uZWwsIHNjYi0+ZGV2X3RhcmdldCkpOworCQkJIm1lZ2FyYWlkOiAlZFslZDolZF0sIGFib3J0IGZyb20gY29tcGxldGVkIGxpc3RcbiIsCisJCQkJc2NiLT5zbm8sIHNjYi0+ZGV2X2NoYW5uZWwsIHNjYi0+ZGV2X3RhcmdldCkpOwogCiAJCQlzY3AtPnJlc3VsdCA9IChESURfQUJPUlQgPDwgMTYpOwogCQkJc2NwLT5zY3NpX2RvbmUoc2NwKTsKQEAgLTI1MjcsOSArMjUyNiw4IEBACiAJCQlBU1NFUlQoIShzY2ItPnN0YXRlICYgU0NCX0lTU1VFRCkpOwogCiAJCQljb25fbG9nKENMX0FOTiwgKEtFUk5fV0FSTklORwotCQkJCSJtZWdhcmFpZCBhYm9ydDogJWxkWyVkOiVkXSwgZHJpdmVyIG93bmVyXG4iLAotCQkJCXNjcC0+c2VyaWFsX251bWJlciwgc2NiLT5kZXZfY2hhbm5lbCwKLQkJCQlzY2ItPmRldl90YXJnZXQpKTsKKwkJCQkibWVnYXJhaWQgYWJvcnQ6IFslZDolZF0sIGRyaXZlciBvd25lclxuIiwKKwkJCQlzY2ItPmRldl9jaGFubmVsLCBzY2ItPmRldl90YXJnZXQpKTsKIAogCQkJc2NwLT5yZXN1bHQgPSAoRElEX0FCT1JUIDw8IDE2KTsKIAkJCXNjcC0+c2NzaV9kb25lKHNjcCk7CkBAIC0yNTYwLDI1ICsyNTU4LDIxIEBACiAKIAkJCWlmICghKHNjYi0+c3RhdGUgJiBTQ0JfSVNTVUVEKSkgewogCQkJCWNvbl9sb2coQ0xfQU5OLCAoS0VSTl9XQVJOSU5HCi0JCQkJIm1lZ2FyYWlkIGFib3J0OiAlbGQlZFslZDolZF0sIGludmFsaWQgc3RhdGVcbiIsCi0JCQkJc2NwLT5zZXJpYWxfbnVtYmVyLCBzY2ItPnNubywgc2NiLT5kZXZfY2hhbm5lbCwKLQkJCQlzY2ItPmRldl90YXJnZXQpKTsKKwkJCQkibWVnYXJhaWQgYWJvcnQ6ICVkWyVkOiVkXSwgaW52YWxpZCBzdGF0ZVxuIiwKKwkJCQlzY2ItPnNubywgc2NiLT5kZXZfY2hhbm5lbCwgc2NiLT5kZXZfdGFyZ2V0KSk7CiAJCQkJQlVHKCk7CiAJCQl9CiAJCQllbHNlIHsKIAkJCQljb25fbG9nKENMX0FOTiwgKEtFUk5fV0FSTklORwotCQkJCSJtZWdhcmFpZCBhYm9ydDogJWxkOiVkWyVkOiVkXSwgZncgb3duZXJcbiIsCi0JCQkJc2NwLT5zZXJpYWxfbnVtYmVyLCBzY2ItPnNubywgc2NiLT5kZXZfY2hhbm5lbCwKLQkJCQlzY2ItPmRldl90YXJnZXQpKTsKKwkJCQkibWVnYXJhaWQgYWJvcnQ6ICVkWyVkOiVkXSwgZncgb3duZXJcbiIsCisJCQkJc2NiLT5zbm8sIHNjYi0+ZGV2X2NoYW5uZWwsIHNjYi0+ZGV2X3RhcmdldCkpOwogCQkJfQogCQl9CiAJfQogCXNwaW5fdW5sb2NrX2lycSgmYWRhcHRlci0+bG9jayk7CiAKIAlpZiAoIWZvdW5kKSB7Ci0JCWNvbl9sb2coQ0xfQU5OLCAoS0VSTl9XQVJOSU5HCi0JCQkibWVnYXJhaWQgYWJvcnQ6IHNjc2kgY21kOiVsZCwgZG8gbm93IG93blxuIiwKLQkJCXNjcC0+c2VyaWFsX251bWJlcikpOworCQljb25fbG9nKENMX0FOTiwgKEtFUk5fV0FSTklORyAibWVnYXJhaWQgYWJvcnQ6IGRvIG5vdyBvd25cbiIpKTsKIAogCQkvLyBGSVhNRTogU2hvdWxkIHRoZXJlIGJlIGEgY2FsbGJhY2sgZm9yIHRoaXMgY29tbWFuZD8KIAkJcmV0dXJuIFNVQ0NFU1M7CkBAIC0yNjQ5LDkgKzI2NDMsOCBAQAogCQl9IGVsc2UgewogCQkJaWYgKHNjYi0+c2NwID09IHNjcCkgewkvLyBGb3VuZCBjb21tYW5kCiAJCQkJY29uX2xvZyhDTF9BTk4sIChLRVJOX1dBUk5JTkcKLQkJCQkJIm1lZ2FyYWlkOiAlbGQ6JWRbJWQ6JWRdLCByZXNldCBmcm9tIHBlbmRpbmcgbGlzdFxuIiwKLQkJCQkJc2NwLT5zZXJpYWxfbnVtYmVyLCBzY2ItPnNubywKLQkJCQkJc2NiLT5kZXZfY2hhbm5lbCwgc2NiLT5kZXZfdGFyZ2V0KSk7CisJCQkJCSJtZWdhcmFpZDogJWRbJWQ6JWRdLCByZXNldCBmcm9tIHBlbmRpbmcgbGlzdFxuIiwKKwkJCQkJc2NiLT5zbm8sIHNjYi0+ZGV2X2NoYW5uZWwsIHNjYi0+ZGV2X3RhcmdldCkpOwogCQkJfSBlbHNlIHsKIAkJCQljb25fbG9nKENMX0FOTiwgKEtFUk5fV0FSTklORwogCQkJCSJtZWdhcmFpZDogSU8gcGFja2V0IHdpdGggJWRbJWQ6JWRdIGJlaW5nIHJlc2V0XG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19iYXNlLmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2Jhc2UuYwppbmRleCA2NmQ0Y2VhLi44OWM2MjNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2Jhc2UuYworKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2Jhc2UuYwpAQCAtMTc1MSwxMCArMTc1MSw5IEBACiAJCQlsaXN0X2RlbF9pbml0KCZyZXNldF9jbWQtPmxpc3QpOwogCQkJaWYgKHJlc2V0X2NtZC0+c2NtZCkgewogCQkJCXJlc2V0X2NtZC0+c2NtZC0+cmVzdWx0ID0gRElEX1JFU0VUIDw8IDE2OwotCQkJCXByaW50ayhLRVJOX05PVElDRSAiJWQ6JXAgcmVzZXQgWyUwMnhdLCAlI2x4XG4iLAorCQkJCXByaW50ayhLRVJOX05PVElDRSAiJWQ6JXAgcmVzZXQgWyUwMnhdXG4iLAogCQkJCQlyZXNldF9pbmRleCwgcmVzZXRfY21kLAotCQkJCQlyZXNldF9jbWQtPnNjbWQtPmNtbmRbMF0sCi0JCQkJCXJlc2V0X2NtZC0+c2NtZC0+c2VyaWFsX251bWJlcik7CisJCQkJCXJlc2V0X2NtZC0+c2NtZC0+Y21uZFswXSk7CiAKIAkJCQlyZXNldF9jbWQtPnNjbWQtPnNjc2lfZG9uZShyZXNldF9jbWQtPnNjbWQpOwogCQkJCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgcmVzZXRfY21kKTsKQEAgLTE4NzksOCArMTg3OCw4IEBACiAKIAlpbnN0YW5jZSA9IChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqKXNjbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7CiAKLQlzY21kX3ByaW50ayhLRVJOX05PVElDRSwgc2NtZCwgIm1lZ2FzYXM6IFJFU0VUIC0lbGQgY21kPSV4IHJldHJpZXM9JXhcbiIsCi0JCSBzY21kLT5zZXJpYWxfbnVtYmVyLCBzY21kLT5jbW5kWzBdLCBzY21kLT5yZXRyaWVzKTsKKwlzY21kX3ByaW50ayhLRVJOX05PVElDRSwgc2NtZCwgIm1lZ2FzYXM6IFJFU0VUIGNtZD0leCByZXRyaWVzPSV4XG4iLAorCQkgc2NtZC0+Y21uZFswXSwgc2NtZC0+cmV0cmllcyk7CiAKIAlpZiAoaW5zdGFuY2UtPmFkcHJlY292ZXJ5ID09IE1FR0FTQVNfSFdfQ1JJVElDQUxfRVJST1IpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJtZWdhc2FzOiBjYW5ub3QgcmVjb3ZlciBmcm9tIHByZXZpb3VzIHJlc2V0ICIKQEAgLTIzNDksOSArMjM0OCw5IEBACiAJCQkJCQkJY21kLT5mcmFtZV9waHlzX2FkZHIgLAogCQkJCQkJCTAsIGluc3RhbmNlLT5yZWdfc2V0KTsKIAkJfSBlbHNlIGlmIChjbWQtPnNjbWQpIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSAibWVnYXNhczogJXAgc2NzaSBjbWQgWyUwMnhdLCUjbHgiCisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FzYXM6ICVwIHNjc2kgY21kIFslMDJ4XSIKIAkJCSJkZXRlY3RlZCBvbiB0aGUgaW50ZXJuYWwgcXVldWUsIGlzc3VlIGFnYWluLlxuIiwKLQkJCWNtZCwgY21kLT5zY21kLT5jbW5kWzBdLCBjbWQtPnNjbWQtPnNlcmlhbF9udW1iZXIpOworCQkJY21kLCBjbWQtPnNjbWQtPmNtbmRbMF0pOwogCiAJCQlhdG9taWNfaW5jKCZpbnN0YW5jZS0+Zndfb3V0c3RhbmRpbmcpOwogCQkJaW5zdGFuY2UtPmluc3RhbmNldC0+ZmlyZV9jbWQoaW5zdGFuY2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVzaC5jIGIvZHJpdmVycy9zY3NpL21lc2guYwppbmRleCAxOTdhYTFiLi40OTQ0NzQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVzaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tZXNoLmMKQEAgLTQxNSw4ICs0MTUsNyBAQAogI2lmIDEKIAlpZiAoREVCVUdfVEFSR0VUKGNtZCkpIHsKIAkJaW50IGk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJtZXNoX3N0YXJ0OiAlcCBzZXI9JWx1IHRndD0lZCBjbWQ9IiwKLQkJICAgICAgIGNtZCwgY21kLT5zZXJpYWxfbnVtYmVyLCBpZCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJtZXNoX3N0YXJ0OiAlcCB0Z3Q9JWQgY21kPSIsIGNtZCwgaWQpOwogCQlmb3IgKGkgPSAwOyBpIDwgY21kLT5jbWRfbGVuOyArK2kpCiAJCQlwcmludGsoIiAleCIsIGNtZC0+Y21uZFtpXSk7CiAJCXByaW50aygiIHVzZV9zZz0lZCBidWZmZXI9JXAgYnVmZmxlbj0ldVxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMKaW5kZXggMzM0NjM1Ny4uZWZhMDI1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMKQEAgLTUyMiw3ICs1MjIsOCBAQAogCQlkZXNjID0gIkRldmljZSBTdGF0dXMgQ2hhbmdlIjsKIAkJYnJlYWs7CiAJY2FzZSBNUEkyX0VWRU5UX0lSX09QRVJBVElPTl9TVEFUVVM6Ci0JCWRlc2MgPSAiSVIgT3BlcmF0aW9uIFN0YXR1cyI7CisJCWlmICghaW9jLT5oaWRlX2lyX21zZykKKwkJCWRlc2MgPSAiSVIgT3BlcmF0aW9uIFN0YXR1cyI7CiAJCWJyZWFrOwogCWNhc2UgTVBJMl9FVkVOVF9TQVNfRElTQ09WRVJZOgogCXsKQEAgLTU1MywxNiArNTU0LDIwIEBACiAJCWRlc2MgPSAiU0FTIEVuY2xvc3VyZSBEZXZpY2UgU3RhdHVzIENoYW5nZSI7CiAJCWJyZWFrOwogCWNhc2UgTVBJMl9FVkVOVF9JUl9WT0xVTUU6Ci0JCWRlc2MgPSAiSVIgVm9sdW1lIjsKKwkJaWYgKCFpb2MtPmhpZGVfaXJfbXNnKQorCQkJZGVzYyA9ICJJUiBWb2x1bWUiOwogCQlicmVhazsKIAljYXNlIE1QSTJfRVZFTlRfSVJfUEhZU0lDQUxfRElTSzoKLQkJZGVzYyA9ICJJUiBQaHlzaWNhbCBEaXNrIjsKKwkJaWYgKCFpb2MtPmhpZGVfaXJfbXNnKQorCQkJZGVzYyA9ICJJUiBQaHlzaWNhbCBEaXNrIjsKIAkJYnJlYWs7CiAJY2FzZSBNUEkyX0VWRU5UX0lSX0NPTkZJR1VSQVRJT05fQ0hBTkdFX0xJU1Q6Ci0JCWRlc2MgPSAiSVIgQ29uZmlndXJhdGlvbiBDaGFuZ2UgTGlzdCI7CisJCWlmICghaW9jLT5oaWRlX2lyX21zZykKKwkJCWRlc2MgPSAiSVIgQ29uZmlndXJhdGlvbiBDaGFuZ2UgTGlzdCI7CiAJCWJyZWFrOwogCWNhc2UgTVBJMl9FVkVOVF9MT0dfRU5UUllfQURERUQ6Ci0JCWRlc2MgPSAiTG9nIEVudHJ5IEFkZGVkIjsKKwkJaWYgKCFpb2MtPmhpZGVfaXJfbXNnKQorCQkJZGVzYyA9ICJMb2cgRW50cnkgQWRkZWQiOwogCQlicmVhazsKIAl9CiAKQEAgLTYxNiw3ICs2MjEsMTAgQEAKIAkJb3JpZ2luYXRvcl9zdHIgPSAiUEwiOwogCQlicmVhazsKIAljYXNlIDI6Ci0JCW9yaWdpbmF0b3Jfc3RyID0gIklSIjsKKwkJaWYgKCFpb2MtPmhpZGVfaXJfbXNnKQorCQkJb3JpZ2luYXRvcl9zdHIgPSAiSVIiOworCQllbHNlCisJCQlvcmlnaW5hdG9yX3N0ciA9ICJXYXJwRHJpdmUiOwogCQlicmVhazsKIAl9CiAKQEAgLTE1MDgsNiArMTUxNiw3IEBACiAJCX0KIAkJaW9jLT5zY3NpX2xvb2t1cFtpXS5jYl9pZHggPSAweEZGOwogCQlpb2MtPnNjc2lfbG9va3VwW2ldLnNjbWQgPSBOVUxMOworCQlpb2MtPnNjc2lfbG9va3VwW2ldLmRpcmVjdF9pbyA9IDA7CiAJCWxpc3RfYWRkX3RhaWwoJmlvYy0+c2NzaV9sb29rdXBbaV0udHJhY2tlcl9saXN0LAogCQkgICAgJmlvYy0+ZnJlZV9saXN0KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CkBAIC0xODQ0LDEwICsxODUzLDEyIEBACiAJcHJpbnRrKCIpLCAiKTsKIAlwcmludGsoIkNhcGFiaWxpdGllcz0oIik7CiAKLQlpZiAoaW9jLT5mYWN0cy5JT0NDYXBhYmlsaXRpZXMgJgotCSAgICBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfSU5URUdSQVRFRF9SQUlEKSB7Ci0JCXByaW50aygiUmFpZCIpOwotCQlpKys7CisJaWYgKCFpb2MtPmhpZGVfaXJfbXNnKSB7CisJCWlmIChpb2MtPmZhY3RzLklPQ0NhcGFiaWxpdGllcyAmCisJCSAgICBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfSU5URUdSQVRFRF9SQUlEKSB7CisJCQlwcmludGsoIlJhaWQiKTsKKwkJCWkrKzsKKwkJfQogCX0KIAogCWlmIChpb2MtPmZhY3RzLklPQ0NhcGFiaWxpdGllcyAmIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9UTFIpIHsKQEAgLTM2ODAsNiArMzY5MSw3IEBACiAJdTMyIHJlcGx5X2FkZHJlc3M7CiAJdTE2IHNtaWQ7CiAJc3RydWN0IF90cl9saXN0ICpkZWxheWVkX3RyLCAqZGVsYXllZF90cl9uZXh0OworCXU4IGhpZGVfZmxhZzsKIAogCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzXG4iLCBpb2MtPm5hbWUsCiAJICAgIF9fZnVuY19fKSk7CkBAIC0zNzA2LDYgKzM3MTgsNyBAQAogCQlpb2MtPnNjc2lfbG9va3VwW2ldLmNiX2lkeCA9IDB4RkY7CiAJCWlvYy0+c2NzaV9sb29rdXBbaV0uc21pZCA9IHNtaWQ7CiAJCWlvYy0+c2NzaV9sb29rdXBbaV0uc2NtZCA9IE5VTEw7CisJCWlvYy0+c2NzaV9sb29rdXBbaV0uZGlyZWN0X2lvID0gMDsKIAkJbGlzdF9hZGRfdGFpbCgmaW9jLT5zY3NpX2xvb2t1cFtpXS50cmFja2VyX2xpc3QsCiAJCSAgICAmaW9jLT5mcmVlX2xpc3QpOwogCX0KQEAgLTM3NjYsNiArMzc3OSwxNSBAQAogCWlmIChzbGVlcF9mbGFnID09IENBTl9TTEVFUCkKIAkJX2Jhc2Vfc3RhdGljX2NvbmZpZ19wYWdlcyhpb2MpOwogCisJaWYgKGlvYy0+d2FpdF9mb3JfcG9ydF9lbmFibGVfdG9fY29tcGxldGUgJiYgaW9jLT5pc193YXJwZHJpdmUpIHsKKwkJaWYgKGlvYy0+bWFudV9wZzEwLk9FTUlkZW50aWZpZXIgID09IDB4ODApIHsKKwkJCWhpZGVfZmxhZyA9ICh1OCkgKGlvYy0+bWFudV9wZzEwLk9FTVNwZWNpZmljRmxhZ3MwICYKKwkJCSAgICBNRkdfUEFHRTEwX0hJREVfU1NEU19NQVNLKTsKKwkJCWlmIChoaWRlX2ZsYWcgIT0gTUZHX1BBR0UxMF9ISURFX1NTRFNfTUFTSykKKwkJCQlpb2MtPm1mZ19wZzEwX2hpZGVfZmxhZyA9IGhpZGVfZmxhZzsKKwkJfQorCX0KKwogCWlmIChpb2MtPndhaXRfZm9yX3BvcnRfZW5hYmxlX3RvX2NvbXBsZXRlKSB7CiAJCWlmIChkaWFnX2J1ZmZlcl9lbmFibGUgIT0gMCkKIAkJCW1wdDJzYXNfZW5hYmxlX2RpYWdfYnVmZmVyKGlvYywgZGlhZ19idWZmZXJfZW5hYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmgKaW5kZXggNTAwMzI4Mi4uMmEzYzA1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmgKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmgKQEAgLTY5LDExICs2OSwxMSBAQAogI2RlZmluZSBNUFQyU0FTX0RSSVZFUl9OQU1FCQkibXB0MnNhcyIKICNkZWZpbmUgTVBUMlNBU19BVVRIT1IJIkxTSSBDb3Jwb3JhdGlvbiA8REwtTVBURnVzaW9uTGludXhAbHNpLmNvbT4iCiAjZGVmaW5lIE1QVDJTQVNfREVTQ1JJUFRJT04JIkxTSSBNUFQgRnVzaW9uIFNBUyAyLjAgRGV2aWNlIERyaXZlciIKLSNkZWZpbmUgTVBUMlNBU19EUklWRVJfVkVSU0lPTgkJIjA4LjEwMC4wMC4wMCIKKyNkZWZpbmUgTVBUMlNBU19EUklWRVJfVkVSU0lPTgkJIjA4LjEwMC4wMC4wMSIKICNkZWZpbmUgTVBUMlNBU19NQUpPUl9WRVJTSU9OCQkwOAogI2RlZmluZSBNUFQyU0FTX01JTk9SX1ZFUlNJT04JCTEwMAogI2RlZmluZSBNUFQyU0FTX0JVSUxEX1ZFUlNJT04JCTAwCi0jZGVmaW5lIE1QVDJTQVNfUkVMRUFTRV9WRVJTSU9OCQkwMAorI2RlZmluZSBNUFQyU0FTX1JFTEVBU0VfVkVSU0lPTgkJMDEKIAogLyoKICAqIFNldCBNUFQyU0FTX1NHX0RFUFRIIHZhbHVlIGJhc2VkIG9uIHVzZXIgaW5wdXQuCkBAIC0xODksNiArMTg5LDE2IEBACiAjZGVmaW5lIE1QVDJTQVNfSFBfREFVR0hURVJfMl80X0lOVEVSTkFMX1NTRElEICAgICAgICAweDAwNDYKIAogLyoKKyAqICBXYXJwRHJpdmUgU3BlY2lmaWMgTG9nIGNvZGVzCisgKi8KKworI2RlZmluZSBNUFQyX1dBUlBEUklWRV9MT0dFTlRSWQkJKDB4ODAwMikKKyNkZWZpbmUgTVBUMl9XQVJQRFJJVkVfTENfU1NEVAkJKDB4NDEpCisjZGVmaW5lIE1QVDJfV0FSUERSSVZFX0xDX1NTRExXCQkoMHg0MykKKyNkZWZpbmUgTVBUMl9XQVJQRFJJVkVfTENfU1NETEYJCSgweDQ0KQorI2RlZmluZSBNUFQyX1dBUlBEUklWRV9MQ19CUk1GCQkoMHg0RCkKKworLyoKICAqIHBlciB0YXJnZXQgcHJpdmF0ZSBkYXRhCiAgKi8KICNkZWZpbmUgTVBUX1RBUkdFVF9GTEFHU19SQUlEX0NPTVBPTkVOVAkweDAxCkBAIC0xOTksNiArMjA5LDcgQEAKICAqIHN0cnVjdCBNUFQyU0FTX1RBUkdFVCAtIHN0YXJnZXQgcHJpdmF0ZSBob3N0ZGF0YQogICogQHN0YXJnZXQ6IHN0YXJnZXQgb2JqZWN0CiAgKiBAc2FzX2FkZHJlc3M6IHRhcmdldCBzYXMgYWRkcmVzcworICogQHJhaWRfZGV2aWNlOiByYWlkX2RldmljZSBwb2ludGVyIHRvIGFjY2VzcyB2b2x1bWUgZGF0YQogICogQGhhbmRsZTogZGV2aWNlIGhhbmRsZQogICogQG51bV9sdW5zOiBudW1iZXIgbHVucwogICogQGZsYWdzOiBNUFRfVEFSR0VUX0ZMQUdTX1hYWCBmbGFncwpAQCAtMjA4LDYgKzIxOSw3IEBACiBzdHJ1Y3QgTVBUMlNBU19UQVJHRVQgewogCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldDsKIAl1NjQJc2FzX2FkZHJlc3M7CisJc3RydWN0IF9yYWlkX2RldmljZSAqcmFpZF9kZXZpY2U7CiAJdTE2CWhhbmRsZTsKIAlpbnQJbnVtX2x1bnM7CiAJdTMyCWZsYWdzOwpAQCAtMjE1LDYgKzIyNyw3IEBACiAJdTgJdG1fYnVzeTsKIH07CiAKKwogLyoKICAqIHBlciBkZXZpY2UgcHJpdmF0ZSBkYXRhCiAgKi8KQEAgLTI2Miw2ICsyNzUsMTIgQEAKICAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX01BTl8xMCwKICAgTXBpMk1hbnVmYWN0dXJpbmdQYWdlMTBfdCwgTVBJMl9QT0lOVEVSIHBNcGkyTWFudWZhY3R1cmluZ1BhZ2UxMF90OwogCisjZGVmaW5lIE1GR19QQUdFMTBfSElERV9TU0RTX01BU0sJKDB4MDAwMDAwMDMpCisjZGVmaW5lIE1GR19QQUdFMTBfSElERV9BTExfRElTS1MJKDB4MDApCisjZGVmaW5lIE1GR19QQUdFMTBfRVhQT1NFX0FMTF9ESVNLUwkoMHgwMSkKKyNkZWZpbmUgTUZHX1BBR0UxMF9ISURFX0lGX1ZPTF9QUkVTRU5UCSgweDAyKQorCisKIHN0cnVjdCBNUFQyU0FTX0RFVklDRSB7CiAJc3RydWN0IE1QVDJTQVNfVEFSR0VUICpzYXNfdGFyZ2V0OwogCXVuc2lnbmVkIGludAlsdW47CkBAIC0zNDEsNiArMzYwLDcgQEAKICAqIEBzZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QgKHZvbHVtZXMgYXJlIHNpbmdsZSBsdW4pCiAgKiBAd3dpZDogdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSB2b2x1bWUKICAqIEBoYW5kbGU6IGRldmljZSBoYW5kbGUKKyAqIEBibG9ja19zaXplOiBCbG9jayBzaXplIG9mIHRoZSB2b2x1bWUKICAqIEBpZDogdGFyZ2V0IGlkCiAgKiBAY2hhbm5lbDogdGFyZ2V0IGNoYW5uZWwKICAqIEB2b2x1bWVfdHlwZTogdGhlIHJhaWQgbGV2ZWwKQEAgLTM0OCwyMCArMzY4LDMzIEBACiAgKiBAbnVtX3BkczogbnVtYmVyIG9mIGhpZGRlbiByYWlkIGNvbXBvbmVudHMKICAqIEByZXNwb25kaW5nOiB1c2VkIGluIF9zY3NpaF9yYWlkX2RldmljZV9tYXJrX3Jlc3BvbmRpbmcKICAqIEBwZXJjZW50X2NvbXBsZXRlOiByZXN5bmMgcGVyY2VudCBjb21wbGV0ZQorICogQGRpcmVjdF9pb19lbmFibGVkOiBXaGV0aGVyIGRpcmVjdCBpbyB0byBQRHMgYXJlIGFsbG93ZWQgb3Igbm90CisgKiBAc3RyaXBlX2V4cG9uZW50OiBYIHdoZXJlIDJwb3dYIGlzIHRoZSBzdHJpcGUgc3ogaW4gYmxvY2tzCisgKiBAbWF4X2xiYTogTWF4aW11bSBudW1iZXIgb2YgTEJBIGluIHRoZSB2b2x1bWUKKyAqIEBzdHJpcGVfc3o6IFN0cmlwZSBTaXplIG9mIHRoZSB2b2x1bWUKKyAqIEBkZXZpY2VfaW5mbzogRGV2aWNlIGluZm8gb2YgdGhlIHZvbHVtZSBtZW1iZXIgZGlzaworICogQHBkX2hhbmRsZTogQXJyYXkgb2YgaGFuZGxlcyBvZiB0aGUgcGh5c2ljYWwgZHJpdmVzIGZvciBkaXJlY3QgSS9PIGluIGxlMTYKICAqLworI2RlZmluZSBNUFRfTUFYX1dBUlBEUklWRV9QRFMJCTgKIHN0cnVjdCBfcmFpZF9kZXZpY2UgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQ7CiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2OwogCXU2NAl3d2lkOwogCXUxNgloYW5kbGU7CisJdTE2CWJsb2NrX3N6OwogCWludAlpZDsKIAlpbnQJY2hhbm5lbDsKIAl1OAl2b2x1bWVfdHlwZTsKLQl1MzIJZGV2aWNlX2luZm87CiAJdTgJbnVtX3BkczsKIAl1OAlyZXNwb25kaW5nOwogCXU4CXBlcmNlbnRfY29tcGxldGU7CisJdTgJZGlyZWN0X2lvX2VuYWJsZWQ7CisJdTgJc3RyaXBlX2V4cG9uZW50OworCXU2NAltYXhfbGJhOworCXUzMglzdHJpcGVfc3o7CisJdTMyCWRldmljZV9pbmZvOworCXUxNglwZF9oYW5kbGVbTVBUX01BWF9XQVJQRFJJVkVfUERTXTsKIH07CiAKIC8qKgpAQCAtNDcwLDYgKzUwMyw3IEBACiAgKiBAc21pZDogc3lzdGVtIG1lc3NhZ2UgaWQKICAqIEBzY21kOiBzY3NpIHJlcXVlc3QgcG9pbnRlcgogICogQGNiX2lkeDogY2FsbGJhY2sgaW5kZXgKKyAqIEBkaXJlY3RfaW86IFRvIGluZGljYXRlIHdoZXRoZXIgSS9PIGlzIGRpcmVjdCAoV0FSUERSSVZFKQogICogQGNoYWluX2xpc3Q6IGxpc3Qgb2YgY2hhaW5zIGFzc29jaWF0ZWQgdG8gdGhpcyBJTwogICogQHRyYWNrZXJfbGlzdDogbGlzdCBvZiBmcmVlIHJlcXVlc3QgKGlvYy0+ZnJlZV9saXN0KQogICovCkBAIC00NzcsMTQgKzUxMSwxNCBAQAogCXUxNglzbWlkOwogCXN0cnVjdCBzY3NpX2NtbmQgKnNjbWQ7CiAJdTgJY2JfaWR4OworCXU4CWRpcmVjdF9pbzsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNoYWluX2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCB0cmFja2VyX2xpc3Q7CiB9OwogCiAvKioKLSAqIHN0cnVjdCByZXF1ZXN0X3RyYWNrZXIgLSBtaXNjIG1mIHJlcXVlc3QgdHJhY2tlcgorICogc3RydWN0IHJlcXVlc3RfdHJhY2tlciAtIGZpcm13YXJlIHJlcXVlc3QgdHJhY2tlcgogICogQHNtaWQ6IHN5c3RlbSBtZXNzYWdlIGlkCi0gKiBAc2NtZDogc2NzaSByZXF1ZXN0IHBvaW50ZXIKICAqIEBjYl9pZHg6IGNhbGxiYWNrIGluZGV4CiAgKiBAdHJhY2tlcl9saXN0OiBsaXN0IG9mIGZyZWUgcmVxdWVzdCAoaW9jLT5mcmVlX2xpc3QpCiAgKi8KQEAgLTgzMiw2ICs4NjYsMTEgQEAKIAl1MzIJCWRpYWdub3N0aWNfZmxhZ3NbTVBJMl9ESUFHX0JVRl9UWVBFX0NPVU5UXTsKIAl1MzIJCXJpbmdfYnVmZmVyX29mZnNldDsKIAl1MzIJCXJpbmdfYnVmZmVyX3N6OworCXU4CQlpc193YXJwZHJpdmU7CisJdTgJCWhpZGVfaXJfbXNnOworCXU4CQltZmdfcGcxMF9oaWRlX2ZsYWc7CisJdTgJCWhpZGVfZHJpdmVzOworCiB9OwogCiB0eXBlZGVmIHU4ICgqTVBUX0NBTExCQUNLKShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBtc2l4X2luZGV4LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmMKaW5kZXggZDcyZjFmMi4uNDM3YzJkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5jCkBAIC0xMDQxLDcgKzEwNDEsMTAgQEAKIAkgICAgX19mdW5jX18pKTsKIAogCW1lbXNldCgma2FyZywgMCAsIHNpemVvZihrYXJnKSk7Ci0Ja2FyZy5hZGFwdGVyX3R5cGUgPSBNUFQyX0lPQ1RMX0lOVEVSRkFDRV9TQVMyOworCWlmIChpb2MtPmlzX3dhcnBkcml2ZSkKKwkJa2FyZy5hZGFwdGVyX3R5cGUgPSBNUFQyX0lPQ1RMX0lOVEVSRkFDRV9TQVMyX1NTUzYyMDA7CisJZWxzZQorCQlrYXJnLmFkYXB0ZXJfdHlwZSA9IE1QVDJfSU9DVExfSU5URVJGQUNFX1NBUzI7CiAJaWYgKGlvYy0+cGZhY3RzKQogCQlrYXJnLnBvcnRfbnVtYmVyID0gaW9jLT5wZmFjdHNbMF0uUG9ydE51bWJlcjsKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShpb2MtPnBkZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwgJnJldmlzaW9uKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5oCmluZGV4IDY5OTE2ZTQuLjExZmYxZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmgKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuaApAQCAtMTMzLDYgKzEzMyw3IEBACiAjZGVmaW5lIE1QVDJfSU9DVExfSU5URVJGQUNFX0ZDX0lQCSgweDAyKQogI2RlZmluZSBNUFQyX0lPQ1RMX0lOVEVSRkFDRV9TQVMJKDB4MDMpCiAjZGVmaW5lIE1QVDJfSU9DVExfSU5URVJGQUNFX1NBUzIJKDB4MDQpCisjZGVmaW5lIE1QVDJfSU9DVExfSU5URVJGQUNFX1NBUzJfU1NTNjIwMAkoMHgwNSkKICNkZWZpbmUgTVBUMl9JT0NUTF9WRVJTSU9OX0xFTkdUSAkoMzIpCiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jCmluZGV4IGQyMDY0YTAuLmYxMmUwMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMKQEAgLTIzMyw2ICsyMzMsOSBAQAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCiAJeyBNUEkyX01GR1BBR0VfVkVORE9SSURfTFNJLCBNUEkyX01GR1BBR0VfREVWSURfU0FTMjMwOF8zLAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCisJLyogU1NTNjIwMCAqLworCXsgTVBJMl9NRkdQQUdFX1ZFTkRPUklEX0xTSSwgTVBJMl9NRkdQQUdFX0RFVklEX1NTUzYyMDAsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKIAl7MH0JLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc2NzaWhfcGNpX3RhYmxlKTsKQEAgLTEyNTYsNiArMTI1OSw3IEBACiAJCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+aGFuZGxlID0gcmFpZF9kZXZpY2UtPmhhbmRsZTsKIAkJCXNhc190YXJnZXRfcHJpdl9kYXRhLT5zYXNfYWRkcmVzcyA9IHJhaWRfZGV2aWNlLT53d2lkOwogCQkJc2FzX3RhcmdldF9wcml2X2RhdGEtPmZsYWdzIHw9IE1QVF9UQVJHRVRfRkxBR1NfVk9MVU1FOworCQkJc2FzX3RhcmdldF9wcml2X2RhdGEtPnJhaWRfZGV2aWNlID0gcmFpZF9kZXZpY2U7CiAJCQlyYWlkX2RldmljZS0+c3RhcmdldCA9IHN0YXJnZXQ7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5yYWlkX2RldmljZV9sb2NrLCBmbGFncyk7CkBAIC0xNDU1LDcgKzE0NTksMTAgQEAKIF9zY3NpaF9pc19yYWlkKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSB0b19zY3NpX2RldmljZShkZXYpOworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IHNob3N0X3ByaXYoc2Rldi0+aG9zdCk7CiAKKwlpZiAoaW9jLT5pc193YXJwZHJpdmUpCisJCXJldHVybiAwOwogCXJldHVybiAoc2Rldi0+Y2hhbm5lbCA9PSBSQUlEX0NIQU5ORUwpID8gMSA6IDA7CiB9CiAKQEAgLTE0ODAsNyArMTQ4Nyw3IEBACiAJICAgIHNkZXYtPmNoYW5uZWwpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOwogCi0JaWYgKCFyYWlkX2RldmljZSkKKwlpZiAoIXJhaWRfZGV2aWNlIHx8IGlvYy0+aXNfd2FycGRyaXZlKQogCQlnb3RvIG91dDsKIAogCWlmIChtcHQyc2FzX2NvbmZpZ19nZXRfcmFpZF92b2x1bWVfcGcwKGlvYywgJm1waV9yZXBseSwgJnZvbF9wZzAsCkBAIC0xNjQwLDYgKzE2NDcsMjEyIEBACiAKIAlrZnJlZSh2b2xfcGcwKTsKIH0KKy8qKgorICogX3Njc2loX2Rpc2FibGVfZGRpbyAtIERpc2FibGUgZGlyZWN0IEkvTyBmb3IgYWxsIHRoZSB2b2x1bWVzCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9kaXNhYmxlX2RkaW8oc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jKQoreworCU1waTJSYWlkVm9sUGFnZTFfdCB2b2xfcGcxOworCU1waTJDb25maWdSZXBseV90IG1waV9yZXBseTsKKwlzdHJ1Y3QgX3JhaWRfZGV2aWNlICpyYWlkX2RldmljZTsKKwl1MTYgaGFuZGxlOworCXUxNiBpb2Nfc3RhdHVzOworCisJaGFuZGxlID0gMHhGRkZGOworCXdoaWxlICghKG1wdDJzYXNfY29uZmlnX2dldF9yYWlkX3ZvbHVtZV9wZzEoaW9jLCAmbXBpX3JlcGx5LAorCSAgICAmdm9sX3BnMSwgTVBJMl9SQUlEX1ZPTFVNRV9QR0FEX0ZPUk1fR0VUX05FWFRfSEFORExFLCBoYW5kbGUpKSkgeworCQlpb2Nfc3RhdHVzID0gbGUxNl90b19jcHUobXBpX3JlcGx5LklPQ1N0YXR1cykgJgorCQkgICAgTVBJMl9JT0NTVEFUVVNfTUFTSzsKKwkJaWYgKGlvY19zdGF0dXMgPT0gTVBJMl9JT0NTVEFUVVNfQ09ORklHX0lOVkFMSURfUEFHRSkKKwkJCWJyZWFrOworCQloYW5kbGUgPSBsZTE2X3RvX2NwdSh2b2xfcGcxLkRldkhhbmRsZSk7CisJCXJhaWRfZGV2aWNlID0gX3Njc2loX3JhaWRfZGV2aWNlX2ZpbmRfYnlfaGFuZGxlKGlvYywgaGFuZGxlKTsKKwkJaWYgKHJhaWRfZGV2aWNlKQorCQkJcmFpZF9kZXZpY2UtPmRpcmVjdF9pb19lbmFibGVkID0gMDsKKwl9CisJcmV0dXJuOworfQorCisKKy8qKgorICogX3Njc2loX2dldF9udW1fdm9sdW1lcyAtIEdldCBudW1iZXIgb2Ygdm9sdW1lcyBpbiB0aGUgaW9jCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqLworc3RhdGljIHU4Citfc2NzaWhfZ2V0X251bV92b2x1bWVzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYykKK3sKKwlNcGkyUmFpZFZvbFBhZ2UxX3Qgdm9sX3BnMTsKKwlNcGkyQ29uZmlnUmVwbHlfdCBtcGlfcmVwbHk7CisJdTE2IGhhbmRsZTsKKwl1OCB2b2xfY250ID0gMDsKKwl1MTYgaW9jX3N0YXR1czsKKworCWhhbmRsZSA9IDB4RkZGRjsKKwl3aGlsZSAoIShtcHQyc2FzX2NvbmZpZ19nZXRfcmFpZF92b2x1bWVfcGcxKGlvYywgJm1waV9yZXBseSwKKwkgICAgJnZvbF9wZzEsIE1QSTJfUkFJRF9WT0xVTUVfUEdBRF9GT1JNX0dFVF9ORVhUX0hBTkRMRSwgaGFuZGxlKSkpIHsKKwkJaW9jX3N0YXR1cyA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS5JT0NTdGF0dXMpICYKKwkJICAgIE1QSTJfSU9DU1RBVFVTX01BU0s7CisJCWlmIChpb2Nfc3RhdHVzID09IE1QSTJfSU9DU1RBVFVTX0NPTkZJR19JTlZBTElEX1BBR0UpCisJCQlicmVhazsKKwkJdm9sX2NudCsrOworCQloYW5kbGUgPSBsZTE2X3RvX2NwdSh2b2xfcGcxLkRldkhhbmRsZSk7CisJfQorCXJldHVybiB2b2xfY250OworfQorCisKKy8qKgorICogX3Njc2loX2luaXRfd2FycGRyaXZlX3Byb3BlcnRpZXMgLSBTZXQgcHJvcGVydGllcyBmb3Igd2FycGRyaXZlIGRpcmVjdCBJL08uCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEByYWlkX2RldmljZTogdGhlIHJhaWRfZGV2aWNlIG9iamVjdAorICovCitzdGF0aWMgdm9pZAorX3Njc2loX2luaXRfd2FycGRyaXZlX3Byb3BlcnRpZXMoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorCXN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlKQoreworCU1waTJSYWlkVm9sUGFnZTBfdCAqdm9sX3BnMDsKKwlNcGkyUmFpZFBoeXNEaXNrUGFnZTBfdCBwZF9wZzA7CisJTXBpMkNvbmZpZ1JlcGx5X3QgbXBpX3JlcGx5OworCXUxNiBzejsKKwl1OCBudW1fcGRzLCBjb3VudDsKKwl1NjQgbWIgPSAxMDI0ICogMTAyNDsKKwl1NjQgdGJfMiA9IDIgKiBtYiAqIG1iOworCXU2NCBjYXBhY2l0eTsKKwl1MzIgc3RyaXBlX3N6OworCXU4IGksIHN0cmlwZV9leHA7CisKKwlpZiAoIWlvYy0+aXNfd2FycGRyaXZlKQorCQlyZXR1cm47CisKKwlpZiAoaW9jLT5tZmdfcGcxMF9oaWRlX2ZsYWcgPT0gIE1GR19QQUdFMTBfRVhQT1NFX0FMTF9ESVNLUykgeworCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiV2FycERyaXZlIDogRGlyZWN0IElPIGlzIGRpc2FibGVkICIKKwkJICAgICJnbG9iYWxseSBhcyBkcml2ZXMgYXJlIGV4cG9zZWRcbiIsIGlvYy0+bmFtZSk7CisJCXJldHVybjsKKwl9CisJaWYgKF9zY3NpaF9nZXRfbnVtX3ZvbHVtZXMoaW9jKSA+IDEpIHsKKwkJX3Njc2loX2Rpc2FibGVfZGRpbyhpb2MpOworCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiV2FycERyaXZlIDogRGlyZWN0IElPIGlzIGRpc2FibGVkICIKKwkJICAgICJnbG9iYWxseSBhcyBudW1iZXIgb2YgZHJpdmVzID4gMVxuIiwgaW9jLT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoKG1wdDJzYXNfY29uZmlnX2dldF9udW1iZXJfcGRzKGlvYywgcmFpZF9kZXZpY2UtPmhhbmRsZSwKKwkgICAgJm51bV9wZHMpKSB8fCAhbnVtX3BkcykgeworCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiV2FycERyaXZlIDogRGlyZWN0IElPIGlzIGRpc2FibGVkICIKKwkJICAgICJGYWlsdXJlIGluIGNvbXB1dGluZyBudW1iZXIgb2YgZHJpdmVzXG4iLCBpb2MtPm5hbWUpOworCQlyZXR1cm47CisJfQorCisJc3ogPSBvZmZzZXRvZihNcGkyUmFpZFZvbFBhZ2UwX3QsIFBoeXNEaXNrKSArIChudW1fcGRzICoKKwkgICAgc2l6ZW9mKE1waTJSYWlkVm9sMFBoeXNEaXNrX3QpKTsKKwl2b2xfcGcwID0ga3phbGxvYyhzeiwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2b2xfcGcwKSB7CisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJXYXJwRHJpdmUgOiBEaXJlY3QgSU8gaXMgZGlzYWJsZWQgIgorCQkgICAgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgZm9yIFJWUEcwXG4iLCBpb2MtPm5hbWUpOworCQlyZXR1cm47CisJfQorCisJaWYgKChtcHQyc2FzX2NvbmZpZ19nZXRfcmFpZF92b2x1bWVfcGcwKGlvYywgJm1waV9yZXBseSwgdm9sX3BnMCwKKwkgICAgIE1QSTJfUkFJRF9WT0xVTUVfUEdBRF9GT1JNX0hBTkRMRSwgcmFpZF9kZXZpY2UtPmhhbmRsZSwgc3opKSkgeworCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiV2FycERyaXZlIDogRGlyZWN0IElPIGlzIGRpc2FibGVkICIKKwkJICAgICJGYWlsdXJlIGluIHJldHJpZXZpbmcgUlZQRzBcbiIsIGlvYy0+bmFtZSk7CisJCWtmcmVlKHZvbF9wZzApOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBXQVJQRFJJVkU6SWYgbnVtYmVyIG9mIHBoeXNpY2FsIGRpc2tzIGluIGEgdm9sdW1lIGV4Y2VlZHMgdGhlIG1heCBwZHMKKwkgKiBhc3N1bWVkIGZvciBXQVJQRFJJVkUsIGRpc2FibGUgZGlyZWN0IEkvTworCSAqLworCWlmIChudW1fcGRzID4gTVBUX01BWF9XQVJQRFJJVkVfUERTKSB7CisJCXByaW50ayhNUFQyU0FTX1dBUk5fRk1UICJXYXJwRHJpdmUgOiBEaXJlY3QgSU8gaXMgZGlzYWJsZWQgIgorCQkgICAgImZvciB0aGUgZHJpdmUgd2l0aCBoYW5kbGUoMHglMDR4KTogbnVtX21lbT0lZCwgIgorCQkgICAgIm1heF9tZW1fYWxsb3dlZD0lZFxuIiwgaW9jLT5uYW1lLCByYWlkX2RldmljZS0+aGFuZGxlLAorCQkgICAgbnVtX3BkcywgTVBUX01BWF9XQVJQRFJJVkVfUERTKTsKKwkJa2ZyZWUodm9sX3BnMCk7CisJCXJldHVybjsKKwl9CisJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgbnVtX3BkczsgY291bnQrKykgeworCQlpZiAobXB0MnNhc19jb25maWdfZ2V0X3BoeXNfZGlza19wZzAoaW9jLCAmbXBpX3JlcGx5LAorCQkgICAgJnBkX3BnMCwgTVBJMl9QSFlTRElTS19QR0FEX0ZPUk1fUEhZU0RJU0tOVU0sCisJCSAgICB2b2xfcGcwLT5QaHlzRGlza1tjb3VudF0uUGh5c0Rpc2tOdW0pIHx8CisJCSAgICBwZF9wZzAuRGV2SGFuZGxlID09IE1QVDJTQVNfSU5WQUxJRF9ERVZJQ0VfSEFORExFKSB7CisJCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiV2FycERyaXZlIDogRGlyZWN0IElPIGlzICIKKwkJCSAgICAiZGlzYWJsZWQgZm9yIHRoZSBkcml2ZSB3aXRoIGhhbmRsZSgweCUwNHgpIG1lbWJlciIKKwkJCSAgICAiaGFuZGxlIHJldHJpZXZhbCBmYWlsZWQgZm9yIG1lbWJlciBudW1iZXI9JWRcbiIsCisJCQkgICAgaW9jLT5uYW1lLCByYWlkX2RldmljZS0+aGFuZGxlLAorCQkJICAgIHZvbF9wZzAtPlBoeXNEaXNrW2NvdW50XS5QaHlzRGlza051bSk7CisJCQlnb3RvIG91dF9lcnJvcjsKKwkJfQorCQlyYWlkX2RldmljZS0+cGRfaGFuZGxlW2NvdW50XSA9IGxlMTZfdG9fY3B1KHBkX3BnMC5EZXZIYW5kbGUpOworCX0KKworCS8qCisJICogQXNzdW1wdGlvbiBmb3IgV0Q6IERpcmVjdCBJL08gaXMgbm90IHN1cHBvcnRlZCBpZiB0aGUgdm9sdW1lIGlzCisJICogbm90IFJBSUQwLCBpZiB0aGUgc3RyaXBlIHNpemUgaXMgbm90IDY0S0IsIGlmIHRoZSBibG9jayBzaXplIGlzCisJICogbm90IDUxMiBhbmQgaWYgdGhlIHZvbHVtZSBzaXplIGlzID4yVEIKKwkgKi8KKwlpZiAocmFpZF9kZXZpY2UtPnZvbHVtZV90eXBlICE9IE1QSTJfUkFJRF9WT0xfVFlQRV9SQUlEMCB8fAorCSAgICBsZTE2X3RvX2NwdSh2b2xfcGcwLT5CbG9ja1NpemUpICE9IDUxMikgeworCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiV2FycERyaXZlIDogRGlyZWN0IElPIGlzIGRpc2FibGVkICIKKwkJICAgICJmb3IgdGhlIGRyaXZlIHdpdGggaGFuZGxlKDB4JTA0eCk6IHR5cGU9JWQsICIKKwkJICAgICJzX3N6PSV1SywgYmxrX3NpemU9JXVcbiIsIGlvYy0+bmFtZSwKKwkJICAgIHJhaWRfZGV2aWNlLT5oYW5kbGUsIHJhaWRfZGV2aWNlLT52b2x1bWVfdHlwZSwKKwkJICAgIGxlMzJfdG9fY3B1KHZvbF9wZzAtPlN0cmlwZVNpemUpLzIsCisJCSAgICBsZTE2X3RvX2NwdSh2b2xfcGcwLT5CbG9ja1NpemUpKTsKKwkJZ290byBvdXRfZXJyb3I7CisJfQorCisJY2FwYWNpdHkgPSAodTY0KSBsZTE2X3RvX2NwdSh2b2xfcGcwLT5CbG9ja1NpemUpICoKKwkgICAgKGxlNjRfdG9fY3B1KHZvbF9wZzAtPk1heExCQSkgKyAxKTsKKworCWlmIChjYXBhY2l0eSA+IHRiXzIpIHsKKwkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIldhcnBEcml2ZSA6IERpcmVjdCBJTyBpcyBkaXNhYmxlZCAiCisJCSJmb3IgdGhlIGRyaXZlIHdpdGggaGFuZGxlKDB4JTA0eCkgc2luY2UgZHJpdmUgc3ogPiAyVEJcbiIsCisJCWlvYy0+bmFtZSwgcmFpZF9kZXZpY2UtPmhhbmRsZSk7CisJCWdvdG8gb3V0X2Vycm9yOworCX0KKworCXN0cmlwZV9zeiA9IGxlMzJfdG9fY3B1KHZvbF9wZzAtPlN0cmlwZVNpemUpOworCXN0cmlwZV9leHAgPSAwOworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCWlmIChzdHJpcGVfc3ogJiAxKQorCQkJYnJlYWs7CisJCXN0cmlwZV9leHArKzsKKwkJc3RyaXBlX3N6ID4+PSAxOworCX0KKwlpZiAoaSA9PSAzMikgeworCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiV2FycERyaXZlIDogRGlyZWN0IElPIGlzIGRpc2FibGVkICIKKwkJICAgICJmb3IgdGhlIGRyaXZlIHdpdGggaGFuZGxlKDB4JTA0eCkgaW52YWxpZCBzdHJpcGUgc3ogJXVLXG4iLAorCQkgICAgaW9jLT5uYW1lLCByYWlkX2RldmljZS0+aGFuZGxlLAorCQkgICAgbGUzMl90b19jcHUodm9sX3BnMC0+U3RyaXBlU2l6ZSkvMik7CisJCWdvdG8gb3V0X2Vycm9yOworCX0KKwlyYWlkX2RldmljZS0+c3RyaXBlX2V4cG9uZW50ID0gc3RyaXBlX2V4cDsKKwlyYWlkX2RldmljZS0+ZGlyZWN0X2lvX2VuYWJsZWQgPSAxOworCisJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIldhcnBEcml2ZSA6IERpcmVjdCBJTyBpcyBFbmFibGVkIGZvciB0aGUgZHJpdmUiCisJICAgICIgd2l0aCBoYW5kbGUoMHglMDR4KVxuIiwgaW9jLT5uYW1lLCByYWlkX2RldmljZS0+aGFuZGxlKTsKKwkvKgorCSAqIFdBUlBEUklWRTogVGhvdWdoIHRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSBub3QgdXNlZCBmb3IgZGlyZWN0IElPLAorCSAqIHN0b3JlZCBmb3IgZnV0dXJlIHB1cnBvc2U6CisJICovCisJcmFpZF9kZXZpY2UtPm1heF9sYmEgPSBsZTY0X3RvX2NwdSh2b2xfcGcwLT5NYXhMQkEpOworCXJhaWRfZGV2aWNlLT5zdHJpcGVfc3ogPSBsZTMyX3RvX2NwdSh2b2xfcGcwLT5TdHJpcGVTaXplKTsKKwlyYWlkX2RldmljZS0+YmxvY2tfc3ogPSBsZTE2X3RvX2NwdSh2b2xfcGcwLT5CbG9ja1NpemUpOworCisKKwlrZnJlZSh2b2xfcGcwKTsKKwlyZXR1cm47CisKK291dF9lcnJvcjoKKwlyYWlkX2RldmljZS0+ZGlyZWN0X2lvX2VuYWJsZWQgPSAwOworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IG51bV9wZHM7IGNvdW50KyspCisJCXJhaWRfZGV2aWNlLT5wZF9oYW5kbGVbY291bnRdID0gMDsKKwlrZnJlZSh2b2xfcGcwKTsKKwlyZXR1cm47Cit9CiAKIC8qKgogICogX3Njc2loX2VuYWJsZV90bHIgLSBzZXR0aW5nIFRMUiBmbGFncwpAQCAtMTcxMCw2ICsxOTIzLDExIEBACiAKIAkJX3Njc2loX2dldF92b2x1bWVfY2FwYWJpbGl0aWVzKGlvYywgcmFpZF9kZXZpY2UpOwogCisJCS8qCisJCSAqIFdBUlBEUklWRTogSW5pdGlhbGl6ZSB0aGUgcmVxdWlyZWQgZGF0YSBmb3IgRGlyZWN0IElPCisJCSAqLworCQlfc2NzaWhfaW5pdF93YXJwZHJpdmVfcHJvcGVydGllcyhpb2MsIHJhaWRfZGV2aWNlKTsKKwogCQkvKiBSQUlEIFF1ZXVlIERlcHRoIFN1cHBvcnQKIAkJICogSVMgdm9sdW1lID0gdW5kZXJseWluZyBxZGVwdGggb2YgZHJpdmUgdHlwZSwgZWl0aGVyCiAJCSAqICAgIE1QVDJTQVNfU0FTX1FVRVVFX0RFUFRIIG9yIE1QVDJTQVNfU0FUQV9RVUVVRV9ERVBUSApAQCAtMTc1NywxNCArMTk3NSwxNiBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsICIlczogIgotCQkgICAgImhhbmRsZSgweCUwNHgpLCB3d2lkKDB4JTAxNmxseCksIHBkX2NvdW50KCVkKSwgdHlwZSglcylcbiIsCi0JCSAgICByX2xldmVsLCByYWlkX2RldmljZS0+aGFuZGxlLAotCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyYWlkX2RldmljZS0+d3dpZCwKLQkJICAgIHJhaWRfZGV2aWNlLT5udW1fcGRzLCBkcyk7CisJCWlmICghaW9jLT5oaWRlX2lyX21zZykKKwkJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwgIiVzOiBoYW5kbGUoMHglMDR4KSwgIgorCQkJICAgICJ3d2lkKDB4JTAxNmxseCksIHBkX2NvdW50KCVkKSwgdHlwZSglcylcbiIsCisJCQkgICAgcl9sZXZlbCwgcmFpZF9kZXZpY2UtPmhhbmRsZSwKKwkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXJhaWRfZGV2aWNlLT53d2lkLAorCQkJICAgIHJhaWRfZGV2aWNlLT5udW1fcGRzLCBkcyk7CiAJCV9zY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgcWRlcHRoLCBTQ1NJX1FERVBUSF9ERUZBVUxUKTsKIAkJLyogcmFpZCB0cmFuc3BvcnQgc3VwcG9ydCAqLwotCQlfc2NzaWhfc2V0X2xldmVsKHNkZXYsIHJhaWRfZGV2aWNlKTsKKwkJaWYgKCFpb2MtPmlzX3dhcnBkcml2ZSkKKwkJCV9zY3NpaF9zZXRfbGV2ZWwoc2RldiwgcmFpZF9kZXZpY2UpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTIxMzMsOCArMjM1Myw3IEBACiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9BQk9SVF9UQVNLOgogCQlzY21kX2xvb2t1cCA9IF9zY3NpaF9zY3NpX2xvb2t1cF9nZXQoaW9jLCBzbWlkX3Rhc2spOwotCQlpZiAoc2NtZF9sb29rdXAgJiYgKHNjbWRfbG9va3VwLT5zZXJpYWxfbnVtYmVyID09Ci0JCSAgICBzY21kLT5zZXJpYWxfbnVtYmVyKSkKKwkJaWYgKHNjbWRfbG9va3VwKQogCQkJcmMgPSBGQUlMRUQ7CiAJCWVsc2UKIAkJCXJjID0gU1VDQ0VTUzsKQEAgLTIxODIsMTYgKzI0MDEsMjAgQEAKIAlzdHJ1Y3QgTVBUMlNBU19UQVJHRVQgKnByaXZfdGFyZ2V0ID0gc3RhcmdldC0+aG9zdGRhdGE7CiAJc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWNoYXIgKmRldmljZV9zdHIgPSBOVUxMOwogCiAJaWYgKCFwcml2X3RhcmdldCkKIAkJcmV0dXJuOworCWlmIChpb2MtPmhpZGVfaXJfbXNnKQorCQlkZXZpY2Vfc3RyID0gIldhcnBEcml2ZSI7CisJZWxzZQorCQlkZXZpY2Vfc3RyID0gInZvbHVtZSI7CiAKIAlzY3NpX3ByaW50X2NvbW1hbmQoc2NtZCk7CiAJaWYgKHByaXZfdGFyZ2V0LT5mbGFncyAmIE1QVF9UQVJHRVRfRkxBR1NfVk9MVU1FKSB7Ci0JCXN0YXJnZXRfcHJpbnRrKEtFUk5fSU5GTywgc3RhcmdldCwgInZvbHVtZSBoYW5kbGUoMHglMDR4KSwgIgotCQkgICAgInZvbHVtZSB3d2lkKDB4JTAxNmxseClcbiIsCi0JCSAgICBwcml2X3RhcmdldC0+aGFuZGxlLAotCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwcml2X3RhcmdldC0+c2FzX2FkZHJlc3MpOworCQlzdGFyZ2V0X3ByaW50ayhLRVJOX0lORk8sIHN0YXJnZXQsICIlcyBoYW5kbGUoMHglMDR4KSwgIgorCQkgICAgIiVzIHd3aWQoMHglMDE2bGx4KVxuIiwgZGV2aWNlX3N0ciwgcHJpdl90YXJnZXQtPmhhbmRsZSwKKwkJICAgIGRldmljZV9zdHIsICh1bnNpZ25lZCBsb25nIGxvbmcpcHJpdl90YXJnZXQtPnNhc19hZGRyZXNzKTsKIAl9IGVsc2UgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAkJc2FzX2RldmljZSA9IG1wdDJzYXNfc2NzaWhfc2FzX2RldmljZV9maW5kX2J5X3Nhc19hZGRyZXNzKGlvYywKQEAgLTMxMzAsNiArMzM1Myw5IEBACiAJYSA9IDA7CiAJYiA9IDA7CiAKKwlpZiAoaW9jLT5pc193YXJwZHJpdmUpCisJCXJldHVybjsKKwogCS8qIFZvbHVtZSBSZXNldHMgZm9yIERlbGV0ZWQgb3IgUmVtb3ZlZCAqLwogCWVsZW1lbnQgPSAoTXBpMkV2ZW50SXJDb25maWdFbGVtZW50X3QgKikmZXZlbnRfZGF0YS0+Q29uZmlnRWxlbWVudFswXTsKIAlmb3IgKGkgPSAwOyBpIDwgZXZlbnRfZGF0YS0+TnVtRWxlbWVudHM7IGkrKywgZWxlbWVudCsrKSB7CkBAIC0zMzQ3LDYgKzM1NzMsMTA1IEBACiB9CiAKIC8qKgorICogX3Njc2loX3Njc2lfZGlyZWN0X2lvX2dldCAtIHJldHVybnMgZGlyZWN0IGlvIGZsYWcKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKKyAqCisgKiBSZXR1cm5zIHRoZSBzbWlkIHN0b3JlZCBzY21kIHBvaW50ZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTgKK19zY3NpaF9zY3NpX2RpcmVjdF9pb19nZXQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCkKK3sKKwlyZXR1cm4gaW9jLT5zY3NpX2xvb2t1cFtzbWlkIC0gMV0uZGlyZWN0X2lvOworfQorCisvKioKKyAqIF9zY3NpaF9zY3NpX2RpcmVjdF9pb19zZXQgLSBzZXRzIGRpcmVjdCBpbyBmbGFnCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CisgKiBAZGlyZWN0X2lvOiBaZXJvIG9yIG5vbi16ZXJvIHZhbHVlIHRvIHNldCBpbiB0aGUgZGlyZWN0X2lvIGZsYWcKKyAqCisgKiBSZXR1cm5zIE5vdGhpbmcuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorX3Njc2loX3Njc2lfZGlyZWN0X2lvX3NldChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBkaXJlY3RfaW8pCit7CisJaW9jLT5zY3NpX2xvb2t1cFtzbWlkIC0gMV0uZGlyZWN0X2lvID0gZGlyZWN0X2lvOworfQorCisKKy8qKgorICogX3Njc2loX3NldHVwX2RpcmVjdF9pbyAtIHNldHVwIE1QSSByZXF1ZXN0IGZvciBXQVJQRFJJVkUgRGlyZWN0IEkvTworICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc2NtZDogcG9pbnRlciB0byBzY3NpIGNvbW1hbmQgb2JqZWN0CisgKiBAcmFpZF9kZXZpY2U6IHBvaW50ZXIgdG8gcmFpZCBkZXZpY2UgZGF0YSBzdHJ1Y3R1cmUKKyAqIEBtcGlfcmVxdWVzdDogcG9pbnRlciB0byB0aGUgU0NTSV9JTyByZXFlc3QgbWVzc2FnZSBmcmFtZQorICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKKyAqCisgKiBSZXR1cm5zIG5vdGhpbmcKKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9zZXR1cF9kaXJlY3RfaW8oc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kLAorCXN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlLCBNcGkyU0NTSUlPUmVxdWVzdF90ICptcGlfcmVxdWVzdCwKKwl1MTYgc21pZCkKK3sKKwl1MzIgdl9sYmEsIHBfbGJhLCBzdHJpcGVfb2ZmLCBzdHJpcGVfdW5pdCwgY29sdW1uLCBpb19zaXplOworCXUzMiBzdHJpcGVfc3osIHN0cmlwZV9leHA7CisJdTggbnVtX3BkcywgKmNkYl9wdHIsICp0bXBfcHRyLCAqbGJhX3B0cjEsICpsYmFfcHRyMjsKKwl1OCBjZGIwID0gc2NtZC0+Y21uZFswXTsKKworCS8qCisJICogVHJ5IERpcmVjdCBJL08gdG8gUkFJRCBtZW1lYmVyIGRpc2tzCisJICovCisJaWYgKGNkYjAgPT0gUkVBRF8xNiB8fCBjZGIwID09IFJFQURfMTAgfHwKKwkgICAgY2RiMCA9PSBXUklURV8xNiB8fCBjZGIwID09IFdSSVRFXzEwKSB7CisJCWNkYl9wdHIgPSBtcGlfcmVxdWVzdC0+Q0RCLkNEQjMyOworCisJCWlmICgoY2RiMCA8IFJFQURfMTYpIHx8ICEoY2RiX3B0clsyXSB8IGNkYl9wdHJbM10gfCBjZGJfcHRyWzRdCisJCQl8IGNkYl9wdHJbNV0pKSB7CisJCQlpb19zaXplID0gc2NzaV9idWZmbGVuKHNjbWQpID4+IDk7CisJCQkvKiBnZXQgdmlydHVhbCBsYmEgKi8KKwkJCWxiYV9wdHIxID0gbGJhX3B0cjIgPSAoY2RiMCA8IFJFQURfMTYpID8gJmNkYl9wdHJbMl0gOgorCQkJICAgICZjZGJfcHRyWzZdOworCQkJdG1wX3B0ciA9ICh1OCAqKSZ2X2xiYSArIDM7CisJCQkqdG1wX3B0ci0tID0gKmxiYV9wdHIxKys7CisJCQkqdG1wX3B0ci0tID0gKmxiYV9wdHIxKys7CisJCQkqdG1wX3B0ci0tID0gKmxiYV9wdHIxKys7CisJCQkqdG1wX3B0ciA9ICpsYmFfcHRyMTsKKworCQkJaWYgKCgodTY0KXZfbGJhICsgKHU2NClpb19zaXplIC0gMSkgPD0KKwkJCSAgICAodTMyKXJhaWRfZGV2aWNlLT5tYXhfbGJhKSB7CisJCQkJc3RyaXBlX3N6ID0gcmFpZF9kZXZpY2UtPnN0cmlwZV9zejsKKwkJCQlzdHJpcGVfZXhwID0gcmFpZF9kZXZpY2UtPnN0cmlwZV9leHBvbmVudDsKKwkJCQlzdHJpcGVfb2ZmID0gdl9sYmEgJiAoc3RyaXBlX3N6IC0gMSk7CisKKwkJCQkvKiBDaGVjayB3aGV0aGVyIElPIGZhbGxzIHdpdGhpbiBhIHN0cmlwZSAqLworCQkJCWlmICgoc3RyaXBlX29mZiArIGlvX3NpemUpIDw9IHN0cmlwZV9zeikgeworCQkJCQludW1fcGRzID0gcmFpZF9kZXZpY2UtPm51bV9wZHM7CisJCQkJCXBfbGJhID0gdl9sYmEgPj4gc3RyaXBlX2V4cDsKKwkJCQkJc3RyaXBlX3VuaXQgPSBwX2xiYSAvIG51bV9wZHM7CisJCQkJCWNvbHVtbiA9IHBfbGJhICUgbnVtX3BkczsKKwkJCQkJcF9sYmEgPSAoc3RyaXBlX3VuaXQgPDwgc3RyaXBlX2V4cCkgKworCQkJCQkgICAgc3RyaXBlX29mZjsKKwkJCQkJbXBpX3JlcXVlc3QtPkRldkhhbmRsZSA9CisJCQkJCQljcHVfdG9fbGUxNihyYWlkX2RldmljZS0+CisJCQkJCQkgICAgcGRfaGFuZGxlW2NvbHVtbl0pOworCQkJCQl0bXBfcHRyID0gKHU4ICopJnBfbGJhICsgMzsKKwkJCQkJKmxiYV9wdHIyKysgPSAqdG1wX3B0ci0tOworCQkJCQkqbGJhX3B0cjIrKyA9ICp0bXBfcHRyLS07CisJCQkJCSpsYmFfcHRyMisrID0gKnRtcF9wdHItLTsKKwkJCQkJKmxiYV9wdHIyID0gKnRtcF9wdHI7CisJCQkJCS8qCisJCQkJCSogV0Q6IFRvIGluZGljYXRlIHRoaXMgSS9PIGlzIGRpcmVjdEkvTworCQkJCQkqLworCQkJCQlfc2NzaWhfc2NzaV9kaXJlY3RfaW9fc2V0KGlvYywgc21pZCwgMSk7CisJCQkJfQorCQkJfQorCQl9CisJfQorfQorCisvKioKICAqIF9zY3NpaF9xY21kIC0gbWFpbiBzY3NpIHJlcXVlc3QgZW50cnkgcG9pbnQKICAqIEBzY21kOiBwb2ludGVyIHRvIHNjc2kgY29tbWFuZCBvYmplY3QKICAqIEBkb25lOiBmdW5jdGlvbiBwb2ludGVyIHRvIGJlIGludm9rZWQgb24gY29tcGxldGlvbgpAQCAtMzM2Myw2ICszNjg4LDcgQEAKIAlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBzaG9zdF9wcml2KHNjbWQtPmRldmljZS0+aG9zdCk7CiAJc3RydWN0IE1QVDJTQVNfREVWSUNFICpzYXNfZGV2aWNlX3ByaXZfZGF0YTsKIAlzdHJ1Y3QgTVBUMlNBU19UQVJHRVQgKnNhc190YXJnZXRfcHJpdl9kYXRhOworCXN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlOwogCU1waTJTQ1NJSU9SZXF1ZXN0X3QgKm1waV9yZXF1ZXN0OwogCXUzMiBtcGlfY29udHJvbDsKIAl1MTYgc21pZDsKQEAgLTM0MjQsOCArMzc1MCwxMCBAQAogCiAJfSBlbHNlCiAJCW1waV9jb250cm9sIHw9IE1QSTJfU0NTSUlPX0NPTlRST0xfU0lNUExFUTsKLQkvKiBNYWtlIHN1cmUgRGV2aWNlIGlzIG5vdCByYWlkIHZvbHVtZSAqLwotCWlmICghX3Njc2loX2lzX3JhaWQoJnNjbWQtPmRldmljZS0+c2Rldl9nZW5kZXYpICYmCisJLyogTWFrZSBzdXJlIERldmljZSBpcyBub3QgcmFpZCB2b2x1bWUuCisJICogV2UgZG8gbm90IGV4cG9zZSByYWlkIGZ1bmN0aW9uYWxpdHkgdG8gdXBwZXIgbGF5ZXIgZm9yIHdhcnBkcml2ZS4KKwkgKi8KKwlpZiAoIWlvYy0+aXNfd2FycGRyaXZlICYmICFfc2NzaWhfaXNfcmFpZCgmc2NtZC0+ZGV2aWNlLT5zZGV2X2dlbmRldikgJiYKIAkgICAgc2FzX2lzX3Rscl9lbmFibGVkKHNjbWQtPmRldmljZSkgJiYgc2NtZC0+Y21kX2xlbiAhPSAzMikKIAkJbXBpX2NvbnRyb2wgfD0gTVBJMl9TQ1NJSU9fQ09OVFJPTF9UTFJfT047CiAKQEAgLTM0NzMsOSArMzgwMSwxNCBAQAogCQl9CiAJfQogCisJcmFpZF9kZXZpY2UgPSBzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+cmFpZF9kZXZpY2U7CisJaWYgKHJhaWRfZGV2aWNlICYmIHJhaWRfZGV2aWNlLT5kaXJlY3RfaW9fZW5hYmxlZCkKKwkJX3Njc2loX3NldHVwX2RpcmVjdF9pbyhpb2MsIHNjbWQsIHJhaWRfZGV2aWNlLCBtcGlfcmVxdWVzdCwKKwkJICAgIHNtaWQpOworCiAJaWYgKGxpa2VseShtcGlfcmVxdWVzdC0+RnVuY3Rpb24gPT0gTVBJMl9GVU5DVElPTl9TQ1NJX0lPX1JFUVVFU1QpKQogCQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfc2NzaV9pbyhpb2MsIHNtaWQsCi0JCSAgICBzYXNfZGV2aWNlX3ByaXZfZGF0YS0+c2FzX3RhcmdldC0+aGFuZGxlKTsKKwkJICAgIGxlMTZfdG9fY3B1KG1waV9yZXF1ZXN0LT5EZXZIYW5kbGUpKTsKIAllbHNlCiAJCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCk7CiAJcmV0dXJuIDA7CkBAIC0zNTQwLDEwICszODczLDE2IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQgPSBzY21kLT5kZXZpY2UtPnNkZXZfdGFyZ2V0OwogCXN0cnVjdCBNUFQyU0FTX1RBUkdFVCAqcHJpdl90YXJnZXQgPSBzdGFyZ2V0LT5ob3N0ZGF0YTsKKwljaGFyICpkZXZpY2Vfc3RyID0gTlVMTDsKIAogCWlmICghcHJpdl90YXJnZXQpCiAJCXJldHVybjsKIAorCWlmIChpb2MtPmhpZGVfaXJfbXNnKQorCQlkZXZpY2Vfc3RyID0gIldhcnBEcml2ZSI7CisJZWxzZQorCQlkZXZpY2Vfc3RyID0gInZvbHVtZSI7CisKIAlpZiAobG9nX2luZm8gPT0gMHgzMTE3MDAwMCkKIAkJcmV0dXJuOwogCkBAIC0zNjYwLDggKzM5OTksOCBAQAogCXNjc2lfcHJpbnRfY29tbWFuZChzY21kKTsKIAogCWlmIChwcml2X3RhcmdldC0+ZmxhZ3MgJiBNUFRfVEFSR0VUX0ZMQUdTX1ZPTFVNRSkgewotCQlwcmludGsoTVBUMlNBU19XQVJOX0ZNVCAiXHR2b2x1bWUgd3dpZCgweCUwMTZsbHgpXG4iLCBpb2MtPm5hbWUsCi0JCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXByaXZfdGFyZ2V0LT5zYXNfYWRkcmVzcyk7CisJCXByaW50ayhNUFQyU0FTX1dBUk5fRk1UICJcdCVzIHd3aWQoMHglMDE2bGx4KVxuIiwgaW9jLT5uYW1lLAorCQkgICAgZGV2aWNlX3N0ciwgKHVuc2lnbmVkIGxvbmcgbG9uZylwcml2X3RhcmdldC0+c2FzX2FkZHJlc3MpOwogCX0gZWxzZSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOwogCQlzYXNfZGV2aWNlID0gbXB0MnNhc19zY3NpaF9zYXNfZGV2aWNlX2ZpbmRfYnlfc2FzX2FkZHJlc3MoaW9jLApAQCAtMzg0MCw2ICs0MTc5LDIwIEBACiAJCXNjbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OwogCQlnb3RvIG91dDsKIAl9CisJLyoKKwkgKiBXQVJQRFJJVkU6IElmIGRpcmVjdF9pbyBpcyBzZXQgdGhlbiBpdCBpcyBkaXJlY3RJTywKKwkgKiB0aGUgZmFpbGVkIGRpcmVjdCBJL08gc2hvdWxkIGJlIHJlZGlyZWN0ZWQgdG8gdm9sdW1lCisJICovCisJaWYgKF9zY3NpaF9zY3NpX2RpcmVjdF9pb19nZXQoaW9jLCBzbWlkKSkgeworCQlfc2NzaWhfc2NzaV9kaXJlY3RfaW9fc2V0KGlvYywgc21pZCwgMCk7CisJCW1lbWNweShtcGlfcmVxdWVzdC0+Q0RCLkNEQjMyLCBzY21kLT5jbW5kLCBzY21kLT5jbWRfbGVuKTsKKwkJbXBpX3JlcXVlc3QtPkRldkhhbmRsZSA9CisJCSAgICBjcHVfdG9fbGUxNihzYXNfZGV2aWNlX3ByaXZfZGF0YS0+c2FzX3RhcmdldC0+aGFuZGxlKTsKKwkJbXB0MnNhc19iYXNlX3B1dF9zbWlkX3Njc2lfaW8oaW9jLCBzbWlkLAorCQkgICAgc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQtPmhhbmRsZSk7CisJCXJldHVybiAwOworCX0KKwogCiAJLyogdHVybmluZyBvZmYgVExSICovCiAJc2NzaV9zdGF0ZSA9IG1waV9yZXBseS0+U0NTSVN0YXRlOwpAQCAtMzg0OCw3ICs0MjAxLDEwIEBACiAJCSAgICBsZTMyX3RvX2NwdShtcGlfcmVwbHktPlJlc3BvbnNlSW5mbykgJiAweEZGOwogCWlmICghc2FzX2RldmljZV9wcml2X2RhdGEtPnRscl9zbm9vcF9jaGVjaykgewogCQlzYXNfZGV2aWNlX3ByaXZfZGF0YS0+dGxyX3Nub29wX2NoZWNrKys7Ci0JaWYgKCFfc2NzaWhfaXNfcmFpZCgmc2NtZC0+ZGV2aWNlLT5zZGV2X2dlbmRldikgJiYKKwkvKiBNYWtlIHN1cmUgRGV2aWNlIGlzIG5vdCByYWlkIHZvbHVtZS4KKwkgKiBXZSBkbyBub3QgZXhwb3NlIHJhaWQgZnVuY3Rpb25hbGl0eSB0byB1cHBlciBsYXllciBmb3Igd2FycGRyaXZlLgorCSAqLworCWlmICghaW9jLT5pc193YXJwZHJpdmUgJiYgIV9zY3NpaF9pc19yYWlkKCZzY21kLT5kZXZpY2UtPnNkZXZfZ2VuZGV2KSAmJgogCQlzYXNfaXNfdGxyX2VuYWJsZWQoc2NtZC0+ZGV2aWNlKSAmJgogCQkgICAgcmVzcG9uc2VfY29kZSA9PSBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfSU5WQUxJRF9GUkFNRSkgewogCQkJc2FzX2Rpc2FibGVfdGxyKHNjbWQtPmRldmljZSk7CkBAIC00NjgxLDggKzUwMzcsMTAgQEAKIAogCV9zY3NpaF91YmxvY2tfaW9fZGV2aWNlKGlvYywgc2FzX2RldmljZV9iYWNrdXAuaGFuZGxlKTsKIAotCW1wdDJzYXNfdHJhbnNwb3J0X3BvcnRfcmVtb3ZlKGlvYywgc2FzX2RldmljZV9iYWNrdXAuc2FzX2FkZHJlc3MsCi0JICAgIHNhc19kZXZpY2VfYmFja3VwLnNhc19hZGRyZXNzX3BhcmVudCk7CisJaWYgKCFpb2MtPmhpZGVfZHJpdmVzKQorCQltcHQyc2FzX3RyYW5zcG9ydF9wb3J0X3JlbW92ZShpb2MsCisJCSAgICBzYXNfZGV2aWNlX2JhY2t1cC5zYXNfYWRkcmVzcywKKwkJICAgIHNhc19kZXZpY2VfYmFja3VwLnNhc19hZGRyZXNzX3BhcmVudCk7CiAKIAlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAicmVtb3ZpbmcgaGFuZGxlKDB4JTA0eCksIHNhc19hZGRyIgogCSAgICAiKDB4JTAxNmxseClcbiIsIGlvYy0+bmFtZSwgc2FzX2RldmljZV9iYWNrdXAuaGFuZGxlLApAQCAtNTQxMyw2ICs1NzcxLDcgQEAKIAkgICAgJnNhc19kZXZpY2UtPnZvbHVtZV93d2lkKTsKIAlzZXRfYml0KGhhbmRsZSwgaW9jLT5wZF9oYW5kbGVzKTsKIAlfc2NzaWhfcmVwcm9iZV90YXJnZXQoc2FzX2RldmljZS0+c3RhcmdldCwgMSk7CisKIH0KIAogLyoqCkBAIC01NTkxLDcgKzU5NTAsOCBAQAogCU1waTJFdmVudERhdGFJckNvbmZpZ0NoYW5nZUxpc3RfdCAqZXZlbnRfZGF0YSA9IGZ3X2V2ZW50LT5ldmVudF9kYXRhOwogCiAjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCi0JaWYgKGlvYy0+bG9nZ2luZ19sZXZlbCAmIE1QVF9ERUJVR19FVkVOVF9XT1JLX1RBU0spCisJaWYgKChpb2MtPmxvZ2dpbmdfbGV2ZWwgJiBNUFRfREVCVUdfRVZFTlRfV09SS19UQVNLKQorCSAgICAmJiAhaW9jLT5oaWRlX2lyX21zZykKIAkJX3Njc2loX3Nhc19pcl9jb25maWdfY2hhbmdlX2V2ZW50X2RlYnVnKGlvYywgZXZlbnRfZGF0YSk7CiAKICNlbmRpZgpAQCAtNTYxNCwxNiArNTk3NCwyMCBAQAogCQkJCSAgICBsZTE2X3RvX2NwdShlbGVtZW50LT5Wb2xEZXZIYW5kbGUpKTsKIAkJCWJyZWFrOwogCQljYXNlIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX1JDX1BEX0NSRUFURUQ6Ci0JCQlfc2NzaWhfc2FzX3BkX2hpZGUoaW9jLCBlbGVtZW50KTsKKwkJCWlmICghaW9jLT5pc193YXJwZHJpdmUpCisJCQkJX3Njc2loX3Nhc19wZF9oaWRlKGlvYywgZWxlbWVudCk7CiAJCQlicmVhazsKIAkJY2FzZSBNUEkyX0VWRU5UX0lSX0NIQU5HRV9SQ19QRF9ERUxFVEVEOgotCQkJX3Njc2loX3Nhc19wZF9leHBvc2UoaW9jLCBlbGVtZW50KTsKKwkJCWlmICghaW9jLT5pc193YXJwZHJpdmUpCisJCQkJX3Njc2loX3Nhc19wZF9leHBvc2UoaW9jLCBlbGVtZW50KTsKIAkJCWJyZWFrOwogCQljYXNlIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX1JDX0hJREU6Ci0JCQlfc2NzaWhfc2FzX3BkX2FkZChpb2MsIGVsZW1lbnQpOworCQkJaWYgKCFpb2MtPmlzX3dhcnBkcml2ZSkKKwkJCQlfc2NzaWhfc2FzX3BkX2FkZChpb2MsIGVsZW1lbnQpOwogCQkJYnJlYWs7CiAJCWNhc2UgTVBJMl9FVkVOVF9JUl9DSEFOR0VfUkNfVU5ISURFOgotCQkJX3Njc2loX3Nhc19wZF9kZWxldGUoaW9jLCBlbGVtZW50KTsKKwkJCWlmICghaW9jLT5pc193YXJwZHJpdmUpCisJCQkJX3Njc2loX3Nhc19wZF9kZWxldGUoaW9jLCBlbGVtZW50KTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtNTY1NCw5ICs2MDE4LDEwIEBACiAKIAloYW5kbGUgPSBsZTE2X3RvX2NwdShldmVudF9kYXRhLT5Wb2xEZXZIYW5kbGUpOwogCXN0YXRlID0gbGUzMl90b19jcHUoZXZlbnRfZGF0YS0+TmV3VmFsdWUpOwotCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGhhbmRsZSgweCUwNHgpLCAiCi0JICAgICJvbGQoMHglMDh4KSwgbmV3KDB4JTA4eClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sICBoYW5kbGUsCi0JICAgIGxlMzJfdG9fY3B1KGV2ZW50X2RhdGEtPlByZXZpb3VzVmFsdWUpLCBzdGF0ZSkpOworCWlmICghaW9jLT5oaWRlX2lyX21zZykKKwkJZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogaGFuZGxlKDB4JTA0eCksICIKKwkJICAgICJvbGQoMHglMDh4KSwgbmV3KDB4JTA4eClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sICBoYW5kbGUsCisJCSAgICBsZTMyX3RvX2NwdShldmVudF9kYXRhLT5QcmV2aW91c1ZhbHVlKSwgc3RhdGUpKTsKIAogCXN3aXRjaCAoc3RhdGUpIHsKIAljYXNlIE1QSTJfUkFJRF9WT0xfU1RBVEVfTUlTU0lORzoKQEAgLTU3MzYsOSArNjEwMSwxMCBAQAogCWhhbmRsZSA9IGxlMTZfdG9fY3B1KGV2ZW50X2RhdGEtPlBoeXNEaXNrRGV2SGFuZGxlKTsKIAlzdGF0ZSA9IGxlMzJfdG9fY3B1KGV2ZW50X2RhdGEtPk5ld1ZhbHVlKTsKIAotCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGhhbmRsZSgweCUwNHgpLCAiCi0JICAgICJvbGQoMHglMDh4KSwgbmV3KDB4JTA4eClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sICBoYW5kbGUsCi0JICAgIGxlMzJfdG9fY3B1KGV2ZW50X2RhdGEtPlByZXZpb3VzVmFsdWUpLCBzdGF0ZSkpOworCWlmICghaW9jLT5oaWRlX2lyX21zZykKKwkJZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogaGFuZGxlKDB4JTA0eCksICIKKwkJICAgICJvbGQoMHglMDh4KSwgbmV3KDB4JTA4eClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sICBoYW5kbGUsCisJCSAgICBsZTMyX3RvX2NwdShldmVudF9kYXRhLT5QcmV2aW91c1ZhbHVlKSwgc3RhdGUpKTsKIAogCXN3aXRjaCAoc3RhdGUpIHsKIAljYXNlIE1QSTJfUkFJRF9QRF9TVEFURV9PTkxJTkU6CkBAIC01NzQ3LDcgKzYxMTMsOCBAQAogCWNhc2UgTVBJMl9SQUlEX1BEX1NUQVRFX09QVElNQUw6CiAJY2FzZSBNUEkyX1JBSURfUERfU1RBVEVfSE9UX1NQQVJFOgogCi0JCXNldF9iaXQoaGFuZGxlLCBpb2MtPnBkX2hhbmRsZXMpOworCQlpZiAoIWlvYy0+aXNfd2FycGRyaXZlKQorCQkJc2V0X2JpdChoYW5kbGUsIGlvYy0+cGRfaGFuZGxlcyk7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CiAJCXNhc19kZXZpY2UgPSBfc2NzaWhfc2FzX2RldmljZV9maW5kX2J5X2hhbmRsZShpb2MsIGhhbmRsZSk7CkBAIC01ODUxLDcgKzYyMTgsOCBAQAogCXUxNiBoYW5kbGU7CiAKICNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKLQlpZiAoaW9jLT5sb2dnaW5nX2xldmVsICYgTVBUX0RFQlVHX0VWRU5UX1dPUktfVEFTSykKKwlpZiAoKGlvYy0+bG9nZ2luZ19sZXZlbCAmIE1QVF9ERUJVR19FVkVOVF9XT1JLX1RBU0spCisJICAgICYmICFpb2MtPmhpZGVfaXJfbXNnKQogCQlfc2NzaWhfc2FzX2lyX29wZXJhdGlvbl9zdGF0dXNfZXZlbnRfZGVidWcoaW9jLAogCQkgICAgIGV2ZW50X2RhdGEpOwogI2VuZGlmCkBAIC01OTEwLDcgKzYyNzgsNyBAQAogX3Njc2loX21hcmtfcmVzcG9uZGluZ19zYXNfZGV2aWNlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTY0IHNhc19hZGRyZXNzLAogICAgIHUxNiBzbG90LCB1MTYgaGFuZGxlKQogewotCXN0cnVjdCBNUFQyU0FTX1RBUkdFVCAqc2FzX3RhcmdldF9wcml2X2RhdGE7CisJc3RydWN0IE1QVDJTQVNfVEFSR0VUICpzYXNfdGFyZ2V0X3ByaXZfZGF0YSA9IE5VTEw7CiAJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0OwogCXN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNTkxOCw3ICs2Mjg2LDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNhc19kZXZpY2UsICZpb2MtPnNhc19kZXZpY2VfbGlzdCwgbGlzdCkgewogCQlpZiAoc2FzX2RldmljZS0+c2FzX2FkZHJlc3MgPT0gc2FzX2FkZHJlc3MgJiYKLQkJICAgIHNhc19kZXZpY2UtPnNsb3QgPT0gc2xvdCAmJiBzYXNfZGV2aWNlLT5zdGFyZ2V0KSB7CisJCSAgICBzYXNfZGV2aWNlLT5zbG90ID09IHNsb3QpIHsKIAkJCXNhc19kZXZpY2UtPnJlc3BvbmRpbmcgPSAxOwogCQkJc3RhcmdldCA9IHNhc19kZXZpY2UtPnN0YXJnZXQ7CiAJCQlpZiAoc3RhcmdldCAmJiBzdGFyZ2V0LT5ob3N0ZGF0YSkgewpAQCAtNTkyNywxMyArNjI5NSwxNSBAQAogCQkJCXNhc190YXJnZXRfcHJpdl9kYXRhLT5kZWxldGVkID0gMDsKIAkJCX0gZWxzZQogCQkJCXNhc190YXJnZXRfcHJpdl9kYXRhID0gTlVMTDsKLQkJCXN0YXJnZXRfcHJpbnRrKEtFUk5fSU5GTywgc2FzX2RldmljZS0+c3RhcmdldCwKLQkJCSAgICAiaGFuZGxlKDB4JTA0eCksIHNhc19hZGRyKDB4JTAxNmxseCksIGVuY2xvc3VyZSAiCi0JCQkgICAgImxvZ2ljYWwgaWQoMHglMDE2bGx4KSwgc2xvdCglZClcbiIsIGhhbmRsZSwKLQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXNhc19kZXZpY2UtPnNhc19hZGRyZXNzLAotCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpCi0JCQkgICAgc2FzX2RldmljZS0+ZW5jbG9zdXJlX2xvZ2ljYWxfaWQsCi0JCQkgICAgc2FzX2RldmljZS0+c2xvdCk7CisJCQlpZiAoc3RhcmdldCkKKwkJCQlzdGFyZ2V0X3ByaW50ayhLRVJOX0lORk8sIHN0YXJnZXQsCisJCQkJICAgICJoYW5kbGUoMHglMDR4KSwgc2FzX2FkZHIoMHglMDE2bGx4KSwgIgorCQkJCSAgICAiZW5jbG9zdXJlIGxvZ2ljYWwgaWQoMHglMDE2bGx4KSwgIgorCQkJCSAgICAic2xvdCglZClcbiIsIGhhbmRsZSwKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzYXNfZGV2aWNlLT5zYXNfYWRkcmVzcywKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJCQkgICAgc2FzX2RldmljZS0+ZW5jbG9zdXJlX2xvZ2ljYWxfaWQsCisJCQkJICAgIHNhc19kZXZpY2UtPnNsb3QpOwogCQkJaWYgKHNhc19kZXZpY2UtPmhhbmRsZSA9PSBoYW5kbGUpCiAJCQkJZ290byBvdXQ7CiAJCQlwcmludGsoS0VSTl9JTkZPICJcdGhhbmRsZSBjaGFuZ2VkIGZyb20oMHglMDR4KSEhIVxuIiwKQEAgLTYwMjUsNiArNjM5NSwxMiBAQAogCQkJc3RhcmdldF9wcmludGsoS0VSTl9JTkZPLCByYWlkX2RldmljZS0+c3RhcmdldCwKIAkJCSAgICAiaGFuZGxlKDB4JTA0eCksIHd3aWQoMHglMDE2bGx4KVxuIiwgaGFuZGxlLAogCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcmFpZF9kZXZpY2UtPnd3aWQpOworCQkJLyoKKwkJCSAqIFdBUlBEUklWRTogVGhlIGhhbmRsZXMgb2YgdGhlIFBEcyBtaWdodCBoYXZlIGNoYW5nZWQKKwkJCSAqIGFjcm9zcyB0aGUgaG9zdCByZXNldCBzbyByZS1pbml0aWFsaXplIHRoZQorCQkJICogcmVxdWlyZWQgZGF0YSBmb3IgRGlyZWN0IElPCisJCQkgKi8KKwkJCV9zY3NpaF9pbml0X3dhcnBkcml2ZV9wcm9wZXJ0aWVzKGlvYywgcmFpZF9kZXZpY2UpOwogCQkJaWYgKHJhaWRfZGV2aWNlLT5oYW5kbGUgPT0gaGFuZGxlKQogCQkJCWdvdG8gb3V0OwogCQkJcHJpbnRrKEtFUk5fSU5GTyAiXHRoYW5kbGUgY2hhbmdlZCBmcm9tKDB4JTA0eCkhISFcbiIsCkBAIC02MDg2LDE4ICs2NDYyLDIwIEBACiAJfQogCiAJLyogcmVmcmVzaCB0aGUgcGRfaGFuZGxlcyAqLwotCXBoeXNfZGlza19udW0gPSAweEZGOwotCW1lbXNldChpb2MtPnBkX2hhbmRsZXMsIDAsIGlvYy0+cGRfaGFuZGxlc19zeik7Ci0Jd2hpbGUgKCEobXB0MnNhc19jb25maWdfZ2V0X3BoeXNfZGlza19wZzAoaW9jLCAmbXBpX3JlcGx5LAotCSAgICAmcGRfcGcwLCBNUEkyX1BIWVNESVNLX1BHQURfRk9STV9HRVRfTkVYVF9QSFlTRElTS05VTSwKLQkgICAgcGh5c19kaXNrX251bSkpKSB7Ci0JCWlvY19zdGF0dXMgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHkuSU9DU3RhdHVzKSAmCi0JCSAgICBNUEkyX0lPQ1NUQVRVU19NQVNLOwotCQlpZiAoaW9jX3N0YXR1cyA9PSBNUEkyX0lPQ1NUQVRVU19DT05GSUdfSU5WQUxJRF9QQUdFKQotCQkJYnJlYWs7Ci0JCXBoeXNfZGlza19udW0gPSBwZF9wZzAuUGh5c0Rpc2tOdW07Ci0JCWhhbmRsZSA9IGxlMTZfdG9fY3B1KHBkX3BnMC5EZXZIYW5kbGUpOwotCQlzZXRfYml0KGhhbmRsZSwgaW9jLT5wZF9oYW5kbGVzKTsKKwlpZiAoIWlvYy0+aXNfd2FycGRyaXZlKSB7CisJCXBoeXNfZGlza19udW0gPSAweEZGOworCQltZW1zZXQoaW9jLT5wZF9oYW5kbGVzLCAwLCBpb2MtPnBkX2hhbmRsZXNfc3opOworCQl3aGlsZSAoIShtcHQyc2FzX2NvbmZpZ19nZXRfcGh5c19kaXNrX3BnMChpb2MsICZtcGlfcmVwbHksCisJCSAgICAmcGRfcGcwLCBNUEkyX1BIWVNESVNLX1BHQURfRk9STV9HRVRfTkVYVF9QSFlTRElTS05VTSwKKwkJICAgIHBoeXNfZGlza19udW0pKSkgeworCQkJaW9jX3N0YXR1cyA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS5JT0NTdGF0dXMpICYKKwkJCSAgICBNUEkyX0lPQ1NUQVRVU19NQVNLOworCQkJaWYgKGlvY19zdGF0dXMgPT0gTVBJMl9JT0NTVEFUVVNfQ09ORklHX0lOVkFMSURfUEFHRSkKKwkJCQlicmVhazsKKwkJCXBoeXNfZGlza19udW0gPSBwZF9wZzAuUGh5c0Rpc2tOdW07CisJCQloYW5kbGUgPSBsZTE2X3RvX2NwdShwZF9wZzAuRGV2SGFuZGxlKTsKKwkJCXNldF9iaXQoaGFuZGxlLCBpb2MtPnBkX2hhbmRsZXMpOworCQl9CiAJfQogfQogCkBAIC02MjQzLDYgKzY2MjEsNTAgQEAKIH0KIAogLyoqCisgKiBfc2NzaWhfaGlkZV91bmhpZGVfc2FzX2RldmljZXMgLSBhZGQvcmVtb3ZlIGRldmljZSB0by9mcm9tIE9TCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9oaWRlX3VuaGlkZV9zYXNfZGV2aWNlcyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpCit7CisJc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlLCAqc2FzX2RldmljZV9uZXh0OworCisJaWYgKCFpb2MtPmlzX3dhcnBkcml2ZSB8fCBpb2MtPm1mZ19wZzEwX2hpZGVfZmxhZyAhPQorCSAgICBNRkdfUEFHRTEwX0hJREVfSUZfVk9MX1BSRVNFTlQpCisJCXJldHVybjsKKworCWlmIChpb2MtPmhpZGVfZHJpdmVzKSB7CisJCWlmIChfc2NzaWhfZ2V0X251bV92b2x1bWVzKGlvYykpCisJCQlyZXR1cm47CisJCWlvYy0+aGlkZV9kcml2ZXMgPSAwOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2FzX2RldmljZSwgc2FzX2RldmljZV9uZXh0LAorCQkgICAgJmlvYy0+c2FzX2RldmljZV9saXN0LCBsaXN0KSB7CisJCQlpZiAoIW1wdDJzYXNfdHJhbnNwb3J0X3BvcnRfYWRkKGlvYywgc2FzX2RldmljZS0+aGFuZGxlLAorCQkJCXNhc19kZXZpY2UtPnNhc19hZGRyZXNzX3BhcmVudCkpIHsKKwkJCQlfc2NzaWhfc2FzX2RldmljZV9yZW1vdmUoaW9jLCBzYXNfZGV2aWNlKTsKKwkJCX0gZWxzZSBpZiAoIXNhc19kZXZpY2UtPnN0YXJnZXQpIHsKKwkJCQltcHQyc2FzX3RyYW5zcG9ydF9wb3J0X3JlbW92ZShpb2MsCisJCQkJICAgIHNhc19kZXZpY2UtPnNhc19hZGRyZXNzLAorCQkJCSAgICBzYXNfZGV2aWNlLT5zYXNfYWRkcmVzc19wYXJlbnQpOworCQkJCV9zY3NpaF9zYXNfZGV2aWNlX3JlbW92ZShpb2MsIHNhc19kZXZpY2UpOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJaWYgKCFfc2NzaWhfZ2V0X251bV92b2x1bWVzKGlvYykpCisJCQlyZXR1cm47CisJCWlvYy0+aGlkZV9kcml2ZXMgPSAxOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2FzX2RldmljZSwgc2FzX2RldmljZV9uZXh0LAorCQkgICAgJmlvYy0+c2FzX2RldmljZV9saXN0LCBsaXN0KSB7CisJCQltcHQyc2FzX3RyYW5zcG9ydF9wb3J0X3JlbW92ZShpb2MsCisJCQkgICAgc2FzX2RldmljZS0+c2FzX2FkZHJlc3MsCisJCQkgICAgc2FzX2RldmljZS0+c2FzX2FkZHJlc3NfcGFyZW50KTsKKwkJfQorCX0KK30KKworLyoqCiAgKiBtcHQyc2FzX3Njc2loX3Jlc2V0X2hhbmRsZXIgLSByZXNldCBjYWxsYmFjayBoYW5kbGVyIChmb3Igc2NzaWgpCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEByZXNldF9waGFzZTogcGhhc2UKQEAgLTYzMjYsNiArNjc0OCw3IEBACiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLAogCQkJICAgIGZsYWdzKTsKIAkJX3Njc2loX3JlbW92ZV91bnJlc3BvbmRpbmdfc2FzX2RldmljZXMoaW9jKTsKKwkJX3Njc2loX2hpZGVfdW5oaWRlX3Nhc19kZXZpY2VzKGlvYyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTY0MjUsNiArNjg0OCw1MyBAQAogCQkgICAgKE1waTJFdmVudERhdGFJclZvbHVtZV90ICopCiAJCSAgICBtcGlfcmVwbHktPkV2ZW50RGF0YSk7CiAJCWJyZWFrOworCWNhc2UgTVBJMl9FVkVOVF9MT0dfRU5UUllfQURERUQ6CisJeworCQlNcGkyRXZlbnREYXRhTG9nRW50cnlBZGRlZF90ICpsb2dfZW50cnk7CisJCXUzMiAqbG9nX2NvZGU7CisKKwkJaWYgKCFpb2MtPmlzX3dhcnBkcml2ZSkKKwkJCWJyZWFrOworCisJCWxvZ19lbnRyeSA9IChNcGkyRXZlbnREYXRhTG9nRW50cnlBZGRlZF90ICopCisJCSAgICBtcGlfcmVwbHktPkV2ZW50RGF0YTsKKwkJbG9nX2NvZGUgPSAodTMyICopbG9nX2VudHJ5LT5Mb2dEYXRhOworCisJCWlmIChsZTE2X3RvX2NwdShsb2dfZW50cnktPkxvZ0VudHJ5UXVhbGlmaWVyKQorCQkgICAgIT0gTVBUMl9XQVJQRFJJVkVfTE9HRU5UUlkpCisJCQlicmVhazsKKworCQlzd2l0Y2ggKGxlMzJfdG9fY3B1KCpsb2dfY29kZSkpIHsKKwkJY2FzZSBNUFQyX1dBUlBEUklWRV9MQ19TU0RUOgorCQkJcHJpbnRrKE1QVDJTQVNfV0FSTl9GTVQgIldhcnBEcml2ZSBXYXJuaW5nOiAiCisJCQkgICAgIklPIFRocm90dGxpbmcgaGFzIG9jY3VycmVkIGluIHRoZSBXYXJwRHJpdmUgIgorCQkJICAgICJzdWJzeXN0ZW0uIENoZWNrIFdhcnBEcml2ZSBkb2N1bWVudGF0aW9uIGZvciAiCisJCQkgICAgImFkZGl0aW9uYWwgZGV0YWlscy5cbiIsIGlvYy0+bmFtZSk7CisJCQlicmVhazsKKwkJY2FzZSBNUFQyX1dBUlBEUklWRV9MQ19TU0RMVzoKKwkJCXByaW50ayhNUFQyU0FTX1dBUk5fRk1UICJXYXJwRHJpdmUgV2FybmluZzogIgorCQkJICAgICJQcm9ncmFtL0VyYXNlIEN5Y2xlcyBmb3IgdGhlIFdhcnBEcml2ZSBzdWJzeXN0ZW0gIgorCQkJICAgICJpbiBkZWdyYWRlZCByYW5nZS4gQ2hlY2sgV2FycERyaXZlIGRvY3VtZW50YXRpb24gIgorCQkJICAgICJmb3IgYWRkaXRpb25hbCBkZXRhaWxzLlxuIiwgaW9jLT5uYW1lKTsKKwkJCWJyZWFrOworCQljYXNlIE1QVDJfV0FSUERSSVZFX0xDX1NTRExGOgorCQkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiV2FycERyaXZlIEZhdGFsIEVycm9yOiAiCisJCQkgICAgIlRoZXJlIGFyZSBubyBQcm9ncmFtL0VyYXNlIEN5Y2xlcyBmb3IgdGhlICIKKwkJCSAgICAiV2FycERyaXZlIHN1YnN5c3RlbS4gVGhlIHN0b3JhZ2UgZGV2aWNlIHdpbGwgYmUgIgorCQkJICAgICJpbiByZWFkLW9ubHkgbW9kZS4gQ2hlY2sgV2FycERyaXZlIGRvY3VtZW50YXRpb24gIgorCQkJICAgICJmb3IgYWRkaXRpb25hbCBkZXRhaWxzLlxuIiwgaW9jLT5uYW1lKTsKKwkJCWJyZWFrOworCQljYXNlIE1QVDJfV0FSUERSSVZFX0xDX0JSTUY6CisJCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJXYXJwRHJpdmUgRmF0YWwgRXJyb3I6ICIKKwkJCSAgICAiVGhlIEJhY2t1cCBSYWlsIE1vbml0b3IgaGFzIGZhaWxlZCBvbiB0aGUgIgorCQkJICAgICJXYXJwRHJpdmUgc3Vic3lzdGVtLiBDaGVjayBXYXJwRHJpdmUgIgorCQkJICAgICJkb2N1bWVudGF0aW9uIGZvciBhZGRpdGlvbmFsIGRldGFpbHMuXG4iLAorCQkJICAgIGlvYy0+bmFtZSk7CisJCQlicmVhazsKKwkJfQorCisJCWJyZWFrOworCX0KIAljYXNlIE1QSTJfRVZFTlRfU0FTX0RFVklDRV9TVEFUVVNfQ0hBTkdFOgogCWNhc2UgTVBJMl9FVkVOVF9JUl9PUEVSQVRJT05fU1RBVFVTOgogCWNhc2UgTVBJMl9FVkVOVF9TQVNfRElTQ09WRVJZOgpAQCAtNjU4Myw3ICs3MDUzLDggQEAKIAltcGlfcmVxdWVzdC0+RnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX1JBSURfQUNUSU9OOwogCW1waV9yZXF1ZXN0LT5BY3Rpb24gPSBNUEkyX1JBSURfQUNUSU9OX1NZU1RFTV9TSFVURE9XTl9JTklUSUFURUQ7CiAKLQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiSVIgc2h1dGRvd24gKHNlbmRpbmcpXG4iLCBpb2MtPm5hbWUpOworCWlmICghaW9jLT5oaWRlX2lyX21zZykKKwkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIklSIHNodXRkb3duIChzZW5kaW5nKVxuIiwgaW9jLT5uYW1lKTsKIAlpbml0X2NvbXBsZXRpb24oJmlvYy0+c2NzaWhfY21kcy5kb25lKTsKIAltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOwogCXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT5zY3NpaF9jbWRzLmRvbmUsIDEwKkhaKTsKQEAgLTY1OTcsMTAgKzcwNjgsMTEgQEAKIAlpZiAoaW9jLT5zY3NpaF9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX1JFUExZX1ZBTElEKSB7CiAJCW1waV9yZXBseSA9IGlvYy0+c2NzaWhfY21kcy5yZXBseTsKIAotCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiSVIgc2h1dGRvd24gKGNvbXBsZXRlKTogIgotCQkgICAgImlvY19zdGF0dXMoMHglMDR4KSwgbG9naW5mbygweCUwOHgpXG4iLAotCQkgICAgaW9jLT5uYW1lLCBsZTE2X3RvX2NwdShtcGlfcmVwbHktPklPQ1N0YXR1cyksCi0JCSAgICBsZTMyX3RvX2NwdShtcGlfcmVwbHktPklPQ0xvZ0luZm8pKTsKKwkJaWYgKCFpb2MtPmhpZGVfaXJfbXNnKQorCQkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIklSIHNodXRkb3duIChjb21wbGV0ZSk6ICIKKwkJCSAgICAiaW9jX3N0YXR1cygweCUwNHgpLCBsb2dpbmZvKDB4JTA4eClcbiIsCisJCQkgICAgaW9jLT5uYW1lLCBsZTE2X3RvX2NwdShtcGlfcmVwbHktPklPQ1N0YXR1cyksCisJCQkgICAgbGUzMl90b19jcHUobXBpX3JlcGx5LT5JT0NMb2dJbmZvKSk7CiAJfQogCiAgb3V0OgpAQCAtNjc1OSw2ICs3MjMxLDkgQEAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CiAJCWxpc3RfbW92ZV90YWlsKCZzYXNfZGV2aWNlLT5saXN0LCAmaW9jLT5zYXNfZGV2aWNlX2xpc3QpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCisJCWlmIChpb2MtPmhpZGVfZHJpdmVzKQorCQkJcmV0dXJuOwogCQlpZiAoIW1wdDJzYXNfdHJhbnNwb3J0X3BvcnRfYWRkKGlvYywgc2FzX2RldmljZS0+aGFuZGxlLAogCQkgICAgc2FzX2RldmljZS0+c2FzX2FkZHJlc3NfcGFyZW50KSkgewogCQkJX3Njc2loX3Nhc19kZXZpY2VfcmVtb3ZlKGlvYywgc2FzX2RldmljZSk7CkBAIC02ODEyLDYgKzcyODcsOSBAQAogCQlsaXN0X21vdmVfdGFpbCgmc2FzX2RldmljZS0+bGlzdCwgJmlvYy0+c2FzX2RldmljZV9saXN0KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAorCQlpZiAoaW9jLT5oaWRlX2RyaXZlcykKKwkJCWNvbnRpbnVlOworCiAJCWlmICghbXB0MnNhc190cmFuc3BvcnRfcG9ydF9hZGQoaW9jLCBzYXNfZGV2aWNlLT5oYW5kbGUsCiAJCSAgICBzYXNfZGV2aWNlLT5zYXNfYWRkcmVzc19wYXJlbnQpKSB7CiAJCQlfc2NzaWhfc2FzX2RldmljZV9yZW1vdmUoaW9jLCBzYXNfZGV2aWNlKTsKQEAgLTY4ODIsNiArNzM2MCwxMSBAQAogCWlvYy0+aWQgPSBtcHRfaWRzKys7CiAJc3ByaW50Zihpb2MtPm5hbWUsICIlcyVkIiwgTVBUMlNBU19EUklWRVJfTkFNRSwgaW9jLT5pZCk7CiAJaW9jLT5wZGV2ID0gcGRldjsKKwlpZiAoaWQtPmRldmljZSA9PSBNUEkyX01GR1BBR0VfREVWSURfU1NTNjIwMCkgeworCQlpb2MtPmlzX3dhcnBkcml2ZSA9IDE7CisJCWlvYy0+aGlkZV9pcl9tc2cgPSAxOworCX0gZWxzZQorCQlpb2MtPm1mZ19wZzEwX2hpZGVfZmxhZyA9IE1GR19QQUdFMTBfRVhQT1NFX0FMTF9ESVNLUzsKIAlpb2MtPnNjc2lfaW9fY2JfaWR4ID0gc2NzaV9pb19jYl9pZHg7CiAJaW9jLT50bV9jYl9pZHggPSB0bV9jYl9pZHg7CiAJaW9jLT5jdGxfY2JfaWR4ID0gY3RsX2NiX2lkeDsKQEAgLTY5NDcsNiArNzQzMCwyMCBAQAogCX0KIAogCWlvYy0+d2FpdF9mb3JfcG9ydF9lbmFibGVfdG9fY29tcGxldGUgPSAwOworCWlmIChpb2MtPmlzX3dhcnBkcml2ZSkgeworCQlpZiAoaW9jLT5tZmdfcGcxMF9oaWRlX2ZsYWcgPT0gIE1GR19QQUdFMTBfRVhQT1NFX0FMTF9ESVNLUykKKwkJCWlvYy0+aGlkZV9kcml2ZXMgPSAwOworCQllbHNlIGlmIChpb2MtPm1mZ19wZzEwX2hpZGVfZmxhZyA9PSAgTUZHX1BBR0UxMF9ISURFX0FMTF9ESVNLUykKKwkJCWlvYy0+aGlkZV9kcml2ZXMgPSAxOworCQllbHNlIHsKKwkJCWlmIChfc2NzaWhfZ2V0X251bV92b2x1bWVzKGlvYykpCisJCQkJaW9jLT5oaWRlX2RyaXZlcyA9IDE7CisJCQllbHNlCisJCQkJaW9jLT5oaWRlX2RyaXZlcyA9IDA7CisJCX0KKwl9IGVsc2UKKwkJaW9jLT5oaWRlX2RyaXZlcyA9IDA7CisKIAlfc2NzaWhfcHJvYmVfZGV2aWNlcyhpb2MpOwogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXZzYXMvS2NvbmZpZyBiL2RyaXZlcnMvc2NzaS9tdnNhcy9LY29uZmlnCmluZGV4IDZkZTdhZjIuLmM4MmIwMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tdnNhcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2NzaS9tdnNhcy9LY29uZmlnCkBAIC0zLDYgKzMsNyBAQAogIwogIyBDb3B5cmlnaHQgMjAwNyBSZWQgSGF0LCBJbmMuCiAjIENvcHlyaWdodCAyMDA4IE1hcnZlbGwuIDxrZXdlaUBtYXJ2ZWxsLmNvbT4KKyMgQ29weXJpZ2h0IDIwMDktMjAwMTEgTWFydmVsbC4gPHl1eGlhbmdsQG1hcnZlbGwuY29tPgogIwogIyBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgR1BMdjIuCiAjCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXZzYXMvTWFrZWZpbGUgYi9kcml2ZXJzL3Njc2kvbXZzYXMvTWFrZWZpbGUKaW5kZXggZmZiZjc1OS4uODdiMjMxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL212c2FzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc2NzaS9tdnNhcy9NYWtlZmlsZQpAQCAtMyw2ICszLDcgQEAKICMKICMgQ29weXJpZ2h0IDIwMDcgUmVkIEhhdCwgSW5jLgogIyBDb3B5cmlnaHQgMjAwOCBNYXJ2ZWxsLiA8a2V3ZWlAbWFydmVsbC5jb20+CisjIENvcHlyaWdodCAyMDA5LTIwMTEgTWFydmVsbC4gPHl1eGlhbmdsQG1hcnZlbGwuY29tPgogIwogIyBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgR1BMdjIuCiAjCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfNjR4eC5jIGIvZHJpdmVycy9zY3NpL212c2FzL212XzY0eHguYwppbmRleCBhZmM3ZjZmLi4xM2M5NjA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfNjR4eC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl82NHh4LmMKQEAgLTMsNiArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IDIwMDcgUmVkIEhhdCwgSW5jLgogICogQ29weXJpZ2h0IDIwMDggTWFydmVsbC4gPGtld2VpQG1hcnZlbGwuY29tPgorICogQ29weXJpZ2h0IDIwMDktMjAxMSBNYXJ2ZWxsLiA8eXV4aWFuZ2xAbWFydmVsbC5jb20+CiAgKgogICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIEdQTHYyLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl82NHh4LmggYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfNjR4eC5oCmluZGV4IDQyZTk0N2QuLjU0NTg4OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl82NHh4LmgKKysrIGIvZHJpdmVycy9zY3NpL212c2FzL212XzY0eHguaApAQCAtMyw2ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgMjAwNyBSZWQgSGF0LCBJbmMuCiAgKiBDb3B5cmlnaHQgMjAwOCBNYXJ2ZWxsLiA8a2V3ZWlAbWFydmVsbC5jb20+CisgKiBDb3B5cmlnaHQgMjAwOS0yMDExIE1hcnZlbGwuIDx5dXhpYW5nbEBtYXJ2ZWxsLmNvbT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgR1BMdjIuCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL212c2FzL212Xzk0eHguYyBiL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl85NHh4LmMKaW5kZXggZWVkNGM1Yy4uNzgxNjJjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL212c2FzL212Xzk0eHguYworKysgYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfOTR4eC5jCkBAIC0zLDYgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAyMDA3IFJlZCBIYXQsIEluYy4KICAqIENvcHlyaWdodCAyMDA4IE1hcnZlbGwuIDxrZXdlaUBtYXJ2ZWxsLmNvbT4KKyAqIENvcHlyaWdodCAyMDA5LTIwMTEgTWFydmVsbC4gPHl1eGlhbmdsQG1hcnZlbGwuY29tPgogICoKICAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciBHUEx2Mi4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfOTR4eC5oIGIvZHJpdmVycy9zY3NpL212c2FzL212Xzk0eHguaAppbmRleCAyM2VkOWIxLi44ODM1YmVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfOTR4eC5oCisrKyBiL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl85NHh4LmgKQEAgLTMsNiArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IDIwMDcgUmVkIEhhdCwgSW5jLgogICogQ29weXJpZ2h0IDIwMDggTWFydmVsbC4gPGtld2VpQG1hcnZlbGwuY29tPgorICogQ29weXJpZ2h0IDIwMDktMjAxMSBNYXJ2ZWxsLiA8eXV4aWFuZ2xAbWFydmVsbC5jb20+CiAgKgogICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIEdQTHYyLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9jaGlwcy5oIGIvZHJpdmVycy9zY3NpL212c2FzL212X2NoaXBzLmgKaW5kZXggYTY3ZTFjNC4uMTc1M2E2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL212c2FzL212X2NoaXBzLmgKKysrIGIvZHJpdmVycy9zY3NpL212c2FzL212X2NoaXBzLmgKQEAgLTMsNiArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IDIwMDcgUmVkIEhhdCwgSW5jLgogICogQ29weXJpZ2h0IDIwMDggTWFydmVsbC4gPGtld2VpQG1hcnZlbGwuY29tPgorICogQ29weXJpZ2h0IDIwMDktMjAxMSBNYXJ2ZWxsLiA8eXV4aWFuZ2xAbWFydmVsbC5jb20+CiAgKgogICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIEdQTHYyLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9kZWZzLmggYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfZGVmcy5oCmluZGV4IDE4NDlkYTEuLmJjMDBjOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9kZWZzLmgKKysrIGIvZHJpdmVycy9zY3NpL212c2FzL212X2RlZnMuaApAQCAtMyw2ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgMjAwNyBSZWQgSGF0LCBJbmMuCiAgKiBDb3B5cmlnaHQgMjAwOCBNYXJ2ZWxsLiA8a2V3ZWlAbWFydmVsbC5jb20+CisgKiBDb3B5cmlnaHQgMjAwOS0yMDExIE1hcnZlbGwuIDx5dXhpYW5nbEBtYXJ2ZWxsLmNvbT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgR1BMdjIuCiAgKgpAQCAtMzQsNiArMzUsOCBAQAogCWNoaXBfNjQ4NSwKIAljaGlwXzk0ODAsCiAJY2hpcF85MTgwLAorCWNoaXBfOTQ0NSwKKwljaGlwXzk0ODUsCiAJY2hpcF8xMzAwLAogCWNoaXBfMTMyMAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9pbml0LmMgYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfaW5pdC5jCmluZGV4IDkzOGQwNDUuLjkwYjYzNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL212c2FzL212X2luaXQuYwpAQCAtMyw2ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgMjAwNyBSZWQgSGF0LCBJbmMuCiAgKiBDb3B5cmlnaHQgMjAwOCBNYXJ2ZWxsLiA8a2V3ZWlAbWFydmVsbC5jb20+CisgKiBDb3B5cmlnaHQgMjAwOS0yMDExIE1hcnZlbGwuIDx5dXhpYW5nbEBtYXJ2ZWxsLmNvbT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgR1BMdjIuCiAgKgpAQCAtMjUsMTMgKzI2LDI0IEBACiAKICNpbmNsdWRlICJtdl9zYXMuaCIKIAorc3RhdGljIGludCBsbGRkX21heF9leGVjdXRlX251bSA9IDE7Cittb2R1bGVfcGFyYW1fbmFtZWQoY29sbGVjdG9yLCBsbGRkX21heF9leGVjdXRlX251bSwgaW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoY29sbGVjdG9yLCAiXG4iCisJIlx0SWYgZ3JlYXRlciB0aGFuIG9uZSwgdGVsbHMgdGhlIFNBUyBMYXllciB0byBydW4gaW4gVGFzayBDb2xsZWN0b3JcbiIKKwkiXHRNb2RlLiAgSWYgMSBvciAwLCB0ZWxscyB0aGUgU0FTIExheWVyIHRvIHJ1biBpbiBEaXJlY3QgTW9kZS5cbiIKKwkiXHRUaGUgbXZzYXMgU0FTIExMREQgc3VwcG9ydHMgYm90aCBtb2Rlcy5cbiIKKwkiXHREZWZhdWx0OiAxIChEaXJlY3QgTW9kZSkuXG4iKTsKKwogc3RhdGljIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSAqbXZzX3N0dDsKK3N0cnVjdCBrbWVtX2NhY2hlICptdnNfdGFza19saXN0X2NhY2hlOwogc3RhdGljIGNvbnN0IHN0cnVjdCBtdnNfY2hpcF9pbmZvIG12c19jaGlwc1tdID0gewogCVtjaGlwXzYzMjBdID0JeyAxLCAyLCAweDQwMCwgMTcsIDE2LCAgOSwgJm12c182NHh4X2Rpc3BhdGNoLCB9LAogCVtjaGlwXzY0NDBdID0JeyAxLCA0LCAweDQwMCwgMTcsIDE2LCAgOSwgJm12c182NHh4X2Rpc3BhdGNoLCB9LAogCVtjaGlwXzY0ODVdID0JeyAxLCA4LCAweDgwMCwgMzMsIDMyLCAxMCwgJm12c182NHh4X2Rpc3BhdGNoLCB9LAogCVtjaGlwXzkxODBdID0JeyAyLCA0LCAweDgwMCwgMTcsIDY0LCAgOSwgJm12c185NHh4X2Rpc3BhdGNoLCB9LAogCVtjaGlwXzk0ODBdID0JeyAyLCA0LCAweDgwMCwgMTcsIDY0LCAgOSwgJm12c185NHh4X2Rpc3BhdGNoLCB9LAorCVtjaGlwXzk0NDVdID0JeyAxLCA0LCAweDgwMCwgMTcsIDY0LCAxMSwgJm12c185NHh4X2Rpc3BhdGNoLCB9LAorCVtjaGlwXzk0ODVdID0JeyAyLCA0LCAweDgwMCwgMTcsIDY0LCAxMSwgJm12c185NHh4X2Rpc3BhdGNoLCB9LAogCVtjaGlwXzEzMDBdID0JeyAxLCA0LCAweDQwMCwgMTcsIDE2LCAgOSwgJm12c182NHh4X2Rpc3BhdGNoLCB9LAogCVtjaGlwXzEzMjBdID0JeyAyLCA0LCAweDgwMCwgMTcsIDY0LCAgOSwgJm12c185NHh4X2Rpc3BhdGNoLCB9LAogfTsKQEAgLTEwNyw3ICsxMTksNiBAQAogCiBzdGF0aWMgdm9pZCBtdnNfZnJlZShzdHJ1Y3QgbXZzX2luZm8gKm12aSkKIHsKLQlpbnQgaTsKIAlzdHJ1Y3QgbXZzX3dxICptd3E7CiAJaW50IHNsb3RfbnI7CiAKQEAgLTExOSwxMiArMTMwLDggQEAKIAllbHNlCiAJCXNsb3RfbnIgPSBNVlNfU0xPVFM7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbXZpLT50YWdzX251bTsgaSsrKSB7Ci0JCXN0cnVjdCBtdnNfc2xvdF9pbmZvICpzbG90ID0gJm12aS0+c2xvdF9pbmZvW2ldOwotCQlpZiAoc2xvdC0+YnVmKQotCQkJZG1hX2ZyZWVfY29oZXJlbnQobXZpLT5kZXYsIE1WU19TTE9UX0JVRl9TWiwKLQkJCQkJICBzbG90LT5idWYsIHNsb3QtPmJ1Zl9kbWEpOwotCX0KKwlpZiAobXZpLT5kbWFfcG9vbCkKKwkJcGNpX3Bvb2xfZGVzdHJveShtdmktPmRtYV9wb29sKTsKIAogCWlmIChtdmktPnR4KQogCQlkbWFfZnJlZV9jb2hlcmVudChtdmktPmRldiwKQEAgLTIxMyw2ICsyMjAsNyBAQAogc3RhdGljIGludCBfX2RldmluaXQgbXZzX2FsbG9jKHN0cnVjdCBtdnNfaW5mbyAqbXZpLCBzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKIHsKIAlpbnQgaSA9IDAsIHNsb3RfbnI7CisJY2hhciBwb29sX25hbWVbMzJdOwogCiAJaWYgKG12aS0+ZmxhZ3MgJiBNVkZfRkxBR19TT0MpCiAJCXNsb3RfbnIgPSBNVlNfU09DX1NMT1RTOwpAQCAtMjcyLDE4ICsyODAsMTQgQEAKIAlpZiAoIW12aS0+YnVsa19idWZmZXIpCiAJCWdvdG8gZXJyX291dDsKICNlbmRpZgotCWZvciAoaSA9IDA7IGkgPCBzbG90X25yOyBpKyspIHsKLQkJc3RydWN0IG12c19zbG90X2luZm8gKnNsb3QgPSAmbXZpLT5zbG90X2luZm9baV07Ci0KLQkJc2xvdC0+YnVmID0gZG1hX2FsbG9jX2NvaGVyZW50KG12aS0+ZGV2LCBNVlNfU0xPVF9CVUZfU1osCi0JCQkJCSAgICAgICAmc2xvdC0+YnVmX2RtYSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghc2xvdC0+YnVmKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyJmYWlsZWQgdG8gYWxsb2NhdGUgc2xvdC0+YnVmLlxuIik7CisJc3ByaW50Zihwb29sX25hbWUsICIlcyVkIiwgIm12c19kbWFfcG9vbCIsIG12aS0+aWQpOworCW12aS0+ZG1hX3Bvb2wgPSBwY2lfcG9vbF9jcmVhdGUocG9vbF9uYW1lLCBtdmktPnBkZXYsIE1WU19TTE9UX0JVRl9TWiwgMTYsIDApOworCWlmICghbXZpLT5kbWFfcG9vbCkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgImZhaWxlZCB0byBjcmVhdGUgZG1hIHBvb2wgJXMuXG4iLCBwb29sX25hbWUpOwogCQkJZ290byBlcnJfb3V0OwotCQl9Ci0JCW1lbXNldChzbG90LT5idWYsIDAsIE1WU19TTE9UX0JVRl9TWik7Ci0JCSsrbXZpLT50YWdzX251bTsKIAl9CisJbXZpLT50YWdzX251bSA9IHNsb3RfbnI7CisKIAkvKiBJbml0aWFsaXplIHRhZ3MgKi8KIAltdnNfdGFnX2luaXQobXZpKTsKIAlyZXR1cm4gMDsKQEAgLTQ4NCw3ICs0ODgsNyBAQAogCiAJc2hhLT5udW1fcGh5cyA9IG5yX2NvcmUgKiBjaGlwX2luZm8tPm5fcGh5OwogCi0Jc2hhLT5sbGRkX21heF9leGVjdXRlX251bSA9IDE7CisJc2hhLT5sbGRkX21heF9leGVjdXRlX251bSA9IGxsZGRfbWF4X2V4ZWN1dGVfbnVtOwogCiAJaWYgKG12aS0+ZmxhZ3MgJiBNVkZfRkxBR19TT0MpCiAJCWNhbl9xdWV1ZSA9IE1WU19TT0NfQ0FOX1FVRVVFOwpAQCAtNjcwLDYgKzY3NCwyNCBAQAogCXsgUENJX1ZERVZJQ0UoVFRJLCAweDI3NDApLCBjaGlwXzk0ODAgfSwKIAl7IFBDSV9WREVWSUNFKFRUSSwgMHgyNzQ0KSwgY2hpcF85NDgwIH0sCiAJeyBQQ0lfVkRFVklDRShUVEksIDB4Mjc2MCksIGNoaXBfOTQ4MCB9LAorCXsKKwkJLnZlbmRvcgkJPSAweDFiNGIsCisJCS5kZXZpY2UJCT0gMHg5NDQ1LAorCQkuc3VidmVuZG9yCT0gUENJX0FOWV9JRCwKKwkJLnN1YmRldmljZQk9IDB4OTQ4MCwKKwkJLmNsYXNzCQk9IDAsCisJCS5jbGFzc19tYXNrCT0gMCwKKwkJLmRyaXZlcl9kYXRhCT0gY2hpcF85NDQ1LAorCX0sCisJeworCQkudmVuZG9yCQk9IDB4MWI0YiwKKwkJLmRldmljZQkJPSAweDk0ODUsCisJCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELAorCQkuc3ViZGV2aWNlCT0gMHg5NDgwLAorCQkuY2xhc3MJCT0gMCwKKwkJLmNsYXNzX21hc2sJPSAwLAorCQkuZHJpdmVyX2RhdGEJPSBjaGlwXzk0ODUsCisJfSwKIAogCXsgfQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwogfTsKQEAgLTY5MCw2ICs3MTIsMTQgQEAKIAlpZiAoIW12c19zdHQpCiAJCXJldHVybiAtRU5PTUVNOwogCisJbXZzX3Rhc2tfbGlzdF9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJtdnNfdGFza19saXN0Iiwgc2l6ZW9mKHN0cnVjdCBtdnNfdGFza19saXN0KSwKKwkJCQkJCQkgMCwgU0xBQl9IV0NBQ0hFX0FMSUdOLCBOVUxMKTsKKwlpZiAoIW12c190YXNrX2xpc3RfY2FjaGUpIHsKKwkJcmMgPSAtRU5PTUVNOworCQltdl9wcmludGsoIiVzOiBtdnNfdGFza19saXN0X2NhY2hlIGFsbG9jIGZhaWxlZCEgXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXJyX291dDsKKwl9CisKIAlyYyA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJm12c19wY2lfZHJpdmVyKTsKIAogCWlmIChyYykKQEAgLTcwNiw2ICs3MzYsNyBAQAogewogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbXZzX3BjaV9kcml2ZXIpOwogCXNhc19yZWxlYXNlX3RyYW5zcG9ydChtdnNfc3R0KTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kobXZzX3Rhc2tfbGlzdF9jYWNoZSk7CiB9CiAKIG1vZHVsZV9pbml0KG12c19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9zYXMuYyBiL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9zYXMuYwppbmRleCBhZGVkYWE5Li4wZWYyNzQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfc2FzLmMKKysrIGIvZHJpdmVycy9zY3NpL212c2FzL212X3Nhcy5jCkBAIC0zLDYgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAyMDA3IFJlZCBIYXQsIEluYy4KICAqIENvcHlyaWdodCAyMDA4IE1hcnZlbGwuIDxrZXdlaUBtYXJ2ZWxsLmNvbT4KKyAqIENvcHlyaWdodCAyMDA5LTIwMTEgTWFydmVsbC4gPHl1eGlhbmdsQG1hcnZlbGwuY29tPgogICoKICAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciBHUEx2Mi4KICAqCkBAIC04NjIsMTc4ICs4NjMsMjg2IEBACiB9CiAKICNkZWZpbmUJREVWX0lTX0dPTkUobXZpX2RldikJKCghbXZpX2RldiB8fCAobXZpX2Rldi0+ZGV2X3R5cGUgPT0gTk9fREVWSUNFKSkpCi1zdGF0aWMgaW50IG12c190YXNrX2V4ZWMoc3RydWN0IHNhc190YXNrICp0YXNrLCBjb25zdCBpbnQgbnVtLCBnZnBfdCBnZnBfZmxhZ3MsCi0JCQkJc3RydWN0IGNvbXBsZXRpb24gKmNvbXBsZXRpb24saW50IGlzX3RtZiwKLQkJCQlzdHJ1Y3QgbXZzX3RtZl90YXNrICp0bWYpCitzdGF0aWMgaW50IG12c190YXNrX3ByZXAoc3RydWN0IHNhc190YXNrICp0YXNrLCBzdHJ1Y3QgbXZzX2luZm8gKm12aSwgaW50IGlzX3RtZiwKKwkJCQlzdHJ1Y3QgbXZzX3RtZl90YXNrICp0bWYsIGludCAqcGFzcykKIHsKIAlzdHJ1Y3QgZG9tYWluX2RldmljZSAqZGV2ID0gdGFzay0+ZGV2OwotCXN0cnVjdCBtdnNfZGV2aWNlICptdmlfZGV2ID0gKHN0cnVjdCBtdnNfZGV2aWNlICopZGV2LT5sbGRkX2RldjsKLQlzdHJ1Y3QgbXZzX2luZm8gKm12aSA9IG12aV9kZXYtPm12aV9pbmZvOworCXN0cnVjdCBtdnNfZGV2aWNlICptdmlfZGV2ID0gZGV2LT5sbGRkX2RldjsKIAlzdHJ1Y3QgbXZzX3Rhc2tfZXhlY19pbmZvIHRlaTsKLQlzdHJ1Y3Qgc2FzX3Rhc2sgKnQgPSB0YXNrOwogCXN0cnVjdCBtdnNfc2xvdF9pbmZvICpzbG90OwotCXUzMiB0YWcgPSAweGRlYWRiZWVmLCByYywgbl9lbGVtID0gMDsKLQl1MzIgbiA9IG51bSwgcGFzcyA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFncyA9IDAsICBmbGFnc19saWJzYXMgPSAwOworCXUzMiB0YWcgPSAweGRlYWRiZWVmLCBuX2VsZW0gPSAwOworCWludCByYyA9IDA7CiAKIAlpZiAoIWRldi0+cG9ydCkgewotCQlzdHJ1Y3QgdGFza19zdGF0dXNfc3RydWN0ICp0c20gPSAmdC0+dGFza19zdGF0dXM7CisJCXN0cnVjdCB0YXNrX3N0YXR1c19zdHJ1Y3QgKnRzbSA9ICZ0YXNrLT50YXNrX3N0YXR1czsKIAogCQl0c20tPnJlc3AgPSBTQVNfVEFTS19VTkRFTElWRVJFRDsKIAkJdHNtLT5zdGF0ID0gU0FTX1BIWV9ET1dOOworCQkvKgorCQkgKiBsaWJzYXMgd2lsbCB1c2UgZGV2LT5wb3J0LCBzaG91bGQKKwkJICogbm90IGNhbGwgdGFza19kb25lIGZvciBzYXRhCisJCSAqLwogCQlpZiAoZGV2LT5kZXZfdHlwZSAhPSBTQVRBX0RFVikKLQkJCXQtPnRhc2tfZG9uZSh0KTsKLQkJcmV0dXJuIDA7CisJCQl0YXNrLT50YXNrX2RvbmUodGFzayk7CisJCXJldHVybiByYzsKIAl9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbXZpLT5sb2NrLCBmbGFncyk7Ci0JZG8gewotCQlkZXYgPSB0LT5kZXY7Ci0JCW12aV9kZXYgPSBkZXYtPmxsZGRfZGV2OwotCQlpZiAoREVWX0lTX0dPTkUobXZpX2RldikpIHsKLQkJCWlmIChtdmlfZGV2KQotCQkJCW12X2RwcmludGsoImRldmljZSAlZCBub3QgcmVhZHkuXG4iLAotCQkJCQltdmlfZGV2LT5kZXZpY2VfaWQpOwotCQkJZWxzZQotCQkJCW12X2RwcmludGsoImRldmljZSAlMDE2bGx4IG5vdCByZWFkeS5cbiIsCi0JCQkJCVNBU19BRERSKGRldi0+c2FzX2FkZHIpKTsKKwlpZiAoREVWX0lTX0dPTkUobXZpX2RldikpIHsKKwkJaWYgKG12aV9kZXYpCisJCQltdl9kcHJpbnRrKCJkZXZpY2UgJWQgbm90IHJlYWR5LlxuIiwKKwkJCQltdmlfZGV2LT5kZXZpY2VfaWQpOworCQllbHNlCisJCQltdl9kcHJpbnRrKCJkZXZpY2UgJTAxNmxseCBub3QgcmVhZHkuXG4iLAorCQkJCVNBU19BRERSKGRldi0+c2FzX2FkZHIpKTsKIAogCQkJcmMgPSBTQVNfUEhZX0RPV047Ci0JCQlnb3RvIG91dF9kb25lOwotCQl9CisJCQlyZXR1cm4gcmM7CisJfQorCXRlaS5wb3J0ID0gZGV2LT5wb3J0LT5sbGRkX3BvcnQ7CisJaWYgKHRlaS5wb3J0ICYmICF0ZWkucG9ydC0+cG9ydF9hdHRhY2hlZCAmJiAhdG1mKSB7CisJCWlmIChzYXNfcHJvdG9jb2xfYXRhKHRhc2stPnRhc2tfcHJvdG8pKSB7CisJCQlzdHJ1Y3QgdGFza19zdGF0dXNfc3RydWN0ICp0cyA9ICZ0YXNrLT50YXNrX3N0YXR1czsKKwkJCW12X2RwcmludGsoIlNBVEEvU1RQIHBvcnQgJWQgZG9lcyBub3QgYXR0YWNoIgorCQkJCQkiZGV2aWNlLlxuIiwgZGV2LT5wb3J0LT5pZCk7CisJCQl0cy0+cmVzcCA9IFNBU19UQVNLX0NPTVBMRVRFOworCQkJdHMtPnN0YXQgPSBTQVNfUEhZX0RPV047CiAKLQkJaWYgKGRldi0+cG9ydC0+aWQgPj0gbXZpLT5jaGlwLT5uX3BoeSkKLQkJCXRlaS5wb3J0ID0gJm12aS0+cG9ydFtkZXYtPnBvcnQtPmlkIC0gbXZpLT5jaGlwLT5uX3BoeV07Ci0JCWVsc2UKLQkJCXRlaS5wb3J0ID0gJm12aS0+cG9ydFtkZXYtPnBvcnQtPmlkXTsKKwkJCXRhc2stPnRhc2tfZG9uZSh0YXNrKTsKIAotCQlpZiAodGVpLnBvcnQgJiYgIXRlaS5wb3J0LT5wb3J0X2F0dGFjaGVkKSB7Ci0JCQlpZiAoc2FzX3Byb3RvY29sX2F0YSh0LT50YXNrX3Byb3RvKSkgewotCQkJCXN0cnVjdCB0YXNrX3N0YXR1c19zdHJ1Y3QgKnRzID0gJnQtPnRhc2tfc3RhdHVzOwotCi0JCQkJbXZfZHByaW50aygicG9ydCAlZCBkb2VzIG5vdCIKLQkJCQkJImF0dGFjaGVkIGRldmljZS5cbiIsIGRldi0+cG9ydC0+aWQpOwotCQkJCXRzLT5zdGF0ID0gU0FTX1BST1RPX1JFU1BPTlNFOwotCQkJCXRzLT5zdGF0ID0gU0FTX1BIWV9ET1dOOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZGV2LT5zYXRhX2Rldi5hcC0+bG9jaywKLQkJCQkJCSAgICAgICBmbGFnc19saWJzYXMpOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm12aS0+bG9jaywgZmxhZ3MpOwotCQkJCXQtPnRhc2tfZG9uZSh0KTsKLQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmbXZpLT5sb2NrLCBmbGFncyk7Ci0JCQkJc3Bpbl9sb2NrX2lycXNhdmUoZGV2LT5zYXRhX2Rldi5hcC0+bG9jaywKLQkJCQkJCSAgZmxhZ3NfbGlic2FzKTsKLQkJCQlpZiAobiA+IDEpCi0JCQkJCXQgPSBsaXN0X2VudHJ5KHQtPmxpc3QubmV4dCwKLQkJCQkJCSAgICAgICBzdHJ1Y3Qgc2FzX3Rhc2ssIGxpc3QpOwotCQkJCWNvbnRpbnVlOwotCQkJfSBlbHNlIHsKLQkJCQlzdHJ1Y3QgdGFza19zdGF0dXNfc3RydWN0ICp0cyA9ICZ0LT50YXNrX3N0YXR1czsKLQkJCQl0cy0+cmVzcCA9IFNBU19UQVNLX1VOREVMSVZFUkVEOwotCQkJCXRzLT5zdGF0ID0gU0FTX1BIWV9ET1dOOwotCQkJCXQtPnRhc2tfZG9uZSh0KTsKLQkJCQlpZiAobiA+IDEpCi0JCQkJCXQgPSBsaXN0X2VudHJ5KHQtPmxpc3QubmV4dCwKLQkJCQkJCQlzdHJ1Y3Qgc2FzX3Rhc2ssIGxpc3QpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQl9Ci0KLQkJaWYgKCFzYXNfcHJvdG9jb2xfYXRhKHQtPnRhc2tfcHJvdG8pKSB7Ci0JCQlpZiAodC0+bnVtX3NjYXR0ZXIpIHsKLQkJCQluX2VsZW0gPSBkbWFfbWFwX3NnKG12aS0+ZGV2LAotCQkJCQkJICAgIHQtPnNjYXR0ZXIsCi0JCQkJCQkgICAgdC0+bnVtX3NjYXR0ZXIsCi0JCQkJCQkgICAgdC0+ZGF0YV9kaXIpOwotCQkJCWlmICghbl9lbGVtKSB7Ci0JCQkJCXJjID0gLUVOT01FTTsKLQkJCQkJZ290byBlcnJfb3V0OwotCQkJCX0KLQkJCX0KIAkJfSBlbHNlIHsKLQkJCW5fZWxlbSA9IHQtPm51bV9zY2F0dGVyOworCQkJc3RydWN0IHRhc2tfc3RhdHVzX3N0cnVjdCAqdHMgPSAmdGFzay0+dGFza19zdGF0dXM7CisJCQltdl9kcHJpbnRrKCJTQVMgcG9ydCAlZCBkb2VzIG5vdCBhdHRhY2giCisJCQkJImRldmljZS5cbiIsIGRldi0+cG9ydC0+aWQpOworCQkJdHMtPnJlc3AgPSBTQVNfVEFTS19VTkRFTElWRVJFRDsKKwkJCXRzLT5zdGF0ID0gU0FTX1BIWV9ET1dOOworCQkJdGFzay0+dGFza19kb25lKHRhc2spOwogCQl9CisJCXJldHVybiByYzsKKwl9CiAKLQkJcmMgPSBtdnNfdGFnX2FsbG9jKG12aSwgJnRhZyk7Ci0JCWlmIChyYykKLQkJCWdvdG8gZXJyX291dDsKLQotCQlzbG90ID0gJm12aS0+c2xvdF9pbmZvW3RhZ107Ci0KLQotCQl0LT5sbGRkX3Rhc2sgPSBOVUxMOwotCQlzbG90LT5uX2VsZW0gPSBuX2VsZW07Ci0JCXNsb3QtPnNsb3RfdGFnID0gdGFnOwotCQltZW1zZXQoc2xvdC0+YnVmLCAwLCBNVlNfU0xPVF9CVUZfU1opOwotCi0JCXRlaS50YXNrID0gdDsKLQkJdGVpLmhkciA9ICZtdmktPnNsb3RbdGFnXTsKLQkJdGVpLnRhZyA9IHRhZzsKLQkJdGVpLm5fZWxlbSA9IG5fZWxlbTsKLQkJc3dpdGNoICh0LT50YXNrX3Byb3RvKSB7Ci0JCWNhc2UgU0FTX1BST1RPQ09MX1NNUDoKLQkJCXJjID0gbXZzX3Rhc2tfcHJlcF9zbXAobXZpLCAmdGVpKTsKLQkJCWJyZWFrOwotCQljYXNlIFNBU19QUk9UT0NPTF9TU1A6Ci0JCQlyYyA9IG12c190YXNrX3ByZXBfc3NwKG12aSwgJnRlaSwgaXNfdG1mLCB0bWYpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0FTX1BST1RPQ09MX1NBVEE6Ci0JCWNhc2UgU0FTX1BST1RPQ09MX1NUUDoKLQkJY2FzZSBTQVNfUFJPVE9DT0xfU0FUQSB8IFNBU19QUk9UT0NPTF9TVFA6Ci0JCQlyYyA9IG12c190YXNrX3ByZXBfYXRhKG12aSwgJnRlaSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRldl9wcmludGsoS0VSTl9FUlIsIG12aS0+ZGV2LAotCQkJCSAgICJ1bmtub3duIHNhc190YXNrIHByb3RvOiAweCV4XG4iLAotCQkJCSAgIHQtPnRhc2tfcHJvdG8pOwotCQkJcmMgPSAtRUlOVkFMOwotCQkJYnJlYWs7CisJaWYgKCFzYXNfcHJvdG9jb2xfYXRhKHRhc2stPnRhc2tfcHJvdG8pKSB7CisJCWlmICh0YXNrLT5udW1fc2NhdHRlcikgeworCQkJbl9lbGVtID0gZG1hX21hcF9zZyhtdmktPmRldiwKKwkJCQkJICAgIHRhc2stPnNjYXR0ZXIsCisJCQkJCSAgICB0YXNrLT5udW1fc2NhdHRlciwKKwkJCQkJICAgIHRhc2stPmRhdGFfZGlyKTsKKwkJCWlmICghbl9lbGVtKSB7CisJCQkJcmMgPSAtRU5PTUVNOworCQkJCWdvdG8gcHJlcF9vdXQ7CisJCQl9CiAJCX0KKwl9IGVsc2UgeworCQluX2VsZW0gPSB0YXNrLT5udW1fc2NhdHRlcjsKKwl9CiAKLQkJaWYgKHJjKSB7Ci0JCQltdl9kcHJpbnRrKCJyYyBpcyAleFxuIiwgcmMpOwotCQkJZ290byBlcnJfb3V0X3RhZzsKLQkJfQotCQlzbG90LT50YXNrID0gdDsKLQkJc2xvdC0+cG9ydCA9IHRlaS5wb3J0OwotCQl0LT5sbGRkX3Rhc2sgPSBzbG90OwotCQlsaXN0X2FkZF90YWlsKCZzbG90LT5lbnRyeSwgJnRlaS5wb3J0LT5saXN0KTsKLQkJLyogVE9ETzogc2VsZWN0IG5vcm1hbCBvciBoaWdoIHByaW9yaXR5ICovCi0JCXNwaW5fbG9jaygmdC0+dGFza19zdGF0ZV9sb2NrKTsKLQkJdC0+dGFza19zdGF0ZV9mbGFncyB8PSBTQVNfVEFTS19BVF9JTklUSUFUT1I7Ci0JCXNwaW5fdW5sb2NrKCZ0LT50YXNrX3N0YXRlX2xvY2spOworCXJjID0gbXZzX3RhZ19hbGxvYyhtdmksICZ0YWcpOworCWlmIChyYykKKwkJZ290byBlcnJfb3V0OwogCi0JCW12c19oYmFfbWVtb3J5X2R1bXAobXZpLCB0YWcsIHQtPnRhc2tfcHJvdG8pOwotCQltdmlfZGV2LT5ydW5uaW5nX3JlcSsrOwotCQkrK3Bhc3M7Ci0JCW12aS0+dHhfcHJvZCA9IChtdmktPnR4X3Byb2QgKyAxKSAmIChNVlNfQ0hJUF9TTE9UX1NaIC0gMSk7Ci0JCWlmIChuID4gMSkKLQkJCXQgPSBsaXN0X2VudHJ5KHQtPmxpc3QubmV4dCwgc3RydWN0IHNhc190YXNrLCBsaXN0KTsKLQkJaWYgKGxpa2VseShwYXNzKSkKLQkJCU1WU19DSElQX0RJU1AtPnN0YXJ0X2RlbGl2ZXJ5KG12aSwgKG12aS0+dHhfcHJvZCAtIDEpICYKLQkJCQkJCSAgICAgIChNVlNfQ0hJUF9TTE9UX1NaIC0gMSkpOworCXNsb3QgPSAmbXZpLT5zbG90X2luZm9bdGFnXTsKIAotCX0gd2hpbGUgKC0tbik7Ci0JcmMgPSAwOwotCWdvdG8gb3V0X2RvbmU7CisJdGFzay0+bGxkZF90YXNrID0gTlVMTDsKKwlzbG90LT5uX2VsZW0gPSBuX2VsZW07CisJc2xvdC0+c2xvdF90YWcgPSB0YWc7CiAKKwlzbG90LT5idWYgPSBwY2lfcG9vbF9hbGxvYyhtdmktPmRtYV9wb29sLCBHRlBfQVRPTUlDLCAmc2xvdC0+YnVmX2RtYSk7CisJaWYgKCFzbG90LT5idWYpCisJCWdvdG8gZXJyX291dF90YWc7CisJbWVtc2V0KHNsb3QtPmJ1ZiwgMCwgTVZTX1NMT1RfQlVGX1NaKTsKKworCXRlaS50YXNrID0gdGFzazsKKwl0ZWkuaGRyID0gJm12aS0+c2xvdFt0YWddOworCXRlaS50YWcgPSB0YWc7CisJdGVpLm5fZWxlbSA9IG5fZWxlbTsKKwlzd2l0Y2ggKHRhc2stPnRhc2tfcHJvdG8pIHsKKwljYXNlIFNBU19QUk9UT0NPTF9TTVA6CisJCXJjID0gbXZzX3Rhc2tfcHJlcF9zbXAobXZpLCAmdGVpKTsKKwkJYnJlYWs7CisJY2FzZSBTQVNfUFJPVE9DT0xfU1NQOgorCQlyYyA9IG12c190YXNrX3ByZXBfc3NwKG12aSwgJnRlaSwgaXNfdG1mLCB0bWYpOworCQlicmVhazsKKwljYXNlIFNBU19QUk9UT0NPTF9TQVRBOgorCWNhc2UgU0FTX1BST1RPQ09MX1NUUDoKKwljYXNlIFNBU19QUk9UT0NPTF9TQVRBIHwgU0FTX1BST1RPQ09MX1NUUDoKKwkJcmMgPSBtdnNfdGFza19wcmVwX2F0YShtdmksICZ0ZWkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCBtdmktPmRldiwKKwkJCSJ1bmtub3duIHNhc190YXNrIHByb3RvOiAweCV4XG4iLAorCQkJdGFzay0+dGFza19wcm90byk7CisJCXJjID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJaWYgKHJjKSB7CisJCW12X2RwcmludGsoInJjIGlzICV4XG4iLCByYyk7CisJCWdvdG8gZXJyX291dF9zbG90X2J1ZjsKKwl9CisJc2xvdC0+dGFzayA9IHRhc2s7CisJc2xvdC0+cG9ydCA9IHRlaS5wb3J0OworCXRhc2stPmxsZGRfdGFzayA9IHNsb3Q7CisJbGlzdF9hZGRfdGFpbCgmc2xvdC0+ZW50cnksICZ0ZWkucG9ydC0+bGlzdCk7CisJc3Bpbl9sb2NrKCZ0YXNrLT50YXNrX3N0YXRlX2xvY2spOworCXRhc2stPnRhc2tfc3RhdGVfZmxhZ3MgfD0gU0FTX1RBU0tfQVRfSU5JVElBVE9SOworCXNwaW5fdW5sb2NrKCZ0YXNrLT50YXNrX3N0YXRlX2xvY2spOworCisJbXZzX2hiYV9tZW1vcnlfZHVtcChtdmksIHRhZywgdGFzay0+dGFza19wcm90byk7CisJbXZpX2Rldi0+cnVubmluZ19yZXErKzsKKwkrKygqcGFzcyk7CisJbXZpLT50eF9wcm9kID0gKG12aS0+dHhfcHJvZCArIDEpICYgKE1WU19DSElQX1NMT1RfU1ogLSAxKTsKKworCXJldHVybiByYzsKKworZXJyX291dF9zbG90X2J1ZjoKKwlwY2lfcG9vbF9mcmVlKG12aS0+ZG1hX3Bvb2wsIHNsb3QtPmJ1Ziwgc2xvdC0+YnVmX2RtYSk7CiBlcnJfb3V0X3RhZzoKIAltdnNfdGFnX2ZyZWUobXZpLCB0YWcpOwogZXJyX291dDoKIAotCWRldl9wcmludGsoS0VSTl9FUlIsIG12aS0+ZGV2LCAibXZzYXMgZXhlYyBmYWlsZWRbJWRdIVxuIiwgcmMpOwotCWlmICghc2FzX3Byb3RvY29sX2F0YSh0LT50YXNrX3Byb3RvKSkKKwlkZXZfcHJpbnRrKEtFUk5fRVJSLCBtdmktPmRldiwgIm12c2FzIHByZXAgZmFpbGVkWyVkXSFcbiIsIHJjKTsKKwlpZiAoIXNhc19wcm90b2NvbF9hdGEodGFzay0+dGFza19wcm90bykpCiAJCWlmIChuX2VsZW0pCi0JCQlkbWFfdW5tYXBfc2cobXZpLT5kZXYsIHQtPnNjYXR0ZXIsIG5fZWxlbSwKLQkJCQkgICAgIHQtPmRhdGFfZGlyKTsKLW91dF9kb25lOgorCQkJZG1hX3VubWFwX3NnKG12aS0+ZGV2LCB0YXNrLT5zY2F0dGVyLCBuX2VsZW0sCisJCQkJICAgICB0YXNrLT5kYXRhX2Rpcik7CitwcmVwX291dDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbXZzX3Rhc2tfbGlzdCAqbXZzX3Rhc2tfYWxsb2NfbGlzdChpbnQgKm51bSwgZ2ZwX3QgZ2ZwX2ZsYWdzKQoreworCXN0cnVjdCBtdnNfdGFza19saXN0ICpmaXJzdCA9IE5VTEw7CisKKwlmb3IgKDsgKm51bSA+IDA7IC0tKm51bSkgeworCQlzdHJ1Y3QgbXZzX3Rhc2tfbGlzdCAqbXZzX2xpc3QgPSBrbWVtX2NhY2hlX3phbGxvYyhtdnNfdGFza19saXN0X2NhY2hlLCBnZnBfZmxhZ3MpOworCisJCWlmICghbXZzX2xpc3QpCisJCQlicmVhazsKKworCQlJTklUX0xJU1RfSEVBRCgmbXZzX2xpc3QtPmxpc3QpOworCQlpZiAoIWZpcnN0KQorCQkJZmlyc3QgPSBtdnNfbGlzdDsKKwkJZWxzZQorCQkJbGlzdF9hZGRfdGFpbCgmbXZzX2xpc3QtPmxpc3QsICZmaXJzdC0+bGlzdCk7CisKKwl9CisKKwlyZXR1cm4gZmlyc3Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdnNfdGFza19mcmVlX2xpc3Qoc3RydWN0IG12c190YXNrX2xpc3QgKm12c19saXN0KQoreworCUxJU1RfSEVBRChsaXN0KTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICphOworCXN0cnVjdCBtdnNfdGFza19saXN0ICptbGlzdCA9IE5VTEw7CisKKwlfX2xpc3RfYWRkKCZsaXN0LCBtdnNfbGlzdC0+bGlzdC5wcmV2LCAmbXZzX2xpc3QtPmxpc3QpOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgYSwgJmxpc3QpIHsKKwkJbGlzdF9kZWxfaW5pdChwb3MpOworCQltbGlzdCA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgbXZzX3Rhc2tfbGlzdCwgbGlzdCk7CisJCWttZW1fY2FjaGVfZnJlZShtdnNfdGFza19saXN0X2NhY2hlLCBtbGlzdCk7CisJfQorfQorCitzdGF0aWMgaW50IG12c190YXNrX2V4ZWMoc3RydWN0IHNhc190YXNrICp0YXNrLCBjb25zdCBpbnQgbnVtLCBnZnBfdCBnZnBfZmxhZ3MsCisJCQkJc3RydWN0IGNvbXBsZXRpb24gKmNvbXBsZXRpb24sIGludCBpc190bWYsCisJCQkJc3RydWN0IG12c190bWZfdGFzayAqdG1mKQoreworCXN0cnVjdCBkb21haW5fZGV2aWNlICpkZXYgPSB0YXNrLT5kZXY7CisJc3RydWN0IG12c19pbmZvICptdmkgPSBOVUxMOworCXUzMiByYyA9IDA7CisJdTMyIHBhc3MgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCisJbXZpID0gKChzdHJ1Y3QgbXZzX2RldmljZSAqKXRhc2stPmRldi0+bGxkZF9kZXYpLT5tdmlfaW5mbzsKKworCWlmICgoZGV2LT5kZXZfdHlwZSA9PSBTQVRBX0RFVikgJiYgKGRldi0+c2F0YV9kZXYuYXAgIT0gTlVMTCkpCisJCXNwaW5fdW5sb2NrX2lycShkZXYtPnNhdGFfZGV2LmFwLT5sb2NrKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtdmktPmxvY2ssIGZsYWdzKTsKKwlyYyA9IG12c190YXNrX3ByZXAodGFzaywgbXZpLCBpc190bWYsIHRtZiwgJnBhc3MpOworCWlmIChyYykKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgbXZpLT5kZXYsICJtdnNhcyBleGVjIGZhaWxlZFslZF0hXG4iLCByYyk7CisKKwlpZiAobGlrZWx5KHBhc3MpKQorCQkJTVZTX0NISVBfRElTUC0+c3RhcnRfZGVsaXZlcnkobXZpLCAobXZpLT50eF9wcm9kIC0gMSkgJgorCQkJCShNVlNfQ0hJUF9TTE9UX1NaIC0gMSkpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm12aS0+bG9jaywgZmxhZ3MpOworCisJaWYgKChkZXYtPmRldl90eXBlID09IFNBVEFfREVWKSAmJiAoZGV2LT5zYXRhX2Rldi5hcCAhPSBOVUxMKSkKKwkJc3Bpbl9sb2NrX2lycShkZXYtPnNhdGFfZGV2LmFwLT5sb2NrKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBtdnNfY29sbGVjdG9yX3Rhc2tfZXhlYyhzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2ssIGNvbnN0IGludCBudW0sIGdmcF90IGdmcF9mbGFncywKKwkJCQlzdHJ1Y3QgY29tcGxldGlvbiAqY29tcGxldGlvbiwgaW50IGlzX3RtZiwKKwkJCQlzdHJ1Y3QgbXZzX3RtZl90YXNrICp0bWYpCit7CisJc3RydWN0IGRvbWFpbl9kZXZpY2UgKmRldiA9IHRhc2stPmRldjsKKwlzdHJ1Y3QgbXZzX3Bydl9pbmZvICptcGkgPSBkZXYtPnBvcnQtPmhhLT5sbGRkX2hhOworCXN0cnVjdCBtdnNfaW5mbyAqbXZpID0gTlVMTDsKKwlzdHJ1Y3Qgc2FzX3Rhc2sgKnQgPSB0YXNrOworCXN0cnVjdCBtdnNfdGFza19saXN0ICptdnNfbGlzdCA9IE5VTEwsICphOworCUxJU1RfSEVBRChxKTsKKwlpbnQgcGFzc1syXSA9IHswfTsKKwl1MzIgcmMgPSAwOworCXUzMiBuID0gbnVtOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCisJbXZzX2xpc3QgPSBtdnNfdGFza19hbGxvY19saXN0KCZuLCBnZnBfZmxhZ3MpOworCWlmIChuKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IG12cyBhbGxvYyBsaXN0IGZhaWxlZC5cbiIsIF9fZnVuY19fKTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfbGlzdDsKKwl9CisKKwlfX2xpc3RfYWRkKCZxLCBtdnNfbGlzdC0+bGlzdC5wcmV2LCAmbXZzX2xpc3QtPmxpc3QpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShhLCAmcSwgbGlzdCkgeworCQlhLT50YXNrID0gdDsKKwkJdCA9IGxpc3RfZW50cnkodC0+bGlzdC5uZXh0LCBzdHJ1Y3Qgc2FzX3Rhc2ssIGxpc3QpOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkoYSwgJnEgLCBsaXN0KSB7CisKKwkJdCA9IGEtPnRhc2s7CisJCW12aSA9ICgoc3RydWN0IG12c19kZXZpY2UgKil0LT5kZXYtPmxsZGRfZGV2KS0+bXZpX2luZm87CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm12aS0+bG9jaywgZmxhZ3MpOworCQlyYyA9IG12c190YXNrX3ByZXAodCwgbXZpLCBpc190bWYsIHRtZiwgJnBhc3NbbXZpLT5pZF0pOworCQlpZiAocmMpCisJCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCBtdmktPmRldiwgIm12c2FzIGV4ZWMgZmFpbGVkWyVkXSFcbiIsIHJjKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXZpLT5sb2NrLCBmbGFncyk7CisJfQorCisJaWYgKGxpa2VseShwYXNzWzBdKSkKKwkJCU1WU19DSElQX0RJU1AtPnN0YXJ0X2RlbGl2ZXJ5KG1waS0+bXZpWzBdLAorCQkJCShtcGktPm12aVswXS0+dHhfcHJvZCAtIDEpICYgKE1WU19DSElQX1NMT1RfU1ogLSAxKSk7CisKKwlpZiAobGlrZWx5KHBhc3NbMV0pKQorCQkJTVZTX0NISVBfRElTUC0+c3RhcnRfZGVsaXZlcnkobXBpLT5tdmlbMV0sCisJCQkJKG1waS0+bXZpWzFdLT50eF9wcm9kIC0gMSkgJiAoTVZTX0NISVBfU0xPVF9TWiAtIDEpKTsKKworCWxpc3RfZGVsX2luaXQoJnEpOworCitmcmVlX2xpc3Q6CisJaWYgKG12c19saXN0KQorCQltdnNfdGFza19mcmVlX2xpc3QobXZzX2xpc3QpOworCiAJcmV0dXJuIHJjOwogfQogCiBpbnQgbXZzX3F1ZXVlX2NvbW1hbmQoc3RydWN0IHNhc190YXNrICp0YXNrLCBjb25zdCBpbnQgbnVtLAogCQkJZ2ZwX3QgZ2ZwX2ZsYWdzKQogewotCXJldHVybiBtdnNfdGFza19leGVjKHRhc2ssIG51bSwgZ2ZwX2ZsYWdzLCBOVUxMLCAwLCBOVUxMKTsKKwlzdHJ1Y3QgbXZzX2RldmljZSAqbXZpX2RldiA9IHRhc2stPmRldi0+bGxkZF9kZXY7CisJc3RydWN0IHNhc19oYV9zdHJ1Y3QgKnNhcyA9IG12aV9kZXYtPm12aV9pbmZvLT5zYXM7CisKKwlpZiAoc2FzLT5sbGRkX21heF9leGVjdXRlX251bSA8IDIpCisJCXJldHVybiBtdnNfdGFza19leGVjKHRhc2ssIG51bSwgZ2ZwX2ZsYWdzLCBOVUxMLCAwLCBOVUxMKTsKKwllbHNlCisJCXJldHVybiBtdnNfY29sbGVjdG9yX3Rhc2tfZXhlYyh0YXNrLCBudW0sIGdmcF9mbGFncywgTlVMTCwgMCwgTlVMTCk7CiB9CiAKIHN0YXRpYyB2b2lkIG12c19zbG90X2ZyZWUoc3RydWN0IG12c19pbmZvICptdmksIHUzMiByeF9kZXNjKQpAQCAtMTA2Nyw2ICsxMTc2LDExIEBACiAJCS8qIGRvIG5vdGhpbmcgKi8KIAkJYnJlYWs7CiAJfQorCisJaWYgKHNsb3QtPmJ1ZikgeworCQlwY2lfcG9vbF9mcmVlKG12aS0+ZG1hX3Bvb2wsIHNsb3QtPmJ1Ziwgc2xvdC0+YnVmX2RtYSk7CisJCXNsb3QtPmJ1ZiA9IE5VTEw7CisJfQogCWxpc3RfZGVsX2luaXQoJnNsb3QtPmVudHJ5KTsKIAl0YXNrLT5sbGRkX3Rhc2sgPSBOVUxMOwogCXNsb3QtPnRhc2sgPSBOVUxMOwpAQCAtMTI1NSw2ICsxMzY5LDcgQEAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJm12aS0+bG9jaywgZmxhZ3MpOwogCXBvcnQtPnBvcnRfYXR0YWNoZWQgPSAxOwogCXBoeS0+cG9ydCA9IHBvcnQ7CisJc2FzX3BvcnQtPmxsZGRfcG9ydCA9IHBvcnQ7CiAJaWYgKHBoeS0+cGh5X3R5cGUgJiBQT1JUX1RZUEVfU0FTKSB7CiAJCXBvcnQtPndpZGVfcG9ydF9waHltYXAgPSBzYXNfcG9ydC0+cGh5X21hc2s7CiAJCW12X3ByaW50aygic2V0IHdpZGUgcG9ydCBwaHkgbWFwICV4XG4iLCBzYXNfcG9ydC0+cGh5X21hc2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL212c2FzL212X3Nhcy5oIGIvZHJpdmVycy9zY3NpL212c2FzL212X3Nhcy5oCmluZGV4IDc3ZGRjN2MuLjEzNjdkOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9zYXMuaAorKysgYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfc2FzLmgKQEAgLTMsNiArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IDIwMDcgUmVkIEhhdCwgSW5jLgogICogQ29weXJpZ2h0IDIwMDggTWFydmVsbC4gPGtld2VpQG1hcnZlbGwuY29tPgorICogQ29weXJpZ2h0IDIwMDktMjAxMSBNYXJ2ZWxsLiA8eXV4aWFuZ2xAbWFydmVsbC5jb20+CiAgKgogICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIEdQTHYyLgogICoKQEAgLTY3LDYgKzY4LDcgQEAKIGV4dGVybiBzdHJ1Y3QgbXZzX2luZm8gKnRndF9tdmk7CiBleHRlcm4gY29uc3Qgc3RydWN0IG12c19kaXNwYXRjaCBtdnNfNjR4eF9kaXNwYXRjaDsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbXZzX2Rpc3BhdGNoIG12c185NHh4X2Rpc3BhdGNoOworZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICptdnNfdGFza19saXN0X2NhY2hlOwogCiAjZGVmaW5lIERFVl9JU19FWFBBTkRFUih0eXBlKQlcCiAJKCh0eXBlID09IEVER0VfREVWKSB8fCAodHlwZSA9PSBGQU5PVVRfREVWKSkKQEAgLTM0MSw2ICszNDMsNyBAQAogCWRtYV9hZGRyX3QgYnVsa19idWZmZXJfZG1hOwogI2RlZmluZSBUUkFTSF9CVUNLRVRfU0laRSAgICAJMHgyMDAwMAogI2VuZGlmCisJdm9pZCAqZG1hX3Bvb2w7CiAJc3RydWN0IG12c19zbG90X2luZm8gc2xvdF9pbmZvWzBdOwogfTsKIApAQCAtMzY3LDYgKzM3MCwxMSBAQAogCWludCBuX2VsZW07CiB9OwogCitzdHJ1Y3QgbXZzX3Rhc2tfbGlzdCB7CisJc3RydWN0IHNhc190YXNrICp0YXNrOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKIAogLyoqKioqKioqKioqKioqKioqKioqIGZ1bmN0aW9uIHByb3RvdHlwZSAqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkIG12c19nZXRfc2FzX2FkZHIodm9pZCAqYnVmLCB1MzIgYnVmbGVuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9uY3I1M2M4eHguYyBiL2RyaXZlcnMvc2NzaS9uY3I1M2M4eHguYwppbmRleCA4MzVkOGQ2Li40YjNiNDc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbmNyNTNjOHh4LmMKKysrIGIvZHJpdmVycy9zY3NpL25jcjUzYzh4eC5jCkBAIC04MTQ3LDcgKzgxNDcsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHNjc2lfY21uZCAqZG9uZV9saXN0OwogCi0JcHJpbnRrKCJuY3I1M2M4eHhfYWJvcnQ6IGNvbW1hbmQgcGlkICVsdVxuIiwgY21kLT5zZXJpYWxfbnVtYmVyKTsKKwlwcmludGsoIm5jcjUzYzh4eF9hYm9ydFxuIik7CiAKIAlOQ1JfTE9DS19OQ0IobnAsIGZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL25zcDMyX2RlYnVnLmMgYi9kcml2ZXJzL3Njc2kvbnNwMzJfZGVidWcuYwppbmRleCAyZmIzZmI1Li41ODgwNmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbnNwMzJfZGVidWcuYworKysgYi9kcml2ZXJzL3Njc2kvbnNwMzJfZGVidWcuYwpAQCAtMTMsNyArMTMsNyBAQAogCiBzdGF0aWMgY29uc3QgY2hhciAqIGdyb3VwXzBfY29tbWFuZHNbXSA9IHsKIC8qIDAwLTAzICovICJUZXN0IFVuaXQgUmVhZHkiLCAiUmV6ZXJvIFVuaXQiLCB1bmtub3duLCAiUmVxdWVzdCBTZW5zZSIsCi0vKiAwNC0wNyAqLyAiRm9ybWF0IFVuaXQiLCAiUmVhZCBCbG9jayBMaW1pdHMiLCB1bmtub3duLCAiUmVhc3NzaWduIEJsb2NrcyIsCisvKiAwNC0wNyAqLyAiRm9ybWF0IFVuaXQiLCAiUmVhZCBCbG9jayBMaW1pdHMiLCB1bmtub3duLCAiUmVhc3NpZ24gQmxvY2tzIiwKIC8qIDA4LTBkICovICJSZWFkICg2KSIsIHVua25vd24sICJXcml0ZSAoNikiLCAiU2VlayAoNikiLCB1bmtub3duLCB1bmtub3duLAogLyogMGUtMTIgKi8gdW5rbm93biwgIlJlYWQgUmV2ZXJzZSIsICJXcml0ZSBGaWxlbWFya3MiLCAiU3BhY2UiLCAiSW5xdWlyeSIsICAKIC8qIDEzLTE2ICovIHVua25vd24sICJSZWNvdmVyIEJ1ZmZlcmVkIERhdGEiLCAiTW9kZSBTZWxlY3QiLCAiUmVzZXJ2ZSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9kZWJ1Zy5jIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfZGVidWcuYwppbmRleCAzYzZlZjY0Li42YWE3ZDI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvbnNwX2RlYnVnLmMKQEAgLTE1LDcgKzE1LDcgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKiBncm91cF8wX2NvbW1hbmRzW10gPSB7CiAvKiAwMC0wMyAqLyAiVGVzdCBVbml0IFJlYWR5IiwgIlJlemVybyBVbml0IiwgdW5rbm93biwgIlJlcXVlc3QgU2Vuc2UiLAotLyogMDQtMDcgKi8gIkZvcm1hdCBVbml0IiwgIlJlYWQgQmxvY2sgTGltaXRzIiwgdW5rbm93biwgIlJlYXNzc2lnbiBCbG9ja3MiLAorLyogMDQtMDcgKi8gIkZvcm1hdCBVbml0IiwgIlJlYWQgQmxvY2sgTGltaXRzIiwgdW5rbm93biwgIlJlYXNzaWduIEJsb2NrcyIsCiAvKiAwOC0wZCAqLyAiUmVhZCAoNikiLCB1bmtub3duLCAiV3JpdGUgKDYpIiwgIlNlZWsgKDYpIiwgdW5rbm93biwgdW5rbm93biwKIC8qIDBlLTEyICovIHVua25vd24sICJSZWFkIFJldmVyc2UiLCAiV3JpdGUgRmlsZW1hcmtzIiwgIlNwYWNlIiwgIklucXVpcnkiLCAgCiAvKiAxMy0xNiAqLyB1bmtub3duLCAiUmVjb3ZlciBCdWZmZXJlZCBEYXRhIiwgIk1vZGUgU2VsZWN0IiwgIlJlc2VydmUiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfaW5pdC5jIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfaW5pdC5jCmluZGV4IDAwMjM2MGQuLjE3MmNlZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9pbml0LmMKQEAgLTE2MCw3ICsxNjAsNyBAQAogc3RhdGljIHZvaWQgcG04MDAxX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBvcGFxdWUpCiB7CiAJc3RydWN0IHBtODAwMV9oYmFfaW5mbyAqcG04MDAxX2hhOwotCXBtODAwMV9oYSA9IChzdHJ1Y3QgcG04MDAxX2hiYV9pbmZvICopb3BhcXVlOzsKKwlwbTgwMDFfaGEgPSAoc3RydWN0IHBtODAwMV9oYmFfaW5mbyAqKW9wYXF1ZTsKIAlpZiAodW5saWtlbHkoIXBtODAwMV9oYSkpCiAJCUJVR19PTigxKTsKIAlQTTgwMDFfQ0hJUF9ESVNQLT5pc3IocG04MDAxX2hhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGExMjgwLmMgYi9kcml2ZXJzL3Njc2kvcWxhMTI4MC5jCmluZGV4IDhiYTU3NDQuLmQ4MzgyMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGExMjgwLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTEyODAuYwpAQCAtNDA2Niw3ICs0MDY2LDcgQEAKIAkgICB9ICovCiAJcHJpbnRrKCIgIHRhZz0lZCwgdHJhbnNmZXJzaXplPTB4JXggXG4iLAogCSAgICAgICBjbWQtPnRhZywgY21kLT50cmFuc2ZlcnNpemUpOwotCXByaW50aygiICBQaWQ9JWxpLCBTUD0weCVwXG4iLCBjbWQtPnNlcmlhbF9udW1iZXIsIENNRF9TUChjbWQpKTsKKwlwcmludGsoIiAgU1A9MHglcFxuIiwgQ01EX1NQKGNtZCkpOwogCXByaW50aygiIHVuZGVyZmxvdyBzaXplID0gMHgleCwgZGlyZWN0aW9uPTB4JXhcbiIsCiAJICAgICAgIGNtZC0+dW5kZXJmbG93LCBjbWQtPnNjX2RhdGFfZGlyZWN0aW9uKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jCmluZGV4IGQzZTU4ZDcuLjUzMjMxM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBRTG9naWMgRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTAgUUxvZ2ljIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTEgUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgogICogU2VlIExJQ0VOU0UucWxhMnh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwpAQCAtNDk2LDggKzQ5Niw4IEBACiAJCQlvZmZzZXQgPSAwOwogCQl9CiAKLQkJcnZhbCA9IHFsYTJ4MDBfcmVhZF9zZnAodmhhLCBoYS0+c2ZwX2RhdGFfZG1hLCBhZGRyLCBvZmZzZXQsCi0JCSAgICBTRlBfQkxPQ0tfU0laRSk7CisJCXJ2YWwgPSBxbGEyeDAwX3JlYWRfc2ZwKHZoYSwgaGEtPnNmcF9kYXRhX2RtYSwgaGEtPnNmcF9kYXRhLAorCQkgICAgYWRkciwgb2Zmc2V0LCBTRlBfQkxPQ0tfU0laRSwgMCk7CiAJCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CiAJCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCiAJCQkgICAgIlVuYWJsZSB0byByZWFkIFNGUCBkYXRhICgleC8leC8leCkuXG4iLCBydmFsLApAQCAtNjI4LDEyICs2MjgsMTIgQEAKIAogCW1lbWNweShoYS0+ZWRjX2RhdGEsICZidWZbOF0sIGxlbik7CiAKLQlydmFsID0gcWxhMngwMF93cml0ZV9lZGModmhhLCBkZXYsIGFkciwgaGEtPmVkY19kYXRhX2RtYSwKLQkgICAgaGEtPmVkY19kYXRhLCBsZW4sIG9wdCk7CisJcnZhbCA9IHFsYTJ4MDBfd3JpdGVfc2ZwKHZoYSwgaGEtPmVkY19kYXRhX2RtYSwgaGEtPmVkY19kYXRhLAorCSAgICBkZXYsIGFkciwgbGVuLCBvcHQpOwogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CiAJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCiAJCSAgICAiVW5hYmxlIHRvIHdyaXRlIEVEQyAoJXgpICUwMng6JTAyeDolMDR4OiUwMng6JTAyeC5cbiIsCi0JCSAgICBydmFsLCBkZXYsIGFkciwgb3B0LCBsZW4sICpidWYpKTsKKwkJICAgIHJ2YWwsIGRldiwgYWRyLCBvcHQsIGxlbiwgYnVmWzhdKSk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNjg1LDggKzY4NSw4IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCW1lbXNldChoYS0+ZWRjX2RhdGEsIDAsIGxlbik7Ci0JcnZhbCA9IHFsYTJ4MDBfcmVhZF9lZGModmhhLCBkZXYsIGFkciwgaGEtPmVkY19kYXRhX2RtYSwKLQkgICAgaGEtPmVkY19kYXRhLCBsZW4sIG9wdCk7CisJcnZhbCA9IHFsYTJ4MDBfcmVhZF9zZnAodmhhLCBoYS0+ZWRjX2RhdGFfZG1hLCBoYS0+ZWRjX2RhdGEsCisJCQlkZXYsIGFkciwgbGVuLCBvcHQpOwogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CiAJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCiAJCSAgICAiVW5hYmxlIHRvIHdyaXRlIEVEQyBzdGF0dXMgKCV4KSAlMDJ4OiUwMng6JTA0eDolMDJ4LlxuIiwKQEAgLTE1NjgsNyArMTU2OCw3IEBACiAKIAkvKiBOb3cgdGhhdCB0aGUgcnBvcnQgaGFzIGJlZW4gZGVsZXRlZCwgc2V0IHRoZSBmY3BvcnQgc3RhdGUgdG8KIAkgICBGQ1NfREVWSUNFX0RFQUQgKi8KLQlhdG9taWNfc2V0KCZmY3BvcnQtPnN0YXRlLCBGQ1NfREVWSUNFX0RFQUQpOworCXFsYTJ4MDBfc2V0X2ZjcG9ydF9zdGF0ZShmY3BvcnQsIEZDU19ERVZJQ0VfREVBRCk7CiAKIAkvKgogCSAqIFRyYW5zcG9ydCBoYXMgZWZmZWN0aXZlbHkgJ2RlbGV0ZWQnIHRoZSBycG9ydCwgY2xlYXIKQEAgLTE4NzcsMTQgKzE4NzcsMTUgQEAKIAogCXNjc2lfcmVtb3ZlX2hvc3QodmhhLT5ob3N0KTsKIAorCS8qIEFsbG93IHRpbWVyIHRvIHJ1biB0byBkcmFpbiBxdWV1ZWQgaXRlbXMsIHdoZW4gcmVtb3ZpbmcgdnAgKi8KKwlxbGEyNHh4X2RlYWxsb2NhdGVfdnBfaWQodmhhKTsKKwogCWlmICh2aGEtPnRpbWVyX2FjdGl2ZSkgewogCQlxbGEyeDAwX3ZwX3N0b3BfdGltZXIodmhhKTsKIAkJREVCVUcxNShwcmludGsoS0VSTl9JTkZPICJzY3NpKCVsZCk6IHRpbWVyIGZvciB0aGUgdnBvcnRbJWRdIgogCQkiID0gJXAgaGFzIHN0b3BwZWRcbiIsIHZoYS0+aG9zdF9ubywgdmhhLT52cF9pZHgsIHZoYSkpOwogCX0KIAotCXFsYTI0eHhfZGVhbGxvY2F0ZV92cF9pZCh2aGEpOwotCiAJLyogTm8gcGVuZGluZyBhY3Rpdml0aWVzIHNoYWxsIGJlIHRoZXJlIG9uIHRoZSB2aGEgbm93ICovCiAJREVCVUcobXNsZWVwKHJhbmRvbTMyKCklMTApKTsgIC8qIEp1c3QgdG8gc2VlIGlmIHNvbWV0aGluZyBmYWxscyBvbgogCQkJCQkqIHRoZSBuZXQgd2UgaGF2ZSBwbGFjZWQgYmVsb3cgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ic2cuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ic2cuYwppbmRleCA5MDNiMDU4Li44YzEwZTJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYnNnLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2JzZy5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMSBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYnNnLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYnNnLmgKaW5kZXggMDc0YTk5OS4uMGYwZjU0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2JzZy5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ic2cuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBRTG9naWMgRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTAgUUxvZ2ljIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTEgUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgogICogU2VlIExJQ0VOU0UucWxhMnh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RiZy5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RiZy5jCmluZGV4IDA5NjE0MTEuLmM1MzcxOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kYmcuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGJnLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogUUxvZ2ljIEZpYnJlIENoYW5uZWwgSEJBIERyaXZlcgotICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDEwIFFMb2dpYyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDExIFFMb2dpYyBDb3Jwb3JhdGlvbgogICoKICAqIFNlZSBMSUNFTlNFLnFsYTJ4eHggZm9yIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGRldGFpbHMuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kYmcuaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kYmcuaAppbmRleCBiNzRlNmI1Li45MzA0MTQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGJnLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RiZy5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMSBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmgKaW5kZXggZWUyMDM1My4uY2M1YTc5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBRTG9naWMgRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTAgUUxvZ2ljIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTEgUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgogICogU2VlIExJQ0VOU0UucWxhMnh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwpAQCAtMTcxNyw2ICsxNzE3LDE0IEBACiAjZGVmaW5lIEZDU19ERVZJQ0VfTE9TVAkJMwogI2RlZmluZSBGQ1NfT05MSU5FCQk0CiAKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcG9ydF9zdGF0ZV9zdHJbXSA9IHsKKwkiVW5rbm93biIsCisJIlVOQ09ORklHVVJFRCIsCisJIkRFQUQiLAorCSJMT1NUIiwKKwkiT05MSU5FIgorfTsKKwogLyoKICAqIEZDIHBvcnQgZmxhZ3MuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZnMuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZnMuYwppbmRleCA2MjcxMzUzLi5hNWE0ZTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGZzLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Rmcy5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMSBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZncuaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9mdy5oCmluZGV4IGY1YmEwOWMuLjY5MTc4M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9mdy5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9mdy5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMSBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCkBAIC00MTYsOCArNDE2LDcgQEAKIAl1aW50OF90IHZwX2luZGV4OwogCiAJdWludDMyX3QgZmNwX2RhdGFfZHNlZ19hZGRyZXNzWzJdOwkvKiBEYXRhIHNlZ21lbnQgYWRkcmVzcy4gKi8KLQl1aW50MTZfdCBmY3BfZGF0YV9kc2VnX2xlbjsJCS8qIERhdGEgc2VnbWVudCBsZW5ndGguICovCi0JdWludDE2X3QgcmVzZXJ2ZWRfMTsJCQkvKiBNVVNUIGJlIHNldCB0byAwLiAqLworCXVpbnQzMl90IGZjcF9kYXRhX2RzZWdfbGVuOwkJLyogRGF0YSBzZWdtZW50IGxlbmd0aC4gKi8KIH07CiAKICNkZWZpbmUgQ09NTUFORF9UWVBFXzcJMHgxOAkJLyogQ29tbWFuZCBUeXBlIDcgZW50cnkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaAppbmRleCBkNDgzMjZlLi4wYjM4MTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMSBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCkBAIC0zOSw2ICszOSw4IEBACiBleHRlcm4gaW50IHFsYTJ4MDBfcGVyZm9ybV9sb29wX3Jlc3luYyhzY3NpX3FsYV9ob3N0X3QgKik7CiBleHRlcm4gaW50IHFsYTJ4MDBfbG9vcF9yZXN5bmMoc2NzaV9xbGFfaG9zdF90ICopOwogCitleHRlcm4gaW50IHFsYTJ4MDBfZmluZF9uZXdfbG9vcF9pZChzY3NpX3FsYV9ob3N0X3QgKiwgZmNfcG9ydF90ICopOworCiBleHRlcm4gaW50IHFsYTJ4MDBfZmFicmljX2xvZ2luKHNjc2lfcWxhX2hvc3RfdCAqLCBmY19wb3J0X3QgKiwgdWludDE2X3QgKik7CiBleHRlcm4gaW50IHFsYTJ4MDBfbG9jYWxfZGV2aWNlX2xvZ2luKHNjc2lfcWxhX2hvc3RfdCAqLCBmY19wb3J0X3QgKik7CiAKQEAgLTEwMCw2ICsxMDIsOCBAQAogZXh0ZXJuIGludCBxbDJ4ZW5hYmxlZGlmOwogZXh0ZXJuIGludCBxbDJ4ZW5hYmxlaGJhX2Vycl9jaGs7CiBleHRlcm4gaW50IHFsMnh0YXJnZXRyZXNldDsKK2V4dGVybiBpbnQgcWwyeGRvbnRyZXNldGhiYTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgcWwyeG1heGx1bjsKIAogZXh0ZXJuIGludCBxbGEyeDAwX2xvb3BfcmVzZXQoc2NzaV9xbGFfaG9zdF90ICopOwogZXh0ZXJuIHZvaWQgcWxhMngwMF9hYm9ydF9hbGxfY21kcyhzY3NpX3FsYV9ob3N0X3QgKiwgaW50KTsKQEAgLTMxOSwxNSArMzIzLDEyIEBACiBxbGEyeDAwX2Rpc2FibGVfZmNlX3RyYWNlKHNjc2lfcWxhX2hvc3RfdCAqLCB1aW50NjRfdCAqLCB1aW50NjRfdCAqKTsKIAogZXh0ZXJuIGludAotcWxhMngwMF9yZWFkX3NmcChzY3NpX3FsYV9ob3N0X3QgKiwgZG1hX2FkZHJfdCwgdWludDE2X3QsIHVpbnQxNl90LCB1aW50MTZfdCk7CitxbGEyeDAwX3JlYWRfc2ZwKHNjc2lfcWxhX2hvc3RfdCAqLCBkbWFfYWRkcl90LCB1aW50OF90ICosCisJdWludDE2X3QsIHVpbnQxNl90LCB1aW50MTZfdCwgdWludDE2X3QpOwogCiBleHRlcm4gaW50Ci1xbGEyeDAwX3JlYWRfZWRjKHNjc2lfcWxhX2hvc3RfdCAqLCB1aW50MTZfdCwgdWludDE2X3QsIGRtYV9hZGRyX3QsCi0gICAgdWludDhfdCAqLCB1aW50MTZfdCwgdWludDE2X3QpOwotCi1leHRlcm4gaW50Ci1xbGEyeDAwX3dyaXRlX2VkYyhzY3NpX3FsYV9ob3N0X3QgKiwgdWludDE2X3QsIHVpbnQxNl90LCBkbWFfYWRkcl90LAotICAgIHVpbnQ4X3QgKiwgdWludDE2X3QsIHVpbnQxNl90KTsKK3FsYTJ4MDBfd3JpdGVfc2ZwKHNjc2lfcWxhX2hvc3RfdCAqLCBkbWFfYWRkcl90LCB1aW50OF90ICosCisJdWludDE2X3QsIHVpbnQxNl90LCB1aW50MTZfdCwgdWludDE2X3QpOwogCiBleHRlcm4gaW50CiBxbGEyeDAwX3NldF9pZG1hX3NwZWVkKHNjc2lfcWxhX2hvc3RfdCAqLCB1aW50MTZfdCwgdWludDE2X3QsIHVpbnQxNl90ICopOwpAQCAtNTQ5LDcgKzU1MCw2IEBACiBleHRlcm4gaW50IHFsYTgyeHhfcmRfMzIoc3RydWN0IHFsYV9od19kYXRhICosIHVsb25nKTsKIGV4dGVybiBpbnQgcWxhODJ4eF9yZG1lbShzdHJ1Y3QgcWxhX2h3X2RhdGEgKiwgdTY0LCB2b2lkICosIGludCk7CiBleHRlcm4gaW50IHFsYTgyeHhfd3JtZW0oc3RydWN0IHFsYV9od19kYXRhICosIHU2NCwgdm9pZCAqLCBpbnQpOwotZXh0ZXJuIHZvaWQgcWxhODJ4eF9yb21fdW5sb2NrKHN0cnVjdCBxbGFfaHdfZGF0YSAqKTsKIAogLyogSVNQIDgwMjEgSURDICovCiBleHRlcm4gdm9pZCBxbGE4Mnh4X2NsZWFyX2Rydl9hY3RpdmUoc3RydWN0IHFsYV9od19kYXRhICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dzLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ3MuYwppbmRleCA3NGE5MWI2Li44Y2Q5MDY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ3MuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBRTG9naWMgRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTAgUUxvZ2ljIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTEgUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgogICogU2VlIExJQ0VOU0UucWxhMnh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKaW5kZXggODU3NTgwOC4uOTIwYjc2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMSBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCkBAIC0zNSw4ICszNSw2IEBACiAKIHN0YXRpYyBpbnQgcWxhMngwMF9yZXN0YXJ0X2lzcChzY3NpX3FsYV9ob3N0X3QgKik7CiAKLXN0YXRpYyBpbnQgcWxhMngwMF9maW5kX25ld19sb29wX2lkKHNjc2lfcWxhX2hvc3RfdCAqLCBmY19wb3J0X3QgKik7Ci0KIHN0YXRpYyBzdHJ1Y3QgcWxhX2NoaXBfc3RhdGVfODR4eCAqcWxhODR4eF9nZXRfY2hpcChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqKTsKIHN0YXRpYyBpbnQgcWxhODR4eF9pbml0X2NoaXAoc2NzaV9xbGFfaG9zdF90ICopOwogc3RhdGljIGludCBxbGEyNXh4X2luaXRfcXVldWVzKHN0cnVjdCBxbGFfaHdfZGF0YSAqKTsKQEAgLTM4NSw4ICszODMsMTggQEAKIAogCXN3aXRjaCAoZGF0YVswXSkgewogCWNhc2UgTUJTX0NPTU1BTkRfQ09NUExFVEU6CisJCS8qCisJCSAqIERyaXZlciBtdXN0IHZhbGlkYXRlIGxvZ2luIHN0YXRlIC0gSWYgUFJMSSBub3QgY29tcGxldGUsCisJCSAqIGZvcmNlIGEgcmVsb2dpbiBhdHRlbXB0IHZpYSBpbXBsaWNpdCBMT0dPLCBQTE9HSSwgYW5kIFBSTEkKKwkJICogcmVxdWVzdHMuCisJCSAqLworCQlydmFsID0gcWxhMngwMF9nZXRfcG9ydF9kYXRhYmFzZSh2aGEsIGZjcG9ydCwgMCk7CisJCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CisJCQlxbGEyeDAwX3Bvc3RfYXN5bmNfbG9nb3V0X3dvcmsodmhhLCBmY3BvcnQsIE5VTEwpOworCQkJcWxhMngwMF9wb3N0X2FzeW5jX2xvZ2luX3dvcmsodmhhLCBmY3BvcnQsIE5VTEwpOworCQkJYnJlYWs7CisJCX0KIAkJaWYgKGZjcG9ydC0+ZmxhZ3MgJiBGQ0ZfRkNQMl9ERVZJQ0UpIHsKLQkJCWZjcG9ydC0+ZmxhZ3MgfD0gRkNGX0FTWU5DX1NFTlQ7CiAJCQlxbGEyeDAwX3Bvc3RfYXN5bmNfYWRpc2Nfd29yayh2aGEsIGZjcG9ydCwgZGF0YSk7CiAJCQlicmVhazsKIAkJfQpAQCAtMzk3LDcgKzQwNSw3IEBACiAJCWlmIChkYXRhWzFdICYgUUxBX0xPR0lPX0xPR0lOX1JFVFJJRUQpCiAJCQlzZXRfYml0KFJFTE9HSU5fTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOwogCQllbHNlCi0JCQlxbGEyeDAwX21hcmtfZGV2aWNlX2xvc3QodmhhLCBmY3BvcnQsIDEsIDEpOworCQkJcWxhMngwMF9tYXJrX2RldmljZV9sb3N0KHZoYSwgZmNwb3J0LCAxLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBNQlNfUE9SVF9JRF9VU0VEOgogCQlmY3BvcnQtPmxvb3BfaWQgPSBkYXRhWzFdOwpAQCAtNDA5LDcgKzQxNyw3IEBACiAJCXJ2YWwgPSBxbGEyeDAwX2ZpbmRfbmV3X2xvb3BfaWQodmhhLCBmY3BvcnQpOwogCQlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewogCQkJZmNwb3J0LT5mbGFncyAmPSB+RkNGX0FTWU5DX1NFTlQ7Ci0JCQlxbGEyeDAwX21hcmtfZGV2aWNlX2xvc3QodmhhLCBmY3BvcnQsIDEsIDEpOworCQkJcWxhMngwMF9tYXJrX2RldmljZV9sb3N0KHZoYSwgZmNwb3J0LCAxLCAwKTsKIAkJCWJyZWFrOwogCQl9CiAJCXFsYTJ4MDBfcG9zdF9hc3luY19sb2dpbl93b3JrKHZoYSwgZmNwb3J0LCBOVUxMKTsKQEAgLTQ0MSw3ICs0NDksNyBAQAogCWlmIChkYXRhWzFdICYgUUxBX0xPR0lPX0xPR0lOX1JFVFJJRUQpCiAJCXNldF9iaXQoUkVMT0dJTl9ORUVERUQsICZ2aGEtPmRwY19mbGFncyk7CiAJZWxzZQotCQlxbGEyeDAwX21hcmtfZGV2aWNlX2xvc3QodmhhLCBmY3BvcnQsIDEsIDEpOworCQlxbGEyeDAwX21hcmtfZGV2aWNlX2xvc3QodmhhLCBmY3BvcnQsIDEsIDApOwogCiAJcmV0dXJuOwogfQpAQCAtMjUzNiw3ICsyNTQ0LDcgQEAKIAlmY3BvcnQtPnZwX2lkeCA9IHZoYS0+dnBfaWR4OwogCWZjcG9ydC0+cG9ydF90eXBlID0gRkNUX1VOS05PV047CiAJZmNwb3J0LT5sb29wX2lkID0gRkNfTk9fTE9PUF9JRDsKLQlhdG9taWNfc2V0KCZmY3BvcnQtPnN0YXRlLCBGQ1NfVU5DT05GSUdVUkVEKTsKKwlxbGEyeDAwX3NldF9mY3BvcnRfc3RhdGUoZmNwb3J0LCBGQ1NfVU5DT05GSUdVUkVEKTsKIAlmY3BvcnQtPnN1cHBvcnRlZF9jbGFzc2VzID0gRkNfQ09TX1VOU1BFQ0lGSUVEOwogCiAJcmV0dXJuIGZjcG9ydDsKQEAgLTI3MjIsNyArMjczMCw3IEBACiAJCQkgICAgImxvb3BfaWQ9MHglMDR4XG4iLAogCQkJICAgIHZoYS0+aG9zdF9ubywgZmNwb3J0LT5sb29wX2lkKSk7CiAKLQkJCWF0b21pY19zZXQoJmZjcG9ydC0+c3RhdGUsIEZDU19ERVZJQ0VfTE9TVCk7CisJCQlxbGEyeDAwX3NldF9mY3BvcnRfc3RhdGUoZmNwb3J0LCBGQ1NfREVWSUNFX0xPU1QpOwogCQl9CiAJfQogCkBAIC0yOTM0LDcgKzI5NDIsNyBAQAogCXFsYTJ4MDBfaWlkbWFfZmNwb3J0KHZoYSwgZmNwb3J0KTsKIAlxbGEyNHh4X3VwZGF0ZV9mY3BvcnRfZmNwX3ByaW8odmhhLCBmY3BvcnQpOwogCXFsYTJ4MDBfcmVnX3JlbW90ZV9wb3J0KHZoYSwgZmNwb3J0KTsKLQlhdG9taWNfc2V0KCZmY3BvcnQtPnN0YXRlLCBGQ1NfT05MSU5FKTsKKwlxbGEyeDAwX3NldF9mY3BvcnRfc3RhdGUoZmNwb3J0LCBGQ1NfT05MSU5FKTsKIH0KIAogLyoKQEAgLTMzOTEsNyArMzM5OSw3IEBACiAgKiBDb250ZXh0OgogICoJS2VybmVsIGNvbnRleHQuCiAgKi8KLXN0YXRpYyBpbnQKK2ludAogcWxhMngwMF9maW5kX25ld19sb29wX2lkKHNjc2lfcWxhX2hvc3RfdCAqdmhhLCBmY19wb3J0X3QgKmRldikKIHsKIAlpbnQJcnZhbDsKQEAgLTUyMDIsNyArNTIxMCw3IEBACiAJfQogCiAJLyogUmVzZXQgSW5pdGlhbGl6YXRpb24gY29udHJvbCBibG9jayAqLwotCW1lbXNldChpY2IsIDAsIHNpemVvZihzdHJ1Y3QgaW5pdF9jYl84MXh4KSk7CisJbWVtc2V0KGljYiwgMCwgaGEtPmluaXRfY2Jfc2l6ZSk7CiAKIAkvKiBDb3B5IDFzdCBzZWdtZW50LiAqLwogCWRwdHIxID0gKHVpbnQ4X3QgKilpY2I7CkBAIC01NDI3LDYgKzU0MzUsMTMgQEAKIAkJaGEtPmlzcF9hYm9ydF9jbnQgPSAwOwogCQljbGVhcl9iaXQoSVNQX0FCT1JUX1JFVFJZLCAmdmhhLT5kcGNfZmxhZ3MpOwogCisJCS8qIFVwZGF0ZSB0aGUgZmlybXdhcmUgdmVyc2lvbiAqLworCQlxbGEyeDAwX2dldF9md192ZXJzaW9uKHZoYSwgJmhhLT5md19tYWpvcl92ZXJzaW9uLAorCQkgICAgJmhhLT5md19taW5vcl92ZXJzaW9uLCAmaGEtPmZ3X3N1Ym1pbm9yX3ZlcnNpb24sCisJCSAgICAmaGEtPmZ3X2F0dHJpYnV0ZXMsICZoYS0+ZndfbWVtb3J5X3NpemUsCisJCSAgICBoYS0+bXBpX3ZlcnNpb24sICZoYS0+bXBpX2NhcGFiaWxpdGllcywKKwkJICAgIGhhLT5waHlfdmVyc2lvbik7CisKIAkJaWYgKGhhLT5mY2UpIHsKIAkJCWhhLT5mbGFncy5mY2VfZW5hYmxlZCA9IDE7CiAJCQltZW1zZXQoaGEtPmZjZSwgMCwKQEAgLTU1MDgsMjYgKzU1MjMsMjYgQEAKICAqCiAgKiBSZXR1cm46CiAgKglub24temVybyAoaWYgZm91bmQpCi0gKiAJMCAoaWYgbm90IGZvdW5kKQorICoJLTEgKGlmIG5vdCBmb3VuZCkKICAqCiAgKiBDb250ZXh0OgogICogCUtlcm5lbCBjb250ZXh0CiAgKi8KLXVpbnQ4X3QKK3N0YXRpYyBpbnQKIHFsYTI0eHhfZ2V0X2ZjcF9wcmlvKHNjc2lfcWxhX2hvc3RfdCAqdmhhLCBmY19wb3J0X3QgKmZjcG9ydCkKIHsKIAlpbnQgaSwgZW50cmllczsKIAl1aW50OF90IHBpZF9tYXRjaCwgd3duX21hdGNoOwotCXVpbnQ4X3QgcHJpb3JpdHk7CisJaW50IHByaW9yaXR5OwogCXVpbnQzMl90IHBpZDEsIHBpZDI7CiAJdWludDY0X3Qgd3duMSwgd3duMjsKIAlzdHJ1Y3QgcWxhX2ZjcF9wcmlvX2VudHJ5ICpwcmlfZW50cnk7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAKIAlpZiAoIWhhLT5mY3BfcHJpb19jZmcgfHwgIWhhLT5mbGFncy5mY3BfcHJpb19lbmFibGVkKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC0xOwogCi0JcHJpb3JpdHkgPSAwOworCXByaW9yaXR5ID0gLTE7CiAJZW50cmllcyA9IGhhLT5mY3BfcHJpb19jZmctPm51bV9lbnRyaWVzOwogCXByaV9lbnRyeSA9ICZoYS0+ZmNwX3ByaW9fY2ZnLT5lbnRyeVswXTsKIApAQCAtNTYxMCw3ICs1NjI1LDcgQEAKIHFsYTI0eHhfdXBkYXRlX2ZjcG9ydF9mY3BfcHJpbyhzY3NpX3FsYV9ob3N0X3QgKnZoYSwgZmNfcG9ydF90ICpmY3BvcnQpCiB7CiAJaW50IHJldDsKLQl1aW50OF90IHByaW9yaXR5OworCWludCBwcmlvcml0eTsKIAl1aW50MTZfdCBtYls1XTsKIAogCWlmIChmY3BvcnQtPnBvcnRfdHlwZSAhPSBGQ1RfVEFSR0VUIHx8CkBAIC01NjE4LDYgKzU2MzMsOSBAQAogCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAogCXByaW9yaXR5ID0gcWxhMjR4eF9nZXRfZmNwX3ByaW8odmhhLCBmY3BvcnQpOworCWlmIChwcmlvcml0eSA8IDApCisJCXJldHVybiBRTEFfRlVOQ1RJT05fRkFJTEVEOworCiAJcmV0ID0gcWxhMjR4eF9zZXRfZmNwX3ByaW8odmhhLCBmY3BvcnQtPmxvb3BfaWQsIHByaW9yaXR5LCBtYik7CiAJaWYgKHJldCA9PSBRTEFfU1VDQ0VTUykKIAkJZmNwb3J0LT5mY3BfcHJpbyA9IHByaW9yaXR5OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lubGluZS5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lubGluZS5oCmluZGV4IDQ4Zjk3YTkuLjRjODE2N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbmxpbmUuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5saW5lLmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogUUxvZ2ljIEZpYnJlIENoYW5uZWwgSEJBIERyaXZlcgotICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDEwIFFMb2dpYyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDExIFFMb2dpYyBDb3Jwb3JhdGlvbgogICoKICAqIFNlZSBMSUNFTlNFLnFsYTJ4eHggZm9yIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGRldGFpbHMuCiAgKi8KQEAgLTgzLDMgKzgzLDIyIEBACiAJfQogCUlOSVRfTElTVF9IRUFEKCYoKHN0cnVjdCBjcmNfY29udGV4dCAqKXNwLT5jdHgpLT5kc2RfbGlzdCk7CiB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcWxhMngwMF9zZXRfZmNwb3J0X3N0YXRlKGZjX3BvcnRfdCAqZmNwb3J0LCBpbnQgc3RhdGUpCit7CisJaW50IG9sZF9zdGF0ZTsKKworCW9sZF9zdGF0ZSA9IGF0b21pY19yZWFkKCZmY3BvcnQtPnN0YXRlKTsKKwlhdG9taWNfc2V0KCZmY3BvcnQtPnN0YXRlLCBzdGF0ZSk7CisKKwkvKiBEb24ndCBwcmludCBzdGF0ZSB0cmFuc2l0aW9ucyBkdXJpbmcgaW5pdGlhbCBhbGxvY2F0aW9uIG9mIGZjcG9ydCAqLworCWlmIChvbGRfc3RhdGUgJiYgb2xkX3N0YXRlICE9IHN0YXRlKSB7CisJCURFQlVHKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBmY3BvcnQtPnZoYS0+aHcsCisJCSAgICAic2NzaSglbGQpOiBGQ1BvcnQgc3RhdGUgdHJhbnNpdGlvbmVkIGZyb20gJXMgdG8gJXMgLSAiCisJCSAgICAicG9ydGlkPSUwMnglMDJ4JTAyeC5cbiIsIGZjcG9ydC0+dmhhLT5ob3N0X25vLAorCQkgICAgcG9ydF9zdGF0ZV9zdHJbb2xkX3N0YXRlXSwgcG9ydF9zdGF0ZV9zdHJbc3RhdGVdLAorCQkgICAgZmNwb3J0LT5kX2lkLmIuZG9tYWluLCBmY3BvcnQtPmRfaWQuYi5hcmVhLAorCQkgICAgZmNwb3J0LT5kX2lkLmIuYWxfcGEpKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW9jYi5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lvY2IuYwppbmRleCBkNzhkNTg5Li43YmFjM2NkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW9jYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pb2NiLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogUUxvZ2ljIEZpYnJlIENoYW5uZWwgSEJBIERyaXZlcgotICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDEwIFFMb2dpYyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDExIFFMb2dpYyBDb3Jwb3JhdGlvbgogICoKICAqIFNlZSBMSUNFTlNFLnFsYTJ4eHggZm9yIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGRldGFpbHMuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYwppbmRleCA3MTI1MThkLi4xYjYwYTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMSBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCkBAIC04NDMsNyArODQzLDEwIEBACiAJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKIAkJICAgICJJbnZhbGlkIFNDU0kgY29tcGxldGlvbiBoYW5kbGUgJWQuXG4iLCBpbmRleCk7CiAKLQkJc2V0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOworCQlpZiAoSVNfUUxBODJYWChoYSkpCisJCQlzZXRfYml0KEZDT0VfQ1RYX1JFU0VUX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKTsKKwkJZWxzZQorCQkJc2V0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCkBAIC04NjEsNyArODY0LDEwIEBACiAJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKIAkJICAgICJJbnZhbGlkIElTUCBTQ1NJIGNvbXBsZXRpb24gaGFuZGxlXG4iKTsKIAotCQlzZXRfYml0KElTUF9BQk9SVF9ORUVERUQsICZ2aGEtPmRwY19mbGFncyk7CisJCWlmIChJU19RTEE4MlhYKGhhKSkKKwkJCXNldF9iaXQoRkNPRV9DVFhfUkVTRVRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOworCQllbHNlCisJCQlzZXRfYml0KElTUF9BQk9SVF9ORUVERUQsICZ2aGEtPmRwY19mbGFncyk7CiAJfQogfQogCkBAIC04NzgsNyArODg0LDEwIEBACiAJaWYgKGluZGV4ID49IE1BWF9PVVRTVEFORElOR19DT01NQU5EUykgewogCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCiAJCSAgICAiJXM6IEludmFsaWQgY29tcGxldGlvbiBoYW5kbGUgKCV4KS5cbiIsIGZ1bmMsIGluZGV4KTsKLQkJc2V0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOworCQlpZiAoSVNfUUxBODJYWChoYSkpCisJCQlzZXRfYml0KEZDT0VfQ1RYX1JFU0VUX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKTsKKwkJZWxzZQorCQkJc2V0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOwogCQlnb3RvIGRvbmU7CiAJfQogCXNwID0gcmVxLT5vdXRzdGFuZGluZ19jbWRzW2luZGV4XTsKQEAgLTEwNTEsNyArMTA2MCw3IEBACiAJCX0KIAkJREVCVUcyKHFsYTJ4MDBfZHVtcF9idWZmZXIoKHVpbnQ4X3QgKilwa3QsIHNpemVvZigqcGt0KSkpOwogCX0gZWxzZSB7Ci0JCWJzZ19qb2ItPnJlcGx5LT5yZXN1bHQgPSAgRElEX09LIDw8IDE2OzsKKwkJYnNnX2pvYi0+cmVwbHktPnJlc3VsdCA9ICBESURfT0sgPDwgMTY7CiAJCWJzZ19qb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPQogCQkgICAgYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5wYXlsb2FkX2xlbjsKIAkJYnNnX2pvYi0+cmVwbHlfbGVuID0gMDsKQEAgLTExNDYsNyArMTE1NSw3IEBACiAJCURFQlVHMihxbGEyeDAwX2R1bXBfYnVmZmVyKCh1aW50OF90ICopcGt0LCBzaXplb2YoKnBrdCkpKTsKIAl9CiAJZWxzZSB7Ci0JCWJzZ19qb2ItPnJlcGx5LT5yZXN1bHQgPSAgRElEX09LIDw8IDE2OzsKKwkJYnNnX2pvYi0+cmVwbHktPnJlc3VsdCA9ICBESURfT0sgPDwgMTY7CiAJCWJzZ19qb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSBic2dfam9iLT5yZXBseV9wYXlsb2FkLnBheWxvYWRfbGVuOwogCQlic2dfam9iLT5yZXBseV9sZW4gPSAwOwogCX0KQEAgLTE1NjQsNyArMTU3MywxMCBAQAogCQkgICAgInNjc2koJWxkKTogSW52YWxpZCBzdGF0dXMgaGFuZGxlICgweCV4KS5cbiIsIHZoYS0+aG9zdF9ubywKIAkJICAgIHN0cy0+aGFuZGxlKTsKIAotCQlzZXRfYml0KElTUF9BQk9SVF9ORUVERUQsICZ2aGEtPmRwY19mbGFncyk7CisJCWlmIChJU19RTEE4MlhYKGhhKSkKKwkJCXNldF9iaXQoRkNPRV9DVFhfUkVTRVRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOworCQllbHNlCisJCQlzZXRfYml0KElTUF9BQk9SVF9ORUVERUQsICZ2aGEtPmRwY19mbGFncyk7CiAJCXFsYTJ4eHhfd2FrZV9kcGModmhhKTsKIAkJcmV0dXJuOwogCX0KQEAgLTE3OTQsMTIgKzE4MDYsMTMgQEAKIAlpZiAobG9naXQpCiAJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCiAJCSAgICAic2NzaSglbGQ6JWQ6JWQpIEZDUCBjb21tYW5kIHN0YXR1czogMHgleC0weCV4ICgweCV4KSAiCi0JCSAgICAib3hpZD0weCV4IGNkYj0lMDJ4JTAyeCUwMnggbGVuPTB4JXggIgorCQkgICAgInBvcnRpZD0lMDJ4JTAyeCUwMnggb3hpZD0weCV4IGNkYj0lMDJ4JTAyeCUwMnggbGVuPTB4JXggIgogCQkgICAgInJzcF9pbmZvPTB4JXggcmVzaWQ9MHgleCBmd19yZXNpZD0weCV4XG4iLCB2aGEtPmhvc3Rfbm8sCiAJCSAgICBjcC0+ZGV2aWNlLT5pZCwgY3AtPmRldmljZS0+bHVuLCBjb21wX3N0YXR1cywgc2NzaV9zdGF0dXMsCi0JCSAgICBjcC0+cmVzdWx0LCBveF9pZCwgY3AtPmNtbmRbMF0sCi0JCSAgICBjcC0+Y21uZFsxXSwgY3AtPmNtbmRbMl0sIHNjc2lfYnVmZmxlbihjcCksIHJzcF9pbmZvX2xlbiwKLQkJICAgIHJlc2lkX2xlbiwgZndfcmVzaWRfbGVuKSk7CisJCSAgICBjcC0+cmVzdWx0LCBmY3BvcnQtPmRfaWQuYi5kb21haW4sIGZjcG9ydC0+ZF9pZC5iLmFyZWEsCisJCSAgICBmY3BvcnQtPmRfaWQuYi5hbF9wYSwgb3hfaWQsIGNwLT5jbW5kWzBdLCBjcC0+Y21uZFsxXSwKKwkJICAgIGNwLT5jbW5kWzJdLCBzY3NpX2J1ZmZsZW4oY3ApLCByc3BfaW5mb19sZW4sIHJlc2lkX2xlbiwKKwkJICAgIGZ3X3Jlc2lkX2xlbikpOwogCiAJaWYgKHJzcC0+c3RhdHVzX3NyYiA9PSBOVUxMKQogCQlxbGEyeDAwX3NwX2NvbXBsKGhhLCBzcCk7CkBAIC0xOTA4LDEzICsxOTIxLDE3IEBACiAJCXFsYTJ4MDBfc3BfY29tcGwoaGEsIHNwKTsKIAogCX0gZWxzZSBpZiAocGt0LT5lbnRyeV90eXBlID09IENPTU1BTkRfQTY0X1RZUEUgfHwgcGt0LT5lbnRyeV90eXBlID09Ci0JICAgIENPTU1BTkRfVFlQRSB8fCBwa3QtPmVudHJ5X3R5cGUgPT0gQ09NTUFORF9UWVBFXzcpIHsKKwkJQ09NTUFORF9UWVBFIHx8IHBrdC0+ZW50cnlfdHlwZSA9PSBDT01NQU5EX1RZUEVfNworCQl8fCBwa3QtPmVudHJ5X3R5cGUgPT0gQ09NTUFORF9UWVBFXzYpIHsKIAkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBFcnJvciBlbnRyeSAtIGludmFsaWQgaGFuZGxlXG4iLAotCQkgICAgdmhhLT5ob3N0X25vKSk7CisJCQl2aGEtPmhvc3Rfbm8pKTsKIAkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkgICAgIkVycm9yIGVudHJ5IC0gaW52YWxpZCBoYW5kbGVcbiIpOworCQkJIkVycm9yIGVudHJ5IC0gaW52YWxpZCBoYW5kbGVcbiIpOwogCi0JCXNldF9iaXQoSVNQX0FCT1JUX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKTsKKwkJaWYgKElTX1FMQTgyWFgoaGEpKQorCQkJc2V0X2JpdChGQ09FX0NUWF9SRVNFVF9ORUVERUQsICZ2aGEtPmRwY19mbGFncyk7CisJCWVsc2UKKwkJCXNldF9iaXQoSVNQX0FCT1JUX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKTsKIAkJcWxhMnh4eF93YWtlX2RwYyh2aGEpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9tYnguYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9tYnguYwppbmRleCAzNDg5MzM5Li5jMjZmMGFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21ieC5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMSBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCkBAIC0xMjYxLDExICsxMjYxLDEyIEBACiAJCS8qIENoZWNrIGZvciBsb2dnZWQgaW4gc3RhdGUuICovCiAJCWlmIChwZDI0LT5jdXJyZW50X2xvZ2luX3N0YXRlICE9IFBEU19QUkxJX0NPTVBMRVRFICYmCiAJCSAgICBwZDI0LT5sYXN0X2xvZ2luX3N0YXRlICE9IFBEU19QUkxJX0NPTVBMRVRFKSB7Ci0JCQlERUJVRzIocHJpbnRrKCIlcyglbGQpOiBVbmFibGUgdG8gdmVyaWZ5ICIKLQkJCSAgICAibG9naW4tc3RhdGUgKCV4LyV4KSBmb3IgbG9vcF9pZCAleFxuIiwKLQkJCSAgICBfX2Z1bmNfXywgdmhhLT5ob3N0X25vLAotCQkJICAgIHBkMjQtPmN1cnJlbnRfbG9naW5fc3RhdGUsCi0JCQkgICAgcGQyNC0+bGFzdF9sb2dpbl9zdGF0ZSwgZmNwb3J0LT5sb29wX2lkKSk7CisJCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkJICAgInNjc2koJWxkKTogVW5hYmxlIHRvIHZlcmlmeSBsb2dpbi1zdGF0ZSAoJXgvJXgpICIKKwkJCSAgICIgLSBwb3J0aWQ9JTAyeCUwMnglMDJ4LlxuIiwgdmhhLT5ob3N0X25vLAorCQkJICAgcGQyNC0+Y3VycmVudF9sb2dpbl9zdGF0ZSwgcGQyNC0+bGFzdF9sb2dpbl9zdGF0ZSwKKwkJCSAgIGZjcG9ydC0+ZF9pZC5iLmRvbWFpbiwgZmNwb3J0LT5kX2lkLmIuYXJlYSwKKwkJCSAgIGZjcG9ydC0+ZF9pZC5iLmFsX3BhKSk7CiAJCQlydmFsID0gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAkJCWdvdG8gZ3BkX2Vycm9yX291dDsKIAkJfQpAQCAtMTI4OSw2ICsxMjkwLDEyIEBACiAJCS8qIENoZWNrIGZvciBsb2dnZWQgaW4gc3RhdGUuICovCiAJCWlmIChwZC0+bWFzdGVyX3N0YXRlICE9IFBEX1NUQVRFX1BPUlRfTE9HR0VEX0lOICYmCiAJCSAgICBwZC0+c2xhdmVfc3RhdGUgIT0gUERfU1RBVEVfUE9SVF9MT0dHRURfSU4pIHsKKwkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCQkgICAic2NzaSglbGQpOiBVbmFibGUgdG8gdmVyaWZ5IGxvZ2luLXN0YXRlICgleC8leCkgIgorCQkJICAgIiAtIHBvcnRpZD0lMDJ4JTAyeCUwMnguXG4iLCB2aGEtPmhvc3Rfbm8sCisJCQkgICBwZC0+bWFzdGVyX3N0YXRlLCBwZC0+c2xhdmVfc3RhdGUsCisJCQkgICBmY3BvcnQtPmRfaWQuYi5kb21haW4sIGZjcG9ydC0+ZF9pZC5iLmFyZWEsCisJCQkgICBmY3BvcnQtPmRfaWQuYi5hbF9wYSkpOwogCQkJcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAJCQlnb3RvIGdwZF9lcnJvcl9vdXQ7CiAJCX0KQEAgLTE4ODMsNyArMTg5MCw4IEBACiAJbGctPmhhbmRsZSA9IE1BS0VfSEFORExFKHJlcS0+aWQsIGxnLT5oYW5kbGUpOwogCWxnLT5ucG9ydF9oYW5kbGUgPSBjcHVfdG9fbGUxNihsb29wX2lkKTsKIAlsZy0+Y29udHJvbF9mbGFncyA9Ci0JICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoTENGX0NPTU1BTkRfTE9HT3xMQ0ZfSU1QTF9MT0dPKTsKKwkgICAgX19jb25zdGFudF9jcHVfdG9fbGUxNihMQ0ZfQ09NTUFORF9MT0dPfExDRl9JTVBMX0xPR098CisJCUxDRl9GUkVFX05QT1JUKTsKIAlsZy0+cG9ydF9pZFswXSA9IGFsX3BhOwogCWxnLT5wb3J0X2lkWzFdID0gYXJlYTsKIAlsZy0+cG9ydF9pZFsyXSA9IGRvbWFpbjsKQEAgLTIzNjIsNyArMjM3MCw3IEBACiAJYWJ0LT5lbnRyeV9jb3VudCA9IDE7CiAJYWJ0LT5oYW5kbGUgPSBNQUtFX0hBTkRMRShyZXEtPmlkLCBhYnQtPmhhbmRsZSk7CiAJYWJ0LT5ucG9ydF9oYW5kbGUgPSBjcHVfdG9fbGUxNihmY3BvcnQtPmxvb3BfaWQpOwotCWFidC0+aGFuZGxlX3RvX2Fib3J0ID0gaGFuZGxlOworCWFidC0+aGFuZGxlX3RvX2Fib3J0ID0gTUFLRV9IQU5ETEUocmVxLT5pZCwgaGFuZGxlKTsKIAlhYnQtPnBvcnRfaWRbMF0gPSBmY3BvcnQtPmRfaWQuYi5hbF9wYTsKIAlhYnQtPnBvcnRfaWRbMV0gPSBmY3BvcnQtPmRfaWQuYi5hcmVhOwogCWFidC0+cG9ydF9pZFsyXSA9IGZjcG9ydC0+ZF9pZC5iLmRvbWFpbjsKQEAgLTI3NzksNDQgKzI3ODcsNiBAQAogfQogCiBpbnQKLXFsYTJ4MDBfcmVhZF9zZnAoc2NzaV9xbGFfaG9zdF90ICp2aGEsIGRtYV9hZGRyX3Qgc2ZwX2RtYSwgdWludDE2X3QgYWRkciwKLSAgICB1aW50MTZfdCBvZmYsIHVpbnQxNl90IGNvdW50KQotewotCWludCBydmFsOwotCW1ieF9jbWRfdCBtYzsKLQltYnhfY21kX3QgKm1jcCA9ICZtYzsKLQotCWlmICghSVNfRldJMl9DQVBBQkxFKHZoYS0+aHcpKQotCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKLQotCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOwotCi0JbWNwLT5tYlswXSA9IE1CQ19SRUFEX1NGUDsKLQltY3AtPm1iWzFdID0gYWRkcjsKLQltY3AtPm1iWzJdID0gTVNXKHNmcF9kbWEpOwotCW1jcC0+bWJbM10gPSBMU1coc2ZwX2RtYSk7Ci0JbWNwLT5tYls2XSA9IE1TVyhNU0Qoc2ZwX2RtYSkpOwotCW1jcC0+bWJbN10gPSBMU1coTVNEKHNmcF9kbWEpKTsKLQltY3AtPm1iWzhdID0gY291bnQ7Ci0JbWNwLT5tYls5XSA9IG9mZjsKLQltY3AtPm1iWzEwXSA9IDA7Ci0JbWNwLT5vdXRfbWIgPSBNQlhfMTB8TUJYXzl8TUJYXzh8TUJYXzd8TUJYXzZ8TUJYXzN8TUJYXzJ8TUJYXzF8TUJYXzA7Ci0JbWNwLT5pbl9tYiA9IE1CWF8wOwotCW1jcC0+dG92ID0gTUJYX1RPVl9TRUNPTkRTOwotCW1jcC0+ZmxhZ3MgPSAwOwotCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZCh2aGEsIG1jcCk7Ci0KLQlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewotCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZD0leCAoJXgpLlxuIiwgX19mdW5jX18sCi0JCSAgICB2aGEtPmhvc3Rfbm8sIHJ2YWwsIG1jcC0+bWJbMF0pKTsKLQl9IGVsc2UgewotCQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZG9uZS5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKLQl9Ci0KLQlyZXR1cm4gcnZhbDsKLX0KLQotaW50CiBxbGEyeDAwX2dldF9pZG1hX3NwZWVkKHNjc2lfcWxhX2hvc3RfdCAqdmhhLCB1aW50MTZfdCBsb29wX2lkLAogCXVpbnQxNl90ICpwb3J0X3NwZWVkLCB1aW50MTZfdCAqbWIpCiB7CkBAIC0zNTgxLDE1ICszNTUxLDIyIEBACiB9CiAKIGludAotcWxhMngwMF9yZWFkX2VkYyhzY3NpX3FsYV9ob3N0X3QgKnZoYSwgdWludDE2X3QgZGV2LCB1aW50MTZfdCBhZHIsCi0gICAgZG1hX2FkZHJfdCBzZnBfZG1hLCB1aW50OF90ICpzZnAsIHVpbnQxNl90IGxlbiwgdWludDE2X3Qgb3B0KQorcWxhMngwMF9yZWFkX3NmcChzY3NpX3FsYV9ob3N0X3QgKnZoYSwgZG1hX2FkZHJfdCBzZnBfZG1hLCB1aW50OF90ICpzZnAsCisJdWludDE2X3QgZGV2LCB1aW50MTZfdCBvZmYsIHVpbnQxNl90IGxlbiwgdWludDE2X3Qgb3B0KQogewogCWludCBydmFsOwogCW1ieF9jbWRfdCBtYzsKIAltYnhfY21kX3QgKm1jcCA9ICZtYzsKKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKKworCWlmICghSVNfRldJMl9DQVBBQkxFKGhhKSkKKwkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAKIAlERUJVRzExKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKIAorCWlmIChsZW4gPT0gMSkKKwkJb3B0IHw9IEJJVF8wOworCiAJbWNwLT5tYlswXSA9IE1CQ19SRUFEX1NGUDsKIAltY3AtPm1iWzFdID0gZGV2OwogCW1jcC0+bWJbMl0gPSBNU1coc2ZwX2RtYSk7CkBAIC0zNTk3LDE3ICszNTc0LDE2IEBACiAJbWNwLT5tYls2XSA9IE1TVyhNU0Qoc2ZwX2RtYSkpOwogCW1jcC0+bWJbN10gPSBMU1coTVNEKHNmcF9kbWEpKTsKIAltY3AtPm1iWzhdID0gbGVuOwotCW1jcC0+bWJbOV0gPSBhZHI7CisJbWNwLT5tYls5XSA9IG9mZjsKIAltY3AtPm1iWzEwXSA9IG9wdDsKIAltY3AtPm91dF9tYiA9IE1CWF8xMHxNQlhfOXxNQlhfOHxNQlhfN3xNQlhfNnxNQlhfM3xNQlhfMnxNQlhfMXxNQlhfMDsKLQltY3AtPmluX21iID0gTUJYXzA7CisJbWNwLT5pbl9tYiA9IE1CWF8xfE1CWF8wOwogCW1jcC0+dG92ID0gTUJYX1RPVl9TRUNPTkRTOwogCW1jcC0+ZmxhZ3MgPSAwOwogCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZCh2aGEsIG1jcCk7CiAKIAlpZiAob3B0ICYgQklUXzApCi0JCWlmIChzZnApCi0JCQkqc2ZwID0gbWNwLT5tYls4XTsKKwkJKnNmcCA9IG1jcC0+bWJbMV07CiAKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewogCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZD0leCAoJXgpLlxuIiwgX19mdW5jX18sCkBAIC0zNjIwLDE4ICszNTk2LDI0IEBACiB9CiAKIGludAotcWxhMngwMF93cml0ZV9lZGMoc2NzaV9xbGFfaG9zdF90ICp2aGEsIHVpbnQxNl90IGRldiwgdWludDE2X3QgYWRyLAotICAgIGRtYV9hZGRyX3Qgc2ZwX2RtYSwgdWludDhfdCAqc2ZwLCB1aW50MTZfdCBsZW4sIHVpbnQxNl90IG9wdCkKK3FsYTJ4MDBfd3JpdGVfc2ZwKHNjc2lfcWxhX2hvc3RfdCAqdmhhLCBkbWFfYWRkcl90IHNmcF9kbWEsIHVpbnQ4X3QgKnNmcCwKKwl1aW50MTZfdCBkZXYsIHVpbnQxNl90IG9mZiwgdWludDE2X3QgbGVuLCB1aW50MTZfdCBvcHQpCiB7CiAJaW50IHJ2YWw7CiAJbWJ4X2NtZF90IG1jOwogCW1ieF9jbWRfdCAqbWNwID0gJm1jOworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCisJaWYgKCFJU19GV0kyX0NBUEFCTEUoaGEpKQorCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAogCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOwogCisJaWYgKGxlbiA9PSAxKQorCQlvcHQgfD0gQklUXzA7CisKIAlpZiAob3B0ICYgQklUXzApCi0JCWlmIChzZnApCi0JCQlsZW4gPSAqc2ZwOworCQlsZW4gPSAqc2ZwOwogCiAJbWNwLT5tYlswXSA9IE1CQ19XUklURV9TRlA7CiAJbWNwLT5tYlsxXSA9IGRldjsKQEAgLTM2NDAsMTAgKzM2MjIsMTAgQEAKIAltY3AtPm1iWzZdID0gTVNXKE1TRChzZnBfZG1hKSk7CiAJbWNwLT5tYls3XSA9IExTVyhNU0Qoc2ZwX2RtYSkpOwogCW1jcC0+bWJbOF0gPSBsZW47Ci0JbWNwLT5tYls5XSA9IGFkcjsKKwltY3AtPm1iWzldID0gb2ZmOwogCW1jcC0+bWJbMTBdID0gb3B0OwogCW1jcC0+b3V0X21iID0gTUJYXzEwfE1CWF85fE1CWF84fE1CWF83fE1CWF82fE1CWF8zfE1CWF8yfE1CWF8xfE1CWF8wOwotCW1jcC0+aW5fbWIgPSBNQlhfMDsKKwltY3AtPmluX21iID0gTUJYXzF8TUJYXzA7CiAJbWNwLT50b3YgPSBNQlhfVE9WX1NFQ09ORFM7CiAJbWNwLT5mbGFncyA9IDA7CiAJcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKHZoYSwgbWNwKTsKQEAgLTQxNjAsNjMgKzQxNDIsMzIgQEAKIHFsYTJ4MDBfZ2V0X3RoZXJtYWxfdGVtcChzY3NpX3FsYV9ob3N0X3QgKnZoYSwgdWludDE2X3QgKnRlbXAsIHVpbnQxNl90ICpmcmFjKQogewogCWludCBydmFsOwotCW1ieF9jbWRfdCBtYzsKLQltYnhfY21kX3QgKm1jcCA9ICZtYzsKKwl1aW50OF90IGJ5dGU7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAKLQlERUJVRzExKHByaW50ayhLRVJOX0lORk8gIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pKTsKKwlERUJVRzExKHByaW50ayhLRVJOX0lORk8gIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CiAKLQkvKiBIaWdoIGJpdHMuICovCi0JbWNwLT5tYlswXSA9IE1CQ19SRUFEX1NGUDsKLQltY3AtPm1iWzFdID0gMHg5ODsKLQltY3AtPm1iWzJdID0gMDsKLQltY3AtPm1iWzNdID0gMDsKLQltY3AtPm1iWzZdID0gMDsKLQltY3AtPm1iWzddID0gMDsKLQltY3AtPm1iWzhdID0gMTsKLQltY3AtPm1iWzldID0gMHgwMTsKLQltY3AtPm1iWzEwXSA9IEJJVF8xM3xCSVRfMDsKLQltY3AtPm91dF9tYiA9IE1CWF8xMHxNQlhfOXxNQlhfOHxNQlhfN3xNQlhfNnxNQlhfM3xNQlhfMnxNQlhfMXxNQlhfMDsKLQltY3AtPmluX21iID0gTUJYXzF8TUJYXzA7Ci0JbWNwLT50b3YgPSBNQlhfVE9WX1NFQ09ORFM7Ci0JbWNwLT5mbGFncyA9IDA7Ci0JcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKHZoYSwgbWNwKTsKKwkvKiBJbnRlZ2VyIHBhcnQgKi8KKwlydmFsID0gcWxhMngwMF9yZWFkX3NmcCh2aGEsIDAsICZieXRlLCAweDk4LCAweDAxLCAxLCBCSVRfMTN8QklUXzApOwogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CiAJCURFQlVHMl8zXzExKHByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICIlcyglbGQpOiBmYWlsZWQ9JXggKCV4KS5cbiIsIF9fZnVuY19fLAotCQkgICAgdmhhLT5ob3N0X25vLCBydmFsLCBtY3AtPm1iWzBdKSk7CisJCSAgICAiJXMoJWxkKTogZmFpbGVkPSV4LlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubywgcnZhbCkpOwogCQloYS0+ZmxhZ3MudGhlcm1hbF9zdXBwb3J0ZWQgPSAwOwogCQlnb3RvIGZhaWw7CiAJfQotCSp0ZW1wID0gbWNwLT5tYlsxXSAmIDB4RkY7CisJKnRlbXAgPSBieXRlOwogCi0JLyogTG93IGJpdHMuICovCi0JbWNwLT5tYlswXSA9IE1CQ19SRUFEX1NGUDsKLQltY3AtPm1iWzFdID0gMHg5ODsKLQltY3AtPm1iWzJdID0gMDsKLQltY3AtPm1iWzNdID0gMDsKLQltY3AtPm1iWzZdID0gMDsKLQltY3AtPm1iWzddID0gMDsKLQltY3AtPm1iWzhdID0gMTsKLQltY3AtPm1iWzldID0gMHgxMDsKLQltY3AtPm1iWzEwXSA9IEJJVF8xM3xCSVRfMDsKLQltY3AtPm91dF9tYiA9IE1CWF8xMHxNQlhfOXxNQlhfOHxNQlhfN3xNQlhfNnxNQlhfM3xNQlhfMnxNQlhfMXxNQlhfMDsKLQltY3AtPmluX21iID0gTUJYXzF8TUJYXzA7Ci0JbWNwLT50b3YgPSBNQlhfVE9WX1NFQ09ORFM7Ci0JbWNwLT5mbGFncyA9IDA7Ci0JcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKHZoYSwgbWNwKTsKKwkvKiBGcmFjdGlvbiBwYXJ0ICovCisJcnZhbCA9IHFsYTJ4MDBfcmVhZF9zZnAodmhhLCAwLCAmYnl0ZSwgMHg5OCwgMHgxMCwgMSwgQklUXzEzfEJJVF8wKTsKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewogCQlERUJVRzJfM18xMShwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAiJXMoJWxkKTogZmFpbGVkPSV4ICgleCkuXG4iLCBfX2Z1bmNfXywKLQkJICAgIHZoYS0+aG9zdF9ubywgcnZhbCwgbWNwLT5tYlswXSkpOworCQkgICAgIiVzKCVsZCk6IGZhaWxlZD0leC5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8sIHJ2YWwpKTsKIAkJaGEtPmZsYWdzLnRoZXJtYWxfc3VwcG9ydGVkID0gMDsKIAkJZ290byBmYWlsOwogCX0KLQkqZnJhYyA9ICgobWNwLT5tYlsxXSAmIDB4RkYpID4+IDYpICogMjU7CisJKmZyYWMgPSAoYnl0ZSA+PiA2KSAqIDI1OwogCi0JaWYgKHJ2YWwgPT0gUUxBX1NVQ0NFU1MpCi0JCURFQlVHMTEocHJpbnRrKEtFUk5fSU5GTwotCQkgICAgIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pKTsKKwlERUJVRzExKHByaW50ayhLRVJOX0lORk8gIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CiBmYWlsOgogCXJldHVybiBydmFsOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21pZC5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21pZC5jCmluZGV4IDJiNjkzOTIuLjVlMzQzOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9taWQuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWlkLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogUUxvZ2ljIEZpYnJlIENoYW5uZWwgSEJBIERyaXZlcgotICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDEwIFFMb2dpYyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDExIFFMb2dpYyBDb3Jwb3JhdGlvbgogICoKICAqIFNlZSBMSUNFTlNFLnFsYTJ4eHggZm9yIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGRldGFpbHMuCiAgKi8KQEAgLTEzNiw3ICsxMzYsNyBAQAogCQkgICAgdmhhLT5ob3N0X25vLCBmY3BvcnQtPmxvb3BfaWQsIGZjcG9ydC0+dnBfaWR4KSk7CiAKIAkJcWxhMngwMF9tYXJrX2RldmljZV9sb3N0KHZoYSwgZmNwb3J0LCAwLCAwKTsKLQkJYXRvbWljX3NldCgmZmNwb3J0LT5zdGF0ZSwgRkNTX1VOQ09ORklHVVJFRCk7CisJCXFsYTJ4MDBfc2V0X2ZjcG9ydF9zdGF0ZShmY3BvcnQsIEZDU19VTkNPTkZJR1VSRUQpOwogCX0KIH0KIApAQCAtNDU2LDcgKzQ1Niw3IEBACiAJZWxzZQogCQlob3N0LT5tYXhfY21kX2xlbiA9IE1BWF9DTURTWjsKIAlob3N0LT5tYXhfY2hhbm5lbCA9IE1BWF9CVVNFUyAtIDE7Ci0JaG9zdC0+bWF4X2x1biA9IE1BWF9MVU5TOworCWhvc3QtPm1heF9sdW4gPSBxbDJ4bWF4bHVuOwogCWhvc3QtPnVuaXF1ZV9pZCA9IGhvc3QtPmhvc3Rfbm87CiAJaG9zdC0+bWF4X2lkID0gTUFYX1RBUkdFVFNfMjIwMDsKIAlob3N0LT50cmFuc3BvcnR0ID0gcWxhMnh4eF90cmFuc3BvcnRfdnBvcnRfdGVtcGxhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbnguYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ueC5jCmluZGV4IDQ1NWZlMTMuLmUxMTM4YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ueC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ueC5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMSBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCkBAIC04NDQsNiArODQ0LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkCitxbGE4Mnh4X3JvbV91bmxvY2soc3RydWN0IHFsYV9od19kYXRhICpoYSkKK3sKKwlxbGE4Mnh4X3JkXzMyKGhhLCBRTEE4MlhYX1BDSUVfUkVHKFBDSUVfU0VNMl9VTkxPQ0spKTsKK30KKwogc3RhdGljIGludAogcWxhODJ4eF93YWl0X3JvbV9idXN5KHN0cnVjdCBxbGFfaHdfZGF0YSAqaGEpCiB7CkBAIC05MjQsNyArOTMwLDcgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAlyZXQgPSBxbGE4Mnh4X2RvX3JvbV9mYXN0X3JlYWQoaGEsIGFkZHIsIHZhbHApOwotCXFsYTgyeHhfcmRfMzIoaGEsIFFMQTgyWFhfUENJRV9SRUcoUENJRV9TRU0yX1VOTE9DSykpOworCXFsYTgyeHhfcm9tX3VubG9jayhoYSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTA1Niw3ICsxMDYyLDcgQEAKIAlyZXQgPSBxbGE4Mnh4X2ZsYXNoX3dhaXRfd3JpdGVfZmluaXNoKGhhKTsKIAogZG9uZV93cml0ZToKLQlxbGE4Mnh4X3JkXzMyKGhhLCBRTEE4MlhYX1BDSUVfUkVHKFBDSUVfU0VNMl9VTkxPQ0spKTsKKwlxbGE4Mnh4X3JvbV91bmxvY2soaGEpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEwODEsMTIgKzEwODcsMjYgQEAKIAkvKiBIYWx0IGFsbCB0aGUgaW5kaXZpdWFsIFBFR3MgYW5kIG90aGVyIGJsb2NrcyBvZiB0aGUgSVNQICovCiAJcWxhODJ4eF9yb21fbG9jayhoYSk7CiAKLQkvKiBtYXNrIGFsbCBuaXUgaW50ZXJydXB0cyAqLworCS8qIGRpc2FibGUgYWxsIEkyUSAqLworCXFsYTgyeHhfd3JfMzIoaGEsIFFMQTgyWFhfQ1JCX0kyUSArIDB4MTAsIDB4MCk7CisJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfSTJRICsgMHgxNCwgMHgwKTsKKwlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9JMlEgKyAweDE4LCAweDApOworCXFsYTgyeHhfd3JfMzIoaGEsIFFMQTgyWFhfQ1JCX0kyUSArIDB4MWMsIDB4MCk7CisJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfSTJRICsgMHgyMCwgMHgwKTsKKwlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9JMlEgKyAweDI0LCAweDApOworCisJLyogZGlzYWJsZSBhbGwgbml1IGludGVycnVwdHMgKi8KIAlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9OSVUgKyAweDQwLCAweGZmKTsKIAkvKiBkaXNhYmxlIHhnZSByeC90eCAqLwogCXFsYTgyeHhfd3JfMzIoaGEsIFFMQTgyWFhfQ1JCX05JVSArIDB4NzAwMDAsIDB4MDApOwogCS8qIGRpc2FibGUgeGcxIHJ4L3R4ICovCiAJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfTklVICsgMHg4MDAwMCwgMHgwMCk7CisJLyogZGlzYWJsZSBzaWRlYmFuZCBtYWMgKi8KKwlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9OSVUgKyAweDkwMDAwLCAweDAwKTsKKwkvKiBkaXNhYmxlIGFwMCBtYWMgKi8KKwlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9OSVUgKyAweGEwMDAwLCAweDAwKTsKKwkvKiBkaXNhYmxlIGFwMSBtYWMgKi8KKwlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9OSVUgKyAweGIwMDAwLCAweDAwKTsKIAogCS8qIGhhbHQgc3JlICovCiAJdmFsID0gcWxhODJ4eF9yZF8zMihoYSwgUUxBODJYWF9DUkJfU1JFICsgMHgxMDAwKTsKQEAgLTExMDEsNiArMTEyMSw3IEBACiAJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfVElNRVIgKyAweDEwLCAweDApOwogCXFsYTgyeHhfd3JfMzIoaGEsIFFMQTgyWFhfQ1JCX1RJTUVSICsgMHgxOCwgMHgwKTsKIAlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9USU1FUiArIDB4MTAwLCAweDApOworCXFsYTgyeHhfd3JfMzIoaGEsIFFMQTgyWFhfQ1JCX1RJTUVSICsgMHgyMDAsIDB4MCk7CiAKIAkvKiBoYWx0IHBlZ3MgKi8KIAlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9QRUdfTkVUXzAgKyAweDNjLCAxKTsKQEAgLTExMDgsOSArMTEyOSw5IEBACiAJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfUEVHX05FVF8yICsgMHgzYywgMSk7CiAJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfUEVHX05FVF8zICsgMHgzYywgMSk7CiAJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfUEVHX05FVF80ICsgMHgzYywgMSk7CisJbXNsZWVwKDIwKTsKIAogCS8qIGJpZyBoYW1tZXIgKi8KLQltc2xlZXAoMTAwMCk7CiAJaWYgKHRlc3RfYml0KEFCT1JUX0lTUF9BQ1RJVkUsICZ2aGEtPmRwY19mbGFncykpCiAJCS8qIGRvbid0IHJlc2V0IENBTSBibG9jayBvbiByZXNldCAqLwogCQlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX1JPTVVTQl9HTEJfU1dfUkVTRVQsIDB4ZmVmZmZmZmYpOwpAQCAtMTEyOSw3ICsxMTUwLDcgQEAKIAlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9RRFJfTkVUICsgMHhlNCwgdmFsKTsKIAltc2xlZXAoMjApOwogCi0JcWxhODJ4eF9yZF8zMihoYSwgUUxBODJYWF9QQ0lFX1JFRyhQQ0lFX1NFTTJfVU5MT0NLKSk7CisJcWxhODJ4eF9yb21fdW5sb2NrKGhhKTsKIAogCS8qIFJlYWQgdGhlIHNpZ25hdHVyZSB2YWx1ZSBmcm9tIHRoZSBmbGFzaC4KIAkgKiBPZmZzZXQgMDogQ29udGFpbiBzaWduYXR1cmUgKDB4Y2FmZWNhZmUpCkBAIC0yMzk1LDkgKzI0MTYsMTMgQEAKIAogCWlmIChxbGE4Mnh4X2Z3X2xvYWRfZnJvbV9mbGFzaChoYSkgPT0gUUxBX1NVQ0NFU1MpIHsKIAkJcWxhX3ByaW50ayhLRVJOX0VSUiwgaGEsCi0JCQkiRmlybXdhcmUgbG9hZGVkIHN1Y2Nlc3NmdWxseSBmcm9tIGZsYXNoXG4iKTsKKwkJICAgICJGaXJtd2FyZSBsb2FkZWQgc3VjY2Vzc2Z1bGx5IGZyb20gZmxhc2hcbiIpOwogCQlyZXR1cm4gUUxBX1NVQ0NFU1M7CisJfSBlbHNlIHsKKwkJcWxhX3ByaW50ayhLRVJOX0VSUiwgaGEsCisJCSAgICAiRmlybXdhcmUgbG9hZCBmcm9tIGZsYXNoIGZhaWxlZFxuIik7CiAJfQorCiB0cnlfYmxvYl9mdzoKIAlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCiAJICAgICJBdHRlbXB0aW5nIHRvIGxvYWQgZmlybXdhcmUgZnJvbSBibG9iXG4iKTsKQEAgLTI1NDgsMTEgKzI1NzMsMTEgQEAKIAkJCWRzZF9zZWcgPSAodWludDMyX3QgKikmY21kX3BrdC0+ZmNwX2RhdGFfZHNlZ19hZGRyZXNzOwogCQkJKmRzZF9zZWcrKyA9IGNwdV90b19sZTMyKExTRChkc2RfcHRyLT5kc2RfbGlzdF9kbWEpKTsKIAkJCSpkc2Rfc2VnKysgPSBjcHVfdG9fbGUzMihNU0QoZHNkX3B0ci0+ZHNkX2xpc3RfZG1hKSk7Ci0JCQljbWRfcGt0LT5mY3BfZGF0YV9kc2VnX2xlbiA9IGRzZF9saXN0X2xlbjsKKwkJCSpkc2Rfc2VnKysgPSBjcHVfdG9fbGUzMihkc2RfbGlzdF9sZW4pOwogCQl9IGVsc2UgewogCQkJKmN1cl9kc2QrKyA9IGNwdV90b19sZTMyKExTRChkc2RfcHRyLT5kc2RfbGlzdF9kbWEpKTsKIAkJCSpjdXJfZHNkKysgPSBjcHVfdG9fbGUzMihNU0QoZHNkX3B0ci0+ZHNkX2xpc3RfZG1hKSk7Ci0JCQkqY3VyX2RzZCsrID0gZHNkX2xpc3RfbGVuOworCQkJKmN1cl9kc2QrKyA9IGNwdV90b19sZTMyKGRzZF9saXN0X2xlbik7CiAJCX0KIAkJY3VyX2RzZCA9ICh1aW50MzJfdCAqKW5leHRfZHNkOwogCQl3aGlsZSAoYXZhaWxfZHNkcykgewpAQCAtMjk5MSw3ICszMDE2LDcgQEAKIAkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAiV3JpdGUgZGlzYWJsZSBmYWlsZWRcbiIpOwogCiBkb25lX3VucHJvdGVjdDoKLQlxbGE4Mnh4X3JkXzMyKGhhLCBRTEE4MlhYX1BDSUVfUkVHKFBDSUVfU0VNMl9VTkxPQ0spKTsKKwlxbGE4Mnh4X3JvbV91bmxvY2soaGEpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTMwMjAsNyArMzA0NSw3IEBACiAJaWYgKHFsYTgyeHhfd3JpdGVfZGlzYWJsZV9mbGFzaChoYSkgIT0gMCkKIAkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAiV3JpdGUgZGlzYWJsZSBmYWlsZWRcbiIpOwogZG9uZV9wcm90ZWN0OgotCXFsYTgyeHhfcmRfMzIoaGEsIFFMQTgyWFhfUENJRV9SRUcoUENJRV9TRU0yX1VOTE9DSykpOworCXFsYTgyeHhfcm9tX3VubG9jayhoYSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzA0OCw3ICszMDczLDcgQEAKIAl9CiAJcmV0ID0gcWxhODJ4eF9mbGFzaF93YWl0X3dyaXRlX2ZpbmlzaChoYSk7CiBkb25lOgotCXFsYTgyeHhfcmRfMzIoaGEsIFFMQTgyWFhfUENJRV9SRUcoUENJRV9TRU0yX1VOTE9DSykpOworCXFsYTgyeHhfcm9tX3VubG9jayhoYSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzIyOCw3ICszMjUzLDcgQEAKIAkgKiBlbHNlIGRpZWQgd2hpbGUgaG9sZGluZyBpdC4KIAkgKiBJbiBlaXRoZXIgY2FzZSwgdW5sb2NrLgogCSAqLwotCXFsYTgyeHhfcmRfMzIoaGEsIFFMQTgyWFhfUENJRV9SRUcoUENJRV9TRU0yX1VOTE9DSykpOworCXFsYTgyeHhfcm9tX3VubG9jayhoYSk7CiB9CiAKIC8qCkBAIC0zNTI4LDE1ICszNTUzLDE4IEBACiBxbGE4Mnh4X2RldmljZV9zdGF0ZV9oYW5kbGVyKHNjc2lfcWxhX2hvc3RfdCAqdmhhKQogewogCXVpbnQzMl90IGRldl9zdGF0ZTsKKwl1aW50MzJfdCBvbGRfZGV2X3N0YXRlOwogCWludCBydmFsID0gUUxBX1NVQ0NFU1M7CiAJdW5zaWduZWQgbG9uZyBkZXZfaW5pdF90aW1lb3V0OwogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCWludCBsb29wY291bnQgPSAwOwogCiAJcWxhODJ4eF9pZGNfbG9jayhoYSk7CiAJaWYgKCF2aGEtPmZsYWdzLmluaXRfZG9uZSkKIAkJcWxhODJ4eF9zZXRfZHJ2X2FjdGl2ZSh2aGEpOwogCiAJZGV2X3N0YXRlID0gcWxhODJ4eF9yZF8zMihoYSwgUUxBODJYWF9DUkJfREVWX1NUQVRFKTsKKwlvbGRfZGV2X3N0YXRlID0gZGV2X3N0YXRlOwogCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwgIjE6RGV2aWNlIHN0YXRlIGlzIDB4JXggPSAlc1xuIiwgZGV2X3N0YXRlLAogCQlkZXZfc3RhdGUgPCBNQVhfU1RBVEVTID8gcWRldl9zdGF0ZVtkZXZfc3RhdGVdIDogIlVua25vd24iKTsKIApAQCAtMzU1MywxMCArMzU4MSwxNiBAQAogCQkJYnJlYWs7CiAJCX0KIAkJZGV2X3N0YXRlID0gcWxhODJ4eF9yZF8zMihoYSwgUUxBODJYWF9DUkJfREVWX1NUQVRFKTsKLQkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAotCQkJIjI6RGV2aWNlIHN0YXRlIGlzIDB4JXggPSAlc1xuIiwgZGV2X3N0YXRlLAotCQkJZGV2X3N0YXRlIDwgTUFYX1NUQVRFUyA/Ci0JCQlxZGV2X3N0YXRlW2Rldl9zdGF0ZV0gOiAiVW5rbm93biIpOworCQlpZiAob2xkX2Rldl9zdGF0ZSAhPSBkZXZfc3RhdGUpIHsKKwkJCWxvb3Bjb3VudCA9IDA7CisJCQlvbGRfZGV2X3N0YXRlID0gZGV2X3N0YXRlOworCQl9CisJCWlmIChsb29wY291bnQgPCA1KSB7CisJCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJCQkgICAgIjI6RGV2aWNlIHN0YXRlIGlzIDB4JXggPSAlc1xuIiwgZGV2X3N0YXRlLAorCQkJICAgIGRldl9zdGF0ZSA8IE1BWF9TVEFURVMgPworCQkJICAgIHFkZXZfc3RhdGVbZGV2X3N0YXRlXSA6ICJVbmtub3duIik7CisJCX0KIAogCQlzd2l0Y2ggKGRldl9zdGF0ZSkgewogCQljYXNlIFFMQTgyWFhfREVWX1JFQURZOgpAQCAtMzU3MCw2ICszNjA0LDcgQEAKIAkJCXFsYTgyeHhfaWRjX2xvY2soaGEpOwogCQkJYnJlYWs7CiAJCWNhc2UgUUxBODJYWF9ERVZfTkVFRF9SRVNFVDoKKwkJICAgIGlmICghcWwyeGRvbnRyZXNldGhiYSkKIAkJCXFsYTgyeHhfbmVlZF9yZXNldF9oYW5kbGVyKHZoYSk7CiAJCQlkZXZfaW5pdF90aW1lb3V0ID0gamlmZmllcyArCiAJCQkJKGhhLT5ueF9kZXZfaW5pdF90aW1lb3V0ICogSFopOwpAQCAtMzYwNCw2ICszNjM5LDcgQEAKIAkJCW1zbGVlcCgxMDAwKTsKIAkJCXFsYTgyeHhfaWRjX2xvY2soaGEpOwogCQl9CisJCWxvb3Bjb3VudCsrOwogCX0KIGV4aXQ6CiAJcWxhODJ4eF9pZGNfdW5sb2NrKGhhKTsKQEAgLTM2MjEsNyArMzY1Nyw4IEBACiAJCWlmIChkZXZfc3RhdGUgPT0gUUxBODJYWF9ERVZfTkVFRF9SRVNFVCAmJgogCQkgICAgIXRlc3RfYml0KElTUF9BQk9SVF9ORUVERUQsICZ2aGEtPmRwY19mbGFncykpIHsKIAkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJCSAgICAiJXMoKTogQWRhcHRlciByZXNldCBuZWVkZWQhXG4iLCBfX2Z1bmNfXyk7CisJCQkgICAgInNjc2koJWxkKSAlczogQWRhcHRlciByZXNldCBuZWVkZWQhXG4iLAorCQkJCXZoYS0+aG9zdF9ubywgX19mdW5jX18pOwogCQkJc2V0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOwogCQkJcWxhMnh4eF93YWtlX2RwYyh2aGEpOwogCQl9IGVsc2UgaWYgKGRldl9zdGF0ZSA9PSBRTEE4MlhYX0RFVl9ORUVEX1FVSUVTQ0VOVCAmJgpAQCAtMzYzMiwxMCArMzY2OSwyNyBAQAogCQkJc2V0X2JpdChJU1BfUVVJRVNDRV9ORUVERUQsICZ2aGEtPmRwY19mbGFncyk7CiAJCQlxbGEyeHh4X3dha2VfZHBjKHZoYSk7CiAJCX0gZWxzZSB7Ci0JCQlxbGE4Mnh4X2NoZWNrX2Z3X2FsaXZlKHZoYSk7CiAJCQlpZiAocWxhODJ4eF9jaGVja19md19hbGl2ZSh2aGEpKSB7CiAJCQkJaGFsdF9zdGF0dXMgPSBxbGE4Mnh4X3JkXzMyKGhhLAogCQkJCSAgICBRTEE4MlhYX1BFR19IQUxUX1NUQVRVUzEpOworCQkJCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKKwkJCQkgICAgInNjc2koJWxkKTogJXMsIER1bXBpbmcgaHcvZncgcmVnaXN0ZXJzOlxuICIKKwkJCQkgICAgIiBQRUdfSEFMVF9TVEFUVVMxOiAweCV4LCBQRUdfSEFMVF9TVEFUVVMyOiAweCV4LFxuICIKKwkJCQkgICAgIiBQRUdfTkVUXzBfUEM6IDB4JXgsIFBFR19ORVRfMV9QQzogMHgleCxcbiAiCisJCQkJICAgICIgUEVHX05FVF8yX1BDOiAweCV4LCBQRUdfTkVUXzNfUEM6IDB4JXgsXG4gIgorCQkJCSAgICAiIFBFR19ORVRfNF9QQzogMHgleFxuIiwKKwkJCQkgICAgdmhhLT5ob3N0X25vLCBfX2Z1bmNfXywgaGFsdF9zdGF0dXMsCisJCQkJICAgIHFsYTgyeHhfcmRfMzIoaGEsIFFMQTgyWFhfUEVHX0hBTFRfU1RBVFVTMiksCisJCQkJICAgIHFsYTgyeHhfcmRfMzIoaGEsCisJCQkJCSAgICBRTEE4MlhYX0NSQl9QRUdfTkVUXzAgKyAweDNjKSwKKwkJCQkgICAgcWxhODJ4eF9yZF8zMihoYSwKKwkJCQkJICAgIFFMQTgyWFhfQ1JCX1BFR19ORVRfMSArIDB4M2MpLAorCQkJCSAgICBxbGE4Mnh4X3JkXzMyKGhhLAorCQkJCQkgICAgUUxBODJYWF9DUkJfUEVHX05FVF8yICsgMHgzYyksCisJCQkJICAgIHFsYTgyeHhfcmRfMzIoaGEsCisJCQkJCSAgICBRTEE4MlhYX0NSQl9QRUdfTkVUXzMgKyAweDNjKSwKKwkJCQkgICAgcWxhODJ4eF9yZF8zMihoYSwKKwkJCQkJICAgIFFMQTgyWFhfQ1JCX1BFR19ORVRfNCArIDB4M2MpKTsKIAkJCQlpZiAoaGFsdF9zdGF0dXMgJiBIQUxUX1NUQVRVU19VTlJFQ09WRVJBQkxFKSB7CiAJCQkJCXNldF9iaXQoSVNQX1VOUkVDT1ZFUkFCTEUsCiAJCQkJCSAgICAmdmhhLT5kcGNfZmxhZ3MpOwpAQCAtMzY1MSw4ICszNzA1LDkgQEAKIAkJCQlpZiAoaGEtPmZsYWdzLm1ib3hfYnVzeSkgewogCQkJCQloYS0+ZmxhZ3MubWJveF9pbnQgPSAxOwogCQkJCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0VSUiwgaGEsCi0JCQkJCSAgICAiRHVlIHRvIGZ3IGh1bmcsIGRvaW5nIHByZW1hdHVyZSAiCi0JCQkJCSAgICAiY29tcGxldGlvbiBvZiBtYnggY29tbWFuZFxuIikpOworCQkJCQkgICAgInNjc2koJWxkKSBEdWUgdG8gZncgaHVuZywgZG9pbmcgIgorCQkJCQkgICAgInByZW1hdHVyZSBjb21wbGV0aW9uIG9mIG1ieCAiCisJCQkJCSAgICAiY29tbWFuZFxuIiwgdmhhLT5ob3N0X25vKSk7CiAJCQkJCWlmICh0ZXN0X2JpdChNQlhfSU5UUl9XQUlULAogCQkJCQkgICAgJmhhLT5tYnhfY21kX2ZsYWdzKSkKIAkJCQkJCWNvbXBsZXRlKCZoYS0+bWJ4X2ludHJfY29tcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbnguaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ueC5oCmluZGV4IGVkNTg4M2YuLjhhMjE4MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ueC5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ueC5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMSBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCmluZGV4IGFhNzc0NzUuLmY0NjE5MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMSBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCkBAIC0xNjQsNiArMTY0LDIwIEBACiBNT0RVTEVfUEFSTV9ERVNDKHFsMnhhc3luY3RtZmVuYWJsZSwKIAkJIkVuYWJsZXMgaXNzdWUgb2YgVE0gSU9DQnMgYXN5bmNocm9ub3VzbHkgdmlhIElPQ0IgbWVjaGFuaXNtIgogCQkiRGVmYXVsdCBpcyAwIC0gSXNzdWUgVE0gSU9DQnMgdmlhIG1haWxib3ggbWVjaGFuaXNtLiIpOworCitpbnQgcWwyeGRvbnRyZXNldGhiYTsKK21vZHVsZV9wYXJhbShxbDJ4ZG9udHJlc2V0aGJhLCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhxbDJ4ZG9udHJlc2V0aGJhLAorCSJPcHRpb24gdG8gc3BlY2lmeSByZXNldCBiZWhhdmlvdXJcbiIKKwkiIDAgKERlZmF1bHQpIC0tIFJlc2V0IG9uIGZhaWx1cmUuXG4iCisJIiAxIC0tIERvIG5vdCByZXNldCBvbiBmYWlsdXJlLlxuIik7CisKK3VpbnQgcWwyeG1heGx1biA9IE1BWF9MVU5TOworbW9kdWxlX3BhcmFtKHFsMnhtYXhsdW4sIHVpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhxbDJ4bWF4bHVuLAorCQkiRGVmaW5lcyB0aGUgbWF4aW11bSBMVSBudW1iZXIgdG8gcmVnaXN0ZXIgd2l0aCB0aGUgU0NTSSAiCisJCSJtaWRsYXllci4gRGVmYXVsdCBpcyA2NTUzNS4iKTsKKwogLyoKICAqIFNDU0kgaG9zdCB0ZW1wbGF0ZSBlbnRyeSBwb2ludHMKICAqLwpAQCAtNTI4LDcgKzU0Miw3IEBACiBzdGF0aWMgaW50CiBxbGEyeHh4X3F1ZXVlY29tbWFuZChzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0LCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7Ci0Jc2NzaV9xbGFfaG9zdF90ICp2aGEgPSBzaG9zdF9wcml2KGNtZC0+ZGV2aWNlLT5ob3N0KTsKKwlzY3NpX3FsYV9ob3N0X3QgKnZoYSA9IHNob3N0X3ByaXYoaG9zdCk7CiAJZmNfcG9ydF90ICpmY3BvcnQgPSAoc3RydWN0IGZjX3BvcnQgKikgY21kLT5kZXZpY2UtPmhvc3RkYXRhOwogCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQgPSBzdGFyZ2V0X3RvX3Jwb3J0KHNjc2lfdGFyZ2V0KGNtZC0+ZGV2aWNlKSk7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CkBAIC0yMTI4LDcgKzIxNDIsNyBAQAogCWVsc2UKIAkJaG9zdC0+bWF4X2NtZF9sZW4gPSBNQVhfQ01EU1o7CiAJaG9zdC0+bWF4X2NoYW5uZWwgPSBNQVhfQlVTRVMgLSAxOwotCWhvc3QtPm1heF9sdW4gPSBNQVhfTFVOUzsKKwlob3N0LT5tYXhfbHVuID0gcWwyeG1heGx1bjsKIAlob3N0LT50cmFuc3BvcnR0ID0gcWxhMnh4eF90cmFuc3BvcnRfdGVtcGxhdGU7CiAJc2h0LT52ZW5kb3JfaWQgPSAoU0NTSV9OTF9WSURfVFlQRV9QQ0kgfCBQQ0lfVkVORE9SX0lEX1FMT0dJQyk7CiAKQEAgLTIzNjAsMjEgKzIzNzQsMjYgQEAKIAliYXNlX3ZoYSA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAloYSA9IGJhc2VfdmhhLT5odzsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZoYS0+dnBvcnRfc2xvY2ssIGZsYWdzKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZoYSwgJmhhLT52cF9saXN0LCBsaXN0KSB7Ci0JCWF0b21pY19pbmMoJnZoYS0+dnJlZl9jb3VudCk7CisJbXV0ZXhfbG9jaygmaGEtPnZwb3J0X2xvY2spOworCXdoaWxlIChoYS0+Y3VyX3Zwb3J0X2NvdW50KSB7CisJCXN0cnVjdCBTY3NpX0hvc3QgKnNjc2lfaG9zdDsKIAotCQlpZiAodmhhLT5mY192cG9ydCkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPnZwb3J0X3Nsb2NrLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZoYS0+dnBvcnRfc2xvY2ssIGZsYWdzKTsKIAotCQkJZmNfdnBvcnRfdGVybWluYXRlKHZoYS0+ZmNfdnBvcnQpOworCQlCVUdfT04oYmFzZV92aGEtPmxpc3QubmV4dCA9PSAmaGEtPnZwX2xpc3QpOworCQkvKiBUaGlzIGFzc3VtZXMgZmlyc3QgZW50cnkgaW4gaGEtPnZwX2xpc3QgaXMgYWx3YXlzIGJhc2UgdmhhICovCisJCXZoYSA9IGxpc3RfZmlyc3RfZW50cnkoJmJhc2VfdmhhLT5saXN0LCBzY3NpX3FsYV9ob3N0X3QsIGxpc3QpOworCQlzY3NpX2hvc3QgPSBzY3NpX2hvc3RfZ2V0KHZoYS0+aG9zdCk7CiAKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZoYS0+dnBvcnRfc2xvY2ssIGZsYWdzKTsKLQkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+dnBvcnRfc2xvY2ssIGZsYWdzKTsKKwkJbXV0ZXhfdW5sb2NrKCZoYS0+dnBvcnRfbG9jayk7CiAKLQkJYXRvbWljX2RlYygmdmhhLT52cmVmX2NvdW50KTsKKwkJZmNfdnBvcnRfdGVybWluYXRlKHZoYS0+ZmNfdnBvcnQpOworCQlzY3NpX2hvc3RfcHV0KHZoYS0+aG9zdCk7CisKKwkJbXV0ZXhfbG9jaygmaGEtPnZwb3J0X2xvY2spOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+dnBvcnRfc2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJmhhLT52cG9ydF9sb2NrKTsKIAogCXNldF9iaXQoVU5MT0FESU5HLCAmYmFzZV92aGEtPmRwY19mbGFncyk7CiAKQEAgLTI1NDQsNyArMjU2Myw3IEBACiB7CiAJaWYgKGF0b21pY19yZWFkKCZmY3BvcnQtPnN0YXRlKSA9PSBGQ1NfT05MSU5FICYmCiAJICAgIHZoYS0+dnBfaWR4ID09IGZjcG9ydC0+dnBfaWR4KSB7Ci0JCWF0b21pY19zZXQoJmZjcG9ydC0+c3RhdGUsIEZDU19ERVZJQ0VfTE9TVCk7CisJCXFsYTJ4MDBfc2V0X2ZjcG9ydF9zdGF0ZShmY3BvcnQsIEZDU19ERVZJQ0VfTE9TVCk7CiAJCXFsYTJ4MDBfc2NoZWR1bGVfcnBvcnRfZGVsKHZoYSwgZmNwb3J0LCBkZWZlcik7CiAJfQogCS8qCkBAIC0yNTUyLDcgKzI1NzEsNyBAQAogCSAqIHBvcnQgYnV0IGRvIHRoZSByZXRyaWVzLgogCSAqLwogCWlmIChhdG9taWNfcmVhZCgmZmNwb3J0LT5zdGF0ZSkgIT0gRkNTX0RFVklDRV9ERUFEKQotCQlhdG9taWNfc2V0KCZmY3BvcnQtPnN0YXRlLCBGQ1NfREVWSUNFX0xPU1QpOworCQlxbGEyeDAwX3NldF9mY3BvcnRfc3RhdGUoZmNwb3J0LCBGQ1NfREVWSUNFX0xPU1QpOwogCiAJaWYgKCFkb19sb2dpbikKIAkJcmV0dXJuOwpAQCAtMjYwNyw3ICsyNjI2LDcgQEAKIAkJaWYgKGF0b21pY19yZWFkKCZmY3BvcnQtPnN0YXRlKSA9PSBGQ1NfREVWSUNFX0RFQUQpCiAJCQljb250aW51ZTsKIAkJaWYgKGF0b21pY19yZWFkKCZmY3BvcnQtPnN0YXRlKSA9PSBGQ1NfT05MSU5FKSB7Ci0JCQlhdG9taWNfc2V0KCZmY3BvcnQtPnN0YXRlLCBGQ1NfREVWSUNFX0xPU1QpOworCQkJcWxhMngwMF9zZXRfZmNwb3J0X3N0YXRlKGZjcG9ydCwgRkNTX0RFVklDRV9MT1NUKTsKIAkJCWlmIChkZWZlcikKIAkJCQlxbGEyeDAwX3NjaGVkdWxlX3Jwb3J0X2RlbCh2aGEsIGZjcG9ydCwgZGVmZXIpOwogCQkJZWxzZSBpZiAodmhhLT52cF9pZHggPT0gZmNwb3J0LT52cF9pZHgpCkBAIC0zMjE0LDYgKzMyMzMsMTcgQEAKIAkJCQkJCQlmY3BvcnQtPmRfaWQuYi5hcmVhLAogCQkJCQkJCWZjcG9ydC0+ZF9pZC5iLmFsX3BhKTsKIAorCQkJCWlmIChmY3BvcnQtPmxvb3BfaWQgPT0gRkNfTk9fTE9PUF9JRCkgeworCQkJCQlmY3BvcnQtPmxvb3BfaWQgPSBuZXh0X2xvb3BpZCA9CisJCQkJCSAgICBoYS0+bWluX2V4dGVybmFsX2xvb3BpZDsKKwkJCQkJc3RhdHVzID0gcWxhMngwMF9maW5kX25ld19sb29wX2lkKAorCQkJCQkgICAgdmhhLCBmY3BvcnQpOworCQkJCQlpZiAoc3RhdHVzICE9IFFMQV9TVUNDRVNTKSB7CisJCQkJCQkvKiBSYW4gb3V0IG9mIElEcyB0byB1c2UgKi8KKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCiAJCQkJaWYgKElTX0FMT0dJT19DQVBBQkxFKGhhKSkgewogCQkJCQlmY3BvcnQtPmZsYWdzIHw9IEZDRl9BU1lOQ19TRU5UOwogCQkJCQlkYXRhWzBdID0gMDsKQEAgLTM2MDQsNyArMzYzNCw4IEBACiAJaWYgKCFwY2lfY2hhbm5lbF9vZmZsaW5lKGhhLT5wZGV2KSkKIAkJcGNpX3JlYWRfY29uZmlnX3dvcmQoaGEtPnBkZXYsIFBDSV9WRU5ET1JfSUQsICZ3KTsKIAotCWlmIChJU19RTEE4MlhYKGhhKSkgeworCS8qIE1ha2Ugc3VyZSBxbGE4Mnh4X3dhdGNoZG9nIGlzIHJ1biBvbmx5IGZvciBwaHlzaWNhbCBwb3J0ICovCisJaWYgKCF2aGEtPnZwX2lkeCAmJiBJU19RTEE4MlhYKGhhKSkgewogCQlpZiAodGVzdF9iaXQoSVNQX1FVSUVTQ0VfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpKQogCQkJc3RhcnRfZHBjKys7CiAJCXFsYTgyeHhfd2F0Y2hkb2codmhhKTsKQEAgLTM2MTIsNyArMzY0Myw4IEBACiAKIAkvKiBMb29wIGRvd24gaGFuZGxlci4gKi8KIAlpZiAoYXRvbWljX3JlYWQoJnZoYS0+bG9vcF9kb3duX3RpbWVyKSA+IDAgJiYKLQkgICAgISh0ZXN0X2JpdChBQk9SVF9JU1BfQUNUSVZFLCAmdmhhLT5kcGNfZmxhZ3MpKQorCSAgICAhKHRlc3RfYml0KEFCT1JUX0lTUF9BQ1RJVkUsICZ2aGEtPmRwY19mbGFncykpICYmCisJICAgICEodGVzdF9iaXQoRkNPRV9DVFhfUkVTRVRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpKQogCQkmJiB2aGEtPmZsYWdzLm9ubGluZSkgewogCiAJCWlmIChhdG9taWNfcmVhZCgmdmhhLT5sb29wX2Rvd25fdGltZXIpID09CkBAIC0zNjQ4LDcgKzM2ODAsMTEgQEAKIAkJCQkJaWYgKCEoc2ZjcC0+ZmxhZ3MgJiBGQ0ZfRkNQMl9ERVZJQ0UpKQogCQkJCQkJY29udGludWU7CiAKLQkJCQkJc2V0X2JpdChJU1BfQUJPUlRfTkVFREVELAorCQkJCQlpZiAoSVNfUUxBODJYWChoYSkpCisJCQkJCQlzZXRfYml0KEZDT0VfQ1RYX1JFU0VUX05FRURFRCwKKwkJCQkJCQkmdmhhLT5kcGNfZmxhZ3MpOworCQkJCQllbHNlCisJCQkJCQlzZXRfYml0KElTUF9BQk9SVF9ORUVERUQsCiAJCQkJCQkJJnZoYS0+ZHBjX2ZsYWdzKTsKIAkJCQkJYnJlYWs7CiAJCQkJfQpAQCAtMzY2Nyw3ICszNzAzLDEyIEBACiAJCQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAogCQkJCSAgICAiTG9vcCBkb3duIC0gYWJvcnRpbmcgSVNQLlxuIik7CiAKLQkJCQlzZXRfYml0KElTUF9BQk9SVF9ORUVERUQsICZ2aGEtPmRwY19mbGFncyk7CisJCQkJaWYgKElTX1FMQTgyWFgoaGEpKQorCQkJCQlzZXRfYml0KEZDT0VfQ1RYX1JFU0VUX05FRURFRCwKKwkJCQkJCSZ2aGEtPmRwY19mbGFncyk7CisJCQkJZWxzZQorCQkJCQlzZXRfYml0KElTUF9BQk9SVF9ORUVERUQsCisJCQkJCQkmdmhhLT5kcGNfZmxhZ3MpOwogCQkJfQogCQl9CiAJCURFQlVHMyhwcmludGsoInNjc2koJWxkKTogTG9vcCBEb3duIC0gc2Vjb25kcyByZW1haW5pbmcgJWRcbiIsCkBAIC0zNjc1LDggKzM3MTYsOCBAQAogCQkgICAgYXRvbWljX3JlYWQoJnZoYS0+bG9vcF9kb3duX3RpbWVyKSkpOwogCX0KIAotCS8qIENoZWNrIGlmIGJlYWNvbiBMRUQgbmVlZHMgdG8gYmUgYmxpbmtlZCAqLwotCWlmIChoYS0+YmVhY29uX2JsaW5rX2xlZCA9PSAxKSB7CisJLyogQ2hlY2sgaWYgYmVhY29uIExFRCBuZWVkcyB0byBiZSBibGlua2VkIGZvciBwaHlzaWNhbCBob3N0IG9ubHkgKi8KKwlpZiAoIXZoYS0+dnBfaWR4ICYmIChoYS0+YmVhY29uX2JsaW5rX2xlZCA9PSAxKSkgewogCQlzZXRfYml0KEJFQUNPTl9CTElOS19ORUVERUQsICZ2aGEtPmRwY19mbGFncyk7CiAJCXN0YXJ0X2RwYysrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9zZXR0aW5ncy5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3NldHRpbmdzLmgKaW5kZXggZjBiMmI5OS4uZDcwZjAzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3NldHRpbmdzLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3NldHRpbmdzLmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogUUxvZ2ljIEZpYnJlIENoYW5uZWwgSEJBIERyaXZlcgotICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDEwIFFMb2dpYyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDExIFFMb2dpYyBDb3Jwb3JhdGlvbgogICoKICAqIFNlZSBMSUNFTlNFLnFsYTJ4eHggZm9yIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGRldGFpbHMuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9zdXAuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9zdXAuYwppbmRleCAyMjA3MDYyLi42OTM2NDc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfc3VwLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3N1cC5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMSBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3ZlcnNpb24uaAppbmRleCAzYTI2MGMzLi4wNjJjOTdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV92ZXJzaW9uLmgKQEAgLTEsMTUgKzEsMTUgQEAKIC8qCiAgKiBRTG9naWMgRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTAgUUxvZ2ljIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTEgUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgogICogU2VlIExJQ0VOU0UucWxhMnh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwogLyoKICAqIERyaXZlciB2ZXJzaW9uCiAgKi8KLSNkZWZpbmUgUUxBMlhYWF9WRVJTSU9OICAgICAgIjguMDMuMDcuMDAiCisjZGVmaW5lIFFMQTJYWFhfVkVSU0lPTiAgICAgICI4LjAzLjA3LjAzLWsiCiAKICNkZWZpbmUgUUxBX0RSSVZFUl9NQUpPUl9WRVIJOAogI2RlZmluZSBRTEFfRFJJVkVSX01JTk9SX1ZFUgkzCiAjZGVmaW5lIFFMQV9EUklWRVJfUEFUQ0hfVkVSCTcKLSNkZWZpbmUgUUxBX0RSSVZFUl9CRVRBX1ZFUgkwCisjZGVmaW5lIFFMQV9EUklWRVJfQkVUQV9WRVIJMwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X21ieC5jIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X21ieC5jCmluZGV4IGY5ZDgxYzguLmQ3OGI1OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9tYnguYworKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfbWJ4LmMKQEAgLTE5LDcgKzE5LDcgQEAKICAqIEBtYnhfY21kOiBkYXRhIHBvaW50ZXIgZm9yIG1haWxib3ggaW4gcmVnaXN0ZXJzLgogICogQG1ieF9zdHM6IGRhdGEgcG9pbnRlciBmb3IgbWFpbGJveCBvdXQgcmVnaXN0ZXJzLgogICoKLSAqIFRoaXMgcm91dGluZSBpc3NzdWUgbWFpbGJveCBjb21tYW5kcyBhbmQgd2FpdHMgZm9yIGNvbXBsZXRpb24uCisgKiBUaGlzIHJvdXRpbmUgaXNzdWUgbWFpbGJveCBjb21tYW5kcyBhbmQgd2FpdHMgZm9yIGNvbXBsZXRpb24uCiAgKiBJZiBvdXRDb3VudCBpcyAwLCB0aGlzIHJvdXRpbmUgY29tcGxldGVzIHN1Y2Nlc3NmdWxseSBXSVRIT1VUIHdhaXRpbmcKICAqIGZvciB0aGUgbWFpbGJveCBjb21tYW5kIHRvIGNvbXBsZXRlLgogICoqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X29zLmMgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYwppbmRleCAyMzBiYTA5Li5jMjJmMmE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYwpAQCAtMjA2OCwxNSArMjA2OCwxNCBAQAogCXN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSA9IHRvX3FsYV9ob3N0KGNtZC0+ZGV2aWNlLT5ob3N0KTsKIAl1bnNpZ25lZCBpbnQgaWQgPSBjbWQtPmRldmljZS0+aWQ7CiAJdW5zaWduZWQgaW50IGx1biA9IGNtZC0+ZGV2aWNlLT5sdW47Ci0JdW5zaWduZWQgbG9uZyBzZXJpYWwgPSBjbWQtPnNlcmlhbF9udW1iZXI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qgc3JiICpzcmIgPSBOVUxMOwogCWludCByZXQgPSBTVUNDRVNTOwogCWludCB3YWl0ID0gMDsKIAogCXFsNF9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkgICAgInNjc2klbGQ6JWQ6JWQ6IEFib3J0IGNvbW1hbmQgaXNzdWVkIGNtZD0lcCwgcGlkPSVsZFxuIiwKLQkgICAgaGEtPmhvc3Rfbm8sIGlkLCBsdW4sIGNtZCwgc2VyaWFsKTsKKwkgICAgInNjc2klbGQ6JWQ6JWQ6IEFib3J0IGNvbW1hbmQgaXNzdWVkIGNtZD0lcFxuIiwKKwkgICAgaGEtPmhvc3Rfbm8sIGlkLCBsdW4sIGNtZCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKIAlzcmIgPSAoc3RydWN0IHNyYiAqKSBDTURfU1AoY21kKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCmluZGV4IDYzM2MyMzkuLmFiZWEyY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYwpAQCAtMzIxLDYgKzMyMSwxMiBAQAogCQkJCSAgICAiY2hhbmdlZC4gVGhlIExpbnV4IFNDU0kgbGF5ZXIgZG9lcyBub3QgIgogCQkJCSAgICAiYXV0b21hdGljYWxseSBhZGp1c3QgdGhlc2UgcGFyYW1ldGVycy5cbiIpOwogCisJCWlmIChzc2hkci5hc2MgPT0gMHgzOCAmJiBzc2hkci5hc2NxID09IDB4MDcpCisJCQlzY21kX3ByaW50ayhLRVJOX1dBUk5JTkcsIHNjbWQsCisJCQkJICAgICJXYXJuaW5nISBSZWNlaXZlZCBhbiBpbmRpY2F0aW9uIHRoYXQgdGhlICIKKwkJCQkgICAgIkxVTiByZWFjaGVkIGEgdGhpbiBwcm92aXNpb25pbmcgc29mdCAiCisJCQkJICAgICJ0aHJlc2hvbGQuXG4iKTsKKwogCQkvKgogCQkgKiBQYXNzIHRoZSBVQSB1cHdhcmRzIGZvciBhIGRldGVybWluYXRpb24gaW4gdGhlIGNvbXBsZXRpb24KIAkJICogZnVuY3Rpb25zLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfcHJvYy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfcHJvYy5jCmluZGV4IGM5OWRhOTIuLmY0Njg1NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3Byb2MuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9wcm9jLmMKQEAgLTM4NiwxMyArMzg2LDU5IEBACiAgKiBAczogb3V0cHV0IGdvZXMgaGVyZQogICogQHA6IG5vdCB1c2VkCiAgKi8KLXN0YXRpYyBpbnQgcHJvY19zY3NpX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpwKQorc3RhdGljIGludCBhbHdheXNfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewotCXNlcV9wcmludGYocywgIkF0dGFjaGVkIGRldmljZXM6XG4iKTsKLQlidXNfZm9yX2VhY2hfZGV2KCZzY3NpX2J1c190eXBlLCBOVUxMLCBzLCBwcm9jX3ByaW50X3Njc2lkZXZpY2UpOwotCXJldHVybiAwOworCXJldHVybiAxOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2UgKm5leHRfc2NzaV9kZXZpY2Uoc3RydWN0IGRldmljZSAqc3RhcnQpCit7CisJc3RydWN0IGRldmljZSAqbmV4dCA9IGJ1c19maW5kX2RldmljZSgmc2NzaV9idXNfdHlwZSwgc3RhcnQsIE5VTEwsCisJCQkJCSAgICAgIGFsd2F5c19tYXRjaCk7CisJcHV0X2RldmljZShzdGFydCk7CisJcmV0dXJuIG5leHQ7Cit9CisKK3N0YXRpYyB2b2lkICpzY3NpX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmaWxlLCBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBOVUxMOworCWxvZmZfdCBuID0gKnBvczsKKworCXdoaWxlICgoZGV2ID0gbmV4dF9zY3NpX2RldmljZShkZXYpKSkgeworCQlpZiAoIW4tLSkKKwkJCWJyZWFrOworCQlzZmlsZS0+cHJpdmF0ZSsrOworCX0KKwlyZXR1cm4gZGV2OworfQorCitzdGF0aWMgdm9pZCAqc2NzaV9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmaWxlLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwkoKnBvcykrKzsKKwlzZmlsZS0+cHJpdmF0ZSsrOworCXJldHVybiBuZXh0X3Njc2lfZGV2aWNlKHYpOworfQorCitzdGF0aWMgdm9pZCBzY3NpX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2ZpbGUsIHZvaWQgKnYpCit7CisJcHV0X2RldmljZSh2KTsKK30KKworc3RhdGljIGludCBzY3NpX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2ZpbGUsIHZvaWQgKmRldikKK3sKKwlpZiAoIXNmaWxlLT5wcml2YXRlKQorCQlzZXFfcHV0cyhzZmlsZSwgIkF0dGFjaGVkIGRldmljZXM6XG4iKTsKKworCXJldHVybiBwcm9jX3ByaW50X3Njc2lkZXZpY2UoZGV2LCBzZmlsZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2NzaV9zZXFfb3BzID0geworCS5zdGFydAk9IHNjc2lfc2VxX3N0YXJ0LAorCS5uZXh0CT0gc2NzaV9zZXFfbmV4dCwKKwkuc3RvcAk9IHNjc2lfc2VxX3N0b3AsCisJLnNob3cJPSBzY3NpX3NlcV9zaG93Cit9OworCiAvKioKICAqIHByb2Nfc2NzaV9vcGVuIC0gZ2x1ZSBmdW5jdGlvbgogICogQGlub2RlOiBub3QgdXNlZApAQCAtNDA2LDcgKzQ1Miw3IEBACiAJICogV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcyBmb3IgdGhlIHdyaXRlIGNhc2UgYnV0IGl0IGRvZXNuJ3QKIAkgKiBoYXJtIGVpdGhlci4KIAkgKi8KLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcHJvY19zY3NpX3Nob3csIE5VTEwpOworCXJldHVybiBzZXFfb3BlbihmaWxlLCAmc2NzaV9zZXFfb3BzKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19zY3NpX29wZXJhdGlvbnMgPSB7CkBAIC00MTUsNyArNDYxLDcgQEAKIAkucmVhZAkJPSBzZXFfcmVhZCwKIAkud3JpdGUJCT0gcHJvY19zY3NpX3dyaXRlLAogCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdGd0X2xpYi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdGd0X2xpYi5jCmluZGV4IDhiY2E4YzIuLjg0YTFmZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RndF9saWIuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90Z3RfbGliLmMKQEAgLTI3NSwxMCArMjc1LDggQEAKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHFkYXRhLT5jbWRfaGFzaCk7IGkrKykgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGNtZCwgbiwgJnFkYXRhLT5jbWRfaGFzaFtpXSwKLQkJCQkJIGhhc2hfbGlzdCkgewotCQkJbGlzdF9kZWwoJnRjbWQtPmhhc2hfbGlzdCk7Ci0JCQlsaXN0X2FkZCgmdGNtZC0+aGFzaF9saXN0LCAmY21kcyk7Ci0JCX0KKwkJCQkJIGhhc2hfbGlzdCkKKwkJCWxpc3RfbW92ZSgmdGNtZC0+aGFzaF9saXN0LCAmY21kcyk7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcWRhdGEtPmNtZF9oYXNoX2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKaW5kZXggODE1MDY5ZC4uMWIyMTQ5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKQEAgLTQyMiw4ICs0MjIsNyBAQAogCiAJc25wcmludGYoZmNfaG9zdC0+d29ya19xX25hbWUsIHNpemVvZihmY19ob3N0LT53b3JrX3FfbmFtZSksCiAJCSAiZmNfd3FfJWQiLCBzaG9zdC0+aG9zdF9ubyk7Ci0JZmNfaG9zdC0+d29ya19xID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoCi0JCQkJCWZjX2hvc3QtPndvcmtfcV9uYW1lKTsKKwlmY19ob3N0LT53b3JrX3EgPSBhbGxvY193b3JrcXVldWUoZmNfaG9zdC0+d29ya19xX25hbWUsIDAsIDApOwogCWlmICghZmNfaG9zdC0+d29ya19xKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtNDMxLDggKzQzMCw4IEBACiAJc25wcmludGYoZmNfaG9zdC0+ZGV2bG9zc193b3JrX3FfbmFtZSwKIAkJIHNpemVvZihmY19ob3N0LT5kZXZsb3NzX3dvcmtfcV9uYW1lKSwKIAkJICJmY19kbF8lZCIsIHNob3N0LT5ob3N0X25vKTsKLQlmY19ob3N0LT5kZXZsb3NzX3dvcmtfcSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKAotCQkJCQlmY19ob3N0LT5kZXZsb3NzX3dvcmtfcV9uYW1lKTsKKwlmY19ob3N0LT5kZXZsb3NzX3dvcmtfcSA9CisJCQlhbGxvY193b3JrcXVldWUoZmNfaG9zdC0+ZGV2bG9zc193b3JrX3FfbmFtZSwgMCwgMCk7CiAJaWYgKCFmY19ob3N0LT5kZXZsb3NzX3dvcmtfcSkgewogCQlkZXN0cm95X3dvcmtxdWV1ZShmY19ob3N0LT53b3JrX3EpOwogCQlmY19ob3N0LT53b3JrX3EgPSBOVUxMOwpAQCAtMjQ4OSw2ICsyNDg4LDggQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBkb19jYWxsYmFjayA9IDA7CiAKKwlmY190ZXJtaW5hdGVfcnBvcnRfaW8ocnBvcnQpOworCiAJLyoKIAkgKiBpZiBhIHNjYW4gaXMgcGVuZGluZywgZmx1c2ggdGhlIFNDU0kgSG9zdCB3b3JrX3Egc28gdGhhdAogCSAqIHRoYXQgd2UgY2FuIHJlY2xhaW0gdGhlIHJwb3J0IHNjYW4gd29yayBlbGVtZW50LgpAQCAtMjQ5Niw4ICsyNDk3LDYgQEAKIAlpZiAocnBvcnQtPmZsYWdzICYgRkNfUlBPUlRfU0NBTl9QRU5ESU5HKQogCQlzY3NpX2ZsdXNoX3dvcmsoc2hvc3QpOwogCi0JZmNfdGVybWluYXRlX3Jwb3J0X2lvKHJwb3J0KTsKLQogCS8qCiAJICogQ2FuY2VsIGFueSBvdXRzdGFuZGluZyB0aW1lcnMuIFRoZXNlIHNob3VsZCByZWFsbHkgZXhpc3QKIAkgKiBvbmx5IHdoZW4gcm1tb2QnaW5nIHRoZSBMTEREIGFuZCB3ZSdyZSBhc2tpbmcgZm9yCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2dpd2Q5My5jIGIvZHJpdmVycy9zY3NpL3NnaXdkOTMuYwppbmRleCBmZWYwZTNjLi4zYTlkODVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2dpd2Q5My5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZ2l3ZDkzLmMKQEAgLTMsNyArMyw3IEBACiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRtQGVuZ3Iuc2dpLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgQW5kcmV3IFIuIEJha2VyIChhbmRyZXdiQHVhYi5lZHUpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgRmxvcmlhbiBMb2hvZmYgKGZsb0ByZmM4MjIub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDAzLCAwNyBSYWxmIEJhZWNobGUgKHJhbGZAbGludXgtbWlwcy5vcmcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvdG1zY3NpbS5jIGIvZHJpdmVycy9zY3NpL3Rtc2NzaW0uYwppbmRleCBhMTI0YTI4Zi4uYTFiYWNjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Rtc2NzaW0uYworKysgYi9kcml2ZXJzL3Njc2kvdG1zY3NpbS5jCkBAIC01NjUsMTIgKzU2NSwxMiBAQAogCXBEQ0ItPlRhZ01hc2sgfD0gMSA8PCB0YWdbMV07CiAJcFNSQi0+VGFnTnVtYmVyID0gdGFnWzFdOwogCURDMzkwX3dyaXRlOChTY3NpRmlmbywgdGFnWzFdKTsKLQlERUJVRzEocHJpbnRrKEtFUk5fSU5GTyAiREMzOTA6IFNlbGVjdCB3L0Rpc0NuIGZvciBDbWQgJWxpIChTUkIgJXApLCBibG9jayB0YWcgJTAyeFxuIiwgc2NtZC0+c2VyaWFsX251bWJlciwgcFNSQiwgdGFnWzFdKSk7CisJREVCVUcxKHByaW50ayhLRVJOX0lORk8gIkRDMzkwOiBTZWxlY3Qgdy9EaXNDbiBmb3IgU1JCICVwLCBibG9jayB0YWcgJTAyeFxuIiwgcFNSQiwgdGFnWzFdKSk7CiAJY21kID0gU0VMX1dfQVROMzsKICAgICB9IGVsc2UgewogCS8qIE5vIFRhZ1EgKi8KIC8vbm9fdGFnOgotCURFQlVHMShwcmludGsoS0VSTl9JTkZPICJEQzM5MDogU2VsZWN0IHclcy9EaXNDbiBmb3IgQ21kICVsaSAoU1JCICVwKSwgTm8gVGFnUVxuIiwgZGlzY19hbGxvd2VkID8gIiIgOiAibyIsIHNjbWQtPnNlcmlhbF9udW1iZXIsIHBTUkIpKTsKKwlERUJVRzEocHJpbnRrKEtFUk5fSU5GTyAiREMzOTA6IFNlbGVjdCB3JXMvRGlzQ24gZm9yIFNSQiAlcCwgTm8gVGFnUVxuIiwgZGlzY19hbGxvd2VkID8gIiIgOiAibyIsIHBTUkIpKTsKICAgICB9CiAKICAgICBwU1JCLT5TUkJTdGF0ZSA9IFNSQl9TVEFSVF87CkBAIC02MjAsOCArNjIwLDggQEAKICAgICBpZiAoREMzOTBfcmVhZDggKFNjc2lfU3RhdHVzKSAmIElOVEVSUlVQVCkKICAgICB7CiAJZGMzOTBfZnJlZXRhZyAocERDQiwgcFNSQik7Ci0JREVCVUcwKHByaW50ayAoIkRDMzkwOiBJbnRlcnJ1cHQgZHVyaW5nIFN0YXJ0IFNDU0kgKHBpZCAlbGksIHRhcmdldCAlMDJpLSUwMmkpXG4iLAotCQlzY21kLT5zZXJpYWxfbnVtYmVyLCBzY21kLT5kZXZpY2UtPmlkLCBzY21kLT5kZXZpY2UtPmx1bikpOworCURFQlVHMChwcmludGsgKCJEQzM5MDogSW50ZXJydXB0IGR1cmluZyBTdGFydCBTQ1NJICh0YXJnZXQgJTAyaS0lMDJpKVxuIiwKKwkJc2NtZC0+ZGV2aWNlLT5pZCwgc2NtZC0+ZGV2aWNlLT5sdW4pKTsKIAlwU1JCLT5TUkJTdGF0ZSA9IFNSQl9SRUFEWTsKIAkvL0RDMzkwX3dyaXRlOCAoU2NzaUNtZCwgQ0xFQVJfRklGT19DTUQpOwogCXBBQ0ItPlNlbExvc3QrKzsKQEAgLTE3MDUsOCArMTcwNSw3IEBACiAKICAgICBzdGF0dXMgPSBwU1JCLT5UYXJnZXRTdGF0dXM7CiAKLSAgICBERUJVRzAocHJpbnRrICgiIFNSQmRvbmUgKCUwMngsJTA4eCksIFNSQiAlcCwgcGlkICVsaVxuIiwgc3RhdHVzLCBwY21kLT5yZXN1bHQsXAotCQlwU1JCLCBwY21kLT5zZXJpYWxfbnVtYmVyKSk7CisgICAgREVCVUcwKHByaW50ayAoIiBTUkJkb25lICglMDJ4LCUwOHgpLCBTUkIgJXBcbiIsIHN0YXR1cywgcGNtZC0+cmVzdWx0LCBwU1JCKSk7CiAgICAgaWYocFNSQi0+U1JCRmxhZyAmIEFVVE9fUkVRU0VOU0UpCiAgICAgewkvKiBMYXN0IGNvbW1hbmQgd2FzIGEgUmVxdWVzdCBTZW5zZSAqLwogCXBTUkItPlNSQkZsYWcgJj0gfkFVVE9fUkVRU0VOU0U7CkBAIC0xNzI3LDcgKzE3MjYsNyBAQAogCSAgICB9IGVsc2UgewogCQlTRVRfUkVTX0RSVihwY21kLT5yZXN1bHQsIERSSVZFUl9TRU5TRSk7CiAJCS8vcFNSQi0+U2NzaUNtZExlbgkgPSAodTgpIChwU1JCLT5TZWdtZW50MVswXSA+PiA4KTsKLQkJREVCVUcwIChwcmludGsgKCJEQzM5MDogUkVUUlkgcGlkICVsaSAoJTAyeCksIHRhcmdldCAlMDJpLSUwMmlcbiIsIHBjbWQtPnNlcmlhbF9udW1iZXIsIHBjbWQtPmNtbmRbMF0sIHBjbWQtPmRldmljZS0+aWQsIHBjbWQtPmRldmljZS0+bHVuKSk7CisJCURFQlVHMCAocHJpbnRrICgiREMzOTA6IFJFVFJZICglMDJ4KSwgdGFyZ2V0ICUwMmktJTAyaVxuIiwgcGNtZC0+Y21uZFswXSwgcGNtZC0+ZGV2aWNlLT5pZCwgcGNtZC0+ZGV2aWNlLT5sdW4pKTsKIAkJcFNSQi0+VG90YWxYZmVycmVkTGVuID0gMDsKIAkJU0VUX1JFU19ESUQocGNtZC0+cmVzdWx0LCBESURfU09GVF9FUlJPUik7CiAJICAgIH0KQEAgLTE3NDcsNyArMTc0Niw3IEBACiAJZWxzZSBpZiAoc3RhdHVzID09IFNBTV9TVEFUX1RBU0tfU0VUX0ZVTEwpCiAJewogCSAgICBzY3NpX3RyYWNrX3F1ZXVlX2Z1bGwocGNtZC0+ZGV2aWNlLCBwRENCLT5Hb2luZ1NSQkNudCAtIDEpOwotCSAgICBERUJVRzAgKHByaW50ayAoIkRDMzkwOiBSRVRSWSBwaWQgJWxpICglMDJ4KSwgdGFyZ2V0ICUwMmktJTAyaVxuIiwgcGNtZC0+c2VyaWFsX251bWJlciwgcGNtZC0+Y21uZFswXSwgcGNtZC0+ZGV2aWNlLT5pZCwgcGNtZC0+ZGV2aWNlLT5sdW4pKTsKKwkgICAgREVCVUcwIChwcmludGsgKCJEQzM5MDogUkVUUlkgKCUwMngpLCB0YXJnZXQgJTAyaS0lMDJpXG4iLCBwY21kLT5jbW5kWzBdLCBwY21kLT5kZXZpY2UtPmlkLCBwY21kLT5kZXZpY2UtPmx1bikpOwogCSAgICBwU1JCLT5Ub3RhbFhmZXJyZWRMZW4gPSAwOwogCSAgICBTRVRfUkVTX0RJRChwY21kLT5yZXN1bHQsIERJRF9TT0ZUX0VSUk9SKTsKIAl9CkBAIC0xODAxLDcgKzE4MDAsNyBAQAogICAgIC8qIEFkZCB0byBmcmVlIGxpc3QgKi8KICAgICBkYzM5MF9GcmVlX2luc2VydCAocEFDQiwgcFNSQik7CiAKLSAgICBERUJVRzAocHJpbnRrIChLRVJOX0RFQlVHICJEQzM5MDogU1JCZG9uZTogZG9uZSBwaWQgJWxpXG4iLCBwY21kLT5zZXJpYWxfbnVtYmVyKSk7CisgICAgREVCVUcwKHByaW50ayAoS0VSTl9ERUJVRyAiREMzOTA6IFNSQmRvbmU6IGRvbmVcbiIpKTsKICAgICBwY21kLT5zY3NpX2RvbmUgKHBjbWQpOwogCiAgICAgcmV0dXJuOwpAQCAtMTk5Nyw4ICsxOTk2LDcgQEAKIAlzdHJ1Y3QgZGMzOTBfYWNiICpwQUNCID0gKHN0cnVjdCBkYzM5MF9hY2IqKSBjbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7CiAJc3RydWN0IGRjMzkwX2RjYiAqcERDQiA9IChzdHJ1Y3QgZGMzOTBfZGNiKikgY21kLT5kZXZpY2UtPmhvc3RkYXRhOwogCi0Jc2NtZF9wcmludGsoS0VSTl9XQVJOSU5HLCBjbWQsCi0JCSJEQzM5MDogQWJvcnQgY29tbWFuZCAocGlkICVsaSlcbiIsIGNtZC0+c2VyaWFsX251bWJlcik7CisJc2NtZF9wcmludGsoS0VSTl9XQVJOSU5HLCBjbWQsICJEQzM5MDogQWJvcnQgY29tbWFuZFxuIik7CiAKIAkvKiBhYm9ydCgpIGlzIHRvbyBzdHVwaWQgZm9yIGFscmVhZHkgc2VudCBjb21tYW5kcyBhdCB0aGUgbW9tZW50LiAKIAkgKiBJZiBpdCdzIGNhbGxlZCB3ZSBhcmUgaW4gdHJvdWJsZSBhbnl3YXksIHNvIGxldCdzIGR1bXAgc29tZSBpbmZvIApAQCAtMjAwNiw3ICsyMDA0LDcgQEAKIAlkYzM5MF9kdW1waW5mbyhwQUNCLCBwRENCLCBOVUxMKTsKIAogCXBEQ0ItPkRDQkZsYWcgfD0gQUJPUlRfREVWXzsKLQlwcmludGsoS0VSTl9JTkZPICJEQzM5MDogQWJvcnRlZCBwaWQgJWxpXG4iLCBjbWQtPnNlcmlhbF9udW1iZXIpOworCXByaW50ayhLRVJOX0lORk8gIkRDMzkwOiBBYm9ydGVkLlxuIik7CiAKIAlyZXR1cm4gRkFJTEVEOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3UxNC0zNGYuYyBiL2RyaXZlcnMvc2NzaS91MTQtMzRmLmMKaW5kZXggZWRmYzVkYS4uOTBlMTA0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3UxNC0zNGYuYworKysgYi9kcml2ZXJzL3Njc2kvdTE0LTM0Zi5jCkBAIC0xMjU2LDggKzEyNTYsOCBAQAogICAgaiA9ICgoc3RydWN0IGhvc3RkYXRhICopIFNDcG50LT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhKS0+Ym9hcmRfbnVtYmVyOwogCiAgICBpZiAoU0NwbnQtPmhvc3Rfc2NyaWJibGUpCi0gICAgICBwYW5pYygiJXM6IHFjb21tLCBwaWQgJWxkLCBTQ3BudCAlcCBhbHJlYWR5IGFjdGl2ZS5cbiIsCi0gICAgICAgICAgICBCTihqKSwgU0NwbnQtPnNlcmlhbF9udW1iZXIsIFNDcG50KTsKKyAgICAgIHBhbmljKCIlczogcWNvbW0sIFNDcG50ICVwIGFscmVhZHkgYWN0aXZlLlxuIiwKKyAgICAgICAgICAgIEJOKGopLCBTQ3BudCk7CiAKICAgIC8qIGkgaXMgdGhlIG1haWxib3ggbnVtYmVyLCBsb29rIGZvciB0aGUgZmlyc3QgZnJlZSBtYWlsYm94CiAgICAgICBzdGFydGluZyBmcm9tIGxhc3RfY3BfdXNlZCAqLwpAQCAtMTI4Niw5ICsxMjg2LDkgQEAKICAgIGNwcC0+Y3BwX2luZGV4ID0gaTsKICAgIFNDcG50LT5ob3N0X3NjcmliYmxlID0gKHVuc2lnbmVkIGNoYXIgKikgJmNwcC0+Y3BwX2luZGV4OwogCi0gICBpZiAoZG9fdHJhY2UpIHByaW50aygiJXM6IHFjb21tLCBtYm94ICVkLCB0YXJnZXQgJWQuJWQ6JWQsIHBpZCAlbGQuXG4iLAorICAgaWYgKGRvX3RyYWNlKSBwcmludGsoIiVzOiBxY29tbSwgbWJveCAlZCwgdGFyZ2V0ICVkLiVkOiVkLlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIEJOKGopLCBpLCBTQ3BudC0+ZGV2aWNlLT5jaGFubmVsLCBTQ3BudC0+ZGV2aWNlLT5pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNDcG50LT5kZXZpY2UtPmx1biwgU0NwbnQtPnNlcmlhbF9udW1iZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgU0NwbnQtPmRldmljZS0+bHVuKTsKIAogICAgY3BwLT5vcGNvZGUgPSBPUF9TQ1NJOwogICAgY3BwLT5jaGFubmVsID0gU0NwbnQtPmRldmljZS0+Y2hhbm5lbDsKQEAgLTEzMTUsNyArMTMxNSw3IEBACiAgICAgICB1bm1hcF9kbWEoaSwgaik7CiAgICAgICBTQ3BudC0+aG9zdF9zY3JpYmJsZSA9IE5VTEw7CiAgICAgICBzY21kX3ByaW50ayhLRVJOX0lORk8sIFNDcG50LAotICAgICAgCQkicWNvbW0sIHBpZCAlbGQsIGFkYXB0ZXIgYnVzeS5cbiIsIFNDcG50LT5zZXJpYWxfbnVtYmVyKTsKKyAgICAgIAkJInFjb21tLCBhZGFwdGVyIGJ1c3kuXG4iKTsKICAgICAgIHJldHVybiAxOwogICAgICAgfQogCkBAIC0xMzM3LDE0ICsxMzM3LDEyIEBACiAgICBqID0gKChzdHJ1Y3QgaG9zdGRhdGEgKikgU0NhcmctPmRldmljZS0+aG9zdC0+aG9zdGRhdGEpLT5ib2FyZF9udW1iZXI7CiAKICAgIGlmIChTQ2FyZy0+aG9zdF9zY3JpYmJsZSA9PSBOVUxMKSB7Ci0gICAgICBzY21kX3ByaW50ayhLRVJOX0lORk8sIFNDYXJnLCAiYWJvcnQsIHBpZCAlbGQgaW5hY3RpdmUuXG4iLAotICAgICAgICAgICAgIFNDYXJnLT5zZXJpYWxfbnVtYmVyKTsKKyAgICAgIHNjbWRfcHJpbnRrKEtFUk5fSU5GTywgU0NhcmcsICJhYm9ydCwgY29tbWFuZCBpbmFjdGl2ZS5cbiIpOwogICAgICAgcmV0dXJuIFNVQ0NFU1M7CiAgICAgICB9CiAKICAgIGkgPSAqKHVuc2lnbmVkIGludCAqKVNDYXJnLT5ob3N0X3NjcmliYmxlOwotICAgc2NtZF9wcmludGsoS0VSTl9JTkZPLCBTQ2FyZywgImFib3J0LCBtYm94ICVkLCBwaWQgJWxkLlxuIiwKLQkgICAgICAgaSwgU0NhcmctPnNlcmlhbF9udW1iZXIpOworICAgc2NtZF9wcmludGsoS0VSTl9JTkZPLCBTQ2FyZywgImFib3J0LCBtYm94ICVkLlxuIiwgaSk7CiAKICAgIGlmIChpID49IHNoW2pdLT5jYW5fcXVldWUpCiAgICAgICBwYW5pYygiJXM6IGFib3J0LCBpbnZhbGlkIFNDYXJnLT5ob3N0X3NjcmliYmxlLlxuIiwgQk4oaikpOwpAQCAtMTM4Nyw4ICsxMzg1LDcgQEAKICAgICAgIFNDYXJnLT5yZXN1bHQgPSBESURfQUJPUlQgPDwgMTY7CiAgICAgICBTQ2FyZy0+aG9zdF9zY3JpYmJsZSA9IE5VTEw7CiAgICAgICBIRChqKS0+Y3Bfc3RhdFtpXSA9IEZSRUU7Ci0gICAgICBwcmludGsoIiVzLCBhYm9ydCwgbWJveCAlZCByZWFkeSwgRElEX0FCT1JULCBwaWQgJWxkIGRvbmUuXG4iLAotICAgICAgICAgICAgIEJOKGopLCBpLCBTQ2FyZy0+c2VyaWFsX251bWJlcik7CisgICAgICBwcmludGsoIiVzLCBhYm9ydCwgbWJveCAlZCByZWFkeSwgRElEX0FCT1JULCBkb25lLlxuIiwgQk4oaiksIGkpOwogICAgICAgU0NhcmctPnNjc2lfZG9uZShTQ2FyZyk7CiAgICAgICByZXR1cm4gU1VDQ0VTUzsKICAgICAgIH0KQEAgLTE0MDMsMTIgKzE0MDAsMTIgQEAKICAgIHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50OwogCiAgICBqID0gKChzdHJ1Y3QgaG9zdGRhdGEgKikgU0NhcmctPmRldmljZS0+aG9zdC0+aG9zdGRhdGEpLT5ib2FyZF9udW1iZXI7Ci0gICBzY21kX3ByaW50ayhLRVJOX0lORk8sIFNDYXJnLCAicmVzZXQsIGVudGVyLCBwaWQgJWxkLlxuIiwgU0NhcmctPnNlcmlhbF9udW1iZXIpOworICAgc2NtZF9wcmludGsoS0VSTl9JTkZPLCBTQ2FyZywgInJlc2V0LCBlbnRlci5cbiIpOwogCiAgICBzcGluX2xvY2tfaXJxKHNoW2pdLT5ob3N0X2xvY2spOwogCiAgICBpZiAoU0NhcmctPmhvc3Rfc2NyaWJibGUgPT0gTlVMTCkKLSAgICAgIHByaW50aygiJXM6IHJlc2V0LCBwaWQgJWxkIGluYWN0aXZlLlxuIiwgQk4oaiksIFNDYXJnLT5zZXJpYWxfbnVtYmVyKTsKKyAgICAgIHByaW50aygiJXM6IHJlc2V0LCBpbmFjdGl2ZS5cbiIsIEJOKGopKTsKIAogICAgaWYgKEhEKGopLT5pbl9yZXNldCkgewogICAgICAgcHJpbnRrKCIlczogcmVzZXQsIGV4aXQsIGFscmVhZHkgaW4gcmVzZXQuXG4iLCBCTihqKSk7CkBAIC0xNDQ1LDE0ICsxNDQyLDEyIEBACiAKICAgICAgIGlmIChIRChqKS0+Y3Bfc3RhdFtpXSA9PSBSRUFEWSB8fCBIRChqKS0+Y3Bfc3RhdFtpXSA9PSBBQk9SVElORykgewogICAgICAgICAgSEQoaiktPmNwX3N0YXRbaV0gPSBBQk9SVElORzsKLSAgICAgICAgIHByaW50aygiJXM6IHJlc2V0LCBtYm94ICVkIGFib3J0aW5nLCBwaWQgJWxkLlxuIiwKLSAgICAgICAgICAgICAgICBCTihqKSwgaSwgU0NwbnQtPnNlcmlhbF9udW1iZXIpOworICAgICAgICAgcHJpbnRrKCIlczogcmVzZXQsIG1ib3ggJWQgYWJvcnRpbmcuXG4iLCBCTihqKSwgaSk7CiAgICAgICAgICB9CiAKICAgICAgIGVsc2UgewogICAgICAgICAgSEQoaiktPmNwX3N0YXRbaV0gPSBJTl9SRVNFVDsKLSAgICAgICAgIHByaW50aygiJXM6IHJlc2V0LCBtYm94ICVkIGluIHJlc2V0LCBwaWQgJWxkLlxuIiwKLSAgICAgICAgICAgICAgICBCTihqKSwgaSwgU0NwbnQtPnNlcmlhbF9udW1iZXIpOworICAgICAgICAgcHJpbnRrKCIlczogcmVzZXQsIG1ib3ggJWQgaW4gcmVzZXQuXG4iLCBCTihqKSwgaSk7CiAgICAgICAgICB9CiAKICAgICAgIGlmIChTQ3BudC0+aG9zdF9zY3JpYmJsZSA9PSBOVUxMKQpAQCAtMTUwMCw4ICsxNDk1LDcgQEAKICAgICAgICAgIC8qIFRoaXMgbWFpbGJveCBpcyBzdGlsbCB3YWl0aW5nIGZvciBpdHMgaW50ZXJydXB0ICovCiAgICAgICAgICBIRChqKS0+Y3Bfc3RhdFtpXSA9IExPQ0tFRDsKIAotICAgICAgICAgcHJpbnRrKCIlcywgcmVzZXQsIG1ib3ggJWQgbG9ja2VkLCBESURfUkVTRVQsIHBpZCAlbGQgZG9uZS5cbiIsCi0gICAgICAgICAgICAgICAgQk4oaiksIGksIFNDcG50LT5zZXJpYWxfbnVtYmVyKTsKKyAgICAgICAgIHByaW50aygiJXMsIHJlc2V0LCBtYm94ICVkIGxvY2tlZCwgRElEX1JFU0VULCBkb25lLlxuIiwgQk4oaiksIGkpOwogICAgICAgICAgfQogCiAgICAgICBlbHNlIGlmIChIRChqKS0+Y3Bfc3RhdFtpXSA9PSBBQk9SVElORykgewpAQCAtMTUxMyw4ICsxNTA3LDcgQEAKICAgICAgICAgIC8qIFRoaXMgbWFpbGJveCB3YXMgbmV2ZXIgcXVldWVkIHRvIHRoZSBhZGFwdGVyICovCiAgICAgICAgICBIRChqKS0+Y3Bfc3RhdFtpXSA9IEZSRUU7CiAKLSAgICAgICAgIHByaW50aygiJXMsIHJlc2V0LCBtYm94ICVkIGFib3J0aW5nLCBESURfUkVTRVQsIHBpZCAlbGQgZG9uZS5cbiIsCi0gICAgICAgICAgICAgICAgQk4oaiksIGksIFNDcG50LT5zZXJpYWxfbnVtYmVyKTsKKyAgICAgICAgIHByaW50aygiJXMsIHJlc2V0LCBtYm94ICVkIGFib3J0aW5nLCBESURfUkVTRVQsIGRvbmUuXG4iLCBCTihqKSwgaSk7CiAgICAgICAgICB9CiAKICAgICAgIGVsc2UKQEAgLTE1MjgsNyArMTUyMSw3IEBACiAgICBIRChqKS0+aW5fcmVzZXQgPSBGQUxTRTsKICAgIGRvX3RyYWNlID0gRkFMU0U7CiAKLSAgIGlmIChhcmdfZG9uZSkgcHJpbnRrKCIlczogcmVzZXQsIGV4aXQsIHBpZCAlbGQgZG9uZS5cbiIsIEJOKGopLCBTQ2FyZy0+c2VyaWFsX251bWJlcik7CisgICBpZiAoYXJnX2RvbmUpIHByaW50aygiJXM6IHJlc2V0LCBleGl0LCBkb25lLlxuIiwgQk4oaikpOwogICAgZWxzZSAgICAgICAgICBwcmludGsoIiVzOiByZXNldCwgZXhpdC5cbiIsIEJOKGopKTsKIAogICAgc3Bpbl91bmxvY2tfaXJxKHNoW2pdLT5ob3N0X2xvY2spOwpAQCAtMTY3MSwxMCArMTY2NCwxMCBAQAogICAgaWYgKGxpbmtfc3RhdGlzdGljcyAmJiAob3ZlcmxhcCB8fCAhKGZsdXNoY291bnQgJSBsaW5rX3N0YXRpc3RpY3MpKSkKICAgICAgIGZvciAobiA9IDA7IG4gPCBuX3JlYWR5OyBuKyspIHsKICAgICAgICAgIGsgPSBpbFtuXTsgY3BwID0gJkhEKGopLT5jcFtrXTsgU0NwbnQgPSBjcHAtPlNDcG50OwotICAgICAgICAgcHJpbnRrKCIlcyAlZC4lZDolZCBwaWQgJWxkIG1iICVkIGZjICVkIG5yICVkIHNlYyAlbGQgbnMgJXUiXAorICAgICAgICAgcHJpbnRrKCIlcyAlZC4lZDolZCBtYiAlZCBmYyAlZCBuciAlZCBzZWMgJWxkIG5zICV1IlwKICAgICAgICAgICAgICAgICAiIGN1ciAlbGQgczolYyByOiVjIHJldjolYyBpbjolYyBvdjolYyB4ZCAlZC5cbiIsCiAgICAgICAgICAgICAgICAgKGloZGxyID8gImloZGxyIiA6ICJxY29tbSIpLCBTQ3BudC0+Y2hhbm5lbCwgU0NwbnQtPnRhcmdldCwKLSAgICAgICAgICAgICAgICBTQ3BudC0+bHVuLCBTQ3BudC0+c2VyaWFsX251bWJlciwgaywgZmx1c2hjb3VudCwgbl9yZWFkeSwKKyAgICAgICAgICAgICAgICBTQ3BudC0+bHVuLCBrLCBmbHVzaGNvdW50LCBuX3JlYWR5LAogICAgICAgICAgICAgICAgIGJsa19ycV9wb3MoU0NwbnQtPnJlcXVlc3QpLCBibGtfcnFfc2VjdG9ycyhTQ3BudC0+cmVxdWVzdCksCiAJCWN1cnNlYywgWUVTTk8ocyksIFlFU05PKHIpLCBZRVNOTyhyZXYpLCBZRVNOTyhpbnB1dF9vbmx5KSwKICAgICAgICAgICAgICAgICBZRVNOTyhvdmVybGFwKSwgY3BwLT54ZGlyKTsKQEAgLTE3MDksOSArMTcwMiw5IEBACiAKICAgICAgIGlmICh3YWl0X29uX2J1c3koc2hbal0tPmlvX3BvcnQsIE1BWExPT1ApKSB7CiAgICAgICAgICBzY21kX3ByaW50ayhLRVJOX0lORk8sIFNDcG50LAotCSAJIiVzLCBwaWQgJWxkLCBtYm94ICVkLCBhZGFwdGVyIgorCSAJIiVzLCBtYm94ICVkLCBhZGFwdGVyIgogICAgICAgICAgICAgICAgICIgYnVzeSwgd2lsbCBhYm9ydC5cbiIsIChpaGRsciA/ICJpaGRsciIgOiAicWNvbW0iKSwKLSAgICAgICAgICAgICAgICBTQ3BudC0+c2VyaWFsX251bWJlciwgayk7CisgICAgICAgICAgICAgICAgayk7CiAgICAgICAgICBIRChqKS0+Y3Bfc3RhdFtrXSA9IEFCT1JUSU5HOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CkBAIC0xNzkzLDEyICsxNzg2LDEyIEBACiAgICBpZiAoU0NwbnQgPT0gTlVMTCkgcGFuaWMoIiVzOiBpaGRsciwgbWJveCAlZCwgU0NwbnQgPT0gTlVMTC5cbiIsIEJOKGopLCBpKTsKIAogICAgaWYgKFNDcG50LT5ob3N0X3NjcmliYmxlID09IE5VTEwpCi0gICAgICBwYW5pYygiJXM6IGloZGxyLCBtYm94ICVkLCBwaWQgJWxkLCBTQ3BudCAlcCBnYXJibGVkLlxuIiwgQk4oaiksIGksCi0gICAgICAgICAgICBTQ3BudC0+c2VyaWFsX251bWJlciwgU0NwbnQpOworICAgICAgcGFuaWMoIiVzOiBpaGRsciwgbWJveCAlZCwgU0NwbnQgJXAgZ2FyYmxlZC5cbiIsIEJOKGopLCBpLAorICAgICAgICAgICAgU0NwbnQpOwogCiAgICBpZiAoKih1bnNpZ25lZCBpbnQgKilTQ3BudC0+aG9zdF9zY3JpYmJsZSAhPSBpKQotICAgICAgcGFuaWMoIiVzOiBpaGRsciwgbWJveCAlZCwgcGlkICVsZCwgaW5kZXggbWlzbWF0Y2ggJWQuXG4iLAotICAgICAgICAgICAgQk4oaiksIGksIFNDcG50LT5zZXJpYWxfbnVtYmVyLCAqKHVuc2lnbmVkIGludCAqKVNDcG50LT5ob3N0X3NjcmliYmxlKTsKKyAgICAgIHBhbmljKCIlczogaWhkbHIsIG1ib3ggJWQsIGluZGV4IG1pc21hdGNoICVkLlxuIiwKKyAgICAgICAgICAgIEJOKGopLCBpLCAqKHVuc2lnbmVkIGludCAqKVNDcG50LT5ob3N0X3NjcmliYmxlKTsKIAogICAgc3luY19kbWEoaSwgaik7CiAKQEAgLTE4NDEsOCArMTgzNCw4IEBACiAgICAgICAgICAgICAgKCEodHN0YXR1cyA9PSBDSEVDS19DT05ESVRJT04gJiYgSEQoaiktPmlvY291bnQgPD0gMTAwMCAmJgogICAgICAgICAgICAgICAgKFNDcG50LT5zZW5zZV9idWZmZXJbMl0gJiAweGYpID09IE5PVF9SRUFEWSkpKQogICAgICAgICAgICAgc2NtZF9wcmludGsoS0VSTl9JTkZPLCBTQ3BudCwKLQkgICAgCSJpaGRsciwgcGlkICVsZCwgdGFyZ2V0X3N0YXR1cyAweCV4LCBzZW5zZSBrZXkgMHgleC5cbiIsCi0gICAgICAgICAgICAgICAgICAgU0NwbnQtPnNlcmlhbF9udW1iZXIsIHNwcC0+dGFyZ2V0X3N0YXR1cywKKwkgICAgCSJpaGRsciwgdGFyZ2V0X3N0YXR1cyAweCV4LCBzZW5zZSBrZXkgMHgleC5cbiIsCisgICAgICAgICAgICAgICAgICAgc3BwLT50YXJnZXRfc3RhdHVzLAogICAgICAgICAgICAgICAgICAgIFNDcG50LT5zZW5zZV9idWZmZXJbMl0pOwogCiAgICAgICAgICBIRChqKS0+dGFyZ2V0X3RvW3NjbWRfaWQoU0NwbnQpXVtzY21kX2NoYW5uZWwoU0NwbnQpXSA9IDA7CkBAIC0xOTEzLDggKzE5MDYsOCBAQAogICAgICAgICBkb190cmFjZSB8fCBtc2dfYnl0ZShzcHAtPnRhcmdldF9zdGF0dXMpKQogI2VuZGlmCiAgICAgICBzY21kX3ByaW50ayhLRVJOX0lORk8sIFNDcG50LCAiaWhkbHIsIG1ib3ggJTJkLCBlcnIgMHgleDoleCwiXAotICAgICAgICAgICAgICIgcGlkICVsZCwgcmVnIDB4JXgsIGNvdW50ICVkLlxuIiwKLSAgICAgICAgICAgICBpLCBzcHAtPmFkYXB0ZXJfc3RhdHVzLCBzcHAtPnRhcmdldF9zdGF0dXMsIFNDcG50LT5zZXJpYWxfbnVtYmVyLAorICAgICAgICAgICAgICIgcmVnIDB4JXgsIGNvdW50ICVkLlxuIiwKKyAgICAgICAgICAgICBpLCBzcHAtPmFkYXB0ZXJfc3RhdHVzLCBzcHAtPnRhcmdldF9zdGF0dXMsCiAgICAgICAgICAgICAgcmVnLCBIRChqKS0+aW9jb3VudCk7CiAKICAgIHVubWFwX2RtYShpLCBqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS93ZDMzYzkzLmMgYi9kcml2ZXJzL3Njc2kvd2QzM2M5My5jCmluZGV4IDQ0NjhhZTMuLjk3YWU3MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS93ZDMzYzkzLmMKKysrIGIvZHJpdmVycy9zY3NpL3dkMzNjOTMuYwpAQCAtMzgxLDcgKzM4MSw3IEBACiAJaG9zdGRhdGEgPSAoc3RydWN0IFdEMzNDOTNfaG9zdGRhdGEgKikgY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwogCiAJREIoREJfUVVFVUVfQ09NTUFORCwKLQkgICBwcmludGsoIlEtJWQtJTAyeC0lbGQoICIsIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5jbW5kWzBdLCBjbWQtPnNlcmlhbF9udW1iZXIpKQorCSAgIHByaW50aygiUS0lZC0lMDJ4KCAiLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+Y21uZFswXSkpCiAKIC8qIFNldCB1cCBhIGZldyBmaWVsZHMgaW4gdGhlIHNjc2lfY21uZCBzdHJ1Y3R1cmUgZm9yIG91ciBvd24gdXNlOgogICogIC0gaG9zdF9zY3JpYmJsZSBpcyB0aGUgcG9pbnRlciB0byB0aGUgbmV4dCBjbWQgaW4gdGhlIGlucHV0IHF1ZXVlCkBAIC00NjIsNyArNDYyLDcgQEAKIAogCXdkMzNjOTNfZXhlY3V0ZShjbWQtPmRldmljZS0+aG9zdCk7CiAKLQlEQihEQl9RVUVVRV9DT01NQU5ELCBwcmludGsoIilRLSVsZCAiLCBjbWQtPnNlcmlhbF9udW1iZXIpKQorCURCKERCX1FVRVVFX0NPTU1BTkQsIHByaW50aygiKVEgIikpCiAKIAlzcGluX3VubG9ja19pcnEoJmhvc3RkYXRhLT5sb2NrKTsKIAlyZXR1cm4gMDsKQEAgLTY4Nyw3ICs2ODcsNyBAQAogCSAqLwogCiAJREIoREJfRVhFQ1VURSwKLQkgICBwcmludGsoIiVzJWxkKUVYLTIgIiwgKGNtZC0+U0NwLnBoYXNlKSA/ICJkOiIgOiAiIiwgY21kLT5zZXJpYWxfbnVtYmVyKSkKKwkgICBwcmludGsoIiVzKUVYLTIgIiwgKGNtZC0+U0NwLnBoYXNlKSA/ICJkOiIgOiAiIikpCiB9CiAKIHN0YXRpYyB2b2lkCkBAIC05NjMsNyArOTYzLDcgQEAKIAljYXNlIENTUl9YRkVSX0RPTkUgfCBQSFNfQ09NTUFORDoKIAljYXNlIENTUl9VTkVYUCB8IFBIU19DT01NQU5EOgogCWNhc2UgQ1NSX1NSVl9SRVEgfCBQSFNfQ09NTUFORDoKLQkJREIoREJfSU5UUiwgcHJpbnRrKCJDTU5ELSUwMngsJWxkIiwgY21kLT5jbW5kWzBdLCBjbWQtPnNlcmlhbF9udW1iZXIpKQorCQlEQihEQl9JTlRSLCBwcmludGsoIkNNTkQtJTAyeCIsIGNtZC0+Y21uZFswXSkpCiAJCSAgICB0cmFuc2Zlcl9waW8ocmVncywgY21kLT5jbW5kLCBjbWQtPmNtZF9sZW4sIERBVEFfT1VUX0RJUiwKIAkJCQkgaG9zdGRhdGEpOwogCQlob3N0ZGF0YS0+c3RhdGUgPSBTX0NPTk5FQ1RFRDsKQEAgLTEwMDcsNyArMTAwNyw3IEBACiAJCXN3aXRjaCAobXNnKSB7CiAKIAkJY2FzZSBDT01NQU5EX0NPTVBMRVRFOgotCQkJREIoREJfSU5UUiwgcHJpbnRrKCJDQ01QLSVsZCIsIGNtZC0+c2VyaWFsX251bWJlcikpCisJCQlEQihEQl9JTlRSLCBwcmludGsoIkNDTVAiKSkKIAkJCSAgICB3cml0ZV93ZDMzYzkzX2NtZChyZWdzLCBXRF9DTURfTkVHQVRFX0FDSyk7CiAJCQlob3N0ZGF0YS0+c3RhdGUgPSBTX1BSRV9DTVBfRElTQzsKIAkJCWJyZWFrOwpAQCAtMTE3NCw3ICsxMTc0LDcgQEAKIAogCQl3cml0ZV93ZDMzYzkzKHJlZ3MsIFdEX1NPVVJDRV9JRCwgU1JDSURfRVIpOwogCQlpZiAocGhzID09IDB4NjApIHsKLQkJCURCKERCX0lOVFIsIHByaW50aygiU1gtRE9ORS0lbGQiLCBjbWQtPnNlcmlhbF9udW1iZXIpKQorCQkJREIoREJfSU5UUiwgcHJpbnRrKCJTWC1ET05FIikpCiAJCQkgICAgY21kLT5TQ3AuTWVzc2FnZSA9IENPTU1BTkRfQ09NUExFVEU7CiAJCQlsdW4gPSByZWFkX3dkMzNjOTMocmVncywgV0RfVEFSR0VUX0xVTik7CiAJCQlEQihEQl9JTlRSLCBwcmludGsoIjolZC4lZCIsIGNtZC0+U0NwLlN0YXR1cywgbHVuKSkKQEAgLTEyMDAsOCArMTIwMCw4IEBACiAJCQl3ZDMzYzkzX2V4ZWN1dGUoaW5zdGFuY2UpOwogCQl9IGVsc2UgewogCQkJcHJpbnRrCi0JCQkgICAgKCIlMDJ4OiUwMng6JTAyeC0lbGQ6IFVua25vd24gU0VMX1hGRVJfRE9ORSBwaGFzZSEhLS0tIiwKLQkJCSAgICAgYXNyLCBzciwgcGhzLCBjbWQtPnNlcmlhbF9udW1iZXIpOworCQkJICAgICgiJTAyeDolMDJ4OiUwMng6IFVua25vd24gU0VMX1hGRVJfRE9ORSBwaGFzZSEhLS0tIiwKKwkJCSAgICAgYXNyLCBzciwgcGhzKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3RkYXRhLT5sb2NrLCBmbGFncyk7CiAJCX0KIAkJYnJlYWs7CkBAIC0xMjY2LDcgKzEyNjYsNyBAQAogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdGRhdGEtPmxvY2ssIGZsYWdzKTsKIAkJCXJldHVybjsKIAkJfQotCQlEQihEQl9JTlRSLCBwcmludGsoIlVORVhQX0RJU0MtJWxkIiwgY21kLT5zZXJpYWxfbnVtYmVyKSkKKwkJREIoREJfSU5UUiwgcHJpbnRrKCJVTkVYUF9ESVNDIikpCiAJCSAgICBob3N0ZGF0YS0+Y29ubmVjdGVkID0gTlVMTDsKIAkJaG9zdGRhdGEtPmJ1c3lbY21kLT5kZXZpY2UtPmlkXSAmPSB+KDEgPDwgY21kLT5kZXZpY2UtPmx1bik7CiAJCWhvc3RkYXRhLT5zdGF0ZSA9IFNfVU5DT05ORUNURUQ7CkBAIC0xMjkyLDcgKzEyOTIsNyBAQAogICovCiAKIAkJd3JpdGVfd2QzM2M5MyhyZWdzLCBXRF9TT1VSQ0VfSUQsIFNSQ0lEX0VSKTsKLQkJREIoREJfSU5UUiwgcHJpbnRrKCJESVNDLSVsZCIsIGNtZC0+c2VyaWFsX251bWJlcikpCisJCURCKERCX0lOVFIsIHByaW50aygiRElTQyIpKQogCQkgICAgaWYgKGNtZCA9PSBOVUxMKSB7CiAJCQlwcmludGsoIiAtIEFscmVhZHkgZGlzY29ubmVjdGVkISAiKTsKIAkJCWhvc3RkYXRhLT5zdGF0ZSA9IFNfVU5DT05ORUNURUQ7CkBAIC0xNDkxLDcgKzE0OTEsNiBAQAogCQl9IGVsc2UKIAkJCWhvc3RkYXRhLT5zdGF0ZSA9IFNfQ09OTkVDVEVEOwogCi0JCURCKERCX0lOVFIsIHByaW50aygiLSVsZCIsIGNtZC0+c2VyaWFsX251bWJlcikpCiAJCSAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0ZGF0YS0+bG9jaywgZmxhZ3MpOwogCQlicmVhazsKIApAQCAtMTYzNyw4ICsxNjM2LDggQEAKIAkJCWNtZC0+aG9zdF9zY3JpYmJsZSA9IE5VTEw7CiAJCQljbWQtPnJlc3VsdCA9IERJRF9BQk9SVCA8PCAxNjsKIAkJCXByaW50awotCQkJICAgICgic2NzaSVkOiBBYm9ydCAtIHJlbW92aW5nIGNvbW1hbmQgJWxkIGZyb20gaW5wdXRfUS4gIiwKLQkJCSAgICAgaW5zdGFuY2UtPmhvc3Rfbm8sIGNtZC0+c2VyaWFsX251bWJlcik7CisJCQkgICAgKCJzY3NpJWQ6IEFib3J0IC0gcmVtb3ZpbmcgY29tbWFuZCBmcm9tIGlucHV0X1EuICIsCisJCQkgICAgIGluc3RhbmNlLT5ob3N0X25vKTsKIAkJCWVuYWJsZV9pcnEoY21kLT5kZXZpY2UtPmhvc3QtPmlycSk7CiAJCQljbWQtPnNjc2lfZG9uZShjbWQpOwogCQkJcmV0dXJuIFNVQ0NFU1M7CkBAIC0xNjYyLDggKzE2NjEsOCBAQAogCQl1Y2hhciBzciwgYXNyOwogCQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAKLQkJcHJpbnRrKCJzY3NpJWQ6IEFib3J0aW5nIGNvbm5lY3RlZCBjb21tYW5kICVsZCAtICIsCi0JCSAgICAgICBpbnN0YW5jZS0+aG9zdF9ubywgY21kLT5zZXJpYWxfbnVtYmVyKTsKKwkJcHJpbnRrKCJzY3NpJWQ6IEFib3J0aW5nIGNvbm5lY3RlZCBjb21tYW5kIC0gIiwKKwkJICAgICAgIGluc3RhbmNlLT5ob3N0X25vKTsKIAogCQlwcmludGsoInN0b3BwaW5nIERNQSAtICIpOwogCQlpZiAoaG9zdGRhdGEtPmRtYSA9PSBEX0RNQV9SVU5OSU5HKSB7CkBAIC0xNzI5LDggKzE3MjgsOCBAQAogCXdoaWxlICh0bXApIHsKIAkJaWYgKHRtcCA9PSBjbWQpIHsKIAkJCXByaW50awotCQkJICAgICgic2NzaSVkOiBBYm9ydCAtIGNvbW1hbmQgJWxkIGZvdW5kIG9uIGRpc2Nvbm5lY3RlZF9RIC0gIiwKLQkJCSAgICAgaW5zdGFuY2UtPmhvc3Rfbm8sIGNtZC0+c2VyaWFsX251bWJlcik7CisJCQkgICAgKCJzY3NpJWQ6IEFib3J0IC0gY29tbWFuZCBmb3VuZCBvbiBkaXNjb25uZWN0ZWRfUSAtICIsCisJCQkgICAgIGluc3RhbmNlLT5ob3N0X25vKTsKIAkJCXByaW50aygiQWJvcnQgU05PT1pFLiAiKTsKIAkJCWVuYWJsZV9pcnEoY21kLT5kZXZpY2UtPmhvc3QtPmlycSk7CiAJCQlyZXR1cm4gRkFJTEVEOwpAQCAtMjE4MCw4ICsyMTc5LDggQEAKIAkJc3RyY2F0KGJwLCAiXG5jb25uZWN0ZWQ6ICAgICAiKTsKIAkJaWYgKGhkLT5jb25uZWN0ZWQpIHsKIAkJCWNtZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhkLT5jb25uZWN0ZWQ7Ci0JCQlzcHJpbnRmKHRidWYsICIgJWxkLSVkOiVkKCUwMngpIiwKLQkJCQljbWQtPnNlcmlhbF9udW1iZXIsIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1biwgY21kLT5jbW5kWzBdKTsKKwkJCXNwcmludGYodGJ1ZiwgIiAlZDolZCglMDJ4KSIsCisJCQkJY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuLCBjbWQtPmNtbmRbMF0pOwogCQkJc3RyY2F0KGJwLCB0YnVmKTsKIAkJfQogCX0KQEAgLTIxODksOCArMjE4OCw4IEBACiAJCXN0cmNhdChicCwgIlxuaW5wdXRfUTogICAgICAgIik7CiAJCWNtZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhkLT5pbnB1dF9ROwogCQl3aGlsZSAoY21kKSB7Ci0JCQlzcHJpbnRmKHRidWYsICIgJWxkLSVkOiVkKCUwMngpIiwKLQkJCQljbWQtPnNlcmlhbF9udW1iZXIsIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1biwgY21kLT5jbW5kWzBdKTsKKwkJCXNwcmludGYodGJ1ZiwgIiAlZDolZCglMDJ4KSIsCisJCQkJY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuLCBjbWQtPmNtbmRbMF0pOwogCQkJc3RyY2F0KGJwLCB0YnVmKTsKIAkJCWNtZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGNtZC0+aG9zdF9zY3JpYmJsZTsKIAkJfQpAQCAtMjE5OSw4ICsyMTk4LDggQEAKIAkJc3RyY2F0KGJwLCAiXG5kaXNjb25uZWN0ZWRfUToiKTsKIAkJY21kID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaGQtPmRpc2Nvbm5lY3RlZF9ROwogCQl3aGlsZSAoY21kKSB7Ci0JCQlzcHJpbnRmKHRidWYsICIgJWxkLSVkOiVkKCUwMngpIiwKLQkJCQljbWQtPnNlcmlhbF9udW1iZXIsIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1biwgY21kLT5jbW5kWzBdKTsKKwkJCXNwcmludGYodGJ1ZiwgIiAlZDolZCglMDJ4KSIsCisJCQkJY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuLCBjbWQtPmNtbmRbMF0pOwogCQkJc3RyY2F0KGJwLCB0YnVmKTsKIAkJCWNtZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGNtZC0+aG9zdF9zY3JpYmJsZTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvYXRtZWxfc3BpLmMgYi9kcml2ZXJzL3NwaS9hdG1lbF9zcGkuYwppbmRleCAxYTQ3OGJmLi4wODcxMWU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9hdG1lbF9zcGkuYworKysgYi9kcml2ZXJzL3NwaS9hdG1lbF9zcGkuYwpAQCAtOTM1LDYgKzkzNSw2IEBACiBtb2R1bGVfZXhpdChhdG1lbF9zcGlfZXhpdCk7CiAKIE1PRFVMRV9ERVNDUklQVElPTigiQXRtZWwgQVQzMi9BVDkxIFNQSSBDb250cm9sbGVyIGRyaXZlciIpOwotTU9EVUxFX0FVVEhPUigiSGFhdmFyZCBTa2lubmVtb2VuIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJIYWF2YXJkIFNraW5uZW1vZW4gKEF0bWVsKSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTphdG1lbF9zcGkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL2RyaXZlcl9jaGlwY29tbW9uLmMgYi9kcml2ZXJzL3NzYi9kcml2ZXJfY2hpcGNvbW1vbi5jCmluZGV4IDdjMDMxZmQuLjA2ZDE1YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL2RyaXZlcl9jaGlwY29tbW9uLmMKKysrIGIvZHJpdmVycy9zc2IvZHJpdmVyX2NoaXBjb21tb24uYwpAQCAtNDYsNDAgKzQ2LDY2IEBACiAJaWYgKCFjY2RldikKIAkJcmV0dXJuOwogCWJ1cyA9IGNjZGV2LT5idXM7CisKKwkvKiBXZSBzdXBwb3J0IFNMT1cgb25seSBvbiA2Li45ICovCisJaWYgKGNjZGV2LT5pZC5yZXZpc2lvbiA+PSAxMCAmJiBtb2RlID09IFNTQl9DTEtNT0RFX1NMT1cpCisJCW1vZGUgPSBTU0JfQ0xLTU9ERV9EWU5BTUlDOworCisJaWYgKGNjLT5jYXBhYmlsaXRpZXMgJiBTU0JfQ0hJUENPX0NBUF9QTVUpCisJCXJldHVybjsgLyogUE1VIGNvbnRyb2xzIGNsb2NrbW9kZSwgc2VwYXJhdGVkIGZ1bmN0aW9uIG5lZWRlZCAqLworCVNTQl9XQVJOX09OKGNjZGV2LT5pZC5yZXZpc2lvbiA+PSAyMCk7CisKIAkvKiBjaGlwY29tbW9uIGNvcmVzIHByaW9yIHRvIHJldjYgZG9uJ3Qgc3VwcG9ydCBkeW5hbWljIGNsb2NrIGNvbnRyb2wgKi8KIAlpZiAoY2NkZXYtPmlkLnJldmlzaW9uIDwgNikKIAkJcmV0dXJuOwotCS8qIGNoaXBjb21tb24gY29yZXMgcmV2MTAgYXJlIGEgd2hvbGUgbmV3IGJhbGwgZ2FtZSAqLworCisJLyogQ2hpcENvbW1vbiBjb3JlcyByZXYxMCsgbmVlZCB0ZXN0aW5nICovCiAJaWYgKGNjZGV2LT5pZC5yZXZpc2lvbiA+PSAxMCkKIAkJcmV0dXJuOworCiAJaWYgKCEoY2MtPmNhcGFiaWxpdGllcyAmIFNTQl9DSElQQ09fQ0FQX1BDVEwpKQogCQlyZXR1cm47CiAKIAlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIFNTQl9DTEtNT0RFX1NMT1c6CisJY2FzZSBTU0JfQ0xLTU9ERV9TTE9XOiAvKiBGb3IgcmV2cyA2Li45IG9ubHkgKi8KIAkJdG1wID0gY2hpcGNvX3JlYWQzMihjYywgU1NCX0NISVBDT19TTE9XQ0xLQ1RMKTsKIAkJdG1wIHw9IFNTQl9DSElQQ09fU0xPV0NMS0NUTF9GU0xPVzsKIAkJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fU0xPV0NMS0NUTCwgdG1wKTsKIAkJYnJlYWs7CiAJY2FzZSBTU0JfQ0xLTU9ERV9GQVNUOgotCQlzc2JfcGNpX3h0YWwoYnVzLCBTU0JfR1BJT19YVEFMLCAxKTsgLyogRm9yY2UgY3J5c3RhbCBvbiAqLwotCQl0bXAgPSBjaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX1NMT1dDTEtDVEwpOwotCQl0bXAgJj0gflNTQl9DSElQQ09fU0xPV0NMS0NUTF9GU0xPVzsKLQkJdG1wIHw9IFNTQl9DSElQQ09fU0xPV0NMS0NUTF9JUExMOwotCQljaGlwY29fd3JpdGUzMihjYywgU1NCX0NISVBDT19TTE9XQ0xLQ1RMLCB0bXApOworCQlpZiAoY2NkZXYtPmlkLnJldmlzaW9uIDwgMTApIHsKKwkJCXNzYl9wY2lfeHRhbChidXMsIFNTQl9HUElPX1hUQUwsIDEpOyAvKiBGb3JjZSBjcnlzdGFsIG9uICovCisJCQl0bXAgPSBjaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX1NMT1dDTEtDVEwpOworCQkJdG1wICY9IH5TU0JfQ0hJUENPX1NMT1dDTEtDVExfRlNMT1c7CisJCQl0bXAgfD0gU1NCX0NISVBDT19TTE9XQ0xLQ1RMX0lQTEw7CisJCQljaGlwY29fd3JpdGUzMihjYywgU1NCX0NISVBDT19TTE9XQ0xLQ1RMLCB0bXApOworCQl9IGVsc2UgeworCQkJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fU1lTQ0xLQ1RMLAorCQkJCShjaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX1NZU0NMS0NUTCkgfAorCQkJCSBTU0JfQ0hJUENPX1NZU0NMS0NUTF9GT1JDRUhUKSk7CisJCQkvKiB1ZGVsYXkoMTUwKTsgVE9ETzogbm90IGF2YWlsYWJsZSBpbiBlYXJseSBpbml0ICovCisJCX0KIAkJYnJlYWs7CiAJY2FzZSBTU0JfQ0xLTU9ERV9EWU5BTUlDOgotCQl0bXAgPSBjaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX1NMT1dDTEtDVEwpOwotCQl0bXAgJj0gflNTQl9DSElQQ09fU0xPV0NMS0NUTF9GU0xPVzsKLQkJdG1wICY9IH5TU0JfQ0hJUENPX1NMT1dDTEtDVExfSVBMTDsKLQkJdG1wICY9IH5TU0JfQ0hJUENPX1NMT1dDTEtDVExfRU5YVEFMOwotCQlpZiAoKHRtcCAmIFNTQl9DSElQQ09fU0xPV0NMS0NUTF9TUkMpICE9IFNTQl9DSElQQ09fU0xPV0NMS0NUTF9TUkNfWFRBTCkKLQkJCXRtcCB8PSBTU0JfQ0hJUENPX1NMT1dDTEtDVExfRU5YVEFMOwotCQljaGlwY29fd3JpdGUzMihjYywgU1NCX0NISVBDT19TTE9XQ0xLQ1RMLCB0bXApOworCQlpZiAoY2NkZXYtPmlkLnJldmlzaW9uIDwgMTApIHsKKwkJCXRtcCA9IGNoaXBjb19yZWFkMzIoY2MsIFNTQl9DSElQQ09fU0xPV0NMS0NUTCk7CisJCQl0bXAgJj0gflNTQl9DSElQQ09fU0xPV0NMS0NUTF9GU0xPVzsKKwkJCXRtcCAmPSB+U1NCX0NISVBDT19TTE9XQ0xLQ1RMX0lQTEw7CisJCQl0bXAgJj0gflNTQl9DSElQQ09fU0xPV0NMS0NUTF9FTlhUQUw7CisJCQlpZiAoKHRtcCAmIFNTQl9DSElQQ09fU0xPV0NMS0NUTF9TUkMpICE9CisJCQkgICAgU1NCX0NISVBDT19TTE9XQ0xLQ1RMX1NSQ19YVEFMKQorCQkJCXRtcCB8PSBTU0JfQ0hJUENPX1NMT1dDTEtDVExfRU5YVEFMOworCQkJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fU0xPV0NMS0NUTCwgdG1wKTsKIAotCQkvKiBmb3IgZHluYW1pYyBjb250cm9sLCB3ZSBoYXZlIHRvIHJlbGVhc2Ugb3VyIHh0YWxfcHUgImZvcmNlIG9uIiAqLwotCQlpZiAodG1wICYgU1NCX0NISVBDT19TTE9XQ0xLQ1RMX0VOWFRBTCkKLQkJCXNzYl9wY2lfeHRhbChidXMsIFNTQl9HUElPX1hUQUwsIDApOworCQkJLyogRm9yIGR5bmFtaWMgY29udHJvbCwgd2UgaGF2ZSB0byByZWxlYXNlIG91ciB4dGFsX3B1CisJCQkgKiAiZm9yY2Ugb24iICovCisJCQlpZiAodG1wICYgU1NCX0NISVBDT19TTE9XQ0xLQ1RMX0VOWFRBTCkKKwkJCQlzc2JfcGNpX3h0YWwoYnVzLCBTU0JfR1BJT19YVEFMLCAwKTsKKwkJfSBlbHNlIHsKKwkJCWNoaXBjb193cml0ZTMyKGNjLCBTU0JfQ0hJUENPX1NZU0NMS0NUTCwKKwkJCQkoY2hpcGNvX3JlYWQzMihjYywgU1NCX0NISVBDT19TWVNDTEtDVEwpICYKKwkJCQkgflNTQl9DSElQQ09fU1lTQ0xLQ1RMX0ZPUkNFSFQpKTsKKwkJfQogCQlicmVhazsKIAlkZWZhdWx0OgogCQlTU0JfV0FSTl9PTigxKTsKQEAgLTI2MCw2ICsyODYsMTIgQEAKIAlpZiAoY2MtPmRldi0+aWQucmV2aXNpb24gPj0gMTEpCiAJCWNjLT5zdGF0dXMgPSBjaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX0NISVBTVEFUKTsKIAlzc2JfZHByaW50ayhLRVJOX0lORk8gUEZYICJjaGlwY29tbW9uIHN0YXR1cyBpcyAweCV4XG4iLCBjYy0+c3RhdHVzKTsKKworCWlmIChjYy0+ZGV2LT5pZC5yZXZpc2lvbiA+PSAyMCkgeworCQljaGlwY29fd3JpdGUzMihjYywgU1NCX0NISVBDT19HUElPUFVMTFVQLCAwKTsKKwkJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fR1BJT1BVTExET1dOLCAwKTsKKwl9CisKIAlzc2JfcG11X2luaXQoY2MpOwogCWNoaXBjb19wb3dlcmNvbnRyb2xfaW5pdChjYyk7CiAJc3NiX2NoaXBjb19zZXRfY2xvY2ttb2RlKGNjLCBTU0JfQ0xLTU9ERV9GQVNUKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL2RyaXZlcl9jaGlwY29tbW9uX3BtdS5jIGIvZHJpdmVycy9zc2IvZHJpdmVyX2NoaXBjb21tb25fcG11LmMKaW5kZXggNTczMmJiMi4uMzA1YWRlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvZHJpdmVyX2NoaXBjb21tb25fcG11LmMKKysrIGIvZHJpdmVycy9zc2IvZHJpdmVyX2NoaXBjb21tb25fcG11LmMKQEAgLTQyMyw2ICs0MjMsOCBAQAogCiAJc3dpdGNoIChidXMtPmNoaXBfaWQpIHsKIAljYXNlIDB4NDMxMjoKKwkJIG1pbl9tc2sgPSAweENCQjsKKwkJIGJyZWFrOwogCWNhc2UgMHg0MzIyOgogCQkvKiBXZSBrZWVwIHRoZSBkZWZhdWx0IHNldHRpbmdzOgogCQkgKiBtaW5fbXNrID0gMHhDQkIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL2RyaXZlcl9wY2ljb3JlLmMgYi9kcml2ZXJzL3NzYi9kcml2ZXJfcGNpY29yZS5jCmluZGV4IDBlOGQzNTIuLjgyZmViMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL2RyaXZlcl9wY2ljb3JlLmMKKysrIGIvZHJpdmVycy9zc2IvZHJpdmVyX3BjaWNvcmUuYwpAQCAtMTUsNiArMTUsMTEgQEAKIAogI2luY2x1ZGUgInNzYl9wcml2YXRlLmgiCiAKK3N0YXRpYyB1MzIgc3NiX3BjaWVfcmVhZChzdHJ1Y3Qgc3NiX3BjaWNvcmUgKnBjLCB1MzIgYWRkcmVzcyk7CitzdGF0aWMgdm9pZCBzc2JfcGNpZV93cml0ZShzdHJ1Y3Qgc3NiX3BjaWNvcmUgKnBjLCB1MzIgYWRkcmVzcywgdTMyIGRhdGEpOworc3RhdGljIHUxNiBzc2JfcGNpZV9tZGlvX3JlYWQoc3RydWN0IHNzYl9wY2ljb3JlICpwYywgdTggZGV2aWNlLCB1OCBhZGRyZXNzKTsKK3N0YXRpYyB2b2lkIHNzYl9wY2llX21kaW9fd3JpdGUoc3RydWN0IHNzYl9wY2ljb3JlICpwYywgdTggZGV2aWNlLAorCQkJCXU4IGFkZHJlc3MsIHUxNiBkYXRhKTsKIAogc3RhdGljIGlubGluZQogdTMyIHBjaWNvcmVfcmVhZDMyKHN0cnVjdCBzc2JfcGNpY29yZSAqcGMsIHUxNiBvZmZzZXQpCkBAIC00MDMsNiArNDA4LDEwNyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19TU0JfUENJQ09SRV9IT1NUTU9ERSAqLwogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFdvcmthcm91bmRzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBzc2JfcGNpY29yZV9maXhfc3Byb21fY29yZV9pbmRleChzdHJ1Y3Qgc3NiX3BjaWNvcmUgKnBjKQoreworCXUxNiB0bXAgPSBwY2ljb3JlX3JlYWQxNihwYywgU1NCX1BDSUNPUkVfU1BST00oMCkpOworCWlmICgoKHRtcCAmIDB4RjAwMCkgPj4gMTIpICE9IHBjLT5kZXYtPmNvcmVfaW5kZXgpIHsKKwkJdG1wICY9IH4weEYwMDA7CisJCXRtcCB8PSAocGMtPmRldi0+Y29yZV9pbmRleCA8PCAxMik7CisJCXBjaWNvcmVfd3JpdGUxNihwYywgU1NCX1BDSUNPUkVfU1BST00oMCksIHRtcCk7CisJfQorfQorCitzdGF0aWMgdTggc3NiX3BjaWNvcmVfcG9sYXJpdHlfd29ya2Fyb3VuZChzdHJ1Y3Qgc3NiX3BjaWNvcmUgKnBjKQoreworCXJldHVybiAoc3NiX3BjaWVfcmVhZChwYywgMHgyMDQpICYgMHgxMCkgPyAweEMwIDogMHg4MDsKK30KKworc3RhdGljIHZvaWQgc3NiX3BjaWNvcmVfc2VyZGVzX3dvcmthcm91bmQoc3RydWN0IHNzYl9wY2ljb3JlICpwYykKK3sKKwljb25zdCB1OCBzZXJkZXNfcGxsX2RldmljZSA9IDB4MUQ7CisJY29uc3QgdTggc2VyZGVzX3J4X2RldmljZSA9IDB4MUY7CisJdTE2IHRtcDsKKworCXNzYl9wY2llX21kaW9fd3JpdGUocGMsIHNlcmRlc19yeF9kZXZpY2UsIDEgLyogQ29udHJvbCAqLywKKwkJCSAgICBzc2JfcGNpY29yZV9wb2xhcml0eV93b3JrYXJvdW5kKHBjKSk7CisJdG1wID0gc3NiX3BjaWVfbWRpb19yZWFkKHBjLCBzZXJkZXNfcGxsX2RldmljZSwgMSAvKiBDb250cm9sICovKTsKKwlpZiAodG1wICYgMHg0MDAwKQorCQlzc2JfcGNpZV9tZGlvX3dyaXRlKHBjLCBzZXJkZXNfcGxsX2RldmljZSwgMSwgdG1wICYgfjB4NDAwMCk7Cit9CisKK3N0YXRpYyB2b2lkIHNzYl9wY2ljb3JlX3BjaV9zZXR1cF93b3JrYXJvdW5kcyhzdHJ1Y3Qgc3NiX3BjaWNvcmUgKnBjKQoreworCXN0cnVjdCBzc2JfZGV2aWNlICpwZGV2ID0gcGMtPmRldjsKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gcGRldi0+YnVzOworCXUzMiB0bXA7CisKKwl0bXAgPSBwY2ljb3JlX3JlYWQzMihwYywgU1NCX1BDSUNPUkVfU0JUT1BDSTIpOworCXRtcCB8PSBTU0JfUENJQ09SRV9TQlRPUENJX1BSRUY7CisJdG1wIHw9IFNTQl9QQ0lDT1JFX1NCVE9QQ0lfQlVSU1Q7CisJcGNpY29yZV93cml0ZTMyKHBjLCBTU0JfUENJQ09SRV9TQlRPUENJMiwgdG1wKTsKKworCWlmIChwZGV2LT5pZC5yZXZpc2lvbiA8IDUpIHsKKwkJdG1wID0gc3NiX3JlYWQzMihwZGV2LCBTU0JfSU1DRkdMTyk7CisJCXRtcCAmPSB+U1NCX0lNQ0ZHTE9fU0VSVE87CisJCXRtcCB8PSAyOworCQl0bXAgJj0gflNTQl9JTUNGR0xPX1JFUVRPOworCQl0bXAgfD0gMyA8PCBTU0JfSU1DRkdMT19SRVFUT19TSElGVDsKKwkJc3NiX3dyaXRlMzIocGRldiwgU1NCX0lNQ0ZHTE8sIHRtcCk7CisJCXNzYl9jb21taXRfc2V0dGluZ3MoYnVzKTsKKwl9IGVsc2UgaWYgKHBkZXYtPmlkLnJldmlzaW9uID49IDExKSB7CisJCXRtcCA9IHBjaWNvcmVfcmVhZDMyKHBjLCBTU0JfUENJQ09SRV9TQlRPUENJMik7CisJCXRtcCB8PSBTU0JfUENJQ09SRV9TQlRPUENJX01STTsKKwkJcGNpY29yZV93cml0ZTMyKHBjLCBTU0JfUENJQ09SRV9TQlRPUENJMiwgdG1wKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNzYl9wY2ljb3JlX3BjaWVfc2V0dXBfd29ya2Fyb3VuZHMoc3RydWN0IHNzYl9wY2ljb3JlICpwYykKK3sKKwl1MzIgdG1wOworCXU4IHJldiA9IHBjLT5kZXYtPmlkLnJldmlzaW9uOworCisJaWYgKHJldiA9PSAwIHx8IHJldiA9PSAxKSB7CisJCS8qIFRMUCBXb3JrYXJvdW5kIHJlZ2lzdGVyLiAqLworCQl0bXAgPSBzc2JfcGNpZV9yZWFkKHBjLCAweDQpOworCQl0bXAgfD0gMHg4OworCQlzc2JfcGNpZV93cml0ZShwYywgMHg0LCB0bXApOworCX0KKwlpZiAocmV2ID09IDEpIHsKKwkJLyogRExMUCBMaW5rIENvbnRyb2wgcmVnaXN0ZXIuICovCisJCXRtcCA9IHNzYl9wY2llX3JlYWQocGMsIDB4MTAwKTsKKwkJdG1wIHw9IDB4NDA7CisJCXNzYl9wY2llX3dyaXRlKHBjLCAweDEwMCwgdG1wKTsKKwl9CisKKwlpZiAocmV2ID09IDApIHsKKwkJY29uc3QgdTggc2VyZGVzX3J4X2RldmljZSA9IDB4MUY7CisKKwkJc3NiX3BjaWVfbWRpb193cml0ZShwYywgc2VyZGVzX3J4X2RldmljZSwKKwkJCQkJMiAvKiBUaW1lciAqLywgMHg4MTI4KTsKKwkJc3NiX3BjaWVfbWRpb193cml0ZShwYywgc2VyZGVzX3J4X2RldmljZSwKKwkJCQkJNiAvKiBDRFIgKi8sIDB4MDEwMCk7CisJCXNzYl9wY2llX21kaW9fd3JpdGUocGMsIHNlcmRlc19yeF9kZXZpY2UsCisJCQkJCTcgLyogQ0RSIEJXICovLCAweDE0NjYpOworCX0gZWxzZSBpZiAocmV2ID09IDMgfHwgcmV2ID09IDQgfHwgcmV2ID09IDUpIHsKKwkJLyogVE9ETzogRExMUCBQb3dlciBNYW5hZ2VtZW50IFRocmVzaG9sZCAqLworCQlzc2JfcGNpY29yZV9zZXJkZXNfd29ya2Fyb3VuZChwYyk7CisJCS8qIFRPRE86IEFTUE0gKi8KKwl9IGVsc2UgaWYgKHJldiA9PSA3KSB7CisJCS8qIFRPRE86IE5vIFBMTCBkb3duICovCisJfQorCisJaWYgKHJldiA+PSA2KSB7CisJCS8qIE1pc2NlbGxhbmVvdXMgQ29uZmlndXJhdGlvbiBGaXh1cCAqLworCQl0bXAgPSBwY2ljb3JlX3JlYWQxNihwYywgU1NCX1BDSUNPUkVfU1BST00oNSkpOworCQlpZiAoISh0bXAgJiAweDgwMDApKQorCQkJcGNpY29yZV93cml0ZTE2KHBjLCBTU0JfUENJQ09SRV9TUFJPTSg1KSwKKwkJCQkJdG1wIHwgMHg4MDAwKTsKKwl9Cit9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogR2VuZXJpYyBhbmQgQ2xpZW50bW9kZSBvcGVyYXRpb24gY29kZS4KQEAgLTQxNywxNCArNTIzLDE0IEBACiB2b2lkIHNzYl9wY2ljb3JlX2luaXQoc3RydWN0IHNzYl9wY2ljb3JlICpwYykKIHsKIAlzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2ID0gcGMtPmRldjsKLQlzdHJ1Y3Qgc3NiX2J1cyAqYnVzOwogCiAJaWYgKCFkZXYpCiAJCXJldHVybjsKLQlidXMgPSBkZXYtPmJ1czsKIAlpZiAoIXNzYl9kZXZpY2VfaXNfZW5hYmxlZChkZXYpKQogCQlzc2JfZGV2aWNlX2VuYWJsZShkZXYsIDApOwogCisJc3NiX3BjaWNvcmVfZml4X3Nwcm9tX2NvcmVfaW5kZXgocGMpOworCiAjaWZkZWYgQ09ORklHX1NTQl9QQ0lDT1JFX0hPU1RNT0RFCiAJcGMtPmhvc3Rtb2RlID0gcGNpY29yZV9pc19pbl9ob3N0bW9kZShwYyk7CiAJaWYgKHBjLT5ob3N0bW9kZSkKQEAgLTQzMiw2ICs1MzgsMTEgQEAKICNlbmRpZiAvKiBDT05GSUdfU1NCX1BDSUNPUkVfSE9TVE1PREUgKi8KIAlpZiAoIXBjLT5ob3N0bW9kZSkKIAkJc3NiX3BjaWNvcmVfaW5pdF9jbGllbnRtb2RlKHBjKTsKKworCS8qIEFkZGl0aW9uYWwgYWx3YXlzIG9uY2UtZXhlY3V0ZWQgd29ya2Fyb3VuZHMgKi8KKwlzc2JfcGNpY29yZV9zZXJkZXNfd29ya2Fyb3VuZChwYyk7CisJLyogVE9ETzogQVNQTSAqLworCS8qIFRPRE86IENsb2NrIFJlcXVlc3QgVXBkYXRlICovCiB9CiAKIHN0YXRpYyB1MzIgc3NiX3BjaWVfcmVhZChzdHJ1Y3Qgc3NiX3BjaWNvcmUgKnBjLCB1MzIgYWRkcmVzcykKQEAgLTQ0NiwyOCArNTU3LDk4IEBACiAJcGNpY29yZV93cml0ZTMyKHBjLCAweDEzNCwgZGF0YSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNzYl9wY2llX21kaW9fd3JpdGUoc3RydWN0IHNzYl9wY2ljb3JlICpwYywgdTggZGV2aWNlLAotCQkJCXU4IGFkZHJlc3MsIHUxNiBkYXRhKQorc3RhdGljIHZvaWQgc3NiX3BjaWVfbWRpb19zZXRfcGh5KHN0cnVjdCBzc2JfcGNpY29yZSAqcGMsIHU4IHBoeSkKIHsKIAljb25zdCB1MTYgbWRpb19jb250cm9sID0gMHgxMjg7CiAJY29uc3QgdTE2IG1kaW9fZGF0YSA9IDB4MTJDOwogCXUzMiB2OwogCWludCBpOwogCisJdiA9ICgxIDw8IDMwKTsgLyogU3RhcnQgb2YgVHJhbnNhY3Rpb24gKi8KKwl2IHw9ICgxIDw8IDI4KTsgLyogV3JpdGUgVHJhbnNhY3Rpb24gKi8KKwl2IHw9ICgxIDw8IDE3KTsgLyogVHVybmFyb3VuZCAqLworCXYgfD0gKDB4MUYgPDwgMTgpOworCXYgfD0gKHBoeSA8PCA0KTsKKwlwY2ljb3JlX3dyaXRlMzIocGMsIG1kaW9fZGF0YSwgdik7CisKKwl1ZGVsYXkoMTApOworCWZvciAoaSA9IDA7IGkgPCAyMDA7IGkrKykgeworCQl2ID0gcGNpY29yZV9yZWFkMzIocGMsIG1kaW9fY29udHJvbCk7CisJCWlmICh2ICYgMHgxMDAgLyogVHJhbnMgY29tcGxldGUgKi8pCisJCQlicmVhazsKKwkJbXNsZWVwKDEpOworCX0KK30KKworc3RhdGljIHUxNiBzc2JfcGNpZV9tZGlvX3JlYWQoc3RydWN0IHNzYl9wY2ljb3JlICpwYywgdTggZGV2aWNlLCB1OCBhZGRyZXNzKQoreworCWNvbnN0IHUxNiBtZGlvX2NvbnRyb2wgPSAweDEyODsKKwljb25zdCB1MTYgbWRpb19kYXRhID0gMHgxMkM7CisJaW50IG1heF9yZXRyaWVzID0gMTA7CisJdTE2IHJldCA9IDA7CisJdTMyIHY7CisJaW50IGk7CisKIAl2ID0gMHg4MDsgLyogRW5hYmxlIFByZWFtYmxlIFNlcXVlbmNlICovCiAJdiB8PSAweDI7IC8qIE1ESU8gQ2xvY2sgRGl2aXNvciAqLwogCXBjaWNvcmVfd3JpdGUzMihwYywgbWRpb19jb250cm9sLCB2KTsKIAorCWlmIChwYy0+ZGV2LT5pZC5yZXZpc2lvbiA+PSAxMCkgeworCQltYXhfcmV0cmllcyA9IDIwMDsKKwkJc3NiX3BjaWVfbWRpb19zZXRfcGh5KHBjLCBkZXZpY2UpOworCX0KKworCXYgPSAoMSA8PCAzMCk7IC8qIFN0YXJ0IG9mIFRyYW5zYWN0aW9uICovCisJdiB8PSAoMSA8PCAyOSk7IC8qIFJlYWQgVHJhbnNhY3Rpb24gKi8KKwl2IHw9ICgxIDw8IDE3KTsgLyogVHVybmFyb3VuZCAqLworCWlmIChwYy0+ZGV2LT5pZC5yZXZpc2lvbiA8IDEwKQorCQl2IHw9ICh1MzIpZGV2aWNlIDw8IDIyOworCXYgfD0gKHUzMilhZGRyZXNzIDw8IDE4OworCXBjaWNvcmVfd3JpdGUzMihwYywgbWRpb19kYXRhLCB2KTsKKwkvKiBXYWl0IGZvciB0aGUgZGV2aWNlIHRvIGNvbXBsZXRlIHRoZSB0cmFuc2FjdGlvbiAqLworCXVkZWxheSgxMCk7CisJZm9yIChpID0gMDsgaSA8IG1heF9yZXRyaWVzOyBpKyspIHsKKwkJdiA9IHBjaWNvcmVfcmVhZDMyKHBjLCBtZGlvX2NvbnRyb2wpOworCQlpZiAodiAmIDB4MTAwIC8qIFRyYW5zIGNvbXBsZXRlICovKSB7CisJCQl1ZGVsYXkoMTApOworCQkJcmV0ID0gcGNpY29yZV9yZWFkMzIocGMsIG1kaW9fZGF0YSk7CisJCQlicmVhazsKKwkJfQorCQltc2xlZXAoMSk7CisJfQorCXBjaWNvcmVfd3JpdGUzMihwYywgbWRpb19jb250cm9sLCAwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzc2JfcGNpZV9tZGlvX3dyaXRlKHN0cnVjdCBzc2JfcGNpY29yZSAqcGMsIHU4IGRldmljZSwKKwkJCQl1OCBhZGRyZXNzLCB1MTYgZGF0YSkKK3sKKwljb25zdCB1MTYgbWRpb19jb250cm9sID0gMHgxMjg7CisJY29uc3QgdTE2IG1kaW9fZGF0YSA9IDB4MTJDOworCWludCBtYXhfcmV0cmllcyA9IDEwOworCXUzMiB2OworCWludCBpOworCisJdiA9IDB4ODA7IC8qIEVuYWJsZSBQcmVhbWJsZSBTZXF1ZW5jZSAqLworCXYgfD0gMHgyOyAvKiBNRElPIENsb2NrIERpdmlzb3IgKi8KKwlwY2ljb3JlX3dyaXRlMzIocGMsIG1kaW9fY29udHJvbCwgdik7CisKKwlpZiAocGMtPmRldi0+aWQucmV2aXNpb24gPj0gMTApIHsKKwkJbWF4X3JldHJpZXMgPSAyMDA7CisJCXNzYl9wY2llX21kaW9fc2V0X3BoeShwYywgZGV2aWNlKTsKKwl9CisKIAl2ID0gKDEgPDwgMzApOyAvKiBTdGFydCBvZiBUcmFuc2FjdGlvbiAqLwogCXYgfD0gKDEgPDwgMjgpOyAvKiBXcml0ZSBUcmFuc2FjdGlvbiAqLwogCXYgfD0gKDEgPDwgMTcpOyAvKiBUdXJuYXJvdW5kICovCi0JdiB8PSAodTMyKWRldmljZSA8PCAyMjsKKwlpZiAocGMtPmRldi0+aWQucmV2aXNpb24gPCAxMCkKKwkJdiB8PSAodTMyKWRldmljZSA8PCAyMjsKIAl2IHw9ICh1MzIpYWRkcmVzcyA8PCAxODsKIAl2IHw9IGRhdGE7CiAJcGNpY29yZV93cml0ZTMyKHBjLCBtZGlvX2RhdGEsIHYpOwogCS8qIFdhaXQgZm9yIHRoZSBkZXZpY2UgdG8gY29tcGxldGUgdGhlIHRyYW5zYWN0aW9uICovCiAJdWRlbGF5KDEwKTsKLQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBtYXhfcmV0cmllczsgaSsrKSB7CiAJCXYgPSBwY2ljb3JlX3JlYWQzMihwYywgbWRpb19jb250cm9sKTsKIAkJaWYgKHYgJiAweDEwMCAvKiBUcmFucyBjb21wbGV0ZSAqLykKIAkJCWJyZWFrOwpAQCAtNDc2LDMwICs2NTcsNiBAQAogCXBjaWNvcmVfd3JpdGUzMihwYywgbWRpb19jb250cm9sLCAwKTsKIH0KIAotc3RhdGljIHZvaWQgc3NiX2Jyb2FkY2FzdF92YWx1ZShzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2LAotCQkJCXUzMiBhZGRyZXNzLCB1MzIgZGF0YSkKLXsKLQkvKiBUaGlzIGlzIHVzZWQgZm9yIGJvdGgsIFBDSSBhbmQgQ2hpcENvbW1vbiBjb3JlLCBzbyBiZSBjYXJlZnVsLiAqLwotCUJVSUxEX0JVR19PTihTU0JfUENJQ09SRV9CQ0FTVF9BRERSICE9IFNTQl9DSElQQ09fQkNBU1RfQUREUik7Ci0JQlVJTERfQlVHX09OKFNTQl9QQ0lDT1JFX0JDQVNUX0RBVEEgIT0gU1NCX0NISVBDT19CQ0FTVF9EQVRBKTsKLQotCXNzYl93cml0ZTMyKGRldiwgU1NCX1BDSUNPUkVfQkNBU1RfQUREUiwgYWRkcmVzcyk7Ci0Jc3NiX3JlYWQzMihkZXYsIFNTQl9QQ0lDT1JFX0JDQVNUX0FERFIpOyAvKiBmbHVzaCAqLwotCXNzYl93cml0ZTMyKGRldiwgU1NCX1BDSUNPUkVfQkNBU1RfREFUQSwgZGF0YSk7Ci0Jc3NiX3JlYWQzMihkZXYsIFNTQl9QQ0lDT1JFX0JDQVNUX0RBVEEpOyAvKiBmbHVzaCAqLwotfQotCi1zdGF0aWMgdm9pZCBzc2JfY29tbWl0X3NldHRpbmdzKHN0cnVjdCBzc2JfYnVzICpidXMpCi17Ci0Jc3RydWN0IHNzYl9kZXZpY2UgKmRldjsKLQotCWRldiA9IGJ1cy0+Y2hpcGNvLmRldiA/IGJ1cy0+Y2hpcGNvLmRldiA6IGJ1cy0+cGNpY29yZS5kZXY7Ci0JaWYgKFdBUk5fT04oIWRldikpCi0JCXJldHVybjsKLQkvKiBUaGlzIGZvcmNlcyBhbiB1cGRhdGUgb2YgdGhlIGNhY2hlZCByZWdpc3RlcnMuICovCi0Jc3NiX2Jyb2FkY2FzdF92YWx1ZShkZXYsIDB4RkQ4LCAwKTsKLX0KLQogaW50IHNzYl9wY2ljb3JlX2Rldl9pcnF2ZWNzX2VuYWJsZShzdHJ1Y3Qgc3NiX3BjaWNvcmUgKnBjLAogCQkJCSAgIHN0cnVjdCBzc2JfZGV2aWNlICpkZXYpCiB7CkBAIC01NTAsNDggKzcwNywxMCBAQAogCWlmIChwYy0+c2V0dXBfZG9uZSkKIAkJZ290byBvdXQ7CiAJaWYgKHBkZXYtPmlkLmNvcmVpZCA9PSBTU0JfREVWX1BDSSkgewotCQl0bXAgPSBwY2ljb3JlX3JlYWQzMihwYywgU1NCX1BDSUNPUkVfU0JUT1BDSTIpOwotCQl0bXAgfD0gU1NCX1BDSUNPUkVfU0JUT1BDSV9QUkVGOwotCQl0bXAgfD0gU1NCX1BDSUNPUkVfU0JUT1BDSV9CVVJTVDsKLQkJcGNpY29yZV93cml0ZTMyKHBjLCBTU0JfUENJQ09SRV9TQlRPUENJMiwgdG1wKTsKLQotCQlpZiAocGRldi0+aWQucmV2aXNpb24gPCA1KSB7Ci0JCQl0bXAgPSBzc2JfcmVhZDMyKHBkZXYsIFNTQl9JTUNGR0xPKTsKLQkJCXRtcCAmPSB+U1NCX0lNQ0ZHTE9fU0VSVE87Ci0JCQl0bXAgfD0gMjsKLQkJCXRtcCAmPSB+U1NCX0lNQ0ZHTE9fUkVRVE87Ci0JCQl0bXAgfD0gMyA8PCBTU0JfSU1DRkdMT19SRVFUT19TSElGVDsKLQkJCXNzYl93cml0ZTMyKHBkZXYsIFNTQl9JTUNGR0xPLCB0bXApOwotCQkJc3NiX2NvbW1pdF9zZXR0aW5ncyhidXMpOwotCQl9IGVsc2UgaWYgKHBkZXYtPmlkLnJldmlzaW9uID49IDExKSB7Ci0JCQl0bXAgPSBwY2ljb3JlX3JlYWQzMihwYywgU1NCX1BDSUNPUkVfU0JUT1BDSTIpOwotCQkJdG1wIHw9IFNTQl9QQ0lDT1JFX1NCVE9QQ0lfTVJNOwotCQkJcGNpY29yZV93cml0ZTMyKHBjLCBTU0JfUENJQ09SRV9TQlRPUENJMiwgdG1wKTsKLQkJfQorCQlzc2JfcGNpY29yZV9wY2lfc2V0dXBfd29ya2Fyb3VuZHMocGMpOwogCX0gZWxzZSB7CiAJCVdBUk5fT04ocGRldi0+aWQuY29yZWlkICE9IFNTQl9ERVZfUENJRSk7Ci0JCS8vVE9ETzogQmV0dGVyIG1ha2UgZGVmaW5lcyBmb3IgYWxsIHRoZXNlIG1hZ2ljIFBDSUUgdmFsdWVzLgotCQlpZiAoKHBkZXYtPmlkLnJldmlzaW9uID09IDApIHx8IChwZGV2LT5pZC5yZXZpc2lvbiA9PSAxKSkgewotCQkJLyogVExQIFdvcmthcm91bmQgcmVnaXN0ZXIuICovCi0JCQl0bXAgPSBzc2JfcGNpZV9yZWFkKHBjLCAweDQpOwotCQkJdG1wIHw9IDB4ODsKLQkJCXNzYl9wY2llX3dyaXRlKHBjLCAweDQsIHRtcCk7Ci0JCX0KLQkJaWYgKHBkZXYtPmlkLnJldmlzaW9uID09IDApIHsKLQkJCWNvbnN0IHU4IHNlcmRlc19yeF9kZXZpY2UgPSAweDFGOwotCi0JCQlzc2JfcGNpZV9tZGlvX3dyaXRlKHBjLCBzZXJkZXNfcnhfZGV2aWNlLAotCQkJCQkgICAgMiAvKiBUaW1lciAqLywgMHg4MTI4KTsKLQkJCXNzYl9wY2llX21kaW9fd3JpdGUocGMsIHNlcmRlc19yeF9kZXZpY2UsCi0JCQkJCSAgICA2IC8qIENEUiAqLywgMHgwMTAwKTsKLQkJCXNzYl9wY2llX21kaW9fd3JpdGUocGMsIHNlcmRlc19yeF9kZXZpY2UsCi0JCQkJCSAgICA3IC8qIENEUiBCVyAqLywgMHgxNDY2KTsKLQkJfSBlbHNlIGlmIChwZGV2LT5pZC5yZXZpc2lvbiA9PSAxKSB7Ci0JCQkvKiBETExQIExpbmsgQ29udHJvbCByZWdpc3Rlci4gKi8KLQkJCXRtcCA9IHNzYl9wY2llX3JlYWQocGMsIDB4MTAwKTsKLQkJCXRtcCB8PSAweDQwOwotCQkJc3NiX3BjaWVfd3JpdGUocGMsIDB4MTAwLCB0bXApOwotCQl9CisJCXNzYl9wY2ljb3JlX3BjaWVfc2V0dXBfd29ya2Fyb3VuZHMocGMpOwogCX0KIAlwYy0+c2V0dXBfZG9uZSA9IDE7CiBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9tYWluLmMgYi9kcml2ZXJzL3NzYi9tYWluLmMKaW5kZXggZTA1YmE2ZS4uZjhhMTNmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvbWFpbi5jCisrKyBiL2RyaXZlcnMvc3NiL21haW4uYwpAQCAtMTExNywyMyArMTExNywyMiBAQAogewogCXUzMiByZXYgPSBzc2JfcmVhZDMyKGRldiwgU1NCX0lETE9XKSAmIFNTQl9JRExPV19TU0JSRVY7CiAKLQkvKiBUaGUgUkVKRUNUIGJpdCBjaGFuZ2VkIHBvc2l0aW9uIGluIFRNU0xPVyBiZXR3ZWVuCi0JICogQmFja3BsYW5lIHJldmlzaW9ucy4gKi8KKwkvKiBUaGUgUkVKRUNUIGJpdCBzZWVtcyB0byBiZSBkaWZmZXJlbnQgZm9yIEJhY2twbGFuZSByZXYgMi4zICovCiAJc3dpdGNoIChyZXYpIHsKIAljYXNlIFNTQl9JRExPV19TU0JSRVZfMjI6Ci0JCXJldHVybiBTU0JfVE1TTE9XX1JFSkVDVF8yMjsKKwljYXNlIFNTQl9JRExPV19TU0JSRVZfMjQ6CisJY2FzZSBTU0JfSURMT1dfU1NCUkVWXzI2OgorCQlyZXR1cm4gU1NCX1RNU0xPV19SRUpFQ1Q7CiAJY2FzZSBTU0JfSURMT1dfU1NCUkVWXzIzOgogCQlyZXR1cm4gU1NCX1RNU0xPV19SRUpFQ1RfMjM7Ci0JY2FzZSBTU0JfSURMT1dfU1NCUkVWXzI0OiAgICAgLyogVE9ETyAtIGZpbmQgdGhlIHByb3BlciBSRUpFQ1QgYml0cyAqLwotCWNhc2UgU1NCX0lETE9XX1NTQlJFVl8yNTogICAgIC8qIHNhbWUgaGVyZSAqLwotCWNhc2UgU1NCX0lETE9XX1NTQlJFVl8yNjogICAgIC8qIHNhbWUgaGVyZSAqLworCWNhc2UgU1NCX0lETE9XX1NTQlJFVl8yNTogICAgIC8qIFRPRE8gLSBmaW5kIHRoZSBwcm9wZXIgUkVKRUNUIGJpdCAqLwogCWNhc2UgU1NCX0lETE9XX1NTQlJFVl8yNzogICAgIC8qIHNhbWUgaGVyZSAqLwotCQlyZXR1cm4gU1NCX1RNU0xPV19SRUpFQ1RfMjM7CS8qIHRoaXMgaXMgYSBndWVzcyAqLworCQlyZXR1cm4gU1NCX1RNU0xPV19SRUpFQ1Q7CS8qIHRoaXMgaXMgYSBndWVzcyAqLwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0lORk8gInNzYjogQmFja3BsYW5lIFJldmlzaW9uIDB4JS44WFxuIiwgcmV2KTsKIAkJV0FSTl9PTigxKTsKIAl9Ci0JcmV0dXJuIChTU0JfVE1TTE9XX1JFSkVDVF8yMiB8IFNTQl9UTVNMT1dfUkVKRUNUXzIzKTsKKwlyZXR1cm4gKFNTQl9UTVNMT1dfUkVKRUNUIHwgU1NCX1RNU0xPV19SRUpFQ1RfMjMpOwogfQogCiBpbnQgc3NiX2RldmljZV9pc19lbmFibGVkKHN0cnVjdCBzc2JfZGV2aWNlICpkZXYpCkBAIC0xMzA5LDIwICsxMzA4LDIwIEBACiAKIGludCBzc2JfYnVzX3Bvd2VydXAoc3RydWN0IHNzYl9idXMgKmJ1cywgYm9vbCBkeW5hbWljX3BjdGwpCiB7Ci0Jc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYzsKIAlpbnQgZXJyOwogCWVudW0gc3NiX2Nsa21vZGUgbW9kZTsKIAogCWVyciA9IHNzYl9wY2lfeHRhbChidXMsIFNTQl9HUElPX1hUQUwgfCBTU0JfR1BJT19QTEwsIDEpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyb3I7Ci0JY2MgPSAmYnVzLT5jaGlwY287Ci0JbW9kZSA9IGR5bmFtaWNfcGN0bCA/IFNTQl9DTEtNT0RFX0RZTkFNSUMgOiBTU0JfQ0xLTU9ERV9GQVNUOwotCXNzYl9jaGlwY29fc2V0X2Nsb2NrbW9kZShjYywgbW9kZSk7CiAKICNpZmRlZiBDT05GSUdfU1NCX0RFQlVHCiAJYnVzLT5wb3dlcmVkX3VwID0gMTsKICNlbmRpZgorCisJbW9kZSA9IGR5bmFtaWNfcGN0bCA/IFNTQl9DTEtNT0RFX0RZTkFNSUMgOiBTU0JfQ0xLTU9ERV9GQVNUOworCXNzYl9jaGlwY29fc2V0X2Nsb2NrbW9kZSgmYnVzLT5jaGlwY28sIG1vZGUpOworCiAJcmV0dXJuIDA7CiBlcnJvcjoKIAlzc2JfcHJpbnRrKEtFUk5fRVJSIFBGWCAiQnVzIHBvd2VydXAgZmFpbGVkXG4iKTsKQEAgLTEzMzAsNiArMTMyOSwzNyBAQAogfQogRVhQT1JUX1NZTUJPTChzc2JfYnVzX3Bvd2VydXApOwogCitzdGF0aWMgdm9pZCBzc2JfYnJvYWRjYXN0X3ZhbHVlKHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsCisJCQkJdTMyIGFkZHJlc3MsIHUzMiBkYXRhKQoreworI2lmZGVmIENPTkZJR19TU0JfRFJJVkVSX1BDSUNPUkUKKwkvKiBUaGlzIGlzIHVzZWQgZm9yIGJvdGgsIFBDSSBhbmQgQ2hpcENvbW1vbiBjb3JlLCBzbyBiZSBjYXJlZnVsLiAqLworCUJVSUxEX0JVR19PTihTU0JfUENJQ09SRV9CQ0FTVF9BRERSICE9IFNTQl9DSElQQ09fQkNBU1RfQUREUik7CisJQlVJTERfQlVHX09OKFNTQl9QQ0lDT1JFX0JDQVNUX0RBVEEgIT0gU1NCX0NISVBDT19CQ0FTVF9EQVRBKTsKKyNlbmRpZgorCisJc3NiX3dyaXRlMzIoZGV2LCBTU0JfQ0hJUENPX0JDQVNUX0FERFIsIGFkZHJlc3MpOworCXNzYl9yZWFkMzIoZGV2LCBTU0JfQ0hJUENPX0JDQVNUX0FERFIpOyAvKiBmbHVzaCAqLworCXNzYl93cml0ZTMyKGRldiwgU1NCX0NISVBDT19CQ0FTVF9EQVRBLCBkYXRhKTsKKwlzc2JfcmVhZDMyKGRldiwgU1NCX0NISVBDT19CQ0FTVF9EQVRBKTsgLyogZmx1c2ggKi8KK30KKwordm9pZCBzc2JfY29tbWl0X3NldHRpbmdzKHN0cnVjdCBzc2JfYnVzICpidXMpCit7CisJc3RydWN0IHNzYl9kZXZpY2UgKmRldjsKKworI2lmZGVmIENPTkZJR19TU0JfRFJJVkVSX1BDSUNPUkUKKwlkZXYgPSBidXMtPmNoaXBjby5kZXYgPyBidXMtPmNoaXBjby5kZXYgOiBidXMtPnBjaWNvcmUuZGV2OworI2Vsc2UKKwlkZXYgPSBidXMtPmNoaXBjby5kZXY7CisjZW5kaWYKKwlpZiAoV0FSTl9PTighZGV2KSkKKwkJcmV0dXJuOworCS8qIFRoaXMgZm9yY2VzIGFuIHVwZGF0ZSBvZiB0aGUgY2FjaGVkIHJlZ2lzdGVycy4gKi8KKwlzc2JfYnJvYWRjYXN0X3ZhbHVlKGRldiwgMHhGRDgsIDApOworfQorRVhQT1JUX1NZTUJPTChzc2JfY29tbWl0X3NldHRpbmdzKTsKKwogdTMyIHNzYl9hZG1hdGNoX2Jhc2UodTMyIGFkbSkKIHsKIAl1MzIgYmFzZSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9zY2FuLmMgYi9kcml2ZXJzL3NzYi9zY2FuLmMKaW5kZXggMjk4ODRjMC4uNDVlNWJhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2Ivc2Nhbi5jCisrKyBiL2RyaXZlcnMvc3NiL3NjYW4uYwpAQCAtMjU4LDcgKzI1OCwxMCBAQAogI2lmZGVmIENPTkZJR19TU0JfUENJSE9TVAogCWlmIChidXMtPmJ1c3R5cGUgPT0gU1NCX0JVU1RZUEVfUENJKSB7CiAJCWlmIChidXMtPmhvc3RfcGNpLT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9CUk9BRENPTSAmJgotCQkgICAgYnVzLT5ob3N0X3BjaS0+ZGV2aWNlID09IDB4NDMyNCkKKwkJICAgICgoYnVzLT5ob3N0X3BjaS0+ZGV2aWNlID09IDB4NDMxMykgfHwKKwkJICAgICAoYnVzLT5ob3N0X3BjaS0+ZGV2aWNlID09IDB4NDMxQSkgfHwKKwkJICAgICAoYnVzLT5ob3N0X3BjaS0+ZGV2aWNlID09IDB4NDMyMSkgfHwKKwkJICAgICAoYnVzLT5ob3N0X3BjaS0+ZGV2aWNlID09IDB4NDMyNCkpKQogCQkJcmV0dXJuIDE7CiAJfQogI2VuZGlmIC8qIENPTkZJR19TU0JfUENJSE9TVCAqLwpAQCAtMzA3LDcgKzMxMCw3IEBACiAJfSBlbHNlIHsKIAkJaWYgKGJ1cy0+YnVzdHlwZSA9PSBTU0JfQlVTVFlQRV9QQ0kpIHsKIAkJCWJ1cy0+Y2hpcF9pZCA9IHBjaWRldl90b19jaGlwaWQoYnVzLT5ob3N0X3BjaSk7Ci0JCQlwY2lfcmVhZF9jb25maWdfd29yZChidXMtPmhvc3RfcGNpLCBQQ0lfUkVWSVNJT05fSUQsCisJCQlwY2lfcmVhZF9jb25maWdfYnl0ZShidXMtPmhvc3RfcGNpLCBQQ0lfUkVWSVNJT05fSUQsCiAJCQkJCSAgICAgJmJ1cy0+Y2hpcF9yZXYpOwogCQkJYnVzLT5jaGlwX3BhY2thZ2UgPSAwOwogCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwppbmRleCBlMzc4NmYxLi5kZmMxNmY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwpAQCAtNjcsMTAgKzY3LDYgQEAKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL0tjb25maWciCiAKLXNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9LY29uZmlnIgotCi1zb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9ydDI4NzAvS2NvbmZpZyIKLQogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvY29tZWRpL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9LY29uZmlnIgpAQCAtMTc3LDUgKzE3Myw5IEBACiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2FsdGVyYS1zdGFwbC9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9tZWkvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3N0YWdpbmcvbnZlYy9LY29uZmlnIgorCiBlbmRpZiAjICFTVEFHSU5HX0VYQ0xVREVfQlVJTEQKIGVuZGlmICMgU1RBR0lORwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCmluZGV4IGYwZDVjNTMuLmZhNDFiOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKQEAgLTEyLDEzICsxMiwxMiBAQAogb2JqLSQoQ09ORklHX1ZJREVPX1RNNjAwMCkJKz0gdG02MDAwLwogb2JqLSQoQ09ORklHX0RWQl9DWEQyMDk5KQkrPSBjeGQyMDk5Lwogb2JqLSQoQ09ORklHX0xJUkNfU1RBR0lORykJKz0gbGlyYy8KLW9iai0kKENPTkZJR19VU0JfSVBfQ09NTU9OKQkrPSB1c2JpcC8KK29iai0kKENPTkZJR19VU0JJUF9DT1JFKQkrPSB1c2JpcC8KIG9iai0kKENPTkZJR19XMzVVTkQpCQkrPSB3aW5ib25kLwogb2JqLSQoQ09ORklHX1BSSVNNMl9VU0IpCSs9IHdsYW4tbmcvCiBvYmotJChDT05GSUdfRUNITykJCSs9IGVjaG8vCi1vYmotJChDT05GSUdfQlJDTTgwMjExKQkJKz0gYnJjbTgwMjExLwotb2JqLSQoQ09ORklHX1JUMjg2MCkJCSs9IHJ0Mjg2MC8KLW9iai0kKENPTkZJR19SVDI4NzApCQkrPSBydDI4NzAvCitvYmotJChDT05GSUdfQlJDTVNNQUMpCQkrPSBicmNtODAyMTEvCitvYmotJChDT05GSUdfQlJDTUZNQUMpCQkrPSBicmNtODAyMTEvCiBvYmotJChDT05GSUdfQ09NRURJKQkJKz0gY29tZWRpLwogb2JqLSQoQ09ORklHX0ZCX09MUENfRENPTikJKz0gb2xwY19kY29uLwogb2JqLSQoQ09ORklHX0FTVVNfT0xFRCkJCSs9IGFzdXNfb2xlZC8KQEAgLTcwLDMgKzY5LDUgQEAKIG9iai0kKENPTkZJR19UT1VDSFNDUkVFTl9DTEVBUlBBRF9UTTEyMTcpCSs9IGNwdG0xMjE3Lwogb2JqLSQoQ09ORklHX1RPVUNIU0NSRUVOX1NZTkFQVElDU19JMkNfUk1JNCkJKz0gc3RlX3JtaTQvCiBvYmotJChDT05GSUdfRFJNX1BTQikJCSs9IGdtYTUwMC8KK29iai0kKENPTkZJR19JTlRFTF9NRUkpCQkrPSBtZWkvCitvYmotJChDT05GSUdfTUZEX05WRUMpCQkrPSBudmVjLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9LY29uZmlnCmluZGV4IDhhNWNhYTMuLjFmMTVlMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL0tjb25maWcKQEAgLTEwMCwxMiArMTAwLDYgQEAKIAloZWxwCiAJV0xBTiBHUElPIHRvIGJlIHVzZWQgZm9yIHJlc2V0dGluZyBCVAogCi1jb25maWcgQVRINktMX0NGRzgwMjExCi0JYm9vbCAiQ0ZHODAyMTEgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEFUSDZLX0xFR0FDWSAmJiBDRkc4MDIxMQotCWhlbHAKLQlFbmFibGVzIHN1cHBvcnQgZm9yIENGRzgwMjExIEFQSXMuIFRoZSBkZWZhdWx0IG9wdGlvbiBpcyB0byB1c2UgV0VYVC4gRXZlbiB3aXRoIHRoaXMgb3B0aW9uIGVuYWJsZWQsIFdFWFQgaXMgbm90IGV4cGxpY2l0bHkgZGlzYWJsZWQgYW5kIHRoZSBvbnVzIG9mIG5vdCBleGVyY2lzaW5nIFdFWFQgbGllcyBvbiB0aGUgYXBwbGljYXRpb24ocykgcnVubmluZyBpbiB0aGUgdXNlciBzcGFjZS4KLQogY29uZmlnIEFUSDZLTF9IVENfUkFXX0lOVEVSRkFDRQogCWJvb2wgIlJBVyBIVEMgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFUSDZLX0xFR0FDWQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvTWFrZWZpbGUKaW5kZXggYWI2ODA3OC4uMWQzZjIzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL01ha2VmaWxlCkBAIC0yOSwyNiArMjksNiBAQAogY2NmbGFncy15ICs9IC1JJChvYmopL2JtaS9pbmNsdWRlCiBjY2ZsYWdzLXkgKz0gLUkkKG9iaikvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3NC4wCiAKLWlmZXEgKCQoQ09ORklHX0FSNjAweF9TRDMxX1hYWCkseSkKLWNjZmxhZ3MteSArPSAtREFSNjAweF9TRDMxX1hYWAotZW5kaWYKLQotaWZlcSAoJChDT05GSUdfQVI2MDB4X1dCMzFfWFhYKSx5KQotY2NmbGFncy15ICs9IC1EQVI2MDB4X1dCMzFfWFhYCi1lbmRpZgotCi1pZmVxICgkKENPTkZJR19BUjYwMHhfU0QzMl9YWFgpLHkpCi1jY2ZsYWdzLXkgKz0gLURBUjYwMHhfU0QzMl9YWFgKLWVuZGlmCi0KLWlmZXEgKCQoQ09ORklHX0FSNjAweF9DVVNUT01fWFhYKSx5KQotY2NmbGFncy15ICs9IC1EQVI2MDB4X0NVU1RPTV9YWFgKLWVuZGlmCi0KLWlmZXEgKCQoQ09ORklHX0FUSDZLTF9FTkFCTEVfQ09FWElTVEVOQ0UpLHkpCi1jY2ZsYWdzLXkgKz0gLURFTkFCTEVfQ09FWElTVEVOQ0UKLWVuZGlmCi0KIGlmZXEgKCQoQ09ORklHX0FSNjAweF9EVUFMX0FOVEVOTkEpLHkpCiBjY2ZsYWdzLXkgKz0gLURBUjYwMHhfRFVBTF9BTlRFTk5BCiBlbmRpZgpAQCAtODUsMTEgKzY1LDYgQEAKIGNjZmxhZ3MteSArPSAtREFUSDZLTF9DT05GSUdfR1BJT19CVF9SRVNFVAogZW5kaWYKIAotaWZlcSAoJChDT05GSUdfQVRINktMX0NGRzgwMjExKSx5KQotY2NmbGFncy15ICs9IC1EQVRINktfQ09ORklHX0NGRzgwMjExCi1hdGg2a2wteSArPSBvcy9saW51eC9jZmc4MDIxMS5vCi1lbmRpZgotCiBpZmVxICgkKENPTkZJR19BVEg2S0xfSFRDX1JBV19JTlRFUkZBQ0UpLHkpCiBjY2ZsYWdzLXkgKz0gLURIVENfUkFXX0lOVEVSRkFDRQogZW5kaWYKQEAgLTExNSwxOCArOTAsOCBAQAogY2NmbGFncy15ICs9IC1EQVRINktMX1NLSVBfQUJJX1ZFUlNJT05fQ0hFQ0sKIGVuZGlmCiAKLWNjZmxhZ3MteSArPSAtRExJTlVYIC1ES0VSTkVMXzJfNgotY2NmbGFncy15ICs9IC1EVENNRAotY2NmbGFncy15ICs9IC1EU0VORF9FVkVOVF9UT19BUFAKLWNjZmxhZ3MteSArPSAtRFVTRVJfS0VZUwotY2NmbGFncy15ICs9IC1ETk9fU1lOQ19GTFVTSAotY2NmbGFncy15ICs9IC1ESFRDX0VQX1NUQVRfUFJPRklMSU5HCi1jY2ZsYWdzLXkgKz0gLURBVEhfQVI2S18xMU5fU1VQUE9SVAogY2NmbGFncy15ICs9IC1EV0FQSV9FTkFCTEUKIGNjZmxhZ3MteSArPSAtRENIRUNLU1VNX09GRkxPQUQKLWNjZmxhZ3MteSArPSAtRFdMQU5fSEVBREVSUwotY2NmbGFncy15ICs9IC1ESU5JVF9NT0RFX0RSVl9FTkFCTEVECi1jY2ZsYWdzLXkgKz0gLURCTUlFTkFCTEVfU0VUCiAKIG9iai0kKENPTkZJR19BVEg2S19MRUdBQ1kpIDo9IGF0aDZrbC5vCiBhdGg2a2wteSArPSBodGMyL0FSNjAwMC9hcjZrLm8KQEAgLTEzNiwxNCArMTAxLDEyIEBACiBhdGg2a2wteSArPSBodGMyL2h0Y19zZXJ2aWNlcy5vCiBhdGg2a2wteSArPSBodGMyL2h0Yy5vCiBhdGg2a2wteSArPSBibWkvc3JjL2JtaS5vCithdGg2a2wteSArPSBvcy9saW51eC9jZmc4MDIxMS5vCiBhdGg2a2wteSArPSBvcy9saW51eC9hcjYwMDBfZHJ2Lm8KIGF0aDZrbC15ICs9IG9zL2xpbnV4L2FyNjAwMF9yYXdfaWYubwogYXRoNmtsLXkgKz0gb3MvbGludXgvYXI2MDAwX3BtLm8KIGF0aDZrbC15ICs9IG9zL2xpbnV4L25ldGJ1Zi5vCi1hdGg2a2wteSArPSBvcy9saW51eC93aXJlbGVzc19leHQubwotYXRoNmtsLXkgKz0gb3MvbGludXgvaW9jdGwubwogYXRoNmtsLXkgKz0gb3MvbGludXgvaGNpX2JyaWRnZS5vCi1hdGg2a2wteSArPSBvcy9saW51eC9hcjZrX3BhbC5vCiBhdGg2a2wteSArPSBtaXNjZHJ2L2NvbW1vbl9kcnYubwogYXRoNmtsLXkgKz0gbWlzY2Rydi9jcmVkaXRfZGlzdC5vCiBhdGg2a2wteSArPSB3bWkvd21pLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvYm1pL2luY2x1ZGUvYm1pX2ludGVybmFsLmggYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2JtaS9pbmNsdWRlL2JtaV9pbnRlcm5hbC5oCmluZGV4IDZhZTJlYTcuLjhlMjU3NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvYm1pL2luY2x1ZGUvYm1pX2ludGVybmFsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9ibWkvaW5jbHVkZS9ibWlfaW50ZXJuYWwuaApAQCAtMjYsMTEgKzI2LDEwIEBACiAKICNpbmNsdWRlICJhX2NvbmZpZy5oIgogI2luY2x1ZGUgImF0aGRlZnMuaCIKLSNpbmNsdWRlICJhX3R5cGVzLmgiCiAjaW5jbHVkZSAiYV9vc2FwaS5oIgogI2RlZmluZSBBVEhfTU9EVUxFX05BTUUgYm1pCiAjaW5jbHVkZSAiYV9kZWJ1Zy5oIgotI2luY2x1ZGUgIkFSNjAwMi9odzIuMC9ody9tYm94X2hvc3RfcmVnLmgiCisjaW5jbHVkZSAiaHcvbWJveF9ob3N0X3JlZy5oIgogI2luY2x1ZGUgImJtaV9tc2cuaCIKIAogI2RlZmluZSBBVEhfREVCVUdfQk1JICBBVEhfREVCVUdfTUFLRV9NT0RVTEVfTUFTSygwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9ibWkvc3JjL2JtaS5jIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9ibWkvc3JjL2JtaS5jCmluZGV4IDkyNjhiZjMuLmYxZjA4NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvYm1pL3NyYy9ibWkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2JtaS9zcmMvYm1pLmMKQEAgLTk1LDEyICs5NSwxMiBAQAogQk1JQ2xlYW51cCh2b2lkKQogewogICAgIGlmIChwQk1JQ21kQ3JlZGl0cykgewotICAgICAgICBBX0ZSRUUocEJNSUNtZENyZWRpdHMpOworICAgICAgICBrZnJlZShwQk1JQ21kQ3JlZGl0cyk7CiAgICAgICAgIHBCTUlDbWRDcmVkaXRzID0gTlVMTDsKICAgICB9CiAKICAgICBpZiAocEJNSUNtZEJ1ZikgewotICAgICAgICBBX0ZSRUUocEJNSUNtZEJ1Zik7CisgICAgICAgIGtmcmVlKHBCTUlDbWRCdWYpOwogICAgICAgICBwQk1JQ21kQnVmID0gTlVMTDsKICAgICB9CiB9CkBAIC0xMjcsMTIgKzEyNywxMiBAQAogICAgIH0KIAogICAgIGlmIChwQk1JQ21kQ3JlZGl0cykgewotICAgICAgICBBX0ZSRUUocEJNSUNtZENyZWRpdHMpOworICAgICAgICBrZnJlZShwQk1JQ21kQ3JlZGl0cyk7CiAgICAgICAgIHBCTUlDbWRDcmVkaXRzID0gTlVMTDsKICAgICB9CiAKICAgICBpZiAocEJNSUNtZEJ1ZikgewotICAgICAgICBBX0ZSRUUocEJNSUNtZEJ1Zik7CisgICAgICAgIGtmcmVlKHBCTUlDbWRCdWYpOwogICAgICAgICBwQk1JQ21kQnVmID0gTlVMTDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaGlmL3NkaW8vbGludXhfc2Rpby9pbmNsdWRlL2hpZl9pbnRlcm5hbC5oIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9oaWYvc2Rpby9saW51eF9zZGlvL2luY2x1ZGUvaGlmX2ludGVybmFsLmgKaW5kZXggNjM0MTU2MC4uZWQ3YWQ0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9oaWYvc2Rpby9saW51eF9zZGlvL2luY2x1ZGUvaGlmX2ludGVybmFsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9oaWYvc2Rpby9saW51eF9zZGlvL2luY2x1ZGUvaGlmX2ludGVybmFsLmgKQEAgLTI3LDcgKzI3LDYgQEAKIAogI2luY2x1ZGUgImFfY29uZmlnLmgiCiAjaW5jbHVkZSAiYXRoZGVmcy5oIgotI2luY2x1ZGUgImFfdHlwZXMuaCIKICNpbmNsdWRlICJhX29zYXBpLmgiCiAjaW5jbHVkZSAiaGlmLmgiCiAjaW5jbHVkZSAiLi4vLi4vLi4vY29tbW9uL2hpZl9zZGlvX2NvbW1vbi5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9oaWYvc2Rpby9saW51eF9zZGlvL3NyYy9oaWYuYyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaGlmL3NkaW8vbGludXhfc2Rpby9zcmMvaGlmLmMKaW5kZXggZTZkOWNkOC4uNWY1ZDY3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9oaWYvc2Rpby9saW51eF9zZGlvL3NyYy9oaWYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2hpZi9zZGlvL2xpbnV4X3NkaW8vc3JjL2hpZi5jCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSAiaGlmX2ludGVybmFsLmgiCiAjZGVmaW5lIEFUSF9NT0RVTEVfTkFNRSBoaWYKICNpbmNsdWRlICJhX2RlYnVnLmgiCi0jaW5jbHVkZSAiQVI2MDAyL2h3Mi4wL2h3L21ib3hfaG9zdF9yZWcuaCIKKyNpbmNsdWRlICJody9tYm94X2hvc3RfcmVnLmgiCiAKICNpZiBISUZfVVNFX0RNQV9CT1VOQ0VfQlVGRkVSCiAvKiBtYWNybyB0byBjaGVjayBpZiBETUEgYnVmZmVyIGlzIFdPUkQtYWxpZ25lZCBhbmQgRE1BLWFibGUuICBNb3N0IGhvc3QgY29udHJvbGxlcnMgYXNzdW1lIHRoZQpAQCAtNTMsNjIgKzUzLDE4OSBAQAogI2lmIGRlZmluZWQoQ09ORklHX1BNKQogI2RlZmluZSBkZXZfdG9fc2Rpb19mdW5jKGQpCWNvbnRhaW5lcl9vZihkLCBzdHJ1Y3Qgc2Rpb19mdW5jLCBkZXYpCiAjZGVmaW5lIHRvX3NkaW9fZHJpdmVyKGQpICAgICAgY29udGFpbmVyX29mKGQsIHN0cnVjdCBzZGlvX2RyaXZlciwgZHJ2KQotc3RhdGljIGludCBoaWZEZXZpY2VTdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGhpZkRldmljZVJlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogI2VuZGlmIC8qIENPTkZJR19QTSAqLwotc3RhdGljIGludCBoaWZEZXZpY2VJbnNlcnRlZChzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jLCBjb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgKmlkKTsKLXN0YXRpYyB2b2lkIGhpZkRldmljZVJlbW92ZWQoc3RydWN0IHNkaW9fZnVuYyAqZnVuYyk7Ci1zdGF0aWMgc3RydWN0IGhpZl9kZXZpY2UgKmFkZEhpZkRldmljZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKTsKLXN0YXRpYyBzdHJ1Y3QgaGlmX2RldmljZSAqZ2V0SGlmRGV2aWNlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpOwogc3RhdGljIHZvaWQgZGVsSGlmRGV2aWNlKHN0cnVjdCBoaWZfZGV2aWNlICogZGV2aWNlKTsKIHN0YXRpYyBpbnQgRnVuYzBfQ01ENTJXcml0ZUJ5dGUoc3RydWN0IG1tY19jYXJkICpjYXJkLCB1bnNpZ25lZCBpbnQgYWRkcmVzcywgdW5zaWduZWQgY2hhciBieXRlKTsKIHN0YXRpYyBpbnQgRnVuYzBfQ01ENTJSZWFkQnl0ZShzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQsIHVuc2lnbmVkIGludCBhZGRyZXNzLCB1bnNpZ25lZCBjaGFyICpieXRlKTsKIAorc3RhdGljIGludCBoaWZFbmFibGVGdW5jKHN0cnVjdCBoaWZfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpOworc3RhdGljIGludCBoaWZEaXNhYmxlRnVuYyhzdHJ1Y3QgaGlmX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKTsKK09TRFJWX0NBTExCQUNLUyBvc2RydkNhbGxiYWNrczsKKwogaW50IHJlc2V0X3NkaW9fb25fdW5sb2FkID0gMDsKIG1vZHVsZV9wYXJhbShyZXNldF9zZGlvX29uX3VubG9hZCwgaW50LCAwNjQ0KTsKIAogZXh0ZXJuIHUzMiBub2hpZnNjYXR0ZXJzdXBwb3J0OwogCitzdGF0aWMgc3RydWN0IGhpZl9kZXZpY2UgKmF0aDZrbF9hbGxvY19oaWZkZXYoc3RydWN0IHNkaW9fZnVuYyAqZnVuYykKK3sKKwlzdHJ1Y3QgaGlmX2RldmljZSAqaGlmZGV2aWNlOwogCi0vKiAtLS0tLS0gU3RhdGljIFZhcmlhYmxlcyAtLS0tLS0gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgYXI2a19pZF90YWJsZVtdID0gewotICAgIHsgIFNESU9fREVWSUNFKE1BTlVGQUNUVVJFUl9DT0RFLCAoTUFOVUZBQ1RVUkVSX0lEX0FSNjAwMl9CQVNFIHwgMHgwKSkgIH0sCi0gICAgeyAgU0RJT19ERVZJQ0UoTUFOVUZBQ1RVUkVSX0NPREUsIChNQU5VRkFDVFVSRVJfSURfQVI2MDAyX0JBU0UgfCAweDEpKSAgfSwKLSAgICB7ICBTRElPX0RFVklDRShNQU5VRkFDVFVSRVJfQ09ERSwgKE1BTlVGQUNUVVJFUl9JRF9BUjYwMDNfQkFTRSB8IDB4MCkpICB9LAotICAgIHsgIFNESU9fREVWSUNFKE1BTlVGQUNUVVJFUl9DT0RFLCAoTUFOVUZBQ1RVUkVSX0lEX0FSNjAwM19CQVNFIHwgMHgxKSkgIH0sCi0gICAgeyAvKiBudWxsICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUoc2RpbywgYXI2a19pZF90YWJsZSk7CisJaGlmZGV2aWNlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhpZl9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAotc3RhdGljIHN0cnVjdCBzZGlvX2RyaXZlciBhcjZrX2RyaXZlciA9IHsKLQkubmFtZSA9ICJhcjZrX3dsYW4iLAotCS5pZF90YWJsZSA9IGFyNmtfaWRfdGFibGUsCi0JLnByb2JlID0gaGlmRGV2aWNlSW5zZXJ0ZWQsCi0JLnJlbW92ZSA9IGhpZkRldmljZVJlbW92ZWQsCisjaWYgSElGX1VTRV9ETUFfQk9VTkNFX0JVRkZFUgorCWhpZmRldmljZS0+ZG1hX2J1ZmZlciA9IGttYWxsb2MoSElGX0RNQV9CVUZGRVJfU0laRSwgR0ZQX0tFUk5FTCk7CisjZW5kaWYKKwloaWZkZXZpY2UtPmZ1bmMgPSBmdW5jOworCWhpZmRldmljZS0+cG93ZXJDb25maWcgPSBISUZfREVWSUNFX1BPV0VSX1VQOworCXNkaW9fc2V0X2RydmRhdGEoZnVuYywgaGlmZGV2aWNlKTsKKworCXJldHVybiBoaWZkZXZpY2U7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaGlmX2RldmljZSAqYXRoNmtsX2dldF9oaWZkZXYoc3RydWN0IHNkaW9fZnVuYyAqZnVuYykKK3sKKwlyZXR1cm4gKHN0cnVjdCBoaWZfZGV2aWNlICopIHNkaW9fZ2V0X2RydmRhdGEoZnVuYyk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgYXRoNmtsX2hpZmRldl9pZHNbXSA9IHsKKwl7IFNESU9fREVWSUNFKE1BTlVGQUNUVVJFUl9DT0RFLCAoTUFOVUZBQ1RVUkVSX0lEX0FSNjAwMl9CQVNFIHwgMHgwKSkgfSwKKwl7IFNESU9fREVWSUNFKE1BTlVGQUNUVVJFUl9DT0RFLCAoTUFOVUZBQ1RVUkVSX0lEX0FSNjAwMl9CQVNFIHwgMHgxKSkgfSwKKwl7IFNESU9fREVWSUNFKE1BTlVGQUNUVVJFUl9DT0RFLCAoTUFOVUZBQ1RVUkVSX0lEX0FSNjAwM19CQVNFIHwgMHgwKSkgfSwKKwl7IFNESU9fREVWSUNFKE1BTlVGQUNUVVJFUl9DT0RFLCAoTUFOVUZBQ1RVUkVSX0lEX0FSNjAwM19CQVNFIHwgMHgxKSkgfSwKKwl7IC8qIG51bGwgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiB9OwogCitNT0RVTEVfREVWSUNFX1RBQkxFKHNkaW8sIGF0aDZrbF9oaWZkZXZfaWRzKTsKKworc3RhdGljIGludCBhdGg2a2xfaGlmZGV2X3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHNkaW9fZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBoaWZfZGV2aWNlICpkZXZpY2U7CisJaW50IGNvdW50OworCisJQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19UUkFDRSwKKwkJCSgiYXRoNmtsOiBGdW5jdGlvbjogMHglWCwgVmVuZG9yIElEOiAweCVYLCAiCisJCQkgIkRldmljZSBJRDogMHglWCwgYmxvY2sgc2l6ZTogMHglWC8weCVYXG4iLAorCQkJZnVuYy0+bnVtLCBmdW5jLT52ZW5kb3IsIGZ1bmMtPmRldmljZSwKKwkJCWZ1bmMtPm1heF9ibGtzaXplLCBmdW5jLT5jdXJfYmxrc2l6ZSkpOworCisJYXRoNmtsX2FsbG9jX2hpZmRldihmdW5jKTsKKwlkZXZpY2UgPSBhdGg2a2xfZ2V0X2hpZmRldihmdW5jKTsKKworCWRldmljZS0+aWQgPSBpZDsKKwlkZXZpY2UtPmlzX2Rpc2FibGVkID0gdHJ1ZTsKKworCXNwaW5fbG9ja19pbml0KCZkZXZpY2UtPmxvY2spOworCXNwaW5fbG9ja19pbml0KCZkZXZpY2UtPmFzeW5jbG9jayk7CisKKwlETF9MSVNUX0lOSVQoJmRldmljZS0+U2NhdHRlclJlcUhlYWQpOworCisJLyogVHJ5IHRvIGFsbG93IHNjYXR0ZXIgdW5sZXNzIGdsb2JhbGx5IG92ZXJyaWRkZW4gKi8KKwlpZiAoIW5vaGlmc2NhdHRlcnN1cHBvcnQpCisJCWRldmljZS0+c2NhdHRlcl9lbmFibGVkID0gdHJ1ZTsKKworCUFfTUVNWkVSTyhkZXZpY2UtPmJ1c1JlcXVlc3QsIHNpemVvZihkZXZpY2UtPmJ1c1JlcXVlc3QpKTsKKworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IEJVU19SRVFVRVNUX01BWF9OVU07IGNvdW50KyspIHsKKwkJc2VtYV9pbml0KCZkZXZpY2UtPmJ1c1JlcXVlc3RbY291bnRdLnNlbV9yZXEsIDApOworCQloaWZGcmVlQnVzUmVxdWVzdChkZXZpY2UsICZkZXZpY2UtPmJ1c1JlcXVlc3RbY291bnRdKTsKKwl9CisKKwlzZW1hX2luaXQoJmRldmljZS0+c2VtX2FzeW5jLCAwKTsKKworCXJldCA9IGhpZkVuYWJsZUZ1bmMoZGV2aWNlLCBmdW5jKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGF0aDZrbF9oaWZkZXZfcmVtb3ZlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGhpZl9kZXZpY2UgKmRldmljZTsKKworCWRldmljZSA9IGF0aDZrbF9nZXRfaGlmZGV2KGZ1bmMpOworCWlmIChkZXZpY2UtPmNsYWltZWRDb250ZXh0ICE9IE5VTEwpCisJCXN0YXR1cyA9IG9zZHJ2Q2FsbGJhY2tzLgorCQkJZGV2aWNlUmVtb3ZlZEhhbmRsZXIoZGV2aWNlLT5jbGFpbWVkQ29udGV4dCwgZGV2aWNlKTsKKworCWlmIChkZXZpY2UtPmlzX2Rpc2FibGVkKQorCQlkZXZpY2UtPmlzX2Rpc2FibGVkID0gZmFsc2U7CisJZWxzZQorCQlzdGF0dXMgPSBoaWZEaXNhYmxlRnVuYyhkZXZpY2UsIGZ1bmMpOworCisJQ2xlYW51cEhJRlNjYXR0ZXJSZXNvdXJjZXMoZGV2aWNlKTsKKworCWRlbEhpZkRldmljZShkZXZpY2UpOworfQorCiAjaWYgZGVmaW5lZChDT05GSUdfUE0pCi0vKiBOZXcgc3VzcGVuZC9yZXN1bWUgYmFzZWQgb24gbGludXgtMi42LjMyCi0gKiBOZWVkIHRvIHBhdGNoIGxpbnV4LTIuNi4zMiB3aXRoIG1tYzIuNi4zMl9zdXNwZW5kLnBhdGNoCi0gKiBOZWVkIHRvIHBhdGNoIHdpdGggbXNtc2RjYzIuNi4yOV9zdXNwZW5kLnBhdGNoIGZvciBtc21fc2RjYyBob3N0Ci0gICAgICovCi1zdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgYXI2a19kZXZpY2VfcG1fb3BzID0gewotCS5zdXNwZW5kID0gaGlmRGV2aWNlU3VzcGVuZCwKLQkucmVzdW1lID0gaGlmRGV2aWNlUmVzdW1lLAorc3RhdGljIGludCBhdGg2a2xfaGlmZGV2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMgPSBkZXZfdG9fc2Rpb19mdW5jKGRldik7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGhpZl9kZXZpY2UgKmRldmljZTsKKworCWRldmljZSA9IGF0aDZrbF9nZXRfaGlmZGV2KGZ1bmMpOworCisJaWYgKGRldmljZSAmJiBkZXZpY2UtPmNsYWltZWRDb250ZXh0ICYmCisJICAgIG9zZHJ2Q2FsbGJhY2tzLmRldmljZVN1c3BlbmRIYW5kbGVyKSB7CisJCS8qIHNldCB0cnVlIGZpcnN0IGZvciBQb3dlclN0YXRlQ2hhbmdlTm90aWZ5KC4uKSAqLworCQlkZXZpY2UtPmlzX3N1c3BlbmQgPSB0cnVlOworCQlzdGF0dXMgPSBvc2RydkNhbGxiYWNrcy4KKwkJCWRldmljZVN1c3BlbmRIYW5kbGVyKGRldmljZS0+Y2xhaW1lZENvbnRleHQpOworCQlpZiAoc3RhdHVzKQorCQkJZGV2aWNlLT5pc19zdXNwZW5kID0gZmFsc2U7CisJfQorCisJQ2xlYW51cEhJRlNjYXR0ZXJSZXNvdXJjZXMoZGV2aWNlKTsKKworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSAwOgorCQlyZXR1cm4gMDsKKwljYXNlIEFfRUJVU1k6CisJCS8qIEhhY2sgZm9yIGtlcm5lbCBpbiBvcmRlciB0byBzdXBwb3J0IGRlZXAgc2xlZXAgYW5kIHdvdyAqLworCQlyZXR1cm4gLUVCVVNZOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYXRoNmtsX2hpZmRldl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMgPSBkZXZfdG9fc2Rpb19mdW5jKGRldik7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGhpZl9kZXZpY2UgKmRldmljZTsKKworCWRldmljZSA9IGF0aDZrbF9nZXRfaGlmZGV2KGZ1bmMpOworCWlmIChkZXZpY2UgJiYgZGV2aWNlLT5jbGFpbWVkQ29udGV4dCAmJgorCSAgICBvc2RydkNhbGxiYWNrcy5kZXZpY2VTdXNwZW5kSGFuZGxlcikgeworCQlzdGF0dXMgPSBvc2RydkNhbGxiYWNrcy4KKwkJCWRldmljZVJlc3VtZUhhbmRsZXIoZGV2aWNlLT5jbGFpbWVkQ29udGV4dCk7CisJCWlmIChzdGF0dXMgPT0gMCkKKwkJCWRldmljZS0+aXNfc3VzcGVuZCA9IGZhbHNlOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBhdGg2a2xfaGlmZGV2X3Btb3BzID0geworCS5zdXNwZW5kID0gYXRoNmtsX2hpZmRldl9zdXNwZW5kLAorCS5yZXN1bWUgPSBhdGg2a2xfaGlmZGV2X3Jlc3VtZSwKIH07CiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKK3N0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgYXRoNmtsX2hpZmRldl9kcml2ZXIgPSB7CisJLm5hbWUgPSAiYXRoNmtsX2hpZmRldiIsCisJLmlkX3RhYmxlID0gYXRoNmtsX2hpZmRldl9pZHMsCisJLnByb2JlID0gYXRoNmtsX2hpZmRldl9wcm9iZSwKKwkucmVtb3ZlID0gYXRoNmtsX2hpZmRldl9yZW1vdmUsCisjaWYgZGVmaW5lZChDT05GSUdfUE0pCisJLmRydiA9IHsKKwkJLnBtID0gJmF0aDZrbF9oaWZkZXZfcG1vcHMsCisJfSwKKyNlbmRpZgorfTsKKwogLyogbWFrZSBzdXJlIHdlIG9ubHkgdW5yZWdpc3RlciB3aGVuIHJlZ2lzdGVyZWQuICovCiBzdGF0aWMgaW50IHJlZ2lzdGVyZWQgPSAwOwogCi1PU0RSVl9DQUxMQkFDS1Mgb3NkcnZDYWxsYmFja3M7CiBleHRlcm4gdTMyIG9uZWJpdG1vZGU7CiBleHRlcm4gdTMyIGJ1c3NwZWVkbG93OwogZXh0ZXJuIHUzMiBkZWJ1Z2hpZjsKIAogc3RhdGljIHZvaWQgUmVzZXRBbGxDYXJkcyh2b2lkKTsKLXN0YXRpYyBpbnQgaGlmRGlzYWJsZUZ1bmMoc3RydWN0IGhpZl9kZXZpY2UgKmRldmljZSwgc3RydWN0IHNkaW9fZnVuYyAqZnVuYyk7Ci1zdGF0aWMgaW50IGhpZkVuYWJsZUZ1bmMoc3RydWN0IGhpZl9kZXZpY2UgKmRldmljZSwgc3RydWN0IHNkaW9fZnVuYyAqZnVuYyk7CiAKICNpZmRlZiBERUJVRwogCkBAIC0xMjUsMzEgKzI1MiwyMiBAQAogLyogLS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0gKi8KIGludCBISUZJbml0KE9TRFJWX0NBTExCQUNLUyAqY2FsbGJhY2tzKQogewotICAgIGludCBzdGF0dXM7Ci0gICAgQVJfREVCVUdfQVNTRVJUKGNhbGxiYWNrcyAhPSBOVUxMKTsKKwlpbnQgcjsKKwlBUl9ERUJVR19BU1NFUlQoY2FsbGJhY2tzICE9IE5VTEwpOwogCi0gICAgQV9SRUdJU1RFUl9NT0RVTEVfREVCVUdfSU5GTyhoaWYpOworCUFfUkVHSVNURVJfTU9EVUxFX0RFQlVHX0lORk8oaGlmKTsKIAotICAgIC8qIHN0b3JlIHRoZSBjYWxsYmFjayBoYW5kbGVycyAqLwotICAgIG9zZHJ2Q2FsbGJhY2tzID0gKmNhbGxiYWNrczsKKwkvKiBzdG9yZSB0aGUgY2FsbGJhY2sgaGFuZGxlcnMgKi8KKwlvc2RydkNhbGxiYWNrcyA9ICpjYWxsYmFja3M7CiAKLSAgICAvKiBSZWdpc3RlciB3aXRoIGJ1cyBkcml2ZXIgY29yZSAqLwotICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfVFJBQ0UsICgiQVI2MDAwOiBISUZJbml0IHJlZ2lzdGVyaW5nXG4iKSk7Ci0gICAgcmVnaXN0ZXJlZCA9IDE7Ci0jaWYgZGVmaW5lZChDT05GSUdfUE0pCi0gICAgaWYgKGNhbGxiYWNrcy0+ZGV2aWNlU3VzcGVuZEhhbmRsZXIgJiYgY2FsbGJhY2tzLT5kZXZpY2VSZXN1bWVIYW5kbGVyKSB7Ci0gICAgICAgIGFyNmtfZHJpdmVyLmRydi5wbSA9ICZhcjZrX2RldmljZV9wbV9vcHM7Ci0gICAgfQotI2VuZGlmIC8qIENPTkZJR19QTSAqLwotICAgIHN0YXR1cyA9IHNkaW9fcmVnaXN0ZXJfZHJpdmVyKCZhcjZrX2RyaXZlcik7Ci0gICAgQVJfREVCVUdfQVNTRVJUKHN0YXR1cz09MCk7CisJLyogUmVnaXN0ZXIgd2l0aCBidXMgZHJpdmVyIGNvcmUgKi8KKwlyZWdpc3RlcmVkID0gMTsKIAotICAgIGlmIChzdGF0dXMgIT0gMCkgewotICAgICAgICByZXR1cm4gQV9FUlJPUjsKLSAgICB9CisJciA9IHNkaW9fcmVnaXN0ZXJfZHJpdmVyKCZhdGg2a2xfaGlmZGV2X2RyaXZlcik7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKIAotICAgIHJldHVybiAwOwotCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTc2Myw3ICs4ODEsNyBAQAogICAgICAgICAgICAgcmVnaXN0ZXJlZCA9IDA7CiAgICAgICAgICAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX1RSQUNFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiQVI2MDAwOiBVbnJlZ2lzdGVyaW5nIHdpdGggdGhlIGJ1cyBkcml2ZXJcbiIpKTsKLSAgICAgICAgICAgIHNkaW9fdW5yZWdpc3Rlcl9kcml2ZXIoJmFyNmtfZHJpdmVyKTsKKyAgICAgICAgICAgIHNkaW9fdW5yZWdpc3Rlcl9kcml2ZXIoJmF0aDZrbF9oaWZkZXZfZHJpdmVyKTsKICAgICAgICAgICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfVFJBQ0UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJBUjYwMDA6IFVucmVnaXN0ZXJlZFxuIikpOwogICAgICAgICB9CkBAIC03NzgsNyArODk2LDcgQEAKICAgICBzdHJ1Y3QgaGlmX2RldmljZSAqZGV2aWNlOwogICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfVFJBQ0UsICgiQVI2MDAwOiAraGlmSVJRSGFuZGxlclxuIikpOwogCi0gICAgZGV2aWNlID0gZ2V0SGlmRGV2aWNlKGZ1bmMpOworICAgIGRldmljZSA9IGF0aDZrbF9nZXRfaGlmZGV2KGZ1bmMpOwogICAgIGF0b21pY19zZXQoJmRldmljZS0+aXJxSGFuZGxpbmcsIDEpOwogICAgIC8qIHJlbGVhc2UgdGhlIGhvc3QgZHVyaW5nIGludHMgc28gd2UgY2FuIHBpY2sgaXQgYmFjayB1cCB3aGVuIHdlIHByb2Nlc3MgY21kcyAqLwogICAgIHNkaW9fcmVsZWFzZV9ob3N0KGRldmljZS0+ZnVuYyk7CkBAIC04MjMsNDggKzk0MSw2IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBoaWZEZXZpY2VJbnNlcnRlZChzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jLCBjb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgKmlkKQotewotICAgIGludCByZXQ7Ci0gICAgc3RydWN0IGhpZl9kZXZpY2UgKiBkZXZpY2U7Ci0gICAgaW50IGNvdW50OwotCi0gICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19UUkFDRSwKLQkJICAgICgiQVI2MDAwOiBoaWZEZXZpY2VJbnNlcnRlZCwgRnVuY3Rpb246IDB4JVgsIFZlbmRvciBJRDogMHglWCwgRGV2aWNlIElEOiAweCVYLCBibG9jayBzaXplOiAweCVYLzB4JVhcbiIsCi0JCSAgICAgZnVuYy0+bnVtLCBmdW5jLT52ZW5kb3IsIGZ1bmMtPmRldmljZSwgZnVuYy0+bWF4X2Jsa3NpemUsIGZ1bmMtPmN1cl9ibGtzaXplKSk7Ci0KLSAgICBhZGRIaWZEZXZpY2UoZnVuYyk7Ci0gICAgZGV2aWNlID0gZ2V0SGlmRGV2aWNlKGZ1bmMpOwotCi0gICAgZGV2aWNlLT5pZCA9IGlkOwotICAgIGRldmljZS0+aXNfZGlzYWJsZWQgPSB0cnVlOwotCi0gICAgc3Bpbl9sb2NrX2luaXQoJmRldmljZS0+bG9jayk7Ci0KLSAgICBzcGluX2xvY2tfaW5pdCgmZGV2aWNlLT5hc3luY2xvY2spOwotICAgIAotICAgIERMX0xJU1RfSU5JVCgmZGV2aWNlLT5TY2F0dGVyUmVxSGVhZCk7Ci0gICAgCi0gICAgaWYgKCFub2hpZnNjYXR0ZXJzdXBwb3J0KSB7Ci0gICAgICAgICAgICAvKiB0cnkgdG8gYWxsb3cgc2NhdHRlciBvcGVyYXRpb24gb24gYWxsIGluc3RhbmNlcywKLSAgICAgICAgICAgICAqIHVubGVzcyBnbG9iYWxseSBvdmVycmlkZGVuICovCi0gICAgICAgIGRldmljZS0+c2NhdHRlcl9lbmFibGVkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvKiBJbml0aWFsaXplIHRoZSBidXMgcmVxdWVzdHMgdG8gYmUgdXNlZCBsYXRlciAqLwotICAgIEFfTUVNWkVSTyhkZXZpY2UtPmJ1c1JlcXVlc3QsIHNpemVvZihkZXZpY2UtPmJ1c1JlcXVlc3QpKTsKLSAgICBmb3IgKGNvdW50ID0gMDsgY291bnQgPCBCVVNfUkVRVUVTVF9NQVhfTlVNOyBjb3VudCArKykgewotICAgICAgICBzZW1hX2luaXQoJmRldmljZS0+YnVzUmVxdWVzdFtjb3VudF0uc2VtX3JlcSwgMCk7Ci0gICAgICAgIGhpZkZyZWVCdXNSZXF1ZXN0KGRldmljZSwgJmRldmljZS0+YnVzUmVxdWVzdFtjb3VudF0pOwotICAgIH0KLSAgICBzZW1hX2luaXQoJmRldmljZS0+c2VtX2FzeW5jLCAwKTsKLSAgICAKLSAgICByZXQgID0gaGlmRW5hYmxlRnVuYyhkZXZpY2UsIGZ1bmMpOwotCi0gICAgcmV0dXJuIHJldDsKLX0KLQotCiB2b2lkCiBISUZBY2tJbnRlcnJ1cHQoc3RydWN0IGhpZl9kZXZpY2UgKmRldmljZSkKIHsKQEAgLTk1NSw3ICsxMDMxLDcgQEAKICAgICBpbnQgc3RhdHVzID0gMDsKIAogICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfVFJBQ0UsICgiQVI2MDAwOiAraGlmRGlzYWJsZUZ1bmNcbiIpKTsKLSAgICBkZXZpY2UgPSBnZXRIaWZEZXZpY2UoZnVuYyk7CisgICAgZGV2aWNlID0gYXRoNmtsX2dldF9oaWZkZXYoZnVuYyk7CiAgICAgaWYgKCFJU19FUlIoZGV2aWNlLT5hc3luY190YXNrKSkgewogICAgICAgICBpbml0X2NvbXBsZXRpb24oJmRldmljZS0+YXN5bmNfY29tcGxldGlvbik7CiAgICAgICAgIGRldmljZS0+YXN5bmNfc2h1dGRvd24gPSAxOwpAQCAtMTAwNCw3ICsxMDgwLDcgQEAKICAgICBpbnQgcmV0ID0gMDsKICAgICAKICAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX1RSQUNFLCAoIkFSNjAwMDogK2hpZkVuYWJsZUZ1bmNcbiIpKTsKLSAgICBkZXZpY2UgPSBnZXRIaWZEZXZpY2UoZnVuYyk7CisgICAgZGV2aWNlID0gYXRoNmtsX2dldF9oaWZkZXYoZnVuYyk7CiAKICAgICBpZiAoZGV2aWNlLT5pc19kaXNhYmxlZCkgewogICAgICAgIC8qIGVuYWJsZSB0aGUgU0RJTyBmdW5jdGlvbiAqLwpAQCAtMTAxNiw3ICsxMDkyLDcgQEAKICAgICAgICAgICAgIGlmIChyZXQpIHsKICAgICAgICAgICAgICAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX0VSUiwgKCJBUjYwMDA6IGZhaWxlZCB0byBlbmFibGUgNC1iaXQgQVNZTkMgSVJRIG1vZGUgJWQgXG4iLHJldCkpOwogICAgICAgICAgICAgICAgIHNkaW9fcmVsZWFzZV9ob3N0KGZ1bmMpOwotICAgICAgICAgICAgICAgIHJldHVybiBBX0VSUk9SOworICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX1RSQUNFLCAoIkFSNjAwMDogNC1iaXQgQVNZTkMgSVJRIG1vZGUgZW5hYmxlZFxuIikpOwogICAgICAgICB9CkBAIC0xMDI3LDE0ICsxMTAzLDE0IEBACiAgICAgICAgICAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX0VSUk9SLCAoIkFSNjAwMDogJXMoKSwgVW5hYmxlIHRvIGVuYWJsZSBBUjZLOiAweCVYXG4iLAogCQkJCQkgIF9fRlVOQ1RJT05fXywgcmV0KSk7CiAgICAgICAgICAgICBzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTsKLSAgICAgICAgICAgIHJldHVybiBBX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICAgfQogICAgICAgICByZXQgPSBzZGlvX3NldF9ibG9ja19zaXplKGZ1bmMsIEhJRl9NQk9YX0JMT0NLX1NJWkUpOwogICAgICAgICBzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTsKICAgICAgICAgaWYgKHJldCkgewogICAgICAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19FUlJPUiwgKCJBUjYwMDA6ICVzKCksIFVuYWJsZSB0byBzZXQgYmxvY2sgc2l6ZSAweCV4ICBBUjZLOiAweCVYXG4iLAogCQkJCQkgIF9fRlVOQ1RJT05fXywgSElGX01CT1hfQkxPQ0tfU0laRSwgcmV0KSk7Ci0gICAgICAgICAgICByZXR1cm4gQV9FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgIH0KICAgICAgICAgZGV2aWNlLT5pc19kaXNhYmxlZCA9IGZhbHNlOwogICAgICAgICAvKiBjcmVhdGUgYXN5bmMgSS9PIHRocmVhZCAqLwpAQCAtMTA0NSw3ICsxMTIxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQVI2SyBBc3luYyIpOwogICAgICAgICAgICBpZiAoSVNfRVJSKGRldmljZS0+YXN5bmNfdGFzaykpIHsKICAgICAgICAgICAgICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfRVJST1IsICgiQVI2MDAwOiAlcygpLCB0byBjcmVhdGUgYXN5bmMgdGFza1xuIiwgX19GVU5DVElPTl9fKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFfRVJST1I7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19UUkFDRSwgKCJBUjYwMDA6IHN0YXJ0IGFzeW5jIHRhc2tcbiIpKTsKICAgICAgICAgICAgd2FrZV91cF9wcm9jZXNzKGRldmljZS0+YXN5bmNfdGFzayApOyAgICAKQEAgLTEwNjAsMTQgKzExMzYsMTQgQEAKICAgICB9IGVsc2UgewogICAgICAgICB0YXNrRnVuYyA9IGVuYWJsZV90YXNrOwogICAgICAgICB0YXNrTmFtZSA9ICJBUjZLIGVuYWJsZSI7Ci0gICAgICAgIHJldCA9IEFfUEVORElORzsKKyAgICAgICAgcmV0ID0gLUVOT01FTTsKICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KICAgICB9CiAgICAgLyogY3JlYXRlIHJlc3VtZSB0aHJlYWQgKi8KICAgICBwVGFzayA9IGt0aHJlYWRfY3JlYXRlKHRhc2tGdW5jLCAodm9pZCAqKWRldmljZSwgdGFza05hbWUpOwogICAgIGlmIChJU19FUlIocFRhc2spKSB7CiAgICAgICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfRVJST1IsICgiQVI2MDAwOiAlcygpLCB0byBjcmVhdGUgZW5hYmVsIHRhc2tcbiIsIF9fRlVOQ1RJT05fXykpOwotICAgICAgICByZXR1cm4gQV9FUlJPUjsKKyAgICAgICAgcmV0dXJuIC1FTk9NRU07CiAgICAgfQogICAgIHdha2VfdXBfcHJvY2VzcyhwVGFzayk7CiAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19UUkFDRSwgKCJBUjYwMDA6IC1oaWZFbmFibGVGdW5jXG4iKSk7CkBAIC0xMDc2LDc5ICsxMTUyLDYgQEAKICAgICByZXR1cm4gcmV0OwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfUE0pCi1zdGF0aWMgaW50IGhpZkRldmljZVN1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQotewotICAgIHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmM9ZGV2X3RvX3NkaW9fZnVuYyhkZXYpOwotICAgIGludCBzdGF0dXMgPSAwOwotICAgIHN0cnVjdCBoaWZfZGV2aWNlICpkZXZpY2U7ICAgCi0KLSAgICBkZXZpY2UgPSBnZXRIaWZEZXZpY2UoZnVuYyk7Ci0gICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19UUkFDRSwgKCJBUjYwMDA6ICtoaWZEZXZpY2VTdXNwZW5kXG4iKSk7Ci0gICAgaWYgKGRldmljZSAmJiBkZXZpY2UtPmNsYWltZWRDb250ZXh0ICYmIG9zZHJ2Q2FsbGJhY2tzLmRldmljZVN1c3BlbmRIYW5kbGVyKSB7Ci0gICAgICAgIGRldmljZS0+aXNfc3VzcGVuZCA9IHRydWU7IC8qIHNldCB0cnVlIGZpcnN0IGZvciBQb3dlclN0YXRlQ2hhbmdlTm90aWZ5KC4uKSAqLwotICAgICAgICBzdGF0dXMgPSBvc2RydkNhbGxiYWNrcy5kZXZpY2VTdXNwZW5kSGFuZGxlcihkZXZpY2UtPmNsYWltZWRDb250ZXh0KTsKLSAgICAgICAgaWYgKHN0YXR1cykgewotICAgICAgICAgICAgZGV2aWNlLT5pc19zdXNwZW5kID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgQ2xlYW51cEhJRlNjYXR0ZXJSZXNvdXJjZXMoZGV2aWNlKTsKLSAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX1RSQUNFLCAoIkFSNjAwMDogLWhpZkRldmljZVN1c3BlbmRcbiIpKTsKLQotICAgIHN3aXRjaCAoc3RhdHVzKSB7Ci0gICAgY2FzZSAwOgotICAgICAgICByZXR1cm4gMDsKLSAgICBjYXNlIEFfRUJVU1k6Ci0gICAgICAgIHJldHVybiAtRUJVU1k7IC8qIEhhY2sgZm9yIGtlcm5lbCBpbiBvcmRlciB0byBzdXBwb3J0IGRlZXAgc2xlZXAgYW5kIHdvdyAqLwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbnQgaGlmRGV2aWNlUmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLSAgICBzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jPWRldl90b19zZGlvX2Z1bmMoZGV2KTsKLSAgICBpbnQgc3RhdHVzID0gMDsKLSAgICBzdHJ1Y3QgaGlmX2RldmljZSAqZGV2aWNlOyAgIAotCi0gICAgZGV2aWNlID0gZ2V0SGlmRGV2aWNlKGZ1bmMpOwotICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfVFJBQ0UsICgiQVI2MDAwOiAraGlmRGV2aWNlUmVzdW1lXG4iKSk7Ci0gICAgaWYgKGRldmljZSAmJiBkZXZpY2UtPmNsYWltZWRDb250ZXh0ICYmIG9zZHJ2Q2FsbGJhY2tzLmRldmljZVN1c3BlbmRIYW5kbGVyKSB7Ci0gICAgICAgIHN0YXR1cyA9IG9zZHJ2Q2FsbGJhY2tzLmRldmljZVJlc3VtZUhhbmRsZXIoZGV2aWNlLT5jbGFpbWVkQ29udGV4dCk7Ci0gICAgICAgIGlmIChzdGF0dXMgPT0gMCkgewotICAgICAgICAgICAgZGV2aWNlLT5pc19zdXNwZW5kID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19UUkFDRSwgKCJBUjYwMDA6IC1oaWZEZXZpY2VSZXN1bWVcbiIpKTsKLQotICAgIHJldHVybiBzdGF0dXM7Ci19Ci0jZW5kaWYgLyogQ09ORklHX1BNICovCi0KLXN0YXRpYyB2b2lkIGhpZkRldmljZVJlbW92ZWQoc3RydWN0IHNkaW9fZnVuYyAqZnVuYykKLXsKLSAgICBpbnQgc3RhdHVzID0gMDsKLSAgICBzdHJ1Y3QgaGlmX2RldmljZSAqZGV2aWNlOwotICAgIEFSX0RFQlVHX0FTU0VSVChmdW5jICE9IE5VTEwpOwotCi0gICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19UUkFDRSwgKCJBUjYwMDA6ICtoaWZEZXZpY2VSZW1vdmVkXG4iKSk7Ci0gICAgZGV2aWNlID0gZ2V0SGlmRGV2aWNlKGZ1bmMpOwotICAgIGlmIChkZXZpY2UtPmNsYWltZWRDb250ZXh0ICE9IE5VTEwpIHsKLSAgICAgICAgc3RhdHVzID0gb3NkcnZDYWxsYmFja3MuZGV2aWNlUmVtb3ZlZEhhbmRsZXIoZGV2aWNlLT5jbGFpbWVkQ29udGV4dCwgZGV2aWNlKTsKLSAgICB9Ci0KLSAgICBpZiAoZGV2aWNlLT5pc19kaXNhYmxlZCkgewotICAgICAgICBkZXZpY2UtPmlzX2Rpc2FibGVkID0gZmFsc2U7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdHVzID0gaGlmRGlzYWJsZUZ1bmMoZGV2aWNlLCBmdW5jKTsKLSAgICB9Ci0gICAgQ2xlYW51cEhJRlNjYXR0ZXJSZXNvdXJjZXMoZGV2aWNlKTsKLSAgICAgCi0gICAgZGVsSGlmRGV2aWNlKGRldmljZSk7Ci0gICAgQVJfREVCVUdfQVNTRVJUKHN0YXR1cyA9PSAwKTsKLSAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX1RSQUNFLCAoIkFSNjAwMDogLWhpZkRldmljZVJlbW92ZWRcbiIpKTsKLX0KLQogLyoKICAqIFRoaXMgc2hvdWxkIGJlIG1vdmVkIHRvIEFSNksgSFRDIGxheWVyLgogICovCkBAIC0xMTgyLDMzICsxMTg1LDYgQEAKICAgICByZXR1cm4gMDsKIH0KICAgICAKLQotc3RhdGljIHN0cnVjdCBoaWZfZGV2aWNlICoKLWFkZEhpZkRldmljZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKQotewotICAgIHN0cnVjdCBoaWZfZGV2aWNlICpoaWZkZXZpY2U7Ci0gICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19UUkFDRSwgKCJBUjYwMDA6IGFkZEhpZkRldmljZVxuIikpOwotICAgIEFSX0RFQlVHX0FTU0VSVChmdW5jICE9IE5VTEwpOwotICAgIGhpZmRldmljZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWZfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7Ci0gICAgQVJfREVCVUdfQVNTRVJUKGhpZmRldmljZSAhPSBOVUxMKTsKLSNpZiBISUZfVVNFX0RNQV9CT1VOQ0VfQlVGRkVSCi0gICAgaGlmZGV2aWNlLT5kbWFfYnVmZmVyID0ga21hbGxvYyhISUZfRE1BX0JVRkZFUl9TSVpFLCBHRlBfS0VSTkVMKTsKLSAgICBBUl9ERUJVR19BU1NFUlQoaGlmZGV2aWNlLT5kbWFfYnVmZmVyICE9IE5VTEwpOwotI2VuZGlmCi0gICAgaGlmZGV2aWNlLT5mdW5jID0gZnVuYzsKLSAgICBoaWZkZXZpY2UtPnBvd2VyQ29uZmlnID0gSElGX0RFVklDRV9QT1dFUl9VUDsKLSAgICBzZGlvX3NldF9kcnZkYXRhKGZ1bmMsIGhpZmRldmljZSk7Ci0gICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19UUkFDRSwgKCJBUjYwMDA6IGFkZEhpZkRldmljZTsgMHglcFxuIiwgaGlmZGV2aWNlKSk7Ci0gICAgcmV0dXJuIGhpZmRldmljZTsKLX0KLQotc3RhdGljIHN0cnVjdCBoaWZfZGV2aWNlICoKLWdldEhpZkRldmljZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKQotewotICAgIEFSX0RFQlVHX0FTU0VSVChmdW5jICE9IE5VTEwpOwotICAgIHJldHVybiAoc3RydWN0IGhpZl9kZXZpY2UgKilzZGlvX2dldF9kcnZkYXRhKGZ1bmMpOwotfQotCiBzdGF0aWMgdm9pZAogZGVsSGlmRGV2aWNlKHN0cnVjdCBoaWZfZGV2aWNlICogZGV2aWNlKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9oaWYvc2Rpby9saW51eF9zZGlvL3NyYy9oaWZfc2NhdHRlci5jIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9oaWYvc2Rpby9saW51eF9zZGlvL3NyYy9oaWZfc2NhdHRlci5jCmluZGV4IGExZmRjYzEuLjc1MTZkOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaGlmL3NkaW8vbGludXhfc2Rpby9zcmMvaGlmX3NjYXR0ZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2hpZi9zZGlvL2xpbnV4X3NkaW8vc3JjL2hpZl9zY2F0dGVyLmMKQEAgLTMwOSw3ICszMDksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTUFYX1NDQVRURVJfRU5UUklFU19QRVJfUkVRIC0gMSkgKiAoc2l6ZW9mKHN0cnVjdCBoaWZfc2NhdHRlcl9pdGVtKSkpOyAKICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoTlVMTCA9PSBwUmVxUHJpdi0+cEhpZlNjYXR0ZXJSZXEpIHsKLSAgICAgICAgICAgICAgICBBX0ZSRUUocFJlcVByaXYpOworICAgICAgICAgICAgICAgIGtmcmVlKHBSZXFQcml2KTsKICAgICAgICAgICAgICAgICBicmVhazsgICAgICAKICAgICAgICAgICAgIH0gICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8qIGp1c3QgemVybyB0aGUgbWFpbiBwYXJ0IG9mIHRoZSBzY2F0dGVyIHJlcXVlc3QgKi8KQEAgLTMxOSw4ICszMTksOCBAQAogICAgICAgICAgICAgICAgIC8qIGFsbG9jYXRlIGEgYnVzIHJlcXVlc3QgZm9yIHRoaXMgc2NhdHRlciByZXF1ZXN0ICovCiAgICAgICAgICAgICBidXNyZXF1ZXN0ID0gaGlmQWxsb2NhdGVCdXNSZXF1ZXN0KGRldmljZSk7CiAgICAgICAgICAgICBpZiAoTlVMTCA9PSBidXNyZXF1ZXN0KSB7Ci0gICAgICAgICAgICAgICAgQV9GUkVFKHBSZXFQcml2LT5wSGlmU2NhdHRlclJlcSk7Ci0gICAgICAgICAgICAgICAgQV9GUkVFKHBSZXFQcml2KTsKKyAgICAgICAgICAgICAgICBrZnJlZShwUmVxUHJpdi0+cEhpZlNjYXR0ZXJSZXEpOworICAgICAgICAgICAgICAgIGtmcmVlKHBSZXFQcml2KTsKICAgICAgICAgICAgICAgICBicmVhazsgICAgCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLyogYXNzaWduIHRoZSBzY2F0dGVyIHJlcXVlc3QgdG8gdGhpcyBidXMgcmVxdWVzdCAqLwpAQCAtMzgyLDExICszODIsMTEgQEAKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKHBSZXFQcml2LT5wSGlmU2NhdHRlclJlcSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBBX0ZSRUUocFJlcVByaXYtPnBIaWZTY2F0dGVyUmVxKTsgICAKKyAgICAgICAgICAgIGtmcmVlKHBSZXFQcml2LT5wSGlmU2NhdHRlclJlcSk7ICAgCiAgICAgICAgICAgICBwUmVxUHJpdi0+cEhpZlNjYXR0ZXJSZXEgPSBOVUxMOyAKICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICBBX0ZSRUUocFJlcVByaXYpOyAgICAgICAKKyAgICAgICAga2ZyZWUocFJlcVByaXYpOyAgICAgICAKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaHRjMi9BUjYwMDAvYXI2ay5jIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9odGMyL0FSNjAwMC9hcjZrLmMKaW5kZXggZWVkZGY2MC4uZjg2MDdiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9odGMyL0FSNjAwMC9hcjZrLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9odGMyL0FSNjAwMC9hcjZrLmMKQEAgLTI1LDggKzI1LDcgQEAKIAogI2luY2x1ZGUgImFfY29uZmlnLmgiCiAjaW5jbHVkZSAiYXRoZGVmcy5oIgotI2luY2x1ZGUgImFfdHlwZXMuaCIKLSNpbmNsdWRlICJBUjYwMDIvaHcyLjAvaHcvbWJveF9ob3N0X3JlZy5oIgorI2luY2x1ZGUgImh3L21ib3hfaG9zdF9yZWcuaCIKICNpbmNsdWRlICJhX29zYXBpLmgiCiAjaW5jbHVkZSAiLi4vaHRjX2RlYnVnLmgiCiAjaW5jbHVkZSAiaGlmLmgiCkBAIC03NDMsNyArNzQyLDcgQEAKICAgICAgICAgaWYgKE5VTEwgPT0gcFJlcSkgewogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgQV9GUkVFKHBSZXEpOworICAgICAgICBrZnJlZShwUmVxKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaHRjMi9BUjYwMDAvYXI2ay5oIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9odGMyL0FSNjAwMC9hcjZrLmgKaW5kZXggMWZmMjIxOC4uZTU1MWRiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9odGMyL0FSNjAwMC9hcjZrLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9odGMyL0FSNjAwMC9hcjZrLmgKQEAgLTQyLDcgKzQyLDYgQEAKIAogLy8jZGVmaW5lIE1CT1hIV19VTklUX1RFU1QgMQogCi0jaW5jbHVkZSAiYXRoc3RhcnRwYWNrLmgiCiBQUkVQQUNLIHN0cnVjdCBhcjZrX2lycV9wcm9jX3JlZ2lzdGVycyB7CiAgICAgdTggaG9zdF9pbnRfc3RhdHVzOwogICAgIHU4IGNwdV9pbnRfc3RhdHVzOwpAQCAtNjksOCArNjgsNiBAQAogICAgIHU4IGludF9zdGF0dXNfZW5hYmxlOwogfSBQT1NUUEFDSzsKIAotI2luY2x1ZGUgImF0aGVuZHBhY2suaCIKLQogI2RlZmluZSBBUjZLX0lSUV9FTkFCTEVfUkVHU19TSVpFIHNpemVvZihzdHJ1Y3QgYXI2a19pcnFfZW5hYmxlX3JlZ2lzdGVycykKIAogI2RlZmluZSBBUjZLX1JFR19JT19CVUZGRVJfU0laRSAgICAgMzIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaHRjMi9BUjYwMDAvYXI2a19ldmVudHMuYyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaHRjMi9BUjYwMDAvYXI2a19ldmVudHMuYwppbmRleCA1ZTZkMWUwLi5kN2FmNjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2h0YzIvQVI2MDAwL2FyNmtfZXZlbnRzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9odGMyL0FSNjAwMC9hcjZrX2V2ZW50cy5jCkBAIC0yNSw4ICsyNSw3IEBACiAKICNpbmNsdWRlICJhX2NvbmZpZy5oIgogI2luY2x1ZGUgImF0aGRlZnMuaCIKLSNpbmNsdWRlICJhX3R5cGVzLmgiCi0jaW5jbHVkZSAiQVI2MDAyL2h3Mi4wL2h3L21ib3hfaG9zdF9yZWcuaCIKKyNpbmNsdWRlICJody9tYm94X2hvc3RfcmVnLmgiCiAjaW5jbHVkZSAiYV9vc2FwaS5oIgogI2luY2x1ZGUgIi4uL2h0Y19kZWJ1Zy5oIgogI2luY2x1ZGUgImhpZi5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9odGMyL0FSNjAwMC9hcjZrX2dtYm94LmMgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2h0YzIvQVI2MDAwL2FyNmtfZ21ib3guYwppbmRleCAzNzQwMDExLi43MjU1NDBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2h0YzIvQVI2MDAwL2FyNmtfZ21ib3guYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2h0YzIvQVI2MDAwL2FyNmtfZ21ib3guYwpAQCAtMjQsNyArMjQsNiBAQAogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICNpbmNsdWRlICJhX2NvbmZpZy5oIgogI2luY2x1ZGUgImF0aGRlZnMuaCIKLSNpbmNsdWRlICJhX3R5cGVzLmgiCiAjaW5jbHVkZSAiYV9vc2FwaS5oIgogI2luY2x1ZGUgIi4uL2h0Y19kZWJ1Zy5oIgogI2luY2x1ZGUgImhpZi5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9odGMyL0FSNjAwMC9hcjZrX2dtYm94X2hjaXVhcnQuYyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaHRjMi9BUjYwMDAvYXI2a19nbWJveF9oY2l1YXJ0LmMKaW5kZXggNDEyMjNmOS4uNTZhMGQ3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9odGMyL0FSNjAwMC9hcjZrX2dtYm94X2hjaXVhcnQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2h0YzIvQVI2MDAwL2FyNmtfZ21ib3hfaGNpdWFydC5jCkBAIC0yNCw3ICsyNCw2IEBACiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogI2luY2x1ZGUgImFfY29uZmlnLmgiCiAjaW5jbHVkZSAiYXRoZGVmcy5oIgotI2luY2x1ZGUgImFfdHlwZXMuaCIKICNpbmNsdWRlICJhX29zYXBpLmgiCiAjaW5jbHVkZSAiLi4vaHRjX2RlYnVnLmgiCiAjaW5jbHVkZSAiaGlmLmgiCkBAIC0xMDgsNyArMTA3LDcgQEAKICAgICBBX01VVEVYX0RFTEVURSgmcFByb3RvY29sLT5IQ0lSeExvY2spOwogICAgIEFfTVVURVhfREVMRVRFKCZwUHJvdG9jb2wtPkhDSVR4TG9jayk7CiAgICAgICAgIAotICAgIEFfRlJFRShwUHJvdG9jb2wpOyAgICAKKyAgICBrZnJlZShwUHJvdG9jb2wpOyAgICAKIH0KIAogc3RhdGljIGludCBJbml0VHhDcmVkaXRTdGF0ZShzdHJ1Y3QgZ21ib3hfcHJvdG9faGNpX3VhcnQgKnBQcm90KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9odGMyL2h0Yy5jIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9odGMyL2h0Yy5jCmluZGV4IGQ0MGJiMTQuLmFlNTRlNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaHRjMi9odGMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2h0YzIvaHRjLmMKQEAgLTcwLDcgKzcwLDcgQEAKICAgICAKICAgICBmb3IgKGkgPSAwO2kgPCBOVU1fQ09OVFJPTF9CVUZGRVJTO2krKykgewogICAgICAgICBpZiAodGFyZ2V0LT5IVENDb250cm9sQnVmZmVyc1tpXS5CdWZmZXIpIHsKLSAgICAgICAgICAgIEFfRlJFRSh0YXJnZXQtPkhUQ0NvbnRyb2xCdWZmZXJzW2ldLkJ1ZmZlcik7CisgICAgICAgICAgICBrZnJlZSh0YXJnZXQtPkhUQ0NvbnRyb2xCdWZmZXJzW2ldLkJ1ZmZlcik7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC04Niw3ICs4Niw3IEBACiAgICAgICAgIEFfTVVURVhfREVMRVRFKCZ0YXJnZXQtPkhUQ1R4TG9jayk7CiAgICAgfQogICAgICAgICAvKiBmcmVlIG91ciBpbnN0YW5jZSAqLwotICAgIEFfRlJFRSh0YXJnZXQpOworICAgIGtmcmVlKHRhcmdldCk7CiB9CiAKIC8qIHJlZ2lzdGVyZWQgdGFyZ2V0IGFycml2YWwgY2FsbGJhY2sgZnJvbSB0aGUgSElGIGxheWVyICovCkBAIC00NDgsOSArNDQ4LDcgQEAKICAgICAgICAgcEVuZHBvaW50LT5TZXJ2aWNlSUQgPSAwOwogICAgICAgICBwRW5kcG9pbnQtPk1heE1zZ0xlbmd0aCA9IDA7CiAgICAgICAgIHBFbmRwb2ludC0+TWF4VHhRdWV1ZURlcHRoID0gMDsKLSNpZmRlZiBIVENfRVBfU1RBVF9QUk9GSUxJTkcKICAgICAgICAgQV9NRU1aRVJPKCZwRW5kcG9pbnQtPkVuZFBvaW50U3RhdHMsc2l6ZW9mKHBFbmRwb2ludC0+RW5kUG9pbnRTdGF0cykpOwotI2VuZGlmCiAgICAgICAgIElOSVRfSFRDX1BBQ0tFVF9RVUVVRSgmcEVuZHBvaW50LT5SeEJ1ZmZlcnMpOwogICAgICAgICBJTklUX0hUQ19QQUNLRVRfUVVFVUUoJnBFbmRwb2ludC0+VHhRdWV1ZSk7CiAgICAgICAgIElOSVRfSFRDX1BBQ0tFVF9RVUVVRSgmcEVuZHBvaW50LT5SZWN2SW5kaWNhdGlvblF1ZXVlKTsKQEAgLTUyNyw3ICs1MjUsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaHRjX2VuZHBvaW50X3N0YXRzICAgICAgICpwU3RhdHMpCiB7CiAKLSNpZmRlZiBIVENfRVBfU1RBVF9QUk9GSUxJTkcKICAgICBzdHJ1Y3QgaHRjX3RhcmdldCAqdGFyZ2V0ID0gR0VUX0hUQ19UQVJHRVRfRlJPTV9IQU5ETEUoSFRDSGFuZGxlKTsKICAgICBib29sICAgICBjbGVhclN0YXRzID0gZmFsc2U7CiAgICAgYm9vbCAgICAgc2FtcGxlID0gZmFsc2U7CkBAIC01NjgsOSArNTY1LDYgQEAKICAgICBVTkxPQ0tfSFRDX1RYKHRhcmdldCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCiB9CiAKIHN0cnVjdCBhcjZrX2RldmljZSAgKkhUQ0dldEFSNktEZXZpY2Uodm9pZCAqSFRDSGFuZGxlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9odGMyL2h0Y19pbnRlcm5hbC5oIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9odGMyL2h0Y19pbnRlcm5hbC5oCmluZGV4IDk0MjVlZDkuLmNhYzk3MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaHRjMi9odGNfaW50ZXJuYWwuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2h0YzIvaHRjX2ludGVybmFsLmgKQEAgLTI3LDcgKzI3LDYgQEAKICAqIHByb2Nlc3NpbmcgZXJyb3JzLCB0aGUgbGFzdCBmcmFtZSBoZWFkZXIgaXMgZHVtcCBmb3IgY29tcGFyaXNvbiAqLwogLy8jZGVmaW5lIEhUQ19DQVBUVVJFX0xBU1RfRlJBTUUKIAotLy8jZGVmaW5lIEhUQ19FUF9TVEFUX1BST0ZJTElORwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewpAQCAtMzcsNyArMzYsNiBAQAogCiAjaW5jbHVkZSAiYV9jb25maWcuaCIKICNpbmNsdWRlICJhdGhkZWZzLmgiCi0jaW5jbHVkZSAiYV90eXBlcy5oIgogI2luY2x1ZGUgImFfb3NhcGkuaCIKICNpbmNsdWRlICJodGNfZGVidWcuaCIKICNpbmNsdWRlICJodGMuaCIKQEAgLTgyLDE3ICs4MCwxMCBAQAogICAgIHN0cnVjdCBodGNfdGFyZ2V0ICAgICAgICAgICAqdGFyZ2V0OyAgICAgICAgICAgICAgICAvKiBiYWNrIHBvaW50ZXIgdG8gdGFyZ2V0ICovCiAgICAgdTggU2VxTm87ICAgICAgICAgICAgICAgICAgLyogVFggc2VxIG5vIChoZWxwZnVsKSBmb3IgZGVidWdnaW5nICovCiAgICAgdTMyIExvY2FsQ29ubmVjdGlvbkZsYWdzOyAgIC8qIGxvY2FsIGNvbm5lY3Rpb24gZmxhZ3MgKi8KLSNpZmRlZiBIVENfRVBfU1RBVF9QUk9GSUxJTkcKICAgICBzdHJ1Y3QgaHRjX2VuZHBvaW50X3N0YXRzICAgICAgICAgIEVuZFBvaW50U3RhdHM7ICAgICAgICAgIC8qIGVuZHBvaW50IHN0YXRpc3RpY3MgKi8KLSNlbmRpZgogfTsKIAotI2lmZGVmIEhUQ19FUF9TVEFUX1BST0ZJTElORwogI2RlZmluZSBJTkNfSFRDX0VQX1NUQVQocCxzdGF0LGNvdW50KSAocCktPkVuZFBvaW50U3RhdHMuc3RhdCArPSAoY291bnQpOwotI2Vsc2UKLSNkZWZpbmUgSU5DX0hUQ19FUF9TVEFUKHAsc3RhdCxjb3VudCkKLSNlbmRpZgotCiAjZGVmaW5lIEhUQ19TRVJWSUNFX1RYX1BBQ0tFVF9UQUcgIEhUQ19UWF9QQUNLRVRfVEFHX0lOVEVSTkFMCiAKICNkZWZpbmUgTlVNX0NPTlRST0xfQlVGRkVSUyAgICAgOApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9odGMyL2h0Y19yZWN2LmMgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2h0YzIvaHRjX3JlY3YuYwppbmRleCBjMjA4ODAxLi45NzRjYzhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2h0YzIvaHRjX3JlY3YuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2h0YzIvaHRjX3JlY3YuYwpAQCAtMzYsNyArMzYsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgKHBQKS0+UGt0SW5mby5Bc1J4LkV4cGVjdGVkSGRyLCAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgKHBQKS0+RW5kcG9pbnQpKSAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIAotI2lmZGVmIEhUQ19FUF9TVEFUX1BST0ZJTElORwogI2RlZmluZSBIVENfUlhfU1RBVF9QUk9GSUxFKHQsZXAsbnVtTG9va0FoZWFkcykgICAgICAgIFwKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgSU5DX0hUQ19FUF9TVEFUKChlcCksIFJ4UmVjZWl2ZWQsIDEpOyAgICAgICAgICAgICAgXApAQCAtNDYsOSArNDUsNiBAQAogICAgICAgICBJTkNfSFRDX0VQX1NUQVQoKGVwKSwgUnhCdW5kbGVMb29rQWhlYWRzLCAxKTsgIFwKICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9Ci0jZWxzZQotI2RlZmluZSBIVENfUlhfU1RBVF9QUk9GSUxFKHQsZXAsbG9va0FoZWFkKQotI2VuZGlmCiAKIHN0YXRpYyB2b2lkIERvUmVjdkNvbXBsZXRpb24oc3RydWN0IGh0Y19lbmRwb2ludCAgICAgKnBFbmRwb2ludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGh0Y19wYWNrZXRfcXVldWUgKnBRdWV1ZVRvSW5kaWNhdGUpCkBAIC05MzEsMTIgKzkyNywxMCBAQAogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIXN0YXR1cykgewotI2lmZGVmIEhUQ19FUF9TVEFUX1BST0ZJTElORwogICAgICAgICAgICAgTE9DS19IVENfUlgodGFyZ2V0KTsgICAgICAgICAgICAgIAogICAgICAgICAgICAgSFRDX1JYX1NUQVRfUFJPRklMRSh0YXJnZXQscEVuZHBvaW50LG51bUxvb2tBaGVhZHMpOwogICAgICAgICAgICAgSU5DX0hUQ19FUF9TVEFUKHBFbmRwb2ludCwgUnhQYWNrZXRzQnVuZGxlZCwgMSk7CiAgICAgICAgICAgICBVTkxPQ0tfSFRDX1JYKHRhcmdldCk7Ci0jZW5kaWYgICAgICAKICAgICAgICAgICAgIGlmIChpID09IChwU2NhdHRlclJlcS0+VmFsaWRTY2F0dGVyRW50cmllcyAtIDEpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8qIGxhc3QgcGFja2V0J3MgbW9yZSBwYWNrZXRzIGZsYWcgaXMgc2V0IGJhc2VkIG9uIHRoZSBsb29rYWhlYWQgKi8KICAgICAgICAgICAgICAgICBTRVRfTU9SRV9SWF9QQUNLRVRfSU5ESUNBVElPTl9GTEFHKGxvb2tBaGVhZHMsbnVtTG9va0FoZWFkcyxwRW5kcG9pbnQscFBhY2tldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2h0YzIvaHRjX3NlbmQuYyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaHRjMi9odGNfc2VuZC5jCmluZGV4IDZmNDA1MGEuLjkzMTBkNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaHRjMi9odGNfc2VuZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaHRjMi9odGNfc2VuZC5jCkBAIC03NzYsOSArNzc2LDYgQEAKICAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19TRU5ELCAoIiAgRW5kcG9pbnQgJWQgZ290ICVkIGNyZWRpdHMgXG4iLAogICAgICAgICAgICAgICAgIHBScHQtPkVuZHBvaW50SUQsIHBScHQtPkNyZWRpdHMpKTsKIAotCi0jaWZkZWYgSFRDX0VQX1NUQVRfUFJPRklMSU5HCi0KICAgICAgICAgSU5DX0hUQ19FUF9TVEFUKHBFbmRwb2ludCwgVHhDcmVkaXRScHRzLCAxKTsKICAgICAgICAgSU5DX0hUQ19FUF9TVEFUKHBFbmRwb2ludCwgVHhDcmVkaXRzUmV0dXJuZWQsIHBScHQtPkNyZWRpdHMpOwogCkBAIC03OTcsOCArNzk0LDYgQEAKICAgICAgICAgICAgIElOQ19IVENfRVBfU1RBVChwRW5kcG9pbnQsIFR4Q3JlZGl0UnB0c0Zyb21PdGhlciwgMSk7CiAgICAgICAgIH0KIAotI2VuZGlmCi0KICAgICAgICAgaWYgKEVORFBPSU5UXzAgPT0gcFJwdC0+RW5kcG9pbnRJRCkgewogICAgICAgICAgICAgICAgIC8qIGFsd2F5cyBnaXZlIGVuZHBvaW50IDAgY3JlZGl0cyBiYWNrICovCiAgICAgICAgICAgICBwRW5kcG9pbnQtPkNyZWRpdERpc3QuVHhDcmVkaXRzICs9IHBScHQtPkNyZWRpdHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvYV9jb25maWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9hX2NvbmZpZy5oCmluZGV4IDRhMDA4M2MuLmY3YzA5MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9hX2NvbmZpZy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9hX2NvbmZpZy5oCkBAIC0yNiwyOCArMjYsNiBAQAogI2lmbmRlZiBfQV9DT05GSUdfSF8KICNkZWZpbmUgX0FfQ09ORklHX0hfCiAKLSNpZmRlZiBVTkRFUl9OV0lGSQotI2luY2x1ZGUgIi4uL29zL3dpbmRvd3MvaW5jbHVkZS9jb25maWcuaCIKLSNlbmRpZgotCi0jaWZkZWYgQVRIUl9DRV9MRUdBQ1kKLSNpbmNsdWRlICIuLi9vcy93aW5kb3dzL2luY2x1ZGUvY29uZmlnLmgiCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19saW51eF9fKSAmJiAhZGVmaW5lZChMSU5VWF9FTVVMQVRJT04pCiAjaW5jbHVkZSAiLi4vb3MvbGludXgvaW5jbHVkZS9jb25maWdfbGludXguaCIKLSNlbmRpZgotCi0jaWZkZWYgUkVYT1MKLSNpbmNsdWRlICIuLi9vcy9yZXhvcy9pbmNsdWRlL2NvbW1vbi9jb25maWdfcmV4b3MuaCIKLSNlbmRpZgotCi0jaWZkZWYgV0lOX05XRgotI2luY2x1ZGUgIi4uL29zL3dpbmRvd3MvaW5jbHVkZS93aW4vY29uZmlnX3dpbi5oIgotI2VuZGlmCi0KLSNpZmRlZiBUSFJFQURYCi0jaW5jbHVkZSAiLi4vb3MvdGhyZWFkeC9pbmNsdWRlL2NvbW1vbi9jb25maWdfdGhyZWFkeC5oIgotI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2FfZGVidWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9hX2RlYnVnLmgKaW5kZXggZDQzMzk0Mi4uNTE1NGZjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2FfZGVidWcuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvYV9kZWJ1Zy5oCkBAIC0yNyw3ICsyNyw2IEBACiBleHRlcm4gIkMiIHsKICNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLwogCi0jaW5jbHVkZSA8YV90eXBlcy5oPgogI2luY2x1ZGUgPGFfb3NhcGkuaD4KIAogICAgIC8qIHN0YW5kYXJkIGRlYnVnIHByaW50IG1hc2tzIGJpdHMgMC4uNyAqLwpAQCAtMTg3LDM1ICsxODYsNyBAQAogdm9pZCBhX21vZHVsZV9kZWJ1Z19zdXBwb3J0X2luaXQodm9pZCk7CiB2b2lkIGFfbW9kdWxlX2RlYnVnX3N1cHBvcnRfY2xlYW51cCh2b2lkKTsKIAotI2lmZGVmIFVOREVSX05XSUZJCi0jaW5jbHVkZSAiLi4vb3Mvd2luZG93cy9pbmNsdWRlL2RlYnVnLmgiCi0jZW5kaWYKLQotI2lmZGVmIEFUSFJfQ0VfTEVHQUNZCi0jaW5jbHVkZSAiLi4vb3Mvd2luZG93cy9pbmNsdWRlL2RlYnVnLmgiCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19saW51eF9fKSAmJiAhZGVmaW5lZChMSU5VWF9FTVVMQVRJT04pCiAjaW5jbHVkZSAiLi4vb3MvbGludXgvaW5jbHVkZS9kZWJ1Z19saW51eC5oIgotI2VuZGlmCi0KLSNpZmRlZiBSRVhPUwotI2luY2x1ZGUgIi4uL29zL3JleG9zL2luY2x1ZGUvY29tbW9uL2RlYnVnX3JleG9zLmgiCi0jZW5kaWYKLQotI2lmIGRlZmluZWQgQVJUX1dJTgotI2luY2x1ZGUgIi4uL29zL3dpbl9hcnQvaW5jbHVkZS9kZWJ1Z193aW4uaCIKLSNlbmRpZgotCi0jaWZkZWYgV0lOX05XRgotI2luY2x1ZGUgPGRlYnVnX3dpbi5oPgotI2VuZGlmCi0KLSNpZmRlZiBUSFJFQURYCi0jZGVmaW5lIEFUSF9ERUJVR19NQUtFX01PRFVMRV9NQVNLKGluZGV4KSAgKDEgPDwgKEFUSF9ERUJVR19NT0RVTEVfTUFTS19TSElGVCArIChpbmRleCkpKQotI2luY2x1ZGUgIi4uL29zL3RocmVhZHgvaW5jbHVkZS9jb21tb24vZGVidWdfdGhyZWFkeC5oIgotI2VuZGlmICAKLQogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9hX2Rydi5oIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2FfZHJ2LmgKaW5kZXggNmRiMTBmMC4uMTU0ODYwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2FfZHJ2LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2FfZHJ2LmgKQEAgLTI3LDI4ICsyNyw2IEBACiAjaWZuZGVmIF9BX0RSVl9IXwogI2RlZmluZSBfQV9EUlZfSF8KIAotI2lmIGRlZmluZWQoX19saW51eF9fKSAmJiAhZGVmaW5lZChMSU5VWF9FTVVMQVRJT04pCiAjaW5jbHVkZSAiLi4vb3MvbGludXgvaW5jbHVkZS9hdGhkcnZfbGludXguaCIKLSNlbmRpZgotCi0jaWZkZWYgVU5ERVJfTldJRkkKLSNpbmNsdWRlICIuLi9vcy93aW5kb3dzL2luY2x1ZGUvYXRoZHJ2LmgiCi0jZW5kaWYKLQotI2lmZGVmIEFUSFJfQ0VfTEVHQUNZCi0jaW5jbHVkZSAiLi4vb3Mvd2luZG93cy9pbmNsdWRlL2F0aGRydi5oIgotI2VuZGlmCi0KLSNpZmRlZiBSRVhPUwotI2luY2x1ZGUgIi4uL29zL3JleG9zL2luY2x1ZGUvY29tbW9uL2F0aGRydl9yZXhvcy5oIgotI2VuZGlmCi0KLSNpZmRlZiBXSU5fTldGCi0jaW5jbHVkZSAiLi4vb3Mvd2luZG93cy9pbmNsdWRlL2F0aGRydi5oIgotI2VuZGlmCi0KLSNpZmRlZiBUSFJFQURYCi0jaW5jbHVkZSAiLi4vb3MvdGhyZWFkeC9pbmNsdWRlL2NvbW1vbi9hdGhkcnZfdGhyZWFkeC5oIgotI2VuZGlmCiAKICNlbmRpZiAvKiBfQURSVl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2FfZHJ2X2FwaS5oIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2FfZHJ2X2FwaS5oCmluZGV4IDVlMDk4Y2IuLmE0MGQ5N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9hX2Rydl9hcGkuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvYV9kcnZfYXBpLmgKQEAgLTEzMCwzNCArMTMwLDYgQEAKICNkZWZpbmUgQV9XTUlfUEVFUl9FVkVOVChkZXZ0LCBldmVudENvZGUsIGJzc2lkKSAgICBcCiAgICAgYXI2MDAwX3BlZXJfZXZlbnQgKChkZXZ0KSwgKGV2ZW50Q29kZSksIChic3NpZCkpCiAKLSNpZmRlZiBDT05GSUdfSE9TVF9HUElPX1NVUFBPUlQKLQotI2RlZmluZSBBX1dNSV9HUElPX0lOVFJfUlgoaW50cl9tYXNrLCBpbnB1dF92YWx1ZXMpIFwKLSAgICBhcjYwMDBfZ3Bpb19pbnRyX3J4KChpbnRyX21hc2spLCAoaW5wdXRfdmFsdWVzKSkKLQotI2RlZmluZSBBX1dNSV9HUElPX0RBVEFfUlgocmVnX2lkLCB2YWx1ZSkgXAotICAgIGFyNjAwMF9ncGlvX2RhdGFfcngoKHJlZ19pZCksICh2YWx1ZSkpCi0KLSNkZWZpbmUgQV9XTUlfR1BJT19BQ0tfUlgoKSBcCi0gICAgYXI2MDAwX2dwaW9fYWNrX3J4KCkKLQotI2VuZGlmCi0KLSNpZmRlZiBTRU5EX0VWRU5UX1RPX0FQUAotCi0jZGVmaW5lIEFfV01JX1NFTkRfRVZFTlRfVE9fQVBQKGFyLCBldmVudElkLCBkYXRhcCwgbGVuKSBcCi0gICAgYXI2MDAwX3NlbmRfZXZlbnRfdG9fYXBwKChhciksIChldmVudElkKSwgKGRhdGFwKSwgKGxlbikpCi0KLSNkZWZpbmUgQV9XTUlfU0VORF9HRU5FUklDX0VWRU5UX1RPX0FQUChhciwgZXZlbnRJZCwgZGF0YXAsIGxlbikgXAotICAgIGFyNjAwMF9zZW5kX2dlbmVyaWNfZXZlbnRfdG9fYXBwKChhciksIChldmVudElkKSwgKGRhdGFwKSwgKGxlbikpCi0KLSNlbHNlCi0KLSNkZWZpbmUgQV9XTUlfU0VORF9FVkVOVF9UT19BUFAoYXIsIGV2ZW50SWQsIGRhdGFwLCBsZW4pCi0jZGVmaW5lIEFfV01JX1NFTkRfR0VORVJJQ19FVkVOVF9UT19BUFAoYXIsIGV2ZW50SWQsIGRhdGFwLCBsZW4pCi0KLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX0hPU1RfVENNRF9TVVBQT1JUCiAjZGVmaW5lIEFfV01JX1RDTURfUlhfUkVQT1JUX0VWRU5UKGRldnQsIHJlc3VsdHMsIGxlbikgXAogICAgIGFyNjAwMF90Y21kX3J4X3JlcG9ydF9ldmVudCgoZGV2dCksIChyZXN1bHRzKSwgKGxlbikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvYV9vc2FwaS5oIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2Ffb3NhcGkuaAppbmRleCA3YmRlZWVhLi5mZDdhZTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvYV9vc2FwaS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9hX29zYXBpLmgKQEAgLTI3LDM1ICsyNyw2IEBACiAjaWZuZGVmIF9BX09TQVBJX0hfCiAjZGVmaW5lIF9BX09TQVBJX0hfCiAKLSNpZiBkZWZpbmVkKF9fbGludXhfXykgJiYgIWRlZmluZWQoTElOVVhfRU1VTEFUSU9OKQogI2luY2x1ZGUgIi4uL29zL2xpbnV4L2luY2x1ZGUvb3NhcGlfbGludXguaCIKLSNlbmRpZgotCi0jaWZkZWYgVU5ERVJfTldJRkkKLSNpbmNsdWRlICIuLi9vcy93aW5kb3dzL2luY2x1ZGUvb3NhcGkuaCIKLSNpbmNsdWRlICIuLi9vcy93aW5kb3dzL2luY2x1ZGUvbmV0YnVmLmgiCi0jZW5kaWYKLQotI2lmZGVmIEFUSFJfQ0VfTEVHQUNZCi0jaW5jbHVkZSAiLi4vb3Mvd2luZG93cy9pbmNsdWRlL29zYXBpLmgiCi0jaW5jbHVkZSAiLi4vb3Mvd2luZG93cy9pbmNsdWRlL25ldGJ1Zi5oIgotI2VuZGlmCi0KLSNpZmRlZiBSRVhPUwotI2luY2x1ZGUgIi4uL29zL3JleG9zL2luY2x1ZGUvY29tbW9uL29zYXBpX3JleG9zLmgiCi0jZW5kaWYKLQotI2lmIGRlZmluZWQgQVJUX1dJTgotI2luY2x1ZGUgIi4uL29zL3dpbl9hcnQvaW5jbHVkZS9vc2FwaV93aW4uaCIKLSNpbmNsdWRlICIuLi9vcy93aW5fYXJ0L2luY2x1ZGUvbmV0YnVmLmgiCi0jZW5kaWYKLQotI2lmZGVmIFdJTl9OV0YKLSNpbmNsdWRlIDxvc2FwaV93aW4uaD4KLSNlbmRpZiAKLQotI2lmIGRlZmluZWQoVEhSRUFEWCkKLSNpbmNsdWRlICIuLi9vcy90aHJlYWR4L2luY2x1ZGUvY29tbW9uL29zYXBpX3RocmVhZHguaCIKLSNlbmRpZiAKIAogI2VuZGlmIC8qIF9PU0FQSV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2FfdHlwZXMuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9hX3R5cGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4ZjRjZmUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2FfdHlwZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyA8Y29weXJpZ2h0IGZpbGU9ImFfdHlwZXMuaCIgY29tcGFueT0iQXRoZXJvcyI+Ci0vLyAgICBDb3B5cmlnaHQgKGMpIDIwMDQtMjAxMCBBdGhlcm9zIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIAotLy8KLS8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotLy8gcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLS8vCi0vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLS8vIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLS8vIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0vLyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0vLyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLS8vIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0vLyBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotLy8KLS8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlIGJhc2ljIGF0aGVyb3MgZGF0YSB0eXBlcy4KLS8vIEl0IGlzIHVzZWQgdG8gbWFwIHRoZSBkYXRhIHR5cGVzIGluIGF0aGVyb3MgZmlsZXMgdG8gYSBwbGF0Zm9ybSBzcGVjaWZpYwotLy8gdHlwZS4KLS8vCi0vLyBBdXRob3Iocyk6ID0iQXRoZXJvcyIKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jaWZuZGVmIF9BX1RZUEVTX0hfCi0jZGVmaW5lIF9BX1RZUEVTX0hfCi0KLSNpZiBkZWZpbmVkKF9fbGludXhfXykgJiYgIWRlZmluZWQoTElOVVhfRU1VTEFUSU9OKQotI2luY2x1ZGUgIi4uL29zL2xpbnV4L2luY2x1ZGUvYXRodHlwZXNfbGludXguaCIKLSNlbmRpZgotCi0jaWZkZWYgVU5ERVJfTldJRkkKLSNpbmNsdWRlICIuLi9vcy93aW5kb3dzL2luY2x1ZGUvYXRodHlwZXMuaCIKLSNlbmRpZgotCi0jaWZkZWYgQVRIUl9DRV9MRUdBQ1kKLSNpbmNsdWRlICIuLi9vcy93aW5kb3dzL2luY2x1ZGUvYXRodHlwZXMuaCIKLSNlbmRpZgotCi0jaWZkZWYgUkVYT1MKLSNpbmNsdWRlICIuLi9vcy9yZXhvcy9pbmNsdWRlL2NvbW1vbi9hdGh0eXBlc19yZXhvcy5oIgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkIEFSVF9XSU4KLSNpbmNsdWRlICIuLi9vcy93aW5fYXJ0L2luY2x1ZGUvYXRodHlwZXNfd2luLmgiCi0jZW5kaWYKLQotI2lmZGVmIFdJTl9OV0YKLSNpbmNsdWRlIDxhdGh0eXBlc193aW4uaD4KLSNlbmRpZgotCi0jaWZkZWYgVEhSRUFEWAotI2luY2x1ZGUgIi4uL29zL3RocmVhZHgvaW5jbHVkZS9jb21tb24vYXRodHlwZXNfdGhyZWFkeC5oIgotI2VuZGlmCi0KLSNlbmRpZiAvKiBfQVRIVFlQRVNfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9hcjYwMDBfYXBpLmggYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvYXI2MDAwX2FwaS5oCmluZGV4IDFlMWQ5MmEuLmU5NDYwODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9hcjYwMDBfYXBpLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2FyNjAwMF9hcGkuaApAQCAtMjYsMjkgKzI2LDcgQEAKICNpZm5kZWYgX0FSNjAwMF9BUElfSF8KICNkZWZpbmUgX0FSNjAwMF9BUElfSF8KIAotI2lmIGRlZmluZWQoX19saW51eF9fKSAmJiAhZGVmaW5lZChMSU5VWF9FTVVMQVRJT04pCiAjaW5jbHVkZSAiLi4vb3MvbGludXgvaW5jbHVkZS9hcjZ4YXBpX2xpbnV4LmgiCi0jZW5kaWYKLQotI2lmZGVmIFVOREVSX05XSUZJCi0jaW5jbHVkZSAiLi4vb3Mvd2luZG93cy9pbmNsdWRlL2FyNnhhcGkuaCIKLSNlbmRpZgotCi0jaWZkZWYgQVRIUl9DRV9MRUdBQ1kKLSNpbmNsdWRlICIuLi9vcy93aW5kb3dzL2luY2x1ZGUvYXI2eGFwaS5oIgotI2VuZGlmCi0KLSNpZmRlZiBSRVhPUwotI2luY2x1ZGUgIi4uL29zL3JleG9zL2luY2x1ZGUvY29tbW9uL2FyNnhhcGlfcmV4b3MuaCIKLSNlbmRpZgotCi0jaWYgZGVmaW5lZCBBUlRfV0lOCi0jaW5jbHVkZSAiLi4vb3Mvd2luX2FydC9pbmNsdWRlL2FyNnhhcGlfd2luLmgiCi0jZW5kaWYKLQotI2lmZGVmIFdJTl9OV0YKLSNpbmNsdWRlICIuLi9vcy93aW5kb3dzL2luY2x1ZGUvYXI2eGFwaS5oIgotI2VuZGlmCiAKICNlbmRpZiAvKiBfQVI2MDAwX0FQSV9IICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9hdGhlbmRwYWNrLmggYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvYXRoZW5kcGFjay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjk0MDUwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9hdGhlbmRwYWNrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gPGNvcHlyaWdodCBmaWxlPSJhdGhlbmRwYWNrLmgiIGNvbXBhbnk9IkF0aGVyb3MiPgotLy8gICAgQ29weXJpZ2h0IChjKSAyMDA0LTIwMTAgQXRoZXJvcyBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyAKLS8vCi0vLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLS8vIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0vLwotLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0vLyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0vLyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgotLy8gQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotLy8gV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0vLyBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgotLy8gT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLS8vCi0vLwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBlbmQgY29tcGlsZXItc3BlY2lmaWMgc3RydWN0dXJlIHBhY2tpbmcKLS8vCi0vLyBBdXRob3Iocyk6ID0iQXRoZXJvcyIKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jaWZkZWYgVlhXT1JLUwotI2VuZGlmIC8qIFZYV09SS1MgKi8KLQotI2lmIGRlZmluZWQoTElOVVgpIHx8IGRlZmluZWQoX19saW51eF9fKQotI2VuZGlmIC8qIExJTlVYICovCi0KLSNpZmRlZiBRTlgKLSNlbmRpZiAvKiBRTlggKi8KLQotI2lmZGVmIElOVEVHUklUWQotI2luY2x1ZGUgImludGVncml0eS9hdGhlbmRwYWNrX2ludGVncml0eS5oIgotI2VuZGlmIC8qIElOVEVHUklUWSAqLwotCi0jaWZkZWYgTlVDTEVVUwotI2VuZGlmIC8qIE5VQ0xFVVMgKi8KLQotCi0jaWZkZWYgVU5ERVJfTldJRkkKLSNpbmNsdWRlICIuLi9vcy93aW5kb3dzL2luY2x1ZGUvYXRoZW5kcGFjay5oIgotI2VuZGlmCi0KLSNpZmRlZiBBVEhSX0NFX0xFR0FDWQotI2luY2x1ZGUgIi4uL29zL3dpbmRvd3MvaW5jbHVkZS9hdGhlbmRwYWNrLmgiCi0jZW5kaWYgLyogV0lOQ0UgKi8KLQotI2lmZGVmIFdJTl9OV0YKLSNpbmNsdWRlIDxhdGhlbmRwYWNrX3dpbi5oPgotI2VuZGlmIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2F0aHN0YXJ0cGFjay5oIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2F0aHN0YXJ0cGFjay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzQ1ZjY2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9hdGhzdGFydHBhY2suaAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyA8Y29weXJpZ2h0IGZpbGU9ImF0aHN0YXJ0cGFjay5oIiBjb21wYW55PSJBdGhlcm9zIj4KLS8vICAgIENvcHlyaWdodCAoYykgMjAwNC0yMDEwIEF0aGVyb3MgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gCi0vLwotLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0vLyBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotLy8KLS8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotLy8gV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotLy8gTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLS8vIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLS8vIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotLy8gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLS8vIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0vLwotLy8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gc3RhcnQgY29tcGlsZXItc3BlY2lmaWMgc3RydWN0dXJlIHBhY2tpbmcKLS8vCi0vLyBBdXRob3Iocyk6ID0iQXRoZXJvcyIKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jaWZkZWYgVlhXT1JLUwotI2VuZGlmIC8qIFZYV09SS1MgKi8KLQotI2lmIGRlZmluZWQoTElOVVgpIHx8IGRlZmluZWQoX19saW51eF9fKQotI2VuZGlmIC8qIExJTlVYICovCi0KLSNpZmRlZiBRTlgKLSNlbmRpZiAvKiBRTlggKi8KLQotI2lmZGVmIElOVEVHUklUWQotI2luY2x1ZGUgImludGVncml0eS9hdGhzdGFydHBhY2tfaW50ZWdyaXR5LmgiCi0jZW5kaWYgLyogSU5URUdSSVRZICovCi0KLSNpZmRlZiBOVUNMRVVTCi0jZW5kaWYgLyogTlVDTEVVUyAqLwotCi0jaWZkZWYgVU5ERVJfTldJRkkKLSNpbmNsdWRlICIuLi9vcy93aW5kb3dzL2luY2x1ZGUvYXRoc3RhcnRwYWNrLmgiCi0jZW5kaWYKLQotI2lmZGVmIEFUSFJfQ0VfTEVHQUNZCi0jaW5jbHVkZSAiLi4vb3Mvd2luZG93cy9pbmNsdWRlL2F0aHN0YXJ0cGFjay5oIgotI2VuZGlmIC8qIFdJTkNFICovCi0KLSNpZmRlZiBXSU5fTldGCi0jaW5jbHVkZSA8YXRoc3RhcnRwYWNrX3dpbi5oPgotI2VuZGlmCi0KLSNpZmRlZiBUSFJFQURYCi0jaW5jbHVkZSAiLi4vb3MvdGhyZWFkeC9pbmNsdWRlL2NvbW1vbi9vc2FwaV90aHJlYWR4LmgiCi0jZW5kaWYgCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvYm1pLmggYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvYm1pLmgKaW5kZXggZWIxZTc1Ni4uZDMyMjdmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2JtaS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9ibWkuaApAQCAtMzIsNyArMzIsNiBAQAogLyogSGVhZGVyIGZpbGVzICovCiAjaW5jbHVkZSAiYV9jb25maWcuaCIKICNpbmNsdWRlICJhdGhkZWZzLmgiCi0jaW5jbHVkZSAiYV90eXBlcy5oIgogI2luY2x1ZGUgImhpZi5oIgogI2luY2x1ZGUgImFfb3NhcGkuaCIKICNpbmNsdWRlICJibWlfbXNnLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9BUjYwMDJfcmVnZHVtcC5oIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvQVI2MDAyX3JlZ2R1bXAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGE5YjI3NS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9BUjYwMDJfcmVnZHVtcC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENvcHlyaWdodCAoYykgMjAwNi0yMDEwIEF0aGVyb3MgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gCi0vLwotLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0vLyBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotLy8KLS8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotLy8gV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotLy8gTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLS8vIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLS8vIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotLy8gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLS8vIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0vLwotLy8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gQXV0aG9yKHMpOiA9IkF0aGVyb3MiCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0jaWZuZGVmIF9fQVI2MDAyX1JFR0RVTVBfSF9fCi0jZGVmaW5lIF9fQVI2MDAyX1JFR0RVTVBfSF9fCi0KLSNpZiAhZGVmaW5lZChfX0FTU0VNQkxFUl9fKQotLyoKLSAqIFhUZW5zYSBDUFUgc3RhdGUKLSAqIFRoaXMgbXVzdCBtYXRjaCB0aGUgc3RhdGUgc2F2ZWQgYnkgdGhlIHRhcmdldCBleGNlcHRpb24gaGFuZGxlci4KLSAqLwotc3RydWN0IFhUZW5zYV9leGNlcHRpb25fZnJhbWVfcyB7Ci0gICAgdTMyIHh0X3BjOwotICAgIHUzMiB4dF9wczsKLSAgICB1MzIgeHRfc2FyOwotICAgIHUzMiB4dF92cHJpOwotICAgIHUzMiB4dF9hMjsKLSAgICB1MzIgeHRfYTM7Ci0gICAgdTMyIHh0X2E0OwotICAgIHUzMiB4dF9hNTsKLSAgICB1MzIgeHRfZXhjY2F1c2U7Ci0gICAgdTMyIHh0X2xjb3VudDsKLSAgICB1MzIgeHRfbGJlZzsKLSAgICB1MzIgeHRfbGVuZDsKLQotICAgIHUzMiBlcGMxLCBlcGMyLCBlcGMzLCBlcGM0OwotCi0gICAgLyogRXh0cmEgaW5mbyB0byBzaW1wbGlmeSBwb3N0LW1vcnRlbSBzdGFjayB3YWxrYmFjayAqLwotI2RlZmluZSBBUjYwMDJfUkVHRFVNUF9GUkFNRVMgMTAKLSAgICBzdHJ1Y3QgewotICAgICAgICB1MzIgYTA7ICAvKiBwYyAqLwotICAgICAgICB1MzIgYTE7ICAvKiBzcCAqLwotICAgICAgICB1MzIgYTI7Ci0gICAgICAgIHUzMiBhMzsKLSAgICB9IHdiW0FSNjAwMl9SRUdEVU1QX0ZSQU1FU107Ci19OwotdHlwZWRlZiBzdHJ1Y3QgWFRlbnNhX2V4Y2VwdGlvbl9mcmFtZV9zIENQVV9leGNlcHRpb25fZnJhbWVfdDsgCi0jZGVmaW5lIFJEX1NJWkUgc2l6ZW9mKENQVV9leGNlcHRpb25fZnJhbWVfdCkKLQotI2VuZGlmCi0jZW5kaWYgLyogX19BUjYwMDJfUkVHRFVNUF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3Mi4wL2h3L2FuYWxvZ19pbnRmX3JlZy5oIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHcyLjAvaHcvYW5hbG9nX2ludGZfcmVnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljODI3NjcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHcyLjAvaHcvYW5hbG9nX2ludGZfcmVnLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0jaWZuZGVmIF9BTkFMT0dfSU5URl9SRUdfUkVHX0hfCi0jZGVmaW5lIF9BTkFMT0dfSU5URl9SRUdfUkVHX0hfCi0KLSNkZWZpbmUgU1dfT1ZFUlJJREVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIFNXX09WRVJSSURFX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBTV19PVkVSUklERV9TVVBEQVRFX0RFTEFZX01TQiAgICAgICAgICAgIDEKLSNkZWZpbmUgU1dfT1ZFUlJJREVfU1VQREFURV9ERUxBWV9MU0IgICAgICAgICAgICAxCi0jZGVmaW5lIFNXX09WRVJSSURFX1NVUERBVEVfREVMQVlfTUFTSyAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBTV19PVkVSUklERV9TVVBEQVRFX0RFTEFZX0dFVCh4KSAgICAgICAgICgoKHgpICYgU1dfT1ZFUlJJREVfU1VQREFURV9ERUxBWV9NQVNLKSA+PiBTV19PVkVSUklERV9TVVBEQVRFX0RFTEFZX0xTQikKLSNkZWZpbmUgU1dfT1ZFUlJJREVfU1VQREFURV9ERUxBWV9TRVQoeCkgICAgICAgICAoKCh4KSA8PCBTV19PVkVSUklERV9TVVBEQVRFX0RFTEFZX0xTQikgJiBTV19PVkVSUklERV9TVVBEQVRFX0RFTEFZX01BU0spCi0jZGVmaW5lIFNXX09WRVJSSURFX0VOQUJMRV9NU0IgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBTV19PVkVSUklERV9FTkFCTEVfTFNCICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgU1dfT1ZFUlJJREVfRU5BQkxFX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFNXX09WRVJSSURFX0VOQUJMRV9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiBTV19PVkVSUklERV9FTkFCTEVfTUFTSykgPj4gU1dfT1ZFUlJJREVfRU5BQkxFX0xTQikKLSNkZWZpbmUgU1dfT1ZFUlJJREVfRU5BQkxFX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCBTV19PVkVSUklERV9FTkFCTEVfTFNCKSAmIFNXX09WRVJSSURFX0VOQUJMRV9NQVNLKQotCi0jZGVmaW5lIFNJTl9WQUxfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4NAotI2RlZmluZSBTSU5fVkFMX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODQKLSNkZWZpbmUgU0lOX1ZBTF9TSU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFNJTl9WQUxfU0lOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBTSU5fVkFMX1NJTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgU0lOX1ZBTF9TSU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFNJTl9WQUxfU0lOX01BU0spID4+IFNJTl9WQUxfU0lOX0xTQikKLSNkZWZpbmUgU0lOX1ZBTF9TSU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBTSU5fVkFMX1NJTl9MU0IpICYgU0lOX1ZBTF9TSU5fTUFTSykKLQotI2RlZmluZSBTV19TQ0xLX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODgKLSNkZWZpbmUgU1dfU0NMS19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDg4Ci0jZGVmaW5lIFNXX1NDTEtfU1dfU0NMS19NU0IgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBTV19TQ0xLX1NXX1NDTEtfTFNCICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgU1dfU0NMS19TV19TQ0xLX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFNXX1NDTEtfU1dfU0NMS19HRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBTV19TQ0xLX1NXX1NDTEtfTUFTSykgPj4gU1dfU0NMS19TV19TQ0xLX0xTQikKLSNkZWZpbmUgU1dfU0NMS19TV19TQ0xLX1NFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBTV19TQ0xLX1NXX1NDTEtfTFNCKSAmIFNXX1NDTEtfU1dfU0NMS19NQVNLKQotCi0jZGVmaW5lIFNXX0NOVExfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4YwotI2RlZmluZSBTV19DTlRMX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwOGMKLSNkZWZpbmUgU1dfQ05UTF9TV19TQ0FQVFVSRV9NU0IgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFNXX0NOVExfU1dfU0NBUFRVUkVfTFNCICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBTV19DTlRMX1NXX1NDQVBUVVJFX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgU1dfQ05UTF9TV19TQ0FQVFVSRV9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIFNXX0NOVExfU1dfU0NBUFRVUkVfTUFTSykgPj4gU1dfQ05UTF9TV19TQ0FQVFVSRV9MU0IpCi0jZGVmaW5lIFNXX0NOVExfU1dfU0NBUFRVUkVfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgU1dfQ05UTF9TV19TQ0FQVFVSRV9MU0IpICYgU1dfQ05UTF9TV19TQ0FQVFVSRV9NQVNLKQotI2RlZmluZSBTV19DTlRMX1NXX1NVUERBVEVfTVNCICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgU1dfQ05UTF9TV19TVVBEQVRFX0xTQiAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFNXX0NOVExfU1dfU1VQREFURV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBTV19DTlRMX1NXX1NVUERBVEVfR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgU1dfQ05UTF9TV19TVVBEQVRFX01BU0spID4+IFNXX0NOVExfU1dfU1VQREFURV9MU0IpCi0jZGVmaW5lIFNXX0NOVExfU1dfU1VQREFURV9TRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPDwgU1dfQ05UTF9TV19TVVBEQVRFX0xTQikgJiBTV19DTlRMX1NXX1NVUERBVEVfTUFTSykKLSNkZWZpbmUgU1dfQ05UTF9TV19TT1VUX01TQiAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFNXX0NOVExfU1dfU09VVF9MU0IgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBTV19DTlRMX1NXX1NPVVRfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgU1dfQ05UTF9TV19TT1VUX0dFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFNXX0NOVExfU1dfU09VVF9NQVNLKSA+PiBTV19DTlRMX1NXX1NPVVRfTFNCKQotI2RlZmluZSBTV19DTlRMX1NXX1NPVVRfU0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNXX0NOVExfU1dfU09VVF9MU0IpICYgU1dfQ05UTF9TV19TT1VUX01BU0spCi0KLQotI2lmbmRlZiBfX0FTU0VNQkxFUl9fCi0KLXR5cGVkZWYgc3RydWN0IGFuYWxvZ19pbnRmX3JlZ19yZWdfcyB7Ci0gIHVuc2lnbmVkIGNoYXIgcGFkMFsxMjhdOyAvKiBwYWQgdG8gMHg4MCAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgc3dfb3ZlcnJpZGU7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBzaW5fdmFsOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgc3dfc2NsazsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHN3X2NudGw7Ci19IGFuYWxvZ19pbnRmX3JlZ19yZWdfdDsKLQotI2VuZGlmIC8qIF9fQVNTRU1CTEVSX18gKi8KLQotI2VuZGlmIC8qIF9BTkFMT0dfSU5URl9SRUdfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3Mi4wL2h3L2FuYWxvZ19yZWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3Mi4wL2h3L2FuYWxvZ19yZWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Y1NjJiOC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzIuMC9ody9hbmFsb2dfcmVnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOTMyICswLDAgQEAKLSNpZm5kZWYgX0FOQUxPR19SRUdfUkVHX0hfCi0jZGVmaW5lIF9BTkFMT0dfUkVHX1JFR19IXwotCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAotI2RlZmluZSBTWU5USF9TWU5USDFfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX1BXRF9CSUFTX01TQiAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBTWU5USF9TWU5USDFfUFdEX0JJQVNfTFNCICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9QV0RfQklBU19NQVNLICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBTWU5USF9TWU5USDFfUFdEX0JJQVNfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgU1lOVEhfU1lOVEgxX1BXRF9CSUFTX01BU0spID4+IFNZTlRIX1NZTlRIMV9QV0RfQklBU19MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9QV0RfQklBU19TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEgxX1BXRF9CSUFTX0xTQikgJiBTWU5USF9TWU5USDFfUFdEX0JJQVNfTUFTSykKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX1BXRF9DUF9NU0IgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBTWU5USF9TWU5USDFfUFdEX0NQX0xTQiAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9QV0RfQ1BfTUFTSyAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAotI2RlZmluZSBTWU5USF9TWU5USDFfUFdEX0NQX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgU1lOVEhfU1lOVEgxX1BXRF9DUF9NQVNLKSA+PiBTWU5USF9TWU5USDFfUFdEX0NQX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX1BXRF9DUF9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDFfUFdEX0NQX0xTQikgJiBTWU5USF9TWU5USDFfUFdEX0NQX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9QV0RfVkNNT05fTVNCICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX1BXRF9WQ01PTl9MU0IgICAgICAgICAgICAgICAyOQotI2RlZmluZSBTWU5USF9TWU5USDFfUFdEX1ZDTU9OX01BU0sgICAgICAgICAgICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX1BXRF9WQ01PTl9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFNZTlRIX1NZTlRIMV9QV0RfVkNNT05fTUFTSykgPj4gU1lOVEhfU1lOVEgxX1BXRF9WQ01PTl9MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9QV0RfVkNNT05fU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEgxX1BXRF9WQ01PTl9MU0IpICYgU1lOVEhfU1lOVEgxX1BXRF9WQ01PTl9NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDFfUFdEX1ZDT19NU0IgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFNZTlRIX1NZTlRIMV9QV0RfVkNPX0xTQiAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX1BXRF9WQ09fTUFTSyAgICAgICAgICAgICAgICAweDEwMDAwMDAwCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9QV0RfVkNPX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDFfUFdEX1ZDT19NQVNLKSA+PiBTWU5USF9TWU5USDFfUFdEX1ZDT19MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9QV0RfVkNPX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEgxX1BXRF9WQ09fTFNCKSAmIFNZTlRIX1NZTlRIMV9QV0RfVkNPX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9QV0RfUFJFU0NfTVNCICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX1BXRF9QUkVTQ19MU0IgICAgICAgICAgICAgICAyNwotI2RlZmluZSBTWU5USF9TWU5USDFfUFdEX1BSRVNDX01BU0sgICAgICAgICAgICAgIDB4MDgwMDAwMDAKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX1BXRF9QUkVTQ19HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFNZTlRIX1NZTlRIMV9QV0RfUFJFU0NfTUFTSykgPj4gU1lOVEhfU1lOVEgxX1BXRF9QUkVTQ19MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9QV0RfUFJFU0NfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEgxX1BXRF9QUkVTQ19MU0IpICYgU1lOVEhfU1lOVEgxX1BXRF9QUkVTQ19NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDFfUFdEX0xPRElWX01TQiAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFNZTlRIX1NZTlRIMV9QV0RfTE9ESVZfTFNCICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX1BXRF9MT0RJVl9NQVNLICAgICAgICAgICAgICAweDA0MDAwMDAwCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9QV0RfTE9ESVZfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDFfUFdEX0xPRElWX01BU0spID4+IFNZTlRIX1NZTlRIMV9QV0RfTE9ESVZfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDFfUFdEX0xPRElWX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRIMV9QV0RfTE9ESVZfTFNCKSAmIFNZTlRIX1NZTlRIMV9QV0RfTE9ESVZfTUFTSykKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX1BXRF9MT01JWF9NU0IgICAgICAgICAgICAgICAyNQotI2RlZmluZSBTWU5USF9TWU5USDFfUFdEX0xPTUlYX0xTQiAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFNZTlRIX1NZTlRIMV9QV0RfTE9NSVhfTUFTSyAgICAgICAgICAgICAgMHgwMjAwMDAwMAotI2RlZmluZSBTWU5USF9TWU5USDFfUFdEX0xPTUlYX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgU1lOVEhfU1lOVEgxX1BXRF9MT01JWF9NQVNLKSA+PiBTWU5USF9TWU5USDFfUFdEX0xPTUlYX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX1BXRF9MT01JWF9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDFfUFdEX0xPTUlYX0xTQikgJiBTWU5USF9TWU5USDFfUFdEX0xPTUlYX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9GT1JDRV9MT19PTl9NU0IgICAgICAgICAgICAgMjQKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX0ZPUkNFX0xPX09OX0xTQiAgICAgICAgICAgICAyNAotI2RlZmluZSBTWU5USF9TWU5USDFfRk9SQ0VfTE9fT05fTUFTSyAgICAgICAgICAgIDB4MDEwMDAwMDAKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX0ZPUkNFX0xPX09OX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIFNZTlRIX1NZTlRIMV9GT1JDRV9MT19PTl9NQVNLKSA+PiBTWU5USF9TWU5USDFfRk9SQ0VfTE9fT05fTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDFfRk9SQ0VfTE9fT05fU0VUKHgpICAgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRIMV9GT1JDRV9MT19PTl9MU0IpICYgU1lOVEhfU1lOVEgxX0ZPUkNFX0xPX09OX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9QV0RfTE9CVUY1R19NU0IgICAgICAgICAgICAgMjMKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX1BXRF9MT0JVRjVHX0xTQiAgICAgICAgICAgICAyMwotI2RlZmluZSBTWU5USF9TWU5USDFfUFdEX0xPQlVGNUdfTUFTSyAgICAgICAgICAgIDB4MDA4MDAwMDAKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX1BXRF9MT0JVRjVHX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIFNZTlRIX1NZTlRIMV9QV0RfTE9CVUY1R19NQVNLKSA+PiBTWU5USF9TWU5USDFfUFdEX0xPQlVGNUdfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDFfUFdEX0xPQlVGNUdfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRIMV9QV0RfTE9CVUY1R19MU0IpICYgU1lOVEhfU1lOVEgxX1BXRF9MT0JVRjVHX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9WQ09SRUdCWVBBU1NfTVNCICAgICAgICAgICAgMjIKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX1ZDT1JFR0JZUEFTU19MU0IgICAgICAgICAgICAyMgotI2RlZmluZSBTWU5USF9TWU5USDFfVkNPUkVHQllQQVNTX01BU0sgICAgICAgICAgIDB4MDA0MDAwMDAKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX1ZDT1JFR0JZUEFTU19HRVQoeCkgICAgICAgICAoKCh4KSAmIFNZTlRIX1NZTlRIMV9WQ09SRUdCWVBBU1NfTUFTSykgPj4gU1lOVEhfU1lOVEgxX1ZDT1JFR0JZUEFTU19MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9WQ09SRUdCWVBBU1NfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEgxX1ZDT1JFR0JZUEFTU19MU0IpICYgU1lOVEhfU1lOVEgxX1ZDT1JFR0JZUEFTU19NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDFfVkNPUkVHTEVWRUxfTVNCICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9WQ09SRUdMRVZFTF9MU0IgICAgICAgICAgICAgMjAKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX1ZDT1JFR0xFVkVMX01BU0sgICAgICAgICAgICAweDAwMzAwMDAwCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9WQ09SRUdMRVZFTF9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDFfVkNPUkVHTEVWRUxfTUFTSykgPj4gU1lOVEhfU1lOVEgxX1ZDT1JFR0xFVkVMX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX1ZDT1JFR0xFVkVMX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDFfVkNPUkVHTEVWRUxfTFNCKSAmIFNZTlRIX1NZTlRIMV9WQ09SRUdMRVZFTF9NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDFfVkNPUkVHQklBU19NU0IgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFNZTlRIX1NZTlRIMV9WQ09SRUdCSUFTX0xTQiAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX1ZDT1JFR0JJQVNfTUFTSyAgICAgICAgICAgICAweDAwMGMwMDAwCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9WQ09SRUdCSUFTX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDFfVkNPUkVHQklBU19NQVNLKSA+PiBTWU5USF9TWU5USDFfVkNPUkVHQklBU19MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9WQ09SRUdCSUFTX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEgxX1ZDT1JFR0JJQVNfTFNCKSAmIFNZTlRIX1NZTlRIMV9WQ09SRUdCSUFTX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9TTElESU5HSUZfTVNCICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX1NMSURJTkdJRl9MU0IgICAgICAgICAgICAgICAxNwotI2RlZmluZSBTWU5USF9TWU5USDFfU0xJRElOR0lGX01BU0sgICAgICAgICAgICAgIDB4MDAwMjAwMDAKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX1NMSURJTkdJRl9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFNZTlRIX1NZTlRIMV9TTElESU5HSUZfTUFTSykgPj4gU1lOVEhfU1lOVEgxX1NMSURJTkdJRl9MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9TTElESU5HSUZfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEgxX1NMSURJTkdJRl9MU0IpICYgU1lOVEhfU1lOVEgxX1NMSURJTkdJRl9NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDFfU1BBUkVfUFdEX01TQiAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFNZTlRIX1NZTlRIMV9TUEFSRV9QV0RfTFNCICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX1NQQVJFX1BXRF9NQVNLICAgICAgICAgICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9TUEFSRV9QV0RfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDFfU1BBUkVfUFdEX01BU0spID4+IFNZTlRIX1NZTlRIMV9TUEFSRV9QV0RfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDFfU1BBUkVfUFdEX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRIMV9TUEFSRV9QV0RfTFNCKSAmIFNZTlRIX1NZTlRIMV9TUEFSRV9QV0RfTUFTSykKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX0NPTl9WRERWQ09SRUdfTVNCICAgICAgICAgICAxNQotI2RlZmluZSBTWU5USF9TWU5USDFfQ09OX1ZERFZDT1JFR19MU0IgICAgICAgICAgIDE1Ci0jZGVmaW5lIFNZTlRIX1NZTlRIMV9DT05fVkREVkNPUkVHX01BU0sgICAgICAgICAgMHgwMDAwODAwMAotI2RlZmluZSBTWU5USF9TWU5USDFfQ09OX1ZERFZDT1JFR19HRVQoeCkgICAgICAgICgoKHgpICYgU1lOVEhfU1lOVEgxX0NPTl9WRERWQ09SRUdfTUFTSykgPj4gU1lOVEhfU1lOVEgxX0NPTl9WRERWQ09SRUdfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDFfQ09OX1ZERFZDT1JFR19TRVQoeCkgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRIMV9DT05fVkREVkNPUkVHX0xTQikgJiBTWU5USF9TWU5USDFfQ09OX1ZERFZDT1JFR19NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDFfQ09OX0lWQ09SRUdfTVNCICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFNZTlRIX1NZTlRIMV9DT05fSVZDT1JFR19MU0IgICAgICAgICAgICAgMTQKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX0NPTl9JVkNPUkVHX01BU0sgICAgICAgICAgICAweDAwMDA0MDAwCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9DT05fSVZDT1JFR19HRVQoeCkgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDFfQ09OX0lWQ09SRUdfTUFTSykgPj4gU1lOVEhfU1lOVEgxX0NPTl9JVkNPUkVHX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX0NPTl9JVkNPUkVHX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDFfQ09OX0lWQ09SRUdfTFNCKSAmIFNZTlRIX1NZTlRIMV9DT05fSVZDT1JFR19NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDFfQ09OX0lWQ09CVUZfTVNCICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9DT05fSVZDT0JVRl9MU0IgICAgICAgICAgICAgMTMKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX0NPTl9JVkNPQlVGX01BU0sgICAgICAgICAgICAweDAwMDAyMDAwCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9DT05fSVZDT0JVRl9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDFfQ09OX0lWQ09CVUZfTUFTSykgPj4gU1lOVEhfU1lOVEgxX0NPTl9JVkNPQlVGX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX0NPTl9JVkNPQlVGX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDFfQ09OX0lWQ09CVUZfTFNCKSAmIFNZTlRIX1NZTlRIMV9DT05fSVZDT0JVRl9NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDFfU0VMX1ZDTU9OQUJVU19NU0IgICAgICAgICAgIDEyCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9TRUxfVkNNT05BQlVTX0xTQiAgICAgICAgICAgMTAKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX1NFTF9WQ01PTkFCVVNfTUFTSyAgICAgICAgICAweDAwMDAxYzAwCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9TRUxfVkNNT05BQlVTX0dFVCh4KSAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDFfU0VMX1ZDTU9OQUJVU19NQVNLKSA+PiBTWU5USF9TWU5USDFfU0VMX1ZDTU9OQUJVU19MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9TRUxfVkNNT05BQlVTX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEgxX1NFTF9WQ01PTkFCVVNfTFNCKSAmIFNZTlRIX1NZTlRIMV9TRUxfVkNNT05BQlVTX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9QV1VQX1ZDT0JVRl9QRF9NU0IgICAgICAgICAgOQotI2RlZmluZSBTWU5USF9TWU5USDFfUFdVUF9WQ09CVUZfUERfTFNCICAgICAgICAgIDkKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX1BXVVBfVkNPQlVGX1BEX01BU0sgICAgICAgICAweDAwMDAwMjAwCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9QV1VQX1ZDT0JVRl9QRF9HRVQoeCkgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDFfUFdVUF9WQ09CVUZfUERfTUFTSykgPj4gU1lOVEhfU1lOVEgxX1BXVVBfVkNPQlVGX1BEX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX1BXVVBfVkNPQlVGX1BEX1NFVCh4KSAgICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDFfUFdVUF9WQ09CVUZfUERfTFNCKSAmIFNZTlRIX1NZTlRIMV9QV1VQX1ZDT0JVRl9QRF9NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDFfUFdVUF9MT0RJVl9QRF9NU0IgICAgICAgICAgIDgKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX1BXVVBfTE9ESVZfUERfTFNCICAgICAgICAgICA4Ci0jZGVmaW5lIFNZTlRIX1NZTlRIMV9QV1VQX0xPRElWX1BEX01BU0sgICAgICAgICAgMHgwMDAwMDEwMAotI2RlZmluZSBTWU5USF9TWU5USDFfUFdVUF9MT0RJVl9QRF9HRVQoeCkgICAgICAgICgoKHgpICYgU1lOVEhfU1lOVEgxX1BXVVBfTE9ESVZfUERfTUFTSykgPj4gU1lOVEhfU1lOVEgxX1BXVVBfTE9ESVZfUERfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDFfUFdVUF9MT0RJVl9QRF9TRVQoeCkgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRIMV9QV1VQX0xPRElWX1BEX0xTQikgJiBTWU5USF9TWU5USDFfUFdVUF9MT0RJVl9QRF9NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDFfUFdVUF9MT01JWF9QRF9NU0IgICAgICAgICAgIDcKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX1BXVVBfTE9NSVhfUERfTFNCICAgICAgICAgICA3Ci0jZGVmaW5lIFNZTlRIX1NZTlRIMV9QV1VQX0xPTUlYX1BEX01BU0sgICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBTWU5USF9TWU5USDFfUFdVUF9MT01JWF9QRF9HRVQoeCkgICAgICAgICgoKHgpICYgU1lOVEhfU1lOVEgxX1BXVVBfTE9NSVhfUERfTUFTSykgPj4gU1lOVEhfU1lOVEgxX1BXVVBfTE9NSVhfUERfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDFfUFdVUF9MT01JWF9QRF9TRVQoeCkgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRIMV9QV1VQX0xPTUlYX1BEX0xTQikgJiBTWU5USF9TWU5USDFfUFdVUF9MT01JWF9QRF9NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDFfUFdVUF9MT0JVRjVHX1BEX01TQiAgICAgICAgIDYKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX1BXVVBfTE9CVUY1R19QRF9MU0IgICAgICAgICA2Ci0jZGVmaW5lIFNZTlRIX1NZTlRIMV9QV1VQX0xPQlVGNUdfUERfTUFTSyAgICAgICAgMHgwMDAwMDA0MAotI2RlZmluZSBTWU5USF9TWU5USDFfUFdVUF9MT0JVRjVHX1BEX0dFVCh4KSAgICAgICgoKHgpICYgU1lOVEhfU1lOVEgxX1BXVVBfTE9CVUY1R19QRF9NQVNLKSA+PiBTWU5USF9TWU5USDFfUFdVUF9MT0JVRjVHX1BEX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX1BXVVBfTE9CVUY1R19QRF9TRVQoeCkgICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDFfUFdVUF9MT0JVRjVHX1BEX0xTQikgJiBTWU5USF9TWU5USDFfUFdVUF9MT0JVRjVHX1BEX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9NT05JVE9SX0ZCX01TQiAgICAgICAgICAgICAgNQotI2RlZmluZSBTWU5USF9TWU5USDFfTU9OSVRPUl9GQl9MU0IgICAgICAgICAgICAgIDUKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX01PTklUT1JfRkJfTUFTSyAgICAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9NT05JVE9SX0ZCX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDFfTU9OSVRPUl9GQl9NQVNLKSA+PiBTWU5USF9TWU5USDFfTU9OSVRPUl9GQl9MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9NT05JVE9SX0ZCX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEgxX01PTklUT1JfRkJfTFNCKSAmIFNZTlRIX1NZTlRIMV9NT05JVE9SX0ZCX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9NT05JVE9SX1JFRl9NU0IgICAgICAgICAgICAgNAotI2RlZmluZSBTWU5USF9TWU5USDFfTU9OSVRPUl9SRUZfTFNCICAgICAgICAgICAgIDQKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX01PTklUT1JfUkVGX01BU0sgICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9NT05JVE9SX1JFRl9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDFfTU9OSVRPUl9SRUZfTUFTSykgPj4gU1lOVEhfU1lOVEgxX01PTklUT1JfUkVGX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX01PTklUT1JfUkVGX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDFfTU9OSVRPUl9SRUZfTFNCKSAmIFNZTlRIX1NZTlRIMV9NT05JVE9SX1JFRl9NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDFfTU9OSVRPUl9GQl9ESVYyX01TQiAgICAgICAgIDMKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX01PTklUT1JfRkJfRElWMl9MU0IgICAgICAgICAzCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9NT05JVE9SX0ZCX0RJVjJfTUFTSyAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBTWU5USF9TWU5USDFfTU9OSVRPUl9GQl9ESVYyX0dFVCh4KSAgICAgICgoKHgpICYgU1lOVEhfU1lOVEgxX01PTklUT1JfRkJfRElWMl9NQVNLKSA+PiBTWU5USF9TWU5USDFfTU9OSVRPUl9GQl9ESVYyX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX01PTklUT1JfRkJfRElWMl9TRVQoeCkgICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDFfTU9OSVRPUl9GQl9ESVYyX0xTQikgJiBTWU5USF9TWU5USDFfTU9OSVRPUl9GQl9ESVYyX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9NT05JVE9SX1ZDMkhJR0hfTVNCICAgICAgICAgMgotI2RlZmluZSBTWU5USF9TWU5USDFfTU9OSVRPUl9WQzJISUdIX0xTQiAgICAgICAgIDIKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX01PTklUT1JfVkMySElHSF9NQVNLICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFNZTlRIX1NZTlRIMV9NT05JVE9SX1ZDMkhJR0hfR0VUKHgpICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDFfTU9OSVRPUl9WQzJISUdIX01BU0spID4+IFNZTlRIX1NZTlRIMV9NT05JVE9SX1ZDMkhJR0hfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDFfTU9OSVRPUl9WQzJISUdIX1NFVCh4KSAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRIMV9NT05JVE9SX1ZDMkhJR0hfTFNCKSAmIFNZTlRIX1NZTlRIMV9NT05JVE9SX1ZDMkhJR0hfTUFTSykKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX01PTklUT1JfVkMyTE9XX01TQiAgICAgICAgICAxCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9NT05JVE9SX1ZDMkxPV19MU0IgICAgICAgICAgMQotI2RlZmluZSBTWU5USF9TWU5USDFfTU9OSVRPUl9WQzJMT1dfTUFTSyAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX01PTklUT1JfVkMyTE9XX0dFVCh4KSAgICAgICAoKCh4KSAmIFNZTlRIX1NZTlRIMV9NT05JVE9SX1ZDMkxPV19NQVNLKSA+PiBTWU5USF9TWU5USDFfTU9OSVRPUl9WQzJMT1dfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDFfTU9OSVRPUl9WQzJMT1dfU0VUKHgpICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRIMV9NT05JVE9SX1ZDMkxPV19MU0IpICYgU1lOVEhfU1lOVEgxX01PTklUT1JfVkMyTE9XX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9NT05JVE9SX1NZTlRITE9DS1ZDT0tfTVNCICAgMAotI2RlZmluZSBTWU5USF9TWU5USDFfTU9OSVRPUl9TWU5USExPQ0tWQ09LX0xTQiAgIDAKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX01PTklUT1JfU1lOVEhMT0NLVkNPS19NQVNLICAweDAwMDAwMDAxCi0jZGVmaW5lIFNZTlRIX1NZTlRIMV9NT05JVE9SX1NZTlRITE9DS1ZDT0tfR0VUKHgpICgoKHgpICYgU1lOVEhfU1lOVEgxX01PTklUT1JfU1lOVEhMT0NLVkNPS19NQVNLKSA+PiBTWU5USF9TWU5USDFfTU9OSVRPUl9TWU5USExPQ0tWQ09LX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEgxX01PTklUT1JfU1lOVEhMT0NLVkNPS19TRVQoeCkgKCgoeCkgPDwgU1lOVEhfU1lOVEgxX01PTklUT1JfU1lOVEhMT0NLVkNPS19MU0IpICYgU1lOVEhfU1lOVEgxX01PTklUT1JfU1lOVEhMT0NLVkNPS19NQVNLKQotCi0jZGVmaW5lIFNZTlRIX1NZTlRIMl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBTWU5USF9TWU5USDJfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgU1lOVEhfU1lOVEgyX1ZDX0NBTF9SRUZfTVNCICAgICAgICAgICAgICAzMQotI2RlZmluZSBTWU5USF9TWU5USDJfVkNfQ0FMX1JFRl9MU0IgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFNZTlRIX1NZTlRIMl9WQ19DQUxfUkVGX01BU0sgICAgICAgICAgICAgMHhlMDAwMDAwMAotI2RlZmluZSBTWU5USF9TWU5USDJfVkNfQ0FMX1JFRl9HRVQoeCkgICAgICAgICAgICgoKHgpICYgU1lOVEhfU1lOVEgyX1ZDX0NBTF9SRUZfTUFTSykgPj4gU1lOVEhfU1lOVEgyX1ZDX0NBTF9SRUZfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDJfVkNfQ0FMX1JFRl9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRIMl9WQ19DQUxfUkVGX0xTQikgJiBTWU5USF9TWU5USDJfVkNfQ0FMX1JFRl9NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDJfVkNfSElfUkVGX01TQiAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFNZTlRIX1NZTlRIMl9WQ19ISV9SRUZfTFNCICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgU1lOVEhfU1lOVEgyX1ZDX0hJX1JFRl9NQVNLICAgICAgICAgICAgICAweDFjMDAwMDAwCi0jZGVmaW5lIFNZTlRIX1NZTlRIMl9WQ19ISV9SRUZfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDJfVkNfSElfUkVGX01BU0spID4+IFNZTlRIX1NZTlRIMl9WQ19ISV9SRUZfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDJfVkNfSElfUkVGX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRIMl9WQ19ISV9SRUZfTFNCKSAmIFNZTlRIX1NZTlRIMl9WQ19ISV9SRUZfTUFTSykKLSNkZWZpbmUgU1lOVEhfU1lOVEgyX1ZDX01JRF9SRUZfTVNCICAgICAgICAgICAgICAyNQotI2RlZmluZSBTWU5USF9TWU5USDJfVkNfTUlEX1JFRl9MU0IgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFNZTlRIX1NZTlRIMl9WQ19NSURfUkVGX01BU0sgICAgICAgICAgICAgMHgwMzgwMDAwMAotI2RlZmluZSBTWU5USF9TWU5USDJfVkNfTUlEX1JFRl9HRVQoeCkgICAgICAgICAgICgoKHgpICYgU1lOVEhfU1lOVEgyX1ZDX01JRF9SRUZfTUFTSykgPj4gU1lOVEhfU1lOVEgyX1ZDX01JRF9SRUZfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDJfVkNfTUlEX1JFRl9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRIMl9WQ19NSURfUkVGX0xTQikgJiBTWU5USF9TWU5USDJfVkNfTUlEX1JFRl9NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDJfVkNfTE9XX1JFRl9NU0IgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFNZTlRIX1NZTlRIMl9WQ19MT1dfUkVGX0xTQiAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgU1lOVEhfU1lOVEgyX1ZDX0xPV19SRUZfTUFTSyAgICAgICAgICAgICAweDAwNzAwMDAwCi0jZGVmaW5lIFNZTlRIX1NZTlRIMl9WQ19MT1dfUkVGX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDJfVkNfTE9XX1JFRl9NQVNLKSA+PiBTWU5USF9TWU5USDJfVkNfTE9XX1JFRl9MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRIMl9WQ19MT1dfUkVGX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEgyX1ZDX0xPV19SRUZfTFNCKSAmIFNZTlRIX1NZTlRIMl9WQ19MT1dfUkVGX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRIMl9MT09QXzNSRF9PUkRFUl9SX01TQiAgICAgICAgMTkKLSNkZWZpbmUgU1lOVEhfU1lOVEgyX0xPT1BfM1JEX09SREVSX1JfTFNCICAgICAgICAxNQotI2RlZmluZSBTWU5USF9TWU5USDJfTE9PUF8zUkRfT1JERVJfUl9NQVNLICAgICAgIDB4MDAwZjgwMDAKLSNkZWZpbmUgU1lOVEhfU1lOVEgyX0xPT1BfM1JEX09SREVSX1JfR0VUKHgpICAgICAoKCh4KSAmIFNZTlRIX1NZTlRIMl9MT09QXzNSRF9PUkRFUl9SX01BU0spID4+IFNZTlRIX1NZTlRIMl9MT09QXzNSRF9PUkRFUl9SX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEgyX0xPT1BfM1JEX09SREVSX1JfU0VUKHgpICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDJfTE9PUF8zUkRfT1JERVJfUl9MU0IpICYgU1lOVEhfU1lOVEgyX0xPT1BfM1JEX09SREVSX1JfTUFTSykKLSNkZWZpbmUgU1lOVEhfU1lOVEgyX0xPT1BfQ1BfTVNCICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBTWU5USF9TWU5USDJfTE9PUF9DUF9MU0IgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFNZTlRIX1NZTlRIMl9MT09QX0NQX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwN2MwMAotI2RlZmluZSBTWU5USF9TWU5USDJfTE9PUF9DUF9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgU1lOVEhfU1lOVEgyX0xPT1BfQ1BfTUFTSykgPj4gU1lOVEhfU1lOVEgyX0xPT1BfQ1BfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDJfTE9PUF9DUF9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRIMl9MT09QX0NQX0xTQikgJiBTWU5USF9TWU5USDJfTE9PUF9DUF9NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDJfTE9PUF9SU19NU0IgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgU1lOVEhfU1lOVEgyX0xPT1BfUlNfTFNCICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFNZTlRIX1NZTlRIMl9MT09QX1JTX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDNlMAotI2RlZmluZSBTWU5USF9TWU5USDJfTE9PUF9SU19HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgU1lOVEhfU1lOVEgyX0xPT1BfUlNfTUFTSykgPj4gU1lOVEhfU1lOVEgyX0xPT1BfUlNfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDJfTE9PUF9SU19TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRIMl9MT09QX1JTX0xTQikgJiBTWU5USF9TWU5USDJfTE9PUF9SU19NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDJfTE9PUF9DU19NU0IgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgU1lOVEhfU1lOVEgyX0xPT1BfQ1NfTFNCICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFNZTlRIX1NZTlRIMl9MT09QX0NTX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAotI2RlZmluZSBTWU5USF9TWU5USDJfTE9PUF9DU19HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgU1lOVEhfU1lOVEgyX0xPT1BfQ1NfTUFTSykgPj4gU1lOVEhfU1lOVEgyX0xPT1BfQ1NfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDJfTE9PUF9DU19TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRIMl9MT09QX0NTX0xTQikgJiBTWU5USF9TWU5USDJfTE9PUF9DU19NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDJfU1BBUkVfQklUU19NU0IgICAgICAgICAgICAgIDIKLSNkZWZpbmUgU1lOVEhfU1lOVEgyX1NQQVJFX0JJVFNfTFNCICAgICAgICAgICAgICAwCi0jZGVmaW5lIFNZTlRIX1NZTlRIMl9TUEFSRV9CSVRTX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAwNwotI2RlZmluZSBTWU5USF9TWU5USDJfU1BBUkVfQklUU19HRVQoeCkgICAgICAgICAgICgoKHgpICYgU1lOVEhfU1lOVEgyX1NQQVJFX0JJVFNfTUFTSykgPj4gU1lOVEhfU1lOVEgyX1NQQVJFX0JJVFNfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDJfU1BBUkVfQklUU19TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRIMl9TUEFSRV9CSVRTX0xTQikgJiBTWU5USF9TWU5USDJfU1BBUkVfQklUU19NQVNLKQotCi0jZGVmaW5lIFNZTlRIX1NZTlRIM19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBTWU5USF9TWU5USDNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgU1lOVEhfU1lOVEgzX0RJU19DTEtfWFRBTF9NU0IgICAgICAgICAgICAzMQotI2RlZmluZSBTWU5USF9TWU5USDNfRElTX0NMS19YVEFMX0xTQiAgICAgICAgICAgIDMxCi0jZGVmaW5lIFNZTlRIX1NZTlRIM19ESVNfQ0xLX1hUQUxfTUFTSyAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBTWU5USF9TWU5USDNfRElTX0NMS19YVEFMX0dFVCh4KSAgICAgICAgICgoKHgpICYgU1lOVEhfU1lOVEgzX0RJU19DTEtfWFRBTF9NQVNLKSA+PiBTWU5USF9TWU5USDNfRElTX0NMS19YVEFMX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEgzX0RJU19DTEtfWFRBTF9TRVQoeCkgICAgICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDNfRElTX0NMS19YVEFMX0xTQikgJiBTWU5USF9TWU5USDNfRElTX0NMS19YVEFMX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRIM19TRUxfQ0xLX0RJVjJfTVNCICAgICAgICAgICAgMzAKLSNkZWZpbmUgU1lOVEhfU1lOVEgzX1NFTF9DTEtfRElWMl9MU0IgICAgICAgICAgICAzMAotI2RlZmluZSBTWU5USF9TWU5USDNfU0VMX0NMS19ESVYyX01BU0sgICAgICAgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgU1lOVEhfU1lOVEgzX1NFTF9DTEtfRElWMl9HRVQoeCkgICAgICAgICAoKCh4KSAmIFNZTlRIX1NZTlRIM19TRUxfQ0xLX0RJVjJfTUFTSykgPj4gU1lOVEhfU1lOVEgzX1NFTF9DTEtfRElWMl9MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRIM19TRUxfQ0xLX0RJVjJfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEgzX1NFTF9DTEtfRElWMl9MU0IpICYgU1lOVEhfU1lOVEgzX1NFTF9DTEtfRElWMl9NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDNfV0FJVF9TSE9SVFJfUFdSVVBfTVNCICAgICAgIDI5Ci0jZGVmaW5lIFNZTlRIX1NZTlRIM19XQUlUX1NIT1JUUl9QV1JVUF9MU0IgICAgICAgMjQKLSNkZWZpbmUgU1lOVEhfU1lOVEgzX1dBSVRfU0hPUlRSX1BXUlVQX01BU0sgICAgICAweDNmMDAwMDAwCi0jZGVmaW5lIFNZTlRIX1NZTlRIM19XQUlUX1NIT1JUUl9QV1JVUF9HRVQoeCkgICAgKCgoeCkgJiBTWU5USF9TWU5USDNfV0FJVF9TSE9SVFJfUFdSVVBfTUFTSykgPj4gU1lOVEhfU1lOVEgzX1dBSVRfU0hPUlRSX1BXUlVQX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEgzX1dBSVRfU0hPUlRSX1BXUlVQX1NFVCh4KSAgICAoKCh4KSA8PCBTWU5USF9TWU5USDNfV0FJVF9TSE9SVFJfUFdSVVBfTFNCKSAmIFNZTlRIX1NZTlRIM19XQUlUX1NIT1JUUl9QV1JVUF9NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDNfV0FJVF9QV1JVUF9NU0IgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFNZTlRIX1NZTlRIM19XQUlUX1BXUlVQX0xTQiAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgU1lOVEhfU1lOVEgzX1dBSVRfUFdSVVBfTUFTSyAgICAgICAgICAgICAweDAwZmMwMDAwCi0jZGVmaW5lIFNZTlRIX1NZTlRIM19XQUlUX1BXUlVQX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDNfV0FJVF9QV1JVUF9NQVNLKSA+PiBTWU5USF9TWU5USDNfV0FJVF9QV1JVUF9MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRIM19XQUlUX1BXUlVQX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEgzX1dBSVRfUFdSVVBfTFNCKSAmIFNZTlRIX1NZTlRIM19XQUlUX1BXUlVQX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRIM19XQUlUX0NBTF9CSU5fTVNCICAgICAgICAgICAgMTcKLSNkZWZpbmUgU1lOVEhfU1lOVEgzX1dBSVRfQ0FMX0JJTl9MU0IgICAgICAgICAgICAxMgotI2RlZmluZSBTWU5USF9TWU5USDNfV0FJVF9DQUxfQklOX01BU0sgICAgICAgICAgIDB4MDAwM2YwMDAKLSNkZWZpbmUgU1lOVEhfU1lOVEgzX1dBSVRfQ0FMX0JJTl9HRVQoeCkgICAgICAgICAoKCh4KSAmIFNZTlRIX1NZTlRIM19XQUlUX0NBTF9CSU5fTUFTSykgPj4gU1lOVEhfU1lOVEgzX1dBSVRfQ0FMX0JJTl9MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRIM19XQUlUX0NBTF9CSU5fU0VUKHgpICAgICAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEgzX1dBSVRfQ0FMX0JJTl9MU0IpICYgU1lOVEhfU1lOVEgzX1dBSVRfQ0FMX0JJTl9NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDNfV0FJVF9DQUxfTElOX01TQiAgICAgICAgICAgIDExCi0jZGVmaW5lIFNZTlRIX1NZTlRIM19XQUlUX0NBTF9MSU5fTFNCICAgICAgICAgICAgNgotI2RlZmluZSBTWU5USF9TWU5USDNfV0FJVF9DQUxfTElOX01BU0sgICAgICAgICAgIDB4MDAwMDBmYzAKLSNkZWZpbmUgU1lOVEhfU1lOVEgzX1dBSVRfQ0FMX0xJTl9HRVQoeCkgICAgICAgICAoKCh4KSAmIFNZTlRIX1NZTlRIM19XQUlUX0NBTF9MSU5fTUFTSykgPj4gU1lOVEhfU1lOVEgzX1dBSVRfQ0FMX0xJTl9MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRIM19XQUlUX0NBTF9MSU5fU0VUKHgpICAgICAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEgzX1dBSVRfQ0FMX0xJTl9MU0IpICYgU1lOVEhfU1lOVEgzX1dBSVRfQ0FMX0xJTl9NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDNfV0FJVF9WQ19DSEVDS19NU0IgICAgICAgICAgIDUKLSNkZWZpbmUgU1lOVEhfU1lOVEgzX1dBSVRfVkNfQ0hFQ0tfTFNCICAgICAgICAgICAwCi0jZGVmaW5lIFNZTlRIX1NZTlRIM19XQUlUX1ZDX0NIRUNLX01BU0sgICAgICAgICAgMHgwMDAwMDAzZgotI2RlZmluZSBTWU5USF9TWU5USDNfV0FJVF9WQ19DSEVDS19HRVQoeCkgICAgICAgICgoKHgpICYgU1lOVEhfU1lOVEgzX1dBSVRfVkNfQ0hFQ0tfTUFTSykgPj4gU1lOVEhfU1lOVEgzX1dBSVRfVkNfQ0hFQ0tfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDNfV0FJVF9WQ19DSEVDS19TRVQoeCkgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRIM19XQUlUX1ZDX0NIRUNLX0xTQikgJiBTWU5USF9TWU5USDNfV0FJVF9WQ19DSEVDS19NQVNLKQotCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwYwotI2RlZmluZSBTWU5USF9TWU5USDRfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGMKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X0RJU19MSU5fQ0FQU0VBUkNIX01TQiAgICAgICAzMQotI2RlZmluZSBTWU5USF9TWU5USDRfRElTX0xJTl9DQVBTRUFSQ0hfTFNCICAgICAgIDMxCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9ESVNfTElOX0NBUFNFQVJDSF9NQVNLICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBTWU5USF9TWU5USDRfRElTX0xJTl9DQVBTRUFSQ0hfR0VUKHgpICAgICgoKHgpICYgU1lOVEhfU1lOVEg0X0RJU19MSU5fQ0FQU0VBUkNIX01BU0spID4+IFNZTlRIX1NZTlRINF9ESVNfTElOX0NBUFNFQVJDSF9MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9ESVNfTElOX0NBUFNFQVJDSF9TRVQoeCkgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEg0X0RJU19MSU5fQ0FQU0VBUkNIX0xTQikgJiBTWU5USF9TWU5USDRfRElTX0xJTl9DQVBTRUFSQ0hfTUFTSykKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X0RJU19MT1NUVkNfTVNCICAgICAgICAgICAgICAzMAotI2RlZmluZSBTWU5USF9TWU5USDRfRElTX0xPU1RWQ19MU0IgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9ESVNfTE9TVFZDX01BU0sgICAgICAgICAgICAgMHg0MDAwMDAwMAotI2RlZmluZSBTWU5USF9TWU5USDRfRElTX0xPU1RWQ19HRVQoeCkgICAgICAgICAgICgoKHgpICYgU1lOVEhfU1lOVEg0X0RJU19MT1NUVkNfTUFTSykgPj4gU1lOVEhfU1lOVEg0X0RJU19MT1NUVkNfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDRfRElTX0xPU1RWQ19TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRINF9ESVNfTE9TVFZDX0xTQikgJiBTWU5USF9TWU5USDRfRElTX0xPU1RWQ19NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDRfQUxXQVlTX1NIT1JUUl9NU0IgICAgICAgICAgIDI5Ci0jZGVmaW5lIFNZTlRIX1NZTlRINF9BTFdBWVNfU0hPUlRSX0xTQiAgICAgICAgICAgMjkKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X0FMV0FZU19TSE9SVFJfTUFTSyAgICAgICAgICAweDIwMDAwMDAwCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9BTFdBWVNfU0hPUlRSX0dFVCh4KSAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDRfQUxXQVlTX1NIT1JUUl9NQVNLKSA+PiBTWU5USF9TWU5USDRfQUxXQVlTX1NIT1JUUl9MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9BTFdBWVNfU0hPUlRSX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEg0X0FMV0FZU19TSE9SVFJfTFNCKSAmIFNZTlRIX1NZTlRINF9BTFdBWVNfU0hPUlRSX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9TSE9SVFJfVU5USUxfTE9DS0VEX01TQiAgICAgMjgKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X1NIT1JUUl9VTlRJTF9MT0NLRURfTFNCICAgICAyOAotI2RlZmluZSBTWU5USF9TWU5USDRfU0hPUlRSX1VOVElMX0xPQ0tFRF9NQVNLICAgIDB4MTAwMDAwMDAKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X1NIT1JUUl9VTlRJTF9MT0NLRURfR0VUKHgpICAoKCh4KSAmIFNZTlRIX1NZTlRINF9TSE9SVFJfVU5USUxfTE9DS0VEX01BU0spID4+IFNZTlRIX1NZTlRINF9TSE9SVFJfVU5USUxfTE9DS0VEX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X1NIT1JUUl9VTlRJTF9MT0NLRURfU0VUKHgpICAoKCh4KSA8PCBTWU5USF9TWU5USDRfU0hPUlRSX1VOVElMX0xPQ0tFRF9MU0IpICYgU1lOVEhfU1lOVEg0X1NIT1JUUl9VTlRJTF9MT0NLRURfTUFTSykKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X0ZPUkNFX1BJTlZDX01TQiAgICAgICAgICAgICAyNwotI2RlZmluZSBTWU5USF9TWU5USDRfRk9SQ0VfUElOVkNfTFNCICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFNZTlRIX1NZTlRINF9GT1JDRV9QSU5WQ19NQVNLICAgICAgICAgICAgMHgwODAwMDAwMAotI2RlZmluZSBTWU5USF9TWU5USDRfRk9SQ0VfUElOVkNfR0VUKHgpICAgICAgICAgICgoKHgpICYgU1lOVEhfU1lOVEg0X0ZPUkNFX1BJTlZDX01BU0spID4+IFNZTlRIX1NZTlRINF9GT1JDRV9QSU5WQ19MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9GT1JDRV9QSU5WQ19TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEg0X0ZPUkNFX1BJTlZDX0xTQikgJiBTWU5USF9TWU5USDRfRk9SQ0VfUElOVkNfTUFTSykKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X0ZPUkNFX1ZDT0NBUF9NU0IgICAgICAgICAgICAyNgotI2RlZmluZSBTWU5USF9TWU5USDRfRk9SQ0VfVkNPQ0FQX0xTQiAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFNZTlRIX1NZTlRINF9GT1JDRV9WQ09DQVBfTUFTSyAgICAgICAgICAgMHgwNDAwMDAwMAotI2RlZmluZSBTWU5USF9TWU5USDRfRk9SQ0VfVkNPQ0FQX0dFVCh4KSAgICAgICAgICgoKHgpICYgU1lOVEhfU1lOVEg0X0ZPUkNFX1ZDT0NBUF9NQVNLKSA+PiBTWU5USF9TWU5USDRfRk9SQ0VfVkNPQ0FQX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X0ZPUkNFX1ZDT0NBUF9TRVQoeCkgICAgICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDRfRk9SQ0VfVkNPQ0FQX0xTQikgJiBTWU5USF9TWU5USDRfRk9SQ0VfVkNPQ0FQX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9WQ09DQVBfT1ZSX01TQiAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X1ZDT0NBUF9PVlJfTFNCICAgICAgICAgICAgICAxOAotI2RlZmluZSBTWU5USF9TWU5USDRfVkNPQ0FQX09WUl9NQVNLICAgICAgICAgICAgIDB4MDNmYzAwMDAKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X1ZDT0NBUF9PVlJfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIFNZTlRIX1NZTlRINF9WQ09DQVBfT1ZSX01BU0spID4+IFNZTlRIX1NZTlRINF9WQ09DQVBfT1ZSX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X1ZDT0NBUF9PVlJfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDRfVkNPQ0FQX09WUl9MU0IpICYgU1lOVEhfU1lOVEg0X1ZDT0NBUF9PVlJfTUFTSykKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X1ZDT0NBUFBVTExVUF9NU0IgICAgICAgICAgICAxNwotI2RlZmluZSBTWU5USF9TWU5USDRfVkNPQ0FQUFVMTFVQX0xTQiAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFNZTlRIX1NZTlRINF9WQ09DQVBQVUxMVVBfTUFTSyAgICAgICAgICAgMHgwMDAyMDAwMAotI2RlZmluZSBTWU5USF9TWU5USDRfVkNPQ0FQUFVMTFVQX0dFVCh4KSAgICAgICAgICgoKHgpICYgU1lOVEhfU1lOVEg0X1ZDT0NBUFBVTExVUF9NQVNLKSA+PiBTWU5USF9TWU5USDRfVkNPQ0FQUFVMTFVQX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X1ZDT0NBUFBVTExVUF9TRVQoeCkgICAgICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDRfVkNPQ0FQUFVMTFVQX0xTQikgJiBTWU5USF9TWU5USDRfVkNPQ0FQUFVMTFVQX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9SRUZESVZTRUxfTVNCICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X1JFRkRJVlNFTF9MU0IgICAgICAgICAgICAgICAxNQotI2RlZmluZSBTWU5USF9TWU5USDRfUkVGRElWU0VMX01BU0sgICAgICAgICAgICAgIDB4MDAwMTgwMDAKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X1JFRkRJVlNFTF9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFNZTlRIX1NZTlRINF9SRUZESVZTRUxfTUFTSykgPj4gU1lOVEhfU1lOVEg0X1JFRkRJVlNFTF9MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9SRUZESVZTRUxfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEg0X1JFRkRJVlNFTF9MU0IpICYgU1lOVEhfU1lOVEg0X1JFRkRJVlNFTF9NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDRfUEZEREVMQVlfTVNCICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFNZTlRIX1NZTlRINF9QRkRERUxBWV9MU0IgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X1BGRERFTEFZX01BU0sgICAgICAgICAgICAgICAweDAwMDA0MDAwCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9QRkRERUxBWV9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDRfUEZEREVMQVlfTUFTSykgPj4gU1lOVEhfU1lOVEg0X1BGRERFTEFZX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X1BGRERFTEFZX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDRfUEZEREVMQVlfTFNCKSAmIFNZTlRIX1NZTlRINF9QRkRERUxBWV9NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDRfUEZEX0RJU0FCTEVfTVNCICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9QRkRfRElTQUJMRV9MU0IgICAgICAgICAgICAgMTMKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X1BGRF9ESVNBQkxFX01BU0sgICAgICAgICAgICAweDAwMDAyMDAwCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9QRkRfRElTQUJMRV9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDRfUEZEX0RJU0FCTEVfTUFTSykgPj4gU1lOVEhfU1lOVEg0X1BGRF9ESVNBQkxFX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X1BGRF9ESVNBQkxFX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDRfUEZEX0RJU0FCTEVfTFNCKSAmIFNZTlRIX1NZTlRINF9QRkRfRElTQUJMRV9NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDRfUFJFU0NTRUxfTVNCICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9QUkVTQ1NFTF9MU0IgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X1BSRVNDU0VMX01BU0sgICAgICAgICAgICAgICAweDAwMDAxODAwCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9QUkVTQ1NFTF9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDRfUFJFU0NTRUxfTUFTSykgPj4gU1lOVEhfU1lOVEg0X1BSRVNDU0VMX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X1BSRVNDU0VMX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDRfUFJFU0NTRUxfTFNCKSAmIFNZTlRIX1NZTlRINF9QUkVTQ1NFTF9NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDRfUkVTRVRfUFJFU0NfTVNCICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9SRVNFVF9QUkVTQ19MU0IgICAgICAgICAgICAgMTAKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X1JFU0VUX1BSRVNDX01BU0sgICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9SRVNFVF9QUkVTQ19HRVQoeCkgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDRfUkVTRVRfUFJFU0NfTUFTSykgPj4gU1lOVEhfU1lOVEg0X1JFU0VUX1BSRVNDX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X1JFU0VUX1BSRVNDX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDRfUkVTRVRfUFJFU0NfTFNCKSAmIFNZTlRIX1NZTlRINF9SRVNFVF9QUkVTQ19NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDRfU0RNX0RJU0FCTEVfTVNCICAgICAgICAgICAgIDkKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X1NETV9ESVNBQkxFX0xTQiAgICAgICAgICAgICA5Ci0jZGVmaW5lIFNZTlRIX1NZTlRINF9TRE1fRElTQUJMRV9NQVNLICAgICAgICAgICAgMHgwMDAwMDIwMAotI2RlZmluZSBTWU5USF9TWU5USDRfU0RNX0RJU0FCTEVfR0VUKHgpICAgICAgICAgICgoKHgpICYgU1lOVEhfU1lOVEg0X1NETV9ESVNBQkxFX01BU0spID4+IFNZTlRIX1NZTlRINF9TRE1fRElTQUJMRV9MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9TRE1fRElTQUJMRV9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEg0X1NETV9ESVNBQkxFX0xTQikgJiBTWU5USF9TWU5USDRfU0RNX0RJU0FCTEVfTUFTSykKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X1NETV9NT0RFX01TQiAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFNZTlRIX1NZTlRINF9TRE1fTU9ERV9MU0IgICAgICAgICAgICAgICAgOAotI2RlZmluZSBTWU5USF9TWU5USDRfU0RNX01PREVfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X1NETV9NT0RFX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIFNZTlRIX1NZTlRINF9TRE1fTU9ERV9NQVNLKSA+PiBTWU5USF9TWU5USDRfU0RNX01PREVfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDRfU0RNX01PREVfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRINF9TRE1fTU9ERV9MU0IpICYgU1lOVEhfU1lOVEg0X1NETV9NT0RFX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9TRE1fRElUSEVSX01TQiAgICAgICAgICAgICAgNwotI2RlZmluZSBTWU5USF9TWU5USDRfU0RNX0RJVEhFUl9MU0IgICAgICAgICAgICAgIDYKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X1NETV9ESVRIRVJfTUFTSyAgICAgICAgICAgICAweDAwMDAwMGMwCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9TRE1fRElUSEVSX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDRfU0RNX0RJVEhFUl9NQVNLKSA+PiBTWU5USF9TWU5USDRfU0RNX0RJVEhFUl9MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9TRE1fRElUSEVSX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEg0X1NETV9ESVRIRVJfTFNCKSAmIFNZTlRIX1NZTlRINF9TRE1fRElUSEVSX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9QU0NPVU5UX0ZCU0VMX01TQiAgICAgICAgICAgNQotI2RlZmluZSBTWU5USF9TWU5USDRfUFNDT1VOVF9GQlNFTF9MU0IgICAgICAgICAgIDUKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X1BTQ09VTlRfRkJTRUxfTUFTSyAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9QU0NPVU5UX0ZCU0VMX0dFVCh4KSAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDRfUFNDT1VOVF9GQlNFTF9NQVNLKSA+PiBTWU5USF9TWU5USDRfUFNDT1VOVF9GQlNFTF9MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9QU0NPVU5UX0ZCU0VMX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEg0X1BTQ09VTlRfRkJTRUxfTFNCKSAmIFNZTlRIX1NZTlRINF9QU0NPVU5UX0ZCU0VMX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9TRUxfQ0xLWFRBTF9FREdFX01TQiAgICAgICAgNAotI2RlZmluZSBTWU5USF9TWU5USDRfU0VMX0NMS1hUQUxfRURHRV9MU0IgICAgICAgIDQKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X1NFTF9DTEtYVEFMX0VER0VfTUFTSyAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9TRUxfQ0xLWFRBTF9FREdFX0dFVCh4KSAgICAgKCgoeCkgJiBTWU5USF9TWU5USDRfU0VMX0NMS1hUQUxfRURHRV9NQVNLKSA+PiBTWU5USF9TWU5USDRfU0VMX0NMS1hUQUxfRURHRV9MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9TRUxfQ0xLWFRBTF9FREdFX1NFVCh4KSAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEg0X1NFTF9DTEtYVEFMX0VER0VfTFNCKSAmIFNZTlRIX1NZTlRINF9TRUxfQ0xLWFRBTF9FREdFX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9TUEFSRV9NSVNDX01TQiAgICAgICAgICAgICAgMwotI2RlZmluZSBTWU5USF9TWU5USDRfU1BBUkVfTUlTQ19MU0IgICAgICAgICAgICAgIDIKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X1NQQVJFX01JU0NfTUFTSyAgICAgICAgICAgICAweDAwMDAwMDBjCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9TUEFSRV9NSVNDX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDRfU1BBUkVfTUlTQ19NQVNLKSA+PiBTWU5USF9TWU5USDRfU1BBUkVfTUlTQ19MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9TUEFSRV9NSVNDX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEg0X1NQQVJFX01JU0NfTFNCKSAmIFNZTlRIX1NZTlRINF9TUEFSRV9NSVNDX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9MT05HU0hJRlRTRUxfTVNCICAgICAgICAgICAgMQotI2RlZmluZSBTWU5USF9TWU5USDRfTE9OR1NISUZUU0VMX0xTQiAgICAgICAgICAgIDEKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X0xPTkdTSElGVFNFTF9NQVNLICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9MT05HU0hJRlRTRUxfR0VUKHgpICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDRfTE9OR1NISUZUU0VMX01BU0spID4+IFNZTlRIX1NZTlRINF9MT05HU0hJRlRTRUxfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDRfTE9OR1NISUZUU0VMX1NFVCh4KSAgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRINF9MT05HU0hJRlRTRUxfTFNCKSAmIFNZTlRIX1NZTlRINF9MT05HU0hJRlRTRUxfTUFTSykKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X0ZPUkNFX1NISUZUUkVHX01TQiAgICAgICAgICAwCi0jZGVmaW5lIFNZTlRIX1NZTlRINF9GT1JDRV9TSElGVFJFR19MU0IgICAgICAgICAgMAotI2RlZmluZSBTWU5USF9TWU5USDRfRk9SQ0VfU0hJRlRSRUdfTUFTSyAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgU1lOVEhfU1lOVEg0X0ZPUkNFX1NISUZUUkVHX0dFVCh4KSAgICAgICAoKCh4KSAmIFNZTlRIX1NZTlRINF9GT1JDRV9TSElGVFJFR19NQVNLKSA+PiBTWU5USF9TWU5USDRfRk9SQ0VfU0hJRlRSRUdfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDRfRk9SQ0VfU0hJRlRSRUdfU0VUKHgpICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRINF9GT1JDRV9TSElGVFJFR19MU0IpICYgU1lOVEhfU1lOVEg0X0ZPUkNFX1NISUZUUkVHX01BU0spCi0KLSNkZWZpbmUgU1lOVEhfU1lOVEg1X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIFNZTlRIX1NZTlRINV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBTWU5USF9TWU5USDVfTE9PUF9JUDBfTVNCICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFNZTlRIX1NZTlRINV9MT09QX0lQMF9MU0IgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgU1lOVEhfU1lOVEg1X0xPT1BfSVAwX01BU0sgICAgICAgICAgICAgICAweGYwMDAwMDAwCi0jZGVmaW5lIFNZTlRIX1NZTlRINV9MT09QX0lQMF9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDVfTE9PUF9JUDBfTUFTSykgPj4gU1lOVEhfU1lOVEg1X0xPT1BfSVAwX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEg1X0xPT1BfSVAwX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDVfTE9PUF9JUDBfTFNCKSAmIFNZTlRIX1NZTlRINV9MT09QX0lQMF9NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDVfU0xPUEVfSVBfTVNCICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFNZTlRIX1NZTlRINV9TTE9QRV9JUF9MU0IgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgU1lOVEhfU1lOVEg1X1NMT1BFX0lQX01BU0sgICAgICAgICAgICAgICAweDBlMDAwMDAwCi0jZGVmaW5lIFNZTlRIX1NZTlRINV9TTE9QRV9JUF9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDVfU0xPUEVfSVBfTUFTSykgPj4gU1lOVEhfU1lOVEg1X1NMT1BFX0lQX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEg1X1NMT1BFX0lQX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDVfU0xPUEVfSVBfTFNCKSAmIFNZTlRIX1NZTlRINV9TTE9QRV9JUF9NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDVfQ1BCSUFTX01TQiAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFNZTlRIX1NZTlRINV9DUEJJQVNfTFNCICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgU1lOVEhfU1lOVEg1X0NQQklBU19NQVNLICAgICAgICAgICAgICAgICAweDAxODAwMDAwCi0jZGVmaW5lIFNZTlRIX1NZTlRINV9DUEJJQVNfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDVfQ1BCSUFTX01BU0spID4+IFNZTlRIX1NZTlRINV9DUEJJQVNfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDVfQ1BCSUFTX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRINV9DUEJJQVNfTFNCKSAmIFNZTlRIX1NZTlRINV9DUEJJQVNfTUFTSykKLSNkZWZpbmUgU1lOVEhfU1lOVEg1X0NQU1RFRVJJTkdfRU5fTVNCICAgICAgICAgICAyMgotI2RlZmluZSBTWU5USF9TWU5USDVfQ1BTVEVFUklOR19FTl9MU0IgICAgICAgICAgIDIyCi0jZGVmaW5lIFNZTlRIX1NZTlRINV9DUFNURUVSSU5HX0VOX01BU0sgICAgICAgICAgMHgwMDQwMDAwMAotI2RlZmluZSBTWU5USF9TWU5USDVfQ1BTVEVFUklOR19FTl9HRVQoeCkgICAgICAgICgoKHgpICYgU1lOVEhfU1lOVEg1X0NQU1RFRVJJTkdfRU5fTUFTSykgPj4gU1lOVEhfU1lOVEg1X0NQU1RFRVJJTkdfRU5fTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDVfQ1BTVEVFUklOR19FTl9TRVQoeCkgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRINV9DUFNURUVSSU5HX0VOX0xTQikgJiBTWU5USF9TWU5USDVfQ1BTVEVFUklOR19FTl9NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDVfQ1BMT1dMS19NU0IgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFNZTlRIX1NZTlRINV9DUExPV0xLX0xTQiAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgU1lOVEhfU1lOVEg1X0NQTE9XTEtfTUFTSyAgICAgICAgICAgICAgICAweDAwMjAwMDAwCi0jZGVmaW5lIFNZTlRIX1NZTlRINV9DUExPV0xLX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDVfQ1BMT1dMS19NQVNLKSA+PiBTWU5USF9TWU5USDVfQ1BMT1dMS19MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRINV9DUExPV0xLX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEg1X0NQTE9XTEtfTFNCKSAmIFNZTlRIX1NZTlRINV9DUExPV0xLX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRINV9MT09QTEVBS0NVUl9NU0IgICAgICAgICAgICAgMjAKLSNkZWZpbmUgU1lOVEhfU1lOVEg1X0xPT1BMRUFLQ1VSX0xTQiAgICAgICAgICAgICAxNwotI2RlZmluZSBTWU5USF9TWU5USDVfTE9PUExFQUtDVVJfTUFTSyAgICAgICAgICAgIDB4MDAxZTAwMDAKLSNkZWZpbmUgU1lOVEhfU1lOVEg1X0xPT1BMRUFLQ1VSX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIFNZTlRIX1NZTlRINV9MT09QTEVBS0NVUl9NQVNLKSA+PiBTWU5USF9TWU5USDVfTE9PUExFQUtDVVJfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDVfTE9PUExFQUtDVVJfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRINV9MT09QTEVBS0NVUl9MU0IpICYgU1lOVEhfU1lOVEg1X0xPT1BMRUFLQ1VSX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRINV9DQVBSQU5HRTFfTVNCICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgU1lOVEhfU1lOVEg1X0NBUFJBTkdFMV9MU0IgICAgICAgICAgICAgICAxMwotI2RlZmluZSBTWU5USF9TWU5USDVfQ0FQUkFOR0UxX01BU0sgICAgICAgICAgICAgIDB4MDAwMWUwMDAKLSNkZWZpbmUgU1lOVEhfU1lOVEg1X0NBUFJBTkdFMV9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFNZTlRIX1NZTlRINV9DQVBSQU5HRTFfTUFTSykgPj4gU1lOVEhfU1lOVEg1X0NBUFJBTkdFMV9MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRINV9DQVBSQU5HRTFfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEg1X0NBUFJBTkdFMV9MU0IpICYgU1lOVEhfU1lOVEg1X0NBUFJBTkdFMV9NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDVfQ0FQUkFOR0UyX01TQiAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFNZTlRIX1NZTlRINV9DQVBSQU5HRTJfTFNCICAgICAgICAgICAgICAgOQotI2RlZmluZSBTWU5USF9TWU5USDVfQ0FQUkFOR0UyX01BU0sgICAgICAgICAgICAgIDB4MDAwMDFlMDAKLSNkZWZpbmUgU1lOVEhfU1lOVEg1X0NBUFJBTkdFMl9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFNZTlRIX1NZTlRINV9DQVBSQU5HRTJfTUFTSykgPj4gU1lOVEhfU1lOVEg1X0NBUFJBTkdFMl9MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRINV9DQVBSQU5HRTJfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEg1X0NBUFJBTkdFMl9MU0IpICYgU1lOVEhfU1lOVEg1X0NBUFJBTkdFMl9NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDVfQ0FQUkFOR0UzX01TQiAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgU1lOVEhfU1lOVEg1X0NBUFJBTkdFM19MU0IgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFNZTlRIX1NZTlRINV9DQVBSQU5HRTNfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDFlMAotI2RlZmluZSBTWU5USF9TWU5USDVfQ0FQUkFOR0UzX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgU1lOVEhfU1lOVEg1X0NBUFJBTkdFM19NQVNLKSA+PiBTWU5USF9TWU5USDVfQ0FQUkFOR0UzX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEg1X0NBUFJBTkdFM19TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDVfQ0FQUkFOR0UzX0xTQikgJiBTWU5USF9TWU5USDVfQ0FQUkFOR0UzX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRINV9GT1JDRV9MT0JVRjVHVFVORV9NU0IgICAgICAgNAotI2RlZmluZSBTWU5USF9TWU5USDVfRk9SQ0VfTE9CVUY1R1RVTkVfTFNCICAgICAgIDQKLSNkZWZpbmUgU1lOVEhfU1lOVEg1X0ZPUkNFX0xPQlVGNUdUVU5FX01BU0sgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIFNZTlRIX1NZTlRINV9GT1JDRV9MT0JVRjVHVFVORV9HRVQoeCkgICAgKCgoeCkgJiBTWU5USF9TWU5USDVfRk9SQ0VfTE9CVUY1R1RVTkVfTUFTSykgPj4gU1lOVEhfU1lOVEg1X0ZPUkNFX0xPQlVGNUdUVU5FX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEg1X0ZPUkNFX0xPQlVGNUdUVU5FX1NFVCh4KSAgICAoKCh4KSA8PCBTWU5USF9TWU5USDVfRk9SQ0VfTE9CVUY1R1RVTkVfTFNCKSAmIFNZTlRIX1NZTlRINV9GT1JDRV9MT0JVRjVHVFVORV9NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDVfTE9CVUY1R1RVTkVfT1ZSX01TQiAgICAgICAgIDMKLSNkZWZpbmUgU1lOVEhfU1lOVEg1X0xPQlVGNUdUVU5FX09WUl9MU0IgICAgICAgICAyCi0jZGVmaW5lIFNZTlRIX1NZTlRINV9MT0JVRjVHVFVORV9PVlJfTUFTSyAgICAgICAgMHgwMDAwMDAwYwotI2RlZmluZSBTWU5USF9TWU5USDVfTE9CVUY1R1RVTkVfT1ZSX0dFVCh4KSAgICAgICgoKHgpICYgU1lOVEhfU1lOVEg1X0xPQlVGNUdUVU5FX09WUl9NQVNLKSA+PiBTWU5USF9TWU5USDVfTE9CVUY1R1RVTkVfT1ZSX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEg1X0xPQlVGNUdUVU5FX09WUl9TRVQoeCkgICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDVfTE9CVUY1R1RVTkVfT1ZSX0xTQikgJiBTWU5USF9TWU5USDVfTE9CVUY1R1RVTkVfT1ZSX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRINV9TUEFSRV9NU0IgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBTWU5USF9TWU5USDVfU1BBUkVfTFNCICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgU1lOVEhfU1lOVEg1X1NQQVJFX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCi0jZGVmaW5lIFNZTlRIX1NZTlRINV9TUEFSRV9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDVfU1BBUkVfTUFTSykgPj4gU1lOVEhfU1lOVEg1X1NQQVJFX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEg1X1NQQVJFX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDVfU1BBUkVfTFNCKSAmIFNZTlRIX1NZTlRINV9TUEFSRV9NQVNLKQotCi0jZGVmaW5lIFNZTlRIX1NZTlRINl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAotI2RlZmluZSBTWU5USF9TWU5USDZfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKLSNkZWZpbmUgU1lOVEhfU1lOVEg2X0lSQ1BfTVNCICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBTWU5USF9TWU5USDZfSVJDUF9MU0IgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFNZTlRIX1NZTlRINl9JUkNQX01BU0sgICAgICAgICAgICAgICAgICAgMHhlMDAwMDAwMAotI2RlZmluZSBTWU5USF9TWU5USDZfSVJDUF9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgU1lOVEhfU1lOVEg2X0lSQ1BfTUFTSykgPj4gU1lOVEhfU1lOVEg2X0lSQ1BfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDZfSVJDUF9TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRINl9JUkNQX0xTQikgJiBTWU5USF9TWU5USDZfSVJDUF9NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDZfSVJWQ01PTl9NU0IgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFNZTlRIX1NZTlRINl9JUlZDTU9OX0xTQiAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgU1lOVEhfU1lOVEg2X0lSVkNNT05fTUFTSyAgICAgICAgICAgICAgICAweDFjMDAwMDAwCi0jZGVmaW5lIFNZTlRIX1NZTlRINl9JUlZDTU9OX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDZfSVJWQ01PTl9NQVNLKSA+PiBTWU5USF9TWU5USDZfSVJWQ01PTl9MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRINl9JUlZDTU9OX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEg2X0lSVkNNT05fTFNCKSAmIFNZTlRIX1NZTlRINl9JUlZDTU9OX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRINl9JUlNQQVJFX01TQiAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgU1lOVEhfU1lOVEg2X0lSU1BBUkVfTFNCICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBTWU5USF9TWU5USDZfSVJTUEFSRV9NQVNLICAgICAgICAgICAgICAgIDB4MDM4MDAwMDAKLSNkZWZpbmUgU1lOVEhfU1lOVEg2X0lSU1BBUkVfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIFNZTlRIX1NZTlRINl9JUlNQQVJFX01BU0spID4+IFNZTlRIX1NZTlRINl9JUlNQQVJFX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEg2X0lSU1BBUkVfU0VUKHgpICAgICAgICAgICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDZfSVJTUEFSRV9MU0IpICYgU1lOVEhfU1lOVEg2X0lSU1BBUkVfTUFTSykKLSNkZWZpbmUgU1lOVEhfU1lOVEg2X0lDUFJFU0NfTVNCICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBTWU5USF9TWU5USDZfSUNQUkVTQ19MU0IgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFNZTlRIX1NZTlRINl9JQ1BSRVNDX01BU0sgICAgICAgICAgICAgICAgMHgwMDcwMDAwMAotI2RlZmluZSBTWU5USF9TWU5USDZfSUNQUkVTQ19HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgU1lOVEhfU1lOVEg2X0lDUFJFU0NfTUFTSykgPj4gU1lOVEhfU1lOVEg2X0lDUFJFU0NfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDZfSUNQUkVTQ19TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRINl9JQ1BSRVNDX0xTQikgJiBTWU5USF9TWU5USDZfSUNQUkVTQ19NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDZfSUNMT0RJVl9NU0IgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFNZTlRIX1NZTlRINl9JQ0xPRElWX0xTQiAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgU1lOVEhfU1lOVEg2X0lDTE9ESVZfTUFTSyAgICAgICAgICAgICAgICAweDAwMGUwMDAwCi0jZGVmaW5lIFNZTlRIX1NZTlRINl9JQ0xPRElWX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDZfSUNMT0RJVl9NQVNLKSA+PiBTWU5USF9TWU5USDZfSUNMT0RJVl9MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRINl9JQ0xPRElWX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEg2X0lDTE9ESVZfTFNCKSAmIFNZTlRIX1NZTlRINl9JQ0xPRElWX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRINl9JQ0xPTUlYX01TQiAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgU1lOVEhfU1lOVEg2X0lDTE9NSVhfTFNCICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBTWU5USF9TWU5USDZfSUNMT01JWF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMWMwMDAKLSNkZWZpbmUgU1lOVEhfU1lOVEg2X0lDTE9NSVhfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIFNZTlRIX1NZTlRINl9JQ0xPTUlYX01BU0spID4+IFNZTlRIX1NZTlRINl9JQ0xPTUlYX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEg2X0lDTE9NSVhfU0VUKHgpICAgICAgICAgICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDZfSUNMT01JWF9MU0IpICYgU1lOVEhfU1lOVEg2X0lDTE9NSVhfTUFTSykKLSNkZWZpbmUgU1lOVEhfU1lOVEg2X0lDU1BBUkVBX01TQiAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBTWU5USF9TWU5USDZfSUNTUEFSRUFfTFNCICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFNZTlRIX1NZTlRINl9JQ1NQQVJFQV9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMzgwMAotI2RlZmluZSBTWU5USF9TWU5USDZfSUNTUEFSRUFfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgU1lOVEhfU1lOVEg2X0lDU1BBUkVBX01BU0spID4+IFNZTlRIX1NZTlRINl9JQ1NQQVJFQV9MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRINl9JQ1NQQVJFQV9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEg2X0lDU1BBUkVBX0xTQikgJiBTWU5USF9TWU5USDZfSUNTUEFSRUFfTUFTSykKLSNkZWZpbmUgU1lOVEhfU1lOVEg2X0lDU1BBUkVCX01TQiAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBTWU5USF9TWU5USDZfSUNTUEFSRUJfTFNCICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgU1lOVEhfU1lOVEg2X0lDU1BBUkVCX01BU0sgICAgICAgICAgICAgICAweDAwMDAwNzAwCi0jZGVmaW5lIFNZTlRIX1NZTlRINl9JQ1NQQVJFQl9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDZfSUNTUEFSRUJfTUFTSykgPj4gU1lOVEhfU1lOVEg2X0lDU1BBUkVCX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEg2X0lDU1BBUkVCX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDZfSUNTUEFSRUJfTFNCKSAmIFNZTlRIX1NZTlRINl9JQ1NQQVJFQl9NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDZfSUNWQ09fTVNCICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgU1lOVEhfU1lOVEg2X0lDVkNPX0xTQiAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFNZTlRIX1NZTlRINl9JQ1ZDT19NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAwMDBlMAotI2RlZmluZSBTWU5USF9TWU5USDZfSUNWQ09fR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgU1lOVEhfU1lOVEg2X0lDVkNPX01BU0spID4+IFNZTlRIX1NZTlRINl9JQ1ZDT19MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRINl9JQ1ZDT19TRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEg2X0lDVkNPX0xTQikgJiBTWU5USF9TWU5USDZfSUNWQ09fTUFTSykKLSNkZWZpbmUgU1lOVEhfU1lOVEg2X1ZDT0JVRkJJQVNfTVNCICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFNZTlRIX1NZTlRINl9WQ09CVUZCSUFTX0xTQiAgICAgICAgICAgICAgMwotI2RlZmluZSBTWU5USF9TWU5USDZfVkNPQlVGQklBU19NQVNLICAgICAgICAgICAgIDB4MDAwMDAwMTgKLSNkZWZpbmUgU1lOVEhfU1lOVEg2X1ZDT0JVRkJJQVNfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIFNZTlRIX1NZTlRINl9WQ09CVUZCSUFTX01BU0spID4+IFNZTlRIX1NZTlRINl9WQ09CVUZCSUFTX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEg2X1ZDT0JVRkJJQVNfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDZfVkNPQlVGQklBU19MU0IpICYgU1lOVEhfU1lOVEg2X1ZDT0JVRkJJQVNfTUFTSykKLSNkZWZpbmUgU1lOVEhfU1lOVEg2X1NQQVJFX0JJQVNfTVNCICAgICAgICAgICAgICAyCi0jZGVmaW5lIFNZTlRIX1NZTlRINl9TUEFSRV9CSUFTX0xTQiAgICAgICAgICAgICAgMAotI2RlZmluZSBTWU5USF9TWU5USDZfU1BBUkVfQklBU19NQVNLICAgICAgICAgICAgIDB4MDAwMDAwMDcKLSNkZWZpbmUgU1lOVEhfU1lOVEg2X1NQQVJFX0JJQVNfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIFNZTlRIX1NZTlRINl9TUEFSRV9CSUFTX01BU0spID4+IFNZTlRIX1NZTlRINl9TUEFSRV9CSUFTX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEg2X1NQQVJFX0JJQVNfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDZfU1BBUkVfQklBU19MU0IpICYgU1lOVEhfU1lOVEg2X1NQQVJFX0JJQVNfTUFTSykKLQotI2RlZmluZSBTWU5USF9TWU5USDdfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKLSNkZWZpbmUgU1lOVEhfU1lOVEg3X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4Ci0jZGVmaW5lIFNZTlRIX1NZTlRIN19TWU5USF9PTl9NU0IgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgU1lOVEhfU1lOVEg3X1NZTlRIX09OX0xTQiAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBTWU5USF9TWU5USDdfU1lOVEhfT05fTUFTSyAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgU1lOVEhfU1lOVEg3X1NZTlRIX09OX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIFNZTlRIX1NZTlRIN19TWU5USF9PTl9NQVNLKSA+PiBTWU5USF9TWU5USDdfU1lOVEhfT05fTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDdfU1lOVEhfT05fU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRIN19TWU5USF9PTl9MU0IpICYgU1lOVEhfU1lOVEg3X1NZTlRIX09OX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRIN19TWU5USF9TTV9TVEFURV9NU0IgICAgICAgICAgMzAKLSNkZWZpbmUgU1lOVEhfU1lOVEg3X1NZTlRIX1NNX1NUQVRFX0xTQiAgICAgICAgICAyNwotI2RlZmluZSBTWU5USF9TWU5USDdfU1lOVEhfU01fU1RBVEVfTUFTSyAgICAgICAgIDB4NzgwMDAwMDAKLSNkZWZpbmUgU1lOVEhfU1lOVEg3X1NZTlRIX1NNX1NUQVRFX0dFVCh4KSAgICAgICAoKCh4KSAmIFNZTlRIX1NZTlRIN19TWU5USF9TTV9TVEFURV9NQVNLKSA+PiBTWU5USF9TWU5USDdfU1lOVEhfU01fU1RBVEVfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDdfU1lOVEhfU01fU1RBVEVfU0VUKHgpICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRIN19TWU5USF9TTV9TVEFURV9MU0IpICYgU1lOVEhfU1lOVEg3X1NZTlRIX1NNX1NUQVRFX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRIN19DQVBfU0VBUkNIX01TQiAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgU1lOVEhfU1lOVEg3X0NBUF9TRUFSQ0hfTFNCICAgICAgICAgICAgICAyNgotI2RlZmluZSBTWU5USF9TWU5USDdfQ0FQX1NFQVJDSF9NQVNLICAgICAgICAgICAgIDB4MDQwMDAwMDAKLSNkZWZpbmUgU1lOVEhfU1lOVEg3X0NBUF9TRUFSQ0hfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIFNZTlRIX1NZTlRIN19DQVBfU0VBUkNIX01BU0spID4+IFNZTlRIX1NZTlRIN19DQVBfU0VBUkNIX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEg3X0NBUF9TRUFSQ0hfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDdfQ0FQX1NFQVJDSF9MU0IpICYgU1lOVEhfU1lOVEg3X0NBUF9TRUFSQ0hfTUFTSykKLSNkZWZpbmUgU1lOVEhfU1lOVEg3X1NZTlRIX0xPQ0tfVkNfT0tfTVNCICAgICAgICAyNQotI2RlZmluZSBTWU5USF9TWU5USDdfU1lOVEhfTE9DS19WQ19PS19MU0IgICAgICAgIDI1Ci0jZGVmaW5lIFNZTlRIX1NZTlRIN19TWU5USF9MT0NLX1ZDX09LX01BU0sgICAgICAgMHgwMjAwMDAwMAotI2RlZmluZSBTWU5USF9TWU5USDdfU1lOVEhfTE9DS19WQ19PS19HRVQoeCkgICAgICgoKHgpICYgU1lOVEhfU1lOVEg3X1NZTlRIX0xPQ0tfVkNfT0tfTUFTSykgPj4gU1lOVEhfU1lOVEg3X1NZTlRIX0xPQ0tfVkNfT0tfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDdfU1lOVEhfTE9DS19WQ19PS19TRVQoeCkgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRIN19TWU5USF9MT0NLX1ZDX09LX0xTQikgJiBTWU5USF9TWU5USDdfU1lOVEhfTE9DS19WQ19PS19NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDdfUElOX1ZDX01TQiAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFNZTlRIX1NZTlRIN19QSU5fVkNfTFNCICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgU1lOVEhfU1lOVEg3X1BJTl9WQ19NQVNLICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCi0jZGVmaW5lIFNZTlRIX1NZTlRIN19QSU5fVkNfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDdfUElOX1ZDX01BU0spID4+IFNZTlRIX1NZTlRIN19QSU5fVkNfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDdfUElOX1ZDX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRIN19QSU5fVkNfTFNCKSAmIFNZTlRIX1NZTlRIN19QSU5fVkNfTUFTSykKLSNkZWZpbmUgU1lOVEhfU1lOVEg3X1ZDT19DQVBfU1RfTVNCICAgICAgICAgICAgICAyMwotI2RlZmluZSBTWU5USF9TWU5USDdfVkNPX0NBUF9TVF9MU0IgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFNZTlRIX1NZTlRIN19WQ09fQ0FQX1NUX01BU0sgICAgICAgICAgICAgMHgwMGZmMDAwMAotI2RlZmluZSBTWU5USF9TWU5USDdfVkNPX0NBUF9TVF9HRVQoeCkgICAgICAgICAgICgoKHgpICYgU1lOVEhfU1lOVEg3X1ZDT19DQVBfU1RfTUFTSykgPj4gU1lOVEhfU1lOVEg3X1ZDT19DQVBfU1RfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDdfVkNPX0NBUF9TVF9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRIN19WQ09fQ0FQX1NUX0xTQikgJiBTWU5USF9TWU5USDdfVkNPX0NBUF9TVF9NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDdfU0hPUlRfUl9NU0IgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFNZTlRIX1NZTlRIN19TSE9SVF9SX0xTQiAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgU1lOVEhfU1lOVEg3X1NIT1JUX1JfTUFTSyAgICAgICAgICAgICAgICAweDAwMDA4MDAwCi0jZGVmaW5lIFNZTlRIX1NZTlRIN19TSE9SVF9SX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDdfU0hPUlRfUl9NQVNLKSA+PiBTWU5USF9TWU5USDdfU0hPUlRfUl9MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRIN19TSE9SVF9SX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEg3X1NIT1JUX1JfTFNCKSAmIFNZTlRIX1NZTlRIN19TSE9SVF9SX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRIN19SRVNFVF9SRkRfTVNCICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgU1lOVEhfU1lOVEg3X1JFU0VUX1JGRF9MU0IgICAgICAgICAgICAgICAxNAotI2RlZmluZSBTWU5USF9TWU5USDdfUkVTRVRfUkZEX01BU0sgICAgICAgICAgICAgIDB4MDAwMDQwMDAKLSNkZWZpbmUgU1lOVEhfU1lOVEg3X1JFU0VUX1JGRF9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFNZTlRIX1NZTlRIN19SRVNFVF9SRkRfTUFTSykgPj4gU1lOVEhfU1lOVEg3X1JFU0VUX1JGRF9MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRIN19SRVNFVF9SRkRfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEg3X1JFU0VUX1JGRF9MU0IpICYgU1lOVEhfU1lOVEg3X1JFU0VUX1JGRF9NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDdfUkVTRVRfUEZEX01TQiAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFNZTlRIX1NZTlRIN19SRVNFVF9QRkRfTFNCICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgU1lOVEhfU1lOVEg3X1JFU0VUX1BGRF9NQVNLICAgICAgICAgICAgICAweDAwMDAyMDAwCi0jZGVmaW5lIFNZTlRIX1NZTlRIN19SRVNFVF9QRkRfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDdfUkVTRVRfUEZEX01BU0spID4+IFNZTlRIX1NZTlRIN19SRVNFVF9QRkRfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDdfUkVTRVRfUEZEX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRIN19SRVNFVF9QRkRfTFNCKSAmIFNZTlRIX1NZTlRIN19SRVNFVF9QRkRfTUFTSykKLSNkZWZpbmUgU1lOVEhfU1lOVEg3X1JFU0VUX1BTQ09VTlRFUlNfTVNCICAgICAgICAxMgotI2RlZmluZSBTWU5USF9TWU5USDdfUkVTRVRfUFNDT1VOVEVSU19MU0IgICAgICAgIDEyCi0jZGVmaW5lIFNZTlRIX1NZTlRIN19SRVNFVF9QU0NPVU5URVJTX01BU0sgICAgICAgMHgwMDAwMTAwMAotI2RlZmluZSBTWU5USF9TWU5USDdfUkVTRVRfUFNDT1VOVEVSU19HRVQoeCkgICAgICgoKHgpICYgU1lOVEhfU1lOVEg3X1JFU0VUX1BTQ09VTlRFUlNfTUFTSykgPj4gU1lOVEhfU1lOVEg3X1JFU0VUX1BTQ09VTlRFUlNfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDdfUkVTRVRfUFNDT1VOVEVSU19TRVQoeCkgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRIN19SRVNFVF9QU0NPVU5URVJTX0xTQikgJiBTWU5USF9TWU5USDdfUkVTRVRfUFNDT1VOVEVSU19NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDdfUkVTRVRfU0RNX0JfTVNCICAgICAgICAgICAgIDExCi0jZGVmaW5lIFNZTlRIX1NZTlRIN19SRVNFVF9TRE1fQl9MU0IgICAgICAgICAgICAgMTEKLSNkZWZpbmUgU1lOVEhfU1lOVEg3X1JFU0VUX1NETV9CX01BU0sgICAgICAgICAgICAweDAwMDAwODAwCi0jZGVmaW5lIFNZTlRIX1NZTlRIN19SRVNFVF9TRE1fQl9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDdfUkVTRVRfU0RNX0JfTUFTSykgPj4gU1lOVEhfU1lOVEg3X1JFU0VUX1NETV9CX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEg3X1JFU0VUX1NETV9CX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDdfUkVTRVRfU0RNX0JfTFNCKSAmIFNZTlRIX1NZTlRIN19SRVNFVF9TRE1fQl9NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDdfVkMySElHSF9NU0IgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFNZTlRIX1NZTlRIN19WQzJISUdIX0xTQiAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgU1lOVEhfU1lOVEg3X1ZDMkhJR0hfTUFTSyAgICAgICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIFNZTlRIX1NZTlRIN19WQzJISUdIX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDdfVkMySElHSF9NQVNLKSA+PiBTWU5USF9TWU5USDdfVkMySElHSF9MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRIN19WQzJISUdIX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEg3X1ZDMkhJR0hfTFNCKSAmIFNZTlRIX1NZTlRIN19WQzJISUdIX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRIN19WQzJMT1dfTVNCICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBTWU5USF9TWU5USDdfVkMyTE9XX0xTQiAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgU1lOVEhfU1lOVEg3X1ZDMkxPV19NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCi0jZGVmaW5lIFNZTlRIX1NZTlRIN19WQzJMT1dfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDdfVkMyTE9XX01BU0spID4+IFNZTlRIX1NZTlRIN19WQzJMT1dfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDdfVkMyTE9XX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRIN19WQzJMT1dfTFNCKSAmIFNZTlRIX1NZTlRIN19WQzJMT1dfTUFTSykKLSNkZWZpbmUgU1lOVEhfU1lOVEg3X0xPT1BfSVBfTVNCICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFNZTlRIX1NZTlRIN19MT09QX0lQX0xTQiAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBTWU5USF9TWU5USDdfTE9PUF9JUF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMDAxZTAKLSNkZWZpbmUgU1lOVEhfU1lOVEg3X0xPT1BfSVBfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIFNZTlRIX1NZTlRIN19MT09QX0lQX01BU0spID4+IFNZTlRIX1NZTlRIN19MT09QX0lQX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEg3X0xPT1BfSVBfU0VUKHgpICAgICAgICAgICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDdfTE9PUF9JUF9MU0IpICYgU1lOVEhfU1lOVEg3X0xPT1BfSVBfTUFTSykKLSNkZWZpbmUgU1lOVEhfU1lOVEg3X0xPQlVGNUdUVU5FX01TQiAgICAgICAgICAgICA0Ci0jZGVmaW5lIFNZTlRIX1NZTlRIN19MT0JVRjVHVFVORV9MU0IgICAgICAgICAgICAgMwotI2RlZmluZSBTWU5USF9TWU5USDdfTE9CVUY1R1RVTkVfTUFTSyAgICAgICAgICAgIDB4MDAwMDAwMTgKLSNkZWZpbmUgU1lOVEhfU1lOVEg3X0xPQlVGNUdUVU5FX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIFNZTlRIX1NZTlRIN19MT0JVRjVHVFVORV9NQVNLKSA+PiBTWU5USF9TWU5USDdfTE9CVUY1R1RVTkVfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDdfTE9CVUY1R1RVTkVfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRIN19MT0JVRjVHVFVORV9MU0IpICYgU1lOVEhfU1lOVEg3X0xPQlVGNUdUVU5FX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRIN19TUEFSRV9SRUFEX01TQiAgICAgICAgICAgICAgMgotI2RlZmluZSBTWU5USF9TWU5USDdfU1BBUkVfUkVBRF9MU0IgICAgICAgICAgICAgIDAKLSNkZWZpbmUgU1lOVEhfU1lOVEg3X1NQQVJFX1JFQURfTUFTSyAgICAgICAgICAgICAweDAwMDAwMDA3Ci0jZGVmaW5lIFNZTlRIX1NZTlRIN19TUEFSRV9SRUFEX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDdfU1BBUkVfUkVBRF9NQVNLKSA+PiBTWU5USF9TWU5USDdfU1BBUkVfUkVBRF9MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRIN19TUEFSRV9SRUFEX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEg3X1NQQVJFX1JFQURfTFNCKSAmIFNZTlRIX1NZTlRIN19TUEFSRV9SRUFEX01BU0spCi0KLSNkZWZpbmUgU1lOVEhfU1lOVEg4X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFjCi0jZGVmaW5lIFNZTlRIX1NZTlRIOF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxYwotI2RlZmluZSBTWU5USF9TWU5USDhfTE9BRFNZTlRIQ0hBTk5FTF9NU0IgICAgICAgIDMxCi0jZGVmaW5lIFNZTlRIX1NZTlRIOF9MT0FEU1lOVEhDSEFOTkVMX0xTQiAgICAgICAgMzEKLSNkZWZpbmUgU1lOVEhfU1lOVEg4X0xPQURTWU5USENIQU5ORUxfTUFTSyAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIFNZTlRIX1NZTlRIOF9MT0FEU1lOVEhDSEFOTkVMX0dFVCh4KSAgICAgKCgoeCkgJiBTWU5USF9TWU5USDhfTE9BRFNZTlRIQ0hBTk5FTF9NQVNLKSA+PiBTWU5USF9TWU5USDhfTE9BRFNZTlRIQ0hBTk5FTF9MU0IpCi0jZGVmaW5lIFNZTlRIX1NZTlRIOF9MT0FEU1lOVEhDSEFOTkVMX1NFVCh4KSAgICAgKCgoeCkgPDwgU1lOVEhfU1lOVEg4X0xPQURTWU5USENIQU5ORUxfTFNCKSAmIFNZTlRIX1NZTlRIOF9MT0FEU1lOVEhDSEFOTkVMX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRIOF9GUkFDTU9ERV9NU0IgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgU1lOVEhfU1lOVEg4X0ZSQUNNT0RFX0xTQiAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBTWU5USF9TWU5USDhfRlJBQ01PREVfTUFTSyAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgU1lOVEhfU1lOVEg4X0ZSQUNNT0RFX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIFNZTlRIX1NZTlRIOF9GUkFDTU9ERV9NQVNLKSA+PiBTWU5USF9TWU5USDhfRlJBQ01PREVfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDhfRlJBQ01PREVfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRIOF9GUkFDTU9ERV9MU0IpICYgU1lOVEhfU1lOVEg4X0ZSQUNNT0RFX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRIOF9BTU9ERVJFRlNFTF9NU0IgICAgICAgICAgICAgMjkKLSNkZWZpbmUgU1lOVEhfU1lOVEg4X0FNT0RFUkVGU0VMX0xTQiAgICAgICAgICAgICAyOAotI2RlZmluZSBTWU5USF9TWU5USDhfQU1PREVSRUZTRUxfTUFTSyAgICAgICAgICAgIDB4MzAwMDAwMDAKLSNkZWZpbmUgU1lOVEhfU1lOVEg4X0FNT0RFUkVGU0VMX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIFNZTlRIX1NZTlRIOF9BTU9ERVJFRlNFTF9NQVNLKSA+PiBTWU5USF9TWU5USDhfQU1PREVSRUZTRUxfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDhfQU1PREVSRUZTRUxfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRIOF9BTU9ERVJFRlNFTF9MU0IpICYgU1lOVEhfU1lOVEg4X0FNT0RFUkVGU0VMX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRIOF9TUEFSRV9NU0IgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgU1lOVEhfU1lOVEg4X1NQQVJFX0xTQiAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBTWU5USF9TWU5USDhfU1BBUkVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKLSNkZWZpbmUgU1lOVEhfU1lOVEg4X1NQQVJFX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIFNZTlRIX1NZTlRIOF9TUEFSRV9NQVNLKSA+PiBTWU5USF9TWU5USDhfU1BBUkVfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDhfU1BBUkVfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRIOF9TUEFSRV9MU0IpICYgU1lOVEhfU1lOVEg4X1NQQVJFX01BU0spCi0jZGVmaW5lIFNZTlRIX1NZTlRIOF9DSEFOU0VMX01TQiAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgU1lOVEhfU1lOVEg4X0NIQU5TRUxfTFNCICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBTWU5USF9TWU5USDhfQ0hBTlNFTF9NQVNLICAgICAgICAgICAgICAgIDB4MDdmYzAwMDAKLSNkZWZpbmUgU1lOVEhfU1lOVEg4X0NIQU5TRUxfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIFNZTlRIX1NZTlRIOF9DSEFOU0VMX01BU0spID4+IFNZTlRIX1NZTlRIOF9DSEFOU0VMX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEg4X0NIQU5TRUxfU0VUKHgpICAgICAgICAgICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDhfQ0hBTlNFTF9MU0IpICYgU1lOVEhfU1lOVEg4X0NIQU5TRUxfTUFTSykKLSNkZWZpbmUgU1lOVEhfU1lOVEg4X0NIQU5GUkFDX01TQiAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBTWU5USF9TWU5USDhfQ0hBTkZSQUNfTFNCICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgU1lOVEhfU1lOVEg4X0NIQU5GUkFDX01BU0sgICAgICAgICAgICAgICAweDAwMDNmZmZlCi0jZGVmaW5lIFNZTlRIX1NZTlRIOF9DSEFORlJBQ19HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBTWU5USF9TWU5USDhfQ0hBTkZSQUNfTUFTSykgPj4gU1lOVEhfU1lOVEg4X0NIQU5GUkFDX0xTQikKLSNkZWZpbmUgU1lOVEhfU1lOVEg4X0NIQU5GUkFDX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBTWU5USF9TWU5USDhfQ0hBTkZSQUNfTFNCKSAmIFNZTlRIX1NZTlRIOF9DSEFORlJBQ19NQVNLKQotI2RlZmluZSBTWU5USF9TWU5USDhfRk9SQ0VfRlJBQ0xTQl9NU0IgICAgICAgICAgIDAKLSNkZWZpbmUgU1lOVEhfU1lOVEg4X0ZPUkNFX0ZSQUNMU0JfTFNCICAgICAgICAgICAwCi0jZGVmaW5lIFNZTlRIX1NZTlRIOF9GT1JDRV9GUkFDTFNCX01BU0sgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBTWU5USF9TWU5USDhfRk9SQ0VfRlJBQ0xTQl9HRVQoeCkgICAgICAgICgoKHgpICYgU1lOVEhfU1lOVEg4X0ZPUkNFX0ZSQUNMU0JfTUFTSykgPj4gU1lOVEhfU1lOVEg4X0ZPUkNFX0ZSQUNMU0JfTFNCKQotI2RlZmluZSBTWU5USF9TWU5USDhfRk9SQ0VfRlJBQ0xTQl9TRVQoeCkgICAgICAgICgoKHgpIDw8IFNZTlRIX1NZTlRIOF9GT1JDRV9GUkFDTFNCX0xTQikgJiBTWU5USF9TWU5USDhfRk9SQ0VfRlJBQ0xTQl9NQVNLKQotCi0jZGVmaW5lIFJGNUdfUkY1RzFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBSRjVHX1JGNUcxX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgUkY1R19SRjVHMV9QRFRYTE81X01TQiAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBSRjVHX1JGNUcxX1BEVFhMTzVfTFNCICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFJGNUdfUkY1RzFfUERUWExPNV9NQVNLICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBSRjVHX1JGNUcxX1BEVFhMTzVfR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgUkY1R19SRjVHMV9QRFRYTE81X01BU0spID4+IFJGNUdfUkY1RzFfUERUWExPNV9MU0IpCi0jZGVmaW5lIFJGNUdfUkY1RzFfUERUWExPNV9TRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPDwgUkY1R19SRjVHMV9QRFRYTE81X0xTQikgJiBSRjVHX1JGNUcxX1BEVFhMTzVfTUFTSykKLSNkZWZpbmUgUkY1R19SRjVHMV9QRFRYTUlYNV9NU0IgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBSRjVHX1JGNUcxX1BEVFhNSVg1X0xTQiAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFJGNUdfUkY1RzFfUERUWE1JWDVfTUFTSyAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAotI2RlZmluZSBSRjVHX1JGNUcxX1BEVFhNSVg1X0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgUkY1R19SRjVHMV9QRFRYTUlYNV9NQVNLKSA+PiBSRjVHX1JGNUcxX1BEVFhNSVg1X0xTQikKLSNkZWZpbmUgUkY1R19SRjVHMV9QRFRYTUlYNV9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBSRjVHX1JGNUcxX1BEVFhNSVg1X0xTQikgJiBSRjVHX1JGNUcxX1BEVFhNSVg1X01BU0spCi0jZGVmaW5lIFJGNUdfUkY1RzFfUERUWEJVRjVfTVNCICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUkY1R19SRjVHMV9QRFRYQlVGNV9MU0IgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBSRjVHX1JGNUcxX1BEVFhCVUY1X01BU0sgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgUkY1R19SRjVHMV9QRFRYQlVGNV9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIFJGNUdfUkY1RzFfUERUWEJVRjVfTUFTSykgPj4gUkY1R19SRjVHMV9QRFRYQlVGNV9MU0IpCi0jZGVmaW5lIFJGNUdfUkY1RzFfUERUWEJVRjVfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgUkY1R19SRjVHMV9QRFRYQlVGNV9MU0IpICYgUkY1R19SRjVHMV9QRFRYQlVGNV9NQVNLKQotI2RlZmluZSBSRjVHX1JGNUcxX1BEUEFEUlY1X01TQiAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFJGNUdfUkY1RzFfUERQQURSVjVfTFNCICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUkY1R19SRjVHMV9QRFBBRFJWNV9NQVNLICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCi0jZGVmaW5lIFJGNUdfUkY1RzFfUERQQURSVjVfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBSRjVHX1JGNUcxX1BEUEFEUlY1X01BU0spID4+IFJGNUdfUkY1RzFfUERQQURSVjVfTFNCKQotI2RlZmluZSBSRjVHX1JGNUcxX1BEUEFEUlY1X1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IFJGNUdfUkY1RzFfUERQQURSVjVfTFNCKSAmIFJGNUdfUkY1RzFfUERQQURSVjVfTUFTSykKLSNkZWZpbmUgUkY1R19SRjVHMV9QRFBBT1VUNV9NU0IgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBSRjVHX1JGNUcxX1BEUEFPVVQ1X0xTQiAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFJGNUdfUkY1RzFfUERQQU9VVDVfTUFTSyAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAotI2RlZmluZSBSRjVHX1JGNUcxX1BEUEFPVVQ1X0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgUkY1R19SRjVHMV9QRFBBT1VUNV9NQVNLKSA+PiBSRjVHX1JGNUcxX1BEUEFPVVQ1X0xTQikKLSNkZWZpbmUgUkY1R19SRjVHMV9QRFBBT1VUNV9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBSRjVHX1JGNUcxX1BEUEFPVVQ1X0xTQikgJiBSRjVHX1JGNUcxX1BEUEFPVVQ1X01BU0spCi0jZGVmaW5lIFJGNUdfUkY1RzFfVFVORV9QQURSVjVfTVNCICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUkY1R19SRjVHMV9UVU5FX1BBRFJWNV9MU0IgICAgICAgICAgICAgICAyNAotI2RlZmluZSBSRjVHX1JGNUcxX1RVTkVfUEFEUlY1X01BU0sgICAgICAgICAgICAgIDB4MDcwMDAwMDAKLSNkZWZpbmUgUkY1R19SRjVHMV9UVU5FX1BBRFJWNV9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFJGNUdfUkY1RzFfVFVORV9QQURSVjVfTUFTSykgPj4gUkY1R19SRjVHMV9UVU5FX1BBRFJWNV9MU0IpCi0jZGVmaW5lIFJGNUdfUkY1RzFfVFVORV9QQURSVjVfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgUkY1R19SRjVHMV9UVU5FX1BBRFJWNV9MU0IpICYgUkY1R19SRjVHMV9UVU5FX1BBRFJWNV9NQVNLKQotI2RlZmluZSBSRjVHX1JGNUcxX1BXRFRYUEtEX01TQiAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFJGNUdfUkY1RzFfUFdEVFhQS0RfTFNCICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUkY1R19SRjVHMV9QV0RUWFBLRF9NQVNLICAgICAgICAgICAgICAgICAweDAwZTAwMDAwCi0jZGVmaW5lIFJGNUdfUkY1RzFfUFdEVFhQS0RfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBSRjVHX1JGNUcxX1BXRFRYUEtEX01BU0spID4+IFJGNUdfUkY1RzFfUFdEVFhQS0RfTFNCKQotI2RlZmluZSBSRjVHX1JGNUcxX1BXRFRYUEtEX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IFJGNUdfUkY1RzFfUFdEVFhQS0RfTFNCKSAmIFJGNUdfUkY1RzFfUFdEVFhQS0RfTUFTSykKLSNkZWZpbmUgUkY1R19SRjVHMV9EQjVfTVNCICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBSRjVHX1JGNUcxX0RCNV9MU0IgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFJGNUdfUkY1RzFfREI1X01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDFjMDAwMAotI2RlZmluZSBSRjVHX1JGNUcxX0RCNV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgUkY1R19SRjVHMV9EQjVfTUFTSykgPj4gUkY1R19SRjVHMV9EQjVfTFNCKQotI2RlZmluZSBSRjVHX1JGNUcxX0RCNV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFJGNUdfUkY1RzFfREI1X0xTQikgJiBSRjVHX1JGNUcxX0RCNV9NQVNLKQotI2RlZmluZSBSRjVHX1JGNUcxX09CNV9NU0IgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFJGNUdfUkY1RzFfT0I1X0xTQiAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUkY1R19SRjVHMV9PQjVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDM4MDAwCi0jZGVmaW5lIFJGNUdfUkY1RzFfT0I1X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBSRjVHX1JGNUcxX09CNV9NQVNLKSA+PiBSRjVHX1JGNUcxX09CNV9MU0IpCi0jZGVmaW5lIFJGNUdfUkY1RzFfT0I1X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgUkY1R19SRjVHMV9PQjVfTFNCKSAmIFJGNUdfUkY1RzFfT0I1X01BU0spCi0jZGVmaW5lIFJGNUdfUkY1RzFfVFg1X0FUQl9TRUxfTVNCICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUkY1R19SRjVHMV9UWDVfQVRCX1NFTF9MU0IgICAgICAgICAgICAgICAxMgotI2RlZmluZSBSRjVHX1JGNUcxX1RYNV9BVEJfU0VMX01BU0sgICAgICAgICAgICAgIDB4MDAwMDcwMDAKLSNkZWZpbmUgUkY1R19SRjVHMV9UWDVfQVRCX1NFTF9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFJGNUdfUkY1RzFfVFg1X0FUQl9TRUxfTUFTSykgPj4gUkY1R19SRjVHMV9UWDVfQVRCX1NFTF9MU0IpCi0jZGVmaW5lIFJGNUdfUkY1RzFfVFg1X0FUQl9TRUxfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgUkY1R19SRjVHMV9UWDVfQVRCX1NFTF9MU0IpICYgUkY1R19SRjVHMV9UWDVfQVRCX1NFTF9NQVNLKQotI2RlZmluZSBSRjVHX1JGNUcxX1BETE81RElWX01TQiAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFJGNUdfUkY1RzFfUERMTzVESVZfTFNCICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUkY1R19SRjVHMV9QRExPNURJVl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwODAwCi0jZGVmaW5lIFJGNUdfUkY1RzFfUERMTzVESVZfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBSRjVHX1JGNUcxX1BETE81RElWX01BU0spID4+IFJGNUdfUkY1RzFfUERMTzVESVZfTFNCKQotI2RlZmluZSBSRjVHX1JGNUcxX1BETE81RElWX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IFJGNUdfUkY1RzFfUERMTzVESVZfTFNCKSAmIFJGNUdfUkY1RzFfUERMTzVESVZfTUFTSykKLSNkZWZpbmUgUkY1R19SRjVHMV9QRExPNU1JWF9NU0IgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBSRjVHX1JGNUcxX1BETE81TUlYX0xTQiAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFJGNUdfUkY1RzFfUERMTzVNSVhfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBSRjVHX1JGNUcxX1BETE81TUlYX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgUkY1R19SRjVHMV9QRExPNU1JWF9NQVNLKSA+PiBSRjVHX1JGNUcxX1BETE81TUlYX0xTQikKLSNkZWZpbmUgUkY1R19SRjVHMV9QRExPNU1JWF9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBSRjVHX1JGNUcxX1BETE81TUlYX0xTQikgJiBSRjVHX1JGNUcxX1BETE81TUlYX01BU0spCi0jZGVmaW5lIFJGNUdfUkY1RzFfUERRQlVGNV9NU0IgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBSRjVHX1JGNUcxX1BEUUJVRjVfTFNCICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUkY1R19SRjVHMV9QRFFCVUY1X01BU0sgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCi0jZGVmaW5lIFJGNUdfUkY1RzFfUERRQlVGNV9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiBSRjVHX1JGNUcxX1BEUUJVRjVfTUFTSykgPj4gUkY1R19SRjVHMV9QRFFCVUY1X0xTQikKLSNkZWZpbmUgUkY1R19SRjVHMV9QRFFCVUY1X1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCBSRjVHX1JGNUcxX1BEUUJVRjVfTFNCKSAmIFJGNUdfUkY1RzFfUERRQlVGNV9NQVNLKQotI2RlZmluZSBSRjVHX1JGNUcxX1BETE81QUdDX01TQiAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUkY1R19SRjVHMV9QRExPNUFHQ19MU0IgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFJGNUdfUkY1RzFfUERMTzVBR0NfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAotI2RlZmluZSBSRjVHX1JGNUcxX1BETE81QUdDX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgUkY1R19SRjVHMV9QRExPNUFHQ19NQVNLKSA+PiBSRjVHX1JGNUcxX1BETE81QUdDX0xTQikKLSNkZWZpbmUgUkY1R19SRjVHMV9QRExPNUFHQ19TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBSRjVHX1JGNUcxX1BETE81QUdDX0xTQikgJiBSRjVHX1JGNUcxX1BETE81QUdDX01BU0spCi0jZGVmaW5lIFJGNUdfUkY1RzFfUERSRUdMTzVfTVNCICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBSRjVHX1JGNUcxX1BEUkVHTE81X0xTQiAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUkY1R19SRjVHMV9QRFJFR0xPNV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIFJGNUdfUkY1RzFfUERSRUdMTzVfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBSRjVHX1JGNUcxX1BEUkVHTE81X01BU0spID4+IFJGNUdfUkY1RzFfUERSRUdMTzVfTFNCKQotI2RlZmluZSBSRjVHX1JGNUcxX1BEUkVHTE81X1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IFJGNUdfUkY1RzFfUERSRUdMTzVfTFNCKSAmIFJGNUdfUkY1RzFfUERSRUdMTzVfTUFTSykKLSNkZWZpbmUgUkY1R19SRjVHMV9MTzVfQVRCX1NFTF9NU0IgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFJGNUdfUkY1RzFfTE81X0FUQl9TRUxfTFNCICAgICAgICAgICAgICAgNAotI2RlZmluZSBSRjVHX1JGNUcxX0xPNV9BVEJfU0VMX01BU0sgICAgICAgICAgICAgIDB4MDAwMDAwNzAKLSNkZWZpbmUgUkY1R19SRjVHMV9MTzVfQVRCX1NFTF9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFJGNUdfUkY1RzFfTE81X0FUQl9TRUxfTUFTSykgPj4gUkY1R19SRjVHMV9MTzVfQVRCX1NFTF9MU0IpCi0jZGVmaW5lIFJGNUdfUkY1RzFfTE81X0FUQl9TRUxfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgUkY1R19SRjVHMV9MTzVfQVRCX1NFTF9MU0IpICYgUkY1R19SRjVHMV9MTzVfQVRCX1NFTF9NQVNLKQotI2RlZmluZSBSRjVHX1JGNUcxX0xPNUNPTlRST0xfTVNCICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUkY1R19SRjVHMV9MTzVDT05UUk9MX0xTQiAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFJGNUdfUkY1RzFfTE81Q09OVFJPTF9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBSRjVHX1JGNUcxX0xPNUNPTlRST0xfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgUkY1R19SRjVHMV9MTzVDT05UUk9MX01BU0spID4+IFJGNUdfUkY1RzFfTE81Q09OVFJPTF9MU0IpCi0jZGVmaW5lIFJGNUdfUkY1RzFfTE81Q09OVFJPTF9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgUkY1R19SRjVHMV9MTzVDT05UUk9MX0xTQikgJiBSRjVHX1JGNUcxX0xPNUNPTlRST0xfTUFTSykKLSNkZWZpbmUgUkY1R19SRjVHMV9SRUdMT19CWVBBU1M1X01TQiAgICAgICAgICAgICAyCi0jZGVmaW5lIFJGNUdfUkY1RzFfUkVHTE9fQllQQVNTNV9MU0IgICAgICAgICAgICAgMgotI2RlZmluZSBSRjVHX1JGNUcxX1JFR0xPX0JZUEFTUzVfTUFTSyAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgUkY1R19SRjVHMV9SRUdMT19CWVBBU1M1X0dFVCh4KSAgICAgICAgICAoKCh4KSAmIFJGNUdfUkY1RzFfUkVHTE9fQllQQVNTNV9NQVNLKSA+PiBSRjVHX1JGNUcxX1JFR0xPX0JZUEFTUzVfTFNCKQotI2RlZmluZSBSRjVHX1JGNUcxX1JFR0xPX0JZUEFTUzVfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IFJGNUdfUkY1RzFfUkVHTE9fQllQQVNTNV9MU0IpICYgUkY1R19SRjVHMV9SRUdMT19CWVBBU1M1X01BU0spCi0jZGVmaW5lIFJGNUdfUkY1RzFfU1BBUkVfTVNCICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBSRjVHX1JGNUcxX1NQQVJFX0xTQiAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUkY1R19SRjVHMV9TUEFSRV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCi0jZGVmaW5lIFJGNUdfUkY1RzFfU1BBUkVfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiBSRjVHX1JGNUcxX1NQQVJFX01BU0spID4+IFJGNUdfUkY1RzFfU1BBUkVfTFNCKQotI2RlZmluZSBSRjVHX1JGNUcxX1NQQVJFX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFJGNUdfUkY1RzFfU1BBUkVfTFNCKSAmIFJGNUdfUkY1RzFfU1BBUkVfTUFTSykKLQotI2RlZmluZSBSRjVHX1JGNUcyX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKLSNkZWZpbmUgUkY1R19SRjVHMl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0Ci0jZGVmaW5lIFJGNUdfUkY1RzJfQUdDTE9fQl9NU0IgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUkY1R19SRjVHMl9BR0NMT19CX0xTQiAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBSRjVHX1JGNUcyX0FHQ0xPX0JfTUFTSyAgICAgICAgICAgICAgICAgIDB4ZTAwMDAwMDAKLSNkZWZpbmUgUkY1R19SRjVHMl9BR0NMT19CX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIFJGNUdfUkY1RzJfQUdDTE9fQl9NQVNLKSA+PiBSRjVHX1JGNUcyX0FHQ0xPX0JfTFNCKQotI2RlZmluZSBSRjVHX1JGNUcyX0FHQ0xPX0JfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IFJGNUdfUkY1RzJfQUdDTE9fQl9MU0IpICYgUkY1R19SRjVHMl9BR0NMT19CX01BU0spCi0jZGVmaW5lIFJGNUdfUkY1RzJfUlg1X0FUQl9TRUxfTVNCICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUkY1R19SRjVHMl9SWDVfQVRCX1NFTF9MU0IgICAgICAgICAgICAgICAyNgotI2RlZmluZSBSRjVHX1JGNUcyX1JYNV9BVEJfU0VMX01BU0sgICAgICAgICAgICAgIDB4MWMwMDAwMDAKLSNkZWZpbmUgUkY1R19SRjVHMl9SWDVfQVRCX1NFTF9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFJGNUdfUkY1RzJfUlg1X0FUQl9TRUxfTUFTSykgPj4gUkY1R19SRjVHMl9SWDVfQVRCX1NFTF9MU0IpCi0jZGVmaW5lIFJGNUdfUkY1RzJfUlg1X0FUQl9TRUxfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgUkY1R19SRjVHMl9SWDVfQVRCX1NFTF9MU0IpICYgUkY1R19SRjVHMl9SWDVfQVRCX1NFTF9NQVNLKQotI2RlZmluZSBSRjVHX1JGNUcyX1BEQ01PU0xPNV9NU0IgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFJGNUdfUkY1RzJfUERDTU9TTE81X0xTQiAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUkY1R19SRjVHMl9QRENNT1NMTzVfTUFTSyAgICAgICAgICAgICAgICAweDAyMDAwMDAwCi0jZGVmaW5lIFJGNUdfUkY1RzJfUERDTU9TTE81X0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiBSRjVHX1JGNUcyX1BEQ01PU0xPNV9NQVNLKSA+PiBSRjVHX1JGNUcyX1BEQ01PU0xPNV9MU0IpCi0jZGVmaW5lIFJGNUdfUkY1RzJfUERDTU9TTE81X1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgUkY1R19SRjVHMl9QRENNT1NMTzVfTFNCKSAmIFJGNUdfUkY1RzJfUERDTU9TTE81X01BU0spCi0jZGVmaW5lIFJGNUdfUkY1RzJfUERWR001X01TQiAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUkY1R19SRjVHMl9QRFZHTTVfTFNCICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBSRjVHX1JGNUcyX1BEVkdNNV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKLSNkZWZpbmUgUkY1R19SRjVHMl9QRFZHTTVfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIFJGNUdfUkY1RzJfUERWR001X01BU0spID4+IFJGNUdfUkY1RzJfUERWR001X0xTQikKLSNkZWZpbmUgUkY1R19SRjVHMl9QRFZHTTVfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCBSRjVHX1JGNUcyX1BEVkdNNV9MU0IpICYgUkY1R19SRjVHMl9QRFZHTTVfTUFTSykKLSNkZWZpbmUgUkY1R19SRjVHMl9QRENTTE5BNV9NU0IgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBSRjVHX1JGNUcyX1BEQ1NMTkE1X0xTQiAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFJGNUdfUkY1RzJfUERDU0xOQTVfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAotI2RlZmluZSBSRjVHX1JGNUcyX1BEQ1NMTkE1X0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgUkY1R19SRjVHMl9QRENTTE5BNV9NQVNLKSA+PiBSRjVHX1JGNUcyX1BEQ1NMTkE1X0xTQikKLSNkZWZpbmUgUkY1R19SRjVHMl9QRENTTE5BNV9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBSRjVHX1JGNUcyX1BEQ1NMTkE1X0xTQikgJiBSRjVHX1JGNUcyX1BEQ1NMTkE1X01BU0spCi0jZGVmaW5lIFJGNUdfUkY1RzJfUERSRlZHQTVfTVNCICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUkY1R19SRjVHMl9QRFJGVkdBNV9MU0IgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBSRjVHX1JGNUcyX1BEUkZWR0E1X01BU0sgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKLSNkZWZpbmUgUkY1R19SRjVHMl9QRFJGVkdBNV9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIFJGNUdfUkY1RzJfUERSRlZHQTVfTUFTSykgPj4gUkY1R19SRjVHMl9QRFJGVkdBNV9MU0IpCi0jZGVmaW5lIFJGNUdfUkY1RzJfUERSRlZHQTVfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgUkY1R19SRjVHMl9QRFJGVkdBNV9MU0IpICYgUkY1R19SRjVHMl9QRFJGVkdBNV9NQVNLKQotI2RlZmluZSBSRjVHX1JGNUcyX1BEUkVHRkU1X01TQiAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFJGNUdfUkY1RzJfUERSRUdGRTVfTFNCICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUkY1R19SRjVHMl9QRFJFR0ZFNV9NQVNLICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCi0jZGVmaW5lIFJGNUdfUkY1RzJfUERSRUdGRTVfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBSRjVHX1JGNUcyX1BEUkVHRkU1X01BU0spID4+IFJGNUdfUkY1RzJfUERSRUdGRTVfTFNCKQotI2RlZmluZSBSRjVHX1JGNUcyX1BEUkVHRkU1X1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IFJGNUdfUkY1RzJfUERSRUdGRTVfTFNCKSAmIFJGNUdfUkY1RzJfUERSRUdGRTVfTUFTSykKLSNkZWZpbmUgUkY1R19SRjVHMl9UVU5FX1JGVkdBNV9NU0IgICAgICAgICAgICAgICAyMAotI2RlZmluZSBSRjVHX1JGNUcyX1RVTkVfUkZWR0E1X0xTQiAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFJGNUdfUkY1RzJfVFVORV9SRlZHQTVfTUFTSyAgICAgICAgICAgICAgMHgwMDFjMDAwMAotI2RlZmluZSBSRjVHX1JGNUcyX1RVTkVfUkZWR0E1X0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgUkY1R19SRjVHMl9UVU5FX1JGVkdBNV9NQVNLKSA+PiBSRjVHX1JGNUcyX1RVTkVfUkZWR0E1X0xTQikKLSNkZWZpbmUgUkY1R19SRjVHMl9UVU5FX1JGVkdBNV9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBSRjVHX1JGNUcyX1RVTkVfUkZWR0E1X0xTQikgJiBSRjVHX1JGNUcyX1RVTkVfUkZWR0E1X01BU0spCi0jZGVmaW5lIFJGNUdfUkY1RzJfQlJGVkdBNV9NU0IgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUkY1R19SRjVHMl9CUkZWR0E1X0xTQiAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBSRjVHX1JGNUcyX0JSRlZHQTVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMzgwMDAKLSNkZWZpbmUgUkY1R19SRjVHMl9CUkZWR0E1X0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIFJGNUdfUkY1RzJfQlJGVkdBNV9NQVNLKSA+PiBSRjVHX1JGNUcyX0JSRlZHQTVfTFNCKQotI2RlZmluZSBSRjVHX1JGNUcyX0JSRlZHQTVfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IFJGNUdfUkY1RzJfQlJGVkdBNV9MU0IpICYgUkY1R19SRjVHMl9CUkZWR0E1X01BU0spCi0jZGVmaW5lIFJGNUdfUkY1RzJfQkNTTE5BNV9NU0IgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUkY1R19SRjVHMl9CQ1NMTkE1X0xTQiAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBSRjVHX1JGNUcyX0JDU0xOQTVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMDcwMDAKLSNkZWZpbmUgUkY1R19SRjVHMl9CQ1NMTkE1X0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIFJGNUdfUkY1RzJfQkNTTE5BNV9NQVNLKSA+PiBSRjVHX1JGNUcyX0JDU0xOQTVfTFNCKQotI2RlZmluZSBSRjVHX1JGNUcyX0JDU0xOQTVfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IFJGNUdfUkY1RzJfQkNTTE5BNV9MU0IpICYgUkY1R19SRjVHMl9CQ1NMTkE1X01BU0spCi0jZGVmaW5lIFJGNUdfUkY1RzJfQlZHTTVfTVNCICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUkY1R19SRjVHMl9CVkdNNV9MU0IgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFJGNUdfUkY1RzJfQlZHTTVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGUwMAotI2RlZmluZSBSRjVHX1JGNUcyX0JWR001X0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgUkY1R19SRjVHMl9CVkdNNV9NQVNLKSA+PiBSRjVHX1JGNUcyX0JWR001X0xTQikKLSNkZWZpbmUgUkY1R19SRjVHMl9CVkdNNV9TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBSRjVHX1JGNUcyX0JWR001X0xTQikgJiBSRjVHX1JGNUcyX0JWR001X01BU0spCi0jZGVmaW5lIFJGNUdfUkY1RzJfUkVHRkVfQllQQVNTNV9NU0IgICAgICAgICAgICAgOAotI2RlZmluZSBSRjVHX1JGNUcyX1JFR0ZFX0JZUEFTUzVfTFNCICAgICAgICAgICAgIDgKLSNkZWZpbmUgUkY1R19SRjVHMl9SRUdGRV9CWVBBU1M1X01BU0sgICAgICAgICAgICAweDAwMDAwMTAwCi0jZGVmaW5lIFJGNUdfUkY1RzJfUkVHRkVfQllQQVNTNV9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBSRjVHX1JGNUcyX1JFR0ZFX0JZUEFTUzVfTUFTSykgPj4gUkY1R19SRjVHMl9SRUdGRV9CWVBBU1M1X0xTQikKLSNkZWZpbmUgUkY1R19SRjVHMl9SRUdGRV9CWVBBU1M1X1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBSRjVHX1JGNUcyX1JFR0ZFX0JZUEFTUzVfTFNCKSAmIFJGNUdfUkY1RzJfUkVHRkVfQllQQVNTNV9NQVNLKQotI2RlZmluZSBSRjVHX1JGNUcyX0xOQTVfQVRURU5NT0RFX01TQiAgICAgICAgICAgIDcKLSNkZWZpbmUgUkY1R19SRjVHMl9MTkE1X0FUVEVOTU9ERV9MU0IgICAgICAgICAgICA2Ci0jZGVmaW5lIFJGNUdfUkY1RzJfTE5BNV9BVFRFTk1PREVfTUFTSyAgICAgICAgICAgMHgwMDAwMDBjMAotI2RlZmluZSBSRjVHX1JGNUcyX0xOQTVfQVRURU5NT0RFX0dFVCh4KSAgICAgICAgICgoKHgpICYgUkY1R19SRjVHMl9MTkE1X0FUVEVOTU9ERV9NQVNLKSA+PiBSRjVHX1JGNUcyX0xOQTVfQVRURU5NT0RFX0xTQikKLSNkZWZpbmUgUkY1R19SRjVHMl9MTkE1X0FUVEVOTU9ERV9TRVQoeCkgICAgICAgICAoKCh4KSA8PCBSRjVHX1JGNUcyX0xOQTVfQVRURU5NT0RFX0xTQikgJiBSRjVHX1JGNUcyX0xOQTVfQVRURU5NT0RFX01BU0spCi0jZGVmaW5lIFJGNUdfUkY1RzJfRU5BQkxFX1BDQV9NU0IgICAgICAgICAgICAgICAgNQotI2RlZmluZSBSRjVHX1JGNUcyX0VOQUJMRV9QQ0FfTFNCICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUkY1R19SRjVHMl9FTkFCTEVfUENBX01BU0sgICAgICAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIFJGNUdfUkY1RzJfRU5BQkxFX1BDQV9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBSRjVHX1JGNUcyX0VOQUJMRV9QQ0FfTUFTSykgPj4gUkY1R19SRjVHMl9FTkFCTEVfUENBX0xTQikKLSNkZWZpbmUgUkY1R19SRjVHMl9FTkFCTEVfUENBX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBSRjVHX1JGNUcyX0VOQUJMRV9QQ0FfTFNCKSAmIFJGNUdfUkY1RzJfRU5BQkxFX1BDQV9NQVNLKQotI2RlZmluZSBSRjVHX1JGNUcyX1RVTkVfTE9fTVNCICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUkY1R19SRjVHMl9UVU5FX0xPX0xTQiAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFJGNUdfUkY1RzJfVFVORV9MT19NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxYwotI2RlZmluZSBSRjVHX1JGNUcyX1RVTkVfTE9fR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgUkY1R19SRjVHMl9UVU5FX0xPX01BU0spID4+IFJGNUdfUkY1RzJfVFVORV9MT19MU0IpCi0jZGVmaW5lIFJGNUdfUkY1RzJfVFVORV9MT19TRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPDwgUkY1R19SRjVHMl9UVU5FX0xPX0xTQikgJiBSRjVHX1JGNUcyX1RVTkVfTE9fTUFTSykKLSNkZWZpbmUgUkY1R19SRjVHMl9TUEFSRV9NU0IgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFJGNUdfUkY1RzJfU1BBUkVfTFNCICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBSRjVHX1JGNUcyX1NQQVJFX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKLSNkZWZpbmUgUkY1R19SRjVHMl9TUEFSRV9HRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIFJGNUdfUkY1RzJfU1BBUkVfTUFTSykgPj4gUkY1R19SRjVHMl9TUEFSRV9MU0IpCi0jZGVmaW5lIFJGNUdfUkY1RzJfU1BBUkVfU0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgUkY1R19SRjVHMl9TUEFSRV9MU0IpICYgUkY1R19SRjVHMl9TUEFSRV9NQVNLKQotCi0jZGVmaW5lIFJGMkdfUkYyRzFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAotI2RlZmluZSBSRjJHX1JGMkcxX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKLSNkZWZpbmUgUkYyR19SRjJHMV9CTE5BMV9NU0IgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBSRjJHX1JGMkcxX0JMTkExX0xTQiAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFJGMkdfUkYyRzFfQkxOQTFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHhlMDAwMDAwMAotI2RlZmluZSBSRjJHX1JGMkcxX0JMTkExX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgUkYyR19SRjJHMV9CTE5BMV9NQVNLKSA+PiBSRjJHX1JGMkcxX0JMTkExX0xTQikKLSNkZWZpbmUgUkYyR19SRjJHMV9CTE5BMV9TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBSRjJHX1JGMkcxX0JMTkExX0xTQikgJiBSRjJHX1JGMkcxX0JMTkExX01BU0spCi0jZGVmaW5lIFJGMkdfUkYyRzFfQkxOQTFGX01TQiAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUkYyR19SRjJHMV9CTE5BMUZfTFNCICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBSRjJHX1JGMkcxX0JMTkExRl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MWMwMDAwMDAKLSNkZWZpbmUgUkYyR19SRjJHMV9CTE5BMUZfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIFJGMkdfUkYyRzFfQkxOQTFGX01BU0spID4+IFJGMkdfUkYyRzFfQkxOQTFGX0xTQikKLSNkZWZpbmUgUkYyR19SRjJHMV9CTE5BMUZfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCBSRjJHX1JGMkcxX0JMTkExRl9MU0IpICYgUkYyR19SRjJHMV9CTE5BMUZfTUFTSykKLSNkZWZpbmUgUkYyR19SRjJHMV9CTE5BMUJVRl9NU0IgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBSRjJHX1JGMkcxX0JMTkExQlVGX0xTQiAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFJGMkdfUkYyRzFfQkxOQTFCVUZfTUFTSyAgICAgICAgICAgICAgICAgMHgwMzgwMDAwMAotI2RlZmluZSBSRjJHX1JGMkcxX0JMTkExQlVGX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgUkYyR19SRjJHMV9CTE5BMUJVRl9NQVNLKSA+PiBSRjJHX1JGMkcxX0JMTkExQlVGX0xTQikKLSNkZWZpbmUgUkYyR19SRjJHMV9CTE5BMUJVRl9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBSRjJHX1JGMkcxX0JMTkExQlVGX0xTQikgJiBSRjJHX1JGMkcxX0JMTkExQlVGX01BU0spCi0jZGVmaW5lIFJGMkdfUkYyRzFfQkxOQTJfTVNCICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUkYyR19SRjJHMV9CTE5BMl9MU0IgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBSRjJHX1JGMkcxX0JMTkEyX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA3MDAwMDAKLSNkZWZpbmUgUkYyR19SRjJHMV9CTE5BMl9HRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIFJGMkdfUkYyRzFfQkxOQTJfTUFTSykgPj4gUkYyR19SRjJHMV9CTE5BMl9MU0IpCi0jZGVmaW5lIFJGMkdfUkYyRzFfQkxOQTJfU0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgUkYyR19SRjJHMV9CTE5BMl9MU0IpICYgUkYyR19SRjJHMV9CTE5BMl9NQVNLKQotI2RlZmluZSBSRjJHX1JGMkcxX0RCX01TQiAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFJGMkdfUkYyRzFfREJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUkYyR19SRjJHMV9EQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwMGUwMDAwCi0jZGVmaW5lIFJGMkdfUkYyRzFfREJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBSRjJHX1JGMkcxX0RCX01BU0spID4+IFJGMkdfUkYyRzFfREJfTFNCKQotI2RlZmluZSBSRjJHX1JGMkcxX0RCX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFJGMkdfUkYyRzFfREJfTFNCKSAmIFJGMkdfUkYyRzFfREJfTUFTSykKLSNkZWZpbmUgUkYyR19SRjJHMV9PQl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBSRjJHX1JGMkcxX09CX0xTQiAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFJGMkdfUkYyRzFfT0JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxYzAwMAotI2RlZmluZSBSRjJHX1JGMkcxX09CX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgUkYyR19SRjJHMV9PQl9NQVNLKSA+PiBSRjJHX1JGMkcxX09CX0xTQikKLSNkZWZpbmUgUkYyR19SRjJHMV9PQl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBSRjJHX1JGMkcxX09CX0xTQikgJiBSRjJHX1JGMkcxX09CX01BU0spCi0jZGVmaW5lIFJGMkdfUkYyRzFfRkVfQVRCX1NFTF9NU0IgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUkYyR19SRjJHMV9GRV9BVEJfU0VMX0xTQiAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBSRjJHX1JGMkcxX0ZFX0FUQl9TRUxfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDM4MDAKLSNkZWZpbmUgUkYyR19SRjJHMV9GRV9BVEJfU0VMX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIFJGMkdfUkYyRzFfRkVfQVRCX1NFTF9NQVNLKSA+PiBSRjJHX1JGMkcxX0ZFX0FUQl9TRUxfTFNCKQotI2RlZmluZSBSRjJHX1JGMkcxX0ZFX0FUQl9TRUxfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IFJGMkdfUkYyRzFfRkVfQVRCX1NFTF9MU0IpICYgUkYyR19SRjJHMV9GRV9BVEJfU0VMX01BU0spCi0jZGVmaW5lIFJGMkdfUkYyRzFfUkZfQVRCX1NFTF9NU0IgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUkYyR19SRjJHMV9SRl9BVEJfU0VMX0xTQiAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFJGMkdfUkYyRzFfUkZfQVRCX1NFTF9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDcwMAotI2RlZmluZSBSRjJHX1JGMkcxX1JGX0FUQl9TRUxfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgUkYyR19SRjJHMV9SRl9BVEJfU0VMX01BU0spID4+IFJGMkdfUkYyRzFfUkZfQVRCX1NFTF9MU0IpCi0jZGVmaW5lIFJGMkdfUkYyRzFfUkZfQVRCX1NFTF9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgUkYyR19SRjJHMV9SRl9BVEJfU0VMX0xTQikgJiBSRjJHX1JGMkcxX1JGX0FUQl9TRUxfTUFTSykKLSNkZWZpbmUgUkYyR19SRjJHMV9TRUxMTkFfTVNCICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFJGMkdfUkYyRzFfU0VMTE5BX0xTQiAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBSRjJHX1JGMkcxX1NFTExOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKLSNkZWZpbmUgUkYyR19SRjJHMV9TRUxMTkFfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIFJGMkdfUkYyRzFfU0VMTE5BX01BU0spID4+IFJGMkdfUkYyRzFfU0VMTE5BX0xTQikKLSNkZWZpbmUgUkYyR19SRjJHMV9TRUxMTkFfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCBSRjJHX1JGMkcxX1NFTExOQV9MU0IpICYgUkYyR19SRjJHMV9TRUxMTkFfTUFTSykKLSNkZWZpbmUgUkYyR19SRjJHMV9MT0NPTlRST0xfTVNCICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFJGMkdfUkYyRzFfTE9DT05UUk9MX0xTQiAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBSRjJHX1JGMkcxX0xPQ09OVFJPTF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgUkYyR19SRjJHMV9MT0NPTlRST0xfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIFJGMkdfUkYyRzFfTE9DT05UUk9MX01BU0spID4+IFJGMkdfUkYyRzFfTE9DT05UUk9MX0xTQikKLSNkZWZpbmUgUkYyR19SRjJHMV9MT0NPTlRST0xfU0VUKHgpICAgICAgICAgICAgICAoKCh4KSA8PCBSRjJHX1JGMkcxX0xPQ09OVFJPTF9MU0IpICYgUkYyR19SRjJHMV9MT0NPTlRST0xfTUFTSykKLSNkZWZpbmUgUkYyR19SRjJHMV9TSE9SVExOQTJfTVNCICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFJGMkdfUkYyRzFfU0hPUlRMTkEyX0xTQiAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBSRjJHX1JGMkcxX1NIT1JUTE5BMl9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgUkYyR19SRjJHMV9TSE9SVExOQTJfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIFJGMkdfUkYyRzFfU0hPUlRMTkEyX01BU0spID4+IFJGMkdfUkYyRzFfU0hPUlRMTkEyX0xTQikKLSNkZWZpbmUgUkYyR19SRjJHMV9TSE9SVExOQTJfU0VUKHgpICAgICAgICAgICAgICAoKCh4KSA8PCBSRjJHX1JGMkcxX1NIT1JUTE5BMl9MU0IpICYgUkYyR19SRjJHMV9TSE9SVExOQTJfTUFTSykKLSNkZWZpbmUgUkYyR19SRjJHMV9TUEFSRV9NU0IgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFJGMkdfUkYyRzFfU1BBUkVfTFNCICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBSRjJHX1JGMkcxX1NQQVJFX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMWYKLSNkZWZpbmUgUkYyR19SRjJHMV9TUEFSRV9HRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIFJGMkdfUkYyRzFfU1BBUkVfTUFTSykgPj4gUkYyR19SRjJHMV9TUEFSRV9MU0IpCi0jZGVmaW5lIFJGMkdfUkYyRzFfU1BBUkVfU0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgUkYyR19SRjJHMV9TUEFSRV9MU0IpICYgUkYyR19SRjJHMV9TUEFSRV9NQVNLKQotCi0jZGVmaW5lIFJGMkdfUkYyRzJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyYwotI2RlZmluZSBSRjJHX1JGMkcyX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMmMKLSNkZWZpbmUgUkYyR19SRjJHMl9QRENHTE5BX01TQiAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBSRjJHX1JGMkcyX1BEQ0dMTkFfTFNCICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFJGMkdfUkYyRzJfUERDR0xOQV9NQVNLICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBSRjJHX1JGMkcyX1BEQ0dMTkFfR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgUkYyR19SRjJHMl9QRENHTE5BX01BU0spID4+IFJGMkdfUkYyRzJfUERDR0xOQV9MU0IpCi0jZGVmaW5lIFJGMkdfUkYyRzJfUERDR0xOQV9TRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPDwgUkYyR19SRjJHMl9QRENHTE5BX0xTQikgJiBSRjJHX1JGMkcyX1BEQ0dMTkFfTUFTSykKLSNkZWZpbmUgUkYyR19SRjJHMl9QRENHTE5BQlVGX01TQiAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBSRjJHX1JGMkcyX1BEQ0dMTkFCVUZfTFNCICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFJGMkdfUkYyRzJfUERDR0xOQUJVRl9NQVNLICAgICAgICAgICAgICAgMHg0MDAwMDAwMAotI2RlZmluZSBSRjJHX1JGMkcyX1BEQ0dMTkFCVUZfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgUkYyR19SRjJHMl9QRENHTE5BQlVGX01BU0spID4+IFJGMkdfUkYyRzJfUERDR0xOQUJVRl9MU0IpCi0jZGVmaW5lIFJGMkdfUkYyRzJfUERDR0xOQUJVRl9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgUkYyR19SRjJHMl9QRENHTE5BQlVGX0xTQikgJiBSRjJHX1JGMkcyX1BEQ0dMTkFCVUZfTUFTSykKLSNkZWZpbmUgUkYyR19SRjJHMl9QRENTTE5BX01TQiAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBSRjJHX1JGMkcyX1BEQ1NMTkFfTFNCICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFJGMkdfUkYyRzJfUERDU0xOQV9NQVNLICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAotI2RlZmluZSBSRjJHX1JGMkcyX1BEQ1NMTkFfR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgUkYyR19SRjJHMl9QRENTTE5BX01BU0spID4+IFJGMkdfUkYyRzJfUERDU0xOQV9MU0IpCi0jZGVmaW5lIFJGMkdfUkYyRzJfUERDU0xOQV9TRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPDwgUkYyR19SRjJHMl9QRENTTE5BX0xTQikgJiBSRjJHX1JGMkcyX1BEQ1NMTkFfTUFTSykKLSNkZWZpbmUgUkYyR19SRjJHMl9QRERJVl9NU0IgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBSRjJHX1JGMkcyX1BERElWX0xTQiAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFJGMkdfUkYyRzJfUERESVZfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAotI2RlZmluZSBSRjJHX1JGMkcyX1BERElWX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgUkYyR19SRjJHMl9QRERJVl9NQVNLKSA+PiBSRjJHX1JGMkcyX1BERElWX0xTQikKLSNkZWZpbmUgUkYyR19SRjJHMl9QRERJVl9TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBSRjJHX1JGMkcyX1BERElWX0xTQikgJiBSRjJHX1JGMkcyX1BERElWX01BU0spCi0jZGVmaW5lIFJGMkdfUkYyRzJfUERQQURSVl9NU0IgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUkYyR19SRjJHMl9QRFBBRFJWX0xTQiAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBSRjJHX1JGMkcyX1BEUEFEUlZfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKLSNkZWZpbmUgUkYyR19SRjJHMl9QRFBBRFJWX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIFJGMkdfUkYyRzJfUERQQURSVl9NQVNLKSA+PiBSRjJHX1JGMkcyX1BEUEFEUlZfTFNCKQotI2RlZmluZSBSRjJHX1JGMkcyX1BEUEFEUlZfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IFJGMkdfUkYyRzJfUERQQURSVl9MU0IpICYgUkYyR19SRjJHMl9QRFBBRFJWX01BU0spCi0jZGVmaW5lIFJGMkdfUkYyRzJfUERQQU9VVF9NU0IgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUkYyR19SRjJHMl9QRFBBT1VUX0xTQiAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBSRjJHX1JGMkcyX1BEUEFPVVRfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKLSNkZWZpbmUgUkYyR19SRjJHMl9QRFBBT1VUX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIFJGMkdfUkYyRzJfUERQQU9VVF9NQVNLKSA+PiBSRjJHX1JGMkcyX1BEUEFPVVRfTFNCKQotI2RlZmluZSBSRjJHX1JGMkcyX1BEUEFPVVRfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IFJGMkdfUkYyRzJfUERQQU9VVF9MU0IpICYgUkYyR19SRjJHMl9QRFBBT1VUX01BU0spCi0jZGVmaW5lIFJGMkdfUkYyRzJfUERSRUdMTkFfTVNCICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUkYyR19SRjJHMl9QRFJFR0xOQV9MU0IgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBSRjJHX1JGMkcyX1BEUkVHTE5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKLSNkZWZpbmUgUkYyR19SRjJHMl9QRFJFR0xOQV9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIFJGMkdfUkYyRzJfUERSRUdMTkFfTUFTSykgPj4gUkYyR19SRjJHMl9QRFJFR0xOQV9MU0IpCi0jZGVmaW5lIFJGMkdfUkYyRzJfUERSRUdMTkFfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgUkYyR19SRjJHMl9QRFJFR0xOQV9MU0IpICYgUkYyR19SRjJHMl9QRFJFR0xOQV9NQVNLKQotI2RlZmluZSBSRjJHX1JGMkcyX1BEUkVHTE9fTVNCICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFJGMkdfUkYyRzJfUERSRUdMT19MU0IgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUkYyR19SRjJHMl9QRFJFR0xPX01BU0sgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCi0jZGVmaW5lIFJGMkdfUkYyRzJfUERSRUdMT19HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiBSRjJHX1JGMkcyX1BEUkVHTE9fTUFTSykgPj4gUkYyR19SRjJHMl9QRFJFR0xPX0xTQikKLSNkZWZpbmUgUkYyR19SRjJHMl9QRFJFR0xPX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCBSRjJHX1JGMkcyX1BEUkVHTE9fTFNCKSAmIFJGMkdfUkYyRzJfUERSRUdMT19NQVNLKQotI2RlZmluZSBSRjJHX1JGMkcyX1BEUkZHTV9NU0IgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFJGMkdfUkYyRzJfUERSRkdNX0xTQiAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUkYyR19SRjJHMl9QRFJGR01fTUFTSyAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCi0jZGVmaW5lIFJGMkdfUkYyRzJfUERSRkdNX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBSRjJHX1JGMkcyX1BEUkZHTV9NQVNLKSA+PiBSRjJHX1JGMkcyX1BEUkZHTV9MU0IpCi0jZGVmaW5lIFJGMkdfUkYyRzJfUERSRkdNX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgUkYyR19SRjJHMl9QRFJGR01fTFNCKSAmIFJGMkdfUkYyRzJfUERSRkdNX01BU0spCi0jZGVmaW5lIFJGMkdfUkYyRzJfUERSWExPX01TQiAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUkYyR19SRjJHMl9QRFJYTE9fTFNCICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBSRjJHX1JGMkcyX1BEUlhMT19NQVNLICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKLSNkZWZpbmUgUkYyR19SRjJHMl9QRFJYTE9fR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIFJGMkdfUkYyRzJfUERSWExPX01BU0spID4+IFJGMkdfUkYyRzJfUERSWExPX0xTQikKLSNkZWZpbmUgUkYyR19SRjJHMl9QRFJYTE9fU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCBSRjJHX1JGMkcyX1BEUlhMT19MU0IpICYgUkYyR19SRjJHMl9QRFJYTE9fTUFTSykKLSNkZWZpbmUgUkYyR19SRjJHMl9QRFRYTE9fTVNCICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBSRjJHX1JGMkcyX1BEVFhMT19MU0IgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFJGMkdfUkYyRzJfUERUWExPX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAotI2RlZmluZSBSRjJHX1JGMkcyX1BEVFhMT19HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgUkYyR19SRjJHMl9QRFRYTE9fTUFTSykgPj4gUkYyR19SRjJHMl9QRFRYTE9fTFNCKQotI2RlZmluZSBSRjJHX1JGMkcyX1BEVFhMT19TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IFJGMkdfUkYyRzJfUERUWExPX0xTQikgJiBSRjJHX1JGMkcyX1BEVFhMT19NQVNLKQotI2RlZmluZSBSRjJHX1JGMkcyX1BEVFhNSVhfTVNCICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFJGMkdfUkYyRzJfUERUWE1JWF9MU0IgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUkYyR19SRjJHMl9QRFRYTUlYX01BU0sgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCi0jZGVmaW5lIFJGMkdfUkYyRzJfUERUWE1JWF9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiBSRjJHX1JGMkcyX1BEVFhNSVhfTUFTSykgPj4gUkYyR19SRjJHMl9QRFRYTUlYX0xTQikKLSNkZWZpbmUgUkYyR19SRjJHMl9QRFRYTUlYX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCBSRjJHX1JGMkcyX1BEVFhNSVhfTFNCKSAmIFJGMkdfUkYyRzJfUERUWE1JWF9NQVNLKQotI2RlZmluZSBSRjJHX1JGMkcyX1JFR0xOQV9CWVBBU1NfTVNCICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFJGMkdfUkYyRzJfUkVHTE5BX0JZUEFTU19MU0IgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUkYyR19SRjJHMl9SRUdMTkFfQllQQVNTX01BU0sgICAgICAgICAgICAweDAwMDgwMDAwCi0jZGVmaW5lIFJGMkdfUkYyRzJfUkVHTE5BX0JZUEFTU19HRVQoeCkgICAgICAgICAgKCgoeCkgJiBSRjJHX1JGMkcyX1JFR0xOQV9CWVBBU1NfTUFTSykgPj4gUkYyR19SRjJHMl9SRUdMTkFfQllQQVNTX0xTQikKLSNkZWZpbmUgUkYyR19SRjJHMl9SRUdMTkFfQllQQVNTX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBSRjJHX1JGMkcyX1JFR0xOQV9CWVBBU1NfTFNCKSAmIFJGMkdfUkYyRzJfUkVHTE5BX0JZUEFTU19NQVNLKQotI2RlZmluZSBSRjJHX1JGMkcyX1JFR0xPX0JZUEFTU19NU0IgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFJGMkdfUkYyRzJfUkVHTE9fQllQQVNTX0xTQiAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUkYyR19SRjJHMl9SRUdMT19CWVBBU1NfTUFTSyAgICAgICAgICAgICAweDAwMDQwMDAwCi0jZGVmaW5lIFJGMkdfUkYyRzJfUkVHTE9fQllQQVNTX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBSRjJHX1JGMkcyX1JFR0xPX0JZUEFTU19NQVNLKSA+PiBSRjJHX1JGMkcyX1JFR0xPX0JZUEFTU19MU0IpCi0jZGVmaW5lIFJGMkdfUkYyRzJfUkVHTE9fQllQQVNTX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgUkYyR19SRjJHMl9SRUdMT19CWVBBU1NfTFNCKSAmIFJGMkdfUkYyRzJfUkVHTE9fQllQQVNTX01BU0spCi0jZGVmaW5lIFJGMkdfUkYyRzJfRU5BQkxFX1BDQl9NU0IgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUkYyR19SRjJHMl9FTkFCTEVfUENCX0xTQiAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBSRjJHX1JGMkcyX0VOQUJMRV9QQ0JfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKLSNkZWZpbmUgUkYyR19SRjJHMl9FTkFCTEVfUENCX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIFJGMkdfUkYyRzJfRU5BQkxFX1BDQl9NQVNLKSA+PiBSRjJHX1JGMkcyX0VOQUJMRV9QQ0JfTFNCKQotI2RlZmluZSBSRjJHX1JGMkcyX0VOQUJMRV9QQ0JfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IFJGMkdfUkYyRzJfRU5BQkxFX1BDQl9MU0IpICYgUkYyR19SRjJHMl9FTkFCTEVfUENCX01BU0spCi0jZGVmaW5lIFJGMkdfUkYyRzJfU1BBUkVfTVNCICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUkYyR19SRjJHMl9TUEFSRV9MU0IgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFJGMkdfUkYyRzJfU1BBUkVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAxZmZmZgotI2RlZmluZSBSRjJHX1JGMkcyX1NQQVJFX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgUkYyR19SRjJHMl9TUEFSRV9NQVNLKSA+PiBSRjJHX1JGMkcyX1NQQVJFX0xTQikKLSNkZWZpbmUgUkYyR19SRjJHMl9TUEFSRV9TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBSRjJHX1JGMkcyX1NQQVJFX0xTQikgJiBSRjJHX1JGMkcyX1NQQVJFX01BU0spCi0KLSNkZWZpbmUgVE9QX0dBSU5fQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCi0jZGVmaW5lIFRPUF9HQUlOX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAotI2RlZmluZSBUT1BfR0FJTl9UWDZEQkxPUUdBSU5fTVNCICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFRPUF9HQUlOX1RYNkRCTE9RR0FJTl9MU0IgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgVE9QX0dBSU5fVFg2REJMT1FHQUlOX01BU0sgICAgICAgICAgICAgICAweGMwMDAwMDAwCi0jZGVmaW5lIFRPUF9HQUlOX1RYNkRCTE9RR0FJTl9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBUT1BfR0FJTl9UWDZEQkxPUUdBSU5fTUFTSykgPj4gVE9QX0dBSU5fVFg2REJMT1FHQUlOX0xTQikKLSNkZWZpbmUgVE9QX0dBSU5fVFg2REJMT1FHQUlOX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBUT1BfR0FJTl9UWDZEQkxPUUdBSU5fTFNCKSAmIFRPUF9HQUlOX1RYNkRCTE9RR0FJTl9NQVNLKQotI2RlZmluZSBUT1BfR0FJTl9UWDFEQkxPUUdBSU5fTVNCICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFRPUF9HQUlOX1RYMURCTE9RR0FJTl9MU0IgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgVE9QX0dBSU5fVFgxREJMT1FHQUlOX01BU0sgICAgICAgICAgICAgICAweDM4MDAwMDAwCi0jZGVmaW5lIFRPUF9HQUlOX1RYMURCTE9RR0FJTl9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBUT1BfR0FJTl9UWDFEQkxPUUdBSU5fTUFTSykgPj4gVE9QX0dBSU5fVFgxREJMT1FHQUlOX0xTQikKLSNkZWZpbmUgVE9QX0dBSU5fVFgxREJMT1FHQUlOX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBUT1BfR0FJTl9UWDFEQkxPUUdBSU5fTFNCKSAmIFRPUF9HQUlOX1RYMURCTE9RR0FJTl9NQVNLKQotI2RlZmluZSBUT1BfR0FJTl9UWFYySUdBSU5fTVNCICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFRPUF9HQUlOX1RYVjJJR0FJTl9MU0IgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgVE9QX0dBSU5fVFhWMklHQUlOX01BU0sgICAgICAgICAgICAgICAgICAweDA2MDAwMDAwCi0jZGVmaW5lIFRPUF9HQUlOX1RYVjJJR0FJTl9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiBUT1BfR0FJTl9UWFYySUdBSU5fTUFTSykgPj4gVE9QX0dBSU5fVFhWMklHQUlOX0xTQikKLSNkZWZpbmUgVE9QX0dBSU5fVFhWMklHQUlOX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCBUT1BfR0FJTl9UWFYySUdBSU5fTFNCKSAmIFRPUF9HQUlOX1RYVjJJR0FJTl9NQVNLKQotI2RlZmluZSBUT1BfR0FJTl9QQUJVRjVHTl9NU0IgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFRPUF9HQUlOX1BBQlVGNUdOX0xTQiAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgVE9QX0dBSU5fUEFCVUY1R05fTUFTSyAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCi0jZGVmaW5lIFRPUF9HQUlOX1BBQlVGNUdOX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBUT1BfR0FJTl9QQUJVRjVHTl9NQVNLKSA+PiBUT1BfR0FJTl9QQUJVRjVHTl9MU0IpCi0jZGVmaW5lIFRPUF9HQUlOX1BBQlVGNUdOX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgVE9QX0dBSU5fUEFCVUY1R05fTFNCKSAmIFRPUF9HQUlOX1BBQlVGNUdOX01BU0spCi0jZGVmaW5lIFRPUF9HQUlOX1BBRFJWR05fTVNCICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgVE9QX0dBSU5fUEFEUlZHTl9MU0IgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBUT1BfR0FJTl9QQURSVkdOX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDBlMDAwMDAKLSNkZWZpbmUgVE9QX0dBSU5fUEFEUlZHTl9HRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIFRPUF9HQUlOX1BBRFJWR05fTUFTSykgPj4gVE9QX0dBSU5fUEFEUlZHTl9MU0IpCi0jZGVmaW5lIFRPUF9HQUlOX1BBRFJWR05fU0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgVE9QX0dBSU5fUEFEUlZHTl9MU0IpICYgVE9QX0dBSU5fUEFEUlZHTl9NQVNLKQotI2RlZmluZSBUT1BfR0FJTl9QQU9VVDJHTl9NU0IgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFRPUF9HQUlOX1BBT1VUMkdOX0xTQiAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgVE9QX0dBSU5fUEFPVVQyR05fTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMWMwMDAwCi0jZGVmaW5lIFRPUF9HQUlOX1BBT1VUMkdOX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBUT1BfR0FJTl9QQU9VVDJHTl9NQVNLKSA+PiBUT1BfR0FJTl9QQU9VVDJHTl9MU0IpCi0jZGVmaW5lIFRPUF9HQUlOX1BBT1VUMkdOX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgVE9QX0dBSU5fUEFPVVQyR05fTFNCKSAmIFRPUF9HQUlOX1BBT1VUMkdOX01BU0spCi0jZGVmaW5lIFRPUF9HQUlOX0xOQU9OX01TQiAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgVE9QX0dBSU5fTE5BT05fTFNCICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBUT1BfR0FJTl9MTkFPTl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKLSNkZWZpbmUgVE9QX0dBSU5fTE5BT05fR0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFRPUF9HQUlOX0xOQU9OX01BU0spID4+IFRPUF9HQUlOX0xOQU9OX0xTQikKLSNkZWZpbmUgVE9QX0dBSU5fTE5BT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBUT1BfR0FJTl9MTkFPTl9MU0IpICYgVE9QX0dBSU5fTE5BT05fTUFTSykKLSNkZWZpbmUgVE9QX0dBSU5fTE5BR0FJTl9NU0IgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBUT1BfR0FJTl9MTkFHQUlOX0xTQiAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFRPUF9HQUlOX0xOQUdBSU5fTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAxZTAwMAotI2RlZmluZSBUT1BfR0FJTl9MTkFHQUlOX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgVE9QX0dBSU5fTE5BR0FJTl9NQVNLKSA+PiBUT1BfR0FJTl9MTkFHQUlOX0xTQikKLSNkZWZpbmUgVE9QX0dBSU5fTE5BR0FJTl9TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBUT1BfR0FJTl9MTkFHQUlOX0xTQikgJiBUT1BfR0FJTl9MTkFHQUlOX01BU0spCi0jZGVmaW5lIFRPUF9HQUlOX1JGVkdBNUdBSU5fTVNCICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgVE9QX0dBSU5fUkZWR0E1R0FJTl9MU0IgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBUT1BfR0FJTl9SRlZHQTVHQUlOX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDE4MDAKLSNkZWZpbmUgVE9QX0dBSU5fUkZWR0E1R0FJTl9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIFRPUF9HQUlOX1JGVkdBNUdBSU5fTUFTSykgPj4gVE9QX0dBSU5fUkZWR0E1R0FJTl9MU0IpCi0jZGVmaW5lIFRPUF9HQUlOX1JGVkdBNUdBSU5fU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgVE9QX0dBSU5fUkZWR0E1R0FJTl9MU0IpICYgVE9QX0dBSU5fUkZWR0E1R0FJTl9NQVNLKQotI2RlZmluZSBUT1BfR0FJTl9SRkdNR05fTVNCICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFRPUF9HQUlOX1JGR01HTl9MU0IgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBUT1BfR0FJTl9SRkdNR05fTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3MDAKLSNkZWZpbmUgVE9QX0dBSU5fUkZHTUdOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFRPUF9HQUlOX1JGR01HTl9NQVNLKSA+PiBUT1BfR0FJTl9SRkdNR05fTFNCKQotI2RlZmluZSBUT1BfR0FJTl9SRkdNR05fU0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFRPUF9HQUlOX1JGR01HTl9MU0IpICYgVE9QX0dBSU5fUkZHTUdOX01BU0spCi0jZGVmaW5lIFRPUF9HQUlOX1JYNkRCTE9RR0FJTl9NU0IgICAgICAgICAgICAgICAgNwotI2RlZmluZSBUT1BfR0FJTl9SWDZEQkxPUUdBSU5fTFNCICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgVE9QX0dBSU5fUlg2REJMT1FHQUlOX01BU0sgICAgICAgICAgICAgICAweDAwMDAwMGMwCi0jZGVmaW5lIFRPUF9HQUlOX1JYNkRCTE9RR0FJTl9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBUT1BfR0FJTl9SWDZEQkxPUUdBSU5fTUFTSykgPj4gVE9QX0dBSU5fUlg2REJMT1FHQUlOX0xTQikKLSNkZWZpbmUgVE9QX0dBSU5fUlg2REJMT1FHQUlOX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBUT1BfR0FJTl9SWDZEQkxPUUdBSU5fTFNCKSAmIFRPUF9HQUlOX1JYNkRCTE9RR0FJTl9NQVNLKQotI2RlZmluZSBUT1BfR0FJTl9SWDFEQkxPUUdBSU5fTVNCICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgVE9QX0dBSU5fUlgxREJMT1FHQUlOX0xTQiAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFRPUF9HQUlOX1JYMURCTE9RR0FJTl9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDAzOAotI2RlZmluZSBUT1BfR0FJTl9SWDFEQkxPUUdBSU5fR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgVE9QX0dBSU5fUlgxREJMT1FHQUlOX01BU0spID4+IFRPUF9HQUlOX1JYMURCTE9RR0FJTl9MU0IpCi0jZGVmaW5lIFRPUF9HQUlOX1JYMURCTE9RR0FJTl9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgVE9QX0dBSU5fUlgxREJMT1FHQUlOX0xTQikgJiBUT1BfR0FJTl9SWDFEQkxPUUdBSU5fTUFTSykKLSNkZWZpbmUgVE9QX0dBSU5fUlg2REJISVFHQUlOX01TQiAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFRPUF9HQUlOX1JYNkRCSElRR0FJTl9MU0IgICAgICAgICAgICAgICAgMQotI2RlZmluZSBUT1BfR0FJTl9SWDZEQkhJUUdBSU5fTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDAwMDYKLSNkZWZpbmUgVE9QX0dBSU5fUlg2REJISVFHQUlOX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIFRPUF9HQUlOX1JYNkRCSElRR0FJTl9NQVNLKSA+PiBUT1BfR0FJTl9SWDZEQkhJUUdBSU5fTFNCKQotI2RlZmluZSBUT1BfR0FJTl9SWDZEQkhJUUdBSU5fU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IFRPUF9HQUlOX1JYNkRCSElRR0FJTl9MU0IpICYgVE9QX0dBSU5fUlg2REJISVFHQUlOX01BU0spCi0jZGVmaW5lIFRPUF9HQUlOX1NQQVJFX01TQiAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBUT1BfR0FJTl9TUEFSRV9MU0IgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgVE9QX0dBSU5fU1BBUkVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFRPUF9HQUlOX1NQQVJFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBUT1BfR0FJTl9TUEFSRV9NQVNLKSA+PiBUT1BfR0FJTl9TUEFSRV9MU0IpCi0jZGVmaW5lIFRPUF9HQUlOX1NQQVJFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgVE9QX0dBSU5fU1BBUkVfTFNCKSAmIFRPUF9HQUlOX1NQQVJFX01BU0spCi0KLSNkZWZpbmUgVE9QX1RPUF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0Ci0jZGVmaW5lIFRPUF9UT1BfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAotI2RlZmluZSBUT1BfVE9QX0xPQ0FMVFhHQUlOX01TQiAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFRPUF9UT1BfTE9DQUxUWEdBSU5fTFNCICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgVE9QX1RPUF9MT0NBTFRYR0FJTl9NQVNLICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIFRPUF9UT1BfTE9DQUxUWEdBSU5fR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBUT1BfVE9QX0xPQ0FMVFhHQUlOX01BU0spID4+IFRPUF9UT1BfTE9DQUxUWEdBSU5fTFNCKQotI2RlZmluZSBUT1BfVE9QX0xPQ0FMVFhHQUlOX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IFRPUF9UT1BfTE9DQUxUWEdBSU5fTFNCKSAmIFRPUF9UT1BfTE9DQUxUWEdBSU5fTUFTSykKLSNkZWZpbmUgVE9QX1RPUF9MT0NBTFJYR0FJTl9NU0IgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBUT1BfVE9QX0xPQ0FMUlhHQUlOX0xTQiAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFRPUF9UT1BfTE9DQUxSWEdBSU5fTUFTSyAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAotI2RlZmluZSBUT1BfVE9QX0xPQ0FMUlhHQUlOX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgVE9QX1RPUF9MT0NBTFJYR0FJTl9NQVNLKSA+PiBUT1BfVE9QX0xPQ0FMUlhHQUlOX0xTQikKLSNkZWZpbmUgVE9QX1RPUF9MT0NBTFJYR0FJTl9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBUT1BfVE9QX0xPQ0FMUlhHQUlOX0xTQikgJiBUT1BfVE9QX0xPQ0FMUlhHQUlOX01BU0spCi0jZGVmaW5lIFRPUF9UT1BfTE9DQUxNT0RFX01TQiAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgVE9QX1RPUF9MT0NBTE1PREVfTFNCICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBUT1BfVE9QX0xPQ0FMTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgVE9QX1RPUF9MT0NBTE1PREVfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIFRPUF9UT1BfTE9DQUxNT0RFX01BU0spID4+IFRPUF9UT1BfTE9DQUxNT0RFX0xTQikKLSNkZWZpbmUgVE9QX1RPUF9MT0NBTE1PREVfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCBUT1BfVE9QX0xPQ0FMTU9ERV9MU0IpICYgVE9QX1RPUF9MT0NBTE1PREVfTUFTSykKLSNkZWZpbmUgVE9QX1RPUF9DQUxGQ19NU0IgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBUT1BfVE9QX0NBTEZDX0xTQiAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFRPUF9UT1BfQ0FMRkNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAotI2RlZmluZSBUT1BfVE9QX0NBTEZDX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgVE9QX1RPUF9DQUxGQ19NQVNLKSA+PiBUT1BfVE9QX0NBTEZDX0xTQikKLSNkZWZpbmUgVE9QX1RPUF9DQUxGQ19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBUT1BfVE9QX0NBTEZDX0xTQikgJiBUT1BfVE9QX0NBTEZDX01BU0spCi0jZGVmaW5lIFRPUF9UT1BfQ0FMRENfTVNCICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgVE9QX1RPUF9DQUxEQ19MU0IgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBUT1BfVE9QX0NBTERDX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKLSNkZWZpbmUgVE9QX1RPUF9DQUxEQ19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFRPUF9UT1BfQ0FMRENfTUFTSykgPj4gVE9QX1RPUF9DQUxEQ19MU0IpCi0jZGVmaW5lIFRPUF9UT1BfQ0FMRENfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgVE9QX1RPUF9DQUxEQ19MU0IpICYgVE9QX1RPUF9DQUxEQ19NQVNLKQotI2RlZmluZSBUT1BfVE9QX0NBTF9SRVNJRFVFX01TQiAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFRPUF9UT1BfQ0FMX1JFU0lEVUVfTFNCICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgVE9QX1RPUF9DQUxfUkVTSURVRV9NQVNLICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCi0jZGVmaW5lIFRPUF9UT1BfQ0FMX1JFU0lEVUVfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBUT1BfVE9QX0NBTF9SRVNJRFVFX01BU0spID4+IFRPUF9UT1BfQ0FMX1JFU0lEVUVfTFNCKQotI2RlZmluZSBUT1BfVE9QX0NBTF9SRVNJRFVFX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IFRPUF9UT1BfQ0FMX1JFU0lEVUVfTFNCKSAmIFRPUF9UT1BfQ0FMX1JFU0lEVUVfTUFTSykKLSNkZWZpbmUgVE9QX1RPUF9CTU9ERV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBUT1BfVE9QX0JNT0RFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFRPUF9UT1BfQk1PREVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAotI2RlZmluZSBUT1BfVE9QX0JNT0RFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgVE9QX1RPUF9CTU9ERV9NQVNLKSA+PiBUT1BfVE9QX0JNT0RFX0xTQikKLSNkZWZpbmUgVE9QX1RPUF9CTU9ERV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBUT1BfVE9QX0JNT0RFX0xTQikgJiBUT1BfVE9QX0JNT0RFX01BU0spCi0jZGVmaW5lIFRPUF9UT1BfU1lOVEhPTl9NU0IgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgVE9QX1RPUF9TWU5USE9OX0xTQiAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBUT1BfVE9QX1NZTlRIT05fTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKLSNkZWZpbmUgVE9QX1RPUF9TWU5USE9OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFRPUF9UT1BfU1lOVEhPTl9NQVNLKSA+PiBUT1BfVE9QX1NZTlRIT05fTFNCKQotI2RlZmluZSBUT1BfVE9QX1NZTlRIT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFRPUF9UT1BfU1lOVEhPTl9MU0IpICYgVE9QX1RPUF9TWU5USE9OX01BU0spCi0jZGVmaW5lIFRPUF9UT1BfUlhPTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgVE9QX1RPUF9SWE9OX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBUT1BfVE9QX1JYT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKLSNkZWZpbmUgVE9QX1RPUF9SWE9OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFRPUF9UT1BfUlhPTl9NQVNLKSA+PiBUT1BfVE9QX1JYT05fTFNCKQotI2RlZmluZSBUT1BfVE9QX1JYT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFRPUF9UT1BfUlhPTl9MU0IpICYgVE9QX1RPUF9SWE9OX01BU0spCi0jZGVmaW5lIFRPUF9UT1BfVFhPTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgVE9QX1RPUF9UWE9OX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBUT1BfVE9QX1RYT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKLSNkZWZpbmUgVE9QX1RPUF9UWE9OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFRPUF9UT1BfVFhPTl9NQVNLKSA+PiBUT1BfVE9QX1RYT05fTFNCKQotI2RlZmluZSBUT1BfVE9QX1RYT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFRPUF9UT1BfVFhPTl9MU0IpICYgVE9QX1RPUF9UWE9OX01BU0spCi0jZGVmaW5lIFRPUF9UT1BfUEFPTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgVE9QX1RPUF9QQU9OX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBUT1BfVE9QX1BBT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKLSNkZWZpbmUgVE9QX1RPUF9QQU9OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFRPUF9UT1BfUEFPTl9NQVNLKSA+PiBUT1BfVE9QX1BBT05fTFNCKQotI2RlZmluZSBUT1BfVE9QX1BBT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFRPUF9UT1BfUEFPTl9MU0IpICYgVE9QX1RPUF9QQU9OX01BU0spCi0jZGVmaW5lIFRPUF9UT1BfQ0FMVFhfTVNCICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgVE9QX1RPUF9DQUxUWF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBUT1BfVE9QX0NBTFRYX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKLSNkZWZpbmUgVE9QX1RPUF9DQUxUWF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFRPUF9UT1BfQ0FMVFhfTUFTSykgPj4gVE9QX1RPUF9DQUxUWF9MU0IpCi0jZGVmaW5lIFRPUF9UT1BfQ0FMVFhfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgVE9QX1RPUF9DQUxUWF9MU0IpICYgVE9QX1RPUF9DQUxUWF9NQVNLKQotI2RlZmluZSBUT1BfVE9QX0xPQ0FMQUREQUNfTVNCICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFRPUF9UT1BfTE9DQUxBRERBQ19MU0IgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgVE9QX1RPUF9MT0NBTEFEREFDX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCi0jZGVmaW5lIFRPUF9UT1BfTE9DQUxBRERBQ19HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiBUT1BfVE9QX0xPQ0FMQUREQUNfTUFTSykgPj4gVE9QX1RPUF9MT0NBTEFEREFDX0xTQikKLSNkZWZpbmUgVE9QX1RPUF9MT0NBTEFEREFDX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCBUT1BfVE9QX0xPQ0FMQUREQUNfTFNCKSAmIFRPUF9UT1BfTE9DQUxBRERBQ19NQVNLKQotI2RlZmluZSBUT1BfVE9QX1BXRFBMTF9NU0IgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFRPUF9UT1BfUFdEUExMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgVE9QX1RPUF9QV0RQTExfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCi0jZGVmaW5lIFRPUF9UT1BfUFdEUExMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBUT1BfVE9QX1BXRFBMTF9NQVNLKSA+PiBUT1BfVE9QX1BXRFBMTF9MU0IpCi0jZGVmaW5lIFRPUF9UT1BfUFdEUExMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgVE9QX1RPUF9QV0RQTExfTFNCKSAmIFRPUF9UT1BfUFdEUExMX01BU0spCi0jZGVmaW5lIFRPUF9UT1BfUFdEQURDX01TQiAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgVE9QX1RPUF9QV0RBRENfTFNCICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBUT1BfVE9QX1BXREFEQ19NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKLSNkZWZpbmUgVE9QX1RPUF9QV0RBRENfR0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFRPUF9UT1BfUFdEQURDX01BU0spID4+IFRPUF9UT1BfUFdEQURDX0xTQikKLSNkZWZpbmUgVE9QX1RPUF9QV0RBRENfU0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBUT1BfVE9QX1BXREFEQ19MU0IpICYgVE9QX1RPUF9QV0RBRENfTUFTSykKLSNkZWZpbmUgVE9QX1RPUF9QV0REQUNfTVNCICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBUT1BfVE9QX1BXRERBQ19MU0IgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFRPUF9UT1BfUFdEREFDX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBUT1BfVE9QX1BXRERBQ19HRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgVE9QX1RPUF9QV0REQUNfTUFTSykgPj4gVE9QX1RPUF9QV0REQUNfTFNCKQotI2RlZmluZSBUT1BfVE9QX1BXRERBQ19TRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFRPUF9UT1BfUFdEREFDX0xTQikgJiBUT1BfVE9QX1BXRERBQ19NQVNLKQotI2RlZmluZSBUT1BfVE9QX0xPQ0FMWFRBTF9NU0IgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFRPUF9UT1BfTE9DQUxYVEFMX0xTQiAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgVE9QX1RPUF9MT0NBTFhUQUxfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCi0jZGVmaW5lIFRPUF9UT1BfTE9DQUxYVEFMX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBUT1BfVE9QX0xPQ0FMWFRBTF9NQVNLKSA+PiBUT1BfVE9QX0xPQ0FMWFRBTF9MU0IpCi0jZGVmaW5lIFRPUF9UT1BfTE9DQUxYVEFMX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgVE9QX1RPUF9MT0NBTFhUQUxfTFNCKSAmIFRPUF9UT1BfTE9DQUxYVEFMX01BU0spCi0jZGVmaW5lIFRPUF9UT1BfUFdEQ0xLSU5fTVNCICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgVE9QX1RPUF9QV0RDTEtJTl9MU0IgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBUT1BfVE9QX1BXRENMS0lOX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKLSNkZWZpbmUgVE9QX1RPUF9QV0RDTEtJTl9HRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIFRPUF9UT1BfUFdEQ0xLSU5fTUFTSykgPj4gVE9QX1RPUF9QV0RDTEtJTl9MU0IpCi0jZGVmaW5lIFRPUF9UT1BfUFdEQ0xLSU5fU0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgVE9QX1RPUF9QV0RDTEtJTl9MU0IpICYgVE9QX1RPUF9QV0RDTEtJTl9NQVNLKQotI2RlZmluZSBUT1BfVE9QX09TQ09OX01TQiAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFRPUF9UT1BfT1NDT05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgVE9QX1RPUF9PU0NPTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCi0jZGVmaW5lIFRPUF9UT1BfT1NDT05fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBUT1BfVE9QX09TQ09OX01BU0spID4+IFRPUF9UT1BfT1NDT05fTFNCKQotI2RlZmluZSBUT1BfVE9QX09TQ09OX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFRPUF9UT1BfT1NDT05fTFNCKSAmIFRPUF9UT1BfT1NDT05fTUFTSykKLSNkZWZpbmUgVE9QX1RPUF9TQ0xLRU5fRk9SQ0VfTVNCICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBUT1BfVE9QX1NDTEtFTl9GT1JDRV9MU0IgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFRPUF9UT1BfU0NMS0VOX0ZPUkNFX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAotI2RlZmluZSBUT1BfVE9QX1NDTEtFTl9GT1JDRV9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgVE9QX1RPUF9TQ0xLRU5fRk9SQ0VfTUFTSykgPj4gVE9QX1RPUF9TQ0xLRU5fRk9SQ0VfTFNCKQotI2RlZmluZSBUT1BfVE9QX1NDTEtFTl9GT1JDRV9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFRPUF9UT1BfU0NMS0VOX0ZPUkNFX0xTQikgJiBUT1BfVE9QX1NDTEtFTl9GT1JDRV9NQVNLKQotI2RlZmluZSBUT1BfVE9QX1NZTlRIT05fRk9SQ0VfTVNCICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFRPUF9UT1BfU1lOVEhPTl9GT1JDRV9MU0IgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgVE9QX1RPUF9TWU5USE9OX0ZPUkNFX01BU0sgICAgICAgICAgICAgICAweDAwMDAwODAwCi0jZGVmaW5lIFRPUF9UT1BfU1lOVEhPTl9GT1JDRV9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBUT1BfVE9QX1NZTlRIT05fRk9SQ0VfTUFTSykgPj4gVE9QX1RPUF9TWU5USE9OX0ZPUkNFX0xTQikKLSNkZWZpbmUgVE9QX1RPUF9TWU5USE9OX0ZPUkNFX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBUT1BfVE9QX1NZTlRIT05fRk9SQ0VfTFNCKSAmIFRPUF9UT1BfU1lOVEhPTl9GT1JDRV9NQVNLKQotI2RlZmluZSBUT1BfVE9QX1BEQklBU19NU0IgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFRPUF9UT1BfUERCSUFTX0xTQiAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgVE9QX1RPUF9QREJJQVNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIFRPUF9UT1BfUERCSUFTX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBUT1BfVE9QX1BEQklBU19NQVNLKSA+PiBUT1BfVE9QX1BEQklBU19MU0IpCi0jZGVmaW5lIFRPUF9UT1BfUERCSUFTX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgVE9QX1RPUF9QREJJQVNfTFNCKSAmIFRPUF9UT1BfUERCSUFTX01BU0spCi0jZGVmaW5lIFRPUF9UT1BfREFUQU9VVFNFTF9NU0IgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBUT1BfVE9QX0RBVEFPVVRTRUxfTFNCICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgVE9QX1RPUF9EQVRBT1VUU0VMX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCi0jZGVmaW5lIFRPUF9UT1BfREFUQU9VVFNFTF9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiBUT1BfVE9QX0RBVEFPVVRTRUxfTUFTSykgPj4gVE9QX1RPUF9EQVRBT1VUU0VMX0xTQikKLSNkZWZpbmUgVE9QX1RPUF9EQVRBT1VUU0VMX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCBUT1BfVE9QX0RBVEFPVVRTRUxfTFNCKSAmIFRPUF9UT1BfREFUQU9VVFNFTF9NQVNLKQotI2RlZmluZSBUT1BfVE9QX1JFVklEX01TQiAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgVE9QX1RPUF9SRVZJRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFRPUF9UT1BfUkVWSURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBlMAotI2RlZmluZSBUT1BfVE9QX1JFVklEX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgVE9QX1RPUF9SRVZJRF9NQVNLKSA+PiBUT1BfVE9QX1JFVklEX0xTQikKLSNkZWZpbmUgVE9QX1RPUF9SRVZJRF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBUT1BfVE9QX1JFVklEX0xTQikgJiBUT1BfVE9QX1JFVklEX01BU0spCi0jZGVmaW5lIFRPUF9UT1BfSU5UMlBBRF9NU0IgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBUT1BfVE9QX0lOVDJQQURfTFNCICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgVE9QX1RPUF9JTlQyUEFEX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIFRPUF9UT1BfSU5UMlBBRF9HRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBUT1BfVE9QX0lOVDJQQURfTUFTSykgPj4gVE9QX1RPUF9JTlQyUEFEX0xTQikKLSNkZWZpbmUgVE9QX1RPUF9JTlQyUEFEX1NFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBUT1BfVE9QX0lOVDJQQURfTFNCKSAmIFRPUF9UT1BfSU5UMlBBRF9NQVNLKQotI2RlZmluZSBUT1BfVE9QX0lOVEgyUEFEX01TQiAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgVE9QX1RPUF9JTlRIMlBBRF9MU0IgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFRPUF9UT1BfSU5USDJQQURfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBUT1BfVE9QX0lOVEgyUEFEX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgVE9QX1RPUF9JTlRIMlBBRF9NQVNLKSA+PiBUT1BfVE9QX0lOVEgyUEFEX0xTQikKLSNkZWZpbmUgVE9QX1RPUF9JTlRIMlBBRF9TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBUT1BfVE9QX0lOVEgyUEFEX0xTQikgJiBUT1BfVE9QX0lOVEgyUEFEX01BU0spCi0jZGVmaW5lIFRPUF9UT1BfUEFEMkdORF9NU0IgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBUT1BfVE9QX1BBRDJHTkRfTFNCICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgVE9QX1RPUF9QQUQyR05EX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFRPUF9UT1BfUEFEMkdORF9HRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBUT1BfVE9QX1BBRDJHTkRfTUFTSykgPj4gVE9QX1RPUF9QQUQyR05EX0xTQikKLSNkZWZpbmUgVE9QX1RPUF9QQUQyR05EX1NFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBUT1BfVE9QX1BBRDJHTkRfTFNCKSAmIFRPUF9UT1BfUEFEMkdORF9NQVNLKQotI2RlZmluZSBUT1BfVE9QX0lOVDJHTkRfTVNCICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgVE9QX1RPUF9JTlQyR05EX0xTQiAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFRPUF9UT1BfSU5UMkdORF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBUT1BfVE9QX0lOVDJHTkRfR0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgVE9QX1RPUF9JTlQyR05EX01BU0spID4+IFRPUF9UT1BfSU5UMkdORF9MU0IpCi0jZGVmaW5lIFRPUF9UT1BfSU5UMkdORF9TRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgVE9QX1RPUF9JTlQyR05EX0xTQikgJiBUT1BfVE9QX0lOVDJHTkRfTUFTSykKLSNkZWZpbmUgVE9QX1RPUF9GT1JDRV9YUEFPTl9NU0IgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFRPUF9UT1BfRk9SQ0VfWFBBT05fTFNCICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBUT1BfVE9QX0ZPUkNFX1hQQU9OX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgVE9QX1RPUF9GT1JDRV9YUEFPTl9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIFRPUF9UT1BfRk9SQ0VfWFBBT05fTUFTSykgPj4gVE9QX1RPUF9GT1JDRV9YUEFPTl9MU0IpCi0jZGVmaW5lIFRPUF9UT1BfRk9SQ0VfWFBBT05fU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgVE9QX1RPUF9GT1JDRV9YUEFPTl9MU0IpICYgVE9QX1RPUF9GT1JDRV9YUEFPTl9NQVNLKQotCi0jZGVmaW5lIEJJQVNfQklBU19TRUxfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAotI2RlZmluZSBCSUFTX0JJQVNfU0VMX09GRlNFVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKLSNkZWZpbmUgQklBU19CSUFTX1NFTF9QQURPTl9NU0IgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBCSUFTX0JJQVNfU0VMX1BBRE9OX0xTQiAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIEJJQVNfQklBU19TRUxfUEFET05fTUFTSyAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBCSUFTX0JJQVNfU0VMX1BBRE9OX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgQklBU19CSUFTX1NFTF9QQURPTl9NQVNLKSA+PiBCSUFTX0JJQVNfU0VMX1BBRE9OX0xTQikKLSNkZWZpbmUgQklBU19CSUFTX1NFTF9QQURPTl9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBCSUFTX0JJQVNfU0VMX1BBRE9OX0xTQikgJiBCSUFTX0JJQVNfU0VMX1BBRE9OX01BU0spCi0jZGVmaW5lIEJJQVNfQklBU19TRUxfU0VMX0JJQVNfTVNCICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgQklBU19CSUFTX1NFTF9TRUxfQklBU19MU0IgICAgICAgICAgICAgICAyNQotI2RlZmluZSBCSUFTX0JJQVNfU0VMX1NFTF9CSUFTX01BU0sgICAgICAgICAgICAgIDB4N2UwMDAwMDAKLSNkZWZpbmUgQklBU19CSUFTX1NFTF9TRUxfQklBU19HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIEJJQVNfQklBU19TRUxfU0VMX0JJQVNfTUFTSykgPj4gQklBU19CSUFTX1NFTF9TRUxfQklBU19MU0IpCi0jZGVmaW5lIEJJQVNfQklBU19TRUxfU0VMX0JJQVNfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgQklBU19CSUFTX1NFTF9TRUxfQklBU19MU0IpICYgQklBU19CSUFTX1NFTF9TRUxfQklBU19NQVNLKQotI2RlZmluZSBCSUFTX0JJQVNfU0VMX1NFTF9TUEFSRV9NU0IgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIEJJQVNfQklBU19TRUxfU0VMX1NQQVJFX0xTQiAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgQklBU19CSUFTX1NFTF9TRUxfU1BBUkVfTUFTSyAgICAgICAgICAgICAweDAxZTAwMDAwCi0jZGVmaW5lIEJJQVNfQklBU19TRUxfU0VMX1NQQVJFX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBCSUFTX0JJQVNfU0VMX1NFTF9TUEFSRV9NQVNLKSA+PiBCSUFTX0JJQVNfU0VMX1NFTF9TUEFSRV9MU0IpCi0jZGVmaW5lIEJJQVNfQklBU19TRUxfU0VMX1NQQVJFX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgQklBU19CSUFTX1NFTF9TRUxfU1BBUkVfTFNCKSAmIEJJQVNfQklBU19TRUxfU0VMX1NQQVJFX01BU0spCi0jZGVmaW5lIEJJQVNfQklBU19TRUxfU1BBUkVfTVNCICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgQklBU19CSUFTX1NFTF9TUEFSRV9MU0IgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBCSUFTX0JJQVNfU0VMX1NQQVJFX01BU0sgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKLSNkZWZpbmUgQklBU19CSUFTX1NFTF9TUEFSRV9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIEJJQVNfQklBU19TRUxfU1BBUkVfTUFTSykgPj4gQklBU19CSUFTX1NFTF9TUEFSRV9MU0IpCi0jZGVmaW5lIEJJQVNfQklBU19TRUxfU1BBUkVfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgQklBU19CSUFTX1NFTF9TUEFSRV9MU0IpICYgQklBU19CSUFTX1NFTF9TUEFSRV9NQVNLKQotI2RlZmluZSBCSUFTX0JJQVNfU0VMX1BXRF9JQ1JFRkJVRkJJQVMxMlA1X01TQiAgIDE5Ci0jZGVmaW5lIEJJQVNfQklBU19TRUxfUFdEX0lDUkVGQlVGQklBUzEyUDVfTFNCICAgMTcKLSNkZWZpbmUgQklBU19CSUFTX1NFTF9QV0RfSUNSRUZCVUZCSUFTMTJQNV9NQVNLICAweDAwMGUwMDAwCi0jZGVmaW5lIEJJQVNfQklBU19TRUxfUFdEX0lDUkVGQlVGQklBUzEyUDVfR0VUKHgpICgoKHgpICYgQklBU19CSUFTX1NFTF9QV0RfSUNSRUZCVUZCSUFTMTJQNV9NQVNLKSA+PiBCSUFTX0JJQVNfU0VMX1BXRF9JQ1JFRkJVRkJJQVMxMlA1X0xTQikKLSNkZWZpbmUgQklBU19CSUFTX1NFTF9QV0RfSUNSRUZCVUZCSUFTMTJQNV9TRVQoeCkgKCgoeCkgPDwgQklBU19CSUFTX1NFTF9QV0RfSUNSRUZCVUZCSUFTMTJQNV9MU0IpICYgQklBU19CSUFTX1NFTF9QV0RfSUNSRUZCVUZCSUFTMTJQNV9NQVNLKQotI2RlZmluZSBCSUFTX0JJQVNfU0VMX1BXRF9JUkRBQ1JFR1JFRjEyUDVfTVNCICAgIDE2Ci0jZGVmaW5lIEJJQVNfQklBU19TRUxfUFdEX0lSREFDUkVHUkVGMTJQNV9MU0IgICAgMTYKLSNkZWZpbmUgQklBU19CSUFTX1NFTF9QV0RfSVJEQUNSRUdSRUYxMlA1X01BU0sgICAweDAwMDEwMDAwCi0jZGVmaW5lIEJJQVNfQklBU19TRUxfUFdEX0lSREFDUkVHUkVGMTJQNV9HRVQoeCkgKCgoeCkgJiBCSUFTX0JJQVNfU0VMX1BXRF9JUkRBQ1JFR1JFRjEyUDVfTUFTSykgPj4gQklBU19CSUFTX1NFTF9QV0RfSVJEQUNSRUdSRUYxMlA1X0xTQikKLSNkZWZpbmUgQklBU19CSUFTX1NFTF9QV0RfSVJEQUNSRUdSRUYxMlA1X1NFVCh4KSAoKCh4KSA8PCBCSUFTX0JJQVNfU0VMX1BXRF9JUkRBQ1JFR1JFRjEyUDVfTFNCKSAmIEJJQVNfQklBU19TRUxfUFdEX0lSREFDUkVHUkVGMTJQNV9NQVNLKQotI2RlZmluZSBCSUFTX0JJQVNfU0VMX1BXRF9JUlJFRk1BU1RFUkJJQVMxMlA1X01TQiAxNQotI2RlZmluZSBCSUFTX0JJQVNfU0VMX1BXRF9JUlJFRk1BU1RFUkJJQVMxMlA1X0xTQiAxNQotI2RlZmluZSBCSUFTX0JJQVNfU0VMX1BXRF9JUlJFRk1BU1RFUkJJQVMxMlA1X01BU0sgMHgwMDAwODAwMAotI2RlZmluZSBCSUFTX0JJQVNfU0VMX1BXRF9JUlJFRk1BU1RFUkJJQVMxMlA1X0dFVCh4KSAoKCh4KSAmIEJJQVNfQklBU19TRUxfUFdEX0lSUkVGTUFTVEVSQklBUzEyUDVfTUFTSykgPj4gQklBU19CSUFTX1NFTF9QV0RfSVJSRUZNQVNURVJCSUFTMTJQNV9MU0IpCi0jZGVmaW5lIEJJQVNfQklBU19TRUxfUFdEX0lSUkVGTUFTVEVSQklBUzEyUDVfU0VUKHgpICgoKHgpIDw8IEJJQVNfQklBU19TRUxfUFdEX0lSUkVGTUFTVEVSQklBUzEyUDVfTFNCKSAmIEJJQVNfQklBU19TRUxfUFdEX0lSUkVGTUFTVEVSQklBUzEyUDVfTUFTSykKLSNkZWZpbmUgQklBU19CSUFTX1NFTF9QV0RfSUNSRUZPUEFNUEJJQVMyNV9NU0IgICAxNAotI2RlZmluZSBCSUFTX0JJQVNfU0VMX1BXRF9JQ1JFRk9QQU1QQklBUzI1X0xTQiAgIDE0Ci0jZGVmaW5lIEJJQVNfQklBU19TRUxfUFdEX0lDUkVGT1BBTVBCSUFTMjVfTUFTSyAgMHgwMDAwNDAwMAotI2RlZmluZSBCSUFTX0JJQVNfU0VMX1BXRF9JQ1JFRk9QQU1QQklBUzI1X0dFVCh4KSAoKCh4KSAmIEJJQVNfQklBU19TRUxfUFdEX0lDUkVGT1BBTVBCSUFTMjVfTUFTSykgPj4gQklBU19CSUFTX1NFTF9QV0RfSUNSRUZPUEFNUEJJQVMyNV9MU0IpCi0jZGVmaW5lIEJJQVNfQklBU19TRUxfUFdEX0lDUkVGT1BBTVBCSUFTMjVfU0VUKHgpICgoKHgpIDw8IEJJQVNfQklBU19TRUxfUFdEX0lDUkVGT1BBTVBCSUFTMjVfTFNCKSAmIEJJQVNfQklBU19TRUxfUFdEX0lDUkVGT1BBTVBCSUFTMjVfTUFTSykKLSNkZWZpbmUgQklBU19CSUFTX1NFTF9QV0RfSUNDUExMMjVfTVNCICAgICAgICAgICAxMwotI2RlZmluZSBCSUFTX0JJQVNfU0VMX1BXRF9JQ0NQTEwyNV9MU0IgICAgICAgICAgIDEzCi0jZGVmaW5lIEJJQVNfQklBU19TRUxfUFdEX0lDQ1BMTDI1X01BU0sgICAgICAgICAgMHgwMDAwMjAwMAotI2RlZmluZSBCSUFTX0JJQVNfU0VMX1BXRF9JQ0NQTEwyNV9HRVQoeCkgICAgICAgICgoKHgpICYgQklBU19CSUFTX1NFTF9QV0RfSUNDUExMMjVfTUFTSykgPj4gQklBU19CSUFTX1NFTF9QV0RfSUNDUExMMjVfTFNCKQotI2RlZmluZSBCSUFTX0JJQVNfU0VMX1BXRF9JQ0NQTEwyNV9TRVQoeCkgICAgICAgICgoKHgpIDw8IEJJQVNfQklBU19TRUxfUFdEX0lDQ1BMTDI1X0xTQikgJiBCSUFTX0JJQVNfU0VMX1BXRF9JQ0NQTEwyNV9NQVNLKQotI2RlZmluZSBCSUFTX0JJQVNfU0VMX1BXRF9JQ0NPTVBCSUFTMjVfTVNCICAgICAgIDEyCi0jZGVmaW5lIEJJQVNfQklBU19TRUxfUFdEX0lDQ09NUEJJQVMyNV9MU0IgICAgICAgMTAKLSNkZWZpbmUgQklBU19CSUFTX1NFTF9QV0RfSUNDT01QQklBUzI1X01BU0sgICAgICAweDAwMDAxYzAwCi0jZGVmaW5lIEJJQVNfQklBU19TRUxfUFdEX0lDQ09NUEJJQVMyNV9HRVQoeCkgICAgKCgoeCkgJiBCSUFTX0JJQVNfU0VMX1BXRF9JQ0NPTVBCSUFTMjVfTUFTSykgPj4gQklBU19CSUFTX1NFTF9QV0RfSUNDT01QQklBUzI1X0xTQikKLSNkZWZpbmUgQklBU19CSUFTX1NFTF9QV0RfSUNDT01QQklBUzI1X1NFVCh4KSAgICAoKCh4KSA8PCBCSUFTX0JJQVNfU0VMX1BXRF9JQ0NPTVBCSUFTMjVfTFNCKSAmIEJJQVNfQklBU19TRUxfUFdEX0lDQ09NUEJJQVMyNV9NQVNLKQotI2RlZmluZSBCSUFTX0JJQVNfU0VMX1BXRF9JQ1hUQUwyNV9NU0IgICAgICAgICAgIDkKLSNkZWZpbmUgQklBU19CSUFTX1NFTF9QV0RfSUNYVEFMMjVfTFNCICAgICAgICAgICA3Ci0jZGVmaW5lIEJJQVNfQklBU19TRUxfUFdEX0lDWFRBTDI1X01BU0sgICAgICAgICAgMHgwMDAwMDM4MAotI2RlZmluZSBCSUFTX0JJQVNfU0VMX1BXRF9JQ1hUQUwyNV9HRVQoeCkgICAgICAgICgoKHgpICYgQklBU19CSUFTX1NFTF9QV0RfSUNYVEFMMjVfTUFTSykgPj4gQklBU19CSUFTX1NFTF9QV0RfSUNYVEFMMjVfTFNCKQotI2RlZmluZSBCSUFTX0JJQVNfU0VMX1BXRF9JQ1hUQUwyNV9TRVQoeCkgICAgICAgICgoKHgpIDw8IEJJQVNfQklBU19TRUxfUFdEX0lDWFRBTDI1X0xTQikgJiBCSUFTX0JJQVNfU0VMX1BXRF9JQ1hUQUwyNV9NQVNLKQotI2RlZmluZSBCSUFTX0JJQVNfU0VMX1BXRF9JQ1RTRU5TMjVfTVNCICAgICAgICAgIDYKLSNkZWZpbmUgQklBU19CSUFTX1NFTF9QV0RfSUNUU0VOUzI1X0xTQiAgICAgICAgICA0Ci0jZGVmaW5lIEJJQVNfQklBU19TRUxfUFdEX0lDVFNFTlMyNV9NQVNLICAgICAgICAgMHgwMDAwMDA3MAotI2RlZmluZSBCSUFTX0JJQVNfU0VMX1BXRF9JQ1RTRU5TMjVfR0VUKHgpICAgICAgICgoKHgpICYgQklBU19CSUFTX1NFTF9QV0RfSUNUU0VOUzI1X01BU0spID4+IEJJQVNfQklBU19TRUxfUFdEX0lDVFNFTlMyNV9MU0IpCi0jZGVmaW5lIEJJQVNfQklBU19TRUxfUFdEX0lDVFNFTlMyNV9TRVQoeCkgICAgICAgKCgoeCkgPDwgQklBU19CSUFTX1NFTF9QV0RfSUNUU0VOUzI1X0xTQikgJiBCSUFTX0JJQVNfU0VMX1BXRF9JQ1RTRU5TMjVfTUFTSykKLSNkZWZpbmUgQklBU19CSUFTX1NFTF9QV0RfSUNUWFBDMjVfTVNCICAgICAgICAgICAzCi0jZGVmaW5lIEJJQVNfQklBU19TRUxfUFdEX0lDVFhQQzI1X0xTQiAgICAgICAgICAgMQotI2RlZmluZSBCSUFTX0JJQVNfU0VMX1BXRF9JQ1RYUEMyNV9NQVNLICAgICAgICAgIDB4MDAwMDAwMGUKLSNkZWZpbmUgQklBU19CSUFTX1NFTF9QV0RfSUNUWFBDMjVfR0VUKHgpICAgICAgICAoKCh4KSAmIEJJQVNfQklBU19TRUxfUFdEX0lDVFhQQzI1X01BU0spID4+IEJJQVNfQklBU19TRUxfUFdEX0lDVFhQQzI1X0xTQikKLSNkZWZpbmUgQklBU19CSUFTX1NFTF9QV0RfSUNUWFBDMjVfU0VUKHgpICAgICAgICAoKCh4KSA8PCBCSUFTX0JJQVNfU0VMX1BXRF9JQ1RYUEMyNV9MU0IpICYgQklBU19CSUFTX1NFTF9QV0RfSUNUWFBDMjVfTUFTSykKLSNkZWZpbmUgQklBU19CSUFTX1NFTF9QV0RfSUNMRE8yNV9NU0IgICAgICAgICAgICAwCi0jZGVmaW5lIEJJQVNfQklBU19TRUxfUFdEX0lDTERPMjVfTFNCICAgICAgICAgICAgMAotI2RlZmluZSBCSUFTX0JJQVNfU0VMX1BXRF9JQ0xETzI1X01BU0sgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgQklBU19CSUFTX1NFTF9QV0RfSUNMRE8yNV9HRVQoeCkgICAgICAgICAoKCh4KSAmIEJJQVNfQklBU19TRUxfUFdEX0lDTERPMjVfTUFTSykgPj4gQklBU19CSUFTX1NFTF9QV0RfSUNMRE8yNV9MU0IpCi0jZGVmaW5lIEJJQVNfQklBU19TRUxfUFdEX0lDTERPMjVfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgQklBU19CSUFTX1NFTF9QV0RfSUNMRE8yNV9MU0IpICYgQklBU19CSUFTX1NFTF9QV0RfSUNMRE8yNV9NQVNLKQotCi0jZGVmaW5lIEJJQVNfQklBUzFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzYwotI2RlZmluZSBCSUFTX0JJQVMxX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM2MKLSNkZWZpbmUgQklBU19CSUFTMV9QV0RfSUNEQUMyQkIyNV9NU0IgICAgICAgICAgICAzMQotI2RlZmluZSBCSUFTX0JJQVMxX1BXRF9JQ0RBQzJCQjI1X0xTQiAgICAgICAgICAgIDI5Ci0jZGVmaW5lIEJJQVNfQklBUzFfUFdEX0lDREFDMkJCMjVfTUFTSyAgICAgICAgICAgMHhlMDAwMDAwMAotI2RlZmluZSBCSUFTX0JJQVMxX1BXRF9JQ0RBQzJCQjI1X0dFVCh4KSAgICAgICAgICgoKHgpICYgQklBU19CSUFTMV9QV0RfSUNEQUMyQkIyNV9NQVNLKSA+PiBCSUFTX0JJQVMxX1BXRF9JQ0RBQzJCQjI1X0xTQikKLSNkZWZpbmUgQklBU19CSUFTMV9QV0RfSUNEQUMyQkIyNV9TRVQoeCkgICAgICAgICAoKCh4KSA8PCBCSUFTX0JJQVMxX1BXRF9JQ0RBQzJCQjI1X0xTQikgJiBCSUFTX0JJQVMxX1BXRF9JQ0RBQzJCQjI1X01BU0spCi0jZGVmaW5lIEJJQVNfQklBUzFfUFdEX0lDMkdWR00yNV9NU0IgICAgICAgICAgICAgMjgKLSNkZWZpbmUgQklBU19CSUFTMV9QV0RfSUMyR1ZHTTI1X0xTQiAgICAgICAgICAgICAyNgotI2RlZmluZSBCSUFTX0JJQVMxX1BXRF9JQzJHVkdNMjVfTUFTSyAgICAgICAgICAgIDB4MWMwMDAwMDAKLSNkZWZpbmUgQklBU19CSUFTMV9QV0RfSUMyR1ZHTTI1X0dFVCh4KSAgICAgICAgICAoKCh4KSAmIEJJQVNfQklBUzFfUFdEX0lDMkdWR00yNV9NQVNLKSA+PiBCSUFTX0JJQVMxX1BXRF9JQzJHVkdNMjVfTFNCKQotI2RlZmluZSBCSUFTX0JJQVMxX1BXRF9JQzJHVkdNMjVfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IEJJQVNfQklBUzFfUFdEX0lDMkdWR00yNV9MU0IpICYgQklBU19CSUFTMV9QV0RfSUMyR1ZHTTI1X01BU0spCi0jZGVmaW5lIEJJQVNfQklBUzFfUFdEX0lDMkdSRkZFMjVfTVNCICAgICAgICAgICAgMjUKLSNkZWZpbmUgQklBU19CSUFTMV9QV0RfSUMyR1JGRkUyNV9MU0IgICAgICAgICAgICAyMwotI2RlZmluZSBCSUFTX0JJQVMxX1BXRF9JQzJHUkZGRTI1X01BU0sgICAgICAgICAgIDB4MDM4MDAwMDAKLSNkZWZpbmUgQklBU19CSUFTMV9QV0RfSUMyR1JGRkUyNV9HRVQoeCkgICAgICAgICAoKCh4KSAmIEJJQVNfQklBUzFfUFdEX0lDMkdSRkZFMjVfTUFTSykgPj4gQklBU19CSUFTMV9QV0RfSUMyR1JGRkUyNV9MU0IpCi0jZGVmaW5lIEJJQVNfQklBUzFfUFdEX0lDMkdSRkZFMjVfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgQklBU19CSUFTMV9QV0RfSUMyR1JGRkUyNV9MU0IpICYgQklBU19CSUFTMV9QV0RfSUMyR1JGRkUyNV9NQVNLKQotI2RlZmluZSBCSUFTX0JJQVMxX1BXRF9JQzJHTE9SRUcyNV9NU0IgICAgICAgICAgIDIyCi0jZGVmaW5lIEJJQVNfQklBUzFfUFdEX0lDMkdMT1JFRzI1X0xTQiAgICAgICAgICAgMjAKLSNkZWZpbmUgQklBU19CSUFTMV9QV0RfSUMyR0xPUkVHMjVfTUFTSyAgICAgICAgICAweDAwNzAwMDAwCi0jZGVmaW5lIEJJQVNfQklBUzFfUFdEX0lDMkdMT1JFRzI1X0dFVCh4KSAgICAgICAgKCgoeCkgJiBCSUFTX0JJQVMxX1BXRF9JQzJHTE9SRUcyNV9NQVNLKSA+PiBCSUFTX0JJQVMxX1BXRF9JQzJHTE9SRUcyNV9MU0IpCi0jZGVmaW5lIEJJQVNfQklBUzFfUFdEX0lDMkdMT1JFRzI1X1NFVCh4KSAgICAgICAgKCgoeCkgPDwgQklBU19CSUFTMV9QV0RfSUMyR0xPUkVHMjVfTFNCKSAmIEJJQVNfQklBUzFfUFdEX0lDMkdMT1JFRzI1X01BU0spCi0jZGVmaW5lIEJJQVNfQklBUzFfUFdEX0lDMkdMTkFSRUcyNV9NU0IgICAgICAgICAgMTkKLSNkZWZpbmUgQklBU19CSUFTMV9QV0RfSUMyR0xOQVJFRzI1X0xTQiAgICAgICAgICAxNwotI2RlZmluZSBCSUFTX0JJQVMxX1BXRF9JQzJHTE5BUkVHMjVfTUFTSyAgICAgICAgIDB4MDAwZTAwMDAKLSNkZWZpbmUgQklBU19CSUFTMV9QV0RfSUMyR0xOQVJFRzI1X0dFVCh4KSAgICAgICAoKCh4KSAmIEJJQVNfQklBUzFfUFdEX0lDMkdMTkFSRUcyNV9NQVNLKSA+PiBCSUFTX0JJQVMxX1BXRF9JQzJHTE5BUkVHMjVfTFNCKQotI2RlZmluZSBCSUFTX0JJQVMxX1BXRF9JQzJHTE5BUkVHMjVfU0VUKHgpICAgICAgICgoKHgpIDw8IEJJQVNfQklBUzFfUFdEX0lDMkdMTkFSRUcyNV9MU0IpICYgQklBU19CSUFTMV9QV0RfSUMyR0xOQVJFRzI1X01BU0spCi0jZGVmaW5lIEJJQVNfQklBUzFfUFdEX0lDREVURUNUT1JCMjVfTVNCICAgICAgICAgMTYKLSNkZWZpbmUgQklBU19CSUFTMV9QV0RfSUNERVRFQ1RPUkIyNV9MU0IgICAgICAgICAxNgotI2RlZmluZSBCSUFTX0JJQVMxX1BXRF9JQ0RFVEVDVE9SQjI1X01BU0sgICAgICAgIDB4MDAwMTAwMDAKLSNkZWZpbmUgQklBU19CSUFTMV9QV0RfSUNERVRFQ1RPUkIyNV9HRVQoeCkgICAgICAoKCh4KSAmIEJJQVNfQklBUzFfUFdEX0lDREVURUNUT1JCMjVfTUFTSykgPj4gQklBU19CSUFTMV9QV0RfSUNERVRFQ1RPUkIyNV9MU0IpCi0jZGVmaW5lIEJJQVNfQklBUzFfUFdEX0lDREVURUNUT1JCMjVfU0VUKHgpICAgICAgKCgoeCkgPDwgQklBU19CSUFTMV9QV0RfSUNERVRFQ1RPUkIyNV9MU0IpICYgQklBU19CSUFTMV9QV0RfSUNERVRFQ1RPUkIyNV9NQVNLKQotI2RlZmluZSBCSUFTX0JJQVMxX1BXRF9JQ0RFVEVDVE9SQTI1X01TQiAgICAgICAgIDE1Ci0jZGVmaW5lIEJJQVNfQklBUzFfUFdEX0lDREVURUNUT1JBMjVfTFNCICAgICAgICAgMTUKLSNkZWZpbmUgQklBU19CSUFTMV9QV0RfSUNERVRFQ1RPUkEyNV9NQVNLICAgICAgICAweDAwMDA4MDAwCi0jZGVmaW5lIEJJQVNfQklBUzFfUFdEX0lDREVURUNUT1JBMjVfR0VUKHgpICAgICAgKCgoeCkgJiBCSUFTX0JJQVMxX1BXRF9JQ0RFVEVDVE9SQTI1X01BU0spID4+IEJJQVNfQklBUzFfUFdEX0lDREVURUNUT1JBMjVfTFNCKQotI2RlZmluZSBCSUFTX0JJQVMxX1BXRF9JQ0RFVEVDVE9SQTI1X1NFVCh4KSAgICAgICgoKHgpIDw8IEJJQVNfQklBUzFfUFdEX0lDREVURUNUT1JBMjVfTFNCKSAmIEJJQVNfQklBUzFfUFdEX0lDREVURUNUT1JBMjVfTUFTSykKLSNkZWZpbmUgQklBU19CSUFTMV9QV0RfSUM1R1JYUkYyNV9NU0IgICAgICAgICAgICAxNAotI2RlZmluZSBCSUFTX0JJQVMxX1BXRF9JQzVHUlhSRjI1X0xTQiAgICAgICAgICAgIDE0Ci0jZGVmaW5lIEJJQVNfQklBUzFfUFdEX0lDNUdSWFJGMjVfTUFTSyAgICAgICAgICAgMHgwMDAwNDAwMAotI2RlZmluZSBCSUFTX0JJQVMxX1BXRF9JQzVHUlhSRjI1X0dFVCh4KSAgICAgICAgICgoKHgpICYgQklBU19CSUFTMV9QV0RfSUM1R1JYUkYyNV9NQVNLKSA+PiBCSUFTX0JJQVMxX1BXRF9JQzVHUlhSRjI1X0xTQikKLSNkZWZpbmUgQklBU19CSUFTMV9QV0RfSUM1R1JYUkYyNV9TRVQoeCkgICAgICAgICAoKCh4KSA8PCBCSUFTX0JJQVMxX1BXRF9JQzVHUlhSRjI1X0xTQikgJiBCSUFTX0JJQVMxX1BXRF9JQzVHUlhSRjI1X01BU0spCi0jZGVmaW5lIEJJQVNfQklBUzFfUFdEX0lDNUdUWFBBMjVfTVNCICAgICAgICAgICAgMTMKLSNkZWZpbmUgQklBU19CSUFTMV9QV0RfSUM1R1RYUEEyNV9MU0IgICAgICAgICAgICAxMQotI2RlZmluZSBCSUFTX0JJQVMxX1BXRF9JQzVHVFhQQTI1X01BU0sgICAgICAgICAgIDB4MDAwMDM4MDAKLSNkZWZpbmUgQklBU19CSUFTMV9QV0RfSUM1R1RYUEEyNV9HRVQoeCkgICAgICAgICAoKCh4KSAmIEJJQVNfQklBUzFfUFdEX0lDNUdUWFBBMjVfTUFTSykgPj4gQklBU19CSUFTMV9QV0RfSUM1R1RYUEEyNV9MU0IpCi0jZGVmaW5lIEJJQVNfQklBUzFfUFdEX0lDNUdUWFBBMjVfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgQklBU19CSUFTMV9QV0RfSUM1R1RYUEEyNV9MU0IpICYgQklBU19CSUFTMV9QV0RfSUM1R1RYUEEyNV9NQVNLKQotI2RlZmluZSBCSUFTX0JJQVMxX1BXRF9JQzVHVFhCVUYyNV9NU0IgICAgICAgICAgIDEwCi0jZGVmaW5lIEJJQVNfQklBUzFfUFdEX0lDNUdUWEJVRjI1X0xTQiAgICAgICAgICAgOAotI2RlZmluZSBCSUFTX0JJQVMxX1BXRF9JQzVHVFhCVUYyNV9NQVNLICAgICAgICAgIDB4MDAwMDA3MDAKLSNkZWZpbmUgQklBU19CSUFTMV9QV0RfSUM1R1RYQlVGMjVfR0VUKHgpICAgICAgICAoKCh4KSAmIEJJQVNfQklBUzFfUFdEX0lDNUdUWEJVRjI1X01BU0spID4+IEJJQVNfQklBUzFfUFdEX0lDNUdUWEJVRjI1X0xTQikKLSNkZWZpbmUgQklBU19CSUFTMV9QV0RfSUM1R1RYQlVGMjVfU0VUKHgpICAgICAgICAoKCh4KSA8PCBCSUFTX0JJQVMxX1BXRF9JQzVHVFhCVUYyNV9MU0IpICYgQklBU19CSUFTMV9QV0RfSUM1R1RYQlVGMjVfTUFTSykKLSNkZWZpbmUgQklBU19CSUFTMV9QV0RfSUM1R1FCMjVfTVNCICAgICAgICAgICAgICA3Ci0jZGVmaW5lIEJJQVNfQklBUzFfUFdEX0lDNUdRQjI1X0xTQiAgICAgICAgICAgICAgNQotI2RlZmluZSBCSUFTX0JJQVMxX1BXRF9JQzVHUUIyNV9NQVNLICAgICAgICAgICAgIDB4MDAwMDAwZTAKLSNkZWZpbmUgQklBU19CSUFTMV9QV0RfSUM1R1FCMjVfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIEJJQVNfQklBUzFfUFdEX0lDNUdRQjI1X01BU0spID4+IEJJQVNfQklBUzFfUFdEX0lDNUdRQjI1X0xTQikKLSNkZWZpbmUgQklBU19CSUFTMV9QV0RfSUM1R1FCMjVfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCBCSUFTX0JJQVMxX1BXRF9JQzVHUUIyNV9MU0IpICYgQklBU19CSUFTMV9QV0RfSUM1R1FCMjVfTUFTSykKLSNkZWZpbmUgQklBU19CSUFTMV9QV0RfSUM1R01JWFEyNV9NU0IgICAgICAgICAgICA0Ci0jZGVmaW5lIEJJQVNfQklBUzFfUFdEX0lDNUdNSVhRMjVfTFNCICAgICAgICAgICAgMgotI2RlZmluZSBCSUFTX0JJQVMxX1BXRF9JQzVHTUlYUTI1X01BU0sgICAgICAgICAgIDB4MDAwMDAwMWMKLSNkZWZpbmUgQklBU19CSUFTMV9QV0RfSUM1R01JWFEyNV9HRVQoeCkgICAgICAgICAoKCh4KSAmIEJJQVNfQklBUzFfUFdEX0lDNUdNSVhRMjVfTUFTSykgPj4gQklBU19CSUFTMV9QV0RfSUM1R01JWFEyNV9MU0IpCi0jZGVmaW5lIEJJQVNfQklBUzFfUFdEX0lDNUdNSVhRMjVfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgQklBU19CSUFTMV9QV0RfSUM1R01JWFEyNV9MU0IpICYgQklBU19CSUFTMV9QV0RfSUM1R01JWFEyNV9NQVNLKQotI2RlZmluZSBCSUFTX0JJQVMxX1NQQVJFX01TQiAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgQklBU19CSUFTMV9TUEFSRV9MU0IgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEJJQVNfQklBUzFfU1BBUkVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMwotI2RlZmluZSBCSUFTX0JJQVMxX1NQQVJFX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgQklBU19CSUFTMV9TUEFSRV9NQVNLKSA+PiBCSUFTX0JJQVMxX1NQQVJFX0xTQikKLSNkZWZpbmUgQklBU19CSUFTMV9TUEFSRV9TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBCSUFTX0JJQVMxX1NQQVJFX0xTQikgJiBCSUFTX0JJQVMxX1NQQVJFX01BU0spCi0KLSNkZWZpbmUgQklBU19CSUFTMl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIEJJQVNfQklBUzJfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAotI2RlZmluZSBCSUFTX0JJQVMyX1BXRF9JQzVHTUlYSTI1X01TQiAgICAgICAgICAgIDMxCi0jZGVmaW5lIEJJQVNfQklBUzJfUFdEX0lDNUdNSVhJMjVfTFNCICAgICAgICAgICAgMjkKLSNkZWZpbmUgQklBU19CSUFTMl9QV0RfSUM1R01JWEkyNV9NQVNLICAgICAgICAgICAweGUwMDAwMDAwCi0jZGVmaW5lIEJJQVNfQklBUzJfUFdEX0lDNUdNSVhJMjVfR0VUKHgpICAgICAgICAgKCgoeCkgJiBCSUFTX0JJQVMyX1BXRF9JQzVHTUlYSTI1X01BU0spID4+IEJJQVNfQklBUzJfUFdEX0lDNUdNSVhJMjVfTFNCKQotI2RlZmluZSBCSUFTX0JJQVMyX1BXRF9JQzVHTUlYSTI1X1NFVCh4KSAgICAgICAgICgoKHgpIDw8IEJJQVNfQklBUzJfUFdEX0lDNUdNSVhJMjVfTFNCKSAmIEJJQVNfQklBUzJfUFdEX0lDNUdNSVhJMjVfTUFTSykKLSNkZWZpbmUgQklBU19CSUFTMl9QV0RfSUM1R0RJVjI1X01TQiAgICAgICAgICAgICAyOAotI2RlZmluZSBCSUFTX0JJQVMyX1BXRF9JQzVHRElWMjVfTFNCICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIEJJQVNfQklBUzJfUFdEX0lDNUdESVYyNV9NQVNLICAgICAgICAgICAgMHgxYzAwMDAwMAotI2RlZmluZSBCSUFTX0JJQVMyX1BXRF9JQzVHRElWMjVfR0VUKHgpICAgICAgICAgICgoKHgpICYgQklBU19CSUFTMl9QV0RfSUM1R0RJVjI1X01BU0spID4+IEJJQVNfQklBUzJfUFdEX0lDNUdESVYyNV9MU0IpCi0jZGVmaW5lIEJJQVNfQklBUzJfUFdEX0lDNUdESVYyNV9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgQklBU19CSUFTMl9QV0RfSUM1R0RJVjI1X0xTQikgJiBCSUFTX0JJQVMyX1BXRF9JQzVHRElWMjVfTUFTSykKLSNkZWZpbmUgQklBU19CSUFTMl9QV0RfSUM1R0xPUkVHMjVfTVNCICAgICAgICAgICAyNQotI2RlZmluZSBCSUFTX0JJQVMyX1BXRF9JQzVHTE9SRUcyNV9MU0IgICAgICAgICAgIDIzCi0jZGVmaW5lIEJJQVNfQklBUzJfUFdEX0lDNUdMT1JFRzI1X01BU0sgICAgICAgICAgMHgwMzgwMDAwMAotI2RlZmluZSBCSUFTX0JJQVMyX1BXRF9JQzVHTE9SRUcyNV9HRVQoeCkgICAgICAgICgoKHgpICYgQklBU19CSUFTMl9QV0RfSUM1R0xPUkVHMjVfTUFTSykgPj4gQklBU19CSUFTMl9QV0RfSUM1R0xPUkVHMjVfTFNCKQotI2RlZmluZSBCSUFTX0JJQVMyX1BXRF9JQzVHTE9SRUcyNV9TRVQoeCkgICAgICAgICgoKHgpIDw8IEJJQVNfQklBUzJfUFdEX0lDNUdMT1JFRzI1X0xTQikgJiBCSUFTX0JJQVMyX1BXRF9JQzVHTE9SRUcyNV9NQVNLKQotI2RlZmluZSBCSUFTX0JJQVMyX1BXRF9JUlBMTDI1X01TQiAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIEJJQVNfQklBUzJfUFdEX0lSUExMMjVfTFNCICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgQklBU19CSUFTMl9QV0RfSVJQTEwyNV9NQVNLICAgICAgICAgICAgICAweDAwNDAwMDAwCi0jZGVmaW5lIEJJQVNfQklBUzJfUFdEX0lSUExMMjVfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBCSUFTX0JJQVMyX1BXRF9JUlBMTDI1X01BU0spID4+IEJJQVNfQklBUzJfUFdEX0lSUExMMjVfTFNCKQotI2RlZmluZSBCSUFTX0JJQVMyX1BXRF9JUlBMTDI1X1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IEJJQVNfQklBUzJfUFdEX0lSUExMMjVfTFNCKSAmIEJJQVNfQklBUzJfUFdEX0lSUExMMjVfTUFTSykKLSNkZWZpbmUgQklBU19CSUFTMl9QV0RfSVJYVEFMMjVfTVNCICAgICAgICAgICAgICAyMQotI2RlZmluZSBCSUFTX0JJQVMyX1BXRF9JUlhUQUwyNV9MU0IgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIEJJQVNfQklBUzJfUFdEX0lSWFRBTDI1X01BU0sgICAgICAgICAgICAgMHgwMDM4MDAwMAotI2RlZmluZSBCSUFTX0JJQVMyX1BXRF9JUlhUQUwyNV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgQklBU19CSUFTMl9QV0RfSVJYVEFMMjVfTUFTSykgPj4gQklBU19CSUFTMl9QV0RfSVJYVEFMMjVfTFNCKQotI2RlZmluZSBCSUFTX0JJQVMyX1BXRF9JUlhUQUwyNV9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IEJJQVNfQklBUzJfUFdEX0lSWFRBTDI1X0xTQikgJiBCSUFTX0JJQVMyX1BXRF9JUlhUQUwyNV9NQVNLKQotI2RlZmluZSBCSUFTX0JJQVMyX1BXRF9JUlRTRU5TMjVfTVNCICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIEJJQVNfQklBUzJfUFdEX0lSVFNFTlMyNV9MU0IgICAgICAgICAgICAgMTYKLSNkZWZpbmUgQklBU19CSUFTMl9QV0RfSVJUU0VOUzI1X01BU0sgICAgICAgICAgICAweDAwMDcwMDAwCi0jZGVmaW5lIEJJQVNfQklBUzJfUFdEX0lSVFNFTlMyNV9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBCSUFTX0JJQVMyX1BXRF9JUlRTRU5TMjVfTUFTSykgPj4gQklBU19CSUFTMl9QV0RfSVJUU0VOUzI1X0xTQikKLSNkZWZpbmUgQklBU19CSUFTMl9QV0RfSVJUU0VOUzI1X1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBCSUFTX0JJQVMyX1BXRF9JUlRTRU5TMjVfTFNCKSAmIEJJQVNfQklBUzJfUFdEX0lSVFNFTlMyNV9NQVNLKQotI2RlZmluZSBCSUFTX0JJQVMyX1BXRF9JUlRYUEMyNV9NU0IgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIEJJQVNfQklBUzJfUFdEX0lSVFhQQzI1X0xTQiAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgQklBU19CSUFTMl9QV0RfSVJUWFBDMjVfTUFTSyAgICAgICAgICAgICAweDAwMDBlMDAwCi0jZGVmaW5lIEJJQVNfQklBUzJfUFdEX0lSVFhQQzI1X0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBCSUFTX0JJQVMyX1BXRF9JUlRYUEMyNV9NQVNLKSA+PiBCSUFTX0JJQVMyX1BXRF9JUlRYUEMyNV9MU0IpCi0jZGVmaW5lIEJJQVNfQklBUzJfUFdEX0lSVFhQQzI1X1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgQklBU19CSUFTMl9QV0RfSVJUWFBDMjVfTFNCKSAmIEJJQVNfQklBUzJfUFdEX0lSVFhQQzI1X01BU0spCi0jZGVmaW5lIEJJQVNfQklBUzJfUFdEX0lSTERPMjVfTVNCICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgQklBU19CSUFTMl9QV0RfSVJMRE8yNV9MU0IgICAgICAgICAgICAgICAxMgotI2RlZmluZSBCSUFTX0JJQVMyX1BXRF9JUkxETzI1X01BU0sgICAgICAgICAgICAgIDB4MDAwMDEwMDAKLSNkZWZpbmUgQklBU19CSUFTMl9QV0RfSVJMRE8yNV9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIEJJQVNfQklBUzJfUFdEX0lSTERPMjVfTUFTSykgPj4gQklBU19CSUFTMl9QV0RfSVJMRE8yNV9MU0IpCi0jZGVmaW5lIEJJQVNfQklBUzJfUFdEX0lSTERPMjVfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgQklBU19CSUFTMl9QV0RfSVJMRE8yNV9MU0IpICYgQklBU19CSUFTMl9QV0RfSVJMRE8yNV9NQVNLKQotI2RlZmluZSBCSUFTX0JJQVMyX1BXRF9JUjJHVFhNSVgyNV9NU0IgICAgICAgICAgIDExCi0jZGVmaW5lIEJJQVNfQklBUzJfUFdEX0lSMkdUWE1JWDI1X0xTQiAgICAgICAgICAgOQotI2RlZmluZSBCSUFTX0JJQVMyX1BXRF9JUjJHVFhNSVgyNV9NQVNLICAgICAgICAgIDB4MDAwMDBlMDAKLSNkZWZpbmUgQklBU19CSUFTMl9QV0RfSVIyR1RYTUlYMjVfR0VUKHgpICAgICAgICAoKCh4KSAmIEJJQVNfQklBUzJfUFdEX0lSMkdUWE1JWDI1X01BU0spID4+IEJJQVNfQklBUzJfUFdEX0lSMkdUWE1JWDI1X0xTQikKLSNkZWZpbmUgQklBU19CSUFTMl9QV0RfSVIyR1RYTUlYMjVfU0VUKHgpICAgICAgICAoKCh4KSA8PCBCSUFTX0JJQVMyX1BXRF9JUjJHVFhNSVgyNV9MU0IpICYgQklBU19CSUFTMl9QV0RfSVIyR1RYTUlYMjVfTUFTSykKLSNkZWZpbmUgQklBU19CSUFTMl9QV0RfSVIyR0xPUkVHMjVfTVNCICAgICAgICAgICA4Ci0jZGVmaW5lIEJJQVNfQklBUzJfUFdEX0lSMkdMT1JFRzI1X0xTQiAgICAgICAgICAgNgotI2RlZmluZSBCSUFTX0JJQVMyX1BXRF9JUjJHTE9SRUcyNV9NQVNLICAgICAgICAgIDB4MDAwMDAxYzAKLSNkZWZpbmUgQklBU19CSUFTMl9QV0RfSVIyR0xPUkVHMjVfR0VUKHgpICAgICAgICAoKCh4KSAmIEJJQVNfQklBUzJfUFdEX0lSMkdMT1JFRzI1X01BU0spID4+IEJJQVNfQklBUzJfUFdEX0lSMkdMT1JFRzI1X0xTQikKLSNkZWZpbmUgQklBU19CSUFTMl9QV0RfSVIyR0xPUkVHMjVfU0VUKHgpICAgICAgICAoKCh4KSA8PCBCSUFTX0JJQVMyX1BXRF9JUjJHTE9SRUcyNV9MU0IpICYgQklBU19CSUFTMl9QV0RfSVIyR0xPUkVHMjVfTUFTSykKLSNkZWZpbmUgQklBU19CSUFTMl9QV0RfSVIyR0xOQVJFRzI1X01TQiAgICAgICAgICA1Ci0jZGVmaW5lIEJJQVNfQklBUzJfUFdEX0lSMkdMTkFSRUcyNV9MU0IgICAgICAgICAgMwotI2RlZmluZSBCSUFTX0JJQVMyX1BXRF9JUjJHTE5BUkVHMjVfTUFTSyAgICAgICAgIDB4MDAwMDAwMzgKLSNkZWZpbmUgQklBU19CSUFTMl9QV0RfSVIyR0xOQVJFRzI1X0dFVCh4KSAgICAgICAoKCh4KSAmIEJJQVNfQklBUzJfUFdEX0lSMkdMTkFSRUcyNV9NQVNLKSA+PiBCSUFTX0JJQVMyX1BXRF9JUjJHTE5BUkVHMjVfTFNCKQotI2RlZmluZSBCSUFTX0JJQVMyX1BXRF9JUjJHTE5BUkVHMjVfU0VUKHgpICAgICAgICgoKHgpIDw8IEJJQVNfQklBUzJfUFdEX0lSMkdMTkFSRUcyNV9MU0IpICYgQklBU19CSUFTMl9QV0RfSVIyR0xOQVJFRzI1X01BU0spCi0jZGVmaW5lIEJJQVNfQklBUzJfUFdEX0lSNUdSRlZSRUYyNTI1X01TQiAgICAgICAgMgotI2RlZmluZSBCSUFTX0JJQVMyX1BXRF9JUjVHUkZWUkVGMjUyNV9MU0IgICAgICAgIDAKLSNkZWZpbmUgQklBU19CSUFTMl9QV0RfSVI1R1JGVlJFRjI1MjVfTUFTSyAgICAgICAweDAwMDAwMDA3Ci0jZGVmaW5lIEJJQVNfQklBUzJfUFdEX0lSNUdSRlZSRUYyNTI1X0dFVCh4KSAgICAgKCgoeCkgJiBCSUFTX0JJQVMyX1BXRF9JUjVHUkZWUkVGMjUyNV9NQVNLKSA+PiBCSUFTX0JJQVMyX1BXRF9JUjVHUkZWUkVGMjUyNV9MU0IpCi0jZGVmaW5lIEJJQVNfQklBUzJfUFdEX0lSNUdSRlZSRUYyNTI1X1NFVCh4KSAgICAgKCgoeCkgPDwgQklBU19CSUFTMl9QV0RfSVI1R1JGVlJFRjI1MjVfTFNCKSAmIEJJQVNfQklBUzJfUFdEX0lSNUdSRlZSRUYyNTI1X01BU0spCi0KLSNkZWZpbmUgQklBU19CSUFTM19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ0Ci0jZGVmaW5lIEJJQVNfQklBUzNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0NAotI2RlZmluZSBCSUFTX0JJQVMzX1BXRF9JUjVHVFhNSVgyNV9NU0IgICAgICAgICAgIDMxCi0jZGVmaW5lIEJJQVNfQklBUzNfUFdEX0lSNUdUWE1JWDI1X0xTQiAgICAgICAgICAgMjkKLSNkZWZpbmUgQklBU19CSUFTM19QV0RfSVI1R1RYTUlYMjVfTUFTSyAgICAgICAgICAweGUwMDAwMDAwCi0jZGVmaW5lIEJJQVNfQklBUzNfUFdEX0lSNUdUWE1JWDI1X0dFVCh4KSAgICAgICAgKCgoeCkgJiBCSUFTX0JJQVMzX1BXRF9JUjVHVFhNSVgyNV9NQVNLKSA+PiBCSUFTX0JJQVMzX1BXRF9JUjVHVFhNSVgyNV9MU0IpCi0jZGVmaW5lIEJJQVNfQklBUzNfUFdEX0lSNUdUWE1JWDI1X1NFVCh4KSAgICAgICAgKCgoeCkgPDwgQklBU19CSUFTM19QV0RfSVI1R1RYTUlYMjVfTFNCKSAmIEJJQVNfQklBUzNfUFdEX0lSNUdUWE1JWDI1X01BU0spCi0jZGVmaW5lIEJJQVNfQklBUzNfUFdEX0lSNUdBR0MyNV9NU0IgICAgICAgICAgICAgMjgKLSNkZWZpbmUgQklBU19CSUFTM19QV0RfSVI1R0FHQzI1X0xTQiAgICAgICAgICAgICAyNgotI2RlZmluZSBCSUFTX0JJQVMzX1BXRF9JUjVHQUdDMjVfTUFTSyAgICAgICAgICAgIDB4MWMwMDAwMDAKLSNkZWZpbmUgQklBU19CSUFTM19QV0RfSVI1R0FHQzI1X0dFVCh4KSAgICAgICAgICAoKCh4KSAmIEJJQVNfQklBUzNfUFdEX0lSNUdBR0MyNV9NQVNLKSA+PiBCSUFTX0JJQVMzX1BXRF9JUjVHQUdDMjVfTFNCKQotI2RlZmluZSBCSUFTX0JJQVMzX1BXRF9JUjVHQUdDMjVfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IEJJQVNfQklBUzNfUFdEX0lSNUdBR0MyNV9MU0IpICYgQklBU19CSUFTM19QV0RfSVI1R0FHQzI1X01BU0spCi0jZGVmaW5lIEJJQVNfQklBUzNfUFdEX0lDREFDNTBfTVNCICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgQklBU19CSUFTM19QV0RfSUNEQUM1MF9MU0IgICAgICAgICAgICAgICAyMwotI2RlZmluZSBCSUFTX0JJQVMzX1BXRF9JQ0RBQzUwX01BU0sgICAgICAgICAgICAgIDB4MDM4MDAwMDAKLSNkZWZpbmUgQklBU19CSUFTM19QV0RfSUNEQUM1MF9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIEJJQVNfQklBUzNfUFdEX0lDREFDNTBfTUFTSykgPj4gQklBU19CSUFTM19QV0RfSUNEQUM1MF9MU0IpCi0jZGVmaW5lIEJJQVNfQklBUzNfUFdEX0lDREFDNTBfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgQklBU19CSUFTM19QV0RfSUNEQUM1MF9MU0IpICYgQklBU19CSUFTM19QV0RfSUNEQUM1MF9NQVNLKQotI2RlZmluZSBCSUFTX0JJQVMzX1BXRF9JQ1NZTlRINTBfTVNCICAgICAgICAgICAgIDIyCi0jZGVmaW5lIEJJQVNfQklBUzNfUFdEX0lDU1lOVEg1MF9MU0IgICAgICAgICAgICAgMjIKLSNkZWZpbmUgQklBU19CSUFTM19QV0RfSUNTWU5USDUwX01BU0sgICAgICAgICAgICAweDAwNDAwMDAwCi0jZGVmaW5lIEJJQVNfQklBUzNfUFdEX0lDU1lOVEg1MF9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBCSUFTX0JJQVMzX1BXRF9JQ1NZTlRINTBfTUFTSykgPj4gQklBU19CSUFTM19QV0RfSUNTWU5USDUwX0xTQikKLSNkZWZpbmUgQklBU19CSUFTM19QV0RfSUNTWU5USDUwX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBCSUFTX0JJQVMzX1BXRF9JQ1NZTlRINTBfTFNCKSAmIEJJQVNfQklBUzNfUFdEX0lDU1lOVEg1MF9NQVNLKQotI2RlZmluZSBCSUFTX0JJQVMzX1BXRF9JQ0JCNTBfTVNCICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIEJJQVNfQklBUzNfUFdEX0lDQkI1MF9MU0IgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgQklBU19CSUFTM19QV0RfSUNCQjUwX01BU0sgICAgICAgICAgICAgICAweDAwMjAwMDAwCi0jZGVmaW5lIEJJQVNfQklBUzNfUFdEX0lDQkI1MF9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBCSUFTX0JJQVMzX1BXRF9JQ0JCNTBfTUFTSykgPj4gQklBU19CSUFTM19QV0RfSUNCQjUwX0xTQikKLSNkZWZpbmUgQklBU19CSUFTM19QV0RfSUNCQjUwX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBCSUFTX0JJQVMzX1BXRF9JQ0JCNTBfTFNCKSAmIEJJQVNfQklBUzNfUFdEX0lDQkI1MF9NQVNLKQotI2RlZmluZSBCSUFTX0JJQVMzX1BXRF9JQzJHRElWNTBfTVNCICAgICAgICAgICAgIDIwCi0jZGVmaW5lIEJJQVNfQklBUzNfUFdEX0lDMkdESVY1MF9MU0IgICAgICAgICAgICAgMTgKLSNkZWZpbmUgQklBU19CSUFTM19QV0RfSUMyR0RJVjUwX01BU0sgICAgICAgICAgICAweDAwMWMwMDAwCi0jZGVmaW5lIEJJQVNfQklBUzNfUFdEX0lDMkdESVY1MF9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBCSUFTX0JJQVMzX1BXRF9JQzJHRElWNTBfTUFTSykgPj4gQklBU19CSUFTM19QV0RfSUMyR0RJVjUwX0xTQikKLSNkZWZpbmUgQklBU19CSUFTM19QV0RfSUMyR0RJVjUwX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBCSUFTX0JJQVMzX1BXRF9JQzJHRElWNTBfTFNCKSAmIEJJQVNfQklBUzNfUFdEX0lDMkdESVY1MF9NQVNLKQotI2RlZmluZSBCSUFTX0JJQVMzX1BXRF9JUlNZTlRINTBfTVNCICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIEJJQVNfQklBUzNfUFdEX0lSU1lOVEg1MF9MU0IgICAgICAgICAgICAgMTcKLSNkZWZpbmUgQklBU19CSUFTM19QV0RfSVJTWU5USDUwX01BU0sgICAgICAgICAgICAweDAwMDIwMDAwCi0jZGVmaW5lIEJJQVNfQklBUzNfUFdEX0lSU1lOVEg1MF9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBCSUFTX0JJQVMzX1BXRF9JUlNZTlRINTBfTUFTSykgPj4gQklBU19CSUFTM19QV0RfSVJTWU5USDUwX0xTQikKLSNkZWZpbmUgQklBU19CSUFTM19QV0RfSVJTWU5USDUwX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBCSUFTX0JJQVMzX1BXRF9JUlNZTlRINTBfTFNCKSAmIEJJQVNfQklBUzNfUFdEX0lSU1lOVEg1MF9NQVNLKQotI2RlZmluZSBCSUFTX0JJQVMzX1BXRF9JUkJCNTBfTVNCICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIEJJQVNfQklBUzNfUFdEX0lSQkI1MF9MU0IgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgQklBU19CSUFTM19QV0RfSVJCQjUwX01BU0sgICAgICAgICAgICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIEJJQVNfQklBUzNfUFdEX0lSQkI1MF9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBCSUFTX0JJQVMzX1BXRF9JUkJCNTBfTUFTSykgPj4gQklBU19CSUFTM19QV0RfSVJCQjUwX0xTQikKLSNkZWZpbmUgQklBU19CSUFTM19QV0RfSVJCQjUwX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBCSUFTX0JJQVMzX1BXRF9JUkJCNTBfTFNCKSAmIEJJQVNfQklBUzNfUFdEX0lSQkI1MF9NQVNLKQotI2RlZmluZSBCSUFTX0JJQVMzX1BXRF9JQzI1U1BBUkUxX01TQiAgICAgICAgICAgIDE1Ci0jZGVmaW5lIEJJQVNfQklBUzNfUFdEX0lDMjVTUEFSRTFfTFNCICAgICAgICAgICAgMTMKLSNkZWZpbmUgQklBU19CSUFTM19QV0RfSUMyNVNQQVJFMV9NQVNLICAgICAgICAgICAweDAwMDBlMDAwCi0jZGVmaW5lIEJJQVNfQklBUzNfUFdEX0lDMjVTUEFSRTFfR0VUKHgpICAgICAgICAgKCgoeCkgJiBCSUFTX0JJQVMzX1BXRF9JQzI1U1BBUkUxX01BU0spID4+IEJJQVNfQklBUzNfUFdEX0lDMjVTUEFSRTFfTFNCKQotI2RlZmluZSBCSUFTX0JJQVMzX1BXRF9JQzI1U1BBUkUxX1NFVCh4KSAgICAgICAgICgoKHgpIDw8IEJJQVNfQklBUzNfUFdEX0lDMjVTUEFSRTFfTFNCKSAmIEJJQVNfQklBUzNfUFdEX0lDMjVTUEFSRTFfTUFTSykKLSNkZWZpbmUgQklBU19CSUFTM19QV0RfSUMyNVNQQVJFMl9NU0IgICAgICAgICAgICAxMgotI2RlZmluZSBCSUFTX0JJQVMzX1BXRF9JQzI1U1BBUkUyX0xTQiAgICAgICAgICAgIDEwCi0jZGVmaW5lIEJJQVNfQklBUzNfUFdEX0lDMjVTUEFSRTJfTUFTSyAgICAgICAgICAgMHgwMDAwMWMwMAotI2RlZmluZSBCSUFTX0JJQVMzX1BXRF9JQzI1U1BBUkUyX0dFVCh4KSAgICAgICAgICgoKHgpICYgQklBU19CSUFTM19QV0RfSUMyNVNQQVJFMl9NQVNLKSA+PiBCSUFTX0JJQVMzX1BXRF9JQzI1U1BBUkUyX0xTQikKLSNkZWZpbmUgQklBU19CSUFTM19QV0RfSUMyNVNQQVJFMl9TRVQoeCkgICAgICAgICAoKCh4KSA8PCBCSUFTX0JJQVMzX1BXRF9JQzI1U1BBUkUyX0xTQikgJiBCSUFTX0JJQVMzX1BXRF9JQzI1U1BBUkUyX01BU0spCi0jZGVmaW5lIEJJQVNfQklBUzNfUFdEX0lSMjVTUEFSRTFfTVNCICAgICAgICAgICAgOQotI2RlZmluZSBCSUFTX0JJQVMzX1BXRF9JUjI1U1BBUkUxX0xTQiAgICAgICAgICAgIDcKLSNkZWZpbmUgQklBU19CSUFTM19QV0RfSVIyNVNQQVJFMV9NQVNLICAgICAgICAgICAweDAwMDAwMzgwCi0jZGVmaW5lIEJJQVNfQklBUzNfUFdEX0lSMjVTUEFSRTFfR0VUKHgpICAgICAgICAgKCgoeCkgJiBCSUFTX0JJQVMzX1BXRF9JUjI1U1BBUkUxX01BU0spID4+IEJJQVNfQklBUzNfUFdEX0lSMjVTUEFSRTFfTFNCKQotI2RlZmluZSBCSUFTX0JJQVMzX1BXRF9JUjI1U1BBUkUxX1NFVCh4KSAgICAgICAgICgoKHgpIDw8IEJJQVNfQklBUzNfUFdEX0lSMjVTUEFSRTFfTFNCKSAmIEJJQVNfQklBUzNfUFdEX0lSMjVTUEFSRTFfTUFTSykKLSNkZWZpbmUgQklBU19CSUFTM19QV0RfSVIyNVNQQVJFMl9NU0IgICAgICAgICAgICA2Ci0jZGVmaW5lIEJJQVNfQklBUzNfUFdEX0lSMjVTUEFSRTJfTFNCICAgICAgICAgICAgNAotI2RlZmluZSBCSUFTX0JJQVMzX1BXRF9JUjI1U1BBUkUyX01BU0sgICAgICAgICAgIDB4MDAwMDAwNzAKLSNkZWZpbmUgQklBU19CSUFTM19QV0RfSVIyNVNQQVJFMl9HRVQoeCkgICAgICAgICAoKCh4KSAmIEJJQVNfQklBUzNfUFdEX0lSMjVTUEFSRTJfTUFTSykgPj4gQklBU19CSUFTM19QV0RfSVIyNVNQQVJFMl9MU0IpCi0jZGVmaW5lIEJJQVNfQklBUzNfUFdEX0lSMjVTUEFSRTJfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgQklBU19CSUFTM19QV0RfSVIyNVNQQVJFMl9MU0IpICYgQklBU19CSUFTM19QV0RfSVIyNVNQQVJFMl9NQVNLKQotI2RlZmluZSBCSUFTX0JJQVMzX1BXRF9JQ0RBQ1JFRzEyUDVfTVNCICAgICAgICAgIDMKLSNkZWZpbmUgQklBU19CSUFTM19QV0RfSUNEQUNSRUcxMlA1X0xTQiAgICAgICAgICAxCi0jZGVmaW5lIEJJQVNfQklBUzNfUFdEX0lDREFDUkVHMTJQNV9NQVNLICAgICAgICAgMHgwMDAwMDAwZQotI2RlZmluZSBCSUFTX0JJQVMzX1BXRF9JQ0RBQ1JFRzEyUDVfR0VUKHgpICAgICAgICgoKHgpICYgQklBU19CSUFTM19QV0RfSUNEQUNSRUcxMlA1X01BU0spID4+IEJJQVNfQklBUzNfUFdEX0lDREFDUkVHMTJQNV9MU0IpCi0jZGVmaW5lIEJJQVNfQklBUzNfUFdEX0lDREFDUkVHMTJQNV9TRVQoeCkgICAgICAgKCgoeCkgPDwgQklBU19CSUFTM19QV0RfSUNEQUNSRUcxMlA1X0xTQikgJiBCSUFTX0JJQVMzX1BXRF9JQ0RBQ1JFRzEyUDVfTUFTSykKLSNkZWZpbmUgQklBU19CSUFTM19TUEFSRV9NU0IgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEJJQVNfQklBUzNfU1BBUkVfTFNCICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBCSUFTX0JJQVMzX1NQQVJFX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgQklBU19CSUFTM19TUEFSRV9HRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIEJJQVNfQklBUzNfU1BBUkVfTUFTSykgPj4gQklBU19CSUFTM19TUEFSRV9MU0IpCi0jZGVmaW5lIEJJQVNfQklBUzNfU1BBUkVfU0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgQklBU19CSUFTM19TUEFSRV9MU0IpICYgQklBU19CSUFTM19TUEFSRV9NQVNLKQotCi0jZGVmaW5lIFRYUENfVFhQQ19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0OAotI2RlZmluZSBUWFBDX1RYUENfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDgKLSNkZWZpbmUgVFhQQ19UWFBDX1NFTElOVFBEX01TQiAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBUWFBDX1RYUENfU0VMSU5UUERfTFNCICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFRYUENfVFhQQ19TRUxJTlRQRF9NQVNLICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBUWFBDX1RYUENfU0VMSU5UUERfR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgVFhQQ19UWFBDX1NFTElOVFBEX01BU0spID4+IFRYUENfVFhQQ19TRUxJTlRQRF9MU0IpCi0jZGVmaW5lIFRYUENfVFhQQ19TRUxJTlRQRF9TRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPDwgVFhQQ19UWFBDX1NFTElOVFBEX0xTQikgJiBUWFBDX1RYUENfU0VMSU5UUERfTUFTSykKLSNkZWZpbmUgVFhQQ19UWFBDX1RFU1RfTVNCICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBUWFBDX1RYUENfVEVTVF9MU0IgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFRYUENfVFhQQ19URVNUX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAotI2RlZmluZSBUWFBDX1RYUENfVEVTVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgVFhQQ19UWFBDX1RFU1RfTUFTSykgPj4gVFhQQ19UWFBDX1RFU1RfTFNCKQotI2RlZmluZSBUWFBDX1RYUENfVEVTVF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFRYUENfVFhQQ19URVNUX0xTQikgJiBUWFBDX1RYUENfVEVTVF9NQVNLKQotI2RlZmluZSBUWFBDX1RYUENfVEVTVEdBSU5fTVNCICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFRYUENfVFhQQ19URVNUR0FJTl9MU0IgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgVFhQQ19UWFBDX1RFU1RHQUlOX01BU0sgICAgICAgICAgICAgICAgICAweDMwMDAwMDAwCi0jZGVmaW5lIFRYUENfVFhQQ19URVNUR0FJTl9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiBUWFBDX1RYUENfVEVTVEdBSU5fTUFTSykgPj4gVFhQQ19UWFBDX1RFU1RHQUlOX0xTQikKLSNkZWZpbmUgVFhQQ19UWFBDX1RFU1RHQUlOX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCBUWFBDX1RYUENfVEVTVEdBSU5fTFNCKSAmIFRYUENfVFhQQ19URVNUR0FJTl9NQVNLKQotI2RlZmluZSBUWFBDX1RYUENfVEVTVERBQ19NU0IgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFRYUENfVFhQQ19URVNUREFDX0xTQiAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgVFhQQ19UWFBDX1RFU1REQUNfTUFTSyAgICAgICAgICAgICAgICAgICAweDBmYzAwMDAwCi0jZGVmaW5lIFRYUENfVFhQQ19URVNUREFDX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBUWFBDX1RYUENfVEVTVERBQ19NQVNLKSA+PiBUWFBDX1RYUENfVEVTVERBQ19MU0IpCi0jZGVmaW5lIFRYUENfVFhQQ19URVNUREFDX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgVFhQQ19UWFBDX1RFU1REQUNfTFNCKSAmIFRYUENfVFhQQ19URVNUREFDX01BU0spCi0jZGVmaW5lIFRYUENfVFhQQ19URVNUUFdEUENfTVNCICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgVFhQQ19UWFBDX1RFU1RQV0RQQ19MU0IgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBUWFBDX1RYUENfVEVTVFBXRFBDX01BU0sgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKLSNkZWZpbmUgVFhQQ19UWFBDX1RFU1RQV0RQQ19HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIFRYUENfVFhQQ19URVNUUFdEUENfTUFTSykgPj4gVFhQQ19UWFBDX1RFU1RQV0RQQ19MU0IpCi0jZGVmaW5lIFRYUENfVFhQQ19URVNUUFdEUENfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgVFhQQ19UWFBDX1RFU1RQV0RQQ19MU0IpICYgVFhQQ19UWFBDX1RFU1RQV0RQQ19NQVNLKQotI2RlZmluZSBUWFBDX1RYUENfQ1VSSEFMRl9NU0IgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFRYUENfVFhQQ19DVVJIQUxGX0xTQiAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgVFhQQ19UWFBDX0NVUkhBTEZfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCi0jZGVmaW5lIFRYUENfVFhQQ19DVVJIQUxGX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBUWFBDX1RYUENfQ1VSSEFMRl9NQVNLKSA+PiBUWFBDX1RYUENfQ1VSSEFMRl9MU0IpCi0jZGVmaW5lIFRYUENfVFhQQ19DVVJIQUxGX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgVFhQQ19UWFBDX0NVUkhBTEZfTFNCKSAmIFRYUENfVFhQQ19DVVJIQUxGX01BU0spCi0jZGVmaW5lIFRYUENfVFhQQ19ORUdPVVRfTVNCICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgVFhQQ19UWFBDX05FR09VVF9MU0IgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBUWFBDX1RYUENfTkVHT1VUX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKLSNkZWZpbmUgVFhQQ19UWFBDX05FR09VVF9HRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIFRYUENfVFhQQ19ORUdPVVRfTUFTSykgPj4gVFhQQ19UWFBDX05FR09VVF9MU0IpCi0jZGVmaW5lIFRYUENfVFhQQ19ORUdPVVRfU0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgVFhQQ19UWFBDX05FR09VVF9MU0IpICYgVFhQQ19UWFBDX05FR09VVF9NQVNLKQotI2RlZmluZSBUWFBDX1RYUENfQ0xLREVMQVlfTVNCICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFRYUENfVFhQQ19DTEtERUxBWV9MU0IgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgVFhQQ19UWFBDX0NMS0RFTEFZX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCi0jZGVmaW5lIFRYUENfVFhQQ19DTEtERUxBWV9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiBUWFBDX1RYUENfQ0xLREVMQVlfTUFTSykgPj4gVFhQQ19UWFBDX0NMS0RFTEFZX0xTQikKLSNkZWZpbmUgVFhQQ19UWFBDX0NMS0RFTEFZX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCBUWFBDX1RYUENfQ0xLREVMQVlfTFNCKSAmIFRYUENfVFhQQ19DTEtERUxBWV9NQVNLKQotI2RlZmluZSBUWFBDX1RYUENfU0VMTU9EUkVGX01TQiAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFRYUENfVFhQQ19TRUxNT0RSRUZfTFNCICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgVFhQQ19UWFBDX1NFTE1PRFJFRl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCi0jZGVmaW5lIFRYUENfVFhQQ19TRUxNT0RSRUZfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBUWFBDX1RYUENfU0VMTU9EUkVGX01BU0spID4+IFRYUENfVFhQQ19TRUxNT0RSRUZfTFNCKQotI2RlZmluZSBUWFBDX1RYUENfU0VMTU9EUkVGX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IFRYUENfVFhQQ19TRUxNT0RSRUZfTFNCKSAmIFRYUENfVFhQQ19TRUxNT0RSRUZfTUFTSykKLSNkZWZpbmUgVFhQQ19UWFBDX1NFTENNT1VUX01TQiAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBUWFBDX1RYUENfU0VMQ01PVVRfTFNCICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFRYUENfVFhQQ19TRUxDTU9VVF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBUWFBDX1RYUENfU0VMQ01PVVRfR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgVFhQQ19UWFBDX1NFTENNT1VUX01BU0spID4+IFRYUENfVFhQQ19TRUxDTU9VVF9MU0IpCi0jZGVmaW5lIFRYUENfVFhQQ19TRUxDTU9VVF9TRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPDwgVFhQQ19UWFBDX1NFTENNT1VUX0xTQikgJiBUWFBDX1RYUENfU0VMQ01PVVRfTUFTSykKLSNkZWZpbmUgVFhQQ19UWFBDX1RTTU9ERV9NU0IgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBUWFBDX1RYUENfVFNNT0RFX0xTQiAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFRYUENfVFhQQ19UU01PREVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwYzAwMAotI2RlZmluZSBUWFBDX1RYUENfVFNNT0RFX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgVFhQQ19UWFBDX1RTTU9ERV9NQVNLKSA+PiBUWFBDX1RYUENfVFNNT0RFX0xTQikKLSNkZWZpbmUgVFhQQ19UWFBDX1RTTU9ERV9TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBUWFBDX1RYUENfVFNNT0RFX0xTQikgJiBUWFBDX1RYUENfVFNNT0RFX01BU0spCi0jZGVmaW5lIFRYUENfVFhQQ19OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgVFhQQ19UWFBDX05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFRYUENfVFhQQ19OX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwM2ZjMAotI2RlZmluZSBUWFBDX1RYUENfTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgVFhQQ19UWFBDX05fTUFTSykgPj4gVFhQQ19UWFBDX05fTFNCKQotI2RlZmluZSBUWFBDX1RYUENfTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFRYUENfVFhQQ19OX0xTQikgJiBUWFBDX1RYUENfTl9NQVNLKQotI2RlZmluZSBUWFBDX1RYUENfT04xU1RTWU5USE9OX01TQiAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgVFhQQ19UWFBDX09OMVNUU1lOVEhPTl9MU0IgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFRYUENfVFhQQ19PTjFTVFNZTlRIT05fTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBUWFBDX1RYUENfT04xU1RTWU5USE9OX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgVFhQQ19UWFBDX09OMVNUU1lOVEhPTl9NQVNLKSA+PiBUWFBDX1RYUENfT04xU1RTWU5USE9OX0xTQikKLSNkZWZpbmUgVFhQQ19UWFBDX09OMVNUU1lOVEhPTl9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBUWFBDX1RYUENfT04xU1RTWU5USE9OX0xTQikgJiBUWFBDX1RYUENfT04xU1RTWU5USE9OX01BU0spCi0jZGVmaW5lIFRYUENfVFhQQ19TRUxJTklUX01TQiAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBUWFBDX1RYUENfU0VMSU5JVF9MU0IgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgVFhQQ19UWFBDX1NFTElOSVRfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4Ci0jZGVmaW5lIFRYUENfVFhQQ19TRUxJTklUX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBUWFBDX1RYUENfU0VMSU5JVF9NQVNLKSA+PiBUWFBDX1RYUENfU0VMSU5JVF9MU0IpCi0jZGVmaW5lIFRYUENfVFhQQ19TRUxJTklUX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgVFhQQ19UWFBDX1NFTElOSVRfTFNCKSAmIFRYUENfVFhQQ19TRUxJTklUX01BU0spCi0jZGVmaW5lIFRYUENfVFhQQ19TRUxDT1VOVF9NU0IgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBUWFBDX1RYUENfU0VMQ09VTlRfTFNCICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgVFhQQ19UWFBDX1NFTENPVU5UX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFRYUENfVFhQQ19TRUxDT1VOVF9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiBUWFBDX1RYUENfU0VMQ09VTlRfTUFTSykgPj4gVFhQQ19UWFBDX1NFTENPVU5UX0xTQikKLSNkZWZpbmUgVFhQQ19UWFBDX1NFTENPVU5UX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCBUWFBDX1RYUENfU0VMQ09VTlRfTFNCKSAmIFRYUENfVFhQQ19TRUxDT1VOVF9NQVNLKQotI2RlZmluZSBUWFBDX1RYUENfQVRCU0VMX01TQiAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgVFhQQ19UWFBDX0FUQlNFTF9MU0IgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFRYUENfVFhQQ19BVEJTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMwotI2RlZmluZSBUWFBDX1RYUENfQVRCU0VMX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgVFhQQ19UWFBDX0FUQlNFTF9NQVNLKSA+PiBUWFBDX1RYUENfQVRCU0VMX0xTQikKLSNkZWZpbmUgVFhQQ19UWFBDX0FUQlNFTF9TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBUWFBDX1RYUENfQVRCU0VMX0xTQikgJiBUWFBDX1RYUENfQVRCU0VMX01BU0spCi0KLSNkZWZpbmUgVFhQQ19NSVNDX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDRjCi0jZGVmaW5lIFRYUENfTUlTQ19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0YwotI2RlZmluZSBUWFBDX01JU0NfRkxJUEJNT0RFX01TQiAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFRYUENfTUlTQ19GTElQQk1PREVfTFNCICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgVFhQQ19NSVNDX0ZMSVBCTU9ERV9NQVNLICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIFRYUENfTUlTQ19GTElQQk1PREVfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBUWFBDX01JU0NfRkxJUEJNT0RFX01BU0spID4+IFRYUENfTUlTQ19GTElQQk1PREVfTFNCKQotI2RlZmluZSBUWFBDX01JU0NfRkxJUEJNT0RFX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IFRYUENfTUlTQ19GTElQQk1PREVfTFNCKSAmIFRYUENfTUlTQ19GTElQQk1PREVfTUFTSykKLSNkZWZpbmUgVFhQQ19NSVNDX0xFVkVMX01TQiAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBUWFBDX01JU0NfTEVWRUxfTFNCICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFRYUENfTUlTQ19MRVZFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHg2MDAwMDAwMAotI2RlZmluZSBUWFBDX01JU0NfTEVWRUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgVFhQQ19NSVNDX0xFVkVMX01BU0spID4+IFRYUENfTUlTQ19MRVZFTF9MU0IpCi0jZGVmaW5lIFRYUENfTUlTQ19MRVZFTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgVFhQQ19NSVNDX0xFVkVMX0xTQikgJiBUWFBDX01JU0NfTEVWRUxfTUFTSykKLSNkZWZpbmUgVFhQQ19NSVNDX0xET19URVNUX01PREVfTVNCICAgICAgICAgICAgICAyOAotI2RlZmluZSBUWFBDX01JU0NfTERPX1RFU1RfTU9ERV9MU0IgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFRYUENfTUlTQ19MRE9fVEVTVF9NT0RFX01BU0sgICAgICAgICAgICAgMHgxMDAwMDAwMAotI2RlZmluZSBUWFBDX01JU0NfTERPX1RFU1RfTU9ERV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgVFhQQ19NSVNDX0xET19URVNUX01PREVfTUFTSykgPj4gVFhQQ19NSVNDX0xET19URVNUX01PREVfTFNCKQotI2RlZmluZSBUWFBDX01JU0NfTERPX1RFU1RfTU9ERV9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFRYUENfTUlTQ19MRE9fVEVTVF9NT0RFX0xTQikgJiBUWFBDX01JU0NfTERPX1RFU1RfTU9ERV9NQVNLKQotI2RlZmluZSBUWFBDX01JU0NfTk9UQ1hPREVUX01TQiAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFRYUENfTUlTQ19OT1RDWE9ERVRfTFNCICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgVFhQQ19NSVNDX05PVENYT0RFVF9NQVNLICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCi0jZGVmaW5lIFRYUENfTUlTQ19OT1RDWE9ERVRfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBUWFBDX01JU0NfTk9UQ1hPREVUX01BU0spID4+IFRYUENfTUlTQ19OT1RDWE9ERVRfTFNCKQotI2RlZmluZSBUWFBDX01JU0NfTk9UQ1hPREVUX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IFRYUENfTUlTQ19OT1RDWE9ERVRfTFNCKSAmIFRYUENfTUlTQ19OT1RDWE9ERVRfTUFTSykKLSNkZWZpbmUgVFhQQ19NSVNDX1BXRENMS0lORF9NU0IgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBUWFBDX01JU0NfUFdEQ0xLSU5EX0xTQiAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFRYUENfTUlTQ19QV0RDTEtJTkRfTUFTSyAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAotI2RlZmluZSBUWFBDX01JU0NfUFdEQ0xLSU5EX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgVFhQQ19NSVNDX1BXRENMS0lORF9NQVNLKSA+PiBUWFBDX01JU0NfUFdEQ0xLSU5EX0xTQikKLSNkZWZpbmUgVFhQQ19NSVNDX1BXRENMS0lORF9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBUWFBDX01JU0NfUFdEQ0xLSU5EX0xTQikgJiBUWFBDX01JU0NfUFdEQ0xLSU5EX01BU0spCi0jZGVmaW5lIFRYUENfTUlTQ19QV0RYSU5QQURfTVNCICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgVFhQQ19NSVNDX1BXRFhJTlBBRF9MU0IgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBUWFBDX01JU0NfUFdEWElOUEFEX01BU0sgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKLSNkZWZpbmUgVFhQQ19NSVNDX1BXRFhJTlBBRF9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIFRYUENfTUlTQ19QV0RYSU5QQURfTUFTSykgPj4gVFhQQ19NSVNDX1BXRFhJTlBBRF9MU0IpCi0jZGVmaW5lIFRYUENfTUlTQ19QV0RYSU5QQURfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgVFhQQ19NSVNDX1BXRFhJTlBBRF9MU0IpICYgVFhQQ19NSVNDX1BXRFhJTlBBRF9NQVNLKQotI2RlZmluZSBUWFBDX01JU0NfTE9DQUxCSUFTX01TQiAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFRYUENfTUlTQ19MT0NBTEJJQVNfTFNCICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgVFhQQ19NSVNDX0xPQ0FMQklBU19NQVNLICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCi0jZGVmaW5lIFRYUENfTUlTQ19MT0NBTEJJQVNfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBUWFBDX01JU0NfTE9DQUxCSUFTX01BU0spID4+IFRYUENfTUlTQ19MT0NBTEJJQVNfTFNCKQotI2RlZmluZSBUWFBDX01JU0NfTE9DQUxCSUFTX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IFRYUENfTUlTQ19MT0NBTEJJQVNfTFNCKSAmIFRYUENfTUlTQ19MT0NBTEJJQVNfTUFTSykKLSNkZWZpbmUgVFhQQ19NSVNDX0xPQ0FMQklBUzJYX01TQiAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBUWFBDX01JU0NfTE9DQUxCSUFTMlhfTFNCICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFRYUENfTUlTQ19MT0NBTEJJQVMyWF9NQVNLICAgICAgICAgICAgICAgMHgwMDgwMDAwMAotI2RlZmluZSBUWFBDX01JU0NfTE9DQUxCSUFTMlhfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgVFhQQ19NSVNDX0xPQ0FMQklBUzJYX01BU0spID4+IFRYUENfTUlTQ19MT0NBTEJJQVMyWF9MU0IpCi0jZGVmaW5lIFRYUENfTUlTQ19MT0NBTEJJQVMyWF9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgVFhQQ19NSVNDX0xPQ0FMQklBUzJYX0xTQikgJiBUWFBDX01JU0NfTE9DQUxCSUFTMlhfTUFTSykKLSNkZWZpbmUgVFhQQ19NSVNDX1NFTFRTUF9NU0IgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBUWFBDX01JU0NfU0VMVFNQX0xTQiAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFRYUENfTUlTQ19TRUxUU1BfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAotI2RlZmluZSBUWFBDX01JU0NfU0VMVFNQX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgVFhQQ19NSVNDX1NFTFRTUF9NQVNLKSA+PiBUWFBDX01JU0NfU0VMVFNQX0xTQikKLSNkZWZpbmUgVFhQQ19NSVNDX1NFTFRTUF9TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBUWFBDX01JU0NfU0VMVFNQX0xTQikgJiBUWFBDX01JU0NfU0VMVFNQX01BU0spCi0jZGVmaW5lIFRYUENfTUlTQ19TRUxUU05fTVNCICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgVFhQQ19NSVNDX1NFTFRTTl9MU0IgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBUWFBDX01JU0NfU0VMVFNOX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKLSNkZWZpbmUgVFhQQ19NSVNDX1NFTFRTTl9HRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIFRYUENfTUlTQ19TRUxUU05fTUFTSykgPj4gVFhQQ19NSVNDX1NFTFRTTl9MU0IpCi0jZGVmaW5lIFRYUENfTUlTQ19TRUxUU05fU0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgVFhQQ19NSVNDX1NFTFRTTl9MU0IpICYgVFhQQ19NSVNDX1NFTFRTTl9NQVNLKQotI2RlZmluZSBUWFBDX01JU0NfU1BBUkVfQV9NU0IgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFRYUENfTUlTQ19TUEFSRV9BX0xTQiAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgVFhQQ19NSVNDX1NQQVJFX0FfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMWMwMDAwCi0jZGVmaW5lIFRYUENfTUlTQ19TUEFSRV9BX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBUWFBDX01JU0NfU1BBUkVfQV9NQVNLKSA+PiBUWFBDX01JU0NfU1BBUkVfQV9MU0IpCi0jZGVmaW5lIFRYUENfTUlTQ19TUEFSRV9BX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgVFhQQ19NSVNDX1NQQVJFX0FfTFNCKSAmIFRYUENfTUlTQ19TUEFSRV9BX01BU0spCi0jZGVmaW5lIFRYUENfTUlTQ19ERUNPVVRfTVNCICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgVFhQQ19NSVNDX0RFQ09VVF9MU0IgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFRYUENfTUlTQ19ERUNPVVRfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAzZmYwMAotI2RlZmluZSBUWFBDX01JU0NfREVDT1VUX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgVFhQQ19NSVNDX0RFQ09VVF9NQVNLKSA+PiBUWFBDX01JU0NfREVDT1VUX0xTQikKLSNkZWZpbmUgVFhQQ19NSVNDX0RFQ09VVF9TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBUWFBDX01JU0NfREVDT1VUX0xTQikgJiBUWFBDX01JU0NfREVDT1VUX01BU0spCi0jZGVmaW5lIFRYUENfTUlTQ19YVEFMRElWX01TQiAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBUWFBDX01JU0NfWFRBTERJVl9MU0IgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgVFhQQ19NSVNDX1hUQUxESVZfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDAwMGMwCi0jZGVmaW5lIFRYUENfTUlTQ19YVEFMRElWX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBUWFBDX01JU0NfWFRBTERJVl9NQVNLKSA+PiBUWFBDX01JU0NfWFRBTERJVl9MU0IpCi0jZGVmaW5lIFRYUENfTUlTQ19YVEFMRElWX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgVFhQQ19NSVNDX1hUQUxESVZfTFNCKSAmIFRYUENfTUlTQ19YVEFMRElWX01BU0spCi0jZGVmaW5lIFRYUENfTUlTQ19TUEFSRV9NU0IgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBUWFBDX01JU0NfU1BBUkVfTFNCICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgVFhQQ19NSVNDX1NQQVJFX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNmCi0jZGVmaW5lIFRYUENfTUlTQ19TUEFSRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBUWFBDX01JU0NfU1BBUkVfTUFTSykgPj4gVFhQQ19NSVNDX1NQQVJFX0xTQikKLSNkZWZpbmUgVFhQQ19NSVNDX1NQQVJFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBUWFBDX01JU0NfU1BBUkVfTFNCKSAmIFRYUENfTUlTQ19TUEFSRV9NQVNLKQotCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIxX0FERFJFU1MgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MAotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9PRkZTRVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTAKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjFfU1BBUkVfTVNCICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9TUEFSRV9MU0IgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFJYVFhCQl9SWFRYQkIxX1NQQVJFX01BU0sgICAgICAgICAgICAgICAgMHhmZmY4MDAwMAotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9TUEFSRV9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgUlhUWEJCX1JYVFhCQjFfU1BBUkVfTUFTSykgPj4gUlhUWEJCX1JYVFhCQjFfU1BBUkVfTFNCKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9TUEFSRV9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFJYVFhCQl9SWFRYQkIxX1NQQVJFX0xTQikgJiBSWFRYQkJfUlhUWEJCMV9TUEFSRV9NQVNLKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9GTk9UQ0hfTVNCICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFJYVFhCQl9SWFRYQkIxX0ZOT1RDSF9MU0IgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjFfRk5PVENIX01BU0sgICAgICAgICAgICAgICAweDAwMDYwMDAwCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIxX0ZOT1RDSF9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBSWFRYQkJfUlhUWEJCMV9GTk9UQ0hfTUFTSykgPj4gUlhUWEJCX1JYVFhCQjFfRk5PVENIX0xTQikKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjFfRk5PVENIX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBSWFRYQkJfUlhUWEJCMV9GTk9UQ0hfTFNCKSAmIFJYVFhCQl9SWFRYQkIxX0ZOT1RDSF9NQVNLKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9TRUxfQVRCX01TQiAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFJYVFhCQl9SWFRYQkIxX1NFTF9BVEJfTFNCICAgICAgICAgICAgICAgOQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9TRUxfQVRCX01BU0sgICAgICAgICAgICAgIDB4MDAwMWZlMDAKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjFfU0VMX0FUQl9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFJYVFhCQl9SWFRYQkIxX1NFTF9BVEJfTUFTSykgPj4gUlhUWEJCX1JYVFhCQjFfU0VMX0FUQl9MU0IpCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIxX1NFTF9BVEJfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgUlhUWEJCX1JYVFhCQjFfU0VMX0FUQl9MU0IpICYgUlhUWEJCX1JYVFhCQjFfU0VMX0FUQl9NQVNLKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9QRERBQ0lOVEVSRkFDRV9NU0IgICAgICAgIDgKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjFfUEREQUNJTlRFUkZBQ0VfTFNCICAgICAgICA4Ci0jZGVmaW5lIFJYVFhCQl9SWFRYQkIxX1BEREFDSU5URVJGQUNFX01BU0sgICAgICAgMHgwMDAwMDEwMAotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9QRERBQ0lOVEVSRkFDRV9HRVQoeCkgICAgICgoKHgpICYgUlhUWEJCX1JYVFhCQjFfUEREQUNJTlRFUkZBQ0VfTUFTSykgPj4gUlhUWEJCX1JYVFhCQjFfUEREQUNJTlRFUkZBQ0VfTFNCKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9QRERBQ0lOVEVSRkFDRV9TRVQoeCkgICAgICgoKHgpIDw8IFJYVFhCQl9SWFRYQkIxX1BEREFDSU5URVJGQUNFX0xTQikgJiBSWFRYQkJfUlhUWEJCMV9QRERBQ0lOVEVSRkFDRV9NQVNLKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9QRFYySV9NU0IgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjFfUERWMklfTFNCICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFJYVFhCQl9SWFRYQkIxX1BEVjJJX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9QRFYySV9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgUlhUWEJCX1JYVFhCQjFfUERWMklfTUFTSykgPj4gUlhUWEJCX1JYVFhCQjFfUERWMklfTFNCKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9QRFYySV9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFJYVFhCQl9SWFRYQkIxX1BEVjJJX0xTQikgJiBSWFRYQkJfUlhUWEJCMV9QRFYySV9NQVNLKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9QREkyVl9NU0IgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjFfUERJMlZfTFNCICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFJYVFhCQl9SWFRYQkIxX1BESTJWX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9QREkyVl9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgUlhUWEJCX1JYVFhCQjFfUERJMlZfTUFTSykgPj4gUlhUWEJCX1JYVFhCQjFfUERJMlZfTFNCKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9QREkyVl9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFJYVFhCQl9SWFRYQkIxX1BESTJWX0xTQikgJiBSWFRYQkJfUlhUWEJCMV9QREkyVl9NQVNLKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9QRFJYVFhCQl9NU0IgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjFfUERSWFRYQkJfTFNCICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFJYVFhCQl9SWFRYQkIxX1BEUlhUWEJCX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9QRFJYVFhCQl9HRVQoeCkgICAgICAgICAgICgoKHgpICYgUlhUWEJCX1JYVFhCQjFfUERSWFRYQkJfTUFTSykgPj4gUlhUWEJCX1JYVFhCQjFfUERSWFRYQkJfTFNCKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9QRFJYVFhCQl9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFJYVFhCQl9SWFRYQkIxX1BEUlhUWEJCX0xTQikgJiBSWFRYQkJfUlhUWEJCMV9QRFJYVFhCQl9NQVNLKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9QRE9GRlNFVExPUV9NU0IgICAgICAgICAgIDQKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjFfUERPRkZTRVRMT1FfTFNCICAgICAgICAgICA0Ci0jZGVmaW5lIFJYVFhCQl9SWFRYQkIxX1BET0ZGU0VUTE9RX01BU0sgICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9QRE9GRlNFVExPUV9HRVQoeCkgICAgICAgICgoKHgpICYgUlhUWEJCX1JYVFhCQjFfUERPRkZTRVRMT1FfTUFTSykgPj4gUlhUWEJCX1JYVFhCQjFfUERPRkZTRVRMT1FfTFNCKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9QRE9GRlNFVExPUV9TRVQoeCkgICAgICAgICgoKHgpIDw8IFJYVFhCQl9SWFRYQkIxX1BET0ZGU0VUTE9RX0xTQikgJiBSWFRYQkJfUlhUWEJCMV9QRE9GRlNFVExPUV9NQVNLKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9QRE9GRlNFVEhJUV9NU0IgICAgICAgICAgIDMKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjFfUERPRkZTRVRISVFfTFNCICAgICAgICAgICAzCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIxX1BET0ZGU0VUSElRX01BU0sgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9QRE9GRlNFVEhJUV9HRVQoeCkgICAgICAgICgoKHgpICYgUlhUWEJCX1JYVFhCQjFfUERPRkZTRVRISVFfTUFTSykgPj4gUlhUWEJCX1JYVFhCQjFfUERPRkZTRVRISVFfTFNCKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9QRE9GRlNFVEhJUV9TRVQoeCkgICAgICAgICgoKHgpIDw8IFJYVFhCQl9SWFRYQkIxX1BET0ZGU0VUSElRX0xTQikgJiBSWFRYQkJfUlhUWEJCMV9QRE9GRlNFVEhJUV9NQVNLKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9QRE9GRlNFVEkyVl9NU0IgICAgICAgICAgIDIKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjFfUERPRkZTRVRJMlZfTFNCICAgICAgICAgICAyCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIxX1BET0ZGU0VUSTJWX01BU0sgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9QRE9GRlNFVEkyVl9HRVQoeCkgICAgICAgICgoKHgpICYgUlhUWEJCX1JYVFhCQjFfUERPRkZTRVRJMlZfTUFTSykgPj4gUlhUWEJCX1JYVFhCQjFfUERPRkZTRVRJMlZfTFNCKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9QRE9GRlNFVEkyVl9TRVQoeCkgICAgICAgICgoKHgpIDw8IFJYVFhCQl9SWFRYQkIxX1BET0ZGU0VUSTJWX0xTQikgJiBSWFRYQkJfUlhUWEJCMV9QRE9GRlNFVEkyVl9NQVNLKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9QRExPUV9NU0IgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjFfUERMT1FfTFNCICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIxX1BETE9RX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9QRExPUV9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgUlhUWEJCX1JYVFhCQjFfUERMT1FfTUFTSykgPj4gUlhUWEJCX1JYVFhCQjFfUERMT1FfTFNCKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9QRExPUV9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFJYVFhCQl9SWFRYQkIxX1BETE9RX0xTQikgJiBSWFRYQkJfUlhUWEJCMV9QRExPUV9NQVNLKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9QREhJUV9NU0IgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjFfUERISVFfTFNCICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIxX1BESElRX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9QREhJUV9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgUlhUWEJCX1JYVFhCQjFfUERISVFfTUFTSykgPj4gUlhUWEJCX1JYVFhCQjFfUERISVFfTFNCKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMV9QREhJUV9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFJYVFhCQl9SWFRYQkIxX1BESElRX0xTQikgJiBSWFRYQkJfUlhUWEJCMV9QREhJUV9NQVNLKQotCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX0FERFJFU1MgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1NAotI2RlZmluZSBSWFRYQkJfUlhUWEJCMl9PRkZTRVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTQKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjJfSUJOXzM3UDVfT1NISV9DVFJMX01TQiAgICAzMQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMl9JQk5fMzdQNV9PU0hJX0NUUkxfTFNCICAgIDI5Ci0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX0lCTl8zN1A1X09TSElfQ1RSTF9NQVNLICAgMHhlMDAwMDAwMAotI2RlZmluZSBSWFRYQkJfUlhUWEJCMl9JQk5fMzdQNV9PU0hJX0NUUkxfR0VUKHgpICgoKHgpICYgUlhUWEJCX1JYVFhCQjJfSUJOXzM3UDVfT1NISV9DVFJMX01BU0spID4+IFJYVFhCQl9SWFRYQkIyX0lCTl8zN1A1X09TSElfQ1RSTF9MU0IpCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX0lCTl8zN1A1X09TSElfQ1RSTF9TRVQoeCkgKCgoeCkgPDwgUlhUWEJCX1JYVFhCQjJfSUJOXzM3UDVfT1NISV9DVFJMX0xTQikgJiBSWFRYQkJfUlhUWEJCMl9JQk5fMzdQNV9PU0hJX0NUUkxfTUFTSykKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjJfSUJOXzM3UDVfT1NMT19DVFJMX01TQiAgICAyOAotI2RlZmluZSBSWFRYQkJfUlhUWEJCMl9JQk5fMzdQNV9PU0xPX0NUUkxfTFNCICAgIDI2Ci0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX0lCTl8zN1A1X09TTE9fQ1RSTF9NQVNLICAgMHgxYzAwMDAwMAotI2RlZmluZSBSWFRYQkJfUlhUWEJCMl9JQk5fMzdQNV9PU0xPX0NUUkxfR0VUKHgpICgoKHgpICYgUlhUWEJCX1JYVFhCQjJfSUJOXzM3UDVfT1NMT19DVFJMX01BU0spID4+IFJYVFhCQl9SWFRYQkIyX0lCTl8zN1A1X09TTE9fQ1RSTF9MU0IpCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX0lCTl8zN1A1X09TTE9fQ1RSTF9TRVQoeCkgKCgoeCkgPDwgUlhUWEJCX1JYVFhCQjJfSUJOXzM3UDVfT1NMT19DVFJMX0xTQikgJiBSWFRYQkJfUlhUWEJCMl9JQk5fMzdQNV9PU0xPX0NUUkxfTUFTSykKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjJfSUJOXzM3UDVfT1NJMlZfQ1RSTF9NU0IgICAyNQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMl9JQk5fMzdQNV9PU0kyVl9DVFJMX0xTQiAgIDIzCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX0lCTl8zN1A1X09TSTJWX0NUUkxfTUFTSyAgMHgwMzgwMDAwMAotI2RlZmluZSBSWFRYQkJfUlhUWEJCMl9JQk5fMzdQNV9PU0kyVl9DVFJMX0dFVCh4KSAoKCh4KSAmIFJYVFhCQl9SWFRYQkIyX0lCTl8zN1A1X09TSTJWX0NUUkxfTUFTSykgPj4gUlhUWEJCX1JYVFhCQjJfSUJOXzM3UDVfT1NJMlZfQ1RSTF9MU0IpCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX0lCTl8zN1A1X09TSTJWX0NUUkxfU0VUKHgpICgoKHgpIDw8IFJYVFhCQl9SWFRYQkIyX0lCTl8zN1A1X09TSTJWX0NUUkxfTFNCKSAmIFJYVFhCQl9SWFRYQkIyX0lCTl8zN1A1X09TSTJWX0NUUkxfTUFTSykKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjJfU1BBUkVfTVNCICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBSWFRYQkJfUlhUWEJCMl9TUEFSRV9MU0IgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX1NQQVJFX01BU0sgICAgICAgICAgICAgICAgMHgwMDYwMDAwMAotI2RlZmluZSBSWFRYQkJfUlhUWEJCMl9TUEFSRV9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgUlhUWEJCX1JYVFhCQjJfU1BBUkVfTUFTSykgPj4gUlhUWEJCX1JYVFhCQjJfU1BBUkVfTFNCKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMl9TUEFSRV9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFJYVFhCQl9SWFRYQkIyX1NQQVJFX0xTQikgJiBSWFRYQkJfUlhUWEJCMl9TUEFSRV9NQVNLKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMl9TSE9SVEJVRkZFUl9NU0IgICAgICAgICAgIDIwCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX1NIT1JUQlVGRkVSX0xTQiAgICAgICAgICAgMjAKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjJfU0hPUlRCVUZGRVJfTUFTSyAgICAgICAgICAweDAwMTAwMDAwCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX1NIT1JUQlVGRkVSX0dFVCh4KSAgICAgICAgKCgoeCkgJiBSWFRYQkJfUlhUWEJCMl9TSE9SVEJVRkZFUl9NQVNLKSA+PiBSWFRYQkJfUlhUWEJCMl9TSE9SVEJVRkZFUl9MU0IpCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX1NIT1JUQlVGRkVSX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgUlhUWEJCX1JYVFhCQjJfU0hPUlRCVUZGRVJfTFNCKSAmIFJYVFhCQl9SWFRYQkIyX1NIT1JUQlVGRkVSX01BU0spCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX1NFTEJVRkZFUl9NU0IgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjJfU0VMQlVGRkVSX0xTQiAgICAgICAgICAgICAxOQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMl9TRUxCVUZGRVJfTUFTSyAgICAgICAgICAgIDB4MDAwODAwMDAKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjJfU0VMQlVGRkVSX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIFJYVFhCQl9SWFRYQkIyX1NFTEJVRkZFUl9NQVNLKSA+PiBSWFRYQkJfUlhUWEJCMl9TRUxCVUZGRVJfTFNCKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMl9TRUxCVUZGRVJfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IFJYVFhCQl9SWFRYQkIyX1NFTEJVRkZFUl9MU0IpICYgUlhUWEJCX1JYVFhCQjJfU0VMQlVGRkVSX01BU0spCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX1NFTF9EQUNfVEVTVF9NU0IgICAgICAgICAgMTgKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjJfU0VMX0RBQ19URVNUX0xTQiAgICAgICAgICAxOAotI2RlZmluZSBSWFRYQkJfUlhUWEJCMl9TRUxfREFDX1RFU1RfTUFTSyAgICAgICAgIDB4MDAwNDAwMDAKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjJfU0VMX0RBQ19URVNUX0dFVCh4KSAgICAgICAoKCh4KSAmIFJYVFhCQl9SWFRYQkIyX1NFTF9EQUNfVEVTVF9NQVNLKSA+PiBSWFRYQkJfUlhUWEJCMl9TRUxfREFDX1RFU1RfTFNCKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMl9TRUxfREFDX1RFU1RfU0VUKHgpICAgICAgICgoKHgpIDw8IFJYVFhCQl9SWFRYQkIyX1NFTF9EQUNfVEVTVF9MU0IpICYgUlhUWEJCX1JYVFhCQjJfU0VMX0RBQ19URVNUX01BU0spCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX1NFTF9MT1FfVEVTVF9NU0IgICAgICAgICAgMTcKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjJfU0VMX0xPUV9URVNUX0xTQiAgICAgICAgICAxNwotI2RlZmluZSBSWFRYQkJfUlhUWEJCMl9TRUxfTE9RX1RFU1RfTUFTSyAgICAgICAgIDB4MDAwMjAwMDAKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjJfU0VMX0xPUV9URVNUX0dFVCh4KSAgICAgICAoKCh4KSAmIFJYVFhCQl9SWFRYQkIyX1NFTF9MT1FfVEVTVF9NQVNLKSA+PiBSWFRYQkJfUlhUWEJCMl9TRUxfTE9RX1RFU1RfTFNCKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMl9TRUxfTE9RX1RFU1RfU0VUKHgpICAgICAgICgoKHgpIDw8IFJYVFhCQl9SWFRYQkIyX1NFTF9MT1FfVEVTVF9MU0IpICYgUlhUWEJCX1JYVFhCQjJfU0VMX0xPUV9URVNUX01BU0spCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX1NFTF9ISVFfVEVTVF9NU0IgICAgICAgICAgMTYKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjJfU0VMX0hJUV9URVNUX0xTQiAgICAgICAgICAxNgotI2RlZmluZSBSWFRYQkJfUlhUWEJCMl9TRUxfSElRX1RFU1RfTUFTSyAgICAgICAgIDB4MDAwMTAwMDAKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjJfU0VMX0hJUV9URVNUX0dFVCh4KSAgICAgICAoKCh4KSAmIFJYVFhCQl9SWFRYQkIyX1NFTF9ISVFfVEVTVF9NQVNLKSA+PiBSWFRYQkJfUlhUWEJCMl9TRUxfSElRX1RFU1RfTFNCKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMl9TRUxfSElRX1RFU1RfU0VUKHgpICAgICAgICgoKHgpIDw8IFJYVFhCQl9SWFRYQkIyX1NFTF9ISVFfVEVTVF9MU0IpICYgUlhUWEJCX1JYVFhCQjJfU0VMX0hJUV9URVNUX01BU0spCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX1NFTF9JMlZfVEVTVF9NU0IgICAgICAgICAgMTUKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjJfU0VMX0kyVl9URVNUX0xTQiAgICAgICAgICAxNQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMl9TRUxfSTJWX1RFU1RfTUFTSyAgICAgICAgIDB4MDAwMDgwMDAKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjJfU0VMX0kyVl9URVNUX0dFVCh4KSAgICAgICAoKCh4KSAmIFJYVFhCQl9SWFRYQkIyX1NFTF9JMlZfVEVTVF9NQVNLKSA+PiBSWFRYQkJfUlhUWEJCMl9TRUxfSTJWX1RFU1RfTFNCKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMl9TRUxfSTJWX1RFU1RfU0VUKHgpICAgICAgICgoKHgpIDw8IFJYVFhCQl9SWFRYQkIyX1NFTF9JMlZfVEVTVF9MU0IpICYgUlhUWEJCX1JYVFhCQjJfU0VMX0kyVl9URVNUX01BU0spCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX0NNU0VMX01TQiAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjJfQ01TRUxfTFNCICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBSWFRYQkJfUlhUWEJCMl9DTVNFTF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjJfQ01TRUxfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIFJYVFhCQl9SWFRYQkIyX0NNU0VMX01BU0spID4+IFJYVFhCQl9SWFRYQkIyX0NNU0VMX0xTQikKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjJfQ01TRUxfU0VUKHgpICAgICAgICAgICAgICAoKCh4KSA8PCBSWFRYQkJfUlhUWEJCMl9DTVNFTF9MU0IpICYgUlhUWEJCX1JYVFhCQjJfQ01TRUxfTUFTSykKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjJfRklMVEVSRkNfTVNCICAgICAgICAgICAgICAxMgotI2RlZmluZSBSWFRYQkJfUlhUWEJCMl9GSUxURVJGQ19MU0IgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjJfRklMVEVSRkNfTUFTSyAgICAgICAgICAgICAweDAwMDAxZjAwCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX0ZJTFRFUkZDX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBSWFRYQkJfUlhUWEJCMl9GSUxURVJGQ19NQVNLKSA+PiBSWFRYQkJfUlhUWEJCMl9GSUxURVJGQ19MU0IpCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX0ZJTFRFUkZDX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgUlhUWEJCX1JYVFhCQjJfRklMVEVSRkNfTFNCKSAmIFJYVFhCQl9SWFRYQkIyX0ZJTFRFUkZDX01BU0spCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX0xPQ0FMRklMVEVSVFVOSU5HX01TQiAgICAgNwotI2RlZmluZSBSWFRYQkJfUlhUWEJCMl9MT0NBTEZJTFRFUlRVTklOR19MU0IgICAgIDcKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjJfTE9DQUxGSUxURVJUVU5JTkdfTUFTSyAgICAweDAwMDAwMDgwCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX0xPQ0FMRklMVEVSVFVOSU5HX0dFVCh4KSAgKCgoeCkgJiBSWFRYQkJfUlhUWEJCMl9MT0NBTEZJTFRFUlRVTklOR19NQVNLKSA+PiBSWFRYQkJfUlhUWEJCMl9MT0NBTEZJTFRFUlRVTklOR19MU0IpCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX0xPQ0FMRklMVEVSVFVOSU5HX1NFVCh4KSAgKCgoeCkgPDwgUlhUWEJCX1JYVFhCQjJfTE9DQUxGSUxURVJUVU5JTkdfTFNCKSAmIFJYVFhCQl9SWFRYQkIyX0xPQ0FMRklMVEVSVFVOSU5HX01BU0spCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX0ZJTFRFUkRPVUJMRUJXX01TQiAgICAgICAgNgotI2RlZmluZSBSWFRYQkJfUlhUWEJCMl9GSUxURVJET1VCTEVCV19MU0IgICAgICAgIDYKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjJfRklMVEVSRE9VQkxFQldfTUFTSyAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX0ZJTFRFUkRPVUJMRUJXX0dFVCh4KSAgICAgKCgoeCkgJiBSWFRYQkJfUlhUWEJCMl9GSUxURVJET1VCTEVCV19NQVNLKSA+PiBSWFRYQkJfUlhUWEJCMl9GSUxURVJET1VCTEVCV19MU0IpCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX0ZJTFRFUkRPVUJMRUJXX1NFVCh4KSAgICAgKCgoeCkgPDwgUlhUWEJCX1JYVFhCQjJfRklMVEVSRE9VQkxFQldfTFNCKSAmIFJYVFhCQl9SWFRYQkIyX0ZJTFRFUkRPVUJMRUJXX01BU0spCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX1BBVEgySElRX0VOX01TQiAgICAgICAgICAgNQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMl9QQVRIMkhJUV9FTl9MU0IgICAgICAgICAgIDUKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjJfUEFUSDJISVFfRU5fTUFTSyAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX1BBVEgySElRX0VOX0dFVCh4KSAgICAgICAgKCgoeCkgJiBSWFRYQkJfUlhUWEJCMl9QQVRIMkhJUV9FTl9NQVNLKSA+PiBSWFRYQkJfUlhUWEJCMl9QQVRIMkhJUV9FTl9MU0IpCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX1BBVEgySElRX0VOX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgUlhUWEJCX1JYVFhCQjJfUEFUSDJISVFfRU5fTFNCKSAmIFJYVFhCQl9SWFRYQkIyX1BBVEgySElRX0VOX01BU0spCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX1BBVEgxSElRX0VOX01TQiAgICAgICAgICAgNAotI2RlZmluZSBSWFRYQkJfUlhUWEJCMl9QQVRIMUhJUV9FTl9MU0IgICAgICAgICAgIDQKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjJfUEFUSDFISVFfRU5fTUFTSyAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX1BBVEgxSElRX0VOX0dFVCh4KSAgICAgICAgKCgoeCkgJiBSWFRYQkJfUlhUWEJCMl9QQVRIMUhJUV9FTl9NQVNLKSA+PiBSWFRYQkJfUlhUWEJCMl9QQVRIMUhJUV9FTl9MU0IpCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX1BBVEgxSElRX0VOX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgUlhUWEJCX1JYVFhCQjJfUEFUSDFISVFfRU5fTFNCKSAmIFJYVFhCQl9SWFRYQkIyX1BBVEgxSElRX0VOX01BU0spCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX1BBVEgzTE9RX0VOX01TQiAgICAgICAgICAgMwotI2RlZmluZSBSWFRYQkJfUlhUWEJCMl9QQVRIM0xPUV9FTl9MU0IgICAgICAgICAgIDMKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjJfUEFUSDNMT1FfRU5fTUFTSyAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX1BBVEgzTE9RX0VOX0dFVCh4KSAgICAgICAgKCgoeCkgJiBSWFRYQkJfUlhUWEJCMl9QQVRIM0xPUV9FTl9NQVNLKSA+PiBSWFRYQkJfUlhUWEJCMl9QQVRIM0xPUV9FTl9MU0IpCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX1BBVEgzTE9RX0VOX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgUlhUWEJCX1JYVFhCQjJfUEFUSDNMT1FfRU5fTFNCKSAmIFJYVFhCQl9SWFRYQkIyX1BBVEgzTE9RX0VOX01BU0spCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX1BBVEgyTE9RX0VOX01TQiAgICAgICAgICAgMgotI2RlZmluZSBSWFRYQkJfUlhUWEJCMl9QQVRIMkxPUV9FTl9MU0IgICAgICAgICAgIDIKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjJfUEFUSDJMT1FfRU5fTUFTSyAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX1BBVEgyTE9RX0VOX0dFVCh4KSAgICAgICAgKCgoeCkgJiBSWFRYQkJfUlhUWEJCMl9QQVRIMkxPUV9FTl9NQVNLKSA+PiBSWFRYQkJfUlhUWEJCMl9QQVRIMkxPUV9FTl9MU0IpCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX1BBVEgyTE9RX0VOX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgUlhUWEJCX1JYVFhCQjJfUEFUSDJMT1FfRU5fTFNCKSAmIFJYVFhCQl9SWFRYQkIyX1BBVEgyTE9RX0VOX01BU0spCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX1BBVEgxTE9RX0VOX01TQiAgICAgICAgICAgMQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMl9QQVRIMUxPUV9FTl9MU0IgICAgICAgICAgIDEKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjJfUEFUSDFMT1FfRU5fTUFTSyAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX1BBVEgxTE9RX0VOX0dFVCh4KSAgICAgICAgKCgoeCkgJiBSWFRYQkJfUlhUWEJCMl9QQVRIMUxPUV9FTl9NQVNLKSA+PiBSWFRYQkJfUlhUWEJCMl9QQVRIMUxPUV9FTl9MU0IpCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX1BBVEgxTE9RX0VOX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgUlhUWEJCX1JYVFhCQjJfUEFUSDFMT1FfRU5fTFNCKSAmIFJYVFhCQl9SWFRYQkIyX1BBVEgxTE9RX0VOX01BU0spCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX1BBVEhfT1ZFUlJJREVfTVNCICAgICAgICAgMAotI2RlZmluZSBSWFRYQkJfUlhUWEJCMl9QQVRIX09WRVJSSURFX0xTQiAgICAgICAgIDAKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjJfUEFUSF9PVkVSUklERV9NQVNLICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIyX1BBVEhfT1ZFUlJJREVfR0VUKHgpICAgICAgKCgoeCkgJiBSWFRYQkJfUlhUWEJCMl9QQVRIX09WRVJSSURFX01BU0spID4+IFJYVFhCQl9SWFRYQkIyX1BBVEhfT1ZFUlJJREVfTFNCKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCMl9QQVRIX09WRVJSSURFX1NFVCh4KSAgICAgICgoKHgpIDw8IFJYVFhCQl9SWFRYQkIyX1BBVEhfT1ZFUlJJREVfTFNCKSAmIFJYVFhCQl9SWFRYQkIyX1BBVEhfT1ZFUlJJREVfTUFTSykKLQotI2RlZmluZSBSWFRYQkJfUlhUWEJCM19BRERSRVNTICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTgKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU4Ci0jZGVmaW5lIFJYVFhCQl9SWFRYQkIzX1NQQVJFX01TQiAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjNfU1BBUkVfTFNCICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBSWFRYQkJfUlhUWEJCM19TUEFSRV9NQVNLICAgICAgICAgICAgICAgIDB4ZjgwMDAwMDAKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjNfU1BBUkVfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIFJYVFhCQl9SWFRYQkIzX1NQQVJFX01BU0spID4+IFJYVFhCQl9SWFRYQkIzX1NQQVJFX0xTQikKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjNfU1BBUkVfU0VUKHgpICAgICAgICAgICAgICAoKCh4KSA8PCBSWFRYQkJfUlhUWEJCM19TUEFSRV9MU0IpICYgUlhUWEJCX1JYVFhCQjNfU1BBUkVfTUFTSykKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjNfSUJOXzI1VV9DTV9CVUZBTVBfQ1RSTF9NU0IgMjYKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjNfSUJOXzI1VV9DTV9CVUZBTVBfQ1RSTF9MU0IgMjQKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjNfSUJOXzI1VV9DTV9CVUZBTVBfQ1RSTF9NQVNLIDB4MDcwMDAwMDAKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjNfSUJOXzI1VV9DTV9CVUZBTVBfQ1RSTF9HRVQoeCkgKCgoeCkgJiBSWFRYQkJfUlhUWEJCM19JQk5fMjVVX0NNX0JVRkFNUF9DVFJMX01BU0spID4+IFJYVFhCQl9SWFRYQkIzX0lCTl8yNVVfQ01fQlVGQU1QX0NUUkxfTFNCKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCM19JQk5fMjVVX0NNX0JVRkFNUF9DVFJMX1NFVCh4KSAoKCh4KSA8PCBSWFRYQkJfUlhUWEJCM19JQk5fMjVVX0NNX0JVRkFNUF9DVFJMX0xTQikgJiBSWFRYQkJfUlhUWEJCM19JQk5fMjVVX0NNX0JVRkFNUF9DVFJMX01BU0spCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIzX0lCTl8yNVVfQktWMklfQ1RSTF9NU0IgICAgMjMKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjNfSUJOXzI1VV9CS1YySV9DVFJMX0xTQiAgICAyMQotI2RlZmluZSBSWFRYQkJfUlhUWEJCM19JQk5fMjVVX0JLVjJJX0NUUkxfTUFTSyAgIDB4MDBlMDAwMDAKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjNfSUJOXzI1VV9CS1YySV9DVFJMX0dFVCh4KSAoKCh4KSAmIFJYVFhCQl9SWFRYQkIzX0lCTl8yNVVfQktWMklfQ1RSTF9NQVNLKSA+PiBSWFRYQkJfUlhUWEJCM19JQk5fMjVVX0JLVjJJX0NUUkxfTFNCKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCM19JQk5fMjVVX0JLVjJJX0NUUkxfU0VUKHgpICgoKHgpIDw8IFJYVFhCQl9SWFRYQkIzX0lCTl8yNVVfQktWMklfQ1RSTF9MU0IpICYgUlhUWEJCX1JYVFhCQjNfSUJOXzI1VV9CS1YySV9DVFJMX01BU0spCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIzX0lCTl8yNVVfSTJWX0NUUkxfTVNCICAgICAgMjAKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjNfSUJOXzI1VV9JMlZfQ1RSTF9MU0IgICAgICAxOAotI2RlZmluZSBSWFRYQkJfUlhUWEJCM19JQk5fMjVVX0kyVl9DVFJMX01BU0sgICAgIDB4MDAxYzAwMDAKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjNfSUJOXzI1VV9JMlZfQ1RSTF9HRVQoeCkgICAoKCh4KSAmIFJYVFhCQl9SWFRYQkIzX0lCTl8yNVVfSTJWX0NUUkxfTUFTSykgPj4gUlhUWEJCX1JYVFhCQjNfSUJOXzI1VV9JMlZfQ1RSTF9MU0IpCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIzX0lCTl8yNVVfSTJWX0NUUkxfU0VUKHgpICAgKCgoeCkgPDwgUlhUWEJCX1JYVFhCQjNfSUJOXzI1VV9JMlZfQ1RSTF9MU0IpICYgUlhUWEJCX1JYVFhCQjNfSUJOXzI1VV9JMlZfQ1RSTF9NQVNLKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCM19JQk5fMjVVX0hJMV9DVFJMX01TQiAgICAgIDE3Ci0jZGVmaW5lIFJYVFhCQl9SWFRYQkIzX0lCTl8yNVVfSEkxX0NUUkxfTFNCICAgICAgMTUKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjNfSUJOXzI1VV9ISTFfQ1RSTF9NQVNLICAgICAweDAwMDM4MDAwCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIzX0lCTl8yNVVfSEkxX0NUUkxfR0VUKHgpICAgKCgoeCkgJiBSWFRYQkJfUlhUWEJCM19JQk5fMjVVX0hJMV9DVFJMX01BU0spID4+IFJYVFhCQl9SWFRYQkIzX0lCTl8yNVVfSEkxX0NUUkxfTFNCKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCM19JQk5fMjVVX0hJMV9DVFJMX1NFVCh4KSAgICgoKHgpIDw8IFJYVFhCQl9SWFRYQkIzX0lCTl8yNVVfSEkxX0NUUkxfTFNCKSAmIFJYVFhCQl9SWFRYQkIzX0lCTl8yNVVfSEkxX0NUUkxfTUFTSykKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjNfSUJOXzI1VV9ISTJfQ1RSTF9NU0IgICAgICAxNAotI2RlZmluZSBSWFRYQkJfUlhUWEJCM19JQk5fMjVVX0hJMl9DVFJMX0xTQiAgICAgIDEyCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIzX0lCTl8yNVVfSEkyX0NUUkxfTUFTSyAgICAgMHgwMDAwNzAwMAotI2RlZmluZSBSWFRYQkJfUlhUWEJCM19JQk5fMjVVX0hJMl9DVFJMX0dFVCh4KSAgICgoKHgpICYgUlhUWEJCX1JYVFhCQjNfSUJOXzI1VV9ISTJfQ1RSTF9NQVNLKSA+PiBSWFRYQkJfUlhUWEJCM19JQk5fMjVVX0hJMl9DVFJMX0xTQikKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjNfSUJOXzI1VV9ISTJfQ1RSTF9TRVQoeCkgICAoKCh4KSA8PCBSWFRYQkJfUlhUWEJCM19JQk5fMjVVX0hJMl9DVFJMX0xTQikgJiBSWFRYQkJfUlhUWEJCM19JQk5fMjVVX0hJMl9DVFJMX01BU0spCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIzX0lCTl8yNVVfTE8xX0NUUkxfTVNCICAgICAgMTEKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjNfSUJOXzI1VV9MTzFfQ1RSTF9MU0IgICAgICA5Ci0jZGVmaW5lIFJYVFhCQl9SWFRYQkIzX0lCTl8yNVVfTE8xX0NUUkxfTUFTSyAgICAgMHgwMDAwMGUwMAotI2RlZmluZSBSWFRYQkJfUlhUWEJCM19JQk5fMjVVX0xPMV9DVFJMX0dFVCh4KSAgICgoKHgpICYgUlhUWEJCX1JYVFhCQjNfSUJOXzI1VV9MTzFfQ1RSTF9NQVNLKSA+PiBSWFRYQkJfUlhUWEJCM19JQk5fMjVVX0xPMV9DVFJMX0xTQikKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjNfSUJOXzI1VV9MTzFfQ1RSTF9TRVQoeCkgICAoKCh4KSA8PCBSWFRYQkJfUlhUWEJCM19JQk5fMjVVX0xPMV9DVFJMX0xTQikgJiBSWFRYQkJfUlhUWEJCM19JQk5fMjVVX0xPMV9DVFJMX01BU0spCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIzX0lCTl8yNVVfTE8yX0NUUkxfTVNCICAgICAgOAotI2RlZmluZSBSWFRYQkJfUlhUWEJCM19JQk5fMjVVX0xPMl9DVFJMX0xTQiAgICAgIDYKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjNfSUJOXzI1VV9MTzJfQ1RSTF9NQVNLICAgICAweDAwMDAwMWMwCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIzX0lCTl8yNVVfTE8yX0NUUkxfR0VUKHgpICAgKCgoeCkgJiBSWFRYQkJfUlhUWEJCM19JQk5fMjVVX0xPMl9DVFJMX01BU0spID4+IFJYVFhCQl9SWFRYQkIzX0lCTl8yNVVfTE8yX0NUUkxfTFNCKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCM19JQk5fMjVVX0xPMl9DVFJMX1NFVCh4KSAgICgoKHgpIDw8IFJYVFhCQl9SWFRYQkIzX0lCTl8yNVVfTE8yX0NUUkxfTFNCKSAmIFJYVFhCQl9SWFRYQkIzX0lCTl8yNVVfTE8yX0NUUkxfTUFTSykKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjNfSUJSTl8xMlA1X0NNX0NUUkxfTVNCICAgICA1Ci0jZGVmaW5lIFJYVFhCQl9SWFRYQkIzX0lCUk5fMTJQNV9DTV9DVFJMX0xTQiAgICAgMwotI2RlZmluZSBSWFRYQkJfUlhUWEJCM19JQlJOXzEyUDVfQ01fQ1RSTF9NQVNLICAgIDB4MDAwMDAwMzgKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjNfSUJSTl8xMlA1X0NNX0NUUkxfR0VUKHgpICAoKCh4KSAmIFJYVFhCQl9SWFRYQkIzX0lCUk5fMTJQNV9DTV9DVFJMX01BU0spID4+IFJYVFhCQl9SWFRYQkIzX0lCUk5fMTJQNV9DTV9DVFJMX0xTQikKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjNfSUJSTl8xMlA1X0NNX0NUUkxfU0VUKHgpICAoKCh4KSA8PCBSWFRYQkJfUlhUWEJCM19JQlJOXzEyUDVfQ01fQ1RSTF9MU0IpICYgUlhUWEJCX1JYVFhCQjNfSUJSTl8xMlA1X0NNX0NUUkxfTUFTSykKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjNfSUJOXzEwMFVfVEVTVF9DVFJMX01TQiAgICAyCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkIzX0lCTl8xMDBVX1RFU1RfQ1RSTF9MU0IgICAgMAotI2RlZmluZSBSWFRYQkJfUlhUWEJCM19JQk5fMTAwVV9URVNUX0NUUkxfTUFTSyAgIDB4MDAwMDAwMDcKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjNfSUJOXzEwMFVfVEVTVF9DVFJMX0dFVCh4KSAoKCh4KSAmIFJYVFhCQl9SWFRYQkIzX0lCTl8xMDBVX1RFU1RfQ1RSTF9NQVNLKSA+PiBSWFRYQkJfUlhUWEJCM19JQk5fMTAwVV9URVNUX0NUUkxfTFNCKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCM19JQk5fMTAwVV9URVNUX0NUUkxfU0VUKHgpICgoKHgpIDw8IFJYVFhCQl9SWFRYQkIzX0lCTl8xMDBVX1RFU1RfQ1RSTF9MU0IpICYgUlhUWEJCX1JYVFhCQjNfSUJOXzEwMFVfVEVTVF9DVFJMX01BU0spCi0KLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDVjCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkI0X09GRlNFVCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1YwotI2RlZmluZSBSWFRYQkJfUlhUWEJCNF9TUEFSRV9NU0IgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkI0X1NQQVJFX0xTQiAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjRfU1BBUkVfTUFTSyAgICAgICAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkI0X1NQQVJFX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiBSWFRYQkJfUlhUWEJCNF9TUEFSRV9NQVNLKSA+PiBSWFRYQkJfUlhUWEJCNF9TUEFSRV9MU0IpCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkI0X1NQQVJFX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgUlhUWEJCX1JYVFhCQjRfU1BBUkVfTFNCKSAmIFJYVFhCQl9SWFRYQkI0X1NQQVJFX01BU0spCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkI0X0xPQ0FMT0ZGU0VUX01TQiAgICAgICAgICAgMzAKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjRfTE9DQUxPRkZTRVRfTFNCICAgICAgICAgICAzMAotI2RlZmluZSBSWFRYQkJfUlhUWEJCNF9MT0NBTE9GRlNFVF9NQVNLICAgICAgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjRfTE9DQUxPRkZTRVRfR0VUKHgpICAgICAgICAoKCh4KSAmIFJYVFhCQl9SWFRYQkI0X0xPQ0FMT0ZGU0VUX01BU0spID4+IFJYVFhCQl9SWFRYQkI0X0xPQ0FMT0ZGU0VUX0xTQikKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjRfTE9DQUxPRkZTRVRfU0VUKHgpICAgICAgICAoKCh4KSA8PCBSWFRYQkJfUlhUWEJCNF9MT0NBTE9GRlNFVF9MU0IpICYgUlhUWEJCX1JYVFhCQjRfTE9DQUxPRkZTRVRfTUFTSykKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjRfT0ZTVENPUlJISUlfTVNCICAgICAgICAgICAyOQotI2RlZmluZSBSWFRYQkJfUlhUWEJCNF9PRlNUQ09SUkhJSV9MU0IgICAgICAgICAgIDI1Ci0jZGVmaW5lIFJYVFhCQl9SWFRYQkI0X09GU1RDT1JSSElJX01BU0sgICAgICAgICAgMHgzZTAwMDAwMAotI2RlZmluZSBSWFRYQkJfUlhUWEJCNF9PRlNUQ09SUkhJSV9HRVQoeCkgICAgICAgICgoKHgpICYgUlhUWEJCX1JYVFhCQjRfT0ZTVENPUlJISUlfTUFTSykgPj4gUlhUWEJCX1JYVFhCQjRfT0ZTVENPUlJISUlfTFNCKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCNF9PRlNUQ09SUkhJSV9TRVQoeCkgICAgICAgICgoKHgpIDw8IFJYVFhCQl9SWFRYQkI0X09GU1RDT1JSSElJX0xTQikgJiBSWFRYQkJfUlhUWEJCNF9PRlNUQ09SUkhJSV9NQVNLKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCNF9PRlNUQ09SUkhJUV9NU0IgICAgICAgICAgIDI0Ci0jZGVmaW5lIFJYVFhCQl9SWFRYQkI0X09GU1RDT1JSSElRX0xTQiAgICAgICAgICAgMjAKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjRfT0ZTVENPUlJISVFfTUFTSyAgICAgICAgICAweDAxZjAwMDAwCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkI0X09GU1RDT1JSSElRX0dFVCh4KSAgICAgICAgKCgoeCkgJiBSWFRYQkJfUlhUWEJCNF9PRlNUQ09SUkhJUV9NQVNLKSA+PiBSWFRYQkJfUlhUWEJCNF9PRlNUQ09SUkhJUV9MU0IpCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkI0X09GU1RDT1JSSElRX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgUlhUWEJCX1JYVFhCQjRfT0ZTVENPUlJISVFfTFNCKSAmIFJYVFhCQl9SWFRYQkI0X09GU1RDT1JSSElRX01BU0spCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkI0X09GU1RDT1JSTE9JX01TQiAgICAgICAgICAgMTkKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjRfT0ZTVENPUlJMT0lfTFNCICAgICAgICAgICAxNQotI2RlZmluZSBSWFRYQkJfUlhUWEJCNF9PRlNUQ09SUkxPSV9NQVNLICAgICAgICAgIDB4MDAwZjgwMDAKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjRfT0ZTVENPUlJMT0lfR0VUKHgpICAgICAgICAoKCh4KSAmIFJYVFhCQl9SWFRYQkI0X09GU1RDT1JSTE9JX01BU0spID4+IFJYVFhCQl9SWFRYQkI0X09GU1RDT1JSTE9JX0xTQikKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjRfT0ZTVENPUlJMT0lfU0VUKHgpICAgICAgICAoKCh4KSA8PCBSWFRYQkJfUlhUWEJCNF9PRlNUQ09SUkxPSV9MU0IpICYgUlhUWEJCX1JYVFhCQjRfT0ZTVENPUlJMT0lfTUFTSykKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjRfT0ZTVENPUlJMT1FfTVNCICAgICAgICAgICAxNAotI2RlZmluZSBSWFRYQkJfUlhUWEJCNF9PRlNUQ09SUkxPUV9MU0IgICAgICAgICAgIDEwCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkI0X09GU1RDT1JSTE9RX01BU0sgICAgICAgICAgMHgwMDAwN2MwMAotI2RlZmluZSBSWFRYQkJfUlhUWEJCNF9PRlNUQ09SUkxPUV9HRVQoeCkgICAgICAgICgoKHgpICYgUlhUWEJCX1JYVFhCQjRfT0ZTVENPUlJMT1FfTUFTSykgPj4gUlhUWEJCX1JYVFhCQjRfT0ZTVENPUlJMT1FfTFNCKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCNF9PRlNUQ09SUkxPUV9TRVQoeCkgICAgICAgICgoKHgpIDw8IFJYVFhCQl9SWFRYQkI0X09GU1RDT1JSTE9RX0xTQikgJiBSWFRYQkJfUlhUWEJCNF9PRlNUQ09SUkxPUV9NQVNLKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCNF9PRlNUQ09SUkkyVklfTVNCICAgICAgICAgIDkKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjRfT0ZTVENPUlJJMlZJX0xTQiAgICAgICAgICA1Ci0jZGVmaW5lIFJYVFhCQl9SWFRYQkI0X09GU1RDT1JSSTJWSV9NQVNLICAgICAgICAgMHgwMDAwMDNlMAotI2RlZmluZSBSWFRYQkJfUlhUWEJCNF9PRlNUQ09SUkkyVklfR0VUKHgpICAgICAgICgoKHgpICYgUlhUWEJCX1JYVFhCQjRfT0ZTVENPUlJJMlZJX01BU0spID4+IFJYVFhCQl9SWFRYQkI0X09GU1RDT1JSSTJWSV9MU0IpCi0jZGVmaW5lIFJYVFhCQl9SWFRYQkI0X09GU1RDT1JSSTJWSV9TRVQoeCkgICAgICAgKCgoeCkgPDwgUlhUWEJCX1JYVFhCQjRfT0ZTVENPUlJJMlZJX0xTQikgJiBSWFRYQkJfUlhUWEJCNF9PRlNUQ09SUkkyVklfTUFTSykKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjRfT0ZTVENPUlJJMlZRX01TQiAgICAgICAgICA0Ci0jZGVmaW5lIFJYVFhCQl9SWFRYQkI0X09GU1RDT1JSSTJWUV9MU0IgICAgICAgICAgMAotI2RlZmluZSBSWFRYQkJfUlhUWEJCNF9PRlNUQ09SUkkyVlFfTUFTSyAgICAgICAgIDB4MDAwMDAwMWYKLSNkZWZpbmUgUlhUWEJCX1JYVFhCQjRfT0ZTVENPUlJJMlZRX0dFVCh4KSAgICAgICAoKCh4KSAmIFJYVFhCQl9SWFRYQkI0X09GU1RDT1JSSTJWUV9NQVNLKSA+PiBSWFRYQkJfUlhUWEJCNF9PRlNUQ09SUkkyVlFfTFNCKQotI2RlZmluZSBSWFRYQkJfUlhUWEJCNF9PRlNUQ09SUkkyVlFfU0VUKHgpICAgICAgICgoKHgpIDw8IFJYVFhCQl9SWFRYQkI0X09GU1RDT1JSSTJWUV9MU0IpICYgUlhUWEJCX1JYVFhCQjRfT0ZTVENPUlJJMlZRX01BU0spCi0KLSNkZWZpbmUgQUREQUNfQUREQUMxX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDYwCi0jZGVmaW5lIEFEREFDX0FEREFDMV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2MAotI2RlZmluZSBBRERBQ19BRERBQzFfUExMX1NWUkVHX01TQiAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIEFEREFDX0FEREFDMV9QTExfU1ZSRUdfTFNCICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgQUREQUNfQUREQUMxX1BMTF9TVlJFR19NQVNLICAgICAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIEFEREFDX0FEREFDMV9QTExfU1ZSRUdfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBBRERBQ19BRERBQzFfUExMX1NWUkVHX01BU0spID4+IEFEREFDX0FEREFDMV9QTExfU1ZSRUdfTFNCKQotI2RlZmluZSBBRERBQ19BRERBQzFfUExMX1NWUkVHX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IEFEREFDX0FEREFDMV9QTExfU1ZSRUdfTFNCKSAmIEFEREFDX0FEREFDMV9QTExfU1ZSRUdfTUFTSykKLSNkZWZpbmUgQUREQUNfQUREQUMxX1BMTF9TQ0xBTVBfTVNCICAgICAgICAgICAgICAzMAotI2RlZmluZSBBRERBQ19BRERBQzFfUExMX1NDTEFNUF9MU0IgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIEFEREFDX0FEREFDMV9QTExfU0NMQU1QX01BU0sgICAgICAgICAgICAgMHg3MDAwMDAwMAotI2RlZmluZSBBRERBQ19BRERBQzFfUExMX1NDTEFNUF9HRVQoeCkgICAgICAgICAgICgoKHgpICYgQUREQUNfQUREQUMxX1BMTF9TQ0xBTVBfTUFTSykgPj4gQUREQUNfQUREQUMxX1BMTF9TQ0xBTVBfTFNCKQotI2RlZmluZSBBRERBQ19BRERBQzFfUExMX1NDTEFNUF9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IEFEREFDX0FEREFDMV9QTExfU0NMQU1QX0xTQikgJiBBRERBQ19BRERBQzFfUExMX1NDTEFNUF9NQVNLKQotI2RlZmluZSBBRERBQ19BRERBQzFfUExMX0FUQl9NU0IgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIEFEREFDX0FEREFDMV9QTExfQVRCX0xTQiAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgQUREQUNfQUREQUMxX1BMTF9BVEJfTUFTSyAgICAgICAgICAgICAgICAweDBjMDAwMDAwCi0jZGVmaW5lIEFEREFDX0FEREFDMV9QTExfQVRCX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiBBRERBQ19BRERBQzFfUExMX0FUQl9NQVNLKSA+PiBBRERBQ19BRERBQzFfUExMX0FUQl9MU0IpCi0jZGVmaW5lIEFEREFDX0FEREFDMV9QTExfQVRCX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgQUREQUNfQUREQUMxX1BMTF9BVEJfTFNCKSAmIEFEREFDX0FEREFDMV9QTExfQVRCX01BU0spCi0jZGVmaW5lIEFEREFDX0FEREFDMV9QTExfSUNQX01TQiAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgQUREQUNfQUREQUMxX1BMTF9JQ1BfTFNCICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBBRERBQ19BRERBQzFfUExMX0lDUF9NQVNLICAgICAgICAgICAgICAgIDB4MDM4MDAwMDAKLSNkZWZpbmUgQUREQUNfQUREQUMxX1BMTF9JQ1BfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIEFEREFDX0FEREFDMV9QTExfSUNQX01BU0spID4+IEFEREFDX0FEREFDMV9QTExfSUNQX0xTQikKLSNkZWZpbmUgQUREQUNfQUREQUMxX1BMTF9JQ1BfU0VUKHgpICAgICAgICAgICAgICAoKCh4KSA8PCBBRERBQ19BRERBQzFfUExMX0lDUF9MU0IpICYgQUREQUNfQUREQUMxX1BMTF9JQ1BfTUFTSykKLSNkZWZpbmUgQUREQUNfQUREQUMxX1BMTF9GSUxURVJfTVNCICAgICAgICAgICAgICAyMgotI2RlZmluZSBBRERBQ19BRERBQzFfUExMX0ZJTFRFUl9MU0IgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIEFEREFDX0FEREFDMV9QTExfRklMVEVSX01BU0sgICAgICAgICAgICAgMHgwMDdmODAwMAotI2RlZmluZSBBRERBQ19BRERBQzFfUExMX0ZJTFRFUl9HRVQoeCkgICAgICAgICAgICgoKHgpICYgQUREQUNfQUREQUMxX1BMTF9GSUxURVJfTUFTSykgPj4gQUREQUNfQUREQUMxX1BMTF9GSUxURVJfTFNCKQotI2RlZmluZSBBRERBQ19BRERBQzFfUExMX0ZJTFRFUl9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IEFEREFDX0FEREFDMV9QTExfRklMVEVSX0xTQikgJiBBRERBQ19BRERBQzFfUExMX0ZJTFRFUl9NQVNLKQotI2RlZmluZSBBRERBQ19BRERBQzFfUFdEUExMX01TQiAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIEFEREFDX0FEREFDMV9QV0RQTExfTFNCICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgQUREQUNfQUREQUMxX1BXRFBMTF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCi0jZGVmaW5lIEFEREFDX0FEREFDMV9QV0RQTExfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBBRERBQ19BRERBQzFfUFdEUExMX01BU0spID4+IEFEREFDX0FEREFDMV9QV0RQTExfTFNCKQotI2RlZmluZSBBRERBQ19BRERBQzFfUFdEUExMX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IEFEREFDX0FEREFDMV9QV0RQTExfTFNCKSAmIEFEREFDX0FEREFDMV9QV0RQTExfTUFTSykKLSNkZWZpbmUgQUREQUNfQUREQUMxX1BXREFEQ19NU0IgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBBRERBQ19BRERBQzFfUFdEQURDX0xTQiAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIEFEREFDX0FEREFDMV9QV0RBRENfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAotI2RlZmluZSBBRERBQ19BRERBQzFfUFdEQURDX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgQUREQUNfQUREQUMxX1BXREFEQ19NQVNLKSA+PiBBRERBQ19BRERBQzFfUFdEQURDX0xTQikKLSNkZWZpbmUgQUREQUNfQUREQUMxX1BXREFEQ19TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBBRERBQ19BRERBQzFfUFdEQURDX0xTQikgJiBBRERBQ19BRERBQzFfUFdEQURDX01BU0spCi0jZGVmaW5lIEFEREFDX0FEREFDMV9QV0REQUNfTVNCICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgQUREQUNfQUREQUMxX1BXRERBQ19MU0IgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBBRERBQ19BRERBQzFfUFdEREFDX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKLSNkZWZpbmUgQUREQUNfQUREQUMxX1BXRERBQ19HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIEFEREFDX0FEREFDMV9QV0REQUNfTUFTSykgPj4gQUREQUNfQUREQUMxX1BXRERBQ19MU0IpCi0jZGVmaW5lIEFEREFDX0FEREFDMV9QV0REQUNfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgQUREQUNfQUREQUMxX1BXRERBQ19MU0IpICYgQUREQUNfQUREQUMxX1BXRERBQ19NQVNLKQotI2RlZmluZSBBRERBQ19BRERBQzFfRk9SQ0VNU0JMT1dfTVNCICAgICAgICAgICAgIDExCi0jZGVmaW5lIEFEREFDX0FEREFDMV9GT1JDRU1TQkxPV19MU0IgICAgICAgICAgICAgMTEKLSNkZWZpbmUgQUREQUNfQUREQUMxX0ZPUkNFTVNCTE9XX01BU0sgICAgICAgICAgICAweDAwMDAwODAwCi0jZGVmaW5lIEFEREFDX0FEREFDMV9GT1JDRU1TQkxPV19HRVQoeCkgICAgICAgICAgKCgoeCkgJiBBRERBQ19BRERBQzFfRk9SQ0VNU0JMT1dfTUFTSykgPj4gQUREQUNfQUREQUMxX0ZPUkNFTVNCTE9XX0xTQikKLSNkZWZpbmUgQUREQUNfQUREQUMxX0ZPUkNFTVNCTE9XX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBBRERBQ19BRERBQzFfRk9SQ0VNU0JMT1dfTFNCKSAmIEFEREFDX0FEREFDMV9GT1JDRU1TQkxPV19NQVNLKQotI2RlZmluZSBBRERBQ19BRERBQzFfU0VMTUFOUFdEU19NU0IgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIEFEREFDX0FEREFDMV9TRUxNQU5QV0RTX0xTQiAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgQUREQUNfQUREQUMxX1NFTE1BTlBXRFNfTUFTSyAgICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIEFEREFDX0FEREFDMV9TRUxNQU5QV0RTX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBBRERBQ19BRERBQzFfU0VMTUFOUFdEU19NQVNLKSA+PiBBRERBQ19BRERBQzFfU0VMTUFOUFdEU19MU0IpCi0jZGVmaW5lIEFEREFDX0FEREFDMV9TRUxNQU5QV0RTX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgQUREQUNfQUREQUMxX1NFTE1BTlBXRFNfTFNCKSAmIEFEREFDX0FEREFDMV9TRUxNQU5QV0RTX01BU0spCi0jZGVmaW5lIEFEREFDX0FEREFDMV9JTlZfQ0xLMTYwX0FEQ19NU0IgICAgICAgICAgOQotI2RlZmluZSBBRERBQ19BRERBQzFfSU5WX0NMSzE2MF9BRENfTFNCICAgICAgICAgIDkKLSNkZWZpbmUgQUREQUNfQUREQUMxX0lOVl9DTEsxNjBfQURDX01BU0sgICAgICAgICAweDAwMDAwMjAwCi0jZGVmaW5lIEFEREFDX0FEREFDMV9JTlZfQ0xLMTYwX0FEQ19HRVQoeCkgICAgICAgKCgoeCkgJiBBRERBQ19BRERBQzFfSU5WX0NMSzE2MF9BRENfTUFTSykgPj4gQUREQUNfQUREQUMxX0lOVl9DTEsxNjBfQURDX0xTQikKLSNkZWZpbmUgQUREQUNfQUREQUMxX0lOVl9DTEsxNjBfQURDX1NFVCh4KSAgICAgICAoKCh4KSA8PCBBRERBQ19BRERBQzFfSU5WX0NMSzE2MF9BRENfTFNCKSAmIEFEREFDX0FEREFDMV9JTlZfQ0xLMTYwX0FEQ19NQVNLKQotI2RlZmluZSBBRERBQ19BRERBQzFfQ01fU0VMX01TQiAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgQUREQUNfQUREQUMxX0NNX1NFTF9MU0IgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIEFEREFDX0FEREFDMV9DTV9TRUxfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDE4MAotI2RlZmluZSBBRERBQ19BRERBQzFfQ01fU0VMX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgQUREQUNfQUREQUMxX0NNX1NFTF9NQVNLKSA+PiBBRERBQ19BRERBQzFfQ01fU0VMX0xTQikKLSNkZWZpbmUgQUREQUNfQUREQUMxX0NNX1NFTF9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBBRERBQ19BRERBQzFfQ01fU0VMX0xTQikgJiBBRERBQ19BRERBQzFfQ01fU0VMX01BU0spCi0jZGVmaW5lIEFEREFDX0FEREFDMV9ESVNBQkxFX0RBQ19SRUdfTVNCICAgICAgICAgNgotI2RlZmluZSBBRERBQ19BRERBQzFfRElTQUJMRV9EQUNfUkVHX0xTQiAgICAgICAgIDYKLSNkZWZpbmUgQUREQUNfQUREQUMxX0RJU0FCTEVfREFDX1JFR19NQVNLICAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIEFEREFDX0FEREFDMV9ESVNBQkxFX0RBQ19SRUdfR0VUKHgpICAgICAgKCgoeCkgJiBBRERBQ19BRERBQzFfRElTQUJMRV9EQUNfUkVHX01BU0spID4+IEFEREFDX0FEREFDMV9ESVNBQkxFX0RBQ19SRUdfTFNCKQotI2RlZmluZSBBRERBQ19BRERBQzFfRElTQUJMRV9EQUNfUkVHX1NFVCh4KSAgICAgICgoKHgpIDw8IEFEREFDX0FEREFDMV9ESVNBQkxFX0RBQ19SRUdfTFNCKSAmIEFEREFDX0FEREFDMV9ESVNBQkxFX0RBQ19SRUdfTUFTSykKLSNkZWZpbmUgQUREQUNfQUREQUMxX1NQQVJFX01TQiAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIEFEREFDX0FEREFDMV9TUEFSRV9MU0IgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBBRERBQ19BRERBQzFfU1BBUkVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM2YKLSNkZWZpbmUgQUREQUNfQUREQUMxX1NQQVJFX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIEFEREFDX0FEREFDMV9TUEFSRV9NQVNLKSA+PiBBRERBQ19BRERBQzFfU1BBUkVfTFNCKQotI2RlZmluZSBBRERBQ19BRERBQzFfU1BBUkVfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IEFEREFDX0FEREFDMV9TUEFSRV9MU0IpICYgQUREQUNfQUREQUMxX1NQQVJFX01BU0spCi0KLQotI2lmbmRlZiBfX0FTU0VNQkxFUl9fCi0KLXR5cGVkZWYgc3RydWN0IGFuYWxvZ19yZWdfcmVnX3MgewotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgc3ludGhfc3ludGgxOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgc3ludGhfc3ludGgyOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgc3ludGhfc3ludGgzOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgc3ludGhfc3ludGg0OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgc3ludGhfc3ludGg1OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgc3ludGhfc3ludGg2OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgc3ludGhfc3ludGg3OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgc3ludGhfc3ludGg4OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcmY1Z19yZjVnMTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHJmNWdfcmY1ZzI7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCByZjJnX3JmMmcxOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcmYyZ19yZjJnMjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHRvcF9nYWluOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdG9wX3RvcDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGJpYXNfYmlhc19zZWw7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBiaWFzX2JpYXMxOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYmlhc19iaWFzMjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGJpYXNfYmlhczM7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB0eHBjX3R4cGM7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB0eHBjX21pc2M7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCByeHR4YmJfcnh0eGJiMTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHJ4dHhiYl9yeHR4YmIyOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcnh0eGJiX3J4dHhiYjM7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCByeHR4YmJfcnh0eGJiNDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGFkZGFjX2FkZGFjMTsKLX0gYW5hbG9nX3JlZ19yZWdfdDsKLQotI2VuZGlmIC8qIF9fQVNTRU1CTEVSX18gKi8KLQotI2VuZGlmIC8qIF9BTkFMT0dfUkVHX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzIuMC9ody9hcGJfbWFwLmggYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzIuMC9ody9hcGJfbWFwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzYmY2ZDYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHcyLjAvaHcvYXBiX21hcC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotI2lmbmRlZiBfQVBCX01BUF9IXwotI2RlZmluZSBfQVBCX01BUF9IXwotCi0jZGVmaW5lIFJUQ19CQVNFX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAotI2RlZmluZSBWTUNfQkFTRV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKLSNkZWZpbmUgVUFSVF9CQVNFX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBjMDAwCi0jZGVmaW5lIFNJX0JBU0VfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBHUElPX0JBU0VfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTQwMDAKLSNkZWZpbmUgTUJPWF9CQVNFX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDE4MDAwCi0jZGVmaW5lIEFOQUxPR19JTlRGX0JBU0VfQUREUkVTUyAgICAgICAgICAgICAgICAgMHgwMDAxYzAwMAotI2RlZmluZSBNQUNfQkFTRV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKLQotI2VuZGlmIC8qIF9BUEJfTUFQX1JFR19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHcyLjAvaHcvZ3Bpb19yZWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3Mi4wL2h3L2dwaW9fcmVnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmMmI5NjQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHcyLjAvaHcvZ3Bpb19yZWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDk3NyArMCwwIEBACi0jaWZuZGVmIF9HUElPX1JFR19SRUdfSF8KLSNkZWZpbmUgX0dQSU9fUkVHX1JFR19IXwotCi0jZGVmaW5lIEdQSU9fT1VUX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAotI2RlZmluZSBHUElPX09VVF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgR1BJT19PVVRfREFUQV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBHUElPX09VVF9EQVRBX0xTQiAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgR1BJT19PVVRfREFUQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwMDNmZmZmCi0jZGVmaW5lIEdQSU9fT1VUX0RBVEFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBHUElPX09VVF9EQVRBX01BU0spID4+IEdQSU9fT1VUX0RBVEFfTFNCKQotI2RlZmluZSBHUElPX09VVF9EQVRBX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IEdQSU9fT1VUX0RBVEFfTFNCKSAmIEdQSU9fT1VUX0RBVEFfTUFTSykKLQotI2RlZmluZSBHUElPX09VVF9XMVRTX0FERFJFU1MgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgR1BJT19PVVRfVzFUU19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIEdQSU9fT1VUX1cxVFNfREFUQV9NU0IgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgR1BJT19PVVRfVzFUU19EQVRBX0xTQiAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEdQSU9fT1VUX1cxVFNfREFUQV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAzZmZmZgotI2RlZmluZSBHUElPX09VVF9XMVRTX0RBVEFfR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgR1BJT19PVVRfVzFUU19EQVRBX01BU0spID4+IEdQSU9fT1VUX1cxVFNfREFUQV9MU0IpCi0jZGVmaW5lIEdQSU9fT1VUX1cxVFNfREFUQV9TRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19PVVRfVzFUU19EQVRBX0xTQikgJiBHUElPX09VVF9XMVRTX0RBVEFfTUFTSykKLQotI2RlZmluZSBHUElPX09VVF9XMVRDX0FERFJFU1MgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgR1BJT19PVVRfVzFUQ19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIEdQSU9fT1VUX1cxVENfREFUQV9NU0IgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgR1BJT19PVVRfVzFUQ19EQVRBX0xTQiAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEdQSU9fT1VUX1cxVENfREFUQV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAzZmZmZgotI2RlZmluZSBHUElPX09VVF9XMVRDX0RBVEFfR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgR1BJT19PVVRfVzFUQ19EQVRBX01BU0spID4+IEdQSU9fT1VUX1cxVENfREFUQV9MU0IpCi0jZGVmaW5lIEdQSU9fT1VUX1cxVENfREFUQV9TRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19PVVRfVzFUQ19EQVRBX0xTQikgJiBHUElPX09VVF9XMVRDX0RBVEFfTUFTSykKLQotI2RlZmluZSBHUElPX0VOQUJMRV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGMKLSNkZWZpbmUgR1BJT19FTkFCTEVfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBjCi0jZGVmaW5lIEdQSU9fRU5BQkxFX0RBVEFfTVNCICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgR1BJT19FTkFCTEVfREFUQV9MU0IgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEdQSU9fRU5BQkxFX0RBVEFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAzZmZmZgotI2RlZmluZSBHUElPX0VOQUJMRV9EQVRBX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgR1BJT19FTkFCTEVfREFUQV9NQVNLKSA+PiBHUElPX0VOQUJMRV9EQVRBX0xTQikKLSNkZWZpbmUgR1BJT19FTkFCTEVfREFUQV9TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBHUElPX0VOQUJMRV9EQVRBX0xTQikgJiBHUElPX0VOQUJMRV9EQVRBX01BU0spCi0KLSNkZWZpbmUgR1BJT19FTkFCTEVfVzFUU19BRERSRVNTICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIEdQSU9fRU5BQkxFX1cxVFNfT0ZGU0VUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBHUElPX0VOQUJMRV9XMVRTX0RBVEFfTVNCICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIEdQSU9fRU5BQkxFX1cxVFNfREFUQV9MU0IgICAgICAgICAgICAgICAgMAotI2RlZmluZSBHUElPX0VOQUJMRV9XMVRTX0RBVEFfTUFTSyAgICAgICAgICAgICAgIDB4MDAwM2ZmZmYKLSNkZWZpbmUgR1BJT19FTkFCTEVfVzFUU19EQVRBX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fRU5BQkxFX1cxVFNfREFUQV9NQVNLKSA+PiBHUElPX0VOQUJMRV9XMVRTX0RBVEFfTFNCKQotI2RlZmluZSBHUElPX0VOQUJMRV9XMVRTX0RBVEFfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IEdQSU9fRU5BQkxFX1cxVFNfREFUQV9MU0IpICYgR1BJT19FTkFCTEVfVzFUU19EQVRBX01BU0spCi0KLSNkZWZpbmUgR1BJT19FTkFCTEVfVzFUQ19BRERSRVNTICAgICAgICAgICAgICAgICAweDAwMDAwMDE0Ci0jZGVmaW5lIEdQSU9fRU5BQkxFX1cxVENfT0ZGU0VUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAotI2RlZmluZSBHUElPX0VOQUJMRV9XMVRDX0RBVEFfTVNCICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIEdQSU9fRU5BQkxFX1cxVENfREFUQV9MU0IgICAgICAgICAgICAgICAgMAotI2RlZmluZSBHUElPX0VOQUJMRV9XMVRDX0RBVEFfTUFTSyAgICAgICAgICAgICAgIDB4MDAwM2ZmZmYKLSNkZWZpbmUgR1BJT19FTkFCTEVfVzFUQ19EQVRBX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fRU5BQkxFX1cxVENfREFUQV9NQVNLKSA+PiBHUElPX0VOQUJMRV9XMVRDX0RBVEFfTFNCKQotI2RlZmluZSBHUElPX0VOQUJMRV9XMVRDX0RBVEFfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IEdQSU9fRU5BQkxFX1cxVENfREFUQV9MU0IpICYgR1BJT19FTkFCTEVfVzFUQ19EQVRBX01BU0spCi0KLSNkZWZpbmUgR1BJT19JTl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4Ci0jZGVmaW5lIEdQSU9fSU5fT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAotI2RlZmluZSBHUElPX0lOX0RBVEFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIEdQSU9fSU5fREFUQV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBHUElPX0lOX0RBVEFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM2ZmZmYKLSNkZWZpbmUgR1BJT19JTl9EQVRBX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fSU5fREFUQV9NQVNLKSA+PiBHUElPX0lOX0RBVEFfTFNCKQotI2RlZmluZSBHUElPX0lOX0RBVEFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IEdQSU9fSU5fREFUQV9MU0IpICYgR1BJT19JTl9EQVRBX01BU0spCi0KLSNkZWZpbmUgR1BJT19TVEFUVVNfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFjCi0jZGVmaW5lIEdQSU9fU1RBVFVTX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxYwotI2RlZmluZSBHUElPX1NUQVRVU19JTlRFUlJVUFRfTVNCICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIEdQSU9fU1RBVFVTX0lOVEVSUlVQVF9MU0IgICAgICAgICAgICAgICAgMAotI2RlZmluZSBHUElPX1NUQVRVU19JTlRFUlJVUFRfTUFTSyAgICAgICAgICAgICAgIDB4MDAwM2ZmZmYKLSNkZWZpbmUgR1BJT19TVEFUVVNfSU5URVJSVVBUX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fU1RBVFVTX0lOVEVSUlVQVF9NQVNLKSA+PiBHUElPX1NUQVRVU19JTlRFUlJVUFRfTFNCKQotI2RlZmluZSBHUElPX1NUQVRVU19JTlRFUlJVUFRfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IEdQSU9fU1RBVFVTX0lOVEVSUlVQVF9MU0IpICYgR1BJT19TVEFUVVNfSU5URVJSVVBUX01BU0spCi0KLSNkZWZpbmUgR1BJT19TVEFUVVNfVzFUU19BRERSRVNTICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIEdQSU9fU1RBVFVTX1cxVFNfT0ZGU0VUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBHUElPX1NUQVRVU19XMVRTX0lOVEVSUlVQVF9NU0IgICAgICAgICAgIDE3Ci0jZGVmaW5lIEdQSU9fU1RBVFVTX1cxVFNfSU5URVJSVVBUX0xTQiAgICAgICAgICAgMAotI2RlZmluZSBHUElPX1NUQVRVU19XMVRTX0lOVEVSUlVQVF9NQVNLICAgICAgICAgIDB4MDAwM2ZmZmYKLSNkZWZpbmUgR1BJT19TVEFUVVNfVzFUU19JTlRFUlJVUFRfR0VUKHgpICAgICAgICAoKCh4KSAmIEdQSU9fU1RBVFVTX1cxVFNfSU5URVJSVVBUX01BU0spID4+IEdQSU9fU1RBVFVTX1cxVFNfSU5URVJSVVBUX0xTQikKLSNkZWZpbmUgR1BJT19TVEFUVVNfVzFUU19JTlRFUlJVUFRfU0VUKHgpICAgICAgICAoKCh4KSA8PCBHUElPX1NUQVRVU19XMVRTX0lOVEVSUlVQVF9MU0IpICYgR1BJT19TVEFUVVNfVzFUU19JTlRFUlJVUFRfTUFTSykKLQotI2RlZmluZSBHUElPX1NUQVRVU19XMVRDX0FERFJFU1MgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKLSNkZWZpbmUgR1BJT19TVEFUVVNfVzFUQ19PRkZTRVQgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0Ci0jZGVmaW5lIEdQSU9fU1RBVFVTX1cxVENfSU5URVJSVVBUX01TQiAgICAgICAgICAgMTcKLSNkZWZpbmUgR1BJT19TVEFUVVNfVzFUQ19JTlRFUlJVUFRfTFNCICAgICAgICAgICAwCi0jZGVmaW5lIEdQSU9fU1RBVFVTX1cxVENfSU5URVJSVVBUX01BU0sgICAgICAgICAgMHgwMDAzZmZmZgotI2RlZmluZSBHUElPX1NUQVRVU19XMVRDX0lOVEVSUlVQVF9HRVQoeCkgICAgICAgICgoKHgpICYgR1BJT19TVEFUVVNfVzFUQ19JTlRFUlJVUFRfTUFTSykgPj4gR1BJT19TVEFUVVNfVzFUQ19JTlRFUlJVUFRfTFNCKQotI2RlZmluZSBHUElPX1NUQVRVU19XMVRDX0lOVEVSUlVQVF9TRVQoeCkgICAgICAgICgoKHgpIDw8IEdQSU9fU1RBVFVTX1cxVENfSU5URVJSVVBUX0xTQikgJiBHUElPX1NUQVRVU19XMVRDX0lOVEVSUlVQVF9NQVNLKQotCi0jZGVmaW5lIEdQSU9fUElOMF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAotI2RlZmluZSBHUElPX1BJTjBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKLSNkZWZpbmUgR1BJT19QSU4wX0NPTkZJR19NU0IgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBHUElPX1BJTjBfQ09ORklHX0xTQiAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIEdQSU9fUElOMF9DT05GSUdfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTgwMAotI2RlZmluZSBHUElPX1BJTjBfQ09ORklHX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgR1BJT19QSU4wX0NPTkZJR19NQVNLKSA+PiBHUElPX1BJTjBfQ09ORklHX0xTQikKLSNkZWZpbmUgR1BJT19QSU4wX0NPTkZJR19TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjBfQ09ORklHX0xTQikgJiBHUElPX1BJTjBfQ09ORklHX01BU0spCi0jZGVmaW5lIEdQSU9fUElOMF9XQUtFVVBfRU5BQkxFX01TQiAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgR1BJT19QSU4wX1dBS0VVUF9FTkFCTEVfTFNCICAgICAgICAgICAgICAxMAotI2RlZmluZSBHUElPX1BJTjBfV0FLRVVQX0VOQUJMRV9NQVNLICAgICAgICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgR1BJT19QSU4wX1dBS0VVUF9FTkFCTEVfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOMF9XQUtFVVBfRU5BQkxFX01BU0spID4+IEdQSU9fUElOMF9XQUtFVVBfRU5BQkxFX0xTQikKLSNkZWZpbmUgR1BJT19QSU4wX1dBS0VVUF9FTkFCTEVfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjBfV0FLRVVQX0VOQUJMRV9MU0IpICYgR1BJT19QSU4wX1dBS0VVUF9FTkFCTEVfTUFTSykKLSNkZWZpbmUgR1BJT19QSU4wX0lOVF9UWVBFX01TQiAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIEdQSU9fUElOMF9JTlRfVFlQRV9MU0IgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBHUElPX1BJTjBfSU5UX1RZUEVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMDAzODAKLSNkZWZpbmUgR1BJT19QSU4wX0lOVF9UWVBFX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOMF9JTlRfVFlQRV9NQVNLKSA+PiBHUElPX1BJTjBfSU5UX1RZUEVfTFNCKQotI2RlZmluZSBHUElPX1BJTjBfSU5UX1RZUEVfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IEdQSU9fUElOMF9JTlRfVFlQRV9MU0IpICYgR1BJT19QSU4wX0lOVF9UWVBFX01BU0spCi0jZGVmaW5lIEdQSU9fUElOMF9QQURfRFJJVkVSX01TQiAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBHUElPX1BJTjBfUEFEX0RSSVZFUl9MU0IgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgR1BJT19QSU4wX1BBRF9EUklWRVJfTUFTSyAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIEdQSU9fUElOMF9QQURfRFJJVkVSX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiBHUElPX1BJTjBfUEFEX0RSSVZFUl9NQVNLKSA+PiBHUElPX1BJTjBfUEFEX0RSSVZFUl9MU0IpCi0jZGVmaW5lIEdQSU9fUElOMF9QQURfRFJJVkVSX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU4wX1BBRF9EUklWRVJfTFNCKSAmIEdQSU9fUElOMF9QQURfRFJJVkVSX01BU0spCi0jZGVmaW5lIEdQSU9fUElOMF9TT1VSQ0VfTVNCICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBHUElPX1BJTjBfU09VUkNFX0xTQiAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgR1BJT19QSU4wX1NPVVJDRV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIEdQSU9fUElOMF9TT1VSQ0VfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiBHUElPX1BJTjBfU09VUkNFX01BU0spID4+IEdQSU9fUElOMF9TT1VSQ0VfTFNCKQotI2RlZmluZSBHUElPX1BJTjBfU09VUkNFX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IEdQSU9fUElOMF9TT1VSQ0VfTFNCKSAmIEdQSU9fUElOMF9TT1VSQ0VfTUFTSykKLQotI2RlZmluZSBHUElPX1BJTjFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMmMKLSNkZWZpbmUgR1BJT19QSU4xX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJjCi0jZGVmaW5lIEdQSU9fUElOMV9DT05GSUdfTVNCICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgR1BJT19QSU4xX0NPTkZJR19MU0IgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBHUElPX1BJTjFfQ09ORklHX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE4MDAKLSNkZWZpbmUgR1BJT19QSU4xX0NPTkZJR19HRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOMV9DT05GSUdfTUFTSykgPj4gR1BJT19QSU4xX0NPTkZJR19MU0IpCi0jZGVmaW5lIEdQSU9fUElOMV9DT05GSUdfU0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU4xX0NPTkZJR19MU0IpICYgR1BJT19QSU4xX0NPTkZJR19NQVNLKQotI2RlZmluZSBHUElPX1BJTjFfV0FLRVVQX0VOQUJMRV9NU0IgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIEdQSU9fUElOMV9XQUtFVVBfRU5BQkxFX0xTQiAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgR1BJT19QSU4xX1dBS0VVUF9FTkFCTEVfTUFTSyAgICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIEdQSU9fUElOMV9XQUtFVVBfRU5BQkxFX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBHUElPX1BJTjFfV0FLRVVQX0VOQUJMRV9NQVNLKSA+PiBHUElPX1BJTjFfV0FLRVVQX0VOQUJMRV9MU0IpCi0jZGVmaW5lIEdQSU9fUElOMV9XQUtFVVBfRU5BQkxFX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU4xX1dBS0VVUF9FTkFCTEVfTFNCKSAmIEdQSU9fUElOMV9XQUtFVVBfRU5BQkxFX01BU0spCi0jZGVmaW5lIEdQSU9fUElOMV9JTlRfVFlQRV9NU0IgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBHUElPX1BJTjFfSU5UX1RZUEVfTFNCICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgR1BJT19QSU4xX0lOVF9UWVBFX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDAwMzgwCi0jZGVmaW5lIEdQSU9fUElOMV9JTlRfVFlQRV9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiBHUElPX1BJTjFfSU5UX1RZUEVfTUFTSykgPj4gR1BJT19QSU4xX0lOVF9UWVBFX0xTQikKLSNkZWZpbmUgR1BJT19QSU4xX0lOVF9UWVBFX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjFfSU5UX1RZUEVfTFNCKSAmIEdQSU9fUElOMV9JTlRfVFlQRV9NQVNLKQotI2RlZmluZSBHUElPX1BJTjFfUEFEX0RSSVZFUl9NU0IgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgR1BJT19QSU4xX1BBRF9EUklWRVJfTFNCICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIEdQSU9fUElOMV9QQURfRFJJVkVSX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBHUElPX1BJTjFfUEFEX0RSSVZFUl9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgR1BJT19QSU4xX1BBRF9EUklWRVJfTUFTSykgPj4gR1BJT19QSU4xX1BBRF9EUklWRVJfTFNCKQotI2RlZmluZSBHUElPX1BJTjFfUEFEX0RSSVZFUl9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IEdQSU9fUElOMV9QQURfRFJJVkVSX0xTQikgJiBHUElPX1BJTjFfUEFEX0RSSVZFUl9NQVNLKQotI2RlZmluZSBHUElPX1BJTjFfU09VUkNFX01TQiAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgR1BJT19QSU4xX1NPVVJDRV9MU0IgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEdQSU9fUElOMV9TT1VSQ0VfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBHUElPX1BJTjFfU09VUkNFX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgR1BJT19QSU4xX1NPVVJDRV9NQVNLKSA+PiBHUElPX1BJTjFfU09VUkNFX0xTQikKLSNkZWZpbmUgR1BJT19QSU4xX1NPVVJDRV9TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjFfU09VUkNFX0xTQikgJiBHUElPX1BJTjFfU09VUkNFX01BU0spCi0KLSNkZWZpbmUgR1BJT19QSU4yX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCi0jZGVmaW5lIEdQSU9fUElOMl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAotI2RlZmluZSBHUElPX1BJTjJfQ09ORklHX01TQiAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIEdQSU9fUElOMl9DT05GSUdfTFNCICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgR1BJT19QSU4yX0NPTkZJR19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDAxODAwCi0jZGVmaW5lIEdQSU9fUElOMl9DT05GSUdfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiBHUElPX1BJTjJfQ09ORklHX01BU0spID4+IEdQSU9fUElOMl9DT05GSUdfTFNCKQotI2RlZmluZSBHUElPX1BJTjJfQ09ORklHX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IEdQSU9fUElOMl9DT05GSUdfTFNCKSAmIEdQSU9fUElOMl9DT05GSUdfTUFTSykKLSNkZWZpbmUgR1BJT19QSU4yX1dBS0VVUF9FTkFCTEVfTVNCICAgICAgICAgICAgICAxMAotI2RlZmluZSBHUElPX1BJTjJfV0FLRVVQX0VOQUJMRV9MU0IgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIEdQSU9fUElOMl9XQUtFVVBfRU5BQkxFX01BU0sgICAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBHUElPX1BJTjJfV0FLRVVQX0VOQUJMRV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgR1BJT19QSU4yX1dBS0VVUF9FTkFCTEVfTUFTSykgPj4gR1BJT19QSU4yX1dBS0VVUF9FTkFCTEVfTFNCKQotI2RlZmluZSBHUElPX1BJTjJfV0FLRVVQX0VOQUJMRV9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IEdQSU9fUElOMl9XQUtFVVBfRU5BQkxFX0xTQikgJiBHUElPX1BJTjJfV0FLRVVQX0VOQUJMRV9NQVNLKQotI2RlZmluZSBHUElPX1BJTjJfSU5UX1RZUEVfTVNCICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgR1BJT19QSU4yX0lOVF9UWVBFX0xTQiAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIEdQSU9fUElOMl9JTlRfVFlQRV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAwMDM4MAotI2RlZmluZSBHUElPX1BJTjJfSU5UX1RZUEVfR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgR1BJT19QSU4yX0lOVF9UWVBFX01BU0spID4+IEdQSU9fUElOMl9JTlRfVFlQRV9MU0IpCi0jZGVmaW5lIEdQSU9fUElOMl9JTlRfVFlQRV9TRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU4yX0lOVF9UWVBFX0xTQikgJiBHUElPX1BJTjJfSU5UX1RZUEVfTUFTSykKLSNkZWZpbmUgR1BJT19QSU4yX1BBRF9EUklWRVJfTVNCICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIEdQSU9fUElOMl9QQURfRFJJVkVSX0xTQiAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBHUElPX1BJTjJfUEFEX0RSSVZFUl9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgR1BJT19QSU4yX1BBRF9EUklWRVJfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOMl9QQURfRFJJVkVSX01BU0spID4+IEdQSU9fUElOMl9QQURfRFJJVkVSX0xTQikKLSNkZWZpbmUgR1BJT19QSU4yX1BBRF9EUklWRVJfU0VUKHgpICAgICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjJfUEFEX0RSSVZFUl9MU0IpICYgR1BJT19QSU4yX1BBRF9EUklWRVJfTUFTSykKLSNkZWZpbmUgR1BJT19QSU4yX1NPVVJDRV9NU0IgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEdQSU9fUElOMl9TT1VSQ0VfTFNCICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBHUElPX1BJTjJfU09VUkNFX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgR1BJT19QSU4yX1NPVVJDRV9HRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOMl9TT1VSQ0VfTUFTSykgPj4gR1BJT19QSU4yX1NPVVJDRV9MU0IpCi0jZGVmaW5lIEdQSU9fUElOMl9TT1VSQ0VfU0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU4yX1NPVVJDRV9MU0IpICYgR1BJT19QSU4yX1NPVVJDRV9NQVNLKQotCi0jZGVmaW5lIEdQSU9fUElOM19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAotI2RlZmluZSBHUElPX1BJTjNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKLSNkZWZpbmUgR1BJT19QSU4zX0NPTkZJR19NU0IgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBHUElPX1BJTjNfQ09ORklHX0xTQiAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIEdQSU9fUElOM19DT05GSUdfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTgwMAotI2RlZmluZSBHUElPX1BJTjNfQ09ORklHX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgR1BJT19QSU4zX0NPTkZJR19NQVNLKSA+PiBHUElPX1BJTjNfQ09ORklHX0xTQikKLSNkZWZpbmUgR1BJT19QSU4zX0NPTkZJR19TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjNfQ09ORklHX0xTQikgJiBHUElPX1BJTjNfQ09ORklHX01BU0spCi0jZGVmaW5lIEdQSU9fUElOM19XQUtFVVBfRU5BQkxFX01TQiAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgR1BJT19QSU4zX1dBS0VVUF9FTkFCTEVfTFNCICAgICAgICAgICAgICAxMAotI2RlZmluZSBHUElPX1BJTjNfV0FLRVVQX0VOQUJMRV9NQVNLICAgICAgICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgR1BJT19QSU4zX1dBS0VVUF9FTkFCTEVfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOM19XQUtFVVBfRU5BQkxFX01BU0spID4+IEdQSU9fUElOM19XQUtFVVBfRU5BQkxFX0xTQikKLSNkZWZpbmUgR1BJT19QSU4zX1dBS0VVUF9FTkFCTEVfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjNfV0FLRVVQX0VOQUJMRV9MU0IpICYgR1BJT19QSU4zX1dBS0VVUF9FTkFCTEVfTUFTSykKLSNkZWZpbmUgR1BJT19QSU4zX0lOVF9UWVBFX01TQiAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIEdQSU9fUElOM19JTlRfVFlQRV9MU0IgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBHUElPX1BJTjNfSU5UX1RZUEVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMDAzODAKLSNkZWZpbmUgR1BJT19QSU4zX0lOVF9UWVBFX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOM19JTlRfVFlQRV9NQVNLKSA+PiBHUElPX1BJTjNfSU5UX1RZUEVfTFNCKQotI2RlZmluZSBHUElPX1BJTjNfSU5UX1RZUEVfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IEdQSU9fUElOM19JTlRfVFlQRV9MU0IpICYgR1BJT19QSU4zX0lOVF9UWVBFX01BU0spCi0jZGVmaW5lIEdQSU9fUElOM19QQURfRFJJVkVSX01TQiAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBHUElPX1BJTjNfUEFEX0RSSVZFUl9MU0IgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgR1BJT19QSU4zX1BBRF9EUklWRVJfTUFTSyAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIEdQSU9fUElOM19QQURfRFJJVkVSX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiBHUElPX1BJTjNfUEFEX0RSSVZFUl9NQVNLKSA+PiBHUElPX1BJTjNfUEFEX0RSSVZFUl9MU0IpCi0jZGVmaW5lIEdQSU9fUElOM19QQURfRFJJVkVSX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU4zX1BBRF9EUklWRVJfTFNCKSAmIEdQSU9fUElOM19QQURfRFJJVkVSX01BU0spCi0jZGVmaW5lIEdQSU9fUElOM19TT1VSQ0VfTVNCICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBHUElPX1BJTjNfU09VUkNFX0xTQiAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgR1BJT19QSU4zX1NPVVJDRV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIEdQSU9fUElOM19TT1VSQ0VfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiBHUElPX1BJTjNfU09VUkNFX01BU0spID4+IEdQSU9fUElOM19TT1VSQ0VfTFNCKQotI2RlZmluZSBHUElPX1BJTjNfU09VUkNFX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IEdQSU9fUElOM19TT1VSQ0VfTFNCKSAmIEdQSU9fUElOM19TT1VSQ0VfTUFTSykKLQotI2RlZmluZSBHUElPX1BJTjRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKLSNkZWZpbmUgR1BJT19QSU40X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4Ci0jZGVmaW5lIEdQSU9fUElONF9DT05GSUdfTVNCICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgR1BJT19QSU40X0NPTkZJR19MU0IgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBHUElPX1BJTjRfQ09ORklHX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE4MDAKLSNkZWZpbmUgR1BJT19QSU40X0NPTkZJR19HRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElONF9DT05GSUdfTUFTSykgPj4gR1BJT19QSU40X0NPTkZJR19MU0IpCi0jZGVmaW5lIEdQSU9fUElONF9DT05GSUdfU0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU40X0NPTkZJR19MU0IpICYgR1BJT19QSU40X0NPTkZJR19NQVNLKQotI2RlZmluZSBHUElPX1BJTjRfV0FLRVVQX0VOQUJMRV9NU0IgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIEdQSU9fUElONF9XQUtFVVBfRU5BQkxFX0xTQiAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgR1BJT19QSU40X1dBS0VVUF9FTkFCTEVfTUFTSyAgICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIEdQSU9fUElONF9XQUtFVVBfRU5BQkxFX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBHUElPX1BJTjRfV0FLRVVQX0VOQUJMRV9NQVNLKSA+PiBHUElPX1BJTjRfV0FLRVVQX0VOQUJMRV9MU0IpCi0jZGVmaW5lIEdQSU9fUElONF9XQUtFVVBfRU5BQkxFX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU40X1dBS0VVUF9FTkFCTEVfTFNCKSAmIEdQSU9fUElONF9XQUtFVVBfRU5BQkxFX01BU0spCi0jZGVmaW5lIEdQSU9fUElONF9JTlRfVFlQRV9NU0IgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBHUElPX1BJTjRfSU5UX1RZUEVfTFNCICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgR1BJT19QSU40X0lOVF9UWVBFX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDAwMzgwCi0jZGVmaW5lIEdQSU9fUElONF9JTlRfVFlQRV9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiBHUElPX1BJTjRfSU5UX1RZUEVfTUFTSykgPj4gR1BJT19QSU40X0lOVF9UWVBFX0xTQikKLSNkZWZpbmUgR1BJT19QSU40X0lOVF9UWVBFX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjRfSU5UX1RZUEVfTFNCKSAmIEdQSU9fUElONF9JTlRfVFlQRV9NQVNLKQotI2RlZmluZSBHUElPX1BJTjRfUEFEX0RSSVZFUl9NU0IgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgR1BJT19QSU40X1BBRF9EUklWRVJfTFNCICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIEdQSU9fUElONF9QQURfRFJJVkVSX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBHUElPX1BJTjRfUEFEX0RSSVZFUl9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgR1BJT19QSU40X1BBRF9EUklWRVJfTUFTSykgPj4gR1BJT19QSU40X1BBRF9EUklWRVJfTFNCKQotI2RlZmluZSBHUElPX1BJTjRfUEFEX0RSSVZFUl9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IEdQSU9fUElONF9QQURfRFJJVkVSX0xTQikgJiBHUElPX1BJTjRfUEFEX0RSSVZFUl9NQVNLKQotI2RlZmluZSBHUElPX1BJTjRfU09VUkNFX01TQiAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgR1BJT19QSU40X1NPVVJDRV9MU0IgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEdQSU9fUElONF9TT1VSQ0VfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBHUElPX1BJTjRfU09VUkNFX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgR1BJT19QSU40X1NPVVJDRV9NQVNLKSA+PiBHUElPX1BJTjRfU09VUkNFX0xTQikKLSNkZWZpbmUgR1BJT19QSU40X1NPVVJDRV9TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjRfU09VUkNFX0xTQikgJiBHUElPX1BJTjRfU09VUkNFX01BU0spCi0KLSNkZWZpbmUgR1BJT19QSU41X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNjCi0jZGVmaW5lIEdQSU9fUElONV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzYwotI2RlZmluZSBHUElPX1BJTjVfQ09ORklHX01TQiAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIEdQSU9fUElONV9DT05GSUdfTFNCICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgR1BJT19QSU41X0NPTkZJR19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDAxODAwCi0jZGVmaW5lIEdQSU9fUElONV9DT05GSUdfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiBHUElPX1BJTjVfQ09ORklHX01BU0spID4+IEdQSU9fUElONV9DT05GSUdfTFNCKQotI2RlZmluZSBHUElPX1BJTjVfQ09ORklHX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IEdQSU9fUElONV9DT05GSUdfTFNCKSAmIEdQSU9fUElONV9DT05GSUdfTUFTSykKLSNkZWZpbmUgR1BJT19QSU41X1dBS0VVUF9FTkFCTEVfTVNCICAgICAgICAgICAgICAxMAotI2RlZmluZSBHUElPX1BJTjVfV0FLRVVQX0VOQUJMRV9MU0IgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIEdQSU9fUElONV9XQUtFVVBfRU5BQkxFX01BU0sgICAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBHUElPX1BJTjVfV0FLRVVQX0VOQUJMRV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgR1BJT19QSU41X1dBS0VVUF9FTkFCTEVfTUFTSykgPj4gR1BJT19QSU41X1dBS0VVUF9FTkFCTEVfTFNCKQotI2RlZmluZSBHUElPX1BJTjVfV0FLRVVQX0VOQUJMRV9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IEdQSU9fUElONV9XQUtFVVBfRU5BQkxFX0xTQikgJiBHUElPX1BJTjVfV0FLRVVQX0VOQUJMRV9NQVNLKQotI2RlZmluZSBHUElPX1BJTjVfSU5UX1RZUEVfTVNCICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgR1BJT19QSU41X0lOVF9UWVBFX0xTQiAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIEdQSU9fUElONV9JTlRfVFlQRV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAwMDM4MAotI2RlZmluZSBHUElPX1BJTjVfSU5UX1RZUEVfR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgR1BJT19QSU41X0lOVF9UWVBFX01BU0spID4+IEdQSU9fUElONV9JTlRfVFlQRV9MU0IpCi0jZGVmaW5lIEdQSU9fUElONV9JTlRfVFlQRV9TRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU41X0lOVF9UWVBFX0xTQikgJiBHUElPX1BJTjVfSU5UX1RZUEVfTUFTSykKLSNkZWZpbmUgR1BJT19QSU41X1BBRF9EUklWRVJfTVNCICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIEdQSU9fUElONV9QQURfRFJJVkVSX0xTQiAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBHUElPX1BJTjVfUEFEX0RSSVZFUl9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgR1BJT19QSU41X1BBRF9EUklWRVJfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElONV9QQURfRFJJVkVSX01BU0spID4+IEdQSU9fUElONV9QQURfRFJJVkVSX0xTQikKLSNkZWZpbmUgR1BJT19QSU41X1BBRF9EUklWRVJfU0VUKHgpICAgICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjVfUEFEX0RSSVZFUl9MU0IpICYgR1BJT19QSU41X1BBRF9EUklWRVJfTUFTSykKLSNkZWZpbmUgR1BJT19QSU41X1NPVVJDRV9NU0IgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEdQSU9fUElONV9TT1VSQ0VfTFNCICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBHUElPX1BJTjVfU09VUkNFX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgR1BJT19QSU41X1NPVVJDRV9HRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElONV9TT1VSQ0VfTUFTSykgPj4gR1BJT19QSU41X1NPVVJDRV9MU0IpCi0jZGVmaW5lIEdQSU9fUElONV9TT1VSQ0VfU0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU41X1NPVVJDRV9MU0IpICYgR1BJT19QSU41X1NPVVJDRV9NQVNLKQotCi0jZGVmaW5lIEdQSU9fUElONl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAotI2RlZmluZSBHUElPX1BJTjZfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgR1BJT19QSU42X0NPTkZJR19NU0IgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBHUElPX1BJTjZfQ09ORklHX0xTQiAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIEdQSU9fUElONl9DT05GSUdfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTgwMAotI2RlZmluZSBHUElPX1BJTjZfQ09ORklHX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgR1BJT19QSU42X0NPTkZJR19NQVNLKSA+PiBHUElPX1BJTjZfQ09ORklHX0xTQikKLSNkZWZpbmUgR1BJT19QSU42X0NPTkZJR19TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjZfQ09ORklHX0xTQikgJiBHUElPX1BJTjZfQ09ORklHX01BU0spCi0jZGVmaW5lIEdQSU9fUElONl9XQUtFVVBfRU5BQkxFX01TQiAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgR1BJT19QSU42X1dBS0VVUF9FTkFCTEVfTFNCICAgICAgICAgICAgICAxMAotI2RlZmluZSBHUElPX1BJTjZfV0FLRVVQX0VOQUJMRV9NQVNLICAgICAgICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgR1BJT19QSU42X1dBS0VVUF9FTkFCTEVfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElONl9XQUtFVVBfRU5BQkxFX01BU0spID4+IEdQSU9fUElONl9XQUtFVVBfRU5BQkxFX0xTQikKLSNkZWZpbmUgR1BJT19QSU42X1dBS0VVUF9FTkFCTEVfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjZfV0FLRVVQX0VOQUJMRV9MU0IpICYgR1BJT19QSU42X1dBS0VVUF9FTkFCTEVfTUFTSykKLSNkZWZpbmUgR1BJT19QSU42X0lOVF9UWVBFX01TQiAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIEdQSU9fUElONl9JTlRfVFlQRV9MU0IgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBHUElPX1BJTjZfSU5UX1RZUEVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMDAzODAKLSNkZWZpbmUgR1BJT19QSU42X0lOVF9UWVBFX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElONl9JTlRfVFlQRV9NQVNLKSA+PiBHUElPX1BJTjZfSU5UX1RZUEVfTFNCKQotI2RlZmluZSBHUElPX1BJTjZfSU5UX1RZUEVfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IEdQSU9fUElONl9JTlRfVFlQRV9MU0IpICYgR1BJT19QSU42X0lOVF9UWVBFX01BU0spCi0jZGVmaW5lIEdQSU9fUElONl9QQURfRFJJVkVSX01TQiAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBHUElPX1BJTjZfUEFEX0RSSVZFUl9MU0IgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgR1BJT19QSU42X1BBRF9EUklWRVJfTUFTSyAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIEdQSU9fUElONl9QQURfRFJJVkVSX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiBHUElPX1BJTjZfUEFEX0RSSVZFUl9NQVNLKSA+PiBHUElPX1BJTjZfUEFEX0RSSVZFUl9MU0IpCi0jZGVmaW5lIEdQSU9fUElONl9QQURfRFJJVkVSX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU42X1BBRF9EUklWRVJfTFNCKSAmIEdQSU9fUElONl9QQURfRFJJVkVSX01BU0spCi0jZGVmaW5lIEdQSU9fUElONl9TT1VSQ0VfTVNCICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBHUElPX1BJTjZfU09VUkNFX0xTQiAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgR1BJT19QSU42X1NPVVJDRV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIEdQSU9fUElONl9TT1VSQ0VfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiBHUElPX1BJTjZfU09VUkNFX01BU0spID4+IEdQSU9fUElONl9TT1VSQ0VfTFNCKQotI2RlZmluZSBHUElPX1BJTjZfU09VUkNFX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IEdQSU9fUElONl9TT1VSQ0VfTFNCKSAmIEdQSU9fUElONl9TT1VSQ0VfTUFTSykKLQotI2RlZmluZSBHUElPX1BJTjdfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDQKLSNkZWZpbmUgR1BJT19QSU43X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ0Ci0jZGVmaW5lIEdQSU9fUElON19DT05GSUdfTVNCICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgR1BJT19QSU43X0NPTkZJR19MU0IgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBHUElPX1BJTjdfQ09ORklHX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE4MDAKLSNkZWZpbmUgR1BJT19QSU43X0NPTkZJR19HRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElON19DT05GSUdfTUFTSykgPj4gR1BJT19QSU43X0NPTkZJR19MU0IpCi0jZGVmaW5lIEdQSU9fUElON19DT05GSUdfU0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU43X0NPTkZJR19MU0IpICYgR1BJT19QSU43X0NPTkZJR19NQVNLKQotI2RlZmluZSBHUElPX1BJTjdfV0FLRVVQX0VOQUJMRV9NU0IgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIEdQSU9fUElON19XQUtFVVBfRU5BQkxFX0xTQiAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgR1BJT19QSU43X1dBS0VVUF9FTkFCTEVfTUFTSyAgICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIEdQSU9fUElON19XQUtFVVBfRU5BQkxFX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBHUElPX1BJTjdfV0FLRVVQX0VOQUJMRV9NQVNLKSA+PiBHUElPX1BJTjdfV0FLRVVQX0VOQUJMRV9MU0IpCi0jZGVmaW5lIEdQSU9fUElON19XQUtFVVBfRU5BQkxFX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU43X1dBS0VVUF9FTkFCTEVfTFNCKSAmIEdQSU9fUElON19XQUtFVVBfRU5BQkxFX01BU0spCi0jZGVmaW5lIEdQSU9fUElON19JTlRfVFlQRV9NU0IgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBHUElPX1BJTjdfSU5UX1RZUEVfTFNCICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgR1BJT19QSU43X0lOVF9UWVBFX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDAwMzgwCi0jZGVmaW5lIEdQSU9fUElON19JTlRfVFlQRV9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiBHUElPX1BJTjdfSU5UX1RZUEVfTUFTSykgPj4gR1BJT19QSU43X0lOVF9UWVBFX0xTQikKLSNkZWZpbmUgR1BJT19QSU43X0lOVF9UWVBFX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjdfSU5UX1RZUEVfTFNCKSAmIEdQSU9fUElON19JTlRfVFlQRV9NQVNLKQotI2RlZmluZSBHUElPX1BJTjdfUEFEX0RSSVZFUl9NU0IgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgR1BJT19QSU43X1BBRF9EUklWRVJfTFNCICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIEdQSU9fUElON19QQURfRFJJVkVSX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBHUElPX1BJTjdfUEFEX0RSSVZFUl9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgR1BJT19QSU43X1BBRF9EUklWRVJfTUFTSykgPj4gR1BJT19QSU43X1BBRF9EUklWRVJfTFNCKQotI2RlZmluZSBHUElPX1BJTjdfUEFEX0RSSVZFUl9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IEdQSU9fUElON19QQURfRFJJVkVSX0xTQikgJiBHUElPX1BJTjdfUEFEX0RSSVZFUl9NQVNLKQotI2RlZmluZSBHUElPX1BJTjdfU09VUkNFX01TQiAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgR1BJT19QSU43X1NPVVJDRV9MU0IgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEdQSU9fUElON19TT1VSQ0VfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBHUElPX1BJTjdfU09VUkNFX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgR1BJT19QSU43X1NPVVJDRV9NQVNLKSA+PiBHUElPX1BJTjdfU09VUkNFX0xTQikKLSNkZWZpbmUgR1BJT19QSU43X1NPVVJDRV9TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjdfU09VUkNFX0xTQikgJiBHUElPX1BJTjdfU09VUkNFX01BU0spCi0KLSNkZWZpbmUgR1BJT19QSU44X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ4Ci0jZGVmaW5lIEdQSU9fUElOOF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0OAotI2RlZmluZSBHUElPX1BJTjhfQ09ORklHX01TQiAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIEdQSU9fUElOOF9DT05GSUdfTFNCICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgR1BJT19QSU44X0NPTkZJR19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDAxODAwCi0jZGVmaW5lIEdQSU9fUElOOF9DT05GSUdfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiBHUElPX1BJTjhfQ09ORklHX01BU0spID4+IEdQSU9fUElOOF9DT05GSUdfTFNCKQotI2RlZmluZSBHUElPX1BJTjhfQ09ORklHX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IEdQSU9fUElOOF9DT05GSUdfTFNCKSAmIEdQSU9fUElOOF9DT05GSUdfTUFTSykKLSNkZWZpbmUgR1BJT19QSU44X1dBS0VVUF9FTkFCTEVfTVNCICAgICAgICAgICAgICAxMAotI2RlZmluZSBHUElPX1BJTjhfV0FLRVVQX0VOQUJMRV9MU0IgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIEdQSU9fUElOOF9XQUtFVVBfRU5BQkxFX01BU0sgICAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBHUElPX1BJTjhfV0FLRVVQX0VOQUJMRV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgR1BJT19QSU44X1dBS0VVUF9FTkFCTEVfTUFTSykgPj4gR1BJT19QSU44X1dBS0VVUF9FTkFCTEVfTFNCKQotI2RlZmluZSBHUElPX1BJTjhfV0FLRVVQX0VOQUJMRV9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IEdQSU9fUElOOF9XQUtFVVBfRU5BQkxFX0xTQikgJiBHUElPX1BJTjhfV0FLRVVQX0VOQUJMRV9NQVNLKQotI2RlZmluZSBHUElPX1BJTjhfSU5UX1RZUEVfTVNCICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgR1BJT19QSU44X0lOVF9UWVBFX0xTQiAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIEdQSU9fUElOOF9JTlRfVFlQRV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAwMDM4MAotI2RlZmluZSBHUElPX1BJTjhfSU5UX1RZUEVfR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgR1BJT19QSU44X0lOVF9UWVBFX01BU0spID4+IEdQSU9fUElOOF9JTlRfVFlQRV9MU0IpCi0jZGVmaW5lIEdQSU9fUElOOF9JTlRfVFlQRV9TRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU44X0lOVF9UWVBFX0xTQikgJiBHUElPX1BJTjhfSU5UX1RZUEVfTUFTSykKLSNkZWZpbmUgR1BJT19QSU44X1BBRF9EUklWRVJfTVNCICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIEdQSU9fUElOOF9QQURfRFJJVkVSX0xTQiAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBHUElPX1BJTjhfUEFEX0RSSVZFUl9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgR1BJT19QSU44X1BBRF9EUklWRVJfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOOF9QQURfRFJJVkVSX01BU0spID4+IEdQSU9fUElOOF9QQURfRFJJVkVSX0xTQikKLSNkZWZpbmUgR1BJT19QSU44X1BBRF9EUklWRVJfU0VUKHgpICAgICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjhfUEFEX0RSSVZFUl9MU0IpICYgR1BJT19QSU44X1BBRF9EUklWRVJfTUFTSykKLSNkZWZpbmUgR1BJT19QSU44X1NPVVJDRV9NU0IgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEdQSU9fUElOOF9TT1VSQ0VfTFNCICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBHUElPX1BJTjhfU09VUkNFX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgR1BJT19QSU44X1NPVVJDRV9HRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOOF9TT1VSQ0VfTUFTSykgPj4gR1BJT19QSU44X1NPVVJDRV9MU0IpCi0jZGVmaW5lIEdQSU9fUElOOF9TT1VSQ0VfU0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU44X1NPVVJDRV9MU0IpICYgR1BJT19QSU44X1NPVVJDRV9NQVNLKQotCi0jZGVmaW5lIEdQSU9fUElOOV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0YwotI2RlZmluZSBHUElPX1BJTjlfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNGMKLSNkZWZpbmUgR1BJT19QSU45X0NPTkZJR19NU0IgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBHUElPX1BJTjlfQ09ORklHX0xTQiAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIEdQSU9fUElOOV9DT05GSUdfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTgwMAotI2RlZmluZSBHUElPX1BJTjlfQ09ORklHX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgR1BJT19QSU45X0NPTkZJR19NQVNLKSA+PiBHUElPX1BJTjlfQ09ORklHX0xTQikKLSNkZWZpbmUgR1BJT19QSU45X0NPTkZJR19TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjlfQ09ORklHX0xTQikgJiBHUElPX1BJTjlfQ09ORklHX01BU0spCi0jZGVmaW5lIEdQSU9fUElOOV9XQUtFVVBfRU5BQkxFX01TQiAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgR1BJT19QSU45X1dBS0VVUF9FTkFCTEVfTFNCICAgICAgICAgICAgICAxMAotI2RlZmluZSBHUElPX1BJTjlfV0FLRVVQX0VOQUJMRV9NQVNLICAgICAgICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgR1BJT19QSU45X1dBS0VVUF9FTkFCTEVfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOOV9XQUtFVVBfRU5BQkxFX01BU0spID4+IEdQSU9fUElOOV9XQUtFVVBfRU5BQkxFX0xTQikKLSNkZWZpbmUgR1BJT19QSU45X1dBS0VVUF9FTkFCTEVfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjlfV0FLRVVQX0VOQUJMRV9MU0IpICYgR1BJT19QSU45X1dBS0VVUF9FTkFCTEVfTUFTSykKLSNkZWZpbmUgR1BJT19QSU45X0lOVF9UWVBFX01TQiAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIEdQSU9fUElOOV9JTlRfVFlQRV9MU0IgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBHUElPX1BJTjlfSU5UX1RZUEVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMDAzODAKLSNkZWZpbmUgR1BJT19QSU45X0lOVF9UWVBFX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOOV9JTlRfVFlQRV9NQVNLKSA+PiBHUElPX1BJTjlfSU5UX1RZUEVfTFNCKQotI2RlZmluZSBHUElPX1BJTjlfSU5UX1RZUEVfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IEdQSU9fUElOOV9JTlRfVFlQRV9MU0IpICYgR1BJT19QSU45X0lOVF9UWVBFX01BU0spCi0jZGVmaW5lIEdQSU9fUElOOV9QQURfRFJJVkVSX01TQiAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBHUElPX1BJTjlfUEFEX0RSSVZFUl9MU0IgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgR1BJT19QSU45X1BBRF9EUklWRVJfTUFTSyAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIEdQSU9fUElOOV9QQURfRFJJVkVSX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiBHUElPX1BJTjlfUEFEX0RSSVZFUl9NQVNLKSA+PiBHUElPX1BJTjlfUEFEX0RSSVZFUl9MU0IpCi0jZGVmaW5lIEdQSU9fUElOOV9QQURfRFJJVkVSX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU45X1BBRF9EUklWRVJfTFNCKSAmIEdQSU9fUElOOV9QQURfRFJJVkVSX01BU0spCi0jZGVmaW5lIEdQSU9fUElOOV9TT1VSQ0VfTVNCICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBHUElPX1BJTjlfU09VUkNFX0xTQiAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgR1BJT19QSU45X1NPVVJDRV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIEdQSU9fUElOOV9TT1VSQ0VfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiBHUElPX1BJTjlfU09VUkNFX01BU0spID4+IEdQSU9fUElOOV9TT1VSQ0VfTFNCKQotI2RlZmluZSBHUElPX1BJTjlfU09VUkNFX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IEdQSU9fUElOOV9TT1VSQ0VfTFNCKSAmIEdQSU9fUElOOV9TT1VSQ0VfTUFTSykKLQotI2RlZmluZSBHUElPX1BJTjEwX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTAKLSNkZWZpbmUgR1BJT19QSU4xMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUwCi0jZGVmaW5lIEdQSU9fUElOMTBfQ09ORklHX01TQiAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgR1BJT19QSU4xMF9DT05GSUdfTFNCICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBHUElPX1BJTjEwX0NPTkZJR19NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDE4MDAKLSNkZWZpbmUgR1BJT19QSU4xMF9DT05GSUdfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOMTBfQ09ORklHX01BU0spID4+IEdQSU9fUElOMTBfQ09ORklHX0xTQikKLSNkZWZpbmUgR1BJT19QSU4xMF9DT05GSUdfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjEwX0NPTkZJR19MU0IpICYgR1BJT19QSU4xMF9DT05GSUdfTUFTSykKLSNkZWZpbmUgR1BJT19QSU4xMF9XQUtFVVBfRU5BQkxFX01TQiAgICAgICAgICAgICAxMAotI2RlZmluZSBHUElPX1BJTjEwX1dBS0VVUF9FTkFCTEVfTFNCICAgICAgICAgICAgIDEwCi0jZGVmaW5lIEdQSU9fUElOMTBfV0FLRVVQX0VOQUJMRV9NQVNLICAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBHUElPX1BJTjEwX1dBS0VVUF9FTkFCTEVfR0VUKHgpICAgICAgICAgICgoKHgpICYgR1BJT19QSU4xMF9XQUtFVVBfRU5BQkxFX01BU0spID4+IEdQSU9fUElOMTBfV0FLRVVQX0VOQUJMRV9MU0IpCi0jZGVmaW5lIEdQSU9fUElOMTBfV0FLRVVQX0VOQUJMRV9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU4xMF9XQUtFVVBfRU5BQkxFX0xTQikgJiBHUElPX1BJTjEwX1dBS0VVUF9FTkFCTEVfTUFTSykKLSNkZWZpbmUgR1BJT19QSU4xMF9JTlRfVFlQRV9NU0IgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIEdQSU9fUElOMTBfSU5UX1RZUEVfTFNCICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBHUElPX1BJTjEwX0lOVF9UWVBFX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAzODAKLSNkZWZpbmUgR1BJT19QSU4xMF9JTlRfVFlQRV9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOMTBfSU5UX1RZUEVfTUFTSykgPj4gR1BJT19QSU4xMF9JTlRfVFlQRV9MU0IpCi0jZGVmaW5lIEdQSU9fUElOMTBfSU5UX1RZUEVfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU4xMF9JTlRfVFlQRV9MU0IpICYgR1BJT19QSU4xMF9JTlRfVFlQRV9NQVNLKQotI2RlZmluZSBHUElPX1BJTjEwX1BBRF9EUklWRVJfTVNCICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgR1BJT19QSU4xMF9QQURfRFJJVkVSX0xTQiAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIEdQSU9fUElOMTBfUEFEX0RSSVZFUl9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBHUElPX1BJTjEwX1BBRF9EUklWRVJfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgR1BJT19QSU4xMF9QQURfRFJJVkVSX01BU0spID4+IEdQSU9fUElOMTBfUEFEX0RSSVZFUl9MU0IpCi0jZGVmaW5lIEdQSU9fUElOMTBfUEFEX0RSSVZFUl9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU4xMF9QQURfRFJJVkVSX0xTQikgJiBHUElPX1BJTjEwX1BBRF9EUklWRVJfTUFTSykKLSNkZWZpbmUgR1BJT19QSU4xMF9TT1VSQ0VfTVNCICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEdQSU9fUElOMTBfU09VUkNFX0xTQiAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBHUElPX1BJTjEwX1NPVVJDRV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgR1BJT19QSU4xMF9TT1VSQ0VfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOMTBfU09VUkNFX01BU0spID4+IEdQSU9fUElOMTBfU09VUkNFX0xTQikKLSNkZWZpbmUgR1BJT19QSU4xMF9TT1VSQ0VfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjEwX1NPVVJDRV9MU0IpICYgR1BJT19QSU4xMF9TT1VSQ0VfTUFTSykKLQotI2RlZmluZSBHUElPX1BJTjExX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTQKLSNkZWZpbmUgR1BJT19QSU4xMV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU0Ci0jZGVmaW5lIEdQSU9fUElOMTFfQ09ORklHX01TQiAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgR1BJT19QSU4xMV9DT05GSUdfTFNCICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBHUElPX1BJTjExX0NPTkZJR19NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDE4MDAKLSNkZWZpbmUgR1BJT19QSU4xMV9DT05GSUdfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOMTFfQ09ORklHX01BU0spID4+IEdQSU9fUElOMTFfQ09ORklHX0xTQikKLSNkZWZpbmUgR1BJT19QSU4xMV9DT05GSUdfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjExX0NPTkZJR19MU0IpICYgR1BJT19QSU4xMV9DT05GSUdfTUFTSykKLSNkZWZpbmUgR1BJT19QSU4xMV9XQUtFVVBfRU5BQkxFX01TQiAgICAgICAgICAgICAxMAotI2RlZmluZSBHUElPX1BJTjExX1dBS0VVUF9FTkFCTEVfTFNCICAgICAgICAgICAgIDEwCi0jZGVmaW5lIEdQSU9fUElOMTFfV0FLRVVQX0VOQUJMRV9NQVNLICAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBHUElPX1BJTjExX1dBS0VVUF9FTkFCTEVfR0VUKHgpICAgICAgICAgICgoKHgpICYgR1BJT19QSU4xMV9XQUtFVVBfRU5BQkxFX01BU0spID4+IEdQSU9fUElOMTFfV0FLRVVQX0VOQUJMRV9MU0IpCi0jZGVmaW5lIEdQSU9fUElOMTFfV0FLRVVQX0VOQUJMRV9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU4xMV9XQUtFVVBfRU5BQkxFX0xTQikgJiBHUElPX1BJTjExX1dBS0VVUF9FTkFCTEVfTUFTSykKLSNkZWZpbmUgR1BJT19QSU4xMV9JTlRfVFlQRV9NU0IgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIEdQSU9fUElOMTFfSU5UX1RZUEVfTFNCICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBHUElPX1BJTjExX0lOVF9UWVBFX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAzODAKLSNkZWZpbmUgR1BJT19QSU4xMV9JTlRfVFlQRV9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOMTFfSU5UX1RZUEVfTUFTSykgPj4gR1BJT19QSU4xMV9JTlRfVFlQRV9MU0IpCi0jZGVmaW5lIEdQSU9fUElOMTFfSU5UX1RZUEVfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU4xMV9JTlRfVFlQRV9MU0IpICYgR1BJT19QSU4xMV9JTlRfVFlQRV9NQVNLKQotI2RlZmluZSBHUElPX1BJTjExX1BBRF9EUklWRVJfTVNCICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgR1BJT19QSU4xMV9QQURfRFJJVkVSX0xTQiAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIEdQSU9fUElOMTFfUEFEX0RSSVZFUl9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBHUElPX1BJTjExX1BBRF9EUklWRVJfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgR1BJT19QSU4xMV9QQURfRFJJVkVSX01BU0spID4+IEdQSU9fUElOMTFfUEFEX0RSSVZFUl9MU0IpCi0jZGVmaW5lIEdQSU9fUElOMTFfUEFEX0RSSVZFUl9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU4xMV9QQURfRFJJVkVSX0xTQikgJiBHUElPX1BJTjExX1BBRF9EUklWRVJfTUFTSykKLSNkZWZpbmUgR1BJT19QSU4xMV9TT1VSQ0VfTVNCICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEdQSU9fUElOMTFfU09VUkNFX0xTQiAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBHUElPX1BJTjExX1NPVVJDRV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgR1BJT19QSU4xMV9TT1VSQ0VfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOMTFfU09VUkNFX01BU0spID4+IEdQSU9fUElOMTFfU09VUkNFX0xTQikKLSNkZWZpbmUgR1BJT19QSU4xMV9TT1VSQ0VfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjExX1NPVVJDRV9MU0IpICYgR1BJT19QSU4xMV9TT1VSQ0VfTUFTSykKLQotI2RlZmluZSBHUElPX1BJTjEyX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTgKLSNkZWZpbmUgR1BJT19QSU4xMl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU4Ci0jZGVmaW5lIEdQSU9fUElOMTJfQ09ORklHX01TQiAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgR1BJT19QSU4xMl9DT05GSUdfTFNCICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBHUElPX1BJTjEyX0NPTkZJR19NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDE4MDAKLSNkZWZpbmUgR1BJT19QSU4xMl9DT05GSUdfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOMTJfQ09ORklHX01BU0spID4+IEdQSU9fUElOMTJfQ09ORklHX0xTQikKLSNkZWZpbmUgR1BJT19QSU4xMl9DT05GSUdfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjEyX0NPTkZJR19MU0IpICYgR1BJT19QSU4xMl9DT05GSUdfTUFTSykKLSNkZWZpbmUgR1BJT19QSU4xMl9XQUtFVVBfRU5BQkxFX01TQiAgICAgICAgICAgICAxMAotI2RlZmluZSBHUElPX1BJTjEyX1dBS0VVUF9FTkFCTEVfTFNCICAgICAgICAgICAgIDEwCi0jZGVmaW5lIEdQSU9fUElOMTJfV0FLRVVQX0VOQUJMRV9NQVNLICAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBHUElPX1BJTjEyX1dBS0VVUF9FTkFCTEVfR0VUKHgpICAgICAgICAgICgoKHgpICYgR1BJT19QSU4xMl9XQUtFVVBfRU5BQkxFX01BU0spID4+IEdQSU9fUElOMTJfV0FLRVVQX0VOQUJMRV9MU0IpCi0jZGVmaW5lIEdQSU9fUElOMTJfV0FLRVVQX0VOQUJMRV9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU4xMl9XQUtFVVBfRU5BQkxFX0xTQikgJiBHUElPX1BJTjEyX1dBS0VVUF9FTkFCTEVfTUFTSykKLSNkZWZpbmUgR1BJT19QSU4xMl9JTlRfVFlQRV9NU0IgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIEdQSU9fUElOMTJfSU5UX1RZUEVfTFNCICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBHUElPX1BJTjEyX0lOVF9UWVBFX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAzODAKLSNkZWZpbmUgR1BJT19QSU4xMl9JTlRfVFlQRV9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOMTJfSU5UX1RZUEVfTUFTSykgPj4gR1BJT19QSU4xMl9JTlRfVFlQRV9MU0IpCi0jZGVmaW5lIEdQSU9fUElOMTJfSU5UX1RZUEVfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU4xMl9JTlRfVFlQRV9MU0IpICYgR1BJT19QSU4xMl9JTlRfVFlQRV9NQVNLKQotI2RlZmluZSBHUElPX1BJTjEyX1BBRF9EUklWRVJfTVNCICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgR1BJT19QSU4xMl9QQURfRFJJVkVSX0xTQiAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIEdQSU9fUElOMTJfUEFEX0RSSVZFUl9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBHUElPX1BJTjEyX1BBRF9EUklWRVJfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgR1BJT19QSU4xMl9QQURfRFJJVkVSX01BU0spID4+IEdQSU9fUElOMTJfUEFEX0RSSVZFUl9MU0IpCi0jZGVmaW5lIEdQSU9fUElOMTJfUEFEX0RSSVZFUl9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU4xMl9QQURfRFJJVkVSX0xTQikgJiBHUElPX1BJTjEyX1BBRF9EUklWRVJfTUFTSykKLSNkZWZpbmUgR1BJT19QSU4xMl9TT1VSQ0VfTVNCICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEdQSU9fUElOMTJfU09VUkNFX0xTQiAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBHUElPX1BJTjEyX1NPVVJDRV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgR1BJT19QSU4xMl9TT1VSQ0VfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOMTJfU09VUkNFX01BU0spID4+IEdQSU9fUElOMTJfU09VUkNFX0xTQikKLSNkZWZpbmUgR1BJT19QSU4xMl9TT1VSQ0VfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjEyX1NPVVJDRV9MU0IpICYgR1BJT19QSU4xMl9TT1VSQ0VfTUFTSykKLQotI2RlZmluZSBHUElPX1BJTjEzX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNWMKLSNkZWZpbmUgR1BJT19QSU4xM19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDVjCi0jZGVmaW5lIEdQSU9fUElOMTNfQ09ORklHX01TQiAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgR1BJT19QSU4xM19DT05GSUdfTFNCICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBHUElPX1BJTjEzX0NPTkZJR19NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDE4MDAKLSNkZWZpbmUgR1BJT19QSU4xM19DT05GSUdfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOMTNfQ09ORklHX01BU0spID4+IEdQSU9fUElOMTNfQ09ORklHX0xTQikKLSNkZWZpbmUgR1BJT19QSU4xM19DT05GSUdfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjEzX0NPTkZJR19MU0IpICYgR1BJT19QSU4xM19DT05GSUdfTUFTSykKLSNkZWZpbmUgR1BJT19QSU4xM19XQUtFVVBfRU5BQkxFX01TQiAgICAgICAgICAgICAxMAotI2RlZmluZSBHUElPX1BJTjEzX1dBS0VVUF9FTkFCTEVfTFNCICAgICAgICAgICAgIDEwCi0jZGVmaW5lIEdQSU9fUElOMTNfV0FLRVVQX0VOQUJMRV9NQVNLICAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBHUElPX1BJTjEzX1dBS0VVUF9FTkFCTEVfR0VUKHgpICAgICAgICAgICgoKHgpICYgR1BJT19QSU4xM19XQUtFVVBfRU5BQkxFX01BU0spID4+IEdQSU9fUElOMTNfV0FLRVVQX0VOQUJMRV9MU0IpCi0jZGVmaW5lIEdQSU9fUElOMTNfV0FLRVVQX0VOQUJMRV9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU4xM19XQUtFVVBfRU5BQkxFX0xTQikgJiBHUElPX1BJTjEzX1dBS0VVUF9FTkFCTEVfTUFTSykKLSNkZWZpbmUgR1BJT19QSU4xM19JTlRfVFlQRV9NU0IgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIEdQSU9fUElOMTNfSU5UX1RZUEVfTFNCICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBHUElPX1BJTjEzX0lOVF9UWVBFX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAzODAKLSNkZWZpbmUgR1BJT19QSU4xM19JTlRfVFlQRV9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOMTNfSU5UX1RZUEVfTUFTSykgPj4gR1BJT19QSU4xM19JTlRfVFlQRV9MU0IpCi0jZGVmaW5lIEdQSU9fUElOMTNfSU5UX1RZUEVfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU4xM19JTlRfVFlQRV9MU0IpICYgR1BJT19QSU4xM19JTlRfVFlQRV9NQVNLKQotI2RlZmluZSBHUElPX1BJTjEzX1BBRF9EUklWRVJfTVNCICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgR1BJT19QSU4xM19QQURfRFJJVkVSX0xTQiAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIEdQSU9fUElOMTNfUEFEX0RSSVZFUl9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBHUElPX1BJTjEzX1BBRF9EUklWRVJfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgR1BJT19QSU4xM19QQURfRFJJVkVSX01BU0spID4+IEdQSU9fUElOMTNfUEFEX0RSSVZFUl9MU0IpCi0jZGVmaW5lIEdQSU9fUElOMTNfUEFEX0RSSVZFUl9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU4xM19QQURfRFJJVkVSX0xTQikgJiBHUElPX1BJTjEzX1BBRF9EUklWRVJfTUFTSykKLSNkZWZpbmUgR1BJT19QSU4xM19TT1VSQ0VfTVNCICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEdQSU9fUElOMTNfU09VUkNFX0xTQiAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBHUElPX1BJTjEzX1NPVVJDRV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgR1BJT19QSU4xM19TT1VSQ0VfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOMTNfU09VUkNFX01BU0spID4+IEdQSU9fUElOMTNfU09VUkNFX0xTQikKLSNkZWZpbmUgR1BJT19QSU4xM19TT1VSQ0VfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjEzX1NPVVJDRV9MU0IpICYgR1BJT19QSU4xM19TT1VSQ0VfTUFTSykKLQotI2RlZmluZSBHUElPX1BJTjE0X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjAKLSNkZWZpbmUgR1BJT19QSU4xNF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDYwCi0jZGVmaW5lIEdQSU9fUElOMTRfQ09ORklHX01TQiAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgR1BJT19QSU4xNF9DT05GSUdfTFNCICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBHUElPX1BJTjE0X0NPTkZJR19NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDE4MDAKLSNkZWZpbmUgR1BJT19QSU4xNF9DT05GSUdfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOMTRfQ09ORklHX01BU0spID4+IEdQSU9fUElOMTRfQ09ORklHX0xTQikKLSNkZWZpbmUgR1BJT19QSU4xNF9DT05GSUdfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjE0X0NPTkZJR19MU0IpICYgR1BJT19QSU4xNF9DT05GSUdfTUFTSykKLSNkZWZpbmUgR1BJT19QSU4xNF9XQUtFVVBfRU5BQkxFX01TQiAgICAgICAgICAgICAxMAotI2RlZmluZSBHUElPX1BJTjE0X1dBS0VVUF9FTkFCTEVfTFNCICAgICAgICAgICAgIDEwCi0jZGVmaW5lIEdQSU9fUElOMTRfV0FLRVVQX0VOQUJMRV9NQVNLICAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBHUElPX1BJTjE0X1dBS0VVUF9FTkFCTEVfR0VUKHgpICAgICAgICAgICgoKHgpICYgR1BJT19QSU4xNF9XQUtFVVBfRU5BQkxFX01BU0spID4+IEdQSU9fUElOMTRfV0FLRVVQX0VOQUJMRV9MU0IpCi0jZGVmaW5lIEdQSU9fUElOMTRfV0FLRVVQX0VOQUJMRV9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU4xNF9XQUtFVVBfRU5BQkxFX0xTQikgJiBHUElPX1BJTjE0X1dBS0VVUF9FTkFCTEVfTUFTSykKLSNkZWZpbmUgR1BJT19QSU4xNF9JTlRfVFlQRV9NU0IgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIEdQSU9fUElOMTRfSU5UX1RZUEVfTFNCICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBHUElPX1BJTjE0X0lOVF9UWVBFX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAzODAKLSNkZWZpbmUgR1BJT19QSU4xNF9JTlRfVFlQRV9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOMTRfSU5UX1RZUEVfTUFTSykgPj4gR1BJT19QSU4xNF9JTlRfVFlQRV9MU0IpCi0jZGVmaW5lIEdQSU9fUElOMTRfSU5UX1RZUEVfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU4xNF9JTlRfVFlQRV9MU0IpICYgR1BJT19QSU4xNF9JTlRfVFlQRV9NQVNLKQotI2RlZmluZSBHUElPX1BJTjE0X1BBRF9EUklWRVJfTVNCICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgR1BJT19QSU4xNF9QQURfRFJJVkVSX0xTQiAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIEdQSU9fUElOMTRfUEFEX0RSSVZFUl9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBHUElPX1BJTjE0X1BBRF9EUklWRVJfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgR1BJT19QSU4xNF9QQURfRFJJVkVSX01BU0spID4+IEdQSU9fUElOMTRfUEFEX0RSSVZFUl9MU0IpCi0jZGVmaW5lIEdQSU9fUElOMTRfUEFEX0RSSVZFUl9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU4xNF9QQURfRFJJVkVSX0xTQikgJiBHUElPX1BJTjE0X1BBRF9EUklWRVJfTUFTSykKLSNkZWZpbmUgR1BJT19QSU4xNF9TT1VSQ0VfTVNCICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEdQSU9fUElOMTRfU09VUkNFX0xTQiAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBHUElPX1BJTjE0X1NPVVJDRV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgR1BJT19QSU4xNF9TT1VSQ0VfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOMTRfU09VUkNFX01BU0spID4+IEdQSU9fUElOMTRfU09VUkNFX0xTQikKLSNkZWZpbmUgR1BJT19QSU4xNF9TT1VSQ0VfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjE0X1NPVVJDRV9MU0IpICYgR1BJT19QSU4xNF9TT1VSQ0VfTUFTSykKLQotI2RlZmluZSBHUElPX1BJTjE1X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjQKLSNkZWZpbmUgR1BJT19QSU4xNV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY0Ci0jZGVmaW5lIEdQSU9fUElOMTVfQ09ORklHX01TQiAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgR1BJT19QSU4xNV9DT05GSUdfTFNCICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBHUElPX1BJTjE1X0NPTkZJR19NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDE4MDAKLSNkZWZpbmUgR1BJT19QSU4xNV9DT05GSUdfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOMTVfQ09ORklHX01BU0spID4+IEdQSU9fUElOMTVfQ09ORklHX0xTQikKLSNkZWZpbmUgR1BJT19QSU4xNV9DT05GSUdfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjE1X0NPTkZJR19MU0IpICYgR1BJT19QSU4xNV9DT05GSUdfTUFTSykKLSNkZWZpbmUgR1BJT19QSU4xNV9XQUtFVVBfRU5BQkxFX01TQiAgICAgICAgICAgICAxMAotI2RlZmluZSBHUElPX1BJTjE1X1dBS0VVUF9FTkFCTEVfTFNCICAgICAgICAgICAgIDEwCi0jZGVmaW5lIEdQSU9fUElOMTVfV0FLRVVQX0VOQUJMRV9NQVNLICAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBHUElPX1BJTjE1X1dBS0VVUF9FTkFCTEVfR0VUKHgpICAgICAgICAgICgoKHgpICYgR1BJT19QSU4xNV9XQUtFVVBfRU5BQkxFX01BU0spID4+IEdQSU9fUElOMTVfV0FLRVVQX0VOQUJMRV9MU0IpCi0jZGVmaW5lIEdQSU9fUElOMTVfV0FLRVVQX0VOQUJMRV9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU4xNV9XQUtFVVBfRU5BQkxFX0xTQikgJiBHUElPX1BJTjE1X1dBS0VVUF9FTkFCTEVfTUFTSykKLSNkZWZpbmUgR1BJT19QSU4xNV9JTlRfVFlQRV9NU0IgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIEdQSU9fUElOMTVfSU5UX1RZUEVfTFNCICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBHUElPX1BJTjE1X0lOVF9UWVBFX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAzODAKLSNkZWZpbmUgR1BJT19QSU4xNV9JTlRfVFlQRV9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOMTVfSU5UX1RZUEVfTUFTSykgPj4gR1BJT19QSU4xNV9JTlRfVFlQRV9MU0IpCi0jZGVmaW5lIEdQSU9fUElOMTVfSU5UX1RZUEVfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU4xNV9JTlRfVFlQRV9MU0IpICYgR1BJT19QSU4xNV9JTlRfVFlQRV9NQVNLKQotI2RlZmluZSBHUElPX1BJTjE1X1BBRF9EUklWRVJfTVNCICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgR1BJT19QSU4xNV9QQURfRFJJVkVSX0xTQiAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIEdQSU9fUElOMTVfUEFEX0RSSVZFUl9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBHUElPX1BJTjE1X1BBRF9EUklWRVJfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgR1BJT19QSU4xNV9QQURfRFJJVkVSX01BU0spID4+IEdQSU9fUElOMTVfUEFEX0RSSVZFUl9MU0IpCi0jZGVmaW5lIEdQSU9fUElOMTVfUEFEX0RSSVZFUl9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU4xNV9QQURfRFJJVkVSX0xTQikgJiBHUElPX1BJTjE1X1BBRF9EUklWRVJfTUFTSykKLSNkZWZpbmUgR1BJT19QSU4xNV9TT1VSQ0VfTVNCICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEdQSU9fUElOMTVfU09VUkNFX0xTQiAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBHUElPX1BJTjE1X1NPVVJDRV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgR1BJT19QSU4xNV9TT1VSQ0VfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOMTVfU09VUkNFX01BU0spID4+IEdQSU9fUElOMTVfU09VUkNFX0xTQikKLSNkZWZpbmUgR1BJT19QSU4xNV9TT1VSQ0VfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjE1X1NPVVJDRV9MU0IpICYgR1BJT19QSU4xNV9TT1VSQ0VfTUFTSykKLQotI2RlZmluZSBHUElPX1BJTjE2X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjgKLSNkZWZpbmUgR1BJT19QSU4xNl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY4Ci0jZGVmaW5lIEdQSU9fUElOMTZfQ09ORklHX01TQiAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgR1BJT19QSU4xNl9DT05GSUdfTFNCICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBHUElPX1BJTjE2X0NPTkZJR19NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDE4MDAKLSNkZWZpbmUgR1BJT19QSU4xNl9DT05GSUdfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOMTZfQ09ORklHX01BU0spID4+IEdQSU9fUElOMTZfQ09ORklHX0xTQikKLSNkZWZpbmUgR1BJT19QSU4xNl9DT05GSUdfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjE2X0NPTkZJR19MU0IpICYgR1BJT19QSU4xNl9DT05GSUdfTUFTSykKLSNkZWZpbmUgR1BJT19QSU4xNl9XQUtFVVBfRU5BQkxFX01TQiAgICAgICAgICAgICAxMAotI2RlZmluZSBHUElPX1BJTjE2X1dBS0VVUF9FTkFCTEVfTFNCICAgICAgICAgICAgIDEwCi0jZGVmaW5lIEdQSU9fUElOMTZfV0FLRVVQX0VOQUJMRV9NQVNLICAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBHUElPX1BJTjE2X1dBS0VVUF9FTkFCTEVfR0VUKHgpICAgICAgICAgICgoKHgpICYgR1BJT19QSU4xNl9XQUtFVVBfRU5BQkxFX01BU0spID4+IEdQSU9fUElOMTZfV0FLRVVQX0VOQUJMRV9MU0IpCi0jZGVmaW5lIEdQSU9fUElOMTZfV0FLRVVQX0VOQUJMRV9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU4xNl9XQUtFVVBfRU5BQkxFX0xTQikgJiBHUElPX1BJTjE2X1dBS0VVUF9FTkFCTEVfTUFTSykKLSNkZWZpbmUgR1BJT19QSU4xNl9JTlRfVFlQRV9NU0IgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIEdQSU9fUElOMTZfSU5UX1RZUEVfTFNCICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBHUElPX1BJTjE2X0lOVF9UWVBFX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAzODAKLSNkZWZpbmUgR1BJT19QSU4xNl9JTlRfVFlQRV9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOMTZfSU5UX1RZUEVfTUFTSykgPj4gR1BJT19QSU4xNl9JTlRfVFlQRV9MU0IpCi0jZGVmaW5lIEdQSU9fUElOMTZfSU5UX1RZUEVfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU4xNl9JTlRfVFlQRV9MU0IpICYgR1BJT19QSU4xNl9JTlRfVFlQRV9NQVNLKQotI2RlZmluZSBHUElPX1BJTjE2X1BBRF9EUklWRVJfTVNCICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgR1BJT19QSU4xNl9QQURfRFJJVkVSX0xTQiAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIEdQSU9fUElOMTZfUEFEX0RSSVZFUl9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBHUElPX1BJTjE2X1BBRF9EUklWRVJfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgR1BJT19QSU4xNl9QQURfRFJJVkVSX01BU0spID4+IEdQSU9fUElOMTZfUEFEX0RSSVZFUl9MU0IpCi0jZGVmaW5lIEdQSU9fUElOMTZfUEFEX0RSSVZFUl9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU4xNl9QQURfRFJJVkVSX0xTQikgJiBHUElPX1BJTjE2X1BBRF9EUklWRVJfTUFTSykKLSNkZWZpbmUgR1BJT19QSU4xNl9TT1VSQ0VfTVNCICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEdQSU9fUElOMTZfU09VUkNFX0xTQiAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBHUElPX1BJTjE2X1NPVVJDRV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgR1BJT19QSU4xNl9TT1VSQ0VfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOMTZfU09VUkNFX01BU0spID4+IEdQSU9fUElOMTZfU09VUkNFX0xTQikKLSNkZWZpbmUgR1BJT19QSU4xNl9TT1VSQ0VfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjE2X1NPVVJDRV9MU0IpICYgR1BJT19QSU4xNl9TT1VSQ0VfTUFTSykKLQotI2RlZmluZSBHUElPX1BJTjE3X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNmMKLSNkZWZpbmUgR1BJT19QSU4xN19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZjCi0jZGVmaW5lIEdQSU9fUElOMTdfQ09ORklHX01TQiAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgR1BJT19QSU4xN19DT05GSUdfTFNCICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBHUElPX1BJTjE3X0NPTkZJR19NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDE4MDAKLSNkZWZpbmUgR1BJT19QSU4xN19DT05GSUdfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOMTdfQ09ORklHX01BU0spID4+IEdQSU9fUElOMTdfQ09ORklHX0xTQikKLSNkZWZpbmUgR1BJT19QSU4xN19DT05GSUdfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjE3X0NPTkZJR19MU0IpICYgR1BJT19QSU4xN19DT05GSUdfTUFTSykKLSNkZWZpbmUgR1BJT19QSU4xN19XQUtFVVBfRU5BQkxFX01TQiAgICAgICAgICAgICAxMAotI2RlZmluZSBHUElPX1BJTjE3X1dBS0VVUF9FTkFCTEVfTFNCICAgICAgICAgICAgIDEwCi0jZGVmaW5lIEdQSU9fUElOMTdfV0FLRVVQX0VOQUJMRV9NQVNLICAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBHUElPX1BJTjE3X1dBS0VVUF9FTkFCTEVfR0VUKHgpICAgICAgICAgICgoKHgpICYgR1BJT19QSU4xN19XQUtFVVBfRU5BQkxFX01BU0spID4+IEdQSU9fUElOMTdfV0FLRVVQX0VOQUJMRV9MU0IpCi0jZGVmaW5lIEdQSU9fUElOMTdfV0FLRVVQX0VOQUJMRV9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU4xN19XQUtFVVBfRU5BQkxFX0xTQikgJiBHUElPX1BJTjE3X1dBS0VVUF9FTkFCTEVfTUFTSykKLSNkZWZpbmUgR1BJT19QSU4xN19JTlRfVFlQRV9NU0IgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIEdQSU9fUElOMTdfSU5UX1RZUEVfTFNCICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBHUElPX1BJTjE3X0lOVF9UWVBFX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAzODAKLSNkZWZpbmUgR1BJT19QSU4xN19JTlRfVFlQRV9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOMTdfSU5UX1RZUEVfTUFTSykgPj4gR1BJT19QSU4xN19JTlRfVFlQRV9MU0IpCi0jZGVmaW5lIEdQSU9fUElOMTdfSU5UX1RZUEVfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU4xN19JTlRfVFlQRV9MU0IpICYgR1BJT19QSU4xN19JTlRfVFlQRV9NQVNLKQotI2RlZmluZSBHUElPX1BJTjE3X1BBRF9EUklWRVJfTVNCICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgR1BJT19QSU4xN19QQURfRFJJVkVSX0xTQiAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIEdQSU9fUElOMTdfUEFEX0RSSVZFUl9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBHUElPX1BJTjE3X1BBRF9EUklWRVJfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgR1BJT19QSU4xN19QQURfRFJJVkVSX01BU0spID4+IEdQSU9fUElOMTdfUEFEX0RSSVZFUl9MU0IpCi0jZGVmaW5lIEdQSU9fUElOMTdfUEFEX0RSSVZFUl9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU4xN19QQURfRFJJVkVSX0xTQikgJiBHUElPX1BJTjE3X1BBRF9EUklWRVJfTUFTSykKLSNkZWZpbmUgR1BJT19QSU4xN19TT1VSQ0VfTVNCICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEdQSU9fUElOMTdfU09VUkNFX0xTQiAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBHUElPX1BJTjE3X1NPVVJDRV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgR1BJT19QSU4xN19TT1VSQ0VfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fUElOMTdfU09VUkNFX01BU0spID4+IEdQSU9fUElOMTdfU09VUkNFX0xTQikKLSNkZWZpbmUgR1BJT19QSU4xN19TT1VSQ0VfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTjE3X1NPVVJDRV9MU0IpICYgR1BJT19QSU4xN19TT1VSQ0VfTUFTSykKLQotI2RlZmluZSBTRElPX1BJTl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzAKLSNkZWZpbmUgU0RJT19QSU5fT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDcwCi0jZGVmaW5lIFNESU9fUElOX1BBRF9QVUxMX01TQiAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBTRElPX1BJTl9QQURfUFVMTF9MU0IgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgU0RJT19QSU5fUEFEX1BVTExfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBjCi0jZGVmaW5lIFNESU9fUElOX1BBRF9QVUxMX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBTRElPX1BJTl9QQURfUFVMTF9NQVNLKSA+PiBTRElPX1BJTl9QQURfUFVMTF9MU0IpCi0jZGVmaW5lIFNESU9fUElOX1BBRF9QVUxMX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgU0RJT19QSU5fUEFEX1BVTExfTFNCKSAmIFNESU9fUElOX1BBRF9QVUxMX01BU0spCi0jZGVmaW5lIFNESU9fUElOX1BBRF9TVFJFTkdUSF9NU0IgICAgICAgICAgICAgICAgMQotI2RlZmluZSBTRElPX1BJTl9QQURfU1RSRU5HVEhfTFNCICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgU0RJT19QSU5fUEFEX1NUUkVOR1RIX01BU0sgICAgICAgICAgICAgICAweDAwMDAwMDAzCi0jZGVmaW5lIFNESU9fUElOX1BBRF9TVFJFTkdUSF9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBTRElPX1BJTl9QQURfU1RSRU5HVEhfTUFTSykgPj4gU0RJT19QSU5fUEFEX1NUUkVOR1RIX0xTQikKLSNkZWZpbmUgU0RJT19QSU5fUEFEX1NUUkVOR1RIX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBTRElPX1BJTl9QQURfU1RSRU5HVEhfTFNCKSAmIFNESU9fUElOX1BBRF9TVFJFTkdUSF9NQVNLKQotCi0jZGVmaW5lIENMS19SRVFfUElOX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3NAotI2RlZmluZSBDTEtfUkVRX1BJTl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzQKLSNkZWZpbmUgQ0xLX1JFUV9QSU5fQVRFX09FX0xfTVNCICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIENMS19SRVFfUElOX0FURV9PRV9MX0xTQiAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBDTEtfUkVRX1BJTl9BVEVfT0VfTF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgQ0xLX1JFUV9QSU5fQVRFX09FX0xfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIENMS19SRVFfUElOX0FURV9PRV9MX01BU0spID4+IENMS19SRVFfUElOX0FURV9PRV9MX0xTQikKLSNkZWZpbmUgQ0xLX1JFUV9QSU5fQVRFX09FX0xfU0VUKHgpICAgICAgICAgICAgICAoKCh4KSA8PCBDTEtfUkVRX1BJTl9BVEVfT0VfTF9MU0IpICYgQ0xLX1JFUV9QSU5fQVRFX09FX0xfTUFTSykKLSNkZWZpbmUgQ0xLX1JFUV9QSU5fUEFEX1BVTExfTVNCICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIENMS19SRVFfUElOX1BBRF9QVUxMX0xTQiAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBDTEtfUkVRX1BJTl9QQURfUFVMTF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMDAwMGMKLSNkZWZpbmUgQ0xLX1JFUV9QSU5fUEFEX1BVTExfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIENMS19SRVFfUElOX1BBRF9QVUxMX01BU0spID4+IENMS19SRVFfUElOX1BBRF9QVUxMX0xTQikKLSNkZWZpbmUgQ0xLX1JFUV9QSU5fUEFEX1BVTExfU0VUKHgpICAgICAgICAgICAgICAoKCh4KSA8PCBDTEtfUkVRX1BJTl9QQURfUFVMTF9MU0IpICYgQ0xLX1JFUV9QSU5fUEFEX1BVTExfTUFTSykKLSNkZWZpbmUgQ0xLX1JFUV9QSU5fUEFEX1NUUkVOR1RIX01TQiAgICAgICAgICAgICAxCi0jZGVmaW5lIENMS19SRVFfUElOX1BBRF9TVFJFTkdUSF9MU0IgICAgICAgICAgICAgMAotI2RlZmluZSBDTEtfUkVRX1BJTl9QQURfU1RSRU5HVEhfTUFTSyAgICAgICAgICAgIDB4MDAwMDAwMDMKLSNkZWZpbmUgQ0xLX1JFUV9QSU5fUEFEX1NUUkVOR1RIX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIENMS19SRVFfUElOX1BBRF9TVFJFTkdUSF9NQVNLKSA+PiBDTEtfUkVRX1BJTl9QQURfU1RSRU5HVEhfTFNCKQotI2RlZmluZSBDTEtfUkVRX1BJTl9QQURfU1RSRU5HVEhfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IENMS19SRVFfUElOX1BBRF9TVFJFTkdUSF9MU0IpICYgQ0xLX1JFUV9QSU5fUEFEX1NUUkVOR1RIX01BU0spCi0KLSNkZWZpbmUgU0lHTUFfREVMVEFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc4Ci0jZGVmaW5lIFNJR01BX0RFTFRBX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3OAotI2RlZmluZSBTSUdNQV9ERUxUQV9FTkFCTEVfTVNCICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFNJR01BX0RFTFRBX0VOQUJMRV9MU0IgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgU0lHTUFfREVMVEFfRU5BQkxFX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIFNJR01BX0RFTFRBX0VOQUJMRV9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiBTSUdNQV9ERUxUQV9FTkFCTEVfTUFTSykgPj4gU0lHTUFfREVMVEFfRU5BQkxFX0xTQikKLSNkZWZpbmUgU0lHTUFfREVMVEFfRU5BQkxFX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCBTSUdNQV9ERUxUQV9FTkFCTEVfTFNCKSAmIFNJR01BX0RFTFRBX0VOQUJMRV9NQVNLKQotI2RlZmluZSBTSUdNQV9ERUxUQV9QUkVTQ0FMQVJfTVNCICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFNJR01BX0RFTFRBX1BSRVNDQUxBUl9MU0IgICAgICAgICAgICAgICAgOAotI2RlZmluZSBTSUdNQV9ERUxUQV9QUkVTQ0FMQVJfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMGZmMDAKLSNkZWZpbmUgU0lHTUFfREVMVEFfUFJFU0NBTEFSX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIFNJR01BX0RFTFRBX1BSRVNDQUxBUl9NQVNLKSA+PiBTSUdNQV9ERUxUQV9QUkVTQ0FMQVJfTFNCKQotI2RlZmluZSBTSUdNQV9ERUxUQV9QUkVTQ0FMQVJfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IFNJR01BX0RFTFRBX1BSRVNDQUxBUl9MU0IpICYgU0lHTUFfREVMVEFfUFJFU0NBTEFSX01BU0spCi0jZGVmaW5lIFNJR01BX0RFTFRBX1RBUkdFVF9NU0IgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBTSUdNQV9ERUxUQV9UQVJHRVRfTFNCICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgU0lHTUFfREVMVEFfVEFSR0VUX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIFNJR01BX0RFTFRBX1RBUkdFVF9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiBTSUdNQV9ERUxUQV9UQVJHRVRfTUFTSykgPj4gU0lHTUFfREVMVEFfVEFSR0VUX0xTQikKLSNkZWZpbmUgU0lHTUFfREVMVEFfVEFSR0VUX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCBTSUdNQV9ERUxUQV9UQVJHRVRfTFNCKSAmIFNJR01BX0RFTFRBX1RBUkdFVF9NQVNLKQotCi0jZGVmaW5lIERFQlVHX0NPTlRST0xfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3YwotI2RlZmluZSBERUJVR19DT05UUk9MX09GRlNFVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN2MKLSNkZWZpbmUgREVCVUdfQ09OVFJPTF9PQlNfT0VfTF9NU0IgICAgICAgICAgICAgICAxCi0jZGVmaW5lIERFQlVHX0NPTlRST0xfT0JTX09FX0xfTFNCICAgICAgICAgICAgICAgMQotI2RlZmluZSBERUJVR19DT05UUk9MX09CU19PRV9MX01BU0sgICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgREVCVUdfQ09OVFJPTF9PQlNfT0VfTF9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIERFQlVHX0NPTlRST0xfT0JTX09FX0xfTUFTSykgPj4gREVCVUdfQ09OVFJPTF9PQlNfT0VfTF9MU0IpCi0jZGVmaW5lIERFQlVHX0NPTlRST0xfT0JTX09FX0xfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgREVCVUdfQ09OVFJPTF9PQlNfT0VfTF9MU0IpICYgREVCVUdfQ09OVFJPTF9PQlNfT0VfTF9NQVNLKQotI2RlZmluZSBERUJVR19DT05UUk9MX0VOQUJMRV9NU0IgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgREVCVUdfQ09OVFJPTF9FTkFCTEVfTFNCICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIERFQlVHX0NPTlRST0xfRU5BQkxFX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBERUJVR19DT05UUk9MX0VOQUJMRV9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgREVCVUdfQ09OVFJPTF9FTkFCTEVfTUFTSykgPj4gREVCVUdfQ09OVFJPTF9FTkFCTEVfTFNCKQotI2RlZmluZSBERUJVR19DT05UUk9MX0VOQUJMRV9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IERFQlVHX0NPTlRST0xfRU5BQkxFX0xTQikgJiBERUJVR19DT05UUk9MX0VOQUJMRV9NQVNLKQotCi0jZGVmaW5lIERFQlVHX0lOUFVUX1NFTF9BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBERUJVR19JTlBVVF9TRUxfT0ZGU0VUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKLSNkZWZpbmUgREVCVUdfSU5QVVRfU0VMX1NSQ19NU0IgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIERFQlVHX0lOUFVUX1NFTF9TUkNfTFNCICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBERUJVR19JTlBVVF9TRUxfU1JDX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGYKLSNkZWZpbmUgREVCVUdfSU5QVVRfU0VMX1NSQ19HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIERFQlVHX0lOUFVUX1NFTF9TUkNfTUFTSykgPj4gREVCVUdfSU5QVVRfU0VMX1NSQ19MU0IpCi0jZGVmaW5lIERFQlVHX0lOUFVUX1NFTF9TUkNfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgREVCVUdfSU5QVVRfU0VMX1NSQ19MU0IpICYgREVCVUdfSU5QVVRfU0VMX1NSQ19NQVNLKQotCi0jZGVmaW5lIERFQlVHX09VVF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4NAotI2RlZmluZSBERUJVR19PVVRfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODQKLSNkZWZpbmUgREVCVUdfT1VUX0RBVEFfTVNCICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBERUJVR19PVVRfREFUQV9MU0IgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgREVCVUdfT1VUX0RBVEFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDNmZmZmCi0jZGVmaW5lIERFQlVHX09VVF9EQVRBX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBERUJVR19PVVRfREFUQV9NQVNLKSA+PiBERUJVR19PVVRfREFUQV9MU0IpCi0jZGVmaW5lIERFQlVHX09VVF9EQVRBX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgREVCVUdfT1VUX0RBVEFfTFNCKSAmIERFQlVHX09VVF9EQVRBX01BU0spCi0KLSNkZWZpbmUgTEFfQ09OVFJPTF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDg4Ci0jZGVmaW5lIExBX0NPTlRST0xfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4OAotI2RlZmluZSBMQV9DT05UUk9MX1JVTl9NU0IgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgTEFfQ09OVFJPTF9SVU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIExBX0NPTlRST0xfUlVOX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBMQV9DT05UUk9MX1JVTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgTEFfQ09OVFJPTF9SVU5fTUFTSykgPj4gTEFfQ09OVFJPTF9SVU5fTFNCKQotI2RlZmluZSBMQV9DT05UUk9MX1JVTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IExBX0NPTlRST0xfUlVOX0xTQikgJiBMQV9DT05UUk9MX1JVTl9NQVNLKQotI2RlZmluZSBMQV9DT05UUk9MX1RSSUdHRVJFRF9NU0IgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTEFfQ09OVFJPTF9UUklHR0VSRURfTFNCICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIExBX0NPTlRST0xfVFJJR0dFUkVEX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBMQV9DT05UUk9MX1RSSUdHRVJFRF9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgTEFfQ09OVFJPTF9UUklHR0VSRURfTUFTSykgPj4gTEFfQ09OVFJPTF9UUklHR0VSRURfTFNCKQotI2RlZmluZSBMQV9DT05UUk9MX1RSSUdHRVJFRF9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IExBX0NPTlRST0xfVFJJR0dFUkVEX0xTQikgJiBMQV9DT05UUk9MX1RSSUdHRVJFRF9NQVNLKQotCi0jZGVmaW5lIExBX0NMT0NLX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4YwotI2RlZmluZSBMQV9DTE9DS19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwOGMKLSNkZWZpbmUgTEFfQ0xPQ0tfRElWX01TQiAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIExBX0NMT0NLX0RJVl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBMQV9DTE9DS19ESVZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgTEFfQ0xPQ0tfRElWX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIExBX0NMT0NLX0RJVl9NQVNLKSA+PiBMQV9DTE9DS19ESVZfTFNCKQotI2RlZmluZSBMQV9DTE9DS19ESVZfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IExBX0NMT0NLX0RJVl9MU0IpICYgTEFfQ0xPQ0tfRElWX01BU0spCi0KLSNkZWZpbmUgTEFfU1RBVFVTX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDkwCi0jZGVmaW5lIExBX1NUQVRVU19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA5MAotI2RlZmluZSBMQV9TVEFUVVNfSU5URVJSVVBUX01TQiAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTEFfU1RBVFVTX0lOVEVSUlVQVF9MU0IgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIExBX1NUQVRVU19JTlRFUlJVUFRfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBMQV9TVEFUVVNfSU5URVJSVVBUX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgTEFfU1RBVFVTX0lOVEVSUlVQVF9NQVNLKSA+PiBMQV9TVEFUVVNfSU5URVJSVVBUX0xTQikKLSNkZWZpbmUgTEFfU1RBVFVTX0lOVEVSUlVQVF9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBMQV9TVEFUVVNfSU5URVJSVVBUX0xTQikgJiBMQV9TVEFUVVNfSU5URVJSVVBUX01BU0spCi0KLSNkZWZpbmUgTEFfVFJJR0dFUl9TQU1QTEVfQUREUkVTUyAgICAgICAgICAgICAgICAweDAwMDAwMDk0Ci0jZGVmaW5lIExBX1RSSUdHRVJfU0FNUExFX09GRlNFVCAgICAgICAgICAgICAgICAgMHgwMDAwMDA5NAotI2RlZmluZSBMQV9UUklHR0VSX1NBTVBMRV9DT1VOVF9NU0IgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIExBX1RSSUdHRVJfU0FNUExFX0NPVU5UX0xTQiAgICAgICAgICAgICAgMAotI2RlZmluZSBMQV9UUklHR0VSX1NBTVBMRV9DT1VOVF9NQVNLICAgICAgICAgICAgIDB4MDAwMGZmZmYKLSNkZWZpbmUgTEFfVFJJR0dFUl9TQU1QTEVfQ09VTlRfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIExBX1RSSUdHRVJfU0FNUExFX0NPVU5UX01BU0spID4+IExBX1RSSUdHRVJfU0FNUExFX0NPVU5UX0xTQikKLSNkZWZpbmUgTEFfVFJJR0dFUl9TQU1QTEVfQ09VTlRfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCBMQV9UUklHR0VSX1NBTVBMRV9DT1VOVF9MU0IpICYgTEFfVFJJR0dFUl9TQU1QTEVfQ09VTlRfTUFTSykKLQotI2RlZmluZSBMQV9UUklHR0VSX1BPU0lUSU9OX0FERFJFU1MgICAgICAgICAgICAgIDB4MDAwMDAwOTgKLSNkZWZpbmUgTEFfVFJJR0dFUl9QT1NJVElPTl9PRkZTRVQgICAgICAgICAgICAgICAweDAwMDAwMDk4Ci0jZGVmaW5lIExBX1RSSUdHRVJfUE9TSVRJT05fVkFMVUVfTVNCICAgICAgICAgICAgMTUKLSNkZWZpbmUgTEFfVFJJR0dFUl9QT1NJVElPTl9WQUxVRV9MU0IgICAgICAgICAgICAwCi0jZGVmaW5lIExBX1RSSUdHRVJfUE9TSVRJT05fVkFMVUVfTUFTSyAgICAgICAgICAgMHgwMDAwZmZmZgotI2RlZmluZSBMQV9UUklHR0VSX1BPU0lUSU9OX1ZBTFVFX0dFVCh4KSAgICAgICAgICgoKHgpICYgTEFfVFJJR0dFUl9QT1NJVElPTl9WQUxVRV9NQVNLKSA+PiBMQV9UUklHR0VSX1BPU0lUSU9OX1ZBTFVFX0xTQikKLSNkZWZpbmUgTEFfVFJJR0dFUl9QT1NJVElPTl9WQUxVRV9TRVQoeCkgICAgICAgICAoKCh4KSA8PCBMQV9UUklHR0VSX1BPU0lUSU9OX1ZBTFVFX0xTQikgJiBMQV9UUklHR0VSX1BPU0lUSU9OX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgTEFfUFJFX1RSSUdHRVJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDljCi0jZGVmaW5lIExBX1BSRV9UUklHR0VSX09GRlNFVCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA5YwotI2RlZmluZSBMQV9QUkVfVFJJR0dFUl9DT1VOVF9NU0IgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIExBX1BSRV9UUklHR0VSX0NPVU5UX0xTQiAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBMQV9QUkVfVFJJR0dFUl9DT1VOVF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMGZmZmYKLSNkZWZpbmUgTEFfUFJFX1RSSUdHRVJfQ09VTlRfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIExBX1BSRV9UUklHR0VSX0NPVU5UX01BU0spID4+IExBX1BSRV9UUklHR0VSX0NPVU5UX0xTQikKLSNkZWZpbmUgTEFfUFJFX1RSSUdHRVJfQ09VTlRfU0VUKHgpICAgICAgICAgICAgICAoKCh4KSA8PCBMQV9QUkVfVFJJR0dFUl9DT1VOVF9MU0IpICYgTEFfUFJFX1RSSUdHRVJfQ09VTlRfTUFTSykKLQotI2RlZmluZSBMQV9QT1NUX1RSSUdHRVJfQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYTAKLSNkZWZpbmUgTEFfUE9TVF9UUklHR0VSX09GRlNFVCAgICAgICAgICAgICAgICAgICAweDAwMDAwMGEwCi0jZGVmaW5lIExBX1BPU1RfVFJJR0dFUl9DT1VOVF9NU0IgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgTEFfUE9TVF9UUklHR0VSX0NPVU5UX0xTQiAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIExBX1BPU1RfVFJJR0dFUl9DT1VOVF9NQVNLICAgICAgICAgICAgICAgMHgwMDAwZmZmZgotI2RlZmluZSBMQV9QT1NUX1RSSUdHRVJfQ09VTlRfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgTEFfUE9TVF9UUklHR0VSX0NPVU5UX01BU0spID4+IExBX1BPU1RfVFJJR0dFUl9DT1VOVF9MU0IpCi0jZGVmaW5lIExBX1BPU1RfVFJJR0dFUl9DT1VOVF9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgTEFfUE9TVF9UUklHR0VSX0NPVU5UX0xTQikgJiBMQV9QT1NUX1RSSUdHRVJfQ09VTlRfTUFTSykKLQotI2RlZmluZSBMQV9GSUxURVJfQ09OVFJPTF9BRERSRVNTICAgICAgICAgICAgICAgIDB4MDAwMDAwYTQKLSNkZWZpbmUgTEFfRklMVEVSX0NPTlRST0xfT0ZGU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMGE0Ci0jZGVmaW5lIExBX0ZJTFRFUl9DT05UUk9MX0RFTFRBX01TQiAgICAgICAgICAgICAgMAotI2RlZmluZSBMQV9GSUxURVJfQ09OVFJPTF9ERUxUQV9MU0IgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTEFfRklMVEVSX0NPTlRST0xfREVMVEFfTUFTSyAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIExBX0ZJTFRFUl9DT05UUk9MX0RFTFRBX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBMQV9GSUxURVJfQ09OVFJPTF9ERUxUQV9NQVNLKSA+PiBMQV9GSUxURVJfQ09OVFJPTF9ERUxUQV9MU0IpCi0jZGVmaW5lIExBX0ZJTFRFUl9DT05UUk9MX0RFTFRBX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgTEFfRklMVEVSX0NPTlRST0xfREVMVEFfTFNCKSAmIExBX0ZJTFRFUl9DT05UUk9MX0RFTFRBX01BU0spCi0KLSNkZWZpbmUgTEFfRklMVEVSX0RBVEFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAweDAwMDAwMGE4Ci0jZGVmaW5lIExBX0ZJTFRFUl9EQVRBX09GRlNFVCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBhOAotI2RlZmluZSBMQV9GSUxURVJfREFUQV9NQVRDSF9NU0IgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIExBX0ZJTFRFUl9EQVRBX01BVENIX0xTQiAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBMQV9GSUxURVJfREFUQV9NQVRDSF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwM2ZmZmYKLSNkZWZpbmUgTEFfRklMVEVSX0RBVEFfTUFUQ0hfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIExBX0ZJTFRFUl9EQVRBX01BVENIX01BU0spID4+IExBX0ZJTFRFUl9EQVRBX01BVENIX0xTQikKLSNkZWZpbmUgTEFfRklMVEVSX0RBVEFfTUFUQ0hfU0VUKHgpICAgICAgICAgICAgICAoKCh4KSA8PCBMQV9GSUxURVJfREFUQV9NQVRDSF9MU0IpICYgTEFfRklMVEVSX0RBVEFfTUFUQ0hfTUFTSykKLQotI2RlZmluZSBMQV9GSUxURVJfV0lMRENBUkRfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDAwYWMKLSNkZWZpbmUgTEFfRklMVEVSX1dJTERDQVJEX09GRlNFVCAgICAgICAgICAgICAgICAweDAwMDAwMGFjCi0jZGVmaW5lIExBX0ZJTFRFUl9XSUxEQ0FSRF9NQVRDSF9NU0IgICAgICAgICAgICAgMTcKLSNkZWZpbmUgTEFfRklMVEVSX1dJTERDQVJEX01BVENIX0xTQiAgICAgICAgICAgICAwCi0jZGVmaW5lIExBX0ZJTFRFUl9XSUxEQ0FSRF9NQVRDSF9NQVNLICAgICAgICAgICAgMHgwMDAzZmZmZgotI2RlZmluZSBMQV9GSUxURVJfV0lMRENBUkRfTUFUQ0hfR0VUKHgpICAgICAgICAgICgoKHgpICYgTEFfRklMVEVSX1dJTERDQVJEX01BVENIX01BU0spID4+IExBX0ZJTFRFUl9XSUxEQ0FSRF9NQVRDSF9MU0IpCi0jZGVmaW5lIExBX0ZJTFRFUl9XSUxEQ0FSRF9NQVRDSF9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgTEFfRklMVEVSX1dJTERDQVJEX01BVENIX0xTQikgJiBMQV9GSUxURVJfV0lMRENBUkRfTUFUQ0hfTUFTSykKLQotI2RlZmluZSBMQV9UUklHR0VSQV9EQVRBX0FERFJFU1MgICAgICAgICAgICAgICAgIDB4MDAwMDAwYjAKLSNkZWZpbmUgTEFfVFJJR0dFUkFfREFUQV9PRkZTRVQgICAgICAgICAgICAgICAgICAweDAwMDAwMGIwCi0jZGVmaW5lIExBX1RSSUdHRVJBX0RBVEFfTUFUQ0hfTVNCICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgTEFfVFJJR0dFUkFfREFUQV9NQVRDSF9MU0IgICAgICAgICAgICAgICAwCi0jZGVmaW5lIExBX1RSSUdHRVJBX0RBVEFfTUFUQ0hfTUFTSyAgICAgICAgICAgICAgMHgwMDAzZmZmZgotI2RlZmluZSBMQV9UUklHR0VSQV9EQVRBX01BVENIX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgTEFfVFJJR0dFUkFfREFUQV9NQVRDSF9NQVNLKSA+PiBMQV9UUklHR0VSQV9EQVRBX01BVENIX0xTQikKLSNkZWZpbmUgTEFfVFJJR0dFUkFfREFUQV9NQVRDSF9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBMQV9UUklHR0VSQV9EQVRBX01BVENIX0xTQikgJiBMQV9UUklHR0VSQV9EQVRBX01BVENIX01BU0spCi0KLSNkZWZpbmUgTEFfVFJJR0dFUkFfV0lMRENBUkRfQUREUkVTUyAgICAgICAgICAgICAweDAwMDAwMGI0Ci0jZGVmaW5lIExBX1RSSUdHRVJBX1dJTERDQVJEX09GRlNFVCAgICAgICAgICAgICAgMHgwMDAwMDBiNAotI2RlZmluZSBMQV9UUklHR0VSQV9XSUxEQ0FSRF9NQVRDSF9NU0IgICAgICAgICAgIDE3Ci0jZGVmaW5lIExBX1RSSUdHRVJBX1dJTERDQVJEX01BVENIX0xTQiAgICAgICAgICAgMAotI2RlZmluZSBMQV9UUklHR0VSQV9XSUxEQ0FSRF9NQVRDSF9NQVNLICAgICAgICAgIDB4MDAwM2ZmZmYKLSNkZWZpbmUgTEFfVFJJR0dFUkFfV0lMRENBUkRfTUFUQ0hfR0VUKHgpICAgICAgICAoKCh4KSAmIExBX1RSSUdHRVJBX1dJTERDQVJEX01BVENIX01BU0spID4+IExBX1RSSUdHRVJBX1dJTERDQVJEX01BVENIX0xTQikKLSNkZWZpbmUgTEFfVFJJR0dFUkFfV0lMRENBUkRfTUFUQ0hfU0VUKHgpICAgICAgICAoKCh4KSA8PCBMQV9UUklHR0VSQV9XSUxEQ0FSRF9NQVRDSF9MU0IpICYgTEFfVFJJR0dFUkFfV0lMRENBUkRfTUFUQ0hfTUFTSykKLQotI2RlZmluZSBMQV9UUklHR0VSQl9EQVRBX0FERFJFU1MgICAgICAgICAgICAgICAgIDB4MDAwMDAwYjgKLSNkZWZpbmUgTEFfVFJJR0dFUkJfREFUQV9PRkZTRVQgICAgICAgICAgICAgICAgICAweDAwMDAwMGI4Ci0jZGVmaW5lIExBX1RSSUdHRVJCX0RBVEFfTUFUQ0hfTVNCICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgTEFfVFJJR0dFUkJfREFUQV9NQVRDSF9MU0IgICAgICAgICAgICAgICAwCi0jZGVmaW5lIExBX1RSSUdHRVJCX0RBVEFfTUFUQ0hfTUFTSyAgICAgICAgICAgICAgMHgwMDAzZmZmZgotI2RlZmluZSBMQV9UUklHR0VSQl9EQVRBX01BVENIX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgTEFfVFJJR0dFUkJfREFUQV9NQVRDSF9NQVNLKSA+PiBMQV9UUklHR0VSQl9EQVRBX01BVENIX0xTQikKLSNkZWZpbmUgTEFfVFJJR0dFUkJfREFUQV9NQVRDSF9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBMQV9UUklHR0VSQl9EQVRBX01BVENIX0xTQikgJiBMQV9UUklHR0VSQl9EQVRBX01BVENIX01BU0spCi0KLSNkZWZpbmUgTEFfVFJJR0dFUkJfV0lMRENBUkRfQUREUkVTUyAgICAgICAgICAgICAweDAwMDAwMGJjCi0jZGVmaW5lIExBX1RSSUdHRVJCX1dJTERDQVJEX09GRlNFVCAgICAgICAgICAgICAgMHgwMDAwMDBiYwotI2RlZmluZSBMQV9UUklHR0VSQl9XSUxEQ0FSRF9NQVRDSF9NU0IgICAgICAgICAgIDE3Ci0jZGVmaW5lIExBX1RSSUdHRVJCX1dJTERDQVJEX01BVENIX0xTQiAgICAgICAgICAgMAotI2RlZmluZSBMQV9UUklHR0VSQl9XSUxEQ0FSRF9NQVRDSF9NQVNLICAgICAgICAgIDB4MDAwM2ZmZmYKLSNkZWZpbmUgTEFfVFJJR0dFUkJfV0lMRENBUkRfTUFUQ0hfR0VUKHgpICAgICAgICAoKCh4KSAmIExBX1RSSUdHRVJCX1dJTERDQVJEX01BVENIX01BU0spID4+IExBX1RSSUdHRVJCX1dJTERDQVJEX01BVENIX0xTQikKLSNkZWZpbmUgTEFfVFJJR0dFUkJfV0lMRENBUkRfTUFUQ0hfU0VUKHgpICAgICAgICAoKCh4KSA8PCBMQV9UUklHR0VSQl9XSUxEQ0FSRF9NQVRDSF9MU0IpICYgTEFfVFJJR0dFUkJfV0lMRENBUkRfTUFUQ0hfTUFTSykKLQotI2RlZmluZSBMQV9UUklHR0VSX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYzAKLSNkZWZpbmUgTEFfVFJJR0dFUl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGMwCi0jZGVmaW5lIExBX1RSSUdHRVJfRVZFTlRfTVNCICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBMQV9UUklHR0VSX0VWRU5UX0xTQiAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTEFfVFJJR0dFUl9FVkVOVF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3Ci0jZGVmaW5lIExBX1RSSUdHRVJfRVZFTlRfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiBMQV9UUklHR0VSX0VWRU5UX01BU0spID4+IExBX1RSSUdHRVJfRVZFTlRfTFNCKQotI2RlZmluZSBMQV9UUklHR0VSX0VWRU5UX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IExBX1RSSUdHRVJfRVZFTlRfTFNCKSAmIExBX1RSSUdHRVJfRVZFTlRfTUFTSykKLQotI2RlZmluZSBMQV9GSUZPX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYzQKLSNkZWZpbmUgTEFfRklGT19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGM0Ci0jZGVmaW5lIExBX0ZJRk9fRlVMTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBMQV9GSUZPX0ZVTExfTFNCICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgTEFfRklGT19GVUxMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIExBX0ZJRk9fRlVMTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBMQV9GSUZPX0ZVTExfTUFTSykgPj4gTEFfRklGT19GVUxMX0xTQikKLSNkZWZpbmUgTEFfRklGT19GVUxMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBMQV9GSUZPX0ZVTExfTFNCKSAmIExBX0ZJRk9fRlVMTF9NQVNLKQotI2RlZmluZSBMQV9GSUZPX0VNUFRZX01TQiAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTEFfRklGT19FTVBUWV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIExBX0ZJRk9fRU1QVFlfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBMQV9GSUZPX0VNUFRZX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgTEFfRklGT19FTVBUWV9NQVNLKSA+PiBMQV9GSUZPX0VNUFRZX0xTQikKLSNkZWZpbmUgTEFfRklGT19FTVBUWV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBMQV9GSUZPX0VNUFRZX0xTQikgJiBMQV9GSUZPX0VNUFRZX01BU0spCi0KLSNkZWZpbmUgTEFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGM4Ci0jZGVmaW5lIExBX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBjOAotI2RlZmluZSBMQV9EQVRBX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIExBX0RBVEFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBMQV9EQVRBX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM2ZmZmYKLSNkZWZpbmUgTEFfREFUQV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIExBX0RBVEFfTUFTSykgPj4gTEFfREFUQV9MU0IpCi0jZGVmaW5lIExBX0RBVEFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgTEFfREFUQV9MU0IpICYgTEFfREFUQV9NQVNLKQotCi0jZGVmaW5lIEFOVF9QSU5fQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBkMAotI2RlZmluZSBBTlRfUElOX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZDAKLSNkZWZpbmUgQU5UX1BJTl9QQURfUFVMTF9NU0IgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIEFOVF9QSU5fUEFEX1BVTExfTFNCICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBBTlRfUElOX1BBRF9QVUxMX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGMKLSNkZWZpbmUgQU5UX1BJTl9QQURfUFVMTF9HRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIEFOVF9QSU5fUEFEX1BVTExfTUFTSykgPj4gQU5UX1BJTl9QQURfUFVMTF9MU0IpCi0jZGVmaW5lIEFOVF9QSU5fUEFEX1BVTExfU0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgQU5UX1BJTl9QQURfUFVMTF9MU0IpICYgQU5UX1BJTl9QQURfUFVMTF9NQVNLKQotI2RlZmluZSBBTlRfUElOX1BBRF9TVFJFTkdUSF9NU0IgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgQU5UX1BJTl9QQURfU1RSRU5HVEhfTFNCICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEFOVF9QSU5fUEFEX1NUUkVOR1RIX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwMwotI2RlZmluZSBBTlRfUElOX1BBRF9TVFJFTkdUSF9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgQU5UX1BJTl9QQURfU1RSRU5HVEhfTUFTSykgPj4gQU5UX1BJTl9QQURfU1RSRU5HVEhfTFNCKQotI2RlZmluZSBBTlRfUElOX1BBRF9TVFJFTkdUSF9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IEFOVF9QSU5fUEFEX1NUUkVOR1RIX0xTQikgJiBBTlRfUElOX1BBRF9TVFJFTkdUSF9NQVNLKQotCi0jZGVmaW5lIEFOVERfUElOX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBkNAotI2RlZmluZSBBTlREX1BJTl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZDQKLSNkZWZpbmUgQU5URF9QSU5fUEFEX1BVTExfTVNCICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIEFOVERfUElOX1BBRF9QVUxMX0xTQiAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBBTlREX1BJTl9QQURfUFVMTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKLSNkZWZpbmUgQU5URF9QSU5fUEFEX1BVTExfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIEFOVERfUElOX1BBRF9QVUxMX01BU0spID4+IEFOVERfUElOX1BBRF9QVUxMX0xTQikKLSNkZWZpbmUgQU5URF9QSU5fUEFEX1BVTExfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCBBTlREX1BJTl9QQURfUFVMTF9MU0IpICYgQU5URF9QSU5fUEFEX1BVTExfTUFTSykKLQotI2RlZmluZSBHUElPX1BJTl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZDgKLSNkZWZpbmUgR1BJT19QSU5fT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGQ4Ci0jZGVmaW5lIEdQSU9fUElOX1BBRF9QVUxMX01TQiAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBHUElPX1BJTl9QQURfUFVMTF9MU0IgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgR1BJT19QSU5fUEFEX1BVTExfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBjCi0jZGVmaW5lIEdQSU9fUElOX1BBRF9QVUxMX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBHUElPX1BJTl9QQURfUFVMTF9NQVNLKSA+PiBHUElPX1BJTl9QQURfUFVMTF9MU0IpCi0jZGVmaW5lIEdQSU9fUElOX1BBRF9QVUxMX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19QSU5fUEFEX1BVTExfTFNCKSAmIEdQSU9fUElOX1BBRF9QVUxMX01BU0spCi0jZGVmaW5lIEdQSU9fUElOX1BBRF9TVFJFTkdUSF9NU0IgICAgICAgICAgICAgICAgMQotI2RlZmluZSBHUElPX1BJTl9QQURfU1RSRU5HVEhfTFNCICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgR1BJT19QSU5fUEFEX1NUUkVOR1RIX01BU0sgICAgICAgICAgICAgICAweDAwMDAwMDAzCi0jZGVmaW5lIEdQSU9fUElOX1BBRF9TVFJFTkdUSF9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBHUElPX1BJTl9QQURfU1RSRU5HVEhfTUFTSykgPj4gR1BJT19QSU5fUEFEX1NUUkVOR1RIX0xTQikKLSNkZWZpbmUgR1BJT19QSU5fUEFEX1NUUkVOR1RIX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBHUElPX1BJTl9QQURfU1RSRU5HVEhfTFNCKSAmIEdQSU9fUElOX1BBRF9TVFJFTkdUSF9NQVNLKQotCi0jZGVmaW5lIEdQSU9fSF9QSU5fQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBkYwotI2RlZmluZSBHUElPX0hfUElOX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZGMKLSNkZWZpbmUgR1BJT19IX1BJTl9QQURfUFVMTF9NU0IgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIEdQSU9fSF9QSU5fUEFEX1BVTExfTFNCICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBHUElPX0hfUElOX1BBRF9QVUxMX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKLSNkZWZpbmUgR1BJT19IX1BJTl9QQURfUFVMTF9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIEdQSU9fSF9QSU5fUEFEX1BVTExfTUFTSykgPj4gR1BJT19IX1BJTl9QQURfUFVMTF9MU0IpCi0jZGVmaW5lIEdQSU9fSF9QSU5fUEFEX1BVTExfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgR1BJT19IX1BJTl9QQURfUFVMTF9MU0IpICYgR1BJT19IX1BJTl9QQURfUFVMTF9NQVNLKQotCi0jZGVmaW5lIEJUX1BJTl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBlMAotI2RlZmluZSBCVF9QSU5fT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZTAKLSNkZWZpbmUgQlRfUElOX1BBRF9QVUxMX01TQiAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIEJUX1BJTl9QQURfUFVMTF9MU0IgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBCVF9QSU5fUEFEX1BVTExfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGMKLSNkZWZpbmUgQlRfUElOX1BBRF9QVUxMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIEJUX1BJTl9QQURfUFVMTF9NQVNLKSA+PiBCVF9QSU5fUEFEX1BVTExfTFNCKQotI2RlZmluZSBCVF9QSU5fUEFEX1BVTExfU0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IEJUX1BJTl9QQURfUFVMTF9MU0IpICYgQlRfUElOX1BBRF9QVUxMX01BU0spCi0jZGVmaW5lIEJUX1BJTl9QQURfU1RSRU5HVEhfTVNCICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBCVF9QSU5fUEFEX1NUUkVOR1RIX0xTQiAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgQlRfUElOX1BBRF9TVFJFTkdUSF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCi0jZGVmaW5lIEJUX1BJTl9QQURfU1RSRU5HVEhfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBCVF9QSU5fUEFEX1NUUkVOR1RIX01BU0spID4+IEJUX1BJTl9QQURfU1RSRU5HVEhfTFNCKQotI2RlZmluZSBCVF9QSU5fUEFEX1NUUkVOR1RIX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IEJUX1BJTl9QQURfU1RSRU5HVEhfTFNCKSAmIEJUX1BJTl9QQURfU1RSRU5HVEhfTUFTSykKLQotI2RlZmluZSBCVF9XTEFOX1BJTl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZTQKLSNkZWZpbmUgQlRfV0xBTl9QSU5fT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGU0Ci0jZGVmaW5lIEJUX1dMQU5fUElOX1BBRF9QVUxMX01TQiAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBCVF9XTEFOX1BJTl9QQURfUFVMTF9MU0IgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgQlRfV0xBTl9QSU5fUEFEX1BVTExfTUFTSyAgICAgICAgICAgICAgICAweDAwMDAwMDAzCi0jZGVmaW5lIEJUX1dMQU5fUElOX1BBRF9QVUxMX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiBCVF9XTEFOX1BJTl9QQURfUFVMTF9NQVNLKSA+PiBCVF9XTEFOX1BJTl9QQURfUFVMTF9MU0IpCi0jZGVmaW5lIEJUX1dMQU5fUElOX1BBRF9QVUxMX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgQlRfV0xBTl9QSU5fUEFEX1BVTExfTFNCKSAmIEJUX1dMQU5fUElOX1BBRF9QVUxMX01BU0spCi0KLSNkZWZpbmUgU0lfVUFSVF9QSU5fQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGU4Ci0jZGVmaW5lIFNJX1VBUlRfUElOX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBlOAotI2RlZmluZSBTSV9VQVJUX1BJTl9QQURfUFVMTF9NU0IgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgU0lfVUFSVF9QSU5fUEFEX1BVTExfTFNCICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFNJX1VBUlRfUElOX1BBRF9QVUxMX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwYwotI2RlZmluZSBTSV9VQVJUX1BJTl9QQURfUFVMTF9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgU0lfVUFSVF9QSU5fUEFEX1BVTExfTUFTSykgPj4gU0lfVUFSVF9QSU5fUEFEX1BVTExfTFNCKQotI2RlZmluZSBTSV9VQVJUX1BJTl9QQURfUFVMTF9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFNJX1VBUlRfUElOX1BBRF9QVUxMX0xTQikgJiBTSV9VQVJUX1BJTl9QQURfUFVMTF9NQVNLKQotI2RlZmluZSBTSV9VQVJUX1BJTl9QQURfU1RSRU5HVEhfTVNCICAgICAgICAgICAgIDEKLSNkZWZpbmUgU0lfVUFSVF9QSU5fUEFEX1NUUkVOR1RIX0xTQiAgICAgICAgICAgICAwCi0jZGVmaW5lIFNJX1VBUlRfUElOX1BBRF9TVFJFTkdUSF9NQVNLICAgICAgICAgICAgMHgwMDAwMDAwMwotI2RlZmluZSBTSV9VQVJUX1BJTl9QQURfU1RSRU5HVEhfR0VUKHgpICAgICAgICAgICgoKHgpICYgU0lfVUFSVF9QSU5fUEFEX1NUUkVOR1RIX01BU0spID4+IFNJX1VBUlRfUElOX1BBRF9TVFJFTkdUSF9MU0IpCi0jZGVmaW5lIFNJX1VBUlRfUElOX1BBRF9TVFJFTkdUSF9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgU0lfVUFSVF9QSU5fUEFEX1NUUkVOR1RIX0xTQikgJiBTSV9VQVJUX1BJTl9QQURfU1RSRU5HVEhfTUFTSykKLQotI2RlZmluZSBDTEszMktfUElOX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZWMKLSNkZWZpbmUgQ0xLMzJLX1BJTl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGVjCi0jZGVmaW5lIENMSzMyS19QSU5fUEFEX1BVTExfTVNCICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBDTEszMktfUElOX1BBRF9QVUxMX0xTQiAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgQ0xLMzJLX1BJTl9QQURfUFVMTF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCi0jZGVmaW5lIENMSzMyS19QSU5fUEFEX1BVTExfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBDTEszMktfUElOX1BBRF9QVUxMX01BU0spID4+IENMSzMyS19QSU5fUEFEX1BVTExfTFNCKQotI2RlZmluZSBDTEszMktfUElOX1BBRF9QVUxMX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IENMSzMyS19QSU5fUEFEX1BVTExfTFNCKSAmIENMSzMyS19QSU5fUEFEX1BVTExfTUFTSykKLQotI2RlZmluZSBSRVNFVF9UVVBMRV9TVEFUVVNfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDAwZjAKLSNkZWZpbmUgUkVTRVRfVFVQTEVfU1RBVFVTX09GRlNFVCAgICAgICAgICAgICAgICAweDAwMDAwMGYwCi0jZGVmaW5lIFJFU0VUX1RVUExFX1NUQVRVU19URVNUX1JFU0VUX1RVUExFX01TQiAgMTEKLSNkZWZpbmUgUkVTRVRfVFVQTEVfU1RBVFVTX1RFU1RfUkVTRVRfVFVQTEVfTFNCICA4Ci0jZGVmaW5lIFJFU0VUX1RVUExFX1NUQVRVU19URVNUX1JFU0VUX1RVUExFX01BU0sgMHgwMDAwMGYwMAotI2RlZmluZSBSRVNFVF9UVVBMRV9TVEFUVVNfVEVTVF9SRVNFVF9UVVBMRV9HRVQoeCkgKCgoeCkgJiBSRVNFVF9UVVBMRV9TVEFUVVNfVEVTVF9SRVNFVF9UVVBMRV9NQVNLKSA+PiBSRVNFVF9UVVBMRV9TVEFUVVNfVEVTVF9SRVNFVF9UVVBMRV9MU0IpCi0jZGVmaW5lIFJFU0VUX1RVUExFX1NUQVRVU19URVNUX1JFU0VUX1RVUExFX1NFVCh4KSAoKCh4KSA8PCBSRVNFVF9UVVBMRV9TVEFUVVNfVEVTVF9SRVNFVF9UVVBMRV9MU0IpICYgUkVTRVRfVFVQTEVfU1RBVFVTX1RFU1RfUkVTRVRfVFVQTEVfTUFTSykKLSNkZWZpbmUgUkVTRVRfVFVQTEVfU1RBVFVTX1BJTl9SRVNFVF9UVVBMRV9NU0IgICA3Ci0jZGVmaW5lIFJFU0VUX1RVUExFX1NUQVRVU19QSU5fUkVTRVRfVFVQTEVfTFNCICAgMAotI2RlZmluZSBSRVNFVF9UVVBMRV9TVEFUVVNfUElOX1JFU0VUX1RVUExFX01BU0sgIDB4MDAwMDAwZmYKLSNkZWZpbmUgUkVTRVRfVFVQTEVfU1RBVFVTX1BJTl9SRVNFVF9UVVBMRV9HRVQoeCkgKCgoeCkgJiBSRVNFVF9UVVBMRV9TVEFUVVNfUElOX1JFU0VUX1RVUExFX01BU0spID4+IFJFU0VUX1RVUExFX1NUQVRVU19QSU5fUkVTRVRfVFVQTEVfTFNCKQotI2RlZmluZSBSRVNFVF9UVVBMRV9TVEFUVVNfUElOX1JFU0VUX1RVUExFX1NFVCh4KSAoKCh4KSA8PCBSRVNFVF9UVVBMRV9TVEFUVVNfUElOX1JFU0VUX1RVUExFX0xTQikgJiBSRVNFVF9UVVBMRV9TVEFUVVNfUElOX1JFU0VUX1RVUExFX01BU0spCi0KLQotI2lmbmRlZiBfX0FTU0VNQkxFUl9fCi0KLXR5cGVkZWYgc3RydWN0IGdwaW9fcmVnX3JlZ19zIHsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGdwaW9fb3V0OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZ3Bpb19vdXRfdzF0czsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGdwaW9fb3V0X3cxdGM7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBncGlvX2VuYWJsZTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGdwaW9fZW5hYmxlX3cxdHM7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBncGlvX2VuYWJsZV93MXRjOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZ3Bpb19pbjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGdwaW9fc3RhdHVzOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZ3Bpb19zdGF0dXNfdzF0czsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGdwaW9fc3RhdHVzX3cxdGM7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBncGlvX3BpbjA7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBncGlvX3BpbjE7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBncGlvX3BpbjI7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBncGlvX3BpbjM7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBncGlvX3BpbjQ7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBncGlvX3BpbjU7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBncGlvX3BpbjY7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBncGlvX3Bpbjc7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBncGlvX3Bpbjg7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBncGlvX3Bpbjk7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBncGlvX3BpbjEwOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZ3Bpb19waW4xMTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGdwaW9fcGluMTI7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBncGlvX3BpbjEzOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZ3Bpb19waW4xNDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGdwaW9fcGluMTU7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBncGlvX3BpbjE2OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZ3Bpb19waW4xNzsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHNkaW9fcGluOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY2xrX3JlcV9waW47Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBzaWdtYV9kZWx0YTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGRlYnVnX2NvbnRyb2w7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBkZWJ1Z19pbnB1dF9zZWw7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBkZWJ1Z19vdXQ7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBsYV9jb250cm9sOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbGFfY2xvY2s7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBsYV9zdGF0dXM7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBsYV90cmlnZ2VyX3NhbXBsZTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGxhX3RyaWdnZXJfcG9zaXRpb247Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBsYV9wcmVfdHJpZ2dlcjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGxhX3Bvc3RfdHJpZ2dlcjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGxhX2ZpbHRlcl9jb250cm9sOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbGFfZmlsdGVyX2RhdGE7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBsYV9maWx0ZXJfd2lsZGNhcmQ7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBsYV90cmlnZ2VyYV9kYXRhOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbGFfdHJpZ2dlcmFfd2lsZGNhcmQ7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBsYV90cmlnZ2VyYl9kYXRhOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbGFfdHJpZ2dlcmJfd2lsZGNhcmQ7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBsYV90cmlnZ2VyOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbGFfZmlmbzsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGxhWzJdOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYW50X3BpbjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGFudGRfcGluOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZ3Bpb19waW47Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBncGlvX2hfcGluOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYnRfcGluOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYnRfd2xhbl9waW47Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBzaV91YXJ0X3BpbjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGNsazMya19waW47Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCByZXNldF90dXBsZV9zdGF0dXM7Ci19IGdwaW9fcmVnX3JlZ190OwotCi0jZW5kaWYgLyogX19BU1NFTUJMRVJfXyAqLwotCi0jZW5kaWYgLyogX0dQSU9fUkVHX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzIuMC9ody9tYm94X2hvc3RfcmVnLmggYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzIuMC9ody9tYm94X2hvc3RfcmVnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4MzZhZTQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHcyLjAvaHcvbWJveF9ob3N0X3JlZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzg2ICswLDAgQEAKLSNpZm5kZWYgX01CT1hfSE9TVF9SRUdfUkVHX0hfCi0jZGVmaW5lIF9NQk9YX0hPU1RfUkVHX1JFR19IXwotCi0jZGVmaW5lIEhPU1RfSU5UX1NUQVRVU19BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBIT1NUX0lOVF9TVEFUVVNfT0ZGU0VUICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgSE9TVF9JTlRfU1RBVFVTX0VSUk9SX01TQiAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIEhPU1RfSU5UX1NUQVRVU19FUlJPUl9MU0IgICAgICAgICAgICAgICAgNwotI2RlZmluZSBIT1NUX0lOVF9TVEFUVVNfRVJST1JfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDAwODAKLSNkZWZpbmUgSE9TVF9JTlRfU1RBVFVTX0VSUk9SX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIEhPU1RfSU5UX1NUQVRVU19FUlJPUl9NQVNLKSA+PiBIT1NUX0lOVF9TVEFUVVNfRVJST1JfTFNCKQotI2RlZmluZSBIT1NUX0lOVF9TVEFUVVNfRVJST1JfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IEhPU1RfSU5UX1NUQVRVU19FUlJPUl9MU0IpICYgSE9TVF9JTlRfU1RBVFVTX0VSUk9SX01BU0spCi0jZGVmaW5lIEhPU1RfSU5UX1NUQVRVU19DUFVfTVNCICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBIT1NUX0lOVF9TVEFUVVNfQ1BVX0xTQiAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgSE9TVF9JTlRfU1RBVFVTX0NQVV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIEhPU1RfSU5UX1NUQVRVU19DUFVfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBIT1NUX0lOVF9TVEFUVVNfQ1BVX01BU0spID4+IEhPU1RfSU5UX1NUQVRVU19DUFVfTFNCKQotI2RlZmluZSBIT1NUX0lOVF9TVEFUVVNfQ1BVX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IEhPU1RfSU5UX1NUQVRVU19DUFVfTFNCKSAmIEhPU1RfSU5UX1NUQVRVU19DUFVfTUFTSykKLSNkZWZpbmUgSE9TVF9JTlRfU1RBVFVTX0RSQUdPTl9JTlRfTVNCICAgICAgICAgICA1Ci0jZGVmaW5lIEhPU1RfSU5UX1NUQVRVU19EUkFHT05fSU5UX0xTQiAgICAgICAgICAgNQotI2RlZmluZSBIT1NUX0lOVF9TVEFUVVNfRFJBR09OX0lOVF9NQVNLICAgICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgSE9TVF9JTlRfU1RBVFVTX0RSQUdPTl9JTlRfR0VUKHgpICAgICAgICAoKCh4KSAmIEhPU1RfSU5UX1NUQVRVU19EUkFHT05fSU5UX01BU0spID4+IEhPU1RfSU5UX1NUQVRVU19EUkFHT05fSU5UX0xTQikKLSNkZWZpbmUgSE9TVF9JTlRfU1RBVFVTX0RSQUdPTl9JTlRfU0VUKHgpICAgICAgICAoKCh4KSA8PCBIT1NUX0lOVF9TVEFUVVNfRFJBR09OX0lOVF9MU0IpICYgSE9TVF9JTlRfU1RBVFVTX0RSQUdPTl9JTlRfTUFTSykKLSNkZWZpbmUgSE9TVF9JTlRfU1RBVFVTX0NPVU5URVJfTVNCICAgICAgICAgICAgICA0Ci0jZGVmaW5lIEhPU1RfSU5UX1NUQVRVU19DT1VOVEVSX0xTQiAgICAgICAgICAgICAgNAotI2RlZmluZSBIT1NUX0lOVF9TVEFUVVNfQ09VTlRFUl9NQVNLICAgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgSE9TVF9JTlRfU1RBVFVTX0NPVU5URVJfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIEhPU1RfSU5UX1NUQVRVU19DT1VOVEVSX01BU0spID4+IEhPU1RfSU5UX1NUQVRVU19DT1VOVEVSX0xTQikKLSNkZWZpbmUgSE9TVF9JTlRfU1RBVFVTX0NPVU5URVJfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCBIT1NUX0lOVF9TVEFUVVNfQ09VTlRFUl9MU0IpICYgSE9TVF9JTlRfU1RBVFVTX0NPVU5URVJfTUFTSykKLSNkZWZpbmUgSE9TVF9JTlRfU1RBVFVTX01CT1hfREFUQV9NU0IgICAgICAgICAgICAzCi0jZGVmaW5lIEhPU1RfSU5UX1NUQVRVU19NQk9YX0RBVEFfTFNCICAgICAgICAgICAgMAotI2RlZmluZSBIT1NUX0lOVF9TVEFUVVNfTUJPWF9EQVRBX01BU0sgICAgICAgICAgIDB4MDAwMDAwMGYKLSNkZWZpbmUgSE9TVF9JTlRfU1RBVFVTX01CT1hfREFUQV9HRVQoeCkgICAgICAgICAoKCh4KSAmIEhPU1RfSU5UX1NUQVRVU19NQk9YX0RBVEFfTUFTSykgPj4gSE9TVF9JTlRfU1RBVFVTX01CT1hfREFUQV9MU0IpCi0jZGVmaW5lIEhPU1RfSU5UX1NUQVRVU19NQk9YX0RBVEFfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgSE9TVF9JTlRfU1RBVFVTX01CT1hfREFUQV9MU0IpICYgSE9TVF9JTlRfU1RBVFVTX01CT1hfREFUQV9NQVNLKQotCi0jZGVmaW5lIENQVV9JTlRfU1RBVFVTX0FERFJFU1MgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMQotI2RlZmluZSBDUFVfSU5UX1NUQVRVU19PRkZTRVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDEKLSNkZWZpbmUgQ1BVX0lOVF9TVEFUVVNfQklUX01TQiAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIENQVV9JTlRfU1RBVFVTX0JJVF9MU0IgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBDUFVfSU5UX1NUQVRVU19CSVRfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgQ1BVX0lOVF9TVEFUVVNfQklUX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIENQVV9JTlRfU1RBVFVTX0JJVF9NQVNLKSA+PiBDUFVfSU5UX1NUQVRVU19CSVRfTFNCKQotI2RlZmluZSBDUFVfSU5UX1NUQVRVU19CSVRfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IENQVV9JTlRfU1RBVFVTX0JJVF9MU0IpICYgQ1BVX0lOVF9TVEFUVVNfQklUX01BU0spCi0KLSNkZWZpbmUgRVJST1JfSU5UX1NUQVRVU19BRERSRVNTICAgICAgICAgICAgICAgICAweDAwMDAwNDAyCi0jZGVmaW5lIEVSUk9SX0lOVF9TVEFUVVNfT0ZGU0VUICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMgotI2RlZmluZSBFUlJPUl9JTlRfU1RBVFVTX1NQSV9NU0IgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgRVJST1JfSU5UX1NUQVRVU19TUElfTFNCICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIEVSUk9SX0lOVF9TVEFUVVNfU1BJX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBFUlJPUl9JTlRfU1RBVFVTX1NQSV9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgRVJST1JfSU5UX1NUQVRVU19TUElfTUFTSykgPj4gRVJST1JfSU5UX1NUQVRVU19TUElfTFNCKQotI2RlZmluZSBFUlJPUl9JTlRfU1RBVFVTX1NQSV9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IEVSUk9SX0lOVF9TVEFUVVNfU1BJX0xTQikgJiBFUlJPUl9JTlRfU1RBVFVTX1NQSV9NQVNLKQotI2RlZmluZSBFUlJPUl9JTlRfU1RBVFVTX1dBS0VVUF9NU0IgICAgICAgICAgICAgIDIKLSNkZWZpbmUgRVJST1JfSU5UX1NUQVRVU19XQUtFVVBfTFNCICAgICAgICAgICAgICAyCi0jZGVmaW5lIEVSUk9SX0lOVF9TVEFUVVNfV0FLRVVQX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBFUlJPUl9JTlRfU1RBVFVTX1dBS0VVUF9HRVQoeCkgICAgICAgICAgICgoKHgpICYgRVJST1JfSU5UX1NUQVRVU19XQUtFVVBfTUFTSykgPj4gRVJST1JfSU5UX1NUQVRVU19XQUtFVVBfTFNCKQotI2RlZmluZSBFUlJPUl9JTlRfU1RBVFVTX1dBS0VVUF9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IEVSUk9SX0lOVF9TVEFUVVNfV0FLRVVQX0xTQikgJiBFUlJPUl9JTlRfU1RBVFVTX1dBS0VVUF9NQVNLKQotI2RlZmluZSBFUlJPUl9JTlRfU1RBVFVTX1JYX1VOREVSRkxPV19NU0IgICAgICAgIDEKLSNkZWZpbmUgRVJST1JfSU5UX1NUQVRVU19SWF9VTkRFUkZMT1dfTFNCICAgICAgICAxCi0jZGVmaW5lIEVSUk9SX0lOVF9TVEFUVVNfUlhfVU5ERVJGTE9XX01BU0sgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBFUlJPUl9JTlRfU1RBVFVTX1JYX1VOREVSRkxPV19HRVQoeCkgICAgICgoKHgpICYgRVJST1JfSU5UX1NUQVRVU19SWF9VTkRFUkZMT1dfTUFTSykgPj4gRVJST1JfSU5UX1NUQVRVU19SWF9VTkRFUkZMT1dfTFNCKQotI2RlZmluZSBFUlJPUl9JTlRfU1RBVFVTX1JYX1VOREVSRkxPV19TRVQoeCkgICAgICgoKHgpIDw8IEVSUk9SX0lOVF9TVEFUVVNfUlhfVU5ERVJGTE9XX0xTQikgJiBFUlJPUl9JTlRfU1RBVFVTX1JYX1VOREVSRkxPV19NQVNLKQotI2RlZmluZSBFUlJPUl9JTlRfU1RBVFVTX1RYX09WRVJGTE9XX01TQiAgICAgICAgIDAKLSNkZWZpbmUgRVJST1JfSU5UX1NUQVRVU19UWF9PVkVSRkxPV19MU0IgICAgICAgICAwCi0jZGVmaW5lIEVSUk9SX0lOVF9TVEFUVVNfVFhfT1ZFUkZMT1dfTUFTSyAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBFUlJPUl9JTlRfU1RBVFVTX1RYX09WRVJGTE9XX0dFVCh4KSAgICAgICgoKHgpICYgRVJST1JfSU5UX1NUQVRVU19UWF9PVkVSRkxPV19NQVNLKSA+PiBFUlJPUl9JTlRfU1RBVFVTX1RYX09WRVJGTE9XX0xTQikKLSNkZWZpbmUgRVJST1JfSU5UX1NUQVRVU19UWF9PVkVSRkxPV19TRVQoeCkgICAgICAoKCh4KSA8PCBFUlJPUl9JTlRfU1RBVFVTX1RYX09WRVJGTE9XX0xTQikgJiBFUlJPUl9JTlRfU1RBVFVTX1RYX09WRVJGTE9XX01BU0spCi0KLSNkZWZpbmUgQ09VTlRFUl9JTlRfU1RBVFVTX0FERFJFU1MgICAgICAgICAgICAgICAweDAwMDAwNDAzCi0jZGVmaW5lIENPVU5URVJfSU5UX1NUQVRVU19PRkZTRVQgICAgICAgICAgICAgICAgMHgwMDAwMDQwMwotI2RlZmluZSBDT1VOVEVSX0lOVF9TVEFUVVNfQ09VTlRFUl9NU0IgICAgICAgICAgIDcKLSNkZWZpbmUgQ09VTlRFUl9JTlRfU1RBVFVTX0NPVU5URVJfTFNCICAgICAgICAgICAwCi0jZGVmaW5lIENPVU5URVJfSU5UX1NUQVRVU19DT1VOVEVSX01BU0sgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBDT1VOVEVSX0lOVF9TVEFUVVNfQ09VTlRFUl9HRVQoeCkgICAgICAgICgoKHgpICYgQ09VTlRFUl9JTlRfU1RBVFVTX0NPVU5URVJfTUFTSykgPj4gQ09VTlRFUl9JTlRfU1RBVFVTX0NPVU5URVJfTFNCKQotI2RlZmluZSBDT1VOVEVSX0lOVF9TVEFUVVNfQ09VTlRFUl9TRVQoeCkgICAgICAgICgoKHgpIDw8IENPVU5URVJfSU5UX1NUQVRVU19DT1VOVEVSX0xTQikgJiBDT1VOVEVSX0lOVF9TVEFUVVNfQ09VTlRFUl9NQVNLKQotCi0jZGVmaW5lIE1CT1hfRlJBTUVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwNAotI2RlZmluZSBNQk9YX0ZSQU1FX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDQKLSNkZWZpbmUgTUJPWF9GUkFNRV9SWF9FT01fTVNCICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIE1CT1hfRlJBTUVfUlhfRU9NX0xTQiAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBNQk9YX0ZSQU1FX1JYX0VPTV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZjAKLSNkZWZpbmUgTUJPWF9GUkFNRV9SWF9FT01fR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIE1CT1hfRlJBTUVfUlhfRU9NX01BU0spID4+IE1CT1hfRlJBTUVfUlhfRU9NX0xTQikKLSNkZWZpbmUgTUJPWF9GUkFNRV9SWF9FT01fU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCBNQk9YX0ZSQU1FX1JYX0VPTV9MU0IpICYgTUJPWF9GUkFNRV9SWF9FT01fTUFTSykKLSNkZWZpbmUgTUJPWF9GUkFNRV9SWF9TT01fTVNCICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIE1CT1hfRlJBTUVfUlhfU09NX0xTQiAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBNQk9YX0ZSQU1FX1JYX1NPTV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGYKLSNkZWZpbmUgTUJPWF9GUkFNRV9SWF9TT01fR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIE1CT1hfRlJBTUVfUlhfU09NX01BU0spID4+IE1CT1hfRlJBTUVfUlhfU09NX0xTQikKLSNkZWZpbmUgTUJPWF9GUkFNRV9SWF9TT01fU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCBNQk9YX0ZSQU1FX1JYX1NPTV9MU0IpICYgTUJPWF9GUkFNRV9SWF9TT01fTUFTSykKLQotI2RlZmluZSBSWF9MT09LQUhFQURfVkFMSURfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDA0MDUKLSNkZWZpbmUgUlhfTE9PS0FIRUFEX1ZBTElEX09GRlNFVCAgICAgICAgICAgICAgICAweDAwMDAwNDA1Ci0jZGVmaW5lIFJYX0xPT0tBSEVBRF9WQUxJRF9NQk9YX01TQiAgICAgICAgICAgICAgMwotI2RlZmluZSBSWF9MT09LQUhFQURfVkFMSURfTUJPWF9MU0IgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUlhfTE9PS0FIRUFEX1ZBTElEX01CT1hfTUFTSyAgICAgICAgICAgICAweDAwMDAwMDBmCi0jZGVmaW5lIFJYX0xPT0tBSEVBRF9WQUxJRF9NQk9YX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBSWF9MT09LQUhFQURfVkFMSURfTUJPWF9NQVNLKSA+PiBSWF9MT09LQUhFQURfVkFMSURfTUJPWF9MU0IpCi0jZGVmaW5lIFJYX0xPT0tBSEVBRF9WQUxJRF9NQk9YX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgUlhfTE9PS0FIRUFEX1ZBTElEX01CT1hfTFNCKSAmIFJYX0xPT0tBSEVBRF9WQUxJRF9NQk9YX01BU0spCi0KLSNkZWZpbmUgUlhfTE9PS0FIRUFEMF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDA4Ci0jZGVmaW5lIFJYX0xPT0tBSEVBRDBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwOAotI2RlZmluZSBSWF9MT09LQUhFQUQwX0RBVEFfTVNCICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUlhfTE9PS0FIRUFEMF9EQVRBX0xTQiAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFJYX0xPT0tBSEVBRDBfREFUQV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBSWF9MT09LQUhFQUQwX0RBVEFfR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgUlhfTE9PS0FIRUFEMF9EQVRBX01BU0spID4+IFJYX0xPT0tBSEVBRDBfREFUQV9MU0IpCi0jZGVmaW5lIFJYX0xPT0tBSEVBRDBfREFUQV9TRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPDwgUlhfTE9PS0FIRUFEMF9EQVRBX0xTQikgJiBSWF9MT09LQUhFQUQwX0RBVEFfTUFTSykKLQotI2RlZmluZSBSWF9MT09LQUhFQUQxX0FERFJFU1MgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MGMKLSNkZWZpbmUgUlhfTE9PS0FIRUFEMV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDBjCi0jZGVmaW5lIFJYX0xPT0tBSEVBRDFfREFUQV9NU0IgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBSWF9MT09LQUhFQUQxX0RBVEFfTFNCICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUlhfTE9PS0FIRUFEMV9EQVRBX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIFJYX0xPT0tBSEVBRDFfREFUQV9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiBSWF9MT09LQUhFQUQxX0RBVEFfTUFTSykgPj4gUlhfTE9PS0FIRUFEMV9EQVRBX0xTQikKLSNkZWZpbmUgUlhfTE9PS0FIRUFEMV9EQVRBX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCBSWF9MT09LQUhFQUQxX0RBVEFfTFNCKSAmIFJYX0xPT0tBSEVBRDFfREFUQV9NQVNLKQotCi0jZGVmaW5lIFJYX0xPT0tBSEVBRDJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQxMAotI2RlZmluZSBSWF9MT09LQUhFQUQyX09GRlNFVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MTAKLSNkZWZpbmUgUlhfTE9PS0FIRUFEMl9EQVRBX01TQiAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFJYX0xPT0tBSEVBRDJfREFUQV9MU0IgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBSWF9MT09LQUhFQUQyX0RBVEFfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgUlhfTE9PS0FIRUFEMl9EQVRBX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIFJYX0xPT0tBSEVBRDJfREFUQV9NQVNLKSA+PiBSWF9MT09LQUhFQUQyX0RBVEFfTFNCKQotI2RlZmluZSBSWF9MT09LQUhFQUQyX0RBVEFfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IFJYX0xPT0tBSEVBRDJfREFUQV9MU0IpICYgUlhfTE9PS0FIRUFEMl9EQVRBX01BU0spCi0KLSNkZWZpbmUgUlhfTE9PS0FIRUFEM19BRERSRVNTICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDE0Ci0jZGVmaW5lIFJYX0xPT0tBSEVBRDNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQxNAotI2RlZmluZSBSWF9MT09LQUhFQUQzX0RBVEFfTVNCICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUlhfTE9PS0FIRUFEM19EQVRBX0xTQiAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFJYX0xPT0tBSEVBRDNfREFUQV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBSWF9MT09LQUhFQUQzX0RBVEFfR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgUlhfTE9PS0FIRUFEM19EQVRBX01BU0spID4+IFJYX0xPT0tBSEVBRDNfREFUQV9MU0IpCi0jZGVmaW5lIFJYX0xPT0tBSEVBRDNfREFUQV9TRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPDwgUlhfTE9PS0FIRUFEM19EQVRBX0xTQikgJiBSWF9MT09LQUhFQUQzX0RBVEFfTUFTSykKLQotI2RlZmluZSBJTlRfU1RBVFVTX0VOQUJMRV9BRERSRVNTICAgICAgICAgICAgICAgIDB4MDAwMDA0MTgKLSNkZWZpbmUgSU5UX1NUQVRVU19FTkFCTEVfT0ZGU0VUICAgICAgICAgICAgICAgICAweDAwMDAwNDE4Ci0jZGVmaW5lIElOVF9TVEFUVVNfRU5BQkxFX0VSUk9SX01TQiAgICAgICAgICAgICAgNwotI2RlZmluZSBJTlRfU1RBVFVTX0VOQUJMRV9FUlJPUl9MU0IgICAgICAgICAgICAgIDcKLSNkZWZpbmUgSU5UX1NUQVRVU19FTkFCTEVfRVJST1JfTUFTSyAgICAgICAgICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIElOVF9TVEFUVVNfRU5BQkxFX0VSUk9SX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBJTlRfU1RBVFVTX0VOQUJMRV9FUlJPUl9NQVNLKSA+PiBJTlRfU1RBVFVTX0VOQUJMRV9FUlJPUl9MU0IpCi0jZGVmaW5lIElOVF9TVEFUVVNfRU5BQkxFX0VSUk9SX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgSU5UX1NUQVRVU19FTkFCTEVfRVJST1JfTFNCKSAmIElOVF9TVEFUVVNfRU5BQkxFX0VSUk9SX01BU0spCi0jZGVmaW5lIElOVF9TVEFUVVNfRU5BQkxFX0NQVV9NU0IgICAgICAgICAgICAgICAgNgotI2RlZmluZSBJTlRfU1RBVFVTX0VOQUJMRV9DUFVfTFNCICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgSU5UX1NUQVRVU19FTkFCTEVfQ1BVX01BU0sgICAgICAgICAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIElOVF9TVEFUVVNfRU5BQkxFX0NQVV9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBJTlRfU1RBVFVTX0VOQUJMRV9DUFVfTUFTSykgPj4gSU5UX1NUQVRVU19FTkFCTEVfQ1BVX0xTQikKLSNkZWZpbmUgSU5UX1NUQVRVU19FTkFCTEVfQ1BVX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBJTlRfU1RBVFVTX0VOQUJMRV9DUFVfTFNCKSAmIElOVF9TVEFUVVNfRU5BQkxFX0NQVV9NQVNLKQotI2RlZmluZSBJTlRfU1RBVFVTX0VOQUJMRV9EUkFHT05fSU5UX01TQiAgICAgICAgIDUKLSNkZWZpbmUgSU5UX1NUQVRVU19FTkFCTEVfRFJBR09OX0lOVF9MU0IgICAgICAgICA1Ci0jZGVmaW5lIElOVF9TVEFUVVNfRU5BQkxFX0RSQUdPTl9JTlRfTUFTSyAgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBJTlRfU1RBVFVTX0VOQUJMRV9EUkFHT05fSU5UX0dFVCh4KSAgICAgICgoKHgpICYgSU5UX1NUQVRVU19FTkFCTEVfRFJBR09OX0lOVF9NQVNLKSA+PiBJTlRfU1RBVFVTX0VOQUJMRV9EUkFHT05fSU5UX0xTQikKLSNkZWZpbmUgSU5UX1NUQVRVU19FTkFCTEVfRFJBR09OX0lOVF9TRVQoeCkgICAgICAoKCh4KSA8PCBJTlRfU1RBVFVTX0VOQUJMRV9EUkFHT05fSU5UX0xTQikgJiBJTlRfU1RBVFVTX0VOQUJMRV9EUkFHT05fSU5UX01BU0spCi0jZGVmaW5lIElOVF9TVEFUVVNfRU5BQkxFX0NPVU5URVJfTVNCICAgICAgICAgICAgNAotI2RlZmluZSBJTlRfU1RBVFVTX0VOQUJMRV9DT1VOVEVSX0xTQiAgICAgICAgICAgIDQKLSNkZWZpbmUgSU5UX1NUQVRVU19FTkFCTEVfQ09VTlRFUl9NQVNLICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIElOVF9TVEFUVVNfRU5BQkxFX0NPVU5URVJfR0VUKHgpICAgICAgICAgKCgoeCkgJiBJTlRfU1RBVFVTX0VOQUJMRV9DT1VOVEVSX01BU0spID4+IElOVF9TVEFUVVNfRU5BQkxFX0NPVU5URVJfTFNCKQotI2RlZmluZSBJTlRfU1RBVFVTX0VOQUJMRV9DT1VOVEVSX1NFVCh4KSAgICAgICAgICgoKHgpIDw8IElOVF9TVEFUVVNfRU5BQkxFX0NPVU5URVJfTFNCKSAmIElOVF9TVEFUVVNfRU5BQkxFX0NPVU5URVJfTUFTSykKLSNkZWZpbmUgSU5UX1NUQVRVU19FTkFCTEVfTUJPWF9EQVRBX01TQiAgICAgICAgICAzCi0jZGVmaW5lIElOVF9TVEFUVVNfRU5BQkxFX01CT1hfREFUQV9MU0IgICAgICAgICAgMAotI2RlZmluZSBJTlRfU1RBVFVTX0VOQUJMRV9NQk9YX0RBVEFfTUFTSyAgICAgICAgIDB4MDAwMDAwMGYKLSNkZWZpbmUgSU5UX1NUQVRVU19FTkFCTEVfTUJPWF9EQVRBX0dFVCh4KSAgICAgICAoKCh4KSAmIElOVF9TVEFUVVNfRU5BQkxFX01CT1hfREFUQV9NQVNLKSA+PiBJTlRfU1RBVFVTX0VOQUJMRV9NQk9YX0RBVEFfTFNCKQotI2RlZmluZSBJTlRfU1RBVFVTX0VOQUJMRV9NQk9YX0RBVEFfU0VUKHgpICAgICAgICgoKHgpIDw8IElOVF9TVEFUVVNfRU5BQkxFX01CT1hfREFUQV9MU0IpICYgSU5UX1NUQVRVU19FTkFCTEVfTUJPWF9EQVRBX01BU0spCi0KLSNkZWZpbmUgQ1BVX0lOVF9TVEFUVVNfRU5BQkxFX0FERFJFU1MgICAgICAgICAgICAweDAwMDAwNDE5Ci0jZGVmaW5lIENQVV9JTlRfU1RBVFVTX0VOQUJMRV9PRkZTRVQgICAgICAgICAgICAgMHgwMDAwMDQxOQotI2RlZmluZSBDUFVfSU5UX1NUQVRVU19FTkFCTEVfQklUX01TQiAgICAgICAgICAgIDcKLSNkZWZpbmUgQ1BVX0lOVF9TVEFUVVNfRU5BQkxFX0JJVF9MU0IgICAgICAgICAgICAwCi0jZGVmaW5lIENQVV9JTlRfU1RBVFVTX0VOQUJMRV9CSVRfTUFTSyAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBDUFVfSU5UX1NUQVRVU19FTkFCTEVfQklUX0dFVCh4KSAgICAgICAgICgoKHgpICYgQ1BVX0lOVF9TVEFUVVNfRU5BQkxFX0JJVF9NQVNLKSA+PiBDUFVfSU5UX1NUQVRVU19FTkFCTEVfQklUX0xTQikKLSNkZWZpbmUgQ1BVX0lOVF9TVEFUVVNfRU5BQkxFX0JJVF9TRVQoeCkgICAgICAgICAoKCh4KSA8PCBDUFVfSU5UX1NUQVRVU19FTkFCTEVfQklUX0xTQikgJiBDUFVfSU5UX1NUQVRVU19FTkFCTEVfQklUX01BU0spCi0KLSNkZWZpbmUgRVJST1JfU1RBVFVTX0VOQUJMRV9BRERSRVNTICAgICAgICAgICAgICAweDAwMDAwNDFhCi0jZGVmaW5lIEVSUk9SX1NUQVRVU19FTkFCTEVfT0ZGU0VUICAgICAgICAgICAgICAgMHgwMDAwMDQxYQotI2RlZmluZSBFUlJPUl9TVEFUVVNfRU5BQkxFX1dBS0VVUF9NU0IgICAgICAgICAgIDIKLSNkZWZpbmUgRVJST1JfU1RBVFVTX0VOQUJMRV9XQUtFVVBfTFNCICAgICAgICAgICAyCi0jZGVmaW5lIEVSUk9SX1NUQVRVU19FTkFCTEVfV0FLRVVQX01BU0sgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBFUlJPUl9TVEFUVVNfRU5BQkxFX1dBS0VVUF9HRVQoeCkgICAgICAgICgoKHgpICYgRVJST1JfU1RBVFVTX0VOQUJMRV9XQUtFVVBfTUFTSykgPj4gRVJST1JfU1RBVFVTX0VOQUJMRV9XQUtFVVBfTFNCKQotI2RlZmluZSBFUlJPUl9TVEFUVVNfRU5BQkxFX1dBS0VVUF9TRVQoeCkgICAgICAgICgoKHgpIDw8IEVSUk9SX1NUQVRVU19FTkFCTEVfV0FLRVVQX0xTQikgJiBFUlJPUl9TVEFUVVNfRU5BQkxFX1dBS0VVUF9NQVNLKQotI2RlZmluZSBFUlJPUl9TVEFUVVNfRU5BQkxFX1JYX1VOREVSRkxPV19NU0IgICAgIDEKLSNkZWZpbmUgRVJST1JfU1RBVFVTX0VOQUJMRV9SWF9VTkRFUkZMT1dfTFNCICAgICAxCi0jZGVmaW5lIEVSUk9SX1NUQVRVU19FTkFCTEVfUlhfVU5ERVJGTE9XX01BU0sgICAgMHgwMDAwMDAwMgotI2RlZmluZSBFUlJPUl9TVEFUVVNfRU5BQkxFX1JYX1VOREVSRkxPV19HRVQoeCkgICgoKHgpICYgRVJST1JfU1RBVFVTX0VOQUJMRV9SWF9VTkRFUkZMT1dfTUFTSykgPj4gRVJST1JfU1RBVFVTX0VOQUJMRV9SWF9VTkRFUkZMT1dfTFNCKQotI2RlZmluZSBFUlJPUl9TVEFUVVNfRU5BQkxFX1JYX1VOREVSRkxPV19TRVQoeCkgICgoKHgpIDw8IEVSUk9SX1NUQVRVU19FTkFCTEVfUlhfVU5ERVJGTE9XX0xTQikgJiBFUlJPUl9TVEFUVVNfRU5BQkxFX1JYX1VOREVSRkxPV19NQVNLKQotI2RlZmluZSBFUlJPUl9TVEFUVVNfRU5BQkxFX1RYX09WRVJGTE9XX01TQiAgICAgIDAKLSNkZWZpbmUgRVJST1JfU1RBVFVTX0VOQUJMRV9UWF9PVkVSRkxPV19MU0IgICAgICAwCi0jZGVmaW5lIEVSUk9SX1NUQVRVU19FTkFCTEVfVFhfT1ZFUkZMT1dfTUFTSyAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBFUlJPUl9TVEFUVVNfRU5BQkxFX1RYX09WRVJGTE9XX0dFVCh4KSAgICgoKHgpICYgRVJST1JfU1RBVFVTX0VOQUJMRV9UWF9PVkVSRkxPV19NQVNLKSA+PiBFUlJPUl9TVEFUVVNfRU5BQkxFX1RYX09WRVJGTE9XX0xTQikKLSNkZWZpbmUgRVJST1JfU1RBVFVTX0VOQUJMRV9UWF9PVkVSRkxPV19TRVQoeCkgICAoKCh4KSA8PCBFUlJPUl9TVEFUVVNfRU5BQkxFX1RYX09WRVJGTE9XX0xTQikgJiBFUlJPUl9TVEFUVVNfRU5BQkxFX1RYX09WRVJGTE9XX01BU0spCi0KLSNkZWZpbmUgQ09VTlRFUl9JTlRfU1RBVFVTX0VOQUJMRV9BRERSRVNTICAgICAgICAweDAwMDAwNDFiCi0jZGVmaW5lIENPVU5URVJfSU5UX1NUQVRVU19FTkFCTEVfT0ZGU0VUICAgICAgICAgMHgwMDAwMDQxYgotI2RlZmluZSBDT1VOVEVSX0lOVF9TVEFUVVNfRU5BQkxFX0JJVF9NU0IgICAgICAgIDcKLSNkZWZpbmUgQ09VTlRFUl9JTlRfU1RBVFVTX0VOQUJMRV9CSVRfTFNCICAgICAgICAwCi0jZGVmaW5lIENPVU5URVJfSU5UX1NUQVRVU19FTkFCTEVfQklUX01BU0sgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBDT1VOVEVSX0lOVF9TVEFUVVNfRU5BQkxFX0JJVF9HRVQoeCkgICAgICgoKHgpICYgQ09VTlRFUl9JTlRfU1RBVFVTX0VOQUJMRV9CSVRfTUFTSykgPj4gQ09VTlRFUl9JTlRfU1RBVFVTX0VOQUJMRV9CSVRfTFNCKQotI2RlZmluZSBDT1VOVEVSX0lOVF9TVEFUVVNfRU5BQkxFX0JJVF9TRVQoeCkgICAgICgoKHgpIDw8IENPVU5URVJfSU5UX1NUQVRVU19FTkFCTEVfQklUX0xTQikgJiBDT1VOVEVSX0lOVF9TVEFUVVNfRU5BQkxFX0JJVF9NQVNLKQotCi0jZGVmaW5lIENPVU5UX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQyMAotI2RlZmluZSBDT1VOVF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MjAKLSNkZWZpbmUgQ09VTlRfVkFMVUVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIENPVU5UX1ZBTFVFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBDT1VOVF9WQUxVRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgQ09VTlRfVkFMVUVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIENPVU5UX1ZBTFVFX01BU0spID4+IENPVU5UX1ZBTFVFX0xTQikKLSNkZWZpbmUgQ09VTlRfVkFMVUVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBDT1VOVF9WQUxVRV9MU0IpICYgQ09VTlRfVkFMVUVfTUFTSykKLQotI2RlZmluZSBDT1VOVF9ERUNfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0NDAKLSNkZWZpbmUgQ09VTlRfREVDX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDQwCi0jZGVmaW5lIENPVU5UX0RFQ19WQUxVRV9NU0IgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBDT1VOVF9ERUNfVkFMVUVfTFNCICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgQ09VTlRfREVDX1ZBTFVFX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIENPVU5UX0RFQ19WQUxVRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBDT1VOVF9ERUNfVkFMVUVfTUFTSykgPj4gQ09VTlRfREVDX1ZBTFVFX0xTQikKLSNkZWZpbmUgQ09VTlRfREVDX1ZBTFVFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBDT1VOVF9ERUNfVkFMVUVfTFNCKSAmIENPVU5UX0RFQ19WQUxVRV9NQVNLKQotCi0jZGVmaW5lIFNDUkFUQ0hfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQ2MAotI2RlZmluZSBTQ1JBVENIX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0NjAKLSNkZWZpbmUgU0NSQVRDSF9WQUxVRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFNDUkFUQ0hfVkFMVUVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBTQ1JBVENIX1ZBTFVFX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgU0NSQVRDSF9WQUxVRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFNDUkFUQ0hfVkFMVUVfTUFTSykgPj4gU0NSQVRDSF9WQUxVRV9MU0IpCi0jZGVmaW5lIFNDUkFUQ0hfVkFMVUVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgU0NSQVRDSF9WQUxVRV9MU0IpICYgU0NSQVRDSF9WQUxVRV9NQVNLKQotCi0jZGVmaW5lIEZJRk9fVElNRU9VVF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQ2OAotI2RlZmluZSBGSUZPX1RJTUVPVVRfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0NjgKLSNkZWZpbmUgRklGT19USU1FT1VUX1ZBTFVFX01TQiAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIEZJRk9fVElNRU9VVF9WQUxVRV9MU0IgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBGSUZPX1RJTUVPVVRfVkFMVUVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgRklGT19USU1FT1VUX1ZBTFVFX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIEZJRk9fVElNRU9VVF9WQUxVRV9NQVNLKSA+PiBGSUZPX1RJTUVPVVRfVkFMVUVfTFNCKQotI2RlZmluZSBGSUZPX1RJTUVPVVRfVkFMVUVfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IEZJRk9fVElNRU9VVF9WQUxVRV9MU0IpICYgRklGT19USU1FT1VUX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgRklGT19USU1FT1VUX0VOQUJMRV9BRERSRVNTICAgICAgICAgICAgICAweDAwMDAwNDY5Ci0jZGVmaW5lIEZJRk9fVElNRU9VVF9FTkFCTEVfT0ZGU0VUICAgICAgICAgICAgICAgMHgwMDAwMDQ2OQotI2RlZmluZSBGSUZPX1RJTUVPVVRfRU5BQkxFX1NFVF9NU0IgICAgICAgICAgICAgIDAKLSNkZWZpbmUgRklGT19USU1FT1VUX0VOQUJMRV9TRVRfTFNCICAgICAgICAgICAgICAwCi0jZGVmaW5lIEZJRk9fVElNRU9VVF9FTkFCTEVfU0VUX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBGSUZPX1RJTUVPVVRfRU5BQkxFX1NFVF9HRVQoeCkgICAgICAgICAgICgoKHgpICYgRklGT19USU1FT1VUX0VOQUJMRV9TRVRfTUFTSykgPj4gRklGT19USU1FT1VUX0VOQUJMRV9TRVRfTFNCKQotI2RlZmluZSBGSUZPX1RJTUVPVVRfRU5BQkxFX1NFVF9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IEZJRk9fVElNRU9VVF9FTkFCTEVfU0VUX0xTQikgJiBGSUZPX1RJTUVPVVRfRU5BQkxFX1NFVF9NQVNLKQotCi0jZGVmaW5lIERJU0FCTEVfU0xFRVBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQ2YQotI2RlZmluZSBESVNBQkxFX1NMRUVQX09GRlNFVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0NmEKLSNkZWZpbmUgRElTQUJMRV9TTEVFUF9GT1JfSU5UX01TQiAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIERJU0FCTEVfU0xFRVBfRk9SX0lOVF9MU0IgICAgICAgICAgICAgICAgMQotI2RlZmluZSBESVNBQkxFX1NMRUVQX0ZPUl9JTlRfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgRElTQUJMRV9TTEVFUF9GT1JfSU5UX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIERJU0FCTEVfU0xFRVBfRk9SX0lOVF9NQVNLKSA+PiBESVNBQkxFX1NMRUVQX0ZPUl9JTlRfTFNCKQotI2RlZmluZSBESVNBQkxFX1NMRUVQX0ZPUl9JTlRfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IERJU0FCTEVfU0xFRVBfRk9SX0lOVF9MU0IpICYgRElTQUJMRV9TTEVFUF9GT1JfSU5UX01BU0spCi0jZGVmaW5lIERJU0FCTEVfU0xFRVBfT05fTVNCICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBESVNBQkxFX1NMRUVQX09OX0xTQiAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgRElTQUJMRV9TTEVFUF9PTl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIERJU0FCTEVfU0xFRVBfT05fR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiBESVNBQkxFX1NMRUVQX09OX01BU0spID4+IERJU0FCTEVfU0xFRVBfT05fTFNCKQotI2RlZmluZSBESVNBQkxFX1NMRUVQX09OX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IERJU0FCTEVfU0xFRVBfT05fTFNCKSAmIERJU0FCTEVfU0xFRVBfT05fTUFTSykKLQotI2RlZmluZSBMT0NBTF9CVVNfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0NzAKLSNkZWZpbmUgTE9DQUxfQlVTX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDcwCi0jZGVmaW5lIExPQ0FMX0JVU19TVEFURV9NU0IgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBMT0NBTF9CVVNfU1RBVEVfTFNCICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTE9DQUxfQlVTX1NUQVRFX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCi0jZGVmaW5lIExPQ0FMX0JVU19TVEFURV9HRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBMT0NBTF9CVVNfU1RBVEVfTUFTSykgPj4gTE9DQUxfQlVTX1NUQVRFX0xTQikKLSNkZWZpbmUgTE9DQUxfQlVTX1NUQVRFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBMT0NBTF9CVVNfU1RBVEVfTFNCKSAmIExPQ0FMX0JVU19TVEFURV9NQVNLKQotCi0jZGVmaW5lIElOVF9XTEFOX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQ3MgotI2RlZmluZSBJTlRfV0xBTl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0NzIKLSNkZWZpbmUgSU5UX1dMQU5fVkVDVE9SX01TQiAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIElOVF9XTEFOX1ZFQ1RPUl9MU0IgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBJTlRfV0xBTl9WRUNUT1JfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgSU5UX1dMQU5fVkVDVE9SX0dFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIElOVF9XTEFOX1ZFQ1RPUl9NQVNLKSA+PiBJTlRfV0xBTl9WRUNUT1JfTFNCKQotI2RlZmluZSBJTlRfV0xBTl9WRUNUT1JfU0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IElOVF9XTEFOX1ZFQ1RPUl9MU0IpICYgSU5UX1dMQU5fVkVDVE9SX01BU0spCi0KLSNkZWZpbmUgV0lORE9XX0RBVEFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDc0Ci0jZGVmaW5lIFdJTkRPV19EQVRBX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQ3NAotI2RlZmluZSBXSU5ET1dfREFUQV9EQVRBX01TQiAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgV0lORE9XX0RBVEFfREFUQV9MU0IgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdJTkRPV19EQVRBX0RBVEFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBXSU5ET1dfREFUQV9EQVRBX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgV0lORE9XX0RBVEFfREFUQV9NQVNLKSA+PiBXSU5ET1dfREFUQV9EQVRBX0xTQikKLSNkZWZpbmUgV0lORE9XX0RBVEFfREFUQV9TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBXSU5ET1dfREFUQV9EQVRBX0xTQikgJiBXSU5ET1dfREFUQV9EQVRBX01BU0spCi0KLSNkZWZpbmUgV0lORE9XX1dSSVRFX0FERFJfQUREUkVTUyAgICAgICAgICAgICAgICAweDAwMDAwNDc4Ci0jZGVmaW5lIFdJTkRPV19XUklURV9BRERSX09GRlNFVCAgICAgICAgICAgICAgICAgMHgwMDAwMDQ3OAotI2RlZmluZSBXSU5ET1dfV1JJVEVfQUREUl9BRERSX01TQiAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgV0lORE9XX1dSSVRFX0FERFJfQUREUl9MU0IgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdJTkRPV19XUklURV9BRERSX0FERFJfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBXSU5ET1dfV1JJVEVfQUREUl9BRERSX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgV0lORE9XX1dSSVRFX0FERFJfQUREUl9NQVNLKSA+PiBXSU5ET1dfV1JJVEVfQUREUl9BRERSX0xTQikKLSNkZWZpbmUgV0lORE9XX1dSSVRFX0FERFJfQUREUl9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBXSU5ET1dfV1JJVEVfQUREUl9BRERSX0xTQikgJiBXSU5ET1dfV1JJVEVfQUREUl9BRERSX01BU0spCi0KLSNkZWZpbmUgV0lORE9XX1JFQURfQUREUl9BRERSRVNTICAgICAgICAgICAgICAgICAweDAwMDAwNDdjCi0jZGVmaW5lIFdJTkRPV19SRUFEX0FERFJfT0ZGU0VUICAgICAgICAgICAgICAgICAgMHgwMDAwMDQ3YwotI2RlZmluZSBXSU5ET1dfUkVBRF9BRERSX0FERFJfTVNCICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgV0lORE9XX1JFQURfQUREUl9BRERSX0xTQiAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdJTkRPV19SRUFEX0FERFJfQUREUl9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBXSU5ET1dfUkVBRF9BRERSX0FERFJfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgV0lORE9XX1JFQURfQUREUl9BRERSX01BU0spID4+IFdJTkRPV19SRUFEX0FERFJfQUREUl9MU0IpCi0jZGVmaW5lIFdJTkRPV19SRUFEX0FERFJfQUREUl9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgV0lORE9XX1JFQURfQUREUl9BRERSX0xTQikgJiBXSU5ET1dfUkVBRF9BRERSX0FERFJfTUFTSykKLQotI2RlZmluZSBTUElfQ09ORklHX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0ODAKLSNkZWZpbmUgU1BJX0NPTkZJR19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDgwCi0jZGVmaW5lIFNQSV9DT05GSUdfU1BJX1JFU0VUX01TQiAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBTUElfQ09ORklHX1NQSV9SRVNFVF9MU0IgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgU1BJX0NPTkZJR19TUElfUkVTRVRfTUFTSyAgICAgICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIFNQSV9DT05GSUdfU1BJX1JFU0VUX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiBTUElfQ09ORklHX1NQSV9SRVNFVF9NQVNLKSA+PiBTUElfQ09ORklHX1NQSV9SRVNFVF9MU0IpCi0jZGVmaW5lIFNQSV9DT05GSUdfU1BJX1JFU0VUX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgU1BJX0NPTkZJR19TUElfUkVTRVRfTFNCKSAmIFNQSV9DT05GSUdfU1BJX1JFU0VUX01BU0spCi0jZGVmaW5lIFNQSV9DT05GSUdfSU5URVJSVVBUX0VOQUJMRV9NU0IgICAgICAgICAgMwotI2RlZmluZSBTUElfQ09ORklHX0lOVEVSUlVQVF9FTkFCTEVfTFNCICAgICAgICAgIDMKLSNkZWZpbmUgU1BJX0NPTkZJR19JTlRFUlJVUFRfRU5BQkxFX01BU0sgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIFNQSV9DT05GSUdfSU5URVJSVVBUX0VOQUJMRV9HRVQoeCkgICAgICAgKCgoeCkgJiBTUElfQ09ORklHX0lOVEVSUlVQVF9FTkFCTEVfTUFTSykgPj4gU1BJX0NPTkZJR19JTlRFUlJVUFRfRU5BQkxFX0xTQikKLSNkZWZpbmUgU1BJX0NPTkZJR19JTlRFUlJVUFRfRU5BQkxFX1NFVCh4KSAgICAgICAoKCh4KSA8PCBTUElfQ09ORklHX0lOVEVSUlVQVF9FTkFCTEVfTFNCKSAmIFNQSV9DT05GSUdfSU5URVJSVVBUX0VOQUJMRV9NQVNLKQotI2RlZmluZSBTUElfQ09ORklHX1RFU1RfTU9ERV9NU0IgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgU1BJX0NPTkZJR19URVNUX01PREVfTFNCICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFNQSV9DT05GSUdfVEVTVF9NT0RFX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBTUElfQ09ORklHX1RFU1RfTU9ERV9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgU1BJX0NPTkZJR19URVNUX01PREVfTUFTSykgPj4gU1BJX0NPTkZJR19URVNUX01PREVfTFNCKQotI2RlZmluZSBTUElfQ09ORklHX1RFU1RfTU9ERV9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFNQSV9DT05GSUdfVEVTVF9NT0RFX0xTQikgJiBTUElfQ09ORklHX1RFU1RfTU9ERV9NQVNLKQotI2RlZmluZSBTUElfQ09ORklHX0RBVEFfU0laRV9NU0IgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgU1BJX0NPTkZJR19EQVRBX1NJWkVfTFNCICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFNQSV9DT05GSUdfREFUQV9TSVpFX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwMwotI2RlZmluZSBTUElfQ09ORklHX0RBVEFfU0laRV9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgU1BJX0NPTkZJR19EQVRBX1NJWkVfTUFTSykgPj4gU1BJX0NPTkZJR19EQVRBX1NJWkVfTFNCKQotI2RlZmluZSBTUElfQ09ORklHX0RBVEFfU0laRV9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFNQSV9DT05GSUdfREFUQV9TSVpFX0xTQikgJiBTUElfQ09ORklHX0RBVEFfU0laRV9NQVNLKQotCi0jZGVmaW5lIFNQSV9TVEFUVVNfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQ4MQotI2RlZmluZSBTUElfU1RBVFVTX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0ODEKLSNkZWZpbmUgU1BJX1NUQVRVU19BRERSX0VSUl9NU0IgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFNQSV9TVEFUVVNfQUREUl9FUlJfTFNCICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBTUElfU1RBVFVTX0FERFJfRVJSX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgU1BJX1NUQVRVU19BRERSX0VSUl9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIFNQSV9TVEFUVVNfQUREUl9FUlJfTUFTSykgPj4gU1BJX1NUQVRVU19BRERSX0VSUl9MU0IpCi0jZGVmaW5lIFNQSV9TVEFUVVNfQUREUl9FUlJfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgU1BJX1NUQVRVU19BRERSX0VSUl9MU0IpICYgU1BJX1NUQVRVU19BRERSX0VSUl9NQVNLKQotI2RlZmluZSBTUElfU1RBVFVTX1JEX0VSUl9NU0IgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgU1BJX1NUQVRVU19SRF9FUlJfTFNCICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFNQSV9TVEFUVVNfUkRfRVJSX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBTUElfU1RBVFVTX1JEX0VSUl9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgU1BJX1NUQVRVU19SRF9FUlJfTUFTSykgPj4gU1BJX1NUQVRVU19SRF9FUlJfTFNCKQotI2RlZmluZSBTUElfU1RBVFVTX1JEX0VSUl9TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNQSV9TVEFUVVNfUkRfRVJSX0xTQikgJiBTUElfU1RBVFVTX1JEX0VSUl9NQVNLKQotI2RlZmluZSBTUElfU1RBVFVTX1dSX0VSUl9NU0IgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgU1BJX1NUQVRVU19XUl9FUlJfTFNCICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFNQSV9TVEFUVVNfV1JfRVJSX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBTUElfU1RBVFVTX1dSX0VSUl9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgU1BJX1NUQVRVU19XUl9FUlJfTUFTSykgPj4gU1BJX1NUQVRVU19XUl9FUlJfTFNCKQotI2RlZmluZSBTUElfU1RBVFVTX1dSX0VSUl9TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNQSV9TVEFUVVNfV1JfRVJSX0xTQikgJiBTUElfU1RBVFVTX1dSX0VSUl9NQVNLKQotI2RlZmluZSBTUElfU1RBVFVTX1JFQURZX01TQiAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgU1BJX1NUQVRVU19SRUFEWV9MU0IgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFNQSV9TVEFUVVNfUkVBRFlfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBTUElfU1RBVFVTX1JFQURZX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgU1BJX1NUQVRVU19SRUFEWV9NQVNLKSA+PiBTUElfU1RBVFVTX1JFQURZX0xTQikKLSNkZWZpbmUgU1BJX1NUQVRVU19SRUFEWV9TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBTUElfU1RBVFVTX1JFQURZX0xTQikgJiBTUElfU1RBVFVTX1JFQURZX01BU0spCi0KLSNkZWZpbmUgTk9OX0FTU09DX1NMRUVQX0VOX0FERFJFU1MgICAgICAgICAgICAgICAweDAwMDAwNDgyCi0jZGVmaW5lIE5PTl9BU1NPQ19TTEVFUF9FTl9PRkZTRVQgICAgICAgICAgICAgICAgMHgwMDAwMDQ4MgotI2RlZmluZSBOT05fQVNTT0NfU0xFRVBfRU5fQklUX01TQiAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTk9OX0FTU09DX1NMRUVQX0VOX0JJVF9MU0IgICAgICAgICAgICAgICAwCi0jZGVmaW5lIE5PTl9BU1NPQ19TTEVFUF9FTl9CSVRfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBOT05fQVNTT0NfU0xFRVBfRU5fQklUX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgTk9OX0FTU09DX1NMRUVQX0VOX0JJVF9NQVNLKSA+PiBOT05fQVNTT0NfU0xFRVBfRU5fQklUX0xTQikKLSNkZWZpbmUgTk9OX0FTU09DX1NMRUVQX0VOX0JJVF9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBOT05fQVNTT0NfU0xFRVBfRU5fQklUX0xTQikgJiBOT05fQVNTT0NfU0xFRVBfRU5fQklUX01BU0spCi0KLSNkZWZpbmUgQ0lTX1dJTkRPV19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNjAwCi0jZGVmaW5lIENJU19XSU5ET1dfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDYwMAotI2RlZmluZSBDSVNfV0lORE9XX0RBVEFfTVNCICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgQ0lTX1dJTkRPV19EQVRBX0xTQiAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIENJU19XSU5ET1dfREFUQV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBDSVNfV0lORE9XX0RBVEFfR0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgQ0lTX1dJTkRPV19EQVRBX01BU0spID4+IENJU19XSU5ET1dfREFUQV9MU0IpCi0jZGVmaW5lIENJU19XSU5ET1dfREFUQV9TRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgQ0lTX1dJTkRPV19EQVRBX0xTQikgJiBDSVNfV0lORE9XX0RBVEFfTUFTSykKLQotCi0jaWZuZGVmIF9fQVNTRU1CTEVSX18KLQotdHlwZWRlZiBzdHJ1Y3QgbWJveF9ob3N0X3JlZ19yZWdfcyB7Ci0gIHVuc2lnbmVkIGNoYXIgcGFkMFsxMDI0XTsgLyogcGFkIHRvIDB4NDAwICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgaG9zdF9pbnRfc3RhdHVzOwotICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGNwdV9pbnRfc3RhdHVzOwotICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGVycm9yX2ludF9zdGF0dXM7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgY291bnRlcl9pbnRfc3RhdHVzOwotICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIG1ib3hfZnJhbWU7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgcnhfbG9va2FoZWFkX3ZhbGlkOwotICB1bnNpZ25lZCBjaGFyIHBhZDFbMl07IC8qIHBhZCB0byAweDQwOCAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIHJ4X2xvb2thaGVhZDBbNF07Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgcnhfbG9va2FoZWFkMVs0XTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciByeF9sb29rYWhlYWQyWzRdOwotICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIHJ4X2xvb2thaGVhZDNbNF07Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgaW50X3N0YXR1c19lbmFibGU7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgY3B1X2ludF9zdGF0dXNfZW5hYmxlOwotICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGVycm9yX3N0YXR1c19lbmFibGU7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgY291bnRlcl9pbnRfc3RhdHVzX2VuYWJsZTsKLSAgdW5zaWduZWQgY2hhciBwYWQyWzRdOyAvKiBwYWQgdG8gMHg0MjAgKi8KLSAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBjb3VudFs4XTsKLSAgdW5zaWduZWQgY2hhciBwYWQzWzI0XTsgLyogcGFkIHRvIDB4NDQwICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgY291bnRfZGVjWzMyXTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBzY3JhdGNoWzhdOwotICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGZpZm9fdGltZW91dDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBmaWZvX3RpbWVvdXRfZW5hYmxlOwotICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGRpc2FibGVfc2xlZXA7Ci0gIHVuc2lnbmVkIGNoYXIgcGFkNFs1XTsgLyogcGFkIHRvIDB4NDcwICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgbG9jYWxfYnVzOwotICB1bnNpZ25lZCBjaGFyIHBhZDVbMV07IC8qIHBhZCB0byAweDQ3MiAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGludF93bGFuOwotICB1bnNpZ25lZCBjaGFyIHBhZDZbMV07IC8qIHBhZCB0byAweDQ3NCAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIHdpbmRvd19kYXRhWzRdOwotICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIHdpbmRvd193cml0ZV9hZGRyWzRdOwotICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIHdpbmRvd19yZWFkX2FkZHJbNF07Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgc3BpX2NvbmZpZzsKLSAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBzcGlfc3RhdHVzOwotICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIG5vbl9hc3NvY19zbGVlcF9lbjsKLSAgdW5zaWduZWQgY2hhciBwYWQ3WzM4MV07IC8qIHBhZCB0byAweDYwMCAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGNpc193aW5kb3dbNTEyXTsKLX0gbWJveF9ob3N0X3JlZ19yZWdfdDsKLQotI2VuZGlmIC8qIF9fQVNTRU1CTEVSX18gKi8KLQotI2VuZGlmIC8qIF9NQk9YX0hPU1RfUkVHX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzIuMC9ody9tYm94X3JlZy5oIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHcyLjAvaHcvbWJveF9yZWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGUwN2QyMi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzIuMC9ody9tYm94X3JlZy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDgxICswLDAgQEAKLSNpZm5kZWYgX01CT1hfUkVHX1JFR19IXwotI2RlZmluZSBfTUJPWF9SRUdfUkVHX0hfCi0KLSNkZWZpbmUgTUJPWF9GSUZPX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCi0jZGVmaW5lIE1CT1hfRklGT19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAotI2RlZmluZSBNQk9YX0ZJRk9fREFUQV9NU0IgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIE1CT1hfRklGT19EQVRBX0xTQiAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBNQk9YX0ZJRk9fREFUQV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwZmZmZmYKLSNkZWZpbmUgTUJPWF9GSUZPX0RBVEFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIE1CT1hfRklGT19EQVRBX01BU0spID4+IE1CT1hfRklGT19EQVRBX0xTQikKLSNkZWZpbmUgTUJPWF9GSUZPX0RBVEFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBNQk9YX0ZJRk9fREFUQV9MU0IpICYgTUJPWF9GSUZPX0RBVEFfTUFTSykKLQotI2RlZmluZSBNQk9YX0ZJRk9fU1RBVFVTX0FERFJFU1MgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgTUJPWF9GSUZPX1NUQVRVU19PRkZTRVQgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIE1CT1hfRklGT19TVEFUVVNfRU1QVFlfTVNCICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgTUJPWF9GSUZPX1NUQVRVU19FTVBUWV9MU0IgICAgICAgICAgICAgICAxNgotI2RlZmluZSBNQk9YX0ZJRk9fU1RBVFVTX0VNUFRZX01BU0sgICAgICAgICAgICAgIDB4MDAwZjAwMDAKLSNkZWZpbmUgTUJPWF9GSUZPX1NUQVRVU19FTVBUWV9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIE1CT1hfRklGT19TVEFUVVNfRU1QVFlfTUFTSykgPj4gTUJPWF9GSUZPX1NUQVRVU19FTVBUWV9MU0IpCi0jZGVmaW5lIE1CT1hfRklGT19TVEFUVVNfRU1QVFlfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgTUJPWF9GSUZPX1NUQVRVU19FTVBUWV9MU0IpICYgTUJPWF9GSUZPX1NUQVRVU19FTVBUWV9NQVNLKQotI2RlZmluZSBNQk9YX0ZJRk9fU1RBVFVTX0ZVTExfTVNCICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIE1CT1hfRklGT19TVEFUVVNfRlVMTF9MU0IgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgTUJPWF9GSUZPX1NUQVRVU19GVUxMX01BU0sgICAgICAgICAgICAgICAweDAwMDBmMDAwCi0jZGVmaW5lIE1CT1hfRklGT19TVEFUVVNfRlVMTF9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBNQk9YX0ZJRk9fU1RBVFVTX0ZVTExfTUFTSykgPj4gTUJPWF9GSUZPX1NUQVRVU19GVUxMX0xTQikKLSNkZWZpbmUgTUJPWF9GSUZPX1NUQVRVU19GVUxMX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBNQk9YX0ZJRk9fU1RBVFVTX0ZVTExfTFNCKSAmIE1CT1hfRklGT19TVEFUVVNfRlVMTF9NQVNLKQotCi0jZGVmaW5lIE1CT1hfRE1BX1BPTElDWV9BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAotI2RlZmluZSBNQk9YX0RNQV9QT0xJQ1lfT0ZGU0VUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKLSNkZWZpbmUgTUJPWF9ETUFfUE9MSUNZX1RYX1FVQU5UVU1fTVNCICAgICAgICAgICAzCi0jZGVmaW5lIE1CT1hfRE1BX1BPTElDWV9UWF9RVUFOVFVNX0xTQiAgICAgICAgICAgMwotI2RlZmluZSBNQk9YX0RNQV9QT0xJQ1lfVFhfUVVBTlRVTV9NQVNLICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgTUJPWF9ETUFfUE9MSUNZX1RYX1FVQU5UVU1fR0VUKHgpICAgICAgICAoKCh4KSAmIE1CT1hfRE1BX1BPTElDWV9UWF9RVUFOVFVNX01BU0spID4+IE1CT1hfRE1BX1BPTElDWV9UWF9RVUFOVFVNX0xTQikKLSNkZWZpbmUgTUJPWF9ETUFfUE9MSUNZX1RYX1FVQU5UVU1fU0VUKHgpICAgICAgICAoKCh4KSA8PCBNQk9YX0RNQV9QT0xJQ1lfVFhfUVVBTlRVTV9MU0IpICYgTUJPWF9ETUFfUE9MSUNZX1RYX1FVQU5UVU1fTUFTSykKLSNkZWZpbmUgTUJPWF9ETUFfUE9MSUNZX1RYX09SREVSX01TQiAgICAgICAgICAgICAyCi0jZGVmaW5lIE1CT1hfRE1BX1BPTElDWV9UWF9PUkRFUl9MU0IgICAgICAgICAgICAgMgotI2RlZmluZSBNQk9YX0RNQV9QT0xJQ1lfVFhfT1JERVJfTUFTSyAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgTUJPWF9ETUFfUE9MSUNZX1RYX09SREVSX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIE1CT1hfRE1BX1BPTElDWV9UWF9PUkRFUl9NQVNLKSA+PiBNQk9YX0RNQV9QT0xJQ1lfVFhfT1JERVJfTFNCKQotI2RlZmluZSBNQk9YX0RNQV9QT0xJQ1lfVFhfT1JERVJfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IE1CT1hfRE1BX1BPTElDWV9UWF9PUkRFUl9MU0IpICYgTUJPWF9ETUFfUE9MSUNZX1RYX09SREVSX01BU0spCi0jZGVmaW5lIE1CT1hfRE1BX1BPTElDWV9SWF9RVUFOVFVNX01TQiAgICAgICAgICAgMQotI2RlZmluZSBNQk9YX0RNQV9QT0xJQ1lfUlhfUVVBTlRVTV9MU0IgICAgICAgICAgIDEKLSNkZWZpbmUgTUJPWF9ETUFfUE9MSUNZX1JYX1FVQU5UVU1fTUFTSyAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIE1CT1hfRE1BX1BPTElDWV9SWF9RVUFOVFVNX0dFVCh4KSAgICAgICAgKCgoeCkgJiBNQk9YX0RNQV9QT0xJQ1lfUlhfUVVBTlRVTV9NQVNLKSA+PiBNQk9YX0RNQV9QT0xJQ1lfUlhfUVVBTlRVTV9MU0IpCi0jZGVmaW5lIE1CT1hfRE1BX1BPTElDWV9SWF9RVUFOVFVNX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgTUJPWF9ETUFfUE9MSUNZX1JYX1FVQU5UVU1fTFNCKSAmIE1CT1hfRE1BX1BPTElDWV9SWF9RVUFOVFVNX01BU0spCi0jZGVmaW5lIE1CT1hfRE1BX1BPTElDWV9SWF9PUkRFUl9NU0IgICAgICAgICAgICAgMAotI2RlZmluZSBNQk9YX0RNQV9QT0xJQ1lfUlhfT1JERVJfTFNCICAgICAgICAgICAgIDAKLSNkZWZpbmUgTUJPWF9ETUFfUE9MSUNZX1JYX09SREVSX01BU0sgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIE1CT1hfRE1BX1BPTElDWV9SWF9PUkRFUl9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBNQk9YX0RNQV9QT0xJQ1lfUlhfT1JERVJfTUFTSykgPj4gTUJPWF9ETUFfUE9MSUNZX1JYX09SREVSX0xTQikKLSNkZWZpbmUgTUJPWF9ETUFfUE9MSUNZX1JYX09SREVSX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBNQk9YX0RNQV9QT0xJQ1lfUlhfT1JERVJfTFNCKSAmIE1CT1hfRE1BX1BPTElDWV9SWF9PUkRFUl9NQVNLKQotCi0jZGVmaW5lIE1CT1gwX0RNQV9SWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTUyAgICAgMHgwMDAwMDAxOAotI2RlZmluZSBNQk9YMF9ETUFfUlhfREVTQ1JJUFRPUl9CQVNFX09GRlNFVCAgICAgIDB4MDAwMDAwMTgKLSNkZWZpbmUgTUJPWDBfRE1BX1JYX0RFU0NSSVBUT1JfQkFTRV9BRERSRVNTX01TQiAyNwotI2RlZmluZSBNQk9YMF9ETUFfUlhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1NfTFNCIDIKLSNkZWZpbmUgTUJPWDBfRE1BX1JYX0RFU0NSSVBUT1JfQkFTRV9BRERSRVNTX01BU0sgMHgwZmZmZmZmYwotI2RlZmluZSBNQk9YMF9ETUFfUlhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1NfR0VUKHgpICgoKHgpICYgTUJPWDBfRE1BX1JYX0RFU0NSSVBUT1JfQkFTRV9BRERSRVNTX01BU0spID4+IE1CT1gwX0RNQV9SWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTU19MU0IpCi0jZGVmaW5lIE1CT1gwX0RNQV9SWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTU19TRVQoeCkgKCgoeCkgPDwgTUJPWDBfRE1BX1JYX0RFU0NSSVBUT1JfQkFTRV9BRERSRVNTX0xTQikgJiBNQk9YMF9ETUFfUlhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1NfTUFTSykKLQotI2RlZmluZSBNQk9YMF9ETUFfUlhfQ09OVFJPTF9BRERSRVNTICAgICAgICAgICAgIDB4MDAwMDAwMWMKLSNkZWZpbmUgTUJPWDBfRE1BX1JYX0NPTlRST0xfT0ZGU0VUICAgICAgICAgICAgICAweDAwMDAwMDFjCi0jZGVmaW5lIE1CT1gwX0RNQV9SWF9DT05UUk9MX1JFU1VNRV9NU0IgICAgICAgICAgMgotI2RlZmluZSBNQk9YMF9ETUFfUlhfQ09OVFJPTF9SRVNVTUVfTFNCICAgICAgICAgIDIKLSNkZWZpbmUgTUJPWDBfRE1BX1JYX0NPTlRST0xfUkVTVU1FX01BU0sgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIE1CT1gwX0RNQV9SWF9DT05UUk9MX1JFU1VNRV9HRVQoeCkgICAgICAgKCgoeCkgJiBNQk9YMF9ETUFfUlhfQ09OVFJPTF9SRVNVTUVfTUFTSykgPj4gTUJPWDBfRE1BX1JYX0NPTlRST0xfUkVTVU1FX0xTQikKLSNkZWZpbmUgTUJPWDBfRE1BX1JYX0NPTlRST0xfUkVTVU1FX1NFVCh4KSAgICAgICAoKCh4KSA8PCBNQk9YMF9ETUFfUlhfQ09OVFJPTF9SRVNVTUVfTFNCKSAmIE1CT1gwX0RNQV9SWF9DT05UUk9MX1JFU1VNRV9NQVNLKQotI2RlZmluZSBNQk9YMF9ETUFfUlhfQ09OVFJPTF9TVEFSVF9NU0IgICAgICAgICAgIDEKLSNkZWZpbmUgTUJPWDBfRE1BX1JYX0NPTlRST0xfU1RBUlRfTFNCICAgICAgICAgICAxCi0jZGVmaW5lIE1CT1gwX0RNQV9SWF9DT05UUk9MX1NUQVJUX01BU0sgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBNQk9YMF9ETUFfUlhfQ09OVFJPTF9TVEFSVF9HRVQoeCkgICAgICAgICgoKHgpICYgTUJPWDBfRE1BX1JYX0NPTlRST0xfU1RBUlRfTUFTSykgPj4gTUJPWDBfRE1BX1JYX0NPTlRST0xfU1RBUlRfTFNCKQotI2RlZmluZSBNQk9YMF9ETUFfUlhfQ09OVFJPTF9TVEFSVF9TRVQoeCkgICAgICAgICgoKHgpIDw8IE1CT1gwX0RNQV9SWF9DT05UUk9MX1NUQVJUX0xTQikgJiBNQk9YMF9ETUFfUlhfQ09OVFJPTF9TVEFSVF9NQVNLKQotI2RlZmluZSBNQk9YMF9ETUFfUlhfQ09OVFJPTF9TVE9QX01TQiAgICAgICAgICAgIDAKLSNkZWZpbmUgTUJPWDBfRE1BX1JYX0NPTlRST0xfU1RPUF9MU0IgICAgICAgICAgICAwCi0jZGVmaW5lIE1CT1gwX0RNQV9SWF9DT05UUk9MX1NUT1BfTUFTSyAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBNQk9YMF9ETUFfUlhfQ09OVFJPTF9TVE9QX0dFVCh4KSAgICAgICAgICgoKHgpICYgTUJPWDBfRE1BX1JYX0NPTlRST0xfU1RPUF9NQVNLKSA+PiBNQk9YMF9ETUFfUlhfQ09OVFJPTF9TVE9QX0xTQikKLSNkZWZpbmUgTUJPWDBfRE1BX1JYX0NPTlRST0xfU1RPUF9TRVQoeCkgICAgICAgICAoKCh4KSA8PCBNQk9YMF9ETUFfUlhfQ09OVFJPTF9TVE9QX0xTQikgJiBNQk9YMF9ETUFfUlhfQ09OVFJPTF9TVE9QX01BU0spCi0KLSNkZWZpbmUgTUJPWDBfRE1BX1RYX0RFU0NSSVBUT1JfQkFTRV9BRERSRVNTICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIE1CT1gwX0RNQV9UWF9ERVNDUklQVE9SX0JBU0VfT0ZGU0VUICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBNQk9YMF9ETUFfVFhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1NfTVNCIDI3Ci0jZGVmaW5lIE1CT1gwX0RNQV9UWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTU19MU0IgMgotI2RlZmluZSBNQk9YMF9ETUFfVFhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1NfTUFTSyAweDBmZmZmZmZjCi0jZGVmaW5lIE1CT1gwX0RNQV9UWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTU19HRVQoeCkgKCgoeCkgJiBNQk9YMF9ETUFfVFhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1NfTUFTSykgPj4gTUJPWDBfRE1BX1RYX0RFU0NSSVBUT1JfQkFTRV9BRERSRVNTX0xTQikKLSNkZWZpbmUgTUJPWDBfRE1BX1RYX0RFU0NSSVBUT1JfQkFTRV9BRERSRVNTX1NFVCh4KSAoKCh4KSA8PCBNQk9YMF9ETUFfVFhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1NfTFNCKSAmIE1CT1gwX0RNQV9UWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTU19NQVNLKQotCi0jZGVmaW5lIE1CT1gwX0RNQV9UWF9DT05UUk9MX0FERFJFU1MgICAgICAgICAgICAgMHgwMDAwMDAyNAotI2RlZmluZSBNQk9YMF9ETUFfVFhfQ09OVFJPTF9PRkZTRVQgICAgICAgICAgICAgIDB4MDAwMDAwMjQKLSNkZWZpbmUgTUJPWDBfRE1BX1RYX0NPTlRST0xfUkVTVU1FX01TQiAgICAgICAgICAyCi0jZGVmaW5lIE1CT1gwX0RNQV9UWF9DT05UUk9MX1JFU1VNRV9MU0IgICAgICAgICAgMgotI2RlZmluZSBNQk9YMF9ETUFfVFhfQ09OVFJPTF9SRVNVTUVfTUFTSyAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgTUJPWDBfRE1BX1RYX0NPTlRST0xfUkVTVU1FX0dFVCh4KSAgICAgICAoKCh4KSAmIE1CT1gwX0RNQV9UWF9DT05UUk9MX1JFU1VNRV9NQVNLKSA+PiBNQk9YMF9ETUFfVFhfQ09OVFJPTF9SRVNVTUVfTFNCKQotI2RlZmluZSBNQk9YMF9ETUFfVFhfQ09OVFJPTF9SRVNVTUVfU0VUKHgpICAgICAgICgoKHgpIDw8IE1CT1gwX0RNQV9UWF9DT05UUk9MX1JFU1VNRV9MU0IpICYgTUJPWDBfRE1BX1RYX0NPTlRST0xfUkVTVU1FX01BU0spCi0jZGVmaW5lIE1CT1gwX0RNQV9UWF9DT05UUk9MX1NUQVJUX01TQiAgICAgICAgICAgMQotI2RlZmluZSBNQk9YMF9ETUFfVFhfQ09OVFJPTF9TVEFSVF9MU0IgICAgICAgICAgIDEKLSNkZWZpbmUgTUJPWDBfRE1BX1RYX0NPTlRST0xfU1RBUlRfTUFTSyAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIE1CT1gwX0RNQV9UWF9DT05UUk9MX1NUQVJUX0dFVCh4KSAgICAgICAgKCgoeCkgJiBNQk9YMF9ETUFfVFhfQ09OVFJPTF9TVEFSVF9NQVNLKSA+PiBNQk9YMF9ETUFfVFhfQ09OVFJPTF9TVEFSVF9MU0IpCi0jZGVmaW5lIE1CT1gwX0RNQV9UWF9DT05UUk9MX1NUQVJUX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgTUJPWDBfRE1BX1RYX0NPTlRST0xfU1RBUlRfTFNCKSAmIE1CT1gwX0RNQV9UWF9DT05UUk9MX1NUQVJUX01BU0spCi0jZGVmaW5lIE1CT1gwX0RNQV9UWF9DT05UUk9MX1NUT1BfTVNCICAgICAgICAgICAgMAotI2RlZmluZSBNQk9YMF9ETUFfVFhfQ09OVFJPTF9TVE9QX0xTQiAgICAgICAgICAgIDAKLSNkZWZpbmUgTUJPWDBfRE1BX1RYX0NPTlRST0xfU1RPUF9NQVNLICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIE1CT1gwX0RNQV9UWF9DT05UUk9MX1NUT1BfR0VUKHgpICAgICAgICAgKCgoeCkgJiBNQk9YMF9ETUFfVFhfQ09OVFJPTF9TVE9QX01BU0spID4+IE1CT1gwX0RNQV9UWF9DT05UUk9MX1NUT1BfTFNCKQotI2RlZmluZSBNQk9YMF9ETUFfVFhfQ09OVFJPTF9TVE9QX1NFVCh4KSAgICAgICAgICgoKHgpIDw8IE1CT1gwX0RNQV9UWF9DT05UUk9MX1NUT1BfTFNCKSAmIE1CT1gwX0RNQV9UWF9DT05UUk9MX1NUT1BfTUFTSykKLQotI2RlZmluZSBNQk9YMV9ETUFfUlhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1MgICAgIDB4MDAwMDAwMjgKLSNkZWZpbmUgTUJPWDFfRE1BX1JYX0RFU0NSSVBUT1JfQkFTRV9PRkZTRVQgICAgICAweDAwMDAwMDI4Ci0jZGVmaW5lIE1CT1gxX0RNQV9SWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTU19NU0IgMjcKLSNkZWZpbmUgTUJPWDFfRE1BX1JYX0RFU0NSSVBUT1JfQkFTRV9BRERSRVNTX0xTQiAyCi0jZGVmaW5lIE1CT1gxX0RNQV9SWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTU19NQVNLIDB4MGZmZmZmZmMKLSNkZWZpbmUgTUJPWDFfRE1BX1JYX0RFU0NSSVBUT1JfQkFTRV9BRERSRVNTX0dFVCh4KSAoKCh4KSAmIE1CT1gxX0RNQV9SWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTU19NQVNLKSA+PiBNQk9YMV9ETUFfUlhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1NfTFNCKQotI2RlZmluZSBNQk9YMV9ETUFfUlhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1NfU0VUKHgpICgoKHgpIDw8IE1CT1gxX0RNQV9SWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTU19MU0IpICYgTUJPWDFfRE1BX1JYX0RFU0NSSVBUT1JfQkFTRV9BRERSRVNTX01BU0spCi0KLSNkZWZpbmUgTUJPWDFfRE1BX1JYX0NPTlRST0xfQUREUkVTUyAgICAgICAgICAgICAweDAwMDAwMDJjCi0jZGVmaW5lIE1CT1gxX0RNQV9SWF9DT05UUk9MX09GRlNFVCAgICAgICAgICAgICAgMHgwMDAwMDAyYwotI2RlZmluZSBNQk9YMV9ETUFfUlhfQ09OVFJPTF9SRVNVTUVfTVNCICAgICAgICAgIDIKLSNkZWZpbmUgTUJPWDFfRE1BX1JYX0NPTlRST0xfUkVTVU1FX0xTQiAgICAgICAgICAyCi0jZGVmaW5lIE1CT1gxX0RNQV9SWF9DT05UUk9MX1JFU1VNRV9NQVNLICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBNQk9YMV9ETUFfUlhfQ09OVFJPTF9SRVNVTUVfR0VUKHgpICAgICAgICgoKHgpICYgTUJPWDFfRE1BX1JYX0NPTlRST0xfUkVTVU1FX01BU0spID4+IE1CT1gxX0RNQV9SWF9DT05UUk9MX1JFU1VNRV9MU0IpCi0jZGVmaW5lIE1CT1gxX0RNQV9SWF9DT05UUk9MX1JFU1VNRV9TRVQoeCkgICAgICAgKCgoeCkgPDwgTUJPWDFfRE1BX1JYX0NPTlRST0xfUkVTVU1FX0xTQikgJiBNQk9YMV9ETUFfUlhfQ09OVFJPTF9SRVNVTUVfTUFTSykKLSNkZWZpbmUgTUJPWDFfRE1BX1JYX0NPTlRST0xfU1RBUlRfTVNCICAgICAgICAgICAxCi0jZGVmaW5lIE1CT1gxX0RNQV9SWF9DT05UUk9MX1NUQVJUX0xTQiAgICAgICAgICAgMQotI2RlZmluZSBNQk9YMV9ETUFfUlhfQ09OVFJPTF9TVEFSVF9NQVNLICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgTUJPWDFfRE1BX1JYX0NPTlRST0xfU1RBUlRfR0VUKHgpICAgICAgICAoKCh4KSAmIE1CT1gxX0RNQV9SWF9DT05UUk9MX1NUQVJUX01BU0spID4+IE1CT1gxX0RNQV9SWF9DT05UUk9MX1NUQVJUX0xTQikKLSNkZWZpbmUgTUJPWDFfRE1BX1JYX0NPTlRST0xfU1RBUlRfU0VUKHgpICAgICAgICAoKCh4KSA8PCBNQk9YMV9ETUFfUlhfQ09OVFJPTF9TVEFSVF9MU0IpICYgTUJPWDFfRE1BX1JYX0NPTlRST0xfU1RBUlRfTUFTSykKLSNkZWZpbmUgTUJPWDFfRE1BX1JYX0NPTlRST0xfU1RPUF9NU0IgICAgICAgICAgICAwCi0jZGVmaW5lIE1CT1gxX0RNQV9SWF9DT05UUk9MX1NUT1BfTFNCICAgICAgICAgICAgMAotI2RlZmluZSBNQk9YMV9ETUFfUlhfQ09OVFJPTF9TVE9QX01BU0sgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgTUJPWDFfRE1BX1JYX0NPTlRST0xfU1RPUF9HRVQoeCkgICAgICAgICAoKCh4KSAmIE1CT1gxX0RNQV9SWF9DT05UUk9MX1NUT1BfTUFTSykgPj4gTUJPWDFfRE1BX1JYX0NPTlRST0xfU1RPUF9MU0IpCi0jZGVmaW5lIE1CT1gxX0RNQV9SWF9DT05UUk9MX1NUT1BfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgTUJPWDFfRE1BX1JYX0NPTlRST0xfU1RPUF9MU0IpICYgTUJPWDFfRE1BX1JYX0NPTlRST0xfU1RPUF9NQVNLKQotCi0jZGVmaW5lIE1CT1gxX0RNQV9UWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTUyAgICAgMHgwMDAwMDAzMAotI2RlZmluZSBNQk9YMV9ETUFfVFhfREVTQ1JJUFRPUl9CQVNFX09GRlNFVCAgICAgIDB4MDAwMDAwMzAKLSNkZWZpbmUgTUJPWDFfRE1BX1RYX0RFU0NSSVBUT1JfQkFTRV9BRERSRVNTX01TQiAyNwotI2RlZmluZSBNQk9YMV9ETUFfVFhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1NfTFNCIDIKLSNkZWZpbmUgTUJPWDFfRE1BX1RYX0RFU0NSSVBUT1JfQkFTRV9BRERSRVNTX01BU0sgMHgwZmZmZmZmYwotI2RlZmluZSBNQk9YMV9ETUFfVFhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1NfR0VUKHgpICgoKHgpICYgTUJPWDFfRE1BX1RYX0RFU0NSSVBUT1JfQkFTRV9BRERSRVNTX01BU0spID4+IE1CT1gxX0RNQV9UWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTU19MU0IpCi0jZGVmaW5lIE1CT1gxX0RNQV9UWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTU19TRVQoeCkgKCgoeCkgPDwgTUJPWDFfRE1BX1RYX0RFU0NSSVBUT1JfQkFTRV9BRERSRVNTX0xTQikgJiBNQk9YMV9ETUFfVFhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1NfTUFTSykKLQotI2RlZmluZSBNQk9YMV9ETUFfVFhfQ09OVFJPTF9BRERSRVNTICAgICAgICAgICAgIDB4MDAwMDAwMzQKLSNkZWZpbmUgTUJPWDFfRE1BX1RYX0NPTlRST0xfT0ZGU0VUICAgICAgICAgICAgICAweDAwMDAwMDM0Ci0jZGVmaW5lIE1CT1gxX0RNQV9UWF9DT05UUk9MX1JFU1VNRV9NU0IgICAgICAgICAgMgotI2RlZmluZSBNQk9YMV9ETUFfVFhfQ09OVFJPTF9SRVNVTUVfTFNCICAgICAgICAgIDIKLSNkZWZpbmUgTUJPWDFfRE1BX1RYX0NPTlRST0xfUkVTVU1FX01BU0sgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIE1CT1gxX0RNQV9UWF9DT05UUk9MX1JFU1VNRV9HRVQoeCkgICAgICAgKCgoeCkgJiBNQk9YMV9ETUFfVFhfQ09OVFJPTF9SRVNVTUVfTUFTSykgPj4gTUJPWDFfRE1BX1RYX0NPTlRST0xfUkVTVU1FX0xTQikKLSNkZWZpbmUgTUJPWDFfRE1BX1RYX0NPTlRST0xfUkVTVU1FX1NFVCh4KSAgICAgICAoKCh4KSA8PCBNQk9YMV9ETUFfVFhfQ09OVFJPTF9SRVNVTUVfTFNCKSAmIE1CT1gxX0RNQV9UWF9DT05UUk9MX1JFU1VNRV9NQVNLKQotI2RlZmluZSBNQk9YMV9ETUFfVFhfQ09OVFJPTF9TVEFSVF9NU0IgICAgICAgICAgIDEKLSNkZWZpbmUgTUJPWDFfRE1BX1RYX0NPTlRST0xfU1RBUlRfTFNCICAgICAgICAgICAxCi0jZGVmaW5lIE1CT1gxX0RNQV9UWF9DT05UUk9MX1NUQVJUX01BU0sgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBNQk9YMV9ETUFfVFhfQ09OVFJPTF9TVEFSVF9HRVQoeCkgICAgICAgICgoKHgpICYgTUJPWDFfRE1BX1RYX0NPTlRST0xfU1RBUlRfTUFTSykgPj4gTUJPWDFfRE1BX1RYX0NPTlRST0xfU1RBUlRfTFNCKQotI2RlZmluZSBNQk9YMV9ETUFfVFhfQ09OVFJPTF9TVEFSVF9TRVQoeCkgICAgICAgICgoKHgpIDw8IE1CT1gxX0RNQV9UWF9DT05UUk9MX1NUQVJUX0xTQikgJiBNQk9YMV9ETUFfVFhfQ09OVFJPTF9TVEFSVF9NQVNLKQotI2RlZmluZSBNQk9YMV9ETUFfVFhfQ09OVFJPTF9TVE9QX01TQiAgICAgICAgICAgIDAKLSNkZWZpbmUgTUJPWDFfRE1BX1RYX0NPTlRST0xfU1RPUF9MU0IgICAgICAgICAgICAwCi0jZGVmaW5lIE1CT1gxX0RNQV9UWF9DT05UUk9MX1NUT1BfTUFTSyAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBNQk9YMV9ETUFfVFhfQ09OVFJPTF9TVE9QX0dFVCh4KSAgICAgICAgICgoKHgpICYgTUJPWDFfRE1BX1RYX0NPTlRST0xfU1RPUF9NQVNLKSA+PiBNQk9YMV9ETUFfVFhfQ09OVFJPTF9TVE9QX0xTQikKLSNkZWZpbmUgTUJPWDFfRE1BX1RYX0NPTlRST0xfU1RPUF9TRVQoeCkgICAgICAgICAoKCh4KSA8PCBNQk9YMV9ETUFfVFhfQ09OVFJPTF9TVE9QX0xTQikgJiBNQk9YMV9ETUFfVFhfQ09OVFJPTF9TVE9QX01BU0spCi0KLSNkZWZpbmUgTUJPWDJfRE1BX1JYX0RFU0NSSVBUT1JfQkFTRV9BRERSRVNTICAgICAweDAwMDAwMDM4Ci0jZGVmaW5lIE1CT1gyX0RNQV9SWF9ERVNDUklQVE9SX0JBU0VfT0ZGU0VUICAgICAgMHgwMDAwMDAzOAotI2RlZmluZSBNQk9YMl9ETUFfUlhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1NfTVNCIDI3Ci0jZGVmaW5lIE1CT1gyX0RNQV9SWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTU19MU0IgMgotI2RlZmluZSBNQk9YMl9ETUFfUlhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1NfTUFTSyAweDBmZmZmZmZjCi0jZGVmaW5lIE1CT1gyX0RNQV9SWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTU19HRVQoeCkgKCgoeCkgJiBNQk9YMl9ETUFfUlhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1NfTUFTSykgPj4gTUJPWDJfRE1BX1JYX0RFU0NSSVBUT1JfQkFTRV9BRERSRVNTX0xTQikKLSNkZWZpbmUgTUJPWDJfRE1BX1JYX0RFU0NSSVBUT1JfQkFTRV9BRERSRVNTX1NFVCh4KSAoKCh4KSA8PCBNQk9YMl9ETUFfUlhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1NfTFNCKSAmIE1CT1gyX0RNQV9SWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTU19NQVNLKQotCi0jZGVmaW5lIE1CT1gyX0RNQV9SWF9DT05UUk9MX0FERFJFU1MgICAgICAgICAgICAgMHgwMDAwMDAzYwotI2RlZmluZSBNQk9YMl9ETUFfUlhfQ09OVFJPTF9PRkZTRVQgICAgICAgICAgICAgIDB4MDAwMDAwM2MKLSNkZWZpbmUgTUJPWDJfRE1BX1JYX0NPTlRST0xfUkVTVU1FX01TQiAgICAgICAgICAyCi0jZGVmaW5lIE1CT1gyX0RNQV9SWF9DT05UUk9MX1JFU1VNRV9MU0IgICAgICAgICAgMgotI2RlZmluZSBNQk9YMl9ETUFfUlhfQ09OVFJPTF9SRVNVTUVfTUFTSyAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgTUJPWDJfRE1BX1JYX0NPTlRST0xfUkVTVU1FX0dFVCh4KSAgICAgICAoKCh4KSAmIE1CT1gyX0RNQV9SWF9DT05UUk9MX1JFU1VNRV9NQVNLKSA+PiBNQk9YMl9ETUFfUlhfQ09OVFJPTF9SRVNVTUVfTFNCKQotI2RlZmluZSBNQk9YMl9ETUFfUlhfQ09OVFJPTF9SRVNVTUVfU0VUKHgpICAgICAgICgoKHgpIDw8IE1CT1gyX0RNQV9SWF9DT05UUk9MX1JFU1VNRV9MU0IpICYgTUJPWDJfRE1BX1JYX0NPTlRST0xfUkVTVU1FX01BU0spCi0jZGVmaW5lIE1CT1gyX0RNQV9SWF9DT05UUk9MX1NUQVJUX01TQiAgICAgICAgICAgMQotI2RlZmluZSBNQk9YMl9ETUFfUlhfQ09OVFJPTF9TVEFSVF9MU0IgICAgICAgICAgIDEKLSNkZWZpbmUgTUJPWDJfRE1BX1JYX0NPTlRST0xfU1RBUlRfTUFTSyAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIE1CT1gyX0RNQV9SWF9DT05UUk9MX1NUQVJUX0dFVCh4KSAgICAgICAgKCgoeCkgJiBNQk9YMl9ETUFfUlhfQ09OVFJPTF9TVEFSVF9NQVNLKSA+PiBNQk9YMl9ETUFfUlhfQ09OVFJPTF9TVEFSVF9MU0IpCi0jZGVmaW5lIE1CT1gyX0RNQV9SWF9DT05UUk9MX1NUQVJUX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgTUJPWDJfRE1BX1JYX0NPTlRST0xfU1RBUlRfTFNCKSAmIE1CT1gyX0RNQV9SWF9DT05UUk9MX1NUQVJUX01BU0spCi0jZGVmaW5lIE1CT1gyX0RNQV9SWF9DT05UUk9MX1NUT1BfTVNCICAgICAgICAgICAgMAotI2RlZmluZSBNQk9YMl9ETUFfUlhfQ09OVFJPTF9TVE9QX0xTQiAgICAgICAgICAgIDAKLSNkZWZpbmUgTUJPWDJfRE1BX1JYX0NPTlRST0xfU1RPUF9NQVNLICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIE1CT1gyX0RNQV9SWF9DT05UUk9MX1NUT1BfR0VUKHgpICAgICAgICAgKCgoeCkgJiBNQk9YMl9ETUFfUlhfQ09OVFJPTF9TVE9QX01BU0spID4+IE1CT1gyX0RNQV9SWF9DT05UUk9MX1NUT1BfTFNCKQotI2RlZmluZSBNQk9YMl9ETUFfUlhfQ09OVFJPTF9TVE9QX1NFVCh4KSAgICAgICAgICgoKHgpIDw8IE1CT1gyX0RNQV9SWF9DT05UUk9MX1NUT1BfTFNCKSAmIE1CT1gyX0RNQV9SWF9DT05UUk9MX1NUT1BfTUFTSykKLQotI2RlZmluZSBNQk9YMl9ETUFfVFhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1MgICAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgTUJPWDJfRE1BX1RYX0RFU0NSSVBUT1JfQkFTRV9PRkZTRVQgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIE1CT1gyX0RNQV9UWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTU19NU0IgMjcKLSNkZWZpbmUgTUJPWDJfRE1BX1RYX0RFU0NSSVBUT1JfQkFTRV9BRERSRVNTX0xTQiAyCi0jZGVmaW5lIE1CT1gyX0RNQV9UWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTU19NQVNLIDB4MGZmZmZmZmMKLSNkZWZpbmUgTUJPWDJfRE1BX1RYX0RFU0NSSVBUT1JfQkFTRV9BRERSRVNTX0dFVCh4KSAoKCh4KSAmIE1CT1gyX0RNQV9UWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTU19NQVNLKSA+PiBNQk9YMl9ETUFfVFhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1NfTFNCKQotI2RlZmluZSBNQk9YMl9ETUFfVFhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1NfU0VUKHgpICgoKHgpIDw8IE1CT1gyX0RNQV9UWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTU19MU0IpICYgTUJPWDJfRE1BX1RYX0RFU0NSSVBUT1JfQkFTRV9BRERSRVNTX01BU0spCi0KLSNkZWZpbmUgTUJPWDJfRE1BX1RYX0NPTlRST0xfQUREUkVTUyAgICAgICAgICAgICAweDAwMDAwMDQ0Ci0jZGVmaW5lIE1CT1gyX0RNQV9UWF9DT05UUk9MX09GRlNFVCAgICAgICAgICAgICAgMHgwMDAwMDA0NAotI2RlZmluZSBNQk9YMl9ETUFfVFhfQ09OVFJPTF9SRVNVTUVfTVNCICAgICAgICAgIDIKLSNkZWZpbmUgTUJPWDJfRE1BX1RYX0NPTlRST0xfUkVTVU1FX0xTQiAgICAgICAgICAyCi0jZGVmaW5lIE1CT1gyX0RNQV9UWF9DT05UUk9MX1JFU1VNRV9NQVNLICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBNQk9YMl9ETUFfVFhfQ09OVFJPTF9SRVNVTUVfR0VUKHgpICAgICAgICgoKHgpICYgTUJPWDJfRE1BX1RYX0NPTlRST0xfUkVTVU1FX01BU0spID4+IE1CT1gyX0RNQV9UWF9DT05UUk9MX1JFU1VNRV9MU0IpCi0jZGVmaW5lIE1CT1gyX0RNQV9UWF9DT05UUk9MX1JFU1VNRV9TRVQoeCkgICAgICAgKCgoeCkgPDwgTUJPWDJfRE1BX1RYX0NPTlRST0xfUkVTVU1FX0xTQikgJiBNQk9YMl9ETUFfVFhfQ09OVFJPTF9SRVNVTUVfTUFTSykKLSNkZWZpbmUgTUJPWDJfRE1BX1RYX0NPTlRST0xfU1RBUlRfTVNCICAgICAgICAgICAxCi0jZGVmaW5lIE1CT1gyX0RNQV9UWF9DT05UUk9MX1NUQVJUX0xTQiAgICAgICAgICAgMQotI2RlZmluZSBNQk9YMl9ETUFfVFhfQ09OVFJPTF9TVEFSVF9NQVNLICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgTUJPWDJfRE1BX1RYX0NPTlRST0xfU1RBUlRfR0VUKHgpICAgICAgICAoKCh4KSAmIE1CT1gyX0RNQV9UWF9DT05UUk9MX1NUQVJUX01BU0spID4+IE1CT1gyX0RNQV9UWF9DT05UUk9MX1NUQVJUX0xTQikKLSNkZWZpbmUgTUJPWDJfRE1BX1RYX0NPTlRST0xfU1RBUlRfU0VUKHgpICAgICAgICAoKCh4KSA8PCBNQk9YMl9ETUFfVFhfQ09OVFJPTF9TVEFSVF9MU0IpICYgTUJPWDJfRE1BX1RYX0NPTlRST0xfU1RBUlRfTUFTSykKLSNkZWZpbmUgTUJPWDJfRE1BX1RYX0NPTlRST0xfU1RPUF9NU0IgICAgICAgICAgICAwCi0jZGVmaW5lIE1CT1gyX0RNQV9UWF9DT05UUk9MX1NUT1BfTFNCICAgICAgICAgICAgMAotI2RlZmluZSBNQk9YMl9ETUFfVFhfQ09OVFJPTF9TVE9QX01BU0sgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgTUJPWDJfRE1BX1RYX0NPTlRST0xfU1RPUF9HRVQoeCkgICAgICAgICAoKCh4KSAmIE1CT1gyX0RNQV9UWF9DT05UUk9MX1NUT1BfTUFTSykgPj4gTUJPWDJfRE1BX1RYX0NPTlRST0xfU1RPUF9MU0IpCi0jZGVmaW5lIE1CT1gyX0RNQV9UWF9DT05UUk9MX1NUT1BfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgTUJPWDJfRE1BX1RYX0NPTlRST0xfU1RPUF9MU0IpICYgTUJPWDJfRE1BX1RYX0NPTlRST0xfU1RPUF9NQVNLKQotCi0jZGVmaW5lIE1CT1gzX0RNQV9SWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTUyAgICAgMHgwMDAwMDA0OAotI2RlZmluZSBNQk9YM19ETUFfUlhfREVTQ1JJUFRPUl9CQVNFX09GRlNFVCAgICAgIDB4MDAwMDAwNDgKLSNkZWZpbmUgTUJPWDNfRE1BX1JYX0RFU0NSSVBUT1JfQkFTRV9BRERSRVNTX01TQiAyNwotI2RlZmluZSBNQk9YM19ETUFfUlhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1NfTFNCIDIKLSNkZWZpbmUgTUJPWDNfRE1BX1JYX0RFU0NSSVBUT1JfQkFTRV9BRERSRVNTX01BU0sgMHgwZmZmZmZmYwotI2RlZmluZSBNQk9YM19ETUFfUlhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1NfR0VUKHgpICgoKHgpICYgTUJPWDNfRE1BX1JYX0RFU0NSSVBUT1JfQkFTRV9BRERSRVNTX01BU0spID4+IE1CT1gzX0RNQV9SWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTU19MU0IpCi0jZGVmaW5lIE1CT1gzX0RNQV9SWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTU19TRVQoeCkgKCgoeCkgPDwgTUJPWDNfRE1BX1JYX0RFU0NSSVBUT1JfQkFTRV9BRERSRVNTX0xTQikgJiBNQk9YM19ETUFfUlhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1NfTUFTSykKLQotI2RlZmluZSBNQk9YM19ETUFfUlhfQ09OVFJPTF9BRERSRVNTICAgICAgICAgICAgIDB4MDAwMDAwNGMKLSNkZWZpbmUgTUJPWDNfRE1BX1JYX0NPTlRST0xfT0ZGU0VUICAgICAgICAgICAgICAweDAwMDAwMDRjCi0jZGVmaW5lIE1CT1gzX0RNQV9SWF9DT05UUk9MX1JFU1VNRV9NU0IgICAgICAgICAgMgotI2RlZmluZSBNQk9YM19ETUFfUlhfQ09OVFJPTF9SRVNVTUVfTFNCICAgICAgICAgIDIKLSNkZWZpbmUgTUJPWDNfRE1BX1JYX0NPTlRST0xfUkVTVU1FX01BU0sgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIE1CT1gzX0RNQV9SWF9DT05UUk9MX1JFU1VNRV9HRVQoeCkgICAgICAgKCgoeCkgJiBNQk9YM19ETUFfUlhfQ09OVFJPTF9SRVNVTUVfTUFTSykgPj4gTUJPWDNfRE1BX1JYX0NPTlRST0xfUkVTVU1FX0xTQikKLSNkZWZpbmUgTUJPWDNfRE1BX1JYX0NPTlRST0xfUkVTVU1FX1NFVCh4KSAgICAgICAoKCh4KSA8PCBNQk9YM19ETUFfUlhfQ09OVFJPTF9SRVNVTUVfTFNCKSAmIE1CT1gzX0RNQV9SWF9DT05UUk9MX1JFU1VNRV9NQVNLKQotI2RlZmluZSBNQk9YM19ETUFfUlhfQ09OVFJPTF9TVEFSVF9NU0IgICAgICAgICAgIDEKLSNkZWZpbmUgTUJPWDNfRE1BX1JYX0NPTlRST0xfU1RBUlRfTFNCICAgICAgICAgICAxCi0jZGVmaW5lIE1CT1gzX0RNQV9SWF9DT05UUk9MX1NUQVJUX01BU0sgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBNQk9YM19ETUFfUlhfQ09OVFJPTF9TVEFSVF9HRVQoeCkgICAgICAgICgoKHgpICYgTUJPWDNfRE1BX1JYX0NPTlRST0xfU1RBUlRfTUFTSykgPj4gTUJPWDNfRE1BX1JYX0NPTlRST0xfU1RBUlRfTFNCKQotI2RlZmluZSBNQk9YM19ETUFfUlhfQ09OVFJPTF9TVEFSVF9TRVQoeCkgICAgICAgICgoKHgpIDw8IE1CT1gzX0RNQV9SWF9DT05UUk9MX1NUQVJUX0xTQikgJiBNQk9YM19ETUFfUlhfQ09OVFJPTF9TVEFSVF9NQVNLKQotI2RlZmluZSBNQk9YM19ETUFfUlhfQ09OVFJPTF9TVE9QX01TQiAgICAgICAgICAgIDAKLSNkZWZpbmUgTUJPWDNfRE1BX1JYX0NPTlRST0xfU1RPUF9MU0IgICAgICAgICAgICAwCi0jZGVmaW5lIE1CT1gzX0RNQV9SWF9DT05UUk9MX1NUT1BfTUFTSyAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBNQk9YM19ETUFfUlhfQ09OVFJPTF9TVE9QX0dFVCh4KSAgICAgICAgICgoKHgpICYgTUJPWDNfRE1BX1JYX0NPTlRST0xfU1RPUF9NQVNLKSA+PiBNQk9YM19ETUFfUlhfQ09OVFJPTF9TVE9QX0xTQikKLSNkZWZpbmUgTUJPWDNfRE1BX1JYX0NPTlRST0xfU1RPUF9TRVQoeCkgICAgICAgICAoKCh4KSA8PCBNQk9YM19ETUFfUlhfQ09OVFJPTF9TVE9QX0xTQikgJiBNQk9YM19ETUFfUlhfQ09OVFJPTF9TVE9QX01BU0spCi0KLSNkZWZpbmUgTUJPWDNfRE1BX1RYX0RFU0NSSVBUT1JfQkFTRV9BRERSRVNTICAgICAweDAwMDAwMDUwCi0jZGVmaW5lIE1CT1gzX0RNQV9UWF9ERVNDUklQVE9SX0JBU0VfT0ZGU0VUICAgICAgMHgwMDAwMDA1MAotI2RlZmluZSBNQk9YM19ETUFfVFhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1NfTVNCIDI3Ci0jZGVmaW5lIE1CT1gzX0RNQV9UWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTU19MU0IgMgotI2RlZmluZSBNQk9YM19ETUFfVFhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1NfTUFTSyAweDBmZmZmZmZjCi0jZGVmaW5lIE1CT1gzX0RNQV9UWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTU19HRVQoeCkgKCgoeCkgJiBNQk9YM19ETUFfVFhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1NfTUFTSykgPj4gTUJPWDNfRE1BX1RYX0RFU0NSSVBUT1JfQkFTRV9BRERSRVNTX0xTQikKLSNkZWZpbmUgTUJPWDNfRE1BX1RYX0RFU0NSSVBUT1JfQkFTRV9BRERSRVNTX1NFVCh4KSAoKCh4KSA8PCBNQk9YM19ETUFfVFhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1NfTFNCKSAmIE1CT1gzX0RNQV9UWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTU19NQVNLKQotCi0jZGVmaW5lIE1CT1gzX0RNQV9UWF9DT05UUk9MX0FERFJFU1MgICAgICAgICAgICAgMHgwMDAwMDA1NAotI2RlZmluZSBNQk9YM19ETUFfVFhfQ09OVFJPTF9PRkZTRVQgICAgICAgICAgICAgIDB4MDAwMDAwNTQKLSNkZWZpbmUgTUJPWDNfRE1BX1RYX0NPTlRST0xfUkVTVU1FX01TQiAgICAgICAgICAyCi0jZGVmaW5lIE1CT1gzX0RNQV9UWF9DT05UUk9MX1JFU1VNRV9MU0IgICAgICAgICAgMgotI2RlZmluZSBNQk9YM19ETUFfVFhfQ09OVFJPTF9SRVNVTUVfTUFTSyAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgTUJPWDNfRE1BX1RYX0NPTlRST0xfUkVTVU1FX0dFVCh4KSAgICAgICAoKCh4KSAmIE1CT1gzX0RNQV9UWF9DT05UUk9MX1JFU1VNRV9NQVNLKSA+PiBNQk9YM19ETUFfVFhfQ09OVFJPTF9SRVNVTUVfTFNCKQotI2RlZmluZSBNQk9YM19ETUFfVFhfQ09OVFJPTF9SRVNVTUVfU0VUKHgpICAgICAgICgoKHgpIDw8IE1CT1gzX0RNQV9UWF9DT05UUk9MX1JFU1VNRV9MU0IpICYgTUJPWDNfRE1BX1RYX0NPTlRST0xfUkVTVU1FX01BU0spCi0jZGVmaW5lIE1CT1gzX0RNQV9UWF9DT05UUk9MX1NUQVJUX01TQiAgICAgICAgICAgMQotI2RlZmluZSBNQk9YM19ETUFfVFhfQ09OVFJPTF9TVEFSVF9MU0IgICAgICAgICAgIDEKLSNkZWZpbmUgTUJPWDNfRE1BX1RYX0NPTlRST0xfU1RBUlRfTUFTSyAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIE1CT1gzX0RNQV9UWF9DT05UUk9MX1NUQVJUX0dFVCh4KSAgICAgICAgKCgoeCkgJiBNQk9YM19ETUFfVFhfQ09OVFJPTF9TVEFSVF9NQVNLKSA+PiBNQk9YM19ETUFfVFhfQ09OVFJPTF9TVEFSVF9MU0IpCi0jZGVmaW5lIE1CT1gzX0RNQV9UWF9DT05UUk9MX1NUQVJUX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgTUJPWDNfRE1BX1RYX0NPTlRST0xfU1RBUlRfTFNCKSAmIE1CT1gzX0RNQV9UWF9DT05UUk9MX1NUQVJUX01BU0spCi0jZGVmaW5lIE1CT1gzX0RNQV9UWF9DT05UUk9MX1NUT1BfTVNCICAgICAgICAgICAgMAotI2RlZmluZSBNQk9YM19ETUFfVFhfQ09OVFJPTF9TVE9QX0xTQiAgICAgICAgICAgIDAKLSNkZWZpbmUgTUJPWDNfRE1BX1RYX0NPTlRST0xfU1RPUF9NQVNLICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIE1CT1gzX0RNQV9UWF9DT05UUk9MX1NUT1BfR0VUKHgpICAgICAgICAgKCgoeCkgJiBNQk9YM19ETUFfVFhfQ09OVFJPTF9TVE9QX01BU0spID4+IE1CT1gzX0RNQV9UWF9DT05UUk9MX1NUT1BfTFNCKQotI2RlZmluZSBNQk9YM19ETUFfVFhfQ09OVFJPTF9TVE9QX1NFVCh4KSAgICAgICAgICgoKHgpIDw8IE1CT1gzX0RNQV9UWF9DT05UUk9MX1NUT1BfTFNCKSAmIE1CT1gzX0RNQV9UWF9DT05UUk9MX1NUT1BfTUFTSykKLQotI2RlZmluZSBNQk9YX0lOVF9TVEFUVVNfQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTgKLSNkZWZpbmUgTUJPWF9JTlRfU1RBVFVTX09GRlNFVCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU4Ci0jZGVmaW5lIE1CT1hfSU5UX1NUQVRVU19SWF9ETUFfQ09NUExFVEVfTVNCICAgICAgMzEKLSNkZWZpbmUgTUJPWF9JTlRfU1RBVFVTX1JYX0RNQV9DT01QTEVURV9MU0IgICAgICAyOAotI2RlZmluZSBNQk9YX0lOVF9TVEFUVVNfUlhfRE1BX0NPTVBMRVRFX01BU0sgICAgIDB4ZjAwMDAwMDAKLSNkZWZpbmUgTUJPWF9JTlRfU1RBVFVTX1JYX0RNQV9DT01QTEVURV9HRVQoeCkgICAoKCh4KSAmIE1CT1hfSU5UX1NUQVRVU19SWF9ETUFfQ09NUExFVEVfTUFTSykgPj4gTUJPWF9JTlRfU1RBVFVTX1JYX0RNQV9DT01QTEVURV9MU0IpCi0jZGVmaW5lIE1CT1hfSU5UX1NUQVRVU19SWF9ETUFfQ09NUExFVEVfU0VUKHgpICAgKCgoeCkgPDwgTUJPWF9JTlRfU1RBVFVTX1JYX0RNQV9DT01QTEVURV9MU0IpICYgTUJPWF9JTlRfU1RBVFVTX1JYX0RNQV9DT01QTEVURV9NQVNLKQotI2RlZmluZSBNQk9YX0lOVF9TVEFUVVNfVFhfRE1BX0VPTV9DT01QTEVURV9NU0IgIDI3Ci0jZGVmaW5lIE1CT1hfSU5UX1NUQVRVU19UWF9ETUFfRU9NX0NPTVBMRVRFX0xTQiAgMjQKLSNkZWZpbmUgTUJPWF9JTlRfU1RBVFVTX1RYX0RNQV9FT01fQ09NUExFVEVfTUFTSyAweDBmMDAwMDAwCi0jZGVmaW5lIE1CT1hfSU5UX1NUQVRVU19UWF9ETUFfRU9NX0NPTVBMRVRFX0dFVCh4KSAoKCh4KSAmIE1CT1hfSU5UX1NUQVRVU19UWF9ETUFfRU9NX0NPTVBMRVRFX01BU0spID4+IE1CT1hfSU5UX1NUQVRVU19UWF9ETUFfRU9NX0NPTVBMRVRFX0xTQikKLSNkZWZpbmUgTUJPWF9JTlRfU1RBVFVTX1RYX0RNQV9FT01fQ09NUExFVEVfU0VUKHgpICgoKHgpIDw8IE1CT1hfSU5UX1NUQVRVU19UWF9ETUFfRU9NX0NPTVBMRVRFX0xTQikgJiBNQk9YX0lOVF9TVEFUVVNfVFhfRE1BX0VPTV9DT01QTEVURV9NQVNLKQotI2RlZmluZSBNQk9YX0lOVF9TVEFUVVNfVFhfRE1BX0NPTVBMRVRFX01TQiAgICAgIDIzCi0jZGVmaW5lIE1CT1hfSU5UX1NUQVRVU19UWF9ETUFfQ09NUExFVEVfTFNCICAgICAgMjAKLSNkZWZpbmUgTUJPWF9JTlRfU1RBVFVTX1RYX0RNQV9DT01QTEVURV9NQVNLICAgICAweDAwZjAwMDAwCi0jZGVmaW5lIE1CT1hfSU5UX1NUQVRVU19UWF9ETUFfQ09NUExFVEVfR0VUKHgpICAgKCgoeCkgJiBNQk9YX0lOVF9TVEFUVVNfVFhfRE1BX0NPTVBMRVRFX01BU0spID4+IE1CT1hfSU5UX1NUQVRVU19UWF9ETUFfQ09NUExFVEVfTFNCKQotI2RlZmluZSBNQk9YX0lOVF9TVEFUVVNfVFhfRE1BX0NPTVBMRVRFX1NFVCh4KSAgICgoKHgpIDw8IE1CT1hfSU5UX1NUQVRVU19UWF9ETUFfQ09NUExFVEVfTFNCKSAmIE1CT1hfSU5UX1NUQVRVU19UWF9ETUFfQ09NUExFVEVfTUFTSykKLSNkZWZpbmUgTUJPWF9JTlRfU1RBVFVTX1RYX09WRVJGTE9XX01TQiAgICAgICAgICAxNwotI2RlZmluZSBNQk9YX0lOVF9TVEFUVVNfVFhfT1ZFUkZMT1dfTFNCICAgICAgICAgIDE3Ci0jZGVmaW5lIE1CT1hfSU5UX1NUQVRVU19UWF9PVkVSRkxPV19NQVNLICAgICAgICAgMHgwMDAyMDAwMAotI2RlZmluZSBNQk9YX0lOVF9TVEFUVVNfVFhfT1ZFUkZMT1dfR0VUKHgpICAgICAgICgoKHgpICYgTUJPWF9JTlRfU1RBVFVTX1RYX09WRVJGTE9XX01BU0spID4+IE1CT1hfSU5UX1NUQVRVU19UWF9PVkVSRkxPV19MU0IpCi0jZGVmaW5lIE1CT1hfSU5UX1NUQVRVU19UWF9PVkVSRkxPV19TRVQoeCkgICAgICAgKCgoeCkgPDwgTUJPWF9JTlRfU1RBVFVTX1RYX09WRVJGTE9XX0xTQikgJiBNQk9YX0lOVF9TVEFUVVNfVFhfT1ZFUkZMT1dfTUFTSykKLSNkZWZpbmUgTUJPWF9JTlRfU1RBVFVTX1JYX1VOREVSRkxPV19NU0IgICAgICAgICAxNgotI2RlZmluZSBNQk9YX0lOVF9TVEFUVVNfUlhfVU5ERVJGTE9XX0xTQiAgICAgICAgIDE2Ci0jZGVmaW5lIE1CT1hfSU5UX1NUQVRVU19SWF9VTkRFUkZMT1dfTUFTSyAgICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBNQk9YX0lOVF9TVEFUVVNfUlhfVU5ERVJGTE9XX0dFVCh4KSAgICAgICgoKHgpICYgTUJPWF9JTlRfU1RBVFVTX1JYX1VOREVSRkxPV19NQVNLKSA+PiBNQk9YX0lOVF9TVEFUVVNfUlhfVU5ERVJGTE9XX0xTQikKLSNkZWZpbmUgTUJPWF9JTlRfU1RBVFVTX1JYX1VOREVSRkxPV19TRVQoeCkgICAgICAoKCh4KSA8PCBNQk9YX0lOVF9TVEFUVVNfUlhfVU5ERVJGTE9XX0xTQikgJiBNQk9YX0lOVF9TVEFUVVNfUlhfVU5ERVJGTE9XX01BU0spCi0jZGVmaW5lIE1CT1hfSU5UX1NUQVRVU19UWF9OT1RfRU1QVFlfTVNCICAgICAgICAgMTUKLSNkZWZpbmUgTUJPWF9JTlRfU1RBVFVTX1RYX05PVF9FTVBUWV9MU0IgICAgICAgICAxMgotI2RlZmluZSBNQk9YX0lOVF9TVEFUVVNfVFhfTk9UX0VNUFRZX01BU0sgICAgICAgIDB4MDAwMGYwMDAKLSNkZWZpbmUgTUJPWF9JTlRfU1RBVFVTX1RYX05PVF9FTVBUWV9HRVQoeCkgICAgICAoKCh4KSAmIE1CT1hfSU5UX1NUQVRVU19UWF9OT1RfRU1QVFlfTUFTSykgPj4gTUJPWF9JTlRfU1RBVFVTX1RYX05PVF9FTVBUWV9MU0IpCi0jZGVmaW5lIE1CT1hfSU5UX1NUQVRVU19UWF9OT1RfRU1QVFlfU0VUKHgpICAgICAgKCgoeCkgPDwgTUJPWF9JTlRfU1RBVFVTX1RYX05PVF9FTVBUWV9MU0IpICYgTUJPWF9JTlRfU1RBVFVTX1RYX05PVF9FTVBUWV9NQVNLKQotI2RlZmluZSBNQk9YX0lOVF9TVEFUVVNfUlhfTk9UX0ZVTExfTVNCICAgICAgICAgIDExCi0jZGVmaW5lIE1CT1hfSU5UX1NUQVRVU19SWF9OT1RfRlVMTF9MU0IgICAgICAgICAgOAotI2RlZmluZSBNQk9YX0lOVF9TVEFUVVNfUlhfTk9UX0ZVTExfTUFTSyAgICAgICAgIDB4MDAwMDBmMDAKLSNkZWZpbmUgTUJPWF9JTlRfU1RBVFVTX1JYX05PVF9GVUxMX0dFVCh4KSAgICAgICAoKCh4KSAmIE1CT1hfSU5UX1NUQVRVU19SWF9OT1RfRlVMTF9NQVNLKSA+PiBNQk9YX0lOVF9TVEFUVVNfUlhfTk9UX0ZVTExfTFNCKQotI2RlZmluZSBNQk9YX0lOVF9TVEFUVVNfUlhfTk9UX0ZVTExfU0VUKHgpICAgICAgICgoKHgpIDw8IE1CT1hfSU5UX1NUQVRVU19SWF9OT1RfRlVMTF9MU0IpICYgTUJPWF9JTlRfU1RBVFVTX1JYX05PVF9GVUxMX01BU0spCi0jZGVmaW5lIE1CT1hfSU5UX1NUQVRVU19IT1NUX01TQiAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBNQk9YX0lOVF9TVEFUVVNfSE9TVF9MU0IgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTUJPWF9JTlRfU1RBVFVTX0hPU1RfTUFTSyAgICAgICAgICAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIE1CT1hfSU5UX1NUQVRVU19IT1NUX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiBNQk9YX0lOVF9TVEFUVVNfSE9TVF9NQVNLKSA+PiBNQk9YX0lOVF9TVEFUVVNfSE9TVF9MU0IpCi0jZGVmaW5lIE1CT1hfSU5UX1NUQVRVU19IT1NUX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgTUJPWF9JTlRfU1RBVFVTX0hPU1RfTFNCKSAmIE1CT1hfSU5UX1NUQVRVU19IT1NUX01BU0spCi0KLSNkZWZpbmUgTUJPWF9JTlRfRU5BQkxFX0FERFJFU1MgICAgICAgICAgICAgICAgICAweDAwMDAwMDVjCi0jZGVmaW5lIE1CT1hfSU5UX0VOQUJMRV9PRkZTRVQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1YwotI2RlZmluZSBNQk9YX0lOVF9FTkFCTEVfUlhfRE1BX0NPTVBMRVRFX01TQiAgICAgIDMxCi0jZGVmaW5lIE1CT1hfSU5UX0VOQUJMRV9SWF9ETUFfQ09NUExFVEVfTFNCICAgICAgMjgKLSNkZWZpbmUgTUJPWF9JTlRfRU5BQkxFX1JYX0RNQV9DT01QTEVURV9NQVNLICAgICAweGYwMDAwMDAwCi0jZGVmaW5lIE1CT1hfSU5UX0VOQUJMRV9SWF9ETUFfQ09NUExFVEVfR0VUKHgpICAgKCgoeCkgJiBNQk9YX0lOVF9FTkFCTEVfUlhfRE1BX0NPTVBMRVRFX01BU0spID4+IE1CT1hfSU5UX0VOQUJMRV9SWF9ETUFfQ09NUExFVEVfTFNCKQotI2RlZmluZSBNQk9YX0lOVF9FTkFCTEVfUlhfRE1BX0NPTVBMRVRFX1NFVCh4KSAgICgoKHgpIDw8IE1CT1hfSU5UX0VOQUJMRV9SWF9ETUFfQ09NUExFVEVfTFNCKSAmIE1CT1hfSU5UX0VOQUJMRV9SWF9ETUFfQ09NUExFVEVfTUFTSykKLSNkZWZpbmUgTUJPWF9JTlRfRU5BQkxFX1RYX0RNQV9FT01fQ09NUExFVEVfTVNCICAyNwotI2RlZmluZSBNQk9YX0lOVF9FTkFCTEVfVFhfRE1BX0VPTV9DT01QTEVURV9MU0IgIDI0Ci0jZGVmaW5lIE1CT1hfSU5UX0VOQUJMRV9UWF9ETUFfRU9NX0NPTVBMRVRFX01BU0sgMHgwZjAwMDAwMAotI2RlZmluZSBNQk9YX0lOVF9FTkFCTEVfVFhfRE1BX0VPTV9DT01QTEVURV9HRVQoeCkgKCgoeCkgJiBNQk9YX0lOVF9FTkFCTEVfVFhfRE1BX0VPTV9DT01QTEVURV9NQVNLKSA+PiBNQk9YX0lOVF9FTkFCTEVfVFhfRE1BX0VPTV9DT01QTEVURV9MU0IpCi0jZGVmaW5lIE1CT1hfSU5UX0VOQUJMRV9UWF9ETUFfRU9NX0NPTVBMRVRFX1NFVCh4KSAoKCh4KSA8PCBNQk9YX0lOVF9FTkFCTEVfVFhfRE1BX0VPTV9DT01QTEVURV9MU0IpICYgTUJPWF9JTlRfRU5BQkxFX1RYX0RNQV9FT01fQ09NUExFVEVfTUFTSykKLSNkZWZpbmUgTUJPWF9JTlRfRU5BQkxFX1RYX0RNQV9DT01QTEVURV9NU0IgICAgICAyMwotI2RlZmluZSBNQk9YX0lOVF9FTkFCTEVfVFhfRE1BX0NPTVBMRVRFX0xTQiAgICAgIDIwCi0jZGVmaW5lIE1CT1hfSU5UX0VOQUJMRV9UWF9ETUFfQ09NUExFVEVfTUFTSyAgICAgMHgwMGYwMDAwMAotI2RlZmluZSBNQk9YX0lOVF9FTkFCTEVfVFhfRE1BX0NPTVBMRVRFX0dFVCh4KSAgICgoKHgpICYgTUJPWF9JTlRfRU5BQkxFX1RYX0RNQV9DT01QTEVURV9NQVNLKSA+PiBNQk9YX0lOVF9FTkFCTEVfVFhfRE1BX0NPTVBMRVRFX0xTQikKLSNkZWZpbmUgTUJPWF9JTlRfRU5BQkxFX1RYX0RNQV9DT01QTEVURV9TRVQoeCkgICAoKCh4KSA8PCBNQk9YX0lOVF9FTkFCTEVfVFhfRE1BX0NPTVBMRVRFX0xTQikgJiBNQk9YX0lOVF9FTkFCTEVfVFhfRE1BX0NPTVBMRVRFX01BU0spCi0jZGVmaW5lIE1CT1hfSU5UX0VOQUJMRV9UWF9PVkVSRkxPV19NU0IgICAgICAgICAgMTcKLSNkZWZpbmUgTUJPWF9JTlRfRU5BQkxFX1RYX09WRVJGTE9XX0xTQiAgICAgICAgICAxNwotI2RlZmluZSBNQk9YX0lOVF9FTkFCTEVfVFhfT1ZFUkZMT1dfTUFTSyAgICAgICAgIDB4MDAwMjAwMDAKLSNkZWZpbmUgTUJPWF9JTlRfRU5BQkxFX1RYX09WRVJGTE9XX0dFVCh4KSAgICAgICAoKCh4KSAmIE1CT1hfSU5UX0VOQUJMRV9UWF9PVkVSRkxPV19NQVNLKSA+PiBNQk9YX0lOVF9FTkFCTEVfVFhfT1ZFUkZMT1dfTFNCKQotI2RlZmluZSBNQk9YX0lOVF9FTkFCTEVfVFhfT1ZFUkZMT1dfU0VUKHgpICAgICAgICgoKHgpIDw8IE1CT1hfSU5UX0VOQUJMRV9UWF9PVkVSRkxPV19MU0IpICYgTUJPWF9JTlRfRU5BQkxFX1RYX09WRVJGTE9XX01BU0spCi0jZGVmaW5lIE1CT1hfSU5UX0VOQUJMRV9SWF9VTkRFUkZMT1dfTVNCICAgICAgICAgMTYKLSNkZWZpbmUgTUJPWF9JTlRfRU5BQkxFX1JYX1VOREVSRkxPV19MU0IgICAgICAgICAxNgotI2RlZmluZSBNQk9YX0lOVF9FTkFCTEVfUlhfVU5ERVJGTE9XX01BU0sgICAgICAgIDB4MDAwMTAwMDAKLSNkZWZpbmUgTUJPWF9JTlRfRU5BQkxFX1JYX1VOREVSRkxPV19HRVQoeCkgICAgICAoKCh4KSAmIE1CT1hfSU5UX0VOQUJMRV9SWF9VTkRFUkZMT1dfTUFTSykgPj4gTUJPWF9JTlRfRU5BQkxFX1JYX1VOREVSRkxPV19MU0IpCi0jZGVmaW5lIE1CT1hfSU5UX0VOQUJMRV9SWF9VTkRFUkZMT1dfU0VUKHgpICAgICAgKCgoeCkgPDwgTUJPWF9JTlRfRU5BQkxFX1JYX1VOREVSRkxPV19MU0IpICYgTUJPWF9JTlRfRU5BQkxFX1JYX1VOREVSRkxPV19NQVNLKQotI2RlZmluZSBNQk9YX0lOVF9FTkFCTEVfVFhfTk9UX0VNUFRZX01TQiAgICAgICAgIDE1Ci0jZGVmaW5lIE1CT1hfSU5UX0VOQUJMRV9UWF9OT1RfRU1QVFlfTFNCICAgICAgICAgMTIKLSNkZWZpbmUgTUJPWF9JTlRfRU5BQkxFX1RYX05PVF9FTVBUWV9NQVNLICAgICAgICAweDAwMDBmMDAwCi0jZGVmaW5lIE1CT1hfSU5UX0VOQUJMRV9UWF9OT1RfRU1QVFlfR0VUKHgpICAgICAgKCgoeCkgJiBNQk9YX0lOVF9FTkFCTEVfVFhfTk9UX0VNUFRZX01BU0spID4+IE1CT1hfSU5UX0VOQUJMRV9UWF9OT1RfRU1QVFlfTFNCKQotI2RlZmluZSBNQk9YX0lOVF9FTkFCTEVfVFhfTk9UX0VNUFRZX1NFVCh4KSAgICAgICgoKHgpIDw8IE1CT1hfSU5UX0VOQUJMRV9UWF9OT1RfRU1QVFlfTFNCKSAmIE1CT1hfSU5UX0VOQUJMRV9UWF9OT1RfRU1QVFlfTUFTSykKLSNkZWZpbmUgTUJPWF9JTlRfRU5BQkxFX1JYX05PVF9GVUxMX01TQiAgICAgICAgICAxMQotI2RlZmluZSBNQk9YX0lOVF9FTkFCTEVfUlhfTk9UX0ZVTExfTFNCICAgICAgICAgIDgKLSNkZWZpbmUgTUJPWF9JTlRfRU5BQkxFX1JYX05PVF9GVUxMX01BU0sgICAgICAgICAweDAwMDAwZjAwCi0jZGVmaW5lIE1CT1hfSU5UX0VOQUJMRV9SWF9OT1RfRlVMTF9HRVQoeCkgICAgICAgKCgoeCkgJiBNQk9YX0lOVF9FTkFCTEVfUlhfTk9UX0ZVTExfTUFTSykgPj4gTUJPWF9JTlRfRU5BQkxFX1JYX05PVF9GVUxMX0xTQikKLSNkZWZpbmUgTUJPWF9JTlRfRU5BQkxFX1JYX05PVF9GVUxMX1NFVCh4KSAgICAgICAoKCh4KSA8PCBNQk9YX0lOVF9FTkFCTEVfUlhfTk9UX0ZVTExfTFNCKSAmIE1CT1hfSU5UX0VOQUJMRV9SWF9OT1RfRlVMTF9NQVNLKQotI2RlZmluZSBNQk9YX0lOVF9FTkFCTEVfSE9TVF9NU0IgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgTUJPWF9JTlRfRU5BQkxFX0hPU1RfTFNCICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1CT1hfSU5UX0VOQUJMRV9IT1NUX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBNQk9YX0lOVF9FTkFCTEVfSE9TVF9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgTUJPWF9JTlRfRU5BQkxFX0hPU1RfTUFTSykgPj4gTUJPWF9JTlRfRU5BQkxFX0hPU1RfTFNCKQotI2RlZmluZSBNQk9YX0lOVF9FTkFCTEVfSE9TVF9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IE1CT1hfSU5UX0VOQUJMRV9IT1NUX0xTQikgJiBNQk9YX0lOVF9FTkFCTEVfSE9TVF9NQVNLKQotCi0jZGVmaW5lIElOVF9IT1NUX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2MAotI2RlZmluZSBJTlRfSE9TVF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjAKLSNkZWZpbmUgSU5UX0hPU1RfVkVDVE9SX01TQiAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIElOVF9IT1NUX1ZFQ1RPUl9MU0IgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBJTlRfSE9TVF9WRUNUT1JfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgSU5UX0hPU1RfVkVDVE9SX0dFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIElOVF9IT1NUX1ZFQ1RPUl9NQVNLKSA+PiBJTlRfSE9TVF9WRUNUT1JfTFNCKQotI2RlZmluZSBJTlRfSE9TVF9WRUNUT1JfU0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IElOVF9IT1NUX1ZFQ1RPUl9MU0IpICYgSU5UX0hPU1RfVkVDVE9SX01BU0spCi0KLSNkZWZpbmUgTE9DQUxfQ09VTlRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIExPQ0FMX0NPVU5UX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBMT0NBTF9DT1VOVF9WQUxVRV9NU0IgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgTE9DQUxfQ09VTlRfVkFMVUVfTFNCICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIExPQ0FMX0NPVU5UX1ZBTFVFX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBMT0NBTF9DT1VOVF9WQUxVRV9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgTE9DQUxfQ09VTlRfVkFMVUVfTUFTSykgPj4gTE9DQUxfQ09VTlRfVkFMVUVfTFNCKQotI2RlZmluZSBMT0NBTF9DT1VOVF9WQUxVRV9TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IExPQ0FMX0NPVU5UX1ZBTFVFX0xTQikgJiBMT0NBTF9DT1VOVF9WQUxVRV9NQVNLKQotCi0jZGVmaW5lIENPVU5UX0lOQ19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBhMAotI2RlZmluZSBDT1VOVF9JTkNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYTAKLSNkZWZpbmUgQ09VTlRfSU5DX1ZBTFVFX01TQiAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIENPVU5UX0lOQ19WQUxVRV9MU0IgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBDT1VOVF9JTkNfVkFMVUVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgQ09VTlRfSU5DX1ZBTFVFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIENPVU5UX0lOQ19WQUxVRV9NQVNLKSA+PiBDT1VOVF9JTkNfVkFMVUVfTFNCKQotI2RlZmluZSBDT1VOVF9JTkNfVkFMVUVfU0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IENPVU5UX0lOQ19WQUxVRV9MU0IpICYgQ09VTlRfSU5DX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgTE9DQUxfU0NSQVRDSF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGMwCi0jZGVmaW5lIExPQ0FMX1NDUkFUQ0hfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBjMAotI2RlZmluZSBMT0NBTF9TQ1JBVENIX1ZBTFVFX01TQiAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgTE9DQUxfU0NSQVRDSF9WQUxVRV9MU0IgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIExPQ0FMX1NDUkFUQ0hfVkFMVUVfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBMT0NBTF9TQ1JBVENIX1ZBTFVFX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgTE9DQUxfU0NSQVRDSF9WQUxVRV9NQVNLKSA+PiBMT0NBTF9TQ1JBVENIX1ZBTFVFX0xTQikKLSNkZWZpbmUgTE9DQUxfU0NSQVRDSF9WQUxVRV9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBMT0NBTF9TQ1JBVENIX1ZBTFVFX0xTQikgJiBMT0NBTF9TQ1JBVENIX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgVVNFX0xPQ0FMX0JVU19BRERSRVNTICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGUwCi0jZGVmaW5lIFVTRV9MT0NBTF9CVVNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBlMAotI2RlZmluZSBVU0VfTE9DQUxfQlVTX1BJTl9JTklUX01TQiAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgVVNFX0xPQ0FMX0JVU19QSU5fSU5JVF9MU0IgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFVTRV9MT0NBTF9CVVNfUElOX0lOSVRfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBVU0VfTE9DQUxfQlVTX1BJTl9JTklUX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgVVNFX0xPQ0FMX0JVU19QSU5fSU5JVF9NQVNLKSA+PiBVU0VfTE9DQUxfQlVTX1BJTl9JTklUX0xTQikKLSNkZWZpbmUgVVNFX0xPQ0FMX0JVU19QSU5fSU5JVF9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBVU0VfTE9DQUxfQlVTX1BJTl9JTklUX0xTQikgJiBVU0VfTE9DQUxfQlVTX1BJTl9JTklUX01BU0spCi0KLSNkZWZpbmUgU0RJT19DT05GSUdfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGU0Ci0jZGVmaW5lIFNESU9fQ09ORklHX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBlNAotI2RlZmluZSBTRElPX0NPTkZJR19DQ0NSX0lPUjFfTVNCICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgU0RJT19DT05GSUdfQ0NDUl9JT1IxX0xTQiAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFNESU9fQ09ORklHX0NDQ1JfSU9SMV9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBTRElPX0NPTkZJR19DQ0NSX0lPUjFfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgU0RJT19DT05GSUdfQ0NDUl9JT1IxX01BU0spID4+IFNESU9fQ09ORklHX0NDQ1JfSU9SMV9MU0IpCi0jZGVmaW5lIFNESU9fQ09ORklHX0NDQ1JfSU9SMV9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgU0RJT19DT05GSUdfQ0NDUl9JT1IxX0xTQikgJiBTRElPX0NPTkZJR19DQ0NSX0lPUjFfTUFTSykKLQotI2RlZmluZSBNQk9YX0RFQlVHX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZTgKLSNkZWZpbmUgTUJPWF9ERUJVR19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGU4Ci0jZGVmaW5lIE1CT1hfREVCVUdfU0VMX01TQiAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBNQk9YX0RFQlVHX1NFTF9MU0IgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTUJPWF9ERUJVR19TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3Ci0jZGVmaW5lIE1CT1hfREVCVUdfU0VMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBNQk9YX0RFQlVHX1NFTF9NQVNLKSA+PiBNQk9YX0RFQlVHX1NFTF9MU0IpCi0jZGVmaW5lIE1CT1hfREVCVUdfU0VMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgTUJPWF9ERUJVR19TRUxfTFNCKSAmIE1CT1hfREVCVUdfU0VMX01BU0spCi0KLSNkZWZpbmUgTUJPWF9GSUZPX1JFU0VUX0FERFJFU1MgICAgICAgICAgICAgICAgICAweDAwMDAwMGVjCi0jZGVmaW5lIE1CT1hfRklGT19SRVNFVF9PRkZTRVQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBlYwotI2RlZmluZSBNQk9YX0ZJRk9fUkVTRVRfSU5JVF9NU0IgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTUJPWF9GSUZPX1JFU0VUX0lOSVRfTFNCICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1CT1hfRklGT19SRVNFVF9JTklUX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBNQk9YX0ZJRk9fUkVTRVRfSU5JVF9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgTUJPWF9GSUZPX1JFU0VUX0lOSVRfTUFTSykgPj4gTUJPWF9GSUZPX1JFU0VUX0lOSVRfTFNCKQotI2RlZmluZSBNQk9YX0ZJRk9fUkVTRVRfSU5JVF9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IE1CT1hfRklGT19SRVNFVF9JTklUX0xTQikgJiBNQk9YX0ZJRk9fUkVTRVRfSU5JVF9NQVNLKQotCi0jZGVmaW5lIE1CT1hfVFhGSUZPX1BPUF9BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmMAotI2RlZmluZSBNQk9YX1RYRklGT19QT1BfT0ZGU0VUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZjAKLSNkZWZpbmUgTUJPWF9UWEZJRk9fUE9QX0RBVEFfTVNCICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1CT1hfVFhGSUZPX1BPUF9EQVRBX0xTQiAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBNQk9YX1RYRklGT19QT1BfREFUQV9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgTUJPWF9UWEZJRk9fUE9QX0RBVEFfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIE1CT1hfVFhGSUZPX1BPUF9EQVRBX01BU0spID4+IE1CT1hfVFhGSUZPX1BPUF9EQVRBX0xTQikKLSNkZWZpbmUgTUJPWF9UWEZJRk9fUE9QX0RBVEFfU0VUKHgpICAgICAgICAgICAgICAoKCh4KSA8PCBNQk9YX1RYRklGT19QT1BfREFUQV9MU0IpICYgTUJPWF9UWEZJRk9fUE9QX0RBVEFfTUFTSykKLQotI2RlZmluZSBNQk9YX1JYRklGT19QT1BfQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKLSNkZWZpbmUgTUJPWF9SWEZJRk9fUE9QX09GRlNFVCAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCi0jZGVmaW5lIE1CT1hfUlhGSUZPX1BPUF9EQVRBX01TQiAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBNQk9YX1JYRklGT19QT1BfREFUQV9MU0IgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTUJPWF9SWEZJRk9fUE9QX0RBVEFfTUFTSyAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIE1CT1hfUlhGSUZPX1BPUF9EQVRBX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiBNQk9YX1JYRklGT19QT1BfREFUQV9NQVNLKSA+PiBNQk9YX1JYRklGT19QT1BfREFUQV9MU0IpCi0jZGVmaW5lIE1CT1hfUlhGSUZPX1BPUF9EQVRBX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgTUJPWF9SWEZJRk9fUE9QX0RBVEFfTFNCKSAmIE1CT1hfUlhGSUZPX1BPUF9EQVRBX01BU0spCi0KLSNkZWZpbmUgU0RJT19ERUJVR19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTEwCi0jZGVmaW5lIFNESU9fREVCVUdfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDExMAotI2RlZmluZSBTRElPX0RFQlVHX1NFTF9NU0IgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgU0RJT19ERUJVR19TRUxfTFNCICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFNESU9fREVCVUdfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwZgotI2RlZmluZSBTRElPX0RFQlVHX1NFTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgU0RJT19ERUJVR19TRUxfTUFTSykgPj4gU0RJT19ERUJVR19TRUxfTFNCKQotI2RlZmluZSBTRElPX0RFQlVHX1NFTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNESU9fREVCVUdfU0VMX0xTQikgJiBTRElPX0RFQlVHX1NFTF9NQVNLKQotCi0jZGVmaW5lIEhPU1RfSUZfV0lORE9XX0FERFJFU1MgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAotI2RlZmluZSBIT1NUX0lGX1dJTkRPV19PRkZTRVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKLSNkZWZpbmUgSE9TVF9JRl9XSU5ET1dfREFUQV9NU0IgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIEhPU1RfSUZfV0lORE9XX0RBVEFfTFNCICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBIT1NUX0lGX1dJTkRPV19EQVRBX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgSE9TVF9JRl9XSU5ET1dfREFUQV9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIEhPU1RfSUZfV0lORE9XX0RBVEFfTUFTSykgPj4gSE9TVF9JRl9XSU5ET1dfREFUQV9MU0IpCi0jZGVmaW5lIEhPU1RfSUZfV0lORE9XX0RBVEFfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgSE9TVF9JRl9XSU5ET1dfREFUQV9MU0IpICYgSE9TVF9JRl9XSU5ET1dfREFUQV9NQVNLKQotCi0KLSNpZm5kZWYgX19BU1NFTUJMRVJfXwotCi10eXBlZGVmIHN0cnVjdCBtYm94X3JlZ19yZWdfcyB7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYm94X2ZpZm9bNF07Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYm94X2ZpZm9fc3RhdHVzOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWJveF9kbWFfcG9saWN5OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWJveDBfZG1hX3J4X2Rlc2NyaXB0b3JfYmFzZTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1ib3gwX2RtYV9yeF9jb250cm9sOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWJveDBfZG1hX3R4X2Rlc2NyaXB0b3JfYmFzZTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1ib3gwX2RtYV90eF9jb250cm9sOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWJveDFfZG1hX3J4X2Rlc2NyaXB0b3JfYmFzZTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1ib3gxX2RtYV9yeF9jb250cm9sOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWJveDFfZG1hX3R4X2Rlc2NyaXB0b3JfYmFzZTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1ib3gxX2RtYV90eF9jb250cm9sOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWJveDJfZG1hX3J4X2Rlc2NyaXB0b3JfYmFzZTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1ib3gyX2RtYV9yeF9jb250cm9sOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWJveDJfZG1hX3R4X2Rlc2NyaXB0b3JfYmFzZTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1ib3gyX2RtYV90eF9jb250cm9sOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWJveDNfZG1hX3J4X2Rlc2NyaXB0b3JfYmFzZTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1ib3gzX2RtYV9yeF9jb250cm9sOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWJveDNfZG1hX3R4X2Rlc2NyaXB0b3JfYmFzZTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1ib3gzX2RtYV90eF9jb250cm9sOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWJveF9pbnRfc3RhdHVzOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWJveF9pbnRfZW5hYmxlOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgaW50X2hvc3Q7Ci0gIHVuc2lnbmVkIGNoYXIgcGFkMFsyOF07IC8qIHBhZCB0byAweDgwICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBsb2NhbF9jb3VudFs4XTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGNvdW50X2luY1s4XTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGxvY2FsX3NjcmF0Y2hbOF07Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB1c2VfbG9jYWxfYnVzOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgc2Rpb19jb25maWc7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYm94X2RlYnVnOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWJveF9maWZvX3Jlc2V0OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWJveF90eGZpZm9fcG9wWzRdOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWJveF9yeGZpZm9fcG9wWzRdOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgc2Rpb19kZWJ1ZzsKLSAgdW5zaWduZWQgY2hhciBwYWQxWzc5MTZdOyAvKiBwYWQgdG8gMHgyMDAwICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBob3N0X2lmX3dpbmRvd1syMDQ4XTsKLX0gbWJveF9yZWdfcmVnX3Q7Ci0KLSNlbmRpZiAvKiBfX0FTU0VNQkxFUl9fICovCi0KLSNlbmRpZiAvKiBfTUJPWF9SRUdfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3Mi4wL2h3L3J0Y19yZWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3Mi4wL2h3L3J0Y19yZWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGIzOTgwYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzIuMC9ody9ydGNfcmVnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYzICswLDAgQEAKLSNpZm5kZWYgX1JUQ19SRUdfUkVHX0hfCi0jZGVmaW5lIF9SVENfUkVHX1JFR19IXwotCi0jZGVmaW5lIFJFU0VUX0NPTlRST0xfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAotI2RlZmluZSBSRVNFVF9DT05UUk9MX09GRlNFVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgUkVTRVRfQ09OVFJPTF9DUFVfSU5JVF9SRVNFVF9NU0IgICAgICAgICAxMQotI2RlZmluZSBSRVNFVF9DT05UUk9MX0NQVV9JTklUX1JFU0VUX0xTQiAgICAgICAgIDExCi0jZGVmaW5lIFJFU0VUX0NPTlRST0xfQ1BVX0lOSVRfUkVTRVRfTUFTSyAgICAgICAgMHgwMDAwMDgwMAotI2RlZmluZSBSRVNFVF9DT05UUk9MX0NQVV9JTklUX1JFU0VUX0dFVCh4KSAgICAgICgoKHgpICYgUkVTRVRfQ09OVFJPTF9DUFVfSU5JVF9SRVNFVF9NQVNLKSA+PiBSRVNFVF9DT05UUk9MX0NQVV9JTklUX1JFU0VUX0xTQikKLSNkZWZpbmUgUkVTRVRfQ09OVFJPTF9DUFVfSU5JVF9SRVNFVF9TRVQoeCkgICAgICAoKCh4KSA8PCBSRVNFVF9DT05UUk9MX0NQVV9JTklUX1JFU0VUX0xTQikgJiBSRVNFVF9DT05UUk9MX0NQVV9JTklUX1JFU0VUX01BU0spCi0jZGVmaW5lIFJFU0VUX0NPTlRST0xfVk1DX1JFTUFQX1JFU0VUX01TQiAgICAgICAgMTAKLSNkZWZpbmUgUkVTRVRfQ09OVFJPTF9WTUNfUkVNQVBfUkVTRVRfTFNCICAgICAgICAxMAotI2RlZmluZSBSRVNFVF9DT05UUk9MX1ZNQ19SRU1BUF9SRVNFVF9NQVNLICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgUkVTRVRfQ09OVFJPTF9WTUNfUkVNQVBfUkVTRVRfR0VUKHgpICAgICAoKCh4KSAmIFJFU0VUX0NPTlRST0xfVk1DX1JFTUFQX1JFU0VUX01BU0spID4+IFJFU0VUX0NPTlRST0xfVk1DX1JFTUFQX1JFU0VUX0xTQikKLSNkZWZpbmUgUkVTRVRfQ09OVFJPTF9WTUNfUkVNQVBfUkVTRVRfU0VUKHgpICAgICAoKCh4KSA8PCBSRVNFVF9DT05UUk9MX1ZNQ19SRU1BUF9SRVNFVF9MU0IpICYgUkVTRVRfQ09OVFJPTF9WTUNfUkVNQVBfUkVTRVRfTUFTSykKLSNkZWZpbmUgUkVTRVRfQ09OVFJPTF9SU1RfT1VUX01TQiAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFJFU0VUX0NPTlRST0xfUlNUX09VVF9MU0IgICAgICAgICAgICAgICAgOQotI2RlZmluZSBSRVNFVF9DT05UUk9MX1JTVF9PVVRfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKLSNkZWZpbmUgUkVTRVRfQ09OVFJPTF9SU1RfT1VUX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIFJFU0VUX0NPTlRST0xfUlNUX09VVF9NQVNLKSA+PiBSRVNFVF9DT05UUk9MX1JTVF9PVVRfTFNCKQotI2RlZmluZSBSRVNFVF9DT05UUk9MX1JTVF9PVVRfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IFJFU0VUX0NPTlRST0xfUlNUX09VVF9MU0IpICYgUkVTRVRfQ09OVFJPTF9SU1RfT1VUX01BU0spCi0jZGVmaW5lIFJFU0VUX0NPTlRST0xfQ09MRF9SU1RfTVNCICAgICAgICAgICAgICAgOAotI2RlZmluZSBSRVNFVF9DT05UUk9MX0NPTERfUlNUX0xTQiAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUkVTRVRfQ09OVFJPTF9DT0xEX1JTVF9NQVNLICAgICAgICAgICAgICAweDAwMDAwMTAwCi0jZGVmaW5lIFJFU0VUX0NPTlRST0xfQ09MRF9SU1RfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBSRVNFVF9DT05UUk9MX0NPTERfUlNUX01BU0spID4+IFJFU0VUX0NPTlRST0xfQ09MRF9SU1RfTFNCKQotI2RlZmluZSBSRVNFVF9DT05UUk9MX0NPTERfUlNUX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IFJFU0VUX0NPTlRST0xfQ09MRF9SU1RfTFNCKSAmIFJFU0VUX0NPTlRST0xfQ09MRF9SU1RfTUFTSykKLSNkZWZpbmUgUkVTRVRfQ09OVFJPTF9XQVJNX1JTVF9NU0IgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFJFU0VUX0NPTlRST0xfV0FSTV9SU1RfTFNCICAgICAgICAgICAgICAgNwotI2RlZmluZSBSRVNFVF9DT05UUk9MX1dBUk1fUlNUX01BU0sgICAgICAgICAgICAgIDB4MDAwMDAwODAKLSNkZWZpbmUgUkVTRVRfQ09OVFJPTF9XQVJNX1JTVF9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFJFU0VUX0NPTlRST0xfV0FSTV9SU1RfTUFTSykgPj4gUkVTRVRfQ09OVFJPTF9XQVJNX1JTVF9MU0IpCi0jZGVmaW5lIFJFU0VUX0NPTlRST0xfV0FSTV9SU1RfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgUkVTRVRfQ09OVFJPTF9XQVJNX1JTVF9MU0IpICYgUkVTRVRfQ09OVFJPTF9XQVJNX1JTVF9NQVNLKQotI2RlZmluZSBSRVNFVF9DT05UUk9MX0NQVV9XQVJNX1JTVF9NU0IgICAgICAgICAgIDYKLSNkZWZpbmUgUkVTRVRfQ09OVFJPTF9DUFVfV0FSTV9SU1RfTFNCICAgICAgICAgICA2Ci0jZGVmaW5lIFJFU0VUX0NPTlRST0xfQ1BVX1dBUk1fUlNUX01BU0sgICAgICAgICAgMHgwMDAwMDA0MAotI2RlZmluZSBSRVNFVF9DT05UUk9MX0NQVV9XQVJNX1JTVF9HRVQoeCkgICAgICAgICgoKHgpICYgUkVTRVRfQ09OVFJPTF9DUFVfV0FSTV9SU1RfTUFTSykgPj4gUkVTRVRfQ09OVFJPTF9DUFVfV0FSTV9SU1RfTFNCKQotI2RlZmluZSBSRVNFVF9DT05UUk9MX0NQVV9XQVJNX1JTVF9TRVQoeCkgICAgICAgICgoKHgpIDw8IFJFU0VUX0NPTlRST0xfQ1BVX1dBUk1fUlNUX0xTQikgJiBSRVNFVF9DT05UUk9MX0NQVV9XQVJNX1JTVF9NQVNLKQotI2RlZmluZSBSRVNFVF9DT05UUk9MX01BQ19DT0xEX1JTVF9NU0IgICAgICAgICAgIDUKLSNkZWZpbmUgUkVTRVRfQ09OVFJPTF9NQUNfQ09MRF9SU1RfTFNCICAgICAgICAgICA1Ci0jZGVmaW5lIFJFU0VUX0NPTlRST0xfTUFDX0NPTERfUlNUX01BU0sgICAgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBSRVNFVF9DT05UUk9MX01BQ19DT0xEX1JTVF9HRVQoeCkgICAgICAgICgoKHgpICYgUkVTRVRfQ09OVFJPTF9NQUNfQ09MRF9SU1RfTUFTSykgPj4gUkVTRVRfQ09OVFJPTF9NQUNfQ09MRF9SU1RfTFNCKQotI2RlZmluZSBSRVNFVF9DT05UUk9MX01BQ19DT0xEX1JTVF9TRVQoeCkgICAgICAgICgoKHgpIDw8IFJFU0VUX0NPTlRST0xfTUFDX0NPTERfUlNUX0xTQikgJiBSRVNFVF9DT05UUk9MX01BQ19DT0xEX1JTVF9NQVNLKQotI2RlZmluZSBSRVNFVF9DT05UUk9MX01BQ19XQVJNX1JTVF9NU0IgICAgICAgICAgIDQKLSNkZWZpbmUgUkVTRVRfQ09OVFJPTF9NQUNfV0FSTV9SU1RfTFNCICAgICAgICAgICA0Ci0jZGVmaW5lIFJFU0VUX0NPTlRST0xfTUFDX1dBUk1fUlNUX01BU0sgICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBSRVNFVF9DT05UUk9MX01BQ19XQVJNX1JTVF9HRVQoeCkgICAgICAgICgoKHgpICYgUkVTRVRfQ09OVFJPTF9NQUNfV0FSTV9SU1RfTUFTSykgPj4gUkVTRVRfQ09OVFJPTF9NQUNfV0FSTV9SU1RfTFNCKQotI2RlZmluZSBSRVNFVF9DT05UUk9MX01BQ19XQVJNX1JTVF9TRVQoeCkgICAgICAgICgoKHgpIDw8IFJFU0VUX0NPTlRST0xfTUFDX1dBUk1fUlNUX0xTQikgJiBSRVNFVF9DT05UUk9MX01BQ19XQVJNX1JTVF9NQVNLKQotI2RlZmluZSBSRVNFVF9DT05UUk9MX01CT1hfUlNUX01TQiAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUkVTRVRfQ09OVFJPTF9NQk9YX1JTVF9MU0IgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFJFU0VUX0NPTlRST0xfTUJPWF9SU1RfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBSRVNFVF9DT05UUk9MX01CT1hfUlNUX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgUkVTRVRfQ09OVFJPTF9NQk9YX1JTVF9NQVNLKSA+PiBSRVNFVF9DT05UUk9MX01CT1hfUlNUX0xTQikKLSNkZWZpbmUgUkVTRVRfQ09OVFJPTF9NQk9YX1JTVF9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBSRVNFVF9DT05UUk9MX01CT1hfUlNUX0xTQikgJiBSRVNFVF9DT05UUk9MX01CT1hfUlNUX01BU0spCi0jZGVmaW5lIFJFU0VUX0NPTlRST0xfVUFSVF9SU1RfTVNCICAgICAgICAgICAgICAgMQotI2RlZmluZSBSRVNFVF9DT05UUk9MX1VBUlRfUlNUX0xTQiAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUkVTRVRfQ09OVFJPTF9VQVJUX1JTVF9NQVNLICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFJFU0VUX0NPTlRST0xfVUFSVF9SU1RfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBSRVNFVF9DT05UUk9MX1VBUlRfUlNUX01BU0spID4+IFJFU0VUX0NPTlRST0xfVUFSVF9SU1RfTFNCKQotI2RlZmluZSBSRVNFVF9DT05UUk9MX1VBUlRfUlNUX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IFJFU0VUX0NPTlRST0xfVUFSVF9SU1RfTFNCKSAmIFJFU0VUX0NPTlRST0xfVUFSVF9SU1RfTUFTSykKLSNkZWZpbmUgUkVTRVRfQ09OVFJPTF9TSTBfUlNUX01TQiAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFJFU0VUX0NPTlRST0xfU0kwX1JTVF9MU0IgICAgICAgICAgICAgICAgMAotI2RlZmluZSBSRVNFVF9DT05UUk9MX1NJMF9SU1RfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUkVTRVRfQ09OVFJPTF9TSTBfUlNUX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIFJFU0VUX0NPTlRST0xfU0kwX1JTVF9NQVNLKSA+PiBSRVNFVF9DT05UUk9MX1NJMF9SU1RfTFNCKQotI2RlZmluZSBSRVNFVF9DT05UUk9MX1NJMF9SU1RfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IFJFU0VUX0NPTlRST0xfU0kwX1JTVF9MU0IpICYgUkVTRVRfQ09OVFJPTF9TSTBfUlNUX01BU0spCi0KLSNkZWZpbmUgWFRBTF9DT05UUk9MX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFhUQUxfQ09OVFJPTF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBYVEFMX0NPTlRST0xfVENYT19NU0IgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgWFRBTF9DT05UUk9MX1RDWE9fTFNCICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFhUQUxfQ09OVFJPTF9UQ1hPX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBYVEFMX0NPTlRST0xfVENYT19HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgWFRBTF9DT05UUk9MX1RDWE9fTUFTSykgPj4gWFRBTF9DT05UUk9MX1RDWE9fTFNCKQotI2RlZmluZSBYVEFMX0NPTlRST0xfVENYT19TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IFhUQUxfQ09OVFJPTF9UQ1hPX0xTQikgJiBYVEFMX0NPTlRST0xfVENYT19NQVNLKQotCi0jZGVmaW5lIFRDWE9fREVURUNUX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBUQ1hPX0RFVEVDVF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgVENYT19ERVRFQ1RfUFJFU0VOVF9NU0IgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFRDWE9fREVURUNUX1BSRVNFTlRfTFNCICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBUQ1hPX0RFVEVDVF9QUkVTRU5UX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgVENYT19ERVRFQ1RfUFJFU0VOVF9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIFRDWE9fREVURUNUX1BSRVNFTlRfTUFTSykgPj4gVENYT19ERVRFQ1RfUFJFU0VOVF9MU0IpCi0jZGVmaW5lIFRDWE9fREVURUNUX1BSRVNFTlRfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgVENYT19ERVRFQ1RfUFJFU0VOVF9MU0IpICYgVENYT19ERVRFQ1RfUFJFU0VOVF9NQVNLKQotCi0jZGVmaW5lIFhUQUxfVEVTVF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwYwotI2RlZmluZSBYVEFMX1RFU1RfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGMKLSNkZWZpbmUgWFRBTF9URVNUX05PVENYT0RFVF9NU0IgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFhUQUxfVEVTVF9OT1RDWE9ERVRfTFNCICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBYVEFMX1RFU1RfTk9UQ1hPREVUX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgWFRBTF9URVNUX05PVENYT0RFVF9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIFhUQUxfVEVTVF9OT1RDWE9ERVRfTUFTSykgPj4gWFRBTF9URVNUX05PVENYT0RFVF9MU0IpCi0jZGVmaW5lIFhUQUxfVEVTVF9OT1RDWE9ERVRfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgWFRBTF9URVNUX05PVENYT0RFVF9MU0IpICYgWFRBTF9URVNUX05PVENYT0RFVF9NQVNLKQotCi0jZGVmaW5lIFFVQURSQVRVUkVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBRVUFEUkFUVVJFX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgUVVBRFJBVFVSRV9BRENfTVNCICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFFVQURSQVRVUkVfQURDX0xTQiAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBRVUFEUkFUVVJFX0FEQ19NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKLSNkZWZpbmUgUVVBRFJBVFVSRV9BRENfR0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFFVQURSQVRVUkVfQURDX01BU0spID4+IFFVQURSQVRVUkVfQURDX0xTQikKLSNkZWZpbmUgUVVBRFJBVFVSRV9BRENfU0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBRVUFEUkFUVVJFX0FEQ19MU0IpICYgUVVBRFJBVFVSRV9BRENfTUFTSykKLSNkZWZpbmUgUVVBRFJBVFVSRV9TRUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFFVQURSQVRVUkVfU0VMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBRVUFEUkFUVVJFX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgUVVBRFJBVFVSRV9TRUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFFVQURSQVRVUkVfU0VMX01BU0spID4+IFFVQURSQVRVUkVfU0VMX0xTQikKLSNkZWZpbmUgUVVBRFJBVFVSRV9TRUxfU0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBRVUFEUkFUVVJFX1NFTF9MU0IpICYgUVVBRFJBVFVSRV9TRUxfTUFTSykKLSNkZWZpbmUgUVVBRFJBVFVSRV9EQUNfTVNCICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFFVQURSQVRVUkVfREFDX0xTQiAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBRVUFEUkFUVVJFX0RBQ19NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKLSNkZWZpbmUgUVVBRFJBVFVSRV9EQUNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFFVQURSQVRVUkVfREFDX01BU0spID4+IFFVQURSQVRVUkVfREFDX0xTQikKLSNkZWZpbmUgUVVBRFJBVFVSRV9EQUNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBRVUFEUkFUVVJFX0RBQ19MU0IpICYgUVVBRFJBVFVSRV9EQUNfTUFTSykKLQotI2RlZmluZSBQTExfQ09OVFJPTF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKLSNkZWZpbmUgUExMX0NPTlRST0xfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE0Ci0jZGVmaW5lIFBMTF9DT05UUk9MX0RJR19URVNUX0NMS19NU0IgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUExMX0NPTlRST0xfRElHX1RFU1RfQ0xLX0xTQiAgICAgICAgICAgICAyMAotI2RlZmluZSBQTExfQ09OVFJPTF9ESUdfVEVTVF9DTEtfTUFTSyAgICAgICAgICAgIDB4MDAxMDAwMDAKLSNkZWZpbmUgUExMX0NPTlRST0xfRElHX1RFU1RfQ0xLX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIFBMTF9DT05UUk9MX0RJR19URVNUX0NMS19NQVNLKSA+PiBQTExfQ09OVFJPTF9ESUdfVEVTVF9DTEtfTFNCKQotI2RlZmluZSBQTExfQ09OVFJPTF9ESUdfVEVTVF9DTEtfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IFBMTF9DT05UUk9MX0RJR19URVNUX0NMS19MU0IpICYgUExMX0NPTlRST0xfRElHX1RFU1RfQ0xLX01BU0spCi0jZGVmaW5lIFBMTF9DT05UUk9MX01BQ19PVkVSUklERV9NU0IgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUExMX0NPTlRST0xfTUFDX09WRVJSSURFX0xTQiAgICAgICAgICAgICAxOQotI2RlZmluZSBQTExfQ09OVFJPTF9NQUNfT1ZFUlJJREVfTUFTSyAgICAgICAgICAgIDB4MDAwODAwMDAKLSNkZWZpbmUgUExMX0NPTlRST0xfTUFDX09WRVJSSURFX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIFBMTF9DT05UUk9MX01BQ19PVkVSUklERV9NQVNLKSA+PiBQTExfQ09OVFJPTF9NQUNfT1ZFUlJJREVfTFNCKQotI2RlZmluZSBQTExfQ09OVFJPTF9NQUNfT1ZFUlJJREVfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IFBMTF9DT05UUk9MX01BQ19PVkVSUklERV9MU0IpICYgUExMX0NPTlRST0xfTUFDX09WRVJSSURFX01BU0spCi0jZGVmaW5lIFBMTF9DT05UUk9MX05PUFdEX01TQiAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUExMX0NPTlRST0xfTk9QV0RfTFNCICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQTExfQ09OVFJPTF9OT1BXRF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKLSNkZWZpbmUgUExMX0NPTlRST0xfTk9QV0RfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIFBMTF9DT05UUk9MX05PUFdEX01BU0spID4+IFBMTF9DT05UUk9MX05PUFdEX0xTQikKLSNkZWZpbmUgUExMX0NPTlRST0xfTk9QV0RfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCBQTExfQ09OVFJPTF9OT1BXRF9MU0IpICYgUExMX0NPTlRST0xfTk9QV0RfTUFTSykKLSNkZWZpbmUgUExMX0NPTlRST0xfVVBEQVRJTkdfTVNCICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQTExfQ09OVFJPTF9VUERBVElOR19MU0IgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBMTF9DT05UUk9MX1VQREFUSU5HX01BU0sgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAotI2RlZmluZSBQTExfQ09OVFJPTF9VUERBVElOR19HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgUExMX0NPTlRST0xfVVBEQVRJTkdfTUFTSykgPj4gUExMX0NPTlRST0xfVVBEQVRJTkdfTFNCKQotI2RlZmluZSBQTExfQ09OVFJPTF9VUERBVElOR19TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFBMTF9DT05UUk9MX1VQREFUSU5HX0xTQikgJiBQTExfQ09OVFJPTF9VUERBVElOR19NQVNLKQotI2RlZmluZSBQTExfQ09OVFJPTF9CWVBBU1NfTVNCICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBMTF9DT05UUk9MX0JZUEFTU19MU0IgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUExMX0NPTlRST0xfQllQQVNTX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIFBMTF9DT05UUk9MX0JZUEFTU19HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiBQTExfQ09OVFJPTF9CWVBBU1NfTUFTSykgPj4gUExMX0NPTlRST0xfQllQQVNTX0xTQikKLSNkZWZpbmUgUExMX0NPTlRST0xfQllQQVNTX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCBQTExfQ09OVFJPTF9CWVBBU1NfTFNCKSAmIFBMTF9DT05UUk9MX0JZUEFTU19NQVNLKQotI2RlZmluZSBQTExfQ09OVFJPTF9SRUZESVZfTVNCICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBMTF9DT05UUk9MX1JFRkRJVl9MU0IgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUExMX0NPTlRST0xfUkVGRElWX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDBmMDAwCi0jZGVmaW5lIFBMTF9DT05UUk9MX1JFRkRJVl9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiBQTExfQ09OVFJPTF9SRUZESVZfTUFTSykgPj4gUExMX0NPTlRST0xfUkVGRElWX0xTQikKLSNkZWZpbmUgUExMX0NPTlRST0xfUkVGRElWX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCBQTExfQ09OVFJPTF9SRUZESVZfTFNCKSAmIFBMTF9DT05UUk9MX1JFRkRJVl9NQVNLKQotI2RlZmluZSBQTExfQ09OVFJPTF9ESVZfTVNCICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUExMX0NPTlRST0xfRElWX0xTQiAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBMTF9DT05UUk9MX0RJVl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNmZgotI2RlZmluZSBQTExfQ09OVFJPTF9ESVZfR0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgUExMX0NPTlRST0xfRElWX01BU0spID4+IFBMTF9DT05UUk9MX0RJVl9MU0IpCi0jZGVmaW5lIFBMTF9DT05UUk9MX0RJVl9TRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgUExMX0NPTlRST0xfRElWX0xTQikgJiBQTExfQ09OVFJPTF9ESVZfTUFTSykKLQotI2RlZmluZSBQTExfU0VUVExFX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKLSNkZWZpbmUgUExMX1NFVFRMRV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4Ci0jZGVmaW5lIFBMTF9TRVRUTEVfVElNRV9NU0IgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUExMX1NFVFRMRV9USU1FX0xTQiAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBMTF9TRVRUTEVfVElNRV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGZmZgotI2RlZmluZSBQTExfU0VUVExFX1RJTUVfR0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgUExMX1NFVFRMRV9USU1FX01BU0spID4+IFBMTF9TRVRUTEVfVElNRV9MU0IpCi0jZGVmaW5lIFBMTF9TRVRUTEVfVElNRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgUExMX1NFVFRMRV9USU1FX0xTQikgJiBQTExfU0VUVExFX1RJTUVfTUFTSykKLQotI2RlZmluZSBYVEFMX1NFVFRMRV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMWMKLSNkZWZpbmUgWFRBTF9TRVRUTEVfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFjCi0jZGVmaW5lIFhUQUxfU0VUVExFX1RJTUVfTVNCICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBYVEFMX1NFVFRMRV9USU1FX0xTQiAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgWFRBTF9TRVRUTEVfVElNRV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIFhUQUxfU0VUVExFX1RJTUVfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiBYVEFMX1NFVFRMRV9USU1FX01BU0spID4+IFhUQUxfU0VUVExFX1RJTUVfTFNCKQotI2RlZmluZSBYVEFMX1NFVFRMRV9USU1FX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFhUQUxfU0VUVExFX1RJTUVfTFNCKSAmIFhUQUxfU0VUVExFX1RJTUVfTUFTSykKLQotI2RlZmluZSBDUFVfQ0xPQ0tfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgQ1BVX0NMT0NLX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIENQVV9DTE9DS19TVEFOREFSRF9NU0IgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBDUFVfQ0xPQ0tfU1RBTkRBUkRfTFNCICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgQ1BVX0NMT0NLX1NUQU5EQVJEX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCi0jZGVmaW5lIENQVV9DTE9DS19TVEFOREFSRF9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiBDUFVfQ0xPQ0tfU1RBTkRBUkRfTUFTSykgPj4gQ1BVX0NMT0NLX1NUQU5EQVJEX0xTQikKLSNkZWZpbmUgQ1BVX0NMT0NLX1NUQU5EQVJEX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCBDUFVfQ0xPQ0tfU1RBTkRBUkRfTFNCKSAmIENQVV9DTE9DS19TVEFOREFSRF9NQVNLKQotCi0jZGVmaW5lIENMT0NLX09VVF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAotI2RlZmluZSBDTE9DS19PVVRfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKLSNkZWZpbmUgQ0xPQ0tfT1VUX1NFTEVDVF9NU0IgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIENMT0NLX09VVF9TRUxFQ1RfTFNCICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBDTE9DS19PVVRfU0VMRUNUX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGYKLSNkZWZpbmUgQ0xPQ0tfT1VUX1NFTEVDVF9HRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIENMT0NLX09VVF9TRUxFQ1RfTUFTSykgPj4gQ0xPQ0tfT1VUX1NFTEVDVF9MU0IpCi0jZGVmaW5lIENMT0NLX09VVF9TRUxFQ1RfU0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgQ0xPQ0tfT1VUX1NFTEVDVF9MU0IpICYgQ0xPQ0tfT1VUX1NFTEVDVF9NQVNLKQotCi0jZGVmaW5lIENMT0NLX0NPTlRST0xfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAotI2RlZmluZSBDTE9DS19DT05UUk9MX09GRlNFVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKLSNkZWZpbmUgQ0xPQ0tfQ09OVFJPTF9MRl9DTEszMl9NU0IgICAgICAgICAgICAgICAyCi0jZGVmaW5lIENMT0NLX0NPTlRST0xfTEZfQ0xLMzJfTFNCICAgICAgICAgICAgICAgMgotI2RlZmluZSBDTE9DS19DT05UUk9MX0xGX0NMSzMyX01BU0sgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgQ0xPQ0tfQ09OVFJPTF9MRl9DTEszMl9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIENMT0NLX0NPTlRST0xfTEZfQ0xLMzJfTUFTSykgPj4gQ0xPQ0tfQ09OVFJPTF9MRl9DTEszMl9MU0IpCi0jZGVmaW5lIENMT0NLX0NPTlRST0xfTEZfQ0xLMzJfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgQ0xPQ0tfQ09OVFJPTF9MRl9DTEszMl9MU0IpICYgQ0xPQ0tfQ09OVFJPTF9MRl9DTEszMl9NQVNLKQotI2RlZmluZSBDTE9DS19DT05UUk9MX1VBUlRfQ0xLX01TQiAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgQ0xPQ0tfQ09OVFJPTF9VQVJUX0NMS19MU0IgICAgICAgICAgICAgICAxCi0jZGVmaW5lIENMT0NLX0NPTlRST0xfVUFSVF9DTEtfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBDTE9DS19DT05UUk9MX1VBUlRfQ0xLX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgQ0xPQ0tfQ09OVFJPTF9VQVJUX0NMS19NQVNLKSA+PiBDTE9DS19DT05UUk9MX1VBUlRfQ0xLX0xTQikKLSNkZWZpbmUgQ0xPQ0tfQ09OVFJPTF9VQVJUX0NMS19TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBDTE9DS19DT05UUk9MX1VBUlRfQ0xLX0xTQikgJiBDTE9DS19DT05UUk9MX1VBUlRfQ0xLX01BU0spCi0jZGVmaW5lIENMT0NLX0NPTlRST0xfU0kwX0NMS19NU0IgICAgICAgICAgICAgICAgMAotI2RlZmluZSBDTE9DS19DT05UUk9MX1NJMF9DTEtfTFNCICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgQ0xPQ0tfQ09OVFJPTF9TSTBfQ0xLX01BU0sgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIENMT0NLX0NPTlRST0xfU0kwX0NMS19HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBDTE9DS19DT05UUk9MX1NJMF9DTEtfTUFTSykgPj4gQ0xPQ0tfQ09OVFJPTF9TSTBfQ0xLX0xTQikKLSNkZWZpbmUgQ0xPQ0tfQ09OVFJPTF9TSTBfQ0xLX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBDTE9DS19DT05UUk9MX1NJMF9DTEtfTFNCKSAmIENMT0NLX0NPTlRST0xfU0kwX0NMS19NQVNLKQotCi0jZGVmaW5lIEJJQVNfT1ZFUlJJREVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyYwotI2RlZmluZSBCSUFTX09WRVJSSURFX09GRlNFVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMmMKLSNkZWZpbmUgQklBU19PVkVSUklERV9PTl9NU0IgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEJJQVNfT1ZFUlJJREVfT05fTFNCICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBCSUFTX09WRVJSSURFX09OX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgQklBU19PVkVSUklERV9PTl9HRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIEJJQVNfT1ZFUlJJREVfT05fTUFTSykgPj4gQklBU19PVkVSUklERV9PTl9MU0IpCi0jZGVmaW5lIEJJQVNfT1ZFUlJJREVfT05fU0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgQklBU19PVkVSUklERV9PTl9MU0IpICYgQklBU19PVkVSUklERV9PTl9NQVNLKQotCi0jZGVmaW5lIFdEVF9DT05UUk9MX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAotI2RlZmluZSBXRFRfQ09OVFJPTF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKLSNkZWZpbmUgV0RUX0NPTlRST0xfQUNUSU9OX01TQiAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFdEVF9DT05UUk9MX0FDVElPTl9MU0IgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBXRFRfQ09OVFJPTF9BQ1RJT05fTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKLSNkZWZpbmUgV0RUX0NPTlRST0xfQUNUSU9OX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIFdEVF9DT05UUk9MX0FDVElPTl9NQVNLKSA+PiBXRFRfQ09OVFJPTF9BQ1RJT05fTFNCKQotI2RlZmluZSBXRFRfQ09OVFJPTF9BQ1RJT05fU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IFdEVF9DT05UUk9MX0FDVElPTl9MU0IpICYgV0RUX0NPTlRST0xfQUNUSU9OX01BU0spCi0KLSNkZWZpbmUgV0RUX1NUQVRVU19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0Ci0jZGVmaW5lIFdEVF9TVEFUVVNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAotI2RlZmluZSBXRFRfU1RBVFVTX0lOVEVSUlVQVF9NU0IgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0RUX1NUQVRVU19JTlRFUlJVUFRfTFNCICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdEVF9TVEFUVVNfSU5URVJSVVBUX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBXRFRfU1RBVFVTX0lOVEVSUlVQVF9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgV0RUX1NUQVRVU19JTlRFUlJVUFRfTUFTSykgPj4gV0RUX1NUQVRVU19JTlRFUlJVUFRfTFNCKQotI2RlZmluZSBXRFRfU1RBVFVTX0lOVEVSUlVQVF9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFdEVF9TVEFUVVNfSU5URVJSVVBUX0xTQikgJiBXRFRfU1RBVFVTX0lOVEVSUlVQVF9NQVNLKQotCi0jZGVmaW5lIFdEVF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAotI2RlZmluZSBXRFRfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKLSNkZWZpbmUgV0RUX1RBUkdFVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBXRFRfVEFSR0VUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0RUX1RBUkdFVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwM2ZmZmZmCi0jZGVmaW5lIFdEVF9UQVJHRVRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBXRFRfVEFSR0VUX01BU0spID4+IFdEVF9UQVJHRVRfTFNCKQotI2RlZmluZSBXRFRfVEFSR0VUX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFdEVF9UQVJHRVRfTFNCKSAmIFdEVF9UQVJHRVRfTUFTSykKLQotI2RlZmluZSBXRFRfQ09VTlRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM2MKLSNkZWZpbmUgV0RUX0NPVU5UX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNjCi0jZGVmaW5lIFdEVF9DT1VOVF9WQUxVRV9NU0IgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgV0RUX0NPVU5UX1ZBTFVFX0xTQiAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdEVF9DT1VOVF9WQUxVRV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDNmZmZmZgotI2RlZmluZSBXRFRfQ09VTlRfVkFMVUVfR0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgV0RUX0NPVU5UX1ZBTFVFX01BU0spID4+IFdEVF9DT1VOVF9WQUxVRV9MU0IpCi0jZGVmaW5lIFdEVF9DT1VOVF9WQUxVRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgV0RUX0NPVU5UX1ZBTFVFX0xTQikgJiBXRFRfQ09VTlRfVkFMVUVfTUFTSykKLQotI2RlZmluZSBXRFRfUkVTRVRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgV0RUX1JFU0VUX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIFdEVF9SRVNFVF9WQUxVRV9NU0IgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBXRFRfUkVTRVRfVkFMVUVfTFNCICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0RUX1JFU0VUX1ZBTFVFX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFdEVF9SRVNFVF9WQUxVRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBXRFRfUkVTRVRfVkFMVUVfTUFTSykgPj4gV0RUX1JFU0VUX1ZBTFVFX0xTQikKLSNkZWZpbmUgV0RUX1JFU0VUX1ZBTFVFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBXRFRfUkVTRVRfVkFMVUVfTFNCKSAmIFdEVF9SRVNFVF9WQUxVRV9NQVNLKQotCi0jZGVmaW5lIElOVF9TVEFUVVNfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0NAotI2RlZmluZSBJTlRfU1RBVFVTX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDQKLSNkZWZpbmUgSU5UX1NUQVRVU19SVENfUE9XRVJfTVNCICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBJTlRfU1RBVFVTX1JUQ19QT1dFUl9MU0IgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIElOVF9TVEFUVVNfUlRDX1BPV0VSX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAotI2RlZmluZSBJTlRfU1RBVFVTX1JUQ19QT1dFUl9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgSU5UX1NUQVRVU19SVENfUE9XRVJfTUFTSykgPj4gSU5UX1NUQVRVU19SVENfUE9XRVJfTFNCKQotI2RlZmluZSBJTlRfU1RBVFVTX1JUQ19QT1dFUl9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IElOVF9TVEFUVVNfUlRDX1BPV0VSX0xTQikgJiBJTlRfU1RBVFVTX1JUQ19QT1dFUl9NQVNLKQotI2RlZmluZSBJTlRfU1RBVFVTX01BQ19NU0IgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIElOVF9TVEFUVVNfTUFDX0xTQiAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgSU5UX1NUQVRVU19NQUNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCi0jZGVmaW5lIElOVF9TVEFUVVNfTUFDX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBJTlRfU1RBVFVTX01BQ19NQVNLKSA+PiBJTlRfU1RBVFVTX01BQ19MU0IpCi0jZGVmaW5lIElOVF9TVEFUVVNfTUFDX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgSU5UX1NUQVRVU19NQUNfTFNCKSAmIElOVF9TVEFUVVNfTUFDX01BU0spCi0jZGVmaW5lIElOVF9TVEFUVVNfTUFJTEJPWF9NU0IgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgSU5UX1NUQVRVU19NQUlMQk9YX0xTQiAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBJTlRfU1RBVFVTX01BSUxCT1hfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKLSNkZWZpbmUgSU5UX1NUQVRVU19NQUlMQk9YX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIElOVF9TVEFUVVNfTUFJTEJPWF9NQVNLKSA+PiBJTlRfU1RBVFVTX01BSUxCT1hfTFNCKQotI2RlZmluZSBJTlRfU1RBVFVTX01BSUxCT1hfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IElOVF9TVEFUVVNfTUFJTEJPWF9MU0IpICYgSU5UX1NUQVRVU19NQUlMQk9YX01BU0spCi0jZGVmaW5lIElOVF9TVEFUVVNfUlRDX0FMQVJNX01TQiAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgSU5UX1NUQVRVU19SVENfQUxBUk1fTFNCICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBJTlRfU1RBVFVTX1JUQ19BTEFSTV9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKLSNkZWZpbmUgSU5UX1NUQVRVU19SVENfQUxBUk1fR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIElOVF9TVEFUVVNfUlRDX0FMQVJNX01BU0spID4+IElOVF9TVEFUVVNfUlRDX0FMQVJNX0xTQikKLSNkZWZpbmUgSU5UX1NUQVRVU19SVENfQUxBUk1fU0VUKHgpICAgICAgICAgICAgICAoKCh4KSA8PCBJTlRfU1RBVFVTX1JUQ19BTEFSTV9MU0IpICYgSU5UX1NUQVRVU19SVENfQUxBUk1fTUFTSykKLSNkZWZpbmUgSU5UX1NUQVRVU19IRl9USU1FUl9NU0IgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBJTlRfU1RBVFVTX0hGX1RJTUVSX0xTQiAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIElOVF9TVEFUVVNfSEZfVElNRVJfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBJTlRfU1RBVFVTX0hGX1RJTUVSX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgSU5UX1NUQVRVU19IRl9USU1FUl9NQVNLKSA+PiBJTlRfU1RBVFVTX0hGX1RJTUVSX0xTQikKLSNkZWZpbmUgSU5UX1NUQVRVU19IRl9USU1FUl9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBJTlRfU1RBVFVTX0hGX1RJTUVSX0xTQikgJiBJTlRfU1RBVFVTX0hGX1RJTUVSX01BU0spCi0jZGVmaW5lIElOVF9TVEFUVVNfTEZfVElNRVIzX01TQiAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBJTlRfU1RBVFVTX0xGX1RJTUVSM19MU0IgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgSU5UX1NUQVRVU19MRl9USU1FUjNfTUFTSyAgICAgICAgICAgICAgICAweDAwMDAwMjAwCi0jZGVmaW5lIElOVF9TVEFUVVNfTEZfVElNRVIzX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiBJTlRfU1RBVFVTX0xGX1RJTUVSM19NQVNLKSA+PiBJTlRfU1RBVFVTX0xGX1RJTUVSM19MU0IpCi0jZGVmaW5lIElOVF9TVEFUVVNfTEZfVElNRVIzX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgSU5UX1NUQVRVU19MRl9USU1FUjNfTFNCKSAmIElOVF9TVEFUVVNfTEZfVElNRVIzX01BU0spCi0jZGVmaW5lIElOVF9TVEFUVVNfTEZfVElNRVIyX01TQiAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBJTlRfU1RBVFVTX0xGX1RJTUVSMl9MU0IgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgSU5UX1NUQVRVU19MRl9USU1FUjJfTUFTSyAgICAgICAgICAgICAgICAweDAwMDAwMTAwCi0jZGVmaW5lIElOVF9TVEFUVVNfTEZfVElNRVIyX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiBJTlRfU1RBVFVTX0xGX1RJTUVSMl9NQVNLKSA+PiBJTlRfU1RBVFVTX0xGX1RJTUVSMl9MU0IpCi0jZGVmaW5lIElOVF9TVEFUVVNfTEZfVElNRVIyX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgSU5UX1NUQVRVU19MRl9USU1FUjJfTFNCKSAmIElOVF9TVEFUVVNfTEZfVElNRVIyX01BU0spCi0jZGVmaW5lIElOVF9TVEFUVVNfTEZfVElNRVIxX01TQiAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBJTlRfU1RBVFVTX0xGX1RJTUVSMV9MU0IgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgSU5UX1NUQVRVU19MRl9USU1FUjFfTUFTSyAgICAgICAgICAgICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIElOVF9TVEFUVVNfTEZfVElNRVIxX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiBJTlRfU1RBVFVTX0xGX1RJTUVSMV9NQVNLKSA+PiBJTlRfU1RBVFVTX0xGX1RJTUVSMV9MU0IpCi0jZGVmaW5lIElOVF9TVEFUVVNfTEZfVElNRVIxX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgSU5UX1NUQVRVU19MRl9USU1FUjFfTFNCKSAmIElOVF9TVEFUVVNfTEZfVElNRVIxX01BU0spCi0jZGVmaW5lIElOVF9TVEFUVVNfTEZfVElNRVIwX01TQiAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBJTlRfU1RBVFVTX0xGX1RJTUVSMF9MU0IgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgSU5UX1NUQVRVU19MRl9USU1FUjBfTUFTSyAgICAgICAgICAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIElOVF9TVEFUVVNfTEZfVElNRVIwX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiBJTlRfU1RBVFVTX0xGX1RJTUVSMF9NQVNLKSA+PiBJTlRfU1RBVFVTX0xGX1RJTUVSMF9MU0IpCi0jZGVmaW5lIElOVF9TVEFUVVNfTEZfVElNRVIwX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgSU5UX1NUQVRVU19MRl9USU1FUjBfTFNCKSAmIElOVF9TVEFUVVNfTEZfVElNRVIwX01BU0spCi0jZGVmaW5lIElOVF9TVEFUVVNfS0VZUEFEX01TQiAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBJTlRfU1RBVFVTX0tFWVBBRF9MU0IgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgSU5UX1NUQVRVU19LRVlQQURfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIElOVF9TVEFUVVNfS0VZUEFEX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBJTlRfU1RBVFVTX0tFWVBBRF9NQVNLKSA+PiBJTlRfU1RBVFVTX0tFWVBBRF9MU0IpCi0jZGVmaW5lIElOVF9TVEFUVVNfS0VZUEFEX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgSU5UX1NUQVRVU19LRVlQQURfTFNCKSAmIElOVF9TVEFUVVNfS0VZUEFEX01BU0spCi0jZGVmaW5lIElOVF9TVEFUVVNfU0lfTVNCICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBJTlRfU1RBVFVTX1NJX0xTQiAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgSU5UX1NUQVRVU19TSV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIElOVF9TVEFUVVNfU0lfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBJTlRfU1RBVFVTX1NJX01BU0spID4+IElOVF9TVEFUVVNfU0lfTFNCKQotI2RlZmluZSBJTlRfU1RBVFVTX1NJX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IElOVF9TVEFUVVNfU0lfTFNCKSAmIElOVF9TVEFUVVNfU0lfTUFTSykKLSNkZWZpbmUgSU5UX1NUQVRVU19HUElPX01TQiAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIElOVF9TVEFUVVNfR1BJT19MU0IgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBJTlRfU1RBVFVTX0dQSU9fTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgSU5UX1NUQVRVU19HUElPX0dFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIElOVF9TVEFUVVNfR1BJT19NQVNLKSA+PiBJTlRfU1RBVFVTX0dQSU9fTFNCKQotI2RlZmluZSBJTlRfU1RBVFVTX0dQSU9fU0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IElOVF9TVEFUVVNfR1BJT19MU0IpICYgSU5UX1NUQVRVU19HUElPX01BU0spCi0jZGVmaW5lIElOVF9TVEFUVVNfVUFSVF9NU0IgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBJTlRfU1RBVFVTX1VBUlRfTFNCICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgSU5UX1NUQVRVU19VQVJUX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIElOVF9TVEFUVVNfVUFSVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBJTlRfU1RBVFVTX1VBUlRfTUFTSykgPj4gSU5UX1NUQVRVU19VQVJUX0xTQikKLSNkZWZpbmUgSU5UX1NUQVRVU19VQVJUX1NFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBJTlRfU1RBVFVTX1VBUlRfTFNCKSAmIElOVF9TVEFUVVNfVUFSVF9NQVNLKQotI2RlZmluZSBJTlRfU1RBVFVTX0VSUk9SX01TQiAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgSU5UX1NUQVRVU19FUlJPUl9MU0IgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIElOVF9TVEFUVVNfRVJST1JfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBJTlRfU1RBVFVTX0VSUk9SX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgSU5UX1NUQVRVU19FUlJPUl9NQVNLKSA+PiBJTlRfU1RBVFVTX0VSUk9SX0xTQikKLSNkZWZpbmUgSU5UX1NUQVRVU19FUlJPUl9TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBJTlRfU1RBVFVTX0VSUk9SX0xTQikgJiBJTlRfU1RBVFVTX0VSUk9SX01BU0spCi0jZGVmaW5lIElOVF9TVEFUVVNfV0RUX0lOVF9NU0IgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBJTlRfU1RBVFVTX1dEVF9JTlRfTFNCICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgSU5UX1NUQVRVU19XRFRfSU5UX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIElOVF9TVEFUVVNfV0RUX0lOVF9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiBJTlRfU1RBVFVTX1dEVF9JTlRfTUFTSykgPj4gSU5UX1NUQVRVU19XRFRfSU5UX0xTQikKLSNkZWZpbmUgSU5UX1NUQVRVU19XRFRfSU5UX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCBJTlRfU1RBVFVTX1dEVF9JTlRfTFNCKSAmIElOVF9TVEFUVVNfV0RUX0lOVF9NQVNLKQotCi0jZGVmaW5lIExGX1RJTUVSMF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0OAotI2RlZmluZSBMRl9USU1FUjBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDgKLSNkZWZpbmUgTEZfVElNRVIwX1RBUkdFVF9NU0IgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBMRl9USU1FUjBfVEFSR0VUX0xTQiAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTEZfVElNRVIwX1RBUkdFVF9NQVNLICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIExGX1RJTUVSMF9UQVJHRVRfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiBMRl9USU1FUjBfVEFSR0VUX01BU0spID4+IExGX1RJTUVSMF9UQVJHRVRfTFNCKQotI2RlZmluZSBMRl9USU1FUjBfVEFSR0VUX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IExGX1RJTUVSMF9UQVJHRVRfTFNCKSAmIExGX1RJTUVSMF9UQVJHRVRfTUFTSykKLQotI2RlZmluZSBMRl9USU1FUl9DT1VOVDBfQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNGMKLSNkZWZpbmUgTEZfVElNRVJfQ09VTlQwX09GRlNFVCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDRjCi0jZGVmaW5lIExGX1RJTUVSX0NPVU5UMF9WQUxVRV9NU0IgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgTEZfVElNRVJfQ09VTlQwX1ZBTFVFX0xTQiAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIExGX1RJTUVSX0NPVU5UMF9WQUxVRV9NQVNLICAgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBMRl9USU1FUl9DT1VOVDBfVkFMVUVfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgTEZfVElNRVJfQ09VTlQwX1ZBTFVFX01BU0spID4+IExGX1RJTUVSX0NPVU5UMF9WQUxVRV9MU0IpCi0jZGVmaW5lIExGX1RJTUVSX0NPVU5UMF9WQUxVRV9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgTEZfVElNRVJfQ09VTlQwX1ZBTFVFX0xTQikgJiBMRl9USU1FUl9DT1VOVDBfVkFMVUVfTUFTSykKLQotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMF9BRERSRVNTICAgICAgICAgICAgICAgIDB4MDAwMDAwNTAKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDBfT0ZGU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMDUwCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wwX0VOQUJMRV9NU0IgICAgICAgICAgICAgMgotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMF9FTkFCTEVfTFNCICAgICAgICAgICAgIDIKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDBfRU5BQkxFX01BU0sgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wwX0VOQUJMRV9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBMRl9USU1FUl9DT05UUk9MMF9FTkFCTEVfTUFTSykgPj4gTEZfVElNRVJfQ09OVFJPTDBfRU5BQkxFX0xTQikKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDBfRU5BQkxFX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBMRl9USU1FUl9DT05UUk9MMF9FTkFCTEVfTFNCKSAmIExGX1RJTUVSX0NPTlRST0wwX0VOQUJMRV9NQVNLKQotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMF9BVVRPX1JFU1RBUlRfTVNCICAgICAgIDEKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDBfQVVUT19SRVNUQVJUX0xTQiAgICAgICAxCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wwX0FVVE9fUkVTVEFSVF9NQVNLICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMF9BVVRPX1JFU1RBUlRfR0VUKHgpICAgICgoKHgpICYgTEZfVElNRVJfQ09OVFJPTDBfQVVUT19SRVNUQVJUX01BU0spID4+IExGX1RJTUVSX0NPTlRST0wwX0FVVE9fUkVTVEFSVF9MU0IpCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wwX0FVVE9fUkVTVEFSVF9TRVQoeCkgICAgKCgoeCkgPDwgTEZfVElNRVJfQ09OVFJPTDBfQVVUT19SRVNUQVJUX0xTQikgJiBMRl9USU1FUl9DT05UUk9MMF9BVVRPX1JFU1RBUlRfTUFTSykKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDBfUkVTRVRfTVNCICAgICAgICAgICAgICAwCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wwX1JFU0VUX0xTQiAgICAgICAgICAgICAgMAotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMF9SRVNFVF9NQVNLICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDBfUkVTRVRfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIExGX1RJTUVSX0NPTlRST0wwX1JFU0VUX01BU0spID4+IExGX1RJTUVSX0NPTlRST0wwX1JFU0VUX0xTQikKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDBfUkVTRVRfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCBMRl9USU1FUl9DT05UUk9MMF9SRVNFVF9MU0IpICYgTEZfVElNRVJfQ09OVFJPTDBfUkVTRVRfTUFTSykKLQotI2RlZmluZSBMRl9USU1FUl9TVEFUVVMwX0FERFJFU1MgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTQKLSNkZWZpbmUgTEZfVElNRVJfU1RBVFVTMF9PRkZTRVQgICAgICAgICAgICAgICAgICAweDAwMDAwMDU0Ci0jZGVmaW5lIExGX1RJTUVSX1NUQVRVUzBfSU5URVJSVVBUX01TQiAgICAgICAgICAgMAotI2RlZmluZSBMRl9USU1FUl9TVEFUVVMwX0lOVEVSUlVQVF9MU0IgICAgICAgICAgIDAKLSNkZWZpbmUgTEZfVElNRVJfU1RBVFVTMF9JTlRFUlJVUFRfTUFTSyAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIExGX1RJTUVSX1NUQVRVUzBfSU5URVJSVVBUX0dFVCh4KSAgICAgICAgKCgoeCkgJiBMRl9USU1FUl9TVEFUVVMwX0lOVEVSUlVQVF9NQVNLKSA+PiBMRl9USU1FUl9TVEFUVVMwX0lOVEVSUlVQVF9MU0IpCi0jZGVmaW5lIExGX1RJTUVSX1NUQVRVUzBfSU5URVJSVVBUX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgTEZfVElNRVJfU1RBVFVTMF9JTlRFUlJVUFRfTFNCKSAmIExGX1RJTUVSX1NUQVRVUzBfSU5URVJSVVBUX01BU0spCi0KLSNkZWZpbmUgTEZfVElNRVIxX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU4Ci0jZGVmaW5lIExGX1RJTUVSMV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1OAotI2RlZmluZSBMRl9USU1FUjFfVEFSR0VUX01TQiAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIExGX1RJTUVSMV9UQVJHRVRfTFNCICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBMRl9USU1FUjFfVEFSR0VUX01BU0sgICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgTEZfVElNRVIxX1RBUkdFVF9HRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIExGX1RJTUVSMV9UQVJHRVRfTUFTSykgPj4gTEZfVElNRVIxX1RBUkdFVF9MU0IpCi0jZGVmaW5lIExGX1RJTUVSMV9UQVJHRVRfU0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgTEZfVElNRVIxX1RBUkdFVF9MU0IpICYgTEZfVElNRVIxX1RBUkdFVF9NQVNLKQotCi0jZGVmaW5lIExGX1RJTUVSX0NPVU5UMV9BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1YwotI2RlZmluZSBMRl9USU1FUl9DT1VOVDFfT0ZGU0VUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNWMKLSNkZWZpbmUgTEZfVElNRVJfQ09VTlQxX1ZBTFVFX01TQiAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBMRl9USU1FUl9DT1VOVDFfVkFMVUVfTFNCICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTEZfVElNRVJfQ09VTlQxX1ZBTFVFX01BU0sgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIExGX1RJTUVSX0NPVU5UMV9WQUxVRV9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBMRl9USU1FUl9DT1VOVDFfVkFMVUVfTUFTSykgPj4gTEZfVElNRVJfQ09VTlQxX1ZBTFVFX0xTQikKLSNkZWZpbmUgTEZfVElNRVJfQ09VTlQxX1ZBTFVFX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBMRl9USU1FUl9DT1VOVDFfVkFMVUVfTFNCKSAmIExGX1RJTUVSX0NPVU5UMV9WQUxVRV9NQVNLKQotCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wxX0FERFJFU1MgICAgICAgICAgICAgICAgMHgwMDAwMDA2MAotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMV9PRkZTRVQgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjAKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDFfRU5BQkxFX01TQiAgICAgICAgICAgICAyCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wxX0VOQUJMRV9MU0IgICAgICAgICAgICAgMgotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMV9FTkFCTEVfTUFTSyAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDFfRU5BQkxFX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIExGX1RJTUVSX0NPTlRST0wxX0VOQUJMRV9NQVNLKSA+PiBMRl9USU1FUl9DT05UUk9MMV9FTkFCTEVfTFNCKQotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMV9FTkFCTEVfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IExGX1RJTUVSX0NPTlRST0wxX0VOQUJMRV9MU0IpICYgTEZfVElNRVJfQ09OVFJPTDFfRU5BQkxFX01BU0spCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wxX0FVVE9fUkVTVEFSVF9NU0IgICAgICAgMQotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMV9BVVRPX1JFU1RBUlRfTFNCICAgICAgIDEKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDFfQVVUT19SRVNUQVJUX01BU0sgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wxX0FVVE9fUkVTVEFSVF9HRVQoeCkgICAgKCgoeCkgJiBMRl9USU1FUl9DT05UUk9MMV9BVVRPX1JFU1RBUlRfTUFTSykgPj4gTEZfVElNRVJfQ09OVFJPTDFfQVVUT19SRVNUQVJUX0xTQikKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDFfQVVUT19SRVNUQVJUX1NFVCh4KSAgICAoKCh4KSA8PCBMRl9USU1FUl9DT05UUk9MMV9BVVRPX1JFU1RBUlRfTFNCKSAmIExGX1RJTUVSX0NPTlRST0wxX0FVVE9fUkVTVEFSVF9NQVNLKQotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMV9SRVNFVF9NU0IgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDFfUkVTRVRfTFNCICAgICAgICAgICAgICAwCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wxX1JFU0VUX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMV9SRVNFVF9HRVQoeCkgICAgICAgICAgICgoKHgpICYgTEZfVElNRVJfQ09OVFJPTDFfUkVTRVRfTUFTSykgPj4gTEZfVElNRVJfQ09OVFJPTDFfUkVTRVRfTFNCKQotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMV9SRVNFVF9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IExGX1RJTUVSX0NPTlRST0wxX1JFU0VUX0xTQikgJiBMRl9USU1FUl9DT05UUk9MMV9SRVNFVF9NQVNLKQotCi0jZGVmaW5lIExGX1RJTUVSX1NUQVRVUzFfQUREUkVTUyAgICAgICAgICAgICAgICAgMHgwMDAwMDA2NAotI2RlZmluZSBMRl9USU1FUl9TVEFUVVMxX09GRlNFVCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjQKLSNkZWZpbmUgTEZfVElNRVJfU1RBVFVTMV9JTlRFUlJVUFRfTVNCICAgICAgICAgICAwCi0jZGVmaW5lIExGX1RJTUVSX1NUQVRVUzFfSU5URVJSVVBUX0xTQiAgICAgICAgICAgMAotI2RlZmluZSBMRl9USU1FUl9TVEFUVVMxX0lOVEVSUlVQVF9NQVNLICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgTEZfVElNRVJfU1RBVFVTMV9JTlRFUlJVUFRfR0VUKHgpICAgICAgICAoKCh4KSAmIExGX1RJTUVSX1NUQVRVUzFfSU5URVJSVVBUX01BU0spID4+IExGX1RJTUVSX1NUQVRVUzFfSU5URVJSVVBUX0xTQikKLSNkZWZpbmUgTEZfVElNRVJfU1RBVFVTMV9JTlRFUlJVUFRfU0VUKHgpICAgICAgICAoKCh4KSA8PCBMRl9USU1FUl9TVEFUVVMxX0lOVEVSUlVQVF9MU0IpICYgTEZfVElNRVJfU1RBVFVTMV9JTlRFUlJVUFRfTUFTSykKLQotI2RlZmluZSBMRl9USU1FUjJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjgKLSNkZWZpbmUgTEZfVElNRVIyX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY4Ci0jZGVmaW5lIExGX1RJTUVSMl9UQVJHRVRfTVNCICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgTEZfVElNRVIyX1RBUkdFVF9MU0IgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIExGX1RJTUVSMl9UQVJHRVRfTUFTSyAgICAgICAgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBMRl9USU1FUjJfVEFSR0VUX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgTEZfVElNRVIyX1RBUkdFVF9NQVNLKSA+PiBMRl9USU1FUjJfVEFSR0VUX0xTQikKLSNkZWZpbmUgTEZfVElNRVIyX1RBUkdFVF9TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBMRl9USU1FUjJfVEFSR0VUX0xTQikgJiBMRl9USU1FUjJfVEFSR0VUX01BU0spCi0KLSNkZWZpbmUgTEZfVElNRVJfQ09VTlQyX0FERFJFU1MgICAgICAgICAgICAgICAgICAweDAwMDAwMDZjCi0jZGVmaW5lIExGX1RJTUVSX0NPVU5UMl9PRkZTRVQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2YwotI2RlZmluZSBMRl9USU1FUl9DT1VOVDJfVkFMVUVfTVNCICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIExGX1RJTUVSX0NPVU5UMl9WQUxVRV9MU0IgICAgICAgICAgICAgICAgMAotI2RlZmluZSBMRl9USU1FUl9DT1VOVDJfVkFMVUVfTUFTSyAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgTEZfVElNRVJfQ09VTlQyX1ZBTFVFX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIExGX1RJTUVSX0NPVU5UMl9WQUxVRV9NQVNLKSA+PiBMRl9USU1FUl9DT1VOVDJfVkFMVUVfTFNCKQotI2RlZmluZSBMRl9USU1FUl9DT1VOVDJfVkFMVUVfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IExGX1RJTUVSX0NPVU5UMl9WQUxVRV9MU0IpICYgTEZfVElNRVJfQ09VTlQyX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDJfQUREUkVTUyAgICAgICAgICAgICAgICAweDAwMDAwMDcwCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wyX09GRlNFVCAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MAotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMl9FTkFCTEVfTVNCICAgICAgICAgICAgIDIKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDJfRU5BQkxFX0xTQiAgICAgICAgICAgICAyCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wyX0VOQUJMRV9NQVNLICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMl9FTkFCTEVfR0VUKHgpICAgICAgICAgICgoKHgpICYgTEZfVElNRVJfQ09OVFJPTDJfRU5BQkxFX01BU0spID4+IExGX1RJTUVSX0NPTlRST0wyX0VOQUJMRV9MU0IpCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wyX0VOQUJMRV9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgTEZfVElNRVJfQ09OVFJPTDJfRU5BQkxFX0xTQikgJiBMRl9USU1FUl9DT05UUk9MMl9FTkFCTEVfTUFTSykKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDJfQVVUT19SRVNUQVJUX01TQiAgICAgICAxCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wyX0FVVE9fUkVTVEFSVF9MU0IgICAgICAgMQotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMl9BVVRPX1JFU1RBUlRfTUFTSyAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDJfQVVUT19SRVNUQVJUX0dFVCh4KSAgICAoKCh4KSAmIExGX1RJTUVSX0NPTlRST0wyX0FVVE9fUkVTVEFSVF9NQVNLKSA+PiBMRl9USU1FUl9DT05UUk9MMl9BVVRPX1JFU1RBUlRfTFNCKQotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMl9BVVRPX1JFU1RBUlRfU0VUKHgpICAgICgoKHgpIDw8IExGX1RJTUVSX0NPTlRST0wyX0FVVE9fUkVTVEFSVF9MU0IpICYgTEZfVElNRVJfQ09OVFJPTDJfQVVUT19SRVNUQVJUX01BU0spCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wyX1JFU0VUX01TQiAgICAgICAgICAgICAgMAotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMl9SRVNFVF9MU0IgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDJfUkVTRVRfTUFTSyAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wyX1JFU0VUX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBMRl9USU1FUl9DT05UUk9MMl9SRVNFVF9NQVNLKSA+PiBMRl9USU1FUl9DT05UUk9MMl9SRVNFVF9MU0IpCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wyX1JFU0VUX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgTEZfVElNRVJfQ09OVFJPTDJfUkVTRVRfTFNCKSAmIExGX1RJTUVSX0NPTlRST0wyX1JFU0VUX01BU0spCi0KLSNkZWZpbmUgTEZfVElNRVJfU1RBVFVTMl9BRERSRVNTICAgICAgICAgICAgICAgICAweDAwMDAwMDc0Ci0jZGVmaW5lIExGX1RJTUVSX1NUQVRVUzJfT0ZGU0VUICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3NAotI2RlZmluZSBMRl9USU1FUl9TVEFUVVMyX0lOVEVSUlVQVF9NU0IgICAgICAgICAgIDAKLSNkZWZpbmUgTEZfVElNRVJfU1RBVFVTMl9JTlRFUlJVUFRfTFNCICAgICAgICAgICAwCi0jZGVmaW5lIExGX1RJTUVSX1NUQVRVUzJfSU5URVJSVVBUX01BU0sgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBMRl9USU1FUl9TVEFUVVMyX0lOVEVSUlVQVF9HRVQoeCkgICAgICAgICgoKHgpICYgTEZfVElNRVJfU1RBVFVTMl9JTlRFUlJVUFRfTUFTSykgPj4gTEZfVElNRVJfU1RBVFVTMl9JTlRFUlJVUFRfTFNCKQotI2RlZmluZSBMRl9USU1FUl9TVEFUVVMyX0lOVEVSUlVQVF9TRVQoeCkgICAgICAgICgoKHgpIDw8IExGX1RJTUVSX1NUQVRVUzJfSU5URVJSVVBUX0xTQikgJiBMRl9USU1FUl9TVEFUVVMyX0lOVEVSUlVQVF9NQVNLKQotCi0jZGVmaW5lIExGX1RJTUVSM19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3OAotI2RlZmluZSBMRl9USU1FUjNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzgKLSNkZWZpbmUgTEZfVElNRVIzX1RBUkdFVF9NU0IgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBMRl9USU1FUjNfVEFSR0VUX0xTQiAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTEZfVElNRVIzX1RBUkdFVF9NQVNLICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIExGX1RJTUVSM19UQVJHRVRfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiBMRl9USU1FUjNfVEFSR0VUX01BU0spID4+IExGX1RJTUVSM19UQVJHRVRfTFNCKQotI2RlZmluZSBMRl9USU1FUjNfVEFSR0VUX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IExGX1RJTUVSM19UQVJHRVRfTFNCKSAmIExGX1RJTUVSM19UQVJHRVRfTUFTSykKLQotI2RlZmluZSBMRl9USU1FUl9DT1VOVDNfQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN2MKLSNkZWZpbmUgTEZfVElNRVJfQ09VTlQzX09GRlNFVCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdjCi0jZGVmaW5lIExGX1RJTUVSX0NPVU5UM19WQUxVRV9NU0IgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgTEZfVElNRVJfQ09VTlQzX1ZBTFVFX0xTQiAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIExGX1RJTUVSX0NPVU5UM19WQUxVRV9NQVNLICAgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBMRl9USU1FUl9DT1VOVDNfVkFMVUVfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgTEZfVElNRVJfQ09VTlQzX1ZBTFVFX01BU0spID4+IExGX1RJTUVSX0NPVU5UM19WQUxVRV9MU0IpCi0jZGVmaW5lIExGX1RJTUVSX0NPVU5UM19WQUxVRV9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgTEZfVElNRVJfQ09VTlQzX1ZBTFVFX0xTQikgJiBMRl9USU1FUl9DT1VOVDNfVkFMVUVfTUFTSykKLQotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MM19BRERSRVNTICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDNfT0ZGU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wzX0VOQUJMRV9NU0IgICAgICAgICAgICAgMgotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MM19FTkFCTEVfTFNCICAgICAgICAgICAgIDIKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDNfRU5BQkxFX01BU0sgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wzX0VOQUJMRV9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBMRl9USU1FUl9DT05UUk9MM19FTkFCTEVfTUFTSykgPj4gTEZfVElNRVJfQ09OVFJPTDNfRU5BQkxFX0xTQikKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDNfRU5BQkxFX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBMRl9USU1FUl9DT05UUk9MM19FTkFCTEVfTFNCKSAmIExGX1RJTUVSX0NPTlRST0wzX0VOQUJMRV9NQVNLKQotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MM19BVVRPX1JFU1RBUlRfTVNCICAgICAgIDEKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDNfQVVUT19SRVNUQVJUX0xTQiAgICAgICAxCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wzX0FVVE9fUkVTVEFSVF9NQVNLICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MM19BVVRPX1JFU1RBUlRfR0VUKHgpICAgICgoKHgpICYgTEZfVElNRVJfQ09OVFJPTDNfQVVUT19SRVNUQVJUX01BU0spID4+IExGX1RJTUVSX0NPTlRST0wzX0FVVE9fUkVTVEFSVF9MU0IpCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wzX0FVVE9fUkVTVEFSVF9TRVQoeCkgICAgKCgoeCkgPDwgTEZfVElNRVJfQ09OVFJPTDNfQVVUT19SRVNUQVJUX0xTQikgJiBMRl9USU1FUl9DT05UUk9MM19BVVRPX1JFU1RBUlRfTUFTSykKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDNfUkVTRVRfTVNCICAgICAgICAgICAgICAwCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wzX1JFU0VUX0xTQiAgICAgICAgICAgICAgMAotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MM19SRVNFVF9NQVNLICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDNfUkVTRVRfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIExGX1RJTUVSX0NPTlRST0wzX1JFU0VUX01BU0spID4+IExGX1RJTUVSX0NPTlRST0wzX1JFU0VUX0xTQikKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDNfUkVTRVRfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCBMRl9USU1FUl9DT05UUk9MM19SRVNFVF9MU0IpICYgTEZfVElNRVJfQ09OVFJPTDNfUkVTRVRfTUFTSykKLQotI2RlZmluZSBMRl9USU1FUl9TVEFUVVMzX0FERFJFU1MgICAgICAgICAgICAgICAgIDB4MDAwMDAwODQKLSNkZWZpbmUgTEZfVElNRVJfU1RBVFVTM19PRkZTRVQgICAgICAgICAgICAgICAgICAweDAwMDAwMDg0Ci0jZGVmaW5lIExGX1RJTUVSX1NUQVRVUzNfSU5URVJSVVBUX01TQiAgICAgICAgICAgMAotI2RlZmluZSBMRl9USU1FUl9TVEFUVVMzX0lOVEVSUlVQVF9MU0IgICAgICAgICAgIDAKLSNkZWZpbmUgTEZfVElNRVJfU1RBVFVTM19JTlRFUlJVUFRfTUFTSyAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIExGX1RJTUVSX1NUQVRVUzNfSU5URVJSVVBUX0dFVCh4KSAgICAgICAgKCgoeCkgJiBMRl9USU1FUl9TVEFUVVMzX0lOVEVSUlVQVF9NQVNLKSA+PiBMRl9USU1FUl9TVEFUVVMzX0lOVEVSUlVQVF9MU0IpCi0jZGVmaW5lIExGX1RJTUVSX1NUQVRVUzNfSU5URVJSVVBUX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgTEZfVElNRVJfU1RBVFVTM19JTlRFUlJVUFRfTFNCKSAmIExGX1RJTUVSX1NUQVRVUzNfSU5URVJSVVBUX01BU0spCi0KLSNkZWZpbmUgSEZfVElNRVJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDg4Ci0jZGVmaW5lIEhGX1RJTUVSX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4OAotI2RlZmluZSBIRl9USU1FUl9UQVJHRVRfTVNCICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIEhGX1RJTUVSX1RBUkdFVF9MU0IgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgSEZfVElNRVJfVEFSR0VUX01BU0sgICAgICAgICAgICAgICAgICAgICAweGZmZmZmMDAwCi0jZGVmaW5lIEhGX1RJTUVSX1RBUkdFVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBIRl9USU1FUl9UQVJHRVRfTUFTSykgPj4gSEZfVElNRVJfVEFSR0VUX0xTQikKLSNkZWZpbmUgSEZfVElNRVJfVEFSR0VUX1NFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBIRl9USU1FUl9UQVJHRVRfTFNCKSAmIEhGX1RJTUVSX1RBUkdFVF9NQVNLKQotCi0jZGVmaW5lIEhGX1RJTUVSX0NPVU5UX0FERFJFU1MgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4YwotI2RlZmluZSBIRl9USU1FUl9DT1VOVF9PRkZTRVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwOGMKLSNkZWZpbmUgSEZfVElNRVJfQ09VTlRfVkFMVUVfTVNCICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBIRl9USU1FUl9DT1VOVF9WQUxVRV9MU0IgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIEhGX1RJTUVSX0NPVU5UX1ZBTFVFX01BU0sgICAgICAgICAgICAgICAgMHhmZmZmZjAwMAotI2RlZmluZSBIRl9USU1FUl9DT1VOVF9WQUxVRV9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgSEZfVElNRVJfQ09VTlRfVkFMVUVfTUFTSykgPj4gSEZfVElNRVJfQ09VTlRfVkFMVUVfTFNCKQotI2RlZmluZSBIRl9USU1FUl9DT1VOVF9WQUxVRV9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IEhGX1RJTUVSX0NPVU5UX1ZBTFVFX0xTQikgJiBIRl9USU1FUl9DT1VOVF9WQUxVRV9NQVNLKQotCi0jZGVmaW5lIEhGX0xGX0NPVU5UX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA5MAotI2RlZmluZSBIRl9MRl9DT1VOVF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwOTAKLSNkZWZpbmUgSEZfTEZfQ09VTlRfVkFMVUVfTVNCICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBIRl9MRl9DT1VOVF9WQUxVRV9MU0IgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgSEZfTEZfQ09VTlRfVkFMVUVfTUFTSyAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIEhGX0xGX0NPVU5UX1ZBTFVFX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBIRl9MRl9DT1VOVF9WQUxVRV9NQVNLKSA+PiBIRl9MRl9DT1VOVF9WQUxVRV9MU0IpCi0jZGVmaW5lIEhGX0xGX0NPVU5UX1ZBTFVFX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgSEZfTEZfQ09VTlRfVkFMVUVfTFNCKSAmIEhGX0xGX0NPVU5UX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgSEZfVElNRVJfQ09OVFJPTF9BRERSRVNTICAgICAgICAgICAgICAgICAweDAwMDAwMDk0Ci0jZGVmaW5lIEhGX1RJTUVSX0NPTlRST0xfT0ZGU0VUICAgICAgICAgICAgICAgICAgMHgwMDAwMDA5NAotI2RlZmluZSBIRl9USU1FUl9DT05UUk9MX0VOQUJMRV9NU0IgICAgICAgICAgICAgIDMKLSNkZWZpbmUgSEZfVElNRVJfQ09OVFJPTF9FTkFCTEVfTFNCICAgICAgICAgICAgICAzCi0jZGVmaW5lIEhGX1RJTUVSX0NPTlRST0xfRU5BQkxFX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBIRl9USU1FUl9DT05UUk9MX0VOQUJMRV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgSEZfVElNRVJfQ09OVFJPTF9FTkFCTEVfTUFTSykgPj4gSEZfVElNRVJfQ09OVFJPTF9FTkFCTEVfTFNCKQotI2RlZmluZSBIRl9USU1FUl9DT05UUk9MX0VOQUJMRV9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IEhGX1RJTUVSX0NPTlRST0xfRU5BQkxFX0xTQikgJiBIRl9USU1FUl9DT05UUk9MX0VOQUJMRV9NQVNLKQotI2RlZmluZSBIRl9USU1FUl9DT05UUk9MX09OX01TQiAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgSEZfVElNRVJfQ09OVFJPTF9PTl9MU0IgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIEhGX1RJTUVSX0NPTlRST0xfT05fTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBIRl9USU1FUl9DT05UUk9MX09OX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgSEZfVElNRVJfQ09OVFJPTF9PTl9NQVNLKSA+PiBIRl9USU1FUl9DT05UUk9MX09OX0xTQikKLSNkZWZpbmUgSEZfVElNRVJfQ09OVFJPTF9PTl9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBIRl9USU1FUl9DT05UUk9MX09OX0xTQikgJiBIRl9USU1FUl9DT05UUk9MX09OX01BU0spCi0jZGVmaW5lIEhGX1RJTUVSX0NPTlRST0xfQVVUT19SRVNUQVJUX01TQiAgICAgICAgMQotI2RlZmluZSBIRl9USU1FUl9DT05UUk9MX0FVVE9fUkVTVEFSVF9MU0IgICAgICAgIDEKLSNkZWZpbmUgSEZfVElNRVJfQ09OVFJPTF9BVVRPX1JFU1RBUlRfTUFTSyAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIEhGX1RJTUVSX0NPTlRST0xfQVVUT19SRVNUQVJUX0dFVCh4KSAgICAgKCgoeCkgJiBIRl9USU1FUl9DT05UUk9MX0FVVE9fUkVTVEFSVF9NQVNLKSA+PiBIRl9USU1FUl9DT05UUk9MX0FVVE9fUkVTVEFSVF9MU0IpCi0jZGVmaW5lIEhGX1RJTUVSX0NPTlRST0xfQVVUT19SRVNUQVJUX1NFVCh4KSAgICAgKCgoeCkgPDwgSEZfVElNRVJfQ09OVFJPTF9BVVRPX1JFU1RBUlRfTFNCKSAmIEhGX1RJTUVSX0NPTlRST0xfQVVUT19SRVNUQVJUX01BU0spCi0jZGVmaW5lIEhGX1RJTUVSX0NPTlRST0xfUkVTRVRfTVNCICAgICAgICAgICAgICAgMAotI2RlZmluZSBIRl9USU1FUl9DT05UUk9MX1JFU0VUX0xTQiAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgSEZfVElNRVJfQ09OVFJPTF9SRVNFVF9NQVNLICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIEhGX1RJTUVSX0NPTlRST0xfUkVTRVRfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBIRl9USU1FUl9DT05UUk9MX1JFU0VUX01BU0spID4+IEhGX1RJTUVSX0NPTlRST0xfUkVTRVRfTFNCKQotI2RlZmluZSBIRl9USU1FUl9DT05UUk9MX1JFU0VUX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IEhGX1RJTUVSX0NPTlRST0xfUkVTRVRfTFNCKSAmIEhGX1RJTUVSX0NPTlRST0xfUkVTRVRfTUFTSykKLQotI2RlZmluZSBIRl9USU1FUl9TVEFUVVNfQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwOTgKLSNkZWZpbmUgSEZfVElNRVJfU1RBVFVTX09GRlNFVCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDk4Ci0jZGVmaW5lIEhGX1RJTUVSX1NUQVRVU19JTlRFUlJVUFRfTVNCICAgICAgICAgICAgMAotI2RlZmluZSBIRl9USU1FUl9TVEFUVVNfSU5URVJSVVBUX0xTQiAgICAgICAgICAgIDAKLSNkZWZpbmUgSEZfVElNRVJfU1RBVFVTX0lOVEVSUlVQVF9NQVNLICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIEhGX1RJTUVSX1NUQVRVU19JTlRFUlJVUFRfR0VUKHgpICAgICAgICAgKCgoeCkgJiBIRl9USU1FUl9TVEFUVVNfSU5URVJSVVBUX01BU0spID4+IEhGX1RJTUVSX1NUQVRVU19JTlRFUlJVUFRfTFNCKQotI2RlZmluZSBIRl9USU1FUl9TVEFUVVNfSU5URVJSVVBUX1NFVCh4KSAgICAgICAgICgoKHgpIDw8IEhGX1RJTUVSX1NUQVRVU19JTlRFUlJVUFRfTFNCKSAmIEhGX1RJTUVSX1NUQVRVU19JTlRFUlJVUFRfTUFTSykKLQotI2RlZmluZSBSVENfQ09OVFJPTF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwOWMKLSNkZWZpbmUgUlRDX0NPTlRST0xfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDljCi0jZGVmaW5lIFJUQ19DT05UUk9MX0VOQUJMRV9NU0IgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBSVENfQ09OVFJPTF9FTkFCTEVfTFNCICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUlRDX0NPTlRST0xfRU5BQkxFX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFJUQ19DT05UUk9MX0VOQUJMRV9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiBSVENfQ09OVFJPTF9FTkFCTEVfTUFTSykgPj4gUlRDX0NPTlRST0xfRU5BQkxFX0xTQikKLSNkZWZpbmUgUlRDX0NPTlRST0xfRU5BQkxFX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCBSVENfQ09OVFJPTF9FTkFCTEVfTFNCKSAmIFJUQ19DT05UUk9MX0VOQUJMRV9NQVNLKQotI2RlZmluZSBSVENfQ09OVFJPTF9MT0FEX1JUQ19NU0IgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUlRDX0NPTlRST0xfTE9BRF9SVENfTFNCICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFJUQ19DT05UUk9MX0xPQURfUlRDX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBSVENfQ09OVFJPTF9MT0FEX1JUQ19HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgUlRDX0NPTlRST0xfTE9BRF9SVENfTUFTSykgPj4gUlRDX0NPTlRST0xfTE9BRF9SVENfTFNCKQotI2RlZmluZSBSVENfQ09OVFJPTF9MT0FEX1JUQ19TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFJUQ19DT05UUk9MX0xPQURfUlRDX0xTQikgJiBSVENfQ09OVFJPTF9MT0FEX1JUQ19NQVNLKQotI2RlZmluZSBSVENfQ09OVFJPTF9MT0FEX0FMQVJNX01TQiAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUlRDX0NPTlRST0xfTE9BRF9BTEFSTV9MU0IgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFJUQ19DT05UUk9MX0xPQURfQUxBUk1fTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBSVENfQ09OVFJPTF9MT0FEX0FMQVJNX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgUlRDX0NPTlRST0xfTE9BRF9BTEFSTV9NQVNLKSA+PiBSVENfQ09OVFJPTF9MT0FEX0FMQVJNX0xTQikKLSNkZWZpbmUgUlRDX0NPTlRST0xfTE9BRF9BTEFSTV9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBSVENfQ09OVFJPTF9MT0FEX0FMQVJNX0xTQikgJiBSVENfQ09OVFJPTF9MT0FEX0FMQVJNX01BU0spCi0KLSNkZWZpbmUgUlRDX1RJTUVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGEwCi0jZGVmaW5lIFJUQ19USU1FX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBhMAotI2RlZmluZSBSVENfVElNRV9XRUVLX0RBWV9NU0IgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFJUQ19USU1FX1dFRUtfREFZX0xTQiAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUlRDX1RJTUVfV0VFS19EQVlfTUFTSyAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCi0jZGVmaW5lIFJUQ19USU1FX1dFRUtfREFZX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBSVENfVElNRV9XRUVLX0RBWV9NQVNLKSA+PiBSVENfVElNRV9XRUVLX0RBWV9MU0IpCi0jZGVmaW5lIFJUQ19USU1FX1dFRUtfREFZX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgUlRDX1RJTUVfV0VFS19EQVlfTFNCKSAmIFJUQ19USU1FX1dFRUtfREFZX01BU0spCi0jZGVmaW5lIFJUQ19USU1FX0hPVVJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUlRDX1RJTUVfSE9VUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBSVENfVElNRV9IT1VSX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzZjAwMDAKLSNkZWZpbmUgUlRDX1RJTUVfSE9VUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFJUQ19USU1FX0hPVVJfTUFTSykgPj4gUlRDX1RJTUVfSE9VUl9MU0IpCi0jZGVmaW5lIFJUQ19USU1FX0hPVVJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgUlRDX1RJTUVfSE9VUl9MU0IpICYgUlRDX1RJTUVfSE9VUl9NQVNLKQotI2RlZmluZSBSVENfVElNRV9NSU5VVEVfTVNCICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFJUQ19USU1FX01JTlVURV9MU0IgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBSVENfVElNRV9NSU5VVEVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDdmMDAKLSNkZWZpbmUgUlRDX1RJTUVfTUlOVVRFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFJUQ19USU1FX01JTlVURV9NQVNLKSA+PiBSVENfVElNRV9NSU5VVEVfTFNCKQotI2RlZmluZSBSVENfVElNRV9NSU5VVEVfU0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFJUQ19USU1FX01JTlVURV9MU0IpICYgUlRDX1RJTUVfTUlOVVRFX01BU0spCi0jZGVmaW5lIFJUQ19USU1FX1NFQ09ORF9NU0IgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBSVENfVElNRV9TRUNPTkRfTFNCICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUlRDX1RJTUVfU0VDT05EX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdmCi0jZGVmaW5lIFJUQ19USU1FX1NFQ09ORF9HRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBSVENfVElNRV9TRUNPTkRfTUFTSykgPj4gUlRDX1RJTUVfU0VDT05EX0xTQikKLSNkZWZpbmUgUlRDX1RJTUVfU0VDT05EX1NFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBSVENfVElNRV9TRUNPTkRfTFNCKSAmIFJUQ19USU1FX1NFQ09ORF9NQVNLKQotCi0jZGVmaW5lIFJUQ19EQVRFX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBhNAotI2RlZmluZSBSVENfREFURV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYTQKLSNkZWZpbmUgUlRDX0RBVEVfWUVBUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBSVENfREFURV9ZRUFSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFJUQ19EQVRFX1lFQVJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMGZmMDAwMAotI2RlZmluZSBSVENfREFURV9ZRUFSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgUlRDX0RBVEVfWUVBUl9NQVNLKSA+PiBSVENfREFURV9ZRUFSX0xTQikKLSNkZWZpbmUgUlRDX0RBVEVfWUVBUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBSVENfREFURV9ZRUFSX0xTQikgJiBSVENfREFURV9ZRUFSX01BU0spCi0jZGVmaW5lIFJUQ19EQVRFX01PTlRIX01TQiAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUlRDX0RBVEVfTU9OVEhfTFNCICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFJUQ19EQVRFX01PTlRIX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMWYwMAotI2RlZmluZSBSVENfREFURV9NT05USF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgUlRDX0RBVEVfTU9OVEhfTUFTSykgPj4gUlRDX0RBVEVfTU9OVEhfTFNCKQotI2RlZmluZSBSVENfREFURV9NT05USF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFJUQ19EQVRFX01PTlRIX0xTQikgJiBSVENfREFURV9NT05USF9NQVNLKQotI2RlZmluZSBSVENfREFURV9NT05USF9EQVlfTVNCICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUlRDX0RBVEVfTU9OVEhfREFZX0xTQiAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFJUQ19EQVRFX01PTlRIX0RBWV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzZgotI2RlZmluZSBSVENfREFURV9NT05USF9EQVlfR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgUlRDX0RBVEVfTU9OVEhfREFZX01BU0spID4+IFJUQ19EQVRFX01PTlRIX0RBWV9MU0IpCi0jZGVmaW5lIFJUQ19EQVRFX01PTlRIX0RBWV9TRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPDwgUlRDX0RBVEVfTU9OVEhfREFZX0xTQikgJiBSVENfREFURV9NT05USF9EQVlfTUFTSykKLQotI2RlZmluZSBSVENfU0VUX1RJTUVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYTgKLSNkZWZpbmUgUlRDX1NFVF9USU1FX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGE4Ci0jZGVmaW5lIFJUQ19TRVRfVElNRV9XRUVLX0RBWV9NU0IgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUlRDX1NFVF9USU1FX1dFRUtfREFZX0xTQiAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBSVENfU0VUX1RJTUVfV0VFS19EQVlfTUFTSyAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKLSNkZWZpbmUgUlRDX1NFVF9USU1FX1dFRUtfREFZX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIFJUQ19TRVRfVElNRV9XRUVLX0RBWV9NQVNLKSA+PiBSVENfU0VUX1RJTUVfV0VFS19EQVlfTFNCKQotI2RlZmluZSBSVENfU0VUX1RJTUVfV0VFS19EQVlfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IFJUQ19TRVRfVElNRV9XRUVLX0RBWV9MU0IpICYgUlRDX1NFVF9USU1FX1dFRUtfREFZX01BU0spCi0jZGVmaW5lIFJUQ19TRVRfVElNRV9IT1VSX01TQiAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUlRDX1NFVF9USU1FX0hPVVJfTFNCICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBSVENfU0VUX1RJTUVfSE9VUl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAzZjAwMDAKLSNkZWZpbmUgUlRDX1NFVF9USU1FX0hPVVJfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIFJUQ19TRVRfVElNRV9IT1VSX01BU0spID4+IFJUQ19TRVRfVElNRV9IT1VSX0xTQikKLSNkZWZpbmUgUlRDX1NFVF9USU1FX0hPVVJfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCBSVENfU0VUX1RJTUVfSE9VUl9MU0IpICYgUlRDX1NFVF9USU1FX0hPVVJfTUFTSykKLSNkZWZpbmUgUlRDX1NFVF9USU1FX01JTlVURV9NU0IgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBSVENfU0VUX1RJTUVfTUlOVVRFX0xTQiAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUlRDX1NFVF9USU1FX01JTlVURV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDA3ZjAwCi0jZGVmaW5lIFJUQ19TRVRfVElNRV9NSU5VVEVfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBSVENfU0VUX1RJTUVfTUlOVVRFX01BU0spID4+IFJUQ19TRVRfVElNRV9NSU5VVEVfTFNCKQotI2RlZmluZSBSVENfU0VUX1RJTUVfTUlOVVRFX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IFJUQ19TRVRfVElNRV9NSU5VVEVfTFNCKSAmIFJUQ19TRVRfVElNRV9NSU5VVEVfTUFTSykKLSNkZWZpbmUgUlRDX1NFVF9USU1FX1NFQ09ORF9NU0IgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFJUQ19TRVRfVElNRV9TRUNPTkRfTFNCICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBSVENfU0VUX1RJTUVfU0VDT05EX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwN2YKLSNkZWZpbmUgUlRDX1NFVF9USU1FX1NFQ09ORF9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIFJUQ19TRVRfVElNRV9TRUNPTkRfTUFTSykgPj4gUlRDX1NFVF9USU1FX1NFQ09ORF9MU0IpCi0jZGVmaW5lIFJUQ19TRVRfVElNRV9TRUNPTkRfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgUlRDX1NFVF9USU1FX1NFQ09ORF9MU0IpICYgUlRDX1NFVF9USU1FX1NFQ09ORF9NQVNLKQotCi0jZGVmaW5lIFJUQ19TRVRfREFURV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBhYwotI2RlZmluZSBSVENfU0VUX0RBVEVfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYWMKLSNkZWZpbmUgUlRDX1NFVF9EQVRFX1lFQVJfTVNCICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBSVENfU0VUX0RBVEVfWUVBUl9MU0IgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFJUQ19TRVRfREFURV9ZRUFSX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMGZmMDAwMAotI2RlZmluZSBSVENfU0VUX0RBVEVfWUVBUl9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgUlRDX1NFVF9EQVRFX1lFQVJfTUFTSykgPj4gUlRDX1NFVF9EQVRFX1lFQVJfTFNCKQotI2RlZmluZSBSVENfU0VUX0RBVEVfWUVBUl9TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IFJUQ19TRVRfREFURV9ZRUFSX0xTQikgJiBSVENfU0VUX0RBVEVfWUVBUl9NQVNLKQotI2RlZmluZSBSVENfU0VUX0RBVEVfTU9OVEhfTVNCICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFJUQ19TRVRfREFURV9NT05USF9MU0IgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBSVENfU0VUX0RBVEVfTU9OVEhfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMDFmMDAKLSNkZWZpbmUgUlRDX1NFVF9EQVRFX01PTlRIX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIFJUQ19TRVRfREFURV9NT05USF9NQVNLKSA+PiBSVENfU0VUX0RBVEVfTU9OVEhfTFNCKQotI2RlZmluZSBSVENfU0VUX0RBVEVfTU9OVEhfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IFJUQ19TRVRfREFURV9NT05USF9MU0IpICYgUlRDX1NFVF9EQVRFX01PTlRIX01BU0spCi0jZGVmaW5lIFJUQ19TRVRfREFURV9NT05USF9EQVlfTVNCICAgICAgICAgICAgICAgNQotI2RlZmluZSBSVENfU0VUX0RBVEVfTU9OVEhfREFZX0xTQiAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUlRDX1NFVF9EQVRFX01PTlRIX0RBWV9NQVNLICAgICAgICAgICAgICAweDAwMDAwMDNmCi0jZGVmaW5lIFJUQ19TRVRfREFURV9NT05USF9EQVlfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBSVENfU0VUX0RBVEVfTU9OVEhfREFZX01BU0spID4+IFJUQ19TRVRfREFURV9NT05USF9EQVlfTFNCKQotI2RlZmluZSBSVENfU0VUX0RBVEVfTU9OVEhfREFZX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IFJUQ19TRVRfREFURV9NT05USF9EQVlfTFNCKSAmIFJUQ19TRVRfREFURV9NT05USF9EQVlfTUFTSykKLQotI2RlZmluZSBSVENfU0VUX0FMQVJNX0FERFJFU1MgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYjAKLSNkZWZpbmUgUlRDX1NFVF9BTEFSTV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGIwCi0jZGVmaW5lIFJUQ19TRVRfQUxBUk1fSE9VUl9NU0IgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUlRDX1NFVF9BTEFSTV9IT1VSX0xTQiAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBSVENfU0VUX0FMQVJNX0hPVVJfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAzZjAwMDAKLSNkZWZpbmUgUlRDX1NFVF9BTEFSTV9IT1VSX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIFJUQ19TRVRfQUxBUk1fSE9VUl9NQVNLKSA+PiBSVENfU0VUX0FMQVJNX0hPVVJfTFNCKQotI2RlZmluZSBSVENfU0VUX0FMQVJNX0hPVVJfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IFJUQ19TRVRfQUxBUk1fSE9VUl9MU0IpICYgUlRDX1NFVF9BTEFSTV9IT1VSX01BU0spCi0jZGVmaW5lIFJUQ19TRVRfQUxBUk1fTUlOVVRFX01TQiAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUlRDX1NFVF9BTEFSTV9NSU5VVEVfTFNCICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFJUQ19TRVRfQUxBUk1fTUlOVVRFX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwN2YwMAotI2RlZmluZSBSVENfU0VUX0FMQVJNX01JTlVURV9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgUlRDX1NFVF9BTEFSTV9NSU5VVEVfTUFTSykgPj4gUlRDX1NFVF9BTEFSTV9NSU5VVEVfTFNCKQotI2RlZmluZSBSVENfU0VUX0FMQVJNX01JTlVURV9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFJUQ19TRVRfQUxBUk1fTUlOVVRFX0xTQikgJiBSVENfU0VUX0FMQVJNX01JTlVURV9NQVNLKQotI2RlZmluZSBSVENfU0VUX0FMQVJNX1NFQ09ORF9NU0IgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUlRDX1NFVF9BTEFSTV9TRUNPTkRfTFNCICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFJUQ19TRVRfQUxBUk1fU0VDT05EX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDA3ZgotI2RlZmluZSBSVENfU0VUX0FMQVJNX1NFQ09ORF9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgUlRDX1NFVF9BTEFSTV9TRUNPTkRfTUFTSykgPj4gUlRDX1NFVF9BTEFSTV9TRUNPTkRfTFNCKQotI2RlZmluZSBSVENfU0VUX0FMQVJNX1NFQ09ORF9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFJUQ19TRVRfQUxBUk1fU0VDT05EX0xTQikgJiBSVENfU0VUX0FMQVJNX1NFQ09ORF9NQVNLKQotCi0jZGVmaW5lIFJUQ19DT05GSUdfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBiNAotI2RlZmluZSBSVENfQ09ORklHX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYjQKLSNkZWZpbmUgUlRDX0NPTkZJR19CQ0RfTVNCICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFJUQ19DT05GSUdfQkNEX0xTQiAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBSVENfQ09ORklHX0JDRF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgUlRDX0NPTkZJR19CQ0RfR0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFJUQ19DT05GSUdfQkNEX01BU0spID4+IFJUQ19DT05GSUdfQkNEX0xTQikKLSNkZWZpbmUgUlRDX0NPTkZJR19CQ0RfU0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBSVENfQ09ORklHX0JDRF9MU0IpICYgUlRDX0NPTkZJR19CQ0RfTUFTSykKLSNkZWZpbmUgUlRDX0NPTkZJR19UV0VMVkVfSE9VUl9NU0IgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFJUQ19DT05GSUdfVFdFTFZFX0hPVVJfTFNCICAgICAgICAgICAgICAgMQotI2RlZmluZSBSVENfQ09ORklHX1RXRUxWRV9IT1VSX01BU0sgICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgUlRDX0NPTkZJR19UV0VMVkVfSE9VUl9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFJUQ19DT05GSUdfVFdFTFZFX0hPVVJfTUFTSykgPj4gUlRDX0NPTkZJR19UV0VMVkVfSE9VUl9MU0IpCi0jZGVmaW5lIFJUQ19DT05GSUdfVFdFTFZFX0hPVVJfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgUlRDX0NPTkZJR19UV0VMVkVfSE9VUl9MU0IpICYgUlRDX0NPTkZJR19UV0VMVkVfSE9VUl9NQVNLKQotI2RlZmluZSBSVENfQ09ORklHX0RTRV9NU0IgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUlRDX0NPTkZJR19EU0VfTFNCICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFJUQ19DT05GSUdfRFNFX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBSVENfQ09ORklHX0RTRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgUlRDX0NPTkZJR19EU0VfTUFTSykgPj4gUlRDX0NPTkZJR19EU0VfTFNCKQotI2RlZmluZSBSVENfQ09ORklHX0RTRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFJUQ19DT05GSUdfRFNFX0xTQikgJiBSVENfQ09ORklHX0RTRV9NQVNLKQotCi0jZGVmaW5lIFJUQ19BTEFSTV9TVEFUVVNfQUREUkVTUyAgICAgICAgICAgICAgICAgMHgwMDAwMDBiOAotI2RlZmluZSBSVENfQUxBUk1fU1RBVFVTX09GRlNFVCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYjgKLSNkZWZpbmUgUlRDX0FMQVJNX1NUQVRVU19FTkFCTEVfTVNCICAgICAgICAgICAgICAxCi0jZGVmaW5lIFJUQ19BTEFSTV9TVEFUVVNfRU5BQkxFX0xTQiAgICAgICAgICAgICAgMQotI2RlZmluZSBSVENfQUxBUk1fU1RBVFVTX0VOQUJMRV9NQVNLICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgUlRDX0FMQVJNX1NUQVRVU19FTkFCTEVfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIFJUQ19BTEFSTV9TVEFUVVNfRU5BQkxFX01BU0spID4+IFJUQ19BTEFSTV9TVEFUVVNfRU5BQkxFX0xTQikKLSNkZWZpbmUgUlRDX0FMQVJNX1NUQVRVU19FTkFCTEVfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCBSVENfQUxBUk1fU1RBVFVTX0VOQUJMRV9MU0IpICYgUlRDX0FMQVJNX1NUQVRVU19FTkFCTEVfTUFTSykKLSNkZWZpbmUgUlRDX0FMQVJNX1NUQVRVU19JTlRFUlJVUFRfTVNCICAgICAgICAgICAwCi0jZGVmaW5lIFJUQ19BTEFSTV9TVEFUVVNfSU5URVJSVVBUX0xTQiAgICAgICAgICAgMAotI2RlZmluZSBSVENfQUxBUk1fU1RBVFVTX0lOVEVSUlVQVF9NQVNLICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUlRDX0FMQVJNX1NUQVRVU19JTlRFUlJVUFRfR0VUKHgpICAgICAgICAoKCh4KSAmIFJUQ19BTEFSTV9TVEFUVVNfSU5URVJSVVBUX01BU0spID4+IFJUQ19BTEFSTV9TVEFUVVNfSU5URVJSVVBUX0xTQikKLSNkZWZpbmUgUlRDX0FMQVJNX1NUQVRVU19JTlRFUlJVUFRfU0VUKHgpICAgICAgICAoKCh4KSA8PCBSVENfQUxBUk1fU1RBVFVTX0lOVEVSUlVQVF9MU0IpICYgUlRDX0FMQVJNX1NUQVRVU19JTlRFUlJVUFRfTUFTSykKLQotI2RlZmluZSBVQVJUX1dBS0VVUF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYmMKLSNkZWZpbmUgVUFSVF9XQUtFVVBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGJjCi0jZGVmaW5lIFVBUlRfV0FLRVVQX0VOQUJMRV9NU0IgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBVQVJUX1dBS0VVUF9FTkFCTEVfTFNCICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgVUFSVF9XQUtFVVBfRU5BQkxFX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFVBUlRfV0FLRVVQX0VOQUJMRV9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiBVQVJUX1dBS0VVUF9FTkFCTEVfTUFTSykgPj4gVUFSVF9XQUtFVVBfRU5BQkxFX0xTQikKLSNkZWZpbmUgVUFSVF9XQUtFVVBfRU5BQkxFX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCBVQVJUX1dBS0VVUF9FTkFCTEVfTFNCKSAmIFVBUlRfV0FLRVVQX0VOQUJMRV9NQVNLKQotCi0jZGVmaW5lIFJFU0VUX0NBVVNFX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBjMAotI2RlZmluZSBSRVNFVF9DQVVTRV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYzAKLSNkZWZpbmUgUkVTRVRfQ0FVU0VfTEFTVF9NU0IgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFJFU0VUX0NBVVNFX0xBU1RfTFNCICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBSRVNFVF9DQVVTRV9MQVNUX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKLSNkZWZpbmUgUkVTRVRfQ0FVU0VfTEFTVF9HRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIFJFU0VUX0NBVVNFX0xBU1RfTUFTSykgPj4gUkVTRVRfQ0FVU0VfTEFTVF9MU0IpCi0jZGVmaW5lIFJFU0VUX0NBVVNFX0xBU1RfU0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgUkVTRVRfQ0FVU0VfTEFTVF9MU0IpICYgUkVTRVRfQ0FVU0VfTEFTVF9NQVNLKQotCi0jZGVmaW5lIFNZU1RFTV9TTEVFUF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBjNAotI2RlZmluZSBTWVNURU1fU0xFRVBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYzQKLSNkZWZpbmUgU1lTVEVNX1NMRUVQX0hPU1RfSUZfTVNCICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFNZU1RFTV9TTEVFUF9IT1NUX0lGX0xTQiAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBTWVNURU1fU0xFRVBfSE9TVF9JRl9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgU1lTVEVNX1NMRUVQX0hPU1RfSUZfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIFNZU1RFTV9TTEVFUF9IT1NUX0lGX01BU0spID4+IFNZU1RFTV9TTEVFUF9IT1NUX0lGX0xTQikKLSNkZWZpbmUgU1lTVEVNX1NMRUVQX0hPU1RfSUZfU0VUKHgpICAgICAgICAgICAgICAoKCh4KSA8PCBTWVNURU1fU0xFRVBfSE9TVF9JRl9MU0IpICYgU1lTVEVNX1NMRUVQX0hPU1RfSUZfTUFTSykKLSNkZWZpbmUgU1lTVEVNX1NMRUVQX01CT1hfTVNCICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFNZU1RFTV9TTEVFUF9NQk9YX0xTQiAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBTWVNURU1fU0xFRVBfTUJPWF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgU1lTVEVNX1NMRUVQX01CT1hfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIFNZU1RFTV9TTEVFUF9NQk9YX01BU0spID4+IFNZU1RFTV9TTEVFUF9NQk9YX0xTQikKLSNkZWZpbmUgU1lTVEVNX1NMRUVQX01CT1hfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCBTWVNURU1fU0xFRVBfTUJPWF9MU0IpICYgU1lTVEVNX1NMRUVQX01CT1hfTUFTSykKLSNkZWZpbmUgU1lTVEVNX1NMRUVQX01BQ19JRl9NU0IgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFNZU1RFTV9TTEVFUF9NQUNfSUZfTFNCICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBTWVNURU1fU0xFRVBfTUFDX0lGX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgU1lTVEVNX1NMRUVQX01BQ19JRl9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIFNZU1RFTV9TTEVFUF9NQUNfSUZfTUFTSykgPj4gU1lTVEVNX1NMRUVQX01BQ19JRl9MU0IpCi0jZGVmaW5lIFNZU1RFTV9TTEVFUF9NQUNfSUZfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgU1lTVEVNX1NMRUVQX01BQ19JRl9MU0IpICYgU1lTVEVNX1NMRUVQX01BQ19JRl9NQVNLKQotI2RlZmluZSBTWVNURU1fU0xFRVBfTElHSFRfTVNCICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgU1lTVEVNX1NMRUVQX0xJR0hUX0xTQiAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFNZU1RFTV9TTEVFUF9MSUdIVF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBTWVNURU1fU0xFRVBfTElHSFRfR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgU1lTVEVNX1NMRUVQX0xJR0hUX01BU0spID4+IFNZU1RFTV9TTEVFUF9MSUdIVF9MU0IpCi0jZGVmaW5lIFNZU1RFTV9TTEVFUF9MSUdIVF9TRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPDwgU1lTVEVNX1NMRUVQX0xJR0hUX0xTQikgJiBTWVNURU1fU0xFRVBfTElHSFRfTUFTSykKLSNkZWZpbmUgU1lTVEVNX1NMRUVQX0RJU0FCTEVfTVNCICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFNZU1RFTV9TTEVFUF9ESVNBQkxFX0xTQiAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBTWVNURU1fU0xFRVBfRElTQUJMRV9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgU1lTVEVNX1NMRUVQX0RJU0FCTEVfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIFNZU1RFTV9TTEVFUF9ESVNBQkxFX01BU0spID4+IFNZU1RFTV9TTEVFUF9ESVNBQkxFX0xTQikKLSNkZWZpbmUgU1lTVEVNX1NMRUVQX0RJU0FCTEVfU0VUKHgpICAgICAgICAgICAgICAoKCh4KSA8PCBTWVNURU1fU0xFRVBfRElTQUJMRV9MU0IpICYgU1lTVEVNX1NMRUVQX0RJU0FCTEVfTUFTSykKLQotI2RlZmluZSBTRElPX1dSQVBQRVJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYzgKLSNkZWZpbmUgU0RJT19XUkFQUEVSX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGM4Ci0jZGVmaW5lIFNESU9fV1JBUFBFUl9TTEVFUF9NU0IgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBTRElPX1dSQVBQRVJfU0xFRVBfTFNCICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgU0RJT19XUkFQUEVSX1NMRUVQX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIFNESU9fV1JBUFBFUl9TTEVFUF9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiBTRElPX1dSQVBQRVJfU0xFRVBfTUFTSykgPj4gU0RJT19XUkFQUEVSX1NMRUVQX0xTQikKLSNkZWZpbmUgU0RJT19XUkFQUEVSX1NMRUVQX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCBTRElPX1dSQVBQRVJfU0xFRVBfTFNCKSAmIFNESU9fV1JBUFBFUl9TTEVFUF9NQVNLKQotI2RlZmluZSBTRElPX1dSQVBQRVJfV0FLRVVQX01TQiAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgU0RJT19XUkFQUEVSX1dBS0VVUF9MU0IgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFNESU9fV1JBUFBFUl9XQUtFVVBfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBTRElPX1dSQVBQRVJfV0FLRVVQX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgU0RJT19XUkFQUEVSX1dBS0VVUF9NQVNLKSA+PiBTRElPX1dSQVBQRVJfV0FLRVVQX0xTQikKLSNkZWZpbmUgU0RJT19XUkFQUEVSX1dBS0VVUF9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBTRElPX1dSQVBQRVJfV0FLRVVQX0xTQikgJiBTRElPX1dSQVBQRVJfV0FLRVVQX01BU0spCi0jZGVmaW5lIFNESU9fV1JBUFBFUl9TT0NfT05fTVNCICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBTRElPX1dSQVBQRVJfU09DX09OX0xTQiAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgU0RJT19XUkFQUEVSX1NPQ19PTl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFNESU9fV1JBUFBFUl9TT0NfT05fR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBTRElPX1dSQVBQRVJfU09DX09OX01BU0spID4+IFNESU9fV1JBUFBFUl9TT0NfT05fTFNCKQotI2RlZmluZSBTRElPX1dSQVBQRVJfU09DX09OX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IFNESU9fV1JBUFBFUl9TT0NfT05fTFNCKSAmIFNESU9fV1JBUFBFUl9TT0NfT05fTUFTSykKLSNkZWZpbmUgU0RJT19XUkFQUEVSX09OX01TQiAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFNESU9fV1JBUFBFUl9PTl9MU0IgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBTRElPX1dSQVBQRVJfT05fTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgU0RJT19XUkFQUEVSX09OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFNESU9fV1JBUFBFUl9PTl9NQVNLKSA+PiBTRElPX1dSQVBQRVJfT05fTFNCKQotI2RlZmluZSBTRElPX1dSQVBQRVJfT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNESU9fV1JBUFBFUl9PTl9MU0IpICYgU0RJT19XUkFQUEVSX09OX01BU0spCi0KLSNkZWZpbmUgTUFDX1NMRUVQX0NPTlRST0xfQUREUkVTUyAgICAgICAgICAgICAgICAweDAwMDAwMGNjCi0jZGVmaW5lIE1BQ19TTEVFUF9DT05UUk9MX09GRlNFVCAgICAgICAgICAgICAgICAgMHgwMDAwMDBjYwotI2RlZmluZSBNQUNfU0xFRVBfQ09OVFJPTF9FTkFCTEVfTVNCICAgICAgICAgICAgIDEKLSNkZWZpbmUgTUFDX1NMRUVQX0NPTlRST0xfRU5BQkxFX0xTQiAgICAgICAgICAgICAwCi0jZGVmaW5lIE1BQ19TTEVFUF9DT05UUk9MX0VOQUJMRV9NQVNLICAgICAgICAgICAgMHgwMDAwMDAwMwotI2RlZmluZSBNQUNfU0xFRVBfQ09OVFJPTF9FTkFCTEVfR0VUKHgpICAgICAgICAgICgoKHgpICYgTUFDX1NMRUVQX0NPTlRST0xfRU5BQkxFX01BU0spID4+IE1BQ19TTEVFUF9DT05UUk9MX0VOQUJMRV9MU0IpCi0jZGVmaW5lIE1BQ19TTEVFUF9DT05UUk9MX0VOQUJMRV9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgTUFDX1NMRUVQX0NPTlRST0xfRU5BQkxFX0xTQikgJiBNQUNfU0xFRVBfQ09OVFJPTF9FTkFCTEVfTUFTSykKLQotI2RlZmluZSBLRUVQX0FXQUtFX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZDAKLSNkZWZpbmUgS0VFUF9BV0FLRV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGQwCi0jZGVmaW5lIEtFRVBfQVdBS0VfQ09VTlRfTVNCICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBLRUVQX0FXQUtFX0NPVU5UX0xTQiAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgS0VFUF9BV0FLRV9DT1VOVF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIEtFRVBfQVdBS0VfQ09VTlRfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiBLRUVQX0FXQUtFX0NPVU5UX01BU0spID4+IEtFRVBfQVdBS0VfQ09VTlRfTFNCKQotI2RlZmluZSBLRUVQX0FXQUtFX0NPVU5UX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IEtFRVBfQVdBS0VfQ09VTlRfTFNCKSAmIEtFRVBfQVdBS0VfQ09VTlRfTUFTSykKLQotI2RlZmluZSBMUE9fQ0FMX1RJTUVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZDQKLSNkZWZpbmUgTFBPX0NBTF9USU1FX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGQ0Ci0jZGVmaW5lIExQT19DQUxfVElNRV9MRU5HVEhfTVNCICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgTFBPX0NBTF9USU1FX0xFTkdUSF9MU0IgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIExQT19DQUxfVElNRV9MRU5HVEhfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwM2ZmZgotI2RlZmluZSBMUE9fQ0FMX1RJTUVfTEVOR1RIX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgTFBPX0NBTF9USU1FX0xFTkdUSF9NQVNLKSA+PiBMUE9fQ0FMX1RJTUVfTEVOR1RIX0xTQikKLSNkZWZpbmUgTFBPX0NBTF9USU1FX0xFTkdUSF9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBMUE9fQ0FMX1RJTUVfTEVOR1RIX0xTQikgJiBMUE9fQ0FMX1RJTUVfTEVOR1RIX01BU0spCi0KLSNkZWZpbmUgTFBPX0lOSVRfRElWSURFTkRfSU5UX0FERFJFU1MgICAgICAgICAgICAweDAwMDAwMGQ4Ci0jZGVmaW5lIExQT19JTklUX0RJVklERU5EX0lOVF9PRkZTRVQgICAgICAgICAgICAgMHgwMDAwMDBkOAotI2RlZmluZSBMUE9fSU5JVF9ESVZJREVORF9JTlRfVkFMVUVfTVNCICAgICAgICAgIDIzCi0jZGVmaW5lIExQT19JTklUX0RJVklERU5EX0lOVF9WQUxVRV9MU0IgICAgICAgICAgMAotI2RlZmluZSBMUE9fSU5JVF9ESVZJREVORF9JTlRfVkFMVUVfTUFTSyAgICAgICAgIDB4MDBmZmZmZmYKLSNkZWZpbmUgTFBPX0lOSVRfRElWSURFTkRfSU5UX1ZBTFVFX0dFVCh4KSAgICAgICAoKCh4KSAmIExQT19JTklUX0RJVklERU5EX0lOVF9WQUxVRV9NQVNLKSA+PiBMUE9fSU5JVF9ESVZJREVORF9JTlRfVkFMVUVfTFNCKQotI2RlZmluZSBMUE9fSU5JVF9ESVZJREVORF9JTlRfVkFMVUVfU0VUKHgpICAgICAgICgoKHgpIDw8IExQT19JTklUX0RJVklERU5EX0lOVF9WQUxVRV9MU0IpICYgTFBPX0lOSVRfRElWSURFTkRfSU5UX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgTFBPX0lOSVRfRElWSURFTkRfRlJBQ1RJT05fQUREUkVTUyAgICAgICAweDAwMDAwMGRjCi0jZGVmaW5lIExQT19JTklUX0RJVklERU5EX0ZSQUNUSU9OX09GRlNFVCAgICAgICAgMHgwMDAwMDBkYwotI2RlZmluZSBMUE9fSU5JVF9ESVZJREVORF9GUkFDVElPTl9WQUxVRV9NU0IgICAgIDEwCi0jZGVmaW5lIExQT19JTklUX0RJVklERU5EX0ZSQUNUSU9OX1ZBTFVFX0xTQiAgICAgMAotI2RlZmluZSBMUE9fSU5JVF9ESVZJREVORF9GUkFDVElPTl9WQUxVRV9NQVNLICAgIDB4MDAwMDA3ZmYKLSNkZWZpbmUgTFBPX0lOSVRfRElWSURFTkRfRlJBQ1RJT05fVkFMVUVfR0VUKHgpICAoKCh4KSAmIExQT19JTklUX0RJVklERU5EX0ZSQUNUSU9OX1ZBTFVFX01BU0spID4+IExQT19JTklUX0RJVklERU5EX0ZSQUNUSU9OX1ZBTFVFX0xTQikKLSNkZWZpbmUgTFBPX0lOSVRfRElWSURFTkRfRlJBQ1RJT05fVkFMVUVfU0VUKHgpICAoKCh4KSA8PCBMUE9fSU5JVF9ESVZJREVORF9GUkFDVElPTl9WQUxVRV9MU0IpICYgTFBPX0lOSVRfRElWSURFTkRfRlJBQ1RJT05fVkFMVUVfTUFTSykKLQotI2RlZmluZSBMUE9fQ0FMX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZTAKLSNkZWZpbmUgTFBPX0NBTF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGUwCi0jZGVmaW5lIExQT19DQUxfRU5BQkxFX01TQiAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgTFBPX0NBTF9FTkFCTEVfTFNCICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBMUE9fQ0FMX0VOQUJMRV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKLSNkZWZpbmUgTFBPX0NBTF9FTkFCTEVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIExQT19DQUxfRU5BQkxFX01BU0spID4+IExQT19DQUxfRU5BQkxFX0xTQikKLSNkZWZpbmUgTFBPX0NBTF9FTkFCTEVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBMUE9fQ0FMX0VOQUJMRV9MU0IpICYgTFBPX0NBTF9FTkFCTEVfTUFTSykKLSNkZWZpbmUgTFBPX0NBTF9DT1VOVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBMUE9fQ0FMX0NPVU5UX0xTQiAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTFBPX0NBTF9DT1VOVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwMGZmZmZmCi0jZGVmaW5lIExQT19DQUxfQ09VTlRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBMUE9fQ0FMX0NPVU5UX01BU0spID4+IExQT19DQUxfQ09VTlRfTFNCKQotI2RlZmluZSBMUE9fQ0FMX0NPVU5UX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IExQT19DQUxfQ09VTlRfTFNCKSAmIExQT19DQUxfQ09VTlRfTUFTSykKLQotI2RlZmluZSBMUE9fQ0FMX1RFU1RfQ09OVFJPTF9BRERSRVNTICAgICAgICAgICAgIDB4MDAwMDAwZTQKLSNkZWZpbmUgTFBPX0NBTF9URVNUX0NPTlRST0xfT0ZGU0VUICAgICAgICAgICAgICAweDAwMDAwMGU0Ci0jZGVmaW5lIExQT19DQUxfVEVTVF9DT05UUk9MX0VOQUJMRV9NU0IgICAgICAgICAgNQotI2RlZmluZSBMUE9fQ0FMX1RFU1RfQ09OVFJPTF9FTkFCTEVfTFNCICAgICAgICAgIDUKLSNkZWZpbmUgTFBPX0NBTF9URVNUX0NPTlRST0xfRU5BQkxFX01BU0sgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIExQT19DQUxfVEVTVF9DT05UUk9MX0VOQUJMRV9HRVQoeCkgICAgICAgKCgoeCkgJiBMUE9fQ0FMX1RFU1RfQ09OVFJPTF9FTkFCTEVfTUFTSykgPj4gTFBPX0NBTF9URVNUX0NPTlRST0xfRU5BQkxFX0xTQikKLSNkZWZpbmUgTFBPX0NBTF9URVNUX0NPTlRST0xfRU5BQkxFX1NFVCh4KSAgICAgICAoKCh4KSA8PCBMUE9fQ0FMX1RFU1RfQ09OVFJPTF9FTkFCTEVfTFNCKSAmIExQT19DQUxfVEVTVF9DT05UUk9MX0VOQUJMRV9NQVNLKQotI2RlZmluZSBMUE9fQ0FMX1RFU1RfQ09OVFJPTF9SVENfQ1lDTEVTX01TQiAgICAgIDQKLSNkZWZpbmUgTFBPX0NBTF9URVNUX0NPTlRST0xfUlRDX0NZQ0xFU19MU0IgICAgICAwCi0jZGVmaW5lIExQT19DQUxfVEVTVF9DT05UUk9MX1JUQ19DWUNMRVNfTUFTSyAgICAgMHgwMDAwMDAxZgotI2RlZmluZSBMUE9fQ0FMX1RFU1RfQ09OVFJPTF9SVENfQ1lDTEVTX0dFVCh4KSAgICgoKHgpICYgTFBPX0NBTF9URVNUX0NPTlRST0xfUlRDX0NZQ0xFU19NQVNLKSA+PiBMUE9fQ0FMX1RFU1RfQ09OVFJPTF9SVENfQ1lDTEVTX0xTQikKLSNkZWZpbmUgTFBPX0NBTF9URVNUX0NPTlRST0xfUlRDX0NZQ0xFU19TRVQoeCkgICAoKCh4KSA8PCBMUE9fQ0FMX1RFU1RfQ09OVFJPTF9SVENfQ1lDTEVTX0xTQikgJiBMUE9fQ0FMX1RFU1RfQ09OVFJPTF9SVENfQ1lDTEVTX01BU0spCi0KLSNkZWZpbmUgTFBPX0NBTF9URVNUX1NUQVRVU19BRERSRVNTICAgICAgICAgICAgICAweDAwMDAwMGU4Ci0jZGVmaW5lIExQT19DQUxfVEVTVF9TVEFUVVNfT0ZGU0VUICAgICAgICAgICAgICAgMHgwMDAwMDBlOAotI2RlZmluZSBMUE9fQ0FMX1RFU1RfU1RBVFVTX1JFQURZX01TQiAgICAgICAgICAgIDE2Ci0jZGVmaW5lIExQT19DQUxfVEVTVF9TVEFUVVNfUkVBRFlfTFNCICAgICAgICAgICAgMTYKLSNkZWZpbmUgTFBPX0NBTF9URVNUX1NUQVRVU19SRUFEWV9NQVNLICAgICAgICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIExQT19DQUxfVEVTVF9TVEFUVVNfUkVBRFlfR0VUKHgpICAgICAgICAgKCgoeCkgJiBMUE9fQ0FMX1RFU1RfU1RBVFVTX1JFQURZX01BU0spID4+IExQT19DQUxfVEVTVF9TVEFUVVNfUkVBRFlfTFNCKQotI2RlZmluZSBMUE9fQ0FMX1RFU1RfU1RBVFVTX1JFQURZX1NFVCh4KSAgICAgICAgICgoKHgpIDw8IExQT19DQUxfVEVTVF9TVEFUVVNfUkVBRFlfTFNCKSAmIExQT19DQUxfVEVTVF9TVEFUVVNfUkVBRFlfTUFTSykKLSNkZWZpbmUgTFBPX0NBTF9URVNUX1NUQVRVU19DT1VOVF9NU0IgICAgICAgICAgICAxNQotI2RlZmluZSBMUE9fQ0FMX1RFU1RfU1RBVFVTX0NPVU5UX0xTQiAgICAgICAgICAgIDAKLSNkZWZpbmUgTFBPX0NBTF9URVNUX1NUQVRVU19DT1VOVF9NQVNLICAgICAgICAgICAweDAwMDBmZmZmCi0jZGVmaW5lIExQT19DQUxfVEVTVF9TVEFUVVNfQ09VTlRfR0VUKHgpICAgICAgICAgKCgoeCkgJiBMUE9fQ0FMX1RFU1RfU1RBVFVTX0NPVU5UX01BU0spID4+IExQT19DQUxfVEVTVF9TVEFUVVNfQ09VTlRfTFNCKQotI2RlZmluZSBMUE9fQ0FMX1RFU1RfU1RBVFVTX0NPVU5UX1NFVCh4KSAgICAgICAgICgoKHgpIDw8IExQT19DQUxfVEVTVF9TVEFUVVNfQ09VTlRfTFNCKSAmIExQT19DQUxfVEVTVF9TVEFUVVNfQ09VTlRfTUFTSykKLQotI2RlZmluZSBDSElQX0lEX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZWMKLSNkZWZpbmUgQ0hJUF9JRF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGVjCi0jZGVmaW5lIENISVBfSURfREVWSUNFX0lEX01TQiAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgQ0hJUF9JRF9ERVZJQ0VfSURfTFNCICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBDSElQX0lEX0RFVklDRV9JRF9NQVNLICAgICAgICAgICAgICAgICAgIDB4ZmZmZjAwMDAKLSNkZWZpbmUgQ0hJUF9JRF9ERVZJQ0VfSURfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIENISVBfSURfREVWSUNFX0lEX01BU0spID4+IENISVBfSURfREVWSUNFX0lEX0xTQikKLSNkZWZpbmUgQ0hJUF9JRF9ERVZJQ0VfSURfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCBDSElQX0lEX0RFVklDRV9JRF9MU0IpICYgQ0hJUF9JRF9ERVZJQ0VfSURfTUFTSykKLSNkZWZpbmUgQ0hJUF9JRF9DT05GSUdfSURfTVNCICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBDSElQX0lEX0NPTkZJR19JRF9MU0IgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgQ0hJUF9JRF9DT05GSUdfSURfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDBmZmYwCi0jZGVmaW5lIENISVBfSURfQ09ORklHX0lEX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBDSElQX0lEX0NPTkZJR19JRF9NQVNLKSA+PiBDSElQX0lEX0NPTkZJR19JRF9MU0IpCi0jZGVmaW5lIENISVBfSURfQ09ORklHX0lEX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgQ0hJUF9JRF9DT05GSUdfSURfTFNCKSAmIENISVBfSURfQ09ORklHX0lEX01BU0spCi0jZGVmaW5lIENISVBfSURfVkVSU0lPTl9JRF9NU0IgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBDSElQX0lEX1ZFUlNJT05fSURfTFNCICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgQ0hJUF9JRF9WRVJTSU9OX0lEX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDAwMDBmCi0jZGVmaW5lIENISVBfSURfVkVSU0lPTl9JRF9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiBDSElQX0lEX1ZFUlNJT05fSURfTUFTSykgPj4gQ0hJUF9JRF9WRVJTSU9OX0lEX0xTQikKLSNkZWZpbmUgQ0hJUF9JRF9WRVJTSU9OX0lEX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCBDSElQX0lEX1ZFUlNJT05fSURfTFNCKSAmIENISVBfSURfVkVSU0lPTl9JRF9NQVNLKQotCi0jZGVmaW5lIERFUklWRURfUlRDX0NMS19BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmMAotI2RlZmluZSBERVJJVkVEX1JUQ19DTEtfT0ZGU0VUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZjAKLSNkZWZpbmUgREVSSVZFRF9SVENfQ0xLX0VYVEVSTkFMX0RFVEVDVF9FTl9NU0IgICAyMAotI2RlZmluZSBERVJJVkVEX1JUQ19DTEtfRVhURVJOQUxfREVURUNUX0VOX0xTQiAgIDIwCi0jZGVmaW5lIERFUklWRURfUlRDX0NMS19FWFRFUk5BTF9ERVRFQ1RfRU5fTUFTSyAgMHgwMDEwMDAwMAotI2RlZmluZSBERVJJVkVEX1JUQ19DTEtfRVhURVJOQUxfREVURUNUX0VOX0dFVCh4KSAoKCh4KSAmIERFUklWRURfUlRDX0NMS19FWFRFUk5BTF9ERVRFQ1RfRU5fTUFTSykgPj4gREVSSVZFRF9SVENfQ0xLX0VYVEVSTkFMX0RFVEVDVF9FTl9MU0IpCi0jZGVmaW5lIERFUklWRURfUlRDX0NMS19FWFRFUk5BTF9ERVRFQ1RfRU5fU0VUKHgpICgoKHgpIDw8IERFUklWRURfUlRDX0NMS19FWFRFUk5BTF9ERVRFQ1RfRU5fTFNCKSAmIERFUklWRURfUlRDX0NMS19FWFRFUk5BTF9ERVRFQ1RfRU5fTUFTSykKLSNkZWZpbmUgREVSSVZFRF9SVENfQ0xLX0VYVEVSTkFMX0RFVEVDVF9NU0IgICAgICAxOAotI2RlZmluZSBERVJJVkVEX1JUQ19DTEtfRVhURVJOQUxfREVURUNUX0xTQiAgICAgIDE4Ci0jZGVmaW5lIERFUklWRURfUlRDX0NMS19FWFRFUk5BTF9ERVRFQ1RfTUFTSyAgICAgMHgwMDA0MDAwMAotI2RlZmluZSBERVJJVkVEX1JUQ19DTEtfRVhURVJOQUxfREVURUNUX0dFVCh4KSAgICgoKHgpICYgREVSSVZFRF9SVENfQ0xLX0VYVEVSTkFMX0RFVEVDVF9NQVNLKSA+PiBERVJJVkVEX1JUQ19DTEtfRVhURVJOQUxfREVURUNUX0xTQikKLSNkZWZpbmUgREVSSVZFRF9SVENfQ0xLX0VYVEVSTkFMX0RFVEVDVF9TRVQoeCkgICAoKCh4KSA8PCBERVJJVkVEX1JUQ19DTEtfRVhURVJOQUxfREVURUNUX0xTQikgJiBERVJJVkVEX1JUQ19DTEtfRVhURVJOQUxfREVURUNUX01BU0spCi0jZGVmaW5lIERFUklWRURfUlRDX0NMS19GT1JDRV9NU0IgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgREVSSVZFRF9SVENfQ0xLX0ZPUkNFX0xTQiAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBERVJJVkVEX1JUQ19DTEtfRk9SQ0VfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKLSNkZWZpbmUgREVSSVZFRF9SVENfQ0xLX0ZPUkNFX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIERFUklWRURfUlRDX0NMS19GT1JDRV9NQVNLKSA+PiBERVJJVkVEX1JUQ19DTEtfRk9SQ0VfTFNCKQotI2RlZmluZSBERVJJVkVEX1JUQ19DTEtfRk9SQ0VfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IERFUklWRURfUlRDX0NMS19GT1JDRV9MU0IpICYgREVSSVZFRF9SVENfQ0xLX0ZPUkNFX01BU0spCi0jZGVmaW5lIERFUklWRURfUlRDX0NMS19QRVJJT0RfTVNCICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgREVSSVZFRF9SVENfQ0xLX1BFUklPRF9MU0IgICAgICAgICAgICAgICAxCi0jZGVmaW5lIERFUklWRURfUlRDX0NMS19QRVJJT0RfTUFTSyAgICAgICAgICAgICAgMHgwMDAwZmZmZQotI2RlZmluZSBERVJJVkVEX1JUQ19DTEtfUEVSSU9EX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgREVSSVZFRF9SVENfQ0xLX1BFUklPRF9NQVNLKSA+PiBERVJJVkVEX1JUQ19DTEtfUEVSSU9EX0xTQikKLSNkZWZpbmUgREVSSVZFRF9SVENfQ0xLX1BFUklPRF9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBERVJJVkVEX1JUQ19DTEtfUEVSSU9EX0xTQikgJiBERVJJVkVEX1JUQ19DTEtfUEVSSU9EX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9TTFAzMl9NT0RFX0FERFJFU1MgICAgICAgICAgICAgICAweDAwMDAwMGY0Ci0jZGVmaW5lIE1BQ19QQ1VfU0xQMzJfTU9ERV9PRkZTRVQgICAgICAgICAgICAgICAgMHgwMDAwMDBmNAotI2RlZmluZSBNQUNfUENVX1NMUDMyX01PREVfVFNGX1dSSVRFX1BFTkRJTkdfTVNCIDIxCi0jZGVmaW5lIE1BQ19QQ1VfU0xQMzJfTU9ERV9UU0ZfV1JJVEVfUEVORElOR19MU0IgMjEKLSNkZWZpbmUgTUFDX1BDVV9TTFAzMl9NT0RFX1RTRl9XUklURV9QRU5ESU5HX01BU0sgMHgwMDIwMDAwMAotI2RlZmluZSBNQUNfUENVX1NMUDMyX01PREVfVFNGX1dSSVRFX1BFTkRJTkdfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9TTFAzMl9NT0RFX1RTRl9XUklURV9QRU5ESU5HX01BU0spID4+IE1BQ19QQ1VfU0xQMzJfTU9ERV9UU0ZfV1JJVEVfUEVORElOR19MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfU0xQMzJfTU9ERV9UU0ZfV1JJVEVfUEVORElOR19TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9TTFAzMl9NT0RFX1RTRl9XUklURV9QRU5ESU5HX0xTQikgJiBNQUNfUENVX1NMUDMyX01PREVfVFNGX1dSSVRFX1BFTkRJTkdfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9TTFAzMl9NT0RFX0hBTEZfQ0xLX0xBVEVOQ1lfTVNCICAxOQotI2RlZmluZSBNQUNfUENVX1NMUDMyX01PREVfSEFMRl9DTEtfTEFURU5DWV9MU0IgIDAKLSNkZWZpbmUgTUFDX1BDVV9TTFAzMl9NT0RFX0hBTEZfQ0xLX0xBVEVOQ1lfTUFTSyAweDAwMGZmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfU0xQMzJfTU9ERV9IQUxGX0NMS19MQVRFTkNZX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfU0xQMzJfTU9ERV9IQUxGX0NMS19MQVRFTkNZX01BU0spID4+IE1BQ19QQ1VfU0xQMzJfTU9ERV9IQUxGX0NMS19MQVRFTkNZX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9TTFAzMl9NT0RFX0hBTEZfQ0xLX0xBVEVOQ1lfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfU0xQMzJfTU9ERV9IQUxGX0NMS19MQVRFTkNZX0xTQikgJiBNQUNfUENVX1NMUDMyX01PREVfSEFMRl9DTEtfTEFURU5DWV9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfU0xQMzJfV0FLRV9BRERSRVNTICAgICAgICAgICAgICAgMHgwMDAwMDBmOAotI2RlZmluZSBNQUNfUENVX1NMUDMyX1dBS0VfT0ZGU0VUICAgICAgICAgICAgICAgIDB4MDAwMDAwZjgKLSNkZWZpbmUgTUFDX1BDVV9TTFAzMl9XQUtFX1hUTF9USU1FX01TQiAgICAgICAgICAxNQotI2RlZmluZSBNQUNfUENVX1NMUDMyX1dBS0VfWFRMX1RJTUVfTFNCICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9TTFAzMl9XQUtFX1hUTF9USU1FX01BU0sgICAgICAgICAweDAwMDBmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfU0xQMzJfV0FLRV9YVExfVElNRV9HRVQoeCkgICAgICAgKCgoeCkgJiBNQUNfUENVX1NMUDMyX1dBS0VfWFRMX1RJTUVfTUFTSykgPj4gTUFDX1BDVV9TTFAzMl9XQUtFX1hUTF9USU1FX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9TTFAzMl9XQUtFX1hUTF9USU1FX1NFVCh4KSAgICAgICAoKCh4KSA8PCBNQUNfUENVX1NMUDMyX1dBS0VfWFRMX1RJTUVfTFNCKSAmIE1BQ19QQ1VfU0xQMzJfV0FLRV9YVExfVElNRV9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfU0xQMzJfSU5DX0FERFJFU1MgICAgICAgICAgICAgICAgMHgwMDAwMDBmYwotI2RlZmluZSBNQUNfUENVX1NMUDMyX0lOQ19PRkZTRVQgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmMKLSNkZWZpbmUgTUFDX1BDVV9TTFAzMl9JTkNfVFNGX0lOQ19NU0IgICAgICAgICAgICAxOQotI2RlZmluZSBNQUNfUENVX1NMUDMyX0lOQ19UU0ZfSU5DX0xTQiAgICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9TTFAzMl9JTkNfVFNGX0lOQ19NQVNLICAgICAgICAgICAweDAwMGZmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfU0xQMzJfSU5DX1RTRl9JTkNfR0VUKHgpICAgICAgICAgKCgoeCkgJiBNQUNfUENVX1NMUDMyX0lOQ19UU0ZfSU5DX01BU0spID4+IE1BQ19QQ1VfU0xQMzJfSU5DX1RTRl9JTkNfTFNCKQotI2RlZmluZSBNQUNfUENVX1NMUDMyX0lOQ19UU0ZfSU5DX1NFVCh4KSAgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfU0xQMzJfSU5DX1RTRl9JTkNfTFNCKSAmIE1BQ19QQ1VfU0xQMzJfSU5DX1RTRl9JTkNfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX1NMUF9NSUIxX0FERFJFU1MgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKLSNkZWZpbmUgTUFDX1BDVV9TTFBfTUlCMV9PRkZTRVQgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCi0jZGVmaW5lIE1BQ19QQ1VfU0xQX01JQjFfU0xFRVBfQ05UX01TQiAgICAgICAgICAgMzEKLSNkZWZpbmUgTUFDX1BDVV9TTFBfTUlCMV9TTEVFUF9DTlRfTFNCICAgICAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfU0xQX01JQjFfU0xFRVBfQ05UX01BU0sgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBNQUNfUENVX1NMUF9NSUIxX1NMRUVQX0NOVF9HRVQoeCkgICAgICAgICgoKHgpICYgTUFDX1BDVV9TTFBfTUlCMV9TTEVFUF9DTlRfTUFTSykgPj4gTUFDX1BDVV9TTFBfTUlCMV9TTEVFUF9DTlRfTFNCKQotI2RlZmluZSBNQUNfUENVX1NMUF9NSUIxX1NMRUVQX0NOVF9TRVQoeCkgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfU0xQX01JQjFfU0xFRVBfQ05UX0xTQikgJiBNQUNfUENVX1NMUF9NSUIxX1NMRUVQX0NOVF9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfU0xQX01JQjJfQUREUkVTUyAgICAgICAgICAgICAgICAgMHgwMDAwMDEwNAotI2RlZmluZSBNQUNfUENVX1NMUF9NSUIyX09GRlNFVCAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDQKLSNkZWZpbmUgTUFDX1BDVV9TTFBfTUlCMl9DWUNMRV9DTlRfTVNCICAgICAgICAgICAzMQotI2RlZmluZSBNQUNfUENVX1NMUF9NSUIyX0NZQ0xFX0NOVF9MU0IgICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9TTFBfTUlCMl9DWUNMRV9DTlRfTUFTSyAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfU0xQX01JQjJfQ1lDTEVfQ05UX0dFVCh4KSAgICAgICAgKCgoeCkgJiBNQUNfUENVX1NMUF9NSUIyX0NZQ0xFX0NOVF9NQVNLKSA+PiBNQUNfUENVX1NMUF9NSUIyX0NZQ0xFX0NOVF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfU0xQX01JQjJfQ1lDTEVfQ05UX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9TTFBfTUlCMl9DWUNMRV9DTlRfTFNCKSAmIE1BQ19QQ1VfU0xQX01JQjJfQ1lDTEVfQ05UX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9TTFBfTUlCM19BRERSRVNTICAgICAgICAgICAgICAgICAweDAwMDAwMTA4Ci0jZGVmaW5lIE1BQ19QQ1VfU0xQX01JQjNfT0ZGU0VUICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwOAotI2RlZmluZSBNQUNfUENVX1NMUF9NSUIzX1BFTkRJTkdfTVNCICAgICAgICAgICAgIDEKLSNkZWZpbmUgTUFDX1BDVV9TTFBfTUlCM19QRU5ESU5HX0xTQiAgICAgICAgICAgICAxCi0jZGVmaW5lIE1BQ19QQ1VfU0xQX01JQjNfUEVORElOR19NQVNLICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBNQUNfUENVX1NMUF9NSUIzX1BFTkRJTkdfR0VUKHgpICAgICAgICAgICgoKHgpICYgTUFDX1BDVV9TTFBfTUlCM19QRU5ESU5HX01BU0spID4+IE1BQ19QQ1VfU0xQX01JQjNfUEVORElOR19MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfU0xQX01JQjNfUEVORElOR19TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9TTFBfTUlCM19QRU5ESU5HX0xTQikgJiBNQUNfUENVX1NMUF9NSUIzX1BFTkRJTkdfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9TTFBfTUlCM19DTFJfQ05UX01TQiAgICAgICAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfU0xQX01JQjNfQ0xSX0NOVF9MU0IgICAgICAgICAgICAgMAotI2RlZmluZSBNQUNfUENVX1NMUF9NSUIzX0NMUl9DTlRfTUFTSyAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgTUFDX1BDVV9TTFBfTUlCM19DTFJfQ05UX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfU0xQX01JQjNfQ0xSX0NOVF9NQVNLKSA+PiBNQUNfUENVX1NMUF9NSUIzX0NMUl9DTlRfTFNCKQotI2RlZmluZSBNQUNfUENVX1NMUF9NSUIzX0NMUl9DTlRfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfU0xQX01JQjNfQ0xSX0NOVF9MU0IpICYgTUFDX1BDVV9TTFBfTUlCM19DTFJfQ05UX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9TTFBfQkVBQ09OX0FERFJFU1MgICAgICAgICAgICAgICAweDAwMDAwMTBjCi0jZGVmaW5lIE1BQ19QQ1VfU0xQX0JFQUNPTl9PRkZTRVQgICAgICAgICAgICAgICAgMHgwMDAwMDEwYwotI2RlZmluZSBNQUNfUENVX1NMUF9CRUFDT05fQk1JU1NfVElNRU9VVF9FTkFCTEVfTVNCIDI0Ci0jZGVmaW5lIE1BQ19QQ1VfU0xQX0JFQUNPTl9CTUlTU19USU1FT1VUX0VOQUJMRV9MU0IgMjQKLSNkZWZpbmUgTUFDX1BDVV9TTFBfQkVBQ09OX0JNSVNTX1RJTUVPVVRfRU5BQkxFX01BU0sgMHgwMTAwMDAwMAotI2RlZmluZSBNQUNfUENVX1NMUF9CRUFDT05fQk1JU1NfVElNRU9VVF9FTkFCTEVfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9TTFBfQkVBQ09OX0JNSVNTX1RJTUVPVVRfRU5BQkxFX01BU0spID4+IE1BQ19QQ1VfU0xQX0JFQUNPTl9CTUlTU19USU1FT1VUX0VOQUJMRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfU0xQX0JFQUNPTl9CTUlTU19USU1FT1VUX0VOQUJMRV9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9TTFBfQkVBQ09OX0JNSVNTX1RJTUVPVVRfRU5BQkxFX0xTQikgJiBNQUNfUENVX1NMUF9CRUFDT05fQk1JU1NfVElNRU9VVF9FTkFCTEVfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9TTFBfQkVBQ09OX0JNSVNTX1RJTUVPVVRfTVNCICAgICAyMwotI2RlZmluZSBNQUNfUENVX1NMUF9CRUFDT05fQk1JU1NfVElNRU9VVF9MU0IgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9TTFBfQkVBQ09OX0JNSVNTX1RJTUVPVVRfTUFTSyAgICAweDAwZmZmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfU0xQX0JFQUNPTl9CTUlTU19USU1FT1VUX0dFVCh4KSAgKCgoeCkgJiBNQUNfUENVX1NMUF9CRUFDT05fQk1JU1NfVElNRU9VVF9NQVNLKSA+PiBNQUNfUENVX1NMUF9CRUFDT05fQk1JU1NfVElNRU9VVF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfU0xQX0JFQUNPTl9CTUlTU19USU1FT1VUX1NFVCh4KSAgKCgoeCkgPDwgTUFDX1BDVV9TTFBfQkVBQ09OX0JNSVNTX1RJTUVPVVRfTFNCKSAmIE1BQ19QQ1VfU0xQX0JFQUNPTl9CTUlTU19USU1FT1VUX01BU0spCi0KLSNkZWZpbmUgUE9XRVJfUkVHX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTEwCi0jZGVmaW5lIFBPV0VSX1JFR19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDExMAotI2RlZmluZSBQT1dFUl9SRUdfVkxWTF9NU0IgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBPV0VSX1JFR19WTFZMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQT1dFUl9SRUdfVkxWTF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBmMDAKLSNkZWZpbmUgUE9XRVJfUkVHX1ZMVkxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFBPV0VSX1JFR19WTFZMX01BU0spID4+IFBPV0VSX1JFR19WTFZMX0xTQikKLSNkZWZpbmUgUE9XRVJfUkVHX1ZMVkxfU0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBQT1dFUl9SRUdfVkxWTF9MU0IpICYgUE9XRVJfUkVHX1ZMVkxfTUFTSykKLSNkZWZpbmUgUE9XRVJfUkVHX0NQVV9JTlRfRU5BQkxFX01TQiAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBPV0VSX1JFR19DUFVfSU5UX0VOQUJMRV9MU0IgICAgICAgICAgICAgNwotI2RlZmluZSBQT1dFUl9SRUdfQ1BVX0lOVF9FTkFCTEVfTUFTSyAgICAgICAgICAgIDB4MDAwMDAwODAKLSNkZWZpbmUgUE9XRVJfUkVHX0NQVV9JTlRfRU5BQkxFX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIFBPV0VSX1JFR19DUFVfSU5UX0VOQUJMRV9NQVNLKSA+PiBQT1dFUl9SRUdfQ1BVX0lOVF9FTkFCTEVfTFNCKQotI2RlZmluZSBQT1dFUl9SRUdfQ1BVX0lOVF9FTkFCTEVfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IFBPV0VSX1JFR19DUFVfSU5UX0VOQUJMRV9MU0IpICYgUE9XRVJfUkVHX0NQVV9JTlRfRU5BQkxFX01BU0spCi0jZGVmaW5lIFBPV0VSX1JFR19XTEFOX0lTT19ESVNfTVNCICAgICAgICAgICAgICAgNgotI2RlZmluZSBQT1dFUl9SRUdfV0xBTl9JU09fRElTX0xTQiAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUE9XRVJfUkVHX1dMQU5fSVNPX0RJU19NQVNLICAgICAgICAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIFBPV0VSX1JFR19XTEFOX0lTT19ESVNfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBQT1dFUl9SRUdfV0xBTl9JU09fRElTX01BU0spID4+IFBPV0VSX1JFR19XTEFOX0lTT19ESVNfTFNCKQotI2RlZmluZSBQT1dFUl9SRUdfV0xBTl9JU09fRElTX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IFBPV0VSX1JFR19XTEFOX0lTT19ESVNfTFNCKSAmIFBPV0VSX1JFR19XTEFOX0lTT19ESVNfTUFTSykKLSNkZWZpbmUgUE9XRVJfUkVHX1dMQU5fSVNPX0NOVExfTVNCICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBPV0VSX1JFR19XTEFOX0lTT19DTlRMX0xTQiAgICAgICAgICAgICAgNQotI2RlZmluZSBQT1dFUl9SRUdfV0xBTl9JU09fQ05UTF9NQVNLICAgICAgICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgUE9XRVJfUkVHX1dMQU5fSVNPX0NOVExfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIFBPV0VSX1JFR19XTEFOX0lTT19DTlRMX01BU0spID4+IFBPV0VSX1JFR19XTEFOX0lTT19DTlRMX0xTQikKLSNkZWZpbmUgUE9XRVJfUkVHX1dMQU5fSVNPX0NOVExfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCBQT1dFUl9SRUdfV0xBTl9JU09fQ05UTF9MU0IpICYgUE9XRVJfUkVHX1dMQU5fSVNPX0NOVExfTUFTSykKLSNkZWZpbmUgUE9XRVJfUkVHX1JBRElPX1BXRF9FTl9NU0IgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBPV0VSX1JFR19SQURJT19QV0RfRU5fTFNCICAgICAgICAgICAgICAgNAotI2RlZmluZSBQT1dFUl9SRUdfUkFESU9fUFdEX0VOX01BU0sgICAgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgUE9XRVJfUkVHX1JBRElPX1BXRF9FTl9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFBPV0VSX1JFR19SQURJT19QV0RfRU5fTUFTSykgPj4gUE9XRVJfUkVHX1JBRElPX1BXRF9FTl9MU0IpCi0jZGVmaW5lIFBPV0VSX1JFR19SQURJT19QV0RfRU5fU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgUE9XRVJfUkVHX1JBRElPX1BXRF9FTl9MU0IpICYgUE9XRVJfUkVHX1JBRElPX1BXRF9FTl9NQVNLKQotI2RlZmluZSBQT1dFUl9SRUdfU09DX1NDQUxFX0VOX01TQiAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUE9XRVJfUkVHX1NPQ19TQ0FMRV9FTl9MU0IgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBPV0VSX1JFR19TT0NfU0NBTEVfRU5fTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBQT1dFUl9SRUdfU09DX1NDQUxFX0VOX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgUE9XRVJfUkVHX1NPQ19TQ0FMRV9FTl9NQVNLKSA+PiBQT1dFUl9SRUdfU09DX1NDQUxFX0VOX0xTQikKLSNkZWZpbmUgUE9XRVJfUkVHX1NPQ19TQ0FMRV9FTl9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBQT1dFUl9SRUdfU09DX1NDQUxFX0VOX0xTQikgJiBQT1dFUl9SRUdfU09DX1NDQUxFX0VOX01BU0spCi0jZGVmaW5lIFBPV0VSX1JFR19XTEFOX1NDQUxFX0VOX01TQiAgICAgICAgICAgICAgMgotI2RlZmluZSBQT1dFUl9SRUdfV0xBTl9TQ0FMRV9FTl9MU0IgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUE9XRVJfUkVHX1dMQU5fU0NBTEVfRU5fTUFTSyAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFBPV0VSX1JFR19XTEFOX1NDQUxFX0VOX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBQT1dFUl9SRUdfV0xBTl9TQ0FMRV9FTl9NQVNLKSA+PiBQT1dFUl9SRUdfV0xBTl9TQ0FMRV9FTl9MU0IpCi0jZGVmaW5lIFBPV0VSX1JFR19XTEFOX1NDQUxFX0VOX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgUE9XRVJfUkVHX1dMQU5fU0NBTEVfRU5fTFNCKSAmIFBPV0VSX1JFR19XTEFOX1NDQUxFX0VOX01BU0spCi0jZGVmaW5lIFBPV0VSX1JFR19XTEFOX1BXRF9FTl9NU0IgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQT1dFUl9SRUdfV0xBTl9QV0RfRU5fTFNCICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUE9XRVJfUkVHX1dMQU5fUFdEX0VOX01BU0sgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFBPV0VSX1JFR19XTEFOX1BXRF9FTl9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBQT1dFUl9SRUdfV0xBTl9QV0RfRU5fTUFTSykgPj4gUE9XRVJfUkVHX1dMQU5fUFdEX0VOX0xTQikKLSNkZWZpbmUgUE9XRVJfUkVHX1dMQU5fUFdEX0VOX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBQT1dFUl9SRUdfV0xBTl9QV0RfRU5fTFNCKSAmIFBPV0VSX1JFR19XTEFOX1BXRF9FTl9NQVNLKQotI2RlZmluZSBQT1dFUl9SRUdfUE9XRVJfRU5fTVNCICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUE9XRVJfUkVHX1BPV0VSX0VOX0xTQiAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBPV0VSX1JFR19QT1dFUl9FTl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBQT1dFUl9SRUdfUE9XRVJfRU5fR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgUE9XRVJfUkVHX1BPV0VSX0VOX01BU0spID4+IFBPV0VSX1JFR19QT1dFUl9FTl9MU0IpCi0jZGVmaW5lIFBPV0VSX1JFR19QT1dFUl9FTl9TRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPDwgUE9XRVJfUkVHX1BPV0VSX0VOX0xTQikgJiBQT1dFUl9SRUdfUE9XRVJfRU5fTUFTSykKLQotI2RlZmluZSBDT1JFX0NMS19DVFJMX0FERFJFU1MgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMTQKLSNkZWZpbmUgQ09SRV9DTEtfQ1RSTF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTE0Ci0jZGVmaW5lIENPUkVfQ0xLX0NUUkxfRElWX01TQiAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBDT1JFX0NMS19DVFJMX0RJVl9MU0IgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgQ09SRV9DTEtfQ1RSTF9ESVZfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3Ci0jZGVmaW5lIENPUkVfQ0xLX0NUUkxfRElWX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBDT1JFX0NMS19DVFJMX0RJVl9NQVNLKSA+PiBDT1JFX0NMS19DVFJMX0RJVl9MU0IpCi0jZGVmaW5lIENPUkVfQ0xLX0NUUkxfRElWX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgQ09SRV9DTEtfQ1RSTF9ESVZfTFNCKSAmIENPUkVfQ0xLX0NUUkxfRElWX01BU0spCi0KLSNkZWZpbmUgU0RJT19TRVRVUF9DSVJDVUlUX0FERFJFU1MgICAgICAgICAgICAgICAweDAwMDAwMTIwCi0jZGVmaW5lIFNESU9fU0VUVVBfQ0lSQ1VJVF9PRkZTRVQgICAgICAgICAgICAgICAgMHgwMDAwMDEyMAotI2RlZmluZSBTRElPX1NFVFVQX0NJUkNVSVRfVkVDVE9SX01TQiAgICAgICAgICAgIDcKLSNkZWZpbmUgU0RJT19TRVRVUF9DSVJDVUlUX1ZFQ1RPUl9MU0IgICAgICAgICAgICAwCi0jZGVmaW5lIFNESU9fU0VUVVBfQ0lSQ1VJVF9WRUNUT1JfTUFTSyAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBTRElPX1NFVFVQX0NJUkNVSVRfVkVDVE9SX0dFVCh4KSAgICAgICAgICgoKHgpICYgU0RJT19TRVRVUF9DSVJDVUlUX1ZFQ1RPUl9NQVNLKSA+PiBTRElPX1NFVFVQX0NJUkNVSVRfVkVDVE9SX0xTQikKLSNkZWZpbmUgU0RJT19TRVRVUF9DSVJDVUlUX1ZFQ1RPUl9TRVQoeCkgICAgICAgICAoKCh4KSA8PCBTRElPX1NFVFVQX0NJUkNVSVRfVkVDVE9SX0xTQikgJiBTRElPX1NFVFVQX0NJUkNVSVRfVkVDVE9SX01BU0spCi0KLSNkZWZpbmUgU0RJT19TRVRVUF9DT05GSUdfQUREUkVTUyAgICAgICAgICAgICAgICAweDAwMDAwMTQwCi0jZGVmaW5lIFNESU9fU0VUVVBfQ09ORklHX09GRlNFVCAgICAgICAgICAgICAgICAgMHgwMDAwMDE0MAotI2RlZmluZSBTRElPX1NFVFVQX0NPTkZJR19FTkFCTEVfTVNCICAgICAgICAgICAgIDEKLSNkZWZpbmUgU0RJT19TRVRVUF9DT05GSUdfRU5BQkxFX0xTQiAgICAgICAgICAgICAxCi0jZGVmaW5lIFNESU9fU0VUVVBfQ09ORklHX0VOQUJMRV9NQVNLICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBTRElPX1NFVFVQX0NPTkZJR19FTkFCTEVfR0VUKHgpICAgICAgICAgICgoKHgpICYgU0RJT19TRVRVUF9DT05GSUdfRU5BQkxFX01BU0spID4+IFNESU9fU0VUVVBfQ09ORklHX0VOQUJMRV9MU0IpCi0jZGVmaW5lIFNESU9fU0VUVVBfQ09ORklHX0VOQUJMRV9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgU0RJT19TRVRVUF9DT05GSUdfRU5BQkxFX0xTQikgJiBTRElPX1NFVFVQX0NPTkZJR19FTkFCTEVfTUFTSykKLSNkZWZpbmUgU0RJT19TRVRVUF9DT05GSUdfQ0xFQVJfTVNCICAgICAgICAgICAgICAwCi0jZGVmaW5lIFNESU9fU0VUVVBfQ09ORklHX0NMRUFSX0xTQiAgICAgICAgICAgICAgMAotI2RlZmluZSBTRElPX1NFVFVQX0NPTkZJR19DTEVBUl9NQVNLICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgU0RJT19TRVRVUF9DT05GSUdfQ0xFQVJfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIFNESU9fU0VUVVBfQ09ORklHX0NMRUFSX01BU0spID4+IFNESU9fU0VUVVBfQ09ORklHX0NMRUFSX0xTQikKLSNkZWZpbmUgU0RJT19TRVRVUF9DT05GSUdfQ0xFQVJfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCBTRElPX1NFVFVQX0NPTkZJR19DTEVBUl9MU0IpICYgU0RJT19TRVRVUF9DT05GSUdfQ0xFQVJfTUFTSykKLQotI2RlZmluZSBDUFVfU0VUVVBfQ09ORklHX0FERFJFU1MgICAgICAgICAgICAgICAgIDB4MDAwMDAxNDQKLSNkZWZpbmUgQ1BVX1NFVFVQX0NPTkZJR19PRkZTRVQgICAgICAgICAgICAgICAgICAweDAwMDAwMTQ0Ci0jZGVmaW5lIENQVV9TRVRVUF9DT05GSUdfRU5BQkxFX01TQiAgICAgICAgICAgICAgMQotI2RlZmluZSBDUFVfU0VUVVBfQ09ORklHX0VOQUJMRV9MU0IgICAgICAgICAgICAgIDEKLSNkZWZpbmUgQ1BVX1NFVFVQX0NPTkZJR19FTkFCTEVfTUFTSyAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIENQVV9TRVRVUF9DT05GSUdfRU5BQkxFX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBDUFVfU0VUVVBfQ09ORklHX0VOQUJMRV9NQVNLKSA+PiBDUFVfU0VUVVBfQ09ORklHX0VOQUJMRV9MU0IpCi0jZGVmaW5lIENQVV9TRVRVUF9DT05GSUdfRU5BQkxFX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgQ1BVX1NFVFVQX0NPTkZJR19FTkFCTEVfTFNCKSAmIENQVV9TRVRVUF9DT05GSUdfRU5BQkxFX01BU0spCi0jZGVmaW5lIENQVV9TRVRVUF9DT05GSUdfQ0xFQVJfTVNCICAgICAgICAgICAgICAgMAotI2RlZmluZSBDUFVfU0VUVVBfQ09ORklHX0NMRUFSX0xTQiAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgQ1BVX1NFVFVQX0NPTkZJR19DTEVBUl9NQVNLICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIENQVV9TRVRVUF9DT05GSUdfQ0xFQVJfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBDUFVfU0VUVVBfQ09ORklHX0NMRUFSX01BU0spID4+IENQVV9TRVRVUF9DT05GSUdfQ0xFQVJfTFNCKQotI2RlZmluZSBDUFVfU0VUVVBfQ09ORklHX0NMRUFSX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IENQVV9TRVRVUF9DT05GSUdfQ0xFQVJfTFNCKSAmIENQVV9TRVRVUF9DT05GSUdfQ0xFQVJfTUFTSykKLQotI2RlZmluZSBDUFVfU0VUVVBfQ0lSQ1VJVF9BRERSRVNTICAgICAgICAgICAgICAgIDB4MDAwMDAxNjAKLSNkZWZpbmUgQ1BVX1NFVFVQX0NJUkNVSVRfT0ZGU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMTYwCi0jZGVmaW5lIENQVV9TRVRVUF9DSVJDVUlUX1ZFQ1RPUl9NU0IgICAgICAgICAgICAgNwotI2RlZmluZSBDUFVfU0VUVVBfQ0lSQ1VJVF9WRUNUT1JfTFNCICAgICAgICAgICAgIDAKLSNkZWZpbmUgQ1BVX1NFVFVQX0NJUkNVSVRfVkVDVE9SX01BU0sgICAgICAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIENQVV9TRVRVUF9DSVJDVUlUX1ZFQ1RPUl9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBDUFVfU0VUVVBfQ0lSQ1VJVF9WRUNUT1JfTUFTSykgPj4gQ1BVX1NFVFVQX0NJUkNVSVRfVkVDVE9SX0xTQikKLSNkZWZpbmUgQ1BVX1NFVFVQX0NJUkNVSVRfVkVDVE9SX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBDUFVfU0VUVVBfQ0lSQ1VJVF9WRUNUT1JfTFNCKSAmIENQVV9TRVRVUF9DSVJDVUlUX1ZFQ1RPUl9NQVNLKQotCi0jZGVmaW5lIEJCX1NFVFVQX0NPTkZJR19BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMDE4MAotI2RlZmluZSBCQl9TRVRVUF9DT05GSUdfT0ZGU0VUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxODAKLSNkZWZpbmUgQkJfU0VUVVBfQ09ORklHX0VOQUJMRV9NU0IgICAgICAgICAgICAgICAxCi0jZGVmaW5lIEJCX1NFVFVQX0NPTkZJR19FTkFCTEVfTFNCICAgICAgICAgICAgICAgMQotI2RlZmluZSBCQl9TRVRVUF9DT05GSUdfRU5BQkxFX01BU0sgICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgQkJfU0VUVVBfQ09ORklHX0VOQUJMRV9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIEJCX1NFVFVQX0NPTkZJR19FTkFCTEVfTUFTSykgPj4gQkJfU0VUVVBfQ09ORklHX0VOQUJMRV9MU0IpCi0jZGVmaW5lIEJCX1NFVFVQX0NPTkZJR19FTkFCTEVfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgQkJfU0VUVVBfQ09ORklHX0VOQUJMRV9MU0IpICYgQkJfU0VUVVBfQ09ORklHX0VOQUJMRV9NQVNLKQotI2RlZmluZSBCQl9TRVRVUF9DT05GSUdfQ0xFQVJfTVNCICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgQkJfU0VUVVBfQ09ORklHX0NMRUFSX0xTQiAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEJCX1NFVFVQX0NPTkZJR19DTEVBUl9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBCQl9TRVRVUF9DT05GSUdfQ0xFQVJfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgQkJfU0VUVVBfQ09ORklHX0NMRUFSX01BU0spID4+IEJCX1NFVFVQX0NPTkZJR19DTEVBUl9MU0IpCi0jZGVmaW5lIEJCX1NFVFVQX0NPTkZJR19DTEVBUl9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgQkJfU0VUVVBfQ09ORklHX0NMRUFSX0xTQikgJiBCQl9TRVRVUF9DT05GSUdfQ0xFQVJfTUFTSykKLQotI2RlZmluZSBCQl9TRVRVUF9DSVJDVUlUX0FERFJFU1MgICAgICAgICAgICAgICAgIDB4MDAwMDAxYTAKLSNkZWZpbmUgQkJfU0VUVVBfQ0lSQ1VJVF9PRkZTRVQgICAgICAgICAgICAgICAgICAweDAwMDAwMWEwCi0jZGVmaW5lIEJCX1NFVFVQX0NJUkNVSVRfVkVDVE9SX01TQiAgICAgICAgICAgICAgNwotI2RlZmluZSBCQl9TRVRVUF9DSVJDVUlUX1ZFQ1RPUl9MU0IgICAgICAgICAgICAgIDAKLSNkZWZpbmUgQkJfU0VUVVBfQ0lSQ1VJVF9WRUNUT1JfTUFTSyAgICAgICAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIEJCX1NFVFVQX0NJUkNVSVRfVkVDVE9SX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBCQl9TRVRVUF9DSVJDVUlUX1ZFQ1RPUl9NQVNLKSA+PiBCQl9TRVRVUF9DSVJDVUlUX1ZFQ1RPUl9MU0IpCi0jZGVmaW5lIEJCX1NFVFVQX0NJUkNVSVRfVkVDVE9SX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgQkJfU0VUVVBfQ0lSQ1VJVF9WRUNUT1JfTFNCKSAmIEJCX1NFVFVQX0NJUkNVSVRfVkVDVE9SX01BU0spCi0KLSNkZWZpbmUgR1BJT19XQUtFVVBfQ09OVFJPTF9BRERSRVNTICAgICAgICAgICAgICAweDAwMDAwMWMwCi0jZGVmaW5lIEdQSU9fV0FLRVVQX0NPTlRST0xfT0ZGU0VUICAgICAgICAgICAgICAgMHgwMDAwMDFjMAotI2RlZmluZSBHUElPX1dBS0VVUF9DT05UUk9MX0VOQUJMRV9NU0IgICAgICAgICAgIDAKLSNkZWZpbmUgR1BJT19XQUtFVVBfQ09OVFJPTF9FTkFCTEVfTFNCICAgICAgICAgICAwCi0jZGVmaW5lIEdQSU9fV0FLRVVQX0NPTlRST0xfRU5BQkxFX01BU0sgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBHUElPX1dBS0VVUF9DT05UUk9MX0VOQUJMRV9HRVQoeCkgICAgICAgICgoKHgpICYgR1BJT19XQUtFVVBfQ09OVFJPTF9FTkFCTEVfTUFTSykgPj4gR1BJT19XQUtFVVBfQ09OVFJPTF9FTkFCTEVfTFNCKQotI2RlZmluZSBHUElPX1dBS0VVUF9DT05UUk9MX0VOQUJMRV9TRVQoeCkgICAgICAgICgoKHgpIDw8IEdQSU9fV0FLRVVQX0NPTlRST0xfRU5BQkxFX0xTQikgJiBHUElPX1dBS0VVUF9DT05UUk9MX0VOQUJMRV9NQVNLKQotCi0KLSNpZm5kZWYgX19BU1NFTUJMRVJfXwotCi10eXBlZGVmIHN0cnVjdCBydGNfcmVnX3JlZ19zIHsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHJlc2V0X2NvbnRyb2w7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB4dGFsX2NvbnRyb2w7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB0Y3hvX2RldGVjdDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHh0YWxfdGVzdDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHF1YWRyYXR1cmU7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBwbGxfY29udHJvbDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHBsbF9zZXR0bGU7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB4dGFsX3NldHRsZTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGNwdV9jbG9jazsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGNsb2NrX291dDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGNsb2NrX2NvbnRyb2w7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBiaWFzX292ZXJyaWRlOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2R0X2NvbnRyb2w7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3ZHRfc3RhdHVzOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2R0OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2R0X2NvdW50OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2R0X3Jlc2V0OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgaW50X3N0YXR1czsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGxmX3RpbWVyMDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGxmX3RpbWVyX2NvdW50MDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGxmX3RpbWVyX2NvbnRyb2wwOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbGZfdGltZXJfc3RhdHVzMDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGxmX3RpbWVyMTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGxmX3RpbWVyX2NvdW50MTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGxmX3RpbWVyX2NvbnRyb2wxOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbGZfdGltZXJfc3RhdHVzMTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGxmX3RpbWVyMjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGxmX3RpbWVyX2NvdW50MjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGxmX3RpbWVyX2NvbnRyb2wyOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbGZfdGltZXJfc3RhdHVzMjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGxmX3RpbWVyMzsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGxmX3RpbWVyX2NvdW50MzsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGxmX3RpbWVyX2NvbnRyb2wzOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbGZfdGltZXJfc3RhdHVzMzsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGhmX3RpbWVyOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgaGZfdGltZXJfY291bnQ7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBoZl9sZl9jb3VudDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGhmX3RpbWVyX2NvbnRyb2w7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBoZl90aW1lcl9zdGF0dXM7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBydGNfY29udHJvbDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHJ0Y190aW1lOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcnRjX2RhdGU7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBydGNfc2V0X3RpbWU7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBydGNfc2V0X2RhdGU7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBydGNfc2V0X2FsYXJtOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcnRjX2NvbmZpZzsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHJ0Y19hbGFybV9zdGF0dXM7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB1YXJ0X3dha2V1cDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHJlc2V0X2NhdXNlOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgc3lzdGVtX3NsZWVwOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgc2Rpb193cmFwcGVyOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3NsZWVwX2NvbnRyb2w7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBrZWVwX2F3YWtlOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbHBvX2NhbF90aW1lOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbHBvX2luaXRfZGl2aWRlbmRfaW50OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbHBvX2luaXRfZGl2aWRlbmRfZnJhY3Rpb247Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBscG9fY2FsOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbHBvX2NhbF90ZXN0X2NvbnRyb2w7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBscG9fY2FsX3Rlc3Rfc3RhdHVzOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY2hpcF9pZDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGRlcml2ZWRfcnRjX2NsazsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3Vfc2xwMzJfbW9kZTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3Vfc2xwMzJfd2FrZTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3Vfc2xwMzJfaW5jOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9zbHBfbWliMTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3Vfc2xwX21pYjI7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X3NscF9taWIzOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9zbHBfYmVhY29uOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcG93ZXJfcmVnOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY29yZV9jbGtfY3RybDsKLSAgdW5zaWduZWQgY2hhciBwYWQwWzhdOyAvKiBwYWQgdG8gMHgxMjAgKi8KLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHNkaW9fc2V0dXBfY2lyY3VpdFs4XTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHNkaW9fc2V0dXBfY29uZmlnOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY3B1X3NldHVwX2NvbmZpZzsKLSAgdW5zaWduZWQgY2hhciBwYWQxWzI0XTsgLyogcGFkIHRvIDB4MTYwICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBjcHVfc2V0dXBfY2lyY3VpdFs4XTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGJiX3NldHVwX2NvbmZpZzsKLSAgdW5zaWduZWQgY2hhciBwYWQyWzI4XTsgLyogcGFkIHRvIDB4MWEwICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBiYl9zZXR1cF9jaXJjdWl0WzhdOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZ3Bpb193YWtldXBfY29udHJvbDsKLX0gcnRjX3JlZ19yZWdfdDsKLQotI2VuZGlmIC8qIF9fQVNTRU1CTEVSX18gKi8KLQotI2VuZGlmIC8qIF9SVENfUkVHX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzIuMC9ody9zaV9yZWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3Mi4wL2h3L3NpX3JlZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmZiOTljLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3Mi4wL2h3L3NpX3JlZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTg2ICswLDAgQEAKLSNpZm5kZWYgX1NJX1JFR19SRUdfSF8KLSNkZWZpbmUgX1NJX1JFR19SRUdfSF8KLQotI2RlZmluZSBTSV9DT05GSUdfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgU0lfQ09ORklHX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCi0jZGVmaW5lIFNJX0NPTkZJR19FUlJfSU5UX01TQiAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgU0lfQ09ORklHX0VSUl9JTlRfTFNCICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBTSV9DT05GSUdfRVJSX0lOVF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKLSNkZWZpbmUgU0lfQ09ORklHX0VSUl9JTlRfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIFNJX0NPTkZJR19FUlJfSU5UX01BU0spID4+IFNJX0NPTkZJR19FUlJfSU5UX0xTQikKLSNkZWZpbmUgU0lfQ09ORklHX0VSUl9JTlRfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCBTSV9DT05GSUdfRVJSX0lOVF9MU0IpICYgU0lfQ09ORklHX0VSUl9JTlRfTUFTSykKLSNkZWZpbmUgU0lfQ09ORklHX0JJRElSX09EX0RBVEFfTVNCICAgICAgICAgICAgICAxOAotI2RlZmluZSBTSV9DT05GSUdfQklESVJfT0RfREFUQV9MU0IgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFNJX0NPTkZJR19CSURJUl9PRF9EQVRBX01BU0sgICAgICAgICAgICAgMHgwMDA0MDAwMAotI2RlZmluZSBTSV9DT05GSUdfQklESVJfT0RfREFUQV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgU0lfQ09ORklHX0JJRElSX09EX0RBVEFfTUFTSykgPj4gU0lfQ09ORklHX0JJRElSX09EX0RBVEFfTFNCKQotI2RlZmluZSBTSV9DT05GSUdfQklESVJfT0RfREFUQV9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFNJX0NPTkZJR19CSURJUl9PRF9EQVRBX0xTQikgJiBTSV9DT05GSUdfQklESVJfT0RfREFUQV9NQVNLKQotI2RlZmluZSBTSV9DT05GSUdfSTJDX01TQiAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFNJX0NPTkZJR19JMkNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgU0lfQ09ORklHX0kyQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIFNJX0NPTkZJR19JMkNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBTSV9DT05GSUdfSTJDX01BU0spID4+IFNJX0NPTkZJR19JMkNfTFNCKQotI2RlZmluZSBTSV9DT05GSUdfSTJDX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNJX0NPTkZJR19JMkNfTFNCKSAmIFNJX0NPTkZJR19JMkNfTUFTSykKLSNkZWZpbmUgU0lfQ09ORklHX1BPU19TQU1QTEVfTVNCICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFNJX0NPTkZJR19QT1NfU0FNUExFX0xTQiAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBTSV9DT05GSUdfUE9TX1NBTVBMRV9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKLSNkZWZpbmUgU0lfQ09ORklHX1BPU19TQU1QTEVfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIFNJX0NPTkZJR19QT1NfU0FNUExFX01BU0spID4+IFNJX0NPTkZJR19QT1NfU0FNUExFX0xTQikKLSNkZWZpbmUgU0lfQ09ORklHX1BPU19TQU1QTEVfU0VUKHgpICAgICAgICAgICAgICAoKCh4KSA8PCBTSV9DT05GSUdfUE9TX1NBTVBMRV9MU0IpICYgU0lfQ09ORklHX1BPU19TQU1QTEVfTUFTSykKLSNkZWZpbmUgU0lfQ09ORklHX1BPU19EUklWRV9NU0IgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFNJX0NPTkZJR19QT1NfRFJJVkVfTFNCICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBTSV9DT05GSUdfUE9TX0RSSVZFX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgU0lfQ09ORklHX1BPU19EUklWRV9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIFNJX0NPTkZJR19QT1NfRFJJVkVfTUFTSykgPj4gU0lfQ09ORklHX1BPU19EUklWRV9MU0IpCi0jZGVmaW5lIFNJX0NPTkZJR19QT1NfRFJJVkVfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgU0lfQ09ORklHX1BPU19EUklWRV9MU0IpICYgU0lfQ09ORklHX1BPU19EUklWRV9NQVNLKQotI2RlZmluZSBTSV9DT05GSUdfSU5BQ1RJVkVfREFUQV9NU0IgICAgICAgICAgICAgIDUKLSNkZWZpbmUgU0lfQ09ORklHX0lOQUNUSVZFX0RBVEFfTFNCICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFNJX0NPTkZJR19JTkFDVElWRV9EQVRBX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBTSV9DT05GSUdfSU5BQ1RJVkVfREFUQV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgU0lfQ09ORklHX0lOQUNUSVZFX0RBVEFfTUFTSykgPj4gU0lfQ09ORklHX0lOQUNUSVZFX0RBVEFfTFNCKQotI2RlZmluZSBTSV9DT05GSUdfSU5BQ1RJVkVfREFUQV9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFNJX0NPTkZJR19JTkFDVElWRV9EQVRBX0xTQikgJiBTSV9DT05GSUdfSU5BQ1RJVkVfREFUQV9NQVNLKQotI2RlZmluZSBTSV9DT05GSUdfSU5BQ1RJVkVfQ0xLX01TQiAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgU0lfQ09ORklHX0lOQUNUSVZFX0NMS19MU0IgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFNJX0NPTkZJR19JTkFDVElWRV9DTEtfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBTSV9DT05GSUdfSU5BQ1RJVkVfQ0xLX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgU0lfQ09ORklHX0lOQUNUSVZFX0NMS19NQVNLKSA+PiBTSV9DT05GSUdfSU5BQ1RJVkVfQ0xLX0xTQikKLSNkZWZpbmUgU0lfQ09ORklHX0lOQUNUSVZFX0NMS19TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBTSV9DT05GSUdfSU5BQ1RJVkVfQ0xLX0xTQikgJiBTSV9DT05GSUdfSU5BQ1RJVkVfQ0xLX01BU0spCi0jZGVmaW5lIFNJX0NPTkZJR19ESVZJREVSX01TQiAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBTSV9DT05GSUdfRElWSURFUl9MU0IgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgU0lfQ09ORklHX0RJVklERVJfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBmCi0jZGVmaW5lIFNJX0NPTkZJR19ESVZJREVSX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBTSV9DT05GSUdfRElWSURFUl9NQVNLKSA+PiBTSV9DT05GSUdfRElWSURFUl9MU0IpCi0jZGVmaW5lIFNJX0NPTkZJR19ESVZJREVSX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgU0lfQ09ORklHX0RJVklERVJfTFNCKSAmIFNJX0NPTkZJR19ESVZJREVSX01BU0spCi0KLSNkZWZpbmUgU0lfQ1NfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFNJX0NTX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBTSV9DU19CSVRfQ05UX0lOX0xBU1RfQllURV9NU0IgICAgICAgICAgIDEzCi0jZGVmaW5lIFNJX0NTX0JJVF9DTlRfSU5fTEFTVF9CWVRFX0xTQiAgICAgICAgICAgMTEKLSNkZWZpbmUgU0lfQ1NfQklUX0NOVF9JTl9MQVNUX0JZVEVfTUFTSyAgICAgICAgICAweDAwMDAzODAwCi0jZGVmaW5lIFNJX0NTX0JJVF9DTlRfSU5fTEFTVF9CWVRFX0dFVCh4KSAgICAgICAgKCgoeCkgJiBTSV9DU19CSVRfQ05UX0lOX0xBU1RfQllURV9NQVNLKSA+PiBTSV9DU19CSVRfQ05UX0lOX0xBU1RfQllURV9MU0IpCi0jZGVmaW5lIFNJX0NTX0JJVF9DTlRfSU5fTEFTVF9CWVRFX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgU0lfQ1NfQklUX0NOVF9JTl9MQVNUX0JZVEVfTFNCKSAmIFNJX0NTX0JJVF9DTlRfSU5fTEFTVF9CWVRFX01BU0spCi0jZGVmaW5lIFNJX0NTX0RPTkVfRVJSX01TQiAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgU0lfQ1NfRE9ORV9FUlJfTFNCICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBTSV9DU19ET05FX0VSUl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgU0lfQ1NfRE9ORV9FUlJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFNJX0NTX0RPTkVfRVJSX01BU0spID4+IFNJX0NTX0RPTkVfRVJSX0xTQikKLSNkZWZpbmUgU0lfQ1NfRE9ORV9FUlJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBTSV9DU19ET05FX0VSUl9MU0IpICYgU0lfQ1NfRE9ORV9FUlJfTUFTSykKLSNkZWZpbmUgU0lfQ1NfRE9ORV9JTlRfTVNCICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFNJX0NTX0RPTkVfSU5UX0xTQiAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBTSV9DU19ET05FX0lOVF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKLSNkZWZpbmUgU0lfQ1NfRE9ORV9JTlRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFNJX0NTX0RPTkVfSU5UX01BU0spID4+IFNJX0NTX0RPTkVfSU5UX0xTQikKLSNkZWZpbmUgU0lfQ1NfRE9ORV9JTlRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBTSV9DU19ET05FX0lOVF9MU0IpICYgU0lfQ1NfRE9ORV9JTlRfTUFTSykKLSNkZWZpbmUgU0lfQ1NfU1RBUlRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFNJX0NTX1NUQVJUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBTSV9DU19TVEFSVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKLSNkZWZpbmUgU0lfQ1NfU1RBUlRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFNJX0NTX1NUQVJUX01BU0spID4+IFNJX0NTX1NUQVJUX0xTQikKLSNkZWZpbmUgU0lfQ1NfU1RBUlRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBTSV9DU19TVEFSVF9MU0IpICYgU0lfQ1NfU1RBUlRfTUFTSykKLSNkZWZpbmUgU0lfQ1NfUlhfQ05UX01TQiAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFNJX0NTX1JYX0NOVF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBTSV9DU19SWF9DTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZjAKLSNkZWZpbmUgU0lfQ1NfUlhfQ05UX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFNJX0NTX1JYX0NOVF9NQVNLKSA+PiBTSV9DU19SWF9DTlRfTFNCKQotI2RlZmluZSBTSV9DU19SWF9DTlRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNJX0NTX1JYX0NOVF9MU0IpICYgU0lfQ1NfUlhfQ05UX01BU0spCi0jZGVmaW5lIFNJX0NTX1RYX0NOVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBTSV9DU19UWF9DTlRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgU0lfQ1NfVFhfQ05UX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBmCi0jZGVmaW5lIFNJX0NTX1RYX0NOVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBTSV9DU19UWF9DTlRfTUFTSykgPj4gU0lfQ1NfVFhfQ05UX0xTQikKLSNkZWZpbmUgU0lfQ1NfVFhfQ05UX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBTSV9DU19UWF9DTlRfTFNCKSAmIFNJX0NTX1RYX0NOVF9NQVNLKQotCi0jZGVmaW5lIFNJX1RYX0RBVEEwX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBTSV9UWF9EQVRBMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgU0lfVFhfREFUQTBfREFUQTNfTVNCICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBTSV9UWF9EQVRBMF9EQVRBM19MU0IgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFNJX1RYX0RBVEEwX0RBVEEzX01BU0sgICAgICAgICAgICAgICAgICAgMHhmZjAwMDAwMAotI2RlZmluZSBTSV9UWF9EQVRBMF9EQVRBM19HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgU0lfVFhfREFUQTBfREFUQTNfTUFTSykgPj4gU0lfVFhfREFUQTBfREFUQTNfTFNCKQotI2RlZmluZSBTSV9UWF9EQVRBMF9EQVRBM19TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNJX1RYX0RBVEEwX0RBVEEzX0xTQikgJiBTSV9UWF9EQVRBMF9EQVRBM19NQVNLKQotI2RlZmluZSBTSV9UWF9EQVRBMF9EQVRBMl9NU0IgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFNJX1RYX0RBVEEwX0RBVEEyX0xTQiAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgU0lfVFhfREFUQTBfREFUQTJfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwZmYwMDAwCi0jZGVmaW5lIFNJX1RYX0RBVEEwX0RBVEEyX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBTSV9UWF9EQVRBMF9EQVRBMl9NQVNLKSA+PiBTSV9UWF9EQVRBMF9EQVRBMl9MU0IpCi0jZGVmaW5lIFNJX1RYX0RBVEEwX0RBVEEyX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgU0lfVFhfREFUQTBfREFUQTJfTFNCKSAmIFNJX1RYX0RBVEEwX0RBVEEyX01BU0spCi0jZGVmaW5lIFNJX1RYX0RBVEEwX0RBVEExX01TQiAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgU0lfVFhfREFUQTBfREFUQTFfTFNCICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFNJX1RYX0RBVEEwX0RBVEExX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBTSV9UWF9EQVRBMF9EQVRBMV9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgU0lfVFhfREFUQTBfREFUQTFfTUFTSykgPj4gU0lfVFhfREFUQTBfREFUQTFfTFNCKQotI2RlZmluZSBTSV9UWF9EQVRBMF9EQVRBMV9TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNJX1RYX0RBVEEwX0RBVEExX0xTQikgJiBTSV9UWF9EQVRBMF9EQVRBMV9NQVNLKQotI2RlZmluZSBTSV9UWF9EQVRBMF9EQVRBMF9NU0IgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgU0lfVFhfREFUQTBfREFUQTBfTFNCICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFNJX1RYX0RBVEEwX0RBVEEwX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBTSV9UWF9EQVRBMF9EQVRBMF9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgU0lfVFhfREFUQTBfREFUQTBfTUFTSykgPj4gU0lfVFhfREFUQTBfREFUQTBfTFNCKQotI2RlZmluZSBTSV9UWF9EQVRBMF9EQVRBMF9TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNJX1RYX0RBVEEwX0RBVEEwX0xTQikgJiBTSV9UWF9EQVRBMF9EQVRBMF9NQVNLKQotCi0jZGVmaW5lIFNJX1RYX0RBVEExX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwYwotI2RlZmluZSBTSV9UWF9EQVRBMV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGMKLSNkZWZpbmUgU0lfVFhfREFUQTFfREFUQTdfTVNCICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBTSV9UWF9EQVRBMV9EQVRBN19MU0IgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFNJX1RYX0RBVEExX0RBVEE3X01BU0sgICAgICAgICAgICAgICAgICAgMHhmZjAwMDAwMAotI2RlZmluZSBTSV9UWF9EQVRBMV9EQVRBN19HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgU0lfVFhfREFUQTFfREFUQTdfTUFTSykgPj4gU0lfVFhfREFUQTFfREFUQTdfTFNCKQotI2RlZmluZSBTSV9UWF9EQVRBMV9EQVRBN19TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNJX1RYX0RBVEExX0RBVEE3X0xTQikgJiBTSV9UWF9EQVRBMV9EQVRBN19NQVNLKQotI2RlZmluZSBTSV9UWF9EQVRBMV9EQVRBNl9NU0IgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFNJX1RYX0RBVEExX0RBVEE2X0xTQiAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgU0lfVFhfREFUQTFfREFUQTZfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwZmYwMDAwCi0jZGVmaW5lIFNJX1RYX0RBVEExX0RBVEE2X0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBTSV9UWF9EQVRBMV9EQVRBNl9NQVNLKSA+PiBTSV9UWF9EQVRBMV9EQVRBNl9MU0IpCi0jZGVmaW5lIFNJX1RYX0RBVEExX0RBVEE2X1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgU0lfVFhfREFUQTFfREFUQTZfTFNCKSAmIFNJX1RYX0RBVEExX0RBVEE2X01BU0spCi0jZGVmaW5lIFNJX1RYX0RBVEExX0RBVEE1X01TQiAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgU0lfVFhfREFUQTFfREFUQTVfTFNCICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFNJX1RYX0RBVEExX0RBVEE1X01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBTSV9UWF9EQVRBMV9EQVRBNV9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgU0lfVFhfREFUQTFfREFUQTVfTUFTSykgPj4gU0lfVFhfREFUQTFfREFUQTVfTFNCKQotI2RlZmluZSBTSV9UWF9EQVRBMV9EQVRBNV9TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNJX1RYX0RBVEExX0RBVEE1X0xTQikgJiBTSV9UWF9EQVRBMV9EQVRBNV9NQVNLKQotI2RlZmluZSBTSV9UWF9EQVRBMV9EQVRBNF9NU0IgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgU0lfVFhfREFUQTFfREFUQTRfTFNCICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFNJX1RYX0RBVEExX0RBVEE0X01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBTSV9UWF9EQVRBMV9EQVRBNF9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgU0lfVFhfREFUQTFfREFUQTRfTUFTSykgPj4gU0lfVFhfREFUQTFfREFUQTRfTFNCKQotI2RlZmluZSBTSV9UWF9EQVRBMV9EQVRBNF9TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNJX1RYX0RBVEExX0RBVEE0X0xTQikgJiBTSV9UWF9EQVRBMV9EQVRBNF9NQVNLKQotCi0jZGVmaW5lIFNJX1JYX0RBVEEwX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBTSV9SWF9EQVRBMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgU0lfUlhfREFUQTBfREFUQTNfTVNCICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBTSV9SWF9EQVRBMF9EQVRBM19MU0IgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFNJX1JYX0RBVEEwX0RBVEEzX01BU0sgICAgICAgICAgICAgICAgICAgMHhmZjAwMDAwMAotI2RlZmluZSBTSV9SWF9EQVRBMF9EQVRBM19HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgU0lfUlhfREFUQTBfREFUQTNfTUFTSykgPj4gU0lfUlhfREFUQTBfREFUQTNfTFNCKQotI2RlZmluZSBTSV9SWF9EQVRBMF9EQVRBM19TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNJX1JYX0RBVEEwX0RBVEEzX0xTQikgJiBTSV9SWF9EQVRBMF9EQVRBM19NQVNLKQotI2RlZmluZSBTSV9SWF9EQVRBMF9EQVRBMl9NU0IgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFNJX1JYX0RBVEEwX0RBVEEyX0xTQiAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgU0lfUlhfREFUQTBfREFUQTJfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwZmYwMDAwCi0jZGVmaW5lIFNJX1JYX0RBVEEwX0RBVEEyX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBTSV9SWF9EQVRBMF9EQVRBMl9NQVNLKSA+PiBTSV9SWF9EQVRBMF9EQVRBMl9MU0IpCi0jZGVmaW5lIFNJX1JYX0RBVEEwX0RBVEEyX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgU0lfUlhfREFUQTBfREFUQTJfTFNCKSAmIFNJX1JYX0RBVEEwX0RBVEEyX01BU0spCi0jZGVmaW5lIFNJX1JYX0RBVEEwX0RBVEExX01TQiAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgU0lfUlhfREFUQTBfREFUQTFfTFNCICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFNJX1JYX0RBVEEwX0RBVEExX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBTSV9SWF9EQVRBMF9EQVRBMV9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgU0lfUlhfREFUQTBfREFUQTFfTUFTSykgPj4gU0lfUlhfREFUQTBfREFUQTFfTFNCKQotI2RlZmluZSBTSV9SWF9EQVRBMF9EQVRBMV9TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNJX1JYX0RBVEEwX0RBVEExX0xTQikgJiBTSV9SWF9EQVRBMF9EQVRBMV9NQVNLKQotI2RlZmluZSBTSV9SWF9EQVRBMF9EQVRBMF9NU0IgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgU0lfUlhfREFUQTBfREFUQTBfTFNCICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFNJX1JYX0RBVEEwX0RBVEEwX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBTSV9SWF9EQVRBMF9EQVRBMF9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgU0lfUlhfREFUQTBfREFUQTBfTUFTSykgPj4gU0lfUlhfREFUQTBfREFUQTBfTFNCKQotI2RlZmluZSBTSV9SWF9EQVRBMF9EQVRBMF9TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNJX1JYX0RBVEEwX0RBVEEwX0xTQikgJiBTSV9SWF9EQVRBMF9EQVRBMF9NQVNLKQotCi0jZGVmaW5lIFNJX1JYX0RBVEExX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAotI2RlZmluZSBTSV9SWF9EQVRBMV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKLSNkZWZpbmUgU0lfUlhfREFUQTFfREFUQTdfTVNCICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBTSV9SWF9EQVRBMV9EQVRBN19MU0IgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFNJX1JYX0RBVEExX0RBVEE3X01BU0sgICAgICAgICAgICAgICAgICAgMHhmZjAwMDAwMAotI2RlZmluZSBTSV9SWF9EQVRBMV9EQVRBN19HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgU0lfUlhfREFUQTFfREFUQTdfTUFTSykgPj4gU0lfUlhfREFUQTFfREFUQTdfTFNCKQotI2RlZmluZSBTSV9SWF9EQVRBMV9EQVRBN19TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNJX1JYX0RBVEExX0RBVEE3X0xTQikgJiBTSV9SWF9EQVRBMV9EQVRBN19NQVNLKQotI2RlZmluZSBTSV9SWF9EQVRBMV9EQVRBNl9NU0IgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFNJX1JYX0RBVEExX0RBVEE2X0xTQiAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgU0lfUlhfREFUQTFfREFUQTZfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwZmYwMDAwCi0jZGVmaW5lIFNJX1JYX0RBVEExX0RBVEE2X0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBTSV9SWF9EQVRBMV9EQVRBNl9NQVNLKSA+PiBTSV9SWF9EQVRBMV9EQVRBNl9MU0IpCi0jZGVmaW5lIFNJX1JYX0RBVEExX0RBVEE2X1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgU0lfUlhfREFUQTFfREFUQTZfTFNCKSAmIFNJX1JYX0RBVEExX0RBVEE2X01BU0spCi0jZGVmaW5lIFNJX1JYX0RBVEExX0RBVEE1X01TQiAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgU0lfUlhfREFUQTFfREFUQTVfTFNCICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFNJX1JYX0RBVEExX0RBVEE1X01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBTSV9SWF9EQVRBMV9EQVRBNV9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgU0lfUlhfREFUQTFfREFUQTVfTUFTSykgPj4gU0lfUlhfREFUQTFfREFUQTVfTFNCKQotI2RlZmluZSBTSV9SWF9EQVRBMV9EQVRBNV9TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNJX1JYX0RBVEExX0RBVEE1X0xTQikgJiBTSV9SWF9EQVRBMV9EQVRBNV9NQVNLKQotI2RlZmluZSBTSV9SWF9EQVRBMV9EQVRBNF9NU0IgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgU0lfUlhfREFUQTFfREFUQTRfTFNCICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFNJX1JYX0RBVEExX0RBVEE0X01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBTSV9SWF9EQVRBMV9EQVRBNF9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgU0lfUlhfREFUQTFfREFUQTRfTUFTSykgPj4gU0lfUlhfREFUQTFfREFUQTRfTFNCKQotI2RlZmluZSBTSV9SWF9EQVRBMV9EQVRBNF9TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNJX1JYX0RBVEExX0RBVEE0X0xTQikgJiBTSV9SWF9EQVRBMV9EQVRBNF9NQVNLKQotCi0KLSNpZm5kZWYgX19BU1NFTUJMRVJfXwotCi10eXBlZGVmIHN0cnVjdCBzaV9yZWdfcmVnX3MgewotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgc2lfY29uZmlnOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgc2lfY3M7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBzaV90eF9kYXRhMDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHNpX3R4X2RhdGExOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgc2lfcnhfZGF0YTA7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBzaV9yeF9kYXRhMTsKLX0gc2lfcmVnX3JlZ190OwotCi0jZW5kaWYgLyogX19BU1NFTUJMRVJfXyAqLwotCi0jZW5kaWYgLyogX1NJX1JFR19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHcyLjAvaHcvdWFydF9yZWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3Mi4wL2h3L3VhcnRfcmVnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkYjMyMWIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHcyLjAvaHcvdWFydF9yZWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDMyNyArMCwwIEBACi0jaWZuZGVmIF9VQVJUX1JFR19SRUdfSF8KLSNkZWZpbmUgX1VBUlRfUkVHX1JFR19IXwotCi0jZGVmaW5lIFJCUl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAotI2RlZmluZSBSQlJfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgUkJSX1JCUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFJCUl9SQlJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBSQlJfUkJSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgUkJSX1JCUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFJCUl9SQlJfTUFTSykgPj4gUkJSX1JCUl9MU0IpCi0jZGVmaW5lIFJCUl9SQlJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgUkJSX1JCUl9MU0IpICYgUkJSX1JCUl9NQVNLKQotCi0jZGVmaW5lIFRIUl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAotI2RlZmluZSBUSFJfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgVEhSX1RIUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFRIUl9USFJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBUSFJfVEhSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgVEhSX1RIUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFRIUl9USFJfTUFTSykgPj4gVEhSX1RIUl9MU0IpCi0jZGVmaW5lIFRIUl9USFJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgVEhSX1RIUl9MU0IpICYgVEhSX1RIUl9NQVNLKQotCi0jZGVmaW5lIERMTF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAotI2RlZmluZSBETExfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgRExMX0RMTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIERMTF9ETExfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBETExfRExMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgRExMX0RMTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIERMTF9ETExfTUFTSykgPj4gRExMX0RMTF9MU0IpCi0jZGVmaW5lIERMTF9ETExfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgRExMX0RMTF9MU0IpICYgRExMX0RMTF9NQVNLKQotCi0jZGVmaW5lIERMSF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBETEhfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgRExIX0RMSF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIERMSF9ETEhfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBETEhfRExIX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgRExIX0RMSF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIERMSF9ETEhfTUFTSykgPj4gRExIX0RMSF9MU0IpCi0jZGVmaW5lIERMSF9ETEhfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgRExIX0RMSF9MU0IpICYgRExIX0RMSF9NQVNLKQotCi0jZGVmaW5lIElFUl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBJRVJfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgSUVSX0VERFNJX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIElFUl9FRERTSV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBJRVJfRUREU0lfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgSUVSX0VERFNJX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIElFUl9FRERTSV9NQVNLKSA+PiBJRVJfRUREU0lfTFNCKQotI2RlZmluZSBJRVJfRUREU0lfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IElFUl9FRERTSV9MU0IpICYgSUVSX0VERFNJX01BU0spCi0jZGVmaW5lIElFUl9FTFNJX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBJRVJfRUxTSV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgSUVSX0VMU0lfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIElFUl9FTFNJX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBJRVJfRUxTSV9NQVNLKSA+PiBJRVJfRUxTSV9MU0IpCi0jZGVmaW5lIElFUl9FTFNJX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgSUVSX0VMU0lfTFNCKSAmIElFUl9FTFNJX01BU0spCi0jZGVmaW5lIElFUl9FVEJFSV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBJRVJfRVRCRUlfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgSUVSX0VUQkVJX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIElFUl9FVEJFSV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBJRVJfRVRCRUlfTUFTSykgPj4gSUVSX0VUQkVJX0xTQikKLSNkZWZpbmUgSUVSX0VUQkVJX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBJRVJfRVRCRUlfTFNCKSAmIElFUl9FVEJFSV9NQVNLKQotI2RlZmluZSBJRVJfRVJCRklfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgSUVSX0VSQkZJX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIElFUl9FUkJGSV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBJRVJfRVJCRklfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgSUVSX0VSQkZJX01BU0spID4+IElFUl9FUkJGSV9MU0IpCi0jZGVmaW5lIElFUl9FUkJGSV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgSUVSX0VSQkZJX0xTQikgJiBJRVJfRVJCRklfTUFTSykKLQotI2RlZmluZSBJSVJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgSUlSX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIElJUl9GSUZPX1NUQVRVU19NU0IgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBJSVJfRklGT19TVEFUVVNfTFNCICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgSUlSX0ZJRk9fU1RBVFVTX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGMwCi0jZGVmaW5lIElJUl9GSUZPX1NUQVRVU19HRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBJSVJfRklGT19TVEFUVVNfTUFTSykgPj4gSUlSX0ZJRk9fU1RBVFVTX0xTQikKLSNkZWZpbmUgSUlSX0ZJRk9fU1RBVFVTX1NFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBJSVJfRklGT19TVEFUVVNfTFNCKSAmIElJUl9GSUZPX1NUQVRVU19NQVNLKQotI2RlZmluZSBJSVJfSUlEX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgSUlSX0lJRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIElJUl9JSURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwZgotI2RlZmluZSBJSVJfSUlEX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgSUlSX0lJRF9NQVNLKSA+PiBJSVJfSUlEX0xTQikKLSNkZWZpbmUgSUlSX0lJRF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBJSVJfSUlEX0xTQikgJiBJSVJfSUlEX01BU0spCi0KLSNkZWZpbmUgRkNSX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIEZDUl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBGQ1JfUkNWUl9UUklHX01TQiAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgRkNSX1JDVlJfVFJJR19MU0IgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIEZDUl9SQ1ZSX1RSSUdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBjMAotI2RlZmluZSBGQ1JfUkNWUl9UUklHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgRkNSX1JDVlJfVFJJR19NQVNLKSA+PiBGQ1JfUkNWUl9UUklHX0xTQikKLSNkZWZpbmUgRkNSX1JDVlJfVFJJR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBGQ1JfUkNWUl9UUklHX0xTQikgJiBGQ1JfUkNWUl9UUklHX01BU0spCi0jZGVmaW5lIEZDUl9ETUFfTU9ERV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBGQ1JfRE1BX01PREVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgRkNSX0RNQV9NT0RFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIEZDUl9ETUFfTU9ERV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBGQ1JfRE1BX01PREVfTUFTSykgPj4gRkNSX0RNQV9NT0RFX0xTQikKLSNkZWZpbmUgRkNSX0RNQV9NT0RFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBGQ1JfRE1BX01PREVfTFNCKSAmIEZDUl9ETUFfTU9ERV9NQVNLKQotI2RlZmluZSBGQ1JfWE1JVF9GSUZPX1JTVF9NU0IgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgRkNSX1hNSVRfRklGT19SU1RfTFNCICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIEZDUl9YTUlUX0ZJRk9fUlNUX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBGQ1JfWE1JVF9GSUZPX1JTVF9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgRkNSX1hNSVRfRklGT19SU1RfTUFTSykgPj4gRkNSX1hNSVRfRklGT19SU1RfTFNCKQotI2RlZmluZSBGQ1JfWE1JVF9GSUZPX1JTVF9TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IEZDUl9YTUlUX0ZJRk9fUlNUX0xTQikgJiBGQ1JfWE1JVF9GSUZPX1JTVF9NQVNLKQotI2RlZmluZSBGQ1JfUkNWUl9GSUZPX1JTVF9NU0IgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgRkNSX1JDVlJfRklGT19SU1RfTFNCICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIEZDUl9SQ1ZSX0ZJRk9fUlNUX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBGQ1JfUkNWUl9GSUZPX1JTVF9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgRkNSX1JDVlJfRklGT19SU1RfTUFTSykgPj4gRkNSX1JDVlJfRklGT19SU1RfTFNCKQotI2RlZmluZSBGQ1JfUkNWUl9GSUZPX1JTVF9TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IEZDUl9SQ1ZSX0ZJRk9fUlNUX0xTQikgJiBGQ1JfUkNWUl9GSUZPX1JTVF9NQVNLKQotI2RlZmluZSBGQ1JfRklGT19FTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgRkNSX0ZJRk9fRU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEZDUl9GSUZPX0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBGQ1JfRklGT19FTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgRkNSX0ZJRk9fRU5fTUFTSykgPj4gRkNSX0ZJRk9fRU5fTFNCKQotI2RlZmluZSBGQ1JfRklGT19FTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IEZDUl9GSUZPX0VOX0xTQikgJiBGQ1JfRklGT19FTl9NQVNLKQotCi0jZGVmaW5lIExDUl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwYwotI2RlZmluZSBMQ1JfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGMKLSNkZWZpbmUgTENSX0RMQUJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIExDUl9ETEFCX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBMQ1JfRExBQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKLSNkZWZpbmUgTENSX0RMQUJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIExDUl9ETEFCX01BU0spID4+IExDUl9ETEFCX0xTQikKLSNkZWZpbmUgTENSX0RMQUJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBMQ1JfRExBQl9MU0IpICYgTENSX0RMQUJfTUFTSykKLSNkZWZpbmUgTENSX0JSRUFLX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIExDUl9CUkVBS19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBMQ1JfQlJFQUtfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgTENSX0JSRUFLX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIExDUl9CUkVBS19NQVNLKSA+PiBMQ1JfQlJFQUtfTFNCKQotI2RlZmluZSBMQ1JfQlJFQUtfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IExDUl9CUkVBS19MU0IpICYgTENSX0JSRUFLX01BU0spCi0jZGVmaW5lIExDUl9FUFNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBMQ1JfRVBTX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgTENSX0VQU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIExDUl9FUFNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBMQ1JfRVBTX01BU0spID4+IExDUl9FUFNfTFNCKQotI2RlZmluZSBMQ1JfRVBTX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IExDUl9FUFNfTFNCKSAmIExDUl9FUFNfTUFTSykKLSNkZWZpbmUgTENSX1BFTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIExDUl9QRU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBMQ1JfUEVOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgTENSX1BFTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIExDUl9QRU5fTUFTSykgPj4gTENSX1BFTl9MU0IpCi0jZGVmaW5lIExDUl9QRU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgTENSX1BFTl9MU0IpICYgTENSX1BFTl9NQVNLKQotI2RlZmluZSBMQ1JfU1RPUF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgTENSX1NUT1BfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIExDUl9TVE9QX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBMQ1JfU1RPUF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgTENSX1NUT1BfTUFTSykgPj4gTENSX1NUT1BfTFNCKQotI2RlZmluZSBMQ1JfU1RPUF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IExDUl9TVE9QX0xTQikgJiBMQ1JfU1RPUF9NQVNLKQotI2RlZmluZSBMQ1JfQ0xTX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgTENSX0NMU19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIExDUl9DTFNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMwotI2RlZmluZSBMQ1JfQ0xTX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgTENSX0NMU19NQVNLKSA+PiBMQ1JfQ0xTX0xTQikKLSNkZWZpbmUgTENSX0NMU19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBMQ1JfQ0xTX0xTQikgJiBMQ1JfQ0xTX01BU0spCi0KLSNkZWZpbmUgTUNSX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIE1DUl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBNQ1JfTE9PUEJBQ0tfTVNCICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgTUNSX0xPT1BCQUNLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIE1DUl9MT09QQkFDS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBNQ1JfTE9PUEJBQ0tfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgTUNSX0xPT1BCQUNLX01BU0spID4+IE1DUl9MT09QQkFDS19MU0IpCi0jZGVmaW5lIE1DUl9MT09QQkFDS19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgTUNSX0xPT1BCQUNLX0xTQikgJiBNQ1JfTE9PUEJBQ0tfTUFTSykKLSNkZWZpbmUgTUNSX09VVDJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIE1DUl9PVVQyX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBNQ1JfT1VUMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgTUNSX09VVDJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIE1DUl9PVVQyX01BU0spID4+IE1DUl9PVVQyX0xTQikKLSNkZWZpbmUgTUNSX09VVDJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBNQ1JfT1VUMl9MU0IpICYgTUNSX09VVDJfTUFTSykKLSNkZWZpbmUgTUNSX09VVDFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIE1DUl9PVVQxX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBNQ1JfT1VUMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgTUNSX09VVDFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIE1DUl9PVVQxX01BU0spID4+IE1DUl9PVVQxX0xTQikKLSNkZWZpbmUgTUNSX09VVDFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBNQ1JfT1VUMV9MU0IpICYgTUNSX09VVDFfTUFTSykKLSNkZWZpbmUgTUNSX1JUU19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIE1DUl9SVFNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBNQ1JfUlRTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgTUNSX1JUU19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIE1DUl9SVFNfTUFTSykgPj4gTUNSX1JUU19MU0IpCi0jZGVmaW5lIE1DUl9SVFNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgTUNSX1JUU19MU0IpICYgTUNSX1JUU19NQVNLKQotI2RlZmluZSBNQ1JfRFRSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTUNSX0RUUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1DUl9EVFJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBNQ1JfRFRSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgTUNSX0RUUl9NQVNLKSA+PiBNQ1JfRFRSX0xTQikKLSNkZWZpbmUgTUNSX0RUUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBNQ1JfRFRSX0xTQikgJiBNQ1JfRFRSX01BU0spCi0KLSNkZWZpbmUgTFNSX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE0Ci0jZGVmaW5lIExTUl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAotI2RlZmluZSBMU1JfRkVSUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgTFNSX0ZFUlJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIExTUl9GRVJSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBMU1JfRkVSUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgTFNSX0ZFUlJfTUFTSykgPj4gTFNSX0ZFUlJfTFNCKQotI2RlZmluZSBMU1JfRkVSUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IExTUl9GRVJSX0xTQikgJiBMU1JfRkVSUl9NQVNLKQotI2RlZmluZSBMU1JfVEVNVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgTFNSX1RFTVRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIExTUl9URU1UX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAotI2RlZmluZSBMU1JfVEVNVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgTFNSX1RFTVRfTUFTSykgPj4gTFNSX1RFTVRfTFNCKQotI2RlZmluZSBMU1JfVEVNVF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IExTUl9URU1UX0xTQikgJiBMU1JfVEVNVF9NQVNLKQotI2RlZmluZSBMU1JfVEhSRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgTFNSX1RIUkVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIExTUl9USFJFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBMU1JfVEhSRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgTFNSX1RIUkVfTUFTSykgPj4gTFNSX1RIUkVfTFNCKQotI2RlZmluZSBMU1JfVEhSRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IExTUl9USFJFX0xTQikgJiBMU1JfVEhSRV9NQVNLKQotI2RlZmluZSBMU1JfQklfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgTFNSX0JJX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIExTUl9CSV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBMU1JfQklfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgTFNSX0JJX01BU0spID4+IExTUl9CSV9MU0IpCi0jZGVmaW5lIExTUl9CSV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgTFNSX0JJX0xTQikgJiBMU1JfQklfTUFTSykKLSNkZWZpbmUgTFNSX0ZFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIExTUl9GRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBMU1JfRkVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgTFNSX0ZFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIExTUl9GRV9NQVNLKSA+PiBMU1JfRkVfTFNCKQotI2RlZmluZSBMU1JfRkVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IExTUl9GRV9MU0IpICYgTFNSX0ZFX01BU0spCi0jZGVmaW5lIExTUl9QRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBMU1JfUEVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgTFNSX1BFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIExTUl9QRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBMU1JfUEVfTUFTSykgPj4gTFNSX1BFX0xTQikKLSNkZWZpbmUgTFNSX1BFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBMU1JfUEVfTFNCKSAmIExTUl9QRV9NQVNLKQotI2RlZmluZSBMU1JfT0VfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgTFNSX09FX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIExTUl9PRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBMU1JfT0VfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgTFNSX09FX01BU0spID4+IExTUl9PRV9MU0IpCi0jZGVmaW5lIExTUl9PRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgTFNSX09FX0xTQikgJiBMU1JfT0VfTUFTSykKLSNkZWZpbmUgTFNSX0RSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIExTUl9EUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBMU1JfRFJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgTFNSX0RSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIExTUl9EUl9NQVNLKSA+PiBMU1JfRFJfTFNCKQotI2RlZmluZSBMU1JfRFJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IExTUl9EUl9MU0IpICYgTFNSX0RSX01BU0spCi0KLSNkZWZpbmUgTVNSX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4Ci0jZGVmaW5lIE1TUl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAotI2RlZmluZSBNU1JfRENEX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgTVNSX0RDRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIE1TUl9EQ0RfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBNU1JfRENEX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgTVNSX0RDRF9NQVNLKSA+PiBNU1JfRENEX0xTQikKLSNkZWZpbmUgTVNSX0RDRF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBNU1JfRENEX0xTQikgJiBNU1JfRENEX01BU0spCi0jZGVmaW5lIE1TUl9SSV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBNU1JfUklfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgTVNSX1JJX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIE1TUl9SSV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBNU1JfUklfTUFTSykgPj4gTVNSX1JJX0xTQikKLSNkZWZpbmUgTVNSX1JJX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBNU1JfUklfTFNCKSAmIE1TUl9SSV9NQVNLKQotI2RlZmluZSBNU1JfRFNSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgTVNSX0RTUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIE1TUl9EU1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBNU1JfRFNSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgTVNSX0RTUl9NQVNLKSA+PiBNU1JfRFNSX0xTQikKLSNkZWZpbmUgTVNSX0RTUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBNU1JfRFNSX0xTQikgJiBNU1JfRFNSX01BU0spCi0jZGVmaW5lIE1TUl9DVFNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBNU1JfQ1RTX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgTVNSX0NUU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIE1TUl9DVFNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBNU1JfQ1RTX01BU0spID4+IE1TUl9DVFNfTFNCKQotI2RlZmluZSBNU1JfQ1RTX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IE1TUl9DVFNfTFNCKSAmIE1TUl9DVFNfTUFTSykKLSNkZWZpbmUgTVNSX0REQ0RfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIE1TUl9ERENEX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBNU1JfRERDRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgTVNSX0REQ0RfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIE1TUl9ERENEX01BU0spID4+IE1TUl9ERENEX0xTQikKLSNkZWZpbmUgTVNSX0REQ0RfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBNU1JfRERDRF9MU0IpICYgTVNSX0REQ0RfTUFTSykKLSNkZWZpbmUgTVNSX1RFUklfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIE1TUl9URVJJX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBNU1JfVEVSSV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgTVNSX1RFUklfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIE1TUl9URVJJX01BU0spID4+IE1TUl9URVJJX0xTQikKLSNkZWZpbmUgTVNSX1RFUklfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBNU1JfVEVSSV9MU0IpICYgTVNSX1RFUklfTUFTSykKLSNkZWZpbmUgTVNSX0REU1JfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIE1TUl9ERFNSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBNU1JfRERTUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgTVNSX0REU1JfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIE1TUl9ERFNSX01BU0spID4+IE1TUl9ERFNSX0xTQikKLSNkZWZpbmUgTVNSX0REU1JfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBNU1JfRERTUl9MU0IpICYgTVNSX0REU1JfTUFTSykKLSNkZWZpbmUgTVNSX0RDVFNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1TUl9EQ1RTX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBNU1JfRENUU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgTVNSX0RDVFNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIE1TUl9EQ1RTX01BU0spID4+IE1TUl9EQ1RTX0xTQikKLSNkZWZpbmUgTVNSX0RDVFNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBNU1JfRENUU19MU0IpICYgTVNSX0RDVFNfTUFTSykKLQotI2RlZmluZSBTQ1JfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMWMKLSNkZWZpbmUgU0NSX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFjCi0jZGVmaW5lIFNDUl9TQ1JfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBTQ1JfU0NSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgU0NSX1NDUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIFNDUl9TQ1JfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBTQ1JfU0NSX01BU0spID4+IFNDUl9TQ1JfTFNCKQotI2RlZmluZSBTQ1JfU0NSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNDUl9TQ1JfTFNCKSAmIFNDUl9TQ1JfTUFTSykKLQotI2RlZmluZSBTUkJSX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgU1JCUl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIFNSQlJfU1JCUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBTUkJSX1NSQlJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgU1JCUl9TUkJSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIFNSQlJfU1JCUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBTUkJSX1NSQlJfTUFTSykgPj4gU1JCUl9TUkJSX0xTQikKLSNkZWZpbmUgU1JCUl9TUkJSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBTUkJSX1NSQlJfTFNCKSAmIFNSQlJfU1JCUl9NQVNLKQotCi0jZGVmaW5lIFNJSVJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAotI2RlZmluZSBTSUlSX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKLSNkZWZpbmUgU0lJUl9TSUlSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFNJSVJfU0lJUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBTSUlSX1NJSVJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgU0lJUl9TSUlSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFNJSVJfU0lJUl9NQVNLKSA+PiBTSUlSX1NJSVJfTFNCKQotI2RlZmluZSBTSUlSX1NJSVJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNJSVJfU0lJUl9MU0IpICYgU0lJUl9TSUlSX01BU0spCi0KLSNkZWZpbmUgTVdSX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJjCi0jZGVmaW5lIE1XUl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyYwotI2RlZmluZSBNV1JfTVdSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIE1XUl9NV1JfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBNV1JfTVdSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgTVdSX01XUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIE1XUl9NV1JfTUFTSykgPj4gTVdSX01XUl9MU0IpCi0jZGVmaW5lIE1XUl9NV1JfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgTVdSX01XUl9MU0IpICYgTVdSX01XUl9NQVNLKQotCi0jZGVmaW5lIFNMU1JfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAotI2RlZmluZSBTTFNSX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKLSNkZWZpbmUgU0xTUl9TTFNSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFNMU1JfU0xTUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBTTFNSX1NMU1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgU0xTUl9TTFNSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFNMU1JfU0xTUl9NQVNLKSA+PiBTTFNSX1NMU1JfTFNCKQotI2RlZmluZSBTTFNSX1NMU1JfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNMU1JfU0xTUl9MU0IpICYgU0xTUl9TTFNSX01BU0spCi0KLSNkZWZpbmUgU01TUl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4Ci0jZGVmaW5lIFNNU1JfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAotI2RlZmluZSBTTVNSX1NNU1JfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgU01TUl9TTVNSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFNNU1JfU01TUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBTTVNSX1NNU1JfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgU01TUl9TTVNSX01BU0spID4+IFNNU1JfU01TUl9MU0IpCi0jZGVmaW5lIFNNU1JfU01TUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgU01TUl9TTVNSX0xTQikgJiBTTVNSX1NNU1JfTUFTSykKLQotI2RlZmluZSBNUlJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM2MKLSNkZWZpbmUgTVJSX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNjCi0jZGVmaW5lIE1SUl9NUlJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgTVJSX01SUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1SUl9NUlJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBNUlJfTVJSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgTVJSX01SUl9NQVNLKSA+PiBNUlJfTVJSX0xTQikKLSNkZWZpbmUgTVJSX01SUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBNUlJfTVJSX0xTQikgJiBNUlJfTVJSX01BU0spCi0KLQotI2lmbmRlZiBfX0FTU0VNQkxFUl9fCi0KLXR5cGVkZWYgc3RydWN0IHVhcnRfcmVnX3JlZ19zIHsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHJicjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGRsaDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGlpcjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGxjcjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1jcjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGxzcjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1zcjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHNjcjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHNyYnI7Ci0gIHVuc2lnbmVkIGNoYXIgcGFkMFs0XTsgLyogcGFkIHRvIDB4MjggKi8KLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHNpaXI7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtd3I7Ci0gIHVuc2lnbmVkIGNoYXIgcGFkMVs0XTsgLyogcGFkIHRvIDB4MzQgKi8KLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHNsc3I7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBzbXNyOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbXJyOwotfSB1YXJ0X3JlZ19yZWdfdDsKLQotI2VuZGlmIC8qIF9fQVNTRU1CTEVSX18gKi8KLQotI2VuZGlmIC8qIF9VQVJUX1JFR19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHcyLjAvaHcvdm1jX3JlZy5oIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHcyLjAvaHcvdm1jX3JlZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzJlYzUxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3Mi4wL2h3L3ZtY19yZWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLSNpZm5kZWYgX1ZNQ19SRUdfUkVHX0hfCi0jZGVmaW5lIF9WTUNfUkVHX1JFR19IXwotCi0jZGVmaW5lIE1DX1RDQU1fVkFMSURfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAotI2RlZmluZSBNQ19UQ0FNX1ZBTElEX09GRlNFVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgTUNfVENBTV9WQUxJRF9CSVRfTVNCICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1DX1RDQU1fVkFMSURfQklUX0xTQiAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBNQ19UQ0FNX1ZBTElEX0JJVF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgTUNfVENBTV9WQUxJRF9CSVRfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIE1DX1RDQU1fVkFMSURfQklUX01BU0spID4+IE1DX1RDQU1fVkFMSURfQklUX0xTQikKLSNkZWZpbmUgTUNfVENBTV9WQUxJRF9CSVRfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCBNQ19UQ0FNX1ZBTElEX0JJVF9MU0IpICYgTUNfVENBTV9WQUxJRF9CSVRfTUFTSykKLQotI2RlZmluZSBNQ19UQ0FNX01BU0tfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKLSNkZWZpbmUgTUNfVENBTV9NQVNLX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIE1DX1RDQU1fTUFTS19TSVpFX01TQiAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBNQ19UQ0FNX01BU0tfU0laRV9MU0IgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTUNfVENBTV9NQVNLX1NJWkVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3Ci0jZGVmaW5lIE1DX1RDQU1fTUFTS19TSVpFX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBNQ19UQ0FNX01BU0tfU0laRV9NQVNLKSA+PiBNQ19UQ0FNX01BU0tfU0laRV9MU0IpCi0jZGVmaW5lIE1DX1RDQU1fTUFTS19TSVpFX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgTUNfVENBTV9NQVNLX1NJWkVfTFNCKSAmIE1DX1RDQU1fTUFTS19TSVpFX01BU0spCi0KLSNkZWZpbmUgTUNfVENBTV9DT01QQVJFX0FERFJFU1MgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCi0jZGVmaW5lIE1DX1RDQU1fQ09NUEFSRV9PRkZTRVQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAotI2RlZmluZSBNQ19UQ0FNX0NPTVBBUkVfS0VZX01TQiAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIE1DX1RDQU1fQ09NUEFSRV9LRVlfTFNCICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBNQ19UQ0FNX0NPTVBBUkVfS0VZX01BU0sgICAgICAgICAgICAgICAgIDB4MDAzZmZmZTAKLSNkZWZpbmUgTUNfVENBTV9DT01QQVJFX0tFWV9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIE1DX1RDQU1fQ09NUEFSRV9LRVlfTUFTSykgPj4gTUNfVENBTV9DT01QQVJFX0tFWV9MU0IpCi0jZGVmaW5lIE1DX1RDQU1fQ09NUEFSRV9LRVlfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgTUNfVENBTV9DT01QQVJFX0tFWV9MU0IpICYgTUNfVENBTV9DT01QQVJFX0tFWV9NQVNLKQotCi0jZGVmaW5lIE1DX1RDQU1fVEFSR0VUX0FERFJFU1MgICAgICAgICAgICAgICAgICAgMHgwMDAwMDE4MAotI2RlZmluZSBNQ19UQ0FNX1RBUkdFVF9PRkZTRVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxODAKLSNkZWZpbmUgTUNfVENBTV9UQVJHRVRfQUREUl9NU0IgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBNQ19UQ0FNX1RBUkdFVF9BRERSX0xTQiAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgTUNfVENBTV9UQVJHRVRfQUREUl9NQVNLICAgICAgICAgICAgICAgICAweDAwM2ZmZmUwCi0jZGVmaW5lIE1DX1RDQU1fVEFSR0VUX0FERFJfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBNQ19UQ0FNX1RBUkdFVF9BRERSX01BU0spID4+IE1DX1RDQU1fVEFSR0VUX0FERFJfTFNCKQotI2RlZmluZSBNQ19UQ0FNX1RBUkdFVF9BRERSX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IE1DX1RDQU1fVEFSR0VUX0FERFJfTFNCKSAmIE1DX1RDQU1fVEFSR0VUX0FERFJfTUFTSykKLQotI2RlZmluZSBBRERSX0VSUk9SX0NPTlRST0xfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKLSNkZWZpbmUgQUREUl9FUlJPUl9DT05UUk9MX09GRlNFVCAgICAgICAgICAgICAgICAweDAwMDAwMjAwCi0jZGVmaW5lIEFERFJfRVJST1JfQ09OVFJPTF9RVUFMX0VOQUJMRV9NU0IgICAgICAgMQotI2RlZmluZSBBRERSX0VSUk9SX0NPTlRST0xfUVVBTF9FTkFCTEVfTFNCICAgICAgIDEKLSNkZWZpbmUgQUREUl9FUlJPUl9DT05UUk9MX1FVQUxfRU5BQkxFX01BU0sgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIEFERFJfRVJST1JfQ09OVFJPTF9RVUFMX0VOQUJMRV9HRVQoeCkgICAgKCgoeCkgJiBBRERSX0VSUk9SX0NPTlRST0xfUVVBTF9FTkFCTEVfTUFTSykgPj4gQUREUl9FUlJPUl9DT05UUk9MX1FVQUxfRU5BQkxFX0xTQikKLSNkZWZpbmUgQUREUl9FUlJPUl9DT05UUk9MX1FVQUxfRU5BQkxFX1NFVCh4KSAgICAoKCh4KSA8PCBBRERSX0VSUk9SX0NPTlRST0xfUVVBTF9FTkFCTEVfTFNCKSAmIEFERFJfRVJST1JfQ09OVFJPTF9RVUFMX0VOQUJMRV9NQVNLKQotI2RlZmluZSBBRERSX0VSUk9SX0NPTlRST0xfRU5BQkxFX01TQiAgICAgICAgICAgIDAKLSNkZWZpbmUgQUREUl9FUlJPUl9DT05UUk9MX0VOQUJMRV9MU0IgICAgICAgICAgICAwCi0jZGVmaW5lIEFERFJfRVJST1JfQ09OVFJPTF9FTkFCTEVfTUFTSyAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBBRERSX0VSUk9SX0NPTlRST0xfRU5BQkxFX0dFVCh4KSAgICAgICAgICgoKHgpICYgQUREUl9FUlJPUl9DT05UUk9MX0VOQUJMRV9NQVNLKSA+PiBBRERSX0VSUk9SX0NPTlRST0xfRU5BQkxFX0xTQikKLSNkZWZpbmUgQUREUl9FUlJPUl9DT05UUk9MX0VOQUJMRV9TRVQoeCkgICAgICAgICAoKCh4KSA8PCBBRERSX0VSUk9SX0NPTlRST0xfRU5BQkxFX0xTQikgJiBBRERSX0VSUk9SX0NPTlRST0xfRU5BQkxFX01BU0spCi0KLSNkZWZpbmUgQUREUl9FUlJPUl9TVEFUVVNfQUREUkVTUyAgICAgICAgICAgICAgICAweDAwMDAwMjA0Ci0jZGVmaW5lIEFERFJfRVJST1JfU1RBVFVTX09GRlNFVCAgICAgICAgICAgICAgICAgMHgwMDAwMDIwNAotI2RlZmluZSBBRERSX0VSUk9SX1NUQVRVU19XUklURV9NU0IgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIEFERFJfRVJST1JfU1RBVFVTX1dSSVRFX0xTQiAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgQUREUl9FUlJPUl9TVEFUVVNfV1JJVEVfTUFTSyAgICAgICAgICAgICAweDAyMDAwMDAwCi0jZGVmaW5lIEFERFJfRVJST1JfU1RBVFVTX1dSSVRFX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBBRERSX0VSUk9SX1NUQVRVU19XUklURV9NQVNLKSA+PiBBRERSX0VSUk9SX1NUQVRVU19XUklURV9MU0IpCi0jZGVmaW5lIEFERFJfRVJST1JfU1RBVFVTX1dSSVRFX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgQUREUl9FUlJPUl9TVEFUVVNfV1JJVEVfTFNCKSAmIEFERFJfRVJST1JfU1RBVFVTX1dSSVRFX01BU0spCi0jZGVmaW5lIEFERFJfRVJST1JfU1RBVFVTX0FERFJFU1NfTVNCICAgICAgICAgICAgMjQKLSNkZWZpbmUgQUREUl9FUlJPUl9TVEFUVVNfQUREUkVTU19MU0IgICAgICAgICAgICAwCi0jZGVmaW5lIEFERFJfRVJST1JfU1RBVFVTX0FERFJFU1NfTUFTSyAgICAgICAgICAgMHgwMWZmZmZmZgotI2RlZmluZSBBRERSX0VSUk9SX1NUQVRVU19BRERSRVNTX0dFVCh4KSAgICAgICAgICgoKHgpICYgQUREUl9FUlJPUl9TVEFUVVNfQUREUkVTU19NQVNLKSA+PiBBRERSX0VSUk9SX1NUQVRVU19BRERSRVNTX0xTQikKLSNkZWZpbmUgQUREUl9FUlJPUl9TVEFUVVNfQUREUkVTU19TRVQoeCkgICAgICAgICAoKCh4KSA8PCBBRERSX0VSUk9SX1NUQVRVU19BRERSRVNTX0xTQikgJiBBRERSX0VSUk9SX1NUQVRVU19BRERSRVNTX01BU0spCi0KLQotI2lmbmRlZiBfX0FTU0VNQkxFUl9fCi0KLXR5cGVkZWYgc3RydWN0IHZtY19yZWdfcmVnX3MgewotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWNfdGNhbV92YWxpZFszMl07Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtY190Y2FtX21hc2tbMzJdOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWNfdGNhbV9jb21wYXJlWzMyXTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1jX3RjYW1fdGFyZ2V0WzMyXTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGFkZHJfZXJyb3JfY29udHJvbDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGFkZHJfZXJyb3Jfc3RhdHVzOwotfSB2bWNfcmVnX3JlZ190OwotCi0jZW5kaWYgLyogX19BU1NFTUJMRVJfXyAqLwotCi0jZW5kaWYgLyogX1ZNQ19SRUdfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3NC4wL2h3L2FuYWxvZ19pbnRmX2FyZXNfcmVnLmggYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzQuMC9ody9hbmFsb2dfaW50Zl9hcmVzX3JlZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTcwZmE5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3NC4wL2h3L2FuYWxvZ19pbnRmX2FyZXNfcmVnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMjkxICswLDAgQEAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ29weXJpZ2h0IChjKSAyMDA0LTIwMTAgQXRoZXJvcyBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyAKLS8vCi0vLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLS8vIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0vLwotLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0vLyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0vLyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgotLy8gQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotLy8gV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0vLyBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgotLy8gT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLS8vCi0vLwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIEF1dGhvcihzKTogPSJBdGhlcm9zIgotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLS8qIENvcHlyaWdodCAoQykgMjAwOSBEZW5hbGkgU29mdHdhcmUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZCAgICAgICAgICAgICAgKi8KLS8qIFRISVMgRklMRSBJUyBBVVRPTUFUSUNBTExZIEdFTkVSQVRFRCBCWSBERU5BTEkgQkxVRVBSSU5ULCBETyBOT1QgRURJVCAgICAgKi8KLQotCi0jaWZuZGVmIF9BTkFMT0dfSU5URl9BUkVTX1JFR19SRUdfSF8KLSNkZWZpbmUgX0FOQUxPR19JTlRGX0FSRVNfUkVHX1JFR19IXwotCi0KLS8qIG1hY3JvcyBmb3IgUlhSRl9CSUFTMSAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1NQQVJFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfU1BBUkVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9TUEFSRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1NQQVJFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAxKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfU1BBUkVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSVIyNVNQQVJFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JUjI1U1BBUkVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0lSMjVTUEFSRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBlCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSVIyNVNQQVJFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwZSkgPj4gMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JUjI1U1BBUkVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMSkgJiAweDAwMDAwMDBlKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0lSMjVMTzE4X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSVIyNUxPMThfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JUjI1TE8xOF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0lSMjVMTzE4X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwNzApID4+IDQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSVIyNUxPMThfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDQpICYgMHgwMDAwMDA3MCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JQzI1TE8zNl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0lDMjVMTzM2X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSUMyNUxPMzZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzODAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JQzI1TE8zNl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMzgwKSA+PiA3KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0lDMjVMTzM2X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA3KSAmIDB4MDAwMDAzODApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSUMyNU1YUjJfNUdIX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JQzI1TVhSMl81R0hfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0lDMjVNWFIyXzVHSF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxYzAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSUMyNU1YUjJfNUdIX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAxYzAwKSA+PiAxMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JQzI1TVhSMl81R0hfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMCkgJiAweDAwMDAxYzAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0lDMjVNWFI1R0hfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSUMyNU1YUjVHSF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JQzI1TVhSNUdIX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwZTAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0lDMjVNWFI1R0hfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwZTAwMCkgPj4gMTMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSUMyNU1YUjVHSF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTMpICYgMHgwMDAwZTAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JQzI1VkdBNUdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0lDMjVWR0E1R19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSUMyNVZHQTVHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNzAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JQzI1VkdBNUdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwNzAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0lDMjVWR0E1R19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDAwNzAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSUM3NUxOQTVHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JQzc1TE5BNUdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0lDNzVMTkE1R19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMzgwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSUM3NUxOQTVHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMzgwMDAwKSA+PiAxOSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JQzc1TE5BNUdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOSkgJiAweDAwMzgwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0lSMjVMTzI0X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSVIyNUxPMjRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JUjI1TE8yNF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMWMwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0lSMjVMTzI0X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMWMwMDAwMCkgPj4gMjIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSVIyNUxPMjRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjIpICYgMHgwMWMwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JQzI1TVhSMkdIX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0lDMjVNWFIyR0hfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSUMyNU1YUjJHSF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGUwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JQzI1TVhSMkdIX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MGUwMDAwMDApID4+IDI1KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0lDMjVNWFIyR0hfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI1KSAmIDB4MGUwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSUM3NUxOQTJHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JQzc1TE5BMkdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0lDNzVMTkEyR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSUM3NUxOQTJHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDcwMDAwMDAwKSA+PiAyOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JQzc1TE5BMkdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyOCkgJiAweDcwMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0JJQVNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfQklBU19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9CSUFTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0JJQVNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg4MDAwMDAwMCkgPj4gMzEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfQklBU19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMzEpICYgMHg4MDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBSWFJGX0JJQVMyICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfU1BBUkVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9TUEFSRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1NQQVJFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfU1BBUkVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDEpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9TUEFSRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BLRU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUEtFTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9QS0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGUKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BLRU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDBlKSA+PiAxKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUEtFTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxKSAmIDB4MDAwMDAwMGUpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9WQ01WQUxVRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1ZDTVZBTFVFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfVkNNVkFMVUVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDcwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9WQ01WQUxVRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDA3MCkgPj4gNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1ZDTVZBTFVFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNCkgJiAweDAwMDAwMDcwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUFdEX1ZDTUJVRl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9QV0RfVkNNQlVGX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BXRF9WQ01CVUZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUFdEX1ZDTUJVRl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwODApID4+IDcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9QV0RfVkNNQlVGX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDcpICYgMHgwMDAwMDA4MCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BXRF9JUjI1QUdDNUdIX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUFdEX0lSMjVBR0M1R0hfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9QV0RfSVIyNUFHQzVHSF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3MDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BXRF9JUjI1QUdDNUdIX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwNzAwKSA+PiA4KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUFdEX0lSMjVBR0M1R0hfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDA3MDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9QV0RfSVIyNUFHQzVHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BXRF9JUjI1QUdDNUdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUFdEX0lSMjVBR0M1R19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzODAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9QV0RfSVIyNUFHQzVHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAzODAwKSA+PiAxMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BXRF9JUjI1QUdDNUdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMSkgJiAweDAwMDAzODAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUFdEX0lDMjVBR0M1R19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9QV0RfSUMyNUFHQzVHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BXRF9JQzI1QUdDNUdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxYzAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUFdEX0lDMjVBR0M1R19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAxYzAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9QV0RfSUMyNUFHQzVHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwMDAxYzAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BXRF9JUjI1QUdDMkdIX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUFdEX0lSMjVBR0MyR0hfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9QV0RfSVIyNUFHQzJHSF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwZTAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BXRF9JUjI1QUdDMkdIX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwZTAwMDApID4+IDE3KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUFdEX0lSMjVBR0MyR0hfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE3KSAmIDB4MDAwZTAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9QV0RfSVIyNUFHQzJHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BXRF9JUjI1QUdDMkdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUFdEX0lSMjVBR0MyR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNzAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9QV0RfSVIyNUFHQzJHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwNzAwMDAwKSA+PiAyMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BXRF9JUjI1QUdDMkdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMCkgJiAweDAwNzAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUFdEX0lDMjVBR0MyR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9QV0RfSUMyNUFHQzJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BXRF9JQzI1QUdDMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzgwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUFdEX0lDMjVBR0MyR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMzgwMDAwMCkgPj4gMjMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9QV0RfSUMyNUFHQzJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjMpICYgMHgwMzgwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BXRF9JQzI1VkNNQlVGX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUFdEX0lDMjVWQ01CVUZfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9QV0RfSUMyNVZDTUJVRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWMwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BXRF9JQzI1VkNNQlVGX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MWMwMDAwMDApID4+IDI2KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUFdEX0lDMjVWQ01CVUZfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI2KSAmIDB4MWMwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9QV0RfSVIyNVZDTV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BXRF9JUjI1VkNNX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUFdEX0lSMjVWQ01fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGUwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9QV0RfSVIyNVZDTV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGUwMDAwMDAwKSA+PiAyOSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BXRF9JUjI1VkNNX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyOSkgJiAweGUwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIFJYUkZfR0FJTlNUQUdFUyAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfU1BBUkVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19TUEFSRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1NQQVJFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfU1BBUkVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAxKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19TUEFSRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX0xOQU9OX0NBTERDX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTE5BT05fQ0FMRENfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19MTkFPTl9DQUxEQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX0xOQU9OX0NBTERDX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMikgPj4gMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTE5BT05fQ0FMRENfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMSkgJiAweDAwMDAwMDAyKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19WR0E1R19DQVBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1ZHQTVHX0NBUF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfVkdBNUdfQ0FQX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwYwotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19WR0E1R19DQVBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMGMpID4+IDIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1ZHQTVHX0NBUF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIpICYgMHgwMDAwMDAwYykKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTE5BNUdfQ0FQX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19MTkE1R19DQVBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX0xOQTVHX0NBUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTE5BNUdfQ0FQX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDMwKSA+PiA0KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19MTkE1R19DQVBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA0KSAmIDB4MDAwMDAwMzApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX0xOQTVHX1NIT1JUSU5QX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTE5BNUdfU0hPUlRJTlBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19MTkE1R19TSE9SVElOUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX0xOQTVHX1NIT1JUSU5QX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDA0MCkgPj4gNikKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTE5BNUdfU0hPUlRJTlBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNikgJiAweDAwMDAwMDQwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19QV0RfTE81R19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1BXRF9MTzVHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfUFdEX0xPNUdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19QV0RfTE81R19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwODApID4+IDcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1BXRF9MTzVHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDcpICYgMHgwMDAwMDA4MCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfUFdEX1ZHQTVHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19QV0RfVkdBNUdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1BXRF9WR0E1R19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfUFdEX1ZHQTVHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMTAwKSA+PiA4KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19QV0RfVkdBNUdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDAxMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1BXRF9NWFI1R19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfUFdEX01YUjVHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19QV0RfTVhSNUdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1BXRF9NWFI1R19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDIwMCkgPj4gOSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfUFdEX01YUjVHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOSkgJiAweDAwMDAwMjAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19QV0RfTE5BNUdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1BXRF9MTkE1R19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfUFdEX0xOQTVHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19QV0RfTE5BNUdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDQwMCkgPj4gMTApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1BXRF9MTkE1R19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTApICYgMHgwMDAwMDQwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTE5BMkdfQ0FQX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19MTkEyR19DQVBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX0xOQTJHX0NBUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE4MDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTE5BMkdfQ0FQX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDE4MDApID4+IDExKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19MTkEyR19DQVBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDExKSAmIDB4MDAwMDE4MDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX0xOQTJHX1NIT1JUSU5QX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTE5BMkdfU0hPUlRJTlBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19MTkEyR19TSE9SVElOUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX0xOQTJHX1NIT1JUSU5QX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAyMDAwKSA+PiAxMykKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTE5BMkdfU0hPUlRJTlBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMykgJiAweDAwMDAyMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19MTkEyR19MUF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX0xOQTJHX0xQX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTE5BMkdfTFBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19MTkEyR19MUF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwNDAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX0xOQTJHX0xQX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwMDAwNDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfUFdEX0xPMkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19QV0RfTE8yR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1BXRF9MTzJHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfUFdEX0xPMkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDgwMDApID4+IDE1KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19QV0RfTE8yR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE1KSAmIDB4MDAwMDgwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1BXRF9NWFIyR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfUFdEX01YUjJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19QV0RfTVhSMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1BXRF9NWFIyR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDEwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfUFdEX01YUjJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAwMDEwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19QV0RfTE5BMkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1BXRF9MTkEyR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfUFdEX0xOQTJHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19QV0RfTE5BMkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAyMDAwMCkgPj4gMTcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1BXRF9MTkEyR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTcpICYgMHgwMDAyMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTVhSNUdfR0FJTl9PVlJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19NWFI1R19HQUlOX09WUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX01YUjVHX0dBSU5fT1ZSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwYzAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTVhSNUdfR0FJTl9PVlJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwYzAwMDApID4+IDE4KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19NWFI1R19HQUlOX09WUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE4KSAmIDB4MDAwYzAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1ZHQTVHX0dBSU5fT1ZSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfVkdBNUdfR0FJTl9PVlJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19WR0E1R19HQUlOX09WUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNzAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1ZHQTVHX0dBSU5fT1ZSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwNzAwMDAwKSA+PiAyMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfVkdBNUdfR0FJTl9PVlJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMCkgJiAweDAwNzAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19MTkE1R19HQUlOX09WUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX0xOQTVHX0dBSU5fT1ZSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTE5BNUdfR0FJTl9PVlJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzgwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19MTkE1R19HQUlOX09WUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMzgwMDAwMCkgPj4gMjMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX0xOQTVHX0dBSU5fT1ZSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjMpICYgMHgwMzgwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTVhSMkdfR0FJTl9PVlJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19NWFIyR19HQUlOX09WUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX01YUjJHX0dBSU5fT1ZSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGMwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTVhSMkdfR0FJTl9PVlJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MGMwMDAwMDApID4+IDI2KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19NWFIyR19HQUlOX09WUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI2KSAmIDB4MGMwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX0xOQTJHX0dBSU5fT1ZSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTE5BMkdfR0FJTl9PVlJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19MTkEyR19HQUlOX09WUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX0xOQTJHX0dBSU5fT1ZSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDcwMDAwMDAwKSA+PiAyOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTE5BMkdfR0FJTl9PVlJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyOCkgJiAweDcwMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19SWF9PVkVSUklERV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1JYX09WRVJSSURFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfUlhfT1ZFUlJJREVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19SWF9PVkVSUklERV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg4MDAwMDAwMCkgPj4gMzEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1JYX09WRVJSSURFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMzEpICYgMHg4MDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBSWFJGX0FHQyAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBjCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGMKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19TUEFSRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX1NQQVJFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfU1BBUkVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM2YKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19TUEFSRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDNmKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX1NQQVJFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwM2YpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfQUdDX0ZBTExfQ1RSTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19BR0NfRkFMTF9DVFJMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0FHQ19GQUxMX0NUUkxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMWMwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfQUdDX0ZBTExfQ1RSTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDFjMCkgPj4gNikKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19BR0NfRkFMTF9DVFJMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNikgJiAweDAwMDAwMWMwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0FHQzVHX0NBTERBQ19PVlJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfQUdDNUdfQ0FMREFDX09WUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19BR0M1R19DQUxEQUNfT1ZSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwN2UwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0FHQzVHX0NBTERBQ19PVlJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDdlMDApID4+IDkpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfQUdDNUdfQ0FMREFDX09WUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDkpICYgMHgwMDAwN2UwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19BR0M1R19EQkRBQ19PVlJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0FHQzVHX0RCREFDX09WUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfQUdDNUdfREJEQUNfT1ZSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNzgwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19BR0M1R19EQkRBQ19PVlJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwNzgwMDApID4+IDE1KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0FHQzVHX0RCREFDX09WUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE1KSAmIDB4MDAwNzgwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfQUdDMkdfQ0FMREFDX09WUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19BR0MyR19DQUxEQUNfT1ZSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0FHQzJHX0NBTERBQ19PVlJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxZjgwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfQUdDMkdfQ0FMREFDX09WUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAxZjgwMDAwKSA+PiAxOSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19BR0MyR19DQUxEQUNfT1ZSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOSkgJiAweDAxZjgwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0FHQzJHX0RCREFDX09WUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfQUdDMkdfREJEQUNfT1ZSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19BR0MyR19EQkRBQ19PVlJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxZTAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0FHQzJHX0RCREFDX09WUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxZTAwMDAwMCkgPj4gMjUpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfQUdDMkdfREJEQUNfT1ZSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjUpICYgMHgxZTAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19BR0NfQ0FMX09WUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0FHQ19DQUxfT1ZSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfQUdDX0NBTF9PVlJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19BR0NfQ0FMX09WUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MjAwMDAwMDApID4+IDI5KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0FHQ19DQUxfT1ZSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI5KSAmIDB4MjAwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfQUdDX09OX09WUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19BR0NfT05fT1ZSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0FHQ19PTl9PVlJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfQUdDX09OX09WUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDQwMDAwMDAwKSA+PiAzMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19BR0NfT05fT1ZSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMCkgJiAweDQwMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0FHQ19PVkVSUklERV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfQUdDX09WRVJSSURFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19BR0NfT1ZFUlJJREVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0FHQ19PVkVSUklERV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg4MDAwMDAwMCkgPj4gMzEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfQUdDX09WRVJSSURFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMzEpICYgMHg4MDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBUWFJGMSAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9EQ0FTMkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX0RDQVMyR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfRENBUzJHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9EQ0FTMkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDA3KSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX0RDQVMyR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfT0IyR19QQUxPRkZfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9PQjJHX1BBTE9GRl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX09CMkdfUEFMT0ZGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfT0IyR19QQUxPRkZfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAzOCkgPj4gMykKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9PQjJHX1BBTE9GRl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMykgJiAweDAwMDAwMDM4KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX09CMkdfUUFNX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfT0IyR19RQU1fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9PQjJHX1FBTV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDFjMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX09CMkdfUUFNX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAxYzApID4+IDYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfT0IyR19RQU1fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDYpICYgMHgwMDAwMDFjMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9PQjJHX1BTS19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX09CMkdfUFNLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfT0IyR19QU0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBlMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9PQjJHX1BTS19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwZTAwKSA+PiA5KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX09CMkdfUFNLX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA5KSAmIDB4MDAwMDBlMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfT0IyR19DQ0tfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9PQjJHX0NDS19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX09CMkdfQ0NLX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA3MDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfT0IyR19DQ0tfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDA3MDAwKSA+PiAxMikKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9PQjJHX0NDS19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMikgJiAweDAwMDA3MDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX0RCMkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfREIyR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9EQjJHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzODAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX0RCMkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAzODAwMCkgPj4gMTUpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfREIyR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTUpICYgMHgwMDAzODAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9QRE9VVDJHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX1BET1VUMkdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfUERPVVQyR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9QRE9VVDJHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwNDAwMDApID4+IDE4KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX1BET1VUMkdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE4KSAmIDB4MDAwNDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfUEREUjJHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9QRERSMkdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX1BERFIyR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfUEREUjJHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDgwMDAwKSA+PiAxOSkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9QRERSMkdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOSkgJiAweDAwMDgwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX1BETVhSMkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfUERNWFIyR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9QRE1YUjJHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX1BETVhSMkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDEwMDAwMCkgPj4gMjApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfUERNWFIyR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjApICYgMHgwMDEwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9QRExPMkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX1BETE8yR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfUERMTzJHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9QRExPMkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAyMDAwMDApID4+IDIxKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX1BETE8yR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIxKSAmIDB4MDAyMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfTE9CVUYyR0ZPUkNFRF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9MT0JVRjJHRk9SQ0VEX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX0xPQlVGMkdGT1JDRURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfTE9CVUYyR0ZPUkNFRF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwNDAwMDAwKSA+PiAyMikKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9MT0JVRjJHRk9SQ0VEX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMikgJiAweDAwNDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX0xPRElWMkdGT1JDRURfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfTE9ESVYyR0ZPUkNFRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9MT0RJVjJHRk9SQ0VEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX0xPRElWMkdGT1JDRURfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDgwMDAwMCkgPj4gMjMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfTE9ESVYyR0ZPUkNFRF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjMpICYgMHgwMDgwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9QQURSVkdOMkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX1BBRFJWR04yR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfUEFEUlZHTjJHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N2YwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9QQURSVkdOMkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N2YwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX1BBRFJWR04yR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI0KSAmIDB4N2YwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfTE9DQUxUWEdBSU4yR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9MT0NBTFRYR0FJTjJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX0xPQ0FMVFhHQUlOMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfTE9DQUxUWEdBSU4yR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDgwMDAwMDAwKSA+PiAzMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9MT0NBTFRYR0FJTjJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMSkgJiAweDgwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIFRYUkYyICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDQKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0NAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX1NQQVJFMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfU1BBUkUyX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9TUEFSRTJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX1NQQVJFMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDEpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfU1BBUkUyX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9EM0I1R19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX0QzQjVHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfRDNCNUdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGUKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9EM0I1R19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDBlKSA+PiAxKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX0QzQjVHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxKSAmIDB4MDAwMDAwMGUpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfRDRCNUdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9ENEI1R19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX0Q0QjVHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDcwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfRDRCNUdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDA3MCkgPj4gNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9ENEI1R19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNCkgJiAweDAwMDAwMDcwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX1BET1VUNUdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfUERPVVQ1R19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9QRE9VVDVHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDc4MAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX1BET1VUNUdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDA3ODApID4+IDcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfUERPVVQ1R19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDcpICYgMHgwMDAwMDc4MCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9QRE1YUjVHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX1BETVhSNUdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfUERNWFI1R19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9QRE1YUjVHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDA4MDApID4+IDExKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX1BETVhSNUdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDExKSAmIDB4MDAwMDA4MDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfUERMT0JVRjVHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9QRExPQlVGNUdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX1BETE9CVUY1R19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfUERMT0JVRjVHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAxMDAwKSA+PiAxMikKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9QRExPQlVGNUdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMikgJiAweDAwMDAxMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX1BETE9ESVY1R19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfUERMT0RJVjVHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9QRExPRElWNUdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX1BETE9ESVY1R19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMjAwMCkgPj4gMTMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfUERMT0RJVjVHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTMpICYgMHgwMDAwMjAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9MT0JVRjVHRk9SQ0VEX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX0xPQlVGNUdGT1JDRURfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfTE9CVUY1R0ZPUkNFRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9MT0JVRjVHRk9SQ0VEX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDQwMDApID4+IDE0KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX0xPQlVGNUdGT1JDRURfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE0KSAmIDB4MDAwMDQwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfTE9ESVY1R0ZPUkNFRF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9MT0RJVjVHRk9SQ0VEX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX0xPRElWNUdGT1JDRURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfTE9ESVY1R0ZPUkNFRF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDA4MDAwKSA+PiAxNSkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9MT0RJVjVHRk9SQ0VEX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNSkgJiAweDAwMDA4MDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX1BBRFJWMkdONUdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfUEFEUlYyR041R19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9QQURSVjJHTjVHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBmMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX1BBRFJWMkdONUdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDBmMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfUEFEUlYyR041R19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMDBmMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9QQURSVjNHTjVHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX1BBRFJWM0dONUdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfUEFEUlYzR041R19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBmMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9QQURSVjNHTjVHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDBmMDAwMDApID4+IDIwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX1BBRFJWM0dONUdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIwKSAmIDB4MDBmMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfUEFEUlY0R041R19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9QQURSVjRHTjVHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX1BBRFJWNEdONUdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBmMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfUEFEUlY0R041R19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDBmMDAwMDAwKSA+PiAyNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9QQURSVjRHTjVHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNCkgJiAweDBmMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX0xPQ0FMVFhHQUlONUdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfTE9DQUxUWEdBSU41R19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9MT0NBTFRYR0FJTjVHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX0xPQ0FMVFhHQUlONUdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxMDAwMDAwMCkgPj4gMjgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfTE9DQUxUWEdBSU41R19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjgpICYgMHgxMDAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9PQ0FTMkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX09DQVMyR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfT0NBUzJHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZTAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9PQ0FTMkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZTAwMDAwMDApID4+IDI5KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX09DQVMyR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI5KSAmIDB4ZTAwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgVFhSRjMgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0OAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjNfU1BBUkUzX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19TUEFSRTNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX1NQQVJFM19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwN2ZmZmZmCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjNfU1BBUkUzX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDdmZmZmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19TUEFSRTNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwN2ZmZmZmKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX0NBUzVHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjNfQ0FTNUdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19DQVM1R19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzgwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX0NBUzVHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMzgwMDAwMCkgPj4gMjMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjNfQ0FTNUdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjMpICYgMHgwMzgwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19PQjVHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX09CNUdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjNfT0I1R19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWMwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19PQjVHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MWMwMDAwMDApID4+IDI2KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX09CNUdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI2KSAmIDB4MWMwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjNfRDJCNUdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19EMkI1R19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX0QyQjVHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGUwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjNfRDJCNUdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGUwMDAwMDAwKSA+PiAyOSkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19EMkI1R19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyOSkgJiAweGUwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIFRYUkY0ICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNGMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0YwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X0NPTVAyR19QU0tfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfQ09NUDJHX1BTS19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9DT01QMkdfUFNLX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X0NPTVAyR19QU0tfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDcpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfQ09NUDJHX1BTS19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwNykKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9DT01QMkdfQ0NLX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X0NPTVAyR19DQ0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfQ09NUDJHX0NDS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9DT01QMkdfQ0NLX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDM4KSA+PiAzKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X0NPTVAyR19DQ0tfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzKSAmIDB4MDAwMDAwMzgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfQU1QMkIyR19RQU1fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9BTVAyQjJHX1FBTV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X0FNUDJCMkdfUUFNX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMWMwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfQU1QMkIyR19RQU1fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDFjMCkgPj4gNikKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9BTVAyQjJHX1FBTV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNikgJiAweDAwMDAwMWMwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X0FNUDJCMkdfUFNLX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfQU1QMkIyR19QU0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9BTVAyQjJHX1BTS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGUwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X0FNUDJCMkdfUFNLX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDBlMDApID4+IDkpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfQU1QMkIyR19QU0tfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDkpICYgMHgwMDAwMGUwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9BTVAyQjJHX0NDS19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X0FNUDJCMkdfQ0NLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfQU1QMkIyR19DQ0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDcwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9BTVAyQjJHX0NDS19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDcwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X0FNUDJCMkdfQ0NLX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEyKSAmIDB4MDAwMDcwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfQU1QMkNBUzJHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9BTVAyQ0FTMkdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X0FNUDJDQVMyR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDM4MDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfQU1QMkNBUzJHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDM4MDAwKSA+PiAxNSkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9BTVAyQ0FTMkdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNSkgJiAweDAwMDM4MDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X0ZJTFRSMkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfRklMVFIyR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9GSUxUUjJHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBjMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X0ZJTFRSMkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDBjMDAwMCkgPj4gMTgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfRklMVFIyR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTgpICYgMHgwMDBjMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9QV0RGQjJfMkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X1BXREZCMl8yR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfUFdERkIyXzJHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9QV0RGQjJfMkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAxMDAwMDApID4+IDIwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X1BXREZCMl8yR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIwKSAmIDB4MDAxMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfUFdERkIxXzJHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9QV0RGQjFfMkdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X1BXREZCMV8yR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfUFdERkIxXzJHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMjAwMDAwKSA+PiAyMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9QV0RGQjFfMkdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMSkgJiAweDAwMjAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X1BERkIyR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfUERGQjJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9QREZCMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X1BERkIyR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDQwMDAwMCkgPj4gMjIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfUERGQjJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjIpICYgMHgwMDQwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9SRElWNUdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X1JESVY1R19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfUkRJVjVHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDE4MDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9SRElWNUdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDE4MDAwMDApID4+IDIzKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X1JESVY1R19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIzKSAmIDB4MDE4MDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfQ0FQRElWNUdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9DQVBESVY1R19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X0NBUERJVjVHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBlMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfQ0FQRElWNUdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDBlMDAwMDAwKSA+PiAyNSkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9DQVBESVY1R19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNSkgJiAweDBlMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X1BEUFJFRElTVDVHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfUERQUkVESVNUNUdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9QRFBSRURJU1Q1R19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X1BEUFJFRElTVDVHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxMDAwMDAwMCkgPj4gMjgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfUERQUkVESVNUNUdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjgpICYgMHgxMDAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9SRElWMkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X1JESVYyR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfUkRJVjJHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9SRElWMkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NjAwMDAwMDApID4+IDI5KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X1JESVYyR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI5KSAmIDB4NjAwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfUERQUkVESVNUMkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9QRFBSRURJU1QyR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X1BEUFJFRElTVDJHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfUERQUkVESVNUMkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDgwMDAwMDAwKSA+PiAzMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9QRFBSRURJU1QyR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMSkgJiAweDgwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIFRYUkY1ICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X0ZCSEkyR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfRkJISTJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9GQkhJMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X0ZCSEkyR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDEpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfRkJMTzJHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9GQkxPMkdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X0ZCTE8yR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfRkJMTzJHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMikgPj4gMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9SRUZISTJHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X1JFRkhJMkdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfUkVGSEkyR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMWMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9SRUZISTJHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDFjKSA+PiAyKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X1JFRkhJMkdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyKSAmIDB4MDAwMDAwMWMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfUkVGTE8yR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9SRUZMTzJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X1JFRkxPMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGUwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfUkVGTE8yR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDBlMCkgPj4gNSkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9SRUZMTzJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNSkgJiAweDAwMDAwMGUwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X1BLMkIyR19RQU1fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfUEsyQjJHX1FBTV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9QSzJCMkdfUUFNX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X1BLMkIyR19RQU1fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAzMDApID4+IDgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfUEsyQjJHX1FBTV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwMDMwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9QSzJCMkdfUFNLX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X1BLMkIyR19QU0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfUEsyQjJHX1BTS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBjMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9QSzJCMkdfUFNLX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDBjMDApID4+IDEwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X1BLMkIyR19QU0tfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEwKSAmIDB4MDAwMDBjMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfUEsyQjJHX0NDS19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9QSzJCMkdfQ0NLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X1BLMkIyR19DQ0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfUEsyQjJHX0NDS19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAzMDAwKSA+PiAxMikKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9QSzJCMkdfQ0NLX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMikgJiAweDAwMDAzMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X1BLMUIyR19RQU1fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfUEsxQjJHX1FBTV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9QSzFCMkdfUUFNX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYzAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X1BLMUIyR19RQU1fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwYzAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfUEsxQjJHX1FBTV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwMDAwYzAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9QSzFCMkdfUFNLX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X1BLMUIyR19QU0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfUEsxQjJHX1BTS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9QSzFCMkdfUFNLX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMzAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X1BLMUIyR19QU0tfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDAwMzAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfUEsxQjJHX0NDS19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9QSzFCMkdfQ0NLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X1BLMUIyR19DQ0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMGMwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfUEsxQjJHX0NDS19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMGMwMDAwKSA+PiAxOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9QSzFCMkdfQ0NLX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOCkgJiAweDAwMGMwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X01JT0IyR19RQU1fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfTUlPQjJHX1FBTV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9NSU9CMkdfUUFNX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDcwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X01JT0IyR19RQU1fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDcwMDAwMCkgPj4gMjApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfTUlPQjJHX1FBTV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjApICYgMHgwMDcwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9NSU9CMkdfUFNLX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X01JT0IyR19QU0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfTUlPQjJHX1BTS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDM4MDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9NSU9CMkdfUFNLX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDM4MDAwMDApID4+IDIzKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X01JT0IyR19QU0tfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIzKSAmIDB4MDM4MDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfTUlPQjJHX0NDS19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9NSU9CMkdfQ0NLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X01JT0IyR19DQ0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFjMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfTUlPQjJHX0NDS19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDFjMDAwMDAwKSA+PiAyNikKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9NSU9CMkdfQ0NLX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNikgJiAweDFjMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X0NPTVAyR19RQU1fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfQ09NUDJHX1FBTV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9DT01QMkdfUUFNX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhlMDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X0NPTVAyR19RQU1fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhlMDAwMDAwMCkgPj4gMjkpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfQ09NUDJHX1FBTV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjkpICYgMHhlMDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBUWFJGNiAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTQKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9TUEFSRTZfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X1NQQVJFNl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfU1BBUkU2X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9TUEFSRTZfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAxKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X1NQQVJFNl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfUEFMX0xPQ0tFRF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9QQUxfTE9DS0VEX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X1BBTF9MT0NLRURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfUEFMX0xPQ0tFRF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMikgPj4gMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9QQURSVkdOMkdfU01PVVRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X1BBRFJWR04yR19TTU9VVF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfUEFEUlZHTjJHX1NNT1VUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9QQURSVkdOMkdfU01PVVRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMGZjKSA+PiAyKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X0dBSU5TVEVQMkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfR0FJTlNURVAyR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9HQUlOU1RFUDJHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDcwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X0dBSU5TVEVQMkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDA3MDApID4+IDgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfR0FJTlNURVAyR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwMDcwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9VU0VfR0FJTl9ERUxUQTJHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X1VTRV9HQUlOX0RFTFRBMkdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfVVNFX0dBSU5fREVMVEEyR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9VU0VfR0FJTl9ERUxUQTJHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDA4MDApID4+IDExKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X1VTRV9HQUlOX0RFTFRBMkdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDExKSAmIDB4MDAwMDA4MDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfUEFEUlZHTl9JTkRFWF9JMkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9QQURSVkdOX0lOREVYX0kyR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X1BBRFJWR05fSU5ERVhfSTJHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBmMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfUEFEUlZHTl9JTkRFWF9JMkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDBmMDAwKSA+PiAxMikKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9QQURSVkdOX0lOREVYX0kyR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMikgJiAweDAwMDBmMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X1ZDTU9OREVMQVkyR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfVkNNT05ERUxBWTJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9WQ01PTkRFTEFZMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA3MDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X1ZDTU9OREVMQVkyR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDA3MDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfVkNNT05ERUxBWTJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMDA3MDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9DQVBESVYyR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X0NBUERJVjJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfQ0FQRElWMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzODAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9DQVBESVYyR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAzODAwMDApID4+IDE5KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X0NBUERJVjJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE5KSAmIDB4MDAzODAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfQ0FQRElWMkdPVlJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9DQVBESVYyR09WUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X0NBUERJVjJHT1ZSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfQ0FQRElWMkdPVlJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwNDAwMDAwKSA+PiAyMikKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9DQVBESVYyR09WUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMikgJiAweDAwNDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X0VOUEFDQUwyR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfRU5QQUNBTDJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9FTlBBQ0FMMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X0VOUEFDQUwyR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDgwMDAwMCkgPj4gMjMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfRU5QQUNBTDJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjMpICYgMHgwMDgwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9PRkZTRVQyR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X09GRlNFVDJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfT0ZGU0VUMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N2YwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9PRkZTRVQyR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N2YwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X09GRlNFVDJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI0KSAmIDB4N2YwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfRU5PRkZTRVRDQUwyR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9FTk9GRlNFVENBTDJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X0VOT0ZGU0VUQ0FMMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfRU5PRkZTRVRDQUwyR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDgwMDAwMDAwKSA+PiAzMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9FTk9GRlNFVENBTDJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMSkgJiAweDgwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIFRYUkY3ICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjdfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGN19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1OAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY3X1NQQVJFN19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjdfU1BBUkU3X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGN19TUEFSRTdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY3X1NQQVJFN19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDMpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjdfU1BBUkU3X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwMykKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGN19QQURSVkdOVEFCXzRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY3X1BBRFJWR05UQUJfNF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjdfUEFEUlZHTlRBQl80X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGN19QQURSVkdOVEFCXzRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMGZjKSA+PiAyKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY3X1BBRFJWR05UQUJfNF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyKSAmIDB4MDAwMDAwZmMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjdfUEFEUlZHTlRBQl8zX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGN19QQURSVkdOVEFCXzNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY3X1BBRFJWR05UQUJfM19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzZjAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjdfUEFEUlZHTlRBQl8zX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwM2YwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGN19QQURSVkdOVEFCXzNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAzZjAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY3X1BBRFJWR05UQUJfMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjdfUEFEUlZHTlRBQl8yX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGN19QQURSVkdOVEFCXzJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBmYzAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY3X1BBRFJWR05UQUJfMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDBmYzAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjdfUEFEUlZHTlRBQl8yX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwMDBmYzAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGN19QQURSVkdOVEFCXzFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY3X1BBRFJWR05UQUJfMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjdfUEFEUlZHTlRBQl8xX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDNmMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGN19QQURSVkdOVEFCXzFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDNmMDAwMDApID4+IDIwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY3X1BBRFJWR05UQUJfMV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIwKSAmIDB4MDNmMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjdfUEFEUlZHTlRBQl8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGN19QQURSVkdOVEFCXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY3X1BBRFJWR05UQUJfMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZjMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjdfUEFEUlZHTlRBQl8wX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZjMDAwMDAwKSA+PiAyNikKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGN19QQURSVkdOVEFCXzBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNikgJiAweGZjMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIFRYUkY4ICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjhfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNWMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1YwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY4X1NQQVJFOF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjhfU1BBUkU4X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOF9TUEFSRThfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY4X1NQQVJFOF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDMpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjhfU1BBUkU4X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwMykKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOF9QQURSVkdOVEFCXzlfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY4X1BBRFJWR05UQUJfOV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjhfUEFEUlZHTlRBQl85X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOF9QQURSVkdOVEFCXzlfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMGZjKSA+PiAyKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY4X1BBRFJWR05UQUJfOV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyKSAmIDB4MDAwMDAwZmMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjhfUEFEUlZHTlRBQl84X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOF9QQURSVkdOVEFCXzhfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY4X1BBRFJWR05UQUJfOF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzZjAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjhfUEFEUlZHTlRBQl84X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwM2YwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOF9QQURSVkdOVEFCXzhfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAzZjAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY4X1BBRFJWR05UQUJfN19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjhfUEFEUlZHTlRBQl83X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOF9QQURSVkdOVEFCXzdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBmYzAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY4X1BBRFJWR05UQUJfN19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDBmYzAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjhfUEFEUlZHTlRBQl83X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwMDBmYzAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOF9QQURSVkdOVEFCXzZfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY4X1BBRFJWR05UQUJfNl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjhfUEFEUlZHTlRBQl82X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDNmMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOF9QQURSVkdOVEFCXzZfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDNmMDAwMDApID4+IDIwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY4X1BBRFJWR05UQUJfNl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIwKSAmIDB4MDNmMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjhfUEFEUlZHTlRBQl81X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOF9QQURSVkdOVEFCXzVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY4X1BBRFJWR05UQUJfNV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZjMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjhfUEFEUlZHTlRBQl81X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZjMDAwMDAwKSA+PiAyNikKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOF9QQURSVkdOVEFCXzVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNikgJiAweGZjMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIFRYUkY5ICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjlfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2MAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY5X1NQQVJFOV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjlfU1BBUkU5X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOV9TUEFSRTlfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY5X1NQQVJFOV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDMpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjlfU1BBUkU5X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwMykKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOV9QQURSVkdOVEFCXzE0X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY5X1BBRFJWR05UQUJfMTRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjlfUEFEUlZHTlRBQl8xNF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOV9QQURSVkdOVEFCXzE0X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMGZjKSA+PiAyKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY5X1BBRFJWR05UQUJfMTRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyKSAmIDB4MDAwMDAwZmMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjlfUEFEUlZHTlRBQl8xM19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOV9QQURSVkdOVEFCXzEzX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY5X1BBRFJWR05UQUJfMTNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzZjAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjlfUEFEUlZHTlRBQl8xM19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwM2YwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOV9QQURSVkdOVEFCXzEzX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAzZjAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY5X1BBRFJWR05UQUJfMTJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjlfUEFEUlZHTlRBQl8xMl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOV9QQURSVkdOVEFCXzEyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBmYzAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY5X1BBRFJWR05UQUJfMTJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDBmYzAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjlfUEFEUlZHTlRBQl8xMl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwMDBmYzAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOV9QQURSVkdOVEFCXzExX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY5X1BBRFJWR05UQUJfMTFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjlfUEFEUlZHTlRBQl8xMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDNmMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOV9QQURSVkdOVEFCXzExX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDNmMDAwMDApID4+IDIwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY5X1BBRFJWR05UQUJfMTFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIwKSAmIDB4MDNmMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjlfUEFEUlZHTlRBQl8xMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOV9QQURSVkdOVEFCXzEwX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY5X1BBRFJWR05UQUJfMTBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZjMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjlfUEFEUlZHTlRBQl8xMF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZjMDAwMDAwKSA+PiAyNikKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOV9QQURSVkdOVEFCXzEwX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNikgJiAweGZjMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIFRYUkYxMCAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEwX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjQKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTBfU1BBUkUxMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMF9TUEFSRTEwX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEwX1NQQVJFMTBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFmZmYKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTBfU1BBUkUxMF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAxZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMF9TUEFSRTEwX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDFmZmYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEwX1BET1VUNUdfM0NBTFRYX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTBfUERPVVQ1R18zQ0FMVFhfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMF9QRE9VVDVHXzNDQUxUWF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEwX1BET1VUNUdfM0NBTFRYX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAyMDAwKSA+PiAxMykKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTBfUERPVVQ1R18zQ0FMVFhfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMykgJiAweDAwMDAyMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMF9EM0I1R0NBTFRYX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEwX0QzQjVHQ0FMVFhfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTBfRDNCNUdDQUxUWF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxYzAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMF9EM0I1R0NBTFRYX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAxYzAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEwX0QzQjVHQ0FMVFhfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwMDAxYzAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTBfRDRCNUdDQUxUWF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMF9ENEI1R0NBTFRYX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEwX0Q0QjVHQ0FMVFhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwZTAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTBfRDRCNUdDQUxUWF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwZTAwMDApID4+IDE3KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMF9ENEI1R0NBTFRYX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE3KSAmIDB4MDAwZTAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEwX1BBRFJWR04yR0NBTFRYX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTBfUEFEUlZHTjJHQ0FMVFhfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMF9QQURSVkdOMkdDQUxUWF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3ZjAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEwX1BBRFJWR04yR0NBTFRYX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDA3ZjAwMDAwKSA+PiAyMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTBfUEFEUlZHTjJHQ0FMVFhfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMCkgJiAweDA3ZjAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMF9EQjJHQ0FMVFhfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEwX0RCMkdDQUxUWF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTBfREIyR0NBTFRYX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzODAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMF9EQjJHQ0FMVFhfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzODAwMDAwMCkgPj4gMjcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEwX0RCMkdDQUxUWF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjcpICYgMHgzODAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTBfQ0FMVFhTSElGVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMF9DQUxUWFNISUZUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEwX0NBTFRYU0hJRlRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTBfQ0FMVFhTSElGVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NDAwMDAwMDApID4+IDMwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMF9DQUxUWFNISUZUX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMwKSAmIDB4NDAwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEwX0NBTFRYU0hJRlRPVlJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTBfQ0FMVFhTSElGVE9WUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMF9DQUxUWFNISUZUT1ZSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEwX0NBTFRYU0hJRlRPVlJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDgwMDAwMDAwKSA+PiAzMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTBfQ0FMVFhTSElGVE9WUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMSkgJiAweDgwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIFRYUkYxMSAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfU1BBUkUxMV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9TUEFSRTExX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1NQQVJFMTFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfU1BBUkUxMV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAzKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9TUEFSRTExX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JUjI1TUlYQklBUzVHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lSMjVNSVhCSUFTNUdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSVIyNU1JWEJJQVM1R19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFjCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JUjI1TUlYQklBUzVHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAxYykgPj4gMikKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lSMjVNSVhCSUFTNUdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMikgJiAweDAwMDAwMDFjKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSVIyNU1JWERJVjVHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JUjI1TUlYRElWNUdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lSMjVNSVhESVY1R19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBlMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSVIyNU1JWERJVjVHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwZTApID4+IDUpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JUjI1TUlYRElWNUdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDUpICYgMHgwMDAwMDBlMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lSMjVQQTJHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSVIyNVBBMkdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JUjI1UEEyR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3MDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lSMjVQQTJHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwNzAwKSA+PiA4KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSVIyNVBBMkdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDA3MDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JUjI1TUlYQklBUzJHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lSMjVNSVhCSUFTMkdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSVIyNU1JWEJJQVMyR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzODAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JUjI1TUlYQklBUzJHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAzODAwKSA+PiAxMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lSMjVNSVhCSUFTMkdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMSkgJiAweDAwMDAzODAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSVIyNU1JWERJVjJHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JUjI1TUlYRElWMkdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lSMjVNSVhESVYyR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxYzAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSVIyNU1JWERJVjJHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAxYzAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JUjI1TUlYRElWMkdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwMDAxYzAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lDU1BBUkVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSUNTUEFSRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JQ1NQQVJFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwZTAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lDU1BBUkVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwZTAwMDApID4+IDE3KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSUNTUEFSRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE3KSAmIDB4MDAwZTAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JQzI1UEE1RzJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lDMjVQQTVHMl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSUMyNVBBNUcyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNzAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JQzI1UEE1RzJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwNzAwMDAwKSA+PiAyMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lDMjVQQTVHMl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMCkgJiAweDAwNzAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSUMyNVBBNUcxX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JQzI1UEE1RzFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lDMjVQQTVHMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzgwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSUMyNVBBNUcxX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMzgwMDAwMCkgPj4gMjMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JQzI1UEE1RzFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjMpICYgMHgwMzgwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lDMjVNSVhCVUY1R19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSUMyNU1JWEJVRjVHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JQzI1TUlYQlVGNUdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWMwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lDMjVNSVhCVUY1R19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MWMwMDAwMDApID4+IDI2KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSUMyNU1JWEJVRjVHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI2KSAmIDB4MWMwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JQzI1UEEyR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lDMjVQQTJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSUMyNVBBMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGUwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JQzI1UEEyR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGUwMDAwMDAwKSA+PiAyOSkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lDMjVQQTJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyOSkgJiAweGUwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIFRYUkYxMiAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDZjCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEyX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNmMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTJfU1BBUkUxMl8yX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMl9TUEFSRTEyXzJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEyX1NQQVJFMTJfMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTJfU1BBUkUxMl8yX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMGZmKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMl9TUEFSRTEyXzFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEyX1NQQVJFMTJfMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTJfU1BBUkUxMl8xX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMl9TUEFSRTEyXzFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMGZmMDApID4+IDgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEyX1NQQVJFMTJfMV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwZmYwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTJfQVRCU0VMNUdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMl9BVEJTRUw1R19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEyX0FUQlNFTDVHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwZjAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTJfQVRCU0VMNUdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwZjAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMl9BVEJTRUw1R19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDAwZjAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEyX0FUQlNFTDJHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTJfQVRCU0VMMkdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMl9BVEJTRUwyR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNzAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEyX0FUQlNFTDJHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwNzAwMDAwKSA+PiAyMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTJfQVRCU0VMMkdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMCkgJiAweDAwNzAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMl9QV0RfSVJTUEFSRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEyX1BXRF9JUlNQQVJFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTJfUFdEX0lSU1BBUkVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzgwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMl9QV0RfSVJTUEFSRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMzgwMDAwMCkgPj4gMjMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEyX1BXRF9JUlNQQVJFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjMpICYgMHgwMzgwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTJfUFdEX0lSMjVQQTVHMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMl9QV0RfSVIyNVBBNUcyX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEyX1BXRF9JUjI1UEE1RzJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWMwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTJfUFdEX0lSMjVQQTVHMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MWMwMDAwMDApID4+IDI2KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMl9QV0RfSVIyNVBBNUcyX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI2KSAmIDB4MWMwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEyX1BXRF9JUjI1UEE1RzFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTJfUFdEX0lSMjVQQTVHMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMl9QV0RfSVIyNVBBNUcxX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGUwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEyX1BXRF9JUjI1UEE1RzFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGUwMDAwMDAwKSA+PiAyOSkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTJfUFdEX0lSMjVQQTVHMV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyOSkgJiAweGUwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIFNZTlRIMSAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfU0VMX1ZDTU9OQUJVU19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9TRUxfVkNNT05BQlVTX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1NFTF9WQ01PTkFCVVNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfU0VMX1ZDTU9OQUJVU19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDA3KSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9TRUxfVkNNT05BQlVTX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1NFTF9WQ09BQlVTX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfU0VMX1ZDT0FCVVNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9TRUxfVkNPQUJVU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1NFTF9WQ09BQlVTX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAzOCkgPj4gMykKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfU0VMX1ZDT0FCVVNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMykgJiAweDAwMDAwMDM4KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9NT05JVE9SX1NZTlRITE9DS1ZDT0tfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX01PTklUT1JfU1lOVEhMT0NLVkNPS19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfTU9OSVRPUl9TWU5USExPQ0tWQ09LX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9NT05JVE9SX1NZTlRITE9DS1ZDT0tfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwNDApID4+IDYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX01PTklUT1JfU1lOVEhMT0NLVkNPS19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDYpICYgMHgwMDAwMDA0MCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfTU9OSVRPUl9WQzJMT1dfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9NT05JVE9SX1ZDMkxPV19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX01PTklUT1JfVkMyTE9XX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfTU9OSVRPUl9WQzJMT1dfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDgwKSA+PiA3KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9NT05JVE9SX1ZDMkxPV19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA3KSAmIDB4MDAwMDAwODApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX01PTklUT1JfVkMySElHSF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfTU9OSVRPUl9WQzJISUdIX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9NT05JVE9SX1ZDMkhJR0hfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX01PTklUT1JfVkMySElHSF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDEwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfTU9OSVRPUl9WQzJISUdIX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAwMTAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9NT05JVE9SX0ZCX0RJVjJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX01PTklUT1JfRkJfRElWMl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfTU9OSVRPUl9GQl9ESVYyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9NT05JVE9SX0ZCX0RJVjJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAyMDApID4+IDkpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX01PTklUT1JfRkJfRElWMl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDkpICYgMHgwMDAwMDIwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfTU9OSVRPUl9SRUZfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9NT05JVE9SX1JFRl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX01PTklUT1JfUkVGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfTU9OSVRPUl9SRUZfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDA0MDApID4+IDEwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9NT05JVE9SX1JFRl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEwKSAmIDB4MDAwMDA0MDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX01PTklUT1JfRkJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfTU9OSVRPUl9GQl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9NT05JVE9SX0ZCX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX01PTklUT1JfRkJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwODAwKSA+PiAxMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfTU9OSVRPUl9GQl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMSkgJiAweDAwMDAwODAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9TRVZFTkJJVFZDT0NBUF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1NFVkVOQklUVkNPQ0FQX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfU0VWRU5CSVRWQ09DQVBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9TRVZFTkJJVFZDT0NBUF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMTAwMCkgPj4gMTIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1NFVkVOQklUVkNPQ0FQX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTIpICYgMHgwMDAwMTAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdVUF9QRF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV1VQX1BEX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXVVBfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGUwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdVUF9QRF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMGUwMDApID4+IDEzKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV1VQX1BEX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEzKSAmIDB4MDAwMGUwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9WQ09CVUZfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX1ZDT0JVRl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfVkNPQlVGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9WQ09CVUZfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDEwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX1ZDT0JVRl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAwMDEwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9WQ09CVUZHQUlOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1ZDT0JVRkdBSU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfVkNPQlVGR0FJTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA2MDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9WQ09CVUZHQUlOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDA2MDAwMCkgPj4gMTcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1ZDT0JVRkdBSU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTcpICYgMHgwMDA2MDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfVkNPUkVHTEVWRUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9WQ09SRUdMRVZFTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1ZDT1JFR0xFVkVMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxODAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfVkNPUkVHTEVWRUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAxODAwMDApID4+IDE5KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9WQ09SRUdMRVZFTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE5KSAmIDB4MDAxODAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1ZDT1JFR0JZUEFTU19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfVkNPUkVHQllQQVNTX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9WQ09SRUdCWVBBU1NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1ZDT1JFR0JZUEFTU19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMjAwMDAwKSA+PiAyMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfVkNPUkVHQllQQVNTX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMSkgJiAweDAwMjAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV1VQX0xPUkVGX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXVVBfTE9SRUZfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdVUF9MT1JFRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV1VQX0xPUkVGX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDQwMDAwMCkgPj4gMjIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXVVBfTE9SRUZfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjIpICYgMHgwMDQwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX0xPTUlYX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfTE9NSVhfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9MT01JWF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX0xPTUlYX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDA4MDAwMDApID4+IDIzKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfTE9NSVhfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIzKSAmIDB4MDA4MDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9MT0RJVl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX0xPRElWX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfTE9ESVZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9MT0RJVl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAxMDAwMDAwKSA+PiAyNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX0xPRElWX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNCkgJiAweDAxMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfTE9CVUY1R19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9MT0JVRjVHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX0xPQlVGNUdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfTE9CVUY1R19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMjAwMDAwMCkgPj4gMjUpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9MT0JVRjVHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjUpICYgMHgwMjAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX0xPQlVGMkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfTE9CVUYyR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9MT0JVRjJHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX0xPQlVGMkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDQwMDAwMDApID4+IDI2KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfTE9CVUYyR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI2KSAmIDB4MDQwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9QUkVTQ19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX1BSRVNDX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfUFJFU0NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9QUkVTQ19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDA4MDAwMDAwKSA+PiAyNykKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX1BSRVNDX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNykgJiAweDA4MDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfVkNPX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9WQ09fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX1ZDT19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfVkNPX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxMDAwMDAwMCkgPj4gMjgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9WQ09fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjgpICYgMHgxMDAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX1ZDTU9OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfVkNNT05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9WQ01PTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX1ZDTU9OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MjAwMDAwMDApID4+IDI5KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfVkNNT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI5KSAmIDB4MjAwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9DUF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX0NQX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfQ1BfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9DUF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDQwMDAwMDAwKSA+PiAzMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX0NQX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMCkgJiAweDQwMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfQklBU19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9CSUFTX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX0JJQVNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfQklBU19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg4MDAwMDAwMCkgPj4gMzEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9CSUFTX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMzEpICYgMHg4MDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBTWU5USDIgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4NAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDg0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX0NBUFJBTkdFM19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfQ0FQUkFOR0UzX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9DQVBSQU5HRTNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBmCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX0NBUFJBTkdFM19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwZikgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfQ0FQUkFOR0UzX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDBmKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9DQVBSQU5HRTJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX0NBUFJBTkdFMl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfQ0FQUkFOR0UyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9DQVBSQU5HRTJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwZjApID4+IDQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX0NBUFJBTkdFMl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDQpICYgMHgwMDAwMDBmMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfQ0FQUkFOR0UxX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9DQVBSQU5HRTFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX0NBUFJBTkdFMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBmMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfQ0FQUkFOR0UxX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwZjAwKSA+PiA4KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9DQVBSQU5HRTFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDBmMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX0xPT1BMRUFLQ1VSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfTE9PUExFQUtDVVJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9MT09QTEVBS0NVUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBmMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX0xPT1BMRUFLQ1VSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDBmMDAwKSA+PiAxMikKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfTE9PUExFQUtDVVJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMikgJiAweDAwMDBmMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9DUExPV0xLX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX0NQTE9XTEtfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfQ1BMT1dMS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9DUExPV0xLX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAxMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX0NQTE9XTEtfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMDAxMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfQ1BTVEVFUklOR19FTl9JTlROX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9DUFNURUVSSU5HX0VOX0lOVE5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX0NQU1RFRVJJTkdfRU5fSU5UTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfQ1BTVEVFUklOR19FTl9JTlROX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMjAwMDApID4+IDE3KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9DUFNURUVSSU5HX0VOX0lOVE5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE3KSAmIDB4MDAwMjAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX0NQQklBU19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfQ1BCSUFTX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9DUEJJQVNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMGMwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX0NQQklBU19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMGMwMDAwKSA+PiAxOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfQ1BCSUFTX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOCkgJiAweDAwMGMwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9WQ19MT1dfUkVGX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX1ZDX0xPV19SRUZfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfVkNfTE9XX1JFRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDcwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9WQ19MT1dfUkVGX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDcwMDAwMCkgPj4gMjApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX1ZDX0xPV19SRUZfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjApICYgMHgwMDcwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfVkNfTUlEX1JFRl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9WQ19NSURfUkVGX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX1ZDX01JRF9SRUZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDM4MDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfVkNfTUlEX1JFRl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDM4MDAwMDApID4+IDIzKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9WQ19NSURfUkVGX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIzKSAmIDB4MDM4MDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX1ZDX0hJX1JFRl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfVkNfSElfUkVGX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9WQ19ISV9SRUZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFjMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX1ZDX0hJX1JFRl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDFjMDAwMDAwKSA+PiAyNikKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfVkNfSElfUkVGX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNikgJiAweDFjMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9WQ19DQUxfUkVGX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX1ZDX0NBTF9SRUZfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfVkNfQ0FMX1JFRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhlMDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9WQ19DQUxfUkVGX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhlMDAwMDAwMCkgPj4gMjkpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX1ZDX0NBTF9SRUZfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjkpICYgMHhlMDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBTWU5USDMgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDNfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4OAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIM19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDg4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgzX1dBSVRfVkNfQ0hFQ0tfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDNfV0FJVF9WQ19DSEVDS19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIM19XQUlUX1ZDX0NIRUNLX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNmCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgzX1dBSVRfVkNfQ0hFQ0tfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAzZikgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDNfV0FJVF9WQ19DSEVDS19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDNmKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIM19XQUlUX0NBTF9MSU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgzX1dBSVRfQ0FMX0xJTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDNfV0FJVF9DQUxfTElOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGZjMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIM19XQUlUX0NBTF9MSU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDBmYzApID4+IDYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgzX1dBSVRfQ0FMX0xJTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDYpICYgMHgwMDAwMGZjMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDNfV0FJVF9DQUxfQklOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIM19XQUlUX0NBTF9CSU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgzX1dBSVRfQ0FMX0JJTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM2YwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDNfV0FJVF9DQUxfQklOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwM2YwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIM19XQUlUX0NBTF9CSU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEyKSAmIDB4MDAwM2YwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgzX1dBSVRfUFdSVVBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDNfV0FJVF9QV1JVUF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIM19XQUlUX1BXUlVQX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwZmMwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgzX1dBSVRfUFdSVVBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwZmMwMDAwKSA+PiAxOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDNfV0FJVF9QV1JVUF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOCkgJiAweDAwZmMwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIM19XQUlUX1NIT1JUUl9QV1JVUF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgzX1dBSVRfU0hPUlRSX1BXUlVQX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDNfV0FJVF9TSE9SVFJfUFdSVVBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzZjAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIM19XQUlUX1NIT1JUUl9QV1JVUF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzZjAwMDAwMCkgPj4gMjQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgzX1dBSVRfU0hPUlRSX1BXUlVQX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjQpICYgMHgzZjAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDNfU0VMX0NMS19ESVYyX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIM19TRUxfQ0xLX0RJVjJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgzX1NFTF9DTEtfRElWMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDNfU0VMX0NMS19ESVYyX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NDAwMDAwMDApID4+IDMwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIM19TRUxfQ0xLX0RJVjJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMwKSAmIDB4NDAwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgzX0RJU19DTEtfWFRBTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDNfRElTX0NMS19YVEFMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIM19ESVNfQ0xLX1hUQUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgzX0RJU19DTEtfWFRBTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDgwMDAwMDAwKSA+PiAzMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDNfRElTX0NMS19YVEFMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMSkgJiAweDgwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIFNZTlRINCAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDhjCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwOGMKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfUFNfU0lOR0xFX1BVTFNFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9QU19TSU5HTEVfUFVMU0VfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1BTX1NJTkdMRV9QVUxTRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfUFNfU0lOR0xFX1BVTFNFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAxKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9QU19TSU5HTEVfUFVMU0VfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0xPTkdTSElGVFNFTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfTE9OR1NISUZUU0VMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9MT05HU0hJRlRTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0xPTkdTSElGVFNFTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMikgPj4gMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfTE9OR1NISUZUU0VMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMSkgJiAweDAwMDAwMDAyKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9MT0JVRjVHVFVORV9PVlJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0xPQlVGNUdUVU5FX09WUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfTE9CVUY1R1RVTkVfT1ZSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwYwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9MT0JVRjVHVFVORV9PVlJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMGMpID4+IDIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0xPQlVGNUdUVU5FX09WUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIpICYgMHgwMDAwMDAwYykKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfRk9SQ0VfTE9CVUY1R1RVTkVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9GT1JDRV9MT0JVRjVHVFVORV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0ZPUkNFX0xPQlVGNUdUVU5FX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfRk9SQ0VfTE9CVUY1R1RVTkVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDEwKSA+PiA0KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9GT1JDRV9MT0JVRjVHVFVORV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA0KSAmIDB4MDAwMDAwMTApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1BTQ09VTlRfRkJTRUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfUFNDT1VOVF9GQlNFTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9QU0NPVU5UX0ZCU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1BTQ09VTlRfRkJTRUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAyMCkgPj4gNSkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfUFNDT1VOVF9GQlNFTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNSkgJiAweDAwMDAwMDIwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9TRE1fRElUSEVSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1NETV9ESVRIRVJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfU0RNX0RJVEhFUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBjMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9TRE1fRElUSEVSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwYzApID4+IDYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1NETV9ESVRIRVJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDYpICYgMHgwMDAwMDBjMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfU0RNX01PREVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9TRE1fTU9ERV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1NETV9NT0RFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfU0RNX01PREVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMTAwKSA+PiA4KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9TRE1fTU9ERV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDAxMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1NETV9ESVNBQkxFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfU0RNX0RJU0FCTEVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9TRE1fRElTQUJMRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1NETV9ESVNBQkxFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDIwMCkgPj4gOSkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfU0RNX0RJU0FCTEVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOSkgJiAweDAwMDAwMjAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9SRVNFVF9QUkVTQ19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1JFU0VUX1BSRVNDX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfUkVTRVRfUFJFU0NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9SRVNFVF9QUkVTQ19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDQwMCkgPj4gMTApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1JFU0VUX1BSRVNDX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTApICYgMHgwMDAwMDQwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfUFJFU0NTRUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9QUkVTQ1NFTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1BSRVNDU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE4MDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfUFJFU0NTRUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDE4MDApID4+IDExKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9QUkVTQ1NFTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDExKSAmIDB4MDAwMDE4MDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1BGRF9ESVNBQkxFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfUEZEX0RJU0FCTEVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9QRkRfRElTQUJMRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1BGRF9ESVNBQkxFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAyMDAwKSA+PiAxMykKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfUEZEX0RJU0FCTEVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMykgJiAweDAwMDAyMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9QRkRERUxBWV9GUkFDTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1BGRERFTEFZX0ZSQUNOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfUEZEREVMQVlfRlJBQ05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9QRkRERUxBWV9GUkFDTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwNDAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1BGRERFTEFZX0ZSQUNOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwMDAwNDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfRk9SQ0VfTE9fT05fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9GT1JDRV9MT19PTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0ZPUkNFX0xPX09OX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfRk9SQ0VfTE9fT05fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDgwMDApID4+IDE1KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9GT1JDRV9MT19PTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE1KSAmIDB4MDAwMDgwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0NMS1hUQUxfRURHRV9TRUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfQ0xLWFRBTF9FREdFX1NFTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9DTEtYVEFMX0VER0VfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0NMS1hUQUxfRURHRV9TRUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDEwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfQ0xLWFRBTF9FREdFX1NFTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAwMDEwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9WQ09DQVBQVUxMVVBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1ZDT0NBUFBVTExVUF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfVkNPQ0FQUFVMTFVQX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9WQ09DQVBQVUxMVVBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAyMDAwMCkgPj4gMTcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1ZDT0NBUFBVTExVUF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTcpICYgMHgwMDAyMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfVkNPQ0FQX09WUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9WQ09DQVBfT1ZSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1ZDT0NBUF9PVlJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDNmYzAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfVkNPQ0FQX09WUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDNmYzAwMDApID4+IDE4KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9WQ09DQVBfT1ZSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE4KSAmIDB4MDNmYzAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0ZPUkNFX1ZDT0NBUF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfRk9SQ0VfVkNPQ0FQX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9GT1JDRV9WQ09DQVBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0ZPUkNFX1ZDT0NBUF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDA0MDAwMDAwKSA+PiAyNikKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfRk9SQ0VfVkNPQ0FQX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNikgJiAweDA0MDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9GT1JDRV9QSU5WQ19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0ZPUkNFX1BJTlZDX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfRk9SQ0VfUElOVkNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9GT1JDRV9QSU5WQ19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwODAwMDAwMCkgPj4gMjcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0ZPUkNFX1BJTlZDX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjcpICYgMHgwODAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfU0hPUlRSX1VOVElMX0xPQ0tFRF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9TSE9SVFJfVU5USUxfTE9DS0VEX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1NIT1JUUl9VTlRJTF9MT0NLRURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfU0hPUlRSX1VOVElMX0xPQ0tFRF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MTAwMDAwMDApID4+IDI4KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9TSE9SVFJfVU5USUxfTE9DS0VEX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI4KSAmIDB4MTAwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0FMV0FZU19TSE9SVFJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfQUxXQVlTX1NIT1JUUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9BTFdBWVNfU0hPUlRSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0FMV0FZU19TSE9SVFJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDIwMDAwMDAwKSA+PiAyOSkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfQUxXQVlTX1NIT1JUUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyOSkgJiAweDIwMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9ESVNfTE9TVFZDX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0RJU19MT1NUVkNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfRElTX0xPU1RWQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9ESVNfTE9TVFZDX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg0MDAwMDAwMCkgPj4gMzApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0RJU19MT1NUVkNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMzApICYgMHg0MDAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfRElTX0xJTl9DQVBTRUFSQ0hfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9ESVNfTElOX0NBUFNFQVJDSF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0RJU19MSU5fQ0FQU0VBUkNIX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfRElTX0xJTl9DQVBTRUFSQ0hfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ODAwMDAwMDApID4+IDMxKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9ESVNfTElOX0NBUFNFQVJDSF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMxKSAmIDB4ODAwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgU1lOVEg1ICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwOTAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA5MAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9WQ09CSUFTX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1ZDT0JJQVNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfVkNPQklBU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9WQ09CSUFTX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDMpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1ZDT0JJQVNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwMykKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JQ0xPQlVGNUc1MF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lDTE9CVUY1RzUwX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSUNMT0JVRjVHNTBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMWMKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JQ0xPQlVGNUc1MF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDFjKSA+PiAyKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lDTE9CVUY1RzUwX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyKSAmIDB4MDAwMDAwMWMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSUNMT0JVRjJHNTBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JQ0xPQlVGMkc1MF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lDTE9CVUYyRzUwX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGUwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSUNMT0JVRjJHNTBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDBlMCkgPj4gNSkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JQ0xPQlVGMkc1MF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNSkgJiAweDAwMDAwMGUwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lDVkNPMjVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSUNWQ08yNV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JQ1ZDTzI1X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDcwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lDVkNPMjVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDA3MDApID4+IDgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSUNWQ08yNV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwMDcwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JQ1ZDT1JFRzI1X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lDVkNPUkVHMjVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSUNWQ09SRUcyNV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDM4MDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JQ1ZDT1JFRzI1X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDM4MDApID4+IDExKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lDVkNPUkVHMjVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDExKSAmIDB4MDAwMDM4MDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSVJWQ09SRUc1MF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JUlZDT1JFRzUwX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lSVkNPUkVHNTBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSVJWQ09SRUc1MF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDA0MDAwKSA+PiAxNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JUlZDT1JFRzUwX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNCkgJiAweDAwMDA0MDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lDTE9NSVhfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSUNMT01JWF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JQ0xPTUlYX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzODAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lDTE9NSVhfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAzODAwMCkgPj4gMTUpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSUNMT01JWF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTUpICYgMHgwMDAzODAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JQ0xPRElWNTBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lDTE9ESVY1MF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSUNMT0RJVjUwX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxYzAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JQ0xPRElWNTBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAxYzAwMDApID4+IDE4KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lDTE9ESVY1MF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE4KSAmIDB4MDAxYzAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSUNQUkVTQzUwX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JQ1BSRVNDNTBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lDUFJFU0M1MF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwZTAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSUNQUkVTQzUwX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwZTAwMDAwKSA+PiAyMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JQ1BSRVNDNTBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMSkgJiAweDAwZTAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lSVkNNT04yNV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSVJWQ01PTjI1X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JUlZDTU9OMjVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lSVkNNT04yNV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwNzAwMDAwMCkgPj4gMjQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSVJWQ01PTjI1X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjQpICYgMHgwNzAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JUlBGRENQX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lSUEZEQ1BfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSVJQRkRDUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzgwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JUlBGRENQX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MzgwMDAwMDApID4+IDI3KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lSUEZEQ1BfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI3KSAmIDB4MzgwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1NQQVJFNUFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfU1BBUkU1QV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9TUEFSRTVBX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGMwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1NQQVJFNUFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGMwMDAwMDAwKSA+PiAzMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfU1BBUkU1QV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMCkgJiAweGMwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIFNZTlRINiAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDk0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwOTQKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfTE9CVUY1R1RVTkVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9MT0JVRjVHVFVORV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X0xPQlVGNUdUVU5FX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfTE9CVUY1R1RVTkVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAzKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9MT09QX0lQX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X0xPT1BfSVBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfTE9PUF9JUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDFmYwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9MT09QX0lQX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAxZmMpID4+IDIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X1ZDMkxPV19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfVkMyTE9XX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9WQzJMT1dfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X1ZDMkxPV19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDIwMCkgPj4gOSkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfVkMySElHSF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9WQzJISUdIX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X1ZDMkhJR0hfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfVkMySElHSF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDA0MDApID4+IDEwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9SRVNFVF9TRE1fQl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X1JFU0VUX1NETV9CX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfUkVTRVRfU0RNX0JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9SRVNFVF9TRE1fQl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDgwMCkgPj4gMTEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X1JFU0VUX1BTQ09VTlRFUlNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfUkVTRVRfUFNDT1VOVEVSU19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9SRVNFVF9QU0NPVU5URVJTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X1JFU0VUX1BTQ09VTlRFUlNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAxMDAwKSA+PiAxMikKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfUkVTRVRfUEZEX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9SRVNFVF9QRkRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X1JFU0VUX1BGRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfUkVTRVRfUEZEX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDIwMDApID4+IDEzKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9SRVNFVF9SRkRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X1JFU0VUX1JGRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfUkVTRVRfUkZEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9SRVNFVF9SRkRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwNDAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X1NIT1JUX1JfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfU0hPUlRfUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9TSE9SVF9SX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X1NIT1JUX1JfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDA4MDAwKSA+PiAxNSkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfVkNPX0NBUF9TVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9WQ09fQ0FQX1NUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X1ZDT19DQVBfU1RfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBmZjAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfVkNPX0NBUF9TVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDBmZjAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9QSU5fVkNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X1BJTl9WQ19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfUElOX1ZDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9QSU5fVkNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMTAwMDAwMCkgPj4gMjQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X1NZTlRIX0xPQ0tfVkNfT0tfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfU1lOVEhfTE9DS19WQ19PS19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9TWU5USF9MT0NLX1ZDX09LX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X1NZTlRIX0xPQ0tfVkNfT0tfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAyMDAwMDAwKSA+PiAyNSkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfQ0FQX1NFQVJDSF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9DQVBfU0VBUkNIX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X0NBUF9TRUFSQ0hfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfQ0FQX1NFQVJDSF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDQwMDAwMDApID4+IDI2KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9TWU5USF9TTV9TVEFURV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X1NZTlRIX1NNX1NUQVRFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfU1lOVEhfU01fU1RBVEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3ODAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9TWU5USF9TTV9TVEFURV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3ODAwMDAwMCkgPj4gMjcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X1NZTlRIX09OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfU1lOVEhfT05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9TWU5USF9PTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X1NZTlRIX09OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDgwMDAwMDAwKSA+PiAzMSkKLQotLyogbWFjcm9zIGZvciBTWU5USDcgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDdfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA5OAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIN19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDk4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg3X09WUkNIQU5ERUNPREVSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDdfT1ZSQ0hBTkRFQ09ERVJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIN19PVlJDSEFOREVDT0RFUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg3X09WUkNIQU5ERUNPREVSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMSkgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDdfT1ZSQ0hBTkRFQ09ERVJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDAxKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIN19GT1JDRV9GUkFDTFNCX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg3X0ZPUkNFX0ZSQUNMU0JfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDdfRk9SQ0VfRlJBQ0xTQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIN19GT1JDRV9GUkFDTFNCX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDIpID4+IDEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg3X0ZPUkNFX0ZSQUNMU0JfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEpICYgMHgwMDAwMDAwMikKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDdfQ0hBTkZSQUNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIN19DSEFORlJBQ19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg3X0NIQU5GUkFDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwN2ZmZmMKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDdfQ0hBTkZSQUNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDdmZmZjKSA+PiAyKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIN19DSEFORlJBQ19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyKSAmIDB4MDAwN2ZmZmMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg3X0NIQU5TRUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDdfQ0hBTlNFTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIN19DSEFOU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBmZjgwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg3X0NIQU5TRUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDBmZjgwMDAwKSA+PiAxOSkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDdfQ0hBTlNFTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOSkgJiAweDBmZjgwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIN19BTU9ERVJFRlNFTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg3X0FNT0RFUkVGU0VMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDdfQU1PREVSRUZTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzMDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIN19BTU9ERVJFRlNFTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzMDAwMDAwMCkgPj4gMjgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg3X0FNT0RFUkVGU0VMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjgpICYgMHgzMDAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDdfRlJBQ01PREVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIN19GUkFDTU9ERV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg3X0ZSQUNNT0RFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDdfRlJBQ01PREVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NDAwMDAwMDApID4+IDMwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIN19GUkFDTU9ERV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMwKSAmIDB4NDAwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg3X0xPQURTWU5USENIQU5ORUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDdfTE9BRFNZTlRIQ0hBTk5FTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIN19MT0FEU1lOVEhDSEFOTkVMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg3X0xPQURTWU5USENIQU5ORUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDgwMDAwMDAwKSA+PiAzMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDdfTE9BRFNZTlRIQ0hBTk5FTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMSkgJiAweDgwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIFNZTlRIOCAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDljCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg4X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwOWMKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDhfQ1BTVEVFUklOR19FTl9GUkFDTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOF9DUFNURUVSSU5HX0VOX0ZSQUNOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg4X0NQU1RFRVJJTkdfRU5fRlJBQ05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDhfQ1BTVEVFUklOR19FTl9GUkFDTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAxKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOF9DUFNURUVSSU5HX0VOX0ZSQUNOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg4X0xPT1BfSUNQQl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDhfTE9PUF9JQ1BCX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOF9MT09QX0lDUEJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGZlCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg4X0xPT1BfSUNQQl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDBmZSkgPj4gMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDhfTE9PUF9JQ1BCX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMSkgJiAweDAwMDAwMGZlKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOF9MT09QX0NTQl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg4X0xPT1BfQ1NCX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDhfTE9PUF9DU0JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGYwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOF9MT09QX0NTQl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDBmMDApID4+IDgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg4X0xPT1BfQ1NCX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwMGYwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDhfTE9PUF9SU0JfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOF9MT09QX1JTQl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg4X0xPT1BfUlNCX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMWYwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDhfTE9PUF9SU0JfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMWYwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOF9MT09QX1JTQl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEyKSAmIDB4MDAwMWYwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg4X0xPT1BfQ1BCX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDhfTE9PUF9DUEJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOF9MT09QX0NQQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwM2UwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg4X0xPT1BfQ1BCX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwM2UwMDAwKSA+PiAxNykKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDhfTE9PUF9DUEJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNykgJiAweDAwM2UwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOF9MT09QXzNSRF9PUkRFUl9SQl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg4X0xPT1BfM1JEX09SREVSX1JCX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDhfTE9PUF8zUkRfT1JERVJfUkJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwN2MwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOF9MT09QXzNSRF9PUkRFUl9SQl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwN2MwMDAwMCkgPj4gMjIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg4X0xPT1BfM1JEX09SREVSX1JCX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjIpICYgMHgwN2MwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDhfUkVGRElWQl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOF9SRUZESVZCX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg4X1JFRkRJVkJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZjgwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDhfUkVGRElWQl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZjgwMDAwMDApID4+IDI3KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOF9SRUZESVZCX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI3KSAmIDB4ZjgwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgU1lOVEg5ICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg5X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYTAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDlfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBhMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOV9QRkRERUxBWV9JTlROX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg5X1BGRERFTEFZX0lOVE5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDlfUEZEREVMQVlfSU5UTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOV9QRkRERUxBWV9JTlROX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDEpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg5X1BGRERFTEFZX0lOVE5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDlfU0xPUEVfSUNQQTBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOV9TTE9QRV9JQ1BBMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg5X1NMT1BFX0lDUEEwX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGUKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDlfU0xPUEVfSUNQQTBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDBlKSA+PiAxKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOV9TTE9QRV9JQ1BBMF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxKSAmIDB4MDAwMDAwMGUpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg5X0xPT1BfSUNQQTBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDlfTE9PUF9JQ1BBMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOV9MT09QX0lDUEEwX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGYwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg5X0xPT1BfSUNQQTBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDBmMCkgPj4gNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDlfTE9PUF9JQ1BBMF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNCkgJiAweDAwMDAwMGYwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOV9MT09QX0NTQTBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg5X0xPT1BfQ1NBMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDlfTE9PUF9DU0EwX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGYwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOV9MT09QX0NTQTBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDBmMDApID4+IDgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg5X0xPT1BfQ1NBMF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwMGYwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDlfTE9PUF9SU0EwX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOV9MT09QX1JTQTBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg5X0xPT1BfUlNBMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMWYwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDlfTE9PUF9SU0EwX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMWYwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOV9MT09QX1JTQTBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEyKSAmIDB4MDAwMWYwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg5X0xPT1BfQ1BBMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDlfTE9PUF9DUEEwX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOV9MT09QX0NQQTBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwM2UwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg5X0xPT1BfQ1BBMF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwM2UwMDAwKSA+PiAxNykKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDlfTE9PUF9DUEEwX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNykgJiAweDAwM2UwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOV9MT09QXzNSRF9PUkRFUl9SQV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg5X0xPT1BfM1JEX09SREVSX1JBX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDlfTE9PUF8zUkRfT1JERVJfUkFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwN2MwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOV9MT09QXzNSRF9PUkRFUl9SQV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwN2MwMDAwMCkgPj4gMjIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg5X0xPT1BfM1JEX09SREVSX1JBX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjIpICYgMHgwN2MwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDlfUkVGRElWQV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOV9SRUZESVZBX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg5X1JFRkRJVkFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZjgwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDlfUkVGRElWQV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZjgwMDAwMDApID4+IDI3KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOV9SRUZESVZBX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI3KSAmIDB4ZjgwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgU1lOVEgxMCAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYTQKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX1NQQVJFMTBBX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfU1BBUkUxMEFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMF9TUEFSRTEwQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX1NQQVJFMTBBX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAxKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfU1BBUkUxMEFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMF9QV0RCX0lDTE9CSUFTNTBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX1BXREJfSUNMT0JJQVM1MF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfUFdEQl9JQ0xPQklBUzUwX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBlCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMF9QV0RCX0lDTE9CSUFTNTBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwZSkgPj4gMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX1BXREJfSUNMT0JJQVM1MF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMSkgJiAweDAwMDAwMDBlKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfRU5fMlhfTE9PUEZJTFRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMF9FTl8yWF9MT09QRklMVF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX0VOXzJYX0xPT1BGSUxUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfRU5fMlhfTE9PUEZJTFRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMTApID4+IDQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMF9FTl8yWF9MT09QRklMVF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDQpICYgMHgwMDAwMDAxMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX1BXREJfSVJTUEFSRTI1X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfUFdEQl9JUlNQQVJFMjVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMF9QV0RCX0lSU1BBUkUyNV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZTAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX1BXREJfSVJTUEFSRTI1X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMGUwKSA+PiA1KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfUFdEQl9JUlNQQVJFMjVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA1KSAmIDB4MDAwMDAwZTApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMF9QV0RCX0lDU1BBUkUyNV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX1BXREJfSUNTUEFSRTI1X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfUFdEQl9JQ1NQQVJFMjVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNzAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMF9QV0RCX0lDU1BBUkUyNV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDcwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX1BXREJfSUNTUEFSRTI1X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAwNzAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfU0xPUEVfSUNQQTFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMF9TTE9QRV9JQ1BBMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX1NMT1BFX0lDUEExX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMzgwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfU0xPUEVfSUNQQTFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMzgwMCkgPj4gMTEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMF9TTE9QRV9JQ1BBMV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTEpICYgMHgwMDAwMzgwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX0xPT1BfSUNQQTFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfTE9PUF9JQ1BBMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMF9MT09QX0lDUEExX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM2MwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX0xPT1BfSUNQQTFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwM2MwMDApID4+IDE0KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfTE9PUF9JQ1BBMV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE0KSAmIDB4MDAwM2MwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMF9MT09QX0NTQTFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX0xPT1BfQ1NBMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfTE9PUF9DU0ExX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwM2MwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMF9MT09QX0NTQTFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwM2MwMDAwKSA+PiAxOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX0xPT1BfQ1NBMV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOCkgJiAweDAwM2MwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfTE9PUF9SU0ExX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMF9MT09QX1JTQTFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX0xPT1BfUlNBMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwN2MwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfTE9PUF9SU0ExX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwN2MwMDAwMCkgPj4gMjIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMF9MT09QX1JTQTFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjIpICYgMHgwN2MwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX0xPT1BfQ1BBMV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfTE9PUF9DUEExX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMF9MT09QX0NQQTFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZjgwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX0xPT1BfQ1BBMV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZjgwMDAwMDApID4+IDI3KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfTE9PUF9DUEExX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI3KSAmIDB4ZjgwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgU1lOVEgxMSAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGE4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYTgKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX1NQQVJFMTFBX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfU1BBUkUxMUFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9TUEFSRTExQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMWYKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX1NQQVJFMTFBX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDFmKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfU1BBUkUxMUFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMWYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9GT1JDRV9MT0JVRjVHX09OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX0ZPUkNFX0xPQlVGNUdfT05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfRk9SQ0VfTE9CVUY1R19PTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9GT1JDRV9MT0JVRjVHX09OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAyMCkgPj4gNSkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX0ZPUkNFX0xPQlVGNUdfT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNSkgJiAweDAwMDAwMDIwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfTE9SRUZTRUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9MT1JFRlNFTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX0xPUkVGU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBjMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfTE9SRUZTRUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwYzApID4+IDYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9MT1JFRlNFTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDYpICYgMHgwMDAwMDBjMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX0xPQlVGMkdUVU5FX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfTE9CVUYyR1RVTkVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9MT0JVRjJHVFVORV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX0xPQlVGMkdUVU5FX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMzAwKSA+PiA4KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfTE9CVUYyR1RVTkVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDAzMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9DUFNURUVSSU5HX01PREVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX0NQU1RFRVJJTkdfTU9ERV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfQ1BTVEVFUklOR19NT0RFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9DUFNURUVSSU5HX01PREVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwNDAwKSA+PiAxMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX0NQU1RFRVJJTkdfTU9ERV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMCkgJiAweDAwMDAwNDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfU0xPUEVfSUNQQTJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9TTE9QRV9JQ1BBMl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX1NMT1BFX0lDUEEyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMzgwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfU0xPUEVfSUNQQTJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMzgwMCkgPj4gMTEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9TTE9QRV9JQ1BBMl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTEpICYgMHgwMDAwMzgwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX0xPT1BfSUNQQTJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfTE9PUF9JQ1BBMl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9MT09QX0lDUEEyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM2MwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX0xPT1BfSUNQQTJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwM2MwMDApID4+IDE0KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfTE9PUF9JQ1BBMl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE0KSAmIDB4MDAwM2MwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9MT09QX0NTQTJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX0xPT1BfQ1NBMl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfTE9PUF9DU0EyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwM2MwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9MT09QX0NTQTJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwM2MwMDAwKSA+PiAxOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX0xPT1BfQ1NBMl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOCkgJiAweDAwM2MwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfTE9PUF9SU0EyX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9MT09QX1JTQTJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX0xPT1BfUlNBMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwN2MwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfTE9PUF9SU0EyX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwN2MwMDAwMCkgPj4gMjIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9MT09QX1JTQTJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjIpICYgMHgwN2MwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX0xPT1BfQ1BBMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfTE9PUF9DUEEyX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9MT09QX0NQQTJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZjgwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX0xPT1BfQ1BBMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZjgwMDAwMDApID4+IDI3KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfTE9PUF9DUEEyX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI3KSAmIDB4ZjgwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgU1lOVEgxMiAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGFjCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYWMKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEyX1NQQVJFMTJBX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTJfU1BBUkUxMkFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMl9TUEFSRTEyQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM2ZmZmYKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEyX1NQQVJFMTJBX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDNmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTJfU1BBUkUxMkFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwM2ZmZmYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMl9TVFJDT05UX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEyX1NUUkNPTlRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTJfU1RSQ09OVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMl9TVFJDT05UX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDQwMDAwKSA+PiAxOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEyX1NUUkNPTlRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOCkgJiAweDAwMDQwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTJfVlJFRk1VTDNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMl9WUkVGTVVMM19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEyX1ZSRUZNVUwzX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDc4MDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTJfVlJFRk1VTDNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDc4MDAwMCkgPj4gMTkpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMl9WUkVGTVVMM19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTkpICYgMHgwMDc4MDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEyX1ZSRUZNVUwyX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTJfVlJFRk1VTDJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMl9WUkVGTVVMMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDc4MDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEyX1ZSRUZNVUwyX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDc4MDAwMDApID4+IDIzKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTJfVlJFRk1VTDJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIzKSAmIDB4MDc4MDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMl9WUkVGTVVMMV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEyX1ZSRUZNVUwxX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTJfVlJFRk1VTDFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDc4MDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMl9WUkVGTVVMMV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDc4MDAwMDAwKSA+PiAyNykKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEyX1ZSRUZNVUwxX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNykgJiAweDc4MDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTJfQ0xLX0RPVUJMRVJfRU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMl9DTEtfRE9VQkxFUl9FTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEyX0NMS19ET1VCTEVSX0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTJfQ0xLX0RPVUJMRVJfRU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg4MDAwMDAwMCkgPj4gMzEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMl9DTEtfRE9VQkxFUl9FTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMzEpICYgMHg4MDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCSUFTMSAqLwotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMxX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGMwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzFfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYzAKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMV9TUEFSRTFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMxX1NQQVJFMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzFfU1BBUkUxX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN2YKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMV9TUEFSRTFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDdmKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMxX1NQQVJFMV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwN2YpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzFfUFdEX0lDMjVWMklRX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMV9QV0RfSUMyNVYySVFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMxX1BXRF9JQzI1VjJJUV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzgwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzFfUFdEX0lDMjVWMklRX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDM4MCkgPj4gNykKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMV9QV0RfSUMyNVYySVFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNykgJiAweDAwMDAwMzgwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMxX1BXRF9JQzI1VjJJSV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzFfUFdEX0lDMjVWMklJX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMV9QV0RfSUMyNVYySUlfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMWMwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMxX1BXRF9JQzI1VjJJSV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMWMwMCkgPj4gMTApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzFfUFdEX0lDMjVWMklJX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTApICYgMHgwMDAwMWMwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMV9QV0RfSUMyNUJCX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMxX1BXRF9JQzI1QkJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzFfUFdEX0lDMjVCQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGUwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMV9QV0RfSUMyNUJCX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMGUwMDApID4+IDEzKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMxX1BXRF9JQzI1QkJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEzKSAmIDB4MDAwMGUwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzFfUFdEX0lDMjVEQUNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMV9QV0RfSUMyNURBQ19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMxX1BXRF9JQzI1REFDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDcwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzFfUFdEX0lDMjVEQUNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDcwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMV9QV0RfSUMyNURBQ19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAwMDcwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMxX1BXRF9JQzI1RklSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzFfUFdEX0lDMjVGSVJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMV9QV0RfSUMyNUZJUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDM4MDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMxX1BXRF9JQzI1RklSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDM4MDAwMCkgPj4gMTkpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzFfUFdEX0lDMjVGSVJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTkpICYgMHgwMDM4MDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMV9QV0RfSUMyNUFEQ19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMxX1BXRF9JQzI1QURDX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzFfUFdEX0lDMjVBRENfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDFjMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMV9QV0RfSUMyNUFEQ19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDFjMDAwMDApID4+IDIyKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMxX1BXRF9JQzI1QURDX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIyKSAmIDB4MDFjMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzFfQklBU19TRUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMV9CSUFTX1NFTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMxX0JJQVNfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZlMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzFfQklBU19TRUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZlMDAwMDAwKSA+PiAyNSkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMV9CSUFTX1NFTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNSkgJiAweGZlMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJJQVMyICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYzQKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBjNAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1NQQVJFMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfU1BBUkUyX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9TUEFSRTJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxZgotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1NQQVJFMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMWYpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfU1BBUkUyX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAxZikKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9QV0RfSUMyNVhUQUxSRUdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1BXRF9JQzI1WFRBTFJFR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfUFdEX0lDMjVYVEFMUkVHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZTAKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9QV0RfSUMyNVhUQUxSRUdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMGUwKSA+PiA1KQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1BXRF9JQzI1WFRBTFJFR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA1KSAmIDB4MDAwMDAwZTApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfUFdEX0lDMjVYVEFMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9QV0RfSUMyNVhUQUxfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1BXRF9JQzI1WFRBTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNzAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfUFdEX0lDMjVYVEFMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDcwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9QV0RfSUMyNVhUQUxfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAwNzAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1BXRF9JQzI1VFhSRl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfUFdEX0lDMjVUWFJGX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9QV0RfSUMyNVRYUkZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMzgwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1BXRF9JQzI1VFhSRl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMzgwMCkgPj4gMTEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfUFdEX0lDMjVUWFJGX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTEpICYgMHgwMDAwMzgwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9QV0RfSUMyNVJYUkZfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1BXRF9JQzI1UlhSRl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfUFdEX0lDMjVSWFJGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMWMwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9QV0RfSUMyNVJYUkZfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMWMwMDApID4+IDE0KQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1BXRF9JQzI1UlhSRl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE0KSAmIDB4MDAwMWMwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfUFdEX0lDNTBTWU5USF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9QV0RfSUM1MFNZTlRIX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1BXRF9JQzUwU1lOVEhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMGUwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfUFdEX0lDNTBTWU5USF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMGUwMDAwKSA+PiAxNykKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9QV0RfSUM1MFNZTlRIX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNykgJiAweDAwMGUwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1BXRF9JQzI1UExMUkVHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfUFdEX0lDMjVQTExSRUdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9QV0RfSUMyNVBMTFJFR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDcwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1BXRF9JQzI1UExMUkVHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDcwMDAwMCkgPj4gMjApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfUFdEX0lDMjVQTExSRUdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjApICYgMHgwMDcwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9QV0RfSUMyNVBMTENQMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1BXRF9JQzI1UExMQ1AyX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfUFdEX0lDMjVQTExDUDJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDM4MDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9QV0RfSUMyNVBMTENQMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDM4MDAwMDApID4+IDIzKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1BXRF9JQzI1UExMQ1AyX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIzKSAmIDB4MDM4MDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfUFdEX0lDMjVQTExDUF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9QV0RfSUMyNVBMTENQX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1BXRF9JQzI1UExMQ1BfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFjMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfUFdEX0lDMjVQTExDUF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDFjMDAwMDAwKSA+PiAyNikKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9QV0RfSUMyNVBMTENQX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNikgJiAweDFjMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1BXRF9JQzI1UExMR01fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfUFdEX0lDMjVQTExHTV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9QV0RfSUMyNVBMTEdNX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhlMDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1BXRF9JQzI1UExMR01fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhlMDAwMDAwMCkgPj4gMjkpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfUFdEX0lDMjVQTExHTV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjkpICYgMHhlMDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCSUFTMyAqLwotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGM4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYzgKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19TUEFSRTNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1NQQVJFM19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfU1BBUkUzX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19TUEFSRTNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAzKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1NQQVJFM19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSMjVYVEFMUkVHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVIyNVhUQUxSRUdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjI1WFRBTFJFR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFjCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSMjVYVEFMUkVHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAxYykgPj4gMikKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVIyNVhUQUxSRUdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMikgJiAweDAwMDAwMDFjKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjI1VFhSRl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSMjVUWFJGX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVIyNVRYUkZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBlMAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjI1VFhSRl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwZTApID4+IDUpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSMjVUWFJGX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDUpICYgMHgwMDAwMDBlMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVIyNVJYUkZfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjI1UlhSRl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSMjVSWFJGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3MDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVIyNVJYUkZfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwNzAwKSA+PiA4KQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjI1UlhSRl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDA3MDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSNTBTWU5USF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVI1MFNZTlRIX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjUwU1lOVEhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzODAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSNTBTWU5USF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAzODAwKSA+PiAxMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVI1MFNZTlRIX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMSkgJiAweDAwMDAzODAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjI1UExMUkVHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSMjVQTExSRUdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVIyNVBMTFJFR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxYzAwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjI1UExMUkVHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAxYzAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSMjVQTExSRUdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwMDAxYzAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVIyNUJCX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjI1QkJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSMjVCQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwZTAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVIyNUJCX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwZTAwMDApID4+IDE3KQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjI1QkJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE3KSAmIDB4MDAwZTAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSNTBEQUNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVI1MERBQ19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjUwREFDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNzAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSNTBEQUNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwNzAwMDAwKSA+PiAyMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVI1MERBQ19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMCkgJiAweDAwNzAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjI1REFDX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSMjVEQUNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVIyNURBQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzgwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjI1REFDX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMzgwMDAwMCkgPj4gMjMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSMjVEQUNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjMpICYgMHgwMzgwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVIyNUZJUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjI1RklSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSMjVGSVJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWMwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVIyNUZJUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MWMwMDAwMDApID4+IDI2KQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjI1RklSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI2KSAmIDB4MWMwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSNTBBRENfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVI1MEFEQ19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjUwQURDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGUwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSNTBBRENfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGUwMDAwMDAwKSA+PiAyOSkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVI1MEFEQ19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyOSkgJiAweGUwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJJQVM0ICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwY2MKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTNF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBjYwotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVM0X1NQQVJFNF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzRfU1BBUkU0X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTNF9TUEFSRTRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwM2ZmZgotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVM0X1NQQVJFNF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDNmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzRfU1BBUkU0X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwM2ZmZikKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTNF9QV0RfSVIyNVNQQVJFQ19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVM0X1BXRF9JUjI1U1BBUkVDX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzRfUFdEX0lSMjVTUEFSRUNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMWMwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTNF9QV0RfSVIyNVNQQVJFQ19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMWMwMDApID4+IDE0KQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVM0X1BXRF9JUjI1U1BBUkVDX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE0KSAmIDB4MDAwMWMwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzRfUFdEX0lSMjVTUEFSRUJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTNF9QV0RfSVIyNVNQQVJFQl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVM0X1BXRF9JUjI1U1BBUkVCX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMGUwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzRfUFdEX0lSMjVTUEFSRUJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMGUwMDAwKSA+PiAxNykKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTNF9QV0RfSVIyNVNQQVJFQl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNykgJiAweDAwMGUwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVM0X1BXRF9JUjI1U1BBUkVBX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzRfUFdEX0lSMjVTUEFSRUFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTNF9QV0RfSVIyNVNQQVJFQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDcwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVM0X1BXRF9JUjI1U1BBUkVBX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDcwMDAwMCkgPj4gMjApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzRfUFdEX0lSMjVTUEFSRUFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjApICYgMHgwMDcwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTNF9QV0RfSUMyNVNQQVJFQ19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVM0X1BXRF9JQzI1U1BBUkVDX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzRfUFdEX0lDMjVTUEFSRUNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDM4MDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTNF9QV0RfSUMyNVNQQVJFQ19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDM4MDAwMDApID4+IDIzKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVM0X1BXRF9JQzI1U1BBUkVDX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIzKSAmIDB4MDM4MDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzRfUFdEX0lDMjVTUEFSRUJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTNF9QV0RfSUMyNVNQQVJFQl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVM0X1BXRF9JQzI1U1BBUkVCX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFjMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzRfUFdEX0lDMjVTUEFSRUJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDFjMDAwMDAwKSA+PiAyNikKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTNF9QV0RfSUMyNVNQQVJFQl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNikgJiAweDFjMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVM0X1BXRF9JQzI1U1BBUkVBX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzRfUFdEX0lDMjVTUEFSRUFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTNF9QV0RfSUMyNVNQQVJFQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhlMDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVM0X1BXRF9JQzI1U1BBUkVBX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhlMDAwMDAwMCkgPj4gMjkpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzRfUFdEX0lDMjVTUEFSRUFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjkpICYgMHhlMDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBSWFRYMSAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9TQ0ZJUl9HQUlOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX1NDRklSX0dBSU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfU0NGSVJfR0FJTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9TQ0ZJUl9HQUlOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAxKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX1NDRklSX0dBSU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfTUFOUlhHQUlOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9NQU5SWEdBSU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX01BTlJYR0FJTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfTUFOUlhHQUlOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMikgPj4gMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9NQU5SWEdBSU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMSkgJiAweDAwMDAwMDAyKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX0FHQ19EQkRBQ19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfQUdDX0RCREFDX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9BR0NfREJEQUNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzYwotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX0FHQ19EQkRBQ19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwM2MpID4+IDIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfQUdDX0RCREFDX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIpICYgMHgwMDAwMDAzYykKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9PVlJfQUdDX0RCREFDX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX09WUl9BR0NfREJEQUNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfT1ZSX0FHQ19EQkRBQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9PVlJfQUdDX0RCREFDX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDQwKSA+PiA2KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX09WUl9BR0NfREJEQUNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA2KSAmIDB4MDAwMDAwNDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfRU5BQkxFX1BBTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9FTkFCTEVfUEFMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX0VOQUJMRV9QQUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfRU5BQkxFX1BBTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDA4MCkgPj4gNykKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9FTkFCTEVfUEFMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNykgJiAweDAwMDAwMDgwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX0VOQUJMRV9QQUxfT1ZSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfRU5BQkxFX1BBTF9PVlJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9FTkFCTEVfUEFMX09WUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX0VOQUJMRV9QQUxfT1ZSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAxMDApID4+IDgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfRU5BQkxFX1BBTF9PVlJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwMDEwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9UWDFEQl9CSVFVQURfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX1RYMURCX0JJUVVBRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfVFgxREJfQklRVUFEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBlMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9UWDFEQl9CSVFVQURfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwZTAwKSA+PiA5KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX1RYMURCX0JJUVVBRF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA5KSAmIDB4MDAwMDBlMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfVFg2REJfQklRVUFEX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9UWDZEQl9CSVFVQURfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX1RYNkRCX0JJUVVBRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfVFg2REJfQklRVUFEX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAzMDAwKSA+PiAxMikKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9UWDZEQl9CSVFVQURfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMikgJiAweDAwMDAzMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX1BBRFJWSEFMRkdOMkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfUEFEUlZIQUxGR04yR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9QQURSVkhBTEZHTjJHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX1BBRFJWSEFMRkdOMkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwNDAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfUEFEUlZIQUxGR04yR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwMDAwNDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9QQURSVjJHTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX1BBRFJWMkdOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfUEFEUlYyR05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNzgwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9QQURSVjJHTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwNzgwMDApID4+IDE1KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX1BBRFJWMkdOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE1KSAmIDB4MDAwNzgwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfUEFEUlYzR041R19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9QQURSVjNHTjVHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX1BBRFJWM0dONUdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNzgwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfUEFEUlYzR041R19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwNzgwMDAwKSA+PiAxOSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9QQURSVjNHTjVHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOSkgJiAweDAwNzgwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX1BBRFJWNEdONUdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfUEFEUlY0R041R19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9QQURSVjRHTjVHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzgwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX1BBRFJWNEdONUdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwNzgwMDAwMCkgPj4gMjMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfUEFEUlY0R041R19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjMpICYgMHgwNzgwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9UWEJCX0dDX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX1RYQkJfR0NfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfVFhCQl9HQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzgwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9UWEJCX0dDX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NzgwMDAwMDApID4+IDI3KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX1RYQkJfR0NfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI3KSAmIDB4NzgwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfTUFOVFhHQUlOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9NQU5UWEdBSU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX01BTlRYR0FJTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfTUFOVFhHQUlOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDgwMDAwMDAwKSA+PiAzMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9NQU5UWEdBSU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMSkgJiAweDgwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIFJYVFgyICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDQKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwNAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX0JNT0RFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfQk1PREVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9CTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX0JNT0RFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDEpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfQk1PREVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9CTU9ERV9PVlJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX0JNT0RFX09WUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfQk1PREVfT1ZSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9CTU9ERV9PVlJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAyKSA+PiAxKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX0JNT0RFX09WUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxKSAmIDB4MDAwMDAwMDIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfU1lOVEhPTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9TWU5USE9OX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1NZTlRIT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfU1lOVEhPTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwNCkgPj4gMikKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9TWU5USE9OX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMikgJiAweDAwMDAwMDA0KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1NZTlRIT05fT1ZSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfU1lOVEhPTl9PVlJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9TWU5USE9OX09WUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1NZTlRIT05fT1ZSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDgpID4+IDMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfU1lOVEhPTl9PVlJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMpICYgMHgwMDAwMDAwOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9CV19TVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX0JXX1NUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfQldfU1RfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9CV19TVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDMwKSA+PiA0KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX0JXX1NUX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA0KSAmIDB4MDAwMDAwMzApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfQldfU1RfT1ZSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9CV19TVF9PVlJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX0JXX1NUX09WUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfQldfU1RfT1ZSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDA0MCkgPj4gNikKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9CV19TVF9PVlJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNikgJiAweDAwMDAwMDQwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1RYT05fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfVFhPTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9UWE9OX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1RYT05fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwODApID4+IDcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfVFhPTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDcpICYgMHgwMDAwMDA4MCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9UWE9OX09WUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1RYT05fT1ZSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfVFhPTl9PVlJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9UWE9OX09WUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMTAwKSA+PiA4KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1RYT05fT1ZSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDAxMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfUEFPTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9QQU9OX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1BBT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfUEFPTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDIwMCkgPj4gOSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9QQU9OX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOSkgJiAweDAwMDAwMjAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1BBT05fT1ZSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfUEFPTl9PVlJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9QQU9OX09WUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1BBT05fT1ZSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDQwMCkgPj4gMTApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfUEFPTl9PVlJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTApICYgMHgwMDAwMDQwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9SWE9OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1JYT05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfUlhPTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9SWE9OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDA4MDApID4+IDExKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1JYT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDExKSAmIDB4MDAwMDA4MDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfUlhPTl9PVlJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9SWE9OX09WUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1JYT05fT1ZSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfUlhPTl9PVlJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAxMDAwKSA+PiAxMikKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9SWE9OX09WUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMikgJiAweDAwMDAxMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX0FHQ09OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfQUdDT05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9BR0NPTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX0FHQ09OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMjAwMCkgPj4gMTMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfQUdDT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTMpICYgMHgwMDAwMjAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9BR0NPTl9PVlJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX0FHQ09OX09WUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfQUdDT05fT1ZSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9BR0NPTl9PVlJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDQwMDApID4+IDE0KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX0FHQ09OX09WUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE0KSAmIDB4MDAwMDQwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfVFhNT0RfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9UWE1PRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1RYTU9EX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDM4MDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfVFhNT0RfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDM4MDAwKSA+PiAxNSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9UWE1PRF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNSkgJiAweDAwMDM4MDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1RYTU9EX09WUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfVFhNT0RfT1ZSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9UWE1PRF9PVlJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1RYTU9EX09WUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDA0MDAwMCkgPj4gMTgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfVFhNT0RfT1ZSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTgpICYgMHgwMDA0MDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9SWDFEQl9CSVFVQURfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1JYMURCX0JJUVVBRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfUlgxREJfQklRVUFEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzODAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9SWDFEQl9CSVFVQURfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAzODAwMDApID4+IDE5KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1JYMURCX0JJUVVBRF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE5KSAmIDB4MDAzODAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfUlg2REJfQklRVUFEX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9SWDZEQl9CSVFVQURfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1JYNkRCX0JJUVVBRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwYzAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfUlg2REJfQklRVUFEX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwYzAwMDAwKSA+PiAyMikKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9SWDZEQl9CSVFVQURfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMikgJiAweDAwYzAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX01YUkdBSU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfTVhSR0FJTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9NWFJHQUlOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX01YUkdBSU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMzAwMDAwMCkgPj4gMjQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfTVhSR0FJTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjQpICYgMHgwMzAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9WR0FHQUlOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1ZHQUdBSU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfVkdBR0FJTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWMwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9WR0FHQUlOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MWMwMDAwMDApID4+IDI2KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1ZHQUdBSU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI2KSAmIDB4MWMwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfTE5BR0FJTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9MTkFHQUlOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX0xOQUdBSU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGUwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfTE5BR0FJTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGUwMDAwMDAwKSA+PiAyOSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9MTkFHQUlOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyOSkgJiAweGUwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIFJYVFgzICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDgKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwOAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX1NQQVJFM19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfU1BBUkUzX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19TUEFSRTNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNwotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX1NQQVJFM19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDcpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfU1BBUkUzX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwNykKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19EQUNGVUxMU0NBTEVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0RBQ0ZVTExTQ0FMRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfREFDRlVMTFNDQUxFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19EQUNGVUxMU0NBTEVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDA4KSA+PiAzKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0RBQ0ZVTExTQ0FMRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzKSAmIDB4MDAwMDAwMDgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfREFDUlNUQl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19EQUNSU1RCX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0RBQ1JTVEJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfREFDUlNUQl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAxMCkgPj4gNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19EQUNSU1RCX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNCkgJiAweDAwMDAwMDEwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0FEREFDTE9PUEJBQ0tfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQUREQUNMT09QQkFDS19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19BRERBQ0xPT1BCQUNLX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0FEREFDTE9PUEJBQ0tfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMjApID4+IDUpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQUREQUNMT09QQkFDS19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDUpICYgMHgwMDAwMDAyMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19BRENTSE9SVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0FEQ1NIT1JUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQURDU0hPUlRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19BRENTSE9SVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDQwKSA+PiA2KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0FEQ1NIT1JUX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA2KSAmIDB4MDAwMDAwNDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfREFDUFdEX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19EQUNQV0RfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0RBQ1BXRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfREFDUFdEX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDA4MCkgPj4gNykKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19EQUNQV0RfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNykgJiAweDAwMDAwMDgwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0RBQ1BXRF9PVlJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfREFDUFdEX09WUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19EQUNQV0RfT1ZSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0RBQ1BXRF9PVlJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAxMDApID4+IDgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfREFDUFdEX09WUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwMDEwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19BRENQV0RfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0FEQ1BXRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQURDUFdEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19BRENQV0RfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMjAwKSA+PiA5KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0FEQ1BXRF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA5KSAmIDB4MDAwMDAyMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQURDUFdEX09WUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19BRENQV0RfT1ZSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0FEQ1BXRF9PVlJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQURDUFdEX09WUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwNDAwKSA+PiAxMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19BRENQV0RfT1ZSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMCkgJiAweDAwMDAwNDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0FHQ19DQUxEQUNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQUdDX0NBTERBQ19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19BR0NfQ0FMREFDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxZjgwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0FHQ19DQUxEQUNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAxZjgwMCkgPj4gMTEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQUdDX0NBTERBQ19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTEpICYgMHgwMDAxZjgwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19BR0NfQ0FMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0FHQ19DQUxfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQUdDX0NBTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19BR0NfQ0FMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMjAwMDApID4+IDE3KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0FHQ19DQUxfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE3KSAmIDB4MDAwMjAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQUdDX0NBTF9PVlJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19BR0NfQ0FMX09WUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0FHQ19DQUxfT1ZSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQUdDX0NBTF9PVlJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDQwMDAwKSA+PiAxOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19BR0NfQ0FMX09WUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOCkgJiAweDAwMDQwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0xPRk9SQ0VET05fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfTE9GT1JDRURPTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19MT0ZPUkNFRE9OX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0xPRk9SQ0VET05fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDA4MDAwMCkgPj4gMTkpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfTE9GT1JDRURPTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTkpICYgMHgwMDA4MDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxSRVNJRFVFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTFJFU0lEVUVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMUkVTSURVRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxSRVNJRFVFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAxMDAwMDApID4+IDIwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTFJFU0lEVUVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIwKSAmIDB4MDAxMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMUkVTSURVRV9PVlJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxSRVNJRFVFX09WUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTFJFU0lEVUVfT1ZSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMUkVTSURVRV9PVlJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMjAwMDAwKSA+PiAyMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxSRVNJRFVFX09WUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMSkgJiAweDAwMjAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTEZDX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMRkNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxGQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTEZDX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDQwMDAwMCkgPj4gMjIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMRkNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjIpICYgMHgwMDQwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxGQ19PVlJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTEZDX09WUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMRkNfT1ZSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxGQ19PVlJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDA4MDAwMDApID4+IDIzKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTEZDX09WUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIzKSAmIDB4MDA4MDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMVFhfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxUWF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTFRYX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMVFhfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAxMDAwMDAwKSA+PiAyNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxUWF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNCkgJiAweDAxMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTFRYX09WUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMVFhfT1ZSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxUWF9PVlJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTFRYX09WUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMjAwMDAwMCkgPj4gMjUpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMVFhfT1ZSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjUpICYgMHgwMjAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxUWFNISUZUX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTFRYU0hJRlRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMVFhTSElGVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxUWFNISUZUX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDQwMDAwMDApID4+IDI2KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTFRYU0hJRlRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI2KSAmIDB4MDQwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMVFhTSElGVF9PVlJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxUWFNISUZUX09WUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTFRYU0hJRlRfT1ZSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMVFhTSElGVF9PVlJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDA4MDAwMDAwKSA+PiAyNykKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxUWFNISUZUX09WUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNykgJiAweDA4MDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTFBBX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMUEFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxQQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTFBBX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxMDAwMDAwMCkgPj4gMjgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMUEFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjgpICYgMHgxMDAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxQQV9PVlJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTFBBX09WUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMUEFfT1ZSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxQQV9PVlJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MjAwMDAwMDApID4+IDI5KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTFBBX09WUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI5KSAmIDB4MjAwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfU1BVUk9OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19TUFVST05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX1NQVVJPTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfU1BVUk9OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDQwMDAwMDAwKSA+PiAzMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19TUFVST05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMCkgJiAweDQwMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX1NQVVJPTl9PVlJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfU1BVUk9OX09WUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19TUFVST05fT1ZSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX1NQVVJPTl9PVlJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg4MDAwMDAwMCkgPj4gMzEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfU1BVUk9OX09WUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMzEpICYgMHg4MDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQjEgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDE0MAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTQwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0kyVl9DVVJSMlhfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfSTJWX0NVUlIyWF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9JMlZfQ1VSUjJYX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0kyVl9DVVJSMlhfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMSkgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfSTJWX0NVUlIyWF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDAxKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9FTkFCTEVfTE9RX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0VOQUJMRV9MT1FfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRU5BQkxFX0xPUV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9FTkFCTEVfTE9RX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDIpID4+IDEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0VOQUJMRV9MT1FfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEpICYgMHgwMDAwMDAwMikKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRk9SQ0VfTE9RX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9GT1JDRV9MT1FfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0ZPUkNFX0xPUV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRk9SQ0VfTE9RX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDA0KSA+PiAyKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9GT1JDRV9MT1FfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyKSAmIDB4MDAwMDAwMDQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0VOQUJMRV9OT1RDSF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRU5BQkxFX05PVENIX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9FTkFCTEVfTk9UQ0hfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0VOQUJMRV9OT1RDSF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwOCkgPj4gMykKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRU5BQkxFX05PVENIX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMykgJiAweDAwMDAwMDA4KQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9GT1JDRV9OT1RDSF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0ZPUkNFX05PVENIX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRk9SQ0VfTk9UQ0hfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9GT1JDRV9OT1RDSF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMTApID4+IDQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0ZPUkNFX05PVENIX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDQpICYgMHgwMDAwMDAxMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRU5BQkxFX0JJUVVBRF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9FTkFCTEVfQklRVUFEX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0VOQUJMRV9CSVFVQURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRU5BQkxFX0JJUVVBRF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDIwKSA+PiA1KQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9FTkFCTEVfQklRVUFEX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA1KSAmIDB4MDAwMDAwMjApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0ZPUkNFX0JJUVVBRF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRk9SQ0VfQklRVUFEX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9GT1JDRV9CSVFVQURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0ZPUkNFX0JJUVVBRF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDA0MCkgPj4gNikKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRk9SQ0VfQklRVUFEX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNikgJiAweDAwMDAwMDQwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9FTkFCTEVfT1NEQUNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0VOQUJMRV9PU0RBQ19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRU5BQkxFX09TREFDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9FTkFCTEVfT1NEQUNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwODApID4+IDcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0VOQUJMRV9PU0RBQ19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDcpICYgMHgwMDAwMDA4MCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRk9SQ0VfT1NEQUNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9GT1JDRV9PU0RBQ19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0ZPUkNFX09TREFDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRk9SQ0VfT1NEQUNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMTAwKSA+PiA4KQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9GT1JDRV9PU0RBQ19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDAxMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0VOQUJMRV9WMklfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRU5BQkxFX1YySV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9FTkFCTEVfVjJJX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0VOQUJMRV9WMklfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDIwMCkgPj4gOSkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRU5BQkxFX1YySV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOSkgJiAweDAwMDAwMjAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9GT1JDRV9WMklfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0ZPUkNFX1YySV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRk9SQ0VfVjJJX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9GT1JDRV9WMklfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDQwMCkgPj4gMTApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0ZPUkNFX1YySV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTApICYgMHgwMDAwMDQwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRU5BQkxFX0kyVl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9FTkFCTEVfSTJWX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0VOQUJMRV9JMlZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRU5BQkxFX0kyVl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDA4MDApID4+IDExKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9FTkFCTEVfSTJWX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDExKSAmIDB4MDAwMDA4MDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0ZPUkNFX0kyVl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRk9SQ0VfSTJWX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9GT1JDRV9JMlZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0ZPUkNFX0kyVl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAxMDAwKSA+PiAxMikKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRk9SQ0VfSTJWX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMikgJiAweDAwMDAxMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9DTVNFTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0NNU0VMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfQ01TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwZTAwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9DTVNFTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwZTAwMCkgPj4gMTMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0NNU0VMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTMpICYgMHgwMDAwZTAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfQVRCU0VMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9BVEJTRUxfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0FUQlNFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfQVRCU0VMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMzAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9BVEJTRUxfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDAwMzAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX1BEX09TREFDX0NBTFRYX0NBTFBBX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfUERfT1NEQUNfQ0FMVFhfQ0FMUEFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9QRF9PU0RBQ19DQUxUWF9DQUxQQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX1BEX09TREFDX0NBTFRYX0NBTFBBX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDQwMDAwKSA+PiAxOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfUERfT1NEQUNfQ0FMVFhfQ0FMUEFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOCkgJiAweDAwMDQwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9PRlNUQ09SUkkyVlFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX09GU1RDT1JSSTJWUV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfT0ZTVENPUlJJMlZRX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMGY4MDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9PRlNUQ09SUkkyVlFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMGY4MDAwMCkgPj4gMTkpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX09GU1RDT1JSSTJWUV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTkpICYgMHgwMGY4MDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfT0ZTVENPUlJJMlZJX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9PRlNUQ09SUkkyVklfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX09GU1RDT1JSSTJWSV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWYwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfT0ZTVENPUlJJMlZJX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MWYwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9PRlNUQ09SUkkyVklfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI0KSAmIDB4MWYwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0xPQ0FMT0ZGU0VUX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfTE9DQUxPRkZTRVRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9MT0NBTE9GRlNFVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0xPQ0FMT0ZGU0VUX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDIwMDAwMDAwKSA+PiAyOSkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfTE9DQUxPRkZTRVRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyOSkgJiAweDIwMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9SQU5HRV9PU0RBQ19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX1JBTkdFX09TREFDX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfUkFOR0VfT1NEQUNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjMDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9SQU5HRV9PU0RBQ19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhjMDAwMDAwMCkgPj4gMzApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX1JBTkdFX09TREFDX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMzApICYgMHhjMDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQjIgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDE0NAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTQ0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX1NQQVJFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfU1BBUkVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9TUEFSRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdmCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX1NQQVJFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDA3ZikgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfU1BBUkVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDdmKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9TRUxfVEVTVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX1NFTF9URVNUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfU0VMX1RFU1RfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDM4MAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9TRUxfVEVTVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAzODApID4+IDcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX1NFTF9URVNUX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDcpICYgMHgwMDAwMDM4MCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfU0NGSVJfQ0FQX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9TQ0ZJUl9DQVBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX1NDRklSX0NBUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDdjMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfU0NGSVJfQ0FQX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDdjMDApID4+IDEwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9TQ0ZJUl9DQVBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEwKSAmIDB4MDAwMDdjMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX09WRVJSSURFX1NDRklSX0NBUF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfT1ZFUlJJREVfU0NGSVJfQ0FQX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9PVkVSUklERV9TQ0ZJUl9DQVBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX09WRVJSSURFX1NDRklSX0NBUF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDA4MDAwKSA+PiAxNSkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfT1ZFUlJJREVfU0NGSVJfQ0FQX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNSkgJiAweDAwMDA4MDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9GTk9UQ0hfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX0ZOT1RDSF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfRk5PVENIX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBmMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9GTk9UQ0hfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDBmMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX0ZOT1RDSF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMDBmMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfT1ZFUlJJREVfRk5PVENIX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9PVkVSUklERV9GTk9UQ0hfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX09WRVJSSURFX0ZOT1RDSF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfT1ZFUlJJREVfRk5PVENIX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAxMDAwMDApID4+IDIwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9PVkVSUklERV9GTk9UQ0hfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIwKSAmIDB4MDAxMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX0ZJTFRFUkZDX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfRklMVEVSRkNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9GSUxURVJGQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzZTAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX0ZJTFRFUkZDX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAzZTAwMDAwKSA+PiAyMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfRklMVEVSRkNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMSkgJiAweDAzZTAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9PVkVSUklERV9GSUxURVJGQ19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX09WRVJSSURFX0ZJTFRFUkZDX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfT1ZFUlJJREVfRklMVEVSRkNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9PVkVSUklERV9GSUxURVJGQ19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwNDAwMDAwMCkgPj4gMjYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX09WRVJSSURFX0ZJTFRFUkZDX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjYpICYgMHgwNDAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfSTJWMlJYT1VUX0VOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9JMlYyUlhPVVRfRU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX0kyVjJSWE9VVF9FTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfSTJWMlJYT1VUX0VOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDgwMDAwMDApID4+IDI3KQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9JMlYyUlhPVVRfRU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI3KSAmIDB4MDgwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX0JRMlJYT1VUX0VOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfQlEyUlhPVVRfRU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9CUTJSWE9VVF9FTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX0JRMlJYT1VUX0VOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEwMDAwMDAwKSA+PiAyOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfQlEyUlhPVVRfRU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyOCkgJiAweDEwMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9SWElOMkkyVl9FTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX1JYSU4ySTJWX0VOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfUlhJTjJJMlZfRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9SWElOMkkyVl9FTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgyMDAwMDAwMCkgPj4gMjkpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX1JYSU4ySTJWX0VOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjkpICYgMHgyMDAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfUlhJTjJCUV9FTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9SWElOMkJRX0VOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX1JYSU4yQlFfRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfUlhJTjJCUV9FTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NDAwMDAwMDApID4+IDMwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9SWElOMkJRX0VOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMwKSAmIDB4NDAwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX1NXSVRDSF9PVkVSUklERV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfU1dJVENIX09WRVJSSURFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9TV0lUQ0hfT1ZFUlJJREVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX1NXSVRDSF9PVkVSUklERV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDgwMDAwMDAwKSA+PiAzMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfU1dJVENIX09WRVJSSURFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMSkgJiAweDgwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIFRPUDEgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AxX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDI4MAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDFfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjgwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMV9TRUxfS1ZDT19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AxX1NFTF9LVkNPX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDFfU0VMX0tWQ09fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMV9TRUxfS1ZDT19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMykgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AxX1NFTF9LVkNPX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDAzKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDFfUExMQVRCX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMV9QTExBVEJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AxX1BMTEFUQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwYwotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDFfUExMQVRCX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMGMpID4+IDIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMV9QTExBVEJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIpICYgMHgwMDAwMDAwYykKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AxX1BMTF9TVlJFR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDFfUExMX1NWUkVHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMV9QTExfU1ZSRUdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AxX1BMTF9TVlJFR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDEwKSA+PiA0KQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDFfUExMX1NWUkVHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA0KSAmIDB4MDAwMDAwMTApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMV9ISV9GUkVRX0VOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AxX0hJX0ZSRVFfRU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDFfSElfRlJFUV9FTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMV9ISV9GUkVRX0VOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAyMCkgPj4gNSkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AxX0hJX0ZSRVFfRU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNSkgJiAweDAwMDAwMDIwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDFfUFdEUExMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMV9QV0RQTExfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AxX1BXRFBMTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDFfUFdEUExMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwNDApID4+IDYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMV9QV0RQTExfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDYpICYgMHgwMDAwMDA0MCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AxX1BXREVYVENMS0JVRl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDFfUFdERVhUQ0xLQlVGX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMV9QV0RFWFRDTEtCVUZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AxX1BXREVYVENMS0JVRl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDgwKSA+PiA3KQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDFfUFdERVhUQ0xLQlVGX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA3KSAmIDB4MDAwMDAwODApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMV9BRENQV0RfUEhBU0VfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AxX0FEQ1BXRF9QSEFTRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDFfQURDUFdEX1BIQVNFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMV9BRENQV0RfUEhBU0VfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDMwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AxX0FEQ1BXRF9QSEFTRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAwMzAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDFfQURDQ0xLX1BIQVNFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMV9BRENDTEtfUEhBU0VfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AxX0FEQ0NMS19QSEFTRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGMwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDFfQURDQ0xLX1BIQVNFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMGMwMCkgPj4gMTApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMV9BRENDTEtfUEhBU0VfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTApICYgMHgwMDAwMGMwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AxX0RBQ19DTEtfU0VMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDFfREFDX0NMS19TRUxfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMV9EQUNfQ0xLX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDMwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AxX0RBQ19DTEtfU0VMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDMwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDFfREFDX0NMS19TRUxfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEyKSAmIDB4MDAwMDMwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMV9BRENfQ0xLX1NFTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AxX0FEQ19DTEtfU0VMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDFfQURDX0NMS19TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBjMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMV9BRENfQ0xLX1NFTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDBjMDAwKSA+PiAxNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AxX0FEQ19DTEtfU0VMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNCkgJiAweDAwMDBjMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDFfUkVGRElWX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMV9SRUZESVZfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AxX1JFRkRJVl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBmMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDFfUkVGRElWX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDBmMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMV9SRUZESVZfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMDBmMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AxX0RJVl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDFfRElWX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMV9ESVZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M2ZmMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AxX0RJVl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4M2ZmMDAwMDApID4+IDIwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDFfRElWX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIwKSAmIDB4M2ZmMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMV9QTExCWVBBU1NfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AxX1BMTEJZUEFTU19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDFfUExMQllQQVNTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMV9QTExCWVBBU1NfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDQwMDAwMDAwKSA+PiAzMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AxX1BMTEJZUEFTU19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMCkgJiAweDQwMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDFfQ0xLTU9EX1JTVEJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMV9DTEtNT0RfUlNUQl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AxX0NMS01PRF9SU1RCX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDFfQ0xLTU9EX1JTVEJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg4MDAwMDAwMCkgPj4gMzEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMV9DTEtNT0RfUlNUQl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMzEpICYgMHg4MDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBUT1AyICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyODQKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AyX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDI4NAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDJfUExMX0xPV0xFQUtfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMl9QTExfTE9XTEVBS19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AyX1BMTF9MT1dMRUFLX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDJfUExMX0xPV0xFQUtfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDEpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMl9QTExfTE9XTEVBS19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AyX1BMTF9MRUFLX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDJfUExMX0xFQUtfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMl9QTExfTEVBS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMWUKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AyX1BMTF9MRUFLX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDFlKSA+PiAxKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDJfUExMX0xFQUtfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxKSAmIDB4MDAwMDAwMWUpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMl9QTExGUkFDX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AyX1BMTEZSQUNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDJfUExMRlJBQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMGZmZmUwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMl9QTExGUkFDX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDBmZmZlMCkgPj4gNSkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AyX1BMTEZSQUNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNSkgJiAweDAwMGZmZmUwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDJfUFdEX1BMTFNETV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMl9QV0RfUExMU0RNX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AyX1BXRF9QTExTRE1fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDJfUFdEX1BMTFNETV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDEwMDAwMCkgPj4gMjApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMl9QV0RfUExMU0RNX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjApICYgMHgwMDEwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AyX1BMTElDUF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDJfUExMSUNQX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMl9QTExJQ1BfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBlMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AyX1BMTElDUF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDBlMDAwMDApID4+IDIxKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDJfUExMSUNQX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIxKSAmIDB4MDBlMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMl9QTExGSUxURVJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AyX1BMTEZJTFRFUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDJfUExMRklMVEVSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QMl9QTExGSUxURVJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmMDAwMDAwKSA+PiAyNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AyX1BMTEZJTFRFUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNCkgJiAweGZmMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIFRPUDMgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AzX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDI4OAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjg4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QM19JTlQyR05EX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AzX0lOVDJHTkRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDNfSU5UMkdORF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QM19JTlQyR05EX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMSkgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AzX0lOVDJHTkRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDAxKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDNfUFdEUEFMQ0xLX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QM19QV0RQQUxDTEtfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AzX1BXRFBBTENMS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDNfUFdEUEFMQ0xLX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDIpID4+IDEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QM19QV0RQQUxDTEtfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEpICYgMHgwMDAwMDAwMikKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AzX1BXREFHQ0NMS19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDNfUFdEQUdDQ0xLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QM19QV0RBR0NDTEtfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AzX1BXREFHQ0NMS19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDA0KSA+PiAyKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDNfUFdEQUdDQ0xLX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyKSAmIDB4MDAwMDAwMDQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QM19QV0RWMklfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AzX1BXRFYySV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDNfUFdEVjJJX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QM19QV0RWMklfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwOCkgPj4gMykKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AzX1BXRFYySV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMykgJiAweDAwMDAwMDA4KQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDNfUFdEQklBU19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QM19QV0RCSUFTX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AzX1BXREJJQVNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDNfUFdEQklBU19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMTApID4+IDQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QM19QV0RCSUFTX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDQpICYgMHgwMDAwMDAxMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AzX1BXREJHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDNfUFdEQkdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QM19QV0RCR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AzX1BXREJHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDIwKSA+PiA1KQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDNfUFdEQkdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA1KSAmIDB4MDAwMDAwMjApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QM19YVEFMX1NFTFZSRUdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AzX1hUQUxfU0VMVlJFR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDNfWFRBTF9TRUxWUkVHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QM19YVEFMX1NFTFZSRUdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDA0MCkgPj4gNikKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AzX1hUQUxfU0VMVlJFR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNikgJiAweDAwMDAwMDQwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDNfWFRBTF9QV0RSRUdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QM19YVEFMX1BXRFJFR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AzX1hUQUxfUFdEUkVHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDNfWFRBTF9QV0RSRUdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwODApID4+IDcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QM19YVEFMX1BXRFJFR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDcpICYgMHgwMDAwMDA4MCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AzX1hUQUxfUFdEQ0xLSU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDNfWFRBTF9QV0RDTEtJTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QM19YVEFMX1BXRENMS0lOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AzX1hUQUxfUFdEQ0xLSU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMTAwKSA+PiA4KQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDNfWFRBTF9QV0RDTEtJTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDAxMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QM19YVEFMX1BXRENMS0RfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AzX1hUQUxfUFdEQ0xLRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDNfWFRBTF9QV0RDTEtEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QM19YVEFMX1BXRENMS0RfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDIwMCkgPj4gOSkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AzX1hUQUxfUFdEQ0xLRF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOSkgJiAweDAwMDAwMjAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDNfWFRBTF9PU0NPTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QM19YVEFMX09TQ09OX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AzX1hUQUxfT1NDT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDNfWFRBTF9PU0NPTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDQwMCkgPj4gMTApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QM19YVEFMX09TQ09OX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTApICYgMHgwMDAwMDQwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AzX1hUQUxfTk9UQ1hPREVUX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDNfWFRBTF9OT1RDWE9ERVRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QM19YVEFMX05PVENYT0RFVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AzX1hUQUxfTk9UQ1hPREVUX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDA4MDApID4+IDExKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDNfWFRBTF9OT1RDWE9ERVRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDExKSAmIDB4MDAwMDA4MDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QM19YVEFMX0xPQ0FMQklBU19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AzX1hUQUxfTE9DQUxCSUFTX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDNfWFRBTF9MT0NBTEJJQVNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QM19YVEFMX0xPQ0FMQklBU19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAxMDAwKSA+PiAxMikKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AzX1hUQUxfTE9DQUxCSUFTX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMikgJiAweDAwMDAxMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDNfWFRBTF9ISUdIWl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QM19YVEFMX0hJR0haX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AzX1hUQUxfSElHSFpfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDNfWFRBTF9ISUdIWl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMjAwMCkgPj4gMTMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QM19YVEFMX0hJR0haX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTMpICYgMHgwMDAwMjAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AzX1hUQUxfRFJWUE5SX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDNfWFRBTF9EUlZQTlJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QM19YVEFMX0RSVlBOUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGMwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AzX1hUQUxfRFJWUE5SX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMGMwMDApID4+IDE0KQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDNfWFRBTF9EUlZQTlJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE0KSAmIDB4MDAwMGMwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QM19YVEFMQ0FQT1VUREFDX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AzX1hUQUxDQVBPVVREQUNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDNfWFRBTENBUE9VVERBQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwN2YwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QM19YVEFMQ0FQT1VUREFDX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwN2YwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AzX1hUQUxDQVBPVVREQUNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAwN2YwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDNfWFRBTF9DQVBJTkRBQ19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QM19YVEFMX0NBUElOREFDX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AzX1hUQUxfQ0FQSU5EQUNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzZjgwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDNfWFRBTF9DQVBJTkRBQ19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzZjgwMDAwMCkgPj4gMjMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QM19YVEFMX0NBUElOREFDX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjMpICYgMHgzZjgwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AzX1hUQUxfQklBUzJYX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDNfWFRBTF9CSUFTMlhfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QM19YVEFMX0JJQVMyWF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AzX1hUQUxfQklBUzJYX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NDAwMDAwMDApID4+IDMwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDNfWFRBTF9CSUFTMlhfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMwKSAmIDB4NDAwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QM19UQ1hPREVUX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1AzX1RDWE9ERVRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDNfVENYT0RFVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QM19UQ1hPREVUX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDgwMDAwMDAwKSA+PiAzMSkKLQotLyogbWFjcm9zIGZvciBUT1A0ICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QNF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyOGMKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1A0X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDI4YwotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDRfU1BBUkU0X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QNF9TUEFSRTRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1A0X1NQQVJFNF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBmZmZmZgotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDRfU1BBUkU0X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwZmZmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QNF9TUEFSRTRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDBmZmZmZikKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1A0X1NFTF9URU1QU0VOU09SX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDRfU0VMX1RFTVBTRU5TT1JfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QNF9TRUxfVEVNUFNFTlNPUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1A0X1NFTF9URU1QU0VOU09SX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAxMDAwMDApID4+IDIwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDRfU0VMX1RFTVBTRU5TT1JfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIwKSAmIDB4MDAxMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QNF9BRENQV0RfT1ZSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1A0X0FEQ1BXRF9PVlJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDRfQURDUFdEX09WUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QNF9BRENQV0RfT1ZSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMjAwMDAwKSA+PiAyMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1A0X0FEQ1BXRF9PVlJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMSkgJiAweDAwMjAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDRfQURDUFdEX0lOVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QNF9BRENQV0RfSU5UX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1A0X0FEQ1BXRF9JTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDRfQURDUFdEX0lOVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDQwMDAwMCkgPj4gMjIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QNF9BRENQV0RfSU5UX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjIpICYgMHgwMDQwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1A0X1RFU1RJUV9PRkZfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDRfVEVTVElRX09GRl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QNF9URVNUSVFfT0ZGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1A0X1RFU1RJUV9PRkZfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDA4MDAwMDApID4+IDIzKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDRfVEVTVElRX09GRl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIzKSAmIDB4MDA4MDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QNF9URVNUSVFfQlVGRU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1A0X1RFU1RJUV9CVUZFTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDRfVEVTVElRX0JVRkVOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QNF9URVNUSVFfQlVGRU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAxMDAwMDAwKSA+PiAyNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1A0X1RFU1RJUV9CVUZFTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNCkgJiAweDAxMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDRfUEFMX0xPQ0tFREVOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QNF9QQUxfTE9DS0VERU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1A0X1BBTF9MT0NLRURFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDRfUEFMX0xPQ0tFREVOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMjAwMDAwMCkgPj4gMjUpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QNF9QQUxfTE9DS0VERU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjUpICYgMHgwMjAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1A0X1NZTlRIRElHT1VURU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDRfU1lOVEhESUdPVVRFTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QNF9TWU5USERJR09VVEVOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1A0X1NZTlRIRElHT1VURU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDQwMDAwMDApID4+IDI2KQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDRfU1lOVEhESUdPVVRFTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI2KSAmIDB4MDQwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QNF9FTkJUQ0xLX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1A0X0VOQlRDTEtfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDRfRU5CVENMS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QNF9FTkJUQ0xLX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDA4MDAwMDAwKSA+PiAyNykKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1A0X0VOQlRDTEtfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNykgJiAweDA4MDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDRfUEFEMkdORF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QNF9QQUQyR05EX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1A0X1BBRDJHTkRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDRfUEFEMkdORF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxMDAwMDAwMCkgPj4gMjgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QNF9QQUQyR05EX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjgpICYgMHgxMDAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1A0X0lOVEgyUEFEX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDRfSU5USDJQQURfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QNF9JTlRIMlBBRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1A0X0lOVEgyUEFEX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MjAwMDAwMDApID4+IDI5KQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDRfSU5USDJQQURfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI5KSAmIDB4MjAwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QNF9JTlRIMkdORF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1A0X0lOVEgyR05EX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDRfSU5USDJHTkRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QNF9JTlRIMkdORF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDQwMDAwMDAwKSA+PiAzMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1A0X0lOVEgyR05EX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMCkgJiAweDQwMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDRfSU5UMlBBRF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QNF9JTlQyUEFEX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1A0X0lOVDJQQURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUDRfSU5UMlBBRF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg4MDAwMDAwMCkgPj4gMzEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QNF9JTlQyUEFEX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMzEpICYgMHg4MDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciByYmlzdF9jbnRybCAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzgwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzODAKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfVE9ORUdFTl9EQ19FTkFCTEVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9UT05FR0VOX0RDX0VOQUJMRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX1RPTkVHRU5fRENfRU5BQkxFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfVE9ORUdFTl9EQ19FTkFCTEVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAxKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9UT05FR0VOX0RDX0VOQUJMRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX1RPTkVHRU5fVE9ORTBfRU5BQkxFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfVE9ORUdFTl9UT05FMF9FTkFCTEVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9UT05FR0VOX1RPTkUwX0VOQUJMRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX1RPTkVHRU5fVE9ORTBfRU5BQkxFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMikgPj4gMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfVE9ORUdFTl9UT05FMF9FTkFCTEVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMSkgJiAweDAwMDAwMDAyKQotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9UT05FR0VOX1RPTkUxX0VOQUJMRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX1RPTkVHRU5fVE9ORTFfRU5BQkxFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfVE9ORUdFTl9UT05FMV9FTkFCTEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9UT05FR0VOX1RPTkUxX0VOQUJMRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDQpID4+IDIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX1RPTkVHRU5fVE9ORTFfRU5BQkxFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIpICYgMHgwMDAwMDAwNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfVE9ORUdFTl9MRlRPTkUwX0VOQUJMRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9UT05FR0VOX0xGVE9ORTBfRU5BQkxFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX1RPTkVHRU5fTEZUT05FMF9FTkFCTEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfVE9ORUdFTl9MRlRPTkUwX0VOQUJMRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDA4KSA+PiAzKQotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9UT05FR0VOX0xGVE9ORTBfRU5BQkxFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzKSAmIDB4MDAwMDAwMDgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX1RPTkVHRU5fTElOUkFNUF9FTkFCTEVfSV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfVE9ORUdFTl9MSU5SQU1QX0VOQUJMRV9JX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9UT05FR0VOX0xJTlJBTVBfRU5BQkxFX0lfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX1RPTkVHRU5fTElOUkFNUF9FTkFCTEVfSV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAxMCkgPj4gNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfVE9ORUdFTl9MSU5SQU1QX0VOQUJMRV9JX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNCkgJiAweDAwMDAwMDEwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9UT05FR0VOX0xJTlJBTVBfRU5BQkxFX1FfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX1RPTkVHRU5fTElOUkFNUF9FTkFCTEVfUV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfVE9ORUdFTl9MSU5SQU1QX0VOQUJMRV9RX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9UT05FR0VOX0xJTlJBTVBfRU5BQkxFX1FfR0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMjApID4+IDUpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX1RPTkVHRU5fTElOUkFNUF9FTkFCTEVfUV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDUpICYgMHgwMDAwMDAyMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfVE9ORUdFTl9QUkJTX0VOQUJMRV9JX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9UT05FR0VOX1BSQlNfRU5BQkxFX0lfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX1RPTkVHRU5fUFJCU19FTkFCTEVfSV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfVE9ORUdFTl9QUkJTX0VOQUJMRV9JX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDQwKSA+PiA2KQotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9UT05FR0VOX1BSQlNfRU5BQkxFX0lfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA2KSAmIDB4MDAwMDAwNDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX1RPTkVHRU5fUFJCU19FTkFCTEVfUV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfVE9ORUdFTl9QUkJTX0VOQUJMRV9RX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9UT05FR0VOX1BSQlNfRU5BQkxFX1FfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX1RPTkVHRU5fUFJCU19FTkFCTEVfUV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDA4MCkgPj4gNykKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfVE9ORUdFTl9QUkJTX0VOQUJMRV9RX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNykgJiAweDAwMDAwMDgwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9DTUFDX0RDX1dSSVRFX1RPX0NBTkNFTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX0NNQUNfRENfV1JJVEVfVE9fQ0FOQ0VMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfQ01BQ19EQ19XUklURV9UT19DQU5DRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9DTUFDX0RDX1dSSVRFX1RPX0NBTkNFTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAxMDApID4+IDgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX0NNQUNfRENfV1JJVEVfVE9fQ0FOQ0VMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwMDEwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfQ01BQ19EQ19FTkFCTEVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9DTUFDX0RDX0VOQUJMRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX0NNQUNfRENfRU5BQkxFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfQ01BQ19EQ19FTkFCTEVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMjAwKSA+PiA5KQotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9DTUFDX0RDX0VOQUJMRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA5KSAmIDB4MDAwMDAyMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX0NNQUNfQ09SUl9FTkFCTEVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfQ01BQ19DT1JSX0VOQUJMRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9DTUFDX0NPUlJfRU5BQkxFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX0NNQUNfQ09SUl9FTkFCTEVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwNDAwKSA+PiAxMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfQ01BQ19DT1JSX0VOQUJMRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMCkgJiAweDAwMDAwNDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9DTUFDX1BPV0VSX0VOQUJMRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX0NNQUNfUE9XRVJfRU5BQkxFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfQ01BQ19QT1dFUl9FTkFCTEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9DTUFDX1BPV0VSX0VOQUJMRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDgwMCkgPj4gMTEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX0NNQUNfUE9XRVJfRU5BQkxFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTEpICYgMHgwMDAwMDgwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfQ01BQ19JUV9FTkFCTEVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9DTUFDX0lRX0VOQUJMRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX0NNQUNfSVFfRU5BQkxFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfQ01BQ19JUV9FTkFCTEVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDEwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9DTUFDX0lRX0VOQUJMRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEyKSAmIDB4MDAwMDEwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX0NNQUNfSTJRMl9FTkFCTEVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfQ01BQ19JMlEyX0VOQUJMRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9DTUFDX0kyUTJfRU5BQkxFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX0NNQUNfSTJRMl9FTkFCTEVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAyMDAwKSA+PiAxMykKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfQ01BQ19JMlEyX0VOQUJMRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMykgJiAweDAwMDAyMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9DTUFDX1BPV0VSX0hQRl9FTkFCTEVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX0NNQUNfUE9XRVJfSFBGX0VOQUJMRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfQ01BQ19QT1dFUl9IUEZfRU5BQkxFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9DTUFDX1BPV0VSX0hQRl9FTkFCTEVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwNDAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX0NNQUNfUE9XRVJfSFBGX0VOQUJMRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwMDAwNDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfUlhEQUNfQ0FMSUJSQVRFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9SWERBQ19DQUxJQlJBVEVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX1JYREFDX0NBTElCUkFURV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfUlhEQUNfQ0FMSUJSQVRFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDgwMDApID4+IDE1KQotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9SWERBQ19DQUxJQlJBVEVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE1KSAmIDB4MDAwMDgwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX1JCSVNUX0VOQUJMRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfUkJJU1RfRU5BQkxFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9SQklTVF9FTkFCTEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX1JCSVNUX0VOQUJMRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDEwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfUkJJU1RfRU5BQkxFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAwMDEwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9BRENfQ0xLX0lOVkVSVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX0FEQ19DTEtfSU5WRVJUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfQURDX0NMS19JTlZFUlRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9BRENfQ0xLX0lOVkVSVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAyMDAwMCkgPj4gMTcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX0FEQ19DTEtfSU5WRVJUX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTcpICYgMHgwMDAyMDAwMCkKLQotLyogbWFjcm9zIGZvciB0eF9kY19vZmZzZXQgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9EQ19PRkZTRVRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDM4NAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0RDX09GRlNFVF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzg0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfRENfT0ZGU0VUX0FURV9UT05FR0VOX0RDX0lfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9EQ19PRkZTRVRfQVRFX1RPTkVHRU5fRENfSV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0RDX09GRlNFVF9BVEVfVE9ORUdFTl9EQ19JX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwN2ZmCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfRENfT0ZGU0VUX0FURV9UT05FR0VOX0RDX0lfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDdmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9EQ19PRkZTRVRfQVRFX1RPTkVHRU5fRENfSV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwN2ZmKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0RDX09GRlNFVF9BVEVfVE9ORUdFTl9EQ19RX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfRENfT0ZGU0VUX0FURV9UT05FR0VOX0RDX1FfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9EQ19PRkZTRVRfQVRFX1RPTkVHRU5fRENfUV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwN2ZmMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0RDX09GRlNFVF9BVEVfVE9ORUdFTl9EQ19RX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwN2ZmMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfRENfT0ZGU0VUX0FURV9UT05FR0VOX0RDX1FfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwN2ZmMDAwMCkKLQotLyogbWFjcm9zIGZvciB0eF90b25lZ2VuMCAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1RPTkVHRU4wX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzg4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfVE9ORUdFTjBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzODgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9UT05FR0VOMF9BVEVfVE9ORUdFTl9UT05FX0ZSRVFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1RPTkVHRU4wX0FURV9UT05FR0VOX1RPTkVfRlJFUV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfVE9ORUdFTjBfQVRFX1RPTkVHRU5fVE9ORV9GUkVRX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN2YKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9UT05FR0VOMF9BVEVfVE9ORUdFTl9UT05FX0ZSRVFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDdmKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1RPTkVHRU4wX0FURV9UT05FR0VOX1RPTkVfRlJFUV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwN2YpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfVE9ORUdFTjBfQVRFX1RPTkVHRU5fVE9ORV9BX0VYUF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9UT05FR0VOMF9BVEVfVE9ORUdFTl9UT05FX0FfRVhQX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1RPTkVHRU4wX0FURV9UT05FR0VOX1RPTkVfQV9FWFBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwZjAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfVE9ORUdFTjBfQVRFX1RPTkVHRU5fVE9ORV9BX0VYUF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMGYwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9UT05FR0VOMF9BVEVfVE9ORUdFTl9UT05FX0FfRVhQX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAwZjAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1RPTkVHRU4wX0FURV9UT05FR0VOX1RPTkVfQV9NQU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfVE9ORUdFTjBfQVRFX1RPTkVHRU5fVE9ORV9BX01BTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9UT05FR0VOMF9BVEVfVE9ORUdFTl9UT05FX0FfTUFOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMGZmMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1RPTkVHRU4wX0FURV9UT05FR0VOX1RPTkVfQV9NQU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMGZmMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfVE9ORUdFTjBfQVRFX1RPTkVHRU5fVE9ORV9BX01BTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMGZmMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9UT05FR0VOMF9BVEVfVE9ORUdFTl9UT05FX1RBVV9LX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1RPTkVHRU4wX0FURV9UT05FR0VOX1RPTkVfVEFVX0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfVE9ORUdFTjBfQVRFX1RPTkVHRU5fVE9ORV9UQVVfS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N2YwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9UT05FR0VOMF9BVEVfVE9ORUdFTl9UT05FX1RBVV9LX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N2YwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1RPTkVHRU4wX0FURV9UT05FR0VOX1RPTkVfVEFVX0tfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI0KSAmIDB4N2YwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgdHhfdG9uZWdlbjEgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9UT05FR0VOMV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDM4YwotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1RPTkVHRU4xX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzhjCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfVE9ORUdFTjFfQVRFX1RPTkVHRU5fVE9ORV9GUkVRX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9UT05FR0VOMV9BVEVfVE9ORUdFTl9UT05FX0ZSRVFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1RPTkVHRU4xX0FURV9UT05FR0VOX1RPTkVfRlJFUV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdmCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfVE9ORUdFTjFfQVRFX1RPTkVHRU5fVE9ORV9GUkVRX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDA3ZikgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9UT05FR0VOMV9BVEVfVE9ORUdFTl9UT05FX0ZSRVFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDdmKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1RPTkVHRU4xX0FURV9UT05FR0VOX1RPTkVfQV9FWFBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfVE9ORUdFTjFfQVRFX1RPTkVHRU5fVE9ORV9BX0VYUF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9UT05FR0VOMV9BVEVfVE9ORUdFTl9UT05FX0FfRVhQX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGYwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1RPTkVHRU4xX0FURV9UT05FR0VOX1RPTkVfQV9FWFBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDBmMDApID4+IDgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfVE9ORUdFTjFfQVRFX1RPTkVHRU5fVE9ORV9BX0VYUF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwMGYwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9UT05FR0VOMV9BVEVfVE9ORUdFTl9UT05FX0FfTUFOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1RPTkVHRU4xX0FURV9UT05FR0VOX1RPTkVfQV9NQU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfVE9ORUdFTjFfQVRFX1RPTkVHRU5fVE9ORV9BX01BTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBmZjAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9UT05FR0VOMV9BVEVfVE9ORUdFTl9UT05FX0FfTUFOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDBmZjAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1RPTkVHRU4xX0FURV9UT05FR0VOX1RPTkVfQV9NQU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDBmZjAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfVE9ORUdFTjFfQVRFX1RPTkVHRU5fVE9ORV9UQVVfS19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9UT05FR0VOMV9BVEVfVE9ORUdFTl9UT05FX1RBVV9LX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1RPTkVHRU4xX0FURV9UT05FR0VOX1RPTkVfVEFVX0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdmMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfVE9ORUdFTjFfQVRFX1RPTkVHRU5fVE9ORV9UQVVfS19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdmMDAwMDAwKSA+PiAyNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9UT05FR0VOMV9BVEVfVE9ORUdFTl9UT05FX1RBVV9LX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNCkgJiAweDdmMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIHR4X2xmdG9uZWdlbjAgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MRlRPTkVHRU4wX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDM5MAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xGVE9ORUdFTjBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzkwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTEZUT05FR0VOMF9BVEVfVE9ORUdFTl9UT05FX0ZSRVFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MRlRPTkVHRU4wX0FURV9UT05FR0VOX1RPTkVfRlJFUV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xGVE9ORUdFTjBfQVRFX1RPTkVHRU5fVE9ORV9GUkVRX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdmCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTEZUT05FR0VOMF9BVEVfVE9ORUdFTl9UT05FX0ZSRVFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDA3ZikgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MRlRPTkVHRU4wX0FURV9UT05FR0VOX1RPTkVfRlJFUV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDdmKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xGVE9ORUdFTjBfQVRFX1RPTkVHRU5fVE9ORV9BX0VYUF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTEZUT05FR0VOMF9BVEVfVE9ORUdFTl9UT05FX0FfRVhQX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MRlRPTkVHRU4wX0FURV9UT05FR0VOX1RPTkVfQV9FWFBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGYwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xGVE9ORUdFTjBfQVRFX1RPTkVHRU5fVE9ORV9BX0VYUF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDBmMDApID4+IDgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTEZUT05FR0VOMF9BVEVfVE9ORUdFTl9UT05FX0FfRVhQX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwMGYwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MRlRPTkVHRU4wX0FURV9UT05FR0VOX1RPTkVfQV9NQU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xGVE9ORUdFTjBfQVRFX1RPTkVHRU5fVE9ORV9BX01BTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTEZUT05FR0VOMF9BVEVfVE9ORUdFTl9UT05FX0FfTUFOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBmZjAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MRlRPTkVHRU4wX0FURV9UT05FR0VOX1RPTkVfQV9NQU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDBmZjAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xGVE9ORUdFTjBfQVRFX1RPTkVHRU5fVE9ORV9BX01BTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDBmZjAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTEZUT05FR0VOMF9BVEVfVE9ORUdFTl9UT05FX1RBVV9LX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MRlRPTkVHRU4wX0FURV9UT05FR0VOX1RPTkVfVEFVX0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xGVE9ORUdFTjBfQVRFX1RPTkVHRU5fVE9ORV9UQVVfS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdmMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTEZUT05FR0VOMF9BVEVfVE9ORUdFTl9UT05FX1RBVV9LX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdmMDAwMDAwKSA+PiAyNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MRlRPTkVHRU4wX0FURV9UT05FR0VOX1RPTkVfVEFVX0tfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNCkgJiAweDdmMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIHR4X2xpbmVhcl9yYW1wX2kgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MSU5FQVJfUkFNUF9JX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDM5NAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xJTkVBUl9SQU1QX0lfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzk0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTElORUFSX1JBTVBfSV9BVEVfVE9ORUdFTl9MSU5SQU1QX0lOSVRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MSU5FQVJfUkFNUF9JX0FURV9UT05FR0VOX0xJTlJBTVBfSU5JVF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xJTkVBUl9SQU1QX0lfQVRFX1RPTkVHRU5fTElOUkFNUF9JTklUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwN2ZmCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTElORUFSX1JBTVBfSV9BVEVfVE9ORUdFTl9MSU5SQU1QX0lOSVRfR0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDdmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MSU5FQVJfUkFNUF9JX0FURV9UT05FR0VOX0xJTlJBTVBfSU5JVF9TRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwN2ZmKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xJTkVBUl9SQU1QX0lfQVRFX1RPTkVHRU5fTElOUkFNUF9EV0VMTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTElORUFSX1JBTVBfSV9BVEVfVE9ORUdFTl9MSU5SQU1QX0RXRUxMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MSU5FQVJfUkFNUF9JX0FURV9UT05FR0VOX0xJTlJBTVBfRFdFTExfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDNmZjAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xJTkVBUl9SQU1QX0lfQVRFX1RPTkVHRU5fTElOUkFNUF9EV0VMTF9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDNmZjAwMCkgPj4gMTIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTElORUFSX1JBTVBfSV9BVEVfVE9ORUdFTl9MSU5SQU1QX0RXRUxMX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTIpICYgMHgwMDNmZjAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MSU5FQVJfUkFNUF9JX0FURV9UT05FR0VOX0xJTlJBTVBfU1RFUF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xJTkVBUl9SQU1QX0lfQVRFX1RPTkVHRU5fTElOUkFNUF9TVEVQX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTElORUFSX1JBTVBfSV9BVEVfVE9ORUdFTl9MSU5SQU1QX1NURVBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M2YwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MSU5FQVJfUkFNUF9JX0FURV9UT05FR0VOX0xJTlJBTVBfU1RFUF9HRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4M2YwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xJTkVBUl9SQU1QX0lfQVRFX1RPTkVHRU5fTElOUkFNUF9TVEVQX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI0KSAmIDB4M2YwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgdHhfbGluZWFyX3JhbXBfcSAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xJTkVBUl9SQU1QX1FfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzk4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTElORUFSX1JBTVBfUV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzOTgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MSU5FQVJfUkFNUF9RX0FURV9UT05FR0VOX0xJTlJBTVBfSU5JVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xJTkVBUl9SQU1QX1FfQVRFX1RPTkVHRU5fTElOUkFNUF9JTklUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTElORUFSX1JBTVBfUV9BVEVfVE9ORUdFTl9MSU5SQU1QX0lOSVRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3ZmYKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MSU5FQVJfUkFNUF9RX0FURV9UT05FR0VOX0xJTlJBTVBfSU5JVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwN2ZmKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xJTkVBUl9SQU1QX1FfQVRFX1RPTkVHRU5fTElOUkFNUF9JTklUX1NFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDA3ZmYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTElORUFSX1JBTVBfUV9BVEVfVE9ORUdFTl9MSU5SQU1QX0RXRUxMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MSU5FQVJfUkFNUF9RX0FURV9UT05FR0VOX0xJTlJBTVBfRFdFTExfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xJTkVBUl9SQU1QX1FfQVRFX1RPTkVHRU5fTElOUkFNUF9EV0VMTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwM2ZmMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTElORUFSX1JBTVBfUV9BVEVfVE9ORUdFTl9MSU5SQU1QX0RXRUxMX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwM2ZmMDAwKSA+PiAxMikKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MSU5FQVJfUkFNUF9RX0FURV9UT05FR0VOX0xJTlJBTVBfRFdFTExfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMikgJiAweDAwM2ZmMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xJTkVBUl9SQU1QX1FfQVRFX1RPTkVHRU5fTElOUkFNUF9TVEVQX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTElORUFSX1JBTVBfUV9BVEVfVE9ORUdFTl9MSU5SQU1QX1NURVBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MSU5FQVJfUkFNUF9RX0FURV9UT05FR0VOX0xJTlJBTVBfU1RFUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzZjAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xJTkVBUl9SQU1QX1FfQVRFX1RPTkVHRU5fTElOUkFNUF9TVEVQX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzZjAwMDAwMCkgPj4gMjQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTElORUFSX1JBTVBfUV9BVEVfVE9ORUdFTl9MSU5SQU1QX1NURVBfU0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjQpICYgMHgzZjAwMDAwMCkKLQotLyogbWFjcm9zIGZvciB0eF9wcmJzX21hZyAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1BSQlNfTUFHX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzljCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfUFJCU19NQUdfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzOWMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9QUkJTX01BR19BVEVfVE9ORUdFTl9QUkJTX01BR05JVFVERV9JX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1BSQlNfTUFHX0FURV9UT05FR0VOX1BSQlNfTUFHTklUVURFX0lfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfUFJCU19NQUdfQVRFX1RPTkVHRU5fUFJCU19NQUdOSVRVREVfSV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzZmYKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9QUkJTX01BR19BVEVfVE9ORUdFTl9QUkJTX01BR05JVFVERV9JX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwM2ZmKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1BSQlNfTUFHX0FURV9UT05FR0VOX1BSQlNfTUFHTklUVURFX0lfU0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAzZmYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfUFJCU19NQUdfQVRFX1RPTkVHRU5fUFJCU19NQUdOSVRVREVfUV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9QUkJTX01BR19BVEVfVE9ORUdFTl9QUkJTX01BR05JVFVERV9RX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1BSQlNfTUFHX0FURV9UT05FR0VOX1BSQlNfTUFHTklUVURFX1FfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzZmYwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfUFJCU19NQUdfQVRFX1RPTkVHRU5fUFJCU19NQUdOSVRVREVfUV9HRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAzZmYwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9QUkJTX01BR19BVEVfVE9ORUdFTl9QUkJTX01BR05JVFVERV9RX1NFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAzZmYwMDAwKQotCi0vKiBtYWNyb3MgZm9yIHR4X3ByYnNfc2VlZF9pICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfUFJCU19TRUVEX0lfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzYTAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9QUkJTX1NFRURfSV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNhMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1BSQlNfU0VFRF9JX0FURV9UT05FR0VOX1BSQlNfU0VFRF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfUFJCU19TRUVEX0lfQVRFX1RPTkVHRU5fUFJCU19TRUVEX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9QUkJTX1NFRURfSV9BVEVfVE9ORUdFTl9QUkJTX1NFRURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3ZmZmZmZmZgotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1BSQlNfU0VFRF9JX0FURV9UT05FR0VOX1BSQlNfU0VFRF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N2ZmZmZmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfUFJCU19TRUVEX0lfQVRFX1RPTkVHRU5fUFJCU19TRUVEX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHg3ZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciB0eF9wcmJzX3NlZWRfcSAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1BSQlNfU0VFRF9RX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM2E0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfUFJCU19TRUVEX1FfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzYTQKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9QUkJTX1NFRURfUV9BVEVfVE9ORUdFTl9QUkJTX1NFRURfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1BSQlNfU0VFRF9RX0FURV9UT05FR0VOX1BSQlNfU0VFRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfUFJCU19TRUVEX1FfQVRFX1RPTkVHRU5fUFJCU19TRUVEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZmZmZmYKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9QUkJTX1NFRURfUV9BVEVfVE9ORUdFTl9QUkJTX1NFRURfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1BSQlNfU0VFRF9RX0FURV9UT05FR0VOX1BSQlNfU0VFRF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4N2ZmZmZmZmYpCi0KLS8qIG1hY3JvcyBmb3IgY21hY19kY19jYW5jZWwgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX0RDX0NBTkNFTF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNhOAotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfRENfQ0FOQ0VMX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM2E4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19EQ19DQU5DRUxfQVRFX0NNQUNfRENfQ0FOQ0VMX0lfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX0RDX0NBTkNFTF9BVEVfQ01BQ19EQ19DQU5DRUxfSV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfRENfQ0FOQ0VMX0FURV9DTUFDX0RDX0NBTkNFTF9JX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM2ZmCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19EQ19DQU5DRUxfQVRFX0NNQUNfRENfQ0FOQ0VMX0lfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDNmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX0RDX0NBTkNFTF9BVEVfQ01BQ19EQ19DQU5DRUxfSV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwM2ZmKQotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfRENfQ0FOQ0VMX0FURV9DTUFDX0RDX0NBTkNFTF9RX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19EQ19DQU5DRUxfQVRFX0NNQUNfRENfQ0FOQ0VMX1FfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX0RDX0NBTkNFTF9BVEVfQ01BQ19EQ19DQU5DRUxfUV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwM2ZmMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfRENfQ0FOQ0VMX0FURV9DTUFDX0RDX0NBTkNFTF9RX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwM2ZmMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19EQ19DQU5DRUxfQVRFX0NNQUNfRENfQ0FOQ0VMX1FfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwM2ZmMDAwMCkKLQotLyogbWFjcm9zIGZvciBjbWFjX2RjX29mZnNldCAqLwotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfRENfT0ZGU0VUX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM2FjCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19EQ19PRkZTRVRfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzYWMKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX0RDX09GRlNFVF9BVEVfQ01BQ19EQ19DWUNMRVNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfRENfT0ZGU0VUX0FURV9DTUFDX0RDX0NZQ0xFU19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19EQ19PRkZTRVRfQVRFX0NNQUNfRENfQ1lDTEVTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGYKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX0RDX09GRlNFVF9BVEVfQ01BQ19EQ19DWUNMRVNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDBmKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfRENfT0ZGU0VUX0FURV9DTUFDX0RDX0NZQ0xFU19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMGYpCi0KLS8qIG1hY3JvcyBmb3IgY21hY19jb3JyICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19DT1JSX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzYjAKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX0NPUlJfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNiMAotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfQ09SUl9BVEVfQ01BQ19DT1JSX0NZQ0xFU19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19DT1JSX0FURV9DTUFDX0NPUlJfQ1lDTEVTX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX0NPUlJfQVRFX0NNQUNfQ09SUl9DWUNMRVNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxZgotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfQ09SUl9BVEVfQ01BQ19DT1JSX0NZQ0xFU19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMWYpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19DT1JSX0FURV9DTUFDX0NPUlJfQ1lDTEVTX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAxZikKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX0NPUlJfQVRFX0NNQUNfQ09SUl9GUkVRX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfQ09SUl9BVEVfQ01BQ19DT1JSX0ZSRVFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19DT1JSX0FURV9DTUFDX0NPUlJfRlJFUV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDNmMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX0NPUlJfQVRFX0NNQUNfQ09SUl9GUkVRX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAzZjAwKSA+PiA4KQotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfQ09SUl9BVEVfQ01BQ19DT1JSX0ZSRVFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDNmMDApCi0KLS8qIG1hY3JvcyBmb3IgY21hY19wb3dlciAqLwotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfUE9XRVJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM2I0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19QT1dFUl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzYjQKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX1BPV0VSX0FURV9DTUFDX1BPV0VSX0NZQ0xFU19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfUE9XRVJfQVRFX0NNQUNfUE9XRVJfQ1lDTEVTX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19QT1dFUl9BVEVfQ01BQ19QT1dFUl9DWUNMRVNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGYKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX1BPV0VSX0FURV9DTUFDX1BPV0VSX0NZQ0xFU19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDBmKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfUE9XRVJfQVRFX0NNQUNfUE9XRVJfQ1lDTEVTX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMGYpCi0KLS8qIG1hY3JvcyBmb3IgY21hY19jcm9zc19jb3JyICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19DUk9TU19DT1JSX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzYjgKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX0NST1NTX0NPUlJfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNiOAotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfQ1JPU1NfQ09SUl9BVEVfQ01BQ19JUV9DWUNMRVNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19DUk9TU19DT1JSX0FURV9DTUFDX0lRX0NZQ0xFU19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX0NST1NTX0NPUlJfQVRFX0NNQUNfSVFfQ1lDTEVTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwZgotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfQ1JPU1NfQ09SUl9BVEVfQ01BQ19JUV9DWUNMRVNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMGYpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19DUk9TU19DT1JSX0FURV9DTUFDX0lRX0NZQ0xFU19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwZikKLQotLyogbWFjcm9zIGZvciBjbWFjX2kycTIgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX0kyUTJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNiYwotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfSTJRMl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM2JjCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19JMlEyX0FURV9DTUFDX0kyUTJfQ1lDTEVTX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX0kyUTJfQVRFX0NNQUNfSTJRMl9DWUNMRVNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfSTJRMl9BVEVfQ01BQ19JMlEyX0NZQ0xFU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBmCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19JMlEyX0FURV9DTUFDX0kyUTJfQ1lDTEVTX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwZikgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX0kyUTJfQVRFX0NNQUNfSTJRMl9DWUNMRVNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDBmKQotCi0vKiBtYWNyb3MgZm9yIGNtYWNfcG93ZXJfaHBmICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19QT1dFUl9IUEZfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzYzAKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX1BPV0VSX0hQRl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNjMAotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfUE9XRVJfSFBGX0FURV9DTUFDX1BPV0VSX0hQRl9DWUNMRVNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19QT1dFUl9IUEZfQVRFX0NNQUNfUE9XRVJfSFBGX0NZQ0xFU19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX1BPV0VSX0hQRl9BVEVfQ01BQ19QT1dFUl9IUEZfQ1lDTEVTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwZgotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfUE9XRVJfSFBGX0FURV9DTUFDX1BPV0VSX0hQRl9DWUNMRVNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMGYpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19QT1dFUl9IUEZfQVRFX0NNQUNfUE9XRVJfSFBGX0NZQ0xFU19TRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwZikKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX1BPV0VSX0hQRl9BVEVfQ01BQ19QT1dFUl9IUEZfV0FJVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfUE9XRVJfSFBGX0FURV9DTUFDX1BPV0VSX0hQRl9XQUlUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19QT1dFUl9IUEZfQVRFX0NNQUNfUE9XRVJfSFBGX1dBSVRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZjAKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX1BPV0VSX0hQRl9BVEVfQ01BQ19QT1dFUl9IUEZfV0FJVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMGYwKSA+PiA0KQotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfUE9XRVJfSFBGX0FURV9DTUFDX1BPV0VSX0hQRl9XQUlUX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA0KSAmIDB4MDAwMDAwZjApCi0KLS8qIG1hY3JvcyBmb3IgcnhkYWNfc2V0MSAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX1NFVDFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM2M0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfU0VUMV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzYzQKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19TRVQxX0FURV9SWERBQ19NVVhfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX1NFVDFfQVRFX1JYREFDX01VWF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfU0VUMV9BVEVfUlhEQUNfTVVYX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19TRVQxX0FURV9SWERBQ19NVVhfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAzKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX1NFVDFfQVRFX1JYREFDX01VWF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfU0VUMV9BVEVfUlhEQUNfSElfR0FJTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19TRVQxX0FURV9SWERBQ19ISV9HQUlOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX1NFVDFfQVRFX1JYREFDX0hJX0dBSU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfU0VUMV9BVEVfUlhEQUNfSElfR0FJTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAxMCkgPj4gNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19TRVQxX0FURV9SWERBQ19ISV9HQUlOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNCkgJiAweDAwMDAwMDEwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX1NFVDFfQVRFX1JYREFDX0NBTF9XQUlUX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfU0VUMV9BVEVfUlhEQUNfQ0FMX1dBSVRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19TRVQxX0FURV9SWERBQ19DQUxfV0FJVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwM2YwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX1NFVDFfQVRFX1JYREFDX0NBTF9XQUlUX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDNmMDApID4+IDgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfU0VUMV9BVEVfUlhEQUNfQ0FMX1dBSVRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwM2YwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19TRVQxX0FURV9SWERBQ19DQUxfTUVBU1VSRV9USU1FX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX1NFVDFfQVRFX1JYREFDX0NBTF9NRUFTVVJFX1RJTUVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfU0VUMV9BVEVfUlhEQUNfQ0FMX01FQVNVUkVfVElNRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwZjAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19TRVQxX0FURV9SWERBQ19DQUxfTUVBU1VSRV9USU1FX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwZjAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX1NFVDFfQVRFX1JYREFDX0NBTF9NRUFTVVJFX1RJTUVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDAwZjAwMDApCi0KLS8qIG1hY3JvcyBmb3IgcnhkYWNfc2V0MiAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX1NFVDJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM2M4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfU0VUMl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzYzgKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19TRVQyX0FURV9SWERBQ19JX0hJX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX1NFVDJfQVRFX1JYREFDX0lfSElfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfU0VUMl9BVEVfUlhEQUNfSV9ISV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMWYKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19TRVQyX0FURV9SWERBQ19JX0hJX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDFmKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX1NFVDJfQVRFX1JYREFDX0lfSElfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMWYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfU0VUMl9BVEVfUlhEQUNfUV9ISV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19TRVQyX0FURV9SWERBQ19RX0hJX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX1NFVDJfQVRFX1JYREFDX1FfSElfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxZjAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfU0VUMl9BVEVfUlhEQUNfUV9ISV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMWYwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19TRVQyX0FURV9SWERBQ19RX0hJX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAxZjAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX1NFVDJfQVRFX1JYREFDX0lfTE9XX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfU0VUMl9BVEVfUlhEQUNfSV9MT1dfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19TRVQyX0FURV9SWERBQ19JX0xPV19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDFmMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX1NFVDJfQVRFX1JYREFDX0lfTE9XX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDFmMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfU0VUMl9BVEVfUlhEQUNfSV9MT1dfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMDFmMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19TRVQyX0FURV9SWERBQ19RX0xPV19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX1NFVDJfQVRFX1JYREFDX1FfTE9XX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfU0VUMl9BVEVfUlhEQUNfUV9MT1dfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWYwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19TRVQyX0FURV9SWERBQ19RX0xPV19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MWYwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX1NFVDJfQVRFX1JYREFDX1FfTE9XX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI0KSAmIDB4MWYwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgcnhkYWNfbG9uZ19zaGlmdCAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX0xPTkdfU0hJRlRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM2NjCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfTE9OR19TSElGVF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzY2MKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19MT05HX1NISUZUX0FURV9SWERBQ19JX1NUQVRJQ19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX0xPTkdfU0hJRlRfQVRFX1JYREFDX0lfU1RBVElDX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfTE9OR19TSElGVF9BVEVfUlhEQUNfSV9TVEFUSUNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMWYKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19MT05HX1NISUZUX0FURV9SWERBQ19JX1NUQVRJQ19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDFmKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX0xPTkdfU0hJRlRfQVRFX1JYREFDX0lfU1RBVElDX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMWYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfTE9OR19TSElGVF9BVEVfUlhEQUNfUV9TVEFUSUNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19MT05HX1NISUZUX0FURV9SWERBQ19RX1NUQVRJQ19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX0xPTkdfU0hJRlRfQVRFX1JYREFDX1FfU1RBVElDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxZjAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfTE9OR19TSElGVF9BVEVfUlhEQUNfUV9TVEFUSUNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMWYwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19MT05HX1NISUZUX0FURV9SWERBQ19RX1NUQVRJQ19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAxZjAwKQotCi0vKiBtYWNyb3MgZm9yIGNtYWNfcmVzdWx0c19pICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19SRVNVTFRTX0lfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzZDAKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX1JFU1VMVFNfSV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNkMAotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfUkVTVUxUU19JX0FURV9DTUFDX1JFU1VMVFNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19SRVNVTFRTX0lfQVRFX0NNQUNfUkVTVUxUU19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX1JFU1VMVFNfSV9BVEVfQ01BQ19SRVNVTFRTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfUkVTVUxUU19JX0FURV9DTUFDX1JFU1VMVFNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZmZmZmZmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19SRVNVTFRTX0lfQVRFX0NNQUNfUkVTVUxUU19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBjbWFjX3Jlc3VsdHNfcSAqLwotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfUkVTVUxUU19RX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM2Q0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19SRVNVTFRTX1FfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzZDQKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX1JFU1VMVFNfUV9BVEVfQ01BQ19SRVNVTFRTX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfUkVTVUxUU19RX0FURV9DTUFDX1JFU1VMVFNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19SRVNVTFRTX1FfQVRFX0NNQUNfUkVTVUxUU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX1JFU1VMVFNfUV9BVEVfQ01BQ19SRVNVTFRTX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfUkVTVUxUU19RX0FURV9DTUFDX1JFU1VMVFNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4ZmZmZmZmZmYpCi0KLS8qIG1hY3JvcyBmb3IgUE1VMSAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNzQwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3NDAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX1NQQVJFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfU1BBUkVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9TUEFSRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3ZmYKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX1NQQVJFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwN2ZmKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfU1BBUkVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDA3ZmYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9PVFBfVjI1X1BXRF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX09UUF9WMjVfUFdEX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfT1RQX1YyNV9QV0RfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9PVFBfVjI1X1BXRF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwODAwKSA+PiAxMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX09UUF9WMjVfUFdEX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMSkgJiAweDAwMDAwODAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfUEFSRUdPTl9NQU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9QQVJFR09OX01BTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX1BBUkVHT05fTUFOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfUEFSRUdPTl9NQU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMTAwMCkgPj4gMTIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9QQVJFR09OX01BTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTIpICYgMHgwMDAwMTAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX09UUFJFR09OX01BTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfT1RQUkVHT05fTUFOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9PVFBSRUdPTl9NQU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX09UUFJFR09OX01BTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDIwMDApID4+IDEzKQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfT1RQUkVHT05fTUFOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEzKSAmIDB4MDAwMDIwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9EUkVHT05fTUFOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX0RSRUdPTl9NQU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfRFJFR09OX01BTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9EUkVHT05fTUFOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDA0MDAwKSA+PiAxNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX0RSRUdPTl9NQU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNCkgJiAweDAwMDA0MDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfRElTQ09OVE1PREVFTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9ESVNDT05UTU9ERUVOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX0RJU0NPTlRNT0RFRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfRElTQ09OVE1PREVFTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwODAwMCkgPj4gMTUpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9ESVNDT05UTU9ERUVOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTUpICYgMHgwMDAwODAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX1NXUkVHT05fTUFOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfU1dSRUdPTl9NQU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9TV1JFR09OX01BTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX1NXUkVHT05fTUFOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMTAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfU1dSRUdPTl9NQU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDAwMTAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9TV1JFR19GUkVRQ1VSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX1NXUkVHX0ZSRVFDVVJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfU1dSRUdfRlJFUUNVUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDYwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9TV1JFR19GUkVRQ1VSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDYwMDAwKSA+PiAxNykKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX1NXUkVHX0ZSRVFDVVJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNykgJiAweDAwMDYwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfU1dSRUdfRlJFUUNBUF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9TV1JFR19GUkVRQ0FQX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX1NXUkVHX0ZSRVFDQVBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDM4MDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfU1dSRUdfRlJFUUNBUF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDM4MDAwMCkgPj4gMTkpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9TV1JFR19GUkVRQ0FQX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTkpICYgMHgwMDM4MDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX1NXUkVHX0xWTENUUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfU1dSRUdfTFZMQ1RSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9TV1JFR19MVkxDVFJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBjMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX1NXUkVHX0xWTENUUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDBjMDAwMDApID4+IDIyKQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfU1dSRUdfTFZMQ1RSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIyKSAmIDB4MDBjMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9TUkVHX0xWTENUUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX1NSRUdfTFZMQ1RSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfU1JFR19MVkxDVFJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9TUkVHX0xWTENUUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAzMDAwMDAwKSA+PiAyNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX1NSRUdfTFZMQ1RSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNCkgJiAweDAzMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfRFJFR19MVkxDVFJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9EUkVHX0xWTENUUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX0RSRUdfTFZMQ1RSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwYzAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfRFJFR19MVkxDVFJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwYzAwMDAwMCkgPj4gMjYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9EUkVHX0xWTENUUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjYpICYgMHgwYzAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX1BBUkVHX1hQTlBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfUEFSRUdfWFBOUF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9QQVJFR19YUE5QX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX1BBUkVHX1hQTlBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MTAwMDAwMDApID4+IDI4KQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfUEFSRUdfWFBOUF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI4KSAmIDB4MTAwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9QQVJFR19MVkxDVFJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX1BBUkVHX0xWTENUUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfUEFSRUdfTFZMQ1RSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGUwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9QQVJFR19MVkxDVFJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGUwMDAwMDAwKSA+PiAyOSkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX1BBUkVHX0xWTENUUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyOSkgJiAweGUwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIFBNVTIgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDc0NAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNzQ0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9TUEFSRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1NQQVJFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfU1BBUkVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9TUEFSRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDBmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1NQQVJFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMGZmKQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfVkJBVFRfMV8zVE9BVEJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9WQkFUVF8xXzNUT0FUQl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1ZCQVRUXzFfM1RPQVRCX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfVkJBVFRfMV8zVE9BVEJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAxMDApID4+IDgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9WQkFUVF8xXzNUT0FUQl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwMDEwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1ZCQVRUXzFfMlRPQVRCX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfVkJBVFRfMV8yVE9BVEJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9WQkFUVF8xXzJUT0FUQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1ZCQVRUXzFfMlRPQVRCX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMjAwKSA+PiA5KQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfVkJBVFRfMV8yVE9BVEJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA5KSAmIDB4MDAwMDAyMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9WQkFUVF8yXzNUT0FUQl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1ZCQVRUXzJfM1RPQVRCX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfVkJBVFRfMl8zVE9BVEJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9WQkFUVF8yXzNUT0FUQl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwNDAwKSA+PiAxMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1ZCQVRUXzJfM1RPQVRCX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMCkgJiAweDAwMDAwNDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfUFdEX0JBTkRHQVBfTUFOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9QV0RfQkFOREdBUF9NQU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1BXRF9CQU5ER0FQX01BTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfUFdEX0JBTkRHQVBfTUFOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDgwMCkgPj4gMTEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9QV0RfQkFOREdBUF9NQU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTEpICYgMHgwMDAwMDgwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1BXRF9MRk9fTUFOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfUFdEX0xGT19NQU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9QV0RfTEZPX01BTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1BXRF9MRk9fTUFOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDEwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfUFdEX0xGT19NQU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEyKSAmIDB4MDAwMDEwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9WQkFUVF9MVF8zUDJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1ZCQVRUX0xUXzNQMl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfVkJBVFRfTFRfM1AyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9WQkFUVF9MVF8zUDJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAyMDAwKSA+PiAxMykKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1ZCQVRUX0xUXzNQMl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMykgJiAweDAwMDAyMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfVkJBVFRfTFRfMlA4X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9WQkFUVF9MVF8yUDhfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1ZCQVRUX0xUXzJQOF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfVkJBVFRfTFRfMlA4X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwNDAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9WQkFUVF9MVF8yUDhfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwMDAwNDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1ZCQVRUX0dUXzRQMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfVkJBVFRfR1RfNFAyX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9WQkFUVF9HVF80UDJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1ZCQVRUX0dUXzRQMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDgwMDApID4+IDE1KQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfVkJBVFRfR1RfNFAyX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE1KSAmIDB4MDAwMDgwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9QTVVfTUFOX09WRVJSSURFX0VOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1BNVV9NQU5fT1ZFUlJJREVfRU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfUE1VX01BTl9PVkVSUklERV9FTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9QTVVfTUFOX09WRVJSSURFX0VOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDEwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1BNVV9NQU5fT1ZFUlJJREVfRU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAwMDEwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfVkJBVFRfR1RfTFZMQ1RSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9WQkFUVF9HVF9MVkxDVFJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1ZCQVRUX0dUX0xWTENUUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA2MDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfVkJBVFRfR1RfTFZMQ1RSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDA2MDAwMCkgPj4gMTcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9WQkFUVF9HVF9MVkxDVFJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTcpICYgMHgwMDA2MDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1NXUkVHVlNTTDJBVEJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfU1dSRUdWU1NMMkFUQl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9TV1JFR1ZTU0wyQVRCX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1NXUkVHVlNTTDJBVEJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwODAwMDApID4+IDE5KQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfU1dSRUdWU1NMMkFUQl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE5KSAmIDB4MDAwODAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9TV1JFR1ZTU0xfTFZMQ1RSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1NXUkVHVlNTTF9MVkxDVFJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfU1dSRUdWU1NMX0xWTENUUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMzAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9TV1JFR1ZTU0xfTFZMQ1RSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMzAwMDAwKSA+PiAyMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1NXUkVHVlNTTF9MVkxDVFJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMCkgJiAweDAwMzAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfU1dSRUdWRERIMkFUQl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9TV1JFR1ZEREgyQVRCX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1NXUkVHVkRESDJBVEJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfU1dSRUdWRERIMkFUQl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDQwMDAwMCkgPj4gMjIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9TV1JFR1ZEREgyQVRCX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjIpICYgMHgwMDQwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1NXUkVHVkRESF9MVkxDVFJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfU1dSRUdWRERIX0xWTENUUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9TV1JFR1ZEREhfTFZMQ1RSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDE4MDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1NXUkVHVkRESF9MVkxDVFJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDE4MDAwMDApID4+IDIzKQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfU1dSRUdWRERIX0xWTENUUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIzKSAmIDB4MDE4MDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9TV1JFRzJBVEJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1NXUkVHMkFUQl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfU1dSRUcyQVRCX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBlMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9TV1JFRzJBVEJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDBlMDAwMDAwKSA+PiAyNSkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1NXUkVHMkFUQl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNSkgJiAweDBlMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfT1RQUkVHMkFUQl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9PVFBSRUcyQVRCX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX09UUFJFRzJBVEJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfT1RQUkVHMkFUQl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxMDAwMDAwMCkgPj4gMjgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9PVFBSRUcyQVRCX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjgpICYgMHgxMDAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX09UUFJFR19MVkxDVFJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfT1RQUkVHX0xWTENUUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9PVFBSRUdfTFZMQ1RSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX09UUFJFR19MVkxDVFJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NjAwMDAwMDApID4+IDI5KQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfT1RQUkVHX0xWTENUUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI5KSAmIDB4NjAwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9EUkVHX0xWTENUUl9NQU5PVlJfRU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX0RSRUdfTFZMQ1RSX01BTk9WUl9FTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfRFJFR19MVkxDVFJfTUFOT1ZSX0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9EUkVHX0xWTENUUl9NQU5PVlJfRU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDgwMDAwMDAwKSA+PiAzMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX0RSRUdfTFZMQ1RSX01BTk9WUl9FTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMSkgJiAweDgwMDAwMDAwKQotCi0KLSNpZm5kZWYgX19BU1NFTUJMRVJfXwotCi10eXBlZGVmIHN0cnVjdCBhbmFsb2dfaW50Zl9hcmVzX3JlZ19yZWdfcyB7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBSWFJGX0JJQVMxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgICAweDAgLSAweDQgICAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBSWFJGX0JJQVMyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgICAweDQgLSAweDggICAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBSWFJGX0dBSU5TVEFHRVM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgICAweDggLSAweGMgICAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBSWFJGX0FHQzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgICAweGMgLSAweDEwICAgICAgICovCi0gIHZvbGF0aWxlIGNoYXIgcGFkX18wWzB4MzBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIDB4MTAgLSAweDQwICAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBUWFJGMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIDB4NDAgLSAweDQ0ICAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBUWFJGMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIDB4NDQgLSAweDQ4ICAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBUWFJGMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIDB4NDggLSAweDRjICAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBUWFJGNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIDB4NGMgLSAweDUwICAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBUWFJGNTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIDB4NTAgLSAweDU0ICAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBUWFJGNjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIDB4NTQgLSAweDU4ICAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBUWFJGNzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIDB4NTggLSAweDVjICAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBUWFJGODsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIDB4NWMgLSAweDYwICAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBUWFJGOTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIDB4NjAgLSAweDY0ICAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBUWFJGMTA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIDB4NjQgLSAweDY4ICAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBUWFJGMTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIDB4NjggLSAweDZjICAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBUWFJGMTI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIDB4NmMgLSAweDcwICAgICAgICovCi0gIHZvbGF0aWxlIGNoYXIgcGFkX18xWzB4MTBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIDB4NzAgLSAweDgwICAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBTWU5USDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIDB4ODAgLSAweDg0ICAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBTWU5USDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIDB4ODQgLSAweDg4ICAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBTWU5USDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIDB4ODggLSAweDhjICAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBTWU5USDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIDB4OGMgLSAweDkwICAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBTWU5USDU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIDB4OTAgLSAweDk0ICAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBTWU5USDY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIDB4OTQgLSAweDk4ICAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBTWU5USDc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIDB4OTggLSAweDljICAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBTWU5USDg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIDB4OWMgLSAweGEwICAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBTWU5USDk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIDB4YTAgLSAweGE0ICAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBTWU5USDEwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIDB4YTQgLSAweGE4ICAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBTWU5USDExOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIDB4YTggLSAweGFjICAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBTWU5USDEyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIDB4YWMgLSAweGIwICAgICAgICovCi0gIHZvbGF0aWxlIGNoYXIgcGFkX18yWzB4MTBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIDB4YjAgLSAweGMwICAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBCSUFTMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIDB4YzAgLSAweGM0ICAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBCSUFTMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIDB4YzQgLSAweGM4ICAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBCSUFTMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIDB4YzggLSAweGNjICAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBCSUFTNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIDB4Y2MgLSAweGQwICAgICAgICovCi0gIHZvbGF0aWxlIGNoYXIgcGFkX18zWzB4MzBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIDB4ZDAgLSAweDEwMCAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBSWFRYMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgxMDAgLSAweDEwNCAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBSWFRYMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgxMDQgLSAweDEwOCAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBSWFRYMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgxMDggLSAweDEwYyAgICAgICovCi0gIHZvbGF0aWxlIGNoYXIgcGFkX180WzB4MzRdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgxMGMgLSAweDE0MCAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBCQjE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgxNDAgLSAweDE0NCAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBCQjI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgxNDQgLSAweDE0OCAgICAgICovCi0gIHZvbGF0aWxlIGNoYXIgcGFkX181WzB4MTM4XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgxNDggLSAweDI4MCAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBUT1AxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgyODAgLSAweDI4NCAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBUT1AyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgyODQgLSAweDI4OCAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBUT1AzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgyODggLSAweDI4YyAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBUT1A0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgyOGMgLSAweDI5MCAgICAgICovCi0gIHZvbGF0aWxlIGNoYXIgcGFkX182WzB4ZjBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgyOTAgLSAweDM4MCAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCByYmlzdF9jbnRybDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgzODAgLSAweDM4NCAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB0eF9kY19vZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgzODQgLSAweDM4OCAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB0eF90b25lZ2VuMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgzODggLSAweDM4YyAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB0eF90b25lZ2VuMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgzOGMgLSAweDM5MCAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB0eF9sZnRvbmVnZW4wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgzOTAgLSAweDM5NCAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB0eF9saW5lYXJfcmFtcF9pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgzOTQgLSAweDM5OCAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB0eF9saW5lYXJfcmFtcF9xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgzOTggLSAweDM5YyAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB0eF9wcmJzX21hZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgzOWMgLSAweDNhMCAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB0eF9wcmJzX3NlZWRfaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgzYTAgLSAweDNhNCAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB0eF9wcmJzX3NlZWRfcTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgzYTQgLSAweDNhOCAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBjbWFjX2RjX2NhbmNlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgzYTggLSAweDNhYyAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBjbWFjX2RjX29mZnNldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgzYWMgLSAweDNiMCAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBjbWFjX2NvcnI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgzYjAgLSAweDNiNCAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBjbWFjX3Bvd2VyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgzYjQgLSAweDNiOCAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBjbWFjX2Nyb3NzX2NvcnI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgzYjggLSAweDNiYyAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBjbWFjX2kycTI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgzYmMgLSAweDNjMCAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBjbWFjX3Bvd2VyX2hwZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgzYzAgLSAweDNjNCAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCByeGRhY19zZXQxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgzYzQgLSAweDNjOCAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCByeGRhY19zZXQyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgzYzggLSAweDNjYyAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCByeGRhY19sb25nX3NoaWZ0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgzY2MgLSAweDNkMCAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBjbWFjX3Jlc3VsdHNfaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgzZDAgLSAweDNkNCAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBjbWFjX3Jlc3VsdHNfcTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgzZDQgLSAweDNkOCAgICAgICovCi0gIHZvbGF0aWxlIGNoYXIgcGFkX183WzB4MzY4XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHgzZDggLSAweDc0MCAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBQTVUxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHg3NDAgLSAweDc0NCAgICAgICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBQTVUyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgMHg3NDQgLSAweDc0OCAgICAgICovCi19IGFuYWxvZ19pbnRmX2FyZXNfcmVnX3JlZ190OwotCi0jZW5kaWYgLyogX19BU1NFTUJMRVJfXyAqLwotCi0jZW5kaWYgLyogX0FOQUxPR19JTlRGX0FSRVNfUkVHX1JFR19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHc0LjAvaHcvYW5hbG9nX2ludGZfYXRocl93bGFuX3JlZy5oIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHc0LjAvaHcvYW5hbG9nX2ludGZfYXRocl93bGFuX3JlZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzI0M2ZiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3NC4wL2h3L2FuYWxvZ19pbnRmX2F0aHJfd2xhbl9yZWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDM2NzQgKzAsMCBAQAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDQtMjAxMCBBdGhlcm9zIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIAotLy8KLS8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotLy8gcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLS8vCi0vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLS8vIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLS8vIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0vLyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0vLyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLS8vIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0vLyBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotLy8KLS8vCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gQXV0aG9yKHMpOiA9IkF0aGVyb3MiCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotLyogQ29weXJpZ2h0IChDKSAyMDA5IERlbmFsaSBTb2Z0d2FyZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkICAgICAgICAgICAgICAqLwotLyogVEhJUyBGSUxFIElTIEFVVE9NQVRJQ0FMTFkgR0VORVJBVEVEIEJZIERFTkFMSSBCTFVFUFJJTlQsIERPIE5PVCBFRElUICAgICAqLwotCi0KLSNpZm5kZWYgX0FOQUxPR19JTlRGX0FUSFJfV0xBTl9SRUdfUkVHX0hfCi0jZGVmaW5lIF9BTkFMT0dfSU5URl9BVEhSX1dMQU5fUkVHX1JFR19IXwotCi0KLS8qIG1hY3JvcyBmb3IgUlhSRl9CSUFTMSAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1NQQVJFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfU1BBUkVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9TUEFSRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1NQQVJFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAxKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfU1BBUkVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSVIyNVNQQVJFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JUjI1U1BBUkVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0lSMjVTUEFSRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBlCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSVIyNVNQQVJFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwZSkgPj4gMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JUjI1U1BBUkVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMSkgJiAweDAwMDAwMDBlKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0lSMjVMTzE4X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSVIyNUxPMThfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JUjI1TE8xOF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0lSMjVMTzE4X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwNzApID4+IDQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSVIyNUxPMThfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDQpICYgMHgwMDAwMDA3MCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JQzI1TE8zNl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0lDMjVMTzM2X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSUMyNUxPMzZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzODAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JQzI1TE8zNl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMzgwKSA+PiA3KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0lDMjVMTzM2X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA3KSAmIDB4MDAwMDAzODApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSUMyNU1YUjJfNUdIX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JQzI1TVhSMl81R0hfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0lDMjVNWFIyXzVHSF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxYzAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSUMyNU1YUjJfNUdIX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAxYzAwKSA+PiAxMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JQzI1TVhSMl81R0hfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMCkgJiAweDAwMDAxYzAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0lDMjVNWFI1R0hfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSUMyNU1YUjVHSF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JQzI1TVhSNUdIX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwZTAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0lDMjVNWFI1R0hfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwZTAwMCkgPj4gMTMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSUMyNU1YUjVHSF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTMpICYgMHgwMDAwZTAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JQzI1VkdBNUdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0lDMjVWR0E1R19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSUMyNVZHQTVHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNzAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JQzI1VkdBNUdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwNzAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0lDMjVWR0E1R19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDAwNzAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSUM3NUxOQTVHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JQzc1TE5BNUdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0lDNzVMTkE1R19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMzgwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSUM3NUxOQTVHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMzgwMDAwKSA+PiAxOSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JQzc1TE5BNUdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOSkgJiAweDAwMzgwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0lSMjVMTzI0X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSVIyNUxPMjRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JUjI1TE8yNF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMWMwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0lSMjVMTzI0X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMWMwMDAwMCkgPj4gMjIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSVIyNUxPMjRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjIpICYgMHgwMWMwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JQzI1TVhSMkdIX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0lDMjVNWFIyR0hfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSUMyNU1YUjJHSF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGUwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JQzI1TVhSMkdIX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MGUwMDAwMDApID4+IDI1KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0lDMjVNWFIyR0hfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI1KSAmIDB4MGUwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSUM3NUxOQTJHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JQzc1TE5BMkdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0lDNzVMTkEyR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfSUM3NUxOQTJHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDcwMDAwMDAwKSA+PiAyOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9JQzc1TE5BMkdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyOCkgJiAweDcwMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0JJQVNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfQklBU19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMxX1BXRF9CSUFTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzFfUFdEX0JJQVNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg4MDAwMDAwMCkgPj4gMzEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMV9QV0RfQklBU19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMzEpICYgMHg4MDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBSWFJGX0JJQVMyICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfU1BBUkVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9TUEFSRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1NQQVJFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfU1BBUkVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDEpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9TUEFSRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BLRU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUEtFTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9QS0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGUKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BLRU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDBlKSA+PiAxKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUEtFTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxKSAmIDB4MDAwMDAwMGUpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9WQ01WQUxVRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1ZDTVZBTFVFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfVkNNVkFMVUVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDcwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9WQ01WQUxVRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDA3MCkgPj4gNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1ZDTVZBTFVFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNCkgJiAweDAwMDAwMDcwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUFdEX1ZDTUJVRl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9QV0RfVkNNQlVGX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BXRF9WQ01CVUZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUFdEX1ZDTUJVRl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwODApID4+IDcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9QV0RfVkNNQlVGX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDcpICYgMHgwMDAwMDA4MCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BXRF9JUjI1U1BBUkVIX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUFdEX0lSMjVTUEFSRUhfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9QV0RfSVIyNVNQQVJFSF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3MDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BXRF9JUjI1U1BBUkVIX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwNzAwKSA+PiA4KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUFdEX0lSMjVTUEFSRUhfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDA3MDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9QV0RfSVIyNVNQQVJFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BXRF9JUjI1U1BBUkVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUFdEX0lSMjVTUEFSRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzODAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9QV0RfSVIyNVNQQVJFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAzODAwKSA+PiAxMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BXRF9JUjI1U1BBUkVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMSkgJiAweDAwMDAzODAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUFdEX0lDMjVMTkFCVUZfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9QV0RfSUMyNUxOQUJVRl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BXRF9JQzI1TE5BQlVGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxYzAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUFdEX0lDMjVMTkFCVUZfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAxYzAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9QV0RfSUMyNUxOQUJVRl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwMDAxYzAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BXRF9JUjI1QUdDSF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUFdEX0lSMjVBR0NIX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9QV0RfSVIyNUFHQ0hfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwZTAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BXRF9JUjI1QUdDSF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwZTAwMDApID4+IDE3KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUFdEX0lSMjVBR0NIX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE3KSAmIDB4MDAwZTAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9QV0RfSVIyNUFHQ19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BXRF9JUjI1QUdDX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUFdEX0lSMjVBR0NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNzAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9QV0RfSVIyNUFHQ19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwNzAwMDAwKSA+PiAyMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BXRF9JUjI1QUdDX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMCkgJiAweDAwNzAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUFdEX0lDMjVBR0NfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9QV0RfSUMyNUFHQ19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BXRF9JQzI1QUdDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzgwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUFdEX0lDMjVBR0NfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMzgwMDAwMCkgPj4gMjMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9QV0RfSUMyNUFHQ19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjMpICYgMHgwMzgwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BXRF9JQzI1VkNNQlVGX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUFdEX0lDMjVWQ01CVUZfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9QV0RfSUMyNVZDTUJVRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWMwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BXRF9JQzI1VkNNQlVGX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MWMwMDAwMDApID4+IDI2KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUFdEX0lDMjVWQ01CVUZfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI2KSAmIDB4MWMwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9QV0RfSVIyNVZDTV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BXRF9JUjI1VkNNX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQklBUzJfUFdEX0lSMjVWQ01fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGUwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9CSUFTMl9QV0RfSVIyNVZDTV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGUwMDAwMDAwKSA+PiAyOSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0JJQVMyX1BXRF9JUjI1VkNNX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyOSkgJiAweGUwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIFJYUkZfR0FJTlNUQUdFUyAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfU1BBUkVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19TUEFSRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1NQQVJFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfU1BBUkVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAxKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19TUEFSRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX0xOQU9OX0NBTERDX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTE5BT05fQ0FMRENfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19MTkFPTl9DQUxEQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX0xOQU9OX0NBTERDX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMikgPj4gMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTE5BT05fQ0FMRENfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMSkgJiAweDAwMDAwMDAyKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19WR0E1R19DQVBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1ZHQTVHX0NBUF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfVkdBNUdfQ0FQX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwYwotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19WR0E1R19DQVBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMGMpID4+IDIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1ZHQTVHX0NBUF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIpICYgMHgwMDAwMDAwYykKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTE5BNUdfQ0FQX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19MTkE1R19DQVBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX0xOQTVHX0NBUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTE5BNUdfQ0FQX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDMwKSA+PiA0KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19MTkE1R19DQVBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA0KSAmIDB4MDAwMDAwMzApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX0xOQTVHX1NIT1JUSU5QX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTE5BNUdfU0hPUlRJTlBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19MTkE1R19TSE9SVElOUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX0xOQTVHX1NIT1JUSU5QX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDA0MCkgPj4gNikKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTE5BNUdfU0hPUlRJTlBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNikgJiAweDAwMDAwMDQwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19QV0RfTE81R19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1BXRF9MTzVHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfUFdEX0xPNUdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19QV0RfTE81R19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwODApID4+IDcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1BXRF9MTzVHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDcpICYgMHgwMDAwMDA4MCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfUFdEX1ZHQTVHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19QV0RfVkdBNUdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1BXRF9WR0E1R19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfUFdEX1ZHQTVHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMTAwKSA+PiA4KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19QV0RfVkdBNUdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDAxMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1BXRF9NWFI1R19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfUFdEX01YUjVHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19QV0RfTVhSNUdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1BXRF9NWFI1R19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDIwMCkgPj4gOSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfUFdEX01YUjVHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOSkgJiAweDAwMDAwMjAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19QV0RfTE5BNUdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1BXRF9MTkE1R19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfUFdEX0xOQTVHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19QV0RfTE5BNUdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDQwMCkgPj4gMTApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1BXRF9MTkE1R19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTApICYgMHgwMDAwMDQwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTE5BMkdfQ0FQX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19MTkEyR19DQVBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX0xOQTJHX0NBUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE4MDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTE5BMkdfQ0FQX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDE4MDApID4+IDExKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19MTkEyR19DQVBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDExKSAmIDB4MDAwMDE4MDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX0xOQTJHX1NIT1JUSU5QX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTE5BMkdfU0hPUlRJTlBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19MTkEyR19TSE9SVElOUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX0xOQTJHX1NIT1JUSU5QX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAyMDAwKSA+PiAxMykKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTE5BMkdfU0hPUlRJTlBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMykgJiAweDAwMDAyMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19MTkEyR19MUF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX0xOQTJHX0xQX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTE5BMkdfTFBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19MTkEyR19MUF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwNDAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX0xOQTJHX0xQX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwMDAwNDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfUFdEX0xPMkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19QV0RfTE8yR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1BXRF9MTzJHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfUFdEX0xPMkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDgwMDApID4+IDE1KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19QV0RfTE8yR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE1KSAmIDB4MDAwMDgwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1BXRF9NWFIyR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfUFdEX01YUjJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19QV0RfTVhSMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1BXRF9NWFIyR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDEwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfUFdEX01YUjJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAwMDEwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19QV0RfTE5BMkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1BXRF9MTkEyR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfUFdEX0xOQTJHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19QV0RfTE5BMkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAyMDAwMCkgPj4gMTcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1BXRF9MTkEyR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTcpICYgMHgwMDAyMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTVhSNUdfR0FJTl9PVlJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19NWFI1R19HQUlOX09WUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX01YUjVHX0dBSU5fT1ZSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwYzAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTVhSNUdfR0FJTl9PVlJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwYzAwMDApID4+IDE4KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19NWFI1R19HQUlOX09WUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE4KSAmIDB4MDAwYzAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1ZHQTVHX0dBSU5fT1ZSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfVkdBNUdfR0FJTl9PVlJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19WR0E1R19HQUlOX09WUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNzAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1ZHQTVHX0dBSU5fT1ZSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwNzAwMDAwKSA+PiAyMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfVkdBNUdfR0FJTl9PVlJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMCkgJiAweDAwNzAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19MTkE1R19HQUlOX09WUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX0xOQTVHX0dBSU5fT1ZSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTE5BNUdfR0FJTl9PVlJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzgwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19MTkE1R19HQUlOX09WUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMzgwMDAwMCkgPj4gMjMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX0xOQTVHX0dBSU5fT1ZSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjMpICYgMHgwMzgwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTVhSMkdfR0FJTl9PVlJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19NWFIyR19HQUlOX09WUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX01YUjJHX0dBSU5fT1ZSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGMwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTVhSMkdfR0FJTl9PVlJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MGMwMDAwMDApID4+IDI2KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19NWFIyR19HQUlOX09WUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI2KSAmIDB4MGMwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX0xOQTJHX0dBSU5fT1ZSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTE5BMkdfR0FJTl9PVlJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19MTkEyR19HQUlOX09WUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX0xOQTJHX0dBSU5fT1ZSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDcwMDAwMDAwKSA+PiAyOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfTE5BMkdfR0FJTl9PVlJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyOCkgJiAweDcwMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19SWF9PVkVSUklERV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1JYX09WRVJSSURFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0dBSU5TVEFHRVNfUlhfT1ZFUlJJREVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfR0FJTlNUQUdFU19SWF9PVkVSUklERV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg4MDAwMDAwMCkgPj4gMzEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9HQUlOU1RBR0VTX1JYX09WRVJSSURFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMzEpICYgMHg4MDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBSWFJGX0FHQyAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBjCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGMKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19SRjVHX09OX0RVUklOR19DQUxQQV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX1JGNUdfT05fRFVSSU5HX0NBTFBBX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfUkY1R19PTl9EVVJJTkdfQ0FMUEFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19SRjVHX09OX0RVUklOR19DQUxQQV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAxKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX1JGNUdfT05fRFVSSU5HX0NBTFBBX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfUkYyR19PTl9EVVJJTkdfQ0FMUEFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19SRjJHX09OX0RVUklOR19DQUxQQV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX1JGMkdfT05fRFVSSU5HX0NBTFBBX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfUkYyR19PTl9EVVJJTkdfQ0FMUEFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMikgPj4gMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19SRjJHX09OX0RVUklOR19DQUxQQV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMSkgJiAweDAwMDAwMDAyKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0FHQ19PVVRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfQUdDX09VVF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19BR0NfT1VUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0FHQ19PVVRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDQpID4+IDIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfTE5BQlVGR0FJTjJYX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19MTkFCVUZHQUlOMlhfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0xOQUJVRkdBSU4yWF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfTE5BQlVGR0FJTjJYX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwOCkgPj4gMykKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19MTkFCVUZHQUlOMlhfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMykgJiAweDAwMDAwMDA4KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0xOQUJVRl9QV0RfT1ZSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfTE5BQlVGX1BXRF9PVlJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19MTkFCVUZfUFdEX09WUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0xOQUJVRl9QV0RfT1ZSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMTApID4+IDQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfTE5BQlVGX1BXRF9PVlJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDQpICYgMHgwMDAwMDAxMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19QV0RfTE5BQlVGX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX1BXRF9MTkFCVUZfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfUFdEX0xOQUJVRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19QV0RfTE5BQlVGX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDIwKSA+PiA1KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX1BXRF9MTkFCVUZfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA1KSAmIDB4MDAwMDAwMjApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfQUdDX0ZBTExfQ1RSTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19BR0NfRkFMTF9DVFJMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0FHQ19GQUxMX0NUUkxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMWMwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfQUdDX0ZBTExfQ1RSTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDFjMCkgPj4gNikKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19BR0NfRkFMTF9DVFJMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNikgJiAweDAwMDAwMWMwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0FHQzVHX0NBTERBQ19PVlJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfQUdDNUdfQ0FMREFDX09WUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19BR0M1R19DQUxEQUNfT1ZSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwN2UwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0FHQzVHX0NBTERBQ19PVlJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDdlMDApID4+IDkpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfQUdDNUdfQ0FMREFDX09WUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDkpICYgMHgwMDAwN2UwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19BR0M1R19EQkRBQ19PVlJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0FHQzVHX0RCREFDX09WUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfQUdDNUdfREJEQUNfT1ZSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNzgwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19BR0M1R19EQkRBQ19PVlJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwNzgwMDApID4+IDE1KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0FHQzVHX0RCREFDX09WUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE1KSAmIDB4MDAwNzgwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfQUdDMkdfQ0FMREFDX09WUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19BR0MyR19DQUxEQUNfT1ZSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0FHQzJHX0NBTERBQ19PVlJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxZjgwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfQUdDMkdfQ0FMREFDX09WUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAxZjgwMDAwKSA+PiAxOSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19BR0MyR19DQUxEQUNfT1ZSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOSkgJiAweDAxZjgwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0FHQzJHX0RCREFDX09WUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfQUdDMkdfREJEQUNfT1ZSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19BR0MyR19EQkRBQ19PVlJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxZTAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0FHQzJHX0RCREFDX09WUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxZTAwMDAwMCkgPj4gMjUpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfQUdDMkdfREJEQUNfT1ZSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjUpICYgMHgxZTAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19BR0NfQ0FMX09WUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0FHQ19DQUxfT1ZSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfQUdDX0NBTF9PVlJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19BR0NfQ0FMX09WUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MjAwMDAwMDApID4+IDI5KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0FHQ19DQUxfT1ZSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI5KSAmIDB4MjAwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfQUdDX09OX09WUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19BR0NfT05fT1ZSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0FHQ19PTl9PVlJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfQUdDX09OX09WUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDQwMDAwMDAwKSA+PiAzMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19BR0NfT05fT1ZSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMCkgJiAweDQwMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0FHQ19PVkVSUklERV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfQUdDX09WRVJSSURFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFJGX0FHQ19BR0NfT1ZFUlJJREVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYUkZfQUdDX0FHQ19PVkVSUklERV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg4MDAwMDAwMCkgPj4gMzEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhSRl9BR0NfQUdDX09WRVJSSURFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMzEpICYgMHg4MDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBUWFJGMSAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9QRExPQlVGNUdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX1BETE9CVUY1R19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfUERMT0JVRjVHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9QRExPQlVGNUdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAxKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX1BETE9CVUY1R19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfUERMT0RJVjVHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9QRExPRElWNUdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX1BETE9ESVY1R19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfUERMT0RJVjVHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMikgPj4gMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9QRExPRElWNUdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMSkgJiAweDAwMDAwMDAyKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX0xPQlVGNUdGT1JDRURfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfTE9CVUY1R0ZPUkNFRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9MT0JVRjVHRk9SQ0VEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX0xPQlVGNUdGT1JDRURfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDQpID4+IDIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfTE9CVUY1R0ZPUkNFRF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIpICYgMHgwMDAwMDAwNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9MT0RJVjVHRk9SQ0VEX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX0xPRElWNUdGT1JDRURfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfTE9ESVY1R0ZPUkNFRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9MT0RJVjVHRk9SQ0VEX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDA4KSA+PiAzKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX0xPRElWNUdGT1JDRURfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzKSAmIDB4MDAwMDAwMDgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfUEFEUlYyR041R19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9QQURSVjJHTjVHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX1BBRFJWMkdONUdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGYwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfUEFEUlYyR041R19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDBmMCkgPj4gNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9QQURSVjJHTjVHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNCkgJiAweDAwMDAwMGYwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX1BBRFJWM0dONUdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfUEFEUlYzR041R19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9QQURSVjNHTjVHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGYwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX1BBRFJWM0dONUdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDBmMDApID4+IDgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfUEFEUlYzR041R19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwMGYwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9QQURSVjRHTjVHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX1BBRFJWNEdONUdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfUEFEUlY0R041R19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGYwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9QQURSVjRHTjVHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMGYwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX1BBRFJWNEdONUdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEyKSAmIDB4MDAwMGYwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfTE9DQUxUWEdBSU41R19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9MT0NBTFRYR0FJTjVHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX0xPQ0FMVFhHQUlONUdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfTE9DQUxUWEdBSU41R19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDEwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9MT0NBTFRYR0FJTjVHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAwMDEwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX1BET1VUMkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfUERPVVQyR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9QRE9VVDJHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX1BET1VUMkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAyMDAwMCkgPj4gMTcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfUERPVVQyR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTcpICYgMHgwMDAyMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9QRERSMkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX1BERFIyR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfUEREUjJHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9QRERSMkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwNDAwMDApID4+IDE4KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX1BERFIyR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE4KSAmIDB4MDAwNDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfUERNWFIyR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9QRE1YUjJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX1BETVhSMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfUERNWFIyR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDgwMDAwKSA+PiAxOSkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9QRE1YUjJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOSkgJiAweDAwMDgwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX1BETE9CVUYyR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfUERMT0JVRjJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9QRExPQlVGMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX1BETE9CVUYyR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDEwMDAwMCkgPj4gMjApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfUERMT0JVRjJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjApICYgMHgwMDEwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9QRExPRElWMkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX1BETE9ESVYyR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfUERMT0RJVjJHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9QRExPRElWMkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAyMDAwMDApID4+IDIxKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX1BETE9ESVYyR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIxKSAmIDB4MDAyMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfTE9CVUYyR0ZPUkNFRF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9MT0JVRjJHRk9SQ0VEX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX0xPQlVGMkdGT1JDRURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfTE9CVUYyR0ZPUkNFRF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwNDAwMDAwKSA+PiAyMikKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9MT0JVRjJHRk9SQ0VEX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMikgJiAweDAwNDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX0xPRElWMkdGT1JDRURfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfTE9ESVYyR0ZPUkNFRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9MT0RJVjJHRk9SQ0VEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX0xPRElWMkdGT1JDRURfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDgwMDAwMCkgPj4gMjMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfTE9ESVYyR0ZPUkNFRF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjMpICYgMHgwMDgwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9QQURSVkdOMkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX1BBRFJWR04yR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfUEFEUlZHTjJHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N2YwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9QQURSVkdOMkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N2YwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX1BBRFJWR04yR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI0KSAmIDB4N2YwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfTE9DQUxUWEdBSU4yR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9MT0NBTFRYR0FJTjJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxX0xPQ0FMVFhHQUlOMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjFfTE9DQUxUWEdBSU4yR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDgwMDAwMDAwKSA+PiAzMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMV9MT0NBTFRYR0FJTjJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMSkgJiAweDgwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIFRYUkYyICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDQKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0NAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX0QzQjVHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfRDNCNUdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9EM0I1R19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX0QzQjVHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDcpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfRDNCNUdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwNykKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9ENEI1R19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX0Q0QjVHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfRDRCNUdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9ENEI1R19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDM4KSA+PiAzKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX0Q0QjVHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzKSAmIDB4MDAwMDAwMzgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfT0NBUzJHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9PQ0FTMkdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX09DQVMyR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMWMwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfT0NBUzJHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDFjMCkgPj4gNikKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9PQ0FTMkdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNikgJiAweDAwMDAwMWMwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX0RDQVMyR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfRENBUzJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9EQ0FTMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGUwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX0RDQVMyR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDBlMDApID4+IDkpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfRENBUzJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDkpICYgMHgwMDAwMGUwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9PQjJHX1BBTE9GRl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX09CMkdfUEFMT0ZGX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfT0IyR19QQUxPRkZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDcwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9PQjJHX1BBTE9GRl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDcwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX09CMkdfUEFMT0ZGX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEyKSAmIDB4MDAwMDcwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfT0IyR19RQU1fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9PQjJHX1FBTV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX09CMkdfUUFNX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDM4MDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfT0IyR19RQU1fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDM4MDAwKSA+PiAxNSkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9PQjJHX1FBTV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNSkgJiAweDAwMDM4MDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX09CMkdfUFNLX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfT0IyR19QU0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9PQjJHX1BTS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDFjMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX09CMkdfUFNLX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDFjMDAwMCkgPj4gMTgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfT0IyR19QU0tfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTgpICYgMHgwMDFjMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9PQjJHX0NDS19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX09CMkdfQ0NLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfT0IyR19DQ0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBlMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9PQjJHX0NDS19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDBlMDAwMDApID4+IDIxKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX09CMkdfQ0NLX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIxKSAmIDB4MDBlMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfREIyR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9EQjJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX0RCMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfREIyR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDA3MDAwMDAwKSA+PiAyNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9EQjJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNCkgJiAweDA3MDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX1BET1VUNUdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfUERPVVQ1R19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9QRE9VVDVHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3ODAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX1BET1VUNUdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3ODAwMDAwMCkgPj4gMjcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfUERPVVQ1R19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjcpICYgMHg3ODAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9QRE1YUjVHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX1BETVhSNUdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjJfUERNWFI1R19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMl9QRE1YUjVHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ODAwMDAwMDApID4+IDMxKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYyX1BETVhSNUdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMxKSAmIDB4ODAwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgVFhSRjMgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0OAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjNfRklMVFIyR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19GSUxUUjJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX0ZJTFRSMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjNfRklMVFIyR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMykgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19GSUxUUjJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDAzKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX1BXREZCMl8yR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjNfUFdERkIyXzJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19QV0RGQjJfMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX1BXREZCMl8yR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDQpID4+IDIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjNfUFdERkIyXzJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIpICYgMHgwMDAwMDAwNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19QV0RGQjFfMkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX1BXREZCMV8yR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjNfUFdERkIxXzJHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19QV0RGQjFfMkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDA4KSA+PiAzKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX1BXREZCMV8yR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzKSAmIDB4MDAwMDAwMDgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjNfUERGQjJHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19QREZCMkdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX1BERkIyR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjNfUERGQjJHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAxMCkgPj4gNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19QREZCMkdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNCkgJiAweDAwMDAwMDEwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX1JESVY1R19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjNfUkRJVjVHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19SRElWNUdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2MAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX1JESVY1R19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwNjApID4+IDUpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjNfUkRJVjVHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDUpICYgMHgwMDAwMDA2MCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19DQVBESVY1R19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX0NBUERJVjVHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjNfQ0FQRElWNUdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzODAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19DQVBESVY1R19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMzgwKSA+PiA3KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX0NBUERJVjVHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA3KSAmIDB4MDAwMDAzODApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjNfUERQUkVESVNUNUdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19QRFBSRURJU1Q1R19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX1BEUFJFRElTVDVHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjNfUERQUkVESVNUNUdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwNDAwKSA+PiAxMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19QRFBSRURJU1Q1R19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMCkgJiAweDAwMDAwNDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX1JESVYyR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjNfUkRJVjJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19SRElWMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTgwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX1JESVYyR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMTgwMCkgPj4gMTEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjNfUkRJVjJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTEpICYgMHgwMDAwMTgwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19QRFBSRURJU1QyR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX1BEUFJFRElTVDJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjNfUERQUkVESVNUMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19QRFBSRURJU1QyR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDIwMDApID4+IDEzKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX1BEUFJFRElTVDJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEzKSAmIDB4MDAwMDIwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjNfT0NBUzVHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19PQ0FTNUdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX09DQVM1R19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDFjMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjNfT0NBUzVHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDFjMDAwKSA+PiAxNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19PQ0FTNUdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNCkgJiAweDAwMDFjMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX0QyQ0FTNUdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjNfRDJDQVM1R19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19EMkNBUzVHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBlMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX0QyQ0FTNUdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDBlMDAwMCkgPj4gMTcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjNfRDJDQVM1R19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTcpICYgMHgwMDBlMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19EM0NBUzVHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX0QzQ0FTNUdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjNfRDNDQVM1R19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA3MDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19EM0NBUzVHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDA3MDAwMDApID4+IDIwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX0QzQ0FTNUdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIwKSAmIDB4MDA3MDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjNfRDRDQVM1R19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19ENENBUzVHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX0Q0Q0FTNUdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzODAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjNfRDRDQVM1R19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAzODAwMDAwKSA+PiAyMykKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19ENENBUzVHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMykgJiAweDAzODAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX09CNUdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjNfT0I1R19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19PQjVHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxYzAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX09CNUdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxYzAwMDAwMCkgPj4gMjYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjNfT0I1R19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjYpICYgMHgxYzAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19EMkI1R19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX0QyQjVHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjNfRDJCNUdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZTAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGM19EMkI1R19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZTAwMDAwMDApID4+IDI5KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYzX0QyQjVHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI5KSAmIDB4ZTAwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgVFhSRjQgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0YwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDRjCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfUEsxQjJHX0NDS19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9QSzFCMkdfQ0NLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X1BLMUIyR19DQ0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfUEsxQjJHX0NDS19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMykgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9QSzFCMkdfQ0NLX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDAzKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X01JT0IyR19RQU1fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfTUlPQjJHX1FBTV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9NSU9CMkdfUUFNX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxYwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X01JT0IyR19RQU1fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMWMpID4+IDIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfTUlPQjJHX1FBTV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIpICYgMHgwMDAwMDAxYykKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9NSU9CMkdfUFNLX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X01JT0IyR19QU0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfTUlPQjJHX1BTS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZTAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9NSU9CMkdfUFNLX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMGUwKSA+PiA1KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X01JT0IyR19QU0tfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA1KSAmIDB4MDAwMDAwZTApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfTUlPQjJHX0NDS19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9NSU9CMkdfQ0NLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X01JT0IyR19DQ0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNzAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfTUlPQjJHX0NDS19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDcwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9NSU9CMkdfQ0NLX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAwNzAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X0NPTVAyR19RQU1fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfQ09NUDJHX1FBTV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9DT01QMkdfUUFNX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMzgwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X0NPTVAyR19RQU1fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMzgwMCkgPj4gMTEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfQ09NUDJHX1FBTV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTEpICYgMHgwMDAwMzgwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9DT01QMkdfUFNLX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X0NPTVAyR19QU0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfQ09NUDJHX1BTS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMWMwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9DT01QMkdfUFNLX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMWMwMDApID4+IDE0KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X0NPTVAyR19QU0tfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE0KSAmIDB4MDAwMWMwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfQ09NUDJHX0NDS19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9DT01QMkdfQ0NLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X0NPTVAyR19DQ0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMGUwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfQ09NUDJHX0NDS19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMGUwMDAwKSA+PiAxNykKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9DT01QMkdfQ0NLX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNykgJiAweDAwMGUwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X0FNUDJCMkdfUUFNX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfQU1QMkIyR19RQU1fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9BTVAyQjJHX1FBTV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDcwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X0FNUDJCMkdfUUFNX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDcwMDAwMCkgPj4gMjApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfQU1QMkIyR19RQU1fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjApICYgMHgwMDcwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9BTVAyQjJHX1BTS19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X0FNUDJCMkdfUFNLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfQU1QMkIyR19QU0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDM4MDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9BTVAyQjJHX1BTS19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDM4MDAwMDApID4+IDIzKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X0FNUDJCMkdfUFNLX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIzKSAmIDB4MDM4MDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfQU1QMkIyR19DQ0tfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9BTVAyQjJHX0NDS19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X0FNUDJCMkdfQ0NLX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFjMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfQU1QMkIyR19DQ0tfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDFjMDAwMDAwKSA+PiAyNikKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9BTVAyQjJHX0NDS19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNikgJiAweDFjMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X0FNUDJDQVMyR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfQU1QMkNBUzJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNF9BTVAyQ0FTMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhlMDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY0X0FNUDJDQVMyR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhlMDAwMDAwMCkgPj4gMjkpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjRfQU1QMkNBUzJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjkpICYgMHhlMDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBUWFJGNSAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9TUEFSRTVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X1NQQVJFNV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfU1BBUkU1X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9TUEFSRTVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAxKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X1NQQVJFNV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfUEFMX0xPQ0tFRF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9QQUxfTE9DS0VEX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X1BBTF9MT0NLRURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfUEFMX0xPQ0tFRF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMikgPj4gMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9GQkhJMkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X0ZCSEkyR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfRkJISTJHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9GQkhJMkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDA0KSA+PiAyKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X0ZCTE8yR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfRkJMTzJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9GQkxPMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X0ZCTE8yR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDgpID4+IDMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfTk9QQUxHQUlOMkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9OT1BBTEdBSU4yR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X05PUEFMR0FJTjJHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfTk9QQUxHQUlOMkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAxMCkgPj4gNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9OT1BBTEdBSU4yR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNCkgJiAweDAwMDAwMDEwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X0VOUEFDQUwyR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfRU5QQUNBTDJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9FTlBBQ0FMMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X0VOUEFDQUwyR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMjApID4+IDUpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfRU5QQUNBTDJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDUpICYgMHgwMDAwMDAyMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9PRkZTRVQyR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X09GRlNFVDJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfT0ZGU0VUMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFmYzAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9PRkZTRVQyR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAxZmMwKSA+PiA2KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X09GRlNFVDJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA2KSAmIDB4MDAwMDFmYzApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfRU5PRkZTRVRDQUwyR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9FTk9GRlNFVENBTDJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X0VOT0ZGU0VUQ0FMMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfRU5PRkZTRVRDQUwyR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAyMDAwKSA+PiAxMykKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9FTk9GRlNFVENBTDJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMykgJiAweDAwMDAyMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X1JFRkhJMkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfUkVGSEkyR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9SRUZISTJHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxYzAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X1JFRkhJMkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAxYzAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfUkVGSEkyR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwMDAxYzAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9SRUZMTzJHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X1JFRkxPMkdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfUkVGTE8yR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwZTAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9SRUZMTzJHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwZTAwMDApID4+IDE3KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X1JFRkxPMkdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE3KSAmIDB4MDAwZTAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfUEFMQ0xBTVAyR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9QQUxDTEFNUDJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X1BBTENMQU1QMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMzAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfUEFMQ0xBTVAyR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMzAwMDAwKSA+PiAyMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9QQUxDTEFNUDJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMCkgJiAweDAwMzAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X1BLMkIyR19RQU1fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfUEsyQjJHX1FBTV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9QSzJCMkdfUUFNX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMGMwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X1BLMkIyR19RQU1fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMGMwMDAwMCkgPj4gMjIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfUEsyQjJHX1FBTV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjIpICYgMHgwMGMwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9QSzJCMkdfUFNLX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X1BLMkIyR19QU0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfUEsyQjJHX1BTS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9QSzJCMkdfUFNLX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDMwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X1BLMkIyR19QU0tfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI0KSAmIDB4MDMwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfUEsyQjJHX0NDS19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9QSzJCMkdfQ0NLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X1BLMkIyR19DQ0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBjMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfUEsyQjJHX0NDS19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDBjMDAwMDAwKSA+PiAyNikKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9QSzJCMkdfQ0NLX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNikgJiAweDBjMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X1BLMUIyR19RQU1fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfUEsxQjJHX1FBTV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9QSzFCMkdfUUFNX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzMDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X1BLMUIyR19RQU1fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzMDAwMDAwMCkgPj4gMjgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfUEsxQjJHX1FBTV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjgpICYgMHgzMDAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9QSzFCMkdfUFNLX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X1BLMUIyR19QU0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjVfUEsxQjJHX1BTS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YzAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNV9QSzFCMkdfUFNLX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4YzAwMDAwMDApID4+IDMwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY1X1BLMUIyR19QU0tfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMwKSAmIDB4YzAwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgVFhSRjYgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1NAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfUEFMQ0xLR0FURTJHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9QQUxDTEtHQVRFMkdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X1BBTENMS0dBVEUyR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfUEFMQ0xLR0FURTJHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMSkgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9QQUxDTEtHQVRFMkdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDAxKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X1BBTEZMVUNUQ09VTlQyR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfUEFMRkxVQ1RDT1VOVDJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9QQUxGTFVDVENPVU5UMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDFmZQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X1BBTEZMVUNUQ09VTlQyR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAxZmUpID4+IDEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfUEFMRkxVQ1RDT1VOVDJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEpICYgMHgwMDAwMDFmZSkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9QQUxGTFVDVEdBSU4yR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X1BBTEZMVUNUR0FJTjJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfUEFMRkxVQ1RHQUlOMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA2MDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9QQUxGTFVDVEdBSU4yR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwNjAwKSA+PiA5KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X1BBTEZMVUNUR0FJTjJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA5KSAmIDB4MDAwMDA2MDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfUEFMTk9GTFVDVDJHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9QQUxOT0ZMVUNUMkdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X1BBTE5PRkxVQ1QyR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfUEFMTk9GTFVDVDJHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwODAwKSA+PiAxMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9QQUxOT0ZMVUNUMkdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMSkgJiAweDAwMDAwODAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X0dBSU5TVEVQMkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfR0FJTlNURVAyR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9HQUlOU1RFUDJHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNzAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X0dBSU5TVEVQMkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwNzAwMCkgPj4gMTIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfR0FJTlNURVAyR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTIpICYgMHgwMDAwNzAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9VU0VfR0FJTl9ERUxUQTJHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X1VTRV9HQUlOX0RFTFRBMkdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfVVNFX0dBSU5fREVMVEEyR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9VU0VfR0FJTl9ERUxUQTJHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDgwMDApID4+IDE1KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X1VTRV9HQUlOX0RFTFRBMkdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE1KSAmIDB4MDAwMDgwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfQ0FQRElWX0kyR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9DQVBESVZfSTJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X0NBUERJVl9JMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMGYwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfQ0FQRElWX0kyR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMGYwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9DQVBESVZfSTJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAwMGYwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X1BBRFJWR05fSU5ERVhfSTJHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfUEFEUlZHTl9JTkRFWF9JMkdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9QQURSVkdOX0lOREVYX0kyR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMGYwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X1BBRFJWR05fSU5ERVhfSTJHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMGYwMDAwMCkgPj4gMjApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfUEFEUlZHTl9JTkRFWF9JMkdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjApICYgMHgwMGYwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9WQ01PTkRFTEFZMkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X1ZDTU9OREVMQVkyR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfVkNNT05ERUxBWTJHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9WQ01PTkRFTEFZMkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDcwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X1ZDTU9OREVMQVkyR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI0KSAmIDB4MDcwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfQ0FQRElWMkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9DQVBESVYyR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X0NBUERJVjJHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDc4MDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfQ0FQRElWMkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDc4MDAwMDAwKSA+PiAyNykKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9DQVBESVYyR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNykgJiAweDc4MDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X0NBUERJVjJHT1ZSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfQ0FQRElWMkdPVlJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGNl9DQVBESVYyR09WUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY2X0NBUERJVjJHT1ZSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg4MDAwMDAwMCkgPj4gMzEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjZfQ0FQRElWMkdPVlJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMzEpICYgMHg4MDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBUWFJGNyAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY3X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjdfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGN19TUEFSRTdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY3X1NQQVJFN19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjdfU1BBUkU3X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGN19TUEFSRTdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAzKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY3X1NQQVJFN19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjdfUEFEUlZHTlRBQl80X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGN19QQURSVkdOVEFCXzRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY3X1BBRFJWR05UQUJfNF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGZjCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjdfUEFEUlZHTlRBQl80X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDBmYykgPj4gMikKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGN19QQURSVkdOVEFCXzRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMikgJiAweDAwMDAwMGZjKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY3X1BBRFJWR05UQUJfM19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjdfUEFEUlZHTlRBQl8zX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGN19QQURSVkdOVEFCXzNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwM2YwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY3X1BBRFJWR05UQUJfM19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDNmMDApID4+IDgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjdfUEFEUlZHTlRBQl8zX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwM2YwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGN19QQURSVkdOVEFCXzJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY3X1BBRFJWR05UQUJfMl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjdfUEFEUlZHTlRBQl8yX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwZmMwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGN19QQURSVkdOVEFCXzJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwZmMwMDApID4+IDE0KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY3X1BBRFJWR05UQUJfMl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE0KSAmIDB4MDAwZmMwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjdfUEFEUlZHTlRBQl8xX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGN19QQURSVkdOVEFCXzFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY3X1BBRFJWR05UQUJfMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzZjAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjdfUEFEUlZHTlRBQl8xX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAzZjAwMDAwKSA+PiAyMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGN19QQURSVkdOVEFCXzFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMCkgJiAweDAzZjAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY3X1BBRFJWR05UQUJfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjdfUEFEUlZHTlRBQl8wX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGN19QQURSVkdOVEFCXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmYzAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY3X1BBRFJWR05UQUJfMF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhmYzAwMDAwMCkgPj4gMjYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjdfUEFEUlZHTlRBQl8wX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjYpICYgMHhmYzAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBUWFJGOCAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY4X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDVjCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjhfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNWMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOF9TUEFSRThfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY4X1NQQVJFOF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjhfU1BBUkU4X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOF9TUEFSRThfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAzKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY4X1NQQVJFOF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjhfUEFEUlZHTlRBQl85X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOF9QQURSVkdOVEFCXzlfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY4X1BBRFJWR05UQUJfOV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGZjCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjhfUEFEUlZHTlRBQl85X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDBmYykgPj4gMikKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOF9QQURSVkdOVEFCXzlfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMikgJiAweDAwMDAwMGZjKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY4X1BBRFJWR05UQUJfOF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjhfUEFEUlZHTlRBQl84X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOF9QQURSVkdOVEFCXzhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwM2YwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY4X1BBRFJWR05UQUJfOF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDNmMDApID4+IDgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjhfUEFEUlZHTlRBQl84X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwM2YwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOF9QQURSVkdOVEFCXzdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY4X1BBRFJWR05UQUJfN19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjhfUEFEUlZHTlRBQl83X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwZmMwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOF9QQURSVkdOVEFCXzdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwZmMwMDApID4+IDE0KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY4X1BBRFJWR05UQUJfN19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE0KSAmIDB4MDAwZmMwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjhfUEFEUlZHTlRBQl82X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOF9QQURSVkdOVEFCXzZfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY4X1BBRFJWR05UQUJfNl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzZjAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjhfUEFEUlZHTlRBQl82X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAzZjAwMDAwKSA+PiAyMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOF9QQURSVkdOVEFCXzZfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMCkgJiAweDAzZjAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY4X1BBRFJWR05UQUJfNV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjhfUEFEUlZHTlRBQl81X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOF9QQURSVkdOVEFCXzVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmYzAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY4X1BBRFJWR05UQUJfNV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhmYzAwMDAwMCkgPj4gMjYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjhfUEFEUlZHTlRBQl81X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjYpICYgMHhmYzAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBUWFJGOSAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY5X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDYwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjlfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOV9TUEFSRTlfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY5X1NQQVJFOV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjlfU1BBUkU5X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOV9TUEFSRTlfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAzKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY5X1NQQVJFOV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjlfUEFEUlZHTlRBQl8xNF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOV9QQURSVkdOVEFCXzE0X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY5X1BBRFJWR05UQUJfMTRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGZjCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjlfUEFEUlZHTlRBQl8xNF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDBmYykgPj4gMikKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOV9QQURSVkdOVEFCXzE0X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMikgJiAweDAwMDAwMGZjKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY5X1BBRFJWR05UQUJfMTNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjlfUEFEUlZHTlRBQl8xM19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOV9QQURSVkdOVEFCXzEzX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwM2YwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY5X1BBRFJWR05UQUJfMTNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDNmMDApID4+IDgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjlfUEFEUlZHTlRBQl8xM19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwM2YwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOV9QQURSVkdOVEFCXzEyX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY5X1BBRFJWR05UQUJfMTJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjlfUEFEUlZHTlRBQl8xMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwZmMwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOV9QQURSVkdOVEFCXzEyX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwZmMwMDApID4+IDE0KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY5X1BBRFJWR05UQUJfMTJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE0KSAmIDB4MDAwZmMwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjlfUEFEUlZHTlRBQl8xMV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOV9QQURSVkdOVEFCXzExX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY5X1BBRFJWR05UQUJfMTFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzZjAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjlfUEFEUlZHTlRBQl8xMV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAzZjAwMDAwKSA+PiAyMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOV9QQURSVkdOVEFCXzExX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMCkgJiAweDAzZjAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY5X1BBRFJWR05UQUJfMTBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjlfUEFEUlZHTlRBQl8xMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGOV9QQURSVkdOVEFCXzEwX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmYzAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkY5X1BBRFJWR05UQUJfMTBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhmYzAwMDAwMCkgPj4gMjYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjlfUEFEUlZHTlRBQl8xMF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjYpICYgMHhmYzAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBUWFJGMTAgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2NAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEwX1NQQVJFMTBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTBfU1BBUkUxMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMF9TUEFSRTEwX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEwX1NQQVJFMTBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwNykgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTBfU1BBUkUxMF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDA3KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMF9QRE9VVDVHXzNDQUxUWF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEwX1BET1VUNUdfM0NBTFRYX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTBfUERPVVQ1R18zQ0FMVFhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMF9QRE9VVDVHXzNDQUxUWF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDgpID4+IDMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEwX1BET1VUNUdfM0NBTFRYX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMpICYgMHgwMDAwMDAwOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTBfRDNCNUdDQUxUWF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMF9EM0I1R0NBTFRYX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEwX0QzQjVHQ0FMVFhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTBfRDNCNUdDQUxUWF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDcwKSA+PiA0KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMF9EM0I1R0NBTFRYX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA0KSAmIDB4MDAwMDAwNzApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEwX0Q0QjVHQ0FMVFhfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTBfRDRCNUdDQUxUWF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMF9ENEI1R0NBTFRYX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzgwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEwX0Q0QjVHQ0FMVFhfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDM4MCkgPj4gNykKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTBfRDRCNUdDQUxUWF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNykgJiAweDAwMDAwMzgwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMF9QQURSVkdOMkdDQUxUWF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEwX1BBRFJWR04yR0NBTFRYX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTBfUEFEUlZHTjJHQ0FMVFhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxZmMwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMF9QQURSVkdOMkdDQUxUWF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAxZmMwMCkgPj4gMTApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEwX1BBRFJWR04yR0NBTFRYX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTApICYgMHgwMDAxZmMwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTBfREIyR0NBTFRYX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMF9EQjJHQ0FMVFhfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEwX0RCMkdDQUxUWF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwZTAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTBfREIyR0NBTFRYX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwZTAwMDApID4+IDE3KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMF9EQjJHQ0FMVFhfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE3KSAmIDB4MDAwZTAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEwX0NBTFRYU0hJRlRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTBfQ0FMVFhTSElGVF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMF9DQUxUWFNISUZUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEwX0NBTFRYU0hJRlRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMTAwMDAwKSA+PiAyMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTBfQ0FMVFhTSElGVF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMCkgJiAweDAwMTAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMF9DQUxUWFNISUZUT1ZSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEwX0NBTFRYU0hJRlRPVlJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTBfQ0FMVFhTSElGVE9WUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMF9DQUxUWFNISUZUT1ZSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDIwMDAwMCkgPj4gMjEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEwX0NBTFRYU0hJRlRPVlJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjEpICYgMHgwMDIwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTBfUEFEUlZHTjJHX1NNT1VUX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMF9QQURSVkdOMkdfU01PVVRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEwX1BBRFJWR04yR19TTU9VVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGZjMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTBfUEFEUlZHTjJHX1NNT1VUX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MGZjMDAwMDApID4+IDIyKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMF9QQURSVkdOX0lOREVYMkdfU01PVVRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEwX1BBRFJWR05fSU5ERVgyR19TTU9VVF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTBfUEFEUlZHTl9JTkRFWDJHX1NNT1VUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmMDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMF9QQURSVkdOX0lOREVYMkdfU01PVVRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhmMDAwMDAwMCkgPj4gMjgpCi0KLS8qIG1hY3JvcyBmb3IgVFhSRjExICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2OAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9TUEFSRTExX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1NQQVJFMTFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfU1BBUkUxMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9TUEFSRTExX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDMpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1NQQVJFMTFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwMykKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lSMjVNSVhESVY1R19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSVIyNU1JWERJVjVHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JUjI1TUlYRElWNUdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMWMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lSMjVNSVhESVY1R19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDFjKSA+PiAyKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSVIyNU1JWERJVjVHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyKSAmIDB4MDAwMDAwMWMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JUjI1UEEyR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lSMjVQQTJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSVIyNVBBMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGUwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JUjI1UEEyR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDBlMCkgPj4gNSkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lSMjVQQTJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNSkgJiAweDAwMDAwMGUwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSVIyNU1JWEJJQVMyR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JUjI1TUlYQklBUzJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lSMjVNSVhCSUFTMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDcwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSVIyNU1JWEJJQVMyR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDA3MDApID4+IDgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JUjI1TUlYQklBUzJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwMDcwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lSMjVNSVhESVYyR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSVIyNU1JWERJVjJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JUjI1TUlYRElWMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDM4MDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lSMjVNSVhESVYyR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDM4MDApID4+IDExKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSVIyNU1JWERJVjJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDExKSAmIDB4MDAwMDM4MDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JQ1NQQVJFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lDU1BBUkVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSUNTUEFSRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDFjMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JQ1NQQVJFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDFjMDAwKSA+PiAxNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lDU1BBUkVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNCkgJiAweDAwMDFjMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSUMyNVRFTVBTRU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JQzI1VEVNUFNFTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lDMjVURU1QU0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBlMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSUMyNVRFTVBTRU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDBlMDAwMCkgPj4gMTcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JQzI1VEVNUFNFTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTcpICYgMHgwMDBlMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lDMjVQQTVHMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSUMyNVBBNUcyX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JQzI1UEE1RzJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA3MDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lDMjVQQTVHMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDA3MDAwMDApID4+IDIwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSUMyNVBBNUcyX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIwKSAmIDB4MDA3MDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JQzI1UEE1RzFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lDMjVQQTVHMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSUMyNVBBNUcxX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzODAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JQzI1UEE1RzFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAzODAwMDAwKSA+PiAyMykKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lDMjVQQTVHMV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMykgJiAweDAzODAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSUMyNU1JWEJVRjVHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JQzI1TUlYQlVGNUdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lDMjVNSVhCVUY1R19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxYzAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSUMyNU1JWEJVRjVHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxYzAwMDAwMCkgPj4gMjYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JQzI1TUlYQlVGNUdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjYpICYgMHgxYzAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lDMjVQQTJHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSUMyNVBBMkdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjExX1BXRF9JQzI1UEEyR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZTAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTFfUFdEX0lDMjVQQTJHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZTAwMDAwMDApID4+IDI5KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMV9QV0RfSUMyNVBBMkdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI5KSAmIDB4ZTAwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgVFhSRjEyICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEyX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNmMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTJfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2YwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMl9TUEFSRTEyXzJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEyX1NQQVJFMTJfMl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTJfU1BBUkUxMl8yX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMl9TUEFSRTEyXzJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwZmYpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEyX1NQQVJFMTJfMV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTJfU1BBUkUxMl8xX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMl9TUEFSRTEyXzFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEyX1NQQVJFMTJfMV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDMwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTJfU1BBUkUxMl8xX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAwMzAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMl9BVEJTRUw1R19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEyX0FUQlNFTDVHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTJfQVRCU0VMNUdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwM2MwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMl9BVEJTRUw1R19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwM2MwMCkgPj4gMTApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEyX0FUQlNFTDVHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTApICYgMHgwMDAwM2MwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTJfQVRCU0VMMkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMl9BVEJTRUwyR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEyX0FUQlNFTDJHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMWMwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTJfQVRCU0VMMkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMWMwMDApID4+IDE0KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMl9BVEJTRUwyR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE0KSAmIDB4MDAwMWMwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEyX1BXRF9JUlNQQVJFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTJfUFdEX0lSU1BBUkVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMl9QV0RfSVJTUEFSRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMGUwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEyX1BXRF9JUlNQQVJFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMGUwMDAwKSA+PiAxNykKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTJfUFdEX0lSU1BBUkVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNykgJiAweDAwMGUwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMl9QV0RfSVIyNVRFTVBTRU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEyX1BXRF9JUjI1VEVNUFNFTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTJfUFdEX0lSMjVURU1QU0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDcwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMl9QV0RfSVIyNVRFTVBTRU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDcwMDAwMCkgPj4gMjApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEyX1BXRF9JUjI1VEVNUFNFTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjApICYgMHgwMDcwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTJfUFdEX0lSMjVQQTVHMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMl9QV0RfSVIyNVBBNUcyX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEyX1BXRF9JUjI1UEE1RzJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDM4MDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTJfUFdEX0lSMjVQQTVHMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDM4MDAwMDApID4+IDIzKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMl9QV0RfSVIyNVBBNUcyX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIzKSAmIDB4MDM4MDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEyX1BXRF9JUjI1UEE1RzFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTJfUFdEX0lSMjVQQTVHMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMl9QV0RfSVIyNVBBNUcxX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFjMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEyX1BXRF9JUjI1UEE1RzFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDFjMDAwMDAwKSA+PiAyNikKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTJfUFdEX0lSMjVQQTVHMV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNikgJiAweDFjMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMl9QV0RfSVIyNU1JWEJJQVM1R19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEyX1BXRF9JUjI1TUlYQklBUzVHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWFJGMTJfUFdEX0lSMjVNSVhCSUFTNUdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhlMDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYUkYxMl9QV0RfSVIyNU1JWEJJQVM1R19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhlMDAwMDAwMCkgPj4gMjkpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhSRjEyX1BXRF9JUjI1TUlYQklBUzVHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjkpICYgMHhlMDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBTWU5USDEgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1NFTF9WQ01PTkFCVVNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfU0VMX1ZDTU9OQUJVU19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9TRUxfVkNNT05BQlVTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1NFTF9WQ01PTkFCVVNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwNykgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfU0VMX1ZDTU9OQUJVU19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDA3KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9TRUxfVkNPQUJVU19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1NFTF9WQ09BQlVTX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfU0VMX1ZDT0FCVVNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9TRUxfVkNPQUJVU19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMzgpID4+IDMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1NFTF9WQ09BQlVTX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMpICYgMHgwMDAwMDAzOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfTU9OSVRPUl9TWU5USExPQ0tWQ09LX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9NT05JVE9SX1NZTlRITE9DS1ZDT0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX01PTklUT1JfU1lOVEhMT0NLVkNPS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfTU9OSVRPUl9TWU5USExPQ0tWQ09LX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDQwKSA+PiA2KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9NT05JVE9SX1NZTlRITE9DS1ZDT0tfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA2KSAmIDB4MDAwMDAwNDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX01PTklUT1JfVkMyTE9XX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfTU9OSVRPUl9WQzJMT1dfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9NT05JVE9SX1ZDMkxPV19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX01PTklUT1JfVkMyTE9XX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDA4MCkgPj4gNykKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfTU9OSVRPUl9WQzJMT1dfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNykgJiAweDAwMDAwMDgwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9NT05JVE9SX1ZDMkhJR0hfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX01PTklUT1JfVkMySElHSF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfTU9OSVRPUl9WQzJISUdIX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9NT05JVE9SX1ZDMkhJR0hfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAxMDApID4+IDgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX01PTklUT1JfVkMySElHSF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwMDEwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfTU9OSVRPUl9GQl9ESVYyX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9NT05JVE9SX0ZCX0RJVjJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX01PTklUT1JfRkJfRElWMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfTU9OSVRPUl9GQl9ESVYyX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMjAwKSA+PiA5KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9NT05JVE9SX0ZCX0RJVjJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA5KSAmIDB4MDAwMDAyMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX01PTklUT1JfUkVGX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfTU9OSVRPUl9SRUZfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9NT05JVE9SX1JFRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX01PTklUT1JfUkVGX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwNDAwKSA+PiAxMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfTU9OSVRPUl9SRUZfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMCkgJiAweDAwMDAwNDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9NT05JVE9SX0ZCX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX01PTklUT1JfRkJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfTU9OSVRPUl9GQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9NT05JVE9SX0ZCX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDgwMCkgPj4gMTEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX01PTklUT1JfRkJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTEpICYgMHgwMDAwMDgwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfU0VWRU5CSVRWQ09DQVBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9TRVZFTkJJVFZDT0NBUF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1NFVkVOQklUVkNPQ0FQX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfU0VWRU5CSVRWQ09DQVBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDEwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9TRVZFTkJJVFZDT0NBUF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEyKSAmIDB4MDAwMDEwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXVVBfUERfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdVUF9QRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV1VQX1BEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBlMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXVVBfUERfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDBlMDAwKSA+PiAxMykKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdVUF9QRF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMykgJiAweDAwMDBlMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfVkNPQlVGX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9WQ09CVUZfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX1ZDT0JVRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfVkNPQlVGX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAxMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9WQ09CVUZfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMDAxMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfVkNPQlVGR0FJTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9WQ09CVUZHQUlOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1ZDT0JVRkdBSU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNjAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfVkNPQlVGR0FJTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwNjAwMDApID4+IDE3KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9WQ09CVUZHQUlOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE3KSAmIDB4MDAwNjAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1ZDT1JFR0xFVkVMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfVkNPUkVHTEVWRUxfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9WQ09SRUdMRVZFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTgwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1ZDT1JFR0xFVkVMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMTgwMDAwKSA+PiAxOSkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfVkNPUkVHTEVWRUxfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOSkgJiAweDAwMTgwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9WQ09SRUdCWVBBU1NfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1ZDT1JFR0JZUEFTU19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfVkNPUkVHQllQQVNTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9WQ09SRUdCWVBBU1NfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDIwMDAwMCkgPj4gMjEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1ZDT1JFR0JZUEFTU19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjEpICYgMHgwMDIwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdVUF9MT1JFRl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV1VQX0xPUkVGX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXVVBfTE9SRUZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdVUF9MT1JFRl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDA0MDAwMDApID4+IDIyKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV1VQX0xPUkVGX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIyKSAmIDB4MDA0MDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9MT01JWF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX0xPTUlYX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfTE9NSVhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9MT01JWF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwODAwMDAwKSA+PiAyMykKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX0xPTUlYX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMykgJiAweDAwODAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfTE9ESVZfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9MT0RJVl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX0xPRElWX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfTE9ESVZfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMTAwMDAwMCkgPj4gMjQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9MT0RJVl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjQpICYgMHgwMTAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX0xPQlVGNUdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfTE9CVUY1R19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9MT0JVRjVHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX0xPQlVGNUdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDIwMDAwMDApID4+IDI1KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfTE9CVUY1R19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI1KSAmIDB4MDIwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9MT0JVRjJHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX0xPQlVGMkdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfTE9CVUYyR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9MT0JVRjJHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDA0MDAwMDAwKSA+PiAyNikKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX0xPQlVGMkdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNikgJiAweDA0MDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfUFJFU0NfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9QUkVTQ19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX1BSRVNDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfUFJFU0NfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwODAwMDAwMCkgPj4gMjcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9QUkVTQ19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjcpICYgMHgwODAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX1ZDT19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfVkNPX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9WQ09fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX1ZDT19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MTAwMDAwMDApID4+IDI4KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfVkNPX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI4KSAmIDB4MTAwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9WQ01PTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX1ZDTU9OX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfVkNNT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9WQ01PTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDIwMDAwMDAwKSA+PiAyOSkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX1ZDTU9OX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyOSkgJiAweDIwMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfQ1BfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9DUF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX0NQX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfQ1BfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg0MDAwMDAwMCkgPj4gMzApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9DUF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMzApICYgMHg0MDAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX0JJQVNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfQklBU19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxX1BXRF9CSUFTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDFfUFdEX0JJQVNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ODAwMDAwMDApID4+IDMxKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMV9QV0RfQklBU19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMxKSAmIDB4ODAwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgU1lOVEgyICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODQKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4NAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9DQVBSQU5HRTNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX0NBUFJBTkdFM19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfQ0FQUkFOR0UzX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwZgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9DQVBSQU5HRTNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMGYpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX0NBUFJBTkdFM19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwZikKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfQ0FQUkFOR0UyX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9DQVBSQU5HRTJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX0NBUFJBTkdFMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZjAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfQ0FQUkFOR0UyX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMGYwKSA+PiA0KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9DQVBSQU5HRTJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA0KSAmIDB4MDAwMDAwZjApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX0NBUFJBTkdFMV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfQ0FQUkFOR0UxX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9DQVBSQU5HRTFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwZjAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX0NBUFJBTkdFMV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMGYwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfQ0FQUkFOR0UxX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAwZjAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9MT09QTEVBS0NVUl9JTlROX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX0xPT1BMRUFLQ1VSX0lOVE5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfTE9PUExFQUtDVVJfSU5UTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwZjAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9MT09QTEVBS0NVUl9JTlROX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwZjAwMCkgPj4gMTIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX0xPT1BMRUFLQ1VSX0lOVE5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTIpICYgMHgwMDAwZjAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfQ1BMT1dMS19JTlROX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9DUExPV0xLX0lOVE5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX0NQTE9XTEtfSU5UTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfQ1BMT1dMS19JTlROX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMTAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9DUExPV0xLX0lOVE5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDAwMTAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX0NQU1RFRVJJTkdfRU5fSU5UTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfQ1BTVEVFUklOR19FTl9JTlROX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9DUFNURUVSSU5HX0VOX0lOVE5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX0NQU1RFRVJJTkdfRU5fSU5UTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDIwMDAwKSA+PiAxNykKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfQ1BTVEVFUklOR19FTl9JTlROX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNykgJiAweDAwMDIwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9DUEJJQVNfSU5UTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX0NQQklBU19JTlROX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfQ1BCSUFTX0lOVE5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBjMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9DUEJJQVNfSU5UTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDBjMDAwMCkgPj4gMTgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX0NQQklBU19JTlROX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTgpICYgMHgwMDBjMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfVkNfTE9XX1JFRl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9WQ19MT1dfUkVGX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX1ZDX0xPV19SRUZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA3MDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfVkNfTE9XX1JFRl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDA3MDAwMDApID4+IDIwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9WQ19MT1dfUkVGX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIwKSAmIDB4MDA3MDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX1ZDX01JRF9SRUZfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfVkNfTUlEX1JFRl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9WQ19NSURfUkVGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzODAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX1ZDX01JRF9SRUZfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAzODAwMDAwKSA+PiAyMykKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfVkNfTUlEX1JFRl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMykgJiAweDAzODAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9WQ19ISV9SRUZfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX1ZDX0hJX1JFRl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfVkNfSElfUkVGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxYzAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9WQ19ISV9SRUZfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxYzAwMDAwMCkgPj4gMjYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX1ZDX0hJX1JFRl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjYpICYgMHgxYzAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfVkNfQ0FMX1JFRl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9WQ19DQUxfUkVGX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgyX1ZDX0NBTF9SRUZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZTAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDJfVkNfQ0FMX1JFRl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZTAwMDAwMDApID4+IDI5KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMl9WQ19DQUxfUkVGX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI5KSAmIDB4ZTAwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgU1lOVEgzICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgzX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODgKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4OAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIM19XQUlUX1ZDX0NIRUNLX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgzX1dBSVRfVkNfQ0hFQ0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDNfV0FJVF9WQ19DSEVDS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzZgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIM19XQUlUX1ZDX0NIRUNLX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwM2YpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgzX1dBSVRfVkNfQ0hFQ0tfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAzZikKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDNfV0FJVF9DQUxfTElOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIM19XQUlUX0NBTF9MSU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgzX1dBSVRfQ0FMX0xJTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBmYzAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDNfV0FJVF9DQUxfTElOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwZmMwKSA+PiA2KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIM19XQUlUX0NBTF9MSU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA2KSAmIDB4MDAwMDBmYzApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgzX1dBSVRfQ0FMX0JJTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDNfV0FJVF9DQUxfQklOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIM19XQUlUX0NBTF9CSU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDNmMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgzX1dBSVRfQ0FMX0JJTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDNmMDAwKSA+PiAxMikKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDNfV0FJVF9DQUxfQklOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMikgJiAweDAwMDNmMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIM19XQUlUX1BXUlVQX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgzX1dBSVRfUFdSVVBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDNfV0FJVF9QV1JVUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMGZjMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIM19XQUlUX1BXUlVQX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMGZjMDAwMCkgPj4gMTgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgzX1dBSVRfUFdSVVBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTgpICYgMHgwMGZjMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDNfV0FJVF9TSE9SVFJfUFdSVVBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIM19XQUlUX1NIT1JUUl9QV1JVUF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgzX1dBSVRfU0hPUlRSX1BXUlVQX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M2YwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDNfV0FJVF9TSE9SVFJfUFdSVVBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4M2YwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIM19XQUlUX1NIT1JUUl9QV1JVUF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI0KSAmIDB4M2YwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgzX1NFTF9DTEtfRElWMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDNfU0VMX0NMS19ESVYyX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIM19TRUxfQ0xLX0RJVjJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgzX1NFTF9DTEtfRElWMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDQwMDAwMDAwKSA+PiAzMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDNfU0VMX0NMS19ESVYyX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMCkgJiAweDQwMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIM19ESVNfQ0xLX1hUQUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgzX0RJU19DTEtfWFRBTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDNfRElTX0NMS19YVEFMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIM19ESVNfQ0xLX1hUQUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg4MDAwMDAwMCkgPj4gMzEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgzX0RJU19DTEtfWFRBTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMzEpICYgMHg4MDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBTWU5USDQgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4YwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDhjCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1BTX1NJTkdMRV9QVUxTRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfUFNfU0lOR0xFX1BVTFNFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9QU19TSU5HTEVfUFVMU0VfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1BTX1NJTkdMRV9QVUxTRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMSkgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfUFNfU0lOR0xFX1BVTFNFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDAxKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9MT05HU0hJRlRTRUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0xPTkdTSElGVFNFTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfTE9OR1NISUZUU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9MT05HU0hJRlRTRUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDIpID4+IDEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0xPTkdTSElGVFNFTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEpICYgMHgwMDAwMDAwMikKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfTE9CVUY1R1RVTkVfT1ZSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9MT0JVRjVHVFVORV9PVlJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0xPQlVGNUdUVU5FX09WUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGMKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfTE9CVUY1R1RVTkVfT1ZSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDBjKSA+PiAyKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9MT0JVRjVHVFVORV9PVlJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyKSAmIDB4MDAwMDAwMGMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0ZPUkNFX0xPQlVGNUdUVU5FX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfRk9SQ0VfTE9CVUY1R1RVTkVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9GT1JDRV9MT0JVRjVHVFVORV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0ZPUkNFX0xPQlVGNUdUVU5FX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAxMCkgPj4gNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfRk9SQ0VfTE9CVUY1R1RVTkVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNCkgJiAweDAwMDAwMDEwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9QU0NPVU5UX0ZCU0VMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1BTQ09VTlRfRkJTRUxfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfUFNDT1VOVF9GQlNFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9QU0NPVU5UX0ZCU0VMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMjApID4+IDUpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1BTQ09VTlRfRkJTRUxfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDUpICYgMHgwMDAwMDAyMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfU0RNX0RJVEhFUjFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9TRE1fRElUSEVSMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1NETV9ESVRIRVIxX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYzAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfU0RNX0RJVEhFUjFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMGMwKSA+PiA2KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9TRE1fRElUSEVSMV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA2KSAmIDB4MDAwMDAwYzApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1NETV9NT0RFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfU0RNX01PREVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9TRE1fTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1NETV9NT0RFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDEwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfU0RNX01PREVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAwMTAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9TRE1fRElTQUJMRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1NETV9ESVNBQkxFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfU0RNX0RJU0FCTEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9TRE1fRElTQUJMRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAyMDApID4+IDkpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1NETV9ESVNBQkxFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDkpICYgMHgwMDAwMDIwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfUkVTRVRfUFJFU0NfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9SRVNFVF9QUkVTQ19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1JFU0VUX1BSRVNDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfUkVTRVRfUFJFU0NfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDA0MDApID4+IDEwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9SRVNFVF9QUkVTQ19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEwKSAmIDB4MDAwMDA0MDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1BSRVNDU0VMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfUFJFU0NTRUxfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9QUkVTQ1NFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxODAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1BSRVNDU0VMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAxODAwKSA+PiAxMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfUFJFU0NTRUxfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMSkgJiAweDAwMDAxODAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9QRkRfRElTQUJMRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1BGRF9ESVNBQkxFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfUEZEX0RJU0FCTEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9QRkRfRElTQUJMRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMjAwMCkgPj4gMTMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1BGRF9ESVNBQkxFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTMpICYgMHgwMDAwMjAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfUEZEREVMQVlfRlJBQ05fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9QRkRERUxBWV9GUkFDTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1BGRERFTEFZX0ZSQUNOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfUEZEREVMQVlfRlJBQ05fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDQwMDApID4+IDE0KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9QRkRERUxBWV9GUkFDTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE0KSAmIDB4MDAwMDQwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0ZPUkNFX0xPX09OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfRk9SQ0VfTE9fT05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9GT1JDRV9MT19PTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0ZPUkNFX0xPX09OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDA4MDAwKSA+PiAxNSkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfRk9SQ0VfTE9fT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNSkgJiAweDAwMDA4MDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9DTEtYVEFMX0VER0VfU0VMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0NMS1hUQUxfRURHRV9TRUxfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfQ0xLWFRBTF9FREdFX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9DTEtYVEFMX0VER0VfU0VMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAxMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0NMS1hUQUxfRURHRV9TRUxfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMDAxMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfVkNPQ0FQUFVMTFVQX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9WQ09DQVBQVUxMVVBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1ZDT0NBUFBVTExVUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfVkNPQ0FQUFVMTFVQX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMjAwMDApID4+IDE3KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9WQ09DQVBQVUxMVVBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE3KSAmIDB4MDAwMjAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1ZDT0NBUF9PVlJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfVkNPQ0FQX09WUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9WQ09DQVBfT1ZSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzZmMwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1ZDT0NBUF9PVlJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAzZmMwMDAwKSA+PiAxOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfVkNPQ0FQX09WUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOCkgJiAweDAzZmMwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9GT1JDRV9WQ09DQVBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0ZPUkNFX1ZDT0NBUF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfRk9SQ0VfVkNPQ0FQX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9GT1JDRV9WQ09DQVBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwNDAwMDAwMCkgPj4gMjYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0ZPUkNFX1ZDT0NBUF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjYpICYgMHgwNDAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfRk9SQ0VfUElOVkNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9GT1JDRV9QSU5WQ19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0ZPUkNFX1BJTlZDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfRk9SQ0VfUElOVkNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDgwMDAwMDApID4+IDI3KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9GT1JDRV9QSU5WQ19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI3KSAmIDB4MDgwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1NIT1JUUl9VTlRJTF9MT0NLRURfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfU0hPUlRSX1VOVElMX0xPQ0tFRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9TSE9SVFJfVU5USUxfTE9DS0VEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X1NIT1JUUl9VTlRJTF9MT0NLRURfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEwMDAwMDAwKSA+PiAyOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfU0hPUlRSX1VOVElMX0xPQ0tFRF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyOCkgJiAweDEwMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9BTFdBWVNfU0hPUlRSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0FMV0FZU19TSE9SVFJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfQUxXQVlTX1NIT1JUUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9BTFdBWVNfU0hPUlRSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgyMDAwMDAwMCkgPj4gMjkpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0FMV0FZU19TSE9SVFJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjkpICYgMHgyMDAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfRElTX0xPU1RWQ19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9ESVNfTE9TVFZDX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0RJU19MT1NUVkNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfRElTX0xPU1RWQ19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NDAwMDAwMDApID4+IDMwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9ESVNfTE9TVFZDX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMwKSAmIDB4NDAwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0RJU19MSU5fQ0FQU0VBUkNIX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfRElTX0xJTl9DQVBTRUFSQ0hfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINF9ESVNfTElOX0NBUFNFQVJDSF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg0X0RJU19MSU5fQ0FQU0VBUkNIX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDgwMDAwMDAwKSA+PiAzMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDRfRElTX0xJTl9DQVBTRUFSQ0hfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMSkgJiAweDgwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIFNZTlRINSAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDkwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwOTAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfVkNPQklBU19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9WQ09CSUFTX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1ZDT0JJQVNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfVkNPQklBU19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAzKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9WQ09CSUFTX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSUNMT0JVRjVHNTBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JQ0xPQlVGNUc1MF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lDTE9CVUY1RzUwX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFjCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSUNMT0JVRjVHNTBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAxYykgPj4gMikKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JQ0xPQlVGNUc1MF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMikgJiAweDAwMDAwMDFjKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lDTE9CVUYyRzUwX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSUNMT0JVRjJHNTBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JQ0xPQlVGMkc1MF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBlMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lDTE9CVUYyRzUwX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwZTApID4+IDUpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSUNMT0JVRjJHNTBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDUpICYgMHgwMDAwMDBlMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JQ1ZDTzI1X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lDVkNPMjVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSUNWQ08yNV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3MDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JQ1ZDTzI1X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwNzAwKSA+PiA4KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lDVkNPMjVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDA3MDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSUNWQ09SRUcyNV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JQ1ZDT1JFRzI1X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lDVkNPUkVHMjVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzODAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSUNWQ09SRUcyNV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAzODAwKSA+PiAxMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JQ1ZDT1JFRzI1X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMSkgJiAweDAwMDAzODAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lSVkNPUkVHNTBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSVJWQ09SRUc1MF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JUlZDT1JFRzUwX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lSVkNPUkVHNTBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwNDAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSVJWQ09SRUc1MF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwMDAwNDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JQ0xPTUlYX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lDTE9NSVhfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSUNMT01JWF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzgwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JQ0xPTUlYX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMzgwMDApID4+IDE1KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lDTE9NSVhfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE1KSAmIDB4MDAwMzgwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSUNMT0RJVjUwX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JQ0xPRElWNTBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lDTE9ESVY1MF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMWMwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSUNMT0RJVjUwX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMWMwMDAwKSA+PiAxOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JQ0xPRElWNTBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOCkgJiAweDAwMWMwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lDUFJFU0M1MF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSUNQUkVTQzUwX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JQ1BSRVNDNTBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMGUwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lDUFJFU0M1MF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMGUwMDAwMCkgPj4gMjEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSUNQUkVTQzUwX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjEpICYgMHgwMGUwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JUlZDTU9OMjVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lSVkNNT04yNV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSVJWQ01PTjI1X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JUlZDTU9OMjVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDcwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lSVkNNT04yNV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI0KSAmIDB4MDcwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSVJQRkRDUF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JUlBGRENQX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9QV0RCX0lSUEZEQ1BfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDM4MDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1BXREJfSVJQRkRDUF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDM4MDAwMDAwKSA+PiAyNykKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfUFdEQl9JUlBGRENQX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNykgJiAweDM4MDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9TRE1fRElUSEVSMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1NETV9ESVRIRVIyX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDVfU0RNX0RJVEhFUjJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjMDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINV9TRE1fRElUSEVSMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhjMDAwMDAwMCkgPj4gMzApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg1X1NETV9ESVRIRVIyX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMzApICYgMHhjMDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBTWU5USDYgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA5NAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDk0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X0xPQlVGNUdUVU5FX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfTE9CVUY1R1RVTkVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9MT0JVRjVHVFVORV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X0xPQlVGNUdUVU5FX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMykgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfTE9PUF9JUF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9MT09QX0lQX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X0xPT1BfSVBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxZmMKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfTE9PUF9JUF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMWZjKSA+PiAyKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9WQzJMT1dfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X1ZDMkxPV19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfVkMyTE9XX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9WQzJMT1dfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAyMDApID4+IDkpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X1ZDMkhJR0hfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfVkMySElHSF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9WQzJISUdIX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X1ZDMkhJR0hfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwNDAwKSA+PiAxMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfUkVTRVRfU0RNX0JfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9SRVNFVF9TRE1fQl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X1JFU0VUX1NETV9CX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfUkVTRVRfU0RNX0JfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDA4MDApID4+IDExKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9SRVNFVF9QU0NPVU5URVJTX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X1JFU0VUX1BTQ09VTlRFUlNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfUkVTRVRfUFNDT1VOVEVSU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9SRVNFVF9QU0NPVU5URVJTX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMTAwMCkgPj4gMTIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X1JFU0VUX1BGRF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfUkVTRVRfUEZEX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9SRVNFVF9QRkRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X1JFU0VUX1BGRF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAyMDAwKSA+PiAxMykKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfUkVTRVRfUkZEX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9SRVNFVF9SRkRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X1JFU0VUX1JGRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfUkVTRVRfUkZEX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDQwMDApID4+IDE0KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9TSE9SVF9SX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X1NIT1JUX1JfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfU0hPUlRfUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9TSE9SVF9SX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwODAwMCkgPj4gMTUpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X1ZDT19DQVBfU1RfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfVkNPX0NBUF9TVF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9WQ09fQ0FQX1NUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwZmYwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X1ZDT19DQVBfU1RfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwZmYwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfUElOX1ZDX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9QSU5fVkNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X1BJTl9WQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfUElOX1ZDX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDEwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9TWU5USF9MT0NLX1ZDX09LX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X1NZTlRIX0xPQ0tfVkNfT0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfU1lOVEhfTE9DS19WQ19PS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9TWU5USF9MT0NLX1ZDX09LX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMjAwMDAwMCkgPj4gMjUpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X0NBUF9TRUFSQ0hfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfQ0FQX1NFQVJDSF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9DQVBfU0VBUkNIX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X0NBUF9TRUFSQ0hfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDA0MDAwMDAwKSA+PiAyNikKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfU1lOVEhfU01fU1RBVEVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9TWU5USF9TTV9TVEFURV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X1NZTlRIX1NNX1NUQVRFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzgwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfU1lOVEhfU01fU1RBVEVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NzgwMDAwMDApID4+IDI3KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9TWU5USF9PTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg2X1NZTlRIX09OX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDZfU1lOVEhfT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRINl9TWU5USF9PTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg4MDAwMDAwMCkgPj4gMzEpCi0KLS8qIG1hY3JvcyBmb3IgU1lOVEg3ICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg3X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwOTgKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDdfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA5OAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIN19PVlJDSEFOREVDT0RFUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg3X09WUkNIQU5ERUNPREVSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDdfT1ZSQ0hBTkRFQ09ERVJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIN19PVlJDSEFOREVDT0RFUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDEpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg3X09WUkNIQU5ERUNPREVSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDdfRk9SQ0VfRlJBQ0xTQl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIN19GT1JDRV9GUkFDTFNCX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg3X0ZPUkNFX0ZSQUNMU0JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDdfRk9SQ0VfRlJBQ0xTQl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAyKSA+PiAxKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIN19GT1JDRV9GUkFDTFNCX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxKSAmIDB4MDAwMDAwMDIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg3X0NIQU5GUkFDX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDdfQ0hBTkZSQUNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIN19DSEFORlJBQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDdmZmZjCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg3X0NIQU5GUkFDX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDA3ZmZmYykgPj4gMikKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDdfQ0hBTkZSQUNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMikgJiAweDAwMDdmZmZjKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIN19DSEFOU0VMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg3X0NIQU5TRUxfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDdfQ0hBTlNFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwZmY4MDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIN19DSEFOU0VMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwZmY4MDAwMCkgPj4gMTkpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg3X0NIQU5TRUxfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTkpICYgMHgwZmY4MDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDdfQU1PREVSRUZTRUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIN19BTU9ERVJFRlNFTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg3X0FNT0RFUkVGU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDdfQU1PREVSRUZTRUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MzAwMDAwMDApID4+IDI4KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIN19BTU9ERVJFRlNFTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI4KSAmIDB4MzAwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg3X0ZSQUNNT0RFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDdfRlJBQ01PREVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIN19GUkFDTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg3X0ZSQUNNT0RFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDQwMDAwMDAwKSA+PiAzMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDdfRlJBQ01PREVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMCkgJiAweDQwMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIN19MT0FEU1lOVEhDSEFOTkVMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg3X0xPQURTWU5USENIQU5ORUxfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDdfTE9BRFNZTlRIQ0hBTk5FTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIN19MT0FEU1lOVEhDSEFOTkVMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg4MDAwMDAwMCkgPj4gMzEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg3X0xPQURTWU5USENIQU5ORUxfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMzEpICYgMHg4MDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBTWU5USDggKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDhfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA5YwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDljCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg4X0NQU1RFRVJJTkdfRU5fRlJBQ05fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDhfQ1BTVEVFUklOR19FTl9GUkFDTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOF9DUFNURUVSSU5HX0VOX0ZSQUNOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg4X0NQU1RFRVJJTkdfRU5fRlJBQ05fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMSkgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDhfQ1BTVEVFUklOR19FTl9GUkFDTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDAxKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOF9MT09QX0lDUEJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg4X0xPT1BfSUNQQl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDhfTE9PUF9JQ1BCX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOF9MT09QX0lDUEJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwZmUpID4+IDEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg4X0xPT1BfSUNQQl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEpICYgMHgwMDAwMDBmZSkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDhfTE9PUF9DU0JfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOF9MT09QX0NTQl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg4X0xPT1BfQ1NCX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBmMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDhfTE9PUF9DU0JfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwZjAwKSA+PiA4KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOF9MT09QX0NTQl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDBmMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg4X0xPT1BfUlNCX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDhfTE9PUF9SU0JfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOF9MT09QX1JTQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDFmMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg4X0xPT1BfUlNCX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDFmMDAwKSA+PiAxMikKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDhfTE9PUF9SU0JfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMikgJiAweDAwMDFmMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOF9MT09QX0NQQl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg4X0xPT1BfQ1BCX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDhfTE9PUF9DUEJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDNlMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOF9MT09QX0NQQl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDNlMDAwMCkgPj4gMTcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg4X0xPT1BfQ1BCX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTcpICYgMHgwMDNlMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDhfTE9PUF8zUkRfT1JERVJfUkJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOF9MT09QXzNSRF9PUkRFUl9SQl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg4X0xPT1BfM1JEX09SREVSX1JCX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDdjMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDhfTE9PUF8zUkRfT1JERVJfUkJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDdjMDAwMDApID4+IDIyKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOF9MT09QXzNSRF9PUkRFUl9SQl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIyKSAmIDB4MDdjMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg4X1JFRkRJVkJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDhfUkVGRElWQl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOF9SRUZESVZCX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGY4MDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg4X1JFRkRJVkJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGY4MDAwMDAwKSA+PiAyNykKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDhfUkVGRElWQl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNykgJiAweGY4MDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIFNZTlRIOSAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGEwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg5X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYTAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDlfUEZEREVMQVlfSU5UTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOV9QRkRERUxBWV9JTlROX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg5X1BGRERFTEFZX0lOVE5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDlfUEZEREVMQVlfSU5UTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAxKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOV9QRkRERUxBWV9JTlROX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg5X1NMT1BFX0lDUEEwX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDlfU0xPUEVfSUNQQTBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOV9TTE9QRV9JQ1BBMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBlCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg5X1NMT1BFX0lDUEEwX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwZSkgPj4gMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDlfU0xPUEVfSUNQQTBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMSkgJiAweDAwMDAwMDBlKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOV9MT09QX0lDUEEwX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg5X0xPT1BfSUNQQTBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDlfTE9PUF9JQ1BBMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOV9MT09QX0lDUEEwX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwZjApID4+IDQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg5X0xPT1BfSUNQQTBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDQpICYgMHgwMDAwMDBmMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDlfTE9PUF9DU0EwX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOV9MT09QX0NTQTBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg5X0xPT1BfQ1NBMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBmMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDlfTE9PUF9DU0EwX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwZjAwKSA+PiA4KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOV9MT09QX0NTQTBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDBmMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg5X0xPT1BfUlNBMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDlfTE9PUF9SU0EwX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOV9MT09QX1JTQTBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDFmMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg5X0xPT1BfUlNBMF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDFmMDAwKSA+PiAxMikKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDlfTE9PUF9SU0EwX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMikgJiAweDAwMDFmMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOV9MT09QX0NQQTBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg5X0xPT1BfQ1BBMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDlfTE9PUF9DUEEwX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDNlMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOV9MT09QX0NQQTBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDNlMDAwMCkgPj4gMTcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg5X0xPT1BfQ1BBMF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTcpICYgMHgwMDNlMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDlfTE9PUF8zUkRfT1JERVJfUkFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOV9MT09QXzNSRF9PUkRFUl9SQV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg5X0xPT1BfM1JEX09SREVSX1JBX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDdjMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDlfTE9PUF8zUkRfT1JERVJfUkFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDdjMDAwMDApID4+IDIyKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOV9MT09QXzNSRF9PUkRFUl9SQV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIyKSAmIDB4MDdjMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg5X1JFRkRJVkFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDlfUkVGRElWQV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIOV9SRUZESVZBX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGY4MDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEg5X1JFRkRJVkFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGY4MDAwMDAwKSA+PiAyNykKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDlfUkVGRElWQV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNykgJiAweGY4MDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIFNZTlRIMTAgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBhNAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMF9TUEFSRTEwQV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX1NQQVJFMTBBX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfU1BBUkUxMEFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMF9TUEFSRTEwQV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMykgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX1NQQVJFMTBBX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDAzKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfUFdEQl9JQ0xPQklBUzUwX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMF9QV0RCX0lDTE9CSUFTNTBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX1BXREJfSUNMT0JJQVM1MF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxYwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfUFdEQl9JQ0xPQklBUzUwX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMWMpID4+IDIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMF9QV0RCX0lDTE9CSUFTNTBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIpICYgMHgwMDAwMDAxYykKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX1BXREJfSVJTUEFSRTI1X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfUFdEQl9JUlNQQVJFMjVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMF9QV0RCX0lSU1BBUkUyNV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZTAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX1BXREJfSVJTUEFSRTI1X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMGUwKSA+PiA1KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfUFdEQl9JUlNQQVJFMjVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA1KSAmIDB4MDAwMDAwZTApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMF9QV0RCX0lDU1BBUkUyNV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX1BXREJfSUNTUEFSRTI1X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfUFdEQl9JQ1NQQVJFMjVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNzAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMF9QV0RCX0lDU1BBUkUyNV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDcwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX1BXREJfSUNTUEFSRTI1X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAwNzAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfU0xPUEVfSUNQQTFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMF9TTE9QRV9JQ1BBMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX1NMT1BFX0lDUEExX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMzgwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfU0xPUEVfSUNQQTFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMzgwMCkgPj4gMTEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMF9TTE9QRV9JQ1BBMV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTEpICYgMHgwMDAwMzgwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX0xPT1BfSUNQQTFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfTE9PUF9JQ1BBMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMF9MT09QX0lDUEExX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM2MwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX0xPT1BfSUNQQTFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwM2MwMDApID4+IDE0KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfTE9PUF9JQ1BBMV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE0KSAmIDB4MDAwM2MwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMF9MT09QX0NTQTFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX0xPT1BfQ1NBMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfTE9PUF9DU0ExX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwM2MwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMF9MT09QX0NTQTFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwM2MwMDAwKSA+PiAxOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX0xPT1BfQ1NBMV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOCkgJiAweDAwM2MwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfTE9PUF9SU0ExX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMF9MT09QX1JTQTFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX0xPT1BfUlNBMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwN2MwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfTE9PUF9SU0ExX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwN2MwMDAwMCkgPj4gMjIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMF9MT09QX1JTQTFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjIpICYgMHgwN2MwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX0xPT1BfQ1BBMV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfTE9PUF9DUEExX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMF9MT09QX0NQQTFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZjgwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEwX0xPT1BfQ1BBMV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZjgwMDAwMDApID4+IDI3KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTBfTE9PUF9DUEExX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI3KSAmIDB4ZjgwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgU1lOVEgxMSAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGE4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYTgKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX1NQQVJFMTFBX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfU1BBUkUxMUFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9TUEFSRTExQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMWYKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX1NQQVJFMTFBX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDFmKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfU1BBUkUxMUFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMWYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9GT1JDRV9MT0JVRjVHX09OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX0ZPUkNFX0xPQlVGNUdfT05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfRk9SQ0VfTE9CVUY1R19PTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9GT1JDRV9MT0JVRjVHX09OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAyMCkgPj4gNSkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX0ZPUkNFX0xPQlVGNUdfT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNSkgJiAweDAwMDAwMDIwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfTE9SRUZTRUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9MT1JFRlNFTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX0xPUkVGU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBjMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfTE9SRUZTRUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwYzApID4+IDYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9MT1JFRlNFTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDYpICYgMHgwMDAwMDBjMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX0xPQlVGMkdUVU5FX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfTE9CVUYyR1RVTkVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9MT0JVRjJHVFVORV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX0xPQlVGMkdUVU5FX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMzAwKSA+PiA4KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfTE9CVUYyR1RVTkVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDAzMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9DUFNURUVSSU5HX01PREVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX0NQU1RFRVJJTkdfTU9ERV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfQ1BTVEVFUklOR19NT0RFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9DUFNURUVSSU5HX01PREVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwNDAwKSA+PiAxMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX0NQU1RFRVJJTkdfTU9ERV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMCkgJiAweDAwMDAwNDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfU0xPUEVfSUNQQTJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9TTE9QRV9JQ1BBMl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX1NMT1BFX0lDUEEyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMzgwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfU0xPUEVfSUNQQTJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMzgwMCkgPj4gMTEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9TTE9QRV9JQ1BBMl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTEpICYgMHgwMDAwMzgwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX0xPT1BfSUNQQTJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfTE9PUF9JQ1BBMl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9MT09QX0lDUEEyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM2MwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX0xPT1BfSUNQQTJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwM2MwMDApID4+IDE0KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfTE9PUF9JQ1BBMl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE0KSAmIDB4MDAwM2MwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9MT09QX0NTQTJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX0xPT1BfQ1NBMl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfTE9PUF9DU0EyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwM2MwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9MT09QX0NTQTJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwM2MwMDAwKSA+PiAxOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX0xPT1BfQ1NBMl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOCkgJiAweDAwM2MwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfTE9PUF9SU0EyX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9MT09QX1JTQTJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX0xPT1BfUlNBMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwN2MwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfTE9PUF9SU0EyX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwN2MwMDAwMCkgPj4gMjIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9MT09QX1JTQTJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjIpICYgMHgwN2MwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX0xPT1BfQ1BBMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfTE9PUF9DUEEyX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMV9MT09QX0NQQTJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZjgwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDExX0xPT1BfQ1BBMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZjgwMDAwMDApID4+IDI3KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTFfTE9PUF9DUEEyX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI3KSAmIDB4ZjgwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgU1lOVEgxMiAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGFjCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYWMKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEyX1NQQVJFMTJBX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTJfU1BBUkUxMkFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMl9TUEFSRTEyQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzZmYKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEyX1NQQVJFMTJBX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwM2ZmKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTJfU1BBUkUxMkFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAzZmYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMl9MT09QTEVBS0NVUl9GUkFDTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEyX0xPT1BMRUFLQ1VSX0ZSQUNOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTJfTE9PUExFQUtDVVJfRlJBQ05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzYzAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMl9MT09QTEVBS0NVUl9GUkFDTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAzYzAwKSA+PiAxMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEyX0xPT1BMRUFLQ1VSX0ZSQUNOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMCkgJiAweDAwMDAzYzAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTJfQ1BMT1dMS19GUkFDTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMl9DUExPV0xLX0ZSQUNOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEyX0NQTE9XTEtfRlJBQ05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTJfQ1BMT1dMS19GUkFDTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwNDAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMl9DUExPV0xLX0ZSQUNOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwMDAwNDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEyX0NQQklBU19GUkFDTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTJfQ1BCSUFTX0ZSQUNOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMl9DUEJJQVNfRlJBQ05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTgwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEyX0NQQklBU19GUkFDTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMTgwMDApID4+IDE1KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTJfQ1BCSUFTX0ZSQUNOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE1KSAmIDB4MDAwMTgwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMl9TWU5USERJR09VVEVOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEyX1NZTlRIRElHT1VURU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTJfU1lOVEhESUdPVVRFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMl9TWU5USERJR09VVEVOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDIwMDAwKSA+PiAxNykKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEyX1NZTlRIRElHT1VURU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNykgJiAweDAwMDIwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTJfU1RSQ09OVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMl9TVFJDT05UX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEyX1NUUkNPTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTJfU1RSQ09OVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDA0MDAwMCkgPj4gMTgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMl9TVFJDT05UX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTgpICYgMHgwMDA0MDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEyX1ZSRUZNVUwzX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTJfVlJFRk1VTDNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMl9WUkVGTVVMM19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA3ODAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEyX1ZSRUZNVUwzX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDA3ODAwMDApID4+IDE5KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTJfVlJFRk1VTDNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE5KSAmIDB4MDA3ODAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMl9WUkVGTVVMMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEyX1ZSRUZNVUwyX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTJfVlJFRk1VTDJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3ODAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMl9WUkVGTVVMMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDA3ODAwMDAwKSA+PiAyMykKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEyX1ZSRUZNVUwyX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMykgJiAweDA3ODAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTJfVlJFRk1VTDFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMl9WUkVGTVVMMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEyX1ZSRUZNVUwxX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3ODAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTJfVlJFRk1VTDFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3ODAwMDAwMCkgPj4gMjcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMl9WUkVGTVVMMV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjcpICYgMHg3ODAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEyX0NMS19ET1VCTEVSX0VOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTJfQ0xLX0RPVUJMRVJfRU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxMl9DTEtfRE9VQkxFUl9FTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEyX0NMS19ET1VCTEVSX0VOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ODAwMDAwMDApID4+IDMxKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTJfQ0xLX0RPVUJMRVJfRU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMxKSAmIDB4ODAwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgU1lOVEgxMyAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTNfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGIwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxM19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYjAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEzX1NQQVJFMTNBX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTNfU1BBUkUxM0FfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxM19TUEFSRTEzQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEzX1NQQVJFMTNBX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAxKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTNfU1BBUkUxM0FfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxM19TTE9QRV9JQ1BBX0ZSQUNOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEzX1NMT1BFX0lDUEFfRlJBQ05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTNfU0xPUEVfSUNQQV9GUkFDTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBlCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxM19TTE9QRV9JQ1BBX0ZSQUNOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwZSkgPj4gMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEzX1NMT1BFX0lDUEFfRlJBQ05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMSkgJiAweDAwMDAwMDBlKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTNfTE9PUF9JQ1BBX0ZSQUNOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxM19MT09QX0lDUEFfRlJBQ05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEzX0xPT1BfSUNQQV9GUkFDTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTNfTE9PUF9JQ1BBX0ZSQUNOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwZjApID4+IDQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxM19MT09QX0lDUEFfRlJBQ05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDQpICYgMHgwMDAwMDBmMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEzX0xPT1BfQ1NBX0ZSQUNOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTNfTE9PUF9DU0FfRlJBQ05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxM19MT09QX0NTQV9GUkFDTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBmMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEzX0xPT1BfQ1NBX0ZSQUNOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwZjAwKSA+PiA4KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTNfTE9PUF9DU0FfRlJBQ05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDBmMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxM19MT09QX1JTQV9GUkFDTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEzX0xPT1BfUlNBX0ZSQUNOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTNfTE9PUF9SU0FfRlJBQ05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDFmMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxM19MT09QX1JTQV9GUkFDTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDFmMDAwKSA+PiAxMikKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEzX0xPT1BfUlNBX0ZSQUNOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMikgJiAweDAwMDFmMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTNfTE9PUF9DUEFfRlJBQ05fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxM19MT09QX0NQQV9GUkFDTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEzX0xPT1BfQ1BBX0ZSQUNOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDNlMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTNfTE9PUF9DUEFfRlJBQ05fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDNlMDAwMCkgPj4gMTcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxM19MT09QX0NQQV9GUkFDTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTcpICYgMHgwMDNlMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEzX0xPT1BfM1JEX09SREVSX1JBX0ZSQUNOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTNfTE9PUF8zUkRfT1JERVJfUkFfRlJBQ05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxM19MT09QXzNSRF9PUkRFUl9SQV9GUkFDTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDdjMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEzX0xPT1BfM1JEX09SREVSX1JBX0ZSQUNOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDdjMDAwMDApID4+IDIyKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTNfTE9PUF8zUkRfT1JERVJfUkFfRlJBQ05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIyKSAmIDB4MDdjMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxM19SRUZESVZBX0ZSQUNOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEzX1JFRkRJVkFfRlJBQ05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTNfUkVGRElWQV9GUkFDTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGY4MDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxM19SRUZESVZBX0ZSQUNOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGY4MDAwMDAwKSA+PiAyNykKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDEzX1JFRkRJVkFfRlJBQ05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNykgJiAweGY4MDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIFNZTlRIMTQgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDE0X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBiNAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTRfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGI0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxNF9TUEFSRTE0QV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDE0X1NQQVJFMTRBX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTRfU1BBUkUxNEFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxNF9TUEFSRTE0QV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMykgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDE0X1NQQVJFMTRBX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDAzKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTRfTE9CVUY1R1RVTkVfM19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxNF9MT0JVRjVHVFVORV8zX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDE0X0xPQlVGNUdUVU5FXzNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwYwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTRfTE9CVUY1R1RVTkVfM19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMGMpID4+IDIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxNF9MT0JVRjVHVFVORV8zX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIpICYgMHgwMDAwMDAwYykKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDE0X0xPQlVGMkdUVU5FXzNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTRfTE9CVUYyR1RVTkVfM19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxNF9MT0JVRjJHVFVORV8zX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDE0X0xPQlVGMkdUVU5FXzNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDMwKSA+PiA0KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTRfTE9CVUYyR1RVTkVfM19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA0KSAmIDB4MDAwMDAwMzApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxNF9MT0JVRjVHVFVORV8yX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDE0X0xPQlVGNUdUVU5FXzJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTRfTE9CVUY1R1RVTkVfMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGMwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxNF9MT0JVRjVHVFVORV8yX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDBjMCkgPj4gNikKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDE0X0xPQlVGNUdUVU5FXzJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNikgJiAweDAwMDAwMGMwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTRfTE9CVUYyR1RVTkVfMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxNF9MT0JVRjJHVFVORV8yX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDE0X0xPQlVGMkdUVU5FXzJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTRfTE9CVUYyR1RVTkVfMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAzMDApID4+IDgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxNF9MT0JVRjJHVFVORV8yX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwMDMwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDE0X1BXRF9MT0JVRjVHXzNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTRfUFdEX0xPQlVGNUdfM19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxNF9QV0RfTE9CVUY1R18zX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDE0X1BXRF9MT0JVRjVHXzNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDA0MDApID4+IDEwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTRfUFdEX0xPQlVGNUdfM19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEwKSAmIDB4MDAwMDA0MDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxNF9QV0RfTE9CVUYyR18zX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDE0X1BXRF9MT0JVRjJHXzNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTRfUFdEX0xPQlVGMkdfM19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxNF9QV0RfTE9CVUYyR18zX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwODAwKSA+PiAxMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDE0X1BXRF9MT0JVRjJHXzNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMSkgJiAweDAwMDAwODAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTRfUFdEX0xPQlVGNUdfMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxNF9QV0RfTE9CVUY1R18yX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDE0X1BXRF9MT0JVRjVHXzJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTRfUFdEX0xPQlVGNUdfMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMTAwMCkgPj4gMTIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxNF9QV0RfTE9CVUY1R18yX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTIpICYgMHgwMDAwMTAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDE0X1BXRF9MT0JVRjJHXzJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTRfUFdEX0xPQlVGMkdfMl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxNF9QV0RfTE9CVUYyR18yX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDE0X1BXRF9MT0JVRjJHXzJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDIwMDApID4+IDEzKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTRfUFdEX0xPQlVGMkdfMl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEzKSAmIDB4MDAwMDIwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxNF9QV1VQTE8yM19QRF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDE0X1BXVVBMTzIzX1BEX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTRfUFdVUExPMjNfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDFjMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxNF9QV1VQTE8yM19QRF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDFjMDAwKSA+PiAxNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDE0X1BXVVBMTzIzX1BEX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNCkgJiAweDAwMDFjMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTRfUFdEQl9JQ0xPQlVGNUc1MF8zX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxNF9QV0RCX0lDTE9CVUY1RzUwXzNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDE0X1BXREJfSUNMT0JVRjVHNTBfM19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBlMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTRfUFdEQl9JQ0xPQlVGNUc1MF8zX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDBlMDAwMCkgPj4gMTcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxNF9QV0RCX0lDTE9CVUY1RzUwXzNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTcpICYgMHgwMDBlMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDE0X1BXREJfSUNMT0JVRjJHNTBfM19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTRfUFdEQl9JQ0xPQlVGMkc1MF8zX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxNF9QV0RCX0lDTE9CVUYyRzUwXzNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA3MDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDE0X1BXREJfSUNMT0JVRjJHNTBfM19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDA3MDAwMDApID4+IDIwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTRfUFdEQl9JQ0xPQlVGMkc1MF8zX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIwKSAmIDB4MDA3MDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxNF9QV0RCX0lDTE9CVUY1RzUwXzJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDE0X1BXREJfSUNMT0JVRjVHNTBfMl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTRfUFdEQl9JQ0xPQlVGNUc1MF8yX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzODAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxNF9QV0RCX0lDTE9CVUY1RzUwXzJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAzODAwMDAwKSA+PiAyMykKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDE0X1BXREJfSUNMT0JVRjVHNTBfMl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMykgJiAweDAzODAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTRfUFdEQl9JQ0xPQlVGMkc1MF8yX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxNF9QV0RCX0lDTE9CVUYyRzUwXzJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDE0X1BXREJfSUNMT0JVRjJHNTBfMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxYzAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTRfUFdEQl9JQ0xPQlVGMkc1MF8yX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxYzAwMDAwMCkgPj4gMjYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxNF9QV0RCX0lDTE9CVUYyRzUwXzJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjYpICYgMHgxYzAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDE0X1BXREJfSUNMVkxTSEZUX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTRfUFdEQl9JQ0xWTFNIRlRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfU1lOVEgxNF9QV0RCX0lDTFZMU0hGVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZTAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19TWU5USDE0X1BXREJfSUNMVkxTSEZUX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZTAwMDAwMDApID4+IDI5KQotI2RlZmluZSBQSFlfQU5BTE9HX1NZTlRIMTRfUFdEQl9JQ0xWTFNIRlRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI5KSAmIDB4ZTAwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQklBUzEgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBjMAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMxX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGMwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzFfU1BBUkUxX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMV9TUEFSRTFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMxX1NQQVJFMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdmCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzFfU1BBUkUxX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDA3ZikgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMV9TUEFSRTFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDdmKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMxX1BXRF9JQzI1VjJJUV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzFfUFdEX0lDMjVWMklRX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMV9QV0RfSUMyNVYySVFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDM4MAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMxX1BXRF9JQzI1VjJJUV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAzODApID4+IDcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzFfUFdEX0lDMjVWMklRX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDcpICYgMHgwMDAwMDM4MCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMV9QV0RfSUMyNVYySUlfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMxX1BXRF9JQzI1VjJJSV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzFfUFdEX0lDMjVWMklJX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFjMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMV9QV0RfSUMyNVYySUlfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDFjMDApID4+IDEwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMxX1BXRF9JQzI1VjJJSV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEwKSAmIDB4MDAwMDFjMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzFfUFdEX0lDMjVCQl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMV9QV0RfSUMyNUJCX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMxX1BXRF9JQzI1QkJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBlMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzFfUFdEX0lDMjVCQl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDBlMDAwKSA+PiAxMykKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMV9QV0RfSUMyNUJCX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMykgJiAweDAwMDBlMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMxX1BXRF9JQzI1REFDX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzFfUFdEX0lDMjVEQUNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMV9QV0RfSUMyNURBQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA3MDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMxX1BXRF9JQzI1REFDX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDA3MDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzFfUFdEX0lDMjVEQUNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMDA3MDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMV9QV0RfSUMyNUZJUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMxX1BXRF9JQzI1RklSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzFfUFdEX0lDMjVGSVJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzODAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMV9QV0RfSUMyNUZJUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAzODAwMDApID4+IDE5KQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMxX1BXRF9JQzI1RklSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE5KSAmIDB4MDAzODAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzFfUFdEX0lDMjVBRENfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMV9QV0RfSUMyNUFEQ19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMxX1BXRF9JQzI1QURDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxYzAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzFfUFdEX0lDMjVBRENfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAxYzAwMDAwKSA+PiAyMikKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMV9QV0RfSUMyNUFEQ19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMikgJiAweDAxYzAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMxX0JJQVNfU0VMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzFfQklBU19TRUxfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMV9CSUFTX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZTAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMxX0JJQVNfU0VMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhmZTAwMDAwMCkgPj4gMjUpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzFfQklBU19TRUxfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjUpICYgMHhmZTAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCSUFTMiAqLwotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGM0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYzQKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9TUEFSRTJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1NQQVJFMl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfU1BBUkUyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMWYKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9TUEFSRTJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDFmKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1NQQVJFMl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMWYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfUFdEX0lDMjVYUEFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9QV0RfSUMyNVhQQV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1BXRF9JQzI1WFBBX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGUwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfUFdEX0lDMjVYUEFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDBlMCkgPj4gNSkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9QV0RfSUMyNVhQQV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNSkgJiAweDAwMDAwMGUwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1BXRF9JQzI1WFRBTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfUFdEX0lDMjVYVEFMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9QV0RfSUMyNVhUQUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDcwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1BXRF9JQzI1WFRBTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDA3MDApID4+IDgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfUFdEX0lDMjVYVEFMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwMDcwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9QV0RfSUMyNVRYUkZfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1BXRF9JQzI1VFhSRl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfUFdEX0lDMjVUWFJGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDM4MDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9QV0RfSUMyNVRYUkZfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDM4MDApID4+IDExKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1BXRF9JQzI1VFhSRl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDExKSAmIDB4MDAwMDM4MDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfUFdEX0lDMjVSWFJGX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9QV0RfSUMyNVJYUkZfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1BXRF9JQzI1UlhSRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDFjMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfUFdEX0lDMjVSWFJGX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDFjMDAwKSA+PiAxNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9QV0RfSUMyNVJYUkZfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNCkgJiAweDAwMDFjMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1BXRF9JQzI1U1lOVEhfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfUFdEX0lDMjVTWU5USF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9QV0RfSUMyNVNZTlRIX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBlMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1BXRF9JQzI1U1lOVEhfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDBlMDAwMCkgPj4gMTcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfUFdEX0lDMjVTWU5USF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTcpICYgMHgwMDBlMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9QV0RfSUMyNVBMTFJFR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1BXRF9JQzI1UExMUkVHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfUFdEX0lDMjVQTExSRUdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA3MDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9QV0RfSUMyNVBMTFJFR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDA3MDAwMDApID4+IDIwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1BXRF9JQzI1UExMUkVHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIwKSAmIDB4MDA3MDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfUFdEX0lDMjVQTExDUDJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9QV0RfSUMyNVBMTENQMl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1BXRF9JQzI1UExMQ1AyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzODAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfUFdEX0lDMjVQTExDUDJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAzODAwMDAwKSA+PiAyMykKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9QV0RfSUMyNVBMTENQMl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMykgJiAweDAzODAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1BXRF9JQzI1UExMQ1BfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfUFdEX0lDMjVQTExDUF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9QV0RfSUMyNVBMTENQX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxYzAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1BXRF9JQzI1UExMQ1BfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxYzAwMDAwMCkgPj4gMjYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfUFdEX0lDMjVQTExDUF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjYpICYgMHgxYzAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9QV0RfSUMyNVBMTEdNX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1BXRF9JQzI1UExMR01fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzJfUFdEX0lDMjVQTExHTV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZTAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTMl9QV0RfSUMyNVBMTEdNX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZTAwMDAwMDApID4+IDI5KQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMyX1BXRF9JQzI1UExMR01fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI5KSAmIDB4ZTAwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQklBUzMgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBjOAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGM4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfU1BBUkUzX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19TUEFSRTNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1NQQVJFM19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfU1BBUkUzX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMykgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19TUEFSRTNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDAzKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjI1U0FSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSMjVTQVJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVIyNVNBUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxYwotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjI1U0FSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMWMpID4+IDIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSMjVTQVJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIpICYgMHgwMDAwMDAxYykKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVIyNVRYUkZfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjI1VFhSRl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSMjVUWFJGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZTAKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVIyNVRYUkZfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMGUwKSA+PiA1KQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjI1VFhSRl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA1KSAmIDB4MDAwMDAwZTApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSMjVSWFJGX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVIyNVJYUkZfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjI1UlhSRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNzAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSMjVSWFJGX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDcwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVIyNVJYUkZfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAwNzAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjI1U1lOVEhfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSMjVTWU5USF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVIyNVNZTlRIX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMzgwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjI1U1lOVEhfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMzgwMCkgPj4gMTEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSMjVTWU5USF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTEpICYgMHgwMDAwMzgwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVIyNVBMTFJFR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjI1UExMUkVHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSMjVQTExSRUdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMWMwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVIyNVBMTFJFR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMWMwMDApID4+IDE0KQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjI1UExMUkVHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE0KSAmIDB4MDAwMWMwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSMjVCQl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVIyNUJCX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjI1QkJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMGUwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSMjVCQl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMGUwMDAwKSA+PiAxNykKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVIyNUJCX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNykgJiAweDAwMGUwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjUwREFDX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSNTBEQUNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVI1MERBQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDcwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjUwREFDX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDcwMDAwMCkgPj4gMjApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSNTBEQUNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjApICYgMHgwMDcwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVIyNURBQ19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjI1REFDX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSMjVEQUNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDM4MDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVIyNURBQ19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDM4MDAwMDApID4+IDIzKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjI1REFDX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIzKSAmIDB4MDM4MDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSMjVGSVJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVIyNUZJUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjI1RklSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFjMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSMjVGSVJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDFjMDAwMDAwKSA+PiAyNikKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVIyNUZJUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNikgJiAweDFjMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjUwQURDX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSNTBBRENfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTM19QV0RfSVI1MEFEQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhlMDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVMzX1BXRF9JUjUwQURDX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhlMDAwMDAwMCkgPj4gMjkpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzNfUFdEX0lSNTBBRENfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjkpICYgMHhlMDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCSUFTNCAqLwotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVM0X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGNjCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzRfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwY2MKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTNF9TUEFSRTRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVM0X1NQQVJFNF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzRfU1BBUkU0X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3ZmYKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTNF9TUEFSRTRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwN2ZmKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVM0X1NQQVJFNF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDA3ZmYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzRfUFdEX0lSMjVTUEFSRURfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTNF9QV0RfSVIyNVNQQVJFRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVM0X1BXRF9JUjI1U1BBUkVEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzODAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzRfUFdEX0lSMjVTUEFSRURfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAzODAwKSA+PiAxMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTNF9QV0RfSVIyNVNQQVJFRF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMSkgJiAweDAwMDAzODAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVM0X1BXRF9JUjI1U1BBUkVDX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzRfUFdEX0lSMjVTUEFSRUNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTNF9QV0RfSVIyNVNQQVJFQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxYzAwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVM0X1BXRF9JUjI1U1BBUkVDX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAxYzAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzRfUFdEX0lSMjVTUEFSRUNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwMDAxYzAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTNF9QV0RfSVIyNVNQQVJFQl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVM0X1BXRF9JUjI1U1BBUkVCX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzRfUFdEX0lSMjVTUEFSRUJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwZTAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTNF9QV0RfSVIyNVNQQVJFQl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwZTAwMDApID4+IDE3KQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVM0X1BXRF9JUjI1U1BBUkVCX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE3KSAmIDB4MDAwZTAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzRfUFdEX0lSMjVYUEFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTNF9QV0RfSVIyNVhQQV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVM0X1BXRF9JUjI1WFBBX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNzAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzRfUFdEX0lSMjVYUEFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwNzAwMDAwKSA+PiAyMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTNF9QV0RfSVIyNVhQQV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMCkgJiAweDAwNzAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVM0X1BXRF9JQzI1U1BBUkVDX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzRfUFdEX0lDMjVTUEFSRUNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTNF9QV0RfSUMyNVNQQVJFQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzgwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVM0X1BXRF9JQzI1U1BBUkVDX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMzgwMDAwMCkgPj4gMjMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzRfUFdEX0lDMjVTUEFSRUNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjMpICYgMHgwMzgwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTNF9QV0RfSUMyNVNQQVJFQl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVM0X1BXRF9JQzI1U1BBUkVCX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzRfUFdEX0lDMjVTUEFSRUJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWMwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTNF9QV0RfSUMyNVNQQVJFQl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MWMwMDAwMDApID4+IDI2KQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVM0X1BXRF9JQzI1U1BBUkVCX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI2KSAmIDB4MWMwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzRfUFdEX0lDMjVTUEFSRUFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTNF9QV0RfSUMyNVNQQVJFQV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQU5BTE9HX0JJQVM0X1BXRF9JQzI1U1BBUkVBX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGUwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQklBUzRfUFdEX0lDMjVTUEFSRUFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGUwMDAwMDAwKSA+PiAyOSkKLSNkZWZpbmUgUEhZX0FOQUxPR19CSUFTNF9QV0RfSUMyNVNQQVJFQV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyOSkgJiAweGUwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIFJYVFgxICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX1NDRklSX0dBSU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfU0NGSVJfR0FJTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9TQ0ZJUl9HQUlOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX1NDRklSX0dBSU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDEpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfU0NGSVJfR0FJTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9NQU5SWEdBSU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX01BTlJYR0FJTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfTUFOUlhHQUlOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9NQU5SWEdBSU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAyKSA+PiAxKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX01BTlJYR0FJTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxKSAmIDB4MDAwMDAwMDIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfQUdDX0RCREFDX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9BR0NfREJEQUNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX0FHQ19EQkRBQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNjCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfQUdDX0RCREFDX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAzYykgPj4gMikKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9BR0NfREJEQUNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMikgJiAweDAwMDAwMDNjKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX09WUl9BR0NfREJEQUNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfT1ZSX0FHQ19EQkRBQ19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9PVlJfQUdDX0RCREFDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX09WUl9BR0NfREJEQUNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwNDApID4+IDYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfT1ZSX0FHQ19EQkRBQ19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDYpICYgMHgwMDAwMDA0MCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9FTkFCTEVfUEFMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX0VOQUJMRV9QQUxfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfRU5BQkxFX1BBTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9FTkFCTEVfUEFMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDgwKSA+PiA3KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX0VOQUJMRV9QQUxfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA3KSAmIDB4MDAwMDAwODApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfRU5BQkxFX1BBTF9PVlJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9FTkFCTEVfUEFMX09WUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX0VOQUJMRV9QQUxfT1ZSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfRU5BQkxFX1BBTF9PVlJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDEwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9FTkFCTEVfUEFMX09WUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAwMTAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX1RYMURCX0JJUVVBRF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfVFgxREJfQklRVUFEX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9UWDFEQl9CSVFVQURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGUwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX1RYMURCX0JJUVVBRF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDBlMDApID4+IDkpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfVFgxREJfQklRVUFEX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDkpICYgMHgwMDAwMGUwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9UWDZEQl9CSVFVQURfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX1RYNkRCX0JJUVVBRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfVFg2REJfQklRVUFEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDMwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9UWDZEQl9CSVFVQURfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDMwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX1RYNkRCX0JJUVVBRF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEyKSAmIDB4MDAwMDMwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfUEFEUlZIQUxGR04yR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9QQURSVkhBTEZHTjJHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX1BBRFJWSEFMRkdOMkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfUEFEUlZIQUxGR04yR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDA0MDAwKSA+PiAxNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9QQURSVkhBTEZHTjJHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNCkgJiAweDAwMDA0MDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX1BBRFJWMkdOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfUEFEUlYyR05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9QQURSVjJHTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA3ODAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX1BBRFJWMkdOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDA3ODAwMCkgPj4gMTUpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfUEFEUlYyR05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTUpICYgMHgwMDA3ODAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9QQURSVjNHTjVHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX1BBRFJWM0dONUdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfUEFEUlYzR041R19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA3ODAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9QQURSVjNHTjVHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDA3ODAwMDApID4+IDE5KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX1BBRFJWM0dONUdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE5KSAmIDB4MDA3ODAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfUEFEUlY0R041R19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9QQURSVjRHTjVHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX1BBRFJWNEdONUdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3ODAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfUEFEUlY0R041R19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDA3ODAwMDAwKSA+PiAyMykKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9QQURSVjRHTjVHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMykgJiAweDA3ODAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX1RYQkJfR0NfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfVFhCQl9HQ19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9UWEJCX0dDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3ODAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX1RYQkJfR0NfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3ODAwMDAwMCkgPj4gMjcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfVFhCQl9HQ19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjcpICYgMHg3ODAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9NQU5UWEdBSU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX01BTlRYR0FJTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDFfTUFOVFhHQUlOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMV9NQU5UWEdBSU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ODAwMDAwMDApID4+IDMxKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgxX01BTlRYR0FJTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMxKSAmIDB4ODAwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgUlhUWDIgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwNAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTA0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfQk1PREVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9CTU9ERV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX0JNT0RFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfQk1PREVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMSkgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9CTU9ERV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDAxKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX0JNT0RFX09WUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfQk1PREVfT1ZSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9CTU9ERV9PVlJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX0JNT0RFX09WUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDIpID4+IDEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfQk1PREVfT1ZSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEpICYgMHgwMDAwMDAwMikKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9TWU5USE9OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1NZTlRIT05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfU1lOVEhPTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9TWU5USE9OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDA0KSA+PiAyKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1NZTlRIT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyKSAmIDB4MDAwMDAwMDQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfU1lOVEhPTl9PVlJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9TWU5USE9OX09WUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1NZTlRIT05fT1ZSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfU1lOVEhPTl9PVlJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwOCkgPj4gMykKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9TWU5USE9OX09WUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMykgJiAweDAwMDAwMDA4KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX0JXX1NUX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfQldfU1RfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9CV19TVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX0JXX1NUX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMzApID4+IDQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfQldfU1RfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDQpICYgMHgwMDAwMDAzMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9CV19TVF9PVlJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX0JXX1NUX09WUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfQldfU1RfT1ZSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9CV19TVF9PVlJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDQwKSA+PiA2KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX0JXX1NUX09WUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA2KSAmIDB4MDAwMDAwNDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfVFhPTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9UWE9OX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1RYT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfVFhPTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDA4MCkgPj4gNykKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9UWE9OX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNykgJiAweDAwMDAwMDgwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1RYT05fT1ZSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfVFhPTl9PVlJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9UWE9OX09WUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1RYT05fT1ZSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAxMDApID4+IDgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfVFhPTl9PVlJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwMDEwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9QQU9OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1BBT05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfUEFPTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9QQU9OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMjAwKSA+PiA5KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1BBT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA5KSAmIDB4MDAwMDAyMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfUEFPTl9PVlJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9QQU9OX09WUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1BBT05fT1ZSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfUEFPTl9PVlJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwNDAwKSA+PiAxMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9QQU9OX09WUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMCkgJiAweDAwMDAwNDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1JYT05fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfUlhPTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9SWE9OX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1JYT05fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDgwMCkgPj4gMTEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfUlhPTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTEpICYgMHgwMDAwMDgwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9SWE9OX09WUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1JYT05fT1ZSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfUlhPTl9PVlJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9SWE9OX09WUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDEwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1JYT05fT1ZSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEyKSAmIDB4MDAwMDEwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfQUdDT05fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9BR0NPTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX0FHQ09OX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfQUdDT05fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAyMDAwKSA+PiAxMykKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9BR0NPTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMykgJiAweDAwMDAyMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX0FHQ09OX09WUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfQUdDT05fT1ZSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9BR0NPTl9PVlJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX0FHQ09OX09WUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwNDAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfQUdDT05fT1ZSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwMDAwNDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9UWE1PRF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1RYTU9EX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfVFhNT0RfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzgwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9UWE1PRF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMzgwMDApID4+IDE1KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1RYTU9EX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE1KSAmIDB4MDAwMzgwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfVFhNT0RfT1ZSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9UWE1PRF9PVlJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1RYTU9EX09WUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfVFhNT0RfT1ZSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDQwMDAwKSA+PiAxOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9UWE1PRF9PVlJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOCkgJiAweDAwMDQwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1JYMURCX0JJUVVBRF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfUlgxREJfQklRVUFEX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9SWDFEQl9CSVFVQURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDM4MDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1JYMURCX0JJUVVBRF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDM4MDAwMCkgPj4gMTkpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfUlgxREJfQklRVUFEX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTkpICYgMHgwMDM4MDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9SWDZEQl9CSVFVQURfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1JYNkRCX0JJUVVBRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfUlg2REJfQklRVUFEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBjMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9SWDZEQl9CSVFVQURfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDBjMDAwMDApID4+IDIyKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1JYNkRCX0JJUVVBRF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIyKSAmIDB4MDBjMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfTVhSR0FJTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9NWFJHQUlOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX01YUkdBSU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfTVhSR0FJTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAzMDAwMDAwKSA+PiAyNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9NWFJHQUlOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNCkgJiAweDAzMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1ZHQUdBSU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfVkdBR0FJTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9WR0FHQUlOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxYzAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX1ZHQUdBSU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxYzAwMDAwMCkgPj4gMjYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfVkdBR0FJTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjYpICYgMHgxYzAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9MTkFHQUlOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX0xOQUdBSU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDJfTE5BR0FJTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZTAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYMl9MTkFHQUlOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZTAwMDAwMDApID4+IDI5KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgyX0xOQUdBSU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI5KSAmIDB4ZTAwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgUlhUWDMgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwOAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfU1BBUkUzX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19TUEFSRTNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX1NQQVJFM19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfU1BBUkUzX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwNykgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19TUEFSRTNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDA3KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX1NQVVJPTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfU1BVUk9OX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19TUFVST05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX1NQVVJPTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDgpID4+IDMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfU1BVUk9OX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMpICYgMHgwMDAwMDAwOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19QQUxfTE9DS0VERU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX1BBTF9MT0NLRURFTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfUEFMX0xPQ0tFREVOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19QQUxfTE9DS0VERU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDEwKSA+PiA0KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX1BBTF9MT0NLRURFTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA0KSAmIDB4MDAwMDAwMTApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfREFDRlVMTFNDQUxFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19EQUNGVUxMU0NBTEVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0RBQ0ZVTExTQ0FMRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfREFDRlVMTFNDQUxFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAyMCkgPj4gNSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19EQUNGVUxMU0NBTEVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNSkgJiAweDAwMDAwMDIwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0FEQ1NIT1JUX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQURDU0hPUlRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19BRENTSE9SVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0FEQ1NIT1JUX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwNDApID4+IDYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQURDU0hPUlRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDYpICYgMHgwMDAwMDA0MCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19EQUNQV0RfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0RBQ1BXRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfREFDUFdEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19EQUNQV0RfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDgwKSA+PiA3KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0RBQ1BXRF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA3KSAmIDB4MDAwMDAwODApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfREFDUFdEX09WUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19EQUNQV0RfT1ZSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0RBQ1BXRF9PVlJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfREFDUFdEX09WUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDEwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19EQUNQV0RfT1ZSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAwMTAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0FEQ1BXRF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQURDUFdEX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19BRENQV0RfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0FEQ1BXRF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAyMDApID4+IDkpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQURDUFdEX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDkpICYgMHgwMDAwMDIwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19BRENQV0RfT1ZSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0FEQ1BXRF9PVlJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQURDUFdEX09WUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19BRENQV0RfT1ZSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDA0MDApID4+IDEwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0FEQ1BXRF9PVlJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEwKSAmIDB4MDAwMDA0MDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQUdDX0NBTERBQ19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19BR0NfQ0FMREFDX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0FHQ19DQUxEQUNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDFmODAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQUdDX0NBTERBQ19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDFmODAwKSA+PiAxMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19BR0NfQ0FMREFDX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMSkgJiAweDAwMDFmODAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0FHQ19DQUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQUdDX0NBTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19BR0NfQ0FMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0FHQ19DQUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAyMDAwMCkgPj4gMTcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQUdDX0NBTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTcpICYgMHgwMDAyMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19BR0NfQ0FMX09WUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0FHQ19DQUxfT1ZSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQUdDX0NBTF9PVlJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19BR0NfQ0FMX09WUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwNDAwMDApID4+IDE4KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0FHQ19DQUxfT1ZSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE4KSAmIDB4MDAwNDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfTE9GT1JDRURPTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19MT0ZPUkNFRE9OX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0xPRk9SQ0VET05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfTE9GT1JDRURPTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDgwMDAwKSA+PiAxOSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19MT0ZPUkNFRE9OX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOSkgJiAweDAwMDgwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTFJFU0lEVUVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMUkVTSURVRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxSRVNJRFVFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTFJFU0lEVUVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDEwMDAwMCkgPj4gMjApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMUkVTSURVRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjApICYgMHgwMDEwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxSRVNJRFVFX09WUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTFJFU0lEVUVfT1ZSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMUkVTSURVRV9PVlJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxSRVNJRFVFX09WUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAyMDAwMDApID4+IDIxKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTFJFU0lEVUVfT1ZSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIxKSAmIDB4MDAyMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMRkNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxGQ19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTEZDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMRkNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwNDAwMDAwKSA+PiAyMikKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxGQ19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMikgJiAweDAwNDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTEZDX09WUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMRkNfT1ZSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxGQ19PVlJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTEZDX09WUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDgwMDAwMCkgPj4gMjMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMRkNfT1ZSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjMpICYgMHgwMDgwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxUWF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTFRYX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMVFhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxUWF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDEwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTFRYX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI0KSAmIDB4MDEwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMVFhfT1ZSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxUWF9PVlJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTFRYX09WUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMVFhfT1ZSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAyMDAwMDAwKSA+PiAyNSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxUWF9PVlJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNSkgJiAweDAyMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTFRYU0hJRlRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMVFhTSElGVF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxUWFNISUZUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTFRYU0hJRlRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwNDAwMDAwMCkgPj4gMjYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMVFhTSElGVF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjYpICYgMHgwNDAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxUWFNISUZUX09WUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTFRYU0hJRlRfT1ZSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMVFhTSElGVF9PVlJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxUWFNISUZUX09WUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDgwMDAwMDApID4+IDI3KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTFRYU0hJRlRfT1ZSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI3KSAmIDB4MDgwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMUEFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxQQV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTFBBX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMUEFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEwMDAwMDAwKSA+PiAyOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxQQV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyOCkgJiAweDEwMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTFBBX09WUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMUEFfT1ZSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19DQUxQQV9PVlJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX0NBTFBBX09WUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgyMDAwMDAwMCkgPj4gMjkpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfQ0FMUEFfT1ZSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjkpICYgMHgyMDAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19UVVJCT0FEQ19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX1RVUkJPQURDX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfVFVSQk9BRENfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19UVVJCT0FEQ19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NDAwMDAwMDApID4+IDMwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX1RVUkJPQURDX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMwKSAmIDB4NDAwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfVFVSQk9BRENfT1ZSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19UVVJCT0FEQ19PVlJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1JYVFgzX1RVUkJPQURDX09WUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhUWDNfVFVSQk9BRENfT1ZSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDgwMDAwMDAwKSA+PiAzMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWFRYM19UVVJCT0FEQ19PVlJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMSkgJiAweDgwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCMSAqLwotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTQwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxNDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfSTJWX0NVUlIyWF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9JMlZfQ1VSUjJYX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0kyVl9DVVJSMlhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfSTJWX0NVUlIyWF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAxKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9JMlZfQ1VSUjJYX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0VOQUJMRV9MT1FfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRU5BQkxFX0xPUV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9FTkFCTEVfTE9RX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0VOQUJMRV9MT1FfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMikgPj4gMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRU5BQkxFX0xPUV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMSkgJiAweDAwMDAwMDAyKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9GT1JDRV9MT1FfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0ZPUkNFX0xPUV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRk9SQ0VfTE9RX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9GT1JDRV9MT1FfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDQpID4+IDIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0ZPUkNFX0xPUV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIpICYgMHgwMDAwMDAwNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRU5BQkxFX05PVENIX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9FTkFCTEVfTk9UQ0hfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0VOQUJMRV9OT1RDSF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRU5BQkxFX05PVENIX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDA4KSA+PiAzKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9FTkFCTEVfTk9UQ0hfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzKSAmIDB4MDAwMDAwMDgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0ZPUkNFX05PVENIX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRk9SQ0VfTk9UQ0hfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9GT1JDRV9OT1RDSF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0ZPUkNFX05PVENIX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAxMCkgPj4gNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRk9SQ0VfTk9UQ0hfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNCkgJiAweDAwMDAwMDEwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9FTkFCTEVfQklRVUFEX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0VOQUJMRV9CSVFVQURfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRU5BQkxFX0JJUVVBRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9FTkFCTEVfQklRVUFEX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMjApID4+IDUpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0VOQUJMRV9CSVFVQURfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDUpICYgMHgwMDAwMDAyMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRk9SQ0VfQklRVUFEX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9GT1JDRV9CSVFVQURfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0ZPUkNFX0JJUVVBRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRk9SQ0VfQklRVUFEX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDQwKSA+PiA2KQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9GT1JDRV9CSVFVQURfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA2KSAmIDB4MDAwMDAwNDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0VOQUJMRV9PU0RBQ19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRU5BQkxFX09TREFDX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9FTkFCTEVfT1NEQUNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0VOQUJMRV9PU0RBQ19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDA4MCkgPj4gNykKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRU5BQkxFX09TREFDX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNykgJiAweDAwMDAwMDgwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9GT1JDRV9PU0RBQ19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0ZPUkNFX09TREFDX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRk9SQ0VfT1NEQUNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9GT1JDRV9PU0RBQ19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAxMDApID4+IDgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0ZPUkNFX09TREFDX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwMDEwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRU5BQkxFX1YySV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9FTkFCTEVfVjJJX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0VOQUJMRV9WMklfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRU5BQkxFX1YySV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMjAwKSA+PiA5KQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9FTkFCTEVfVjJJX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA5KSAmIDB4MDAwMDAyMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0ZPUkNFX1YySV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRk9SQ0VfVjJJX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9GT1JDRV9WMklfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0ZPUkNFX1YySV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwNDAwKSA+PiAxMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRk9SQ0VfVjJJX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMCkgJiAweDAwMDAwNDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9FTkFCTEVfSTJWX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0VOQUJMRV9JMlZfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRU5BQkxFX0kyVl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9FTkFCTEVfSTJWX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDgwMCkgPj4gMTEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0VOQUJMRV9JMlZfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTEpICYgMHgwMDAwMDgwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRk9SQ0VfSTJWX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9GT1JDRV9JMlZfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0ZPUkNFX0kyVl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfRk9SQ0VfSTJWX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDEwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9GT1JDRV9JMlZfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEyKSAmIDB4MDAwMDEwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0NNU0VMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfQ01TRUxfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9DTVNFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBlMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0NNU0VMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDBlMDAwKSA+PiAxMykKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfQ01TRUxfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMykgJiAweDAwMDBlMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9BVEJTRUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0FUQlNFTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfQVRCU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9BVEJTRUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAzMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0FUQlNFTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMDAzMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfUERfT1NEQUNfQ0FMVFhfQ0FMUEFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9QRF9PU0RBQ19DQUxUWF9DQUxQQV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX1BEX09TREFDX0NBTFRYX0NBTFBBX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfUERfT1NEQUNfQ0FMVFhfQ0FMUEFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwNDAwMDApID4+IDE4KQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9QRF9PU0RBQ19DQUxUWF9DQUxQQV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE4KSAmIDB4MDAwNDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX09GU1RDT1JSSTJWUV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfT0ZTVENPUlJJMlZRX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9PRlNUQ09SUkkyVlFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwZjgwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX09GU1RDT1JSSTJWUV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwZjgwMDAwKSA+PiAxOSkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfT0ZTVENPUlJJMlZRX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOSkgJiAweDAwZjgwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9PRlNUQ09SUkkyVklfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX09GU1RDT1JSSTJWSV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfT0ZTVENPUlJJMlZJX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxZjAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9PRlNUQ09SUkkyVklfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxZjAwMDAwMCkgPj4gMjQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX09GU1RDT1JSSTJWSV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjQpICYgMHgxZjAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfTE9DQUxPRkZTRVRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9MT0NBTE9GRlNFVF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX0xPQ0FMT0ZGU0VUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfTE9DQUxPRkZTRVRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MjAwMDAwMDApID4+IDI5KQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9MT0NBTE9GRlNFVF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI5KSAmIDB4MjAwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX1JBTkdFX09TREFDX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfUkFOR0VfT1NEQUNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMV9SQU5HRV9PU0RBQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGMwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIxX1JBTkdFX09TREFDX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGMwMDAwMDAwKSA+PiAzMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjFfUkFOR0VfT1NEQUNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMCkgJiAweGMwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCMiAqLwotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTQ0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxNDQKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfU1BBUkVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9TUEFSRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX1NQQVJFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGYKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfU1BBUkVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDBmKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9TUEFSRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMGYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX01YUl9ISUdIR0FJTk1BU0tfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfTVhSX0hJR0hHQUlOTUFTS19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9NWFJfSElHSEdBSU5NQVNLX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGYwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX01YUl9ISUdIR0FJTk1BU0tfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDBmMCkgPj4gNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfTVhSX0hJR0hHQUlOTUFTS19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNCkgJiAweDAwMDAwMGYwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9TRUxfVEVTVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX1NFTF9URVNUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfU0VMX1RFU1RfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9TRUxfVEVTVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAzMDApID4+IDgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX1NFTF9URVNUX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwMDMwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfUkNGSUxURVJfQ0FQX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9SQ0ZJTFRFUl9DQVBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX1JDRklMVEVSX0NBUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDdjMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfUkNGSUxURVJfQ0FQX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDdjMDApID4+IDEwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9SQ0ZJTFRFUl9DQVBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEwKSAmIDB4MDAwMDdjMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX09WRVJSSURFX1JDRklMVEVSX0NBUF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfT1ZFUlJJREVfUkNGSUxURVJfQ0FQX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9PVkVSUklERV9SQ0ZJTFRFUl9DQVBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX09WRVJSSURFX1JDRklMVEVSX0NBUF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDA4MDAwKSA+PiAxNSkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfT1ZFUlJJREVfUkNGSUxURVJfQ0FQX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNSkgJiAweDAwMDA4MDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9GTk9UQ0hfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX0ZOT1RDSF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfRk5PVENIX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBmMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9GTk9UQ0hfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDBmMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX0ZOT1RDSF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMDBmMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfT1ZFUlJJREVfRk5PVENIX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9PVkVSUklERV9GTk9UQ0hfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX09WRVJSSURFX0ZOT1RDSF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfT1ZFUlJJREVfRk5PVENIX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAxMDAwMDApID4+IDIwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9PVkVSUklERV9GTk9UQ0hfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIwKSAmIDB4MDAxMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX0ZJTFRFUkZDX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfRklMVEVSRkNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9GSUxURVJGQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzZTAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX0ZJTFRFUkZDX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAzZTAwMDAwKSA+PiAyMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfRklMVEVSRkNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMSkgJiAweDAzZTAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9PVkVSUklERV9GSUxURVJGQ19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX09WRVJSSURFX0ZJTFRFUkZDX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfT1ZFUlJJREVfRklMVEVSRkNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9PVkVSUklERV9GSUxURVJGQ19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwNDAwMDAwMCkgPj4gMjYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX09WRVJSSURFX0ZJTFRFUkZDX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjYpICYgMHgwNDAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfSTJWMlJYT1VUX0VOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9JMlYyUlhPVVRfRU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX0kyVjJSWE9VVF9FTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfSTJWMlJYT1VUX0VOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDgwMDAwMDApID4+IDI3KQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9JMlYyUlhPVVRfRU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI3KSAmIDB4MDgwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX0JRMlJYT1VUX0VOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfQlEyUlhPVVRfRU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9CUTJSWE9VVF9FTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX0JRMlJYT1VUX0VOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEwMDAwMDAwKSA+PiAyOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfQlEyUlhPVVRfRU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyOCkgJiAweDEwMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9SWElOMkkyVl9FTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX1JYSU4ySTJWX0VOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfUlhJTjJJMlZfRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9SWElOMkkyVl9FTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgyMDAwMDAwMCkgPj4gMjkpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX1JYSU4ySTJWX0VOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjkpICYgMHgyMDAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfUlhJTjJCUV9FTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9SWElOMkJRX0VOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX1JYSU4yQlFfRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfUlhJTjJCUV9FTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NDAwMDAwMDApID4+IDMwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9SWElOMkJRX0VOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMwKSAmIDB4NDAwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX1NXSVRDSF9PVkVSUklERV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfU1dJVENIX09WRVJSSURFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX0JCMl9TV0lUQ0hfT1ZFUlJJREVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIyX1NXSVRDSF9PVkVSUklERV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDgwMDAwMDAwKSA+PiAzMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjJfU1dJVENIX09WRVJSSURFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMSkgJiAweDgwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCMyAqLwotI2RlZmluZSBQSFlfQU5BTE9HX0JCM19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTQ4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQkIzX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxNDgKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjNfU1BBUkVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQU5BTE9HX0JCM19TUEFSRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIzX1NQQVJFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGZmZmYKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjNfU1BBUkVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDBmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCM19TUEFSRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMGZmZmYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIzX0ZJTFRFUkZDX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjNfRklMVEVSRkNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQU5BTE9HX0JCM19GSUxURVJGQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMWYwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIzX0ZJTFRFUkZDX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMWYwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjNfT0ZTVENPUlJJMlZRX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQU5BTE9HX0JCM19PRlNUQ09SUkkyVlFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIzX09GU1RDT1JSSTJWUV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDNlMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjNfT0ZTVENPUlJJMlZRX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDNlMDAwMDApID4+IDIxKQotI2RlZmluZSBQSFlfQU5BTE9HX0JCM19PRlNUQ09SUkkyVklfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIzX09GU1RDT1JSSTJWSV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjNfT0ZTVENPUlJJMlZJX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3YzAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX0JCM19PRlNUQ09SUkkyVklfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3YzAwMDAwMCkgPj4gMjYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIzX0VOX1RYQkJDT05TVENVUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjNfRU5fVFhCQkNPTlNUQ1VSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX0JCM19FTl9UWEJCQ09OU1RDVVJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQkIzX0VOX1RYQkJDT05TVENVUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDgwMDAwMDAwKSA+PiAzMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19CQjNfRU5fVFhCQkNPTlNUQ1VSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMSkgJiAweDgwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIFBMTENMS01PREEgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDI4MAotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREFfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjgwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQV9QV0RfUExMU0RNX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBX1BXRF9QTExTRE1fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREFfUFdEX1BMTFNETV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQV9QV0RfUExMU0RNX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMSkgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBX1BXRF9QTExTRE1fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDAxKQotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREFfUFdEUExMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQV9QV0RQTExfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBX1BXRFBMTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREFfUFdEUExMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDIpID4+IDEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQV9QV0RQTExfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEpICYgMHgwMDAwMDAwMikKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBX1BMTEZSQUNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREFfUExMRlJBQ19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQV9QTExGUkFDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMWZmZmMKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBX1BMTEZSQUNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDFmZmZjKSA+PiAyKQotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREFfUExMRlJBQ19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyKSAmIDB4MDAwMWZmZmMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQV9SRUZESVZfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBX1JFRkRJVl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREFfUkVGRElWX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMWUwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQV9SRUZESVZfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMWUwMDAwKSA+PiAxNykKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBX1JFRkRJVl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNykgJiAweDAwMWUwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREFfRElWX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQV9ESVZfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBX0RJVl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3ZmUwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREFfRElWX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3ZmUwMDAwMCkgPj4gMjEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQV9ESVZfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjEpICYgMHg3ZmUwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBX0xPQ0FMX1BMTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREFfTE9DQUxfUExMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQV9MT0NBTF9QTExfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBX0xPQ0FMX1BMTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ODAwMDAwMDApID4+IDMxKQotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREFfTE9DQUxfUExMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMxKSAmIDB4ODAwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgUExMQ0xLTU9EQTIgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBMl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDI4NAotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREEyX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjg0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQTJfU1BBUkVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBMl9TUEFSRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREEyX1NQQVJFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBmCi0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQTJfU1BBUkVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwZikgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBMl9TUEFSRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDBmKQotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREEyX0RBQ1BXRF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQTJfREFDUFdEX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBMl9EQUNQV0RfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREEyX0RBQ1BXRF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMTApID4+IDQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQTJfREFDUFdEX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDQpICYgMHgwMDAwMDAxMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBMl9BRENQV0RfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREEyX0FEQ1BXRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQTJfQURDUFdEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBMl9BRENQV0RfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDIwKSA+PiA1KQotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREEyX0FEQ1BXRF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA1KSAmIDB4MDAwMDAwMjApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQTJfTE9DQUxfQUREQUNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBMl9MT0NBTF9BRERBQ19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREEyX0xPQ0FMX0FEREFDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQTJfTE9DQUxfQUREQUNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDA0MCkgPj4gNikKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBMl9MT0NBTF9BRERBQ19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNikgJiAweDAwMDAwMDQwKQotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREEyX0RBQ19DTEtfU0VMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQTJfREFDX0NMS19TRUxfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBMl9EQUNfQ0xLX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDE4MAotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREEyX0RBQ19DTEtfU0VMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAxODApID4+IDcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQTJfREFDX0NMS19TRUxfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDcpICYgMHgwMDAwMDE4MCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBMl9BRENfQ0xLX1NFTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREEyX0FEQ19DTEtfU0VMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQTJfQURDX0NMS19TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFlMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBMl9BRENfQ0xLX1NFTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAxZTAwKSA+PiA5KQotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREEyX0FEQ19DTEtfU0VMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA5KSAmIDB4MDAwMDFlMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQTJfTE9DQUxfQ0xLTU9EQV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBMl9MT0NBTF9DTEtNT0RBX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREEyX0xPQ0FMX0NMS01PREFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQTJfTE9DQUxfQ0xLTU9EQV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAyMDAwKSA+PiAxMykKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBMl9MT0NBTF9DTEtNT0RBX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMykgJiAweDAwMDAyMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREEyX1BMTEJZUEFTU19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQTJfUExMQllQQVNTX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBMl9QTExCWVBBU1NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREEyX1BMTEJZUEFTU19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwNDAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQTJfUExMQllQQVNTX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwMDAwNDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBMl9MT0NBTF9QTExCWVBBU1NfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREEyX0xPQ0FMX1BMTEJZUEFTU19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQTJfTE9DQUxfUExMQllQQVNTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBMl9MT0NBTF9QTExCWVBBU1NfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDgwMDApID4+IDE1KQotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREEyX0xPQ0FMX1BMTEJZUEFTU19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE1KSAmIDB4MDAwMDgwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQTJfUExMQVRCX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBMl9QTExBVEJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREEyX1BMTEFUQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQTJfUExMQVRCX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDMwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBMl9QTExBVEJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAwMDMwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREEyX1BMTF9TVlJFR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQTJfUExMX1NWUkVHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBMl9QTExfU1ZSRUdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREEyX1BMTF9TVlJFR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDA0MDAwMCkgPj4gMTgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQTJfUExMX1NWUkVHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTgpICYgMHgwMDA0MDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBMl9ISV9GUkVRX0VOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREEyX0hJX0ZSRVFfRU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQTJfSElfRlJFUV9FTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBMl9ISV9GUkVRX0VOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwODAwMDApID4+IDE5KQotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREEyX0hJX0ZSRVFfRU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE5KSAmIDB4MDAwODAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQTJfUlNUX1dBUk1fSU5UX0xfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBMl9SU1RfV0FSTV9JTlRfTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREEyX1JTVF9XQVJNX0lOVF9MX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQTJfUlNUX1dBUk1fSU5UX0xfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMTAwMDAwKSA+PiAyMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBMl9SU1RfV0FSTV9JTlRfTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMCkgJiAweDAwMTAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREEyX1JTVF9XQVJNX09WUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQTJfUlNUX1dBUk1fT1ZSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBMl9SU1RfV0FSTV9PVlJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREEyX1JTVF9XQVJNX09WUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDIwMDAwMCkgPj4gMjEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQTJfUlNUX1dBUk1fT1ZSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjEpICYgMHgwMDIwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBMl9QTExfS1ZDT19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREEyX1BMTF9LVkNPX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQTJfUExMX0tWQ09fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBjMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBMl9QTExfS1ZDT19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDBjMDAwMDApID4+IDIyKQotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREEyX1BMTF9LVkNPX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIyKSAmIDB4MDBjMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQTJfUExMSUNQX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBMl9QTExJQ1BfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREEyX1BMTElDUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQTJfUExMSUNQX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDA3MDAwMDAwKSA+PiAyNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBMl9QTExJQ1BfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNCkgJiAweDA3MDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREEyX1BMTEZJTFRFUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQTJfUExMRklMVEVSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0FOQUxPR19QTExDTEtNT0RBMl9QTExGSUxURVJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmODAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1BMTENMS01PREEyX1BMTEZJTFRFUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhmODAwMDAwMCkgPj4gMjcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUExMQ0xLTU9EQTJfUExMRklMVEVSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjcpICYgMHhmODAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBUT1AgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDI4OAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjg4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX1NQQVJFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfU1BBUkVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9TUEFSRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX1NQQVJFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwNykgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfU1BBUkVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDA3KQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9QV0RCSUFTX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX1BXREJJQVNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfUFdEQklBU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9QV0RCSUFTX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDgpID4+IDMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX1BXREJJQVNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMpICYgMHgwMDAwMDAwOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfRkxJUF9YUEFCSUFTX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9GTElQX1hQQUJJQVNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX0ZMSVBfWFBBQklBU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfRkxJUF9YUEFCSUFTX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDEwKSA+PiA0KQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9GTElQX1hQQUJJQVNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA0KSAmIDB4MDAwMDAwMTApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX1hQQU9OMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfWFBBT04yX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9YUEFPTjJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX1hQQU9OMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAyMCkgPj4gNSkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfWFBBT04yX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNSkgJiAweDAwMDAwMDIwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9YUEFPTjVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX1hQQU9ONV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfWFBBT041X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9YUEFPTjVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwNDApID4+IDYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX1hQQU9ONV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDYpICYgMHgwMDAwMDA0MCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfWFBBU0hPUlQyR05EX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9YUEFTSE9SVDJHTkRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX1hQQVNIT1JUMkdORF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfWFBBU0hPUlQyR05EX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDgwKSA+PiA3KQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9YUEFTSE9SVDJHTkRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA3KSAmIDB4MDAwMDAwODApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX1hQQUJJQVNMVkxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfWFBBQklBU0xWTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9YUEFCSUFTTFZMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwZjAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX1hQQUJJQVNMVkxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMGYwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfWFBBQklBU0xWTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAwZjAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9YUEFCSUFTX0VOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX1hQQUJJQVNfRU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfWFBBQklBU19FTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9YUEFCSUFTX0VOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMTAwMCkgPj4gMTIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX1hQQUJJQVNfRU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTIpICYgMHgwMDAwMTAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfQVRCU0VMRUNUX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9BVEJTRUxFQ1RfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX0FUQlNFTEVDVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfQVRCU0VMRUNUX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDIwMDApID4+IDEzKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9BVEJTRUxFQ1RfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEzKSAmIDB4MDAwMDIwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX0xPQ0FMX1hQQV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfTE9DQUxfWFBBX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9MT0NBTF9YUEFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX0xPQ0FMX1hQQV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDA0MDAwKSA+PiAxNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfTE9DQUxfWFBBX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNCkgJiAweDAwMDA0MDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9YUEFCSUFTX0JZUEFTU19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX1hQQUJJQVNfQllQQVNTX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfWFBBQklBU19CWVBBU1NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9YUEFCSUFTX0JZUEFTU19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwODAwMCkgPj4gMTUpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX1hQQUJJQVNfQllQQVNTX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTUpICYgMHgwMDAwODAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfVEVTVF9QQURRX0VOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9URVNUX1BBRFFfRU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX1RFU1RfUEFEUV9FTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfVEVTVF9QQURRX0VOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMTAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9URVNUX1BBRFFfRU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDAwMTAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX1RFU1RfUEFESV9FTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfVEVTVF9QQURJX0VOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9URVNUX1BBRElfRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX1RFU1RfUEFESV9FTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDIwMDAwKSA+PiAxNykKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfVEVTVF9QQURJX0VOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNykgJiAweDAwMDIwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9URVNUSVFfUlNFTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX1RFU1RJUV9SU0VMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfVEVTVElRX1JTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9URVNUSVFfUlNFTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDA0MDAwMCkgPj4gMTgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX1RFU1RJUV9SU0VMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTgpICYgMHgwMDA0MDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfVEVTVElRX0JVRkVOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9URVNUSVFfQlVGRU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX1RFU1RJUV9CVUZFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfVEVTVElRX0JVRkVOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwODAwMDApID4+IDE5KQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9URVNUSVFfQlVGRU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE5KSAmIDB4MDAwODAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX1BBRDJHTkRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfUEFEMkdORF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9QQUQyR05EX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX1BBRDJHTkRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMTAwMDAwKSA+PiAyMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfUEFEMkdORF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMCkgJiAweDAwMTAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9JTlRIMlBBRF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX0lOVEgyUEFEX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfSU5USDJQQURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9JTlRIMlBBRF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDIwMDAwMCkgPj4gMjEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX0lOVEgyUEFEX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjEpICYgMHgwMDIwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfSU5USDJHTkRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9JTlRIMkdORF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX0lOVEgyR05EX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfSU5USDJHTkRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDA0MDAwMDApID4+IDIyKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9JTlRIMkdORF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIyKSAmIDB4MDA0MDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX0lOVDJQQURfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfSU5UMlBBRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9JTlQyUEFEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX0lOVDJQQURfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwODAwMDAwKSA+PiAyMykKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfSU5UMlBBRF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMykgJiAweDAwODAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9JTlQyR05EX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX0lOVDJHTkRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfSU5UMkdORF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9JTlQyR05EX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMTAwMDAwMCkgPj4gMjQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX0lOVDJHTkRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjQpICYgMHgwMTAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfUFdEUEFMQ0xLX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9QV0RQQUxDTEtfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX1BXRFBBTENMS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfUFdEUEFMQ0xLX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDIwMDAwMDApID4+IDI1KQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9QV0RQQUxDTEtfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI1KSAmIDB4MDIwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX0lOVl9DTEszMjBfQURDX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfSU5WX0NMSzMyMF9BRENfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9JTlZfQ0xLMzIwX0FEQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX0lOVl9DTEszMjBfQURDX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDA0MDAwMDAwKSA+PiAyNikKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfSU5WX0NMSzMyMF9BRENfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNikgJiAweDA0MDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9GTElQX1JFRkNMSzQwX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX0ZMSVBfUkVGQ0xLNDBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfRkxJUF9SRUZDTEs0MF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9GTElQX1JFRkNMSzQwX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwODAwMDAwMCkgPj4gMjcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX0ZMSVBfUkVGQ0xLNDBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjcpICYgMHgwODAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfRkxJUF9QTExDTEszMjBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9GTElQX1BMTENMSzMyMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX0ZMSVBfUExMQ0xLMzIwX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfRkxJUF9QTExDTEszMjBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MTAwMDAwMDApID4+IDI4KQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9GTElQX1BMTENMSzMyMF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI4KSAmIDB4MTAwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX0ZMSVBfUExMQ0xLMTYwX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfRkxJUF9QTExDTEsxNjBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9GTElQX1BMTENMSzE2MF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX0ZMSVBfUExMQ0xLMTYwX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDIwMDAwMDAwKSA+PiAyOSkKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfRkxJUF9QTExDTEsxNjBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyOSkgJiAweDIwMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9DTEtfU0VMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX0NMS19TRUxfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0FOQUxPR19UT1BfQ0xLX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjMDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RPUF9DTEtfU0VMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhjMDAwMDAwMCkgPj4gMzApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVE9QX0NMS19TRUxfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMzApICYgMHhjMDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBUSEVSTSAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1RIRVJNX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjhjCi0jZGVmaW5lIFBIWV9BTkFMT0dfVEhFUk1fT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyOGMKLSNkZWZpbmUgUEhZX0FOQUxPR19USEVSTV9MT1JFR19MVkxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQU5BTE9HX1RIRVJNX0xPUkVHX0xWTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVEhFUk1fTE9SRUdfTFZMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKLSNkZWZpbmUgUEhZX0FOQUxPR19USEVSTV9MT1JFR19MVkxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDA3KSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RIRVJNX0xPUkVHX0xWTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDcpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVEhFUk1fUkZSRUdfTFZMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0FOQUxPR19USEVSTV9SRlJFR19MVkxfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQU5BTE9HX1RIRVJNX1JGUkVHX0xWTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVEhFUk1fUkZSRUdfTFZMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAzOCkgPj4gMykKLSNkZWZpbmUgUEhZX0FOQUxPR19USEVSTV9SRlJFR19MVkxfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMykgJiAweDAwMDAwMDM4KQotI2RlZmluZSBQSFlfQU5BTE9HX1RIRVJNX1NBUl9BRENfRE9ORV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVEhFUk1fU0FSX0FEQ19ET05FX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0FOQUxPR19USEVSTV9TQVJfQURDX0RPTkVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAotI2RlZmluZSBQSFlfQU5BTE9HX1RIRVJNX1NBUl9BRENfRE9ORV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwNDApID4+IDYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVEhFUk1fU0FSX0FEQ19PVVRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0FOQUxPR19USEVSTV9TQVJfQURDX09VVF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQU5BTE9HX1RIRVJNX1NBUl9BRENfT1VUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA3ZjgwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVEhFUk1fU0FSX0FEQ19PVVRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwN2Y4MCkgPj4gNykKLSNkZWZpbmUgUEhZX0FOQUxPR19USEVSTV9TQVJfREFDVEVTVF9DT0RFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBQSFlfQU5BTE9HX1RIRVJNX1NBUl9EQUNURVNUX0NPREVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVEhFUk1fU0FSX0RBQ1RFU1RfQ09ERV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA3ZjgwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19USEVSTV9TQVJfREFDVEVTVF9DT0RFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDA3ZjgwMDApID4+IDE1KQotI2RlZmluZSBQSFlfQU5BTE9HX1RIRVJNX1NBUl9EQUNURVNUX0NPREVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE1KSAmIDB4MDA3ZjgwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVEhFUk1fU0FSX0RBQ1RFU1RfRU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0FOQUxPR19USEVSTV9TQVJfREFDVEVTVF9FTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQU5BTE9HX1RIRVJNX1NBUl9EQUNURVNUX0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVEhFUk1fU0FSX0RBQ1RFU1RfRU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwODAwMDAwKSA+PiAyMykKLSNkZWZpbmUgUEhZX0FOQUxPR19USEVSTV9TQVJfREFDVEVTVF9FTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMykgJiAweDAwODAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RIRVJNX1NBUl9BRENDQUxfRU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVEhFUk1fU0FSX0FEQ0NBTF9FTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0FOQUxPR19USEVSTV9TQVJfQURDQ0FMX0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RIRVJNX1NBUl9BRENDQUxfRU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMTAwMDAwMCkgPj4gMjQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVEhFUk1fU0FSX0FEQ0NBTF9FTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjQpICYgMHgwMTAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19USEVSTV9USEVSTVNFTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQU5BTE9HX1RIRVJNX1RIRVJNU0VMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVEhFUk1fVEhFUk1TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19USEVSTV9USEVSTVNFTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDYwMDAwMDApID4+IDI1KQotI2RlZmluZSBQSFlfQU5BTE9HX1RIRVJNX1RIRVJNU0VMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI1KSAmIDB4MDYwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVEhFUk1fU0FSX1NMT1dfRU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0FOQUxPR19USEVSTV9TQVJfU0xPV19FTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQU5BTE9HX1RIRVJNX1NBUl9TTE9XX0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVEhFUk1fU0FSX1NMT1dfRU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDA4MDAwMDAwKSA+PiAyNykKLSNkZWZpbmUgUEhZX0FOQUxPR19USEVSTV9TQVJfU0xPV19FTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNykgJiAweDA4MDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RIRVJNX1RIRVJNU1RBUlRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVEhFUk1fVEhFUk1TVEFSVF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0FOQUxPR19USEVSTV9USEVSTVNUQVJUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RIRVJNX1RIRVJNU1RBUlRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxMDAwMDAwMCkgPj4gMjgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVEhFUk1fVEhFUk1TVEFSVF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjgpICYgMHgxMDAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19USEVSTV9TQVJfQVVUT1BXRF9FTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQU5BTE9HX1RIRVJNX1NBUl9BVVRPUFdEX0VOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVEhFUk1fU0FSX0FVVE9QV0RfRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19USEVSTV9TQVJfQVVUT1BXRF9FTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MjAwMDAwMDApID4+IDI5KQotI2RlZmluZSBQSFlfQU5BTE9HX1RIRVJNX1NBUl9BVVRPUFdEX0VOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI5KSAmIDB4MjAwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVEhFUk1fVEhFUk1PTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0FOQUxPR19USEVSTV9USEVSTU9OX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQU5BTE9HX1RIRVJNX1RIRVJNT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVEhFUk1fVEhFUk1PTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDQwMDAwMDAwKSA+PiAzMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19USEVSTV9USEVSTU9OX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMCkgJiAweDQwMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RIRVJNX0xPQ0FMX1RIRVJNX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfVEhFUk1fTE9DQUxfVEhFUk1fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19USEVSTV9MT0NBTF9USEVSTV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RIRVJNX0xPQ0FMX1RIRVJNX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg4MDAwMDAwMCkgPj4gMzEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVEhFUk1fTE9DQUxfVEhFUk1fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMzEpICYgMHg4MDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBYVEFMICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfWFRBTF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyOTAKLSNkZWZpbmUgUEhZX0FOQUxPR19YVEFMX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDI5MAotI2RlZmluZSBQSFlfQU5BTE9HX1hUQUxfU1BBUkVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfWFRBTF9TUEFSRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19YVEFMX1NQQVJFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzZgotI2RlZmluZSBQSFlfQU5BTE9HX1hUQUxfU1BBUkVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwM2YpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfWFRBTF9TUEFSRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAzZikKLSNkZWZpbmUgUEhZX0FOQUxPR19YVEFMX1hUQUxfTk9UQ1hPREVUX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQU5BTE9HX1hUQUxfWFRBTF9OT1RDWE9ERVRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfWFRBTF9YVEFMX05PVENYT0RFVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgUEhZX0FOQUxPR19YVEFMX1hUQUxfTk9UQ1hPREVUX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDQwKSA+PiA2KQotI2RlZmluZSBQSFlfQU5BTE9HX1hUQUxfWFRBTF9OT1RDWE9ERVRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA2KSAmIDB4MDAwMDAwNDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfWFRBTF9MT0NBTEJJQVMyWF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0FOQUxPR19YVEFMX0xPQ0FMQklBUzJYX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQU5BTE9HX1hUQUxfTE9DQUxCSUFTMlhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIFBIWV9BTkFMT0dfWFRBTF9MT0NBTEJJQVMyWF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDA4MCkgPj4gNykKLSNkZWZpbmUgUEhZX0FOQUxPR19YVEFMX0xPQ0FMQklBUzJYX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNykgJiAweDAwMDAwMDgwKQotI2RlZmluZSBQSFlfQU5BTE9HX1hUQUxfTE9DQUxfWFRBTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfWFRBTF9MT0NBTF9YVEFMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19YVEFMX0xPQ0FMX1hUQUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAotI2RlZmluZSBQSFlfQU5BTE9HX1hUQUxfTE9DQUxfWFRBTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAxMDApID4+IDgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfWFRBTF9MT0NBTF9YVEFMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwMDEwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19YVEFMX1hUQUxfUFdEQ0xLSU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQU5BTE9HX1hUQUxfWFRBTF9QV0RDTEtJTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfWFRBTF9YVEFMX1BXRENMS0lOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19YVEFMX1hUQUxfUFdEQ0xLSU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMjAwKSA+PiA5KQotI2RlZmluZSBQSFlfQU5BTE9HX1hUQUxfWFRBTF9QV0RDTEtJTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA5KSAmIDB4MDAwMDAyMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfWFRBTF9YVEFMX09TQ09OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19YVEFMX1hUQUxfT1NDT05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1hUQUxfWFRBTF9PU0NPTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfWFRBTF9YVEFMX09TQ09OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwNDAwKSA+PiAxMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19YVEFMX1hUQUxfT1NDT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMCkgJiAweDAwMDAwNDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1hUQUxfWFRBTF9QV0RDTEtEX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9BTkFMT0dfWFRBTF9YVEFMX1BXRENMS0RfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0FOQUxPR19YVEFMX1hUQUxfUFdEQ0xLRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAotI2RlZmluZSBQSFlfQU5BTE9HX1hUQUxfWFRBTF9QV0RDTEtEX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDgwMCkgPj4gMTEpCi0jZGVmaW5lIFBIWV9BTkFMT0dfWFRBTF9YVEFMX1BXRENMS0RfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTEpICYgMHgwMDAwMDgwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19YVEFMX1hUQUxfTE9DQUxCSUFTX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQU5BTE9HX1hUQUxfWFRBTF9MT0NBTEJJQVNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9BTkFMT0dfWFRBTF9YVEFMX0xPQ0FMQklBU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19YVEFMX1hUQUxfTE9DQUxCSUFTX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDEwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQU5BTE9HX1hUQUxfWFRBTF9MT0NBTEJJQVNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEyKSAmIDB4MDAwMDEwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfWFRBTF9YVEFMX1NIUlRYSU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0FOQUxPR19YVEFMX1hUQUxfU0hSVFhJTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQU5BTE9HX1hUQUxfWFRBTF9TSFJUWElOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfWFRBTF9YVEFMX1NIUlRYSU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAyMDAwKSA+PiAxMykKLSNkZWZpbmUgUEhZX0FOQUxPR19YVEFMX1hUQUxfU0hSVFhJTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMykgJiAweDAwMDAyMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1hUQUxfWFRBTF9EUlZTVFJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfWFRBTF9YVEFMX0RSVlNUUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0FOQUxPR19YVEFMX1hUQUxfRFJWU1RSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYzAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1hUQUxfWFRBTF9EUlZTVFJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwYzAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfWFRBTF9YVEFMX0RSVlNUUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwMDAwYzAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19YVEFMX1hUQUxfQ0FQT1VUREFDX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBQSFlfQU5BTE9HX1hUQUxfWFRBTF9DQVBPVVREQUNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfWFRBTF9YVEFMX0NBUE9VVERBQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA3ZjAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19YVEFMX1hUQUxfQ0FQT1VUREFDX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDA3ZjAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQU5BTE9HX1hUQUxfWFRBTF9DQVBPVVREQUNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDA3ZjAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfWFRBTF9YVEFMX0NBUElOREFDX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0FOQUxPR19YVEFMX1hUQUxfQ0FQSU5EQUNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQU5BTE9HX1hUQUxfWFRBTF9DQVBJTkRBQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNmODAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfWFRBTF9YVEFMX0NBUElOREFDX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDNmODAwMDAwKSA+PiAyMykKLSNkZWZpbmUgUEhZX0FOQUxPR19YVEFMX1hUQUxfQ0FQSU5EQUNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMykgJiAweDNmODAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1hUQUxfWFRBTF9CSUFTMlhfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9BTkFMT0dfWFRBTF9YVEFMX0JJQVMyWF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0FOQUxPR19YVEFMX1hUQUxfQklBUzJYX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1hUQUxfWFRBTF9CSUFTMlhfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg0MDAwMDAwMCkgPj4gMzApCi0jZGVmaW5lIFBIWV9BTkFMT0dfWFRBTF9YVEFMX0JJQVMyWF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMzApICYgMHg0MDAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19YVEFMX1RDWE9ERVRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1hUQUxfVENYT0RFVF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfWFRBTF9UQ1hPREVUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19YVEFMX1RDWE9ERVRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ODAwMDAwMDApID4+IDMxKQotCi0vKiBtYWNyb3MgZm9yIHJiaXN0X2NudHJsICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzODAKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDM4MAotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9UT05FR0VOX0RDX0VOQUJMRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX1RPTkVHRU5fRENfRU5BQkxFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfVE9ORUdFTl9EQ19FTkFCTEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9UT05FR0VOX0RDX0VOQUJMRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDEpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX1RPTkVHRU5fRENfRU5BQkxFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfVE9ORUdFTl9UT05FMF9FTkFCTEVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9UT05FR0VOX1RPTkUwX0VOQUJMRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX1RPTkVHRU5fVE9ORTBfRU5BQkxFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfVE9ORUdFTl9UT05FMF9FTkFCTEVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAyKSA+PiAxKQotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9UT05FR0VOX1RPTkUwX0VOQUJMRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxKSAmIDB4MDAwMDAwMDIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX1RPTkVHRU5fVE9ORTFfRU5BQkxFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfVE9ORUdFTl9UT05FMV9FTkFCTEVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9UT05FR0VOX1RPTkUxX0VOQUJMRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX1RPTkVHRU5fVE9ORTFfRU5BQkxFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwNCkgPj4gMikKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfVE9ORUdFTl9UT05FMV9FTkFCTEVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMikgJiAweDAwMDAwMDA0KQotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9UT05FR0VOX0xGVE9ORTBfRU5BQkxFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX1RPTkVHRU5fTEZUT05FMF9FTkFCTEVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfVE9ORUdFTl9MRlRPTkUwX0VOQUJMRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9UT05FR0VOX0xGVE9ORTBfRU5BQkxFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDgpID4+IDMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX1RPTkVHRU5fTEZUT05FMF9FTkFCTEVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMpICYgMHgwMDAwMDAwOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfVE9ORUdFTl9MSU5SQU1QX0VOQUJMRV9JX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9UT05FR0VOX0xJTlJBTVBfRU5BQkxFX0lfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX1RPTkVHRU5fTElOUkFNUF9FTkFCTEVfSV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfVE9ORUdFTl9MSU5SQU1QX0VOQUJMRV9JX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDEwKSA+PiA0KQotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9UT05FR0VOX0xJTlJBTVBfRU5BQkxFX0lfU0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA0KSAmIDB4MDAwMDAwMTApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX1RPTkVHRU5fTElOUkFNUF9FTkFCTEVfUV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfVE9ORUdFTl9MSU5SQU1QX0VOQUJMRV9RX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9UT05FR0VOX0xJTlJBTVBfRU5BQkxFX1FfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX1RPTkVHRU5fTElOUkFNUF9FTkFCTEVfUV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAyMCkgPj4gNSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfVE9ORUdFTl9MSU5SQU1QX0VOQUJMRV9RX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNSkgJiAweDAwMDAwMDIwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9UT05FR0VOX1BSQlNfRU5BQkxFX0lfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX1RPTkVHRU5fUFJCU19FTkFCTEVfSV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfVE9ORUdFTl9QUkJTX0VOQUJMRV9JX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9UT05FR0VOX1BSQlNfRU5BQkxFX0lfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwNDApID4+IDYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX1RPTkVHRU5fUFJCU19FTkFCTEVfSV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDYpICYgMHgwMDAwMDA0MCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfVE9ORUdFTl9QUkJTX0VOQUJMRV9RX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9UT05FR0VOX1BSQlNfRU5BQkxFX1FfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX1RPTkVHRU5fUFJCU19FTkFCTEVfUV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfVE9ORUdFTl9QUkJTX0VOQUJMRV9RX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDgwKSA+PiA3KQotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9UT05FR0VOX1BSQlNfRU5BQkxFX1FfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA3KSAmIDB4MDAwMDAwODApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX0NNQUNfRENfV1JJVEVfVE9fQ0FOQ0VMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfQ01BQ19EQ19XUklURV9UT19DQU5DRUxfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9DTUFDX0RDX1dSSVRFX1RPX0NBTkNFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX0NNQUNfRENfV1JJVEVfVE9fQ0FOQ0VMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDEwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfQ01BQ19EQ19XUklURV9UT19DQU5DRUxfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAwMTAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9DTUFDX0RDX0VOQUJMRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX0NNQUNfRENfRU5BQkxFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfQ01BQ19EQ19FTkFCTEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9DTUFDX0RDX0VOQUJMRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAyMDApID4+IDkpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX0NNQUNfRENfRU5BQkxFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDkpICYgMHgwMDAwMDIwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfQ01BQ19DT1JSX0VOQUJMRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9DTUFDX0NPUlJfRU5BQkxFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX0NNQUNfQ09SUl9FTkFCTEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfQ01BQ19DT1JSX0VOQUJMRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDA0MDApID4+IDEwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9DTUFDX0NPUlJfRU5BQkxFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEwKSAmIDB4MDAwMDA0MDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX0NNQUNfUE9XRVJfRU5BQkxFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfQ01BQ19QT1dFUl9FTkFCTEVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9DTUFDX1BPV0VSX0VOQUJMRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX0NNQUNfUE9XRVJfRU5BQkxFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwODAwKSA+PiAxMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfQ01BQ19QT1dFUl9FTkFCTEVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMSkgJiAweDAwMDAwODAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9DTUFDX0lRX0VOQUJMRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX0NNQUNfSVFfRU5BQkxFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfQ01BQ19JUV9FTkFCTEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9DTUFDX0lRX0VOQUJMRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMTAwMCkgPj4gMTIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX0NNQUNfSVFfRU5BQkxFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTIpICYgMHgwMDAwMTAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfQ01BQ19JMlEyX0VOQUJMRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9DTUFDX0kyUTJfRU5BQkxFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX0NNQUNfSTJRMl9FTkFCTEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfQ01BQ19JMlEyX0VOQUJMRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDIwMDApID4+IDEzKQotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9DTUFDX0kyUTJfRU5BQkxFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEzKSAmIDB4MDAwMDIwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX0NNQUNfUE9XRVJfSFBGX0VOQUJMRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfQ01BQ19QT1dFUl9IUEZfRU5BQkxFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9DTUFDX1BPV0VSX0hQRl9FTkFCTEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX0NNQUNfUE9XRVJfSFBGX0VOQUJMRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDA0MDAwKSA+PiAxNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfQ01BQ19QT1dFUl9IUEZfRU5BQkxFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNCkgJiAweDAwMDA0MDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9SWERBQ19DQUxJQlJBVEVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX1JYREFDX0NBTElCUkFURV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfUlhEQUNfQ0FMSUJSQVRFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9SWERBQ19DQUxJQlJBVEVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwODAwMCkgPj4gMTUpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX1JYREFDX0NBTElCUkFURV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTUpICYgMHgwMDAwODAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfUkJJU1RfRU5BQkxFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9SQklTVF9FTkFCTEVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX1JCSVNUX0VOQUJMRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfUkJJU1RfRU5BQkxFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMTAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9SQklTVF9FTkFCTEVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDAwMTAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX0FEQ19DTEtfSU5WRVJUX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfQURDX0NMS19JTlZFUlRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQU5BTE9HX1JCSVNUX0NOVFJMX0FURV9BRENfQ0xLX0lOVkVSVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUkJJU1RfQ05UUkxfQVRFX0FEQ19DTEtfSU5WRVJUX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDIwMDAwKSA+PiAxNykKLSNkZWZpbmUgUEhZX0FOQUxPR19SQklTVF9DTlRSTF9BVEVfQURDX0NMS19JTlZFUlRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNykgJiAweDAwMDIwMDAwKQotCi0vKiBtYWNyb3MgZm9yIHR4X2RjX29mZnNldCAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0RDX09GRlNFVF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzg0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfRENfT0ZGU0VUX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzODQKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9EQ19PRkZTRVRfQVRFX1RPTkVHRU5fRENfSV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0RDX09GRlNFVF9BVEVfVE9ORUdFTl9EQ19JX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfRENfT0ZGU0VUX0FURV9UT05FR0VOX0RDX0lfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3ZmYKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9EQ19PRkZTRVRfQVRFX1RPTkVHRU5fRENfSV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwN2ZmKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0RDX09GRlNFVF9BVEVfVE9ORUdFTl9EQ19JX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDA3ZmYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfRENfT0ZGU0VUX0FURV9UT05FR0VOX0RDX1FfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9EQ19PRkZTRVRfQVRFX1RPTkVHRU5fRENfUV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0RDX09GRlNFVF9BVEVfVE9ORUdFTl9EQ19RX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3ZmYwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfRENfT0ZGU0VUX0FURV9UT05FR0VOX0RDX1FfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDA3ZmYwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9EQ19PRkZTRVRfQVRFX1RPTkVHRU5fRENfUV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDA3ZmYwMDAwKQotCi0vKiBtYWNyb3MgZm9yIHR4X3RvbmVnZW4wICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfVE9ORUdFTjBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzODgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9UT05FR0VOMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDM4OAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1RPTkVHRU4wX0FURV9UT05FR0VOX1RPTkVfRlJFUV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfVE9ORUdFTjBfQVRFX1RPTkVHRU5fVE9ORV9GUkVRX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9UT05FR0VOMF9BVEVfVE9ORUdFTl9UT05FX0ZSRVFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3ZgotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1RPTkVHRU4wX0FURV9UT05FR0VOX1RPTkVfRlJFUV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwN2YpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfVE9ORUdFTjBfQVRFX1RPTkVHRU5fVE9ORV9GUkVRX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDA3ZikKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9UT05FR0VOMF9BVEVfVE9ORUdFTl9UT05FX0FfRVhQX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1RPTkVHRU4wX0FURV9UT05FR0VOX1RPTkVfQV9FWFBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfVE9ORUdFTjBfQVRFX1RPTkVHRU5fVE9ORV9BX0VYUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBmMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9UT05FR0VOMF9BVEVfVE9ORUdFTl9UT05FX0FfRVhQX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwZjAwKSA+PiA4KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1RPTkVHRU4wX0FURV9UT05FR0VOX1RPTkVfQV9FWFBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDBmMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfVE9ORUdFTjBfQVRFX1RPTkVHRU5fVE9ORV9BX01BTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9UT05FR0VOMF9BVEVfVE9ORUdFTl9UT05FX0FfTUFOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1RPTkVHRU4wX0FURV9UT05FR0VOX1RPTkVfQV9NQU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwZmYwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfVE9ORUdFTjBfQVRFX1RPTkVHRU5fVE9ORV9BX01BTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwZmYwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9UT05FR0VOMF9BVEVfVE9ORUdFTl9UT05FX0FfTUFOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAwZmYwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1RPTkVHRU4wX0FURV9UT05FR0VOX1RPTkVfVEFVX0tfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfVE9ORUdFTjBfQVRFX1RPTkVHRU5fVE9ORV9UQVVfS19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9UT05FR0VOMF9BVEVfVE9ORUdFTl9UT05FX1RBVV9LX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3ZjAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1RPTkVHRU4wX0FURV9UT05FR0VOX1RPTkVfVEFVX0tfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3ZjAwMDAwMCkgPj4gMjQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfVE9ORUdFTjBfQVRFX1RPTkVHRU5fVE9ORV9UQVVfS19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjQpICYgMHg3ZjAwMDAwMCkKLQotLyogbWFjcm9zIGZvciB0eF90b25lZ2VuMSAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1RPTkVHRU4xX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzhjCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfVE9ORUdFTjFfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzOGMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9UT05FR0VOMV9BVEVfVE9ORUdFTl9UT05FX0ZSRVFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1RPTkVHRU4xX0FURV9UT05FR0VOX1RPTkVfRlJFUV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfVE9ORUdFTjFfQVRFX1RPTkVHRU5fVE9ORV9GUkVRX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN2YKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9UT05FR0VOMV9BVEVfVE9ORUdFTl9UT05FX0ZSRVFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDdmKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1RPTkVHRU4xX0FURV9UT05FR0VOX1RPTkVfRlJFUV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwN2YpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfVE9ORUdFTjFfQVRFX1RPTkVHRU5fVE9ORV9BX0VYUF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9UT05FR0VOMV9BVEVfVE9ORUdFTl9UT05FX0FfRVhQX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1RPTkVHRU4xX0FURV9UT05FR0VOX1RPTkVfQV9FWFBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwZjAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfVE9ORUdFTjFfQVRFX1RPTkVHRU5fVE9ORV9BX0VYUF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMGYwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9UT05FR0VOMV9BVEVfVE9ORUdFTl9UT05FX0FfRVhQX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAwZjAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1RPTkVHRU4xX0FURV9UT05FR0VOX1RPTkVfQV9NQU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfVE9ORUdFTjFfQVRFX1RPTkVHRU5fVE9ORV9BX01BTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9UT05FR0VOMV9BVEVfVE9ORUdFTl9UT05FX0FfTUFOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMGZmMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1RPTkVHRU4xX0FURV9UT05FR0VOX1RPTkVfQV9NQU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMGZmMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfVE9ORUdFTjFfQVRFX1RPTkVHRU5fVE9ORV9BX01BTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMGZmMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9UT05FR0VOMV9BVEVfVE9ORUdFTl9UT05FX1RBVV9LX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1RPTkVHRU4xX0FURV9UT05FR0VOX1RPTkVfVEFVX0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfVE9ORUdFTjFfQVRFX1RPTkVHRU5fVE9ORV9UQVVfS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N2YwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9UT05FR0VOMV9BVEVfVE9ORUdFTl9UT05FX1RBVV9LX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N2YwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1RPTkVHRU4xX0FURV9UT05FR0VOX1RPTkVfVEFVX0tfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI0KSAmIDB4N2YwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgdHhfbGZ0b25lZ2VuMCAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xGVE9ORUdFTjBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzkwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTEZUT05FR0VOMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzOTAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MRlRPTkVHRU4wX0FURV9UT05FR0VOX1RPTkVfRlJFUV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xGVE9ORUdFTjBfQVRFX1RPTkVHRU5fVE9ORV9GUkVRX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTEZUT05FR0VOMF9BVEVfVE9ORUdFTl9UT05FX0ZSRVFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN2YKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MRlRPTkVHRU4wX0FURV9UT05FR0VOX1RPTkVfRlJFUV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDdmKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xGVE9ORUdFTjBfQVRFX1RPTkVHRU5fVE9ORV9GUkVRX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwN2YpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTEZUT05FR0VOMF9BVEVfVE9ORUdFTl9UT05FX0FfRVhQX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MRlRPTkVHRU4wX0FURV9UT05FR0VOX1RPTkVfQV9FWFBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xGVE9ORUdFTjBfQVRFX1RPTkVHRU5fVE9ORV9BX0VYUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwZjAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTEZUT05FR0VOMF9BVEVfVE9ORUdFTl9UT05FX0FfRVhQX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMGYwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MRlRPTkVHRU4wX0FURV9UT05FR0VOX1RPTkVfQV9FWFBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAwZjAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xGVE9ORUdFTjBfQVRFX1RPTkVHRU5fVE9ORV9BX01BTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTEZUT05FR0VOMF9BVEVfVE9ORUdFTl9UT05FX0FfTUFOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MRlRPTkVHRU4wX0FURV9UT05FR0VOX1RPTkVfQV9NQU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMGZmMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xGVE9ORUdFTjBfQVRFX1RPTkVHRU5fVE9ORV9BX01BTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMGZmMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTEZUT05FR0VOMF9BVEVfVE9ORUdFTl9UT05FX0FfTUFOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMGZmMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MRlRPTkVHRU4wX0FURV9UT05FR0VOX1RPTkVfVEFVX0tfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xGVE9ORUdFTjBfQVRFX1RPTkVHRU5fVE9ORV9UQVVfS19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTEZUT05FR0VOMF9BVEVfVE9ORUdFTl9UT05FX1RBVV9LX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N2YwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MRlRPTkVHRU4wX0FURV9UT05FR0VOX1RPTkVfVEFVX0tfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N2YwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xGVE9ORUdFTjBfQVRFX1RPTkVHRU5fVE9ORV9UQVVfS19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI0KSAmIDB4N2YwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgdHhfbGluZWFyX3JhbXBfaSAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xJTkVBUl9SQU1QX0lfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzk0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTElORUFSX1JBTVBfSV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzOTQKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MSU5FQVJfUkFNUF9JX0FURV9UT05FR0VOX0xJTlJBTVBfSU5JVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xJTkVBUl9SQU1QX0lfQVRFX1RPTkVHRU5fTElOUkFNUF9JTklUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTElORUFSX1JBTVBfSV9BVEVfVE9ORUdFTl9MSU5SQU1QX0lOSVRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3ZmYKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MSU5FQVJfUkFNUF9JX0FURV9UT05FR0VOX0xJTlJBTVBfSU5JVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwN2ZmKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xJTkVBUl9SQU1QX0lfQVRFX1RPTkVHRU5fTElOUkFNUF9JTklUX1NFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDA3ZmYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTElORUFSX1JBTVBfSV9BVEVfVE9ORUdFTl9MSU5SQU1QX0RXRUxMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MSU5FQVJfUkFNUF9JX0FURV9UT05FR0VOX0xJTlJBTVBfRFdFTExfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xJTkVBUl9SQU1QX0lfQVRFX1RPTkVHRU5fTElOUkFNUF9EV0VMTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwM2ZmMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTElORUFSX1JBTVBfSV9BVEVfVE9ORUdFTl9MSU5SQU1QX0RXRUxMX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwM2ZmMDAwKSA+PiAxMikKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MSU5FQVJfUkFNUF9JX0FURV9UT05FR0VOX0xJTlJBTVBfRFdFTExfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMikgJiAweDAwM2ZmMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xJTkVBUl9SQU1QX0lfQVRFX1RPTkVHRU5fTElOUkFNUF9TVEVQX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTElORUFSX1JBTVBfSV9BVEVfVE9ORUdFTl9MSU5SQU1QX1NURVBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MSU5FQVJfUkFNUF9JX0FURV9UT05FR0VOX0xJTlJBTVBfU1RFUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzZjAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xJTkVBUl9SQU1QX0lfQVRFX1RPTkVHRU5fTElOUkFNUF9TVEVQX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzZjAwMDAwMCkgPj4gMjQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTElORUFSX1JBTVBfSV9BVEVfVE9ORUdFTl9MSU5SQU1QX1NURVBfU0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjQpICYgMHgzZjAwMDAwMCkKLQotLyogbWFjcm9zIGZvciB0eF9saW5lYXJfcmFtcF9xICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTElORUFSX1JBTVBfUV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzOTgKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MSU5FQVJfUkFNUF9RX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDM5OAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xJTkVBUl9SQU1QX1FfQVRFX1RPTkVHRU5fTElOUkFNUF9JTklUX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTElORUFSX1JBTVBfUV9BVEVfVE9ORUdFTl9MSU5SQU1QX0lOSVRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MSU5FQVJfUkFNUF9RX0FURV9UT05FR0VOX0xJTlJBTVBfSU5JVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDdmZgotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xJTkVBUl9SQU1QX1FfQVRFX1RPTkVHRU5fTElOUkFNUF9JTklUX0dFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDA3ZmYpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTElORUFSX1JBTVBfUV9BVEVfVE9ORUdFTl9MSU5SQU1QX0lOSVRfU0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDdmZikKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MSU5FQVJfUkFNUF9RX0FURV9UT05FR0VOX0xJTlJBTVBfRFdFTExfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xJTkVBUl9SQU1QX1FfQVRFX1RPTkVHRU5fTElOUkFNUF9EV0VMTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTElORUFSX1JBTVBfUV9BVEVfVE9ORUdFTl9MSU5SQU1QX0RXRUxMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzZmYwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MSU5FQVJfUkFNUF9RX0FURV9UT05FR0VOX0xJTlJBTVBfRFdFTExfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAzZmYwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xJTkVBUl9SQU1QX1FfQVRFX1RPTkVHRU5fTElOUkFNUF9EV0VMTF9TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEyKSAmIDB4MDAzZmYwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTElORUFSX1JBTVBfUV9BVEVfVE9ORUdFTl9MSU5SQU1QX1NURVBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MSU5FQVJfUkFNUF9RX0FURV9UT05FR0VOX0xJTlJBTVBfU1RFUF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX0xJTkVBUl9SQU1QX1FfQVRFX1RPTkVHRU5fTElOUkFNUF9TVEVQX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNmMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfTElORUFSX1JBTVBfUV9BVEVfVE9ORUdFTl9MSU5SQU1QX1NURVBfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDNmMDAwMDAwKSA+PiAyNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9MSU5FQVJfUkFNUF9RX0FURV9UT05FR0VOX0xJTlJBTVBfU1RFUF9TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNCkgJiAweDNmMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIHR4X3ByYnNfbWFnICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfUFJCU19NQUdfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzOWMKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9QUkJTX01BR19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDM5YwotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1BSQlNfTUFHX0FURV9UT05FR0VOX1BSQlNfTUFHTklUVURFX0lfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfUFJCU19NQUdfQVRFX1RPTkVHRU5fUFJCU19NQUdOSVRVREVfSV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9QUkJTX01BR19BVEVfVE9ORUdFTl9QUkJTX01BR05JVFVERV9JX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNmZgotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1BSQlNfTUFHX0FURV9UT05FR0VOX1BSQlNfTUFHTklUVURFX0lfR0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAzZmYpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfUFJCU19NQUdfQVRFX1RPTkVHRU5fUFJCU19NQUdOSVRVREVfSV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDNmZikKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9QUkJTX01BR19BVEVfVE9ORUdFTl9QUkJTX01BR05JVFVERV9RX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1BSQlNfTUFHX0FURV9UT05FR0VOX1BSQlNfTUFHTklUVURFX1FfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfUFJCU19NQUdfQVRFX1RPTkVHRU5fUFJCU19NQUdOSVRVREVfUV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDNmZjAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9QUkJTX01BR19BVEVfVE9ORUdFTl9QUkJTX01BR05JVFVERV9RX0dFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDNmZjAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1BSQlNfTUFHX0FURV9UT05FR0VOX1BSQlNfTUFHTklUVURFX1FfU0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDNmZjAwMDApCi0KLS8qIG1hY3JvcyBmb3IgdHhfcHJic19zZWVkX2kgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9QUkJTX1NFRURfSV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNhMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1BSQlNfU0VFRF9JX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM2EwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfUFJCU19TRUVEX0lfQVRFX1RPTkVHRU5fUFJCU19TRUVEX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9QUkJTX1NFRURfSV9BVEVfVE9ORUdFTl9QUkJTX1NFRURfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1BSQlNfU0VFRF9JX0FURV9UT05FR0VOX1BSQlNfU0VFRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdmZmZmZmZmCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfUFJCU19TRUVEX0lfQVRFX1RPTkVHRU5fUFJCU19TRUVEX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3ZmZmZmZmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9QUkJTX1NFRURfSV9BVEVfVE9ORUdFTl9QUkJTX1NFRURfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDdmZmZmZmZmKQotCi0vKiBtYWNyb3MgZm9yIHR4X3ByYnNfc2VlZF9xICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfUFJCU19TRUVEX1FfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzYTQKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9QUkJTX1NFRURfUV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNhNAotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1BSQlNfU0VFRF9RX0FURV9UT05FR0VOX1BSQlNfU0VFRF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfUFJCU19TRUVEX1FfQVRFX1RPTkVHRU5fUFJCU19TRUVEX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19UWF9QUkJTX1NFRURfUV9BVEVfVE9ORUdFTl9QUkJTX1NFRURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3ZmZmZmZmZgotI2RlZmluZSBQSFlfQU5BTE9HX1RYX1BSQlNfU0VFRF9RX0FURV9UT05FR0VOX1BSQlNfU0VFRF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N2ZmZmZmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfVFhfUFJCU19TRUVEX1FfQVRFX1RPTkVHRU5fUFJCU19TRUVEX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHg3ZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBjbWFjX2RjX2NhbmNlbCAqLwotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfRENfQ0FOQ0VMX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM2E4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19EQ19DQU5DRUxfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzYTgKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX0RDX0NBTkNFTF9BVEVfQ01BQ19EQ19DQU5DRUxfSV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfRENfQ0FOQ0VMX0FURV9DTUFDX0RDX0NBTkNFTF9JX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19EQ19DQU5DRUxfQVRFX0NNQUNfRENfQ0FOQ0VMX0lfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzZmYKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX0RDX0NBTkNFTF9BVEVfQ01BQ19EQ19DQU5DRUxfSV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwM2ZmKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfRENfQ0FOQ0VMX0FURV9DTUFDX0RDX0NBTkNFTF9JX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAzZmYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19EQ19DQU5DRUxfQVRFX0NNQUNfRENfQ0FOQ0VMX1FfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX0RDX0NBTkNFTF9BVEVfQ01BQ19EQ19DQU5DRUxfUV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfRENfQ0FOQ0VMX0FURV9DTUFDX0RDX0NBTkNFTF9RX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzZmYwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19EQ19DQU5DRUxfQVRFX0NNQUNfRENfQ0FOQ0VMX1FfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAzZmYwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX0RDX0NBTkNFTF9BVEVfQ01BQ19EQ19DQU5DRUxfUV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAzZmYwMDAwKQotCi0vKiBtYWNyb3MgZm9yIGNtYWNfZGNfb2Zmc2V0ICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19EQ19PRkZTRVRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzYWMKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX0RDX09GRlNFVF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNhYwotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfRENfT0ZGU0VUX0FURV9DTUFDX0RDX0NZQ0xFU19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19EQ19PRkZTRVRfQVRFX0NNQUNfRENfQ1lDTEVTX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX0RDX09GRlNFVF9BVEVfQ01BQ19EQ19DWUNMRVNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwZgotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfRENfT0ZGU0VUX0FURV9DTUFDX0RDX0NZQ0xFU19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMGYpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19EQ19PRkZTRVRfQVRFX0NNQUNfRENfQ1lDTEVTX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwZikKLQotLyogbWFjcm9zIGZvciBjbWFjX2NvcnIgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX0NPUlJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNiMAotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfQ09SUl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM2IwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19DT1JSX0FURV9DTUFDX0NPUlJfQ1lDTEVTX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX0NPUlJfQVRFX0NNQUNfQ09SUl9DWUNMRVNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfQ09SUl9BVEVfQ01BQ19DT1JSX0NZQ0xFU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFmCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19DT1JSX0FURV9DTUFDX0NPUlJfQ1lDTEVTX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAxZikgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX0NPUlJfQVRFX0NNQUNfQ09SUl9DWUNMRVNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDFmKQotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfQ09SUl9BVEVfQ01BQ19DT1JSX0ZSRVFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19DT1JSX0FURV9DTUFDX0NPUlJfRlJFUV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX0NPUlJfQVRFX0NNQUNfQ09SUl9GUkVRX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwM2YwMAotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfQ09SUl9BVEVfQ01BQ19DT1JSX0ZSRVFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDNmMDApID4+IDgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19DT1JSX0FURV9DTUFDX0NPUlJfRlJFUV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwM2YwMCkKLQotLyogbWFjcm9zIGZvciBjbWFjX3Bvd2VyICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19QT1dFUl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzYjQKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX1BPV0VSX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNiNAotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfUE9XRVJfQVRFX0NNQUNfUE9XRVJfQ1lDTEVTX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19QT1dFUl9BVEVfQ01BQ19QT1dFUl9DWUNMRVNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX1BPV0VSX0FURV9DTUFDX1BPV0VSX0NZQ0xFU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwZgotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfUE9XRVJfQVRFX0NNQUNfUE9XRVJfQ1lDTEVTX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMGYpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19QT1dFUl9BVEVfQ01BQ19QT1dFUl9DWUNMRVNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwZikKLQotLyogbWFjcm9zIGZvciBjbWFjX2Nyb3NzX2NvcnIgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX0NST1NTX0NPUlJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNiOAotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfQ1JPU1NfQ09SUl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM2I4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19DUk9TU19DT1JSX0FURV9DTUFDX0lRX0NZQ0xFU19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX0NST1NTX0NPUlJfQVRFX0NNQUNfSVFfQ1lDTEVTX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfQ1JPU1NfQ09SUl9BVEVfQ01BQ19JUV9DWUNMRVNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBmCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19DUk9TU19DT1JSX0FURV9DTUFDX0lRX0NZQ0xFU19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwZikgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX0NST1NTX0NPUlJfQVRFX0NNQUNfSVFfQ1lDTEVTX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDBmKQotCi0vKiBtYWNyb3MgZm9yIGNtYWNfaTJxMiAqLwotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfSTJRMl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM2JjCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19JMlEyX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzYmMKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX0kyUTJfQVRFX0NNQUNfSTJRMl9DWUNMRVNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfSTJRMl9BVEVfQ01BQ19JMlEyX0NZQ0xFU19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19JMlEyX0FURV9DTUFDX0kyUTJfQ1lDTEVTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGYKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX0kyUTJfQVRFX0NNQUNfSTJRMl9DWUNMRVNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDBmKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfSTJRMl9BVEVfQ01BQ19JMlEyX0NZQ0xFU19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMGYpCi0KLS8qIG1hY3JvcyBmb3IgY21hY19wb3dlcl9ocGYgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX1BPV0VSX0hQRl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNjMAotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfUE9XRVJfSFBGX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM2MwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19QT1dFUl9IUEZfQVRFX0NNQUNfUE9XRVJfSFBGX0NZQ0xFU19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX1BPV0VSX0hQRl9BVEVfQ01BQ19QT1dFUl9IUEZfQ1lDTEVTX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfUE9XRVJfSFBGX0FURV9DTUFDX1BPV0VSX0hQRl9DWUNMRVNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBmCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19QT1dFUl9IUEZfQVRFX0NNQUNfUE9XRVJfSFBGX0NZQ0xFU19HRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwZikgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX1BPV0VSX0hQRl9BVEVfQ01BQ19QT1dFUl9IUEZfQ1lDTEVTX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDBmKQotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfUE9XRVJfSFBGX0FURV9DTUFDX1BPV0VSX0hQRl9XQUlUX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19QT1dFUl9IUEZfQVRFX0NNQUNfUE9XRVJfSFBGX1dBSVRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX1BPV0VSX0hQRl9BVEVfQ01BQ19QT1dFUl9IUEZfV0FJVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmMAotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfUE9XRVJfSFBGX0FURV9DTUFDX1BPV0VSX0hQRl9XQUlUX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwZjApID4+IDQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19QT1dFUl9IUEZfQVRFX0NNQUNfUE9XRVJfSFBGX1dBSVRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDQpICYgMHgwMDAwMDBmMCkKLQotLyogbWFjcm9zIGZvciByeGRhY19zZXQxICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfU0VUMV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzYzQKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19TRVQxX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNjNAotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX1NFVDFfQVRFX1JYREFDX01VWF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfU0VUMV9BVEVfUlhEQUNfTVVYX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19TRVQxX0FURV9SWERBQ19NVVhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMwotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX1NFVDFfQVRFX1JYREFDX01VWF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDMpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfU0VUMV9BVEVfUlhEQUNfTVVYX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwMykKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19TRVQxX0FURV9SWERBQ19ISV9HQUlOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX1NFVDFfQVRFX1JYREFDX0hJX0dBSU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfU0VUMV9BVEVfUlhEQUNfSElfR0FJTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19TRVQxX0FURV9SWERBQ19ISV9HQUlOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDEwKSA+PiA0KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX1NFVDFfQVRFX1JYREFDX0hJX0dBSU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA0KSAmIDB4MDAwMDAwMTApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfU0VUMV9BVEVfUlhEQUNfQ0FMX1dBSVRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19TRVQxX0FURV9SWERBQ19DQUxfV0FJVF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX1NFVDFfQVRFX1JYREFDX0NBTF9XQUlUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzZjAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfU0VUMV9BVEVfUlhEQUNfQ0FMX1dBSVRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwM2YwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19TRVQxX0FURV9SWERBQ19DQUxfV0FJVF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAzZjAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX1NFVDFfQVRFX1JYREFDX0NBTF9NRUFTVVJFX1RJTUVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfU0VUMV9BVEVfUlhEQUNfQ0FMX01FQVNVUkVfVElNRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19TRVQxX0FURV9SWERBQ19DQUxfTUVBU1VSRV9USU1FX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBmMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX1NFVDFfQVRFX1JYREFDX0NBTF9NRUFTVVJFX1RJTUVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDBmMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfU0VUMV9BVEVfUlhEQUNfQ0FMX01FQVNVUkVfVElNRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMDBmMDAwMCkKLQotLyogbWFjcm9zIGZvciByeGRhY19zZXQyICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfU0VUMl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzYzgKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19TRVQyX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNjOAotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX1NFVDJfQVRFX1JYREFDX0lfSElfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfU0VUMl9BVEVfUlhEQUNfSV9ISV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19TRVQyX0FURV9SWERBQ19JX0hJX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxZgotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX1NFVDJfQVRFX1JYREFDX0lfSElfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMWYpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfU0VUMl9BVEVfUlhEQUNfSV9ISV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAxZikKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19TRVQyX0FURV9SWERBQ19RX0hJX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX1NFVDJfQVRFX1JYREFDX1FfSElfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfU0VUMl9BVEVfUlhEQUNfUV9ISV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFmMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19TRVQyX0FURV9SWERBQ19RX0hJX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAxZjAwKSA+PiA4KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX1NFVDJfQVRFX1JYREFDX1FfSElfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDFmMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfU0VUMl9BVEVfUlhEQUNfSV9MT1dfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19TRVQyX0FURV9SWERBQ19JX0xPV19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX1NFVDJfQVRFX1JYREFDX0lfTE9XX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMWYwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfU0VUMl9BVEVfUlhEQUNfSV9MT1dfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMWYwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19TRVQyX0FURV9SWERBQ19JX0xPV19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAwMWYwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX1NFVDJfQVRFX1JYREFDX1FfTE9XX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfU0VUMl9BVEVfUlhEQUNfUV9MT1dfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19TRVQyX0FURV9SWERBQ19RX0xPV19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxZjAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX1NFVDJfQVRFX1JYREFDX1FfTE9XX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxZjAwMDAwMCkgPj4gMjQpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfU0VUMl9BVEVfUlhEQUNfUV9MT1dfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjQpICYgMHgxZjAwMDAwMCkKLQotLyogbWFjcm9zIGZvciByeGRhY19sb25nX3NoaWZ0ICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfTE9OR19TSElGVF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzY2MKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19MT05HX1NISUZUX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNjYwotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX0xPTkdfU0hJRlRfQVRFX1JYREFDX0lfU1RBVElDX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfTE9OR19TSElGVF9BVEVfUlhEQUNfSV9TVEFUSUNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19MT05HX1NISUZUX0FURV9SWERBQ19JX1NUQVRJQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxZgotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX0xPTkdfU0hJRlRfQVRFX1JYREFDX0lfU1RBVElDX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMWYpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfTE9OR19TSElGVF9BVEVfUlhEQUNfSV9TVEFUSUNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAxZikKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19MT05HX1NISUZUX0FURV9SWERBQ19RX1NUQVRJQ19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX0xPTkdfU0hJRlRfQVRFX1JYREFDX1FfU1RBVElDX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUlhEQUNfTE9OR19TSElGVF9BVEVfUlhEQUNfUV9TVEFUSUNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFmMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19SWERBQ19MT05HX1NISUZUX0FURV9SWERBQ19RX1NUQVRJQ19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAxZjAwKSA+PiA4KQotI2RlZmluZSBQSFlfQU5BTE9HX1JYREFDX0xPTkdfU0hJRlRfQVRFX1JYREFDX1FfU1RBVElDX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDFmMDApCi0KLS8qIG1hY3JvcyBmb3IgY21hY19yZXN1bHRzX2kgKi8KLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX1JFU1VMVFNfSV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNkMAotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfUkVTVUxUU19JX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM2QwCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19SRVNVTFRTX0lfQVRFX0NNQUNfUkVTVUxUU19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX1JFU1VMVFNfSV9BVEVfQ01BQ19SRVNVTFRTX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfUkVTVUxUU19JX0FURV9DTUFDX1JFU1VMVFNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19SRVNVTFRTX0lfQVRFX0NNQUNfUkVTVUxUU19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhmZmZmZmZmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX1JFU1VMVFNfSV9BVEVfQ01BQ19SRVNVTFRTX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweGZmZmZmZmZmKQotCi0vKiBtYWNyb3MgZm9yIGNtYWNfcmVzdWx0c19xICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19SRVNVTFRTX1FfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzZDQKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX1JFU1VMVFNfUV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNkNAotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfUkVTVUxUU19RX0FURV9DTUFDX1JFU1VMVFNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19SRVNVTFRTX1FfQVRFX0NNQUNfUkVTVUxUU19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19DTUFDX1JFU1VMVFNfUV9BVEVfQ01BQ19SRVNVTFRTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBQSFlfQU5BTE9HX0NNQUNfUkVTVUxUU19RX0FURV9DTUFDX1JFU1VMVFNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZmZmZmZmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfQ01BQ19SRVNVTFRTX1FfQVRFX0NNQUNfUkVTVUxUU19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBQTVUxICovCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3NDAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDc0MAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfU1BBUkVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9TUEFSRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX1NQQVJFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDdmZgotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfU1BBUkVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDA3ZmYpID4+IDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9TUEFSRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDdmZikKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX09UUF9WMjVfUFdEX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfT1RQX1YyNV9QV0RfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9PVFBfVjI1X1BXRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX09UUF9WMjVfUFdEX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDA4MDApID4+IDExKQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfT1RQX1YyNV9QV0RfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDExKSAmIDB4MDAwMDA4MDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9QQVJFR09OX01BTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX1BBUkVHT05fTUFOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfUEFSRUdPTl9NQU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9QQVJFR09OX01BTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAxMDAwKSA+PiAxMikKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX1BBUkVHT05fTUFOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMikgJiAweDAwMDAxMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfT1RQUkVHT05fTUFOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9PVFBSRUdPTl9NQU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX09UUFJFR09OX01BTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfT1RQUkVHT05fTUFOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMjAwMCkgPj4gMTMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9PVFBSRUdPTl9NQU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTMpICYgMHgwMDAwMjAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX0RSRUdPTl9NQU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfRFJFR09OX01BTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9EUkVHT05fTUFOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX0RSRUdPTl9NQU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDQwMDApID4+IDE0KQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfRFJFR09OX01BTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE0KSAmIDB4MDAwMDQwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9ESVNDT05UTU9ERUVOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX0RJU0NPTlRNT0RFRU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfRElTQ09OVE1PREVFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9ESVNDT05UTU9ERUVOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDA4MDAwKSA+PiAxNSkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX0RJU0NPTlRNT0RFRU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNSkgJiAweDAwMDA4MDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfU1dSRUdPTl9NQU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9TV1JFR09OX01BTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX1NXUkVHT05fTUFOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfU1dSRUdPTl9NQU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAxMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9TV1JFR09OX01BTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMDAxMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX1NXUkVHX0ZSRVFDVVJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfU1dSRUdfRlJFUUNVUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9TV1JFR19GUkVRQ1VSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNjAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX1NXUkVHX0ZSRVFDVVJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwNjAwMDApID4+IDE3KQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfU1dSRUdfRlJFUUNVUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE3KSAmIDB4MDAwNjAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9TV1JFR19GUkVRQ0FQX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX1NXUkVHX0ZSRVFDQVBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfU1dSRUdfRlJFUUNBUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMzgwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9TV1JFR19GUkVRQ0FQX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMzgwMDAwKSA+PiAxOSkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX1NXUkVHX0ZSRVFDQVBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOSkgJiAweDAwMzgwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfU1dSRUdfTFZMQ1RSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9TV1JFR19MVkxDVFJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX1NXUkVHX0xWTENUUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMGMwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfU1dSRUdfTFZMQ1RSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMGMwMDAwMCkgPj4gMjIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9TV1JFR19MVkxDVFJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjIpICYgMHgwMGMwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX1NSRUdfTFZMQ1RSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfU1JFR19MVkxDVFJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9TUkVHX0xWTENUUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX1NSRUdfTFZMQ1RSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDMwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfU1JFR19MVkxDVFJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI0KSAmIDB4MDMwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9EUkVHX0xWTENUUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX0RSRUdfTFZMQ1RSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfRFJFR19MVkxDVFJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBjMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9EUkVHX0xWTENUUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDBjMDAwMDAwKSA+PiAyNikKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX0RSRUdfTFZMQ1RSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNikgJiAweDBjMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfUEFSRUdfWFBOUF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9QQVJFR19YUE5QX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX1BBUkVHX1hQTlBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfUEFSRUdfWFBOUF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxMDAwMDAwMCkgPj4gMjgpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9QQVJFR19YUE5QX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjgpICYgMHgxMDAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX1BBUkVHX0xWTENUUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfUEFSRUdfTFZMQ1RSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMV9QQVJFR19MVkxDVFJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZTAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUxX1BBUkVHX0xWTENUUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZTAwMDAwMDApID4+IDI5KQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTFfUEFSRUdfTFZMQ1RSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI5KSAmIDB4ZTAwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgUE1VMiAqLwotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNzQ0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3NDQKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1NQQVJFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfU1BBUkVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9TUEFSRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1NQQVJFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMGZmKSA+PiAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfU1BBUkVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwZmYpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9WQkFUVF8xXzNUT0FUQl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1ZCQVRUXzFfM1RPQVRCX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfVkJBVFRfMV8zVE9BVEJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9WQkFUVF8xXzNUT0FUQl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDEwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1ZCQVRUXzFfM1RPQVRCX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAwMTAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfVkJBVFRfMV8yVE9BVEJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9WQkFUVF8xXzJUT0FUQl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1ZCQVRUXzFfMlRPQVRCX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfVkJBVFRfMV8yVE9BVEJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAyMDApID4+IDkpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9WQkFUVF8xXzJUT0FUQl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDkpICYgMHgwMDAwMDIwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1ZCQVRUXzJfM1RPQVRCX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfVkJBVFRfMl8zVE9BVEJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9WQkFUVF8yXzNUT0FUQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1ZCQVRUXzJfM1RPQVRCX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDA0MDApID4+IDEwKQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfVkJBVFRfMl8zVE9BVEJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEwKSAmIDB4MDAwMDA0MDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9QV0RfQkFOREdBUF9NQU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1BXRF9CQU5ER0FQX01BTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfUFdEX0JBTkRHQVBfTUFOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9QV0RfQkFOREdBUF9NQU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwODAwKSA+PiAxMSkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1BXRF9CQU5ER0FQX01BTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMSkgJiAweDAwMDAwODAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfUFdEX0xGT19NQU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9QV0RfTEZPX01BTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1BXRF9MRk9fTUFOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfUFdEX0xGT19NQU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMTAwMCkgPj4gMTIpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9QV0RfTEZPX01BTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTIpICYgMHgwMDAwMTAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1ZCQVRUX0xUXzNQMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfVkJBVFRfTFRfM1AyX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9WQkFUVF9MVF8zUDJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1ZCQVRUX0xUXzNQMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDIwMDApID4+IDEzKQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfVkJBVFRfTFRfM1AyX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEzKSAmIDB4MDAwMDIwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9WQkFUVF9MVF8yUDhfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1ZCQVRUX0xUXzJQOF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfVkJBVFRfTFRfMlA4X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9WQkFUVF9MVF8yUDhfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDA0MDAwKSA+PiAxNCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1ZCQVRUX0xUXzJQOF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNCkgJiAweDAwMDA0MDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfVkJBVFRfR1RfNFAyX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9WQkFUVF9HVF80UDJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1ZCQVRUX0dUXzRQMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfVkJBVFRfR1RfNFAyX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwODAwMCkgPj4gMTUpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9WQkFUVF9HVF80UDJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTUpICYgMHgwMDAwODAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1BNVV9NQU5fT1ZFUlJJREVfRU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfUE1VX01BTl9PVkVSUklERV9FTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9QTVVfTUFOX09WRVJSSURFX0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1BNVV9NQU5fT1ZFUlJJREVfRU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMTAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfUE1VX01BTl9PVkVSUklERV9FTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDAwMTAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9WQkFUVF9HVF9MVkxDVFJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1ZCQVRUX0dUX0xWTENUUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfVkJBVFRfR1RfTFZMQ1RSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDYwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9WQkFUVF9HVF9MVkxDVFJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDYwMDAwKSA+PiAxNykKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1ZCQVRUX0dUX0xWTENUUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNykgJiAweDAwMDYwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfU1dSRUdWU1NMMkFUQl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9TV1JFR1ZTU0wyQVRCX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1NXUkVHVlNTTDJBVEJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfU1dSRUdWU1NMMkFUQl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDA4MDAwMCkgPj4gMTkpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9TV1JFR1ZTU0wyQVRCX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTkpICYgMHgwMDA4MDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1NXUkVHVlNTTF9MVkxDVFJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfU1dSRUdWU1NMX0xWTENUUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9TV1JFR1ZTU0xfTFZMQ1RSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1NXUkVHVlNTTF9MVkxDVFJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAzMDAwMDApID4+IDIwKQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfU1dSRUdWU1NMX0xWTENUUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIwKSAmIDB4MDAzMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9TV1JFR1ZEREgyQVRCX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1NXUkVHVkRESDJBVEJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfU1dSRUdWRERIMkFUQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9TV1JFR1ZEREgyQVRCX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwNDAwMDAwKSA+PiAyMikKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1NXUkVHVkRESDJBVEJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMikgJiAweDAwNDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfU1dSRUdWRERIX0xWTENUUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9TV1JFR1ZEREhfTFZMQ1RSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1NXUkVHVkRESF9MVkxDVFJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTgwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfU1dSRUdWRERIX0xWTENUUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMTgwMDAwMCkgPj4gMjMpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9TV1JFR1ZEREhfTFZMQ1RSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjMpICYgMHgwMTgwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1NXUkVHMkFUQl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfU1dSRUcyQVRCX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9TV1JFRzJBVEJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGUwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX1NXUkVHMkFUQl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MGUwMDAwMDApID4+IDI1KQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfU1dSRUcyQVRCX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI1KSAmIDB4MGUwMDAwMDApCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9PVFBSRUcyQVRCX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX09UUFJFRzJBVEJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfT1RQUkVHMkFUQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9PVFBSRUcyQVRCX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEwMDAwMDAwKSA+PiAyOCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX09UUFJFRzJBVEJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyOCkgJiAweDEwMDAwMDAwKQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfT1RQUkVHX0xWTENUUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9PVFBSRUdfTFZMQ1RSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX09UUFJFR19MVkxDVFJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2MDAwMDAwMAotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfT1RQUkVHX0xWTENUUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg2MDAwMDAwMCkgPj4gMjkpCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9PVFBSRUdfTFZMQ1RSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjkpICYgMHg2MDAwMDAwMCkKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX0RSRUdfTFZMQ1RSX01BTk9WUl9FTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfRFJFR19MVkxDVFJfTUFOT1ZSX0VOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9BTkFMT0dfUE1VMl9EUkVHX0xWTENUUl9NQU5PVlJfRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgUEhZX0FOQUxPR19QTVUyX0RSRUdfTFZMQ1RSX01BTk9WUl9FTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ODAwMDAwMDApID4+IDMxKQotI2RlZmluZSBQSFlfQU5BTE9HX1BNVTJfRFJFR19MVkxDVFJfTUFOT1ZSX0VOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMxKSAmIDB4ODAwMDAwMDApCi0KLQotI2lmbmRlZiBfX0FTU0VNQkxFUl9fCi0KLXR5cGVkZWYgc3RydWN0IGFuYWxvZ19pbnRmX2F0aHJfd2xhbl9yZWdfcmVnX3MgewotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgUlhSRl9CSUFTMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgMHgwIC0gMHg0ICAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgUlhSRl9CSUFTMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgMHg0IC0gMHg4ICAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgUlhSRl9HQUlOU1RBR0VTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgMHg4IC0gMHhjICAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgUlhSRl9BR0M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgMHhjIC0gMHgxMCAgICAgICAqLwotICB2b2xhdGlsZSBjaGFyIHBhZF9fMFsweDMwXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweDEwIC0gMHg0MCAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgVFhSRjE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweDQwIC0gMHg0NCAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgVFhSRjI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweDQ0IC0gMHg0OCAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgVFhSRjM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweDQ4IC0gMHg0YyAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgVFhSRjQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweDRjIC0gMHg1MCAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgVFhSRjU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweDUwIC0gMHg1NCAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgVFhSRjY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweDU0IC0gMHg1OCAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgVFhSRjc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweDU4IC0gMHg1YyAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgVFhSRjg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweDVjIC0gMHg2MCAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgVFhSRjk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweDYwIC0gMHg2NCAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgVFhSRjEwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweDY0IC0gMHg2OCAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgVFhSRjExOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweDY4IC0gMHg2YyAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgVFhSRjEyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweDZjIC0gMHg3MCAgICAgICAqLwotICB2b2xhdGlsZSBjaGFyIHBhZF9fMVsweDEwXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweDcwIC0gMHg4MCAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgU1lOVEgxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweDgwIC0gMHg4NCAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgU1lOVEgyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweDg0IC0gMHg4OCAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgU1lOVEgzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweDg4IC0gMHg4YyAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgU1lOVEg0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweDhjIC0gMHg5MCAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgU1lOVEg1OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweDkwIC0gMHg5NCAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgU1lOVEg2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweDk0IC0gMHg5OCAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgU1lOVEg3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweDk4IC0gMHg5YyAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgU1lOVEg4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweDljIC0gMHhhMCAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgU1lOVEg5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweGEwIC0gMHhhNCAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgU1lOVEgxMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweGE0IC0gMHhhOCAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgU1lOVEgxMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweGE4IC0gMHhhYyAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgU1lOVEgxMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweGFjIC0gMHhiMCAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgU1lOVEgxMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweGIwIC0gMHhiNCAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgU1lOVEgxNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweGI0IC0gMHhiOCAgICAgICAqLwotICB2b2xhdGlsZSBjaGFyIHBhZF9fMlsweDhdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweGI4IC0gMHhjMCAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQklBUzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweGMwIC0gMHhjNCAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQklBUzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweGM0IC0gMHhjOCAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQklBUzM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweGM4IC0gMHhjYyAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQklBUzQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweGNjIC0gMHhkMCAgICAgICAqLwotICB2b2xhdGlsZSBjaGFyIHBhZF9fM1sweDMwXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAweGQwIC0gMHgxMDAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgUlhUWDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4MTAwIC0gMHgxMDQgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgUlhUWDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4MTA0IC0gMHgxMDggICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgUlhUWDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4MTA4IC0gMHgxMGMgICAgICAqLwotICB2b2xhdGlsZSBjaGFyIHBhZF9fNFsweDM0XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4MTBjIC0gMHgxNDAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkIxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4MTQwIC0gMHgxNDQgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkIyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4MTQ0IC0gMHgxNDggICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkIzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4MTQ4IC0gMHgxNGMgICAgICAqLwotICB2b2xhdGlsZSBjaGFyIHBhZF9fNVsweDEzNF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4MTRjIC0gMHgyODAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgUExMQ0xLTU9EQTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4MjgwIC0gMHgyODQgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgUExMQ0xLTU9EQTI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4Mjg0IC0gMHgyODggICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgVE9QOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4Mjg4IC0gMHgyOGMgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgVEhFUk07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4MjhjIC0gMHgyOTAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgWFRBTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4MjkwIC0gMHgyOTQgICAgICAqLwotICB2b2xhdGlsZSBjaGFyIHBhZF9fNlsweGVjXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4Mjk0IC0gMHgzODAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcmJpc3RfY250cmw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4MzgwIC0gMHgzODQgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdHhfZGNfb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4Mzg0IC0gMHgzODggICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdHhfdG9uZWdlbjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4Mzg4IC0gMHgzOGMgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdHhfdG9uZWdlbjE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4MzhjIC0gMHgzOTAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdHhfbGZ0b25lZ2VuMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4MzkwIC0gMHgzOTQgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdHhfbGluZWFyX3JhbXBfaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4Mzk0IC0gMHgzOTggICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdHhfbGluZWFyX3JhbXBfcTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4Mzk4IC0gMHgzOWMgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdHhfcHJic19tYWc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4MzljIC0gMHgzYTAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdHhfcHJic19zZWVkX2k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4M2EwIC0gMHgzYTQgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdHhfcHJic19zZWVkX3E7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4M2E0IC0gMHgzYTggICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY21hY19kY19jYW5jZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4M2E4IC0gMHgzYWMgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY21hY19kY19vZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4M2FjIC0gMHgzYjAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY21hY19jb3JyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4M2IwIC0gMHgzYjQgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY21hY19wb3dlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4M2I0IC0gMHgzYjggICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY21hY19jcm9zc19jb3JyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4M2I4IC0gMHgzYmMgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY21hY19pMnEyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4M2JjIC0gMHgzYzAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY21hY19wb3dlcl9ocGY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4M2MwIC0gMHgzYzQgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcnhkYWNfc2V0MTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4M2M0IC0gMHgzYzggICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcnhkYWNfc2V0MjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4M2M4IC0gMHgzY2MgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcnhkYWNfbG9uZ19zaGlmdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4M2NjIC0gMHgzZDAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY21hY19yZXN1bHRzX2k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4M2QwIC0gMHgzZDQgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY21hY19yZXN1bHRzX3E7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4M2Q0IC0gMHgzZDggICAgICAqLwotICB2b2xhdGlsZSBjaGFyIHBhZF9fN1sweDM2OF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4M2Q4IC0gMHg3NDAgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgUE1VMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4NzQwIC0gMHg3NDQgICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgUE1VMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgIDB4NzQ0IC0gMHg3NDggICAgICAqLwotfSBhbmFsb2dfaW50Zl9hdGhyX3dsYW5fcmVnX3JlZ190OwotCi0jZW5kaWYgLyogX19BU1NFTUJMRVJfXyAqLwotCi0jZW5kaWYgLyogX0FOQUxPR19JTlRGX0FUSFJfV0xBTl9SRUdfUkVHX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzQuMC9ody9hbmFsb2dfaW50Zl9yZWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3NC4wL2h3L2FuYWxvZ19pbnRmX3JlZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWI5ZWI1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3NC4wL2h3L2FuYWxvZ19pbnRmX3JlZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDQtMjAxMCBBdGhlcm9zIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIAotLy8KLS8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotLy8gcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLS8vCi0vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLS8vIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLS8vIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0vLyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0vLyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLS8vIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0vLyBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotLy8KLS8vCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gQXV0aG9yKHMpOiA9IkF0aGVyb3MiCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCi0jaWZkZWYgV0xBTl9IRUFERVJTCi0KLSNpbmNsdWRlICJhbmFsb2dfaW50Zl9hdGhyX3dsYW5fcmVnLmgiCi0KLQotI2lmbmRlZiBCVF9IRUFERVJTCi0KLQotCi0jZW5kaWYKLSNlbmRpZgotCi0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHc0LjAvaHcvYXBiX21hcC5oIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHc0LjAvaHcvYXBiX21hcC5oCmluZGV4IGU0ZDJkNjIuLjAwNjhjYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3NC4wL2h3L2FwYl9tYXAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzQuMC9ody9hcGJfbWFwLmgKQEAgLTIxLDExICsyMSw4IEBACiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogCi0jaWZkZWYgV0xBTl9IRUFERVJTCi0KICNpbmNsdWRlICJhcGJfYXRocl93bGFuX21hcC5oIgogCi0KICNpZm5kZWYgQlRfSEVBREVSUwogCiAjZGVmaW5lIFJUQ19CQVNFX0FERFJFU1MgV0xBTl9SVENfQkFTRV9BRERSRVNTCkBAIC00MCw5ICszNyw0IEBACiAjZGVmaW5lIE1BQ19CQVNFX0FERFJFU1MgV0xBTl9NQUNfQkFTRV9BRERSRVNTCiAjZGVmaW5lIFJETUFfQkFTRV9BRERSRVNTIFdMQU5fUkRNQV9CQVNFX0FERFJFU1MKIAotCiAjZW5kaWYKLSNlbmRpZgotCi0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHc0LjAvaHcvYmJfbGNfcmVnLmggYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzQuMC9ody9iYl9sY19yZWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjcxMTkyOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzQuMC9ody9iYl9sY19yZWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDcwNzYgKzAsMCBAQAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDQtMjAxMCBBdGhlcm9zIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIAotLy8KLS8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotLy8gcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLS8vCi0vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLS8vIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLS8vIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0vLyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0vLyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLS8vIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0vLyBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotLy8KLS8vCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gQXV0aG9yKHMpOiA9IkF0aGVyb3MiCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotLyogQ29weXJpZ2h0IChDKSAyMDA5IERlbmFsaSBTb2Z0d2FyZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkICAgICAgICAgICAgICAqLwotLyogVEhJUyBGSUxFIElTIEFVVE9NQVRJQ0FMTFkgR0VORVJBVEVEIEJZIERFTkFMSSBCTFVFUFJJTlQsIERPIE5PVCBFRElUICAgICAqLwotCi0KLSNpZm5kZWYgX0JCX0xDX1JFR19SRUdfSF8KLSNkZWZpbmUgX0JCX0xDX1JFR19SRUdfSF8KLQotCi0vKiBtYWNyb3MgZm9yIEJCX3Rlc3RfY29udHJvbHMgKi8KLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5ODAwCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTgwMAotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19DRl9UU1RUUklHX1NFTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfQ0ZfVFNUVFJJR19TRUxfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX0NGX1RTVFRSSUdfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwZgotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19DRl9UU1RUUklHX1NFTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfQ0ZfVFNUVFJJR19TRUxfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMGYpCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX0NGX1RTVFRSSUdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19DRl9UU1RUUklHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfQ0ZfVFNUVFJJR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX0NGX1RTVFRSSUdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDEwKSA+PiA0KQotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19DRl9UU1RUUklHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDQpICYgMHgwMDAwMDAxMCkKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfQ0ZfUkZTSElGVF9TRUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX0NGX1JGU0hJRlRfU0VMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19DRl9SRlNISUZUX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjAKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfQ0ZfUkZTSElGVF9TRUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwNjApID4+IDUpCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX0NGX1JGU0hJRlRfU0VMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNSkgJiAweDAwMDAwMDYwKQotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19DQVJEQlVTX01PREVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfQ0FSREJVU19NT0RFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX0NBUkRCVVNfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19DQVJEQlVTX01PREVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDMwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfQ0FSREJVU19NT0RFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDAzMDApCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX0NMS09VVF9JU19DTEszMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19DTEtPVVRfSVNfQ0xLMzJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfQ0xLT1VUX0lTX0NMSzMyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX0NMS09VVF9JU19DTEszMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDA0MDApID4+IDEwKQotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19DTEtPVVRfSVNfQ0xLMzJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTApICYgMHgwMDAwMDQwMCkKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfRU5BQkxFX1JGU0lMRU5UX0JCX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX0VOQUJMRV9SRlNJTEVOVF9CQl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19FTkFCTEVfUkZTSUxFTlRfQkJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfRU5BQkxFX1JGU0lMRU5UX0JCX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMjAwMCkgPj4gMTMpCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX0VOQUJMRV9SRlNJTEVOVF9CQl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMykgJiAweDAwMDAyMDAwKQotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19FTkFCTEVfTUlOSV9PQlNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfRU5BQkxFX01JTklfT0JTX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX0VOQUJMRV9NSU5JX09CU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19FTkFCTEVfTUlOSV9PQlNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDA4MDAwKSA+PiAxNSkKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfRU5BQkxFX01JTklfT0JTX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE1KSAmIDB4MDAwMDgwMDApCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1NMT1dfQ0xLMTYwX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19TTE9XX0NMSzE2MF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfU0xPV19DTEsxNjBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1NMT1dfQ0xLMTYwX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMjAwMDApID4+IDE3KQotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19TTE9XX0NMSzE2MF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTcpICYgMHgwMDAyMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfQUdDX09CU19TRUxfM19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX0FHQ19PQlNfU0VMXzNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19BR0NfT0JTX1NFTF8zX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfQUdDX09CU19TRUxfM19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDA0MDAwMCkgPj4gMTgpCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX0FHQ19PQlNfU0VMXzNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOCkgJiAweDAwMDQwMDAwKQotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19DRl9CQkJfT0JTX1NFTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfQ0ZfQkJCX09CU19TRUxfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX0NGX0JCQl9PQlNfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDc4MDAwMAotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19DRl9CQkJfT0JTX1NFTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwNzgwMDAwKSA+PiAxOSkKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfQ0ZfQkJCX09CU19TRUxfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE5KSAmIDB4MDA3ODAwMDApCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1JYX09CU19TRUxfNVRIX0JJVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19SWF9PQlNfU0VMXzVUSF9CSVRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfUlhfT0JTX1NFTF81VEhfQklUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1JYX09CU19TRUxfNVRIX0JJVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDA4MDAwMDApID4+IDIzKQotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19SWF9PQlNfU0VMXzVUSF9CSVRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjMpICYgMHgwMDgwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfQUdDX09CU19TRUxfNF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX0FHQ19PQlNfU0VMXzRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19BR0NfT0JTX1NFTF80X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfQUdDX09CU19TRUxfNF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMTAwMDAwMCkgPj4gMjQpCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX0FHQ19PQlNfU0VMXzRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNCkgJiAweDAxMDAwMDAwKQotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19GT1JDRV9BR0NfQ0xFQVJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfRk9SQ0VfQUdDX0NMRUFSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX0ZPUkNFX0FHQ19DTEVBUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19GT1JDRV9BR0NfQ0xFQVJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEwMDAwMDAwKSA+PiAyOCkKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfRk9SQ0VfQUdDX0NMRUFSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI4KSAmIDB4MTAwMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1RTVERBQ19PVVRfU0VMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19UU1REQUNfT1VUX1NFTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfVFNUREFDX09VVF9TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGMwMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1RTVERBQ19PVVRfU0VMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4YzAwMDAwMDApID4+IDMwKQotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19UU1REQUNfT1VUX1NFTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMzApICYgMHhjMDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9nZW5fY29udHJvbHMgKi8KLSNkZWZpbmUgUEhZX0JCX0dFTl9DT05UUk9MU19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5ODA0Ci0jZGVmaW5lIFBIWV9CQl9HRU5fQ09OVFJPTFNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTgwNAotI2RlZmluZSBQSFlfQkJfR0VOX0NPTlRST0xTX1RVUkJPX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0dFTl9DT05UUk9MU19UVVJCT19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9HRU5fQ09OVFJPTFNfVFVSQk9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBQSFlfQkJfR0VOX0NPTlRST0xTX1RVUkJPX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMSkgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0dFTl9DT05UUk9MU19UVVJCT19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFBIWV9CQl9HRU5fQ09OVFJPTFNfQ0ZfU0hPUlQyMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQkJfR0VOX0NPTlRST0xTX0NGX1NIT1JUMjBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0JCX0dFTl9DT05UUk9MU19DRl9TSE9SVDIwX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFBIWV9CQl9HRU5fQ09OVFJPTFNfQ0ZfU0hPUlQyMF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAyKSA+PiAxKQotI2RlZmluZSBQSFlfQkJfR0VOX0NPTlRST0xTX0NGX1NIT1JUMjBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEpICYgMHgwMDAwMDAwMikKLSNkZWZpbmUgUEhZX0JCX0dFTl9DT05UUk9MU19EWU5fMjBfNDBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9CQl9HRU5fQ09OVFJPTFNfRFlOXzIwXzQwX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQkJfR0VOX0NPTlRST0xTX0RZTl8yMF80MF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgUEhZX0JCX0dFTl9DT05UUk9MU19EWU5fMjBfNDBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDQpID4+IDIpCi0jZGVmaW5lIFBIWV9CQl9HRU5fQ09OVFJPTFNfRFlOXzIwXzQwX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMikgJiAweDAwMDAwMDA0KQotI2RlZmluZSBQSFlfQkJfR0VOX0NPTlRST0xTX0RZTl8yMF80MF9QUklfT05MWV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0JCX0dFTl9DT05UUk9MU19EWU5fMjBfNDBfUFJJX09OTFlfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9CQl9HRU5fQ09OVFJPTFNfRFlOXzIwXzQwX1BSSV9PTkxZX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBQSFlfQkJfR0VOX0NPTlRST0xTX0RZTl8yMF80MF9QUklfT05MWV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwOCkgPj4gMykKLSNkZWZpbmUgUEhZX0JCX0dFTl9DT05UUk9MU19EWU5fMjBfNDBfUFJJX09OTFlfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzKSAmIDB4MDAwMDAwMDgpCi0jZGVmaW5lIFBIWV9CQl9HRU5fQ09OVFJPTFNfRFlOXzIwXzQwX1BSSV9DSE5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQkJfR0VOX0NPTlRST0xTX0RZTl8yMF80MF9QUklfQ0hOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0JCX0dFTl9DT05UUk9MU19EWU5fMjBfNDBfUFJJX0NITl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIFBIWV9CQl9HRU5fQ09OVFJPTFNfRFlOXzIwXzQwX1BSSV9DSE5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDEwKSA+PiA0KQotI2RlZmluZSBQSFlfQkJfR0VOX0NPTlRST0xTX0RZTl8yMF80MF9QUklfQ0hOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDQpICYgMHgwMDAwMDAxMCkKLSNkZWZpbmUgUEhZX0JCX0dFTl9DT05UUk9MU19EWU5fMjBfNDBfRVhUX0NITl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9CQl9HRU5fQ09OVFJPTFNfRFlOXzIwXzQwX0VYVF9DSE5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQkJfR0VOX0NPTlRST0xTX0RZTl8yMF80MF9FWFRfQ0hOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgUEhZX0JCX0dFTl9DT05UUk9MU19EWU5fMjBfNDBfRVhUX0NITl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMjApID4+IDUpCi0jZGVmaW5lIFBIWV9CQl9HRU5fQ09OVFJPTFNfRFlOXzIwXzQwX0VYVF9DSE5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNSkgJiAweDAwMDAwMDIwKQotI2RlZmluZSBQSFlfQkJfR0VOX0NPTlRST0xTX0hUX0VOQUJMRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0JCX0dFTl9DT05UUk9MU19IVF9FTkFCTEVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9CQl9HRU5fQ09OVFJPTFNfSFRfRU5BQkxFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAotI2RlZmluZSBQSFlfQkJfR0VOX0NPTlRST0xTX0hUX0VOQUJMRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDA0MCkgPj4gNikKLSNkZWZpbmUgUEhZX0JCX0dFTl9DT05UUk9MU19IVF9FTkFCTEVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA2KSAmIDB4MDAwMDAwNDApCi0jZGVmaW5lIFBIWV9CQl9HRU5fQ09OVFJPTFNfQUxMT1dfU0hPUlRfR0lfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQkJfR0VOX0NPTlRST0xTX0FMTE9XX1NIT1JUX0dJX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0JCX0dFTl9DT05UUk9MU19BTExPV19TSE9SVF9HSV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIFBIWV9CQl9HRU5fQ09OVFJPTFNfQUxMT1dfU0hPUlRfR0lfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDgwKSA+PiA3KQotI2RlZmluZSBQSFlfQkJfR0VOX0NPTlRST0xTX0FMTE9XX1NIT1JUX0dJX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDcpICYgMHgwMDAwMDA4MCkKLSNkZWZpbmUgUEhZX0JCX0dFTl9DT05UUk9MU19DRl8yX0NIQUlOU19VU0VfV0FMU0hfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9HRU5fQ09OVFJPTFNfQ0ZfMl9DSEFJTlNfVVNFX1dBTFNIX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQkJfR0VOX0NPTlRST0xTX0NGXzJfQ0hBSU5TX1VTRV9XQUxTSF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKLSNkZWZpbmUgUEhZX0JCX0dFTl9DT05UUk9MU19DRl8yX0NIQUlOU19VU0VfV0FMU0hfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAxMDApID4+IDgpCi0jZGVmaW5lIFBIWV9CQl9HRU5fQ09OVFJPTFNfQ0ZfMl9DSEFJTlNfVVNFX1dBTFNIX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAwMTAwKQotI2RlZmluZSBQSFlfQkJfR0VOX0NPTlRST0xTX0NGX1NJTkdMRV9IVF9MVEYxX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0JCX0dFTl9DT05UUk9MU19DRl9TSU5HTEVfSFRfTFRGMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9CQl9HRU5fQ09OVFJPTFNfQ0ZfU0lOR0xFX0hUX0xURjFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAotI2RlZmluZSBQSFlfQkJfR0VOX0NPTlRST0xTX0NGX1NJTkdMRV9IVF9MVEYxX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDIwMCkgPj4gOSkKLSNkZWZpbmUgUEhZX0JCX0dFTl9DT05UUk9MU19DRl9TSU5HTEVfSFRfTFRGMV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA5KSAmIDB4MDAwMDAyMDApCi0jZGVmaW5lIFBIWV9CQl9HRU5fQ09OVFJPTFNfR0ZfRU5BQkxFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQkJfR0VOX0NPTlRST0xTX0dGX0VOQUJMRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0JCX0dFTl9DT05UUk9MU19HRl9FTkFCTEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIFBIWV9CQl9HRU5fQ09OVFJPTFNfR0ZfRU5BQkxFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDA0MDApID4+IDEwKQotI2RlZmluZSBQSFlfQkJfR0VOX0NPTlRST0xTX0dGX0VOQUJMRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTApICYgMHgwMDAwMDQwMCkKLSNkZWZpbmUgUEhZX0JCX0dFTl9DT05UUk9MU19CWVBBU1NfREFDX0ZJRk9fTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9CQl9HRU5fQ09OVFJPTFNfQllQQVNTX0RBQ19GSUZPX05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQkJfR0VOX0NPTlRST0xTX0JZUEFTU19EQUNfRklGT19OX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKLSNkZWZpbmUgUEhZX0JCX0dFTl9DT05UUk9MU19CWVBBU1NfREFDX0ZJRk9fTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDgwMCkgPj4gMTEpCi0jZGVmaW5lIFBIWV9CQl9HRU5fQ09OVFJPTFNfQllQQVNTX0RBQ19GSUZPX05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMSkgJiAweDAwMDAwODAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3Rlc3RfY29udHJvbHNfc3RhdHVzICovCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1NUQVRVU19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTgwOAotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19TVEFUVVNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk4MDgKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfU1RBVFVTX0NGX1RTVERBQ19FTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1NUQVRVU19DRl9UU1REQUNfRU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19TVEFUVVNfQ0ZfVFNUREFDX0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfU1RBVFVTX0NGX1RTVERBQ19FTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDEpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1NUQVRVU19DRl9UU1REQUNfRU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDAxKQotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19TVEFUVVNfQ0ZfVFhfU1JDX0lTX1RTVERBQ19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfU1RBVFVTX0NGX1RYX1NSQ19JU19UU1REQUNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1NUQVRVU19DRl9UWF9TUkNfSVNfVFNUREFDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19TVEFUVVNfQ0ZfVFhfU1JDX0lTX1RTVERBQ19HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMikgPj4gMSkKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfU1RBVFVTX0NGX1RYX1NSQ19JU19UU1REQUNfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxKSAmIDB4MDAwMDAwMDIpCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1NUQVRVU19DRl9UWF9PQlNfU0VMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19TVEFUVVNfQ0ZfVFhfT0JTX1NFTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfU1RBVFVTX0NGX1RYX09CU19TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFjCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1NUQVRVU19DRl9UWF9PQlNfU0VMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDFjKSA+PiAyKQotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19TVEFUVVNfQ0ZfVFhfT0JTX1NFTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIpICYgMHgwMDAwMDAxYykKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfU1RBVFVTX0NGX1RYX09CU19NVVhfU0VMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1NUQVRVU19DRl9UWF9PQlNfTVVYX1NFTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19TVEFUVVNfQ0ZfVFhfT0JTX01VWF9TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjAKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfU1RBVFVTX0NGX1RYX09CU19NVVhfU0VMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwNjApID4+IDUpCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1NUQVRVU19DRl9UWF9PQlNfTVVYX1NFTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNSkgJiAweDAwMDAwMDYwKQotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19TVEFUVVNfQ0ZfVFhfU1JDX0FMVEVSTkFURV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfU1RBVFVTX0NGX1RYX1NSQ19BTFRFUk5BVEVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1NUQVRVU19DRl9UWF9TUkNfQUxURVJOQVRFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19TVEFUVVNfQ0ZfVFhfU1JDX0FMVEVSTkFURV9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDA4MCkgPj4gNykKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfU1RBVFVTX0NGX1RYX1NSQ19BTFRFUk5BVEVfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCA3KSAmIDB4MDAwMDAwODApCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1NUQVRVU19DRl9UU1RBRENfRU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19TVEFUVVNfQ0ZfVFNUQURDX0VOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfU1RBVFVTX0NGX1RTVEFEQ19FTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1NUQVRVU19DRl9UU1RBRENfRU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMTAwKSA+PiA4KQotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19TVEFUVVNfQ0ZfVFNUQURDX0VOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwMDEwMCkKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfU1RBVFVTX0NGX1JYX1NSQ19JU19UU1RBRENfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1NUQVRVU19DRl9SWF9TUkNfSVNfVFNUQURDX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19TVEFUVVNfQ0ZfUlhfU1JDX0lTX1RTVEFEQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfU1RBVFVTX0NGX1JYX1NSQ19JU19UU1RBRENfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAyMDApID4+IDkpCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1NUQVRVU19DRl9SWF9TUkNfSVNfVFNUQURDX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOSkgJiAweDAwMDAwMjAwKQotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19TVEFUVVNfUlhfT0JTX1NFTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfU1RBVFVTX1JYX09CU19TRUxfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1NUQVRVU19SWF9PQlNfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwM2MwMAotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19TVEFUVVNfUlhfT0JTX1NFTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAzYzAwKSA+PiAxMCkKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfU1RBVFVTX1JYX09CU19TRUxfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEwKSAmIDB4MDAwMDNjMDApCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1NUQVRVU19ESVNBQkxFX0EyX1dBUk1fUkVTRVRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19TVEFUVVNfRElTQUJMRV9BMl9XQVJNX1JFU0VUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfU1RBVFVTX0RJU0FCTEVfQTJfV0FSTV9SRVNFVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1NUQVRVU19ESVNBQkxFX0EyX1dBUk1fUkVTRVRfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDQwMDApID4+IDE0KQotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19TVEFUVVNfRElTQUJMRV9BMl9XQVJNX1JFU0VUX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwMDAwNDAwMCkKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfU1RBVFVTX1JFU0VUX0EyX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1NUQVRVU19SRVNFVF9BMl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19TVEFUVVNfUkVTRVRfQTJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfU1RBVFVTX1JFU0VUX0EyX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwODAwMCkgPj4gMTUpCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1NUQVRVU19SRVNFVF9BMl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNSkgJiAweDAwMDA4MDAwKQotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19TVEFUVVNfQUdDX09CU19TRUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfU1RBVFVTX0FHQ19PQlNfU0VMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1NUQVRVU19BR0NfT0JTX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA3MDAwMAotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19TVEFUVVNfQUdDX09CU19TRUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDcwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfU1RBVFVTX0FHQ19PQlNfU0VMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDAwNzAwMDApCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1NUQVRVU19DRl9FTkFCTEVfRkZUX0RVTVBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19TVEFUVVNfQ0ZfRU5BQkxFX0ZGVF9EVU1QX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfU1RBVFVTX0NGX0VOQUJMRV9GRlRfRFVNUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1NUQVRVU19DRl9FTkFCTEVfRkZUX0RVTVBfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwODAwMDApID4+IDE5KQotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19TVEFUVVNfQ0ZfRU5BQkxFX0ZGVF9EVU1QX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTkpICYgMHgwMDA4MDAwMCkKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfU1RBVFVTX0NGX0RFQlVHUE9SVF9JTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1NUQVRVU19DRl9ERUJVR1BPUlRfSU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19TVEFUVVNfQ0ZfREVCVUdQT1JUX0lOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfU1RBVFVTX0NGX0RFQlVHUE9SVF9JTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDgwMDAwMCkgPj4gMjMpCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1NUQVRVU19DRl9ERUJVR1BPUlRfSU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMykgJiAweDAwODAwMDAwKQotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19TVEFUVVNfRElTQUJMRV9BR0NfVE9fQTJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfU1RBVFVTX0RJU0FCTEVfQUdDX1RPX0EyX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1NUQVRVU19ESVNBQkxFX0FHQ19UT19BMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19TVEFUVVNfRElTQUJMRV9BR0NfVE9fQTJfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDA4MDAwMDAwKSA+PiAyNykKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfU1RBVFVTX0RJU0FCTEVfQUdDX1RPX0EyX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI3KSAmIDB4MDgwMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1NUQVRVU19DRl9ERUJVR1BPUlRfRU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19TVEFUVVNfQ0ZfREVCVUdQT1JUX0VOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfU1RBVFVTX0NGX0RFQlVHUE9SVF9FTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1NUQVRVU19DRl9ERUJVR1BPUlRfRU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MTAwMDAwMDApID4+IDI4KQotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19TVEFUVVNfQ0ZfREVCVUdQT1JUX0VOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjgpICYgMHgxMDAwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfU1RBVFVTX0NGX0RFQlVHUE9SVF9TRUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1NUQVRVU19DRl9ERUJVR1BPUlRfU0VMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQkJfVEVTVF9DT05UUk9MU19TVEFUVVNfQ0ZfREVCVUdQT1JUX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjAwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1RFU1RfQ09OVFJPTFNfU1RBVFVTX0NGX0RFQlVHUE9SVF9TRUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg2MDAwMDAwMCkgPj4gMjkpCi0jZGVmaW5lIFBIWV9CQl9URVNUX0NPTlRST0xTX1NUQVRVU19DRl9ERUJVR1BPUlRfU0VMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyOSkgJiAweDYwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3RpbWluZ19jb250cm9sc18xICovCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTgwYwotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzFfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk4MGMKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18xX1NURV9USFJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMV9TVEVfVEhSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzFfU1RFX1RIUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN2YKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18xX1NURV9USFJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwN2YpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMV9TVEVfVEhSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDdmKQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzFfU1RFX1RPX0xPTkcxX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18xX1NURV9UT19MT05HMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMV9TVEVfVE9fTE9ORzFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMWY4MAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzFfU1RFX1RPX0xPTkcxX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMWY4MCkgPj4gNykKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18xX1NURV9UT19MT05HMV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA3KSAmIDB4MDAwMDFmODApCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMV9USU1JTkdfQkFDS09GRl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzFfVElNSU5HX0JBQ0tPRkZfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18xX1RJTUlOR19CQUNLT0ZGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDFlMDAwCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMV9USU1JTkdfQkFDS09GRl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMWUwMDApID4+IDEzKQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzFfVElNSU5HX0JBQ0tPRkZfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTMpICYgMHgwMDAxZTAwMCkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18xX0VOQUJMRV9IVF9GSU5FX1BQTV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMV9FTkFCTEVfSFRfRklORV9QUE1fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzFfRU5BQkxFX0hUX0ZJTkVfUFBNX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18xX0VOQUJMRV9IVF9GSU5FX1BQTV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAyMDAwMCkgPj4gMTcpCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMV9FTkFCTEVfSFRfRklORV9QUE1fU0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNykgJiAweDAwMDIwMDAwKQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzFfSFRfRklORV9QUE1fU1RSRUFNX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18xX0hUX0ZJTkVfUFBNX1NUUkVBTV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMV9IVF9GSU5FX1BQTV9TVFJFQU1fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBjMDAwMAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzFfSFRfRklORV9QUE1fU1RSRUFNX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMGMwMDAwKSA+PiAxOCkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18xX0hUX0ZJTkVfUFBNX1NUUkVBTV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE4KSAmIDB4MDAwYzAwMDApCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMV9IVF9GSU5FX1BQTV9RQU1fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzFfSFRfRklORV9QUE1fUUFNX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18xX0hUX0ZJTkVfUFBNX1FBTV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMzAwMDAwCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMV9IVF9GSU5FX1BQTV9RQU1fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAzMDAwMDApID4+IDIwKQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzFfSFRfRklORV9QUE1fUUFNX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjApICYgMHgwMDMwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18xX0VOQUJMRV9MT05HX0NIQU5GSUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMV9FTkFCTEVfTE9OR19DSEFORklMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzFfRU5BQkxFX0xPTkdfQ0hBTkZJTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18xX0VOQUJMRV9MT05HX0NIQU5GSUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDQwMDAwMCkgPj4gMjIpCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMV9FTkFCTEVfTE9OR19DSEFORklMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMikgJiAweDAwNDAwMDAwKQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzFfRU5BQkxFX1JYX1NUQkNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18xX0VOQUJMRV9SWF9TVEJDX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMV9FTkFCTEVfUlhfU1RCQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzFfRU5BQkxFX1JYX1NUQkNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwODAwMDAwKSA+PiAyMykKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18xX0VOQUJMRV9SWF9TVEJDX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIzKSAmIDB4MDA4MDAwMDApCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMV9FTkFCTEVfQ0hBTk5FTF9GSUxURVJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzFfRU5BQkxFX0NIQU5ORUxfRklMVEVSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18xX0VOQUJMRV9DSEFOTkVMX0ZJTFRFUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMV9FTkFCTEVfQ0hBTk5FTF9GSUxURVJfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDEwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzFfRU5BQkxFX0NIQU5ORUxfRklMVEVSX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjQpICYgMHgwMTAwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18xX0ZBTFNFX0FMQVJNX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMV9GQUxTRV9BTEFSTV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzFfRkFMU0VfQUxBUk1fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18xX0ZBTFNFX0FMQVJNX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwNjAwMDAwMCkgPj4gMjUpCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMV9GQUxTRV9BTEFSTV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNSkgJiAweDA2MDAwMDAwKQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzFfRU5BQkxFX0xPTkdfUkVTQ0FMRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18xX0VOQUJMRV9MT05HX1JFU0NBTEVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMV9FTkFCTEVfTE9OR19SRVNDQUxFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzFfRU5BQkxFX0xPTkdfUkVTQ0FMRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDA4MDAwMDAwKSA+PiAyNykKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18xX0VOQUJMRV9MT05HX1JFU0NBTEVfU0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI3KSAmIDB4MDgwMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMV9USU1JTkdfTEVBS19FTkFCTEVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzFfVElNSU5HX0xFQUtfRU5BQkxFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18xX1RJTUlOR19MRUFLX0VOQUJMRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMV9USU1JTkdfTEVBS19FTkFCTEVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MTAwMDAwMDApID4+IDI4KQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzFfVElNSU5HX0xFQUtfRU5BQkxFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjgpICYgMHgxMDAwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18xX0NPQVJTRV9QUE1fU0VMRUNUX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMV9DT0FSU0VfUFBNX1NFTEVDVF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzFfQ09BUlNFX1BQTV9TRUxFQ1RfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjAwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18xX0NPQVJTRV9QUE1fU0VMRUNUX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg2MDAwMDAwMCkgPj4gMjkpCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMV9DT0FSU0VfUFBNX1NFTEVDVF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyOSkgJiAweDYwMDAwMDAwKQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzFfRkZUX1NDQUxJTkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18xX0ZGVF9TQ0FMSU5HX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMV9GRlRfU0NBTElOR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzFfRkZUX1NDQUxJTkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDgwMDAwMDAwKSA+PiAzMSkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18xX0ZGVF9TQ0FMSU5HX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMxKSAmIDB4ODAwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfdGltaW5nX2NvbnRyb2xzXzIgKi8KLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18yX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5ODEwCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTgxMAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzJfRk9SQ0VEX0RFTFRBX1BISV9TWU1CT0xfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18yX0ZPUkNFRF9ERUxUQV9QSElfU1lNQk9MX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMl9GT1JDRURfREVMVEFfUEhJX1NZTUJPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGZmZgotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzJfRk9SQ0VEX0RFTFRBX1BISV9TWU1CT0xfR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMGZmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18yX0ZPUkNFRF9ERUxUQV9QSElfU1lNQk9MX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDBmZmYpCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMl9GT1JDRV9ERUxUQV9QSElfU1lNQk9MX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzJfRk9SQ0VfREVMVEFfUEhJX1NZTUJPTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18yX0ZPUkNFX0RFTFRBX1BISV9TWU1CT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMl9GT1JDRV9ERUxUQV9QSElfU1lNQk9MX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDEwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzJfRk9SQ0VfREVMVEFfUEhJX1NZTUJPTF9TRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTIpICYgMHgwMDAwMTAwMCkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18yX0VOQUJMRV9NQUdOSVRVREVfVFJBQ0tfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMl9FTkFCTEVfTUFHTklUVURFX1RSQUNLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzJfRU5BQkxFX01BR05JVFVERV9UUkFDS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18yX0VOQUJMRV9NQUdOSVRVREVfVFJBQ0tfR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMjAwMCkgPj4gMTMpCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMl9FTkFCTEVfTUFHTklUVURFX1RSQUNLX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMykgJiAweDAwMDAyMDAwKQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzJfRU5BQkxFX1NMT1BFX0ZJTFRFUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18yX0VOQUJMRV9TTE9QRV9GSUxURVJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMl9FTkFCTEVfU0xPUEVfRklMVEVSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzJfRU5BQkxFX1NMT1BFX0ZJTFRFUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDA0MDAwKSA+PiAxNCkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18yX0VOQUJMRV9TTE9QRV9GSUxURVJfU0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE0KSAmIDB4MDAwMDQwMDApCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMl9FTkFCTEVfT0ZGU0VUX0ZJTFRFUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzJfRU5BQkxFX09GRlNFVF9GSUxURVJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18yX0VOQUJMRV9PRkZTRVRfRklMVEVSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMl9FTkFCTEVfT0ZGU0VUX0ZJTFRFUl9HRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDgwMDApID4+IDE1KQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzJfRU5BQkxFX09GRlNFVF9GSUxURVJfU0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTUpICYgMHgwMDAwODAwMCkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18yX0RDX09GRl9ERUxUQUZfVEhSRVNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMl9EQ19PRkZfREVMVEFGX1RIUkVTX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzJfRENfT0ZGX0RFTFRBRl9USFJFU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA3ZjAwMDAKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18yX0RDX09GRl9ERUxUQUZfVEhSRVNfR0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDdmMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMl9EQ19PRkZfREVMVEFGX1RIUkVTX1NFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAwN2YwMDAwKQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzJfRENfT0ZGX1RJTV9DT05TVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18yX0RDX09GRl9USU1fQ09OU1RfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMl9EQ19PRkZfVElNX0NPTlNUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwMDAwMAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzJfRENfT0ZGX1RJTV9DT05TVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDA3MDAwMDAwKSA+PiAyNCkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18yX0RDX09GRl9USU1fQ09OU1RfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI0KSAmIDB4MDcwMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMl9FTkFCTEVfRENfT0ZGU0VUX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzJfRU5BQkxFX0RDX09GRlNFVF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18yX0VOQUJMRV9EQ19PRkZTRVRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMl9FTkFCTEVfRENfT0ZGU0VUX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDgwMDAwMDApID4+IDI3KQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzJfRU5BQkxFX0RDX09GRlNFVF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjcpICYgMHgwODAwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18yX0VOQUJMRV9EQ19PRkZTRVRfVFJBQ0tfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMl9FTkFCTEVfRENfT0ZGU0VUX1RSQUNLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzJfRU5BQkxFX0RDX09GRlNFVF9UUkFDS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18yX0VOQUJMRV9EQ19PRkZTRVRfVFJBQ0tfR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgxMDAwMDAwMCkgPj4gMjgpCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMl9FTkFCTEVfRENfT0ZGU0VUX1RSQUNLX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCAyOCkgJiAweDEwMDAwMDAwKQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzJfRU5BQkxFX1dFSUdIVElOR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18yX0VOQUJMRV9XRUlHSFRJTkdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMl9FTkFCTEVfV0VJR0hUSU5HX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzJfRU5BQkxFX1dFSUdIVElOR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDIwMDAwMDAwKSA+PiAyOSkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18yX0VOQUJMRV9XRUlHSFRJTkdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI5KSAmIDB4MjAwMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMl9UUkFDRUJBQ0sxMjhfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzJfVFJBQ0VCQUNLMTI4X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18yX1RSQUNFQkFDSzEyOF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMl9UUkFDRUJBQ0sxMjhfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NDAwMDAwMDApID4+IDMwKQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzJfVFJBQ0VCQUNLMTI4X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMzApICYgMHg0MDAwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18yX0VOQUJMRV9IVF9GSU5FX1RJTUlOR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMl9FTkFCTEVfSFRfRklORV9USU1JTkdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzJfRU5BQkxFX0hUX0ZJTkVfVElNSU5HX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18yX0VOQUJMRV9IVF9GSU5FX1RJTUlOR19HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHg4MDAwMDAwMCkgPj4gMzEpCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfMl9FTkFCTEVfSFRfRklORV9USU1JTkdfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMSkgJiAweDgwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3RpbWluZ19jb250cm9sc18zICovCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfM19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTgxNAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk4MTQKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18zX1BQTV9SRVNDVUVfSU5URVJWQUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfM19QUE1fUkVTQ1VFX0lOVEVSVkFMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzNfUFBNX1JFU0NVRV9JTlRFUlZBTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18zX1BQTV9SRVNDVUVfSU5URVJWQUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfM19QUE1fUkVTQ1VFX0lOVEVSVkFMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMGZmKQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzNfRU5BQkxFX1BQTV9SRVNDVUVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18zX0VOQUJMRV9QUE1fUkVTQ1VFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfM19FTkFCTEVfUFBNX1JFU0NVRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzNfRU5BQkxFX1BQTV9SRVNDVUVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDEwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18zX0VOQUJMRV9QUE1fUkVTQ1VFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDAxMDApCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfM19FTkFCTEVfRklORV9QUE1fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzNfRU5BQkxFX0ZJTkVfUFBNX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18zX0VOQUJMRV9GSU5FX1BQTV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfM19FTkFCTEVfRklORV9QUE1fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMjAwKSA+PiA5KQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzNfRU5BQkxFX0ZJTkVfUFBNX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDkpICYgMHgwMDAwMDIwMCkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18zX0VOQUJMRV9GSU5FX0lOVEVSUF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfM19FTkFCTEVfRklORV9JTlRFUlBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzNfRU5BQkxFX0ZJTkVfSU5URVJQX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18zX0VOQUJMRV9GSU5FX0lOVEVSUF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDQwMCkgPj4gMTApCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfM19FTkFCTEVfRklORV9JTlRFUlBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMCkgJiAweDAwMDAwNDAwKQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzNfQ09OVElOVU9VU19QUE1fUkVTQ1VFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18zX0NPTlRJTlVPVVNfUFBNX1JFU0NVRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfM19DT05USU5VT1VTX1BQTV9SRVNDVUVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzNfQ09OVElOVU9VU19QUE1fUkVTQ1VFX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwODAwKSA+PiAxMSkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18zX0NPTlRJTlVPVVNfUFBNX1JFU0NVRV9TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IDExKSAmIDB4MDAwMDA4MDApCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfM19FTkFCTEVfREZfQ0hBTkVTVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzNfRU5BQkxFX0RGX0NIQU5FU1RfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18zX0VOQUJMRV9ERl9DSEFORVNUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfM19FTkFCTEVfREZfQ0hBTkVTVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDEwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzNfRU5BQkxFX0RGX0NIQU5FU1RfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTIpICYgMHgwMDAwMTAwMCkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18zX0RFTFRBX1NMT1BFX0NPRUZfRVhQX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfM19ERUxUQV9TTE9QRV9DT0VGX0VYUF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzNfREVMVEFfU0xPUEVfQ09FRl9FWFBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMWUwMDAKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18zX0RFTFRBX1NMT1BFX0NPRUZfRVhQX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAxZTAwMCkgPj4gMTMpCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfM19ERUxUQV9TTE9QRV9DT0VGX0VYUF9TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMykgJiAweDAwMDFlMDAwKQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzNfREVMVEFfU0xPUEVfQ09FRl9NQU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18zX0RFTFRBX1NMT1BFX0NPRUZfTUFOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTFNfM19ERUxUQV9TTE9QRV9DT0VGX01BTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZmZlMDAwMAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xTXzNfREVMVEFfU0xPUEVfQ09FRl9NQU5fR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmUwMDAwKSA+PiAxNykKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MU18zX0RFTFRBX1NMT1BFX0NPRUZfTUFOX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE3KSAmIDB4ZmZmZTAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfRDJfY2hpcF9pZCAqLwotI2RlZmluZSBQSFlfQkJfRDJfQ0hJUF9JRF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk4MTgKLSNkZWZpbmUgUEhZX0JCX0QyX0NISVBfSURfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5ODE4Ci0jZGVmaW5lIFBIWV9CQl9EMl9DSElQX0lEX09MRF9JRF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQkJfRDJfQ0hJUF9JRF9PTERfSURfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0QyX0NISVBfSURfT0xEX0lEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIFBIWV9CQl9EMl9DSElQX0lEX09MRF9JRF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMGZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfRDJfQ0hJUF9JRF9JRF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX0QyX0NISVBfSURfSURfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9EMl9DSElQX0lEX0lEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZmZmZmYwMAotI2RlZmluZSBQSFlfQkJfRDJfQ0hJUF9JRF9JRF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhmZmZmZmYwMCkgPj4gOCkKLQotLyogbWFjcm9zIGZvciBCQl9hY3RpdmUgKi8KLSNkZWZpbmUgUEhZX0JCX0FDVElWRV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5ODFjCi0jZGVmaW5lIFBIWV9CQl9BQ1RJVkVfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTgxYwotI2RlZmluZSBQSFlfQkJfQUNUSVZFX0NGX0FDVElWRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0FDVElWRV9DRl9BQ1RJVkVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9BQ1RJVkVfQ0ZfQUNUSVZFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBQSFlfQkJfQUNUSVZFX0NGX0FDVElWRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMSkgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0FDVElWRV9DRl9BQ1RJVkVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDEpCi0KLS8qIG1hY3JvcyBmb3IgQkJfdHhfdGltaW5nXzEgKi8KLSNkZWZpbmUgUEhZX0JCX1RYX1RJTUlOR18xX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5ODIwCi0jZGVmaW5lIFBIWV9CQl9UWF9USU1JTkdfMV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTgyMAotI2RlZmluZSBQSFlfQkJfVFhfVElNSU5HXzFfVFhfRlJBTUVfVE9fQURDX09GRl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0JCX1RYX1RJTUlOR18xX1RYX0ZSQU1FX1RPX0FEQ19PRkZfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9UWF9USU1JTkdfMV9UWF9GUkFNRV9UT19BRENfT0ZGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBQSFlfQkJfVFhfVElNSU5HXzFfVFhfRlJBTUVfVE9fQURDX09GRl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDBmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1RYX1RJTUlOR18xX1RYX0ZSQU1FX1RPX0FEQ19PRkZfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwZmYpCi0jZGVmaW5lIFBIWV9CQl9UWF9USU1JTkdfMV9UWF9GUkFNRV9UT19BMl9SWF9PRkZfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQkJfVFhfVElNSU5HXzFfVFhfRlJBTUVfVE9fQTJfUlhfT0ZGX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0JCX1RYX1RJTUlOR18xX1RYX0ZSQU1FX1RPX0EyX1JYX09GRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBmZjAwCi0jZGVmaW5lIFBIWV9CQl9UWF9USU1JTkdfMV9UWF9GUkFNRV9UT19BMl9SWF9PRkZfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDBmZjAwKSA+PiA4KQotI2RlZmluZSBQSFlfQkJfVFhfVElNSU5HXzFfVFhfRlJBTUVfVE9fQTJfUlhfT0ZGX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwZmYwMCkKLSNkZWZpbmUgUEhZX0JCX1RYX1RJTUlOR18xX1RYX0ZSQU1FX1RPX0RBQ19PTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9CQl9UWF9USU1JTkdfMV9UWF9GUkFNRV9UT19EQUNfT05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQkJfVFhfVElNSU5HXzFfVFhfRlJBTUVfVE9fREFDX09OX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBmZjAwMDAKLSNkZWZpbmUgUEhZX0JCX1RYX1RJTUlOR18xX1RYX0ZSQU1FX1RPX0RBQ19PTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMGZmMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9CQl9UWF9USU1JTkdfMV9UWF9GUkFNRV9UT19EQUNfT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAwZmYwMDAwKQotI2RlZmluZSBQSFlfQkJfVFhfVElNSU5HXzFfVFhfRlJBTUVfVE9fQTJfVFhfT05fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX1RYX1RJTUlOR18xX1RYX0ZSQU1FX1RPX0EyX1RYX09OX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9CQl9UWF9USU1JTkdfMV9UWF9GUkFNRV9UT19BMl9UWF9PTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZjAwMDAwMAotI2RlZmluZSBQSFlfQkJfVFhfVElNSU5HXzFfVFhfRlJBTUVfVE9fQTJfVFhfT05fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmMDAwMDAwKSA+PiAyNCkKLSNkZWZpbmUgUEhZX0JCX1RYX1RJTUlOR18xX1RYX0ZSQU1FX1RPX0EyX1RYX09OX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI0KSAmIDB4ZmYwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfdHhfdGltaW5nXzIgKi8KLSNkZWZpbmUgUEhZX0JCX1RYX1RJTUlOR18yX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5ODI0Ci0jZGVmaW5lIFBIWV9CQl9UWF9USU1JTkdfMl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTgyNAotI2RlZmluZSBQSFlfQkJfVFhfVElNSU5HXzJfVFhfRlJBTUVfVE9fVFhfRF9TVEFSVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0JCX1RYX1RJTUlOR18yX1RYX0ZSQU1FX1RPX1RYX0RfU1RBUlRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9UWF9USU1JTkdfMl9UWF9GUkFNRV9UT19UWF9EX1NUQVJUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBQSFlfQkJfVFhfVElNSU5HXzJfVFhfRlJBTUVfVE9fVFhfRF9TVEFSVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDBmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1RYX1RJTUlOR18yX1RYX0ZSQU1FX1RPX1RYX0RfU1RBUlRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwZmYpCi0jZGVmaW5lIFBIWV9CQl9UWF9USU1JTkdfMl9UWF9GUkFNRV9UT19QQV9PTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQkJfVFhfVElNSU5HXzJfVFhfRlJBTUVfVE9fUEFfT05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0JCX1RYX1RJTUlOR18yX1RYX0ZSQU1FX1RPX1BBX09OX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBmZjAwCi0jZGVmaW5lIFBIWV9CQl9UWF9USU1JTkdfMl9UWF9GUkFNRV9UT19QQV9PTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDBmZjAwKSA+PiA4KQotI2RlZmluZSBQSFlfQkJfVFhfVElNSU5HXzJfVFhfRlJBTUVfVE9fUEFfT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwZmYwMCkKLSNkZWZpbmUgUEhZX0JCX1RYX1RJTUlOR18yX1RYX0VORF9UT19QQV9PRkZfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9CQl9UWF9USU1JTkdfMl9UWF9FTkRfVE9fUEFfT0ZGX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQkJfVFhfVElNSU5HXzJfVFhfRU5EX1RPX1BBX09GRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBmZjAwMDAKLSNkZWZpbmUgUEhZX0JCX1RYX1RJTUlOR18yX1RYX0VORF9UT19QQV9PRkZfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMGZmMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9CQl9UWF9USU1JTkdfMl9UWF9FTkRfVE9fUEFfT0ZGX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAwZmYwMDAwKQotI2RlZmluZSBQSFlfQkJfVFhfVElNSU5HXzJfVFhfRU5EX1RPX0EyX1RYX09GRl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX1RYX1RJTUlOR18yX1RYX0VORF9UT19BMl9UWF9PRkZfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9CQl9UWF9USU1JTkdfMl9UWF9FTkRfVE9fQTJfVFhfT0ZGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZjAwMDAwMAotI2RlZmluZSBQSFlfQkJfVFhfVElNSU5HXzJfVFhfRU5EX1RPX0EyX1RYX09GRl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmMDAwMDAwKSA+PiAyNCkKLSNkZWZpbmUgUEhZX0JCX1RYX1RJTUlOR18yX1RYX0VORF9UT19BMl9UWF9PRkZfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI0KSAmIDB4ZmYwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfdHhfdGltaW5nXzMgKi8KLSNkZWZpbmUgUEhZX0JCX1RYX1RJTUlOR18zX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5ODI4Ci0jZGVmaW5lIFBIWV9CQl9UWF9USU1JTkdfM19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTgyOAotI2RlZmluZSBQSFlfQkJfVFhfVElNSU5HXzNfVFhfRU5EX1RPX0RBQ19PRkZfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0JCX1RYX1RJTUlOR18zX1RYX0VORF9UT19EQUNfT0ZGX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9UWF9USU1JTkdfM19UWF9FTkRfVE9fREFDX09GRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBQSFlfQkJfVFhfVElNSU5HXzNfVFhfRU5EX1RPX0RBQ19PRkZfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDBmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1RYX1RJTUlOR18zX1RYX0VORF9UT19EQUNfT0ZGX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwZmYpCi0jZGVmaW5lIFBIWV9CQl9UWF9USU1JTkdfM19UWF9GUkFNRV9UT19USEVSTV9DSEFJTl9PTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQkJfVFhfVElNSU5HXzNfVFhfRlJBTUVfVE9fVEhFUk1fQ0hBSU5fT05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0JCX1RYX1RJTUlOR18zX1RYX0ZSQU1FX1RPX1RIRVJNX0NIQUlOX09OX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBmZjAwCi0jZGVmaW5lIFBIWV9CQl9UWF9USU1JTkdfM19UWF9GUkFNRV9UT19USEVSTV9DSEFJTl9PTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDBmZjAwKSA+PiA4KQotI2RlZmluZSBQSFlfQkJfVFhfVElNSU5HXzNfVFhfRlJBTUVfVE9fVEhFUk1fQ0hBSU5fT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwZmYwMCkKLSNkZWZpbmUgUEhZX0JCX1RYX1RJTUlOR18zX1RYX0VORF9UT19BMl9SWF9PTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9CQl9UWF9USU1JTkdfM19UWF9FTkRfVE9fQTJfUlhfT05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQkJfVFhfVElNSU5HXzNfVFhfRU5EX1RPX0EyX1JYX09OX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBmZjAwMDAKLSNkZWZpbmUgUEhZX0JCX1RYX1RJTUlOR18zX1RYX0VORF9UT19BMl9SWF9PTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMGZmMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9CQl9UWF9USU1JTkdfM19UWF9FTkRfVE9fQTJfUlhfT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAwZmYwMDAwKQotI2RlZmluZSBQSFlfQkJfVFhfVElNSU5HXzNfVFhfRU5EX1RPX0FEQ19PTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX1RYX1RJTUlOR18zX1RYX0VORF9UT19BRENfT05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9CQl9UWF9USU1JTkdfM19UWF9FTkRfVE9fQURDX09OX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZjAwMDAwMAotI2RlZmluZSBQSFlfQkJfVFhfVElNSU5HXzNfVFhfRU5EX1RPX0FEQ19PTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmMDAwMDAwKSA+PiAyNCkKLSNkZWZpbmUgUEhZX0JCX1RYX1RJTUlOR18zX1RYX0VORF9UT19BRENfT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI0KSAmIDB4ZmYwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfYWRkYWNfcGFyYWxsZWxfY29udHJvbCAqLwotI2RlZmluZSBQSFlfQkJfQUREQUNfUEFSQUxMRUxfQ09OVFJPTF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk4MmMKLSNkZWZpbmUgUEhZX0JCX0FEREFDX1BBUkFMTEVMX0NPTlRST0xfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5ODJjCi0jZGVmaW5lIFBIWV9CQl9BRERBQ19QQVJBTExFTF9DT05UUk9MX09GRl9EQUNMUE1PREVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQkJfQUREQUNfUEFSQUxMRUxfQ09OVFJPTF9PRkZfREFDTFBNT0RFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0JCX0FEREFDX1BBUkFMTEVMX0NPTlRST0xfT0ZGX0RBQ0xQTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCi0jZGVmaW5lIFBIWV9CQl9BRERBQ19QQVJBTExFTF9DT05UUk9MX09GRl9EQUNMUE1PREVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDEwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQkJfQUREQUNfUEFSQUxMRUxfQ09OVFJPTF9PRkZfREFDTFBNT0RFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTIpICYgMHgwMDAwMTAwMCkKLSNkZWZpbmUgUEhZX0JCX0FEREFDX1BBUkFMTEVMX0NPTlRST0xfT0ZGX1BXRERBQ19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9CQl9BRERBQ19QQVJBTExFTF9DT05UUk9MX09GRl9QV0REQUNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfQUREQUNfUEFSQUxMRUxfQ09OVFJPTF9PRkZfUFdEREFDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKLSNkZWZpbmUgUEhZX0JCX0FEREFDX1BBUkFMTEVMX0NPTlRST0xfT0ZGX1BXRERBQ19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMjAwMCkgPj4gMTMpCi0jZGVmaW5lIFBIWV9CQl9BRERBQ19QQVJBTExFTF9DT05UUk9MX09GRl9QV0REQUNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMykgJiAweDAwMDAyMDAwKQotI2RlZmluZSBQSFlfQkJfQUREQUNfUEFSQUxMRUxfQ09OVFJPTF9PRkZfUFdEQURDX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0JCX0FEREFDX1BBUkFMTEVMX0NPTlRST0xfT0ZGX1BXREFEQ19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9CQl9BRERBQ19QQVJBTExFTF9DT05UUk9MX09GRl9QV0RBRENfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAotI2RlZmluZSBQSFlfQkJfQUREQUNfUEFSQUxMRUxfQ09OVFJPTF9PRkZfUFdEQURDX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDA4MDAwKSA+PiAxNSkKLSNkZWZpbmUgUEhZX0JCX0FEREFDX1BBUkFMTEVMX0NPTlRST0xfT0ZGX1BXREFEQ19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE1KSAmIDB4MDAwMDgwMDApCi0jZGVmaW5lIFBIWV9CQl9BRERBQ19QQVJBTExFTF9DT05UUk9MX09OX0RBQ0xQTU9ERV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQkJfQUREQUNfUEFSQUxMRUxfQ09OVFJPTF9PTl9EQUNMUE1PREVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0JCX0FEREFDX1BBUkFMTEVMX0NPTlRST0xfT05fREFDTFBNT0RFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9BRERBQ19QQVJBTExFTF9DT05UUk9MX09OX0RBQ0xQTU9ERV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MTAwMDAwMDApID4+IDI4KQotI2RlZmluZSBQSFlfQkJfQUREQUNfUEFSQUxMRUxfQ09OVFJPTF9PTl9EQUNMUE1PREVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjgpICYgMHgxMDAwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX0FEREFDX1BBUkFMTEVMX0NPTlRST0xfT05fUFdEREFDX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9CQl9BRERBQ19QQVJBTExFTF9DT05UUk9MX09OX1BXRERBQ19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQkJfQUREQUNfUEFSQUxMRUxfQ09OVFJPTF9PTl9QV0REQUNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX0FEREFDX1BBUkFMTEVMX0NPTlRST0xfT05fUFdEREFDX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgyMDAwMDAwMCkgPj4gMjkpCi0jZGVmaW5lIFBIWV9CQl9BRERBQ19QQVJBTExFTF9DT05UUk9MX09OX1BXRERBQ19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyOSkgJiAweDIwMDAwMDAwKQotI2RlZmluZSBQSFlfQkJfQUREQUNfUEFSQUxMRUxfQ09OVFJPTF9PTl9QV0RBRENfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX0FEREFDX1BBUkFMTEVMX0NPTlRST0xfT05fUFdEQURDX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9BRERBQ19QQVJBTExFTF9DT05UUk9MX09OX1BXREFEQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBQSFlfQkJfQUREQUNfUEFSQUxMRUxfQ09OVFJPTF9PTl9QV0RBRENfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDgwMDAwMDAwKSA+PiAzMSkKLSNkZWZpbmUgUEhZX0JCX0FEREFDX1BBUkFMTEVMX0NPTlRST0xfT05fUFdEQURDX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMxKSAmIDB4ODAwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfeHBhX3RpbWluZ19jb250cm9sICovCi0jZGVmaW5lIFBIWV9CQl9YUEFfVElNSU5HX0NPTlRST0xfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTgzNAotI2RlZmluZSBQSFlfQkJfWFBBX1RJTUlOR19DT05UUk9MX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk4MzQKLSNkZWZpbmUgUEhZX0JCX1hQQV9USU1JTkdfQ09OVFJPTF9UWF9GUkFNRV9UT19YUEFBX09OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9CQl9YUEFfVElNSU5HX0NPTlRST0xfVFhfRlJBTUVfVE9fWFBBQV9PTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfWFBBX1RJTUlOR19DT05UUk9MX1RYX0ZSQU1FX1RPX1hQQUFfT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgUEhZX0JCX1hQQV9USU1JTkdfQ09OVFJPTF9UWF9GUkFNRV9UT19YUEFBX09OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9YUEFfVElNSU5HX0NPTlRST0xfVFhfRlJBTUVfVE9fWFBBQV9PTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMGZmKQotI2RlZmluZSBQSFlfQkJfWFBBX1RJTUlOR19DT05UUk9MX1RYX0ZSQU1FX1RPX1hQQUJfT05fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0JCX1hQQV9USU1JTkdfQ09OVFJPTF9UWF9GUkFNRV9UT19YUEFCX09OX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9YUEFfVElNSU5HX0NPTlRST0xfVFhfRlJBTUVfVE9fWFBBQl9PTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBQSFlfQkJfWFBBX1RJTUlOR19DT05UUk9MX1RYX0ZSQU1FX1RPX1hQQUJfT05fR0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwZmYwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0JCX1hQQV9USU1JTkdfQ09OVFJPTF9UWF9GUkFNRV9UT19YUEFCX09OX1NFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMGZmMDApCi0jZGVmaW5lIFBIWV9CQl9YUEFfVElNSU5HX0NPTlRST0xfVFhfRU5EX1RPX1hQQUFfT0ZGX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQkJfWFBBX1RJTUlOR19DT05UUk9MX1RYX0VORF9UT19YUEFBX09GRl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0JCX1hQQV9USU1JTkdfQ09OVFJPTF9UWF9FTkRfVE9fWFBBQV9PRkZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwZmYwMDAwCi0jZGVmaW5lIFBIWV9CQl9YUEFfVElNSU5HX0NPTlRST0xfVFhfRU5EX1RPX1hQQUFfT0ZGX0dFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDBmZjAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQkJfWFBBX1RJTUlOR19DT05UUk9MX1RYX0VORF9UT19YUEFBX09GRl9TRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMGZmMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1hQQV9USU1JTkdfQ09OVFJPTF9UWF9FTkRfVE9fWFBBQl9PRkZfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9YUEFfVElNSU5HX0NPTlRST0xfVFhfRU5EX1RPX1hQQUJfT0ZGX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQkJfWFBBX1RJTUlOR19DT05UUk9MX1RYX0VORF9UT19YUEFCX09GRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmYwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1hQQV9USU1JTkdfQ09OVFJPTF9UWF9FTkRfVE9fWFBBQl9PRkZfR0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhmZjAwMDAwMCkgPj4gMjQpCi0jZGVmaW5lIFBIWV9CQl9YUEFfVElNSU5HX0NPTlRST0xfVFhfRU5EX1RPX1hQQUJfT0ZGX1NFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNCkgJiAweGZmMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX21pc2NfcGFfY29udHJvbCAqLwotI2RlZmluZSBQSFlfQkJfTUlTQ19QQV9DT05UUk9MX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk4MzgKLSNkZWZpbmUgUEhZX0JCX01JU0NfUEFfQ09OVFJPTF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5ODM4Ci0jZGVmaW5lIFBIWV9CQl9NSVNDX1BBX0NPTlRST0xfWFBBQV9BQ1RJVkVfSElHSF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfTUlTQ19QQV9DT05UUk9MX1hQQUFfQUNUSVZFX0hJR0hfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX01JU0NfUEFfQ09OVFJPTF9YUEFBX0FDVElWRV9ISUdIX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFBIWV9CQl9NSVNDX1BBX0NPTlRST0xfWFBBQV9BQ1RJVkVfSElHSF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAxKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfTUlTQ19QQV9DT05UUk9MX1hQQUFfQUNUSVZFX0hJR0hfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwMSkKLSNkZWZpbmUgUEhZX0JCX01JU0NfUEFfQ09OVFJPTF9YUEFCX0FDVElWRV9ISUdIX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9CQl9NSVNDX1BBX0NPTlRST0xfWFBBQl9BQ1RJVkVfSElHSF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQkJfTUlTQ19QQV9DT05UUk9MX1hQQUJfQUNUSVZFX0hJR0hfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgUEhZX0JCX01JU0NfUEFfQ09OVFJPTF9YUEFCX0FDVElWRV9ISUdIX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDIpID4+IDEpCi0jZGVmaW5lIFBIWV9CQl9NSVNDX1BBX0NPTlRST0xfWFBBQl9BQ1RJVkVfSElHSF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMSkgJiAweDAwMDAwMDAyKQotI2RlZmluZSBQSFlfQkJfTUlTQ19QQV9DT05UUk9MX0VOQUJMRV9YUEFBX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0JCX01JU0NfUEFfQ09OVFJPTF9FTkFCTEVfWFBBQV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9CQl9NSVNDX1BBX0NPTlRST0xfRU5BQkxFX1hQQUFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBQSFlfQkJfTUlTQ19QQV9DT05UUk9MX0VOQUJMRV9YUEFBX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwNCkgPj4gMikKLSNkZWZpbmUgUEhZX0JCX01JU0NfUEFfQ09OVFJPTF9FTkFCTEVfWFBBQV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyKSAmIDB4MDAwMDAwMDQpCi0jZGVmaW5lIFBIWV9CQl9NSVNDX1BBX0NPTlRST0xfRU5BQkxFX1hQQUJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQkJfTUlTQ19QQV9DT05UUk9MX0VOQUJMRV9YUEFCX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0JCX01JU0NfUEFfQ09OVFJPTF9FTkFCTEVfWFBBQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIFBIWV9CQl9NSVNDX1BBX0NPTlRST0xfRU5BQkxFX1hQQUJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDA4KSA+PiAzKQotI2RlZmluZSBQSFlfQkJfTUlTQ19QQV9DT05UUk9MX0VOQUJMRV9YUEFCX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMpICYgMHgwMDAwMDAwOCkKLQotLyogbWFjcm9zIGZvciBCQl90c3RkYWNfY29uc3RhbnQgKi8KLSNkZWZpbmUgUEhZX0JCX1RTVERBQ19DT05TVEFOVF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5ODNjCi0jZGVmaW5lIFBIWV9CQl9UU1REQUNfQ09OU1RBTlRfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTgzYwotI2RlZmluZSBQSFlfQkJfVFNUREFDX0NPTlNUQU5UX0NGX1RTVERBQ19DT05TVEFOVF9JX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0JCX1RTVERBQ19DT05TVEFOVF9DRl9UU1REQUNfQ09OU1RBTlRfSV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9UU1REQUNfQ09OU1RBTlRfQ0ZfVFNUREFDX0NPTlNUQU5UX0lfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDdmZgotI2RlZmluZSBQSFlfQkJfVFNUREFDX0NPTlNUQU5UX0NGX1RTVERBQ19DT05TVEFOVF9JX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDdmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1RTVERBQ19DT05TVEFOVF9DRl9UU1REQUNfQ09OU1RBTlRfSV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDA3ZmYpCi0jZGVmaW5lIFBIWV9CQl9UU1REQUNfQ09OU1RBTlRfQ0ZfVFNUREFDX0NPTlNUQU5UX1FfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQkJfVFNUREFDX0NPTlNUQU5UX0NGX1RTVERBQ19DT05TVEFOVF9RX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0JCX1RTVERBQ19DT05TVEFOVF9DRl9UU1REQUNfQ09OU1RBTlRfUV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwM2ZmODAwCi0jZGVmaW5lIFBIWV9CQl9UU1REQUNfQ09OU1RBTlRfQ0ZfVFNUREFDX0NPTlNUQU5UX1FfR0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAzZmY4MDApID4+IDExKQotI2RlZmluZSBQSFlfQkJfVFNUREFDX0NPTlNUQU5UX0NGX1RTVERBQ19DT05TVEFOVF9RX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTEpICYgMHgwMDNmZjgwMCkKLQotLyogbWFjcm9zIGZvciBCQl9maW5kX3NpZ25hbF9sb3cgKi8KLSNkZWZpbmUgUEhZX0JCX0ZJTkRfU0lHTkFMX0xPV19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5ODQwCi0jZGVmaW5lIFBIWV9CQl9GSU5EX1NJR05BTF9MT1dfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTg0MAotI2RlZmluZSBQSFlfQkJfRklORF9TSUdOQUxfTE9XX1JFTFNURVBfTE9XX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0JCX0ZJTkRfU0lHTkFMX0xPV19SRUxTVEVQX0xPV19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9GSU5EX1NJR05BTF9MT1dfUkVMU1RFUF9MT1dfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzZgotI2RlZmluZSBQSFlfQkJfRklORF9TSUdOQUxfTE9XX1JFTFNURVBfTE9XX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAzZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0ZJTkRfU0lHTkFMX0xPV19SRUxTVEVQX0xPV19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwM2YpCi0jZGVmaW5lIFBIWV9CQl9GSU5EX1NJR05BTF9MT1dfRklSU1RFUF9MT1dfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQkJfRklORF9TSUdOQUxfTE9XX0ZJUlNURVBfTE9XX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0JCX0ZJTkRfU0lHTkFMX0xPV19GSVJTVEVQX0xPV19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwZmMwCi0jZGVmaW5lIFBIWV9CQl9GSU5EX1NJR05BTF9MT1dfRklSU1RFUF9MT1dfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwZmMwKSA+PiA2KQotI2RlZmluZSBQSFlfQkJfRklORF9TSUdOQUxfTE9XX0ZJUlNURVBfTE9XX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDYpICYgMHgwMDAwMGZjMCkKLSNkZWZpbmUgUEhZX0JCX0ZJTkRfU0lHTkFMX0xPV19GSVJQV1JfTE9XX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9CQl9GSU5EX1NJR05BTF9MT1dfRklSUFdSX0xPV19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQkJfRklORF9TSUdOQUxfTE9XX0ZJUlBXUl9MT1dfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwZmYwMDAKLSNkZWZpbmUgUEhZX0JCX0ZJTkRfU0lHTkFMX0xPV19GSVJQV1JfTE9XX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDBmZjAwMCkgPj4gMTIpCi0jZGVmaW5lIFBIWV9CQl9GSU5EX1NJR05BTF9MT1dfRklSUFdSX0xPV19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMikgJiAweDAwMGZmMDAwKQotI2RlZmluZSBQSFlfQkJfRklORF9TSUdOQUxfTE9XX1lDT0tfTUFYX0xPV19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0JCX0ZJTkRfU0lHTkFMX0xPV19ZQ09LX01BWF9MT1dfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9CQl9GSU5EX1NJR05BTF9MT1dfWUNPS19NQVhfTE9XX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMGYwMDAwMAotI2RlZmluZSBQSFlfQkJfRklORF9TSUdOQUxfTE9XX1lDT0tfTUFYX0xPV19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwZjAwMDAwKSA+PiAyMCkKLSNkZWZpbmUgUEhZX0JCX0ZJTkRfU0lHTkFMX0xPV19ZQ09LX01BWF9MT1dfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIwKSAmIDB4MDBmMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9GSU5EX1NJR05BTF9MT1dfTE9OR19TQ19USFJFU0hfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQkJfRklORF9TSUdOQUxfTE9XX0xPTkdfU0NfVEhSRVNIX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0JCX0ZJTkRfU0lHTkFMX0xPV19MT05HX1NDX1RIUkVTSF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdmMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9GSU5EX1NJR05BTF9MT1dfTE9OR19TQ19USFJFU0hfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N2YwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQkJfRklORF9TSUdOQUxfTE9XX0xPTkdfU0NfVEhSRVNIX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjQpICYgMHg3ZjAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9zZXR0bGluZ190aW1lICovCi0jZGVmaW5lIFBIWV9CQl9TRVRUTElOR19USU1FX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTg0NAotI2RlZmluZSBQSFlfQkJfU0VUVExJTkdfVElNRV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk4NDQKLSNkZWZpbmUgUEhZX0JCX1NFVFRMSU5HX1RJTUVfQUdDX1NFVFRMSU5HX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9CQl9TRVRUTElOR19USU1FX0FHQ19TRVRUTElOR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfU0VUVExJTkdfVElNRV9BR0NfU0VUVExJTkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN2YKLSNkZWZpbmUgUEhZX0JCX1NFVFRMSU5HX1RJTUVfQUdDX1NFVFRMSU5HX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwN2YpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9TRVRUTElOR19USU1FX0FHQ19TRVRUTElOR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDdmKQotI2RlZmluZSBQSFlfQkJfU0VUVExJTkdfVElNRV9TV0lUQ0hfU0VUVExJTkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0JCX1NFVFRMSU5HX1RJTUVfU1dJVENIX1NFVFRMSU5HX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9CQl9TRVRUTElOR19USU1FX1NXSVRDSF9TRVRUTElOR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwM2Y4MAotI2RlZmluZSBQSFlfQkJfU0VUVExJTkdfVElNRV9TV0lUQ0hfU0VUVExJTkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwM2Y4MCkgPj4gNykKLSNkZWZpbmUgUEhZX0JCX1NFVFRMSU5HX1RJTUVfU1dJVENIX1NFVFRMSU5HX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA3KSAmIDB4MDAwMDNmODApCi0jZGVmaW5lIFBIWV9CQl9TRVRUTElOR19USU1FX0FEQ1NBVF9USFJMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQkJfU0VUVExJTkdfVElNRV9BRENTQVRfVEhSTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0JCX1NFVFRMSU5HX1RJTUVfQURDU0FUX1RIUkxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMGZjMDAwCi0jZGVmaW5lIFBIWV9CQl9TRVRUTElOR19USU1FX0FEQ1NBVF9USFJMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwZmMwMDApID4+IDE0KQotI2RlZmluZSBQSFlfQkJfU0VUVExJTkdfVElNRV9BRENTQVRfVEhSTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwMDBmYzAwMCkKLSNkZWZpbmUgUEhZX0JCX1NFVFRMSU5HX1RJTUVfQURDU0FUX1RIUkhfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9CQl9TRVRUTElOR19USU1FX0FEQ1NBVF9USFJIX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQkJfU0VUVExJTkdfVElNRV9BRENTQVRfVEhSSF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDNmMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1NFVFRMSU5HX1RJTUVfQURDU0FUX1RIUkhfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwM2YwMDAwMCkgPj4gMjApCi0jZGVmaW5lIFBIWV9CQl9TRVRUTElOR19USU1FX0FEQ1NBVF9USFJIX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMCkgJiAweDAzZjAwMDAwKQotI2RlZmluZSBQSFlfQkJfU0VUVExJTkdfVElNRV9MQlJFU0VUX0FEVkFOQ0VfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0JCX1NFVFRMSU5HX1RJTUVfTEJSRVNFVF9BRFZBTkNFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9CQl9TRVRUTElOR19USU1FX0xCUkVTRVRfQURWQU5DRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzYzAwMDAwMAotI2RlZmluZSBQSFlfQkJfU0VUVExJTkdfVElNRV9MQlJFU0VUX0FEVkFOQ0VfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDNjMDAwMDAwKSA+PiAyNikKLSNkZWZpbmUgUEhZX0JCX1NFVFRMSU5HX1RJTUVfTEJSRVNFVF9BRFZBTkNFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI2KSAmIDB4M2MwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfZ2Fpbl9mb3JjZV9tYXhfZ2FpbnNfYjAgKi8KLSNkZWZpbmUgUEhZX0JCX0dBSU5fRk9SQ0VfTUFYX0dBSU5TX0IwX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5ODQ4Ci0jZGVmaW5lIFBIWV9CQl9HQUlOX0ZPUkNFX01BWF9HQUlOU19CMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTg0OAotI2RlZmluZSBQSFlfQkJfR0FJTl9GT1JDRV9NQVhfR0FJTlNfQjBfWEFUVEVOMV9IWVNUX01BUkdJTl8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0JCX0dBSU5fRk9SQ0VfTUFYX0dBSU5TX0IwX1hBVFRFTjFfSFlTVF9NQVJHSU5fMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9CQl9HQUlOX0ZPUkNFX01BWF9HQUlOU19CMF9YQVRURU4xX0hZU1RfTUFSR0lOXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwM2Y4MAotI2RlZmluZSBQSFlfQkJfR0FJTl9GT1JDRV9NQVhfR0FJTlNfQjBfWEFUVEVOMV9IWVNUX01BUkdJTl8wX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgMHgwMDAwM2Y4MCkgPj4gNykKLSNkZWZpbmUgUEhZX0JCX0dBSU5fRk9SQ0VfTUFYX0dBSU5TX0IwX1hBVFRFTjFfSFlTVF9NQVJHSU5fMF9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCA3KSAmIDB4MDAwMDNmODApCi0jZGVmaW5lIFBIWV9CQl9HQUlOX0ZPUkNFX01BWF9HQUlOU19CMF9YQVRURU4yX0hZU1RfTUFSR0lOXzBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQkJfR0FJTl9GT1JDRV9NQVhfR0FJTlNfQjBfWEFUVEVOMl9IWVNUX01BUkdJTl8wX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0JCX0dBSU5fRk9SQ0VfTUFYX0dBSU5TX0IwX1hBVFRFTjJfSFlTVF9NQVJHSU5fMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMWZjMDAwCi0jZGVmaW5lIFBIWV9CQl9HQUlOX0ZPUkNFX01BWF9HQUlOU19CMF9YQVRURU4yX0hZU1RfTUFSR0lOXzBfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIDB4MDAxZmMwMDApID4+IDE0KQotI2RlZmluZSBQSFlfQkJfR0FJTl9GT1JDRV9NQVhfR0FJTlNfQjBfWEFUVEVOMl9IWVNUX01BUkdJTl8wX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwMDFmYzAwMCkKLSNkZWZpbmUgUEhZX0JCX0dBSU5fRk9SQ0VfTUFYX0dBSU5TX0IwX0dBSU5fRk9SQ0VfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9CQl9HQUlOX0ZPUkNFX01BWF9HQUlOU19CMF9HQUlOX0ZPUkNFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQkJfR0FJTl9GT1JDRV9NQVhfR0FJTlNfQjBfR0FJTl9GT1JDRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKLSNkZWZpbmUgUEhZX0JCX0dBSU5fRk9SQ0VfTUFYX0dBSU5TX0IwX0dBSU5fRk9SQ0VfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDIwMDAwMCkgPj4gMjEpCi0jZGVmaW5lIFBIWV9CQl9HQUlOX0ZPUkNFX01BWF9HQUlOU19CMF9HQUlOX0ZPUkNFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMSkgJiAweDAwMjAwMDAwKQotI2RlZmluZSBQSFlfQkJfR0FJTl9GT1JDRV9NQVhfR0FJTlNfQjBfRU5BQkxFX1NIQVJFRF9SWF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX0dBSU5fRk9SQ0VfTUFYX0dBSU5TX0IwX0VOQUJMRV9TSEFSRURfUlhfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9HQUlOX0ZPUkNFX01BWF9HQUlOU19CMF9FTkFCTEVfU0hBUkVEX1JYX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBQSFlfQkJfR0FJTl9GT1JDRV9NQVhfR0FJTlNfQjBfRU5BQkxFX1NIQVJFRF9SWF9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDgwMDAwMDAwKSA+PiAzMSkKLSNkZWZpbmUgUEhZX0JCX0dBSU5fRk9SQ0VfTUFYX0dBSU5TX0IwX0VOQUJMRV9TSEFSRURfUlhfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IDMxKSAmIDB4ODAwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfZ2FpbnNfbWluX29mZnNldHNfYjAgKi8KLSNkZWZpbmUgUEhZX0JCX0dBSU5TX01JTl9PRkZTRVRTX0IwX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5ODRjCi0jZGVmaW5lIFBIWV9CQl9HQUlOU19NSU5fT0ZGU0VUU19CMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTg0YwotI2RlZmluZSBQSFlfQkJfR0FJTlNfTUlOX09GRlNFVFNfQjBfT0ZGU0VUQzFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0JCX0dBSU5TX01JTl9PRkZTRVRTX0IwX09GRlNFVEMxX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9HQUlOU19NSU5fT0ZGU0VUU19CMF9PRkZTRVRDMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3ZgotI2RlZmluZSBQSFlfQkJfR0FJTlNfTUlOX09GRlNFVFNfQjBfT0ZGU0VUQzFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDA3ZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0dBSU5TX01JTl9PRkZTRVRTX0IwX09GRlNFVEMxX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwN2YpCi0jZGVmaW5lIFBIWV9CQl9HQUlOU19NSU5fT0ZGU0VUU19CMF9PRkZTRVRDMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQkJfR0FJTlNfTUlOX09GRlNFVFNfQjBfT0ZGU0VUQzJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0JCX0dBSU5TX01JTl9PRkZTRVRTX0IwX09GRlNFVEMyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwZjgwCi0jZGVmaW5lIFBIWV9CQl9HQUlOU19NSU5fT0ZGU0VUU19CMF9PRkZTRVRDMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwZjgwKSA+PiA3KQotI2RlZmluZSBQSFlfQkJfR0FJTlNfTUlOX09GRlNFVFNfQjBfT0ZGU0VUQzJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDcpICYgMHgwMDAwMGY4MCkKLSNkZWZpbmUgUEhZX0JCX0dBSU5TX01JTl9PRkZTRVRTX0IwX09GRlNFVEMzX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9HQUlOU19NSU5fT0ZGU0VUU19CMF9PRkZTRVRDM19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQkJfR0FJTlNfTUlOX09GRlNFVFNfQjBfT0ZGU0VUQzNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMWYwMDAKLSNkZWZpbmUgUEhZX0JCX0dBSU5TX01JTl9PRkZTRVRTX0IwX09GRlNFVEMzX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAxZjAwMCkgPj4gMTIpCi0jZGVmaW5lIFBIWV9CQl9HQUlOU19NSU5fT0ZGU0VUU19CMF9PRkZTRVRDM19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMikgJiAweDAwMDFmMDAwKQotI2RlZmluZSBQSFlfQkJfR0FJTlNfTUlOX09GRlNFVFNfQjBfUkZfR0FJTl9GXzBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0JCX0dBSU5TX01JTl9PRkZTRVRTX0IwX1JGX0dBSU5fRl8wX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9CQl9HQUlOU19NSU5fT0ZGU0VUU19CMF9SRl9HQUlOX0ZfMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMWZlMDAwMAotI2RlZmluZSBQSFlfQkJfR0FJTlNfTUlOX09GRlNFVFNfQjBfUkZfR0FJTl9GXzBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAxZmUwMDAwKSA+PiAxNykKLSNkZWZpbmUgUEhZX0JCX0dBSU5TX01JTl9PRkZTRVRTX0IwX1JGX0dBSU5fRl8wX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE3KSAmIDB4MDFmZTAwMDApCi0jZGVmaW5lIFBIWV9CQl9HQUlOU19NSU5fT0ZGU0VUU19CMF9YQVRURU4xX1NXX0ZfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQkJfR0FJTlNfTUlOX09GRlNFVFNfQjBfWEFUVEVOMV9TV19GXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0JCX0dBSU5TX01JTl9PRkZTRVRTX0IwX1hBVFRFTjFfU1dfRl8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9HQUlOU19NSU5fT0ZGU0VUU19CMF9YQVRURU4xX1NXX0ZfMF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDIwMDAwMDApID4+IDI1KQotI2RlZmluZSBQSFlfQkJfR0FJTlNfTUlOX09GRlNFVFNfQjBfWEFUVEVOMV9TV19GXzBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjUpICYgMHgwMjAwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX0dBSU5TX01JTl9PRkZTRVRTX0IwX1hBVFRFTjJfU1dfRl8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9CQl9HQUlOU19NSU5fT0ZGU0VUU19CMF9YQVRURU4yX1NXX0ZfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQkJfR0FJTlNfTUlOX09GRlNFVFNfQjBfWEFUVEVOMl9TV19GXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX0dBSU5TX01JTl9PRkZTRVRTX0IwX1hBVFRFTjJfU1dfRl8wX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwNDAwMDAwMCkgPj4gMjYpCi0jZGVmaW5lIFBIWV9CQl9HQUlOU19NSU5fT0ZGU0VUU19CMF9YQVRURU4yX1NXX0ZfMF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNikgJiAweDA0MDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX2Rlc2lyZWRfc2lnc2l6ZSAqLwotI2RlZmluZSBQSFlfQkJfREVTSVJFRF9TSUdTSVpFX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk4NTAKLSNkZWZpbmUgUEhZX0JCX0RFU0lSRURfU0lHU0laRV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5ODUwCi0jZGVmaW5lIFBIWV9CQl9ERVNJUkVEX1NJR1NJWkVfQURDX0RFU0lSRURfU0laRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQkJfREVTSVJFRF9TSUdTSVpFX0FEQ19ERVNJUkVEX1NJWkVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0RFU0lSRURfU0lHU0laRV9BRENfREVTSVJFRF9TSVpFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIFBIWV9CQl9ERVNJUkVEX1NJR1NJWkVfQURDX0RFU0lSRURfU0laRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMGZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfREVTSVJFRF9TSUdTSVpFX0FEQ19ERVNJUkVEX1NJWkVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDBmZikKLSNkZWZpbmUgUEhZX0JCX0RFU0lSRURfU0lHU0laRV9UT1RBTF9ERVNJUkVEX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9CQl9ERVNJUkVEX1NJR1NJWkVfVE9UQUxfREVTSVJFRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQkJfREVTSVJFRF9TSUdTSVpFX1RPVEFMX0RFU0lSRURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGZmMDAwMDAKLSNkZWZpbmUgUEhZX0JCX0RFU0lSRURfU0lHU0laRV9UT1RBTF9ERVNJUkVEX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwZmYwMDAwMCkgPj4gMjApCi0jZGVmaW5lIFBIWV9CQl9ERVNJUkVEX1NJR1NJWkVfVE9UQUxfREVTSVJFRF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMCkgJiAweDBmZjAwMDAwKQotI2RlZmluZSBQSFlfQkJfREVTSVJFRF9TSUdTSVpFX0lOSVRfR0NfQ09VTlRfTUFYX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0JCX0RFU0lSRURfU0lHU0laRV9JTklUX0dDX0NPVU5UX01BWF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9CQl9ERVNJUkVEX1NJR1NJWkVfSU5JVF9HQ19DT1VOVF9NQVhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzMDAwMDAwMAotI2RlZmluZSBQSFlfQkJfREVTSVJFRF9TSUdTSVpFX0lOSVRfR0NfQ09VTlRfTUFYX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDMwMDAwMDAwKSA+PiAyOCkKLSNkZWZpbmUgUEhZX0JCX0RFU0lSRURfU0lHU0laRV9JTklUX0dDX0NPVU5UX01BWF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI4KSAmIDB4MzAwMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9ERVNJUkVEX1NJR1NJWkVfUkVEVUNFX0lOSVRfR0NfQ09VTlRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQkJfREVTSVJFRF9TSUdTSVpFX1JFRFVDRV9JTklUX0dDX0NPVU5UX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0JCX0RFU0lSRURfU0lHU0laRV9SRURVQ0VfSU5JVF9HQ19DT1VOVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9ERVNJUkVEX1NJR1NJWkVfUkVEVUNFX0lOSVRfR0NfQ09VTlRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NDAwMDAwMDApID4+IDMwKQotI2RlZmluZSBQSFlfQkJfREVTSVJFRF9TSUdTSVpFX1JFRFVDRV9JTklUX0dDX0NPVU5UX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMzApICYgMHg0MDAwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX0RFU0lSRURfU0lHU0laRV9FTkFfSU5JVF9HQUlOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9ERVNJUkVEX1NJR1NJWkVfRU5BX0lOSVRfR0FJTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfREVTSVJFRF9TSUdTSVpFX0VOQV9JTklUX0dBSU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX0RFU0lSRURfU0lHU0laRV9FTkFfSU5JVF9HQUlOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg4MDAwMDAwMCkgPj4gMzEpCi0jZGVmaW5lIFBIWV9CQl9ERVNJUkVEX1NJR1NJWkVfRU5BX0lOSVRfR0FJTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMSkgJiAweDgwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3RpbWluZ19jb250cm9sXzNhICovCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF8zQV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTg1NAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfM0FfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk4NTQKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzNBX1NURV9USFJfSElfUlNTSV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF8zQV9TVEVfVEhSX0hJX1JTU0lfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfM0FfU1RFX1RIUl9ISV9SU1NJX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN2YKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzNBX1NURV9USFJfSElfUlNTSV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwN2YpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF8zQV9TVEVfVEhSX0hJX1JTU0lfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDdmKQotCi0vKiBtYWNyb3MgZm9yIEJCX2ZpbmRfc2lnbmFsICovCi0jZGVmaW5lIFBIWV9CQl9GSU5EX1NJR05BTF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTg1OAotI2RlZmluZSBQSFlfQkJfRklORF9TSUdOQUxfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk4NTgKLSNkZWZpbmUgUEhZX0JCX0ZJTkRfU0lHTkFMX1JFTFNURVBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9CQl9GSU5EX1NJR05BTF9SRUxTVEVQX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfRklORF9TSUdOQUxfUkVMU1RFUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM2YKLSNkZWZpbmUgUEhZX0JCX0ZJTkRfU0lHTkFMX1JFTFNURVBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwM2YpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9GSU5EX1NJR05BTF9SRUxTVEVQX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDNmKQotI2RlZmluZSBQSFlfQkJfRklORF9TSUdOQUxfUkVMUFdSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0JCX0ZJTkRfU0lHTkFMX1JFTFBXUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9CQl9GSU5EX1NJR05BTF9SRUxQV1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGZjMAotI2RlZmluZSBQSFlfQkJfRklORF9TSUdOQUxfUkVMUFdSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMGZjMCkgPj4gNikKLSNkZWZpbmUgUEhZX0JCX0ZJTkRfU0lHTkFMX1JFTFBXUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA2KSAmIDB4MDAwMDBmYzApCi0jZGVmaW5lIFBIWV9CQl9GSU5EX1NJR05BTF9GSVJTVEVQX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQkJfRklORF9TSUdOQUxfRklSU1RFUF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0JCX0ZJTkRfU0lHTkFMX0ZJUlNURVBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDNmMDAwCi0jZGVmaW5lIFBIWV9CQl9GSU5EX1NJR05BTF9GSVJTVEVQX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwM2YwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQkJfRklORF9TSUdOQUxfRklSU1RFUF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTIpICYgMHgwMDAzZjAwMCkKLSNkZWZpbmUgUEhZX0JCX0ZJTkRfU0lHTkFMX0ZJUlBXUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9CQl9GSU5EX1NJR05BTF9GSVJQV1JfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQkJfRklORF9TSUdOQUxfRklSUFdSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDNmYzAwMDAKLSNkZWZpbmUgUEhZX0JCX0ZJTkRfU0lHTkFMX0ZJUlBXUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwM2ZjMDAwMCkgPj4gMTgpCi0jZGVmaW5lIFBIWV9CQl9GSU5EX1NJR05BTF9GSVJQV1JfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOCkgJiAweDAzZmMwMDAwKQotI2RlZmluZSBQSFlfQkJfRklORF9TSUdOQUxfTTFDT1VOVF9NQVhfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX0ZJTkRfU0lHTkFMX00xQ09VTlRfTUFYX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9CQl9GSU5EX1NJR05BTF9NMUNPVU5UX01BWF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmYzAwMDAwMAotI2RlZmluZSBQSFlfQkJfRklORF9TSUdOQUxfTTFDT1VOVF9NQVhfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZjMDAwMDAwKSA+PiAyNikKLSNkZWZpbmUgUEhZX0JCX0ZJTkRfU0lHTkFMX00xQ09VTlRfTUFYX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI2KSAmIDB4ZmMwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfYWdjICovCi0jZGVmaW5lIFBIWV9CQl9BR0NfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTg1YwotI2RlZmluZSBQSFlfQkJfQUdDX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk4NWMKLSNkZWZpbmUgUEhZX0JCX0FHQ19DT0FSU0VQV1JfQ09OU1RfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9CQl9BR0NfQ09BUlNFUFdSX0NPTlNUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfQUdDX0NPQVJTRVBXUl9DT05TVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN2YKLSNkZWZpbmUgUEhZX0JCX0FHQ19DT0FSU0VQV1JfQ09OU1RfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwN2YpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9BR0NfQ09BUlNFUFdSX0NPTlNUX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDdmKQotI2RlZmluZSBQSFlfQkJfQUdDX0NPQVJTRV9MT1dfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0JCX0FHQ19DT0FSU0VfTE9XX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9CQl9BR0NfQ09BUlNFX0xPV19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwN2Y4MAotI2RlZmluZSBQSFlfQkJfQUdDX0NPQVJTRV9MT1dfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwN2Y4MCkgPj4gNykKLSNkZWZpbmUgUEhZX0JCX0FHQ19DT0FSU0VfTE9XX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA3KSAmIDB4MDAwMDdmODApCi0jZGVmaW5lIFBIWV9CQl9BR0NfQ09BUlNFX0hJR0hfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQkJfQUdDX0NPQVJTRV9ISUdIX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0JCX0FHQ19DT0FSU0VfSElHSF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwM2Y4MDAwCi0jZGVmaW5lIFBIWV9CQl9BR0NfQ09BUlNFX0hJR0hfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAzZjgwMDApID4+IDE1KQotI2RlZmluZSBQSFlfQkJfQUdDX0NPQVJTRV9ISUdIX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTUpICYgMHgwMDNmODAwMCkKLSNkZWZpbmUgUEhZX0JCX0FHQ19RVUlDS19EUk9QX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9CQl9BR0NfUVVJQ0tfRFJPUF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBQSFlfQkJfQUdDX1FVSUNLX0RST1BfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M2ZjMDAwMDAKLSNkZWZpbmUgUEhZX0JCX0FHQ19RVUlDS19EUk9QX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzZmMwMDAwMCkgPj4gMjIpCi0jZGVmaW5lIFBIWV9CQl9BR0NfUVVJQ0tfRFJPUF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMikgJiAweDNmYzAwMDAwKQotI2RlZmluZSBQSFlfQkJfQUdDX1JTU0lfT1VUX1NFTEVDVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX0FHQ19SU1NJX09VVF9TRUxFQ1RfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9CQl9BR0NfUlNTSV9PVVRfU0VMRUNUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjMDAwMDAwMAotI2RlZmluZSBQSFlfQkJfQUdDX1JTU0lfT1VUX1NFTEVDVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGMwMDAwMDAwKSA+PiAzMCkKLSNkZWZpbmUgUEhZX0JCX0FHQ19SU1NJX09VVF9TRUxFQ1RfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMwKSAmIDB4YzAwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfYWdjX2NvbnRyb2wgKi8KLSNkZWZpbmUgUEhZX0JCX0FHQ19DT05UUk9MX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5ODYwCi0jZGVmaW5lIFBIWV9CQl9BR0NfQ09OVFJPTF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTg2MAotI2RlZmluZSBQSFlfQkJfQUdDX0NPTlRST0xfRE9fQ0FMSUJSQVRFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0FHQ19DT05UUk9MX0RPX0NBTElCUkFURV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9BR0NfQ09OVFJPTF9ET19DQUxJQlJBVEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBQSFlfQkJfQUdDX0NPTlRST0xfRE9fQ0FMSUJSQVRFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMSkgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0FHQ19DT05UUk9MX0RPX0NBTElCUkFURV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFBIWV9CQl9BR0NfQ09OVFJPTF9ET19OT0lTRUZMT09SX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQkJfQUdDX0NPTlRST0xfRE9fTk9JU0VGTE9PUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0JCX0FHQ19DT05UUk9MX0RPX05PSVNFRkxPT1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFBIWV9CQl9BR0NfQ09OVFJPTF9ET19OT0lTRUZMT09SX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAyKSA+PiAxKQotI2RlZmluZSBQSFlfQkJfQUdDX0NPTlRST0xfRE9fTk9JU0VGTE9PUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEpICYgMHgwMDAwMDAwMikKLSNkZWZpbmUgUEhZX0JCX0FHQ19DT05UUk9MX01JTl9OVU1fR0FJTl9DSEFOR0VfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9CQl9BR0NfQ09OVFJPTF9NSU5fTlVNX0dBSU5fQ0hBTkdFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQkJfQUdDX0NPTlRST0xfTUlOX05VTV9HQUlOX0NIQU5HRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKLSNkZWZpbmUgUEhZX0JCX0FHQ19DT05UUk9MX01JTl9OVU1fR0FJTl9DSEFOR0VfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMzgpID4+IDMpCi0jZGVmaW5lIFBIWV9CQl9BR0NfQ09OVFJPTF9NSU5fTlVNX0dBSU5fQ0hBTkdFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMykgJiAweDAwMDAwMDM4KQotI2RlZmluZSBQSFlfQkJfQUdDX0NPTlRST0xfWUNPS19NQVhfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0JCX0FHQ19DT05UUk9MX1lDT0tfTUFYX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9CQl9BR0NfQ09OVFJPTF9ZQ09LX01BWF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNjMAotI2RlZmluZSBQSFlfQkJfQUdDX0NPTlRST0xfWUNPS19NQVhfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDNjMCkgPj4gNikKLSNkZWZpbmUgUEhZX0JCX0FHQ19DT05UUk9MX1lDT0tfTUFYX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA2KSAmIDB4MDAwMDAzYzApCi0jZGVmaW5lIFBIWV9CQl9BR0NfQ09OVFJPTF9MRUFLWV9CVUNLRVRfRU5BQkxFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQkJfQUdDX0NPTlRST0xfTEVBS1lfQlVDS0VUX0VOQUJMRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0JCX0FHQ19DT05UUk9MX0xFQUtZX0JVQ0tFVF9FTkFCTEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIFBIWV9CQl9BR0NfQ09OVFJPTF9MRUFLWV9CVUNLRVRfRU5BQkxFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDA0MDApID4+IDEwKQotI2RlZmluZSBQSFlfQkJfQUdDX0NPTlRST0xfTEVBS1lfQlVDS0VUX0VOQUJMRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTApICYgMHgwMDAwMDQwMCkKLSNkZWZpbmUgUEhZX0JCX0FHQ19DT05UUk9MX0NBTF9FTkFCTEVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9CQl9BR0NfQ09OVFJPTF9DQUxfRU5BQkxFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQkJfQUdDX0NPTlRST0xfQ0FMX0VOQUJMRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKLSNkZWZpbmUgUEhZX0JCX0FHQ19DT05UUk9MX0NBTF9FTkFCTEVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDgwMCkgPj4gMTEpCi0jZGVmaW5lIFBIWV9CQl9BR0NfQ09OVFJPTF9DQUxfRU5BQkxFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMSkgJiAweDAwMDAwODAwKQotI2RlZmluZSBQSFlfQkJfQUdDX0NPTlRST0xfVVNFX1RBQkxFX1NFRURfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0JCX0FHQ19DT05UUk9MX1VTRV9UQUJMRV9TRUVEX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9CQl9BR0NfQ09OVFJPTF9VU0VfVEFCTEVfU0VFRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAotI2RlZmluZSBQSFlfQkJfQUdDX0NPTlRST0xfVVNFX1RBQkxFX1NFRURfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAxMDAwKSA+PiAxMikKLSNkZWZpbmUgUEhZX0JCX0FHQ19DT05UUk9MX1VTRV9UQUJMRV9TRUVEX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEyKSAmIDB4MDAwMDEwMDApCi0jZGVmaW5lIFBIWV9CQl9BR0NfQ09OVFJPTF9BR0NfVVBEQVRFX1RBQkxFX1NFRURfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfQUdDX0NPTlRST0xfQUdDX1VQREFURV9UQUJMRV9TRUVEX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0JCX0FHQ19DT05UUk9MX0FHQ19VUERBVEVfVEFCTEVfU0VFRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCi0jZGVmaW5lIFBIWV9CQl9BR0NfQ09OVFJPTF9BR0NfVVBEQVRFX1RBQkxFX1NFRURfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDIwMDApID4+IDEzKQotI2RlZmluZSBQSFlfQkJfQUdDX0NPTlRST0xfQUdDX1VQREFURV9UQUJMRV9TRUVEX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTMpICYgMHgwMDAwMjAwMCkKLSNkZWZpbmUgUEhZX0JCX0FHQ19DT05UUk9MX0VOQUJMRV9OT0lTRUZMT09SX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9CQl9BR0NfQ09OVFJPTF9FTkFCTEVfTk9JU0VGTE9PUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQkJfQUdDX0NPTlRST0xfRU5BQkxFX05PSVNFRkxPT1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKLSNkZWZpbmUgUEhZX0JCX0FHQ19DT05UUk9MX0VOQUJMRV9OT0lTRUZMT09SX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwODAwMCkgPj4gMTUpCi0jZGVmaW5lIFBIWV9CQl9BR0NfQ09OVFJPTF9FTkFCTEVfTk9JU0VGTE9PUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNSkgJiAweDAwMDA4MDAwKQotI2RlZmluZSBQSFlfQkJfQUdDX0NPTlRST0xfRU5BQkxFX0ZMVFJfQ0FMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0JCX0FHQ19DT05UUk9MX0VOQUJMRV9GTFRSX0NBTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9BR0NfQ09OVFJPTF9FTkFCTEVfRkxUUl9DQUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBQSFlfQkJfQUdDX0NPTlRST0xfRU5BQkxFX0ZMVFJfQ0FMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDEwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0JCX0FHQ19DT05UUk9MX0VOQUJMRV9GTFRSX0NBTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDAwMTAwMDApCi0jZGVmaW5lIFBIWV9CQl9BR0NfQ09OVFJPTF9OT19VUERBVEVfTk9JU0VGTE9PUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQkJfQUdDX0NPTlRST0xfTk9fVVBEQVRFX05PSVNFRkxPT1JfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0JCX0FHQ19DT05UUk9MX05PX1VQREFURV9OT0lTRUZMT09SX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCi0jZGVmaW5lIFBIWV9CQl9BR0NfQ09OVFJPTF9OT19VUERBVEVfTk9JU0VGTE9PUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMjAwMDApID4+IDE3KQotI2RlZmluZSBQSFlfQkJfQUdDX0NPTlRST0xfTk9fVVBEQVRFX05PSVNFRkxPT1JfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTcpICYgMHgwMDAyMDAwMCkKLSNkZWZpbmUgUEhZX0JCX0FHQ19DT05UUk9MX0VYVEVORF9ORl9QV1JfTUVBU19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFBIWV9CQl9BR0NfQ09OVFJPTF9FWFRFTkRfTkZfUFdSX01FQVNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQkJfQUdDX0NPTlRST0xfRVhURU5EX05GX1BXUl9NRUFTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKLSNkZWZpbmUgUEhZX0JCX0FHQ19DT05UUk9MX0VYVEVORF9ORl9QV1JfTUVBU19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDA0MDAwMCkgPj4gMTgpCi0jZGVmaW5lIFBIWV9CQl9BR0NfQ09OVFJPTF9FWFRFTkRfTkZfUFdSX01FQVNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOCkgJiAweDAwMDQwMDAwKQotI2RlZmluZSBQSFlfQkJfQUdDX0NPTlRST0xfQ0xDX1NVQ0NFU1NfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUEhZX0JCX0FHQ19DT05UUk9MX0NMQ19TVUNDRVNTX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9CQl9BR0NfQ09OVFJPTF9DTENfU1VDQ0VTU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAotI2RlZmluZSBQSFlfQkJfQUdDX0NPTlRST0xfQ0xDX1NVQ0NFU1NfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDgwMDAwKSA+PiAxOSkKLSNkZWZpbmUgUEhZX0JCX0FHQ19DT05UUk9MX0VOQUJMRV9QS0RFVF9DQUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9CQl9BR0NfQ09OVFJPTF9FTkFCTEVfUEtERVRfQ0FMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQkJfQUdDX0NPTlRST0xfRU5BQkxFX1BLREVUX0NBTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKLSNkZWZpbmUgUEhZX0JCX0FHQ19DT05UUk9MX0VOQUJMRV9QS0RFVF9DQUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDEwMDAwMCkgPj4gMjApCi0jZGVmaW5lIFBIWV9CQl9BR0NfQ09OVFJPTF9FTkFCTEVfUEtERVRfQ0FMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMCkgJiAweDAwMTAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX2NjYV9iMCAqLwotI2RlZmluZSBQSFlfQkJfQ0NBX0IwX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk4NjQKLSNkZWZpbmUgUEhZX0JCX0NDQV9CMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5ODY0Ci0jZGVmaW5lIFBIWV9CQl9DQ0FfQjBfQ0ZfTUFYQ0NBUFdSXzBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQkJfQ0NBX0IwX0NGX01BWENDQVBXUl8wX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0NDQV9CMF9DRl9NQVhDQ0FQV1JfMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMWZmCi0jZGVmaW5lIFBIWV9CQl9DQ0FfQjBfQ0ZfTUFYQ0NBUFdSXzBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMWZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfQ0NBX0IwX0NGX01BWENDQVBXUl8wX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDFmZikKLSNkZWZpbmUgUEhZX0JCX0NDQV9CMF9DRl9DQ0FfQ09VTlRfTUFYQ19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9CQl9DQ0FfQjBfQ0ZfQ0NBX0NPVU5UX01BWENfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQkJfQ0NBX0IwX0NGX0NDQV9DT1VOVF9NQVhDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBlMDAKLSNkZWZpbmUgUEhZX0JCX0NDQV9CMF9DRl9DQ0FfQ09VTlRfTUFYQ19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDBlMDApID4+IDkpCi0jZGVmaW5lIFBIWV9CQl9DQ0FfQjBfQ0ZfQ0NBX0NPVU5UX01BWENfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOSkgJiAweDAwMDAwZTAwKQotI2RlZmluZSBQSFlfQkJfQ0NBX0IwX0NGX1RIUkVTSDYyX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUEhZX0JCX0NDQV9CMF9DRl9USFJFU0g2Ml9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9CQl9DQ0FfQjBfQ0ZfVEhSRVNINjJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBmZjAwMAotI2RlZmluZSBQSFlfQkJfQ0NBX0IwX0NGX1RIUkVTSDYyX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMGZmMDAwKSA+PiAxMikKLSNkZWZpbmUgUEhZX0JCX0NDQV9CMF9DRl9USFJFU0g2Ml9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEyKSAmIDB4MDAwZmYwMDApCi0jZGVmaW5lIFBIWV9CQl9DQ0FfQjBfTUlOQ0NBUFdSXzBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQkJfQ0NBX0IwX01JTkNDQVBXUl8wX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0JCX0NDQV9CMF9NSU5DQ0FQV1JfMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFmZjAwMDAwCi0jZGVmaW5lIFBIWV9CQl9DQ0FfQjBfTUlOQ0NBUFdSXzBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MWZmMDAwMDApID4+IDIwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3NmY29yciAqLwotI2RlZmluZSBQSFlfQkJfU0ZDT1JSX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk4NjgKLSNkZWZpbmUgUEhZX0JCX1NGQ09SUl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5ODY4Ci0jZGVmaW5lIFBIWV9CQl9TRkNPUlJfTTJDT1VOVF9USFJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQkJfU0ZDT1JSX00yQ09VTlRfVEhSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1NGQ09SUl9NMkNPVU5UX1RIUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFmCi0jZGVmaW5lIFBIWV9CQl9TRkNPUlJfTTJDT1VOVF9USFJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDFmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfU0ZDT1JSX00yQ09VTlRfVEhSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAxZikKLSNkZWZpbmUgUEhZX0JCX1NGQ09SUl9BRENTQVRfVEhSRVNIX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9CQl9TRkNPUlJfQURDU0FUX1RIUkVTSF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQkJfU0ZDT1JSX0FEQ1NBVF9USFJFU0hfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3ZTAKLSNkZWZpbmUgUEhZX0JCX1NGQ09SUl9BRENTQVRfVEhSRVNIX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDA3ZTApID4+IDUpCi0jZGVmaW5lIFBIWV9CQl9TRkNPUlJfQURDU0FUX1RIUkVTSF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNSkgJiAweDAwMDAwN2UwKQotI2RlZmluZSBQSFlfQkJfU0ZDT1JSX0FEQ1NBVF9JQ09VTlRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0JCX1NGQ09SUl9BRENTQVRfSUNPVU5UX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9CQl9TRkNPUlJfQURDU0FUX0lDT1VOVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxZjgwMAotI2RlZmluZSBQSFlfQkJfU0ZDT1JSX0FEQ1NBVF9JQ09VTlRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDFmODAwKSA+PiAxMSkKLSNkZWZpbmUgUEhZX0JCX1NGQ09SUl9BRENTQVRfSUNPVU5UX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDExKSAmIDB4MDAwMWY4MDApCi0jZGVmaW5lIFBIWV9CQl9TRkNPUlJfTTFfVEhSRVNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQkJfU0ZDT1JSX00xX1RIUkVTX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0JCX1NGQ09SUl9NMV9USFJFU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwZmUwMDAwCi0jZGVmaW5lIFBIWV9CQl9TRkNPUlJfTTFfVEhSRVNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDBmZTAwMDApID4+IDE3KQotI2RlZmluZSBQSFlfQkJfU0ZDT1JSX00xX1RIUkVTX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTcpICYgMHgwMGZlMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1NGQ09SUl9NMl9USFJFU19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9CQl9TRkNPUlJfTTJfVEhSRVNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQkJfU0ZDT1JSX00yX1RIUkVTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N2YwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1NGQ09SUl9NMl9USFJFU19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3ZjAwMDAwMCkgPj4gMjQpCi0jZGVmaW5lIFBIWV9CQl9TRkNPUlJfTTJfVEhSRVNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNCkgJiAweDdmMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3NlbGZfY29ycl9sb3cgKi8KLSNkZWZpbmUgUEhZX0JCX1NFTEZfQ09SUl9MT1dfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5ODZjCi0jZGVmaW5lIFBIWV9CQl9TRUxGX0NPUlJfTE9XX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTg2YwotI2RlZmluZSBQSFlfQkJfU0VMRl9DT1JSX0xPV19VU0VfU0VMRl9DT1JSX0xPV19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1NFTEZfQ09SUl9MT1dfVVNFX1NFTEZfQ09SUl9MT1dfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9TRUxGX0NPUlJfTE9XX1VTRV9TRUxGX0NPUlJfTE9XX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBQSFlfQkJfU0VMRl9DT1JSX0xPV19VU0VfU0VMRl9DT1JSX0xPV19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMSkgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1NFTEZfQ09SUl9MT1dfVVNFX1NFTEZfQ09SUl9MT1dfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFBIWV9CQl9TRUxGX0NPUlJfTE9XX00xQ09VTlRfTUFYX0xPV19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQkJfU0VMRl9DT1JSX0xPV19NMUNPVU5UX01BWF9MT1dfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0JCX1NFTEZfQ09SUl9MT1dfTTFDT1VOVF9NQVhfTE9XX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGZlCi0jZGVmaW5lIFBIWV9CQl9TRUxGX0NPUlJfTE9XX00xQ09VTlRfTUFYX0xPV19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMGZlKSA+PiAxKQotI2RlZmluZSBQSFlfQkJfU0VMRl9DT1JSX0xPV19NMUNPVU5UX01BWF9MT1dfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEpICYgMHgwMDAwMDBmZSkKLSNkZWZpbmUgUEhZX0JCX1NFTEZfQ09SUl9MT1dfTTJDT1VOVF9USFJfTE9XX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9CQl9TRUxGX0NPUlJfTE9XX00yQ09VTlRfVEhSX0xPV19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQkJfU0VMRl9DT1JSX0xPV19NMkNPVU5UX1RIUl9MT1dfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDNmMDAKLSNkZWZpbmUgUEhZX0JCX1NFTEZfQ09SUl9MT1dfTTJDT1VOVF9USFJfTE9XX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDNmMDApID4+IDgpCi0jZGVmaW5lIFBIWV9CQl9TRUxGX0NPUlJfTE9XX00yQ09VTlRfVEhSX0xPV19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAzZjAwKQotI2RlZmluZSBQSFlfQkJfU0VMRl9DT1JSX0xPV19NMV9USFJFU0hfTE9XX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0JCX1NFTEZfQ09SUl9MT1dfTTFfVEhSRVNIX0xPV19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9CQl9TRUxGX0NPUlJfTE9XX00xX1RIUkVTSF9MT1dfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDFmYzAwMAotI2RlZmluZSBQSFlfQkJfU0VMRl9DT1JSX0xPV19NMV9USFJFU0hfTE9XX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMWZjMDAwKSA+PiAxNCkKLSNkZWZpbmUgUEhZX0JCX1NFTEZfQ09SUl9MT1dfTTFfVEhSRVNIX0xPV19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE0KSAmIDB4MDAxZmMwMDApCi0jZGVmaW5lIFBIWV9CQl9TRUxGX0NPUlJfTE9XX00yX1RIUkVTSF9MT1dfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQkJfU0VMRl9DT1JSX0xPV19NMl9USFJFU0hfTE9XX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0JCX1NFTEZfQ09SUl9MT1dfTTJfVEhSRVNIX0xPV19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBmZTAwMDAwCi0jZGVmaW5lIFBIWV9CQl9TRUxGX0NPUlJfTE9XX00yX1RIUkVTSF9MT1dfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MGZlMDAwMDApID4+IDIxKQotI2RlZmluZSBQSFlfQkJfU0VMRl9DT1JSX0xPV19NMl9USFJFU0hfTE9XX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjEpICYgMHgwZmUwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9zeW50aF9jb250cm9sICovCi0jZGVmaW5lIFBIWV9CQl9TWU5USF9DT05UUk9MX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTg3NAotI2RlZmluZSBQSFlfQkJfU1lOVEhfQ09OVFJPTF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk4NzQKLSNkZWZpbmUgUEhZX0JCX1NZTlRIX0NPTlRST0xfUkZDSEFORlJBQ19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9TWU5USF9DT05UUk9MX1JGQ0hBTkZSQUNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfU1lOVEhfQ09OVFJPTF9SRkNIQU5GUkFDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMWZmZmYKLSNkZWZpbmUgUEhZX0JCX1NZTlRIX0NPTlRST0xfUkZDSEFORlJBQ19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMWZmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9TWU5USF9DT05UUk9MX1JGQ0hBTkZSQUNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDFmZmZmKQotI2RlZmluZSBQSFlfQkJfU1lOVEhfQ09OVFJPTF9SRkNIQU5ORUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0JCX1NZTlRIX0NPTlRST0xfUkZDSEFOTkVMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9CQl9TWU5USF9DT05UUk9MX1JGQ0hBTk5FTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwM2ZlMDAwMAotI2RlZmluZSBQSFlfQkJfU1lOVEhfQ09OVFJPTF9SRkNIQU5ORUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAzZmUwMDAwKSA+PiAxNykKLSNkZWZpbmUgUEhZX0JCX1NZTlRIX0NPTlRST0xfUkZDSEFOTkVMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE3KSAmIDB4MDNmZTAwMDApCi0jZGVmaW5lIFBIWV9CQl9TWU5USF9DT05UUk9MX1JGQU1PREVSRUZTRUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQkJfU1lOVEhfQ09OVFJPTF9SRkFNT0RFUkVGU0VMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0JCX1NZTlRIX0NPTlRST0xfUkZBTU9ERVJFRlNFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBjMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9TWU5USF9DT05UUk9MX1JGQU1PREVSRUZTRUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MGMwMDAwMDApID4+IDI2KQotI2RlZmluZSBQSFlfQkJfU1lOVEhfQ09OVFJPTF9SRkFNT0RFUkVGU0VMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjYpICYgMHgwYzAwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1NZTlRIX0NPTlRST0xfUkZGUkFDTU9ERV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9CQl9TWU5USF9DT05UUk9MX1JGRlJBQ01PREVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQkJfU1lOVEhfQ09OVFJPTF9SRkZSQUNNT0RFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1NZTlRIX0NPTlRST0xfUkZGUkFDTU9ERV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxMDAwMDAwMCkgPj4gMjgpCi0jZGVmaW5lIFBIWV9CQl9TWU5USF9DT05UUk9MX1JGRlJBQ01PREVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyOCkgJiAweDEwMDAwMDAwKQotI2RlZmluZSBQSFlfQkJfU1lOVEhfQ09OVFJPTF9SRkJNT0RFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0JCX1NZTlRIX0NPTlRST0xfUkZCTU9ERV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9CQl9TWU5USF9DT05UUk9MX1JGQk1PREVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAotI2RlZmluZSBQSFlfQkJfU1lOVEhfQ09OVFJPTF9SRkJNT0RFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDIwMDAwMDAwKSA+PiAyOSkKLSNkZWZpbmUgUEhZX0JCX1NZTlRIX0NPTlRST0xfUkZCTU9ERV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI5KSAmIDB4MjAwMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9TWU5USF9DT05UUk9MX1JGU1lOVEhfQ1RSTF9TU0hJRlRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQkJfU1lOVEhfQ09OVFJPTF9SRlNZTlRIX0NUUkxfU1NISUZUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0JCX1NZTlRIX0NPTlRST0xfUkZTWU5USF9DVFJMX1NTSElGVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9TWU5USF9DT05UUk9MX1JGU1lOVEhfQ1RSTF9TU0hJRlRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NDAwMDAwMDApID4+IDMwKQotI2RlZmluZSBQSFlfQkJfU1lOVEhfQ09OVFJPTF9SRlNZTlRIX0NUUkxfU1NISUZUX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMzApICYgMHg0MDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9hZGRhY19jbGtfc2VsZWN0ICovCi0jZGVmaW5lIFBIWV9CQl9BRERBQ19DTEtfU0VMRUNUX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTg3OAotI2RlZmluZSBQSFlfQkJfQUREQUNfQ0xLX1NFTEVDVF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk4NzgKLSNkZWZpbmUgUEhZX0JCX0FEREFDX0NMS19TRUxFQ1RfQkJfREFDX0NMS19TRUxFQ1RfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9CQl9BRERBQ19DTEtfU0VMRUNUX0JCX0RBQ19DTEtfU0VMRUNUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQkJfQUREQUNfQ0xLX1NFTEVDVF9CQl9EQUNfQ0xLX1NFTEVDVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGMKLSNkZWZpbmUgUEhZX0JCX0FEREFDX0NMS19TRUxFQ1RfQkJfREFDX0NMS19TRUxFQ1RfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMGMpID4+IDIpCi0jZGVmaW5lIFBIWV9CQl9BRERBQ19DTEtfU0VMRUNUX0JCX0RBQ19DTEtfU0VMRUNUX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMikgJiAweDAwMDAwMDBjKQotI2RlZmluZSBQSFlfQkJfQUREQUNfQ0xLX1NFTEVDVF9CQl9BRENfQ0xLX1NFTEVDVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0JCX0FEREFDX0NMS19TRUxFQ1RfQkJfQURDX0NMS19TRUxFQ1RfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9CQl9BRERBQ19DTEtfU0VMRUNUX0JCX0FEQ19DTEtfU0VMRUNUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAotI2RlZmluZSBQSFlfQkJfQUREQUNfQ0xLX1NFTEVDVF9CQl9BRENfQ0xLX1NFTEVDVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAzMCkgPj4gNCkKLSNkZWZpbmUgUEhZX0JCX0FEREFDX0NMS19TRUxFQ1RfQkJfQURDX0NMS19TRUxFQ1RfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA0KSAmIDB4MDAwMDAwMzApCi0KLS8qIG1hY3JvcyBmb3IgQkJfcGxsX2NudGwgKi8KLSNkZWZpbmUgUEhZX0JCX1BMTF9DTlRMX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5ODdjCi0jZGVmaW5lIFBIWV9CQl9QTExfQ05UTF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTg3YwotI2RlZmluZSBQSFlfQkJfUExMX0NOVExfQkJfUExMX0RJVl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0JCX1BMTF9DTlRMX0JCX1BMTF9ESVZfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9QTExfQ05UTF9CQl9QTExfRElWX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNmZgotI2RlZmluZSBQSFlfQkJfUExMX0NOVExfQkJfUExMX0RJVl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDNmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1BMTF9DTlRMX0JCX1BMTF9ESVZfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAzZmYpCi0jZGVmaW5lIFBIWV9CQl9QTExfQ05UTF9CQl9QTExfUkVGRElWX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfUExMX0NOVExfQkJfUExMX1JFRkRJVl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0JCX1BMTF9DTlRMX0JCX1BMTF9SRUZESVZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzYzAwCi0jZGVmaW5lIFBIWV9CQl9QTExfQ05UTF9CQl9QTExfUkVGRElWX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDNjMDApID4+IDEwKQotI2RlZmluZSBQSFlfQkJfUExMX0NOVExfQkJfUExMX1JFRkRJVl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTApICYgMHgwMDAwM2MwMCkKLSNkZWZpbmUgUEhZX0JCX1BMTF9DTlRMX0JCX1BMTF9DTEtfU0VMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9CQl9QTExfQ05UTF9CQl9QTExfQ0xLX1NFTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQkJfUExMX0NOVExfQkJfUExMX0NMS19TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGMwMDAKLSNkZWZpbmUgUEhZX0JCX1BMTF9DTlRMX0JCX1BMTF9DTEtfU0VMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwYzAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9CQl9QTExfQ05UTF9CQl9QTExfQ0xLX1NFTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNCkgJiAweDAwMDBjMDAwKQotI2RlZmluZSBQSFlfQkJfUExMX0NOVExfQkJfUExMQllQQVNTX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0JCX1BMTF9DTlRMX0JCX1BMTEJZUEFTU19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9QTExfQ05UTF9CQl9QTExCWVBBU1NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBQSFlfQkJfUExMX0NOVExfQkJfUExMQllQQVNTX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDEwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0JCX1BMTF9DTlRMX0JCX1BMTEJZUEFTU19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDAwMTAwMDApCi0jZGVmaW5lIFBIWV9CQl9QTExfQ05UTF9CQl9QTExfU0VUVExFX1RJTUVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQkJfUExMX0NOVExfQkJfUExMX1NFVFRMRV9USU1FX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0JCX1BMTF9DTlRMX0JCX1BMTF9TRVRUTEVfVElNRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBmZmUwMDAwCi0jZGVmaW5lIFBIWV9CQl9QTExfQ05UTF9CQl9QTExfU0VUVExFX1RJTUVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MGZmZTAwMDApID4+IDE3KQotI2RlZmluZSBQSFlfQkJfUExMX0NOVExfQkJfUExMX1NFVFRMRV9USU1FX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTcpICYgMHgwZmZlMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl92aXRfc3B1cl9tYXNrX0EgKi8KLSNkZWZpbmUgUEhZX0JCX1ZJVF9TUFVSX01BU0tfQV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OTAwCi0jZGVmaW5lIFBIWV9CQl9WSVRfU1BVUl9NQVNLX0FfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTkwMAotI2RlZmluZSBQSFlfQkJfVklUX1NQVVJfTUFTS19BX0NGX1BVTkNfTUFTS19BX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0JCX1ZJVF9TUFVSX01BU0tfQV9DRl9QVU5DX01BU0tfQV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9WSVRfU1BVUl9NQVNLX0FfQ0ZfUFVOQ19NQVNLX0FfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNmZgotI2RlZmluZSBQSFlfQkJfVklUX1NQVVJfTUFTS19BX0NGX1BVTkNfTUFTS19BX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDNmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1ZJVF9TUFVSX01BU0tfQV9DRl9QVU5DX01BU0tfQV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAzZmYpCi0jZGVmaW5lIFBIWV9CQl9WSVRfU1BVUl9NQVNLX0FfQ0ZfUFVOQ19NQVNLX0lEWF9BX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQkJfVklUX1NQVVJfTUFTS19BX0NGX1BVTkNfTUFTS19JRFhfQV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0JCX1ZJVF9TUFVSX01BU0tfQV9DRl9QVU5DX01BU0tfSURYX0FfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDFmYzAwCi0jZGVmaW5lIFBIWV9CQl9WSVRfU1BVUl9NQVNLX0FfQ0ZfUFVOQ19NQVNLX0lEWF9BX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMWZjMDApID4+IDEwKQotI2RlZmluZSBQSFlfQkJfVklUX1NQVVJfTUFTS19BX0NGX1BVTkNfTUFTS19JRFhfQV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTApICYgMHgwMDAxZmMwMCkKLQotLyogbWFjcm9zIGZvciBCQl92aXRfc3B1cl9tYXNrX0IgKi8KLSNkZWZpbmUgUEhZX0JCX1ZJVF9TUFVSX01BU0tfQl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OTA0Ci0jZGVmaW5lIFBIWV9CQl9WSVRfU1BVUl9NQVNLX0JfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTkwNAotI2RlZmluZSBQSFlfQkJfVklUX1NQVVJfTUFTS19CX0NGX1BVTkNfTUFTS19CX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0JCX1ZJVF9TUFVSX01BU0tfQl9DRl9QVU5DX01BU0tfQl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9WSVRfU1BVUl9NQVNLX0JfQ0ZfUFVOQ19NQVNLX0JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNmZgotI2RlZmluZSBQSFlfQkJfVklUX1NQVVJfTUFTS19CX0NGX1BVTkNfTUFTS19CX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDNmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1ZJVF9TUFVSX01BU0tfQl9DRl9QVU5DX01BU0tfQl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAzZmYpCi0jZGVmaW5lIFBIWV9CQl9WSVRfU1BVUl9NQVNLX0JfQ0ZfUFVOQ19NQVNLX0lEWF9CX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQkJfVklUX1NQVVJfTUFTS19CX0NGX1BVTkNfTUFTS19JRFhfQl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0JCX1ZJVF9TUFVSX01BU0tfQl9DRl9QVU5DX01BU0tfSURYX0JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDFmYzAwCi0jZGVmaW5lIFBIWV9CQl9WSVRfU1BVUl9NQVNLX0JfQ0ZfUFVOQ19NQVNLX0lEWF9CX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMWZjMDApID4+IDEwKQotI2RlZmluZSBQSFlfQkJfVklUX1NQVVJfTUFTS19CX0NGX1BVTkNfTUFTS19JRFhfQl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTApICYgMHgwMDAxZmMwMCkKLQotLyogbWFjcm9zIGZvciBCQl9waWxvdF9zcHVyX21hc2sgKi8KLSNkZWZpbmUgUEhZX0JCX1BJTE9UX1NQVVJfTUFTS19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OTA4Ci0jZGVmaW5lIFBIWV9CQl9QSUxPVF9TUFVSX01BU0tfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTkwOAotI2RlZmluZSBQSFlfQkJfUElMT1RfU1BVUl9NQVNLX0NGX1BJTE9UX01BU0tfQV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0JCX1BJTE9UX1NQVVJfTUFTS19DRl9QSUxPVF9NQVNLX0FfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9QSUxPVF9TUFVSX01BU0tfQ0ZfUElMT1RfTUFTS19BX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxZgotI2RlZmluZSBQSFlfQkJfUElMT1RfU1BVUl9NQVNLX0NGX1BJTE9UX01BU0tfQV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAxZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1BJTE9UX1NQVVJfTUFTS19DRl9QSUxPVF9NQVNLX0FfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMWYpCi0jZGVmaW5lIFBIWV9CQl9QSUxPVF9TUFVSX01BU0tfQ0ZfUElMT1RfTUFTS19JRFhfQV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQkJfUElMT1RfU1BVUl9NQVNLX0NGX1BJTE9UX01BU0tfSURYX0FfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0JCX1BJTE9UX1NQVVJfTUFTS19DRl9QSUxPVF9NQVNLX0lEWF9BX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwZmUwCi0jZGVmaW5lIFBIWV9CQl9QSUxPVF9TUFVSX01BU0tfQ0ZfUElMT1RfTUFTS19JRFhfQV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwZmUwKSA+PiA1KQotI2RlZmluZSBQSFlfQkJfUElMT1RfU1BVUl9NQVNLX0NGX1BJTE9UX01BU0tfSURYX0FfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDUpICYgMHgwMDAwMGZlMCkKLSNkZWZpbmUgUEhZX0JCX1BJTE9UX1NQVVJfTUFTS19DRl9QSUxPVF9NQVNLX0JfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9QSUxPVF9TUFVSX01BU0tfQ0ZfUElMT1RfTUFTS19CX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQkJfUElMT1RfU1BVUl9NQVNLX0NGX1BJTE9UX01BU0tfQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMWYwMDAKLSNkZWZpbmUgUEhZX0JCX1BJTE9UX1NQVVJfTUFTS19DRl9QSUxPVF9NQVNLX0JfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAxZjAwMCkgPj4gMTIpCi0jZGVmaW5lIFBIWV9CQl9QSUxPVF9TUFVSX01BU0tfQ0ZfUElMT1RfTUFTS19CX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMikgJiAweDAwMDFmMDAwKQotI2RlZmluZSBQSFlfQkJfUElMT1RfU1BVUl9NQVNLX0NGX1BJTE9UX01BU0tfSURYX0JfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0JCX1BJTE9UX1NQVVJfTUFTS19DRl9QSUxPVF9NQVNLX0lEWF9CX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9CQl9QSUxPVF9TUFVSX01BU0tfQ0ZfUElMT1RfTUFTS19JRFhfQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMGZlMDAwMAotI2RlZmluZSBQSFlfQkJfUElMT1RfU1BVUl9NQVNLX0NGX1BJTE9UX01BU0tfSURYX0JfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwZmUwMDAwKSA+PiAxNykKLSNkZWZpbmUgUEhZX0JCX1BJTE9UX1NQVVJfTUFTS19DRl9QSUxPVF9NQVNLX0lEWF9CX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE3KSAmIDB4MDBmZTAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfY2hhbl9zcHVyX21hc2sgKi8KLSNkZWZpbmUgUEhZX0JCX0NIQU5fU1BVUl9NQVNLX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OTBjCi0jZGVmaW5lIFBIWV9CQl9DSEFOX1NQVVJfTUFTS19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTkwYwotI2RlZmluZSBQSFlfQkJfQ0hBTl9TUFVSX01BU0tfQ0ZfQ0hBTl9NQVNLX0FfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0JCX0NIQU5fU1BVUl9NQVNLX0NGX0NIQU5fTUFTS19BX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9DSEFOX1NQVVJfTUFTS19DRl9DSEFOX01BU0tfQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxZgotI2RlZmluZSBQSFlfQkJfQ0hBTl9TUFVSX01BU0tfQ0ZfQ0hBTl9NQVNLX0FfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAxZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0NIQU5fU1BVUl9NQVNLX0NGX0NIQU5fTUFTS19BX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMWYpCi0jZGVmaW5lIFBIWV9CQl9DSEFOX1NQVVJfTUFTS19DRl9DSEFOX01BU0tfSURYX0FfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQkJfQ0hBTl9TUFVSX01BU0tfQ0ZfQ0hBTl9NQVNLX0lEWF9BX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0JCX0NIQU5fU1BVUl9NQVNLX0NGX0NIQU5fTUFTS19JRFhfQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwZmUwCi0jZGVmaW5lIFBIWV9CQl9DSEFOX1NQVVJfTUFTS19DRl9DSEFOX01BU0tfSURYX0FfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwZmUwKSA+PiA1KQotI2RlZmluZSBQSFlfQkJfQ0hBTl9TUFVSX01BU0tfQ0ZfQ0hBTl9NQVNLX0lEWF9BX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDUpICYgMHgwMDAwMGZlMCkKLSNkZWZpbmUgUEhZX0JCX0NIQU5fU1BVUl9NQVNLX0NGX0NIQU5fTUFTS19CX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9DSEFOX1NQVVJfTUFTS19DRl9DSEFOX01BU0tfQl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQkJfQ0hBTl9TUFVSX01BU0tfQ0ZfQ0hBTl9NQVNLX0JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMWYwMDAKLSNkZWZpbmUgUEhZX0JCX0NIQU5fU1BVUl9NQVNLX0NGX0NIQU5fTUFTS19CX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAxZjAwMCkgPj4gMTIpCi0jZGVmaW5lIFBIWV9CQl9DSEFOX1NQVVJfTUFTS19DRl9DSEFOX01BU0tfQl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMikgJiAweDAwMDFmMDAwKQotI2RlZmluZSBQSFlfQkJfQ0hBTl9TUFVSX01BU0tfQ0ZfQ0hBTl9NQVNLX0lEWF9CX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0JCX0NIQU5fU1BVUl9NQVNLX0NGX0NIQU5fTUFTS19JRFhfQl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9CQl9DSEFOX1NQVVJfTUFTS19DRl9DSEFOX01BU0tfSURYX0JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMGZlMDAwMAotI2RlZmluZSBQSFlfQkJfQ0hBTl9TUFVSX01BU0tfQ0ZfQ0hBTl9NQVNLX0lEWF9CX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwZmUwMDAwKSA+PiAxNykKLSNkZWZpbmUgUEhZX0JCX0NIQU5fU1BVUl9NQVNLX0NGX0NIQU5fTUFTS19JRFhfQl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE3KSAmIDB4MDBmZTAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfc3BlY3RyYWxfc2NhbiAqLwotI2RlZmluZSBQSFlfQkJfU1BFQ1RSQUxfU0NBTl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk5MTAKLSNkZWZpbmUgUEhZX0JCX1NQRUNUUkFMX1NDQU5fT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OTEwCi0jZGVmaW5lIFBIWV9CQl9TUEVDVFJBTF9TQ0FOX1NQRUNUUkFMX1NDQU5fRU5BX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfU1BFQ1RSQUxfU0NBTl9TUEVDVFJBTF9TQ0FOX0VOQV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1NQRUNUUkFMX1NDQU5fU1BFQ1RSQUxfU0NBTl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFBIWV9CQl9TUEVDVFJBTF9TQ0FOX1NQRUNUUkFMX1NDQU5fRU5BX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAxKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfU1BFQ1RSQUxfU0NBTl9TUEVDVFJBTF9TQ0FOX0VOQV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwMSkKLSNkZWZpbmUgUEhZX0JCX1NQRUNUUkFMX1NDQU5fU1BFQ1RSQUxfU0NBTl9BQ1RJVkVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9CQl9TUEVDVFJBTF9TQ0FOX1NQRUNUUkFMX1NDQU5fQUNUSVZFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQkJfU1BFQ1RSQUxfU0NBTl9TUEVDVFJBTF9TQ0FOX0FDVElWRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgUEhZX0JCX1NQRUNUUkFMX1NDQU5fU1BFQ1RSQUxfU0NBTl9BQ1RJVkVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDIpID4+IDEpCi0jZGVmaW5lIFBIWV9CQl9TUEVDVFJBTF9TQ0FOX1NQRUNUUkFMX1NDQU5fQUNUSVZFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMSkgJiAweDAwMDAwMDAyKQotI2RlZmluZSBQSFlfQkJfU1BFQ1RSQUxfU0NBTl9ESVNBQkxFX1JBREFSX1RDVExfUlNUX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0JCX1NQRUNUUkFMX1NDQU5fRElTQUJMRV9SQURBUl9UQ1RMX1JTVF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9CQl9TUEVDVFJBTF9TQ0FOX0RJU0FCTEVfUkFEQVJfVENUTF9SU1RfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBQSFlfQkJfU1BFQ1RSQUxfU0NBTl9ESVNBQkxFX1JBREFSX1RDVExfUlNUX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwNCkgPj4gMikKLSNkZWZpbmUgUEhZX0JCX1NQRUNUUkFMX1NDQU5fRElTQUJMRV9SQURBUl9UQ1RMX1JTVF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyKSAmIDB4MDAwMDAwMDQpCi0jZGVmaW5lIFBIWV9CQl9TUEVDVFJBTF9TQ0FOX0RJU0FCTEVfUFVMU0VfQ09BUlNFX0xPV19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQkJfU1BFQ1RSQUxfU0NBTl9ESVNBQkxFX1BVTFNFX0NPQVJTRV9MT1dfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0JCX1NQRUNUUkFMX1NDQU5fRElTQUJMRV9QVUxTRV9DT0FSU0VfTE9XX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIFBIWV9CQl9TUEVDVFJBTF9TQ0FOX0RJU0FCTEVfUFVMU0VfQ09BUlNFX0xPV19HRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDA4KSA+PiAzKQotI2RlZmluZSBQSFlfQkJfU1BFQ1RSQUxfU0NBTl9ESVNBQkxFX1BVTFNFX0NPQVJTRV9MT1dfU0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMpICYgMHgwMDAwMDAwOCkKLSNkZWZpbmUgUEhZX0JCX1NQRUNUUkFMX1NDQU5fU1BFQ1RSQUxfU0NBTl9GRlRfUEVSSU9EX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9CQl9TUEVDVFJBTF9TQ0FOX1NQRUNUUkFMX1NDQU5fRkZUX1BFUklPRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQkJfU1BFQ1RSQUxfU0NBTl9TUEVDVFJBTF9TQ0FOX0ZGVF9QRVJJT0RfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZjAKLSNkZWZpbmUgUEhZX0JCX1NQRUNUUkFMX1NDQU5fU1BFQ1RSQUxfU0NBTl9GRlRfUEVSSU9EX0dFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwZjApID4+IDQpCi0jZGVmaW5lIFBIWV9CQl9TUEVDVFJBTF9TQ0FOX1NQRUNUUkFMX1NDQU5fRkZUX1BFUklPRF9TRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNCkgJiAweDAwMDAwMGYwKQotI2RlZmluZSBQSFlfQkJfU1BFQ1RSQUxfU0NBTl9TUEVDVFJBTF9TQ0FOX1BFUklPRF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0JCX1NQRUNUUkFMX1NDQU5fU1BFQ1RSQUxfU0NBTl9QRVJJT0RfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9TUEVDVFJBTF9TQ0FOX1NQRUNUUkFMX1NDQU5fUEVSSU9EX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBQSFlfQkJfU1BFQ1RSQUxfU0NBTl9TUEVDVFJBTF9TQ0FOX1BFUklPRF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwZmYwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0JCX1NQRUNUUkFMX1NDQU5fU1BFQ1RSQUxfU0NBTl9QRVJJT0RfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMGZmMDApCi0jZGVmaW5lIFBIWV9CQl9TUEVDVFJBTF9TQ0FOX1NQRUNUUkFMX1NDQU5fQ09VTlRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQkJfU1BFQ1RSQUxfU0NBTl9TUEVDVFJBTF9TQ0FOX0NPVU5UX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0JCX1NQRUNUUkFMX1NDQU5fU1BFQ1RSQUxfU0NBTl9DT1VOVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBmZmYwMDAwCi0jZGVmaW5lIFBIWV9CQl9TUEVDVFJBTF9TQ0FOX1NQRUNUUkFMX1NDQU5fQ09VTlRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MGZmZjAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQkJfU1BFQ1RSQUxfU0NBTl9TUEVDVFJBTF9TQ0FOX0NPVU5UX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwZmZmMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1NQRUNUUkFMX1NDQU5fU1BFQ1RSQUxfU0NBTl9TSE9SVF9SUFRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9CQl9TUEVDVFJBTF9TQ0FOX1NQRUNUUkFMX1NDQU5fU0hPUlRfUlBUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQkJfU1BFQ1RSQUxfU0NBTl9TUEVDVFJBTF9TQ0FOX1NIT1JUX1JQVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1NQRUNUUkFMX1NDQU5fU1BFQ1RSQUxfU0NBTl9TSE9SVF9SUFRfR0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxMDAwMDAwMCkgPj4gMjgpCi0jZGVmaW5lIFBIWV9CQl9TUEVDVFJBTF9TQ0FOX1NQRUNUUkFMX1NDQU5fU0hPUlRfUlBUX1NFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyOCkgJiAweDEwMDAwMDAwKQotI2RlZmluZSBQSFlfQkJfU1BFQ1RSQUxfU0NBTl9TUEVDVFJBTF9TQ0FOX1BSSU9SSVRZX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0JCX1NQRUNUUkFMX1NDQU5fU1BFQ1RSQUxfU0NBTl9QUklPUklUWV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9CQl9TUEVDVFJBTF9TQ0FOX1NQRUNUUkFMX1NDQU5fUFJJT1JJVFlfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAotI2RlZmluZSBQSFlfQkJfU1BFQ1RSQUxfU0NBTl9TUEVDVFJBTF9TQ0FOX1BSSU9SSVRZX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDIwMDAwMDAwKSA+PiAyOSkKLSNkZWZpbmUgUEhZX0JCX1NQRUNUUkFMX1NDQU5fU1BFQ1RSQUxfU0NBTl9QUklPUklUWV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI5KSAmIDB4MjAwMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9TUEVDVFJBTF9TQ0FOX1NQRUNUUkFMX1NDQU5fVVNFX0VSUjVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQkJfU1BFQ1RSQUxfU0NBTl9TUEVDVFJBTF9TQ0FOX1VTRV9FUlI1X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0JCX1NQRUNUUkFMX1NDQU5fU1BFQ1RSQUxfU0NBTl9VU0VfRVJSNV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9TUEVDVFJBTF9TQ0FOX1NQRUNUUkFMX1NDQU5fVVNFX0VSUjVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NDAwMDAwMDApID4+IDMwKQotI2RlZmluZSBQSFlfQkJfU1BFQ1RSQUxfU0NBTl9TUEVDVFJBTF9TQ0FOX1VTRV9FUlI1X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMzApICYgMHg0MDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9hbmFsb2dfcG93ZXJfb25fdGltZSAqLwotI2RlZmluZSBQSFlfQkJfQU5BTE9HX1BPV0VSX09OX1RJTUVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk5MTQKLSNkZWZpbmUgUEhZX0JCX0FOQUxPR19QT1dFUl9PTl9USU1FX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OTE0Ci0jZGVmaW5lIFBIWV9CQl9BTkFMT0dfUE9XRVJfT05fVElNRV9BQ1RJVkVfVE9fUkVDRUlWRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfQU5BTE9HX1BPV0VSX09OX1RJTUVfQUNUSVZFX1RPX1JFQ0VJVkVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0FOQUxPR19QT1dFUl9PTl9USU1FX0FDVElWRV9UT19SRUNFSVZFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzZmZmCi0jZGVmaW5lIFBIWV9CQl9BTkFMT0dfUE9XRVJfT05fVElNRV9BQ1RJVkVfVE9fUkVDRUlWRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAzZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfQU5BTE9HX1BPV0VSX09OX1RJTUVfQUNUSVZFX1RPX1JFQ0VJVkVfU0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwM2ZmZikKLQotLyogbWFjcm9zIGZvciBCQl9zZWFyY2hfc3RhcnRfZGVsYXkgKi8KLSNkZWZpbmUgUEhZX0JCX1NFQVJDSF9TVEFSVF9ERUxBWV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OTE4Ci0jZGVmaW5lIFBIWV9CQl9TRUFSQ0hfU1RBUlRfREVMQVlfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTkxOAotI2RlZmluZSBQSFlfQkJfU0VBUkNIX1NUQVJUX0RFTEFZX1NFQVJDSF9TVEFSVF9ERUxBWV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0JCX1NFQVJDSF9TVEFSVF9ERUxBWV9TRUFSQ0hfU1RBUlRfREVMQVlfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9TRUFSQ0hfU1RBUlRfREVMQVlfU0VBUkNIX1NUQVJUX0RFTEFZX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGZmZgotI2RlZmluZSBQSFlfQkJfU0VBUkNIX1NUQVJUX0RFTEFZX1NFQVJDSF9TVEFSVF9ERUxBWV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMGZmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1NFQVJDSF9TVEFSVF9ERUxBWV9TRUFSQ0hfU1RBUlRfREVMQVlfU0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDBmZmYpCi0jZGVmaW5lIFBIWV9CQl9TRUFSQ0hfU1RBUlRfREVMQVlfRU5BQkxFX0ZMVF9TVkRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQkJfU0VBUkNIX1NUQVJUX0RFTEFZX0VOQUJMRV9GTFRfU1ZEX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0JCX1NFQVJDSF9TVEFSVF9ERUxBWV9FTkFCTEVfRkxUX1NWRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCi0jZGVmaW5lIFBIWV9CQl9TRUFSQ0hfU1RBUlRfREVMQVlfRU5BQkxFX0ZMVF9TVkRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDEwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQkJfU0VBUkNIX1NUQVJUX0RFTEFZX0VOQUJMRV9GTFRfU1ZEX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTIpICYgMHgwMDAwMTAwMCkKLSNkZWZpbmUgUEhZX0JCX1NFQVJDSF9TVEFSVF9ERUxBWV9FTkFCTEVfU0VORF9DSEFOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9CQl9TRUFSQ0hfU1RBUlRfREVMQVlfRU5BQkxFX1NFTkRfQ0hBTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfU0VBUkNIX1NUQVJUX0RFTEFZX0VOQUJMRV9TRU5EX0NIQU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKLSNkZWZpbmUgUEhZX0JCX1NFQVJDSF9TVEFSVF9ERUxBWV9FTkFCTEVfU0VORF9DSEFOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMjAwMCkgPj4gMTMpCi0jZGVmaW5lIFBIWV9CQl9TRUFSQ0hfU1RBUlRfREVMQVlfRU5BQkxFX1NFTkRfQ0hBTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMykgJiAweDAwMDAyMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX21heF9yeF9sZW5ndGggKi8KLSNkZWZpbmUgUEhZX0JCX01BWF9SWF9MRU5HVEhfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OTFjCi0jZGVmaW5lIFBIWV9CQl9NQVhfUlhfTEVOR1RIX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTkxYwotI2RlZmluZSBQSFlfQkJfTUFYX1JYX0xFTkdUSF9NQVhfUlhfTEVOR1RIX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0JCX01BWF9SWF9MRU5HVEhfTUFYX1JYX0xFTkdUSF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9NQVhfUlhfTEVOR1RIX01BWF9SWF9MRU5HVEhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGZmZgotI2RlZmluZSBQSFlfQkJfTUFYX1JYX0xFTkdUSF9NQVhfUlhfTEVOR1RIX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMGZmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX01BWF9SWF9MRU5HVEhfTUFYX1JYX0xFTkdUSF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDBmZmYpCi0jZGVmaW5lIFBIWV9CQl9NQVhfUlhfTEVOR1RIX01BWF9IVF9MRU5HVEhfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQkJfTUFYX1JYX0xFTkdUSF9NQVhfSFRfTEVOR1RIX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0JCX01BWF9SWF9MRU5HVEhfTUFYX0hUX0xFTkdUSF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNmZmZmMDAwCi0jZGVmaW5lIFBIWV9CQl9NQVhfUlhfTEVOR1RIX01BWF9IVF9MRU5HVEhfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4M2ZmZmYwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQkJfTUFYX1JYX0xFTkdUSF9NQVhfSFRfTEVOR1RIX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTIpICYgMHgzZmZmZjAwMCkKLQotLyogbWFjcm9zIGZvciBCQl90aW1pbmdfY29udHJvbF80ICovCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF80X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTkyMAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk5MjAKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzRfQ0FMX0xHX0NPVU5UX01BWF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF80X0NBTF9MR19DT1VOVF9NQVhfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNF9DQUxfTEdfQ09VTlRfTUFYX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGYwMDAKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzRfQ0FMX0xHX0NPVU5UX01BWF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwZjAwMCkgPj4gMTIpCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF80X0NBTF9MR19DT1VOVF9NQVhfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMikgJiAweDAwMDBmMDAwKQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNF9ET19HQUlOX0RDX0lRX0NBTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzRfRE9fR0FJTl9EQ19JUV9DQUxfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF80X0RPX0dBSU5fRENfSVFfQ0FMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNF9ET19HQUlOX0RDX0lRX0NBTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDEwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzRfRE9fR0FJTl9EQ19JUV9DQUxfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDAwMTAwMDApCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF80X1VTRV9QSUxPVF9UUkFDS19ERl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNF9VU0VfUElMT1RfVFJBQ0tfREZfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzRfVVNFX1BJTE9UX1RSQUNLX0RGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMWUwMDAwCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF80X1VTRV9QSUxPVF9UUkFDS19ERl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAxZTAwMDApID4+IDE3KQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNF9VU0VfUElMT1RfVFJBQ0tfREZfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTcpICYgMHgwMDFlMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzRfRUFSTFlfVFJJR0dFUl9USFJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF80X0VBUkxZX1RSSUdHRVJfVEhSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNF9FQVJMWV9UUklHR0VSX1RIUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGZlMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzRfRUFSTFlfVFJJR0dFUl9USFJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwZmUwMDAwMCkgPj4gMjEpCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF80X0VBUkxZX1RSSUdHRVJfVEhSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMSkgJiAweDBmZTAwMDAwKQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNF9FTkFCTEVfUElMT1RfTUFTS19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzRfRU5BQkxFX1BJTE9UX01BU0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF80X0VOQUJMRV9QSUxPVF9NQVNLX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNF9FTkFCTEVfUElMT1RfTUFTS19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEwMDAwMDAwKSA+PiAyOCkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzRfRU5BQkxFX1BJTE9UX01BU0tfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI4KSAmIDB4MTAwMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF80X0VOQUJMRV9DSEFOX01BU0tfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNF9FTkFCTEVfQ0hBTl9NQVNLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzRfRU5BQkxFX0NIQU5fTUFTS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF80X0VOQUJMRV9DSEFOX01BU0tfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MjAwMDAwMDApID4+IDI5KQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNF9FTkFCTEVfQ0hBTl9NQVNLX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjkpICYgMHgyMDAwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzRfRU5BQkxFX1NQVVJfRklMVEVSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF80X0VOQUJMRV9TUFVSX0ZJTFRFUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNF9FTkFCTEVfU1BVUl9GSUxURVJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzRfRU5BQkxFX1NQVVJfRklMVEVSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg0MDAwMDAwMCkgPj4gMzApCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF80X0VOQUJMRV9TUFVSX0ZJTFRFUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMCkgJiAweDQwMDAwMDAwKQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNF9FTkFCTEVfU1BVUl9SU1NJX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzRfRU5BQkxFX1NQVVJfUlNTSV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF80X0VOQUJMRV9TUFVSX1JTU0lfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNF9FTkFCTEVfU1BVUl9SU1NJX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDgwMDAwMDAwKSA+PiAzMSkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzRfRU5BQkxFX1NQVVJfUlNTSV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMxKSAmIDB4ODAwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfdGltaW5nX2NvbnRyb2xfNSAqLwotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk5MjQKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzVfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OTI0Ci0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF81X0VOQUJMRV9DWUNQV1JfVEhSMV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNV9FTkFCTEVfQ1lDUFdSX1RIUjFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzVfRU5BQkxFX0NZQ1BXUl9USFIxX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF81X0VOQUJMRV9DWUNQV1JfVEhSMV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAxKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNV9FTkFCTEVfQ1lDUFdSX1RIUjFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwMSkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzVfQ1lDUFdSX1RIUjFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF81X0NZQ1BXUl9USFIxX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNV9DWUNQV1JfVEhSMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmUKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzVfQ1lDUFdSX1RIUjFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwZmUpID4+IDEpCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF81X0NZQ1BXUl9USFIxX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMSkgJiAweDAwMDAwMGZlKQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNV9FTkFCTEVfUlNTSV9USFIxQV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzVfRU5BQkxFX1JTU0lfVEhSMUFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF81X0VOQUJMRV9SU1NJX1RIUjFBX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNV9FTkFCTEVfUlNTSV9USFIxQV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDA4MDAwKSA+PiAxNSkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzVfRU5BQkxFX1JTU0lfVEhSMUFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE1KSAmIDB4MDAwMDgwMDApCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF81X1JTU0lfVEhSMUFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNV9SU1NJX1RIUjFBX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzVfUlNTSV9USFIxQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwN2YwMDAwCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF81X1JTU0lfVEhSMUFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDA3ZjAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNV9SU1NJX1RIUjFBX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMDdmMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzVfTE9OR19TQ19USFJFU0hfSElfUlNTSV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF81X0xPTkdfU0NfVEhSRVNIX0hJX1JTU0lfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNV9MT05HX1NDX1RIUkVTSF9ISV9SU1NJX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M2Y4MDAwMDAKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzVfTE9OR19TQ19USFJFU0hfSElfUlNTSV9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzZjgwMDAwMCkgPj4gMjMpCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF81X0xPTkdfU0NfVEhSRVNIX0hJX1JTU0lfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMykgJiAweDNmODAwMDAwKQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNV9GT1JDRURfQUdDX1NUUl9QUklfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzVfRk9SQ0VEX0FHQ19TVFJfUFJJX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF81X0ZPUkNFRF9BR0NfU1RSX1BSSV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNV9GT1JDRURfQUdDX1NUUl9QUklfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDQwMDAwMDAwKSA+PiAzMCkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzVfRk9SQ0VEX0FHQ19TVFJfUFJJX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMwKSAmIDB4NDAwMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF81X0ZPUkNFRF9BR0NfU1RSX1BSSV9FTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNV9GT1JDRURfQUdDX1NUUl9QUklfRU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzVfRk9SQ0VEX0FHQ19TVFJfUFJJX0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF81X0ZPUkNFRF9BR0NfU1RSX1BSSV9FTl9HRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ODAwMDAwMDApID4+IDMxKQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNV9GT1JDRURfQUdDX1NUUl9QUklfRU5fU0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMzEpICYgMHg4MDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9waHlvbmx5X3dhcm1fcmVzZXQgKi8KLSNkZWZpbmUgUEhZX0JCX1BIWU9OTFlfV0FSTV9SRVNFVF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OTI4Ci0jZGVmaW5lIFBIWV9CQl9QSFlPTkxZX1dBUk1fUkVTRVRfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTkyOAotI2RlZmluZSBQSFlfQkJfUEhZT05MWV9XQVJNX1JFU0VUX1BIWU9OTFlfUlNUX1dBUk1fTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1BIWU9OTFlfV0FSTV9SRVNFVF9QSFlPTkxZX1JTVF9XQVJNX0xfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9QSFlPTkxZX1dBUk1fUkVTRVRfUEhZT05MWV9SU1RfV0FSTV9MX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBQSFlfQkJfUEhZT05MWV9XQVJNX1JFU0VUX1BIWU9OTFlfUlNUX1dBUk1fTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMSkgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1BIWU9OTFlfV0FSTV9SRVNFVF9QSFlPTkxZX1JTVF9XQVJNX0xfU0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDEpCi0KLS8qIG1hY3JvcyBmb3IgQkJfcGh5b25seV9jb250cm9sICovCi0jZGVmaW5lIFBIWV9CQl9QSFlPTkxZX0NPTlRST0xfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTkyYwotI2RlZmluZSBQSFlfQkJfUEhZT05MWV9DT05UUk9MX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk5MmMKLSNkZWZpbmUgUEhZX0JCX1BIWU9OTFlfQ09OVFJPTF9SWF9EUkFJTl9SQVRFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9QSFlPTkxZX0NPTlRST0xfUlhfRFJBSU5fUkFURV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfUEhZT05MWV9DT05UUk9MX1JYX0RSQUlOX1JBVEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUEhZX0JCX1BIWU9OTFlfQ09OVFJPTF9SWF9EUkFJTl9SQVRFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDEpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9QSFlPTkxZX0NPTlRST0xfUlhfRFJBSU5fUkFURV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDAxKQotI2RlZmluZSBQSFlfQkJfUEhZT05MWV9DT05UUk9MX0xBVEVfVFhfU0lHTkFMX1NZTUJPTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0JCX1BIWU9OTFlfQ09OVFJPTF9MQVRFX1RYX1NJR05BTF9TWU1CT0xfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9CQl9QSFlPTkxZX0NPTlRST0xfTEFURV9UWF9TSUdOQUxfU1lNQk9MX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBQSFlfQkJfUEhZT05MWV9DT05UUk9MX0xBVEVfVFhfU0lHTkFMX1NZTUJPTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMikgPj4gMSkKLSNkZWZpbmUgUEhZX0JCX1BIWU9OTFlfQ09OVFJPTF9MQVRFX1RYX1NJR05BTF9TWU1CT0xfU0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxKSAmIDB4MDAwMDAwMDIpCi0jZGVmaW5lIFBIWV9CQl9QSFlPTkxZX0NPTlRST0xfR0VORVJBVEVfU0NSQU1CTEVSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQkJfUEhZT05MWV9DT05UUk9MX0dFTkVSQVRFX1NDUkFNQkxFUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0JCX1BIWU9OTFlfQ09OVFJPTF9HRU5FUkFURV9TQ1JBTUJMRVJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFBIWV9CQl9QSFlPTkxZX0NPTlRST0xfR0VORVJBVEVfU0NSQU1CTEVSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDA0KSA+PiAyKQotI2RlZmluZSBQSFlfQkJfUEhZT05MWV9DT05UUk9MX0dFTkVSQVRFX1NDUkFNQkxFUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIpICYgMHgwMDAwMDAwNCkKLSNkZWZpbmUgUEhZX0JCX1BIWU9OTFlfQ09OVFJPTF9UWF9BTlRFTk5BX1NFTEVDVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9CQl9QSFlPTkxZX0NPTlRST0xfVFhfQU5URU5OQV9TRUxFQ1RfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQkJfUEhZT05MWV9DT05UUk9MX1RYX0FOVEVOTkFfU0VMRUNUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgUEhZX0JCX1BIWU9OTFlfQ09OVFJPTF9UWF9BTlRFTk5BX1NFTEVDVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDgpID4+IDMpCi0jZGVmaW5lIFBIWV9CQl9QSFlPTkxZX0NPTlRST0xfVFhfQU5URU5OQV9TRUxFQ1RfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMykgJiAweDAwMDAwMDA4KQotI2RlZmluZSBQSFlfQkJfUEhZT05MWV9DT05UUk9MX1NUQVRJQ19UWF9BTlRFTk5BX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0JCX1BIWU9OTFlfQ09OVFJPTF9TVEFUSUNfVFhfQU5URU5OQV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9CQl9QSFlPTkxZX0NPTlRST0xfU1RBVElDX1RYX0FOVEVOTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBQSFlfQkJfUEhZT05MWV9DT05UUk9MX1NUQVRJQ19UWF9BTlRFTk5BX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAxMCkgPj4gNCkKLSNkZWZpbmUgUEhZX0JCX1BIWU9OTFlfQ09OVFJPTF9TVEFUSUNfVFhfQU5URU5OQV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA0KSAmIDB4MDAwMDAwMTApCi0jZGVmaW5lIFBIWV9CQl9QSFlPTkxZX0NPTlRST0xfUlhfQU5URU5OQV9TRUxFQ1RfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQkJfUEhZT05MWV9DT05UUk9MX1JYX0FOVEVOTkFfU0VMRUNUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0JCX1BIWU9OTFlfQ09OVFJPTF9SWF9BTlRFTk5BX1NFTEVDVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIFBIWV9CQl9QSFlPTkxZX0NPTlRST0xfUlhfQU5URU5OQV9TRUxFQ1RfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDIwKSA+PiA1KQotI2RlZmluZSBQSFlfQkJfUEhZT05MWV9DT05UUk9MX1JYX0FOVEVOTkFfU0VMRUNUX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDUpICYgMHgwMDAwMDAyMCkKLSNkZWZpbmUgUEhZX0JCX1BIWU9OTFlfQ09OVFJPTF9TVEFUSUNfUlhfQU5URU5OQV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9CQl9QSFlPTkxZX0NPTlRST0xfU1RBVElDX1JYX0FOVEVOTkFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQkJfUEhZT05MWV9DT05UUk9MX1NUQVRJQ19SWF9BTlRFTk5BX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgUEhZX0JCX1BIWU9OTFlfQ09OVFJPTF9TVEFUSUNfUlhfQU5URU5OQV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwNDApID4+IDYpCi0jZGVmaW5lIFBIWV9CQl9QSFlPTkxZX0NPTlRST0xfU1RBVElDX1JYX0FOVEVOTkFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNikgJiAweDAwMDAwMDQwKQotI2RlZmluZSBQSFlfQkJfUEhZT05MWV9DT05UUk9MX0VOX0xPV19GUkVRX1NMRUVQX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0JCX1BIWU9OTFlfQ09OVFJPTF9FTl9MT1dfRlJFUV9TTEVFUF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9CQl9QSFlPTkxZX0NPTlRST0xfRU5fTE9XX0ZSRVFfU0xFRVBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBQSFlfQkJfUEhZT05MWV9DT05UUk9MX0VOX0xPV19GUkVRX1NMRUVQX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDA4MCkgPj4gNykKLSNkZWZpbmUgUEhZX0JCX1BIWU9OTFlfQ09OVFJPTF9FTl9MT1dfRlJFUV9TTEVFUF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA3KSAmIDB4MDAwMDAwODApCi0KLS8qIG1hY3JvcyBmb3IgQkJfcG93ZXJ0eF9yYXRlMSAqLwotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk5MzQKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTFfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OTM0Ci0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUxX1BPV0VSVFhfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMV9QT1dFUlRYXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTFfUE9XRVJUWF8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNmCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUxX1BPV0VSVFhfMF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDNmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMV9QT1dFUlRYXzBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAzZikKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTFfUE9XRVJUWF8xX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUxX1BPV0VSVFhfMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMV9QT1dFUlRYXzFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDNmMDAKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTFfUE9XRVJUWF8xX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDNmMDApID4+IDgpCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUxX1BPV0VSVFhfMV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAzZjAwKQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMV9QT1dFUlRYXzJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTFfUE9XRVJUWF8yX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUxX1BPV0VSVFhfMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDNmMDAwMAotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMV9QT1dFUlRYXzJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwM2YwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTFfUE9XRVJUWF8yX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDAzZjAwMDApCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUxX1BPV0VSVFhfM19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMV9QT1dFUlRYXzNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTFfUE9XRVJUWF8zX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNmMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUxX1BPV0VSVFhfM19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4M2YwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMV9QT1dFUlRYXzNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjQpICYgMHgzZjAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9wb3dlcnR4X3JhdGUyICovCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUyX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTkzOAotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk5MzgKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTJfUE9XRVJUWF80X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUyX1BPV0VSVFhfNF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMl9QT1dFUlRYXzRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM2YKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTJfUE9XRVJUWF80X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwM2YpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUyX1BPV0VSVFhfNF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDNmKQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMl9QT1dFUlRYXzVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTJfUE9XRVJUWF81X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUyX1BPV0VSVFhfNV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwM2YwMAotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMl9QT1dFUlRYXzVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwM2YwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTJfUE9XRVJUWF81X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDNmMDApCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUyX1BPV0VSVFhfNl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMl9QT1dFUlRYXzZfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTJfUE9XRVJUWF82X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwM2YwMDAwCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUyX1BPV0VSVFhfNl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAzZjAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMl9QT1dFUlRYXzZfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMDNmMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTJfUE9XRVJUWF83X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUyX1BPV0VSVFhfN19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMl9QT1dFUlRYXzdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M2YwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTJfUE9XRVJUWF83X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzZjAwMDAwMCkgPj4gMjQpCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUyX1BPV0VSVFhfN19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNCkgJiAweDNmMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3Bvd2VydHhfbWF4ICovCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX01BWF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTkzYwotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9NQVhfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk5M2MKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfTUFYX1VTRV9QRVJfUEFDS0VUX1BPV0VSVFhfTUFYX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX01BWF9VU0VfUEVSX1BBQ0tFVF9QT1dFUlRYX01BWF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9NQVhfVVNFX1BFUl9QQUNLRVRfUE9XRVJUWF9NQVhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfTUFYX1VTRV9QRVJfUEFDS0VUX1BPV0VSVFhfTUFYX0dFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwNDApID4+IDYpCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX01BWF9VU0VfUEVSX1BBQ0tFVF9QT1dFUlRYX01BWF9TRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNikgJiAweDAwMDAwMDQwKQotCi0vKiBtYWNyb3MgZm9yIEJCX2V4dGVuc2lvbl9yYWRhciAqLwotI2RlZmluZSBQSFlfQkJfRVhURU5TSU9OX1JBREFSX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk5NDAKLSNkZWZpbmUgUEhZX0JCX0VYVEVOU0lPTl9SQURBUl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OTQwCi0jZGVmaW5lIFBIWV9CQl9FWFRFTlNJT05fUkFEQVJfQkxPQ0tFUjQwX01BWF9SQURBUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfRVhURU5TSU9OX1JBREFSX0JMT0NLRVI0MF9NQVhfUkFEQVJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0JCX0VYVEVOU0lPTl9SQURBUl9CTE9DS0VSNDBfTUFYX1JBREFSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzZjAwCi0jZGVmaW5lIFBIWV9CQl9FWFRFTlNJT05fUkFEQVJfQkxPQ0tFUjQwX01BWF9SQURBUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAzZjAwKSA+PiA4KQotI2RlZmluZSBQSFlfQkJfRVhURU5TSU9OX1JBREFSX0JMT0NLRVI0MF9NQVhfUkFEQVJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwM2YwMCkKLSNkZWZpbmUgUEhZX0JCX0VYVEVOU0lPTl9SQURBUl9FTkFCTEVfRVhUX1JBREFSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9CQl9FWFRFTlNJT05fUkFEQVJfRU5BQkxFX0VYVF9SQURBUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQkJfRVhURU5TSU9OX1JBREFSX0VOQUJMRV9FWFRfUkFEQVJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKLSNkZWZpbmUgUEhZX0JCX0VYVEVOU0lPTl9SQURBUl9FTkFCTEVfRVhUX1JBREFSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwNDAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9CQl9FWFRFTlNJT05fUkFEQVJfRU5BQkxFX0VYVF9SQURBUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNCkgJiAweDAwMDA0MDAwKQotI2RlZmluZSBQSFlfQkJfRVhURU5TSU9OX1JBREFSX1JBREFSX0RDX1BXUl9USFJFU0hfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0JCX0VYVEVOU0lPTl9SQURBUl9SQURBUl9EQ19QV1JfVEhSRVNIX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9CQl9FWFRFTlNJT05fUkFEQVJfUkFEQVJfRENfUFdSX1RIUkVTSF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDdmODAwMAotI2RlZmluZSBQSFlfQkJfRVhURU5TSU9OX1JBREFSX1JBREFSX0RDX1BXUl9USFJFU0hfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwN2Y4MDAwKSA+PiAxNSkKLSNkZWZpbmUgUEhZX0JCX0VYVEVOU0lPTl9SQURBUl9SQURBUl9EQ19QV1JfVEhSRVNIX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE1KSAmIDB4MDA3ZjgwMDApCi0jZGVmaW5lIFBIWV9CQl9FWFRFTlNJT05fUkFEQVJfUkFEQVJfTEJfRENfQ0FQX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQkJfRVhURU5TSU9OX1JBREFSX1JBREFSX0xCX0RDX0NBUF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0JCX0VYVEVOU0lPTl9SQURBUl9SQURBUl9MQl9EQ19DQVBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdmODAwMDAwCi0jZGVmaW5lIFBIWV9CQl9FWFRFTlNJT05fUkFEQVJfUkFEQVJfTEJfRENfQ0FQX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N2Y4MDAwMDApID4+IDIzKQotI2RlZmluZSBQSFlfQkJfRVhURU5TSU9OX1JBREFSX1JBREFSX0xCX0RDX0NBUF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjMpICYgMHg3ZjgwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX0VYVEVOU0lPTl9SQURBUl9ESVNBQkxFX0FEQ1NBVF9IT0xEX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9FWFRFTlNJT05fUkFEQVJfRElTQUJMRV9BRENTQVRfSE9MRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfRVhURU5TSU9OX1JBREFSX0RJU0FCTEVfQURDU0FUX0hPTERfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX0VYVEVOU0lPTl9SQURBUl9ESVNBQkxFX0FEQ1NBVF9IT0xEX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg4MDAwMDAwMCkgPj4gMzEpCi0jZGVmaW5lIFBIWV9CQl9FWFRFTlNJT05fUkFEQVJfRElTQUJMRV9BRENTQVRfSE9MRF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMSkgJiAweDgwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX2ZyYW1lX2NvbnRyb2wgKi8KLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OTQ0Ci0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTk0NAotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9DRl9PVkVSTEFQX1dJTkRPV19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfQ0ZfT1ZFUkxBUF9XSU5ET1dfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX0NGX09WRVJMQVBfV0lORE9XX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMwotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9DRl9PVkVSTEFQX1dJTkRPV19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMykgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfQ0ZfT1ZFUkxBUF9XSU5ET1dfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDMpCi0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX0NGX1NDQUxFX1NIT1JUX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9DRl9TQ0FMRV9TSE9SVF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfQ0ZfU0NBTEVfU0hPUlRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX0NGX1NDQUxFX1NIT1JUX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDA0KSA+PiAyKQotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9DRl9TQ0FMRV9TSE9SVF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIpICYgMHgwMDAwMDAwNCkKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfQ0ZfVFhfQ0xJUF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX0NGX1RYX0NMSVBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9DRl9UWF9DTElQX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfQ0ZfVFhfQ0xJUF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMzgpID4+IDMpCi0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX0NGX1RYX0NMSVBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMykgJiAweDAwMDAwMDM4KQotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9DRl9UWF9ET1VCTEVTQU1QX0RBQ19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfQ0ZfVFhfRE9VQkxFU0FNUF9EQUNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX0NGX1RYX0RPVUJMRVNBTVBfREFDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBjMAotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9DRl9UWF9ET1VCTEVTQU1QX0RBQ19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDBjMCkgPj4gNikKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfQ0ZfVFhfRE9VQkxFU0FNUF9EQUNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA2KSAmIDB4MDAwMDAwYzApCi0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX1RYX0VORF9BREpVU1RfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9UWF9FTkRfQURKVVNUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfVFhfRU5EX0FESlVTVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBmZjAwCi0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX1RYX0VORF9BREpVU1RfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDBmZjAwKSA+PiA4KQotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9UWF9FTkRfQURKVVNUX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwZmYwMCkKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfUFJFUEVORF9DSEFOX0lORk9fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX1BSRVBFTkRfQ0hBTl9JTkZPX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9QUkVQRU5EX0NIQU5fSU5GT19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfUFJFUEVORF9DSEFOX0lORk9fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAxMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX1BSRVBFTkRfQ0hBTl9JTkZPX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAwMDEwMDAwKQotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9TSE9SVF9ISUdIX1BBUl9OT1JNX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfU0hPUlRfSElHSF9QQVJfTk9STV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX1NIT1JUX0hJR0hfUEFSX05PUk1fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9TSE9SVF9ISUdIX1BBUl9OT1JNX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDIwMDAwKSA+PiAxNykKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfU0hPUlRfSElHSF9QQVJfTk9STV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE3KSAmIDB4MDAwMjAwMDApCi0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX0VOX0VSUl9HUkVFTl9GSUVMRF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9FTl9FUlJfR1JFRU5fRklFTERfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfRU5fRVJSX0dSRUVOX0ZJRUxEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCi0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX0VOX0VSUl9HUkVFTl9GSUVMRF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwNDAwMDApID4+IDE4KQotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9FTl9FUlJfR1JFRU5fRklFTERfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTgpICYgMHgwMDA0MDAwMCkKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfRU5fRVJSX1hSX1BPV0VSX1JBVElPX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX0VOX0VSUl9YUl9QT1dFUl9SQVRJT19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9FTl9FUlJfWFJfUE9XRVJfUkFUSU9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfRU5fRVJSX1hSX1BPV0VSX1JBVElPX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDA4MDAwMCkgPj4gMTkpCi0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX0VOX0VSUl9YUl9QT1dFUl9SQVRJT19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOSkgJiAweDAwMDgwMDAwKQotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9FTl9FUlJfT0ZETV9YQ09SUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfRU5fRVJSX09GRE1fWENPUlJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX0VOX0VSUl9PRkRNX1hDT1JSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9FTl9FUlJfT0ZETV9YQ09SUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMTAwMDAwKSA+PiAyMCkKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfRU5fRVJSX09GRE1fWENPUlJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIwKSAmIDB4MDAxMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX0VOX0VSUl9MT05HX1NDX1RIUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9FTl9FUlJfTE9OR19TQ19USFJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfRU5fRVJSX0xPTkdfU0NfVEhSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCi0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX0VOX0VSUl9MT05HX1NDX1RIUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAyMDAwMDApID4+IDIxKQotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9FTl9FUlJfTE9OR19TQ19USFJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjEpICYgMHgwMDIwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfRU5fRVJSX1RJTV9MT05HMV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX0VOX0VSUl9USU1fTE9ORzFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9FTl9FUlJfVElNX0xPTkcxX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfRU5fRVJSX1RJTV9MT05HMV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDQwMDAwMCkgPj4gMjIpCi0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX0VOX0VSUl9USU1fTE9ORzFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMikgJiAweDAwNDAwMDAwKQotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9FTl9FUlJfVElNX0VBUkxZX1RSSUdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfRU5fRVJSX1RJTV9FQVJMWV9UUklHX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX0VOX0VSUl9USU1fRUFSTFlfVFJJR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9FTl9FUlJfVElNX0VBUkxZX1RSSUdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwODAwMDAwKSA+PiAyMykKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfRU5fRVJSX1RJTV9FQVJMWV9UUklHX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIzKSAmIDB4MDA4MDAwMDApCi0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX0VOX0VSUl9USU1fVElNRU9VVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9FTl9FUlJfVElNX1RJTUVPVVRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfRU5fRVJSX1RJTV9USU1FT1VUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX0VOX0VSUl9USU1fVElNRU9VVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDEwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9FTl9FUlJfVElNX1RJTUVPVVRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjQpICYgMHgwMTAwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfRU5fRVJSX1NJR05BTF9QQVJJVFlfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX0VOX0VSUl9TSUdOQUxfUEFSSVRZX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9FTl9FUlJfU0lHTkFMX1BBUklUWV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfRU5fRVJSX1NJR05BTF9QQVJJVFlfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMjAwMDAwMCkgPj4gMjUpCi0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX0VOX0VSUl9TSUdOQUxfUEFSSVRZX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNSkgJiAweDAyMDAwMDAwKQotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9FTl9FUlJfUkFURV9JTExFR0FMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfRU5fRVJSX1JBVEVfSUxMRUdBTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX0VOX0VSUl9SQVRFX0lMTEVHQUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9FTl9FUlJfUkFURV9JTExFR0FMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDA0MDAwMDAwKSA+PiAyNikKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfRU5fRVJSX1JBVEVfSUxMRUdBTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI2KSAmIDB4MDQwMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX0VOX0VSUl9MRU5HVEhfSUxMRUdBTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9FTl9FUlJfTEVOR1RIX0lMTEVHQUxfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfRU5fRVJSX0xFTkdUSF9JTExFR0FMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX0VOX0VSUl9MRU5HVEhfSUxMRUdBTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDgwMDAwMDApID4+IDI3KQotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9FTl9FUlJfTEVOR1RIX0lMTEVHQUxfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjcpICYgMHgwODAwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfRU5fRVJSX0hUX1NFUlZJQ0VfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX0VOX0VSUl9IVF9TRVJWSUNFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9FTl9FUlJfSFRfU0VSVklDRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfRU5fRVJSX0hUX1NFUlZJQ0VfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxMDAwMDAwMCkgPj4gMjgpCi0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX0VOX0VSUl9IVF9TRVJWSUNFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyOCkgJiAweDEwMDAwMDAwKQotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9FTl9FUlJfU0VSVklDRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfRU5fRVJSX1NFUlZJQ0VfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX0VOX0VSUl9TRVJWSUNFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9FTl9FUlJfU0VSVklDRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDIwMDAwMDAwKSA+PiAyOSkKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfRU5fRVJSX1NFUlZJQ0VfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI5KSAmIDB4MjAwMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX0VOX0VSUl9UWF9VTkRFUlJVTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9FTl9FUlJfVFhfVU5ERVJSVU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfRU5fRVJSX1RYX1VOREVSUlVOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX0VOX0VSUl9UWF9VTkRFUlJVTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NDAwMDAwMDApID4+IDMwKQotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9FTl9FUlJfVFhfVU5ERVJSVU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMzApICYgMHg0MDAwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfRU5fRVJSX1JYX0FCT1JUX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX0VOX0VSUl9SWF9BQk9SVF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfRlJBTUVfQ09OVFJPTF9FTl9FUlJfUlhfQUJPUlRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX0ZSQU1FX0NPTlRST0xfRU5fRVJSX1JYX0FCT1JUX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg4MDAwMDAwMCkgPj4gMzEpCi0jZGVmaW5lIFBIWV9CQl9GUkFNRV9DT05UUk9MX0VOX0VSUl9SWF9BQk9SVF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMSkgJiAweDgwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3RpbWluZ19jb250cm9sXzYgKi8KLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzZfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OTQ4Ci0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF82X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTk0OAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNl9ISV9SU1NJX1RIUkVTSF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzZfSElfUlNTSV9USFJFU0hfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF82X0hJX1JTU0lfVEhSRVNIX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNl9ISV9SU1NJX1RIUkVTSF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDBmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzZfSElfUlNTSV9USFJFU0hfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwZmYpCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF82X0VBUkxZX1RSSUdHRVJfVEhSX0hJX1JTU0lfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNl9FQVJMWV9UUklHR0VSX1RIUl9ISV9SU1NJX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzZfRUFSTFlfVFJJR0dFUl9USFJfSElfUlNTSV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA3ZjAwCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF82X0VBUkxZX1RSSUdHRVJfVEhSX0hJX1JTU0lfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDA3ZjAwKSA+PiA4KQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNl9FQVJMWV9UUklHR0VSX1RIUl9ISV9SU1NJX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwN2YwMCkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzZfT0ZETV9YQ09SUl9USFJFU0hfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF82X09GRE1fWENPUlJfVEhSRVNIX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNl9PRkRNX1hDT1JSX1RIUkVTSF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxZjgwMDAKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzZfT0ZETV9YQ09SUl9USFJFU0hfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDFmODAwMCkgPj4gMTUpCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF82X09GRE1fWENPUlJfVEhSRVNIX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNSkgJiAweDAwMWY4MDAwKQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNl9PRkRNX1hDT1JSX1RIUkVTSF9ISV9SU1NJX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzZfT0ZETV9YQ09SUl9USFJFU0hfSElfUlNTSV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF82X09GRE1fWENPUlJfVEhSRVNIX0hJX1JTU0lfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwZmUwMDAwMAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNl9PRkRNX1hDT1JSX1RIUkVTSF9ISV9SU1NJX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDBmZTAwMDAwKSA+PiAyMSkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzZfT0ZETV9YQ09SUl9USFJFU0hfSElfUlNTSV9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IDIxKSAmIDB4MGZlMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF82X0xPTkdfTUVESVVNX1JBVElPX1RIUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNl9MT05HX01FRElVTV9SQVRJT19USFJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzZfTE9OR19NRURJVU1fUkFUSU9fVEhSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGYwMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF82X0xPTkdfTUVESVVNX1JBVElPX1RIUl9HRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZjAwMDAwMDApID4+IDI4KQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfNl9MT05HX01FRElVTV9SQVRJT19USFJfU0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjgpICYgMHhmMDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9zcHVyX21hc2tfY29udHJvbHMgKi8KLSNkZWZpbmUgUEhZX0JCX1NQVVJfTUFTS19DT05UUk9MU19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OTRjCi0jZGVmaW5lIFBIWV9CQl9TUFVSX01BU0tfQ09OVFJPTFNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTk0YwotI2RlZmluZSBQSFlfQkJfU1BVUl9NQVNLX0NPTlRST0xTX1NQVVJfUlNTSV9USFJFU0hfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0JCX1NQVVJfTUFTS19DT05UUk9MU19TUFVSX1JTU0lfVEhSRVNIX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9TUFVSX01BU0tfQ09OVFJPTFNfU1BVUl9SU1NJX1RIUkVTSF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBQSFlfQkJfU1BVUl9NQVNLX0NPTlRST0xTX1NQVVJfUlNTSV9USFJFU0hfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDBmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1NQVVJfTUFTS19DT05UUk9MU19TUFVSX1JTU0lfVEhSRVNIX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwZmYpCi0jZGVmaW5lIFBIWV9CQl9TUFVSX01BU0tfQ09OVFJPTFNfRU5fVklUX1NQVVJfUlNTSV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQkJfU1BVUl9NQVNLX0NPTlRST0xTX0VOX1ZJVF9TUFVSX1JTU0lfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0JCX1NQVVJfTUFTS19DT05UUk9MU19FTl9WSVRfU1BVUl9SU1NJX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCi0jZGVmaW5lIFBIWV9CQl9TUFVSX01BU0tfQ09OVFJPTFNfRU5fVklUX1NQVVJfUlNTSV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMTAwKSA+PiA4KQotI2RlZmluZSBQSFlfQkJfU1BVUl9NQVNLX0NPTlRST0xTX0VOX1ZJVF9TUFVSX1JTU0lfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwMDEwMCkKLSNkZWZpbmUgUEhZX0JCX1NQVVJfTUFTS19DT05UUk9MU19FTkFCTEVfTUFTS19QUE1fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9CQl9TUFVSX01BU0tfQ09OVFJPTFNfRU5BQkxFX01BU0tfUFBNX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQkJfU1BVUl9NQVNLX0NPTlRST0xTX0VOQUJMRV9NQVNLX1BQTV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKLSNkZWZpbmUgUEhZX0JCX1NQVVJfTUFTS19DT05UUk9MU19FTkFCTEVfTUFTS19QUE1fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAyMDAwMCkgPj4gMTcpCi0jZGVmaW5lIFBIWV9CQl9TUFVSX01BU0tfQ09OVFJPTFNfRU5BQkxFX01BU0tfUFBNX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNykgJiAweDAwMDIwMDAwKQotI2RlZmluZSBQSFlfQkJfU1BVUl9NQVNLX0NPTlRST0xTX01BU0tfUkFURV9DTlRMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0JCX1NQVVJfTUFTS19DT05UUk9MU19NQVNLX1JBVEVfQ05UTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFBIWV9CQl9TUFVSX01BU0tfQ09OVFJPTFNfTUFTS19SQVRFX0NOVExfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwM2ZjMDAwMAotI2RlZmluZSBQSFlfQkJfU1BVUl9NQVNLX0NPTlRST0xTX01BU0tfUkFURV9DTlRMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAzZmMwMDAwKSA+PiAxOCkKLSNkZWZpbmUgUEhZX0JCX1NQVVJfTUFTS19DT05UUk9MU19NQVNLX1JBVEVfQ05UTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE4KSAmIDB4MDNmYzAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfcnhfaXFfY29ycl9iMCAqLwotI2RlZmluZSBQSFlfQkJfUlhfSVFfQ09SUl9CMF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk5NTAKLSNkZWZpbmUgUEhZX0JCX1JYX0lRX0NPUlJfQjBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OTUwCi0jZGVmaW5lIFBIWV9CQl9SWF9JUV9DT1JSX0IwX1JYX0lRQ09SUl9RX1FfQ09GRl8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQkJfUlhfSVFfQ09SUl9CMF9SWF9JUUNPUlJfUV9RX0NPRkZfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1JYX0lRX0NPUlJfQjBfUlhfSVFDT1JSX1FfUV9DT0ZGXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdmCi0jZGVmaW5lIFBIWV9CQl9SWF9JUV9DT1JSX0IwX1JYX0lRQ09SUl9RX1FfQ09GRl8wX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDdmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfUlhfSVFfQ09SUl9CMF9SWF9JUUNPUlJfUV9RX0NPRkZfMF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDA3ZikKLSNkZWZpbmUgUEhZX0JCX1JYX0lRX0NPUlJfQjBfUlhfSVFDT1JSX1FfSV9DT0ZGXzBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9CQl9SWF9JUV9DT1JSX0IwX1JYX0lRQ09SUl9RX0lfQ09GRl8wX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQkJfUlhfSVFfQ09SUl9CMF9SWF9JUUNPUlJfUV9JX0NPRkZfMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDNmODAKLSNkZWZpbmUgUEhZX0JCX1JYX0lRX0NPUlJfQjBfUlhfSVFDT1JSX1FfSV9DT0ZGXzBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDNmODApID4+IDcpCi0jZGVmaW5lIFBIWV9CQl9SWF9JUV9DT1JSX0IwX1JYX0lRQ09SUl9RX0lfQ09GRl8wX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNykgJiAweDAwMDAzZjgwKQotI2RlZmluZSBQSFlfQkJfUlhfSVFfQ09SUl9CMF9SWF9JUUNPUlJfRU5BQkxFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0JCX1JYX0lRX0NPUlJfQjBfUlhfSVFDT1JSX0VOQUJMRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9CQl9SWF9JUV9DT1JSX0IwX1JYX0lRQ09SUl9FTkFCTEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAotI2RlZmluZSBQSFlfQkJfUlhfSVFfQ09SUl9CMF9SWF9JUUNPUlJfRU5BQkxFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDA0MDAwKSA+PiAxNCkKLSNkZWZpbmUgUEhZX0JCX1JYX0lRX0NPUlJfQjBfUlhfSVFDT1JSX0VOQUJMRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE0KSAmIDB4MDAwMDQwMDApCi0jZGVmaW5lIFBIWV9CQl9SWF9JUV9DT1JSX0IwX0xPT1BCQUNLX0lRQ09SUl9RX1FfQ09GRl8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQkJfUlhfSVFfQ09SUl9CMF9MT09QQkFDS19JUUNPUlJfUV9RX0NPRkZfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0JCX1JYX0lRX0NPUlJfQjBfTE9PUEJBQ0tfSVFDT1JSX1FfUV9DT0ZGXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwM2Y4MDAwCi0jZGVmaW5lIFBIWV9CQl9SWF9JUV9DT1JSX0IwX0xPT1BCQUNLX0lRQ09SUl9RX1FfQ09GRl8wX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAzZjgwMDApID4+IDE1KQotI2RlZmluZSBQSFlfQkJfUlhfSVFfQ09SUl9CMF9MT09QQkFDS19JUUNPUlJfUV9RX0NPRkZfMF9TRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTUpICYgMHgwMDNmODAwMCkKLSNkZWZpbmUgUEhZX0JCX1JYX0lRX0NPUlJfQjBfTE9PUEJBQ0tfSVFDT1JSX1FfSV9DT0ZGXzBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9CQl9SWF9JUV9DT1JSX0IwX0xPT1BCQUNLX0lRQ09SUl9RX0lfQ09GRl8wX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBQSFlfQkJfUlhfSVFfQ09SUl9CMF9MT09QQkFDS19JUUNPUlJfUV9JX0NPRkZfMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWZjMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1JYX0lRX0NPUlJfQjBfTE9PUEJBQ0tfSVFDT1JSX1FfSV9DT0ZGXzBfR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgxZmMwMDAwMCkgPj4gMjIpCi0jZGVmaW5lIFBIWV9CQl9SWF9JUV9DT1JSX0IwX0xPT1BCQUNLX0lRQ09SUl9RX0lfQ09GRl8wX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMikgJiAweDFmYzAwMDAwKQotI2RlZmluZSBQSFlfQkJfUlhfSVFfQ09SUl9CMF9MT09QQkFDS19JUUNPUlJfRU5BQkxFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0JCX1JYX0lRX0NPUlJfQjBfTE9PUEJBQ0tfSVFDT1JSX0VOQUJMRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9CQl9SWF9JUV9DT1JSX0IwX0xPT1BCQUNLX0lRQ09SUl9FTkFCTEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAotI2RlZmluZSBQSFlfQkJfUlhfSVFfQ09SUl9CMF9MT09QQkFDS19JUUNPUlJfRU5BQkxFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDIwMDAwMDAwKSA+PiAyOSkKLSNkZWZpbmUgUEhZX0JCX1JYX0lRX0NPUlJfQjBfTE9PUEJBQ0tfSVFDT1JSX0VOQUJMRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI5KSAmIDB4MjAwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfcmFkYXJfZGV0ZWN0aW9uICovCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9ERVRFQ1RJT05fQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTk1NAotI2RlZmluZSBQSFlfQkJfUkFEQVJfREVURUNUSU9OX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk5NTQKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0RFVEVDVElPTl9QVUxTRV9ERVRFQ1RfRU5BQkxFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9ERVRFQ1RJT05fUFVMU0VfREVURUNUX0VOQUJMRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfUkFEQVJfREVURUNUSU9OX1BVTFNFX0RFVEVDVF9FTkFCTEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0RFVEVDVElPTl9QVUxTRV9ERVRFQ1RfRU5BQkxFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDEpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9ERVRFQ1RJT05fUFVMU0VfREVURUNUX0VOQUJMRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDAxKQotI2RlZmluZSBQSFlfQkJfUkFEQVJfREVURUNUSU9OX1BVTFNFX0lOX0JBTkRfVEhSRVNIX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0RFVEVDVElPTl9QVUxTRV9JTl9CQU5EX1RIUkVTSF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9ERVRFQ1RJT05fUFVMU0VfSU5fQkFORF9USFJFU0hfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzZQotI2RlZmluZSBQSFlfQkJfUkFEQVJfREVURUNUSU9OX1BVTFNFX0lOX0JBTkRfVEhSRVNIX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAzZSkgPj4gMSkKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0RFVEVDVElPTl9QVUxTRV9JTl9CQU5EX1RIUkVTSF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxKSAmIDB4MDAwMDAwM2UpCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9ERVRFQ1RJT05fUFVMU0VfUlNTSV9USFJFU0hfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQkJfUkFEQVJfREVURUNUSU9OX1BVTFNFX1JTU0lfVEhSRVNIX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0RFVEVDVElPTl9QVUxTRV9SU1NJX1RIUkVTSF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwZmMwCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9ERVRFQ1RJT05fUFVMU0VfUlNTSV9USFJFU0hfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwZmMwKSA+PiA2KQotI2RlZmluZSBQSFlfQkJfUkFEQVJfREVURUNUSU9OX1BVTFNFX1JTU0lfVEhSRVNIX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDYpICYgMHgwMDAwMGZjMCkKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0RFVEVDVElPTl9QVUxTRV9IRUlHSFRfVEhSRVNIX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9CQl9SQURBUl9ERVRFQ1RJT05fUFVMU0VfSEVJR0hUX1RIUkVTSF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQkJfUkFEQVJfREVURUNUSU9OX1BVTFNFX0hFSUdIVF9USFJFU0hfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM2YwMDAKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0RFVEVDVElPTl9QVUxTRV9IRUlHSFRfVEhSRVNIX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAzZjAwMCkgPj4gMTIpCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9ERVRFQ1RJT05fUFVMU0VfSEVJR0hUX1RIUkVTSF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMikgJiAweDAwMDNmMDAwKQotI2RlZmluZSBQSFlfQkJfUkFEQVJfREVURUNUSU9OX1JBREFSX1JTU0lfVEhSRVNIX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0RFVEVDVElPTl9SQURBUl9SU1NJX1RIUkVTSF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFBIWV9CQl9SQURBUl9ERVRFQ1RJT05fUkFEQVJfUlNTSV9USFJFU0hfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMGZjMDAwMAotI2RlZmluZSBQSFlfQkJfUkFEQVJfREVURUNUSU9OX1JBREFSX1JTU0lfVEhSRVNIX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwZmMwMDAwKSA+PiAxOCkKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0RFVEVDVElPTl9SQURBUl9SU1NJX1RIUkVTSF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE4KSAmIDB4MDBmYzAwMDApCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9ERVRFQ1RJT05fUkFEQVJfRklSUFdSX1RIUkVTSF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQkJfUkFEQVJfREVURUNUSU9OX1JBREFSX0ZJUlBXUl9USFJFU0hfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0RFVEVDVElPTl9SQURBUl9GSVJQV1JfVEhSRVNIX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdmMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9ERVRFQ1RJT05fUkFEQVJfRklSUFdSX1RIUkVTSF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N2YwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQkJfUkFEQVJfREVURUNUSU9OX1JBREFSX0ZJUlBXUl9USFJFU0hfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjQpICYgMHg3ZjAwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0RFVEVDVElPTl9FTkFCTEVfUkFEQVJfRkZUX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9ERVRFQ1RJT05fRU5BQkxFX1JBREFSX0ZGVF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfUkFEQVJfREVURUNUSU9OX0VOQUJMRV9SQURBUl9GRlRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0RFVEVDVElPTl9FTkFCTEVfUkFEQVJfRkZUX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg4MDAwMDAwMCkgPj4gMzEpCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9ERVRFQ1RJT05fRU5BQkxFX1JBREFSX0ZGVF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMSkgJiAweDgwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3JhZGFyX2RldGVjdGlvbl8yICovCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9ERVRFQ1RJT05fMl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTk1OAotI2RlZmluZSBQSFlfQkJfUkFEQVJfREVURUNUSU9OXzJfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk5NTgKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0RFVEVDVElPTl8yX1JBREFSX0xFTkdUSF9NQVhfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9CQl9SQURBUl9ERVRFQ1RJT05fMl9SQURBUl9MRU5HVEhfTUFYX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfUkFEQVJfREVURUNUSU9OXzJfUkFEQVJfTEVOR1RIX01BWF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0RFVEVDVElPTl8yX1JBREFSX0xFTkdUSF9NQVhfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9ERVRFQ1RJT05fMl9SQURBUl9MRU5HVEhfTUFYX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMGZmKQotI2RlZmluZSBQSFlfQkJfUkFEQVJfREVURUNUSU9OXzJfUFVMU0VfUkVMU1RFUF9USFJFU0hfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0RFVEVDVElPTl8yX1BVTFNFX1JFTFNURVBfVEhSRVNIX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9SQURBUl9ERVRFQ1RJT05fMl9QVUxTRV9SRUxTVEVQX1RIUkVTSF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMWYwMAotI2RlZmluZSBQSFlfQkJfUkFEQVJfREVURUNUSU9OXzJfUFVMU0VfUkVMU1RFUF9USFJFU0hfR0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMWYwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0RFVEVDVElPTl8yX1BVTFNFX1JFTFNURVBfVEhSRVNIX1NFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDFmMDApCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9ERVRFQ1RJT05fMl9FTkFCTEVfUFVMU0VfUkVMU1RFUF9DSEVDS19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfUkFEQVJfREVURUNUSU9OXzJfRU5BQkxFX1BVTFNFX1JFTFNURVBfQ0hFQ0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0RFVEVDVElPTl8yX0VOQUJMRV9QVUxTRV9SRUxTVEVQX0NIRUNLX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9ERVRFQ1RJT05fMl9FTkFCTEVfUFVMU0VfUkVMU1RFUF9DSEVDS19HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDIwMDApID4+IDEzKQotI2RlZmluZSBQSFlfQkJfUkFEQVJfREVURUNUSU9OXzJfRU5BQkxFX1BVTFNFX1JFTFNURVBfQ0hFQ0tfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgMTMpICYgMHgwMDAwMjAwMCkKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0RFVEVDVElPTl8yX0VOQUJMRV9NQVhfUkFEQVJfUlNTSV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9CQl9SQURBUl9ERVRFQ1RJT05fMl9FTkFCTEVfTUFYX1JBREFSX1JTU0lfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQkJfUkFEQVJfREVURUNUSU9OXzJfRU5BQkxFX01BWF9SQURBUl9SU1NJX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0RFVEVDVElPTl8yX0VOQUJMRV9NQVhfUkFEQVJfUlNTSV9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwNDAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9ERVRFQ1RJT05fMl9FTkFCTEVfTUFYX1JBREFSX1JTU0lfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNCkgJiAweDAwMDA0MDAwKQotI2RlZmluZSBQSFlfQkJfUkFEQVJfREVURUNUSU9OXzJfRU5BQkxFX0JMT0NLX1JBREFSX0NIRUNLX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0RFVEVDVElPTl8yX0VOQUJMRV9CTE9DS19SQURBUl9DSEVDS19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9CQl9SQURBUl9ERVRFQ1RJT05fMl9FTkFCTEVfQkxPQ0tfUkFEQVJfQ0hFQ0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAotI2RlZmluZSBQSFlfQkJfUkFEQVJfREVURUNUSU9OXzJfRU5BQkxFX0JMT0NLX1JBREFSX0NIRUNLX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDA4MDAwKSA+PiAxNSkKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0RFVEVDVElPTl8yX0VOQUJMRV9CTE9DS19SQURBUl9DSEVDS19TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IDE1KSAmIDB4MDAwMDgwMDApCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9ERVRFQ1RJT05fMl9SQURBUl9SRUxQV1JfVEhSRVNIX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQkJfUkFEQVJfREVURUNUSU9OXzJfUkFEQVJfUkVMUFdSX1RIUkVTSF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0RFVEVDVElPTl8yX1JBREFSX1JFTFBXUl9USFJFU0hfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwM2YwMDAwCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9ERVRFQ1RJT05fMl9SQURBUl9SRUxQV1JfVEhSRVNIX0dFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAzZjAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQkJfUkFEQVJfREVURUNUSU9OXzJfUkFEQVJfUkVMUFdSX1RIUkVTSF9TRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMDNmMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0RFVEVDVElPTl8yX1JBREFSX1VTRV9GSVJQV1JfMTI4X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9ERVRFQ1RJT05fMl9SQURBUl9VU0VfRklSUFdSXzEyOF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBQSFlfQkJfUkFEQVJfREVURUNUSU9OXzJfUkFEQVJfVVNFX0ZJUlBXUl8xMjhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0RFVEVDVElPTl8yX1JBREFSX1VTRV9GSVJQV1JfMTI4X0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDQwMDAwMCkgPj4gMjIpCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9ERVRFQ1RJT05fMl9SQURBUl9VU0VfRklSUFdSXzEyOF9TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMikgJiAweDAwNDAwMDAwKQotI2RlZmluZSBQSFlfQkJfUkFEQVJfREVURUNUSU9OXzJfRU5BQkxFX1JBREFSX1JFTFBXUl9DSEVDS19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0RFVEVDVElPTl8yX0VOQUJMRV9SQURBUl9SRUxQV1JfQ0hFQ0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9ERVRFQ1RJT05fMl9FTkFCTEVfUkFEQVJfUkVMUFdSX0NIRUNLX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAotI2RlZmluZSBQSFlfQkJfUkFEQVJfREVURUNUSU9OXzJfRU5BQkxFX1JBREFSX1JFTFBXUl9DSEVDS19HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiAweDAwODAwMDAwKSA+PiAyMykKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0RFVEVDVElPTl8yX0VOQUJMRV9SQURBUl9SRUxQV1JfQ0hFQ0tfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IDIzKSAmIDB4MDA4MDAwMDApCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9ERVRFQ1RJT05fMl9DRl9SQURBUl9CSU5fVEhSRVNIX1NFTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQkJfUkFEQVJfREVURUNUSU9OXzJfQ0ZfUkFEQVJfQklOX1RIUkVTSF9TRUxfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0RFVEVDVElPTl8yX0NGX1JBREFSX0JJTl9USFJFU0hfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9ERVRFQ1RJT05fMl9DRl9SQURBUl9CSU5fVEhSRVNIX1NFTF9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDcwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQkJfUkFEQVJfREVURUNUSU9OXzJfQ0ZfUkFEQVJfQklOX1RIUkVTSF9TRUxfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgMjQpICYgMHgwNzAwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0RFVEVDVElPTl8yX0VOQUJMRV9QVUxTRV9HQ19DT1VOVF9DSEVDS19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9CQl9SQURBUl9ERVRFQ1RJT05fMl9FTkFCTEVfUFVMU0VfR0NfQ09VTlRfQ0hFQ0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQkJfUkFEQVJfREVURUNUSU9OXzJfRU5BQkxFX1BVTFNFX0dDX0NPVU5UX0NIRUNLX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0RFVEVDVElPTl8yX0VOQUJMRV9QVUxTRV9HQ19DT1VOVF9DSEVDS19HRVQoeCkgICAgICAgICAgICgoKHgpICYgMHgwODAwMDAwMCkgPj4gMjcpCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9ERVRFQ1RJT05fMl9FTkFCTEVfUFVMU0VfR0NfQ09VTlRfQ0hFQ0tfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCAyNykgJiAweDA4MDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3R4X3BoYXNlX3JhbXBfYjAgKi8KLSNkZWZpbmUgUEhZX0JCX1RYX1BIQVNFX1JBTVBfQjBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OTVjCi0jZGVmaW5lIFBIWV9CQl9UWF9QSEFTRV9SQU1QX0IwX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTk1YwotI2RlZmluZSBQSFlfQkJfVFhfUEhBU0VfUkFNUF9CMF9DRl9QSEFTRV9SQU1QX0VOQUJMRV8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX1BIQVNFX1JBTVBfQjBfQ0ZfUEhBU0VfUkFNUF9FTkFCTEVfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9UWF9QSEFTRV9SQU1QX0IwX0NGX1BIQVNFX1JBTVBfRU5BQkxFXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBQSFlfQkJfVFhfUEhBU0VfUkFNUF9CMF9DRl9QSEFTRV9SQU1QX0VOQUJMRV8wX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMSkgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1RYX1BIQVNFX1JBTVBfQjBfQ0ZfUEhBU0VfUkFNUF9FTkFCTEVfMF9TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFBIWV9CQl9UWF9QSEFTRV9SQU1QX0IwX0NGX1BIQVNFX1JBTVBfQklBU18wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQkJfVFhfUEhBU0VfUkFNUF9CMF9DRl9QSEFTRV9SQU1QX0JJQVNfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0JCX1RYX1BIQVNFX1JBTVBfQjBfQ0ZfUEhBU0VfUkFNUF9CSUFTXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdlCi0jZGVmaW5lIFBIWV9CQl9UWF9QSEFTRV9SQU1QX0IwX0NGX1BIQVNFX1JBTVBfQklBU18wX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDdlKSA+PiAxKQotI2RlZmluZSBQSFlfQkJfVFhfUEhBU0VfUkFNUF9CMF9DRl9QSEFTRV9SQU1QX0JJQVNfMF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEpICYgMHgwMDAwMDA3ZSkKLSNkZWZpbmUgUEhZX0JCX1RYX1BIQVNFX1JBTVBfQjBfQ0ZfUEhBU0VfUkFNUF9JTklUXzBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9UWF9QSEFTRV9SQU1QX0IwX0NGX1BIQVNFX1JBTVBfSU5JVF8wX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQkJfVFhfUEhBU0VfUkFNUF9CMF9DRl9QSEFTRV9SQU1QX0lOSVRfMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMWZmODAKLSNkZWZpbmUgUEhZX0JCX1RYX1BIQVNFX1JBTVBfQjBfQ0ZfUEhBU0VfUkFNUF9JTklUXzBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMWZmODApID4+IDcpCi0jZGVmaW5lIFBIWV9CQl9UWF9QSEFTRV9SQU1QX0IwX0NGX1BIQVNFX1JBTVBfSU5JVF8wX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNykgJiAweDAwMDFmZjgwKQotI2RlZmluZSBQSFlfQkJfVFhfUEhBU0VfUkFNUF9CMF9DRl9QSEFTRV9SQU1QX0FMUEhBXzBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0JCX1RYX1BIQVNFX1JBTVBfQjBfQ0ZfUEhBU0VfUkFNUF9BTFBIQV8wX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9CQl9UWF9QSEFTRV9SQU1QX0IwX0NGX1BIQVNFX1JBTVBfQUxQSEFfMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMWZlMDAwMAotI2RlZmluZSBQSFlfQkJfVFhfUEhBU0VfUkFNUF9CMF9DRl9QSEFTRV9SQU1QX0FMUEhBXzBfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAxZmUwMDAwKSA+PiAxNykKLSNkZWZpbmUgUEhZX0JCX1RYX1BIQVNFX1JBTVBfQjBfQ0ZfUEhBU0VfUkFNUF9BTFBIQV8wX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE3KSAmIDB4MDFmZTAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfc3dpdGNoX3RhYmxlX2Nobl9iMCAqLwotI2RlZmluZSBQSFlfQkJfU1dJVENIX1RBQkxFX0NITl9CMF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk5NjAKLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DSE5fQjBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OTYwCi0jZGVmaW5lIFBIWV9CQl9TV0lUQ0hfVEFCTEVfQ0hOX0IwX1NXSVRDSF9UQUJMRV9JRExFXzBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQkJfU1dJVENIX1RBQkxFX0NITl9CMF9TV0lUQ0hfVEFCTEVfSURMRV8wX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DSE5fQjBfU1dJVENIX1RBQkxFX0lETEVfMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCi0jZGVmaW5lIFBIWV9CQl9TV0lUQ0hfVEFCTEVfQ0hOX0IwX1NXSVRDSF9UQUJMRV9JRExFXzBfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAzKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfU1dJVENIX1RBQkxFX0NITl9CMF9TV0lUQ0hfVEFCTEVfSURMRV8wX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwMykKLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DSE5fQjBfU1dJVENIX1RBQkxFX1RfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9CQl9TV0lUQ0hfVEFCTEVfQ0hOX0IwX1NXSVRDSF9UQUJMRV9UXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQkJfU1dJVENIX1RBQkxFX0NITl9CMF9TV0lUQ0hfVEFCTEVfVF8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGMKLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DSE5fQjBfU1dJVENIX1RBQkxFX1RfMF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMGMpID4+IDIpCi0jZGVmaW5lIFBIWV9CQl9TV0lUQ0hfVEFCTEVfQ0hOX0IwX1NXSVRDSF9UQUJMRV9UXzBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMikgJiAweDAwMDAwMDBjKQotI2RlZmluZSBQSFlfQkJfU1dJVENIX1RBQkxFX0NITl9CMF9TV0lUQ0hfVEFCTEVfUl8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DSE5fQjBfU1dJVENIX1RBQkxFX1JfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9CQl9TV0lUQ0hfVEFCTEVfQ0hOX0IwX1NXSVRDSF9UQUJMRV9SXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAotI2RlZmluZSBQSFlfQkJfU1dJVENIX1RBQkxFX0NITl9CMF9TV0lUQ0hfVEFCTEVfUl8wX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAzMCkgPj4gNCkKLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DSE5fQjBfU1dJVENIX1RBQkxFX1JfMF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA0KSAmIDB4MDAwMDAwMzApCi0jZGVmaW5lIFBIWV9CQl9TV0lUQ0hfVEFCTEVfQ0hOX0IwX1NXSVRDSF9UQUJMRV9SWDFfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQkJfU1dJVENIX1RBQkxFX0NITl9CMF9TV0lUQ0hfVEFCTEVfUlgxXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DSE5fQjBfU1dJVENIX1RBQkxFX1JYMV8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGMwCi0jZGVmaW5lIFBIWV9CQl9TV0lUQ0hfVEFCTEVfQ0hOX0IwX1NXSVRDSF9UQUJMRV9SWDFfMF9HRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMGMwKSA+PiA2KQotI2RlZmluZSBQSFlfQkJfU1dJVENIX1RBQkxFX0NITl9CMF9TV0lUQ0hfVEFCTEVfUlgxXzBfU0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDYpICYgMHgwMDAwMDBjMCkKLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DSE5fQjBfU1dJVENIX1RBQkxFX1JYMTJfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9CQl9TV0lUQ0hfVEFCTEVfQ0hOX0IwX1NXSVRDSF9UQUJMRV9SWDEyXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQkJfU1dJVENIX1RBQkxFX0NITl9CMF9TV0lUQ0hfVEFCTEVfUlgxMl8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DSE5fQjBfU1dJVENIX1RBQkxFX1JYMTJfMF9HRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAzMDApID4+IDgpCi0jZGVmaW5lIFBIWV9CQl9TV0lUQ0hfVEFCTEVfQ0hOX0IwX1NXSVRDSF9UQUJMRV9SWDEyXzBfU0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAwMzAwKQotI2RlZmluZSBQSFlfQkJfU1dJVENIX1RBQkxFX0NITl9CMF9TV0lUQ0hfVEFCTEVfQl8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DSE5fQjBfU1dJVENIX1RBQkxFX0JfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9CQl9TV0lUQ0hfVEFCTEVfQ0hOX0IwX1NXSVRDSF9UQUJMRV9CXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGMwMAotI2RlZmluZSBQSFlfQkJfU1dJVENIX1RBQkxFX0NITl9CMF9TV0lUQ0hfVEFCTEVfQl8wX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwYzAwKSA+PiAxMCkKLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DSE5fQjBfU1dJVENIX1RBQkxFX0JfMF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEwKSAmIDB4MDAwMDBjMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfc3dpdGNoX3RhYmxlX2NvbTEgKi8KLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DT00xX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OTY0Ci0jZGVmaW5lIFBIWV9CQl9TV0lUQ0hfVEFCTEVfQ09NMV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTk2NAotI2RlZmluZSBQSFlfQkJfU1dJVENIX1RBQkxFX0NPTTFfU1dJVENIX1RBQkxFX0NPTV9JRExFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DT00xX1NXSVRDSF9UQUJMRV9DT01fSURMRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9TV0lUQ0hfVEFCTEVfQ09NMV9TV0lUQ0hfVEFCTEVfQ09NX0lETEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwZgotI2RlZmluZSBQSFlfQkJfU1dJVENIX1RBQkxFX0NPTTFfU1dJVENIX1RBQkxFX0NPTV9JRExFX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DT00xX1NXSVRDSF9UQUJMRV9DT01fSURMRV9TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMGYpCi0jZGVmaW5lIFBIWV9CQl9TV0lUQ0hfVEFCTEVfQ09NMV9TV0lUQ0hfVEFCTEVfQ09NX1QxX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQkJfU1dJVENIX1RBQkxFX0NPTTFfU1dJVENIX1RBQkxFX0NPTV9UMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DT00xX1NXSVRDSF9UQUJMRV9DT01fVDFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGYwCi0jZGVmaW5lIFBIWV9CQl9TV0lUQ0hfVEFCTEVfQ09NMV9TV0lUQ0hfVEFCTEVfQ09NX1QxX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMGYwKSA+PiA0KQotI2RlZmluZSBQSFlfQkJfU1dJVENIX1RBQkxFX0NPTTFfU1dJVENIX1RBQkxFX0NPTV9UMV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDQpICYgMHgwMDAwMDBmMCkKLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DT00xX1NXSVRDSF9UQUJMRV9DT01fVDJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9CQl9TV0lUQ0hfVEFCTEVfQ09NMV9TV0lUQ0hfVEFCTEVfQ09NX1QyX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQkJfU1dJVENIX1RBQkxFX0NPTTFfU1dJVENIX1RBQkxFX0NPTV9UMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBmMDAKLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DT00xX1NXSVRDSF9UQUJMRV9DT01fVDJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDBmMDApID4+IDgpCi0jZGVmaW5lIFBIWV9CQl9TV0lUQ0hfVEFCTEVfQ09NMV9TV0lUQ0hfVEFCTEVfQ09NX1QyX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAwZjAwKQotI2RlZmluZSBQSFlfQkJfU1dJVENIX1RBQkxFX0NPTTFfU1dJVENIX1RBQkxFX0NPTV9CX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DT00xX1NXSVRDSF9UQUJMRV9DT01fQl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9CQl9TV0lUQ0hfVEFCTEVfQ09NMV9TV0lUQ0hfVEFCTEVfQ09NX0JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwZjAwMAotI2RlZmluZSBQSFlfQkJfU1dJVENIX1RBQkxFX0NPTTFfU1dJVENIX1RBQkxFX0NPTV9CX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDBmMDAwKSA+PiAxMikKLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DT00xX1NXSVRDSF9UQUJMRV9DT01fQl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEyKSAmIDB4MDAwMGYwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfY2NhX2N0cmxfMl9iMCAqLwotI2RlZmluZSBQSFlfQkJfQ0NBX0NUUkxfMl9CMF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk5NjgKLSNkZWZpbmUgUEhZX0JCX0NDQV9DVFJMXzJfQjBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OTY4Ci0jZGVmaW5lIFBIWV9CQl9DQ0FfQ1RSTF8yX0IwX01JTkNDQVBXUl9USFJfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQkJfQ0NBX0NUUkxfMl9CMF9NSU5DQ0FQV1JfVEhSXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0NDQV9DVFJMXzJfQjBfTUlOQ0NBUFdSX1RIUl8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMWZmCi0jZGVmaW5lIFBIWV9CQl9DQ0FfQ1RSTF8yX0IwX01JTkNDQVBXUl9USFJfMF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMWZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfQ0NBX0NUUkxfMl9CMF9NSU5DQ0FQV1JfVEhSXzBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDFmZikKLSNkZWZpbmUgUEhZX0JCX0NDQV9DVFJMXzJfQjBfRU5BQkxFX01JTkNDQVBXUl9USFJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9CQl9DQ0FfQ1RSTF8yX0IwX0VOQUJMRV9NSU5DQ0FQV1JfVEhSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQkJfQ0NBX0NUUkxfMl9CMF9FTkFCTEVfTUlOQ0NBUFdSX1RIUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKLSNkZWZpbmUgUEhZX0JCX0NDQV9DVFJMXzJfQjBfRU5BQkxFX01JTkNDQVBXUl9USFJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAyMDApID4+IDkpCi0jZGVmaW5lIFBIWV9CQl9DQ0FfQ1RSTF8yX0IwX0VOQUJMRV9NSU5DQ0FQV1JfVEhSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOSkgJiAweDAwMDAwMjAwKQotI2RlZmluZSBQSFlfQkJfQ0NBX0NUUkxfMl9CMF9ORl9HQUlOX0NPTVBfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0JCX0NDQV9DVFJMXzJfQjBfTkZfR0FJTl9DT01QXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9CQl9DQ0FfQ1RSTF8yX0IwX05GX0dBSU5fQ09NUF8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzZmMwMAotI2RlZmluZSBQSFlfQkJfQ0NBX0NUUkxfMl9CMF9ORl9HQUlOX0NPTVBfMF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDNmYzAwKSA+PiAxMCkKLSNkZWZpbmUgUEhZX0JCX0NDQV9DVFJMXzJfQjBfTkZfR0FJTl9DT01QXzBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEwKSAmIDB4MDAwM2ZjMDApCi0jZGVmaW5lIFBIWV9CQl9DQ0FfQ1RSTF8yX0IwX1RIUkVTSDYyX01PREVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQkJfQ0NBX0NUUkxfMl9CMF9USFJFU0g2Ml9NT0RFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUEhZX0JCX0NDQV9DVFJMXzJfQjBfVEhSRVNINjJfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCi0jZGVmaW5lIFBIWV9CQl9DQ0FfQ1RSTF8yX0IwX1RIUkVTSDYyX01PREVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwNDAwMDApID4+IDE4KQotI2RlZmluZSBQSFlfQkJfQ0NBX0NUUkxfMl9CMF9USFJFU0g2Ml9NT0RFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTgpICYgMHgwMDA0MDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9zd2l0Y2hfdGFibGVfY29tMiAqLwotI2RlZmluZSBQSFlfQkJfU1dJVENIX1RBQkxFX0NPTTJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk5NmMKLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DT00yX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OTZjCi0jZGVmaW5lIFBIWV9CQl9TV0lUQ0hfVEFCTEVfQ09NMl9TV0lUQ0hfVEFCTEVfQ09NX1JBMU5YQUwxX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQkJfU1dJVENIX1RBQkxFX0NPTTJfU1dJVENIX1RBQkxFX0NPTV9SQTFOWEFMMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DT00yX1NXSVRDSF9UQUJMRV9DT01fUkExTlhBTDFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBmCi0jZGVmaW5lIFBIWV9CQl9TV0lUQ0hfVEFCTEVfQ09NMl9TV0lUQ0hfVEFCTEVfQ09NX1JBMU5YQUwxX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDBmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfU1dJVENIX1RBQkxFX0NPTTJfU1dJVENIX1RBQkxFX0NPTV9SQTFOWEFMMV9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwZikKLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DT00yX1NXSVRDSF9UQUJMRV9DT01fUkEyTlhBTDFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9CQl9TV0lUQ0hfVEFCTEVfQ09NMl9TV0lUQ0hfVEFCTEVfQ09NX1JBMk5YQUwxX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQkJfU1dJVENIX1RBQkxFX0NPTTJfU1dJVENIX1RBQkxFX0NPTV9SQTJOWEFMMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZjAKLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DT00yX1NXSVRDSF9UQUJMRV9DT01fUkEyTlhBTDFfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwZjApID4+IDQpCi0jZGVmaW5lIFBIWV9CQl9TV0lUQ0hfVEFCTEVfQ09NMl9TV0lUQ0hfVEFCTEVfQ09NX1JBMk5YQUwxX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgNCkgJiAweDAwMDAwMGYwKQotI2RlZmluZSBQSFlfQkJfU1dJVENIX1RBQkxFX0NPTTJfU1dJVENIX1RBQkxFX0NPTV9SQTFYQUwxX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DT00yX1NXSVRDSF9UQUJMRV9DT01fUkExWEFMMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9TV0lUQ0hfVEFCTEVfQ09NMl9TV0lUQ0hfVEFCTEVfQ09NX1JBMVhBTDFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGYwMAotI2RlZmluZSBQSFlfQkJfU1dJVENIX1RBQkxFX0NPTTJfU1dJVENIX1RBQkxFX0NPTV9SQTFYQUwxX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMGYwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DT00yX1NXSVRDSF9UQUJMRV9DT01fUkExWEFMMV9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDBmMDApCi0jZGVmaW5lIFBIWV9CQl9TV0lUQ0hfVEFCTEVfQ09NMl9TV0lUQ0hfVEFCTEVfQ09NX1JBMlhBTDFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQkJfU1dJVENIX1RBQkxFX0NPTTJfU1dJVENIX1RBQkxFX0NPTV9SQTJYQUwxX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DT00yX1NXSVRDSF9UQUJMRV9DT01fUkEyWEFMMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBmMDAwCi0jZGVmaW5lIFBIWV9CQl9TV0lUQ0hfVEFCTEVfQ09NMl9TV0lUQ0hfVEFCTEVfQ09NX1JBMlhBTDFfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMGYwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQkJfU1dJVENIX1RBQkxFX0NPTTJfU1dJVENIX1RBQkxFX0NPTV9SQTJYQUwxX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgMTIpICYgMHgwMDAwZjAwMCkKLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DT00yX1NXSVRDSF9UQUJMRV9DT01fUkExTlhBTDJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9CQl9TV0lUQ0hfVEFCTEVfQ09NMl9TV0lUQ0hfVEFCTEVfQ09NX1JBMU5YQUwyX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQkJfU1dJVENIX1RBQkxFX0NPTTJfU1dJVENIX1RBQkxFX0NPTV9SQTFOWEFMMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwZjAwMDAKLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DT00yX1NXSVRDSF9UQUJMRV9DT01fUkExTlhBTDJfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgMHgwMDBmMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9CQl9TV0lUQ0hfVEFCTEVfQ09NMl9TV0lUQ0hfVEFCTEVfQ09NX1JBMU5YQUwyX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAwMGYwMDAwKQotI2RlZmluZSBQSFlfQkJfU1dJVENIX1RBQkxFX0NPTTJfU1dJVENIX1RBQkxFX0NPTV9SQTJOWEFMMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DT00yX1NXSVRDSF9UQUJMRV9DT01fUkEyTlhBTDJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9CQl9TV0lUQ0hfVEFCTEVfQ09NMl9TV0lUQ0hfVEFCTEVfQ09NX1JBMk5YQUwyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMGYwMDAwMAotI2RlZmluZSBQSFlfQkJfU1dJVENIX1RBQkxFX0NPTTJfU1dJVENIX1RBQkxFX0NPTV9SQTJOWEFMMl9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiAweDAwZjAwMDAwKSA+PiAyMCkKLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DT00yX1NXSVRDSF9UQUJMRV9DT01fUkEyTlhBTDJfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IDIwKSAmIDB4MDBmMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9TV0lUQ0hfVEFCTEVfQ09NMl9TV0lUQ0hfVEFCTEVfQ09NX1JBMVhBTDJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQkJfU1dJVENIX1RBQkxFX0NPTTJfU1dJVENIX1RBQkxFX0NPTV9SQTFYQUwyX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DT00yX1NXSVRDSF9UQUJMRV9DT01fUkExWEFMMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBmMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9TV0lUQ0hfVEFCTEVfQ09NMl9TV0lUQ0hfVEFCTEVfQ09NX1JBMVhBTDJfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MGYwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQkJfU1dJVENIX1RBQkxFX0NPTTJfU1dJVENIX1RBQkxFX0NPTV9SQTFYQUwyX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgMjQpICYgMHgwZjAwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DT00yX1NXSVRDSF9UQUJMRV9DT01fUkEyWEFMMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9TV0lUQ0hfVEFCTEVfQ09NMl9TV0lUQ0hfVEFCTEVfQ09NX1JBMlhBTDJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQkJfU1dJVENIX1RBQkxFX0NPTTJfU1dJVENIX1RBQkxFX0NPTV9SQTJYQUwyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZjAwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1NXSVRDSF9UQUJMRV9DT00yX1NXSVRDSF9UQUJMRV9DT01fUkEyWEFMMl9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHhmMDAwMDAwMCkgPj4gMjgpCi0jZGVmaW5lIFBIWV9CQl9TV0lUQ0hfVEFCTEVfQ09NMl9TV0lUQ0hfVEFCTEVfQ09NX1JBMlhBTDJfU0VUKHgpICAgICAgICAgICAgICAoKCh4KSA8PCAyOCkgJiAweGYwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3Jlc3RhcnQgKi8KLSNkZWZpbmUgUEhZX0JCX1JFU1RBUlRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OTcwCi0jZGVmaW5lIFBIWV9CQl9SRVNUQVJUX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTk3MAotI2RlZmluZSBQSFlfQkJfUkVTVEFSVF9FTkFCTEVfUkVTVEFSVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1JFU1RBUlRfRU5BQkxFX1JFU1RBUlRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9SRVNUQVJUX0VOQUJMRV9SRVNUQVJUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBQSFlfQkJfUkVTVEFSVF9FTkFCTEVfUkVTVEFSVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMSkgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1JFU1RBUlRfRU5BQkxFX1JFU1RBUlRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFBIWV9CQl9SRVNUQVJUX1JFU1RBUlRfTEdGSVJQV1JfREVMVEFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQkJfUkVTVEFSVF9SRVNUQVJUX0xHRklSUFdSX0RFTFRBX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0JCX1JFU1RBUlRfUkVTVEFSVF9MR0ZJUlBXUl9ERUxUQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNlCi0jZGVmaW5lIFBIWV9CQl9SRVNUQVJUX1JFU1RBUlRfTEdGSVJQV1JfREVMVEFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDNlKSA+PiAxKQotI2RlZmluZSBQSFlfQkJfUkVTVEFSVF9SRVNUQVJUX0xHRklSUFdSX0RFTFRBX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEpICYgMHgwMDAwMDAzZSkKLSNkZWZpbmUgUEhZX0JCX1JFU1RBUlRfRU5BQkxFX1BXUl9EUk9QX0VSUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9CQl9SRVNUQVJUX0VOQUJMRV9QV1JfRFJPUF9FUlJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQkJfUkVTVEFSVF9FTkFCTEVfUFdSX0RST1BfRVJSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgUEhZX0JCX1JFU1RBUlRfRU5BQkxFX1BXUl9EUk9QX0VSUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwNDApID4+IDYpCi0jZGVmaW5lIFBIWV9CQl9SRVNUQVJUX0VOQUJMRV9QV1JfRFJPUF9FUlJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNikgJiAweDAwMDAwMDQwKQotI2RlZmluZSBQSFlfQkJfUkVTVEFSVF9QV1JEUk9QX0xHRklSUFdSX0RFTFRBX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0JCX1JFU1RBUlRfUFdSRFJPUF9MR0ZJUlBXUl9ERUxUQV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9CQl9SRVNUQVJUX1BXUkRST1BfTEdGSVJQV1JfREVMVEFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGY4MAotI2RlZmluZSBQSFlfQkJfUkVTVEFSVF9QV1JEUk9QX0xHRklSUFdSX0RFTFRBX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMGY4MCkgPj4gNykKLSNkZWZpbmUgUEhZX0JCX1JFU1RBUlRfUFdSRFJPUF9MR0ZJUlBXUl9ERUxUQV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA3KSAmIDB4MDAwMDBmODApCi0jZGVmaW5lIFBIWV9CQl9SRVNUQVJUX09GRE1fQ0NLX1JTU0lfQklBU19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQkJfUkVTVEFSVF9PRkRNX0NDS19SU1NJX0JJQVNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0JCX1JFU1RBUlRfT0ZETV9DQ0tfUlNTSV9CSUFTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDNmMDAwCi0jZGVmaW5lIFBIWV9CQl9SRVNUQVJUX09GRE1fQ0NLX1JTU0lfQklBU19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwM2YwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQkJfUkVTVEFSVF9PRkRNX0NDS19SU1NJX0JJQVNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTIpICYgMHgwMDAzZjAwMCkKLSNkZWZpbmUgUEhZX0JCX1JFU1RBUlRfQU5UX0ZBU1RfRElWX0dDX0xJTUlUX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9CQl9SRVNUQVJUX0FOVF9GQVNUX0RJVl9HQ19MSU1JVF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQkJfUkVTVEFSVF9BTlRfRkFTVF9ESVZfR0NfTElNSVRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxYzAwMDAKLSNkZWZpbmUgUEhZX0JCX1JFU1RBUlRfQU5UX0ZBU1RfRElWX0dDX0xJTUlUX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDFjMDAwMCkgPj4gMTgpCi0jZGVmaW5lIFBIWV9CQl9SRVNUQVJUX0FOVF9GQVNUX0RJVl9HQ19MSU1JVF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOCkgJiAweDAwMWMwMDAwKQotI2RlZmluZSBQSFlfQkJfUkVTVEFSVF9FTkFCTEVfQU5UX0ZBU1RfRElWX00yRkxBR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0JCX1JFU1RBUlRfRU5BQkxFX0FOVF9GQVNUX0RJVl9NMkZMQUdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9CQl9SRVNUQVJUX0VOQUJMRV9BTlRfRkFTVF9ESVZfTTJGTEFHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAotI2RlZmluZSBQSFlfQkJfUkVTVEFSVF9FTkFCTEVfQU5UX0ZBU1RfRElWX00yRkxBR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMjAwMDAwKSA+PiAyMSkKLSNkZWZpbmUgUEhZX0JCX1JFU1RBUlRfRU5BQkxFX0FOVF9GQVNUX0RJVl9NMkZMQUdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIxKSAmIDB4MDAyMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9SRVNUQVJUX1dFQUtfUlNTSV9WT1RFX1RIUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQkJfUkVTVEFSVF9XRUFLX1JTU0lfVk9URV9USFJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0JCX1JFU1RBUlRfV0VBS19SU1NJX1ZPVEVfVEhSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFmYzAwMDAwCi0jZGVmaW5lIFBIWV9CQl9SRVNUQVJUX1dFQUtfUlNTSV9WT1RFX1RIUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MWZjMDAwMDApID4+IDIyKQotI2RlZmluZSBQSFlfQkJfUkVTVEFSVF9XRUFLX1JTU0lfVk9URV9USFJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjIpICYgMHgxZmMwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1JFU1RBUlRfRU5BQkxFX1BXUl9EUk9QX0VSUl9DQ0tfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9CQl9SRVNUQVJUX0VOQUJMRV9QV1JfRFJPUF9FUlJfQ0NLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQkJfUkVTVEFSVF9FTkFCTEVfUFdSX0RST1BfRVJSX0NDS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1JFU1RBUlRfRU5BQkxFX1BXUl9EUk9QX0VSUl9DQ0tfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgyMDAwMDAwMCkgPj4gMjkpCi0jZGVmaW5lIFBIWV9CQl9SRVNUQVJUX0VOQUJMRV9QV1JfRFJPUF9FUlJfQ0NLX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyOSkgJiAweDIwMDAwMDAwKQotI2RlZmluZSBQSFlfQkJfUkVTVEFSVF9ESVNBQkxFX0RDX1JFU1RBUlRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0JCX1JFU1RBUlRfRElTQUJMRV9EQ19SRVNUQVJUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9CQl9SRVNUQVJUX0RJU0FCTEVfRENfUkVTVEFSVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAotI2RlZmluZSBQSFlfQkJfUkVTVEFSVF9ESVNBQkxFX0RDX1JFU1RBUlRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDQwMDAwMDAwKSA+PiAzMCkKLSNkZWZpbmUgUEhZX0JCX1JFU1RBUlRfRElTQUJMRV9EQ19SRVNUQVJUX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMwKSAmIDB4NDAwMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9SRVNUQVJUX1JFU1RBUlRfTU9ERV9CVzQwX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfUkVTVEFSVF9SRVNUQVJUX01PREVfQlc0MF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX1JFU1RBUlRfUkVTVEFSVF9NT0RFX0JXNDBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9SRVNUQVJUX1JFU1RBUlRfTU9ERV9CVzQwX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ODAwMDAwMDApID4+IDMxKQotI2RlZmluZSBQSFlfQkJfUkVTVEFSVF9SRVNUQVJUX01PREVfQlc0MF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMzEpICYgMHg4MDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9zY3JhbWJsZXJfc2VlZCAqLwotI2RlZmluZSBQSFlfQkJfU0NSQU1CTEVSX1NFRURfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk5NzgKLSNkZWZpbmUgUEhZX0JCX1NDUkFNQkxFUl9TRUVEX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OTc4Ci0jZGVmaW5lIFBIWV9CQl9TQ1JBTUJMRVJfU0VFRF9GSVhFRF9TQ1JBTUJMRVJfU0VFRF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQkJfU0NSQU1CTEVSX1NFRURfRklYRURfU0NSQU1CTEVSX1NFRURfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1NDUkFNQkxFUl9TRUVEX0ZJWEVEX1NDUkFNQkxFUl9TRUVEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDdmCi0jZGVmaW5lIFBIWV9CQl9TQ1JBTUJMRVJfU0VFRF9GSVhFRF9TQ1JBTUJMRVJfU0VFRF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDdmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfU0NSQU1CTEVSX1NFRURfRklYRURfU0NSQU1CTEVSX1NFRURfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDA3ZikKLQotLyogbWFjcm9zIGZvciBCQl9yZmJ1c19yZXF1ZXN0ICovCi0jZGVmaW5lIFBIWV9CQl9SRkJVU19SRVFVRVNUX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTk3YwotI2RlZmluZSBQSFlfQkJfUkZCVVNfUkVRVUVTVF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk5N2MKLSNkZWZpbmUgUEhZX0JCX1JGQlVTX1JFUVVFU1RfUkZCVVNfUkVRVUVTVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9SRkJVU19SRVFVRVNUX1JGQlVTX1JFUVVFU1RfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfUkZCVVNfUkVRVUVTVF9SRkJVU19SRVFVRVNUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUEhZX0JCX1JGQlVTX1JFUVVFU1RfUkZCVVNfUkVRVUVTVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDEpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9SRkJVU19SRVFVRVNUX1JGQlVTX1JFUVVFU1RfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDAxKQotCi0vKiBtYWNyb3MgZm9yIEJCX3RpbWluZ19jb250cm9sXzExICovCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF8xMV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTlhMAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfMTFfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk5YTAKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzExX1NQVVJfREVMVEFfUEhBU0VfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF8xMV9TUFVSX0RFTFRBX1BIQVNFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfMTFfU1BVUl9ERUxUQV9QSEFTRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwZmZmZmYKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzExX1NQVVJfREVMVEFfUEhBU0VfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwZmZmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF8xMV9TUFVSX0RFTFRBX1BIQVNFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMGZmZmZmKQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfMTFfU1BVUl9GUkVRX1NEX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzExX1NQVVJfRlJFUV9TRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF8xMV9TUFVSX0ZSRVFfU0RfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzZmYwMDAwMAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfMTFfU1BVUl9GUkVRX1NEX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDNmZjAwMDAwKSA+PiAyMCkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzExX1NQVVJfRlJFUV9TRF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIwKSAmIDB4M2ZmMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF8xMV9VU0VfU1BVUl9GSUxURVJfSU5fQUdDX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfMTFfVVNFX1NQVVJfRklMVEVSX0lOX0FHQ19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzExX1VTRV9TUFVSX0ZJTFRFUl9JTl9BR0NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF8xMV9VU0VfU1BVUl9GSUxURVJfSU5fQUdDX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NDAwMDAwMDApID4+IDMwKQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfMTFfVVNFX1NQVVJfRklMVEVSX0lOX0FHQ19TRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPDwgMzApICYgMHg0MDAwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzExX1VTRV9TUFVSX0ZJTFRFUl9JTl9TRUxGQ09SX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF8xMV9VU0VfU1BVUl9GSUxURVJfSU5fU0VMRkNPUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVElNSU5HX0NPTlRST0xfMTFfVVNFX1NQVVJfRklMVEVSX0lOX1NFTEZDT1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1RJTUlOR19DT05UUk9MXzExX1VTRV9TUFVSX0ZJTFRFUl9JTl9TRUxGQ09SX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgMHg4MDAwMDAwMCkgPj4gMzEpCi0jZGVmaW5lIFBIWV9CQl9USU1JTkdfQ09OVFJPTF8xMV9VU0VfU1BVUl9GSUxURVJfSU5fU0VMRkNPUl9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCAzMSkgJiAweDgwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX211bHRpY2hhaW5fZW5hYmxlICovCi0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0VOQUJMRV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTlhNAotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9FTkFCTEVfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk5YTQKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fRU5BQkxFX1JYX0NIQUlOX01BU0tfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0VOQUJMRV9SWF9DSEFJTl9NQVNLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9FTkFCTEVfUlhfQ0hBSU5fTUFTS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fRU5BQkxFX1JYX0NIQUlOX01BU0tfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDcpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0VOQUJMRV9SWF9DSEFJTl9NQVNLX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDA3KQotCi0vKiBtYWNyb3MgZm9yIEJCX211bHRpY2hhaW5fY29udHJvbCAqLwotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9DT05UUk9MX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk5YTgKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fQ09OVFJPTF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OWE4Ci0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0NPTlRST0xfRk9SQ0VfQU5BTE9HX0dBSU5fRElGRl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9DT05UUk9MX0ZPUkNFX0FOQUxPR19HQUlOX0RJRkZfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fQ09OVFJPTF9GT1JDRV9BTkFMT0dfR0FJTl9ESUZGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0NPTlRST0xfRk9SQ0VfQU5BTE9HX0dBSU5fRElGRl9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAxKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9DT05UUk9MX0ZPUkNFX0FOQUxPR19HQUlOX0RJRkZfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwMSkKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fQ09OVFJPTF9GT1JDRURfR0FJTl9ESUZGXzAxX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0NPTlRST0xfRk9SQ0VEX0dBSU5fRElGRl8wMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9DT05UUk9MX0ZPUkNFRF9HQUlOX0RJRkZfMDFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmUKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fQ09OVFJPTF9GT1JDRURfR0FJTl9ESUZGXzAxX0dFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwZmUpID4+IDEpCi0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0NPTlRST0xfRk9SQ0VEX0dBSU5fRElGRl8wMV9TRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMSkgJiAweDAwMDAwMGZlKQotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9DT05UUk9MX1NZTkNfU1lOVEhPTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fQ09OVFJPTF9TWU5DX1NZTlRIT05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0NPTlRST0xfU1lOQ19TWU5USE9OX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9DT05UUk9MX1NZTkNfU1lOVEhPTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDEwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fQ09OVFJPTF9TWU5DX1NZTlRIT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDAxMDApCi0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0NPTlRST0xfVVNFX1BPU0VER0VfUkVGQ0xLX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9DT05UUk9MX1VTRV9QT1NFREdFX1JFRkNMS19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fQ09OVFJPTF9VU0VfUE9TRURHRV9SRUZDTEtfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCi0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0NPTlRST0xfVVNFX1BPU0VER0VfUkVGQ0xLX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMjAwKSA+PiA5KQotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9DT05UUk9MX1VTRV9QT1NFREdFX1JFRkNMS19TRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDkpICYgMHgwMDAwMDIwMCkKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fQ09OVFJPTF9DRl9TSE9SVF9TQVRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0NPTlRST0xfQ0ZfU0hPUlRfU0FUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9DT05UUk9MX0NGX1NIT1JUX1NBVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxZmZjMDAKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fQ09OVFJPTF9DRl9TSE9SVF9TQVRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDFmZmMwMCkgPj4gMTApCi0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0NPTlRST0xfQ0ZfU0hPUlRfU0FUX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMCkgJiAweDAwMWZmYzAwKQotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9DT05UUk9MX0ZPUkNFRF9HQUlOX0RJRkZfMDJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fQ09OVFJPTF9GT1JDRURfR0FJTl9ESUZGXzAyX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0NPTlRST0xfRk9SQ0VEX0dBSU5fRElGRl8wMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxZmMwMDAwMAotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9DT05UUk9MX0ZPUkNFRF9HQUlOX0RJRkZfMDJfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDFmYzAwMDAwKSA+PiAyMikKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fQ09OVFJPTF9GT1JDRURfR0FJTl9ESUZGXzAyX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIyKSAmIDB4MWZjMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0NPTlRST0xfRk9SQ0VfU0lHTUFfWkVST19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9DT05UUk9MX0ZPUkNFX1NJR01BX1pFUk9fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fQ09OVFJPTF9GT1JDRV9TSUdNQV9aRVJPX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0NPTlRST0xfRk9SQ0VfU0lHTUFfWkVST19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MjAwMDAwMDApID4+IDI5KQotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9DT05UUk9MX0ZPUkNFX1NJR01BX1pFUk9fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjkpICYgMHgyMDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9tdWx0aWNoYWluX2dhaW5fY3RybCAqLwotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9HQUlOX0NUUkxfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk5YWMKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fR0FJTl9DVFJMX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OWFjCi0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0dBSU5fQ1RSTF9RVUlDS0RST1BfTE9XX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9HQUlOX0NUUkxfUVVJQ0tEUk9QX0xPV19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fR0FJTl9DVFJMX1FVSUNLRFJPUF9MT1dfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0dBSU5fQ1RSTF9RVUlDS0RST1BfTE9XX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMGZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9HQUlOX0NUUkxfUVVJQ0tEUk9QX0xPV19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDBmZikKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fR0FJTl9DVFJMX0VOQUJMRV9DSEVDS19TVFJPTkdfQU5UX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0dBSU5fQ1RSTF9FTkFCTEVfQ0hFQ0tfU1RST05HX0FOVF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9HQUlOX0NUUkxfRU5BQkxFX0NIRUNLX1NUUk9OR19BTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fR0FJTl9DVFJMX0VOQUJMRV9DSEVDS19TVFJPTkdfQU5UX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAxMDApID4+IDgpCi0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0dBSU5fQ1RSTF9FTkFCTEVfQ0hFQ0tfU1RST05HX0FOVF9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAwMTAwKQotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9HQUlOX0NUUkxfQU5UX0ZBU1RfRElWX0JJQVNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fR0FJTl9DVFJMX0FOVF9GQVNUX0RJVl9CSUFTX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0dBSU5fQ1RSTF9BTlRfRkFTVF9ESVZfQklBU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwN2UwMAotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9HQUlOX0NUUkxfQU5UX0ZBU1RfRElWX0JJQVNfR0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwN2UwMCkgPj4gOSkKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fR0FJTl9DVFJMX0FOVF9GQVNUX0RJVl9CSUFTX1NFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA5KSAmIDB4MDAwMDdlMDApCi0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0dBSU5fQ1RSTF9DQVBfR0FJTl9SQVRJT19TTlJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9HQUlOX0NUUkxfQ0FQX0dBSU5fUkFUSU9fU05SX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fR0FJTl9DVFJMX0NBUF9HQUlOX1JBVElPX1NOUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMWY4MDAwCi0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0dBSU5fQ1RSTF9DQVBfR0FJTl9SQVRJT19TTlJfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAxZjgwMDApID4+IDE1KQotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9HQUlOX0NUUkxfQ0FQX0dBSU5fUkFUSU9fU05SX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTUpICYgMHgwMDFmODAwMCkKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fR0FJTl9DVFJMX0NBUF9HQUlOX1JBVElPX0VOQV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0dBSU5fQ1RSTF9DQVBfR0FJTl9SQVRJT19FTkFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9HQUlOX0NUUkxfQ0FQX0dBSU5fUkFUSU9fRU5BX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fR0FJTl9DVFJMX0NBUF9HQUlOX1JBVElPX0VOQV9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDIwMDAwMCkgPj4gMjEpCi0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0dBSU5fQ1RSTF9DQVBfR0FJTl9SQVRJT19FTkFfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMSkgJiAweDAwMjAwMDAwKQotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9HQUlOX0NUUkxfQ0FQX0dBSU5fUkFUSU9fTU9ERV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fR0FJTl9DVFJMX0NBUF9HQUlOX1JBVElPX01PREVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0dBSU5fQ1RSTF9DQVBfR0FJTl9SQVRJT19NT0RFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9HQUlOX0NUUkxfQ0FQX0dBSU5fUkFUSU9fTU9ERV9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwNDAwMDAwKSA+PiAyMikKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fR0FJTl9DVFJMX0NBUF9HQUlOX1JBVElPX01PREVfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IDIyKSAmIDB4MDA0MDAwMDApCi0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0dBSU5fQ1RSTF9FTkFCTEVfQU5UX1NXX1JYX1BST1RfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9HQUlOX0NUUkxfRU5BQkxFX0FOVF9TV19SWF9QUk9UX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fR0FJTl9DVFJMX0VOQUJMRV9BTlRfU1dfUlhfUFJPVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCi0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0dBSU5fQ1RSTF9FTkFCTEVfQU5UX1NXX1JYX1BST1RfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MDA4MDAwMDApID4+IDIzKQotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9HQUlOX0NUUkxfRU5BQkxFX0FOVF9TV19SWF9QUk9UX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgMjMpICYgMHgwMDgwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fR0FJTl9DVFJMX0VOQUJMRV9BTlRfRElWX0xOQURJVl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0dBSU5fQ1RSTF9FTkFCTEVfQU5UX0RJVl9MTkFESVZfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9HQUlOX0NUUkxfRU5BQkxFX0FOVF9ESVZfTE5BRElWX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fR0FJTl9DVFJMX0VOQUJMRV9BTlRfRElWX0xOQURJVl9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgwMTAwMDAwMCkgPj4gMjQpCi0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0dBSU5fQ1RSTF9FTkFCTEVfQU5UX0RJVl9MTkFESVZfU0VUKHgpICAgICAgICAgICAgICAoKCh4KSA8PCAyNCkgJiAweDAxMDAwMDAwKQotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9HQUlOX0NUUkxfQU5UX0RJVl9BTFRfTE5BQ09ORl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fR0FJTl9DVFJMX0FOVF9ESVZfQUxUX0xOQUNPTkZfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0dBSU5fQ1RSTF9BTlRfRElWX0FMVF9MTkFDT05GX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNjAwMDAwMAotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9HQUlOX0NUUkxfQU5UX0RJVl9BTFRfTE5BQ09ORl9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDA2MDAwMDAwKSA+PiAyNSkKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fR0FJTl9DVFJMX0FOVF9ESVZfQUxUX0xOQUNPTkZfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IDI1KSAmIDB4MDYwMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0dBSU5fQ1RSTF9BTlRfRElWX01BSU5fTE5BQ09ORl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9HQUlOX0NUUkxfQU5UX0RJVl9NQUlOX0xOQUNPTkZfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fR0FJTl9DVFJMX0FOVF9ESVZfTUFJTl9MTkFDT05GX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0dBSU5fQ1RSTF9BTlRfRElWX01BSU5fTE5BQ09ORl9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MTgwMDAwMDApID4+IDI3KQotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9HQUlOX0NUUkxfQU5UX0RJVl9NQUlOX0xOQUNPTkZfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgMjcpICYgMHgxODAwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fR0FJTl9DVFJMX0FOVF9ESVZfQUxUX0dBSU5UQl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0dBSU5fQ1RSTF9BTlRfRElWX0FMVF9HQUlOVEJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9HQUlOX0NUUkxfQU5UX0RJVl9BTFRfR0FJTlRCX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fR0FJTl9DVFJMX0FOVF9ESVZfQUxUX0dBSU5UQl9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgyMDAwMDAwMCkgPj4gMjkpCi0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0dBSU5fQ1RSTF9BTlRfRElWX0FMVF9HQUlOVEJfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyOSkgJiAweDIwMDAwMDAwKQotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9HQUlOX0NUUkxfQU5UX0RJVl9NQUlOX0dBSU5UQl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fR0FJTl9DVFJMX0FOVF9ESVZfTUFJTl9HQUlOVEJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9CQl9NVUxUSUNIQUlOX0dBSU5fQ1RSTF9BTlRfRElWX01BSU5fR0FJTlRCX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAotI2RlZmluZSBQSFlfQkJfTVVMVElDSEFJTl9HQUlOX0NUUkxfQU5UX0RJVl9NQUlOX0dBSU5UQl9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDQwMDAwMDAwKSA+PiAzMCkKLSNkZWZpbmUgUEhZX0JCX01VTFRJQ0hBSU5fR0FJTl9DVFJMX0FOVF9ESVZfTUFJTl9HQUlOVEJfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IDMwKSAmIDB4NDAwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfYWRjX2dhaW5fZGNfY29ycl9iMCAqLwotI2RlZmluZSBQSFlfQkJfQURDX0dBSU5fRENfQ09SUl9CMF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk5YjQKLSNkZWZpbmUgUEhZX0JCX0FEQ19HQUlOX0RDX0NPUlJfQjBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OWI0Ci0jZGVmaW5lIFBIWV9CQl9BRENfR0FJTl9EQ19DT1JSX0IwX0FEQ19HQUlOX0NPUlJfUV9DT0VGRl8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQkJfQURDX0dBSU5fRENfQ09SUl9CMF9BRENfR0FJTl9DT1JSX1FfQ09FRkZfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0FEQ19HQUlOX0RDX0NPUlJfQjBfQURDX0dBSU5fQ09SUl9RX0NPRUZGXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNmCi0jZGVmaW5lIFBIWV9CQl9BRENfR0FJTl9EQ19DT1JSX0IwX0FEQ19HQUlOX0NPUlJfUV9DT0VGRl8wX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDNmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfQURDX0dBSU5fRENfQ09SUl9CMF9BRENfR0FJTl9DT1JSX1FfQ09FRkZfMF9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAzZikKLSNkZWZpbmUgUEhZX0JCX0FEQ19HQUlOX0RDX0NPUlJfQjBfQURDX0dBSU5fQ09SUl9JX0NPRUZGXzBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9CQl9BRENfR0FJTl9EQ19DT1JSX0IwX0FEQ19HQUlOX0NPUlJfSV9DT0VGRl8wX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQkJfQURDX0dBSU5fRENfQ09SUl9CMF9BRENfR0FJTl9DT1JSX0lfQ09FRkZfMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBmYzAKLSNkZWZpbmUgUEhZX0JCX0FEQ19HQUlOX0RDX0NPUlJfQjBfQURDX0dBSU5fQ09SUl9JX0NPRUZGXzBfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDBmYzApID4+IDYpCi0jZGVmaW5lIFBIWV9CQl9BRENfR0FJTl9EQ19DT1JSX0IwX0FEQ19HQUlOX0NPUlJfSV9DT0VGRl8wX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgNikgJiAweDAwMDAwZmMwKQotI2RlZmluZSBQSFlfQkJfQURDX0dBSU5fRENfQ09SUl9CMF9BRENfRENfQ09SUl9RX0NPRUZGXzBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0JCX0FEQ19HQUlOX0RDX0NPUlJfQjBfQURDX0RDX0NPUlJfUV9DT0VGRl8wX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9CQl9BRENfR0FJTl9EQ19DT1JSX0IwX0FEQ19EQ19DT1JSX1FfQ09FRkZfMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDFmZjAwMAotI2RlZmluZSBQSFlfQkJfQURDX0dBSU5fRENfQ09SUl9CMF9BRENfRENfQ09SUl9RX0NPRUZGXzBfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMWZmMDAwKSA+PiAxMikKLSNkZWZpbmUgUEhZX0JCX0FEQ19HQUlOX0RDX0NPUlJfQjBfQURDX0RDX0NPUlJfUV9DT0VGRl8wX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IDEyKSAmIDB4MDAxZmYwMDApCi0jZGVmaW5lIFBIWV9CQl9BRENfR0FJTl9EQ19DT1JSX0IwX0FEQ19EQ19DT1JSX0lfQ09FRkZfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQkJfQURDX0dBSU5fRENfQ09SUl9CMF9BRENfRENfQ09SUl9JX0NPRUZGXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0JCX0FEQ19HQUlOX0RDX0NPUlJfQjBfQURDX0RDX0NPUlJfSV9DT0VGRl8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNmZTAwMDAwCi0jZGVmaW5lIFBIWV9CQl9BRENfR0FJTl9EQ19DT1JSX0IwX0FEQ19EQ19DT1JSX0lfQ09FRkZfMF9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4M2ZlMDAwMDApID4+IDIxKQotI2RlZmluZSBQSFlfQkJfQURDX0dBSU5fRENfQ09SUl9CMF9BRENfRENfQ09SUl9JX0NPRUZGXzBfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgMjEpICYgMHgzZmUwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX0FEQ19HQUlOX0RDX0NPUlJfQjBfQURDX0dBSU5fQ09SUl9FTkFCTEVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9CQl9BRENfR0FJTl9EQ19DT1JSX0IwX0FEQ19HQUlOX0NPUlJfRU5BQkxFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQkJfQURDX0dBSU5fRENfQ09SUl9CMF9BRENfR0FJTl9DT1JSX0VOQUJMRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX0FEQ19HQUlOX0RDX0NPUlJfQjBfQURDX0dBSU5fQ09SUl9FTkFCTEVfR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHg0MDAwMDAwMCkgPj4gMzApCi0jZGVmaW5lIFBIWV9CQl9BRENfR0FJTl9EQ19DT1JSX0IwX0FEQ19HQUlOX0NPUlJfRU5BQkxFX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMCkgJiAweDQwMDAwMDAwKQotI2RlZmluZSBQSFlfQkJfQURDX0dBSU5fRENfQ09SUl9CMF9BRENfRENfQ09SUl9FTkFCTEVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX0FEQ19HQUlOX0RDX0NPUlJfQjBfQURDX0RDX0NPUlJfRU5BQkxFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9BRENfR0FJTl9EQ19DT1JSX0IwX0FEQ19EQ19DT1JSX0VOQUJMRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBQSFlfQkJfQURDX0dBSU5fRENfQ09SUl9CMF9BRENfRENfQ09SUl9FTkFCTEVfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDgwMDAwMDAwKSA+PiAzMSkKLSNkZWZpbmUgUEhZX0JCX0FEQ19HQUlOX0RDX0NPUlJfQjBfQURDX0RDX0NPUlJfRU5BQkxFX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMxKSAmIDB4ODAwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfZXh0X2NoYW5fcHdyX3Rocl8xICovCi0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9QV1JfVEhSXzFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTliOAotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fUFdSX1RIUl8xX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk5YjgKLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX1BXUl9USFJfMV9USFJFU0g2Ml9FWFRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9QV1JfVEhSXzFfVEhSRVNINjJfRVhUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fUFdSX1RIUl8xX1RIUkVTSDYyX0VYVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX1BXUl9USFJfMV9USFJFU0g2Ml9FWFRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9QV1JfVEhSXzFfVEhSRVNINjJfRVhUX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMGZmKQotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fUFdSX1RIUl8xX0FOVF9ESVZfQUxUX0FOVF9NSU5HQUlOSURYX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX1BXUl9USFJfMV9BTlRfRElWX0FMVF9BTlRfTUlOR0FJTklEWF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9QV1JfVEhSXzFfQU5UX0RJVl9BTFRfQU5UX01JTkdBSU5JRFhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fUFdSX1RIUl8xX0FOVF9ESVZfQUxUX0FOVF9NSU5HQUlOSURYX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgMHgwMDAwZmYwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX1BXUl9USFJfMV9BTlRfRElWX0FMVF9BTlRfTUlOR0FJTklEWF9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMGZmMDApCi0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9QV1JfVEhSXzFfQU5UX0RJVl9BTFRfQU5UX0RFTFRBR0FJTklEWF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fUFdSX1RIUl8xX0FOVF9ESVZfQUxUX0FOVF9ERUxUQUdBSU5JRFhfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX1BXUl9USFJfMV9BTlRfRElWX0FMVF9BTlRfREVMVEFHQUlOSURYX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMWYwMDAwCi0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9QV1JfVEhSXzFfQU5UX0RJVl9BTFRfQU5UX0RFTFRBR0FJTklEWF9HRVQoeCkgICAgICAgICAoKCh4KSAmIDB4MDAxZjAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fUFdSX1RIUl8xX0FOVF9ESVZfQUxUX0FOVF9ERUxUQUdBSU5JRFhfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMDFmMDAwMCkKLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX1BXUl9USFJfMV9BTlRfRElWX0FMVF9BTlRfREVMVEFORl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9QV1JfVEhSXzFfQU5UX0RJVl9BTFRfQU5UX0RFTFRBTkZfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fUFdSX1RIUl8xX0FOVF9ESVZfQUxUX0FOVF9ERUxUQU5GX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDdlMDAwMDAKLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX1BXUl9USFJfMV9BTlRfRElWX0FMVF9BTlRfREVMVEFORl9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgwN2UwMDAwMCkgPj4gMjEpCi0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9QV1JfVEhSXzFfQU5UX0RJVl9BTFRfQU5UX0RFTFRBTkZfU0VUKHgpICAgICAgICAgICAgICAoKCh4KSA8PCAyMSkgJiAweDA3ZTAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX2V4dF9jaGFuX3B3cl90aHJfMl9iMCAqLwotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fUFdSX1RIUl8yX0IwX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk5YmMKLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX1BXUl9USFJfMl9CMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OWJjCi0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9QV1JfVEhSXzJfQjBfQ0ZfTUFYQ0NBUFdSX0VYVF8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fUFdSX1RIUl8yX0IwX0NGX01BWENDQVBXUl9FWFRfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX1BXUl9USFJfMl9CMF9DRl9NQVhDQ0FQV1JfRVhUXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMWZmCi0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9QV1JfVEhSXzJfQjBfQ0ZfTUFYQ0NBUFdSX0VYVF8wX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMWZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fUFdSX1RIUl8yX0IwX0NGX01BWENDQVBXUl9FWFRfMF9TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDFmZikKLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX1BXUl9USFJfMl9CMF9DWUNQV1JfVEhSMV9FWFRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9QV1JfVEhSXzJfQjBfQ1lDUFdSX1RIUjFfRVhUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fUFdSX1RIUl8yX0IwX0NZQ1BXUl9USFIxX0VYVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGZlMDAKLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX1BXUl9USFJfMl9CMF9DWUNQV1JfVEhSMV9FWFRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMGZlMDApID4+IDkpCi0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9QV1JfVEhSXzJfQjBfQ1lDUFdSX1RIUjFfRVhUX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOSkgJiAweDAwMDBmZTAwKQotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fUFdSX1RIUl8yX0IwX01JTkNDQVBXUl9FWFRfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX1BXUl9USFJfMl9CMF9NSU5DQ0FQV1JfRVhUXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9QV1JfVEhSXzJfQjBfTUlOQ0NBUFdSX0VYVF8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMWZmMDAwMAotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fUFdSX1RIUl8yX0IwX01JTkNDQVBXUl9FWFRfMF9HRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAxZmYwMDAwKSA+PiAxNikKLQotLyogbWFjcm9zIGZvciBCQl9leHRfY2hhbl9zY29ycl90aHIgKi8KLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX1NDT1JSX1RIUl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OWMwCi0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9TQ09SUl9USFJfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTljMAotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fU0NPUlJfVEhSX00xX1RIUkVTX0VYVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX1NDT1JSX1RIUl9NMV9USFJFU19FWFRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9TQ09SUl9USFJfTTFfVEhSRVNfRVhUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3ZgotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fU0NPUlJfVEhSX00xX1RIUkVTX0VYVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDA3ZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX1NDT1JSX1RIUl9NMV9USFJFU19FWFRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwN2YpCi0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9TQ09SUl9USFJfTTJfVEhSRVNfRVhUX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fU0NPUlJfVEhSX00yX1RIUkVTX0VYVF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX1NDT1JSX1RIUl9NMl9USFJFU19FWFRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzZjgwCi0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9TQ09SUl9USFJfTTJfVEhSRVNfRVhUX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAzZjgwKSA+PiA3KQotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fU0NPUlJfVEhSX00yX1RIUkVTX0VYVF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDcpICYgMHgwMDAwM2Y4MCkKLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX1NDT1JSX1RIUl9NMV9USFJFU19MT1dfRVhUX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9TQ09SUl9USFJfTTFfVEhSRVNfTE9XX0VYVF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fU0NPUlJfVEhSX00xX1RIUkVTX0xPV19FWFRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxZmMwMDAKLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX1NDT1JSX1RIUl9NMV9USFJFU19MT1dfRVhUX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDFmYzAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9TQ09SUl9USFJfTTFfVEhSRVNfTE9XX0VYVF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNCkgJiAweDAwMWZjMDAwKQotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fU0NPUlJfVEhSX00yX1RIUkVTX0xPV19FWFRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX1NDT1JSX1RIUl9NMl9USFJFU19MT1dfRVhUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9TQ09SUl9USFJfTTJfVEhSRVNfTE9XX0VYVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwZmUwMDAwMAotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fU0NPUlJfVEhSX00yX1RIUkVTX0xPV19FWFRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDBmZTAwMDAwKSA+PiAyMSkKLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX1NDT1JSX1RIUl9NMl9USFJFU19MT1dfRVhUX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIxKSAmIDB4MGZlMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9TQ09SUl9USFJfU1BVUl9TVUJDSEFOTkVMX1NEX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fU0NPUlJfVEhSX1NQVVJfU1VCQ0hBTk5FTF9TRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX1NDT1JSX1RIUl9TUFVSX1NVQkNIQU5ORUxfU0RfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9TQ09SUl9USFJfU1BVUl9TVUJDSEFOTkVMX1NEX0dFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MTAwMDAwMDApID4+IDI4KQotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fU0NPUlJfVEhSX1NQVVJfU1VCQ0hBTk5FTF9TRF9TRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjgpICYgMHgxMDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9leHRfY2hhbl9kZXRlY3Rfd2luICovCi0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9ERVRFQ1RfV0lOX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTljNAotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fREVURUNUX1dJTl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk5YzQKLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX0RFVEVDVF9XSU5fREVUX0RJRkZfV0lOX1dFQUtfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9ERVRFQ1RfV0lOX0RFVF9ESUZGX1dJTl9XRUFLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fREVURUNUX1dJTl9ERVRfRElGRl9XSU5fV0VBS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGYKLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX0RFVEVDVF9XSU5fREVUX0RJRkZfV0lOX1dFQUtfR0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMGYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9ERVRFQ1RfV0lOX0RFVF9ESUZGX1dJTl9XRUFLX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDBmKQotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fREVURUNUX1dJTl9ERVRfRElGRl9XSU5fV0VBS19MT1dfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX0RFVEVDVF9XSU5fREVUX0RJRkZfV0lOX1dFQUtfTE9XX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9ERVRFQ1RfV0lOX0RFVF9ESUZGX1dJTl9XRUFLX0xPV19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmMAotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fREVURUNUX1dJTl9ERVRfRElGRl9XSU5fV0VBS19MT1dfR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDBmMCkgPj4gNCkKLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX0RFVEVDVF9XSU5fREVUX0RJRkZfV0lOX1dFQUtfTE9XX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCA0KSAmIDB4MDAwMDAwZjApCi0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9ERVRFQ1RfV0lOX0RFVF9ESUZGX1dJTl9XRUFLX0NDS19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fREVURUNUX1dJTl9ERVRfRElGRl9XSU5fV0VBS19DQ0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX0RFVEVDVF9XSU5fREVUX0RJRkZfV0lOX1dFQUtfQ0NLX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxZjAwCi0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9ERVRFQ1RfV0lOX0RFVF9ESUZGX1dJTl9XRUFLX0NDS19HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAxZjAwKSA+PiA4KQotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fREVURUNUX1dJTl9ERVRfRElGRl9XSU5fV0VBS19DQ0tfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwMWYwMCkKLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX0RFVEVDVF9XSU5fREVUXzIwSF9DT1VOVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9ERVRFQ1RfV0lOX0RFVF8yMEhfQ09VTlRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fREVURUNUX1dJTl9ERVRfMjBIX0NPVU5UX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGUwMDAKLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX0RFVEVDVF9XSU5fREVUXzIwSF9DT1VOVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwZTAwMCkgPj4gMTMpCi0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9ERVRFQ1RfV0lOX0RFVF8yMEhfQ09VTlRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMykgJiAweDAwMDBlMDAwKQotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fREVURUNUX1dJTl9ERVRfRVhUX0JMS19DT1VOVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX0RFVEVDVF9XSU5fREVUX0VYVF9CTEtfQ09VTlRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9ERVRFQ1RfV0lOX0RFVF9FWFRfQkxLX0NPVU5UX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA3MDAwMAotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fREVURUNUX1dJTl9ERVRfRVhUX0JMS19DT1VOVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDcwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX0RFVEVDVF9XSU5fREVUX0VYVF9CTEtfQ09VTlRfU0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDAwNzAwMDApCi0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9ERVRFQ1RfV0lOX1dFQUtfU0lHX1RIUl9DQ0tfRVhUX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fREVURUNUX1dJTl9XRUFLX1NJR19USFJfQ0NLX0VYVF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX0RFVEVDVF9XSU5fV0VBS19TSUdfVEhSX0NDS19FWFRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxZjgwMDAwCi0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9ERVRFQ1RfV0lOX1dFQUtfU0lHX1RIUl9DQ0tfRVhUX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDFmODAwMDApID4+IDE5KQotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fREVURUNUX1dJTl9XRUFLX1NJR19USFJfQ0NLX0VYVF9TRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTkpICYgMHgwMWY4MDAwMCkKLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX0RFVEVDVF9XSU5fREVUX0RJRkZfV0lOX1RIUkVTSF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9ERVRFQ1RfV0lOX0RFVF9ESUZGX1dJTl9USFJFU0hfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQkJfRVhUX0NIQU5fREVURUNUX1dJTl9ERVRfRElGRl9XSU5fVEhSRVNIX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWUwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX0VYVF9DSEFOX0RFVEVDVF9XSU5fREVUX0RJRkZfV0lOX1RIUkVTSF9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxZTAwMDAwMCkgPj4gMjUpCi0jZGVmaW5lIFBIWV9CQl9FWFRfQ0hBTl9ERVRFQ1RfV0lOX0RFVF9ESUZGX1dJTl9USFJFU0hfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNSkgJiAweDFlMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3B3cl90aHJfMjBfNDBfZGV0ICovCi0jZGVmaW5lIFBIWV9CQl9QV1JfVEhSXzIwXzQwX0RFVF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTljOAotI2RlZmluZSBQSFlfQkJfUFdSX1RIUl8yMF80MF9ERVRfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk5YzgKLSNkZWZpbmUgUEhZX0JCX1BXUl9USFJfMjBfNDBfREVUX1BXUkRJRkY0MF9USFJTVFJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9CQl9QV1JfVEhSXzIwXzQwX0RFVF9QV1JESUZGNDBfVEhSU1RSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfUFdSX1RIUl8yMF80MF9ERVRfUFdSRElGRjQwX1RIUlNUUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMWYKLSNkZWZpbmUgUEhZX0JCX1BXUl9USFJfMjBfNDBfREVUX1BXUkRJRkY0MF9USFJTVFJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMWYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9QV1JfVEhSXzIwXzQwX0RFVF9QV1JESUZGNDBfVEhSU1RSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDFmKQotI2RlZmluZSBQSFlfQkJfUFdSX1RIUl8yMF80MF9ERVRfQkxPQ0tFUjQwX01BWF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0JCX1BXUl9USFJfMjBfNDBfREVUX0JMT0NLRVI0MF9NQVhfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9CQl9QV1JfVEhSXzIwXzQwX0RFVF9CTE9DS0VSNDBfTUFYX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDdlMAotI2RlZmluZSBQSFlfQkJfUFdSX1RIUl8yMF80MF9ERVRfQkxPQ0tFUjQwX01BWF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDdlMCkgPj4gNSkKLSNkZWZpbmUgUEhZX0JCX1BXUl9USFJfMjBfNDBfREVUX0JMT0NLRVI0MF9NQVhfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA1KSAmIDB4MDAwMDA3ZTApCi0jZGVmaW5lIFBIWV9CQl9QV1JfVEhSXzIwXzQwX0RFVF9ERVQ0MF9QV1JTVEVQX01BWF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQkJfUFdSX1RIUl8yMF80MF9ERVRfREVUNDBfUFdSU1RFUF9NQVhfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0JCX1BXUl9USFJfMjBfNDBfREVUX0RFVDQwX1BXUlNURVBfTUFYX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBmODAwCi0jZGVmaW5lIFBIWV9CQl9QV1JfVEhSXzIwXzQwX0RFVF9ERVQ0MF9QV1JTVEVQX01BWF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMGY4MDApID4+IDExKQotI2RlZmluZSBQSFlfQkJfUFdSX1RIUl8yMF80MF9ERVRfREVUNDBfUFdSU1RFUF9NQVhfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTEpICYgMHgwMDAwZjgwMCkKLSNkZWZpbmUgUEhZX0JCX1BXUl9USFJfMjBfNDBfREVUX0RFVDQwX1RIUl9TTlJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9CQl9QV1JfVEhSXzIwXzQwX0RFVF9ERVQ0MF9USFJfU05SX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQkJfUFdSX1RIUl8yMF80MF9ERVRfREVUNDBfVEhSX1NOUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBmZjAwMDAKLSNkZWZpbmUgUEhZX0JCX1BXUl9USFJfMjBfNDBfREVUX0RFVDQwX1RIUl9TTlJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMGZmMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9CQl9QV1JfVEhSXzIwXzQwX0RFVF9ERVQ0MF9USFJfU05SX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAwZmYwMDAwKQotI2RlZmluZSBQSFlfQkJfUFdSX1RIUl8yMF80MF9ERVRfREVUNDBfUFJJX0JJQVNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0JCX1BXUl9USFJfMjBfNDBfREVUX0RFVDQwX1BSSV9CSUFTX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9CQl9QV1JfVEhSXzIwXzQwX0RFVF9ERVQ0MF9QUklfQklBU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxZjAwMDAwMAotI2RlZmluZSBQSFlfQkJfUFdSX1RIUl8yMF80MF9ERVRfREVUNDBfUFJJX0JJQVNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDFmMDAwMDAwKSA+PiAyNCkKLSNkZWZpbmUgUEhZX0JCX1BXUl9USFJfMjBfNDBfREVUX0RFVDQwX1BSSV9CSUFTX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI0KSAmIDB4MWYwMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9QV1JfVEhSXzIwXzQwX0RFVF9QV1JTVEVQNDBfRU5BX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQkJfUFdSX1RIUl8yMF80MF9ERVRfUFdSU1RFUDQwX0VOQV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0JCX1BXUl9USFJfMjBfNDBfREVUX1BXUlNURVA0MF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9QV1JfVEhSXzIwXzQwX0RFVF9QV1JTVEVQNDBfRU5BX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MjAwMDAwMDApID4+IDI5KQotI2RlZmluZSBQSFlfQkJfUFdSX1RIUl8yMF80MF9ERVRfUFdSU1RFUDQwX0VOQV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjkpICYgMHgyMDAwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1BXUl9USFJfMjBfNDBfREVUX0xPV1NOUjQwX0VOQV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9CQl9QV1JfVEhSXzIwXzQwX0RFVF9MT1dTTlI0MF9FTkFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQkJfUFdSX1RIUl8yMF80MF9ERVRfTE9XU05SNDBfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1BXUl9USFJfMjBfNDBfREVUX0xPV1NOUjQwX0VOQV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg0MDAwMDAwMCkgPj4gMzApCi0jZGVmaW5lIFBIWV9CQl9QV1JfVEhSXzIwXzQwX0RFVF9MT1dTTlI0MF9FTkFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMCkgJiAweDQwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3Nob3J0X2dpX2RlbHRhX3Nsb3BlICovCi0jZGVmaW5lIFBIWV9CQl9TSE9SVF9HSV9ERUxUQV9TTE9QRV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTlkMAotI2RlZmluZSBQSFlfQkJfU0hPUlRfR0lfREVMVEFfU0xPUEVfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk5ZDAKLSNkZWZpbmUgUEhZX0JCX1NIT1JUX0dJX0RFTFRBX1NMT1BFX0RFTFRBX1NMT1BFX0NPRUZfRVhQX1NIT1JUX0dJX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9CQl9TSE9SVF9HSV9ERUxUQV9TTE9QRV9ERUxUQV9TTE9QRV9DT0VGX0VYUF9TSE9SVF9HSV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfU0hPUlRfR0lfREVMVEFfU0xPUEVfREVMVEFfU0xPUEVfQ09FRl9FWFBfU0hPUlRfR0lfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGYKLSNkZWZpbmUgUEhZX0JCX1NIT1JUX0dJX0RFTFRBX1NMT1BFX0RFTFRBX1NMT1BFX0NPRUZfRVhQX1NIT1JUX0dJX0dFVCh4KSAgICAgICAoKCh4KSAmIDB4MDAwMDAwMGYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9TSE9SVF9HSV9ERUxUQV9TTE9QRV9ERUxUQV9TTE9QRV9DT0VGX0VYUF9TSE9SVF9HSV9TRVQoeCkgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDBmKQotI2RlZmluZSBQSFlfQkJfU0hPUlRfR0lfREVMVEFfU0xPUEVfREVMVEFfU0xPUEVfQ09FRl9NQU5fU0hPUlRfR0lfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUEhZX0JCX1NIT1JUX0dJX0RFTFRBX1NMT1BFX0RFTFRBX1NMT1BFX0NPRUZfTUFOX1NIT1JUX0dJX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9CQl9TSE9SVF9HSV9ERUxUQV9TTE9QRV9ERUxUQV9TTE9QRV9DT0VGX01BTl9TSE9SVF9HSV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA3ZmZmMAotI2RlZmluZSBQSFlfQkJfU0hPUlRfR0lfREVMVEFfU0xPUEVfREVMVEFfU0xPUEVfQ09FRl9NQU5fU0hPUlRfR0lfR0VUKHgpICAgICAgICgoKHgpICYgMHgwMDA3ZmZmMCkgPj4gNCkKLSNkZWZpbmUgUEhZX0JCX1NIT1JUX0dJX0RFTFRBX1NMT1BFX0RFTFRBX1NMT1BFX0NPRUZfTUFOX1NIT1JUX0dJX1NFVCh4KSAgICAgICAoKCh4KSA8PCA0KSAmIDB4MDAwN2ZmZjApCi0KLS8qIG1hY3JvcyBmb3IgQkJfY2hhbmluZm9fY3RybCAqLwotI2RlZmluZSBQSFlfQkJfQ0hBTklORk9fQ1RSTF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk5ZGMKLSNkZWZpbmUgUEhZX0JCX0NIQU5JTkZPX0NUUkxfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OWRjCi0jZGVmaW5lIFBIWV9CQl9DSEFOSU5GT19DVFJMX0NBUFRVUkVfQ0hBTl9JTkZPX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfQ0hBTklORk9fQ1RSTF9DQVBUVVJFX0NIQU5fSU5GT19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0NIQU5JTkZPX0NUUkxfQ0FQVFVSRV9DSEFOX0lORk9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFBIWV9CQl9DSEFOSU5GT19DVFJMX0NBUFRVUkVfQ0hBTl9JTkZPX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAxKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfQ0hBTklORk9fQ1RSTF9DQVBUVVJFX0NIQU5fSU5GT19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwMSkKLSNkZWZpbmUgUEhZX0JCX0NIQU5JTkZPX0NUUkxfRElTQUJMRV9DSEFOSU5GT01FTV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9CQl9DSEFOSU5GT19DVFJMX0RJU0FCTEVfQ0hBTklORk9NRU1fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQkJfQ0hBTklORk9fQ1RSTF9ESVNBQkxFX0NIQU5JTkZPTUVNX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgUEhZX0JCX0NIQU5JTkZPX0NUUkxfRElTQUJMRV9DSEFOSU5GT01FTV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDIpID4+IDEpCi0jZGVmaW5lIFBIWV9CQl9DSEFOSU5GT19DVFJMX0RJU0FCTEVfQ0hBTklORk9NRU1fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMSkgJiAweDAwMDAwMDAyKQotCi0vKiBtYWNyb3MgZm9yIEJCX2hlYXZ5X2NsaXBfY3RybCAqLwotI2RlZmluZSBQSFlfQkJfSEVBVllfQ0xJUF9DVFJMX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk5ZTAKLSNkZWZpbmUgUEhZX0JCX0hFQVZZX0NMSVBfQ1RSTF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OWUwCi0jZGVmaW5lIFBIWV9CQl9IRUFWWV9DTElQX0NUUkxfQ0ZfSEVBVllfQ0xJUF9FTkFCTEVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQkJfSEVBVllfQ0xJUF9DVFJMX0NGX0hFQVZZX0NMSVBfRU5BQkxFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0hFQVZZX0NMSVBfQ1RSTF9DRl9IRUFWWV9DTElQX0VOQUJMRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMWZmCi0jZGVmaW5lIFBIWV9CQl9IRUFWWV9DTElQX0NUUkxfQ0ZfSEVBVllfQ0xJUF9FTkFCTEVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMWZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfSEVBVllfQ0xJUF9DVFJMX0NGX0hFQVZZX0NMSVBfRU5BQkxFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDFmZikKLSNkZWZpbmUgUEhZX0JCX0hFQVZZX0NMSVBfQ1RSTF9QUkVfRU1QX0hUNDBfRU5BQkxFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9CQl9IRUFWWV9DTElQX0NUUkxfUFJFX0VNUF9IVDQwX0VOQUJMRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQkJfSEVBVllfQ0xJUF9DVFJMX1BSRV9FTVBfSFQ0MF9FTkFCTEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKLSNkZWZpbmUgUEhZX0JCX0hFQVZZX0NMSVBfQ1RSTF9QUkVfRU1QX0hUNDBfRU5BQkxFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAyMDApID4+IDkpCi0jZGVmaW5lIFBIWV9CQl9IRUFWWV9DTElQX0NUUkxfUFJFX0VNUF9IVDQwX0VOQUJMRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOSkgJiAweDAwMDAwMjAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX2hlYXZ5X2NsaXBfMjAgKi8KLSNkZWZpbmUgUEhZX0JCX0hFQVZZX0NMSVBfMjBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OWU0Ci0jZGVmaW5lIFBIWV9CQl9IRUFWWV9DTElQXzIwX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTllNAotI2RlZmluZSBQSFlfQkJfSEVBVllfQ0xJUF8yMF9IRUFWWV9DTElQX0ZBQ1RPUl8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0JCX0hFQVZZX0NMSVBfMjBfSEVBVllfQ0xJUF9GQUNUT1JfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9IRUFWWV9DTElQXzIwX0hFQVZZX0NMSVBfRkFDVE9SXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBQSFlfQkJfSEVBVllfQ0xJUF8yMF9IRUFWWV9DTElQX0ZBQ1RPUl8wX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDBmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0hFQVZZX0NMSVBfMjBfSEVBVllfQ0xJUF9GQUNUT1JfMF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwZmYpCi0jZGVmaW5lIFBIWV9CQl9IRUFWWV9DTElQXzIwX0hFQVZZX0NMSVBfRkFDVE9SXzFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQkJfSEVBVllfQ0xJUF8yMF9IRUFWWV9DTElQX0ZBQ1RPUl8xX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0JCX0hFQVZZX0NMSVBfMjBfSEVBVllfQ0xJUF9GQUNUT1JfMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBmZjAwCi0jZGVmaW5lIFBIWV9CQl9IRUFWWV9DTElQXzIwX0hFQVZZX0NMSVBfRkFDVE9SXzFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDBmZjAwKSA+PiA4KQotI2RlZmluZSBQSFlfQkJfSEVBVllfQ0xJUF8yMF9IRUFWWV9DTElQX0ZBQ1RPUl8xX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwZmYwMCkKLSNkZWZpbmUgUEhZX0JCX0hFQVZZX0NMSVBfMjBfSEVBVllfQ0xJUF9GQUNUT1JfMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9CQl9IRUFWWV9DTElQXzIwX0hFQVZZX0NMSVBfRkFDVE9SXzJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQkJfSEVBVllfQ0xJUF8yMF9IRUFWWV9DTElQX0ZBQ1RPUl8yX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBmZjAwMDAKLSNkZWZpbmUgUEhZX0JCX0hFQVZZX0NMSVBfMjBfSEVBVllfQ0xJUF9GQUNUT1JfMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMGZmMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9CQl9IRUFWWV9DTElQXzIwX0hFQVZZX0NMSVBfRkFDVE9SXzJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAwZmYwMDAwKQotI2RlZmluZSBQSFlfQkJfSEVBVllfQ0xJUF8yMF9IRUFWWV9DTElQX0ZBQ1RPUl8zX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX0hFQVZZX0NMSVBfMjBfSEVBVllfQ0xJUF9GQUNUT1JfM19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9CQl9IRUFWWV9DTElQXzIwX0hFQVZZX0NMSVBfRkFDVE9SXzNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZjAwMDAwMAotI2RlZmluZSBQSFlfQkJfSEVBVllfQ0xJUF8yMF9IRUFWWV9DTElQX0ZBQ1RPUl8zX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmMDAwMDAwKSA+PiAyNCkKLSNkZWZpbmUgUEhZX0JCX0hFQVZZX0NMSVBfMjBfSEVBVllfQ0xJUF9GQUNUT1JfM19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI0KSAmIDB4ZmYwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfaGVhdnlfY2xpcF80MCAqLwotI2RlZmluZSBQSFlfQkJfSEVBVllfQ0xJUF80MF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk5ZTgKLSNkZWZpbmUgUEhZX0JCX0hFQVZZX0NMSVBfNDBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OWU4Ci0jZGVmaW5lIFBIWV9CQl9IRUFWWV9DTElQXzQwX0hFQVZZX0NMSVBfRkFDVE9SXzRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQkJfSEVBVllfQ0xJUF80MF9IRUFWWV9DTElQX0ZBQ1RPUl80X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0hFQVZZX0NMSVBfNDBfSEVBVllfQ0xJUF9GQUNUT1JfNF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIFBIWV9CQl9IRUFWWV9DTElQXzQwX0hFQVZZX0NMSVBfRkFDVE9SXzRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMGZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfSEVBVllfQ0xJUF80MF9IRUFWWV9DTElQX0ZBQ1RPUl80X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDBmZikKLSNkZWZpbmUgUEhZX0JCX0hFQVZZX0NMSVBfNDBfSEVBVllfQ0xJUF9GQUNUT1JfNV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9CQl9IRUFWWV9DTElQXzQwX0hFQVZZX0NMSVBfRkFDVE9SXzVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQkJfSEVBVllfQ0xJUF80MF9IRUFWWV9DTElQX0ZBQ1RPUl81X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGZmMDAKLSNkZWZpbmUgUEhZX0JCX0hFQVZZX0NMSVBfNDBfSEVBVllfQ0xJUF9GQUNUT1JfNV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMGZmMDApID4+IDgpCi0jZGVmaW5lIFBIWV9CQl9IRUFWWV9DTElQXzQwX0hFQVZZX0NMSVBfRkFDVE9SXzVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDBmZjAwKQotI2RlZmluZSBQSFlfQkJfSEVBVllfQ0xJUF80MF9IRUFWWV9DTElQX0ZBQ1RPUl82X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0JCX0hFQVZZX0NMSVBfNDBfSEVBVllfQ0xJUF9GQUNUT1JfNl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9IRUFWWV9DTElQXzQwX0hFQVZZX0NMSVBfRkFDVE9SXzZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMGZmMDAwMAotI2RlZmluZSBQSFlfQkJfSEVBVllfQ0xJUF80MF9IRUFWWV9DTElQX0ZBQ1RPUl82X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwZmYwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0JCX0hFQVZZX0NMSVBfNDBfSEVBVllfQ0xJUF9GQUNUT1JfNl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDBmZjAwMDApCi0jZGVmaW5lIFBIWV9CQl9IRUFWWV9DTElQXzQwX0hFQVZZX0NMSVBfRkFDVE9SXzdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfSEVBVllfQ0xJUF80MF9IRUFWWV9DTElQX0ZBQ1RPUl83X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0JCX0hFQVZZX0NMSVBfNDBfSEVBVllfQ0xJUF9GQUNUT1JfN19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9IRUFWWV9DTElQXzQwX0hFQVZZX0NMSVBfRkFDVE9SXzdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZmYwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQkJfSEVBVllfQ0xJUF80MF9IRUFWWV9DTElQX0ZBQ1RPUl83X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjQpICYgMHhmZjAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9yaWZzX3NyY2ggKi8KLSNkZWZpbmUgUEhZX0JCX1JJRlNfU1JDSF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OWVjCi0jZGVmaW5lIFBIWV9CQl9SSUZTX1NSQ0hfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTllYwotI2RlZmluZSBQSFlfQkJfUklGU19TUkNIX0hFQVZZX0NMSVBfRkFDVE9SX1hSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0JCX1JJRlNfU1JDSF9IRUFWWV9DTElQX0ZBQ1RPUl9YUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9SSUZTX1NSQ0hfSEVBVllfQ0xJUF9GQUNUT1JfWFJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBQSFlfQkJfUklGU19TUkNIX0hFQVZZX0NMSVBfRkFDVE9SX1hSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDBmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1JJRlNfU1JDSF9IRUFWWV9DTElQX0ZBQ1RPUl9YUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwZmYpCi0jZGVmaW5lIFBIWV9CQl9SSUZTX1NSQ0hfSU5JVF9HQUlOX0RCX09GRlNFVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQkJfUklGU19TUkNIX0lOSVRfR0FJTl9EQl9PRkZTRVRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0JCX1JJRlNfU1JDSF9JTklUX0dBSU5fREJfT0ZGU0VUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBmZjAwCi0jZGVmaW5lIFBIWV9CQl9SSUZTX1NSQ0hfSU5JVF9HQUlOX0RCX09GRlNFVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDBmZjAwKSA+PiA4KQotI2RlZmluZSBQSFlfQkJfUklGU19TUkNIX0lOSVRfR0FJTl9EQl9PRkZTRVRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwZmYwMCkKLSNkZWZpbmUgUEhZX0JCX1JJRlNfU1JDSF9SSUZTX0lOSVRfREVMQVlfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9CQl9SSUZTX1NSQ0hfUklGU19JTklUX0RFTEFZX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQkJfUklGU19TUkNIX1JJRlNfSU5JVF9ERUxBWV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDNmZjAwMDAKLSNkZWZpbmUgUEhZX0JCX1JJRlNfU1JDSF9SSUZTX0lOSVRfREVMQVlfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwM2ZmMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9CQl9SSUZTX1NSQ0hfUklGU19JTklUX0RFTEFZX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAzZmYwMDAwKQotI2RlZmluZSBQSFlfQkJfUklGU19TUkNIX1JJRlNfRElTQUJMRV9QV1JMT1dfR0NfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0JCX1JJRlNfU1JDSF9SSUZTX0RJU0FCTEVfUFdSTE9XX0dDX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9CQl9SSUZTX1NSQ0hfUklGU19ESVNBQkxFX1BXUkxPV19HQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAotI2RlZmluZSBQSFlfQkJfUklGU19TUkNIX1JJRlNfRElTQUJMRV9QV1JMT1dfR0NfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDA0MDAwMDAwKSA+PiAyNikKLSNkZWZpbmUgUEhZX0JCX1JJRlNfU1JDSF9SSUZTX0RJU0FCTEVfUFdSTE9XX0dDX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI2KSAmIDB4MDQwMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9SSUZTX1NSQ0hfUklGU19ESVNBQkxFX0NDS19ERVRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQkJfUklGU19TUkNIX1JJRlNfRElTQUJMRV9DQ0tfREVUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0JCX1JJRlNfU1JDSF9SSUZTX0RJU0FCTEVfQ0NLX0RFVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9SSUZTX1NSQ0hfUklGU19ESVNBQkxFX0NDS19ERVRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDgwMDAwMDApID4+IDI3KQotI2RlZmluZSBQSFlfQkJfUklGU19TUkNIX1JJRlNfRElTQUJMRV9DQ0tfREVUX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjcpICYgMHgwODAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9pcV9hZGNfY2FsX21vZGUgKi8KLSNkZWZpbmUgUEhZX0JCX0lRX0FEQ19DQUxfTU9ERV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5OWYwCi0jZGVmaW5lIFBIWV9CQl9JUV9BRENfQ0FMX01PREVfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTlmMAotI2RlZmluZSBQSFlfQkJfSVFfQURDX0NBTF9NT0RFX0dBSU5fRENfSVFfQ0FMX01PREVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0JCX0lRX0FEQ19DQUxfTU9ERV9HQUlOX0RDX0lRX0NBTF9NT0RFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9JUV9BRENfQ0FMX01PREVfR0FJTl9EQ19JUV9DQUxfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMwotI2RlZmluZSBQSFlfQkJfSVFfQURDX0NBTF9NT0RFX0dBSU5fRENfSVFfQ0FMX01PREVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMykgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0lRX0FEQ19DQUxfTU9ERV9HQUlOX0RDX0lRX0NBTF9NT0RFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDMpCi0jZGVmaW5lIFBIWV9CQl9JUV9BRENfQ0FMX01PREVfVEVTVF9DQUxBRENPRkZfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQkJfSVFfQURDX0NBTF9NT0RFX1RFU1RfQ0FMQURDT0ZGX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0JCX0lRX0FEQ19DQUxfTU9ERV9URVNUX0NBTEFEQ09GRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFBIWV9CQl9JUV9BRENfQ0FMX01PREVfVEVTVF9DQUxBRENPRkZfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDA0KSA+PiAyKQotI2RlZmluZSBQSFlfQkJfSVFfQURDX0NBTF9NT0RFX1RFU1RfQ0FMQURDT0ZGX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIpICYgMHgwMDAwMDAwNCkKLQotLyogbWFjcm9zIGZvciBCQl9wZXJfY2hhaW5fY3NkICovCi0jZGVmaW5lIFBIWV9CQl9QRVJfQ0hBSU5fQ1NEX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTlmYwotI2RlZmluZSBQSFlfQkJfUEVSX0NIQUlOX0NTRF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDk5ZmMKLSNkZWZpbmUgUEhZX0JCX1BFUl9DSEFJTl9DU0RfQ1NEX0NITjFfMkNIQUlOU19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9CQl9QRVJfQ0hBSU5fQ1NEX0NTRF9DSE4xXzJDSEFJTlNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfUEVSX0NIQUlOX0NTRF9DU0RfQ0hOMV8yQ0hBSU5TX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMWYKLSNkZWZpbmUgUEhZX0JCX1BFUl9DSEFJTl9DU0RfQ1NEX0NITjFfMkNIQUlOU19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMWYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9QRVJfQ0hBSU5fQ1NEX0NTRF9DSE4xXzJDSEFJTlNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDFmKQotI2RlZmluZSBQSFlfQkJfUEVSX0NIQUlOX0NTRF9DU0RfQ0hOMV8zQ0hBSU5TX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0JCX1BFUl9DSEFJTl9DU0RfQ1NEX0NITjFfM0NIQUlOU19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9CQl9QRVJfQ0hBSU5fQ1NEX0NTRF9DSE4xXzNDSEFJTlNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNlMAotI2RlZmluZSBQSFlfQkJfUEVSX0NIQUlOX0NTRF9DU0RfQ0hOMV8zQ0hBSU5TX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDNlMCkgPj4gNSkKLSNkZWZpbmUgUEhZX0JCX1BFUl9DSEFJTl9DU0RfQ1NEX0NITjFfM0NIQUlOU19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA1KSAmIDB4MDAwMDAzZTApCi0jZGVmaW5lIFBIWV9CQl9QRVJfQ0hBSU5fQ1NEX0NTRF9DSE4yXzNDSEFJTlNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQkJfUEVSX0NIQUlOX0NTRF9DU0RfQ0hOMl8zQ0hBSU5TX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0JCX1BFUl9DSEFJTl9DU0RfQ1NEX0NITjJfM0NIQUlOU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA3YzAwCi0jZGVmaW5lIFBIWV9CQl9QRVJfQ0hBSU5fQ1NEX0NTRF9DSE4yXzNDSEFJTlNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDdjMDApID4+IDEwKQotI2RlZmluZSBQSFlfQkJfUEVSX0NIQUlOX0NTRF9DU0RfQ0hOMl8zQ0hBSU5TX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTApICYgMHgwMDAwN2MwMCkKLQotLyogbWFjcm9zIGZvciBCQl9yeF9vY2dhaW4gKi8KLSNkZWZpbmUgUEhZX0JCX1JYX09DR0FJTl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5YTAwCi0jZGVmaW5lIFBIWV9CQl9SWF9PQ0dBSU5fT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOWEwMAotI2RlZmluZSBQSFlfQkJfUlhfT0NHQUlOX0dBSU5fRU5UUllfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX1JYX09DR0FJTl9HQUlOX0VOVFJZX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9SWF9PQ0dBSU5fR0FJTl9FTlRSWV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBQSFlfQkJfUlhfT0NHQUlOX0dBSU5fRU5UUllfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9jcmMgKi8KLSNkZWZpbmUgUEhZX0JCX1RYX0NSQ19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5YzAwCi0jZGVmaW5lIFBIWV9CQl9UWF9DUkNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOWMwMAotI2RlZmluZSBQSFlfQkJfVFhfQ1JDX1RYX0NSQ19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0JCX1RYX0NSQ19UWF9DUkNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9UWF9DUkNfVFhfQ1JDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwZmZmZgotI2RlZmluZSBQSFlfQkJfVFhfQ1JDX1RYX0NSQ19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwZmZmZikgPj4gMCkKLQotLyogbWFjcm9zIGZvciBCQl9pcV9hZGNfbWVhc18wX2IwICovCi0jZGVmaW5lIFBIWV9CQl9JUV9BRENfTUVBU18wX0IwX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOWMxMAotI2RlZmluZSBQSFlfQkJfSVFfQURDX01FQVNfMF9CMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDljMTAKLSNkZWZpbmUgUEhZX0JCX0lRX0FEQ19NRUFTXzBfQjBfR0FJTl9EQ19JUV9DQUxfTUVBU18wXzBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9JUV9BRENfTUVBU18wX0IwX0dBSU5fRENfSVFfQ0FMX01FQVNfMF8wX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfSVFfQURDX01FQVNfMF9CMF9HQUlOX0RDX0lRX0NBTF9NRUFTXzBfMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgUEhZX0JCX0lRX0FEQ19NRUFTXzBfQjBfR0FJTl9EQ19JUV9DQUxfTUVBU18wXzBfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZmZmZmZmZmYpID4+IDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfaXFfYWRjX21lYXNfMV9iMCAqLwotI2RlZmluZSBQSFlfQkJfSVFfQURDX01FQVNfMV9CMF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDljMTQKLSNkZWZpbmUgUEhZX0JCX0lRX0FEQ19NRUFTXzFfQjBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5YzE0Ci0jZGVmaW5lIFBIWV9CQl9JUV9BRENfTUVBU18xX0IwX0dBSU5fRENfSVFfQ0FMX01FQVNfMV8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfSVFfQURDX01FQVNfMV9CMF9HQUlOX0RDX0lRX0NBTF9NRUFTXzFfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0lRX0FEQ19NRUFTXzFfQjBfR0FJTl9EQ19JUV9DQUxfTUVBU18xXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9JUV9BRENfTUVBU18xX0IwX0dBSU5fRENfSVFfQ0FMX01FQVNfMV8wX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX2lxX2FkY19tZWFzXzJfYjAgKi8KLSNkZWZpbmUgUEhZX0JCX0lRX0FEQ19NRUFTXzJfQjBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5YzE4Ci0jZGVmaW5lIFBIWV9CQl9JUV9BRENfTUVBU18yX0IwX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOWMxOAotI2RlZmluZSBQSFlfQkJfSVFfQURDX01FQVNfMl9CMF9HQUlOX0RDX0lRX0NBTF9NRUFTXzJfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX0lRX0FEQ19NRUFTXzJfQjBfR0FJTl9EQ19JUV9DQUxfTUVBU18yXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9JUV9BRENfTUVBU18yX0IwX0dBSU5fRENfSVFfQ0FMX01FQVNfMl8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBQSFlfQkJfSVFfQURDX01FQVNfMl9CMF9HQUlOX0RDX0lRX0NBTF9NRUFTXzJfMF9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHhmZmZmZmZmZikgPj4gMCkKLQotLyogbWFjcm9zIGZvciBCQl9pcV9hZGNfbWVhc18zX2IwICovCi0jZGVmaW5lIFBIWV9CQl9JUV9BRENfTUVBU18zX0IwX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOWMxYwotI2RlZmluZSBQSFlfQkJfSVFfQURDX01FQVNfM19CMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDljMWMKLSNkZWZpbmUgUEhZX0JCX0lRX0FEQ19NRUFTXzNfQjBfR0FJTl9EQ19JUV9DQUxfTUVBU18zXzBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9JUV9BRENfTUVBU18zX0IwX0dBSU5fRENfSVFfQ0FMX01FQVNfM18wX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfSVFfQURDX01FQVNfM19CMF9HQUlOX0RDX0lRX0NBTF9NRUFTXzNfMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgUEhZX0JCX0lRX0FEQ19NRUFTXzNfQjBfR0FJTl9EQ19JUV9DQUxfTUVBU18zXzBfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZmZmZmZmZmYpID4+IDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfcmZidXNfZ3JhbnQgKi8KLSNkZWZpbmUgUEhZX0JCX1JGQlVTX0dSQU5UX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5YzIwCi0jZGVmaW5lIFBIWV9CQl9SRkJVU19HUkFOVF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOWMyMAotI2RlZmluZSBQSFlfQkJfUkZCVVNfR1JBTlRfUkZCVVNfR1JBTlRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1JGQlVTX0dSQU5UX1JGQlVTX0dSQU5UX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9SRkJVU19HUkFOVF9SRkJVU19HUkFOVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBQSFlfQkJfUkZCVVNfR1JBTlRfUkZCVVNfR1JBTlRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMSkgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1JGQlVTX0dSQU5UX0JUX0FOVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9CQl9SRkJVU19HUkFOVF9CVF9BTlRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQkJfUkZCVVNfR1JBTlRfQlRfQU5UX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgUEhZX0JCX1JGQlVTX0dSQU5UX0JUX0FOVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDIpID4+IDEpCi0KLS8qIG1hY3JvcyBmb3IgQkJfdHN0YWRjICovCi0jZGVmaW5lIFBIWV9CQl9UU1RBRENfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOWMyNAotI2RlZmluZSBQSFlfQkJfVFNUQURDX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDljMjQKLSNkZWZpbmUgUEhZX0JCX1RTVEFEQ19UU1RBRENfT1VUX1FfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9CQl9UU1RBRENfVFNUQURDX09VVF9RX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfVFNUQURDX1RTVEFEQ19PVVRfUV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzZmYKLSNkZWZpbmUgUEhZX0JCX1RTVEFEQ19UU1RBRENfT1VUX1FfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAzZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9UU1RBRENfVFNUQURDX09VVF9JX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQkJfVFNUQURDX1RTVEFEQ19PVVRfSV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0JCX1RTVEFEQ19UU1RBRENfT1VUX0lfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMGZmYzAwCi0jZGVmaW5lIFBIWV9CQl9UU1RBRENfVFNUQURDX09VVF9JX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwZmZjMDApID4+IDEwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3RzdGRhYyAqLwotI2RlZmluZSBQSFlfQkJfVFNUREFDX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDljMjgKLSNkZWZpbmUgUEhZX0JCX1RTVERBQ19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5YzI4Ci0jZGVmaW5lIFBIWV9CQl9UU1REQUNfVFNUREFDX09VVF9RX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQkJfVFNUREFDX1RTVERBQ19PVVRfUV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RTVERBQ19UU1REQUNfT1VUX1FfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM2ZmCi0jZGVmaW5lIFBIWV9CQl9UU1REQUNfVFNUREFDX09VVF9RX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwM2ZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFNUREFDX1RTVERBQ19PVVRfSV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUEhZX0JCX1RTVERBQ19UU1REQUNfT1VUX0lfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9CQl9UU1REQUNfVFNUREFDX09VVF9JX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBmZmMwMAotI2RlZmluZSBQSFlfQkJfVFNUREFDX1RTVERBQ19PVVRfSV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMGZmYzAwKSA+PiAxMCkKLQotLyogbWFjcm9zIGZvciBCQl9pbGxlZ2FsX3R4X3JhdGUgKi8KLSNkZWZpbmUgUEhZX0JCX0lMTEVHQUxfVFhfUkFURV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5YzMwCi0jZGVmaW5lIFBIWV9CQl9JTExFR0FMX1RYX1JBVEVfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOWMzMAotI2RlZmluZSBQSFlfQkJfSUxMRUdBTF9UWF9SQVRFX0lMTEVHQUxfVFhfUkFURV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0lMTEVHQUxfVFhfUkFURV9JTExFR0FMX1RYX1JBVEVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9JTExFR0FMX1RYX1JBVEVfSUxMRUdBTF9UWF9SQVRFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBQSFlfQkJfSUxMRUdBTF9UWF9SQVRFX0lMTEVHQUxfVFhfUkFURV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMSkgPj4gMCkKLQotLyogbWFjcm9zIGZvciBCQl9zcHVyX3JlcG9ydF9iMCAqLwotI2RlZmluZSBQSFlfQkJfU1BVUl9SRVBPUlRfQjBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDljMzQKLSNkZWZpbmUgUEhZX0JCX1NQVVJfUkVQT1JUX0IwX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5YzM0Ci0jZGVmaW5lIFBIWV9CQl9TUFVSX1JFUE9SVF9CMF9TUFVSX0VTVF9JXzBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQkJfU1BVUl9SRVBPUlRfQjBfU1BVUl9FU1RfSV8wX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1NQVVJfUkVQT1JUX0IwX1NQVVJfRVNUX0lfMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIFBIWV9CQl9TUFVSX1JFUE9SVF9CMF9TUFVSX0VTVF9JXzBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMGZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfU1BVUl9SRVBPUlRfQjBfU1BVUl9FU1RfUV8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0JCX1NQVVJfUkVQT1JUX0IwX1NQVVJfRVNUX1FfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9TUFVSX1JFUE9SVF9CMF9TUFVSX0VTVF9RXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBQSFlfQkJfU1BVUl9SRVBPUlRfQjBfU1BVUl9FU1RfUV8wX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwZmYwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0JCX1NQVVJfUkVQT1JUX0IwX1BPV0VSX1dJVEhfU1BVUl9SRU1PVkVEXzBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9TUFVSX1JFUE9SVF9CMF9QT1dFUl9XSVRIX1NQVVJfUkVNT1ZFRF8wX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQkJfU1BVUl9SRVBPUlRfQjBfUE9XRVJfV0lUSF9TUFVSX1JFTU9WRURfMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZjAwMDAKLSNkZWZpbmUgUEhZX0JCX1NQVVJfUkVQT1JUX0IwX1BPV0VSX1dJVEhfU1BVUl9SRU1PVkVEXzBfR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHhmZmZmMDAwMCkgPj4gMTYpCi0KLS8qIG1hY3JvcyBmb3IgQkJfY2hhbm5lbF9zdGF0dXMgKi8KLSNkZWZpbmUgUEhZX0JCX0NIQU5ORUxfU1RBVFVTX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5YzM4Ci0jZGVmaW5lIFBIWV9CQl9DSEFOTkVMX1NUQVRVU19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOWMzOAotI2RlZmluZSBQSFlfQkJfQ0hBTk5FTF9TVEFUVVNfQlRfQUNUSVZFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0NIQU5ORUxfU1RBVFVTX0JUX0FDVElWRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9DSEFOTkVMX1NUQVRVU19CVF9BQ1RJVkVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBQSFlfQkJfQ0hBTk5FTF9TVEFUVVNfQlRfQUNUSVZFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMSkgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0NIQU5ORUxfU1RBVFVTX1JYX0NMRUFSX1JBV19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9CQl9DSEFOTkVMX1NUQVRVU19SWF9DTEVBUl9SQVdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQkJfQ0hBTk5FTF9TVEFUVVNfUlhfQ0xFQVJfUkFXX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgUEhZX0JCX0NIQU5ORUxfU1RBVFVTX1JYX0NMRUFSX1JBV19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDIpID4+IDEpCi0jZGVmaW5lIFBIWV9CQl9DSEFOTkVMX1NUQVRVU19SWF9DTEVBUl9NQUNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQkJfQ0hBTk5FTF9TVEFUVVNfUlhfQ0xFQVJfTUFDX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0JCX0NIQU5ORUxfU1RBVFVTX1JYX0NMRUFSX01BQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFBIWV9CQl9DSEFOTkVMX1NUQVRVU19SWF9DTEVBUl9NQUNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDA0KSA+PiAyKQotI2RlZmluZSBQSFlfQkJfQ0hBTk5FTF9TVEFUVVNfUlhfQ0xFQVJfUEFEX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0JCX0NIQU5ORUxfU1RBVFVTX1JYX0NMRUFSX1BBRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9CQl9DSEFOTkVMX1NUQVRVU19SWF9DTEVBUl9QQURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBQSFlfQkJfQ0hBTk5FTF9TVEFUVVNfUlhfQ0xFQVJfUEFEX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwOCkgPj4gMykKLSNkZWZpbmUgUEhZX0JCX0NIQU5ORUxfU1RBVFVTX0JCX1NXX09VVF8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9CQl9DSEFOTkVMX1NUQVRVU19CQl9TV19PVVRfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQkJfQ0hBTk5FTF9TVEFUVVNfQkJfU1dfT1VUXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKLSNkZWZpbmUgUEhZX0JCX0NIQU5ORUxfU1RBVFVTX0JCX1NXX09VVF8wX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMzApID4+IDQpCi0jZGVmaW5lIFBIWV9CQl9DSEFOTkVMX1NUQVRVU19CQl9TV19PVVRfMV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQkJfQ0hBTk5FTF9TVEFUVVNfQkJfU1dfT1VUXzFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0JCX0NIQU5ORUxfU1RBVFVTX0JCX1NXX09VVF8xX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGMwCi0jZGVmaW5lIFBIWV9CQl9DSEFOTkVMX1NUQVRVU19CQl9TV19PVVRfMV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMGMwKSA+PiA2KQotI2RlZmluZSBQSFlfQkJfQ0hBTk5FTF9TVEFUVVNfQkJfU1dfT1VUXzJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0JCX0NIQU5ORUxfU1RBVFVTX0JCX1NXX09VVF8yX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9DSEFOTkVMX1NUQVRVU19CQl9TV19PVVRfMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAotI2RlZmluZSBQSFlfQkJfQ0hBTk5FTF9TVEFUVVNfQkJfU1dfT1VUXzJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDMwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0JCX0NIQU5ORUxfU1RBVFVTX0JCX1NXX0NPTV9PVVRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9CQl9DSEFOTkVMX1NUQVRVU19CQl9TV19DT01fT1VUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQkJfQ0hBTk5FTF9TVEFUVVNfQkJfU1dfQ09NX09VVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDNjMDAKLSNkZWZpbmUgUEhZX0JCX0NIQU5ORUxfU1RBVFVTX0JCX1NXX0NPTV9PVVRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwM2MwMCkgPj4gMTApCi0jZGVmaW5lIFBIWV9CQl9DSEFOTkVMX1NUQVRVU19BTlRfRElWX0NGR19VU0VEX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQkJfQ0hBTk5FTF9TVEFUVVNfQU5UX0RJVl9DRkdfVVNFRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0JCX0NIQU5ORUxfU1RBVFVTX0FOVF9ESVZfQ0ZHX1VTRURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDFjMDAwCi0jZGVmaW5lIFBIWV9CQl9DSEFOTkVMX1NUQVRVU19BTlRfRElWX0NGR19VU0VEX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMWMwMDApID4+IDE0KQotCi0vKiBtYWNyb3MgZm9yIEJCX3Jzc2lfYjAgKi8KLSNkZWZpbmUgUEhZX0JCX1JTU0lfQjBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5YzNjCi0jZGVmaW5lIFBIWV9CQl9SU1NJX0IwX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOWMzYwotI2RlZmluZSBQSFlfQkJfUlNTSV9CMF9SU1NJXzBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0JCX1JTU0lfQjBfUlNTSV8wX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9SU1NJX0IwX1JTU0lfMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBQSFlfQkJfUlNTSV9CMF9SU1NJXzBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDBmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1JTU0lfQjBfUlNTSV9FWFRfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9CQl9SU1NJX0IwX1JTU0lfRVhUXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQkJfUlNTSV9CMF9SU1NJX0VYVF8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGZmMDAKLSNkZWZpbmUgUEhZX0JCX1JTU0lfQjBfUlNTSV9FWFRfMF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMGZmMDApID4+IDgpCi0KLS8qIG1hY3JvcyBmb3IgQkJfc3B1cl9lc3RfY2NrX3JlcG9ydF9iMCAqLwotI2RlZmluZSBQSFlfQkJfU1BVUl9FU1RfQ0NLX1JFUE9SVF9CMF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDljNDAKLSNkZWZpbmUgUEhZX0JCX1NQVVJfRVNUX0NDS19SRVBPUlRfQjBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5YzQwCi0jZGVmaW5lIFBIWV9CQl9TUFVSX0VTVF9DQ0tfUkVQT1JUX0IwX1NQVVJfRVNUX1NEX0lfMF9DQ0tfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQkJfU1BVUl9FU1RfQ0NLX1JFUE9SVF9CMF9TUFVSX0VTVF9TRF9JXzBfQ0NLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1NQVVJfRVNUX0NDS19SRVBPUlRfQjBfU1BVUl9FU1RfU0RfSV8wX0NDS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIFBIWV9CQl9TUFVSX0VTVF9DQ0tfUkVQT1JUX0IwX1NQVVJfRVNUX1NEX0lfMF9DQ0tfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMGZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfU1BVUl9FU1RfQ0NLX1JFUE9SVF9CMF9TUFVSX0VTVF9TRF9RXzBfQ0NLX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0JCX1NQVVJfRVNUX0NDS19SRVBPUlRfQjBfU1BVUl9FU1RfU0RfUV8wX0NDS19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9TUFVSX0VTVF9DQ0tfUkVQT1JUX0IwX1NQVVJfRVNUX1NEX1FfMF9DQ0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBQSFlfQkJfU1BVUl9FU1RfQ0NLX1JFUE9SVF9CMF9TUFVSX0VTVF9TRF9RXzBfQ0NLX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwZmYwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0JCX1NQVVJfRVNUX0NDS19SRVBPUlRfQjBfU1BVUl9FU1RfSV8wX0NDS19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9CQl9TUFVSX0VTVF9DQ0tfUkVQT1JUX0IwX1NQVVJfRVNUX0lfMF9DQ0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQkJfU1BVUl9FU1RfQ0NLX1JFUE9SVF9CMF9TUFVSX0VTVF9JXzBfQ0NLX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBmZjAwMDAKLSNkZWZpbmUgUEhZX0JCX1NQVVJfRVNUX0NDS19SRVBPUlRfQjBfU1BVUl9FU1RfSV8wX0NDS19HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMGZmMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9CQl9TUFVSX0VTVF9DQ0tfUkVQT1JUX0IwX1NQVVJfRVNUX1FfMF9DQ0tfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfU1BVUl9FU1RfQ0NLX1JFUE9SVF9CMF9TUFVSX0VTVF9RXzBfQ0NLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0JCX1NQVVJfRVNUX0NDS19SRVBPUlRfQjBfU1BVUl9FU1RfUV8wX0NDS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9TUFVSX0VTVF9DQ0tfUkVQT1JUX0IwX1NQVVJfRVNUX1FfMF9DQ0tfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZmYwMDAwMDApID4+IDI0KQotCi0vKiBtYWNyb3MgZm9yIEJCX2NoYW5faW5mb19ub2lzZV9wd3IgKi8KLSNkZWZpbmUgUEhZX0JCX0NIQU5fSU5GT19OT0lTRV9QV1JfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5Y2FjCi0jZGVmaW5lIFBIWV9CQl9DSEFOX0lORk9fTk9JU0VfUFdSX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOWNhYwotI2RlZmluZSBQSFlfQkJfQ0hBTl9JTkZPX05PSVNFX1BXUl9OT0lTRV9QT1dFUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0JCX0NIQU5fSU5GT19OT0lTRV9QV1JfTk9JU0VfUE9XRVJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9DSEFOX0lORk9fTk9JU0VfUFdSX05PSVNFX1BPV0VSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGZmZgotI2RlZmluZSBQSFlfQkJfQ0hBTl9JTkZPX05PSVNFX1BXUl9OT0lTRV9QT1dFUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMGZmZikgPj4gMCkKLQotLyogbWFjcm9zIGZvciBCQl9jaGFuX2luZm9fZ2Fpbl9kaWZmICovCi0jZGVmaW5lIFBIWV9CQl9DSEFOX0lORk9fR0FJTl9ESUZGX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOWNiMAotI2RlZmluZSBQSFlfQkJfQ0hBTl9JTkZPX0dBSU5fRElGRl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDljYjAKLSNkZWZpbmUgUEhZX0JCX0NIQU5fSU5GT19HQUlOX0RJRkZfRklORV9QUE1fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9CQl9DSEFOX0lORk9fR0FJTl9ESUZGX0ZJTkVfUFBNX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfQ0hBTl9JTkZPX0dBSU5fRElGRl9GSU5FX1BQTV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBmZmYKLSNkZWZpbmUgUEhZX0JCX0NIQU5fSU5GT19HQUlOX0RJRkZfRklORV9QUE1fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDBmZmYpID4+IDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfY2hhbl9pbmZvX2ZpbmVfdGltaW5nICovCi0jZGVmaW5lIFBIWV9CQl9DSEFOX0lORk9fRklORV9USU1JTkdfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOWNiNAotI2RlZmluZSBQSFlfQkJfQ0hBTl9JTkZPX0ZJTkVfVElNSU5HX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDljYjQKLSNkZWZpbmUgUEhZX0JCX0NIQU5fSU5GT19GSU5FX1RJTUlOR19DT0FSU0VfUFBNX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9CQl9DSEFOX0lORk9fRklORV9USU1JTkdfQ09BUlNFX1BQTV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfQ0hBTl9JTkZPX0ZJTkVfVElNSU5HX0NPQVJTRV9QUE1fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBmZmYKLSNkZWZpbmUgUEhZX0JCX0NIQU5fSU5GT19GSU5FX1RJTUlOR19DT0FSU0VfUFBNX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDBmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9DSEFOX0lORk9fRklORV9USU1JTkdfRklORV9USU1JTkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQkJfQ0hBTl9JTkZPX0ZJTkVfVElNSU5HX0ZJTkVfVElNSU5HX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0JCX0NIQU5fSU5GT19GSU5FX1RJTUlOR19GSU5FX1RJTUlOR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwM2ZmMDAwCi0jZGVmaW5lIFBIWV9CQl9DSEFOX0lORk9fRklORV9USU1JTkdfRklORV9USU1JTkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAzZmYwMDApID4+IDEyKQotCi0vKiBtYWNyb3MgZm9yIEJCX2NoYW5faW5mb19nYWluX2IwICovCi0jZGVmaW5lIFBIWV9CQl9DSEFOX0lORk9fR0FJTl9CMF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOWNiOAotI2RlZmluZSBQSFlfQkJfQ0hBTl9JTkZPX0dBSU5fQjBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDljYjgKLSNkZWZpbmUgUEhZX0JCX0NIQU5fSU5GT19HQUlOX0IwX0NIQU5fSU5GT19SU1NJXzBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9CQl9DSEFOX0lORk9fR0FJTl9CMF9DSEFOX0lORk9fUlNTSV8wX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfQ0hBTl9JTkZPX0dBSU5fQjBfQ0hBTl9JTkZPX1JTU0lfMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgUEhZX0JCX0NIQU5fSU5GT19HQUlOX0IwX0NIQU5fSU5GT19SU1NJXzBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9DSEFOX0lORk9fR0FJTl9CMF9DSEFOX0lORk9fUkZfR0FJTl8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQkJfQ0hBTl9JTkZPX0dBSU5fQjBfQ0hBTl9JTkZPX1JGX0dBSU5fMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0JCX0NIQU5fSU5GT19HQUlOX0IwX0NIQU5fSU5GT19SRl9HQUlOXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBmZjAwCi0jZGVmaW5lIFBIWV9CQl9DSEFOX0lORk9fR0FJTl9CMF9DSEFOX0lORk9fUkZfR0FJTl8wX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDBmZjAwKSA+PiA4KQotI2RlZmluZSBQSFlfQkJfQ0hBTl9JTkZPX0dBSU5fQjBfQ0hBTl9JTkZPX1hBVFRFTjFfU1dfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0JCX0NIQU5fSU5GT19HQUlOX0IwX0NIQU5fSU5GT19YQVRURU4xX1NXXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9DSEFOX0lORk9fR0FJTl9CMF9DSEFOX0lORk9fWEFUVEVOMV9TV18wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBQSFlfQkJfQ0hBTl9JTkZPX0dBSU5fQjBfQ0hBTl9JTkZPX1hBVFRFTjFfU1dfMF9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDEwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0JCX0NIQU5fSU5GT19HQUlOX0IwX0NIQU5fSU5GT19YQVRURU4yX1NXXzBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9CQl9DSEFOX0lORk9fR0FJTl9CMF9DSEFOX0lORk9fWEFUVEVOMl9TV18wX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQkJfQ0hBTl9JTkZPX0dBSU5fQjBfQ0hBTl9JTkZPX1hBVFRFTjJfU1dfMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKLSNkZWZpbmUgUEhZX0JCX0NIQU5fSU5GT19HQUlOX0IwX0NIQU5fSU5GT19YQVRURU4yX1NXXzBfR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAyMDAwMCkgPj4gMTcpCi0KLS8qIG1hY3JvcyBmb3IgQkJfY2hhbl9pbmZvX2NoYW5fdGFiX2IwICovCi0jZGVmaW5lIFBIWV9CQl9DSEFOX0lORk9fQ0hBTl9UQUJfQjBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOWNiYwotI2RlZmluZSBQSFlfQkJfQ0hBTl9JTkZPX0NIQU5fVEFCX0IwX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDljYmMKLSNkZWZpbmUgUEhZX0JCX0NIQU5fSU5GT19DSEFOX1RBQl9CMF9NQU5fUV8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9CQl9DSEFOX0lORk9fQ0hBTl9UQUJfQjBfTUFOX1FfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfQ0hBTl9JTkZPX0NIQU5fVEFCX0IwX01BTl9RXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM2YKLSNkZWZpbmUgUEhZX0JCX0NIQU5fSU5GT19DSEFOX1RBQl9CMF9NQU5fUV8wX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwM2YpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9DSEFOX0lORk9fQ0hBTl9UQUJfQjBfTUFOX0lfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQkJfQ0hBTl9JTkZPX0NIQU5fVEFCX0IwX01BTl9JXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0JCX0NIQU5fSU5GT19DSEFOX1RBQl9CMF9NQU5fSV8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwZmMwCi0jZGVmaW5lIFBIWV9CQl9DSEFOX0lORk9fQ0hBTl9UQUJfQjBfTUFOX0lfMF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwZmMwKSA+PiA2KQotI2RlZmluZSBQSFlfQkJfQ0hBTl9JTkZPX0NIQU5fVEFCX0IwX0VYUF8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0JCX0NIQU5fSU5GT19DSEFOX1RBQl9CMF9FWFBfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9CQl9DSEFOX0lORk9fQ0hBTl9UQUJfQjBfRVhQXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwZjAwMAotI2RlZmluZSBQSFlfQkJfQ0hBTl9JTkZPX0NIQU5fVEFCX0IwX0VYUF8wX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDBmMDAwKSA+PiAxMikKLSNkZWZpbmUgUEhZX0JCX0NIQU5fSU5GT19DSEFOX1RBQl9CMF9NQU5fUV8xX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9CQl9DSEFOX0lORk9fQ0hBTl9UQUJfQjBfTUFOX1FfMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQkJfQ0hBTl9JTkZPX0NIQU5fVEFCX0IwX01BTl9RXzFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzZjAwMDAKLSNkZWZpbmUgUEhZX0JCX0NIQU5fSU5GT19DSEFOX1RBQl9CMF9NQU5fUV8xX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDNmMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9CQl9DSEFOX0lORk9fQ0hBTl9UQUJfQjBfTUFOX0lfMV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQkJfQ0hBTl9JTkZPX0NIQU5fVEFCX0IwX01BTl9JXzFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0JCX0NIQU5fSU5GT19DSEFOX1RBQl9CMF9NQU5fSV8xX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBmYzAwMDAwCi0jZGVmaW5lIFBIWV9CQl9DSEFOX0lORk9fQ0hBTl9UQUJfQjBfTUFOX0lfMV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MGZjMDAwMDApID4+IDIyKQotI2RlZmluZSBQSFlfQkJfQ0hBTl9JTkZPX0NIQU5fVEFCX0IwX0VYUF8xX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX0NIQU5fSU5GT19DSEFOX1RBQl9CMF9FWFBfMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9CQl9DSEFOX0lORk9fQ0hBTl9UQUJfQjBfRVhQXzFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmMDAwMDAwMAotI2RlZmluZSBQSFlfQkJfQ0hBTl9JTkZPX0NIQU5fVEFCX0IwX0VYUF8xX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGYwMDAwMDAwKSA+PiAyOCkKLQotLyogbWFjcm9zIGZvciBCQl9wYXByZF9hbTJhbV9tYXNrICovCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9BTTJBTV9NQVNLX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOWRlNAotI2RlZmluZSBQSFlfQkJfUEFQUkRfQU0yQU1fTUFTS19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDlkZTQKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX0FNMkFNX01BU0tfUEFQUkRfQU0yQU1fTUFTS19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9CQl9QQVBSRF9BTTJBTV9NQVNLX1BBUFJEX0FNMkFNX01BU0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfUEFQUkRfQU0yQU1fTUFTS19QQVBSRF9BTTJBTV9NQVNLX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDFmZmZmZmYKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX0FNMkFNX01BU0tfUEFQUkRfQU0yQU1fTUFTS19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDFmZmZmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9BTTJBTV9NQVNLX1BBUFJEX0FNMkFNX01BU0tfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAxZmZmZmZmKQotCi0vKiBtYWNyb3MgZm9yIEJCX3BhcHJkX2FtMnBtX21hc2sgKi8KLSNkZWZpbmUgUEhZX0JCX1BBUFJEX0FNMlBNX01BU0tfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5ZGU4Ci0jZGVmaW5lIFBIWV9CQl9QQVBSRF9BTTJQTV9NQVNLX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOWRlOAotI2RlZmluZSBQSFlfQkJfUEFQUkRfQU0yUE1fTUFTS19QQVBSRF9BTTJQTV9NQVNLX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX0FNMlBNX01BU0tfUEFQUkRfQU0yUE1fTUFTS19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9BTTJQTV9NQVNLX1BBUFJEX0FNMlBNX01BU0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMWZmZmZmZgotI2RlZmluZSBQSFlfQkJfUEFQUkRfQU0yUE1fTUFTS19QQVBSRF9BTTJQTV9NQVNLX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMWZmZmZmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX0FNMlBNX01BU0tfUEFQUkRfQU0yUE1fTUFTS19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDFmZmZmZmYpCi0KLS8qIG1hY3JvcyBmb3IgQkJfcGFwcmRfaHQ0MF9tYXNrICovCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9IVDQwX01BU0tfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOWRlYwotI2RlZmluZSBQSFlfQkJfUEFQUkRfSFQ0MF9NQVNLX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDlkZWMKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX0hUNDBfTUFTS19QQVBSRF9IVDQwX01BU0tfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9CQl9QQVBSRF9IVDQwX01BU0tfUEFQUkRfSFQ0MF9NQVNLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfUEFQUkRfSFQ0MF9NQVNLX1BBUFJEX0hUNDBfTUFTS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDFmZmZmZmYKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX0hUNDBfTUFTS19QQVBSRF9IVDQwX01BU0tfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDFmZmZmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9IVDQwX01BU0tfUEFQUkRfSFQ0MF9NQVNLX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAxZmZmZmZmKQotCi0vKiBtYWNyb3MgZm9yIEJCX3BhcHJkX2N0cmwwICovCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9DVFJMMF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOWRmMAotI2RlZmluZSBQSFlfQkJfUEFQUkRfQ1RSTDBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDlkZjAKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX0NUUkwwX1BBUFJEX0VOQUJMRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9DVFJMMF9QQVBSRF9FTkFCTEVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfUEFQUkRfQ1RSTDBfUEFQUkRfRU5BQkxFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX0NUUkwwX1BBUFJEX0VOQUJMRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDEpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9DVFJMMF9QQVBSRF9FTkFCTEVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDAxKQotI2RlZmluZSBQSFlfQkJfUEFQUkRfQ1RSTDBfUEFQUkRfQURBUFRJVkVfVVNFX1NJTkdMRV9UQUJMRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX0NUUkwwX1BBUFJEX0FEQVBUSVZFX1VTRV9TSU5HTEVfVEFCTEVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9DVFJMMF9QQVBSRF9BREFQVElWRV9VU0VfU0lOR0xFX1RBQkxFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBQSFlfQkJfUEFQUkRfQ1RSTDBfUEFQUkRfQURBUFRJVkVfVVNFX1NJTkdMRV9UQUJMRV9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMikgPj4gMSkKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX0NUUkwwX1BBUFJEX0FEQVBUSVZFX1VTRV9TSU5HTEVfVEFCTEVfU0VUKHgpICAgICAgICAgICAgICAoKCh4KSA8PCAxKSAmIDB4MDAwMDAwMDIpCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9DVFJMMF9QQVBSRF9WQUxJRF9HQUlOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQkJfUEFQUkRfQ1RSTDBfUEFQUkRfVkFMSURfR0FJTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX0NUUkwwX1BBUFJEX1ZBTElEX0dBSU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3ZmZmZmZjCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9DVFJMMF9QQVBSRF9WQUxJRF9HQUlOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDA3ZmZmZmZjKSA+PiAyKQotI2RlZmluZSBQSFlfQkJfUEFQUkRfQ1RSTDBfUEFQUkRfVkFMSURfR0FJTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIpICYgMHgwN2ZmZmZmYykKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX0NUUkwwX1BBUFJEX01BR19USFJTSF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9DVFJMMF9QQVBSRF9NQUdfVEhSU0hfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQkJfUEFQUkRfQ1RSTDBfUEFQUkRfTUFHX1RIUlNIX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZjgwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX0NUUkwwX1BBUFJEX01BR19USFJTSF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhmODAwMDAwMCkgPj4gMjcpCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9DVFJMMF9QQVBSRF9NQUdfVEhSU0hfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNykgJiAweGY4MDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3BhcHJkX2N0cmwxICovCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9DVFJMMV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOWRmNAotI2RlZmluZSBQSFlfQkJfUEFQUkRfQ1RSTDFfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDlkZjQKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX0NUUkwxX1BBUFJEX0FEQVBUSVZFX1NDQUxJTkdfRU5BQkxFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9DVFJMMV9QQVBSRF9BREFQVElWRV9TQ0FMSU5HX0VOQUJMRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfUEFQUkRfQ1RSTDFfUEFQUkRfQURBUFRJVkVfU0NBTElOR19FTkFCTEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX0NUUkwxX1BBUFJEX0FEQVBUSVZFX1NDQUxJTkdfRU5BQkxFX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDEpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9DVFJMMV9QQVBSRF9BREFQVElWRV9TQ0FMSU5HX0VOQUJMRV9TRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDAxKQotI2RlZmluZSBQSFlfQkJfUEFQUkRfQ1RSTDFfUEFQUkRfQURBUFRJVkVfQU0yQU1fRU5BQkxFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX0NUUkwxX1BBUFJEX0FEQVBUSVZFX0FNMkFNX0VOQUJMRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9DVFJMMV9QQVBSRF9BREFQVElWRV9BTTJBTV9FTkFCTEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBQSFlfQkJfUEFQUkRfQ1RSTDFfUEFQUkRfQURBUFRJVkVfQU0yQU1fRU5BQkxFX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMikgPj4gMSkKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX0NUUkwxX1BBUFJEX0FEQVBUSVZFX0FNMkFNX0VOQUJMRV9TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxKSAmIDB4MDAwMDAwMDIpCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9DVFJMMV9QQVBSRF9BREFQVElWRV9BTTJQTV9FTkFCTEVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQkJfUEFQUkRfQ1RSTDFfUEFQUkRfQURBUFRJVkVfQU0yUE1fRU5BQkxFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX0NUUkwxX1BBUFJEX0FEQVBUSVZFX0FNMlBNX0VOQUJMRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFBIWV9CQl9QQVBSRF9DVFJMMV9QQVBSRF9BREFQVElWRV9BTTJQTV9FTkFCTEVfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDA0KSA+PiAyKQotI2RlZmluZSBQSFlfQkJfUEFQUkRfQ1RSTDFfUEFQUkRfQURBUFRJVkVfQU0yUE1fRU5BQkxFX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIpICYgMHgwMDAwMDAwNCkKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX0NUUkwxX1BBUFJEX1BPV0VSX0FUX0FNMkFNX0NBTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9QQVBSRF9DVFJMMV9QQVBSRF9QT1dFUl9BVF9BTTJBTV9DQUxfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQkJfUEFQUkRfQ1RSTDFfUEFQUkRfUE9XRVJfQVRfQU0yQU1fQ0FMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxZjgKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX0NUUkwxX1BBUFJEX1BPV0VSX0FUX0FNMkFNX0NBTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAxZjgpID4+IDMpCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9DVFJMMV9QQVBSRF9QT1dFUl9BVF9BTTJBTV9DQUxfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMykgJiAweDAwMDAwMWY4KQotI2RlZmluZSBQSFlfQkJfUEFQUkRfQ1RSTDFfUEFfR0FJTl9TQ0FMRV9GQUNUT1JfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX0NUUkwxX1BBX0dBSU5fU0NBTEVfRkFDVE9SX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9CQl9QQVBSRF9DVFJMMV9QQV9HQUlOX1NDQUxFX0ZBQ1RPUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxZmUwMAotI2RlZmluZSBQSFlfQkJfUEFQUkRfQ1RSTDFfUEFfR0FJTl9TQ0FMRV9GQUNUT1JfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAxZmUwMCkgPj4gOSkKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX0NUUkwxX1BBX0dBSU5fU0NBTEVfRkFDVE9SX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA5KSAmIDB4MDAwMWZlMDApCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9DVFJMMV9QQVBSRF9NQUdfU0NBTEVfRkFDVE9SX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQkJfUEFQUkRfQ1RSTDFfUEFQUkRfTUFHX1NDQUxFX0ZBQ1RPUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX0NUUkwxX1BBUFJEX01BR19TQ0FMRV9GQUNUT1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3ZmUwMDAwCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9DVFJMMV9QQVBSRF9NQUdfU0NBTEVfRkFDVE9SX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDdmZTAwMDApID4+IDE3KQotI2RlZmluZSBQSFlfQkJfUEFQUkRfQ1RSTDFfUEFQUkRfTUFHX1NDQUxFX0ZBQ1RPUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTcpICYgMHgwN2ZlMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX0NUUkwxX1BBUFJEX1RSQUlORVJfSUFORFFfU0VMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9CQl9QQVBSRF9DVFJMMV9QQVBSRF9UUkFJTkVSX0lBTkRRX1NFTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQkJfUEFQUkRfQ1RSTDFfUEFQUkRfVFJBSU5FUl9JQU5EUV9TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX0NUUkwxX1BBUFJEX1RSQUlORVJfSUFORFFfU0VMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwODAwMDAwMCkgPj4gMjcpCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9DVFJMMV9QQVBSRF9UUkFJTkVSX0lBTkRRX1NFTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNykgJiAweDA4MDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3BhX2dhaW4xMjMgKi8KLSNkZWZpbmUgUEhZX0JCX1BBX0dBSU4xMjNfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5ZGY4Ci0jZGVmaW5lIFBIWV9CQl9QQV9HQUlOMTIzX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOWRmOAotI2RlZmluZSBQSFlfQkJfUEFfR0FJTjEyM19QQV9HQUlOMV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0JCX1BBX0dBSU4xMjNfUEFfR0FJTjFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9QQV9HQUlOMTIzX1BBX0dBSU4xX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNmZgotI2RlZmluZSBQSFlfQkJfUEFfR0FJTjEyM19QQV9HQUlOMV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDNmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1BBX0dBSU4xMjNfUEFfR0FJTjFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAzZmYpCi0jZGVmaW5lIFBIWV9CQl9QQV9HQUlOMTIzX1BBX0dBSU4yX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQkJfUEFfR0FJTjEyM19QQV9HQUlOMl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0JCX1BBX0dBSU4xMjNfUEFfR0FJTjJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMGZmYzAwCi0jZGVmaW5lIFBIWV9CQl9QQV9HQUlOMTIzX1BBX0dBSU4yX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwZmZjMDApID4+IDEwKQotI2RlZmluZSBQSFlfQkJfUEFfR0FJTjEyM19QQV9HQUlOMl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTApICYgMHgwMDBmZmMwMCkKLSNkZWZpbmUgUEhZX0JCX1BBX0dBSU4xMjNfUEFfR0FJTjNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9CQl9QQV9HQUlOMTIzX1BBX0dBSU4zX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQkJfUEFfR0FJTjEyM19QQV9HQUlOM19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M2ZmMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1BBX0dBSU4xMjNfUEFfR0FJTjNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzZmYwMDAwMCkgPj4gMjApCi0jZGVmaW5lIFBIWV9CQl9QQV9HQUlOMTIzX1BBX0dBSU4zX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMCkgJiAweDNmZjAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3BhX2dhaW40NSAqLwotI2RlZmluZSBQSFlfQkJfUEFfR0FJTjQ1X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDlkZmMKLSNkZWZpbmUgUEhZX0JCX1BBX0dBSU40NV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5ZGZjCi0jZGVmaW5lIFBIWV9CQl9QQV9HQUlONDVfUEFfR0FJTjRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQkJfUEFfR0FJTjQ1X1BBX0dBSU40X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1BBX0dBSU40NV9QQV9HQUlONF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM2ZmCi0jZGVmaW5lIFBIWV9CQl9QQV9HQUlONDVfUEFfR0FJTjRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwM2ZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfUEFfR0FJTjQ1X1BBX0dBSU40X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDNmZikKLSNkZWZpbmUgUEhZX0JCX1BBX0dBSU40NV9QQV9HQUlONV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9CQl9QQV9HQUlONDVfUEFfR0FJTjVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQkJfUEFfR0FJTjQ1X1BBX0dBSU41X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwZmZjMDAKLSNkZWZpbmUgUEhZX0JCX1BBX0dBSU40NV9QQV9HQUlONV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDBmZmMwMCkgPj4gMTApCi0jZGVmaW5lIFBIWV9CQl9QQV9HQUlONDVfUEFfR0FJTjVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMCkgJiAweDAwMGZmYzAwKQotI2RlZmluZSBQSFlfQkJfUEFfR0FJTjQ1X1BBUFJEX0FEQVBUSVZFX1RBQkxFX1ZBTElEX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0JCX1BBX0dBSU40NV9QQVBSRF9BREFQVElWRV9UQUJMRV9WQUxJRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9CQl9QQV9HQUlONDVfUEFQUkRfQURBUFRJVkVfVEFCTEVfVkFMSURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMWYwMDAwMAotI2RlZmluZSBQSFlfQkJfUEFfR0FJTjQ1X1BBUFJEX0FEQVBUSVZFX1RBQkxFX1ZBTElEX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAxZjAwMDAwKSA+PiAyMCkKLSNkZWZpbmUgUEhZX0JCX1BBX0dBSU40NV9QQVBSRF9BREFQVElWRV9UQUJMRV9WQUxJRF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIwKSAmIDB4MDFmMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfcGFwcmRfcHJlX3Bvc3Rfc2NhbGVfMCAqLwotI2RlZmluZSBQSFlfQkJfUEFQUkRfUFJFX1BPU1RfU0NBTEVfMF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDllMDAKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1BSRV9QT1NUX1NDQUxFXzBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5ZTAwCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9QUkVfUE9TVF9TQ0FMRV8wX1BBUFJEX1BSRV9QT1NUX1NDQUxJTkdfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQkJfUEFQUkRfUFJFX1BPU1RfU0NBTEVfMF9QQVBSRF9QUkVfUE9TVF9TQ0FMSU5HXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1BSRV9QT1NUX1NDQUxFXzBfUEFQUkRfUFJFX1BPU1RfU0NBTElOR18wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDNmZmZmCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9QUkVfUE9TVF9TQ0FMRV8wX1BBUFJEX1BSRV9QT1NUX1NDQUxJTkdfMF9HRVQoeCkgICAgICAgICAgKCgoeCkgJiAweDAwMDNmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfUEFQUkRfUFJFX1BPU1RfU0NBTEVfMF9QQVBSRF9QUkVfUE9TVF9TQ0FMSU5HXzBfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAzZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl9wYXByZF9wcmVfcG9zdF9zY2FsZV8xICovCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9QUkVfUE9TVF9TQ0FMRV8xX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOWUwNAotI2RlZmluZSBQSFlfQkJfUEFQUkRfUFJFX1BPU1RfU0NBTEVfMV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDllMDQKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1BSRV9QT1NUX1NDQUxFXzFfUEFQUkRfUFJFX1BPU1RfU0NBTElOR18xX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9CQl9QQVBSRF9QUkVfUE9TVF9TQ0FMRV8xX1BBUFJEX1BSRV9QT1NUX1NDQUxJTkdfMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfUEFQUkRfUFJFX1BPU1RfU0NBTEVfMV9QQVBSRF9QUkVfUE9TVF9TQ0FMSU5HXzFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM2ZmZmYKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1BSRV9QT1NUX1NDQUxFXzFfUEFQUkRfUFJFX1BPU1RfU0NBTElOR18xX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIDB4MDAwM2ZmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9QUkVfUE9TVF9TQ0FMRV8xX1BBUFJEX1BSRV9QT1NUX1NDQUxJTkdfMV9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDNmZmZmKQotCi0vKiBtYWNyb3MgZm9yIEJCX3BhcHJkX3ByZV9wb3N0X3NjYWxlXzIgKi8KLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1BSRV9QT1NUX1NDQUxFXzJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5ZTA4Ci0jZGVmaW5lIFBIWV9CQl9QQVBSRF9QUkVfUE9TVF9TQ0FMRV8yX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOWUwOAotI2RlZmluZSBQSFlfQkJfUEFQUkRfUFJFX1BPU1RfU0NBTEVfMl9QQVBSRF9QUkVfUE9TVF9TQ0FMSU5HXzJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1BSRV9QT1NUX1NDQUxFXzJfUEFQUkRfUFJFX1BPU1RfU0NBTElOR18yX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9QUkVfUE9TVF9TQ0FMRV8yX1BBUFJEX1BSRV9QT1NUX1NDQUxJTkdfMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzZmZmZgotI2RlZmluZSBQSFlfQkJfUEFQUkRfUFJFX1BPU1RfU0NBTEVfMl9QQVBSRF9QUkVfUE9TVF9TQ0FMSU5HXzJfR0VUKHgpICAgICAgICAgICgoKHgpICYgMHgwMDAzZmZmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1BSRV9QT1NUX1NDQUxFXzJfUEFQUkRfUFJFX1BPU1RfU0NBTElOR18yX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwM2ZmZmYpCi0KLS8qIG1hY3JvcyBmb3IgQkJfcGFwcmRfcHJlX3Bvc3Rfc2NhbGVfMyAqLwotI2RlZmluZSBQSFlfQkJfUEFQUkRfUFJFX1BPU1RfU0NBTEVfM19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDllMGMKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1BSRV9QT1NUX1NDQUxFXzNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5ZTBjCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9QUkVfUE9TVF9TQ0FMRV8zX1BBUFJEX1BSRV9QT1NUX1NDQUxJTkdfM19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQkJfUEFQUkRfUFJFX1BPU1RfU0NBTEVfM19QQVBSRF9QUkVfUE9TVF9TQ0FMSU5HXzNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1BSRV9QT1NUX1NDQUxFXzNfUEFQUkRfUFJFX1BPU1RfU0NBTElOR18zX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDNmZmZmCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9QUkVfUE9TVF9TQ0FMRV8zX1BBUFJEX1BSRV9QT1NUX1NDQUxJTkdfM19HRVQoeCkgICAgICAgICAgKCgoeCkgJiAweDAwMDNmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfUEFQUkRfUFJFX1BPU1RfU0NBTEVfM19QQVBSRF9QUkVfUE9TVF9TQ0FMSU5HXzNfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAzZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl9wYXByZF9wcmVfcG9zdF9zY2FsZV80ICovCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9QUkVfUE9TVF9TQ0FMRV80X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOWUxMAotI2RlZmluZSBQSFlfQkJfUEFQUkRfUFJFX1BPU1RfU0NBTEVfNF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDllMTAKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1BSRV9QT1NUX1NDQUxFXzRfUEFQUkRfUFJFX1BPU1RfU0NBTElOR180X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9CQl9QQVBSRF9QUkVfUE9TVF9TQ0FMRV80X1BBUFJEX1BSRV9QT1NUX1NDQUxJTkdfNF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfUEFQUkRfUFJFX1BPU1RfU0NBTEVfNF9QQVBSRF9QUkVfUE9TVF9TQ0FMSU5HXzRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM2ZmZmYKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1BSRV9QT1NUX1NDQUxFXzRfUEFQUkRfUFJFX1BPU1RfU0NBTElOR180X0dFVCh4KSAgICAgICAgICAoKCh4KSAmIDB4MDAwM2ZmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9QUkVfUE9TVF9TQ0FMRV80X1BBUFJEX1BSRV9QT1NUX1NDQUxJTkdfNF9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDNmZmZmKQotCi0vKiBtYWNyb3MgZm9yIEJCX3BhcHJkX3ByZV9wb3N0X3NjYWxlXzUgKi8KLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1BSRV9QT1NUX1NDQUxFXzVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5ZTE0Ci0jZGVmaW5lIFBIWV9CQl9QQVBSRF9QUkVfUE9TVF9TQ0FMRV81X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOWUxNAotI2RlZmluZSBQSFlfQkJfUEFQUkRfUFJFX1BPU1RfU0NBTEVfNV9QQVBSRF9QUkVfUE9TVF9TQ0FMSU5HXzVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1BSRV9QT1NUX1NDQUxFXzVfUEFQUkRfUFJFX1BPU1RfU0NBTElOR181X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9QUkVfUE9TVF9TQ0FMRV81X1BBUFJEX1BSRV9QT1NUX1NDQUxJTkdfNV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzZmZmZgotI2RlZmluZSBQSFlfQkJfUEFQUkRfUFJFX1BPU1RfU0NBTEVfNV9QQVBSRF9QUkVfUE9TVF9TQ0FMSU5HXzVfR0VUKHgpICAgICAgICAgICgoKHgpICYgMHgwMDAzZmZmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1BSRV9QT1NUX1NDQUxFXzVfUEFQUkRfUFJFX1BPU1RfU0NBTElOR181X1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwM2ZmZmYpCi0KLS8qIG1hY3JvcyBmb3IgQkJfcGFwcmRfcHJlX3Bvc3Rfc2NhbGVfNiAqLwotI2RlZmluZSBQSFlfQkJfUEFQUkRfUFJFX1BPU1RfU0NBTEVfNl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDllMTgKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1BSRV9QT1NUX1NDQUxFXzZfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5ZTE4Ci0jZGVmaW5lIFBIWV9CQl9QQVBSRF9QUkVfUE9TVF9TQ0FMRV82X1BBUFJEX1BSRV9QT1NUX1NDQUxJTkdfNl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQkJfUEFQUkRfUFJFX1BPU1RfU0NBTEVfNl9QQVBSRF9QUkVfUE9TVF9TQ0FMSU5HXzZfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1BSRV9QT1NUX1NDQUxFXzZfUEFQUkRfUFJFX1BPU1RfU0NBTElOR182X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDNmZmZmCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9QUkVfUE9TVF9TQ0FMRV82X1BBUFJEX1BSRV9QT1NUX1NDQUxJTkdfNl9HRVQoeCkgICAgICAgICAgKCgoeCkgJiAweDAwMDNmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfUEFQUkRfUFJFX1BPU1RfU0NBTEVfNl9QQVBSRF9QUkVfUE9TVF9TQ0FMSU5HXzZfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAzZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl9wYXByZF9wcmVfcG9zdF9zY2FsZV83ICovCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9QUkVfUE9TVF9TQ0FMRV83X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOWUxYwotI2RlZmluZSBQSFlfQkJfUEFQUkRfUFJFX1BPU1RfU0NBTEVfN19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDllMWMKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1BSRV9QT1NUX1NDQUxFXzdfUEFQUkRfUFJFX1BPU1RfU0NBTElOR183X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9CQl9QQVBSRF9QUkVfUE9TVF9TQ0FMRV83X1BBUFJEX1BSRV9QT1NUX1NDQUxJTkdfN19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfUEFQUkRfUFJFX1BPU1RfU0NBTEVfN19QQVBSRF9QUkVfUE9TVF9TQ0FMSU5HXzdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM2ZmZmYKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1BSRV9QT1NUX1NDQUxFXzdfUEFQUkRfUFJFX1BPU1RfU0NBTElOR183X0dFVCh4KSAgICAgICAgICAoKCh4KSAmIDB4MDAwM2ZmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9QUkVfUE9TVF9TQ0FMRV83X1BBUFJEX1BSRV9QT1NUX1NDQUxJTkdfN19TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDNmZmZmKQotCi0vKiBtYWNyb3MgZm9yIEJCX3BhcHJkX21lbV90YWIgKi8KLSNkZWZpbmUgUEhZX0JCX1BBUFJEX01FTV9UQUJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA5ZTIwCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9NRU1fVEFCX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwOWUyMAotI2RlZmluZSBQSFlfQkJfUEFQUkRfTUVNX1RBQl9QQVBSRF9NRU1fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX01FTV9UQUJfUEFQUkRfTUVNX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9NRU1fVEFCX1BBUFJEX01FTV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDNmZmZmZgotI2RlZmluZSBQSFlfQkJfUEFQUkRfTUVNX1RBQl9QQVBSRF9NRU1fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDNmZmZmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX01FTV9UQUJfUEFQUkRfTUVNX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAzZmZmZmYpCi0KLS8qIG1hY3JvcyBmb3IgQkJfcGVha19kZXRfY3RybF8xICovCi0jZGVmaW5lIFBIWV9CQl9QRUFLX0RFVF9DVFJMXzFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTAwMAotI2RlZmluZSBQSFlfQkJfUEVBS19ERVRfQ1RSTF8xX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEwMDAKLSNkZWZpbmUgUEhZX0JCX1BFQUtfREVUX0NUUkxfMV9VU0VfT0NfR0FJTl9UQUJMRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9QRUFLX0RFVF9DVFJMXzFfVVNFX09DX0dBSU5fVEFCTEVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfUEVBS19ERVRfQ1RSTF8xX1VTRV9PQ19HQUlOX1RBQkxFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUEhZX0JCX1BFQUtfREVUX0NUUkxfMV9VU0VfT0NfR0FJTl9UQUJMRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDEpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9QRUFLX0RFVF9DVFJMXzFfVVNFX09DX0dBSU5fVEFCTEVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDAxKQotI2RlZmluZSBQSFlfQkJfUEVBS19ERVRfQ1RSTF8xX1VTRV9QRUFLX0RFVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0JCX1BFQUtfREVUX0NUUkxfMV9VU0VfUEVBS19ERVRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9CQl9QRUFLX0RFVF9DVFJMXzFfVVNFX1BFQUtfREVUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBQSFlfQkJfUEVBS19ERVRfQ1RSTF8xX1VTRV9QRUFLX0RFVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMikgPj4gMSkKLSNkZWZpbmUgUEhZX0JCX1BFQUtfREVUX0NUUkxfMV9VU0VfUEVBS19ERVRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxKSAmIDB4MDAwMDAwMDIpCi0jZGVmaW5lIFBIWV9CQl9QRUFLX0RFVF9DVFJMXzFfUEVBS19ERVRfV0lOX0xFTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQkJfUEVBS19ERVRfQ1RSTF8xX1BFQUtfREVUX1dJTl9MRU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0JCX1BFQUtfREVUX0NUUkxfMV9QRUFLX0RFVF9XSU5fTEVOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGZjCi0jZGVmaW5lIFBIWV9CQl9QRUFLX0RFVF9DVFJMXzFfUEVBS19ERVRfV0lOX0xFTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMGZjKSA+PiAyKQotI2RlZmluZSBQSFlfQkJfUEVBS19ERVRfQ1RSTF8xX1BFQUtfREVUX1dJTl9MRU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIpICYgMHgwMDAwMDBmYykKLSNkZWZpbmUgUEhZX0JCX1BFQUtfREVUX0NUUkxfMV9QRUFLX0RFVF9UQUxMWV9USFJfTE9XX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9CQl9QRUFLX0RFVF9DVFJMXzFfUEVBS19ERVRfVEFMTFlfVEhSX0xPV19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQkJfUEVBS19ERVRfQ1RSTF8xX1BFQUtfREVUX1RBTExZX1RIUl9MT1dfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFmMDAKLSNkZWZpbmUgUEhZX0JCX1BFQUtfREVUX0NUUkxfMV9QRUFLX0RFVF9UQUxMWV9USFJfTE9XX0dFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDFmMDApID4+IDgpCi0jZGVmaW5lIFBIWV9CQl9QRUFLX0RFVF9DVFJMXzFfUEVBS19ERVRfVEFMTFlfVEhSX0xPV19TRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAxZjAwKQotI2RlZmluZSBQSFlfQkJfUEVBS19ERVRfQ1RSTF8xX1BFQUtfREVUX1RBTExZX1RIUl9NRURfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0JCX1BFQUtfREVUX0NUUkxfMV9QRUFLX0RFVF9UQUxMWV9USFJfTUVEX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9CQl9QRUFLX0RFVF9DVFJMXzFfUEVBS19ERVRfVEFMTFlfVEhSX01FRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzZTAwMAotI2RlZmluZSBQSFlfQkJfUEVBS19ERVRfQ1RSTF8xX1BFQUtfREVUX1RBTExZX1RIUl9NRURfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDNlMDAwKSA+PiAxMykKLSNkZWZpbmUgUEhZX0JCX1BFQUtfREVUX0NUUkxfMV9QRUFLX0RFVF9UQUxMWV9USFJfTUVEX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEzKSAmIDB4MDAwM2UwMDApCi0jZGVmaW5lIFBIWV9CQl9QRUFLX0RFVF9DVFJMXzFfUEVBS19ERVRfVEFMTFlfVEhSX0hJR0hfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBQSFlfQkJfUEVBS19ERVRfQ1RSTF8xX1BFQUtfREVUX1RBTExZX1RIUl9ISUdIX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUEhZX0JCX1BFQUtfREVUX0NUUkxfMV9QRUFLX0RFVF9UQUxMWV9USFJfSElHSF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwN2MwMDAwCi0jZGVmaW5lIFBIWV9CQl9QRUFLX0RFVF9DVFJMXzFfUEVBS19ERVRfVEFMTFlfVEhSX0hJR0hfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDA3YzAwMDApID4+IDE4KQotI2RlZmluZSBQSFlfQkJfUEVBS19ERVRfQ1RSTF8xX1BFQUtfREVUX1RBTExZX1RIUl9ISUdIX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTgpICYgMHgwMDdjMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1BFQUtfREVUX0NUUkxfMV9QRUFLX0RFVF9TRVRUTElOR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9CQl9QRUFLX0RFVF9DVFJMXzFfUEVBS19ERVRfU0VUVExJTkdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQkJfUEVBS19ERVRfQ1RSTF8xX1BFQUtfREVUX1NFVFRMSU5HX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M2Y4MDAwMDAKLSNkZWZpbmUgUEhZX0JCX1BFQUtfREVUX0NUUkxfMV9QRUFLX0RFVF9TRVRUTElOR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzZjgwMDAwMCkgPj4gMjMpCi0jZGVmaW5lIFBIWV9CQl9QRUFLX0RFVF9DVFJMXzFfUEVBS19ERVRfU0VUVExJTkdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMykgJiAweDNmODAwMDAwKQotI2RlZmluZSBQSFlfQkJfUEVBS19ERVRfQ1RSTF8xX1BXRF9QS0RFVF9EVVJJTkdfQ0FMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0JCX1BFQUtfREVUX0NUUkxfMV9QV0RfUEtERVRfRFVSSU5HX0NBTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9CQl9QRUFLX0RFVF9DVFJMXzFfUFdEX1BLREVUX0RVUklOR19DQUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAotI2RlZmluZSBQSFlfQkJfUEVBS19ERVRfQ1RSTF8xX1BXRF9QS0RFVF9EVVJJTkdfQ0FMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDQwMDAwMDAwKSA+PiAzMCkKLSNkZWZpbmUgUEhZX0JCX1BFQUtfREVUX0NUUkxfMV9QV0RfUEtERVRfRFVSSU5HX0NBTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMwKSAmIDB4NDAwMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9QRUFLX0RFVF9DVFJMXzFfUFdEX1BLREVUX0RVUklOR19SWF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfUEVBS19ERVRfQ1RSTF8xX1BXRF9QS0RFVF9EVVJJTkdfUlhfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX1BFQUtfREVUX0NUUkxfMV9QV0RfUEtERVRfRFVSSU5HX1JYX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9QRUFLX0RFVF9DVFJMXzFfUFdEX1BLREVUX0RVUklOR19SWF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ODAwMDAwMDApID4+IDMxKQotI2RlZmluZSBQSFlfQkJfUEVBS19ERVRfQ1RSTF8xX1BXRF9QS0RFVF9EVVJJTkdfUlhfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMzEpICYgMHg4MDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9wZWFrX2RldF9jdHJsXzIgKi8KLSNkZWZpbmUgUEhZX0JCX1BFQUtfREVUX0NUUkxfMl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMDA0Ci0jZGVmaW5lIFBIWV9CQl9QRUFLX0RFVF9DVFJMXzJfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTAwNAotI2RlZmluZSBQSFlfQkJfUEVBS19ERVRfQ1RSTF8yX1JGU0FUXzJfQUREX1JGR0FJTl9ERUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0JCX1BFQUtfREVUX0NUUkxfMl9SRlNBVF8yX0FERF9SRkdBSU5fREVMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9QRUFLX0RFVF9DVFJMXzJfUkZTQVRfMl9BRERfUkZHQUlOX0RFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNmZgotI2RlZmluZSBQSFlfQkJfUEVBS19ERVRfQ1RSTF8yX1JGU0FUXzJfQUREX1JGR0FJTl9ERUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDNmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1BFQUtfREVUX0NUUkxfMl9SRlNBVF8yX0FERF9SRkdBSU5fREVMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAzZmYpCi0jZGVmaW5lIFBIWV9CQl9QRUFLX0RFVF9DVFJMXzJfUkZfR0FJTl9EUk9QX0RCX0xPV19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQkJfUEVBS19ERVRfQ1RSTF8yX1JGX0dBSU5fRFJPUF9EQl9MT1dfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0JCX1BFQUtfREVUX0NUUkxfMl9SRl9HQUlOX0RST1BfREJfTE9XX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA3YzAwCi0jZGVmaW5lIFBIWV9CQl9QRUFLX0RFVF9DVFJMXzJfUkZfR0FJTl9EUk9QX0RCX0xPV19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDdjMDApID4+IDEwKQotI2RlZmluZSBQSFlfQkJfUEVBS19ERVRfQ1RSTF8yX1JGX0dBSU5fRFJPUF9EQl9MT1dfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTApICYgMHgwMDAwN2MwMCkKLSNkZWZpbmUgUEhZX0JCX1BFQUtfREVUX0NUUkxfMl9SRl9HQUlOX0RST1BfREJfTUVEX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9CQl9QRUFLX0RFVF9DVFJMXzJfUkZfR0FJTl9EUk9QX0RCX01FRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQkJfUEVBS19ERVRfQ1RSTF8yX1JGX0dBSU5fRFJPUF9EQl9NRURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwZjgwMDAKLSNkZWZpbmUgUEhZX0JCX1BFQUtfREVUX0NUUkxfMl9SRl9HQUlOX0RST1BfREJfTUVEX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDBmODAwMCkgPj4gMTUpCi0jZGVmaW5lIFBIWV9CQl9QRUFLX0RFVF9DVFJMXzJfUkZfR0FJTl9EUk9QX0RCX01FRF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNSkgJiAweDAwMGY4MDAwKQotI2RlZmluZSBQSFlfQkJfUEVBS19ERVRfQ1RSTF8yX1JGX0dBSU5fRFJPUF9EQl9ISUdIX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0JCX1BFQUtfREVUX0NUUkxfMl9SRl9HQUlOX0RST1BfREJfSElHSF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9CQl9QRUFLX0RFVF9DVFJMXzJfUkZfR0FJTl9EUk9QX0RCX0hJR0hfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMWYwMDAwMAotI2RlZmluZSBQSFlfQkJfUEVBS19ERVRfQ1RSTF8yX1JGX0dBSU5fRFJPUF9EQl9ISUdIX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAxZjAwMDAwKSA+PiAyMCkKLSNkZWZpbmUgUEhZX0JCX1BFQUtfREVUX0NUUkxfMl9SRl9HQUlOX0RST1BfREJfSElHSF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIwKSAmIDB4MDFmMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9QRUFLX0RFVF9DVFJMXzJfUkZfR0FJTl9EUk9QX0RCX05PTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQkJfUEVBS19ERVRfQ1RSTF8yX1JGX0dBSU5fRFJPUF9EQl9OT05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0JCX1BFQUtfREVUX0NUUkxfMl9SRl9HQUlOX0RST1BfREJfTk9OX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNlMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9QRUFLX0RFVF9DVFJMXzJfUkZfR0FJTl9EUk9QX0RCX05PTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4M2UwMDAwMDApID4+IDI1KQotI2RlZmluZSBQSFlfQkJfUEVBS19ERVRfQ1RSTF8yX1JGX0dBSU5fRFJPUF9EQl9OT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjUpICYgMHgzZTAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9yeF9nYWluX2JvdW5kc18xICovCi0jZGVmaW5lIFBIWV9CQl9SWF9HQUlOX0JPVU5EU18xX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTAwOAotI2RlZmluZSBQSFlfQkJfUlhfR0FJTl9CT1VORFNfMV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEwMDgKLSNkZWZpbmUgUEhZX0JCX1JYX0dBSU5fQk9VTkRTXzFfUlhfTUFYX01CX0dBSU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9CQl9SWF9HQUlOX0JPVU5EU18xX1JYX01BWF9NQl9HQUlOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfUlhfR0FJTl9CT1VORFNfMV9SWF9NQVhfTUJfR0FJTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgUEhZX0JCX1JYX0dBSU5fQk9VTkRTXzFfUlhfTUFYX01CX0dBSU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9SWF9HQUlOX0JPVU5EU18xX1JYX01BWF9NQl9HQUlOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMGZmKQotI2RlZmluZSBQSFlfQkJfUlhfR0FJTl9CT1VORFNfMV9SWF9NQVhfUkZfR0FJTl9SRUZfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0JCX1JYX0dBSU5fQk9VTkRTXzFfUlhfTUFYX1JGX0dBSU5fUkVGX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9SWF9HQUlOX0JPVU5EU18xX1JYX01BWF9SRl9HQUlOX1JFRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBQSFlfQkJfUlhfR0FJTl9CT1VORFNfMV9SWF9NQVhfUkZfR0FJTl9SRUZfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwZmYwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0JCX1JYX0dBSU5fQk9VTkRTXzFfUlhfTUFYX1JGX0dBSU5fUkVGX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMGZmMDApCi0jZGVmaW5lIFBIWV9CQl9SWF9HQUlOX0JPVU5EU18xX1JYX01BWF9SRl9HQUlOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQkJfUlhfR0FJTl9CT1VORFNfMV9SWF9NQVhfUkZfR0FJTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0JCX1JYX0dBSU5fQk9VTkRTXzFfUlhfTUFYX1JGX0dBSU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwZmYwMDAwCi0jZGVmaW5lIFBIWV9CQl9SWF9HQUlOX0JPVU5EU18xX1JYX01BWF9SRl9HQUlOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDBmZjAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQkJfUlhfR0FJTl9CT1VORFNfMV9SWF9NQVhfUkZfR0FJTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMGZmMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1JYX0dBSU5fQk9VTkRTXzFfUlhfT0NHQUlOX1NFTF8yR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9CQl9SWF9HQUlOX0JPVU5EU18xX1JYX09DR0FJTl9TRUxfMkdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQkJfUlhfR0FJTl9CT1VORFNfMV9SWF9PQ0dBSU5fU0VMXzJHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1JYX0dBSU5fQk9VTkRTXzFfUlhfT0NHQUlOX1NFTF8yR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMTAwMDAwMCkgPj4gMjQpCi0jZGVmaW5lIFBIWV9CQl9SWF9HQUlOX0JPVU5EU18xX1JYX09DR0FJTl9TRUxfMkdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNCkgJiAweDAxMDAwMDAwKQotI2RlZmluZSBQSFlfQkJfUlhfR0FJTl9CT1VORFNfMV9SWF9PQ0dBSU5fU0VMXzVHX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0JCX1JYX0dBSU5fQk9VTkRTXzFfUlhfT0NHQUlOX1NFTF81R19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9CQl9SWF9HQUlOX0JPVU5EU18xX1JYX09DR0FJTl9TRUxfNUdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAotI2RlZmluZSBQSFlfQkJfUlhfR0FJTl9CT1VORFNfMV9SWF9PQ0dBSU5fU0VMXzVHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAyMDAwMDAwKSA+PiAyNSkKLSNkZWZpbmUgUEhZX0JCX1JYX0dBSU5fQk9VTkRTXzFfUlhfT0NHQUlOX1NFTF81R19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI1KSAmIDB4MDIwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfcnhfZ2Fpbl9ib3VuZHNfMiAqLwotI2RlZmluZSBQSFlfQkJfUlhfR0FJTl9CT1VORFNfMl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEwMGMKLSNkZWZpbmUgUEhZX0JCX1JYX0dBSU5fQk9VTkRTXzJfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMDBjCi0jZGVmaW5lIFBIWV9CQl9SWF9HQUlOX0JPVU5EU18yX0dDX1JTU0lfTE9XX0RCX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQkJfUlhfR0FJTl9CT1VORFNfMl9HQ19SU1NJX0xPV19EQl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1JYX0dBSU5fQk9VTkRTXzJfR0NfUlNTSV9MT1dfREJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIFBIWV9CQl9SWF9HQUlOX0JPVU5EU18yX0dDX1JTU0lfTE9XX0RCX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMGZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfUlhfR0FJTl9CT1VORFNfMl9HQ19SU1NJX0xPV19EQl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDBmZikKLSNkZWZpbmUgUEhZX0JCX1JYX0dBSU5fQk9VTkRTXzJfUkZfR0FJTl9SRUZfQkFTRV9BRERSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9CQl9SWF9HQUlOX0JPVU5EU18yX1JGX0dBSU5fUkVGX0JBU0VfQUREUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQkJfUlhfR0FJTl9CT1VORFNfMl9SRl9HQUlOX1JFRl9CQVNFX0FERFJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGZmMDAKLSNkZWZpbmUgUEhZX0JCX1JYX0dBSU5fQk9VTkRTXzJfUkZfR0FJTl9SRUZfQkFTRV9BRERSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMGZmMDApID4+IDgpCi0jZGVmaW5lIFBIWV9CQl9SWF9HQUlOX0JPVU5EU18yX1JGX0dBSU5fUkVGX0JBU0VfQUREUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDBmZjAwKQotI2RlZmluZSBQSFlfQkJfUlhfR0FJTl9CT1VORFNfMl9SRl9HQUlOX0JBU0VfQUREUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0JCX1JYX0dBSU5fQk9VTkRTXzJfUkZfR0FJTl9CQVNFX0FERFJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9SWF9HQUlOX0JPVU5EU18yX1JGX0dBSU5fQkFTRV9BRERSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMGZmMDAwMAotI2RlZmluZSBQSFlfQkJfUlhfR0FJTl9CT1VORFNfMl9SRl9HQUlOX0JBU0VfQUREUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwZmYwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0JCX1JYX0dBSU5fQk9VTkRTXzJfUkZfR0FJTl9CQVNFX0FERFJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDBmZjAwMDApCi0jZGVmaW5lIFBIWV9CQl9SWF9HQUlOX0JPVU5EU18yX1JGX0dBSU5fRElWX0JBU0VfQUREUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfUlhfR0FJTl9CT1VORFNfMl9SRl9HQUlOX0RJVl9CQVNFX0FERFJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0JCX1JYX0dBSU5fQk9VTkRTXzJfUkZfR0FJTl9ESVZfQkFTRV9BRERSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9SWF9HQUlOX0JPVU5EU18yX1JGX0dBSU5fRElWX0JBU0VfQUREUl9HRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZmYwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQkJfUlhfR0FJTl9CT1VORFNfMl9SRl9HQUlOX0RJVl9CQVNFX0FERFJfU0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjQpICYgMHhmZjAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9wZWFrX2RldF9jYWxfY3RybCAqLwotI2RlZmluZSBQSFlfQkJfUEVBS19ERVRfQ0FMX0NUUkxfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEwMTAKLSNkZWZpbmUgUEhZX0JCX1BFQUtfREVUX0NBTF9DVFJMX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMDEwCi0jZGVmaW5lIFBIWV9CQl9QRUFLX0RFVF9DQUxfQ1RSTF9QS0RFVF9DQUxfV0lOX1RIUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQkJfUEVBS19ERVRfQ0FMX0NUUkxfUEtERVRfQ0FMX1dJTl9USFJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1BFQUtfREVUX0NBTF9DVFJMX1BLREVUX0NBTF9XSU5fVEhSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNmCi0jZGVmaW5lIFBIWV9CQl9QRUFLX0RFVF9DQUxfQ1RSTF9QS0RFVF9DQUxfV0lOX1RIUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDNmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfUEVBS19ERVRfQ0FMX0NUUkxfUEtERVRfQ0FMX1dJTl9USFJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAzZikKLSNkZWZpbmUgUEhZX0JCX1BFQUtfREVUX0NBTF9DVFJMX1BLREVUX0NBTF9CSUFTX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9CQl9QRUFLX0RFVF9DQUxfQ1RSTF9QS0RFVF9DQUxfQklBU19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQkJfUEVBS19ERVRfQ0FMX0NUUkxfUEtERVRfQ0FMX0JJQVNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBmYzAKLSNkZWZpbmUgUEhZX0JCX1BFQUtfREVUX0NBTF9DVFJMX1BLREVUX0NBTF9CSUFTX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDBmYzApID4+IDYpCi0jZGVmaW5lIFBIWV9CQl9QRUFLX0RFVF9DQUxfQ1RSTF9QS0RFVF9DQUxfQklBU19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNikgJiAweDAwMDAwZmMwKQotI2RlZmluZSBQSFlfQkJfUEVBS19ERVRfQ0FMX0NUUkxfUEtERVRfQ0FMX01FQVNfVElNRV9TRUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0JCX1BFQUtfREVUX0NBTF9DVFJMX1BLREVUX0NBTF9NRUFTX1RJTUVfU0VMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9CQl9QRUFLX0RFVF9DQUxfQ1RSTF9QS0RFVF9DQUxfTUVBU19USU1FX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMzAwMAotI2RlZmluZSBQSFlfQkJfUEVBS19ERVRfQ0FMX0NUUkxfUEtERVRfQ0FMX01FQVNfVElNRV9TRUxfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAzMDAwKSA+PiAxMikKLSNkZWZpbmUgUEhZX0JCX1BFQUtfREVUX0NBTF9DVFJMX1BLREVUX0NBTF9NRUFTX1RJTUVfU0VMX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IDEyKSAmIDB4MDAwMDMwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfYWdjX2RpZ19kY19jdHJsICovCi0jZGVmaW5lIFBIWV9CQl9BR0NfRElHX0RDX0NUUkxfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTAxNAotI2RlZmluZSBQSFlfQkJfQUdDX0RJR19EQ19DVFJMX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEwMTQKLSNkZWZpbmUgUEhZX0JCX0FHQ19ESUdfRENfQ1RSTF9VU0VfRElHX0RDX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9BR0NfRElHX0RDX0NUUkxfVVNFX0RJR19EQ19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfQUdDX0RJR19EQ19DVFJMX1VTRV9ESUdfRENfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUEhZX0JCX0FHQ19ESUdfRENfQ1RSTF9VU0VfRElHX0RDX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDEpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9BR0NfRElHX0RDX0NUUkxfVVNFX0RJR19EQ19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDAxKQotI2RlZmluZSBQSFlfQkJfQUdDX0RJR19EQ19DVFJMX0RJR19EQ19TQ0FMRV9CSUFTX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0JCX0FHQ19ESUdfRENfQ1RSTF9ESUdfRENfU0NBTEVfQklBU19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9CQl9BR0NfRElHX0RDX0NUUkxfRElHX0RDX1NDQUxFX0JJQVNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwZQotI2RlZmluZSBQSFlfQkJfQUdDX0RJR19EQ19DVFJMX0RJR19EQ19TQ0FMRV9CSUFTX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwZSkgPj4gMSkKLSNkZWZpbmUgUEhZX0JCX0FHQ19ESUdfRENfQ1RSTF9ESUdfRENfU0NBTEVfQklBU19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxKSAmIDB4MDAwMDAwMGUpCi0jZGVmaW5lIFBIWV9CQl9BR0NfRElHX0RDX0NUUkxfRElHX0RDX0NPUlJFQ1RfQ0FQX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQkJfQUdDX0RJR19EQ19DVFJMX0RJR19EQ19DT1JSRUNUX0NBUF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0JCX0FHQ19ESUdfRENfQ1RSTF9ESUdfRENfQ09SUkVDVF9DQVBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM2YwCi0jZGVmaW5lIFBIWV9CQl9BR0NfRElHX0RDX0NUUkxfRElHX0RDX0NPUlJFQ1RfQ0FQX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwM2YwKSA+PiA0KQotI2RlZmluZSBQSFlfQkJfQUdDX0RJR19EQ19DVFJMX0RJR19EQ19DT1JSRUNUX0NBUF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDQpICYgMHgwMDAwMDNmMCkKLSNkZWZpbmUgUEhZX0JCX0FHQ19ESUdfRENfQ1RSTF9ESUdfRENfTUlYRVJfU0VMX01BU0tfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9BR0NfRElHX0RDX0NUUkxfRElHX0RDX01JWEVSX1NFTF9NQVNLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQkJfQUdDX0RJR19EQ19DVFJMX0RJR19EQ19NSVhFUl9TRUxfTUFTS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZjAwMDAKLSNkZWZpbmUgUEhZX0JCX0FHQ19ESUdfRENfQ1RSTF9ESUdfRENfTUlYRVJfU0VMX01BU0tfR0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhmZmZmMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9CQl9BR0NfRElHX0RDX0NUUkxfRElHX0RDX01JWEVSX1NFTF9NQVNLX1NFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweGZmZmYwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX2FnY19kaWdfZGNfc3RhdHVzX2lfYjAgKi8KLSNkZWZpbmUgUEhZX0JCX0FHQ19ESUdfRENfU1RBVFVTX0lfQjBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMDE4Ci0jZGVmaW5lIFBIWV9CQl9BR0NfRElHX0RDX1NUQVRVU19JX0IwX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTAxOAotI2RlZmluZSBQSFlfQkJfQUdDX0RJR19EQ19TVEFUVVNfSV9CMF9ESUdfRENfQzFfUkVTX0lfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0JCX0FHQ19ESUdfRENfU1RBVFVTX0lfQjBfRElHX0RDX0MxX1JFU19JXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9BR0NfRElHX0RDX1NUQVRVU19JX0IwX0RJR19EQ19DMV9SRVNfSV8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDFmZgotI2RlZmluZSBQSFlfQkJfQUdDX0RJR19EQ19TVEFUVVNfSV9CMF9ESUdfRENfQzFfUkVTX0lfMF9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDFmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0FHQ19ESUdfRENfU1RBVFVTX0lfQjBfRElHX0RDX0MyX1JFU19JXzBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9CQl9BR0NfRElHX0RDX1NUQVRVU19JX0IwX0RJR19EQ19DMl9SRVNfSV8wX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQkJfQUdDX0RJR19EQ19TVEFUVVNfSV9CMF9ESUdfRENfQzJfUkVTX0lfMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM2ZlMDAKLSNkZWZpbmUgUEhZX0JCX0FHQ19ESUdfRENfU1RBVFVTX0lfQjBfRElHX0RDX0MyX1JFU19JXzBfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwM2ZlMDApID4+IDkpCi0jZGVmaW5lIFBIWV9CQl9BR0NfRElHX0RDX1NUQVRVU19JX0IwX0RJR19EQ19DM19SRVNfSV8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQkJfQUdDX0RJR19EQ19TVEFUVVNfSV9CMF9ESUdfRENfQzNfUkVTX0lfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUEhZX0JCX0FHQ19ESUdfRENfU1RBVFVTX0lfQjBfRElHX0RDX0MzX1JFU19JXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3ZmMwMDAwCi0jZGVmaW5lIFBIWV9CQl9BR0NfRElHX0RDX1NUQVRVU19JX0IwX0RJR19EQ19DM19SRVNfSV8wX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDdmYzAwMDApID4+IDE4KQotCi0vKiBtYWNyb3MgZm9yIEJCX2FnY19kaWdfZGNfc3RhdHVzX3FfYjAgKi8KLSNkZWZpbmUgUEhZX0JCX0FHQ19ESUdfRENfU1RBVFVTX1FfQjBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMDFjCi0jZGVmaW5lIFBIWV9CQl9BR0NfRElHX0RDX1NUQVRVU19RX0IwX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTAxYwotI2RlZmluZSBQSFlfQkJfQUdDX0RJR19EQ19TVEFUVVNfUV9CMF9ESUdfRENfQzFfUkVTX1FfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0JCX0FHQ19ESUdfRENfU1RBVFVTX1FfQjBfRElHX0RDX0MxX1JFU19RXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9BR0NfRElHX0RDX1NUQVRVU19RX0IwX0RJR19EQ19DMV9SRVNfUV8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDFmZgotI2RlZmluZSBQSFlfQkJfQUdDX0RJR19EQ19TVEFUVVNfUV9CMF9ESUdfRENfQzFfUkVTX1FfMF9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDFmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0FHQ19ESUdfRENfU1RBVFVTX1FfQjBfRElHX0RDX0MyX1JFU19RXzBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9CQl9BR0NfRElHX0RDX1NUQVRVU19RX0IwX0RJR19EQ19DMl9SRVNfUV8wX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQkJfQUdDX0RJR19EQ19TVEFUVVNfUV9CMF9ESUdfRENfQzJfUkVTX1FfMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM2ZlMDAKLSNkZWZpbmUgUEhZX0JCX0FHQ19ESUdfRENfU1RBVFVTX1FfQjBfRElHX0RDX0MyX1JFU19RXzBfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwM2ZlMDApID4+IDkpCi0jZGVmaW5lIFBIWV9CQl9BR0NfRElHX0RDX1NUQVRVU19RX0IwX0RJR19EQ19DM19SRVNfUV8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQkJfQUdDX0RJR19EQ19TVEFUVVNfUV9CMF9ESUdfRENfQzNfUkVTX1FfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUEhZX0JCX0FHQ19ESUdfRENfU1RBVFVTX1FfQjBfRElHX0RDX0MzX1JFU19RXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3ZmMwMDAwCi0jZGVmaW5lIFBIWV9CQl9BR0NfRElHX0RDX1NUQVRVU19RX0IwX0RJR19EQ19DM19SRVNfUV8wX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDdmYzAwMDApID4+IDE4KQotCi0vKiBtYWNyb3MgZm9yIEJCX2JiYl90eGZpcl8wICovCi0jZGVmaW5lIFBIWV9CQl9CQkJfVFhGSVJfMF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTFmNAotI2RlZmluZSBQSFlfQkJfQkJCX1RYRklSXzBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGExZjQKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWEZJUl8wX1RYRklSX0NPRUZGX0gwX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9CQl9CQkJfVFhGSVJfMF9UWEZJUl9DT0VGRl9IMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfQkJCX1RYRklSXzBfVFhGSVJfQ09FRkZfSDBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGYKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWEZJUl8wX1RYRklSX0NPRUZGX0gwX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMGYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9CQkJfVFhGSVJfMF9UWEZJUl9DT0VGRl9IMF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDBmKQotI2RlZmluZSBQSFlfQkJfQkJCX1RYRklSXzBfVFhGSVJfQ09FRkZfSDFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWEZJUl8wX1RYRklSX0NPRUZGX0gxX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9CQkJfVFhGSVJfMF9UWEZJUl9DT0VGRl9IMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGYwMAotI2RlZmluZSBQSFlfQkJfQkJCX1RYRklSXzBfVFhGSVJfQ09FRkZfSDFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMGYwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWEZJUl8wX1RYRklSX0NPRUZGX0gxX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDBmMDApCi0jZGVmaW5lIFBIWV9CQl9CQkJfVFhGSVJfMF9UWEZJUl9DT0VGRl9IMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQkJfQkJCX1RYRklSXzBfVFhGSVJfQ09FRkZfSDJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWEZJUl8wX1RYRklSX0NPRUZGX0gyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMWYwMDAwCi0jZGVmaW5lIFBIWV9CQl9CQkJfVFhGSVJfMF9UWEZJUl9DT0VGRl9IMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAxZjAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQkJfQkJCX1RYRklSXzBfVFhGSVJfQ09FRkZfSDJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMDFmMDAwMCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWEZJUl8wX1RYRklSX0NPRUZGX0gzX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9CQl9CQkJfVFhGSVJfMF9UWEZJUl9DT0VGRl9IM19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQkJfQkJCX1RYRklSXzBfVFhGSVJfQ09FRkZfSDNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWYwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWEZJUl8wX1RYRklSX0NPRUZGX0gzX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxZjAwMDAwMCkgPj4gMjQpCi0jZGVmaW5lIFBIWV9CQl9CQkJfVFhGSVJfMF9UWEZJUl9DT0VGRl9IM19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNCkgJiAweDFmMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX2JiYl90eGZpcl8xICovCi0jZGVmaW5lIFBIWV9CQl9CQkJfVFhGSVJfMV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTFmOAotI2RlZmluZSBQSFlfQkJfQkJCX1RYRklSXzFfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGExZjgKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWEZJUl8xX1RYRklSX0NPRUZGX0g0X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9CQl9CQkJfVFhGSVJfMV9UWEZJUl9DT0VGRl9INF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfQkJCX1RYRklSXzFfVFhGSVJfQ09FRkZfSDRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM2YKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWEZJUl8xX1RYRklSX0NPRUZGX0g0X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwM2YpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9CQkJfVFhGSVJfMV9UWEZJUl9DT0VGRl9INF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDNmKQotI2RlZmluZSBQSFlfQkJfQkJCX1RYRklSXzFfVFhGSVJfQ09FRkZfSDVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWEZJUl8xX1RYRklSX0NPRUZGX0g1X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9CQkJfVFhGSVJfMV9UWEZJUl9DT0VGRl9INV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwM2YwMAotI2RlZmluZSBQSFlfQkJfQkJCX1RYRklSXzFfVFhGSVJfQ09FRkZfSDVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwM2YwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWEZJUl8xX1RYRklSX0NPRUZGX0g1X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDNmMDApCi0jZGVmaW5lIFBIWV9CQl9CQkJfVFhGSVJfMV9UWEZJUl9DT0VGRl9INl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBQSFlfQkJfQkJCX1RYRklSXzFfVFhGSVJfQ09FRkZfSDZfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWEZJUl8xX1RYRklSX0NPRUZGX0g2X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwN2YwMDAwCi0jZGVmaW5lIFBIWV9CQl9CQkJfVFhGSVJfMV9UWEZJUl9DT0VGRl9INl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDA3ZjAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQkJfQkJCX1RYRklSXzFfVFhGSVJfQ09FRkZfSDZfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMDdmMDAwMCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWEZJUl8xX1RYRklSX0NPRUZGX0g3X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9CQl9CQkJfVFhGSVJfMV9UWEZJUl9DT0VGRl9IN19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQkJfQkJCX1RYRklSXzFfVFhGSVJfQ09FRkZfSDdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N2YwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWEZJUl8xX1RYRklSX0NPRUZGX0g3X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3ZjAwMDAwMCkgPj4gMjQpCi0jZGVmaW5lIFBIWV9CQl9CQkJfVFhGSVJfMV9UWEZJUl9DT0VGRl9IN19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNCkgJiAweDdmMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX2JiYl90eGZpcl8yICovCi0jZGVmaW5lIFBIWV9CQl9CQkJfVFhGSVJfMl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTFmYwotI2RlZmluZSBQSFlfQkJfQkJCX1RYRklSXzJfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGExZmMKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWEZJUl8yX1RYRklSX0NPRUZGX0g4X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9CQl9CQkJfVFhGSVJfMl9UWEZJUl9DT0VGRl9IOF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfQkJCX1RYRklSXzJfVFhGSVJfQ09FRkZfSDhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWEZJUl8yX1RYRklSX0NPRUZGX0g4X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9CQkJfVFhGSVJfMl9UWEZJUl9DT0VGRl9IOF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMGZmKQotI2RlZmluZSBQSFlfQkJfQkJCX1RYRklSXzJfVFhGSVJfQ09FRkZfSDlfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWEZJUl8yX1RYRklSX0NPRUZGX0g5X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9CQkJfVFhGSVJfMl9UWEZJUl9DT0VGRl9IOV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBQSFlfQkJfQkJCX1RYRklSXzJfVFhGSVJfQ09FRkZfSDlfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwZmYwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWEZJUl8yX1RYRklSX0NPRUZGX0g5X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMGZmMDApCi0jZGVmaW5lIFBIWV9CQl9CQkJfVFhGSVJfMl9UWEZJUl9DT0VGRl9IMTBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQkJfQkJCX1RYRklSXzJfVFhGSVJfQ09FRkZfSDEwX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWEZJUl8yX1RYRklSX0NPRUZGX0gxMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwZmYwMDAwCi0jZGVmaW5lIFBIWV9CQl9CQkJfVFhGSVJfMl9UWEZJUl9DT0VGRl9IMTBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDBmZjAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQkJfQkJCX1RYRklSXzJfVFhGSVJfQ09FRkZfSDEwX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMGZmMDAwMCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWEZJUl8yX1RYRklSX0NPRUZGX0gxMV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9CQkJfVFhGSVJfMl9UWEZJUl9DT0VGRl9IMTFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQkJfQkJCX1RYRklSXzJfVFhGSVJfQ09FRkZfSDExX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmYwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWEZJUl8yX1RYRklSX0NPRUZGX0gxMV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhmZjAwMDAwMCkgPj4gMjQpCi0jZGVmaW5lIFBIWV9CQl9CQkJfVFhGSVJfMl9UWEZJUl9DT0VGRl9IMTFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNCkgJiAweGZmMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX21vZGVzX3NlbGVjdCAqLwotI2RlZmluZSBQSFlfQkJfTU9ERVNfU0VMRUNUX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEyMDAKLSNkZWZpbmUgUEhZX0JCX01PREVTX1NFTEVDVF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMjAwCi0jZGVmaW5lIFBIWV9CQl9NT0RFU19TRUxFQ1RfQ0NLX01PREVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfTU9ERVNfU0VMRUNUX0NDS19NT0RFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX01PREVTX1NFTEVDVF9DQ0tfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFBIWV9CQl9NT0RFU19TRUxFQ1RfQ0NLX01PREVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAxKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfTU9ERVNfU0VMRUNUX0NDS19NT0RFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwMSkKLSNkZWZpbmUgUEhZX0JCX01PREVTX1NFTEVDVF9EWU5fT0ZETV9DQ0tfTU9ERV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9CQl9NT0RFU19TRUxFQ1RfRFlOX09GRE1fQ0NLX01PREVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQkJfTU9ERVNfU0VMRUNUX0RZTl9PRkRNX0NDS19NT0RFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgUEhZX0JCX01PREVTX1NFTEVDVF9EWU5fT0ZETV9DQ0tfTU9ERV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDQpID4+IDIpCi0jZGVmaW5lIFBIWV9CQl9NT0RFU19TRUxFQ1RfRFlOX09GRE1fQ0NLX01PREVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMikgJiAweDAwMDAwMDA0KQotI2RlZmluZSBQSFlfQkJfTU9ERVNfU0VMRUNUX0hBTEZfUkFURV9NT0RFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0JCX01PREVTX1NFTEVDVF9IQUxGX1JBVEVfTU9ERV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9CQl9NT0RFU19TRUxFQ1RfSEFMRl9SQVRFX01PREVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBQSFlfQkJfTU9ERVNfU0VMRUNUX0hBTEZfUkFURV9NT0RFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAyMCkgPj4gNSkKLSNkZWZpbmUgUEhZX0JCX01PREVTX1NFTEVDVF9IQUxGX1JBVEVfTU9ERV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA1KSAmIDB4MDAwMDAwMjApCi0jZGVmaW5lIFBIWV9CQl9NT0RFU19TRUxFQ1RfUVVBUlRFUl9SQVRFX01PREVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQkJfTU9ERVNfU0VMRUNUX1FVQVJURVJfUkFURV9NT0RFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0JCX01PREVTX1NFTEVDVF9RVUFSVEVSX1JBVEVfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIFBIWV9CQl9NT0RFU19TRUxFQ1RfUVVBUlRFUl9SQVRFX01PREVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDQwKSA+PiA2KQotI2RlZmluZSBQSFlfQkJfTU9ERVNfU0VMRUNUX1FVQVJURVJfUkFURV9NT0RFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDYpICYgMHgwMDAwMDA0MCkKLSNkZWZpbmUgUEhZX0JCX01PREVTX1NFTEVDVF9NQUNfQ0xLX01PREVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9CQl9NT0RFU19TRUxFQ1RfTUFDX0NMS19NT0RFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQkJfTU9ERVNfU0VMRUNUX01BQ19DTEtfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKLSNkZWZpbmUgUEhZX0JCX01PREVTX1NFTEVDVF9NQUNfQ0xLX01PREVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwODApID4+IDcpCi0jZGVmaW5lIFBIWV9CQl9NT0RFU19TRUxFQ1RfTUFDX0NMS19NT0RFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNykgJiAweDAwMDAwMDgwKQotI2RlZmluZSBQSFlfQkJfTU9ERVNfU0VMRUNUX0RJU0FCTEVfRFlOX0NDS19ERVRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0JCX01PREVTX1NFTEVDVF9ESVNBQkxFX0RZTl9DQ0tfREVUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9NT0RFU19TRUxFQ1RfRElTQUJMRV9EWU5fQ0NLX0RFVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAotI2RlZmluZSBQSFlfQkJfTU9ERVNfU0VMRUNUX0RJU0FCTEVfRFlOX0NDS19ERVRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDEwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0JCX01PREVTX1NFTEVDVF9ESVNBQkxFX0RZTl9DQ0tfREVUX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDAxMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfYmJiX3R4X2N0cmwgKi8KLSNkZWZpbmUgUEhZX0JCX0JCQl9UWF9DVFJMX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMjA0Ci0jZGVmaW5lIFBIWV9CQl9CQkJfVFhfQ1RSTF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTIwNAotI2RlZmluZSBQSFlfQkJfQkJCX1RYX0NUUkxfRElTQUJMRV9TQ1JBTUJMRVJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWF9DVFJMX0RJU0FCTEVfU0NSQU1CTEVSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9CQkJfVFhfQ1RSTF9ESVNBQkxFX1NDUkFNQkxFUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBQSFlfQkJfQkJCX1RYX0NUUkxfRElTQUJMRV9TQ1JBTUJMRVJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMSkgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWF9DVFJMX0RJU0FCTEVfU0NSQU1CTEVSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFBIWV9CQl9CQkJfVFhfQ1RSTF9VU0VfU0NSQU1CTEVSX1NFRURfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQkJfQkJCX1RYX0NUUkxfVVNFX1NDUkFNQkxFUl9TRUVEX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWF9DVFJMX1VTRV9TQ1JBTUJMRVJfU0VFRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFBIWV9CQl9CQkJfVFhfQ1RSTF9VU0VfU0NSQU1CTEVSX1NFRURfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAyKSA+PiAxKQotI2RlZmluZSBQSFlfQkJfQkJCX1RYX0NUUkxfVVNFX1NDUkFNQkxFUl9TRUVEX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEpICYgMHgwMDAwMDAwMikKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWF9DVFJMX1RYX0RBQ19TQ0FMRV9DQ0tfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9CQl9CQkJfVFhfQ1RSTF9UWF9EQUNfU0NBTEVfQ0NLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQkJfQkJCX1RYX0NUUkxfVFhfREFDX1NDQUxFX0NDS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGMKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWF9DVFJMX1RYX0RBQ19TQ0FMRV9DQ0tfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMGMpID4+IDIpCi0jZGVmaW5lIFBIWV9CQl9CQkJfVFhfQ1RSTF9UWF9EQUNfU0NBTEVfQ0NLX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMikgJiAweDAwMDAwMDBjKQotI2RlZmluZSBQSFlfQkJfQkJCX1RYX0NUUkxfVFhGSVJfSkFQQU5fQ0NLX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWF9DVFJMX1RYRklSX0pBUEFOX0NDS19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9CQl9CQkJfVFhfQ1RSTF9UWEZJUl9KQVBBTl9DQ0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBQSFlfQkJfQkJCX1RYX0NUUkxfVFhGSVJfSkFQQU5fQ0NLX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAxMCkgPj4gNCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWF9DVFJMX1RYRklSX0pBUEFOX0NDS19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA0KSAmIDB4MDAwMDAwMTApCi0jZGVmaW5lIFBIWV9CQl9CQkJfVFhfQ1RSTF9BTExPV18xTUJQU19TSE9SVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQkJfQkJCX1RYX0NUUkxfQUxMT1dfMU1CUFNfU0hPUlRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWF9DVFJMX0FMTE9XXzFNQlBTX1NIT1JUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIFBIWV9CQl9CQkJfVFhfQ1RSTF9BTExPV18xTUJQU19TSE9SVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDIwKSA+PiA1KQotI2RlZmluZSBQSFlfQkJfQkJCX1RYX0NUUkxfQUxMT1dfMU1CUFNfU0hPUlRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDUpICYgMHgwMDAwMDAyMCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWF9DVFJMX1RYX0NDS19ERUxBWV8xX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9CQkJfVFhfQ1RSTF9UWF9DQ0tfREVMQVlfMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQkJfQkJCX1RYX0NUUkxfVFhfQ0NLX0RFTEFZXzFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxYzAKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWF9DVFJMX1RYX0NDS19ERUxBWV8xX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAxYzApID4+IDYpCi0jZGVmaW5lIFBIWV9CQl9CQkJfVFhfQ1RSTF9UWF9DQ0tfREVMQVlfMV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNikgJiAweDAwMDAwMWMwKQotI2RlZmluZSBQSFlfQkJfQkJCX1RYX0NUUkxfVFhfQ0NLX0RFTEFZXzJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWF9DVFJMX1RYX0NDS19ERUxBWV8yX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9CQl9CQkJfVFhfQ1RSTF9UWF9DQ0tfREVMQVlfMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGUwMAotI2RlZmluZSBQSFlfQkJfQkJCX1RYX0NUUkxfVFhfQ0NLX0RFTEFZXzJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMGUwMCkgPj4gOSkKLSNkZWZpbmUgUEhZX0JCX0JCQl9UWF9DVFJMX1RYX0NDS19ERUxBWV8yX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA5KSAmIDB4MDAwMDBlMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfYmJiX3NpZ19kZXRlY3QgKi8KLSNkZWZpbmUgUEhZX0JCX0JCQl9TSUdfREVURUNUX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMjA4Ci0jZGVmaW5lIFBIWV9CQl9CQkJfU0lHX0RFVEVDVF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTIwOAotI2RlZmluZSBQSFlfQkJfQkJCX1NJR19ERVRFQ1RfV0VBS19TSUdfVEhSX0NDS19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0JCX0JCQl9TSUdfREVURUNUX1dFQUtfU0lHX1RIUl9DQ0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9CQkJfU0lHX0RFVEVDVF9XRUFLX1NJR19USFJfQ0NLX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzZgotI2RlZmluZSBQSFlfQkJfQkJCX1NJR19ERVRFQ1RfV0VBS19TSUdfVEhSX0NDS19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAzZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9TSUdfREVURUNUX1dFQUtfU0lHX1RIUl9DQ0tfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwM2YpCi0jZGVmaW5lIFBIWV9CQl9CQkJfU0lHX0RFVEVDVF9BTlRfU1dJVENIX1RJTUVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQkJfQkJCX1NJR19ERVRFQ1RfQU5UX1NXSVRDSF9USU1FX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0JCX0JCQl9TSUdfREVURUNUX0FOVF9TV0lUQ0hfVElNRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxZmMwCi0jZGVmaW5lIFBIWV9CQl9CQkJfU0lHX0RFVEVDVF9BTlRfU1dJVENIX1RJTUVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAxZmMwKSA+PiA2KQotI2RlZmluZSBQSFlfQkJfQkJCX1NJR19ERVRFQ1RfQU5UX1NXSVRDSF9USU1FX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDYpICYgMHgwMDAwMWZjMCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9TSUdfREVURUNUX0VOQUJMRV9BTlRfRkFTVF9ESVZfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9CQl9CQkJfU0lHX0RFVEVDVF9FTkFCTEVfQU5UX0ZBU1RfRElWX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfQkJCX1NJR19ERVRFQ1RfRU5BQkxFX0FOVF9GQVNUX0RJVl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKLSNkZWZpbmUgUEhZX0JCX0JCQl9TSUdfREVURUNUX0VOQUJMRV9BTlRfRkFTVF9ESVZfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMjAwMCkgPj4gMTMpCi0jZGVmaW5lIFBIWV9CQl9CQkJfU0lHX0RFVEVDVF9FTkFCTEVfQU5UX0ZBU1RfRElWX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMykgJiAweDAwMDAyMDAwKQotI2RlZmluZSBQSFlfQkJfQkJCX1NJR19ERVRFQ1RfTEJfQUxQSEFfMTI4X0NDS19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0JCX0JCQl9TSUdfREVURUNUX0xCX0FMUEhBXzEyOF9DQ0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9CQl9CQkJfU0lHX0RFVEVDVF9MQl9BTFBIQV8xMjhfQ0NLX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAotI2RlZmluZSBQSFlfQkJfQkJCX1NJR19ERVRFQ1RfTEJfQUxQSEFfMTI4X0NDS19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDA0MDAwKSA+PiAxNCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9TSUdfREVURUNUX0xCX0FMUEhBXzEyOF9DQ0tfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE0KSAmIDB4MDAwMDQwMDApCi0jZGVmaW5lIFBIWV9CQl9CQkJfU0lHX0RFVEVDVF9MQl9SWF9FTkFCTEVfQ0NLX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQkJfQkJCX1NJR19ERVRFQ1RfTEJfUlhfRU5BQkxFX0NDS19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0JCX0JCQl9TSUdfREVURUNUX0xCX1JYX0VOQUJMRV9DQ0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCi0jZGVmaW5lIFBIWV9CQl9CQkJfU0lHX0RFVEVDVF9MQl9SWF9FTkFCTEVfQ0NLX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDgwMDApID4+IDE1KQotI2RlZmluZSBQSFlfQkJfQkJCX1NJR19ERVRFQ1RfTEJfUlhfRU5BQkxFX0NDS19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTUpICYgMHgwMDAwODAwMCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9TSUdfREVURUNUX0NZQzMyX0NPQVJTRV9EQ19FU1RfQ0NLX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9CQkJfU0lHX0RFVEVDVF9DWUMzMl9DT0FSU0VfRENfRVNUX0NDS19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQkJfQkJCX1NJR19ERVRFQ1RfQ1lDMzJfQ09BUlNFX0RDX0VTVF9DQ0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKLSNkZWZpbmUgUEhZX0JCX0JCQl9TSUdfREVURUNUX0NZQzMyX0NPQVJTRV9EQ19FU1RfQ0NLX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAxMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9CQl9CQkJfU0lHX0RFVEVDVF9DWUMzMl9DT0FSU0VfRENfRVNUX0NDS19TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAwMDEwMDAwKQotI2RlZmluZSBQSFlfQkJfQkJCX1NJR19ERVRFQ1RfQ1lDNjRfQ09BUlNFX0RDX0VTVF9DQ0tfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0JCX0JCQl9TSUdfREVURUNUX0NZQzY0X0NPQVJTRV9EQ19FU1RfQ0NLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9CQl9CQkJfU0lHX0RFVEVDVF9DWUM2NF9DT0FSU0VfRENfRVNUX0NDS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAotI2RlZmluZSBQSFlfQkJfQkJCX1NJR19ERVRFQ1RfQ1lDNjRfQ09BUlNFX0RDX0VTVF9DQ0tfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDIwMDAwKSA+PiAxNykKLSNkZWZpbmUgUEhZX0JCX0JCQl9TSUdfREVURUNUX0NZQzY0X0NPQVJTRV9EQ19FU1RfQ0NLX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE3KSAmIDB4MDAwMjAwMDApCi0jZGVmaW5lIFBIWV9CQl9CQkJfU0lHX0RFVEVDVF9FTkFCTEVfQ09BUlNFX0RDX0NDS19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQkJfQkJCX1NJR19ERVRFQ1RfRU5BQkxFX0NPQVJTRV9EQ19DQ0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUEhZX0JCX0JCQl9TSUdfREVURUNUX0VOQUJMRV9DT0FSU0VfRENfQ0NLX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCi0jZGVmaW5lIFBIWV9CQl9CQkJfU0lHX0RFVEVDVF9FTkFCTEVfQ09BUlNFX0RDX0NDS19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwNDAwMDApID4+IDE4KQotI2RlZmluZSBQSFlfQkJfQkJCX1NJR19ERVRFQ1RfRU5BQkxFX0NPQVJTRV9EQ19DQ0tfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTgpICYgMHgwMDA0MDAwMCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9TSUdfREVURUNUX0NZQzI1Nl9GSU5FX0RDX0VTVF9DQ0tfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9CQl9CQkJfU0lHX0RFVEVDVF9DWUMyNTZfRklORV9EQ19FU1RfQ0NLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQkJfQkJCX1NJR19ERVRFQ1RfQ1lDMjU2X0ZJTkVfRENfRVNUX0NDS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKLSNkZWZpbmUgUEhZX0JCX0JCQl9TSUdfREVURUNUX0NZQzI1Nl9GSU5FX0RDX0VTVF9DQ0tfR0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDA4MDAwMCkgPj4gMTkpCi0jZGVmaW5lIFBIWV9CQl9CQkJfU0lHX0RFVEVDVF9DWUMyNTZfRklORV9EQ19FU1RfQ0NLX1NFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOSkgJiAweDAwMDgwMDAwKQotI2RlZmluZSBQSFlfQkJfQkJCX1NJR19ERVRFQ1RfRU5BQkxFX0ZJTkVfRENfQ0NLX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0JCX0JCQl9TSUdfREVURUNUX0VOQUJMRV9GSU5FX0RDX0NDS19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9CQl9CQkJfU0lHX0RFVEVDVF9FTkFCTEVfRklORV9EQ19DQ0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAotI2RlZmluZSBQSFlfQkJfQkJCX1NJR19ERVRFQ1RfRU5BQkxFX0ZJTkVfRENfQ0NLX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMTAwMDAwKSA+PiAyMCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9TSUdfREVURUNUX0VOQUJMRV9GSU5FX0RDX0NDS19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIwKSAmIDB4MDAxMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9CQkJfU0lHX0RFVEVDVF9ERUxBWV9TVEFSVF9TWU5DX0NDS19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQkJfQkJCX1NJR19ERVRFQ1RfREVMQVlfU1RBUlRfU1lOQ19DQ0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0JCX0JCQl9TSUdfREVURUNUX0RFTEFZX1NUQVJUX1NZTkNfQ0NLX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCi0jZGVmaW5lIFBIWV9CQl9CQkJfU0lHX0RFVEVDVF9ERUxBWV9TVEFSVF9TWU5DX0NDS19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAyMDAwMDApID4+IDIxKQotI2RlZmluZSBQSFlfQkJfQkJCX1NJR19ERVRFQ1RfREVMQVlfU1RBUlRfU1lOQ19DQ0tfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjEpICYgMHgwMDIwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9TSUdfREVURUNUX1VTRV9EQ19FU1RfRFVSSU5HX1NSQ0hfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9CQl9CQkJfU0lHX0RFVEVDVF9VU0VfRENfRVNUX0RVUklOR19TUkNIX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBQSFlfQkJfQkJCX1NJR19ERVRFQ1RfVVNFX0RDX0VTVF9EVVJJTkdfU1JDSF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKLSNkZWZpbmUgUEhZX0JCX0JCQl9TSUdfREVURUNUX1VTRV9EQ19FU1RfRFVSSU5HX1NSQ0hfR0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDQwMDAwMCkgPj4gMjIpCi0jZGVmaW5lIFBIWV9CQl9CQkJfU0lHX0RFVEVDVF9VU0VfRENfRVNUX0RVUklOR19TUkNIX1NFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMikgJiAweDAwNDAwMDAwKQotI2RlZmluZSBQSFlfQkJfQkJCX1NJR19ERVRFQ1RfRU5BQkxFX0JBUktFUl9UV09fUEhBU0VfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX0JCQl9TSUdfREVURUNUX0VOQUJMRV9CQVJLRVJfVFdPX1BIQVNFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9CQkJfU0lHX0RFVEVDVF9FTkFCTEVfQkFSS0VSX1RXT19QSEFTRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBQSFlfQkJfQkJCX1NJR19ERVRFQ1RfRU5BQkxFX0JBUktFUl9UV09fUEhBU0VfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDgwMDAwMDAwKSA+PiAzMSkKLSNkZWZpbmUgUEhZX0JCX0JCQl9TSUdfREVURUNUX0VOQUJMRV9CQVJLRVJfVFdPX1BIQVNFX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMxKSAmIDB4ODAwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfZXh0X2F0dGVuX3N3aXRjaF9jdGxfYjAgKi8KLSNkZWZpbmUgUEhZX0JCX0VYVF9BVFRFTl9TV0lUQ0hfQ1RMX0IwX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMjBjCi0jZGVmaW5lIFBIWV9CQl9FWFRfQVRURU5fU1dJVENIX0NUTF9CMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTIwYwotI2RlZmluZSBQSFlfQkJfRVhUX0FUVEVOX1NXSVRDSF9DVExfQjBfWEFUVEVOMV9EQl8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0JCX0VYVF9BVFRFTl9TV0lUQ0hfQ1RMX0IwX1hBVFRFTjFfREJfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9FWFRfQVRURU5fU1dJVENIX0NUTF9CMF9YQVRURU4xX0RCXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzZgotI2RlZmluZSBQSFlfQkJfRVhUX0FUVEVOX1NXSVRDSF9DVExfQjBfWEFUVEVOMV9EQl8wX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAzZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0VYVF9BVFRFTl9TV0lUQ0hfQ1RMX0IwX1hBVFRFTjFfREJfMF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwM2YpCi0jZGVmaW5lIFBIWV9CQl9FWFRfQVRURU5fU1dJVENIX0NUTF9CMF9YQVRURU4yX0RCXzBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQkJfRVhUX0FUVEVOX1NXSVRDSF9DVExfQjBfWEFUVEVOMl9EQl8wX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0JCX0VYVF9BVFRFTl9TV0lUQ0hfQ1RMX0IwX1hBVFRFTjJfREJfMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwZmMwCi0jZGVmaW5lIFBIWV9CQl9FWFRfQVRURU5fU1dJVENIX0NUTF9CMF9YQVRURU4yX0RCXzBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwZmMwKSA+PiA2KQotI2RlZmluZSBQSFlfQkJfRVhUX0FUVEVOX1NXSVRDSF9DVExfQjBfWEFUVEVOMl9EQl8wX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDYpICYgMHgwMDAwMGZjMCkKLSNkZWZpbmUgUEhZX0JCX0VYVF9BVFRFTl9TV0lUQ0hfQ1RMX0IwX1hBVFRFTjFfTUFSR0lOXzBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9FWFRfQVRURU5fU1dJVENIX0NUTF9CMF9YQVRURU4xX01BUkdJTl8wX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQkJfRVhUX0FUVEVOX1NXSVRDSF9DVExfQjBfWEFUVEVOMV9NQVJHSU5fMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMWYwMDAKLSNkZWZpbmUgUEhZX0JCX0VYVF9BVFRFTl9TV0lUQ0hfQ1RMX0IwX1hBVFRFTjFfTUFSR0lOXzBfR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAxZjAwMCkgPj4gMTIpCi0jZGVmaW5lIFBIWV9CQl9FWFRfQVRURU5fU1dJVENIX0NUTF9CMF9YQVRURU4xX01BUkdJTl8wX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMikgJiAweDAwMDFmMDAwKQotI2RlZmluZSBQSFlfQkJfRVhUX0FUVEVOX1NXSVRDSF9DVExfQjBfWEFUVEVOMl9NQVJHSU5fMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0JCX0VYVF9BVFRFTl9TV0lUQ0hfQ1RMX0IwX1hBVFRFTjJfTUFSR0lOXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9CQl9FWFRfQVRURU5fU1dJVENIX0NUTF9CMF9YQVRURU4yX01BUkdJTl8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDNlMDAwMAotI2RlZmluZSBQSFlfQkJfRVhUX0FUVEVOX1NXSVRDSF9DVExfQjBfWEFUVEVOMl9NQVJHSU5fMF9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwM2UwMDAwKSA+PiAxNykKLSNkZWZpbmUgUEhZX0JCX0VYVF9BVFRFTl9TV0lUQ0hfQ1RMX0IwX1hBVFRFTjJfTUFSR0lOXzBfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IDE3KSAmIDB4MDAzZTAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfYmJiX3J4X2N0cmxfMSAqLwotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfMV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEyMTAKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzFfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMjEwCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF8xX0NPQVJTRV9USU1fVEhSRVNIT0xEXzJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfMV9DT0FSU0VfVElNX1RIUkVTSE9MRF8yX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzFfQ09BUlNFX1RJTV9USFJFU0hPTERfMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3Ci0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF8xX0NPQVJTRV9USU1fVEhSRVNIT0xEXzJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDA3KSA+PiAwKQotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfMV9DT0FSU0VfVElNX1RIUkVTSE9MRF8yX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwNykKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzFfQ09BUlNFX1RJTV9USFJFU0hPTERfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF8xX0NPQVJTRV9USU1fVEhSRVNIT0xEX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfMV9DT0FSU0VfVElNX1RIUkVTSE9MRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZjgKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzFfQ09BUlNFX1RJTV9USFJFU0hPTERfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwZjgpID4+IDMpCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF8xX0NPQVJTRV9USU1fVEhSRVNIT0xEX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMykgJiAweDAwMDAwMGY4KQotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfMV9DT0FSU0VfVElNX05fU1lOQ19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzFfQ09BUlNFX1RJTV9OX1NZTkNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF8xX0NPQVJTRV9USU1fTl9TWU5DX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDcwMAotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfMV9DT0FSU0VfVElNX05fU1lOQ19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDcwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzFfQ09BUlNFX1RJTV9OX1NZTkNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDA3MDApCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF8xX01BWF9CQUxfTE9OR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfMV9NQVhfQkFMX0xPTkdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzFfTUFYX0JBTF9MT05HX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBmODAwCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF8xX01BWF9CQUxfTE9OR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMGY4MDApID4+IDExKQotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfMV9NQVhfQkFMX0xPTkdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTEpICYgMHgwMDAwZjgwMCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzFfTUFYX0JBTF9TSE9SVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF8xX01BWF9CQUxfU0hPUlRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfMV9NQVhfQkFMX1NIT1JUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxZjAwMDAKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzFfTUFYX0JBTF9TSE9SVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDFmMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF8xX01BWF9CQUxfU0hPUlRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAwMWYwMDAwKQotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfMV9SRUNPTl9MTVNfU1RFUF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzFfUkVDT05fTE1TX1NURVBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF8xX1JFQ09OX0xNU19TVEVQX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMGUwMDAwMAotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfMV9SRUNPTl9MTVNfU1RFUF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwZTAwMDAwKSA+PiAyMSkKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzFfUkVDT05fTE1TX1NURVBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIxKSAmIDB4MDBlMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF8xX1NCX0NIRUNLX1dJTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfMV9TQl9DSEVDS19XSU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzFfU0JfQ0hFQ0tfV0lOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdmMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF8xX1NCX0NIRUNLX1dJTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N2YwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfMV9TQl9DSEVDS19XSU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjQpICYgMHg3ZjAwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzFfRU5fUlhfQUJPUlRfQ0NLX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF8xX0VOX1JYX0FCT1JUX0NDS19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfMV9FTl9SWF9BQk9SVF9DQ0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzFfRU5fUlhfQUJPUlRfQ0NLX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg4MDAwMDAwMCkgPj4gMzEpCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF8xX0VOX1JYX0FCT1JUX0NDS19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMSkgJiAweDgwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX2JiYl9yeF9jdHJsXzIgKi8KLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMjE0Ci0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF8yX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTIxNAotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfMl9GUkVRX0VTVF9OX0FWR19MT05HX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzJfRlJFUV9FU1RfTl9BVkdfTE9OR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF8yX0ZSRVFfRVNUX05fQVZHX0xPTkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzZgotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfMl9GUkVRX0VTVF9OX0FWR19MT05HX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAzZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzJfRlJFUV9FU1RfTl9BVkdfTE9OR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwM2YpCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF8yX0NIQU5fQVZHX0xPTkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfMl9DSEFOX0FWR19MT05HX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzJfQ0hBTl9BVkdfTE9OR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwZmMwCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF8yX0NIQU5fQVZHX0xPTkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwZmMwKSA+PiA2KQotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfMl9DSEFOX0FWR19MT05HX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDYpICYgMHgwMDAwMGZjMCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzJfQ09BUlNFX1RJTV9USFJFU0hPTERfM19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF8yX0NPQVJTRV9USU1fVEhSRVNIT0xEXzNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfMl9DT0FSU0VfVElNX1RIUkVTSE9MRF8zX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMWYwMDAKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzJfQ09BUlNFX1RJTV9USFJFU0hPTERfM19HRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAxZjAwMCkgPj4gMTIpCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF8yX0NPQVJTRV9USU1fVEhSRVNIT0xEXzNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMikgJiAweDAwMDFmMDAwKQotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfMl9GUkVRX1RSQUNLX1VQREFURV9QRVJJT0RfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzJfRlJFUV9UUkFDS19VUERBVEVfUEVSSU9EX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF8yX0ZSRVFfVFJBQ0tfVVBEQVRFX1BFUklPRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDNlMDAwMAotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfMl9GUkVRX1RSQUNLX1VQREFURV9QRVJJT0RfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwM2UwMDAwKSA+PiAxNykKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzJfRlJFUV9UUkFDS19VUERBVEVfUEVSSU9EX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE3KSAmIDB4MDAzZTAwMDApCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF8yX0ZSRVFfRVNUX1NDQUxJTkdfUEVSSU9EX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfMl9GUkVRX0VTVF9TQ0FMSU5HX1BFUklPRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzJfRlJFUV9FU1RfU0NBTElOR19QRVJJT0RfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzYzAwMDAwCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF8yX0ZSRVFfRVNUX1NDQUxJTkdfUEVSSU9EX0dFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDNjMDAwMDApID4+IDIyKQotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfMl9GUkVRX0VTVF9TQ0FMSU5HX1BFUklPRF9TRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjIpICYgMHgwM2MwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzJfTE9PUF9DT0VGX0RQU0tfQzJfREFUQV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF8yX0xPT1BfQ09FRl9EUFNLX0MyX0RBVEFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfMl9MT09QX0NPRUZfRFBTS19DMl9EQVRBX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmMwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzJfTE9PUF9DT0VGX0RQU0tfQzJfREFUQV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhmYzAwMDAwMCkgPj4gMjYpCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF8yX0xPT1BfQ09FRl9EUFNLX0MyX0RBVEFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNikgJiAweGZjMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX2JiYl9yeF9jdHJsXzMgKi8KLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzNfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMjE4Ci0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF8zX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTIxOAotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfM19USU1fQURKVVNUX0ZSRVFfRFBTS19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzNfVElNX0FESlVTVF9GUkVRX0RQU0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF8zX1RJTV9BREpVU1RfRlJFUV9EUFNLX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfM19USU1fQURKVVNUX0ZSRVFfRFBTS19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDBmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzNfVElNX0FESlVTVF9GUkVRX0RQU0tfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwZmYpCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF8zX1RJTV9BREpVU1RfRlJFUV9DQ0tfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfM19USU1fQURKVVNUX0ZSRVFfQ0NLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzNfVElNX0FESlVTVF9GUkVRX0NDS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBmZjAwCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF8zX1RJTV9BREpVU1RfRlJFUV9DQ0tfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDBmZjAwKSA+PiA4KQotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfM19USU1fQURKVVNUX0ZSRVFfQ0NLX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwZmYwMCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzNfVElNRVJfTl9TRkRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF8zX1RJTUVSX05fU0ZEX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfM19USU1FUl9OX1NGRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBmZjAwMDAKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzNfVElNRVJfTl9TRkRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMGZmMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF8zX1RJTUVSX05fU0ZEX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAwZmYwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX2JiYl9yeF9jdHJsXzQgKi8KLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMjFjCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF80X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTIxYwotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfNF9USU1FUl9OX1NZTkNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzRfVElNRVJfTl9TWU5DX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF80X1RJTUVSX05fU1lOQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwZgotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfNF9USU1FUl9OX1NZTkNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzRfVElNRVJfTl9TWU5DX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMGYpCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF80X1RJTV9BREpVU1RfVElNRVJfRVhQX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfNF9USU1fQURKVVNUX1RJTUVSX0VYUF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzRfVElNX0FESlVTVF9USU1FUl9FWFBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBmZmYwCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF80X1RJTV9BREpVU1RfVElNRVJfRVhQX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDBmZmYwKSA+PiA0KQotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfNF9USU1fQURKVVNUX1RJTUVSX0VYUF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDQpICYgMHgwMDAwZmZmMCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzRfRk9SQ0VfVU5MT0NLRURfQ0xPQ0tTX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF80X0ZPUkNFX1VOTE9DS0VEX0NMT0NLU19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfNF9GT1JDRV9VTkxPQ0tFRF9DTE9DS1NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzRfRk9SQ0VfVU5MT0NLRURfQ0xPQ0tTX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAxMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF80X0ZPUkNFX1VOTE9DS0VEX0NMT0NLU19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAwMDEwMDAwKQotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfNF9EWU5BTUlDX1BSRUFNX1NFTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzRfRFlOQU1JQ19QUkVBTV9TRUxfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF80X0RZTkFNSUNfUFJFQU1fU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfNF9EWU5BTUlDX1BSRUFNX1NFTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDIwMDAwKSA+PiAxNykKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzRfRFlOQU1JQ19QUkVBTV9TRUxfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE3KSAmIDB4MDAwMjAwMDApCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF80X1NIT1JUX1BSRUFNQkxFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfNF9TSE9SVF9QUkVBTUJMRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzRfU0hPUlRfUFJFQU1CTEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF80X1NIT1JUX1BSRUFNQkxFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwNDAwMDApID4+IDE4KQotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfNF9TSE9SVF9QUkVBTUJMRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTgpICYgMHgwMDA0MDAwMCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzRfRlJFUV9FU1RfTl9BVkdfU0hPUlRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF80X0ZSRVFfRVNUX05fQVZHX1NIT1JUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfNF9GUkVRX0VTVF9OX0FWR19TSE9SVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDFmODAwMDAKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzRfRlJFUV9FU1RfTl9BVkdfU0hPUlRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMWY4MDAwMCkgPj4gMTkpCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF80X0ZSRVFfRVNUX05fQVZHX1NIT1JUX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOSkgJiAweDAxZjgwMDAwKQotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfNF9DSEFOX0FWR19TSE9SVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzRfQ0hBTl9BVkdfU0hPUlRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF80X0NIQU5fQVZHX1NIT1JUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3ZTAwMDAwMAotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfNF9DSEFOX0FWR19TSE9SVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdlMDAwMDAwKSA+PiAyNSkKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzRfQ0hBTl9BVkdfU0hPUlRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI1KSAmIDB4N2UwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfYmJiX3J4X2N0cmxfNSAqLwotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfNV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEyMjAKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzVfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMjIwCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF81X0xPT1BfQ09FRl9EUFNLX0MxX0RBVEFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfNV9MT09QX0NPRUZfRFBTS19DMV9EQVRBX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzVfTE9PUF9DT0VGX0RQU0tfQzFfREFUQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFmCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF81X0xPT1BfQ09FRl9EUFNLX0MxX0RBVEFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDFmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfNV9MT09QX0NPRUZfRFBTS19DMV9EQVRBX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAxZikKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzVfTE9PUF9DT0VGX0RQU0tfQzFfSEVBRF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF81X0xPT1BfQ09FRl9EUFNLX0MxX0hFQURfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfNV9MT09QX0NPRUZfRFBTS19DMV9IRUFEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzZTAKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzVfTE9PUF9DT0VGX0RQU0tfQzFfSEVBRF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAzZTApID4+IDUpCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF81X0xPT1BfQ09FRl9EUFNLX0MxX0hFQURfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNSkgJiAweDAwMDAwM2UwKQotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfNV9MT09QX0NPRUZfRFBTS19DMl9IRUFEX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzVfTE9PUF9DT0VGX0RQU0tfQzJfSEVBRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF81X0xPT1BfQ09FRl9EUFNLX0MyX0hFQURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwZmMwMAotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfNV9MT09QX0NPRUZfRFBTS19DMl9IRUFEX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDBmYzAwKSA+PiAxMCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzVfTE9PUF9DT0VGX0RQU0tfQzJfSEVBRF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEwKSAmIDB4MDAwMGZjMDApCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF81X0xPT1BfQ09FRl9DQ0tfQzFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfNV9MT09QX0NPRUZfQ0NLX0MxX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzVfTE9PUF9DT0VGX0NDS19DMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMWYwMDAwCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF81X0xPT1BfQ09FRl9DQ0tfQzFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAxZjAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfNV9MT09QX0NPRUZfQ0NLX0MxX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMDFmMDAwMCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzVfTE9PUF9DT0VGX0NDS19DMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF81X0xPT1BfQ09FRl9DQ0tfQzJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfNV9MT09QX0NPRUZfQ0NLX0MyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDdlMDAwMDAKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzVfTE9PUF9DT0VGX0NDS19DMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwN2UwMDAwMCkgPj4gMjEpCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF81X0xPT1BfQ09FRl9DQ0tfQzJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMSkgJiAweDA3ZTAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX2JiYl9yeF9jdHJsXzYgKi8KLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzZfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMjI0Ci0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF82X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTIyNAotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfNl9TWU5DX1NUQVJUX0RFTEFZX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzZfU1lOQ19TVEFSVF9ERUxBWV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF82X1NZTkNfU1RBUlRfREVMQVlfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNmZgotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfNl9TWU5DX1NUQVJUX0RFTEFZX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDNmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzZfU1lOQ19TVEFSVF9ERUxBWV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAzZmYpCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF82X01BUF8xU19UT18yU19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfNl9NQVBfMVNfVE9fMlNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzZfTUFQXzFTX1RPXzJTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF82X01BUF8xU19UT18yU19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDA0MDApID4+IDEwKQotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfNl9NQVBfMVNfVE9fMlNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTApICYgMHgwMDAwMDQwMCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzZfU1RBUlRfSUlSX0RFTEFZX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF82X1NUQVJUX0lJUl9ERUxBWV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQkJfQkJCX1JYX0NUUkxfNl9TVEFSVF9JSVJfREVMQVlfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxZmY4MDAKLSNkZWZpbmUgUEhZX0JCX0JCQl9SWF9DVFJMXzZfU1RBUlRfSUlSX0RFTEFZX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDFmZjgwMCkgPj4gMTEpCi0jZGVmaW5lIFBIWV9CQl9CQkJfUlhfQ1RSTF82X1NUQVJUX0lJUl9ERUxBWV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMSkgJiAweDAwMWZmODAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX2JiYl9kYWdjX2N0cmwgKi8KLSNkZWZpbmUgUEhZX0JCX0JCQl9EQUdDX0NUUkxfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMjI4Ci0jZGVmaW5lIFBIWV9CQl9CQkJfREFHQ19DVFJMX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTIyOAotI2RlZmluZSBQSFlfQkJfQkJCX0RBR0NfQ1RSTF9FTkFCTEVfREFHQ19DQ0tfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0JCQl9EQUdDX0NUUkxfRU5BQkxFX0RBR0NfQ0NLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9CQkJfREFHQ19DVFJMX0VOQUJMRV9EQUdDX0NDS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBQSFlfQkJfQkJCX0RBR0NfQ1RSTF9FTkFCTEVfREFHQ19DQ0tfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMSkgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9EQUdDX0NUUkxfRU5BQkxFX0RBR0NfQ0NLX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFBIWV9CQl9CQkJfREFHQ19DVFJMX0RBR0NfVEFSR0VUX1BXUl9DQ0tfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQkJfQkJCX0RBR0NfQ1RSTF9EQUdDX1RBUkdFVF9QV1JfQ0NLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0JCX0JCQl9EQUdDX0NUUkxfREFHQ19UQVJHRVRfUFdSX0NDS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMWZlCi0jZGVmaW5lIFBIWV9CQl9CQkJfREFHQ19DVFJMX0RBR0NfVEFSR0VUX1BXUl9DQ0tfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMWZlKSA+PiAxKQotI2RlZmluZSBQSFlfQkJfQkJCX0RBR0NfQ1RSTF9EQUdDX1RBUkdFVF9QV1JfQ0NLX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEpICYgMHgwMDAwMDFmZSkKLSNkZWZpbmUgUEhZX0JCX0JCQl9EQUdDX0NUUkxfRU5BQkxFX0JBUktFUl9SU1NJX1RIUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9CQl9CQkJfREFHQ19DVFJMX0VOQUJMRV9CQVJLRVJfUlNTSV9USFJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQkJfQkJCX0RBR0NfQ1RSTF9FTkFCTEVfQkFSS0VSX1JTU0lfVEhSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKLSNkZWZpbmUgUEhZX0JCX0JCQl9EQUdDX0NUUkxfRU5BQkxFX0JBUktFUl9SU1NJX1RIUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAyMDApID4+IDkpCi0jZGVmaW5lIFBIWV9CQl9CQkJfREFHQ19DVFJMX0VOQUJMRV9CQVJLRVJfUlNTSV9USFJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOSkgJiAweDAwMDAwMjAwKQotI2RlZmluZSBQSFlfQkJfQkJCX0RBR0NfQ1RSTF9CQVJLRVJfUlNTSV9USFJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0JCX0JCQl9EQUdDX0NUUkxfQkFSS0VSX1JTU0lfVEhSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9CQl9CQkJfREFHQ19DVFJMX0JBUktFUl9SU1NJX1RIUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxZmMwMAotI2RlZmluZSBQSFlfQkJfQkJCX0RBR0NfQ1RSTF9CQVJLRVJfUlNTSV9USFJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDFmYzAwKSA+PiAxMCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9EQUdDX0NUUkxfQkFSS0VSX1JTU0lfVEhSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEwKSAmIDB4MDAwMWZjMDApCi0jZGVmaW5lIFBIWV9CQl9CQkJfREFHQ19DVFJMX0VOQUJMRV9GSVJTVEVQX1NFTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQkJfQkJCX0RBR0NfQ1RSTF9FTkFCTEVfRklSU1RFUF9TRUxfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0JCX0JCQl9EQUdDX0NUUkxfRU5BQkxFX0ZJUlNURVBfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCi0jZGVmaW5lIFBIWV9CQl9CQkJfREFHQ19DVFJMX0VOQUJMRV9GSVJTVEVQX1NFTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMjAwMDApID4+IDE3KQotI2RlZmluZSBQSFlfQkJfQkJCX0RBR0NfQ1RSTF9FTkFCTEVfRklSU1RFUF9TRUxfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTcpICYgMHgwMDAyMDAwMCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9EQUdDX0NUUkxfRklSU1RFUF8yX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9CQl9CQkJfREFHQ19DVFJMX0ZJUlNURVBfMl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQkJfQkJCX0RBR0NfQ1RSTF9GSVJTVEVQXzJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBmYzAwMDAKLSNkZWZpbmUgUEhZX0JCX0JCQl9EQUdDX0NUUkxfRklSU1RFUF8yX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMGZjMDAwMCkgPj4gMTgpCi0jZGVmaW5lIFBIWV9CQl9CQkJfREFHQ19DVFJMX0ZJUlNURVBfMl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOCkgJiAweDAwZmMwMDAwKQotI2RlZmluZSBQSFlfQkJfQkJCX0RBR0NfQ1RSTF9GSVJTVEVQX0NPVU5UX0xHTUFYX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0JCX0JCQl9EQUdDX0NUUkxfRklSU1RFUF9DT1VOVF9MR01BWF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9CQl9CQkJfREFHQ19DVFJMX0ZJUlNURVBfQ09VTlRfTEdNQVhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwZjAwMDAwMAotI2RlZmluZSBQSFlfQkJfQkJCX0RBR0NfQ1RSTF9GSVJTVEVQX0NPVU5UX0xHTUFYX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDBmMDAwMDAwKSA+PiAyNCkKLSNkZWZpbmUgUEhZX0JCX0JCQl9EQUdDX0NUUkxfRklSU1RFUF9DT1VOVF9MR01BWF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI0KSAmIDB4MGYwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfZm9yY2VfY2xrZW5fY2NrICovCi0jZGVmaW5lIFBIWV9CQl9GT1JDRV9DTEtFTl9DQ0tfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTIyYwotI2RlZmluZSBQSFlfQkJfRk9SQ0VfQ0xLRU5fQ0NLX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEyMmMKLSNkZWZpbmUgUEhZX0JCX0ZPUkNFX0NMS0VOX0NDS19GT1JDRV9SWF9FTkFCTEUwX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9GT1JDRV9DTEtFTl9DQ0tfRk9SQ0VfUlhfRU5BQkxFMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfRk9SQ0VfQ0xLRU5fQ0NLX0ZPUkNFX1JYX0VOQUJMRTBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUEhZX0JCX0ZPUkNFX0NMS0VOX0NDS19GT1JDRV9SWF9FTkFCTEUwX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDEpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9GT1JDRV9DTEtFTl9DQ0tfRk9SQ0VfUlhfRU5BQkxFMF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDAxKQotI2RlZmluZSBQSFlfQkJfRk9SQ0VfQ0xLRU5fQ0NLX0ZPUkNFX1JYX0VOQUJMRTFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0JCX0ZPUkNFX0NMS0VOX0NDS19GT1JDRV9SWF9FTkFCTEUxX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9CQl9GT1JDRV9DTEtFTl9DQ0tfRk9SQ0VfUlhfRU5BQkxFMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBQSFlfQkJfRk9SQ0VfQ0xLRU5fQ0NLX0ZPUkNFX1JYX0VOQUJMRTFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMikgPj4gMSkKLSNkZWZpbmUgUEhZX0JCX0ZPUkNFX0NMS0VOX0NDS19GT1JDRV9SWF9FTkFCTEUxX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxKSAmIDB4MDAwMDAwMDIpCi0jZGVmaW5lIFBIWV9CQl9GT1JDRV9DTEtFTl9DQ0tfRk9SQ0VfUlhfRU5BQkxFMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQkJfRk9SQ0VfQ0xLRU5fQ0NLX0ZPUkNFX1JYX0VOQUJMRTJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0JCX0ZPUkNFX0NMS0VOX0NDS19GT1JDRV9SWF9FTkFCTEUyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFBIWV9CQl9GT1JDRV9DTEtFTl9DQ0tfRk9SQ0VfUlhfRU5BQkxFMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDA0KSA+PiAyKQotI2RlZmluZSBQSFlfQkJfRk9SQ0VfQ0xLRU5fQ0NLX0ZPUkNFX1JYX0VOQUJMRTJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIpICYgMHgwMDAwMDAwNCkKLSNkZWZpbmUgUEhZX0JCX0ZPUkNFX0NMS0VOX0NDS19GT1JDRV9SWF9FTkFCTEUzX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9CQl9GT1JDRV9DTEtFTl9DQ0tfRk9SQ0VfUlhfRU5BQkxFM19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQkJfRk9SQ0VfQ0xLRU5fQ0NLX0ZPUkNFX1JYX0VOQUJMRTNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgUEhZX0JCX0ZPUkNFX0NMS0VOX0NDS19GT1JDRV9SWF9FTkFCTEUzX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDgpID4+IDMpCi0jZGVmaW5lIFBIWV9CQl9GT1JDRV9DTEtFTl9DQ0tfRk9SQ0VfUlhfRU5BQkxFM19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMykgJiAweDAwMDAwMDA4KQotI2RlZmluZSBQSFlfQkJfRk9SQ0VfQ0xLRU5fQ0NLX0ZPUkNFX1JYX0FMV0FZU19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0JCX0ZPUkNFX0NMS0VOX0NDS19GT1JDRV9SWF9BTFdBWVNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9CQl9GT1JDRV9DTEtFTl9DQ0tfRk9SQ0VfUlhfQUxXQVlTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBQSFlfQkJfRk9SQ0VfQ0xLRU5fQ0NLX0ZPUkNFX1JYX0FMV0FZU19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAxMCkgPj4gNCkKLSNkZWZpbmUgUEhZX0JCX0ZPUkNFX0NMS0VOX0NDS19GT1JDRV9SWF9BTFdBWVNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA0KSAmIDB4MDAwMDAwMTApCi0jZGVmaW5lIFBIWV9CQl9GT1JDRV9DTEtFTl9DQ0tfRk9SQ0VfVFhTTV9DTEtFTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQkJfRk9SQ0VfQ0xLRU5fQ0NLX0ZPUkNFX1RYU01fQ0xLRU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0JCX0ZPUkNFX0NMS0VOX0NDS19GT1JDRV9UWFNNX0NMS0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIFBIWV9CQl9GT1JDRV9DTEtFTl9DQ0tfRk9SQ0VfVFhTTV9DTEtFTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDIwKSA+PiA1KQotI2RlZmluZSBQSFlfQkJfRk9SQ0VfQ0xLRU5fQ0NLX0ZPUkNFX1RYU01fQ0xLRU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDUpICYgMHgwMDAwMDAyMCkKLQotLyogbWFjcm9zIGZvciBCQl9yeF9jbGVhcl9kZWxheSAqLwotI2RlZmluZSBQSFlfQkJfUlhfQ0xFQVJfREVMQVlfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEyMzAKLSNkZWZpbmUgUEhZX0JCX1JYX0NMRUFSX0RFTEFZX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMjMwCi0jZGVmaW5lIFBIWV9CQl9SWF9DTEVBUl9ERUxBWV9PRkRNX1hSX1JYX0NMRUFSX0RFTEFZX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQkJfUlhfQ0xFQVJfREVMQVlfT0ZETV9YUl9SWF9DTEVBUl9ERUxBWV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1JYX0NMRUFSX0RFTEFZX09GRE1fWFJfUlhfQ0xFQVJfREVMQVlfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM2ZmCi0jZGVmaW5lIFBIWV9CQl9SWF9DTEVBUl9ERUxBWV9PRkRNX1hSX1JYX0NMRUFSX0RFTEFZX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwM2ZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfUlhfQ0xFQVJfREVMQVlfT0ZETV9YUl9SWF9DTEVBUl9ERUxBWV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDNmZikKLQotLyogbWFjcm9zIGZvciBCQl9wb3dlcnR4X3JhdGUzICovCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUzX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTIzNAotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFM19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEyMzQKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTNfUE9XRVJUWF8xTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUzX1BPV0VSVFhfMUxfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFM19QT1dFUlRYXzFMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM2YKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTNfUE9XRVJUWF8xTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwM2YpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUzX1BPV0VSVFhfMUxfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDNmKQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFM19QT1dFUlRYXzJMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTNfUE9XRVJUWF8yTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUzX1BPV0VSVFhfMkxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDNmMDAwMAotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFM19QT1dFUlRYXzJMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwM2YwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTNfUE9XRVJUWF8yTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDAzZjAwMDApCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUzX1BPV0VSVFhfMlNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFM19QT1dFUlRYXzJTX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTNfUE9XRVJUWF8yU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNmMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUzX1BPV0VSVFhfMlNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4M2YwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFM19QT1dFUlRYXzJTX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjQpICYgMHgzZjAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9wb3dlcnR4X3JhdGU0ICovCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU0X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTIzOAotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFNF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEyMzgKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTRfUE9XRVJUWF81NUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU0X1BPV0VSVFhfNTVMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFNF9QT1dFUlRYXzU1TF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM2YKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTRfUE9XRVJUWF81NUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwM2YpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU0X1BPV0VSVFhfNTVMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDNmKQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFNF9QT1dFUlRYXzU1U19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTRfUE9XRVJUWF81NVNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU0X1BPV0VSVFhfNTVTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwM2YwMAotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFNF9QT1dFUlRYXzU1U19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwM2YwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTRfUE9XRVJUWF81NVNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDNmMDApCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU0X1BPV0VSVFhfMTFMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFNF9QT1dFUlRYXzExTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTRfUE9XRVJUWF8xMUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwM2YwMDAwCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU0X1BPV0VSVFhfMTFMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAzZjAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFNF9QT1dFUlRYXzExTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMDNmMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTRfUE9XRVJUWF8xMVNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU0X1BPV0VSVFhfMTFTX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFNF9QT1dFUlRYXzExU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M2YwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTRfUE9XRVJUWF8xMVNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzZjAwMDAwMCkgPj4gMjQpCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU0X1BPV0VSVFhfMTFTX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNCkgJiAweDNmMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX2Nja19zcHVyX21pdCAqLwotI2RlZmluZSBQSFlfQkJfQ0NLX1NQVVJfTUlUX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEyNDAKLSNkZWZpbmUgUEhZX0JCX0NDS19TUFVSX01JVF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMjQwCi0jZGVmaW5lIFBIWV9CQl9DQ0tfU1BVUl9NSVRfVVNFX0NDS19TUFVSX01JVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfQ0NLX1NQVVJfTUlUX1VTRV9DQ0tfU1BVUl9NSVRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0NDS19TUFVSX01JVF9VU0VfQ0NLX1NQVVJfTUlUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFBIWV9CQl9DQ0tfU1BVUl9NSVRfVVNFX0NDS19TUFVSX01JVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAxKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfQ0NLX1NQVVJfTUlUX1VTRV9DQ0tfU1BVUl9NSVRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwMSkKLSNkZWZpbmUgUEhZX0JCX0NDS19TUFVSX01JVF9TUFVSX1JTU0lfVEhSX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9DQ0tfU1BVUl9NSVRfU1BVUl9SU1NJX1RIUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQkJfQ0NLX1NQVVJfTUlUX1NQVVJfUlNTSV9USFJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxZmUKLSNkZWZpbmUgUEhZX0JCX0NDS19TUFVSX01JVF9TUFVSX1JTU0lfVEhSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAxZmUpID4+IDEpCi0jZGVmaW5lIFBIWV9CQl9DQ0tfU1BVUl9NSVRfU1BVUl9SU1NJX1RIUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMSkgJiAweDAwMDAwMWZlKQotI2RlZmluZSBQSFlfQkJfQ0NLX1NQVVJfTUlUX0NDS19TUFVSX0ZSRVFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0JCX0NDS19TUFVSX01JVF9DQ0tfU1BVUl9GUkVRX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9CQl9DQ0tfU1BVUl9NSVRfQ0NLX1NQVVJfRlJFUV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxZmZmZmUwMAotI2RlZmluZSBQSFlfQkJfQ0NLX1NQVVJfTUlUX0NDS19TUFVSX0ZSRVFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxZmZmZmUwMCkgPj4gOSkKLSNkZWZpbmUgUEhZX0JCX0NDS19TUFVSX01JVF9DQ0tfU1BVUl9GUkVRX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA5KSAmIDB4MWZmZmZlMDApCi0jZGVmaW5lIFBIWV9CQl9DQ0tfU1BVUl9NSVRfU1BVUl9GSUxURVJfVFlQRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQkJfQ0NLX1NQVVJfTUlUX1NQVVJfRklMVEVSX1RZUEVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0JCX0NDS19TUFVSX01JVF9TUFVSX0ZJTFRFUl9UWVBFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDYwMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9DQ0tfU1BVUl9NSVRfU1BVUl9GSUxURVJfVFlQRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NjAwMDAwMDApID4+IDI5KQotI2RlZmluZSBQSFlfQkJfQ0NLX1NQVVJfTUlUX1NQVVJfRklMVEVSX1RZUEVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjkpICYgMHg2MDAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9wYW5pY193YXRjaGRvZ19zdGF0dXMgKi8KLSNkZWZpbmUgUEhZX0JCX1BBTklDX1dBVENIRE9HX1NUQVRVU19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMjQ0Ci0jZGVmaW5lIFBIWV9CQl9QQU5JQ19XQVRDSERPR19TVEFUVVNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTI0NAotI2RlZmluZSBQSFlfQkJfUEFOSUNfV0FUQ0hET0dfU1RBVFVTX1BBTklDX1dBVENIRE9HX1NUQVRVU18xX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0JCX1BBTklDX1dBVENIRE9HX1NUQVRVU19QQU5JQ19XQVRDSERPR19TVEFUVVNfMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9QQU5JQ19XQVRDSERPR19TVEFUVVNfUEFOSUNfV0FUQ0hET0dfU1RBVFVTXzFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNwotI2RlZmluZSBQSFlfQkJfUEFOSUNfV0FUQ0hET0dfU1RBVFVTX1BBTklDX1dBVENIRE9HX1NUQVRVU18xX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwNykgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1BBTklDX1dBVENIRE9HX1NUQVRVU19QQU5JQ19XQVRDSERPR19TVEFUVVNfMV9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDcpCi0jZGVmaW5lIFBIWV9CQl9QQU5JQ19XQVRDSERPR19TVEFUVVNfUEFOSUNfV0FUQ0hET0dfREVUX0hBTkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQkJfUEFOSUNfV0FUQ0hET0dfU1RBVFVTX1BBTklDX1dBVENIRE9HX0RFVF9IQU5HX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0JCX1BBTklDX1dBVENIRE9HX1NUQVRVU19QQU5JQ19XQVRDSERPR19ERVRfSEFOR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIFBIWV9CQl9QQU5JQ19XQVRDSERPR19TVEFUVVNfUEFOSUNfV0FUQ0hET0dfREVUX0hBTkdfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDA4KSA+PiAzKQotI2RlZmluZSBQSFlfQkJfUEFOSUNfV0FUQ0hET0dfU1RBVFVTX1BBTklDX1dBVENIRE9HX0RFVF9IQU5HX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IDMpICYgMHgwMDAwMDAwOCkKLSNkZWZpbmUgUEhZX0JCX1BBTklDX1dBVENIRE9HX1NUQVRVU19QQU5JQ19XQVRDSERPR19TVEFUVVNfMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9CQl9QQU5JQ19XQVRDSERPR19TVEFUVVNfUEFOSUNfV0FUQ0hET0dfU1RBVFVTXzJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQkJfUEFOSUNfV0FUQ0hET0dfU1RBVFVTX1BBTklDX1dBVENIRE9HX1NUQVRVU18yX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZjAKLSNkZWZpbmUgUEhZX0JCX1BBTklDX1dBVENIRE9HX1NUQVRVU19QQU5JQ19XQVRDSERPR19TVEFUVVNfMl9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwZjApID4+IDQpCi0jZGVmaW5lIFBIWV9CQl9QQU5JQ19XQVRDSERPR19TVEFUVVNfUEFOSUNfV0FUQ0hET0dfU1RBVFVTXzJfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgNCkgJiAweDAwMDAwMGYwKQotI2RlZmluZSBQSFlfQkJfUEFOSUNfV0FUQ0hET0dfU1RBVFVTX1BBTklDX1dBVENIRE9HX1NUQVRVU18zX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0JCX1BBTklDX1dBVENIRE9HX1NUQVRVU19QQU5JQ19XQVRDSERPR19TVEFUVVNfM19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9QQU5JQ19XQVRDSERPR19TVEFUVVNfUEFOSUNfV0FUQ0hET0dfU1RBVFVTXzNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGYwMAotI2RlZmluZSBQSFlfQkJfUEFOSUNfV0FUQ0hET0dfU1RBVFVTX1BBTklDX1dBVENIRE9HX1NUQVRVU18zX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMGYwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0JCX1BBTklDX1dBVENIRE9HX1NUQVRVU19QQU5JQ19XQVRDSERPR19TVEFUVVNfM19TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDBmMDApCi0jZGVmaW5lIFBIWV9CQl9QQU5JQ19XQVRDSERPR19TVEFUVVNfUEFOSUNfV0FUQ0hET0dfU1RBVFVTXzRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQkJfUEFOSUNfV0FUQ0hET0dfU1RBVFVTX1BBTklDX1dBVENIRE9HX1NUQVRVU180X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0JCX1BBTklDX1dBVENIRE9HX1NUQVRVU19QQU5JQ19XQVRDSERPR19TVEFUVVNfNF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBmMDAwCi0jZGVmaW5lIFBIWV9CQl9QQU5JQ19XQVRDSERPR19TVEFUVVNfUEFOSUNfV0FUQ0hET0dfU1RBVFVTXzRfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIDB4MDAwMGYwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQkJfUEFOSUNfV0FUQ0hET0dfU1RBVFVTX1BBTklDX1dBVENIRE9HX1NUQVRVU180X1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgMTIpICYgMHgwMDAwZjAwMCkKLSNkZWZpbmUgUEhZX0JCX1BBTklDX1dBVENIRE9HX1NUQVRVU19QQU5JQ19XQVRDSERPR19TVEFUVVNfNV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9CQl9QQU5JQ19XQVRDSERPR19TVEFUVVNfUEFOSUNfV0FUQ0hET0dfU1RBVFVTXzVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQkJfUEFOSUNfV0FUQ0hET0dfU1RBVFVTX1BBTklDX1dBVENIRE9HX1NUQVRVU181X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwZjAwMDAKLSNkZWZpbmUgUEhZX0JCX1BBTklDX1dBVENIRE9HX1NUQVRVU19QQU5JQ19XQVRDSERPR19TVEFUVVNfNV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgMHgwMDBmMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9CQl9QQU5JQ19XQVRDSERPR19TVEFUVVNfUEFOSUNfV0FUQ0hET0dfU1RBVFVTXzVfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAwMGYwMDAwKQotI2RlZmluZSBQSFlfQkJfUEFOSUNfV0FUQ0hET0dfU1RBVFVTX1BBTklDX1dBVENIRE9HX1NUQVRVU182X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0JCX1BBTklDX1dBVENIRE9HX1NUQVRVU19QQU5JQ19XQVRDSERPR19TVEFUVVNfNl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9CQl9QQU5JQ19XQVRDSERPR19TVEFUVVNfUEFOSUNfV0FUQ0hET0dfU1RBVFVTXzZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMGYwMDAwMAotI2RlZmluZSBQSFlfQkJfUEFOSUNfV0FUQ0hET0dfU1RBVFVTX1BBTklDX1dBVENIRE9HX1NUQVRVU182X0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiAweDAwZjAwMDAwKSA+PiAyMCkKLSNkZWZpbmUgUEhZX0JCX1BBTklDX1dBVENIRE9HX1NUQVRVU19QQU5JQ19XQVRDSERPR19TVEFUVVNfNl9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IDIwKSAmIDB4MDBmMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9QQU5JQ19XQVRDSERPR19TVEFUVVNfUEFOSUNfV0FUQ0hET0dfU1RBVFVTXzdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQkJfUEFOSUNfV0FUQ0hET0dfU1RBVFVTX1BBTklDX1dBVENIRE9HX1NUQVRVU183X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0JCX1BBTklDX1dBVENIRE9HX1NUQVRVU19QQU5JQ19XQVRDSERPR19TVEFUVVNfN19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBmMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9QQU5JQ19XQVRDSERPR19TVEFUVVNfUEFOSUNfV0FUQ0hET0dfU1RBVFVTXzdfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIDB4MGYwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQkJfUEFOSUNfV0FUQ0hET0dfU1RBVFVTX1BBTklDX1dBVENIRE9HX1NUQVRVU183X1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgMjQpICYgMHgwZjAwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1BBTklDX1dBVENIRE9HX1NUQVRVU19QQU5JQ19XQVRDSERPR19TVEFUVVNfOF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9QQU5JQ19XQVRDSERPR19TVEFUVVNfUEFOSUNfV0FUQ0hET0dfU1RBVFVTXzhfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQkJfUEFOSUNfV0FUQ0hET0dfU1RBVFVTX1BBTklDX1dBVENIRE9HX1NUQVRVU184X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZjAwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1BBTklDX1dBVENIRE9HX1NUQVRVU19QQU5JQ19XQVRDSERPR19TVEFUVVNfOF9HRVQoeCkgICAgICAgICAgICgoKHgpICYgMHhmMDAwMDAwMCkgPj4gMjgpCi0jZGVmaW5lIFBIWV9CQl9QQU5JQ19XQVRDSERPR19TVEFUVVNfUEFOSUNfV0FUQ0hET0dfU1RBVFVTXzhfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCAyOCkgJiAweGYwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3BhbmljX3dhdGNoZG9nX2N0cmxfMSAqLwotI2RlZmluZSBQSFlfQkJfUEFOSUNfV0FUQ0hET0dfQ1RSTF8xX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEyNDgKLSNkZWZpbmUgUEhZX0JCX1BBTklDX1dBVENIRE9HX0NUUkxfMV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMjQ4Ci0jZGVmaW5lIFBIWV9CQl9QQU5JQ19XQVRDSERPR19DVFJMXzFfRU5BQkxFX1BBTklDX1dBVENIRE9HX05PTl9JRExFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfUEFOSUNfV0FUQ0hET0dfQ1RSTF8xX0VOQUJMRV9QQU5JQ19XQVRDSERPR19OT05fSURMRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1BBTklDX1dBVENIRE9HX0NUUkxfMV9FTkFCTEVfUEFOSUNfV0FUQ0hET0dfTk9OX0lETEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFBIWV9CQl9QQU5JQ19XQVRDSERPR19DVFJMXzFfRU5BQkxFX1BBTklDX1dBVENIRE9HX05PTl9JRExFX0dFVCh4KSAgICAgKCgoeCkgJiAweDAwMDAwMDAxKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfUEFOSUNfV0FUQ0hET0dfQ1RSTF8xX0VOQUJMRV9QQU5JQ19XQVRDSERPR19OT05fSURMRV9TRVQoeCkgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwMSkKLSNkZWZpbmUgUEhZX0JCX1BBTklDX1dBVENIRE9HX0NUUkxfMV9FTkFCTEVfUEFOSUNfV0FUQ0hET0dfSURMRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9CQl9QQU5JQ19XQVRDSERPR19DVFJMXzFfRU5BQkxFX1BBTklDX1dBVENIRE9HX0lETEVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQkJfUEFOSUNfV0FUQ0hET0dfQ1RSTF8xX0VOQUJMRV9QQU5JQ19XQVRDSERPR19JRExFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgUEhZX0JCX1BBTklDX1dBVENIRE9HX0NUUkxfMV9FTkFCTEVfUEFOSUNfV0FUQ0hET0dfSURMRV9HRVQoeCkgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDIpID4+IDEpCi0jZGVmaW5lIFBIWV9CQl9QQU5JQ19XQVRDSERPR19DVFJMXzFfRU5BQkxFX1BBTklDX1dBVENIRE9HX0lETEVfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgMSkgJiAweDAwMDAwMDAyKQotI2RlZmluZSBQSFlfQkJfUEFOSUNfV0FUQ0hET0dfQ1RSTF8xX1BBTklDX1dBVENIRE9HX05PTl9JRExFX0xJTUlUX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0JCX1BBTklDX1dBVENIRE9HX0NUUkxfMV9QQU5JQ19XQVRDSERPR19OT05fSURMRV9MSU1JVF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9CQl9QQU5JQ19XQVRDSERPR19DVFJMXzFfUEFOSUNfV0FUQ0hET0dfTk9OX0lETEVfTElNSVRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwZmZmYwotI2RlZmluZSBQSFlfQkJfUEFOSUNfV0FUQ0hET0dfQ1RSTF8xX1BBTklDX1dBVENIRE9HX05PTl9JRExFX0xJTUlUX0dFVCh4KSAgICAgICgoKHgpICYgMHgwMDAwZmZmYykgPj4gMikKLSNkZWZpbmUgUEhZX0JCX1BBTklDX1dBVENIRE9HX0NUUkxfMV9QQU5JQ19XQVRDSERPR19OT05fSURMRV9MSU1JVF9TRVQoeCkgICAgICAoKCh4KSA8PCAyKSAmIDB4MDAwMGZmZmMpCi0jZGVmaW5lIFBIWV9CQl9QQU5JQ19XQVRDSERPR19DVFJMXzFfUEFOSUNfV0FUQ0hET0dfSURMRV9MSU1JVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfUEFOSUNfV0FUQ0hET0dfQ1RSTF8xX1BBTklDX1dBVENIRE9HX0lETEVfTElNSVRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0JCX1BBTklDX1dBVENIRE9HX0NUUkxfMV9QQU5JQ19XQVRDSERPR19JRExFX0xJTUlUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmYwMDAwCi0jZGVmaW5lIFBIWV9CQl9QQU5JQ19XQVRDSERPR19DVFJMXzFfUEFOSUNfV0FUQ0hET0dfSURMRV9MSU1JVF9HRVQoeCkgICAgICAgICAoKCh4KSAmIDB4ZmZmZjAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQkJfUEFOSUNfV0FUQ0hET0dfQ1RSTF8xX1BBTklDX1dBVENIRE9HX0lETEVfTElNSVRfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHhmZmZmMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9wYW5pY193YXRjaGRvZ19jdHJsXzIgKi8KLSNkZWZpbmUgUEhZX0JCX1BBTklDX1dBVENIRE9HX0NUUkxfMl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMjRjCi0jZGVmaW5lIFBIWV9CQl9QQU5JQ19XQVRDSERPR19DVFJMXzJfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTI0YwotI2RlZmluZSBQSFlfQkJfUEFOSUNfV0FUQ0hET0dfQ1RSTF8yX0ZPUkNFX0ZBU1RfQURDX0NMS19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1BBTklDX1dBVENIRE9HX0NUUkxfMl9GT1JDRV9GQVNUX0FEQ19DTEtfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9QQU5JQ19XQVRDSERPR19DVFJMXzJfRk9SQ0VfRkFTVF9BRENfQ0xLX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBQSFlfQkJfUEFOSUNfV0FUQ0hET0dfQ1RSTF8yX0ZPUkNFX0ZBU1RfQURDX0NMS19HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMSkgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1BBTklDX1dBVENIRE9HX0NUUkxfMl9GT1JDRV9GQVNUX0FEQ19DTEtfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFBIWV9CQl9QQU5JQ19XQVRDSERPR19DVFJMXzJfUEFOSUNfV0FUQ0hET0dfUkVTRVRfRU5BX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQkJfUEFOSUNfV0FUQ0hET0dfQ1RSTF8yX1BBTklDX1dBVENIRE9HX1JFU0VUX0VOQV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0JCX1BBTklDX1dBVENIRE9HX0NUUkxfMl9QQU5JQ19XQVRDSERPR19SRVNFVF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFBIWV9CQl9QQU5JQ19XQVRDSERPR19DVFJMXzJfUEFOSUNfV0FUQ0hET0dfUkVTRVRfRU5BX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAyKSA+PiAxKQotI2RlZmluZSBQSFlfQkJfUEFOSUNfV0FUQ0hET0dfQ1RSTF8yX1BBTklDX1dBVENIRE9HX1JFU0VUX0VOQV9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IDEpICYgMHgwMDAwMDAwMikKLSNkZWZpbmUgUEhZX0JCX1BBTklDX1dBVENIRE9HX0NUUkxfMl9QQU5JQ19XQVRDSERPR19JUlFfRU5BX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9CQl9QQU5JQ19XQVRDSERPR19DVFJMXzJfUEFOSUNfV0FUQ0hET0dfSVJRX0VOQV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQkJfUEFOSUNfV0FUQ0hET0dfQ1RSTF8yX1BBTklDX1dBVENIRE9HX0lSUV9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgUEhZX0JCX1BBTklDX1dBVENIRE9HX0NUUkxfMl9QQU5JQ19XQVRDSERPR19JUlFfRU5BX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDQpID4+IDIpCi0jZGVmaW5lIFBIWV9CQl9QQU5JQ19XQVRDSERPR19DVFJMXzJfUEFOSUNfV0FUQ0hET0dfSVJRX0VOQV9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgMikgJiAweDAwMDAwMDA0KQotCi0vKiBtYWNyb3MgZm9yIEJCX2lxY29ycl9jdHJsX2NjayAqLwotI2RlZmluZSBQSFlfQkJfSVFDT1JSX0NUUkxfQ0NLX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEyNTAKLSNkZWZpbmUgUEhZX0JCX0lRQ09SUl9DVFJMX0NDS19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMjUwCi0jZGVmaW5lIFBIWV9CQl9JUUNPUlJfQ1RSTF9DQ0tfSVFDT1JSX1FfUV9DT0ZGX0NDS19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQkJfSVFDT1JSX0NUUkxfQ0NLX0lRQ09SUl9RX1FfQ09GRl9DQ0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0lRQ09SUl9DVFJMX0NDS19JUUNPUlJfUV9RX0NPRkZfQ0NLX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFmCi0jZGVmaW5lIFBIWV9CQl9JUUNPUlJfQ1RSTF9DQ0tfSVFDT1JSX1FfUV9DT0ZGX0NDS19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDFmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfSVFDT1JSX0NUUkxfQ0NLX0lRQ09SUl9RX1FfQ09GRl9DQ0tfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAxZikKLSNkZWZpbmUgUEhZX0JCX0lRQ09SUl9DVFJMX0NDS19JUUNPUlJfUV9JX0NPRkZfQ0NLX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9CQl9JUUNPUlJfQ1RSTF9DQ0tfSVFDT1JSX1FfSV9DT0ZGX0NDS19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQkJfSVFDT1JSX0NUUkxfQ0NLX0lRQ09SUl9RX0lfQ09GRl9DQ0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3ZTAKLSNkZWZpbmUgUEhZX0JCX0lRQ09SUl9DVFJMX0NDS19JUUNPUlJfUV9JX0NPRkZfQ0NLX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDA3ZTApID4+IDUpCi0jZGVmaW5lIFBIWV9CQl9JUUNPUlJfQ1RSTF9DQ0tfSVFDT1JSX1FfSV9DT0ZGX0NDS19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNSkgJiAweDAwMDAwN2UwKQotI2RlZmluZSBQSFlfQkJfSVFDT1JSX0NUUkxfQ0NLX0VOQUJMRV9JUUNPUlJfQ0NLX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0JCX0lRQ09SUl9DVFJMX0NDS19FTkFCTEVfSVFDT1JSX0NDS19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9CQl9JUUNPUlJfQ1RSTF9DQ0tfRU5BQkxFX0lRQ09SUl9DQ0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAotI2RlZmluZSBQSFlfQkJfSVFDT1JSX0NUUkxfQ0NLX0VOQUJMRV9JUUNPUlJfQ0NLX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwODAwKSA+PiAxMSkKLSNkZWZpbmUgUEhZX0JCX0lRQ09SUl9DVFJMX0NDS19FTkFCTEVfSVFDT1JSX0NDS19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDExKSAmIDB4MDAwMDA4MDApCi0jZGVmaW5lIFBIWV9CQl9JUUNPUlJfQ1RSTF9DQ0tfUlhDQUxfTUVBU19USU1FX1NFTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfSVFDT1JSX0NUUkxfQ0NLX1JYQ0FMX01FQVNfVElNRV9TRUxfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0JCX0lRQ09SUl9DVFJMX0NDS19SWENBTF9NRUFTX1RJTUVfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzMDAwCi0jZGVmaW5lIFBIWV9CQl9JUUNPUlJfQ1RSTF9DQ0tfUlhDQUxfTUVBU19USU1FX1NFTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDMwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQkJfSVFDT1JSX0NUUkxfQ0NLX1JYQ0FMX01FQVNfVElNRV9TRUxfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTIpICYgMHgwMDAwMzAwMCkKLSNkZWZpbmUgUEhZX0JCX0lRQ09SUl9DVFJMX0NDS19DTENBTF9NRUFTX1RJTUVfU0VMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9CQl9JUUNPUlJfQ1RSTF9DQ0tfQ0xDQUxfTUVBU19USU1FX1NFTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQkJfSVFDT1JSX0NUUkxfQ0NLX0NMQ0FMX01FQVNfVElNRV9TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGMwMDAKLSNkZWZpbmUgUEhZX0JCX0lRQ09SUl9DVFJMX0NDS19DTENBTF9NRUFTX1RJTUVfU0VMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwYzAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9CQl9JUUNPUlJfQ1RSTF9DQ0tfQ0xDQUxfTUVBU19USU1FX1NFTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNCkgJiAweDAwMDBjMDAwKQotI2RlZmluZSBQSFlfQkJfSVFDT1JSX0NUUkxfQ0NLX0NGX0NMQ19JTklUX1JGR0FJTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0JCX0lRQ09SUl9DVFJMX0NDS19DRl9DTENfSU5JVF9SRkdBSU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9JUUNPUlJfQ1RSTF9DQ0tfQ0ZfQ0xDX0lOSVRfUkZHQUlOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDFmMDAwMAotI2RlZmluZSBQSFlfQkJfSVFDT1JSX0NUUkxfQ0NLX0NGX0NMQ19JTklUX1JGR0FJTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMWYwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0JCX0lRQ09SUl9DVFJMX0NDS19DRl9DTENfSU5JVF9SRkdBSU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDAxZjAwMDApCi0jZGVmaW5lIFBIWV9CQl9JUUNPUlJfQ1RSTF9DQ0tfQ0ZfQ0xDX1BBTF9NT0RFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQkJfSVFDT1JSX0NUUkxfQ0NLX0NGX0NMQ19QQUxfTU9ERV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0JCX0lRQ09SUl9DVFJMX0NDS19DRl9DTENfUEFMX01PREVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCi0jZGVmaW5lIFBIWV9CQl9JUUNPUlJfQ1RSTF9DQ0tfQ0ZfQ0xDX1BBTF9NT0RFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAyMDAwMDApID4+IDIxKQotI2RlZmluZSBQSFlfQkJfSVFDT1JSX0NUUkxfQ0NLX0NGX0NMQ19QQUxfTU9ERV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjEpICYgMHgwMDIwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9ibHVldG9vdGhfY250bCAqLwotI2RlZmluZSBQSFlfQkJfQkxVRVRPT1RIX0NOVExfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEyNTQKLSNkZWZpbmUgUEhZX0JCX0JMVUVUT09USF9DTlRMX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMjU0Ci0jZGVmaW5lIFBIWV9CQl9CTFVFVE9PVEhfQ05UTF9CVF9CUkVBS19DQ0tfRU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfQkxVRVRPT1RIX0NOVExfQlRfQlJFQUtfQ0NLX0VOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0JMVUVUT09USF9DTlRMX0JUX0JSRUFLX0NDS19FTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFBIWV9CQl9CTFVFVE9PVEhfQ05UTF9CVF9CUkVBS19DQ0tfRU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAxKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfQkxVRVRPT1RIX0NOVExfQlRfQlJFQUtfQ0NLX0VOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwMSkKLSNkZWZpbmUgUEhZX0JCX0JMVUVUT09USF9DTlRMX0JUX0FOVF9IQUxUX1dMQU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9CQl9CTFVFVE9PVEhfQ05UTF9CVF9BTlRfSEFMVF9XTEFOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQkJfQkxVRVRPT1RIX0NOVExfQlRfQU5UX0hBTFRfV0xBTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgUEhZX0JCX0JMVUVUT09USF9DTlRMX0JUX0FOVF9IQUxUX1dMQU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDIpID4+IDEpCi0jZGVmaW5lIFBIWV9CQl9CTFVFVE9PVEhfQ05UTF9CVF9BTlRfSEFMVF9XTEFOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMSkgJiAweDAwMDAwMDAyKQotCi0vKiBtYWNyb3MgZm9yIEJCX3RwY18xICovCi0jZGVmaW5lIFBIWV9CQl9UUENfMV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTI1OAotI2RlZmluZSBQSFlfQkJfVFBDXzFfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEyNTgKLSNkZWZpbmUgUEhZX0JCX1RQQ18xX0ZPUkNFX0RBQ19HQUlOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9UUENfMV9GT1JDRV9EQUNfR0FJTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfVFBDXzFfRk9SQ0VfREFDX0dBSU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUEhZX0JCX1RQQ18xX0ZPUkNFX0RBQ19HQUlOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDEpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9UUENfMV9GT1JDRV9EQUNfR0FJTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDAxKQotI2RlZmluZSBQSFlfQkJfVFBDXzFfRk9SQ0VEX0RBQ19HQUlOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0JCX1RQQ18xX0ZPUkNFRF9EQUNfR0FJTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9CQl9UUENfMV9GT1JDRURfREFDX0dBSU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzZQotI2RlZmluZSBQSFlfQkJfVFBDXzFfRk9SQ0VEX0RBQ19HQUlOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAzZSkgPj4gMSkKLSNkZWZpbmUgUEhZX0JCX1RQQ18xX0ZPUkNFRF9EQUNfR0FJTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxKSAmIDB4MDAwMDAwM2UpCi0jZGVmaW5lIFBIWV9CQl9UUENfMV9QRF9EQ19PRkZTRVRfVEFSR0VUX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfVFBDXzFfUERfRENfT0ZGU0VUX1RBUkdFVF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0JCX1RQQ18xX1BEX0RDX09GRlNFVF9UQVJHRVRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzZmMwCi0jZGVmaW5lIFBIWV9CQl9UUENfMV9QRF9EQ19PRkZTRVRfVEFSR0VUX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAzZmMwKSA+PiA2KQotI2RlZmluZSBQSFlfQkJfVFBDXzFfUERfRENfT0ZGU0VUX1RBUkdFVF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDYpICYgMHgwMDAwM2ZjMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18xX05VTV9QRF9HQUlOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9CQl9UUENfMV9OVU1fUERfR0FJTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQkJfVFBDXzFfTlVNX1BEX0dBSU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGMwMDAKLSNkZWZpbmUgUEhZX0JCX1RQQ18xX05VTV9QRF9HQUlOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwYzAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9CQl9UUENfMV9OVU1fUERfR0FJTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNCkgJiAweDAwMDBjMDAwKQotI2RlZmluZSBQSFlfQkJfVFBDXzFfUERfR0FJTl9TRVRUSU5HMV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0JCX1RQQ18xX1BEX0dBSU5fU0VUVElORzFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9UUENfMV9QRF9HQUlOX1NFVFRJTkcxX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzMDAwMAotI2RlZmluZSBQSFlfQkJfVFBDXzFfUERfR0FJTl9TRVRUSU5HMV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDMwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0JCX1RQQ18xX1BEX0dBSU5fU0VUVElORzFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDAwMzAwMDApCi0jZGVmaW5lIFBIWV9CQl9UUENfMV9QRF9HQUlOX1NFVFRJTkcyX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQkJfVFBDXzFfUERfR0FJTl9TRVRUSU5HMl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUEhZX0JCX1RQQ18xX1BEX0dBSU5fU0VUVElORzJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMGMwMDAwCi0jZGVmaW5lIFBIWV9CQl9UUENfMV9QRF9HQUlOX1NFVFRJTkcyX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwYzAwMDApID4+IDE4KQotI2RlZmluZSBQSFlfQkJfVFBDXzFfUERfR0FJTl9TRVRUSU5HMl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTgpICYgMHgwMDBjMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18xX1BEX0dBSU5fU0VUVElORzNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9CQl9UUENfMV9QRF9HQUlOX1NFVFRJTkczX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQkJfVFBDXzFfUERfR0FJTl9TRVRUSU5HM19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1RQQ18xX1BEX0dBSU5fU0VUVElORzNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDMwMDAwMCkgPj4gMjApCi0jZGVmaW5lIFBIWV9CQl9UUENfMV9QRF9HQUlOX1NFVFRJTkczX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMCkgJiAweDAwMzAwMDAwKQotI2RlZmluZSBQSFlfQkJfVFBDXzFfRU5BQkxFX1BEX0NBTElCUkFURV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0JCX1RQQ18xX0VOQUJMRV9QRF9DQUxJQlJBVEVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9CQl9UUENfMV9FTkFCTEVfUERfQ0FMSUJSQVRFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAotI2RlZmluZSBQSFlfQkJfVFBDXzFfRU5BQkxFX1BEX0NBTElCUkFURV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwNDAwMDAwKSA+PiAyMikKLSNkZWZpbmUgUEhZX0JCX1RQQ18xX0VOQUJMRV9QRF9DQUxJQlJBVEVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIyKSAmIDB4MDA0MDAwMDApCi0jZGVmaW5lIFBIWV9CQl9UUENfMV9QRF9DQUxJQlJBVEVfV0FJVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQkJfVFBDXzFfUERfQ0FMSUJSQVRFX1dBSVRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0JCX1RQQ18xX1BEX0NBTElCUkFURV9XQUlUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFmODAwMDAwCi0jZGVmaW5lIFBIWV9CQl9UUENfMV9QRF9DQUxJQlJBVEVfV0FJVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MWY4MDAwMDApID4+IDIzKQotI2RlZmluZSBQSFlfQkJfVFBDXzFfUERfQ0FMSUJSQVRFX1dBSVRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjMpICYgMHgxZjgwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18xX0ZPUkNFX1BEQURDX0dBSU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9CQl9UUENfMV9GT1JDRV9QREFEQ19HQUlOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQkJfVFBDXzFfRk9SQ0VfUERBRENfR0FJTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1RQQ18xX0ZPUkNFX1BEQURDX0dBSU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgyMDAwMDAwMCkgPj4gMjkpCi0jZGVmaW5lIFBIWV9CQl9UUENfMV9GT1JDRV9QREFEQ19HQUlOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyOSkgJiAweDIwMDAwMDAwKQotI2RlZmluZSBQSFlfQkJfVFBDXzFfRk9SQ0VEX1BEQURDX0dBSU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX1RQQ18xX0ZPUkNFRF9QREFEQ19HQUlOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9CQl9UUENfMV9GT1JDRURfUERBRENfR0FJTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjMDAwMDAwMAotI2RlZmluZSBQSFlfQkJfVFBDXzFfRk9SQ0VEX1BEQURDX0dBSU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGMwMDAwMDAwKSA+PiAzMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18xX0ZPUkNFRF9QREFEQ19HQUlOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMwKSAmIDB4YzAwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfdHBjXzIgKi8KLSNkZWZpbmUgUEhZX0JCX1RQQ18yX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMjVjCi0jZGVmaW5lIFBIWV9CQl9UUENfMl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTI1YwotI2RlZmluZSBQSFlfQkJfVFBDXzJfVFhfRlJBTUVfVE9fUERBRENfT05fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0JCX1RQQ18yX1RYX0ZSQU1FX1RPX1BEQURDX09OX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9UUENfMl9UWF9GUkFNRV9UT19QREFEQ19PTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBQSFlfQkJfVFBDXzJfVFhfRlJBTUVfVE9fUERBRENfT05fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDBmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18yX1RYX0ZSQU1FX1RPX1BEQURDX09OX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwZmYpCi0jZGVmaW5lIFBIWV9CQl9UUENfMl9UWF9GUkFNRV9UT19QRF9BQ0NfT0ZETV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQkJfVFBDXzJfVFhfRlJBTUVfVE9fUERfQUNDX09GRE1fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0JCX1RQQ18yX1RYX0ZSQU1FX1RPX1BEX0FDQ19PRkRNX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBmZjAwCi0jZGVmaW5lIFBIWV9CQl9UUENfMl9UWF9GUkFNRV9UT19QRF9BQ0NfT0ZETV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDBmZjAwKSA+PiA4KQotI2RlZmluZSBQSFlfQkJfVFBDXzJfVFhfRlJBTUVfVE9fUERfQUNDX09GRE1fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwZmYwMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18yX1RYX0ZSQU1FX1RPX1BEX0FDQ19DQ0tfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9CQl9UUENfMl9UWF9GUkFNRV9UT19QRF9BQ0NfQ0NLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQkJfVFBDXzJfVFhfRlJBTUVfVE9fUERfQUNDX0NDS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBmZjAwMDAKLSNkZWZpbmUgUEhZX0JCX1RQQ18yX1RYX0ZSQU1FX1RPX1BEX0FDQ19DQ0tfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMGZmMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9CQl9UUENfMl9UWF9GUkFNRV9UT19QRF9BQ0NfQ0NLX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAwZmYwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3RwY18zICovCi0jZGVmaW5lIFBIWV9CQl9UUENfM19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTI2MAotI2RlZmluZSBQSFlfQkJfVFBDXzNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEyNjAKLSNkZWZpbmUgUEhZX0JCX1RQQ18zX1RYX0VORF9UT19QREFEQ19PTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9CQl9UUENfM19UWF9FTkRfVE9fUERBRENfT05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfVFBDXzNfVFhfRU5EX1RPX1BEQURDX09OX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgUEhZX0JCX1RQQ18zX1RYX0VORF9UT19QREFEQ19PTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9UUENfM19UWF9FTkRfVE9fUERBRENfT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMGZmKQotI2RlZmluZSBQSFlfQkJfVFBDXzNfVFhfRU5EX1RPX1BEX0FDQ19PTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0JCX1RQQ18zX1RYX0VORF9UT19QRF9BQ0NfT05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9UUENfM19UWF9FTkRfVE9fUERfQUNDX09OX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBQSFlfQkJfVFBDXzNfVFhfRU5EX1RPX1BEX0FDQ19PTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwZmYwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18zX1RYX0VORF9UT19QRF9BQ0NfT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMGZmMDApCi0jZGVmaW5lIFBIWV9CQl9UUENfM19QRF9BQ0NfV0lORE9XX0RDX09GRl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQkJfVFBDXzNfUERfQUNDX1dJTkRPV19EQ19PRkZfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0JCX1RQQ18zX1BEX0FDQ19XSU5ET1dfRENfT0ZGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDcwMDAwCi0jZGVmaW5lIFBIWV9CQl9UUENfM19QRF9BQ0NfV0lORE9XX0RDX09GRl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwNzAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQkJfVFBDXzNfUERfQUNDX1dJTkRPV19EQ19PRkZfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMDA3MDAwMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18zX1BEX0FDQ19XSU5ET1dfQ0FMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9CQl9UUENfM19QRF9BQ0NfV0lORE9XX0NBTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQkJfVFBDXzNfUERfQUNDX1dJTkRPV19DQUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzODAwMDAKLSNkZWZpbmUgUEhZX0JCX1RQQ18zX1BEX0FDQ19XSU5ET1dfQ0FMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDM4MDAwMCkgPj4gMTkpCi0jZGVmaW5lIFBIWV9CQl9UUENfM19QRF9BQ0NfV0lORE9XX0NBTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOSkgJiAweDAwMzgwMDAwKQotI2RlZmluZSBQSFlfQkJfVFBDXzNfUERfQUNDX1dJTkRPV19PRkRNX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0JCX1RQQ18zX1BEX0FDQ19XSU5ET1dfT0ZETV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9CQl9UUENfM19QRF9BQ0NfV0lORE9XX09GRE1fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMWMwMDAwMAotI2RlZmluZSBQSFlfQkJfVFBDXzNfUERfQUNDX1dJTkRPV19PRkRNX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAxYzAwMDAwKSA+PiAyMikKLSNkZWZpbmUgUEhZX0JCX1RQQ18zX1BEX0FDQ19XSU5ET1dfT0ZETV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIyKSAmIDB4MDFjMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9UUENfM19QRF9BQ0NfV0lORE9XX0NDS19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQkJfVFBDXzNfUERfQUNDX1dJTkRPV19DQ0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0JCX1RQQ18zX1BEX0FDQ19XSU5ET1dfQ0NLX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBlMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9UUENfM19QRF9BQ0NfV0lORE9XX0NDS19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MGUwMDAwMDApID4+IDI1KQotI2RlZmluZSBQSFlfQkJfVFBDXzNfUERfQUNDX1dJTkRPV19DQ0tfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjUpICYgMHgwZTAwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18zX1RQQ19DTEtfR0FURV9FTkFCTEVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9UUENfM19UUENfQ0xLX0dBVEVfRU5BQkxFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFBDXzNfVFBDX0NMS19HQVRFX0VOQUJMRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1RQQ18zX1RQQ19DTEtfR0FURV9FTkFCTEVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg4MDAwMDAwMCkgPj4gMzEpCi0jZGVmaW5lIFBIWV9CQl9UUENfM19UUENfQ0xLX0dBVEVfRU5BQkxFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMSkgJiAweDgwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3RwY180X2IwICovCi0jZGVmaW5lIFBIWV9CQl9UUENfNF9CMF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTI2NAotI2RlZmluZSBQSFlfQkJfVFBDXzRfQjBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEyNjQKLSNkZWZpbmUgUEhZX0JCX1RQQ180X0IwX1BEX0FWR19WQUxJRF8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9UUENfNF9CMF9QRF9BVkdfVkFMSURfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfVFBDXzRfQjBfUERfQVZHX1ZBTElEXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUEhZX0JCX1RQQ180X0IwX1BEX0FWR19WQUxJRF8wX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDEpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9UUENfNF9CMF9QRF9BVkdfT1VUXzBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQkJfVFBDXzRfQjBfUERfQVZHX09VVF8wX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0JCX1RQQ180X0IwX1BEX0FWR19PVVRfMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMWZlCi0jZGVmaW5lIFBIWV9CQl9UUENfNF9CMF9QRF9BVkdfT1VUXzBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMWZlKSA+PiAxKQotI2RlZmluZSBQSFlfQkJfVFBDXzRfQjBfREFDX0dBSU5fMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0JCX1RQQ180X0IwX0RBQ19HQUlOXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9CQl9UUENfNF9CMF9EQUNfR0FJTl8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwM2UwMAotI2RlZmluZSBQSFlfQkJfVFBDXzRfQjBfREFDX0dBSU5fMF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwM2UwMCkgPj4gOSkKLSNkZWZpbmUgUEhZX0JCX1RQQ180X0IwX1RYX0dBSU5fU0VUVElOR18wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9CQl9UUENfNF9CMF9UWF9HQUlOX1NFVFRJTkdfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQkJfVFBDXzRfQjBfVFhfR0FJTl9TRVRUSU5HXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwZmMwMDAKLSNkZWZpbmUgUEhZX0JCX1RQQ180X0IwX1RYX0dBSU5fU0VUVElOR18wX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDBmYzAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9CQl9UUENfNF9CMF9SQVRFX1NFTlRfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQkJfVFBDXzRfQjBfUkFURV9TRU5UXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0JCX1RQQ180X0IwX1JBVEVfU0VOVF8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxZjAwMDAwCi0jZGVmaW5lIFBIWV9CQl9UUENfNF9CMF9SQVRFX1NFTlRfMF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDFmMDAwMDApID4+IDIwKQotI2RlZmluZSBQSFlfQkJfVFBDXzRfQjBfRVJST1JfRVNUX1VQREFURV9QT1dFUl9USFJFU0hfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgUEhZX0JCX1RQQ180X0IwX0VSUk9SX0VTVF9VUERBVEVfUE9XRVJfVEhSRVNIX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9CQl9UUENfNF9CMF9FUlJPUl9FU1RfVVBEQVRFX1BPV0VSX1RIUkVTSF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3ZTAwMDAwMAotI2RlZmluZSBQSFlfQkJfVFBDXzRfQjBfRVJST1JfRVNUX1VQREFURV9QT1dFUl9USFJFU0hfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdlMDAwMDAwKSA+PiAyNSkKLSNkZWZpbmUgUEhZX0JCX1RQQ180X0IwX0VSUk9SX0VTVF9VUERBVEVfUE9XRVJfVEhSRVNIX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI1KSAmIDB4N2UwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfYW5hbG9nX3N3YXAgKi8KLSNkZWZpbmUgUEhZX0JCX0FOQUxPR19TV0FQX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMjY4Ci0jZGVmaW5lIFBIWV9CQl9BTkFMT0dfU1dBUF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTI2OAotI2RlZmluZSBQSFlfQkJfQU5BTE9HX1NXQVBfQU5BTE9HX1JYX1NXQVBfQ05UTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0JCX0FOQUxPR19TV0FQX0FOQUxPR19SWF9TV0FQX0NOVExfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9BTkFMT0dfU1dBUF9BTkFMT0dfUlhfU1dBUF9DTlRMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNwotI2RlZmluZSBQSFlfQkJfQU5BTE9HX1NXQVBfQU5BTE9HX1JYX1NXQVBfQ05UTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwNykgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0FOQUxPR19TV0FQX0FOQUxPR19SWF9TV0FQX0NOVExfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDcpCi0jZGVmaW5lIFBIWV9CQl9BTkFMT0dfU1dBUF9BTkFMT0dfVFhfU1dBUF9DTlRMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQkJfQU5BTE9HX1NXQVBfQU5BTE9HX1RYX1NXQVBfQ05UTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0JCX0FOQUxPR19TV0FQX0FOQUxPR19UWF9TV0FQX0NOVExfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4Ci0jZGVmaW5lIFBIWV9CQl9BTkFMT0dfU1dBUF9BTkFMT0dfVFhfU1dBUF9DTlRMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDM4KSA+PiAzKQotI2RlZmluZSBQSFlfQkJfQU5BTE9HX1NXQVBfQU5BTE9HX1RYX1NXQVBfQ05UTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMpICYgMHgwMDAwMDAzOCkKLSNkZWZpbmUgUEhZX0JCX0FOQUxPR19TV0FQX1NXQVBfQUxUX0NITl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9CQl9BTkFMT0dfU1dBUF9TV0FQX0FMVF9DSE5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQkJfQU5BTE9HX1NXQVBfU1dBUF9BTFRfQ0hOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgUEhZX0JCX0FOQUxPR19TV0FQX1NXQVBfQUxUX0NITl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwNDApID4+IDYpCi0jZGVmaW5lIFBIWV9CQl9BTkFMT0dfU1dBUF9TV0FQX0FMVF9DSE5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNikgJiAweDAwMDAwMDQwKQotI2RlZmluZSBQSFlfQkJfQU5BTE9HX1NXQVBfQU5BTE9HX0RDX0RBQ19QT0xBUklUWV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0JCX0FOQUxPR19TV0FQX0FOQUxPR19EQ19EQUNfUE9MQVJJVFlfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9CQl9BTkFMT0dfU1dBUF9BTkFMT0dfRENfREFDX1BPTEFSSVRZX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBQSFlfQkJfQU5BTE9HX1NXQVBfQU5BTE9HX0RDX0RBQ19QT0xBUklUWV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDA4MCkgPj4gNykKLSNkZWZpbmUgUEhZX0JCX0FOQUxPR19TV0FQX0FOQUxPR19EQ19EQUNfUE9MQVJJVFlfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA3KSAmIDB4MDAwMDAwODApCi0jZGVmaW5lIFBIWV9CQl9BTkFMT0dfU1dBUF9BTkFMT0dfUEtERVRfREFDX1BPTEFSSVRZX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQkJfQU5BTE9HX1NXQVBfQU5BTE9HX1BLREVUX0RBQ19QT0xBUklUWV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0JCX0FOQUxPR19TV0FQX0FOQUxPR19QS0RFVF9EQUNfUE9MQVJJVFlfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCi0jZGVmaW5lIFBIWV9CQl9BTkFMT0dfU1dBUF9BTkFMT0dfUEtERVRfREFDX1BPTEFSSVRZX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMTAwKSA+PiA4KQotI2RlZmluZSBQSFlfQkJfQU5BTE9HX1NXQVBfQU5BTE9HX1BLREVUX0RBQ19QT0xBUklUWV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwMDEwMCkKLQotLyogbWFjcm9zIGZvciBCQl90cGNfNV9iMCAqLwotI2RlZmluZSBQSFlfQkJfVFBDXzVfQjBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEyNmMKLSNkZWZpbmUgUEhZX0JCX1RQQ181X0IwX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMjZjCi0jZGVmaW5lIFBIWV9CQl9UUENfNV9CMF9QRF9HQUlOX09WRVJMQVBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQkJfVFBDXzVfQjBfUERfR0FJTl9PVkVSTEFQX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RQQ181X0IwX1BEX0dBSU5fT1ZFUkxBUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBmCi0jZGVmaW5lIFBIWV9CQl9UUENfNV9CMF9QRF9HQUlOX09WRVJMQVBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDBmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFBDXzVfQjBfUERfR0FJTl9PVkVSTEFQX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwZikKLSNkZWZpbmUgUEhZX0JCX1RQQ181X0IwX1BEX0dBSU5fQk9VTkRBUllfMV8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9CQl9UUENfNV9CMF9QRF9HQUlOX0JPVU5EQVJZXzFfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQkJfVFBDXzVfQjBfUERfR0FJTl9CT1VOREFSWV8xXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzZjAKLSNkZWZpbmUgUEhZX0JCX1RQQ181X0IwX1BEX0dBSU5fQk9VTkRBUllfMV8wX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAzZjApID4+IDQpCi0jZGVmaW5lIFBIWV9CQl9UUENfNV9CMF9QRF9HQUlOX0JPVU5EQVJZXzFfMF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNCkgJiAweDAwMDAwM2YwKQotI2RlZmluZSBQSFlfQkJfVFBDXzVfQjBfUERfR0FJTl9CT1VOREFSWV8yXzBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0JCX1RQQ181X0IwX1BEX0dBSU5fQk9VTkRBUllfMl8wX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9CQl9UUENfNV9CMF9QRF9HQUlOX0JPVU5EQVJZXzJfMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwZmMwMAotI2RlZmluZSBQSFlfQkJfVFBDXzVfQjBfUERfR0FJTl9CT1VOREFSWV8yXzBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDBmYzAwKSA+PiAxMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ181X0IwX1BEX0dBSU5fQk9VTkRBUllfMl8wX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEwKSAmIDB4MDAwMGZjMDApCi0jZGVmaW5lIFBIWV9CQl9UUENfNV9CMF9QRF9HQUlOX0JPVU5EQVJZXzNfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQkJfVFBDXzVfQjBfUERfR0FJTl9CT1VOREFSWV8zXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0JCX1RQQ181X0IwX1BEX0dBSU5fQk9VTkRBUllfM18wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwM2YwMDAwCi0jZGVmaW5lIFBIWV9CQl9UUENfNV9CMF9QRF9HQUlOX0JPVU5EQVJZXzNfMF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAzZjAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQkJfVFBDXzVfQjBfUERfR0FJTl9CT1VOREFSWV8zXzBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMDNmMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ181X0IwX1BEX0dBSU5fQk9VTkRBUllfNF8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9CQl9UUENfNV9CMF9QRF9HQUlOX0JPVU5EQVJZXzRfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBQSFlfQkJfVFBDXzVfQjBfUERfR0FJTl9CT1VOREFSWV80XzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGZjMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1RQQ181X0IwX1BEX0dBSU5fQk9VTkRBUllfNF8wX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwZmMwMDAwMCkgPj4gMjIpCi0jZGVmaW5lIFBIWV9CQl9UUENfNV9CMF9QRF9HQUlOX0JPVU5EQVJZXzRfMF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMikgJiAweDBmYzAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3RwY182X2IwICovCi0jZGVmaW5lIFBIWV9CQl9UUENfNl9CMF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTI3MAotI2RlZmluZSBQSFlfQkJfVFBDXzZfQjBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEyNzAKLSNkZWZpbmUgUEhZX0JCX1RQQ182X0IwX1BEX0RBQ19TRVRUSU5HXzFfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9CQl9UUENfNl9CMF9QRF9EQUNfU0VUVElOR18xXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfVFBDXzZfQjBfUERfREFDX1NFVFRJTkdfMV8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM2YKLSNkZWZpbmUgUEhZX0JCX1RQQ182X0IwX1BEX0RBQ19TRVRUSU5HXzFfMF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwM2YpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9UUENfNl9CMF9QRF9EQUNfU0VUVElOR18xXzBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDNmKQotI2RlZmluZSBQSFlfQkJfVFBDXzZfQjBfUERfREFDX1NFVFRJTkdfMl8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0JCX1RQQ182X0IwX1BEX0RBQ19TRVRUSU5HXzJfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9CQl9UUENfNl9CMF9QRF9EQUNfU0VUVElOR18yXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGZjMAotI2RlZmluZSBQSFlfQkJfVFBDXzZfQjBfUERfREFDX1NFVFRJTkdfMl8wX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMGZjMCkgPj4gNikKLSNkZWZpbmUgUEhZX0JCX1RQQ182X0IwX1BEX0RBQ19TRVRUSU5HXzJfMF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA2KSAmIDB4MDAwMDBmYzApCi0jZGVmaW5lIFBIWV9CQl9UUENfNl9CMF9QRF9EQUNfU0VUVElOR18zXzBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQkJfVFBDXzZfQjBfUERfREFDX1NFVFRJTkdfM18wX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0JCX1RQQ182X0IwX1BEX0RBQ19TRVRUSU5HXzNfMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDNmMDAwCi0jZGVmaW5lIFBIWV9CQl9UUENfNl9CMF9QRF9EQUNfU0VUVElOR18zXzBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwM2YwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQkJfVFBDXzZfQjBfUERfREFDX1NFVFRJTkdfM18wX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTIpICYgMHgwMDAzZjAwMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ182X0IwX1BEX0RBQ19TRVRUSU5HXzRfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9CQl9UUENfNl9CMF9QRF9EQUNfU0VUVElOR180XzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQkJfVFBDXzZfQjBfUERfREFDX1NFVFRJTkdfNF8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBmYzAwMDAKLSNkZWZpbmUgUEhZX0JCX1RQQ182X0IwX1BEX0RBQ19TRVRUSU5HXzRfMF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMGZjMDAwMCkgPj4gMTgpCi0jZGVmaW5lIFBIWV9CQl9UUENfNl9CMF9QRF9EQUNfU0VUVElOR180XzBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOCkgJiAweDAwZmMwMDAwKQotI2RlZmluZSBQSFlfQkJfVFBDXzZfQjBfRVJST1JfRVNUX01PREVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0JCX1RQQ182X0IwX0VSUk9SX0VTVF9NT0RFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9CQl9UUENfNl9CMF9FUlJPUl9FU1RfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzAwMDAwMAotI2RlZmluZSBQSFlfQkJfVFBDXzZfQjBfRVJST1JfRVNUX01PREVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAzMDAwMDAwKSA+PiAyNCkKLSNkZWZpbmUgUEhZX0JCX1RQQ182X0IwX0VSUk9SX0VTVF9NT0RFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI0KSAmIDB4MDMwMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9UUENfNl9CMF9FUlJPUl9FU1RfRklMVEVSX0NPRUZGX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQkJfVFBDXzZfQjBfRVJST1JfRVNUX0ZJTFRFUl9DT0VGRl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0JCX1RQQ182X0IwX0VSUk9SX0VTVF9GSUxURVJfQ09FRkZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFjMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9UUENfNl9CMF9FUlJPUl9FU1RfRklMVEVSX0NPRUZGX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MWMwMDAwMDApID4+IDI2KQotI2RlZmluZSBQSFlfQkJfVFBDXzZfQjBfRVJST1JfRVNUX0ZJTFRFUl9DT0VGRl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjYpICYgMHgxYzAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl90cGNfNyAqLwotI2RlZmluZSBQSFlfQkJfVFBDXzdfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEyNzQKLSNkZWZpbmUgUEhZX0JCX1RQQ183X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMjc0Ci0jZGVmaW5lIFBIWV9CQl9UUENfN19UWF9HQUlOX1RBQkxFX01BWF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQkJfVFBDXzdfVFhfR0FJTl9UQUJMRV9NQVhfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RQQ183X1RYX0dBSU5fVEFCTEVfTUFYX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNmCi0jZGVmaW5lIFBIWV9CQl9UUENfN19UWF9HQUlOX1RBQkxFX01BWF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDNmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFBDXzdfVFhfR0FJTl9UQUJMRV9NQVhfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAzZikKLSNkZWZpbmUgUEhZX0JCX1RQQ183X0lOSVRfVFhfR0FJTl9TRVRUSU5HX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9CQl9UUENfN19JTklUX1RYX0dBSU5fU0VUVElOR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQkJfVFBDXzdfSU5JVF9UWF9HQUlOX1NFVFRJTkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBmYzAKLSNkZWZpbmUgUEhZX0JCX1RQQ183X0lOSVRfVFhfR0FJTl9TRVRUSU5HX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDBmYzApID4+IDYpCi0jZGVmaW5lIFBIWV9CQl9UUENfN19JTklUX1RYX0dBSU5fU0VUVElOR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNikgJiAweDAwMDAwZmMwKQotI2RlZmluZSBQSFlfQkJfVFBDXzdfRU5fQ0xfR0FJTl9NT0RfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0JCX1RQQ183X0VOX0NMX0dBSU5fTU9EX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9CQl9UUENfN19FTl9DTF9HQUlOX01PRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAotI2RlZmluZSBQSFlfQkJfVFBDXzdfRU5fQ0xfR0FJTl9NT0RfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAxMDAwKSA+PiAxMikKLSNkZWZpbmUgUEhZX0JCX1RQQ183X0VOX0NMX0dBSU5fTU9EX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEyKSAmIDB4MDAwMDEwMDApCi0jZGVmaW5lIFBIWV9CQl9UUENfN19VU0VfVFhfUERfSU5fWFBBX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfVFBDXzdfVVNFX1RYX1BEX0lOX1hQQV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0JCX1RQQ183X1VTRV9UWF9QRF9JTl9YUEFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCi0jZGVmaW5lIFBIWV9CQl9UUENfN19VU0VfVFhfUERfSU5fWFBBX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDIwMDApID4+IDEzKQotI2RlZmluZSBQSFlfQkJfVFBDXzdfVVNFX1RYX1BEX0lOX1hQQV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTMpICYgMHgwMDAwMjAwMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ183X0VYVEVORF9UWF9GUkFNRV9GT1JfVFBDX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9CQl9UUENfN19FWFRFTkRfVFhfRlJBTUVfRk9SX1RQQ19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQkJfVFBDXzdfRVhURU5EX1RYX0ZSQU1FX0ZPUl9UUENfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKLSNkZWZpbmUgUEhZX0JCX1RQQ183X0VYVEVORF9UWF9GUkFNRV9GT1JfVFBDX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwNDAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9CQl9UUENfN19FWFRFTkRfVFhfRlJBTUVfRk9SX1RQQ19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNCkgJiAweDAwMDA0MDAwKQotI2RlZmluZSBQSFlfQkJfVFBDXzdfVVNFX0lOSVRfVFhfR0FJTl9TRVRUSU5HX0FGVEVSX1dBUk1fUkVTRVRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0JCX1RQQ183X1VTRV9JTklUX1RYX0dBSU5fU0VUVElOR19BRlRFUl9XQVJNX1JFU0VUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9CQl9UUENfN19VU0VfSU5JVF9UWF9HQUlOX1NFVFRJTkdfQUZURVJfV0FSTV9SRVNFVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAotI2RlZmluZSBQSFlfQkJfVFBDXzdfVVNFX0lOSVRfVFhfR0FJTl9TRVRUSU5HX0FGVEVSX1dBUk1fUkVTRVRfR0VUKHgpICAgICAgICAgKCgoeCkgJiAweDAwMDA4MDAwKSA+PiAxNSkKLSNkZWZpbmUgUEhZX0JCX1RQQ183X1VTRV9JTklUX1RYX0dBSU5fU0VUVElOR19BRlRFUl9XQVJNX1JFU0VUX1NFVCh4KSAgICAgICAgICgoKHgpIDw8IDE1KSAmIDB4MDAwMDgwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfdHBjXzggKi8KLSNkZWZpbmUgUEhZX0JCX1RQQ184X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMjc4Ci0jZGVmaW5lIFBIWV9CQl9UUENfOF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTI3OAotI2RlZmluZSBQSFlfQkJfVFBDXzhfREVTSVJFRF9TQ0FMRV8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0JCX1RQQ184X0RFU0lSRURfU0NBTEVfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9UUENfOF9ERVNJUkVEX1NDQUxFXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxZgotI2RlZmluZSBQSFlfQkJfVFBDXzhfREVTSVJFRF9TQ0FMRV8wX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAxZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ184X0RFU0lSRURfU0NBTEVfMF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMWYpCi0jZGVmaW5lIFBIWV9CQl9UUENfOF9ERVNJUkVEX1NDQUxFXzFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQkJfVFBDXzhfREVTSVJFRF9TQ0FMRV8xX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0JCX1RQQ184X0RFU0lSRURfU0NBTEVfMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM2UwCi0jZGVmaW5lIFBIWV9CQl9UUENfOF9ERVNJUkVEX1NDQUxFXzFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwM2UwKSA+PiA1KQotI2RlZmluZSBQSFlfQkJfVFBDXzhfREVTSVJFRF9TQ0FMRV8xX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDUpICYgMHgwMDAwMDNlMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ184X0RFU0lSRURfU0NBTEVfMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9CQl9UUENfOF9ERVNJUkVEX1NDQUxFXzJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQkJfVFBDXzhfREVTSVJFRF9TQ0FMRV8yX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDdjMDAKLSNkZWZpbmUgUEhZX0JCX1RQQ184X0RFU0lSRURfU0NBTEVfMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwN2MwMCkgPj4gMTApCi0jZGVmaW5lIFBIWV9CQl9UUENfOF9ERVNJUkVEX1NDQUxFXzJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMCkgJiAweDAwMDA3YzAwKQotI2RlZmluZSBQSFlfQkJfVFBDXzhfREVTSVJFRF9TQ0FMRV8zX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUEhZX0JCX1RQQ184X0RFU0lSRURfU0NBTEVfM19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9CQl9UUENfOF9ERVNJUkVEX1NDQUxFXzNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBmODAwMAotI2RlZmluZSBQSFlfQkJfVFBDXzhfREVTSVJFRF9TQ0FMRV8zX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMGY4MDAwKSA+PiAxNSkKLSNkZWZpbmUgUEhZX0JCX1RQQ184X0RFU0lSRURfU0NBTEVfM19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE1KSAmIDB4MDAwZjgwMDApCi0jZGVmaW5lIFBIWV9CQl9UUENfOF9ERVNJUkVEX1NDQUxFXzRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQkJfVFBDXzhfREVTSVJFRF9TQ0FMRV80X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0JCX1RQQ184X0RFU0lSRURfU0NBTEVfNF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxZjAwMDAwCi0jZGVmaW5lIFBIWV9CQl9UUENfOF9ERVNJUkVEX1NDQUxFXzRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDFmMDAwMDApID4+IDIwKQotI2RlZmluZSBQSFlfQkJfVFBDXzhfREVTSVJFRF9TQ0FMRV80X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjApICYgMHgwMWYwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ184X0RFU0lSRURfU0NBTEVfNV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9CQl9UUENfOF9ERVNJUkVEX1NDQUxFXzVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQkJfVFBDXzhfREVTSVJFRF9TQ0FMRV81X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M2UwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1RQQ184X0RFU0lSRURfU0NBTEVfNV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzZTAwMDAwMCkgPj4gMjUpCi0jZGVmaW5lIFBIWV9CQl9UUENfOF9ERVNJUkVEX1NDQUxFXzVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNSkgJiAweDNlMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3RwY185ICovCi0jZGVmaW5lIFBIWV9CQl9UUENfOV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTI3YwotI2RlZmluZSBQSFlfQkJfVFBDXzlfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEyN2MKLSNkZWZpbmUgUEhZX0JCX1RQQ185X0RFU0lSRURfU0NBTEVfNl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9CQl9UUENfOV9ERVNJUkVEX1NDQUxFXzZfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfVFBDXzlfREVTSVJFRF9TQ0FMRV82X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMWYKLSNkZWZpbmUgUEhZX0JCX1RQQ185X0RFU0lSRURfU0NBTEVfNl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMWYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9UUENfOV9ERVNJUkVEX1NDQUxFXzZfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDFmKQotI2RlZmluZSBQSFlfQkJfVFBDXzlfREVTSVJFRF9TQ0FMRV83X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0JCX1RQQ185X0RFU0lSRURfU0NBTEVfN19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9CQl9UUENfOV9ERVNJUkVEX1NDQUxFXzdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNlMAotI2RlZmluZSBQSFlfQkJfVFBDXzlfREVTSVJFRF9TQ0FMRV83X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDNlMCkgPj4gNSkKLSNkZWZpbmUgUEhZX0JCX1RQQ185X0RFU0lSRURfU0NBTEVfN19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA1KSAmIDB4MDAwMDAzZTApCi0jZGVmaW5lIFBIWV9CQl9UUENfOV9ERVNJUkVEX1NDQUxFX0NDS19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQkJfVFBDXzlfREVTSVJFRF9TQ0FMRV9DQ0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0JCX1RQQ185X0RFU0lSRURfU0NBTEVfQ0NLX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA3YzAwCi0jZGVmaW5lIFBIWV9CQl9UUENfOV9ERVNJUkVEX1NDQUxFX0NDS19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDdjMDApID4+IDEwKQotI2RlZmluZSBQSFlfQkJfVFBDXzlfREVTSVJFRF9TQ0FMRV9DQ0tfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTApICYgMHgwMDAwN2MwMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ185X0VOX1BEX0RDX09GRlNFVF9USFJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9CQl9UUENfOV9FTl9QRF9EQ19PRkZTRVRfVEhSX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQkJfVFBDXzlfRU5fUERfRENfT0ZGU0VUX1RIUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1RQQ185X0VOX1BEX0RDX09GRlNFVF9USFJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDEwMDAwMCkgPj4gMjApCi0jZGVmaW5lIFBIWV9CQl9UUENfOV9FTl9QRF9EQ19PRkZTRVRfVEhSX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMCkgJiAweDAwMTAwMDAwKQotI2RlZmluZSBQSFlfQkJfVFBDXzlfUERfRENfT0ZGU0VUX1RIUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0JCX1RQQ185X1BEX0RDX09GRlNFVF9USFJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9CQl9UUENfOV9QRF9EQ19PRkZTRVRfVEhSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwN2UwMDAwMAotI2RlZmluZSBQSFlfQkJfVFBDXzlfUERfRENfT0ZGU0VUX1RIUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDA3ZTAwMDAwKSA+PiAyMSkKLSNkZWZpbmUgUEhZX0JCX1RQQ185X1BEX0RDX09GRlNFVF9USFJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIxKSAmIDB4MDdlMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9UUENfOV9XQUlUX0NBTFRYX1NFVFRMRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQkJfVFBDXzlfV0FJVF9DQUxUWF9TRVRUTEVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0JCX1RQQ185X1dBSVRfQ0FMVFhfU0VUVExFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDc4MDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9UUENfOV9XQUlUX0NBTFRYX1NFVFRMRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NzgwMDAwMDApID4+IDI3KQotI2RlZmluZSBQSFlfQkJfVFBDXzlfV0FJVF9DQUxUWF9TRVRUTEVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjcpICYgMHg3ODAwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ185X0RJU0FCTEVfUERBRENfUkVTSURVQUxfRENfUkVNT1ZBTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9UUENfOV9ESVNBQkxFX1BEQURDX1JFU0lEVUFMX0RDX1JFTU9WQUxfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFBDXzlfRElTQUJMRV9QREFEQ19SRVNJRFVBTF9EQ19SRU1PVkFMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1RQQ185X0RJU0FCTEVfUERBRENfUkVTSURVQUxfRENfUkVNT1ZBTF9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHg4MDAwMDAwMCkgPj4gMzEpCi0jZGVmaW5lIFBIWV9CQl9UUENfOV9ESVNBQkxFX1BEQURDX1JFU0lEVUFMX0RDX1JFTU9WQUxfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMSkgJiAweDgwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3BkYWRjX3RhYl9iMCAqLwotI2RlZmluZSBQSFlfQkJfUERBRENfVEFCX0IwX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEyODAKLSNkZWZpbmUgUEhZX0JCX1BEQURDX1RBQl9CMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMjgwCi0jZGVmaW5lIFBIWV9CQl9QREFEQ19UQUJfQjBfVEFCX0VOVFJZX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfUERBRENfVEFCX0IwX1RBQl9FTlRSWV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1BEQURDX1RBQl9CMF9UQUJfRU5UUllfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9QREFEQ19UQUJfQjBfVEFCX0VOVFJZX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweGZmZmZmZmZmKQotCi0vKiBtYWNyb3MgZm9yIEJCX2NsX3RhYl9iMCAqLwotI2RlZmluZSBQSFlfQkJfQ0xfVEFCX0IwX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEzMDAKLSNkZWZpbmUgUEhZX0JCX0NMX1RBQl9CMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMzAwCi0jZGVmaW5lIFBIWV9CQl9DTF9UQUJfQjBfQ0xfR0FJTl9NT0RfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQkJfQ0xfVEFCX0IwX0NMX0dBSU5fTU9EX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0NMX1RBQl9CMF9DTF9HQUlOX01PRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFmCi0jZGVmaW5lIFBIWV9CQl9DTF9UQUJfQjBfQ0xfR0FJTl9NT0RfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDFmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfQ0xfVEFCX0IwX0NMX0dBSU5fTU9EX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAxZikKLSNkZWZpbmUgUEhZX0JCX0NMX1RBQl9CMF9DQVJSX0xLX0RDX0FERF9RX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9CQl9DTF9UQUJfQjBfQ0FSUl9MS19EQ19BRERfUV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQkJfQ0xfVEFCX0IwX0NBUlJfTEtfRENfQUREX1FfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGZmZTAKLSNkZWZpbmUgUEhZX0JCX0NMX1RBQl9CMF9DQVJSX0xLX0RDX0FERF9RX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMGZmZTApID4+IDUpCi0jZGVmaW5lIFBIWV9CQl9DTF9UQUJfQjBfQ0FSUl9MS19EQ19BRERfUV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNSkgJiAweDAwMDBmZmUwKQotI2RlZmluZSBQSFlfQkJfQ0xfVEFCX0IwX0NBUlJfTEtfRENfQUREX0lfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0JCX0NMX1RBQl9CMF9DQVJSX0xLX0RDX0FERF9JX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9DTF9UQUJfQjBfQ0FSUl9MS19EQ19BRERfSV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwN2ZmMDAwMAotI2RlZmluZSBQSFlfQkJfQ0xfVEFCX0IwX0NBUlJfTEtfRENfQUREX0lfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDA3ZmYwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0JCX0NMX1RBQl9CMF9DQVJSX0xLX0RDX0FERF9JX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDdmZjAwMDApCi0jZGVmaW5lIFBIWV9CQl9DTF9UQUJfQjBfQkJfR0FJTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQkJfQ0xfVEFCX0IwX0JCX0dBSU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0JCX0NMX1RBQl9CMF9CQl9HQUlOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDc4MDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9DTF9UQUJfQjBfQkJfR0FJTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NzgwMDAwMDApID4+IDI3KQotI2RlZmluZSBQSFlfQkJfQ0xfVEFCX0IwX0JCX0dBSU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjcpICYgMHg3ODAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9jbF9tYXBfMF9iMCAqLwotI2RlZmluZSBQSFlfQkJfQ0xfTUFQXzBfQjBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEzNDAKLSNkZWZpbmUgUEhZX0JCX0NMX01BUF8wX0IwX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMzQwCi0jZGVmaW5lIFBIWV9CQl9DTF9NQVBfMF9CMF9DTF9NQVBfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfQ0xfTUFQXzBfQjBfQ0xfTUFQXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0NMX01BUF8wX0IwX0NMX01BUF8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9DTF9NQVBfMF9CMF9DTF9NQVBfMF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfQ0xfTUFQXzBfQjBfQ0xfTUFQXzBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl9jbF9tYXBfMV9iMCAqLwotI2RlZmluZSBQSFlfQkJfQ0xfTUFQXzFfQjBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEzNDQKLSNkZWZpbmUgUEhZX0JCX0NMX01BUF8xX0IwX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMzQ0Ci0jZGVmaW5lIFBIWV9CQl9DTF9NQVBfMV9CMF9DTF9NQVBfMV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfQ0xfTUFQXzFfQjBfQ0xfTUFQXzFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0NMX01BUF8xX0IwX0NMX01BUF8xX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9DTF9NQVBfMV9CMF9DTF9NQVBfMV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfQ0xfTUFQXzFfQjBfQ0xfTUFQXzFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl9jbF9tYXBfMl9iMCAqLwotI2RlZmluZSBQSFlfQkJfQ0xfTUFQXzJfQjBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEzNDgKLSNkZWZpbmUgUEhZX0JCX0NMX01BUF8yX0IwX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMzQ4Ci0jZGVmaW5lIFBIWV9CQl9DTF9NQVBfMl9CMF9DTF9NQVBfMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfQ0xfTUFQXzJfQjBfQ0xfTUFQXzJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0NMX01BUF8yX0IwX0NMX01BUF8yX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9DTF9NQVBfMl9CMF9DTF9NQVBfMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfQ0xfTUFQXzJfQjBfQ0xfTUFQXzJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl9jbF9tYXBfM19iMCAqLwotI2RlZmluZSBQSFlfQkJfQ0xfTUFQXzNfQjBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEzNGMKLSNkZWZpbmUgUEhZX0JCX0NMX01BUF8zX0IwX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMzRjCi0jZGVmaW5lIFBIWV9CQl9DTF9NQVBfM19CMF9DTF9NQVBfM19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfQ0xfTUFQXzNfQjBfQ0xfTUFQXzNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0NMX01BUF8zX0IwX0NMX01BUF8zX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9DTF9NQVBfM19CMF9DTF9NQVBfM19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfQ0xfTUFQXzNfQjBfQ0xfTUFQXzNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl9jbF9jYWxfY3RybCAqLwotI2RlZmluZSBQSFlfQkJfQ0xfQ0FMX0NUUkxfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEzNTgKLSNkZWZpbmUgUEhZX0JCX0NMX0NBTF9DVFJMX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMzU4Ci0jZGVmaW5lIFBIWV9CQl9DTF9DQUxfQ1RSTF9FTkFCTEVfUEFSQUxMRUxfQ0FMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfQ0xfQ0FMX0NUUkxfRU5BQkxFX1BBUkFMTEVMX0NBTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0NMX0NBTF9DVFJMX0VOQUJMRV9QQVJBTExFTF9DQUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFBIWV9CQl9DTF9DQUxfQ1RSTF9FTkFCTEVfUEFSQUxMRUxfQ0FMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAxKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfQ0xfQ0FMX0NUUkxfRU5BQkxFX1BBUkFMTEVMX0NBTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwMSkKLSNkZWZpbmUgUEhZX0JCX0NMX0NBTF9DVFJMX0VOQUJMRV9DTF9DQUxJQlJBVEVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9CQl9DTF9DQUxfQ1RSTF9FTkFCTEVfQ0xfQ0FMSUJSQVRFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQkJfQ0xfQ0FMX0NUUkxfRU5BQkxFX0NMX0NBTElCUkFURV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgUEhZX0JCX0NMX0NBTF9DVFJMX0VOQUJMRV9DTF9DQUxJQlJBVEVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDIpID4+IDEpCi0jZGVmaW5lIFBIWV9CQl9DTF9DQUxfQ1RSTF9FTkFCTEVfQ0xfQ0FMSUJSQVRFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMSkgJiAweDAwMDAwMDAyKQotI2RlZmluZSBQSFlfQkJfQ0xfQ0FMX0NUUkxfQ0ZfQ0xDX1RFU1RfUE9JTlRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0JCX0NMX0NBTF9DVFJMX0NGX0NMQ19URVNUX1BPSU5UX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9CQl9DTF9DQUxfQ1RSTF9DRl9DTENfVEVTVF9QT0lOVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwYwotI2RlZmluZSBQSFlfQkJfQ0xfQ0FMX0NUUkxfQ0ZfQ0xDX1RFU1RfUE9JTlRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwYykgPj4gMikKLSNkZWZpbmUgUEhZX0JCX0NMX0NBTF9DVFJMX0NGX0NMQ19URVNUX1BPSU5UX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyKSAmIDB4MDAwMDAwMGMpCi0jZGVmaW5lIFBIWV9CQl9DTF9DQUxfQ1RSTF9DRl9DTENfRk9SQ0VEX1BBR0FJTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQkJfQ0xfQ0FMX0NUUkxfQ0ZfQ0xDX0ZPUkNFRF9QQUdBSU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0JCX0NMX0NBTF9DVFJMX0NGX0NMQ19GT1JDRURfUEFHQUlOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGYwCi0jZGVmaW5lIFBIWV9CQl9DTF9DQUxfQ1RSTF9DRl9DTENfRk9SQ0VEX1BBR0FJTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMGYwKSA+PiA0KQotI2RlZmluZSBQSFlfQkJfQ0xfQ0FMX0NUUkxfQ0ZfQ0xDX0ZPUkNFRF9QQUdBSU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDQpICYgMHgwMDAwMDBmMCkKLSNkZWZpbmUgUEhZX0JCX0NMX0NBTF9DVFJMX0NBUlJfTEVBS19NQVhfT0ZGU0VUX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9CQl9DTF9DQUxfQ1RSTF9DQVJSX0xFQUtfTUFYX09GRlNFVF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQkJfQ0xfQ0FMX0NUUkxfQ0FSUl9MRUFLX01BWF9PRkZTRVRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGZmMDAKLSNkZWZpbmUgUEhZX0JCX0NMX0NBTF9DVFJMX0NBUlJfTEVBS19NQVhfT0ZGU0VUX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMGZmMDApID4+IDgpCi0jZGVmaW5lIFBIWV9CQl9DTF9DQUxfQ1RSTF9DQVJSX0xFQUtfTUFYX09GRlNFVF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDBmZjAwKQotI2RlZmluZSBQSFlfQkJfQ0xfQ0FMX0NUUkxfQ0ZfQ0xDX0lOSVRfQkJHQUlOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0JCX0NMX0NBTF9DVFJMX0NGX0NMQ19JTklUX0JCR0FJTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9DTF9DQUxfQ1RSTF9DRl9DTENfSU5JVF9CQkdBSU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDNmMDAwMAotI2RlZmluZSBQSFlfQkJfQ0xfQ0FMX0NUUkxfQ0ZfQ0xDX0lOSVRfQkJHQUlOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwM2YwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0JCX0NMX0NBTF9DVFJMX0NGX0NMQ19JTklUX0JCR0FJTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDAzZjAwMDApCi0jZGVmaW5lIFBIWV9CQl9DTF9DQUxfQ1RSTF9DRl9BRENfQk9VTkRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQkJfQ0xfQ0FMX0NUUkxfQ0ZfQURDX0JPVU5EX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0JCX0NMX0NBTF9DVFJMX0NGX0FEQ19CT1VORF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNmYzAwMDAwCi0jZGVmaW5lIFBIWV9CQl9DTF9DQUxfQ1RSTF9DRl9BRENfQk9VTkRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4M2ZjMDAwMDApID4+IDIyKQotI2RlZmluZSBQSFlfQkJfQ0xfQ0FMX0NUUkxfQ0ZfQURDX0JPVU5EX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjIpICYgMHgzZmMwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX0NMX0NBTF9DVFJMX1VTRV9EQUNfQ0xfQ09SUkVDVElPTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9CQl9DTF9DQUxfQ1RSTF9VU0VfREFDX0NMX0NPUlJFQ1RJT05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQkJfQ0xfQ0FMX0NUUkxfVVNFX0RBQ19DTF9DT1JSRUNUSU9OX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX0NMX0NBTF9DVFJMX1VTRV9EQUNfQ0xfQ09SUkVDVElPTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg0MDAwMDAwMCkgPj4gMzApCi0jZGVmaW5lIFBIWV9CQl9DTF9DQUxfQ1RSTF9VU0VfREFDX0NMX0NPUlJFQ1RJT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMCkgJiAweDQwMDAwMDAwKQotI2RlZmluZSBQSFlfQkJfQ0xfQ0FMX0NUUkxfQ0xfTUFQX0hXX0dFTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX0NMX0NBTF9DVFJMX0NMX01BUF9IV19HRU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9DTF9DQUxfQ1RSTF9DTF9NQVBfSFdfR0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBQSFlfQkJfQ0xfQ0FMX0NUUkxfQ0xfTUFQX0hXX0dFTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDgwMDAwMDAwKSA+PiAzMSkKLSNkZWZpbmUgUEhZX0JCX0NMX0NBTF9DVFJMX0NMX01BUF9IV19HRU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDMxKSAmIDB4ODAwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfY2xfbWFwX3BhbF8wX2IwICovCi0jZGVmaW5lIFBIWV9CQl9DTF9NQVBfUEFMXzBfQjBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTM1YwotI2RlZmluZSBQSFlfQkJfQ0xfTUFQX1BBTF8wX0IwX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEzNWMKLSNkZWZpbmUgUEhZX0JCX0NMX01BUF9QQUxfMF9CMF9DTF9NQVBfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9DTF9NQVBfUEFMXzBfQjBfQ0xfTUFQXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfQ0xfTUFQX1BBTF8wX0IwX0NMX01BUF8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgUEhZX0JCX0NMX01BUF9QQUxfMF9CMF9DTF9NQVBfMF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZmZmZmZmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9DTF9NQVBfUEFMXzBfQjBfQ0xfTUFQXzBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweGZmZmZmZmZmKQotCi0vKiBtYWNyb3MgZm9yIEJCX2NsX21hcF9wYWxfMV9iMCAqLwotI2RlZmluZSBQSFlfQkJfQ0xfTUFQX1BBTF8xX0IwX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEzNjAKLSNkZWZpbmUgUEhZX0JCX0NMX01BUF9QQUxfMV9CMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMzYwCi0jZGVmaW5lIFBIWV9CQl9DTF9NQVBfUEFMXzFfQjBfQ0xfTUFQXzFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfQ0xfTUFQX1BBTF8xX0IwX0NMX01BUF8xX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0NMX01BUF9QQUxfMV9CMF9DTF9NQVBfMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9DTF9NQVBfUEFMXzFfQjBfQ0xfTUFQXzFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfQ0xfTUFQX1BBTF8xX0IwX0NMX01BUF8xX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl9jbF9tYXBfcGFsXzJfYjAgKi8KLSNkZWZpbmUgUEhZX0JCX0NMX01BUF9QQUxfMl9CMF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMzY0Ci0jZGVmaW5lIFBIWV9CQl9DTF9NQVBfUEFMXzJfQjBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTM2NAotI2RlZmluZSBQSFlfQkJfQ0xfTUFQX1BBTF8yX0IwX0NMX01BUF8yX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX0NMX01BUF9QQUxfMl9CMF9DTF9NQVBfMl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9DTF9NQVBfUEFMXzJfQjBfQ0xfTUFQXzJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBQSFlfQkJfQ0xfTUFQX1BBTF8yX0IwX0NMX01BUF8yX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhmZmZmZmZmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0NMX01BUF9QQUxfMl9CMF9DTF9NQVBfMl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4ZmZmZmZmZmYpCi0KLS8qIG1hY3JvcyBmb3IgQkJfY2xfbWFwX3BhbF8zX2IwICovCi0jZGVmaW5lIFBIWV9CQl9DTF9NQVBfUEFMXzNfQjBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTM2OAotI2RlZmluZSBQSFlfQkJfQ0xfTUFQX1BBTF8zX0IwX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEzNjgKLSNkZWZpbmUgUEhZX0JCX0NMX01BUF9QQUxfM19CMF9DTF9NQVBfM19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9DTF9NQVBfUEFMXzNfQjBfQ0xfTUFQXzNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfQ0xfTUFQX1BBTF8zX0IwX0NMX01BUF8zX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgUEhZX0JCX0NMX01BUF9QQUxfM19CMF9DTF9NQVBfM19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZmZmZmZmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9DTF9NQVBfUEFMXzNfQjBfQ0xfTUFQXzNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweGZmZmZmZmZmKQotCi0vKiBtYWNyb3MgZm9yIEJCX3JpZnMgKi8KLSNkZWZpbmUgUEhZX0JCX1JJRlNfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMzg4Ci0jZGVmaW5lIFBIWV9CQl9SSUZTX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTM4OAotI2RlZmluZSBQSFlfQkJfUklGU19ESVNBQkxFX0ZDQ19GSVhfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0JCX1JJRlNfRElTQUJMRV9GQ0NfRklYX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9CQl9SSUZTX0RJU0FCTEVfRkNDX0ZJWF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAotI2RlZmluZSBQSFlfQkJfUklGU19ESVNBQkxFX0ZDQ19GSVhfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAyMDAwMDAwKSA+PiAyNSkKLSNkZWZpbmUgUEhZX0JCX1JJRlNfRElTQUJMRV9GQ0NfRklYX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI1KSAmIDB4MDIwMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9SSUZTX0VOQUJMRV9SRVNFVF9URE9NQUlOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBQSFlfQkJfUklGU19FTkFCTEVfUkVTRVRfVERPTUFJTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0JCX1JJRlNfRU5BQkxFX1JFU0VUX1RET01BSU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9SSUZTX0VOQUJMRV9SRVNFVF9URE9NQUlOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDQwMDAwMDApID4+IDI2KQotI2RlZmluZSBQSFlfQkJfUklGU19FTkFCTEVfUkVTRVRfVERPTUFJTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjYpICYgMHgwNDAwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1JJRlNfRElTQUJMRV9GQ0NfRklYMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9CQl9SSUZTX0RJU0FCTEVfRkNDX0ZJWDJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQkJfUklGU19ESVNBQkxFX0ZDQ19GSVgyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1JJRlNfRElTQUJMRV9GQ0NfRklYMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwODAwMDAwMCkgPj4gMjcpCi0jZGVmaW5lIFBIWV9CQl9SSUZTX0RJU0FCTEVfRkNDX0ZJWDJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNykgJiAweDA4MDAwMDAwKQotI2RlZmluZSBQSFlfQkJfUklGU19ESVNBQkxFX1JJRlNfQ0NLX0ZJWF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0JCX1JJRlNfRElTQUJMRV9SSUZTX0NDS19GSVhfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9CQl9SSUZTX0RJU0FCTEVfUklGU19DQ0tfRklYX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAotI2RlZmluZSBQSFlfQkJfUklGU19ESVNBQkxFX1JJRlNfQ0NLX0ZJWF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEwMDAwMDAwKSA+PiAyOCkKLSNkZWZpbmUgUEhZX0JCX1JJRlNfRElTQUJMRV9SSUZTX0NDS19GSVhfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI4KSAmIDB4MTAwMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9SSUZTX0RJU0FCTEVfRVJST1JfUkVTRVRfRklYX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQkJfUklGU19ESVNBQkxFX0VSUk9SX1JFU0VUX0ZJWF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0JCX1JJRlNfRElTQUJMRV9FUlJPUl9SRVNFVF9GSVhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9SSUZTX0RJU0FCTEVfRVJST1JfUkVTRVRfRklYX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MjAwMDAwMDApID4+IDI5KQotI2RlZmluZSBQSFlfQkJfUklGU19ESVNBQkxFX0VSUk9SX1JFU0VUX0ZJWF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjkpICYgMHgyMDAwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1JJRlNfUkFEQVJfVVNFX0ZET01BSU5fUkVTRVRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBIWV9CQl9SSUZTX1JBREFSX1VTRV9GRE9NQUlOX1JFU0VUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQkJfUklGU19SQURBUl9VU0VfRkRPTUFJTl9SRVNFVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1JJRlNfUkFEQVJfVVNFX0ZET01BSU5fUkVTRVRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg0MDAwMDAwMCkgPj4gMzApCi0jZGVmaW5lIFBIWV9CQl9SSUZTX1JBREFSX1VTRV9GRE9NQUlOX1JFU0VUX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMCkgJiAweDQwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3Bvd2VydHhfcmF0ZTUgKi8KLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMzhjCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU1X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTM4YwotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFNV9QT1dFUlRYSFQyMF8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTVfUE9XRVJUWEhUMjBfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU1X1BPV0VSVFhIVDIwXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzZgotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFNV9QT1dFUlRYSFQyMF8wX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAzZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTVfUE9XRVJUWEhUMjBfMF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwM2YpCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU1X1BPV0VSVFhIVDIwXzFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFNV9QT1dFUlRYSFQyMF8xX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTVfUE9XRVJUWEhUMjBfMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzZjAwCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU1X1BPV0VSVFhIVDIwXzFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAzZjAwKSA+PiA4KQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFNV9QT1dFUlRYSFQyMF8xX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwM2YwMCkKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTVfUE9XRVJUWEhUMjBfMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU1X1BPV0VSVFhIVDIwXzJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFNV9QT1dFUlRYSFQyMF8yX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzZjAwMDAKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTVfUE9XRVJUWEhUMjBfMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDNmMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU1X1BPV0VSVFhIVDIwXzJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAwM2YwMDAwKQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFNV9QT1dFUlRYSFQyMF8zX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTVfUE9XRVJUWEhUMjBfM19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU1X1BPV0VSVFhIVDIwXzNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzZjAwMDAwMAotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFNV9QT1dFUlRYSFQyMF8zX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDNmMDAwMDAwKSA+PiAyNCkKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTVfUE9XRVJUWEhUMjBfM19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI0KSAmIDB4M2YwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfcG93ZXJ0eF9yYXRlNiAqLwotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFNl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEzOTAKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTZfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMzkwCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU2X1BPV0VSVFhIVDIwXzRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFNl9QT1dFUlRYSFQyMF80X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTZfUE9XRVJUWEhUMjBfNF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNmCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU2X1BPV0VSVFhIVDIwXzRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDNmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFNl9QT1dFUlRYSFQyMF80X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAzZikKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTZfUE9XRVJUWEhUMjBfNV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU2X1BPV0VSVFhIVDIwXzVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFNl9QT1dFUlRYSFQyMF81X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDNmMDAKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTZfUE9XRVJUWEhUMjBfNV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDNmMDApID4+IDgpCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU2X1BPV0VSVFhIVDIwXzVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAzZjAwKQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFNl9QT1dFUlRYSFQyMF82X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTZfUE9XRVJUWEhUMjBfNl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU2X1BPV0VSVFhIVDIwXzZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDNmMDAwMAotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFNl9QT1dFUlRYSFQyMF82X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwM2YwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTZfUE9XRVJUWEhUMjBfNl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDAzZjAwMDApCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU2X1BPV0VSVFhIVDIwXzdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFNl9QT1dFUlRYSFQyMF83X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTZfUE9XRVJUWEhUMjBfN19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNmMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU2X1BPV0VSVFhIVDIwXzdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4M2YwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFNl9QT1dFUlRYSFQyMF83X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjQpICYgMHgzZjAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl90cGNfMTAgKi8KLSNkZWZpbmUgUEhZX0JCX1RQQ18xMF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMzk0Ci0jZGVmaW5lIFBIWV9CQl9UUENfMTBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTM5NAotI2RlZmluZSBQSFlfQkJfVFBDXzEwX0RFU0lSRURfU0NBTEVfSFQyMF8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0JCX1RQQ18xMF9ERVNJUkVEX1NDQUxFX0hUMjBfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9UUENfMTBfREVTSVJFRF9TQ0FMRV9IVDIwXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxZgotI2RlZmluZSBQSFlfQkJfVFBDXzEwX0RFU0lSRURfU0NBTEVfSFQyMF8wX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAxZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18xMF9ERVNJUkVEX1NDQUxFX0hUMjBfMF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMWYpCi0jZGVmaW5lIFBIWV9CQl9UUENfMTBfREVTSVJFRF9TQ0FMRV9IVDIwXzFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQkJfVFBDXzEwX0RFU0lSRURfU0NBTEVfSFQyMF8xX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0JCX1RQQ18xMF9ERVNJUkVEX1NDQUxFX0hUMjBfMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM2UwCi0jZGVmaW5lIFBIWV9CQl9UUENfMTBfREVTSVJFRF9TQ0FMRV9IVDIwXzFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwM2UwKSA+PiA1KQotI2RlZmluZSBQSFlfQkJfVFBDXzEwX0RFU0lSRURfU0NBTEVfSFQyMF8xX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDUpICYgMHgwMDAwMDNlMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18xMF9ERVNJUkVEX1NDQUxFX0hUMjBfMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9CQl9UUENfMTBfREVTSVJFRF9TQ0FMRV9IVDIwXzJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQkJfVFBDXzEwX0RFU0lSRURfU0NBTEVfSFQyMF8yX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDdjMDAKLSNkZWZpbmUgUEhZX0JCX1RQQ18xMF9ERVNJUkVEX1NDQUxFX0hUMjBfMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwN2MwMCkgPj4gMTApCi0jZGVmaW5lIFBIWV9CQl9UUENfMTBfREVTSVJFRF9TQ0FMRV9IVDIwXzJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMCkgJiAweDAwMDA3YzAwKQotI2RlZmluZSBQSFlfQkJfVFBDXzEwX0RFU0lSRURfU0NBTEVfSFQyMF8zX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUEhZX0JCX1RQQ18xMF9ERVNJUkVEX1NDQUxFX0hUMjBfM19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9CQl9UUENfMTBfREVTSVJFRF9TQ0FMRV9IVDIwXzNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBmODAwMAotI2RlZmluZSBQSFlfQkJfVFBDXzEwX0RFU0lSRURfU0NBTEVfSFQyMF8zX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMGY4MDAwKSA+PiAxNSkKLSNkZWZpbmUgUEhZX0JCX1RQQ18xMF9ERVNJUkVEX1NDQUxFX0hUMjBfM19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE1KSAmIDB4MDAwZjgwMDApCi0jZGVmaW5lIFBIWV9CQl9UUENfMTBfREVTSVJFRF9TQ0FMRV9IVDIwXzRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQkJfVFBDXzEwX0RFU0lSRURfU0NBTEVfSFQyMF80X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0JCX1RQQ18xMF9ERVNJUkVEX1NDQUxFX0hUMjBfNF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxZjAwMDAwCi0jZGVmaW5lIFBIWV9CQl9UUENfMTBfREVTSVJFRF9TQ0FMRV9IVDIwXzRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDFmMDAwMDApID4+IDIwKQotI2RlZmluZSBQSFlfQkJfVFBDXzEwX0RFU0lSRURfU0NBTEVfSFQyMF80X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjApICYgMHgwMWYwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18xMF9ERVNJUkVEX1NDQUxFX0hUMjBfNV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9CQl9UUENfMTBfREVTSVJFRF9TQ0FMRV9IVDIwXzVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQkJfVFBDXzEwX0RFU0lSRURfU0NBTEVfSFQyMF81X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M2UwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1RQQ18xMF9ERVNJUkVEX1NDQUxFX0hUMjBfNV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzZTAwMDAwMCkgPj4gMjUpCi0jZGVmaW5lIFBIWV9CQl9UUENfMTBfREVTSVJFRF9TQ0FMRV9IVDIwXzVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNSkgJiAweDNlMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3RwY18xMV9iMCAqLwotI2RlZmluZSBQSFlfQkJfVFBDXzExX0IwX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEzOTgKLSNkZWZpbmUgUEhZX0JCX1RQQ18xMV9CMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMzk4Ci0jZGVmaW5lIFBIWV9CQl9UUENfMTFfQjBfREVTSVJFRF9TQ0FMRV9IVDIwXzZfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQkJfVFBDXzExX0IwX0RFU0lSRURfU0NBTEVfSFQyMF82X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RQQ18xMV9CMF9ERVNJUkVEX1NDQUxFX0hUMjBfNl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFmCi0jZGVmaW5lIFBIWV9CQl9UUENfMTFfQjBfREVTSVJFRF9TQ0FMRV9IVDIwXzZfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDFmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFBDXzExX0IwX0RFU0lSRURfU0NBTEVfSFQyMF82X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAxZikKLSNkZWZpbmUgUEhZX0JCX1RQQ18xMV9CMF9ERVNJUkVEX1NDQUxFX0hUMjBfN19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9CQl9UUENfMTFfQjBfREVTSVJFRF9TQ0FMRV9IVDIwXzdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQkJfVFBDXzExX0IwX0RFU0lSRURfU0NBTEVfSFQyMF83X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzZTAKLSNkZWZpbmUgUEhZX0JCX1RQQ18xMV9CMF9ERVNJUkVEX1NDQUxFX0hUMjBfN19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAzZTApID4+IDUpCi0jZGVmaW5lIFBIWV9CQl9UUENfMTFfQjBfREVTSVJFRF9TQ0FMRV9IVDIwXzdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNSkgJiAweDAwMDAwM2UwKQotI2RlZmluZSBQSFlfQkJfVFBDXzExX0IwX09MUENfR0FJTl9ERUxUQV8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0JCX1RQQ18xMV9CMF9PTFBDX0dBSU5fREVMVEFfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9UUENfMTFfQjBfT0xQQ19HQUlOX0RFTFRBXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMGZmMDAwMAotI2RlZmluZSBQSFlfQkJfVFBDXzExX0IwX09MUENfR0FJTl9ERUxUQV8wX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwZmYwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0JCX1RQQ18xMV9CMF9PTFBDX0dBSU5fREVMVEFfMF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDBmZjAwMDApCi0jZGVmaW5lIFBIWV9CQl9UUENfMTFfQjBfT0xQQ19HQUlOX0RFTFRBXzBfUEFMX09OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFBDXzExX0IwX09MUENfR0FJTl9ERUxUQV8wX1BBTF9PTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0JCX1RQQ18xMV9CMF9PTFBDX0dBSU5fREVMVEFfMF9QQUxfT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9UUENfMTFfQjBfT0xQQ19HQUlOX0RFTFRBXzBfUEFMX09OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZmYwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQkJfVFBDXzExX0IwX09MUENfR0FJTl9ERUxUQV8wX1BBTF9PTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjQpICYgMHhmZjAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9jYWxfY2hhaW5fbWFzayAqLwotI2RlZmluZSBQSFlfQkJfQ0FMX0NIQUlOX01BU0tfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEzOWMKLSNkZWZpbmUgUEhZX0JCX0NBTF9DSEFJTl9NQVNLX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhMzljCi0jZGVmaW5lIFBIWV9CQl9DQUxfQ0hBSU5fTUFTS19DQUxfQ0hBSU5fTUFTS19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQkJfQ0FMX0NIQUlOX01BU0tfQ0FMX0NIQUlOX01BU0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0NBTF9DSEFJTl9NQVNLX0NBTF9DSEFJTl9NQVNLX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3Ci0jZGVmaW5lIFBIWV9CQl9DQUxfQ0hBSU5fTUFTS19DQUxfQ0hBSU5fTUFTS19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDA3KSA+PiAwKQotI2RlZmluZSBQSFlfQkJfQ0FMX0NIQUlOX01BU0tfQ0FMX0NIQUlOX01BU0tfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwNykKLQotLyogbWFjcm9zIGZvciBCQl9wb3dlcnR4X3N1YiAqLwotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9TVUJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEzYmMKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfU1VCX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhM2JjCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1NVQl9QT1dFUlRYX1NVQl9GT1JfMkNIQUlOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9TVUJfUE9XRVJUWF9TVUJfRk9SXzJDSEFJTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfU1VCX1BPV0VSVFhfU1VCX0ZPUl8yQ0hBSU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNmCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1NVQl9QT1dFUlRYX1NVQl9GT1JfMkNIQUlOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDNmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9TVUJfUE9XRVJUWF9TVUJfRk9SXzJDSEFJTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAzZikKLQotLyogbWFjcm9zIGZvciBCQl9wb3dlcnR4X3JhdGU3ICovCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU3X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTNjMAotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFN19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEzYzAKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTdfUE9XRVJUWEhUNDBfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU3X1BPV0VSVFhIVDQwXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFN19QT1dFUlRYSFQ0MF8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM2YKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTdfUE9XRVJUWEhUNDBfMF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwM2YpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU3X1BPV0VSVFhIVDQwXzBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDNmKQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFN19QT1dFUlRYSFQ0MF8xX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTdfUE9XRVJUWEhUNDBfMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU3X1BPV0VSVFhIVDQwXzFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwM2YwMAotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFN19QT1dFUlRYSFQ0MF8xX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwM2YwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTdfUE9XRVJUWEhUNDBfMV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDNmMDApCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU3X1BPV0VSVFhIVDQwXzJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFN19QT1dFUlRYSFQ0MF8yX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTdfUE9XRVJUWEhUNDBfMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwM2YwMDAwCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU3X1BPV0VSVFhIVDQwXzJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAzZjAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFN19QT1dFUlRYSFQ0MF8yX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMDNmMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTdfUE9XRVJUWEhUNDBfM19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU3X1BPV0VSVFhIVDQwXzNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFN19QT1dFUlRYSFQ0MF8zX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M2YwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTdfUE9XRVJUWEhUNDBfM19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzZjAwMDAwMCkgPj4gMjQpCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU3X1BPV0VSVFhIVDQwXzNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNCkgJiAweDNmMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3Bvd2VydHhfcmF0ZTggKi8KLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURThfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhM2M0Ci0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU4X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTNjNAotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFOF9QT1dFUlRYSFQ0MF80X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURThfUE9XRVJUWEhUNDBfNF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU4X1BPV0VSVFhIVDQwXzRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzZgotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFOF9QT1dFUlRYSFQ0MF80X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAzZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURThfUE9XRVJUWEhUNDBfNF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwM2YpCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU4X1BPV0VSVFhIVDQwXzVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFOF9QT1dFUlRYSFQ0MF81X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURThfUE9XRVJUWEhUNDBfNV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzZjAwCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU4X1BPV0VSVFhIVDQwXzVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAzZjAwKSA+PiA4KQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFOF9QT1dFUlRYSFQ0MF81X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwM2YwMCkKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURThfUE9XRVJUWEhUNDBfNl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU4X1BPV0VSVFhIVDQwXzZfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFOF9QT1dFUlRYSFQ0MF82X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzZjAwMDAKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURThfUE9XRVJUWEhUNDBfNl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDNmMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU4X1BPV0VSVFhIVDQwXzZfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAwM2YwMDAwKQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFOF9QT1dFUlRYSFQ0MF83X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURThfUE9XRVJUWEhUNDBfN19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU4X1BPV0VSVFhIVDQwXzdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzZjAwMDAwMAotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFOF9QT1dFUlRYSFQ0MF83X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDNmMDAwMDAwKSA+PiAyNCkKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURThfUE9XRVJUWEhUNDBfN19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI0KSAmIDB4M2YwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfcG93ZXJ0eF9yYXRlOSAqLwotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFOV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEzYzgKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTlfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhM2M4Ci0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU5X1BPV0VSVFhfRFVQNDBfQ0NLX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFOV9QT1dFUlRYX0RVUDQwX0NDS19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTlfUE9XRVJUWF9EVVA0MF9DQ0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNmCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU5X1BPV0VSVFhfRFVQNDBfQ0NLX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDNmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFOV9QT1dFUlRYX0RVUDQwX0NDS19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAzZikKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTlfUE9XRVJUWF9EVVA0MF9PRkRNX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU5X1BPV0VSVFhfRFVQNDBfT0ZETV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFOV9QT1dFUlRYX0RVUDQwX09GRE1fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDNmMDAKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTlfUE9XRVJUWF9EVVA0MF9PRkRNX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDNmMDApID4+IDgpCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU5X1BPV0VSVFhfRFVQNDBfT0ZETV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAzZjAwKQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFOV9QT1dFUlRYX0VYVDIwX0NDS19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTlfUE9XRVJUWF9FWFQyMF9DQ0tfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU5X1BPV0VSVFhfRVhUMjBfQ0NLX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDNmMDAwMAotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFOV9QT1dFUlRYX0VYVDIwX0NDS19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwM2YwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTlfUE9XRVJUWF9FWFQyMF9DQ0tfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDAzZjAwMDApCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU5X1BPV0VSVFhfRVhUMjBfT0ZETV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFOV9QT1dFUlRYX0VYVDIwX09GRE1fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTlfUE9XRVJUWF9FWFQyMF9PRkRNX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNmMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEU5X1BPV0VSVFhfRVhUMjBfT0ZETV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4M2YwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFOV9QT1dFUlRYX0VYVDIwX09GRE1fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjQpICYgMHgzZjAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9wb3dlcnR4X3JhdGUxMCAqLwotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMTBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEzY2MKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTEwX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhM2NjCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUxMF9QT1dFUlRYSFQyMF84X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMTBfUE9XRVJUWEhUMjBfOF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTEwX1BPV0VSVFhIVDIwXzhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNmCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUxMF9QT1dFUlRYSFQyMF84X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDNmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMTBfUE9XRVJUWEhUMjBfOF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAzZikKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTEwX1BPV0VSVFhIVDIwXzlfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUxMF9QT1dFUlRYSFQyMF85X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMTBfUE9XRVJUWEhUMjBfOV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDNmMDAKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTEwX1BPV0VSVFhIVDIwXzlfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDNmMDApID4+IDgpCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUxMF9QT1dFUlRYSFQyMF85X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAzZjAwKQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMTBfUE9XRVJUWEhUMjBfMTBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTEwX1BPV0VSVFhIVDIwXzEwX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUxMF9QT1dFUlRYSFQyMF8xMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDNmMDAwMAotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMTBfUE9XRVJUWEhUMjBfMTBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwM2YwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTEwX1BPV0VSVFhIVDIwXzEwX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDAzZjAwMDApCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUxMF9QT1dFUlRYSFQyMF8xMV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMTBfUE9XRVJUWEhUMjBfMTFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTEwX1BPV0VSVFhIVDIwXzExX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNmMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUxMF9QT1dFUlRYSFQyMF8xMV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4M2YwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMTBfUE9XRVJUWEhUMjBfMTFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjQpICYgMHgzZjAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9wb3dlcnR4X3JhdGUxMSAqLwotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMTFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEzZDAKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTExX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhM2QwCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUxMV9QT1dFUlRYSFQyMF8xMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMTFfUE9XRVJUWEhUMjBfMTJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTExX1BPV0VSVFhIVDIwXzEyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNmCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUxMV9QT1dFUlRYSFQyMF8xMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDNmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMTFfUE9XRVJUWEhUMjBfMTJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAzZikKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTExX1BPV0VSVFhIVDIwXzEzX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUxMV9QT1dFUlRYSFQyMF8xM19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMTFfUE9XRVJUWEhUMjBfMTNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDNmMDAKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTExX1BPV0VSVFhIVDIwXzEzX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDNmMDApID4+IDgpCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUxMV9QT1dFUlRYSFQyMF8xM19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAzZjAwKQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMTFfUE9XRVJUWEhUNDBfMTJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTExX1BPV0VSVFhIVDQwXzEyX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUxMV9QT1dFUlRYSFQ0MF8xMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDNmMDAwMAotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMTFfUE9XRVJUWEhUNDBfMTJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwM2YwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTExX1BPV0VSVFhIVDQwXzEyX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDAzZjAwMDApCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUxMV9QT1dFUlRYSFQ0MF8xM19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMTFfUE9XRVJUWEhUNDBfMTNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTExX1BPV0VSVFhIVDQwXzEzX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNmMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUxMV9QT1dFUlRYSFQ0MF8xM19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4M2YwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMTFfUE9XRVJUWEhUNDBfMTNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjQpICYgMHgzZjAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9wb3dlcnR4X3JhdGUxMiAqLwotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMTJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEzZDQKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTEyX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhM2Q0Ci0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUxMl9QT1dFUlRYSFQ0MF84X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMTJfUE9XRVJUWEhUNDBfOF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTEyX1BPV0VSVFhIVDQwXzhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNmCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUxMl9QT1dFUlRYSFQ0MF84X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDNmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMTJfUE9XRVJUWEhUNDBfOF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAzZikKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTEyX1BPV0VSVFhIVDQwXzlfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUxMl9QT1dFUlRYSFQ0MF85X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMTJfUE9XRVJUWEhUNDBfOV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDNmMDAKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTEyX1BPV0VSVFhIVDQwXzlfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDNmMDApID4+IDgpCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUxMl9QT1dFUlRYSFQ0MF85X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAzZjAwKQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMTJfUE9XRVJUWEhUNDBfMTBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTEyX1BPV0VSVFhIVDQwXzEwX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUxMl9QT1dFUlRYSFQ0MF8xMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDNmMDAwMAotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMTJfUE9XRVJUWEhUNDBfMTBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwM2YwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTEyX1BPV0VSVFhIVDQwXzEwX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDAzZjAwMDApCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUxMl9QT1dFUlRYSFQ0MF8xMV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMTJfUE9XRVJUWEhUNDBfMTFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0JCX1BPV0VSVFhfUkFURTEyX1BPV0VSVFhIVDQwXzExX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNmMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9QT1dFUlRYX1JBVEUxMl9QT1dFUlRYSFQ0MF8xMV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4M2YwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQkJfUE9XRVJUWF9SQVRFMTJfUE9XRVJUWEhUNDBfMTFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjQpICYgMHgzZjAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9mb3JjZV9hbmFsb2cgKi8KLSNkZWZpbmUgUEhZX0JCX0ZPUkNFX0FOQUxPR19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhM2Q4Ci0jZGVmaW5lIFBIWV9CQl9GT1JDRV9BTkFMT0dfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTNkOAotI2RlZmluZSBQSFlfQkJfRk9SQ0VfQU5BTE9HX0ZPUkNFX1hQQU9OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0ZPUkNFX0FOQUxPR19GT1JDRV9YUEFPTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9GT1JDRV9BTkFMT0dfRk9SQ0VfWFBBT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBQSFlfQkJfRk9SQ0VfQU5BTE9HX0ZPUkNFX1hQQU9OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMSkgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0ZPUkNFX0FOQUxPR19GT1JDRV9YUEFPTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFBIWV9CQl9GT1JDRV9BTkFMT0dfRk9SQ0VEX1hQQU9OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQkJfRk9SQ0VfQU5BTE9HX0ZPUkNFRF9YUEFPTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0JCX0ZPUkNFX0FOQUxPR19GT1JDRURfWFBBT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBlCi0jZGVmaW5lIFBIWV9CQl9GT1JDRV9BTkFMT0dfRk9SQ0VEX1hQQU9OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDBlKSA+PiAxKQotI2RlZmluZSBQSFlfQkJfRk9SQ0VfQU5BTE9HX0ZPUkNFRF9YUEFPTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEpICYgMHgwMDAwMDAwZSkKLSNkZWZpbmUgUEhZX0JCX0ZPUkNFX0FOQUxPR19GT1JDRV9QREFEQ19QV0RfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9CQl9GT1JDRV9BTkFMT0dfRk9SQ0VfUERBRENfUFdEX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQkJfRk9SQ0VfQU5BTE9HX0ZPUkNFX1BEQURDX1BXRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgUEhZX0JCX0ZPUkNFX0FOQUxPR19GT1JDRV9QREFEQ19QV0RfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMTApID4+IDQpCi0jZGVmaW5lIFBIWV9CQl9GT1JDRV9BTkFMT0dfRk9SQ0VfUERBRENfUFdEX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNCkgJiAweDAwMDAwMDEwKQotI2RlZmluZSBQSFlfQkJfRk9SQ0VfQU5BTE9HX0ZPUkNFRF9QREFEQ19QV0RfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0JCX0ZPUkNFX0FOQUxPR19GT1JDRURfUERBRENfUFdEX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9CQl9GT1JDRV9BTkFMT0dfRk9SQ0VEX1BEQURDX1BXRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBlMAotI2RlZmluZSBQSFlfQkJfRk9SQ0VfQU5BTE9HX0ZPUkNFRF9QREFEQ19QV0RfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDBlMCkgPj4gNSkKLSNkZWZpbmUgUEhZX0JCX0ZPUkNFX0FOQUxPR19GT1JDRURfUERBRENfUFdEX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA1KSAmIDB4MDAwMDAwZTApCi0KLS8qIG1hY3JvcyBmb3IgQkJfdHBjXzEyICovCi0jZGVmaW5lIFBIWV9CQl9UUENfMTJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTNkYwotI2RlZmluZSBQSFlfQkJfVFBDXzEyX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEzZGMKLSNkZWZpbmUgUEhZX0JCX1RQQ18xMl9ERVNJUkVEX1NDQUxFX0hUNDBfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9CQl9UUENfMTJfREVTSVJFRF9TQ0FMRV9IVDQwXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfVFBDXzEyX0RFU0lSRURfU0NBTEVfSFQ0MF8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMWYKLSNkZWZpbmUgUEhZX0JCX1RQQ18xMl9ERVNJUkVEX1NDQUxFX0hUNDBfMF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMWYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9UUENfMTJfREVTSVJFRF9TQ0FMRV9IVDQwXzBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDFmKQotI2RlZmluZSBQSFlfQkJfVFBDXzEyX0RFU0lSRURfU0NBTEVfSFQ0MF8xX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0JCX1RQQ18xMl9ERVNJUkVEX1NDQUxFX0hUNDBfMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9CQl9UUENfMTJfREVTSVJFRF9TQ0FMRV9IVDQwXzFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNlMAotI2RlZmluZSBQSFlfQkJfVFBDXzEyX0RFU0lSRURfU0NBTEVfSFQ0MF8xX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDNlMCkgPj4gNSkKLSNkZWZpbmUgUEhZX0JCX1RQQ18xMl9ERVNJUkVEX1NDQUxFX0hUNDBfMV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA1KSAmIDB4MDAwMDAzZTApCi0jZGVmaW5lIFBIWV9CQl9UUENfMTJfREVTSVJFRF9TQ0FMRV9IVDQwXzJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQkJfVFBDXzEyX0RFU0lSRURfU0NBTEVfSFQ0MF8yX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0JCX1RQQ18xMl9ERVNJUkVEX1NDQUxFX0hUNDBfMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA3YzAwCi0jZGVmaW5lIFBIWV9CQl9UUENfMTJfREVTSVJFRF9TQ0FMRV9IVDQwXzJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDdjMDApID4+IDEwKQotI2RlZmluZSBQSFlfQkJfVFBDXzEyX0RFU0lSRURfU0NBTEVfSFQ0MF8yX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTApICYgMHgwMDAwN2MwMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18xMl9ERVNJUkVEX1NDQUxFX0hUNDBfM19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9CQl9UUENfMTJfREVTSVJFRF9TQ0FMRV9IVDQwXzNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQkJfVFBDXzEyX0RFU0lSRURfU0NBTEVfSFQ0MF8zX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwZjgwMDAKLSNkZWZpbmUgUEhZX0JCX1RQQ18xMl9ERVNJUkVEX1NDQUxFX0hUNDBfM19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDBmODAwMCkgPj4gMTUpCi0jZGVmaW5lIFBIWV9CQl9UUENfMTJfREVTSVJFRF9TQ0FMRV9IVDQwXzNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNSkgJiAweDAwMGY4MDAwKQotI2RlZmluZSBQSFlfQkJfVFBDXzEyX0RFU0lSRURfU0NBTEVfSFQ0MF80X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0JCX1RQQ18xMl9ERVNJUkVEX1NDQUxFX0hUNDBfNF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9CQl9UUENfMTJfREVTSVJFRF9TQ0FMRV9IVDQwXzRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMWYwMDAwMAotI2RlZmluZSBQSFlfQkJfVFBDXzEyX0RFU0lSRURfU0NBTEVfSFQ0MF80X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAxZjAwMDAwKSA+PiAyMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18xMl9ERVNJUkVEX1NDQUxFX0hUNDBfNF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIwKSAmIDB4MDFmMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9UUENfMTJfREVTSVJFRF9TQ0FMRV9IVDQwXzVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQkJfVFBDXzEyX0RFU0lSRURfU0NBTEVfSFQ0MF81X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0JCX1RQQ18xMl9ERVNJUkVEX1NDQUxFX0hUNDBfNV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNlMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9UUENfMTJfREVTSVJFRF9TQ0FMRV9IVDQwXzVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4M2UwMDAwMDApID4+IDI1KQotI2RlZmluZSBQSFlfQkJfVFBDXzEyX0RFU0lSRURfU0NBTEVfSFQ0MF81X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjUpICYgMHgzZTAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl90cGNfMTMgKi8KLSNkZWZpbmUgUEhZX0JCX1RQQ18xM19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhM2UwCi0jZGVmaW5lIFBIWV9CQl9UUENfMTNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTNlMAotI2RlZmluZSBQSFlfQkJfVFBDXzEzX0RFU0lSRURfU0NBTEVfSFQ0MF82X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0JCX1RQQ18xM19ERVNJUkVEX1NDQUxFX0hUNDBfNl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9UUENfMTNfREVTSVJFRF9TQ0FMRV9IVDQwXzZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxZgotI2RlZmluZSBQSFlfQkJfVFBDXzEzX0RFU0lSRURfU0NBTEVfSFQ0MF82X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAxZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18xM19ERVNJUkVEX1NDQUxFX0hUNDBfNl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMWYpCi0jZGVmaW5lIFBIWV9CQl9UUENfMTNfREVTSVJFRF9TQ0FMRV9IVDQwXzdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQkJfVFBDXzEzX0RFU0lSRURfU0NBTEVfSFQ0MF83X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0JCX1RQQ18xM19ERVNJUkVEX1NDQUxFX0hUNDBfN19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM2UwCi0jZGVmaW5lIFBIWV9CQl9UUENfMTNfREVTSVJFRF9TQ0FMRV9IVDQwXzdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwM2UwKSA+PiA1KQotI2RlZmluZSBQSFlfQkJfVFBDXzEzX0RFU0lSRURfU0NBTEVfSFQ0MF83X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDUpICYgMHgwMDAwMDNlMCkKLQotLyogbWFjcm9zIGZvciBCQl90cGNfMTQgKi8KLSNkZWZpbmUgUEhZX0JCX1RQQ18xNF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhM2U0Ci0jZGVmaW5lIFBIWV9CQl9UUENfMTRfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTNlNAotI2RlZmluZSBQSFlfQkJfVFBDXzE0X0RFU0lSRURfU0NBTEVfSFQyMF84X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0JCX1RQQ18xNF9ERVNJUkVEX1NDQUxFX0hUMjBfOF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9UUENfMTRfREVTSVJFRF9TQ0FMRV9IVDIwXzhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxZgotI2RlZmluZSBQSFlfQkJfVFBDXzE0X0RFU0lSRURfU0NBTEVfSFQyMF84X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAxZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18xNF9ERVNJUkVEX1NDQUxFX0hUMjBfOF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMWYpCi0jZGVmaW5lIFBIWV9CQl9UUENfMTRfREVTSVJFRF9TQ0FMRV9IVDIwXzlfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQkJfVFBDXzE0X0RFU0lSRURfU0NBTEVfSFQyMF85X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0JCX1RQQ18xNF9ERVNJUkVEX1NDQUxFX0hUMjBfOV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM2UwCi0jZGVmaW5lIFBIWV9CQl9UUENfMTRfREVTSVJFRF9TQ0FMRV9IVDIwXzlfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwM2UwKSA+PiA1KQotI2RlZmluZSBQSFlfQkJfVFBDXzE0X0RFU0lSRURfU0NBTEVfSFQyMF85X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDUpICYgMHgwMDAwMDNlMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18xNF9ERVNJUkVEX1NDQUxFX0hUMjBfMTBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9CQl9UUENfMTRfREVTSVJFRF9TQ0FMRV9IVDIwXzEwX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQkJfVFBDXzE0X0RFU0lSRURfU0NBTEVfSFQyMF8xMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDdjMDAKLSNkZWZpbmUgUEhZX0JCX1RQQ18xNF9ERVNJUkVEX1NDQUxFX0hUMjBfMTBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwN2MwMCkgPj4gMTApCi0jZGVmaW5lIFBIWV9CQl9UUENfMTRfREVTSVJFRF9TQ0FMRV9IVDIwXzEwX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMCkgJiAweDAwMDA3YzAwKQotI2RlZmluZSBQSFlfQkJfVFBDXzE0X0RFU0lSRURfU0NBTEVfSFQyMF8xMV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUEhZX0JCX1RQQ18xNF9ERVNJUkVEX1NDQUxFX0hUMjBfMTFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9CQl9UUENfMTRfREVTSVJFRF9TQ0FMRV9IVDIwXzExX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBmODAwMAotI2RlZmluZSBQSFlfQkJfVFBDXzE0X0RFU0lSRURfU0NBTEVfSFQyMF8xMV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMGY4MDAwKSA+PiAxNSkKLSNkZWZpbmUgUEhZX0JCX1RQQ18xNF9ERVNJUkVEX1NDQUxFX0hUMjBfMTFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE1KSAmIDB4MDAwZjgwMDApCi0jZGVmaW5lIFBIWV9CQl9UUENfMTRfREVTSVJFRF9TQ0FMRV9IVDIwXzEyX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQkJfVFBDXzE0X0RFU0lSRURfU0NBTEVfSFQyMF8xMl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0JCX1RQQ18xNF9ERVNJUkVEX1NDQUxFX0hUMjBfMTJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxZjAwMDAwCi0jZGVmaW5lIFBIWV9CQl9UUENfMTRfREVTSVJFRF9TQ0FMRV9IVDIwXzEyX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDFmMDAwMDApID4+IDIwKQotI2RlZmluZSBQSFlfQkJfVFBDXzE0X0RFU0lSRURfU0NBTEVfSFQyMF8xMl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjApICYgMHgwMWYwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18xNF9ERVNJUkVEX1NDQUxFX0hUMjBfMTNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9CQl9UUENfMTRfREVTSVJFRF9TQ0FMRV9IVDIwXzEzX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQkJfVFBDXzE0X0RFU0lSRURfU0NBTEVfSFQyMF8xM19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M2UwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1RQQ18xNF9ERVNJUkVEX1NDQUxFX0hUMjBfMTNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzZTAwMDAwMCkgPj4gMjUpCi0jZGVmaW5lIFBIWV9CQl9UUENfMTRfREVTSVJFRF9TQ0FMRV9IVDIwXzEzX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNSkgJiAweDNlMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3RwY18xNSAqLwotI2RlZmluZSBQSFlfQkJfVFBDXzE1X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEzZTgKLSNkZWZpbmUgUEhZX0JCX1RQQ18xNV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhM2U4Ci0jZGVmaW5lIFBIWV9CQl9UUENfMTVfREVTSVJFRF9TQ0FMRV9IVDQwXzhfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQkJfVFBDXzE1X0RFU0lSRURfU0NBTEVfSFQ0MF84X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RQQ18xNV9ERVNJUkVEX1NDQUxFX0hUNDBfOF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFmCi0jZGVmaW5lIFBIWV9CQl9UUENfMTVfREVTSVJFRF9TQ0FMRV9IVDQwXzhfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDFmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFBDXzE1X0RFU0lSRURfU0NBTEVfSFQ0MF84X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAxZikKLSNkZWZpbmUgUEhZX0JCX1RQQ18xNV9ERVNJUkVEX1NDQUxFX0hUNDBfOV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9CQl9UUENfMTVfREVTSVJFRF9TQ0FMRV9IVDQwXzlfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQkJfVFBDXzE1X0RFU0lSRURfU0NBTEVfSFQ0MF85X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzZTAKLSNkZWZpbmUgUEhZX0JCX1RQQ18xNV9ERVNJUkVEX1NDQUxFX0hUNDBfOV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAzZTApID4+IDUpCi0jZGVmaW5lIFBIWV9CQl9UUENfMTVfREVTSVJFRF9TQ0FMRV9IVDQwXzlfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNSkgJiAweDAwMDAwM2UwKQotI2RlZmluZSBQSFlfQkJfVFBDXzE1X0RFU0lSRURfU0NBTEVfSFQ0MF8xMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0JCX1RQQ18xNV9ERVNJUkVEX1NDQUxFX0hUNDBfMTBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9CQl9UUENfMTVfREVTSVJFRF9TQ0FMRV9IVDQwXzEwX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwN2MwMAotI2RlZmluZSBQSFlfQkJfVFBDXzE1X0RFU0lSRURfU0NBTEVfSFQ0MF8xMF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDA3YzAwKSA+PiAxMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18xNV9ERVNJUkVEX1NDQUxFX0hUNDBfMTBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEwKSAmIDB4MDAwMDdjMDApCi0jZGVmaW5lIFBIWV9CQl9UUENfMTVfREVTSVJFRF9TQ0FMRV9IVDQwXzExX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBQSFlfQkJfVFBDXzE1X0RFU0lSRURfU0NBTEVfSFQ0MF8xMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0JCX1RQQ18xNV9ERVNJUkVEX1NDQUxFX0hUNDBfMTFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMGY4MDAwCi0jZGVmaW5lIFBIWV9CQl9UUENfMTVfREVTSVJFRF9TQ0FMRV9IVDQwXzExX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwZjgwMDApID4+IDE1KQotI2RlZmluZSBQSFlfQkJfVFBDXzE1X0RFU0lSRURfU0NBTEVfSFQ0MF8xMV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTUpICYgMHgwMDBmODAwMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18xNV9ERVNJUkVEX1NDQUxFX0hUNDBfMTJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9CQl9UUENfMTVfREVTSVJFRF9TQ0FMRV9IVDQwXzEyX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQkJfVFBDXzE1X0RFU0lSRURfU0NBTEVfSFQ0MF8xMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDFmMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1RQQ18xNV9ERVNJUkVEX1NDQUxFX0hUNDBfMTJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMWYwMDAwMCkgPj4gMjApCi0jZGVmaW5lIFBIWV9CQl9UUENfMTVfREVTSVJFRF9TQ0FMRV9IVDQwXzEyX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMCkgJiAweDAxZjAwMDAwKQotI2RlZmluZSBQSFlfQkJfVFBDXzE1X0RFU0lSRURfU0NBTEVfSFQ0MF8xM19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0JCX1RQQ18xNV9ERVNJUkVEX1NDQUxFX0hUNDBfMTNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9CQl9UUENfMTVfREVTSVJFRF9TQ0FMRV9IVDQwXzEzX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzZTAwMDAwMAotI2RlZmluZSBQSFlfQkJfVFBDXzE1X0RFU0lSRURfU0NBTEVfSFQ0MF8xM19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDNlMDAwMDAwKSA+PiAyNSkKLSNkZWZpbmUgUEhZX0JCX1RQQ18xNV9ERVNJUkVEX1NDQUxFX0hUNDBfMTNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI1KSAmIDB4M2UwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfdHBjXzE2ICovCi0jZGVmaW5lIFBIWV9CQl9UUENfMTZfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTNlYwotI2RlZmluZSBQSFlfQkJfVFBDXzE2X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEzZWMKLSNkZWZpbmUgUEhZX0JCX1RQQ18xNl9QREFEQ19QQVJfQ09SUl9DQ0tfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9CQl9UUENfMTZfUERBRENfUEFSX0NPUlJfQ0NLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQkJfVFBDXzE2X1BEQURDX1BBUl9DT1JSX0NDS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDNmMDAKLSNkZWZpbmUgUEhZX0JCX1RQQ18xNl9QREFEQ19QQVJfQ09SUl9DQ0tfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDNmMDApID4+IDgpCi0jZGVmaW5lIFBIWV9CQl9UUENfMTZfUERBRENfUEFSX0NPUlJfQ0NLX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAzZjAwKQotI2RlZmluZSBQSFlfQkJfVFBDXzE2X1BEQURDX1BBUl9DT1JSX09GRE1fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgUEhZX0JCX1RQQ18xNl9QREFEQ19QQVJfQ09SUl9PRkRNX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9UUENfMTZfUERBRENfUEFSX0NPUlJfT0ZETV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDNmMDAwMAotI2RlZmluZSBQSFlfQkJfVFBDXzE2X1BEQURDX1BBUl9DT1JSX09GRE1fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwM2YwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0JCX1RQQ18xNl9QREFEQ19QQVJfQ09SUl9PRkRNX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDAzZjAwMDApCi0jZGVmaW5lIFBIWV9CQl9UUENfMTZfUERBRENfUEFSX0NPUlJfSFQ0MF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQkJfVFBDXzE2X1BEQURDX1BBUl9DT1JSX0hUNDBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0JCX1RQQ18xNl9QREFEQ19QQVJfQ09SUl9IVDQwX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNmMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9UUENfMTZfUERBRENfUEFSX0NPUlJfSFQ0MF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4M2YwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQkJfVFBDXzE2X1BEQURDX1BBUl9DT1JSX0hUNDBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjQpICYgMHgzZjAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl90cGNfMTcgKi8KLSNkZWZpbmUgUEhZX0JCX1RQQ18xN19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhM2YwCi0jZGVmaW5lIFBIWV9CQl9UUENfMTdfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTNmMAotI2RlZmluZSBQSFlfQkJfVFBDXzE3X0VOQUJMRV9QQUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RQQ18xN19FTkFCTEVfUEFMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9UUENfMTdfRU5BQkxFX1BBTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBQSFlfQkJfVFBDXzE3X0VOQUJMRV9QQUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMSkgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18xN19FTkFCTEVfUEFMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFBIWV9CQl9UUENfMTdfRU5BQkxFX1BBTF9DQ0tfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQkJfVFBDXzE3X0VOQUJMRV9QQUxfQ0NLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0JCX1RQQ18xN19FTkFCTEVfUEFMX0NDS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFBIWV9CQl9UUENfMTdfRU5BQkxFX1BBTF9DQ0tfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAyKSA+PiAxKQotI2RlZmluZSBQSFlfQkJfVFBDXzE3X0VOQUJMRV9QQUxfQ0NLX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEpICYgMHgwMDAwMDAwMikKLSNkZWZpbmUgUEhZX0JCX1RQQ18xN19FTkFCTEVfUEFMX09GRE1fMjBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9CQl9UUENfMTdfRU5BQkxFX1BBTF9PRkRNXzIwX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQkJfVFBDXzE3X0VOQUJMRV9QQUxfT0ZETV8yMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgUEhZX0JCX1RQQ18xN19FTkFCTEVfUEFMX09GRE1fMjBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDQpID4+IDIpCi0jZGVmaW5lIFBIWV9CQl9UUENfMTdfRU5BQkxFX1BBTF9PRkRNXzIwX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMikgJiAweDAwMDAwMDA0KQotI2RlZmluZSBQSFlfQkJfVFBDXzE3X0VOQUJMRV9QQUxfT0ZETV80MF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUEhZX0JCX1RQQ18xN19FTkFCTEVfUEFMX09GRE1fNDBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9CQl9UUENfMTdfRU5BQkxFX1BBTF9PRkRNXzQwX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBQSFlfQkJfVFBDXzE3X0VOQUJMRV9QQUxfT0ZETV80MF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwOCkgPj4gMykKLSNkZWZpbmUgUEhZX0JCX1RQQ18xN19FTkFCTEVfUEFMX09GRE1fNDBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzKSAmIDB4MDAwMDAwMDgpCi0jZGVmaW5lIFBIWV9CQl9UUENfMTdfUEFMX1BPV0VSX1RIUkVTSE9MRF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQkJfVFBDXzE3X1BBTF9QT1dFUl9USFJFU0hPTERfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0JCX1RQQ18xN19QQUxfUE9XRVJfVEhSRVNIT0xEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM2YwCi0jZGVmaW5lIFBIWV9CQl9UUENfMTdfUEFMX1BPV0VSX1RIUkVTSE9MRF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwM2YwKSA+PiA0KQotI2RlZmluZSBQSFlfQkJfVFBDXzE3X1BBTF9QT1dFUl9USFJFU0hPTERfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDQpICYgMHgwMDAwMDNmMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18xN19GT1JDRV9QQUxfTE9DS0VEX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9CQl9UUENfMTdfRk9SQ0VfUEFMX0xPQ0tFRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQkJfVFBDXzE3X0ZPUkNFX1BBTF9MT0NLRURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgUEhZX0JCX1RQQ18xN19GT1JDRV9QQUxfTE9DS0VEX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDQwMCkgPj4gMTApCi0jZGVmaW5lIFBIWV9CQl9UUENfMTdfRk9SQ0VfUEFMX0xPQ0tFRF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMCkgJiAweDAwMDAwNDAwKQotI2RlZmluZSBQSFlfQkJfVFBDXzE3X0lOSVRfVFhfR0FJTl9TRVRUSU5HX1BBTF9PTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0JCX1RQQ18xN19JTklUX1RYX0dBSU5fU0VUVElOR19QQUxfT05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9CQl9UUENfMTdfSU5JVF9UWF9HQUlOX1NFVFRJTkdfUEFMX09OX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxZjgwMAotI2RlZmluZSBQSFlfQkJfVFBDXzE3X0lOSVRfVFhfR0FJTl9TRVRUSU5HX1BBTF9PTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDFmODAwKSA+PiAxMSkKLSNkZWZpbmUgUEhZX0JCX1RQQ18xN19JTklUX1RYX0dBSU5fU0VUVElOR19QQUxfT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDExKSAmIDB4MDAwMWY4MDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfdHBjXzE4ICovCi0jZGVmaW5lIFBIWV9CQl9UUENfMThfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTNmNAotI2RlZmluZSBQSFlfQkJfVFBDXzE4X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEzZjQKLSNkZWZpbmUgUEhZX0JCX1RQQ18xOF9USEVSTV9DQUxfVkFMVUVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9CQl9UUENfMThfVEhFUk1fQ0FMX1ZBTFVFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfVFBDXzE4X1RIRVJNX0NBTF9WQUxVRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgUEhZX0JCX1RQQ18xOF9USEVSTV9DQUxfVkFMVUVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9UUENfMThfVEhFUk1fQ0FMX1ZBTFVFX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMGZmKQotI2RlZmluZSBQSFlfQkJfVFBDXzE4X1ZPTFRfQ0FMX1ZBTFVFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0JCX1RQQ18xOF9WT0xUX0NBTF9WQUxVRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9UUENfMThfVk9MVF9DQUxfVkFMVUVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBQSFlfQkJfVFBDXzE4X1ZPTFRfQ0FMX1ZBTFVFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwZmYwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18xOF9WT0xUX0NBTF9WQUxVRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMGZmMDApCi0jZGVmaW5lIFBIWV9CQl9UUENfMThfVVNFX0xFR0FDWV9UUENfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQkJfVFBDXzE4X1VTRV9MRUdBQ1lfVFBDX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0JCX1RQQ18xOF9VU0VfTEVHQUNZX1RQQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIFBIWV9CQl9UUENfMThfVVNFX0xFR0FDWV9UUENfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMTAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQkJfVFBDXzE4X1VTRV9MRUdBQ1lfVFBDX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMDAxMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl90cGNfMTkgKi8KLSNkZWZpbmUgUEhZX0JCX1RQQ18xOV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhM2Y4Ci0jZGVmaW5lIFBIWV9CQl9UUENfMTlfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTNmOAotI2RlZmluZSBQSFlfQkJfVFBDXzE5X0FMUEhBX1RIRVJNX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0JCX1RQQ18xOV9BTFBIQV9USEVSTV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9UUENfMTlfQUxQSEFfVEhFUk1fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBQSFlfQkJfVFBDXzE5X0FMUEhBX1RIRVJNX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDBmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18xOV9BTFBIQV9USEVSTV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwZmYpCi0jZGVmaW5lIFBIWV9CQl9UUENfMTlfQUxQSEFfVEhFUk1fUEFMX09OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQkJfVFBDXzE5X0FMUEhBX1RIRVJNX1BBTF9PTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0JCX1RQQ18xOV9BTFBIQV9USEVSTV9QQUxfT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBmZjAwCi0jZGVmaW5lIFBIWV9CQl9UUENfMTlfQUxQSEFfVEhFUk1fUEFMX09OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDBmZjAwKSA+PiA4KQotI2RlZmluZSBQSFlfQkJfVFBDXzE5X0FMUEhBX1RIRVJNX1BBTF9PTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwZmYwMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18xOV9BTFBIQV9WT0xUX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9CQl9UUENfMTlfQUxQSEFfVk9MVF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQkJfVFBDXzE5X0FMUEhBX1ZPTFRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxZjAwMDAKLSNkZWZpbmUgUEhZX0JCX1RQQ18xOV9BTFBIQV9WT0xUX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDFmMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9CQl9UUENfMTlfQUxQSEFfVk9MVF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAwMWYwMDAwKQotI2RlZmluZSBQSFlfQkJfVFBDXzE5X0FMUEhBX1ZPTFRfUEFMX09OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgUEhZX0JCX1RQQ18xOV9BTFBIQV9WT0xUX1BBTF9PTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9CQl9UUENfMTlfQUxQSEFfVk9MVF9QQUxfT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwM2UwMDAwMAotI2RlZmluZSBQSFlfQkJfVFBDXzE5X0FMUEhBX1ZPTFRfUEFMX09OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAzZTAwMDAwKSA+PiAyMSkKLSNkZWZpbmUgUEhZX0JCX1RQQ18xOV9BTFBIQV9WT0xUX1BBTF9PTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIxKSAmIDB4MDNlMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfdHBjXzIwICovCi0jZGVmaW5lIFBIWV9CQl9UUENfMjBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTNmYwotI2RlZmluZSBQSFlfQkJfVFBDXzIwX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGEzZmMKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU18wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU18wX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDEpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfMF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDAxKQotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU18xX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMikgPj4gMSkKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU18xX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxKSAmIDB4MDAwMDAwMDIpCi0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU18yX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDA0KSA+PiAyKQotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIpICYgMHgwMDAwMDAwNCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU18zX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfM19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU18zX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDgpID4+IDMpCi0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfM19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMykgJiAweDAwMDAwMDA4KQotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU180X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfNF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAxMCkgPj4gNCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU180X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA0KSAmIDB4MDAwMDAwMTApCi0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfNV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU181X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfNV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDIwKSA+PiA1KQotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDUpICYgMHgwMDAwMDAyMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU182X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfNl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU182X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwNDApID4+IDYpCi0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfNl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNikgJiAweDAwMDAwMDQwKQotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU183X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfN19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDA4MCkgPj4gNykKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU183X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA3KSAmIDB4MDAwMDAwODApCi0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfOF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzhfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU184X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCi0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfOF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMTAwKSA+PiA4KQotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzhfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAwMDEwMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU185X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfOV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzlfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU185X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAyMDApID4+IDkpCi0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfOV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgOSkgJiAweDAwMDAwMjAwKQotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzEwX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU18xMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfMTBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzEwX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwNDAwKSA+PiAxMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU18xMF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEwKSAmIDB4MDAwMDA0MDApCi0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfMTFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzExX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU18xMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCi0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfMTFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDA4MDApID4+IDExKQotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzExX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTEpICYgMHgwMDAwMDgwMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU18xMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfMTJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzEyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU18xMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMTAwMCkgPj4gMTIpCi0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfMTJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMikgJiAweDAwMDAxMDAwKQotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzEzX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU18xM19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfMTNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzEzX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAyMDAwKSA+PiAxMykKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU18xM19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEzKSAmIDB4MDAwMDIwMDApCi0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfMTRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzE0X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU18xNF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCi0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfMTRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDQwMDApID4+IDE0KQotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzE0X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwMDAwNDAwMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU18xNV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfMTVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzE1X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU18xNV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwODAwMCkgPj4gMTUpCi0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfMTVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNSkgJiAweDAwMDA4MDAwKQotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzE2X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU18xNl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfMTZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzE2X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDEwMDAwKSA+PiAxNikKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU18xNl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE2KSAmIDB4MDAwMTAwMDApCi0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfMTdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzE3X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU18xN19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCi0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfMTdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMjAwMDApID4+IDE3KQotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzE3X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTcpICYgMHgwMDAyMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU18xOF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfMThfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzE4X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU18xOF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDA0MDAwMCkgPj4gMTgpCi0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfMThfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxOCkgJiAweDAwMDQwMDAwKQotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzE5X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU18xOV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfMTlfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzE5X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDgwMDAwKSA+PiAxOSkKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU18xOV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE5KSAmIDB4MDAwODAwMDApCi0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfMjBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzIwX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU18yMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCi0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfMjBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAxMDAwMDApID4+IDIwKQotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzIwX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjApICYgMHgwMDEwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU18yMV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfMjFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzIxX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU18yMV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDIwMDAwMCkgPj4gMjEpCi0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfMjFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMSkgJiAweDAwMjAwMDAwKQotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzIyX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU18yMl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfMjJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzIyX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwNDAwMDAwKSA+PiAyMikKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU18yMl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIyKSAmIDB4MDA0MDAwMDApCi0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfMjNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzIzX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0JCX1RQQ18yMF9FTkFCTEVfUEFMX01DU18yM19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCi0jZGVmaW5lIFBIWV9CQl9UUENfMjBfRU5BQkxFX1BBTF9NQ1NfMjNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDA4MDAwMDApID4+IDIzKQotI2RlZmluZSBQSFlfQkJfVFBDXzIwX0VOQUJMRV9QQUxfTUNTXzIzX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjMpICYgMHgwMDgwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl8xICovCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8xX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTQwMAotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0MDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzFfVEdfVEFCTEUxX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8xX1RHX1RBQkxFMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMV9UR19UQUJMRTFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzFfVEdfVEFCTEUxX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZmZmZmZmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8xX1RHX1RBQkxFMV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweGZmZmZmZmZmKQotCi0vKiBtYWNyb3MgZm9yIEJCX3R4X2dhaW5fdGFiXzIgKi8KLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDA0Ci0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8yX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTQwNAotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMl9UR19UQUJMRTJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzJfVEdfVEFCTEUyX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8yX1RHX1RBQkxFMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMl9UR19UQUJMRTJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhmZmZmZmZmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzJfVEdfVEFCTEUyX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4ZmZmZmZmZmYpCi0KLS8qIG1hY3JvcyBmb3IgQkJfdHhfZ2Fpbl90YWJfMyAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfM19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0MDgKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDA4Ci0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8zX1RHX1RBQkxFM19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfM19UR19UQUJMRTNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzNfVEdfVEFCTEUzX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8zX1RHX1RBQkxFM19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfM19UR19UQUJMRTNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl80ICovCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl80X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTQwYwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfNF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0MGMKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzRfVEdfVEFCTEU0X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl80X1RHX1RBQkxFNF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfNF9UR19UQUJMRTRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzRfVEdfVEFCTEU0X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZmZmZmZmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl80X1RHX1RBQkxFNF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweGZmZmZmZmZmKQotCi0vKiBtYWNyb3MgZm9yIEJCX3R4X2dhaW5fdGFiXzUgKi8KLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDEwCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl81X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTQxMAotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfNV9UR19UQUJMRTVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzVfVEdfVEFCTEU1X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl81X1RHX1RBQkxFNV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfNV9UR19UQUJMRTVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhmZmZmZmZmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzVfVEdfVEFCTEU1X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4ZmZmZmZmZmYpCi0KLS8qIG1hY3JvcyBmb3IgQkJfdHhfZ2Fpbl90YWJfNiAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfNl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0MTQKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzZfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDE0Ci0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl82X1RHX1RBQkxFNl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfNl9UR19UQUJMRTZfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzZfVEdfVEFCTEU2X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl82X1RHX1RBQkxFNl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfNl9UR19UQUJMRTZfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl83ICovCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl83X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTQxOAotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfN19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0MTgKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzdfVEdfVEFCTEU3X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl83X1RHX1RBQkxFN19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfN19UR19UQUJMRTdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzdfVEdfVEFCTEU3X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZmZmZmZmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl83X1RHX1RBQkxFN19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweGZmZmZmZmZmKQotCi0vKiBtYWNyb3MgZm9yIEJCX3R4X2dhaW5fdGFiXzggKi8KLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzhfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDFjCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl84X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTQxYwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfOF9UR19UQUJMRThfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzhfVEdfVEFCTEU4X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl84X1RHX1RBQkxFOF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfOF9UR19UQUJMRThfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhmZmZmZmZmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzhfVEdfVEFCTEU4X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4ZmZmZmZmZmYpCi0KLS8qIG1hY3JvcyBmb3IgQkJfdHhfZ2Fpbl90YWJfOSAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfOV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0MjAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzlfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDIwCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl85X1RHX1RBQkxFOV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfOV9UR19UQUJMRTlfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzlfVEdfVEFCTEU5X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl85X1RHX1RBQkxFOV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfOV9UR19UQUJMRTlfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl8xMCAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMTBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0MjQKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzEwX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDI0Ci0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8xMF9UR19UQUJMRTEwX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMTBfVEdfVEFCTEUxMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzEwX1RHX1RBQkxFMTBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8xMF9UR19UQUJMRTEwX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMTBfVEdfVEFCTEUxMF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl8xMSAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMTFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0MjgKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzExX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDI4Ci0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8xMV9UR19UQUJMRTExX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMTFfVEdfVEFCTEUxMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzExX1RHX1RBQkxFMTFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8xMV9UR19UQUJMRTExX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMTFfVEdfVEFCTEUxMV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl8xMiAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMTJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0MmMKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzEyX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDJjCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8xMl9UR19UQUJMRTEyX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMTJfVEdfVEFCTEUxMl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzEyX1RHX1RBQkxFMTJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8xMl9UR19UQUJMRTEyX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMTJfVEdfVEFCTEUxMl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl8xMyAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMTNfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0MzAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzEzX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDMwCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8xM19UR19UQUJMRTEzX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMTNfVEdfVEFCTEUxM19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzEzX1RHX1RBQkxFMTNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8xM19UR19UQUJMRTEzX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMTNfVEdfVEFCTEUxM19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl8xNCAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMTRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0MzQKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzE0X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDM0Ci0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8xNF9UR19UQUJMRTE0X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMTRfVEdfVEFCTEUxNF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzE0X1RHX1RBQkxFMTRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8xNF9UR19UQUJMRTE0X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMTRfVEdfVEFCTEUxNF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl8xNSAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMTVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0MzgKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzE1X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDM4Ci0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8xNV9UR19UQUJMRTE1X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMTVfVEdfVEFCTEUxNV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzE1X1RHX1RBQkxFMTVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8xNV9UR19UQUJMRTE1X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMTVfVEdfVEFCTEUxNV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl8xNiAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMTZfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0M2MKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzE2X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDNjCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8xNl9UR19UQUJMRTE2X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMTZfVEdfVEFCTEUxNl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzE2X1RHX1RBQkxFMTZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8xNl9UR19UQUJMRTE2X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMTZfVEdfVEFCTEUxNl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl8xNyAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMTdfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0NDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzE3X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDQwCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8xN19UR19UQUJMRTE3X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMTdfVEdfVEFCTEUxN19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzE3X1RHX1RBQkxFMTdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8xN19UR19UQUJMRTE3X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMTdfVEdfVEFCTEUxN19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl8xOCAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMThfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0NDQKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzE4X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDQ0Ci0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8xOF9UR19UQUJMRTE4X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMThfVEdfVEFCTEUxOF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzE4X1RHX1RBQkxFMThfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8xOF9UR19UQUJMRTE4X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMThfVEdfVEFCTEUxOF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl8xOSAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMTlfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0NDgKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzE5X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDQ4Ci0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8xOV9UR19UQUJMRTE5X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMTlfVEdfVEFCTEUxOV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzE5X1RHX1RBQkxFMTlfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8xOV9UR19UQUJMRTE5X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMTlfVEdfVEFCTEUxOV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl8yMCAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMjBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0NGMKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzIwX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDRjCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8yMF9UR19UQUJMRTIwX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMjBfVEdfVEFCTEUyMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzIwX1RHX1RBQkxFMjBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8yMF9UR19UQUJMRTIwX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMjBfVEdfVEFCTEUyMF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl8yMSAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMjFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0NTAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzIxX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDUwCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8yMV9UR19UQUJMRTIxX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMjFfVEdfVEFCTEUyMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzIxX1RHX1RBQkxFMjFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8yMV9UR19UQUJMRTIxX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMjFfVEdfVEFCTEUyMV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl8yMiAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMjJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0NTQKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzIyX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDU0Ci0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8yMl9UR19UQUJMRTIyX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMjJfVEdfVEFCTEUyMl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzIyX1RHX1RBQkxFMjJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8yMl9UR19UQUJMRTIyX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMjJfVEdfVEFCTEUyMl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl8yMyAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMjNfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0NTgKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzIzX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDU4Ci0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8yM19UR19UQUJMRTIzX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMjNfVEdfVEFCTEUyM19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzIzX1RHX1RBQkxFMjNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8yM19UR19UQUJMRTIzX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMjNfVEdfVEFCTEUyM19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl8yNCAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMjRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0NWMKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzI0X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDVjCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8yNF9UR19UQUJMRTI0X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMjRfVEdfVEFCTEUyNF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzI0X1RHX1RBQkxFMjRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8yNF9UR19UQUJMRTI0X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMjRfVEdfVEFCTEUyNF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl8yNSAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMjVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0NjAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzI1X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDYwCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8yNV9UR19UQUJMRTI1X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMjVfVEdfVEFCTEUyNV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzI1X1RHX1RBQkxFMjVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8yNV9UR19UQUJMRTI1X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMjVfVEdfVEFCTEUyNV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl8yNiAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMjZfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0NjQKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzI2X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDY0Ci0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8yNl9UR19UQUJMRTI2X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMjZfVEdfVEFCTEUyNl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzI2X1RHX1RBQkxFMjZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8yNl9UR19UQUJMRTI2X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMjZfVEdfVEFCTEUyNl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl8yNyAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMjdfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0NjgKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzI3X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDY4Ci0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8yN19UR19UQUJMRTI3X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMjdfVEdfVEFCTEUyN19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzI3X1RHX1RBQkxFMjdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8yN19UR19UQUJMRTI3X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMjdfVEdfVEFCTEUyN19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl8yOCAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMjhfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0NmMKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzI4X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDZjCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8yOF9UR19UQUJMRTI4X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMjhfVEdfVEFCTEUyOF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzI4X1RHX1RBQkxFMjhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8yOF9UR19UQUJMRTI4X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMjhfVEdfVEFCTEUyOF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl8yOSAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMjlfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0NzAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzI5X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDcwCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8yOV9UR19UQUJMRTI5X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMjlfVEdfVEFCTEUyOV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzI5X1RHX1RBQkxFMjlfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8yOV9UR19UQUJMRTI5X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMjlfVEdfVEFCTEUyOV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl8zMCAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMzBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0NzQKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzMwX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDc0Ci0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8zMF9UR19UQUJMRTMwX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMzBfVEdfVEFCTEUzMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzMwX1RHX1RBQkxFMzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8zMF9UR19UQUJMRTMwX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMzBfVEdfVEFCTEUzMF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl8zMSAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMzFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0NzgKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzMxX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDc4Ci0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8zMV9UR19UQUJMRTMxX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMzFfVEdfVEFCTEUzMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzMxX1RHX1RBQkxFMzFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8zMV9UR19UQUJMRTMxX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMzFfVEdfVEFCTEUzMV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl8zMiAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMzJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0N2MKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzMyX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDdjCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8zMl9UR19UQUJMRTMyX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMzJfVEdfVEFCTEUzMl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCXzMyX1RHX1RBQkxFMzJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl8zMl9UR19UQUJMRTMyX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfMzJfVEdfVEFCTEUzMl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl9wYWxfMSAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0ODAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8xX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDgwCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMV9UR19UQUJMRTFfUEFMX09OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzFfVEdfVEFCTEUxX1BBTF9PTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8xX1RHX1RBQkxFMV9QQUxfT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMV9UR19UQUJMRTFfUEFMX09OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzFfVEdfVEFCTEUxX1BBTF9PTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl9wYWxfMiAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0ODQKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8yX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDg0Ci0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMl9UR19UQUJMRTJfUEFMX09OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzJfVEdfVEFCTEUyX1BBTF9PTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8yX1RHX1RBQkxFMl9QQUxfT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMl9UR19UQUJMRTJfUEFMX09OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzJfVEdfVEFCTEUyX1BBTF9PTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl9wYWxfMyAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzNfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0ODgKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8zX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDg4Ci0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfM19UR19UQUJMRTNfUEFMX09OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzNfVEdfVEFCTEUzX1BBTF9PTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8zX1RHX1RBQkxFM19QQUxfT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfM19UR19UQUJMRTNfUEFMX09OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzNfVEdfVEFCTEUzX1BBTF9PTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl9wYWxfNCAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0OGMKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF80X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDhjCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfNF9UR19UQUJMRTRfUEFMX09OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzRfVEdfVEFCTEU0X1BBTF9PTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF80X1RHX1RBQkxFNF9QQUxfT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfNF9UR19UQUJMRTRfUEFMX09OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzRfVEdfVEFCTEU0X1BBTF9PTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl9wYWxfNSAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0OTAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF81X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDkwCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfNV9UR19UQUJMRTVfUEFMX09OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzVfVEdfVEFCTEU1X1BBTF9PTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF81X1RHX1RBQkxFNV9QQUxfT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfNV9UR19UQUJMRTVfUEFMX09OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzVfVEdfVEFCTEU1X1BBTF9PTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl9wYWxfNiAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzZfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0OTQKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF82X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDk0Ci0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfNl9UR19UQUJMRTZfUEFMX09OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzZfVEdfVEFCTEU2X1BBTF9PTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF82X1RHX1RBQkxFNl9QQUxfT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfNl9UR19UQUJMRTZfUEFMX09OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzZfVEdfVEFCTEU2X1BBTF9PTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl9wYWxfNyAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzdfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0OTgKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF83X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDk4Ci0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfN19UR19UQUJMRTdfUEFMX09OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzdfVEdfVEFCTEU3X1BBTF9PTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF83X1RHX1RBQkxFN19QQUxfT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfN19UR19UQUJMRTdfUEFMX09OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzdfVEdfVEFCTEU3X1BBTF9PTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl9wYWxfOCAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzhfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0OWMKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF84X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNDljCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfOF9UR19UQUJMRThfUEFMX09OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzhfVEdfVEFCTEU4X1BBTF9PTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF84X1RHX1RBQkxFOF9QQUxfT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfOF9UR19UQUJMRThfUEFMX09OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzhfVEdfVEFCTEU4X1BBTF9PTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl9wYWxfOSAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzlfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0YTAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF85X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNGEwCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfOV9UR19UQUJMRTlfUEFMX09OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzlfVEdfVEFCTEU5X1BBTF9PTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF85X1RHX1RBQkxFOV9QQUxfT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfOV9UR19UQUJMRTlfUEFMX09OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzlfVEdfVEFCTEU5X1BBTF9PTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl9wYWxfMTAgKi8KLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8xMF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNGE0Ci0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMTBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTRhNAotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzEwX1RHX1RBQkxFMTBfUEFMX09OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8xMF9UR19UQUJMRTEwX1BBTF9PTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMTBfVEdfVEFCTEUxMF9QQUxfT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzEwX1RHX1RBQkxFMTBfUEFMX09OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhmZmZmZmZmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8xMF9UR19UQUJMRTEwX1BBTF9PTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4ZmZmZmZmZmYpCi0KLS8qIG1hY3JvcyBmb3IgQkJfdHhfZ2Fpbl90YWJfcGFsXzExICovCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMTFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTRhOAotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzExX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0YTgKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8xMV9UR19UQUJMRTExX1BBTF9PTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMTFfVEdfVEFCTEUxMV9QQUxfT05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzExX1RHX1RBQkxFMTFfUEFMX09OX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8xMV9UR19UQUJMRTExX1BBTF9PTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZmZmZmZmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMTFfVEdfVEFCTEUxMV9QQUxfT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweGZmZmZmZmZmKQotCi0vKiBtYWNyb3MgZm9yIEJCX3R4X2dhaW5fdGFiX3BhbF8xMiAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzEyX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0YWMKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8xMl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNGFjCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMTJfVEdfVEFCTEUxMl9QQUxfT05fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzEyX1RHX1RBQkxFMTJfUEFMX09OX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8xMl9UR19UQUJMRTEyX1BBTF9PTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMTJfVEdfVEFCTEUxMl9QQUxfT05fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzEyX1RHX1RBQkxFMTJfUEFMX09OX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl9wYWxfMTMgKi8KLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8xM19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNGIwCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMTNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTRiMAotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzEzX1RHX1RBQkxFMTNfUEFMX09OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8xM19UR19UQUJMRTEzX1BBTF9PTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMTNfVEdfVEFCTEUxM19QQUxfT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzEzX1RHX1RBQkxFMTNfUEFMX09OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhmZmZmZmZmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8xM19UR19UQUJMRTEzX1BBTF9PTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4ZmZmZmZmZmYpCi0KLS8qIG1hY3JvcyBmb3IgQkJfdHhfZ2Fpbl90YWJfcGFsXzE0ICovCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMTRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTRiNAotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzE0X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0YjQKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8xNF9UR19UQUJMRTE0X1BBTF9PTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMTRfVEdfVEFCTEUxNF9QQUxfT05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzE0X1RHX1RBQkxFMTRfUEFMX09OX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8xNF9UR19UQUJMRTE0X1BBTF9PTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZmZmZmZmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMTRfVEdfVEFCTEUxNF9QQUxfT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweGZmZmZmZmZmKQotCi0vKiBtYWNyb3MgZm9yIEJCX3R4X2dhaW5fdGFiX3BhbF8xNSAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzE1X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0YjgKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8xNV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNGI4Ci0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMTVfVEdfVEFCTEUxNV9QQUxfT05fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzE1X1RHX1RBQkxFMTVfUEFMX09OX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8xNV9UR19UQUJMRTE1X1BBTF9PTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMTVfVEdfVEFCTEUxNV9QQUxfT05fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzE1X1RHX1RBQkxFMTVfUEFMX09OX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl9wYWxfMTYgKi8KLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8xNl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNGJjCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMTZfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTRiYwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzE2X1RHX1RBQkxFMTZfUEFMX09OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8xNl9UR19UQUJMRTE2X1BBTF9PTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMTZfVEdfVEFCTEUxNl9QQUxfT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzE2X1RHX1RBQkxFMTZfUEFMX09OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhmZmZmZmZmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8xNl9UR19UQUJMRTE2X1BBTF9PTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4ZmZmZmZmZmYpCi0KLS8qIG1hY3JvcyBmb3IgQkJfdHhfZ2Fpbl90YWJfcGFsXzE3ICovCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMTdfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTRjMAotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzE3X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0YzAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8xN19UR19UQUJMRTE3X1BBTF9PTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMTdfVEdfVEFCTEUxN19QQUxfT05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzE3X1RHX1RBQkxFMTdfUEFMX09OX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8xN19UR19UQUJMRTE3X1BBTF9PTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZmZmZmZmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMTdfVEdfVEFCTEUxN19QQUxfT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweGZmZmZmZmZmKQotCi0vKiBtYWNyb3MgZm9yIEJCX3R4X2dhaW5fdGFiX3BhbF8xOCAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzE4X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0YzQKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8xOF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNGM0Ci0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMThfVEdfVEFCTEUxOF9QQUxfT05fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzE4X1RHX1RBQkxFMThfUEFMX09OX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8xOF9UR19UQUJMRTE4X1BBTF9PTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMThfVEdfVEFCTEUxOF9QQUxfT05fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzE4X1RHX1RBQkxFMThfUEFMX09OX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl9wYWxfMTkgKi8KLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8xOV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNGM4Ci0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMTlfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTRjOAotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzE5X1RHX1RBQkxFMTlfUEFMX09OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8xOV9UR19UQUJMRTE5X1BBTF9PTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMTlfVEdfVEFCTEUxOV9QQUxfT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzE5X1RHX1RBQkxFMTlfUEFMX09OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhmZmZmZmZmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8xOV9UR19UQUJMRTE5X1BBTF9PTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4ZmZmZmZmZmYpCi0KLS8qIG1hY3JvcyBmb3IgQkJfdHhfZ2Fpbl90YWJfcGFsXzIwICovCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMjBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTRjYwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzIwX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0Y2MKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8yMF9UR19UQUJMRTIwX1BBTF9PTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMjBfVEdfVEFCTEUyMF9QQUxfT05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzIwX1RHX1RBQkxFMjBfUEFMX09OX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8yMF9UR19UQUJMRTIwX1BBTF9PTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZmZmZmZmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMjBfVEdfVEFCTEUyMF9QQUxfT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweGZmZmZmZmZmKQotCi0vKiBtYWNyb3MgZm9yIEJCX3R4X2dhaW5fdGFiX3BhbF8yMSAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzIxX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0ZDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8yMV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNGQwCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMjFfVEdfVEFCTEUyMV9QQUxfT05fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzIxX1RHX1RBQkxFMjFfUEFMX09OX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8yMV9UR19UQUJMRTIxX1BBTF9PTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMjFfVEdfVEFCTEUyMV9QQUxfT05fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzIxX1RHX1RBQkxFMjFfUEFMX09OX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl9wYWxfMjIgKi8KLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8yMl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNGQ0Ci0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMjJfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTRkNAotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzIyX1RHX1RBQkxFMjJfUEFMX09OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8yMl9UR19UQUJMRTIyX1BBTF9PTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMjJfVEdfVEFCTEUyMl9QQUxfT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzIyX1RHX1RBQkxFMjJfUEFMX09OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhmZmZmZmZmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8yMl9UR19UQUJMRTIyX1BBTF9PTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4ZmZmZmZmZmYpCi0KLS8qIG1hY3JvcyBmb3IgQkJfdHhfZ2Fpbl90YWJfcGFsXzIzICovCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMjNfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTRkOAotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzIzX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0ZDgKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8yM19UR19UQUJMRTIzX1BBTF9PTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMjNfVEdfVEFCTEUyM19QQUxfT05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzIzX1RHX1RBQkxFMjNfUEFMX09OX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8yM19UR19UQUJMRTIzX1BBTF9PTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZmZmZmZmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMjNfVEdfVEFCTEUyM19QQUxfT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweGZmZmZmZmZmKQotCi0vKiBtYWNyb3MgZm9yIEJCX3R4X2dhaW5fdGFiX3BhbF8yNCAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzI0X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0ZGMKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8yNF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNGRjCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMjRfVEdfVEFCTEUyNF9QQUxfT05fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzI0X1RHX1RBQkxFMjRfUEFMX09OX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8yNF9UR19UQUJMRTI0X1BBTF9PTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMjRfVEdfVEFCTEUyNF9QQUxfT05fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzI0X1RHX1RBQkxFMjRfUEFMX09OX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl9wYWxfMjUgKi8KLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8yNV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNGUwCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMjVfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTRlMAotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzI1X1RHX1RBQkxFMjVfUEFMX09OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8yNV9UR19UQUJMRTI1X1BBTF9PTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMjVfVEdfVEFCTEUyNV9QQUxfT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzI1X1RHX1RBQkxFMjVfUEFMX09OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhmZmZmZmZmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8yNV9UR19UQUJMRTI1X1BBTF9PTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4ZmZmZmZmZmYpCi0KLS8qIG1hY3JvcyBmb3IgQkJfdHhfZ2Fpbl90YWJfcGFsXzI2ICovCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMjZfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTRlNAotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzI2X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0ZTQKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8yNl9UR19UQUJMRTI2X1BBTF9PTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMjZfVEdfVEFCTEUyNl9QQUxfT05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzI2X1RHX1RBQkxFMjZfUEFMX09OX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8yNl9UR19UQUJMRTI2X1BBTF9PTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZmZmZmZmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMjZfVEdfVEFCTEUyNl9QQUxfT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweGZmZmZmZmZmKQotCi0vKiBtYWNyb3MgZm9yIEJCX3R4X2dhaW5fdGFiX3BhbF8yNyAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzI3X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0ZTgKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8yN19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNGU4Ci0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMjdfVEdfVEFCTEUyN19QQUxfT05fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzI3X1RHX1RBQkxFMjdfUEFMX09OX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8yN19UR19UQUJMRTI3X1BBTF9PTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMjdfVEdfVEFCTEUyN19QQUxfT05fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzI3X1RHX1RBQkxFMjdfUEFMX09OX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl9wYWxfMjggKi8KLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8yOF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNGVjCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMjhfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTRlYwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzI4X1RHX1RBQkxFMjhfUEFMX09OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8yOF9UR19UQUJMRTI4X1BBTF9PTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMjhfVEdfVEFCTEUyOF9QQUxfT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzI4X1RHX1RBQkxFMjhfUEFMX09OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhmZmZmZmZmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8yOF9UR19UQUJMRTI4X1BBTF9PTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4ZmZmZmZmZmYpCi0KLS8qIG1hY3JvcyBmb3IgQkJfdHhfZ2Fpbl90YWJfcGFsXzI5ICovCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMjlfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTRmMAotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzI5X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0ZjAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8yOV9UR19UQUJMRTI5X1BBTF9PTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMjlfVEdfVEFCTEUyOV9QQUxfT05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzI5X1RHX1RBQkxFMjlfUEFMX09OX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8yOV9UR19UQUJMRTI5X1BBTF9PTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZmZmZmZmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMjlfVEdfVEFCTEUyOV9QQUxfT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweGZmZmZmZmZmKQotCi0vKiBtYWNyb3MgZm9yIEJCX3R4X2dhaW5fdGFiX3BhbF8zMCAqLwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzMwX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0ZjQKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8zMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNGY0Ci0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMzBfVEdfVEFCTEUzMF9QQUxfT05fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzMwX1RHX1RBQkxFMzBfUEFMX09OX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8zMF9UR19UQUJMRTMwX1BBTF9PTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMzBfVEdfVEFCTEUzMF9QQUxfT05fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzMwX1RHX1RBQkxFMzBfUEFMX09OX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl90eF9nYWluX3RhYl9wYWxfMzEgKi8KLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8zMV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNGY4Ci0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMzFfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTRmOAotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzMxX1RHX1RBQkxFMzFfUEFMX09OX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8zMV9UR19UQUJMRTMxX1BBTF9PTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMzFfVEdfVEFCTEUzMV9QQUxfT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzMxX1RHX1RBQkxFMzFfUEFMX09OX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhmZmZmZmZmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8zMV9UR19UQUJMRTMxX1BBTF9PTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4ZmZmZmZmZmYpCi0KLS8qIG1hY3JvcyBmb3IgQkJfdHhfZ2Fpbl90YWJfcGFsXzMyICovCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMzJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTRmYwotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzMyX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE0ZmMKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8zMl9UR19UQUJMRTMyX1BBTF9PTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMzJfVEdfVEFCTEUzMl9QQUxfT05fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfVFhfR0FJTl9UQUJfUEFMXzMyX1RHX1RBQkxFMzJfUEFMX09OX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgUEhZX0JCX1RYX0dBSU5fVEFCX1BBTF8zMl9UR19UQUJMRTMyX1BBTF9PTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4ZmZmZmZmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9UWF9HQUlOX1RBQl9QQUxfMzJfVEdfVEFCTEUzMl9QQUxfT05fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweGZmZmZmZmZmKQotCi0vKiBtYWNyb3MgZm9yIEJCX2NhbHR4X2dhaW5fc2V0XzAgKi8KLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNTE4Ci0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8wX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTUxOAotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMF9DQUxUWF9HQUlOX1NFVF8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzBfQ0FMVFhfR0FJTl9TRVRfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8wX0NBTFRYX0dBSU5fU0VUXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwM2ZmZgotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMF9DQUxUWF9HQUlOX1NFVF8wX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwM2ZmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzBfQ0FMVFhfR0FJTl9TRVRfMF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDNmZmYpCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8wX0NBTFRYX0dBSU5fU0VUXzFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMF9DQUxUWF9HQUlOX1NFVF8xX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzBfQ0FMVFhfR0FJTl9TRVRfMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBmZmZjMDAwCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8wX0NBTFRYX0dBSU5fU0VUXzFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MGZmZmMwMDApID4+IDE0KQotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMF9DQUxUWF9HQUlOX1NFVF8xX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwZmZmYzAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9jYWx0eF9nYWluX3NldF8yICovCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8yX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTUxYwotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE1MWMKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzJfQ0FMVFhfR0FJTl9TRVRfMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8yX0NBTFRYX0dBSU5fU0VUXzJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMl9DQUxUWF9HQUlOX1NFVF8yX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDNmZmYKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzJfQ0FMVFhfR0FJTl9TRVRfMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDNmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8yX0NBTFRYX0dBSU5fU0VUXzJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAzZmZmKQotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMl9DQUxUWF9HQUlOX1NFVF8zX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzJfQ0FMVFhfR0FJTl9TRVRfM19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8yX0NBTFRYX0dBSU5fU0VUXzNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwZmZmYzAwMAotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMl9DQUxUWF9HQUlOX1NFVF8zX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDBmZmZjMDAwKSA+PiAxNCkKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzJfQ0FMVFhfR0FJTl9TRVRfM19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE0KSAmIDB4MGZmZmMwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfY2FsdHhfZ2Fpbl9zZXRfNCAqLwotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfNF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE1MjAKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzRfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNTIwCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF80X0NBTFRYX0dBSU5fU0VUXzRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfNF9DQUxUWF9HQUlOX1NFVF80X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzRfQ0FMVFhfR0FJTl9TRVRfNF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzZmZmCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF80X0NBTFRYX0dBSU5fU0VUXzRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAzZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfNF9DQUxUWF9HQUlOX1NFVF80X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwM2ZmZikKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzRfQ0FMVFhfR0FJTl9TRVRfNV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF80X0NBTFRYX0dBSU5fU0VUXzVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfNF9DQUxUWF9HQUlOX1NFVF81X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGZmZmMwMDAKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzRfQ0FMVFhfR0FJTl9TRVRfNV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwZmZmYzAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF80X0NBTFRYX0dBSU5fU0VUXzVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNCkgJiAweDBmZmZjMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX2NhbHR4X2dhaW5fc2V0XzYgKi8KLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzZfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNTI0Ci0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF82X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTUyNAotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfNl9DQUxUWF9HQUlOX1NFVF82X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzZfQ0FMVFhfR0FJTl9TRVRfNl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF82X0NBTFRYX0dBSU5fU0VUXzZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwM2ZmZgotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfNl9DQUxUWF9HQUlOX1NFVF82X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwM2ZmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzZfQ0FMVFhfR0FJTl9TRVRfNl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDNmZmYpCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF82X0NBTFRYX0dBSU5fU0VUXzdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfNl9DQUxUWF9HQUlOX1NFVF83X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzZfQ0FMVFhfR0FJTl9TRVRfN19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBmZmZjMDAwCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF82X0NBTFRYX0dBSU5fU0VUXzdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MGZmZmMwMDApID4+IDE0KQotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfNl9DQUxUWF9HQUlOX1NFVF83X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwZmZmYzAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9jYWx0eF9nYWluX3NldF84ICovCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF84X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTUyOAotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfOF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE1MjgKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzhfQ0FMVFhfR0FJTl9TRVRfOF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF84X0NBTFRYX0dBSU5fU0VUXzhfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfOF9DQUxUWF9HQUlOX1NFVF84X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDNmZmYKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzhfQ0FMVFhfR0FJTl9TRVRfOF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDNmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF84X0NBTFRYX0dBSU5fU0VUXzhfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAzZmZmKQotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfOF9DQUxUWF9HQUlOX1NFVF85X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzhfQ0FMVFhfR0FJTl9TRVRfOV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF84X0NBTFRYX0dBSU5fU0VUXzlfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwZmZmYzAwMAotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfOF9DQUxUWF9HQUlOX1NFVF85X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDBmZmZjMDAwKSA+PiAxNCkKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzhfQ0FMVFhfR0FJTl9TRVRfOV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE0KSAmIDB4MGZmZmMwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfY2FsdHhfZ2Fpbl9zZXRfMTAgKi8KLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzEwX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNTJjCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8xMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTUyYwotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMTBfQ0FMVFhfR0FJTl9TRVRfMTBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzEwX0NBTFRYX0dBSU5fU0VUXzEwX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8xMF9DQUxUWF9HQUlOX1NFVF8xMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwM2ZmZgotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMTBfQ0FMVFhfR0FJTl9TRVRfMTBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwM2ZmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzEwX0NBTFRYX0dBSU5fU0VUXzEwX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDNmZmYpCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8xMF9DQUxUWF9HQUlOX1NFVF8xMV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMTBfQ0FMVFhfR0FJTl9TRVRfMTFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzEwX0NBTFRYX0dBSU5fU0VUXzExX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBmZmZjMDAwCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8xMF9DQUxUWF9HQUlOX1NFVF8xMV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MGZmZmMwMDApID4+IDE0KQotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMTBfQ0FMVFhfR0FJTl9TRVRfMTFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwZmZmYzAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9jYWx0eF9nYWluX3NldF8xMiAqLwotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMTJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE1MzAKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzEyX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNTMwCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8xMl9DQUxUWF9HQUlOX1NFVF8xMl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMTJfQ0FMVFhfR0FJTl9TRVRfMTJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzEyX0NBTFRYX0dBSU5fU0VUXzEyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzZmZmCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8xMl9DQUxUWF9HQUlOX1NFVF8xMl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAzZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMTJfQ0FMVFhfR0FJTl9TRVRfMTJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwM2ZmZikKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzEyX0NBTFRYX0dBSU5fU0VUXzEzX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8xMl9DQUxUWF9HQUlOX1NFVF8xM19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMTJfQ0FMVFhfR0FJTl9TRVRfMTNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGZmZmMwMDAKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzEyX0NBTFRYX0dBSU5fU0VUXzEzX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwZmZmYzAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8xMl9DQUxUWF9HQUlOX1NFVF8xM19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNCkgJiAweDBmZmZjMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX2NhbHR4X2dhaW5fc2V0XzE0ICovCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8xNF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTUzNAotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMTRfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE1MzQKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzE0X0NBTFRYX0dBSU5fU0VUXzE0X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8xNF9DQUxUWF9HQUlOX1NFVF8xNF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMTRfQ0FMVFhfR0FJTl9TRVRfMTRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDNmZmYKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzE0X0NBTFRYX0dBSU5fU0VUXzE0X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDNmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8xNF9DQUxUWF9HQUlOX1NFVF8xNF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAzZmZmKQotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMTRfQ0FMVFhfR0FJTl9TRVRfMTVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzE0X0NBTFRYX0dBSU5fU0VUXzE1X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8xNF9DQUxUWF9HQUlOX1NFVF8xNV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwZmZmYzAwMAotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMTRfQ0FMVFhfR0FJTl9TRVRfMTVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDBmZmZjMDAwKSA+PiAxNCkKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzE0X0NBTFRYX0dBSU5fU0VUXzE1X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE0KSAmIDB4MGZmZmMwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfY2FsdHhfZ2Fpbl9zZXRfMTYgKi8KLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzE2X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNTM4Ci0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8xNl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTUzOAotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMTZfQ0FMVFhfR0FJTl9TRVRfMTZfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzE2X0NBTFRYX0dBSU5fU0VUXzE2X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8xNl9DQUxUWF9HQUlOX1NFVF8xNl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwM2ZmZgotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMTZfQ0FMVFhfR0FJTl9TRVRfMTZfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwM2ZmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzE2X0NBTFRYX0dBSU5fU0VUXzE2X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDNmZmYpCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8xNl9DQUxUWF9HQUlOX1NFVF8xN19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMTZfQ0FMVFhfR0FJTl9TRVRfMTdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzE2X0NBTFRYX0dBSU5fU0VUXzE3X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBmZmZjMDAwCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8xNl9DQUxUWF9HQUlOX1NFVF8xN19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MGZmZmMwMDApID4+IDE0KQotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMTZfQ0FMVFhfR0FJTl9TRVRfMTdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwZmZmYzAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9jYWx0eF9nYWluX3NldF8xOCAqLwotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMThfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE1M2MKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzE4X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNTNjCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8xOF9DQUxUWF9HQUlOX1NFVF8xOF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMThfQ0FMVFhfR0FJTl9TRVRfMThfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzE4X0NBTFRYX0dBSU5fU0VUXzE4X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzZmZmCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8xOF9DQUxUWF9HQUlOX1NFVF8xOF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAzZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMThfQ0FMVFhfR0FJTl9TRVRfMThfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwM2ZmZikKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzE4X0NBTFRYX0dBSU5fU0VUXzE5X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8xOF9DQUxUWF9HQUlOX1NFVF8xOV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMThfQ0FMVFhfR0FJTl9TRVRfMTlfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGZmZmMwMDAKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzE4X0NBTFRYX0dBSU5fU0VUXzE5X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwZmZmYzAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8xOF9DQUxUWF9HQUlOX1NFVF8xOV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNCkgJiAweDBmZmZjMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX2NhbHR4X2dhaW5fc2V0XzIwICovCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8yMF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTU0MAotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMjBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE1NDAKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzIwX0NBTFRYX0dBSU5fU0VUXzIwX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8yMF9DQUxUWF9HQUlOX1NFVF8yMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMjBfQ0FMVFhfR0FJTl9TRVRfMjBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDNmZmYKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzIwX0NBTFRYX0dBSU5fU0VUXzIwX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDNmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8yMF9DQUxUWF9HQUlOX1NFVF8yMF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAzZmZmKQotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMjBfQ0FMVFhfR0FJTl9TRVRfMjFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzIwX0NBTFRYX0dBSU5fU0VUXzIxX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8yMF9DQUxUWF9HQUlOX1NFVF8yMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwZmZmYzAwMAotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMjBfQ0FMVFhfR0FJTl9TRVRfMjFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDBmZmZjMDAwKSA+PiAxNCkKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzIwX0NBTFRYX0dBSU5fU0VUXzIxX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE0KSAmIDB4MGZmZmMwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfY2FsdHhfZ2Fpbl9zZXRfMjIgKi8KLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzIyX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNTQ0Ci0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8yMl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTU0NAotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMjJfQ0FMVFhfR0FJTl9TRVRfMjJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzIyX0NBTFRYX0dBSU5fU0VUXzIyX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8yMl9DQUxUWF9HQUlOX1NFVF8yMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwM2ZmZgotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMjJfQ0FMVFhfR0FJTl9TRVRfMjJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwM2ZmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzIyX0NBTFRYX0dBSU5fU0VUXzIyX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDNmZmYpCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8yMl9DQUxUWF9HQUlOX1NFVF8yM19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMjJfQ0FMVFhfR0FJTl9TRVRfMjNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzIyX0NBTFRYX0dBSU5fU0VUXzIzX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBmZmZjMDAwCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8yMl9DQUxUWF9HQUlOX1NFVF8yM19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MGZmZmMwMDApID4+IDE0KQotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMjJfQ0FMVFhfR0FJTl9TRVRfMjNfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwZmZmYzAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9jYWx0eF9nYWluX3NldF8yNCAqLwotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMjRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE1NDgKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzI0X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNTQ4Ci0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8yNF9DQUxUWF9HQUlOX1NFVF8yNF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMjRfQ0FMVFhfR0FJTl9TRVRfMjRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzI0X0NBTFRYX0dBSU5fU0VUXzI0X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzZmZmCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8yNF9DQUxUWF9HQUlOX1NFVF8yNF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAzZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMjRfQ0FMVFhfR0FJTl9TRVRfMjRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwM2ZmZikKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzI0X0NBTFRYX0dBSU5fU0VUXzI1X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8yNF9DQUxUWF9HQUlOX1NFVF8yNV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMjRfQ0FMVFhfR0FJTl9TRVRfMjVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGZmZmMwMDAKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzI0X0NBTFRYX0dBSU5fU0VUXzI1X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwZmZmYzAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8yNF9DQUxUWF9HQUlOX1NFVF8yNV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNCkgJiAweDBmZmZjMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX2NhbHR4X2dhaW5fc2V0XzI2ICovCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8yNl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTU0YwotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMjZfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE1NGMKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzI2X0NBTFRYX0dBSU5fU0VUXzI2X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8yNl9DQUxUWF9HQUlOX1NFVF8yNl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMjZfQ0FMVFhfR0FJTl9TRVRfMjZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDNmZmYKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzI2X0NBTFRYX0dBSU5fU0VUXzI2X0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDNmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8yNl9DQUxUWF9HQUlOX1NFVF8yNl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAzZmZmKQotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMjZfQ0FMVFhfR0FJTl9TRVRfMjdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzI2X0NBTFRYX0dBSU5fU0VUXzI3X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8yNl9DQUxUWF9HQUlOX1NFVF8yN19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwZmZmYzAwMAotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMjZfQ0FMVFhfR0FJTl9TRVRfMjdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDBmZmZjMDAwKSA+PiAxNCkKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzI2X0NBTFRYX0dBSU5fU0VUXzI3X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE0KSAmIDB4MGZmZmMwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfY2FsdHhfZ2Fpbl9zZXRfMjggKi8KLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzI4X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNTUwCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8yOF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTU1MAotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMjhfQ0FMVFhfR0FJTl9TRVRfMjhfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzI4X0NBTFRYX0dBSU5fU0VUXzI4X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8yOF9DQUxUWF9HQUlOX1NFVF8yOF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwM2ZmZgotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMjhfQ0FMVFhfR0FJTl9TRVRfMjhfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwM2ZmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzI4X0NBTFRYX0dBSU5fU0VUXzI4X1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDNmZmYpCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8yOF9DQUxUWF9HQUlOX1NFVF8yOV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMjhfQ0FMVFhfR0FJTl9TRVRfMjlfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzI4X0NBTFRYX0dBSU5fU0VUXzI5X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBmZmZjMDAwCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8yOF9DQUxUWF9HQUlOX1NFVF8yOV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MGZmZmMwMDApID4+IDE0KQotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMjhfQ0FMVFhfR0FJTl9TRVRfMjlfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwZmZmYzAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9jYWx0eF9nYWluX3NldF8zMCAqLwotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMzBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE1NTQKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzMwX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNTU0Ci0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8zMF9DQUxUWF9HQUlOX1NFVF8zMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMzBfQ0FMVFhfR0FJTl9TRVRfMzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzMwX0NBTFRYX0dBSU5fU0VUXzMwX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzZmZmCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8zMF9DQUxUWF9HQUlOX1NFVF8zMF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAzZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMzBfQ0FMVFhfR0FJTl9TRVRfMzBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwM2ZmZikKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzMwX0NBTFRYX0dBSU5fU0VUXzMxX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8zMF9DQUxUWF9HQUlOX1NFVF8zMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQkJfQ0FMVFhfR0FJTl9TRVRfMzBfQ0FMVFhfR0FJTl9TRVRfMzFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGZmZmMwMDAKLSNkZWZpbmUgUEhZX0JCX0NBTFRYX0dBSU5fU0VUXzMwX0NBTFRYX0dBSU5fU0VUXzMxX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwZmZmYzAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9CQl9DQUxUWF9HQUlOX1NFVF8zMF9DQUxUWF9HQUlOX1NFVF8zMV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNCkgJiAweDBmZmZjMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3R4aXFjYWxfbWVhc19iMCAqLwotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9NRUFTX0IwX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE1NTgKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfTUVBU19CMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNTU4Ci0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX01FQVNfQjBfVFhJUUNfTUVBU19EQVRBMF8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9NRUFTX0IwX1RYSVFDX01FQVNfREFUQTBfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfTUVBU19CMF9UWElRQ19NRUFTX0RBVEEwXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwZmZmCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX01FQVNfQjBfVFhJUUNfTUVBU19EQVRBMF8wX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9NRUFTX0IwX1RYSVFDX01FQVNfREFUQTFfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfTUVBU19CMF9UWElRQ19NRUFTX0RBVEExXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX01FQVNfQjBfVFhJUUNfTUVBU19EQVRBMV8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMGZmZjAwMAotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9NRUFTX0IwX1RYSVFDX01FQVNfREFUQTFfMF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwZmZmMDAwKSA+PiAxMikKLQotLyogbWFjcm9zIGZvciBCQl90eGlxY2FsX3N0YXJ0ICovCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX1NUQVJUX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTZkOAotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9TVEFSVF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE2ZDgKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfU1RBUlRfRE9fVFhfSVFDQUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX1NUQVJUX0RPX1RYX0lRQ0FMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9TVEFSVF9ET19UWF9JUUNBTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfU1RBUlRfRE9fVFhfSVFDQUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDEpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX1NUQVJUX0RPX1RYX0lRQ0FMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDAxKQotCi0vKiBtYWNyb3MgZm9yIEJCX3R4aXFjYWxfY29udHJvbF8wICovCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfMF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTZkYwotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE2ZGMKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8wX0lRQ19UWF9UQUJMRV9TRUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfMF9JUUNfVFhfVEFCTEVfU0VMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzBfSVFDX1RYX1RBQkxFX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8wX0lRQ19UWF9UQUJMRV9TRUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDEpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfMF9JUUNfVFhfVEFCTEVfU0VMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDAxKQotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzBfQkFTRV9UWF9UT05FX0RCX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8wX0JBU0VfVFhfVE9ORV9EQl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfMF9CQVNFX1RYX1RPTkVfREJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3ZQotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzBfQkFTRV9UWF9UT05FX0RCX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDA3ZSkgPj4gMSkKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8wX0JBU0VfVFhfVE9ORV9EQl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxKSAmIDB4MDAwMDAwN2UpCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfMF9NQVhfVFhfVE9ORV9HQUlOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzBfTUFYX1RYX1RPTkVfR0FJTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8wX01BWF9UWF9UT05FX0dBSU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxZjgwCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfMF9NQVhfVFhfVE9ORV9HQUlOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAxZjgwKSA+PiA3KQotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzBfTUFYX1RYX1RPTkVfR0FJTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDcpICYgMHgwMDAwMWY4MCkKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8wX01JTl9UWF9UT05FX0dBSU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfMF9NSU5fVFhfVE9ORV9HQUlOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzBfTUlOX1RYX1RPTkVfR0FJTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwN2UwMDAKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8wX01JTl9UWF9UT05FX0dBSU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDA3ZTAwMCkgPj4gMTMpCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfMF9NSU5fVFhfVE9ORV9HQUlOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMykgJiAweDAwMDdlMDAwKQotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzBfQ0FMVFhTSElGVF9ERUxBWV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8wX0NBTFRYU0hJRlRfREVMQVlfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfMF9DQUxUWFNISUZUX0RFTEFZX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDc4MDAwMAotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzBfQ0FMVFhTSElGVF9ERUxBWV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwNzgwMDAwKSA+PiAxOSkKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8wX0NBTFRYU0hJRlRfREVMQVlfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE5KSAmIDB4MDA3ODAwMDApCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfMF9MT09QQkFDS19ERUxBWV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzBfTE9PUEJBQ0tfREVMQVlfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8wX0xPT1BCQUNLX0RFTEFZX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNmODAwMDAwCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfMF9MT09QQkFDS19ERUxBWV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4M2Y4MDAwMDApID4+IDIzKQotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzBfTE9PUEJBQ0tfREVMQVlfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjMpICYgMHgzZjgwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl90eGlxY2FsX2NvbnRyb2xfMSAqLwotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE2ZTAKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8xX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNmUwCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfMV9SWF9JTklUX0dBSU5fREJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzFfUlhfSU5JVF9HQUlOX0RCX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8xX1JYX0lOSVRfR0FJTl9EQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNmCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfMV9SWF9JTklUX0dBSU5fREJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDNmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzFfUlhfSU5JVF9HQUlOX0RCX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAzZikKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8xX01BWF9SWF9HQUlOX0RCX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfMV9NQVhfUlhfR0FJTl9EQl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzFfTUFYX1JYX0dBSU5fREJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBmYzAKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8xX01BWF9SWF9HQUlOX0RCX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDBmYzApID4+IDYpCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfMV9NQVhfUlhfR0FJTl9EQl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNikgJiAweDAwMDAwZmMwKQotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzFfTUlOX1JYX0dBSU5fREJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8xX01JTl9SWF9HQUlOX0RCX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfMV9NSU5fUlhfR0FJTl9EQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzZjAwMAotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzFfTUlOX1JYX0dBSU5fREJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDNmMDAwKSA+PiAxMikKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8xX01JTl9SWF9HQUlOX0RCX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEyKSAmIDB4MDAwM2YwMDApCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfMV9JUUNPUlJfSV9RX0NPRkZfREVMUFRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzFfSVFDT1JSX0lfUV9DT0ZGX0RFTFBUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8xX0lRQ09SUl9JX1FfQ09GRl9ERUxQVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxZmMwMDAwCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfMV9JUUNPUlJfSV9RX0NPRkZfREVMUFRfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDFmYzAwMDApID4+IDE4KQotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzFfSVFDT1JSX0lfUV9DT0ZGX0RFTFBUX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTgpICYgMHgwMWZjMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl90eGlxY2FsX2NvbnRyb2xfMiAqLwotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE2ZTQKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8yX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNmU0Ci0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfMl9JUUNfRk9SQ0VEX1BBR0FJTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzJfSVFDX0ZPUkNFRF9QQUdBSU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8yX0lRQ19GT1JDRURfUEFHQUlOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBmCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfMl9JUUNfRk9SQ0VEX1BBR0FJTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDBmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzJfSVFDX0ZPUkNFRF9QQUdBSU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwZikKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8yX0lRQ0FMX01JTl9UWF9HQUlOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfMl9JUUNBTF9NSU5fVFhfR0FJTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzJfSVFDQUxfTUlOX1RYX0dBSU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxZjAKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8yX0lRQ0FMX01JTl9UWF9HQUlOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAxZjApID4+IDQpCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfMl9JUUNBTF9NSU5fVFhfR0FJTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNCkgJiAweDAwMDAwMWYwKQotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzJfSVFDQUxfTUFYX1RYX0dBSU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8yX0lRQ0FMX01BWF9UWF9HQUlOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfMl9JUUNBTF9NQVhfVFhfR0FJTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwM2UwMAotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzJfSVFDQUxfTUFYX1RYX0dBSU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwM2UwMCkgPj4gOSkKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8yX0lRQ0FMX01BWF9UWF9HQUlOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA5KSAmIDB4MDAwMDNlMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfdHhpcWNhbF9jb250cm9sXzMgKi8KLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8zX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNmU4Ci0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfM19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTZlOAotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzNfUFdSX0hJR0hfREJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8zX1BXUl9ISUdIX0RCX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfM19QV1JfSElHSF9EQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzZgotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzNfUFdSX0hJR0hfREJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAzZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8zX1BXUl9ISUdIX0RCX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwM2YpCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfM19QV1JfTE9XX0RCX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzNfUFdSX0xPV19EQl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8zX1BXUl9MT1dfREJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwZmMwCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfM19QV1JfTE9XX0RCX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwZmMwKSA+PiA2KQotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzNfUFdSX0xPV19EQl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDYpICYgMHgwMDAwMGZjMCkKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8zX0lRQ0FMX1RPTkVfUEhTX1NURVBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfM19JUUNBTF9UT05FX1BIU19TVEVQX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzNfSVFDQUxfVE9ORV9QSFNfU1RFUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzZmYwMDAKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8zX0lRQ0FMX1RPTkVfUEhTX1NURVBfR0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDNmZjAwMCkgPj4gMTIpCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfM19JUUNBTF9UT05FX1BIU19TVEVQX1NFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMikgJiAweDAwM2ZmMDAwKQotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzNfRENfRVNUX0xFTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8zX0RDX0VTVF9MRU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfM19EQ19FU1RfTEVOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMGMwMDAwMAotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzNfRENfRVNUX0xFTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwYzAwMDAwKSA+PiAyMikKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8zX0RDX0VTVF9MRU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIyKSAmIDB4MDBjMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfM19BRENfU0FUX0xFTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzNfQURDX1NBVF9MRU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8zX0FEQ19TQVRfTEVOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfM19BRENfU0FUX0xFTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDEwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzNfQURDX1NBVF9MRU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjQpICYgMHgwMTAwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8zX0FEQ19TQVRfU0VMX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfM19BRENfU0FUX1NFTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzNfQURDX1NBVF9TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8zX0FEQ19TQVRfU0VMX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwNjAwMDAwMCkgPj4gMjUpCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfM19BRENfU0FUX1NFTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNSkgJiAweDA2MDAwMDAwKQotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzNfSVFDQUxfTUVBU19MRU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8zX0lRQ0FMX01FQVNfTEVOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfM19JUUNBTF9NRUFTX0xFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODAwMDAwMAotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzNfSVFDQUxfTUVBU19MRU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDE4MDAwMDAwKSA+PiAyNykKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8zX0lRQ0FMX01FQVNfTEVOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI3KSAmIDB4MTgwMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfM19ERVNJUkVEX1NJWkVfREJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzNfREVTSVJFRF9TSVpFX0RCX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8zX0RFU0lSRURfU0laRV9EQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDYwMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfM19ERVNJUkVEX1NJWkVfREJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NjAwMDAwMDApID4+IDI5KQotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzNfREVTSVJFRF9TSVpFX0RCX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjkpICYgMHg2MDAwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8zX1RYX0lRQ09SUl9FTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfM19UWF9JUUNPUlJfRU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9DT05UUk9MXzNfVFhfSVFDT1JSX0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfQ09OVFJPTF8zX1RYX0lRQ09SUl9FTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg4MDAwMDAwMCkgPj4gMzEpCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX0NPTlRST0xfM19UWF9JUUNPUlJfRU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAzMSkgJiAweDgwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3R4aXFfY29ycl9jb2VmZl8wMV9iMCAqLwotI2RlZmluZSBQSFlfQkJfVFhJUV9DT1JSX0NPRUZGXzAxX0IwX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE2ZWMKLSNkZWZpbmUgUEhZX0JCX1RYSVFfQ09SUl9DT0VGRl8wMV9CMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNmVjCi0jZGVmaW5lIFBIWV9CQl9UWElRX0NPUlJfQ09FRkZfMDFfQjBfSVFDX0NPRUZGX1RBQkxFXzBfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfVFhJUV9DT1JSX0NPRUZGXzAxX0IwX0lRQ19DT0VGRl9UQUJMRV8wXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYSVFfQ09SUl9DT0VGRl8wMV9CMF9JUUNfQ09FRkZfVEFCTEVfMF8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzZmZmCi0jZGVmaW5lIFBIWV9CQl9UWElRX0NPUlJfQ09FRkZfMDFfQjBfSVFDX0NPRUZGX1RBQkxFXzBfMF9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAzZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhJUV9DT1JSX0NPRUZGXzAxX0IwX0lRQ19DT0VGRl9UQUJMRV8wXzBfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwM2ZmZikKLSNkZWZpbmUgUEhZX0JCX1RYSVFfQ09SUl9DT0VGRl8wMV9CMF9JUUNfQ09FRkZfVEFCTEVfMV8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9CQl9UWElRX0NPUlJfQ09FRkZfMDFfQjBfSVFDX0NPRUZGX1RBQkxFXzFfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQkJfVFhJUV9DT1JSX0NPRUZGXzAxX0IwX0lRQ19DT0VGRl9UQUJMRV8xXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGZmZmMwMDAKLSNkZWZpbmUgUEhZX0JCX1RYSVFfQ09SUl9DT0VGRl8wMV9CMF9JUUNfQ09FRkZfVEFCTEVfMV8wX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgwZmZmYzAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9CQl9UWElRX0NPUlJfQ09FRkZfMDFfQjBfSVFDX0NPRUZGX1RBQkxFXzFfMF9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCAxNCkgJiAweDBmZmZjMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3R4aXFfY29ycl9jb2VmZl8yM19iMCAqLwotI2RlZmluZSBQSFlfQkJfVFhJUV9DT1JSX0NPRUZGXzIzX0IwX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE2ZjAKLSNkZWZpbmUgUEhZX0JCX1RYSVFfQ09SUl9DT0VGRl8yM19CMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNmYwCi0jZGVmaW5lIFBIWV9CQl9UWElRX0NPUlJfQ09FRkZfMjNfQjBfSVFDX0NPRUZGX1RBQkxFXzJfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfVFhJUV9DT1JSX0NPRUZGXzIzX0IwX0lRQ19DT0VGRl9UQUJMRV8yXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYSVFfQ09SUl9DT0VGRl8yM19CMF9JUUNfQ09FRkZfVEFCTEVfMl8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzZmZmCi0jZGVmaW5lIFBIWV9CQl9UWElRX0NPUlJfQ09FRkZfMjNfQjBfSVFDX0NPRUZGX1RBQkxFXzJfMF9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAzZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhJUV9DT1JSX0NPRUZGXzIzX0IwX0lRQ19DT0VGRl9UQUJMRV8yXzBfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwM2ZmZikKLSNkZWZpbmUgUEhZX0JCX1RYSVFfQ09SUl9DT0VGRl8yM19CMF9JUUNfQ09FRkZfVEFCTEVfM18wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9CQl9UWElRX0NPUlJfQ09FRkZfMjNfQjBfSVFDX0NPRUZGX1RBQkxFXzNfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQkJfVFhJUV9DT1JSX0NPRUZGXzIzX0IwX0lRQ19DT0VGRl9UQUJMRV8zXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGZmZmMwMDAKLSNkZWZpbmUgUEhZX0JCX1RYSVFfQ09SUl9DT0VGRl8yM19CMF9JUUNfQ09FRkZfVEFCTEVfM18wX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgwZmZmYzAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9CQl9UWElRX0NPUlJfQ09FRkZfMjNfQjBfSVFDX0NPRUZGX1RBQkxFXzNfMF9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCAxNCkgJiAweDBmZmZjMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3R4aXFfY29ycl9jb2VmZl80NV9iMCAqLwotI2RlZmluZSBQSFlfQkJfVFhJUV9DT1JSX0NPRUZGXzQ1X0IwX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE2ZjQKLSNkZWZpbmUgUEhZX0JCX1RYSVFfQ09SUl9DT0VGRl80NV9CMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNmY0Ci0jZGVmaW5lIFBIWV9CQl9UWElRX0NPUlJfQ09FRkZfNDVfQjBfSVFDX0NPRUZGX1RBQkxFXzRfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfVFhJUV9DT1JSX0NPRUZGXzQ1X0IwX0lRQ19DT0VGRl9UQUJMRV80XzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYSVFfQ09SUl9DT0VGRl80NV9CMF9JUUNfQ09FRkZfVEFCTEVfNF8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzZmZmCi0jZGVmaW5lIFBIWV9CQl9UWElRX0NPUlJfQ09FRkZfNDVfQjBfSVFDX0NPRUZGX1RBQkxFXzRfMF9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAzZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhJUV9DT1JSX0NPRUZGXzQ1X0IwX0lRQ19DT0VGRl9UQUJMRV80XzBfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwM2ZmZikKLSNkZWZpbmUgUEhZX0JCX1RYSVFfQ09SUl9DT0VGRl80NV9CMF9JUUNfQ09FRkZfVEFCTEVfNV8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9CQl9UWElRX0NPUlJfQ09FRkZfNDVfQjBfSVFDX0NPRUZGX1RBQkxFXzVfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQkJfVFhJUV9DT1JSX0NPRUZGXzQ1X0IwX0lRQ19DT0VGRl9UQUJMRV81XzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGZmZmMwMDAKLSNkZWZpbmUgUEhZX0JCX1RYSVFfQ09SUl9DT0VGRl80NV9CMF9JUUNfQ09FRkZfVEFCTEVfNV8wX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgwZmZmYzAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9CQl9UWElRX0NPUlJfQ09FRkZfNDVfQjBfSVFDX0NPRUZGX1RBQkxFXzVfMF9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCAxNCkgJiAweDBmZmZjMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3R4aXFfY29ycl9jb2VmZl82N19iMCAqLwotI2RlZmluZSBQSFlfQkJfVFhJUV9DT1JSX0NPRUZGXzY3X0IwX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE2ZjgKLSNkZWZpbmUgUEhZX0JCX1RYSVFfQ09SUl9DT0VGRl82N19CMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNmY4Ci0jZGVmaW5lIFBIWV9CQl9UWElRX0NPUlJfQ09FRkZfNjdfQjBfSVFDX0NPRUZGX1RBQkxFXzZfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfVFhJUV9DT1JSX0NPRUZGXzY3X0IwX0lRQ19DT0VGRl9UQUJMRV82XzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYSVFfQ09SUl9DT0VGRl82N19CMF9JUUNfQ09FRkZfVEFCTEVfNl8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzZmZmCi0jZGVmaW5lIFBIWV9CQl9UWElRX0NPUlJfQ09FRkZfNjdfQjBfSVFDX0NPRUZGX1RBQkxFXzZfMF9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAzZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhJUV9DT1JSX0NPRUZGXzY3X0IwX0lRQ19DT0VGRl9UQUJMRV82XzBfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwM2ZmZikKLSNkZWZpbmUgUEhZX0JCX1RYSVFfQ09SUl9DT0VGRl82N19CMF9JUUNfQ09FRkZfVEFCTEVfN18wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9CQl9UWElRX0NPUlJfQ09FRkZfNjdfQjBfSVFDX0NPRUZGX1RBQkxFXzdfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQkJfVFhJUV9DT1JSX0NPRUZGXzY3X0IwX0lRQ19DT0VGRl9UQUJMRV83XzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGZmZmMwMDAKLSNkZWZpbmUgUEhZX0JCX1RYSVFfQ09SUl9DT0VGRl82N19CMF9JUUNfQ09FRkZfVEFCTEVfN18wX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgwZmZmYzAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9CQl9UWElRX0NPUlJfQ09FRkZfNjdfQjBfSVFDX0NPRUZGX1RBQkxFXzdfMF9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCAxNCkgJiAweDBmZmZjMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3R4aXFfY29ycl9jb2VmZl84OV9iMCAqLwotI2RlZmluZSBQSFlfQkJfVFhJUV9DT1JSX0NPRUZGXzg5X0IwX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE2ZmMKLSNkZWZpbmUgUEhZX0JCX1RYSVFfQ09SUl9DT0VGRl84OV9CMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNmZjCi0jZGVmaW5lIFBIWV9CQl9UWElRX0NPUlJfQ09FRkZfODlfQjBfSVFDX0NPRUZGX1RBQkxFXzhfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfVFhJUV9DT1JSX0NPRUZGXzg5X0IwX0lRQ19DT0VGRl9UQUJMRV84XzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYSVFfQ09SUl9DT0VGRl84OV9CMF9JUUNfQ09FRkZfVEFCTEVfOF8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzZmZmCi0jZGVmaW5lIFBIWV9CQl9UWElRX0NPUlJfQ09FRkZfODlfQjBfSVFDX0NPRUZGX1RBQkxFXzhfMF9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAzZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhJUV9DT1JSX0NPRUZGXzg5X0IwX0lRQ19DT0VGRl9UQUJMRV84XzBfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwM2ZmZikKLSNkZWZpbmUgUEhZX0JCX1RYSVFfQ09SUl9DT0VGRl84OV9CMF9JUUNfQ09FRkZfVEFCTEVfOV8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9CQl9UWElRX0NPUlJfQ09FRkZfODlfQjBfSVFDX0NPRUZGX1RBQkxFXzlfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQkJfVFhJUV9DT1JSX0NPRUZGXzg5X0IwX0lRQ19DT0VGRl9UQUJMRV85XzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGZmZmMwMDAKLSNkZWZpbmUgUEhZX0JCX1RYSVFfQ09SUl9DT0VGRl84OV9CMF9JUUNfQ09FRkZfVEFCTEVfOV8wX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgwZmZmYzAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9CQl9UWElRX0NPUlJfQ09FRkZfODlfQjBfSVFDX0NPRUZGX1RBQkxFXzlfMF9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCAxNCkgJiAweDBmZmZjMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3R4aXFfY29ycl9jb2VmZl9hYl9iMCAqLwotI2RlZmluZSBQSFlfQkJfVFhJUV9DT1JSX0NPRUZGX0FCX0IwX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE3MDAKLSNkZWZpbmUgUEhZX0JCX1RYSVFfQ09SUl9DT0VGRl9BQl9CMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNzAwCi0jZGVmaW5lIFBIWV9CQl9UWElRX0NPUlJfQ09FRkZfQUJfQjBfSVFDX0NPRUZGX1RBQkxFX0FfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfVFhJUV9DT1JSX0NPRUZGX0FCX0IwX0lRQ19DT0VGRl9UQUJMRV9BXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYSVFfQ09SUl9DT0VGRl9BQl9CMF9JUUNfQ09FRkZfVEFCTEVfQV8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzZmZmCi0jZGVmaW5lIFBIWV9CQl9UWElRX0NPUlJfQ09FRkZfQUJfQjBfSVFDX0NPRUZGX1RBQkxFX0FfMF9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAzZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhJUV9DT1JSX0NPRUZGX0FCX0IwX0lRQ19DT0VGRl9UQUJMRV9BXzBfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwM2ZmZikKLSNkZWZpbmUgUEhZX0JCX1RYSVFfQ09SUl9DT0VGRl9BQl9CMF9JUUNfQ09FRkZfVEFCTEVfQl8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9CQl9UWElRX0NPUlJfQ09FRkZfQUJfQjBfSVFDX0NPRUZGX1RBQkxFX0JfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQkJfVFhJUV9DT1JSX0NPRUZGX0FCX0IwX0lRQ19DT0VGRl9UQUJMRV9CXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGZmZmMwMDAKLSNkZWZpbmUgUEhZX0JCX1RYSVFfQ09SUl9DT0VGRl9BQl9CMF9JUUNfQ09FRkZfVEFCTEVfQl8wX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgwZmZmYzAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9CQl9UWElRX0NPUlJfQ09FRkZfQUJfQjBfSVFDX0NPRUZGX1RBQkxFX0JfMF9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCAxNCkgJiAweDBmZmZjMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3R4aXFfY29ycl9jb2VmZl9jZF9iMCAqLwotI2RlZmluZSBQSFlfQkJfVFhJUV9DT1JSX0NPRUZGX0NEX0IwX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE3MDQKLSNkZWZpbmUgUEhZX0JCX1RYSVFfQ09SUl9DT0VGRl9DRF9CMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNzA0Ci0jZGVmaW5lIFBIWV9CQl9UWElRX0NPUlJfQ09FRkZfQ0RfQjBfSVFDX0NPRUZGX1RBQkxFX0NfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfVFhJUV9DT1JSX0NPRUZGX0NEX0IwX0lRQ19DT0VGRl9UQUJMRV9DXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYSVFfQ09SUl9DT0VGRl9DRF9CMF9JUUNfQ09FRkZfVEFCTEVfQ18wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzZmZmCi0jZGVmaW5lIFBIWV9CQl9UWElRX0NPUlJfQ09FRkZfQ0RfQjBfSVFDX0NPRUZGX1RBQkxFX0NfMF9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAzZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhJUV9DT1JSX0NPRUZGX0NEX0IwX0lRQ19DT0VGRl9UQUJMRV9DXzBfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwM2ZmZikKLSNkZWZpbmUgUEhZX0JCX1RYSVFfQ09SUl9DT0VGRl9DRF9CMF9JUUNfQ09FRkZfVEFCTEVfRF8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9CQl9UWElRX0NPUlJfQ09FRkZfQ0RfQjBfSVFDX0NPRUZGX1RBQkxFX0RfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQkJfVFhJUV9DT1JSX0NPRUZGX0NEX0IwX0lRQ19DT0VGRl9UQUJMRV9EXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGZmZmMwMDAKLSNkZWZpbmUgUEhZX0JCX1RYSVFfQ09SUl9DT0VGRl9DRF9CMF9JUUNfQ09FRkZfVEFCTEVfRF8wX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgwZmZmYzAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9CQl9UWElRX0NPUlJfQ09FRkZfQ0RfQjBfSVFDX0NPRUZGX1RBQkxFX0RfMF9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCAxNCkgJiAweDBmZmZjMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3R4aXFfY29ycl9jb2VmZl9lZl9iMCAqLwotI2RlZmluZSBQSFlfQkJfVFhJUV9DT1JSX0NPRUZGX0VGX0IwX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE3MDgKLSNkZWZpbmUgUEhZX0JCX1RYSVFfQ09SUl9DT0VGRl9FRl9CMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNzA4Ci0jZGVmaW5lIFBIWV9CQl9UWElRX0NPUlJfQ09FRkZfRUZfQjBfSVFDX0NPRUZGX1RBQkxFX0VfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfVFhJUV9DT1JSX0NPRUZGX0VGX0IwX0lRQ19DT0VGRl9UQUJMRV9FXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYSVFfQ09SUl9DT0VGRl9FRl9CMF9JUUNfQ09FRkZfVEFCTEVfRV8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzZmZmCi0jZGVmaW5lIFBIWV9CQl9UWElRX0NPUlJfQ09FRkZfRUZfQjBfSVFDX0NPRUZGX1RBQkxFX0VfMF9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAzZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhJUV9DT1JSX0NPRUZGX0VGX0IwX0lRQ19DT0VGRl9UQUJMRV9FXzBfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwM2ZmZikKLSNkZWZpbmUgUEhZX0JCX1RYSVFfQ09SUl9DT0VGRl9FRl9CMF9JUUNfQ09FRkZfVEFCTEVfRl8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFBIWV9CQl9UWElRX0NPUlJfQ09FRkZfRUZfQjBfSVFDX0NPRUZGX1RBQkxFX0ZfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBQSFlfQkJfVFhJUV9DT1JSX0NPRUZGX0VGX0IwX0lRQ19DT0VGRl9UQUJMRV9GXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGZmZmMwMDAKLSNkZWZpbmUgUEhZX0JCX1RYSVFfQ09SUl9DT0VGRl9FRl9CMF9JUUNfQ09FRkZfVEFCTEVfRl8wX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgwZmZmYzAwMCkgPj4gMTQpCi0jZGVmaW5lIFBIWV9CQl9UWElRX0NPUlJfQ09FRkZfRUZfQjBfSVFDX0NPRUZGX1RBQkxFX0ZfMF9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCAxNCkgJiAweDBmZmZjMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX2NhbF9yeGJiX2dhaW5fdGJsXzAgKi8KLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNzBjCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8wX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTcwYwotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfMF9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzBfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV8wX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8wX1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzZgotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfMF9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzBfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAzZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzBfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV8wX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwM2YpCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8wX1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfMV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfMF9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzBfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV8xX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwZmMwCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8wX1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfMV9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwZmMwKSA+PiA2KQotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfMF9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzFfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IDYpICYgMHgwMDAwMGZjMCkKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzBfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV8yX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8wX1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfMl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfMF9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM2YwMDAKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzBfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV8yX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgMHgwMDAzZjAwMCkgPj4gMTIpCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8wX1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfMl9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCAxMikgJiAweDAwMDNmMDAwKQotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfMF9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzBfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV8zX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8wX1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfM19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMGZjMDAwMAotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfMF9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzNfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiAweDAwZmMwMDAwKSA+PiAxOCkKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzBfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV8zX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IDE4KSAmIDB4MDBmYzAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfY2FsX3J4YmJfZ2Fpbl90YmxfNCAqLwotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfNF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE3MTAKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzRfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNzEwCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF80X1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfNF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfNF9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzRfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV80X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNmCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF80X1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfNF9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDNmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfNF9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzRfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAzZikKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzRfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV81X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF80X1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfNV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfNF9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBmYzAKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzRfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV81X0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDBmYzApID4+IDYpCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF80X1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfNV9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgNikgJiAweDAwMDAwZmMwKQotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfNF9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzZfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzRfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV82X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF80X1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfNl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzZjAwMAotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfNF9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzZfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiAweDAwMDNmMDAwKSA+PiAxMikKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzRfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV82X1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IDEyKSAmIDB4MDAwM2YwMDApCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF80X1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfN19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfNF9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzRfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV83X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwZmMwMDAwCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF80X1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfN19HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIDB4MDBmYzAwMDApID4+IDE4KQotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfNF9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzdfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgMTgpICYgMHgwMGZjMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9jYWxfcnhiYl9nYWluX3RibF84ICovCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF84X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTcxNAotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfOF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE3MTQKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzhfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV84X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF84X1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfOF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfOF9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM2YKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzhfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV84X0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwM2YpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF84X1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfOF9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDNmKQotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfOF9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzlfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzhfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV85X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF84X1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfOV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGZjMAotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfOF9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzlfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMGZjMCkgPj4gNikKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzhfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV85X1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCA2KSAmIDB4MDAwMDBmYzApCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF84X1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfMTBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfOF9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzEwX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzhfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV8xMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDNmMDAwCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF84X1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfMTBfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIDB4MDAwM2YwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfOF9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzEwX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgMTIpICYgMHgwMDAzZjAwMCkKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzhfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV8xMV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF84X1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfMTFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfOF9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzExX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBmYzAwMDAKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzhfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV8xMV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgMHgwMGZjMDAwMCkgPj4gMTgpCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF84X1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfMTFfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCAxOCkgJiAweDAwZmMwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX2NhbF9yeGJiX2dhaW5fdGJsXzEyICovCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8xMl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTcxOAotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfMTJfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE3MTgKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzEyX1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfMTJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8xMl9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzEyX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfMTJfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV8xMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM2YKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzEyX1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfMTJfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwM2YpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8xMl9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzEyX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDNmKQotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfMTJfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV8xM19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzEyX1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfMTNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8xMl9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzEzX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGZjMAotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfMTJfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV8xM19HRVQoeCkgICAgICAgICAgICgoKHgpICYgMHgwMDAwMGZjMCkgPj4gNikKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzEyX1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfMTNfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCA2KSAmIDB4MDAwMDBmYzApCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8xMl9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzE0X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfMTJfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV8xNF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzEyX1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfMTRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDNmMDAwCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8xMl9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzE0X0dFVCh4KSAgICAgICAgICAoKCh4KSAmIDB4MDAwM2YwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfMTJfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV8xNF9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgMTIpICYgMHgwMDAzZjAwMCkKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzEyX1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfMTVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8xMl9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzE1X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfMTJfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV8xNV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBmYzAwMDAKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzEyX1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfMTVfR0VUKHgpICAgICAgICAgICgoKHgpICYgMHgwMGZjMDAwMCkgPj4gMTgpCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8xMl9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzE1X1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCAxOCkgJiAweDAwZmMwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX2NhbF9yeGJiX2dhaW5fdGJsXzE2ICovCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8xNl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTcxYwotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfMTZfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE3MWMKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzE2X1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfMTZfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8xNl9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzE2X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfMTZfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV8xNl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM2YKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzE2X1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfMTZfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwM2YpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8xNl9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzE2X1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDNmKQotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfMTZfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV8xN19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzE2X1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfMTdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8xNl9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzE3X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGZjMAotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfMTZfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV8xN19HRVQoeCkgICAgICAgICAgICgoKHgpICYgMHgwMDAwMGZjMCkgPj4gNikKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzE2X1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfMTdfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCA2KSAmIDB4MDAwMDBmYzApCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8xNl9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzE4X01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfMTZfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV8xOF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzE2X1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfMThfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDNmMDAwCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8xNl9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzE4X0dFVCh4KSAgICAgICAgICAoKCh4KSAmIDB4MDAwM2YwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfMTZfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV8xOF9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgMTIpICYgMHgwMDAzZjAwMCkKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzE2X1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfMTlfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8xNl9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzE5X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfMTZfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV8xOV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBmYzAwMDAKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzE2X1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfMTlfR0VUKHgpICAgICAgICAgICgoKHgpICYgMHgwMGZjMDAwMCkgPj4gMTgpCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8xNl9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzE5X1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCAxOCkgJiAweDAwZmMwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX2NhbF9yeGJiX2dhaW5fdGJsXzIwICovCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8yMF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTcyMAotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfMjBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE3MjAKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzIwX1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfMjBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8yMF9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzIwX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfMjBfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV8yMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM2YKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzIwX1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfMjBfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwM2YpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8yMF9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzIwX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDNmKQotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfMjBfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV8yMV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzIwX1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfMjFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8yMF9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzIxX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGZjMAotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfMjBfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV8yMV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgMHgwMDAwMGZjMCkgPj4gNikKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzIwX1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfMjFfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCA2KSAmIDB4MDAwMDBmYzApCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8yMF9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzIyX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfMjBfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV8yMl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzIwX1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfMjJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDNmMDAwCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8yMF9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzIyX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIDB4MDAwM2YwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfMjBfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV8yMl9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgMTIpICYgMHgwMDAzZjAwMCkKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzIwX1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfMjNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8yMF9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzIzX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfMjBfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV8yM19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBmYzAwMDAKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzIwX1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfMjNfR0VUKHgpICAgICAgICAgICgoKHgpICYgMHgwMGZjMDAwMCkgPj4gMTgpCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8yMF9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzIzX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCAxOCkgJiAweDAwZmMwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX2NhbF9yeGJiX2dhaW5fdGJsXzI0ICovCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8yNF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTcyNAotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfMjRfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE3MjQKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzI0X1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfMjRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8yNF9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzI0X0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfQ0FMX1JYQkJfR0FJTl9UQkxfMjRfVFhDQUxfUlhfQkJfR0FJTl9UQUJMRV8yNF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM2YKLSNkZWZpbmUgUEhZX0JCX0NBTF9SWEJCX0dBSU5fVEJMXzI0X1RYQ0FMX1JYX0JCX0dBSU5fVEFCTEVfMjRfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwM2YpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9DQUxfUlhCQl9HQUlOX1RCTF8yNF9UWENBTF9SWF9CQl9HQUlOX1RBQkxFXzI0X1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDNmKQotCi0vKiBtYWNyb3MgZm9yIEJCX3R4aXFjYWxfc3RhdHVzX2IwICovCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX1NUQVRVU19CMF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTcyOAotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9TVEFUVVNfQjBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE3MjgKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfU1RBVFVTX0IwX1RYSVFDQUxfRkFJTEVEXzBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX1NUQVRVU19CMF9UWElRQ0FMX0ZBSUxFRF8wX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9TVEFUVVNfQjBfVFhJUUNBTF9GQUlMRURfMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfU1RBVFVTX0IwX1RYSVFDQUxfRkFJTEVEXzBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDEpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX1NUQVRVU19CMF9DQUxJQlJBVEVEX0dBSU5TXzBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9TVEFUVVNfQjBfQ0FMSUJSQVRFRF9HQUlOU18wX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfU1RBVFVTX0IwX0NBTElCUkFURURfR0FJTlNfMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNlCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX1NUQVRVU19CMF9DQUxJQlJBVEVEX0dBSU5TXzBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDNlKSA+PiAxKQotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9TVEFUVVNfQjBfVE9ORV9HQUlOX1VTRURfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfU1RBVFVTX0IwX1RPTkVfR0FJTl9VU0VEXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX1NUQVRVU19CMF9UT05FX0dBSU5fVVNFRF8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGZjMAotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9TVEFUVVNfQjBfVE9ORV9HQUlOX1VTRURfMF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMGZjMCkgPj4gNikKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfU1RBVFVTX0IwX1JYX0dBSU5fVVNFRF8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX1NUQVRVU19CMF9SWF9HQUlOX1VTRURfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9TVEFUVVNfQjBfUlhfR0FJTl9VU0VEXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM2YwMDAKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfU1RBVFVTX0IwX1JYX0dBSU5fVVNFRF8wX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAzZjAwMCkgPj4gMTIpCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX1NUQVRVU19CMF9MQVNUX01FQVNfQUREUl8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQkJfVFhJUUNBTF9TVEFUVVNfQjBfTEFTVF9NRUFTX0FERFJfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUEhZX0JCX1RYSVFDQUxfU1RBVFVTX0IwX0xBU1RfTUVBU19BRERSXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxZmMwMDAwCi0jZGVmaW5lIFBIWV9CQl9UWElRQ0FMX1NUQVRVU19CMF9MQVNUX01FQVNfQUREUl8wX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDFmYzAwMDApID4+IDE4KQotCi0vKiBtYWNyb3MgZm9yIEJCX3BhcHJkX3RyYWluZXJfY250bDEgKi8KLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNzJjCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEwxX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTcyYwotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9DTlRMMV9DRl9QQVBSRF9UUkFJTl9FTkFCTEVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDFfQ0ZfUEFQUkRfVFJBSU5fRU5BQkxFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEwxX0NGX1BBUFJEX1RSQUlOX0VOQUJMRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9DTlRMMV9DRl9QQVBSRF9UUkFJTl9FTkFCTEVfR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMSkgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDFfQ0ZfUEFQUkRfVFJBSU5fRU5BQkxFX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEwxX0NGX1BBUFJEX0FHQzJfU0VUVExJTkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9DTlRMMV9DRl9QQVBSRF9BR0MyX1NFVFRMSU5HX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDFfQ0ZfUEFQUkRfQUdDMl9TRVRUTElOR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGZlCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEwxX0NGX1BBUFJEX0FHQzJfU0VUVExJTkdfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMGZlKSA+PiAxKQotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9DTlRMMV9DRl9QQVBSRF9BR0MyX1NFVFRMSU5HX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IDEpICYgMHgwMDAwMDBmZSkKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDFfQ0ZfUEFQUkRfSVFDT1JSX0VOQUJMRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEwxX0NGX1BBUFJEX0lRQ09SUl9FTkFCTEVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9DTlRMMV9DRl9QQVBSRF9JUUNPUlJfRU5BQkxFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDFfQ0ZfUEFQUkRfSVFDT1JSX0VOQUJMRV9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAxMDApID4+IDgpCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEwxX0NGX1BBUFJEX0lRQ09SUl9FTkFCTEVfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgOCkgJiAweDAwMDAwMTAwKQotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9DTlRMMV9DRl9QQVBSRF9SWF9CQl9HQUlOX0ZPUkNFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDFfQ0ZfUEFQUkRfUlhfQkJfR0FJTl9GT1JDRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEwxX0NGX1BBUFJEX1JYX0JCX0dBSU5fRk9SQ0VfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9DTlRMMV9DRl9QQVBSRF9SWF9CQl9HQUlOX0ZPUkNFX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDIwMCkgPj4gOSkKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDFfQ0ZfUEFQUkRfUlhfQkJfR0FJTl9GT1JDRV9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCA5KSAmIDB4MDAwMDAyMDApCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEwxX0NGX1BBUFJEX1RYX0dBSU5fRk9SQ0VfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9DTlRMMV9DRl9QQVBSRF9UWF9HQUlOX0ZPUkNFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDFfQ0ZfUEFQUkRfVFhfR0FJTl9GT1JDRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEwxX0NGX1BBUFJEX1RYX0dBSU5fRk9SQ0VfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDA0MDApID4+IDEwKQotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9DTlRMMV9DRl9QQVBSRF9UWF9HQUlOX0ZPUkNFX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgMTApICYgMHgwMDAwMDQwMCkKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDFfQ0ZfUEFQUkRfTEJfRU5BQkxFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEwxX0NGX1BBUFJEX0xCX0VOQUJMRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9DTlRMMV9DRl9QQVBSRF9MQl9FTkFCTEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDFfQ0ZfUEFQUkRfTEJfRU5BQkxFX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDgwMCkgPj4gMTEpCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEwxX0NGX1BBUFJEX0xCX0VOQUJMRV9TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMSkgJiAweDAwMDAwODAwKQotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9DTlRMMV9DRl9QQVBSRF9MQl9TS0lQX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDFfQ0ZfUEFQUkRfTEJfU0tJUF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEwxX0NGX1BBUFJEX0xCX1NLSVBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA3ZjAwMAotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9DTlRMMV9DRl9QQVBSRF9MQl9TS0lQX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDdmMDAwKSA+PiAxMikKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDFfQ0ZfUEFQUkRfTEJfU0tJUF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEyKSAmIDB4MDAwN2YwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfcGFwcmRfdHJhaW5lcl9jbnRsMiAqLwotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9DTlRMMl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE3MzAKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDJfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNzMwCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEwyX0NGX1BBUFJEX0lOSVRfUlhfQkJfR0FJTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9DTlRMMl9DRl9QQVBSRF9JTklUX1JYX0JCX0dBSU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDJfQ0ZfUEFQUkRfSU5JVF9SWF9CQl9HQUlOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEwyX0NGX1BBUFJEX0lOSVRfUlhfQkJfR0FJTl9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiAweGZmZmZmZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9DTlRMMl9DRl9QQVBSRF9JTklUX1JYX0JCX0dBSU5fU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHhmZmZmZmZmZikKLQotLyogbWFjcm9zIGZvciBCQl9wYXByZF90cmFpbmVyX2NudGwzICovCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEwzX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTczNAotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9DTlRMM19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE3MzQKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDNfQ0ZfUEFQUkRfQURDX0RFU0lSRURfU0laRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEwzX0NGX1BBUFJEX0FEQ19ERVNJUkVEX1NJWkVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9DTlRMM19DRl9QQVBSRF9BRENfREVTSVJFRF9TSVpFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM2YKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDNfQ0ZfUEFQUkRfQURDX0RFU0lSRURfU0laRV9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwM2YpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEwzX0NGX1BBUFJEX0FEQ19ERVNJUkVEX1NJWkVfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDNmKQotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9DTlRMM19DRl9QQVBSRF9RVUlDS19EUk9QX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDNfQ0ZfUEFQUkRfUVVJQ0tfRFJPUF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEwzX0NGX1BBUFJEX1FVSUNLX0RST1BfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGZjMAotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9DTlRMM19DRl9QQVBSRF9RVUlDS19EUk9QX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMGZjMCkgPj4gNikKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDNfQ0ZfUEFQUkRfUVVJQ0tfRFJPUF9TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA2KSAmIDB4MDAwMDBmYzApCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEwzX0NGX1BBUFJEX01JTl9MT09QQkFDS19ERUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9DTlRMM19DRl9QQVBSRF9NSU5fTE9PUEJBQ0tfREVMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDNfQ0ZfUEFQUkRfTUlOX0xPT1BCQUNLX0RFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDFmMDAwCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEwzX0NGX1BBUFJEX01JTl9MT09QQkFDS19ERUxfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIDB4MDAwMWYwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9DTlRMM19DRl9QQVBSRF9NSU5fTE9PUEJBQ0tfREVMX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgMTIpICYgMHgwMDAxZjAwMCkKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDNfQ0ZfUEFQUkRfTlVNX0NPUlJfU1RBR0VTX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEwzX0NGX1BBUFJEX05VTV9DT1JSX1NUQUdFU19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9DTlRMM19DRl9QQVBSRF9OVU1fQ09SUl9TVEFHRVNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwZTAwMDAKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDNfQ0ZfUEFQUkRfTlVNX0NPUlJfU1RBR0VTX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgMHgwMDBlMDAwMCkgPj4gMTcpCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEwzX0NGX1BBUFJEX05VTV9DT1JSX1NUQUdFU19TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCAxNykgJiAweDAwMGUwMDAwKQotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9DTlRMM19DRl9QQVBSRF9DT0FSU0VfQ09SUl9MRU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDNfQ0ZfUEFQUkRfQ09BUlNFX0NPUlJfTEVOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEwzX0NGX1BBUFJEX0NPQVJTRV9DT1JSX0xFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMGYwMDAwMAotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9DTlRMM19DRl9QQVBSRF9DT0FSU0VfQ09SUl9MRU5fR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiAweDAwZjAwMDAwKSA+PiAyMCkKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDNfQ0ZfUEFQUkRfQ09BUlNFX0NPUlJfTEVOX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IDIwKSAmIDB4MDBmMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEwzX0NGX1BBUFJEX0ZJTkVfQ09SUl9MRU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9DTlRMM19DRl9QQVBSRF9GSU5FX0NPUlJfTEVOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDNfQ0ZfUEFQUkRfRklORV9DT1JSX0xFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBmMDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEwzX0NGX1BBUFJEX0ZJTkVfQ09SUl9MRU5fR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MGYwMDAwMDApID4+IDI0KQotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9DTlRMM19DRl9QQVBSRF9GSU5FX0NPUlJfTEVOX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgMjQpICYgMHgwZjAwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDNfQ0ZfUEFQUkRfQkJUWE1JWF9ESVNBQkxFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEwzX0NGX1BBUFJEX0JCVFhNSVhfRElTQUJMRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOAotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9DTlRMM19DRl9QQVBSRF9CQlRYTUlYX0RJU0FCTEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDNfQ0ZfUEFQUkRfQkJUWE1JWF9ESVNBQkxFX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgMHgxMDAwMDAwMCkgPj4gMjgpCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEwzX0NGX1BBUFJEX0JCVFhNSVhfRElTQUJMRV9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCAyOCkgJiAweDEwMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3BhcHJkX3RyYWluZXJfY250bDQgKi8KLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNzM4Ci0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEw0X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTczOAotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9DTlRMNF9DRl9QQVBSRF9NSU5fQ09SUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDRfQ0ZfUEFQUkRfTUlOX0NPUlJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEw0X0NGX1BBUFJEX01JTl9DT1JSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGZmZgotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9DTlRMNF9DRl9QQVBSRF9NSU5fQ09SUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMGZmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDRfQ0ZfUEFQUkRfTUlOX0NPUlJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDBmZmYpCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEw0X0NGX1BBUFJEX1NBRkVUWV9ERUxUQV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9DTlRMNF9DRl9QQVBSRF9TQUZFVFlfREVMVEFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDRfQ0ZfUEFQUkRfU0FGRVRZX0RFTFRBX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBmMDAwCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEw0X0NGX1BBUFJEX1NBRkVUWV9ERUxUQV9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMGYwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9DTlRMNF9DRl9QQVBSRF9TQUZFVFlfREVMVEFfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgMTIpICYgMHgwMDAwZjAwMCkKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDRfQ0ZfUEFQUkRfTlVNX1RSQUlOX1NBTVBMRVNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEw0X0NGX1BBUFJEX05VTV9UUkFJTl9TQU1QTEVTX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9DTlRMNF9DRl9QQVBSRF9OVU1fVFJBSU5fU0FNUExFU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDNmZjAwMDAKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfQ05UTDRfQ0ZfUEFQUkRfTlVNX1RSQUlOX1NBTVBMRVNfR0VUKHgpICAgICAgICAgICgoKHgpICYgMHgwM2ZmMDAwMCkgPj4gMTYpCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX0NOVEw0X0NGX1BBUFJEX05VTV9UUkFJTl9TQU1QTEVTX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCAxNikgJiAweDAzZmYwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3BhcHJkX3RyYWluZXJfc3RhdDEgKi8KLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfU1RBVDFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhNzNjCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX1NUQVQxX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTczYwotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9TVEFUMV9QQVBSRF9UUkFJTl9ET05FX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfU1RBVDFfUEFQUkRfVFJBSU5fRE9ORV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX1NUQVQxX1BBUFJEX1RSQUlOX0RPTkVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9TVEFUMV9QQVBSRF9UUkFJTl9ET05FX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMSkgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfU1RBVDFfUEFQUkRfVFJBSU5fRE9ORV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX1NUQVQxX1BBUFJEX1RSQUlOX0lOQ09NUExFVEVfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9TVEFUMV9QQVBSRF9UUkFJTl9JTkNPTVBMRVRFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfU1RBVDFfUEFQUkRfVFJBSU5fSU5DT01QTEVURV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX1NUQVQxX1BBUFJEX1RSQUlOX0lOQ09NUExFVEVfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAyKSA+PiAxKQotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9TVEFUMV9QQVBSRF9DT1JSX0VSUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfU1RBVDFfUEFQUkRfQ09SUl9FUlJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX1NUQVQxX1BBUFJEX0NPUlJfRVJSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9TVEFUMV9QQVBSRF9DT1JSX0VSUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwNCkgPj4gMikKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfU1RBVDFfUEFQUkRfVFJBSU5fQUNUSVZFX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX1NUQVQxX1BBUFJEX1RSQUlOX0FDVElWRV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9TVEFUMV9QQVBSRF9UUkFJTl9BQ1RJVkVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfU1RBVDFfUEFQUkRfVFJBSU5fQUNUSVZFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDgpID4+IDMpCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX1NUQVQxX1BBUFJEX1JYX0dBSU5fSURYX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9TVEFUMV9QQVBSRF9SWF9HQUlOX0lEWF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfU1RBVDFfUEFQUkRfUlhfR0FJTl9JRFhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMWYwCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX1NUQVQxX1BBUFJEX1JYX0dBSU5fSURYX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMWYwKSA+PiA0KQotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9TVEFUMV9QQVBSRF9BR0MyX1BXUl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfU1RBVDFfUEFQUkRfQUdDMl9QV1JfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX1NUQVQxX1BBUFJEX0FHQzJfUFdSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxZmUwMAotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9TVEFUMV9QQVBSRF9BR0MyX1BXUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAxZmUwMCkgPj4gOSkKLQotLyogbWFjcm9zIGZvciBCQl9wYXByZF90cmFpbmVyX3N0YXQyICovCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX1NUQVQyX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTc0MAotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9TVEFUMl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE3NDAKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfU1RBVDJfUEFQUkRfRklORV9WQUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX1NUQVQyX1BBUFJEX0ZJTkVfVkFMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9TVEFUMl9QQVBSRF9GSU5FX1ZBTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGZmZmYKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfU1RBVDJfUEFQUkRfRklORV9WQUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMGZmZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX1NUQVQyX1BBUFJEX0NPQVJTRV9JRFhfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9TVEFUMl9QQVBSRF9DT0FSU0VfSURYX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfU1RBVDJfUEFQUkRfQ09BUlNFX0lEWF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMWYwMDAwCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX1NUQVQyX1BBUFJEX0NPQVJTRV9JRFhfR0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAxZjAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9TVEFUMl9QQVBSRF9GSU5FX0lEWF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfU1RBVDJfUEFQUkRfRklORV9JRFhfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX1NUQVQyX1BBUFJEX0ZJTkVfSURYX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDYwMDAwMAotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9TVEFUMl9QQVBSRF9GSU5FX0lEWF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwNjAwMDAwKSA+PiAyMSkKLQotLyogbWFjcm9zIGZvciBCQl9wYXByZF90cmFpbmVyX3N0YXQzICovCi0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX1NUQVQzX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTc0NAotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9TVEFUM19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE3NDQKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfU1RBVDNfUEFQUkRfVFJBSU5fU0FNUExFU19DTlRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFBIWV9CQl9QQVBSRF9UUkFJTkVSX1NUQVQzX1BBUFJEX1RSQUlOX1NBTVBMRVNfQ05UX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfUEFQUkRfVFJBSU5FUl9TVEFUM19QQVBSRF9UUkFJTl9TQU1QTEVTX0NOVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwZmZmZmYKLSNkZWZpbmUgUEhZX0JCX1BBUFJEX1RSQUlORVJfU1RBVDNfUEFQUkRfVFJBSU5fU0FNUExFU19DTlRfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwZmZmZmYpID4+IDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfZmNhbF8xICovCi0jZGVmaW5lIFBIWV9CQl9GQ0FMXzFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTdkOAotI2RlZmluZSBQSFlfQkJfRkNBTF8xX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE3ZDgKLSNkZWZpbmUgUEhZX0JCX0ZDQUxfMV9GTENfUEJfRlNURVBfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFBIWV9CQl9GQ0FMXzFfRkxDX1BCX0ZTVEVQX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfRkNBTF8xX0ZMQ19QQl9GU1RFUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzZmYKLSNkZWZpbmUgUEhZX0JCX0ZDQUxfMV9GTENfUEJfRlNURVBfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAzZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9GQ0FMXzFfRkxDX1BCX0ZTVEVQX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwM2ZmKQotI2RlZmluZSBQSFlfQkJfRkNBTF8xX0ZMQ19TQl9GU1RFUF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgUEhZX0JCX0ZDQUxfMV9GTENfU0JfRlNURVBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFBIWV9CQl9GQ0FMXzFfRkxDX1NCX0ZTVEVQX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBmZmMwMAotI2RlZmluZSBQSFlfQkJfRkNBTF8xX0ZMQ19TQl9GU1RFUF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMGZmYzAwKSA+PiAxMCkKLSNkZWZpbmUgUEhZX0JCX0ZDQUxfMV9GTENfU0JfRlNURVBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDEwKSAmIDB4MDAwZmZjMDApCi0jZGVmaW5lIFBIWV9CQl9GQ0FMXzFfRkxDX1BCX0FUVEVOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQkJfRkNBTF8xX0ZMQ19QQl9BVFRFTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgUEhZX0JCX0ZDQUxfMV9GTENfUEJfQVRURU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxZjAwMDAwCi0jZGVmaW5lIFBIWV9CQl9GQ0FMXzFfRkxDX1BCX0FUVEVOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDFmMDAwMDApID4+IDIwKQotI2RlZmluZSBQSFlfQkJfRkNBTF8xX0ZMQ19QQl9BVFRFTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMjApICYgMHgwMWYwMDAwMCkKLSNkZWZpbmUgUEhZX0JCX0ZDQUxfMV9GTENfU0JfQVRURU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9CQl9GQ0FMXzFfRkxDX1NCX0FUVEVOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQkJfRkNBTF8xX0ZMQ19TQl9BVFRFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M2UwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX0ZDQUxfMV9GTENfU0JfQVRURU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzZTAwMDAwMCkgPj4gMjUpCi0jZGVmaW5lIFBIWV9CQl9GQ0FMXzFfRkxDX1NCX0FUVEVOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNSkgJiAweDNlMDAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX2ZjYWxfMl9iMCAqLwotI2RlZmluZSBQSFlfQkJfRkNBTF8yX0IwX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE3ZGMKLSNkZWZpbmUgUEhZX0JCX0ZDQUxfMl9CMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhN2RjCi0jZGVmaW5lIFBIWV9CQl9GQ0FMXzJfQjBfRkxDX1BXUl9USFJFU0hfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQSFlfQkJfRkNBTF8yX0IwX0ZMQ19QV1JfVEhSRVNIX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0ZDQUxfMl9CMF9GTENfUFdSX1RIUkVTSF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3Ci0jZGVmaW5lIFBIWV9CQl9GQ0FMXzJfQjBfRkxDX1BXUl9USFJFU0hfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDA3KSA+PiAwKQotI2RlZmluZSBQSFlfQkJfRkNBTF8yX0IwX0ZMQ19QV1JfVEhSRVNIX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwNykKLSNkZWZpbmUgUEhZX0JCX0ZDQUxfMl9CMF9GTENfU1dfQ0FQX1ZBTF8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9CQl9GQ0FMXzJfQjBfRkxDX1NXX0NBUF9WQUxfMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQkJfRkNBTF8yX0IwX0ZMQ19TV19DQVBfVkFMXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZjgKLSNkZWZpbmUgUEhZX0JCX0ZDQUxfMl9CMF9GTENfU1dfQ0FQX1ZBTF8wX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwZjgpID4+IDMpCi0jZGVmaW5lIFBIWV9CQl9GQ0FMXzJfQjBfRkxDX1NXX0NBUF9WQUxfMF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMykgJiAweDAwMDAwMGY4KQotI2RlZmluZSBQSFlfQkJfRkNBTF8yX0IwX0ZMQ19CQk1JU0NHQUlOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUEhZX0JCX0ZDQUxfMl9CMF9GTENfQkJNSVNDR0FJTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9GQ0FMXzJfQjBfRkxDX0JCTUlTQ0dBSU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAotI2RlZmluZSBQSFlfQkJfRkNBTF8yX0IwX0ZMQ19CQk1JU0NHQUlOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDMwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0JCX0ZDQUxfMl9CMF9GTENfQkJNSVNDR0FJTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDAzMDApCi0jZGVmaW5lIFBIWV9CQl9GQ0FMXzJfQjBfRkxDX0JCMURCR0FJTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQkJfRkNBTF8yX0IwX0ZMQ19CQjFEQkdBSU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgUEhZX0JCX0ZDQUxfMl9CMF9GTENfQkIxREJHQUlOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxYzAwCi0jZGVmaW5lIFBIWV9CQl9GQ0FMXzJfQjBfRkxDX0JCMURCR0FJTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDFjMDApID4+IDEwKQotI2RlZmluZSBQSFlfQkJfRkNBTF8yX0IwX0ZMQ19CQjFEQkdBSU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTApICYgMHgwMDAwMWMwMCkKLSNkZWZpbmUgUEhZX0JCX0ZDQUxfMl9CMF9GTENfQkI2REJHQUlOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9CQl9GQ0FMXzJfQjBfRkxDX0JCNkRCR0FJTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBQSFlfQkJfRkNBTF8yX0IwX0ZMQ19CQjZEQkdBSU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKLSNkZWZpbmUgUEhZX0JCX0ZDQUxfMl9CMF9GTENfQkI2REJHQUlOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwNjAwMCkgPj4gMTMpCi0jZGVmaW5lIFBIWV9CQl9GQ0FMXzJfQjBfRkxDX0JCNkRCR0FJTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMykgJiAweDAwMDA2MDAwKQotI2RlZmluZSBQSFlfQkJfRkNBTF8yX0IwX0ZMQ19TV19DQVBfU0VUX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0JCX0ZDQUxfMl9CMF9GTENfU1dfQ0FQX1NFVF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBIWV9CQl9GQ0FMXzJfQjBfRkxDX1NXX0NBUF9TRVRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAotI2RlZmluZSBQSFlfQkJfRkNBTF8yX0IwX0ZMQ19TV19DQVBfU0VUX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDA4MDAwKSA+PiAxNSkKLSNkZWZpbmUgUEhZX0JCX0ZDQUxfMl9CMF9GTENfU1dfQ0FQX1NFVF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE1KSAmIDB4MDAwMDgwMDApCi0jZGVmaW5lIFBIWV9CQl9GQ0FMXzJfQjBfRkxDX01FQVNfV0lOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBQSFlfQkJfRkNBTF8yX0IwX0ZMQ19NRUFTX1dJTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0JCX0ZDQUxfMl9CMF9GTENfTUVBU19XSU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDcwMDAwCi0jZGVmaW5lIFBIWV9CQl9GQ0FMXzJfQjBfRkxDX01FQVNfV0lOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwNzAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQkJfRkNBTF8yX0IwX0ZMQ19NRUFTX1dJTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMDA3MDAwMCkKLSNkZWZpbmUgUEhZX0JCX0ZDQUxfMl9CMF9GTENfQ0FQX1ZBTF9TVEFUVVNfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9CQl9GQ0FMXzJfQjBfRkxDX0NBUF9WQUxfU1RBVFVTXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQkJfRkNBTF8yX0IwX0ZMQ19DQVBfVkFMX1NUQVRVU18wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDFmMDAwMDAKLSNkZWZpbmUgUEhZX0JCX0ZDQUxfMl9CMF9GTENfQ0FQX1ZBTF9TVEFUVVNfMF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMWYwMDAwMCkgPj4gMjApCi0KLS8qIG1hY3JvcyBmb3IgQkJfcmFkYXJfYndfZmlsdGVyICovCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9CV19GSUxURVJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTdlMAotI2RlZmluZSBQSFlfQkJfUkFEQVJfQldfRklMVEVSX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE3ZTAKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0JXX0ZJTFRFUl9SQURBUl9BVkdfQldfQ0hFQ0tfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9CV19GSUxURVJfUkFEQVJfQVZHX0JXX0NIRUNLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfUkFEQVJfQldfRklMVEVSX1JBREFSX0FWR19CV19DSEVDS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0JXX0ZJTFRFUl9SQURBUl9BVkdfQldfQ0hFQ0tfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMDEpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9CV19GSUxURVJfUkFEQVJfQVZHX0JXX0NIRUNLX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDAxKQotI2RlZmluZSBQSFlfQkJfUkFEQVJfQldfRklMVEVSX1JBREFSX0RDX1NSQ19TRUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0JXX0ZJTFRFUl9SQURBUl9EQ19TUkNfU0VMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9CV19GSUxURVJfUkFEQVJfRENfU1JDX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBQSFlfQkJfUkFEQVJfQldfRklMVEVSX1JBREFSX0RDX1NSQ19TRUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMikgPj4gMSkKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0JXX0ZJTFRFUl9SQURBUl9EQ19TUkNfU0VMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxKSAmIDB4MDAwMDAwMDIpCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9CV19GSUxURVJfUkFEQVJfRklSUFdSX1NFTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQkJfUkFEQVJfQldfRklMVEVSX1JBREFSX0ZJUlBXUl9TRUxfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0JXX0ZJTFRFUl9SQURBUl9GSVJQV1JfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBjCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9CV19GSUxURVJfUkFEQVJfRklSUFdSX1NFTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDBjKSA+PiAyKQotI2RlZmluZSBQSFlfQkJfUkFEQVJfQldfRklMVEVSX1JBREFSX0ZJUlBXUl9TRUxfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIpICYgMHgwMDAwMDAwYykKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0JXX0ZJTFRFUl9SQURBUl9QVUxTRV9XSURUSF9TRUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9CQl9SQURBUl9CV19GSUxURVJfUkFEQVJfUFVMU0VfV0lEVEhfU0VMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQkJfUkFEQVJfQldfRklMVEVSX1JBREFSX1BVTFNFX1dJRFRIX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0JXX0ZJTFRFUl9SQURBUl9QVUxTRV9XSURUSF9TRUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMzApID4+IDQpCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9CV19GSUxURVJfUkFEQVJfUFVMU0VfV0lEVEhfU0VMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNCkgJiAweDAwMDAwMDMwKQotI2RlZmluZSBQSFlfQkJfUkFEQVJfQldfRklMVEVSX1JBREFSX0RDX0ZJUlBXUl9USFJFU0hfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0JXX0ZJTFRFUl9SQURBUl9EQ19GSVJQV1JfVEhSRVNIX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9SQURBUl9CV19GSUxURVJfUkFEQVJfRENfRklSUFdSX1RIUkVTSF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwN2YwMAotI2RlZmluZSBQSFlfQkJfUkFEQVJfQldfRklMVEVSX1JBREFSX0RDX0ZJUlBXUl9USFJFU0hfR0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwN2YwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0JXX0ZJTFRFUl9SQURBUl9EQ19GSVJQV1JfVEhSRVNIX1NFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMDdmMDApCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9CV19GSUxURVJfUkFEQVJfRENfUFdSX0JJQVNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQkJfUkFEQVJfQldfRklMVEVSX1JBREFSX0RDX1BXUl9CSUFTX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0JXX0ZJTFRFUl9SQURBUl9EQ19QV1JfQklBU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMWY4MDAwCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9CV19GSUxURVJfUkFEQVJfRENfUFdSX0JJQVNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAxZjgwMDApID4+IDE1KQotI2RlZmluZSBQSFlfQkJfUkFEQVJfQldfRklMVEVSX1JBREFSX0RDX1BXUl9CSUFTX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTUpICYgMHgwMDFmODAwMCkKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0JXX0ZJTFRFUl9SQURBUl9CSU5fTUFYX0JXX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9CQl9SQURBUl9CV19GSUxURVJfUkFEQVJfQklOX01BWF9CV19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQkJfUkFEQVJfQldfRklMVEVSX1JBREFSX0JJTl9NQVhfQldfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDdlMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1JBREFSX0JXX0ZJTFRFUl9SQURBUl9CSU5fTUFYX0JXX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwN2UwMDAwMCkgPj4gMjEpCi0jZGVmaW5lIFBIWV9CQl9SQURBUl9CV19GSUxURVJfUkFEQVJfQklOX01BWF9CV19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMSkgJiAweDA3ZTAwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX2RmdF90b25lX2N0cmxfYjAgKi8KLSNkZWZpbmUgUEhZX0JCX0RGVF9UT05FX0NUUkxfQjBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhN2U0Ci0jZGVmaW5lIFBIWV9CQl9ERlRfVE9ORV9DVFJMX0IwX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTdlNAotI2RlZmluZSBQSFlfQkJfREZUX1RPTkVfQ1RSTF9CMF9ERlRfVE9ORV9FTl8wX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX0RGVF9UT05FX0NUUkxfQjBfREZUX1RPTkVfRU5fMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9ERlRfVE9ORV9DVFJMX0IwX0RGVF9UT05FX0VOXzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBQSFlfQkJfREZUX1RPTkVfQ1RSTF9CMF9ERlRfVE9ORV9FTl8wX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAwMSkgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0RGVF9UT05FX0NUUkxfQjBfREZUX1RPTkVfRU5fMF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFBIWV9CQl9ERlRfVE9ORV9DVFJMX0IwX0RGVF9UT05FX0FNUF9TRUxfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBQSFlfQkJfREZUX1RPTkVfQ1RSTF9CMF9ERlRfVE9ORV9BTVBfU0VMXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUEhZX0JCX0RGVF9UT05FX0NUUkxfQjBfREZUX1RPTkVfQU1QX1NFTF8wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBjCi0jZGVmaW5lIFBIWV9CQl9ERlRfVE9ORV9DVFJMX0IwX0RGVF9UT05FX0FNUF9TRUxfMF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDBjKSA+PiAyKQotI2RlZmluZSBQSFlfQkJfREZUX1RPTkVfQ1RSTF9CMF9ERlRfVE9ORV9BTVBfU0VMXzBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIpICYgMHgwMDAwMDAwYykKLSNkZWZpbmUgUEhZX0JCX0RGVF9UT05FX0NUUkxfQjBfREZUX1RPTkVfRlJFUV9BTkdfMF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBIWV9CQl9ERlRfVE9ORV9DVFJMX0IwX0RGVF9UT05FX0ZSRVFfQU5HXzBfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQSFlfQkJfREZUX1RPTkVfQ1RSTF9CMF9ERlRfVE9ORV9GUkVRX0FOR18wX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFmZjAKLSNkZWZpbmUgUEhZX0JCX0RGVF9UT05FX0NUUkxfQjBfREZUX1RPTkVfRlJFUV9BTkdfMF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDFmZjApID4+IDQpCi0jZGVmaW5lIFBIWV9CQl9ERlRfVE9ORV9DVFJMX0IwX0RGVF9UT05FX0ZSRVFfQU5HXzBfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgNCkgJiAweDAwMDAxZmYwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3RoZXJtX2FkY18xICovCi0jZGVmaW5lIFBIWV9CQl9USEVSTV9BRENfMV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTdlOAotI2RlZmluZSBQSFlfQkJfVEhFUk1fQURDXzFfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE3ZTgKLSNkZWZpbmUgUEhZX0JCX1RIRVJNX0FEQ18xX0lOSVRfVEhFUk1fU0VUVElOR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9CQl9USEVSTV9BRENfMV9JTklUX1RIRVJNX1NFVFRJTkdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfVEhFUk1fQURDXzFfSU5JVF9USEVSTV9TRVRUSU5HX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgUEhZX0JCX1RIRVJNX0FEQ18xX0lOSVRfVEhFUk1fU0VUVElOR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9USEVSTV9BRENfMV9JTklUX1RIRVJNX1NFVFRJTkdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMGZmKQotI2RlZmluZSBQSFlfQkJfVEhFUk1fQURDXzFfSU5JVF9WT0xUX1NFVFRJTkdfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUEhZX0JCX1RIRVJNX0FEQ18xX0lOSVRfVk9MVF9TRVRUSU5HX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFBIWV9CQl9USEVSTV9BRENfMV9JTklUX1ZPTFRfU0VUVElOR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBQSFlfQkJfVEhFUk1fQURDXzFfSU5JVF9WT0xUX1NFVFRJTkdfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwZmYwMCkgPj4gOCkKLSNkZWZpbmUgUEhZX0JCX1RIRVJNX0FEQ18xX0lOSVRfVk9MVF9TRVRUSU5HX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA4KSAmIDB4MDAwMGZmMDApCi0jZGVmaW5lIFBIWV9CQl9USEVSTV9BRENfMV9JTklUX0FUQl9TRVRUSU5HX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBQSFlfQkJfVEhFUk1fQURDXzFfSU5JVF9BVEJfU0VUVElOR19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUEhZX0JCX1RIRVJNX0FEQ18xX0lOSVRfQVRCX1NFVFRJTkdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwZmYwMDAwCi0jZGVmaW5lIFBIWV9CQl9USEVSTV9BRENfMV9JTklUX0FUQl9TRVRUSU5HX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDBmZjAwMDApID4+IDE2KQotI2RlZmluZSBQSFlfQkJfVEhFUk1fQURDXzFfSU5JVF9BVEJfU0VUVElOR19TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTYpICYgMHgwMGZmMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1RIRVJNX0FEQ18xX1NBTVBMRVNfQ05UX0NPRElOR19NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9CQl9USEVSTV9BRENfMV9TQU1QTEVTX0NOVF9DT0RJTkdfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQkJfVEhFUk1fQURDXzFfU0FNUExFU19DTlRfQ09ESU5HX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1RIRVJNX0FEQ18xX1NBTVBMRVNfQ05UX0NPRElOR19HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMzAwMDAwMCkgPj4gMjQpCi0jZGVmaW5lIFBIWV9CQl9USEVSTV9BRENfMV9TQU1QTEVTX0NOVF9DT0RJTkdfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNCkgJiAweDAzMDAwMDAwKQotI2RlZmluZSBQSFlfQkJfVEhFUk1fQURDXzFfVVNFX0lOSVRfVEhFUk1fVk9MVF9BVEJfQUZURVJfV0FSTV9SRVNFVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0JCX1RIRVJNX0FEQ18xX1VTRV9JTklUX1RIRVJNX1ZPTFRfQVRCX0FGVEVSX1dBUk1fUkVTRVRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9CQl9USEVSTV9BRENfMV9VU0VfSU5JVF9USEVSTV9WT0xUX0FUQl9BRlRFUl9XQVJNX1JFU0VUX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAotI2RlZmluZSBQSFlfQkJfVEhFUk1fQURDXzFfVVNFX0lOSVRfVEhFUk1fVk9MVF9BVEJfQUZURVJfV0FSTV9SRVNFVF9HRVQoeCkgICAgKCgoeCkgJiAweDA0MDAwMDAwKSA+PiAyNikKLSNkZWZpbmUgUEhZX0JCX1RIRVJNX0FEQ18xX1VTRV9JTklUX1RIRVJNX1ZPTFRfQVRCX0FGVEVSX1dBUk1fUkVTRVRfU0VUKHgpICAgICgoKHgpIDw8IDI2KSAmIDB4MDQwMDAwMDApCi0jZGVmaW5lIFBIWV9CQl9USEVSTV9BRENfMV9GT1JDRV9USEVSTV9WT0xUX0FUQl9UT19JTklUX1NFVFRJTkdTX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBQSFlfQkJfVEhFUk1fQURDXzFfRk9SQ0VfVEhFUk1fVk9MVF9BVEJfVE9fSU5JVF9TRVRUSU5HU19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKLSNkZWZpbmUgUEhZX0JCX1RIRVJNX0FEQ18xX0ZPUkNFX1RIRVJNX1ZPTFRfQVRCX1RPX0lOSVRfU0VUVElOR1NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCi0jZGVmaW5lIFBIWV9CQl9USEVSTV9BRENfMV9GT1JDRV9USEVSTV9WT0xUX0FUQl9UT19JTklUX1NFVFRJTkdTX0dFVCh4KSAgICAgICAoKCh4KSAmIDB4MDgwMDAwMDApID4+IDI3KQotI2RlZmluZSBQSFlfQkJfVEhFUk1fQURDXzFfRk9SQ0VfVEhFUk1fVk9MVF9BVEJfVE9fSU5JVF9TRVRUSU5HU19TRVQoeCkgICAgICAgKCgoeCkgPDwgMjcpICYgMHgwODAwMDAwMCkKLQotLyogbWFjcm9zIGZvciBCQl90aGVybV9hZGNfMiAqLwotI2RlZmluZSBQSFlfQkJfVEhFUk1fQURDXzJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE3ZWMKLSNkZWZpbmUgUEhZX0JCX1RIRVJNX0FEQ18yX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhN2VjCi0jZGVmaW5lIFBIWV9CQl9USEVSTV9BRENfMl9NRUFTVVJFX1RIRVJNX0ZSRVFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBQSFlfQkJfVEhFUk1fQURDXzJfTUVBU1VSRV9USEVSTV9GUkVRX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RIRVJNX0FEQ18yX01FQVNVUkVfVEhFUk1fRlJFUV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwZmZmCi0jZGVmaW5lIFBIWV9CQl9USEVSTV9BRENfMl9NRUFTVVJFX1RIRVJNX0ZSRVFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwZmZmKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVEhFUk1fQURDXzJfTUVBU1VSRV9USEVSTV9GUkVRX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMGZmZikKLSNkZWZpbmUgUEhZX0JCX1RIRVJNX0FEQ18yX01FQVNVUkVfVk9MVF9GUkVRX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9CQl9USEVSTV9BRENfMl9NRUFTVVJFX1ZPTFRfRlJFUV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBQSFlfQkJfVEhFUk1fQURDXzJfTUVBU1VSRV9WT0xUX0ZSRVFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzZmYwMDAKLSNkZWZpbmUgUEhZX0JCX1RIRVJNX0FEQ18yX01FQVNVUkVfVk9MVF9GUkVRX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDNmZjAwMCkgPj4gMTIpCi0jZGVmaW5lIFBIWV9CQl9USEVSTV9BRENfMl9NRUFTVVJFX1ZPTFRfRlJFUV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMikgJiAweDAwM2ZmMDAwKQotI2RlZmluZSBQSFlfQkJfVEhFUk1fQURDXzJfTUVBU1VSRV9BVEJfRlJFUV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUEhZX0JCX1RIRVJNX0FEQ18yX01FQVNVUkVfQVRCX0ZSRVFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFBIWV9CQl9USEVSTV9BRENfMl9NRUFTVVJFX0FUQl9GUkVRX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZmMwMDAwMAotI2RlZmluZSBQSFlfQkJfVEhFUk1fQURDXzJfTUVBU1VSRV9BVEJfRlJFUV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweGZmYzAwMDAwKSA+PiAyMikKLSNkZWZpbmUgUEhZX0JCX1RIRVJNX0FEQ18yX01FQVNVUkVfQVRCX0ZSRVFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDIyKSAmIDB4ZmZjMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfdGhlcm1fYWRjXzMgKi8KLSNkZWZpbmUgUEhZX0JCX1RIRVJNX0FEQ18zX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhN2YwCi0jZGVmaW5lIFBIWV9CQl9USEVSTV9BRENfM19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTdmMAotI2RlZmluZSBQSFlfQkJfVEhFUk1fQURDXzNfVEhFUk1fQURDX09GRlNFVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0JCX1RIRVJNX0FEQ18zX1RIRVJNX0FEQ19PRkZTRVRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9USEVSTV9BRENfM19USEVSTV9BRENfT0ZGU0VUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBQSFlfQkJfVEhFUk1fQURDXzNfVEhFUk1fQURDX09GRlNFVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDBmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX1RIRVJNX0FEQ18zX1RIRVJNX0FEQ19PRkZTRVRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwZmYpCi0jZGVmaW5lIFBIWV9CQl9USEVSTV9BRENfM19USEVSTV9BRENfU0NBTEVEX0dBSU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQkJfVEhFUk1fQURDXzNfVEhFUk1fQURDX1NDQUxFRF9HQUlOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0JCX1RIRVJNX0FEQ18zX1RIRVJNX0FEQ19TQ0FMRURfR0FJTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDFmZjAwCi0jZGVmaW5lIFBIWV9CQl9USEVSTV9BRENfM19USEVSTV9BRENfU0NBTEVEX0dBSU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDFmZjAwKSA+PiA4KQotI2RlZmluZSBQSFlfQkJfVEhFUk1fQURDXzNfVEhFUk1fQURDX1NDQUxFRF9HQUlOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDgpICYgMHgwMDAxZmYwMCkKLSNkZWZpbmUgUEhZX0JCX1RIRVJNX0FEQ18zX0FEQ19JTlRFUlZBTF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIFBIWV9CQl9USEVSTV9BRENfM19BRENfSU5URVJWQUxfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQkJfVEhFUk1fQURDXzNfQURDX0lOVEVSVkFMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M2ZmZTAwMDAKLSNkZWZpbmUgUEhZX0JCX1RIRVJNX0FEQ18zX0FEQ19JTlRFUlZBTF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzZmZlMDAwMCkgPj4gMTcpCi0jZGVmaW5lIFBIWV9CQl9USEVSTV9BRENfM19BRENfSU5URVJWQUxfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNykgJiAweDNmZmUwMDAwKQotCi0vKiBtYWNyb3MgZm9yIEJCX3RoZXJtX2FkY180ICovCi0jZGVmaW5lIFBIWV9CQl9USEVSTV9BRENfNF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTdmNAotI2RlZmluZSBQSFlfQkJfVEhFUk1fQURDXzRfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE3ZjQKLSNkZWZpbmUgUEhZX0JCX1RIRVJNX0FEQ180X0xBVEVTVF9USEVSTV9WQUxVRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9CQl9USEVSTV9BRENfNF9MQVRFU1RfVEhFUk1fVkFMVUVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfVEhFUk1fQURDXzRfTEFURVNUX1RIRVJNX1ZBTFVFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgUEhZX0JCX1RIRVJNX0FEQ180X0xBVEVTVF9USEVSTV9WQUxVRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwZmYpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9USEVSTV9BRENfNF9MQVRFU1RfVk9MVF9WQUxVRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQSFlfQkJfVEhFUk1fQURDXzRfTEFURVNUX1ZPTFRfVkFMVUVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUEhZX0JCX1RIRVJNX0FEQ180X0xBVEVTVF9WT0xUX1ZBTFVFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBmZjAwCi0jZGVmaW5lIFBIWV9CQl9USEVSTV9BRENfNF9MQVRFU1RfVk9MVF9WQUxVRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDBmZjAwKSA+PiA4KQotI2RlZmluZSBQSFlfQkJfVEhFUk1fQURDXzRfTEFURVNUX0FUQl9WQUxVRV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUEhZX0JCX1RIRVJNX0FEQ180X0xBVEVTVF9BVEJfVkFMVUVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFBIWV9CQl9USEVSTV9BRENfNF9MQVRFU1RfQVRCX1ZBTFVFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMGZmMDAwMAotI2RlZmluZSBQSFlfQkJfVEhFUk1fQURDXzRfTEFURVNUX0FUQl9WQUxVRV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwZmYwMDAwKSA+PiAxNikKLQotLyogbWFjcm9zIGZvciBCQl90eF9mb3JjZWRfZ2FpbiAqLwotI2RlZmluZSBQSFlfQkJfVFhfRk9SQ0VEX0dBSU5fQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE3ZjgKLSNkZWZpbmUgUEhZX0JCX1RYX0ZPUkNFRF9HQUlOX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhN2Y4Ci0jZGVmaW5lIFBIWV9CQl9UWF9GT1JDRURfR0FJTl9GT1JDRV9UWF9HQUlOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfVFhfRk9SQ0VEX0dBSU5fRk9SQ0VfVFhfR0FJTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1RYX0ZPUkNFRF9HQUlOX0ZPUkNFX1RYX0dBSU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFBIWV9CQl9UWF9GT1JDRURfR0FJTl9GT1JDRV9UWF9HQUlOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwMDAxKSA+PiAwKQotI2RlZmluZSBQSFlfQkJfVFhfRk9SQ0VEX0dBSU5fRk9SQ0VfVFhfR0FJTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDApICYgMHgwMDAwMDAwMSkKLSNkZWZpbmUgUEhZX0JCX1RYX0ZPUkNFRF9HQUlOX0ZPUkNFRF9UWEJCMURCR0FJTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFBIWV9CQl9UWF9GT1JDRURfR0FJTl9GT1JDRURfVFhCQjFEQkdBSU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQSFlfQkJfVFhfRk9SQ0VEX0dBSU5fRk9SQ0VEX1RYQkIxREJHQUlOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGUKLSNkZWZpbmUgUEhZX0JCX1RYX0ZPUkNFRF9HQUlOX0ZPUkNFRF9UWEJCMURCR0FJTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwMGUpID4+IDEpCi0jZGVmaW5lIFBIWV9CQl9UWF9GT1JDRURfR0FJTl9GT1JDRURfVFhCQjFEQkdBSU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMSkgJiAweDAwMDAwMDBlKQotI2RlZmluZSBQSFlfQkJfVFhfRk9SQ0VEX0dBSU5fRk9SQ0VEX1RYQkI2REJHQUlOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUEhZX0JCX1RYX0ZPUkNFRF9HQUlOX0ZPUkNFRF9UWEJCNkRCR0FJTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFBIWV9CQl9UWF9GT1JDRURfR0FJTl9GT1JDRURfVFhCQjZEQkdBSU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAotI2RlZmluZSBQSFlfQkJfVFhfRk9SQ0VEX0dBSU5fRk9SQ0VEX1RYQkI2REJHQUlOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDAzMCkgPj4gNCkKLSNkZWZpbmUgUEhZX0JCX1RYX0ZPUkNFRF9HQUlOX0ZPUkNFRF9UWEJCNkRCR0FJTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA0KSAmIDB4MDAwMDAwMzApCi0jZGVmaW5lIFBIWV9CQl9UWF9GT1JDRURfR0FJTl9GT1JDRURfVFhNWFJHQUlOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBQSFlfQkJfVFhfRk9SQ0VEX0dBSU5fRk9SQ0VEX1RYTVhSR0FJTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUEhZX0JCX1RYX0ZPUkNFRF9HQUlOX0ZPUkNFRF9UWE1YUkdBSU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM2MwCi0jZGVmaW5lIFBIWV9CQl9UWF9GT1JDRURfR0FJTl9GT1JDRURfVFhNWFJHQUlOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDAwM2MwKSA+PiA2KQotI2RlZmluZSBQSFlfQkJfVFhfRk9SQ0VEX0dBSU5fRk9SQ0VEX1RYTVhSR0FJTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDYpICYgMHgwMDAwMDNjMCkKLSNkZWZpbmUgUEhZX0JCX1RYX0ZPUkNFRF9HQUlOX0ZPUkNFRF9QQURSVkdOQV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFBIWV9CQl9UWF9GT1JDRURfR0FJTl9GT1JDRURfUEFEUlZHTkFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBQSFlfQkJfVFhfRk9SQ0VEX0dBSU5fRk9SQ0VEX1BBRFJWR05BX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDNjMDAKLSNkZWZpbmUgUEhZX0JCX1RYX0ZPUkNFRF9HQUlOX0ZPUkNFRF9QQURSVkdOQV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwM2MwMCkgPj4gMTApCi0jZGVmaW5lIFBIWV9CQl9UWF9GT1JDRURfR0FJTl9GT1JDRURfUEFEUlZHTkFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAxMCkgJiAweDAwMDAzYzAwKQotI2RlZmluZSBQSFlfQkJfVFhfRk9SQ0VEX0dBSU5fRk9SQ0VEX1BBRFJWR05CX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0JCX1RYX0ZPUkNFRF9HQUlOX0ZPUkNFRF9QQURSVkdOQl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFBIWV9CQl9UWF9GT1JDRURfR0FJTl9GT1JDRURfUEFEUlZHTkJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzYzAwMAotI2RlZmluZSBQSFlfQkJfVFhfRk9SQ0VEX0dBSU5fRk9SQ0VEX1BBRFJWR05CX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDNjMDAwKSA+PiAxNCkKLSNkZWZpbmUgUEhZX0JCX1RYX0ZPUkNFRF9HQUlOX0ZPUkNFRF9QQURSVkdOQl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDE0KSAmIDB4MDAwM2MwMDApCi0jZGVmaW5lIFBIWV9CQl9UWF9GT1JDRURfR0FJTl9GT1JDRURfUEFEUlZHTkNfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBQSFlfQkJfVFhfRk9SQ0VEX0dBSU5fRk9SQ0VEX1BBRFJWR05DX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgUEhZX0JCX1RYX0ZPUkNFRF9HQUlOX0ZPUkNFRF9QQURSVkdOQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwM2MwMDAwCi0jZGVmaW5lIFBIWV9CQl9UWF9GT1JDRURfR0FJTl9GT1JDRURfUEFEUlZHTkNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAzYzAwMDApID4+IDE4KQotI2RlZmluZSBQSFlfQkJfVFhfRk9SQ0VEX0dBSU5fRk9SQ0VEX1BBRFJWR05DX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTgpICYgMHgwMDNjMDAwMCkKLSNkZWZpbmUgUEhZX0JCX1RYX0ZPUkNFRF9HQUlOX0ZPUkNFRF9QQURSVkdORF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFBIWV9CQl9UWF9GT1JDRURfR0FJTl9GT1JDRURfUEFEUlZHTkRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBQSFlfQkJfVFhfRk9SQ0VEX0dBSU5fRk9SQ0VEX1BBRFJWR05EX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBjMDAwMDAKLSNkZWZpbmUgUEhZX0JCX1RYX0ZPUkNFRF9HQUlOX0ZPUkNFRF9QQURSVkdORF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMGMwMDAwMCkgPj4gMjIpCi0jZGVmaW5lIFBIWV9CQl9UWF9GT1JDRURfR0FJTl9GT1JDRURfUEFEUlZHTkRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyMikgJiAweDAwYzAwMDAwKQotI2RlZmluZSBQSFlfQkJfVFhfRk9SQ0VEX0dBSU5fRk9SQ0VEX0VOQUJMRV9QQUxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgUEhZX0JCX1RYX0ZPUkNFRF9HQUlOX0ZPUkNFRF9FTkFCTEVfUEFMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFBIWV9CQl9UWF9GT1JDRURfR0FJTl9GT1JDRURfRU5BQkxFX1BBTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAotI2RlZmluZSBQSFlfQkJfVFhfRk9SQ0VEX0dBSU5fRk9SQ0VEX0VOQUJMRV9QQUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAxMDAwMDAwKSA+PiAyNCkKLSNkZWZpbmUgUEhZX0JCX1RYX0ZPUkNFRF9HQUlOX0ZPUkNFRF9FTkFCTEVfUEFMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI0KSAmIDB4MDEwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfZWNvX2N0cmwgKi8KLSNkZWZpbmUgUEhZX0JCX0VDT19DVFJMX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhN2ZjCi0jZGVmaW5lIFBIWV9CQl9FQ09fQ1RSTF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTdmYwotI2RlZmluZSBQSFlfQkJfRUNPX0NUUkxfRUNPX0NUUkxfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUEhZX0JCX0VDT19DVFJMX0VDT19DVFJMX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBIWV9CQl9FQ09fQ1RSTF9FQ09fQ1RSTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBQSFlfQkJfRUNPX0NUUkxfRUNPX0NUUkxfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMDBmZikgPj4gMCkKLSNkZWZpbmUgUEhZX0JCX0VDT19DVFJMX0VDT19DVFJMX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAwKSAmIDB4MDAwMDAwZmYpCi0KLS8qIG1hY3JvcyBmb3IgQkJfZ2Fpbl9mb3JjZV9tYXhfZ2FpbnNfYjEgKi8KLSNkZWZpbmUgUEhZX0JCX0dBSU5fRk9SQ0VfTUFYX0dBSU5TX0IxX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhODQ4Ci0jZGVmaW5lIFBIWV9CQl9HQUlOX0ZPUkNFX01BWF9HQUlOU19CMV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYTg0OAotI2RlZmluZSBQSFlfQkJfR0FJTl9GT1JDRV9NQVhfR0FJTlNfQjFfWEFUVEVOMV9IWVNUX01BUkdJTl8xX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUEhZX0JCX0dBSU5fRk9SQ0VfTUFYX0dBSU5TX0IxX1hBVFRFTjFfSFlTVF9NQVJHSU5fMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFBIWV9CQl9HQUlOX0ZPUkNFX01BWF9HQUlOU19CMV9YQVRURU4xX0hZU1RfTUFSR0lOXzFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwM2Y4MAotI2RlZmluZSBQSFlfQkJfR0FJTl9GT1JDRV9NQVhfR0FJTlNfQjFfWEFUVEVOMV9IWVNUX01BUkdJTl8xX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgMHgwMDAwM2Y4MCkgPj4gNykKLSNkZWZpbmUgUEhZX0JCX0dBSU5fRk9SQ0VfTUFYX0dBSU5TX0IxX1hBVFRFTjFfSFlTVF9NQVJHSU5fMV9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCA3KSAmIDB4MDAwMDNmODApCi0jZGVmaW5lIFBIWV9CQl9HQUlOX0ZPUkNFX01BWF9HQUlOU19CMV9YQVRURU4yX0hZU1RfTUFSR0lOXzFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBQSFlfQkJfR0FJTl9GT1JDRV9NQVhfR0FJTlNfQjFfWEFUVEVOMl9IWVNUX01BUkdJTl8xX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUEhZX0JCX0dBSU5fRk9SQ0VfTUFYX0dBSU5TX0IxX1hBVFRFTjJfSFlTVF9NQVJHSU5fMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMWZjMDAwCi0jZGVmaW5lIFBIWV9CQl9HQUlOX0ZPUkNFX01BWF9HQUlOU19CMV9YQVRURU4yX0hZU1RfTUFSR0lOXzFfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIDB4MDAxZmMwMDApID4+IDE0KQotI2RlZmluZSBQSFlfQkJfR0FJTl9GT1JDRV9NQVhfR0FJTlNfQjFfWEFUVEVOMl9IWVNUX01BUkdJTl8xX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgMTQpICYgMHgwMDFmYzAwMCkKLQotLyogbWFjcm9zIGZvciBCQl9nYWluc19taW5fb2Zmc2V0c19iMSAqLwotI2RlZmluZSBQSFlfQkJfR0FJTlNfTUlOX09GRlNFVFNfQjFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGE4NGMKLSNkZWZpbmUgUEhZX0JCX0dBSU5TX01JTl9PRkZTRVRTX0IxX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhODRjCi0jZGVmaW5lIFBIWV9CQl9HQUlOU19NSU5fT0ZGU0VUU19CMV9SRl9HQUlOX0ZfMV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBQSFlfQkJfR0FJTlNfTUlOX09GRlNFVFNfQjFfUkZfR0FJTl9GXzFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUEhZX0JCX0dBSU5TX01JTl9PRkZTRVRTX0IxX1JGX0dBSU5fRl8xX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxZmUwMDAwCi0jZGVmaW5lIFBIWV9CQl9HQUlOU19NSU5fT0ZGU0VUU19CMV9SRl9HQUlOX0ZfMV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDFmZTAwMDApID4+IDE3KQotI2RlZmluZSBQSFlfQkJfR0FJTlNfTUlOX09GRlNFVFNfQjFfUkZfR0FJTl9GXzFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTcpICYgMHgwMWZlMDAwMCkKLSNkZWZpbmUgUEhZX0JCX0dBSU5TX01JTl9PRkZTRVRTX0IxX1hBVFRFTjFfU1dfRl8xX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBIWV9CQl9HQUlOU19NSU5fT0ZGU0VUU19CMV9YQVRURU4xX1NXX0ZfMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQSFlfQkJfR0FJTlNfTUlOX09GRlNFVFNfQjFfWEFUVEVOMV9TV19GXzFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKLSNkZWZpbmUgUEhZX0JCX0dBSU5TX01JTl9PRkZTRVRTX0IxX1hBVFRFTjFfU1dfRl8xX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMjAwMDAwMCkgPj4gMjUpCi0jZGVmaW5lIFBIWV9CQl9HQUlOU19NSU5fT0ZGU0VUU19CMV9YQVRURU4xX1NXX0ZfMV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCAyNSkgJiAweDAyMDAwMDAwKQotI2RlZmluZSBQSFlfQkJfR0FJTlNfTUlOX09GRlNFVFNfQjFfWEFUVEVOMl9TV19GXzFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgUEhZX0JCX0dBSU5TX01JTl9PRkZTRVRTX0IxX1hBVFRFTjJfU1dfRl8xX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFBIWV9CQl9HQUlOU19NSU5fT0ZGU0VUU19CMV9YQVRURU4yX1NXX0ZfMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAotI2RlZmluZSBQSFlfQkJfR0FJTlNfTUlOX09GRlNFVFNfQjFfWEFUVEVOMl9TV19GXzFfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDA0MDAwMDAwKSA+PiAyNikKLSNkZWZpbmUgUEhZX0JCX0dBSU5TX01JTl9PRkZTRVRTX0IxX1hBVFRFTjJfU1dfRl8xX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IDI2KSAmIDB4MDQwMDAwMDApCi0KLS8qIG1hY3JvcyBmb3IgQkJfcnhfb2NnYWluMiAqLwotI2RlZmluZSBQSFlfQkJfUlhfT0NHQUlOMl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGFhMDAKLSNkZWZpbmUgUEhZX0JCX1JYX09DR0FJTjJfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBhYTAwCi0jZGVmaW5lIFBIWV9CQl9SWF9PQ0dBSU4yX0dBSU5fRU5UUlkyX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBQSFlfQkJfUlhfT0NHQUlOMl9HQUlOX0VOVFJZMl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEhZX0JCX1JYX09DR0FJTjJfR0FJTl9FTlRSWTJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9CQl9SWF9PQ0dBSU4yX0dBSU5fRU5UUlkyX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweGZmZmZmZmZmKQotCi0vKiBtYWNyb3MgZm9yIEJCX2V4dF9hdHRlbl9zd2l0Y2hfY3RsX2IxICovCi0jZGVmaW5lIFBIWV9CQl9FWFRfQVRURU5fU1dJVENIX0NUTF9CMV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwYjIwYwotI2RlZmluZSBQSFlfQkJfRVhUX0FUVEVOX1NXSVRDSF9DVExfQjFfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGIyMGMKLSNkZWZpbmUgUEhZX0JCX0VYVF9BVFRFTl9TV0lUQ0hfQ1RMX0IxX1hBVFRFTjFfREJfMV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFBIWV9CQl9FWFRfQVRURU5fU1dJVENIX0NUTF9CMV9YQVRURU4xX0RCXzFfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQSFlfQkJfRVhUX0FUVEVOX1NXSVRDSF9DVExfQjFfWEFUVEVOMV9EQl8xX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM2YKLSNkZWZpbmUgUEhZX0JCX0VYVF9BVFRFTl9TV0lUQ0hfQ1RMX0IxX1hBVFRFTjFfREJfMV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMDAwM2YpID4+IDApCi0jZGVmaW5lIFBIWV9CQl9FWFRfQVRURU5fU1dJVENIX0NUTF9CMV9YQVRURU4xX0RCXzFfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgMCkgJiAweDAwMDAwMDNmKQotI2RlZmluZSBQSFlfQkJfRVhUX0FUVEVOX1NXSVRDSF9DVExfQjFfWEFUVEVOMl9EQl8xX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUEhZX0JCX0VYVF9BVFRFTl9TV0lUQ0hfQ1RMX0IxX1hBVFRFTjJfREJfMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFBIWV9CQl9FWFRfQVRURU5fU1dJVENIX0NUTF9CMV9YQVRURU4yX0RCXzFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGZjMAotI2RlZmluZSBQSFlfQkJfRVhUX0FUVEVOX1NXSVRDSF9DVExfQjFfWEFUVEVOMl9EQl8xX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAwMGZjMCkgPj4gNikKLSNkZWZpbmUgUEhZX0JCX0VYVF9BVFRFTl9TV0lUQ0hfQ1RMX0IxX1hBVFRFTjJfREJfMV9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCA2KSAmIDB4MDAwMDBmYzApCi0jZGVmaW5lIFBIWV9CQl9FWFRfQVRURU5fU1dJVENIX0NUTF9CMV9YQVRURU4xX01BUkdJTl8xX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBQSFlfQkJfRVhUX0FUVEVOX1NXSVRDSF9DVExfQjFfWEFUVEVOMV9NQVJHSU5fMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUEhZX0JCX0VYVF9BVFRFTl9TV0lUQ0hfQ1RMX0IxX1hBVFRFTjFfTUFSR0lOXzFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDFmMDAwCi0jZGVmaW5lIFBIWV9CQl9FWFRfQVRURU5fU1dJVENIX0NUTF9CMV9YQVRURU4xX01BUkdJTl8xX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMWYwMDApID4+IDEyKQotI2RlZmluZSBQSFlfQkJfRVhUX0FUVEVOX1NXSVRDSF9DVExfQjFfWEFUVEVOMV9NQVJHSU5fMV9TRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPDwgMTIpICYgMHgwMDAxZjAwMCkKLSNkZWZpbmUgUEhZX0JCX0VYVF9BVFRFTl9TV0lUQ0hfQ1RMX0IxX1hBVFRFTjJfTUFSR0lOXzFfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFBIWV9CQl9FWFRfQVRURU5fU1dJVENIX0NUTF9CMV9YQVRURU4yX01BUkdJTl8xX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBQSFlfQkJfRVhUX0FUVEVOX1NXSVRDSF9DVExfQjFfWEFUVEVOMl9NQVJHSU5fMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzZTAwMDAKLSNkZWZpbmUgUEhZX0JCX0VYVF9BVFRFTl9TV0lUQ0hfQ1RMX0IxX1hBVFRFTjJfTUFSR0lOXzFfR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDNlMDAwMCkgPj4gMTcpCi0jZGVmaW5lIFBIWV9CQl9FWFRfQVRURU5fU1dJVENIX0NUTF9CMV9YQVRURU4yX01BUkdJTl8xX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCAxNykgJiAweDAwM2UwMDAwKQotCi0KLSNpZm5kZWYgX19BU1NFTUJMRVJfXwotCi10eXBlZGVmIHN0cnVjdCBiYl9sY19yZWdfcmVnX3MgewotICB2b2xhdGlsZSBjaGFyIHBhZF9fMFsweDk4MDBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgMHgwIC0gMHg5ODAwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdGVzdF9jb250cm9sczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODAwIC0gMHg5ODA0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfZ2VuX2NvbnRyb2xzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODA0IC0gMHg5ODA4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdGVzdF9jb250cm9sc19zdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODA4IC0gMHg5ODBjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdGltaW5nX2NvbnRyb2xzXzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODBjIC0gMHg5ODEwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdGltaW5nX2NvbnRyb2xzXzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODEwIC0gMHg5ODE0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdGltaW5nX2NvbnRyb2xzXzM7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODE0IC0gMHg5ODE4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfRDJfY2hpcF9pZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODE4IC0gMHg5ODFjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfYWN0aXZlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODFjIC0gMHg5ODIwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfdGltaW5nXzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODIwIC0gMHg5ODI0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfdGltaW5nXzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODI0IC0gMHg5ODI4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfdGltaW5nXzM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODI4IC0gMHg5ODJjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfYWRkYWNfcGFyYWxsZWxfY29udHJvbDsgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODJjIC0gMHg5ODMwICAgICAqLwotICB2b2xhdGlsZSBjaGFyIHBhZF9fMVsweDRdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODMwIC0gMHg5ODM0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfeHBhX3RpbWluZ19jb250cm9sOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODM0IC0gMHg5ODM4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfbWlzY19wYV9jb250cm9sOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODM4IC0gMHg5ODNjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHN0ZGFjX2NvbnN0YW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODNjIC0gMHg5ODQwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfZmluZF9zaWduYWxfbG93OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODQwIC0gMHg5ODQ0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfc2V0dGxpbmdfdGltZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODQ0IC0gMHg5ODQ4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfZ2Fpbl9mb3JjZV9tYXhfZ2FpbnNfYjA7ICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODQ4IC0gMHg5ODRjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfZ2FpbnNfbWluX29mZnNldHNfYjA7ICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODRjIC0gMHg5ODUwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfZGVzaXJlZF9zaWdzaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODUwIC0gMHg5ODU0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdGltaW5nX2NvbnRyb2xfM2E7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODU0IC0gMHg5ODU4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfZmluZF9zaWduYWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODU4IC0gMHg5ODVjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfYWdjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODVjIC0gMHg5ODYwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfYWdjX2NvbnRyb2w7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODYwIC0gMHg5ODY0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2NhX2IwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODY0IC0gMHg5ODY4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfc2Zjb3JyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODY4IC0gMHg5ODZjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfc2VsZl9jb3JyX2xvdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODZjIC0gMHg5ODcwICAgICAqLwotICB2b2xhdGlsZSBjaGFyIHBhZF9fMlsweDRdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODcwIC0gMHg5ODc0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfc3ludGhfY29udHJvbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODc0IC0gMHg5ODc4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfYWRkYWNfY2xrX3NlbGVjdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODc4IC0gMHg5ODdjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGxsX2NudGw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODdjIC0gMHg5ODgwICAgICAqLwotICB2b2xhdGlsZSBjaGFyIHBhZF9fM1sweDgwXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ODgwIC0gMHg5OTAwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdml0X3NwdXJfbWFza19BOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTAwIC0gMHg5OTA0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdml0X3NwdXJfbWFza19COyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTA0IC0gMHg5OTA4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGlsb3Rfc3B1cl9tYXNrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTA4IC0gMHg5OTBjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2hhbl9zcHVyX21hc2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTBjIC0gMHg5OTEwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfc3BlY3RyYWxfc2NhbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTEwIC0gMHg5OTE0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfYW5hbG9nX3Bvd2VyX29uX3RpbWU7ICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTE0IC0gMHg5OTE4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfc2VhcmNoX3N0YXJ0X2RlbGF5OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTE4IC0gMHg5OTFjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfbWF4X3J4X2xlbmd0aDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTFjIC0gMHg5OTIwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdGltaW5nX2NvbnRyb2xfNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTIwIC0gMHg5OTI0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdGltaW5nX2NvbnRyb2xfNTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTI0IC0gMHg5OTI4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGh5b25seV93YXJtX3Jlc2V0OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTI4IC0gMHg5OTJjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGh5b25seV9jb250cm9sOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTJjIC0gMHg5OTMwICAgICAqLwotICB2b2xhdGlsZSBjaGFyIHBhZF9fNFsweDRdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTMwIC0gMHg5OTM0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcG93ZXJ0eF9yYXRlMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTM0IC0gMHg5OTM4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcG93ZXJ0eF9yYXRlMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTM4IC0gMHg5OTNjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcG93ZXJ0eF9tYXg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTNjIC0gMHg5OTQwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfZXh0ZW5zaW9uX3JhZGFyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTQwIC0gMHg5OTQ0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfZnJhbWVfY29udHJvbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTQ0IC0gMHg5OTQ4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdGltaW5nX2NvbnRyb2xfNjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTQ4IC0gMHg5OTRjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfc3B1cl9tYXNrX2NvbnRyb2xzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTRjIC0gMHg5OTUwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcnhfaXFfY29ycl9iMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTUwIC0gMHg5OTU0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcmFkYXJfZGV0ZWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTU0IC0gMHg5OTU4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcmFkYXJfZGV0ZWN0aW9uXzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTU4IC0gMHg5OTVjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfcGhhc2VfcmFtcF9iMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTVjIC0gMHg5OTYwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfc3dpdGNoX3RhYmxlX2Nobl9iMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTYwIC0gMHg5OTY0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfc3dpdGNoX3RhYmxlX2NvbTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTY0IC0gMHg5OTY4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2NhX2N0cmxfMl9iMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTY4IC0gMHg5OTZjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfc3dpdGNoX3RhYmxlX2NvbTI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTZjIC0gMHg5OTcwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcmVzdGFydDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTcwIC0gMHg5OTc0ICAgICAqLwotICB2b2xhdGlsZSBjaGFyIHBhZF9fNVsweDRdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTc0IC0gMHg5OTc4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfc2NyYW1ibGVyX3NlZWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTc4IC0gMHg5OTdjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcmZidXNfcmVxdWVzdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTdjIC0gMHg5OTgwICAgICAqLwotICB2b2xhdGlsZSBjaGFyIHBhZF9fNlsweDIwXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OTgwIC0gMHg5OWEwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdGltaW5nX2NvbnRyb2xfMTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OWEwIC0gMHg5OWE0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfbXVsdGljaGFpbl9lbmFibGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OWE0IC0gMHg5OWE4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfbXVsdGljaGFpbl9jb250cm9sOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OWE4IC0gMHg5OWFjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfbXVsdGljaGFpbl9nYWluX2N0cmw7ICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OWFjIC0gMHg5OWIwICAgICAqLwotICB2b2xhdGlsZSBjaGFyIHBhZF9fN1sweDRdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OWIwIC0gMHg5OWI0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfYWRjX2dhaW5fZGNfY29ycl9iMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OWI0IC0gMHg5OWI4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfZXh0X2NoYW5fcHdyX3Rocl8xOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OWI4IC0gMHg5OWJjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfZXh0X2NoYW5fcHdyX3Rocl8yX2IwOyAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OWJjIC0gMHg5OWMwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfZXh0X2NoYW5fc2NvcnJfdGhyOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OWMwIC0gMHg5OWM0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfZXh0X2NoYW5fZGV0ZWN0X3dpbjsgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OWM0IC0gMHg5OWM4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcHdyX3Rocl8yMF80MF9kZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OWM4IC0gMHg5OWNjICAgICAqLwotICB2b2xhdGlsZSBjaGFyIHBhZF9fOFsweDRdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OWNjIC0gMHg5OWQwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfc2hvcnRfZ2lfZGVsdGFfc2xvcGU7ICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OWQwIC0gMHg5OWQ0ICAgICAqLwotICB2b2xhdGlsZSBjaGFyIHBhZF9fOVsweDhdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OWQ0IC0gMHg5OWRjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2hhbmluZm9fY3RybDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OWRjIC0gMHg5OWUwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfaGVhdnlfY2xpcF9jdHJsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OWUwIC0gMHg5OWU0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfaGVhdnlfY2xpcF8yMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OWU0IC0gMHg5OWU4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfaGVhdnlfY2xpcF80MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OWU4IC0gMHg5OWVjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcmlmc19zcmNoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OWVjIC0gMHg5OWYwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfaXFfYWRjX2NhbF9tb2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OWYwIC0gMHg5OWY0ICAgICAqLwotICB2b2xhdGlsZSBjaGFyIHBhZF9fMTBbMHg4XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OWY0IC0gMHg5OWZjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGVyX2NoYWluX2NzZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5OWZjIC0gMHg5YTAwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcnhfb2NnYWluWzEyOF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5YTAwIC0gMHg5YzAwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfY3JjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5YzAwIC0gMHg5YzA0ICAgICAqLwotICB2b2xhdGlsZSBjaGFyIHBhZF9fMTFbMHhjXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5YzA0IC0gMHg5YzEwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfaXFfYWRjX21lYXNfMF9iMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5YzEwIC0gMHg5YzE0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfaXFfYWRjX21lYXNfMV9iMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5YzE0IC0gMHg5YzE4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfaXFfYWRjX21lYXNfMl9iMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5YzE4IC0gMHg5YzFjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfaXFfYWRjX21lYXNfM19iMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5YzFjIC0gMHg5YzIwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcmZidXNfZ3JhbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5YzIwIC0gMHg5YzI0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHN0YWRjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5YzI0IC0gMHg5YzI4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHN0ZGFjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5YzI4IC0gMHg5YzJjICAgICAqLwotICB2b2xhdGlsZSBjaGFyIHBhZF9fMTJbMHg0XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5YzJjIC0gMHg5YzMwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfaWxsZWdhbF90eF9yYXRlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5YzMwIC0gMHg5YzM0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfc3B1cl9yZXBvcnRfYjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5YzM0IC0gMHg5YzM4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2hhbm5lbF9zdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5YzM4IC0gMHg5YzNjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcnNzaV9iMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5YzNjIC0gMHg5YzQwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfc3B1cl9lc3RfY2NrX3JlcG9ydF9iMDsgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5YzQwIC0gMHg5YzQ0ICAgICAqLwotICB2b2xhdGlsZSBjaGFyIHBhZF9fMTNbMHg2OF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5YzQ0IC0gMHg5Y2FjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2hhbl9pbmZvX25vaXNlX3B3cjsgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5Y2FjIC0gMHg5Y2IwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2hhbl9pbmZvX2dhaW5fZGlmZjsgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5Y2IwIC0gMHg5Y2I0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2hhbl9pbmZvX2ZpbmVfdGltaW5nOyAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5Y2I0IC0gMHg5Y2I4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2hhbl9pbmZvX2dhaW5fYjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5Y2I4IC0gMHg5Y2JjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2hhbl9pbmZvX2NoYW5fdGFiX2IwWzYwXTsgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5Y2JjIC0gMHg5ZGFjICAgICAqLwotICB2b2xhdGlsZSBjaGFyIHBhZF9fMTRbMHgzOF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ZGFjIC0gMHg5ZGU0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGFwcmRfYW0yYW1fbWFzazsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ZGU0IC0gMHg5ZGU4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGFwcmRfYW0ycG1fbWFzazsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ZGU4IC0gMHg5ZGVjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGFwcmRfaHQ0MF9tYXNrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ZGVjIC0gMHg5ZGYwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGFwcmRfY3RybDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ZGYwIC0gMHg5ZGY0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGFwcmRfY3RybDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ZGY0IC0gMHg5ZGY4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGFfZ2FpbjEyMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ZGY4IC0gMHg5ZGZjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGFfZ2FpbjQ1OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ZGZjIC0gMHg5ZTAwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGFwcmRfcHJlX3Bvc3Rfc2NhbGVfMDsgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ZTAwIC0gMHg5ZTA0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGFwcmRfcHJlX3Bvc3Rfc2NhbGVfMTsgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ZTA0IC0gMHg5ZTA4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGFwcmRfcHJlX3Bvc3Rfc2NhbGVfMjsgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ZTA4IC0gMHg5ZTBjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGFwcmRfcHJlX3Bvc3Rfc2NhbGVfMzsgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ZTBjIC0gMHg5ZTEwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGFwcmRfcHJlX3Bvc3Rfc2NhbGVfNDsgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ZTEwIC0gMHg5ZTE0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGFwcmRfcHJlX3Bvc3Rfc2NhbGVfNTsgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ZTE0IC0gMHg5ZTE4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGFwcmRfcHJlX3Bvc3Rfc2NhbGVfNjsgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ZTE4IC0gMHg5ZTFjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGFwcmRfcHJlX3Bvc3Rfc2NhbGVfNzsgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ZTFjIC0gMHg5ZTIwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGFwcmRfbWVtX3RhYlsxMjBdOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHg5ZTIwIC0gMHhhMDAwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGVha19kZXRfY3RybF8xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMDAwIC0gMHhhMDA0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGVha19kZXRfY3RybF8yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMDA0IC0gMHhhMDA4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcnhfZ2Fpbl9ib3VuZHNfMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMDA4IC0gMHhhMDBjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcnhfZ2Fpbl9ib3VuZHNfMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMDBjIC0gMHhhMDEwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGVha19kZXRfY2FsX2N0cmw7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMDEwIC0gMHhhMDE0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfYWdjX2RpZ19kY19jdHJsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMDE0IC0gMHhhMDE4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfYWdjX2RpZ19kY19zdGF0dXNfaV9iMDsgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMDE4IC0gMHhhMDFjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfYWdjX2RpZ19kY19zdGF0dXNfcV9iMDsgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMDFjIC0gMHhhMDIwICAgICAqLwotICB2b2xhdGlsZSBjaGFyIHBhZF9fMTVbMHgxZDRdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMDIwIC0gMHhhMWY0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfYmJiX3R4ZmlyXzA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMWY0IC0gMHhhMWY4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfYmJiX3R4ZmlyXzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMWY4IC0gMHhhMWZjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfYmJiX3R4ZmlyXzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMWZjIC0gMHhhMjAwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfbW9kZXNfc2VsZWN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjAwIC0gMHhhMjA0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfYmJiX3R4X2N0cmw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjA0IC0gMHhhMjA4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfYmJiX3NpZ19kZXRlY3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjA4IC0gMHhhMjBjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfZXh0X2F0dGVuX3N3aXRjaF9jdGxfYjA7ICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjBjIC0gMHhhMjEwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfYmJiX3J4X2N0cmxfMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjEwIC0gMHhhMjE0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfYmJiX3J4X2N0cmxfMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjE0IC0gMHhhMjE4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfYmJiX3J4X2N0cmxfMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjE4IC0gMHhhMjFjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfYmJiX3J4X2N0cmxfNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjFjIC0gMHhhMjIwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfYmJiX3J4X2N0cmxfNTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjIwIC0gMHhhMjI0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfYmJiX3J4X2N0cmxfNjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjI0IC0gMHhhMjI4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfYmJiX2RhZ2NfY3RybDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjI4IC0gMHhhMjJjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfZm9yY2VfY2xrZW5fY2NrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjJjIC0gMHhhMjMwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcnhfY2xlYXJfZGVsYXk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjMwIC0gMHhhMjM0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcG93ZXJ0eF9yYXRlMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjM0IC0gMHhhMjM4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcG93ZXJ0eF9yYXRlNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjM4IC0gMHhhMjNjICAgICAqLwotICB2b2xhdGlsZSBjaGFyIHBhZF9fMTZbMHg0XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjNjIC0gMHhhMjQwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2NrX3NwdXJfbWl0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjQwIC0gMHhhMjQ0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGFuaWNfd2F0Y2hkb2dfc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjQ0IC0gMHhhMjQ4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGFuaWNfd2F0Y2hkb2dfY3RybF8xOyAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjQ4IC0gMHhhMjRjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGFuaWNfd2F0Y2hkb2dfY3RybF8yOyAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjRjIC0gMHhhMjUwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfaXFjb3JyX2N0cmxfY2NrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjUwIC0gMHhhMjU0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfYmx1ZXRvb3RoX2NudGw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjU0IC0gMHhhMjU4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHBjXzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjU4IC0gMHhhMjVjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHBjXzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjVjIC0gMHhhMjYwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHBjXzM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjYwIC0gMHhhMjY0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHBjXzRfYjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjY0IC0gMHhhMjY4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfYW5hbG9nX3N3YXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjY4IC0gMHhhMjZjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHBjXzVfYjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjZjIC0gMHhhMjcwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHBjXzZfYjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjcwIC0gMHhhMjc0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHBjXzc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjc0IC0gMHhhMjc4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHBjXzg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjc4IC0gMHhhMjdjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHBjXzk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjdjIC0gMHhhMjgwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGRhZGNfdGFiX2IwWzMyXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMjgwIC0gMHhhMzAwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2xfdGFiX2IwWzE2XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMzAwIC0gMHhhMzQwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2xfbWFwXzBfYjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMzQwIC0gMHhhMzQ0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2xfbWFwXzFfYjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMzQ0IC0gMHhhMzQ4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2xfbWFwXzJfYjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMzQ4IC0gMHhhMzRjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2xfbWFwXzNfYjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMzRjIC0gMHhhMzUwICAgICAqLwotICB2b2xhdGlsZSBjaGFyIHBhZF9fMTdbMHg4XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMzUwIC0gMHhhMzU4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2xfY2FsX2N0cmw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMzU4IC0gMHhhMzVjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2xfbWFwX3BhbF8wX2IwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMzVjIC0gMHhhMzYwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2xfbWFwX3BhbF8xX2IwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMzYwIC0gMHhhMzY0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2xfbWFwX3BhbF8yX2IwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMzY0IC0gMHhhMzY4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2xfbWFwX3BhbF8zX2IwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMzY4IC0gMHhhMzZjICAgICAqLwotICB2b2xhdGlsZSBjaGFyIHBhZF9fMThbMHgxY107ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMzZjIC0gMHhhMzg4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcmlmczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMzg4IC0gMHhhMzhjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcG93ZXJ0eF9yYXRlNTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMzhjIC0gMHhhMzkwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcG93ZXJ0eF9yYXRlNjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMzkwIC0gMHhhMzk0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHBjXzEwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMzk0IC0gMHhhMzk4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHBjXzExX2IwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMzk4IC0gMHhhMzljICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2FsX2NoYWluX21hc2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhMzljIC0gMHhhM2EwICAgICAqLwotICB2b2xhdGlsZSBjaGFyIHBhZF9fMTlbMHgxY107ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhM2EwIC0gMHhhM2JjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcG93ZXJ0eF9zdWI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhM2JjIC0gMHhhM2MwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcG93ZXJ0eF9yYXRlNzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhM2MwIC0gMHhhM2M0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcG93ZXJ0eF9yYXRlODsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhM2M0IC0gMHhhM2M4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcG93ZXJ0eF9yYXRlOTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhM2M4IC0gMHhhM2NjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcG93ZXJ0eF9yYXRlMTA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhM2NjIC0gMHhhM2QwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcG93ZXJ0eF9yYXRlMTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhM2QwIC0gMHhhM2Q0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcG93ZXJ0eF9yYXRlMTI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhM2Q0IC0gMHhhM2Q4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfZm9yY2VfYW5hbG9nOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhM2Q4IC0gMHhhM2RjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHBjXzEyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhM2RjIC0gMHhhM2UwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHBjXzEzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhM2UwIC0gMHhhM2U0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHBjXzE0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhM2U0IC0gMHhhM2U4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHBjXzE1OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhM2U4IC0gMHhhM2VjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHBjXzE2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhM2VjIC0gMHhhM2YwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHBjXzE3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhM2YwIC0gMHhhM2Y0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHBjXzE4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhM2Y0IC0gMHhhM2Y4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHBjXzE5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhM2Y4IC0gMHhhM2ZjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHBjXzIwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhM2ZjIC0gMHhhNDAwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDAwIC0gMHhhNDA0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDA0IC0gMHhhNDA4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDA4IC0gMHhhNDBjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDBjIC0gMHhhNDEwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfNTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDEwIC0gMHhhNDE0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfNjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDE0IC0gMHhhNDE4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfNzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDE4IC0gMHhhNDFjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfODsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDFjIC0gMHhhNDIwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfOTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDIwIC0gMHhhNDI0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfMTA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDI0IC0gMHhhNDI4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfMTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDI4IC0gMHhhNDJjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfMTI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDJjIC0gMHhhNDMwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfMTM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDMwIC0gMHhhNDM0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfMTQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDM0IC0gMHhhNDM4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfMTU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDM4IC0gMHhhNDNjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfMTY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDNjIC0gMHhhNDQwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfMTc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDQwIC0gMHhhNDQ0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfMTg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDQ0IC0gMHhhNDQ4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfMTk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDQ4IC0gMHhhNDRjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfMjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDRjIC0gMHhhNDUwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfMjE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDUwIC0gMHhhNDU0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfMjI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDU0IC0gMHhhNDU4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfMjM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDU4IC0gMHhhNDVjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfMjQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDVjIC0gMHhhNDYwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfMjU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDYwIC0gMHhhNDY0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfMjY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDY0IC0gMHhhNDY4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfMjc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDY4IC0gMHhhNDZjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfMjg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDZjIC0gMHhhNDcwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfMjk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDcwIC0gMHhhNDc0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfMzA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDc0IC0gMHhhNDc4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfMzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDc4IC0gMHhhNDdjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfMzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDdjIC0gMHhhNDgwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfcGFsXzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDgwIC0gMHhhNDg0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfcGFsXzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDg0IC0gMHhhNDg4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfcGFsXzM7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDg4IC0gMHhhNDhjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfcGFsXzQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDhjIC0gMHhhNDkwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfcGFsXzU7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDkwIC0gMHhhNDk0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfcGFsXzY7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDk0IC0gMHhhNDk4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfcGFsXzc7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDk4IC0gMHhhNDljICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfcGFsXzg7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNDljIC0gMHhhNGEwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfcGFsXzk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNGEwIC0gMHhhNGE0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfcGFsXzEwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNGE0IC0gMHhhNGE4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfcGFsXzExOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNGE4IC0gMHhhNGFjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfcGFsXzEyOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNGFjIC0gMHhhNGIwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfcGFsXzEzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNGIwIC0gMHhhNGI0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfcGFsXzE0OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNGI0IC0gMHhhNGI4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfcGFsXzE1OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNGI4IC0gMHhhNGJjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfcGFsXzE2OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNGJjIC0gMHhhNGMwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfcGFsXzE3OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNGMwIC0gMHhhNGM0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfcGFsXzE4OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNGM0IC0gMHhhNGM4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfcGFsXzE5OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNGM4IC0gMHhhNGNjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfcGFsXzIwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNGNjIC0gMHhhNGQwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfcGFsXzIxOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNGQwIC0gMHhhNGQ0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfcGFsXzIyOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNGQ0IC0gMHhhNGQ4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfcGFsXzIzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNGQ4IC0gMHhhNGRjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfcGFsXzI0OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNGRjIC0gMHhhNGUwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfcGFsXzI1OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNGUwIC0gMHhhNGU0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfcGFsXzI2OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNGU0IC0gMHhhNGU4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfcGFsXzI3OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNGU4IC0gMHhhNGVjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfcGFsXzI4OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNGVjIC0gMHhhNGYwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfcGFsXzI5OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNGYwIC0gMHhhNGY0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfcGFsXzMwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNGY0IC0gMHhhNGY4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfcGFsXzMxOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNGY4IC0gMHhhNGZjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZ2Fpbl90YWJfcGFsXzMyOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNGZjIC0gMHhhNTAwICAgICAqLwotICB2b2xhdGlsZSBjaGFyIHBhZF9fMjBbMHgxOF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNTAwIC0gMHhhNTE4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2FsdHhfZ2Fpbl9zZXRfMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNTE4IC0gMHhhNTFjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2FsdHhfZ2Fpbl9zZXRfMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNTFjIC0gMHhhNTIwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2FsdHhfZ2Fpbl9zZXRfNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNTIwIC0gMHhhNTI0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2FsdHhfZ2Fpbl9zZXRfNjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNTI0IC0gMHhhNTI4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2FsdHhfZ2Fpbl9zZXRfODsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNTI4IC0gMHhhNTJjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2FsdHhfZ2Fpbl9zZXRfMTA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNTJjIC0gMHhhNTMwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2FsdHhfZ2Fpbl9zZXRfMTI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNTMwIC0gMHhhNTM0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2FsdHhfZ2Fpbl9zZXRfMTQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNTM0IC0gMHhhNTM4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2FsdHhfZ2Fpbl9zZXRfMTY7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNTM4IC0gMHhhNTNjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2FsdHhfZ2Fpbl9zZXRfMTg7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNTNjIC0gMHhhNTQwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2FsdHhfZ2Fpbl9zZXRfMjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNTQwIC0gMHhhNTQ0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2FsdHhfZ2Fpbl9zZXRfMjI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNTQ0IC0gMHhhNTQ4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2FsdHhfZ2Fpbl9zZXRfMjQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNTQ4IC0gMHhhNTRjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2FsdHhfZ2Fpbl9zZXRfMjY7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNTRjIC0gMHhhNTUwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2FsdHhfZ2Fpbl9zZXRfMjg7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNTUwIC0gMHhhNTU0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2FsdHhfZ2Fpbl9zZXRfMzA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNTU0IC0gMHhhNTU4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhpcWNhbF9tZWFzX2IwWzk2XTsgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNTU4IC0gMHhhNmQ4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhpcWNhbF9zdGFydDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNmQ4IC0gMHhhNmRjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhpcWNhbF9jb250cm9sXzA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNmRjIC0gMHhhNmUwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhpcWNhbF9jb250cm9sXzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNmUwIC0gMHhhNmU0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhpcWNhbF9jb250cm9sXzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNmU0IC0gMHhhNmU4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhpcWNhbF9jb250cm9sXzM7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNmU4IC0gMHhhNmVjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhpcV9jb3JyX2NvZWZmXzAxX2IwOyAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNmVjIC0gMHhhNmYwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhpcV9jb3JyX2NvZWZmXzIzX2IwOyAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNmYwIC0gMHhhNmY0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhpcV9jb3JyX2NvZWZmXzQ1X2IwOyAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNmY0IC0gMHhhNmY4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhpcV9jb3JyX2NvZWZmXzY3X2IwOyAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNmY4IC0gMHhhNmZjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhpcV9jb3JyX2NvZWZmXzg5X2IwOyAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNmZjIC0gMHhhNzAwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhpcV9jb3JyX2NvZWZmX2FiX2IwOyAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNzAwIC0gMHhhNzA0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhpcV9jb3JyX2NvZWZmX2NkX2IwOyAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNzA0IC0gMHhhNzA4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhpcV9jb3JyX2NvZWZmX2VmX2IwOyAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNzA4IC0gMHhhNzBjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2FsX3J4YmJfZ2Fpbl90YmxfMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNzBjIC0gMHhhNzEwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2FsX3J4YmJfZ2Fpbl90YmxfNDsgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNzEwIC0gMHhhNzE0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2FsX3J4YmJfZ2Fpbl90YmxfODsgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNzE0IC0gMHhhNzE4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2FsX3J4YmJfZ2Fpbl90YmxfMTI7ICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNzE4IC0gMHhhNzFjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2FsX3J4YmJfZ2Fpbl90YmxfMTY7ICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNzFjIC0gMHhhNzIwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2FsX3J4YmJfZ2Fpbl90YmxfMjA7ICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNzIwIC0gMHhhNzI0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfY2FsX3J4YmJfZ2Fpbl90YmxfMjQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNzI0IC0gMHhhNzI4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhpcWNhbF9zdGF0dXNfYjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNzI4IC0gMHhhNzJjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGFwcmRfdHJhaW5lcl9jbnRsMTsgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNzJjIC0gMHhhNzMwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGFwcmRfdHJhaW5lcl9jbnRsMjsgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNzMwIC0gMHhhNzM0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGFwcmRfdHJhaW5lcl9jbnRsMzsgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNzM0IC0gMHhhNzM4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGFwcmRfdHJhaW5lcl9jbnRsNDsgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNzM4IC0gMHhhNzNjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGFwcmRfdHJhaW5lcl9zdGF0MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNzNjIC0gMHhhNzQwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGFwcmRfdHJhaW5lcl9zdGF0MjsgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNzQwIC0gMHhhNzQ0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcGFwcmRfdHJhaW5lcl9zdGF0MzsgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNzQ0IC0gMHhhNzQ4ICAgICAqLwotICB2b2xhdGlsZSBjaGFyIHBhZF9fMjFbMHg5MF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhNzQ4IC0gMHhhN2Q4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfZmNhbF8xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhN2Q4IC0gMHhhN2RjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfZmNhbF8yX2IwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhN2RjIC0gMHhhN2UwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcmFkYXJfYndfZmlsdGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhN2UwIC0gMHhhN2U0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfZGZ0X3RvbmVfY3RybF9iMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhN2U0IC0gMHhhN2U4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdGhlcm1fYWRjXzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhN2U4IC0gMHhhN2VjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdGhlcm1fYWRjXzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhN2VjIC0gMHhhN2YwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdGhlcm1fYWRjXzM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhN2YwIC0gMHhhN2Y0ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdGhlcm1fYWRjXzQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhN2Y0IC0gMHhhN2Y4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfdHhfZm9yY2VkX2dhaW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhN2Y4IC0gMHhhN2ZjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfZWNvX2N0cmw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhN2ZjIC0gMHhhODAwICAgICAqLwotICB2b2xhdGlsZSBjaGFyIHBhZF9fMjJbMHg0OF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhODAwIC0gMHhhODQ4ICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfZ2Fpbl9mb3JjZV9tYXhfZ2FpbnNfYjE7ICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhODQ4IC0gMHhhODRjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfZ2FpbnNfbWluX29mZnNldHNfYjE7ICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhODRjIC0gMHhhODUwICAgICAqLwotICB2b2xhdGlsZSBjaGFyIHBhZF9fMjNbMHgxYjBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhODUwIC0gMHhhYTAwICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfcnhfb2NnYWluMlsxMjhdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhYTAwIC0gMHhhYzAwICAgICAqLwotICB2b2xhdGlsZSBjaGFyIHBhZF9fMjRbMHg2MGNdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhhYzAwIC0gMHhiMjBjICAgICAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgQkJfZXh0X2F0dGVuX3N3aXRjaF9jdGxfYjE7ICAgICAgICAgICAgICAgICAgICAvKiAgICAgMHhiMjBjIC0gMHhiMjEwICAgICAqLwotfSBiYl9sY19yZWdfcmVnX3Q7Ci0KLSNlbmRpZiAvKiBfX0FTU0VNQkxFUl9fICovCi0KLSNlbmRpZiAvKiBfQkJfTENfUkVHX1JFR19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHc0LjAvaHcvZWZ1c2VfcmVnLmggYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzQuMC9ody9lZnVzZV9yZWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJjYWRiMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzQuMC9ody9lZnVzZV9yZWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENvcHlyaWdodCAoYykgMjAwNC0yMDEwIEF0aGVyb3MgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gCi0vLwotLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0vLyBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotLy8KLS8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotLy8gV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotLy8gTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLS8vIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLS8vIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotLy8gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLS8vIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0vLwotLy8KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBBdXRob3Iocyk6ID0iQXRoZXJvcyIKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0KLSNpZm5kZWYgX0VGVVNFX1JFR19SRUdfSF8KLSNkZWZpbmUgX0VGVVNFX1JFR19SRUdfSF8KLQotI2RlZmluZSBFRlVTRV9XUl9FTkFCTEVfUkVHX0FERFJFU1MgICAgICAgICAgICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgRUZVU0VfV1JfRU5BQkxFX1JFR19PRkZTRVQgICAgICAgICAgICAgICAweDAwMDAwMDAwCi0jZGVmaW5lIEVGVVNFX1dSX0VOQUJMRV9SRUdfVl9NU0IgICAgICAgICAgICAgICAgMAotI2RlZmluZSBFRlVTRV9XUl9FTkFCTEVfUkVHX1ZfTFNCICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgRUZVU0VfV1JfRU5BQkxFX1JFR19WX01BU0sgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIEVGVVNFX1dSX0VOQUJMRV9SRUdfVl9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBFRlVTRV9XUl9FTkFCTEVfUkVHX1ZfTUFTSykgPj4gRUZVU0VfV1JfRU5BQkxFX1JFR19WX0xTQikKLSNkZWZpbmUgRUZVU0VfV1JfRU5BQkxFX1JFR19WX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBFRlVTRV9XUl9FTkFCTEVfUkVHX1ZfTFNCKSAmIEVGVVNFX1dSX0VOQUJMRV9SRUdfVl9NQVNLKQotCi0jZGVmaW5lIEVGVVNFX0lOVF9FTkFCTEVfUkVHX0FERFJFU1MgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBFRlVTRV9JTlRfRU5BQkxFX1JFR19PRkZTRVQgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgRUZVU0VfSU5UX0VOQUJMRV9SRUdfVl9NU0IgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEVGVVNFX0lOVF9FTkFCTEVfUkVHX1ZfTFNCICAgICAgICAgICAgICAgMAotI2RlZmluZSBFRlVTRV9JTlRfRU5BQkxFX1JFR19WX01BU0sgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgRUZVU0VfSU5UX0VOQUJMRV9SRUdfVl9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIEVGVVNFX0lOVF9FTkFCTEVfUkVHX1ZfTUFTSykgPj4gRUZVU0VfSU5UX0VOQUJMRV9SRUdfVl9MU0IpCi0jZGVmaW5lIEVGVVNFX0lOVF9FTkFCTEVfUkVHX1ZfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgRUZVU0VfSU5UX0VOQUJMRV9SRUdfVl9MU0IpICYgRUZVU0VfSU5UX0VOQUJMRV9SRUdfVl9NQVNLKQotCi0jZGVmaW5lIEVGVVNFX0lOVF9TVEFUVVNfUkVHX0FERFJFU1MgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBFRlVTRV9JTlRfU1RBVFVTX1JFR19PRkZTRVQgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgRUZVU0VfSU5UX1NUQVRVU19SRUdfVl9NU0IgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEVGVVNFX0lOVF9TVEFUVVNfUkVHX1ZfTFNCICAgICAgICAgICAgICAgMAotI2RlZmluZSBFRlVTRV9JTlRfU1RBVFVTX1JFR19WX01BU0sgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgRUZVU0VfSU5UX1NUQVRVU19SRUdfVl9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIEVGVVNFX0lOVF9TVEFUVVNfUkVHX1ZfTUFTSykgPj4gRUZVU0VfSU5UX1NUQVRVU19SRUdfVl9MU0IpCi0jZGVmaW5lIEVGVVNFX0lOVF9TVEFUVVNfUkVHX1ZfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgRUZVU0VfSU5UX1NUQVRVU19SRUdfVl9MU0IpICYgRUZVU0VfSU5UX1NUQVRVU19SRUdfVl9NQVNLKQotCi0jZGVmaW5lIEJJVE1BU0tfV1JfUkVHX0FERFJFU1MgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwYwotI2RlZmluZSBCSVRNQVNLX1dSX1JFR19PRkZTRVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGMKLSNkZWZpbmUgQklUTUFTS19XUl9SRUdfVl9NU0IgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBCSVRNQVNLX1dSX1JFR19WX0xTQiAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgQklUTUFTS19XUl9SRUdfVl9NQVNLICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIEJJVE1BU0tfV1JfUkVHX1ZfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiBCSVRNQVNLX1dSX1JFR19WX01BU0spID4+IEJJVE1BU0tfV1JfUkVHX1ZfTFNCKQotI2RlZmluZSBCSVRNQVNLX1dSX1JFR19WX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IEJJVE1BU0tfV1JfUkVHX1ZfTFNCKSAmIEJJVE1BU0tfV1JfUkVHX1ZfTUFTSykKLQotI2RlZmluZSBWRERRX1NFVFRMRV9USU1FX1JFR19BRERSRVNTICAgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgVkREUV9TRVRUTEVfVElNRV9SRUdfT0ZGU0VUICAgICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIFZERFFfU0VUVExFX1RJTUVfUkVHX1ZfTVNCICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgVkREUV9TRVRUTEVfVElNRV9SRUdfVl9MU0IgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFZERFFfU0VUVExFX1RJTUVfUkVHX1ZfTUFTSyAgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBWRERRX1NFVFRMRV9USU1FX1JFR19WX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgVkREUV9TRVRUTEVfVElNRV9SRUdfVl9NQVNLKSA+PiBWRERRX1NFVFRMRV9USU1FX1JFR19WX0xTQikKLSNkZWZpbmUgVkREUV9TRVRUTEVfVElNRV9SRUdfVl9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBWRERRX1NFVFRMRV9USU1FX1JFR19WX0xTQikgJiBWRERRX1NFVFRMRV9USU1FX1JFR19WX01BU0spCi0KLSNkZWZpbmUgUkRfU1RST0JFX1BXX1JFR19BRERSRVNTICAgICAgICAgICAgICAgICAweDAwMDAwMDE0Ci0jZGVmaW5lIFJEX1NUUk9CRV9QV19SRUdfT0ZGU0VUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAotI2RlZmluZSBSRF9TVFJPQkVfUFdfUkVHX1ZfTVNCICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFJEX1NUUk9CRV9QV19SRUdfVl9MU0IgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBSRF9TVFJPQkVfUFdfUkVHX1ZfTUFTSyAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgUkRfU1RST0JFX1BXX1JFR19WX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIFJEX1NUUk9CRV9QV19SRUdfVl9NQVNLKSA+PiBSRF9TVFJPQkVfUFdfUkVHX1ZfTFNCKQotI2RlZmluZSBSRF9TVFJPQkVfUFdfUkVHX1ZfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IFJEX1NUUk9CRV9QV19SRUdfVl9MU0IpICYgUkRfU1RST0JFX1BXX1JFR19WX01BU0spCi0KLSNkZWZpbmUgUEdfU1RST0JFX1BXX1JFR19BRERSRVNTICAgICAgICAgICAgICAgICAweDAwMDAwMDE4Ci0jZGVmaW5lIFBHX1NUUk9CRV9QV19SRUdfT0ZGU0VUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAotI2RlZmluZSBQR19TVFJPQkVfUFdfUkVHX1ZfTVNCICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFBHX1NUUk9CRV9QV19SRUdfVl9MU0IgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQR19TVFJPQkVfUFdfUkVHX1ZfTUFTSyAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgUEdfU1RST0JFX1BXX1JFR19WX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIFBHX1NUUk9CRV9QV19SRUdfVl9NQVNLKSA+PiBQR19TVFJPQkVfUFdfUkVHX1ZfTFNCKQotI2RlZmluZSBQR19TVFJPQkVfUFdfUkVHX1ZfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IFBHX1NUUk9CRV9QV19SRUdfVl9MU0IpICYgUEdfU1RST0JFX1BXX1JFR19WX01BU0spCi0KLSNkZWZpbmUgRUZVU0VfSU5URl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCi0jZGVmaW5lIEVGVVNFX0lOVEZfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAotI2RlZmluZSBFRlVTRV9JTlRGX1JfTVNCICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIEVGVVNFX0lOVEZfUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBFRlVTRV9JTlRGX1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgRUZVU0VfSU5URl9SX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIEVGVVNFX0lOVEZfUl9NQVNLKSA+PiBFRlVTRV9JTlRGX1JfTFNCKQotI2RlZmluZSBFRlVTRV9JTlRGX1JfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IEVGVVNFX0lOVEZfUl9MU0IpICYgRUZVU0VfSU5URl9SX01BU0spCi0KLQotI2lmbmRlZiBfX0FTU0VNQkxFUl9fCi0KLXR5cGVkZWYgc3RydWN0IGVmdXNlX3JlZ19yZWdfcyB7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBlZnVzZV93cl9lbmFibGVfcmVnOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZWZ1c2VfaW50X2VuYWJsZV9yZWc7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBlZnVzZV9pbnRfc3RhdHVzX3JlZzsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGJpdG1hc2tfd3JfcmVnOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdmRkcV9zZXR0bGVfdGltZV9yZWc7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCByZF9zdHJvYmVfcHdfcmVnOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcGdfc3Ryb2JlX3B3X3JlZzsKLSAgdW5zaWduZWQgY2hhciBwYWQwWzIwMjBdOyAvKiBwYWQgdG8gMHg4MDAgKi8KLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGVmdXNlX2ludGZbNTEyXTsKLX0gZWZ1c2VfcmVnX3JlZ190OwotCi0jZW5kaWYgLyogX19BU1NFTUJMRVJfXyAqLwotCi0jZW5kaWYgLyogX0VGVVNFX1JFR19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHc0LjAvaHcvZ3Bpb19hdGhyX3dsYW5fcmVnLmggYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzQuMC9ody9ncGlvX2F0aHJfd2xhbl9yZWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFkZWU3MC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzQuMC9ody9ncGlvX2F0aHJfd2xhbl9yZWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNTMgKzAsMCBAQAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDQtMjAxMCBBdGhlcm9zIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIAotLy8KLS8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotLy8gcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLS8vCi0vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLS8vIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLS8vIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0vLyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0vLyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLS8vIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0vLyBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotLy8KLS8vCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gQXV0aG9yKHMpOiA9IkF0aGVyb3MiCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCi0jaWZuZGVmIF9HUElPX0FUSFJfV0xBTl9SRUdfUkVHX0hfCi0jZGVmaW5lIF9HUElPX0FUSFJfV0xBTl9SRUdfUkVHX0hfCi0KLSNkZWZpbmUgV0xBTl9HUElPX09VVF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCi0jZGVmaW5lIFdMQU5fR1BJT19PVVRfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAotI2RlZmluZSBXTEFOX0dQSU9fT1VUX0RBVEFfTVNCICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFdMQU5fR1BJT19PVVRfREFUQV9MU0IgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX0dQSU9fT1VUX0RBVEFfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDNmZmZmZmYKLSNkZWZpbmUgV0xBTl9HUElPX09VVF9EQVRBX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19PVVRfREFUQV9NQVNLKSA+PiBXTEFOX0dQSU9fT1VUX0RBVEFfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fT1VUX0RBVEFfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19PVVRfREFUQV9MU0IpICYgV0xBTl9HUElPX09VVF9EQVRBX01BU0spCi0KLSNkZWZpbmUgV0xBTl9HUElPX09VVF9XMVRTX0FERFJFU1MgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFdMQU5fR1BJT19PVVRfVzFUU19PRkZTRVQgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBXTEFOX0dQSU9fT1VUX1cxVFNfREFUQV9NU0IgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFdMQU5fR1BJT19PVVRfVzFUU19EQVRBX0xTQiAgICAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX0dQSU9fT1VUX1cxVFNfREFUQV9NQVNLICAgICAgICAgICAgIDB4MDNmZmZmZmYKLSNkZWZpbmUgV0xBTl9HUElPX09VVF9XMVRTX0RBVEFfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19PVVRfVzFUU19EQVRBX01BU0spID4+IFdMQU5fR1BJT19PVVRfVzFUU19EQVRBX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX09VVF9XMVRTX0RBVEFfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fT1VUX1cxVFNfREFUQV9MU0IpICYgV0xBTl9HUElPX09VVF9XMVRTX0RBVEFfTUFTSykKLQotI2RlZmluZSBXTEFOX0dQSU9fT1VUX1cxVENfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgV0xBTl9HUElPX09VVF9XMVRDX09GRlNFVCAgICAgICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIFdMQU5fR1BJT19PVVRfVzFUQ19EQVRBX01TQiAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgV0xBTl9HUElPX09VVF9XMVRDX0RBVEFfTFNCICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fR1BJT19PVVRfVzFUQ19EQVRBX01BU0sgICAgICAgICAgICAgMHgwM2ZmZmZmZgotI2RlZmluZSBXTEFOX0dQSU9fT1VUX1cxVENfREFUQV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX09VVF9XMVRDX0RBVEFfTUFTSykgPj4gV0xBTl9HUElPX09VVF9XMVRDX0RBVEFfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fT1VUX1cxVENfREFUQV9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19PVVRfVzFUQ19EQVRBX0xTQikgJiBXTEFOX0dQSU9fT1VUX1cxVENfREFUQV9NQVNLKQotCi0jZGVmaW5lIFdMQU5fR1BJT19FTkFCTEVfQUREUkVTUyAgICAgICAgICAgICAgICAgMHgwMDAwMDAwYwotI2RlZmluZSBXTEFOX0dQSU9fRU5BQkxFX09GRlNFVCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGMKLSNkZWZpbmUgV0xBTl9HUElPX0VOQUJMRV9EQVRBX01TQiAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBXTEFOX0dQSU9fRU5BQkxFX0RBVEFfTFNCICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9HUElPX0VOQUJMRV9EQVRBX01BU0sgICAgICAgICAgICAgICAweDAzZmZmZmZmCi0jZGVmaW5lIFdMQU5fR1BJT19FTkFCTEVfREFUQV9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBXTEFOX0dQSU9fRU5BQkxFX0RBVEFfTUFTSykgPj4gV0xBTl9HUElPX0VOQUJMRV9EQVRBX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX0VOQUJMRV9EQVRBX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fRU5BQkxFX0RBVEFfTFNCKSAmIFdMQU5fR1BJT19FTkFCTEVfREFUQV9NQVNLKQotCi0jZGVmaW5lIFdMQU5fR1BJT19FTkFCTEVfVzFUU19BRERSRVNTICAgICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBXTEFOX0dQSU9fRU5BQkxFX1cxVFNfT0ZGU0VUICAgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgV0xBTl9HUElPX0VOQUJMRV9XMVRTX0RBVEFfTVNCICAgICAgICAgICAyNQotI2RlZmluZSBXTEFOX0dQSU9fRU5BQkxFX1cxVFNfREFUQV9MU0IgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9HUElPX0VOQUJMRV9XMVRTX0RBVEFfTUFTSyAgICAgICAgICAweDAzZmZmZmZmCi0jZGVmaW5lIFdMQU5fR1BJT19FTkFCTEVfVzFUU19EQVRBX0dFVCh4KSAgICAgICAgKCgoeCkgJiBXTEFOX0dQSU9fRU5BQkxFX1cxVFNfREFUQV9NQVNLKSA+PiBXTEFOX0dQSU9fRU5BQkxFX1cxVFNfREFUQV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19FTkFCTEVfVzFUU19EQVRBX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX0VOQUJMRV9XMVRTX0RBVEFfTFNCKSAmIFdMQU5fR1BJT19FTkFCTEVfVzFUU19EQVRBX01BU0spCi0KLSNkZWZpbmUgV0xBTl9HUElPX0VOQUJMRV9XMVRDX0FERFJFU1MgICAgICAgICAgICAweDAwMDAwMDE0Ci0jZGVmaW5lIFdMQU5fR1BJT19FTkFCTEVfVzFUQ19PRkZTRVQgICAgICAgICAgICAgMHgwMDAwMDAxNAotI2RlZmluZSBXTEFOX0dQSU9fRU5BQkxFX1cxVENfREFUQV9NU0IgICAgICAgICAgIDI1Ci0jZGVmaW5lIFdMQU5fR1BJT19FTkFCTEVfVzFUQ19EQVRBX0xTQiAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX0dQSU9fRU5BQkxFX1cxVENfREFUQV9NQVNLICAgICAgICAgIDB4MDNmZmZmZmYKLSNkZWZpbmUgV0xBTl9HUElPX0VOQUJMRV9XMVRDX0RBVEFfR0VUKHgpICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19FTkFCTEVfVzFUQ19EQVRBX01BU0spID4+IFdMQU5fR1BJT19FTkFCTEVfVzFUQ19EQVRBX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX0VOQUJMRV9XMVRDX0RBVEFfU0VUKHgpICAgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fRU5BQkxFX1cxVENfREFUQV9MU0IpICYgV0xBTl9HUElPX0VOQUJMRV9XMVRDX0RBVEFfTUFTSykKLQotI2RlZmluZSBXTEFOX0dQSU9fSU5fQUREUkVTUyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKLSNkZWZpbmUgV0xBTl9HUElPX0lOX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4Ci0jZGVmaW5lIFdMQU5fR1BJT19JTl9EQVRBX01TQiAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgV0xBTl9HUElPX0lOX0RBVEFfTFNCICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fR1BJT19JTl9EQVRBX01BU0sgICAgICAgICAgICAgICAgICAgMHgwM2ZmZmZmZgotI2RlZmluZSBXTEFOX0dQSU9fSU5fREFUQV9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX0lOX0RBVEFfTUFTSykgPj4gV0xBTl9HUElPX0lOX0RBVEFfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fSU5fREFUQV9TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19JTl9EQVRBX0xTQikgJiBXTEFOX0dQSU9fSU5fREFUQV9NQVNLKQotCi0jZGVmaW5lIFdMQU5fR1BJT19TVEFUVVNfQUREUkVTUyAgICAgICAgICAgICAgICAgMHgwMDAwMDAxYwotI2RlZmluZSBXTEFOX0dQSU9fU1RBVFVTX09GRlNFVCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMWMKLSNkZWZpbmUgV0xBTl9HUElPX1NUQVRVU19JTlRFUlJVUFRfTVNCICAgICAgICAgICAyNQotI2RlZmluZSBXTEFOX0dQSU9fU1RBVFVTX0lOVEVSUlVQVF9MU0IgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9HUElPX1NUQVRVU19JTlRFUlJVUFRfTUFTSyAgICAgICAgICAweDAzZmZmZmZmCi0jZGVmaW5lIFdMQU5fR1BJT19TVEFUVVNfSU5URVJSVVBUX0dFVCh4KSAgICAgICAgKCgoeCkgJiBXTEFOX0dQSU9fU1RBVFVTX0lOVEVSUlVQVF9NQVNLKSA+PiBXTEFOX0dQSU9fU1RBVFVTX0lOVEVSUlVQVF9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19TVEFUVVNfSU5URVJSVVBUX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1NUQVRVU19JTlRFUlJVUFRfTFNCKSAmIFdMQU5fR1BJT19TVEFUVVNfSU5URVJSVVBUX01BU0spCi0KLSNkZWZpbmUgV0xBTl9HUElPX1NUQVRVU19XMVRTX0FERFJFU1MgICAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIFdMQU5fR1BJT19TVEFUVVNfVzFUU19PRkZTRVQgICAgICAgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBXTEFOX0dQSU9fU1RBVFVTX1cxVFNfSU5URVJSVVBUX01TQiAgICAgIDI1Ci0jZGVmaW5lIFdMQU5fR1BJT19TVEFUVVNfVzFUU19JTlRFUlJVUFRfTFNCICAgICAgMAotI2RlZmluZSBXTEFOX0dQSU9fU1RBVFVTX1cxVFNfSU5URVJSVVBUX01BU0sgICAgIDB4MDNmZmZmZmYKLSNkZWZpbmUgV0xBTl9HUElPX1NUQVRVU19XMVRTX0lOVEVSUlVQVF9HRVQoeCkgICAoKCh4KSAmIFdMQU5fR1BJT19TVEFUVVNfVzFUU19JTlRFUlJVUFRfTUFTSykgPj4gV0xBTl9HUElPX1NUQVRVU19XMVRTX0lOVEVSUlVQVF9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19TVEFUVVNfVzFUU19JTlRFUlJVUFRfU0VUKHgpICAgKCgoeCkgPDwgV0xBTl9HUElPX1NUQVRVU19XMVRTX0lOVEVSUlVQVF9MU0IpICYgV0xBTl9HUElPX1NUQVRVU19XMVRTX0lOVEVSUlVQVF9NQVNLKQotCi0jZGVmaW5lIFdMQU5fR1BJT19TVEFUVVNfVzFUQ19BRERSRVNTICAgICAgICAgICAgMHgwMDAwMDAyNAotI2RlZmluZSBXTEFOX0dQSU9fU1RBVFVTX1cxVENfT0ZGU0VUICAgICAgICAgICAgIDB4MDAwMDAwMjQKLSNkZWZpbmUgV0xBTl9HUElPX1NUQVRVU19XMVRDX0lOVEVSUlVQVF9NU0IgICAgICAyNQotI2RlZmluZSBXTEFOX0dQSU9fU1RBVFVTX1cxVENfSU5URVJSVVBUX0xTQiAgICAgIDAKLSNkZWZpbmUgV0xBTl9HUElPX1NUQVRVU19XMVRDX0lOVEVSUlVQVF9NQVNLICAgICAweDAzZmZmZmZmCi0jZGVmaW5lIFdMQU5fR1BJT19TVEFUVVNfVzFUQ19JTlRFUlJVUFRfR0VUKHgpICAgKCgoeCkgJiBXTEFOX0dQSU9fU1RBVFVTX1cxVENfSU5URVJSVVBUX01BU0spID4+IFdMQU5fR1BJT19TVEFUVVNfVzFUQ19JTlRFUlJVUFRfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fU1RBVFVTX1cxVENfSU5URVJSVVBUX1NFVCh4KSAgICgoKHgpIDw8IFdMQU5fR1BJT19TVEFUVVNfVzFUQ19JTlRFUlJVUFRfTFNCKSAmIFdMQU5fR1BJT19TVEFUVVNfVzFUQ19JTlRFUlJVUFRfTUFTSykKLQotI2RlZmluZSBXTEFOX0dQSU9fUElOMF9BRERSRVNTICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4wX0NPTkZJR19NU0IgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjBfQ09ORklHX0xTQiAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBXTEFOX0dQSU9fUElOMF9DT05GSUdfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDM4MDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjBfQ09ORklHX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4wX0NPTkZJR19NQVNLKSA+PiBXTEFOX0dQSU9fUElOMF9DT05GSUdfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMF9DT05GSUdfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4wX0NPTkZJR19MU0IpICYgV0xBTl9HUElPX1BJTjBfQ09ORklHX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4wX1dBS0VVUF9FTkFCTEVfTVNCICAgICAgICAgMTAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjBfV0FLRVVQX0VOQUJMRV9MU0IgICAgICAgICAxMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMF9XQUtFVVBfRU5BQkxFX01BU0sgICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjBfV0FLRVVQX0VOQUJMRV9HRVQoeCkgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4wX1dBS0VVUF9FTkFCTEVfTUFTSykgPj4gV0xBTl9HUElPX1BJTjBfV0FLRVVQX0VOQUJMRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4wX1dBS0VVUF9FTkFCTEVfU0VUKHgpICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjBfV0FLRVVQX0VOQUJMRV9MU0IpICYgV0xBTl9HUElPX1BJTjBfV0FLRVVQX0VOQUJMRV9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMF9JTlRfVFlQRV9NU0IgICAgICAgICAgICAgIDkKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjBfSU5UX1RZUEVfTFNCICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4wX0lOVF9UWVBFX01BU0sgICAgICAgICAgICAgMHgwMDAwMDM4MAotI2RlZmluZSBXTEFOX0dQSU9fUElOMF9JTlRfVFlQRV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjBfSU5UX1RZUEVfTUFTSykgPj4gV0xBTl9HUElPX1BJTjBfSU5UX1RZUEVfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMF9JTlRfVFlQRV9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4wX0lOVF9UWVBFX0xTQikgJiBXTEFOX0dQSU9fUElOMF9JTlRfVFlQRV9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMF9QQURfUFVMTF9NU0IgICAgICAgICAgICAgIDYKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjBfUEFEX1BVTExfTFNCICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4wX1BBRF9QVUxMX01BU0sgICAgICAgICAgICAgMHgwMDAwMDA2MAotI2RlZmluZSBXTEFOX0dQSU9fUElOMF9QQURfUFVMTF9HRVQoeCkgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjBfUEFEX1BVTExfTUFTSykgPj4gV0xBTl9HUElPX1BJTjBfUEFEX1BVTExfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMF9QQURfUFVMTF9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4wX1BBRF9QVUxMX0xTQikgJiBXTEFOX0dQSU9fUElOMF9QQURfUFVMTF9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMF9QQURfU1RSRU5HVEhfTVNCICAgICAgICAgIDQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjBfUEFEX1NUUkVOR1RIX0xTQiAgICAgICAgICAzCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4wX1BBRF9TVFJFTkdUSF9NQVNLICAgICAgICAgMHgwMDAwMDAxOAotI2RlZmluZSBXTEFOX0dQSU9fUElOMF9QQURfU1RSRU5HVEhfR0VUKHgpICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjBfUEFEX1NUUkVOR1RIX01BU0spID4+IFdMQU5fR1BJT19QSU4wX1BBRF9TVFJFTkdUSF9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4wX1BBRF9TVFJFTkdUSF9TRVQoeCkgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjBfUEFEX1NUUkVOR1RIX0xTQikgJiBXTEFOX0dQSU9fUElOMF9QQURfU1RSRU5HVEhfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjBfUEFEX0RSSVZFUl9NU0IgICAgICAgICAgICAyCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4wX1BBRF9EUklWRVJfTFNCICAgICAgICAgICAgMgotI2RlZmluZSBXTEFOX0dQSU9fUElOMF9QQURfRFJJVkVSX01BU0sgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjBfUEFEX0RSSVZFUl9HRVQoeCkgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4wX1BBRF9EUklWRVJfTUFTSykgPj4gV0xBTl9HUElPX1BJTjBfUEFEX0RSSVZFUl9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4wX1BBRF9EUklWRVJfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjBfUEFEX0RSSVZFUl9MU0IpICYgV0xBTl9HUElPX1BJTjBfUEFEX0RSSVZFUl9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMF9TT1VSQ0VfTVNCICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjBfU09VUkNFX0xTQiAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4wX1NPVVJDRV9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBXTEFOX0dQSU9fUElOMF9TT1VSQ0VfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjBfU09VUkNFX01BU0spID4+IFdMQU5fR1BJT19QSU4wX1NPVVJDRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4wX1NPVVJDRV9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjBfU09VUkNFX0xTQikgJiBXTEFOX0dQSU9fUElOMF9TT1VSQ0VfTUFTSykKLQotI2RlZmluZSBXTEFOX0dQSU9fUElOMV9BRERSRVNTICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMmMKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjFfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJjCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xX0NPTkZJR19NU0IgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjFfQ09ORklHX0xTQiAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBXTEFOX0dQSU9fUElOMV9DT05GSUdfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDM4MDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjFfQ09ORklHX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4xX0NPTkZJR19NQVNLKSA+PiBXTEFOX0dQSU9fUElOMV9DT05GSUdfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMV9DT05GSUdfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4xX0NPTkZJR19MU0IpICYgV0xBTl9HUElPX1BJTjFfQ09ORklHX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xX1dBS0VVUF9FTkFCTEVfTVNCICAgICAgICAgMTAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjFfV0FLRVVQX0VOQUJMRV9MU0IgICAgICAgICAxMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMV9XQUtFVVBfRU5BQkxFX01BU0sgICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjFfV0FLRVVQX0VOQUJMRV9HRVQoeCkgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4xX1dBS0VVUF9FTkFCTEVfTUFTSykgPj4gV0xBTl9HUElPX1BJTjFfV0FLRVVQX0VOQUJMRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xX1dBS0VVUF9FTkFCTEVfU0VUKHgpICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjFfV0FLRVVQX0VOQUJMRV9MU0IpICYgV0xBTl9HUElPX1BJTjFfV0FLRVVQX0VOQUJMRV9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMV9JTlRfVFlQRV9NU0IgICAgICAgICAgICAgIDkKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjFfSU5UX1RZUEVfTFNCICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4xX0lOVF9UWVBFX01BU0sgICAgICAgICAgICAgMHgwMDAwMDM4MAotI2RlZmluZSBXTEFOX0dQSU9fUElOMV9JTlRfVFlQRV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjFfSU5UX1RZUEVfTUFTSykgPj4gV0xBTl9HUElPX1BJTjFfSU5UX1RZUEVfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMV9JTlRfVFlQRV9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4xX0lOVF9UWVBFX0xTQikgJiBXTEFOX0dQSU9fUElOMV9JTlRfVFlQRV9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMV9QQURfUFVMTF9NU0IgICAgICAgICAgICAgIDYKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjFfUEFEX1BVTExfTFNCICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4xX1BBRF9QVUxMX01BU0sgICAgICAgICAgICAgMHgwMDAwMDA2MAotI2RlZmluZSBXTEFOX0dQSU9fUElOMV9QQURfUFVMTF9HRVQoeCkgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjFfUEFEX1BVTExfTUFTSykgPj4gV0xBTl9HUElPX1BJTjFfUEFEX1BVTExfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMV9QQURfUFVMTF9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4xX1BBRF9QVUxMX0xTQikgJiBXTEFOX0dQSU9fUElOMV9QQURfUFVMTF9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMV9QQURfU1RSRU5HVEhfTVNCICAgICAgICAgIDQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjFfUEFEX1NUUkVOR1RIX0xTQiAgICAgICAgICAzCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xX1BBRF9TVFJFTkdUSF9NQVNLICAgICAgICAgMHgwMDAwMDAxOAotI2RlZmluZSBXTEFOX0dQSU9fUElOMV9QQURfU1RSRU5HVEhfR0VUKHgpICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjFfUEFEX1NUUkVOR1RIX01BU0spID4+IFdMQU5fR1BJT19QSU4xX1BBRF9TVFJFTkdUSF9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xX1BBRF9TVFJFTkdUSF9TRVQoeCkgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjFfUEFEX1NUUkVOR1RIX0xTQikgJiBXTEFOX0dQSU9fUElOMV9QQURfU1RSRU5HVEhfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjFfUEFEX0RSSVZFUl9NU0IgICAgICAgICAgICAyCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xX1BBRF9EUklWRVJfTFNCICAgICAgICAgICAgMgotI2RlZmluZSBXTEFOX0dQSU9fUElOMV9QQURfRFJJVkVSX01BU0sgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjFfUEFEX0RSSVZFUl9HRVQoeCkgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4xX1BBRF9EUklWRVJfTUFTSykgPj4gV0xBTl9HUElPX1BJTjFfUEFEX0RSSVZFUl9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xX1BBRF9EUklWRVJfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjFfUEFEX0RSSVZFUl9MU0IpICYgV0xBTl9HUElPX1BJTjFfUEFEX0RSSVZFUl9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMV9TT1VSQ0VfTVNCICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjFfU09VUkNFX0xTQiAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xX1NPVVJDRV9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBXTEFOX0dQSU9fUElOMV9TT1VSQ0VfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjFfU09VUkNFX01BU0spID4+IFdMQU5fR1BJT19QSU4xX1NPVVJDRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xX1NPVVJDRV9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjFfU09VUkNFX0xTQikgJiBXTEFOX0dQSU9fUElOMV9TT1VSQ0VfTUFTSykKLQotI2RlZmluZSBXTEFOX0dQSU9fUElOMl9BRERSRVNTICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjJfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yX0NPTkZJR19NU0IgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjJfQ09ORklHX0xTQiAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBXTEFOX0dQSU9fUElOMl9DT05GSUdfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDM4MDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjJfQ09ORklHX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4yX0NPTkZJR19NQVNLKSA+PiBXTEFOX0dQSU9fUElOMl9DT05GSUdfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMl9DT05GSUdfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4yX0NPTkZJR19MU0IpICYgV0xBTl9HUElPX1BJTjJfQ09ORklHX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yX1dBS0VVUF9FTkFCTEVfTVNCICAgICAgICAgMTAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjJfV0FLRVVQX0VOQUJMRV9MU0IgICAgICAgICAxMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMl9XQUtFVVBfRU5BQkxFX01BU0sgICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjJfV0FLRVVQX0VOQUJMRV9HRVQoeCkgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4yX1dBS0VVUF9FTkFCTEVfTUFTSykgPj4gV0xBTl9HUElPX1BJTjJfV0FLRVVQX0VOQUJMRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yX1dBS0VVUF9FTkFCTEVfU0VUKHgpICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjJfV0FLRVVQX0VOQUJMRV9MU0IpICYgV0xBTl9HUElPX1BJTjJfV0FLRVVQX0VOQUJMRV9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMl9JTlRfVFlQRV9NU0IgICAgICAgICAgICAgIDkKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjJfSU5UX1RZUEVfTFNCICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4yX0lOVF9UWVBFX01BU0sgICAgICAgICAgICAgMHgwMDAwMDM4MAotI2RlZmluZSBXTEFOX0dQSU9fUElOMl9JTlRfVFlQRV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjJfSU5UX1RZUEVfTUFTSykgPj4gV0xBTl9HUElPX1BJTjJfSU5UX1RZUEVfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMl9JTlRfVFlQRV9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4yX0lOVF9UWVBFX0xTQikgJiBXTEFOX0dQSU9fUElOMl9JTlRfVFlQRV9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMl9QQURfUFVMTF9NU0IgICAgICAgICAgICAgIDYKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjJfUEFEX1BVTExfTFNCICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4yX1BBRF9QVUxMX01BU0sgICAgICAgICAgICAgMHgwMDAwMDA2MAotI2RlZmluZSBXTEFOX0dQSU9fUElOMl9QQURfUFVMTF9HRVQoeCkgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjJfUEFEX1BVTExfTUFTSykgPj4gV0xBTl9HUElPX1BJTjJfUEFEX1BVTExfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMl9QQURfUFVMTF9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4yX1BBRF9QVUxMX0xTQikgJiBXTEFOX0dQSU9fUElOMl9QQURfUFVMTF9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMl9QQURfU1RSRU5HVEhfTVNCICAgICAgICAgIDQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjJfUEFEX1NUUkVOR1RIX0xTQiAgICAgICAgICAzCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yX1BBRF9TVFJFTkdUSF9NQVNLICAgICAgICAgMHgwMDAwMDAxOAotI2RlZmluZSBXTEFOX0dQSU9fUElOMl9QQURfU1RSRU5HVEhfR0VUKHgpICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjJfUEFEX1NUUkVOR1RIX01BU0spID4+IFdMQU5fR1BJT19QSU4yX1BBRF9TVFJFTkdUSF9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yX1BBRF9TVFJFTkdUSF9TRVQoeCkgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjJfUEFEX1NUUkVOR1RIX0xTQikgJiBXTEFOX0dQSU9fUElOMl9QQURfU1RSRU5HVEhfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjJfUEFEX0RSSVZFUl9NU0IgICAgICAgICAgICAyCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yX1BBRF9EUklWRVJfTFNCICAgICAgICAgICAgMgotI2RlZmluZSBXTEFOX0dQSU9fUElOMl9QQURfRFJJVkVSX01BU0sgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjJfUEFEX0RSSVZFUl9HRVQoeCkgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4yX1BBRF9EUklWRVJfTUFTSykgPj4gV0xBTl9HUElPX1BJTjJfUEFEX0RSSVZFUl9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yX1BBRF9EUklWRVJfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjJfUEFEX0RSSVZFUl9MU0IpICYgV0xBTl9HUElPX1BJTjJfUEFEX0RSSVZFUl9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMl9TT1VSQ0VfTVNCICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjJfU09VUkNFX0xTQiAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yX1NPVVJDRV9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBXTEFOX0dQSU9fUElOMl9TT1VSQ0VfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjJfU09VUkNFX01BU0spID4+IFdMQU5fR1BJT19QSU4yX1NPVVJDRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yX1NPVVJDRV9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjJfU09VUkNFX0xTQikgJiBXTEFOX0dQSU9fUElOMl9TT1VSQ0VfTUFTSykKLQotI2RlZmluZSBXTEFOX0dQSU9fUElOM19BRERSRVNTICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4zX0NPTkZJR19NU0IgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjNfQ09ORklHX0xTQiAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBXTEFOX0dQSU9fUElOM19DT05GSUdfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDM4MDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjNfQ09ORklHX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4zX0NPTkZJR19NQVNLKSA+PiBXTEFOX0dQSU9fUElOM19DT05GSUdfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOM19DT05GSUdfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4zX0NPTkZJR19MU0IpICYgV0xBTl9HUElPX1BJTjNfQ09ORklHX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4zX1dBS0VVUF9FTkFCTEVfTVNCICAgICAgICAgMTAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjNfV0FLRVVQX0VOQUJMRV9MU0IgICAgICAgICAxMAotI2RlZmluZSBXTEFOX0dQSU9fUElOM19XQUtFVVBfRU5BQkxFX01BU0sgICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjNfV0FLRVVQX0VOQUJMRV9HRVQoeCkgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4zX1dBS0VVUF9FTkFCTEVfTUFTSykgPj4gV0xBTl9HUElPX1BJTjNfV0FLRVVQX0VOQUJMRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4zX1dBS0VVUF9FTkFCTEVfU0VUKHgpICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjNfV0FLRVVQX0VOQUJMRV9MU0IpICYgV0xBTl9HUElPX1BJTjNfV0FLRVVQX0VOQUJMRV9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOM19JTlRfVFlQRV9NU0IgICAgICAgICAgICAgIDkKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjNfSU5UX1RZUEVfTFNCICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4zX0lOVF9UWVBFX01BU0sgICAgICAgICAgICAgMHgwMDAwMDM4MAotI2RlZmluZSBXTEFOX0dQSU9fUElOM19JTlRfVFlQRV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjNfSU5UX1RZUEVfTUFTSykgPj4gV0xBTl9HUElPX1BJTjNfSU5UX1RZUEVfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOM19JTlRfVFlQRV9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4zX0lOVF9UWVBFX0xTQikgJiBXTEFOX0dQSU9fUElOM19JTlRfVFlQRV9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOM19QQURfUFVMTF9NU0IgICAgICAgICAgICAgIDYKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjNfUEFEX1BVTExfTFNCICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4zX1BBRF9QVUxMX01BU0sgICAgICAgICAgICAgMHgwMDAwMDA2MAotI2RlZmluZSBXTEFOX0dQSU9fUElOM19QQURfUFVMTF9HRVQoeCkgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjNfUEFEX1BVTExfTUFTSykgPj4gV0xBTl9HUElPX1BJTjNfUEFEX1BVTExfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOM19QQURfUFVMTF9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4zX1BBRF9QVUxMX0xTQikgJiBXTEFOX0dQSU9fUElOM19QQURfUFVMTF9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOM19QQURfU1RSRU5HVEhfTVNCICAgICAgICAgIDQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjNfUEFEX1NUUkVOR1RIX0xTQiAgICAgICAgICAzCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4zX1BBRF9TVFJFTkdUSF9NQVNLICAgICAgICAgMHgwMDAwMDAxOAotI2RlZmluZSBXTEFOX0dQSU9fUElOM19QQURfU1RSRU5HVEhfR0VUKHgpICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjNfUEFEX1NUUkVOR1RIX01BU0spID4+IFdMQU5fR1BJT19QSU4zX1BBRF9TVFJFTkdUSF9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4zX1BBRF9TVFJFTkdUSF9TRVQoeCkgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjNfUEFEX1NUUkVOR1RIX0xTQikgJiBXTEFOX0dQSU9fUElOM19QQURfU1RSRU5HVEhfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjNfUEFEX0RSSVZFUl9NU0IgICAgICAgICAgICAyCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4zX1BBRF9EUklWRVJfTFNCICAgICAgICAgICAgMgotI2RlZmluZSBXTEFOX0dQSU9fUElOM19QQURfRFJJVkVSX01BU0sgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjNfUEFEX0RSSVZFUl9HRVQoeCkgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4zX1BBRF9EUklWRVJfTUFTSykgPj4gV0xBTl9HUElPX1BJTjNfUEFEX0RSSVZFUl9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4zX1BBRF9EUklWRVJfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjNfUEFEX0RSSVZFUl9MU0IpICYgV0xBTl9HUElPX1BJTjNfUEFEX0RSSVZFUl9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOM19TT1VSQ0VfTVNCICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjNfU09VUkNFX0xTQiAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4zX1NPVVJDRV9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBXTEFOX0dQSU9fUElOM19TT1VSQ0VfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjNfU09VUkNFX01BU0spID4+IFdMQU5fR1BJT19QSU4zX1NPVVJDRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4zX1NPVVJDRV9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjNfU09VUkNFX0xTQikgJiBXTEFOX0dQSU9fUElOM19TT1VSQ0VfTUFTSykKLQotI2RlZmluZSBXTEFOX0dQSU9fUElONF9BRERSRVNTICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjRfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU40X0NPTkZJR19NU0IgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjRfQ09ORklHX0xTQiAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBXTEFOX0dQSU9fUElONF9DT05GSUdfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDM4MDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjRfQ09ORklHX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU40X0NPTkZJR19NQVNLKSA+PiBXTEFOX0dQSU9fUElONF9DT05GSUdfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElONF9DT05GSUdfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU40X0NPTkZJR19MU0IpICYgV0xBTl9HUElPX1BJTjRfQ09ORklHX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU40X1dBS0VVUF9FTkFCTEVfTVNCICAgICAgICAgMTAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjRfV0FLRVVQX0VOQUJMRV9MU0IgICAgICAgICAxMAotI2RlZmluZSBXTEFOX0dQSU9fUElONF9XQUtFVVBfRU5BQkxFX01BU0sgICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjRfV0FLRVVQX0VOQUJMRV9HRVQoeCkgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU40X1dBS0VVUF9FTkFCTEVfTUFTSykgPj4gV0xBTl9HUElPX1BJTjRfV0FLRVVQX0VOQUJMRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU40X1dBS0VVUF9FTkFCTEVfU0VUKHgpICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjRfV0FLRVVQX0VOQUJMRV9MU0IpICYgV0xBTl9HUElPX1BJTjRfV0FLRVVQX0VOQUJMRV9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElONF9JTlRfVFlQRV9NU0IgICAgICAgICAgICAgIDkKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjRfSU5UX1RZUEVfTFNCICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU40X0lOVF9UWVBFX01BU0sgICAgICAgICAgICAgMHgwMDAwMDM4MAotI2RlZmluZSBXTEFOX0dQSU9fUElONF9JTlRfVFlQRV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjRfSU5UX1RZUEVfTUFTSykgPj4gV0xBTl9HUElPX1BJTjRfSU5UX1RZUEVfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElONF9JTlRfVFlQRV9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU40X0lOVF9UWVBFX0xTQikgJiBXTEFOX0dQSU9fUElONF9JTlRfVFlQRV9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElONF9QQURfUFVMTF9NU0IgICAgICAgICAgICAgIDYKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjRfUEFEX1BVTExfTFNCICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU40X1BBRF9QVUxMX01BU0sgICAgICAgICAgICAgMHgwMDAwMDA2MAotI2RlZmluZSBXTEFOX0dQSU9fUElONF9QQURfUFVMTF9HRVQoeCkgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjRfUEFEX1BVTExfTUFTSykgPj4gV0xBTl9HUElPX1BJTjRfUEFEX1BVTExfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElONF9QQURfUFVMTF9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU40X1BBRF9QVUxMX0xTQikgJiBXTEFOX0dQSU9fUElONF9QQURfUFVMTF9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElONF9QQURfU1RSRU5HVEhfTVNCICAgICAgICAgIDQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjRfUEFEX1NUUkVOR1RIX0xTQiAgICAgICAgICAzCi0jZGVmaW5lIFdMQU5fR1BJT19QSU40X1BBRF9TVFJFTkdUSF9NQVNLICAgICAgICAgMHgwMDAwMDAxOAotI2RlZmluZSBXTEFOX0dQSU9fUElONF9QQURfU1RSRU5HVEhfR0VUKHgpICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjRfUEFEX1NUUkVOR1RIX01BU0spID4+IFdMQU5fR1BJT19QSU40X1BBRF9TVFJFTkdUSF9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU40X1BBRF9TVFJFTkdUSF9TRVQoeCkgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjRfUEFEX1NUUkVOR1RIX0xTQikgJiBXTEFOX0dQSU9fUElONF9QQURfU1RSRU5HVEhfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjRfUEFEX0RSSVZFUl9NU0IgICAgICAgICAgICAyCi0jZGVmaW5lIFdMQU5fR1BJT19QSU40X1BBRF9EUklWRVJfTFNCICAgICAgICAgICAgMgotI2RlZmluZSBXTEFOX0dQSU9fUElONF9QQURfRFJJVkVSX01BU0sgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjRfUEFEX0RSSVZFUl9HRVQoeCkgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU40X1BBRF9EUklWRVJfTUFTSykgPj4gV0xBTl9HUElPX1BJTjRfUEFEX0RSSVZFUl9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU40X1BBRF9EUklWRVJfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjRfUEFEX0RSSVZFUl9MU0IpICYgV0xBTl9HUElPX1BJTjRfUEFEX0RSSVZFUl9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElONF9TT1VSQ0VfTVNCICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjRfU09VUkNFX0xTQiAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU40X1NPVVJDRV9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBXTEFOX0dQSU9fUElONF9TT1VSQ0VfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjRfU09VUkNFX01BU0spID4+IFdMQU5fR1BJT19QSU40X1NPVVJDRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU40X1NPVVJDRV9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjRfU09VUkNFX0xTQikgJiBXTEFOX0dQSU9fUElONF9TT1VSQ0VfTUFTSykKLQotI2RlZmluZSBXTEFOX0dQSU9fUElONV9BRERSRVNTICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM2MKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjVfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDNjCi0jZGVmaW5lIFdMQU5fR1BJT19QSU41X0NPTkZJR19NU0IgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjVfQ09ORklHX0xTQiAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBXTEFOX0dQSU9fUElONV9DT05GSUdfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDM4MDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjVfQ09ORklHX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU41X0NPTkZJR19NQVNLKSA+PiBXTEFOX0dQSU9fUElONV9DT05GSUdfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElONV9DT05GSUdfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU41X0NPTkZJR19MU0IpICYgV0xBTl9HUElPX1BJTjVfQ09ORklHX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU41X1dBS0VVUF9FTkFCTEVfTVNCICAgICAgICAgMTAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjVfV0FLRVVQX0VOQUJMRV9MU0IgICAgICAgICAxMAotI2RlZmluZSBXTEFOX0dQSU9fUElONV9XQUtFVVBfRU5BQkxFX01BU0sgICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjVfV0FLRVVQX0VOQUJMRV9HRVQoeCkgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU41X1dBS0VVUF9FTkFCTEVfTUFTSykgPj4gV0xBTl9HUElPX1BJTjVfV0FLRVVQX0VOQUJMRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU41X1dBS0VVUF9FTkFCTEVfU0VUKHgpICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjVfV0FLRVVQX0VOQUJMRV9MU0IpICYgV0xBTl9HUElPX1BJTjVfV0FLRVVQX0VOQUJMRV9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElONV9JTlRfVFlQRV9NU0IgICAgICAgICAgICAgIDkKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjVfSU5UX1RZUEVfTFNCICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU41X0lOVF9UWVBFX01BU0sgICAgICAgICAgICAgMHgwMDAwMDM4MAotI2RlZmluZSBXTEFOX0dQSU9fUElONV9JTlRfVFlQRV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjVfSU5UX1RZUEVfTUFTSykgPj4gV0xBTl9HUElPX1BJTjVfSU5UX1RZUEVfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElONV9JTlRfVFlQRV9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU41X0lOVF9UWVBFX0xTQikgJiBXTEFOX0dQSU9fUElONV9JTlRfVFlQRV9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElONV9QQURfUFVMTF9NU0IgICAgICAgICAgICAgIDYKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjVfUEFEX1BVTExfTFNCICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU41X1BBRF9QVUxMX01BU0sgICAgICAgICAgICAgMHgwMDAwMDA2MAotI2RlZmluZSBXTEFOX0dQSU9fUElONV9QQURfUFVMTF9HRVQoeCkgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjVfUEFEX1BVTExfTUFTSykgPj4gV0xBTl9HUElPX1BJTjVfUEFEX1BVTExfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElONV9QQURfUFVMTF9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU41X1BBRF9QVUxMX0xTQikgJiBXTEFOX0dQSU9fUElONV9QQURfUFVMTF9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElONV9QQURfU1RSRU5HVEhfTVNCICAgICAgICAgIDQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjVfUEFEX1NUUkVOR1RIX0xTQiAgICAgICAgICAzCi0jZGVmaW5lIFdMQU5fR1BJT19QSU41X1BBRF9TVFJFTkdUSF9NQVNLICAgICAgICAgMHgwMDAwMDAxOAotI2RlZmluZSBXTEFOX0dQSU9fUElONV9QQURfU1RSRU5HVEhfR0VUKHgpICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjVfUEFEX1NUUkVOR1RIX01BU0spID4+IFdMQU5fR1BJT19QSU41X1BBRF9TVFJFTkdUSF9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU41X1BBRF9TVFJFTkdUSF9TRVQoeCkgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjVfUEFEX1NUUkVOR1RIX0xTQikgJiBXTEFOX0dQSU9fUElONV9QQURfU1RSRU5HVEhfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjVfUEFEX0RSSVZFUl9NU0IgICAgICAgICAgICAyCi0jZGVmaW5lIFdMQU5fR1BJT19QSU41X1BBRF9EUklWRVJfTFNCICAgICAgICAgICAgMgotI2RlZmluZSBXTEFOX0dQSU9fUElONV9QQURfRFJJVkVSX01BU0sgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjVfUEFEX0RSSVZFUl9HRVQoeCkgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU41X1BBRF9EUklWRVJfTUFTSykgPj4gV0xBTl9HUElPX1BJTjVfUEFEX0RSSVZFUl9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU41X1BBRF9EUklWRVJfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjVfUEFEX0RSSVZFUl9MU0IpICYgV0xBTl9HUElPX1BJTjVfUEFEX0RSSVZFUl9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElONV9TT1VSQ0VfTVNCICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjVfU09VUkNFX0xTQiAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU41X1NPVVJDRV9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBXTEFOX0dQSU9fUElONV9TT1VSQ0VfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjVfU09VUkNFX01BU0spID4+IFdMQU5fR1BJT19QSU41X1NPVVJDRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU41X1NPVVJDRV9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjVfU09VUkNFX0xTQikgJiBXTEFOX0dQSU9fUElONV9TT1VSQ0VfTUFTSykKLQotI2RlZmluZSBXTEFOX0dQSU9fUElONl9BRERSRVNTICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjZfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU42X0NPTkZJR19NU0IgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjZfQ09ORklHX0xTQiAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBXTEFOX0dQSU9fUElONl9DT05GSUdfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDM4MDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjZfQ09ORklHX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU42X0NPTkZJR19NQVNLKSA+PiBXTEFOX0dQSU9fUElONl9DT05GSUdfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElONl9DT05GSUdfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU42X0NPTkZJR19MU0IpICYgV0xBTl9HUElPX1BJTjZfQ09ORklHX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU42X1dBS0VVUF9FTkFCTEVfTVNCICAgICAgICAgMTAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjZfV0FLRVVQX0VOQUJMRV9MU0IgICAgICAgICAxMAotI2RlZmluZSBXTEFOX0dQSU9fUElONl9XQUtFVVBfRU5BQkxFX01BU0sgICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjZfV0FLRVVQX0VOQUJMRV9HRVQoeCkgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU42X1dBS0VVUF9FTkFCTEVfTUFTSykgPj4gV0xBTl9HUElPX1BJTjZfV0FLRVVQX0VOQUJMRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU42X1dBS0VVUF9FTkFCTEVfU0VUKHgpICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjZfV0FLRVVQX0VOQUJMRV9MU0IpICYgV0xBTl9HUElPX1BJTjZfV0FLRVVQX0VOQUJMRV9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElONl9JTlRfVFlQRV9NU0IgICAgICAgICAgICAgIDkKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjZfSU5UX1RZUEVfTFNCICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU42X0lOVF9UWVBFX01BU0sgICAgICAgICAgICAgMHgwMDAwMDM4MAotI2RlZmluZSBXTEFOX0dQSU9fUElONl9JTlRfVFlQRV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjZfSU5UX1RZUEVfTUFTSykgPj4gV0xBTl9HUElPX1BJTjZfSU5UX1RZUEVfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElONl9JTlRfVFlQRV9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU42X0lOVF9UWVBFX0xTQikgJiBXTEFOX0dQSU9fUElONl9JTlRfVFlQRV9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElONl9QQURfUFVMTF9NU0IgICAgICAgICAgICAgIDYKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjZfUEFEX1BVTExfTFNCICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU42X1BBRF9QVUxMX01BU0sgICAgICAgICAgICAgMHgwMDAwMDA2MAotI2RlZmluZSBXTEFOX0dQSU9fUElONl9QQURfUFVMTF9HRVQoeCkgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjZfUEFEX1BVTExfTUFTSykgPj4gV0xBTl9HUElPX1BJTjZfUEFEX1BVTExfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElONl9QQURfUFVMTF9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU42X1BBRF9QVUxMX0xTQikgJiBXTEFOX0dQSU9fUElONl9QQURfUFVMTF9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElONl9QQURfU1RSRU5HVEhfTVNCICAgICAgICAgIDQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjZfUEFEX1NUUkVOR1RIX0xTQiAgICAgICAgICAzCi0jZGVmaW5lIFdMQU5fR1BJT19QSU42X1BBRF9TVFJFTkdUSF9NQVNLICAgICAgICAgMHgwMDAwMDAxOAotI2RlZmluZSBXTEFOX0dQSU9fUElONl9QQURfU1RSRU5HVEhfR0VUKHgpICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjZfUEFEX1NUUkVOR1RIX01BU0spID4+IFdMQU5fR1BJT19QSU42X1BBRF9TVFJFTkdUSF9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU42X1BBRF9TVFJFTkdUSF9TRVQoeCkgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjZfUEFEX1NUUkVOR1RIX0xTQikgJiBXTEFOX0dQSU9fUElONl9QQURfU1RSRU5HVEhfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjZfUEFEX0RSSVZFUl9NU0IgICAgICAgICAgICAyCi0jZGVmaW5lIFdMQU5fR1BJT19QSU42X1BBRF9EUklWRVJfTFNCICAgICAgICAgICAgMgotI2RlZmluZSBXTEFOX0dQSU9fUElONl9QQURfRFJJVkVSX01BU0sgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjZfUEFEX0RSSVZFUl9HRVQoeCkgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU42X1BBRF9EUklWRVJfTUFTSykgPj4gV0xBTl9HUElPX1BJTjZfUEFEX0RSSVZFUl9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU42X1BBRF9EUklWRVJfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjZfUEFEX0RSSVZFUl9MU0IpICYgV0xBTl9HUElPX1BJTjZfUEFEX0RSSVZFUl9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElONl9TT1VSQ0VfTVNCICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjZfU09VUkNFX0xTQiAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU42X1NPVVJDRV9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBXTEFOX0dQSU9fUElONl9TT1VSQ0VfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjZfU09VUkNFX01BU0spID4+IFdMQU5fR1BJT19QSU42X1NPVVJDRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU42X1NPVVJDRV9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjZfU09VUkNFX0xTQikgJiBXTEFOX0dQSU9fUElONl9TT1VSQ0VfTUFTSykKLQotI2RlZmluZSBXTEFOX0dQSU9fUElON19BRERSRVNTICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjdfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ0Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU43X0NPTkZJR19NU0IgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjdfQ09ORklHX0xTQiAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBXTEFOX0dQSU9fUElON19DT05GSUdfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDM4MDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjdfQ09ORklHX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU43X0NPTkZJR19NQVNLKSA+PiBXTEFOX0dQSU9fUElON19DT05GSUdfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElON19DT05GSUdfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU43X0NPTkZJR19MU0IpICYgV0xBTl9HUElPX1BJTjdfQ09ORklHX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU43X1dBS0VVUF9FTkFCTEVfTVNCICAgICAgICAgMTAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjdfV0FLRVVQX0VOQUJMRV9MU0IgICAgICAgICAxMAotI2RlZmluZSBXTEFOX0dQSU9fUElON19XQUtFVVBfRU5BQkxFX01BU0sgICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjdfV0FLRVVQX0VOQUJMRV9HRVQoeCkgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU43X1dBS0VVUF9FTkFCTEVfTUFTSykgPj4gV0xBTl9HUElPX1BJTjdfV0FLRVVQX0VOQUJMRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU43X1dBS0VVUF9FTkFCTEVfU0VUKHgpICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjdfV0FLRVVQX0VOQUJMRV9MU0IpICYgV0xBTl9HUElPX1BJTjdfV0FLRVVQX0VOQUJMRV9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElON19JTlRfVFlQRV9NU0IgICAgICAgICAgICAgIDkKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjdfSU5UX1RZUEVfTFNCICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU43X0lOVF9UWVBFX01BU0sgICAgICAgICAgICAgMHgwMDAwMDM4MAotI2RlZmluZSBXTEFOX0dQSU9fUElON19JTlRfVFlQRV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjdfSU5UX1RZUEVfTUFTSykgPj4gV0xBTl9HUElPX1BJTjdfSU5UX1RZUEVfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElON19JTlRfVFlQRV9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU43X0lOVF9UWVBFX0xTQikgJiBXTEFOX0dQSU9fUElON19JTlRfVFlQRV9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElON19QQURfUFVMTF9NU0IgICAgICAgICAgICAgIDYKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjdfUEFEX1BVTExfTFNCICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU43X1BBRF9QVUxMX01BU0sgICAgICAgICAgICAgMHgwMDAwMDA2MAotI2RlZmluZSBXTEFOX0dQSU9fUElON19QQURfUFVMTF9HRVQoeCkgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjdfUEFEX1BVTExfTUFTSykgPj4gV0xBTl9HUElPX1BJTjdfUEFEX1BVTExfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElON19QQURfUFVMTF9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU43X1BBRF9QVUxMX0xTQikgJiBXTEFOX0dQSU9fUElON19QQURfUFVMTF9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElON19QQURfU1RSRU5HVEhfTVNCICAgICAgICAgIDQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjdfUEFEX1NUUkVOR1RIX0xTQiAgICAgICAgICAzCi0jZGVmaW5lIFdMQU5fR1BJT19QSU43X1BBRF9TVFJFTkdUSF9NQVNLICAgICAgICAgMHgwMDAwMDAxOAotI2RlZmluZSBXTEFOX0dQSU9fUElON19QQURfU1RSRU5HVEhfR0VUKHgpICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjdfUEFEX1NUUkVOR1RIX01BU0spID4+IFdMQU5fR1BJT19QSU43X1BBRF9TVFJFTkdUSF9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU43X1BBRF9TVFJFTkdUSF9TRVQoeCkgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjdfUEFEX1NUUkVOR1RIX0xTQikgJiBXTEFOX0dQSU9fUElON19QQURfU1RSRU5HVEhfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjdfUEFEX0RSSVZFUl9NU0IgICAgICAgICAgICAyCi0jZGVmaW5lIFdMQU5fR1BJT19QSU43X1BBRF9EUklWRVJfTFNCICAgICAgICAgICAgMgotI2RlZmluZSBXTEFOX0dQSU9fUElON19QQURfRFJJVkVSX01BU0sgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjdfUEFEX0RSSVZFUl9HRVQoeCkgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU43X1BBRF9EUklWRVJfTUFTSykgPj4gV0xBTl9HUElPX1BJTjdfUEFEX0RSSVZFUl9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU43X1BBRF9EUklWRVJfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjdfUEFEX0RSSVZFUl9MU0IpICYgV0xBTl9HUElPX1BJTjdfUEFEX0RSSVZFUl9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElON19TT1VSQ0VfTVNCICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjdfU09VUkNFX0xTQiAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU43X1NPVVJDRV9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBXTEFOX0dQSU9fUElON19TT1VSQ0VfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjdfU09VUkNFX01BU0spID4+IFdMQU5fR1BJT19QSU43X1NPVVJDRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU43X1NPVVJDRV9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjdfU09VUkNFX0xTQikgJiBXTEFOX0dQSU9fUElON19TT1VSQ0VfTUFTSykKLQotI2RlZmluZSBXTEFOX0dQSU9fUElOOF9BRERSRVNTICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDgKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjhfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ4Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU44X0NPTkZJR19NU0IgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjhfQ09ORklHX0xTQiAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBXTEFOX0dQSU9fUElOOF9DT05GSUdfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDM4MDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjhfQ09ORklHX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU44X0NPTkZJR19NQVNLKSA+PiBXTEFOX0dQSU9fUElOOF9DT05GSUdfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOOF9DT05GSUdfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU44X0NPTkZJR19MU0IpICYgV0xBTl9HUElPX1BJTjhfQ09ORklHX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU44X1dBS0VVUF9FTkFCTEVfTVNCICAgICAgICAgMTAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjhfV0FLRVVQX0VOQUJMRV9MU0IgICAgICAgICAxMAotI2RlZmluZSBXTEFOX0dQSU9fUElOOF9XQUtFVVBfRU5BQkxFX01BU0sgICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjhfV0FLRVVQX0VOQUJMRV9HRVQoeCkgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU44X1dBS0VVUF9FTkFCTEVfTUFTSykgPj4gV0xBTl9HUElPX1BJTjhfV0FLRVVQX0VOQUJMRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU44X1dBS0VVUF9FTkFCTEVfU0VUKHgpICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjhfV0FLRVVQX0VOQUJMRV9MU0IpICYgV0xBTl9HUElPX1BJTjhfV0FLRVVQX0VOQUJMRV9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOOF9JTlRfVFlQRV9NU0IgICAgICAgICAgICAgIDkKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjhfSU5UX1RZUEVfTFNCICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU44X0lOVF9UWVBFX01BU0sgICAgICAgICAgICAgMHgwMDAwMDM4MAotI2RlZmluZSBXTEFOX0dQSU9fUElOOF9JTlRfVFlQRV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjhfSU5UX1RZUEVfTUFTSykgPj4gV0xBTl9HUElPX1BJTjhfSU5UX1RZUEVfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOOF9JTlRfVFlQRV9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU44X0lOVF9UWVBFX0xTQikgJiBXTEFOX0dQSU9fUElOOF9JTlRfVFlQRV9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOOF9QQURfUFVMTF9NU0IgICAgICAgICAgICAgIDYKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjhfUEFEX1BVTExfTFNCICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU44X1BBRF9QVUxMX01BU0sgICAgICAgICAgICAgMHgwMDAwMDA2MAotI2RlZmluZSBXTEFOX0dQSU9fUElOOF9QQURfUFVMTF9HRVQoeCkgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjhfUEFEX1BVTExfTUFTSykgPj4gV0xBTl9HUElPX1BJTjhfUEFEX1BVTExfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOOF9QQURfUFVMTF9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU44X1BBRF9QVUxMX0xTQikgJiBXTEFOX0dQSU9fUElOOF9QQURfUFVMTF9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOOF9QQURfU1RSRU5HVEhfTVNCICAgICAgICAgIDQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjhfUEFEX1NUUkVOR1RIX0xTQiAgICAgICAgICAzCi0jZGVmaW5lIFdMQU5fR1BJT19QSU44X1BBRF9TVFJFTkdUSF9NQVNLICAgICAgICAgMHgwMDAwMDAxOAotI2RlZmluZSBXTEFOX0dQSU9fUElOOF9QQURfU1RSRU5HVEhfR0VUKHgpICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjhfUEFEX1NUUkVOR1RIX01BU0spID4+IFdMQU5fR1BJT19QSU44X1BBRF9TVFJFTkdUSF9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU44X1BBRF9TVFJFTkdUSF9TRVQoeCkgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjhfUEFEX1NUUkVOR1RIX0xTQikgJiBXTEFOX0dQSU9fUElOOF9QQURfU1RSRU5HVEhfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjhfUEFEX0RSSVZFUl9NU0IgICAgICAgICAgICAyCi0jZGVmaW5lIFdMQU5fR1BJT19QSU44X1BBRF9EUklWRVJfTFNCICAgICAgICAgICAgMgotI2RlZmluZSBXTEFOX0dQSU9fUElOOF9QQURfRFJJVkVSX01BU0sgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjhfUEFEX0RSSVZFUl9HRVQoeCkgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU44X1BBRF9EUklWRVJfTUFTSykgPj4gV0xBTl9HUElPX1BJTjhfUEFEX0RSSVZFUl9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU44X1BBRF9EUklWRVJfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjhfUEFEX0RSSVZFUl9MU0IpICYgV0xBTl9HUElPX1BJTjhfUEFEX0RSSVZFUl9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOOF9TT1VSQ0VfTVNCICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjhfU09VUkNFX0xTQiAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU44X1NPVVJDRV9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBXTEFOX0dQSU9fUElOOF9TT1VSQ0VfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjhfU09VUkNFX01BU0spID4+IFdMQU5fR1BJT19QSU44X1NPVVJDRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU44X1NPVVJDRV9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjhfU09VUkNFX0xTQikgJiBXTEFOX0dQSU9fUElOOF9TT1VSQ0VfTUFTSykKLQotI2RlZmluZSBXTEFOX0dQSU9fUElOOV9BRERSRVNTICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNGMKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjlfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDRjCi0jZGVmaW5lIFdMQU5fR1BJT19QSU45X0NPTkZJR19NU0IgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjlfQ09ORklHX0xTQiAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBXTEFOX0dQSU9fUElOOV9DT05GSUdfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDM4MDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjlfQ09ORklHX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU45X0NPTkZJR19NQVNLKSA+PiBXTEFOX0dQSU9fUElOOV9DT05GSUdfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOOV9DT05GSUdfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU45X0NPTkZJR19MU0IpICYgV0xBTl9HUElPX1BJTjlfQ09ORklHX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU45X1dBS0VVUF9FTkFCTEVfTVNCICAgICAgICAgMTAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjlfV0FLRVVQX0VOQUJMRV9MU0IgICAgICAgICAxMAotI2RlZmluZSBXTEFOX0dQSU9fUElOOV9XQUtFVVBfRU5BQkxFX01BU0sgICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjlfV0FLRVVQX0VOQUJMRV9HRVQoeCkgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU45X1dBS0VVUF9FTkFCTEVfTUFTSykgPj4gV0xBTl9HUElPX1BJTjlfV0FLRVVQX0VOQUJMRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU45X1dBS0VVUF9FTkFCTEVfU0VUKHgpICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjlfV0FLRVVQX0VOQUJMRV9MU0IpICYgV0xBTl9HUElPX1BJTjlfV0FLRVVQX0VOQUJMRV9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOOV9JTlRfVFlQRV9NU0IgICAgICAgICAgICAgIDkKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjlfSU5UX1RZUEVfTFNCICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU45X0lOVF9UWVBFX01BU0sgICAgICAgICAgICAgMHgwMDAwMDM4MAotI2RlZmluZSBXTEFOX0dQSU9fUElOOV9JTlRfVFlQRV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjlfSU5UX1RZUEVfTUFTSykgPj4gV0xBTl9HUElPX1BJTjlfSU5UX1RZUEVfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOOV9JTlRfVFlQRV9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU45X0lOVF9UWVBFX0xTQikgJiBXTEFOX0dQSU9fUElOOV9JTlRfVFlQRV9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOOV9QQURfUFVMTF9NU0IgICAgICAgICAgICAgIDYKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjlfUEFEX1BVTExfTFNCICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU45X1BBRF9QVUxMX01BU0sgICAgICAgICAgICAgMHgwMDAwMDA2MAotI2RlZmluZSBXTEFOX0dQSU9fUElOOV9QQURfUFVMTF9HRVQoeCkgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjlfUEFEX1BVTExfTUFTSykgPj4gV0xBTl9HUElPX1BJTjlfUEFEX1BVTExfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOOV9QQURfUFVMTF9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU45X1BBRF9QVUxMX0xTQikgJiBXTEFOX0dQSU9fUElOOV9QQURfUFVMTF9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOOV9QQURfU1RSRU5HVEhfTVNCICAgICAgICAgIDQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjlfUEFEX1NUUkVOR1RIX0xTQiAgICAgICAgICAzCi0jZGVmaW5lIFdMQU5fR1BJT19QSU45X1BBRF9TVFJFTkdUSF9NQVNLICAgICAgICAgMHgwMDAwMDAxOAotI2RlZmluZSBXTEFOX0dQSU9fUElOOV9QQURfU1RSRU5HVEhfR0VUKHgpICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjlfUEFEX1NUUkVOR1RIX01BU0spID4+IFdMQU5fR1BJT19QSU45X1BBRF9TVFJFTkdUSF9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU45X1BBRF9TVFJFTkdUSF9TRVQoeCkgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjlfUEFEX1NUUkVOR1RIX0xTQikgJiBXTEFOX0dQSU9fUElOOV9QQURfU1RSRU5HVEhfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjlfUEFEX0RSSVZFUl9NU0IgICAgICAgICAgICAyCi0jZGVmaW5lIFdMQU5fR1BJT19QSU45X1BBRF9EUklWRVJfTFNCICAgICAgICAgICAgMgotI2RlZmluZSBXTEFOX0dQSU9fUElOOV9QQURfRFJJVkVSX01BU0sgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjlfUEFEX0RSSVZFUl9HRVQoeCkgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU45X1BBRF9EUklWRVJfTUFTSykgPj4gV0xBTl9HUElPX1BJTjlfUEFEX0RSSVZFUl9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU45X1BBRF9EUklWRVJfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjlfUEFEX0RSSVZFUl9MU0IpICYgV0xBTl9HUElPX1BJTjlfUEFEX0RSSVZFUl9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOOV9TT1VSQ0VfTVNCICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjlfU09VUkNFX0xTQiAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU45X1NPVVJDRV9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBXTEFOX0dQSU9fUElOOV9TT1VSQ0VfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjlfU09VUkNFX01BU0spID4+IFdMQU5fR1BJT19QSU45X1NPVVJDRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU45X1NPVVJDRV9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjlfU09VUkNFX0xTQikgJiBXTEFOX0dQSU9fUElOOV9TT1VSQ0VfTUFTSykKLQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTBfQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEwX09GRlNFVCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDUwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMF9DT05GSUdfTVNCICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEwX0NPTkZJR19MU0IgICAgICAgICAgICAgICAxMQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTBfQ09ORklHX01BU0sgICAgICAgICAgICAgIDB4MDAwMDM4MDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEwX0NPTkZJR19HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4xMF9DT05GSUdfTUFTSykgPj4gV0xBTl9HUElPX1BJTjEwX0NPTkZJR19MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMF9DT05GSUdfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjEwX0NPTkZJR19MU0IpICYgV0xBTl9HUElPX1BJTjEwX0NPTkZJR19NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTBfV0FLRVVQX0VOQUJMRV9NU0IgICAgICAgIDEwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMF9XQUtFVVBfRU5BQkxFX0xTQiAgICAgICAgMTAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEwX1dBS0VVUF9FTkFCTEVfTUFTSyAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMF9XQUtFVVBfRU5BQkxFX0dFVCh4KSAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMTBfV0FLRVVQX0VOQUJMRV9NQVNLKSA+PiBXTEFOX0dQSU9fUElOMTBfV0FLRVVQX0VOQUJMRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMF9XQUtFVVBfRU5BQkxFX1NFVCh4KSAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjEwX1dBS0VVUF9FTkFCTEVfTFNCKSAmIFdMQU5fR1BJT19QSU4xMF9XQUtFVVBfRU5BQkxFX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMF9JTlRfVFlQRV9NU0IgICAgICAgICAgICAgOQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTBfSU5UX1RZUEVfTFNCICAgICAgICAgICAgIDcKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEwX0lOVF9UWVBFX01BU0sgICAgICAgICAgICAweDAwMDAwMzgwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMF9JTlRfVFlQRV9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMTBfSU5UX1RZUEVfTUFTSykgPj4gV0xBTl9HUElPX1BJTjEwX0lOVF9UWVBFX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEwX0lOVF9UWVBFX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMTBfSU5UX1RZUEVfTFNCKSAmIFdMQU5fR1BJT19QSU4xMF9JTlRfVFlQRV9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTBfUEFEX1BVTExfTVNCICAgICAgICAgICAgIDYKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEwX1BBRF9QVUxMX0xTQiAgICAgICAgICAgICA1Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMF9QQURfUFVMTF9NQVNLICAgICAgICAgICAgMHgwMDAwMDA2MAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTBfUEFEX1BVTExfR0VUKHgpICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjEwX1BBRF9QVUxMX01BU0spID4+IFdMQU5fR1BJT19QSU4xMF9QQURfUFVMTF9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMF9QQURfUFVMTF9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjEwX1BBRF9QVUxMX0xTQikgJiBXTEFOX0dQSU9fUElOMTBfUEFEX1BVTExfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEwX1BBRF9TVFJFTkdUSF9NU0IgICAgICAgICA0Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMF9QQURfU1RSRU5HVEhfTFNCICAgICAgICAgMwotI2RlZmluZSBXTEFOX0dQSU9fUElOMTBfUEFEX1NUUkVOR1RIX01BU0sgICAgICAgIDB4MDAwMDAwMTgKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEwX1BBRF9TVFJFTkdUSF9HRVQoeCkgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4xMF9QQURfU1RSRU5HVEhfTUFTSykgPj4gV0xBTl9HUElPX1BJTjEwX1BBRF9TVFJFTkdUSF9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMF9QQURfU1RSRU5HVEhfU0VUKHgpICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjEwX1BBRF9TVFJFTkdUSF9MU0IpICYgV0xBTl9HUElPX1BJTjEwX1BBRF9TVFJFTkdUSF9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTBfUEFEX0RSSVZFUl9NU0IgICAgICAgICAgIDIKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEwX1BBRF9EUklWRVJfTFNCICAgICAgICAgICAyCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMF9QQURfRFJJVkVSX01BU0sgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTBfUEFEX0RSSVZFUl9HRVQoeCkgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjEwX1BBRF9EUklWRVJfTUFTSykgPj4gV0xBTl9HUElPX1BJTjEwX1BBRF9EUklWRVJfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTBfUEFEX0RSSVZFUl9TRVQoeCkgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4xMF9QQURfRFJJVkVSX0xTQikgJiBXTEFOX0dQSU9fUElOMTBfUEFEX0RSSVZFUl9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTBfU09VUkNFX01TQiAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEwX1NPVVJDRV9MU0IgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMF9TT1VSQ0VfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTBfU09VUkNFX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjEwX1NPVVJDRV9NQVNLKSA+PiBXTEFOX0dQSU9fUElOMTBfU09VUkNFX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEwX1NPVVJDRV9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMTBfU09VUkNFX0xTQikgJiBXTEFOX0dQSU9fUElOMTBfU09VUkNFX01BU0spCi0KLSNkZWZpbmUgV0xBTl9HUElPX1BJTjExX0FERFJFU1MgICAgICAgICAgICAgICAgICAweDAwMDAwMDU0Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMV9PRkZTRVQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1NAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTFfQ09ORklHX01TQiAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMV9DT05GSUdfTFNCICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjExX0NPTkZJR19NQVNLICAgICAgICAgICAgICAweDAwMDAzODAwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMV9DT05GSUdfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMTFfQ09ORklHX01BU0spID4+IFdMQU5fR1BJT19QSU4xMV9DT05GSUdfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTFfQ09ORklHX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4xMV9DT05GSUdfTFNCKSAmIFdMQU5fR1BJT19QSU4xMV9DT05GSUdfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjExX1dBS0VVUF9FTkFCTEVfTVNCICAgICAgICAxMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTFfV0FLRVVQX0VOQUJMRV9MU0IgICAgICAgIDEwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMV9XQUtFVVBfRU5BQkxFX01BU0sgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTFfV0FLRVVQX0VOQUJMRV9HRVQoeCkgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjExX1dBS0VVUF9FTkFCTEVfTUFTSykgPj4gV0xBTl9HUElPX1BJTjExX1dBS0VVUF9FTkFCTEVfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTFfV0FLRVVQX0VOQUJMRV9TRVQoeCkgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4xMV9XQUtFVVBfRU5BQkxFX0xTQikgJiBXTEFOX0dQSU9fUElOMTFfV0FLRVVQX0VOQUJMRV9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTFfSU5UX1RZUEVfTVNCICAgICAgICAgICAgIDkKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjExX0lOVF9UWVBFX0xTQiAgICAgICAgICAgICA3Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMV9JTlRfVFlQRV9NQVNLICAgICAgICAgICAgMHgwMDAwMDM4MAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTFfSU5UX1RZUEVfR0VUKHgpICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjExX0lOVF9UWVBFX01BU0spID4+IFdMQU5fR1BJT19QSU4xMV9JTlRfVFlQRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMV9JTlRfVFlQRV9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjExX0lOVF9UWVBFX0xTQikgJiBXTEFOX0dQSU9fUElOMTFfSU5UX1RZUEVfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjExX1BBRF9QVUxMX01TQiAgICAgICAgICAgICA2Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMV9QQURfUFVMTF9MU0IgICAgICAgICAgICAgNQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTFfUEFEX1BVTExfTUFTSyAgICAgICAgICAgIDB4MDAwMDAwNjAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjExX1BBRF9QVUxMX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4xMV9QQURfUFVMTF9NQVNLKSA+PiBXTEFOX0dQSU9fUElOMTFfUEFEX1BVTExfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTFfUEFEX1BVTExfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4xMV9QQURfUFVMTF9MU0IpICYgV0xBTl9HUElPX1BJTjExX1BBRF9QVUxMX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMV9QQURfU1RSRU5HVEhfTVNCICAgICAgICAgNAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTFfUEFEX1NUUkVOR1RIX0xTQiAgICAgICAgIDMKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjExX1BBRF9TVFJFTkdUSF9NQVNLICAgICAgICAweDAwMDAwMDE4Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMV9QQURfU1RSRU5HVEhfR0VUKHgpICAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMTFfUEFEX1NUUkVOR1RIX01BU0spID4+IFdMQU5fR1BJT19QSU4xMV9QQURfU1RSRU5HVEhfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTFfUEFEX1NUUkVOR1RIX1NFVCh4KSAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4xMV9QQURfU1RSRU5HVEhfTFNCKSAmIFdMQU5fR1BJT19QSU4xMV9QQURfU1RSRU5HVEhfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjExX1BBRF9EUklWRVJfTVNCICAgICAgICAgICAyCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMV9QQURfRFJJVkVSX0xTQiAgICAgICAgICAgMgotI2RlZmluZSBXTEFOX0dQSU9fUElOMTFfUEFEX0RSSVZFUl9NQVNLICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjExX1BBRF9EUklWRVJfR0VUKHgpICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4xMV9QQURfRFJJVkVSX01BU0spID4+IFdMQU5fR1BJT19QSU4xMV9QQURfRFJJVkVSX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjExX1BBRF9EUklWRVJfU0VUKHgpICAgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMTFfUEFEX0RSSVZFUl9MU0IpICYgV0xBTl9HUElPX1BJTjExX1BBRF9EUklWRVJfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjExX1NPVVJDRV9NU0IgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMV9TT1VSQ0VfTFNCICAgICAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTFfU09VUkNFX01BU0sgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjExX1NPVVJDRV9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4xMV9TT1VSQ0VfTUFTSykgPj4gV0xBTl9HUElPX1BJTjExX1NPVVJDRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMV9TT1VSQ0VfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjExX1NPVVJDRV9MU0IpICYgV0xBTl9HUElPX1BJTjExX1NPVVJDRV9NQVNLKQotCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMl9BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1OAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTJfT0ZGU0VUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTgKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEyX0NPTkZJR19NU0IgICAgICAgICAgICAgICAxMwotI2RlZmluZSBXTEFOX0dQSU9fUElOMTJfQ09ORklHX0xTQiAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMl9DT05GSUdfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMzgwMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTJfQ09ORklHX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjEyX0NPTkZJR19NQVNLKSA+PiBXTEFOX0dQSU9fUElOMTJfQ09ORklHX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEyX0NPTkZJR19TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMTJfQ09ORklHX0xTQikgJiBXTEFOX0dQSU9fUElOMTJfQ09ORklHX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMl9XQUtFVVBfRU5BQkxFX01TQiAgICAgICAgMTAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEyX1dBS0VVUF9FTkFCTEVfTFNCICAgICAgICAxMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTJfV0FLRVVQX0VOQUJMRV9NQVNLICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEyX1dBS0VVUF9FTkFCTEVfR0VUKHgpICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4xMl9XQUtFVVBfRU5BQkxFX01BU0spID4+IFdMQU5fR1BJT19QSU4xMl9XQUtFVVBfRU5BQkxFX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEyX1dBS0VVUF9FTkFCTEVfU0VUKHgpICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMTJfV0FLRVVQX0VOQUJMRV9MU0IpICYgV0xBTl9HUElPX1BJTjEyX1dBS0VVUF9FTkFCTEVfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEyX0lOVF9UWVBFX01TQiAgICAgICAgICAgICA5Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMl9JTlRfVFlQRV9MU0IgICAgICAgICAgICAgNwotI2RlZmluZSBXTEFOX0dQSU9fUElOMTJfSU5UX1RZUEVfTUFTSyAgICAgICAgICAgIDB4MDAwMDAzODAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEyX0lOVF9UWVBFX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4xMl9JTlRfVFlQRV9NQVNLKSA+PiBXTEFOX0dQSU9fUElOMTJfSU5UX1RZUEVfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTJfSU5UX1RZUEVfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4xMl9JTlRfVFlQRV9MU0IpICYgV0xBTl9HUElPX1BJTjEyX0lOVF9UWVBFX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMl9QQURfUFVMTF9NU0IgICAgICAgICAgICAgNgotI2RlZmluZSBXTEFOX0dQSU9fUElOMTJfUEFEX1BVTExfTFNCICAgICAgICAgICAgIDUKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEyX1BBRF9QVUxMX01BU0sgICAgICAgICAgICAweDAwMDAwMDYwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMl9QQURfUFVMTF9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMTJfUEFEX1BVTExfTUFTSykgPj4gV0xBTl9HUElPX1BJTjEyX1BBRF9QVUxMX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEyX1BBRF9QVUxMX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMTJfUEFEX1BVTExfTFNCKSAmIFdMQU5fR1BJT19QSU4xMl9QQURfUFVMTF9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTJfUEFEX1NUUkVOR1RIX01TQiAgICAgICAgIDQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEyX1BBRF9TVFJFTkdUSF9MU0IgICAgICAgICAzCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMl9QQURfU1RSRU5HVEhfTUFTSyAgICAgICAgMHgwMDAwMDAxOAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTJfUEFEX1NUUkVOR1RIX0dFVCh4KSAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjEyX1BBRF9TVFJFTkdUSF9NQVNLKSA+PiBXTEFOX0dQSU9fUElOMTJfUEFEX1NUUkVOR1RIX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEyX1BBRF9TVFJFTkdUSF9TRVQoeCkgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMTJfUEFEX1NUUkVOR1RIX0xTQikgJiBXTEFOX0dQSU9fUElOMTJfUEFEX1NUUkVOR1RIX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMl9QQURfRFJJVkVSX01TQiAgICAgICAgICAgMgotI2RlZmluZSBXTEFOX0dQSU9fUElOMTJfUEFEX0RSSVZFUl9MU0IgICAgICAgICAgIDIKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEyX1BBRF9EUklWRVJfTUFTSyAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMl9QQURfRFJJVkVSX0dFVCh4KSAgICAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMTJfUEFEX0RSSVZFUl9NQVNLKSA+PiBXTEFOX0dQSU9fUElOMTJfUEFEX0RSSVZFUl9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMl9QQURfRFJJVkVSX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjEyX1BBRF9EUklWRVJfTFNCKSAmIFdMQU5fR1BJT19QSU4xMl9QQURfRFJJVkVSX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMl9TT1VSQ0VfTVNCICAgICAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTJfU09VUkNFX0xTQiAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEyX1NPVVJDRV9NQVNLICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xMl9TT1VSQ0VfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMTJfU09VUkNFX01BU0spID4+IFdMQU5fR1BJT19QSU4xMl9TT1VSQ0VfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTJfU09VUkNFX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4xMl9TT1VSQ0VfTFNCKSAmIFdMQU5fR1BJT19QSU4xMl9TT1VSQ0VfTUFTSykKLQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTNfQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNWMKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEzX09GRlNFVCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDVjCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xM19DT05GSUdfTVNCICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEzX0NPTkZJR19MU0IgICAgICAgICAgICAgICAxMQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTNfQ09ORklHX01BU0sgICAgICAgICAgICAgIDB4MDAwMDM4MDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEzX0NPTkZJR19HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4xM19DT05GSUdfTUFTSykgPj4gV0xBTl9HUElPX1BJTjEzX0NPTkZJR19MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xM19DT05GSUdfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjEzX0NPTkZJR19MU0IpICYgV0xBTl9HUElPX1BJTjEzX0NPTkZJR19NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTNfV0FLRVVQX0VOQUJMRV9NU0IgICAgICAgIDEwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xM19XQUtFVVBfRU5BQkxFX0xTQiAgICAgICAgMTAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEzX1dBS0VVUF9FTkFCTEVfTUFTSyAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xM19XQUtFVVBfRU5BQkxFX0dFVCh4KSAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMTNfV0FLRVVQX0VOQUJMRV9NQVNLKSA+PiBXTEFOX0dQSU9fUElOMTNfV0FLRVVQX0VOQUJMRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xM19XQUtFVVBfRU5BQkxFX1NFVCh4KSAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjEzX1dBS0VVUF9FTkFCTEVfTFNCKSAmIFdMQU5fR1BJT19QSU4xM19XQUtFVVBfRU5BQkxFX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xM19JTlRfVFlQRV9NU0IgICAgICAgICAgICAgOQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTNfSU5UX1RZUEVfTFNCICAgICAgICAgICAgIDcKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEzX0lOVF9UWVBFX01BU0sgICAgICAgICAgICAweDAwMDAwMzgwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xM19JTlRfVFlQRV9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMTNfSU5UX1RZUEVfTUFTSykgPj4gV0xBTl9HUElPX1BJTjEzX0lOVF9UWVBFX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEzX0lOVF9UWVBFX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMTNfSU5UX1RZUEVfTFNCKSAmIFdMQU5fR1BJT19QSU4xM19JTlRfVFlQRV9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTNfUEFEX1BVTExfTVNCICAgICAgICAgICAgIDYKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEzX1BBRF9QVUxMX0xTQiAgICAgICAgICAgICA1Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4xM19QQURfUFVMTF9NQVNLICAgICAgICAgICAgMHgwMDAwMDA2MAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTNfUEFEX1BVTExfR0VUKHgpICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjEzX1BBRF9QVUxMX01BU0spID4+IFdMQU5fR1BJT19QSU4xM19QQURfUFVMTF9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xM19QQURfUFVMTF9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjEzX1BBRF9QVUxMX0xTQikgJiBXTEFOX0dQSU9fUElOMTNfUEFEX1BVTExfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEzX1BBRF9TVFJFTkdUSF9NU0IgICAgICAgICA0Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4xM19QQURfU1RSRU5HVEhfTFNCICAgICAgICAgMwotI2RlZmluZSBXTEFOX0dQSU9fUElOMTNfUEFEX1NUUkVOR1RIX01BU0sgICAgICAgIDB4MDAwMDAwMTgKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEzX1BBRF9TVFJFTkdUSF9HRVQoeCkgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4xM19QQURfU1RSRU5HVEhfTUFTSykgPj4gV0xBTl9HUElPX1BJTjEzX1BBRF9TVFJFTkdUSF9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xM19QQURfU1RSRU5HVEhfU0VUKHgpICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjEzX1BBRF9TVFJFTkdUSF9MU0IpICYgV0xBTl9HUElPX1BJTjEzX1BBRF9TVFJFTkdUSF9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTNfUEFEX0RSSVZFUl9NU0IgICAgICAgICAgIDIKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEzX1BBRF9EUklWRVJfTFNCICAgICAgICAgICAyCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xM19QQURfRFJJVkVSX01BU0sgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTNfUEFEX0RSSVZFUl9HRVQoeCkgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjEzX1BBRF9EUklWRVJfTUFTSykgPj4gV0xBTl9HUElPX1BJTjEzX1BBRF9EUklWRVJfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTNfUEFEX0RSSVZFUl9TRVQoeCkgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4xM19QQURfRFJJVkVSX0xTQikgJiBXTEFOX0dQSU9fUElOMTNfUEFEX0RSSVZFUl9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTNfU09VUkNFX01TQiAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEzX1NPVVJDRV9MU0IgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xM19TT1VSQ0VfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTNfU09VUkNFX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjEzX1NPVVJDRV9NQVNLKSA+PiBXTEFOX0dQSU9fUElOMTNfU09VUkNFX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjEzX1NPVVJDRV9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMTNfU09VUkNFX0xTQikgJiBXTEFOX0dQSU9fUElOMTNfU09VUkNFX01BU0spCi0KLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE0X0FERFJFU1MgICAgICAgICAgICAgICAgICAweDAwMDAwMDYwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNF9PRkZTRVQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2MAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTRfQ09ORklHX01TQiAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNF9DT05GSUdfTFNCICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE0X0NPTkZJR19NQVNLICAgICAgICAgICAgICAweDAwMDAzODAwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNF9DT05GSUdfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMTRfQ09ORklHX01BU0spID4+IFdMQU5fR1BJT19QSU4xNF9DT05GSUdfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTRfQ09ORklHX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4xNF9DT05GSUdfTFNCKSAmIFdMQU5fR1BJT19QSU4xNF9DT05GSUdfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE0X1dBS0VVUF9FTkFCTEVfTVNCICAgICAgICAxMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTRfV0FLRVVQX0VOQUJMRV9MU0IgICAgICAgIDEwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNF9XQUtFVVBfRU5BQkxFX01BU0sgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTRfV0FLRVVQX0VOQUJMRV9HRVQoeCkgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjE0X1dBS0VVUF9FTkFCTEVfTUFTSykgPj4gV0xBTl9HUElPX1BJTjE0X1dBS0VVUF9FTkFCTEVfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTRfV0FLRVVQX0VOQUJMRV9TRVQoeCkgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4xNF9XQUtFVVBfRU5BQkxFX0xTQikgJiBXTEFOX0dQSU9fUElOMTRfV0FLRVVQX0VOQUJMRV9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTRfSU5UX1RZUEVfTVNCICAgICAgICAgICAgIDkKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE0X0lOVF9UWVBFX0xTQiAgICAgICAgICAgICA3Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNF9JTlRfVFlQRV9NQVNLICAgICAgICAgICAgMHgwMDAwMDM4MAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTRfSU5UX1RZUEVfR0VUKHgpICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjE0X0lOVF9UWVBFX01BU0spID4+IFdMQU5fR1BJT19QSU4xNF9JTlRfVFlQRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNF9JTlRfVFlQRV9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjE0X0lOVF9UWVBFX0xTQikgJiBXTEFOX0dQSU9fUElOMTRfSU5UX1RZUEVfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE0X1BBRF9QVUxMX01TQiAgICAgICAgICAgICA2Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNF9QQURfUFVMTF9MU0IgICAgICAgICAgICAgNQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTRfUEFEX1BVTExfTUFTSyAgICAgICAgICAgIDB4MDAwMDAwNjAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE0X1BBRF9QVUxMX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4xNF9QQURfUFVMTF9NQVNLKSA+PiBXTEFOX0dQSU9fUElOMTRfUEFEX1BVTExfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTRfUEFEX1BVTExfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4xNF9QQURfUFVMTF9MU0IpICYgV0xBTl9HUElPX1BJTjE0X1BBRF9QVUxMX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNF9QQURfU1RSRU5HVEhfTVNCICAgICAgICAgNAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTRfUEFEX1NUUkVOR1RIX0xTQiAgICAgICAgIDMKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE0X1BBRF9TVFJFTkdUSF9NQVNLICAgICAgICAweDAwMDAwMDE4Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNF9QQURfU1RSRU5HVEhfR0VUKHgpICAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMTRfUEFEX1NUUkVOR1RIX01BU0spID4+IFdMQU5fR1BJT19QSU4xNF9QQURfU1RSRU5HVEhfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTRfUEFEX1NUUkVOR1RIX1NFVCh4KSAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4xNF9QQURfU1RSRU5HVEhfTFNCKSAmIFdMQU5fR1BJT19QSU4xNF9QQURfU1RSRU5HVEhfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE0X1BBRF9EUklWRVJfTVNCICAgICAgICAgICAyCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNF9QQURfRFJJVkVSX0xTQiAgICAgICAgICAgMgotI2RlZmluZSBXTEFOX0dQSU9fUElOMTRfUEFEX0RSSVZFUl9NQVNLICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE0X1BBRF9EUklWRVJfR0VUKHgpICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4xNF9QQURfRFJJVkVSX01BU0spID4+IFdMQU5fR1BJT19QSU4xNF9QQURfRFJJVkVSX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE0X1BBRF9EUklWRVJfU0VUKHgpICAgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMTRfUEFEX0RSSVZFUl9MU0IpICYgV0xBTl9HUElPX1BJTjE0X1BBRF9EUklWRVJfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE0X1NPVVJDRV9NU0IgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNF9TT1VSQ0VfTFNCICAgICAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTRfU09VUkNFX01BU0sgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE0X1NPVVJDRV9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4xNF9TT1VSQ0VfTUFTSykgPj4gV0xBTl9HUElPX1BJTjE0X1NPVVJDRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNF9TT1VSQ0VfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjE0X1NPVVJDRV9MU0IpICYgV0xBTl9HUElPX1BJTjE0X1NPVVJDRV9NQVNLKQotCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNV9BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2NAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTVfT0ZGU0VUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE1X0NPTkZJR19NU0IgICAgICAgICAgICAgICAxMwotI2RlZmluZSBXTEFOX0dQSU9fUElOMTVfQ09ORklHX0xTQiAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNV9DT05GSUdfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMzgwMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTVfQ09ORklHX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjE1X0NPTkZJR19NQVNLKSA+PiBXTEFOX0dQSU9fUElOMTVfQ09ORklHX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE1X0NPTkZJR19TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMTVfQ09ORklHX0xTQikgJiBXTEFOX0dQSU9fUElOMTVfQ09ORklHX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNV9XQUtFVVBfRU5BQkxFX01TQiAgICAgICAgMTAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE1X1dBS0VVUF9FTkFCTEVfTFNCICAgICAgICAxMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTVfV0FLRVVQX0VOQUJMRV9NQVNLICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE1X1dBS0VVUF9FTkFCTEVfR0VUKHgpICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4xNV9XQUtFVVBfRU5BQkxFX01BU0spID4+IFdMQU5fR1BJT19QSU4xNV9XQUtFVVBfRU5BQkxFX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE1X1dBS0VVUF9FTkFCTEVfU0VUKHgpICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMTVfV0FLRVVQX0VOQUJMRV9MU0IpICYgV0xBTl9HUElPX1BJTjE1X1dBS0VVUF9FTkFCTEVfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE1X0lOVF9UWVBFX01TQiAgICAgICAgICAgICA5Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNV9JTlRfVFlQRV9MU0IgICAgICAgICAgICAgNwotI2RlZmluZSBXTEFOX0dQSU9fUElOMTVfSU5UX1RZUEVfTUFTSyAgICAgICAgICAgIDB4MDAwMDAzODAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE1X0lOVF9UWVBFX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4xNV9JTlRfVFlQRV9NQVNLKSA+PiBXTEFOX0dQSU9fUElOMTVfSU5UX1RZUEVfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTVfSU5UX1RZUEVfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4xNV9JTlRfVFlQRV9MU0IpICYgV0xBTl9HUElPX1BJTjE1X0lOVF9UWVBFX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNV9QQURfUFVMTF9NU0IgICAgICAgICAgICAgNgotI2RlZmluZSBXTEFOX0dQSU9fUElOMTVfUEFEX1BVTExfTFNCICAgICAgICAgICAgIDUKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE1X1BBRF9QVUxMX01BU0sgICAgICAgICAgICAweDAwMDAwMDYwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNV9QQURfUFVMTF9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMTVfUEFEX1BVTExfTUFTSykgPj4gV0xBTl9HUElPX1BJTjE1X1BBRF9QVUxMX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE1X1BBRF9QVUxMX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMTVfUEFEX1BVTExfTFNCKSAmIFdMQU5fR1BJT19QSU4xNV9QQURfUFVMTF9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTVfUEFEX1NUUkVOR1RIX01TQiAgICAgICAgIDQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE1X1BBRF9TVFJFTkdUSF9MU0IgICAgICAgICAzCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNV9QQURfU1RSRU5HVEhfTUFTSyAgICAgICAgMHgwMDAwMDAxOAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTVfUEFEX1NUUkVOR1RIX0dFVCh4KSAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjE1X1BBRF9TVFJFTkdUSF9NQVNLKSA+PiBXTEFOX0dQSU9fUElOMTVfUEFEX1NUUkVOR1RIX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE1X1BBRF9TVFJFTkdUSF9TRVQoeCkgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMTVfUEFEX1NUUkVOR1RIX0xTQikgJiBXTEFOX0dQSU9fUElOMTVfUEFEX1NUUkVOR1RIX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNV9QQURfRFJJVkVSX01TQiAgICAgICAgICAgMgotI2RlZmluZSBXTEFOX0dQSU9fUElOMTVfUEFEX0RSSVZFUl9MU0IgICAgICAgICAgIDIKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE1X1BBRF9EUklWRVJfTUFTSyAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNV9QQURfRFJJVkVSX0dFVCh4KSAgICAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMTVfUEFEX0RSSVZFUl9NQVNLKSA+PiBXTEFOX0dQSU9fUElOMTVfUEFEX0RSSVZFUl9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNV9QQURfRFJJVkVSX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjE1X1BBRF9EUklWRVJfTFNCKSAmIFdMQU5fR1BJT19QSU4xNV9QQURfRFJJVkVSX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNV9TT1VSQ0VfTVNCICAgICAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTVfU09VUkNFX0xTQiAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE1X1NPVVJDRV9NQVNLICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNV9TT1VSQ0VfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMTVfU09VUkNFX01BU0spID4+IFdMQU5fR1BJT19QSU4xNV9TT1VSQ0VfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTVfU09VUkNFX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4xNV9TT1VSQ0VfTFNCKSAmIFdMQU5fR1BJT19QSU4xNV9TT1VSQ0VfTUFTSykKLQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTZfQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjgKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE2X09GRlNFVCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY4Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNl9DT05GSUdfTVNCICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE2X0NPTkZJR19MU0IgICAgICAgICAgICAgICAxMQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTZfQ09ORklHX01BU0sgICAgICAgICAgICAgIDB4MDAwMDM4MDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE2X0NPTkZJR19HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4xNl9DT05GSUdfTUFTSykgPj4gV0xBTl9HUElPX1BJTjE2X0NPTkZJR19MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNl9DT05GSUdfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjE2X0NPTkZJR19MU0IpICYgV0xBTl9HUElPX1BJTjE2X0NPTkZJR19NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTZfV0FLRVVQX0VOQUJMRV9NU0IgICAgICAgIDEwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNl9XQUtFVVBfRU5BQkxFX0xTQiAgICAgICAgMTAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE2X1dBS0VVUF9FTkFCTEVfTUFTSyAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNl9XQUtFVVBfRU5BQkxFX0dFVCh4KSAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMTZfV0FLRVVQX0VOQUJMRV9NQVNLKSA+PiBXTEFOX0dQSU9fUElOMTZfV0FLRVVQX0VOQUJMRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNl9XQUtFVVBfRU5BQkxFX1NFVCh4KSAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjE2X1dBS0VVUF9FTkFCTEVfTFNCKSAmIFdMQU5fR1BJT19QSU4xNl9XQUtFVVBfRU5BQkxFX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNl9JTlRfVFlQRV9NU0IgICAgICAgICAgICAgOQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTZfSU5UX1RZUEVfTFNCICAgICAgICAgICAgIDcKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE2X0lOVF9UWVBFX01BU0sgICAgICAgICAgICAweDAwMDAwMzgwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNl9JTlRfVFlQRV9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMTZfSU5UX1RZUEVfTUFTSykgPj4gV0xBTl9HUElPX1BJTjE2X0lOVF9UWVBFX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE2X0lOVF9UWVBFX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMTZfSU5UX1RZUEVfTFNCKSAmIFdMQU5fR1BJT19QSU4xNl9JTlRfVFlQRV9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTZfUEFEX1BVTExfTVNCICAgICAgICAgICAgIDYKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE2X1BBRF9QVUxMX0xTQiAgICAgICAgICAgICA1Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNl9QQURfUFVMTF9NQVNLICAgICAgICAgICAgMHgwMDAwMDA2MAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTZfUEFEX1BVTExfR0VUKHgpICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjE2X1BBRF9QVUxMX01BU0spID4+IFdMQU5fR1BJT19QSU4xNl9QQURfUFVMTF9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNl9QQURfUFVMTF9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjE2X1BBRF9QVUxMX0xTQikgJiBXTEFOX0dQSU9fUElOMTZfUEFEX1BVTExfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE2X1BBRF9TVFJFTkdUSF9NU0IgICAgICAgICA0Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNl9QQURfU1RSRU5HVEhfTFNCICAgICAgICAgMwotI2RlZmluZSBXTEFOX0dQSU9fUElOMTZfUEFEX1NUUkVOR1RIX01BU0sgICAgICAgIDB4MDAwMDAwMTgKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE2X1BBRF9TVFJFTkdUSF9HRVQoeCkgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4xNl9QQURfU1RSRU5HVEhfTUFTSykgPj4gV0xBTl9HUElPX1BJTjE2X1BBRF9TVFJFTkdUSF9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNl9QQURfU1RSRU5HVEhfU0VUKHgpICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjE2X1BBRF9TVFJFTkdUSF9MU0IpICYgV0xBTl9HUElPX1BJTjE2X1BBRF9TVFJFTkdUSF9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTZfUEFEX0RSSVZFUl9NU0IgICAgICAgICAgIDIKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE2X1BBRF9EUklWRVJfTFNCICAgICAgICAgICAyCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNl9QQURfRFJJVkVSX01BU0sgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTZfUEFEX0RSSVZFUl9HRVQoeCkgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjE2X1BBRF9EUklWRVJfTUFTSykgPj4gV0xBTl9HUElPX1BJTjE2X1BBRF9EUklWRVJfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTZfUEFEX0RSSVZFUl9TRVQoeCkgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4xNl9QQURfRFJJVkVSX0xTQikgJiBXTEFOX0dQSU9fUElOMTZfUEFEX0RSSVZFUl9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTZfU09VUkNFX01TQiAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE2X1NPVVJDRV9MU0IgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xNl9TT1VSQ0VfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTZfU09VUkNFX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjE2X1NPVVJDRV9NQVNLKSA+PiBXTEFOX0dQSU9fUElOMTZfU09VUkNFX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE2X1NPVVJDRV9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMTZfU09VUkNFX0xTQikgJiBXTEFOX0dQSU9fUElOMTZfU09VUkNFX01BU0spCi0KLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE3X0FERFJFU1MgICAgICAgICAgICAgICAgICAweDAwMDAwMDZjCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xN19PRkZTRVQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2YwotI2RlZmluZSBXTEFOX0dQSU9fUElOMTdfQ09ORklHX01TQiAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xN19DT05GSUdfTFNCICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE3X0NPTkZJR19NQVNLICAgICAgICAgICAgICAweDAwMDAzODAwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xN19DT05GSUdfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMTdfQ09ORklHX01BU0spID4+IFdMQU5fR1BJT19QSU4xN19DT05GSUdfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTdfQ09ORklHX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4xN19DT05GSUdfTFNCKSAmIFdMQU5fR1BJT19QSU4xN19DT05GSUdfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE3X1dBS0VVUF9FTkFCTEVfTVNCICAgICAgICAxMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTdfV0FLRVVQX0VOQUJMRV9MU0IgICAgICAgIDEwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xN19XQUtFVVBfRU5BQkxFX01BU0sgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTdfV0FLRVVQX0VOQUJMRV9HRVQoeCkgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjE3X1dBS0VVUF9FTkFCTEVfTUFTSykgPj4gV0xBTl9HUElPX1BJTjE3X1dBS0VVUF9FTkFCTEVfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTdfV0FLRVVQX0VOQUJMRV9TRVQoeCkgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4xN19XQUtFVVBfRU5BQkxFX0xTQikgJiBXTEFOX0dQSU9fUElOMTdfV0FLRVVQX0VOQUJMRV9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTdfSU5UX1RZUEVfTVNCICAgICAgICAgICAgIDkKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE3X0lOVF9UWVBFX0xTQiAgICAgICAgICAgICA3Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4xN19JTlRfVFlQRV9NQVNLICAgICAgICAgICAgMHgwMDAwMDM4MAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTdfSU5UX1RZUEVfR0VUKHgpICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjE3X0lOVF9UWVBFX01BU0spID4+IFdMQU5fR1BJT19QSU4xN19JTlRfVFlQRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xN19JTlRfVFlQRV9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjE3X0lOVF9UWVBFX0xTQikgJiBXTEFOX0dQSU9fUElOMTdfSU5UX1RZUEVfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE3X1BBRF9QVUxMX01TQiAgICAgICAgICAgICA2Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4xN19QQURfUFVMTF9MU0IgICAgICAgICAgICAgNQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTdfUEFEX1BVTExfTUFTSyAgICAgICAgICAgIDB4MDAwMDAwNjAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE3X1BBRF9QVUxMX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4xN19QQURfUFVMTF9NQVNLKSA+PiBXTEFOX0dQSU9fUElOMTdfUEFEX1BVTExfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTdfUEFEX1BVTExfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4xN19QQURfUFVMTF9MU0IpICYgV0xBTl9HUElPX1BJTjE3X1BBRF9QVUxMX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xN19QQURfU1RSRU5HVEhfTVNCICAgICAgICAgNAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTdfUEFEX1NUUkVOR1RIX0xTQiAgICAgICAgIDMKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE3X1BBRF9TVFJFTkdUSF9NQVNLICAgICAgICAweDAwMDAwMDE4Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4xN19QQURfU1RSRU5HVEhfR0VUKHgpICAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMTdfUEFEX1NUUkVOR1RIX01BU0spID4+IFdMQU5fR1BJT19QSU4xN19QQURfU1RSRU5HVEhfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTdfUEFEX1NUUkVOR1RIX1NFVCh4KSAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4xN19QQURfU1RSRU5HVEhfTFNCKSAmIFdMQU5fR1BJT19QSU4xN19QQURfU1RSRU5HVEhfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE3X1BBRF9EUklWRVJfTVNCICAgICAgICAgICAyCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xN19QQURfRFJJVkVSX0xTQiAgICAgICAgICAgMgotI2RlZmluZSBXTEFOX0dQSU9fUElOMTdfUEFEX0RSSVZFUl9NQVNLICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE3X1BBRF9EUklWRVJfR0VUKHgpICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4xN19QQURfRFJJVkVSX01BU0spID4+IFdMQU5fR1BJT19QSU4xN19QQURfRFJJVkVSX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE3X1BBRF9EUklWRVJfU0VUKHgpICAgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMTdfUEFEX0RSSVZFUl9MU0IpICYgV0xBTl9HUElPX1BJTjE3X1BBRF9EUklWRVJfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE3X1NPVVJDRV9NU0IgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xN19TT1VSQ0VfTFNCICAgICAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTdfU09VUkNFX01BU0sgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE3X1NPVVJDRV9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4xN19TT1VSQ0VfTUFTSykgPj4gV0xBTl9HUElPX1BJTjE3X1NPVVJDRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xN19TT1VSQ0VfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjE3X1NPVVJDRV9MU0IpICYgV0xBTl9HUElPX1BJTjE3X1NPVVJDRV9NQVNLKQotCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xOF9BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3MAotI2RlZmluZSBXTEFOX0dQSU9fUElOMThfT0ZGU0VUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE4X0NPTkZJR19NU0IgICAgICAgICAgICAgICAxMwotI2RlZmluZSBXTEFOX0dQSU9fUElOMThfQ09ORklHX0xTQiAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xOF9DT05GSUdfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMzgwMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMThfQ09ORklHX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjE4X0NPTkZJR19NQVNLKSA+PiBXTEFOX0dQSU9fUElOMThfQ09ORklHX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE4X0NPTkZJR19TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMThfQ09ORklHX0xTQikgJiBXTEFOX0dQSU9fUElOMThfQ09ORklHX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xOF9XQUtFVVBfRU5BQkxFX01TQiAgICAgICAgMTAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE4X1dBS0VVUF9FTkFCTEVfTFNCICAgICAgICAxMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMThfV0FLRVVQX0VOQUJMRV9NQVNLICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE4X1dBS0VVUF9FTkFCTEVfR0VUKHgpICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4xOF9XQUtFVVBfRU5BQkxFX01BU0spID4+IFdMQU5fR1BJT19QSU4xOF9XQUtFVVBfRU5BQkxFX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE4X1dBS0VVUF9FTkFCTEVfU0VUKHgpICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMThfV0FLRVVQX0VOQUJMRV9MU0IpICYgV0xBTl9HUElPX1BJTjE4X1dBS0VVUF9FTkFCTEVfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE4X0lOVF9UWVBFX01TQiAgICAgICAgICAgICA5Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4xOF9JTlRfVFlQRV9MU0IgICAgICAgICAgICAgNwotI2RlZmluZSBXTEFOX0dQSU9fUElOMThfSU5UX1RZUEVfTUFTSyAgICAgICAgICAgIDB4MDAwMDAzODAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE4X0lOVF9UWVBFX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4xOF9JTlRfVFlQRV9NQVNLKSA+PiBXTEFOX0dQSU9fUElOMThfSU5UX1RZUEVfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMThfSU5UX1RZUEVfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4xOF9JTlRfVFlQRV9MU0IpICYgV0xBTl9HUElPX1BJTjE4X0lOVF9UWVBFX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xOF9QQURfUFVMTF9NU0IgICAgICAgICAgICAgNgotI2RlZmluZSBXTEFOX0dQSU9fUElOMThfUEFEX1BVTExfTFNCICAgICAgICAgICAgIDUKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE4X1BBRF9QVUxMX01BU0sgICAgICAgICAgICAweDAwMDAwMDYwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xOF9QQURfUFVMTF9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMThfUEFEX1BVTExfTUFTSykgPj4gV0xBTl9HUElPX1BJTjE4X1BBRF9QVUxMX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE4X1BBRF9QVUxMX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMThfUEFEX1BVTExfTFNCKSAmIFdMQU5fR1BJT19QSU4xOF9QQURfUFVMTF9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMThfUEFEX1NUUkVOR1RIX01TQiAgICAgICAgIDQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE4X1BBRF9TVFJFTkdUSF9MU0IgICAgICAgICAzCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xOF9QQURfU1RSRU5HVEhfTUFTSyAgICAgICAgMHgwMDAwMDAxOAotI2RlZmluZSBXTEFOX0dQSU9fUElOMThfUEFEX1NUUkVOR1RIX0dFVCh4KSAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjE4X1BBRF9TVFJFTkdUSF9NQVNLKSA+PiBXTEFOX0dQSU9fUElOMThfUEFEX1NUUkVOR1RIX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE4X1BBRF9TVFJFTkdUSF9TRVQoeCkgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMThfUEFEX1NUUkVOR1RIX0xTQikgJiBXTEFOX0dQSU9fUElOMThfUEFEX1NUUkVOR1RIX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xOF9QQURfRFJJVkVSX01TQiAgICAgICAgICAgMgotI2RlZmluZSBXTEFOX0dQSU9fUElOMThfUEFEX0RSSVZFUl9MU0IgICAgICAgICAgIDIKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE4X1BBRF9EUklWRVJfTUFTSyAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4xOF9QQURfRFJJVkVSX0dFVCh4KSAgICAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMThfUEFEX0RSSVZFUl9NQVNLKSA+PiBXTEFOX0dQSU9fUElOMThfUEFEX0RSSVZFUl9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xOF9QQURfRFJJVkVSX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjE4X1BBRF9EUklWRVJfTFNCKSAmIFdMQU5fR1BJT19QSU4xOF9QQURfRFJJVkVSX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xOF9TT1VSQ0VfTVNCICAgICAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMThfU09VUkNFX0xTQiAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE4X1NPVVJDRV9NQVNLICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xOF9TT1VSQ0VfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMThfU09VUkNFX01BU0spID4+IFdMQU5fR1BJT19QSU4xOF9TT1VSQ0VfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMThfU09VUkNFX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4xOF9TT1VSQ0VfTFNCKSAmIFdMQU5fR1BJT19QSU4xOF9TT1VSQ0VfTUFTSykKLQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTlfQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE5X09GRlNFVCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDc0Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4xOV9DT05GSUdfTVNCICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE5X0NPTkZJR19MU0IgICAgICAgICAgICAgICAxMQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTlfQ09ORklHX01BU0sgICAgICAgICAgICAgIDB4MDAwMDM4MDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE5X0NPTkZJR19HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4xOV9DT05GSUdfTUFTSykgPj4gV0xBTl9HUElPX1BJTjE5X0NPTkZJR19MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xOV9DT05GSUdfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjE5X0NPTkZJR19MU0IpICYgV0xBTl9HUElPX1BJTjE5X0NPTkZJR19NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTlfV0FLRVVQX0VOQUJMRV9NU0IgICAgICAgIDEwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xOV9XQUtFVVBfRU5BQkxFX0xTQiAgICAgICAgMTAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE5X1dBS0VVUF9FTkFCTEVfTUFTSyAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xOV9XQUtFVVBfRU5BQkxFX0dFVCh4KSAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMTlfV0FLRVVQX0VOQUJMRV9NQVNLKSA+PiBXTEFOX0dQSU9fUElOMTlfV0FLRVVQX0VOQUJMRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xOV9XQUtFVVBfRU5BQkxFX1NFVCh4KSAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjE5X1dBS0VVUF9FTkFCTEVfTFNCKSAmIFdMQU5fR1BJT19QSU4xOV9XQUtFVVBfRU5BQkxFX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xOV9JTlRfVFlQRV9NU0IgICAgICAgICAgICAgOQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTlfSU5UX1RZUEVfTFNCICAgICAgICAgICAgIDcKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE5X0lOVF9UWVBFX01BU0sgICAgICAgICAgICAweDAwMDAwMzgwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xOV9JTlRfVFlQRV9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMTlfSU5UX1RZUEVfTUFTSykgPj4gV0xBTl9HUElPX1BJTjE5X0lOVF9UWVBFX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE5X0lOVF9UWVBFX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMTlfSU5UX1RZUEVfTFNCKSAmIFdMQU5fR1BJT19QSU4xOV9JTlRfVFlQRV9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTlfUEFEX1BVTExfTVNCICAgICAgICAgICAgIDYKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE5X1BBRF9QVUxMX0xTQiAgICAgICAgICAgICA1Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4xOV9QQURfUFVMTF9NQVNLICAgICAgICAgICAgMHgwMDAwMDA2MAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTlfUEFEX1BVTExfR0VUKHgpICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjE5X1BBRF9QVUxMX01BU0spID4+IFdMQU5fR1BJT19QSU4xOV9QQURfUFVMTF9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xOV9QQURfUFVMTF9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjE5X1BBRF9QVUxMX0xTQikgJiBXTEFOX0dQSU9fUElOMTlfUEFEX1BVTExfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE5X1BBRF9TVFJFTkdUSF9NU0IgICAgICAgICA0Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4xOV9QQURfU1RSRU5HVEhfTFNCICAgICAgICAgMwotI2RlZmluZSBXTEFOX0dQSU9fUElOMTlfUEFEX1NUUkVOR1RIX01BU0sgICAgICAgIDB4MDAwMDAwMTgKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE5X1BBRF9TVFJFTkdUSF9HRVQoeCkgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4xOV9QQURfU1RSRU5HVEhfTUFTSykgPj4gV0xBTl9HUElPX1BJTjE5X1BBRF9TVFJFTkdUSF9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xOV9QQURfU1RSRU5HVEhfU0VUKHgpICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjE5X1BBRF9TVFJFTkdUSF9MU0IpICYgV0xBTl9HUElPX1BJTjE5X1BBRF9TVFJFTkdUSF9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTlfUEFEX0RSSVZFUl9NU0IgICAgICAgICAgIDIKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE5X1BBRF9EUklWRVJfTFNCICAgICAgICAgICAyCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xOV9QQURfRFJJVkVSX01BU0sgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBXTEFOX0dQSU9fUElOMTlfUEFEX0RSSVZFUl9HRVQoeCkgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjE5X1BBRF9EUklWRVJfTUFTSykgPj4gV0xBTl9HUElPX1BJTjE5X1BBRF9EUklWRVJfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTlfUEFEX0RSSVZFUl9TRVQoeCkgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4xOV9QQURfRFJJVkVSX0xTQikgJiBXTEFOX0dQSU9fUElOMTlfUEFEX0RSSVZFUl9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTlfU09VUkNFX01TQiAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE5X1NPVVJDRV9MU0IgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4xOV9TT1VSQ0VfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBXTEFOX0dQSU9fUElOMTlfU09VUkNFX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjE5X1NPVVJDRV9NQVNLKSA+PiBXTEFOX0dQSU9fUElOMTlfU09VUkNFX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjE5X1NPVVJDRV9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMTlfU09VUkNFX0xTQikgJiBXTEFOX0dQSU9fUElOMTlfU09VUkNFX01BU0spCi0KLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIwX0FERFJFU1MgICAgICAgICAgICAgICAgICAweDAwMDAwMDc4Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3OAotI2RlZmluZSBXTEFOX0dQSU9fUElOMjBfQ09ORklHX01TQiAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMF9DT05GSUdfTFNCICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIwX0NPTkZJR19NQVNLICAgICAgICAgICAgICAweDAwMDAzODAwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMF9DT05GSUdfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMjBfQ09ORklHX01BU0spID4+IFdMQU5fR1BJT19QSU4yMF9DT05GSUdfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMjBfQ09ORklHX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4yMF9DT05GSUdfTFNCKSAmIFdMQU5fR1BJT19QSU4yMF9DT05GSUdfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIwX1dBS0VVUF9FTkFCTEVfTVNCICAgICAgICAxMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMjBfV0FLRVVQX0VOQUJMRV9MU0IgICAgICAgIDEwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMF9XQUtFVVBfRU5BQkxFX01BU0sgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMjBfV0FLRVVQX0VOQUJMRV9HRVQoeCkgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjIwX1dBS0VVUF9FTkFCTEVfTUFTSykgPj4gV0xBTl9HUElPX1BJTjIwX1dBS0VVUF9FTkFCTEVfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMjBfV0FLRVVQX0VOQUJMRV9TRVQoeCkgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4yMF9XQUtFVVBfRU5BQkxFX0xTQikgJiBXTEFOX0dQSU9fUElOMjBfV0FLRVVQX0VOQUJMRV9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMjBfSU5UX1RZUEVfTVNCICAgICAgICAgICAgIDkKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIwX0lOVF9UWVBFX0xTQiAgICAgICAgICAgICA3Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMF9JTlRfVFlQRV9NQVNLICAgICAgICAgICAgMHgwMDAwMDM4MAotI2RlZmluZSBXTEFOX0dQSU9fUElOMjBfSU5UX1RZUEVfR0VUKHgpICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjIwX0lOVF9UWVBFX01BU0spID4+IFdMQU5fR1BJT19QSU4yMF9JTlRfVFlQRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMF9JTlRfVFlQRV9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjIwX0lOVF9UWVBFX0xTQikgJiBXTEFOX0dQSU9fUElOMjBfSU5UX1RZUEVfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIwX1BBRF9QVUxMX01TQiAgICAgICAgICAgICA2Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMF9QQURfUFVMTF9MU0IgICAgICAgICAgICAgNQotI2RlZmluZSBXTEFOX0dQSU9fUElOMjBfUEFEX1BVTExfTUFTSyAgICAgICAgICAgIDB4MDAwMDAwNjAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIwX1BBRF9QVUxMX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4yMF9QQURfUFVMTF9NQVNLKSA+PiBXTEFOX0dQSU9fUElOMjBfUEFEX1BVTExfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMjBfUEFEX1BVTExfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4yMF9QQURfUFVMTF9MU0IpICYgV0xBTl9HUElPX1BJTjIwX1BBRF9QVUxMX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMF9QQURfU1RSRU5HVEhfTVNCICAgICAgICAgNAotI2RlZmluZSBXTEFOX0dQSU9fUElOMjBfUEFEX1NUUkVOR1RIX0xTQiAgICAgICAgIDMKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIwX1BBRF9TVFJFTkdUSF9NQVNLICAgICAgICAweDAwMDAwMDE4Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMF9QQURfU1RSRU5HVEhfR0VUKHgpICAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMjBfUEFEX1NUUkVOR1RIX01BU0spID4+IFdMQU5fR1BJT19QSU4yMF9QQURfU1RSRU5HVEhfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMjBfUEFEX1NUUkVOR1RIX1NFVCh4KSAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4yMF9QQURfU1RSRU5HVEhfTFNCKSAmIFdMQU5fR1BJT19QSU4yMF9QQURfU1RSRU5HVEhfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIwX1BBRF9EUklWRVJfTVNCICAgICAgICAgICAyCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMF9QQURfRFJJVkVSX0xTQiAgICAgICAgICAgMgotI2RlZmluZSBXTEFOX0dQSU9fUElOMjBfUEFEX0RSSVZFUl9NQVNLICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIwX1BBRF9EUklWRVJfR0VUKHgpICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4yMF9QQURfRFJJVkVSX01BU0spID4+IFdMQU5fR1BJT19QSU4yMF9QQURfRFJJVkVSX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIwX1BBRF9EUklWRVJfU0VUKHgpICAgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMjBfUEFEX0RSSVZFUl9MU0IpICYgV0xBTl9HUElPX1BJTjIwX1BBRF9EUklWRVJfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIwX1NPVVJDRV9NU0IgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMF9TT1VSQ0VfTFNCICAgICAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMjBfU09VUkNFX01BU0sgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIwX1NPVVJDRV9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4yMF9TT1VSQ0VfTUFTSykgPj4gV0xBTl9HUElPX1BJTjIwX1NPVVJDRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMF9TT1VSQ0VfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjIwX1NPVVJDRV9MU0IpICYgV0xBTl9HUElPX1BJTjIwX1NPVVJDRV9NQVNLKQotCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMV9BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3YwotI2RlZmluZSBXTEFOX0dQSU9fUElOMjFfT0ZGU0VUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwN2MKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIxX0NPTkZJR19NU0IgICAgICAgICAgICAgICAxMwotI2RlZmluZSBXTEFOX0dQSU9fUElOMjFfQ09ORklHX0xTQiAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMV9DT05GSUdfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMzgwMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMjFfQ09ORklHX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjIxX0NPTkZJR19NQVNLKSA+PiBXTEFOX0dQSU9fUElOMjFfQ09ORklHX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIxX0NPTkZJR19TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMjFfQ09ORklHX0xTQikgJiBXTEFOX0dQSU9fUElOMjFfQ09ORklHX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMV9XQUtFVVBfRU5BQkxFX01TQiAgICAgICAgMTAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIxX1dBS0VVUF9FTkFCTEVfTFNCICAgICAgICAxMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMjFfV0FLRVVQX0VOQUJMRV9NQVNLICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIxX1dBS0VVUF9FTkFCTEVfR0VUKHgpICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4yMV9XQUtFVVBfRU5BQkxFX01BU0spID4+IFdMQU5fR1BJT19QSU4yMV9XQUtFVVBfRU5BQkxFX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIxX1dBS0VVUF9FTkFCTEVfU0VUKHgpICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMjFfV0FLRVVQX0VOQUJMRV9MU0IpICYgV0xBTl9HUElPX1BJTjIxX1dBS0VVUF9FTkFCTEVfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIxX0lOVF9UWVBFX01TQiAgICAgICAgICAgICA5Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMV9JTlRfVFlQRV9MU0IgICAgICAgICAgICAgNwotI2RlZmluZSBXTEFOX0dQSU9fUElOMjFfSU5UX1RZUEVfTUFTSyAgICAgICAgICAgIDB4MDAwMDAzODAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIxX0lOVF9UWVBFX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4yMV9JTlRfVFlQRV9NQVNLKSA+PiBXTEFOX0dQSU9fUElOMjFfSU5UX1RZUEVfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMjFfSU5UX1RZUEVfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4yMV9JTlRfVFlQRV9MU0IpICYgV0xBTl9HUElPX1BJTjIxX0lOVF9UWVBFX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMV9QQURfUFVMTF9NU0IgICAgICAgICAgICAgNgotI2RlZmluZSBXTEFOX0dQSU9fUElOMjFfUEFEX1BVTExfTFNCICAgICAgICAgICAgIDUKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIxX1BBRF9QVUxMX01BU0sgICAgICAgICAgICAweDAwMDAwMDYwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMV9QQURfUFVMTF9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMjFfUEFEX1BVTExfTUFTSykgPj4gV0xBTl9HUElPX1BJTjIxX1BBRF9QVUxMX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIxX1BBRF9QVUxMX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMjFfUEFEX1BVTExfTFNCKSAmIFdMQU5fR1BJT19QSU4yMV9QQURfUFVMTF9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMjFfUEFEX1NUUkVOR1RIX01TQiAgICAgICAgIDQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIxX1BBRF9TVFJFTkdUSF9MU0IgICAgICAgICAzCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMV9QQURfU1RSRU5HVEhfTUFTSyAgICAgICAgMHgwMDAwMDAxOAotI2RlZmluZSBXTEFOX0dQSU9fUElOMjFfUEFEX1NUUkVOR1RIX0dFVCh4KSAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjIxX1BBRF9TVFJFTkdUSF9NQVNLKSA+PiBXTEFOX0dQSU9fUElOMjFfUEFEX1NUUkVOR1RIX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIxX1BBRF9TVFJFTkdUSF9TRVQoeCkgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMjFfUEFEX1NUUkVOR1RIX0xTQikgJiBXTEFOX0dQSU9fUElOMjFfUEFEX1NUUkVOR1RIX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMV9QQURfRFJJVkVSX01TQiAgICAgICAgICAgMgotI2RlZmluZSBXTEFOX0dQSU9fUElOMjFfUEFEX0RSSVZFUl9MU0IgICAgICAgICAgIDIKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIxX1BBRF9EUklWRVJfTUFTSyAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMV9QQURfRFJJVkVSX0dFVCh4KSAgICAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMjFfUEFEX0RSSVZFUl9NQVNLKSA+PiBXTEFOX0dQSU9fUElOMjFfUEFEX0RSSVZFUl9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMV9QQURfRFJJVkVSX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjIxX1BBRF9EUklWRVJfTFNCKSAmIFdMQU5fR1BJT19QSU4yMV9QQURfRFJJVkVSX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMV9TT1VSQ0VfTVNCICAgICAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMjFfU09VUkNFX0xTQiAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIxX1NPVVJDRV9NQVNLICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMV9TT1VSQ0VfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMjFfU09VUkNFX01BU0spID4+IFdMQU5fR1BJT19QSU4yMV9TT1VSQ0VfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMjFfU09VUkNFX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4yMV9TT1VSQ0VfTFNCKSAmIFdMQU5fR1BJT19QSU4yMV9TT1VSQ0VfTUFTSykKLQotI2RlZmluZSBXTEFOX0dQSU9fUElOMjJfQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIyX09GRlNFVCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMl9DT05GSUdfTVNCICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIyX0NPTkZJR19MU0IgICAgICAgICAgICAgICAxMQotI2RlZmluZSBXTEFOX0dQSU9fUElOMjJfQ09ORklHX01BU0sgICAgICAgICAgICAgIDB4MDAwMDM4MDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIyX0NPTkZJR19HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4yMl9DT05GSUdfTUFTSykgPj4gV0xBTl9HUElPX1BJTjIyX0NPTkZJR19MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMl9DT05GSUdfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjIyX0NPTkZJR19MU0IpICYgV0xBTl9HUElPX1BJTjIyX0NPTkZJR19NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMjJfV0FLRVVQX0VOQUJMRV9NU0IgICAgICAgIDEwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMl9XQUtFVVBfRU5BQkxFX0xTQiAgICAgICAgMTAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIyX1dBS0VVUF9FTkFCTEVfTUFTSyAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMl9XQUtFVVBfRU5BQkxFX0dFVCh4KSAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMjJfV0FLRVVQX0VOQUJMRV9NQVNLKSA+PiBXTEFOX0dQSU9fUElOMjJfV0FLRVVQX0VOQUJMRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMl9XQUtFVVBfRU5BQkxFX1NFVCh4KSAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjIyX1dBS0VVUF9FTkFCTEVfTFNCKSAmIFdMQU5fR1BJT19QSU4yMl9XQUtFVVBfRU5BQkxFX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMl9JTlRfVFlQRV9NU0IgICAgICAgICAgICAgOQotI2RlZmluZSBXTEFOX0dQSU9fUElOMjJfSU5UX1RZUEVfTFNCICAgICAgICAgICAgIDcKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIyX0lOVF9UWVBFX01BU0sgICAgICAgICAgICAweDAwMDAwMzgwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMl9JTlRfVFlQRV9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMjJfSU5UX1RZUEVfTUFTSykgPj4gV0xBTl9HUElPX1BJTjIyX0lOVF9UWVBFX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIyX0lOVF9UWVBFX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMjJfSU5UX1RZUEVfTFNCKSAmIFdMQU5fR1BJT19QSU4yMl9JTlRfVFlQRV9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMjJfUEFEX1BVTExfTVNCICAgICAgICAgICAgIDYKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIyX1BBRF9QVUxMX0xTQiAgICAgICAgICAgICA1Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMl9QQURfUFVMTF9NQVNLICAgICAgICAgICAgMHgwMDAwMDA2MAotI2RlZmluZSBXTEFOX0dQSU9fUElOMjJfUEFEX1BVTExfR0VUKHgpICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjIyX1BBRF9QVUxMX01BU0spID4+IFdMQU5fR1BJT19QSU4yMl9QQURfUFVMTF9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMl9QQURfUFVMTF9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjIyX1BBRF9QVUxMX0xTQikgJiBXTEFOX0dQSU9fUElOMjJfUEFEX1BVTExfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIyX1BBRF9TVFJFTkdUSF9NU0IgICAgICAgICA0Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMl9QQURfU1RSRU5HVEhfTFNCICAgICAgICAgMwotI2RlZmluZSBXTEFOX0dQSU9fUElOMjJfUEFEX1NUUkVOR1RIX01BU0sgICAgICAgIDB4MDAwMDAwMTgKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIyX1BBRF9TVFJFTkdUSF9HRVQoeCkgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4yMl9QQURfU1RSRU5HVEhfTUFTSykgPj4gV0xBTl9HUElPX1BJTjIyX1BBRF9TVFJFTkdUSF9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMl9QQURfU1RSRU5HVEhfU0VUKHgpICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjIyX1BBRF9TVFJFTkdUSF9MU0IpICYgV0xBTl9HUElPX1BJTjIyX1BBRF9TVFJFTkdUSF9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMjJfUEFEX0RSSVZFUl9NU0IgICAgICAgICAgIDIKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIyX1BBRF9EUklWRVJfTFNCICAgICAgICAgICAyCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMl9QQURfRFJJVkVSX01BU0sgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBXTEFOX0dQSU9fUElOMjJfUEFEX0RSSVZFUl9HRVQoeCkgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjIyX1BBRF9EUklWRVJfTUFTSykgPj4gV0xBTl9HUElPX1BJTjIyX1BBRF9EUklWRVJfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMjJfUEFEX0RSSVZFUl9TRVQoeCkgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4yMl9QQURfRFJJVkVSX0xTQikgJiBXTEFOX0dQSU9fUElOMjJfUEFEX0RSSVZFUl9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMjJfU09VUkNFX01TQiAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIyX1NPVVJDRV9MU0IgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yMl9TT1VSQ0VfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBXTEFOX0dQSU9fUElOMjJfU09VUkNFX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjIyX1NPVVJDRV9NQVNLKSA+PiBXTEFOX0dQSU9fUElOMjJfU09VUkNFX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIyX1NPVVJDRV9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMjJfU09VUkNFX0xTQikgJiBXTEFOX0dQSU9fUElOMjJfU09VUkNFX01BU0spCi0KLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIzX0FERFJFU1MgICAgICAgICAgICAgICAgICAweDAwMDAwMDg0Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4yM19PRkZTRVQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4NAotI2RlZmluZSBXTEFOX0dQSU9fUElOMjNfQ09ORklHX01TQiAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yM19DT05GSUdfTFNCICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIzX0NPTkZJR19NQVNLICAgICAgICAgICAgICAweDAwMDAzODAwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yM19DT05GSUdfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMjNfQ09ORklHX01BU0spID4+IFdMQU5fR1BJT19QSU4yM19DT05GSUdfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMjNfQ09ORklHX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4yM19DT05GSUdfTFNCKSAmIFdMQU5fR1BJT19QSU4yM19DT05GSUdfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIzX1dBS0VVUF9FTkFCTEVfTVNCICAgICAgICAxMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMjNfV0FLRVVQX0VOQUJMRV9MU0IgICAgICAgIDEwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yM19XQUtFVVBfRU5BQkxFX01BU0sgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMjNfV0FLRVVQX0VOQUJMRV9HRVQoeCkgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjIzX1dBS0VVUF9FTkFCTEVfTUFTSykgPj4gV0xBTl9HUElPX1BJTjIzX1dBS0VVUF9FTkFCTEVfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMjNfV0FLRVVQX0VOQUJMRV9TRVQoeCkgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4yM19XQUtFVVBfRU5BQkxFX0xTQikgJiBXTEFOX0dQSU9fUElOMjNfV0FLRVVQX0VOQUJMRV9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMjNfSU5UX1RZUEVfTVNCICAgICAgICAgICAgIDkKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIzX0lOVF9UWVBFX0xTQiAgICAgICAgICAgICA3Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4yM19JTlRfVFlQRV9NQVNLICAgICAgICAgICAgMHgwMDAwMDM4MAotI2RlZmluZSBXTEFOX0dQSU9fUElOMjNfSU5UX1RZUEVfR0VUKHgpICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjIzX0lOVF9UWVBFX01BU0spID4+IFdMQU5fR1BJT19QSU4yM19JTlRfVFlQRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yM19JTlRfVFlQRV9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjIzX0lOVF9UWVBFX0xTQikgJiBXTEFOX0dQSU9fUElOMjNfSU5UX1RZUEVfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIzX1BBRF9EUklWRVJfTVNCICAgICAgICAgICAyCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yM19QQURfRFJJVkVSX0xTQiAgICAgICAgICAgMgotI2RlZmluZSBXTEFOX0dQSU9fUElOMjNfUEFEX0RSSVZFUl9NQVNLICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIzX1BBRF9EUklWRVJfR0VUKHgpICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4yM19QQURfRFJJVkVSX01BU0spID4+IFdMQU5fR1BJT19QSU4yM19QQURfRFJJVkVSX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIzX1BBRF9EUklWRVJfU0VUKHgpICAgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMjNfUEFEX0RSSVZFUl9MU0IpICYgV0xBTl9HUElPX1BJTjIzX1BBRF9EUklWRVJfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIzX1NPVVJDRV9NU0IgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yM19TT1VSQ0VfTFNCICAgICAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMjNfU09VUkNFX01BU0sgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjIzX1NPVVJDRV9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4yM19TT1VSQ0VfTUFTSykgPj4gV0xBTl9HUElPX1BJTjIzX1NPVVJDRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yM19TT1VSQ0VfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjIzX1NPVVJDRV9MU0IpICYgV0xBTl9HUElPX1BJTjIzX1NPVVJDRV9NQVNLKQotCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yNF9BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4OAotI2RlZmluZSBXTEFOX0dQSU9fUElOMjRfT0ZGU0VUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODgKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjI0X0NPTkZJR19NU0IgICAgICAgICAgICAgICAxMwotI2RlZmluZSBXTEFOX0dQSU9fUElOMjRfQ09ORklHX0xTQiAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yNF9DT05GSUdfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMzgwMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMjRfQ09ORklHX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjI0X0NPTkZJR19NQVNLKSA+PiBXTEFOX0dQSU9fUElOMjRfQ09ORklHX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjI0X0NPTkZJR19TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMjRfQ09ORklHX0xTQikgJiBXTEFOX0dQSU9fUElOMjRfQ09ORklHX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yNF9XQUtFVVBfRU5BQkxFX01TQiAgICAgICAgMTAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjI0X1dBS0VVUF9FTkFCTEVfTFNCICAgICAgICAxMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMjRfV0FLRVVQX0VOQUJMRV9NQVNLICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjI0X1dBS0VVUF9FTkFCTEVfR0VUKHgpICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4yNF9XQUtFVVBfRU5BQkxFX01BU0spID4+IFdMQU5fR1BJT19QSU4yNF9XQUtFVVBfRU5BQkxFX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjI0X1dBS0VVUF9FTkFCTEVfU0VUKHgpICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMjRfV0FLRVVQX0VOQUJMRV9MU0IpICYgV0xBTl9HUElPX1BJTjI0X1dBS0VVUF9FTkFCTEVfTUFTSykKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjI0X0lOVF9UWVBFX01TQiAgICAgICAgICAgICA5Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4yNF9JTlRfVFlQRV9MU0IgICAgICAgICAgICAgNwotI2RlZmluZSBXTEFOX0dQSU9fUElOMjRfSU5UX1RZUEVfTUFTSyAgICAgICAgICAgIDB4MDAwMDAzODAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjI0X0lOVF9UWVBFX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4yNF9JTlRfVFlQRV9NQVNLKSA+PiBXTEFOX0dQSU9fUElOMjRfSU5UX1RZUEVfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMjRfSU5UX1RZUEVfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4yNF9JTlRfVFlQRV9MU0IpICYgV0xBTl9HUElPX1BJTjI0X0lOVF9UWVBFX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yNF9QQURfRFJJVkVSX01TQiAgICAgICAgICAgMgotI2RlZmluZSBXTEFOX0dQSU9fUElOMjRfUEFEX0RSSVZFUl9MU0IgICAgICAgICAgIDIKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjI0X1BBRF9EUklWRVJfTUFTSyAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFdMQU5fR1BJT19QSU4yNF9QQURfRFJJVkVSX0dFVCh4KSAgICAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMjRfUEFEX0RSSVZFUl9NQVNLKSA+PiBXTEFOX0dQSU9fUElOMjRfUEFEX0RSSVZFUl9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yNF9QQURfRFJJVkVSX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjI0X1BBRF9EUklWRVJfTFNCKSAmIFdMQU5fR1BJT19QSU4yNF9QQURfRFJJVkVSX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yNF9TT1VSQ0VfTVNCICAgICAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX0dQSU9fUElOMjRfU09VUkNFX0xTQiAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjI0X1NPVVJDRV9NQVNLICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yNF9TT1VSQ0VfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMjRfU09VUkNFX01BU0spID4+IFdMQU5fR1BJT19QSU4yNF9TT1VSQ0VfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMjRfU09VUkNFX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4yNF9TT1VSQ0VfTFNCKSAmIFdMQU5fR1BJT19QSU4yNF9TT1VSQ0VfTUFTSykKLQotI2RlZmluZSBXTEFOX0dQSU9fUElOMjVfQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwOGMKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjI1X09GRlNFVCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDhjCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yNV9DT05GSUdfTVNCICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjI1X0NPTkZJR19MU0IgICAgICAgICAgICAgICAxMQotI2RlZmluZSBXTEFOX0dQSU9fUElOMjVfQ09ORklHX01BU0sgICAgICAgICAgICAgIDB4MDAwMDM4MDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjI1X0NPTkZJR19HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFdMQU5fR1BJT19QSU4yNV9DT05GSUdfTUFTSykgPj4gV0xBTl9HUElPX1BJTjI1X0NPTkZJR19MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yNV9DT05GSUdfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjI1X0NPTkZJR19MU0IpICYgV0xBTl9HUElPX1BJTjI1X0NPTkZJR19NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMjVfV0FLRVVQX0VOQUJMRV9NU0IgICAgICAgIDEwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yNV9XQUtFVVBfRU5BQkxFX0xTQiAgICAgICAgMTAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjI1X1dBS0VVUF9FTkFCTEVfTUFTSyAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yNV9XQUtFVVBfRU5BQkxFX0dFVCh4KSAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMjVfV0FLRVVQX0VOQUJMRV9NQVNLKSA+PiBXTEFOX0dQSU9fUElOMjVfV0FLRVVQX0VOQUJMRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yNV9XQUtFVVBfRU5BQkxFX1NFVCh4KSAgICAgKCgoeCkgPDwgV0xBTl9HUElPX1BJTjI1X1dBS0VVUF9FTkFCTEVfTFNCKSAmIFdMQU5fR1BJT19QSU4yNV9XQUtFVVBfRU5BQkxFX01BU0spCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yNV9JTlRfVFlQRV9NU0IgICAgICAgICAgICAgOQotI2RlZmluZSBXTEFOX0dQSU9fUElOMjVfSU5UX1RZUEVfTFNCICAgICAgICAgICAgIDcKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjI1X0lOVF9UWVBFX01BU0sgICAgICAgICAgICAweDAwMDAwMzgwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yNV9JTlRfVFlQRV9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBXTEFOX0dQSU9fUElOMjVfSU5UX1RZUEVfTUFTSykgPj4gV0xBTl9HUElPX1BJTjI1X0lOVF9UWVBFX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjI1X0lOVF9UWVBFX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMjVfSU5UX1RZUEVfTFNCKSAmIFdMQU5fR1BJT19QSU4yNV9JTlRfVFlQRV9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMjVfUEFEX0RSSVZFUl9NU0IgICAgICAgICAgIDIKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjI1X1BBRF9EUklWRVJfTFNCICAgICAgICAgICAyCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yNV9QQURfRFJJVkVSX01BU0sgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBXTEFOX0dQSU9fUElOMjVfUEFEX0RSSVZFUl9HRVQoeCkgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjI1X1BBRF9EUklWRVJfTUFTSykgPj4gV0xBTl9HUElPX1BJTjI1X1BBRF9EUklWRVJfTFNCKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMjVfUEFEX0RSSVZFUl9TRVQoeCkgICAgICAgICgoKHgpIDw8IFdMQU5fR1BJT19QSU4yNV9QQURfRFJJVkVSX0xTQikgJiBXTEFOX0dQSU9fUElOMjVfUEFEX0RSSVZFUl9NQVNLKQotI2RlZmluZSBXTEFOX0dQSU9fUElOMjVfU09VUkNFX01TQiAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjI1X1NPVVJDRV9MU0IgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fR1BJT19QSU4yNV9TT1VSQ0VfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBXTEFOX0dQSU9fUElOMjVfU09VUkNFX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgV0xBTl9HUElPX1BJTjI1X1NPVVJDRV9NQVNLKSA+PiBXTEFOX0dQSU9fUElOMjVfU09VUkNFX0xTQikKLSNkZWZpbmUgV0xBTl9HUElPX1BJTjI1X1NPVVJDRV9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBXTEFOX0dQSU9fUElOMjVfU09VUkNFX0xTQikgJiBXTEFOX0dQSU9fUElOMjVfU09VUkNFX01BU0spCi0KLSNkZWZpbmUgU0RJT19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDkwCi0jZGVmaW5lIFNESU9fT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA5MAotI2RlZmluZSBTRElPX1BJTlNfRU5fTVNCICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgU0RJT19QSU5TX0VOX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFNESU9fUElOU19FTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBTRElPX1BJTlNfRU5fR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgU0RJT19QSU5TX0VOX01BU0spID4+IFNESU9fUElOU19FTl9MU0IpCi0jZGVmaW5lIFNESU9fUElOU19FTl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgU0RJT19QSU5TX0VOX0xTQikgJiBTRElPX1BJTlNfRU5fTUFTSykKLQotI2RlZmluZSBGVU5DX0JVU19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwOTQKLSNkZWZpbmUgRlVOQ19CVVNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDk0Ci0jZGVmaW5lIEZVTkNfQlVTX0dQSU9fTU9ERV9NU0IgICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgRlVOQ19CVVNfR1BJT19NT0RFX0xTQiAgICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBGVU5DX0JVU19HUElPX01PREVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKLSNkZWZpbmUgRlVOQ19CVVNfR1BJT19NT0RFX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIEZVTkNfQlVTX0dQSU9fTU9ERV9NQVNLKSA+PiBGVU5DX0JVU19HUElPX01PREVfTFNCKQotI2RlZmluZSBGVU5DX0JVU19HUElPX01PREVfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IEZVTkNfQlVTX0dQSU9fTU9ERV9MU0IpICYgRlVOQ19CVVNfR1BJT19NT0RFX01BU0spCi0jZGVmaW5lIEZVTkNfQlVTX09FX0xfTVNCICAgICAgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgRlVOQ19CVVNfT0VfTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEZVTkNfQlVTX09FX0xfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDNmZmZmZgotI2RlZmluZSBGVU5DX0JVU19PRV9MX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgRlVOQ19CVVNfT0VfTF9NQVNLKSA+PiBGVU5DX0JVU19PRV9MX0xTQikKLSNkZWZpbmUgRlVOQ19CVVNfT0VfTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBGVU5DX0JVU19PRV9MX0xTQikgJiBGVU5DX0JVU19PRV9MX01BU0spCi0KLSNkZWZpbmUgV0xfU09DX0FQQl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDk4Ci0jZGVmaW5lIFdMX1NPQ19BUEJfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA5OAotI2RlZmluZSBXTF9TT0NfQVBCX1RPR0dMRV9NU0IgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xfU09DX0FQQl9UT0dHTEVfTFNCICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMX1NPQ19BUEJfVE9HR0xFX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBXTF9TT0NfQVBCX1RPR0dMRV9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgV0xfU09DX0FQQl9UT0dHTEVfTUFTSykgPj4gV0xfU09DX0FQQl9UT0dHTEVfTFNCKQotI2RlZmluZSBXTF9TT0NfQVBCX1RPR0dMRV9TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IFdMX1NPQ19BUEJfVE9HR0xFX0xTQikgJiBXTF9TT0NfQVBCX1RPR0dMRV9NQVNLKQotCi0jZGVmaW5lIFdMQU5fU0lHTUFfREVMVEFfQUREUkVTUyAgICAgICAgICAgICAgICAgMHgwMDAwMDA5YwotI2RlZmluZSBXTEFOX1NJR01BX0RFTFRBX09GRlNFVCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwOWMKLSNkZWZpbmUgV0xBTl9TSUdNQV9ERUxUQV9FTkFCTEVfTVNCICAgICAgICAgICAgICAxNgotI2RlZmluZSBXTEFOX1NJR01BX0RFTFRBX0VOQUJMRV9MU0IgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFdMQU5fU0lHTUFfREVMVEFfRU5BQkxFX01BU0sgICAgICAgICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBXTEFOX1NJR01BX0RFTFRBX0VOQUJMRV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgV0xBTl9TSUdNQV9ERUxUQV9FTkFCTEVfTUFTSykgPj4gV0xBTl9TSUdNQV9ERUxUQV9FTkFCTEVfTFNCKQotI2RlZmluZSBXTEFOX1NJR01BX0RFTFRBX0VOQUJMRV9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFdMQU5fU0lHTUFfREVMVEFfRU5BQkxFX0xTQikgJiBXTEFOX1NJR01BX0RFTFRBX0VOQUJMRV9NQVNLKQotI2RlZmluZSBXTEFOX1NJR01BX0RFTFRBX1BSRVNDQUxBUl9NU0IgICAgICAgICAgIDE1Ci0jZGVmaW5lIFdMQU5fU0lHTUFfREVMVEFfUFJFU0NBTEFSX0xTQiAgICAgICAgICAgOAotI2RlZmluZSBXTEFOX1NJR01BX0RFTFRBX1BSRVNDQUxBUl9NQVNLICAgICAgICAgIDB4MDAwMGZmMDAKLSNkZWZpbmUgV0xBTl9TSUdNQV9ERUxUQV9QUkVTQ0FMQVJfR0VUKHgpICAgICAgICAoKCh4KSAmIFdMQU5fU0lHTUFfREVMVEFfUFJFU0NBTEFSX01BU0spID4+IFdMQU5fU0lHTUFfREVMVEFfUFJFU0NBTEFSX0xTQikKLSNkZWZpbmUgV0xBTl9TSUdNQV9ERUxUQV9QUkVTQ0FMQVJfU0VUKHgpICAgICAgICAoKCh4KSA8PCBXTEFOX1NJR01BX0RFTFRBX1BSRVNDQUxBUl9MU0IpICYgV0xBTl9TSUdNQV9ERUxUQV9QUkVTQ0FMQVJfTUFTSykKLSNkZWZpbmUgV0xBTl9TSUdNQV9ERUxUQV9UQVJHRVRfTVNCICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFdMQU5fU0lHTUFfREVMVEFfVEFSR0VUX0xTQiAgICAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX1NJR01BX0RFTFRBX1RBUkdFVF9NQVNLICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgV0xBTl9TSUdNQV9ERUxUQV9UQVJHRVRfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIFdMQU5fU0lHTUFfREVMVEFfVEFSR0VUX01BU0spID4+IFdMQU5fU0lHTUFfREVMVEFfVEFSR0VUX0xTQikKLSNkZWZpbmUgV0xBTl9TSUdNQV9ERUxUQV9UQVJHRVRfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCBXTEFOX1NJR01BX0RFTFRBX1RBUkdFVF9MU0IpICYgV0xBTl9TSUdNQV9ERUxUQV9UQVJHRVRfTUFTSykKLQotI2RlZmluZSBXTF9CT09UU1RSQVBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYTAKLSNkZWZpbmUgV0xfQk9PVFNUUkFQX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGEwCi0jZGVmaW5lIFdMX0JPT1RTVFJBUF9TVEFUVVNfTVNCICAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgV0xfQk9PVFNUUkFQX1NUQVRVU19MU0IgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMX0JPT1RTVFJBUF9TVEFUVVNfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDdmZmZmZgotI2RlZmluZSBXTF9CT09UU1RSQVBfU1RBVFVTX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgV0xfQk9PVFNUUkFQX1NUQVRVU19NQVNLKSA+PiBXTF9CT09UU1RSQVBfU1RBVFVTX0xTQikKLSNkZWZpbmUgV0xfQk9PVFNUUkFQX1NUQVRVU19TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBXTF9CT09UU1RSQVBfU1RBVFVTX0xTQikgJiBXTF9CT09UU1RSQVBfU1RBVFVTX01BU0spCi0KLSNkZWZpbmUgQ0xPQ0tfR1BJT19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGE0Ci0jZGVmaW5lIENMT0NLX0dQSU9fT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBhNAotI2RlZmluZSBDTE9DS19HUElPX0NMS19SRVFfT1VUX0VOX01TQiAgICAgICAgICAgIDIKLSNkZWZpbmUgQ0xPQ0tfR1BJT19DTEtfUkVRX09VVF9FTl9MU0IgICAgICAgICAgICAyCi0jZGVmaW5lIENMT0NLX0dQSU9fQ0xLX1JFUV9PVVRfRU5fTUFTSyAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBDTE9DS19HUElPX0NMS19SRVFfT1VUX0VOX0dFVCh4KSAgICAgICAgICgoKHgpICYgQ0xPQ0tfR1BJT19DTEtfUkVRX09VVF9FTl9NQVNLKSA+PiBDTE9DS19HUElPX0NMS19SRVFfT1VUX0VOX0xTQikKLSNkZWZpbmUgQ0xPQ0tfR1BJT19DTEtfUkVRX09VVF9FTl9TRVQoeCkgICAgICAgICAoKCh4KSA8PCBDTE9DS19HUElPX0NMS19SRVFfT1VUX0VOX0xTQikgJiBDTE9DS19HUElPX0NMS19SRVFfT1VUX0VOX01BU0spCi0jZGVmaW5lIENMT0NLX0dQSU9fQlRfQ0xLX1JFUV9FTl9NU0IgICAgICAgICAgICAgMQotI2RlZmluZSBDTE9DS19HUElPX0JUX0NMS19SRVFfRU5fTFNCICAgICAgICAgICAgIDEKLSNkZWZpbmUgQ0xPQ0tfR1BJT19CVF9DTEtfUkVRX0VOX01BU0sgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIENMT0NLX0dQSU9fQlRfQ0xLX1JFUV9FTl9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBDTE9DS19HUElPX0JUX0NMS19SRVFfRU5fTUFTSykgPj4gQ0xPQ0tfR1BJT19CVF9DTEtfUkVRX0VOX0xTQikKLSNkZWZpbmUgQ0xPQ0tfR1BJT19CVF9DTEtfUkVRX0VOX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBDTE9DS19HUElPX0JUX0NMS19SRVFfRU5fTFNCKSAmIENMT0NLX0dQSU9fQlRfQ0xLX1JFUV9FTl9NQVNLKQotI2RlZmluZSBDTE9DS19HUElPX0JUX0NMS19PVVRfRU5fTVNCICAgICAgICAgICAgIDAKLSNkZWZpbmUgQ0xPQ0tfR1BJT19CVF9DTEtfT1VUX0VOX0xTQiAgICAgICAgICAgICAwCi0jZGVmaW5lIENMT0NLX0dQSU9fQlRfQ0xLX09VVF9FTl9NQVNLICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBDTE9DS19HUElPX0JUX0NMS19PVVRfRU5fR0VUKHgpICAgICAgICAgICgoKHgpICYgQ0xPQ0tfR1BJT19CVF9DTEtfT1VUX0VOX01BU0spID4+IENMT0NLX0dQSU9fQlRfQ0xLX09VVF9FTl9MU0IpCi0jZGVmaW5lIENMT0NLX0dQSU9fQlRfQ0xLX09VVF9FTl9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgQ0xPQ0tfR1BJT19CVF9DTEtfT1VUX0VOX0xTQikgJiBDTE9DS19HUElPX0JUX0NMS19PVVRfRU5fTUFTSykKLQotI2RlZmluZSBXTEFOX0RFQlVHX0NPTlRST0xfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDAwYTgKLSNkZWZpbmUgV0xBTl9ERUJVR19DT05UUk9MX09GRlNFVCAgICAgICAgICAgICAgICAweDAwMDAwMGE4Ci0jZGVmaW5lIFdMQU5fREVCVUdfQ09OVFJPTF9FTkFCTEVfTVNCICAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX0RFQlVHX0NPTlRST0xfRU5BQkxFX0xTQiAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9ERUJVR19DT05UUk9MX0VOQUJMRV9NQVNLICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFdMQU5fREVCVUdfQ09OVFJPTF9FTkFCTEVfR0VUKHgpICAgICAgICAgKCgoeCkgJiBXTEFOX0RFQlVHX0NPTlRST0xfRU5BQkxFX01BU0spID4+IFdMQU5fREVCVUdfQ09OVFJPTF9FTkFCTEVfTFNCKQotI2RlZmluZSBXTEFOX0RFQlVHX0NPTlRST0xfRU5BQkxFX1NFVCh4KSAgICAgICAgICgoKHgpIDw8IFdMQU5fREVCVUdfQ09OVFJPTF9FTkFCTEVfTFNCKSAmIFdMQU5fREVCVUdfQ09OVFJPTF9FTkFCTEVfTUFTSykKLQotI2RlZmluZSBXTEFOX0RFQlVHX0lOUFVUX1NFTF9BRERSRVNTICAgICAgICAgICAgIDB4MDAwMDAwYWMKLSNkZWZpbmUgV0xBTl9ERUJVR19JTlBVVF9TRUxfT0ZGU0VUICAgICAgICAgICAgICAweDAwMDAwMGFjCi0jZGVmaW5lIFdMQU5fREVCVUdfSU5QVVRfU0VMX1NISUZUX01TQiAgICAgICAgICAgNQotI2RlZmluZSBXTEFOX0RFQlVHX0lOUFVUX1NFTF9TSElGVF9MU0IgICAgICAgICAgIDQKLSNkZWZpbmUgV0xBTl9ERUJVR19JTlBVVF9TRUxfU0hJRlRfTUFTSyAgICAgICAgICAweDAwMDAwMDMwCi0jZGVmaW5lIFdMQU5fREVCVUdfSU5QVVRfU0VMX1NISUZUX0dFVCh4KSAgICAgICAgKCgoeCkgJiBXTEFOX0RFQlVHX0lOUFVUX1NFTF9TSElGVF9NQVNLKSA+PiBXTEFOX0RFQlVHX0lOUFVUX1NFTF9TSElGVF9MU0IpCi0jZGVmaW5lIFdMQU5fREVCVUdfSU5QVVRfU0VMX1NISUZUX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgV0xBTl9ERUJVR19JTlBVVF9TRUxfU0hJRlRfTFNCKSAmIFdMQU5fREVCVUdfSU5QVVRfU0VMX1NISUZUX01BU0spCi0jZGVmaW5lIFdMQU5fREVCVUdfSU5QVVRfU0VMX1NSQ19NU0IgICAgICAgICAgICAgMwotI2RlZmluZSBXTEFOX0RFQlVHX0lOUFVUX1NFTF9TUkNfTFNCICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9ERUJVR19JTlBVVF9TRUxfU1JDX01BU0sgICAgICAgICAgICAweDAwMDAwMDBmCi0jZGVmaW5lIFdMQU5fREVCVUdfSU5QVVRfU0VMX1NSQ19HRVQoeCkgICAgICAgICAgKCgoeCkgJiBXTEFOX0RFQlVHX0lOUFVUX1NFTF9TUkNfTUFTSykgPj4gV0xBTl9ERUJVR19JTlBVVF9TRUxfU1JDX0xTQikKLSNkZWZpbmUgV0xBTl9ERUJVR19JTlBVVF9TRUxfU1JDX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBXTEFOX0RFQlVHX0lOUFVUX1NFTF9TUkNfTFNCKSAmIFdMQU5fREVCVUdfSU5QVVRfU0VMX1NSQ19NQVNLKQotCi0jZGVmaW5lIFdMQU5fREVCVUdfT1VUX0FERFJFU1MgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBiMAotI2RlZmluZSBXTEFOX0RFQlVHX09VVF9PRkZTRVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYjAKLSNkZWZpbmUgV0xBTl9ERUJVR19PVVRfREFUQV9NU0IgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBXTEFOX0RFQlVHX09VVF9EQVRBX0xTQiAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9ERUJVR19PVVRfREFUQV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDNmZmZmCi0jZGVmaW5lIFdMQU5fREVCVUdfT1VUX0RBVEFfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBXTEFOX0RFQlVHX09VVF9EQVRBX01BU0spID4+IFdMQU5fREVCVUdfT1VUX0RBVEFfTFNCKQotI2RlZmluZSBXTEFOX0RFQlVHX09VVF9EQVRBX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fREVCVUdfT1VUX0RBVEFfTFNCKSAmIFdMQU5fREVCVUdfT1VUX0RBVEFfTUFTSykKLQotI2RlZmluZSBXTEFOX1JFU0VUX1RVUExFX1NUQVRVU19BRERSRVNTICAgICAgICAgIDB4MDAwMDAwYjQKLSNkZWZpbmUgV0xBTl9SRVNFVF9UVVBMRV9TVEFUVVNfT0ZGU0VUICAgICAgICAgICAweDAwMDAwMGI0Ci0jZGVmaW5lIFdMQU5fUkVTRVRfVFVQTEVfU1RBVFVTX1RFU1RfUkVTRVRfVFVQTEVfTVNCIDExCi0jZGVmaW5lIFdMQU5fUkVTRVRfVFVQTEVfU1RBVFVTX1RFU1RfUkVTRVRfVFVQTEVfTFNCIDgKLSNkZWZpbmUgV0xBTl9SRVNFVF9UVVBMRV9TVEFUVVNfVEVTVF9SRVNFVF9UVVBMRV9NQVNLIDB4MDAwMDBmMDAKLSNkZWZpbmUgV0xBTl9SRVNFVF9UVVBMRV9TVEFUVVNfVEVTVF9SRVNFVF9UVVBMRV9HRVQoeCkgKCgoeCkgJiBXTEFOX1JFU0VUX1RVUExFX1NUQVRVU19URVNUX1JFU0VUX1RVUExFX01BU0spID4+IFdMQU5fUkVTRVRfVFVQTEVfU1RBVFVTX1RFU1RfUkVTRVRfVFVQTEVfTFNCKQotI2RlZmluZSBXTEFOX1JFU0VUX1RVUExFX1NUQVRVU19URVNUX1JFU0VUX1RVUExFX1NFVCh4KSAoKCh4KSA8PCBXTEFOX1JFU0VUX1RVUExFX1NUQVRVU19URVNUX1JFU0VUX1RVUExFX0xTQikgJiBXTEFOX1JFU0VUX1RVUExFX1NUQVRVU19URVNUX1JFU0VUX1RVUExFX01BU0spCi0jZGVmaW5lIFdMQU5fUkVTRVRfVFVQTEVfU1RBVFVTX1BJTl9SRVNFVF9UVVBMRV9NU0IgNwotI2RlZmluZSBXTEFOX1JFU0VUX1RVUExFX1NUQVRVU19QSU5fUkVTRVRfVFVQTEVfTFNCIDAKLSNkZWZpbmUgV0xBTl9SRVNFVF9UVVBMRV9TVEFUVVNfUElOX1JFU0VUX1RVUExFX01BU0sgMHgwMDAwMDBmZgotI2RlZmluZSBXTEFOX1JFU0VUX1RVUExFX1NUQVRVU19QSU5fUkVTRVRfVFVQTEVfR0VUKHgpICgoKHgpICYgV0xBTl9SRVNFVF9UVVBMRV9TVEFUVVNfUElOX1JFU0VUX1RVUExFX01BU0spID4+IFdMQU5fUkVTRVRfVFVQTEVfU1RBVFVTX1BJTl9SRVNFVF9UVVBMRV9MU0IpCi0jZGVmaW5lIFdMQU5fUkVTRVRfVFVQTEVfU1RBVFVTX1BJTl9SRVNFVF9UVVBMRV9TRVQoeCkgKCgoeCkgPDwgV0xBTl9SRVNFVF9UVVBMRV9TVEFUVVNfUElOX1JFU0VUX1RVUExFX0xTQikgJiBXTEFOX1JFU0VUX1RVUExFX1NUQVRVU19QSU5fUkVTRVRfVFVQTEVfTUFTSykKLQotI2RlZmluZSBBTlRFTk5BX1NMRUVQX0NPTlRST0xfQUREUkVTUyAgICAgICAgICAgIDB4MDAwMDAwYjgKLSNkZWZpbmUgQU5URU5OQV9TTEVFUF9DT05UUk9MX09GRlNFVCAgICAgICAgICAgICAweDAwMDAwMGI4Ci0jZGVmaW5lIEFOVEVOTkFfU0xFRVBfQ09OVFJPTF9PVkVSUklERV9NU0IgICAgICAgMTQKLSNkZWZpbmUgQU5URU5OQV9TTEVFUF9DT05UUk9MX09WRVJSSURFX0xTQiAgICAgICAxMAotI2RlZmluZSBBTlRFTk5BX1NMRUVQX0NPTlRST0xfT1ZFUlJJREVfTUFTSyAgICAgIDB4MDAwMDdjMDAKLSNkZWZpbmUgQU5URU5OQV9TTEVFUF9DT05UUk9MX09WRVJSSURFX0dFVCh4KSAgICAoKCh4KSAmIEFOVEVOTkFfU0xFRVBfQ09OVFJPTF9PVkVSUklERV9NQVNLKSA+PiBBTlRFTk5BX1NMRUVQX0NPTlRST0xfT1ZFUlJJREVfTFNCKQotI2RlZmluZSBBTlRFTk5BX1NMRUVQX0NPTlRST0xfT1ZFUlJJREVfU0VUKHgpICAgICgoKHgpIDw8IEFOVEVOTkFfU0xFRVBfQ09OVFJPTF9PVkVSUklERV9MU0IpICYgQU5URU5OQV9TTEVFUF9DT05UUk9MX09WRVJSSURFX01BU0spCi0jZGVmaW5lIEFOVEVOTkFfU0xFRVBfQ09OVFJPTF9WQUxVRV9NU0IgICAgICAgICAgOQotI2RlZmluZSBBTlRFTk5BX1NMRUVQX0NPTlRST0xfVkFMVUVfTFNCICAgICAgICAgIDUKLSNkZWZpbmUgQU5URU5OQV9TTEVFUF9DT05UUk9MX1ZBTFVFX01BU0sgICAgICAgICAweDAwMDAwM2UwCi0jZGVmaW5lIEFOVEVOTkFfU0xFRVBfQ09OVFJPTF9WQUxVRV9HRVQoeCkgICAgICAgKCgoeCkgJiBBTlRFTk5BX1NMRUVQX0NPTlRST0xfVkFMVUVfTUFTSykgPj4gQU5URU5OQV9TTEVFUF9DT05UUk9MX1ZBTFVFX0xTQikKLSNkZWZpbmUgQU5URU5OQV9TTEVFUF9DT05UUk9MX1ZBTFVFX1NFVCh4KSAgICAgICAoKCh4KSA8PCBBTlRFTk5BX1NMRUVQX0NPTlRST0xfVkFMVUVfTFNCKSAmIEFOVEVOTkFfU0xFRVBfQ09OVFJPTF9WQUxVRV9NQVNLKQotI2RlZmluZSBBTlRFTk5BX1NMRUVQX0NPTlRST0xfRU5BQkxFX01TQiAgICAgICAgIDQKLSNkZWZpbmUgQU5URU5OQV9TTEVFUF9DT05UUk9MX0VOQUJMRV9MU0IgICAgICAgICAwCi0jZGVmaW5lIEFOVEVOTkFfU0xFRVBfQ09OVFJPTF9FTkFCTEVfTUFTSyAgICAgICAgMHgwMDAwMDAxZgotI2RlZmluZSBBTlRFTk5BX1NMRUVQX0NPTlRST0xfRU5BQkxFX0dFVCh4KSAgICAgICgoKHgpICYgQU5URU5OQV9TTEVFUF9DT05UUk9MX0VOQUJMRV9NQVNLKSA+PiBBTlRFTk5BX1NMRUVQX0NPTlRST0xfRU5BQkxFX0xTQikKLSNkZWZpbmUgQU5URU5OQV9TTEVFUF9DT05UUk9MX0VOQUJMRV9TRVQoeCkgICAgICAoKCh4KSA8PCBBTlRFTk5BX1NMRUVQX0NPTlRST0xfRU5BQkxFX0xTQikgJiBBTlRFTk5BX1NMRUVQX0NPTlRST0xfRU5BQkxFX01BU0spCi0KLQotI2lmbmRlZiBfX0FTU0VNQkxFUl9fCi0KLXR5cGVkZWYgc3RydWN0IGdwaW9fYXRocl93bGFuX3JlZ19yZWdfcyB7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX2dwaW9fb3V0OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9ncGlvX291dF93MXRzOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9ncGlvX291dF93MXRjOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9ncGlvX2VuYWJsZTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fZ3Bpb19lbmFibGVfdzF0czsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fZ3Bpb19lbmFibGVfdzF0YzsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fZ3Bpb19pbjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fZ3Bpb19zdGF0dXM7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX2dwaW9fc3RhdHVzX3cxdHM7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX2dwaW9fc3RhdHVzX3cxdGM7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX2dwaW9fcGluMDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fZ3Bpb19waW4xOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9ncGlvX3BpbjI7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX2dwaW9fcGluMzsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fZ3Bpb19waW40OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9ncGlvX3BpbjU7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX2dwaW9fcGluNjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fZ3Bpb19waW43OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9ncGlvX3Bpbjg7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX2dwaW9fcGluOTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fZ3Bpb19waW4xMDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fZ3Bpb19waW4xMTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fZ3Bpb19waW4xMjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fZ3Bpb19waW4xMzsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fZ3Bpb19waW4xNDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fZ3Bpb19waW4xNTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fZ3Bpb19waW4xNjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fZ3Bpb19waW4xNzsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fZ3Bpb19waW4xODsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fZ3Bpb19waW4xOTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fZ3Bpb19waW4yMDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fZ3Bpb19waW4yMTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fZ3Bpb19waW4yMjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fZ3Bpb19waW4yMzsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fZ3Bpb19waW4yNDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fZ3Bpb19waW4yNTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHNkaW87Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBmdW5jX2J1czsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsX3NvY19hcGI7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX3NpZ21hX2RlbHRhOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xfYm9vdHN0cmFwOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY2xvY2tfZ3BpbzsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fZGVidWdfY29udHJvbDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fZGVidWdfaW5wdXRfc2VsOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9kZWJ1Z19vdXQ7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX3Jlc2V0X3R1cGxlX3N0YXR1czsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGFudGVubmFfc2xlZXBfY29udHJvbDsKLX0gZ3Bpb19hdGhyX3dsYW5fcmVnX3JlZ190OwotCi0jZW5kaWYgLyogX19BU1NFTUJMRVJfXyAqLwotCi0jZW5kaWYgLyogX0dQSU9fQVRIUl9XTEFOX1JFR19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHc0LjAvaHcvZ3Bpb19yZWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3NC4wL2h3L2dwaW9fcmVnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzZTcxMjYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHc0LjAvaHcvZ3Bpb19yZWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwOTQgKzAsMCBAQAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDQtMjAxMCBBdGhlcm9zIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIAotLy8KLS8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotLy8gcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLS8vCi0vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLS8vIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLS8vIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0vLyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0vLyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLS8vIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0vLyBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotLy8KLS8vCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gQXV0aG9yKHMpOiA9IkF0aGVyb3MiCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCi0jaWZkZWYgV0xBTl9IRUFERVJTCi0KLSNpbmNsdWRlICJncGlvX2F0aHJfd2xhbl9yZWcuaCIKLQotCi0jaWZuZGVmIEJUX0hFQURFUlMKLQotI2RlZmluZSBHUElPX09VVF9BRERSRVNTIFdMQU5fR1BJT19PVVRfQUREUkVTUwotI2RlZmluZSBHUElPX09VVF9PRkZTRVQgV0xBTl9HUElPX09VVF9PRkZTRVQKLSNkZWZpbmUgR1BJT19PVVRfREFUQV9NU0IgV0xBTl9HUElPX09VVF9EQVRBX01TQgotI2RlZmluZSBHUElPX09VVF9EQVRBX0xTQiBXTEFOX0dQSU9fT1VUX0RBVEFfTFNCCi0jZGVmaW5lIEdQSU9fT1VUX0RBVEFfTUFTSyBXTEFOX0dQSU9fT1VUX0RBVEFfTUFTSwotI2RlZmluZSBHUElPX09VVF9EQVRBX0dFVCh4KSBXTEFOX0dQSU9fT1VUX0RBVEFfR0VUKHgpCi0jZGVmaW5lIEdQSU9fT1VUX0RBVEFfU0VUKHgpIFdMQU5fR1BJT19PVVRfREFUQV9TRVQoeCkKLSNkZWZpbmUgR1BJT19PVVRfVzFUU19BRERSRVNTIFdMQU5fR1BJT19PVVRfVzFUU19BRERSRVNTCi0jZGVmaW5lIEdQSU9fT1VUX1cxVFNfT0ZGU0VUIFdMQU5fR1BJT19PVVRfVzFUU19PRkZTRVQKLSNkZWZpbmUgR1BJT19PVVRfVzFUU19EQVRBX01TQiBXTEFOX0dQSU9fT1VUX1cxVFNfREFUQV9NU0IKLSNkZWZpbmUgR1BJT19PVVRfVzFUU19EQVRBX0xTQiBXTEFOX0dQSU9fT1VUX1cxVFNfREFUQV9MU0IKLSNkZWZpbmUgR1BJT19PVVRfVzFUU19EQVRBX01BU0sgV0xBTl9HUElPX09VVF9XMVRTX0RBVEFfTUFTSwotI2RlZmluZSBHUElPX09VVF9XMVRTX0RBVEFfR0VUKHgpIFdMQU5fR1BJT19PVVRfVzFUU19EQVRBX0dFVCh4KQotI2RlZmluZSBHUElPX09VVF9XMVRTX0RBVEFfU0VUKHgpIFdMQU5fR1BJT19PVVRfVzFUU19EQVRBX1NFVCh4KQotI2RlZmluZSBHUElPX09VVF9XMVRDX0FERFJFU1MgV0xBTl9HUElPX09VVF9XMVRDX0FERFJFU1MKLSNkZWZpbmUgR1BJT19PVVRfVzFUQ19PRkZTRVQgV0xBTl9HUElPX09VVF9XMVRDX09GRlNFVAotI2RlZmluZSBHUElPX09VVF9XMVRDX0RBVEFfTVNCIFdMQU5fR1BJT19PVVRfVzFUQ19EQVRBX01TQgotI2RlZmluZSBHUElPX09VVF9XMVRDX0RBVEFfTFNCIFdMQU5fR1BJT19PVVRfVzFUQ19EQVRBX0xTQgotI2RlZmluZSBHUElPX09VVF9XMVRDX0RBVEFfTUFTSyBXTEFOX0dQSU9fT1VUX1cxVENfREFUQV9NQVNLCi0jZGVmaW5lIEdQSU9fT1VUX1cxVENfREFUQV9HRVQoeCkgV0xBTl9HUElPX09VVF9XMVRDX0RBVEFfR0VUKHgpCi0jZGVmaW5lIEdQSU9fT1VUX1cxVENfREFUQV9TRVQoeCkgV0xBTl9HUElPX09VVF9XMVRDX0RBVEFfU0VUKHgpCi0jZGVmaW5lIEdQSU9fRU5BQkxFX0FERFJFU1MgV0xBTl9HUElPX0VOQUJMRV9BRERSRVNTCi0jZGVmaW5lIEdQSU9fRU5BQkxFX09GRlNFVCBXTEFOX0dQSU9fRU5BQkxFX09GRlNFVAotI2RlZmluZSBHUElPX0VOQUJMRV9EQVRBX01TQiBXTEFOX0dQSU9fRU5BQkxFX0RBVEFfTVNCCi0jZGVmaW5lIEdQSU9fRU5BQkxFX0RBVEFfTFNCIFdMQU5fR1BJT19FTkFCTEVfREFUQV9MU0IKLSNkZWZpbmUgR1BJT19FTkFCTEVfREFUQV9NQVNLIFdMQU5fR1BJT19FTkFCTEVfREFUQV9NQVNLCi0jZGVmaW5lIEdQSU9fRU5BQkxFX0RBVEFfR0VUKHgpIFdMQU5fR1BJT19FTkFCTEVfREFUQV9HRVQoeCkKLSNkZWZpbmUgR1BJT19FTkFCTEVfREFUQV9TRVQoeCkgV0xBTl9HUElPX0VOQUJMRV9EQVRBX1NFVCh4KQotI2RlZmluZSBHUElPX0VOQUJMRV9XMVRTX0FERFJFU1MgV0xBTl9HUElPX0VOQUJMRV9XMVRTX0FERFJFU1MKLSNkZWZpbmUgR1BJT19FTkFCTEVfVzFUU19PRkZTRVQgV0xBTl9HUElPX0VOQUJMRV9XMVRTX09GRlNFVAotI2RlZmluZSBHUElPX0VOQUJMRV9XMVRTX0RBVEFfTVNCIFdMQU5fR1BJT19FTkFCTEVfVzFUU19EQVRBX01TQgotI2RlZmluZSBHUElPX0VOQUJMRV9XMVRTX0RBVEFfTFNCIFdMQU5fR1BJT19FTkFCTEVfVzFUU19EQVRBX0xTQgotI2RlZmluZSBHUElPX0VOQUJMRV9XMVRTX0RBVEFfTUFTSyBXTEFOX0dQSU9fRU5BQkxFX1cxVFNfREFUQV9NQVNLCi0jZGVmaW5lIEdQSU9fRU5BQkxFX1cxVFNfREFUQV9HRVQoeCkgV0xBTl9HUElPX0VOQUJMRV9XMVRTX0RBVEFfR0VUKHgpCi0jZGVmaW5lIEdQSU9fRU5BQkxFX1cxVFNfREFUQV9TRVQoeCkgV0xBTl9HUElPX0VOQUJMRV9XMVRTX0RBVEFfU0VUKHgpCi0jZGVmaW5lIEdQSU9fRU5BQkxFX1cxVENfQUREUkVTUyBXTEFOX0dQSU9fRU5BQkxFX1cxVENfQUREUkVTUwotI2RlZmluZSBHUElPX0VOQUJMRV9XMVRDX09GRlNFVCBXTEFOX0dQSU9fRU5BQkxFX1cxVENfT0ZGU0VUCi0jZGVmaW5lIEdQSU9fRU5BQkxFX1cxVENfREFUQV9NU0IgV0xBTl9HUElPX0VOQUJMRV9XMVRDX0RBVEFfTVNCCi0jZGVmaW5lIEdQSU9fRU5BQkxFX1cxVENfREFUQV9MU0IgV0xBTl9HUElPX0VOQUJMRV9XMVRDX0RBVEFfTFNCCi0jZGVmaW5lIEdQSU9fRU5BQkxFX1cxVENfREFUQV9NQVNLIFdMQU5fR1BJT19FTkFCTEVfVzFUQ19EQVRBX01BU0sKLSNkZWZpbmUgR1BJT19FTkFCTEVfVzFUQ19EQVRBX0dFVCh4KSBXTEFOX0dQSU9fRU5BQkxFX1cxVENfREFUQV9HRVQoeCkKLSNkZWZpbmUgR1BJT19FTkFCTEVfVzFUQ19EQVRBX1NFVCh4KSBXTEFOX0dQSU9fRU5BQkxFX1cxVENfREFUQV9TRVQoeCkKLSNkZWZpbmUgR1BJT19JTl9BRERSRVNTIFdMQU5fR1BJT19JTl9BRERSRVNTCi0jZGVmaW5lIEdQSU9fSU5fT0ZGU0VUIFdMQU5fR1BJT19JTl9PRkZTRVQKLSNkZWZpbmUgR1BJT19JTl9EQVRBX01TQiBXTEFOX0dQSU9fSU5fREFUQV9NU0IKLSNkZWZpbmUgR1BJT19JTl9EQVRBX0xTQiBXTEFOX0dQSU9fSU5fREFUQV9MU0IKLSNkZWZpbmUgR1BJT19JTl9EQVRBX01BU0sgV0xBTl9HUElPX0lOX0RBVEFfTUFTSwotI2RlZmluZSBHUElPX0lOX0RBVEFfR0VUKHgpIFdMQU5fR1BJT19JTl9EQVRBX0dFVCh4KQotI2RlZmluZSBHUElPX0lOX0RBVEFfU0VUKHgpIFdMQU5fR1BJT19JTl9EQVRBX1NFVCh4KQotI2RlZmluZSBHUElPX1NUQVRVU19BRERSRVNTIFdMQU5fR1BJT19TVEFUVVNfQUREUkVTUwotI2RlZmluZSBHUElPX1NUQVRVU19PRkZTRVQgV0xBTl9HUElPX1NUQVRVU19PRkZTRVQKLSNkZWZpbmUgR1BJT19TVEFUVVNfSU5URVJSVVBUX01TQiBXTEFOX0dQSU9fU1RBVFVTX0lOVEVSUlVQVF9NU0IKLSNkZWZpbmUgR1BJT19TVEFUVVNfSU5URVJSVVBUX0xTQiBXTEFOX0dQSU9fU1RBVFVTX0lOVEVSUlVQVF9MU0IKLSNkZWZpbmUgR1BJT19TVEFUVVNfSU5URVJSVVBUX01BU0sgV0xBTl9HUElPX1NUQVRVU19JTlRFUlJVUFRfTUFTSwotI2RlZmluZSBHUElPX1NUQVRVU19JTlRFUlJVUFRfR0VUKHgpIFdMQU5fR1BJT19TVEFUVVNfSU5URVJSVVBUX0dFVCh4KQotI2RlZmluZSBHUElPX1NUQVRVU19JTlRFUlJVUFRfU0VUKHgpIFdMQU5fR1BJT19TVEFUVVNfSU5URVJSVVBUX1NFVCh4KQotI2RlZmluZSBHUElPX1NUQVRVU19XMVRTX0FERFJFU1MgV0xBTl9HUElPX1NUQVRVU19XMVRTX0FERFJFU1MKLSNkZWZpbmUgR1BJT19TVEFUVVNfVzFUU19PRkZTRVQgV0xBTl9HUElPX1NUQVRVU19XMVRTX09GRlNFVAotI2RlZmluZSBHUElPX1NUQVRVU19XMVRTX0lOVEVSUlVQVF9NU0IgV0xBTl9HUElPX1NUQVRVU19XMVRTX0lOVEVSUlVQVF9NU0IKLSNkZWZpbmUgR1BJT19TVEFUVVNfVzFUU19JTlRFUlJVUFRfTFNCIFdMQU5fR1BJT19TVEFUVVNfVzFUU19JTlRFUlJVUFRfTFNCCi0jZGVmaW5lIEdQSU9fU1RBVFVTX1cxVFNfSU5URVJSVVBUX01BU0sgV0xBTl9HUElPX1NUQVRVU19XMVRTX0lOVEVSUlVQVF9NQVNLCi0jZGVmaW5lIEdQSU9fU1RBVFVTX1cxVFNfSU5URVJSVVBUX0dFVCh4KSBXTEFOX0dQSU9fU1RBVFVTX1cxVFNfSU5URVJSVVBUX0dFVCh4KQotI2RlZmluZSBHUElPX1NUQVRVU19XMVRTX0lOVEVSUlVQVF9TRVQoeCkgV0xBTl9HUElPX1NUQVRVU19XMVRTX0lOVEVSUlVQVF9TRVQoeCkKLSNkZWZpbmUgR1BJT19TVEFUVVNfVzFUQ19BRERSRVNTIFdMQU5fR1BJT19TVEFUVVNfVzFUQ19BRERSRVNTCi0jZGVmaW5lIEdQSU9fU1RBVFVTX1cxVENfT0ZGU0VUIFdMQU5fR1BJT19TVEFUVVNfVzFUQ19PRkZTRVQKLSNkZWZpbmUgR1BJT19TVEFUVVNfVzFUQ19JTlRFUlJVUFRfTVNCIFdMQU5fR1BJT19TVEFUVVNfVzFUQ19JTlRFUlJVUFRfTVNCCi0jZGVmaW5lIEdQSU9fU1RBVFVTX1cxVENfSU5URVJSVVBUX0xTQiBXTEFOX0dQSU9fU1RBVFVTX1cxVENfSU5URVJSVVBUX0xTQgotI2RlZmluZSBHUElPX1NUQVRVU19XMVRDX0lOVEVSUlVQVF9NQVNLIFdMQU5fR1BJT19TVEFUVVNfVzFUQ19JTlRFUlJVUFRfTUFTSwotI2RlZmluZSBHUElPX1NUQVRVU19XMVRDX0lOVEVSUlVQVF9HRVQoeCkgV0xBTl9HUElPX1NUQVRVU19XMVRDX0lOVEVSUlVQVF9HRVQoeCkKLSNkZWZpbmUgR1BJT19TVEFUVVNfVzFUQ19JTlRFUlJVUFRfU0VUKHgpIFdMQU5fR1BJT19TVEFUVVNfVzFUQ19JTlRFUlJVUFRfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMF9BRERSRVNTIFdMQU5fR1BJT19QSU4wX0FERFJFU1MKLSNkZWZpbmUgR1BJT19QSU4wX09GRlNFVCBXTEFOX0dQSU9fUElOMF9PRkZTRVQKLSNkZWZpbmUgR1BJT19QSU4wX0NPTkZJR19NU0IgV0xBTl9HUElPX1BJTjBfQ09ORklHX01TQgotI2RlZmluZSBHUElPX1BJTjBfQ09ORklHX0xTQiBXTEFOX0dQSU9fUElOMF9DT05GSUdfTFNCCi0jZGVmaW5lIEdQSU9fUElOMF9DT05GSUdfTUFTSyBXTEFOX0dQSU9fUElOMF9DT05GSUdfTUFTSwotI2RlZmluZSBHUElPX1BJTjBfQ09ORklHX0dFVCh4KSBXTEFOX0dQSU9fUElOMF9DT05GSUdfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMF9DT05GSUdfU0VUKHgpIFdMQU5fR1BJT19QSU4wX0NPTkZJR19TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4wX1dBS0VVUF9FTkFCTEVfTVNCIFdMQU5fR1BJT19QSU4wX1dBS0VVUF9FTkFCTEVfTVNCCi0jZGVmaW5lIEdQSU9fUElOMF9XQUtFVVBfRU5BQkxFX0xTQiBXTEFOX0dQSU9fUElOMF9XQUtFVVBfRU5BQkxFX0xTQgotI2RlZmluZSBHUElPX1BJTjBfV0FLRVVQX0VOQUJMRV9NQVNLIFdMQU5fR1BJT19QSU4wX1dBS0VVUF9FTkFCTEVfTUFTSwotI2RlZmluZSBHUElPX1BJTjBfV0FLRVVQX0VOQUJMRV9HRVQoeCkgV0xBTl9HUElPX1BJTjBfV0FLRVVQX0VOQUJMRV9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4wX1dBS0VVUF9FTkFCTEVfU0VUKHgpIFdMQU5fR1BJT19QSU4wX1dBS0VVUF9FTkFCTEVfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMF9JTlRfVFlQRV9NU0IgV0xBTl9HUElPX1BJTjBfSU5UX1RZUEVfTVNCCi0jZGVmaW5lIEdQSU9fUElOMF9JTlRfVFlQRV9MU0IgV0xBTl9HUElPX1BJTjBfSU5UX1RZUEVfTFNCCi0jZGVmaW5lIEdQSU9fUElOMF9JTlRfVFlQRV9NQVNLIFdMQU5fR1BJT19QSU4wX0lOVF9UWVBFX01BU0sKLSNkZWZpbmUgR1BJT19QSU4wX0lOVF9UWVBFX0dFVCh4KSBXTEFOX0dQSU9fUElOMF9JTlRfVFlQRV9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4wX0lOVF9UWVBFX1NFVCh4KSBXTEFOX0dQSU9fUElOMF9JTlRfVFlQRV9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4wX1BBRF9QVUxMX01TQiBXTEFOX0dQSU9fUElOMF9QQURfUFVMTF9NU0IKLSNkZWZpbmUgR1BJT19QSU4wX1BBRF9QVUxMX0xTQiBXTEFOX0dQSU9fUElOMF9QQURfUFVMTF9MU0IKLSNkZWZpbmUgR1BJT19QSU4wX1BBRF9QVUxMX01BU0sgV0xBTl9HUElPX1BJTjBfUEFEX1BVTExfTUFTSwotI2RlZmluZSBHUElPX1BJTjBfUEFEX1BVTExfR0VUKHgpIFdMQU5fR1BJT19QSU4wX1BBRF9QVUxMX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjBfUEFEX1BVTExfU0VUKHgpIFdMQU5fR1BJT19QSU4wX1BBRF9QVUxMX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjBfUEFEX1NUUkVOR1RIX01TQiBXTEFOX0dQSU9fUElOMF9QQURfU1RSRU5HVEhfTVNCCi0jZGVmaW5lIEdQSU9fUElOMF9QQURfU1RSRU5HVEhfTFNCIFdMQU5fR1BJT19QSU4wX1BBRF9TVFJFTkdUSF9MU0IKLSNkZWZpbmUgR1BJT19QSU4wX1BBRF9TVFJFTkdUSF9NQVNLIFdMQU5fR1BJT19QSU4wX1BBRF9TVFJFTkdUSF9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMF9QQURfU1RSRU5HVEhfR0VUKHgpIFdMQU5fR1BJT19QSU4wX1BBRF9TVFJFTkdUSF9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4wX1BBRF9TVFJFTkdUSF9TRVQoeCkgV0xBTl9HUElPX1BJTjBfUEFEX1NUUkVOR1RIX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjBfUEFEX0RSSVZFUl9NU0IgV0xBTl9HUElPX1BJTjBfUEFEX0RSSVZFUl9NU0IKLSNkZWZpbmUgR1BJT19QSU4wX1BBRF9EUklWRVJfTFNCIFdMQU5fR1BJT19QSU4wX1BBRF9EUklWRVJfTFNCCi0jZGVmaW5lIEdQSU9fUElOMF9QQURfRFJJVkVSX01BU0sgV0xBTl9HUElPX1BJTjBfUEFEX0RSSVZFUl9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMF9QQURfRFJJVkVSX0dFVCh4KSBXTEFOX0dQSU9fUElOMF9QQURfRFJJVkVSX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjBfUEFEX0RSSVZFUl9TRVQoeCkgV0xBTl9HUElPX1BJTjBfUEFEX0RSSVZFUl9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4wX1NPVVJDRV9NU0IgV0xBTl9HUElPX1BJTjBfU09VUkNFX01TQgotI2RlZmluZSBHUElPX1BJTjBfU09VUkNFX0xTQiBXTEFOX0dQSU9fUElOMF9TT1VSQ0VfTFNCCi0jZGVmaW5lIEdQSU9fUElOMF9TT1VSQ0VfTUFTSyBXTEFOX0dQSU9fUElOMF9TT1VSQ0VfTUFTSwotI2RlZmluZSBHUElPX1BJTjBfU09VUkNFX0dFVCh4KSBXTEFOX0dQSU9fUElOMF9TT1VSQ0VfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMF9TT1VSQ0VfU0VUKHgpIFdMQU5fR1BJT19QSU4wX1NPVVJDRV9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xX0FERFJFU1MgV0xBTl9HUElPX1BJTjFfQUREUkVTUwotI2RlZmluZSBHUElPX1BJTjFfT0ZGU0VUIFdMQU5fR1BJT19QSU4xX09GRlNFVAotI2RlZmluZSBHUElPX1BJTjFfQ09ORklHX01TQiBXTEFOX0dQSU9fUElOMV9DT05GSUdfTVNCCi0jZGVmaW5lIEdQSU9fUElOMV9DT05GSUdfTFNCIFdMQU5fR1BJT19QSU4xX0NPTkZJR19MU0IKLSNkZWZpbmUgR1BJT19QSU4xX0NPTkZJR19NQVNLIFdMQU5fR1BJT19QSU4xX0NPTkZJR19NQVNLCi0jZGVmaW5lIEdQSU9fUElOMV9DT05GSUdfR0VUKHgpIFdMQU5fR1BJT19QSU4xX0NPTkZJR19HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xX0NPTkZJR19TRVQoeCkgV0xBTl9HUElPX1BJTjFfQ09ORklHX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjFfV0FLRVVQX0VOQUJMRV9NU0IgV0xBTl9HUElPX1BJTjFfV0FLRVVQX0VOQUJMRV9NU0IKLSNkZWZpbmUgR1BJT19QSU4xX1dBS0VVUF9FTkFCTEVfTFNCIFdMQU5fR1BJT19QSU4xX1dBS0VVUF9FTkFCTEVfTFNCCi0jZGVmaW5lIEdQSU9fUElOMV9XQUtFVVBfRU5BQkxFX01BU0sgV0xBTl9HUElPX1BJTjFfV0FLRVVQX0VOQUJMRV9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMV9XQUtFVVBfRU5BQkxFX0dFVCh4KSBXTEFOX0dQSU9fUElOMV9XQUtFVVBfRU5BQkxFX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjFfV0FLRVVQX0VOQUJMRV9TRVQoeCkgV0xBTl9HUElPX1BJTjFfV0FLRVVQX0VOQUJMRV9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xX0lOVF9UWVBFX01TQiBXTEFOX0dQSU9fUElOMV9JTlRfVFlQRV9NU0IKLSNkZWZpbmUgR1BJT19QSU4xX0lOVF9UWVBFX0xTQiBXTEFOX0dQSU9fUElOMV9JTlRfVFlQRV9MU0IKLSNkZWZpbmUgR1BJT19QSU4xX0lOVF9UWVBFX01BU0sgV0xBTl9HUElPX1BJTjFfSU5UX1RZUEVfTUFTSwotI2RlZmluZSBHUElPX1BJTjFfSU5UX1RZUEVfR0VUKHgpIFdMQU5fR1BJT19QSU4xX0lOVF9UWVBFX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjFfSU5UX1RZUEVfU0VUKHgpIFdMQU5fR1BJT19QSU4xX0lOVF9UWVBFX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjFfUEFEX1BVTExfTVNCIFdMQU5fR1BJT19QSU4xX1BBRF9QVUxMX01TQgotI2RlZmluZSBHUElPX1BJTjFfUEFEX1BVTExfTFNCIFdMQU5fR1BJT19QSU4xX1BBRF9QVUxMX0xTQgotI2RlZmluZSBHUElPX1BJTjFfUEFEX1BVTExfTUFTSyBXTEFOX0dQSU9fUElOMV9QQURfUFVMTF9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMV9QQURfUFVMTF9HRVQoeCkgV0xBTl9HUElPX1BJTjFfUEFEX1BVTExfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMV9QQURfUFVMTF9TRVQoeCkgV0xBTl9HUElPX1BJTjFfUEFEX1BVTExfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMV9QQURfU1RSRU5HVEhfTVNCIFdMQU5fR1BJT19QSU4xX1BBRF9TVFJFTkdUSF9NU0IKLSNkZWZpbmUgR1BJT19QSU4xX1BBRF9TVFJFTkdUSF9MU0IgV0xBTl9HUElPX1BJTjFfUEFEX1NUUkVOR1RIX0xTQgotI2RlZmluZSBHUElPX1BJTjFfUEFEX1NUUkVOR1RIX01BU0sgV0xBTl9HUElPX1BJTjFfUEFEX1NUUkVOR1RIX01BU0sKLSNkZWZpbmUgR1BJT19QSU4xX1BBRF9TVFJFTkdUSF9HRVQoeCkgV0xBTl9HUElPX1BJTjFfUEFEX1NUUkVOR1RIX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjFfUEFEX1NUUkVOR1RIX1NFVCh4KSBXTEFOX0dQSU9fUElOMV9QQURfU1RSRU5HVEhfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMV9QQURfRFJJVkVSX01TQiBXTEFOX0dQSU9fUElOMV9QQURfRFJJVkVSX01TQgotI2RlZmluZSBHUElPX1BJTjFfUEFEX0RSSVZFUl9MU0IgV0xBTl9HUElPX1BJTjFfUEFEX0RSSVZFUl9MU0IKLSNkZWZpbmUgR1BJT19QSU4xX1BBRF9EUklWRVJfTUFTSyBXTEFOX0dQSU9fUElOMV9QQURfRFJJVkVSX01BU0sKLSNkZWZpbmUgR1BJT19QSU4xX1BBRF9EUklWRVJfR0VUKHgpIFdMQU5fR1BJT19QSU4xX1BBRF9EUklWRVJfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMV9QQURfRFJJVkVSX1NFVCh4KSBXTEFOX0dQSU9fUElOMV9QQURfRFJJVkVSX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjFfU09VUkNFX01TQiBXTEFOX0dQSU9fUElOMV9TT1VSQ0VfTVNCCi0jZGVmaW5lIEdQSU9fUElOMV9TT1VSQ0VfTFNCIFdMQU5fR1BJT19QSU4xX1NPVVJDRV9MU0IKLSNkZWZpbmUgR1BJT19QSU4xX1NPVVJDRV9NQVNLIFdMQU5fR1BJT19QSU4xX1NPVVJDRV9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMV9TT1VSQ0VfR0VUKHgpIFdMQU5fR1BJT19QSU4xX1NPVVJDRV9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xX1NPVVJDRV9TRVQoeCkgV0xBTl9HUElPX1BJTjFfU09VUkNFX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjJfQUREUkVTUyBXTEFOX0dQSU9fUElOMl9BRERSRVNTCi0jZGVmaW5lIEdQSU9fUElOMl9PRkZTRVQgV0xBTl9HUElPX1BJTjJfT0ZGU0VUCi0jZGVmaW5lIEdQSU9fUElOMl9DT05GSUdfTVNCIFdMQU5fR1BJT19QSU4yX0NPTkZJR19NU0IKLSNkZWZpbmUgR1BJT19QSU4yX0NPTkZJR19MU0IgV0xBTl9HUElPX1BJTjJfQ09ORklHX0xTQgotI2RlZmluZSBHUElPX1BJTjJfQ09ORklHX01BU0sgV0xBTl9HUElPX1BJTjJfQ09ORklHX01BU0sKLSNkZWZpbmUgR1BJT19QSU4yX0NPTkZJR19HRVQoeCkgV0xBTl9HUElPX1BJTjJfQ09ORklHX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjJfQ09ORklHX1NFVCh4KSBXTEFOX0dQSU9fUElOMl9DT05GSUdfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMl9XQUtFVVBfRU5BQkxFX01TQiBXTEFOX0dQSU9fUElOMl9XQUtFVVBfRU5BQkxFX01TQgotI2RlZmluZSBHUElPX1BJTjJfV0FLRVVQX0VOQUJMRV9MU0IgV0xBTl9HUElPX1BJTjJfV0FLRVVQX0VOQUJMRV9MU0IKLSNkZWZpbmUgR1BJT19QSU4yX1dBS0VVUF9FTkFCTEVfTUFTSyBXTEFOX0dQSU9fUElOMl9XQUtFVVBfRU5BQkxFX01BU0sKLSNkZWZpbmUgR1BJT19QSU4yX1dBS0VVUF9FTkFCTEVfR0VUKHgpIFdMQU5fR1BJT19QSU4yX1dBS0VVUF9FTkFCTEVfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMl9XQUtFVVBfRU5BQkxFX1NFVCh4KSBXTEFOX0dQSU9fUElOMl9XQUtFVVBfRU5BQkxFX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjJfSU5UX1RZUEVfTVNCIFdMQU5fR1BJT19QSU4yX0lOVF9UWVBFX01TQgotI2RlZmluZSBHUElPX1BJTjJfSU5UX1RZUEVfTFNCIFdMQU5fR1BJT19QSU4yX0lOVF9UWVBFX0xTQgotI2RlZmluZSBHUElPX1BJTjJfSU5UX1RZUEVfTUFTSyBXTEFOX0dQSU9fUElOMl9JTlRfVFlQRV9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMl9JTlRfVFlQRV9HRVQoeCkgV0xBTl9HUElPX1BJTjJfSU5UX1RZUEVfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMl9JTlRfVFlQRV9TRVQoeCkgV0xBTl9HUElPX1BJTjJfSU5UX1RZUEVfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMl9QQURfUFVMTF9NU0IgV0xBTl9HUElPX1BJTjJfUEFEX1BVTExfTVNCCi0jZGVmaW5lIEdQSU9fUElOMl9QQURfUFVMTF9MU0IgV0xBTl9HUElPX1BJTjJfUEFEX1BVTExfTFNCCi0jZGVmaW5lIEdQSU9fUElOMl9QQURfUFVMTF9NQVNLIFdMQU5fR1BJT19QSU4yX1BBRF9QVUxMX01BU0sKLSNkZWZpbmUgR1BJT19QSU4yX1BBRF9QVUxMX0dFVCh4KSBXTEFOX0dQSU9fUElOMl9QQURfUFVMTF9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4yX1BBRF9QVUxMX1NFVCh4KSBXTEFOX0dQSU9fUElOMl9QQURfUFVMTF9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4yX1BBRF9TVFJFTkdUSF9NU0IgV0xBTl9HUElPX1BJTjJfUEFEX1NUUkVOR1RIX01TQgotI2RlZmluZSBHUElPX1BJTjJfUEFEX1NUUkVOR1RIX0xTQiBXTEFOX0dQSU9fUElOMl9QQURfU1RSRU5HVEhfTFNCCi0jZGVmaW5lIEdQSU9fUElOMl9QQURfU1RSRU5HVEhfTUFTSyBXTEFOX0dQSU9fUElOMl9QQURfU1RSRU5HVEhfTUFTSwotI2RlZmluZSBHUElPX1BJTjJfUEFEX1NUUkVOR1RIX0dFVCh4KSBXTEFOX0dQSU9fUElOMl9QQURfU1RSRU5HVEhfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMl9QQURfU1RSRU5HVEhfU0VUKHgpIFdMQU5fR1BJT19QSU4yX1BBRF9TVFJFTkdUSF9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4yX1BBRF9EUklWRVJfTVNCIFdMQU5fR1BJT19QSU4yX1BBRF9EUklWRVJfTVNCCi0jZGVmaW5lIEdQSU9fUElOMl9QQURfRFJJVkVSX0xTQiBXTEFOX0dQSU9fUElOMl9QQURfRFJJVkVSX0xTQgotI2RlZmluZSBHUElPX1BJTjJfUEFEX0RSSVZFUl9NQVNLIFdMQU5fR1BJT19QSU4yX1BBRF9EUklWRVJfTUFTSwotI2RlZmluZSBHUElPX1BJTjJfUEFEX0RSSVZFUl9HRVQoeCkgV0xBTl9HUElPX1BJTjJfUEFEX0RSSVZFUl9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4yX1BBRF9EUklWRVJfU0VUKHgpIFdMQU5fR1BJT19QSU4yX1BBRF9EUklWRVJfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMl9TT1VSQ0VfTVNCIFdMQU5fR1BJT19QSU4yX1NPVVJDRV9NU0IKLSNkZWZpbmUgR1BJT19QSU4yX1NPVVJDRV9MU0IgV0xBTl9HUElPX1BJTjJfU09VUkNFX0xTQgotI2RlZmluZSBHUElPX1BJTjJfU09VUkNFX01BU0sgV0xBTl9HUElPX1BJTjJfU09VUkNFX01BU0sKLSNkZWZpbmUgR1BJT19QSU4yX1NPVVJDRV9HRVQoeCkgV0xBTl9HUElPX1BJTjJfU09VUkNFX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjJfU09VUkNFX1NFVCh4KSBXTEFOX0dQSU9fUElOMl9TT1VSQ0VfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOM19BRERSRVNTIFdMQU5fR1BJT19QSU4zX0FERFJFU1MKLSNkZWZpbmUgR1BJT19QSU4zX09GRlNFVCBXTEFOX0dQSU9fUElOM19PRkZTRVQKLSNkZWZpbmUgR1BJT19QSU4zX0NPTkZJR19NU0IgV0xBTl9HUElPX1BJTjNfQ09ORklHX01TQgotI2RlZmluZSBHUElPX1BJTjNfQ09ORklHX0xTQiBXTEFOX0dQSU9fUElOM19DT05GSUdfTFNCCi0jZGVmaW5lIEdQSU9fUElOM19DT05GSUdfTUFTSyBXTEFOX0dQSU9fUElOM19DT05GSUdfTUFTSwotI2RlZmluZSBHUElPX1BJTjNfQ09ORklHX0dFVCh4KSBXTEFOX0dQSU9fUElOM19DT05GSUdfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOM19DT05GSUdfU0VUKHgpIFdMQU5fR1BJT19QSU4zX0NPTkZJR19TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4zX1dBS0VVUF9FTkFCTEVfTVNCIFdMQU5fR1BJT19QSU4zX1dBS0VVUF9FTkFCTEVfTVNCCi0jZGVmaW5lIEdQSU9fUElOM19XQUtFVVBfRU5BQkxFX0xTQiBXTEFOX0dQSU9fUElOM19XQUtFVVBfRU5BQkxFX0xTQgotI2RlZmluZSBHUElPX1BJTjNfV0FLRVVQX0VOQUJMRV9NQVNLIFdMQU5fR1BJT19QSU4zX1dBS0VVUF9FTkFCTEVfTUFTSwotI2RlZmluZSBHUElPX1BJTjNfV0FLRVVQX0VOQUJMRV9HRVQoeCkgV0xBTl9HUElPX1BJTjNfV0FLRVVQX0VOQUJMRV9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4zX1dBS0VVUF9FTkFCTEVfU0VUKHgpIFdMQU5fR1BJT19QSU4zX1dBS0VVUF9FTkFCTEVfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOM19JTlRfVFlQRV9NU0IgV0xBTl9HUElPX1BJTjNfSU5UX1RZUEVfTVNCCi0jZGVmaW5lIEdQSU9fUElOM19JTlRfVFlQRV9MU0IgV0xBTl9HUElPX1BJTjNfSU5UX1RZUEVfTFNCCi0jZGVmaW5lIEdQSU9fUElOM19JTlRfVFlQRV9NQVNLIFdMQU5fR1BJT19QSU4zX0lOVF9UWVBFX01BU0sKLSNkZWZpbmUgR1BJT19QSU4zX0lOVF9UWVBFX0dFVCh4KSBXTEFOX0dQSU9fUElOM19JTlRfVFlQRV9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4zX0lOVF9UWVBFX1NFVCh4KSBXTEFOX0dQSU9fUElOM19JTlRfVFlQRV9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4zX1BBRF9QVUxMX01TQiBXTEFOX0dQSU9fUElOM19QQURfUFVMTF9NU0IKLSNkZWZpbmUgR1BJT19QSU4zX1BBRF9QVUxMX0xTQiBXTEFOX0dQSU9fUElOM19QQURfUFVMTF9MU0IKLSNkZWZpbmUgR1BJT19QSU4zX1BBRF9QVUxMX01BU0sgV0xBTl9HUElPX1BJTjNfUEFEX1BVTExfTUFTSwotI2RlZmluZSBHUElPX1BJTjNfUEFEX1BVTExfR0VUKHgpIFdMQU5fR1BJT19QSU4zX1BBRF9QVUxMX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjNfUEFEX1BVTExfU0VUKHgpIFdMQU5fR1BJT19QSU4zX1BBRF9QVUxMX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjNfUEFEX1NUUkVOR1RIX01TQiBXTEFOX0dQSU9fUElOM19QQURfU1RSRU5HVEhfTVNCCi0jZGVmaW5lIEdQSU9fUElOM19QQURfU1RSRU5HVEhfTFNCIFdMQU5fR1BJT19QSU4zX1BBRF9TVFJFTkdUSF9MU0IKLSNkZWZpbmUgR1BJT19QSU4zX1BBRF9TVFJFTkdUSF9NQVNLIFdMQU5fR1BJT19QSU4zX1BBRF9TVFJFTkdUSF9NQVNLCi0jZGVmaW5lIEdQSU9fUElOM19QQURfU1RSRU5HVEhfR0VUKHgpIFdMQU5fR1BJT19QSU4zX1BBRF9TVFJFTkdUSF9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4zX1BBRF9TVFJFTkdUSF9TRVQoeCkgV0xBTl9HUElPX1BJTjNfUEFEX1NUUkVOR1RIX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjNfUEFEX0RSSVZFUl9NU0IgV0xBTl9HUElPX1BJTjNfUEFEX0RSSVZFUl9NU0IKLSNkZWZpbmUgR1BJT19QSU4zX1BBRF9EUklWRVJfTFNCIFdMQU5fR1BJT19QSU4zX1BBRF9EUklWRVJfTFNCCi0jZGVmaW5lIEdQSU9fUElOM19QQURfRFJJVkVSX01BU0sgV0xBTl9HUElPX1BJTjNfUEFEX0RSSVZFUl9NQVNLCi0jZGVmaW5lIEdQSU9fUElOM19QQURfRFJJVkVSX0dFVCh4KSBXTEFOX0dQSU9fUElOM19QQURfRFJJVkVSX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjNfUEFEX0RSSVZFUl9TRVQoeCkgV0xBTl9HUElPX1BJTjNfUEFEX0RSSVZFUl9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4zX1NPVVJDRV9NU0IgV0xBTl9HUElPX1BJTjNfU09VUkNFX01TQgotI2RlZmluZSBHUElPX1BJTjNfU09VUkNFX0xTQiBXTEFOX0dQSU9fUElOM19TT1VSQ0VfTFNCCi0jZGVmaW5lIEdQSU9fUElOM19TT1VSQ0VfTUFTSyBXTEFOX0dQSU9fUElOM19TT1VSQ0VfTUFTSwotI2RlZmluZSBHUElPX1BJTjNfU09VUkNFX0dFVCh4KSBXTEFOX0dQSU9fUElOM19TT1VSQ0VfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOM19TT1VSQ0VfU0VUKHgpIFdMQU5fR1BJT19QSU4zX1NPVVJDRV9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU40X0FERFJFU1MgV0xBTl9HUElPX1BJTjRfQUREUkVTUwotI2RlZmluZSBHUElPX1BJTjRfT0ZGU0VUIFdMQU5fR1BJT19QSU40X09GRlNFVAotI2RlZmluZSBHUElPX1BJTjRfQ09ORklHX01TQiBXTEFOX0dQSU9fUElONF9DT05GSUdfTVNCCi0jZGVmaW5lIEdQSU9fUElONF9DT05GSUdfTFNCIFdMQU5fR1BJT19QSU40X0NPTkZJR19MU0IKLSNkZWZpbmUgR1BJT19QSU40X0NPTkZJR19NQVNLIFdMQU5fR1BJT19QSU40X0NPTkZJR19NQVNLCi0jZGVmaW5lIEdQSU9fUElONF9DT05GSUdfR0VUKHgpIFdMQU5fR1BJT19QSU40X0NPTkZJR19HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU40X0NPTkZJR19TRVQoeCkgV0xBTl9HUElPX1BJTjRfQ09ORklHX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjRfV0FLRVVQX0VOQUJMRV9NU0IgV0xBTl9HUElPX1BJTjRfV0FLRVVQX0VOQUJMRV9NU0IKLSNkZWZpbmUgR1BJT19QSU40X1dBS0VVUF9FTkFCTEVfTFNCIFdMQU5fR1BJT19QSU40X1dBS0VVUF9FTkFCTEVfTFNCCi0jZGVmaW5lIEdQSU9fUElONF9XQUtFVVBfRU5BQkxFX01BU0sgV0xBTl9HUElPX1BJTjRfV0FLRVVQX0VOQUJMRV9NQVNLCi0jZGVmaW5lIEdQSU9fUElONF9XQUtFVVBfRU5BQkxFX0dFVCh4KSBXTEFOX0dQSU9fUElONF9XQUtFVVBfRU5BQkxFX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjRfV0FLRVVQX0VOQUJMRV9TRVQoeCkgV0xBTl9HUElPX1BJTjRfV0FLRVVQX0VOQUJMRV9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU40X0lOVF9UWVBFX01TQiBXTEFOX0dQSU9fUElONF9JTlRfVFlQRV9NU0IKLSNkZWZpbmUgR1BJT19QSU40X0lOVF9UWVBFX0xTQiBXTEFOX0dQSU9fUElONF9JTlRfVFlQRV9MU0IKLSNkZWZpbmUgR1BJT19QSU40X0lOVF9UWVBFX01BU0sgV0xBTl9HUElPX1BJTjRfSU5UX1RZUEVfTUFTSwotI2RlZmluZSBHUElPX1BJTjRfSU5UX1RZUEVfR0VUKHgpIFdMQU5fR1BJT19QSU40X0lOVF9UWVBFX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjRfSU5UX1RZUEVfU0VUKHgpIFdMQU5fR1BJT19QSU40X0lOVF9UWVBFX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjRfUEFEX1BVTExfTVNCIFdMQU5fR1BJT19QSU40X1BBRF9QVUxMX01TQgotI2RlZmluZSBHUElPX1BJTjRfUEFEX1BVTExfTFNCIFdMQU5fR1BJT19QSU40X1BBRF9QVUxMX0xTQgotI2RlZmluZSBHUElPX1BJTjRfUEFEX1BVTExfTUFTSyBXTEFOX0dQSU9fUElONF9QQURfUFVMTF9NQVNLCi0jZGVmaW5lIEdQSU9fUElONF9QQURfUFVMTF9HRVQoeCkgV0xBTl9HUElPX1BJTjRfUEFEX1BVTExfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElONF9QQURfUFVMTF9TRVQoeCkgV0xBTl9HUElPX1BJTjRfUEFEX1BVTExfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElONF9QQURfU1RSRU5HVEhfTVNCIFdMQU5fR1BJT19QSU40X1BBRF9TVFJFTkdUSF9NU0IKLSNkZWZpbmUgR1BJT19QSU40X1BBRF9TVFJFTkdUSF9MU0IgV0xBTl9HUElPX1BJTjRfUEFEX1NUUkVOR1RIX0xTQgotI2RlZmluZSBHUElPX1BJTjRfUEFEX1NUUkVOR1RIX01BU0sgV0xBTl9HUElPX1BJTjRfUEFEX1NUUkVOR1RIX01BU0sKLSNkZWZpbmUgR1BJT19QSU40X1BBRF9TVFJFTkdUSF9HRVQoeCkgV0xBTl9HUElPX1BJTjRfUEFEX1NUUkVOR1RIX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjRfUEFEX1NUUkVOR1RIX1NFVCh4KSBXTEFOX0dQSU9fUElONF9QQURfU1RSRU5HVEhfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElONF9QQURfRFJJVkVSX01TQiBXTEFOX0dQSU9fUElONF9QQURfRFJJVkVSX01TQgotI2RlZmluZSBHUElPX1BJTjRfUEFEX0RSSVZFUl9MU0IgV0xBTl9HUElPX1BJTjRfUEFEX0RSSVZFUl9MU0IKLSNkZWZpbmUgR1BJT19QSU40X1BBRF9EUklWRVJfTUFTSyBXTEFOX0dQSU9fUElONF9QQURfRFJJVkVSX01BU0sKLSNkZWZpbmUgR1BJT19QSU40X1BBRF9EUklWRVJfR0VUKHgpIFdMQU5fR1BJT19QSU40X1BBRF9EUklWRVJfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElONF9QQURfRFJJVkVSX1NFVCh4KSBXTEFOX0dQSU9fUElONF9QQURfRFJJVkVSX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjRfU09VUkNFX01TQiBXTEFOX0dQSU9fUElONF9TT1VSQ0VfTVNCCi0jZGVmaW5lIEdQSU9fUElONF9TT1VSQ0VfTFNCIFdMQU5fR1BJT19QSU40X1NPVVJDRV9MU0IKLSNkZWZpbmUgR1BJT19QSU40X1NPVVJDRV9NQVNLIFdMQU5fR1BJT19QSU40X1NPVVJDRV9NQVNLCi0jZGVmaW5lIEdQSU9fUElONF9TT1VSQ0VfR0VUKHgpIFdMQU5fR1BJT19QSU40X1NPVVJDRV9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU40X1NPVVJDRV9TRVQoeCkgV0xBTl9HUElPX1BJTjRfU09VUkNFX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjVfQUREUkVTUyBXTEFOX0dQSU9fUElONV9BRERSRVNTCi0jZGVmaW5lIEdQSU9fUElONV9PRkZTRVQgV0xBTl9HUElPX1BJTjVfT0ZGU0VUCi0jZGVmaW5lIEdQSU9fUElONV9DT05GSUdfTVNCIFdMQU5fR1BJT19QSU41X0NPTkZJR19NU0IKLSNkZWZpbmUgR1BJT19QSU41X0NPTkZJR19MU0IgV0xBTl9HUElPX1BJTjVfQ09ORklHX0xTQgotI2RlZmluZSBHUElPX1BJTjVfQ09ORklHX01BU0sgV0xBTl9HUElPX1BJTjVfQ09ORklHX01BU0sKLSNkZWZpbmUgR1BJT19QSU41X0NPTkZJR19HRVQoeCkgV0xBTl9HUElPX1BJTjVfQ09ORklHX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjVfQ09ORklHX1NFVCh4KSBXTEFOX0dQSU9fUElONV9DT05GSUdfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElONV9XQUtFVVBfRU5BQkxFX01TQiBXTEFOX0dQSU9fUElONV9XQUtFVVBfRU5BQkxFX01TQgotI2RlZmluZSBHUElPX1BJTjVfV0FLRVVQX0VOQUJMRV9MU0IgV0xBTl9HUElPX1BJTjVfV0FLRVVQX0VOQUJMRV9MU0IKLSNkZWZpbmUgR1BJT19QSU41X1dBS0VVUF9FTkFCTEVfTUFTSyBXTEFOX0dQSU9fUElONV9XQUtFVVBfRU5BQkxFX01BU0sKLSNkZWZpbmUgR1BJT19QSU41X1dBS0VVUF9FTkFCTEVfR0VUKHgpIFdMQU5fR1BJT19QSU41X1dBS0VVUF9FTkFCTEVfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElONV9XQUtFVVBfRU5BQkxFX1NFVCh4KSBXTEFOX0dQSU9fUElONV9XQUtFVVBfRU5BQkxFX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjVfSU5UX1RZUEVfTVNCIFdMQU5fR1BJT19QSU41X0lOVF9UWVBFX01TQgotI2RlZmluZSBHUElPX1BJTjVfSU5UX1RZUEVfTFNCIFdMQU5fR1BJT19QSU41X0lOVF9UWVBFX0xTQgotI2RlZmluZSBHUElPX1BJTjVfSU5UX1RZUEVfTUFTSyBXTEFOX0dQSU9fUElONV9JTlRfVFlQRV9NQVNLCi0jZGVmaW5lIEdQSU9fUElONV9JTlRfVFlQRV9HRVQoeCkgV0xBTl9HUElPX1BJTjVfSU5UX1RZUEVfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElONV9JTlRfVFlQRV9TRVQoeCkgV0xBTl9HUElPX1BJTjVfSU5UX1RZUEVfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElONV9QQURfUFVMTF9NU0IgV0xBTl9HUElPX1BJTjVfUEFEX1BVTExfTVNCCi0jZGVmaW5lIEdQSU9fUElONV9QQURfUFVMTF9MU0IgV0xBTl9HUElPX1BJTjVfUEFEX1BVTExfTFNCCi0jZGVmaW5lIEdQSU9fUElONV9QQURfUFVMTF9NQVNLIFdMQU5fR1BJT19QSU41X1BBRF9QVUxMX01BU0sKLSNkZWZpbmUgR1BJT19QSU41X1BBRF9QVUxMX0dFVCh4KSBXTEFOX0dQSU9fUElONV9QQURfUFVMTF9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU41X1BBRF9QVUxMX1NFVCh4KSBXTEFOX0dQSU9fUElONV9QQURfUFVMTF9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU41X1BBRF9TVFJFTkdUSF9NU0IgV0xBTl9HUElPX1BJTjVfUEFEX1NUUkVOR1RIX01TQgotI2RlZmluZSBHUElPX1BJTjVfUEFEX1NUUkVOR1RIX0xTQiBXTEFOX0dQSU9fUElONV9QQURfU1RSRU5HVEhfTFNCCi0jZGVmaW5lIEdQSU9fUElONV9QQURfU1RSRU5HVEhfTUFTSyBXTEFOX0dQSU9fUElONV9QQURfU1RSRU5HVEhfTUFTSwotI2RlZmluZSBHUElPX1BJTjVfUEFEX1NUUkVOR1RIX0dFVCh4KSBXTEFOX0dQSU9fUElONV9QQURfU1RSRU5HVEhfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElONV9QQURfU1RSRU5HVEhfU0VUKHgpIFdMQU5fR1BJT19QSU41X1BBRF9TVFJFTkdUSF9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU41X1BBRF9EUklWRVJfTVNCIFdMQU5fR1BJT19QSU41X1BBRF9EUklWRVJfTVNCCi0jZGVmaW5lIEdQSU9fUElONV9QQURfRFJJVkVSX0xTQiBXTEFOX0dQSU9fUElONV9QQURfRFJJVkVSX0xTQgotI2RlZmluZSBHUElPX1BJTjVfUEFEX0RSSVZFUl9NQVNLIFdMQU5fR1BJT19QSU41X1BBRF9EUklWRVJfTUFTSwotI2RlZmluZSBHUElPX1BJTjVfUEFEX0RSSVZFUl9HRVQoeCkgV0xBTl9HUElPX1BJTjVfUEFEX0RSSVZFUl9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU41X1BBRF9EUklWRVJfU0VUKHgpIFdMQU5fR1BJT19QSU41X1BBRF9EUklWRVJfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElONV9TT1VSQ0VfTVNCIFdMQU5fR1BJT19QSU41X1NPVVJDRV9NU0IKLSNkZWZpbmUgR1BJT19QSU41X1NPVVJDRV9MU0IgV0xBTl9HUElPX1BJTjVfU09VUkNFX0xTQgotI2RlZmluZSBHUElPX1BJTjVfU09VUkNFX01BU0sgV0xBTl9HUElPX1BJTjVfU09VUkNFX01BU0sKLSNkZWZpbmUgR1BJT19QSU41X1NPVVJDRV9HRVQoeCkgV0xBTl9HUElPX1BJTjVfU09VUkNFX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjVfU09VUkNFX1NFVCh4KSBXTEFOX0dQSU9fUElONV9TT1VSQ0VfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElONl9BRERSRVNTIFdMQU5fR1BJT19QSU42X0FERFJFU1MKLSNkZWZpbmUgR1BJT19QSU42X09GRlNFVCBXTEFOX0dQSU9fUElONl9PRkZTRVQKLSNkZWZpbmUgR1BJT19QSU42X0NPTkZJR19NU0IgV0xBTl9HUElPX1BJTjZfQ09ORklHX01TQgotI2RlZmluZSBHUElPX1BJTjZfQ09ORklHX0xTQiBXTEFOX0dQSU9fUElONl9DT05GSUdfTFNCCi0jZGVmaW5lIEdQSU9fUElONl9DT05GSUdfTUFTSyBXTEFOX0dQSU9fUElONl9DT05GSUdfTUFTSwotI2RlZmluZSBHUElPX1BJTjZfQ09ORklHX0dFVCh4KSBXTEFOX0dQSU9fUElONl9DT05GSUdfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElONl9DT05GSUdfU0VUKHgpIFdMQU5fR1BJT19QSU42X0NPTkZJR19TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU42X1dBS0VVUF9FTkFCTEVfTVNCIFdMQU5fR1BJT19QSU42X1dBS0VVUF9FTkFCTEVfTVNCCi0jZGVmaW5lIEdQSU9fUElONl9XQUtFVVBfRU5BQkxFX0xTQiBXTEFOX0dQSU9fUElONl9XQUtFVVBfRU5BQkxFX0xTQgotI2RlZmluZSBHUElPX1BJTjZfV0FLRVVQX0VOQUJMRV9NQVNLIFdMQU5fR1BJT19QSU42X1dBS0VVUF9FTkFCTEVfTUFTSwotI2RlZmluZSBHUElPX1BJTjZfV0FLRVVQX0VOQUJMRV9HRVQoeCkgV0xBTl9HUElPX1BJTjZfV0FLRVVQX0VOQUJMRV9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU42X1dBS0VVUF9FTkFCTEVfU0VUKHgpIFdMQU5fR1BJT19QSU42X1dBS0VVUF9FTkFCTEVfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElONl9JTlRfVFlQRV9NU0IgV0xBTl9HUElPX1BJTjZfSU5UX1RZUEVfTVNCCi0jZGVmaW5lIEdQSU9fUElONl9JTlRfVFlQRV9MU0IgV0xBTl9HUElPX1BJTjZfSU5UX1RZUEVfTFNCCi0jZGVmaW5lIEdQSU9fUElONl9JTlRfVFlQRV9NQVNLIFdMQU5fR1BJT19QSU42X0lOVF9UWVBFX01BU0sKLSNkZWZpbmUgR1BJT19QSU42X0lOVF9UWVBFX0dFVCh4KSBXTEFOX0dQSU9fUElONl9JTlRfVFlQRV9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU42X0lOVF9UWVBFX1NFVCh4KSBXTEFOX0dQSU9fUElONl9JTlRfVFlQRV9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU42X1BBRF9QVUxMX01TQiBXTEFOX0dQSU9fUElONl9QQURfUFVMTF9NU0IKLSNkZWZpbmUgR1BJT19QSU42X1BBRF9QVUxMX0xTQiBXTEFOX0dQSU9fUElONl9QQURfUFVMTF9MU0IKLSNkZWZpbmUgR1BJT19QSU42X1BBRF9QVUxMX01BU0sgV0xBTl9HUElPX1BJTjZfUEFEX1BVTExfTUFTSwotI2RlZmluZSBHUElPX1BJTjZfUEFEX1BVTExfR0VUKHgpIFdMQU5fR1BJT19QSU42X1BBRF9QVUxMX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjZfUEFEX1BVTExfU0VUKHgpIFdMQU5fR1BJT19QSU42X1BBRF9QVUxMX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjZfUEFEX1NUUkVOR1RIX01TQiBXTEFOX0dQSU9fUElONl9QQURfU1RSRU5HVEhfTVNCCi0jZGVmaW5lIEdQSU9fUElONl9QQURfU1RSRU5HVEhfTFNCIFdMQU5fR1BJT19QSU42X1BBRF9TVFJFTkdUSF9MU0IKLSNkZWZpbmUgR1BJT19QSU42X1BBRF9TVFJFTkdUSF9NQVNLIFdMQU5fR1BJT19QSU42X1BBRF9TVFJFTkdUSF9NQVNLCi0jZGVmaW5lIEdQSU9fUElONl9QQURfU1RSRU5HVEhfR0VUKHgpIFdMQU5fR1BJT19QSU42X1BBRF9TVFJFTkdUSF9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU42X1BBRF9TVFJFTkdUSF9TRVQoeCkgV0xBTl9HUElPX1BJTjZfUEFEX1NUUkVOR1RIX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjZfUEFEX0RSSVZFUl9NU0IgV0xBTl9HUElPX1BJTjZfUEFEX0RSSVZFUl9NU0IKLSNkZWZpbmUgR1BJT19QSU42X1BBRF9EUklWRVJfTFNCIFdMQU5fR1BJT19QSU42X1BBRF9EUklWRVJfTFNCCi0jZGVmaW5lIEdQSU9fUElONl9QQURfRFJJVkVSX01BU0sgV0xBTl9HUElPX1BJTjZfUEFEX0RSSVZFUl9NQVNLCi0jZGVmaW5lIEdQSU9fUElONl9QQURfRFJJVkVSX0dFVCh4KSBXTEFOX0dQSU9fUElONl9QQURfRFJJVkVSX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjZfUEFEX0RSSVZFUl9TRVQoeCkgV0xBTl9HUElPX1BJTjZfUEFEX0RSSVZFUl9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU42X1NPVVJDRV9NU0IgV0xBTl9HUElPX1BJTjZfU09VUkNFX01TQgotI2RlZmluZSBHUElPX1BJTjZfU09VUkNFX0xTQiBXTEFOX0dQSU9fUElONl9TT1VSQ0VfTFNCCi0jZGVmaW5lIEdQSU9fUElONl9TT1VSQ0VfTUFTSyBXTEFOX0dQSU9fUElONl9TT1VSQ0VfTUFTSwotI2RlZmluZSBHUElPX1BJTjZfU09VUkNFX0dFVCh4KSBXTEFOX0dQSU9fUElONl9TT1VSQ0VfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElONl9TT1VSQ0VfU0VUKHgpIFdMQU5fR1BJT19QSU42X1NPVVJDRV9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU43X0FERFJFU1MgV0xBTl9HUElPX1BJTjdfQUREUkVTUwotI2RlZmluZSBHUElPX1BJTjdfT0ZGU0VUIFdMQU5fR1BJT19QSU43X09GRlNFVAotI2RlZmluZSBHUElPX1BJTjdfQ09ORklHX01TQiBXTEFOX0dQSU9fUElON19DT05GSUdfTVNCCi0jZGVmaW5lIEdQSU9fUElON19DT05GSUdfTFNCIFdMQU5fR1BJT19QSU43X0NPTkZJR19MU0IKLSNkZWZpbmUgR1BJT19QSU43X0NPTkZJR19NQVNLIFdMQU5fR1BJT19QSU43X0NPTkZJR19NQVNLCi0jZGVmaW5lIEdQSU9fUElON19DT05GSUdfR0VUKHgpIFdMQU5fR1BJT19QSU43X0NPTkZJR19HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU43X0NPTkZJR19TRVQoeCkgV0xBTl9HUElPX1BJTjdfQ09ORklHX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjdfV0FLRVVQX0VOQUJMRV9NU0IgV0xBTl9HUElPX1BJTjdfV0FLRVVQX0VOQUJMRV9NU0IKLSNkZWZpbmUgR1BJT19QSU43X1dBS0VVUF9FTkFCTEVfTFNCIFdMQU5fR1BJT19QSU43X1dBS0VVUF9FTkFCTEVfTFNCCi0jZGVmaW5lIEdQSU9fUElON19XQUtFVVBfRU5BQkxFX01BU0sgV0xBTl9HUElPX1BJTjdfV0FLRVVQX0VOQUJMRV9NQVNLCi0jZGVmaW5lIEdQSU9fUElON19XQUtFVVBfRU5BQkxFX0dFVCh4KSBXTEFOX0dQSU9fUElON19XQUtFVVBfRU5BQkxFX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjdfV0FLRVVQX0VOQUJMRV9TRVQoeCkgV0xBTl9HUElPX1BJTjdfV0FLRVVQX0VOQUJMRV9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU43X0lOVF9UWVBFX01TQiBXTEFOX0dQSU9fUElON19JTlRfVFlQRV9NU0IKLSNkZWZpbmUgR1BJT19QSU43X0lOVF9UWVBFX0xTQiBXTEFOX0dQSU9fUElON19JTlRfVFlQRV9MU0IKLSNkZWZpbmUgR1BJT19QSU43X0lOVF9UWVBFX01BU0sgV0xBTl9HUElPX1BJTjdfSU5UX1RZUEVfTUFTSwotI2RlZmluZSBHUElPX1BJTjdfSU5UX1RZUEVfR0VUKHgpIFdMQU5fR1BJT19QSU43X0lOVF9UWVBFX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjdfSU5UX1RZUEVfU0VUKHgpIFdMQU5fR1BJT19QSU43X0lOVF9UWVBFX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjdfUEFEX1BVTExfTVNCIFdMQU5fR1BJT19QSU43X1BBRF9QVUxMX01TQgotI2RlZmluZSBHUElPX1BJTjdfUEFEX1BVTExfTFNCIFdMQU5fR1BJT19QSU43X1BBRF9QVUxMX0xTQgotI2RlZmluZSBHUElPX1BJTjdfUEFEX1BVTExfTUFTSyBXTEFOX0dQSU9fUElON19QQURfUFVMTF9NQVNLCi0jZGVmaW5lIEdQSU9fUElON19QQURfUFVMTF9HRVQoeCkgV0xBTl9HUElPX1BJTjdfUEFEX1BVTExfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElON19QQURfUFVMTF9TRVQoeCkgV0xBTl9HUElPX1BJTjdfUEFEX1BVTExfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElON19QQURfU1RSRU5HVEhfTVNCIFdMQU5fR1BJT19QSU43X1BBRF9TVFJFTkdUSF9NU0IKLSNkZWZpbmUgR1BJT19QSU43X1BBRF9TVFJFTkdUSF9MU0IgV0xBTl9HUElPX1BJTjdfUEFEX1NUUkVOR1RIX0xTQgotI2RlZmluZSBHUElPX1BJTjdfUEFEX1NUUkVOR1RIX01BU0sgV0xBTl9HUElPX1BJTjdfUEFEX1NUUkVOR1RIX01BU0sKLSNkZWZpbmUgR1BJT19QSU43X1BBRF9TVFJFTkdUSF9HRVQoeCkgV0xBTl9HUElPX1BJTjdfUEFEX1NUUkVOR1RIX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjdfUEFEX1NUUkVOR1RIX1NFVCh4KSBXTEFOX0dQSU9fUElON19QQURfU1RSRU5HVEhfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElON19QQURfRFJJVkVSX01TQiBXTEFOX0dQSU9fUElON19QQURfRFJJVkVSX01TQgotI2RlZmluZSBHUElPX1BJTjdfUEFEX0RSSVZFUl9MU0IgV0xBTl9HUElPX1BJTjdfUEFEX0RSSVZFUl9MU0IKLSNkZWZpbmUgR1BJT19QSU43X1BBRF9EUklWRVJfTUFTSyBXTEFOX0dQSU9fUElON19QQURfRFJJVkVSX01BU0sKLSNkZWZpbmUgR1BJT19QSU43X1BBRF9EUklWRVJfR0VUKHgpIFdMQU5fR1BJT19QSU43X1BBRF9EUklWRVJfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElON19QQURfRFJJVkVSX1NFVCh4KSBXTEFOX0dQSU9fUElON19QQURfRFJJVkVSX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjdfU09VUkNFX01TQiBXTEFOX0dQSU9fUElON19TT1VSQ0VfTVNCCi0jZGVmaW5lIEdQSU9fUElON19TT1VSQ0VfTFNCIFdMQU5fR1BJT19QSU43X1NPVVJDRV9MU0IKLSNkZWZpbmUgR1BJT19QSU43X1NPVVJDRV9NQVNLIFdMQU5fR1BJT19QSU43X1NPVVJDRV9NQVNLCi0jZGVmaW5lIEdQSU9fUElON19TT1VSQ0VfR0VUKHgpIFdMQU5fR1BJT19QSU43X1NPVVJDRV9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU43X1NPVVJDRV9TRVQoeCkgV0xBTl9HUElPX1BJTjdfU09VUkNFX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjhfQUREUkVTUyBXTEFOX0dQSU9fUElOOF9BRERSRVNTCi0jZGVmaW5lIEdQSU9fUElOOF9PRkZTRVQgV0xBTl9HUElPX1BJTjhfT0ZGU0VUCi0jZGVmaW5lIEdQSU9fUElOOF9DT05GSUdfTVNCIFdMQU5fR1BJT19QSU44X0NPTkZJR19NU0IKLSNkZWZpbmUgR1BJT19QSU44X0NPTkZJR19MU0IgV0xBTl9HUElPX1BJTjhfQ09ORklHX0xTQgotI2RlZmluZSBHUElPX1BJTjhfQ09ORklHX01BU0sgV0xBTl9HUElPX1BJTjhfQ09ORklHX01BU0sKLSNkZWZpbmUgR1BJT19QSU44X0NPTkZJR19HRVQoeCkgV0xBTl9HUElPX1BJTjhfQ09ORklHX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjhfQ09ORklHX1NFVCh4KSBXTEFOX0dQSU9fUElOOF9DT05GSUdfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOOF9XQUtFVVBfRU5BQkxFX01TQiBXTEFOX0dQSU9fUElOOF9XQUtFVVBfRU5BQkxFX01TQgotI2RlZmluZSBHUElPX1BJTjhfV0FLRVVQX0VOQUJMRV9MU0IgV0xBTl9HUElPX1BJTjhfV0FLRVVQX0VOQUJMRV9MU0IKLSNkZWZpbmUgR1BJT19QSU44X1dBS0VVUF9FTkFCTEVfTUFTSyBXTEFOX0dQSU9fUElOOF9XQUtFVVBfRU5BQkxFX01BU0sKLSNkZWZpbmUgR1BJT19QSU44X1dBS0VVUF9FTkFCTEVfR0VUKHgpIFdMQU5fR1BJT19QSU44X1dBS0VVUF9FTkFCTEVfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOOF9XQUtFVVBfRU5BQkxFX1NFVCh4KSBXTEFOX0dQSU9fUElOOF9XQUtFVVBfRU5BQkxFX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjhfSU5UX1RZUEVfTVNCIFdMQU5fR1BJT19QSU44X0lOVF9UWVBFX01TQgotI2RlZmluZSBHUElPX1BJTjhfSU5UX1RZUEVfTFNCIFdMQU5fR1BJT19QSU44X0lOVF9UWVBFX0xTQgotI2RlZmluZSBHUElPX1BJTjhfSU5UX1RZUEVfTUFTSyBXTEFOX0dQSU9fUElOOF9JTlRfVFlQRV9NQVNLCi0jZGVmaW5lIEdQSU9fUElOOF9JTlRfVFlQRV9HRVQoeCkgV0xBTl9HUElPX1BJTjhfSU5UX1RZUEVfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOOF9JTlRfVFlQRV9TRVQoeCkgV0xBTl9HUElPX1BJTjhfSU5UX1RZUEVfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOOF9QQURfUFVMTF9NU0IgV0xBTl9HUElPX1BJTjhfUEFEX1BVTExfTVNCCi0jZGVmaW5lIEdQSU9fUElOOF9QQURfUFVMTF9MU0IgV0xBTl9HUElPX1BJTjhfUEFEX1BVTExfTFNCCi0jZGVmaW5lIEdQSU9fUElOOF9QQURfUFVMTF9NQVNLIFdMQU5fR1BJT19QSU44X1BBRF9QVUxMX01BU0sKLSNkZWZpbmUgR1BJT19QSU44X1BBRF9QVUxMX0dFVCh4KSBXTEFOX0dQSU9fUElOOF9QQURfUFVMTF9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU44X1BBRF9QVUxMX1NFVCh4KSBXTEFOX0dQSU9fUElOOF9QQURfUFVMTF9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU44X1BBRF9TVFJFTkdUSF9NU0IgV0xBTl9HUElPX1BJTjhfUEFEX1NUUkVOR1RIX01TQgotI2RlZmluZSBHUElPX1BJTjhfUEFEX1NUUkVOR1RIX0xTQiBXTEFOX0dQSU9fUElOOF9QQURfU1RSRU5HVEhfTFNCCi0jZGVmaW5lIEdQSU9fUElOOF9QQURfU1RSRU5HVEhfTUFTSyBXTEFOX0dQSU9fUElOOF9QQURfU1RSRU5HVEhfTUFTSwotI2RlZmluZSBHUElPX1BJTjhfUEFEX1NUUkVOR1RIX0dFVCh4KSBXTEFOX0dQSU9fUElOOF9QQURfU1RSRU5HVEhfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOOF9QQURfU1RSRU5HVEhfU0VUKHgpIFdMQU5fR1BJT19QSU44X1BBRF9TVFJFTkdUSF9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU44X1BBRF9EUklWRVJfTVNCIFdMQU5fR1BJT19QSU44X1BBRF9EUklWRVJfTVNCCi0jZGVmaW5lIEdQSU9fUElOOF9QQURfRFJJVkVSX0xTQiBXTEFOX0dQSU9fUElOOF9QQURfRFJJVkVSX0xTQgotI2RlZmluZSBHUElPX1BJTjhfUEFEX0RSSVZFUl9NQVNLIFdMQU5fR1BJT19QSU44X1BBRF9EUklWRVJfTUFTSwotI2RlZmluZSBHUElPX1BJTjhfUEFEX0RSSVZFUl9HRVQoeCkgV0xBTl9HUElPX1BJTjhfUEFEX0RSSVZFUl9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU44X1BBRF9EUklWRVJfU0VUKHgpIFdMQU5fR1BJT19QSU44X1BBRF9EUklWRVJfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOOF9TT1VSQ0VfTVNCIFdMQU5fR1BJT19QSU44X1NPVVJDRV9NU0IKLSNkZWZpbmUgR1BJT19QSU44X1NPVVJDRV9MU0IgV0xBTl9HUElPX1BJTjhfU09VUkNFX0xTQgotI2RlZmluZSBHUElPX1BJTjhfU09VUkNFX01BU0sgV0xBTl9HUElPX1BJTjhfU09VUkNFX01BU0sKLSNkZWZpbmUgR1BJT19QSU44X1NPVVJDRV9HRVQoeCkgV0xBTl9HUElPX1BJTjhfU09VUkNFX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjhfU09VUkNFX1NFVCh4KSBXTEFOX0dQSU9fUElOOF9TT1VSQ0VfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOOV9BRERSRVNTIFdMQU5fR1BJT19QSU45X0FERFJFU1MKLSNkZWZpbmUgR1BJT19QSU45X09GRlNFVCBXTEFOX0dQSU9fUElOOV9PRkZTRVQKLSNkZWZpbmUgR1BJT19QSU45X0NPTkZJR19NU0IgV0xBTl9HUElPX1BJTjlfQ09ORklHX01TQgotI2RlZmluZSBHUElPX1BJTjlfQ09ORklHX0xTQiBXTEFOX0dQSU9fUElOOV9DT05GSUdfTFNCCi0jZGVmaW5lIEdQSU9fUElOOV9DT05GSUdfTUFTSyBXTEFOX0dQSU9fUElOOV9DT05GSUdfTUFTSwotI2RlZmluZSBHUElPX1BJTjlfQ09ORklHX0dFVCh4KSBXTEFOX0dQSU9fUElOOV9DT05GSUdfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOOV9DT05GSUdfU0VUKHgpIFdMQU5fR1BJT19QSU45X0NPTkZJR19TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU45X1dBS0VVUF9FTkFCTEVfTVNCIFdMQU5fR1BJT19QSU45X1dBS0VVUF9FTkFCTEVfTVNCCi0jZGVmaW5lIEdQSU9fUElOOV9XQUtFVVBfRU5BQkxFX0xTQiBXTEFOX0dQSU9fUElOOV9XQUtFVVBfRU5BQkxFX0xTQgotI2RlZmluZSBHUElPX1BJTjlfV0FLRVVQX0VOQUJMRV9NQVNLIFdMQU5fR1BJT19QSU45X1dBS0VVUF9FTkFCTEVfTUFTSwotI2RlZmluZSBHUElPX1BJTjlfV0FLRVVQX0VOQUJMRV9HRVQoeCkgV0xBTl9HUElPX1BJTjlfV0FLRVVQX0VOQUJMRV9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU45X1dBS0VVUF9FTkFCTEVfU0VUKHgpIFdMQU5fR1BJT19QSU45X1dBS0VVUF9FTkFCTEVfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOOV9JTlRfVFlQRV9NU0IgV0xBTl9HUElPX1BJTjlfSU5UX1RZUEVfTVNCCi0jZGVmaW5lIEdQSU9fUElOOV9JTlRfVFlQRV9MU0IgV0xBTl9HUElPX1BJTjlfSU5UX1RZUEVfTFNCCi0jZGVmaW5lIEdQSU9fUElOOV9JTlRfVFlQRV9NQVNLIFdMQU5fR1BJT19QSU45X0lOVF9UWVBFX01BU0sKLSNkZWZpbmUgR1BJT19QSU45X0lOVF9UWVBFX0dFVCh4KSBXTEFOX0dQSU9fUElOOV9JTlRfVFlQRV9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU45X0lOVF9UWVBFX1NFVCh4KSBXTEFOX0dQSU9fUElOOV9JTlRfVFlQRV9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU45X1BBRF9QVUxMX01TQiBXTEFOX0dQSU9fUElOOV9QQURfUFVMTF9NU0IKLSNkZWZpbmUgR1BJT19QSU45X1BBRF9QVUxMX0xTQiBXTEFOX0dQSU9fUElOOV9QQURfUFVMTF9MU0IKLSNkZWZpbmUgR1BJT19QSU45X1BBRF9QVUxMX01BU0sgV0xBTl9HUElPX1BJTjlfUEFEX1BVTExfTUFTSwotI2RlZmluZSBHUElPX1BJTjlfUEFEX1BVTExfR0VUKHgpIFdMQU5fR1BJT19QSU45X1BBRF9QVUxMX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjlfUEFEX1BVTExfU0VUKHgpIFdMQU5fR1BJT19QSU45X1BBRF9QVUxMX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjlfUEFEX1NUUkVOR1RIX01TQiBXTEFOX0dQSU9fUElOOV9QQURfU1RSRU5HVEhfTVNCCi0jZGVmaW5lIEdQSU9fUElOOV9QQURfU1RSRU5HVEhfTFNCIFdMQU5fR1BJT19QSU45X1BBRF9TVFJFTkdUSF9MU0IKLSNkZWZpbmUgR1BJT19QSU45X1BBRF9TVFJFTkdUSF9NQVNLIFdMQU5fR1BJT19QSU45X1BBRF9TVFJFTkdUSF9NQVNLCi0jZGVmaW5lIEdQSU9fUElOOV9QQURfU1RSRU5HVEhfR0VUKHgpIFdMQU5fR1BJT19QSU45X1BBRF9TVFJFTkdUSF9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU45X1BBRF9TVFJFTkdUSF9TRVQoeCkgV0xBTl9HUElPX1BJTjlfUEFEX1NUUkVOR1RIX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjlfUEFEX0RSSVZFUl9NU0IgV0xBTl9HUElPX1BJTjlfUEFEX0RSSVZFUl9NU0IKLSNkZWZpbmUgR1BJT19QSU45X1BBRF9EUklWRVJfTFNCIFdMQU5fR1BJT19QSU45X1BBRF9EUklWRVJfTFNCCi0jZGVmaW5lIEdQSU9fUElOOV9QQURfRFJJVkVSX01BU0sgV0xBTl9HUElPX1BJTjlfUEFEX0RSSVZFUl9NQVNLCi0jZGVmaW5lIEdQSU9fUElOOV9QQURfRFJJVkVSX0dFVCh4KSBXTEFOX0dQSU9fUElOOV9QQURfRFJJVkVSX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjlfUEFEX0RSSVZFUl9TRVQoeCkgV0xBTl9HUElPX1BJTjlfUEFEX0RSSVZFUl9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU45X1NPVVJDRV9NU0IgV0xBTl9HUElPX1BJTjlfU09VUkNFX01TQgotI2RlZmluZSBHUElPX1BJTjlfU09VUkNFX0xTQiBXTEFOX0dQSU9fUElOOV9TT1VSQ0VfTFNCCi0jZGVmaW5lIEdQSU9fUElOOV9TT1VSQ0VfTUFTSyBXTEFOX0dQSU9fUElOOV9TT1VSQ0VfTUFTSwotI2RlZmluZSBHUElPX1BJTjlfU09VUkNFX0dFVCh4KSBXTEFOX0dQSU9fUElOOV9TT1VSQ0VfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOOV9TT1VSQ0VfU0VUKHgpIFdMQU5fR1BJT19QSU45X1NPVVJDRV9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xMF9BRERSRVNTIFdMQU5fR1BJT19QSU4xMF9BRERSRVNTCi0jZGVmaW5lIEdQSU9fUElOMTBfT0ZGU0VUIFdMQU5fR1BJT19QSU4xMF9PRkZTRVQKLSNkZWZpbmUgR1BJT19QSU4xMF9DT05GSUdfTVNCIFdMQU5fR1BJT19QSU4xMF9DT05GSUdfTVNCCi0jZGVmaW5lIEdQSU9fUElOMTBfQ09ORklHX0xTQiBXTEFOX0dQSU9fUElOMTBfQ09ORklHX0xTQgotI2RlZmluZSBHUElPX1BJTjEwX0NPTkZJR19NQVNLIFdMQU5fR1BJT19QSU4xMF9DT05GSUdfTUFTSwotI2RlZmluZSBHUElPX1BJTjEwX0NPTkZJR19HRVQoeCkgV0xBTl9HUElPX1BJTjEwX0NPTkZJR19HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xMF9DT05GSUdfU0VUKHgpIFdMQU5fR1BJT19QSU4xMF9DT05GSUdfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTBfV0FLRVVQX0VOQUJMRV9NU0IgV0xBTl9HUElPX1BJTjEwX1dBS0VVUF9FTkFCTEVfTVNCCi0jZGVmaW5lIEdQSU9fUElOMTBfV0FLRVVQX0VOQUJMRV9MU0IgV0xBTl9HUElPX1BJTjEwX1dBS0VVUF9FTkFCTEVfTFNCCi0jZGVmaW5lIEdQSU9fUElOMTBfV0FLRVVQX0VOQUJMRV9NQVNLIFdMQU5fR1BJT19QSU4xMF9XQUtFVVBfRU5BQkxFX01BU0sKLSNkZWZpbmUgR1BJT19QSU4xMF9XQUtFVVBfRU5BQkxFX0dFVCh4KSBXTEFOX0dQSU9fUElOMTBfV0FLRVVQX0VOQUJMRV9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xMF9XQUtFVVBfRU5BQkxFX1NFVCh4KSBXTEFOX0dQSU9fUElOMTBfV0FLRVVQX0VOQUJMRV9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xMF9JTlRfVFlQRV9NU0IgV0xBTl9HUElPX1BJTjEwX0lOVF9UWVBFX01TQgotI2RlZmluZSBHUElPX1BJTjEwX0lOVF9UWVBFX0xTQiBXTEFOX0dQSU9fUElOMTBfSU5UX1RZUEVfTFNCCi0jZGVmaW5lIEdQSU9fUElOMTBfSU5UX1RZUEVfTUFTSyBXTEFOX0dQSU9fUElOMTBfSU5UX1RZUEVfTUFTSwotI2RlZmluZSBHUElPX1BJTjEwX0lOVF9UWVBFX0dFVCh4KSBXTEFOX0dQSU9fUElOMTBfSU5UX1RZUEVfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTBfSU5UX1RZUEVfU0VUKHgpIFdMQU5fR1BJT19QSU4xMF9JTlRfVFlQRV9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xMF9QQURfUFVMTF9NU0IgV0xBTl9HUElPX1BJTjEwX1BBRF9QVUxMX01TQgotI2RlZmluZSBHUElPX1BJTjEwX1BBRF9QVUxMX0xTQiBXTEFOX0dQSU9fUElOMTBfUEFEX1BVTExfTFNCCi0jZGVmaW5lIEdQSU9fUElOMTBfUEFEX1BVTExfTUFTSyBXTEFOX0dQSU9fUElOMTBfUEFEX1BVTExfTUFTSwotI2RlZmluZSBHUElPX1BJTjEwX1BBRF9QVUxMX0dFVCh4KSBXTEFOX0dQSU9fUElOMTBfUEFEX1BVTExfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTBfUEFEX1BVTExfU0VUKHgpIFdMQU5fR1BJT19QSU4xMF9QQURfUFVMTF9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xMF9QQURfU1RSRU5HVEhfTVNCIFdMQU5fR1BJT19QSU4xMF9QQURfU1RSRU5HVEhfTVNCCi0jZGVmaW5lIEdQSU9fUElOMTBfUEFEX1NUUkVOR1RIX0xTQiBXTEFOX0dQSU9fUElOMTBfUEFEX1NUUkVOR1RIX0xTQgotI2RlZmluZSBHUElPX1BJTjEwX1BBRF9TVFJFTkdUSF9NQVNLIFdMQU5fR1BJT19QSU4xMF9QQURfU1RSRU5HVEhfTUFTSwotI2RlZmluZSBHUElPX1BJTjEwX1BBRF9TVFJFTkdUSF9HRVQoeCkgV0xBTl9HUElPX1BJTjEwX1BBRF9TVFJFTkdUSF9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xMF9QQURfU1RSRU5HVEhfU0VUKHgpIFdMQU5fR1BJT19QSU4xMF9QQURfU1RSRU5HVEhfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTBfUEFEX0RSSVZFUl9NU0IgV0xBTl9HUElPX1BJTjEwX1BBRF9EUklWRVJfTVNCCi0jZGVmaW5lIEdQSU9fUElOMTBfUEFEX0RSSVZFUl9MU0IgV0xBTl9HUElPX1BJTjEwX1BBRF9EUklWRVJfTFNCCi0jZGVmaW5lIEdQSU9fUElOMTBfUEFEX0RSSVZFUl9NQVNLIFdMQU5fR1BJT19QSU4xMF9QQURfRFJJVkVSX01BU0sKLSNkZWZpbmUgR1BJT19QSU4xMF9QQURfRFJJVkVSX0dFVCh4KSBXTEFOX0dQSU9fUElOMTBfUEFEX0RSSVZFUl9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xMF9QQURfRFJJVkVSX1NFVCh4KSBXTEFOX0dQSU9fUElOMTBfUEFEX0RSSVZFUl9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xMF9TT1VSQ0VfTVNCIFdMQU5fR1BJT19QSU4xMF9TT1VSQ0VfTVNCCi0jZGVmaW5lIEdQSU9fUElOMTBfU09VUkNFX0xTQiBXTEFOX0dQSU9fUElOMTBfU09VUkNFX0xTQgotI2RlZmluZSBHUElPX1BJTjEwX1NPVVJDRV9NQVNLIFdMQU5fR1BJT19QSU4xMF9TT1VSQ0VfTUFTSwotI2RlZmluZSBHUElPX1BJTjEwX1NPVVJDRV9HRVQoeCkgV0xBTl9HUElPX1BJTjEwX1NPVVJDRV9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xMF9TT1VSQ0VfU0VUKHgpIFdMQU5fR1BJT19QSU4xMF9TT1VSQ0VfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTFfQUREUkVTUyBXTEFOX0dQSU9fUElOMTFfQUREUkVTUwotI2RlZmluZSBHUElPX1BJTjExX09GRlNFVCBXTEFOX0dQSU9fUElOMTFfT0ZGU0VUCi0jZGVmaW5lIEdQSU9fUElOMTFfQ09ORklHX01TQiBXTEFOX0dQSU9fUElOMTFfQ09ORklHX01TQgotI2RlZmluZSBHUElPX1BJTjExX0NPTkZJR19MU0IgV0xBTl9HUElPX1BJTjExX0NPTkZJR19MU0IKLSNkZWZpbmUgR1BJT19QSU4xMV9DT05GSUdfTUFTSyBXTEFOX0dQSU9fUElOMTFfQ09ORklHX01BU0sKLSNkZWZpbmUgR1BJT19QSU4xMV9DT05GSUdfR0VUKHgpIFdMQU5fR1BJT19QSU4xMV9DT05GSUdfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTFfQ09ORklHX1NFVCh4KSBXTEFOX0dQSU9fUElOMTFfQ09ORklHX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjExX1dBS0VVUF9FTkFCTEVfTVNCIFdMQU5fR1BJT19QSU4xMV9XQUtFVVBfRU5BQkxFX01TQgotI2RlZmluZSBHUElPX1BJTjExX1dBS0VVUF9FTkFCTEVfTFNCIFdMQU5fR1BJT19QSU4xMV9XQUtFVVBfRU5BQkxFX0xTQgotI2RlZmluZSBHUElPX1BJTjExX1dBS0VVUF9FTkFCTEVfTUFTSyBXTEFOX0dQSU9fUElOMTFfV0FLRVVQX0VOQUJMRV9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMTFfV0FLRVVQX0VOQUJMRV9HRVQoeCkgV0xBTl9HUElPX1BJTjExX1dBS0VVUF9FTkFCTEVfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTFfV0FLRVVQX0VOQUJMRV9TRVQoeCkgV0xBTl9HUElPX1BJTjExX1dBS0VVUF9FTkFCTEVfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTFfSU5UX1RZUEVfTVNCIFdMQU5fR1BJT19QSU4xMV9JTlRfVFlQRV9NU0IKLSNkZWZpbmUgR1BJT19QSU4xMV9JTlRfVFlQRV9MU0IgV0xBTl9HUElPX1BJTjExX0lOVF9UWVBFX0xTQgotI2RlZmluZSBHUElPX1BJTjExX0lOVF9UWVBFX01BU0sgV0xBTl9HUElPX1BJTjExX0lOVF9UWVBFX01BU0sKLSNkZWZpbmUgR1BJT19QSU4xMV9JTlRfVFlQRV9HRVQoeCkgV0xBTl9HUElPX1BJTjExX0lOVF9UWVBFX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjExX0lOVF9UWVBFX1NFVCh4KSBXTEFOX0dQSU9fUElOMTFfSU5UX1RZUEVfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTFfUEFEX1BVTExfTVNCIFdMQU5fR1BJT19QSU4xMV9QQURfUFVMTF9NU0IKLSNkZWZpbmUgR1BJT19QSU4xMV9QQURfUFVMTF9MU0IgV0xBTl9HUElPX1BJTjExX1BBRF9QVUxMX0xTQgotI2RlZmluZSBHUElPX1BJTjExX1BBRF9QVUxMX01BU0sgV0xBTl9HUElPX1BJTjExX1BBRF9QVUxMX01BU0sKLSNkZWZpbmUgR1BJT19QSU4xMV9QQURfUFVMTF9HRVQoeCkgV0xBTl9HUElPX1BJTjExX1BBRF9QVUxMX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjExX1BBRF9QVUxMX1NFVCh4KSBXTEFOX0dQSU9fUElOMTFfUEFEX1BVTExfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTFfUEFEX1NUUkVOR1RIX01TQiBXTEFOX0dQSU9fUElOMTFfUEFEX1NUUkVOR1RIX01TQgotI2RlZmluZSBHUElPX1BJTjExX1BBRF9TVFJFTkdUSF9MU0IgV0xBTl9HUElPX1BJTjExX1BBRF9TVFJFTkdUSF9MU0IKLSNkZWZpbmUgR1BJT19QSU4xMV9QQURfU1RSRU5HVEhfTUFTSyBXTEFOX0dQSU9fUElOMTFfUEFEX1NUUkVOR1RIX01BU0sKLSNkZWZpbmUgR1BJT19QSU4xMV9QQURfU1RSRU5HVEhfR0VUKHgpIFdMQU5fR1BJT19QSU4xMV9QQURfU1RSRU5HVEhfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTFfUEFEX1NUUkVOR1RIX1NFVCh4KSBXTEFOX0dQSU9fUElOMTFfUEFEX1NUUkVOR1RIX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjExX1BBRF9EUklWRVJfTVNCIFdMQU5fR1BJT19QSU4xMV9QQURfRFJJVkVSX01TQgotI2RlZmluZSBHUElPX1BJTjExX1BBRF9EUklWRVJfTFNCIFdMQU5fR1BJT19QSU4xMV9QQURfRFJJVkVSX0xTQgotI2RlZmluZSBHUElPX1BJTjExX1BBRF9EUklWRVJfTUFTSyBXTEFOX0dQSU9fUElOMTFfUEFEX0RSSVZFUl9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMTFfUEFEX0RSSVZFUl9HRVQoeCkgV0xBTl9HUElPX1BJTjExX1BBRF9EUklWRVJfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTFfUEFEX0RSSVZFUl9TRVQoeCkgV0xBTl9HUElPX1BJTjExX1BBRF9EUklWRVJfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTFfU09VUkNFX01TQiBXTEFOX0dQSU9fUElOMTFfU09VUkNFX01TQgotI2RlZmluZSBHUElPX1BJTjExX1NPVVJDRV9MU0IgV0xBTl9HUElPX1BJTjExX1NPVVJDRV9MU0IKLSNkZWZpbmUgR1BJT19QSU4xMV9TT1VSQ0VfTUFTSyBXTEFOX0dQSU9fUElOMTFfU09VUkNFX01BU0sKLSNkZWZpbmUgR1BJT19QSU4xMV9TT1VSQ0VfR0VUKHgpIFdMQU5fR1BJT19QSU4xMV9TT1VSQ0VfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTFfU09VUkNFX1NFVCh4KSBXTEFOX0dQSU9fUElOMTFfU09VUkNFX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjEyX0FERFJFU1MgV0xBTl9HUElPX1BJTjEyX0FERFJFU1MKLSNkZWZpbmUgR1BJT19QSU4xMl9PRkZTRVQgV0xBTl9HUElPX1BJTjEyX09GRlNFVAotI2RlZmluZSBHUElPX1BJTjEyX0NPTkZJR19NU0IgV0xBTl9HUElPX1BJTjEyX0NPTkZJR19NU0IKLSNkZWZpbmUgR1BJT19QSU4xMl9DT05GSUdfTFNCIFdMQU5fR1BJT19QSU4xMl9DT05GSUdfTFNCCi0jZGVmaW5lIEdQSU9fUElOMTJfQ09ORklHX01BU0sgV0xBTl9HUElPX1BJTjEyX0NPTkZJR19NQVNLCi0jZGVmaW5lIEdQSU9fUElOMTJfQ09ORklHX0dFVCh4KSBXTEFOX0dQSU9fUElOMTJfQ09ORklHX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjEyX0NPTkZJR19TRVQoeCkgV0xBTl9HUElPX1BJTjEyX0NPTkZJR19TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xMl9XQUtFVVBfRU5BQkxFX01TQiBXTEFOX0dQSU9fUElOMTJfV0FLRVVQX0VOQUJMRV9NU0IKLSNkZWZpbmUgR1BJT19QSU4xMl9XQUtFVVBfRU5BQkxFX0xTQiBXTEFOX0dQSU9fUElOMTJfV0FLRVVQX0VOQUJMRV9MU0IKLSNkZWZpbmUgR1BJT19QSU4xMl9XQUtFVVBfRU5BQkxFX01BU0sgV0xBTl9HUElPX1BJTjEyX1dBS0VVUF9FTkFCTEVfTUFTSwotI2RlZmluZSBHUElPX1BJTjEyX1dBS0VVUF9FTkFCTEVfR0VUKHgpIFdMQU5fR1BJT19QSU4xMl9XQUtFVVBfRU5BQkxFX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjEyX1dBS0VVUF9FTkFCTEVfU0VUKHgpIFdMQU5fR1BJT19QSU4xMl9XQUtFVVBfRU5BQkxFX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjEyX0lOVF9UWVBFX01TQiBXTEFOX0dQSU9fUElOMTJfSU5UX1RZUEVfTVNCCi0jZGVmaW5lIEdQSU9fUElOMTJfSU5UX1RZUEVfTFNCIFdMQU5fR1BJT19QSU4xMl9JTlRfVFlQRV9MU0IKLSNkZWZpbmUgR1BJT19QSU4xMl9JTlRfVFlQRV9NQVNLIFdMQU5fR1BJT19QSU4xMl9JTlRfVFlQRV9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMTJfSU5UX1RZUEVfR0VUKHgpIFdMQU5fR1BJT19QSU4xMl9JTlRfVFlQRV9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xMl9JTlRfVFlQRV9TRVQoeCkgV0xBTl9HUElPX1BJTjEyX0lOVF9UWVBFX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjEyX1BBRF9QVUxMX01TQiBXTEFOX0dQSU9fUElOMTJfUEFEX1BVTExfTVNCCi0jZGVmaW5lIEdQSU9fUElOMTJfUEFEX1BVTExfTFNCIFdMQU5fR1BJT19QSU4xMl9QQURfUFVMTF9MU0IKLSNkZWZpbmUgR1BJT19QSU4xMl9QQURfUFVMTF9NQVNLIFdMQU5fR1BJT19QSU4xMl9QQURfUFVMTF9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMTJfUEFEX1BVTExfR0VUKHgpIFdMQU5fR1BJT19QSU4xMl9QQURfUFVMTF9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xMl9QQURfUFVMTF9TRVQoeCkgV0xBTl9HUElPX1BJTjEyX1BBRF9QVUxMX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjEyX1BBRF9TVFJFTkdUSF9NU0IgV0xBTl9HUElPX1BJTjEyX1BBRF9TVFJFTkdUSF9NU0IKLSNkZWZpbmUgR1BJT19QSU4xMl9QQURfU1RSRU5HVEhfTFNCIFdMQU5fR1BJT19QSU4xMl9QQURfU1RSRU5HVEhfTFNCCi0jZGVmaW5lIEdQSU9fUElOMTJfUEFEX1NUUkVOR1RIX01BU0sgV0xBTl9HUElPX1BJTjEyX1BBRF9TVFJFTkdUSF9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMTJfUEFEX1NUUkVOR1RIX0dFVCh4KSBXTEFOX0dQSU9fUElOMTJfUEFEX1NUUkVOR1RIX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjEyX1BBRF9TVFJFTkdUSF9TRVQoeCkgV0xBTl9HUElPX1BJTjEyX1BBRF9TVFJFTkdUSF9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xMl9QQURfRFJJVkVSX01TQiBXTEFOX0dQSU9fUElOMTJfUEFEX0RSSVZFUl9NU0IKLSNkZWZpbmUgR1BJT19QSU4xMl9QQURfRFJJVkVSX0xTQiBXTEFOX0dQSU9fUElOMTJfUEFEX0RSSVZFUl9MU0IKLSNkZWZpbmUgR1BJT19QSU4xMl9QQURfRFJJVkVSX01BU0sgV0xBTl9HUElPX1BJTjEyX1BBRF9EUklWRVJfTUFTSwotI2RlZmluZSBHUElPX1BJTjEyX1BBRF9EUklWRVJfR0VUKHgpIFdMQU5fR1BJT19QSU4xMl9QQURfRFJJVkVSX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjEyX1BBRF9EUklWRVJfU0VUKHgpIFdMQU5fR1BJT19QSU4xMl9QQURfRFJJVkVSX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjEyX1NPVVJDRV9NU0IgV0xBTl9HUElPX1BJTjEyX1NPVVJDRV9NU0IKLSNkZWZpbmUgR1BJT19QSU4xMl9TT1VSQ0VfTFNCIFdMQU5fR1BJT19QSU4xMl9TT1VSQ0VfTFNCCi0jZGVmaW5lIEdQSU9fUElOMTJfU09VUkNFX01BU0sgV0xBTl9HUElPX1BJTjEyX1NPVVJDRV9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMTJfU09VUkNFX0dFVCh4KSBXTEFOX0dQSU9fUElOMTJfU09VUkNFX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjEyX1NPVVJDRV9TRVQoeCkgV0xBTl9HUElPX1BJTjEyX1NPVVJDRV9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xM19BRERSRVNTIFdMQU5fR1BJT19QSU4xM19BRERSRVNTCi0jZGVmaW5lIEdQSU9fUElOMTNfT0ZGU0VUIFdMQU5fR1BJT19QSU4xM19PRkZTRVQKLSNkZWZpbmUgR1BJT19QSU4xM19DT05GSUdfTVNCIFdMQU5fR1BJT19QSU4xM19DT05GSUdfTVNCCi0jZGVmaW5lIEdQSU9fUElOMTNfQ09ORklHX0xTQiBXTEFOX0dQSU9fUElOMTNfQ09ORklHX0xTQgotI2RlZmluZSBHUElPX1BJTjEzX0NPTkZJR19NQVNLIFdMQU5fR1BJT19QSU4xM19DT05GSUdfTUFTSwotI2RlZmluZSBHUElPX1BJTjEzX0NPTkZJR19HRVQoeCkgV0xBTl9HUElPX1BJTjEzX0NPTkZJR19HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xM19DT05GSUdfU0VUKHgpIFdMQU5fR1BJT19QSU4xM19DT05GSUdfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTNfV0FLRVVQX0VOQUJMRV9NU0IgV0xBTl9HUElPX1BJTjEzX1dBS0VVUF9FTkFCTEVfTVNCCi0jZGVmaW5lIEdQSU9fUElOMTNfV0FLRVVQX0VOQUJMRV9MU0IgV0xBTl9HUElPX1BJTjEzX1dBS0VVUF9FTkFCTEVfTFNCCi0jZGVmaW5lIEdQSU9fUElOMTNfV0FLRVVQX0VOQUJMRV9NQVNLIFdMQU5fR1BJT19QSU4xM19XQUtFVVBfRU5BQkxFX01BU0sKLSNkZWZpbmUgR1BJT19QSU4xM19XQUtFVVBfRU5BQkxFX0dFVCh4KSBXTEFOX0dQSU9fUElOMTNfV0FLRVVQX0VOQUJMRV9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xM19XQUtFVVBfRU5BQkxFX1NFVCh4KSBXTEFOX0dQSU9fUElOMTNfV0FLRVVQX0VOQUJMRV9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xM19JTlRfVFlQRV9NU0IgV0xBTl9HUElPX1BJTjEzX0lOVF9UWVBFX01TQgotI2RlZmluZSBHUElPX1BJTjEzX0lOVF9UWVBFX0xTQiBXTEFOX0dQSU9fUElOMTNfSU5UX1RZUEVfTFNCCi0jZGVmaW5lIEdQSU9fUElOMTNfSU5UX1RZUEVfTUFTSyBXTEFOX0dQSU9fUElOMTNfSU5UX1RZUEVfTUFTSwotI2RlZmluZSBHUElPX1BJTjEzX0lOVF9UWVBFX0dFVCh4KSBXTEFOX0dQSU9fUElOMTNfSU5UX1RZUEVfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTNfSU5UX1RZUEVfU0VUKHgpIFdMQU5fR1BJT19QSU4xM19JTlRfVFlQRV9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xM19QQURfUFVMTF9NU0IgV0xBTl9HUElPX1BJTjEzX1BBRF9QVUxMX01TQgotI2RlZmluZSBHUElPX1BJTjEzX1BBRF9QVUxMX0xTQiBXTEFOX0dQSU9fUElOMTNfUEFEX1BVTExfTFNCCi0jZGVmaW5lIEdQSU9fUElOMTNfUEFEX1BVTExfTUFTSyBXTEFOX0dQSU9fUElOMTNfUEFEX1BVTExfTUFTSwotI2RlZmluZSBHUElPX1BJTjEzX1BBRF9QVUxMX0dFVCh4KSBXTEFOX0dQSU9fUElOMTNfUEFEX1BVTExfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTNfUEFEX1BVTExfU0VUKHgpIFdMQU5fR1BJT19QSU4xM19QQURfUFVMTF9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xM19QQURfU1RSRU5HVEhfTVNCIFdMQU5fR1BJT19QSU4xM19QQURfU1RSRU5HVEhfTVNCCi0jZGVmaW5lIEdQSU9fUElOMTNfUEFEX1NUUkVOR1RIX0xTQiBXTEFOX0dQSU9fUElOMTNfUEFEX1NUUkVOR1RIX0xTQgotI2RlZmluZSBHUElPX1BJTjEzX1BBRF9TVFJFTkdUSF9NQVNLIFdMQU5fR1BJT19QSU4xM19QQURfU1RSRU5HVEhfTUFTSwotI2RlZmluZSBHUElPX1BJTjEzX1BBRF9TVFJFTkdUSF9HRVQoeCkgV0xBTl9HUElPX1BJTjEzX1BBRF9TVFJFTkdUSF9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xM19QQURfU1RSRU5HVEhfU0VUKHgpIFdMQU5fR1BJT19QSU4xM19QQURfU1RSRU5HVEhfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTNfUEFEX0RSSVZFUl9NU0IgV0xBTl9HUElPX1BJTjEzX1BBRF9EUklWRVJfTVNCCi0jZGVmaW5lIEdQSU9fUElOMTNfUEFEX0RSSVZFUl9MU0IgV0xBTl9HUElPX1BJTjEzX1BBRF9EUklWRVJfTFNCCi0jZGVmaW5lIEdQSU9fUElOMTNfUEFEX0RSSVZFUl9NQVNLIFdMQU5fR1BJT19QSU4xM19QQURfRFJJVkVSX01BU0sKLSNkZWZpbmUgR1BJT19QSU4xM19QQURfRFJJVkVSX0dFVCh4KSBXTEFOX0dQSU9fUElOMTNfUEFEX0RSSVZFUl9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xM19QQURfRFJJVkVSX1NFVCh4KSBXTEFOX0dQSU9fUElOMTNfUEFEX0RSSVZFUl9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xM19TT1VSQ0VfTVNCIFdMQU5fR1BJT19QSU4xM19TT1VSQ0VfTVNCCi0jZGVmaW5lIEdQSU9fUElOMTNfU09VUkNFX0xTQiBXTEFOX0dQSU9fUElOMTNfU09VUkNFX0xTQgotI2RlZmluZSBHUElPX1BJTjEzX1NPVVJDRV9NQVNLIFdMQU5fR1BJT19QSU4xM19TT1VSQ0VfTUFTSwotI2RlZmluZSBHUElPX1BJTjEzX1NPVVJDRV9HRVQoeCkgV0xBTl9HUElPX1BJTjEzX1NPVVJDRV9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xM19TT1VSQ0VfU0VUKHgpIFdMQU5fR1BJT19QSU4xM19TT1VSQ0VfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTRfQUREUkVTUyBXTEFOX0dQSU9fUElOMTRfQUREUkVTUwotI2RlZmluZSBHUElPX1BJTjE0X09GRlNFVCBXTEFOX0dQSU9fUElOMTRfT0ZGU0VUCi0jZGVmaW5lIEdQSU9fUElOMTRfQ09ORklHX01TQiBXTEFOX0dQSU9fUElOMTRfQ09ORklHX01TQgotI2RlZmluZSBHUElPX1BJTjE0X0NPTkZJR19MU0IgV0xBTl9HUElPX1BJTjE0X0NPTkZJR19MU0IKLSNkZWZpbmUgR1BJT19QSU4xNF9DT05GSUdfTUFTSyBXTEFOX0dQSU9fUElOMTRfQ09ORklHX01BU0sKLSNkZWZpbmUgR1BJT19QSU4xNF9DT05GSUdfR0VUKHgpIFdMQU5fR1BJT19QSU4xNF9DT05GSUdfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTRfQ09ORklHX1NFVCh4KSBXTEFOX0dQSU9fUElOMTRfQ09ORklHX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjE0X1dBS0VVUF9FTkFCTEVfTVNCIFdMQU5fR1BJT19QSU4xNF9XQUtFVVBfRU5BQkxFX01TQgotI2RlZmluZSBHUElPX1BJTjE0X1dBS0VVUF9FTkFCTEVfTFNCIFdMQU5fR1BJT19QSU4xNF9XQUtFVVBfRU5BQkxFX0xTQgotI2RlZmluZSBHUElPX1BJTjE0X1dBS0VVUF9FTkFCTEVfTUFTSyBXTEFOX0dQSU9fUElOMTRfV0FLRVVQX0VOQUJMRV9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMTRfV0FLRVVQX0VOQUJMRV9HRVQoeCkgV0xBTl9HUElPX1BJTjE0X1dBS0VVUF9FTkFCTEVfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTRfV0FLRVVQX0VOQUJMRV9TRVQoeCkgV0xBTl9HUElPX1BJTjE0X1dBS0VVUF9FTkFCTEVfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTRfSU5UX1RZUEVfTVNCIFdMQU5fR1BJT19QSU4xNF9JTlRfVFlQRV9NU0IKLSNkZWZpbmUgR1BJT19QSU4xNF9JTlRfVFlQRV9MU0IgV0xBTl9HUElPX1BJTjE0X0lOVF9UWVBFX0xTQgotI2RlZmluZSBHUElPX1BJTjE0X0lOVF9UWVBFX01BU0sgV0xBTl9HUElPX1BJTjE0X0lOVF9UWVBFX01BU0sKLSNkZWZpbmUgR1BJT19QSU4xNF9JTlRfVFlQRV9HRVQoeCkgV0xBTl9HUElPX1BJTjE0X0lOVF9UWVBFX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjE0X0lOVF9UWVBFX1NFVCh4KSBXTEFOX0dQSU9fUElOMTRfSU5UX1RZUEVfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTRfUEFEX1BVTExfTVNCIFdMQU5fR1BJT19QSU4xNF9QQURfUFVMTF9NU0IKLSNkZWZpbmUgR1BJT19QSU4xNF9QQURfUFVMTF9MU0IgV0xBTl9HUElPX1BJTjE0X1BBRF9QVUxMX0xTQgotI2RlZmluZSBHUElPX1BJTjE0X1BBRF9QVUxMX01BU0sgV0xBTl9HUElPX1BJTjE0X1BBRF9QVUxMX01BU0sKLSNkZWZpbmUgR1BJT19QSU4xNF9QQURfUFVMTF9HRVQoeCkgV0xBTl9HUElPX1BJTjE0X1BBRF9QVUxMX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjE0X1BBRF9QVUxMX1NFVCh4KSBXTEFOX0dQSU9fUElOMTRfUEFEX1BVTExfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTRfUEFEX1NUUkVOR1RIX01TQiBXTEFOX0dQSU9fUElOMTRfUEFEX1NUUkVOR1RIX01TQgotI2RlZmluZSBHUElPX1BJTjE0X1BBRF9TVFJFTkdUSF9MU0IgV0xBTl9HUElPX1BJTjE0X1BBRF9TVFJFTkdUSF9MU0IKLSNkZWZpbmUgR1BJT19QSU4xNF9QQURfU1RSRU5HVEhfTUFTSyBXTEFOX0dQSU9fUElOMTRfUEFEX1NUUkVOR1RIX01BU0sKLSNkZWZpbmUgR1BJT19QSU4xNF9QQURfU1RSRU5HVEhfR0VUKHgpIFdMQU5fR1BJT19QSU4xNF9QQURfU1RSRU5HVEhfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTRfUEFEX1NUUkVOR1RIX1NFVCh4KSBXTEFOX0dQSU9fUElOMTRfUEFEX1NUUkVOR1RIX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjE0X1BBRF9EUklWRVJfTVNCIFdMQU5fR1BJT19QSU4xNF9QQURfRFJJVkVSX01TQgotI2RlZmluZSBHUElPX1BJTjE0X1BBRF9EUklWRVJfTFNCIFdMQU5fR1BJT19QSU4xNF9QQURfRFJJVkVSX0xTQgotI2RlZmluZSBHUElPX1BJTjE0X1BBRF9EUklWRVJfTUFTSyBXTEFOX0dQSU9fUElOMTRfUEFEX0RSSVZFUl9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMTRfUEFEX0RSSVZFUl9HRVQoeCkgV0xBTl9HUElPX1BJTjE0X1BBRF9EUklWRVJfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTRfUEFEX0RSSVZFUl9TRVQoeCkgV0xBTl9HUElPX1BJTjE0X1BBRF9EUklWRVJfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTRfU09VUkNFX01TQiBXTEFOX0dQSU9fUElOMTRfU09VUkNFX01TQgotI2RlZmluZSBHUElPX1BJTjE0X1NPVVJDRV9MU0IgV0xBTl9HUElPX1BJTjE0X1NPVVJDRV9MU0IKLSNkZWZpbmUgR1BJT19QSU4xNF9TT1VSQ0VfTUFTSyBXTEFOX0dQSU9fUElOMTRfU09VUkNFX01BU0sKLSNkZWZpbmUgR1BJT19QSU4xNF9TT1VSQ0VfR0VUKHgpIFdMQU5fR1BJT19QSU4xNF9TT1VSQ0VfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTRfU09VUkNFX1NFVCh4KSBXTEFOX0dQSU9fUElOMTRfU09VUkNFX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjE1X0FERFJFU1MgV0xBTl9HUElPX1BJTjE1X0FERFJFU1MKLSNkZWZpbmUgR1BJT19QSU4xNV9PRkZTRVQgV0xBTl9HUElPX1BJTjE1X09GRlNFVAotI2RlZmluZSBHUElPX1BJTjE1X0NPTkZJR19NU0IgV0xBTl9HUElPX1BJTjE1X0NPTkZJR19NU0IKLSNkZWZpbmUgR1BJT19QSU4xNV9DT05GSUdfTFNCIFdMQU5fR1BJT19QSU4xNV9DT05GSUdfTFNCCi0jZGVmaW5lIEdQSU9fUElOMTVfQ09ORklHX01BU0sgV0xBTl9HUElPX1BJTjE1X0NPTkZJR19NQVNLCi0jZGVmaW5lIEdQSU9fUElOMTVfQ09ORklHX0dFVCh4KSBXTEFOX0dQSU9fUElOMTVfQ09ORklHX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjE1X0NPTkZJR19TRVQoeCkgV0xBTl9HUElPX1BJTjE1X0NPTkZJR19TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xNV9XQUtFVVBfRU5BQkxFX01TQiBXTEFOX0dQSU9fUElOMTVfV0FLRVVQX0VOQUJMRV9NU0IKLSNkZWZpbmUgR1BJT19QSU4xNV9XQUtFVVBfRU5BQkxFX0xTQiBXTEFOX0dQSU9fUElOMTVfV0FLRVVQX0VOQUJMRV9MU0IKLSNkZWZpbmUgR1BJT19QSU4xNV9XQUtFVVBfRU5BQkxFX01BU0sgV0xBTl9HUElPX1BJTjE1X1dBS0VVUF9FTkFCTEVfTUFTSwotI2RlZmluZSBHUElPX1BJTjE1X1dBS0VVUF9FTkFCTEVfR0VUKHgpIFdMQU5fR1BJT19QSU4xNV9XQUtFVVBfRU5BQkxFX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjE1X1dBS0VVUF9FTkFCTEVfU0VUKHgpIFdMQU5fR1BJT19QSU4xNV9XQUtFVVBfRU5BQkxFX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjE1X0lOVF9UWVBFX01TQiBXTEFOX0dQSU9fUElOMTVfSU5UX1RZUEVfTVNCCi0jZGVmaW5lIEdQSU9fUElOMTVfSU5UX1RZUEVfTFNCIFdMQU5fR1BJT19QSU4xNV9JTlRfVFlQRV9MU0IKLSNkZWZpbmUgR1BJT19QSU4xNV9JTlRfVFlQRV9NQVNLIFdMQU5fR1BJT19QSU4xNV9JTlRfVFlQRV9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMTVfSU5UX1RZUEVfR0VUKHgpIFdMQU5fR1BJT19QSU4xNV9JTlRfVFlQRV9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xNV9JTlRfVFlQRV9TRVQoeCkgV0xBTl9HUElPX1BJTjE1X0lOVF9UWVBFX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjE1X1BBRF9QVUxMX01TQiBXTEFOX0dQSU9fUElOMTVfUEFEX1BVTExfTVNCCi0jZGVmaW5lIEdQSU9fUElOMTVfUEFEX1BVTExfTFNCIFdMQU5fR1BJT19QSU4xNV9QQURfUFVMTF9MU0IKLSNkZWZpbmUgR1BJT19QSU4xNV9QQURfUFVMTF9NQVNLIFdMQU5fR1BJT19QSU4xNV9QQURfUFVMTF9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMTVfUEFEX1BVTExfR0VUKHgpIFdMQU5fR1BJT19QSU4xNV9QQURfUFVMTF9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xNV9QQURfUFVMTF9TRVQoeCkgV0xBTl9HUElPX1BJTjE1X1BBRF9QVUxMX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjE1X1BBRF9TVFJFTkdUSF9NU0IgV0xBTl9HUElPX1BJTjE1X1BBRF9TVFJFTkdUSF9NU0IKLSNkZWZpbmUgR1BJT19QSU4xNV9QQURfU1RSRU5HVEhfTFNCIFdMQU5fR1BJT19QSU4xNV9QQURfU1RSRU5HVEhfTFNCCi0jZGVmaW5lIEdQSU9fUElOMTVfUEFEX1NUUkVOR1RIX01BU0sgV0xBTl9HUElPX1BJTjE1X1BBRF9TVFJFTkdUSF9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMTVfUEFEX1NUUkVOR1RIX0dFVCh4KSBXTEFOX0dQSU9fUElOMTVfUEFEX1NUUkVOR1RIX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjE1X1BBRF9TVFJFTkdUSF9TRVQoeCkgV0xBTl9HUElPX1BJTjE1X1BBRF9TVFJFTkdUSF9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xNV9QQURfRFJJVkVSX01TQiBXTEFOX0dQSU9fUElOMTVfUEFEX0RSSVZFUl9NU0IKLSNkZWZpbmUgR1BJT19QSU4xNV9QQURfRFJJVkVSX0xTQiBXTEFOX0dQSU9fUElOMTVfUEFEX0RSSVZFUl9MU0IKLSNkZWZpbmUgR1BJT19QSU4xNV9QQURfRFJJVkVSX01BU0sgV0xBTl9HUElPX1BJTjE1X1BBRF9EUklWRVJfTUFTSwotI2RlZmluZSBHUElPX1BJTjE1X1BBRF9EUklWRVJfR0VUKHgpIFdMQU5fR1BJT19QSU4xNV9QQURfRFJJVkVSX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjE1X1BBRF9EUklWRVJfU0VUKHgpIFdMQU5fR1BJT19QSU4xNV9QQURfRFJJVkVSX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjE1X1NPVVJDRV9NU0IgV0xBTl9HUElPX1BJTjE1X1NPVVJDRV9NU0IKLSNkZWZpbmUgR1BJT19QSU4xNV9TT1VSQ0VfTFNCIFdMQU5fR1BJT19QSU4xNV9TT1VSQ0VfTFNCCi0jZGVmaW5lIEdQSU9fUElOMTVfU09VUkNFX01BU0sgV0xBTl9HUElPX1BJTjE1X1NPVVJDRV9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMTVfU09VUkNFX0dFVCh4KSBXTEFOX0dQSU9fUElOMTVfU09VUkNFX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjE1X1NPVVJDRV9TRVQoeCkgV0xBTl9HUElPX1BJTjE1X1NPVVJDRV9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xNl9BRERSRVNTIFdMQU5fR1BJT19QSU4xNl9BRERSRVNTCi0jZGVmaW5lIEdQSU9fUElOMTZfT0ZGU0VUIFdMQU5fR1BJT19QSU4xNl9PRkZTRVQKLSNkZWZpbmUgR1BJT19QSU4xNl9DT05GSUdfTVNCIFdMQU5fR1BJT19QSU4xNl9DT05GSUdfTVNCCi0jZGVmaW5lIEdQSU9fUElOMTZfQ09ORklHX0xTQiBXTEFOX0dQSU9fUElOMTZfQ09ORklHX0xTQgotI2RlZmluZSBHUElPX1BJTjE2X0NPTkZJR19NQVNLIFdMQU5fR1BJT19QSU4xNl9DT05GSUdfTUFTSwotI2RlZmluZSBHUElPX1BJTjE2X0NPTkZJR19HRVQoeCkgV0xBTl9HUElPX1BJTjE2X0NPTkZJR19HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xNl9DT05GSUdfU0VUKHgpIFdMQU5fR1BJT19QSU4xNl9DT05GSUdfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTZfV0FLRVVQX0VOQUJMRV9NU0IgV0xBTl9HUElPX1BJTjE2X1dBS0VVUF9FTkFCTEVfTVNCCi0jZGVmaW5lIEdQSU9fUElOMTZfV0FLRVVQX0VOQUJMRV9MU0IgV0xBTl9HUElPX1BJTjE2X1dBS0VVUF9FTkFCTEVfTFNCCi0jZGVmaW5lIEdQSU9fUElOMTZfV0FLRVVQX0VOQUJMRV9NQVNLIFdMQU5fR1BJT19QSU4xNl9XQUtFVVBfRU5BQkxFX01BU0sKLSNkZWZpbmUgR1BJT19QSU4xNl9XQUtFVVBfRU5BQkxFX0dFVCh4KSBXTEFOX0dQSU9fUElOMTZfV0FLRVVQX0VOQUJMRV9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xNl9XQUtFVVBfRU5BQkxFX1NFVCh4KSBXTEFOX0dQSU9fUElOMTZfV0FLRVVQX0VOQUJMRV9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xNl9JTlRfVFlQRV9NU0IgV0xBTl9HUElPX1BJTjE2X0lOVF9UWVBFX01TQgotI2RlZmluZSBHUElPX1BJTjE2X0lOVF9UWVBFX0xTQiBXTEFOX0dQSU9fUElOMTZfSU5UX1RZUEVfTFNCCi0jZGVmaW5lIEdQSU9fUElOMTZfSU5UX1RZUEVfTUFTSyBXTEFOX0dQSU9fUElOMTZfSU5UX1RZUEVfTUFTSwotI2RlZmluZSBHUElPX1BJTjE2X0lOVF9UWVBFX0dFVCh4KSBXTEFOX0dQSU9fUElOMTZfSU5UX1RZUEVfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTZfSU5UX1RZUEVfU0VUKHgpIFdMQU5fR1BJT19QSU4xNl9JTlRfVFlQRV9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xNl9QQURfUFVMTF9NU0IgV0xBTl9HUElPX1BJTjE2X1BBRF9QVUxMX01TQgotI2RlZmluZSBHUElPX1BJTjE2X1BBRF9QVUxMX0xTQiBXTEFOX0dQSU9fUElOMTZfUEFEX1BVTExfTFNCCi0jZGVmaW5lIEdQSU9fUElOMTZfUEFEX1BVTExfTUFTSyBXTEFOX0dQSU9fUElOMTZfUEFEX1BVTExfTUFTSwotI2RlZmluZSBHUElPX1BJTjE2X1BBRF9QVUxMX0dFVCh4KSBXTEFOX0dQSU9fUElOMTZfUEFEX1BVTExfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTZfUEFEX1BVTExfU0VUKHgpIFdMQU5fR1BJT19QSU4xNl9QQURfUFVMTF9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xNl9QQURfU1RSRU5HVEhfTVNCIFdMQU5fR1BJT19QSU4xNl9QQURfU1RSRU5HVEhfTVNCCi0jZGVmaW5lIEdQSU9fUElOMTZfUEFEX1NUUkVOR1RIX0xTQiBXTEFOX0dQSU9fUElOMTZfUEFEX1NUUkVOR1RIX0xTQgotI2RlZmluZSBHUElPX1BJTjE2X1BBRF9TVFJFTkdUSF9NQVNLIFdMQU5fR1BJT19QSU4xNl9QQURfU1RSRU5HVEhfTUFTSwotI2RlZmluZSBHUElPX1BJTjE2X1BBRF9TVFJFTkdUSF9HRVQoeCkgV0xBTl9HUElPX1BJTjE2X1BBRF9TVFJFTkdUSF9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xNl9QQURfU1RSRU5HVEhfU0VUKHgpIFdMQU5fR1BJT19QSU4xNl9QQURfU1RSRU5HVEhfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTZfUEFEX0RSSVZFUl9NU0IgV0xBTl9HUElPX1BJTjE2X1BBRF9EUklWRVJfTVNCCi0jZGVmaW5lIEdQSU9fUElOMTZfUEFEX0RSSVZFUl9MU0IgV0xBTl9HUElPX1BJTjE2X1BBRF9EUklWRVJfTFNCCi0jZGVmaW5lIEdQSU9fUElOMTZfUEFEX0RSSVZFUl9NQVNLIFdMQU5fR1BJT19QSU4xNl9QQURfRFJJVkVSX01BU0sKLSNkZWZpbmUgR1BJT19QSU4xNl9QQURfRFJJVkVSX0dFVCh4KSBXTEFOX0dQSU9fUElOMTZfUEFEX0RSSVZFUl9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xNl9QQURfRFJJVkVSX1NFVCh4KSBXTEFOX0dQSU9fUElOMTZfUEFEX0RSSVZFUl9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xNl9TT1VSQ0VfTVNCIFdMQU5fR1BJT19QSU4xNl9TT1VSQ0VfTVNCCi0jZGVmaW5lIEdQSU9fUElOMTZfU09VUkNFX0xTQiBXTEFOX0dQSU9fUElOMTZfU09VUkNFX0xTQgotI2RlZmluZSBHUElPX1BJTjE2X1NPVVJDRV9NQVNLIFdMQU5fR1BJT19QSU4xNl9TT1VSQ0VfTUFTSwotI2RlZmluZSBHUElPX1BJTjE2X1NPVVJDRV9HRVQoeCkgV0xBTl9HUElPX1BJTjE2X1NPVVJDRV9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xNl9TT1VSQ0VfU0VUKHgpIFdMQU5fR1BJT19QSU4xNl9TT1VSQ0VfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTdfQUREUkVTUyBXTEFOX0dQSU9fUElOMTdfQUREUkVTUwotI2RlZmluZSBHUElPX1BJTjE3X09GRlNFVCBXTEFOX0dQSU9fUElOMTdfT0ZGU0VUCi0jZGVmaW5lIEdQSU9fUElOMTdfQ09ORklHX01TQiBXTEFOX0dQSU9fUElOMTdfQ09ORklHX01TQgotI2RlZmluZSBHUElPX1BJTjE3X0NPTkZJR19MU0IgV0xBTl9HUElPX1BJTjE3X0NPTkZJR19MU0IKLSNkZWZpbmUgR1BJT19QSU4xN19DT05GSUdfTUFTSyBXTEFOX0dQSU9fUElOMTdfQ09ORklHX01BU0sKLSNkZWZpbmUgR1BJT19QSU4xN19DT05GSUdfR0VUKHgpIFdMQU5fR1BJT19QSU4xN19DT05GSUdfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTdfQ09ORklHX1NFVCh4KSBXTEFOX0dQSU9fUElOMTdfQ09ORklHX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjE3X1dBS0VVUF9FTkFCTEVfTVNCIFdMQU5fR1BJT19QSU4xN19XQUtFVVBfRU5BQkxFX01TQgotI2RlZmluZSBHUElPX1BJTjE3X1dBS0VVUF9FTkFCTEVfTFNCIFdMQU5fR1BJT19QSU4xN19XQUtFVVBfRU5BQkxFX0xTQgotI2RlZmluZSBHUElPX1BJTjE3X1dBS0VVUF9FTkFCTEVfTUFTSyBXTEFOX0dQSU9fUElOMTdfV0FLRVVQX0VOQUJMRV9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMTdfV0FLRVVQX0VOQUJMRV9HRVQoeCkgV0xBTl9HUElPX1BJTjE3X1dBS0VVUF9FTkFCTEVfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTdfV0FLRVVQX0VOQUJMRV9TRVQoeCkgV0xBTl9HUElPX1BJTjE3X1dBS0VVUF9FTkFCTEVfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTdfSU5UX1RZUEVfTVNCIFdMQU5fR1BJT19QSU4xN19JTlRfVFlQRV9NU0IKLSNkZWZpbmUgR1BJT19QSU4xN19JTlRfVFlQRV9MU0IgV0xBTl9HUElPX1BJTjE3X0lOVF9UWVBFX0xTQgotI2RlZmluZSBHUElPX1BJTjE3X0lOVF9UWVBFX01BU0sgV0xBTl9HUElPX1BJTjE3X0lOVF9UWVBFX01BU0sKLSNkZWZpbmUgR1BJT19QSU4xN19JTlRfVFlQRV9HRVQoeCkgV0xBTl9HUElPX1BJTjE3X0lOVF9UWVBFX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjE3X0lOVF9UWVBFX1NFVCh4KSBXTEFOX0dQSU9fUElOMTdfSU5UX1RZUEVfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTdfUEFEX1BVTExfTVNCIFdMQU5fR1BJT19QSU4xN19QQURfUFVMTF9NU0IKLSNkZWZpbmUgR1BJT19QSU4xN19QQURfUFVMTF9MU0IgV0xBTl9HUElPX1BJTjE3X1BBRF9QVUxMX0xTQgotI2RlZmluZSBHUElPX1BJTjE3X1BBRF9QVUxMX01BU0sgV0xBTl9HUElPX1BJTjE3X1BBRF9QVUxMX01BU0sKLSNkZWZpbmUgR1BJT19QSU4xN19QQURfUFVMTF9HRVQoeCkgV0xBTl9HUElPX1BJTjE3X1BBRF9QVUxMX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjE3X1BBRF9QVUxMX1NFVCh4KSBXTEFOX0dQSU9fUElOMTdfUEFEX1BVTExfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTdfUEFEX1NUUkVOR1RIX01TQiBXTEFOX0dQSU9fUElOMTdfUEFEX1NUUkVOR1RIX01TQgotI2RlZmluZSBHUElPX1BJTjE3X1BBRF9TVFJFTkdUSF9MU0IgV0xBTl9HUElPX1BJTjE3X1BBRF9TVFJFTkdUSF9MU0IKLSNkZWZpbmUgR1BJT19QSU4xN19QQURfU1RSRU5HVEhfTUFTSyBXTEFOX0dQSU9fUElOMTdfUEFEX1NUUkVOR1RIX01BU0sKLSNkZWZpbmUgR1BJT19QSU4xN19QQURfU1RSRU5HVEhfR0VUKHgpIFdMQU5fR1BJT19QSU4xN19QQURfU1RSRU5HVEhfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTdfUEFEX1NUUkVOR1RIX1NFVCh4KSBXTEFOX0dQSU9fUElOMTdfUEFEX1NUUkVOR1RIX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjE3X1BBRF9EUklWRVJfTVNCIFdMQU5fR1BJT19QSU4xN19QQURfRFJJVkVSX01TQgotI2RlZmluZSBHUElPX1BJTjE3X1BBRF9EUklWRVJfTFNCIFdMQU5fR1BJT19QSU4xN19QQURfRFJJVkVSX0xTQgotI2RlZmluZSBHUElPX1BJTjE3X1BBRF9EUklWRVJfTUFTSyBXTEFOX0dQSU9fUElOMTdfUEFEX0RSSVZFUl9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMTdfUEFEX0RSSVZFUl9HRVQoeCkgV0xBTl9HUElPX1BJTjE3X1BBRF9EUklWRVJfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTdfUEFEX0RSSVZFUl9TRVQoeCkgV0xBTl9HUElPX1BJTjE3X1BBRF9EUklWRVJfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTdfU09VUkNFX01TQiBXTEFOX0dQSU9fUElOMTdfU09VUkNFX01TQgotI2RlZmluZSBHUElPX1BJTjE3X1NPVVJDRV9MU0IgV0xBTl9HUElPX1BJTjE3X1NPVVJDRV9MU0IKLSNkZWZpbmUgR1BJT19QSU4xN19TT1VSQ0VfTUFTSyBXTEFOX0dQSU9fUElOMTdfU09VUkNFX01BU0sKLSNkZWZpbmUgR1BJT19QSU4xN19TT1VSQ0VfR0VUKHgpIFdMQU5fR1BJT19QSU4xN19TT1VSQ0VfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTdfU09VUkNFX1NFVCh4KSBXTEFOX0dQSU9fUElOMTdfU09VUkNFX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjE4X0FERFJFU1MgV0xBTl9HUElPX1BJTjE4X0FERFJFU1MKLSNkZWZpbmUgR1BJT19QSU4xOF9PRkZTRVQgV0xBTl9HUElPX1BJTjE4X09GRlNFVAotI2RlZmluZSBHUElPX1BJTjE4X0NPTkZJR19NU0IgV0xBTl9HUElPX1BJTjE4X0NPTkZJR19NU0IKLSNkZWZpbmUgR1BJT19QSU4xOF9DT05GSUdfTFNCIFdMQU5fR1BJT19QSU4xOF9DT05GSUdfTFNCCi0jZGVmaW5lIEdQSU9fUElOMThfQ09ORklHX01BU0sgV0xBTl9HUElPX1BJTjE4X0NPTkZJR19NQVNLCi0jZGVmaW5lIEdQSU9fUElOMThfQ09ORklHX0dFVCh4KSBXTEFOX0dQSU9fUElOMThfQ09ORklHX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjE4X0NPTkZJR19TRVQoeCkgV0xBTl9HUElPX1BJTjE4X0NPTkZJR19TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xOF9XQUtFVVBfRU5BQkxFX01TQiBXTEFOX0dQSU9fUElOMThfV0FLRVVQX0VOQUJMRV9NU0IKLSNkZWZpbmUgR1BJT19QSU4xOF9XQUtFVVBfRU5BQkxFX0xTQiBXTEFOX0dQSU9fUElOMThfV0FLRVVQX0VOQUJMRV9MU0IKLSNkZWZpbmUgR1BJT19QSU4xOF9XQUtFVVBfRU5BQkxFX01BU0sgV0xBTl9HUElPX1BJTjE4X1dBS0VVUF9FTkFCTEVfTUFTSwotI2RlZmluZSBHUElPX1BJTjE4X1dBS0VVUF9FTkFCTEVfR0VUKHgpIFdMQU5fR1BJT19QSU4xOF9XQUtFVVBfRU5BQkxFX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjE4X1dBS0VVUF9FTkFCTEVfU0VUKHgpIFdMQU5fR1BJT19QSU4xOF9XQUtFVVBfRU5BQkxFX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjE4X0lOVF9UWVBFX01TQiBXTEFOX0dQSU9fUElOMThfSU5UX1RZUEVfTVNCCi0jZGVmaW5lIEdQSU9fUElOMThfSU5UX1RZUEVfTFNCIFdMQU5fR1BJT19QSU4xOF9JTlRfVFlQRV9MU0IKLSNkZWZpbmUgR1BJT19QSU4xOF9JTlRfVFlQRV9NQVNLIFdMQU5fR1BJT19QSU4xOF9JTlRfVFlQRV9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMThfSU5UX1RZUEVfR0VUKHgpIFdMQU5fR1BJT19QSU4xOF9JTlRfVFlQRV9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xOF9JTlRfVFlQRV9TRVQoeCkgV0xBTl9HUElPX1BJTjE4X0lOVF9UWVBFX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjE4X1BBRF9QVUxMX01TQiBXTEFOX0dQSU9fUElOMThfUEFEX1BVTExfTVNCCi0jZGVmaW5lIEdQSU9fUElOMThfUEFEX1BVTExfTFNCIFdMQU5fR1BJT19QSU4xOF9QQURfUFVMTF9MU0IKLSNkZWZpbmUgR1BJT19QSU4xOF9QQURfUFVMTF9NQVNLIFdMQU5fR1BJT19QSU4xOF9QQURfUFVMTF9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMThfUEFEX1BVTExfR0VUKHgpIFdMQU5fR1BJT19QSU4xOF9QQURfUFVMTF9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xOF9QQURfUFVMTF9TRVQoeCkgV0xBTl9HUElPX1BJTjE4X1BBRF9QVUxMX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjE4X1BBRF9TVFJFTkdUSF9NU0IgV0xBTl9HUElPX1BJTjE4X1BBRF9TVFJFTkdUSF9NU0IKLSNkZWZpbmUgR1BJT19QSU4xOF9QQURfU1RSRU5HVEhfTFNCIFdMQU5fR1BJT19QSU4xOF9QQURfU1RSRU5HVEhfTFNCCi0jZGVmaW5lIEdQSU9fUElOMThfUEFEX1NUUkVOR1RIX01BU0sgV0xBTl9HUElPX1BJTjE4X1BBRF9TVFJFTkdUSF9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMThfUEFEX1NUUkVOR1RIX0dFVCh4KSBXTEFOX0dQSU9fUElOMThfUEFEX1NUUkVOR1RIX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjE4X1BBRF9TVFJFTkdUSF9TRVQoeCkgV0xBTl9HUElPX1BJTjE4X1BBRF9TVFJFTkdUSF9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xOF9QQURfRFJJVkVSX01TQiBXTEFOX0dQSU9fUElOMThfUEFEX0RSSVZFUl9NU0IKLSNkZWZpbmUgR1BJT19QSU4xOF9QQURfRFJJVkVSX0xTQiBXTEFOX0dQSU9fUElOMThfUEFEX0RSSVZFUl9MU0IKLSNkZWZpbmUgR1BJT19QSU4xOF9QQURfRFJJVkVSX01BU0sgV0xBTl9HUElPX1BJTjE4X1BBRF9EUklWRVJfTUFTSwotI2RlZmluZSBHUElPX1BJTjE4X1BBRF9EUklWRVJfR0VUKHgpIFdMQU5fR1BJT19QSU4xOF9QQURfRFJJVkVSX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjE4X1BBRF9EUklWRVJfU0VUKHgpIFdMQU5fR1BJT19QSU4xOF9QQURfRFJJVkVSX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjE4X1NPVVJDRV9NU0IgV0xBTl9HUElPX1BJTjE4X1NPVVJDRV9NU0IKLSNkZWZpbmUgR1BJT19QSU4xOF9TT1VSQ0VfTFNCIFdMQU5fR1BJT19QSU4xOF9TT1VSQ0VfTFNCCi0jZGVmaW5lIEdQSU9fUElOMThfU09VUkNFX01BU0sgV0xBTl9HUElPX1BJTjE4X1NPVVJDRV9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMThfU09VUkNFX0dFVCh4KSBXTEFOX0dQSU9fUElOMThfU09VUkNFX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjE4X1NPVVJDRV9TRVQoeCkgV0xBTl9HUElPX1BJTjE4X1NPVVJDRV9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xOV9BRERSRVNTIFdMQU5fR1BJT19QSU4xOV9BRERSRVNTCi0jZGVmaW5lIEdQSU9fUElOMTlfT0ZGU0VUIFdMQU5fR1BJT19QSU4xOV9PRkZTRVQKLSNkZWZpbmUgR1BJT19QSU4xOV9DT05GSUdfTVNCIFdMQU5fR1BJT19QSU4xOV9DT05GSUdfTVNCCi0jZGVmaW5lIEdQSU9fUElOMTlfQ09ORklHX0xTQiBXTEFOX0dQSU9fUElOMTlfQ09ORklHX0xTQgotI2RlZmluZSBHUElPX1BJTjE5X0NPTkZJR19NQVNLIFdMQU5fR1BJT19QSU4xOV9DT05GSUdfTUFTSwotI2RlZmluZSBHUElPX1BJTjE5X0NPTkZJR19HRVQoeCkgV0xBTl9HUElPX1BJTjE5X0NPTkZJR19HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xOV9DT05GSUdfU0VUKHgpIFdMQU5fR1BJT19QSU4xOV9DT05GSUdfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTlfV0FLRVVQX0VOQUJMRV9NU0IgV0xBTl9HUElPX1BJTjE5X1dBS0VVUF9FTkFCTEVfTVNCCi0jZGVmaW5lIEdQSU9fUElOMTlfV0FLRVVQX0VOQUJMRV9MU0IgV0xBTl9HUElPX1BJTjE5X1dBS0VVUF9FTkFCTEVfTFNCCi0jZGVmaW5lIEdQSU9fUElOMTlfV0FLRVVQX0VOQUJMRV9NQVNLIFdMQU5fR1BJT19QSU4xOV9XQUtFVVBfRU5BQkxFX01BU0sKLSNkZWZpbmUgR1BJT19QSU4xOV9XQUtFVVBfRU5BQkxFX0dFVCh4KSBXTEFOX0dQSU9fUElOMTlfV0FLRVVQX0VOQUJMRV9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xOV9XQUtFVVBfRU5BQkxFX1NFVCh4KSBXTEFOX0dQSU9fUElOMTlfV0FLRVVQX0VOQUJMRV9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xOV9JTlRfVFlQRV9NU0IgV0xBTl9HUElPX1BJTjE5X0lOVF9UWVBFX01TQgotI2RlZmluZSBHUElPX1BJTjE5X0lOVF9UWVBFX0xTQiBXTEFOX0dQSU9fUElOMTlfSU5UX1RZUEVfTFNCCi0jZGVmaW5lIEdQSU9fUElOMTlfSU5UX1RZUEVfTUFTSyBXTEFOX0dQSU9fUElOMTlfSU5UX1RZUEVfTUFTSwotI2RlZmluZSBHUElPX1BJTjE5X0lOVF9UWVBFX0dFVCh4KSBXTEFOX0dQSU9fUElOMTlfSU5UX1RZUEVfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTlfSU5UX1RZUEVfU0VUKHgpIFdMQU5fR1BJT19QSU4xOV9JTlRfVFlQRV9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xOV9QQURfUFVMTF9NU0IgV0xBTl9HUElPX1BJTjE5X1BBRF9QVUxMX01TQgotI2RlZmluZSBHUElPX1BJTjE5X1BBRF9QVUxMX0xTQiBXTEFOX0dQSU9fUElOMTlfUEFEX1BVTExfTFNCCi0jZGVmaW5lIEdQSU9fUElOMTlfUEFEX1BVTExfTUFTSyBXTEFOX0dQSU9fUElOMTlfUEFEX1BVTExfTUFTSwotI2RlZmluZSBHUElPX1BJTjE5X1BBRF9QVUxMX0dFVCh4KSBXTEFOX0dQSU9fUElOMTlfUEFEX1BVTExfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTlfUEFEX1BVTExfU0VUKHgpIFdMQU5fR1BJT19QSU4xOV9QQURfUFVMTF9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xOV9QQURfU1RSRU5HVEhfTVNCIFdMQU5fR1BJT19QSU4xOV9QQURfU1RSRU5HVEhfTVNCCi0jZGVmaW5lIEdQSU9fUElOMTlfUEFEX1NUUkVOR1RIX0xTQiBXTEFOX0dQSU9fUElOMTlfUEFEX1NUUkVOR1RIX0xTQgotI2RlZmluZSBHUElPX1BJTjE5X1BBRF9TVFJFTkdUSF9NQVNLIFdMQU5fR1BJT19QSU4xOV9QQURfU1RSRU5HVEhfTUFTSwotI2RlZmluZSBHUElPX1BJTjE5X1BBRF9TVFJFTkdUSF9HRVQoeCkgV0xBTl9HUElPX1BJTjE5X1BBRF9TVFJFTkdUSF9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xOV9QQURfU1RSRU5HVEhfU0VUKHgpIFdMQU5fR1BJT19QSU4xOV9QQURfU1RSRU5HVEhfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMTlfUEFEX0RSSVZFUl9NU0IgV0xBTl9HUElPX1BJTjE5X1BBRF9EUklWRVJfTVNCCi0jZGVmaW5lIEdQSU9fUElOMTlfUEFEX0RSSVZFUl9MU0IgV0xBTl9HUElPX1BJTjE5X1BBRF9EUklWRVJfTFNCCi0jZGVmaW5lIEdQSU9fUElOMTlfUEFEX0RSSVZFUl9NQVNLIFdMQU5fR1BJT19QSU4xOV9QQURfRFJJVkVSX01BU0sKLSNkZWZpbmUgR1BJT19QSU4xOV9QQURfRFJJVkVSX0dFVCh4KSBXTEFOX0dQSU9fUElOMTlfUEFEX0RSSVZFUl9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xOV9QQURfRFJJVkVSX1NFVCh4KSBXTEFOX0dQSU9fUElOMTlfUEFEX0RSSVZFUl9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xOV9TT1VSQ0VfTVNCIFdMQU5fR1BJT19QSU4xOV9TT1VSQ0VfTVNCCi0jZGVmaW5lIEdQSU9fUElOMTlfU09VUkNFX0xTQiBXTEFOX0dQSU9fUElOMTlfU09VUkNFX0xTQgotI2RlZmluZSBHUElPX1BJTjE5X1NPVVJDRV9NQVNLIFdMQU5fR1BJT19QSU4xOV9TT1VSQ0VfTUFTSwotI2RlZmluZSBHUElPX1BJTjE5X1NPVVJDRV9HRVQoeCkgV0xBTl9HUElPX1BJTjE5X1NPVVJDRV9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4xOV9TT1VSQ0VfU0VUKHgpIFdMQU5fR1BJT19QSU4xOV9TT1VSQ0VfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMjBfQUREUkVTUyBXTEFOX0dQSU9fUElOMjBfQUREUkVTUwotI2RlZmluZSBHUElPX1BJTjIwX09GRlNFVCBXTEFOX0dQSU9fUElOMjBfT0ZGU0VUCi0jZGVmaW5lIEdQSU9fUElOMjBfQ09ORklHX01TQiBXTEFOX0dQSU9fUElOMjBfQ09ORklHX01TQgotI2RlZmluZSBHUElPX1BJTjIwX0NPTkZJR19MU0IgV0xBTl9HUElPX1BJTjIwX0NPTkZJR19MU0IKLSNkZWZpbmUgR1BJT19QSU4yMF9DT05GSUdfTUFTSyBXTEFOX0dQSU9fUElOMjBfQ09ORklHX01BU0sKLSNkZWZpbmUgR1BJT19QSU4yMF9DT05GSUdfR0VUKHgpIFdMQU5fR1BJT19QSU4yMF9DT05GSUdfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMjBfQ09ORklHX1NFVCh4KSBXTEFOX0dQSU9fUElOMjBfQ09ORklHX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjIwX1dBS0VVUF9FTkFCTEVfTVNCIFdMQU5fR1BJT19QSU4yMF9XQUtFVVBfRU5BQkxFX01TQgotI2RlZmluZSBHUElPX1BJTjIwX1dBS0VVUF9FTkFCTEVfTFNCIFdMQU5fR1BJT19QSU4yMF9XQUtFVVBfRU5BQkxFX0xTQgotI2RlZmluZSBHUElPX1BJTjIwX1dBS0VVUF9FTkFCTEVfTUFTSyBXTEFOX0dQSU9fUElOMjBfV0FLRVVQX0VOQUJMRV9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMjBfV0FLRVVQX0VOQUJMRV9HRVQoeCkgV0xBTl9HUElPX1BJTjIwX1dBS0VVUF9FTkFCTEVfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMjBfV0FLRVVQX0VOQUJMRV9TRVQoeCkgV0xBTl9HUElPX1BJTjIwX1dBS0VVUF9FTkFCTEVfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMjBfSU5UX1RZUEVfTVNCIFdMQU5fR1BJT19QSU4yMF9JTlRfVFlQRV9NU0IKLSNkZWZpbmUgR1BJT19QSU4yMF9JTlRfVFlQRV9MU0IgV0xBTl9HUElPX1BJTjIwX0lOVF9UWVBFX0xTQgotI2RlZmluZSBHUElPX1BJTjIwX0lOVF9UWVBFX01BU0sgV0xBTl9HUElPX1BJTjIwX0lOVF9UWVBFX01BU0sKLSNkZWZpbmUgR1BJT19QSU4yMF9JTlRfVFlQRV9HRVQoeCkgV0xBTl9HUElPX1BJTjIwX0lOVF9UWVBFX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjIwX0lOVF9UWVBFX1NFVCh4KSBXTEFOX0dQSU9fUElOMjBfSU5UX1RZUEVfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMjBfUEFEX1BVTExfTVNCIFdMQU5fR1BJT19QSU4yMF9QQURfUFVMTF9NU0IKLSNkZWZpbmUgR1BJT19QSU4yMF9QQURfUFVMTF9MU0IgV0xBTl9HUElPX1BJTjIwX1BBRF9QVUxMX0xTQgotI2RlZmluZSBHUElPX1BJTjIwX1BBRF9QVUxMX01BU0sgV0xBTl9HUElPX1BJTjIwX1BBRF9QVUxMX01BU0sKLSNkZWZpbmUgR1BJT19QSU4yMF9QQURfUFVMTF9HRVQoeCkgV0xBTl9HUElPX1BJTjIwX1BBRF9QVUxMX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjIwX1BBRF9QVUxMX1NFVCh4KSBXTEFOX0dQSU9fUElOMjBfUEFEX1BVTExfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMjBfUEFEX1NUUkVOR1RIX01TQiBXTEFOX0dQSU9fUElOMjBfUEFEX1NUUkVOR1RIX01TQgotI2RlZmluZSBHUElPX1BJTjIwX1BBRF9TVFJFTkdUSF9MU0IgV0xBTl9HUElPX1BJTjIwX1BBRF9TVFJFTkdUSF9MU0IKLSNkZWZpbmUgR1BJT19QSU4yMF9QQURfU1RSRU5HVEhfTUFTSyBXTEFOX0dQSU9fUElOMjBfUEFEX1NUUkVOR1RIX01BU0sKLSNkZWZpbmUgR1BJT19QSU4yMF9QQURfU1RSRU5HVEhfR0VUKHgpIFdMQU5fR1BJT19QSU4yMF9QQURfU1RSRU5HVEhfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMjBfUEFEX1NUUkVOR1RIX1NFVCh4KSBXTEFOX0dQSU9fUElOMjBfUEFEX1NUUkVOR1RIX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjIwX1BBRF9EUklWRVJfTVNCIFdMQU5fR1BJT19QSU4yMF9QQURfRFJJVkVSX01TQgotI2RlZmluZSBHUElPX1BJTjIwX1BBRF9EUklWRVJfTFNCIFdMQU5fR1BJT19QSU4yMF9QQURfRFJJVkVSX0xTQgotI2RlZmluZSBHUElPX1BJTjIwX1BBRF9EUklWRVJfTUFTSyBXTEFOX0dQSU9fUElOMjBfUEFEX0RSSVZFUl9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMjBfUEFEX0RSSVZFUl9HRVQoeCkgV0xBTl9HUElPX1BJTjIwX1BBRF9EUklWRVJfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMjBfUEFEX0RSSVZFUl9TRVQoeCkgV0xBTl9HUElPX1BJTjIwX1BBRF9EUklWRVJfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMjBfU09VUkNFX01TQiBXTEFOX0dQSU9fUElOMjBfU09VUkNFX01TQgotI2RlZmluZSBHUElPX1BJTjIwX1NPVVJDRV9MU0IgV0xBTl9HUElPX1BJTjIwX1NPVVJDRV9MU0IKLSNkZWZpbmUgR1BJT19QSU4yMF9TT1VSQ0VfTUFTSyBXTEFOX0dQSU9fUElOMjBfU09VUkNFX01BU0sKLSNkZWZpbmUgR1BJT19QSU4yMF9TT1VSQ0VfR0VUKHgpIFdMQU5fR1BJT19QSU4yMF9TT1VSQ0VfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMjBfU09VUkNFX1NFVCh4KSBXTEFOX0dQSU9fUElOMjBfU09VUkNFX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjIxX0FERFJFU1MgV0xBTl9HUElPX1BJTjIxX0FERFJFU1MKLSNkZWZpbmUgR1BJT19QSU4yMV9PRkZTRVQgV0xBTl9HUElPX1BJTjIxX09GRlNFVAotI2RlZmluZSBHUElPX1BJTjIxX0NPTkZJR19NU0IgV0xBTl9HUElPX1BJTjIxX0NPTkZJR19NU0IKLSNkZWZpbmUgR1BJT19QSU4yMV9DT05GSUdfTFNCIFdMQU5fR1BJT19QSU4yMV9DT05GSUdfTFNCCi0jZGVmaW5lIEdQSU9fUElOMjFfQ09ORklHX01BU0sgV0xBTl9HUElPX1BJTjIxX0NPTkZJR19NQVNLCi0jZGVmaW5lIEdQSU9fUElOMjFfQ09ORklHX0dFVCh4KSBXTEFOX0dQSU9fUElOMjFfQ09ORklHX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjIxX0NPTkZJR19TRVQoeCkgV0xBTl9HUElPX1BJTjIxX0NPTkZJR19TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4yMV9XQUtFVVBfRU5BQkxFX01TQiBXTEFOX0dQSU9fUElOMjFfV0FLRVVQX0VOQUJMRV9NU0IKLSNkZWZpbmUgR1BJT19QSU4yMV9XQUtFVVBfRU5BQkxFX0xTQiBXTEFOX0dQSU9fUElOMjFfV0FLRVVQX0VOQUJMRV9MU0IKLSNkZWZpbmUgR1BJT19QSU4yMV9XQUtFVVBfRU5BQkxFX01BU0sgV0xBTl9HUElPX1BJTjIxX1dBS0VVUF9FTkFCTEVfTUFTSwotI2RlZmluZSBHUElPX1BJTjIxX1dBS0VVUF9FTkFCTEVfR0VUKHgpIFdMQU5fR1BJT19QSU4yMV9XQUtFVVBfRU5BQkxFX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjIxX1dBS0VVUF9FTkFCTEVfU0VUKHgpIFdMQU5fR1BJT19QSU4yMV9XQUtFVVBfRU5BQkxFX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjIxX0lOVF9UWVBFX01TQiBXTEFOX0dQSU9fUElOMjFfSU5UX1RZUEVfTVNCCi0jZGVmaW5lIEdQSU9fUElOMjFfSU5UX1RZUEVfTFNCIFdMQU5fR1BJT19QSU4yMV9JTlRfVFlQRV9MU0IKLSNkZWZpbmUgR1BJT19QSU4yMV9JTlRfVFlQRV9NQVNLIFdMQU5fR1BJT19QSU4yMV9JTlRfVFlQRV9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMjFfSU5UX1RZUEVfR0VUKHgpIFdMQU5fR1BJT19QSU4yMV9JTlRfVFlQRV9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4yMV9JTlRfVFlQRV9TRVQoeCkgV0xBTl9HUElPX1BJTjIxX0lOVF9UWVBFX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjIxX1BBRF9QVUxMX01TQiBXTEFOX0dQSU9fUElOMjFfUEFEX1BVTExfTVNCCi0jZGVmaW5lIEdQSU9fUElOMjFfUEFEX1BVTExfTFNCIFdMQU5fR1BJT19QSU4yMV9QQURfUFVMTF9MU0IKLSNkZWZpbmUgR1BJT19QSU4yMV9QQURfUFVMTF9NQVNLIFdMQU5fR1BJT19QSU4yMV9QQURfUFVMTF9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMjFfUEFEX1BVTExfR0VUKHgpIFdMQU5fR1BJT19QSU4yMV9QQURfUFVMTF9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4yMV9QQURfUFVMTF9TRVQoeCkgV0xBTl9HUElPX1BJTjIxX1BBRF9QVUxMX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjIxX1BBRF9TVFJFTkdUSF9NU0IgV0xBTl9HUElPX1BJTjIxX1BBRF9TVFJFTkdUSF9NU0IKLSNkZWZpbmUgR1BJT19QSU4yMV9QQURfU1RSRU5HVEhfTFNCIFdMQU5fR1BJT19QSU4yMV9QQURfU1RSRU5HVEhfTFNCCi0jZGVmaW5lIEdQSU9fUElOMjFfUEFEX1NUUkVOR1RIX01BU0sgV0xBTl9HUElPX1BJTjIxX1BBRF9TVFJFTkdUSF9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMjFfUEFEX1NUUkVOR1RIX0dFVCh4KSBXTEFOX0dQSU9fUElOMjFfUEFEX1NUUkVOR1RIX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjIxX1BBRF9TVFJFTkdUSF9TRVQoeCkgV0xBTl9HUElPX1BJTjIxX1BBRF9TVFJFTkdUSF9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4yMV9QQURfRFJJVkVSX01TQiBXTEFOX0dQSU9fUElOMjFfUEFEX0RSSVZFUl9NU0IKLSNkZWZpbmUgR1BJT19QSU4yMV9QQURfRFJJVkVSX0xTQiBXTEFOX0dQSU9fUElOMjFfUEFEX0RSSVZFUl9MU0IKLSNkZWZpbmUgR1BJT19QSU4yMV9QQURfRFJJVkVSX01BU0sgV0xBTl9HUElPX1BJTjIxX1BBRF9EUklWRVJfTUFTSwotI2RlZmluZSBHUElPX1BJTjIxX1BBRF9EUklWRVJfR0VUKHgpIFdMQU5fR1BJT19QSU4yMV9QQURfRFJJVkVSX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjIxX1BBRF9EUklWRVJfU0VUKHgpIFdMQU5fR1BJT19QSU4yMV9QQURfRFJJVkVSX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjIxX1NPVVJDRV9NU0IgV0xBTl9HUElPX1BJTjIxX1NPVVJDRV9NU0IKLSNkZWZpbmUgR1BJT19QSU4yMV9TT1VSQ0VfTFNCIFdMQU5fR1BJT19QSU4yMV9TT1VSQ0VfTFNCCi0jZGVmaW5lIEdQSU9fUElOMjFfU09VUkNFX01BU0sgV0xBTl9HUElPX1BJTjIxX1NPVVJDRV9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMjFfU09VUkNFX0dFVCh4KSBXTEFOX0dQSU9fUElOMjFfU09VUkNFX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjIxX1NPVVJDRV9TRVQoeCkgV0xBTl9HUElPX1BJTjIxX1NPVVJDRV9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4yMl9BRERSRVNTIFdMQU5fR1BJT19QSU4yMl9BRERSRVNTCi0jZGVmaW5lIEdQSU9fUElOMjJfT0ZGU0VUIFdMQU5fR1BJT19QSU4yMl9PRkZTRVQKLSNkZWZpbmUgR1BJT19QSU4yMl9DT05GSUdfTVNCIFdMQU5fR1BJT19QSU4yMl9DT05GSUdfTVNCCi0jZGVmaW5lIEdQSU9fUElOMjJfQ09ORklHX0xTQiBXTEFOX0dQSU9fUElOMjJfQ09ORklHX0xTQgotI2RlZmluZSBHUElPX1BJTjIyX0NPTkZJR19NQVNLIFdMQU5fR1BJT19QSU4yMl9DT05GSUdfTUFTSwotI2RlZmluZSBHUElPX1BJTjIyX0NPTkZJR19HRVQoeCkgV0xBTl9HUElPX1BJTjIyX0NPTkZJR19HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4yMl9DT05GSUdfU0VUKHgpIFdMQU5fR1BJT19QSU4yMl9DT05GSUdfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMjJfV0FLRVVQX0VOQUJMRV9NU0IgV0xBTl9HUElPX1BJTjIyX1dBS0VVUF9FTkFCTEVfTVNCCi0jZGVmaW5lIEdQSU9fUElOMjJfV0FLRVVQX0VOQUJMRV9MU0IgV0xBTl9HUElPX1BJTjIyX1dBS0VVUF9FTkFCTEVfTFNCCi0jZGVmaW5lIEdQSU9fUElOMjJfV0FLRVVQX0VOQUJMRV9NQVNLIFdMQU5fR1BJT19QSU4yMl9XQUtFVVBfRU5BQkxFX01BU0sKLSNkZWZpbmUgR1BJT19QSU4yMl9XQUtFVVBfRU5BQkxFX0dFVCh4KSBXTEFOX0dQSU9fUElOMjJfV0FLRVVQX0VOQUJMRV9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4yMl9XQUtFVVBfRU5BQkxFX1NFVCh4KSBXTEFOX0dQSU9fUElOMjJfV0FLRVVQX0VOQUJMRV9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4yMl9JTlRfVFlQRV9NU0IgV0xBTl9HUElPX1BJTjIyX0lOVF9UWVBFX01TQgotI2RlZmluZSBHUElPX1BJTjIyX0lOVF9UWVBFX0xTQiBXTEFOX0dQSU9fUElOMjJfSU5UX1RZUEVfTFNCCi0jZGVmaW5lIEdQSU9fUElOMjJfSU5UX1RZUEVfTUFTSyBXTEFOX0dQSU9fUElOMjJfSU5UX1RZUEVfTUFTSwotI2RlZmluZSBHUElPX1BJTjIyX0lOVF9UWVBFX0dFVCh4KSBXTEFOX0dQSU9fUElOMjJfSU5UX1RZUEVfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMjJfSU5UX1RZUEVfU0VUKHgpIFdMQU5fR1BJT19QSU4yMl9JTlRfVFlQRV9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4yMl9QQURfUFVMTF9NU0IgV0xBTl9HUElPX1BJTjIyX1BBRF9QVUxMX01TQgotI2RlZmluZSBHUElPX1BJTjIyX1BBRF9QVUxMX0xTQiBXTEFOX0dQSU9fUElOMjJfUEFEX1BVTExfTFNCCi0jZGVmaW5lIEdQSU9fUElOMjJfUEFEX1BVTExfTUFTSyBXTEFOX0dQSU9fUElOMjJfUEFEX1BVTExfTUFTSwotI2RlZmluZSBHUElPX1BJTjIyX1BBRF9QVUxMX0dFVCh4KSBXTEFOX0dQSU9fUElOMjJfUEFEX1BVTExfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMjJfUEFEX1BVTExfU0VUKHgpIFdMQU5fR1BJT19QSU4yMl9QQURfUFVMTF9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4yMl9QQURfU1RSRU5HVEhfTVNCIFdMQU5fR1BJT19QSU4yMl9QQURfU1RSRU5HVEhfTVNCCi0jZGVmaW5lIEdQSU9fUElOMjJfUEFEX1NUUkVOR1RIX0xTQiBXTEFOX0dQSU9fUElOMjJfUEFEX1NUUkVOR1RIX0xTQgotI2RlZmluZSBHUElPX1BJTjIyX1BBRF9TVFJFTkdUSF9NQVNLIFdMQU5fR1BJT19QSU4yMl9QQURfU1RSRU5HVEhfTUFTSwotI2RlZmluZSBHUElPX1BJTjIyX1BBRF9TVFJFTkdUSF9HRVQoeCkgV0xBTl9HUElPX1BJTjIyX1BBRF9TVFJFTkdUSF9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4yMl9QQURfU1RSRU5HVEhfU0VUKHgpIFdMQU5fR1BJT19QSU4yMl9QQURfU1RSRU5HVEhfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMjJfUEFEX0RSSVZFUl9NU0IgV0xBTl9HUElPX1BJTjIyX1BBRF9EUklWRVJfTVNCCi0jZGVmaW5lIEdQSU9fUElOMjJfUEFEX0RSSVZFUl9MU0IgV0xBTl9HUElPX1BJTjIyX1BBRF9EUklWRVJfTFNCCi0jZGVmaW5lIEdQSU9fUElOMjJfUEFEX0RSSVZFUl9NQVNLIFdMQU5fR1BJT19QSU4yMl9QQURfRFJJVkVSX01BU0sKLSNkZWZpbmUgR1BJT19QSU4yMl9QQURfRFJJVkVSX0dFVCh4KSBXTEFOX0dQSU9fUElOMjJfUEFEX0RSSVZFUl9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4yMl9QQURfRFJJVkVSX1NFVCh4KSBXTEFOX0dQSU9fUElOMjJfUEFEX0RSSVZFUl9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4yMl9TT1VSQ0VfTVNCIFdMQU5fR1BJT19QSU4yMl9TT1VSQ0VfTVNCCi0jZGVmaW5lIEdQSU9fUElOMjJfU09VUkNFX0xTQiBXTEFOX0dQSU9fUElOMjJfU09VUkNFX0xTQgotI2RlZmluZSBHUElPX1BJTjIyX1NPVVJDRV9NQVNLIFdMQU5fR1BJT19QSU4yMl9TT1VSQ0VfTUFTSwotI2RlZmluZSBHUElPX1BJTjIyX1NPVVJDRV9HRVQoeCkgV0xBTl9HUElPX1BJTjIyX1NPVVJDRV9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4yMl9TT1VSQ0VfU0VUKHgpIFdMQU5fR1BJT19QSU4yMl9TT1VSQ0VfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMjNfQUREUkVTUyBXTEFOX0dQSU9fUElOMjNfQUREUkVTUwotI2RlZmluZSBHUElPX1BJTjIzX09GRlNFVCBXTEFOX0dQSU9fUElOMjNfT0ZGU0VUCi0jZGVmaW5lIEdQSU9fUElOMjNfQ09ORklHX01TQiBXTEFOX0dQSU9fUElOMjNfQ09ORklHX01TQgotI2RlZmluZSBHUElPX1BJTjIzX0NPTkZJR19MU0IgV0xBTl9HUElPX1BJTjIzX0NPTkZJR19MU0IKLSNkZWZpbmUgR1BJT19QSU4yM19DT05GSUdfTUFTSyBXTEFOX0dQSU9fUElOMjNfQ09ORklHX01BU0sKLSNkZWZpbmUgR1BJT19QSU4yM19DT05GSUdfR0VUKHgpIFdMQU5fR1BJT19QSU4yM19DT05GSUdfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMjNfQ09ORklHX1NFVCh4KSBXTEFOX0dQSU9fUElOMjNfQ09ORklHX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjIzX1dBS0VVUF9FTkFCTEVfTVNCIFdMQU5fR1BJT19QSU4yM19XQUtFVVBfRU5BQkxFX01TQgotI2RlZmluZSBHUElPX1BJTjIzX1dBS0VVUF9FTkFCTEVfTFNCIFdMQU5fR1BJT19QSU4yM19XQUtFVVBfRU5BQkxFX0xTQgotI2RlZmluZSBHUElPX1BJTjIzX1dBS0VVUF9FTkFCTEVfTUFTSyBXTEFOX0dQSU9fUElOMjNfV0FLRVVQX0VOQUJMRV9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMjNfV0FLRVVQX0VOQUJMRV9HRVQoeCkgV0xBTl9HUElPX1BJTjIzX1dBS0VVUF9FTkFCTEVfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMjNfV0FLRVVQX0VOQUJMRV9TRVQoeCkgV0xBTl9HUElPX1BJTjIzX1dBS0VVUF9FTkFCTEVfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMjNfSU5UX1RZUEVfTVNCIFdMQU5fR1BJT19QSU4yM19JTlRfVFlQRV9NU0IKLSNkZWZpbmUgR1BJT19QSU4yM19JTlRfVFlQRV9MU0IgV0xBTl9HUElPX1BJTjIzX0lOVF9UWVBFX0xTQgotI2RlZmluZSBHUElPX1BJTjIzX0lOVF9UWVBFX01BU0sgV0xBTl9HUElPX1BJTjIzX0lOVF9UWVBFX01BU0sKLSNkZWZpbmUgR1BJT19QSU4yM19JTlRfVFlQRV9HRVQoeCkgV0xBTl9HUElPX1BJTjIzX0lOVF9UWVBFX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjIzX0lOVF9UWVBFX1NFVCh4KSBXTEFOX0dQSU9fUElOMjNfSU5UX1RZUEVfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMjNfUEFEX0RSSVZFUl9NU0IgV0xBTl9HUElPX1BJTjIzX1BBRF9EUklWRVJfTVNCCi0jZGVmaW5lIEdQSU9fUElOMjNfUEFEX0RSSVZFUl9MU0IgV0xBTl9HUElPX1BJTjIzX1BBRF9EUklWRVJfTFNCCi0jZGVmaW5lIEdQSU9fUElOMjNfUEFEX0RSSVZFUl9NQVNLIFdMQU5fR1BJT19QSU4yM19QQURfRFJJVkVSX01BU0sKLSNkZWZpbmUgR1BJT19QSU4yM19QQURfRFJJVkVSX0dFVCh4KSBXTEFOX0dQSU9fUElOMjNfUEFEX0RSSVZFUl9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4yM19QQURfRFJJVkVSX1NFVCh4KSBXTEFOX0dQSU9fUElOMjNfUEFEX0RSSVZFUl9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4yM19TT1VSQ0VfTVNCIFdMQU5fR1BJT19QSU4yM19TT1VSQ0VfTVNCCi0jZGVmaW5lIEdQSU9fUElOMjNfU09VUkNFX0xTQiBXTEFOX0dQSU9fUElOMjNfU09VUkNFX0xTQgotI2RlZmluZSBHUElPX1BJTjIzX1NPVVJDRV9NQVNLIFdMQU5fR1BJT19QSU4yM19TT1VSQ0VfTUFTSwotI2RlZmluZSBHUElPX1BJTjIzX1NPVVJDRV9HRVQoeCkgV0xBTl9HUElPX1BJTjIzX1NPVVJDRV9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4yM19TT1VSQ0VfU0VUKHgpIFdMQU5fR1BJT19QSU4yM19TT1VSQ0VfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMjRfQUREUkVTUyBXTEFOX0dQSU9fUElOMjRfQUREUkVTUwotI2RlZmluZSBHUElPX1BJTjI0X09GRlNFVCBXTEFOX0dQSU9fUElOMjRfT0ZGU0VUCi0jZGVmaW5lIEdQSU9fUElOMjRfQ09ORklHX01TQiBXTEFOX0dQSU9fUElOMjRfQ09ORklHX01TQgotI2RlZmluZSBHUElPX1BJTjI0X0NPTkZJR19MU0IgV0xBTl9HUElPX1BJTjI0X0NPTkZJR19MU0IKLSNkZWZpbmUgR1BJT19QSU4yNF9DT05GSUdfTUFTSyBXTEFOX0dQSU9fUElOMjRfQ09ORklHX01BU0sKLSNkZWZpbmUgR1BJT19QSU4yNF9DT05GSUdfR0VUKHgpIFdMQU5fR1BJT19QSU4yNF9DT05GSUdfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMjRfQ09ORklHX1NFVCh4KSBXTEFOX0dQSU9fUElOMjRfQ09ORklHX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjI0X1dBS0VVUF9FTkFCTEVfTVNCIFdMQU5fR1BJT19QSU4yNF9XQUtFVVBfRU5BQkxFX01TQgotI2RlZmluZSBHUElPX1BJTjI0X1dBS0VVUF9FTkFCTEVfTFNCIFdMQU5fR1BJT19QSU4yNF9XQUtFVVBfRU5BQkxFX0xTQgotI2RlZmluZSBHUElPX1BJTjI0X1dBS0VVUF9FTkFCTEVfTUFTSyBXTEFOX0dQSU9fUElOMjRfV0FLRVVQX0VOQUJMRV9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMjRfV0FLRVVQX0VOQUJMRV9HRVQoeCkgV0xBTl9HUElPX1BJTjI0X1dBS0VVUF9FTkFCTEVfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMjRfV0FLRVVQX0VOQUJMRV9TRVQoeCkgV0xBTl9HUElPX1BJTjI0X1dBS0VVUF9FTkFCTEVfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMjRfSU5UX1RZUEVfTVNCIFdMQU5fR1BJT19QSU4yNF9JTlRfVFlQRV9NU0IKLSNkZWZpbmUgR1BJT19QSU4yNF9JTlRfVFlQRV9MU0IgV0xBTl9HUElPX1BJTjI0X0lOVF9UWVBFX0xTQgotI2RlZmluZSBHUElPX1BJTjI0X0lOVF9UWVBFX01BU0sgV0xBTl9HUElPX1BJTjI0X0lOVF9UWVBFX01BU0sKLSNkZWZpbmUgR1BJT19QSU4yNF9JTlRfVFlQRV9HRVQoeCkgV0xBTl9HUElPX1BJTjI0X0lOVF9UWVBFX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjI0X0lOVF9UWVBFX1NFVCh4KSBXTEFOX0dQSU9fUElOMjRfSU5UX1RZUEVfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMjRfUEFEX0RSSVZFUl9NU0IgV0xBTl9HUElPX1BJTjI0X1BBRF9EUklWRVJfTVNCCi0jZGVmaW5lIEdQSU9fUElOMjRfUEFEX0RSSVZFUl9MU0IgV0xBTl9HUElPX1BJTjI0X1BBRF9EUklWRVJfTFNCCi0jZGVmaW5lIEdQSU9fUElOMjRfUEFEX0RSSVZFUl9NQVNLIFdMQU5fR1BJT19QSU4yNF9QQURfRFJJVkVSX01BU0sKLSNkZWZpbmUgR1BJT19QSU4yNF9QQURfRFJJVkVSX0dFVCh4KSBXTEFOX0dQSU9fUElOMjRfUEFEX0RSSVZFUl9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4yNF9QQURfRFJJVkVSX1NFVCh4KSBXTEFOX0dQSU9fUElOMjRfUEFEX0RSSVZFUl9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4yNF9TT1VSQ0VfTVNCIFdMQU5fR1BJT19QSU4yNF9TT1VSQ0VfTVNCCi0jZGVmaW5lIEdQSU9fUElOMjRfU09VUkNFX0xTQiBXTEFOX0dQSU9fUElOMjRfU09VUkNFX0xTQgotI2RlZmluZSBHUElPX1BJTjI0X1NPVVJDRV9NQVNLIFdMQU5fR1BJT19QSU4yNF9TT1VSQ0VfTUFTSwotI2RlZmluZSBHUElPX1BJTjI0X1NPVVJDRV9HRVQoeCkgV0xBTl9HUElPX1BJTjI0X1NPVVJDRV9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4yNF9TT1VSQ0VfU0VUKHgpIFdMQU5fR1BJT19QSU4yNF9TT1VSQ0VfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMjVfQUREUkVTUyBXTEFOX0dQSU9fUElOMjVfQUREUkVTUwotI2RlZmluZSBHUElPX1BJTjI1X09GRlNFVCBXTEFOX0dQSU9fUElOMjVfT0ZGU0VUCi0jZGVmaW5lIEdQSU9fUElOMjVfQ09ORklHX01TQiBXTEFOX0dQSU9fUElOMjVfQ09ORklHX01TQgotI2RlZmluZSBHUElPX1BJTjI1X0NPTkZJR19MU0IgV0xBTl9HUElPX1BJTjI1X0NPTkZJR19MU0IKLSNkZWZpbmUgR1BJT19QSU4yNV9DT05GSUdfTUFTSyBXTEFOX0dQSU9fUElOMjVfQ09ORklHX01BU0sKLSNkZWZpbmUgR1BJT19QSU4yNV9DT05GSUdfR0VUKHgpIFdMQU5fR1BJT19QSU4yNV9DT05GSUdfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMjVfQ09ORklHX1NFVCh4KSBXTEFOX0dQSU9fUElOMjVfQ09ORklHX1NFVCh4KQotI2RlZmluZSBHUElPX1BJTjI1X1dBS0VVUF9FTkFCTEVfTVNCIFdMQU5fR1BJT19QSU4yNV9XQUtFVVBfRU5BQkxFX01TQgotI2RlZmluZSBHUElPX1BJTjI1X1dBS0VVUF9FTkFCTEVfTFNCIFdMQU5fR1BJT19QSU4yNV9XQUtFVVBfRU5BQkxFX0xTQgotI2RlZmluZSBHUElPX1BJTjI1X1dBS0VVUF9FTkFCTEVfTUFTSyBXTEFOX0dQSU9fUElOMjVfV0FLRVVQX0VOQUJMRV9NQVNLCi0jZGVmaW5lIEdQSU9fUElOMjVfV0FLRVVQX0VOQUJMRV9HRVQoeCkgV0xBTl9HUElPX1BJTjI1X1dBS0VVUF9FTkFCTEVfR0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMjVfV0FLRVVQX0VOQUJMRV9TRVQoeCkgV0xBTl9HUElPX1BJTjI1X1dBS0VVUF9FTkFCTEVfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMjVfSU5UX1RZUEVfTVNCIFdMQU5fR1BJT19QSU4yNV9JTlRfVFlQRV9NU0IKLSNkZWZpbmUgR1BJT19QSU4yNV9JTlRfVFlQRV9MU0IgV0xBTl9HUElPX1BJTjI1X0lOVF9UWVBFX0xTQgotI2RlZmluZSBHUElPX1BJTjI1X0lOVF9UWVBFX01BU0sgV0xBTl9HUElPX1BJTjI1X0lOVF9UWVBFX01BU0sKLSNkZWZpbmUgR1BJT19QSU4yNV9JTlRfVFlQRV9HRVQoeCkgV0xBTl9HUElPX1BJTjI1X0lOVF9UWVBFX0dFVCh4KQotI2RlZmluZSBHUElPX1BJTjI1X0lOVF9UWVBFX1NFVCh4KSBXTEFOX0dQSU9fUElOMjVfSU5UX1RZUEVfU0VUKHgpCi0jZGVmaW5lIEdQSU9fUElOMjVfUEFEX0RSSVZFUl9NU0IgV0xBTl9HUElPX1BJTjI1X1BBRF9EUklWRVJfTVNCCi0jZGVmaW5lIEdQSU9fUElOMjVfUEFEX0RSSVZFUl9MU0IgV0xBTl9HUElPX1BJTjI1X1BBRF9EUklWRVJfTFNCCi0jZGVmaW5lIEdQSU9fUElOMjVfUEFEX0RSSVZFUl9NQVNLIFdMQU5fR1BJT19QSU4yNV9QQURfRFJJVkVSX01BU0sKLSNkZWZpbmUgR1BJT19QSU4yNV9QQURfRFJJVkVSX0dFVCh4KSBXTEFOX0dQSU9fUElOMjVfUEFEX0RSSVZFUl9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4yNV9QQURfRFJJVkVSX1NFVCh4KSBXTEFOX0dQSU9fUElOMjVfUEFEX0RSSVZFUl9TRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4yNV9TT1VSQ0VfTVNCIFdMQU5fR1BJT19QSU4yNV9TT1VSQ0VfTVNCCi0jZGVmaW5lIEdQSU9fUElOMjVfU09VUkNFX0xTQiBXTEFOX0dQSU9fUElOMjVfU09VUkNFX0xTQgotI2RlZmluZSBHUElPX1BJTjI1X1NPVVJDRV9NQVNLIFdMQU5fR1BJT19QSU4yNV9TT1VSQ0VfTUFTSwotI2RlZmluZSBHUElPX1BJTjI1X1NPVVJDRV9HRVQoeCkgV0xBTl9HUElPX1BJTjI1X1NPVVJDRV9HRVQoeCkKLSNkZWZpbmUgR1BJT19QSU4yNV9TT1VSQ0VfU0VUKHgpIFdMQU5fR1BJT19QSU4yNV9TT1VSQ0VfU0VUKHgpCi0jZGVmaW5lIFNJR01BX0RFTFRBX0FERFJFU1MgV0xBTl9TSUdNQV9ERUxUQV9BRERSRVNTCi0jZGVmaW5lIFNJR01BX0RFTFRBX09GRlNFVCBXTEFOX1NJR01BX0RFTFRBX09GRlNFVAotI2RlZmluZSBTSUdNQV9ERUxUQV9FTkFCTEVfTVNCIFdMQU5fU0lHTUFfREVMVEFfRU5BQkxFX01TQgotI2RlZmluZSBTSUdNQV9ERUxUQV9FTkFCTEVfTFNCIFdMQU5fU0lHTUFfREVMVEFfRU5BQkxFX0xTQgotI2RlZmluZSBTSUdNQV9ERUxUQV9FTkFCTEVfTUFTSyBXTEFOX1NJR01BX0RFTFRBX0VOQUJMRV9NQVNLCi0jZGVmaW5lIFNJR01BX0RFTFRBX0VOQUJMRV9HRVQoeCkgV0xBTl9TSUdNQV9ERUxUQV9FTkFCTEVfR0VUKHgpCi0jZGVmaW5lIFNJR01BX0RFTFRBX0VOQUJMRV9TRVQoeCkgV0xBTl9TSUdNQV9ERUxUQV9FTkFCTEVfU0VUKHgpCi0jZGVmaW5lIFNJR01BX0RFTFRBX1BSRVNDQUxBUl9NU0IgV0xBTl9TSUdNQV9ERUxUQV9QUkVTQ0FMQVJfTVNCCi0jZGVmaW5lIFNJR01BX0RFTFRBX1BSRVNDQUxBUl9MU0IgV0xBTl9TSUdNQV9ERUxUQV9QUkVTQ0FMQVJfTFNCCi0jZGVmaW5lIFNJR01BX0RFTFRBX1BSRVNDQUxBUl9NQVNLIFdMQU5fU0lHTUFfREVMVEFfUFJFU0NBTEFSX01BU0sKLSNkZWZpbmUgU0lHTUFfREVMVEFfUFJFU0NBTEFSX0dFVCh4KSBXTEFOX1NJR01BX0RFTFRBX1BSRVNDQUxBUl9HRVQoeCkKLSNkZWZpbmUgU0lHTUFfREVMVEFfUFJFU0NBTEFSX1NFVCh4KSBXTEFOX1NJR01BX0RFTFRBX1BSRVNDQUxBUl9TRVQoeCkKLSNkZWZpbmUgU0lHTUFfREVMVEFfVEFSR0VUX01TQiBXTEFOX1NJR01BX0RFTFRBX1RBUkdFVF9NU0IKLSNkZWZpbmUgU0lHTUFfREVMVEFfVEFSR0VUX0xTQiBXTEFOX1NJR01BX0RFTFRBX1RBUkdFVF9MU0IKLSNkZWZpbmUgU0lHTUFfREVMVEFfVEFSR0VUX01BU0sgV0xBTl9TSUdNQV9ERUxUQV9UQVJHRVRfTUFTSwotI2RlZmluZSBTSUdNQV9ERUxUQV9UQVJHRVRfR0VUKHgpIFdMQU5fU0lHTUFfREVMVEFfVEFSR0VUX0dFVCh4KQotI2RlZmluZSBTSUdNQV9ERUxUQV9UQVJHRVRfU0VUKHgpIFdMQU5fU0lHTUFfREVMVEFfVEFSR0VUX1NFVCh4KQotI2RlZmluZSBERUJVR19DT05UUk9MX0FERFJFU1MgV0xBTl9ERUJVR19DT05UUk9MX0FERFJFU1MKLSNkZWZpbmUgREVCVUdfQ09OVFJPTF9PRkZTRVQgV0xBTl9ERUJVR19DT05UUk9MX09GRlNFVAotI2RlZmluZSBERUJVR19DT05UUk9MX0VOQUJMRV9NU0IgV0xBTl9ERUJVR19DT05UUk9MX0VOQUJMRV9NU0IKLSNkZWZpbmUgREVCVUdfQ09OVFJPTF9FTkFCTEVfTFNCIFdMQU5fREVCVUdfQ09OVFJPTF9FTkFCTEVfTFNCCi0jZGVmaW5lIERFQlVHX0NPTlRST0xfRU5BQkxFX01BU0sgV0xBTl9ERUJVR19DT05UUk9MX0VOQUJMRV9NQVNLCi0jZGVmaW5lIERFQlVHX0NPTlRST0xfRU5BQkxFX0dFVCh4KSBXTEFOX0RFQlVHX0NPTlRST0xfRU5BQkxFX0dFVCh4KQotI2RlZmluZSBERUJVR19DT05UUk9MX0VOQUJMRV9TRVQoeCkgV0xBTl9ERUJVR19DT05UUk9MX0VOQUJMRV9TRVQoeCkKLSNkZWZpbmUgREVCVUdfSU5QVVRfU0VMX0FERFJFU1MgV0xBTl9ERUJVR19JTlBVVF9TRUxfQUREUkVTUwotI2RlZmluZSBERUJVR19JTlBVVF9TRUxfT0ZGU0VUIFdMQU5fREVCVUdfSU5QVVRfU0VMX09GRlNFVAotI2RlZmluZSBERUJVR19JTlBVVF9TRUxfU0hJRlRfTVNCIFdMQU5fREVCVUdfSU5QVVRfU0VMX1NISUZUX01TQgotI2RlZmluZSBERUJVR19JTlBVVF9TRUxfU0hJRlRfTFNCIFdMQU5fREVCVUdfSU5QVVRfU0VMX1NISUZUX0xTQgotI2RlZmluZSBERUJVR19JTlBVVF9TRUxfU0hJRlRfTUFTSyBXTEFOX0RFQlVHX0lOUFVUX1NFTF9TSElGVF9NQVNLCi0jZGVmaW5lIERFQlVHX0lOUFVUX1NFTF9TSElGVF9HRVQoeCkgV0xBTl9ERUJVR19JTlBVVF9TRUxfU0hJRlRfR0VUKHgpCi0jZGVmaW5lIERFQlVHX0lOUFVUX1NFTF9TSElGVF9TRVQoeCkgV0xBTl9ERUJVR19JTlBVVF9TRUxfU0hJRlRfU0VUKHgpCi0jZGVmaW5lIERFQlVHX0lOUFVUX1NFTF9TUkNfTVNCIFdMQU5fREVCVUdfSU5QVVRfU0VMX1NSQ19NU0IKLSNkZWZpbmUgREVCVUdfSU5QVVRfU0VMX1NSQ19MU0IgV0xBTl9ERUJVR19JTlBVVF9TRUxfU1JDX0xTQgotI2RlZmluZSBERUJVR19JTlBVVF9TRUxfU1JDX01BU0sgV0xBTl9ERUJVR19JTlBVVF9TRUxfU1JDX01BU0sKLSNkZWZpbmUgREVCVUdfSU5QVVRfU0VMX1NSQ19HRVQoeCkgV0xBTl9ERUJVR19JTlBVVF9TRUxfU1JDX0dFVCh4KQotI2RlZmluZSBERUJVR19JTlBVVF9TRUxfU1JDX1NFVCh4KSBXTEFOX0RFQlVHX0lOUFVUX1NFTF9TUkNfU0VUKHgpCi0jZGVmaW5lIERFQlVHX09VVF9BRERSRVNTIFdMQU5fREVCVUdfT1VUX0FERFJFU1MKLSNkZWZpbmUgREVCVUdfT1VUX09GRlNFVCBXTEFOX0RFQlVHX09VVF9PRkZTRVQKLSNkZWZpbmUgREVCVUdfT1VUX0RBVEFfTVNCIFdMQU5fREVCVUdfT1VUX0RBVEFfTVNCCi0jZGVmaW5lIERFQlVHX09VVF9EQVRBX0xTQiBXTEFOX0RFQlVHX09VVF9EQVRBX0xTQgotI2RlZmluZSBERUJVR19PVVRfREFUQV9NQVNLIFdMQU5fREVCVUdfT1VUX0RBVEFfTUFTSwotI2RlZmluZSBERUJVR19PVVRfREFUQV9HRVQoeCkgV0xBTl9ERUJVR19PVVRfREFUQV9HRVQoeCkKLSNkZWZpbmUgREVCVUdfT1VUX0RBVEFfU0VUKHgpIFdMQU5fREVCVUdfT1VUX0RBVEFfU0VUKHgpCi0jZGVmaW5lIFJFU0VUX1RVUExFX1NUQVRVU19BRERSRVNTIFdMQU5fUkVTRVRfVFVQTEVfU1RBVFVTX0FERFJFU1MKLSNkZWZpbmUgUkVTRVRfVFVQTEVfU1RBVFVTX09GRlNFVCBXTEFOX1JFU0VUX1RVUExFX1NUQVRVU19PRkZTRVQKLSNkZWZpbmUgUkVTRVRfVFVQTEVfU1RBVFVTX1RFU1RfUkVTRVRfVFVQTEVfTVNCIFdMQU5fUkVTRVRfVFVQTEVfU1RBVFVTX1RFU1RfUkVTRVRfVFVQTEVfTVNCCi0jZGVmaW5lIFJFU0VUX1RVUExFX1NUQVRVU19URVNUX1JFU0VUX1RVUExFX0xTQiBXTEFOX1JFU0VUX1RVUExFX1NUQVRVU19URVNUX1JFU0VUX1RVUExFX0xTQgotI2RlZmluZSBSRVNFVF9UVVBMRV9TVEFUVVNfVEVTVF9SRVNFVF9UVVBMRV9NQVNLIFdMQU5fUkVTRVRfVFVQTEVfU1RBVFVTX1RFU1RfUkVTRVRfVFVQTEVfTUFTSwotI2RlZmluZSBSRVNFVF9UVVBMRV9TVEFUVVNfVEVTVF9SRVNFVF9UVVBMRV9HRVQoeCkgV0xBTl9SRVNFVF9UVVBMRV9TVEFUVVNfVEVTVF9SRVNFVF9UVVBMRV9HRVQoeCkKLSNkZWZpbmUgUkVTRVRfVFVQTEVfU1RBVFVTX1RFU1RfUkVTRVRfVFVQTEVfU0VUKHgpIFdMQU5fUkVTRVRfVFVQTEVfU1RBVFVTX1RFU1RfUkVTRVRfVFVQTEVfU0VUKHgpCi0jZGVmaW5lIFJFU0VUX1RVUExFX1NUQVRVU19QSU5fUkVTRVRfVFVQTEVfTVNCIFdMQU5fUkVTRVRfVFVQTEVfU1RBVFVTX1BJTl9SRVNFVF9UVVBMRV9NU0IKLSNkZWZpbmUgUkVTRVRfVFVQTEVfU1RBVFVTX1BJTl9SRVNFVF9UVVBMRV9MU0IgV0xBTl9SRVNFVF9UVVBMRV9TVEFUVVNfUElOX1JFU0VUX1RVUExFX0xTQgotI2RlZmluZSBSRVNFVF9UVVBMRV9TVEFUVVNfUElOX1JFU0VUX1RVUExFX01BU0sgV0xBTl9SRVNFVF9UVVBMRV9TVEFUVVNfUElOX1JFU0VUX1RVUExFX01BU0sKLSNkZWZpbmUgUkVTRVRfVFVQTEVfU1RBVFVTX1BJTl9SRVNFVF9UVVBMRV9HRVQoeCkgV0xBTl9SRVNFVF9UVVBMRV9TVEFUVVNfUElOX1JFU0VUX1RVUExFX0dFVCh4KQotI2RlZmluZSBSRVNFVF9UVVBMRV9TVEFUVVNfUElOX1JFU0VUX1RVUExFX1NFVCh4KSBXTEFOX1JFU0VUX1RVUExFX1NUQVRVU19QSU5fUkVTRVRfVFVQTEVfU0VUKHgpCi0KLQotI2VuZGlmCi0jZW5kaWYKLQotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3NC4wL2h3L21hY19kbWFfcmVnLmggYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzQuMC9ody9tYWNfZG1hX3JlZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODJmODA5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3NC4wL2h3L21hY19kbWFfcmVnLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MDUgKzAsMCBAQAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KLS8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyAKLS8vCi0vLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLS8vIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0vLwotLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0vLyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0vLyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgotLy8gQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotLy8gV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0vLyBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgotLy8gT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLS8vCi0vLwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIEF1dGhvcihzKTogPSJBdGhlcm9zIgotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogQVI2MDAzIFdMQU4gTUFDIERNQSByZWdpc3RlciBkZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIF9BUjYwMDBfRE1BUkVHX0hfCi0jZGVmaW5lIF9BUjYwMDBfRE1BUkVHX0hfCi0KLS8qCi0gKiBEZWZpbml0aW9ucyBmb3IgdGhlIEF0aGVyb3MgQVI2MDAzIGNoaXBzZXQuCi0gKi8KLQotLyogRE1BIENvbnRyb2wgYW5kIEludGVycnVwdCBSZWdpc3RlcnMgKi8KLSNkZWZpbmUgTUFDX0RNQV9DUl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4IC8qIE1BQyBjb250cm9sIHJlZ2lzdGVyICovCi0jZGVmaW5lIE1BQ19ETUFfQ1JfUlhFX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNCAvKiBSZWNlaXZlIGVuYWJsZSAqLwotI2RlZmluZSBNQUNfRE1BX0NSX1JYRF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAgLyogUmVjZWl2ZSBkaXNhYmxlICovCi0jZGVmaW5lIE1BQ19ETUFfQ1JfU1dJX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MCAvKiBPbmUtc2hvdCBzb2Z0d2FyZSBpbnRlcnJ1cHQgKi8KLQotI2RlZmluZSBNQUNfRE1BX1JYRFBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMgLyogTUFDIHJlY2VpdmUgcXVldWUgZGVzY3JpcHRvciBwb2ludGVyICovCi0KLSNkZWZpbmUgTUFDX0RNQV9DRkdfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE0IC8qIE1BQyBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgTUFDX0RNQV9DRkdfU1dURF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIGJ5dGVzd2FwIHR4IGRlc2NyaXB0b3Igd29yZHMgKi8KLSNkZWZpbmUgTUFDX0RNQV9DRkdfU1dUQl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIGJ5dGVzd2FwIHR4IGRhdGEgYnVmZmVyIHdvcmRzICovCi0jZGVmaW5lIE1BQ19ETUFfQ0ZHX1NXUkRfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNCAvKiBieXRlc3dhcCByeCBkZXNjcmlwdG9yIHdvcmRzICovCi0jZGVmaW5lIE1BQ19ETUFfQ0ZHX1NXUkJfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOCAvKiBieXRlc3dhcCByeCBkYXRhIGJ1ZmZlciB3b3JkcyAqLwotI2RlZmluZSBNQUNfRE1BX0NGR19TV1JHX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAgLyogYnl0ZXN3YXAgcmVnaXN0ZXIgYWNjZXNzIGRhdGEgd29yZHMgKi8KLSNkZWZpbmUgTUFDX0RNQV9DRkdfQVBfQURIT0NfSU5ESUNBVElPTl9NQVNLICAgICAweDAwMDAwMDIwIC8qIEFQL2FkaG9jIGluZGljYXRpb24gKDAtQVAsIDEtQWRob2MpICovCi0jZGVmaW5lIE1BQ19ETUFfQ0ZHX1BIT0tfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMCAvKiBQSFkgT0sgc3RhdHVzICovCi0jZGVmaW5lIE1BQ19ETUFfQ0ZHX0NMS19HQVRFX0RJU19NQVNLICAgICAgICAgICAgMHgwMDAwMDQwMCAvKiBDbG9jayBnYXRpbmcgZGlzYWJsZSAgKi8KLQotI2RlZmluZSBNQUNfRE1BX01JUlRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAgLyogTWF4aW11bSByYXRlIHRocmVzaG9sZCByZWdpc3RlciAqLwotI2RlZmluZSBNQUNfRE1BX01JUlRfVEhSRVNIX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYgCi0KLSNkZWZpbmUgTUFDX0RNQV9JRVJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0ICAvKiBNQUMgSW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciAqLwotI2RlZmluZSBNQUNfRE1BX0lFUl9FTkFCTEVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgLyogR2xvYmFsIGludGVycnVwdCBlbmFibGUgKi8KLSNkZWZpbmUgTUFDX0RNQV9JRVJfRElTQUJMRV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIEdsb2JhbCBpbnRlcnJ1cHQgZGlzYWJsZSAqLwotCi0jZGVmaW5lIE1BQ19ETUFfVElNVF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOCAvKiBUcmFuc21pdCBJbnRlcnJ1cHQgTWl0aWdhdGlvbiBUaHJlc2hvbGQgKi8KLSNkZWZpbmUgTUFDX0RNQV9USU1UX0xBU1RfUEFDS0VSX1RIUkVTSF9NQVNLICAgICAweDAwMDBGRkZGIC8qIExhc3QgcGFja2V0IHRocmVzaG9sZCBtYXNrICovCi0jZGVmaW5lIE1BQ19ETUFfVElNVF9GSVJTVF9QQUNLRVJfVEhSRVNIX01BU0sgICAgMHhGRkZGMDAwMCAvKiBGaXJzdCBwYWNrZXQgdGhyZXNob2xkIG1hc2sgKi8KLQotI2RlZmluZSBNQUNfRE1BX1JJTVRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkMgLyogUmVjZWl2ZSBJbnRlcnJ1cHQgTWl0aWdhdGlvbiBUaHJlc2hvbGQgKi8KLSNkZWZpbmUgTUFDX0RNQV9SSU1UX0xBU1RfUEFDS0VSX1RIUkVTSF9NQVNLICAgICAweDAwMDBGRkZGIC8qIExhc3QgcGFja2V0IHRocmVzaG9sZCBtYXNrICovCi0jZGVmaW5lIE1BQ19ETUFfUklNVF9GSVJTVF9QQUNLRVJfVEhSRVNIX01BU0sgICAgMHhGRkZGMDAwMCAvKiBGaXJzdCBwYWNrZXQgdGhyZXNob2xkIG1hc2sgKi8KLQotI2RlZmluZSBNQUNfRE1BX1RYQ0ZHX0FERFJFU1MgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAgIC8qIE1BQyB0eCBETUEgc2l6ZSBjb25maWcgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgTUFDX0RNQV9GVFJJR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM0YwIC8qIE1hc2sgZm9yIEZyYW1lIHRyaWdnZXIgbGV2ZWwgKi8KLSNkZWZpbmUgTUFDX0RNQV9GVFJJR19MU0IgICAgICAgICAgICAgICAgICAgICAgICA0ICAgICAgICAgIC8qIFNoaWZ0IGZvciBGcmFtZSB0cmlnZ2VyIGxldmVsICovCi0jZGVmaW5lIE1BQ19ETUFfRlRSSUdfSU1NRUQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBieXRlcyBpbiBQQ1UgVFggRklGTyBiZWZvcmUgYWlyICovCi0jZGVmaW5lIE1BQ19ETUFfRlRSSUdfNjRCICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMCAvKiBkZWZhdWx0ICovCi0jZGVmaW5lIE1BQ19ETUFfRlRSSUdfMTI4QiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBNQUNfRE1BX0ZUUklHXzE5MkIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKLSNkZWZpbmUgTUFDX0RNQV9GVFJJR18yNTZCICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwIC8qIDUgYml0cyB0b3RhbCAqLwotI2RlZmluZSBNQUNfRE1BX1RYQ0ZHX0FESE9DX0JFQUNPTl9BVElNX1RYX1BPTElDWV9NQVNLIDB4MDAwMDA4MDAKLQotI2RlZmluZSBNQUNfRE1BX1JYQ0ZHX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0ICAvKiBNQUMgcnggRE1BIHNpemUgY29uZmlnIHJlZ2lzdGVyICovCi0jZGVmaW5lIE1BQ19ETUFfUlhDRkdfWkxGRE1BX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAgLyogRW5hYmxlIERNQSBvZiB6ZXJvLWxlbmd0aCBmcmFtZSAqLwotI2RlZmluZSBNQUNfRE1BX1JYQ0ZHX0RNQVNJWkVfNEIgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIERNQSBzaXplIDQgYnl0ZXMgKFRYQ0ZHICsgUlhDRkcpICovCi0jZGVmaW5lIE1BQ19ETUFfUlhDRkdfRE1BU0laRV84QiAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgLyogRE1BIHNpemUgOCBieXRlcyAqLwotI2RlZmluZSBNQUNfRE1BX1JYQ0ZHX0RNQVNJWkVfMTZCICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIERNQSBzaXplIDE2IGJ5dGVzICovCi0jZGVmaW5lIE1BQ19ETUFfUlhDRkdfRE1BU0laRV8zMkIgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMgLyogRE1BIHNpemUgMzIgYnl0ZXMgKi8KLSNkZWZpbmUgTUFDX0RNQV9SWENGR19ETUFTSVpFXzY0QiAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNCAvKiBETUEgc2l6ZSA2NCBieXRlcyAqLwotI2RlZmluZSBNQUNfRE1BX1JYQ0ZHX0RNQVNJWkVfMTI4QiAgICAgICAgICAgICAgICAweDAwMDAwMDA1IC8qIERNQSBzaXplIDEyOCBieXRlcyAqLwotI2RlZmluZSBNQUNfRE1BX1JYQ0ZHX0RNQVNJWkVfMjU2QiAgICAgICAgICAgICAgICAweDAwMDAwMDA2IC8qIERNQSBzaXplIDI1NiBieXRlcyAqLwotI2RlZmluZSBNQUNfRE1BX1JYQ0ZHX0RNQVNJWkVfNTEyQiAgICAgICAgICAgICAgICAweDAwMDAwMDA3IC8qIERNQSBzaXplIDUxMiBieXRlcyAqLwotCi0jZGVmaW5lIE1BQ19ETUFfTUlCQ19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAgIC8qIE1BQyBNSUIgY29udHJvbCByZWdpc3RlciAqLwotI2RlZmluZSBNQUNfRE1BX01JQkNfQ09XX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIGNvdW50ZXIgb3ZlcmZsb3cgd2FybmluZyAqLwotI2RlZmluZSBNQUNfRE1BX01JQkNfRk1DX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIGZyZWV6ZSBNSUIgY291bnRlcnMgKi8KLSNkZWZpbmUgTUFDX0RNQV9NSUJDX0NNQ19NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNCAvKiBjbGVhciBNSUIgY291bnRlcnMgKi8KLSNkZWZpbmUgTUFDX0RNQV9NSUJDX01DU19NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOCAvKiBNSUIgY291bnRlciBzdHJvYmUsIGluY3JlbWVudCBhbGwgKi8KLQotI2RlZmluZSBNQUNfRE1BX1RPUFNfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ0ICAvKiBNQUMgdGltZW91dCBwcmVzY2FsZSBjb3VudCAqLwotI2RlZmluZSBNQUNfRE1BX1RPUFNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGIC8qIE1hc2sgZm9yIHRpbWVvdXQgcHJlc2NhbGUgKi8KLQotI2RlZmluZSBNQUNfRE1BX1JYTlBUT19BRERSRVNTICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ4ICAvKiBNQUMgbm8gZnJhbWUgcmVjZWl2ZWQgdGltZW91dCAqLwotI2RlZmluZSBNQUNfRE1BX1JYTlBUT19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM0ZGIC8qIE1hc2sgZm9yIG5vIGZyYW1lIHJlY2VpdmVkIHRpbWVvdXQgKi8KLQotI2RlZmluZSBNQUNfRE1BX1RYTlBUT19BRERSRVNTICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDRDICAvKiBNQUMgbm8gZnJhbWUgdHJhc21pdHRlZCB0aW1lb3V0ICovCi0jZGVmaW5lIE1BQ19ETUFfVFhOUFRPX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzRkYgLyogTWFzayBmb3Igbm8gZnJhbWUgdHJhbnNtaXR0ZWQgdGltZW91dCAqLwotI2RlZmluZSBNQUNfRE1BX1RYTlBUT19RQ1VfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMEZGQzAwIC8qIE1hc2sgaW5kaWNhdGluZyB0aGUgc2V0IG9mIFFDVXMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3Igd2hpY2ggZnJhbWUgY29tcGxldGlvbnMgd2lsbCBjYXVzZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGEgcmVzZXQgb2YgdGhlIG5vIGZyYW1lIHhtaXQnZCB0aW1lb3V0ICovCi0KLSNkZWZpbmUgTUFDX0RNQV9SUEdUT19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MCAgLyogTUFDIHJlY2VpdmUgZnJhbWUgZ2FwIHRpbWVvdXQgKi8KLSNkZWZpbmUgTUFDX0RNQV9SUEdUT19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDNGRiAvKiBNYXNrIGZvciByZWNlaXZlIGZyYW1lIGdhcCB0aW1lb3V0ICovCi0KLSNkZWZpbmUgTUFDX0RNQV9SUENOVF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1NCAgLyogTUFDIHJlY2VpdmUgZnJhbWUgY291bnQgbGltaXQgKi8KLSNkZWZpbmUgTUFDX0RNQV9SUENOVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRiAvKiBNYXNrIGZvciByZWNlaXZlIGZyYW1lIGNvdW50IGxpbWl0ICovCi0KLSNkZWZpbmUgTUFDX0RNQV9NQUNNSVNDX0FERFJFU1MgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1OCAgLyogTUFDIG1pc2NlbGxhbmVvdXMgY29udHJvbC9zdGF0dXMgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgTUFDX0RNQV9NQUNNSVNDX0RNQV9PQlNfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDFFMCAvKiBNYXNrIGZvciBETUEgb2JzZXJ2YXRpb24gYnVzIG11eCBzZWxlY3QgKi8KLSNkZWZpbmUgTUFDX0RNQV9NQUNNSVNDX0RNQV9PQlNfTFNCICAgICAgICAgICAgICAgNSAgICAgICAgICAvKiBTaGlmdCBmb3IgRE1BIG9ic2VydmF0aW9uIGJ1cyBtdXggc2VsZWN0ICovCi0jZGVmaW5lIE1BQ19ETUFfTUFDTUlTQ19NSVNDX09CUyAgICAgICAgICAgICAgICAgIDB4MDAwMDBFMDAgLyogTWFzayBmb3IgTUlTQyBvYnNlcnZhdGlvbiBidXMgbXV4IHNlbGVjdCAqLwotI2RlZmluZSBNQUNfRE1BX01BQ01JU0NfTUlTQ19PQlNfTFNCICAgICAgICAgICAgICA5ICAgICAgICAgIC8qIFNoaWZ0IGZvciBNSVNDIG9ic2VydmF0aW9uIGJ1cyBtdXggc2VsZWN0ICovCi0jZGVmaW5lIE1BQ19ETUFfTUFDTUlTQ19NQUNfT0JTX0JVU19MU0IgICAgICAgICAgIDB4MDAwMDcwMDAgLyogTWFzayBmb3IgTUFDIG9ic2VydmF0aW9uIGJ1cyBtdXggc2VsZWN0IChsc2IpICovCi0jZGVmaW5lIE1BQ19ETUFfTUFDTUlTQ19NQUNfT0JTX0JVU19MU0JfTFNCICAgICAgIDEyICAgICAgICAgLyogU2hpZnQgZm9yIE1BQyBvYnNlcnZhdGlvbiBidXMgbXV4IHNlbGVjdCAobHNiKSAqLwotI2RlZmluZSBNQUNfRE1BX01BQ01JU0NfTUFDX09CU19CVVNfTVNCICAgICAgICAgICAweDAwMDM4MDAwIC8qIE1hc2sgZm9yIE1BQyBvYnNlcnZhdGlvbiBidXMgbXV4IHNlbGVjdCAobXNiKSAqLwotI2RlZmluZSBNQUNfRE1BX01BQ01JU0NfTUFDX09CU19CVVNfTVNCX0xTQiAgICAgICAxNSAgICAgICAgIC8qIFNoaWZ0IGZvciBNQUMgb2JzZXJ2YXRpb24gYnVzIG11eCBzZWxlY3QgKG1zYikgKi8KLQotCi0jZGVmaW5lIE1BQ19ETUFfSVNSX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwICAvKiBNQUMgUHJpbWFyeSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovCi0vKgotICogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcnMKLSAqCi0gKiBPbmx5IHRoZSBiaXRzIGluIHRoZSBJU1JfUCByZWdpc3RlciBhbmQgdGhlIElNUl9QIHJlZ2lzdGVycwotICogY29udHJvbCB3aGV0aGVyIHRoZSBNQUMncyBJTlRBIyBvdXRwdXQgaXMgYXNzZXJ0ZWQuICBUaGUgYml0cyBpbgotICogdGhlIHNlY29uZGFyeSBpbnRlcnJ1cHQgc3RhdHVzL21hc2sgcmVnaXN0ZXJzIGNvbnRyb2wgd2hhdCBiaXRzCi0gKiBhcmUgc2V0IGluIHRoZSBwcmltYXJ5IGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXI7IGhvd2V2ZXIgdGhlCi0gKiBJTVJfUyogcmVnaXN0ZXJzIERPIE5PVCBkZXRlcm1pbmUgd2hldGhlciBJTlRBIyBpcyBhc3NlcnRlZC4KLSAqIFRoYXQgaXMgSU5UQSMgaXMgYXNzZXJ0ZWQgb25seSB3aGVuIHRoZSBsb2dpY2FsIEFORCBvZiBJU1JfUAotICogYW5kIElNUl9QIGlzIG5vbi16ZXJvLiAgVGhlIHNlY29uZGFyeSBpbnRlcnJ1cHQgbWFzay9zdGF0dXMKLSAqIHJlZ2lzdGVycyBhZmZlY3Qgd2hhdCBiaXRzIGFyZSBzZXQgaW4gSVNSX1AgYnV0IHRoZXkgZG8gbm90Ci0gKiBkaXJlY3RseSBhZmZlY3Qgd2hldGhlciBJTlRBIyBpcyBhc3NlcnRlZC4KLSAqLwotI2RlZmluZSBNQUNfRE1BX0lTUl9SWE9LX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgLyogQXQgbGVhc3Qgb25lIGZyYW1lIHJlY2VpdmVkIHNhbnMgZXJyb3JzICovCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1JYREVTQ19NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBSZWNlaXZlIGludGVycnVwdCByZXF1ZXN0ICovCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1JYRVJSX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNCAvKiBSZWNlaXZlIGVycm9yIGludGVycnVwdCAqLwotI2RlZmluZSBNQUNfRE1BX0lTUl9SWE5PUEtUX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDggLyogTm8gZnJhbWUgcmVjZWl2ZWQgd2l0aGluIHRpbWVvdXQgY2xvY2sgKi8KLSNkZWZpbmUgTUFDX0RNQV9JU1JfUlhFT0xfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwIC8qIFJlY2VpdmVkIGRlc2NyaXB0b3IgZW1wdHkgaW50ZXJydXB0ICovCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1JYT1JOX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMCAvKiBSZWNlaXZlIEZJRk8gb3ZlcnJ1biBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgTUFDX0RNQV9JU1JfVFhPS19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwIC8qIFRyYW5zbWl0IG9rYXkgaW50ZXJydXB0ICovCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1RYREVTQ19NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MCAvKiBUcmFuc21pdCBpbnRlcnJ1cHQgcmVxdWVzdCAqLwotI2RlZmluZSBNQUNfRE1BX0lTUl9UWEVSUl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAgLyogVHJhbnNtaXQgZXJyb3IgaW50ZXJydXB0ICovCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1RYTk9QS1RfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMCAvKiBObyBmcmFtZSB0cmFuc21pdHRlZCBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgTUFDX0RNQV9JU1JfVFhFT0xfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwIC8qIFRyYW5zbWl0IGRlc2NyaXB0b3IgZW1wdHkgaW50ZXJydXB0ICovCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1RYVVJOX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMCAvKiBUcmFuc21pdCBGSUZPIHVuZGVycnVuIGludGVycnVwdCAqLwotI2RlZmluZSBNQUNfRE1BX0lTUl9NSUJfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAgLyogTUlCIGludGVycnVwdCAtIHNlZSBNSUJDICovCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1NXSV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMCAvKiBTb2Z0d2FyZSBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgTUFDX0RNQV9JU1JfUlhQSFlfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwIC8qIFBIWSByZWNlaXZlIGVycm9yIGludGVycnVwdCAqLwotI2RlZmluZSBNQUNfRE1BX0lTUl9SWEtDTV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAgLyogS2V5LWNhY2hlIG1pc3MgaW50ZXJydXB0ICovCi0jZGVmaW5lIE1BQ19ETUFfSVNSX0JSU1NJX0hJX01BU0sgICAgICAgICAgICAgICAgMHgwMDAxMDAwMCAvKiBCZWFjb24gcnNzaSBoaWdoIHRocmVzaG9sZCBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgTUFDX0RNQV9JU1JfQlJTU0lfTE9fTUFTSyAgICAgICAgICAgICAgICAweDAwMDIwMDAwIC8qIEJlYWNvbiB0aHJlc2hvbGQgaW50ZXJydXB0ICovCi0jZGVmaW5lIE1BQ19ETUFfSVNSX0JNSVNTX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMCAvKiBCZWFjb24gbWlzc2VkIGludGVycnVwdCAqLwotI2RlZmluZSBNQUNfRE1BX0lTUl9UWE1JTlRSX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAgLyogTWF4aW11bSB0cmFuc21pdCBpbnRlcnJ1cHQgcmF0ZSAqLwotI2RlZmluZSBNQUNfRE1BX0lTUl9CTlJfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAgLyogQmVhY29uIG5vdCByZWFkeSBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgTUFDX0RNQV9JU1JfSElVRVJSX01BU0sgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwIC8qIEFuIHVuZXhwZWN0ZWQgYnVzIGVycm9yIGhhcyBvY2N1cnJlZCAqLwotI2RlZmluZSBNQUNfRE1BX0lTUl9CQ05NSVNDX01BU0sgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAgLyogJ29yJyBvZiBUSU0sIENBQkVORCwgRFRJTVNZTkMsIEJDTlRPICovCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1JYTUlOVFJfTUFTSyAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMCAvKiBNYXhpbXVtIHJlY2VpdmUgaW50ZXJydXB0IHJhdGUgKi8KLSNkZWZpbmUgTUFDX0RNQV9JU1JfUUNCUk9WRl9NQVNLICAgICAgICAgICAgICAgICAweDAyMDAwMDAwIC8qIFFDVSBDQlIgb3ZlcmZsb3cgaW50ZXJydXB0ICovCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1FDQlJVUk5fTUFTSyAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMCAvKiBRQ1UgQ0JSIHVuZGVycnVuIGludGVycnVwdCAqLwotI2RlZmluZSBNQUNfRE1BX0lTUl9RVFJJR19NQVNLICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAgLyogUUNVIHNjaGVkdWxpbmcgdHJpZ2dlciBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgTUFDX0RNQV9JU1JfVElNRVJfTUFTSyAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwIC8qIEdFTlRNUiBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgTUFDX0RNQV9JU1JfSENGVE9fTUFTSyAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwIC8qIEhDRlRPIGludGVycnVwdCAgICovCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1RYSU5UTV9NQVNLICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMCAvKiBUcmFuc21pdCBjb21wbGV0aW9uIG1pdGlnYXRpb24gaW50ZXJydXB0ICovCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1JYSU5UTV9NQVNLICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMCAvKiBSZWNlaXZlIGNvbXBsZXRpb24gbWl0aWdhdGlvbiBpbnRlcnJ1cHQgKi8KLQotI2RlZmluZSBNQUNfRE1BX0lTUl9TMF9BRERSRVNTICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODQgIC8qIE1BQyBTZWNvbmRhcnkgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAwICovCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1MwX1FDVV9UWE9LX01BU0sgICAgICAgICAgICAgMHgwMDAwMDNGRiAvKiBNYXNrIGZvciBUWE9LIChRQ1UgMC05KSAqLwotI2RlZmluZSBNQUNfRE1BX0lTUl9TMF9RQ1VfVFhPS19MU0IgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX0RNQV9JU1JfUzBfUUNVX1RYREVTQ19NQVNLICAgICAgICAgICAweDAzRkYwMDAwIC8qIE1hc2sgZm9yIFRYREVTQyAoUUNVIDAtOSkgKi8KLSNkZWZpbmUgTUFDX0RNQV9JU1JfUzBfUUNVX1RYREVTQ19MU0IgICAgICAgICAgICAxNgotCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1MxX0FERFJFU1MgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4OCAgLyogTUFDIFNlY29uZGFyeSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIDEgKi8KLSNkZWZpbmUgTUFDX0RNQV9JU1JfUzFfUUNVX1RYRVJSX01BU0sgICAgICAgICAgICAweDAwMDAwM0ZGIC8qIE1hc2sgZm9yIFRYRVJSIChRQ1UgMC05KSAqLwotI2RlZmluZSBNQUNfRE1BX0lTUl9TMV9RQ1VfVFhFUlJfTFNCICAgICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX0RNQV9JU1JfUzFfUUNVX1RYRU9MX01BU0sgICAgICAgICAgICAweDAzRkYwMDAwIC8qIE1hc2sgZm9yIFRYRU9MIChRQ1UgMC05KSAqLwotI2RlZmluZSBNQUNfRE1BX0lTUl9TMV9RQ1VfVFhFT0xfTFNCICAgICAgICAgICAgIDE2Ci0KLSNkZWZpbmUgTUFDX0RNQV9JU1JfUzJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDhjICAvKiBNQUMgU2Vjb25kYXJ5IGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgMiAqLwotI2RlZmluZSBNQUNfRE1BX0lTUl9TMl9RQ1VfVFhVUk5fTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDAzRkYgLyogTWFzayBmb3IgVFhVUk4gKFFDVSAwLTkpICovCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1MyX1FDVV9UWFVSTl9MU0IgICAgICAgICAgICAgICAgMCAvKiBTaGlmdCBmb3IgVFhVUk4gKFFDVSAwLTkpICovCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1MyX1JYX0lOVF9NQVNLCQkJICAgICAgICAweDAwMDAwODAwCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1MyX1dMX1NUT01QRURfTUFTSwkJICAgICAgICAweDAwMDAxMDAwCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1MyX1JYX1BUUl9CQURfTUFTSwkJICAgICAgICAweDAwMDAyMDAwCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1MyX0JUX0xPV19QUklPUklUWV9SSVNJTkdfTUFTSyAgMHgwMDAwNDAwMAotI2RlZmluZSBNQUNfRE1BX0lTUl9TMl9CVF9MT1dfUFJJT1JJVFlfRkFMTElOR19NQVNLCTB4MDAwMDgwMDAKLSNkZWZpbmUgTUFDX0RNQV9JU1JfUzJfQkJfUEFOSUNfSVJRX01BU0sgICAgICAgICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1MyX0JUX1NUT01QRURfTUFTSwkJICAgICAgICAweDAwMDIwMDAwCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1MyX0JUX0FDVElWRV9SSVNJTkdfTUFTSwkgICAgMHgwMDA0MDAwMAotI2RlZmluZSBNQUNfRE1BX0lTUl9TMl9CVF9BQ1RJVkVfRkFMTElOR19NQVNLCSAgICAweDAwMDgwMDAwCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1MyX0JUX1BSSU9SSVRZX1JJU0lOR19NQVNLCSAgICAweDAwMTAwMDAwCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1MyX0JUX1BSSU9SSVRZX0ZBTExJTkdfTUFTSwkgICAgMHgwMDIwMDAwMAotI2RlZmluZSBNQUNfRE1BX0lTUl9TMl9DU1RfTUFTSwkJCSAgICAgICAgICAgIDB4MDA0MDAwMDAKLSNkZWZpbmUgTUFDX0RNQV9JU1JfUzJfR1RUX01BU0sJCQkgICAgICAgICAgICAweDAwODAwMDAwCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1MyX1RJTV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMCAvKiBUSU0gKi8KLSNkZWZpbmUgTUFDX0RNQV9JU1JfUzJfQ0FCRU5EX01BU0sgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwIC8qIENBQkVORCAqLwotI2RlZmluZSBNQUNfRE1BX0lTUl9TMl9EVElNU1lOQ19NQVNLICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAgLyogRFRJTVNZTkMgKi8KLSNkZWZpbmUgTUFDX0RNQV9JU1JfUzJfQkNOVE9fTUFTSyAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwIC8qIEJDTlRPICovCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1MyX0NBQlRPX01BU0sgICAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMCAvKiBDQUJUTyAqLwotI2RlZmluZSBNQUNfRE1BX0lTUl9TMl9EVElNX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAgLyogRFRJTSAqLwotI2RlZmluZSBNQUNfRE1BX0lTUl9TMl9UU0ZPT1JfTUFTSyAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAgLyogVFNGT09SICovCi0KLSNkZWZpbmUgTUFDX0RNQV9JU1JfUzNfQUREUkVTUyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDkwICAvKiBNQUMgU2Vjb25kYXJ5IGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgMyAqLwotI2RlZmluZSBNQUNfRE1BX0lTUl9TM19RQ1VfUUNCUk9WRl9NQVNLICAgICAgICAgIDB4MDAwMDAzRkYgLyogTWFzayBmb3IgUUNCUk9WRiAoUUNVIDAtOSkgKi8KLSNkZWZpbmUgTUFDX0RNQV9JU1JfUzNfUUNVX1FDQlJVUk5fTUFTSyAgICAgICAgICAweDAzRkYwMDAwIC8qIE1hc2sgZm9yIFFDQlJVUk4gKFFDVSAwLTkpICovCi0KLSNkZWZpbmUgTUFDX0RNQV9JU1JfUzRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDk0ICAvKiBNQUMgU2Vjb25kYXJ5IGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgNCAqLwotI2RlZmluZSBNQUNfRE1BX0lTUl9TNF9RQ1VfUVRSSUdfTUFTSyAgICAgICAgICAgIDB4MDAwMDAzRkYgLyogTWFzayBmb3IgUVRSSUcgKFFDVSAwLTkpICovCi0KLSNkZWZpbmUgTUFDX0RNQV9JU1JfUzVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDk4ICAvKiBNQUMgU2Vjb25kYXJ5IGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgNSAqLwotI2RlZmluZSBNQUNfRE1BX0lTUl9TNV9UQlRUX1RJTUVSX1RSSUdHRVJfTUFTSyAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgTUFDX0RNQV9JU1JfUzVfREJBX1RJTUVSX1RSSUdHRVJfTUFTSyAgICAweDAwMDAwMDAyCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1M1X1NCQV9USU1FUl9UUklHR0VSX01BU0sgICAgMHgwMDAwMDAwNAotI2RlZmluZSBNQUNfRE1BX0lTUl9TNV9IQ0ZfVElNRVJfVFJJR0dFUl9NQVNLICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgTUFDX0RNQV9JU1JfUzVfVElNX1RJTUVSX1RSSUdHRVJfTUFTSyAgICAweDAwMDAwMDEwCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1M1X0RUSU1fVElNRVJfVFJJR0dFUl9NQVNLICAgMHgwMDAwMDAyMAotI2RlZmluZSBNQUNfRE1BX0lTUl9TNV9RVUlFVF9USU1FUl9UUklHR0VSX01BU0sgIDB4MDAwMDAwNDAKLSNkZWZpbmUgTUFDX0RNQV9JU1JfUzVfTkRQX1RJTUVSX1RSSUdHRVJfTUFTSyAgICAweDAwMDAwMDgwCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1M1X0dFTkVSSUNfVElNRVIyX1RSSUdHRVJfTUFTSyAweDAwMDBGRjAwCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1M1X0dFTkVSSUNfVElNRVIyX1RSSUdHRVJfTFNCIDggCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1M1X0dFTkVSSUNfVElNRVIyX1RSSUdHRVIoX2kpICgweDAwMDAwMTAwIDw8IChfaSkpCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1M1X1RJTUVSX09WRVJGTE9XX01BU0sgICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBNQUNfRE1BX0lTUl9TNV9EQkFfVElNRVJfVEhSRVNIT0xEX01BU0sgIDB4MDAwMjAwMDAKLSNkZWZpbmUgTUFDX0RNQV9JU1JfUzVfU0JBX1RJTUVSX1RIUkVTSE9MRF9NQVNLICAweDAwMDQwMDAwCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1M1X0hDRl9USU1FUl9USFJFU0hPTERfTUFTSyAgMHgwMDA4MDAwMAotI2RlZmluZSBNQUNfRE1BX0lTUl9TNV9USU1fVElNRVJfVEhSRVNIT0xEX01BU0sgIDB4MDAxMDAwMDAKLSNkZWZpbmUgTUFDX0RNQV9JU1JfUzVfRFRJTV9USU1FUl9USFJFU0hPTERfTUFTSyAgMHgwMDIwMDAwMAotI2RlZmluZSBNQUNfRE1BX0lTUl9TNV9RVUlFVF9USU1FUl9USFJFU0hPTERfTUFTSyAweDAwNDAwMDAwCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1M1X05EUF9USU1FUl9USFJFU0hPTERfTUFTSyAgIDB4MDA4MDAwMDAKLSNkZWZpbmUgTUFDX0RNQV9JTVJfUzVfR0VORVJJQ19USU1FUjJfVEhSRVNIT0xEX01BU0sgMHhGRjAwMDAwMAotI2RlZmluZSBNQUNfRE1BX0lNUl9TNV9HRU5FUklDX1RJTUVSMl9USFJFU0hPTERfTFNCICAyNCAKLSNkZWZpbmUgTUFDX0RNQV9JTVJfUzVfR0VORVJJQ19USU1FUjJfVEhSRVNIT0xEKF9pKSAoMHgwMTAwMDAwMCA8PCAoX2kpKQotCi0jZGVmaW5lIE1BQ19ETUFfSU1SX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBBMCAgLyogTUFDIFByaW1hcnkgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgKi8KLS8qCi0gKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlcnMKLSAqCi0gKiBPbmx5IHRoZSBiaXRzIGluIHRoZSBJTVIgY29udHJvbCB3aGV0aGVyIHRoZSBNQUMncyBJTlRBIwotICogb3V0cHV0IHdpbGwgYmUgYXNzZXJ0ZWQuICBUaGUgYml0cyBpbiB0aGUgc2Vjb25kYXJ5IGludGVycnVwdAotICogbWFzayByZWdpc3RlcnMgY29udHJvbCB3aGF0IGJpdHMgZ2V0IHNldCBpbiB0aGUgcHJpbWFyeQotICogaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcjsgaG93ZXZlciB0aGUgSU1SX1MqIHJlZ2lzdGVycwotICogRE8gTk9UIGRldGVybWluZSB3aGV0aGVyIElOVEEjIGlzIGFzc2VydGVkLgotICovCi0jZGVmaW5lIE1BQ19ETUFfSU1SX1JYT0tfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBBdCBsZWFzdCBvbmUgZnJhbWUgcmVjZWl2ZWQgc2FucyBlcnJvcnMgKi8KLSNkZWZpbmUgTUFDX0RNQV9JTVJfUlhERVNDX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIFJlY2VpdmUgaW50ZXJydXB0IHJlcXVlc3QgKi8KLSNkZWZpbmUgTUFDX0RNQV9JTVJfUlhFUlJfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0IC8qIFJlY2VpdmUgZXJyb3IgaW50ZXJydXB0ICovCi0jZGVmaW5lIE1BQ19ETUFfSU1SX1JYTk9QS1RfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOCAvKiBObyBmcmFtZSByZWNlaXZlZCB3aXRoaW4gdGltZW91dCBjbG9jayAqLwotI2RlZmluZSBNQUNfRE1BX0lNUl9SWEVPTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAgLyogUmVjZWl2ZWQgZGVzY3JpcHRvciBlbXB0eSBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgTUFDX0RNQV9JTVJfUlhPUk5fTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwIC8qIFJlY2VpdmUgRklGTyBvdmVycnVuIGludGVycnVwdCAqLwotI2RlZmluZSBNQUNfRE1BX0lNUl9UWE9LX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAgLyogVHJhbnNtaXQgb2theSBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgTUFDX0RNQV9JTVJfVFhERVNDX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwIC8qIFRyYW5zbWl0IGludGVycnVwdCByZXF1ZXN0ICovCi0jZGVmaW5lIE1BQ19ETUFfSU1SX1RYRVJSX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMCAvKiBUcmFuc21pdCBlcnJvciBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgTUFDX0RNQV9JTVJfVFhOT1BLVF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMjAwIC8qIE5vIGZyYW1lIHRyYW5zbWl0dGVkIGludGVycnVwdCAqLwotI2RlZmluZSBNQUNfRE1BX0lNUl9UWEVPTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAgLyogVHJhbnNtaXQgZGVzY3JpcHRvciBlbXB0eSBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgTUFDX0RNQV9JTVJfVFhVUk5fTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwIC8qIFRyYW5zbWl0IEZJRk8gdW5kZXJydW4gaW50ZXJydXB0ICovCi0jZGVmaW5lIE1BQ19ETUFfSU1SX01JQl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMCAvKiBNSUIgaW50ZXJydXB0IC0gc2VlIE1JQkMgKi8KLSNkZWZpbmUgTUFDX0RNQV9JTVJfU1dJX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwIC8qIFNvZnR3YXJlIGludGVycnVwdCAqLwotI2RlZmluZSBNQUNfRE1BX0lNUl9SWFBIWV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAgLyogUEhZIHJlY2VpdmUgZXJyb3IgaW50ZXJydXB0ICovCi0jZGVmaW5lIE1BQ19ETUFfSU1SX1JYS0NNX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMCAvKiBLZXktY2FjaGUgbWlzcyBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgTUFDX0RNQV9JTVJfQlJTU0lfSElfTUFTSyAgICAgICAgICAgICAgICAweDAwMDEwMDAwIC8qIEJlYWNvbiByc3NpIGhpIHRocmVzaG9sZCBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgTUFDX0RNQV9JTVJfQlJTU0lfTE9fTUFTSyAgICAgICAgICAgICAgICAweDAwMDIwMDAwIC8qIEJlYWNvbiByc3NpIGxvIHRocmVzaG9sZCBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgTUFDX0RNQV9JTVJfQk1JU1NfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwIC8qIEJlYWNvbiBtaXNzZWQgaW50ZXJydXB0ICovCi0jZGVmaW5lIE1BQ19ETUFfSU1SX1RYTUlOVFJfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMCAvKiBNYXhpbXVtIHRyYW5zbWl0IGludGVycnVwdCByYXRlICovCi0jZGVmaW5lIE1BQ19ETUFfSU1SX0JOUl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMCAvKiBCTlIgaW50ZXJydXB0ICovCi0jZGVmaW5lIE1BQ19ETUFfSU1SX0hJVUVSUl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMCAvKiBBbiB1bmV4cGVjdGVkIGJ1cyBlcnJvciBoYXMgb2NjdXJyZWQgKi8KLSNkZWZpbmUgTUFDX0RNQV9JTVJfQkNOTUlTQ19NQVNLICAgICAgICAgICAgICAgICAweDAwODAwMDAwIC8qIEJlYWNvbiBNaXNjICovCi0jZGVmaW5lIE1BQ19ETUFfSU1SX1JYTUlOVFJfTUFTSyAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMCAvKiBNYXhpbXVtIHJlY2VpdmUgaW50ZXJydXB0IHJhdGUgKi8KLSNkZWZpbmUgTUFDX0RNQV9JTVJfUUNCUk9WRl9NQVNLICAgICAgICAgICAgICAgICAweDAyMDAwMDAwIC8qIFFDVSBDQlIgb3ZlcmZsb3cgaW50ZXJydXB0ICovCi0jZGVmaW5lIE1BQ19ETUFfSU1SX1FDQlJVUk5fTUFTSyAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMCAvKiBRQ1UgQ0JSIHVuZGVycnVuIGludGVycnVwdCAqLwotI2RlZmluZSBNQUNfRE1BX0lNUl9RVFJJR19NQVNLICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAgLyogUUNVIHNjaGVkdWxpbmcgdHJpZ2dlciBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgTUFDX0RNQV9JTVJfVElNRVJfTUFTSyAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwIC8qIEdFTlRNUiBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgTUFDX0RNQV9JTVJfSENGVE9fTUFTSyAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwIC8qIEhDRlRPIGludGVycnVwdCovCi0jZGVmaW5lIE1BQ19ETUFfSU1SX1RYSU5UTV9NQVNLICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMCAvKiBUcmFuc21pdCBjb21wbGV0aW9uIG1pdGlnYXRpb24gaW50ZXJydXB0ICovCi0jZGVmaW5lIE1BQ19ETUFfSU1SX1JYSU5UTV9NQVNLICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMCAvKiBSZWNlaXZlIGNvbXBsZXRpb24gbWl0aWdhdGlvbiBpbnRlcnJ1cHQgKi8KLQotI2RlZmluZSBNQUNfRE1BX0lNUl9TMF9BRERSRVNTICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwQTQgIC8qIE1BQyBTZWNvbmRhcnkgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgMCAqLwotI2RlZmluZSBNQUNfRE1BX0lNUl9TMF9RQ1VfVFhPS19NQVNLICAgICAgICAgICAgIDB4MDAwMDAzRkYgLyogVFhPSyAoUUNVIDAtOSkgKi8KLSNkZWZpbmUgTUFDX0RNQV9JTVJfUzBfUUNVX1RYT0tfTFNCICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1BQ19ETUFfSU1SX1MwX1FDVV9UWERFU0NfTUFTSyAgICAgICAgICAgMHgwM0ZGMDAwMCAvKiBUWERFU0MgKFFDVSAwLTkpICovCi0jZGVmaW5lIE1BQ19ETUFfSU1SX1MwX1FDVV9UWERFU0NfTFNCICAgICAgICAgICAgMTYKLQotI2RlZmluZSBNQUNfRE1BX0lNUl9TMV9BRERSRVNTICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwQTggIC8qIE1BQyBTZWNvbmRhcnkgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgMSAqLwotI2RlZmluZSBNQUNfRE1BX0lNUl9TMV9RQ1VfVFhFUlJfTUFTSyAgICAgICAgICAgIDB4MDAwMDAzRkYgLyogVFhFUlIgKFFDVSAwLTkpICovCi0jZGVmaW5lIE1BQ19ETUFfSU1SX1MxX1FDVV9UWEVSUl9MU0IgICAgICAgICAgICAgMAotI2RlZmluZSBNQUNfRE1BX0lNUl9TMV9RQ1VfVFhFT0xfTUFTSyAgICAgICAgICAgIDB4MDNGRjAwMDAgLyogVFhFT0wgKFFDVSAwLTkpICovCi0jZGVmaW5lIE1BQ19ETUFfSU1SX1MxX1FDVV9UWEVPTF9MU0IgICAgICAgICAgICAgMTYKLQotI2RlZmluZSBNQUNfRE1BX0lNUl9TMl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwQUMgIC8qIE1BQyBTZWNvbmRhcnkgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgMiAqLwotI2RlZmluZSBNQUNfRE1BX0lNUl9TMl9RQ1VfVFhVUk5fTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDAzRkYgLyogTWFzayBmb3IgVFhVUk4gKFFDVSAwLTkpICovCi0jZGVmaW5lIE1BQ19ETUFfSU1SX1MyX1FDVV9UWFVSTl9MU0IgICAgICAgICAgICAgICAgMAotI2RlZmluZSBNQUNfRE1BX0lNUl9TMl9SWF9JTlRfTUFTSwkJCSAgICAgICAgMHgwMDAwMDgwMAotI2RlZmluZSBNQUNfRE1BX0lNUl9TMl9XTF9TVE9NUEVEX01BU0sJCSAgICAgICAgMHgwMDAwMTAwMAotI2RlZmluZSBNQUNfRE1BX0lNUl9TMl9SWF9QVFJfQkFEX01BU0sJCSAgICAgICAgMHgwMDAwMjAwMAotI2RlZmluZSBNQUNfRE1BX0lNUl9TMl9CVF9MT1dfUFJJT1JJVFlfUklTSU5HX01BU0sgIDB4MDAwMDQwMDAKLSNkZWZpbmUgTUFDX0RNQV9JTVJfUzJfQlRfTE9XX1BSSU9SSVRZX0ZBTExJTkdfTUFTSwkweDAwMDA4MDAwCi0jZGVmaW5lIE1BQ19ETUFfSU1SX1MyX0JCX1BBTklDX0lSUV9NQVNLICAgICAgICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBNQUNfRE1BX0lNUl9TMl9CVF9TVE9NUEVEX01BU0sJCSAgICAgICAgMHgwMDAyMDAwMAotI2RlZmluZSBNQUNfRE1BX0lNUl9TMl9CVF9BQ1RJVkVfUklTSU5HX01BU0sJICAgIDB4MDAwNDAwMDAKLSNkZWZpbmUgTUFDX0RNQV9JTVJfUzJfQlRfQUNUSVZFX0ZBTExJTkdfTUFTSwkgICAgMHgwMDA4MDAwMAotI2RlZmluZSBNQUNfRE1BX0lNUl9TMl9CVF9QUklPUklUWV9SSVNJTkdfTUFTSwkgICAgMHgwMDEwMDAwMAotI2RlZmluZSBNQUNfRE1BX0lNUl9TMl9CVF9QUklPUklUWV9GQUxMSU5HX01BU0sJICAgIDB4MDAyMDAwMDAKLSNkZWZpbmUgTUFDX0RNQV9JTVJfUzJfQ1NUX01BU0sJCQkgICAgICAgICAgICAweDAwNDAwMDAwCi0jZGVmaW5lIE1BQ19ETUFfSU1SX1MyX0dUVF9NQVNLCQkJICAgICAgICAgICAgMHgwMDgwMDAwMAotI2RlZmluZSBNQUNfRE1BX0lNUl9TMl9USU1fTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAgLyogVElNICovCi0jZGVmaW5lIE1BQ19ETUFfSU1SX1MyX0NBQkVORF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMCAvKiBDQUJFTkQgKi8KLSNkZWZpbmUgTUFDX0RNQV9JTVJfUzJfRFRJTVNZTkNfTUFTSyAgICAgICAgICAgICAgICAweDA0MDAwMDAwIC8qIERUSU1TWU5DICovCi0jZGVmaW5lIE1BQ19ETUFfSU1SX1MyX0JDTlRPX01BU0sgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMCAvKiBCQ05UTyAqLwotI2RlZmluZSBNQUNfRE1BX0lNUl9TMl9DQUJUT19NQVNLICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAgLyogQ0FCVE8gKi8KLSNkZWZpbmUgTUFDX0RNQV9JTVJfUzJfRFRJTV9NQVNLICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwIC8qIERUSU0gKi8KLSNkZWZpbmUgTUFDX0RNQV9JTVJfUzJfVFNGT09SX01BU0sgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwIC8qIFRTRk9PUiAqLwotCi0jZGVmaW5lIE1BQ19ETUFfSU1SX1MzX0FERFJFU1MgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBCMCAgLyogTUFDIFNlY29uZGFyeSBpbnRlcnJ1cHQgbWFzayByZWdpc3RlciAzICovCi0jZGVmaW5lIE1BQ19ETUFfSU1SX1MzX1FDVV9RQ0JST1ZGX01BU0sgICAgICAgICAgMHgwMDAwMDNGRiAvKiBNYXNrIGZvciBRQ0JST1ZGIChRQ1UgMC05KSAqLwotI2RlZmluZSBNQUNfRE1BX0lNUl9TM19RQ1VfUUNCUlVSTl9NQVNLICAgICAgICAgIDB4MDNGRjAwMDAgLyogTWFzayBmb3IgUUNCUlVSTiAoUUNVIDAtOSkgKi8KLSNkZWZpbmUgTUFDX0RNQV9JTVJfUzNfUUNVX1FDQlJVUk5fTFNCICAgICAgICAgICAxNiAKLQotI2RlZmluZSBNQUNfRE1BX0lNUl9TNF9BRERSRVNTICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwQjQgIC8qIE1BQyBTZWNvbmRhcnkgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgNCAqLwotI2RlZmluZSBNQUNfRE1BX0lNUl9TNF9RQ1VfUVRSSUdfTUFTSyAgICAgICAgICAgIDB4MDAwMDAzRkYgLyogTWFzayBmb3IgUVRSSUcgKFFDVSAwLTkpICovCi0KLSNkZWZpbmUgTUFDX0RNQV9JTVJfUzVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAweDAwMDAwMEI4ICAvKiBNQUMgU2Vjb25kYXJ5IGludGVycnVwdCBtYXNrIHJlZ2lzdGVyIDUgKi8KLSNkZWZpbmUgTUFDX0RNQV9JTVJfUzVfVEJUVF9USU1FUl9UUklHR0VSX01BU0sgICAweDAwMDAwMDAxCi0jZGVmaW5lIE1BQ19ETUFfSU1SX1M1X0RCQV9USU1FUl9UUklHR0VSX01BU0sgICAgMHgwMDAwMDAwMgotI2RlZmluZSBNQUNfRE1BX0lNUl9TNV9TQkFfVElNRVJfVFJJR0dFUl9NQVNLICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgTUFDX0RNQV9JTVJfUzVfSENGX1RJTUVSX1RSSUdHRVJfTUFTSyAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIE1BQ19ETUFfSU1SX1M1X1RJTV9USU1FUl9UUklHR0VSX01BU0sgICAgMHgwMDAwMDAxMAotI2RlZmluZSBNQUNfRE1BX0lNUl9TNV9EVElNX1RJTUVSX1RSSUdHRVJfTUFTSyAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgTUFDX0RNQV9JTVJfUzVfUVVJRVRfVElNRVJfVFJJR0dFUl9NQVNLICAweDAwMDAwMDQwCi0jZGVmaW5lIE1BQ19ETUFfSU1SX1M1X05EUF9USU1FUl9UUklHR0VSX01BU0sgICAgMHgwMDAwMDA4MAotI2RlZmluZSBNQUNfRE1BX0lNUl9TNV9HRU5FUklDX1RJTUVSMl9UUklHR0VSX01BU0sgMHgwMDAwRkYwMAotI2RlZmluZSBNQUNfRE1BX0lNUl9TNV9HRU5FUklDX1RJTUVSMl9UUklHR0VSX0xTQiA4IAotI2RlZmluZSBNQUNfRE1BX0lNUl9TNV9HRU5FUklDX1RJTUVSMl9UUklHR0VSKF9pKSAgICAoMHgxMDAgPDwgKF9pKSkKLSNkZWZpbmUgTUFDX0RNQV9JTVJfUzVfVElNRVJfT1ZFUkZMT1dfTUFTSyAgICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIE1BQ19ETUFfSU1SX1M1X0RCQV9USU1FUl9USFJFU0hPTERfTUFTSyAgMHgwMDAyMDAwMAotI2RlZmluZSBNQUNfRE1BX0lNUl9TNV9TQkFfVElNRVJfVEhSRVNIT0xEX01BU0sgIDB4MDAwNDAwMDAKLSNkZWZpbmUgTUFDX0RNQV9JTVJfUzVfSENGX1RJTUVSX1RIUkVTSE9MRF9NQVNLICAweDAwMDgwMDAwCi0jZGVmaW5lIE1BQ19ETUFfSU1SX1M1X1RJTV9USU1FUl9USFJFU0hPTERfTUFTSyAgMHgwMDEwMDAwMAotI2RlZmluZSBNQUNfRE1BX0lNUl9TNV9EVElNX1RJTUVSX1RIUkVTSE9MRF9NQVNLIDB4MDAyMDAwMDAKLSNkZWZpbmUgTUFDX0RNQV9JTVJfUzVfUVVJRVRfVElNRVJfVEhSRVNIT0xEX01BU0sgMDAwMDQwMDAwMAotI2RlZmluZSBNQUNfRE1BX0lNUl9TNV9ORFBfVElNRVJfVEhSRVNIT0xEX01BU0sgIDB4MDA4MDAwMDAKLSNkZWZpbmUgTUFDX0RNQV9JTVJfUzVfR0VORVJJQ19USU1FUjJfVEhSRVNIT0xEX01BU0sgMHhGRjAwMDAwMAotI2RlZmluZSBNQUNfRE1BX0lNUl9TNV9HRU5FUklDX1RJTUVSMl9USFJFU0hPTERfTFNCICAyNCAKLSNkZWZpbmUgTUFDX0RNQV9JTVJfUzVfR0VORVJJQ19USU1FUjJfVEhSRVNIT0xEKF9pKSAoMHgwMTAwMDAwMCA8PCAoX2kpKQotCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1JBQ19BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMDBDMCAgLyogSVNSIHJlYWQtYW5kLWNsZWFyIGFjY2VzcyAqLwotCi0vKiBTaGFkb3cgY29waWVzIHdpdGggcmVhZC1hbmQtY2xlYXIgYWNjZXNzICovCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1MwX1NfQUREUkVTUyAgICAgICAgICAgICAgICAgMHgwMDAwMDBDNCAgLyogSVNSX1MwIHNoYWRvdyBjb3B5ICovCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1MxX1NfQUREUkVTUyAgICAgICAgICAgICAgICAgMHgwMDAwMDBDOCAgLyogSVNSX1MxIHNoYWRvdyBjb3B5ICovCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1MyX1NfQUREUkVTUyAgICAgICAgICAgICAgICAgMHgwMDAwMDBDYyAgLyogSVNSX1MyIHNoYWRvdyBjb3B5ICovCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1MzX1NfQUREUkVTUyAgICAgICAgICAgICAgICAgMHgwMDAwMDBEMCAgLyogSVNSX1MzIHNoYWRvdyBjb3B5ICovCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1M0X1NfQUREUkVTUyAgICAgICAgICAgICAgICAgMHgwMDAwMDBENCAgLyogSVNSX1M0IHNoYWRvdyBjb3B5ICovCi0jZGVmaW5lIE1BQ19ETUFfSVNSX1M1X1NfQUREUkVTUyAgICAgICAgICAgICAgICAgMHgwMDAwMDBEOCAgLyogSVNSX1M1IHNoYWRvdyBjb3B5ICovCi0KLSNkZWZpbmUgTUFDX0RNQV9RMF9UWERQX0FERFJFU1MgICAgICAgICAgICAgICAgICAweDAwMDAwODAwICAvKiBNQUMgVHJhbnNtaXQgUXVldWUgZGVzY3JpcHRvciBwb2ludGVyICovCi0jZGVmaW5lIE1BQ19ETUFfUTFfVFhEUF9BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwNCAgLyogTUFDIFRyYW5zbWl0IFF1ZXVlIGRlc2NyaXB0b3IgcG9pbnRlciAqLwotI2RlZmluZSBNQUNfRE1BX1EyX1RYRFBfQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDggIC8qIE1BQyBUcmFuc21pdCBRdWV1ZSBkZXNjcmlwdG9yIHBvaW50ZXIgKi8KLSNkZWZpbmUgTUFDX0RNQV9RM19UWERQX0FERFJFU1MgICAgICAgICAgICAgICAgICAweDAwMDAwODBDICAvKiBNQUMgVHJhbnNtaXQgUXVldWUgZGVzY3JpcHRvciBwb2ludGVyICovCi0jZGVmaW5lIE1BQ19ETUFfUTRfVFhEUF9BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMDgxMCAgLyogTUFDIFRyYW5zbWl0IFF1ZXVlIGRlc2NyaXB0b3IgcG9pbnRlciAqLwotI2RlZmluZSBNQUNfRE1BX1E1X1RYRFBfQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MTQgIC8qIE1BQyBUcmFuc21pdCBRdWV1ZSBkZXNjcmlwdG9yIHBvaW50ZXIgKi8KLSNkZWZpbmUgTUFDX0RNQV9RNl9UWERQX0FERFJFU1MgICAgICAgICAgICAgICAgICAweDAwMDAwODE4ICAvKiBNQUMgVHJhbnNtaXQgUXVldWUgZGVzY3JpcHRvciBwb2ludGVyICovCi0jZGVmaW5lIE1BQ19ETUFfUTdfVFhEUF9BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMDgxQyAgLyogTUFDIFRyYW5zbWl0IFF1ZXVlIGRlc2NyaXB0b3IgcG9pbnRlciAqLwotI2RlZmluZSBNQUNfRE1BX1E4X1RYRFBfQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MjAgIC8qIE1BQyBUcmFuc21pdCBRdWV1ZSBkZXNjcmlwdG9yIHBvaW50ZXIgKi8KLSNkZWZpbmUgTUFDX0RNQV9ROV9UWERQX0FERFJFU1MgICAgICAgICAgICAgICAgICAweDAwMDAwODI0ICAvKiBNQUMgVHJhbnNtaXQgUXVldWUgZGVzY3JpcHRvciBwb2ludGVyICovCi0jZGVmaW5lIE1BQ19ETUFfUVRYRFBfQUREUkVTUyhfaSkgICAgICAgICAgICAgICAgKE1BQ19ETUFfUTBfVFhEUF9BRERSRVNTICsgKChfaSk8PDIpKQotCi0jZGVmaW5lIE1BQ19ETUFfUV9UWEVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDg0MCAgLyogTUFDIFRyYW5zbWl0IFF1ZXVlIGVuYWJsZSAqLwotI2RlZmluZSBNQUNfRE1BX1FfVFhEX0FERFJFU1MgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4ODAgIC8qIE1BQyBUcmFuc21pdCBRdWV1ZSBkaXNhYmxlICovCi0vKiBRQ1UgcmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgTUFDX0RNQV9RMF9DQlJDRkdfQUREUkVTUyAgICAgICAgICAgICAgICAweDAwMDAwOEMwICAvKiBNQUMgQ0JSIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgTUFDX0RNQV9RMV9DQlJDRkdfQUREUkVTUyAgICAgICAgICAgICAgICAweDAwMDAwOEM0ICAvKiBNQUMgQ0JSIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgTUFDX0RNQV9RMl9DQlJDRkdfQUREUkVTUyAgICAgICAgICAgICAgICAweDAwMDAwOEM4ICAvKiBNQUMgQ0JSIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgTUFDX0RNQV9RM19DQlJDRkdfQUREUkVTUyAgICAgICAgICAgICAgICAweDAwMDAwOENDICAvKiBNQUMgQ0JSIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgTUFDX0RNQV9RNF9DQlJDRkdfQUREUkVTUyAgICAgICAgICAgICAgICAweDAwMDAwOEQwICAvKiBNQUMgQ0JSIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgTUFDX0RNQV9RNV9DQlJDRkdfQUREUkVTUyAgICAgICAgICAgICAgICAweDAwMDAwOEQ0ICAvKiBNQUMgQ0JSIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgTUFDX0RNQV9RNl9DQlJDRkdfQUREUkVTUyAgICAgICAgICAgICAgICAweDAwMDAwOEQ4ICAvKiBNQUMgQ0JSIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgTUFDX0RNQV9RN19DQlJDRkdfQUREUkVTUyAgICAgICAgICAgICAgICAweDAwMDAwOERDICAvKiBNQUMgQ0JSIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgTUFDX0RNQV9ROF9DQlJDRkdfQUREUkVTUyAgICAgICAgICAgICAgICAweDAwMDAwOEUwICAvKiBNQUMgQ0JSIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgTUFDX0RNQV9ROV9DQlJDRkdfQUREUkVTUyAgICAgICAgICAgICAgICAweDAwMDAwOEU0ICAvKiBNQUMgQ0JSIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgTUFDX0RNQV9RQ0JSQ0ZHX0FERFJFU1MoX2kpICAgICAgICAgICAgIChNQUNfRE1BX1EwX0NCUkNGR19BRERSRVNTICsgKChfaSk8PDIpKQotCi0jZGVmaW5lIE1BQ19ETUFfUV9DQlJDRkdfQ0JSX0lOVEVSVkFMX01BU0sgICAgICAgIDB4MDBGRkZGRkYgLyogTWFzayBmb3IgQ0JSIGludGVydmFsICh1cykgKi8KLSNkZWZpbmUgTUFDX0RNQV9RX0NCUkNGR19DQlJfSU5URVJWQUxfTFNCICAgICAgICAgMCAgIC8qIFNoaWZ0IGZvciBDQlIgaW50ZXJ2YWwgKi8KLSNkZWZpbmUgTUFDX0RNQV9RX0NCUkNGR19DQlJfT1ZGX1RIUkVTSF9NQVNLICAgICAgMHhGRjAwMDAwMCAvKiBNYXNrIGZvciBDQlIgb3ZlcmZsb3cgdGhyZXNob2xkICovCi0jZGVmaW5lIE1BQ19ETUFfUV9DQlJDRkdfQ0JSX09WRl9USFJFU0hfTFNCICAgICAgIDI0ICAvKiBTaGlmdCBmb3IgQ0JSIG92ZXJmbG93IHRocmVzaCAqLwotCi0KLSNkZWZpbmUgTUFDX0RNQV9RMF9SRFlUSU1FQ0ZHX0FERFJFU1MgICAgICAgICAgICAgMHgwMDAwMDkwMCAgLyogTUFDIFJlYWR5VGltZSBjb25maWd1cmF0aW9uICovCi0jZGVmaW5lIE1BQ19ETUFfUTFfUkRZVElNRUNGR19BRERSRVNTICAgICAgICAgICAgIDB4MDAwMDA5MDQgIC8qIE1BQyBSZWFkeVRpbWUgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBNQUNfRE1BX1EyX1JEWVRJTUVDRkdfQUREUkVTUyAgICAgICAgICAgICAweDAwMDAwOTA4ICAvKiBNQUMgUmVhZHlUaW1lIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgTUFDX0RNQV9RM19SRFlUSU1FQ0ZHX0FERFJFU1MgICAgICAgICAgICAgMHgwMDAwMDkwQyAgLyogTUFDIFJlYWR5VGltZSBjb25maWd1cmF0aW9uICovCi0jZGVmaW5lIE1BQ19ETUFfUTRfUkRZVElNRUNGR19BRERSRVNTICAgICAgICAgICAgIDB4MDAwMDA5MTAgIC8qIE1BQyBSZWFkeVRpbWUgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBNQUNfRE1BX1E1X1JEWVRJTUVDRkdfQUREUkVTUyAgICAgICAgICAgICAweDAwMDAwOTE0ICAvKiBNQUMgUmVhZHlUaW1lIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgTUFDX0RNQV9RNl9SRFlUSU1FQ0ZHX0FERFJFU1MgICAgICAgICAgICAgMHgwMDAwMDkxOCAgLyogTUFDIFJlYWR5VGltZSBjb25maWd1cmF0aW9uICovCi0jZGVmaW5lIE1BQ19ETUFfUTdfUkRZVElNRUNGR19BRERSRVNTICAgICAgICAgICAgIDB4MDAwMDA5MUMgIC8qIE1BQyBSZWFkeVRpbWUgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBNQUNfRE1BX1E4X1JEWVRJTUVDRkdfQUREUkVTUyAgICAgICAgICAgICAweDAwMDAwOTIwICAvKiBNQUMgUmVhZHlUaW1lIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgTUFDX0RNQV9ROV9SRFlUSU1FQ0ZHX0FERFJFU1MgICAgICAgICAgICAgMHgwMDAwMDkyNCAgLyogTUFDIFJlYWR5VGltZSBjb25maWd1cmF0aW9uICovCi0jZGVmaW5lIE1BQ19ETUFfUVJEWVRJTUVDRkdfQUREUkVTUyhfaSkgICAgICAgICAgIChNQUNfRE1BX1EwX1JEWVRJTUVDRkdfQUREUkVTUyArICgoX2kpPDwyKSkKLQotI2RlZmluZSBNQUNfRE1BX1FfUkRZVElNRUNGR19JTlRfTUFTSyAgICAgICAgICAgICAweDAwRkZGRkZGIC8qIENCUiBpbnRlcnZhbCAodXMpICovCi0jZGVmaW5lIE1BQ19ETUFfUV9SRFlUSU1FQ0ZHX0lOVF9MU0IgICAgICAgICAgICAgIDAgIC8qIFNoaWZ0IGZvciBSZWFkeVRpbWUgSW50ZXJ2YWwgKHVzKSAqLwotI2RlZmluZSBNQUNfRE1BX1FfUkRZVElNRUNGR19FTkFfTUFTSyAgICAgICAgICAgICAweDAxMDAwMDAwIC8qIENCUiBlbmFibGUgKi8KLQotI2RlZmluZSBNQUNfRE1BX1FfT05FU0hPVE1BQ19ETUFNX1NDX0FERFJFU1MgICAgICAweDAwMDAwOTQwICAvKiBNQUMgT25lU2hvdEFybSBzZXQgY29udHJvbCAqLwotI2RlZmluZSBNQUNfRE1BX1FfT05FU0hPVE1BQ19ETUFNX0NDX0FERFJFU1MgICAgICAweDAwMDAwOTgwICAvKiBNQUMgT25lU2hvdEFybSBjbGVhciBjb250cm9sICovCi0KLSNkZWZpbmUgTUFDX0RNQV9RMF9NSVNDX0FERFJFU1MgICAgICAgICAgICAgICAgICAgMHgwMDAwMDlDMCAgLyogTUFDIE1pc2NlbGxhbmVvdXMgUUNVIHNldHRpbmdzICovCi0jZGVmaW5lIE1BQ19ETUFfUTFfTUlTQ19BRERSRVNTICAgICAgICAgICAgICAgICAgIDB4MDAwMDA5QzQgIC8qIE1BQyBNaXNjZWxsYW5lb3VzIFFDVSBzZXR0aW5ncyAqLwotI2RlZmluZSBNQUNfRE1BX1EyX01JU0NfQUREUkVTUyAgICAgICAgICAgICAgICAgICAweDAwMDAwOUM4ICAvKiBNQUMgTWlzY2VsbGFuZW91cyBRQ1Ugc2V0dGluZ3MgKi8KLSNkZWZpbmUgTUFDX0RNQV9RM19NSVNDX0FERFJFU1MgICAgICAgICAgICAgICAgICAgMHgwMDAwMDlDQyAgLyogTUFDIE1pc2NlbGxhbmVvdXMgUUNVIHNldHRpbmdzICovCi0jZGVmaW5lIE1BQ19ETUFfUTRfTUlTQ19BRERSRVNTICAgICAgICAgICAgICAgICAgIDB4MDAwMDA5RDAgIC8qIE1BQyBNaXNjZWxsYW5lb3VzIFFDVSBzZXR0aW5ncyAqLwotI2RlZmluZSBNQUNfRE1BX1E1X01JU0NfQUREUkVTUyAgICAgICAgICAgICAgICAgICAweDAwMDAwOUQ0ICAvKiBNQUMgTWlzY2VsbGFuZW91cyBRQ1Ugc2V0dGluZ3MgKi8KLSNkZWZpbmUgTUFDX0RNQV9RNl9NSVNDX0FERFJFU1MgICAgICAgICAgICAgICAgICAgMHgwMDAwMDlEOCAgLyogTUFDIE1pc2NlbGxhbmVvdXMgUUNVIHNldHRpbmdzICovCi0jZGVmaW5lIE1BQ19ETUFfUTdfTUlTQ19BRERSRVNTICAgICAgICAgICAgICAgICAgIDB4MDAwMDA5REMgIC8qIE1BQyBNaXNjZWxsYW5lb3VzIFFDVSBzZXR0aW5ncyAqLwotI2RlZmluZSBNQUNfRE1BX1E4X01JU0NfQUREUkVTUyAgICAgICAgICAgICAgICAgICAweDAwMDAwOUUwICAvKiBNQUMgTWlzY2VsbGFuZW91cyBRQ1Ugc2V0dGluZ3MgKi8KLSNkZWZpbmUgTUFDX0RNQV9ROV9NSVNDX0FERFJFU1MgICAgICAgICAgICAgICAgICAgMHgwMDAwMDlFNCAgLyogTUFDIE1pc2NlbGxhbmVvdXMgUUNVIHNldHRpbmdzICovCi0jZGVmaW5lIE1BQ19ETUFfUU1JU0NfQUREUkVTUyhfaSkgICAgICAgICAgICAgICAgIChNQUNfRE1BX1EwX01JU0NfQUREUkVTUyArICgoX2kpPDwyKSkKLQotI2RlZmluZSBNQUNfRE1BX1FfTUlTQ19GU1BfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGIC8qIEZyYW1lIFNjaGVkdWxpbmcgUG9saWN5IG1hc2sgKi8KLSNkZWZpbmUgTUFDX0RNQV9RX01JU0NfRlNQX0FTQVAgICAgICAgICAgICAgICAgICAgMCAgIC8qIEFTQVAgKi8KLSNkZWZpbmUgTUFDX0RNQV9RX01JU0NfRlNQX0NCUiAgICAgICAgICAgICAgICAgICAgMSAgIC8qIENCUiAqLwotI2RlZmluZSBNQUNfRE1BX1FfTUlTQ19GU1BfREJBX0dBVEVEICAgICAgICAgICAgICAyICAgLyogRE1BIEJlYWNvbiBBbGVydCBnYXRlZCAqLwotI2RlZmluZSBNQUNfRE1BX1FfTUlTQ19GU1BfVElNX0dBVEVEICAgICAgICAgICAgICAzICAgLyogVElNIGdhdGVkICovCi0jZGVmaW5lIE1BQ19ETUFfUV9NSVNDX0ZTUF9CRUFDT05fU0VOVF9HQVRFRCAgICAgIDQgICAvKiBCZWFjb24tc2VudC1nYXRlZCAqLwotI2RlZmluZSBNQUNfRE1BX1FfTUlTQ19PTkVfU0hPVF9FTl9NQVNLICAgICAgICAgICAweDAwMDAwMDEwIC8qIE9uZVNob3QgZW5hYmxlICovCi0jZGVmaW5lIE1BQ19ETUFfUV9NSVNDX0NCUl9JTkNSX0RJUzFfTUFTSyAgICAgICAgIDB4MDAwMDAwMjAgLyogRGlzYWJsZSBDQlIgZXhwaXJlZCBjb3VudGVyIGluY3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVtcHR5IHEpICovCi0jZGVmaW5lIE1BQ19ETUFfUV9NSVNDX0NCUl9JTkNSX0RJUzBfTUFTSyAgICAgICAgIDB4MDAwMDAwNDAgLyogRGlzYWJsZSBDQlIgZXhwaXJlZCBjb3VudGVyIGluY3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVtcHR5IGJlYWNvbiBxKSAqLwotI2RlZmluZSBNQUNfRE1BX1FfTUlTQ19CRUFDT05fVVNFX01BU0sgICAgICAgICAgICAweDAwMDAwMDgwIC8qIEJlYWNvbiB1c2UgaW5kaWNhdGlvbiAqLwotI2RlZmluZSBNQUNfRE1BX1FfTUlTQ19DQlJfRVhQX0NOVFJfTElNSVRfTUFTSyAgICAweDAwMDAwMTAwIC8qIENCUiBleHBpcmVkIGNvdW50ZXIgbGltaXQgZW5hYmxlICovCi0jZGVmaW5lIE1BQ19ETUFfUV9NSVNDX1JEWVRJTUVfRVhQX1BPTElDWV9NQVNLICAgIDB4MDAwMDAyMDAgLyogRW5hYmxlIFRYRSBjbGVhcmVkIG9uIFJlYWR5VGltZSBleHBpcmVkIG9yIFZFT0wgKi8KLSNkZWZpbmUgTUFDX0RNQV9RX01JU0NfUkVTRVRfQ0JSX0VYUF9DVFJfTUFTSyAgICAgMHgwMDAwMDQwMCAvKiBSZXNldCBDQlIgZXhwaXJlZCBjb3VudGVyICovCi0jZGVmaW5lIE1BQ19ETUFfUV9NSVNDX0RDVV9FQVJMWV9URVJNX1JFUV9NQVNLICAgIDB4MDAwMDA4MDAgLyogRENVIGZyYW1lIGVhcmx5IHRlcm1pbmF0aW9uIHJlcXVlc3QgY29udHJvbCAqLwotCi0jZGVmaW5lIE1BQ19ETUFfUTBfU1RTX0FERFJFU1MgICAgICAgICAgICAgICAgICAgMHgwMDAwMEEwMCAgLyogTUFDIE1pc2NlbGxhbmVvdXMgUUNVIHN0YXR1cyAqLwotI2RlZmluZSBNQUNfRE1BX1ExX1NUU19BRERSRVNTICAgICAgICAgICAgICAgICAgIDB4MDAwMDBBMDQgIC8qIE1BQyBNaXNjZWxsYW5lb3VzIFFDVSBzdGF0dXMgKi8KLSNkZWZpbmUgTUFDX0RNQV9RMl9TVFNfQUREUkVTUyAgICAgICAgICAgICAgICAgICAweDAwMDAwQTA4ICAvKiBNQUMgTWlzY2VsbGFuZW91cyBRQ1Ugc3RhdHVzICovCi0jZGVmaW5lIE1BQ19ETUFfUTNfU1RTX0FERFJFU1MgICAgICAgICAgICAgICAgICAgMHgwMDAwMEEwQyAgLyogTUFDIE1pc2NlbGxhbmVvdXMgUUNVIHN0YXR1cyAqLwotI2RlZmluZSBNQUNfRE1BX1E0X1NUU19BRERSRVNTICAgICAgICAgICAgICAgICAgIDB4MDAwMDBBMTAgIC8qIE1BQyBNaXNjZWxsYW5lb3VzIFFDVSBzdGF0dXMgKi8KLSNkZWZpbmUgTUFDX0RNQV9RNV9TVFNfQUREUkVTUyAgICAgICAgICAgICAgICAgICAweDAwMDAwQTE0ICAvKiBNQUMgTWlzY2VsbGFuZW91cyBRQ1Ugc3RhdHVzICovCi0jZGVmaW5lIE1BQ19ETUFfUTZfU1RTX0FERFJFU1MgICAgICAgICAgICAgICAgICAgMHgwMDAwMEExOCAgLyogTUFDIE1pc2NlbGxhbmVvdXMgUUNVIHN0YXR1cyAqLwotI2RlZmluZSBNQUNfRE1BX1E3X1NUU19BRERSRVNTICAgICAgICAgICAgICAgICAgIDB4MDAwMDBBMUMgIC8qIE1BQyBNaXNjZWxsYW5lb3VzIFFDVSBzdGF0dXMgKi8KLSNkZWZpbmUgTUFDX0RNQV9ROF9TVFNfQUREUkVTUyAgICAgICAgICAgICAgICAgICAweDAwMDAwQTIwICAvKiBNQUMgTWlzY2VsbGFuZW91cyBRQ1Ugc3RhdHVzICovCi0jZGVmaW5lIE1BQ19ETUFfUTlfU1RTX0FERFJFU1MgICAgICAgICAgICAgICAgICAgMHgwMDAwMEEyNCAgLyogTUFDIE1pc2NlbGxhbmVvdXMgUUNVIHN0YXR1cyAqLwotI2RlZmluZSBNQUNfRE1BX1FTVFNfQUREUkVTUyhfaSkgICAgICAgICAgICAgICAgIChNQUNfRE1BX1EwX1NUU19BRERSRVNTICsgKChfaSk8PDIpKQotCi0jZGVmaW5lIE1BQ19ETUFfUV9TVFNfUEVORF9GUl9DTlRfTUFTSyAgICAgICAgICAgMHgwMDAwMDAwMyAvKiBNYXNrIGZvciBQZW5kaW5nIEZyYW1lIENvdW50ICovCi0jZGVmaW5lIE1BQ19ETUFfUV9TVFNfQ0JSX0VYUF9DTlRfTUFTSyAgICAgICAgICAgMHgwMDAwRkYwMCAvKiBNYXNrIGZvciBDQlIgZXhwaXJlZCBjb3VudGVyICovCi0KLSNkZWZpbmUgTUFDX0RNQV9RX1JEWVRJTUVTSEROX0FERFJFU1MgICAgICAgICAgICAweDAwMDAwQTQwICAvKiBNQUMgUmVhZHlUaW1lU2h1dGRvd24gc3RhdHVzICovCi0KLS8qIERDVSByZWdpc3RlcnMgKi8KLQotI2RlZmluZSBNQUNfRE1BX0QwX1FDVU1BU0tfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDEwMDAgIC8qIE1BQyBRQ1UgTWFzayAqLwotI2RlZmluZSBNQUNfRE1BX0QxX1FDVU1BU0tfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDEwMDQgIC8qIE1BQyBRQ1UgTWFzayAqLwotI2RlZmluZSBNQUNfRE1BX0QyX1FDVU1BU0tfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDEwMDggIC8qIE1BQyBRQ1UgTWFzayAqLwotI2RlZmluZSBNQUNfRE1BX0QzX1FDVU1BU0tfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDEwMEMgIC8qIE1BQyBRQ1UgTWFzayAqLwotI2RlZmluZSBNQUNfRE1BX0Q0X1FDVU1BU0tfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDEwMTAgIC8qIE1BQyBRQ1UgTWFzayAqLwotI2RlZmluZSBNQUNfRE1BX0Q1X1FDVU1BU0tfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDEwMTQgIC8qIE1BQyBRQ1UgTWFzayAqLwotI2RlZmluZSBNQUNfRE1BX0Q2X1FDVU1BU0tfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDEwMTggIC8qIE1BQyBRQ1UgTWFzayAqLwotI2RlZmluZSBNQUNfRE1BX0Q3X1FDVU1BU0tfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDEwMUMgIC8qIE1BQyBRQ1UgTWFzayAqLwotI2RlZmluZSBNQUNfRE1BX0Q4X1FDVU1BU0tfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDEwMjAgIC8qIE1BQyBRQ1UgTWFzayAqLwotI2RlZmluZSBNQUNfRE1BX0Q5X1FDVU1BU0tfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDEwMjQgIC8qIE1BQyBRQ1UgTWFzayAqLwotI2RlZmluZSBNQUNfRE1BX0RRQ1VNQVNLX0FERFJFU1MoX2kpICAgICAgICAgICAgIChNQUNfRE1BX0QwX1FDVU1BU0tfQUREUkVTUyArICgoX2kpPDwyKSkKLQotI2RlZmluZSBNQUNfRE1BX0RfUUNVTUFTS19NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzRkYgLyogTWFzayBmb3IgUUNVIE1hc2sgKFFDVSAwLTkpICovCi0KLSNkZWZpbmUgTUFDX0RNQV9EX0dCTF9JRlNfU0lGU19BRERSRVNTICAgICAgICAgICAweDAwMDAxMDMwICAvKiBEQ1UgZ2xvYmFsIFNJRlMgc2V0dGluZ3MgKi8KLQotCi0jZGVmaW5lIE1BQ19ETUFfRDBfTENMX0lGU19BRERSRVNTICAgICAgICAgICAgICAgMHgwMDAwMTA0MCAgLyogTUFDIERDVS1zcGVjaWZpYyBJRlMgc2V0dGluZ3MgKi8KLSNkZWZpbmUgTUFDX0RNQV9EMV9MQ0xfSUZTX0FERFJFU1MgICAgICAgICAgICAgICAweDAwMDAxMDQ0ICAvKiBNQUMgRENVLXNwZWNpZmljIElGUyBzZXR0aW5ncyAqLwotI2RlZmluZSBNQUNfRE1BX0QyX0xDTF9JRlNfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDEwNDggIC8qIE1BQyBEQ1Utc3BlY2lmaWMgSUZTIHNldHRpbmdzICovCi0jZGVmaW5lIE1BQ19ETUFfRDNfTENMX0lGU19BRERSRVNTICAgICAgICAgICAgICAgMHgwMDAwMTA0QyAgLyogTUFDIERDVS1zcGVjaWZpYyBJRlMgc2V0dGluZ3MgKi8KLSNkZWZpbmUgTUFDX0RNQV9ENF9MQ0xfSUZTX0FERFJFU1MgICAgICAgICAgICAgICAweDAwMDAxMDUwICAvKiBNQUMgRENVLXNwZWNpZmljIElGUyBzZXR0aW5ncyAqLwotI2RlZmluZSBNQUNfRE1BX0Q1X0xDTF9JRlNfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDEwNTQgIC8qIE1BQyBEQ1Utc3BlY2lmaWMgSUZTIHNldHRpbmdzICovCi0jZGVmaW5lIE1BQ19ETUFfRDZfTENMX0lGU19BRERSRVNTICAgICAgICAgICAgICAgMHgwMDAwMTA1OCAgLyogTUFDIERDVS1zcGVjaWZpYyBJRlMgc2V0dGluZ3MgKi8KLSNkZWZpbmUgTUFDX0RNQV9EN19MQ0xfSUZTX0FERFJFU1MgICAgICAgICAgICAgICAweDAwMDAxMDVDICAvKiBNQUMgRENVLXNwZWNpZmljIElGUyBzZXR0aW5ncyAqLwotI2RlZmluZSBNQUNfRE1BX0Q4X0xDTF9JRlNfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDEwNjAgIC8qIE1BQyBEQ1Utc3BlY2lmaWMgSUZTIHNldHRpbmdzICovCi0jZGVmaW5lIE1BQ19ETUFfRDlfTENMX0lGU19BRERSRVNTICAgICAgICAgICAgICAgMHgwMDAwMTA2NCAgLyogTUFDIERDVS1zcGVjaWZpYyBJRlMgc2V0dGluZ3MgKi8KLSNkZWZpbmUgTUFDX0RNQV9ETENMX0lGU19BRERSRVNTKF9pKSAgICAgICAgICAgICAoTUFDX0RNQV9EMF9MQ0xfSUZTX0FERFJFU1MgKyAoKF9pKTw8MikpCi0jZGVmaW5lIE1BQ19ETUFfRF9MQ0xfSUZTX0NXTUlOX01BU0sgICAgICAgICAgICAgMHgwMDAwMDNGRiAvKiBNYXNrIGZvciBDV19NSU4gKi8KLSNkZWZpbmUgTUFDX0RNQV9EX0xDTF9JRlNfQ1dNSU5fTFNCICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1BQ19ETUFfRF9MQ0xfSUZTX0NXTUFYX01BU0sgICAgICAgICAgICAgMHgwMDBGRkMwMCAvKiBNYXNrIGZvciBDV19NQVggKi8KLSNkZWZpbmUgTUFDX0RNQV9EX0xDTF9JRlNfQ1dNQVhfTFNCICAgICAgICAgICAgICAxMAotI2RlZmluZSBNQUNfRE1BX0RfTENMX0lGU19BSUZTX01BU0sgICAgICAgICAgICAgIDB4MEZGMDAwMDAgLyogTWFzayBmb3IgQUlGUyAqLwotI2RlZmluZSBNQUNfRE1BX0RfTENMX0lGU19BSUZTX0xTQiAgICAgICAgICAgICAgIDIwCi0vKgotICogIE5vdGU6ICBldmVuIHRob3VnaCB0aGlzIGZpZWxkIGlzIDggYml0cyB3aWRlIHRoZQotICogIG1heGltdW0gc3VwcG9ydGVkIEFJRlMgdmFsdWUgaXMgMHhGYy4gIFNldHRpbmcgdGhlIEFJRlMgdmFsdWUKLSAqICB0byAweEZkIDB4RmUsIG9yIDB4RmYgd2lsbCBub3Qgd29yayBjb3JyZWN0bHkgYW5kIHdpbGwgY2F1c2UKLSAqICB0aGUgRENVIHRvIGhhbmcuCi0gKi8KLSNkZWZpbmUgTUFDX0RNQV9EX0dCTF9JRlNfU0xPVF9BRERSRVNTICAgICAgICAgICAweDAwMDAxMDcwICAvKiBEQyBnbG9iYWwgc2xvdCBpbnRlcnZhbCAqLwotCi0jZGVmaW5lIE1BQ19ETUFfRDBfUkVUUllfTElNSVRfQUREUkVTUyAgICAgICAgICAgMHgwMDAwMTA4MCAgLyogTUFDIFJldHJ5IGxpbWl0cyAqLwotI2RlZmluZSBNQUNfRE1BX0QxX1JFVFJZX0xJTUlUX0FERFJFU1MgICAgICAgICAgIDB4MDAwMDEwODQgIC8qIE1BQyBSZXRyeSBsaW1pdHMgKi8KLSNkZWZpbmUgTUFDX0RNQV9EMl9SRVRSWV9MSU1JVF9BRERSRVNTICAgICAgICAgICAweDAwMDAxMDg4ICAvKiBNQUMgUmV0cnkgbGltaXRzICovCi0jZGVmaW5lIE1BQ19ETUFfRDNfUkVUUllfTElNSVRfQUREUkVTUyAgICAgICAgICAgMHgwMDAwMTA4QyAgLyogTUFDIFJldHJ5IGxpbWl0cyAqLwotI2RlZmluZSBNQUNfRE1BX0Q0X1JFVFJZX0xJTUlUX0FERFJFU1MgICAgICAgICAgIDB4MDAwMDEwOTAgIC8qIE1BQyBSZXRyeSBsaW1pdHMgKi8KLSNkZWZpbmUgTUFDX0RNQV9ENV9SRVRSWV9MSU1JVF9BRERSRVNTICAgICAgICAgICAweDAwMDAxMDk0ICAvKiBNQUMgUmV0cnkgbGltaXRzICovCi0jZGVmaW5lIE1BQ19ETUFfRDZfUkVUUllfTElNSVRfQUREUkVTUyAgICAgICAgICAgMHgwMDAwMTA5OCAgLyogTUFDIFJldHJ5IGxpbWl0cyAqLwotI2RlZmluZSBNQUNfRE1BX0Q3X1JFVFJZX0xJTUlUX0FERFJFU1MgICAgICAgICAgIDB4MDAwMDEwOUMgIC8qIE1BQyBSZXRyeSBsaW1pdHMgKi8KLSNkZWZpbmUgTUFDX0RNQV9EOF9SRVRSWV9MSU1JVF9BRERSRVNTICAgICAgICAgICAweDAwMDAxMEEwICAvKiBNQUMgUmV0cnkgbGltaXRzICovCi0jZGVmaW5lIE1BQ19ETUFfRDlfUkVUUllfTElNSVRfQUREUkVTUyAgICAgICAgICAgMHgwMDAwMTBBNCAgLyogTUFDIFJldHJ5IGxpbWl0cyAqLwotI2RlZmluZSBNQUNfRE1BX0RSRVRSWV9MSU1JVF9BRERSRVNTKF9pKSAgICAgICAgIChNQUNfRE1BX0QwX1JFVFJZX0xJTUlUX0FERFJFU1MgKyAoKF9pKTw8MikpCi0KLSNkZWZpbmUgTUFDX0RNQV9EX1JFVFJZX0xJTUlUX0ZSX1JUU19NQVNLICAgICAgICAweDAwMDAwMDBGIC8qIGZyYW1lIFJUUyBmYWlsdXJlIGxpbWl0ICovCi0jZGVmaW5lIE1BQ19ETUFfRF9SRVRSWV9MSU1JVF9GUl9SVFNfTFNCICAgICAgICAgMAotI2RlZmluZSBNQUNfRE1BX0RfUkVUUllfTElNSVRfU1RBX1JUU19NQVNLICAgICAgIDB4MDAwMDNGMDAgLyogc3RhdGlvbiBSVFMgZmFpbHVyZSBsaW1pdCAqLwotI2RlZmluZSBNQUNfRE1BX0RfUkVUUllfTElNSVRfU1RBX1JUU19MU0IgICAgICAgIDgKLSNkZWZpbmUgTUFDX0RNQV9EX1JFVFJZX0xJTUlUX1NUQV9EQVRBX01BU0sgICAgICAweDAwMEZDMDAwIC8qIHN0YXRpb24gc2hvcnQgcmV0cnkgbGltaXQgKi8KLSNkZWZpbmUgTUFDX0RNQV9EX1JFVFJZX0xJTUlUX1NUQV9EQVRBX0xTQiAgICAgICAxNAotCi0jZGVmaW5lIE1BQ19ETUFfRF9HQkxfSUZTX0VJRlNfQUREUkVTUyAgICAgICAgICAgMHgwMDAwMTBCMCAgLyogRENVIGdsb2JhbCBFSUZTIHNldHRpbmcgKi8KLQotI2RlZmluZSBNQUNfRE1BX0QwX0NITlRJTUVfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDEwQzAgIC8qIE1BQyBDaGFubmVsVGltZSBzZXR0aW5ncyAqLwotI2RlZmluZSBNQUNfRE1BX0QxX0NITlRJTUVfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDEwQzQgIC8qIE1BQyBDaGFubmVsVGltZSBzZXR0aW5ncyAqLwotI2RlZmluZSBNQUNfRE1BX0QyX0NITlRJTUVfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDEwQzggIC8qIE1BQyBDaGFubmVsVGltZSBzZXR0aW5ncyAqLwotI2RlZmluZSBNQUNfRE1BX0QzX0NITlRJTUVfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDEwQ0MgIC8qIE1BQyBDaGFubmVsVGltZSBzZXR0aW5ncyAqLwotI2RlZmluZSBNQUNfRE1BX0Q0X0NITlRJTUVfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDEwRDAgIC8qIE1BQyBDaGFubmVsVGltZSBzZXR0aW5ncyAqLwotI2RlZmluZSBNQUNfRE1BX0Q1X0NITlRJTUVfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDEwRDQgIC8qIE1BQyBDaGFubmVsVGltZSBzZXR0aW5ncyAqLwotI2RlZmluZSBNQUNfRE1BX0Q2X0NITlRJTUVfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDEwRDggIC8qIE1BQyBDaGFubmVsVGltZSBzZXR0aW5ncyAqLwotI2RlZmluZSBNQUNfRE1BX0Q3X0NITlRJTUVfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDEwREMgIC8qIE1BQyBDaGFubmVsVGltZSBzZXR0aW5ncyAqLwotI2RlZmluZSBNQUNfRE1BX0Q4X0NITlRJTUVfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDEwRTAgIC8qIE1BQyBDaGFubmVsVGltZSBzZXR0aW5ncyAqLwotI2RlZmluZSBNQUNfRE1BX0Q5X0NITlRJTUVfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDEwRTQgIC8qIE1BQyBDaGFubmVsVGltZSBzZXR0aW5ncyAqLwotI2RlZmluZSBNQUNfRE1BX0RDSE5USU1FX0FERFJFU1MoX2kpICAgICAgICAgICAgIChNQUNfRE1BX0QwX0NITlRJTUVfQUREUkVTUyArICgoX2kpPDwyKSkKLQotI2RlZmluZSBNQUNfRE1BX0RfQ0hOVElNRV9EVVJfTUFTSyAgICAgICAgICAgICAgIDB4MDAwRkZGRkYgLyogQ2hhbm5lbFRpbWUgZHVyYXRpb24gKHVzKSAqLwotI2RlZmluZSBNQUNfRE1BX0RfQ0hOVElNRV9EVVJfTFNCICAgICAgICAgICAgICAgIDAgLyogU2hpZnQgZm9yIENoYW5uZWxUaW1lIGR1cmF0aW9uICovCi0jZGVmaW5lIE1BQ19ETUFfRF9DSE5USU1FX0VOX01BU0sgICAgICAgICAgICAgICAgMHgwMDEwMDAwMCAvKiBDaGFubmVsVGltZSBlbmFibGUgKi8KLQotI2RlZmluZSBNQUNfRE1BX0RfR0JMX0lGU19NSVNDX0FERFJFU1MgICAgICAgICAgIDB4MDAwMDEwZjAgIC8qIERDVSBnbG9iYWwgbWlzYy4gSUZTIHNldHRpbmdzICovCi0jZGVmaW5lIE1BQ19ETUFfRF9HQkxfSUZTX01JU0NfTEZTUl9TTElDRV9TRUxfTUFTSyAweDAwMDAwMDA3IC8qIExGU1Igc2xpY2Ugc2VsZWN0ICovCi0jZGVmaW5lIE1BQ19ETUFfRF9HQkxfSUZTX01JU0NfVFVSQk9fTU9ERV9NQVNLICAgICAweDAwMDAwMDA4IC8qIFR1cmJvIG1vZGUgaW5kaWNhdGlvbiAqLwotI2RlZmluZSBNQUNfRE1BX0RfR0JMX0lGU19NSVNDX0RDVV9BUkJJVEVSX0RMWV9NQVNLIDB4MDAzMDAwMDAgLyogRENVIGFyYml0ZXIgZGVsYXkgKi8KLSNkZWZpbmUgTUFDX0RNQV9EX0dCTF9JRlNfSUdOT1JFX0JBQ0tPRkZfTUFTSyAgICAgIDB4MTAwMDAwMDAKLQotI2RlZmluZSBNQUNfRE1BX0QwX01JU0NfQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4MDAwMDExMDAgIC8qIE1BQyBNaXNjZWxsYW5lb3VzIERDVS1zcGVjaWZpYyBzZXR0aW5ncyAqLwotI2RlZmluZSBNQUNfRE1BX0QxX01JU0NfQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4MDAwMDExMDQgIC8qIE1BQyBNaXNjZWxsYW5lb3VzIERDVS1zcGVjaWZpYyBzZXR0aW5ncyAqLwotI2RlZmluZSBNQUNfRE1BX0QyX01JU0NfQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4MDAwMDExMDggIC8qIE1BQyBNaXNjZWxsYW5lb3VzIERDVS1zcGVjaWZpYyBzZXR0aW5ncyAqLwotI2RlZmluZSBNQUNfRE1BX0QzX01JU0NfQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4MDAwMDExMEMgIC8qIE1BQyBNaXNjZWxsYW5lb3VzIERDVS1zcGVjaWZpYyBzZXR0aW5ncyAqLwotI2RlZmluZSBNQUNfRE1BX0Q0X01JU0NfQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4MDAwMDExMTAgIC8qIE1BQyBNaXNjZWxsYW5lb3VzIERDVS1zcGVjaWZpYyBzZXR0aW5ncyAqLwotI2RlZmluZSBNQUNfRE1BX0Q1X01JU0NfQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4MDAwMDExMTQgIC8qIE1BQyBNaXNjZWxsYW5lb3VzIERDVS1zcGVjaWZpYyBzZXR0aW5ncyAqLwotI2RlZmluZSBNQUNfRE1BX0Q2X01JU0NfQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4MDAwMDExMTggIC8qIE1BQyBNaXNjZWxsYW5lb3VzIERDVS1zcGVjaWZpYyBzZXR0aW5ncyAqLwotI2RlZmluZSBNQUNfRE1BX0Q3X01JU0NfQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4MDAwMDExMUMgIC8qIE1BQyBNaXNjZWxsYW5lb3VzIERDVS1zcGVjaWZpYyBzZXR0aW5ncyAqLwotI2RlZmluZSBNQUNfRE1BX0Q4X01JU0NfQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4MDAwMDExMjAgIC8qIE1BQyBNaXNjZWxsYW5lb3VzIERDVS1zcGVjaWZpYyBzZXR0aW5ncyAqLwotI2RlZmluZSBNQUNfRE1BX0Q5X01JU0NfQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4MDAwMDExMjQgIC8qIE1BQyBNaXNjZWxsYW5lb3VzIERDVS1zcGVjaWZpYyBzZXR0aW5ncyAqLwotI2RlZmluZSBNQUNfRE1BX0RNSVNDX0FERFJFU1MoX2kpICAgICAgICAgICAgICAgIChNQUNfRE1BX0QwX01JU0NfQUREUkVTUyArICgoX2kpPDwyKSkKLQotI2RlZmluZSBNQUNfRE1BX0QwX0VPTF9BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMTE4MAotI2RlZmluZSBNQUNfRE1BX0QxX0VPTF9BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMTE4NAotI2RlZmluZSBNQUNfRE1BX0QyX0VPTF9BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMTE4OAotI2RlZmluZSBNQUNfRE1BX0QzX0VPTF9BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMTE4QwotI2RlZmluZSBNQUNfRE1BX0Q0X0VPTF9BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMTE5MAotI2RlZmluZSBNQUNfRE1BX0Q1X0VPTF9BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMTE5NAotI2RlZmluZSBNQUNfRE1BX0Q2X0VPTF9BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMTE5OAotI2RlZmluZSBNQUNfRE1BX0Q3X0VPTF9BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMTE5QwotI2RlZmluZSBNQUNfRE1BX0Q4X0VPTF9BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMTIwMAotI2RlZmluZSBNQUNfRE1BX0Q5X0VPTF9BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMTIwNAotI2RlZmluZSBNQUNfRE1BX0RFT0xfQUREUkVTUyhfaSkgICAgICAgICAgICAgICAgKE1BQ19ETUFfRDBfRU9MX0FERFJFU1MgKyAoKF9pKTw8MikpCi0KLSNkZWZpbmUgTUFDX0RNQV9EX01JU0NfQktPRkZfVEhSRVNIX01BU0sgICAgICAgICAweDAwMDAwMDNGIC8qIEJhY2tvZmYgdGhyZXNob2xkICovCi0jZGVmaW5lIE1BQ19ETUFfRF9NSVNDX0JBQ0tfT0ZGX1RIUkVTSF9MU0IgICAgICAgMAotI2RlZmluZSBNQUNfRE1BX0RfTUlTQ19FVFNfUlRTX01BU0sgICAgICAgICAgICAgIDB4MDAwMDAwNDAgLyogRW5kIG9mIHRyYW5zbWlzc2lvbiBzZXJpZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aW9uIFJUUy9kYXRhIGZhaWx1cmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCByZXNldCBwb2xpY3kgKi8KLSNkZWZpbmUgTUFDX0RNQV9EX01JU0NfRVRTX0NXX01BU0sgICAgICAgICAgICAgICAweDAwMDAwMDgwIC8qIEVuZCBvZiB0cmFuc21pc3Npb24gc2VyaWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1cgcmVzZXQgcG9saWN5ICovCi0jZGVmaW5lIE1BQ19ETUFfRF9NSVNDX0ZSQUdfV0FJVF9FTl9NQVNLICAgICAgICAgMHgwMDAwMDEwMCAgLyogRnJhZ21lbnQgU3RhcnZhdGlvbiBQb2xpY3kgKi8KLQotI2RlZmluZSBNQUNfRE1BX0RfTUlTQ19GUkFHX0JLT0ZGX0VOX01BU0sgICAgICAgIDB4MDAwMDAyMDAgLyogQmFja29mZiBkdXJpbmcgYSBmcmFnIGJ1cnN0ICovCi0jZGVmaW5lIE1BQ19ETUFfRF9NSVNDX0hDRl9QT0xMX0VOX01BU0sgICAgICAgICAgMHgwMDAwMDgwMCAvKiBIRkMgcG9sbCBlbmFibGUgKi8KLSNkZWZpbmUgTUFDX0RNQV9EX01JU0NfQktPRkZfUEVSU0lTVEVOQ0VfTUFTSyAgICAweDAwMDAxMDAwIC8qIEJhY2tvZmYgcGVyc2lzdGVuY2UgZmFjdG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZyAqLwotI2RlZmluZSBNQUNfRE1BX0RfTUlTQ19WSVJfQ09MX0hBTkRMSU5HX01BU0sgICAgIDB4MDAwMEMwMDAgLyogTWFzayBmb3IgVmlydHVhbCBjb2xsaXNpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGluZyBwb2xpY3kgKi8KLSNkZWZpbmUgTUFDX0RNQV9EX01JU0NfVklSX0NPTF9IQU5ETElOR19MU0IgICAgICAxNAotI2RlZmluZSBNQUNfRE1BX0RfTUlTQ19WSVJfQ09MX0hBTkRMSU5HX0RFRkFVTFQgIDAgICAvKiBOb3JtYWwgKi8KLSNkZWZpbmUgTUFDX0RNQV9EX01JU0NfVklSX0NPTF9IQU5ETElOR19JR05PUkUgICAxICAgLyogSWdub3JlICovCi0jZGVmaW5lIE1BQ19ETUFfRF9NSVNDX0JFQUNPTl9VU0VfTUFTSyAgICAgICAgICAgMHgwMDAxMDAwMCAvKiAgQmVhY29uIHVzZSBpbmRpY2F0aW9uICovCi0jZGVmaW5lIE1BQ19ETUFfRF9NSVNDX0FSQl9MT0NLT1VUX0NOVFJMX01BU0sgMHgwMDA2MDAwMCAvKiAgTWFzayBmb3IgRENVIGFyYml0ZXIgbG9ja291dCBjb250cm9sICovCi0jZGVmaW5lIE1BQ19ETUFfRF9NSVNDX0FSQl9MT0NLT1VUX0NOVFJMX0xTQiAgMTcKLSNkZWZpbmUgTUFDX0RNQV9EX01JU0NfQVJCX0xPQ0tPVVRfQ05UUkxfTk9ORSAgICAgMCAgICAgICAgLyogIE5vIGxvY2tvdXQqLwotI2RlZmluZSBNQUNfRE1BX0RfTUlTQ19BUkJfTE9DS09VVF9DTlRSTF9JTlRSQV9GUiAxICAgICAgICAvKiAgSW50cmEtZnJhbWUqLwotI2RlZmluZSBNQUNfRE1BX0RfTUlTQ19BUkJfTE9DS09VVF9DTlRSTF9HTE9CQUwgICAyICAgICAgICAvKiAgR2xvYmFsICovCi0jZGVmaW5lIE1BQ19ETUFfRF9NSVNDX0FSQl9MT0NLT1VUX0lHTk9SRV9NQVNLIDB4MDAwODAwMDAgLyogIERDVSBhcmJpdGVyIGxvY2tvdXQgaWdub3JlIGNvbnRyb2wgKi8KLSNkZWZpbmUgTUFDX0RNQV9EX01JU0NfU0VRX05VTV9JTkNSX0RJU19NQVNLICAgIDB4MDAxMDAwMDAgLyogU2VxdWVuY2UgbnVtYmVyIGluY3JlbWVudCBkaXNhYmxlICovCi0jZGVmaW5lIE1BQ19ETUFfRF9NSVNDX1BPU1RfRlJfQktPRkZfRElTX01BU0sgICAweDAwMjAwMDAwIC8qIFBvc3QtZnJhbWUgYmFja29mZiBkaXNhYmxlICovCi0jZGVmaW5lIE1BQ19ETUFfRF9NSVNDX1ZJUlRfQ09MTF9QT0xJQ1lfTUFTSyAgICAweDAwNDAwMDAwIC8qIFZpcnR1YWwgY29sbC4gaGFuZGxpbmcgcG9saWN5ICovCi0jZGVmaW5lIE1BQ19ETUFfRF9NSVNDX0JMT1dOX0lGU19QT0xJQ1lfTUFTSyAgICAweDAwODAwMDAwIC8qIEJsb3duIElGUyBoYW5kbGluZyBwb2xpY3kgKi8KLQotI2RlZmluZSBNQUNfRE1BX0RfU0VRTlVNX0FERFJFU1MgICAgICAgICAgICAgICAgMHgwMDAwMTE0MCAgLyogTUFDIEZyYW1lIHNlcXVlbmNlIG51bWJlciAqLwotCi0KLQotI2RlZmluZSBNQUNfRE1BX0RfRlBDVExfQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4MDAwMDEyMzAgICAgICAvKiBEQ1UgZnJhbWUgcHJlZmV0Y2ggc2V0dGluZ3MgKi8KLSNkZWZpbmUgTUFDX0RNQV9EX1RYUFNFX0FERFJFU1MgICAgICAgICAgICAgICAgICAweDAwMDAxMjcwICAgICAgLyogRENVIHRyYW5zbWl0IHBhdXNlIGNvbnRyb2wvc3RhdHVzICovCi0KLSNlbmRpZiAvKiBfQVI2MDAwX0RNTUFFR19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHc0LjAvaHcvbWFjX3BjdV9yZWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3NC4wL2h3L21hY19wY3VfcmVnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjY2IwOGMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHc0LjAvaHcvbWFjX3BjdV9yZWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDMwNjUgKzAsMCBAQAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDQtMjAxMCBBdGhlcm9zIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIAotLy8KLS8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotLy8gcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLS8vCi0vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLS8vIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLS8vIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0vLyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0vLyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLS8vIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0vLyBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotLy8KLS8vCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gQXV0aG9yKHMpOiA9IkF0aGVyb3MiCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCi0jaWZuZGVmIF9NQUNfUENVX1JFR19IXwotI2RlZmluZSBfTUFDX1BDVV9SRUdfSF8KLQotI2RlZmluZSBNQUNfUENVX1NUQV9BRERSX0wzMl9BRERSRVNTICAgICAgICAgICAgIDB4MDAwMDgwMDAKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9MMzJfT0ZGU0VUICAgICAgICAgICAgICAweDAwMDAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfU1RBX0FERFJfTDMyX0FERFJfMzFfMF9NU0IgICAgICAgMzEKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9MMzJfQUREUl8zMV8wX0xTQiAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfU1RBX0FERFJfTDMyX0FERFJfMzFfMF9NQVNLICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBNQUNfUENVX1NUQV9BRERSX0wzMl9BRERSXzMxXzBfR0VUKHgpICAgICgoKHgpICYgTUFDX1BDVV9TVEFfQUREUl9MMzJfQUREUl8zMV8wX01BU0spID4+IE1BQ19QQ1VfU1RBX0FERFJfTDMyX0FERFJfMzFfMF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfU1RBX0FERFJfTDMyX0FERFJfMzFfMF9TRVQoeCkgICAgKCgoeCkgPDwgTUFDX1BDVV9TVEFfQUREUl9MMzJfQUREUl8zMV8wX0xTQikgJiBNQUNfUENVX1NUQV9BRERSX0wzMl9BRERSXzMxXzBfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX1NUQV9BRERSX1UxNl9BRERSRVNTICAgICAgICAgICAgIDB4MDAwMDgwMDQKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfT0ZGU0VUICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIE1BQ19QQ1VfU1RBX0FERFJfVTE2X0FESE9DX01DQVNUX1NFQVJDSF9NU0IgMzEKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfQURIT0NfTUNBU1RfU0VBUkNIX0xTQiAzMQotI2RlZmluZSBNQUNfUENVX1NUQV9BRERSX1UxNl9BREhPQ19NQ0FTVF9TRUFSQ0hfTUFTSyAweDgwMDAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfU1RBX0FERFJfVTE2X0FESE9DX01DQVNUX1NFQVJDSF9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX1NUQV9BRERSX1UxNl9BREhPQ19NQ0FTVF9TRUFSQ0hfTUFTSykgPj4gTUFDX1BDVV9TVEFfQUREUl9VMTZfQURIT0NfTUNBU1RfU0VBUkNIX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfQURIT0NfTUNBU1RfU0VBUkNIX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX1NUQV9BRERSX1UxNl9BREhPQ19NQ0FTVF9TRUFSQ0hfTFNCKSAmIE1BQ19QQ1VfU1RBX0FERFJfVTE2X0FESE9DX01DQVNUX1NFQVJDSF9NQVNLKQotI2RlZmluZSBNQUNfUENVX1NUQV9BRERSX1UxNl9DQkNJVl9FTkRJQU5fTVNCICAgIDMwCi0jZGVmaW5lIE1BQ19QQ1VfU1RBX0FERFJfVTE2X0NCQ0lWX0VORElBTl9MU0IgICAgMzAKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfQ0JDSVZfRU5ESUFOX01BU0sgICAweDQwMDAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfU1RBX0FERFJfVTE2X0NCQ0lWX0VORElBTl9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX1NUQV9BRERSX1UxNl9DQkNJVl9FTkRJQU5fTUFTSykgPj4gTUFDX1BDVV9TVEFfQUREUl9VMTZfQ0JDSVZfRU5ESUFOX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfQ0JDSVZfRU5ESUFOX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX1NUQV9BRERSX1UxNl9DQkNJVl9FTkRJQU5fTFNCKSAmIE1BQ19QQ1VfU1RBX0FERFJfVTE2X0NCQ0lWX0VORElBTl9NQVNLKQotI2RlZmluZSBNQUNfUENVX1NUQV9BRERSX1UxNl9QUkVTRVJWRV9TRVFOVU1fTVNCIDI5Ci0jZGVmaW5lIE1BQ19QQ1VfU1RBX0FERFJfVTE2X1BSRVNFUlZFX1NFUU5VTV9MU0IgMjkKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfUFJFU0VSVkVfU0VRTlVNX01BU0sgMHgyMDAwMDAwMAotI2RlZmluZSBNQUNfUENVX1NUQV9BRERSX1UxNl9QUkVTRVJWRV9TRVFOVU1fR0VUKHgpICgoKHgpICYgTUFDX1BDVV9TVEFfQUREUl9VMTZfUFJFU0VSVkVfU0VRTlVNX01BU0spID4+IE1BQ19QQ1VfU1RBX0FERFJfVTE2X1BSRVNFUlZFX1NFUU5VTV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfU1RBX0FERFJfVTE2X1BSRVNFUlZFX1NFUU5VTV9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9TVEFfQUREUl9VMTZfUFJFU0VSVkVfU0VRTlVNX0xTQikgJiBNQUNfUENVX1NUQV9BRERSX1UxNl9QUkVTRVJWRV9TRVFOVU1fTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfS1NSQ0hfTU9ERV9NU0IgICAgICAyOAotI2RlZmluZSBNQUNfUENVX1NUQV9BRERSX1UxNl9LU1JDSF9NT0RFX0xTQiAgICAgIDI4Ci0jZGVmaW5lIE1BQ19QQ1VfU1RBX0FERFJfVTE2X0tTUkNIX01PREVfTUFTSyAgICAgMHgxMDAwMDAwMAotI2RlZmluZSBNQUNfUENVX1NUQV9BRERSX1UxNl9LU1JDSF9NT0RFX0dFVCh4KSAgICgoKHgpICYgTUFDX1BDVV9TVEFfQUREUl9VMTZfS1NSQ0hfTU9ERV9NQVNLKSA+PiBNQUNfUENVX1NUQV9BRERSX1UxNl9LU1JDSF9NT0RFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfS1NSQ0hfTU9ERV9TRVQoeCkgICAoKCh4KSA8PCBNQUNfUENVX1NUQV9BRERSX1UxNl9LU1JDSF9NT0RFX0xTQikgJiBNQUNfUENVX1NUQV9BRERSX1UxNl9LU1JDSF9NT0RFX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfU1RBX0FERFJfVTE2X0NSUFRfTUlDX0VOQUJMRV9NU0IgMjcKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfQ1JQVF9NSUNfRU5BQkxFX0xTQiAyNwotI2RlZmluZSBNQUNfUENVX1NUQV9BRERSX1UxNl9DUlBUX01JQ19FTkFCTEVfTUFTSyAweDA4MDAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfU1RBX0FERFJfVTE2X0NSUFRfTUlDX0VOQUJMRV9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX1NUQV9BRERSX1UxNl9DUlBUX01JQ19FTkFCTEVfTUFTSykgPj4gTUFDX1BDVV9TVEFfQUREUl9VMTZfQ1JQVF9NSUNfRU5BQkxFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfQ1JQVF9NSUNfRU5BQkxFX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX1NUQV9BRERSX1UxNl9DUlBUX01JQ19FTkFCTEVfTFNCKSAmIE1BQ19QQ1VfU1RBX0FERFJfVTE2X0NSUFRfTUlDX0VOQUJMRV9NQVNLKQotI2RlZmluZSBNQUNfUENVX1NUQV9BRERSX1UxNl9TRUNUT1JfU0VMRl9HRU5fTVNCIDI2Ci0jZGVmaW5lIE1BQ19QQ1VfU1RBX0FERFJfVTE2X1NFQ1RPUl9TRUxGX0dFTl9MU0IgMjYKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfU0VDVE9SX1NFTEZfR0VOX01BU0sgMHgwNDAwMDAwMAotI2RlZmluZSBNQUNfUENVX1NUQV9BRERSX1UxNl9TRUNUT1JfU0VMRl9HRU5fR0VUKHgpICgoKHgpICYgTUFDX1BDVV9TVEFfQUREUl9VMTZfU0VDVE9SX1NFTEZfR0VOX01BU0spID4+IE1BQ19QQ1VfU1RBX0FERFJfVTE2X1NFQ1RPUl9TRUxGX0dFTl9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfU1RBX0FERFJfVTE2X1NFQ1RPUl9TRUxGX0dFTl9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9TVEFfQUREUl9VMTZfU0VDVE9SX1NFTEZfR0VOX0xTQikgJiBNQUNfUENVX1NUQV9BRERSX1UxNl9TRUNUT1JfU0VMRl9HRU5fTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfQkFTRV9SQVRFXzExQl9NU0IgICAyNQotI2RlZmluZSBNQUNfUENVX1NUQV9BRERSX1UxNl9CQVNFX1JBVEVfMTFCX0xTQiAgIDI1Ci0jZGVmaW5lIE1BQ19QQ1VfU1RBX0FERFJfVTE2X0JBU0VfUkFURV8xMUJfTUFTSyAgMHgwMjAwMDAwMAotI2RlZmluZSBNQUNfUENVX1NUQV9BRERSX1UxNl9CQVNFX1JBVEVfMTFCX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfU1RBX0FERFJfVTE2X0JBU0VfUkFURV8xMUJfTUFTSykgPj4gTUFDX1BDVV9TVEFfQUREUl9VMTZfQkFTRV9SQVRFXzExQl9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfU1RBX0FERFJfVTE2X0JBU0VfUkFURV8xMUJfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfU1RBX0FERFJfVTE2X0JBU0VfUkFURV8xMUJfTFNCKSAmIE1BQ19QQ1VfU1RBX0FERFJfVTE2X0JBU0VfUkFURV8xMUJfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfQUNLQ1RTXzZNQl9NU0IgICAgICAyNAotI2RlZmluZSBNQUNfUENVX1NUQV9BRERSX1UxNl9BQ0tDVFNfNk1CX0xTQiAgICAgIDI0Ci0jZGVmaW5lIE1BQ19QQ1VfU1RBX0FERFJfVTE2X0FDS0NUU182TUJfTUFTSyAgICAgMHgwMTAwMDAwMAotI2RlZmluZSBNQUNfUENVX1NUQV9BRERSX1UxNl9BQ0tDVFNfNk1CX0dFVCh4KSAgICgoKHgpICYgTUFDX1BDVV9TVEFfQUREUl9VMTZfQUNLQ1RTXzZNQl9NQVNLKSA+PiBNQUNfUENVX1NUQV9BRERSX1UxNl9BQ0tDVFNfNk1CX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfQUNLQ1RTXzZNQl9TRVQoeCkgICAoKCh4KSA8PCBNQUNfUENVX1NUQV9BRERSX1UxNl9BQ0tDVFNfNk1CX0xTQikgJiBNQUNfUENVX1NUQV9BRERSX1UxNl9BQ0tDVFNfNk1CX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfU1RBX0FERFJfVTE2X1JUU19VU0VfREVGX01TQiAgICAgMjMKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfUlRTX1VTRV9ERUZfTFNCICAgICAyMwotI2RlZmluZSBNQUNfUENVX1NUQV9BRERSX1UxNl9SVFNfVVNFX0RFRl9NQVNLICAgIDB4MDA4MDAwMDAKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfUlRTX1VTRV9ERUZfR0VUKHgpICAoKCh4KSAmIE1BQ19QQ1VfU1RBX0FERFJfVTE2X1JUU19VU0VfREVGX01BU0spID4+IE1BQ19QQ1VfU1RBX0FERFJfVTE2X1JUU19VU0VfREVGX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfUlRTX1VTRV9ERUZfU0VUKHgpICAoKCh4KSA8PCBNQUNfUENVX1NUQV9BRERSX1UxNl9SVFNfVVNFX0RFRl9MU0IpICYgTUFDX1BDVV9TVEFfQUREUl9VMTZfUlRTX1VTRV9ERUZfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfREVGQU5UX1VQREFURV9NU0IgICAyMgotI2RlZmluZSBNQUNfUENVX1NUQV9BRERSX1UxNl9ERUZBTlRfVVBEQVRFX0xTQiAgIDIyCi0jZGVmaW5lIE1BQ19QQ1VfU1RBX0FERFJfVTE2X0RFRkFOVF9VUERBVEVfTUFTSyAgMHgwMDQwMDAwMAotI2RlZmluZSBNQUNfUENVX1NUQV9BRERSX1UxNl9ERUZBTlRfVVBEQVRFX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfU1RBX0FERFJfVTE2X0RFRkFOVF9VUERBVEVfTUFTSykgPj4gTUFDX1BDVV9TVEFfQUREUl9VMTZfREVGQU5UX1VQREFURV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfU1RBX0FERFJfVTE2X0RFRkFOVF9VUERBVEVfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfU1RBX0FERFJfVTE2X0RFRkFOVF9VUERBVEVfTFNCKSAmIE1BQ19QQ1VfU1RBX0FERFJfVTE2X0RFRkFOVF9VUERBVEVfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfVVNFX0RFRkFOVF9NU0IgICAgICAyMQotI2RlZmluZSBNQUNfUENVX1NUQV9BRERSX1UxNl9VU0VfREVGQU5UX0xTQiAgICAgIDIxCi0jZGVmaW5lIE1BQ19QQ1VfU1RBX0FERFJfVTE2X1VTRV9ERUZBTlRfTUFTSyAgICAgMHgwMDIwMDAwMAotI2RlZmluZSBNQUNfUENVX1NUQV9BRERSX1UxNl9VU0VfREVGQU5UX0dFVCh4KSAgICgoKHgpICYgTUFDX1BDVV9TVEFfQUREUl9VMTZfVVNFX0RFRkFOVF9NQVNLKSA+PiBNQUNfUENVX1NUQV9BRERSX1UxNl9VU0VfREVGQU5UX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfVVNFX0RFRkFOVF9TRVQoeCkgICAoKCh4KSA8PCBNQUNfUENVX1NUQV9BRERSX1UxNl9VU0VfREVGQU5UX0xTQikgJiBNQUNfUENVX1NUQV9BRERSX1UxNl9VU0VfREVGQU5UX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfU1RBX0FERFJfVTE2X1BDRl9NU0IgICAgICAgICAgICAgMjAKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfUENGX0xTQiAgICAgICAgICAgICAyMAotI2RlZmluZSBNQUNfUENVX1NUQV9BRERSX1UxNl9QQ0ZfTUFTSyAgICAgICAgICAgIDB4MDAxMDAwMDAKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfUENGX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfU1RBX0FERFJfVTE2X1BDRl9NQVNLKSA+PiBNQUNfUENVX1NUQV9BRERSX1UxNl9QQ0ZfTFNCKQotI2RlZmluZSBNQUNfUENVX1NUQV9BRERSX1UxNl9QQ0ZfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfU1RBX0FERFJfVTE2X1BDRl9MU0IpICYgTUFDX1BDVV9TVEFfQUREUl9VMTZfUENGX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfU1RBX0FERFJfVTE2X0tFWVNSQ0hfRElTX01TQiAgICAgMTkKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfS0VZU1JDSF9ESVNfTFNCICAgICAxOQotI2RlZmluZSBNQUNfUENVX1NUQV9BRERSX1UxNl9LRVlTUkNIX0RJU19NQVNLICAgIDB4MDAwODAwMDAKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfS0VZU1JDSF9ESVNfR0VUKHgpICAoKCh4KSAmIE1BQ19QQ1VfU1RBX0FERFJfVTE2X0tFWVNSQ0hfRElTX01BU0spID4+IE1BQ19QQ1VfU1RBX0FERFJfVTE2X0tFWVNSQ0hfRElTX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfS0VZU1JDSF9ESVNfU0VUKHgpICAoKCh4KSA8PCBNQUNfUENVX1NUQV9BRERSX1UxNl9LRVlTUkNIX0RJU19MU0IpICYgTUFDX1BDVV9TVEFfQUREUl9VMTZfS0VZU1JDSF9ESVNfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfUFdfU0FWRV9NU0IgICAgICAgICAxOAotI2RlZmluZSBNQUNfUENVX1NUQV9BRERSX1UxNl9QV19TQVZFX0xTQiAgICAgICAgIDE4Ci0jZGVmaW5lIE1BQ19QQ1VfU1RBX0FERFJfVTE2X1BXX1NBVkVfTUFTSyAgICAgICAgMHgwMDA0MDAwMAotI2RlZmluZSBNQUNfUENVX1NUQV9BRERSX1UxNl9QV19TQVZFX0dFVCh4KSAgICAgICgoKHgpICYgTUFDX1BDVV9TVEFfQUREUl9VMTZfUFdfU0FWRV9NQVNLKSA+PiBNQUNfUENVX1NUQV9BRERSX1UxNl9QV19TQVZFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfUFdfU0FWRV9TRVQoeCkgICAgICAoKCh4KSA8PCBNQUNfUENVX1NUQV9BRERSX1UxNl9QV19TQVZFX0xTQikgJiBNQUNfUENVX1NUQV9BRERSX1UxNl9QV19TQVZFX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfU1RBX0FERFJfVTE2X0FESE9DX01TQiAgICAgICAgICAgMTcKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfQURIT0NfTFNCICAgICAgICAgICAxNwotI2RlZmluZSBNQUNfUENVX1NUQV9BRERSX1UxNl9BREhPQ19NQVNLICAgICAgICAgIDB4MDAwMjAwMDAKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfQURIT0NfR0VUKHgpICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfU1RBX0FERFJfVTE2X0FESE9DX01BU0spID4+IE1BQ19QQ1VfU1RBX0FERFJfVTE2X0FESE9DX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfQURIT0NfU0VUKHgpICAgICAgICAoKCh4KSA8PCBNQUNfUENVX1NUQV9BRERSX1UxNl9BREhPQ19MU0IpICYgTUFDX1BDVV9TVEFfQUREUl9VMTZfQURIT0NfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfU1RBX0FQX01TQiAgICAgICAgICAxNgotI2RlZmluZSBNQUNfUENVX1NUQV9BRERSX1UxNl9TVEFfQVBfTFNCICAgICAgICAgIDE2Ci0jZGVmaW5lIE1BQ19QQ1VfU1RBX0FERFJfVTE2X1NUQV9BUF9NQVNLICAgICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBNQUNfUENVX1NUQV9BRERSX1UxNl9TVEFfQVBfR0VUKHgpICAgICAgICgoKHgpICYgTUFDX1BDVV9TVEFfQUREUl9VMTZfU1RBX0FQX01BU0spID4+IE1BQ19QQ1VfU1RBX0FERFJfVTE2X1NUQV9BUF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfU1RBX0FERFJfVTE2X1NUQV9BUF9TRVQoeCkgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9TVEFfQUREUl9VMTZfU1RBX0FQX0xTQikgJiBNQUNfUENVX1NUQV9BRERSX1UxNl9TVEFfQVBfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfQUREUl80N18zMl9NU0IgICAgICAxNQotI2RlZmluZSBNQUNfUENVX1NUQV9BRERSX1UxNl9BRERSXzQ3XzMyX0xTQiAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9TVEFfQUREUl9VMTZfQUREUl80N18zMl9NQVNLICAgICAweDAwMDBmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfU1RBX0FERFJfVTE2X0FERFJfNDdfMzJfR0VUKHgpICAgKCgoeCkgJiBNQUNfUENVX1NUQV9BRERSX1UxNl9BRERSXzQ3XzMyX01BU0spID4+IE1BQ19QQ1VfU1RBX0FERFJfVTE2X0FERFJfNDdfMzJfTFNCKQotI2RlZmluZSBNQUNfUENVX1NUQV9BRERSX1UxNl9BRERSXzQ3XzMyX1NFVCh4KSAgICgoKHgpIDw8IE1BQ19QQ1VfU1RBX0FERFJfVTE2X0FERFJfNDdfMzJfTFNCKSAmIE1BQ19QQ1VfU1RBX0FERFJfVTE2X0FERFJfNDdfMzJfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX0JTU0lEX0wzMl9BRERSRVNTICAgICAgICAgICAgICAgIDB4MDAwMDgwMDgKLSNkZWZpbmUgTUFDX1BDVV9CU1NJRF9MMzJfT0ZGU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIE1BQ19QQ1VfQlNTSURfTDMyX0FERFJfTVNCICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgTUFDX1BDVV9CU1NJRF9MMzJfQUREUl9MU0IgICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfQlNTSURfTDMyX0FERFJfTUFTSyAgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBNQUNfUENVX0JTU0lEX0wzMl9BRERSX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgTUFDX1BDVV9CU1NJRF9MMzJfQUREUl9NQVNLKSA+PiBNQUNfUENVX0JTU0lEX0wzMl9BRERSX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9CU1NJRF9MMzJfQUREUl9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBNQUNfUENVX0JTU0lEX0wzMl9BRERSX0xTQikgJiBNQUNfUENVX0JTU0lEX0wzMl9BRERSX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9CU1NJRF9VMTZfQUREUkVTUyAgICAgICAgICAgICAgICAweDAwMDA4MDBjCi0jZGVmaW5lIE1BQ19QQ1VfQlNTSURfVTE2X09GRlNFVCAgICAgICAgICAgICAgICAgMHgwMDAwMDAwYwotI2RlZmluZSBNQUNfUENVX0JTU0lEX1UxNl9BSURfTVNCICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIE1BQ19QQ1VfQlNTSURfVTE2X0FJRF9MU0IgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgTUFDX1BDVV9CU1NJRF9VMTZfQUlEX01BU0sgICAgICAgICAgICAgICAweDA3ZmYwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfQlNTSURfVTE2X0FJRF9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBNQUNfUENVX0JTU0lEX1UxNl9BSURfTUFTSykgPj4gTUFDX1BDVV9CU1NJRF9VMTZfQUlEX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9CU1NJRF9VMTZfQUlEX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBNQUNfUENVX0JTU0lEX1UxNl9BSURfTFNCKSAmIE1BQ19QQ1VfQlNTSURfVTE2X0FJRF9NQVNLKQotI2RlZmluZSBNQUNfUENVX0JTU0lEX1UxNl9BRERSX01TQiAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIE1BQ19QQ1VfQlNTSURfVTE2X0FERFJfTFNCICAgICAgICAgICAgICAgMAotI2RlZmluZSBNQUNfUENVX0JTU0lEX1UxNl9BRERSX01BU0sgICAgICAgICAgICAgIDB4MDAwMGZmZmYKLSNkZWZpbmUgTUFDX1BDVV9CU1NJRF9VMTZfQUREUl9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfQlNTSURfVTE2X0FERFJfTUFTSykgPj4gTUFDX1BDVV9CU1NJRF9VMTZfQUREUl9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQlNTSURfVTE2X0FERFJfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9CU1NJRF9VMTZfQUREUl9MU0IpICYgTUFDX1BDVV9CU1NJRF9VMTZfQUREUl9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfQkNOX1JTU0lfQVZFX0FERFJFU1MgICAgICAgICAgICAgMHgwMDAwODAxMAotI2RlZmluZSBNQUNfUENVX0JDTl9SU1NJX0FWRV9PRkZTRVQgICAgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgTUFDX1BDVV9CQ05fUlNTSV9BVkVfVkFMVUVfTVNCICAgICAgICAgICAxMQotI2RlZmluZSBNQUNfUENVX0JDTl9SU1NJX0FWRV9WQUxVRV9MU0IgICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9CQ05fUlNTSV9BVkVfVkFMVUVfTUFTSyAgICAgICAgICAweDAwMDAwZmZmCi0jZGVmaW5lIE1BQ19QQ1VfQkNOX1JTU0lfQVZFX1ZBTFVFX0dFVCh4KSAgICAgICAgKCgoeCkgJiBNQUNfUENVX0JDTl9SU1NJX0FWRV9WQUxVRV9NQVNLKSA+PiBNQUNfUENVX0JDTl9SU1NJX0FWRV9WQUxVRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQkNOX1JTU0lfQVZFX1ZBTFVFX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9CQ05fUlNTSV9BVkVfVkFMVUVfTFNCKSAmIE1BQ19QQ1VfQkNOX1JTU0lfQVZFX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9BQ0tfQ1RTX1RJTUVPVVRfQUREUkVTUyAgICAgICAgICAweDAwMDA4MDE0Ci0jZGVmaW5lIE1BQ19QQ1VfQUNLX0NUU19USU1FT1VUX09GRlNFVCAgICAgICAgICAgMHgwMDAwMDAxNAotI2RlZmluZSBNQUNfUENVX0FDS19DVFNfVElNRU9VVF9DVFNfVElNRU9VVF9NU0IgIDI5Ci0jZGVmaW5lIE1BQ19QQ1VfQUNLX0NUU19USU1FT1VUX0NUU19USU1FT1VUX0xTQiAgMTYKLSNkZWZpbmUgTUFDX1BDVV9BQ0tfQ1RTX1RJTUVPVVRfQ1RTX1RJTUVPVVRfTUFTSyAweDNmZmYwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfQUNLX0NUU19USU1FT1VUX0NUU19USU1FT1VUX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfQUNLX0NUU19USU1FT1VUX0NUU19USU1FT1VUX01BU0spID4+IE1BQ19QQ1VfQUNLX0NUU19USU1FT1VUX0NUU19USU1FT1VUX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9BQ0tfQ1RTX1RJTUVPVVRfQ1RTX1RJTUVPVVRfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfQUNLX0NUU19USU1FT1VUX0NUU19USU1FT1VUX0xTQikgJiBNQUNfUENVX0FDS19DVFNfVElNRU9VVF9DVFNfVElNRU9VVF9NQVNLKQotI2RlZmluZSBNQUNfUENVX0FDS19DVFNfVElNRU9VVF9BQ0tfVElNRU9VVF9NU0IgIDEzCi0jZGVmaW5lIE1BQ19QQ1VfQUNLX0NUU19USU1FT1VUX0FDS19USU1FT1VUX0xTQiAgMAotI2RlZmluZSBNQUNfUENVX0FDS19DVFNfVElNRU9VVF9BQ0tfVElNRU9VVF9NQVNLIDB4MDAwMDNmZmYKLSNkZWZpbmUgTUFDX1BDVV9BQ0tfQ1RTX1RJTUVPVVRfQUNLX1RJTUVPVVRfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9BQ0tfQ1RTX1RJTUVPVVRfQUNLX1RJTUVPVVRfTUFTSykgPj4gTUFDX1BDVV9BQ0tfQ1RTX1RJTUVPVVRfQUNLX1RJTUVPVVRfTFNCKQotI2RlZmluZSBNQUNfUENVX0FDS19DVFNfVElNRU9VVF9BQ0tfVElNRU9VVF9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9BQ0tfQ1RTX1RJTUVPVVRfQUNLX1RJTUVPVVRfTFNCKSAmIE1BQ19QQ1VfQUNLX0NUU19USU1FT1VUX0FDS19USU1FT1VUX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9CQ05fUlNTSV9DVExfQUREUkVTUyAgICAgICAgICAgICAweDAwMDA4MDE4Ci0jZGVmaW5lIE1BQ19QQ1VfQkNOX1JTU0lfQ1RMX09GRlNFVCAgICAgICAgICAgICAgMHgwMDAwMDAxOAotI2RlZmluZSBNQUNfUENVX0JDTl9SU1NJX0NUTF9SRVNFVF9NU0IgICAgICAgICAgIDI5Ci0jZGVmaW5lIE1BQ19QQ1VfQkNOX1JTU0lfQ1RMX1JFU0VUX0xTQiAgICAgICAgICAgMjkKLSNkZWZpbmUgTUFDX1BDVV9CQ05fUlNTSV9DVExfUkVTRVRfTUFTSyAgICAgICAgICAweDIwMDAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfQkNOX1JTU0lfQ1RMX1JFU0VUX0dFVCh4KSAgICAgICAgKCgoeCkgJiBNQUNfUENVX0JDTl9SU1NJX0NUTF9SRVNFVF9NQVNLKSA+PiBNQUNfUENVX0JDTl9SU1NJX0NUTF9SRVNFVF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQkNOX1JTU0lfQ1RMX1JFU0VUX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9CQ05fUlNTSV9DVExfUkVTRVRfTFNCKSAmIE1BQ19QQ1VfQkNOX1JTU0lfQ1RMX1JFU0VUX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfQkNOX1JTU0lfQ1RMX1dFSUdIVF9NU0IgICAgICAgICAgMjgKLSNkZWZpbmUgTUFDX1BDVV9CQ05fUlNTSV9DVExfV0VJR0hUX0xTQiAgICAgICAgICAyNAotI2RlZmluZSBNQUNfUENVX0JDTl9SU1NJX0NUTF9XRUlHSFRfTUFTSyAgICAgICAgIDB4MWYwMDAwMDAKLSNkZWZpbmUgTUFDX1BDVV9CQ05fUlNTSV9DVExfV0VJR0hUX0dFVCh4KSAgICAgICAoKCh4KSAmIE1BQ19QQ1VfQkNOX1JTU0lfQ1RMX1dFSUdIVF9NQVNLKSA+PiBNQUNfUENVX0JDTl9SU1NJX0NUTF9XRUlHSFRfTFNCKQotI2RlZmluZSBNQUNfUENVX0JDTl9SU1NJX0NUTF9XRUlHSFRfU0VUKHgpICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfQkNOX1JTU0lfQ1RMX1dFSUdIVF9MU0IpICYgTUFDX1BDVV9CQ05fUlNTSV9DVExfV0VJR0hUX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfQkNOX1JTU0lfQ1RMX1JTU0lfSElHSF9USFJFU0hfTVNCIDIzCi0jZGVmaW5lIE1BQ19QQ1VfQkNOX1JTU0lfQ1RMX1JTU0lfSElHSF9USFJFU0hfTFNCIDE2Ci0jZGVmaW5lIE1BQ19QQ1VfQkNOX1JTU0lfQ1RMX1JTU0lfSElHSF9USFJFU0hfTUFTSyAweDAwZmYwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfQkNOX1JTU0lfQ1RMX1JTU0lfSElHSF9USFJFU0hfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9CQ05fUlNTSV9DVExfUlNTSV9ISUdIX1RIUkVTSF9NQVNLKSA+PiBNQUNfUENVX0JDTl9SU1NJX0NUTF9SU1NJX0hJR0hfVEhSRVNIX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9CQ05fUlNTSV9DVExfUlNTSV9ISUdIX1RIUkVTSF9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9CQ05fUlNTSV9DVExfUlNTSV9ISUdIX1RIUkVTSF9MU0IpICYgTUFDX1BDVV9CQ05fUlNTSV9DVExfUlNTSV9ISUdIX1RIUkVTSF9NQVNLKQotI2RlZmluZSBNQUNfUENVX0JDTl9SU1NJX0NUTF9NSVNTX1RIUkVTSF9NU0IgICAgIDE1Ci0jZGVmaW5lIE1BQ19QQ1VfQkNOX1JTU0lfQ1RMX01JU1NfVEhSRVNIX0xTQiAgICAgOAotI2RlZmluZSBNQUNfUENVX0JDTl9SU1NJX0NUTF9NSVNTX1RIUkVTSF9NQVNLICAgIDB4MDAwMGZmMDAKLSNkZWZpbmUgTUFDX1BDVV9CQ05fUlNTSV9DVExfTUlTU19USFJFU0hfR0VUKHgpICAoKCh4KSAmIE1BQ19QQ1VfQkNOX1JTU0lfQ1RMX01JU1NfVEhSRVNIX01BU0spID4+IE1BQ19QQ1VfQkNOX1JTU0lfQ1RMX01JU1NfVEhSRVNIX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9CQ05fUlNTSV9DVExfTUlTU19USFJFU0hfU0VUKHgpICAoKCh4KSA8PCBNQUNfUENVX0JDTl9SU1NJX0NUTF9NSVNTX1RIUkVTSF9MU0IpICYgTUFDX1BDVV9CQ05fUlNTSV9DVExfTUlTU19USFJFU0hfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9CQ05fUlNTSV9DVExfUlNTSV9MT1dfVEhSRVNIX01TQiA3Ci0jZGVmaW5lIE1BQ19QQ1VfQkNOX1JTU0lfQ1RMX1JTU0lfTE9XX1RIUkVTSF9MU0IgMAotI2RlZmluZSBNQUNfUENVX0JDTl9SU1NJX0NUTF9SU1NJX0xPV19USFJFU0hfTUFTSyAweDAwMDAwMGZmCi0jZGVmaW5lIE1BQ19QQ1VfQkNOX1JTU0lfQ1RMX1JTU0lfTE9XX1RIUkVTSF9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0JDTl9SU1NJX0NUTF9SU1NJX0xPV19USFJFU0hfTUFTSykgPj4gTUFDX1BDVV9CQ05fUlNTSV9DVExfUlNTSV9MT1dfVEhSRVNIX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9CQ05fUlNTSV9DVExfUlNTSV9MT1dfVEhSRVNIX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0JDTl9SU1NJX0NUTF9SU1NJX0xPV19USFJFU0hfTFNCKSAmIE1BQ19QQ1VfQkNOX1JTU0lfQ1RMX1JTU0lfTE9XX1RIUkVTSF9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfVVNFQ19MQVRFTkNZX0FERFJFU1MgICAgICAgICAgICAgMHgwMDAwODAxYwotI2RlZmluZSBNQUNfUENVX1VTRUNfTEFURU5DWV9PRkZTRVQgICAgICAgICAgICAgIDB4MDAwMDAwMWMKLSNkZWZpbmUgTUFDX1BDVV9VU0VDX0xBVEVOQ1lfUlhfTEFURU5DWV9NU0IgICAgICAyOAotI2RlZmluZSBNQUNfUENVX1VTRUNfTEFURU5DWV9SWF9MQVRFTkNZX0xTQiAgICAgIDIzCi0jZGVmaW5lIE1BQ19QQ1VfVVNFQ19MQVRFTkNZX1JYX0xBVEVOQ1lfTUFTSyAgICAgMHgxZjgwMDAwMAotI2RlZmluZSBNQUNfUENVX1VTRUNfTEFURU5DWV9SWF9MQVRFTkNZX0dFVCh4KSAgICgoKHgpICYgTUFDX1BDVV9VU0VDX0xBVEVOQ1lfUlhfTEFURU5DWV9NQVNLKSA+PiBNQUNfUENVX1VTRUNfTEFURU5DWV9SWF9MQVRFTkNZX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9VU0VDX0xBVEVOQ1lfUlhfTEFURU5DWV9TRVQoeCkgICAoKCh4KSA8PCBNQUNfUENVX1VTRUNfTEFURU5DWV9SWF9MQVRFTkNZX0xTQikgJiBNQUNfUENVX1VTRUNfTEFURU5DWV9SWF9MQVRFTkNZX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfVVNFQ19MQVRFTkNZX1RYX0xBVEVOQ1lfTVNCICAgICAgMjIKLSNkZWZpbmUgTUFDX1BDVV9VU0VDX0xBVEVOQ1lfVFhfTEFURU5DWV9MU0IgICAgICAxNAotI2RlZmluZSBNQUNfUENVX1VTRUNfTEFURU5DWV9UWF9MQVRFTkNZX01BU0sgICAgIDB4MDA3ZmMwMDAKLSNkZWZpbmUgTUFDX1BDVV9VU0VDX0xBVEVOQ1lfVFhfTEFURU5DWV9HRVQoeCkgICAoKCh4KSAmIE1BQ19QQ1VfVVNFQ19MQVRFTkNZX1RYX0xBVEVOQ1lfTUFTSykgPj4gTUFDX1BDVV9VU0VDX0xBVEVOQ1lfVFhfTEFURU5DWV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfVVNFQ19MQVRFTkNZX1RYX0xBVEVOQ1lfU0VUKHgpICAgKCgoeCkgPDwgTUFDX1BDVV9VU0VDX0xBVEVOQ1lfVFhfTEFURU5DWV9MU0IpICYgTUFDX1BDVV9VU0VDX0xBVEVOQ1lfVFhfTEFURU5DWV9NQVNLKQotI2RlZmluZSBNQUNfUENVX1VTRUNfTEFURU5DWV9VU0VDX01TQiAgICAgICAgICAgIDcKLSNkZWZpbmUgTUFDX1BDVV9VU0VDX0xBVEVOQ1lfVVNFQ19MU0IgICAgICAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfVVNFQ19MQVRFTkNZX1VTRUNfTUFTSyAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBNQUNfUENVX1VTRUNfTEFURU5DWV9VU0VDX0dFVCh4KSAgICAgICAgICgoKHgpICYgTUFDX1BDVV9VU0VDX0xBVEVOQ1lfVVNFQ19NQVNLKSA+PiBNQUNfUENVX1VTRUNfTEFURU5DWV9VU0VDX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9VU0VDX0xBVEVOQ1lfVVNFQ19TRVQoeCkgICAgICAgICAoKCh4KSA8PCBNQUNfUENVX1VTRUNfTEFURU5DWV9VU0VDX0xTQikgJiBNQUNfUENVX1VTRUNfTEFURU5DWV9VU0VDX01BU0spCi0KLSNkZWZpbmUgUENVX01BWF9DRlBfRFVSX0FERFJFU1MgICAgICAgICAgICAgICAgICAweDAwMDA4MDIwCi0jZGVmaW5lIFBDVV9NQVhfQ0ZQX0RVUl9PRkZTRVQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBQQ1VfTUFYX0NGUF9EVVJfVkFMVUVfTVNCICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFBDVV9NQVhfQ0ZQX0RVUl9WQUxVRV9MU0IgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQQ1VfTUFYX0NGUF9EVVJfVkFMVUVfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMGZmZmYKLSNkZWZpbmUgUENVX01BWF9DRlBfRFVSX1ZBTFVFX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIFBDVV9NQVhfQ0ZQX0RVUl9WQUxVRV9NQVNLKSA+PiBQQ1VfTUFYX0NGUF9EVVJfVkFMVUVfTFNCKQotI2RlZmluZSBQQ1VfTUFYX0NGUF9EVVJfVkFMVUVfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IFBDVV9NQVhfQ0ZQX0RVUl9WQUxVRV9MU0IpICYgUENVX01BWF9DRlBfRFVSX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfQUREUkVTUyAgICAgICAgICAgICAgICAweDAwMDA4MDI0Ci0jZGVmaW5lIE1BQ19QQ1VfUlhfRklMVEVSX09GRlNFVCAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9HRU5FUklDX0ZJTFRFUl9NU0IgICAgIDI1Ci0jZGVmaW5lIE1BQ19QQ1VfUlhfRklMVEVSX0dFTkVSSUNfRklMVEVSX0xTQiAgICAgMjQKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfR0VORVJJQ19GSUxURVJfTUFTSyAgICAweDAzMDAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfUlhfRklMVEVSX0dFTkVSSUNfRklMVEVSX0dFVCh4KSAgKCgoeCkgJiBNQUNfUENVX1JYX0ZJTFRFUl9HRU5FUklDX0ZJTFRFUl9NQVNLKSA+PiBNQUNfUENVX1JYX0ZJTFRFUl9HRU5FUklDX0ZJTFRFUl9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfUlhfRklMVEVSX0dFTkVSSUNfRklMVEVSX1NFVCh4KSAgKCgoeCkgPDwgTUFDX1BDVV9SWF9GSUxURVJfR0VORVJJQ19GSUxURVJfTFNCKSAmIE1BQ19QQ1VfUlhfRklMVEVSX0dFTkVSSUNfRklMVEVSX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfUlhfRklMVEVSX0dFTkVSSUNfRlRZUEVfTVNCICAgICAgMjMKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfR0VORVJJQ19GVFlQRV9MU0IgICAgICAxOAotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9HRU5FUklDX0ZUWVBFX01BU0sgICAgIDB4MDBmYzAwMDAKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfR0VORVJJQ19GVFlQRV9HRVQoeCkgICAoKCh4KSAmIE1BQ19QQ1VfUlhfRklMVEVSX0dFTkVSSUNfRlRZUEVfTUFTSykgPj4gTUFDX1BDVV9SWF9GSUxURVJfR0VORVJJQ19GVFlQRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfUlhfRklMVEVSX0dFTkVSSUNfRlRZUEVfU0VUKHgpICAgKCgoeCkgPDwgTUFDX1BDVV9SWF9GSUxURVJfR0VORVJJQ19GVFlQRV9MU0IpICYgTUFDX1BDVV9SWF9GSUxURVJfR0VORVJJQ19GVFlQRV9NQVNLKQotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9GUk9NX1RPX0RTX01TQiAgICAgICAgIDE3Ci0jZGVmaW5lIE1BQ19QQ1VfUlhfRklMVEVSX0ZST01fVE9fRFNfTFNCICAgICAgICAgMTcKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfRlJPTV9UT19EU19NQVNLICAgICAgICAweDAwMDIwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfUlhfRklMVEVSX0ZST01fVE9fRFNfR0VUKHgpICAgICAgKCgoeCkgJiBNQUNfUENVX1JYX0ZJTFRFUl9GUk9NX1RPX0RTX01BU0spID4+IE1BQ19QQ1VfUlhfRklMVEVSX0ZST01fVE9fRFNfTFNCKQotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9GUk9NX1RPX0RTX1NFVCh4KSAgICAgICgoKHgpIDw8IE1BQ19QQ1VfUlhfRklMVEVSX0ZST01fVE9fRFNfTFNCKSAmIE1BQ19QQ1VfUlhfRklMVEVSX0ZST01fVE9fRFNfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfUlNUX0RMTVRSX0NOVF9ESVNBQkxFX01TQiAxNgotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9SU1RfRExNVFJfQ05UX0RJU0FCTEVfTFNCIDE2Ci0jZGVmaW5lIE1BQ19QQ1VfUlhfRklMVEVSX1JTVF9ETE1UUl9DTlRfRElTQUJMRV9NQVNLIDB4MDAwMTAwMDAKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfUlNUX0RMTVRSX0NOVF9ESVNBQkxFX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfUlhfRklMVEVSX1JTVF9ETE1UUl9DTlRfRElTQUJMRV9NQVNLKSA+PiBNQUNfUENVX1JYX0ZJTFRFUl9SU1RfRExNVFJfQ05UX0RJU0FCTEVfTFNCKQotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9SU1RfRExNVFJfQ05UX0RJU0FCTEVfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfUlhfRklMVEVSX1JTVF9ETE1UUl9DTlRfRElTQUJMRV9MU0IpICYgTUFDX1BDVV9SWF9GSUxURVJfUlNUX0RMTVRSX0NOVF9ESVNBQkxFX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfUlhfRklMVEVSX01DQVNUX0JDQVNUX0FMTF9NU0IgICAgMTUKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfTUNBU1RfQkNBU1RfQUxMX0xTQiAgICAxNQotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9NQ0FTVF9CQ0FTVF9BTExfTUFTSyAgIDB4MDAwMDgwMDAKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfTUNBU1RfQkNBU1RfQUxMX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfUlhfRklMVEVSX01DQVNUX0JDQVNUX0FMTF9NQVNLKSA+PiBNQUNfUENVX1JYX0ZJTFRFUl9NQ0FTVF9CQ0FTVF9BTExfTFNCKQotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9NQ0FTVF9CQ0FTVF9BTExfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfUlhfRklMVEVSX01DQVNUX0JDQVNUX0FMTF9MU0IpICYgTUFDX1BDVV9SWF9GSUxURVJfTUNBU1RfQkNBU1RfQUxMX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfUlhfRklMVEVSX1BTX1BPTExfTVNCICAgICAgICAgICAgMTQKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfUFNfUE9MTF9MU0IgICAgICAgICAgICAxNAotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9QU19QT0xMX01BU0sgICAgICAgICAgIDB4MDAwMDQwMDAKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfUFNfUE9MTF9HRVQoeCkgICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfUlhfRklMVEVSX1BTX1BPTExfTUFTSykgPj4gTUFDX1BDVV9SWF9GSUxURVJfUFNfUE9MTF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfUlhfRklMVEVSX1BTX1BPTExfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9SWF9GSUxURVJfUFNfUE9MTF9MU0IpICYgTUFDX1BDVV9SWF9GSUxURVJfUFNfUE9MTF9NQVNLKQotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9BU1NVTUVfUkFEQVJfTVNCICAgICAgIDEzCi0jZGVmaW5lIE1BQ19QQ1VfUlhfRklMVEVSX0FTU1VNRV9SQURBUl9MU0IgICAgICAgMTMKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfQVNTVU1FX1JBREFSX01BU0sgICAgICAweDAwMDAyMDAwCi0jZGVmaW5lIE1BQ19QQ1VfUlhfRklMVEVSX0FTU1VNRV9SQURBUl9HRVQoeCkgICAgKCgoeCkgJiBNQUNfUENVX1JYX0ZJTFRFUl9BU1NVTUVfUkFEQVJfTUFTSykgPj4gTUFDX1BDVV9SWF9GSUxURVJfQVNTVU1FX1JBREFSX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfQVNTVU1FX1JBREFSX1NFVCh4KSAgICAoKCh4KSA8PCBNQUNfUENVX1JYX0ZJTFRFUl9BU1NVTUVfUkFEQVJfTFNCKSAmIE1BQ19QQ1VfUlhfRklMVEVSX0FTU1VNRV9SQURBUl9NQVNLKQotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9VTkNPTVBSRVNTRURfQkFfQkFSX01TQiAxMgotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9VTkNPTVBSRVNTRURfQkFfQkFSX0xTQiAxMgotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9VTkNPTVBSRVNTRURfQkFfQkFSX01BU0sgMHgwMDAwMTAwMAotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9VTkNPTVBSRVNTRURfQkFfQkFSX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfUlhfRklMVEVSX1VOQ09NUFJFU1NFRF9CQV9CQVJfTUFTSykgPj4gTUFDX1BDVV9SWF9GSUxURVJfVU5DT01QUkVTU0VEX0JBX0JBUl9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfUlhfRklMVEVSX1VOQ09NUFJFU1NFRF9CQV9CQVJfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfUlhfRklMVEVSX1VOQ09NUFJFU1NFRF9CQV9CQVJfTFNCKSAmIE1BQ19QQ1VfUlhfRklMVEVSX1VOQ09NUFJFU1NFRF9CQV9CQVJfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfQ09NUFJFU1NFRF9CQV9NU0IgICAgICAxMQotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9DT01QUkVTU0VEX0JBX0xTQiAgICAgIDExCi0jZGVmaW5lIE1BQ19QQ1VfUlhfRklMVEVSX0NPTVBSRVNTRURfQkFfTUFTSyAgICAgMHgwMDAwMDgwMAotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9DT01QUkVTU0VEX0JBX0dFVCh4KSAgICgoKHgpICYgTUFDX1BDVV9SWF9GSUxURVJfQ09NUFJFU1NFRF9CQV9NQVNLKSA+PiBNQUNfUENVX1JYX0ZJTFRFUl9DT01QUkVTU0VEX0JBX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfQ09NUFJFU1NFRF9CQV9TRVQoeCkgICAoKCh4KSA8PCBNQUNfUENVX1JYX0ZJTFRFUl9DT01QUkVTU0VEX0JBX0xTQikgJiBNQUNfUENVX1JYX0ZJTFRFUl9DT01QUkVTU0VEX0JBX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfUlhfRklMVEVSX0NPTVBSRVNTRURfQkFSX01TQiAgICAgMTAKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfQ09NUFJFU1NFRF9CQVJfTFNCICAgICAxMAotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9DT01QUkVTU0VEX0JBUl9NQVNLICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfQ09NUFJFU1NFRF9CQVJfR0VUKHgpICAoKCh4KSAmIE1BQ19QQ1VfUlhfRklMVEVSX0NPTVBSRVNTRURfQkFSX01BU0spID4+IE1BQ19QQ1VfUlhfRklMVEVSX0NPTVBSRVNTRURfQkFSX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfQ09NUFJFU1NFRF9CQVJfU0VUKHgpICAoKCh4KSA8PCBNQUNfUENVX1JYX0ZJTFRFUl9DT01QUkVTU0VEX0JBUl9MU0IpICYgTUFDX1BDVV9SWF9GSUxURVJfQ09NUFJFU1NFRF9CQVJfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfTVlfQkVBQ09OX01TQiAgICAgICAgICA5Ci0jZGVmaW5lIE1BQ19QQ1VfUlhfRklMVEVSX01ZX0JFQUNPTl9MU0IgICAgICAgICAgOQotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9NWV9CRUFDT05fTUFTSyAgICAgICAgIDB4MDAwMDAyMDAKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfTVlfQkVBQ09OX0dFVCh4KSAgICAgICAoKCh4KSAmIE1BQ19QQ1VfUlhfRklMVEVSX01ZX0JFQUNPTl9NQVNLKSA+PiBNQUNfUENVX1JYX0ZJTFRFUl9NWV9CRUFDT05fTFNCKQotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9NWV9CRUFDT05fU0VUKHgpICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfUlhfRklMVEVSX01ZX0JFQUNPTl9MU0IpICYgTUFDX1BDVV9SWF9GSUxURVJfTVlfQkVBQ09OX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfUlhfRklMVEVSX1NZTkNfRlJBTUVfTVNCICAgICAgICAgOAotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9TWU5DX0ZSQU1FX0xTQiAgICAgICAgIDgKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfU1lOQ19GUkFNRV9NQVNLICAgICAgICAweDAwMDAwMTAwCi0jZGVmaW5lIE1BQ19QQ1VfUlhfRklMVEVSX1NZTkNfRlJBTUVfR0VUKHgpICAgICAgKCgoeCkgJiBNQUNfUENVX1JYX0ZJTFRFUl9TWU5DX0ZSQU1FX01BU0spID4+IE1BQ19QQ1VfUlhfRklMVEVSX1NZTkNfRlJBTUVfTFNCKQotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9TWU5DX0ZSQU1FX1NFVCh4KSAgICAgICgoKHgpIDw8IE1BQ19QQ1VfUlhfRklMVEVSX1NZTkNfRlJBTUVfTFNCKSAmIE1BQ19QQ1VfUlhfRklMVEVSX1NZTkNfRlJBTUVfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfUFJPQkVfUkVRX01TQiAgICAgICAgICA3Ci0jZGVmaW5lIE1BQ19QQ1VfUlhfRklMVEVSX1BST0JFX1JFUV9MU0IgICAgICAgICAgNwotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9QUk9CRV9SRVFfTUFTSyAgICAgICAgIDB4MDAwMDAwODAKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfUFJPQkVfUkVRX0dFVCh4KSAgICAgICAoKCh4KSAmIE1BQ19QQ1VfUlhfRklMVEVSX1BST0JFX1JFUV9NQVNLKSA+PiBNQUNfUENVX1JYX0ZJTFRFUl9QUk9CRV9SRVFfTFNCKQotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9QUk9CRV9SRVFfU0VUKHgpICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfUlhfRklMVEVSX1BST0JFX1JFUV9MU0IpICYgTUFDX1BDVV9SWF9GSUxURVJfUFJPQkVfUkVRX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfUlhfRklMVEVSX1hSX1BPTExfTVNCICAgICAgICAgICAgNgotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9YUl9QT0xMX0xTQiAgICAgICAgICAgIDYKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfWFJfUE9MTF9NQVNLICAgICAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIE1BQ19QQ1VfUlhfRklMVEVSX1hSX1BPTExfR0VUKHgpICAgICAgICAgKCgoeCkgJiBNQUNfUENVX1JYX0ZJTFRFUl9YUl9QT0xMX01BU0spID4+IE1BQ19QQ1VfUlhfRklMVEVSX1hSX1BPTExfTFNCKQotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9YUl9QT0xMX1NFVCh4KSAgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfUlhfRklMVEVSX1hSX1BPTExfTFNCKSAmIE1BQ19QQ1VfUlhfRklMVEVSX1hSX1BPTExfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfUFJPTUlTQ1VPVVNfTVNCICAgICAgICA1Ci0jZGVmaW5lIE1BQ19QQ1VfUlhfRklMVEVSX1BST01JU0NVT1VTX0xTQiAgICAgICAgNQotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9QUk9NSVNDVU9VU19NQVNLICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfUFJPTUlTQ1VPVVNfR0VUKHgpICAgICAoKCh4KSAmIE1BQ19QQ1VfUlhfRklMVEVSX1BST01JU0NVT1VTX01BU0spID4+IE1BQ19QQ1VfUlhfRklMVEVSX1BST01JU0NVT1VTX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfUFJPTUlTQ1VPVVNfU0VUKHgpICAgICAoKCh4KSA8PCBNQUNfUENVX1JYX0ZJTFRFUl9QUk9NSVNDVU9VU19MU0IpICYgTUFDX1BDVV9SWF9GSUxURVJfUFJPTUlTQ1VPVVNfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfQkVBQ09OX01TQiAgICAgICAgICAgICA0Ci0jZGVmaW5lIE1BQ19QQ1VfUlhfRklMVEVSX0JFQUNPTl9MU0IgICAgICAgICAgICAgNAotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9CRUFDT05fTUFTSyAgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfQkVBQ09OX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfUlhfRklMVEVSX0JFQUNPTl9NQVNLKSA+PiBNQUNfUENVX1JYX0ZJTFRFUl9CRUFDT05fTFNCKQotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9CRUFDT05fU0VUKHgpICAgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfUlhfRklMVEVSX0JFQUNPTl9MU0IpICYgTUFDX1BDVV9SWF9GSUxURVJfQkVBQ09OX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfUlhfRklMVEVSX0NPTlRST0xfTVNCICAgICAgICAgICAgMwotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9DT05UUk9MX0xTQiAgICAgICAgICAgIDMKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfQ09OVFJPTF9NQVNLICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIE1BQ19QQ1VfUlhfRklMVEVSX0NPTlRST0xfR0VUKHgpICAgICAgICAgKCgoeCkgJiBNQUNfUENVX1JYX0ZJTFRFUl9DT05UUk9MX01BU0spID4+IE1BQ19QQ1VfUlhfRklMVEVSX0NPTlRST0xfTFNCKQotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9DT05UUk9MX1NFVCh4KSAgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfUlhfRklMVEVSX0NPTlRST0xfTFNCKSAmIE1BQ19QQ1VfUlhfRklMVEVSX0NPTlRST0xfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfQlJPQURDQVNUX01TQiAgICAgICAgICAyCi0jZGVmaW5lIE1BQ19QQ1VfUlhfRklMVEVSX0JST0FEQ0FTVF9MU0IgICAgICAgICAgMgotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9CUk9BRENBU1RfTUFTSyAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfQlJPQURDQVNUX0dFVCh4KSAgICAgICAoKCh4KSAmIE1BQ19QQ1VfUlhfRklMVEVSX0JST0FEQ0FTVF9NQVNLKSA+PiBNQUNfUENVX1JYX0ZJTFRFUl9CUk9BRENBU1RfTFNCKQotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9CUk9BRENBU1RfU0VUKHgpICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfUlhfRklMVEVSX0JST0FEQ0FTVF9MU0IpICYgTUFDX1BDVV9SWF9GSUxURVJfQlJPQURDQVNUX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfUlhfRklMVEVSX01VTFRJQ0FTVF9NU0IgICAgICAgICAgMQotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9NVUxUSUNBU1RfTFNCICAgICAgICAgIDEKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfTVVMVElDQVNUX01BU0sgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIE1BQ19QQ1VfUlhfRklMVEVSX01VTFRJQ0FTVF9HRVQoeCkgICAgICAgKCgoeCkgJiBNQUNfUENVX1JYX0ZJTFRFUl9NVUxUSUNBU1RfTUFTSykgPj4gTUFDX1BDVV9SWF9GSUxURVJfTVVMVElDQVNUX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfTVVMVElDQVNUX1NFVCh4KSAgICAgICAoKCh4KSA8PCBNQUNfUENVX1JYX0ZJTFRFUl9NVUxUSUNBU1RfTFNCKSAmIE1BQ19QQ1VfUlhfRklMVEVSX01VTFRJQ0FTVF9NQVNLKQotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9VTklDQVNUX01TQiAgICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfVU5JQ0FTVF9MU0IgICAgICAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfUlhfRklMVEVSX1VOSUNBU1RfTUFTSyAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBNQUNfUENVX1JYX0ZJTFRFUl9VTklDQVNUX0dFVCh4KSAgICAgICAgICgoKHgpICYgTUFDX1BDVV9SWF9GSUxURVJfVU5JQ0FTVF9NQVNLKSA+PiBNQUNfUENVX1JYX0ZJTFRFUl9VTklDQVNUX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9SWF9GSUxURVJfVU5JQ0FTVF9TRVQoeCkgICAgICAgICAoKCh4KSA8PCBNQUNfUENVX1JYX0ZJTFRFUl9VTklDQVNUX0xTQikgJiBNQUNfUENVX1JYX0ZJTFRFUl9VTklDQVNUX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9NQ0FTVF9GSUxURVJfTDMyX0FERFJFU1MgICAgICAgICAweDAwMDA4MDI4Ci0jZGVmaW5lIE1BQ19QQ1VfTUNBU1RfRklMVEVSX0wzMl9PRkZTRVQgICAgICAgICAgMHgwMDAwMDAyOAotI2RlZmluZSBNQUNfUENVX01DQVNUX0ZJTFRFUl9MMzJfVkFMVUVfTVNCICAgICAgIDMxCi0jZGVmaW5lIE1BQ19QQ1VfTUNBU1RfRklMVEVSX0wzMl9WQUxVRV9MU0IgICAgICAgMAotI2RlZmluZSBNQUNfUENVX01DQVNUX0ZJTFRFUl9MMzJfVkFMVUVfTUFTSyAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgTUFDX1BDVV9NQ0FTVF9GSUxURVJfTDMyX1ZBTFVFX0dFVCh4KSAgICAoKCh4KSAmIE1BQ19QQ1VfTUNBU1RfRklMVEVSX0wzMl9WQUxVRV9NQVNLKSA+PiBNQUNfUENVX01DQVNUX0ZJTFRFUl9MMzJfVkFMVUVfTFNCKQotI2RlZmluZSBNQUNfUENVX01DQVNUX0ZJTFRFUl9MMzJfVkFMVUVfU0VUKHgpICAgICgoKHgpIDw8IE1BQ19QQ1VfTUNBU1RfRklMVEVSX0wzMl9WQUxVRV9MU0IpICYgTUFDX1BDVV9NQ0FTVF9GSUxURVJfTDMyX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9NQ0FTVF9GSUxURVJfVTMyX0FERFJFU1MgICAgICAgICAweDAwMDA4MDJjCi0jZGVmaW5lIE1BQ19QQ1VfTUNBU1RfRklMVEVSX1UzMl9PRkZTRVQgICAgICAgICAgMHgwMDAwMDAyYwotI2RlZmluZSBNQUNfUENVX01DQVNUX0ZJTFRFUl9VMzJfVkFMVUVfTVNCICAgICAgIDMxCi0jZGVmaW5lIE1BQ19QQ1VfTUNBU1RfRklMVEVSX1UzMl9WQUxVRV9MU0IgICAgICAgMAotI2RlZmluZSBNQUNfUENVX01DQVNUX0ZJTFRFUl9VMzJfVkFMVUVfTUFTSyAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgTUFDX1BDVV9NQ0FTVF9GSUxURVJfVTMyX1ZBTFVFX0dFVCh4KSAgICAoKCh4KSAmIE1BQ19QQ1VfTUNBU1RfRklMVEVSX1UzMl9WQUxVRV9NQVNLKSA+PiBNQUNfUENVX01DQVNUX0ZJTFRFUl9VMzJfVkFMVUVfTFNCKQotI2RlZmluZSBNQUNfUENVX01DQVNUX0ZJTFRFUl9VMzJfVkFMVUVfU0VUKHgpICAgICgoKHgpIDw8IE1BQ19QQ1VfTUNBU1RfRklMVEVSX1UzMl9WQUxVRV9MU0IpICYgTUFDX1BDVV9NQ0FTVF9GSUxURVJfVTMyX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX0FERFJFU1MgICAgICAgICAgICAgICAgICAweDAwMDA4MDMwCi0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19PRkZTRVQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfREVCVUdfTU9ERV9NU0IgICAgICAgICAgIDMxCi0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19ERUJVR19NT0RFX0xTQiAgICAgICAgICAgMzAKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX0RFQlVHX01PREVfTUFTSyAgICAgICAgICAweGMwMDAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19ERUJVR19NT0RFX0dFVCh4KSAgICAgICAgKCgoeCkgJiBNQUNfUENVX0RJQUdfU1dfREVCVUdfTU9ERV9NQVNLKSA+PiBNQUNfUENVX0RJQUdfU1dfREVCVUdfTU9ERV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19ERUJVR19NT0RFX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9ESUFHX1NXX0RFQlVHX01PREVfTFNCKSAmIE1BQ19QQ1VfRElBR19TV19ERUJVR19NT0RFX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19SWF9DTEVBUl9FWFRfTE9XX01TQiAgICAgMjkKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX1JYX0NMRUFSX0VYVF9MT1dfTFNCICAgICAyOQotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfUlhfQ0xFQVJfRVhUX0xPV19NQVNLICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX1JYX0NMRUFSX0VYVF9MT1dfR0VUKHgpICAoKCh4KSAmIE1BQ19QQ1VfRElBR19TV19SWF9DTEVBUl9FWFRfTE9XX01BU0spID4+IE1BQ19QQ1VfRElBR19TV19SWF9DTEVBUl9FWFRfTE9XX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX1JYX0NMRUFSX0VYVF9MT1dfU0VUKHgpICAoKCh4KSA8PCBNQUNfUENVX0RJQUdfU1dfUlhfQ0xFQVJfRVhUX0xPV19MU0IpICYgTUFDX1BDVV9ESUFHX1NXX1JYX0NMRUFSX0VYVF9MT1dfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX1JYX0NMRUFSX0NUTF9MT1dfTVNCICAgICAyOAotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfUlhfQ0xFQVJfQ1RMX0xPV19MU0IgICAgIDI4Ci0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19SWF9DTEVBUl9DVExfTE9XX01BU0sgICAgMHgxMDAwMDAwMAotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfUlhfQ0xFQVJfQ1RMX0xPV19HRVQoeCkgICgoKHgpICYgTUFDX1BDVV9ESUFHX1NXX1JYX0NMRUFSX0NUTF9MT1dfTUFTSykgPj4gTUFDX1BDVV9ESUFHX1NXX1JYX0NMRUFSX0NUTF9MT1dfTFNCKQotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfUlhfQ0xFQVJfQ1RMX0xPV19TRVQoeCkgICgoKHgpIDw8IE1BQ19QQ1VfRElBR19TV19SWF9DTEVBUl9DVExfTE9XX0xTQikgJiBNQUNfUENVX0RJQUdfU1dfUlhfQ0xFQVJfQ1RMX0xPV19NQVNLKQotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfT0JTX1NFTF8yX01TQiAgICAgICAgICAgIDI3Ci0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19PQlNfU0VMXzJfTFNCICAgICAgICAgICAgMjcKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX09CU19TRUxfMl9NQVNLICAgICAgICAgICAweDA4MDAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19PQlNfU0VMXzJfR0VUKHgpICAgICAgICAgKCgoeCkgJiBNQUNfUENVX0RJQUdfU1dfT0JTX1NFTF8yX01BU0spID4+IE1BQ19QQ1VfRElBR19TV19PQlNfU0VMXzJfTFNCKQotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfT0JTX1NFTF8yX1NFVCh4KSAgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfRElBR19TV19PQlNfU0VMXzJfTFNCKSAmIE1BQ19QQ1VfRElBR19TV19PQlNfU0VMXzJfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX1NBVFVSQVRFX0NZQ0xFX0NOVF9NU0IgICAyNgotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfU0FUVVJBVEVfQ1lDTEVfQ05UX0xTQiAgIDI2Ci0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19TQVRVUkFURV9DWUNMRV9DTlRfTUFTSyAgMHgwNDAwMDAwMAotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfU0FUVVJBVEVfQ1lDTEVfQ05UX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfRElBR19TV19TQVRVUkFURV9DWUNMRV9DTlRfTUFTSykgPj4gTUFDX1BDVV9ESUFHX1NXX1NBVFVSQVRFX0NZQ0xFX0NOVF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19TQVRVUkFURV9DWUNMRV9DTlRfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfRElBR19TV19TQVRVUkFURV9DWUNMRV9DTlRfTFNCKSAmIE1BQ19QQ1VfRElBR19TV19TQVRVUkFURV9DWUNMRV9DTlRfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX0ZPUkNFX1JYX0FCT1JUX01TQiAgICAgICAyNQotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfRk9SQ0VfUlhfQUJPUlRfTFNCICAgICAgIDI1Ci0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19GT1JDRV9SWF9BQk9SVF9NQVNLICAgICAgMHgwMjAwMDAwMAotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfRk9SQ0VfUlhfQUJPUlRfR0VUKHgpICAgICgoKHgpICYgTUFDX1BDVV9ESUFHX1NXX0ZPUkNFX1JYX0FCT1JUX01BU0spID4+IE1BQ19QQ1VfRElBR19TV19GT1JDRV9SWF9BQk9SVF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19GT1JDRV9SWF9BQk9SVF9TRVQoeCkgICAgKCgoeCkgPDwgTUFDX1BDVV9ESUFHX1NXX0ZPUkNFX1JYX0FCT1JUX0xTQikgJiBNQUNfUENVX0RJQUdfU1dfRk9SQ0VfUlhfQUJPUlRfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX0RVQUxfQ0hBSU5fQ0hBTl9JTkZPX01TQiAyNAotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfRFVBTF9DSEFJTl9DSEFOX0lORk9fTFNCIDI0Ci0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19EVUFMX0NIQUlOX0NIQU5fSU5GT19NQVNLIDB4MDEwMDAwMDAKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX0RVQUxfQ0hBSU5fQ0hBTl9JTkZPX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfRElBR19TV19EVUFMX0NIQUlOX0NIQU5fSU5GT19NQVNLKSA+PiBNQUNfUENVX0RJQUdfU1dfRFVBTF9DSEFJTl9DSEFOX0lORk9fTFNCKQotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfRFVBTF9DSEFJTl9DSEFOX0lORk9fU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfRElBR19TV19EVUFMX0NIQUlOX0NIQU5fSU5GT19MU0IpICYgTUFDX1BDVV9ESUFHX1NXX0RVQUxfQ0hBSU5fQ0hBTl9JTkZPX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19QSFlFUlJfRU5BQkxFX0VJRlNfQ1RMX01TQiAyMwotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfUEhZRVJSX0VOQUJMRV9FSUZTX0NUTF9MU0IgMjMKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX1BIWUVSUl9FTkFCTEVfRUlGU19DVExfTUFTSyAweDAwODAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19QSFlFUlJfRU5BQkxFX0VJRlNfQ1RMX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfRElBR19TV19QSFlFUlJfRU5BQkxFX0VJRlNfQ1RMX01BU0spID4+IE1BQ19QQ1VfRElBR19TV19QSFlFUlJfRU5BQkxFX0VJRlNfQ1RMX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX1BIWUVSUl9FTkFCTEVfRUlGU19DVExfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfRElBR19TV19QSFlFUlJfRU5BQkxFX0VJRlNfQ1RMX0xTQikgJiBNQUNfUENVX0RJQUdfU1dfUEhZRVJSX0VOQUJMRV9FSUZTX0NUTF9NQVNLKQotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfQ0hBTl9JRExFX0hJR0hfTVNCICAgICAgIDIyCi0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19DSEFOX0lETEVfSElHSF9MU0IgICAgICAgMjIKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX0NIQU5fSURMRV9ISUdIX01BU0sgICAgICAweDAwNDAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19DSEFOX0lETEVfSElHSF9HRVQoeCkgICAgKCgoeCkgJiBNQUNfUENVX0RJQUdfU1dfQ0hBTl9JRExFX0hJR0hfTUFTSykgPj4gTUFDX1BDVV9ESUFHX1NXX0NIQU5fSURMRV9ISUdIX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX0NIQU5fSURMRV9ISUdIX1NFVCh4KSAgICAoKCh4KSA8PCBNQUNfUENVX0RJQUdfU1dfQ0hBTl9JRExFX0hJR0hfTFNCKSAmIE1BQ19QQ1VfRElBR19TV19DSEFOX0lETEVfSElHSF9NQVNLKQotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfSUdOT1JFX05BVl9NU0IgICAgICAgICAgIDIxCi0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19JR05PUkVfTkFWX0xTQiAgICAgICAgICAgMjEKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX0lHTk9SRV9OQVZfTUFTSyAgICAgICAgICAweDAwMjAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19JR05PUkVfTkFWX0dFVCh4KSAgICAgICAgKCgoeCkgJiBNQUNfUENVX0RJQUdfU1dfSUdOT1JFX05BVl9NQVNLKSA+PiBNQUNfUENVX0RJQUdfU1dfSUdOT1JFX05BVl9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19JR05PUkVfTkFWX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9ESUFHX1NXX0lHTk9SRV9OQVZfTFNCKSAmIE1BQ19QQ1VfRElBR19TV19JR05PUkVfTkFWX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19SWF9DTEVBUl9ISUdIX01TQiAgICAgICAgMjAKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX1JYX0NMRUFSX0hJR0hfTFNCICAgICAgICAyMAotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfUlhfQ0xFQVJfSElHSF9NQVNLICAgICAgIDB4MDAxMDAwMDAKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX1JYX0NMRUFSX0hJR0hfR0VUKHgpICAgICAoKCh4KSAmIE1BQ19QQ1VfRElBR19TV19SWF9DTEVBUl9ISUdIX01BU0spID4+IE1BQ19QQ1VfRElBR19TV19SWF9DTEVBUl9ISUdIX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX1JYX0NMRUFSX0hJR0hfU0VUKHgpICAgICAoKCh4KSA8PCBNQUNfUENVX0RJQUdfU1dfUlhfQ0xFQVJfSElHSF9MU0IpICYgTUFDX1BDVV9ESUFHX1NXX1JYX0NMRUFSX0hJR0hfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX09CU19TRUxfMV8wX01TQiAgICAgICAgICAxOQotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfT0JTX1NFTF8xXzBfTFNCICAgICAgICAgIDE4Ci0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19PQlNfU0VMXzFfMF9NQVNLICAgICAgICAgMHgwMDBjMDAwMAotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfT0JTX1NFTF8xXzBfR0VUKHgpICAgICAgICgoKHgpICYgTUFDX1BDVV9ESUFHX1NXX09CU19TRUxfMV8wX01BU0spID4+IE1BQ19QQ1VfRElBR19TV19PQlNfU0VMXzFfMF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19PQlNfU0VMXzFfMF9TRVQoeCkgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9ESUFHX1NXX09CU19TRUxfMV8wX0xTQikgJiBNQUNfUENVX0RJQUdfU1dfT0JTX1NFTF8xXzBfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX0FDQ0VQVF9OT05fVjBfTVNCICAgICAgICAxNwotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfQUNDRVBUX05PTl9WMF9MU0IgICAgICAgIDE3Ci0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19BQ0NFUFRfTk9OX1YwX01BU0sgICAgICAgMHgwMDAyMDAwMAotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfQUNDRVBUX05PTl9WMF9HRVQoeCkgICAgICgoKHgpICYgTUFDX1BDVV9ESUFHX1NXX0FDQ0VQVF9OT05fVjBfTUFTSykgPj4gTUFDX1BDVV9ESUFHX1NXX0FDQ0VQVF9OT05fVjBfTFNCKQotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfQUNDRVBUX05PTl9WMF9TRVQoeCkgICAgICgoKHgpIDw8IE1BQ19QQ1VfRElBR19TV19BQ0NFUFRfTk9OX1YwX0xTQikgJiBNQUNfUENVX0RJQUdfU1dfQUNDRVBUX05PTl9WMF9NQVNLKQotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfRFVNUF9DSEFOX0lORk9fTVNCICAgICAgIDgKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX0RVTVBfQ0hBTl9JTkZPX0xTQiAgICAgICA4Ci0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19EVU1QX0NIQU5fSU5GT19NQVNLICAgICAgMHgwMDAwMDEwMAotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfRFVNUF9DSEFOX0lORk9fR0VUKHgpICAgICgoKHgpICYgTUFDX1BDVV9ESUFHX1NXX0RVTVBfQ0hBTl9JTkZPX01BU0spID4+IE1BQ19QQ1VfRElBR19TV19EVU1QX0NIQU5fSU5GT19MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19EVU1QX0NIQU5fSU5GT19TRVQoeCkgICAgKCgoeCkgPDwgTUFDX1BDVV9ESUFHX1NXX0RVTVBfQ0hBTl9JTkZPX0xTQikgJiBNQUNfUENVX0RJQUdfU1dfRFVNUF9DSEFOX0lORk9fTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX0NPUlJVUFRfRkNTX01TQiAgICAgICAgICA3Ci0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19DT1JSVVBUX0ZDU19MU0IgICAgICAgICAgNwotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfQ09SUlVQVF9GQ1NfTUFTSyAgICAgICAgIDB4MDAwMDAwODAKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX0NPUlJVUFRfRkNTX0dFVCh4KSAgICAgICAoKCh4KSAmIE1BQ19QQ1VfRElBR19TV19DT1JSVVBUX0ZDU19NQVNLKSA+PiBNQUNfUENVX0RJQUdfU1dfQ09SUlVQVF9GQ1NfTFNCKQotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfQ09SUlVQVF9GQ1NfU0VUKHgpICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfRElBR19TV19DT1JSVVBUX0ZDU19MU0IpICYgTUFDX1BDVV9ESUFHX1NXX0NPUlJVUFRfRkNTX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19MT09QX0JBQ0tfTVNCICAgICAgICAgICAgNgotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfTE9PUF9CQUNLX0xTQiAgICAgICAgICAgIDYKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX0xPT1BfQkFDS19NQVNLICAgICAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19MT09QX0JBQ0tfR0VUKHgpICAgICAgICAgKCgoeCkgJiBNQUNfUENVX0RJQUdfU1dfTE9PUF9CQUNLX01BU0spID4+IE1BQ19QQ1VfRElBR19TV19MT09QX0JBQ0tfTFNCKQotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfTE9PUF9CQUNLX1NFVCh4KSAgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfRElBR19TV19MT09QX0JBQ0tfTFNCKSAmIE1BQ19QQ1VfRElBR19TV19MT09QX0JBQ0tfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX0hBTFRfUlhfTVNCICAgICAgICAgICAgICA1Ci0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19IQUxUX1JYX0xTQiAgICAgICAgICAgICAgNQotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfSEFMVF9SWF9NQVNLICAgICAgICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX0hBTFRfUlhfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfRElBR19TV19IQUxUX1JYX01BU0spID4+IE1BQ19QQ1VfRElBR19TV19IQUxUX1JYX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX0hBTFRfUlhfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCBNQUNfUENVX0RJQUdfU1dfSEFMVF9SWF9MU0IpICYgTUFDX1BDVV9ESUFHX1NXX0hBTFRfUlhfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX05PX0RFQ1JZUFRfTVNCICAgICAgICAgICA0Ci0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19OT19ERUNSWVBUX0xTQiAgICAgICAgICAgNAotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfTk9fREVDUllQVF9NQVNLICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX05PX0RFQ1JZUFRfR0VUKHgpICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfRElBR19TV19OT19ERUNSWVBUX01BU0spID4+IE1BQ19QQ1VfRElBR19TV19OT19ERUNSWVBUX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX05PX0RFQ1JZUFRfU0VUKHgpICAgICAgICAoKCh4KSA8PCBNQUNfUENVX0RJQUdfU1dfTk9fREVDUllQVF9MU0IpICYgTUFDX1BDVV9ESUFHX1NXX05PX0RFQ1JZUFRfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX05PX0VOQ1JZUFRfTVNCICAgICAgICAgICAzCi0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19OT19FTkNSWVBUX0xTQiAgICAgICAgICAgMwotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfTk9fRU5DUllQVF9NQVNLICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX05PX0VOQ1JZUFRfR0VUKHgpICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfRElBR19TV19OT19FTkNSWVBUX01BU0spID4+IE1BQ19QQ1VfRElBR19TV19OT19FTkNSWVBUX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX05PX0VOQ1JZUFRfU0VUKHgpICAgICAgICAoKCh4KSA8PCBNQUNfUENVX0RJQUdfU1dfTk9fRU5DUllQVF9MU0IpICYgTUFDX1BDVV9ESUFHX1NXX05PX0VOQ1JZUFRfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX05PX0NUU19NU0IgICAgICAgICAgICAgICAyCi0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19OT19DVFNfTFNCICAgICAgICAgICAgICAgMgotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfTk9fQ1RTX01BU0sgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX05PX0NUU19HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfRElBR19TV19OT19DVFNfTUFTSykgPj4gTUFDX1BDVV9ESUFHX1NXX05PX0NUU19MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19OT19DVFNfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9ESUFHX1NXX05PX0NUU19MU0IpICYgTUFDX1BDVV9ESUFHX1NXX05PX0NUU19NQVNLKQotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfTk9fQUNLX01TQiAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX05PX0FDS19MU0IgICAgICAgICAgICAgICAxCi0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19OT19BQ0tfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfTk9fQUNLX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgTUFDX1BDVV9ESUFHX1NXX05PX0FDS19NQVNLKSA+PiBNQUNfUENVX0RJQUdfU1dfTk9fQUNLX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX05PX0FDS19TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBNQUNfUENVX0RJQUdfU1dfTk9fQUNLX0xTQikgJiBNQUNfUENVX0RJQUdfU1dfTk9fQUNLX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19JTlZBTElEX0tFWV9OT19BQ0tfTVNCICAgMAotI2RlZmluZSBNQUNfUENVX0RJQUdfU1dfSU5WQUxJRF9LRVlfTk9fQUNLX0xTQiAgIDAKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX0lOVkFMSURfS0VZX05PX0FDS19NQVNLICAweDAwMDAwMDAxCi0jZGVmaW5lIE1BQ19QQ1VfRElBR19TV19JTlZBTElEX0tFWV9OT19BQ0tfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9ESUFHX1NXX0lOVkFMSURfS0VZX05PX0FDS19NQVNLKSA+PiBNQUNfUENVX0RJQUdfU1dfSU5WQUxJRF9LRVlfTk9fQUNLX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9ESUFHX1NXX0lOVkFMSURfS0VZX05PX0FDS19TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9ESUFHX1NXX0lOVkFMSURfS0VZX05PX0FDS19MU0IpICYgTUFDX1BDVV9ESUFHX1NXX0lOVkFMSURfS0VZX05PX0FDS19NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfVFNUX0FEREFDX0FERFJFU1MgICAgICAgICAgICAgICAgMHgwMDAwODAzNAotI2RlZmluZSBNQUNfUENVX1RTVF9BRERBQ19PRkZTRVQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKLSNkZWZpbmUgTUFDX1BDVV9UU1RfQUREQUNfVEVTVF9BUk1fTVNCICAgICAgICAgICAyMAotI2RlZmluZSBNQUNfUENVX1RTVF9BRERBQ19URVNUX0FSTV9MU0IgICAgICAgICAgIDIwCi0jZGVmaW5lIE1BQ19QQ1VfVFNUX0FEREFDX1RFU1RfQVJNX01BU0sgICAgICAgICAgMHgwMDEwMDAwMAotI2RlZmluZSBNQUNfUENVX1RTVF9BRERBQ19URVNUX0FSTV9HRVQoeCkgICAgICAgICgoKHgpICYgTUFDX1BDVV9UU1RfQUREQUNfVEVTVF9BUk1fTUFTSykgPj4gTUFDX1BDVV9UU1RfQUREQUNfVEVTVF9BUk1fTFNCKQotI2RlZmluZSBNQUNfUENVX1RTVF9BRERBQ19URVNUX0FSTV9TRVQoeCkgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfVFNUX0FEREFDX1RFU1RfQVJNX0xTQikgJiBNQUNfUENVX1RTVF9BRERBQ19URVNUX0FSTV9NQVNLKQotI2RlZmluZSBNQUNfUENVX1RTVF9BRERBQ19URVNUX0NBUFRVUkVfTVNCICAgICAgIDE5Ci0jZGVmaW5lIE1BQ19QQ1VfVFNUX0FEREFDX1RFU1RfQ0FQVFVSRV9MU0IgICAgICAgMTkKLSNkZWZpbmUgTUFDX1BDVV9UU1RfQUREQUNfVEVTVF9DQVBUVVJFX01BU0sgICAgICAweDAwMDgwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfVFNUX0FEREFDX1RFU1RfQ0FQVFVSRV9HRVQoeCkgICAgKCgoeCkgJiBNQUNfUENVX1RTVF9BRERBQ19URVNUX0NBUFRVUkVfTUFTSykgPj4gTUFDX1BDVV9UU1RfQUREQUNfVEVTVF9DQVBUVVJFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9UU1RfQUREQUNfVEVTVF9DQVBUVVJFX1NFVCh4KSAgICAoKCh4KSA8PCBNQUNfUENVX1RTVF9BRERBQ19URVNUX0NBUFRVUkVfTFNCKSAmIE1BQ19QQ1VfVFNUX0FEREFDX1RFU1RfQ0FQVFVSRV9NQVNLKQotI2RlZmluZSBNQUNfUENVX1RTVF9BRERBQ19DT05UX1RFU1RfTVNCICAgICAgICAgIDE4Ci0jZGVmaW5lIE1BQ19QQ1VfVFNUX0FEREFDX0NPTlRfVEVTVF9MU0IgICAgICAgICAgMTgKLSNkZWZpbmUgTUFDX1BDVV9UU1RfQUREQUNfQ09OVF9URVNUX01BU0sgICAgICAgICAweDAwMDQwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfVFNUX0FEREFDX0NPTlRfVEVTVF9HRVQoeCkgICAgICAgKCgoeCkgJiBNQUNfUENVX1RTVF9BRERBQ19DT05UX1RFU1RfTUFTSykgPj4gTUFDX1BDVV9UU1RfQUREQUNfQ09OVF9URVNUX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9UU1RfQUREQUNfQ09OVF9URVNUX1NFVCh4KSAgICAgICAoKCh4KSA8PCBNQUNfUENVX1RTVF9BRERBQ19DT05UX1RFU1RfTFNCKSAmIE1BQ19QQ1VfVFNUX0FEREFDX0NPTlRfVEVTVF9NQVNLKQotI2RlZmluZSBNQUNfUENVX1RTVF9BRERBQ19UUklHX1BPTEFSSVRZX01TQiAgICAgIDE3Ci0jZGVmaW5lIE1BQ19QQ1VfVFNUX0FEREFDX1RSSUdfUE9MQVJJVFlfTFNCICAgICAgMTcKLSNkZWZpbmUgTUFDX1BDVV9UU1RfQUREQUNfVFJJR19QT0xBUklUWV9NQVNLICAgICAweDAwMDIwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfVFNUX0FEREFDX1RSSUdfUE9MQVJJVFlfR0VUKHgpICAgKCgoeCkgJiBNQUNfUENVX1RTVF9BRERBQ19UUklHX1BPTEFSSVRZX01BU0spID4+IE1BQ19QQ1VfVFNUX0FEREFDX1RSSUdfUE9MQVJJVFlfTFNCKQotI2RlZmluZSBNQUNfUENVX1RTVF9BRERBQ19UUklHX1BPTEFSSVRZX1NFVCh4KSAgICgoKHgpIDw8IE1BQ19QQ1VfVFNUX0FEREFDX1RSSUdfUE9MQVJJVFlfTFNCKSAmIE1BQ19QQ1VfVFNUX0FEREFDX1RSSUdfUE9MQVJJVFlfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9UU1RfQUREQUNfVFJJR19TRUxfTVNCICAgICAgICAgICAxNgotI2RlZmluZSBNQUNfUENVX1RTVF9BRERBQ19UUklHX1NFTF9MU0IgICAgICAgICAgIDE2Ci0jZGVmaW5lIE1BQ19QQ1VfVFNUX0FEREFDX1RSSUdfU0VMX01BU0sgICAgICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBNQUNfUENVX1RTVF9BRERBQ19UUklHX1NFTF9HRVQoeCkgICAgICAgICgoKHgpICYgTUFDX1BDVV9UU1RfQUREQUNfVFJJR19TRUxfTUFTSykgPj4gTUFDX1BDVV9UU1RfQUREQUNfVFJJR19TRUxfTFNCKQotI2RlZmluZSBNQUNfUENVX1RTVF9BRERBQ19UUklHX1NFTF9TRVQoeCkgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfVFNUX0FEREFDX1RSSUdfU0VMX0xTQikgJiBNQUNfUENVX1RTVF9BRERBQ19UUklHX1NFTF9NQVNLKQotI2RlZmluZSBNQUNfUENVX1RTVF9BRERBQ19VUFBFUl84Ql9NU0IgICAgICAgICAgIDE0Ci0jZGVmaW5lIE1BQ19QQ1VfVFNUX0FEREFDX1VQUEVSXzhCX0xTQiAgICAgICAgICAgMTQKLSNkZWZpbmUgTUFDX1BDVV9UU1RfQUREQUNfVVBQRVJfOEJfTUFTSyAgICAgICAgICAweDAwMDA0MDAwCi0jZGVmaW5lIE1BQ19QQ1VfVFNUX0FEREFDX1VQUEVSXzhCX0dFVCh4KSAgICAgICAgKCgoeCkgJiBNQUNfUENVX1RTVF9BRERBQ19VUFBFUl84Ql9NQVNLKSA+PiBNQUNfUENVX1RTVF9BRERBQ19VUFBFUl84Ql9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfVFNUX0FEREFDX1VQUEVSXzhCX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9UU1RfQUREQUNfVVBQRVJfOEJfTFNCKSAmIE1BQ19QQ1VfVFNUX0FEREFDX1VQUEVSXzhCX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfVFNUX0FEREFDX0xPT1BfTEVOX01TQiAgICAgICAgICAgMTMKLSNkZWZpbmUgTUFDX1BDVV9UU1RfQUREQUNfTE9PUF9MRU5fTFNCICAgICAgICAgICAzCi0jZGVmaW5lIE1BQ19QQ1VfVFNUX0FEREFDX0xPT1BfTEVOX01BU0sgICAgICAgICAgMHgwMDAwM2ZmOAotI2RlZmluZSBNQUNfUENVX1RTVF9BRERBQ19MT09QX0xFTl9HRVQoeCkgICAgICAgICgoKHgpICYgTUFDX1BDVV9UU1RfQUREQUNfTE9PUF9MRU5fTUFTSykgPj4gTUFDX1BDVV9UU1RfQUREQUNfTE9PUF9MRU5fTFNCKQotI2RlZmluZSBNQUNfUENVX1RTVF9BRERBQ19MT09QX0xFTl9TRVQoeCkgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfVFNUX0FEREFDX0xPT1BfTEVOX0xTQikgJiBNQUNfUENVX1RTVF9BRERBQ19MT09QX0xFTl9NQVNLKQotI2RlZmluZSBNQUNfUENVX1RTVF9BRERBQ19MT09QX01TQiAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgTUFDX1BDVV9UU1RfQUREQUNfTE9PUF9MU0IgICAgICAgICAgICAgICAyCi0jZGVmaW5lIE1BQ19QQ1VfVFNUX0FEREFDX0xPT1BfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBNQUNfUENVX1RTVF9BRERBQ19MT09QX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgTUFDX1BDVV9UU1RfQUREQUNfTE9PUF9NQVNLKSA+PiBNQUNfUENVX1RTVF9BRERBQ19MT09QX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9UU1RfQUREQUNfTE9PUF9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBNQUNfUENVX1RTVF9BRERBQ19MT09QX0xTQikgJiBNQUNfUENVX1RTVF9BRERBQ19MT09QX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfVFNUX0FEREFDX1RFU1RNT0RFX01TQiAgICAgICAgICAgMQotI2RlZmluZSBNQUNfUENVX1RTVF9BRERBQ19URVNUTU9ERV9MU0IgICAgICAgICAgIDEKLSNkZWZpbmUgTUFDX1BDVV9UU1RfQUREQUNfVEVTVE1PREVfTUFTSyAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIE1BQ19QQ1VfVFNUX0FEREFDX1RFU1RNT0RFX0dFVCh4KSAgICAgICAgKCgoeCkgJiBNQUNfUENVX1RTVF9BRERBQ19URVNUTU9ERV9NQVNLKSA+PiBNQUNfUENVX1RTVF9BRERBQ19URVNUTU9ERV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfVFNUX0FEREFDX1RFU1RNT0RFX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9UU1RfQUREQUNfVEVTVE1PREVfTFNCKSAmIE1BQ19QQ1VfVFNUX0FEREFDX1RFU1RNT0RFX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfVFNUX0FEREFDX0NPTlRfVFhfTVNCICAgICAgICAgICAgMAotI2RlZmluZSBNQUNfUENVX1RTVF9BRERBQ19DT05UX1RYX0xTQiAgICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9UU1RfQUREQUNfQ09OVF9UWF9NQVNLICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIE1BQ19QQ1VfVFNUX0FEREFDX0NPTlRfVFhfR0VUKHgpICAgICAgICAgKCgoeCkgJiBNQUNfUENVX1RTVF9BRERBQ19DT05UX1RYX01BU0spID4+IE1BQ19QQ1VfVFNUX0FEREFDX0NPTlRfVFhfTFNCKQotI2RlZmluZSBNQUNfUENVX1RTVF9BRERBQ19DT05UX1RYX1NFVCh4KSAgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfVFNUX0FEREFDX0NPTlRfVFhfTFNCKSAmIE1BQ19QQ1VfVFNUX0FEREFDX0NPTlRfVFhfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX0RFRl9BTlRFTk5BX0FERFJFU1MgICAgICAgICAgICAgIDB4MDAwMDgwMzgKLSNkZWZpbmUgTUFDX1BDVV9ERUZfQU5URU5OQV9PRkZTRVQgICAgICAgICAgICAgICAweDAwMDAwMDM4Ci0jZGVmaW5lIE1BQ19QQ1VfREVGX0FOVEVOTkFfUlhfTE5BX0NPTkZJR19TRUxfTVNCIDI4Ci0jZGVmaW5lIE1BQ19QQ1VfREVGX0FOVEVOTkFfUlhfTE5BX0NPTkZJR19TRUxfTFNCIDI4Ci0jZGVmaW5lIE1BQ19QQ1VfREVGX0FOVEVOTkFfUlhfTE5BX0NPTkZJR19TRUxfTUFTSyAweDEwMDAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfREVGX0FOVEVOTkFfUlhfTE5BX0NPTkZJR19TRUxfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9ERUZfQU5URU5OQV9SWF9MTkFfQ09ORklHX1NFTF9NQVNLKSA+PiBNQUNfUENVX0RFRl9BTlRFTk5BX1JYX0xOQV9DT05GSUdfU0VMX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9ERUZfQU5URU5OQV9SWF9MTkFfQ09ORklHX1NFTF9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9ERUZfQU5URU5OQV9SWF9MTkFfQ09ORklHX1NFTF9MU0IpICYgTUFDX1BDVV9ERUZfQU5URU5OQV9SWF9MTkFfQ09ORklHX1NFTF9NQVNLKQotI2RlZmluZSBNQUNfUENVX0RFRl9BTlRFTk5BX1RYX0RFRl9BTlRfU0VMX01TQiAgIDI0Ci0jZGVmaW5lIE1BQ19QQ1VfREVGX0FOVEVOTkFfVFhfREVGX0FOVF9TRUxfTFNCICAgMjQKLSNkZWZpbmUgTUFDX1BDVV9ERUZfQU5URU5OQV9UWF9ERUZfQU5UX1NFTF9NQVNLICAweDAxMDAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfREVGX0FOVEVOTkFfVFhfREVGX0FOVF9TRUxfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9ERUZfQU5URU5OQV9UWF9ERUZfQU5UX1NFTF9NQVNLKSA+PiBNQUNfUENVX0RFRl9BTlRFTk5BX1RYX0RFRl9BTlRfU0VMX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9ERUZfQU5URU5OQV9UWF9ERUZfQU5UX1NFTF9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9ERUZfQU5URU5OQV9UWF9ERUZfQU5UX1NFTF9MU0IpICYgTUFDX1BDVV9ERUZfQU5URU5OQV9UWF9ERUZfQU5UX1NFTF9NQVNLKQotI2RlZmluZSBNQUNfUENVX0RFRl9BTlRFTk5BX1ZBTFVFX01TQiAgICAgICAgICAgIDIzCi0jZGVmaW5lIE1BQ19QQ1VfREVGX0FOVEVOTkFfVkFMVUVfTFNCICAgICAgICAgICAgMAotI2RlZmluZSBNQUNfUENVX0RFRl9BTlRFTk5BX1ZBTFVFX01BU0sgICAgICAgICAgIDB4MDBmZmZmZmYKLSNkZWZpbmUgTUFDX1BDVV9ERUZfQU5URU5OQV9WQUxVRV9HRVQoeCkgICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfREVGX0FOVEVOTkFfVkFMVUVfTUFTSykgPj4gTUFDX1BDVV9ERUZfQU5URU5OQV9WQUxVRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfREVGX0FOVEVOTkFfVkFMVUVfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9ERUZfQU5URU5OQV9WQUxVRV9MU0IpICYgTUFDX1BDVV9ERUZfQU5URU5OQV9WQUxVRV9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfQUVTX01VVEVfTUFTS18wX0FERFJFU1MgICAgICAgICAgMHgwMDAwODAzYwotI2RlZmluZSBNQUNfUENVX0FFU19NVVRFX01BU0tfMF9PRkZTRVQgICAgICAgICAgIDB4MDAwMDAwM2MKLSNkZWZpbmUgTUFDX1BDVV9BRVNfTVVURV9NQVNLXzBfUU9TX01TQiAgICAgICAgICAzMQotI2RlZmluZSBNQUNfUENVX0FFU19NVVRFX01BU0tfMF9RT1NfTFNCICAgICAgICAgIDE2Ci0jZGVmaW5lIE1BQ19QQ1VfQUVTX01VVEVfTUFTS18wX1FPU19NQVNLICAgICAgICAgMHhmZmZmMDAwMAotI2RlZmluZSBNQUNfUENVX0FFU19NVVRFX01BU0tfMF9RT1NfR0VUKHgpICAgICAgICgoKHgpICYgTUFDX1BDVV9BRVNfTVVURV9NQVNLXzBfUU9TX01BU0spID4+IE1BQ19QQ1VfQUVTX01VVEVfTUFTS18wX1FPU19MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQUVTX01VVEVfTUFTS18wX1FPU19TRVQoeCkgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9BRVNfTVVURV9NQVNLXzBfUU9TX0xTQikgJiBNQUNfUENVX0FFU19NVVRFX01BU0tfMF9RT1NfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9BRVNfTVVURV9NQVNLXzBfRkNfTVNCICAgICAgICAgICAxNQotI2RlZmluZSBNQUNfUENVX0FFU19NVVRFX01BU0tfMF9GQ19MU0IgICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9BRVNfTVVURV9NQVNLXzBfRkNfTUFTSyAgICAgICAgICAweDAwMDBmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfQUVTX01VVEVfTUFTS18wX0ZDX0dFVCh4KSAgICAgICAgKCgoeCkgJiBNQUNfUENVX0FFU19NVVRFX01BU0tfMF9GQ19NQVNLKSA+PiBNQUNfUENVX0FFU19NVVRFX01BU0tfMF9GQ19MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQUVTX01VVEVfTUFTS18wX0ZDX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9BRVNfTVVURV9NQVNLXzBfRkNfTFNCKSAmIE1BQ19QQ1VfQUVTX01VVEVfTUFTS18wX0ZDX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9BRVNfTVVURV9NQVNLXzFfQUREUkVTUyAgICAgICAgICAweDAwMDA4MDQwCi0jZGVmaW5lIE1BQ19QQ1VfQUVTX01VVEVfTUFTS18xX09GRlNFVCAgICAgICAgICAgMHgwMDAwMDA0MAotI2RlZmluZSBNQUNfUENVX0FFU19NVVRFX01BU0tfMV9GQ19NR01UX01TQiAgICAgIDMxCi0jZGVmaW5lIE1BQ19QQ1VfQUVTX01VVEVfTUFTS18xX0ZDX01HTVRfTFNCICAgICAgMTYKLSNkZWZpbmUgTUFDX1BDVV9BRVNfTVVURV9NQVNLXzFfRkNfTUdNVF9NQVNLICAgICAweGZmZmYwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfQUVTX01VVEVfTUFTS18xX0ZDX01HTVRfR0VUKHgpICAgKCgoeCkgJiBNQUNfUENVX0FFU19NVVRFX01BU0tfMV9GQ19NR01UX01BU0spID4+IE1BQ19QQ1VfQUVTX01VVEVfTUFTS18xX0ZDX01HTVRfTFNCKQotI2RlZmluZSBNQUNfUENVX0FFU19NVVRFX01BU0tfMV9GQ19NR01UX1NFVCh4KSAgICgoKHgpIDw8IE1BQ19QQ1VfQUVTX01VVEVfTUFTS18xX0ZDX01HTVRfTFNCKSAmIE1BQ19QQ1VfQUVTX01VVEVfTUFTS18xX0ZDX01HTVRfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9BRVNfTVVURV9NQVNLXzFfU0VRX01TQiAgICAgICAgICAxNQotI2RlZmluZSBNQUNfUENVX0FFU19NVVRFX01BU0tfMV9TRVFfTFNCICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9BRVNfTVVURV9NQVNLXzFfU0VRX01BU0sgICAgICAgICAweDAwMDBmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfQUVTX01VVEVfTUFTS18xX1NFUV9HRVQoeCkgICAgICAgKCgoeCkgJiBNQUNfUENVX0FFU19NVVRFX01BU0tfMV9TRVFfTUFTSykgPj4gTUFDX1BDVV9BRVNfTVVURV9NQVNLXzFfU0VRX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9BRVNfTVVURV9NQVNLXzFfU0VRX1NFVCh4KSAgICAgICAoKCh4KSA8PCBNQUNfUENVX0FFU19NVVRFX01BU0tfMV9TRVFfTFNCKSAmIE1BQ19QQ1VfQUVTX01VVEVfTUFTS18xX1NFUV9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfR0FURURfQ0xLU19BRERSRVNTICAgICAgICAgICAgICAgMHgwMDAwODA0NAotI2RlZmluZSBNQUNfUENVX0dBVEVEX0NMS1NfT0ZGU0VUICAgICAgICAgICAgICAgIDB4MDAwMDAwNDQKLSNkZWZpbmUgTUFDX1BDVV9HQVRFRF9DTEtTX0dBVEVEX1JFR19NU0IgICAgICAgICAzCi0jZGVmaW5lIE1BQ19QQ1VfR0FURURfQ0xLU19HQVRFRF9SRUdfTFNCICAgICAgICAgMwotI2RlZmluZSBNQUNfUENVX0dBVEVEX0NMS1NfR0FURURfUkVHX01BU0sgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgTUFDX1BDVV9HQVRFRF9DTEtTX0dBVEVEX1JFR19HRVQoeCkgICAgICAoKCh4KSAmIE1BQ19QQ1VfR0FURURfQ0xLU19HQVRFRF9SRUdfTUFTSykgPj4gTUFDX1BDVV9HQVRFRF9DTEtTX0dBVEVEX1JFR19MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfR0FURURfQ0xLU19HQVRFRF9SRUdfU0VUKHgpICAgICAgKCgoeCkgPDwgTUFDX1BDVV9HQVRFRF9DTEtTX0dBVEVEX1JFR19MU0IpICYgTUFDX1BDVV9HQVRFRF9DTEtTX0dBVEVEX1JFR19NQVNLKQotI2RlZmluZSBNQUNfUENVX0dBVEVEX0NMS1NfR0FURURfUlhfTVNCICAgICAgICAgIDIKLSNkZWZpbmUgTUFDX1BDVV9HQVRFRF9DTEtTX0dBVEVEX1JYX0xTQiAgICAgICAgICAyCi0jZGVmaW5lIE1BQ19QQ1VfR0FURURfQ0xLU19HQVRFRF9SWF9NQVNLICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBNQUNfUENVX0dBVEVEX0NMS1NfR0FURURfUlhfR0VUKHgpICAgICAgICgoKHgpICYgTUFDX1BDVV9HQVRFRF9DTEtTX0dBVEVEX1JYX01BU0spID4+IE1BQ19QQ1VfR0FURURfQ0xLU19HQVRFRF9SWF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfR0FURURfQ0xLU19HQVRFRF9SWF9TRVQoeCkgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9HQVRFRF9DTEtTX0dBVEVEX1JYX0xTQikgJiBNQUNfUENVX0dBVEVEX0NMS1NfR0FURURfUlhfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9HQVRFRF9DTEtTX0dBVEVEX1RYX01TQiAgICAgICAgICAxCi0jZGVmaW5lIE1BQ19QQ1VfR0FURURfQ0xLU19HQVRFRF9UWF9MU0IgICAgICAgICAgMQotI2RlZmluZSBNQUNfUENVX0dBVEVEX0NMS1NfR0FURURfVFhfTUFTSyAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgTUFDX1BDVV9HQVRFRF9DTEtTX0dBVEVEX1RYX0dFVCh4KSAgICAgICAoKCh4KSAmIE1BQ19QQ1VfR0FURURfQ0xLU19HQVRFRF9UWF9NQVNLKSA+PiBNQUNfUENVX0dBVEVEX0NMS1NfR0FURURfVFhfTFNCKQotI2RlZmluZSBNQUNfUENVX0dBVEVEX0NMS1NfR0FURURfVFhfU0VUKHgpICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfR0FURURfQ0xLU19HQVRFRF9UWF9MU0IpICYgTUFDX1BDVV9HQVRFRF9DTEtTX0dBVEVEX1RYX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzJfQUREUkVTUyAgICAgICAgICAgICAgICAweDAwMDA4MDQ4Ci0jZGVmaW5lIE1BQ19QQ1VfT0JTX0JVU18yX09GRlNFVCAgICAgICAgICAgICAgICAgMHgwMDAwMDA0OAotI2RlZmluZSBNQUNfUENVX09CU19CVVNfMl9WQUxVRV9NU0IgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIE1BQ19QQ1VfT0JTX0JVU18yX1ZBTFVFX0xTQiAgICAgICAgICAgICAgMAotI2RlZmluZSBNQUNfUENVX09CU19CVVNfMl9WQUxVRV9NQVNLICAgICAgICAgICAgIDB4MDAwM2ZmZmYKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzJfVkFMVUVfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfT0JTX0JVU18yX1ZBTFVFX01BU0spID4+IE1BQ19QQ1VfT0JTX0JVU18yX1ZBTFVFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzJfVkFMVUVfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCBNQUNfUENVX09CU19CVVNfMl9WQUxVRV9MU0IpICYgTUFDX1BDVV9PQlNfQlVTXzJfVkFMVUVfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX09CU19CVVNfMV9BRERSRVNTICAgICAgICAgICAgICAgIDB4MDAwMDgwNGMKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzFfT0ZGU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMDRjCi0jZGVmaW5lIE1BQ19QQ1VfT0JTX0JVU18xX1RYX1NUQVRFX01TQiAgICAgICAgICAgMzAKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzFfVFhfU1RBVEVfTFNCICAgICAgICAgICAyNQotI2RlZmluZSBNQUNfUENVX09CU19CVVNfMV9UWF9TVEFURV9NQVNLICAgICAgICAgIDB4N2UwMDAwMDAKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzFfVFhfU1RBVEVfR0VUKHgpICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfT0JTX0JVU18xX1RYX1NUQVRFX01BU0spID4+IE1BQ19QQ1VfT0JTX0JVU18xX1RYX1NUQVRFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzFfVFhfU1RBVEVfU0VUKHgpICAgICAgICAoKCh4KSA8PCBNQUNfUENVX09CU19CVVNfMV9UWF9TVEFURV9MU0IpICYgTUFDX1BDVV9PQlNfQlVTXzFfVFhfU1RBVEVfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzFfUlhfU1RBVEVfTVNCICAgICAgICAgICAyNAotI2RlZmluZSBNQUNfUENVX09CU19CVVNfMV9SWF9TVEFURV9MU0IgICAgICAgICAgIDIwCi0jZGVmaW5lIE1BQ19QQ1VfT0JTX0JVU18xX1JYX1NUQVRFX01BU0sgICAgICAgICAgMHgwMWYwMDAwMAotI2RlZmluZSBNQUNfUENVX09CU19CVVNfMV9SWF9TVEFURV9HRVQoeCkgICAgICAgICgoKHgpICYgTUFDX1BDVV9PQlNfQlVTXzFfUlhfU1RBVEVfTUFTSykgPj4gTUFDX1BDVV9PQlNfQlVTXzFfUlhfU1RBVEVfTFNCKQotI2RlZmluZSBNQUNfUENVX09CU19CVVNfMV9SWF9TVEFURV9TRVQoeCkgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfT0JTX0JVU18xX1JYX1NUQVRFX0xTQikgJiBNQUNfUENVX09CU19CVVNfMV9SWF9TVEFURV9NQVNLKQotI2RlZmluZSBNQUNfUENVX09CU19CVVNfMV9XRVBfU1RBVEVfTVNCICAgICAgICAgIDE3Ci0jZGVmaW5lIE1BQ19QQ1VfT0JTX0JVU18xX1dFUF9TVEFURV9MU0IgICAgICAgICAgMTIKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzFfV0VQX1NUQVRFX01BU0sgICAgICAgICAweDAwMDNmMDAwCi0jZGVmaW5lIE1BQ19QQ1VfT0JTX0JVU18xX1dFUF9TVEFURV9HRVQoeCkgICAgICAgKCgoeCkgJiBNQUNfUENVX09CU19CVVNfMV9XRVBfU1RBVEVfTUFTSykgPj4gTUFDX1BDVV9PQlNfQlVTXzFfV0VQX1NUQVRFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzFfV0VQX1NUQVRFX1NFVCh4KSAgICAgICAoKCh4KSA8PCBNQUNfUENVX09CU19CVVNfMV9XRVBfU1RBVEVfTFNCKSAmIE1BQ19QQ1VfT0JTX0JVU18xX1dFUF9TVEFURV9NQVNLKQotI2RlZmluZSBNQUNfUENVX09CU19CVVNfMV9SWF9DTEVBUl9NU0IgICAgICAgICAgIDExCi0jZGVmaW5lIE1BQ19QQ1VfT0JTX0JVU18xX1JYX0NMRUFSX0xTQiAgICAgICAgICAgMTEKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzFfUlhfQ0xFQVJfTUFTSyAgICAgICAgICAweDAwMDAwODAwCi0jZGVmaW5lIE1BQ19QQ1VfT0JTX0JVU18xX1JYX0NMRUFSX0dFVCh4KSAgICAgICAgKCgoeCkgJiBNQUNfUENVX09CU19CVVNfMV9SWF9DTEVBUl9NQVNLKSA+PiBNQUNfUENVX09CU19CVVNfMV9SWF9DTEVBUl9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfT0JTX0JVU18xX1JYX0NMRUFSX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9PQlNfQlVTXzFfUlhfQ0xFQVJfTFNCKSAmIE1BQ19QQ1VfT0JTX0JVU18xX1JYX0NMRUFSX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfT0JTX0JVU18xX1JYX0ZSQU1FX01TQiAgICAgICAgICAgMTAKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzFfUlhfRlJBTUVfTFNCICAgICAgICAgICAxMAotI2RlZmluZSBNQUNfUENVX09CU19CVVNfMV9SWF9GUkFNRV9NQVNLICAgICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzFfUlhfRlJBTUVfR0VUKHgpICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfT0JTX0JVU18xX1JYX0ZSQU1FX01BU0spID4+IE1BQ19QQ1VfT0JTX0JVU18xX1JYX0ZSQU1FX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzFfUlhfRlJBTUVfU0VUKHgpICAgICAgICAoKCh4KSA8PCBNQUNfUENVX09CU19CVVNfMV9SWF9GUkFNRV9MU0IpICYgTUFDX1BDVV9PQlNfQlVTXzFfUlhfRlJBTUVfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzFfVFhfRlJBTUVfTVNCICAgICAgICAgICA5Ci0jZGVmaW5lIE1BQ19QQ1VfT0JTX0JVU18xX1RYX0ZSQU1FX0xTQiAgICAgICAgICAgOQotI2RlZmluZSBNQUNfUENVX09CU19CVVNfMV9UWF9GUkFNRV9NQVNLICAgICAgICAgIDB4MDAwMDAyMDAKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzFfVFhfRlJBTUVfR0VUKHgpICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfT0JTX0JVU18xX1RYX0ZSQU1FX01BU0spID4+IE1BQ19QQ1VfT0JTX0JVU18xX1RYX0ZSQU1FX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzFfVFhfRlJBTUVfU0VUKHgpICAgICAgICAoKCh4KSA8PCBNQUNfUENVX09CU19CVVNfMV9UWF9GUkFNRV9MU0IpICYgTUFDX1BDVV9PQlNfQlVTXzFfVFhfRlJBTUVfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzFfVFhfSE9MRF9NU0IgICAgICAgICAgICA4Ci0jZGVmaW5lIE1BQ19QQ1VfT0JTX0JVU18xX1RYX0hPTERfTFNCICAgICAgICAgICAgOAotI2RlZmluZSBNQUNfUENVX09CU19CVVNfMV9UWF9IT0xEX01BU0sgICAgICAgICAgIDB4MDAwMDAxMDAKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzFfVFhfSE9MRF9HRVQoeCkgICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfT0JTX0JVU18xX1RYX0hPTERfTUFTSykgPj4gTUFDX1BDVV9PQlNfQlVTXzFfVFhfSE9MRF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfT0JTX0JVU18xX1RYX0hPTERfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9PQlNfQlVTXzFfVFhfSE9MRF9MU0IpICYgTUFDX1BDVV9PQlNfQlVTXzFfVFhfSE9MRF9NQVNLKQotI2RlZmluZSBNQUNfUENVX09CU19CVVNfMV9QQ1VfQ0hBTk5FTF9JRExFX01TQiAgIDcKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzFfUENVX0NIQU5ORUxfSURMRV9MU0IgICA3Ci0jZGVmaW5lIE1BQ19QQ1VfT0JTX0JVU18xX1BDVV9DSEFOTkVMX0lETEVfTUFTSyAgMHgwMDAwMDA4MAotI2RlZmluZSBNQUNfUENVX09CU19CVVNfMV9QQ1VfQ0hBTk5FTF9JRExFX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfT0JTX0JVU18xX1BDVV9DSEFOTkVMX0lETEVfTUFTSykgPj4gTUFDX1BDVV9PQlNfQlVTXzFfUENVX0NIQU5ORUxfSURMRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfT0JTX0JVU18xX1BDVV9DSEFOTkVMX0lETEVfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfT0JTX0JVU18xX1BDVV9DSEFOTkVMX0lETEVfTFNCKSAmIE1BQ19QQ1VfT0JTX0JVU18xX1BDVV9DSEFOTkVMX0lETEVfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzFfVE1fUVVJRVRfVElNRV9NU0IgICAgICA2Ci0jZGVmaW5lIE1BQ19QQ1VfT0JTX0JVU18xX1RNX1FVSUVUX1RJTUVfTFNCICAgICAgNgotI2RlZmluZSBNQUNfUENVX09CU19CVVNfMV9UTV9RVUlFVF9USU1FX01BU0sgICAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzFfVE1fUVVJRVRfVElNRV9HRVQoeCkgICAoKCh4KSAmIE1BQ19QQ1VfT0JTX0JVU18xX1RNX1FVSUVUX1RJTUVfTUFTSykgPj4gTUFDX1BDVV9PQlNfQlVTXzFfVE1fUVVJRVRfVElNRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfT0JTX0JVU18xX1RNX1FVSUVUX1RJTUVfU0VUKHgpICAgKCgoeCkgPDwgTUFDX1BDVV9PQlNfQlVTXzFfVE1fUVVJRVRfVElNRV9MU0IpICYgTUFDX1BDVV9PQlNfQlVTXzFfVE1fUVVJRVRfVElNRV9NQVNLKQotI2RlZmluZSBNQUNfUENVX09CU19CVVNfMV9UWF9IQ0ZfTVNCICAgICAgICAgICAgIDUKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzFfVFhfSENGX0xTQiAgICAgICAgICAgICA1Ci0jZGVmaW5lIE1BQ19QQ1VfT0JTX0JVU18xX1RYX0hDRl9NQVNLICAgICAgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBNQUNfUENVX09CU19CVVNfMV9UWF9IQ0ZfR0VUKHgpICAgICAgICAgICgoKHgpICYgTUFDX1BDVV9PQlNfQlVTXzFfVFhfSENGX01BU0spID4+IE1BQ19QQ1VfT0JTX0JVU18xX1RYX0hDRl9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfT0JTX0JVU18xX1RYX0hDRl9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9PQlNfQlVTXzFfVFhfSENGX0xTQikgJiBNQUNfUENVX09CU19CVVNfMV9UWF9IQ0ZfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzFfRklMVEVSX1BBU1NfTVNCICAgICAgICA0Ci0jZGVmaW5lIE1BQ19QQ1VfT0JTX0JVU18xX0ZJTFRFUl9QQVNTX0xTQiAgICAgICAgNAotI2RlZmluZSBNQUNfUENVX09CU19CVVNfMV9GSUxURVJfUEFTU19NQVNLICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzFfRklMVEVSX1BBU1NfR0VUKHgpICAgICAoKCh4KSAmIE1BQ19QQ1VfT0JTX0JVU18xX0ZJTFRFUl9QQVNTX01BU0spID4+IE1BQ19QQ1VfT0JTX0JVU18xX0ZJTFRFUl9QQVNTX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzFfRklMVEVSX1BBU1NfU0VUKHgpICAgICAoKCh4KSA8PCBNQUNfUENVX09CU19CVVNfMV9GSUxURVJfUEFTU19MU0IpICYgTUFDX1BDVV9PQlNfQlVTXzFfRklMVEVSX1BBU1NfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzFfUlhfTVlfQkVBQ09OX01TQiAgICAgICAzCi0jZGVmaW5lIE1BQ19QQ1VfT0JTX0JVU18xX1JYX01ZX0JFQUNPTl9MU0IgICAgICAgMwotI2RlZmluZSBNQUNfUENVX09CU19CVVNfMV9SWF9NWV9CRUFDT05fTUFTSyAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzFfUlhfTVlfQkVBQ09OX0dFVCh4KSAgICAoKCh4KSAmIE1BQ19QQ1VfT0JTX0JVU18xX1JYX01ZX0JFQUNPTl9NQVNLKSA+PiBNQUNfUENVX09CU19CVVNfMV9SWF9NWV9CRUFDT05fTFNCKQotI2RlZmluZSBNQUNfUENVX09CU19CVVNfMV9SWF9NWV9CRUFDT05fU0VUKHgpICAgICgoKHgpIDw8IE1BQ19QQ1VfT0JTX0JVU18xX1JYX01ZX0JFQUNPTl9MU0IpICYgTUFDX1BDVV9PQlNfQlVTXzFfUlhfTVlfQkVBQ09OX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfT0JTX0JVU18xX1JYX1dFUF9NU0IgICAgICAgICAgICAgMgotI2RlZmluZSBNQUNfUENVX09CU19CVVNfMV9SWF9XRVBfTFNCICAgICAgICAgICAgIDIKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzFfUlhfV0VQX01BU0sgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIE1BQ19QQ1VfT0JTX0JVU18xX1JYX1dFUF9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBNQUNfUENVX09CU19CVVNfMV9SWF9XRVBfTUFTSykgPj4gTUFDX1BDVV9PQlNfQlVTXzFfUlhfV0VQX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzFfUlhfV0VQX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBNQUNfUENVX09CU19CVVNfMV9SWF9XRVBfTFNCKSAmIE1BQ19QQ1VfT0JTX0JVU18xX1JYX1dFUF9NQVNLKQotI2RlZmluZSBNQUNfUENVX09CU19CVVNfMV9QQ1VfUlhfRU5EX01TQiAgICAgICAgIDEKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzFfUENVX1JYX0VORF9MU0IgICAgICAgICAxCi0jZGVmaW5lIE1BQ19QQ1VfT0JTX0JVU18xX1BDVV9SWF9FTkRfTUFTSyAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBNQUNfUENVX09CU19CVVNfMV9QQ1VfUlhfRU5EX0dFVCh4KSAgICAgICgoKHgpICYgTUFDX1BDVV9PQlNfQlVTXzFfUENVX1JYX0VORF9NQVNLKSA+PiBNQUNfUENVX09CU19CVVNfMV9QQ1VfUlhfRU5EX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzFfUENVX1JYX0VORF9TRVQoeCkgICAgICAoKCh4KSA8PCBNQUNfUENVX09CU19CVVNfMV9QQ1VfUlhfRU5EX0xTQikgJiBNQUNfUENVX09CU19CVVNfMV9QQ1VfUlhfRU5EX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfT0JTX0JVU18xX1BDVV9ESVJFQ1RFRF9NU0IgICAgICAgMAotI2RlZmluZSBNQUNfUENVX09CU19CVVNfMV9QQ1VfRElSRUNURURfTFNCICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzFfUENVX0RJUkVDVEVEX01BU0sgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIE1BQ19QQ1VfT0JTX0JVU18xX1BDVV9ESVJFQ1RFRF9HRVQoeCkgICAgKCgoeCkgJiBNQUNfUENVX09CU19CVVNfMV9QQ1VfRElSRUNURURfTUFTSykgPj4gTUFDX1BDVV9PQlNfQlVTXzFfUENVX0RJUkVDVEVEX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9PQlNfQlVTXzFfUENVX0RJUkVDVEVEX1NFVCh4KSAgICAoKCh4KSA8PCBNQUNfUENVX09CU19CVVNfMV9QQ1VfRElSRUNURURfTFNCKSAmIE1BQ19QQ1VfT0JTX0JVU18xX1BDVV9ESVJFQ1RFRF9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfRFlNX01JTU9fUFdSX1NBVkVfQUREUkVTUyAgICAgICAgMHgwMDAwODA1MAotI2RlZmluZSBNQUNfUENVX0RZTV9NSU1PX1BXUl9TQVZFX09GRlNFVCAgICAgICAgIDB4MDAwMDAwNTAKLSNkZWZpbmUgTUFDX1BDVV9EWU1fTUlNT19QV1JfU0FWRV9ISV9QV1JfQ0hBSU5fTUFTS19NU0IgMTAKLSNkZWZpbmUgTUFDX1BDVV9EWU1fTUlNT19QV1JfU0FWRV9ISV9QV1JfQ0hBSU5fTUFTS19MU0IgOAotI2RlZmluZSBNQUNfUENVX0RZTV9NSU1PX1BXUl9TQVZFX0hJX1BXUl9DSEFJTl9NQVNLX01BU0sgMHgwMDAwMDcwMAotI2RlZmluZSBNQUNfUENVX0RZTV9NSU1PX1BXUl9TQVZFX0hJX1BXUl9DSEFJTl9NQVNLX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfRFlNX01JTU9fUFdSX1NBVkVfSElfUFdSX0NIQUlOX01BU0tfTUFTSykgPj4gTUFDX1BDVV9EWU1fTUlNT19QV1JfU0FWRV9ISV9QV1JfQ0hBSU5fTUFTS19MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfRFlNX01JTU9fUFdSX1NBVkVfSElfUFdSX0NIQUlOX01BU0tfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfRFlNX01JTU9fUFdSX1NBVkVfSElfUFdSX0NIQUlOX01BU0tfTFNCKSAmIE1BQ19QQ1VfRFlNX01JTU9fUFdSX1NBVkVfSElfUFdSX0NIQUlOX01BU0tfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9EWU1fTUlNT19QV1JfU0FWRV9MT1dfUFdSX0NIQUlOX01BU0tfTVNCIDYKLSNkZWZpbmUgTUFDX1BDVV9EWU1fTUlNT19QV1JfU0FWRV9MT1dfUFdSX0NIQUlOX01BU0tfTFNCIDQKLSNkZWZpbmUgTUFDX1BDVV9EWU1fTUlNT19QV1JfU0FWRV9MT1dfUFdSX0NIQUlOX01BU0tfTUFTSyAweDAwMDAwMDcwCi0jZGVmaW5lIE1BQ19QQ1VfRFlNX01JTU9fUFdSX1NBVkVfTE9XX1BXUl9DSEFJTl9NQVNLX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfRFlNX01JTU9fUFdSX1NBVkVfTE9XX1BXUl9DSEFJTl9NQVNLX01BU0spID4+IE1BQ19QQ1VfRFlNX01JTU9fUFdSX1NBVkVfTE9XX1BXUl9DSEFJTl9NQVNLX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9EWU1fTUlNT19QV1JfU0FWRV9MT1dfUFdSX0NIQUlOX01BU0tfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfRFlNX01JTU9fUFdSX1NBVkVfTE9XX1BXUl9DSEFJTl9NQVNLX0xTQikgJiBNQUNfUENVX0RZTV9NSU1PX1BXUl9TQVZFX0xPV19QV1JfQ0hBSU5fTUFTS19NQVNLKQotI2RlZmluZSBNQUNfUENVX0RZTV9NSU1PX1BXUl9TQVZFX1NXX0NIQUlOX01BU0tfU0VMX01TQiAyCi0jZGVmaW5lIE1BQ19QQ1VfRFlNX01JTU9fUFdSX1NBVkVfU1dfQ0hBSU5fTUFTS19TRUxfTFNCIDIKLSNkZWZpbmUgTUFDX1BDVV9EWU1fTUlNT19QV1JfU0FWRV9TV19DSEFJTl9NQVNLX1NFTF9NQVNLIDB4MDAwMDAwMDQKLSNkZWZpbmUgTUFDX1BDVV9EWU1fTUlNT19QV1JfU0FWRV9TV19DSEFJTl9NQVNLX1NFTF9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0RZTV9NSU1PX1BXUl9TQVZFX1NXX0NIQUlOX01BU0tfU0VMX01BU0spID4+IE1BQ19QQ1VfRFlNX01JTU9fUFdSX1NBVkVfU1dfQ0hBSU5fTUFTS19TRUxfTFNCKQotI2RlZmluZSBNQUNfUENVX0RZTV9NSU1PX1BXUl9TQVZFX1NXX0NIQUlOX01BU0tfU0VMX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0RZTV9NSU1PX1BXUl9TQVZFX1NXX0NIQUlOX01BU0tfU0VMX0xTQikgJiBNQUNfUENVX0RZTV9NSU1PX1BXUl9TQVZFX1NXX0NIQUlOX01BU0tfU0VMX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfRFlNX01JTU9fUFdSX1NBVkVfSFdfQ1RSTF9FTl9NU0IgMQotI2RlZmluZSBNQUNfUENVX0RZTV9NSU1PX1BXUl9TQVZFX0hXX0NUUkxfRU5fTFNCIDEKLSNkZWZpbmUgTUFDX1BDVV9EWU1fTUlNT19QV1JfU0FWRV9IV19DVFJMX0VOX01BU0sgMHgwMDAwMDAwMgotI2RlZmluZSBNQUNfUENVX0RZTV9NSU1PX1BXUl9TQVZFX0hXX0NUUkxfRU5fR0VUKHgpICgoKHgpICYgTUFDX1BDVV9EWU1fTUlNT19QV1JfU0FWRV9IV19DVFJMX0VOX01BU0spID4+IE1BQ19QQ1VfRFlNX01JTU9fUFdSX1NBVkVfSFdfQ1RSTF9FTl9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfRFlNX01JTU9fUFdSX1NBVkVfSFdfQ1RSTF9FTl9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9EWU1fTUlNT19QV1JfU0FWRV9IV19DVFJMX0VOX0xTQikgJiBNQUNfUENVX0RZTV9NSU1PX1BXUl9TQVZFX0hXX0NUUkxfRU5fTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9EWU1fTUlNT19QV1JfU0FWRV9VU0VfTUFDX0NUUkxfTVNCIDAKLSNkZWZpbmUgTUFDX1BDVV9EWU1fTUlNT19QV1JfU0FWRV9VU0VfTUFDX0NUUkxfTFNCIDAKLSNkZWZpbmUgTUFDX1BDVV9EWU1fTUlNT19QV1JfU0FWRV9VU0VfTUFDX0NUUkxfTUFTSyAweDAwMDAwMDAxCi0jZGVmaW5lIE1BQ19QQ1VfRFlNX01JTU9fUFdSX1NBVkVfVVNFX01BQ19DVFJMX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfRFlNX01JTU9fUFdSX1NBVkVfVVNFX01BQ19DVFJMX01BU0spID4+IE1BQ19QQ1VfRFlNX01JTU9fUFdSX1NBVkVfVVNFX01BQ19DVFJMX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9EWU1fTUlNT19QV1JfU0FWRV9VU0VfTUFDX0NUUkxfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfRFlNX01JTU9fUFdSX1NBVkVfVVNFX01BQ19DVFJMX0xTQikgJiBNQUNfUENVX0RZTV9NSU1PX1BXUl9TQVZFX1VTRV9NQUNfQ1RSTF9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfTEFTVF9CRUFDT05fVFNGX0FERFJFU1MgICAgICAgICAgMHgwMDAwODA1NAotI2RlZmluZSBNQUNfUENVX0xBU1RfQkVBQ09OX1RTRl9PRkZTRVQgICAgICAgICAgIDB4MDAwMDAwNTQKLSNkZWZpbmUgTUFDX1BDVV9MQVNUX0JFQUNPTl9UU0ZfVkFMVUVfTVNCICAgICAgICAzMQotI2RlZmluZSBNQUNfUENVX0xBU1RfQkVBQ09OX1RTRl9WQUxVRV9MU0IgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9MQVNUX0JFQUNPTl9UU0ZfVkFMVUVfTUFTSyAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfTEFTVF9CRUFDT05fVFNGX1ZBTFVFX0dFVCh4KSAgICAgKCgoeCkgJiBNQUNfUENVX0xBU1RfQkVBQ09OX1RTRl9WQUxVRV9NQVNLKSA+PiBNQUNfUENVX0xBU1RfQkVBQ09OX1RTRl9WQUxVRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfTEFTVF9CRUFDT05fVFNGX1ZBTFVFX1NFVCh4KSAgICAgKCgoeCkgPDwgTUFDX1BDVV9MQVNUX0JFQUNPTl9UU0ZfVkFMVUVfTFNCKSAmIE1BQ19QQ1VfTEFTVF9CRUFDT05fVFNGX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9OQVZfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDU4Ci0jZGVmaW5lIE1BQ19QQ1VfTkFWX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1OAotI2RlZmluZSBNQUNfUENVX05BVl9WQUxVRV9NU0IgICAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIE1BQ19QQ1VfTkFWX1ZBTFVFX0xTQiAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBNQUNfUENVX05BVl9WQUxVRV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDNmZmZmZmYKLSNkZWZpbmUgTUFDX1BDVV9OQVZfVkFMVUVfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfTkFWX1ZBTFVFX01BU0spID4+IE1BQ19QQ1VfTkFWX1ZBTFVFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9OQVZfVkFMVUVfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCBNQUNfUENVX05BVl9WQUxVRV9MU0IpICYgTUFDX1BDVV9OQVZfVkFMVUVfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX1JUU19TVUNDRVNTX0NOVF9BRERSRVNTICAgICAgICAgIDB4MDAwMDgwNWMKLSNkZWZpbmUgTUFDX1BDVV9SVFNfU1VDQ0VTU19DTlRfT0ZGU0VUICAgICAgICAgICAweDAwMDAwMDVjCi0jZGVmaW5lIE1BQ19QQ1VfUlRTX1NVQ0NFU1NfQ05UX1ZBTFVFX01TQiAgICAgICAgMTUKLSNkZWZpbmUgTUFDX1BDVV9SVFNfU1VDQ0VTU19DTlRfVkFMVUVfTFNCICAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfUlRTX1NVQ0NFU1NfQ05UX1ZBTFVFX01BU0sgICAgICAgMHgwMDAwZmZmZgotI2RlZmluZSBNQUNfUENVX1JUU19TVUNDRVNTX0NOVF9WQUxVRV9HRVQoeCkgICAgICgoKHgpICYgTUFDX1BDVV9SVFNfU1VDQ0VTU19DTlRfVkFMVUVfTUFTSykgPj4gTUFDX1BDVV9SVFNfU1VDQ0VTU19DTlRfVkFMVUVfTFNCKQotI2RlZmluZSBNQUNfUENVX1JUU19TVUNDRVNTX0NOVF9WQUxVRV9TRVQoeCkgICAgICgoKHgpIDw8IE1BQ19QQ1VfUlRTX1NVQ0NFU1NfQ05UX1ZBTFVFX0xTQikgJiBNQUNfUENVX1JUU19TVUNDRVNTX0NOVF9WQUxVRV9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfUlRTX0ZBSUxfQ05UX0FERFJFU1MgICAgICAgICAgICAgMHgwMDAwODA2MAotI2RlZmluZSBNQUNfUENVX1JUU19GQUlMX0NOVF9PRkZTRVQgICAgICAgICAgICAgIDB4MDAwMDAwNjAKLSNkZWZpbmUgTUFDX1BDVV9SVFNfRkFJTF9DTlRfVkFMVUVfTVNCICAgICAgICAgICAxNQotI2RlZmluZSBNQUNfUENVX1JUU19GQUlMX0NOVF9WQUxVRV9MU0IgICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9SVFNfRkFJTF9DTlRfVkFMVUVfTUFTSyAgICAgICAgICAweDAwMDBmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfUlRTX0ZBSUxfQ05UX1ZBTFVFX0dFVCh4KSAgICAgICAgKCgoeCkgJiBNQUNfUENVX1JUU19GQUlMX0NOVF9WQUxVRV9NQVNLKSA+PiBNQUNfUENVX1JUU19GQUlMX0NOVF9WQUxVRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfUlRTX0ZBSUxfQ05UX1ZBTFVFX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9SVFNfRkFJTF9DTlRfVkFMVUVfTFNCKSAmIE1BQ19QQ1VfUlRTX0ZBSUxfQ05UX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9BQ0tfRkFJTF9DTlRfQUREUkVTUyAgICAgICAgICAgICAweDAwMDA4MDY0Ci0jZGVmaW5lIE1BQ19QQ1VfQUNLX0ZBSUxfQ05UX09GRlNFVCAgICAgICAgICAgICAgMHgwMDAwMDA2NAotI2RlZmluZSBNQUNfUENVX0FDS19GQUlMX0NOVF9WQUxVRV9NU0IgICAgICAgICAgIDE1Ci0jZGVmaW5lIE1BQ19QQ1VfQUNLX0ZBSUxfQ05UX1ZBTFVFX0xTQiAgICAgICAgICAgMAotI2RlZmluZSBNQUNfUENVX0FDS19GQUlMX0NOVF9WQUxVRV9NQVNLICAgICAgICAgIDB4MDAwMGZmZmYKLSNkZWZpbmUgTUFDX1BDVV9BQ0tfRkFJTF9DTlRfVkFMVUVfR0VUKHgpICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfQUNLX0ZBSUxfQ05UX1ZBTFVFX01BU0spID4+IE1BQ19QQ1VfQUNLX0ZBSUxfQ05UX1ZBTFVFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9BQ0tfRkFJTF9DTlRfVkFMVUVfU0VUKHgpICAgICAgICAoKCh4KSA8PCBNQUNfUENVX0FDS19GQUlMX0NOVF9WQUxVRV9MU0IpICYgTUFDX1BDVV9BQ0tfRkFJTF9DTlRfVkFMVUVfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX0ZDU19GQUlMX0NOVF9BRERSRVNTICAgICAgICAgICAgIDB4MDAwMDgwNjgKLSNkZWZpbmUgTUFDX1BDVV9GQ1NfRkFJTF9DTlRfT0ZGU0VUICAgICAgICAgICAgICAweDAwMDAwMDY4Ci0jZGVmaW5lIE1BQ19QQ1VfRkNTX0ZBSUxfQ05UX1ZBTFVFX01TQiAgICAgICAgICAgMTUKLSNkZWZpbmUgTUFDX1BDVV9GQ1NfRkFJTF9DTlRfVkFMVUVfTFNCICAgICAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfRkNTX0ZBSUxfQ05UX1ZBTFVFX01BU0sgICAgICAgICAgMHgwMDAwZmZmZgotI2RlZmluZSBNQUNfUENVX0ZDU19GQUlMX0NOVF9WQUxVRV9HRVQoeCkgICAgICAgICgoKHgpICYgTUFDX1BDVV9GQ1NfRkFJTF9DTlRfVkFMVUVfTUFTSykgPj4gTUFDX1BDVV9GQ1NfRkFJTF9DTlRfVkFMVUVfTFNCKQotI2RlZmluZSBNQUNfUENVX0ZDU19GQUlMX0NOVF9WQUxVRV9TRVQoeCkgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfRkNTX0ZBSUxfQ05UX1ZBTFVFX0xTQikgJiBNQUNfUENVX0ZDU19GQUlMX0NOVF9WQUxVRV9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfQkVBQ09OX0NOVF9BRERSRVNTICAgICAgICAgICAgICAgMHgwMDAwODA2YwotI2RlZmluZSBNQUNfUENVX0JFQUNPTl9DTlRfT0ZGU0VUICAgICAgICAgICAgICAgIDB4MDAwMDAwNmMKLSNkZWZpbmUgTUFDX1BDVV9CRUFDT05fQ05UX1ZBTFVFX01TQiAgICAgICAgICAgICAxNQotI2RlZmluZSBNQUNfUENVX0JFQUNPTl9DTlRfVkFMVUVfTFNCICAgICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9CRUFDT05fQ05UX1ZBTFVFX01BU0sgICAgICAgICAgICAweDAwMDBmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfQkVBQ09OX0NOVF9WQUxVRV9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBNQUNfUENVX0JFQUNPTl9DTlRfVkFMVUVfTUFTSykgPj4gTUFDX1BDVV9CRUFDT05fQ05UX1ZBTFVFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9CRUFDT05fQ05UX1ZBTFVFX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBNQUNfUENVX0JFQUNPTl9DTlRfVkFMVUVfTFNCKSAmIE1BQ19QQ1VfQkVBQ09OX0NOVF9WQUxVRV9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfWFJNT0RFX0FERFJFU1MgICAgICAgICAgICAgICAgICAgMHgwMDAwODA3MAotI2RlZmluZSBNQUNfUENVX1hSTU9ERV9PRkZTRVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzAKLSNkZWZpbmUgTUFDX1BDVV9YUk1PREVfRlJBTUVfSE9MRF9NU0IgICAgICAgICAgICAzMQotI2RlZmluZSBNQUNfUENVX1hSTU9ERV9GUkFNRV9IT0xEX0xTQiAgICAgICAgICAgIDIwCi0jZGVmaW5lIE1BQ19QQ1VfWFJNT0RFX0ZSQU1FX0hPTERfTUFTSyAgICAgICAgICAgMHhmZmYwMDAwMAotI2RlZmluZSBNQUNfUENVX1hSTU9ERV9GUkFNRV9IT0xEX0dFVCh4KSAgICAgICAgICgoKHgpICYgTUFDX1BDVV9YUk1PREVfRlJBTUVfSE9MRF9NQVNLKSA+PiBNQUNfUENVX1hSTU9ERV9GUkFNRV9IT0xEX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9YUk1PREVfRlJBTUVfSE9MRF9TRVQoeCkgICAgICAgICAoKCh4KSA8PCBNQUNfUENVX1hSTU9ERV9GUkFNRV9IT0xEX0xTQikgJiBNQUNfUENVX1hSTU9ERV9GUkFNRV9IT0xEX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfWFJNT0RFX1dBSVRfRk9SX1BPTExfTVNCICAgICAgICAgNwotI2RlZmluZSBNQUNfUENVX1hSTU9ERV9XQUlUX0ZPUl9QT0xMX0xTQiAgICAgICAgIDcKLSNkZWZpbmUgTUFDX1BDVV9YUk1PREVfV0FJVF9GT1JfUE9MTF9NQVNLICAgICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIE1BQ19QQ1VfWFJNT0RFX1dBSVRfRk9SX1BPTExfR0VUKHgpICAgICAgKCgoeCkgJiBNQUNfUENVX1hSTU9ERV9XQUlUX0ZPUl9QT0xMX01BU0spID4+IE1BQ19QQ1VfWFJNT0RFX1dBSVRfRk9SX1BPTExfTFNCKQotI2RlZmluZSBNQUNfUENVX1hSTU9ERV9XQUlUX0ZPUl9QT0xMX1NFVCh4KSAgICAgICgoKHgpIDw8IE1BQ19QQ1VfWFJNT0RFX1dBSVRfRk9SX1BPTExfTFNCKSAmIE1BQ19QQ1VfWFJNT0RFX1dBSVRfRk9SX1BPTExfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9YUk1PREVfUE9MTF9UWVBFX01TQiAgICAgICAgICAgICA1Ci0jZGVmaW5lIE1BQ19QQ1VfWFJNT0RFX1BPTExfVFlQRV9MU0IgICAgICAgICAgICAgMAotI2RlZmluZSBNQUNfUENVX1hSTU9ERV9QT0xMX1RZUEVfTUFTSyAgICAgICAgICAgIDB4MDAwMDAwM2YKLSNkZWZpbmUgTUFDX1BDVV9YUk1PREVfUE9MTF9UWVBFX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfWFJNT0RFX1BPTExfVFlQRV9NQVNLKSA+PiBNQUNfUENVX1hSTU9ERV9QT0xMX1RZUEVfTFNCKQotI2RlZmluZSBNQUNfUENVX1hSTU9ERV9QT0xMX1RZUEVfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfWFJNT0RFX1BPTExfVFlQRV9MU0IpICYgTUFDX1BDVV9YUk1PREVfUE9MTF9UWVBFX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9YUkRFTF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDc0Ci0jZGVmaW5lIE1BQ19QQ1VfWFJERUxfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3NAotI2RlZmluZSBNQUNfUENVX1hSREVMX0NISVJQX0RBVEFfREVMQVlfTVNCICAgICAgIDMxCi0jZGVmaW5lIE1BQ19QQ1VfWFJERUxfQ0hJUlBfREFUQV9ERUxBWV9MU0IgICAgICAgMTYKLSNkZWZpbmUgTUFDX1BDVV9YUkRFTF9DSElSUF9EQVRBX0RFTEFZX01BU0sgICAgICAweGZmZmYwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfWFJERUxfQ0hJUlBfREFUQV9ERUxBWV9HRVQoeCkgICAgKCgoeCkgJiBNQUNfUENVX1hSREVMX0NISVJQX0RBVEFfREVMQVlfTUFTSykgPj4gTUFDX1BDVV9YUkRFTF9DSElSUF9EQVRBX0RFTEFZX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9YUkRFTF9DSElSUF9EQVRBX0RFTEFZX1NFVCh4KSAgICAoKCh4KSA8PCBNQUNfUENVX1hSREVMX0NISVJQX0RBVEFfREVMQVlfTFNCKSAmIE1BQ19QQ1VfWFJERUxfQ0hJUlBfREFUQV9ERUxBWV9NQVNLKQotI2RlZmluZSBNQUNfUENVX1hSREVMX1NMT1RfREVMQVlfTVNCICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIE1BQ19QQ1VfWFJERUxfU0xPVF9ERUxBWV9MU0IgICAgICAgICAgICAgMAotI2RlZmluZSBNQUNfUENVX1hSREVMX1NMT1RfREVMQVlfTUFTSyAgICAgICAgICAgIDB4MDAwMGZmZmYKLSNkZWZpbmUgTUFDX1BDVV9YUkRFTF9TTE9UX0RFTEFZX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfWFJERUxfU0xPVF9ERUxBWV9NQVNLKSA+PiBNQUNfUENVX1hSREVMX1NMT1RfREVMQVlfTFNCKQotI2RlZmluZSBNQUNfUENVX1hSREVMX1NMT1RfREVMQVlfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfWFJERUxfU0xPVF9ERUxBWV9MU0IpICYgTUFDX1BDVV9YUkRFTF9TTE9UX0RFTEFZX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9YUlRPX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDc4Ci0jZGVmaW5lIE1BQ19QQ1VfWFJUT19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3OAotI2RlZmluZSBNQUNfUENVX1hSVE9fUE9MTF9USU1FT1VUX01TQiAgICAgICAgICAgIDMxCi0jZGVmaW5lIE1BQ19QQ1VfWFJUT19QT0xMX1RJTUVPVVRfTFNCICAgICAgICAgICAgMTYKLSNkZWZpbmUgTUFDX1BDVV9YUlRPX1BPTExfVElNRU9VVF9NQVNLICAgICAgICAgICAweGZmZmYwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfWFJUT19QT0xMX1RJTUVPVVRfR0VUKHgpICAgICAgICAgKCgoeCkgJiBNQUNfUENVX1hSVE9fUE9MTF9USU1FT1VUX01BU0spID4+IE1BQ19QQ1VfWFJUT19QT0xMX1RJTUVPVVRfTFNCKQotI2RlZmluZSBNQUNfUENVX1hSVE9fUE9MTF9USU1FT1VUX1NFVCh4KSAgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfWFJUT19QT0xMX1RJTUVPVVRfTFNCKSAmIE1BQ19QQ1VfWFJUT19QT0xMX1RJTUVPVVRfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9YUlRPX0NISVJQX1RJTUVPVVRfTVNCICAgICAgICAgICAxNQotI2RlZmluZSBNQUNfUENVX1hSVE9fQ0hJUlBfVElNRU9VVF9MU0IgICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9YUlRPX0NISVJQX1RJTUVPVVRfTUFTSyAgICAgICAgICAweDAwMDBmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfWFJUT19DSElSUF9USU1FT1VUX0dFVCh4KSAgICAgICAgKCgoeCkgJiBNQUNfUENVX1hSVE9fQ0hJUlBfVElNRU9VVF9NQVNLKSA+PiBNQUNfUENVX1hSVE9fQ0hJUlBfVElNRU9VVF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfWFJUT19DSElSUF9USU1FT1VUX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9YUlRPX0NISVJQX1RJTUVPVVRfTFNCKSAmIE1BQ19QQ1VfWFJUT19DSElSUF9USU1FT1VUX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9YUkNSUF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDdjCi0jZGVmaW5lIE1BQ19QQ1VfWFJDUlBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3YwotI2RlZmluZSBNQUNfUENVX1hSQ1JQX0NISVJQX0dBUF9NU0IgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIE1BQ19QQ1VfWFJDUlBfQ0hJUlBfR0FQX0xTQiAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgTUFDX1BDVV9YUkNSUF9DSElSUF9HQVBfTUFTSyAgICAgICAgICAgICAweGZmZmYwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfWFJDUlBfQ0hJUlBfR0FQX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBNQUNfUENVX1hSQ1JQX0NISVJQX0dBUF9NQVNLKSA+PiBNQUNfUENVX1hSQ1JQX0NISVJQX0dBUF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfWFJDUlBfQ0hJUlBfR0FQX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9YUkNSUF9DSElSUF9HQVBfTFNCKSAmIE1BQ19QQ1VfWFJDUlBfQ0hJUlBfR0FQX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfWFJDUlBfU0VORF9DSElSUF9NU0IgICAgICAgICAgICAgMAotI2RlZmluZSBNQUNfUENVX1hSQ1JQX1NFTkRfQ0hJUlBfTFNCICAgICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9YUkNSUF9TRU5EX0NISVJQX01BU0sgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIE1BQ19QQ1VfWFJDUlBfU0VORF9DSElSUF9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBNQUNfUENVX1hSQ1JQX1NFTkRfQ0hJUlBfTUFTSykgPj4gTUFDX1BDVV9YUkNSUF9TRU5EX0NISVJQX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9YUkNSUF9TRU5EX0NISVJQX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBNQUNfUENVX1hSQ1JQX1NFTkRfQ0hJUlBfTFNCKSAmIE1BQ19QQ1VfWFJDUlBfU0VORF9DSElSUF9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfWFJTVE1QX0FERFJFU1MgICAgICAgICAgICAgICAgICAgMHgwMDAwODA4MAotI2RlZmluZSBNQUNfUENVX1hSU1RNUF9PRkZTRVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKLSNkZWZpbmUgTUFDX1BDVV9YUlNUTVBfUlhfQUJPUlRfUlNTSV9USFJFU0hfTVNCICAyMwotI2RlZmluZSBNQUNfUENVX1hSU1RNUF9SWF9BQk9SVF9SU1NJX1RIUkVTSF9MU0IgIDE2Ci0jZGVmaW5lIE1BQ19QQ1VfWFJTVE1QX1JYX0FCT1JUX1JTU0lfVEhSRVNIX01BU0sgMHgwMGZmMDAwMAotI2RlZmluZSBNQUNfUENVX1hSU1RNUF9SWF9BQk9SVF9SU1NJX1RIUkVTSF9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX1hSU1RNUF9SWF9BQk9SVF9SU1NJX1RIUkVTSF9NQVNLKSA+PiBNQUNfUENVX1hSU1RNUF9SWF9BQk9SVF9SU1NJX1RIUkVTSF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfWFJTVE1QX1JYX0FCT1JUX1JTU0lfVEhSRVNIX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX1hSU1RNUF9SWF9BQk9SVF9SU1NJX1RIUkVTSF9MU0IpICYgTUFDX1BDVV9YUlNUTVBfUlhfQUJPUlRfUlNTSV9USFJFU0hfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9YUlNUTVBfVFhfU1RPTVBfUlNTSV9USFJFU0hfTVNCICAxNQotI2RlZmluZSBNQUNfUENVX1hSU1RNUF9UWF9TVE9NUF9SU1NJX1RIUkVTSF9MU0IgIDgKLSNkZWZpbmUgTUFDX1BDVV9YUlNUTVBfVFhfU1RPTVBfUlNTSV9USFJFU0hfTUFTSyAweDAwMDBmZjAwCi0jZGVmaW5lIE1BQ19QQ1VfWFJTVE1QX1RYX1NUT01QX1JTU0lfVEhSRVNIX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfWFJTVE1QX1RYX1NUT01QX1JTU0lfVEhSRVNIX01BU0spID4+IE1BQ19QQ1VfWFJTVE1QX1RYX1NUT01QX1JTU0lfVEhSRVNIX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9YUlNUTVBfVFhfU1RPTVBfUlNTSV9USFJFU0hfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfWFJTVE1QX1RYX1NUT01QX1JTU0lfVEhSRVNIX0xTQikgJiBNQUNfUENVX1hSU1RNUF9UWF9TVE9NUF9SU1NJX1RIUkVTSF9NQVNLKQotI2RlZmluZSBNQUNfUENVX1hSU1RNUF9SWF9BQk9SVF9EQVRBX01TQiAgICAgICAgIDUKLSNkZWZpbmUgTUFDX1BDVV9YUlNUTVBfUlhfQUJPUlRfREFUQV9MU0IgICAgICAgICA1Ci0jZGVmaW5lIE1BQ19QQ1VfWFJTVE1QX1JYX0FCT1JUX0RBVEFfTUFTSyAgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBNQUNfUENVX1hSU1RNUF9SWF9BQk9SVF9EQVRBX0dFVCh4KSAgICAgICgoKHgpICYgTUFDX1BDVV9YUlNUTVBfUlhfQUJPUlRfREFUQV9NQVNLKSA+PiBNQUNfUENVX1hSU1RNUF9SWF9BQk9SVF9EQVRBX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9YUlNUTVBfUlhfQUJPUlRfREFUQV9TRVQoeCkgICAgICAoKCh4KSA8PCBNQUNfUENVX1hSU1RNUF9SWF9BQk9SVF9EQVRBX0xTQikgJiBNQUNfUENVX1hSU1RNUF9SWF9BQk9SVF9EQVRBX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfWFJTVE1QX1RYX1NUT01QX0RBVEFfTVNCICAgICAgICAgNAotI2RlZmluZSBNQUNfUENVX1hSU1RNUF9UWF9TVE9NUF9EQVRBX0xTQiAgICAgICAgIDQKLSNkZWZpbmUgTUFDX1BDVV9YUlNUTVBfVFhfU1RPTVBfREFUQV9NQVNLICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIE1BQ19QQ1VfWFJTVE1QX1RYX1NUT01QX0RBVEFfR0VUKHgpICAgICAgKCgoeCkgJiBNQUNfUENVX1hSU1RNUF9UWF9TVE9NUF9EQVRBX01BU0spID4+IE1BQ19QQ1VfWFJTVE1QX1RYX1NUT01QX0RBVEFfTFNCKQotI2RlZmluZSBNQUNfUENVX1hSU1RNUF9UWF9TVE9NUF9EQVRBX1NFVCh4KSAgICAgICgoKHgpIDw8IE1BQ19QQ1VfWFJTVE1QX1RYX1NUT01QX0RBVEFfTFNCKSAmIE1BQ19QQ1VfWFJTVE1QX1RYX1NUT01QX0RBVEFfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9YUlNUTVBfVFhfU1RPTVBfQlNTSURfTVNCICAgICAgICAzCi0jZGVmaW5lIE1BQ19QQ1VfWFJTVE1QX1RYX1NUT01QX0JTU0lEX0xTQiAgICAgICAgMwotI2RlZmluZSBNQUNfUENVX1hSU1RNUF9UWF9TVE9NUF9CU1NJRF9NQVNLICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgTUFDX1BDVV9YUlNUTVBfVFhfU1RPTVBfQlNTSURfR0VUKHgpICAgICAoKCh4KSAmIE1BQ19QQ1VfWFJTVE1QX1RYX1NUT01QX0JTU0lEX01BU0spID4+IE1BQ19QQ1VfWFJTVE1QX1RYX1NUT01QX0JTU0lEX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9YUlNUTVBfVFhfU1RPTVBfQlNTSURfU0VUKHgpICAgICAoKCh4KSA8PCBNQUNfUENVX1hSU1RNUF9UWF9TVE9NUF9CU1NJRF9MU0IpICYgTUFDX1BDVV9YUlNUTVBfVFhfU1RPTVBfQlNTSURfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9YUlNUTVBfVFhfU1RPTVBfUlNTSV9NU0IgICAgICAgICAyCi0jZGVmaW5lIE1BQ19QQ1VfWFJTVE1QX1RYX1NUT01QX1JTU0lfTFNCICAgICAgICAgMgotI2RlZmluZSBNQUNfUENVX1hSU1RNUF9UWF9TVE9NUF9SU1NJX01BU0sgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgTUFDX1BDVV9YUlNUTVBfVFhfU1RPTVBfUlNTSV9HRVQoeCkgICAgICAoKCh4KSAmIE1BQ19QQ1VfWFJTVE1QX1RYX1NUT01QX1JTU0lfTUFTSykgPj4gTUFDX1BDVV9YUlNUTVBfVFhfU1RPTVBfUlNTSV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfWFJTVE1QX1RYX1NUT01QX1JTU0lfU0VUKHgpICAgICAgKCgoeCkgPDwgTUFDX1BDVV9YUlNUTVBfVFhfU1RPTVBfUlNTSV9MU0IpICYgTUFDX1BDVV9YUlNUTVBfVFhfU1RPTVBfUlNTSV9NQVNLKQotI2RlZmluZSBNQUNfUENVX1hSU1RNUF9SWF9BQk9SVF9CU1NJRF9NU0IgICAgICAgIDEKLSNkZWZpbmUgTUFDX1BDVV9YUlNUTVBfUlhfQUJPUlRfQlNTSURfTFNCICAgICAgICAxCi0jZGVmaW5lIE1BQ19QQ1VfWFJTVE1QX1JYX0FCT1JUX0JTU0lEX01BU0sgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBNQUNfUENVX1hSU1RNUF9SWF9BQk9SVF9CU1NJRF9HRVQoeCkgICAgICgoKHgpICYgTUFDX1BDVV9YUlNUTVBfUlhfQUJPUlRfQlNTSURfTUFTSykgPj4gTUFDX1BDVV9YUlNUTVBfUlhfQUJPUlRfQlNTSURfTFNCKQotI2RlZmluZSBNQUNfUENVX1hSU1RNUF9SWF9BQk9SVF9CU1NJRF9TRVQoeCkgICAgICgoKHgpIDw8IE1BQ19QQ1VfWFJTVE1QX1JYX0FCT1JUX0JTU0lEX0xTQikgJiBNQUNfUENVX1hSU1RNUF9SWF9BQk9SVF9CU1NJRF9NQVNLKQotI2RlZmluZSBNQUNfUENVX1hSU1RNUF9SWF9BQk9SVF9SU1NJX01TQiAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9YUlNUTVBfUlhfQUJPUlRfUlNTSV9MU0IgICAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfWFJTVE1QX1JYX0FCT1JUX1JTU0lfTUFTSyAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBNQUNfUENVX1hSU1RNUF9SWF9BQk9SVF9SU1NJX0dFVCh4KSAgICAgICgoKHgpICYgTUFDX1BDVV9YUlNUTVBfUlhfQUJPUlRfUlNTSV9NQVNLKSA+PiBNQUNfUENVX1hSU1RNUF9SWF9BQk9SVF9SU1NJX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9YUlNUTVBfUlhfQUJPUlRfUlNTSV9TRVQoeCkgICAgICAoKCh4KSA8PCBNQUNfUENVX1hSU1RNUF9SWF9BQk9SVF9SU1NJX0xTQikgJiBNQUNfUENVX1hSU1RNUF9SWF9BQk9SVF9SU1NJX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9BRERSMV9NQVNLX0wzMl9BRERSRVNTICAgICAgICAgICAweDAwMDA4MDg0Ci0jZGVmaW5lIE1BQ19QQ1VfQUREUjFfTUFTS19MMzJfT0ZGU0VUICAgICAgICAgICAgMHgwMDAwMDA4NAotI2RlZmluZSBNQUNfUENVX0FERFIxX01BU0tfTDMyX1ZBTFVFX01TQiAgICAgICAgIDMxCi0jZGVmaW5lIE1BQ19QQ1VfQUREUjFfTUFTS19MMzJfVkFMVUVfTFNCICAgICAgICAgMAotI2RlZmluZSBNQUNfUENVX0FERFIxX01BU0tfTDMyX1ZBTFVFX01BU0sgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgTUFDX1BDVV9BRERSMV9NQVNLX0wzMl9WQUxVRV9HRVQoeCkgICAgICAoKCh4KSAmIE1BQ19QQ1VfQUREUjFfTUFTS19MMzJfVkFMVUVfTUFTSykgPj4gTUFDX1BDVV9BRERSMV9NQVNLX0wzMl9WQUxVRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQUREUjFfTUFTS19MMzJfVkFMVUVfU0VUKHgpICAgICAgKCgoeCkgPDwgTUFDX1BDVV9BRERSMV9NQVNLX0wzMl9WQUxVRV9MU0IpICYgTUFDX1BDVV9BRERSMV9NQVNLX0wzMl9WQUxVRV9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfQUREUjFfTUFTS19VMTZfQUREUkVTUyAgICAgICAgICAgMHgwMDAwODA4OAotI2RlZmluZSBNQUNfUENVX0FERFIxX01BU0tfVTE2X09GRlNFVCAgICAgICAgICAgIDB4MDAwMDAwODgKLSNkZWZpbmUgTUFDX1BDVV9BRERSMV9NQVNLX1UxNl9WQUxVRV9NU0IgICAgICAgICAxNQotI2RlZmluZSBNQUNfUENVX0FERFIxX01BU0tfVTE2X1ZBTFVFX0xTQiAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9BRERSMV9NQVNLX1UxNl9WQUxVRV9NQVNLICAgICAgICAweDAwMDBmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfQUREUjFfTUFTS19VMTZfVkFMVUVfR0VUKHgpICAgICAgKCgoeCkgJiBNQUNfUENVX0FERFIxX01BU0tfVTE2X1ZBTFVFX01BU0spID4+IE1BQ19QQ1VfQUREUjFfTUFTS19VMTZfVkFMVUVfTFNCKQotI2RlZmluZSBNQUNfUENVX0FERFIxX01BU0tfVTE2X1ZBTFVFX1NFVCh4KSAgICAgICgoKHgpIDw8IE1BQ19QQ1VfQUREUjFfTUFTS19VMTZfVkFMVUVfTFNCKSAmIE1BQ19QQ1VfQUREUjFfTUFTS19VMTZfVkFMVUVfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX1RQQ19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwOGMKLSNkZWZpbmUgTUFDX1BDVV9UUENfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDhjCi0jZGVmaW5lIE1BQ19QQ1VfVFBDX0NISVJQX1BXUl9NU0IgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgTUFDX1BDVV9UUENfQ0hJUlBfUFdSX0xTQiAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBNQUNfUENVX1RQQ19DSElSUF9QV1JfTUFTSyAgICAgICAgICAgICAgIDB4MDAzZjAwMDAKLSNkZWZpbmUgTUFDX1BDVV9UUENfQ0hJUlBfUFdSX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfVFBDX0NISVJQX1BXUl9NQVNLKSA+PiBNQUNfUENVX1RQQ19DSElSUF9QV1JfTFNCKQotI2RlZmluZSBNQUNfUENVX1RQQ19DSElSUF9QV1JfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfVFBDX0NISVJQX1BXUl9MU0IpICYgTUFDX1BDVV9UUENfQ0hJUlBfUFdSX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfVFBDX0NUU19QV1JfTVNCICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgTUFDX1BDVV9UUENfQ1RTX1BXUl9MU0IgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIE1BQ19QQ1VfVFBDX0NUU19QV1JfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwM2YwMAotI2RlZmluZSBNQUNfUENVX1RQQ19DVFNfUFdSX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgTUFDX1BDVV9UUENfQ1RTX1BXUl9NQVNLKSA+PiBNQUNfUENVX1RQQ19DVFNfUFdSX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9UUENfQ1RTX1BXUl9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBNQUNfUENVX1RQQ19DVFNfUFdSX0xTQikgJiBNQUNfUENVX1RQQ19DVFNfUFdSX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfVFBDX0FDS19QV1JfTVNCICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBNQUNfUENVX1RQQ19BQ0tfUFdSX0xTQiAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9UUENfQUNLX1BXUl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMDNmCi0jZGVmaW5lIE1BQ19QQ1VfVFBDX0FDS19QV1JfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBNQUNfUENVX1RQQ19BQ0tfUFdSX01BU0spID4+IE1BQ19QQ1VfVFBDX0FDS19QV1JfTFNCKQotI2RlZmluZSBNQUNfUENVX1RQQ19BQ0tfUFdSX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfVFBDX0FDS19QV1JfTFNCKSAmIE1BQ19QQ1VfVFBDX0FDS19QV1JfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX1RYX0ZSQU1FX0NOVF9BRERSRVNTICAgICAgICAgICAgIDB4MDAwMDgwOTAKLSNkZWZpbmUgTUFDX1BDVV9UWF9GUkFNRV9DTlRfT0ZGU0VUICAgICAgICAgICAgICAweDAwMDAwMDkwCi0jZGVmaW5lIE1BQ19QQ1VfVFhfRlJBTUVfQ05UX1ZBTFVFX01TQiAgICAgICAgICAgMzEKLSNkZWZpbmUgTUFDX1BDVV9UWF9GUkFNRV9DTlRfVkFMVUVfTFNCICAgICAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfVFhfRlJBTUVfQ05UX1ZBTFVFX01BU0sgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBNQUNfUENVX1RYX0ZSQU1FX0NOVF9WQUxVRV9HRVQoeCkgICAgICAgICgoKHgpICYgTUFDX1BDVV9UWF9GUkFNRV9DTlRfVkFMVUVfTUFTSykgPj4gTUFDX1BDVV9UWF9GUkFNRV9DTlRfVkFMVUVfTFNCKQotI2RlZmluZSBNQUNfUENVX1RYX0ZSQU1FX0NOVF9WQUxVRV9TRVQoeCkgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfVFhfRlJBTUVfQ05UX1ZBTFVFX0xTQikgJiBNQUNfUENVX1RYX0ZSQU1FX0NOVF9WQUxVRV9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfUlhfRlJBTUVfQ05UX0FERFJFU1MgICAgICAgICAgICAgMHgwMDAwODA5NAotI2RlZmluZSBNQUNfUENVX1JYX0ZSQU1FX0NOVF9PRkZTRVQgICAgICAgICAgICAgIDB4MDAwMDAwOTQKLSNkZWZpbmUgTUFDX1BDVV9SWF9GUkFNRV9DTlRfVkFMVUVfTVNCICAgICAgICAgICAzMQotI2RlZmluZSBNQUNfUENVX1JYX0ZSQU1FX0NOVF9WQUxVRV9MU0IgICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9SWF9GUkFNRV9DTlRfVkFMVUVfTUFTSyAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfUlhfRlJBTUVfQ05UX1ZBTFVFX0dFVCh4KSAgICAgICAgKCgoeCkgJiBNQUNfUENVX1JYX0ZSQU1FX0NOVF9WQUxVRV9NQVNLKSA+PiBNQUNfUENVX1JYX0ZSQU1FX0NOVF9WQUxVRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfUlhfRlJBTUVfQ05UX1ZBTFVFX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9SWF9GUkFNRV9DTlRfVkFMVUVfTFNCKSAmIE1BQ19QQ1VfUlhfRlJBTUVfQ05UX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9SWF9DTEVBUl9DTlRfQUREUkVTUyAgICAgICAgICAgICAweDAwMDA4MDk4Ci0jZGVmaW5lIE1BQ19QQ1VfUlhfQ0xFQVJfQ05UX09GRlNFVCAgICAgICAgICAgICAgMHgwMDAwMDA5OAotI2RlZmluZSBNQUNfUENVX1JYX0NMRUFSX0NOVF9WQUxVRV9NU0IgICAgICAgICAgIDMxCi0jZGVmaW5lIE1BQ19QQ1VfUlhfQ0xFQVJfQ05UX1ZBTFVFX0xTQiAgICAgICAgICAgMAotI2RlZmluZSBNQUNfUENVX1JYX0NMRUFSX0NOVF9WQUxVRV9NQVNLICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgTUFDX1BDVV9SWF9DTEVBUl9DTlRfVkFMVUVfR0VUKHgpICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfUlhfQ0xFQVJfQ05UX1ZBTFVFX01BU0spID4+IE1BQ19QQ1VfUlhfQ0xFQVJfQ05UX1ZBTFVFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9SWF9DTEVBUl9DTlRfVkFMVUVfU0VUKHgpICAgICAgICAoKCh4KSA8PCBNQUNfUENVX1JYX0NMRUFSX0NOVF9WQUxVRV9MU0IpICYgTUFDX1BDVV9SWF9DTEVBUl9DTlRfVkFMVUVfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX0NZQ0xFX0NOVF9BRERSRVNTICAgICAgICAgICAgICAgIDB4MDAwMDgwOWMKLSNkZWZpbmUgTUFDX1BDVV9DWUNMRV9DTlRfT0ZGU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMDljCi0jZGVmaW5lIE1BQ19QQ1VfQ1lDTEVfQ05UX1ZBTFVFX01TQiAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgTUFDX1BDVV9DWUNMRV9DTlRfVkFMVUVfTFNCICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfQ1lDTEVfQ05UX1ZBTFVFX01BU0sgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBNQUNfUENVX0NZQ0xFX0NOVF9WQUxVRV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgTUFDX1BDVV9DWUNMRV9DTlRfVkFMVUVfTUFTSykgPj4gTUFDX1BDVV9DWUNMRV9DTlRfVkFMVUVfTFNCKQotI2RlZmluZSBNQUNfUENVX0NZQ0xFX0NOVF9WQUxVRV9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfQ1lDTEVfQ05UX1ZBTFVFX0xTQikgJiBNQUNfUENVX0NZQ0xFX0NOVF9WQUxVRV9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfUVVJRVRfVElNRV8xX0FERFJFU1MgICAgICAgICAgICAgMHgwMDAwODBhMAotI2RlZmluZSBNQUNfUENVX1FVSUVUX1RJTUVfMV9PRkZTRVQgICAgICAgICAgICAgIDB4MDAwMDAwYTAKLSNkZWZpbmUgTUFDX1BDVV9RVUlFVF9USU1FXzFfQUNLX0NUU19FTkFCTEVfTVNCICAxNwotI2RlZmluZSBNQUNfUENVX1FVSUVUX1RJTUVfMV9BQ0tfQ1RTX0VOQUJMRV9MU0IgIDE3Ci0jZGVmaW5lIE1BQ19QQ1VfUVVJRVRfVElNRV8xX0FDS19DVFNfRU5BQkxFX01BU0sgMHgwMDAyMDAwMAotI2RlZmluZSBNQUNfUENVX1FVSUVUX1RJTUVfMV9BQ0tfQ1RTX0VOQUJMRV9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX1FVSUVUX1RJTUVfMV9BQ0tfQ1RTX0VOQUJMRV9NQVNLKSA+PiBNQUNfUENVX1FVSUVUX1RJTUVfMV9BQ0tfQ1RTX0VOQUJMRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfUVVJRVRfVElNRV8xX0FDS19DVFNfRU5BQkxFX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX1FVSUVUX1RJTUVfMV9BQ0tfQ1RTX0VOQUJMRV9MU0IpICYgTUFDX1BDVV9RVUlFVF9USU1FXzFfQUNLX0NUU19FTkFCTEVfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX1FVSUVUX1RJTUVfMl9BRERSRVNTICAgICAgICAgICAgIDB4MDAwMDgwYTQKLSNkZWZpbmUgTUFDX1BDVV9RVUlFVF9USU1FXzJfT0ZGU0VUICAgICAgICAgICAgICAweDAwMDAwMGE0Ci0jZGVmaW5lIE1BQ19QQ1VfUVVJRVRfVElNRV8yX0RVUkFUSU9OX01TQiAgICAgICAgMzEKLSNkZWZpbmUgTUFDX1BDVV9RVUlFVF9USU1FXzJfRFVSQVRJT05fTFNCICAgICAgICAxNgotI2RlZmluZSBNQUNfUENVX1FVSUVUX1RJTUVfMl9EVVJBVElPTl9NQVNLICAgICAgIDB4ZmZmZjAwMDAKLSNkZWZpbmUgTUFDX1BDVV9RVUlFVF9USU1FXzJfRFVSQVRJT05fR0VUKHgpICAgICAoKCh4KSAmIE1BQ19QQ1VfUVVJRVRfVElNRV8yX0RVUkFUSU9OX01BU0spID4+IE1BQ19QQ1VfUVVJRVRfVElNRV8yX0RVUkFUSU9OX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9RVUlFVF9USU1FXzJfRFVSQVRJT05fU0VUKHgpICAgICAoKCh4KSA8PCBNQUNfUENVX1FVSUVUX1RJTUVfMl9EVVJBVElPTl9MU0IpICYgTUFDX1BDVV9RVUlFVF9USU1FXzJfRFVSQVRJT05fTUFTSykKLQotI2RlZmluZSBNQUNfUENVX1FPU19OT19BQ0tfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDgwYTgKLSNkZWZpbmUgTUFDX1BDVV9RT1NfTk9fQUNLX09GRlNFVCAgICAgICAgICAgICAgICAweDAwMDAwMGE4Ci0jZGVmaW5lIE1BQ19QQ1VfUU9TX05PX0FDS19CWVRFX09GRlNFVF9NU0IgICAgICAgOAotI2RlZmluZSBNQUNfUENVX1FPU19OT19BQ0tfQllURV9PRkZTRVRfTFNCICAgICAgIDcKLSNkZWZpbmUgTUFDX1BDVV9RT1NfTk9fQUNLX0JZVEVfT0ZGU0VUX01BU0sgICAgICAweDAwMDAwMTgwCi0jZGVmaW5lIE1BQ19QQ1VfUU9TX05PX0FDS19CWVRFX09GRlNFVF9HRVQoeCkgICAgKCgoeCkgJiBNQUNfUENVX1FPU19OT19BQ0tfQllURV9PRkZTRVRfTUFTSykgPj4gTUFDX1BDVV9RT1NfTk9fQUNLX0JZVEVfT0ZGU0VUX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9RT1NfTk9fQUNLX0JZVEVfT0ZGU0VUX1NFVCh4KSAgICAoKCh4KSA8PCBNQUNfUENVX1FPU19OT19BQ0tfQllURV9PRkZTRVRfTFNCKSAmIE1BQ19QQ1VfUU9TX05PX0FDS19CWVRFX09GRlNFVF9NQVNLKQotI2RlZmluZSBNQUNfUENVX1FPU19OT19BQ0tfQklUX09GRlNFVF9NU0IgICAgICAgIDYKLSNkZWZpbmUgTUFDX1BDVV9RT1NfTk9fQUNLX0JJVF9PRkZTRVRfTFNCICAgICAgICA0Ci0jZGVmaW5lIE1BQ19QQ1VfUU9TX05PX0FDS19CSVRfT0ZGU0VUX01BU0sgICAgICAgMHgwMDAwMDA3MAotI2RlZmluZSBNQUNfUENVX1FPU19OT19BQ0tfQklUX09GRlNFVF9HRVQoeCkgICAgICgoKHgpICYgTUFDX1BDVV9RT1NfTk9fQUNLX0JJVF9PRkZTRVRfTUFTSykgPj4gTUFDX1BDVV9RT1NfTk9fQUNLX0JJVF9PRkZTRVRfTFNCKQotI2RlZmluZSBNQUNfUENVX1FPU19OT19BQ0tfQklUX09GRlNFVF9TRVQoeCkgICAgICgoKHgpIDw8IE1BQ19QQ1VfUU9TX05PX0FDS19CSVRfT0ZGU0VUX0xTQikgJiBNQUNfUENVX1FPU19OT19BQ0tfQklUX09GRlNFVF9NQVNLKQotI2RlZmluZSBNQUNfUENVX1FPU19OT19BQ0tfVFdPX0JJVF9WQUxVRVNfTVNCICAgIDMKLSNkZWZpbmUgTUFDX1BDVV9RT1NfTk9fQUNLX1RXT19CSVRfVkFMVUVTX0xTQiAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfUU9TX05PX0FDS19UV09fQklUX1ZBTFVFU19NQVNLICAgMHgwMDAwMDAwZgotI2RlZmluZSBNQUNfUENVX1FPU19OT19BQ0tfVFdPX0JJVF9WQUxVRVNfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9RT1NfTk9fQUNLX1RXT19CSVRfVkFMVUVTX01BU0spID4+IE1BQ19QQ1VfUU9TX05PX0FDS19UV09fQklUX1ZBTFVFU19MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfUU9TX05PX0FDS19UV09fQklUX1ZBTFVFU19TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9RT1NfTk9fQUNLX1RXT19CSVRfVkFMVUVTX0xTQikgJiBNQUNfUENVX1FPU19OT19BQ0tfVFdPX0JJVF9WQUxVRVNfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX1BIWV9FUlJPUl9NQVNLX0FERFJFU1MgICAgICAgICAgIDB4MDAwMDgwYWMKLSNkZWZpbmUgTUFDX1BDVV9QSFlfRVJST1JfTUFTS19PRkZTRVQgICAgICAgICAgICAweDAwMDAwMGFjCi0jZGVmaW5lIE1BQ19QQ1VfUEhZX0VSUk9SX01BU0tfVkFMVUVfTVNCICAgICAgICAgMzEKLSNkZWZpbmUgTUFDX1BDVV9QSFlfRVJST1JfTUFTS19WQUxVRV9MU0IgICAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfUEhZX0VSUk9SX01BU0tfVkFMVUVfTUFTSyAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBNQUNfUENVX1BIWV9FUlJPUl9NQVNLX1ZBTFVFX0dFVCh4KSAgICAgICgoKHgpICYgTUFDX1BDVV9QSFlfRVJST1JfTUFTS19WQUxVRV9NQVNLKSA+PiBNQUNfUENVX1BIWV9FUlJPUl9NQVNLX1ZBTFVFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9QSFlfRVJST1JfTUFTS19WQUxVRV9TRVQoeCkgICAgICAoKCh4KSA8PCBNQUNfUENVX1BIWV9FUlJPUl9NQVNLX1ZBTFVFX0xTQikgJiBNQUNfUENVX1BIWV9FUlJPUl9NQVNLX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9YUkxBVF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAweDAwMDA4MGIwCi0jZGVmaW5lIE1BQ19QQ1VfWFJMQVRfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBiMAotI2RlZmluZSBNQUNfUENVX1hSTEFUX1ZBTFVFX01TQiAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIE1BQ19QQ1VfWFJMQVRfVkFMVUVfTFNCICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBNQUNfUENVX1hSTEFUX1ZBTFVFX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDBmZmYKLSNkZWZpbmUgTUFDX1BDVV9YUkxBVF9WQUxVRV9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfWFJMQVRfVkFMVUVfTUFTSykgPj4gTUFDX1BDVV9YUkxBVF9WQUxVRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfWFJMQVRfVkFMVUVfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9YUkxBVF9WQUxVRV9MU0IpICYgTUFDX1BDVV9YUkxBVF9WQUxVRV9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfUlhCVUZfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgMHgwMDAwODBiNAotI2RlZmluZSBNQUNfUENVX1JYQlVGX09GRlNFVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYjQKLSNkZWZpbmUgTUFDX1BDVV9SWEJVRl9SRUdfUkRfRU5BQkxFX01TQiAgICAgICAgICAxMQotI2RlZmluZSBNQUNfUENVX1JYQlVGX1JFR19SRF9FTkFCTEVfTFNCICAgICAgICAgIDExCi0jZGVmaW5lIE1BQ19QQ1VfUlhCVUZfUkVHX1JEX0VOQUJMRV9NQVNLICAgICAgICAgMHgwMDAwMDgwMAotI2RlZmluZSBNQUNfUENVX1JYQlVGX1JFR19SRF9FTkFCTEVfR0VUKHgpICAgICAgICgoKHgpICYgTUFDX1BDVV9SWEJVRl9SRUdfUkRfRU5BQkxFX01BU0spID4+IE1BQ19QQ1VfUlhCVUZfUkVHX1JEX0VOQUJMRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfUlhCVUZfUkVHX1JEX0VOQUJMRV9TRVQoeCkgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9SWEJVRl9SRUdfUkRfRU5BQkxFX0xTQikgJiBNQUNfUENVX1JYQlVGX1JFR19SRF9FTkFCTEVfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9SWEJVRl9ISUdIX1BSSU9SSVRZX1RIUlNIRF9NU0IgICAxMAotI2RlZmluZSBNQUNfUENVX1JYQlVGX0hJR0hfUFJJT1JJVFlfVEhSU0hEX0xTQiAgIDAKLSNkZWZpbmUgTUFDX1BDVV9SWEJVRl9ISUdIX1BSSU9SSVRZX1RIUlNIRF9NQVNLICAweDAwMDAwN2ZmCi0jZGVmaW5lIE1BQ19QQ1VfUlhCVUZfSElHSF9QUklPUklUWV9USFJTSERfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9SWEJVRl9ISUdIX1BSSU9SSVRZX1RIUlNIRF9NQVNLKSA+PiBNQUNfUENVX1JYQlVGX0hJR0hfUFJJT1JJVFlfVEhSU0hEX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9SWEJVRl9ISUdIX1BSSU9SSVRZX1RIUlNIRF9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9SWEJVRl9ISUdIX1BSSU9SSVRZX1RIUlNIRF9MU0IpICYgTUFDX1BDVV9SWEJVRl9ISUdIX1BSSU9SSVRZX1RIUlNIRF9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfTUlDX1FPU19DT05UUk9MX0FERFJFU1MgICAgICAgICAgMHgwMDAwODBiOAotI2RlZmluZSBNQUNfUENVX01JQ19RT1NfQ09OVFJPTF9PRkZTRVQgICAgICAgICAgIDB4MDAwMDAwYjgKLSNkZWZpbmUgTUFDX1BDVV9NSUNfUU9TX0NPTlRST0xfRU5BQkxFX01TQiAgICAgICAxNgotI2RlZmluZSBNQUNfUENVX01JQ19RT1NfQ09OVFJPTF9FTkFCTEVfTFNCICAgICAgIDE2Ci0jZGVmaW5lIE1BQ19QQ1VfTUlDX1FPU19DT05UUk9MX0VOQUJMRV9NQVNLICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBNQUNfUENVX01JQ19RT1NfQ09OVFJPTF9FTkFCTEVfR0VUKHgpICAgICgoKHgpICYgTUFDX1BDVV9NSUNfUU9TX0NPTlRST0xfRU5BQkxFX01BU0spID4+IE1BQ19QQ1VfTUlDX1FPU19DT05UUk9MX0VOQUJMRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfTUlDX1FPU19DT05UUk9MX0VOQUJMRV9TRVQoeCkgICAgKCgoeCkgPDwgTUFDX1BDVV9NSUNfUU9TX0NPTlRST0xfRU5BQkxFX0xTQikgJiBNQUNfUENVX01JQ19RT1NfQ09OVFJPTF9FTkFCTEVfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9NSUNfUU9TX0NPTlRST0xfVkFMVUVfN19NU0IgICAgICAxNQotI2RlZmluZSBNQUNfUENVX01JQ19RT1NfQ09OVFJPTF9WQUxVRV83X0xTQiAgICAgIDE0Ci0jZGVmaW5lIE1BQ19QQ1VfTUlDX1FPU19DT05UUk9MX1ZBTFVFXzdfTUFTSyAgICAgMHgwMDAwYzAwMAotI2RlZmluZSBNQUNfUENVX01JQ19RT1NfQ09OVFJPTF9WQUxVRV83X0dFVCh4KSAgICgoKHgpICYgTUFDX1BDVV9NSUNfUU9TX0NPTlRST0xfVkFMVUVfN19NQVNLKSA+PiBNQUNfUENVX01JQ19RT1NfQ09OVFJPTF9WQUxVRV83X0xTQikKLSNkZWZpbmUgTUFDX1BDVV9NSUNfUU9TX0NPTlRST0xfVkFMVUVfN19TRVQoeCkgICAoKCh4KSA8PCBNQUNfUENVX01JQ19RT1NfQ09OVFJPTF9WQUxVRV83X0xTQikgJiBNQUNfUENVX01JQ19RT1NfQ09OVFJPTF9WQUxVRV83X01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfTUlDX1FPU19DT05UUk9MX1ZBTFVFXzZfTVNCICAgICAgMTMKLSNkZWZpbmUgTUFDX1BDVV9NSUNfUU9TX0NPTlRST0xfVkFMVUVfNl9MU0IgICAgICAxMgotI2RlZmluZSBNQUNfUENVX01JQ19RT1NfQ09OVFJPTF9WQUxVRV82X01BU0sgICAgIDB4MDAwMDMwMDAKLSNkZWZpbmUgTUFDX1BDVV9NSUNfUU9TX0NPTlRST0xfVkFMVUVfNl9HRVQoeCkgICAoKCh4KSAmIE1BQ19QQ1VfTUlDX1FPU19DT05UUk9MX1ZBTFVFXzZfTUFTSykgPj4gTUFDX1BDVV9NSUNfUU9TX0NPTlRST0xfVkFMVUVfNl9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfTUlDX1FPU19DT05UUk9MX1ZBTFVFXzZfU0VUKHgpICAgKCgoeCkgPDwgTUFDX1BDVV9NSUNfUU9TX0NPTlRST0xfVkFMVUVfNl9MU0IpICYgTUFDX1BDVV9NSUNfUU9TX0NPTlRST0xfVkFMVUVfNl9NQVNLKQotI2RlZmluZSBNQUNfUENVX01JQ19RT1NfQ09OVFJPTF9WQUxVRV81X01TQiAgICAgIDExCi0jZGVmaW5lIE1BQ19QQ1VfTUlDX1FPU19DT05UUk9MX1ZBTFVFXzVfTFNCICAgICAgMTAKLSNkZWZpbmUgTUFDX1BDVV9NSUNfUU9TX0NPTlRST0xfVkFMVUVfNV9NQVNLICAgICAweDAwMDAwYzAwCi0jZGVmaW5lIE1BQ19QQ1VfTUlDX1FPU19DT05UUk9MX1ZBTFVFXzVfR0VUKHgpICAgKCgoeCkgJiBNQUNfUENVX01JQ19RT1NfQ09OVFJPTF9WQUxVRV81X01BU0spID4+IE1BQ19QQ1VfTUlDX1FPU19DT05UUk9MX1ZBTFVFXzVfTFNCKQotI2RlZmluZSBNQUNfUENVX01JQ19RT1NfQ09OVFJPTF9WQUxVRV81X1NFVCh4KSAgICgoKHgpIDw8IE1BQ19QQ1VfTUlDX1FPU19DT05UUk9MX1ZBTFVFXzVfTFNCKSAmIE1BQ19QQ1VfTUlDX1FPU19DT05UUk9MX1ZBTFVFXzVfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9NSUNfUU9TX0NPTlRST0xfVkFMVUVfNF9NU0IgICAgICA5Ci0jZGVmaW5lIE1BQ19QQ1VfTUlDX1FPU19DT05UUk9MX1ZBTFVFXzRfTFNCICAgICAgOAotI2RlZmluZSBNQUNfUENVX01JQ19RT1NfQ09OVFJPTF9WQUxVRV80X01BU0sgICAgIDB4MDAwMDAzMDAKLSNkZWZpbmUgTUFDX1BDVV9NSUNfUU9TX0NPTlRST0xfVkFMVUVfNF9HRVQoeCkgICAoKCh4KSAmIE1BQ19QQ1VfTUlDX1FPU19DT05UUk9MX1ZBTFVFXzRfTUFTSykgPj4gTUFDX1BDVV9NSUNfUU9TX0NPTlRST0xfVkFMVUVfNF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfTUlDX1FPU19DT05UUk9MX1ZBTFVFXzRfU0VUKHgpICAgKCgoeCkgPDwgTUFDX1BDVV9NSUNfUU9TX0NPTlRST0xfVkFMVUVfNF9MU0IpICYgTUFDX1BDVV9NSUNfUU9TX0NPTlRST0xfVkFMVUVfNF9NQVNLKQotI2RlZmluZSBNQUNfUENVX01JQ19RT1NfQ09OVFJPTF9WQUxVRV8zX01TQiAgICAgIDcKLSNkZWZpbmUgTUFDX1BDVV9NSUNfUU9TX0NPTlRST0xfVkFMVUVfM19MU0IgICAgICA2Ci0jZGVmaW5lIE1BQ19QQ1VfTUlDX1FPU19DT05UUk9MX1ZBTFVFXzNfTUFTSyAgICAgMHgwMDAwMDBjMAotI2RlZmluZSBNQUNfUENVX01JQ19RT1NfQ09OVFJPTF9WQUxVRV8zX0dFVCh4KSAgICgoKHgpICYgTUFDX1BDVV9NSUNfUU9TX0NPTlRST0xfVkFMVUVfM19NQVNLKSA+PiBNQUNfUENVX01JQ19RT1NfQ09OVFJPTF9WQUxVRV8zX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9NSUNfUU9TX0NPTlRST0xfVkFMVUVfM19TRVQoeCkgICAoKCh4KSA8PCBNQUNfUENVX01JQ19RT1NfQ09OVFJPTF9WQUxVRV8zX0xTQikgJiBNQUNfUENVX01JQ19RT1NfQ09OVFJPTF9WQUxVRV8zX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfTUlDX1FPU19DT05UUk9MX1ZBTFVFXzJfTVNCICAgICAgNQotI2RlZmluZSBNQUNfUENVX01JQ19RT1NfQ09OVFJPTF9WQUxVRV8yX0xTQiAgICAgIDQKLSNkZWZpbmUgTUFDX1BDVV9NSUNfUU9TX0NPTlRST0xfVkFMVUVfMl9NQVNLICAgICAweDAwMDAwMDMwCi0jZGVmaW5lIE1BQ19QQ1VfTUlDX1FPU19DT05UUk9MX1ZBTFVFXzJfR0VUKHgpICAgKCgoeCkgJiBNQUNfUENVX01JQ19RT1NfQ09OVFJPTF9WQUxVRV8yX01BU0spID4+IE1BQ19QQ1VfTUlDX1FPU19DT05UUk9MX1ZBTFVFXzJfTFNCKQotI2RlZmluZSBNQUNfUENVX01JQ19RT1NfQ09OVFJPTF9WQUxVRV8yX1NFVCh4KSAgICgoKHgpIDw8IE1BQ19QQ1VfTUlDX1FPU19DT05UUk9MX1ZBTFVFXzJfTFNCKSAmIE1BQ19QQ1VfTUlDX1FPU19DT05UUk9MX1ZBTFVFXzJfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9NSUNfUU9TX0NPTlRST0xfVkFMVUVfMV9NU0IgICAgICAzCi0jZGVmaW5lIE1BQ19QQ1VfTUlDX1FPU19DT05UUk9MX1ZBTFVFXzFfTFNCICAgICAgMgotI2RlZmluZSBNQUNfUENVX01JQ19RT1NfQ09OVFJPTF9WQUxVRV8xX01BU0sgICAgIDB4MDAwMDAwMGMKLSNkZWZpbmUgTUFDX1BDVV9NSUNfUU9TX0NPTlRST0xfVkFMVUVfMV9HRVQoeCkgICAoKCh4KSAmIE1BQ19QQ1VfTUlDX1FPU19DT05UUk9MX1ZBTFVFXzFfTUFTSykgPj4gTUFDX1BDVV9NSUNfUU9TX0NPTlRST0xfVkFMVUVfMV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfTUlDX1FPU19DT05UUk9MX1ZBTFVFXzFfU0VUKHgpICAgKCgoeCkgPDwgTUFDX1BDVV9NSUNfUU9TX0NPTlRST0xfVkFMVUVfMV9MU0IpICYgTUFDX1BDVV9NSUNfUU9TX0NPTlRST0xfVkFMVUVfMV9NQVNLKQotI2RlZmluZSBNQUNfUENVX01JQ19RT1NfQ09OVFJPTF9WQUxVRV8wX01TQiAgICAgIDEKLSNkZWZpbmUgTUFDX1BDVV9NSUNfUU9TX0NPTlRST0xfVkFMVUVfMF9MU0IgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfTUlDX1FPU19DT05UUk9MX1ZBTFVFXzBfTUFTSyAgICAgMHgwMDAwMDAwMwotI2RlZmluZSBNQUNfUENVX01JQ19RT1NfQ09OVFJPTF9WQUxVRV8wX0dFVCh4KSAgICgoKHgpICYgTUFDX1BDVV9NSUNfUU9TX0NPTlRST0xfVkFMVUVfMF9NQVNLKSA+PiBNQUNfUENVX01JQ19RT1NfQ09OVFJPTF9WQUxVRV8wX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9NSUNfUU9TX0NPTlRST0xfVkFMVUVfMF9TRVQoeCkgICAoKCh4KSA8PCBNQUNfUENVX01JQ19RT1NfQ09OVFJPTF9WQUxVRV8wX0xTQikgJiBNQUNfUENVX01JQ19RT1NfQ09OVFJPTF9WQUxVRV8wX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9NSUNfUU9TX1NFTEVDVF9BRERSRVNTICAgICAgICAgICAweDAwMDA4MGJjCi0jZGVmaW5lIE1BQ19QQ1VfTUlDX1FPU19TRUxFQ1RfT0ZGU0VUICAgICAgICAgICAgMHgwMDAwMDBiYwotI2RlZmluZSBNQUNfUENVX01JQ19RT1NfU0VMRUNUX1ZBTFVFXzdfTVNCICAgICAgIDMxCi0jZGVmaW5lIE1BQ19QQ1VfTUlDX1FPU19TRUxFQ1RfVkFMVUVfN19MU0IgICAgICAgMjgKLSNkZWZpbmUgTUFDX1BDVV9NSUNfUU9TX1NFTEVDVF9WQUxVRV83X01BU0sgICAgICAweGYwMDAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfTUlDX1FPU19TRUxFQ1RfVkFMVUVfN19HRVQoeCkgICAgKCgoeCkgJiBNQUNfUENVX01JQ19RT1NfU0VMRUNUX1ZBTFVFXzdfTUFTSykgPj4gTUFDX1BDVV9NSUNfUU9TX1NFTEVDVF9WQUxVRV83X0xTQikKLSNkZWZpbmUgTUFDX1BDVV9NSUNfUU9TX1NFTEVDVF9WQUxVRV83X1NFVCh4KSAgICAoKCh4KSA8PCBNQUNfUENVX01JQ19RT1NfU0VMRUNUX1ZBTFVFXzdfTFNCKSAmIE1BQ19QQ1VfTUlDX1FPU19TRUxFQ1RfVkFMVUVfN19NQVNLKQotI2RlZmluZSBNQUNfUENVX01JQ19RT1NfU0VMRUNUX1ZBTFVFXzZfTVNCICAgICAgIDI3Ci0jZGVmaW5lIE1BQ19QQ1VfTUlDX1FPU19TRUxFQ1RfVkFMVUVfNl9MU0IgICAgICAgMjQKLSNkZWZpbmUgTUFDX1BDVV9NSUNfUU9TX1NFTEVDVF9WQUxVRV82X01BU0sgICAgICAweDBmMDAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfTUlDX1FPU19TRUxFQ1RfVkFMVUVfNl9HRVQoeCkgICAgKCgoeCkgJiBNQUNfUENVX01JQ19RT1NfU0VMRUNUX1ZBTFVFXzZfTUFTSykgPj4gTUFDX1BDVV9NSUNfUU9TX1NFTEVDVF9WQUxVRV82X0xTQikKLSNkZWZpbmUgTUFDX1BDVV9NSUNfUU9TX1NFTEVDVF9WQUxVRV82X1NFVCh4KSAgICAoKCh4KSA8PCBNQUNfUENVX01JQ19RT1NfU0VMRUNUX1ZBTFVFXzZfTFNCKSAmIE1BQ19QQ1VfTUlDX1FPU19TRUxFQ1RfVkFMVUVfNl9NQVNLKQotI2RlZmluZSBNQUNfUENVX01JQ19RT1NfU0VMRUNUX1ZBTFVFXzVfTVNCICAgICAgIDIzCi0jZGVmaW5lIE1BQ19QQ1VfTUlDX1FPU19TRUxFQ1RfVkFMVUVfNV9MU0IgICAgICAgMjAKLSNkZWZpbmUgTUFDX1BDVV9NSUNfUU9TX1NFTEVDVF9WQUxVRV81X01BU0sgICAgICAweDAwZjAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfTUlDX1FPU19TRUxFQ1RfVkFMVUVfNV9HRVQoeCkgICAgKCgoeCkgJiBNQUNfUENVX01JQ19RT1NfU0VMRUNUX1ZBTFVFXzVfTUFTSykgPj4gTUFDX1BDVV9NSUNfUU9TX1NFTEVDVF9WQUxVRV81X0xTQikKLSNkZWZpbmUgTUFDX1BDVV9NSUNfUU9TX1NFTEVDVF9WQUxVRV81X1NFVCh4KSAgICAoKCh4KSA8PCBNQUNfUENVX01JQ19RT1NfU0VMRUNUX1ZBTFVFXzVfTFNCKSAmIE1BQ19QQ1VfTUlDX1FPU19TRUxFQ1RfVkFMVUVfNV9NQVNLKQotI2RlZmluZSBNQUNfUENVX01JQ19RT1NfU0VMRUNUX1ZBTFVFXzRfTVNCICAgICAgIDE5Ci0jZGVmaW5lIE1BQ19QQ1VfTUlDX1FPU19TRUxFQ1RfVkFMVUVfNF9MU0IgICAgICAgMTYKLSNkZWZpbmUgTUFDX1BDVV9NSUNfUU9TX1NFTEVDVF9WQUxVRV80X01BU0sgICAgICAweDAwMGYwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfTUlDX1FPU19TRUxFQ1RfVkFMVUVfNF9HRVQoeCkgICAgKCgoeCkgJiBNQUNfUENVX01JQ19RT1NfU0VMRUNUX1ZBTFVFXzRfTUFTSykgPj4gTUFDX1BDVV9NSUNfUU9TX1NFTEVDVF9WQUxVRV80X0xTQikKLSNkZWZpbmUgTUFDX1BDVV9NSUNfUU9TX1NFTEVDVF9WQUxVRV80X1NFVCh4KSAgICAoKCh4KSA8PCBNQUNfUENVX01JQ19RT1NfU0VMRUNUX1ZBTFVFXzRfTFNCKSAmIE1BQ19QQ1VfTUlDX1FPU19TRUxFQ1RfVkFMVUVfNF9NQVNLKQotI2RlZmluZSBNQUNfUENVX01JQ19RT1NfU0VMRUNUX1ZBTFVFXzNfTVNCICAgICAgIDE1Ci0jZGVmaW5lIE1BQ19QQ1VfTUlDX1FPU19TRUxFQ1RfVkFMVUVfM19MU0IgICAgICAgMTIKLSNkZWZpbmUgTUFDX1BDVV9NSUNfUU9TX1NFTEVDVF9WQUxVRV8zX01BU0sgICAgICAweDAwMDBmMDAwCi0jZGVmaW5lIE1BQ19QQ1VfTUlDX1FPU19TRUxFQ1RfVkFMVUVfM19HRVQoeCkgICAgKCgoeCkgJiBNQUNfUENVX01JQ19RT1NfU0VMRUNUX1ZBTFVFXzNfTUFTSykgPj4gTUFDX1BDVV9NSUNfUU9TX1NFTEVDVF9WQUxVRV8zX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9NSUNfUU9TX1NFTEVDVF9WQUxVRV8zX1NFVCh4KSAgICAoKCh4KSA8PCBNQUNfUENVX01JQ19RT1NfU0VMRUNUX1ZBTFVFXzNfTFNCKSAmIE1BQ19QQ1VfTUlDX1FPU19TRUxFQ1RfVkFMVUVfM19NQVNLKQotI2RlZmluZSBNQUNfUENVX01JQ19RT1NfU0VMRUNUX1ZBTFVFXzJfTVNCICAgICAgIDExCi0jZGVmaW5lIE1BQ19QQ1VfTUlDX1FPU19TRUxFQ1RfVkFMVUVfMl9MU0IgICAgICAgOAotI2RlZmluZSBNQUNfUENVX01JQ19RT1NfU0VMRUNUX1ZBTFVFXzJfTUFTSyAgICAgIDB4MDAwMDBmMDAKLSNkZWZpbmUgTUFDX1BDVV9NSUNfUU9TX1NFTEVDVF9WQUxVRV8yX0dFVCh4KSAgICAoKCh4KSAmIE1BQ19QQ1VfTUlDX1FPU19TRUxFQ1RfVkFMVUVfMl9NQVNLKSA+PiBNQUNfUENVX01JQ19RT1NfU0VMRUNUX1ZBTFVFXzJfTFNCKQotI2RlZmluZSBNQUNfUENVX01JQ19RT1NfU0VMRUNUX1ZBTFVFXzJfU0VUKHgpICAgICgoKHgpIDw8IE1BQ19QQ1VfTUlDX1FPU19TRUxFQ1RfVkFMVUVfMl9MU0IpICYgTUFDX1BDVV9NSUNfUU9TX1NFTEVDVF9WQUxVRV8yX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfTUlDX1FPU19TRUxFQ1RfVkFMVUVfMV9NU0IgICAgICAgNwotI2RlZmluZSBNQUNfUENVX01JQ19RT1NfU0VMRUNUX1ZBTFVFXzFfTFNCICAgICAgIDQKLSNkZWZpbmUgTUFDX1BDVV9NSUNfUU9TX1NFTEVDVF9WQUxVRV8xX01BU0sgICAgICAweDAwMDAwMGYwCi0jZGVmaW5lIE1BQ19QQ1VfTUlDX1FPU19TRUxFQ1RfVkFMVUVfMV9HRVQoeCkgICAgKCgoeCkgJiBNQUNfUENVX01JQ19RT1NfU0VMRUNUX1ZBTFVFXzFfTUFTSykgPj4gTUFDX1BDVV9NSUNfUU9TX1NFTEVDVF9WQUxVRV8xX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9NSUNfUU9TX1NFTEVDVF9WQUxVRV8xX1NFVCh4KSAgICAoKCh4KSA8PCBNQUNfUENVX01JQ19RT1NfU0VMRUNUX1ZBTFVFXzFfTFNCKSAmIE1BQ19QQ1VfTUlDX1FPU19TRUxFQ1RfVkFMVUVfMV9NQVNLKQotI2RlZmluZSBNQUNfUENVX01JQ19RT1NfU0VMRUNUX1ZBTFVFXzBfTVNCICAgICAgIDMKLSNkZWZpbmUgTUFDX1BDVV9NSUNfUU9TX1NFTEVDVF9WQUxVRV8wX0xTQiAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfTUlDX1FPU19TRUxFQ1RfVkFMVUVfMF9NQVNLICAgICAgMHgwMDAwMDAwZgotI2RlZmluZSBNQUNfUENVX01JQ19RT1NfU0VMRUNUX1ZBTFVFXzBfR0VUKHgpICAgICgoKHgpICYgTUFDX1BDVV9NSUNfUU9TX1NFTEVDVF9WQUxVRV8wX01BU0spID4+IE1BQ19QQ1VfTUlDX1FPU19TRUxFQ1RfVkFMVUVfMF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfTUlDX1FPU19TRUxFQ1RfVkFMVUVfMF9TRVQoeCkgICAgKCgoeCkgPDwgTUFDX1BDVV9NSUNfUU9TX1NFTEVDVF9WQUxVRV8wX0xTQikgJiBNQUNfUENVX01JQ19RT1NfU0VMRUNUX1ZBTFVFXzBfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9BRERSRVNTICAgICAgICAgICAgICAgIDB4MDAwMDgwYzAKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfT0ZGU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMGMwCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX0RFQlVHX01PREVfTVNCICAgICAgICAgMzEKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfREVCVUdfTU9ERV9MU0IgICAgICAgICAzMAotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9ERUJVR19NT0RFX01BU0sgICAgICAgIDB4YzAwMDAwMDAKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfREVCVUdfTU9ERV9HRVQoeCkgICAgICAoKCh4KSAmIE1BQ19QQ1VfTUlTQ19NT0RFX0RFQlVHX01PREVfTUFTSykgPj4gTUFDX1BDVV9NSVNDX01PREVfREVCVUdfTU9ERV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX0RFQlVHX01PREVfU0VUKHgpICAgICAgKCgoeCkgPDwgTUFDX1BDVV9NSVNDX01PREVfREVCVUdfTU9ERV9MU0IpICYgTUFDX1BDVV9NSVNDX01PREVfREVCVUdfTU9ERV9NQVNLKQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9VU0VfRU9QX1BUUl9GT1JfRE1BX1dSX01TQiAyOQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9VU0VfRU9QX1BUUl9GT1JfRE1BX1dSX0xTQiAyOQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9VU0VfRU9QX1BUUl9GT1JfRE1BX1dSX01BU0sgMHgyMDAwMDAwMAotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9VU0VfRU9QX1BUUl9GT1JfRE1BX1dSX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfTUlTQ19NT0RFX1VTRV9FT1BfUFRSX0ZPUl9ETUFfV1JfTUFTSykgPj4gTUFDX1BDVV9NSVNDX01PREVfVVNFX0VPUF9QVFJfRk9SX0RNQV9XUl9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX1VTRV9FT1BfUFRSX0ZPUl9ETUFfV1JfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfTUlTQ19NT0RFX1VTRV9FT1BfUFRSX0ZPUl9ETUFfV1JfTFNCKSAmIE1BQ19QQ1VfTUlTQ19NT0RFX1VTRV9FT1BfUFRSX0ZPUl9ETUFfV1JfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfQUxXQVlTX1BFUkZPUk1fS0VZX1NFQVJDSF9NU0IgMjgKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfQUxXQVlTX1BFUkZPUk1fS0VZX1NFQVJDSF9MU0IgMjgKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfQUxXQVlTX1BFUkZPUk1fS0VZX1NFQVJDSF9NQVNLIDB4MTAwMDAwMDAKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfQUxXQVlTX1BFUkZPUk1fS0VZX1NFQVJDSF9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX01JU0NfTU9ERV9BTFdBWVNfUEVSRk9STV9LRVlfU0VBUkNIX01BU0spID4+IE1BQ19QQ1VfTUlTQ19NT0RFX0FMV0FZU19QRVJGT1JNX0tFWV9TRUFSQ0hfTFNCKQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9BTFdBWVNfUEVSRk9STV9LRVlfU0VBUkNIX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX01JU0NfTU9ERV9BTFdBWVNfUEVSRk9STV9LRVlfU0VBUkNIX0xTQikgJiBNQUNfUENVX01JU0NfTU9ERV9BTFdBWVNfUEVSRk9STV9LRVlfU0VBUkNIX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX1NFTF9FVk1fTVNCICAgICAgICAgICAgMjcKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfU0VMX0VWTV9MU0IgICAgICAgICAgICAyNwotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9TRUxfRVZNX01BU0sgICAgICAgICAgIDB4MDgwMDAwMDAKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfU0VMX0VWTV9HRVQoeCkgICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfTUlTQ19NT0RFX1NFTF9FVk1fTUFTSykgPj4gTUFDX1BDVV9NSVNDX01PREVfU0VMX0VWTV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX1NFTF9FVk1fU0VUKHgpICAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9NSVNDX01PREVfU0VMX0VWTV9MU0IpICYgTUFDX1BDVV9NSVNDX01PREVfU0VMX0VWTV9NQVNLKQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9DTEVBUl9CQV9WQUxJRF9NU0IgICAgIDI2Ci0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX0NMRUFSX0JBX1ZBTElEX0xTQiAgICAgMjYKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfQ0xFQVJfQkFfVkFMSURfTUFTSyAgICAweDA0MDAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX0NMRUFSX0JBX1ZBTElEX0dFVCh4KSAgKCgoeCkgJiBNQUNfUENVX01JU0NfTU9ERV9DTEVBUl9CQV9WQUxJRF9NQVNLKSA+PiBNQUNfUENVX01JU0NfTU9ERV9DTEVBUl9CQV9WQUxJRF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX0NMRUFSX0JBX1ZBTElEX1NFVCh4KSAgKCgoeCkgPDwgTUFDX1BDVV9NSVNDX01PREVfQ0xFQVJfQkFfVkFMSURfTFNCKSAmIE1BQ19QQ1VfTUlTQ19NT0RFX0NMRUFSX0JBX1ZBTElEX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX0NMRUFSX0ZJUlNUX0hDRl9NU0IgICAgMjUKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfQ0xFQVJfRklSU1RfSENGX0xTQiAgICAyNQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9DTEVBUl9GSVJTVF9IQ0ZfTUFTSyAgIDB4MDIwMDAwMDAKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfQ0xFQVJfRklSU1RfSENGX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfTUlTQ19NT0RFX0NMRUFSX0ZJUlNUX0hDRl9NQVNLKSA+PiBNQUNfUENVX01JU0NfTU9ERV9DTEVBUl9GSVJTVF9IQ0ZfTFNCKQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9DTEVBUl9GSVJTVF9IQ0ZfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfTUlTQ19NT0RFX0NMRUFSX0ZJUlNUX0hDRl9MU0IpICYgTUFDX1BDVV9NSVNDX01PREVfQ0xFQVJfRklSU1RfSENGX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX0NMRUFSX1ZNRl9NU0IgICAgICAgICAgMjQKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfQ0xFQVJfVk1GX0xTQiAgICAgICAgICAyNAotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9DTEVBUl9WTUZfTUFTSyAgICAgICAgIDB4MDEwMDAwMDAKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfQ0xFQVJfVk1GX0dFVCh4KSAgICAgICAoKCh4KSAmIE1BQ19QQ1VfTUlTQ19NT0RFX0NMRUFSX1ZNRl9NQVNLKSA+PiBNQUNfUENVX01JU0NfTU9ERV9DTEVBUl9WTUZfTFNCKQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9DTEVBUl9WTUZfU0VUKHgpICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfTUlTQ19NT0RFX0NMRUFSX1ZNRl9MU0IpICYgTUFDX1BDVV9NSVNDX01PREVfQ0xFQVJfVk1GX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX1JYX0hDRl9QT0xMX0VOQUJMRV9NU0IgMjMKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfUlhfSENGX1BPTExfRU5BQkxFX0xTQiAyMwotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9SWF9IQ0ZfUE9MTF9FTkFCTEVfTUFTSyAweDAwODAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX1JYX0hDRl9QT0xMX0VOQUJMRV9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX01JU0NfTU9ERV9SWF9IQ0ZfUE9MTF9FTkFCTEVfTUFTSykgPj4gTUFDX1BDVV9NSVNDX01PREVfUlhfSENGX1BPTExfRU5BQkxFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfUlhfSENGX1BPTExfRU5BQkxFX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX01JU0NfTU9ERV9SWF9IQ0ZfUE9MTF9FTkFCTEVfTFNCKSAmIE1BQ19QQ1VfTUlTQ19NT0RFX1JYX0hDRl9QT0xMX0VOQUJMRV9NQVNLKQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9IQ0ZfUE9MTF9DQU5DRUxTX05BVl9NU0IgMjIKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfSENGX1BPTExfQ0FOQ0VMU19OQVZfTFNCIDIyCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX0hDRl9QT0xMX0NBTkNFTFNfTkFWX01BU0sgMHgwMDQwMDAwMAotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9IQ0ZfUE9MTF9DQU5DRUxTX05BVl9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX01JU0NfTU9ERV9IQ0ZfUE9MTF9DQU5DRUxTX05BVl9NQVNLKSA+PiBNQUNfUENVX01JU0NfTU9ERV9IQ0ZfUE9MTF9DQU5DRUxTX05BVl9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX0hDRl9QT0xMX0NBTkNFTFNfTkFWX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX01JU0NfTU9ERV9IQ0ZfUE9MTF9DQU5DRUxTX05BVl9MU0IpICYgTUFDX1BDVV9NSVNDX01PREVfSENGX1BPTExfQ0FOQ0VMU19OQVZfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfVEJUVF9QUk9URUNUX01TQiAgICAgICAyMQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9UQlRUX1BST1RFQ1RfTFNCICAgICAgIDIxCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX1RCVFRfUFJPVEVDVF9NQVNLICAgICAgMHgwMDIwMDAwMAotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9UQlRUX1BST1RFQ1RfR0VUKHgpICAgICgoKHgpICYgTUFDX1BDVV9NSVNDX01PREVfVEJUVF9QUk9URUNUX01BU0spID4+IE1BQ19QQ1VfTUlTQ19NT0RFX1RCVFRfUFJPVEVDVF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX1RCVFRfUFJPVEVDVF9TRVQoeCkgICAgKCgoeCkgPDwgTUFDX1BDVV9NSVNDX01PREVfVEJUVF9QUk9URUNUX0xTQikgJiBNQUNfUENVX01JU0NfTU9ERV9UQlRUX1BST1RFQ1RfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfQlRfQU5UX1BSRVZFTlRTX1JYX01TQiAyMAotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9CVF9BTlRfUFJFVkVOVFNfUlhfTFNCIDIwCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX0JUX0FOVF9QUkVWRU5UU19SWF9NQVNLIDB4MDAxMDAwMDAKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfQlRfQU5UX1BSRVZFTlRTX1JYX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfTUlTQ19NT0RFX0JUX0FOVF9QUkVWRU5UU19SWF9NQVNLKSA+PiBNQUNfUENVX01JU0NfTU9ERV9CVF9BTlRfUFJFVkVOVFNfUlhfTFNCKQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9CVF9BTlRfUFJFVkVOVFNfUlhfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfTUlTQ19NT0RFX0JUX0FOVF9QUkVWRU5UU19SWF9MU0IpICYgTUFDX1BDVV9NSVNDX01PREVfQlRfQU5UX1BSRVZFTlRTX1JYX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX0ZPUkNFX1FVSUVUX0NPTExJU0lPTl9NU0IgMTgKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfRk9SQ0VfUVVJRVRfQ09MTElTSU9OX0xTQiAxOAotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9GT1JDRV9RVUlFVF9DT0xMSVNJT05fTUFTSyAweDAwMDQwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX0ZPUkNFX1FVSUVUX0NPTExJU0lPTl9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX01JU0NfTU9ERV9GT1JDRV9RVUlFVF9DT0xMSVNJT05fTUFTSykgPj4gTUFDX1BDVV9NSVNDX01PREVfRk9SQ0VfUVVJRVRfQ09MTElTSU9OX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfRk9SQ0VfUVVJRVRfQ09MTElTSU9OX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX01JU0NfTU9ERV9GT1JDRV9RVUlFVF9DT0xMSVNJT05fTFNCKSAmIE1BQ19QQ1VfTUlTQ19NT0RFX0ZPUkNFX1FVSUVUX0NPTExJU0lPTl9NQVNLKQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9NSVNTX0JFQUNPTl9JTl9TTEVFUF9NU0IgMTQKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfTUlTU19CRUFDT05fSU5fU0xFRVBfTFNCIDE0Ci0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX01JU1NfQkVBQ09OX0lOX1NMRUVQX01BU0sgMHgwMDAwNDAwMAotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9NSVNTX0JFQUNPTl9JTl9TTEVFUF9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX01JU0NfTU9ERV9NSVNTX0JFQUNPTl9JTl9TTEVFUF9NQVNLKSA+PiBNQUNfUENVX01JU0NfTU9ERV9NSVNTX0JFQUNPTl9JTl9TTEVFUF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX01JU1NfQkVBQ09OX0lOX1NMRUVQX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX01JU0NfTU9ERV9NSVNTX0JFQUNPTl9JTl9TTEVFUF9MU0IpICYgTUFDX1BDVV9NSVNDX01PREVfTUlTU19CRUFDT05fSU5fU0xFRVBfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfVFhPUF9UQlRUX0xJTUlUX0VOQUJMRV9NU0IgMTIKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfVFhPUF9UQlRUX0xJTUlUX0VOQUJMRV9MU0IgMTIKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfVFhPUF9UQlRUX0xJTUlUX0VOQUJMRV9NQVNLIDB4MDAwMDEwMDAKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfVFhPUF9UQlRUX0xJTUlUX0VOQUJMRV9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX01JU0NfTU9ERV9UWE9QX1RCVFRfTElNSVRfRU5BQkxFX01BU0spID4+IE1BQ19QQ1VfTUlTQ19NT0RFX1RYT1BfVEJUVF9MSU1JVF9FTkFCTEVfTFNCKQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9UWE9QX1RCVFRfTElNSVRfRU5BQkxFX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX01JU0NfTU9ERV9UWE9QX1RCVFRfTElNSVRfRU5BQkxFX0xTQikgJiBNQUNfUENVX01JU0NfTU9ERV9UWE9QX1RCVFRfTElNSVRfRU5BQkxFX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX0tDX1JYX0FOVF9VUERBVEVfTVNCICAgMTEKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfS0NfUlhfQU5UX1VQREFURV9MU0IgICAxMQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9LQ19SWF9BTlRfVVBEQVRFX01BU0sgIDB4MDAwMDA4MDAKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfS0NfUlhfQU5UX1VQREFURV9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX01JU0NfTU9ERV9LQ19SWF9BTlRfVVBEQVRFX01BU0spID4+IE1BQ19QQ1VfTUlTQ19NT0RFX0tDX1JYX0FOVF9VUERBVEVfTFNCKQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9LQ19SWF9BTlRfVVBEQVRFX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX01JU0NfTU9ERV9LQ19SWF9BTlRfVVBEQVRFX0xTQikgJiBNQUNfUENVX01JU0NfTU9ERV9LQ19SWF9BTlRfVVBEQVRFX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX0RFQlVHX01PREVfU0lGU19NU0IgICAgMTAKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfREVCVUdfTU9ERV9TSUZTX0xTQiAgICAxMAotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9ERUJVR19NT0RFX1NJRlNfTUFTSyAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfREVCVUdfTU9ERV9TSUZTX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfTUlTQ19NT0RFX0RFQlVHX01PREVfU0lGU19NQVNLKSA+PiBNQUNfUENVX01JU0NfTU9ERV9ERUJVR19NT0RFX1NJRlNfTFNCKQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9ERUJVR19NT0RFX1NJRlNfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfTUlTQ19NT0RFX0RFQlVHX01PREVfU0lGU19MU0IpICYgTUFDX1BDVV9NSVNDX01PREVfREVCVUdfTU9ERV9TSUZTX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX0RFQlVHX01PREVfQkFfQklUTUFQX01TQiA5Ci0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX0RFQlVHX01PREVfQkFfQklUTUFQX0xTQiA5Ci0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX0RFQlVHX01PREVfQkFfQklUTUFQX01BU0sgMHgwMDAwMDIwMAotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9ERUJVR19NT0RFX0JBX0JJVE1BUF9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX01JU0NfTU9ERV9ERUJVR19NT0RFX0JBX0JJVE1BUF9NQVNLKSA+PiBNQUNfUENVX01JU0NfTU9ERV9ERUJVR19NT0RFX0JBX0JJVE1BUF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX0RFQlVHX01PREVfQkFfQklUTUFQX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX01JU0NfTU9ERV9ERUJVR19NT0RFX0JBX0JJVE1BUF9MU0IpICYgTUFDX1BDVV9NSVNDX01PREVfREVCVUdfTU9ERV9CQV9CSVRNQVBfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfQ0NLX1NJRlNfTU9ERV9NU0IgICAgICA0Ci0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX0NDS19TSUZTX01PREVfTFNCICAgICAgNAotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9DQ0tfU0lGU19NT0RFX01BU0sgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfQ0NLX1NJRlNfTU9ERV9HRVQoeCkgICAoKCh4KSAmIE1BQ19QQ1VfTUlTQ19NT0RFX0NDS19TSUZTX01PREVfTUFTSykgPj4gTUFDX1BDVV9NSVNDX01PREVfQ0NLX1NJRlNfTU9ERV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX0NDS19TSUZTX01PREVfU0VUKHgpICAgKCgoeCkgPDwgTUFDX1BDVV9NSVNDX01PREVfQ0NLX1NJRlNfTU9ERV9MU0IpICYgTUFDX1BDVV9NSVNDX01PREVfQ0NLX1NJRlNfTU9ERV9NQVNLKQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9UWF9BRERfVFNGX01TQiAgICAgICAgIDMKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfVFhfQUREX1RTRl9MU0IgICAgICAgICAzCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX1RYX0FERF9UU0ZfTUFTSyAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9UWF9BRERfVFNGX0dFVCh4KSAgICAgICgoKHgpICYgTUFDX1BDVV9NSVNDX01PREVfVFhfQUREX1RTRl9NQVNLKSA+PiBNQUNfUENVX01JU0NfTU9ERV9UWF9BRERfVFNGX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfVFhfQUREX1RTRl9TRVQoeCkgICAgICAoKCh4KSA8PCBNQUNfUENVX01JU0NfTU9ERV9UWF9BRERfVFNGX0xTQikgJiBNQUNfUENVX01JU0NfTU9ERV9UWF9BRERfVFNGX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX01JQ19ORVdfTE9DQVRJT05fRU5BQkxFX01TQiAyCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX01JQ19ORVdfTE9DQVRJT05fRU5BQkxFX0xTQiAyCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX01JQ19ORVdfTE9DQVRJT05fRU5BQkxFX01BU0sgMHgwMDAwMDAwNAotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9NSUNfTkVXX0xPQ0FUSU9OX0VOQUJMRV9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX01JU0NfTU9ERV9NSUNfTkVXX0xPQ0FUSU9OX0VOQUJMRV9NQVNLKSA+PiBNQUNfUENVX01JU0NfTU9ERV9NSUNfTkVXX0xPQ0FUSU9OX0VOQUJMRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX01JQ19ORVdfTE9DQVRJT05fRU5BQkxFX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX01JU0NfTU9ERV9NSUNfTkVXX0xPQ0FUSU9OX0VOQUJMRV9MU0IpICYgTUFDX1BDVV9NSVNDX01PREVfTUlDX05FV19MT0NBVElPTl9FTkFCTEVfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfREVCVUdfTU9ERV9BRF9NU0IgICAgICAxCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX0RFQlVHX01PREVfQURfTFNCICAgICAgMQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9ERUJVR19NT0RFX0FEX01BU0sgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfREVCVUdfTU9ERV9BRF9HRVQoeCkgICAoKCh4KSAmIE1BQ19QQ1VfTUlTQ19NT0RFX0RFQlVHX01PREVfQURfTUFTSykgPj4gTUFDX1BDVV9NSVNDX01PREVfREVCVUdfTU9ERV9BRF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX0RFQlVHX01PREVfQURfU0VUKHgpICAgKCgoeCkgPDwgTUFDX1BDVV9NSVNDX01PREVfREVCVUdfTU9ERV9BRF9MU0IpICYgTUFDX1BDVV9NSVNDX01PREVfREVCVUdfTU9ERV9BRF9NQVNLKQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9CU1NJRF9NQVRDSF9GT1JDRV9NU0IgIDAKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREVfQlNTSURfTUFUQ0hfRk9SQ0VfTFNCICAwCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX0JTU0lEX01BVENIX0ZPUkNFX01BU0sgMHgwMDAwMDAwMQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERV9CU1NJRF9NQVRDSF9GT1JDRV9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX01JU0NfTU9ERV9CU1NJRF9NQVRDSF9GT1JDRV9NQVNLKSA+PiBNQUNfUENVX01JU0NfTU9ERV9CU1NJRF9NQVRDSF9GT1JDRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFX0JTU0lEX01BVENIX0ZPUkNFX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX01JU0NfTU9ERV9CU1NJRF9NQVRDSF9GT1JDRV9MU0IpICYgTUFDX1BDVV9NSVNDX01PREVfQlNTSURfTUFUQ0hfRk9SQ0VfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX0ZJTFRFUl9PRkRNX0NOVF9BRERSRVNTICAgICAgICAgIDB4MDAwMDgwYzQKLSNkZWZpbmUgTUFDX1BDVV9GSUxURVJfT0ZETV9DTlRfT0ZGU0VUICAgICAgICAgICAweDAwMDAwMGM0Ci0jZGVmaW5lIE1BQ19QQ1VfRklMVEVSX09GRE1fQ05UX1ZBTFVFX01TQiAgICAgICAgMjMKLSNkZWZpbmUgTUFDX1BDVV9GSUxURVJfT0ZETV9DTlRfVkFMVUVfTFNCICAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfRklMVEVSX09GRE1fQ05UX1ZBTFVFX01BU0sgICAgICAgMHgwMGZmZmZmZgotI2RlZmluZSBNQUNfUENVX0ZJTFRFUl9PRkRNX0NOVF9WQUxVRV9HRVQoeCkgICAgICgoKHgpICYgTUFDX1BDVV9GSUxURVJfT0ZETV9DTlRfVkFMVUVfTUFTSykgPj4gTUFDX1BDVV9GSUxURVJfT0ZETV9DTlRfVkFMVUVfTFNCKQotI2RlZmluZSBNQUNfUENVX0ZJTFRFUl9PRkRNX0NOVF9WQUxVRV9TRVQoeCkgICAgICgoKHgpIDw8IE1BQ19QQ1VfRklMVEVSX09GRE1fQ05UX1ZBTFVFX0xTQikgJiBNQUNfUENVX0ZJTFRFUl9PRkRNX0NOVF9WQUxVRV9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfRklMVEVSX0NDS19DTlRfQUREUkVTUyAgICAgICAgICAgMHgwMDAwODBjOAotI2RlZmluZSBNQUNfUENVX0ZJTFRFUl9DQ0tfQ05UX09GRlNFVCAgICAgICAgICAgIDB4MDAwMDAwYzgKLSNkZWZpbmUgTUFDX1BDVV9GSUxURVJfQ0NLX0NOVF9WQUxVRV9NU0IgICAgICAgICAyMwotI2RlZmluZSBNQUNfUENVX0ZJTFRFUl9DQ0tfQ05UX1ZBTFVFX0xTQiAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9GSUxURVJfQ0NLX0NOVF9WQUxVRV9NQVNLICAgICAgICAweDAwZmZmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfRklMVEVSX0NDS19DTlRfVkFMVUVfR0VUKHgpICAgICAgKCgoeCkgJiBNQUNfUENVX0ZJTFRFUl9DQ0tfQ05UX1ZBTFVFX01BU0spID4+IE1BQ19QQ1VfRklMVEVSX0NDS19DTlRfVkFMVUVfTFNCKQotI2RlZmluZSBNQUNfUENVX0ZJTFRFUl9DQ0tfQ05UX1ZBTFVFX1NFVCh4KSAgICAgICgoKHgpIDw8IE1BQ19QQ1VfRklMVEVSX0NDS19DTlRfVkFMVUVfTFNCKSAmIE1BQ19QQ1VfRklMVEVSX0NDS19DTlRfVkFMVUVfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX1BIWV9FUlJfQ05UXzFfQUREUkVTUyAgICAgICAgICAgIDB4MDAwMDgwY2MKLSNkZWZpbmUgTUFDX1BDVV9QSFlfRVJSX0NOVF8xX09GRlNFVCAgICAgICAgICAgICAweDAwMDAwMGNjCi0jZGVmaW5lIE1BQ19QQ1VfUEhZX0VSUl9DTlRfMV9WQUxVRV9NU0IgICAgICAgICAgMjMKLSNkZWZpbmUgTUFDX1BDVV9QSFlfRVJSX0NOVF8xX1ZBTFVFX0xTQiAgICAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfUEhZX0VSUl9DTlRfMV9WQUxVRV9NQVNLICAgICAgICAgMHgwMGZmZmZmZgotI2RlZmluZSBNQUNfUENVX1BIWV9FUlJfQ05UXzFfVkFMVUVfR0VUKHgpICAgICAgICgoKHgpICYgTUFDX1BDVV9QSFlfRVJSX0NOVF8xX1ZBTFVFX01BU0spID4+IE1BQ19QQ1VfUEhZX0VSUl9DTlRfMV9WQUxVRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfUEhZX0VSUl9DTlRfMV9WQUxVRV9TRVQoeCkgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9QSFlfRVJSX0NOVF8xX1ZBTFVFX0xTQikgJiBNQUNfUENVX1BIWV9FUlJfQ05UXzFfVkFMVUVfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX1BIWV9FUlJfQ05UXzFfTUFTS19BRERSRVNTICAgICAgIDB4MDAwMDgwZDAKLSNkZWZpbmUgTUFDX1BDVV9QSFlfRVJSX0NOVF8xX01BU0tfT0ZGU0VUICAgICAgICAweDAwMDAwMGQwCi0jZGVmaW5lIE1BQ19QQ1VfUEhZX0VSUl9DTlRfMV9NQVNLX1ZBTFVFX01TQiAgICAgMzEKLSNkZWZpbmUgTUFDX1BDVV9QSFlfRVJSX0NOVF8xX01BU0tfVkFMVUVfTFNCICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfUEhZX0VSUl9DTlRfMV9NQVNLX1ZBTFVFX01BU0sgICAgMHhmZmZmZmZmZgotI2RlZmluZSBNQUNfUENVX1BIWV9FUlJfQ05UXzFfTUFTS19WQUxVRV9HRVQoeCkgICgoKHgpICYgTUFDX1BDVV9QSFlfRVJSX0NOVF8xX01BU0tfVkFMVUVfTUFTSykgPj4gTUFDX1BDVV9QSFlfRVJSX0NOVF8xX01BU0tfVkFMVUVfTFNCKQotI2RlZmluZSBNQUNfUENVX1BIWV9FUlJfQ05UXzFfTUFTS19WQUxVRV9TRVQoeCkgICgoKHgpIDw8IE1BQ19QQ1VfUEhZX0VSUl9DTlRfMV9NQVNLX1ZBTFVFX0xTQikgJiBNQUNfUENVX1BIWV9FUlJfQ05UXzFfTUFTS19WQUxVRV9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfUEhZX0VSUl9DTlRfMl9BRERSRVNTICAgICAgICAgICAgMHgwMDAwODBkNAotI2RlZmluZSBNQUNfUENVX1BIWV9FUlJfQ05UXzJfT0ZGU0VUICAgICAgICAgICAgIDB4MDAwMDAwZDQKLSNkZWZpbmUgTUFDX1BDVV9QSFlfRVJSX0NOVF8yX1ZBTFVFX01TQiAgICAgICAgICAyMwotI2RlZmluZSBNQUNfUENVX1BIWV9FUlJfQ05UXzJfVkFMVUVfTFNCICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9QSFlfRVJSX0NOVF8yX1ZBTFVFX01BU0sgICAgICAgICAweDAwZmZmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfUEhZX0VSUl9DTlRfMl9WQUxVRV9HRVQoeCkgICAgICAgKCgoeCkgJiBNQUNfUENVX1BIWV9FUlJfQ05UXzJfVkFMVUVfTUFTSykgPj4gTUFDX1BDVV9QSFlfRVJSX0NOVF8yX1ZBTFVFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9QSFlfRVJSX0NOVF8yX1ZBTFVFX1NFVCh4KSAgICAgICAoKCh4KSA8PCBNQUNfUENVX1BIWV9FUlJfQ05UXzJfVkFMVUVfTFNCKSAmIE1BQ19QQ1VfUEhZX0VSUl9DTlRfMl9WQUxVRV9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfUEhZX0VSUl9DTlRfMl9NQVNLX0FERFJFU1MgICAgICAgMHgwMDAwODBkOAotI2RlZmluZSBNQUNfUENVX1BIWV9FUlJfQ05UXzJfTUFTS19PRkZTRVQgICAgICAgIDB4MDAwMDAwZDgKLSNkZWZpbmUgTUFDX1BDVV9QSFlfRVJSX0NOVF8yX01BU0tfVkFMVUVfTVNCICAgICAzMQotI2RlZmluZSBNQUNfUENVX1BIWV9FUlJfQ05UXzJfTUFTS19WQUxVRV9MU0IgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9QSFlfRVJSX0NOVF8yX01BU0tfVkFMVUVfTUFTSyAgICAweGZmZmZmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfUEhZX0VSUl9DTlRfMl9NQVNLX1ZBTFVFX0dFVCh4KSAgKCgoeCkgJiBNQUNfUENVX1BIWV9FUlJfQ05UXzJfTUFTS19WQUxVRV9NQVNLKSA+PiBNQUNfUENVX1BIWV9FUlJfQ05UXzJfTUFTS19WQUxVRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfUEhZX0VSUl9DTlRfMl9NQVNLX1ZBTFVFX1NFVCh4KSAgKCgoeCkgPDwgTUFDX1BDVV9QSFlfRVJSX0NOVF8yX01BU0tfVkFMVUVfTFNCKSAmIE1BQ19QQ1VfUEhZX0VSUl9DTlRfMl9NQVNLX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9UU0ZfVEhSRVNIT0xEX0FERFJFU1MgICAgICAgICAgICAweDAwMDA4MGRjCi0jZGVmaW5lIE1BQ19QQ1VfVFNGX1RIUkVTSE9MRF9PRkZTRVQgICAgICAgICAgICAgMHgwMDAwMDBkYwotI2RlZmluZSBNQUNfUENVX1RTRl9USFJFU0hPTERfVkFMVUVfTVNCICAgICAgICAgIDE1Ci0jZGVmaW5lIE1BQ19QQ1VfVFNGX1RIUkVTSE9MRF9WQUxVRV9MU0IgICAgICAgICAgMAotI2RlZmluZSBNQUNfUENVX1RTRl9USFJFU0hPTERfVkFMVUVfTUFTSyAgICAgICAgIDB4MDAwMGZmZmYKLSNkZWZpbmUgTUFDX1BDVV9UU0ZfVEhSRVNIT0xEX1ZBTFVFX0dFVCh4KSAgICAgICAoKCh4KSAmIE1BQ19QQ1VfVFNGX1RIUkVTSE9MRF9WQUxVRV9NQVNLKSA+PiBNQUNfUENVX1RTRl9USFJFU0hPTERfVkFMVUVfTFNCKQotI2RlZmluZSBNQUNfUENVX1RTRl9USFJFU0hPTERfVkFMVUVfU0VUKHgpICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfVFNGX1RIUkVTSE9MRF9WQUxVRV9MU0IpICYgTUFDX1BDVV9UU0ZfVEhSRVNIT0xEX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9QSFlfRVJST1JfRUlGU19NQVNLX0FERFJFU1MgICAgICAweDAwMDA4MGUwCi0jZGVmaW5lIE1BQ19QQ1VfUEhZX0VSUk9SX0VJRlNfTUFTS19PRkZTRVQgICAgICAgMHgwMDAwMDBlMAotI2RlZmluZSBNQUNfUENVX1BIWV9FUlJPUl9FSUZTX01BU0tfVkFMVUVfTVNCICAgIDMxCi0jZGVmaW5lIE1BQ19QQ1VfUEhZX0VSUk9SX0VJRlNfTUFTS19WQUxVRV9MU0IgICAgMAotI2RlZmluZSBNQUNfUENVX1BIWV9FUlJPUl9FSUZTX01BU0tfVkFMVUVfTUFTSyAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgTUFDX1BDVV9QSFlfRVJST1JfRUlGU19NQVNLX1ZBTFVFX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfUEhZX0VSUk9SX0VJRlNfTUFTS19WQUxVRV9NQVNLKSA+PiBNQUNfUENVX1BIWV9FUlJPUl9FSUZTX01BU0tfVkFMVUVfTFNCKQotI2RlZmluZSBNQUNfUENVX1BIWV9FUlJPUl9FSUZTX01BU0tfVkFMVUVfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfUEhZX0VSUk9SX0VJRlNfTUFTS19WQUxVRV9MU0IpICYgTUFDX1BDVV9QSFlfRVJST1JfRUlGU19NQVNLX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9QSFlfRVJSX0NOVF8zX0FERFJFU1MgICAgICAgICAgICAweDAwMDA4MGU0Ci0jZGVmaW5lIE1BQ19QQ1VfUEhZX0VSUl9DTlRfM19PRkZTRVQgICAgICAgICAgICAgMHgwMDAwMDBlNAotI2RlZmluZSBNQUNfUENVX1BIWV9FUlJfQ05UXzNfVkFMVUVfTVNCICAgICAgICAgIDIzCi0jZGVmaW5lIE1BQ19QQ1VfUEhZX0VSUl9DTlRfM19WQUxVRV9MU0IgICAgICAgICAgMAotI2RlZmluZSBNQUNfUENVX1BIWV9FUlJfQ05UXzNfVkFMVUVfTUFTSyAgICAgICAgIDB4MDBmZmZmZmYKLSNkZWZpbmUgTUFDX1BDVV9QSFlfRVJSX0NOVF8zX1ZBTFVFX0dFVCh4KSAgICAgICAoKCh4KSAmIE1BQ19QQ1VfUEhZX0VSUl9DTlRfM19WQUxVRV9NQVNLKSA+PiBNQUNfUENVX1BIWV9FUlJfQ05UXzNfVkFMVUVfTFNCKQotI2RlZmluZSBNQUNfUENVX1BIWV9FUlJfQ05UXzNfVkFMVUVfU0VUKHgpICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfUEhZX0VSUl9DTlRfM19WQUxVRV9MU0IpICYgTUFDX1BDVV9QSFlfRVJSX0NOVF8zX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9QSFlfRVJSX0NOVF8zX01BU0tfQUREUkVTUyAgICAgICAweDAwMDA4MGU4Ci0jZGVmaW5lIE1BQ19QQ1VfUEhZX0VSUl9DTlRfM19NQVNLX09GRlNFVCAgICAgICAgMHgwMDAwMDBlOAotI2RlZmluZSBNQUNfUENVX1BIWV9FUlJfQ05UXzNfTUFTS19WQUxVRV9NU0IgICAgIDMxCi0jZGVmaW5lIE1BQ19QQ1VfUEhZX0VSUl9DTlRfM19NQVNLX1ZBTFVFX0xTQiAgICAgMAotI2RlZmluZSBNQUNfUENVX1BIWV9FUlJfQ05UXzNfTUFTS19WQUxVRV9NQVNLICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgTUFDX1BDVV9QSFlfRVJSX0NOVF8zX01BU0tfVkFMVUVfR0VUKHgpICAoKCh4KSAmIE1BQ19QQ1VfUEhZX0VSUl9DTlRfM19NQVNLX1ZBTFVFX01BU0spID4+IE1BQ19QQ1VfUEhZX0VSUl9DTlRfM19NQVNLX1ZBTFVFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9QSFlfRVJSX0NOVF8zX01BU0tfVkFMVUVfU0VUKHgpICAoKCh4KSA8PCBNQUNfUENVX1BIWV9FUlJfQ05UXzNfTUFTS19WQUxVRV9MU0IpICYgTUFDX1BDVV9QSFlfRVJSX0NOVF8zX01BU0tfVkFMVUVfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFX0FERFJFU1MgICAgICAgICAgIDB4MDAwMDgwZWMKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERV9PRkZTRVQgICAgICAgICAgICAweDAwMDAwMGVjCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREVfRklSU1RfU0xPVF9USU1FX01TQiAzMQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFX0ZJUlNUX1NMT1RfVElNRV9MU0IgMjQKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERV9GSVJTVF9TTE9UX1RJTUVfTUFTSyAweGZmMDAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREVfRklSU1RfU0xPVF9USU1FX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfQkxVRVRPT1RIX01PREVfRklSU1RfU0xPVF9USU1FX01BU0spID4+IE1BQ19QQ1VfQkxVRVRPT1RIX01PREVfRklSU1RfU0xPVF9USU1FX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERV9GSVJTVF9TTE9UX1RJTUVfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfQkxVRVRPT1RIX01PREVfRklSU1RfU0xPVF9USU1FX0xTQikgJiBNQUNfUENVX0JMVUVUT09USF9NT0RFX0ZJUlNUX1NMT1RfVElNRV9NQVNLKQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFX1BSSU9SSVRZX1RJTUVfTVNCIDIzCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREVfUFJJT1JJVFlfVElNRV9MU0IgMTgKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERV9QUklPUklUWV9USU1FX01BU0sgMHgwMGZjMDAwMAotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFX1BSSU9SSVRZX1RJTUVfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERV9QUklPUklUWV9USU1FX01BU0spID4+IE1BQ19QQ1VfQkxVRVRPT1RIX01PREVfUFJJT1JJVFlfVElNRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREVfUFJJT1JJVFlfVElNRV9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERV9QUklPUklUWV9USU1FX0xTQikgJiBNQUNfUENVX0JMVUVUT09USF9NT0RFX1BSSU9SSVRZX1RJTUVfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERV9SWF9DTEVBUl9QT0xBUklUWV9NU0IgMTcKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERV9SWF9DTEVBUl9QT0xBUklUWV9MU0IgMTcKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERV9SWF9DTEVBUl9QT0xBUklUWV9NQVNLIDB4MDAwMjAwMDAKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERV9SWF9DTEVBUl9QT0xBUklUWV9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0JMVUVUT09USF9NT0RFX1JYX0NMRUFSX1BPTEFSSVRZX01BU0spID4+IE1BQ19QQ1VfQkxVRVRPT1RIX01PREVfUlhfQ0xFQVJfUE9MQVJJVFlfTFNCKQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFX1JYX0NMRUFSX1BPTEFSSVRZX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0JMVUVUT09USF9NT0RFX1JYX0NMRUFSX1BPTEFSSVRZX0xTQikgJiBNQUNfUENVX0JMVUVUT09USF9NT0RFX1JYX0NMRUFSX1BPTEFSSVRZX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREVfUUNVX1RIUkVTSF9NU0IgICAgMTYKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERV9RQ1VfVEhSRVNIX0xTQiAgICAxMwotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFX1FDVV9USFJFU0hfTUFTSyAgIDB4MDAwMWUwMDAKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERV9RQ1VfVEhSRVNIX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfQkxVRVRPT1RIX01PREVfUUNVX1RIUkVTSF9NQVNLKSA+PiBNQUNfUENVX0JMVUVUT09USF9NT0RFX1FDVV9USFJFU0hfTFNCKQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFX1FDVV9USFJFU0hfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfQkxVRVRPT1RIX01PREVfUUNVX1RIUkVTSF9MU0IpICYgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERV9RQ1VfVEhSRVNIX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREVfUVVJRVRfTVNCICAgICAgICAgMTIKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERV9RVUlFVF9MU0IgICAgICAgICAxMgotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFX1FVSUVUX01BU0sgICAgICAgIDB4MDAwMDEwMDAKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERV9RVUlFVF9HRVQoeCkgICAgICAoKCh4KSAmIE1BQ19QQ1VfQkxVRVRPT1RIX01PREVfUVVJRVRfTUFTSykgPj4gTUFDX1BDVV9CTFVFVE9PVEhfTU9ERV9RVUlFVF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREVfUVVJRVRfU0VUKHgpICAgICAgKCgoeCkgPDwgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERV9RVUlFVF9MU0IpICYgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERV9RVUlFVF9NQVNLKQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFX01PREVfTVNCICAgICAgICAgIDExCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREVfTU9ERV9MU0IgICAgICAgICAgMTAKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERV9NT0RFX01BU0sgICAgICAgICAweDAwMDAwYzAwCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREVfTU9ERV9HRVQoeCkgICAgICAgKCgoeCkgJiBNQUNfUENVX0JMVUVUT09USF9NT0RFX01PREVfTUFTSykgPj4gTUFDX1BDVV9CTFVFVE9PVEhfTU9ERV9NT0RFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERV9NT0RFX1NFVCh4KSAgICAgICAoKCh4KSA8PCBNQUNfUENVX0JMVUVUT09USF9NT0RFX01PREVfTFNCKSAmIE1BQ19QQ1VfQkxVRVRPT1RIX01PREVfTU9ERV9NQVNLKQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFX1RYX0ZSQU1FX0VYVEVORF9NU0IgOQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFX1RYX0ZSQU1FX0VYVEVORF9MU0IgOQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFX1RYX0ZSQU1FX0VYVEVORF9NQVNLIDB4MDAwMDAyMDAKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERV9UWF9GUkFNRV9FWFRFTkRfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERV9UWF9GUkFNRV9FWFRFTkRfTUFTSykgPj4gTUFDX1BDVV9CTFVFVE9PVEhfTU9ERV9UWF9GUkFNRV9FWFRFTkRfTFNCKQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFX1RYX0ZSQU1FX0VYVEVORF9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERV9UWF9GUkFNRV9FWFRFTkRfTFNCKSAmIE1BQ19QQ1VfQkxVRVRPT1RIX01PREVfVFhfRlJBTUVfRVhURU5EX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREVfVFhfU1RBVEVfRVhURU5EX01TQiA4Ci0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREVfVFhfU1RBVEVfRVhURU5EX0xTQiA4Ci0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREVfVFhfU1RBVEVfRVhURU5EX01BU0sgMHgwMDAwMDEwMAotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFX1RYX1NUQVRFX0VYVEVORF9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0JMVUVUT09USF9NT0RFX1RYX1NUQVRFX0VYVEVORF9NQVNLKSA+PiBNQUNfUENVX0JMVUVUT09USF9NT0RFX1RYX1NUQVRFX0VYVEVORF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREVfVFhfU1RBVEVfRVhURU5EX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0JMVUVUT09USF9NT0RFX1RYX1NUQVRFX0VYVEVORF9MU0IpICYgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERV9UWF9TVEFURV9FWFRFTkRfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERV9USU1FX0VYVEVORF9NU0IgICA3Ci0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREVfVElNRV9FWFRFTkRfTFNCICAgMAotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFX1RJTUVfRVhURU5EX01BU0sgIDB4MDAwMDAwZmYKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERV9USU1FX0VYVEVORF9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0JMVUVUT09USF9NT0RFX1RJTUVfRVhURU5EX01BU0spID4+IE1BQ19QQ1VfQkxVRVRPT1RIX01PREVfVElNRV9FWFRFTkRfTFNCKQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFX1RJTUVfRVhURU5EX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0JMVUVUT09USF9NT0RFX1RJTUVfRVhURU5EX0xTQikgJiBNQUNfUENVX0JMVUVUT09USF9NT0RFX1RJTUVfRVhURU5EX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfV0VJR0hUU19BRERSRVNTICAgICAgICAweDAwMDA4MGYwCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX1dFSUdIVFNfT0ZGU0VUICAgICAgICAgMHgwMDAwMDBmMAotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9XRUlHSFRTX1dMX1dFSUdIVF9NU0IgIDMxCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX1dFSUdIVFNfV0xfV0VJR0hUX0xTQiAgMTYKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfV0VJR0hUU19XTF9XRUlHSFRfTUFTSyAweGZmZmYwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX1dFSUdIVFNfV0xfV0VJR0hUX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfQkxVRVRPT1RIX1dFSUdIVFNfV0xfV0VJR0hUX01BU0spID4+IE1BQ19QQ1VfQkxVRVRPT1RIX1dFSUdIVFNfV0xfV0VJR0hUX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfV0VJR0hUU19XTF9XRUlHSFRfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfQkxVRVRPT1RIX1dFSUdIVFNfV0xfV0VJR0hUX0xTQikgJiBNQUNfUENVX0JMVUVUT09USF9XRUlHSFRTX1dMX1dFSUdIVF9NQVNLKQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9XRUlHSFRTX0JUX1dFSUdIVF9NU0IgIDE1Ci0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX1dFSUdIVFNfQlRfV0VJR0hUX0xTQiAgMAotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9XRUlHSFRTX0JUX1dFSUdIVF9NQVNLIDB4MDAwMGZmZmYKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfV0VJR0hUU19CVF9XRUlHSFRfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9CTFVFVE9PVEhfV0VJR0hUU19CVF9XRUlHSFRfTUFTSykgPj4gTUFDX1BDVV9CTFVFVE9PVEhfV0VJR0hUU19CVF9XRUlHSFRfTFNCKQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9XRUlHSFRTX0JUX1dFSUdIVF9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9CTFVFVE9PVEhfV0VJR0hUU19CVF9XRUlHSFRfTFNCKSAmIE1BQ19QQ1VfQkxVRVRPT1RIX1dFSUdIVFNfQlRfV0VJR0hUX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfQUREUkVTUyAgICAgICAgICAweDAwMDA4MGY0Ci0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX09GRlNFVCAgICAgICAgICAgMHgwMDAwMDBmNAotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9QSFlfRVJSX0JUX0NPTExfRU5BQkxFX01TQiAzMQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9QSFlfRVJSX0JUX0NPTExfRU5BQkxFX0xTQiAzMQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9QSFlfRVJSX0JUX0NPTExfRU5BQkxFX01BU0sgMHg4MDAwMDAwMAotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9QSFlfRVJSX0JUX0NPTExfRU5BQkxFX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX1BIWV9FUlJfQlRfQ09MTF9FTkFCTEVfTUFTSykgPj4gTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfUEhZX0VSUl9CVF9DT0xMX0VOQUJMRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX1BIWV9FUlJfQlRfQ09MTF9FTkFCTEVfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX1BIWV9FUlJfQlRfQ09MTF9FTkFCTEVfTFNCKSAmIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX1BIWV9FUlJfQlRfQ09MTF9FTkFCTEVfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfSU5URVJSVVBUX0VOQUJMRV9NU0IgMzAKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfSU5URVJSVVBUX0VOQUJMRV9MU0IgMzAKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfSU5URVJSVVBUX0VOQUJMRV9NQVNLIDB4NDAwMDAwMDAKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfSU5URVJSVVBUX0VOQUJMRV9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9JTlRFUlJVUFRfRU5BQkxFX01BU0spID4+IE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX0lOVEVSUlVQVF9FTkFCTEVfTFNCKQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9JTlRFUlJVUFRfRU5BQkxFX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9JTlRFUlJVUFRfRU5BQkxFX0xTQikgJiBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9JTlRFUlJVUFRfRU5BQkxFX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX1RTRl9CVF9QUklPUklUWV9DVFJMX01TQiAyOQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9UU0ZfQlRfUFJJT1JJVFlfQ1RSTF9MU0IgMjgKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfVFNGX0JUX1BSSU9SSVRZX0NUUkxfTUFTSyAweDMwMDAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX1RTRl9CVF9QUklPUklUWV9DVFJMX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX1RTRl9CVF9QUklPUklUWV9DVFJMX01BU0spID4+IE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX1RTRl9CVF9QUklPUklUWV9DVFJMX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfVFNGX0JUX1BSSU9SSVRZX0NUUkxfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX1RTRl9CVF9QUklPUklUWV9DVFJMX0xTQikgJiBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9UU0ZfQlRfUFJJT1JJVFlfQ1RSTF9NQVNLKQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9UU0ZfQlRfQUNUSVZFX0NUUkxfTVNCIDI3Ci0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX1RTRl9CVF9BQ1RJVkVfQ1RSTF9MU0IgMjYKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfVFNGX0JUX0FDVElWRV9DVFJMX01BU0sgMHgwYzAwMDAwMAotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9UU0ZfQlRfQUNUSVZFX0NUUkxfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfVFNGX0JUX0FDVElWRV9DVFJMX01BU0spID4+IE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX1RTRl9CVF9BQ1RJVkVfQ1RSTF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX1RTRl9CVF9BQ1RJVkVfQ1RSTF9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfVFNGX0JUX0FDVElWRV9DVFJMX0xTQikgJiBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9UU0ZfQlRfQUNUSVZFX0NUUkxfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfUlNfRElTQ0FSRF9FWFRFTkRfTVNCIDI1Ci0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX1JTX0RJU0NBUkRfRVhURU5EX0xTQiAyNQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9SU19ESVNDQVJEX0VYVEVORF9NQVNLIDB4MDIwMDAwMDAKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfUlNfRElTQ0FSRF9FWFRFTkRfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfUlNfRElTQ0FSRF9FWFRFTkRfTUFTSykgPj4gTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfUlNfRElTQ0FSRF9FWFRFTkRfTFNCKQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9SU19ESVNDQVJEX0VYVEVORF9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfUlNfRElTQ0FSRF9FWFRFTkRfTFNCKSAmIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX1JTX0RJU0NBUkRfRVhURU5EX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX1dMX1RYUlhfU0VQQVJBVEVfTVNCIDI0Ci0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX1dMX1RYUlhfU0VQQVJBVEVfTFNCIDI0Ci0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX1dMX1RYUlhfU0VQQVJBVEVfTUFTSyAweDAxMDAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX1dMX1RYUlhfU0VQQVJBVEVfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfV0xfVFhSWF9TRVBBUkFURV9NQVNLKSA+PiBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9XTF9UWFJYX1NFUEFSQVRFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfV0xfVFhSWF9TRVBBUkFURV9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfV0xfVFhSWF9TRVBBUkFURV9MU0IpICYgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfV0xfVFhSWF9TRVBBUkFURV9NQVNLKQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9XTF9BQ1RJVkVfTU9ERV9NU0IgMjMKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfV0xfQUNUSVZFX01PREVfTFNCIDIyCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX1dMX0FDVElWRV9NT0RFX01BU0sgMHgwMGMwMDAwMAotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9XTF9BQ1RJVkVfTU9ERV9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9XTF9BQ1RJVkVfTU9ERV9NQVNLKSA+PiBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9XTF9BQ1RJVkVfTU9ERV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX1dMX0FDVElWRV9NT0RFX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9XTF9BQ1RJVkVfTU9ERV9MU0IpICYgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfV0xfQUNUSVZFX01PREVfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfUVVJRVRfMl9XSVJFX01TQiAyMQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9RVUlFVF8yX1dJUkVfTFNCIDIxCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX1FVSUVUXzJfV0lSRV9NQVNLIDB4MDAyMDAwMDAKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfUVVJRVRfMl9XSVJFX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX1FVSUVUXzJfV0lSRV9NQVNLKSA+PiBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9RVUlFVF8yX1dJUkVfTFNCKQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9RVUlFVF8yX1dJUkVfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX1FVSUVUXzJfV0lSRV9MU0IpICYgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfUVVJRVRfMl9XSVJFX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX0RJU0FCTEVfQlRfQU5UX01TQiAyMAotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9ESVNBQkxFX0JUX0FOVF9MU0IgMjAKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfRElTQUJMRV9CVF9BTlRfTUFTSyAweDAwMTAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX0RJU0FCTEVfQlRfQU5UX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX0RJU0FCTEVfQlRfQU5UX01BU0spID4+IE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX0RJU0FCTEVfQlRfQU5UX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfRElTQUJMRV9CVF9BTlRfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX0RJU0FCTEVfQlRfQU5UX0xTQikgJiBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9ESVNBQkxFX0JUX0FOVF9NQVNLKQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9QUk9URUNUX0JUX0FGVEVSX1dBS0VVUF9NU0IgMTkKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfUFJPVEVDVF9CVF9BRlRFUl9XQUtFVVBfTFNCIDE5Ci0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX1BST1RFQ1RfQlRfQUZURVJfV0FLRVVQX01BU0sgMHgwMDA4MDAwMAotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9QUk9URUNUX0JUX0FGVEVSX1dBS0VVUF9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9QUk9URUNUX0JUX0FGVEVSX1dBS0VVUF9NQVNLKSA+PiBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9QUk9URUNUX0JUX0FGVEVSX1dBS0VVUF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX1BST1RFQ1RfQlRfQUZURVJfV0FLRVVQX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9QUk9URUNUX0JUX0FGVEVSX1dBS0VVUF9MU0IpICYgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfUFJPVEVDVF9CVF9BRlRFUl9XQUtFVVBfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfU0xFRVBfQUxMT1dfQlRfQUNDRVNTX01TQiAxNwotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9TTEVFUF9BTExPV19CVF9BQ0NFU1NfTFNCIDE3Ci0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX1NMRUVQX0FMTE9XX0JUX0FDQ0VTU19NQVNLIDB4MDAwMjAwMDAKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfU0xFRVBfQUxMT1dfQlRfQUNDRVNTX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX1NMRUVQX0FMTE9XX0JUX0FDQ0VTU19NQVNLKSA+PiBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9TTEVFUF9BTExPV19CVF9BQ0NFU1NfTFNCKQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9TTEVFUF9BTExPV19CVF9BQ0NFU1NfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX1NMRUVQX0FMTE9XX0JUX0FDQ0VTU19MU0IpICYgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfU0xFRVBfQUxMT1dfQlRfQUNDRVNTX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX0hPTERfUlhfQ0xFQVJfTVNCIDE2Ci0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX0hPTERfUlhfQ0xFQVJfTFNCIDE2Ci0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX0hPTERfUlhfQ0xFQVJfTUFTSyAweDAwMDEwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX0hPTERfUlhfQ0xFQVJfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfSE9MRF9SWF9DTEVBUl9NQVNLKSA+PiBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9IT0xEX1JYX0NMRUFSX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfSE9MRF9SWF9DTEVBUl9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfSE9MRF9SWF9DTEVBUl9MU0IpICYgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfSE9MRF9SWF9DTEVBUl9NQVNLKQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9CQ05fTUlTU19DTlRfTVNCIDE1Ci0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX0JDTl9NSVNTX0NOVF9MU0IgOAotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9CQ05fTUlTU19DTlRfTUFTSyAweDAwMDBmZjAwCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX0JDTl9NSVNTX0NOVF9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9CQ05fTUlTU19DTlRfTUFTSykgPj4gTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfQkNOX01JU1NfQ05UX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfQkNOX01JU1NfQ05UX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9CQ05fTUlTU19DTlRfTFNCKSAmIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX0JDTl9NSVNTX0NOVF9NQVNLKQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9CQ05fTUlTU19USFJFU0hfTVNCIDcKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfQkNOX01JU1NfVEhSRVNIX0xTQiAwCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX0JDTl9NSVNTX1RIUkVTSF9NQVNLIDB4MDAwMDAwZmYKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfQkNOX01JU1NfVEhSRVNIX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX0JDTl9NSVNTX1RIUkVTSF9NQVNLKSA+PiBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9CQ05fTUlTU19USFJFU0hfTFNCKQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFMl9CQ05fTUlTU19USFJFU0hfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfQkxVRVRPT1RIX01PREUyX0JDTl9NSVNTX1RIUkVTSF9MU0IpICYgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTJfQkNOX01JU1NfVEhSRVNIX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9UWFNJRlNfQUREUkVTUyAgICAgICAgICAgICAgICAgICAweDAwMDA4MGY4Ci0jZGVmaW5lIE1BQ19QQ1VfVFhTSUZTX09GRlNFVCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmOAotI2RlZmluZSBNQUNfUENVX1RYU0lGU19BQ0tfU0hJRlRfTVNCICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIE1BQ19QQ1VfVFhTSUZTX0FDS19TSElGVF9MU0IgICAgICAgICAgICAgMTIKLSNkZWZpbmUgTUFDX1BDVV9UWFNJRlNfQUNLX1NISUZUX01BU0sgICAgICAgICAgICAweDAwMDA3MDAwCi0jZGVmaW5lIE1BQ19QQ1VfVFhTSUZTX0FDS19TSElGVF9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBNQUNfUENVX1RYU0lGU19BQ0tfU0hJRlRfTUFTSykgPj4gTUFDX1BDVV9UWFNJRlNfQUNLX1NISUZUX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9UWFNJRlNfQUNLX1NISUZUX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBNQUNfUENVX1RYU0lGU19BQ0tfU0hJRlRfTFNCKSAmIE1BQ19QQ1VfVFhTSUZTX0FDS19TSElGVF9NQVNLKQotI2RlZmluZSBNQUNfUENVX1RYU0lGU19UWF9MQVRFTkNZX01TQiAgICAgICAgICAgIDExCi0jZGVmaW5lIE1BQ19QQ1VfVFhTSUZTX1RYX0xBVEVOQ1lfTFNCICAgICAgICAgICAgOAotI2RlZmluZSBNQUNfUENVX1RYU0lGU19UWF9MQVRFTkNZX01BU0sgICAgICAgICAgIDB4MDAwMDBmMDAKLSNkZWZpbmUgTUFDX1BDVV9UWFNJRlNfVFhfTEFURU5DWV9HRVQoeCkgICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfVFhTSUZTX1RYX0xBVEVOQ1lfTUFTSykgPj4gTUFDX1BDVV9UWFNJRlNfVFhfTEFURU5DWV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfVFhTSUZTX1RYX0xBVEVOQ1lfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9UWFNJRlNfVFhfTEFURU5DWV9MU0IpICYgTUFDX1BDVV9UWFNJRlNfVFhfTEFURU5DWV9NQVNLKQotI2RlZmluZSBNQUNfUENVX1RYU0lGU19TSUZTX1RJTUVfTVNCICAgICAgICAgICAgIDcKLSNkZWZpbmUgTUFDX1BDVV9UWFNJRlNfU0lGU19USU1FX0xTQiAgICAgICAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfVFhTSUZTX1NJRlNfVElNRV9NQVNLICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBNQUNfUENVX1RYU0lGU19TSUZTX1RJTUVfR0VUKHgpICAgICAgICAgICgoKHgpICYgTUFDX1BDVV9UWFNJRlNfU0lGU19USU1FX01BU0spID4+IE1BQ19QQ1VfVFhTSUZTX1NJRlNfVElNRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfVFhTSUZTX1NJRlNfVElNRV9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9UWFNJRlNfU0lGU19USU1FX0xTQikgJiBNQUNfUENVX1RYU0lGU19TSUZTX1RJTUVfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX1RYT1BfWF9BRERSRVNTICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwZmMKLSNkZWZpbmUgTUFDX1BDVV9UWE9QX1hfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGZjCi0jZGVmaW5lIE1BQ19QQ1VfVFhPUF9YX1ZBTFVFX01TQiAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBNQUNfUENVX1RYT1BfWF9WQUxVRV9MU0IgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9UWE9QX1hfVkFMVUVfTUFTSyAgICAgICAgICAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIE1BQ19QQ1VfVFhPUF9YX1ZBTFVFX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiBNQUNfUENVX1RYT1BfWF9WQUxVRV9NQVNLKSA+PiBNQUNfUENVX1RYT1BfWF9WQUxVRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfVFhPUF9YX1ZBTFVFX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9UWE9QX1hfVkFMVUVfTFNCKSAmIE1BQ19QQ1VfVFhPUF9YX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9UWE9QXzBfM19BRERSRVNTICAgICAgICAgICAgICAgICAweDAwMDA4MTAwCi0jZGVmaW5lIE1BQ19QQ1VfVFhPUF8wXzNfT0ZGU0VUICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAotI2RlZmluZSBNQUNfUENVX1RYT1BfMF8zX1ZBTFVFXzNfTVNCICAgICAgICAgICAgIDMxCi0jZGVmaW5lIE1BQ19QQ1VfVFhPUF8wXzNfVkFMVUVfM19MU0IgICAgICAgICAgICAgMjQKLSNkZWZpbmUgTUFDX1BDVV9UWE9QXzBfM19WQUxVRV8zX01BU0sgICAgICAgICAgICAweGZmMDAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfVFhPUF8wXzNfVkFMVUVfM19HRVQoeCkgICAgICAgICAgKCgoeCkgJiBNQUNfUENVX1RYT1BfMF8zX1ZBTFVFXzNfTUFTSykgPj4gTUFDX1BDVV9UWE9QXzBfM19WQUxVRV8zX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9UWE9QXzBfM19WQUxVRV8zX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBNQUNfUENVX1RYT1BfMF8zX1ZBTFVFXzNfTFNCKSAmIE1BQ19QQ1VfVFhPUF8wXzNfVkFMVUVfM19NQVNLKQotI2RlZmluZSBNQUNfUENVX1RYT1BfMF8zX1ZBTFVFXzJfTVNCICAgICAgICAgICAgIDIzCi0jZGVmaW5lIE1BQ19QQ1VfVFhPUF8wXzNfVkFMVUVfMl9MU0IgICAgICAgICAgICAgMTYKLSNkZWZpbmUgTUFDX1BDVV9UWE9QXzBfM19WQUxVRV8yX01BU0sgICAgICAgICAgICAweDAwZmYwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfVFhPUF8wXzNfVkFMVUVfMl9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBNQUNfUENVX1RYT1BfMF8zX1ZBTFVFXzJfTUFTSykgPj4gTUFDX1BDVV9UWE9QXzBfM19WQUxVRV8yX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9UWE9QXzBfM19WQUxVRV8yX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBNQUNfUENVX1RYT1BfMF8zX1ZBTFVFXzJfTFNCKSAmIE1BQ19QQ1VfVFhPUF8wXzNfVkFMVUVfMl9NQVNLKQotI2RlZmluZSBNQUNfUENVX1RYT1BfMF8zX1ZBTFVFXzFfTVNCICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIE1BQ19QQ1VfVFhPUF8wXzNfVkFMVUVfMV9MU0IgICAgICAgICAgICAgOAotI2RlZmluZSBNQUNfUENVX1RYT1BfMF8zX1ZBTFVFXzFfTUFTSyAgICAgICAgICAgIDB4MDAwMGZmMDAKLSNkZWZpbmUgTUFDX1BDVV9UWE9QXzBfM19WQUxVRV8xX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfVFhPUF8wXzNfVkFMVUVfMV9NQVNLKSA+PiBNQUNfUENVX1RYT1BfMF8zX1ZBTFVFXzFfTFNCKQotI2RlZmluZSBNQUNfUENVX1RYT1BfMF8zX1ZBTFVFXzFfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfVFhPUF8wXzNfVkFMVUVfMV9MU0IpICYgTUFDX1BDVV9UWE9QXzBfM19WQUxVRV8xX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfVFhPUF8wXzNfVkFMVUVfMF9NU0IgICAgICAgICAgICAgNwotI2RlZmluZSBNQUNfUENVX1RYT1BfMF8zX1ZBTFVFXzBfTFNCICAgICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9UWE9QXzBfM19WQUxVRV8wX01BU0sgICAgICAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIE1BQ19QQ1VfVFhPUF8wXzNfVkFMVUVfMF9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBNQUNfUENVX1RYT1BfMF8zX1ZBTFVFXzBfTUFTSykgPj4gTUFDX1BDVV9UWE9QXzBfM19WQUxVRV8wX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9UWE9QXzBfM19WQUxVRV8wX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBNQUNfUENVX1RYT1BfMF8zX1ZBTFVFXzBfTFNCKSAmIE1BQ19QQ1VfVFhPUF8wXzNfVkFMVUVfMF9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfVFhPUF80XzdfQUREUkVTUyAgICAgICAgICAgICAgICAgMHgwMDAwODEwNAotI2RlZmluZSBNQUNfUENVX1RYT1BfNF83X09GRlNFVCAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDQKLSNkZWZpbmUgTUFDX1BDVV9UWE9QXzRfN19WQUxVRV83X01TQiAgICAgICAgICAgICAzMQotI2RlZmluZSBNQUNfUENVX1RYT1BfNF83X1ZBTFVFXzdfTFNCICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIE1BQ19QQ1VfVFhPUF80XzdfVkFMVUVfN19NQVNLICAgICAgICAgICAgMHhmZjAwMDAwMAotI2RlZmluZSBNQUNfUENVX1RYT1BfNF83X1ZBTFVFXzdfR0VUKHgpICAgICAgICAgICgoKHgpICYgTUFDX1BDVV9UWE9QXzRfN19WQUxVRV83X01BU0spID4+IE1BQ19QQ1VfVFhPUF80XzdfVkFMVUVfN19MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfVFhPUF80XzdfVkFMVUVfN19TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9UWE9QXzRfN19WQUxVRV83X0xTQikgJiBNQUNfUENVX1RYT1BfNF83X1ZBTFVFXzdfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9UWE9QXzRfN19WQUxVRV82X01TQiAgICAgICAgICAgICAyMwotI2RlZmluZSBNQUNfUENVX1RYT1BfNF83X1ZBTFVFXzZfTFNCICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIE1BQ19QQ1VfVFhPUF80XzdfVkFMVUVfNl9NQVNLICAgICAgICAgICAgMHgwMGZmMDAwMAotI2RlZmluZSBNQUNfUENVX1RYT1BfNF83X1ZBTFVFXzZfR0VUKHgpICAgICAgICAgICgoKHgpICYgTUFDX1BDVV9UWE9QXzRfN19WQUxVRV82X01BU0spID4+IE1BQ19QQ1VfVFhPUF80XzdfVkFMVUVfNl9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfVFhPUF80XzdfVkFMVUVfNl9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9UWE9QXzRfN19WQUxVRV82X0xTQikgJiBNQUNfUENVX1RYT1BfNF83X1ZBTFVFXzZfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9UWE9QXzRfN19WQUxVRV81X01TQiAgICAgICAgICAgICAxNQotI2RlZmluZSBNQUNfUENVX1RYT1BfNF83X1ZBTFVFXzVfTFNCICAgICAgICAgICAgIDgKLSNkZWZpbmUgTUFDX1BDVV9UWE9QXzRfN19WQUxVRV81X01BU0sgICAgICAgICAgICAweDAwMDBmZjAwCi0jZGVmaW5lIE1BQ19QQ1VfVFhPUF80XzdfVkFMVUVfNV9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBNQUNfUENVX1RYT1BfNF83X1ZBTFVFXzVfTUFTSykgPj4gTUFDX1BDVV9UWE9QXzRfN19WQUxVRV81X0xTQikKLSNkZWZpbmUgTUFDX1BDVV9UWE9QXzRfN19WQUxVRV81X1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBNQUNfUENVX1RYT1BfNF83X1ZBTFVFXzVfTFNCKSAmIE1BQ19QQ1VfVFhPUF80XzdfVkFMVUVfNV9NQVNLKQotI2RlZmluZSBNQUNfUENVX1RYT1BfNF83X1ZBTFVFXzRfTVNCICAgICAgICAgICAgIDcKLSNkZWZpbmUgTUFDX1BDVV9UWE9QXzRfN19WQUxVRV80X0xTQiAgICAgICAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfVFhPUF80XzdfVkFMVUVfNF9NQVNLICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBNQUNfUENVX1RYT1BfNF83X1ZBTFVFXzRfR0VUKHgpICAgICAgICAgICgoKHgpICYgTUFDX1BDVV9UWE9QXzRfN19WQUxVRV80X01BU0spID4+IE1BQ19QQ1VfVFhPUF80XzdfVkFMVUVfNF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfVFhPUF80XzdfVkFMVUVfNF9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9UWE9QXzRfN19WQUxVRV80X0xTQikgJiBNQUNfUENVX1RYT1BfNF83X1ZBTFVFXzRfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX1RYT1BfOF8xMV9BRERSRVNTICAgICAgICAgICAgICAgIDB4MDAwMDgxMDgKLSNkZWZpbmUgTUFDX1BDVV9UWE9QXzhfMTFfT0ZGU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMTA4Ci0jZGVmaW5lIE1BQ19QQ1VfVFhPUF84XzExX1ZBTFVFXzExX01TQiAgICAgICAgICAgMzEKLSNkZWZpbmUgTUFDX1BDVV9UWE9QXzhfMTFfVkFMVUVfMTFfTFNCICAgICAgICAgICAyNAotI2RlZmluZSBNQUNfUENVX1RYT1BfOF8xMV9WQUxVRV8xMV9NQVNLICAgICAgICAgIDB4ZmYwMDAwMDAKLSNkZWZpbmUgTUFDX1BDVV9UWE9QXzhfMTFfVkFMVUVfMTFfR0VUKHgpICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfVFhPUF84XzExX1ZBTFVFXzExX01BU0spID4+IE1BQ19QQ1VfVFhPUF84XzExX1ZBTFVFXzExX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9UWE9QXzhfMTFfVkFMVUVfMTFfU0VUKHgpICAgICAgICAoKCh4KSA8PCBNQUNfUENVX1RYT1BfOF8xMV9WQUxVRV8xMV9MU0IpICYgTUFDX1BDVV9UWE9QXzhfMTFfVkFMVUVfMTFfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9UWE9QXzhfMTFfVkFMVUVfMTBfTVNCICAgICAgICAgICAyMwotI2RlZmluZSBNQUNfUENVX1RYT1BfOF8xMV9WQUxVRV8xMF9MU0IgICAgICAgICAgIDE2Ci0jZGVmaW5lIE1BQ19QQ1VfVFhPUF84XzExX1ZBTFVFXzEwX01BU0sgICAgICAgICAgMHgwMGZmMDAwMAotI2RlZmluZSBNQUNfUENVX1RYT1BfOF8xMV9WQUxVRV8xMF9HRVQoeCkgICAgICAgICgoKHgpICYgTUFDX1BDVV9UWE9QXzhfMTFfVkFMVUVfMTBfTUFTSykgPj4gTUFDX1BDVV9UWE9QXzhfMTFfVkFMVUVfMTBfTFNCKQotI2RlZmluZSBNQUNfUENVX1RYT1BfOF8xMV9WQUxVRV8xMF9TRVQoeCkgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfVFhPUF84XzExX1ZBTFVFXzEwX0xTQikgJiBNQUNfUENVX1RYT1BfOF8xMV9WQUxVRV8xMF9NQVNLKQotI2RlZmluZSBNQUNfUENVX1RYT1BfOF8xMV9WQUxVRV85X01TQiAgICAgICAgICAgIDE1Ci0jZGVmaW5lIE1BQ19QQ1VfVFhPUF84XzExX1ZBTFVFXzlfTFNCICAgICAgICAgICAgOAotI2RlZmluZSBNQUNfUENVX1RYT1BfOF8xMV9WQUxVRV85X01BU0sgICAgICAgICAgIDB4MDAwMGZmMDAKLSNkZWZpbmUgTUFDX1BDVV9UWE9QXzhfMTFfVkFMVUVfOV9HRVQoeCkgICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfVFhPUF84XzExX1ZBTFVFXzlfTUFTSykgPj4gTUFDX1BDVV9UWE9QXzhfMTFfVkFMVUVfOV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfVFhPUF84XzExX1ZBTFVFXzlfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9UWE9QXzhfMTFfVkFMVUVfOV9MU0IpICYgTUFDX1BDVV9UWE9QXzhfMTFfVkFMVUVfOV9NQVNLKQotI2RlZmluZSBNQUNfUENVX1RYT1BfOF8xMV9WQUxVRV84X01TQiAgICAgICAgICAgIDcKLSNkZWZpbmUgTUFDX1BDVV9UWE9QXzhfMTFfVkFMVUVfOF9MU0IgICAgICAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfVFhPUF84XzExX1ZBTFVFXzhfTUFTSyAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBNQUNfUENVX1RYT1BfOF8xMV9WQUxVRV84X0dFVCh4KSAgICAgICAgICgoKHgpICYgTUFDX1BDVV9UWE9QXzhfMTFfVkFMVUVfOF9NQVNLKSA+PiBNQUNfUENVX1RYT1BfOF8xMV9WQUxVRV84X0xTQikKLSNkZWZpbmUgTUFDX1BDVV9UWE9QXzhfMTFfVkFMVUVfOF9TRVQoeCkgICAgICAgICAoKCh4KSA8PCBNQUNfUENVX1RYT1BfOF8xMV9WQUxVRV84X0xTQikgJiBNQUNfUENVX1RYT1BfOF8xMV9WQUxVRV84X01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9UWE9QXzEyXzE1X0FERFJFU1MgICAgICAgICAgICAgICAweDAwMDA4MTBjCi0jZGVmaW5lIE1BQ19QQ1VfVFhPUF8xMl8xNV9PRkZTRVQgICAgICAgICAgICAgICAgMHgwMDAwMDEwYwotI2RlZmluZSBNQUNfUENVX1RYT1BfMTJfMTVfVkFMVUVfMTVfTVNCICAgICAgICAgIDMxCi0jZGVmaW5lIE1BQ19QQ1VfVFhPUF8xMl8xNV9WQUxVRV8xNV9MU0IgICAgICAgICAgMjQKLSNkZWZpbmUgTUFDX1BDVV9UWE9QXzEyXzE1X1ZBTFVFXzE1X01BU0sgICAgICAgICAweGZmMDAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfVFhPUF8xMl8xNV9WQUxVRV8xNV9HRVQoeCkgICAgICAgKCgoeCkgJiBNQUNfUENVX1RYT1BfMTJfMTVfVkFMVUVfMTVfTUFTSykgPj4gTUFDX1BDVV9UWE9QXzEyXzE1X1ZBTFVFXzE1X0xTQikKLSNkZWZpbmUgTUFDX1BDVV9UWE9QXzEyXzE1X1ZBTFVFXzE1X1NFVCh4KSAgICAgICAoKCh4KSA8PCBNQUNfUENVX1RYT1BfMTJfMTVfVkFMVUVfMTVfTFNCKSAmIE1BQ19QQ1VfVFhPUF8xMl8xNV9WQUxVRV8xNV9NQVNLKQotI2RlZmluZSBNQUNfUENVX1RYT1BfMTJfMTVfVkFMVUVfMTRfTVNCICAgICAgICAgIDIzCi0jZGVmaW5lIE1BQ19QQ1VfVFhPUF8xMl8xNV9WQUxVRV8xNF9MU0IgICAgICAgICAgMTYKLSNkZWZpbmUgTUFDX1BDVV9UWE9QXzEyXzE1X1ZBTFVFXzE0X01BU0sgICAgICAgICAweDAwZmYwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfVFhPUF8xMl8xNV9WQUxVRV8xNF9HRVQoeCkgICAgICAgKCgoeCkgJiBNQUNfUENVX1RYT1BfMTJfMTVfVkFMVUVfMTRfTUFTSykgPj4gTUFDX1BDVV9UWE9QXzEyXzE1X1ZBTFVFXzE0X0xTQikKLSNkZWZpbmUgTUFDX1BDVV9UWE9QXzEyXzE1X1ZBTFVFXzE0X1NFVCh4KSAgICAgICAoKCh4KSA8PCBNQUNfUENVX1RYT1BfMTJfMTVfVkFMVUVfMTRfTFNCKSAmIE1BQ19QQ1VfVFhPUF8xMl8xNV9WQUxVRV8xNF9NQVNLKQotI2RlZmluZSBNQUNfUENVX1RYT1BfMTJfMTVfVkFMVUVfMTNfTVNCICAgICAgICAgIDE1Ci0jZGVmaW5lIE1BQ19QQ1VfVFhPUF8xMl8xNV9WQUxVRV8xM19MU0IgICAgICAgICAgOAotI2RlZmluZSBNQUNfUENVX1RYT1BfMTJfMTVfVkFMVUVfMTNfTUFTSyAgICAgICAgIDB4MDAwMGZmMDAKLSNkZWZpbmUgTUFDX1BDVV9UWE9QXzEyXzE1X1ZBTFVFXzEzX0dFVCh4KSAgICAgICAoKCh4KSAmIE1BQ19QQ1VfVFhPUF8xMl8xNV9WQUxVRV8xM19NQVNLKSA+PiBNQUNfUENVX1RYT1BfMTJfMTVfVkFMVUVfMTNfTFNCKQotI2RlZmluZSBNQUNfUENVX1RYT1BfMTJfMTVfVkFMVUVfMTNfU0VUKHgpICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfVFhPUF8xMl8xNV9WQUxVRV8xM19MU0IpICYgTUFDX1BDVV9UWE9QXzEyXzE1X1ZBTFVFXzEzX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfVFhPUF8xMl8xNV9WQUxVRV8xMl9NU0IgICAgICAgICAgNwotI2RlZmluZSBNQUNfUENVX1RYT1BfMTJfMTVfVkFMVUVfMTJfTFNCICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9UWE9QXzEyXzE1X1ZBTFVFXzEyX01BU0sgICAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIE1BQ19QQ1VfVFhPUF8xMl8xNV9WQUxVRV8xMl9HRVQoeCkgICAgICAgKCgoeCkgJiBNQUNfUENVX1RYT1BfMTJfMTVfVkFMVUVfMTJfTUFTSykgPj4gTUFDX1BDVV9UWE9QXzEyXzE1X1ZBTFVFXzEyX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9UWE9QXzEyXzE1X1ZBTFVFXzEyX1NFVCh4KSAgICAgICAoKCh4KSA8PCBNQUNfUENVX1RYT1BfMTJfMTVfVkFMVUVfMTJfTFNCKSAmIE1BQ19QQ1VfVFhPUF8xMl8xNV9WQUxVRV8xMl9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfTE9HSUNfQU5BTFlaRVJfQUREUkVTUyAgICAgICAgICAgMHgwMDAwODExMAotI2RlZmluZSBNQUNfUENVX0xPR0lDX0FOQUxZWkVSX09GRlNFVCAgICAgICAgICAgIDB4MDAwMDAxMTAKLSNkZWZpbmUgTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl9ESUFHX01PREVfTVNCICAgICAzMQotI2RlZmluZSBNQUNfUENVX0xPR0lDX0FOQUxZWkVSX0RJQUdfTU9ERV9MU0IgICAgIDE4Ci0jZGVmaW5lIE1BQ19QQ1VfTE9HSUNfQU5BTFlaRVJfRElBR19NT0RFX01BU0sgICAgMHhmZmZjMDAwMAotI2RlZmluZSBNQUNfUENVX0xPR0lDX0FOQUxZWkVSX0RJQUdfTU9ERV9HRVQoeCkgICgoKHgpICYgTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl9ESUFHX01PREVfTUFTSykgPj4gTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl9ESUFHX01PREVfTFNCKQotI2RlZmluZSBNQUNfUENVX0xPR0lDX0FOQUxZWkVSX0RJQUdfTU9ERV9TRVQoeCkgICgoKHgpIDw8IE1BQ19QQ1VfTE9HSUNfQU5BTFlaRVJfRElBR19NT0RFX0xTQikgJiBNQUNfUENVX0xPR0lDX0FOQUxZWkVSX0RJQUdfTU9ERV9NQVNLKQotI2RlZmluZSBNQUNfUENVX0xPR0lDX0FOQUxZWkVSX0lOVF9BRERSX01TQiAgICAgIDE3Ci0jZGVmaW5lIE1BQ19QQ1VfTE9HSUNfQU5BTFlaRVJfSU5UX0FERFJfTFNCICAgICAgOAotI2RlZmluZSBNQUNfUENVX0xPR0lDX0FOQUxZWkVSX0lOVF9BRERSX01BU0sgICAgIDB4MDAwM2ZmMDAKLSNkZWZpbmUgTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl9JTlRfQUREUl9HRVQoeCkgICAoKCh4KSAmIE1BQ19QQ1VfTE9HSUNfQU5BTFlaRVJfSU5UX0FERFJfTUFTSykgPj4gTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl9JTlRfQUREUl9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfTE9HSUNfQU5BTFlaRVJfSU5UX0FERFJfU0VUKHgpICAgKCgoeCkgPDwgTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl9JTlRfQUREUl9MU0IpICYgTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl9JTlRfQUREUl9NQVNLKQotI2RlZmluZSBNQUNfUENVX0xPR0lDX0FOQUxZWkVSX1FDVV9TRUxfTVNCICAgICAgIDcKLSNkZWZpbmUgTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl9RQ1VfU0VMX0xTQiAgICAgICA0Ci0jZGVmaW5lIE1BQ19QQ1VfTE9HSUNfQU5BTFlaRVJfUUNVX1NFTF9NQVNLICAgICAgMHgwMDAwMDBmMAotI2RlZmluZSBNQUNfUENVX0xPR0lDX0FOQUxZWkVSX1FDVV9TRUxfR0VUKHgpICAgICgoKHgpICYgTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl9RQ1VfU0VMX01BU0spID4+IE1BQ19QQ1VfTE9HSUNfQU5BTFlaRVJfUUNVX1NFTF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfTE9HSUNfQU5BTFlaRVJfUUNVX1NFTF9TRVQoeCkgICAgKCgoeCkgPDwgTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl9RQ1VfU0VMX0xTQikgJiBNQUNfUENVX0xPR0lDX0FOQUxZWkVSX1FDVV9TRUxfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl9FTkFCTEVfTVNCICAgICAgICAzCi0jZGVmaW5lIE1BQ19QQ1VfTE9HSUNfQU5BTFlaRVJfRU5BQkxFX0xTQiAgICAgICAgMwotI2RlZmluZSBNQUNfUENVX0xPR0lDX0FOQUxZWkVSX0VOQUJMRV9NQVNLICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl9FTkFCTEVfR0VUKHgpICAgICAoKCh4KSAmIE1BQ19QQ1VfTE9HSUNfQU5BTFlaRVJfRU5BQkxFX01BU0spID4+IE1BQ19QQ1VfTE9HSUNfQU5BTFlaRVJfRU5BQkxFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl9FTkFCTEVfU0VUKHgpICAgICAoKCh4KSA8PCBNQUNfUENVX0xPR0lDX0FOQUxZWkVSX0VOQUJMRV9MU0IpICYgTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl9FTkFCTEVfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl9TVEFURV9NU0IgICAgICAgICAyCi0jZGVmaW5lIE1BQ19QQ1VfTE9HSUNfQU5BTFlaRVJfU1RBVEVfTFNCICAgICAgICAgMgotI2RlZmluZSBNQUNfUENVX0xPR0lDX0FOQUxZWkVSX1NUQVRFX01BU0sgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl9TVEFURV9HRVQoeCkgICAgICAoKCh4KSAmIE1BQ19QQ1VfTE9HSUNfQU5BTFlaRVJfU1RBVEVfTUFTSykgPj4gTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl9TVEFURV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfTE9HSUNfQU5BTFlaRVJfU1RBVEVfU0VUKHgpICAgICAgKCgoeCkgPDwgTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl9TVEFURV9MU0IpICYgTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl9TVEFURV9NQVNLKQotI2RlZmluZSBNQUNfUENVX0xPR0lDX0FOQUxZWkVSX0NMRUFSX01TQiAgICAgICAgIDEKLSNkZWZpbmUgTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl9DTEVBUl9MU0IgICAgICAgICAxCi0jZGVmaW5lIE1BQ19QQ1VfTE9HSUNfQU5BTFlaRVJfQ0xFQVJfTUFTSyAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBNQUNfUENVX0xPR0lDX0FOQUxZWkVSX0NMRUFSX0dFVCh4KSAgICAgICgoKHgpICYgTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl9DTEVBUl9NQVNLKSA+PiBNQUNfUENVX0xPR0lDX0FOQUxZWkVSX0NMRUFSX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl9DTEVBUl9TRVQoeCkgICAgICAoKCh4KSA8PCBNQUNfUENVX0xPR0lDX0FOQUxZWkVSX0NMRUFSX0xTQikgJiBNQUNfUENVX0xPR0lDX0FOQUxZWkVSX0NMRUFSX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfTE9HSUNfQU5BTFlaRVJfSE9MRF9NU0IgICAgICAgICAgMAotI2RlZmluZSBNQUNfUENVX0xPR0lDX0FOQUxZWkVSX0hPTERfTFNCICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl9IT0xEX01BU0sgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIE1BQ19QQ1VfTE9HSUNfQU5BTFlaRVJfSE9MRF9HRVQoeCkgICAgICAgKCgoeCkgJiBNQUNfUENVX0xPR0lDX0FOQUxZWkVSX0hPTERfTUFTSykgPj4gTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl9IT0xEX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl9IT0xEX1NFVCh4KSAgICAgICAoKCh4KSA8PCBNQUNfUENVX0xPR0lDX0FOQUxZWkVSX0hPTERfTFNCKSAmIE1BQ19QQ1VfTE9HSUNfQU5BTFlaRVJfSE9MRF9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfTE9HSUNfQU5BTFlaRVJfMzJMX0FERFJFU1MgICAgICAgMHgwMDAwODExNAotI2RlZmluZSBNQUNfUENVX0xPR0lDX0FOQUxZWkVSXzMyTF9PRkZTRVQgICAgICAgIDB4MDAwMDAxMTQKLSNkZWZpbmUgTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl8zMkxfTUFTS19NU0IgICAgICAzMQotI2RlZmluZSBNQUNfUENVX0xPR0lDX0FOQUxZWkVSXzMyTF9NQVNLX0xTQiAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl8zMkxfTUFTS19NQVNLICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfTE9HSUNfQU5BTFlaRVJfMzJMX01BU0tfR0VUKHgpICAgKCgoeCkgJiBNQUNfUENVX0xPR0lDX0FOQUxZWkVSXzMyTF9NQVNLX01BU0spID4+IE1BQ19QQ1VfTE9HSUNfQU5BTFlaRVJfMzJMX01BU0tfTFNCKQotI2RlZmluZSBNQUNfUENVX0xPR0lDX0FOQUxZWkVSXzMyTF9NQVNLX1NFVCh4KSAgICgoKHgpIDw8IE1BQ19QQ1VfTE9HSUNfQU5BTFlaRVJfMzJMX01BU0tfTFNCKSAmIE1BQ19QQ1VfTE9HSUNfQU5BTFlaRVJfMzJMX01BU0tfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX0xPR0lDX0FOQUxZWkVSXzE2VV9BRERSRVNTICAgICAgIDB4MDAwMDgxMTgKLSNkZWZpbmUgTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl8xNlVfT0ZGU0VUICAgICAgICAweDAwMDAwMTE4Ci0jZGVmaW5lIE1BQ19QQ1VfTE9HSUNfQU5BTFlaRVJfMTZVX01BU0tfTVNCICAgICAgMTUKLSNkZWZpbmUgTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl8xNlVfTUFTS19MU0IgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfTE9HSUNfQU5BTFlaRVJfMTZVX01BU0tfTUFTSyAgICAgMHgwMDAwZmZmZgotI2RlZmluZSBNQUNfUENVX0xPR0lDX0FOQUxZWkVSXzE2VV9NQVNLX0dFVCh4KSAgICgoKHgpICYgTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl8xNlVfTUFTS19NQVNLKSA+PiBNQUNfUENVX0xPR0lDX0FOQUxZWkVSXzE2VV9NQVNLX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl8xNlVfTUFTS19TRVQoeCkgICAoKCh4KSA8PCBNQUNfUENVX0xPR0lDX0FOQUxZWkVSXzE2VV9NQVNLX0xTQikgJiBNQUNfUENVX0xPR0lDX0FOQUxZWkVSXzE2VV9NQVNLX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9QSFlfRVJSX0NOVF9NQVNLX0NPTlRfQUREUkVTUyAgICAweDAwMDA4MTFjCi0jZGVmaW5lIE1BQ19QQ1VfUEhZX0VSUl9DTlRfTUFTS19DT05UX09GRlNFVCAgICAgMHgwMDAwMDExYwotI2RlZmluZSBNQUNfUENVX1BIWV9FUlJfQ05UX01BU0tfQ09OVF9NQVNLM19NU0IgIDIzCi0jZGVmaW5lIE1BQ19QQ1VfUEhZX0VSUl9DTlRfTUFTS19DT05UX01BU0szX0xTQiAgMTYKLSNkZWZpbmUgTUFDX1BDVV9QSFlfRVJSX0NOVF9NQVNLX0NPTlRfTUFTSzNfTUFTSyAweDAwZmYwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfUEhZX0VSUl9DTlRfTUFTS19DT05UX01BU0szX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfUEhZX0VSUl9DTlRfTUFTS19DT05UX01BU0szX01BU0spID4+IE1BQ19QQ1VfUEhZX0VSUl9DTlRfTUFTS19DT05UX01BU0szX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9QSFlfRVJSX0NOVF9NQVNLX0NPTlRfTUFTSzNfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfUEhZX0VSUl9DTlRfTUFTS19DT05UX01BU0szX0xTQikgJiBNQUNfUENVX1BIWV9FUlJfQ05UX01BU0tfQ09OVF9NQVNLM19NQVNLKQotI2RlZmluZSBNQUNfUENVX1BIWV9FUlJfQ05UX01BU0tfQ09OVF9NQVNLMl9NU0IgIDE1Ci0jZGVmaW5lIE1BQ19QQ1VfUEhZX0VSUl9DTlRfTUFTS19DT05UX01BU0syX0xTQiAgOAotI2RlZmluZSBNQUNfUENVX1BIWV9FUlJfQ05UX01BU0tfQ09OVF9NQVNLMl9NQVNLIDB4MDAwMGZmMDAKLSNkZWZpbmUgTUFDX1BDVV9QSFlfRVJSX0NOVF9NQVNLX0NPTlRfTUFTSzJfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9QSFlfRVJSX0NOVF9NQVNLX0NPTlRfTUFTSzJfTUFTSykgPj4gTUFDX1BDVV9QSFlfRVJSX0NOVF9NQVNLX0NPTlRfTUFTSzJfTFNCKQotI2RlZmluZSBNQUNfUENVX1BIWV9FUlJfQ05UX01BU0tfQ09OVF9NQVNLMl9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9QSFlfRVJSX0NOVF9NQVNLX0NPTlRfTUFTSzJfTFNCKSAmIE1BQ19QQ1VfUEhZX0VSUl9DTlRfTUFTS19DT05UX01BU0syX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfUEhZX0VSUl9DTlRfTUFTS19DT05UX01BU0sxX01TQiAgNwotI2RlZmluZSBNQUNfUENVX1BIWV9FUlJfQ05UX01BU0tfQ09OVF9NQVNLMV9MU0IgIDAKLSNkZWZpbmUgTUFDX1BDVV9QSFlfRVJSX0NOVF9NQVNLX0NPTlRfTUFTSzFfTUFTSyAweDAwMDAwMGZmCi0jZGVmaW5lIE1BQ19QQ1VfUEhZX0VSUl9DTlRfTUFTS19DT05UX01BU0sxX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfUEhZX0VSUl9DTlRfTUFTS19DT05UX01BU0sxX01BU0spID4+IE1BQ19QQ1VfUEhZX0VSUl9DTlRfTUFTS19DT05UX01BU0sxX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9QSFlfRVJSX0NOVF9NQVNLX0NPTlRfTUFTSzFfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfUEhZX0VSUl9DTlRfTUFTS19DT05UX01BU0sxX0xTQikgJiBNQUNfUENVX1BIWV9FUlJfQ05UX01BU0tfQ09OVF9NQVNLMV9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfQVpJTVVUSF9NT0RFX0FERFJFU1MgICAgICAgICAgICAgMHgwMDAwODEyMAotI2RlZmluZSBNQUNfUENVX0FaSU1VVEhfTU9ERV9PRkZTRVQgICAgICAgICAgICAgIDB4MDAwMDAxMjAKLSNkZWZpbmUgTUFDX1BDVV9BWklNVVRIX01PREVfQkFfVVNFU19BRDFfTVNCICAgICA3Ci0jZGVmaW5lIE1BQ19QQ1VfQVpJTVVUSF9NT0RFX0JBX1VTRVNfQUQxX0xTQiAgICAgNwotI2RlZmluZSBNQUNfUENVX0FaSU1VVEhfTU9ERV9CQV9VU0VTX0FEMV9NQVNLICAgIDB4MDAwMDAwODAKLSNkZWZpbmUgTUFDX1BDVV9BWklNVVRIX01PREVfQkFfVVNFU19BRDFfR0VUKHgpICAoKCh4KSAmIE1BQ19QQ1VfQVpJTVVUSF9NT0RFX0JBX1VTRVNfQUQxX01BU0spID4+IE1BQ19QQ1VfQVpJTVVUSF9NT0RFX0JBX1VTRVNfQUQxX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9BWklNVVRIX01PREVfQkFfVVNFU19BRDFfU0VUKHgpICAoKCh4KSA8PCBNQUNfUENVX0FaSU1VVEhfTU9ERV9CQV9VU0VTX0FEMV9MU0IpICYgTUFDX1BDVV9BWklNVVRIX01PREVfQkFfVVNFU19BRDFfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9BWklNVVRIX01PREVfQUNLX0NUU19NQVRDSF9UWF9BRDJfTVNCIDYKLSNkZWZpbmUgTUFDX1BDVV9BWklNVVRIX01PREVfQUNLX0NUU19NQVRDSF9UWF9BRDJfTFNCIDYKLSNkZWZpbmUgTUFDX1BDVV9BWklNVVRIX01PREVfQUNLX0NUU19NQVRDSF9UWF9BRDJfTUFTSyAweDAwMDAwMDQwCi0jZGVmaW5lIE1BQ19QQ1VfQVpJTVVUSF9NT0RFX0FDS19DVFNfTUFUQ0hfVFhfQUQyX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfQVpJTVVUSF9NT0RFX0FDS19DVFNfTUFUQ0hfVFhfQUQyX01BU0spID4+IE1BQ19QQ1VfQVpJTVVUSF9NT0RFX0FDS19DVFNfTUFUQ0hfVFhfQUQyX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9BWklNVVRIX01PREVfQUNLX0NUU19NQVRDSF9UWF9BRDJfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfQVpJTVVUSF9NT0RFX0FDS19DVFNfTUFUQ0hfVFhfQUQyX0xTQikgJiBNQUNfUENVX0FaSU1VVEhfTU9ERV9BQ0tfQ1RTX01BVENIX1RYX0FEMl9NQVNLKQotI2RlZmluZSBNQUNfUENVX0FaSU1VVEhfTU9ERV9UWF9ERVNDX0VOX01TQiAgICAgIDUKLSNkZWZpbmUgTUFDX1BDVV9BWklNVVRIX01PREVfVFhfREVTQ19FTl9MU0IgICAgICA1Ci0jZGVmaW5lIE1BQ19QQ1VfQVpJTVVUSF9NT0RFX1RYX0RFU0NfRU5fTUFTSyAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBNQUNfUENVX0FaSU1VVEhfTU9ERV9UWF9ERVNDX0VOX0dFVCh4KSAgICgoKHgpICYgTUFDX1BDVV9BWklNVVRIX01PREVfVFhfREVTQ19FTl9NQVNLKSA+PiBNQUNfUENVX0FaSU1VVEhfTU9ERV9UWF9ERVNDX0VOX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9BWklNVVRIX01PREVfVFhfREVTQ19FTl9TRVQoeCkgICAoKCh4KSA8PCBNQUNfUENVX0FaSU1VVEhfTU9ERV9UWF9ERVNDX0VOX0xTQikgJiBNQUNfUENVX0FaSU1VVEhfTU9ERV9UWF9ERVNDX0VOX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfQVpJTVVUSF9NT0RFX0NMS19FTl9NU0IgICAgICAgICAgNAotI2RlZmluZSBNQUNfUENVX0FaSU1VVEhfTU9ERV9DTEtfRU5fTFNCICAgICAgICAgIDQKLSNkZWZpbmUgTUFDX1BDVV9BWklNVVRIX01PREVfQ0xLX0VOX01BU0sgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIE1BQ19QQ1VfQVpJTVVUSF9NT0RFX0NMS19FTl9HRVQoeCkgICAgICAgKCgoeCkgJiBNQUNfUENVX0FaSU1VVEhfTU9ERV9DTEtfRU5fTUFTSykgPj4gTUFDX1BDVV9BWklNVVRIX01PREVfQ0xLX0VOX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9BWklNVVRIX01PREVfQ0xLX0VOX1NFVCh4KSAgICAgICAoKCh4KSA8PCBNQUNfUENVX0FaSU1VVEhfTU9ERV9DTEtfRU5fTFNCKSAmIE1BQ19QQ1VfQVpJTVVUSF9NT0RFX0NMS19FTl9NQVNLKQotI2RlZmluZSBNQUNfUENVX0FaSU1VVEhfTU9ERV9SWF9UU0ZfU1RBVFVTX1NFTF9NU0IgMwotI2RlZmluZSBNQUNfUENVX0FaSU1VVEhfTU9ERV9SWF9UU0ZfU1RBVFVTX1NFTF9MU0IgMwotI2RlZmluZSBNQUNfUENVX0FaSU1VVEhfTU9ERV9SWF9UU0ZfU1RBVFVTX1NFTF9NQVNLIDB4MDAwMDAwMDgKLSNkZWZpbmUgTUFDX1BDVV9BWklNVVRIX01PREVfUlhfVFNGX1NUQVRVU19TRUxfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9BWklNVVRIX01PREVfUlhfVFNGX1NUQVRVU19TRUxfTUFTSykgPj4gTUFDX1BDVV9BWklNVVRIX01PREVfUlhfVFNGX1NUQVRVU19TRUxfTFNCKQotI2RlZmluZSBNQUNfUENVX0FaSU1VVEhfTU9ERV9SWF9UU0ZfU1RBVFVTX1NFTF9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9BWklNVVRIX01PREVfUlhfVFNGX1NUQVRVU19TRUxfTFNCKSAmIE1BQ19QQ1VfQVpJTVVUSF9NT0RFX1JYX1RTRl9TVEFUVVNfU0VMX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfQVpJTVVUSF9NT0RFX1RYX1RTRl9TVEFUVVNfU0VMX01TQiAyCi0jZGVmaW5lIE1BQ19QQ1VfQVpJTVVUSF9NT0RFX1RYX1RTRl9TVEFUVVNfU0VMX0xTQiAyCi0jZGVmaW5lIE1BQ19QQ1VfQVpJTVVUSF9NT0RFX1RYX1RTRl9TVEFUVVNfU0VMX01BU0sgMHgwMDAwMDAwNAotI2RlZmluZSBNQUNfUENVX0FaSU1VVEhfTU9ERV9UWF9UU0ZfU1RBVFVTX1NFTF9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0FaSU1VVEhfTU9ERV9UWF9UU0ZfU1RBVFVTX1NFTF9NQVNLKSA+PiBNQUNfUENVX0FaSU1VVEhfTU9ERV9UWF9UU0ZfU1RBVFVTX1NFTF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQVpJTVVUSF9NT0RFX1RYX1RTRl9TVEFUVVNfU0VMX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0FaSU1VVEhfTU9ERV9UWF9UU0ZfU1RBVFVTX1NFTF9MU0IpICYgTUFDX1BDVV9BWklNVVRIX01PREVfVFhfVFNGX1NUQVRVU19TRUxfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9BWklNVVRIX01PREVfS0VZX1NFQVJDSF9BRDFfTVNCICAxCi0jZGVmaW5lIE1BQ19QQ1VfQVpJTVVUSF9NT0RFX0tFWV9TRUFSQ0hfQUQxX0xTQiAgMQotI2RlZmluZSBNQUNfUENVX0FaSU1VVEhfTU9ERV9LRVlfU0VBUkNIX0FEMV9NQVNLIDB4MDAwMDAwMDIKLSNkZWZpbmUgTUFDX1BDVV9BWklNVVRIX01PREVfS0VZX1NFQVJDSF9BRDFfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9BWklNVVRIX01PREVfS0VZX1NFQVJDSF9BRDFfTUFTSykgPj4gTUFDX1BDVV9BWklNVVRIX01PREVfS0VZX1NFQVJDSF9BRDFfTFNCKQotI2RlZmluZSBNQUNfUENVX0FaSU1VVEhfTU9ERV9LRVlfU0VBUkNIX0FEMV9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9BWklNVVRIX01PREVfS0VZX1NFQVJDSF9BRDFfTFNCKSAmIE1BQ19QQ1VfQVpJTVVUSF9NT0RFX0tFWV9TRUFSQ0hfQUQxX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfQVpJTVVUSF9NT0RFX0RJU0FCTEVfVFNGX1VQREFURV9NU0IgMAotI2RlZmluZSBNQUNfUENVX0FaSU1VVEhfTU9ERV9ESVNBQkxFX1RTRl9VUERBVEVfTFNCIDAKLSNkZWZpbmUgTUFDX1BDVV9BWklNVVRIX01PREVfRElTQUJMRV9UU0ZfVVBEQVRFX01BU0sgMHgwMDAwMDAwMQotI2RlZmluZSBNQUNfUENVX0FaSU1VVEhfTU9ERV9ESVNBQkxFX1RTRl9VUERBVEVfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9BWklNVVRIX01PREVfRElTQUJMRV9UU0ZfVVBEQVRFX01BU0spID4+IE1BQ19QQ1VfQVpJTVVUSF9NT0RFX0RJU0FCTEVfVFNGX1VQREFURV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQVpJTVVUSF9NT0RFX0RJU0FCTEVfVFNGX1VQREFURV9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9BWklNVVRIX01PREVfRElTQUJMRV9UU0ZfVVBEQVRFX0xTQikgJiBNQUNfUENVX0FaSU1VVEhfTU9ERV9ESVNBQkxFX1RTRl9VUERBVEVfTUFTSykKLQotI2RlZmluZSBNQUNfUENVXzIwXzQwX01PREVfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDgxMjQKLSNkZWZpbmUgTUFDX1BDVV8yMF80MF9NT0RFX09GRlNFVCAgICAgICAgICAgICAgICAweDAwMDAwMTI0Ci0jZGVmaW5lIE1BQ19QQ1VfMjBfNDBfTU9ERV9QSUZTX0NZQ0xFU19NU0IgICAgICAgMTUKLSNkZWZpbmUgTUFDX1BDVV8yMF80MF9NT0RFX1BJRlNfQ1lDTEVTX0xTQiAgICAgICA0Ci0jZGVmaW5lIE1BQ19QQ1VfMjBfNDBfTU9ERV9QSUZTX0NZQ0xFU19NQVNLICAgICAgMHgwMDAwZmZmMAotI2RlZmluZSBNQUNfUENVXzIwXzQwX01PREVfUElGU19DWUNMRVNfR0VUKHgpICAgICgoKHgpICYgTUFDX1BDVV8yMF80MF9NT0RFX1BJRlNfQ1lDTEVTX01BU0spID4+IE1BQ19QQ1VfMjBfNDBfTU9ERV9QSUZTX0NZQ0xFU19MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfMjBfNDBfTU9ERV9QSUZTX0NZQ0xFU19TRVQoeCkgICAgKCgoeCkgPDwgTUFDX1BDVV8yMF80MF9NT0RFX1BJRlNfQ1lDTEVTX0xTQikgJiBNQUNfUENVXzIwXzQwX01PREVfUElGU19DWUNMRVNfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV8yMF80MF9NT0RFX1NXQU1QRURfRk9SQ0VTX1JYX0NMRUFSX0NUTF9JRExFX01TQiAzCi0jZGVmaW5lIE1BQ19QQ1VfMjBfNDBfTU9ERV9TV0FNUEVEX0ZPUkNFU19SWF9DTEVBUl9DVExfSURMRV9MU0IgMwotI2RlZmluZSBNQUNfUENVXzIwXzQwX01PREVfU1dBTVBFRF9GT1JDRVNfUlhfQ0xFQVJfQ1RMX0lETEVfTUFTSyAweDAwMDAwMDA4Ci0jZGVmaW5lIE1BQ19QQ1VfMjBfNDBfTU9ERV9TV0FNUEVEX0ZPUkNFU19SWF9DTEVBUl9DVExfSURMRV9HRVQoeCkgKCgoeCkgJiBNQUNfUENVXzIwXzQwX01PREVfU1dBTVBFRF9GT1JDRVNfUlhfQ0xFQVJfQ1RMX0lETEVfTUFTSykgPj4gTUFDX1BDVV8yMF80MF9NT0RFX1NXQU1QRURfRk9SQ0VTX1JYX0NMRUFSX0NUTF9JRExFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV8yMF80MF9NT0RFX1NXQU1QRURfRk9SQ0VTX1JYX0NMRUFSX0NUTF9JRExFX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVXzIwXzQwX01PREVfU1dBTVBFRF9GT1JDRVNfUlhfQ0xFQVJfQ1RMX0lETEVfTFNCKSAmIE1BQ19QQ1VfMjBfNDBfTU9ERV9TV0FNUEVEX0ZPUkNFU19SWF9DTEVBUl9DVExfSURMRV9NQVNLKQotI2RlZmluZSBNQUNfUENVXzIwXzQwX01PREVfVFhfSFQyMF9PTl9FWFRfQlVTWV9NU0IgMgotI2RlZmluZSBNQUNfUENVXzIwXzQwX01PREVfVFhfSFQyMF9PTl9FWFRfQlVTWV9MU0IgMgotI2RlZmluZSBNQUNfUENVXzIwXzQwX01PREVfVFhfSFQyMF9PTl9FWFRfQlVTWV9NQVNLIDB4MDAwMDAwMDQKLSNkZWZpbmUgTUFDX1BDVV8yMF80MF9NT0RFX1RYX0hUMjBfT05fRVhUX0JVU1lfR0VUKHgpICgoKHgpICYgTUFDX1BDVV8yMF80MF9NT0RFX1RYX0hUMjBfT05fRVhUX0JVU1lfTUFTSykgPj4gTUFDX1BDVV8yMF80MF9NT0RFX1RYX0hUMjBfT05fRVhUX0JVU1lfTFNCKQotI2RlZmluZSBNQUNfUENVXzIwXzQwX01PREVfVFhfSFQyMF9PTl9FWFRfQlVTWV9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV8yMF80MF9NT0RFX1RYX0hUMjBfT05fRVhUX0JVU1lfTFNCKSAmIE1BQ19QQ1VfMjBfNDBfTU9ERV9UWF9IVDIwX09OX0VYVF9CVVNZX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfMjBfNDBfTU9ERV9FWFRfUElGU19FTkFCTEVfTVNCICAgMQotI2RlZmluZSBNQUNfUENVXzIwXzQwX01PREVfRVhUX1BJRlNfRU5BQkxFX0xTQiAgIDEKLSNkZWZpbmUgTUFDX1BDVV8yMF80MF9NT0RFX0VYVF9QSUZTX0VOQUJMRV9NQVNLICAweDAwMDAwMDAyCi0jZGVmaW5lIE1BQ19QQ1VfMjBfNDBfTU9ERV9FWFRfUElGU19FTkFCTEVfR0VUKHgpICgoKHgpICYgTUFDX1BDVV8yMF80MF9NT0RFX0VYVF9QSUZTX0VOQUJMRV9NQVNLKSA+PiBNQUNfUENVXzIwXzQwX01PREVfRVhUX1BJRlNfRU5BQkxFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV8yMF80MF9NT0RFX0VYVF9QSUZTX0VOQUJMRV9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV8yMF80MF9NT0RFX0VYVF9QSUZTX0VOQUJMRV9MU0IpICYgTUFDX1BDVV8yMF80MF9NT0RFX0VYVF9QSUZTX0VOQUJMRV9NQVNLKQotI2RlZmluZSBNQUNfUENVXzIwXzQwX01PREVfSk9JTkVEX1JYX0NMRUFSX01TQiAgIDAKLSNkZWZpbmUgTUFDX1BDVV8yMF80MF9NT0RFX0pPSU5FRF9SWF9DTEVBUl9MU0IgICAwCi0jZGVmaW5lIE1BQ19QQ1VfMjBfNDBfTU9ERV9KT0lORURfUlhfQ0xFQVJfTUFTSyAgMHgwMDAwMDAwMQotI2RlZmluZSBNQUNfUENVXzIwXzQwX01PREVfSk9JTkVEX1JYX0NMRUFSX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfMjBfNDBfTU9ERV9KT0lORURfUlhfQ0xFQVJfTUFTSykgPj4gTUFDX1BDVV8yMF80MF9NT0RFX0pPSU5FRF9SWF9DTEVBUl9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfMjBfNDBfTU9ERV9KT0lORURfUlhfQ0xFQVJfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfMjBfNDBfTU9ERV9KT0lORURfUlhfQ0xFQVJfTFNCKSAmIE1BQ19QQ1VfMjBfNDBfTU9ERV9KT0lORURfUlhfQ0xFQVJfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX1JYX0NMRUFSX0RJRkZfQ05UX0FERFJFU1MgICAgICAgIDB4MDAwMDgxMjgKLSNkZWZpbmUgTUFDX1BDVV9SWF9DTEVBUl9ESUZGX0NOVF9PRkZTRVQgICAgICAgICAweDAwMDAwMTI4Ci0jZGVmaW5lIE1BQ19QQ1VfUlhfQ0xFQVJfRElGRl9DTlRfVkFMVUVfTVNCICAgICAgMzEKLSNkZWZpbmUgTUFDX1BDVV9SWF9DTEVBUl9ESUZGX0NOVF9WQUxVRV9MU0IgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfUlhfQ0xFQVJfRElGRl9DTlRfVkFMVUVfTUFTSyAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBNQUNfUENVX1JYX0NMRUFSX0RJRkZfQ05UX1ZBTFVFX0dFVCh4KSAgICgoKHgpICYgTUFDX1BDVV9SWF9DTEVBUl9ESUZGX0NOVF9WQUxVRV9NQVNLKSA+PiBNQUNfUENVX1JYX0NMRUFSX0RJRkZfQ05UX1ZBTFVFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9SWF9DTEVBUl9ESUZGX0NOVF9WQUxVRV9TRVQoeCkgICAoKCh4KSA8PCBNQUNfUENVX1JYX0NMRUFSX0RJRkZfQ05UX1ZBTFVFX0xTQikgJiBNQUNfUENVX1JYX0NMRUFSX0RJRkZfQ05UX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9TRUxGX0dFTl9BTlRFTk5BX01BU0tfQUREUkVTUyAgICAweDAwMDA4MTJjCi0jZGVmaW5lIE1BQ19QQ1VfU0VMRl9HRU5fQU5URU5OQV9NQVNLX09GRlNFVCAgICAgMHgwMDAwMDEyYwotI2RlZmluZSBNQUNfUENVX1NFTEZfR0VOX0FOVEVOTkFfTUFTS19WQUxVRV9NU0IgIDIKLSNkZWZpbmUgTUFDX1BDVV9TRUxGX0dFTl9BTlRFTk5BX01BU0tfVkFMVUVfTFNCICAwCi0jZGVmaW5lIE1BQ19QQ1VfU0VMRl9HRU5fQU5URU5OQV9NQVNLX1ZBTFVFX01BU0sgMHgwMDAwMDAwNwotI2RlZmluZSBNQUNfUENVX1NFTEZfR0VOX0FOVEVOTkFfTUFTS19WQUxVRV9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX1NFTEZfR0VOX0FOVEVOTkFfTUFTS19WQUxVRV9NQVNLKSA+PiBNQUNfUENVX1NFTEZfR0VOX0FOVEVOTkFfTUFTS19WQUxVRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfU0VMRl9HRU5fQU5URU5OQV9NQVNLX1ZBTFVFX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX1NFTEZfR0VOX0FOVEVOTkFfTUFTS19WQUxVRV9MU0IpICYgTUFDX1BDVV9TRUxGX0dFTl9BTlRFTk5BX01BU0tfVkFMVUVfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX0JBX0JBUl9DT05UUk9MX0FERFJFU1MgICAgICAgICAgIDB4MDAwMDgxMzAKLSNkZWZpbmUgTUFDX1BDVV9CQV9CQVJfQ09OVFJPTF9PRkZTRVQgICAgICAgICAgICAweDAwMDAwMTMwCi0jZGVmaW5lIE1BQ19QQ1VfQkFfQkFSX0NPTlRST0xfVVBEQVRFX0JBX0JJVE1BUF9RT1NfTlVMTF9NU0IgMTIKLSNkZWZpbmUgTUFDX1BDVV9CQV9CQVJfQ09OVFJPTF9VUERBVEVfQkFfQklUTUFQX1FPU19OVUxMX0xTQiAxMgotI2RlZmluZSBNQUNfUENVX0JBX0JBUl9DT05UUk9MX1VQREFURV9CQV9CSVRNQVBfUU9TX05VTExfTUFTSyAweDAwMDAxMDAwCi0jZGVmaW5lIE1BQ19QQ1VfQkFfQkFSX0NPTlRST0xfVVBEQVRFX0JBX0JJVE1BUF9RT1NfTlVMTF9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0JBX0JBUl9DT05UUk9MX1VQREFURV9CQV9CSVRNQVBfUU9TX05VTExfTUFTSykgPj4gTUFDX1BDVV9CQV9CQVJfQ09OVFJPTF9VUERBVEVfQkFfQklUTUFQX1FPU19OVUxMX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9CQV9CQVJfQ09OVFJPTF9VUERBVEVfQkFfQklUTUFQX1FPU19OVUxMX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0JBX0JBUl9DT05UUk9MX1VQREFURV9CQV9CSVRNQVBfUU9TX05VTExfTFNCKSAmIE1BQ19QQ1VfQkFfQkFSX0NPTlRST0xfVVBEQVRFX0JBX0JJVE1BUF9RT1NfTlVMTF9NQVNLKQotI2RlZmluZSBNQUNfUENVX0JBX0JBUl9DT05UUk9MX1RYX0JBX0NMRUFSX0JBX1ZBTElEX01TQiAxMQotI2RlZmluZSBNQUNfUENVX0JBX0JBUl9DT05UUk9MX1RYX0JBX0NMRUFSX0JBX1ZBTElEX0xTQiAxMQotI2RlZmluZSBNQUNfUENVX0JBX0JBUl9DT05UUk9MX1RYX0JBX0NMRUFSX0JBX1ZBTElEX01BU0sgMHgwMDAwMDgwMAotI2RlZmluZSBNQUNfUENVX0JBX0JBUl9DT05UUk9MX1RYX0JBX0NMRUFSX0JBX1ZBTElEX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfQkFfQkFSX0NPTlRST0xfVFhfQkFfQ0xFQVJfQkFfVkFMSURfTUFTSykgPj4gTUFDX1BDVV9CQV9CQVJfQ09OVFJPTF9UWF9CQV9DTEVBUl9CQV9WQUxJRF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQkFfQkFSX0NPTlRST0xfVFhfQkFfQ0xFQVJfQkFfVkFMSURfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfQkFfQkFSX0NPTlRST0xfVFhfQkFfQ0xFQVJfQkFfVkFMSURfTFNCKSAmIE1BQ19QQ1VfQkFfQkFSX0NPTlRST0xfVFhfQkFfQ0xFQVJfQkFfVkFMSURfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9CQV9CQVJfQ09OVFJPTF9GT1JDRV9OT19NQVRDSF9NU0IgMTAKLSNkZWZpbmUgTUFDX1BDVV9CQV9CQVJfQ09OVFJPTF9GT1JDRV9OT19NQVRDSF9MU0IgMTAKLSNkZWZpbmUgTUFDX1BDVV9CQV9CQVJfQ09OVFJPTF9GT1JDRV9OT19NQVRDSF9NQVNLIDB4MDAwMDA0MDAKLSNkZWZpbmUgTUFDX1BDVV9CQV9CQVJfQ09OVFJPTF9GT1JDRV9OT19NQVRDSF9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0JBX0JBUl9DT05UUk9MX0ZPUkNFX05PX01BVENIX01BU0spID4+IE1BQ19QQ1VfQkFfQkFSX0NPTlRST0xfRk9SQ0VfTk9fTUFUQ0hfTFNCKQotI2RlZmluZSBNQUNfUENVX0JBX0JBUl9DT05UUk9MX0ZPUkNFX05PX01BVENIX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0JBX0JBUl9DT05UUk9MX0ZPUkNFX05PX01BVENIX0xTQikgJiBNQUNfUENVX0JBX0JBUl9DT05UUk9MX0ZPUkNFX05PX01BVENIX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfQkFfQkFSX0NPTlRST0xfQUNLX1BPTElDWV9WQUxVRV9NU0IgOQotI2RlZmluZSBNQUNfUENVX0JBX0JBUl9DT05UUk9MX0FDS19QT0xJQ1lfVkFMVUVfTFNCIDkKLSNkZWZpbmUgTUFDX1BDVV9CQV9CQVJfQ09OVFJPTF9BQ0tfUE9MSUNZX1ZBTFVFX01BU0sgMHgwMDAwMDIwMAotI2RlZmluZSBNQUNfUENVX0JBX0JBUl9DT05UUk9MX0FDS19QT0xJQ1lfVkFMVUVfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9CQV9CQVJfQ09OVFJPTF9BQ0tfUE9MSUNZX1ZBTFVFX01BU0spID4+IE1BQ19QQ1VfQkFfQkFSX0NPTlRST0xfQUNLX1BPTElDWV9WQUxVRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQkFfQkFSX0NPTlRST0xfQUNLX1BPTElDWV9WQUxVRV9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9CQV9CQVJfQ09OVFJPTF9BQ0tfUE9MSUNZX1ZBTFVFX0xTQikgJiBNQUNfUENVX0JBX0JBUl9DT05UUk9MX0FDS19QT0xJQ1lfVkFMVUVfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9CQV9CQVJfQ09OVFJPTF9DT01QUkVTU0VEX1ZBTFVFX01TQiA4Ci0jZGVmaW5lIE1BQ19QQ1VfQkFfQkFSX0NPTlRST0xfQ09NUFJFU1NFRF9WQUxVRV9MU0IgOAotI2RlZmluZSBNQUNfUENVX0JBX0JBUl9DT05UUk9MX0NPTVBSRVNTRURfVkFMVUVfTUFTSyAweDAwMDAwMTAwCi0jZGVmaW5lIE1BQ19QQ1VfQkFfQkFSX0NPTlRST0xfQ09NUFJFU1NFRF9WQUxVRV9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0JBX0JBUl9DT05UUk9MX0NPTVBSRVNTRURfVkFMVUVfTUFTSykgPj4gTUFDX1BDVV9CQV9CQVJfQ09OVFJPTF9DT01QUkVTU0VEX1ZBTFVFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9CQV9CQVJfQ09OVFJPTF9DT01QUkVTU0VEX1ZBTFVFX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0JBX0JBUl9DT05UUk9MX0NPTVBSRVNTRURfVkFMVUVfTFNCKSAmIE1BQ19QQ1VfQkFfQkFSX0NPTlRST0xfQ09NUFJFU1NFRF9WQUxVRV9NQVNLKQotI2RlZmluZSBNQUNfUENVX0JBX0JBUl9DT05UUk9MX0FDS19QT0xJQ1lfT0ZGU0VUX01TQiA3Ci0jZGVmaW5lIE1BQ19QQ1VfQkFfQkFSX0NPTlRST0xfQUNLX1BPTElDWV9PRkZTRVRfTFNCIDQKLSNkZWZpbmUgTUFDX1BDVV9CQV9CQVJfQ09OVFJPTF9BQ0tfUE9MSUNZX09GRlNFVF9NQVNLIDB4MDAwMDAwZjAKLSNkZWZpbmUgTUFDX1BDVV9CQV9CQVJfQ09OVFJPTF9BQ0tfUE9MSUNZX09GRlNFVF9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0JBX0JBUl9DT05UUk9MX0FDS19QT0xJQ1lfT0ZGU0VUX01BU0spID4+IE1BQ19QQ1VfQkFfQkFSX0NPTlRST0xfQUNLX1BPTElDWV9PRkZTRVRfTFNCKQotI2RlZmluZSBNQUNfUENVX0JBX0JBUl9DT05UUk9MX0FDS19QT0xJQ1lfT0ZGU0VUX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0JBX0JBUl9DT05UUk9MX0FDS19QT0xJQ1lfT0ZGU0VUX0xTQikgJiBNQUNfUENVX0JBX0JBUl9DT05UUk9MX0FDS19QT0xJQ1lfT0ZGU0VUX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfQkFfQkFSX0NPTlRST0xfQ09NUFJFU1NFRF9PRkZTRVRfTVNCIDMKLSNkZWZpbmUgTUFDX1BDVV9CQV9CQVJfQ09OVFJPTF9DT01QUkVTU0VEX09GRlNFVF9MU0IgMAotI2RlZmluZSBNQUNfUENVX0JBX0JBUl9DT05UUk9MX0NPTVBSRVNTRURfT0ZGU0VUX01BU0sgMHgwMDAwMDAwZgotI2RlZmluZSBNQUNfUENVX0JBX0JBUl9DT05UUk9MX0NPTVBSRVNTRURfT0ZGU0VUX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfQkFfQkFSX0NPTlRST0xfQ09NUFJFU1NFRF9PRkZTRVRfTUFTSykgPj4gTUFDX1BDVV9CQV9CQVJfQ09OVFJPTF9DT01QUkVTU0VEX09GRlNFVF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQkFfQkFSX0NPTlRST0xfQ09NUFJFU1NFRF9PRkZTRVRfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfQkFfQkFSX0NPTlRST0xfQ09NUFJFU1NFRF9PRkZTRVRfTFNCKSAmIE1BQ19QQ1VfQkFfQkFSX0NPTlRST0xfQ09NUFJFU1NFRF9PRkZTRVRfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX0xFR0FDWV9QTENQX1NQT09GX0FERFJFU1MgICAgICAgIDB4MDAwMDgxMzQKLSNkZWZpbmUgTUFDX1BDVV9MRUdBQ1lfUExDUF9TUE9PRl9PRkZTRVQgICAgICAgICAweDAwMDAwMTM0Ci0jZGVmaW5lIE1BQ19QQ1VfTEVHQUNZX1BMQ1BfU1BPT0ZfTUlOX0xFTkdUSF9NU0IgMTIKLSNkZWZpbmUgTUFDX1BDVV9MRUdBQ1lfUExDUF9TUE9PRl9NSU5fTEVOR1RIX0xTQiA4Ci0jZGVmaW5lIE1BQ19QQ1VfTEVHQUNZX1BMQ1BfU1BPT0ZfTUlOX0xFTkdUSF9NQVNLIDB4MDAwMDFmMDAKLSNkZWZpbmUgTUFDX1BDVV9MRUdBQ1lfUExDUF9TUE9PRl9NSU5fTEVOR1RIX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfTEVHQUNZX1BMQ1BfU1BPT0ZfTUlOX0xFTkdUSF9NQVNLKSA+PiBNQUNfUENVX0xFR0FDWV9QTENQX1NQT09GX01JTl9MRU5HVEhfTFNCKQotI2RlZmluZSBNQUNfUENVX0xFR0FDWV9QTENQX1NQT09GX01JTl9MRU5HVEhfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfTEVHQUNZX1BMQ1BfU1BPT0ZfTUlOX0xFTkdUSF9MU0IpICYgTUFDX1BDVV9MRUdBQ1lfUExDUF9TUE9PRl9NSU5fTEVOR1RIX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfTEVHQUNZX1BMQ1BfU1BPT0ZfRUlGU19NSU5VU19ESUZTX01TQiA3Ci0jZGVmaW5lIE1BQ19QQ1VfTEVHQUNZX1BMQ1BfU1BPT0ZfRUlGU19NSU5VU19ESUZTX0xTQiAwCi0jZGVmaW5lIE1BQ19QQ1VfTEVHQUNZX1BMQ1BfU1BPT0ZfRUlGU19NSU5VU19ESUZTX01BU0sgMHgwMDAwMDBmZgotI2RlZmluZSBNQUNfUENVX0xFR0FDWV9QTENQX1NQT09GX0VJRlNfTUlOVVNfRElGU19HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0xFR0FDWV9QTENQX1NQT09GX0VJRlNfTUlOVVNfRElGU19NQVNLKSA+PiBNQUNfUENVX0xFR0FDWV9QTENQX1NQT09GX0VJRlNfTUlOVVNfRElGU19MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfTEVHQUNZX1BMQ1BfU1BPT0ZfRUlGU19NSU5VU19ESUZTX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0xFR0FDWV9QTENQX1NQT09GX0VJRlNfTUlOVVNfRElGU19MU0IpICYgTUFDX1BDVV9MRUdBQ1lfUExDUF9TUE9PRl9FSUZTX01JTlVTX0RJRlNfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX1BIWV9FUlJPUl9NQVNLX0NPTlRfQUREUkVTUyAgICAgIDB4MDAwMDgxMzgKLSNkZWZpbmUgTUFDX1BDVV9QSFlfRVJST1JfTUFTS19DT05UX09GRlNFVCAgICAgICAweDAwMDAwMTM4Ci0jZGVmaW5lIE1BQ19QQ1VfUEhZX0VSUk9SX01BU0tfQ09OVF9FSUZTX1ZBTFVFX01TQiAyMwotI2RlZmluZSBNQUNfUENVX1BIWV9FUlJPUl9NQVNLX0NPTlRfRUlGU19WQUxVRV9MU0IgMTYKLSNkZWZpbmUgTUFDX1BDVV9QSFlfRVJST1JfTUFTS19DT05UX0VJRlNfVkFMVUVfTUFTSyAweDAwZmYwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfUEhZX0VSUk9SX01BU0tfQ09OVF9FSUZTX1ZBTFVFX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfUEhZX0VSUk9SX01BU0tfQ09OVF9FSUZTX1ZBTFVFX01BU0spID4+IE1BQ19QQ1VfUEhZX0VSUk9SX01BU0tfQ09OVF9FSUZTX1ZBTFVFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9QSFlfRVJST1JfTUFTS19DT05UX0VJRlNfVkFMVUVfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfUEhZX0VSUk9SX01BU0tfQ09OVF9FSUZTX1ZBTFVFX0xTQikgJiBNQUNfUENVX1BIWV9FUlJPUl9NQVNLX0NPTlRfRUlGU19WQUxVRV9NQVNLKQotI2RlZmluZSBNQUNfUENVX1BIWV9FUlJPUl9NQVNLX0NPTlRfTUFTS19WQUxVRV9NU0IgNwotI2RlZmluZSBNQUNfUENVX1BIWV9FUlJPUl9NQVNLX0NPTlRfTUFTS19WQUxVRV9MU0IgMAotI2RlZmluZSBNQUNfUENVX1BIWV9FUlJPUl9NQVNLX0NPTlRfTUFTS19WQUxVRV9NQVNLIDB4MDAwMDAwZmYKLSNkZWZpbmUgTUFDX1BDVV9QSFlfRVJST1JfTUFTS19DT05UX01BU0tfVkFMVUVfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9QSFlfRVJST1JfTUFTS19DT05UX01BU0tfVkFMVUVfTUFTSykgPj4gTUFDX1BDVV9QSFlfRVJST1JfTUFTS19DT05UX01BU0tfVkFMVUVfTFNCKQotI2RlZmluZSBNQUNfUENVX1BIWV9FUlJPUl9NQVNLX0NPTlRfTUFTS19WQUxVRV9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9QSFlfRVJST1JfTUFTS19DT05UX01BU0tfVkFMVUVfTFNCKSAmIE1BQ19QQ1VfUEhZX0VSUk9SX01BU0tfQ09OVF9NQVNLX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9UWF9USU1FUl9BRERSRVNTICAgICAgICAgICAgICAgICAweDAwMDA4MTNjCi0jZGVmaW5lIE1BQ19QQ1VfVFhfVElNRVJfT0ZGU0VUICAgICAgICAgICAgICAgICAgMHgwMDAwMDEzYwotI2RlZmluZSBNQUNfUENVX1RYX1RJTUVSX1FVSUVUX1RJTUVSX0VOQUJMRV9NU0IgIDI1Ci0jZGVmaW5lIE1BQ19QQ1VfVFhfVElNRVJfUVVJRVRfVElNRVJfRU5BQkxFX0xTQiAgMjUKLSNkZWZpbmUgTUFDX1BDVV9UWF9USU1FUl9RVUlFVF9USU1FUl9FTkFCTEVfTUFTSyAweDAyMDAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfVFhfVElNRVJfUVVJRVRfVElNRVJfRU5BQkxFX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfVFhfVElNRVJfUVVJRVRfVElNRVJfRU5BQkxFX01BU0spID4+IE1BQ19QQ1VfVFhfVElNRVJfUVVJRVRfVElNRVJfRU5BQkxFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9UWF9USU1FUl9RVUlFVF9USU1FUl9FTkFCTEVfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfVFhfVElNRVJfUVVJRVRfVElNRVJfRU5BQkxFX0xTQikgJiBNQUNfUENVX1RYX1RJTUVSX1FVSUVUX1RJTUVSX0VOQUJMRV9NQVNLKQotI2RlZmluZSBNQUNfUENVX1RYX1RJTUVSX1FVSUVUX1RJTUVSX01TQiAgICAgICAgIDI0Ci0jZGVmaW5lIE1BQ19QQ1VfVFhfVElNRVJfUVVJRVRfVElNRVJfTFNCICAgICAgICAgMjAKLSNkZWZpbmUgTUFDX1BDVV9UWF9USU1FUl9RVUlFVF9USU1FUl9NQVNLICAgICAgICAweDAxZjAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfVFhfVElNRVJfUVVJRVRfVElNRVJfR0VUKHgpICAgICAgKCgoeCkgJiBNQUNfUENVX1RYX1RJTUVSX1FVSUVUX1RJTUVSX01BU0spID4+IE1BQ19QQ1VfVFhfVElNRVJfUVVJRVRfVElNRVJfTFNCKQotI2RlZmluZSBNQUNfUENVX1RYX1RJTUVSX1FVSUVUX1RJTUVSX1NFVCh4KSAgICAgICgoKHgpIDw8IE1BQ19QQ1VfVFhfVElNRVJfUVVJRVRfVElNRVJfTFNCKSAmIE1BQ19QQ1VfVFhfVElNRVJfUVVJRVRfVElNRVJfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9UWF9USU1FUl9SSUZTX1RJTUVSX01TQiAgICAgICAgICAxOQotI2RlZmluZSBNQUNfUENVX1RYX1RJTUVSX1JJRlNfVElNRVJfTFNCICAgICAgICAgIDE2Ci0jZGVmaW5lIE1BQ19QQ1VfVFhfVElNRVJfUklGU19USU1FUl9NQVNLICAgICAgICAgMHgwMDBmMDAwMAotI2RlZmluZSBNQUNfUENVX1RYX1RJTUVSX1JJRlNfVElNRVJfR0VUKHgpICAgICAgICgoKHgpICYgTUFDX1BDVV9UWF9USU1FUl9SSUZTX1RJTUVSX01BU0spID4+IE1BQ19QQ1VfVFhfVElNRVJfUklGU19USU1FUl9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfVFhfVElNRVJfUklGU19USU1FUl9TRVQoeCkgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9UWF9USU1FUl9SSUZTX1RJTUVSX0xTQikgJiBNQUNfUENVX1RYX1RJTUVSX1JJRlNfVElNRVJfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9UWF9USU1FUl9UWF9USU1FUl9FTkFCTEVfTVNCICAgICAxNQotI2RlZmluZSBNQUNfUENVX1RYX1RJTUVSX1RYX1RJTUVSX0VOQUJMRV9MU0IgICAgIDE1Ci0jZGVmaW5lIE1BQ19QQ1VfVFhfVElNRVJfVFhfVElNRVJfRU5BQkxFX01BU0sgICAgMHgwMDAwODAwMAotI2RlZmluZSBNQUNfUENVX1RYX1RJTUVSX1RYX1RJTUVSX0VOQUJMRV9HRVQoeCkgICgoKHgpICYgTUFDX1BDVV9UWF9USU1FUl9UWF9USU1FUl9FTkFCTEVfTUFTSykgPj4gTUFDX1BDVV9UWF9USU1FUl9UWF9USU1FUl9FTkFCTEVfTFNCKQotI2RlZmluZSBNQUNfUENVX1RYX1RJTUVSX1RYX1RJTUVSX0VOQUJMRV9TRVQoeCkgICgoKHgpIDw8IE1BQ19QQ1VfVFhfVElNRVJfVFhfVElNRVJfRU5BQkxFX0xTQikgJiBNQUNfUENVX1RYX1RJTUVSX1RYX1RJTUVSX0VOQUJMRV9NQVNLKQotI2RlZmluZSBNQUNfUENVX1RYX1RJTUVSX1RYX1RJTUVSX01TQiAgICAgICAgICAgIDE0Ci0jZGVmaW5lIE1BQ19QQ1VfVFhfVElNRVJfVFhfVElNRVJfTFNCICAgICAgICAgICAgMAotI2RlZmluZSBNQUNfUENVX1RYX1RJTUVSX1RYX1RJTUVSX01BU0sgICAgICAgICAgIDB4MDAwMDdmZmYKLSNkZWZpbmUgTUFDX1BDVV9UWF9USU1FUl9UWF9USU1FUl9HRVQoeCkgICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfVFhfVElNRVJfVFhfVElNRVJfTUFTSykgPj4gTUFDX1BDVV9UWF9USU1FUl9UWF9USU1FUl9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfVFhfVElNRVJfVFhfVElNRVJfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9UWF9USU1FUl9UWF9USU1FUl9MU0IpICYgTUFDX1BDVV9UWF9USU1FUl9UWF9USU1FUl9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfVFhCVUZfQ1RSTF9BRERSRVNTICAgICAgICAgICAgICAgMHgwMDAwODE0MAotI2RlZmluZSBNQUNfUENVX1RYQlVGX0NUUkxfT0ZGU0VUICAgICAgICAgICAgICAgIDB4MDAwMDAxNDAKLSNkZWZpbmUgTUFDX1BDVV9UWEJVRl9DVFJMX1RYX0ZJRk9fV1JBUF9FTkFCTEVfTVNCIDE2Ci0jZGVmaW5lIE1BQ19QQ1VfVFhCVUZfQ1RSTF9UWF9GSUZPX1dSQVBfRU5BQkxFX0xTQiAxNgotI2RlZmluZSBNQUNfUENVX1RYQlVGX0NUUkxfVFhfRklGT19XUkFQX0VOQUJMRV9NQVNLIDB4MDAwMTAwMDAKLSNkZWZpbmUgTUFDX1BDVV9UWEJVRl9DVFJMX1RYX0ZJRk9fV1JBUF9FTkFCTEVfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9UWEJVRl9DVFJMX1RYX0ZJRk9fV1JBUF9FTkFCTEVfTUFTSykgPj4gTUFDX1BDVV9UWEJVRl9DVFJMX1RYX0ZJRk9fV1JBUF9FTkFCTEVfTFNCKQotI2RlZmluZSBNQUNfUENVX1RYQlVGX0NUUkxfVFhfRklGT19XUkFQX0VOQUJMRV9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9UWEJVRl9DVFJMX1RYX0ZJRk9fV1JBUF9FTkFCTEVfTFNCKSAmIE1BQ19QQ1VfVFhCVUZfQ1RSTF9UWF9GSUZPX1dSQVBfRU5BQkxFX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfVFhCVUZfQ1RSTF9VU0FCTEVfRU5UUklFU19NU0IgICAgMTEKLSNkZWZpbmUgTUFDX1BDVV9UWEJVRl9DVFJMX1VTQUJMRV9FTlRSSUVTX0xTQiAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfVFhCVUZfQ1RSTF9VU0FCTEVfRU5UUklFU19NQVNLICAgMHgwMDAwMGZmZgotI2RlZmluZSBNQUNfUENVX1RYQlVGX0NUUkxfVVNBQkxFX0VOVFJJRVNfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9UWEJVRl9DVFJMX1VTQUJMRV9FTlRSSUVTX01BU0spID4+IE1BQ19QQ1VfVFhCVUZfQ1RSTF9VU0FCTEVfRU5UUklFU19MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfVFhCVUZfQ1RSTF9VU0FCTEVfRU5UUklFU19TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9UWEJVRl9DVFJMX1VTQUJMRV9FTlRSSUVTX0xTQikgJiBNQUNfUENVX1RYQlVGX0NUUkxfVVNBQkxFX0VOVFJJRVNfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDgxNDQKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX09GRlNFVCAgICAgICAgICAgICAgICAweDAwMDAwMTQ0Ci0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9SRVNFUlZFRF8xX01TQiAgICAgICAgMzEKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX1JFU0VSVkVEXzFfTFNCICAgICAgICAyOAotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfUkVTRVJWRURfMV9NQVNLICAgICAgIDB4ZjAwMDAwMDAKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX1JFU0VSVkVEXzFfR0VUKHgpICAgICAoKCh4KSAmIE1BQ19QQ1VfTUlTQ19NT0RFMl9SRVNFUlZFRF8xX01BU0spID4+IE1BQ19QQ1VfTUlTQ19NT0RFMl9SRVNFUlZFRF8xX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX1JFU0VSVkVEXzFfU0VUKHgpICAgICAoKCh4KSA8PCBNQUNfUENVX01JU0NfTU9ERTJfUkVTRVJWRURfMV9MU0IpICYgTUFDX1BDVV9NSVNDX01PREUyX1JFU0VSVkVEXzFfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX1JDVl9USU1FU1RBTVBfRklYX01TQiAyNwotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfUkNWX1RJTUVTVEFNUF9GSVhfTFNCIDI3Ci0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9SQ1ZfVElNRVNUQU1QX0ZJWF9NQVNLIDB4MDgwMDAwMDAKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX1JDVl9USU1FU1RBTVBfRklYX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfTUlTQ19NT0RFMl9SQ1ZfVElNRVNUQU1QX0ZJWF9NQVNLKSA+PiBNQUNfUENVX01JU0NfTU9ERTJfUkNWX1RJTUVTVEFNUF9GSVhfTFNCKQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfUkNWX1RJTUVTVEFNUF9GSVhfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfTUlTQ19NT0RFMl9SQ1ZfVElNRVNUQU1QX0ZJWF9MU0IpICYgTUFDX1BDVV9NSVNDX01PREUyX1JDVl9USU1FU1RBTVBfRklYX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9CRUFDT05fRlJPTV9UT19EU19NU0IgMjYKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX0JFQUNPTl9GUk9NX1RPX0RTX0xTQiAyNgotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfQkVBQ09OX0ZST01fVE9fRFNfTUFTSyAweDA0MDAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9CRUFDT05fRlJPTV9UT19EU19HRVQoeCkgKCgoeCkgJiBNQUNfUENVX01JU0NfTU9ERTJfQkVBQ09OX0ZST01fVE9fRFNfTUFTSykgPj4gTUFDX1BDVV9NSVNDX01PREUyX0JFQUNPTl9GUk9NX1RPX0RTX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX0JFQUNPTl9GUk9NX1RPX0RTX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX01JU0NfTU9ERTJfQkVBQ09OX0ZST01fVE9fRFNfTFNCKSAmIE1BQ19QQ1VfTUlTQ19NT0RFMl9CRUFDT05fRlJPTV9UT19EU19NQVNLKQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfUE1fRklFTERfRk9SX01HTVRfTVNCIDI1Ci0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9QTV9GSUVMRF9GT1JfTUdNVF9MU0IgMjUKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX1BNX0ZJRUxEX0ZPUl9NR01UX01BU0sgMHgwMjAwMDAwMAotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfUE1fRklFTERfRk9SX01HTVRfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9NSVNDX01PREUyX1BNX0ZJRUxEX0ZPUl9NR01UX01BU0spID4+IE1BQ19QQ1VfTUlTQ19NT0RFMl9QTV9GSUVMRF9GT1JfTUdNVF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9QTV9GSUVMRF9GT1JfTUdNVF9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9NSVNDX01PREUyX1BNX0ZJRUxEX0ZPUl9NR01UX0xTQikgJiBNQUNfUENVX01JU0NfTU9ERTJfUE1fRklFTERfRk9SX01HTVRfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX1BNX0ZJRUxEX0ZPUl9EQVRfTVNCICAyNAotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfUE1fRklFTERfRk9SX0RBVF9MU0IgIDI0Ci0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9QTV9GSUVMRF9GT1JfREFUX01BU0sgMHgwMTAwMDAwMAotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfUE1fRklFTERfRk9SX0RBVF9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX01JU0NfTU9ERTJfUE1fRklFTERfRk9SX0RBVF9NQVNLKSA+PiBNQUNfUENVX01JU0NfTU9ERTJfUE1fRklFTERfRk9SX0RBVF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9QTV9GSUVMRF9GT1JfREFUX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX01JU0NfTU9ERTJfUE1fRklFTERfRk9SX0RBVF9MU0IpICYgTUFDX1BDVV9NSVNDX01PREUyX1BNX0ZJRUxEX0ZPUl9EQVRfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX0lHTk9SRV9UWE9QX0lGX1pFUk9fTVNCIDIzCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9JR05PUkVfVFhPUF9JRl9aRVJPX0xTQiAyMwotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfSUdOT1JFX1RYT1BfSUZfWkVST19NQVNLIDB4MDA4MDAwMDAKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX0lHTk9SRV9UWE9QX0lGX1pFUk9fR0VUKHgpICgoKHgpICYgTUFDX1BDVV9NSVNDX01PREUyX0lHTk9SRV9UWE9QX0lGX1pFUk9fTUFTSykgPj4gTUFDX1BDVV9NSVNDX01PREUyX0lHTk9SRV9UWE9QX0lGX1pFUk9fTFNCKQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfSUdOT1JFX1RYT1BfSUZfWkVST19TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9NSVNDX01PREUyX0lHTk9SRV9UWE9QX0lGX1pFUk9fTFNCKSAmIE1BQ19QQ1VfTUlTQ19NT0RFMl9JR05PUkVfVFhPUF9JRl9aRVJPX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9JR05PUkVfVFhPUF8xU1RfUEtUX01TQiAyMgotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfSUdOT1JFX1RYT1BfMVNUX1BLVF9MU0IgMjIKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX0lHTk9SRV9UWE9QXzFTVF9QS1RfTUFTSyAweDAwNDAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9JR05PUkVfVFhPUF8xU1RfUEtUX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfTUlTQ19NT0RFMl9JR05PUkVfVFhPUF8xU1RfUEtUX01BU0spID4+IE1BQ19QQ1VfTUlTQ19NT0RFMl9JR05PUkVfVFhPUF8xU1RfUEtUX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX0lHTk9SRV9UWE9QXzFTVF9QS1RfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfTUlTQ19NT0RFMl9JR05PUkVfVFhPUF8xU1RfUEtUX0xTQikgJiBNQUNfUENVX01JU0NfTU9ERTJfSUdOT1JFX1RYT1BfMVNUX1BLVF9NQVNLKQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfQ0xFQVJfTU9SRV9GUkFHX01TQiAgIDIxCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9DTEVBUl9NT1JFX0ZSQUdfTFNCICAgMjEKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX0NMRUFSX01PUkVfRlJBR19NQVNLICAweDAwMjAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9DTEVBUl9NT1JFX0ZSQUdfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9NSVNDX01PREUyX0NMRUFSX01PUkVfRlJBR19NQVNLKSA+PiBNQUNfUENVX01JU0NfTU9ERTJfQ0xFQVJfTU9SRV9GUkFHX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX0NMRUFSX01PUkVfRlJBR19TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9NSVNDX01PREUyX0NMRUFSX01PUkVfRlJBR19MU0IpICYgTUFDX1BDVV9NSVNDX01PREUyX0NMRUFSX01PUkVfRlJBR19NQVNLKQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfQlVHXzI4Njc2X01TQiAgICAgICAgIDIwCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9CVUdfMjg2NzZfTFNCICAgICAgICAgMjAKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX0JVR18yODY3Nl9NQVNLICAgICAgICAweDAwMTAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9CVUdfMjg2NzZfR0VUKHgpICAgICAgKCgoeCkgJiBNQUNfUENVX01JU0NfTU9ERTJfQlVHXzI4Njc2X01BU0spID4+IE1BQ19QQ1VfTUlTQ19NT0RFMl9CVUdfMjg2NzZfTFNCKQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfQlVHXzI4Njc2X1NFVCh4KSAgICAgICgoKHgpIDw8IE1BQ19QQ1VfTUlTQ19NT0RFMl9CVUdfMjg2NzZfTFNCKSAmIE1BQ19QQ1VfTUlTQ19NT0RFMl9CVUdfMjg2NzZfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX0RVUl9BQ0NPVU5UX0JZX0JBX01TQiAxOQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfRFVSX0FDQ09VTlRfQllfQkFfTFNCIDE5Ci0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9EVVJfQUNDT1VOVF9CWV9CQV9NQVNLIDB4MDAwODAwMDAKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX0RVUl9BQ0NPVU5UX0JZX0JBX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfTUlTQ19NT0RFMl9EVVJfQUNDT1VOVF9CWV9CQV9NQVNLKSA+PiBNQUNfUENVX01JU0NfTU9ERTJfRFVSX0FDQ09VTlRfQllfQkFfTFNCKQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfRFVSX0FDQ09VTlRfQllfQkFfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfTUlTQ19NT0RFMl9EVVJfQUNDT1VOVF9CWV9CQV9MU0IpICYgTUFDX1BDVV9NSVNDX01PREUyX0RVUl9BQ0NPVU5UX0JZX0JBX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9CQ19NQ19XQVBJX01PREVfTVNCICAgMTgKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX0JDX01DX1dBUElfTU9ERV9MU0IgICAxOAotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfQkNfTUNfV0FQSV9NT0RFX01BU0sgIDB4MDAwNDAwMDAKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX0JDX01DX1dBUElfTU9ERV9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX01JU0NfTU9ERTJfQkNfTUNfV0FQSV9NT0RFX01BU0spID4+IE1BQ19QQ1VfTUlTQ19NT0RFMl9CQ19NQ19XQVBJX01PREVfTFNCKQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfQkNfTUNfV0FQSV9NT0RFX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX01JU0NfTU9ERTJfQkNfTUNfV0FQSV9NT0RFX0xTQikgJiBNQUNfUENVX01JU0NfTU9ERTJfQkNfTUNfV0FQSV9NT0RFX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9BR0dfV0VQX01TQiAgICAgICAgICAgMTcKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX0FHR19XRVBfTFNCICAgICAgICAgICAxNwotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfQUdHX1dFUF9NQVNLICAgICAgICAgIDB4MDAwMjAwMDAKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX0FHR19XRVBfR0VUKHgpICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfTUlTQ19NT0RFMl9BR0dfV0VQX01BU0spID4+IE1BQ19QQ1VfTUlTQ19NT0RFMl9BR0dfV0VQX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX0FHR19XRVBfU0VUKHgpICAgICAgICAoKCh4KSA8PCBNQUNfUENVX01JU0NfTU9ERTJfQUdHX1dFUF9MU0IpICYgTUFDX1BDVV9NSVNDX01PREUyX0FHR19XRVBfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX0VOQUJMRV9MT0FEX05BVl9CRUFDT05fRFVSQVRJT05fTVNCIDE2Ci0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9FTkFCTEVfTE9BRF9OQVZfQkVBQ09OX0RVUkFUSU9OX0xTQiAxNgotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfRU5BQkxFX0xPQURfTkFWX0JFQUNPTl9EVVJBVElPTl9NQVNLIDB4MDAwMTAwMDAKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX0VOQUJMRV9MT0FEX05BVl9CRUFDT05fRFVSQVRJT05fR0VUKHgpICgoKHgpICYgTUFDX1BDVV9NSVNDX01PREUyX0VOQUJMRV9MT0FEX05BVl9CRUFDT05fRFVSQVRJT05fTUFTSykgPj4gTUFDX1BDVV9NSVNDX01PREUyX0VOQUJMRV9MT0FEX05BVl9CRUFDT05fRFVSQVRJT05fTFNCKQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfRU5BQkxFX0xPQURfTkFWX0JFQUNPTl9EVVJBVElPTl9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9NSVNDX01PREUyX0VOQUJMRV9MT0FEX05BVl9CRUFDT05fRFVSQVRJT05fTFNCKSAmIE1BQ19QQ1VfTUlTQ19NT0RFMl9FTkFCTEVfTE9BRF9OQVZfQkVBQ09OX0RVUkFUSU9OX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9NR01UX1FPU19NU0IgICAgICAgICAgMTUKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX01HTVRfUU9TX0xTQiAgICAgICAgICA4Ci0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9NR01UX1FPU19NQVNLICAgICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfTUdNVF9RT1NfR0VUKHgpICAgICAgICgoKHgpICYgTUFDX1BDVV9NSVNDX01PREUyX01HTVRfUU9TX01BU0spID4+IE1BQ19QQ1VfTUlTQ19NT0RFMl9NR01UX1FPU19MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9NR01UX1FPU19TRVQoeCkgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9NSVNDX01PREUyX01HTVRfUU9TX0xTQikgJiBNQUNfUENVX01JU0NfTU9ERTJfTUdNVF9RT1NfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX0NGUF9JR05PUkVfTVNCICAgICAgICA3Ci0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9DRlBfSUdOT1JFX0xTQiAgICAgICAgNwotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfQ0ZQX0lHTk9SRV9NQVNLICAgICAgIDB4MDAwMDAwODAKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX0NGUF9JR05PUkVfR0VUKHgpICAgICAoKCh4KSAmIE1BQ19QQ1VfTUlTQ19NT0RFMl9DRlBfSUdOT1JFX01BU0spID4+IE1BQ19QQ1VfTUlTQ19NT0RFMl9DRlBfSUdOT1JFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX0NGUF9JR05PUkVfU0VUKHgpICAgICAoKCh4KSA8PCBNQUNfUENVX01JU0NfTU9ERTJfQ0ZQX0lHTk9SRV9MU0IpICYgTUFDX1BDVV9NSVNDX01PREUyX0NGUF9JR05PUkVfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX0FESE9DX01DQVNUX0tFWUlEX0VOQUJMRV9NU0IgNgotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfQURIT0NfTUNBU1RfS0VZSURfRU5BQkxFX0xTQiA2Ci0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9BREhPQ19NQ0FTVF9LRVlJRF9FTkFCTEVfTUFTSyAweDAwMDAwMDQwCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9BREhPQ19NQ0FTVF9LRVlJRF9FTkFCTEVfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9NSVNDX01PREUyX0FESE9DX01DQVNUX0tFWUlEX0VOQUJMRV9NQVNLKSA+PiBNQUNfUENVX01JU0NfTU9ERTJfQURIT0NfTUNBU1RfS0VZSURfRU5BQkxFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX0FESE9DX01DQVNUX0tFWUlEX0VOQUJMRV9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9NSVNDX01PREUyX0FESE9DX01DQVNUX0tFWUlEX0VOQUJMRV9MU0IpICYgTUFDX1BDVV9NSVNDX01PREUyX0FESE9DX01DQVNUX0tFWUlEX0VOQUJMRV9NQVNLKQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfUkVTRVJWRURfMl9NU0IgICAgICAgIDUKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX1JFU0VSVkVEXzJfTFNCICAgICAgICA1Ci0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9SRVNFUlZFRF8yX01BU0sgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfUkVTRVJWRURfMl9HRVQoeCkgICAgICgoKHgpICYgTUFDX1BDVV9NSVNDX01PREUyX1JFU0VSVkVEXzJfTUFTSykgPj4gTUFDX1BDVV9NSVNDX01PREUyX1JFU0VSVkVEXzJfTFNCKQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfUkVTRVJWRURfMl9TRVQoeCkgICAgICgoKHgpIDw8IE1BQ19QQ1VfTUlTQ19NT0RFMl9SRVNFUlZFRF8yX0xTQikgJiBNQUNfUENVX01JU0NfTU9ERTJfUkVTRVJWRURfMl9NQVNLKQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfQlVHXzU4MDU3X0ZJWF9FTkFCTEVfTVNCIDQKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX0JVR181ODA1N19GSVhfRU5BQkxFX0xTQiA0Ci0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9CVUdfNTgwNTdfRklYX0VOQUJMRV9NQVNLIDB4MDAwMDAwMTAKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX0JVR181ODA1N19GSVhfRU5BQkxFX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfTUlTQ19NT0RFMl9CVUdfNTgwNTdfRklYX0VOQUJMRV9NQVNLKSA+PiBNQUNfUENVX01JU0NfTU9ERTJfQlVHXzU4MDU3X0ZJWF9FTkFCTEVfTFNCKQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfQlVHXzU4MDU3X0ZJWF9FTkFCTEVfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfTUlTQ19NT0RFMl9CVUdfNTgwNTdfRklYX0VOQUJMRV9MU0IpICYgTUFDX1BDVV9NSVNDX01PREUyX0JVR181ODA1N19GSVhfRU5BQkxFX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9SRVNFUlZFRF8wX01TQiAgICAgICAgMwotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfUkVTRVJWRURfMF9MU0IgICAgICAgIDMKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX1JFU0VSVkVEXzBfTUFTSyAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9SRVNFUlZFRF8wX0dFVCh4KSAgICAgKCgoeCkgJiBNQUNfUENVX01JU0NfTU9ERTJfUkVTRVJWRURfMF9NQVNLKSA+PiBNQUNfUENVX01JU0NfTU9ERTJfUkVTRVJWRURfMF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9SRVNFUlZFRF8wX1NFVCh4KSAgICAgKCgoeCkgPDwgTUFDX1BDVV9NSVNDX01PREUyX1JFU0VSVkVEXzBfTFNCKSAmIE1BQ19QQ1VfTUlTQ19NT0RFMl9SRVNFUlZFRF8wX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9OT19DUllQVE9fRk9SX05PTl9EQVRBX1BLVF9NU0IgMgotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfTk9fQ1JZUFRPX0ZPUl9OT05fREFUQV9QS1RfTFNCIDIKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX05PX0NSWVBUT19GT1JfTk9OX0RBVEFfUEtUX01BU0sgMHgwMDAwMDAwNAotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfTk9fQ1JZUFRPX0ZPUl9OT05fREFUQV9QS1RfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9NSVNDX01PREUyX05PX0NSWVBUT19GT1JfTk9OX0RBVEFfUEtUX01BU0spID4+IE1BQ19QQ1VfTUlTQ19NT0RFMl9OT19DUllQVE9fRk9SX05PTl9EQVRBX1BLVF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9OT19DUllQVE9fRk9SX05PTl9EQVRBX1BLVF9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9NSVNDX01PREUyX05PX0NSWVBUT19GT1JfTk9OX0RBVEFfUEtUX0xTQikgJiBNQUNfUENVX01JU0NfTU9ERTJfTk9fQ1JZUFRPX0ZPUl9OT05fREFUQV9QS1RfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX01HTVRfQ1JZUFRPX0VOQUJMRV9NU0IgMQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfTUdNVF9DUllQVE9fRU5BQkxFX0xTQiAxCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9NR01UX0NSWVBUT19FTkFCTEVfTUFTSyAweDAwMDAwMDAyCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9NR01UX0NSWVBUT19FTkFCTEVfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9NSVNDX01PREUyX01HTVRfQ1JZUFRPX0VOQUJMRV9NQVNLKSA+PiBNQUNfUENVX01JU0NfTU9ERTJfTUdNVF9DUllQVE9fRU5BQkxFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX01HTVRfQ1JZUFRPX0VOQUJMRV9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9NSVNDX01PREUyX01HTVRfQ1JZUFRPX0VOQUJMRV9MU0IpICYgTUFDX1BDVV9NSVNDX01PREUyX01HTVRfQ1JZUFRPX0VOQUJMRV9NQVNLKQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfQlVHXzIxNTMyX0ZJWF9FTkFCTEVfTVNCIDAKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX0JVR18yMTUzMl9GSVhfRU5BQkxFX0xTQiAwCi0jZGVmaW5lIE1BQ19QQ1VfTUlTQ19NT0RFMl9CVUdfMjE1MzJfRklYX0VOQUJMRV9NQVNLIDB4MDAwMDAwMDEKLSNkZWZpbmUgTUFDX1BDVV9NSVNDX01PREUyX0JVR18yMTUzMl9GSVhfRU5BQkxFX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfTUlTQ19NT0RFMl9CVUdfMjE1MzJfRklYX0VOQUJMRV9NQVNLKSA+PiBNQUNfUENVX01JU0NfTU9ERTJfQlVHXzIxNTMyX0ZJWF9FTkFCTEVfTFNCKQotI2RlZmluZSBNQUNfUENVX01JU0NfTU9ERTJfQlVHXzIxNTMyX0ZJWF9FTkFCTEVfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfTUlTQ19NT0RFMl9CVUdfMjE1MzJfRklYX0VOQUJMRV9MU0IpICYgTUFDX1BDVV9NSVNDX01PREUyX0JVR18yMTUzMl9GSVhfRU5BQkxFX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9BTFRfQUVTX01VVEVfTUFTS19BRERSRVNTICAgICAgICAweDAwMDA4MTQ4Ci0jZGVmaW5lIE1BQ19QQ1VfQUxUX0FFU19NVVRFX01BU0tfT0ZGU0VUICAgICAgICAgMHgwMDAwMDE0OAotI2RlZmluZSBNQUNfUENVX0FMVF9BRVNfTVVURV9NQVNLX1FPU19NU0IgICAgICAgIDMxCi0jZGVmaW5lIE1BQ19QQ1VfQUxUX0FFU19NVVRFX01BU0tfUU9TX0xTQiAgICAgICAgMTYKLSNkZWZpbmUgTUFDX1BDVV9BTFRfQUVTX01VVEVfTUFTS19RT1NfTUFTSyAgICAgICAweGZmZmYwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfQUxUX0FFU19NVVRFX01BU0tfUU9TX0dFVCh4KSAgICAgKCgoeCkgJiBNQUNfUENVX0FMVF9BRVNfTVVURV9NQVNLX1FPU19NQVNLKSA+PiBNQUNfUENVX0FMVF9BRVNfTVVURV9NQVNLX1FPU19MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQUxUX0FFU19NVVRFX01BU0tfUU9TX1NFVCh4KSAgICAgKCgoeCkgPDwgTUFDX1BDVV9BTFRfQUVTX01VVEVfTUFTS19RT1NfTFNCKSAmIE1BQ19QQ1VfQUxUX0FFU19NVVRFX01BU0tfUU9TX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9BWklNVVRIX1RJTUVfU1RBTVBfQUREUkVTUyAgICAgICAweDAwMDA4MTRjCi0jZGVmaW5lIE1BQ19QQ1VfQVpJTVVUSF9USU1FX1NUQU1QX09GRlNFVCAgICAgICAgMHgwMDAwMDE0YwotI2RlZmluZSBNQUNfUENVX0FaSU1VVEhfVElNRV9TVEFNUF9WQUxVRV9NU0IgICAgIDMxCi0jZGVmaW5lIE1BQ19QQ1VfQVpJTVVUSF9USU1FX1NUQU1QX1ZBTFVFX0xTQiAgICAgMAotI2RlZmluZSBNQUNfUENVX0FaSU1VVEhfVElNRV9TVEFNUF9WQUxVRV9NQVNLICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgTUFDX1BDVV9BWklNVVRIX1RJTUVfU1RBTVBfVkFMVUVfR0VUKHgpICAoKCh4KSAmIE1BQ19QQ1VfQVpJTVVUSF9USU1FX1NUQU1QX1ZBTFVFX01BU0spID4+IE1BQ19QQ1VfQVpJTVVUSF9USU1FX1NUQU1QX1ZBTFVFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9BWklNVVRIX1RJTUVfU1RBTVBfVkFMVUVfU0VUKHgpICAoKCh4KSA8PCBNQUNfUENVX0FaSU1VVEhfVElNRV9TVEFNUF9WQUxVRV9MU0IpICYgTUFDX1BDVV9BWklNVVRIX1RJTUVfU1RBTVBfVkFMVUVfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX01BWF9DRlBfRFVSX0FERFJFU1MgICAgICAgICAgICAgIDB4MDAwMDgxNTAKLSNkZWZpbmUgTUFDX1BDVV9NQVhfQ0ZQX0RVUl9PRkZTRVQgICAgICAgICAgICAgICAweDAwMDAwMTUwCi0jZGVmaW5lIE1BQ19QQ1VfTUFYX0NGUF9EVVJfVVNFQ19GUkFDX0RFTk9NSU5BVE9SX01TQiA3Ci0jZGVmaW5lIE1BQ19QQ1VfTUFYX0NGUF9EVVJfVVNFQ19GUkFDX0RFTk9NSU5BVE9SX0xTQiA0Ci0jZGVmaW5lIE1BQ19QQ1VfTUFYX0NGUF9EVVJfVVNFQ19GUkFDX0RFTk9NSU5BVE9SX01BU0sgMHgwMDAwMDBmMAotI2RlZmluZSBNQUNfUENVX01BWF9DRlBfRFVSX1VTRUNfRlJBQ19ERU5PTUlOQVRPUl9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX01BWF9DRlBfRFVSX1VTRUNfRlJBQ19ERU5PTUlOQVRPUl9NQVNLKSA+PiBNQUNfUENVX01BWF9DRlBfRFVSX1VTRUNfRlJBQ19ERU5PTUlOQVRPUl9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfTUFYX0NGUF9EVVJfVVNFQ19GUkFDX0RFTk9NSU5BVE9SX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX01BWF9DRlBfRFVSX1VTRUNfRlJBQ19ERU5PTUlOQVRPUl9MU0IpICYgTUFDX1BDVV9NQVhfQ0ZQX0RVUl9VU0VDX0ZSQUNfREVOT01JTkFUT1JfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9NQVhfQ0ZQX0RVUl9VU0VDX0ZSQUNfTlVNRVJBVE9SX01TQiAzCi0jZGVmaW5lIE1BQ19QQ1VfTUFYX0NGUF9EVVJfVVNFQ19GUkFDX05VTUVSQVRPUl9MU0IgMAotI2RlZmluZSBNQUNfUENVX01BWF9DRlBfRFVSX1VTRUNfRlJBQ19OVU1FUkFUT1JfTUFTSyAweDAwMDAwMDBmCi0jZGVmaW5lIE1BQ19QQ1VfTUFYX0NGUF9EVVJfVVNFQ19GUkFDX05VTUVSQVRPUl9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX01BWF9DRlBfRFVSX1VTRUNfRlJBQ19OVU1FUkFUT1JfTUFTSykgPj4gTUFDX1BDVV9NQVhfQ0ZQX0RVUl9VU0VDX0ZSQUNfTlVNRVJBVE9SX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9NQVhfQ0ZQX0RVUl9VU0VDX0ZSQUNfTlVNRVJBVE9SX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX01BWF9DRlBfRFVSX1VTRUNfRlJBQ19OVU1FUkFUT1JfTFNCKSAmIE1BQ19QQ1VfTUFYX0NGUF9EVVJfVVNFQ19GUkFDX05VTUVSQVRPUl9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfSENGX1RJTUVPVVRfQUREUkVTUyAgICAgICAgICAgICAgMHgwMDAwODE1NAotI2RlZmluZSBNQUNfUENVX0hDRl9USU1FT1VUX09GRlNFVCAgICAgICAgICAgICAgIDB4MDAwMDAxNTQKLSNkZWZpbmUgTUFDX1BDVV9IQ0ZfVElNRU9VVF9WQUxVRV9NU0IgICAgICAgICAgICAxNQotI2RlZmluZSBNQUNfUENVX0hDRl9USU1FT1VUX1ZBTFVFX0xTQiAgICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9IQ0ZfVElNRU9VVF9WQUxVRV9NQVNLICAgICAgICAgICAweDAwMDBmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfSENGX1RJTUVPVVRfVkFMVUVfR0VUKHgpICAgICAgICAgKCgoeCkgJiBNQUNfUENVX0hDRl9USU1FT1VUX1ZBTFVFX01BU0spID4+IE1BQ19QQ1VfSENGX1RJTUVPVVRfVkFMVUVfTFNCKQotI2RlZmluZSBNQUNfUENVX0hDRl9USU1FT1VUX1ZBTFVFX1NFVCh4KSAgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfSENGX1RJTUVPVVRfVkFMVUVfTFNCKSAmIE1BQ19QQ1VfSENGX1RJTUVPVVRfVkFMVUVfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9XRUlHSFRTMl9BRERSRVNTICAgICAgIDB4MDAwMDgxNTgKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfV0VJR0hUUzJfT0ZGU0VUICAgICAgICAweDAwMDAwMTU4Ci0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX1dFSUdIVFMyX1dMX1dFSUdIVF9DT05URF9NU0IgMzEKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfV0VJR0hUUzJfV0xfV0VJR0hUX0NPTlREX0xTQiAxNgotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9XRUlHSFRTMl9XTF9XRUlHSFRfQ09OVERfTUFTSyAweGZmZmYwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX1dFSUdIVFMyX1dMX1dFSUdIVF9DT05URF9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0JMVUVUT09USF9XRUlHSFRTMl9XTF9XRUlHSFRfQ09OVERfTUFTSykgPj4gTUFDX1BDVV9CTFVFVE9PVEhfV0VJR0hUUzJfV0xfV0VJR0hUX0NPTlREX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfV0VJR0hUUzJfV0xfV0VJR0hUX0NPTlREX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0JMVUVUT09USF9XRUlHSFRTMl9XTF9XRUlHSFRfQ09OVERfTFNCKSAmIE1BQ19QQ1VfQkxVRVRPT1RIX1dFSUdIVFMyX1dMX1dFSUdIVF9DT05URF9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX1RTRl9CVF9BQ1RJVkVfQUREUkVTUyAgMHgwMDAwODE1YwotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9UU0ZfQlRfQUNUSVZFX09GRlNFVCAgIDB4MDAwMDAxNWMKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfVFNGX0JUX0FDVElWRV9WQUxVRV9NU0IgMzEKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfVFNGX0JUX0FDVElWRV9WQUxVRV9MU0IgMAotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9UU0ZfQlRfQUNUSVZFX1ZBTFVFX01BU0sgMHhmZmZmZmZmZgotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9UU0ZfQlRfQUNUSVZFX1ZBTFVFX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfQkxVRVRPT1RIX1RTRl9CVF9BQ1RJVkVfVkFMVUVfTUFTSykgPj4gTUFDX1BDVV9CTFVFVE9PVEhfVFNGX0JUX0FDVElWRV9WQUxVRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX1RTRl9CVF9BQ1RJVkVfVkFMVUVfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfQkxVRVRPT1RIX1RTRl9CVF9BQ1RJVkVfVkFMVUVfTFNCKSAmIE1BQ19QQ1VfQkxVRVRPT1RIX1RTRl9CVF9BQ1RJVkVfVkFMVUVfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9UU0ZfQlRfUFJJT1JJVFlfQUREUkVTUyAweDAwMDA4MTYwCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX1RTRl9CVF9QUklPUklUWV9PRkZTRVQgMHgwMDAwMDE2MAotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9UU0ZfQlRfUFJJT1JJVFlfVkFMVUVfTVNCIDMxCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX1RTRl9CVF9QUklPUklUWV9WQUxVRV9MU0IgMAotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9UU0ZfQlRfUFJJT1JJVFlfVkFMVUVfTUFTSyAweGZmZmZmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX1RTRl9CVF9QUklPUklUWV9WQUxVRV9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0JMVUVUT09USF9UU0ZfQlRfUFJJT1JJVFlfVkFMVUVfTUFTSykgPj4gTUFDX1BDVV9CTFVFVE9PVEhfVFNGX0JUX1BSSU9SSVRZX1ZBTFVFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfVFNGX0JUX1BSSU9SSVRZX1ZBTFVFX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0JMVUVUT09USF9UU0ZfQlRfUFJJT1JJVFlfVkFMVUVfTFNCKSAmIE1BQ19QQ1VfQkxVRVRPT1RIX1RTRl9CVF9QUklPUklUWV9WQUxVRV9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUzX0FERFJFU1MgICAgICAgICAgMHgwMDAwODE2NAotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFM19PRkZTRVQgICAgICAgICAgIDB4MDAwMDAxNjQKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfQlRfUFJJT1JJVFlfRVhURU5EX1RIUkVTX01TQiAzMQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFM19CVF9QUklPUklUWV9FWFRFTkRfVEhSRVNfTFNCIDI4Ci0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUzX0JUX1BSSU9SSVRZX0VYVEVORF9USFJFU19NQVNLIDB4ZjAwMDAwMDAKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfQlRfUFJJT1JJVFlfRVhURU5EX1RIUkVTX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUzX0JUX1BSSU9SSVRZX0VYVEVORF9USFJFU19NQVNLKSA+PiBNQUNfUENVX0JMVUVUT09USF9NT0RFM19CVF9QUklPUklUWV9FWFRFTkRfVEhSRVNfTFNCKQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFM19CVF9QUklPUklUWV9FWFRFTkRfVEhSRVNfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfQkxVRVRPT1RIX01PREUzX0JUX1BSSU9SSVRZX0VYVEVORF9USFJFU19MU0IpICYgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfQlRfUFJJT1JJVFlfRVhURU5EX1RIUkVTX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUzX0JUX1RYX09OX0VOX01TQiAgMjcKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfQlRfVFhfT05fRU5fTFNCICAyNwotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFM19CVF9UWF9PTl9FTl9NQVNLIDB4MDgwMDAwMDAKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfQlRfVFhfT05fRU5fR0VUKHgpICgoKHgpICYgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfQlRfVFhfT05fRU5fTUFTSykgPj4gTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfQlRfVFhfT05fRU5fTFNCKQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFM19CVF9UWF9PTl9FTl9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfQlRfVFhfT05fRU5fTFNCKSAmIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUzX0JUX1RYX09OX0VOX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUzX1NMT1RfU0xPUF9NU0IgICAgMjYKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfU0xPVF9TTE9QX0xTQiAgICAyNQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFM19TTE9UX1NMT1BfTUFTSyAgIDB4MDYwMDAwMDAKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfU0xPVF9TTE9QX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUzX1NMT1RfU0xPUF9NQVNLKSA+PiBNQUNfUENVX0JMVUVUT09USF9NT0RFM19TTE9UX1NMT1BfTFNCKQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFM19TTE9UX1NMT1BfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfQkxVRVRPT1RIX01PREUzX1NMT1RfU0xPUF9MU0IpICYgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfU0xPVF9TTE9QX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUzX0RZTkFNSUNfVE9HR0xFX1dMQV9FTl9NU0IgMjQKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfRFlOQU1JQ19UT0dHTEVfV0xBX0VOX0xTQiAyNAotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFM19EWU5BTUlDX1RPR0dMRV9XTEFfRU5fTUFTSyAweDAxMDAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUzX0RZTkFNSUNfVE9HR0xFX1dMQV9FTl9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0JMVUVUT09USF9NT0RFM19EWU5BTUlDX1RPR0dMRV9XTEFfRU5fTUFTSykgPj4gTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfRFlOQU1JQ19UT0dHTEVfV0xBX0VOX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfRFlOQU1JQ19UT0dHTEVfV0xBX0VOX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0JMVUVUT09USF9NT0RFM19EWU5BTUlDX1RPR0dMRV9XTEFfRU5fTFNCKSAmIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUzX0RZTkFNSUNfVE9HR0xFX1dMQV9FTl9NQVNLKQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFM19EWU5BTUlDX1BSSV9FTl9NU0IgMjMKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfRFlOQU1JQ19QUklfRU5fTFNCIDIzCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUzX0RZTkFNSUNfUFJJX0VOX01BU0sgMHgwMDgwMDAwMAotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFM19EWU5BTUlDX1BSSV9FTl9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0JMVUVUT09USF9NT0RFM19EWU5BTUlDX1BSSV9FTl9NQVNLKSA+PiBNQUNfUENVX0JMVUVUT09USF9NT0RFM19EWU5BTUlDX1BSSV9FTl9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUzX0RZTkFNSUNfUFJJX0VOX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0JMVUVUT09USF9NT0RFM19EWU5BTUlDX1BSSV9FTl9MU0IpICYgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfRFlOQU1JQ19QUklfRU5fTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfUkZHQUlOX0xPQ0tfU1JDX01TQiAyMgotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFM19SRkdBSU5fTE9DS19TUkNfTFNCIDIyCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUzX1JGR0FJTl9MT0NLX1NSQ19NQVNLIDB4MDA0MDAwMDAKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfUkZHQUlOX0xPQ0tfU1JDX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUzX1JGR0FJTl9MT0NLX1NSQ19NQVNLKSA+PiBNQUNfUENVX0JMVUVUT09USF9NT0RFM19SRkdBSU5fTE9DS19TUkNfTFNCKQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFM19SRkdBSU5fTE9DS19TUkNfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfQkxVRVRPT1RIX01PREUzX1JGR0FJTl9MT0NLX1NSQ19MU0IpICYgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfUkZHQUlOX0xPQ0tfU1JDX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUzX1dMX1BSSU9SSVRZX09GRlNFVF9FTl9NU0IgMjEKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfV0xfUFJJT1JJVFlfT0ZGU0VUX0VOX0xTQiAyMQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFM19XTF9QUklPUklUWV9PRkZTRVRfRU5fTUFTSyAweDAwMjAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUzX1dMX1BSSU9SSVRZX09GRlNFVF9FTl9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0JMVUVUT09USF9NT0RFM19XTF9QUklPUklUWV9PRkZTRVRfRU5fTUFTSykgPj4gTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfV0xfUFJJT1JJVFlfT0ZGU0VUX0VOX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfV0xfUFJJT1JJVFlfT0ZGU0VUX0VOX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0JMVUVUT09USF9NT0RFM19XTF9QUklPUklUWV9PRkZTRVRfRU5fTFNCKSAmIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUzX1dMX1BSSU9SSVRZX09GRlNFVF9FTl9NQVNLKQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFM19TSEFSRURfUlhfTVNCICAgIDIwCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUzX1NIQVJFRF9SWF9MU0IgICAgMjAKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfU0hBUkVEX1JYX01BU0sgICAweDAwMTAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUzX1NIQVJFRF9SWF9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0JMVUVUT09USF9NT0RFM19TSEFSRURfUlhfTUFTSykgPj4gTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfU0hBUkVEX1JYX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfU0hBUkVEX1JYX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0JMVUVUT09USF9NT0RFM19TSEFSRURfUlhfTFNCKSAmIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUzX1NIQVJFRF9SWF9NQVNLKQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFM19BTExPV19DT05DVVJSRU5UX0FDQ0VTU19NU0IgMTkKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfQUxMT1dfQ09OQ1VSUkVOVF9BQ0NFU1NfTFNCIDE2Ci0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUzX0FMTE9XX0NPTkNVUlJFTlRfQUNDRVNTX01BU0sgMHgwMDBmMDAwMAotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFM19BTExPV19DT05DVVJSRU5UX0FDQ0VTU19HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0JMVUVUT09USF9NT0RFM19BTExPV19DT05DVVJSRU5UX0FDQ0VTU19NQVNLKSA+PiBNQUNfUENVX0JMVUVUT09USF9NT0RFM19BTExPV19DT05DVVJSRU5UX0FDQ0VTU19MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUzX0FMTE9XX0NPTkNVUlJFTlRfQUNDRVNTX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0JMVUVUT09USF9NT0RFM19BTExPV19DT05DVVJSRU5UX0FDQ0VTU19MU0IpICYgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfQUxMT1dfQ09OQ1VSUkVOVF9BQ0NFU1NfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfV0xfUUNfVElNRV9NU0IgICAxNQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFM19XTF9RQ19USU1FX0xTQiAgIDgKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfV0xfUUNfVElNRV9NQVNLICAweDAwMDBmZjAwCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUzX1dMX1FDX1RJTUVfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfV0xfUUNfVElNRV9NQVNLKSA+PiBNQUNfUENVX0JMVUVUT09USF9NT0RFM19XTF9RQ19USU1FX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfV0xfUUNfVElNRV9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfV0xfUUNfVElNRV9MU0IpICYgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfV0xfUUNfVElNRV9NQVNLKQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFM19XTF9BQ1RJVkVfVElNRV9NU0IgNwotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFM19XTF9BQ1RJVkVfVElNRV9MU0IgMAotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFM19XTF9BQ1RJVkVfVElNRV9NQVNLIDB4MDAwMDAwZmYKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfV0xfQUNUSVZFX1RJTUVfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfV0xfQUNUSVZFX1RJTUVfTUFTSykgPj4gTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfV0xfQUNUSVZFX1RJTUVfTFNCKQotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFM19XTF9BQ1RJVkVfVElNRV9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTNfV0xfQUNUSVZFX1RJTUVfTFNCKSAmIE1BQ19QQ1VfQkxVRVRPT1RIX01PREUzX1dMX0FDVElWRV9USU1FX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTRfQUREUkVTUyAgICAgICAgICAweDAwMDA4MTY4Ci0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREU0X09GRlNFVCAgICAgICAgICAgMHgwMDAwMDE2OAotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFNF9CVF9QUklPUklUWV9FWFRFTkRfTVNCIDMxCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREU0X0JUX1BSSU9SSVRZX0VYVEVORF9MU0IgMTYKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTRfQlRfUFJJT1JJVFlfRVhURU5EX01BU0sgMHhmZmZmMDAwMAotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFNF9CVF9QUklPUklUWV9FWFRFTkRfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTRfQlRfUFJJT1JJVFlfRVhURU5EX01BU0spID4+IE1BQ19QQ1VfQkxVRVRPT1RIX01PREU0X0JUX1BSSU9SSVRZX0VYVEVORF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREU0X0JUX1BSSU9SSVRZX0VYVEVORF9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTRfQlRfUFJJT1JJVFlfRVhURU5EX0xTQikgJiBNQUNfUENVX0JMVUVUT09USF9NT0RFNF9CVF9QUklPUklUWV9FWFRFTkRfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTRfQlRfQUNUSVZFX0VYVEVORF9NU0IgMTUKLSNkZWZpbmUgTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTRfQlRfQUNUSVZFX0VYVEVORF9MU0IgMAotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFNF9CVF9BQ1RJVkVfRVhURU5EX01BU0sgMHgwMDAwZmZmZgotI2RlZmluZSBNQUNfUENVX0JMVUVUT09USF9NT0RFNF9CVF9BQ1RJVkVfRVhURU5EX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfQkxVRVRPT1RIX01PREU0X0JUX0FDVElWRV9FWFRFTkRfTUFTSykgPj4gTUFDX1BDVV9CTFVFVE9PVEhfTU9ERTRfQlRfQUNUSVZFX0VYVEVORF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQkxVRVRPT1RIX01PREU0X0JUX0FDVElWRV9FWFRFTkRfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfQkxVRVRPT1RIX01PREU0X0JUX0FDVElWRV9FWFRFTkRfTFNCKSAmIE1BQ19QQ1VfQkxVRVRPT1RIX01PREU0X0JUX0FDVElWRV9FWFRFTkRfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX0JUX0JUX0FERFJFU1MgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgyMDAKLSNkZWZpbmUgTUFDX1BDVV9CVF9CVF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCi0jZGVmaW5lIE1BQ19QQ1VfQlRfQlRfV0VJR0hUX01TQiAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgTUFDX1BDVV9CVF9CVF9XRUlHSFRfTFNCICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfQlRfQlRfV0VJR0hUX01BU0sgICAgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBNQUNfUENVX0JUX0JUX1dFSUdIVF9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgTUFDX1BDVV9CVF9CVF9XRUlHSFRfTUFTSykgPj4gTUFDX1BDVV9CVF9CVF9XRUlHSFRfTFNCKQotI2RlZmluZSBNQUNfUENVX0JUX0JUX1dFSUdIVF9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfQlRfQlRfV0VJR0hUX0xTQikgJiBNQUNfUENVX0JUX0JUX1dFSUdIVF9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfQlRfQlRfQVNZTkNfQUREUkVTUyAgICAgICAgICAgICAgMHgwMDAwODMwMAotI2RlZmluZSBNQUNfUENVX0JUX0JUX0FTWU5DX09GRlNFVCAgICAgICAgICAgICAgIDB4MDAwMDAzMDAKLSNkZWZpbmUgTUFDX1BDVV9CVF9CVF9BU1lOQ19SWExQX1dFSUdIVF9NU0IgICAgICAxNQotI2RlZmluZSBNQUNfUENVX0JUX0JUX0FTWU5DX1JYTFBfV0VJR0hUX0xTQiAgICAgIDEyCi0jZGVmaW5lIE1BQ19QQ1VfQlRfQlRfQVNZTkNfUlhMUF9XRUlHSFRfTUFTSyAgICAgMHgwMDAwZjAwMAotI2RlZmluZSBNQUNfUENVX0JUX0JUX0FTWU5DX1JYTFBfV0VJR0hUX0dFVCh4KSAgICgoKHgpICYgTUFDX1BDVV9CVF9CVF9BU1lOQ19SWExQX1dFSUdIVF9NQVNLKSA+PiBNQUNfUENVX0JUX0JUX0FTWU5DX1JYTFBfV0VJR0hUX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9CVF9CVF9BU1lOQ19SWExQX1dFSUdIVF9TRVQoeCkgICAoKCh4KSA8PCBNQUNfUENVX0JUX0JUX0FTWU5DX1JYTFBfV0VJR0hUX0xTQikgJiBNQUNfUENVX0JUX0JUX0FTWU5DX1JYTFBfV0VJR0hUX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfQlRfQlRfQVNZTkNfUlhIUF9XRUlHSFRfTVNCICAgICAgMTEKLSNkZWZpbmUgTUFDX1BDVV9CVF9CVF9BU1lOQ19SWEhQX1dFSUdIVF9MU0IgICAgICA4Ci0jZGVmaW5lIE1BQ19QQ1VfQlRfQlRfQVNZTkNfUlhIUF9XRUlHSFRfTUFTSyAgICAgMHgwMDAwMGYwMAotI2RlZmluZSBNQUNfUENVX0JUX0JUX0FTWU5DX1JYSFBfV0VJR0hUX0dFVCh4KSAgICgoKHgpICYgTUFDX1BDVV9CVF9CVF9BU1lOQ19SWEhQX1dFSUdIVF9NQVNLKSA+PiBNQUNfUENVX0JUX0JUX0FTWU5DX1JYSFBfV0VJR0hUX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9CVF9CVF9BU1lOQ19SWEhQX1dFSUdIVF9TRVQoeCkgICAoKCh4KSA8PCBNQUNfUENVX0JUX0JUX0FTWU5DX1JYSFBfV0VJR0hUX0xTQikgJiBNQUNfUENVX0JUX0JUX0FTWU5DX1JYSFBfV0VJR0hUX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfQlRfQlRfQVNZTkNfVFhMUF9XRUlHSFRfTVNCICAgICAgNwotI2RlZmluZSBNQUNfUENVX0JUX0JUX0FTWU5DX1RYTFBfV0VJR0hUX0xTQiAgICAgIDQKLSNkZWZpbmUgTUFDX1BDVV9CVF9CVF9BU1lOQ19UWExQX1dFSUdIVF9NQVNLICAgICAweDAwMDAwMGYwCi0jZGVmaW5lIE1BQ19QQ1VfQlRfQlRfQVNZTkNfVFhMUF9XRUlHSFRfR0VUKHgpICAgKCgoeCkgJiBNQUNfUENVX0JUX0JUX0FTWU5DX1RYTFBfV0VJR0hUX01BU0spID4+IE1BQ19QQ1VfQlRfQlRfQVNZTkNfVFhMUF9XRUlHSFRfTFNCKQotI2RlZmluZSBNQUNfUENVX0JUX0JUX0FTWU5DX1RYTFBfV0VJR0hUX1NFVCh4KSAgICgoKHgpIDw8IE1BQ19QQ1VfQlRfQlRfQVNZTkNfVFhMUF9XRUlHSFRfTFNCKSAmIE1BQ19QQ1VfQlRfQlRfQVNZTkNfVFhMUF9XRUlHSFRfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9CVF9CVF9BU1lOQ19UWEhQX1dFSUdIVF9NU0IgICAgICAzCi0jZGVmaW5lIE1BQ19QQ1VfQlRfQlRfQVNZTkNfVFhIUF9XRUlHSFRfTFNCICAgICAgMAotI2RlZmluZSBNQUNfUENVX0JUX0JUX0FTWU5DX1RYSFBfV0VJR0hUX01BU0sgICAgIDB4MDAwMDAwMGYKLSNkZWZpbmUgTUFDX1BDVV9CVF9CVF9BU1lOQ19UWEhQX1dFSUdIVF9HRVQoeCkgICAoKCh4KSAmIE1BQ19QQ1VfQlRfQlRfQVNZTkNfVFhIUF9XRUlHSFRfTUFTSykgPj4gTUFDX1BDVV9CVF9CVF9BU1lOQ19UWEhQX1dFSUdIVF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQlRfQlRfQVNZTkNfVFhIUF9XRUlHSFRfU0VUKHgpICAgKCgoeCkgPDwgTUFDX1BDVV9CVF9CVF9BU1lOQ19UWEhQX1dFSUdIVF9MU0IpICYgTUFDX1BDVV9CVF9CVF9BU1lOQ19UWEhQX1dFSUdIVF9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfQlRfV0xfMV9BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwODMwNAotI2RlZmluZSBNQUNfUENVX0JUX1dMXzFfT0ZGU0VUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDQKLSNkZWZpbmUgTUFDX1BDVV9CVF9XTF8xX1dFSUdIVF9NU0IgICAgICAgICAgICAgICAzMQotI2RlZmluZSBNQUNfUENVX0JUX1dMXzFfV0VJR0hUX0xTQiAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9CVF9XTF8xX1dFSUdIVF9NQVNLICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfQlRfV0xfMV9XRUlHSFRfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBNQUNfUENVX0JUX1dMXzFfV0VJR0hUX01BU0spID4+IE1BQ19QQ1VfQlRfV0xfMV9XRUlHSFRfTFNCKQotI2RlZmluZSBNQUNfUENVX0JUX1dMXzFfV0VJR0hUX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfQlRfV0xfMV9XRUlHSFRfTFNCKSAmIE1BQ19QQ1VfQlRfV0xfMV9XRUlHSFRfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX0JUX1dMXzJfQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4MDAwMDgzMDgKLSNkZWZpbmUgTUFDX1BDVV9CVF9XTF8yX09GRlNFVCAgICAgICAgICAgICAgICAgICAweDAwMDAwMzA4Ci0jZGVmaW5lIE1BQ19QQ1VfQlRfV0xfMl9XRUlHSFRfTVNCICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgTUFDX1BDVV9CVF9XTF8yX1dFSUdIVF9MU0IgICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfQlRfV0xfMl9XRUlHSFRfTUFTSyAgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBNQUNfUENVX0JUX1dMXzJfV0VJR0hUX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgTUFDX1BDVV9CVF9XTF8yX1dFSUdIVF9NQVNLKSA+PiBNQUNfUENVX0JUX1dMXzJfV0VJR0hUX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9CVF9XTF8yX1dFSUdIVF9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBNQUNfUENVX0JUX1dMXzJfV0VJR0hUX0xTQikgJiBNQUNfUENVX0JUX1dMXzJfV0VJR0hUX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9CVF9XTF8zX0FERFJFU1MgICAgICAgICAgICAgICAgICAweDAwMDA4MzBjCi0jZGVmaW5lIE1BQ19QQ1VfQlRfV0xfM19PRkZTRVQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwYwotI2RlZmluZSBNQUNfUENVX0JUX1dMXzNfV0VJR0hUX01TQiAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIE1BQ19QQ1VfQlRfV0xfM19XRUlHSFRfTFNCICAgICAgICAgICAgICAgMAotI2RlZmluZSBNQUNfUENVX0JUX1dMXzNfV0VJR0hUX01BU0sgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgTUFDX1BDVV9CVF9XTF8zX1dFSUdIVF9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfQlRfV0xfM19XRUlHSFRfTUFTSykgPj4gTUFDX1BDVV9CVF9XTF8zX1dFSUdIVF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQlRfV0xfM19XRUlHSFRfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9CVF9XTF8zX1dFSUdIVF9MU0IpICYgTUFDX1BDVV9CVF9XTF8zX1dFSUdIVF9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfQlRfV0xfNF9BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwODMxMAotI2RlZmluZSBNQUNfUENVX0JUX1dMXzRfT0ZGU0VUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMTAKLSNkZWZpbmUgTUFDX1BDVV9CVF9XTF80X1dFSUdIVF9NU0IgICAgICAgICAgICAgICAzMQotI2RlZmluZSBNQUNfUENVX0JUX1dMXzRfV0VJR0hUX0xTQiAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9CVF9XTF80X1dFSUdIVF9NQVNLICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfQlRfV0xfNF9XRUlHSFRfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBNQUNfUENVX0JUX1dMXzRfV0VJR0hUX01BU0spID4+IE1BQ19QQ1VfQlRfV0xfNF9XRUlHSFRfTFNCKQotI2RlZmluZSBNQUNfUENVX0JUX1dMXzRfV0VJR0hUX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfQlRfV0xfNF9XRUlHSFRfTFNCKSAmIE1BQ19QQ1VfQlRfV0xfNF9XRUlHSFRfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX0NPRVhfRVBUQV9BRERSRVNTICAgICAgICAgICAgICAgIDB4MDAwMDgzMTQKLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0VQVEFfT0ZGU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMzE0Ci0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9FUFRBX1dUX0lEWF9NU0IgICAgICAgICAgICAgMTIKLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0VQVEFfV1RfSURYX0xTQiAgICAgICAgICAgICA2Ci0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9FUFRBX1dUX0lEWF9NQVNLICAgICAgICAgICAgMHgwMDAwMWZjMAotI2RlZmluZSBNQUNfUENVX0NPRVhfRVBUQV9XVF9JRFhfR0VUKHgpICAgICAgICAgICgoKHgpICYgTUFDX1BDVV9DT0VYX0VQVEFfV1RfSURYX01BU0spID4+IE1BQ19QQ1VfQ09FWF9FUFRBX1dUX0lEWF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9FUFRBX1dUX0lEWF9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9DT0VYX0VQVEFfV1RfSURYX0xTQikgJiBNQUNfUENVX0NPRVhfRVBUQV9XVF9JRFhfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0VQVEFfTElOS0lEX01TQiAgICAgICAgICAgICA1Ci0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9FUFRBX0xJTktJRF9MU0IgICAgICAgICAgICAgMAotI2RlZmluZSBNQUNfUENVX0NPRVhfRVBUQV9MSU5LSURfTUFTSyAgICAgICAgICAgIDB4MDAwMDAwM2YKLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0VQVEFfTElOS0lEX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfQ09FWF9FUFRBX0xJTktJRF9NQVNLKSA+PiBNQUNfUENVX0NPRVhfRVBUQV9MSU5LSURfTFNCKQotI2RlZmluZSBNQUNfUENVX0NPRVhfRVBUQV9MSU5LSURfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfQ09FWF9FUFRBX0xJTktJRF9MU0IpICYgTUFDX1BDVV9DT0VYX0VQVEFfTElOS0lEX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4xX0FERFJFU1MgICAgICAgICAweDAwMDA4MzE4Ci0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOMV9PRkZTRVQgICAgICAgICAgMHgwMDAwMDMxOAotI2RlZmluZSBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjFfTUFYR0FJTjRfTVNCICAgIDMxCi0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOMV9NQVhHQUlONF9MU0IgICAgMjQKLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4xX01BWEdBSU40X01BU0sgICAweGZmMDAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOMV9NQVhHQUlONF9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjFfTUFYR0FJTjRfTUFTSykgPj4gTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4xX01BWEdBSU40X0xTQikKLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4xX01BWEdBSU40X1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjFfTUFYR0FJTjRfTFNCKSAmIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOMV9NQVhHQUlONF9NQVNLKQotI2RlZmluZSBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjFfTUFYR0FJTjNfTVNCICAgIDIzCi0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOMV9NQVhHQUlOM19MU0IgICAgMTYKLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4xX01BWEdBSU4zX01BU0sgICAweDAwZmYwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOMV9NQVhHQUlOM19HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjFfTUFYR0FJTjNfTUFTSykgPj4gTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4xX01BWEdBSU4zX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4xX01BWEdBSU4zX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjFfTUFYR0FJTjNfTFNCKSAmIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOMV9NQVhHQUlOM19NQVNLKQotI2RlZmluZSBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjFfTUFYR0FJTjJfTVNCICAgIDE1Ci0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOMV9NQVhHQUlOMl9MU0IgICAgOAotI2RlZmluZSBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjFfTUFYR0FJTjJfTUFTSyAgIDB4MDAwMGZmMDAKLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4xX01BWEdBSU4yX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOMV9NQVhHQUlOMl9NQVNLKSA+PiBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjFfTUFYR0FJTjJfTFNCKQotI2RlZmluZSBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjFfTUFYR0FJTjJfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOMV9NQVhHQUlOMl9MU0IpICYgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4xX01BWEdBSU4yX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOMV9NQVhHQUlOMV9NU0IgICAgNwotI2RlZmluZSBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjFfTUFYR0FJTjFfTFNCICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4xX01BWEdBSU4xX01BU0sgICAweDAwMDAwMGZmCi0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOMV9NQVhHQUlOMV9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjFfTUFYR0FJTjFfTUFTSykgPj4gTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4xX01BWEdBSU4xX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4xX01BWEdBSU4xX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjFfTUFYR0FJTjFfTFNCKSAmIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOMV9NQVhHQUlOMV9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOMl9BRERSRVNTICAgICAgICAgMHgwMDAwODMxYwotI2RlZmluZSBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjJfT0ZGU0VUICAgICAgICAgIDB4MDAwMDAzMWMKLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4yX01BWEdBSU40X01TQiAgICAzMQotI2RlZmluZSBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjJfTUFYR0FJTjRfTFNCICAgIDI0Ci0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOMl9NQVhHQUlONF9NQVNLICAgMHhmZjAwMDAwMAotI2RlZmluZSBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjJfTUFYR0FJTjRfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4yX01BWEdBSU40X01BU0spID4+IE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOMl9NQVhHQUlONF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOMl9NQVhHQUlONF9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4yX01BWEdBSU40X0xTQikgJiBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjJfTUFYR0FJTjRfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4yX01BWEdBSU4zX01TQiAgICAyMwotI2RlZmluZSBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjJfTUFYR0FJTjNfTFNCICAgIDE2Ci0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOMl9NQVhHQUlOM19NQVNLICAgMHgwMGZmMDAwMAotI2RlZmluZSBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjJfTUFYR0FJTjNfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4yX01BWEdBSU4zX01BU0spID4+IE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOMl9NQVhHQUlOM19MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOMl9NQVhHQUlOM19TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4yX01BWEdBSU4zX0xTQikgJiBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjJfTUFYR0FJTjNfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4yX01BWEdBSU4yX01TQiAgICAxNQotI2RlZmluZSBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjJfTUFYR0FJTjJfTFNCICAgIDgKLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4yX01BWEdBSU4yX01BU0sgICAweDAwMDBmZjAwCi0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOMl9NQVhHQUlOMl9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjJfTUFYR0FJTjJfTUFTSykgPj4gTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4yX01BWEdBSU4yX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4yX01BWEdBSU4yX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjJfTUFYR0FJTjJfTFNCKSAmIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOMl9NQVhHQUlOMl9NQVNLKQotI2RlZmluZSBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjJfTUFYR0FJTjFfTVNCICAgIDcKLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4yX01BWEdBSU4xX0xTQiAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOMl9NQVhHQUlOMV9NQVNLICAgMHgwMDAwMDBmZgotI2RlZmluZSBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjJfTUFYR0FJTjFfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4yX01BWEdBSU4xX01BU0spID4+IE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOMl9NQVhHQUlOMV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOMl9NQVhHQUlOMV9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4yX01BWEdBSU4xX0xTQikgJiBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjJfTUFYR0FJTjFfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjNfQUREUkVTUyAgICAgICAgIDB4MDAwMDgzMjAKLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4zX09GRlNFVCAgICAgICAgICAweDAwMDAwMzIwCi0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOM19NQVhHQUlONF9NU0IgICAgMzEKLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4zX01BWEdBSU40X0xTQiAgICAyNAotI2RlZmluZSBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjNfTUFYR0FJTjRfTUFTSyAgIDB4ZmYwMDAwMDAKLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4zX01BWEdBSU40X0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOM19NQVhHQUlONF9NQVNLKSA+PiBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjNfTUFYR0FJTjRfTFNCKQotI2RlZmluZSBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjNfTUFYR0FJTjRfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOM19NQVhHQUlONF9MU0IpICYgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4zX01BWEdBSU40X01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOM19NQVhHQUlOM19NU0IgICAgMjMKLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4zX01BWEdBSU4zX0xTQiAgICAxNgotI2RlZmluZSBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjNfTUFYR0FJTjNfTUFTSyAgIDB4MDBmZjAwMDAKLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4zX01BWEdBSU4zX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOM19NQVhHQUlOM19NQVNLKSA+PiBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjNfTUFYR0FJTjNfTFNCKQotI2RlZmluZSBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjNfTUFYR0FJTjNfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOM19NQVhHQUlOM19MU0IpICYgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4zX01BWEdBSU4zX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOM19NQVhHQUlOMl9NU0IgICAgMTUKLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4zX01BWEdBSU4yX0xTQiAgICA4Ci0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOM19NQVhHQUlOMl9NQVNLICAgMHgwMDAwZmYwMAotI2RlZmluZSBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjNfTUFYR0FJTjJfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4zX01BWEdBSU4yX01BU0spID4+IE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOM19NQVhHQUlOMl9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOM19NQVhHQUlOMl9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4zX01BWEdBSU4yX0xTQikgJiBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjNfTUFYR0FJTjJfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4zX01BWEdBSU4xX01TQiAgICA3Ci0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOM19NQVhHQUlOMV9MU0IgICAgMAotI2RlZmluZSBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjNfTUFYR0FJTjFfTUFTSyAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4zX01BWEdBSU4xX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOM19NQVhHQUlOMV9NQVNLKSA+PiBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjNfTUFYR0FJTjFfTFNCKQotI2RlZmluZSBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjNfTUFYR0FJTjFfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlOM19NQVhHQUlOMV9MU0IpICYgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU4zX01BWEdBSU4xX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU40X0FERFJFU1MgICAgICAgICAweDAwMDA4MzI0Ci0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlONF9PRkZTRVQgICAgICAgICAgMHgwMDAwMDMyNAotI2RlZmluZSBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjRfTUFYR0FJTjRfTVNCICAgIDMxCi0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlONF9NQVhHQUlONF9MU0IgICAgMjQKLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU40X01BWEdBSU40X01BU0sgICAweGZmMDAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlONF9NQVhHQUlONF9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjRfTUFYR0FJTjRfTUFTSykgPj4gTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU40X01BWEdBSU40X0xTQikKLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU40X01BWEdBSU40X1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjRfTUFYR0FJTjRfTFNCKSAmIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlONF9NQVhHQUlONF9NQVNLKQotI2RlZmluZSBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjRfTUFYR0FJTjNfTVNCICAgIDIzCi0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlONF9NQVhHQUlOM19MU0IgICAgMTYKLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU40X01BWEdBSU4zX01BU0sgICAweDAwZmYwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlONF9NQVhHQUlOM19HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjRfTUFYR0FJTjNfTUFTSykgPj4gTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU40X01BWEdBSU4zX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU40X01BWEdBSU4zX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjRfTUFYR0FJTjNfTFNCKSAmIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlONF9NQVhHQUlOM19NQVNLKQotI2RlZmluZSBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjRfTUFYR0FJTjJfTVNCICAgIDE1Ci0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlONF9NQVhHQUlOMl9MU0IgICAgOAotI2RlZmluZSBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjRfTUFYR0FJTjJfTUFTSyAgIDB4MDAwMGZmMDAKLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU40X01BWEdBSU4yX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlONF9NQVhHQUlOMl9NQVNLKSA+PiBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjRfTUFYR0FJTjJfTFNCKQotI2RlZmluZSBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjRfTUFYR0FJTjJfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlONF9NQVhHQUlOMl9MU0IpICYgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU40X01BWEdBSU4yX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlONF9NQVhHQUlOMV9NU0IgICAgNwotI2RlZmluZSBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjRfTUFYR0FJTjFfTFNCICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU40X01BWEdBSU4xX01BU0sgICAweDAwMDAwMGZmCi0jZGVmaW5lIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlONF9NQVhHQUlOMV9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjRfTUFYR0FJTjFfTUFTSykgPj4gTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU40X01BWEdBSU4xX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9DT0VYX0xOQU1BWEdBSU40X01BWEdBSU4xX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0NPRVhfTE5BTUFYR0FJTjRfTUFYR0FJTjFfTFNCKSAmIE1BQ19QQ1VfQ09FWF9MTkFNQVhHQUlONF9NQVhHQUlOMV9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfQkFTSUNfUkFURV9TRVQwX0FERFJFU1MgICAgICAgICAgMHgwMDAwODMyOAotI2RlZmluZSBNQUNfUENVX0JBU0lDX1JBVEVfU0VUMF9PRkZTRVQgICAgICAgICAgIDB4MDAwMDAzMjgKLSNkZWZpbmUgTUFDX1BDVV9CQVNJQ19SQVRFX1NFVDBfVkFMVUVfTVNCICAgICAgICAyOQotI2RlZmluZSBNQUNfUENVX0JBU0lDX1JBVEVfU0VUMF9WQUxVRV9MU0IgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9CQVNJQ19SQVRFX1NFVDBfVkFMVUVfTUFTSyAgICAgICAweDNmZmZmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfQkFTSUNfUkFURV9TRVQwX1ZBTFVFX0dFVCh4KSAgICAgKCgoeCkgJiBNQUNfUENVX0JBU0lDX1JBVEVfU0VUMF9WQUxVRV9NQVNLKSA+PiBNQUNfUENVX0JBU0lDX1JBVEVfU0VUMF9WQUxVRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQkFTSUNfUkFURV9TRVQwX1ZBTFVFX1NFVCh4KSAgICAgKCgoeCkgPDwgTUFDX1BDVV9CQVNJQ19SQVRFX1NFVDBfVkFMVUVfTFNCKSAmIE1BQ19QQ1VfQkFTSUNfUkFURV9TRVQwX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9CQVNJQ19SQVRFX1NFVDFfQUREUkVTUyAgICAgICAgICAweDAwMDA4MzJjCi0jZGVmaW5lIE1BQ19QQ1VfQkFTSUNfUkFURV9TRVQxX09GRlNFVCAgICAgICAgICAgMHgwMDAwMDMyYwotI2RlZmluZSBNQUNfUENVX0JBU0lDX1JBVEVfU0VUMV9WQUxVRV9NU0IgICAgICAgIDI5Ci0jZGVmaW5lIE1BQ19QQ1VfQkFTSUNfUkFURV9TRVQxX1ZBTFVFX0xTQiAgICAgICAgMAotI2RlZmluZSBNQUNfUENVX0JBU0lDX1JBVEVfU0VUMV9WQUxVRV9NQVNLICAgICAgIDB4M2ZmZmZmZmYKLSNkZWZpbmUgTUFDX1BDVV9CQVNJQ19SQVRFX1NFVDFfVkFMVUVfR0VUKHgpICAgICAoKCh4KSAmIE1BQ19QQ1VfQkFTSUNfUkFURV9TRVQxX1ZBTFVFX01BU0spID4+IE1BQ19QQ1VfQkFTSUNfUkFURV9TRVQxX1ZBTFVFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9CQVNJQ19SQVRFX1NFVDFfVkFMVUVfU0VUKHgpICAgICAoKCh4KSA8PCBNQUNfUENVX0JBU0lDX1JBVEVfU0VUMV9WQUxVRV9MU0IpICYgTUFDX1BDVV9CQVNJQ19SQVRFX1NFVDFfVkFMVUVfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX0JBU0lDX1JBVEVfU0VUMl9BRERSRVNTICAgICAgICAgIDB4MDAwMDgzMzAKLSNkZWZpbmUgTUFDX1BDVV9CQVNJQ19SQVRFX1NFVDJfT0ZGU0VUICAgICAgICAgICAweDAwMDAwMzMwCi0jZGVmaW5lIE1BQ19QQ1VfQkFTSUNfUkFURV9TRVQyX1ZBTFVFX01TQiAgICAgICAgMjkKLSNkZWZpbmUgTUFDX1BDVV9CQVNJQ19SQVRFX1NFVDJfVkFMVUVfTFNCICAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfQkFTSUNfUkFURV9TRVQyX1ZBTFVFX01BU0sgICAgICAgMHgzZmZmZmZmZgotI2RlZmluZSBNQUNfUENVX0JBU0lDX1JBVEVfU0VUMl9WQUxVRV9HRVQoeCkgICAgICgoKHgpICYgTUFDX1BDVV9CQVNJQ19SQVRFX1NFVDJfVkFMVUVfTUFTSykgPj4gTUFDX1BDVV9CQVNJQ19SQVRFX1NFVDJfVkFMVUVfTFNCKQotI2RlZmluZSBNQUNfUENVX0JBU0lDX1JBVEVfU0VUMl9WQUxVRV9TRVQoeCkgICAgICgoKHgpIDw8IE1BQ19QQ1VfQkFTSUNfUkFURV9TRVQyX1ZBTFVFX0xTQikgJiBNQUNfUENVX0JBU0lDX1JBVEVfU0VUMl9WQUxVRV9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfQkFTSUNfUkFURV9TRVQzX0FERFJFU1MgICAgICAgICAgMHgwMDAwODMzNAotI2RlZmluZSBNQUNfUENVX0JBU0lDX1JBVEVfU0VUM19PRkZTRVQgICAgICAgICAgIDB4MDAwMDAzMzQKLSNkZWZpbmUgTUFDX1BDVV9CQVNJQ19SQVRFX1NFVDNfVkFMVUVfTVNCICAgICAgICAyNAotI2RlZmluZSBNQUNfUENVX0JBU0lDX1JBVEVfU0VUM19WQUxVRV9MU0IgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9CQVNJQ19SQVRFX1NFVDNfVkFMVUVfTUFTSyAgICAgICAweDAxZmZmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfQkFTSUNfUkFURV9TRVQzX1ZBTFVFX0dFVCh4KSAgICAgKCgoeCkgJiBNQUNfUENVX0JBU0lDX1JBVEVfU0VUM19WQUxVRV9NQVNLKSA+PiBNQUNfUENVX0JBU0lDX1JBVEVfU0VUM19WQUxVRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQkFTSUNfUkFURV9TRVQzX1ZBTFVFX1NFVCh4KSAgICAgKCgoeCkgPDwgTUFDX1BDVV9CQVNJQ19SQVRFX1NFVDNfVkFMVUVfTFNCKSAmIE1BQ19QQ1VfQkFTSUNfUkFURV9TRVQzX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9SWF9JTlRfU1RBVFVTMF9BRERSRVNTICAgICAgICAgICAweDAwMDA4MzM4Ci0jZGVmaW5lIE1BQ19QQ1VfUlhfSU5UX1NUQVRVUzBfT0ZGU0VUICAgICAgICAgICAgMHgwMDAwMDMzOAotI2RlZmluZSBNQUNfUENVX1JYX0lOVF9TVEFUVVMwX0RVUkFUSU9OX0hfTVNCICAgIDMxCi0jZGVmaW5lIE1BQ19QQ1VfUlhfSU5UX1NUQVRVUzBfRFVSQVRJT05fSF9MU0IgICAgMjQKLSNkZWZpbmUgTUFDX1BDVV9SWF9JTlRfU1RBVFVTMF9EVVJBVElPTl9IX01BU0sgICAweGZmMDAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfUlhfSU5UX1NUQVRVUzBfRFVSQVRJT05fSF9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX1JYX0lOVF9TVEFUVVMwX0RVUkFUSU9OX0hfTUFTSykgPj4gTUFDX1BDVV9SWF9JTlRfU1RBVFVTMF9EVVJBVElPTl9IX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9SWF9JTlRfU1RBVFVTMF9EVVJBVElPTl9IX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX1JYX0lOVF9TVEFUVVMwX0RVUkFUSU9OX0hfTFNCKSAmIE1BQ19QQ1VfUlhfSU5UX1NUQVRVUzBfRFVSQVRJT05fSF9NQVNLKQotI2RlZmluZSBNQUNfUENVX1JYX0lOVF9TVEFUVVMwX0RVUkFUSU9OX0xfTVNCICAgIDIzCi0jZGVmaW5lIE1BQ19QQ1VfUlhfSU5UX1NUQVRVUzBfRFVSQVRJT05fTF9MU0IgICAgMTYKLSNkZWZpbmUgTUFDX1BDVV9SWF9JTlRfU1RBVFVTMF9EVVJBVElPTl9MX01BU0sgICAweDAwZmYwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfUlhfSU5UX1NUQVRVUzBfRFVSQVRJT05fTF9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX1JYX0lOVF9TVEFUVVMwX0RVUkFUSU9OX0xfTUFTSykgPj4gTUFDX1BDVV9SWF9JTlRfU1RBVFVTMF9EVVJBVElPTl9MX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9SWF9JTlRfU1RBVFVTMF9EVVJBVElPTl9MX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX1JYX0lOVF9TVEFUVVMwX0RVUkFUSU9OX0xfTFNCKSAmIE1BQ19QQ1VfUlhfSU5UX1NUQVRVUzBfRFVSQVRJT05fTF9NQVNLKQotI2RlZmluZSBNQUNfUENVX1JYX0lOVF9TVEFUVVMwX0ZSQU1FX0NPTlRST0xfSF9NU0IgMTUKLSNkZWZpbmUgTUFDX1BDVV9SWF9JTlRfU1RBVFVTMF9GUkFNRV9DT05UUk9MX0hfTFNCIDgKLSNkZWZpbmUgTUFDX1BDVV9SWF9JTlRfU1RBVFVTMF9GUkFNRV9DT05UUk9MX0hfTUFTSyAweDAwMDBmZjAwCi0jZGVmaW5lIE1BQ19QQ1VfUlhfSU5UX1NUQVRVUzBfRlJBTUVfQ09OVFJPTF9IX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfUlhfSU5UX1NUQVRVUzBfRlJBTUVfQ09OVFJPTF9IX01BU0spID4+IE1BQ19QQ1VfUlhfSU5UX1NUQVRVUzBfRlJBTUVfQ09OVFJPTF9IX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9SWF9JTlRfU1RBVFVTMF9GUkFNRV9DT05UUk9MX0hfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfUlhfSU5UX1NUQVRVUzBfRlJBTUVfQ09OVFJPTF9IX0xTQikgJiBNQUNfUENVX1JYX0lOVF9TVEFUVVMwX0ZSQU1FX0NPTlRST0xfSF9NQVNLKQotI2RlZmluZSBNQUNfUENVX1JYX0lOVF9TVEFUVVMwX0ZSQU1FX0NPTlRST0xfTF9NU0IgNwotI2RlZmluZSBNQUNfUENVX1JYX0lOVF9TVEFUVVMwX0ZSQU1FX0NPTlRST0xfTF9MU0IgMAotI2RlZmluZSBNQUNfUENVX1JYX0lOVF9TVEFUVVMwX0ZSQU1FX0NPTlRST0xfTF9NQVNLIDB4MDAwMDAwZmYKLSNkZWZpbmUgTUFDX1BDVV9SWF9JTlRfU1RBVFVTMF9GUkFNRV9DT05UUk9MX0xfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9SWF9JTlRfU1RBVFVTMF9GUkFNRV9DT05UUk9MX0xfTUFTSykgPj4gTUFDX1BDVV9SWF9JTlRfU1RBVFVTMF9GUkFNRV9DT05UUk9MX0xfTFNCKQotI2RlZmluZSBNQUNfUENVX1JYX0lOVF9TVEFUVVMwX0ZSQU1FX0NPTlRST0xfTF9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9SWF9JTlRfU1RBVFVTMF9GUkFNRV9DT05UUk9MX0xfTFNCKSAmIE1BQ19QQ1VfUlhfSU5UX1NUQVRVUzBfRlJBTUVfQ09OVFJPTF9MX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9SWF9JTlRfU1RBVFVTMV9BRERSRVNTICAgICAgICAgICAweDAwMDA4MzNjCi0jZGVmaW5lIE1BQ19QQ1VfUlhfSU5UX1NUQVRVUzFfT0ZGU0VUICAgICAgICAgICAgMHgwMDAwMDMzYwotI2RlZmluZSBNQUNfUENVX1JYX0lOVF9TVEFUVVMxX1ZBTFVFX01TQiAgICAgICAgIDE3Ci0jZGVmaW5lIE1BQ19QQ1VfUlhfSU5UX1NUQVRVUzFfVkFMVUVfTFNCICAgICAgICAgMAotI2RlZmluZSBNQUNfUENVX1JYX0lOVF9TVEFUVVMxX1ZBTFVFX01BU0sgICAgICAgIDB4MDAwM2ZmZmYKLSNkZWZpbmUgTUFDX1BDVV9SWF9JTlRfU1RBVFVTMV9WQUxVRV9HRVQoeCkgICAgICAoKCh4KSAmIE1BQ19QQ1VfUlhfSU5UX1NUQVRVUzFfVkFMVUVfTUFTSykgPj4gTUFDX1BDVV9SWF9JTlRfU1RBVFVTMV9WQUxVRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfUlhfSU5UX1NUQVRVUzFfVkFMVUVfU0VUKHgpICAgICAgKCgoeCkgPDwgTUFDX1BDVV9SWF9JTlRfU1RBVFVTMV9WQUxVRV9MU0IpICYgTUFDX1BDVV9SWF9JTlRfU1RBVFVTMV9WQUxVRV9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfUlhfSU5UX1NUQVRVUzJfQUREUkVTUyAgICAgICAgICAgMHgwMDAwODM0MAotI2RlZmluZSBNQUNfUENVX1JYX0lOVF9TVEFUVVMyX09GRlNFVCAgICAgICAgICAgIDB4MDAwMDAzNDAKLSNkZWZpbmUgTUFDX1BDVV9SWF9JTlRfU1RBVFVTMl9WQUxVRV9NU0IgICAgICAgICAyNgotI2RlZmluZSBNQUNfUENVX1JYX0lOVF9TVEFUVVMyX1ZBTFVFX0xTQiAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9SWF9JTlRfU1RBVFVTMl9WQUxVRV9NQVNLICAgICAgICAweDA3ZmZmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfUlhfSU5UX1NUQVRVUzJfVkFMVUVfR0VUKHgpICAgICAgKCgoeCkgJiBNQUNfUENVX1JYX0lOVF9TVEFUVVMyX1ZBTFVFX01BU0spID4+IE1BQ19QQ1VfUlhfSU5UX1NUQVRVUzJfVkFMVUVfTFNCKQotI2RlZmluZSBNQUNfUENVX1JYX0lOVF9TVEFUVVMyX1ZBTFVFX1NFVCh4KSAgICAgICgoKHgpIDw8IE1BQ19QQ1VfUlhfSU5UX1NUQVRVUzJfVkFMVUVfTFNCKSAmIE1BQ19QQ1VfUlhfSU5UX1NUQVRVUzJfVkFMVUVfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX1JYX0lOVF9TVEFUVVMzX0FERFJFU1MgICAgICAgICAgIDB4MDAwMDgzNDQKLSNkZWZpbmUgTUFDX1BDVV9SWF9JTlRfU1RBVFVTM19PRkZTRVQgICAgICAgICAgICAweDAwMDAwMzQ0Ci0jZGVmaW5lIE1BQ19QQ1VfUlhfSU5UX1NUQVRVUzNfVkFMVUVfTVNCICAgICAgICAgMjMKLSNkZWZpbmUgTUFDX1BDVV9SWF9JTlRfU1RBVFVTM19WQUxVRV9MU0IgICAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfUlhfSU5UX1NUQVRVUzNfVkFMVUVfTUFTSyAgICAgICAgMHgwMGZmZmZmZgotI2RlZmluZSBNQUNfUENVX1JYX0lOVF9TVEFUVVMzX1ZBTFVFX0dFVCh4KSAgICAgICgoKHgpICYgTUFDX1BDVV9SWF9JTlRfU1RBVFVTM19WQUxVRV9NQVNLKSA+PiBNQUNfUENVX1JYX0lOVF9TVEFUVVMzX1ZBTFVFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9SWF9JTlRfU1RBVFVTM19WQUxVRV9TRVQoeCkgICAgICAoKCh4KSA8PCBNQUNfUENVX1JYX0lOVF9TVEFUVVMzX1ZBTFVFX0xTQikgJiBNQUNfUENVX1JYX0lOVF9TVEFUVVMzX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgSFRfSEFMRl9HSV9SQVRFMV9BRERSRVNTICAgICAgICAgICAgICAgICAweDAwMDA4MzQ4Ci0jZGVmaW5lIEhUX0hBTEZfR0lfUkFURTFfT0ZGU0VUICAgICAgICAgICAgICAgICAgMHgwMDAwMDM0OAotI2RlZmluZSBIVF9IQUxGX0dJX1JBVEUxX01DUzNfTVNCICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIEhUX0hBTEZfR0lfUkFURTFfTUNTM19MU0IgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgSFRfSEFMRl9HSV9SQVRFMV9NQ1MzX01BU0sgICAgICAgICAgICAgICAweGZmMDAwMDAwCi0jZGVmaW5lIEhUX0hBTEZfR0lfUkFURTFfTUNTM19HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBIVF9IQUxGX0dJX1JBVEUxX01DUzNfTUFTSykgPj4gSFRfSEFMRl9HSV9SQVRFMV9NQ1MzX0xTQikKLSNkZWZpbmUgSFRfSEFMRl9HSV9SQVRFMV9NQ1MzX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBIVF9IQUxGX0dJX1JBVEUxX01DUzNfTFNCKSAmIEhUX0hBTEZfR0lfUkFURTFfTUNTM19NQVNLKQotI2RlZmluZSBIVF9IQUxGX0dJX1JBVEUxX01DUzJfTVNCICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIEhUX0hBTEZfR0lfUkFURTFfTUNTMl9MU0IgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgSFRfSEFMRl9HSV9SQVRFMV9NQ1MyX01BU0sgICAgICAgICAgICAgICAweDAwZmYwMDAwCi0jZGVmaW5lIEhUX0hBTEZfR0lfUkFURTFfTUNTMl9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBIVF9IQUxGX0dJX1JBVEUxX01DUzJfTUFTSykgPj4gSFRfSEFMRl9HSV9SQVRFMV9NQ1MyX0xTQikKLSNkZWZpbmUgSFRfSEFMRl9HSV9SQVRFMV9NQ1MyX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBIVF9IQUxGX0dJX1JBVEUxX01DUzJfTFNCKSAmIEhUX0hBTEZfR0lfUkFURTFfTUNTMl9NQVNLKQotI2RlZmluZSBIVF9IQUxGX0dJX1JBVEUxX01DUzFfTVNCICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIEhUX0hBTEZfR0lfUkFURTFfTUNTMV9MU0IgICAgICAgICAgICAgICAgOAotI2RlZmluZSBIVF9IQUxGX0dJX1JBVEUxX01DUzFfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMGZmMDAKLSNkZWZpbmUgSFRfSEFMRl9HSV9SQVRFMV9NQ1MxX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIEhUX0hBTEZfR0lfUkFURTFfTUNTMV9NQVNLKSA+PiBIVF9IQUxGX0dJX1JBVEUxX01DUzFfTFNCKQotI2RlZmluZSBIVF9IQUxGX0dJX1JBVEUxX01DUzFfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IEhUX0hBTEZfR0lfUkFURTFfTUNTMV9MU0IpICYgSFRfSEFMRl9HSV9SQVRFMV9NQ1MxX01BU0spCi0jZGVmaW5lIEhUX0hBTEZfR0lfUkFURTFfTUNTMF9NU0IgICAgICAgICAgICAgICAgNwotI2RlZmluZSBIVF9IQUxGX0dJX1JBVEUxX01DUzBfTFNCICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgSFRfSEFMRl9HSV9SQVRFMV9NQ1MwX01BU0sgICAgICAgICAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIEhUX0hBTEZfR0lfUkFURTFfTUNTMF9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBIVF9IQUxGX0dJX1JBVEUxX01DUzBfTUFTSykgPj4gSFRfSEFMRl9HSV9SQVRFMV9NQ1MwX0xTQikKLSNkZWZpbmUgSFRfSEFMRl9HSV9SQVRFMV9NQ1MwX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBIVF9IQUxGX0dJX1JBVEUxX01DUzBfTFNCKSAmIEhUX0hBTEZfR0lfUkFURTFfTUNTMF9NQVNLKQotCi0jZGVmaW5lIEhUX0hBTEZfR0lfUkFURTJfQUREUkVTUyAgICAgICAgICAgICAgICAgMHgwMDAwODM0YwotI2RlZmluZSBIVF9IQUxGX0dJX1JBVEUyX09GRlNFVCAgICAgICAgICAgICAgICAgIDB4MDAwMDAzNGMKLSNkZWZpbmUgSFRfSEFMRl9HSV9SQVRFMl9NQ1M3X01TQiAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBIVF9IQUxGX0dJX1JBVEUyX01DUzdfTFNCICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIEhUX0hBTEZfR0lfUkFURTJfTUNTN19NQVNLICAgICAgICAgICAgICAgMHhmZjAwMDAwMAotI2RlZmluZSBIVF9IQUxGX0dJX1JBVEUyX01DUzdfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgSFRfSEFMRl9HSV9SQVRFMl9NQ1M3X01BU0spID4+IEhUX0hBTEZfR0lfUkFURTJfTUNTN19MU0IpCi0jZGVmaW5lIEhUX0hBTEZfR0lfUkFURTJfTUNTN19TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgSFRfSEFMRl9HSV9SQVRFMl9NQ1M3X0xTQikgJiBIVF9IQUxGX0dJX1JBVEUyX01DUzdfTUFTSykKLSNkZWZpbmUgSFRfSEFMRl9HSV9SQVRFMl9NQ1M2X01TQiAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBIVF9IQUxGX0dJX1JBVEUyX01DUzZfTFNCICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIEhUX0hBTEZfR0lfUkFURTJfTUNTNl9NQVNLICAgICAgICAgICAgICAgMHgwMGZmMDAwMAotI2RlZmluZSBIVF9IQUxGX0dJX1JBVEUyX01DUzZfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgSFRfSEFMRl9HSV9SQVRFMl9NQ1M2X01BU0spID4+IEhUX0hBTEZfR0lfUkFURTJfTUNTNl9MU0IpCi0jZGVmaW5lIEhUX0hBTEZfR0lfUkFURTJfTUNTNl9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgSFRfSEFMRl9HSV9SQVRFMl9NQ1M2X0xTQikgJiBIVF9IQUxGX0dJX1JBVEUyX01DUzZfTUFTSykKLSNkZWZpbmUgSFRfSEFMRl9HSV9SQVRFMl9NQ1M1X01TQiAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBIVF9IQUxGX0dJX1JBVEUyX01DUzVfTFNCICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgSFRfSEFMRl9HSV9SQVRFMl9NQ1M1X01BU0sgICAgICAgICAgICAgICAweDAwMDBmZjAwCi0jZGVmaW5lIEhUX0hBTEZfR0lfUkFURTJfTUNTNV9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBIVF9IQUxGX0dJX1JBVEUyX01DUzVfTUFTSykgPj4gSFRfSEFMRl9HSV9SQVRFMl9NQ1M1X0xTQikKLSNkZWZpbmUgSFRfSEFMRl9HSV9SQVRFMl9NQ1M1X1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBIVF9IQUxGX0dJX1JBVEUyX01DUzVfTFNCKSAmIEhUX0hBTEZfR0lfUkFURTJfTUNTNV9NQVNLKQotI2RlZmluZSBIVF9IQUxGX0dJX1JBVEUyX01DUzRfTVNCICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgSFRfSEFMRl9HSV9SQVRFMl9NQ1M0X0xTQiAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEhUX0hBTEZfR0lfUkFURTJfTUNTNF9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBIVF9IQUxGX0dJX1JBVEUyX01DUzRfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgSFRfSEFMRl9HSV9SQVRFMl9NQ1M0X01BU0spID4+IEhUX0hBTEZfR0lfUkFURTJfTUNTNF9MU0IpCi0jZGVmaW5lIEhUX0hBTEZfR0lfUkFURTJfTUNTNF9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgSFRfSEFMRl9HSV9SQVRFMl9NQ1M0X0xTQikgJiBIVF9IQUxGX0dJX1JBVEUyX01DUzRfTUFTSykKLQotI2RlZmluZSBIVF9GVUxMX0dJX1JBVEUxX0FERFJFU1MgICAgICAgICAgICAgICAgIDB4MDAwMDgzNTAKLSNkZWZpbmUgSFRfRlVMTF9HSV9SQVRFMV9PRkZTRVQgICAgICAgICAgICAgICAgICAweDAwMDAwMzUwCi0jZGVmaW5lIEhUX0ZVTExfR0lfUkFURTFfTUNTM19NU0IgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgSFRfRlVMTF9HSV9SQVRFMV9NQ1MzX0xTQiAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBIVF9GVUxMX0dJX1JBVEUxX01DUzNfTUFTSyAgICAgICAgICAgICAgIDB4ZmYwMDAwMDAKLSNkZWZpbmUgSFRfRlVMTF9HSV9SQVRFMV9NQ1MzX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIEhUX0ZVTExfR0lfUkFURTFfTUNTM19NQVNLKSA+PiBIVF9GVUxMX0dJX1JBVEUxX01DUzNfTFNCKQotI2RlZmluZSBIVF9GVUxMX0dJX1JBVEUxX01DUzNfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IEhUX0ZVTExfR0lfUkFURTFfTUNTM19MU0IpICYgSFRfRlVMTF9HSV9SQVRFMV9NQ1MzX01BU0spCi0jZGVmaW5lIEhUX0ZVTExfR0lfUkFURTFfTUNTMl9NU0IgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgSFRfRlVMTF9HSV9SQVRFMV9NQ1MyX0xTQiAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBIVF9GVUxMX0dJX1JBVEUxX01DUzJfTUFTSyAgICAgICAgICAgICAgIDB4MDBmZjAwMDAKLSNkZWZpbmUgSFRfRlVMTF9HSV9SQVRFMV9NQ1MyX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIEhUX0ZVTExfR0lfUkFURTFfTUNTMl9NQVNLKSA+PiBIVF9GVUxMX0dJX1JBVEUxX01DUzJfTFNCKQotI2RlZmluZSBIVF9GVUxMX0dJX1JBVEUxX01DUzJfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IEhUX0ZVTExfR0lfUkFURTFfTUNTMl9MU0IpICYgSFRfRlVMTF9HSV9SQVRFMV9NQ1MyX01BU0spCi0jZGVmaW5lIEhUX0ZVTExfR0lfUkFURTFfTUNTMV9NU0IgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgSFRfRlVMTF9HSV9SQVRFMV9NQ1MxX0xTQiAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIEhUX0ZVTExfR0lfUkFURTFfTUNTMV9NQVNLICAgICAgICAgICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBIVF9GVUxMX0dJX1JBVEUxX01DUzFfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgSFRfRlVMTF9HSV9SQVRFMV9NQ1MxX01BU0spID4+IEhUX0ZVTExfR0lfUkFURTFfTUNTMV9MU0IpCi0jZGVmaW5lIEhUX0ZVTExfR0lfUkFURTFfTUNTMV9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgSFRfRlVMTF9HSV9SQVRFMV9NQ1MxX0xTQikgJiBIVF9GVUxMX0dJX1JBVEUxX01DUzFfTUFTSykKLSNkZWZpbmUgSFRfRlVMTF9HSV9SQVRFMV9NQ1MwX01TQiAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIEhUX0ZVTExfR0lfUkFURTFfTUNTMF9MU0IgICAgICAgICAgICAgICAgMAotI2RlZmluZSBIVF9GVUxMX0dJX1JBVEUxX01DUzBfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgSFRfRlVMTF9HSV9SQVRFMV9NQ1MwX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIEhUX0ZVTExfR0lfUkFURTFfTUNTMF9NQVNLKSA+PiBIVF9GVUxMX0dJX1JBVEUxX01DUzBfTFNCKQotI2RlZmluZSBIVF9GVUxMX0dJX1JBVEUxX01DUzBfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IEhUX0ZVTExfR0lfUkFURTFfTUNTMF9MU0IpICYgSFRfRlVMTF9HSV9SQVRFMV9NQ1MwX01BU0spCi0KLSNkZWZpbmUgSFRfRlVMTF9HSV9SQVRFMl9BRERSRVNTICAgICAgICAgICAgICAgICAweDAwMDA4MzU0Ci0jZGVmaW5lIEhUX0ZVTExfR0lfUkFURTJfT0ZGU0VUICAgICAgICAgICAgICAgICAgMHgwMDAwMDM1NAotI2RlZmluZSBIVF9GVUxMX0dJX1JBVEUyX01DUzdfTVNCICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIEhUX0ZVTExfR0lfUkFURTJfTUNTN19MU0IgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgSFRfRlVMTF9HSV9SQVRFMl9NQ1M3X01BU0sgICAgICAgICAgICAgICAweGZmMDAwMDAwCi0jZGVmaW5lIEhUX0ZVTExfR0lfUkFURTJfTUNTN19HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBIVF9GVUxMX0dJX1JBVEUyX01DUzdfTUFTSykgPj4gSFRfRlVMTF9HSV9SQVRFMl9NQ1M3X0xTQikKLSNkZWZpbmUgSFRfRlVMTF9HSV9SQVRFMl9NQ1M3X1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBIVF9GVUxMX0dJX1JBVEUyX01DUzdfTFNCKSAmIEhUX0ZVTExfR0lfUkFURTJfTUNTN19NQVNLKQotI2RlZmluZSBIVF9GVUxMX0dJX1JBVEUyX01DUzZfTVNCICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIEhUX0ZVTExfR0lfUkFURTJfTUNTNl9MU0IgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgSFRfRlVMTF9HSV9SQVRFMl9NQ1M2X01BU0sgICAgICAgICAgICAgICAweDAwZmYwMDAwCi0jZGVmaW5lIEhUX0ZVTExfR0lfUkFURTJfTUNTNl9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBIVF9GVUxMX0dJX1JBVEUyX01DUzZfTUFTSykgPj4gSFRfRlVMTF9HSV9SQVRFMl9NQ1M2X0xTQikKLSNkZWZpbmUgSFRfRlVMTF9HSV9SQVRFMl9NQ1M2X1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBIVF9GVUxMX0dJX1JBVEUyX01DUzZfTFNCKSAmIEhUX0ZVTExfR0lfUkFURTJfTUNTNl9NQVNLKQotI2RlZmluZSBIVF9GVUxMX0dJX1JBVEUyX01DUzVfTVNCICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIEhUX0ZVTExfR0lfUkFURTJfTUNTNV9MU0IgICAgICAgICAgICAgICAgOAotI2RlZmluZSBIVF9GVUxMX0dJX1JBVEUyX01DUzVfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMGZmMDAKLSNkZWZpbmUgSFRfRlVMTF9HSV9SQVRFMl9NQ1M1X0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIEhUX0ZVTExfR0lfUkFURTJfTUNTNV9NQVNLKSA+PiBIVF9GVUxMX0dJX1JBVEUyX01DUzVfTFNCKQotI2RlZmluZSBIVF9GVUxMX0dJX1JBVEUyX01DUzVfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IEhUX0ZVTExfR0lfUkFURTJfTUNTNV9MU0IpICYgSFRfRlVMTF9HSV9SQVRFMl9NQ1M1X01BU0spCi0jZGVmaW5lIEhUX0ZVTExfR0lfUkFURTJfTUNTNF9NU0IgICAgICAgICAgICAgICAgNwotI2RlZmluZSBIVF9GVUxMX0dJX1JBVEUyX01DUzRfTFNCICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgSFRfRlVMTF9HSV9SQVRFMl9NQ1M0X01BU0sgICAgICAgICAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIEhUX0ZVTExfR0lfUkFURTJfTUNTNF9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBIVF9GVUxMX0dJX1JBVEUyX01DUzRfTUFTSykgPj4gSFRfRlVMTF9HSV9SQVRFMl9NQ1M0X0xTQikKLSNkZWZpbmUgSFRfRlVMTF9HSV9SQVRFMl9NQ1M0X1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBIVF9GVUxMX0dJX1JBVEUyX01DUzRfTFNCKSAmIEhUX0ZVTExfR0lfUkFURTJfTUNTNF9NQVNLKQotCi0jZGVmaW5lIExFR0FDWV9SQVRFMV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODM1OAotI2RlZmluZSBMRUdBQ1lfUkFURTFfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzNTgKLSNkZWZpbmUgTEVHQUNZX1JBVEUxX1JBVEUxMl9NU0IgICAgICAgICAgICAgICAgICAyOQotI2RlZmluZSBMRUdBQ1lfUkFURTFfUkFURTEyX0xTQiAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIExFR0FDWV9SQVRFMV9SQVRFMTJfTUFTSyAgICAgICAgICAgICAgICAgMHgzZjAwMDAwMAotI2RlZmluZSBMRUdBQ1lfUkFURTFfUkFURTEyX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgTEVHQUNZX1JBVEUxX1JBVEUxMl9NQVNLKSA+PiBMRUdBQ1lfUkFURTFfUkFURTEyX0xTQikKLSNkZWZpbmUgTEVHQUNZX1JBVEUxX1JBVEUxMl9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBMRUdBQ1lfUkFURTFfUkFURTEyX0xTQikgJiBMRUdBQ1lfUkFURTFfUkFURTEyX01BU0spCi0jZGVmaW5lIExFR0FDWV9SQVRFMV9SQVRFMTFfTVNCICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgTEVHQUNZX1JBVEUxX1JBVEUxMV9MU0IgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBMRUdBQ1lfUkFURTFfUkFURTExX01BU0sgICAgICAgICAgICAgICAgIDB4MDBmYzAwMDAKLSNkZWZpbmUgTEVHQUNZX1JBVEUxX1JBVEUxMV9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIExFR0FDWV9SQVRFMV9SQVRFMTFfTUFTSykgPj4gTEVHQUNZX1JBVEUxX1JBVEUxMV9MU0IpCi0jZGVmaW5lIExFR0FDWV9SQVRFMV9SQVRFMTFfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgTEVHQUNZX1JBVEUxX1JBVEUxMV9MU0IpICYgTEVHQUNZX1JBVEUxX1JBVEUxMV9NQVNLKQotI2RlZmluZSBMRUdBQ1lfUkFURTFfUkFURTEwX01TQiAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIExFR0FDWV9SQVRFMV9SQVRFMTBfTFNCICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgTEVHQUNZX1JBVEUxX1JBVEUxMF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDNmMDAwCi0jZGVmaW5lIExFR0FDWV9SQVRFMV9SQVRFMTBfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBMRUdBQ1lfUkFURTFfUkFURTEwX01BU0spID4+IExFR0FDWV9SQVRFMV9SQVRFMTBfTFNCKQotI2RlZmluZSBMRUdBQ1lfUkFURTFfUkFURTEwX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IExFR0FDWV9SQVRFMV9SQVRFMTBfTFNCKSAmIExFR0FDWV9SQVRFMV9SQVRFMTBfTUFTSykKLSNkZWZpbmUgTEVHQUNZX1JBVEUxX1JBVEU5X01TQiAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBMRUdBQ1lfUkFURTFfUkFURTlfTFNCICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgTEVHQUNZX1JBVEUxX1JBVEU5X01BU0sgICAgICAgICAgICAgICAgICAweDAwMDAwZmMwCi0jZGVmaW5lIExFR0FDWV9SQVRFMV9SQVRFOV9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiBMRUdBQ1lfUkFURTFfUkFURTlfTUFTSykgPj4gTEVHQUNZX1JBVEUxX1JBVEU5X0xTQikKLSNkZWZpbmUgTEVHQUNZX1JBVEUxX1JBVEU5X1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCBMRUdBQ1lfUkFURTFfUkFURTlfTFNCKSAmIExFR0FDWV9SQVRFMV9SQVRFOV9NQVNLKQotI2RlZmluZSBMRUdBQ1lfUkFURTFfUkFURThfTVNCICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgTEVHQUNZX1JBVEUxX1JBVEU4X0xTQiAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIExFR0FDWV9SQVRFMV9SQVRFOF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzZgotI2RlZmluZSBMRUdBQ1lfUkFURTFfUkFURThfR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgTEVHQUNZX1JBVEUxX1JBVEU4X01BU0spID4+IExFR0FDWV9SQVRFMV9SQVRFOF9MU0IpCi0jZGVmaW5lIExFR0FDWV9SQVRFMV9SQVRFOF9TRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPDwgTEVHQUNZX1JBVEUxX1JBVEU4X0xTQikgJiBMRUdBQ1lfUkFURTFfUkFURThfTUFTSykKLQotI2RlZmluZSBMRUdBQ1lfUkFURTJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgzNWMKLSNkZWZpbmUgTEVHQUNZX1JBVEUyX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzVjCi0jZGVmaW5lIExFR0FDWV9SQVRFMl9SQVRFMjVfTVNCICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgTEVHQUNZX1JBVEUyX1JBVEUyNV9MU0IgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBMRUdBQ1lfUkFURTJfUkFURTI1X01BU0sgICAgICAgICAgICAgICAgIDB4M2YwMDAwMDAKLSNkZWZpbmUgTEVHQUNZX1JBVEUyX1JBVEUyNV9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIExFR0FDWV9SQVRFMl9SQVRFMjVfTUFTSykgPj4gTEVHQUNZX1JBVEUyX1JBVEUyNV9MU0IpCi0jZGVmaW5lIExFR0FDWV9SQVRFMl9SQVRFMjVfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgTEVHQUNZX1JBVEUyX1JBVEUyNV9MU0IpICYgTEVHQUNZX1JBVEUyX1JBVEUyNV9NQVNLKQotI2RlZmluZSBMRUdBQ1lfUkFURTJfUkFURTI0X01TQiAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIExFR0FDWV9SQVRFMl9SQVRFMjRfTFNCICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgTEVHQUNZX1JBVEUyX1JBVEUyNF9NQVNLICAgICAgICAgICAgICAgICAweDAwZmMwMDAwCi0jZGVmaW5lIExFR0FDWV9SQVRFMl9SQVRFMjRfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBMRUdBQ1lfUkFURTJfUkFURTI0X01BU0spID4+IExFR0FDWV9SQVRFMl9SQVRFMjRfTFNCKQotI2RlZmluZSBMRUdBQ1lfUkFURTJfUkFURTI0X1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IExFR0FDWV9SQVRFMl9SQVRFMjRfTFNCKSAmIExFR0FDWV9SQVRFMl9SQVRFMjRfTUFTSykKLSNkZWZpbmUgTEVHQUNZX1JBVEUyX1JBVEUxNV9NU0IgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBMRUdBQ1lfUkFURTJfUkFURTE1X0xTQiAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIExFR0FDWV9SQVRFMl9SQVRFMTVfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAzZjAwMAotI2RlZmluZSBMRUdBQ1lfUkFURTJfUkFURTE1X0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgTEVHQUNZX1JBVEUyX1JBVEUxNV9NQVNLKSA+PiBMRUdBQ1lfUkFURTJfUkFURTE1X0xTQikKLSNkZWZpbmUgTEVHQUNZX1JBVEUyX1JBVEUxNV9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBMRUdBQ1lfUkFURTJfUkFURTE1X0xTQikgJiBMRUdBQ1lfUkFURTJfUkFURTE1X01BU0spCi0jZGVmaW5lIExFR0FDWV9SQVRFMl9SQVRFMTRfTVNCICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgTEVHQUNZX1JBVEUyX1JBVEUxNF9MU0IgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIExFR0FDWV9SQVRFMl9SQVRFMTRfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMGZjMAotI2RlZmluZSBMRUdBQ1lfUkFURTJfUkFURTE0X0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgTEVHQUNZX1JBVEUyX1JBVEUxNF9NQVNLKSA+PiBMRUdBQ1lfUkFURTJfUkFURTE0X0xTQikKLSNkZWZpbmUgTEVHQUNZX1JBVEUyX1JBVEUxNF9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBMRUdBQ1lfUkFURTJfUkFURTE0X0xTQikgJiBMRUdBQ1lfUkFURTJfUkFURTE0X01BU0spCi0jZGVmaW5lIExFR0FDWV9SQVRFMl9SQVRFMTNfTVNCICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBMRUdBQ1lfUkFURTJfUkFURTEzX0xTQiAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTEVHQUNZX1JBVEUyX1JBVEUxM19NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMDNmCi0jZGVmaW5lIExFR0FDWV9SQVRFMl9SQVRFMTNfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBMRUdBQ1lfUkFURTJfUkFURTEzX01BU0spID4+IExFR0FDWV9SQVRFMl9SQVRFMTNfTFNCKQotI2RlZmluZSBMRUdBQ1lfUkFURTJfUkFURTEzX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IExFR0FDWV9SQVRFMl9SQVRFMTNfTFNCKSAmIExFR0FDWV9SQVRFMl9SQVRFMTNfTUFTSykKLQotI2RlZmluZSBMRUdBQ1lfUkFURTNfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgzNjAKLSNkZWZpbmUgTEVHQUNZX1JBVEUzX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzYwCi0jZGVmaW5lIExFR0FDWV9SQVRFM19SQVRFMzBfTVNCICAgICAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgTEVHQUNZX1JBVEUzX1JBVEUzMF9MU0IgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBMRUdBQ1lfUkFURTNfUkFURTMwX01BU0sgICAgICAgICAgICAgICAgIDB4M2YwMDAwMDAKLSNkZWZpbmUgTEVHQUNZX1JBVEUzX1JBVEUzMF9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIExFR0FDWV9SQVRFM19SQVRFMzBfTUFTSykgPj4gTEVHQUNZX1JBVEUzX1JBVEUzMF9MU0IpCi0jZGVmaW5lIExFR0FDWV9SQVRFM19SQVRFMzBfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgTEVHQUNZX1JBVEUzX1JBVEUzMF9MU0IpICYgTEVHQUNZX1JBVEUzX1JBVEUzMF9NQVNLKQotI2RlZmluZSBMRUdBQ1lfUkFURTNfUkFURTI5X01TQiAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIExFR0FDWV9SQVRFM19SQVRFMjlfTFNCICAgICAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgTEVHQUNZX1JBVEUzX1JBVEUyOV9NQVNLICAgICAgICAgICAgICAgICAweDAwZmMwMDAwCi0jZGVmaW5lIExFR0FDWV9SQVRFM19SQVRFMjlfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBMRUdBQ1lfUkFURTNfUkFURTI5X01BU0spID4+IExFR0FDWV9SQVRFM19SQVRFMjlfTFNCKQotI2RlZmluZSBMRUdBQ1lfUkFURTNfUkFURTI5X1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IExFR0FDWV9SQVRFM19SQVRFMjlfTFNCKSAmIExFR0FDWV9SQVRFM19SQVRFMjlfTUFTSykKLSNkZWZpbmUgTEVHQUNZX1JBVEUzX1JBVEUyOF9NU0IgICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBMRUdBQ1lfUkFURTNfUkFURTI4X0xTQiAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIExFR0FDWV9SQVRFM19SQVRFMjhfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAzZjAwMAotI2RlZmluZSBMRUdBQ1lfUkFURTNfUkFURTI4X0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgTEVHQUNZX1JBVEUzX1JBVEUyOF9NQVNLKSA+PiBMRUdBQ1lfUkFURTNfUkFURTI4X0xTQikKLSNkZWZpbmUgTEVHQUNZX1JBVEUzX1JBVEUyOF9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBMRUdBQ1lfUkFURTNfUkFURTI4X0xTQikgJiBMRUdBQ1lfUkFURTNfUkFURTI4X01BU0spCi0jZGVmaW5lIExFR0FDWV9SQVRFM19SQVRFMjdfTVNCICAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgTEVHQUNZX1JBVEUzX1JBVEUyN19MU0IgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIExFR0FDWV9SQVRFM19SQVRFMjdfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMGZjMAotI2RlZmluZSBMRUdBQ1lfUkFURTNfUkFURTI3X0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgTEVHQUNZX1JBVEUzX1JBVEUyN19NQVNLKSA+PiBMRUdBQ1lfUkFURTNfUkFURTI3X0xTQikKLSNkZWZpbmUgTEVHQUNZX1JBVEUzX1JBVEUyN19TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBMRUdBQ1lfUkFURTNfUkFURTI3X0xTQikgJiBMRUdBQ1lfUkFURTNfUkFURTI3X01BU0spCi0jZGVmaW5lIExFR0FDWV9SQVRFM19SQVRFMjZfTVNCICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBMRUdBQ1lfUkFURTNfUkFURTI2X0xTQiAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTEVHQUNZX1JBVEUzX1JBVEUyNl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMDNmCi0jZGVmaW5lIExFR0FDWV9SQVRFM19SQVRFMjZfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBMRUdBQ1lfUkFURTNfUkFURTI2X01BU0spID4+IExFR0FDWV9SQVRFM19SQVRFMjZfTFNCKQotI2RlZmluZSBMRUdBQ1lfUkFURTNfUkFURTI2X1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IExFR0FDWV9SQVRFM19SQVRFMjZfTFNCKSAmIExFR0FDWV9SQVRFM19SQVRFMjZfTUFTSykKLQotI2RlZmluZSBSWF9JTlRfRklMVEVSX0FERFJFU1MgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgzNjQKLSNkZWZpbmUgUlhfSU5UX0ZJTFRFUl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMzY0Ci0jZGVmaW5lIFJYX0lOVF9GSUxURVJfQkVBQ09OX01TQiAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUlhfSU5UX0ZJTFRFUl9CRUFDT05fTFNCICAgICAgICAgICAgICAgICAxNwotI2RlZmluZSBSWF9JTlRfRklMVEVSX0JFQUNPTl9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKLSNkZWZpbmUgUlhfSU5UX0ZJTFRFUl9CRUFDT05fR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIFJYX0lOVF9GSUxURVJfQkVBQ09OX01BU0spID4+IFJYX0lOVF9GSUxURVJfQkVBQ09OX0xTQikKLSNkZWZpbmUgUlhfSU5UX0ZJTFRFUl9CRUFDT05fU0VUKHgpICAgICAgICAgICAgICAoKCh4KSA8PCBSWF9JTlRfRklMVEVSX0JFQUNPTl9MU0IpICYgUlhfSU5UX0ZJTFRFUl9CRUFDT05fTUFTSykKLSNkZWZpbmUgUlhfSU5UX0ZJTFRFUl9BTVBEVV9NU0IgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBSWF9JTlRfRklMVEVSX0FNUERVX0xTQiAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFJYX0lOVF9GSUxURVJfQU1QRFVfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBSWF9JTlRfRklMVEVSX0FNUERVX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgUlhfSU5UX0ZJTFRFUl9BTVBEVV9NQVNLKSA+PiBSWF9JTlRfRklMVEVSX0FNUERVX0xTQikKLSNkZWZpbmUgUlhfSU5UX0ZJTFRFUl9BTVBEVV9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBSWF9JTlRfRklMVEVSX0FNUERVX0xTQikgJiBSWF9JTlRfRklMVEVSX0FNUERVX01BU0spCi0jZGVmaW5lIFJYX0lOVF9GSUxURVJfRU9TUF9NU0IgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgUlhfSU5UX0ZJTFRFUl9FT1NQX0xTQiAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBSWF9JTlRfRklMVEVSX0VPU1BfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKLSNkZWZpbmUgUlhfSU5UX0ZJTFRFUl9FT1NQX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIFJYX0lOVF9GSUxURVJfRU9TUF9NQVNLKSA+PiBSWF9JTlRfRklMVEVSX0VPU1BfTFNCKQotI2RlZmluZSBSWF9JTlRfRklMVEVSX0VPU1BfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IFJYX0lOVF9GSUxURVJfRU9TUF9MU0IpICYgUlhfSU5UX0ZJTFRFUl9FT1NQX01BU0spCi0jZGVmaW5lIFJYX0lOVF9GSUxURVJfTEVOR1RIX0xPV19NU0IgICAgICAgICAgICAgMTQKLSNkZWZpbmUgUlhfSU5UX0ZJTFRFUl9MRU5HVEhfTE9XX0xTQiAgICAgICAgICAgICAxNAotI2RlZmluZSBSWF9JTlRfRklMVEVSX0xFTkdUSF9MT1dfTUFTSyAgICAgICAgICAgIDB4MDAwMDQwMDAKLSNkZWZpbmUgUlhfSU5UX0ZJTFRFUl9MRU5HVEhfTE9XX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIFJYX0lOVF9GSUxURVJfTEVOR1RIX0xPV19NQVNLKSA+PiBSWF9JTlRfRklMVEVSX0xFTkdUSF9MT1dfTFNCKQotI2RlZmluZSBSWF9JTlRfRklMVEVSX0xFTkdUSF9MT1dfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IFJYX0lOVF9GSUxURVJfTEVOR1RIX0xPV19MU0IpICYgUlhfSU5UX0ZJTFRFUl9MRU5HVEhfTE9XX01BU0spCi0jZGVmaW5lIFJYX0lOVF9GSUxURVJfTEVOR1RIX0hJR0hfTVNCICAgICAgICAgICAgMTMKLSNkZWZpbmUgUlhfSU5UX0ZJTFRFUl9MRU5HVEhfSElHSF9MU0IgICAgICAgICAgICAxMwotI2RlZmluZSBSWF9JTlRfRklMVEVSX0xFTkdUSF9ISUdIX01BU0sgICAgICAgICAgIDB4MDAwMDIwMDAKLSNkZWZpbmUgUlhfSU5UX0ZJTFRFUl9MRU5HVEhfSElHSF9HRVQoeCkgICAgICAgICAoKCh4KSAmIFJYX0lOVF9GSUxURVJfTEVOR1RIX0hJR0hfTUFTSykgPj4gUlhfSU5UX0ZJTFRFUl9MRU5HVEhfSElHSF9MU0IpCi0jZGVmaW5lIFJYX0lOVF9GSUxURVJfTEVOR1RIX0hJR0hfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgUlhfSU5UX0ZJTFRFUl9MRU5HVEhfSElHSF9MU0IpICYgUlhfSU5UX0ZJTFRFUl9MRU5HVEhfSElHSF9NQVNLKQotI2RlZmluZSBSWF9JTlRfRklMVEVSX1JTU0lfTVNCICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFJYX0lOVF9GSUxURVJfUlNTSV9MU0IgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUlhfSU5UX0ZJTFRFUl9SU1NJX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCi0jZGVmaW5lIFJYX0lOVF9GSUxURVJfUlNTSV9HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiBSWF9JTlRfRklMVEVSX1JTU0lfTUFTSykgPj4gUlhfSU5UX0ZJTFRFUl9SU1NJX0xTQikKLSNkZWZpbmUgUlhfSU5UX0ZJTFRFUl9SU1NJX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCBSWF9JTlRfRklMVEVSX1JTU0lfTFNCKSAmIFJYX0lOVF9GSUxURVJfUlNTSV9NQVNLKQotI2RlZmluZSBSWF9JTlRfRklMVEVSX1JBVEVfTE9XX01TQiAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFJYX0lOVF9GSUxURVJfUkFURV9MT1dfTFNCICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgUlhfSU5UX0ZJTFRFUl9SQVRFX0xPV19NQVNLICAgICAgICAgICAgICAweDAwMDAwODAwCi0jZGVmaW5lIFJYX0lOVF9GSUxURVJfUkFURV9MT1dfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBSWF9JTlRfRklMVEVSX1JBVEVfTE9XX01BU0spID4+IFJYX0lOVF9GSUxURVJfUkFURV9MT1dfTFNCKQotI2RlZmluZSBSWF9JTlRfRklMVEVSX1JBVEVfTE9XX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IFJYX0lOVF9GSUxURVJfUkFURV9MT1dfTFNCKSAmIFJYX0lOVF9GSUxURVJfUkFURV9MT1dfTUFTSykKLSNkZWZpbmUgUlhfSU5UX0ZJTFRFUl9SQVRFX0hJR0hfTVNCICAgICAgICAgICAgICAxMAotI2RlZmluZSBSWF9JTlRfRklMVEVSX1JBVEVfSElHSF9MU0IgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFJYX0lOVF9GSUxURVJfUkFURV9ISUdIX01BU0sgICAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBSWF9JTlRfRklMVEVSX1JBVEVfSElHSF9HRVQoeCkgICAgICAgICAgICgoKHgpICYgUlhfSU5UX0ZJTFRFUl9SQVRFX0hJR0hfTUFTSykgPj4gUlhfSU5UX0ZJTFRFUl9SQVRFX0hJR0hfTFNCKQotI2RlZmluZSBSWF9JTlRfRklMVEVSX1JBVEVfSElHSF9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFJYX0lOVF9GSUxURVJfUkFURV9ISUdIX0xTQikgJiBSWF9JTlRfRklMVEVSX1JBVEVfSElHSF9NQVNLKQotI2RlZmluZSBSWF9JTlRfRklMVEVSX01PUkVfRlJBR19NU0IgICAgICAgICAgICAgIDkKLSNkZWZpbmUgUlhfSU5UX0ZJTFRFUl9NT1JFX0ZSQUdfTFNCICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFJYX0lOVF9GSUxURVJfTU9SRV9GUkFHX01BU0sgICAgICAgICAgICAgMHgwMDAwMDIwMAotI2RlZmluZSBSWF9JTlRfRklMVEVSX01PUkVfRlJBR19HRVQoeCkgICAgICAgICAgICgoKHgpICYgUlhfSU5UX0ZJTFRFUl9NT1JFX0ZSQUdfTUFTSykgPj4gUlhfSU5UX0ZJTFRFUl9NT1JFX0ZSQUdfTFNCKQotI2RlZmluZSBSWF9JTlRfRklMVEVSX01PUkVfRlJBR19TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFJYX0lOVF9GSUxURVJfTU9SRV9GUkFHX0xTQikgJiBSWF9JTlRfRklMVEVSX01PUkVfRlJBR19NQVNLKQotI2RlZmluZSBSWF9JTlRfRklMVEVSX01PUkVfREFUQV9NU0IgICAgICAgICAgICAgIDgKLSNkZWZpbmUgUlhfSU5UX0ZJTFRFUl9NT1JFX0RBVEFfTFNCICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFJYX0lOVF9GSUxURVJfTU9SRV9EQVRBX01BU0sgICAgICAgICAgICAgMHgwMDAwMDEwMAotI2RlZmluZSBSWF9JTlRfRklMVEVSX01PUkVfREFUQV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgUlhfSU5UX0ZJTFRFUl9NT1JFX0RBVEFfTUFTSykgPj4gUlhfSU5UX0ZJTFRFUl9NT1JFX0RBVEFfTFNCKQotI2RlZmluZSBSWF9JTlRfRklMVEVSX01PUkVfREFUQV9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFJYX0lOVF9GSUxURVJfTU9SRV9EQVRBX0xTQikgJiBSWF9JTlRfRklMVEVSX01PUkVfREFUQV9NQVNLKQotI2RlZmluZSBSWF9JTlRfRklMVEVSX1JFVFJZX01TQiAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgUlhfSU5UX0ZJTFRFUl9SRVRSWV9MU0IgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFJYX0lOVF9GSUxURVJfUkVUUllfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBSWF9JTlRfRklMVEVSX1JFVFJZX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgUlhfSU5UX0ZJTFRFUl9SRVRSWV9NQVNLKSA+PiBSWF9JTlRfRklMVEVSX1JFVFJZX0xTQikKLSNkZWZpbmUgUlhfSU5UX0ZJTFRFUl9SRVRSWV9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBSWF9JTlRfRklMVEVSX1JFVFJZX0xTQikgJiBSWF9JTlRfRklMVEVSX1JFVFJZX01BU0spCi0jZGVmaW5lIFJYX0lOVF9GSUxURVJfQ1RTX01TQiAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBSWF9JTlRfRklMVEVSX0NUU19MU0IgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgUlhfSU5UX0ZJTFRFUl9DVFNfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIFJYX0lOVF9GSUxURVJfQ1RTX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBSWF9JTlRfRklMVEVSX0NUU19NQVNLKSA+PiBSWF9JTlRfRklMVEVSX0NUU19MU0IpCi0jZGVmaW5lIFJYX0lOVF9GSUxURVJfQ1RTX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgUlhfSU5UX0ZJTFRFUl9DVFNfTFNCKSAmIFJYX0lOVF9GSUxURVJfQ1RTX01BU0spCi0jZGVmaW5lIFJYX0lOVF9GSUxURVJfQUNLX01TQiAgICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBSWF9JTlRfRklMVEVSX0FDS19MU0IgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUlhfSU5UX0ZJTFRFUl9BQ0tfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIFJYX0lOVF9GSUxURVJfQUNLX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBSWF9JTlRfRklMVEVSX0FDS19NQVNLKSA+PiBSWF9JTlRfRklMVEVSX0FDS19MU0IpCi0jZGVmaW5lIFJYX0lOVF9GSUxURVJfQUNLX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgUlhfSU5UX0ZJTFRFUl9BQ0tfTFNCKSAmIFJYX0lOVF9GSUxURVJfQUNLX01BU0spCi0jZGVmaW5lIFJYX0lOVF9GSUxURVJfUlRTX01TQiAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBSWF9JTlRfRklMVEVSX1JUU19MU0IgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUlhfSU5UX0ZJTFRFUl9SVFNfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIFJYX0lOVF9GSUxURVJfUlRTX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBSWF9JTlRfRklMVEVSX1JUU19NQVNLKSA+PiBSWF9JTlRfRklMVEVSX1JUU19MU0IpCi0jZGVmaW5lIFJYX0lOVF9GSUxURVJfUlRTX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgUlhfSU5UX0ZJTFRFUl9SVFNfTFNCKSAmIFJYX0lOVF9GSUxURVJfUlRTX01BU0spCi0jZGVmaW5lIFJYX0lOVF9GSUxURVJfTUNBU1RfTVNCICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBSWF9JTlRfRklMVEVSX01DQVNUX0xTQiAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUlhfSU5UX0ZJTFRFUl9NQ0FTVF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIFJYX0lOVF9GSUxURVJfTUNBU1RfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBSWF9JTlRfRklMVEVSX01DQVNUX01BU0spID4+IFJYX0lOVF9GSUxURVJfTUNBU1RfTFNCKQotI2RlZmluZSBSWF9JTlRfRklMVEVSX01DQVNUX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IFJYX0lOVF9GSUxURVJfTUNBU1RfTFNCKSAmIFJYX0lOVF9GSUxURVJfTUNBU1RfTUFTSykKLSNkZWZpbmUgUlhfSU5UX0ZJTFRFUl9CQ0FTVF9NU0IgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFJYX0lOVF9GSUxURVJfQkNBU1RfTFNCICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBSWF9JTlRfRklMVEVSX0JDQVNUX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgUlhfSU5UX0ZJTFRFUl9CQ0FTVF9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIFJYX0lOVF9GSUxURVJfQkNBU1RfTUFTSykgPj4gUlhfSU5UX0ZJTFRFUl9CQ0FTVF9MU0IpCi0jZGVmaW5lIFJYX0lOVF9GSUxURVJfQkNBU1RfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgUlhfSU5UX0ZJTFRFUl9CQ0FTVF9MU0IpICYgUlhfSU5UX0ZJTFRFUl9CQ0FTVF9NQVNLKQotI2RlZmluZSBSWF9JTlRfRklMVEVSX0RJUkVDVEVEX01TQiAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUlhfSU5UX0ZJTFRFUl9ESVJFQ1RFRF9MU0IgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFJYX0lOVF9GSUxURVJfRElSRUNURURfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBSWF9JTlRfRklMVEVSX0RJUkVDVEVEX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgUlhfSU5UX0ZJTFRFUl9ESVJFQ1RFRF9NQVNLKSA+PiBSWF9JTlRfRklMVEVSX0RJUkVDVEVEX0xTQikKLSNkZWZpbmUgUlhfSU5UX0ZJTFRFUl9ESVJFQ1RFRF9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBSWF9JTlRfRklMVEVSX0RJUkVDVEVEX0xTQikgJiBSWF9JTlRfRklMVEVSX0RJUkVDVEVEX01BU0spCi0jZGVmaW5lIFJYX0lOVF9GSUxURVJfRU5BQkxFX01TQiAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBSWF9JTlRfRklMVEVSX0VOQUJMRV9MU0IgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUlhfSU5UX0ZJTFRFUl9FTkFCTEVfTUFTSyAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFJYX0lOVF9GSUxURVJfRU5BQkxFX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiBSWF9JTlRfRklMVEVSX0VOQUJMRV9NQVNLKSA+PiBSWF9JTlRfRklMVEVSX0VOQUJMRV9MU0IpCi0jZGVmaW5lIFJYX0lOVF9GSUxURVJfRU5BQkxFX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgUlhfSU5UX0ZJTFRFUl9FTkFCTEVfTFNCKSAmIFJYX0lOVF9GSUxURVJfRU5BQkxFX01BU0spCi0KLSNkZWZpbmUgUlhfSU5UX09WRVJGTE9XX0FERFJFU1MgICAgICAgICAgICAgICAgICAweDAwMDA4MzY4Ci0jZGVmaW5lIFJYX0lOVF9PVkVSRkxPV19PRkZTRVQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDM2OAotI2RlZmluZSBSWF9JTlRfT1ZFUkZMT1dfU1RBVFVTX01TQiAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUlhfSU5UX09WRVJGTE9XX1NUQVRVU19MU0IgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFJYX0lOVF9PVkVSRkxPV19TVEFUVVNfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBSWF9JTlRfT1ZFUkZMT1dfU1RBVFVTX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgUlhfSU5UX09WRVJGTE9XX1NUQVRVU19NQVNLKSA+PiBSWF9JTlRfT1ZFUkZMT1dfU1RBVFVTX0xTQikKLSNkZWZpbmUgUlhfSU5UX09WRVJGTE9XX1NUQVRVU19TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBSWF9JTlRfT1ZFUkZMT1dfU1RBVFVTX0xTQikgJiBSWF9JTlRfT1ZFUkZMT1dfU1RBVFVTX01BU0spCi0KLSNkZWZpbmUgUlhfRklMVEVSX1RIUkVTSF9BRERSRVNTICAgICAgICAgICAgICAgICAweDAwMDA4MzZjCi0jZGVmaW5lIFJYX0ZJTFRFUl9USFJFU0hfT0ZGU0VUICAgICAgICAgICAgICAgICAgMHgwMDAwMDM2YwotI2RlZmluZSBSWF9GSUxURVJfVEhSRVNIX1JTU0lfTE9XX01TQiAgICAgICAgICAgIDIzCi0jZGVmaW5lIFJYX0ZJTFRFUl9USFJFU0hfUlNTSV9MT1dfTFNCICAgICAgICAgICAgMTYKLSNkZWZpbmUgUlhfRklMVEVSX1RIUkVTSF9SU1NJX0xPV19NQVNLICAgICAgICAgICAweDAwZmYwMDAwCi0jZGVmaW5lIFJYX0ZJTFRFUl9USFJFU0hfUlNTSV9MT1dfR0VUKHgpICAgICAgICAgKCgoeCkgJiBSWF9GSUxURVJfVEhSRVNIX1JTU0lfTE9XX01BU0spID4+IFJYX0ZJTFRFUl9USFJFU0hfUlNTSV9MT1dfTFNCKQotI2RlZmluZSBSWF9GSUxURVJfVEhSRVNIX1JTU0lfTE9XX1NFVCh4KSAgICAgICAgICgoKHgpIDw8IFJYX0ZJTFRFUl9USFJFU0hfUlNTSV9MT1dfTFNCKSAmIFJYX0ZJTFRFUl9USFJFU0hfUlNTSV9MT1dfTUFTSykKLSNkZWZpbmUgUlhfRklMVEVSX1RIUkVTSF9SQVRFX0xPV19NU0IgICAgICAgICAgICAxNQotI2RlZmluZSBSWF9GSUxURVJfVEhSRVNIX1JBVEVfTE9XX0xTQiAgICAgICAgICAgIDgKLSNkZWZpbmUgUlhfRklMVEVSX1RIUkVTSF9SQVRFX0xPV19NQVNLICAgICAgICAgICAweDAwMDBmZjAwCi0jZGVmaW5lIFJYX0ZJTFRFUl9USFJFU0hfUkFURV9MT1dfR0VUKHgpICAgICAgICAgKCgoeCkgJiBSWF9GSUxURVJfVEhSRVNIX1JBVEVfTE9XX01BU0spID4+IFJYX0ZJTFRFUl9USFJFU0hfUkFURV9MT1dfTFNCKQotI2RlZmluZSBSWF9GSUxURVJfVEhSRVNIX1JBVEVfTE9XX1NFVCh4KSAgICAgICAgICgoKHgpIDw8IFJYX0ZJTFRFUl9USFJFU0hfUkFURV9MT1dfTFNCKSAmIFJYX0ZJTFRFUl9USFJFU0hfUkFURV9MT1dfTUFTSykKLSNkZWZpbmUgUlhfRklMVEVSX1RIUkVTSF9SQVRFX0hJR0hfTVNCICAgICAgICAgICA3Ci0jZGVmaW5lIFJYX0ZJTFRFUl9USFJFU0hfUkFURV9ISUdIX0xTQiAgICAgICAgICAgMAotI2RlZmluZSBSWF9GSUxURVJfVEhSRVNIX1JBVEVfSElHSF9NQVNLICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgUlhfRklMVEVSX1RIUkVTSF9SQVRFX0hJR0hfR0VUKHgpICAgICAgICAoKCh4KSAmIFJYX0ZJTFRFUl9USFJFU0hfUkFURV9ISUdIX01BU0spID4+IFJYX0ZJTFRFUl9USFJFU0hfUkFURV9ISUdIX0xTQikKLSNkZWZpbmUgUlhfRklMVEVSX1RIUkVTSF9SQVRFX0hJR0hfU0VUKHgpICAgICAgICAoKCh4KSA8PCBSWF9GSUxURVJfVEhSRVNIX1JBVEVfSElHSF9MU0IpICYgUlhfRklMVEVSX1RIUkVTSF9SQVRFX0hJR0hfTUFTSykKLQotI2RlZmluZSBSWF9GSUxURVJfVEhSRVNIMV9BRERSRVNTICAgICAgICAgICAgICAgIDB4MDAwMDgzNzAKLSNkZWZpbmUgUlhfRklMVEVSX1RIUkVTSDFfT0ZGU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMzcwCi0jZGVmaW5lIFJYX0ZJTFRFUl9USFJFU0gxX0xFTkdUSF9MT1dfTVNCICAgICAgICAgMjMKLSNkZWZpbmUgUlhfRklMVEVSX1RIUkVTSDFfTEVOR1RIX0xPV19MU0IgICAgICAgICAxMgotI2RlZmluZSBSWF9GSUxURVJfVEhSRVNIMV9MRU5HVEhfTE9XX01BU0sgICAgICAgIDB4MDBmZmYwMDAKLSNkZWZpbmUgUlhfRklMVEVSX1RIUkVTSDFfTEVOR1RIX0xPV19HRVQoeCkgICAgICAoKCh4KSAmIFJYX0ZJTFRFUl9USFJFU0gxX0xFTkdUSF9MT1dfTUFTSykgPj4gUlhfRklMVEVSX1RIUkVTSDFfTEVOR1RIX0xPV19MU0IpCi0jZGVmaW5lIFJYX0ZJTFRFUl9USFJFU0gxX0xFTkdUSF9MT1dfU0VUKHgpICAgICAgKCgoeCkgPDwgUlhfRklMVEVSX1RIUkVTSDFfTEVOR1RIX0xPV19MU0IpICYgUlhfRklMVEVSX1RIUkVTSDFfTEVOR1RIX0xPV19NQVNLKQotI2RlZmluZSBSWF9GSUxURVJfVEhSRVNIMV9MRU5HVEhfSElHSF9NU0IgICAgICAgIDExCi0jZGVmaW5lIFJYX0ZJTFRFUl9USFJFU0gxX0xFTkdUSF9ISUdIX0xTQiAgICAgICAgMAotI2RlZmluZSBSWF9GSUxURVJfVEhSRVNIMV9MRU5HVEhfSElHSF9NQVNLICAgICAgIDB4MDAwMDBmZmYKLSNkZWZpbmUgUlhfRklMVEVSX1RIUkVTSDFfTEVOR1RIX0hJR0hfR0VUKHgpICAgICAoKCh4KSAmIFJYX0ZJTFRFUl9USFJFU0gxX0xFTkdUSF9ISUdIX01BU0spID4+IFJYX0ZJTFRFUl9USFJFU0gxX0xFTkdUSF9ISUdIX0xTQikKLSNkZWZpbmUgUlhfRklMVEVSX1RIUkVTSDFfTEVOR1RIX0hJR0hfU0VUKHgpICAgICAoKCh4KSA8PCBSWF9GSUxURVJfVEhSRVNIMV9MRU5HVEhfSElHSF9MU0IpICYgUlhfRklMVEVSX1RIUkVTSDFfTEVOR1RIX0hJR0hfTUFTSykKLQotI2RlZmluZSBSWF9QUklPUklUWV9USFJFU0gwX0FERFJFU1MgICAgICAgICAgICAgIDB4MDAwMDgzNzQKLSNkZWZpbmUgUlhfUFJJT1JJVFlfVEhSRVNIMF9PRkZTRVQgICAgICAgICAgICAgICAweDAwMDAwMzc0Ci0jZGVmaW5lIFJYX1BSSU9SSVRZX1RIUkVTSDBfUlNTSV9MT1dfTVNCICAgICAgICAgMzEKLSNkZWZpbmUgUlhfUFJJT1JJVFlfVEhSRVNIMF9SU1NJX0xPV19MU0IgICAgICAgICAyNAotI2RlZmluZSBSWF9QUklPUklUWV9USFJFU0gwX1JTU0lfTE9XX01BU0sgICAgICAgIDB4ZmYwMDAwMDAKLSNkZWZpbmUgUlhfUFJJT1JJVFlfVEhSRVNIMF9SU1NJX0xPV19HRVQoeCkgICAgICAoKCh4KSAmIFJYX1BSSU9SSVRZX1RIUkVTSDBfUlNTSV9MT1dfTUFTSykgPj4gUlhfUFJJT1JJVFlfVEhSRVNIMF9SU1NJX0xPV19MU0IpCi0jZGVmaW5lIFJYX1BSSU9SSVRZX1RIUkVTSDBfUlNTSV9MT1dfU0VUKHgpICAgICAgKCgoeCkgPDwgUlhfUFJJT1JJVFlfVEhSRVNIMF9SU1NJX0xPV19MU0IpICYgUlhfUFJJT1JJVFlfVEhSRVNIMF9SU1NJX0xPV19NQVNLKQotI2RlZmluZSBSWF9QUklPUklUWV9USFJFU0gwX1JTU0lfSElHSF9NU0IgICAgICAgIDIzCi0jZGVmaW5lIFJYX1BSSU9SSVRZX1RIUkVTSDBfUlNTSV9ISUdIX0xTQiAgICAgICAgMTYKLSNkZWZpbmUgUlhfUFJJT1JJVFlfVEhSRVNIMF9SU1NJX0hJR0hfTUFTSyAgICAgICAweDAwZmYwMDAwCi0jZGVmaW5lIFJYX1BSSU9SSVRZX1RIUkVTSDBfUlNTSV9ISUdIX0dFVCh4KSAgICAgKCgoeCkgJiBSWF9QUklPUklUWV9USFJFU0gwX1JTU0lfSElHSF9NQVNLKSA+PiBSWF9QUklPUklUWV9USFJFU0gwX1JTU0lfSElHSF9MU0IpCi0jZGVmaW5lIFJYX1BSSU9SSVRZX1RIUkVTSDBfUlNTSV9ISUdIX1NFVCh4KSAgICAgKCgoeCkgPDwgUlhfUFJJT1JJVFlfVEhSRVNIMF9SU1NJX0hJR0hfTFNCKSAmIFJYX1BSSU9SSVRZX1RIUkVTSDBfUlNTSV9ISUdIX01BU0spCi0jZGVmaW5lIFJYX1BSSU9SSVRZX1RIUkVTSDBfUkFURV9MT1dfTVNCICAgICAgICAgMTUKLSNkZWZpbmUgUlhfUFJJT1JJVFlfVEhSRVNIMF9SQVRFX0xPV19MU0IgICAgICAgICA4Ci0jZGVmaW5lIFJYX1BSSU9SSVRZX1RIUkVTSDBfUkFURV9MT1dfTUFTSyAgICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBSWF9QUklPUklUWV9USFJFU0gwX1JBVEVfTE9XX0dFVCh4KSAgICAgICgoKHgpICYgUlhfUFJJT1JJVFlfVEhSRVNIMF9SQVRFX0xPV19NQVNLKSA+PiBSWF9QUklPUklUWV9USFJFU0gwX1JBVEVfTE9XX0xTQikKLSNkZWZpbmUgUlhfUFJJT1JJVFlfVEhSRVNIMF9SQVRFX0xPV19TRVQoeCkgICAgICAoKCh4KSA8PCBSWF9QUklPUklUWV9USFJFU0gwX1JBVEVfTE9XX0xTQikgJiBSWF9QUklPUklUWV9USFJFU0gwX1JBVEVfTE9XX01BU0spCi0jZGVmaW5lIFJYX1BSSU9SSVRZX1RIUkVTSDBfUkFURV9ISUdIX01TQiAgICAgICAgNwotI2RlZmluZSBSWF9QUklPUklUWV9USFJFU0gwX1JBVEVfSElHSF9MU0IgICAgICAgIDAKLSNkZWZpbmUgUlhfUFJJT1JJVFlfVEhSRVNIMF9SQVRFX0hJR0hfTUFTSyAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIFJYX1BSSU9SSVRZX1RIUkVTSDBfUkFURV9ISUdIX0dFVCh4KSAgICAgKCgoeCkgJiBSWF9QUklPUklUWV9USFJFU0gwX1JBVEVfSElHSF9NQVNLKSA+PiBSWF9QUklPUklUWV9USFJFU0gwX1JBVEVfSElHSF9MU0IpCi0jZGVmaW5lIFJYX1BSSU9SSVRZX1RIUkVTSDBfUkFURV9ISUdIX1NFVCh4KSAgICAgKCgoeCkgPDwgUlhfUFJJT1JJVFlfVEhSRVNIMF9SQVRFX0hJR0hfTFNCKSAmIFJYX1BSSU9SSVRZX1RIUkVTSDBfUkFURV9ISUdIX01BU0spCi0KLSNkZWZpbmUgUlhfUFJJT1JJVFlfVEhSRVNIMV9BRERSRVNTICAgICAgICAgICAgICAweDAwMDA4Mzc4Ci0jZGVmaW5lIFJYX1BSSU9SSVRZX1RIUkVTSDFfT0ZGU0VUICAgICAgICAgICAgICAgMHgwMDAwMDM3OAotI2RlZmluZSBSWF9QUklPUklUWV9USFJFU0gxX1hDQVNUX1JTU0lfSElHSF9NU0IgIDMxCi0jZGVmaW5lIFJYX1BSSU9SSVRZX1RIUkVTSDFfWENBU1RfUlNTSV9ISUdIX0xTQiAgMjQKLSNkZWZpbmUgUlhfUFJJT1JJVFlfVEhSRVNIMV9YQ0FTVF9SU1NJX0hJR0hfTUFTSyAweGZmMDAwMDAwCi0jZGVmaW5lIFJYX1BSSU9SSVRZX1RIUkVTSDFfWENBU1RfUlNTSV9ISUdIX0dFVCh4KSAoKCh4KSAmIFJYX1BSSU9SSVRZX1RIUkVTSDFfWENBU1RfUlNTSV9ISUdIX01BU0spID4+IFJYX1BSSU9SSVRZX1RIUkVTSDFfWENBU1RfUlNTSV9ISUdIX0xTQikKLSNkZWZpbmUgUlhfUFJJT1JJVFlfVEhSRVNIMV9YQ0FTVF9SU1NJX0hJR0hfU0VUKHgpICgoKHgpIDw8IFJYX1BSSU9SSVRZX1RIUkVTSDFfWENBU1RfUlNTSV9ISUdIX0xTQikgJiBSWF9QUklPUklUWV9USFJFU0gxX1hDQVNUX1JTU0lfSElHSF9NQVNLKQotI2RlZmluZSBSWF9QUklPUklUWV9USFJFU0gxX0xFTkdUSF9MT1dfTVNCICAgICAgIDIzCi0jZGVmaW5lIFJYX1BSSU9SSVRZX1RIUkVTSDFfTEVOR1RIX0xPV19MU0IgICAgICAgMTIKLSNkZWZpbmUgUlhfUFJJT1JJVFlfVEhSRVNIMV9MRU5HVEhfTE9XX01BU0sgICAgICAweDAwZmZmMDAwCi0jZGVmaW5lIFJYX1BSSU9SSVRZX1RIUkVTSDFfTEVOR1RIX0xPV19HRVQoeCkgICAgKCgoeCkgJiBSWF9QUklPUklUWV9USFJFU0gxX0xFTkdUSF9MT1dfTUFTSykgPj4gUlhfUFJJT1JJVFlfVEhSRVNIMV9MRU5HVEhfTE9XX0xTQikKLSNkZWZpbmUgUlhfUFJJT1JJVFlfVEhSRVNIMV9MRU5HVEhfTE9XX1NFVCh4KSAgICAoKCh4KSA8PCBSWF9QUklPUklUWV9USFJFU0gxX0xFTkdUSF9MT1dfTFNCKSAmIFJYX1BSSU9SSVRZX1RIUkVTSDFfTEVOR1RIX0xPV19NQVNLKQotI2RlZmluZSBSWF9QUklPUklUWV9USFJFU0gxX0xFTkdUSF9ISUdIX01TQiAgICAgIDExCi0jZGVmaW5lIFJYX1BSSU9SSVRZX1RIUkVTSDFfTEVOR1RIX0hJR0hfTFNCICAgICAgMAotI2RlZmluZSBSWF9QUklPUklUWV9USFJFU0gxX0xFTkdUSF9ISUdIX01BU0sgICAgIDB4MDAwMDBmZmYKLSNkZWZpbmUgUlhfUFJJT1JJVFlfVEhSRVNIMV9MRU5HVEhfSElHSF9HRVQoeCkgICAoKCh4KSAmIFJYX1BSSU9SSVRZX1RIUkVTSDFfTEVOR1RIX0hJR0hfTUFTSykgPj4gUlhfUFJJT1JJVFlfVEhSRVNIMV9MRU5HVEhfSElHSF9MU0IpCi0jZGVmaW5lIFJYX1BSSU9SSVRZX1RIUkVTSDFfTEVOR1RIX0hJR0hfU0VUKHgpICAgKCgoeCkgPDwgUlhfUFJJT1JJVFlfVEhSRVNIMV9MRU5HVEhfSElHSF9MU0IpICYgUlhfUFJJT1JJVFlfVEhSRVNIMV9MRU5HVEhfSElHSF9NQVNLKQotCi0jZGVmaW5lIFJYX1BSSU9SSVRZX1RIUkVTSDJfQUREUkVTUyAgICAgICAgICAgICAgMHgwMDAwODM3YwotI2RlZmluZSBSWF9QUklPUklUWV9USFJFU0gyX09GRlNFVCAgICAgICAgICAgICAgIDB4MDAwMDAzN2MKLSNkZWZpbmUgUlhfUFJJT1JJVFlfVEhSRVNIMl9OVUxMX1JTU0lfSElHSF9NU0IgICAzMQotI2RlZmluZSBSWF9QUklPUklUWV9USFJFU0gyX05VTExfUlNTSV9ISUdIX0xTQiAgIDI0Ci0jZGVmaW5lIFJYX1BSSU9SSVRZX1RIUkVTSDJfTlVMTF9SU1NJX0hJR0hfTUFTSyAgMHhmZjAwMDAwMAotI2RlZmluZSBSWF9QUklPUklUWV9USFJFU0gyX05VTExfUlNTSV9ISUdIX0dFVCh4KSAoKCh4KSAmIFJYX1BSSU9SSVRZX1RIUkVTSDJfTlVMTF9SU1NJX0hJR0hfTUFTSykgPj4gUlhfUFJJT1JJVFlfVEhSRVNIMl9OVUxMX1JTU0lfSElHSF9MU0IpCi0jZGVmaW5lIFJYX1BSSU9SSVRZX1RIUkVTSDJfTlVMTF9SU1NJX0hJR0hfU0VUKHgpICgoKHgpIDw8IFJYX1BSSU9SSVRZX1RIUkVTSDJfTlVMTF9SU1NJX0hJR0hfTFNCKSAmIFJYX1BSSU9SSVRZX1RIUkVTSDJfTlVMTF9SU1NJX0hJR0hfTUFTSykKLSNkZWZpbmUgUlhfUFJJT1JJVFlfVEhSRVNIMl9CRUFDT05fUlNTSV9ISUdIX01TQiAyMwotI2RlZmluZSBSWF9QUklPUklUWV9USFJFU0gyX0JFQUNPTl9SU1NJX0hJR0hfTFNCIDE2Ci0jZGVmaW5lIFJYX1BSSU9SSVRZX1RIUkVTSDJfQkVBQ09OX1JTU0lfSElHSF9NQVNLIDB4MDBmZjAwMDAKLSNkZWZpbmUgUlhfUFJJT1JJVFlfVEhSRVNIMl9CRUFDT05fUlNTSV9ISUdIX0dFVCh4KSAoKCh4KSAmIFJYX1BSSU9SSVRZX1RIUkVTSDJfQkVBQ09OX1JTU0lfSElHSF9NQVNLKSA+PiBSWF9QUklPUklUWV9USFJFU0gyX0JFQUNPTl9SU1NJX0hJR0hfTFNCKQotI2RlZmluZSBSWF9QUklPUklUWV9USFJFU0gyX0JFQUNPTl9SU1NJX0hJR0hfU0VUKHgpICgoKHgpIDw8IFJYX1BSSU9SSVRZX1RIUkVTSDJfQkVBQ09OX1JTU0lfSElHSF9MU0IpICYgUlhfUFJJT1JJVFlfVEhSRVNIMl9CRUFDT05fUlNTSV9ISUdIX01BU0spCi0jZGVmaW5lIFJYX1BSSU9SSVRZX1RIUkVTSDJfTUdNVF9SU1NJX0hJR0hfTVNCICAgMTUKLSNkZWZpbmUgUlhfUFJJT1JJVFlfVEhSRVNIMl9NR01UX1JTU0lfSElHSF9MU0IgICA4Ci0jZGVmaW5lIFJYX1BSSU9SSVRZX1RIUkVTSDJfTUdNVF9SU1NJX0hJR0hfTUFTSyAgMHgwMDAwZmYwMAotI2RlZmluZSBSWF9QUklPUklUWV9USFJFU0gyX01HTVRfUlNTSV9ISUdIX0dFVCh4KSAoKCh4KSAmIFJYX1BSSU9SSVRZX1RIUkVTSDJfTUdNVF9SU1NJX0hJR0hfTUFTSykgPj4gUlhfUFJJT1JJVFlfVEhSRVNIMl9NR01UX1JTU0lfSElHSF9MU0IpCi0jZGVmaW5lIFJYX1BSSU9SSVRZX1RIUkVTSDJfTUdNVF9SU1NJX0hJR0hfU0VUKHgpICgoKHgpIDw8IFJYX1BSSU9SSVRZX1RIUkVTSDJfTUdNVF9SU1NJX0hJR0hfTFNCKSAmIFJYX1BSSU9SSVRZX1RIUkVTSDJfTUdNVF9SU1NJX0hJR0hfTUFTSykKLSNkZWZpbmUgUlhfUFJJT1JJVFlfVEhSRVNIMl9QUkVTUF9SU1NJX0hJR0hfTVNCICA3Ci0jZGVmaW5lIFJYX1BSSU9SSVRZX1RIUkVTSDJfUFJFU1BfUlNTSV9ISUdIX0xTQiAgMAotI2RlZmluZSBSWF9QUklPUklUWV9USFJFU0gyX1BSRVNQX1JTU0lfSElHSF9NQVNLIDB4MDAwMDAwZmYKLSNkZWZpbmUgUlhfUFJJT1JJVFlfVEhSRVNIMl9QUkVTUF9SU1NJX0hJR0hfR0VUKHgpICgoKHgpICYgUlhfUFJJT1JJVFlfVEhSRVNIMl9QUkVTUF9SU1NJX0hJR0hfTUFTSykgPj4gUlhfUFJJT1JJVFlfVEhSRVNIMl9QUkVTUF9SU1NJX0hJR0hfTFNCKQotI2RlZmluZSBSWF9QUklPUklUWV9USFJFU0gyX1BSRVNQX1JTU0lfSElHSF9TRVQoeCkgKCgoeCkgPDwgUlhfUFJJT1JJVFlfVEhSRVNIMl9QUkVTUF9SU1NJX0hJR0hfTFNCKSAmIFJYX1BSSU9SSVRZX1RIUkVTSDJfUFJFU1BfUlNTSV9ISUdIX01BU0spCi0KLSNkZWZpbmUgUlhfUFJJT1JJVFlfVEhSRVNIM19BRERSRVNTICAgICAgICAgICAgICAweDAwMDA4MzgwCi0jZGVmaW5lIFJYX1BSSU9SSVRZX1RIUkVTSDNfT0ZGU0VUICAgICAgICAgICAgICAgMHgwMDAwMDM4MAotI2RlZmluZSBSWF9QUklPUklUWV9USFJFU0gzX1BTX1BPTExfUlNTSV9ISUdIX01TQiAxNQotI2RlZmluZSBSWF9QUklPUklUWV9USFJFU0gzX1BTX1BPTExfUlNTSV9ISUdIX0xTQiA4Ci0jZGVmaW5lIFJYX1BSSU9SSVRZX1RIUkVTSDNfUFNfUE9MTF9SU1NJX0hJR0hfTUFTSyAweDAwMDBmZjAwCi0jZGVmaW5lIFJYX1BSSU9SSVRZX1RIUkVTSDNfUFNfUE9MTF9SU1NJX0hJR0hfR0VUKHgpICgoKHgpICYgUlhfUFJJT1JJVFlfVEhSRVNIM19QU19QT0xMX1JTU0lfSElHSF9NQVNLKSA+PiBSWF9QUklPUklUWV9USFJFU0gzX1BTX1BPTExfUlNTSV9ISUdIX0xTQikKLSNkZWZpbmUgUlhfUFJJT1JJVFlfVEhSRVNIM19QU19QT0xMX1JTU0lfSElHSF9TRVQoeCkgKCgoeCkgPDwgUlhfUFJJT1JJVFlfVEhSRVNIM19QU19QT0xMX1JTU0lfSElHSF9MU0IpICYgUlhfUFJJT1JJVFlfVEhSRVNIM19QU19QT0xMX1JTU0lfSElHSF9NQVNLKQotI2RlZmluZSBSWF9QUklPUklUWV9USFJFU0gzX1BSRVFfUlNTSV9ISUdIX01TQiAgIDcKLSNkZWZpbmUgUlhfUFJJT1JJVFlfVEhSRVNIM19QUkVRX1JTU0lfSElHSF9MU0IgICAwCi0jZGVmaW5lIFJYX1BSSU9SSVRZX1RIUkVTSDNfUFJFUV9SU1NJX0hJR0hfTUFTSyAgMHgwMDAwMDBmZgotI2RlZmluZSBSWF9QUklPUklUWV9USFJFU0gzX1BSRVFfUlNTSV9ISUdIX0dFVCh4KSAoKCh4KSAmIFJYX1BSSU9SSVRZX1RIUkVTSDNfUFJFUV9SU1NJX0hJR0hfTUFTSykgPj4gUlhfUFJJT1JJVFlfVEhSRVNIM19QUkVRX1JTU0lfSElHSF9MU0IpCi0jZGVmaW5lIFJYX1BSSU9SSVRZX1RIUkVTSDNfUFJFUV9SU1NJX0hJR0hfU0VUKHgpICgoKHgpIDw8IFJYX1BSSU9SSVRZX1RIUkVTSDNfUFJFUV9SU1NJX0hJR0hfTFNCKSAmIFJYX1BSSU9SSVRZX1RIUkVTSDNfUFJFUV9SU1NJX0hJR0hfTUFTSykKLQotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQwX0FERFJFU1MgICAgICAgICAgICAgIDB4MDAwMDgzODQKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUMF9PRkZTRVQgICAgICAgICAgICAgICAweDAwMDAwMzg0Ci0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDBfWENBU1RfUlNTSV9ISUdIX01TQiAgMjkKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUMF9YQ0FTVF9SU1NJX0hJR0hfTFNCICAyNAotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQwX1hDQVNUX1JTU0lfSElHSF9NQVNLIDB4M2YwMDAwMDAKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUMF9YQ0FTVF9SU1NJX0hJR0hfR0VUKHgpICgoKHgpICYgUlhfUFJJT1JJVFlfT0ZGU0VUMF9YQ0FTVF9SU1NJX0hJR0hfTUFTSykgPj4gUlhfUFJJT1JJVFlfT0ZGU0VUMF9YQ0FTVF9SU1NJX0hJR0hfTFNCKQotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQwX1hDQVNUX1JTU0lfSElHSF9TRVQoeCkgKCgoeCkgPDwgUlhfUFJJT1JJVFlfT0ZGU0VUMF9YQ0FTVF9SU1NJX0hJR0hfTFNCKSAmIFJYX1BSSU9SSVRZX09GRlNFVDBfWENBU1RfUlNTSV9ISUdIX01BU0spCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDBfUlNTSV9MT1dfTVNCICAgICAgICAgMjMKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUMF9SU1NJX0xPV19MU0IgICAgICAgICAxOAotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQwX1JTU0lfTE9XX01BU0sgICAgICAgIDB4MDBmYzAwMDAKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUMF9SU1NJX0xPV19HRVQoeCkgICAgICAoKCh4KSAmIFJYX1BSSU9SSVRZX09GRlNFVDBfUlNTSV9MT1dfTUFTSykgPj4gUlhfUFJJT1JJVFlfT0ZGU0VUMF9SU1NJX0xPV19MU0IpCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDBfUlNTSV9MT1dfU0VUKHgpICAgICAgKCgoeCkgPDwgUlhfUFJJT1JJVFlfT0ZGU0VUMF9SU1NJX0xPV19MU0IpICYgUlhfUFJJT1JJVFlfT0ZGU0VUMF9SU1NJX0xPV19NQVNLKQotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQwX1JTU0lfSElHSF9NU0IgICAgICAgIDE3Ci0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDBfUlNTSV9ISUdIX0xTQiAgICAgICAgMTIKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUMF9SU1NJX0hJR0hfTUFTSyAgICAgICAweDAwMDNmMDAwCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDBfUlNTSV9ISUdIX0dFVCh4KSAgICAgKCgoeCkgJiBSWF9QUklPUklUWV9PRkZTRVQwX1JTU0lfSElHSF9NQVNLKSA+PiBSWF9QUklPUklUWV9PRkZTRVQwX1JTU0lfSElHSF9MU0IpCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDBfUlNTSV9ISUdIX1NFVCh4KSAgICAgKCgoeCkgPDwgUlhfUFJJT1JJVFlfT0ZGU0VUMF9SU1NJX0hJR0hfTFNCKSAmIFJYX1BSSU9SSVRZX09GRlNFVDBfUlNTSV9ISUdIX01BU0spCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDBfUEhZX1JBVEVfTE9XX01TQiAgICAgMTEKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUMF9QSFlfUkFURV9MT1dfTFNCICAgICA2Ci0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDBfUEhZX1JBVEVfTE9XX01BU0sgICAgMHgwMDAwMGZjMAotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQwX1BIWV9SQVRFX0xPV19HRVQoeCkgICgoKHgpICYgUlhfUFJJT1JJVFlfT0ZGU0VUMF9QSFlfUkFURV9MT1dfTUFTSykgPj4gUlhfUFJJT1JJVFlfT0ZGU0VUMF9QSFlfUkFURV9MT1dfTFNCKQotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQwX1BIWV9SQVRFX0xPV19TRVQoeCkgICgoKHgpIDw8IFJYX1BSSU9SSVRZX09GRlNFVDBfUEhZX1JBVEVfTE9XX0xTQikgJiBSWF9QUklPUklUWV9PRkZTRVQwX1BIWV9SQVRFX0xPV19NQVNLKQotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQwX1BIWV9SQVRFX0hJR0hfTVNCICAgIDUKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUMF9QSFlfUkFURV9ISUdIX0xTQiAgICAwCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDBfUEhZX1JBVEVfSElHSF9NQVNLICAgMHgwMDAwMDAzZgotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQwX1BIWV9SQVRFX0hJR0hfR0VUKHgpICgoKHgpICYgUlhfUFJJT1JJVFlfT0ZGU0VUMF9QSFlfUkFURV9ISUdIX01BU0spID4+IFJYX1BSSU9SSVRZX09GRlNFVDBfUEhZX1JBVEVfSElHSF9MU0IpCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDBfUEhZX1JBVEVfSElHSF9TRVQoeCkgKCgoeCkgPDwgUlhfUFJJT1JJVFlfT0ZGU0VUMF9QSFlfUkFURV9ISUdIX0xTQikgJiBSWF9QUklPUklUWV9PRkZTRVQwX1BIWV9SQVRFX0hJR0hfTUFTSykKLQotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQxX0FERFJFU1MgICAgICAgICAgICAgIDB4MDAwMDgzODgKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUMV9PRkZTRVQgICAgICAgICAgICAgICAweDAwMDAwMzg4Ci0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDFfUlRTX01TQiAgICAgICAgICAgICAgMjkKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUMV9SVFNfTFNCICAgICAgICAgICAgICAyNAotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQxX1JUU19NQVNLICAgICAgICAgICAgIDB4M2YwMDAwMDAKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUMV9SVFNfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIFJYX1BSSU9SSVRZX09GRlNFVDFfUlRTX01BU0spID4+IFJYX1BSSU9SSVRZX09GRlNFVDFfUlRTX0xTQikKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUMV9SVFNfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCBSWF9QUklPUklUWV9PRkZTRVQxX1JUU19MU0IpICYgUlhfUFJJT1JJVFlfT0ZGU0VUMV9SVFNfTUFTSykKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUMV9SRVRYX01TQiAgICAgICAgICAgICAyMwotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQxX1JFVFhfTFNCICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDFfUkVUWF9NQVNLICAgICAgICAgICAgMHgwMGZjMDAwMAotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQxX1JFVFhfR0VUKHgpICAgICAgICAgICgoKHgpICYgUlhfUFJJT1JJVFlfT0ZGU0VUMV9SRVRYX01BU0spID4+IFJYX1BSSU9SSVRZX09GRlNFVDFfUkVUWF9MU0IpCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDFfUkVUWF9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgUlhfUFJJT1JJVFlfT0ZGU0VUMV9SRVRYX0xTQikgJiBSWF9QUklPUklUWV9PRkZTRVQxX1JFVFhfTUFTSykKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUMV9QUkVTUF9SU1NJX0hJR0hfTVNCICAxNwotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQxX1BSRVNQX1JTU0lfSElHSF9MU0IgIDEyCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDFfUFJFU1BfUlNTSV9ISUdIX01BU0sgMHgwMDAzZjAwMAotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQxX1BSRVNQX1JTU0lfSElHSF9HRVQoeCkgKCgoeCkgJiBSWF9QUklPUklUWV9PRkZTRVQxX1BSRVNQX1JTU0lfSElHSF9NQVNLKSA+PiBSWF9QUklPUklUWV9PRkZTRVQxX1BSRVNQX1JTU0lfSElHSF9MU0IpCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDFfUFJFU1BfUlNTSV9ISUdIX1NFVCh4KSAoKCh4KSA8PCBSWF9QUklPUklUWV9PRkZTRVQxX1BSRVNQX1JTU0lfSElHSF9MU0IpICYgUlhfUFJJT1JJVFlfT0ZGU0VUMV9QUkVTUF9SU1NJX0hJR0hfTUFTSykKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUMV9MRU5HVEhfTE9XX01TQiAgICAgICAxMQotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQxX0xFTkdUSF9MT1dfTFNCICAgICAgIDYKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUMV9MRU5HVEhfTE9XX01BU0sgICAgICAweDAwMDAwZmMwCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDFfTEVOR1RIX0xPV19HRVQoeCkgICAgKCgoeCkgJiBSWF9QUklPUklUWV9PRkZTRVQxX0xFTkdUSF9MT1dfTUFTSykgPj4gUlhfUFJJT1JJVFlfT0ZGU0VUMV9MRU5HVEhfTE9XX0xTQikKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUMV9MRU5HVEhfTE9XX1NFVCh4KSAgICAoKCh4KSA8PCBSWF9QUklPUklUWV9PRkZTRVQxX0xFTkdUSF9MT1dfTFNCKSAmIFJYX1BSSU9SSVRZX09GRlNFVDFfTEVOR1RIX0xPV19NQVNLKQotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQxX0xFTkdUSF9ISUdIX01TQiAgICAgIDUKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUMV9MRU5HVEhfSElHSF9MU0IgICAgICAwCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDFfTEVOR1RIX0hJR0hfTUFTSyAgICAgMHgwMDAwMDAzZgotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQxX0xFTkdUSF9ISUdIX0dFVCh4KSAgICgoKHgpICYgUlhfUFJJT1JJVFlfT0ZGU0VUMV9MRU5HVEhfSElHSF9NQVNLKSA+PiBSWF9QUklPUklUWV9PRkZTRVQxX0xFTkdUSF9ISUdIX0xTQikKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUMV9MRU5HVEhfSElHSF9TRVQoeCkgICAoKCh4KSA8PCBSWF9QUklPUklUWV9PRkZTRVQxX0xFTkdUSF9ISUdIX0xTQikgJiBSWF9QUklPUklUWV9PRkZTRVQxX0xFTkdUSF9ISUdIX01BU0spCi0KLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUMl9BRERSRVNTICAgICAgICAgICAgICAweDAwMDA4MzhjCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDJfT0ZGU0VUICAgICAgICAgICAgICAgMHgwMDAwMDM4YwotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQyX0JFQUNPTl9NU0IgICAgICAgICAgIDI5Ci0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDJfQkVBQ09OX0xTQiAgICAgICAgICAgMjQKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUMl9CRUFDT05fTUFTSyAgICAgICAgICAweDNmMDAwMDAwCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDJfQkVBQ09OX0dFVCh4KSAgICAgICAgKCgoeCkgJiBSWF9QUklPUklUWV9PRkZTRVQyX0JFQUNPTl9NQVNLKSA+PiBSWF9QUklPUklUWV9PRkZTRVQyX0JFQUNPTl9MU0IpCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDJfQkVBQ09OX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgUlhfUFJJT1JJVFlfT0ZGU0VUMl9CRUFDT05fTFNCKSAmIFJYX1BSSU9SSVRZX09GRlNFVDJfQkVBQ09OX01BU0spCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDJfTUdNVF9NU0IgICAgICAgICAgICAgMjMKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUMl9NR01UX0xTQiAgICAgICAgICAgICAxOAotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQyX01HTVRfTUFTSyAgICAgICAgICAgIDB4MDBmYzAwMDAKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUMl9NR01UX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIFJYX1BSSU9SSVRZX09GRlNFVDJfTUdNVF9NQVNLKSA+PiBSWF9QUklPUklUWV9PRkZTRVQyX01HTVRfTFNCKQotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQyX01HTVRfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IFJYX1BSSU9SSVRZX09GRlNFVDJfTUdNVF9MU0IpICYgUlhfUFJJT1JJVFlfT0ZGU0VUMl9NR01UX01BU0spCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDJfQVRJTV9NU0IgICAgICAgICAgICAgMTcKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUMl9BVElNX0xTQiAgICAgICAgICAgICAxMgotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQyX0FUSU1fTUFTSyAgICAgICAgICAgIDB4MDAwM2YwMDAKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUMl9BVElNX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIFJYX1BSSU9SSVRZX09GRlNFVDJfQVRJTV9NQVNLKSA+PiBSWF9QUklPUklUWV9PRkZTRVQyX0FUSU1fTFNCKQotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQyX0FUSU1fU0VUKHgpICAgICAgICAgICgoKHgpIDw8IFJYX1BSSU9SSVRZX09GRlNFVDJfQVRJTV9MU0IpICYgUlhfUFJJT1JJVFlfT0ZGU0VUMl9BVElNX01BU0spCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDJfUFJFU1BfTVNCICAgICAgICAgICAgMTEKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUMl9QUkVTUF9MU0IgICAgICAgICAgICA2Ci0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDJfUFJFU1BfTUFTSyAgICAgICAgICAgMHgwMDAwMGZjMAotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQyX1BSRVNQX0dFVCh4KSAgICAgICAgICgoKHgpICYgUlhfUFJJT1JJVFlfT0ZGU0VUMl9QUkVTUF9NQVNLKSA+PiBSWF9QUklPUklUWV9PRkZTRVQyX1BSRVNQX0xTQikKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUMl9QUkVTUF9TRVQoeCkgICAgICAgICAoKCh4KSA8PCBSWF9QUklPUklUWV9PRkZTRVQyX1BSRVNQX0xTQikgJiBSWF9QUklPUklUWV9PRkZTRVQyX1BSRVNQX01BU0spCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDJfWENBU1RfTVNCICAgICAgICAgICAgNQotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQyX1hDQVNUX0xTQiAgICAgICAgICAgIDAKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUMl9YQ0FTVF9NQVNLICAgICAgICAgICAweDAwMDAwMDNmCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDJfWENBU1RfR0VUKHgpICAgICAgICAgKCgoeCkgJiBSWF9QUklPUklUWV9PRkZTRVQyX1hDQVNUX01BU0spID4+IFJYX1BSSU9SSVRZX09GRlNFVDJfWENBU1RfTFNCKQotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQyX1hDQVNUX1NFVCh4KSAgICAgICAgICgoKHgpIDw8IFJYX1BSSU9SSVRZX09GRlNFVDJfWENBU1RfTFNCKSAmIFJYX1BSSU9SSVRZX09GRlNFVDJfWENBU1RfTUFTSykKLQotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQzX0FERFJFU1MgICAgICAgICAgICAgIDB4MDAwMDgzOTAKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUM19PRkZTRVQgICAgICAgICAgICAgICAweDAwMDAwMzkwCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDNfUFNfUE9MTF9NU0IgICAgICAgICAgMjkKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUM19QU19QT0xMX0xTQiAgICAgICAgICAyNAotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQzX1BTX1BPTExfTUFTSyAgICAgICAgIDB4M2YwMDAwMDAKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUM19QU19QT0xMX0dFVCh4KSAgICAgICAoKCh4KSAmIFJYX1BSSU9SSVRZX09GRlNFVDNfUFNfUE9MTF9NQVNLKSA+PiBSWF9QUklPUklUWV9PRkZTRVQzX1BTX1BPTExfTFNCKQotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQzX1BTX1BPTExfU0VUKHgpICAgICAgICgoKHgpIDw8IFJYX1BSSU9SSVRZX09GRlNFVDNfUFNfUE9MTF9MU0IpICYgUlhfUFJJT1JJVFlfT0ZGU0VUM19QU19QT0xMX01BU0spCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDNfQU1TRFVfTVNCICAgICAgICAgICAgMjMKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUM19BTVNEVV9MU0IgICAgICAgICAgICAxOAotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQzX0FNU0RVX01BU0sgICAgICAgICAgIDB4MDBmYzAwMDAKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUM19BTVNEVV9HRVQoeCkgICAgICAgICAoKCh4KSAmIFJYX1BSSU9SSVRZX09GRlNFVDNfQU1TRFVfTUFTSykgPj4gUlhfUFJJT1JJVFlfT0ZGU0VUM19BTVNEVV9MU0IpCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDNfQU1TRFVfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgUlhfUFJJT1JJVFlfT0ZGU0VUM19BTVNEVV9MU0IpICYgUlhfUFJJT1JJVFlfT0ZGU0VUM19BTVNEVV9NQVNLKQotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQzX0FNUERVX01TQiAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDNfQU1QRFVfTFNCICAgICAgICAgICAgMTIKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUM19BTVBEVV9NQVNLICAgICAgICAgICAweDAwMDNmMDAwCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDNfQU1QRFVfR0VUKHgpICAgICAgICAgKCgoeCkgJiBSWF9QUklPUklUWV9PRkZTRVQzX0FNUERVX01BU0spID4+IFJYX1BSSU9SSVRZX09GRlNFVDNfQU1QRFVfTFNCKQotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQzX0FNUERVX1NFVCh4KSAgICAgICAgICgoKHgpIDw8IFJYX1BSSU9SSVRZX09GRlNFVDNfQU1QRFVfTFNCKSAmIFJYX1BSSU9SSVRZX09GRlNFVDNfQU1QRFVfTUFTSykKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUM19FT1NQX01TQiAgICAgICAgICAgICAxMQotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQzX0VPU1BfTFNCICAgICAgICAgICAgIDYKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUM19FT1NQX01BU0sgICAgICAgICAgICAweDAwMDAwZmMwCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDNfRU9TUF9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBSWF9QUklPUklUWV9PRkZTRVQzX0VPU1BfTUFTSykgPj4gUlhfUFJJT1JJVFlfT0ZGU0VUM19FT1NQX0xTQikKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUM19FT1NQX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBSWF9QUklPUklUWV9PRkZTRVQzX0VPU1BfTFNCKSAmIFJYX1BSSU9SSVRZX09GRlNFVDNfRU9TUF9NQVNLKQotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQzX01PUkVfTVNCICAgICAgICAgICAgIDUKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUM19NT1JFX0xTQiAgICAgICAgICAgICAwCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDNfTU9SRV9NQVNLICAgICAgICAgICAgMHgwMDAwMDAzZgotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQzX01PUkVfR0VUKHgpICAgICAgICAgICgoKHgpICYgUlhfUFJJT1JJVFlfT0ZGU0VUM19NT1JFX01BU0spID4+IFJYX1BSSU9SSVRZX09GRlNFVDNfTU9SRV9MU0IpCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDNfTU9SRV9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgUlhfUFJJT1JJVFlfT0ZGU0VUM19NT1JFX0xTQikgJiBSWF9QUklPUklUWV9PRkZTRVQzX01PUkVfTUFTSykKLQotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQ0X0FERFJFU1MgICAgICAgICAgICAgIDB4MDAwMDgzOTQKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUNF9PRkZTRVQgICAgICAgICAgICAgICAweDAwMDAwMzk0Ci0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDRfQkVBQ09OX1JTU0lfSElHSF9NU0IgMjkKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUNF9CRUFDT05fUlNTSV9ISUdIX0xTQiAyNAotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQ0X0JFQUNPTl9SU1NJX0hJR0hfTUFTSyAweDNmMDAwMDAwCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDRfQkVBQ09OX1JTU0lfSElHSF9HRVQoeCkgKCgoeCkgJiBSWF9QUklPUklUWV9PRkZTRVQ0X0JFQUNPTl9SU1NJX0hJR0hfTUFTSykgPj4gUlhfUFJJT1JJVFlfT0ZGU0VUNF9CRUFDT05fUlNTSV9ISUdIX0xTQikKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUNF9CRUFDT05fUlNTSV9ISUdIX1NFVCh4KSAoKCh4KSA8PCBSWF9QUklPUklUWV9PRkZTRVQ0X0JFQUNPTl9SU1NJX0hJR0hfTFNCKSAmIFJYX1BSSU9SSVRZX09GRlNFVDRfQkVBQ09OX1JTU0lfSElHSF9NQVNLKQotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQ0X01HTVRfUlNTSV9ISUdIX01TQiAgIDIzCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDRfTUdNVF9SU1NJX0hJR0hfTFNCICAgMTgKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUNF9NR01UX1JTU0lfSElHSF9NQVNLICAweDAwZmMwMDAwCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDRfTUdNVF9SU1NJX0hJR0hfR0VUKHgpICgoKHgpICYgUlhfUFJJT1JJVFlfT0ZGU0VUNF9NR01UX1JTU0lfSElHSF9NQVNLKSA+PiBSWF9QUklPUklUWV9PRkZTRVQ0X01HTVRfUlNTSV9ISUdIX0xTQikKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUNF9NR01UX1JTU0lfSElHSF9TRVQoeCkgKCgoeCkgPDwgUlhfUFJJT1JJVFlfT0ZGU0VUNF9NR01UX1JTU0lfSElHSF9MU0IpICYgUlhfUFJJT1JJVFlfT0ZGU0VUNF9NR01UX1JTU0lfSElHSF9NQVNLKQotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQ0X0JFQUNPTl9TU0lEX01TQiAgICAgIDE3Ci0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDRfQkVBQ09OX1NTSURfTFNCICAgICAgMTIKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUNF9CRUFDT05fU1NJRF9NQVNLICAgICAweDAwMDNmMDAwCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDRfQkVBQ09OX1NTSURfR0VUKHgpICAgKCgoeCkgJiBSWF9QUklPUklUWV9PRkZTRVQ0X0JFQUNPTl9TU0lEX01BU0spID4+IFJYX1BSSU9SSVRZX09GRlNFVDRfQkVBQ09OX1NTSURfTFNCKQotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQ0X0JFQUNPTl9TU0lEX1NFVCh4KSAgICgoKHgpIDw8IFJYX1BSSU9SSVRZX09GRlNFVDRfQkVBQ09OX1NTSURfTFNCKSAmIFJYX1BSSU9SSVRZX09GRlNFVDRfQkVBQ09OX1NTSURfTUFTSykKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUNF9OVUxMX01TQiAgICAgICAgICAgICAxMQotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQ0X05VTExfTFNCICAgICAgICAgICAgIDYKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUNF9OVUxMX01BU0sgICAgICAgICAgICAweDAwMDAwZmMwCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDRfTlVMTF9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBSWF9QUklPUklUWV9PRkZTRVQ0X05VTExfTUFTSykgPj4gUlhfUFJJT1JJVFlfT0ZGU0VUNF9OVUxMX0xTQikKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUNF9OVUxMX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBSWF9QUklPUklUWV9PRkZTRVQ0X05VTExfTFNCKSAmIFJYX1BSSU9SSVRZX09GRlNFVDRfTlVMTF9NQVNLKQotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQ0X1BSRVFfTVNCICAgICAgICAgICAgIDUKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUNF9QUkVRX0xTQiAgICAgICAgICAgICAwCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDRfUFJFUV9NQVNLICAgICAgICAgICAgMHgwMDAwMDAzZgotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQ0X1BSRVFfR0VUKHgpICAgICAgICAgICgoKHgpICYgUlhfUFJJT1JJVFlfT0ZGU0VUNF9QUkVRX01BU0spID4+IFJYX1BSSU9SSVRZX09GRlNFVDRfUFJFUV9MU0IpCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDRfUFJFUV9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgUlhfUFJJT1JJVFlfT0ZGU0VUNF9QUkVRX0xTQikgJiBSWF9QUklPUklUWV9PRkZTRVQ0X1BSRVFfTUFTSykKLQotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQ1X0FERFJFU1MgICAgICAgICAgICAgIDB4MDAwMDgzOTgKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUNV9PRkZTRVQgICAgICAgICAgICAgICAweDAwMDAwMzk4Ci0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDVfUFNfUE9MTF9SU1NJX0hJR0hfTVNCIDE3Ci0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDVfUFNfUE9MTF9SU1NJX0hJR0hfTFNCIDEyCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDVfUFNfUE9MTF9SU1NJX0hJR0hfTUFTSyAweDAwMDNmMDAwCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDVfUFNfUE9MTF9SU1NJX0hJR0hfR0VUKHgpICgoKHgpICYgUlhfUFJJT1JJVFlfT0ZGU0VUNV9QU19QT0xMX1JTU0lfSElHSF9NQVNLKSA+PiBSWF9QUklPUklUWV9PRkZTRVQ1X1BTX1BPTExfUlNTSV9ISUdIX0xTQikKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUNV9QU19QT0xMX1JTU0lfSElHSF9TRVQoeCkgKCgoeCkgPDwgUlhfUFJJT1JJVFlfT0ZGU0VUNV9QU19QT0xMX1JTU0lfSElHSF9MU0IpICYgUlhfUFJJT1JJVFlfT0ZGU0VUNV9QU19QT0xMX1JTU0lfSElHSF9NQVNLKQotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQ1X1BSRVFfUlNTSV9ISUdIX01TQiAgIDExCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDVfUFJFUV9SU1NJX0hJR0hfTFNCICAgNgotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQ1X1BSRVFfUlNTSV9ISUdIX01BU0sgIDB4MDAwMDBmYzAKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUNV9QUkVRX1JTU0lfSElHSF9HRVQoeCkgKCgoeCkgJiBSWF9QUklPUklUWV9PRkZTRVQ1X1BSRVFfUlNTSV9ISUdIX01BU0spID4+IFJYX1BSSU9SSVRZX09GRlNFVDVfUFJFUV9SU1NJX0hJR0hfTFNCKQotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQ1X1BSRVFfUlNTSV9ISUdIX1NFVCh4KSAoKCh4KSA8PCBSWF9QUklPUklUWV9PRkZTRVQ1X1BSRVFfUlNTSV9ISUdIX0xTQikgJiBSWF9QUklPUklUWV9PRkZTRVQ1X1BSRVFfUlNTSV9ISUdIX01BU0spCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDVfTlVMTF9SU1NJX0hJR0hfTVNCICAgNQotI2RlZmluZSBSWF9QUklPUklUWV9PRkZTRVQ1X05VTExfUlNTSV9ISUdIX0xTQiAgIDAKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUNV9OVUxMX1JTU0lfSElHSF9NQVNLICAweDAwMDAwMDNmCi0jZGVmaW5lIFJYX1BSSU9SSVRZX09GRlNFVDVfTlVMTF9SU1NJX0hJR0hfR0VUKHgpICgoKHgpICYgUlhfUFJJT1JJVFlfT0ZGU0VUNV9OVUxMX1JTU0lfSElHSF9NQVNLKSA+PiBSWF9QUklPUklUWV9PRkZTRVQ1X05VTExfUlNTSV9ISUdIX0xTQikKLSNkZWZpbmUgUlhfUFJJT1JJVFlfT0ZGU0VUNV9OVUxMX1JTU0lfSElHSF9TRVQoeCkgKCgoeCkgPDwgUlhfUFJJT1JJVFlfT0ZGU0VUNV9OVUxMX1JTU0lfSElHSF9MU0IpICYgUlhfUFJJT1JJVFlfT0ZGU0VUNV9OVUxMX1JTU0lfSElHSF9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfQlNTSUQyX0wzMl9BRERSRVNTICAgICAgICAgICAgICAgMHgwMDAwODM5YwotI2RlZmluZSBNQUNfUENVX0JTU0lEMl9MMzJfT0ZGU0VUICAgICAgICAgICAgICAgIDB4MDAwMDAzOWMKLSNkZWZpbmUgTUFDX1BDVV9CU1NJRDJfTDMyX0FERFJfTVNCICAgICAgICAgICAgICAzMQotI2RlZmluZSBNQUNfUENVX0JTU0lEMl9MMzJfQUREUl9MU0IgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9CU1NJRDJfTDMyX0FERFJfTUFTSyAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfQlNTSUQyX0wzMl9BRERSX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBNQUNfUENVX0JTU0lEMl9MMzJfQUREUl9NQVNLKSA+PiBNQUNfUENVX0JTU0lEMl9MMzJfQUREUl9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQlNTSUQyX0wzMl9BRERSX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9CU1NJRDJfTDMyX0FERFJfTFNCKSAmIE1BQ19QQ1VfQlNTSUQyX0wzMl9BRERSX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9CU1NJRDJfVTE2X0FERFJFU1MgICAgICAgICAgICAgICAweDAwMDA4M2EwCi0jZGVmaW5lIE1BQ19QQ1VfQlNTSUQyX1UxNl9PRkZTRVQgICAgICAgICAgICAgICAgMHgwMDAwMDNhMAotI2RlZmluZSBNQUNfUENVX0JTU0lEMl9VMTZfRU5BQkxFX01TQiAgICAgICAgICAgIDE2Ci0jZGVmaW5lIE1BQ19QQ1VfQlNTSUQyX1UxNl9FTkFCTEVfTFNCICAgICAgICAgICAgMTYKLSNkZWZpbmUgTUFDX1BDVV9CU1NJRDJfVTE2X0VOQUJMRV9NQVNLICAgICAgICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfQlNTSUQyX1UxNl9FTkFCTEVfR0VUKHgpICAgICAgICAgKCgoeCkgJiBNQUNfUENVX0JTU0lEMl9VMTZfRU5BQkxFX01BU0spID4+IE1BQ19QQ1VfQlNTSUQyX1UxNl9FTkFCTEVfTFNCKQotI2RlZmluZSBNQUNfUENVX0JTU0lEMl9VMTZfRU5BQkxFX1NFVCh4KSAgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfQlNTSUQyX1UxNl9FTkFCTEVfTFNCKSAmIE1BQ19QQ1VfQlNTSUQyX1UxNl9FTkFCTEVfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9CU1NJRDJfVTE2X0FERFJfTVNCICAgICAgICAgICAgICAxNQotI2RlZmluZSBNQUNfUENVX0JTU0lEMl9VMTZfQUREUl9MU0IgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9CU1NJRDJfVTE2X0FERFJfTUFTSyAgICAgICAgICAgICAweDAwMDBmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfQlNTSUQyX1UxNl9BRERSX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBNQUNfUENVX0JTU0lEMl9VMTZfQUREUl9NQVNLKSA+PiBNQUNfUENVX0JTU0lEMl9VMTZfQUREUl9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQlNTSUQyX1UxNl9BRERSX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9CU1NJRDJfVTE2X0FERFJfTFNCKSAmIE1BQ19QQ1VfQlNTSUQyX1UxNl9BRERSX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9UU0YxX1NUQVRVU19MMzJfQUREUkVTUyAgICAgICAgICAweDAwMDA4M2E0Ci0jZGVmaW5lIE1BQ19QQ1VfVFNGMV9TVEFUVVNfTDMyX09GRlNFVCAgICAgICAgICAgMHgwMDAwMDNhNAotI2RlZmluZSBNQUNfUENVX1RTRjFfU1RBVFVTX0wzMl9WQUxVRV9NU0IgICAgICAgIDMxCi0jZGVmaW5lIE1BQ19QQ1VfVFNGMV9TVEFUVVNfTDMyX1ZBTFVFX0xTQiAgICAgICAgMAotI2RlZmluZSBNQUNfUENVX1RTRjFfU1RBVFVTX0wzMl9WQUxVRV9NQVNLICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgTUFDX1BDVV9UU0YxX1NUQVRVU19MMzJfVkFMVUVfR0VUKHgpICAgICAoKCh4KSAmIE1BQ19QQ1VfVFNGMV9TVEFUVVNfTDMyX1ZBTFVFX01BU0spID4+IE1BQ19QQ1VfVFNGMV9TVEFUVVNfTDMyX1ZBTFVFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9UU0YxX1NUQVRVU19MMzJfVkFMVUVfU0VUKHgpICAgICAoKCh4KSA8PCBNQUNfUENVX1RTRjFfU1RBVFVTX0wzMl9WQUxVRV9MU0IpICYgTUFDX1BDVV9UU0YxX1NUQVRVU19MMzJfVkFMVUVfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX1RTRjFfU1RBVFVTX1UzMl9BRERSRVNTICAgICAgICAgIDB4MDAwMDgzYTgKLSNkZWZpbmUgTUFDX1BDVV9UU0YxX1NUQVRVU19VMzJfT0ZGU0VUICAgICAgICAgICAweDAwMDAwM2E4Ci0jZGVmaW5lIE1BQ19QQ1VfVFNGMV9TVEFUVVNfVTMyX1ZBTFVFX01TQiAgICAgICAgMzEKLSNkZWZpbmUgTUFDX1BDVV9UU0YxX1NUQVRVU19VMzJfVkFMVUVfTFNCICAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfVFNGMV9TVEFUVVNfVTMyX1ZBTFVFX01BU0sgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBNQUNfUENVX1RTRjFfU1RBVFVTX1UzMl9WQUxVRV9HRVQoeCkgICAgICgoKHgpICYgTUFDX1BDVV9UU0YxX1NUQVRVU19VMzJfVkFMVUVfTUFTSykgPj4gTUFDX1BDVV9UU0YxX1NUQVRVU19VMzJfVkFMVUVfTFNCKQotI2RlZmluZSBNQUNfUENVX1RTRjFfU1RBVFVTX1UzMl9WQUxVRV9TRVQoeCkgICAgICgoKHgpIDw8IE1BQ19QQ1VfVFNGMV9TVEFUVVNfVTMyX1ZBTFVFX0xTQikgJiBNQUNfUENVX1RTRjFfU1RBVFVTX1UzMl9WQUxVRV9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfVFNGMl9TVEFUVVNfTDMyX0FERFJFU1MgICAgICAgICAgMHgwMDAwODNhYwotI2RlZmluZSBNQUNfUENVX1RTRjJfU1RBVFVTX0wzMl9PRkZTRVQgICAgICAgICAgIDB4MDAwMDAzYWMKLSNkZWZpbmUgTUFDX1BDVV9UU0YyX1NUQVRVU19MMzJfVkFMVUVfTVNCICAgICAgICAzMQotI2RlZmluZSBNQUNfUENVX1RTRjJfU1RBVFVTX0wzMl9WQUxVRV9MU0IgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9UU0YyX1NUQVRVU19MMzJfVkFMVUVfTUFTSyAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfVFNGMl9TVEFUVVNfTDMyX1ZBTFVFX0dFVCh4KSAgICAgKCgoeCkgJiBNQUNfUENVX1RTRjJfU1RBVFVTX0wzMl9WQUxVRV9NQVNLKSA+PiBNQUNfUENVX1RTRjJfU1RBVFVTX0wzMl9WQUxVRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfVFNGMl9TVEFUVVNfTDMyX1ZBTFVFX1NFVCh4KSAgICAgKCgoeCkgPDwgTUFDX1BDVV9UU0YyX1NUQVRVU19MMzJfVkFMVUVfTFNCKSAmIE1BQ19QQ1VfVFNGMl9TVEFUVVNfTDMyX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9UU0YyX1NUQVRVU19VMzJfQUREUkVTUyAgICAgICAgICAweDAwMDA4M2IwCi0jZGVmaW5lIE1BQ19QQ1VfVFNGMl9TVEFUVVNfVTMyX09GRlNFVCAgICAgICAgICAgMHgwMDAwMDNiMAotI2RlZmluZSBNQUNfUENVX1RTRjJfU1RBVFVTX1UzMl9WQUxVRV9NU0IgICAgICAgIDMxCi0jZGVmaW5lIE1BQ19QQ1VfVFNGMl9TVEFUVVNfVTMyX1ZBTFVFX0xTQiAgICAgICAgMAotI2RlZmluZSBNQUNfUENVX1RTRjJfU1RBVFVTX1UzMl9WQUxVRV9NQVNLICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgTUFDX1BDVV9UU0YyX1NUQVRVU19VMzJfVkFMVUVfR0VUKHgpICAgICAoKCh4KSAmIE1BQ19QQ1VfVFNGMl9TVEFUVVNfVTMyX1ZBTFVFX01BU0spID4+IE1BQ19QQ1VfVFNGMl9TVEFUVVNfVTMyX1ZBTFVFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9UU0YyX1NUQVRVU19VMzJfVkFMVUVfU0VUKHgpICAgICAoKCh4KSA8PCBNQUNfUENVX1RTRjJfU1RBVFVTX1UzMl9WQUxVRV9MU0IpICYgTUFDX1BDVV9UU0YyX1NUQVRVU19VMzJfVkFMVUVfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX1RYQlVGX0JBX0FERFJFU1MgICAgICAgICAgICAgICAgIDB4MDAwMDg0MDAKLSNkZWZpbmUgTUFDX1BDVV9UWEJVRl9CQV9PRkZTRVQgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIE1BQ19QQ1VfVFhCVUZfQkFfREFUQV9NU0IgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgTUFDX1BDVV9UWEJVRl9CQV9EQVRBX0xTQiAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfVFhCVUZfQkFfREFUQV9NQVNLICAgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBNQUNfUENVX1RYQlVGX0JBX0RBVEFfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgTUFDX1BDVV9UWEJVRl9CQV9EQVRBX01BU0spID4+IE1BQ19QQ1VfVFhCVUZfQkFfREFUQV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfVFhCVUZfQkFfREFUQV9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9UWEJVRl9CQV9EQVRBX0xTQikgJiBNQUNfUENVX1RYQlVGX0JBX0RBVEFfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX0tFWV9DQUNIRV8xX0FERFJFU1MgICAgICAgICAgICAgIDB4MDAwMDg4MDAKLSNkZWZpbmUgTUFDX1BDVV9LRVlfQ0FDSEVfMV9PRkZTRVQgICAgICAgICAgICAgICAweDAwMDAwODAwCi0jZGVmaW5lIE1BQ19QQ1VfS0VZX0NBQ0hFXzFfREFUQV9NU0IgICAgICAgICAgICAgMzEKLSNkZWZpbmUgTUFDX1BDVV9LRVlfQ0FDSEVfMV9EQVRBX0xTQiAgICAgICAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfS0VZX0NBQ0hFXzFfREFUQV9NQVNLICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBNQUNfUENVX0tFWV9DQUNIRV8xX0RBVEFfR0VUKHgpICAgICAgICAgICgoKHgpICYgTUFDX1BDVV9LRVlfQ0FDSEVfMV9EQVRBX01BU0spID4+IE1BQ19QQ1VfS0VZX0NBQ0hFXzFfREFUQV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfS0VZX0NBQ0hFXzFfREFUQV9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9LRVlfQ0FDSEVfMV9EQVRBX0xTQikgJiBNQUNfUENVX0tFWV9DQUNIRV8xX0RBVEFfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX0JBU0VCQU5EXzBfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDk4MDAKLSNkZWZpbmUgTUFDX1BDVV9CQVNFQkFORF8wX09GRlNFVCAgICAgICAgICAgICAgICAweDAwMDAxODAwCi0jZGVmaW5lIE1BQ19QQ1VfQkFTRUJBTkRfMF9EQVRBX01TQiAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgTUFDX1BDVV9CQVNFQkFORF8wX0RBVEFfTFNCICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfQkFTRUJBTkRfMF9EQVRBX01BU0sgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBNQUNfUENVX0JBU0VCQU5EXzBfREFUQV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgTUFDX1BDVV9CQVNFQkFORF8wX0RBVEFfTUFTSykgPj4gTUFDX1BDVV9CQVNFQkFORF8wX0RBVEFfTFNCKQotI2RlZmluZSBNQUNfUENVX0JBU0VCQU5EXzBfREFUQV9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfQkFTRUJBTkRfMF9EQVRBX0xTQikgJiBNQUNfUENVX0JBU0VCQU5EXzBfREFUQV9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfQkFTRUJBTkRfMV9BRERSRVNTICAgICAgICAgICAgICAgMHgwMDAwYTAwMAotI2RlZmluZSBNQUNfUENVX0JBU0VCQU5EXzFfT0ZGU0VUICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKLSNkZWZpbmUgTUFDX1BDVV9CQVNFQkFORF8xX0RBVEFfTVNCICAgICAgICAgICAgICAzMQotI2RlZmluZSBNQUNfUENVX0JBU0VCQU5EXzFfREFUQV9MU0IgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9CQVNFQkFORF8xX0RBVEFfTUFTSyAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfQkFTRUJBTkRfMV9EQVRBX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBNQUNfUENVX0JBU0VCQU5EXzFfREFUQV9NQVNLKSA+PiBNQUNfUENVX0JBU0VCQU5EXzFfREFUQV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQkFTRUJBTkRfMV9EQVRBX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9CQVNFQkFORF8xX0RBVEFfTFNCKSAmIE1BQ19QQ1VfQkFTRUJBTkRfMV9EQVRBX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9CQVNFQkFORF8yX0FERFJFU1MgICAgICAgICAgICAgICAweDAwMDBjMDAwCi0jZGVmaW5lIE1BQ19QQ1VfQkFTRUJBTkRfMl9PRkZTRVQgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAotI2RlZmluZSBNQUNfUENVX0JBU0VCQU5EXzJfREFUQV9NU0IgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIE1BQ19QQ1VfQkFTRUJBTkRfMl9EQVRBX0xTQiAgICAgICAgICAgICAgMAotI2RlZmluZSBNQUNfUENVX0JBU0VCQU5EXzJfREFUQV9NQVNLICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgTUFDX1BDVV9CQVNFQkFORF8yX0RBVEFfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfQkFTRUJBTkRfMl9EQVRBX01BU0spID4+IE1BQ19QQ1VfQkFTRUJBTkRfMl9EQVRBX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9CQVNFQkFORF8yX0RBVEFfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCBNQUNfUENVX0JBU0VCQU5EXzJfREFUQV9MU0IpICYgTUFDX1BDVV9CQVNFQkFORF8yX0RBVEFfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX0JBU0VCQU5EXzNfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMGQwMDAKLSNkZWZpbmUgTUFDX1BDVV9CQVNFQkFORF8zX09GRlNFVCAgICAgICAgICAgICAgICAweDAwMDA1MDAwCi0jZGVmaW5lIE1BQ19QQ1VfQkFTRUJBTkRfM19EQVRBX01TQiAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgTUFDX1BDVV9CQVNFQkFORF8zX0RBVEFfTFNCICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfQkFTRUJBTkRfM19EQVRBX01BU0sgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBNQUNfUENVX0JBU0VCQU5EXzNfREFUQV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgTUFDX1BDVV9CQVNFQkFORF8zX0RBVEFfTUFTSykgPj4gTUFDX1BDVV9CQVNFQkFORF8zX0RBVEFfTFNCKQotI2RlZmluZSBNQUNfUENVX0JBU0VCQU5EXzNfREFUQV9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfQkFTRUJBTkRfM19EQVRBX0xTQikgJiBNQUNfUENVX0JBU0VCQU5EXzNfREFUQV9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfQlVGX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwZTAwMAotI2RlZmluZSBNQUNfUENVX0JVRl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwMDAKLSNkZWZpbmUgTUFDX1BDVV9CVUZfREFUQV9NU0IgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBNQUNfUENVX0JVRl9EQVRBX0xTQiAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9CVUZfREFUQV9NQVNLICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfQlVGX0RBVEFfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiBNQUNfUENVX0JVRl9EQVRBX01BU0spID4+IE1BQ19QQ1VfQlVGX0RBVEFfTFNCKQotI2RlZmluZSBNQUNfUENVX0JVRl9EQVRBX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfQlVGX0RBVEFfTFNCKSAmIE1BQ19QQ1VfQlVGX0RBVEFfTUFTSykKLQotCi0jaWZuZGVmIF9fQVNTRU1CTEVSX18KLQotdHlwZWRlZiBzdHJ1Y3QgbWFjX3BjdV9yZWdfcyB7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X3N0YV9hZGRyX2wzMjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3Vfc3RhX2FkZHJfdTE2OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9ic3NpZF9sMzI7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X2Jzc2lkX3UxNjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfYmNuX3Jzc2lfYXZlOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9hY2tfY3RzX3RpbWVvdXQ7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X2Jjbl9yc3NpX2N0bDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfdXNlY19sYXRlbmN5OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcGN1X21heF9jZnBfZHVyOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9yeF9maWx0ZXI7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X21jYXN0X2ZpbHRlcl9sMzI7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X21jYXN0X2ZpbHRlcl91MzI7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X2RpYWdfc3c7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X3RzdF9hZGRhYzsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfZGVmX2FudGVubmE7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X2Flc19tdXRlX21hc2tfMDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfYWVzX211dGVfbWFza18xOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9nYXRlZF9jbGtzOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9vYnNfYnVzXzI7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X29ic19idXNfMTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfZHltX21pbW9fcHdyX3NhdmU7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X2xhc3RfYmVhY29uX3RzZjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfbmF2OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9ydHNfc3VjY2Vzc19jbnQ7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X3J0c19mYWlsX2NudDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfYWNrX2ZhaWxfY250OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9mY3NfZmFpbF9jbnQ7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X2JlYWNvbl9jbnQ7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X3hybW9kZTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfeHJkZWw7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X3hydG87Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X3hyY3JwOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV94cnN0bXA7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X2FkZHIxX21hc2tfbDMyOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9hZGRyMV9tYXNrX3UxNjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfdHBjOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV90eF9mcmFtZV9jbnQ7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X3J4X2ZyYW1lX2NudDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfcnhfY2xlYXJfY250OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9jeWNsZV9jbnQ7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X3F1aWV0X3RpbWVfMTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfcXVpZXRfdGltZV8yOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9xb3Nfbm9fYWNrOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9waHlfZXJyb3JfbWFzazsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfeHJsYXQ7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X3J4YnVmOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9taWNfcW9zX2NvbnRyb2w7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X21pY19xb3Nfc2VsZWN0OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9taXNjX21vZGU7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X2ZpbHRlcl9vZmRtX2NudDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfZmlsdGVyX2Nja19jbnQ7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X3BoeV9lcnJfY250XzE7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X3BoeV9lcnJfY250XzFfbWFzazsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfcGh5X2Vycl9jbnRfMjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfcGh5X2Vycl9jbnRfMl9tYXNrOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV90c2ZfdGhyZXNob2xkOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9waHlfZXJyb3JfZWlmc19tYXNrOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9waHlfZXJyX2NudF8zOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9waHlfZXJyX2NudF8zX21hc2s7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X2JsdWV0b290aF9tb2RlOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9ibHVldG9vdGhfd2VpZ2h0czsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfYmx1ZXRvb3RoX21vZGUyOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV90eHNpZnM7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X3R4b3BfeDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfdHhvcF8wXzM7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X3R4b3BfNF83OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV90eG9wXzhfMTE7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X3R4b3BfMTJfMTU7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X2xvZ2ljX2FuYWx5emVyOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9sb2dpY19hbmFseXplcl8zMmw7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X2xvZ2ljX2FuYWx5emVyXzE2dTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfcGh5X2Vycl9jbnRfbWFza19jb250OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9hemltdXRoX21vZGU7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1XzIwXzQwX21vZGU7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X3J4X2NsZWFyX2RpZmZfY250OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9zZWxmX2dlbl9hbnRlbm5hX21hc2s7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X2JhX2Jhcl9jb250cm9sOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9sZWdhY3lfcGxjcF9zcG9vZjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfcGh5X2Vycm9yX21hc2tfY29udDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfdHhfdGltZXI7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X3R4YnVmX2N0cmw7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X21pc2NfbW9kZTI7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X2FsdF9hZXNfbXV0ZV9tYXNrOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9hemltdXRoX3RpbWVfc3RhbXA7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X21heF9jZnBfZHVyOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9oY2ZfdGltZW91dDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfYmx1ZXRvb3RoX3dlaWdodHMyOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9ibHVldG9vdGhfdHNmX2J0X2FjdGl2ZTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfYmx1ZXRvb3RoX3RzZl9idF9wcmlvcml0eTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfYmx1ZXRvb3RoX21vZGUzOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9ibHVldG9vdGhfbW9kZTQ7Ci0gIHVuc2lnbmVkIGNoYXIgcGFkMFsxNDhdOyAvKiBwYWQgdG8gMHgyMDAgKi8KLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfYnRfYnRbNjRdOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9idF9idF9hc3luYzsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfYnRfd2xfMTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfYnRfd2xfMjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfYnRfd2xfMzsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfYnRfd2xfNDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfY29leF9lcHRhOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9jb2V4X2xuYW1heGdhaW4xOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9jb2V4X2xuYW1heGdhaW4yOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9jb2V4X2xuYW1heGdhaW4zOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9jb2V4X2xuYW1heGdhaW40OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9iYXNpY19yYXRlX3NldDA7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X2Jhc2ljX3JhdGVfc2V0MTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfYmFzaWNfcmF0ZV9zZXQyOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9iYXNpY19yYXRlX3NldDM7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X3J4X2ludF9zdGF0dXMwOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9yeF9pbnRfc3RhdHVzMTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfcnhfaW50X3N0YXR1czI7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X3J4X2ludF9zdGF0dXMzOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgaHRfaGFsZl9naV9yYXRlMTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGh0X2hhbGZfZ2lfcmF0ZTI7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBodF9mdWxsX2dpX3JhdGUxOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgaHRfZnVsbF9naV9yYXRlMjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGxlZ2FjeV9yYXRlMTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGxlZ2FjeV9yYXRlMjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGxlZ2FjeV9yYXRlMzsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHJ4X2ludF9maWx0ZXI7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCByeF9pbnRfb3ZlcmZsb3c7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCByeF9maWx0ZXJfdGhyZXNoOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcnhfZmlsdGVyX3RocmVzaDE7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCByeF9wcmlvcml0eV90aHJlc2gwOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcnhfcHJpb3JpdHlfdGhyZXNoMTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHJ4X3ByaW9yaXR5X3RocmVzaDI7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCByeF9wcmlvcml0eV90aHJlc2gzOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcnhfcHJpb3JpdHlfb2Zmc2V0MDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHJ4X3ByaW9yaXR5X29mZnNldDE7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCByeF9wcmlvcml0eV9vZmZzZXQyOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcnhfcHJpb3JpdHlfb2Zmc2V0MzsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHJ4X3ByaW9yaXR5X29mZnNldDQ7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCByeF9wcmlvcml0eV9vZmZzZXQ1OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9ic3NpZDJfbDMyOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9ic3NpZDJfdTE2OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV90c2YxX3N0YXR1c19sMzI7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X3RzZjFfc3RhdHVzX3UzMjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfdHNmMl9zdGF0dXNfbDMyOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV90c2YyX3N0YXR1c191MzI7Ci0gIHVuc2lnbmVkIGNoYXIgcGFkMVs3Nl07IC8qIHBhZCB0byAweDQwMCAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV90eGJ1Zl9iYVs2NF07Ci0gIHVuc2lnbmVkIGNoYXIgcGFkMls3NjhdOyAvKiBwYWQgdG8gMHg4MDAgKi8KLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3Vfa2V5X2NhY2hlXzFbMjU2XTsKLSAgdW5zaWduZWQgY2hhciBwYWQzWzMwNzJdOyAvKiBwYWQgdG8gMHgxODAwICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X2Jhc2ViYW5kXzBbNTEyXTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfYmFzZWJhbmRfMVsyMDQ4XTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfYmFzZWJhbmRfMlsxMDI0XTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfYmFzZWJhbmRfM1sxMDI0XTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfYnVmWzUxMl07Ci19IG1hY19wY3VfcmVnX3Q7Ci0KLSNlbmRpZiAvKiBfX0FTU0VNQkxFUl9fICovCi0KLSNlbmRpZiAvKiBfTUFDX1BDVV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHc0LjAvaHcvbWJveF9ob3N0X3JlZy5oIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHc0LjAvaHcvbWJveF9ob3N0X3JlZy5oCmluZGV4IDNhZjU2MjEuLjEwOWYyNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3NC4wL2h3L21ib3hfaG9zdF9yZWcuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzQuMC9ody9tYm94X2hvc3RfcmVnLmgKQEAgLTIxLDE3ICsyMSw0IEBACiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogCi0jaWZkZWYgV0xBTl9IRUFERVJTCi0KICNpbmNsdWRlICJtYm94X3dsYW5faG9zdF9yZWcuaCIKLQotCi0jaWZuZGVmIEJUX0hFQURFUlMKLQotCi0KLSNlbmRpZgotI2VuZGlmCi0KLQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzQuMC9ody9tYm94X3JlZy5oIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHc0LjAvaHcvbWJveF9yZWcuaAppbmRleCBjYzY3NTg1Li43MmZhNDgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzQuMC9ody9tYm94X3JlZy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3NC4wL2h3L21ib3hfcmVnLmgKQEAgLTIxLDExICsyMSw4IEBACiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogCi0jaWZkZWYgV0xBTl9IRUFERVJTCi0KICNpbmNsdWRlICJtYm94X3dsYW5fcmVnLmgiCiAKLQogI2lmbmRlZiBCVF9IRUFERVJTCiAKICNkZWZpbmUgTUJPWF9GSUZPX0FERFJFU1MgV0xBTl9NQk9YX0ZJRk9fQUREUkVTUwpAQCAtNTUyLDkgKzU0OSw0IEBACiAjZGVmaW5lIEhPU1RfSUZfV0lORE9XX0RBVEFfR0VUKHgpIFdMQU5fSE9TVF9JRl9XSU5ET1dfREFUQV9HRVQoeCkKICNkZWZpbmUgSE9TVF9JRl9XSU5ET1dfREFUQV9TRVQoeCkgV0xBTl9IT1NUX0lGX1dJTkRPV19EQVRBX1NFVCh4KQogCi0KICNlbmRpZgotI2VuZGlmCi0KLQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzQuMC9ody9tYm94X3dsYW5faG9zdF9yZWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3NC4wL2h3L21ib3hfd2xhbl9ob3N0X3JlZy5oCmluZGV4IDYwODU1MDIuLjAzOGQwZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3NC4wL2h3L21ib3hfd2xhbl9ob3N0X3JlZy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3NC4wL2h3L21ib3hfd2xhbl9ob3N0X3JlZy5oCkBAIC00NjgsNTUgKzQ2OCw0IEBACiAjZGVmaW5lIENJU19XSU5ET1dfREFUQV9TRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgQ0lTX1dJTkRPV19EQVRBX0xTQikgJiBDSVNfV0lORE9XX0RBVEFfTUFTSykKIAogCi0jaWZuZGVmIF9fQVNTRU1CTEVSX18KLQotdHlwZWRlZiBzdHJ1Y3QgbWJveF93bGFuX2hvc3RfcmVnX3JlZ19zIHsKLSAgdW5zaWduZWQgY2hhciBwYWQwWzEwMjRdOyAvKiBwYWQgdG8gMHg0MDAgKi8KLSAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBob3N0X2ludF9zdGF0dXM7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgY3B1X2ludF9zdGF0dXM7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgZXJyb3JfaW50X3N0YXR1czsKLSAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBjb3VudGVyX2ludF9zdGF0dXM7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgbWJveF9mcmFtZTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciByeF9sb29rYWhlYWRfdmFsaWQ7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgaG9zdF9pbnRfc3RhdHVzMjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBnbWJveF9yeF9hdmFpbDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciByeF9sb29rYWhlYWQwWzRdOwotICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIHJ4X2xvb2thaGVhZDFbNF07Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgcnhfbG9va2FoZWFkMls0XTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciByeF9sb29rYWhlYWQzWzRdOwotICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGludF9zdGF0dXNfZW5hYmxlOwotICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGNwdV9pbnRfc3RhdHVzX2VuYWJsZTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBlcnJvcl9zdGF0dXNfZW5hYmxlOwotICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGNvdW50ZXJfaW50X3N0YXR1c19lbmFibGU7Ci0gIHVuc2lnbmVkIGNoYXIgcGFkMVs0XTsgLyogcGFkIHRvIDB4NDIwICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgY291bnRbOF07Ci0gIHVuc2lnbmVkIGNoYXIgcGFkMlsyNF07IC8qIHBhZCB0byAweDQ0MCAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGNvdW50X2RlY1szMl07Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgc2NyYXRjaFs4XTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBmaWZvX3RpbWVvdXQ7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgZmlmb190aW1lb3V0X2VuYWJsZTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBkaXNhYmxlX3NsZWVwOwotICB1bnNpZ25lZCBjaGFyIHBhZDNbNV07IC8qIHBhZCB0byAweDQ3MCAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGxvY2FsX2J1czsKLSAgdW5zaWduZWQgY2hhciBwYWQ0WzFdOyAvKiBwYWQgdG8gMHg0NzIgKi8KLSAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBpbnRfd2xhbjsKLSAgdW5zaWduZWQgY2hhciBwYWQ1WzFdOyAvKiBwYWQgdG8gMHg0NzQgKi8KLSAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciB3aW5kb3dfZGF0YVs0XTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciB3aW5kb3dfd3JpdGVfYWRkcls0XTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciB3aW5kb3dfcmVhZF9hZGRyWzRdOwotICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGhvc3RfY3RybF9zcGlfY29uZmlnOwotICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGhvc3RfY3RybF9zcGlfc3RhdHVzOwotICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIG5vbl9hc3NvY19zbGVlcF9lbjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBjcHVfZGJnX3NlbDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBjcHVfZGJnWzRdOwotICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGludF9zdGF0dXMyX2VuYWJsZTsKLSAgdW5zaWduZWQgY2hhciBwYWQ2WzddOyAvKiBwYWQgdG8gMHg0OTAgKi8KLSAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBnbWJveF9yeF9sb29rYWhlYWRbOF07Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgZ21ib3hfcnhfbG9va2FoZWFkX211eDsKLSAgdW5zaWduZWQgY2hhciBwYWQ3WzM1OV07IC8qIHBhZCB0byAweDYwMCAqLwotICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGNpc193aW5kb3dbNTEyXTsKLX0gbWJveF93bGFuX2hvc3RfcmVnX3JlZ190OwotCi0jZW5kaWYgLyogX19BU1NFTUJMRVJfXyAqLwotCiAjZW5kaWYgLyogX01CT1hfV0xBTl9IT1NUX1JFR19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHc0LjAvaHcvbWJveF93bGFuX3JlZy5oIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHc0LjAvaHcvbWJveF93bGFuX3JlZy5oCmluZGV4IGUwMDI3MGYuLmY1MTY3YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3NC4wL2h3L21ib3hfd2xhbl9yZWcuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzQuMC9ody9tYm94X3dsYW5fcmVnLmgKQEAgLTU4Niw1MyArNTg2LDQgQEAKICNkZWZpbmUgV0xBTl9IT1NUX0lGX1dJTkRPV19EQVRBX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIFdMQU5fSE9TVF9JRl9XSU5ET1dfREFUQV9NQVNLKSA+PiBXTEFOX0hPU1RfSUZfV0lORE9XX0RBVEFfTFNCKQogI2RlZmluZSBXTEFOX0hPU1RfSUZfV0lORE9XX0RBVEFfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IFdMQU5fSE9TVF9JRl9XSU5ET1dfREFUQV9MU0IpICYgV0xBTl9IT1NUX0lGX1dJTkRPV19EQVRBX01BU0spCiAKLQotI2lmbmRlZiBfX0FTU0VNQkxFUl9fCi0KLXR5cGVkZWYgc3RydWN0IG1ib3hfd2xhbl9yZWdfcmVnX3MgewotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9tYm94X2ZpZm9bNF07Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX21ib3hfZmlmb19zdGF0dXM7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX21ib3hfZG1hX3BvbGljeTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fbWJveDBfZG1hX3J4X2Rlc2NyaXB0b3JfYmFzZTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fbWJveDBfZG1hX3J4X2NvbnRyb2w7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX21ib3gwX2RtYV90eF9kZXNjcmlwdG9yX2Jhc2U7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX21ib3gwX2RtYV90eF9jb250cm9sOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9tYm94MV9kbWFfcnhfZGVzY3JpcHRvcl9iYXNlOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9tYm94MV9kbWFfcnhfY29udHJvbDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fbWJveDFfZG1hX3R4X2Rlc2NyaXB0b3JfYmFzZTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fbWJveDFfZG1hX3R4X2NvbnRyb2w7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX21ib3gyX2RtYV9yeF9kZXNjcmlwdG9yX2Jhc2U7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX21ib3gyX2RtYV9yeF9jb250cm9sOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9tYm94Ml9kbWFfdHhfZGVzY3JpcHRvcl9iYXNlOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9tYm94Ml9kbWFfdHhfY29udHJvbDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fbWJveDNfZG1hX3J4X2Rlc2NyaXB0b3JfYmFzZTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fbWJveDNfZG1hX3J4X2NvbnRyb2w7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX21ib3gzX2RtYV90eF9kZXNjcmlwdG9yX2Jhc2U7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX21ib3gzX2RtYV90eF9jb250cm9sOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9tYm94X2ludF9zdGF0dXM7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX21ib3hfaW50X2VuYWJsZTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5faW50X2hvc3Q7Ci0gIHVuc2lnbmVkIGNoYXIgcGFkMFsyOF07IC8qIHBhZCB0byAweDgwICovCi0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX2xvY2FsX2NvdW50WzhdOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9jb3VudF9pbmNbOF07Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX2xvY2FsX3NjcmF0Y2hbOF07Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX3VzZV9sb2NhbF9idXM7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX3NkaW9fY29uZmlnOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9tYm94X2RlYnVnOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9tYm94X2ZpZm9fcmVzZXQ7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX21ib3hfdHhmaWZvX3BvcFs0XTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fbWJveF9yeGZpZm9fcG9wWzRdOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9zZGlvX2RlYnVnOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9nbWJveDBfZG1hX3J4X2Rlc2NyaXB0b3JfYmFzZTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fZ21ib3gwX2RtYV9yeF9jb250cm9sOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9nbWJveDBfZG1hX3R4X2Rlc2NyaXB0b3JfYmFzZTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fZ21ib3gwX2RtYV90eF9jb250cm9sOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9nbWJveF9pbnRfc3RhdHVzOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9nbWJveF9pbnRfZW5hYmxlOwotICB1bnNpZ25lZCBjaGFyIHBhZDFbNzg5Ml07IC8qIHBhZCB0byAweDIwMDAgKi8KLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5faG9zdF9pZl93aW5kb3dbMjA0OF07Ci19IG1ib3hfd2xhbl9yZWdfcmVnX3Q7Ci0KLSNlbmRpZiAvKiBfX0FTU0VNQkxFUl9fICovCi0KICNlbmRpZiAvKiBfTUJPWF9XTEFOX1JFR19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHc0LjAvaHcvcmRtYV9yZWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3NC4wL2h3L3JkbWFfcmVnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2ZmZkYTUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHc0LjAvaHcvcmRtYV9yZWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDU2NCArMCwwIEBACi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENvcHlyaWdodCAoYykgMjAwNC0yMDEwIEF0aGVyb3MgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gCi0vLwotLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0vLyBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotLy8KLS8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotLy8gV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotLy8gTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLS8vIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLS8vIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotLy8gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLS8vIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0vLwotLy8KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBBdXRob3Iocyk6ID0iQXRoZXJvcyIKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0KLSNpZm5kZWYgX1JETUFfUkVHX1JFR19IXwotI2RlZmluZSBfUkRNQV9SRUdfUkVHX0hfCi0KLSNkZWZpbmUgRE1BX0NPTkZJR19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCi0jZGVmaW5lIERNQV9DT05GSUdfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAotI2RlZmluZSBETUFfQ09ORklHX1dMQkJfUFdEX0VOX01TQiAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgRE1BX0NPTkZJR19XTEJCX1BXRF9FTl9MU0IgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIERNQV9DT05GSUdfV0xCQl9QV0RfRU5fTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBETUFfQ09ORklHX1dMQkJfUFdEX0VOX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgRE1BX0NPTkZJR19XTEJCX1BXRF9FTl9NQVNLKSA+PiBETUFfQ09ORklHX1dMQkJfUFdEX0VOX0xTQikKLSNkZWZpbmUgRE1BX0NPTkZJR19XTEJCX1BXRF9FTl9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBETUFfQ09ORklHX1dMQkJfUFdEX0VOX0xTQikgJiBETUFfQ09ORklHX1dMQkJfUFdEX0VOX01BU0spCi0jZGVmaW5lIERNQV9DT05GSUdfV0xNQUNfUFdEX0VOX01TQiAgICAgICAgICAgICAgMwotI2RlZmluZSBETUFfQ09ORklHX1dMTUFDX1BXRF9FTl9MU0IgICAgICAgICAgICAgIDMKLSNkZWZpbmUgRE1BX0NPTkZJR19XTE1BQ19QV0RfRU5fTUFTSyAgICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIERNQV9DT05GSUdfV0xNQUNfUFdEX0VOX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBETUFfQ09ORklHX1dMTUFDX1BXRF9FTl9NQVNLKSA+PiBETUFfQ09ORklHX1dMTUFDX1BXRF9FTl9MU0IpCi0jZGVmaW5lIERNQV9DT05GSUdfV0xNQUNfUFdEX0VOX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgRE1BX0NPTkZJR19XTE1BQ19QV0RfRU5fTFNCKSAmIERNQV9DT05GSUdfV0xNQUNfUFdEX0VOX01BU0spCi0jZGVmaW5lIERNQV9DT05GSUdfRU5BQkxFX1JFVEVOVElPTl9NU0IgICAgICAgICAgMgotI2RlZmluZSBETUFfQ09ORklHX0VOQUJMRV9SRVRFTlRJT05fTFNCICAgICAgICAgIDIKLSNkZWZpbmUgRE1BX0NPTkZJR19FTkFCTEVfUkVURU5USU9OX01BU0sgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIERNQV9DT05GSUdfRU5BQkxFX1JFVEVOVElPTl9HRVQoeCkgICAgICAgKCgoeCkgJiBETUFfQ09ORklHX0VOQUJMRV9SRVRFTlRJT05fTUFTSykgPj4gRE1BX0NPTkZJR19FTkFCTEVfUkVURU5USU9OX0xTQikKLSNkZWZpbmUgRE1BX0NPTkZJR19FTkFCTEVfUkVURU5USU9OX1NFVCh4KSAgICAgICAoKCh4KSA8PCBETUFfQ09ORklHX0VOQUJMRV9SRVRFTlRJT05fTFNCKSAmIERNQV9DT05GSUdfRU5BQkxFX1JFVEVOVElPTl9NQVNLKQotI2RlZmluZSBETUFfQ09ORklHX1JUQ19QUklPUklUWV9NU0IgICAgICAgICAgICAgIDEKLSNkZWZpbmUgRE1BX0NPTkZJR19SVENfUFJJT1JJVFlfTFNCICAgICAgICAgICAgICAxCi0jZGVmaW5lIERNQV9DT05GSUdfUlRDX1BSSU9SSVRZX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBETUFfQ09ORklHX1JUQ19QUklPUklUWV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgRE1BX0NPTkZJR19SVENfUFJJT1JJVFlfTUFTSykgPj4gRE1BX0NPTkZJR19SVENfUFJJT1JJVFlfTFNCKQotI2RlZmluZSBETUFfQ09ORklHX1JUQ19QUklPUklUWV9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IERNQV9DT05GSUdfUlRDX1BSSU9SSVRZX0xTQikgJiBETUFfQ09ORklHX1JUQ19QUklPUklUWV9NQVNLKQotI2RlZmluZSBETUFfQ09ORklHX0RNQV9UWVBFX01TQiAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgRE1BX0NPTkZJR19ETUFfVFlQRV9MU0IgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIERNQV9DT05GSUdfRE1BX1RZUEVfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBETUFfQ09ORklHX0RNQV9UWVBFX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgRE1BX0NPTkZJR19ETUFfVFlQRV9NQVNLKSA+PiBETUFfQ09ORklHX0RNQV9UWVBFX0xTQikKLSNkZWZpbmUgRE1BX0NPTkZJR19ETUFfVFlQRV9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBETUFfQ09ORklHX0RNQV9UWVBFX0xTQikgJiBETUFfQ09ORklHX0RNQV9UWVBFX01BU0spCi0KLSNkZWZpbmUgRE1BX0NPTlRST0xfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIERNQV9DT05UUk9MX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBETUFfQ09OVFJPTF9TVEFSVF9NU0IgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgRE1BX0NPTlRST0xfU1RBUlRfTFNCICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIERNQV9DT05UUk9MX1NUQVJUX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBETUFfQ09OVFJPTF9TVEFSVF9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgRE1BX0NPTlRST0xfU1RBUlRfTUFTSykgPj4gRE1BX0NPTlRST0xfU1RBUlRfTFNCKQotI2RlZmluZSBETUFfQ09OVFJPTF9TVEFSVF9TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IERNQV9DT05UUk9MX1NUQVJUX0xTQikgJiBETUFfQ09OVFJPTF9TVEFSVF9NQVNLKQotI2RlZmluZSBETUFfQ09OVFJPTF9TVE9QX01TQiAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgRE1BX0NPTlRST0xfU1RPUF9MU0IgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIERNQV9DT05UUk9MX1NUT1BfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBETUFfQ09OVFJPTF9TVE9QX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgRE1BX0NPTlRST0xfU1RPUF9NQVNLKSA+PiBETUFfQ09OVFJPTF9TVE9QX0xTQikKLSNkZWZpbmUgRE1BX0NPTlRST0xfU1RPUF9TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBETUFfQ09OVFJPTF9TVE9QX0xTQikgJiBETUFfQ09OVFJPTF9TVE9QX01BU0spCi0KLSNkZWZpbmUgRE1BX1NSQ19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIERNQV9TUkNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBETUFfU1JDX0FERFJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIERNQV9TUkNfQUREUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBETUFfU1JDX0FERFJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmMKLSNkZWZpbmUgRE1BX1NSQ19BRERSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIERNQV9TUkNfQUREUl9NQVNLKSA+PiBETUFfU1JDX0FERFJfTFNCKQotI2RlZmluZSBETUFfU1JDX0FERFJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IERNQV9TUkNfQUREUl9MU0IpICYgRE1BX1NSQ19BRERSX01BU0spCi0KLSNkZWZpbmUgRE1BX0RFU1RfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBjCi0jZGVmaW5lIERNQV9ERVNUX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwYwotI2RlZmluZSBETUFfREVTVF9BRERSX01TQiAgICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIERNQV9ERVNUX0FERFJfTFNCICAgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBETUFfREVTVF9BRERSX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmMKLSNkZWZpbmUgRE1BX0RFU1RfQUREUl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIERNQV9ERVNUX0FERFJfTUFTSykgPj4gRE1BX0RFU1RfQUREUl9MU0IpCi0jZGVmaW5lIERNQV9ERVNUX0FERFJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgRE1BX0RFU1RfQUREUl9MU0IpICYgRE1BX0RFU1RfQUREUl9NQVNLKQotCi0jZGVmaW5lIERNQV9MRU5HVEhfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBETUFfTEVOR1RIX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgRE1BX0xFTkdUSF9XT1JEU19NU0IgICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBETUFfTEVOR1RIX1dPUkRTX0xTQiAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgRE1BX0xFTkdUSF9XT1JEU19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDAwZmZmCi0jZGVmaW5lIERNQV9MRU5HVEhfV09SRFNfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiBETUFfTEVOR1RIX1dPUkRTX01BU0spID4+IERNQV9MRU5HVEhfV09SRFNfTFNCKQotI2RlZmluZSBETUFfTEVOR1RIX1dPUkRTX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IERNQV9MRU5HVEhfV09SRFNfTFNCKSAmIERNQV9MRU5HVEhfV09SRFNfTUFTSykKLQotI2RlZmluZSBWTUNfQkFTRV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKLSNkZWZpbmUgVk1DX0JBU0VfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE0Ci0jZGVmaW5lIFZNQ19CQVNFX0FERFJfTVNCICAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgVk1DX0JBU0VfQUREUl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFZNQ19CQVNFX0FERFJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHhmZmZmZmZmYwotI2RlZmluZSBWTUNfQkFTRV9BRERSX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgVk1DX0JBU0VfQUREUl9NQVNLKSA+PiBWTUNfQkFTRV9BRERSX0xTQikKLSNkZWZpbmUgVk1DX0JBU0VfQUREUl9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBWTUNfQkFTRV9BRERSX0xTQikgJiBWTUNfQkFTRV9BRERSX01BU0spCi0KLSNkZWZpbmUgSU5ESVJFQ1RfUkVHX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4Ci0jZGVmaW5lIElORElSRUNUX1JFR19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAotI2RlZmluZSBJTkRJUkVDVF9SRUdfSURfTVNCICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIElORElSRUNUX1JFR19JRF9MU0IgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBJTkRJUkVDVF9SRUdfSURfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmMKLSNkZWZpbmUgSU5ESVJFQ1RfUkVHX0lEX0dFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIElORElSRUNUX1JFR19JRF9NQVNLKSA+PiBJTkRJUkVDVF9SRUdfSURfTFNCKQotI2RlZmluZSBJTkRJUkVDVF9SRUdfSURfU0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IElORElSRUNUX1JFR19JRF9MU0IpICYgSU5ESVJFQ1RfUkVHX0lEX01BU0spCi0KLSNkZWZpbmUgSU5ESVJFQ1RfUkVUVVJOX0FERFJFU1MgICAgICAgICAgICAgICAgICAweDAwMDAwMDFjCi0jZGVmaW5lIElORElSRUNUX1JFVFVSTl9PRkZTRVQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxYwotI2RlZmluZSBJTkRJUkVDVF9SRVRVUk5fQUREUl9NU0IgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIElORElSRUNUX1JFVFVSTl9BRERSX0xTQiAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBJTkRJUkVDVF9SRVRVUk5fQUREUl9NQVNLICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmMKLSNkZWZpbmUgSU5ESVJFQ1RfUkVUVVJOX0FERFJfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIElORElSRUNUX1JFVFVSTl9BRERSX01BU0spID4+IElORElSRUNUX1JFVFVSTl9BRERSX0xTQikKLSNkZWZpbmUgSU5ESVJFQ1RfUkVUVVJOX0FERFJfU0VUKHgpICAgICAgICAgICAgICAoKCh4KSA8PCBJTkRJUkVDVF9SRVRVUk5fQUREUl9MU0IpICYgSU5ESVJFQ1RfUkVUVVJOX0FERFJfTUFTSykKLQotI2RlZmluZSBSRE1BX1JFR0lPTl8wX19BRERSRVNTICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgUkRNQV9SRUdJT05fMF9fT0ZGU0VUICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIFJETUFfUkVHSU9OXzBfX0FERFJfTVNCICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUkRNQV9SRUdJT05fMF9fQUREUl9MU0IgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBSRE1BX1JFR0lPTl8wX19BRERSX01BU0sgICAgICAgICAgICAgICAgIDB4ZmZmZmUwMDAKLSNkZWZpbmUgUkRNQV9SRUdJT05fMF9fQUREUl9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIFJETUFfUkVHSU9OXzBfX0FERFJfTUFTSykgPj4gUkRNQV9SRUdJT05fMF9fQUREUl9MU0IpCi0jZGVmaW5lIFJETUFfUkVHSU9OXzBfX0FERFJfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgUkRNQV9SRUdJT05fMF9fQUREUl9MU0IpICYgUkRNQV9SRUdJT05fMF9fQUREUl9NQVNLKQotI2RlZmluZSBSRE1BX1JFR0lPTl8wX19MRU5HVEhfTVNCICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFJETUFfUkVHSU9OXzBfX0xFTkdUSF9MU0IgICAgICAgICAgICAgICAgMgotI2RlZmluZSBSRE1BX1JFR0lPTl8wX19MRU5HVEhfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDFmZmMKLSNkZWZpbmUgUkRNQV9SRUdJT05fMF9fTEVOR1RIX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIFJETUFfUkVHSU9OXzBfX0xFTkdUSF9NQVNLKSA+PiBSRE1BX1JFR0lPTl8wX19MRU5HVEhfTFNCKQotI2RlZmluZSBSRE1BX1JFR0lPTl8wX19MRU5HVEhfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IFJETUFfUkVHSU9OXzBfX0xFTkdUSF9MU0IpICYgUkRNQV9SRUdJT05fMF9fTEVOR1RIX01BU0spCi0jZGVmaW5lIFJETUFfUkVHSU9OXzBfX0lORElfTVNCICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBSRE1BX1JFR0lPTl8wX19JTkRJX0xTQiAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUkRNQV9SRUdJT05fMF9fSU5ESV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFJETUFfUkVHSU9OXzBfX0lORElfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBSRE1BX1JFR0lPTl8wX19JTkRJX01BU0spID4+IFJETUFfUkVHSU9OXzBfX0lORElfTFNCKQotI2RlZmluZSBSRE1BX1JFR0lPTl8wX19JTkRJX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IFJETUFfUkVHSU9OXzBfX0lORElfTFNCKSAmIFJETUFfUkVHSU9OXzBfX0lORElfTUFTSykKLSNkZWZpbmUgUkRNQV9SRUdJT05fMF9fTkVYVF9NU0IgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFJETUFfUkVHSU9OXzBfX05FWFRfTFNCICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBSRE1BX1JFR0lPTl8wX19ORVhUX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUkRNQV9SRUdJT05fMF9fTkVYVF9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIFJETUFfUkVHSU9OXzBfX05FWFRfTUFTSykgPj4gUkRNQV9SRUdJT05fMF9fTkVYVF9MU0IpCi0jZGVmaW5lIFJETUFfUkVHSU9OXzBfX05FWFRfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgUkRNQV9SRUdJT05fMF9fTkVYVF9MU0IpICYgUkRNQV9SRUdJT05fMF9fTkVYVF9NQVNLKQotCi0jZGVmaW5lIFJETUFfUkVHSU9OXzFfX0FERFJFU1MgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAotI2RlZmluZSBSRE1BX1JFR0lPTl8xX19PRkZTRVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKLSNkZWZpbmUgUkRNQV9SRUdJT05fMV9fQUREUl9NU0IgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBSRE1BX1JFR0lPTl8xX19BRERSX0xTQiAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFJETUFfUkVHSU9OXzFfX0FERFJfTUFTSyAgICAgICAgICAgICAgICAgMHhmZmZmZTAwMAotI2RlZmluZSBSRE1BX1JFR0lPTl8xX19BRERSX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgUkRNQV9SRUdJT05fMV9fQUREUl9NQVNLKSA+PiBSRE1BX1JFR0lPTl8xX19BRERSX0xTQikKLSNkZWZpbmUgUkRNQV9SRUdJT05fMV9fQUREUl9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBSRE1BX1JFR0lPTl8xX19BRERSX0xTQikgJiBSRE1BX1JFR0lPTl8xX19BRERSX01BU0spCi0jZGVmaW5lIFJETUFfUkVHSU9OXzFfX0xFTkdUSF9NU0IgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUkRNQV9SRUdJT05fMV9fTEVOR1RIX0xTQiAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFJETUFfUkVHSU9OXzFfX0xFTkdUSF9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMWZmYwotI2RlZmluZSBSRE1BX1JFR0lPTl8xX19MRU5HVEhfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgUkRNQV9SRUdJT05fMV9fTEVOR1RIX01BU0spID4+IFJETUFfUkVHSU9OXzFfX0xFTkdUSF9MU0IpCi0jZGVmaW5lIFJETUFfUkVHSU9OXzFfX0xFTkdUSF9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgUkRNQV9SRUdJT05fMV9fTEVOR1RIX0xTQikgJiBSRE1BX1JFR0lPTl8xX19MRU5HVEhfTUFTSykKLSNkZWZpbmUgUkRNQV9SRUdJT05fMV9fSU5ESV9NU0IgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFJETUFfUkVHSU9OXzFfX0lORElfTFNCICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBSRE1BX1JFR0lPTl8xX19JTkRJX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgUkRNQV9SRUdJT05fMV9fSU5ESV9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIFJETUFfUkVHSU9OXzFfX0lORElfTUFTSykgPj4gUkRNQV9SRUdJT05fMV9fSU5ESV9MU0IpCi0jZGVmaW5lIFJETUFfUkVHSU9OXzFfX0lORElfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgUkRNQV9SRUdJT05fMV9fSU5ESV9MU0IpICYgUkRNQV9SRUdJT05fMV9fSU5ESV9NQVNLKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xX19ORVhUX01TQiAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUkRNQV9SRUdJT05fMV9fTkVYVF9MU0IgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFJETUFfUkVHSU9OXzFfX05FWFRfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBSRE1BX1JFR0lPTl8xX19ORVhUX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgUkRNQV9SRUdJT05fMV9fTkVYVF9NQVNLKSA+PiBSRE1BX1JFR0lPTl8xX19ORVhUX0xTQikKLSNkZWZpbmUgUkRNQV9SRUdJT05fMV9fTkVYVF9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBSRE1BX1JFR0lPTl8xX19ORVhUX0xTQikgJiBSRE1BX1JFR0lPTl8xX19ORVhUX01BU0spCi0KLSNkZWZpbmUgUkRNQV9SRUdJT05fMl9fQUREUkVTUyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4Ci0jZGVmaW5lIFJETUFfUkVHSU9OXzJfX09GRlNFVCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAotI2RlZmluZSBSRE1BX1JFR0lPTl8yX19BRERSX01TQiAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFJETUFfUkVHSU9OXzJfX0FERFJfTFNCICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUkRNQV9SRUdJT05fMl9fQUREUl9NQVNLICAgICAgICAgICAgICAgICAweGZmZmZlMDAwCi0jZGVmaW5lIFJETUFfUkVHSU9OXzJfX0FERFJfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBSRE1BX1JFR0lPTl8yX19BRERSX01BU0spID4+IFJETUFfUkVHSU9OXzJfX0FERFJfTFNCKQotI2RlZmluZSBSRE1BX1JFR0lPTl8yX19BRERSX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IFJETUFfUkVHSU9OXzJfX0FERFJfTFNCKSAmIFJETUFfUkVHSU9OXzJfX0FERFJfTUFTSykKLSNkZWZpbmUgUkRNQV9SRUdJT05fMl9fTEVOR1RIX01TQiAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBSRE1BX1JFR0lPTl8yX19MRU5HVEhfTFNCICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUkRNQV9SRUdJT05fMl9fTEVOR1RIX01BU0sgICAgICAgICAgICAgICAweDAwMDAxZmZjCi0jZGVmaW5lIFJETUFfUkVHSU9OXzJfX0xFTkdUSF9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBSRE1BX1JFR0lPTl8yX19MRU5HVEhfTUFTSykgPj4gUkRNQV9SRUdJT05fMl9fTEVOR1RIX0xTQikKLSNkZWZpbmUgUkRNQV9SRUdJT05fMl9fTEVOR1RIX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBSRE1BX1JFR0lPTl8yX19MRU5HVEhfTFNCKSAmIFJETUFfUkVHSU9OXzJfX0xFTkdUSF9NQVNLKQotI2RlZmluZSBSRE1BX1JFR0lPTl8yX19JTkRJX01TQiAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUkRNQV9SRUdJT05fMl9fSU5ESV9MU0IgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFJETUFfUkVHSU9OXzJfX0lORElfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBSRE1BX1JFR0lPTl8yX19JTkRJX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgUkRNQV9SRUdJT05fMl9fSU5ESV9NQVNLKSA+PiBSRE1BX1JFR0lPTl8yX19JTkRJX0xTQikKLSNkZWZpbmUgUkRNQV9SRUdJT05fMl9fSU5ESV9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBSRE1BX1JFR0lPTl8yX19JTkRJX0xTQikgJiBSRE1BX1JFR0lPTl8yX19JTkRJX01BU0spCi0jZGVmaW5lIFJETUFfUkVHSU9OXzJfX05FWFRfTVNCICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBSRE1BX1JFR0lPTl8yX19ORVhUX0xTQiAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUkRNQV9SRUdJT05fMl9fTkVYVF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFJETUFfUkVHSU9OXzJfX05FWFRfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBSRE1BX1JFR0lPTl8yX19ORVhUX01BU0spID4+IFJETUFfUkVHSU9OXzJfX05FWFRfTFNCKQotI2RlZmluZSBSRE1BX1JFR0lPTl8yX19ORVhUX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IFJETUFfUkVHSU9OXzJfX05FWFRfTFNCKSAmIFJETUFfUkVHSU9OXzJfX05FWFRfTUFTSykKLQotI2RlZmluZSBSRE1BX1JFR0lPTl8zX19BRERSRVNTICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMmMKLSNkZWZpbmUgUkRNQV9SRUdJT05fM19fT0ZGU0VUICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJjCi0jZGVmaW5lIFJETUFfUkVHSU9OXzNfX0FERFJfTVNCICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUkRNQV9SRUdJT05fM19fQUREUl9MU0IgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBSRE1BX1JFR0lPTl8zX19BRERSX01BU0sgICAgICAgICAgICAgICAgIDB4ZmZmZmUwMDAKLSNkZWZpbmUgUkRNQV9SRUdJT05fM19fQUREUl9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIFJETUFfUkVHSU9OXzNfX0FERFJfTUFTSykgPj4gUkRNQV9SRUdJT05fM19fQUREUl9MU0IpCi0jZGVmaW5lIFJETUFfUkVHSU9OXzNfX0FERFJfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgUkRNQV9SRUdJT05fM19fQUREUl9MU0IpICYgUkRNQV9SRUdJT05fM19fQUREUl9NQVNLKQotI2RlZmluZSBSRE1BX1JFR0lPTl8zX19MRU5HVEhfTVNCICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFJETUFfUkVHSU9OXzNfX0xFTkdUSF9MU0IgICAgICAgICAgICAgICAgMgotI2RlZmluZSBSRE1BX1JFR0lPTl8zX19MRU5HVEhfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDFmZmMKLSNkZWZpbmUgUkRNQV9SRUdJT05fM19fTEVOR1RIX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIFJETUFfUkVHSU9OXzNfX0xFTkdUSF9NQVNLKSA+PiBSRE1BX1JFR0lPTl8zX19MRU5HVEhfTFNCKQotI2RlZmluZSBSRE1BX1JFR0lPTl8zX19MRU5HVEhfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IFJETUFfUkVHSU9OXzNfX0xFTkdUSF9MU0IpICYgUkRNQV9SRUdJT05fM19fTEVOR1RIX01BU0spCi0jZGVmaW5lIFJETUFfUkVHSU9OXzNfX0lORElfTVNCICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBSRE1BX1JFR0lPTl8zX19JTkRJX0xTQiAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUkRNQV9SRUdJT05fM19fSU5ESV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFJETUFfUkVHSU9OXzNfX0lORElfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBSRE1BX1JFR0lPTl8zX19JTkRJX01BU0spID4+IFJETUFfUkVHSU9OXzNfX0lORElfTFNCKQotI2RlZmluZSBSRE1BX1JFR0lPTl8zX19JTkRJX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IFJETUFfUkVHSU9OXzNfX0lORElfTFNCKSAmIFJETUFfUkVHSU9OXzNfX0lORElfTUFTSykKLSNkZWZpbmUgUkRNQV9SRUdJT05fM19fTkVYVF9NU0IgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFJETUFfUkVHSU9OXzNfX05FWFRfTFNCICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBSRE1BX1JFR0lPTl8zX19ORVhUX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUkRNQV9SRUdJT05fM19fTkVYVF9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIFJETUFfUkVHSU9OXzNfX05FWFRfTUFTSykgPj4gUkRNQV9SRUdJT05fM19fTkVYVF9MU0IpCi0jZGVmaW5lIFJETUFfUkVHSU9OXzNfX05FWFRfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgUkRNQV9SRUdJT05fM19fTkVYVF9MU0IpICYgUkRNQV9SRUdJT05fM19fTkVYVF9NQVNLKQotCi0jZGVmaW5lIFJETUFfUkVHSU9OXzRfX0FERFJFU1MgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAotI2RlZmluZSBSRE1BX1JFR0lPTl80X19PRkZTRVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKLSNkZWZpbmUgUkRNQV9SRUdJT05fNF9fQUREUl9NU0IgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBSRE1BX1JFR0lPTl80X19BRERSX0xTQiAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFJETUFfUkVHSU9OXzRfX0FERFJfTUFTSyAgICAgICAgICAgICAgICAgMHhmZmZmZTAwMAotI2RlZmluZSBSRE1BX1JFR0lPTl80X19BRERSX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgUkRNQV9SRUdJT05fNF9fQUREUl9NQVNLKSA+PiBSRE1BX1JFR0lPTl80X19BRERSX0xTQikKLSNkZWZpbmUgUkRNQV9SRUdJT05fNF9fQUREUl9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBSRE1BX1JFR0lPTl80X19BRERSX0xTQikgJiBSRE1BX1JFR0lPTl80X19BRERSX01BU0spCi0jZGVmaW5lIFJETUFfUkVHSU9OXzRfX0xFTkdUSF9NU0IgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUkRNQV9SRUdJT05fNF9fTEVOR1RIX0xTQiAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFJETUFfUkVHSU9OXzRfX0xFTkdUSF9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMWZmYwotI2RlZmluZSBSRE1BX1JFR0lPTl80X19MRU5HVEhfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgUkRNQV9SRUdJT05fNF9fTEVOR1RIX01BU0spID4+IFJETUFfUkVHSU9OXzRfX0xFTkdUSF9MU0IpCi0jZGVmaW5lIFJETUFfUkVHSU9OXzRfX0xFTkdUSF9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgUkRNQV9SRUdJT05fNF9fTEVOR1RIX0xTQikgJiBSRE1BX1JFR0lPTl80X19MRU5HVEhfTUFTSykKLSNkZWZpbmUgUkRNQV9SRUdJT05fNF9fSU5ESV9NU0IgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFJETUFfUkVHSU9OXzRfX0lORElfTFNCICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBSRE1BX1JFR0lPTl80X19JTkRJX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgUkRNQV9SRUdJT05fNF9fSU5ESV9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIFJETUFfUkVHSU9OXzRfX0lORElfTUFTSykgPj4gUkRNQV9SRUdJT05fNF9fSU5ESV9MU0IpCi0jZGVmaW5lIFJETUFfUkVHSU9OXzRfX0lORElfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgUkRNQV9SRUdJT05fNF9fSU5ESV9MU0IpICYgUkRNQV9SRUdJT05fNF9fSU5ESV9NQVNLKQotI2RlZmluZSBSRE1BX1JFR0lPTl80X19ORVhUX01TQiAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUkRNQV9SRUdJT05fNF9fTkVYVF9MU0IgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFJETUFfUkVHSU9OXzRfX05FWFRfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBSRE1BX1JFR0lPTl80X19ORVhUX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgUkRNQV9SRUdJT05fNF9fTkVYVF9NQVNLKSA+PiBSRE1BX1JFR0lPTl80X19ORVhUX0xTQikKLSNkZWZpbmUgUkRNQV9SRUdJT05fNF9fTkVYVF9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBSRE1BX1JFR0lPTl80X19ORVhUX0xTQikgJiBSRE1BX1JFR0lPTl80X19ORVhUX01BU0spCi0KLSNkZWZpbmUgUkRNQV9SRUdJT05fNV9fQUREUkVTUyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0Ci0jZGVmaW5lIFJETUFfUkVHSU9OXzVfX09GRlNFVCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAotI2RlZmluZSBSRE1BX1JFR0lPTl81X19BRERSX01TQiAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFJETUFfUkVHSU9OXzVfX0FERFJfTFNCICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUkRNQV9SRUdJT05fNV9fQUREUl9NQVNLICAgICAgICAgICAgICAgICAweGZmZmZlMDAwCi0jZGVmaW5lIFJETUFfUkVHSU9OXzVfX0FERFJfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBSRE1BX1JFR0lPTl81X19BRERSX01BU0spID4+IFJETUFfUkVHSU9OXzVfX0FERFJfTFNCKQotI2RlZmluZSBSRE1BX1JFR0lPTl81X19BRERSX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IFJETUFfUkVHSU9OXzVfX0FERFJfTFNCKSAmIFJETUFfUkVHSU9OXzVfX0FERFJfTUFTSykKLSNkZWZpbmUgUkRNQV9SRUdJT05fNV9fTEVOR1RIX01TQiAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBSRE1BX1JFR0lPTl81X19MRU5HVEhfTFNCICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUkRNQV9SRUdJT05fNV9fTEVOR1RIX01BU0sgICAgICAgICAgICAgICAweDAwMDAxZmZjCi0jZGVmaW5lIFJETUFfUkVHSU9OXzVfX0xFTkdUSF9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBSRE1BX1JFR0lPTl81X19MRU5HVEhfTUFTSykgPj4gUkRNQV9SRUdJT05fNV9fTEVOR1RIX0xTQikKLSNkZWZpbmUgUkRNQV9SRUdJT05fNV9fTEVOR1RIX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBSRE1BX1JFR0lPTl81X19MRU5HVEhfTFNCKSAmIFJETUFfUkVHSU9OXzVfX0xFTkdUSF9NQVNLKQotI2RlZmluZSBSRE1BX1JFR0lPTl81X19JTkRJX01TQiAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUkRNQV9SRUdJT05fNV9fSU5ESV9MU0IgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFJETUFfUkVHSU9OXzVfX0lORElfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBSRE1BX1JFR0lPTl81X19JTkRJX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgUkRNQV9SRUdJT05fNV9fSU5ESV9NQVNLKSA+PiBSRE1BX1JFR0lPTl81X19JTkRJX0xTQikKLSNkZWZpbmUgUkRNQV9SRUdJT05fNV9fSU5ESV9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBSRE1BX1JFR0lPTl81X19JTkRJX0xTQikgJiBSRE1BX1JFR0lPTl81X19JTkRJX01BU0spCi0jZGVmaW5lIFJETUFfUkVHSU9OXzVfX05FWFRfTVNCICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBSRE1BX1JFR0lPTl81X19ORVhUX0xTQiAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUkRNQV9SRUdJT05fNV9fTkVYVF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFJETUFfUkVHSU9OXzVfX05FWFRfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBSRE1BX1JFR0lPTl81X19ORVhUX01BU0spID4+IFJETUFfUkVHSU9OXzVfX05FWFRfTFNCKQotI2RlZmluZSBSRE1BX1JFR0lPTl81X19ORVhUX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IFJETUFfUkVHSU9OXzVfX05FWFRfTFNCKSAmIFJETUFfUkVHSU9OXzVfX05FWFRfTUFTSykKLQotI2RlZmluZSBSRE1BX1JFR0lPTl82X19BRERSRVNTICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKLSNkZWZpbmUgUkRNQV9SRUdJT05fNl9fT0ZGU0VUICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM4Ci0jZGVmaW5lIFJETUFfUkVHSU9OXzZfX0FERFJfTVNCICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUkRNQV9SRUdJT05fNl9fQUREUl9MU0IgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBSRE1BX1JFR0lPTl82X19BRERSX01BU0sgICAgICAgICAgICAgICAgIDB4ZmZmZmUwMDAKLSNkZWZpbmUgUkRNQV9SRUdJT05fNl9fQUREUl9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIFJETUFfUkVHSU9OXzZfX0FERFJfTUFTSykgPj4gUkRNQV9SRUdJT05fNl9fQUREUl9MU0IpCi0jZGVmaW5lIFJETUFfUkVHSU9OXzZfX0FERFJfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgUkRNQV9SRUdJT05fNl9fQUREUl9MU0IpICYgUkRNQV9SRUdJT05fNl9fQUREUl9NQVNLKQotI2RlZmluZSBSRE1BX1JFR0lPTl82X19MRU5HVEhfTVNCICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFJETUFfUkVHSU9OXzZfX0xFTkdUSF9MU0IgICAgICAgICAgICAgICAgMgotI2RlZmluZSBSRE1BX1JFR0lPTl82X19MRU5HVEhfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDFmZmMKLSNkZWZpbmUgUkRNQV9SRUdJT05fNl9fTEVOR1RIX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIFJETUFfUkVHSU9OXzZfX0xFTkdUSF9NQVNLKSA+PiBSRE1BX1JFR0lPTl82X19MRU5HVEhfTFNCKQotI2RlZmluZSBSRE1BX1JFR0lPTl82X19MRU5HVEhfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IFJETUFfUkVHSU9OXzZfX0xFTkdUSF9MU0IpICYgUkRNQV9SRUdJT05fNl9fTEVOR1RIX01BU0spCi0jZGVmaW5lIFJETUFfUkVHSU9OXzZfX0lORElfTVNCICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBSRE1BX1JFR0lPTl82X19JTkRJX0xTQiAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUkRNQV9SRUdJT05fNl9fSU5ESV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFJETUFfUkVHSU9OXzZfX0lORElfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBSRE1BX1JFR0lPTl82X19JTkRJX01BU0spID4+IFJETUFfUkVHSU9OXzZfX0lORElfTFNCKQotI2RlZmluZSBSRE1BX1JFR0lPTl82X19JTkRJX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IFJETUFfUkVHSU9OXzZfX0lORElfTFNCKSAmIFJETUFfUkVHSU9OXzZfX0lORElfTUFTSykKLSNkZWZpbmUgUkRNQV9SRUdJT05fNl9fTkVYVF9NU0IgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFJETUFfUkVHSU9OXzZfX05FWFRfTFNCICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBSRE1BX1JFR0lPTl82X19ORVhUX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUkRNQV9SRUdJT05fNl9fTkVYVF9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIFJETUFfUkVHSU9OXzZfX05FWFRfTUFTSykgPj4gUkRNQV9SRUdJT05fNl9fTkVYVF9MU0IpCi0jZGVmaW5lIFJETUFfUkVHSU9OXzZfX05FWFRfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgUkRNQV9SRUdJT05fNl9fTkVYVF9MU0IpICYgUkRNQV9SRUdJT05fNl9fTkVYVF9NQVNLKQotCi0jZGVmaW5lIFJETUFfUkVHSU9OXzdfX0FERFJFU1MgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzYwotI2RlZmluZSBSRE1BX1JFR0lPTl83X19PRkZTRVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM2MKLSNkZWZpbmUgUkRNQV9SRUdJT05fN19fQUREUl9NU0IgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBSRE1BX1JFR0lPTl83X19BRERSX0xTQiAgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFJETUFfUkVHSU9OXzdfX0FERFJfTUFTSyAgICAgICAgICAgICAgICAgMHhmZmZmZTAwMAotI2RlZmluZSBSRE1BX1JFR0lPTl83X19BRERSX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgUkRNQV9SRUdJT05fN19fQUREUl9NQVNLKSA+PiBSRE1BX1JFR0lPTl83X19BRERSX0xTQikKLSNkZWZpbmUgUkRNQV9SRUdJT05fN19fQUREUl9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBSRE1BX1JFR0lPTl83X19BRERSX0xTQikgJiBSRE1BX1JFR0lPTl83X19BRERSX01BU0spCi0jZGVmaW5lIFJETUFfUkVHSU9OXzdfX0xFTkdUSF9NU0IgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUkRNQV9SRUdJT05fN19fTEVOR1RIX0xTQiAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFJETUFfUkVHSU9OXzdfX0xFTkdUSF9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMWZmYwotI2RlZmluZSBSRE1BX1JFR0lPTl83X19MRU5HVEhfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgUkRNQV9SRUdJT05fN19fTEVOR1RIX01BU0spID4+IFJETUFfUkVHSU9OXzdfX0xFTkdUSF9MU0IpCi0jZGVmaW5lIFJETUFfUkVHSU9OXzdfX0xFTkdUSF9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgUkRNQV9SRUdJT05fN19fTEVOR1RIX0xTQikgJiBSRE1BX1JFR0lPTl83X19MRU5HVEhfTUFTSykKLSNkZWZpbmUgUkRNQV9SRUdJT05fN19fSU5ESV9NU0IgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFJETUFfUkVHSU9OXzdfX0lORElfTFNCICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBSRE1BX1JFR0lPTl83X19JTkRJX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgUkRNQV9SRUdJT05fN19fSU5ESV9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIFJETUFfUkVHSU9OXzdfX0lORElfTUFTSykgPj4gUkRNQV9SRUdJT05fN19fSU5ESV9MU0IpCi0jZGVmaW5lIFJETUFfUkVHSU9OXzdfX0lORElfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgUkRNQV9SRUdJT05fN19fSU5ESV9MU0IpICYgUkRNQV9SRUdJT05fN19fSU5ESV9NQVNLKQotI2RlZmluZSBSRE1BX1JFR0lPTl83X19ORVhUX01TQiAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUkRNQV9SRUdJT05fN19fTkVYVF9MU0IgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFJETUFfUkVHSU9OXzdfX05FWFRfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBSRE1BX1JFR0lPTl83X19ORVhUX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgUkRNQV9SRUdJT05fN19fTkVYVF9NQVNLKSA+PiBSRE1BX1JFR0lPTl83X19ORVhUX0xTQikKLSNkZWZpbmUgUkRNQV9SRUdJT05fN19fTkVYVF9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBSRE1BX1JFR0lPTl83X19ORVhUX0xTQikgJiBSRE1BX1JFR0lPTl83X19ORVhUX01BU0spCi0KLSNkZWZpbmUgUkRNQV9SRUdJT05fOF9fQUREUkVTUyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIFJETUFfUkVHSU9OXzhfX09GRlNFVCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAotI2RlZmluZSBSRE1BX1JFR0lPTl84X19BRERSX01TQiAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFJETUFfUkVHSU9OXzhfX0FERFJfTFNCICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUkRNQV9SRUdJT05fOF9fQUREUl9NQVNLICAgICAgICAgICAgICAgICAweGZmZmZlMDAwCi0jZGVmaW5lIFJETUFfUkVHSU9OXzhfX0FERFJfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBSRE1BX1JFR0lPTl84X19BRERSX01BU0spID4+IFJETUFfUkVHSU9OXzhfX0FERFJfTFNCKQotI2RlZmluZSBSRE1BX1JFR0lPTl84X19BRERSX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IFJETUFfUkVHSU9OXzhfX0FERFJfTFNCKSAmIFJETUFfUkVHSU9OXzhfX0FERFJfTUFTSykKLSNkZWZpbmUgUkRNQV9SRUdJT05fOF9fTEVOR1RIX01TQiAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBSRE1BX1JFR0lPTl84X19MRU5HVEhfTFNCICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUkRNQV9SRUdJT05fOF9fTEVOR1RIX01BU0sgICAgICAgICAgICAgICAweDAwMDAxZmZjCi0jZGVmaW5lIFJETUFfUkVHSU9OXzhfX0xFTkdUSF9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBSRE1BX1JFR0lPTl84X19MRU5HVEhfTUFTSykgPj4gUkRNQV9SRUdJT05fOF9fTEVOR1RIX0xTQikKLSNkZWZpbmUgUkRNQV9SRUdJT05fOF9fTEVOR1RIX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBSRE1BX1JFR0lPTl84X19MRU5HVEhfTFNCKSAmIFJETUFfUkVHSU9OXzhfX0xFTkdUSF9NQVNLKQotI2RlZmluZSBSRE1BX1JFR0lPTl84X19JTkRJX01TQiAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUkRNQV9SRUdJT05fOF9fSU5ESV9MU0IgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFJETUFfUkVHSU9OXzhfX0lORElfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBSRE1BX1JFR0lPTl84X19JTkRJX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgUkRNQV9SRUdJT05fOF9fSU5ESV9NQVNLKSA+PiBSRE1BX1JFR0lPTl84X19JTkRJX0xTQikKLSNkZWZpbmUgUkRNQV9SRUdJT05fOF9fSU5ESV9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBSRE1BX1JFR0lPTl84X19JTkRJX0xTQikgJiBSRE1BX1JFR0lPTl84X19JTkRJX01BU0spCi0jZGVmaW5lIFJETUFfUkVHSU9OXzhfX05FWFRfTVNCICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBSRE1BX1JFR0lPTl84X19ORVhUX0xTQiAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUkRNQV9SRUdJT05fOF9fTkVYVF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFJETUFfUkVHSU9OXzhfX05FWFRfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBSRE1BX1JFR0lPTl84X19ORVhUX01BU0spID4+IFJETUFfUkVHSU9OXzhfX05FWFRfTFNCKQotI2RlZmluZSBSRE1BX1JFR0lPTl84X19ORVhUX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IFJETUFfUkVHSU9OXzhfX05FWFRfTFNCKSAmIFJETUFfUkVHSU9OXzhfX05FWFRfTUFTSykKLQotI2RlZmluZSBSRE1BX1JFR0lPTl85X19BRERSRVNTICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDQKLSNkZWZpbmUgUkRNQV9SRUdJT05fOV9fT0ZGU0VUICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQ0Ci0jZGVmaW5lIFJETUFfUkVHSU9OXzlfX0FERFJfTVNCICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgUkRNQV9SRUdJT05fOV9fQUREUl9MU0IgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBSRE1BX1JFR0lPTl85X19BRERSX01BU0sgICAgICAgICAgICAgICAgIDB4ZmZmZmUwMDAKLSNkZWZpbmUgUkRNQV9SRUdJT05fOV9fQUREUl9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIFJETUFfUkVHSU9OXzlfX0FERFJfTUFTSykgPj4gUkRNQV9SRUdJT05fOV9fQUREUl9MU0IpCi0jZGVmaW5lIFJETUFfUkVHSU9OXzlfX0FERFJfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgUkRNQV9SRUdJT05fOV9fQUREUl9MU0IpICYgUkRNQV9SRUdJT05fOV9fQUREUl9NQVNLKQotI2RlZmluZSBSRE1BX1JFR0lPTl85X19MRU5HVEhfTVNCICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFJETUFfUkVHSU9OXzlfX0xFTkdUSF9MU0IgICAgICAgICAgICAgICAgMgotI2RlZmluZSBSRE1BX1JFR0lPTl85X19MRU5HVEhfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDFmZmMKLSNkZWZpbmUgUkRNQV9SRUdJT05fOV9fTEVOR1RIX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIFJETUFfUkVHSU9OXzlfX0xFTkdUSF9NQVNLKSA+PiBSRE1BX1JFR0lPTl85X19MRU5HVEhfTFNCKQotI2RlZmluZSBSRE1BX1JFR0lPTl85X19MRU5HVEhfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IFJETUFfUkVHSU9OXzlfX0xFTkdUSF9MU0IpICYgUkRNQV9SRUdJT05fOV9fTEVOR1RIX01BU0spCi0jZGVmaW5lIFJETUFfUkVHSU9OXzlfX0lORElfTVNCICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBSRE1BX1JFR0lPTl85X19JTkRJX0xTQiAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUkRNQV9SRUdJT05fOV9fSU5ESV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFJETUFfUkVHSU9OXzlfX0lORElfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBSRE1BX1JFR0lPTl85X19JTkRJX01BU0spID4+IFJETUFfUkVHSU9OXzlfX0lORElfTFNCKQotI2RlZmluZSBSRE1BX1JFR0lPTl85X19JTkRJX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IFJETUFfUkVHSU9OXzlfX0lORElfTFNCKSAmIFJETUFfUkVHSU9OXzlfX0lORElfTUFTSykKLSNkZWZpbmUgUkRNQV9SRUdJT05fOV9fTkVYVF9NU0IgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFJETUFfUkVHSU9OXzlfX05FWFRfTFNCICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBSRE1BX1JFR0lPTl85X19ORVhUX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgUkRNQV9SRUdJT05fOV9fTkVYVF9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIFJETUFfUkVHSU9OXzlfX05FWFRfTUFTSykgPj4gUkRNQV9SRUdJT05fOV9fTkVYVF9MU0IpCi0jZGVmaW5lIFJETUFfUkVHSU9OXzlfX05FWFRfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgUkRNQV9SRUdJT05fOV9fTkVYVF9MU0IpICYgUkRNQV9SRUdJT05fOV9fTkVYVF9NQVNLKQotCi0jZGVmaW5lIFJETUFfUkVHSU9OXzEwX19BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0OAotI2RlZmluZSBSRE1BX1JFR0lPTl8xMF9fT0ZGU0VUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDgKLSNkZWZpbmUgUkRNQV9SRUdJT05fMTBfX0FERFJfTVNCICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBSRE1BX1JFR0lPTl8xMF9fQUREUl9MU0IgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFJETUFfUkVHSU9OXzEwX19BRERSX01BU0sgICAgICAgICAgICAgICAgMHhmZmZmZTAwMAotI2RlZmluZSBSRE1BX1JFR0lPTl8xMF9fQUREUl9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgUkRNQV9SRUdJT05fMTBfX0FERFJfTUFTSykgPj4gUkRNQV9SRUdJT05fMTBfX0FERFJfTFNCKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xMF9fQUREUl9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFJETUFfUkVHSU9OXzEwX19BRERSX0xTQikgJiBSRE1BX1JFR0lPTl8xMF9fQUREUl9NQVNLKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xMF9fTEVOR1RIX01TQiAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFJETUFfUkVHSU9OXzEwX19MRU5HVEhfTFNCICAgICAgICAgICAgICAgMgotI2RlZmluZSBSRE1BX1JFR0lPTl8xMF9fTEVOR1RIX01BU0sgICAgICAgICAgICAgIDB4MDAwMDFmZmMKLSNkZWZpbmUgUkRNQV9SRUdJT05fMTBfX0xFTkdUSF9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFJETUFfUkVHSU9OXzEwX19MRU5HVEhfTUFTSykgPj4gUkRNQV9SRUdJT05fMTBfX0xFTkdUSF9MU0IpCi0jZGVmaW5lIFJETUFfUkVHSU9OXzEwX19MRU5HVEhfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgUkRNQV9SRUdJT05fMTBfX0xFTkdUSF9MU0IpICYgUkRNQV9SRUdJT05fMTBfX0xFTkdUSF9NQVNLKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xMF9fSU5ESV9NU0IgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUkRNQV9SRUdJT05fMTBfX0lORElfTFNCICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFJETUFfUkVHSU9OXzEwX19JTkRJX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBSRE1BX1JFR0lPTl8xMF9fSU5ESV9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgUkRNQV9SRUdJT05fMTBfX0lORElfTUFTSykgPj4gUkRNQV9SRUdJT05fMTBfX0lORElfTFNCKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xMF9fSU5ESV9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFJETUFfUkVHSU9OXzEwX19JTkRJX0xTQikgJiBSRE1BX1JFR0lPTl8xMF9fSU5ESV9NQVNLKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xMF9fTkVYVF9NU0IgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUkRNQV9SRUdJT05fMTBfX05FWFRfTFNCICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFJETUFfUkVHSU9OXzEwX19ORVhUX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBSRE1BX1JFR0lPTl8xMF9fTkVYVF9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgUkRNQV9SRUdJT05fMTBfX05FWFRfTUFTSykgPj4gUkRNQV9SRUdJT05fMTBfX05FWFRfTFNCKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xMF9fTkVYVF9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFJETUFfUkVHSU9OXzEwX19ORVhUX0xTQikgJiBSRE1BX1JFR0lPTl8xMF9fTkVYVF9NQVNLKQotCi0jZGVmaW5lIFJETUFfUkVHSU9OXzExX19BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0YwotI2RlZmluZSBSRE1BX1JFR0lPTl8xMV9fT0ZGU0VUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNGMKLSNkZWZpbmUgUkRNQV9SRUdJT05fMTFfX0FERFJfTVNCICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBSRE1BX1JFR0lPTl8xMV9fQUREUl9MU0IgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFJETUFfUkVHSU9OXzExX19BRERSX01BU0sgICAgICAgICAgICAgICAgMHhmZmZmZTAwMAotI2RlZmluZSBSRE1BX1JFR0lPTl8xMV9fQUREUl9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgUkRNQV9SRUdJT05fMTFfX0FERFJfTUFTSykgPj4gUkRNQV9SRUdJT05fMTFfX0FERFJfTFNCKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xMV9fQUREUl9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFJETUFfUkVHSU9OXzExX19BRERSX0xTQikgJiBSRE1BX1JFR0lPTl8xMV9fQUREUl9NQVNLKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xMV9fTEVOR1RIX01TQiAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFJETUFfUkVHSU9OXzExX19MRU5HVEhfTFNCICAgICAgICAgICAgICAgMgotI2RlZmluZSBSRE1BX1JFR0lPTl8xMV9fTEVOR1RIX01BU0sgICAgICAgICAgICAgIDB4MDAwMDFmZmMKLSNkZWZpbmUgUkRNQV9SRUdJT05fMTFfX0xFTkdUSF9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFJETUFfUkVHSU9OXzExX19MRU5HVEhfTUFTSykgPj4gUkRNQV9SRUdJT05fMTFfX0xFTkdUSF9MU0IpCi0jZGVmaW5lIFJETUFfUkVHSU9OXzExX19MRU5HVEhfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgUkRNQV9SRUdJT05fMTFfX0xFTkdUSF9MU0IpICYgUkRNQV9SRUdJT05fMTFfX0xFTkdUSF9NQVNLKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xMV9fSU5ESV9NU0IgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUkRNQV9SRUdJT05fMTFfX0lORElfTFNCICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFJETUFfUkVHSU9OXzExX19JTkRJX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBSRE1BX1JFR0lPTl8xMV9fSU5ESV9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgUkRNQV9SRUdJT05fMTFfX0lORElfTUFTSykgPj4gUkRNQV9SRUdJT05fMTFfX0lORElfTFNCKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xMV9fSU5ESV9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFJETUFfUkVHSU9OXzExX19JTkRJX0xTQikgJiBSRE1BX1JFR0lPTl8xMV9fSU5ESV9NQVNLKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xMV9fTkVYVF9NU0IgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUkRNQV9SRUdJT05fMTFfX05FWFRfTFNCICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFJETUFfUkVHSU9OXzExX19ORVhUX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBSRE1BX1JFR0lPTl8xMV9fTkVYVF9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgUkRNQV9SRUdJT05fMTFfX05FWFRfTUFTSykgPj4gUkRNQV9SRUdJT05fMTFfX05FWFRfTFNCKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xMV9fTkVYVF9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFJETUFfUkVHSU9OXzExX19ORVhUX0xTQikgJiBSRE1BX1JFR0lPTl8xMV9fTkVYVF9NQVNLKQotCi0jZGVmaW5lIFJETUFfUkVHSU9OXzEyX19BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MAotI2RlZmluZSBSRE1BX1JFR0lPTl8xMl9fT0ZGU0VUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTAKLSNkZWZpbmUgUkRNQV9SRUdJT05fMTJfX0FERFJfTVNCICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBSRE1BX1JFR0lPTl8xMl9fQUREUl9MU0IgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFJETUFfUkVHSU9OXzEyX19BRERSX01BU0sgICAgICAgICAgICAgICAgMHhmZmZmZTAwMAotI2RlZmluZSBSRE1BX1JFR0lPTl8xMl9fQUREUl9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgUkRNQV9SRUdJT05fMTJfX0FERFJfTUFTSykgPj4gUkRNQV9SRUdJT05fMTJfX0FERFJfTFNCKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xMl9fQUREUl9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFJETUFfUkVHSU9OXzEyX19BRERSX0xTQikgJiBSRE1BX1JFR0lPTl8xMl9fQUREUl9NQVNLKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xMl9fTEVOR1RIX01TQiAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFJETUFfUkVHSU9OXzEyX19MRU5HVEhfTFNCICAgICAgICAgICAgICAgMgotI2RlZmluZSBSRE1BX1JFR0lPTl8xMl9fTEVOR1RIX01BU0sgICAgICAgICAgICAgIDB4MDAwMDFmZmMKLSNkZWZpbmUgUkRNQV9SRUdJT05fMTJfX0xFTkdUSF9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFJETUFfUkVHSU9OXzEyX19MRU5HVEhfTUFTSykgPj4gUkRNQV9SRUdJT05fMTJfX0xFTkdUSF9MU0IpCi0jZGVmaW5lIFJETUFfUkVHSU9OXzEyX19MRU5HVEhfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgUkRNQV9SRUdJT05fMTJfX0xFTkdUSF9MU0IpICYgUkRNQV9SRUdJT05fMTJfX0xFTkdUSF9NQVNLKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xMl9fSU5ESV9NU0IgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUkRNQV9SRUdJT05fMTJfX0lORElfTFNCICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFJETUFfUkVHSU9OXzEyX19JTkRJX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBSRE1BX1JFR0lPTl8xMl9fSU5ESV9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgUkRNQV9SRUdJT05fMTJfX0lORElfTUFTSykgPj4gUkRNQV9SRUdJT05fMTJfX0lORElfTFNCKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xMl9fSU5ESV9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFJETUFfUkVHSU9OXzEyX19JTkRJX0xTQikgJiBSRE1BX1JFR0lPTl8xMl9fSU5ESV9NQVNLKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xMl9fTkVYVF9NU0IgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUkRNQV9SRUdJT05fMTJfX05FWFRfTFNCICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFJETUFfUkVHSU9OXzEyX19ORVhUX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBSRE1BX1JFR0lPTl8xMl9fTkVYVF9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgUkRNQV9SRUdJT05fMTJfX05FWFRfTUFTSykgPj4gUkRNQV9SRUdJT05fMTJfX05FWFRfTFNCKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xMl9fTkVYVF9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFJETUFfUkVHSU9OXzEyX19ORVhUX0xTQikgJiBSRE1BX1JFR0lPTl8xMl9fTkVYVF9NQVNLKQotCi0jZGVmaW5lIFJETUFfUkVHSU9OXzEzX19BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1NAotI2RlZmluZSBSRE1BX1JFR0lPTl8xM19fT0ZGU0VUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTQKLSNkZWZpbmUgUkRNQV9SRUdJT05fMTNfX0FERFJfTVNCICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBSRE1BX1JFR0lPTl8xM19fQUREUl9MU0IgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFJETUFfUkVHSU9OXzEzX19BRERSX01BU0sgICAgICAgICAgICAgICAgMHhmZmZmZTAwMAotI2RlZmluZSBSRE1BX1JFR0lPTl8xM19fQUREUl9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgUkRNQV9SRUdJT05fMTNfX0FERFJfTUFTSykgPj4gUkRNQV9SRUdJT05fMTNfX0FERFJfTFNCKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xM19fQUREUl9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFJETUFfUkVHSU9OXzEzX19BRERSX0xTQikgJiBSRE1BX1JFR0lPTl8xM19fQUREUl9NQVNLKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xM19fTEVOR1RIX01TQiAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFJETUFfUkVHSU9OXzEzX19MRU5HVEhfTFNCICAgICAgICAgICAgICAgMgotI2RlZmluZSBSRE1BX1JFR0lPTl8xM19fTEVOR1RIX01BU0sgICAgICAgICAgICAgIDB4MDAwMDFmZmMKLSNkZWZpbmUgUkRNQV9SRUdJT05fMTNfX0xFTkdUSF9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFJETUFfUkVHSU9OXzEzX19MRU5HVEhfTUFTSykgPj4gUkRNQV9SRUdJT05fMTNfX0xFTkdUSF9MU0IpCi0jZGVmaW5lIFJETUFfUkVHSU9OXzEzX19MRU5HVEhfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgUkRNQV9SRUdJT05fMTNfX0xFTkdUSF9MU0IpICYgUkRNQV9SRUdJT05fMTNfX0xFTkdUSF9NQVNLKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xM19fSU5ESV9NU0IgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUkRNQV9SRUdJT05fMTNfX0lORElfTFNCICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFJETUFfUkVHSU9OXzEzX19JTkRJX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBSRE1BX1JFR0lPTl8xM19fSU5ESV9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgUkRNQV9SRUdJT05fMTNfX0lORElfTUFTSykgPj4gUkRNQV9SRUdJT05fMTNfX0lORElfTFNCKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xM19fSU5ESV9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFJETUFfUkVHSU9OXzEzX19JTkRJX0xTQikgJiBSRE1BX1JFR0lPTl8xM19fSU5ESV9NQVNLKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xM19fTkVYVF9NU0IgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUkRNQV9SRUdJT05fMTNfX05FWFRfTFNCICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFJETUFfUkVHSU9OXzEzX19ORVhUX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBSRE1BX1JFR0lPTl8xM19fTkVYVF9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgUkRNQV9SRUdJT05fMTNfX05FWFRfTUFTSykgPj4gUkRNQV9SRUdJT05fMTNfX05FWFRfTFNCKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xM19fTkVYVF9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFJETUFfUkVHSU9OXzEzX19ORVhUX0xTQikgJiBSRE1BX1JFR0lPTl8xM19fTkVYVF9NQVNLKQotCi0jZGVmaW5lIFJETUFfUkVHSU9OXzE0X19BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1OAotI2RlZmluZSBSRE1BX1JFR0lPTl8xNF9fT0ZGU0VUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTgKLSNkZWZpbmUgUkRNQV9SRUdJT05fMTRfX0FERFJfTVNCICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBSRE1BX1JFR0lPTl8xNF9fQUREUl9MU0IgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFJETUFfUkVHSU9OXzE0X19BRERSX01BU0sgICAgICAgICAgICAgICAgMHhmZmZmZTAwMAotI2RlZmluZSBSRE1BX1JFR0lPTl8xNF9fQUREUl9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgUkRNQV9SRUdJT05fMTRfX0FERFJfTUFTSykgPj4gUkRNQV9SRUdJT05fMTRfX0FERFJfTFNCKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xNF9fQUREUl9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFJETUFfUkVHSU9OXzE0X19BRERSX0xTQikgJiBSRE1BX1JFR0lPTl8xNF9fQUREUl9NQVNLKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xNF9fTEVOR1RIX01TQiAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFJETUFfUkVHSU9OXzE0X19MRU5HVEhfTFNCICAgICAgICAgICAgICAgMgotI2RlZmluZSBSRE1BX1JFR0lPTl8xNF9fTEVOR1RIX01BU0sgICAgICAgICAgICAgIDB4MDAwMDFmZmMKLSNkZWZpbmUgUkRNQV9SRUdJT05fMTRfX0xFTkdUSF9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFJETUFfUkVHSU9OXzE0X19MRU5HVEhfTUFTSykgPj4gUkRNQV9SRUdJT05fMTRfX0xFTkdUSF9MU0IpCi0jZGVmaW5lIFJETUFfUkVHSU9OXzE0X19MRU5HVEhfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgUkRNQV9SRUdJT05fMTRfX0xFTkdUSF9MU0IpICYgUkRNQV9SRUdJT05fMTRfX0xFTkdUSF9NQVNLKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xNF9fSU5ESV9NU0IgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUkRNQV9SRUdJT05fMTRfX0lORElfTFNCICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFJETUFfUkVHSU9OXzE0X19JTkRJX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBSRE1BX1JFR0lPTl8xNF9fSU5ESV9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgUkRNQV9SRUdJT05fMTRfX0lORElfTUFTSykgPj4gUkRNQV9SRUdJT05fMTRfX0lORElfTFNCKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xNF9fSU5ESV9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFJETUFfUkVHSU9OXzE0X19JTkRJX0xTQikgJiBSRE1BX1JFR0lPTl8xNF9fSU5ESV9NQVNLKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xNF9fTkVYVF9NU0IgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUkRNQV9SRUdJT05fMTRfX05FWFRfTFNCICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFJETUFfUkVHSU9OXzE0X19ORVhUX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBSRE1BX1JFR0lPTl8xNF9fTkVYVF9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgUkRNQV9SRUdJT05fMTRfX05FWFRfTUFTSykgPj4gUkRNQV9SRUdJT05fMTRfX05FWFRfTFNCKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xNF9fTkVYVF9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFJETUFfUkVHSU9OXzE0X19ORVhUX0xTQikgJiBSRE1BX1JFR0lPTl8xNF9fTkVYVF9NQVNLKQotCi0jZGVmaW5lIFJETUFfUkVHSU9OXzE1X19BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1YwotI2RlZmluZSBSRE1BX1JFR0lPTl8xNV9fT0ZGU0VUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNWMKLSNkZWZpbmUgUkRNQV9SRUdJT05fMTVfX0FERFJfTVNCICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBSRE1BX1JFR0lPTl8xNV9fQUREUl9MU0IgICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFJETUFfUkVHSU9OXzE1X19BRERSX01BU0sgICAgICAgICAgICAgICAgMHhmZmZmZTAwMAotI2RlZmluZSBSRE1BX1JFR0lPTl8xNV9fQUREUl9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgUkRNQV9SRUdJT05fMTVfX0FERFJfTUFTSykgPj4gUkRNQV9SRUdJT05fMTVfX0FERFJfTFNCKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xNV9fQUREUl9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFJETUFfUkVHSU9OXzE1X19BRERSX0xTQikgJiBSRE1BX1JFR0lPTl8xNV9fQUREUl9NQVNLKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xNV9fTEVOR1RIX01TQiAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFJETUFfUkVHSU9OXzE1X19MRU5HVEhfTFNCICAgICAgICAgICAgICAgMgotI2RlZmluZSBSRE1BX1JFR0lPTl8xNV9fTEVOR1RIX01BU0sgICAgICAgICAgICAgIDB4MDAwMDFmZmMKLSNkZWZpbmUgUkRNQV9SRUdJT05fMTVfX0xFTkdUSF9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFJETUFfUkVHSU9OXzE1X19MRU5HVEhfTUFTSykgPj4gUkRNQV9SRUdJT05fMTVfX0xFTkdUSF9MU0IpCi0jZGVmaW5lIFJETUFfUkVHSU9OXzE1X19MRU5HVEhfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgUkRNQV9SRUdJT05fMTVfX0xFTkdUSF9MU0IpICYgUkRNQV9SRUdJT05fMTVfX0xFTkdUSF9NQVNLKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xNV9fSU5ESV9NU0IgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUkRNQV9SRUdJT05fMTVfX0lORElfTFNCICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFJETUFfUkVHSU9OXzE1X19JTkRJX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBSRE1BX1JFR0lPTl8xNV9fSU5ESV9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgUkRNQV9SRUdJT05fMTVfX0lORElfTUFTSykgPj4gUkRNQV9SRUdJT05fMTVfX0lORElfTFNCKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xNV9fSU5ESV9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFJETUFfUkVHSU9OXzE1X19JTkRJX0xTQikgJiBSRE1BX1JFR0lPTl8xNV9fSU5ESV9NQVNLKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xNV9fTkVYVF9NU0IgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUkRNQV9SRUdJT05fMTVfX05FWFRfTFNCICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFJETUFfUkVHSU9OXzE1X19ORVhUX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBSRE1BX1JFR0lPTl8xNV9fTkVYVF9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgUkRNQV9SRUdJT05fMTVfX05FWFRfTUFTSykgPj4gUkRNQV9SRUdJT05fMTVfX05FWFRfTFNCKQotI2RlZmluZSBSRE1BX1JFR0lPTl8xNV9fTkVYVF9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFJETUFfUkVHSU9OXzE1X19ORVhUX0xTQikgJiBSRE1BX1JFR0lPTl8xNV9fTkVYVF9NQVNLKQotCi0jZGVmaW5lIERNQV9TVEFUVVNfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2MAotI2RlZmluZSBETUFfU1RBVFVTX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjAKLSNkZWZpbmUgRE1BX1NUQVRVU19FUlJPUl9DT0RFX01TQiAgICAgICAgICAgICAgICAxNAotI2RlZmluZSBETUFfU1RBVFVTX0VSUk9SX0NPREVfTFNCICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgRE1BX1NUQVRVU19FUlJPUl9DT0RFX01BU0sgICAgICAgICAgICAgICAweDAwMDA3ZmYwCi0jZGVmaW5lIERNQV9TVEFUVVNfRVJST1JfQ09ERV9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBETUFfU1RBVFVTX0VSUk9SX0NPREVfTUFTSykgPj4gRE1BX1NUQVRVU19FUlJPUl9DT0RFX0xTQikKLSNkZWZpbmUgRE1BX1NUQVRVU19FUlJPUl9DT0RFX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBETUFfU1RBVFVTX0VSUk9SX0NPREVfTFNCKSAmIERNQV9TVEFUVVNfRVJST1JfQ09ERV9NQVNLKQotI2RlZmluZSBETUFfU1RBVFVTX0VSUk9SX01TQiAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgRE1BX1NUQVRVU19FUlJPUl9MU0IgICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIERNQV9TVEFUVVNfRVJST1JfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBETUFfU1RBVFVTX0VSUk9SX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgRE1BX1NUQVRVU19FUlJPUl9NQVNLKSA+PiBETUFfU1RBVFVTX0VSUk9SX0xTQikKLSNkZWZpbmUgRE1BX1NUQVRVU19FUlJPUl9TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBETUFfU1RBVFVTX0VSUk9SX0xTQikgJiBETUFfU1RBVFVTX0VSUk9SX01BU0spCi0jZGVmaW5lIERNQV9TVEFUVVNfRE9ORV9NU0IgICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBETUFfU1RBVFVTX0RPTkVfTFNCICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgRE1BX1NUQVRVU19ET05FX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIERNQV9TVEFUVVNfRE9ORV9HRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBETUFfU1RBVFVTX0RPTkVfTUFTSykgPj4gRE1BX1NUQVRVU19ET05FX0xTQikKLSNkZWZpbmUgRE1BX1NUQVRVU19ET05FX1NFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBETUFfU1RBVFVTX0RPTkVfTFNCKSAmIERNQV9TVEFUVVNfRE9ORV9NQVNLKQotI2RlZmluZSBETUFfU1RBVFVTX1NUT1BQRURfTVNCICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgRE1BX1NUQVRVU19TVE9QUEVEX0xTQiAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIERNQV9TVEFUVVNfU1RPUFBFRF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBETUFfU1RBVFVTX1NUT1BQRURfR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgRE1BX1NUQVRVU19TVE9QUEVEX01BU0spID4+IERNQV9TVEFUVVNfU1RPUFBFRF9MU0IpCi0jZGVmaW5lIERNQV9TVEFUVVNfU1RPUFBFRF9TRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPDwgRE1BX1NUQVRVU19TVE9QUEVEX0xTQikgJiBETUFfU1RBVFVTX1NUT1BQRURfTUFTSykKLSNkZWZpbmUgRE1BX1NUQVRVU19SVU5OSU5HX01TQiAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIERNQV9TVEFUVVNfUlVOTklOR19MU0IgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBETUFfU1RBVFVTX1JVTk5JTkdfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgRE1BX1NUQVRVU19SVU5OSU5HX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIERNQV9TVEFUVVNfUlVOTklOR19NQVNLKSA+PiBETUFfU1RBVFVTX1JVTk5JTkdfTFNCKQotI2RlZmluZSBETUFfU1RBVFVTX1JVTk5JTkdfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IERNQV9TVEFUVVNfUlVOTklOR19MU0IpICYgRE1BX1NUQVRVU19SVU5OSU5HX01BU0spCi0KLSNkZWZpbmUgRE1BX0lOVF9FTl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDY0Ci0jZGVmaW5lIERNQV9JTlRfRU5fT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2NAotI2RlZmluZSBETUFfSU5UX0VOX0VSUk9SX0VOQV9NU0IgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgRE1BX0lOVF9FTl9FUlJPUl9FTkFfTFNCICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIERNQV9JTlRfRU5fRVJST1JfRU5BX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBETUFfSU5UX0VOX0VSUk9SX0VOQV9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgRE1BX0lOVF9FTl9FUlJPUl9FTkFfTUFTSykgPj4gRE1BX0lOVF9FTl9FUlJPUl9FTkFfTFNCKQotI2RlZmluZSBETUFfSU5UX0VOX0VSUk9SX0VOQV9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IERNQV9JTlRfRU5fRVJST1JfRU5BX0xTQikgJiBETUFfSU5UX0VOX0VSUk9SX0VOQV9NQVNLKQotI2RlZmluZSBETUFfSU5UX0VOX0RPTkVfRU5BX01TQiAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgRE1BX0lOVF9FTl9ET05FX0VOQV9MU0IgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIERNQV9JTlRfRU5fRE9ORV9FTkFfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBETUFfSU5UX0VOX0RPTkVfRU5BX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgRE1BX0lOVF9FTl9ET05FX0VOQV9NQVNLKSA+PiBETUFfSU5UX0VOX0RPTkVfRU5BX0xTQikKLSNkZWZpbmUgRE1BX0lOVF9FTl9ET05FX0VOQV9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBETUFfSU5UX0VOX0RPTkVfRU5BX0xTQikgJiBETUFfSU5UX0VOX0RPTkVfRU5BX01BU0spCi0jZGVmaW5lIERNQV9JTlRfRU5fU1RPUFBFRF9FTkFfTVNCICAgICAgICAgICAgICAgMQotI2RlZmluZSBETUFfSU5UX0VOX1NUT1BQRURfRU5BX0xTQiAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgRE1BX0lOVF9FTl9TVE9QUEVEX0VOQV9NQVNLICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIERNQV9JTlRfRU5fU1RPUFBFRF9FTkFfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBETUFfSU5UX0VOX1NUT1BQRURfRU5BX01BU0spID4+IERNQV9JTlRfRU5fU1RPUFBFRF9FTkFfTFNCKQotI2RlZmluZSBETUFfSU5UX0VOX1NUT1BQRURfRU5BX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IERNQV9JTlRfRU5fU1RPUFBFRF9FTkFfTFNCKSAmIERNQV9JTlRfRU5fU1RPUFBFRF9FTkFfTUFTSykKLQotCi0jaWZuZGVmIF9fQVNTRU1CTEVSX18KLQotdHlwZWRlZiBzdHJ1Y3QgcmRtYV9yZWdfcmVnX3MgewotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZG1hX2NvbmZpZzsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGRtYV9jb250cm9sOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZG1hX3NyYzsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGRtYV9kZXN0OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZG1hX2xlbmd0aDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHZtY19iYXNlOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgaW5kaXJlY3RfcmVnOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgaW5kaXJlY3RfcmV0dXJuOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcmRtYV9yZWdpb25fMF87Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCByZG1hX3JlZ2lvbl8xXzsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHJkbWFfcmVnaW9uXzJfOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcmRtYV9yZWdpb25fM187Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCByZG1hX3JlZ2lvbl80XzsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHJkbWFfcmVnaW9uXzVfOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcmRtYV9yZWdpb25fNl87Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCByZG1hX3JlZ2lvbl83XzsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHJkbWFfcmVnaW9uXzhfOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcmRtYV9yZWdpb25fOV87Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCByZG1hX3JlZ2lvbl8xMF87Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCByZG1hX3JlZ2lvbl8xMV87Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCByZG1hX3JlZ2lvbl8xMl87Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCByZG1hX3JlZ2lvbl8xM187Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCByZG1hX3JlZ2lvbl8xNF87Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCByZG1hX3JlZ2lvbl8xNV87Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBkbWFfc3RhdHVzOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZG1hX2ludF9lbjsKLX0gcmRtYV9yZWdfcmVnX3Q7Ci0KLSNlbmRpZiAvKiBfX0FTU0VNQkxFUl9fICovCi0KLSNlbmRpZiAvKiBfUkRNQV9SRUdfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3NC4wL2h3L3J0Y19yZWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3NC4wL2h3L3J0Y19yZWcuaAppbmRleCAwODU1ZGU1Li5mY2FmZWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzQuMC9ody9ydGNfcmVnLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHc0LjAvaHcvcnRjX3JlZy5oCkBAIC0yMSwxMSArMjEsOCBAQAogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIAotI2lmZGVmIFdMQU5fSEVBREVSUwotCiAjaW5jbHVkZSAicnRjX3dsYW5fcmVnLmgiCiAKLQogI2lmbmRlZiBCVF9IRUFERVJTCiAKICNkZWZpbmUgUkVTRVRfQ09OVFJPTF9BRERSRVNTIFdMQU5fUkVTRVRfQ09OVFJPTF9BRERSRVNTCkBAIC0xMDAsOTUgKzk3LDYgQEAKICNkZWZpbmUgUkVTRVRfQ09OVFJPTF9TSTBfUlNUX01BU0sgV0xBTl9SRVNFVF9DT05UUk9MX1NJMF9SU1RfTUFTSwogI2RlZmluZSBSRVNFVF9DT05UUk9MX1NJMF9SU1RfR0VUKHgpIFdMQU5fUkVTRVRfQ09OVFJPTF9TSTBfUlNUX0dFVCh4KQogI2RlZmluZSBSRVNFVF9DT05UUk9MX1NJMF9SU1RfU0VUKHgpIFdMQU5fUkVTRVRfQ09OVFJPTF9TSTBfUlNUX1NFVCh4KQotI2RlZmluZSBYVEFMX0NPTlRST0xfQUREUkVTUyBXTEFOX1hUQUxfQ09OVFJPTF9BRERSRVNTCi0jZGVmaW5lIFhUQUxfQ09OVFJPTF9PRkZTRVQgV0xBTl9YVEFMX0NPTlRST0xfT0ZGU0VUCi0jZGVmaW5lIFhUQUxfQ09OVFJPTF9UQ1hPX01TQiBXTEFOX1hUQUxfQ09OVFJPTF9UQ1hPX01TQgotI2RlZmluZSBYVEFMX0NPTlRST0xfVENYT19MU0IgV0xBTl9YVEFMX0NPTlRST0xfVENYT19MU0IKLSNkZWZpbmUgWFRBTF9DT05UUk9MX1RDWE9fTUFTSyBXTEFOX1hUQUxfQ09OVFJPTF9UQ1hPX01BU0sKLSNkZWZpbmUgWFRBTF9DT05UUk9MX1RDWE9fR0VUKHgpIFdMQU5fWFRBTF9DT05UUk9MX1RDWE9fR0VUKHgpCi0jZGVmaW5lIFhUQUxfQ09OVFJPTF9UQ1hPX1NFVCh4KSBXTEFOX1hUQUxfQ09OVFJPTF9UQ1hPX1NFVCh4KQotI2RlZmluZSBUQ1hPX0RFVEVDVF9BRERSRVNTIFdMQU5fVENYT19ERVRFQ1RfQUREUkVTUwotI2RlZmluZSBUQ1hPX0RFVEVDVF9PRkZTRVQgV0xBTl9UQ1hPX0RFVEVDVF9PRkZTRVQKLSNkZWZpbmUgVENYT19ERVRFQ1RfUFJFU0VOVF9NU0IgV0xBTl9UQ1hPX0RFVEVDVF9QUkVTRU5UX01TQgotI2RlZmluZSBUQ1hPX0RFVEVDVF9QUkVTRU5UX0xTQiBXTEFOX1RDWE9fREVURUNUX1BSRVNFTlRfTFNCCi0jZGVmaW5lIFRDWE9fREVURUNUX1BSRVNFTlRfTUFTSyBXTEFOX1RDWE9fREVURUNUX1BSRVNFTlRfTUFTSwotI2RlZmluZSBUQ1hPX0RFVEVDVF9QUkVTRU5UX0dFVCh4KSBXTEFOX1RDWE9fREVURUNUX1BSRVNFTlRfR0VUKHgpCi0jZGVmaW5lIFRDWE9fREVURUNUX1BSRVNFTlRfU0VUKHgpIFdMQU5fVENYT19ERVRFQ1RfUFJFU0VOVF9TRVQoeCkKLSNkZWZpbmUgWFRBTF9URVNUX0FERFJFU1MgV0xBTl9YVEFMX1RFU1RfQUREUkVTUwotI2RlZmluZSBYVEFMX1RFU1RfT0ZGU0VUIFdMQU5fWFRBTF9URVNUX09GRlNFVAotI2RlZmluZSBYVEFMX1RFU1RfTk9UQ1hPREVUX01TQiBXTEFOX1hUQUxfVEVTVF9OT1RDWE9ERVRfTVNCCi0jZGVmaW5lIFhUQUxfVEVTVF9OT1RDWE9ERVRfTFNCIFdMQU5fWFRBTF9URVNUX05PVENYT0RFVF9MU0IKLSNkZWZpbmUgWFRBTF9URVNUX05PVENYT0RFVF9NQVNLIFdMQU5fWFRBTF9URVNUX05PVENYT0RFVF9NQVNLCi0jZGVmaW5lIFhUQUxfVEVTVF9OT1RDWE9ERVRfR0VUKHgpIFdMQU5fWFRBTF9URVNUX05PVENYT0RFVF9HRVQoeCkKLSNkZWZpbmUgWFRBTF9URVNUX05PVENYT0RFVF9TRVQoeCkgV0xBTl9YVEFMX1RFU1RfTk9UQ1hPREVUX1NFVCh4KQotI2RlZmluZSBRVUFEUkFUVVJFX0FERFJFU1MgV0xBTl9RVUFEUkFUVVJFX0FERFJFU1MKLSNkZWZpbmUgUVVBRFJBVFVSRV9PRkZTRVQgV0xBTl9RVUFEUkFUVVJFX09GRlNFVAotI2RlZmluZSBRVUFEUkFUVVJFX0FEQ19NU0IgV0xBTl9RVUFEUkFUVVJFX0FEQ19NU0IKLSNkZWZpbmUgUVVBRFJBVFVSRV9BRENfTFNCIFdMQU5fUVVBRFJBVFVSRV9BRENfTFNCCi0jZGVmaW5lIFFVQURSQVRVUkVfQURDX01BU0sgV0xBTl9RVUFEUkFUVVJFX0FEQ19NQVNLCi0jZGVmaW5lIFFVQURSQVRVUkVfQURDX0dFVCh4KSBXTEFOX1FVQURSQVRVUkVfQURDX0dFVCh4KQotI2RlZmluZSBRVUFEUkFUVVJFX0FEQ19TRVQoeCkgV0xBTl9RVUFEUkFUVVJFX0FEQ19TRVQoeCkKLSNkZWZpbmUgUVVBRFJBVFVSRV9TRUxfTVNCIFdMQU5fUVVBRFJBVFVSRV9TRUxfTVNCCi0jZGVmaW5lIFFVQURSQVRVUkVfU0VMX0xTQiBXTEFOX1FVQURSQVRVUkVfU0VMX0xTQgotI2RlZmluZSBRVUFEUkFUVVJFX1NFTF9NQVNLIFdMQU5fUVVBRFJBVFVSRV9TRUxfTUFTSwotI2RlZmluZSBRVUFEUkFUVVJFX1NFTF9HRVQoeCkgV0xBTl9RVUFEUkFUVVJFX1NFTF9HRVQoeCkKLSNkZWZpbmUgUVVBRFJBVFVSRV9TRUxfU0VUKHgpIFdMQU5fUVVBRFJBVFVSRV9TRUxfU0VUKHgpCi0jZGVmaW5lIFFVQURSQVRVUkVfREFDX01TQiBXTEFOX1FVQURSQVRVUkVfREFDX01TQgotI2RlZmluZSBRVUFEUkFUVVJFX0RBQ19MU0IgV0xBTl9RVUFEUkFUVVJFX0RBQ19MU0IKLSNkZWZpbmUgUVVBRFJBVFVSRV9EQUNfTUFTSyBXTEFOX1FVQURSQVRVUkVfREFDX01BU0sKLSNkZWZpbmUgUVVBRFJBVFVSRV9EQUNfR0VUKHgpIFdMQU5fUVVBRFJBVFVSRV9EQUNfR0VUKHgpCi0jZGVmaW5lIFFVQURSQVRVUkVfREFDX1NFVCh4KSBXTEFOX1FVQURSQVRVUkVfREFDX1NFVCh4KQotI2RlZmluZSBQTExfQ09OVFJPTF9BRERSRVNTIFdMQU5fUExMX0NPTlRST0xfQUREUkVTUwotI2RlZmluZSBQTExfQ09OVFJPTF9PRkZTRVQgV0xBTl9QTExfQ09OVFJPTF9PRkZTRVQKLSNkZWZpbmUgUExMX0NPTlRST0xfRElHX1RFU1RfQ0xLX01TQiBXTEFOX1BMTF9DT05UUk9MX0RJR19URVNUX0NMS19NU0IKLSNkZWZpbmUgUExMX0NPTlRST0xfRElHX1RFU1RfQ0xLX0xTQiBXTEFOX1BMTF9DT05UUk9MX0RJR19URVNUX0NMS19MU0IKLSNkZWZpbmUgUExMX0NPTlRST0xfRElHX1RFU1RfQ0xLX01BU0sgV0xBTl9QTExfQ09OVFJPTF9ESUdfVEVTVF9DTEtfTUFTSwotI2RlZmluZSBQTExfQ09OVFJPTF9ESUdfVEVTVF9DTEtfR0VUKHgpIFdMQU5fUExMX0NPTlRST0xfRElHX1RFU1RfQ0xLX0dFVCh4KQotI2RlZmluZSBQTExfQ09OVFJPTF9ESUdfVEVTVF9DTEtfU0VUKHgpIFdMQU5fUExMX0NPTlRST0xfRElHX1RFU1RfQ0xLX1NFVCh4KQotI2RlZmluZSBQTExfQ09OVFJPTF9NQUNfT1ZFUlJJREVfTVNCIFdMQU5fUExMX0NPTlRST0xfTUFDX09WRVJSSURFX01TQgotI2RlZmluZSBQTExfQ09OVFJPTF9NQUNfT1ZFUlJJREVfTFNCIFdMQU5fUExMX0NPTlRST0xfTUFDX09WRVJSSURFX0xTQgotI2RlZmluZSBQTExfQ09OVFJPTF9NQUNfT1ZFUlJJREVfTUFTSyBXTEFOX1BMTF9DT05UUk9MX01BQ19PVkVSUklERV9NQVNLCi0jZGVmaW5lIFBMTF9DT05UUk9MX01BQ19PVkVSUklERV9HRVQoeCkgV0xBTl9QTExfQ09OVFJPTF9NQUNfT1ZFUlJJREVfR0VUKHgpCi0jZGVmaW5lIFBMTF9DT05UUk9MX01BQ19PVkVSUklERV9TRVQoeCkgV0xBTl9QTExfQ09OVFJPTF9NQUNfT1ZFUlJJREVfU0VUKHgpCi0jZGVmaW5lIFBMTF9DT05UUk9MX05PUFdEX01TQiBXTEFOX1BMTF9DT05UUk9MX05PUFdEX01TQgotI2RlZmluZSBQTExfQ09OVFJPTF9OT1BXRF9MU0IgV0xBTl9QTExfQ09OVFJPTF9OT1BXRF9MU0IKLSNkZWZpbmUgUExMX0NPTlRST0xfTk9QV0RfTUFTSyBXTEFOX1BMTF9DT05UUk9MX05PUFdEX01BU0sKLSNkZWZpbmUgUExMX0NPTlRST0xfTk9QV0RfR0VUKHgpIFdMQU5fUExMX0NPTlRST0xfTk9QV0RfR0VUKHgpCi0jZGVmaW5lIFBMTF9DT05UUk9MX05PUFdEX1NFVCh4KSBXTEFOX1BMTF9DT05UUk9MX05PUFdEX1NFVCh4KQotI2RlZmluZSBQTExfQ09OVFJPTF9VUERBVElOR19NU0IgV0xBTl9QTExfQ09OVFJPTF9VUERBVElOR19NU0IKLSNkZWZpbmUgUExMX0NPTlRST0xfVVBEQVRJTkdfTFNCIFdMQU5fUExMX0NPTlRST0xfVVBEQVRJTkdfTFNCCi0jZGVmaW5lIFBMTF9DT05UUk9MX1VQREFUSU5HX01BU0sgV0xBTl9QTExfQ09OVFJPTF9VUERBVElOR19NQVNLCi0jZGVmaW5lIFBMTF9DT05UUk9MX1VQREFUSU5HX0dFVCh4KSBXTEFOX1BMTF9DT05UUk9MX1VQREFUSU5HX0dFVCh4KQotI2RlZmluZSBQTExfQ09OVFJPTF9VUERBVElOR19TRVQoeCkgV0xBTl9QTExfQ09OVFJPTF9VUERBVElOR19TRVQoeCkKLSNkZWZpbmUgUExMX0NPTlRST0xfQllQQVNTX01TQiBXTEFOX1BMTF9DT05UUk9MX0JZUEFTU19NU0IKLSNkZWZpbmUgUExMX0NPTlRST0xfQllQQVNTX0xTQiBXTEFOX1BMTF9DT05UUk9MX0JZUEFTU19MU0IKLSNkZWZpbmUgUExMX0NPTlRST0xfQllQQVNTX01BU0sgV0xBTl9QTExfQ09OVFJPTF9CWVBBU1NfTUFTSwotI2RlZmluZSBQTExfQ09OVFJPTF9CWVBBU1NfR0VUKHgpIFdMQU5fUExMX0NPTlRST0xfQllQQVNTX0dFVCh4KQotI2RlZmluZSBQTExfQ09OVFJPTF9CWVBBU1NfU0VUKHgpIFdMQU5fUExMX0NPTlRST0xfQllQQVNTX1NFVCh4KQotI2RlZmluZSBQTExfQ09OVFJPTF9SRUZESVZfTVNCIFdMQU5fUExMX0NPTlRST0xfUkVGRElWX01TQgotI2RlZmluZSBQTExfQ09OVFJPTF9SRUZESVZfTFNCIFdMQU5fUExMX0NPTlRST0xfUkVGRElWX0xTQgotI2RlZmluZSBQTExfQ09OVFJPTF9SRUZESVZfTUFTSyBXTEFOX1BMTF9DT05UUk9MX1JFRkRJVl9NQVNLCi0jZGVmaW5lIFBMTF9DT05UUk9MX1JFRkRJVl9HRVQoeCkgV0xBTl9QTExfQ09OVFJPTF9SRUZESVZfR0VUKHgpCi0jZGVmaW5lIFBMTF9DT05UUk9MX1JFRkRJVl9TRVQoeCkgV0xBTl9QTExfQ09OVFJPTF9SRUZESVZfU0VUKHgpCi0jZGVmaW5lIFBMTF9DT05UUk9MX0RJVl9NU0IgV0xBTl9QTExfQ09OVFJPTF9ESVZfTVNCCi0jZGVmaW5lIFBMTF9DT05UUk9MX0RJVl9MU0IgV0xBTl9QTExfQ09OVFJPTF9ESVZfTFNCCi0jZGVmaW5lIFBMTF9DT05UUk9MX0RJVl9NQVNLIFdMQU5fUExMX0NPTlRST0xfRElWX01BU0sKLSNkZWZpbmUgUExMX0NPTlRST0xfRElWX0dFVCh4KSBXTEFOX1BMTF9DT05UUk9MX0RJVl9HRVQoeCkKLSNkZWZpbmUgUExMX0NPTlRST0xfRElWX1NFVCh4KSBXTEFOX1BMTF9DT05UUk9MX0RJVl9TRVQoeCkKLSNkZWZpbmUgUExMX1NFVFRMRV9BRERSRVNTIFdMQU5fUExMX1NFVFRMRV9BRERSRVNTCi0jZGVmaW5lIFBMTF9TRVRUTEVfT0ZGU0VUIFdMQU5fUExMX1NFVFRMRV9PRkZTRVQKLSNkZWZpbmUgUExMX1NFVFRMRV9USU1FX01TQiBXTEFOX1BMTF9TRVRUTEVfVElNRV9NU0IKLSNkZWZpbmUgUExMX1NFVFRMRV9USU1FX0xTQiBXTEFOX1BMTF9TRVRUTEVfVElNRV9MU0IKLSNkZWZpbmUgUExMX1NFVFRMRV9USU1FX01BU0sgV0xBTl9QTExfU0VUVExFX1RJTUVfTUFTSwotI2RlZmluZSBQTExfU0VUVExFX1RJTUVfR0VUKHgpIFdMQU5fUExMX1NFVFRMRV9USU1FX0dFVCh4KQotI2RlZmluZSBQTExfU0VUVExFX1RJTUVfU0VUKHgpIFdMQU5fUExMX1NFVFRMRV9USU1FX1NFVCh4KQotI2RlZmluZSBYVEFMX1NFVFRMRV9BRERSRVNTIFdMQU5fWFRBTF9TRVRUTEVfQUREUkVTUwotI2RlZmluZSBYVEFMX1NFVFRMRV9PRkZTRVQgV0xBTl9YVEFMX1NFVFRMRV9PRkZTRVQKLSNkZWZpbmUgWFRBTF9TRVRUTEVfVElNRV9NU0IgV0xBTl9YVEFMX1NFVFRMRV9USU1FX01TQgotI2RlZmluZSBYVEFMX1NFVFRMRV9USU1FX0xTQiBXTEFOX1hUQUxfU0VUVExFX1RJTUVfTFNCCi0jZGVmaW5lIFhUQUxfU0VUVExFX1RJTUVfTUFTSyBXTEFOX1hUQUxfU0VUVExFX1RJTUVfTUFTSwotI2RlZmluZSBYVEFMX1NFVFRMRV9USU1FX0dFVCh4KSBXTEFOX1hUQUxfU0VUVExFX1RJTUVfR0VUKHgpCi0jZGVmaW5lIFhUQUxfU0VUVExFX1RJTUVfU0VUKHgpIFdMQU5fWFRBTF9TRVRUTEVfVElNRV9TRVQoeCkKICNkZWZpbmUgQ1BVX0NMT0NLX0FERFJFU1MgV0xBTl9DUFVfQ0xPQ0tfQUREUkVTUwogI2RlZmluZSBDUFVfQ0xPQ0tfT0ZGU0VUIFdMQU5fQ1BVX0NMT0NLX09GRlNFVAogI2RlZmluZSBDUFVfQ0xPQ0tfU1RBTkRBUkRfTVNCIFdMQU5fQ1BVX0NMT0NLX1NUQU5EQVJEX01TQgpAQCAtMjE1LDUxMCArMTIzLDYgQEAKICNkZWZpbmUgQ0xPQ0tfQ09OVFJPTF9TSTBfQ0xLX01BU0sgV0xBTl9DTE9DS19DT05UUk9MX1NJMF9DTEtfTUFTSwogI2RlZmluZSBDTE9DS19DT05UUk9MX1NJMF9DTEtfR0VUKHgpIFdMQU5fQ0xPQ0tfQ09OVFJPTF9TSTBfQ0xLX0dFVCh4KQogI2RlZmluZSBDTE9DS19DT05UUk9MX1NJMF9DTEtfU0VUKHgpIFdMQU5fQ0xPQ0tfQ09OVFJPTF9TSTBfQ0xLX1NFVCh4KQotI2RlZmluZSBCSUFTX09WRVJSSURFX0FERFJFU1MgV0xBTl9CSUFTX09WRVJSSURFX0FERFJFU1MKLSNkZWZpbmUgQklBU19PVkVSUklERV9PRkZTRVQgV0xBTl9CSUFTX09WRVJSSURFX09GRlNFVAotI2RlZmluZSBCSUFTX09WRVJSSURFX09OX01TQiBXTEFOX0JJQVNfT1ZFUlJJREVfT05fTVNCCi0jZGVmaW5lIEJJQVNfT1ZFUlJJREVfT05fTFNCIFdMQU5fQklBU19PVkVSUklERV9PTl9MU0IKLSNkZWZpbmUgQklBU19PVkVSUklERV9PTl9NQVNLIFdMQU5fQklBU19PVkVSUklERV9PTl9NQVNLCi0jZGVmaW5lIEJJQVNfT1ZFUlJJREVfT05fR0VUKHgpIFdMQU5fQklBU19PVkVSUklERV9PTl9HRVQoeCkKLSNkZWZpbmUgQklBU19PVkVSUklERV9PTl9TRVQoeCkgV0xBTl9CSUFTX09WRVJSSURFX09OX1NFVCh4KQotI2RlZmluZSBXRFRfQ09OVFJPTF9BRERSRVNTIFdMQU5fV0RUX0NPTlRST0xfQUREUkVTUwotI2RlZmluZSBXRFRfQ09OVFJPTF9PRkZTRVQgV0xBTl9XRFRfQ09OVFJPTF9PRkZTRVQKLSNkZWZpbmUgV0RUX0NPTlRST0xfQUNUSU9OX01TQiBXTEFOX1dEVF9DT05UUk9MX0FDVElPTl9NU0IKLSNkZWZpbmUgV0RUX0NPTlRST0xfQUNUSU9OX0xTQiBXTEFOX1dEVF9DT05UUk9MX0FDVElPTl9MU0IKLSNkZWZpbmUgV0RUX0NPTlRST0xfQUNUSU9OX01BU0sgV0xBTl9XRFRfQ09OVFJPTF9BQ1RJT05fTUFTSwotI2RlZmluZSBXRFRfQ09OVFJPTF9BQ1RJT05fR0VUKHgpIFdMQU5fV0RUX0NPTlRST0xfQUNUSU9OX0dFVCh4KQotI2RlZmluZSBXRFRfQ09OVFJPTF9BQ1RJT05fU0VUKHgpIFdMQU5fV0RUX0NPTlRST0xfQUNUSU9OX1NFVCh4KQotI2RlZmluZSBXRFRfU1RBVFVTX0FERFJFU1MgV0xBTl9XRFRfU1RBVFVTX0FERFJFU1MKLSNkZWZpbmUgV0RUX1NUQVRVU19PRkZTRVQgV0xBTl9XRFRfU1RBVFVTX09GRlNFVAotI2RlZmluZSBXRFRfU1RBVFVTX0lOVEVSUlVQVF9NU0IgV0xBTl9XRFRfU1RBVFVTX0lOVEVSUlVQVF9NU0IKLSNkZWZpbmUgV0RUX1NUQVRVU19JTlRFUlJVUFRfTFNCIFdMQU5fV0RUX1NUQVRVU19JTlRFUlJVUFRfTFNCCi0jZGVmaW5lIFdEVF9TVEFUVVNfSU5URVJSVVBUX01BU0sgV0xBTl9XRFRfU1RBVFVTX0lOVEVSUlVQVF9NQVNLCi0jZGVmaW5lIFdEVF9TVEFUVVNfSU5URVJSVVBUX0dFVCh4KSBXTEFOX1dEVF9TVEFUVVNfSU5URVJSVVBUX0dFVCh4KQotI2RlZmluZSBXRFRfU1RBVFVTX0lOVEVSUlVQVF9TRVQoeCkgV0xBTl9XRFRfU1RBVFVTX0lOVEVSUlVQVF9TRVQoeCkKLSNkZWZpbmUgV0RUX0FERFJFU1MgV0xBTl9XRFRfQUREUkVTUwotI2RlZmluZSBXRFRfT0ZGU0VUIFdMQU5fV0RUX09GRlNFVAotI2RlZmluZSBXRFRfVEFSR0VUX01TQiBXTEFOX1dEVF9UQVJHRVRfTVNCCi0jZGVmaW5lIFdEVF9UQVJHRVRfTFNCIFdMQU5fV0RUX1RBUkdFVF9MU0IKLSNkZWZpbmUgV0RUX1RBUkdFVF9NQVNLIFdMQU5fV0RUX1RBUkdFVF9NQVNLCi0jZGVmaW5lIFdEVF9UQVJHRVRfR0VUKHgpIFdMQU5fV0RUX1RBUkdFVF9HRVQoeCkKLSNkZWZpbmUgV0RUX1RBUkdFVF9TRVQoeCkgV0xBTl9XRFRfVEFSR0VUX1NFVCh4KQotI2RlZmluZSBXRFRfQ09VTlRfQUREUkVTUyBXTEFOX1dEVF9DT1VOVF9BRERSRVNTCi0jZGVmaW5lIFdEVF9DT1VOVF9PRkZTRVQgV0xBTl9XRFRfQ09VTlRfT0ZGU0VUCi0jZGVmaW5lIFdEVF9DT1VOVF9WQUxVRV9NU0IgV0xBTl9XRFRfQ09VTlRfVkFMVUVfTVNCCi0jZGVmaW5lIFdEVF9DT1VOVF9WQUxVRV9MU0IgV0xBTl9XRFRfQ09VTlRfVkFMVUVfTFNCCi0jZGVmaW5lIFdEVF9DT1VOVF9WQUxVRV9NQVNLIFdMQU5fV0RUX0NPVU5UX1ZBTFVFX01BU0sKLSNkZWZpbmUgV0RUX0NPVU5UX1ZBTFVFX0dFVCh4KSBXTEFOX1dEVF9DT1VOVF9WQUxVRV9HRVQoeCkKLSNkZWZpbmUgV0RUX0NPVU5UX1ZBTFVFX1NFVCh4KSBXTEFOX1dEVF9DT1VOVF9WQUxVRV9TRVQoeCkKLSNkZWZpbmUgV0RUX1JFU0VUX0FERFJFU1MgV0xBTl9XRFRfUkVTRVRfQUREUkVTUwotI2RlZmluZSBXRFRfUkVTRVRfT0ZGU0VUIFdMQU5fV0RUX1JFU0VUX09GRlNFVAotI2RlZmluZSBXRFRfUkVTRVRfVkFMVUVfTVNCIFdMQU5fV0RUX1JFU0VUX1ZBTFVFX01TQgotI2RlZmluZSBXRFRfUkVTRVRfVkFMVUVfTFNCIFdMQU5fV0RUX1JFU0VUX1ZBTFVFX0xTQgotI2RlZmluZSBXRFRfUkVTRVRfVkFMVUVfTUFTSyBXTEFOX1dEVF9SRVNFVF9WQUxVRV9NQVNLCi0jZGVmaW5lIFdEVF9SRVNFVF9WQUxVRV9HRVQoeCkgV0xBTl9XRFRfUkVTRVRfVkFMVUVfR0VUKHgpCi0jZGVmaW5lIFdEVF9SRVNFVF9WQUxVRV9TRVQoeCkgV0xBTl9XRFRfUkVTRVRfVkFMVUVfU0VUKHgpCi0jZGVmaW5lIElOVF9TVEFUVVNfQUREUkVTUyBXTEFOX0lOVF9TVEFUVVNfQUREUkVTUwotI2RlZmluZSBJTlRfU1RBVFVTX09GRlNFVCBXTEFOX0lOVF9TVEFUVVNfT0ZGU0VUCi0jZGVmaW5lIElOVF9TVEFUVVNfSENJX1VBUlRfTVNCIFdMQU5fSU5UX1NUQVRVU19IQ0lfVUFSVF9NU0IKLSNkZWZpbmUgSU5UX1NUQVRVU19IQ0lfVUFSVF9MU0IgV0xBTl9JTlRfU1RBVFVTX0hDSV9VQVJUX0xTQgotI2RlZmluZSBJTlRfU1RBVFVTX0hDSV9VQVJUX01BU0sgV0xBTl9JTlRfU1RBVFVTX0hDSV9VQVJUX01BU0sKLSNkZWZpbmUgSU5UX1NUQVRVU19IQ0lfVUFSVF9HRVQoeCkgV0xBTl9JTlRfU1RBVFVTX0hDSV9VQVJUX0dFVCh4KQotI2RlZmluZSBJTlRfU1RBVFVTX0hDSV9VQVJUX1NFVCh4KSBXTEFOX0lOVF9TVEFUVVNfSENJX1VBUlRfU0VUKHgpCi0jZGVmaW5lIElOVF9TVEFUVVNfVEhFUk1fTVNCIFdMQU5fSU5UX1NUQVRVU19USEVSTV9NU0IKLSNkZWZpbmUgSU5UX1NUQVRVU19USEVSTV9MU0IgV0xBTl9JTlRfU1RBVFVTX1RIRVJNX0xTQgotI2RlZmluZSBJTlRfU1RBVFVTX1RIRVJNX01BU0sgV0xBTl9JTlRfU1RBVFVTX1RIRVJNX01BU0sKLSNkZWZpbmUgSU5UX1NUQVRVU19USEVSTV9HRVQoeCkgV0xBTl9JTlRfU1RBVFVTX1RIRVJNX0dFVCh4KQotI2RlZmluZSBJTlRfU1RBVFVTX1RIRVJNX1NFVCh4KSBXTEFOX0lOVF9TVEFUVVNfVEhFUk1fU0VUKHgpCi0jZGVmaW5lIElOVF9TVEFUVVNfRUZVU0VfT1ZFUldSSVRFX01TQiBXTEFOX0lOVF9TVEFUVVNfRUZVU0VfT1ZFUldSSVRFX01TQgotI2RlZmluZSBJTlRfU1RBVFVTX0VGVVNFX09WRVJXUklURV9MU0IgV0xBTl9JTlRfU1RBVFVTX0VGVVNFX09WRVJXUklURV9MU0IKLSNkZWZpbmUgSU5UX1NUQVRVU19FRlVTRV9PVkVSV1JJVEVfTUFTSyBXTEFOX0lOVF9TVEFUVVNfRUZVU0VfT1ZFUldSSVRFX01BU0sKLSNkZWZpbmUgSU5UX1NUQVRVU19FRlVTRV9PVkVSV1JJVEVfR0VUKHgpIFdMQU5fSU5UX1NUQVRVU19FRlVTRV9PVkVSV1JJVEVfR0VUKHgpCi0jZGVmaW5lIElOVF9TVEFUVVNfRUZVU0VfT1ZFUldSSVRFX1NFVCh4KSBXTEFOX0lOVF9TVEFUVVNfRUZVU0VfT1ZFUldSSVRFX1NFVCh4KQotI2RlZmluZSBJTlRfU1RBVFVTX1VBUlRfTUJPWF9NU0IgV0xBTl9JTlRfU1RBVFVTX1VBUlRfTUJPWF9NU0IKLSNkZWZpbmUgSU5UX1NUQVRVU19VQVJUX01CT1hfTFNCIFdMQU5fSU5UX1NUQVRVU19VQVJUX01CT1hfTFNCCi0jZGVmaW5lIElOVF9TVEFUVVNfVUFSVF9NQk9YX01BU0sgV0xBTl9JTlRfU1RBVFVTX1VBUlRfTUJPWF9NQVNLCi0jZGVmaW5lIElOVF9TVEFUVVNfVUFSVF9NQk9YX0dFVCh4KSBXTEFOX0lOVF9TVEFUVVNfVUFSVF9NQk9YX0dFVCh4KQotI2RlZmluZSBJTlRfU1RBVFVTX1VBUlRfTUJPWF9TRVQoeCkgV0xBTl9JTlRfU1RBVFVTX1VBUlRfTUJPWF9TRVQoeCkKLSNkZWZpbmUgSU5UX1NUQVRVU19HRU5FUklDX01CT1hfTVNCIFdMQU5fSU5UX1NUQVRVU19HRU5FUklDX01CT1hfTVNCCi0jZGVmaW5lIElOVF9TVEFUVVNfR0VORVJJQ19NQk9YX0xTQiBXTEFOX0lOVF9TVEFUVVNfR0VORVJJQ19NQk9YX0xTQgotI2RlZmluZSBJTlRfU1RBVFVTX0dFTkVSSUNfTUJPWF9NQVNLIFdMQU5fSU5UX1NUQVRVU19HRU5FUklDX01CT1hfTUFTSwotI2RlZmluZSBJTlRfU1RBVFVTX0dFTkVSSUNfTUJPWF9HRVQoeCkgV0xBTl9JTlRfU1RBVFVTX0dFTkVSSUNfTUJPWF9HRVQoeCkKLSNkZWZpbmUgSU5UX1NUQVRVU19HRU5FUklDX01CT1hfU0VUKHgpIFdMQU5fSU5UX1NUQVRVU19HRU5FUklDX01CT1hfU0VUKHgpCi0jZGVmaW5lIElOVF9TVEFUVVNfUkRNQV9NU0IgV0xBTl9JTlRfU1RBVFVTX1JETUFfTVNCCi0jZGVmaW5lIElOVF9TVEFUVVNfUkRNQV9MU0IgV0xBTl9JTlRfU1RBVFVTX1JETUFfTFNCCi0jZGVmaW5lIElOVF9TVEFUVVNfUkRNQV9NQVNLIFdMQU5fSU5UX1NUQVRVU19SRE1BX01BU0sKLSNkZWZpbmUgSU5UX1NUQVRVU19SRE1BX0dFVCh4KSBXTEFOX0lOVF9TVEFUVVNfUkRNQV9HRVQoeCkKLSNkZWZpbmUgSU5UX1NUQVRVU19SRE1BX1NFVCh4KSBXTEFOX0lOVF9TVEFUVVNfUkRNQV9TRVQoeCkKLSNkZWZpbmUgSU5UX1NUQVRVU19CVENPRVhfTVNCIFdMQU5fSU5UX1NUQVRVU19CVENPRVhfTVNCCi0jZGVmaW5lIElOVF9TVEFUVVNfQlRDT0VYX0xTQiBXTEFOX0lOVF9TVEFUVVNfQlRDT0VYX0xTQgotI2RlZmluZSBJTlRfU1RBVFVTX0JUQ09FWF9NQVNLIFdMQU5fSU5UX1NUQVRVU19CVENPRVhfTUFTSwotI2RlZmluZSBJTlRfU1RBVFVTX0JUQ09FWF9HRVQoeCkgV0xBTl9JTlRfU1RBVFVTX0JUQ09FWF9HRVQoeCkKLSNkZWZpbmUgSU5UX1NUQVRVU19CVENPRVhfU0VUKHgpIFdMQU5fSU5UX1NUQVRVU19CVENPRVhfU0VUKHgpCi0jZGVmaW5lIElOVF9TVEFUVVNfUlRDX1BPV0VSX01TQiBXTEFOX0lOVF9TVEFUVVNfUlRDX1BPV0VSX01TQgotI2RlZmluZSBJTlRfU1RBVFVTX1JUQ19QT1dFUl9MU0IgV0xBTl9JTlRfU1RBVFVTX1JUQ19QT1dFUl9MU0IKLSNkZWZpbmUgSU5UX1NUQVRVU19SVENfUE9XRVJfTUFTSyBXTEFOX0lOVF9TVEFUVVNfUlRDX1BPV0VSX01BU0sKLSNkZWZpbmUgSU5UX1NUQVRVU19SVENfUE9XRVJfR0VUKHgpIFdMQU5fSU5UX1NUQVRVU19SVENfUE9XRVJfR0VUKHgpCi0jZGVmaW5lIElOVF9TVEFUVVNfUlRDX1BPV0VSX1NFVCh4KSBXTEFOX0lOVF9TVEFUVVNfUlRDX1BPV0VSX1NFVCh4KQotI2RlZmluZSBJTlRfU1RBVFVTX01BQ19NU0IgV0xBTl9JTlRfU1RBVFVTX01BQ19NU0IKLSNkZWZpbmUgSU5UX1NUQVRVU19NQUNfTFNCIFdMQU5fSU5UX1NUQVRVU19NQUNfTFNCCi0jZGVmaW5lIElOVF9TVEFUVVNfTUFDX01BU0sgV0xBTl9JTlRfU1RBVFVTX01BQ19NQVNLCi0jZGVmaW5lIElOVF9TVEFUVVNfTUFDX0dFVCh4KSBXTEFOX0lOVF9TVEFUVVNfTUFDX0dFVCh4KQotI2RlZmluZSBJTlRfU1RBVFVTX01BQ19TRVQoeCkgV0xBTl9JTlRfU1RBVFVTX01BQ19TRVQoeCkKLSNkZWZpbmUgSU5UX1NUQVRVU19NQUlMQk9YX01TQiBXTEFOX0lOVF9TVEFUVVNfTUFJTEJPWF9NU0IKLSNkZWZpbmUgSU5UX1NUQVRVU19NQUlMQk9YX0xTQiBXTEFOX0lOVF9TVEFUVVNfTUFJTEJPWF9MU0IKLSNkZWZpbmUgSU5UX1NUQVRVU19NQUlMQk9YX01BU0sgV0xBTl9JTlRfU1RBVFVTX01BSUxCT1hfTUFTSwotI2RlZmluZSBJTlRfU1RBVFVTX01BSUxCT1hfR0VUKHgpIFdMQU5fSU5UX1NUQVRVU19NQUlMQk9YX0dFVCh4KQotI2RlZmluZSBJTlRfU1RBVFVTX01BSUxCT1hfU0VUKHgpIFdMQU5fSU5UX1NUQVRVU19NQUlMQk9YX1NFVCh4KQotI2RlZmluZSBJTlRfU1RBVFVTX1JUQ19BTEFSTV9NU0IgV0xBTl9JTlRfU1RBVFVTX1JUQ19BTEFSTV9NU0IKLSNkZWZpbmUgSU5UX1NUQVRVU19SVENfQUxBUk1fTFNCIFdMQU5fSU5UX1NUQVRVU19SVENfQUxBUk1fTFNCCi0jZGVmaW5lIElOVF9TVEFUVVNfUlRDX0FMQVJNX01BU0sgV0xBTl9JTlRfU1RBVFVTX1JUQ19BTEFSTV9NQVNLCi0jZGVmaW5lIElOVF9TVEFUVVNfUlRDX0FMQVJNX0dFVCh4KSBXTEFOX0lOVF9TVEFUVVNfUlRDX0FMQVJNX0dFVCh4KQotI2RlZmluZSBJTlRfU1RBVFVTX1JUQ19BTEFSTV9TRVQoeCkgV0xBTl9JTlRfU1RBVFVTX1JUQ19BTEFSTV9TRVQoeCkKLSNkZWZpbmUgSU5UX1NUQVRVU19IRl9USU1FUl9NU0IgV0xBTl9JTlRfU1RBVFVTX0hGX1RJTUVSX01TQgotI2RlZmluZSBJTlRfU1RBVFVTX0hGX1RJTUVSX0xTQiBXTEFOX0lOVF9TVEFUVVNfSEZfVElNRVJfTFNCCi0jZGVmaW5lIElOVF9TVEFUVVNfSEZfVElNRVJfTUFTSyBXTEFOX0lOVF9TVEFUVVNfSEZfVElNRVJfTUFTSwotI2RlZmluZSBJTlRfU1RBVFVTX0hGX1RJTUVSX0dFVCh4KSBXTEFOX0lOVF9TVEFUVVNfSEZfVElNRVJfR0VUKHgpCi0jZGVmaW5lIElOVF9TVEFUVVNfSEZfVElNRVJfU0VUKHgpIFdMQU5fSU5UX1NUQVRVU19IRl9USU1FUl9TRVQoeCkKLSNkZWZpbmUgSU5UX1NUQVRVU19MRl9USU1FUjNfTVNCIFdMQU5fSU5UX1NUQVRVU19MRl9USU1FUjNfTVNCCi0jZGVmaW5lIElOVF9TVEFUVVNfTEZfVElNRVIzX0xTQiBXTEFOX0lOVF9TVEFUVVNfTEZfVElNRVIzX0xTQgotI2RlZmluZSBJTlRfU1RBVFVTX0xGX1RJTUVSM19NQVNLIFdMQU5fSU5UX1NUQVRVU19MRl9USU1FUjNfTUFTSwotI2RlZmluZSBJTlRfU1RBVFVTX0xGX1RJTUVSM19HRVQoeCkgV0xBTl9JTlRfU1RBVFVTX0xGX1RJTUVSM19HRVQoeCkKLSNkZWZpbmUgSU5UX1NUQVRVU19MRl9USU1FUjNfU0VUKHgpIFdMQU5fSU5UX1NUQVRVU19MRl9USU1FUjNfU0VUKHgpCi0jZGVmaW5lIElOVF9TVEFUVVNfTEZfVElNRVIyX01TQiBXTEFOX0lOVF9TVEFUVVNfTEZfVElNRVIyX01TQgotI2RlZmluZSBJTlRfU1RBVFVTX0xGX1RJTUVSMl9MU0IgV0xBTl9JTlRfU1RBVFVTX0xGX1RJTUVSMl9MU0IKLSNkZWZpbmUgSU5UX1NUQVRVU19MRl9USU1FUjJfTUFTSyBXTEFOX0lOVF9TVEFUVVNfTEZfVElNRVIyX01BU0sKLSNkZWZpbmUgSU5UX1NUQVRVU19MRl9USU1FUjJfR0VUKHgpIFdMQU5fSU5UX1NUQVRVU19MRl9USU1FUjJfR0VUKHgpCi0jZGVmaW5lIElOVF9TVEFUVVNfTEZfVElNRVIyX1NFVCh4KSBXTEFOX0lOVF9TVEFUVVNfTEZfVElNRVIyX1NFVCh4KQotI2RlZmluZSBJTlRfU1RBVFVTX0xGX1RJTUVSMV9NU0IgV0xBTl9JTlRfU1RBVFVTX0xGX1RJTUVSMV9NU0IKLSNkZWZpbmUgSU5UX1NUQVRVU19MRl9USU1FUjFfTFNCIFdMQU5fSU5UX1NUQVRVU19MRl9USU1FUjFfTFNCCi0jZGVmaW5lIElOVF9TVEFUVVNfTEZfVElNRVIxX01BU0sgV0xBTl9JTlRfU1RBVFVTX0xGX1RJTUVSMV9NQVNLCi0jZGVmaW5lIElOVF9TVEFUVVNfTEZfVElNRVIxX0dFVCh4KSBXTEFOX0lOVF9TVEFUVVNfTEZfVElNRVIxX0dFVCh4KQotI2RlZmluZSBJTlRfU1RBVFVTX0xGX1RJTUVSMV9TRVQoeCkgV0xBTl9JTlRfU1RBVFVTX0xGX1RJTUVSMV9TRVQoeCkKLSNkZWZpbmUgSU5UX1NUQVRVU19MRl9USU1FUjBfTVNCIFdMQU5fSU5UX1NUQVRVU19MRl9USU1FUjBfTVNCCi0jZGVmaW5lIElOVF9TVEFUVVNfTEZfVElNRVIwX0xTQiBXTEFOX0lOVF9TVEFUVVNfTEZfVElNRVIwX0xTQgotI2RlZmluZSBJTlRfU1RBVFVTX0xGX1RJTUVSMF9NQVNLIFdMQU5fSU5UX1NUQVRVU19MRl9USU1FUjBfTUFTSwotI2RlZmluZSBJTlRfU1RBVFVTX0xGX1RJTUVSMF9HRVQoeCkgV0xBTl9JTlRfU1RBVFVTX0xGX1RJTUVSMF9HRVQoeCkKLSNkZWZpbmUgSU5UX1NUQVRVU19MRl9USU1FUjBfU0VUKHgpIFdMQU5fSU5UX1NUQVRVU19MRl9USU1FUjBfU0VUKHgpCi0jZGVmaW5lIElOVF9TVEFUVVNfS0VZUEFEX01TQiBXTEFOX0lOVF9TVEFUVVNfS0VZUEFEX01TQgotI2RlZmluZSBJTlRfU1RBVFVTX0tFWVBBRF9MU0IgV0xBTl9JTlRfU1RBVFVTX0tFWVBBRF9MU0IKLSNkZWZpbmUgSU5UX1NUQVRVU19LRVlQQURfTUFTSyBXTEFOX0lOVF9TVEFUVVNfS0VZUEFEX01BU0sKLSNkZWZpbmUgSU5UX1NUQVRVU19LRVlQQURfR0VUKHgpIFdMQU5fSU5UX1NUQVRVU19LRVlQQURfR0VUKHgpCi0jZGVmaW5lIElOVF9TVEFUVVNfS0VZUEFEX1NFVCh4KSBXTEFOX0lOVF9TVEFUVVNfS0VZUEFEX1NFVCh4KQotI2RlZmluZSBJTlRfU1RBVFVTX1NJX01TQiBXTEFOX0lOVF9TVEFUVVNfU0lfTVNCCi0jZGVmaW5lIElOVF9TVEFUVVNfU0lfTFNCIFdMQU5fSU5UX1NUQVRVU19TSV9MU0IKLSNkZWZpbmUgSU5UX1NUQVRVU19TSV9NQVNLIFdMQU5fSU5UX1NUQVRVU19TSV9NQVNLCi0jZGVmaW5lIElOVF9TVEFUVVNfU0lfR0VUKHgpIFdMQU5fSU5UX1NUQVRVU19TSV9HRVQoeCkKLSNkZWZpbmUgSU5UX1NUQVRVU19TSV9TRVQoeCkgV0xBTl9JTlRfU1RBVFVTX1NJX1NFVCh4KQotI2RlZmluZSBJTlRfU1RBVFVTX0dQSU9fTVNCIFdMQU5fSU5UX1NUQVRVU19HUElPX01TQgotI2RlZmluZSBJTlRfU1RBVFVTX0dQSU9fTFNCIFdMQU5fSU5UX1NUQVRVU19HUElPX0xTQgotI2RlZmluZSBJTlRfU1RBVFVTX0dQSU9fTUFTSyBXTEFOX0lOVF9TVEFUVVNfR1BJT19NQVNLCi0jZGVmaW5lIElOVF9TVEFUVVNfR1BJT19HRVQoeCkgV0xBTl9JTlRfU1RBVFVTX0dQSU9fR0VUKHgpCi0jZGVmaW5lIElOVF9TVEFUVVNfR1BJT19TRVQoeCkgV0xBTl9JTlRfU1RBVFVTX0dQSU9fU0VUKHgpCi0jZGVmaW5lIElOVF9TVEFUVVNfVUFSVF9NU0IgV0xBTl9JTlRfU1RBVFVTX1VBUlRfTVNCCi0jZGVmaW5lIElOVF9TVEFUVVNfVUFSVF9MU0IgV0xBTl9JTlRfU1RBVFVTX1VBUlRfTFNCCi0jZGVmaW5lIElOVF9TVEFUVVNfVUFSVF9NQVNLIFdMQU5fSU5UX1NUQVRVU19VQVJUX01BU0sKLSNkZWZpbmUgSU5UX1NUQVRVU19VQVJUX0dFVCh4KSBXTEFOX0lOVF9TVEFUVVNfVUFSVF9HRVQoeCkKLSNkZWZpbmUgSU5UX1NUQVRVU19VQVJUX1NFVCh4KSBXTEFOX0lOVF9TVEFUVVNfVUFSVF9TRVQoeCkKLSNkZWZpbmUgSU5UX1NUQVRVU19FUlJPUl9NU0IgV0xBTl9JTlRfU1RBVFVTX0VSUk9SX01TQgotI2RlZmluZSBJTlRfU1RBVFVTX0VSUk9SX0xTQiBXTEFOX0lOVF9TVEFUVVNfRVJST1JfTFNCCi0jZGVmaW5lIElOVF9TVEFUVVNfRVJST1JfTUFTSyBXTEFOX0lOVF9TVEFUVVNfRVJST1JfTUFTSwotI2RlZmluZSBJTlRfU1RBVFVTX0VSUk9SX0dFVCh4KSBXTEFOX0lOVF9TVEFUVVNfRVJST1JfR0VUKHgpCi0jZGVmaW5lIElOVF9TVEFUVVNfRVJST1JfU0VUKHgpIFdMQU5fSU5UX1NUQVRVU19FUlJPUl9TRVQoeCkKLSNkZWZpbmUgSU5UX1NUQVRVU19XRFRfSU5UX01TQiBXTEFOX0lOVF9TVEFUVVNfV0RUX0lOVF9NU0IKLSNkZWZpbmUgSU5UX1NUQVRVU19XRFRfSU5UX0xTQiBXTEFOX0lOVF9TVEFUVVNfV0RUX0lOVF9MU0IKLSNkZWZpbmUgSU5UX1NUQVRVU19XRFRfSU5UX01BU0sgV0xBTl9JTlRfU1RBVFVTX1dEVF9JTlRfTUFTSwotI2RlZmluZSBJTlRfU1RBVFVTX1dEVF9JTlRfR0VUKHgpIFdMQU5fSU5UX1NUQVRVU19XRFRfSU5UX0dFVCh4KQotI2RlZmluZSBJTlRfU1RBVFVTX1dEVF9JTlRfU0VUKHgpIFdMQU5fSU5UX1NUQVRVU19XRFRfSU5UX1NFVCh4KQotI2RlZmluZSBMRl9USU1FUjBfQUREUkVTUyBXTEFOX0xGX1RJTUVSMF9BRERSRVNTCi0jZGVmaW5lIExGX1RJTUVSMF9PRkZTRVQgV0xBTl9MRl9USU1FUjBfT0ZGU0VUCi0jZGVmaW5lIExGX1RJTUVSMF9UQVJHRVRfTVNCIFdMQU5fTEZfVElNRVIwX1RBUkdFVF9NU0IKLSNkZWZpbmUgTEZfVElNRVIwX1RBUkdFVF9MU0IgV0xBTl9MRl9USU1FUjBfVEFSR0VUX0xTQgotI2RlZmluZSBMRl9USU1FUjBfVEFSR0VUX01BU0sgV0xBTl9MRl9USU1FUjBfVEFSR0VUX01BU0sKLSNkZWZpbmUgTEZfVElNRVIwX1RBUkdFVF9HRVQoeCkgV0xBTl9MRl9USU1FUjBfVEFSR0VUX0dFVCh4KQotI2RlZmluZSBMRl9USU1FUjBfVEFSR0VUX1NFVCh4KSBXTEFOX0xGX1RJTUVSMF9UQVJHRVRfU0VUKHgpCi0jZGVmaW5lIExGX1RJTUVSX0NPVU5UMF9BRERSRVNTIFdMQU5fTEZfVElNRVJfQ09VTlQwX0FERFJFU1MKLSNkZWZpbmUgTEZfVElNRVJfQ09VTlQwX09GRlNFVCBXTEFOX0xGX1RJTUVSX0NPVU5UMF9PRkZTRVQKLSNkZWZpbmUgTEZfVElNRVJfQ09VTlQwX1ZBTFVFX01TQiBXTEFOX0xGX1RJTUVSX0NPVU5UMF9WQUxVRV9NU0IKLSNkZWZpbmUgTEZfVElNRVJfQ09VTlQwX1ZBTFVFX0xTQiBXTEFOX0xGX1RJTUVSX0NPVU5UMF9WQUxVRV9MU0IKLSNkZWZpbmUgTEZfVElNRVJfQ09VTlQwX1ZBTFVFX01BU0sgV0xBTl9MRl9USU1FUl9DT1VOVDBfVkFMVUVfTUFTSwotI2RlZmluZSBMRl9USU1FUl9DT1VOVDBfVkFMVUVfR0VUKHgpIFdMQU5fTEZfVElNRVJfQ09VTlQwX1ZBTFVFX0dFVCh4KQotI2RlZmluZSBMRl9USU1FUl9DT1VOVDBfVkFMVUVfU0VUKHgpIFdMQU5fTEZfVElNRVJfQ09VTlQwX1ZBTFVFX1NFVCh4KQotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMF9BRERSRVNTIFdMQU5fTEZfVElNRVJfQ09OVFJPTDBfQUREUkVTUwotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMF9PRkZTRVQgV0xBTl9MRl9USU1FUl9DT05UUk9MMF9PRkZTRVQKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDBfRU5BQkxFX01TQiBXTEFOX0xGX1RJTUVSX0NPTlRST0wwX0VOQUJMRV9NU0IKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDBfRU5BQkxFX0xTQiBXTEFOX0xGX1RJTUVSX0NPTlRST0wwX0VOQUJMRV9MU0IKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDBfRU5BQkxFX01BU0sgV0xBTl9MRl9USU1FUl9DT05UUk9MMF9FTkFCTEVfTUFTSwotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMF9FTkFCTEVfR0VUKHgpIFdMQU5fTEZfVElNRVJfQ09OVFJPTDBfRU5BQkxFX0dFVCh4KQotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMF9FTkFCTEVfU0VUKHgpIFdMQU5fTEZfVElNRVJfQ09OVFJPTDBfRU5BQkxFX1NFVCh4KQotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMF9BVVRPX1JFU1RBUlRfTVNCIFdMQU5fTEZfVElNRVJfQ09OVFJPTDBfQVVUT19SRVNUQVJUX01TQgotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMF9BVVRPX1JFU1RBUlRfTFNCIFdMQU5fTEZfVElNRVJfQ09OVFJPTDBfQVVUT19SRVNUQVJUX0xTQgotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMF9BVVRPX1JFU1RBUlRfTUFTSyBXTEFOX0xGX1RJTUVSX0NPTlRST0wwX0FVVE9fUkVTVEFSVF9NQVNLCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wwX0FVVE9fUkVTVEFSVF9HRVQoeCkgV0xBTl9MRl9USU1FUl9DT05UUk9MMF9BVVRPX1JFU1RBUlRfR0VUKHgpCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wwX0FVVE9fUkVTVEFSVF9TRVQoeCkgV0xBTl9MRl9USU1FUl9DT05UUk9MMF9BVVRPX1JFU1RBUlRfU0VUKHgpCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wwX1JFU0VUX01TQiBXTEFOX0xGX1RJTUVSX0NPTlRST0wwX1JFU0VUX01TQgotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMF9SRVNFVF9MU0IgV0xBTl9MRl9USU1FUl9DT05UUk9MMF9SRVNFVF9MU0IKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDBfUkVTRVRfTUFTSyBXTEFOX0xGX1RJTUVSX0NPTlRST0wwX1JFU0VUX01BU0sKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDBfUkVTRVRfR0VUKHgpIFdMQU5fTEZfVElNRVJfQ09OVFJPTDBfUkVTRVRfR0VUKHgpCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wwX1JFU0VUX1NFVCh4KSBXTEFOX0xGX1RJTUVSX0NPTlRST0wwX1JFU0VUX1NFVCh4KQotI2RlZmluZSBMRl9USU1FUl9TVEFUVVMwX0FERFJFU1MgV0xBTl9MRl9USU1FUl9TVEFUVVMwX0FERFJFU1MKLSNkZWZpbmUgTEZfVElNRVJfU1RBVFVTMF9PRkZTRVQgV0xBTl9MRl9USU1FUl9TVEFUVVMwX09GRlNFVAotI2RlZmluZSBMRl9USU1FUl9TVEFUVVMwX0lOVEVSUlVQVF9NU0IgV0xBTl9MRl9USU1FUl9TVEFUVVMwX0lOVEVSUlVQVF9NU0IKLSNkZWZpbmUgTEZfVElNRVJfU1RBVFVTMF9JTlRFUlJVUFRfTFNCIFdMQU5fTEZfVElNRVJfU1RBVFVTMF9JTlRFUlJVUFRfTFNCCi0jZGVmaW5lIExGX1RJTUVSX1NUQVRVUzBfSU5URVJSVVBUX01BU0sgV0xBTl9MRl9USU1FUl9TVEFUVVMwX0lOVEVSUlVQVF9NQVNLCi0jZGVmaW5lIExGX1RJTUVSX1NUQVRVUzBfSU5URVJSVVBUX0dFVCh4KSBXTEFOX0xGX1RJTUVSX1NUQVRVUzBfSU5URVJSVVBUX0dFVCh4KQotI2RlZmluZSBMRl9USU1FUl9TVEFUVVMwX0lOVEVSUlVQVF9TRVQoeCkgV0xBTl9MRl9USU1FUl9TVEFUVVMwX0lOVEVSUlVQVF9TRVQoeCkKLSNkZWZpbmUgTEZfVElNRVIxX0FERFJFU1MgV0xBTl9MRl9USU1FUjFfQUREUkVTUwotI2RlZmluZSBMRl9USU1FUjFfT0ZGU0VUIFdMQU5fTEZfVElNRVIxX09GRlNFVAotI2RlZmluZSBMRl9USU1FUjFfVEFSR0VUX01TQiBXTEFOX0xGX1RJTUVSMV9UQVJHRVRfTVNCCi0jZGVmaW5lIExGX1RJTUVSMV9UQVJHRVRfTFNCIFdMQU5fTEZfVElNRVIxX1RBUkdFVF9MU0IKLSNkZWZpbmUgTEZfVElNRVIxX1RBUkdFVF9NQVNLIFdMQU5fTEZfVElNRVIxX1RBUkdFVF9NQVNLCi0jZGVmaW5lIExGX1RJTUVSMV9UQVJHRVRfR0VUKHgpIFdMQU5fTEZfVElNRVIxX1RBUkdFVF9HRVQoeCkKLSNkZWZpbmUgTEZfVElNRVIxX1RBUkdFVF9TRVQoeCkgV0xBTl9MRl9USU1FUjFfVEFSR0VUX1NFVCh4KQotI2RlZmluZSBMRl9USU1FUl9DT1VOVDFfQUREUkVTUyBXTEFOX0xGX1RJTUVSX0NPVU5UMV9BRERSRVNTCi0jZGVmaW5lIExGX1RJTUVSX0NPVU5UMV9PRkZTRVQgV0xBTl9MRl9USU1FUl9DT1VOVDFfT0ZGU0VUCi0jZGVmaW5lIExGX1RJTUVSX0NPVU5UMV9WQUxVRV9NU0IgV0xBTl9MRl9USU1FUl9DT1VOVDFfVkFMVUVfTVNCCi0jZGVmaW5lIExGX1RJTUVSX0NPVU5UMV9WQUxVRV9MU0IgV0xBTl9MRl9USU1FUl9DT1VOVDFfVkFMVUVfTFNCCi0jZGVmaW5lIExGX1RJTUVSX0NPVU5UMV9WQUxVRV9NQVNLIFdMQU5fTEZfVElNRVJfQ09VTlQxX1ZBTFVFX01BU0sKLSNkZWZpbmUgTEZfVElNRVJfQ09VTlQxX1ZBTFVFX0dFVCh4KSBXTEFOX0xGX1RJTUVSX0NPVU5UMV9WQUxVRV9HRVQoeCkKLSNkZWZpbmUgTEZfVElNRVJfQ09VTlQxX1ZBTFVFX1NFVCh4KSBXTEFOX0xGX1RJTUVSX0NPVU5UMV9WQUxVRV9TRVQoeCkKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDFfQUREUkVTUyBXTEFOX0xGX1RJTUVSX0NPTlRST0wxX0FERFJFU1MKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDFfT0ZGU0VUIFdMQU5fTEZfVElNRVJfQ09OVFJPTDFfT0ZGU0VUCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wxX0VOQUJMRV9NU0IgV0xBTl9MRl9USU1FUl9DT05UUk9MMV9FTkFCTEVfTVNCCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wxX0VOQUJMRV9MU0IgV0xBTl9MRl9USU1FUl9DT05UUk9MMV9FTkFCTEVfTFNCCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wxX0VOQUJMRV9NQVNLIFdMQU5fTEZfVElNRVJfQ09OVFJPTDFfRU5BQkxFX01BU0sKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDFfRU5BQkxFX0dFVCh4KSBXTEFOX0xGX1RJTUVSX0NPTlRST0wxX0VOQUJMRV9HRVQoeCkKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDFfRU5BQkxFX1NFVCh4KSBXTEFOX0xGX1RJTUVSX0NPTlRST0wxX0VOQUJMRV9TRVQoeCkKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDFfQVVUT19SRVNUQVJUX01TQiBXTEFOX0xGX1RJTUVSX0NPTlRST0wxX0FVVE9fUkVTVEFSVF9NU0IKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDFfQVVUT19SRVNUQVJUX0xTQiBXTEFOX0xGX1RJTUVSX0NPTlRST0wxX0FVVE9fUkVTVEFSVF9MU0IKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDFfQVVUT19SRVNUQVJUX01BU0sgV0xBTl9MRl9USU1FUl9DT05UUk9MMV9BVVRPX1JFU1RBUlRfTUFTSwotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMV9BVVRPX1JFU1RBUlRfR0VUKHgpIFdMQU5fTEZfVElNRVJfQ09OVFJPTDFfQVVUT19SRVNUQVJUX0dFVCh4KQotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMV9BVVRPX1JFU1RBUlRfU0VUKHgpIFdMQU5fTEZfVElNRVJfQ09OVFJPTDFfQVVUT19SRVNUQVJUX1NFVCh4KQotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMV9SRVNFVF9NU0IgV0xBTl9MRl9USU1FUl9DT05UUk9MMV9SRVNFVF9NU0IKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDFfUkVTRVRfTFNCIFdMQU5fTEZfVElNRVJfQ09OVFJPTDFfUkVTRVRfTFNCCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wxX1JFU0VUX01BU0sgV0xBTl9MRl9USU1FUl9DT05UUk9MMV9SRVNFVF9NQVNLCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wxX1JFU0VUX0dFVCh4KSBXTEFOX0xGX1RJTUVSX0NPTlRST0wxX1JFU0VUX0dFVCh4KQotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMV9SRVNFVF9TRVQoeCkgV0xBTl9MRl9USU1FUl9DT05UUk9MMV9SRVNFVF9TRVQoeCkKLSNkZWZpbmUgTEZfVElNRVJfU1RBVFVTMV9BRERSRVNTIFdMQU5fTEZfVElNRVJfU1RBVFVTMV9BRERSRVNTCi0jZGVmaW5lIExGX1RJTUVSX1NUQVRVUzFfT0ZGU0VUIFdMQU5fTEZfVElNRVJfU1RBVFVTMV9PRkZTRVQKLSNkZWZpbmUgTEZfVElNRVJfU1RBVFVTMV9JTlRFUlJVUFRfTVNCIFdMQU5fTEZfVElNRVJfU1RBVFVTMV9JTlRFUlJVUFRfTVNCCi0jZGVmaW5lIExGX1RJTUVSX1NUQVRVUzFfSU5URVJSVVBUX0xTQiBXTEFOX0xGX1RJTUVSX1NUQVRVUzFfSU5URVJSVVBUX0xTQgotI2RlZmluZSBMRl9USU1FUl9TVEFUVVMxX0lOVEVSUlVQVF9NQVNLIFdMQU5fTEZfVElNRVJfU1RBVFVTMV9JTlRFUlJVUFRfTUFTSwotI2RlZmluZSBMRl9USU1FUl9TVEFUVVMxX0lOVEVSUlVQVF9HRVQoeCkgV0xBTl9MRl9USU1FUl9TVEFUVVMxX0lOVEVSUlVQVF9HRVQoeCkKLSNkZWZpbmUgTEZfVElNRVJfU1RBVFVTMV9JTlRFUlJVUFRfU0VUKHgpIFdMQU5fTEZfVElNRVJfU1RBVFVTMV9JTlRFUlJVUFRfU0VUKHgpCi0jZGVmaW5lIExGX1RJTUVSMl9BRERSRVNTIFdMQU5fTEZfVElNRVIyX0FERFJFU1MKLSNkZWZpbmUgTEZfVElNRVIyX09GRlNFVCBXTEFOX0xGX1RJTUVSMl9PRkZTRVQKLSNkZWZpbmUgTEZfVElNRVIyX1RBUkdFVF9NU0IgV0xBTl9MRl9USU1FUjJfVEFSR0VUX01TQgotI2RlZmluZSBMRl9USU1FUjJfVEFSR0VUX0xTQiBXTEFOX0xGX1RJTUVSMl9UQVJHRVRfTFNCCi0jZGVmaW5lIExGX1RJTUVSMl9UQVJHRVRfTUFTSyBXTEFOX0xGX1RJTUVSMl9UQVJHRVRfTUFTSwotI2RlZmluZSBMRl9USU1FUjJfVEFSR0VUX0dFVCh4KSBXTEFOX0xGX1RJTUVSMl9UQVJHRVRfR0VUKHgpCi0jZGVmaW5lIExGX1RJTUVSMl9UQVJHRVRfU0VUKHgpIFdMQU5fTEZfVElNRVIyX1RBUkdFVF9TRVQoeCkKLSNkZWZpbmUgTEZfVElNRVJfQ09VTlQyX0FERFJFU1MgV0xBTl9MRl9USU1FUl9DT1VOVDJfQUREUkVTUwotI2RlZmluZSBMRl9USU1FUl9DT1VOVDJfT0ZGU0VUIFdMQU5fTEZfVElNRVJfQ09VTlQyX09GRlNFVAotI2RlZmluZSBMRl9USU1FUl9DT1VOVDJfVkFMVUVfTVNCIFdMQU5fTEZfVElNRVJfQ09VTlQyX1ZBTFVFX01TQgotI2RlZmluZSBMRl9USU1FUl9DT1VOVDJfVkFMVUVfTFNCIFdMQU5fTEZfVElNRVJfQ09VTlQyX1ZBTFVFX0xTQgotI2RlZmluZSBMRl9USU1FUl9DT1VOVDJfVkFMVUVfTUFTSyBXTEFOX0xGX1RJTUVSX0NPVU5UMl9WQUxVRV9NQVNLCi0jZGVmaW5lIExGX1RJTUVSX0NPVU5UMl9WQUxVRV9HRVQoeCkgV0xBTl9MRl9USU1FUl9DT1VOVDJfVkFMVUVfR0VUKHgpCi0jZGVmaW5lIExGX1RJTUVSX0NPVU5UMl9WQUxVRV9TRVQoeCkgV0xBTl9MRl9USU1FUl9DT1VOVDJfVkFMVUVfU0VUKHgpCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wyX0FERFJFU1MgV0xBTl9MRl9USU1FUl9DT05UUk9MMl9BRERSRVNTCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wyX09GRlNFVCBXTEFOX0xGX1RJTUVSX0NPTlRST0wyX09GRlNFVAotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMl9FTkFCTEVfTVNCIFdMQU5fTEZfVElNRVJfQ09OVFJPTDJfRU5BQkxFX01TQgotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMl9FTkFCTEVfTFNCIFdMQU5fTEZfVElNRVJfQ09OVFJPTDJfRU5BQkxFX0xTQgotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMl9FTkFCTEVfTUFTSyBXTEFOX0xGX1RJTUVSX0NPTlRST0wyX0VOQUJMRV9NQVNLCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wyX0VOQUJMRV9HRVQoeCkgV0xBTl9MRl9USU1FUl9DT05UUk9MMl9FTkFCTEVfR0VUKHgpCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wyX0VOQUJMRV9TRVQoeCkgV0xBTl9MRl9USU1FUl9DT05UUk9MMl9FTkFCTEVfU0VUKHgpCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wyX0FVVE9fUkVTVEFSVF9NU0IgV0xBTl9MRl9USU1FUl9DT05UUk9MMl9BVVRPX1JFU1RBUlRfTVNCCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wyX0FVVE9fUkVTVEFSVF9MU0IgV0xBTl9MRl9USU1FUl9DT05UUk9MMl9BVVRPX1JFU1RBUlRfTFNCCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wyX0FVVE9fUkVTVEFSVF9NQVNLIFdMQU5fTEZfVElNRVJfQ09OVFJPTDJfQVVUT19SRVNUQVJUX01BU0sKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDJfQVVUT19SRVNUQVJUX0dFVCh4KSBXTEFOX0xGX1RJTUVSX0NPTlRST0wyX0FVVE9fUkVTVEFSVF9HRVQoeCkKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDJfQVVUT19SRVNUQVJUX1NFVCh4KSBXTEFOX0xGX1RJTUVSX0NPTlRST0wyX0FVVE9fUkVTVEFSVF9TRVQoeCkKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDJfUkVTRVRfTVNCIFdMQU5fTEZfVElNRVJfQ09OVFJPTDJfUkVTRVRfTVNCCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wyX1JFU0VUX0xTQiBXTEFOX0xGX1RJTUVSX0NPTlRST0wyX1JFU0VUX0xTQgotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMl9SRVNFVF9NQVNLIFdMQU5fTEZfVElNRVJfQ09OVFJPTDJfUkVTRVRfTUFTSwotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MMl9SRVNFVF9HRVQoeCkgV0xBTl9MRl9USU1FUl9DT05UUk9MMl9SRVNFVF9HRVQoeCkKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDJfUkVTRVRfU0VUKHgpIFdMQU5fTEZfVElNRVJfQ09OVFJPTDJfUkVTRVRfU0VUKHgpCi0jZGVmaW5lIExGX1RJTUVSX1NUQVRVUzJfQUREUkVTUyBXTEFOX0xGX1RJTUVSX1NUQVRVUzJfQUREUkVTUwotI2RlZmluZSBMRl9USU1FUl9TVEFUVVMyX09GRlNFVCBXTEFOX0xGX1RJTUVSX1NUQVRVUzJfT0ZGU0VUCi0jZGVmaW5lIExGX1RJTUVSX1NUQVRVUzJfSU5URVJSVVBUX01TQiBXTEFOX0xGX1RJTUVSX1NUQVRVUzJfSU5URVJSVVBUX01TQgotI2RlZmluZSBMRl9USU1FUl9TVEFUVVMyX0lOVEVSUlVQVF9MU0IgV0xBTl9MRl9USU1FUl9TVEFUVVMyX0lOVEVSUlVQVF9MU0IKLSNkZWZpbmUgTEZfVElNRVJfU1RBVFVTMl9JTlRFUlJVUFRfTUFTSyBXTEFOX0xGX1RJTUVSX1NUQVRVUzJfSU5URVJSVVBUX01BU0sKLSNkZWZpbmUgTEZfVElNRVJfU1RBVFVTMl9JTlRFUlJVUFRfR0VUKHgpIFdMQU5fTEZfVElNRVJfU1RBVFVTMl9JTlRFUlJVUFRfR0VUKHgpCi0jZGVmaW5lIExGX1RJTUVSX1NUQVRVUzJfSU5URVJSVVBUX1NFVCh4KSBXTEFOX0xGX1RJTUVSX1NUQVRVUzJfSU5URVJSVVBUX1NFVCh4KQotI2RlZmluZSBMRl9USU1FUjNfQUREUkVTUyBXTEFOX0xGX1RJTUVSM19BRERSRVNTCi0jZGVmaW5lIExGX1RJTUVSM19PRkZTRVQgV0xBTl9MRl9USU1FUjNfT0ZGU0VUCi0jZGVmaW5lIExGX1RJTUVSM19UQVJHRVRfTVNCIFdMQU5fTEZfVElNRVIzX1RBUkdFVF9NU0IKLSNkZWZpbmUgTEZfVElNRVIzX1RBUkdFVF9MU0IgV0xBTl9MRl9USU1FUjNfVEFSR0VUX0xTQgotI2RlZmluZSBMRl9USU1FUjNfVEFSR0VUX01BU0sgV0xBTl9MRl9USU1FUjNfVEFSR0VUX01BU0sKLSNkZWZpbmUgTEZfVElNRVIzX1RBUkdFVF9HRVQoeCkgV0xBTl9MRl9USU1FUjNfVEFSR0VUX0dFVCh4KQotI2RlZmluZSBMRl9USU1FUjNfVEFSR0VUX1NFVCh4KSBXTEFOX0xGX1RJTUVSM19UQVJHRVRfU0VUKHgpCi0jZGVmaW5lIExGX1RJTUVSX0NPVU5UM19BRERSRVNTIFdMQU5fTEZfVElNRVJfQ09VTlQzX0FERFJFU1MKLSNkZWZpbmUgTEZfVElNRVJfQ09VTlQzX09GRlNFVCBXTEFOX0xGX1RJTUVSX0NPVU5UM19PRkZTRVQKLSNkZWZpbmUgTEZfVElNRVJfQ09VTlQzX1ZBTFVFX01TQiBXTEFOX0xGX1RJTUVSX0NPVU5UM19WQUxVRV9NU0IKLSNkZWZpbmUgTEZfVElNRVJfQ09VTlQzX1ZBTFVFX0xTQiBXTEFOX0xGX1RJTUVSX0NPVU5UM19WQUxVRV9MU0IKLSNkZWZpbmUgTEZfVElNRVJfQ09VTlQzX1ZBTFVFX01BU0sgV0xBTl9MRl9USU1FUl9DT1VOVDNfVkFMVUVfTUFTSwotI2RlZmluZSBMRl9USU1FUl9DT1VOVDNfVkFMVUVfR0VUKHgpIFdMQU5fTEZfVElNRVJfQ09VTlQzX1ZBTFVFX0dFVCh4KQotI2RlZmluZSBMRl9USU1FUl9DT1VOVDNfVkFMVUVfU0VUKHgpIFdMQU5fTEZfVElNRVJfQ09VTlQzX1ZBTFVFX1NFVCh4KQotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MM19BRERSRVNTIFdMQU5fTEZfVElNRVJfQ09OVFJPTDNfQUREUkVTUwotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MM19PRkZTRVQgV0xBTl9MRl9USU1FUl9DT05UUk9MM19PRkZTRVQKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDNfRU5BQkxFX01TQiBXTEFOX0xGX1RJTUVSX0NPTlRST0wzX0VOQUJMRV9NU0IKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDNfRU5BQkxFX0xTQiBXTEFOX0xGX1RJTUVSX0NPTlRST0wzX0VOQUJMRV9MU0IKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDNfRU5BQkxFX01BU0sgV0xBTl9MRl9USU1FUl9DT05UUk9MM19FTkFCTEVfTUFTSwotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MM19FTkFCTEVfR0VUKHgpIFdMQU5fTEZfVElNRVJfQ09OVFJPTDNfRU5BQkxFX0dFVCh4KQotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MM19FTkFCTEVfU0VUKHgpIFdMQU5fTEZfVElNRVJfQ09OVFJPTDNfRU5BQkxFX1NFVCh4KQotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MM19BVVRPX1JFU1RBUlRfTVNCIFdMQU5fTEZfVElNRVJfQ09OVFJPTDNfQVVUT19SRVNUQVJUX01TQgotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MM19BVVRPX1JFU1RBUlRfTFNCIFdMQU5fTEZfVElNRVJfQ09OVFJPTDNfQVVUT19SRVNUQVJUX0xTQgotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MM19BVVRPX1JFU1RBUlRfTUFTSyBXTEFOX0xGX1RJTUVSX0NPTlRST0wzX0FVVE9fUkVTVEFSVF9NQVNLCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wzX0FVVE9fUkVTVEFSVF9HRVQoeCkgV0xBTl9MRl9USU1FUl9DT05UUk9MM19BVVRPX1JFU1RBUlRfR0VUKHgpCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wzX0FVVE9fUkVTVEFSVF9TRVQoeCkgV0xBTl9MRl9USU1FUl9DT05UUk9MM19BVVRPX1JFU1RBUlRfU0VUKHgpCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wzX1JFU0VUX01TQiBXTEFOX0xGX1RJTUVSX0NPTlRST0wzX1JFU0VUX01TQgotI2RlZmluZSBMRl9USU1FUl9DT05UUk9MM19SRVNFVF9MU0IgV0xBTl9MRl9USU1FUl9DT05UUk9MM19SRVNFVF9MU0IKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDNfUkVTRVRfTUFTSyBXTEFOX0xGX1RJTUVSX0NPTlRST0wzX1JFU0VUX01BU0sKLSNkZWZpbmUgTEZfVElNRVJfQ09OVFJPTDNfUkVTRVRfR0VUKHgpIFdMQU5fTEZfVElNRVJfQ09OVFJPTDNfUkVTRVRfR0VUKHgpCi0jZGVmaW5lIExGX1RJTUVSX0NPTlRST0wzX1JFU0VUX1NFVCh4KSBXTEFOX0xGX1RJTUVSX0NPTlRST0wzX1JFU0VUX1NFVCh4KQotI2RlZmluZSBMRl9USU1FUl9TVEFUVVMzX0FERFJFU1MgV0xBTl9MRl9USU1FUl9TVEFUVVMzX0FERFJFU1MKLSNkZWZpbmUgTEZfVElNRVJfU1RBVFVTM19PRkZTRVQgV0xBTl9MRl9USU1FUl9TVEFUVVMzX09GRlNFVAotI2RlZmluZSBMRl9USU1FUl9TVEFUVVMzX0lOVEVSUlVQVF9NU0IgV0xBTl9MRl9USU1FUl9TVEFUVVMzX0lOVEVSUlVQVF9NU0IKLSNkZWZpbmUgTEZfVElNRVJfU1RBVFVTM19JTlRFUlJVUFRfTFNCIFdMQU5fTEZfVElNRVJfU1RBVFVTM19JTlRFUlJVUFRfTFNCCi0jZGVmaW5lIExGX1RJTUVSX1NUQVRVUzNfSU5URVJSVVBUX01BU0sgV0xBTl9MRl9USU1FUl9TVEFUVVMzX0lOVEVSUlVQVF9NQVNLCi0jZGVmaW5lIExGX1RJTUVSX1NUQVRVUzNfSU5URVJSVVBUX0dFVCh4KSBXTEFOX0xGX1RJTUVSX1NUQVRVUzNfSU5URVJSVVBUX0dFVCh4KQotI2RlZmluZSBMRl9USU1FUl9TVEFUVVMzX0lOVEVSUlVQVF9TRVQoeCkgV0xBTl9MRl9USU1FUl9TVEFUVVMzX0lOVEVSUlVQVF9TRVQoeCkKLSNkZWZpbmUgSEZfVElNRVJfQUREUkVTUyBXTEFOX0hGX1RJTUVSX0FERFJFU1MKLSNkZWZpbmUgSEZfVElNRVJfT0ZGU0VUIFdMQU5fSEZfVElNRVJfT0ZGU0VUCi0jZGVmaW5lIEhGX1RJTUVSX1RBUkdFVF9NU0IgV0xBTl9IRl9USU1FUl9UQVJHRVRfTVNCCi0jZGVmaW5lIEhGX1RJTUVSX1RBUkdFVF9MU0IgV0xBTl9IRl9USU1FUl9UQVJHRVRfTFNCCi0jZGVmaW5lIEhGX1RJTUVSX1RBUkdFVF9NQVNLIFdMQU5fSEZfVElNRVJfVEFSR0VUX01BU0sKLSNkZWZpbmUgSEZfVElNRVJfVEFSR0VUX0dFVCh4KSBXTEFOX0hGX1RJTUVSX1RBUkdFVF9HRVQoeCkKLSNkZWZpbmUgSEZfVElNRVJfVEFSR0VUX1NFVCh4KSBXTEFOX0hGX1RJTUVSX1RBUkdFVF9TRVQoeCkKLSNkZWZpbmUgSEZfVElNRVJfQ09VTlRfQUREUkVTUyBXTEFOX0hGX1RJTUVSX0NPVU5UX0FERFJFU1MKLSNkZWZpbmUgSEZfVElNRVJfQ09VTlRfT0ZGU0VUIFdMQU5fSEZfVElNRVJfQ09VTlRfT0ZGU0VUCi0jZGVmaW5lIEhGX1RJTUVSX0NPVU5UX1ZBTFVFX01TQiBXTEFOX0hGX1RJTUVSX0NPVU5UX1ZBTFVFX01TQgotI2RlZmluZSBIRl9USU1FUl9DT1VOVF9WQUxVRV9MU0IgV0xBTl9IRl9USU1FUl9DT1VOVF9WQUxVRV9MU0IKLSNkZWZpbmUgSEZfVElNRVJfQ09VTlRfVkFMVUVfTUFTSyBXTEFOX0hGX1RJTUVSX0NPVU5UX1ZBTFVFX01BU0sKLSNkZWZpbmUgSEZfVElNRVJfQ09VTlRfVkFMVUVfR0VUKHgpIFdMQU5fSEZfVElNRVJfQ09VTlRfVkFMVUVfR0VUKHgpCi0jZGVmaW5lIEhGX1RJTUVSX0NPVU5UX1ZBTFVFX1NFVCh4KSBXTEFOX0hGX1RJTUVSX0NPVU5UX1ZBTFVFX1NFVCh4KQotI2RlZmluZSBIRl9MRl9DT1VOVF9BRERSRVNTIFdMQU5fSEZfTEZfQ09VTlRfQUREUkVTUwotI2RlZmluZSBIRl9MRl9DT1VOVF9PRkZTRVQgV0xBTl9IRl9MRl9DT1VOVF9PRkZTRVQKLSNkZWZpbmUgSEZfTEZfQ09VTlRfVkFMVUVfTVNCIFdMQU5fSEZfTEZfQ09VTlRfVkFMVUVfTVNCCi0jZGVmaW5lIEhGX0xGX0NPVU5UX1ZBTFVFX0xTQiBXTEFOX0hGX0xGX0NPVU5UX1ZBTFVFX0xTQgotI2RlZmluZSBIRl9MRl9DT1VOVF9WQUxVRV9NQVNLIFdMQU5fSEZfTEZfQ09VTlRfVkFMVUVfTUFTSwotI2RlZmluZSBIRl9MRl9DT1VOVF9WQUxVRV9HRVQoeCkgV0xBTl9IRl9MRl9DT1VOVF9WQUxVRV9HRVQoeCkKLSNkZWZpbmUgSEZfTEZfQ09VTlRfVkFMVUVfU0VUKHgpIFdMQU5fSEZfTEZfQ09VTlRfVkFMVUVfU0VUKHgpCi0jZGVmaW5lIEhGX1RJTUVSX0NPTlRST0xfQUREUkVTUyBXTEFOX0hGX1RJTUVSX0NPTlRST0xfQUREUkVTUwotI2RlZmluZSBIRl9USU1FUl9DT05UUk9MX09GRlNFVCBXTEFOX0hGX1RJTUVSX0NPTlRST0xfT0ZGU0VUCi0jZGVmaW5lIEhGX1RJTUVSX0NPTlRST0xfRU5BQkxFX01TQiBXTEFOX0hGX1RJTUVSX0NPTlRST0xfRU5BQkxFX01TQgotI2RlZmluZSBIRl9USU1FUl9DT05UUk9MX0VOQUJMRV9MU0IgV0xBTl9IRl9USU1FUl9DT05UUk9MX0VOQUJMRV9MU0IKLSNkZWZpbmUgSEZfVElNRVJfQ09OVFJPTF9FTkFCTEVfTUFTSyBXTEFOX0hGX1RJTUVSX0NPTlRST0xfRU5BQkxFX01BU0sKLSNkZWZpbmUgSEZfVElNRVJfQ09OVFJPTF9FTkFCTEVfR0VUKHgpIFdMQU5fSEZfVElNRVJfQ09OVFJPTF9FTkFCTEVfR0VUKHgpCi0jZGVmaW5lIEhGX1RJTUVSX0NPTlRST0xfRU5BQkxFX1NFVCh4KSBXTEFOX0hGX1RJTUVSX0NPTlRST0xfRU5BQkxFX1NFVCh4KQotI2RlZmluZSBIRl9USU1FUl9DT05UUk9MX09OX01TQiBXTEFOX0hGX1RJTUVSX0NPTlRST0xfT05fTVNCCi0jZGVmaW5lIEhGX1RJTUVSX0NPTlRST0xfT05fTFNCIFdMQU5fSEZfVElNRVJfQ09OVFJPTF9PTl9MU0IKLSNkZWZpbmUgSEZfVElNRVJfQ09OVFJPTF9PTl9NQVNLIFdMQU5fSEZfVElNRVJfQ09OVFJPTF9PTl9NQVNLCi0jZGVmaW5lIEhGX1RJTUVSX0NPTlRST0xfT05fR0VUKHgpIFdMQU5fSEZfVElNRVJfQ09OVFJPTF9PTl9HRVQoeCkKLSNkZWZpbmUgSEZfVElNRVJfQ09OVFJPTF9PTl9TRVQoeCkgV0xBTl9IRl9USU1FUl9DT05UUk9MX09OX1NFVCh4KQotI2RlZmluZSBIRl9USU1FUl9DT05UUk9MX0FVVE9fUkVTVEFSVF9NU0IgV0xBTl9IRl9USU1FUl9DT05UUk9MX0FVVE9fUkVTVEFSVF9NU0IKLSNkZWZpbmUgSEZfVElNRVJfQ09OVFJPTF9BVVRPX1JFU1RBUlRfTFNCIFdMQU5fSEZfVElNRVJfQ09OVFJPTF9BVVRPX1JFU1RBUlRfTFNCCi0jZGVmaW5lIEhGX1RJTUVSX0NPTlRST0xfQVVUT19SRVNUQVJUX01BU0sgV0xBTl9IRl9USU1FUl9DT05UUk9MX0FVVE9fUkVTVEFSVF9NQVNLCi0jZGVmaW5lIEhGX1RJTUVSX0NPTlRST0xfQVVUT19SRVNUQVJUX0dFVCh4KSBXTEFOX0hGX1RJTUVSX0NPTlRST0xfQVVUT19SRVNUQVJUX0dFVCh4KQotI2RlZmluZSBIRl9USU1FUl9DT05UUk9MX0FVVE9fUkVTVEFSVF9TRVQoeCkgV0xBTl9IRl9USU1FUl9DT05UUk9MX0FVVE9fUkVTVEFSVF9TRVQoeCkKLSNkZWZpbmUgSEZfVElNRVJfQ09OVFJPTF9SRVNFVF9NU0IgV0xBTl9IRl9USU1FUl9DT05UUk9MX1JFU0VUX01TQgotI2RlZmluZSBIRl9USU1FUl9DT05UUk9MX1JFU0VUX0xTQiBXTEFOX0hGX1RJTUVSX0NPTlRST0xfUkVTRVRfTFNCCi0jZGVmaW5lIEhGX1RJTUVSX0NPTlRST0xfUkVTRVRfTUFTSyBXTEFOX0hGX1RJTUVSX0NPTlRST0xfUkVTRVRfTUFTSwotI2RlZmluZSBIRl9USU1FUl9DT05UUk9MX1JFU0VUX0dFVCh4KSBXTEFOX0hGX1RJTUVSX0NPTlRST0xfUkVTRVRfR0VUKHgpCi0jZGVmaW5lIEhGX1RJTUVSX0NPTlRST0xfUkVTRVRfU0VUKHgpIFdMQU5fSEZfVElNRVJfQ09OVFJPTF9SRVNFVF9TRVQoeCkKLSNkZWZpbmUgSEZfVElNRVJfU1RBVFVTX0FERFJFU1MgV0xBTl9IRl9USU1FUl9TVEFUVVNfQUREUkVTUwotI2RlZmluZSBIRl9USU1FUl9TVEFUVVNfT0ZGU0VUIFdMQU5fSEZfVElNRVJfU1RBVFVTX09GRlNFVAotI2RlZmluZSBIRl9USU1FUl9TVEFUVVNfSU5URVJSVVBUX01TQiBXTEFOX0hGX1RJTUVSX1NUQVRVU19JTlRFUlJVUFRfTVNCCi0jZGVmaW5lIEhGX1RJTUVSX1NUQVRVU19JTlRFUlJVUFRfTFNCIFdMQU5fSEZfVElNRVJfU1RBVFVTX0lOVEVSUlVQVF9MU0IKLSNkZWZpbmUgSEZfVElNRVJfU1RBVFVTX0lOVEVSUlVQVF9NQVNLIFdMQU5fSEZfVElNRVJfU1RBVFVTX0lOVEVSUlVQVF9NQVNLCi0jZGVmaW5lIEhGX1RJTUVSX1NUQVRVU19JTlRFUlJVUFRfR0VUKHgpIFdMQU5fSEZfVElNRVJfU1RBVFVTX0lOVEVSUlVQVF9HRVQoeCkKLSNkZWZpbmUgSEZfVElNRVJfU1RBVFVTX0lOVEVSUlVQVF9TRVQoeCkgV0xBTl9IRl9USU1FUl9TVEFUVVNfSU5URVJSVVBUX1NFVCh4KQotI2RlZmluZSBSVENfQ09OVFJPTF9BRERSRVNTIFdMQU5fUlRDX0NPTlRST0xfQUREUkVTUwotI2RlZmluZSBSVENfQ09OVFJPTF9PRkZTRVQgV0xBTl9SVENfQ09OVFJPTF9PRkZTRVQKLSNkZWZpbmUgUlRDX0NPTlRST0xfRU5BQkxFX01TQiBXTEFOX1JUQ19DT05UUk9MX0VOQUJMRV9NU0IKLSNkZWZpbmUgUlRDX0NPTlRST0xfRU5BQkxFX0xTQiBXTEFOX1JUQ19DT05UUk9MX0VOQUJMRV9MU0IKLSNkZWZpbmUgUlRDX0NPTlRST0xfRU5BQkxFX01BU0sgV0xBTl9SVENfQ09OVFJPTF9FTkFCTEVfTUFTSwotI2RlZmluZSBSVENfQ09OVFJPTF9FTkFCTEVfR0VUKHgpIFdMQU5fUlRDX0NPTlRST0xfRU5BQkxFX0dFVCh4KQotI2RlZmluZSBSVENfQ09OVFJPTF9FTkFCTEVfU0VUKHgpIFdMQU5fUlRDX0NPTlRST0xfRU5BQkxFX1NFVCh4KQotI2RlZmluZSBSVENfQ09OVFJPTF9MT0FEX1JUQ19NU0IgV0xBTl9SVENfQ09OVFJPTF9MT0FEX1JUQ19NU0IKLSNkZWZpbmUgUlRDX0NPTlRST0xfTE9BRF9SVENfTFNCIFdMQU5fUlRDX0NPTlRST0xfTE9BRF9SVENfTFNCCi0jZGVmaW5lIFJUQ19DT05UUk9MX0xPQURfUlRDX01BU0sgV0xBTl9SVENfQ09OVFJPTF9MT0FEX1JUQ19NQVNLCi0jZGVmaW5lIFJUQ19DT05UUk9MX0xPQURfUlRDX0dFVCh4KSBXTEFOX1JUQ19DT05UUk9MX0xPQURfUlRDX0dFVCh4KQotI2RlZmluZSBSVENfQ09OVFJPTF9MT0FEX1JUQ19TRVQoeCkgV0xBTl9SVENfQ09OVFJPTF9MT0FEX1JUQ19TRVQoeCkKLSNkZWZpbmUgUlRDX0NPTlRST0xfTE9BRF9BTEFSTV9NU0IgV0xBTl9SVENfQ09OVFJPTF9MT0FEX0FMQVJNX01TQgotI2RlZmluZSBSVENfQ09OVFJPTF9MT0FEX0FMQVJNX0xTQiBXTEFOX1JUQ19DT05UUk9MX0xPQURfQUxBUk1fTFNCCi0jZGVmaW5lIFJUQ19DT05UUk9MX0xPQURfQUxBUk1fTUFTSyBXTEFOX1JUQ19DT05UUk9MX0xPQURfQUxBUk1fTUFTSwotI2RlZmluZSBSVENfQ09OVFJPTF9MT0FEX0FMQVJNX0dFVCh4KSBXTEFOX1JUQ19DT05UUk9MX0xPQURfQUxBUk1fR0VUKHgpCi0jZGVmaW5lIFJUQ19DT05UUk9MX0xPQURfQUxBUk1fU0VUKHgpIFdMQU5fUlRDX0NPTlRST0xfTE9BRF9BTEFSTV9TRVQoeCkKLSNkZWZpbmUgUlRDX1RJTUVfQUREUkVTUyBXTEFOX1JUQ19USU1FX0FERFJFU1MKLSNkZWZpbmUgUlRDX1RJTUVfT0ZGU0VUIFdMQU5fUlRDX1RJTUVfT0ZGU0VUCi0jZGVmaW5lIFJUQ19USU1FX1dFRUtfREFZX01TQiBXTEFOX1JUQ19USU1FX1dFRUtfREFZX01TQgotI2RlZmluZSBSVENfVElNRV9XRUVLX0RBWV9MU0IgV0xBTl9SVENfVElNRV9XRUVLX0RBWV9MU0IKLSNkZWZpbmUgUlRDX1RJTUVfV0VFS19EQVlfTUFTSyBXTEFOX1JUQ19USU1FX1dFRUtfREFZX01BU0sKLSNkZWZpbmUgUlRDX1RJTUVfV0VFS19EQVlfR0VUKHgpIFdMQU5fUlRDX1RJTUVfV0VFS19EQVlfR0VUKHgpCi0jZGVmaW5lIFJUQ19USU1FX1dFRUtfREFZX1NFVCh4KSBXTEFOX1JUQ19USU1FX1dFRUtfREFZX1NFVCh4KQotI2RlZmluZSBSVENfVElNRV9IT1VSX01TQiBXTEFOX1JUQ19USU1FX0hPVVJfTVNCCi0jZGVmaW5lIFJUQ19USU1FX0hPVVJfTFNCIFdMQU5fUlRDX1RJTUVfSE9VUl9MU0IKLSNkZWZpbmUgUlRDX1RJTUVfSE9VUl9NQVNLIFdMQU5fUlRDX1RJTUVfSE9VUl9NQVNLCi0jZGVmaW5lIFJUQ19USU1FX0hPVVJfR0VUKHgpIFdMQU5fUlRDX1RJTUVfSE9VUl9HRVQoeCkKLSNkZWZpbmUgUlRDX1RJTUVfSE9VUl9TRVQoeCkgV0xBTl9SVENfVElNRV9IT1VSX1NFVCh4KQotI2RlZmluZSBSVENfVElNRV9NSU5VVEVfTVNCIFdMQU5fUlRDX1RJTUVfTUlOVVRFX01TQgotI2RlZmluZSBSVENfVElNRV9NSU5VVEVfTFNCIFdMQU5fUlRDX1RJTUVfTUlOVVRFX0xTQgotI2RlZmluZSBSVENfVElNRV9NSU5VVEVfTUFTSyBXTEFOX1JUQ19USU1FX01JTlVURV9NQVNLCi0jZGVmaW5lIFJUQ19USU1FX01JTlVURV9HRVQoeCkgV0xBTl9SVENfVElNRV9NSU5VVEVfR0VUKHgpCi0jZGVmaW5lIFJUQ19USU1FX01JTlVURV9TRVQoeCkgV0xBTl9SVENfVElNRV9NSU5VVEVfU0VUKHgpCi0jZGVmaW5lIFJUQ19USU1FX1NFQ09ORF9NU0IgV0xBTl9SVENfVElNRV9TRUNPTkRfTVNCCi0jZGVmaW5lIFJUQ19USU1FX1NFQ09ORF9MU0IgV0xBTl9SVENfVElNRV9TRUNPTkRfTFNCCi0jZGVmaW5lIFJUQ19USU1FX1NFQ09ORF9NQVNLIFdMQU5fUlRDX1RJTUVfU0VDT05EX01BU0sKLSNkZWZpbmUgUlRDX1RJTUVfU0VDT05EX0dFVCh4KSBXTEFOX1JUQ19USU1FX1NFQ09ORF9HRVQoeCkKLSNkZWZpbmUgUlRDX1RJTUVfU0VDT05EX1NFVCh4KSBXTEFOX1JUQ19USU1FX1NFQ09ORF9TRVQoeCkKLSNkZWZpbmUgUlRDX0RBVEVfQUREUkVTUyBXTEFOX1JUQ19EQVRFX0FERFJFU1MKLSNkZWZpbmUgUlRDX0RBVEVfT0ZGU0VUIFdMQU5fUlRDX0RBVEVfT0ZGU0VUCi0jZGVmaW5lIFJUQ19EQVRFX1lFQVJfTVNCIFdMQU5fUlRDX0RBVEVfWUVBUl9NU0IKLSNkZWZpbmUgUlRDX0RBVEVfWUVBUl9MU0IgV0xBTl9SVENfREFURV9ZRUFSX0xTQgotI2RlZmluZSBSVENfREFURV9ZRUFSX01BU0sgV0xBTl9SVENfREFURV9ZRUFSX01BU0sKLSNkZWZpbmUgUlRDX0RBVEVfWUVBUl9HRVQoeCkgV0xBTl9SVENfREFURV9ZRUFSX0dFVCh4KQotI2RlZmluZSBSVENfREFURV9ZRUFSX1NFVCh4KSBXTEFOX1JUQ19EQVRFX1lFQVJfU0VUKHgpCi0jZGVmaW5lIFJUQ19EQVRFX01PTlRIX01TQiBXTEFOX1JUQ19EQVRFX01PTlRIX01TQgotI2RlZmluZSBSVENfREFURV9NT05USF9MU0IgV0xBTl9SVENfREFURV9NT05USF9MU0IKLSNkZWZpbmUgUlRDX0RBVEVfTU9OVEhfTUFTSyBXTEFOX1JUQ19EQVRFX01PTlRIX01BU0sKLSNkZWZpbmUgUlRDX0RBVEVfTU9OVEhfR0VUKHgpIFdMQU5fUlRDX0RBVEVfTU9OVEhfR0VUKHgpCi0jZGVmaW5lIFJUQ19EQVRFX01PTlRIX1NFVCh4KSBXTEFOX1JUQ19EQVRFX01PTlRIX1NFVCh4KQotI2RlZmluZSBSVENfREFURV9NT05USF9EQVlfTVNCIFdMQU5fUlRDX0RBVEVfTU9OVEhfREFZX01TQgotI2RlZmluZSBSVENfREFURV9NT05USF9EQVlfTFNCIFdMQU5fUlRDX0RBVEVfTU9OVEhfREFZX0xTQgotI2RlZmluZSBSVENfREFURV9NT05USF9EQVlfTUFTSyBXTEFOX1JUQ19EQVRFX01PTlRIX0RBWV9NQVNLCi0jZGVmaW5lIFJUQ19EQVRFX01PTlRIX0RBWV9HRVQoeCkgV0xBTl9SVENfREFURV9NT05USF9EQVlfR0VUKHgpCi0jZGVmaW5lIFJUQ19EQVRFX01PTlRIX0RBWV9TRVQoeCkgV0xBTl9SVENfREFURV9NT05USF9EQVlfU0VUKHgpCi0jZGVmaW5lIFJUQ19TRVRfVElNRV9BRERSRVNTIFdMQU5fUlRDX1NFVF9USU1FX0FERFJFU1MKLSNkZWZpbmUgUlRDX1NFVF9USU1FX09GRlNFVCBXTEFOX1JUQ19TRVRfVElNRV9PRkZTRVQKLSNkZWZpbmUgUlRDX1NFVF9USU1FX1dFRUtfREFZX01TQiBXTEFOX1JUQ19TRVRfVElNRV9XRUVLX0RBWV9NU0IKLSNkZWZpbmUgUlRDX1NFVF9USU1FX1dFRUtfREFZX0xTQiBXTEFOX1JUQ19TRVRfVElNRV9XRUVLX0RBWV9MU0IKLSNkZWZpbmUgUlRDX1NFVF9USU1FX1dFRUtfREFZX01BU0sgV0xBTl9SVENfU0VUX1RJTUVfV0VFS19EQVlfTUFTSwotI2RlZmluZSBSVENfU0VUX1RJTUVfV0VFS19EQVlfR0VUKHgpIFdMQU5fUlRDX1NFVF9USU1FX1dFRUtfREFZX0dFVCh4KQotI2RlZmluZSBSVENfU0VUX1RJTUVfV0VFS19EQVlfU0VUKHgpIFdMQU5fUlRDX1NFVF9USU1FX1dFRUtfREFZX1NFVCh4KQotI2RlZmluZSBSVENfU0VUX1RJTUVfSE9VUl9NU0IgV0xBTl9SVENfU0VUX1RJTUVfSE9VUl9NU0IKLSNkZWZpbmUgUlRDX1NFVF9USU1FX0hPVVJfTFNCIFdMQU5fUlRDX1NFVF9USU1FX0hPVVJfTFNCCi0jZGVmaW5lIFJUQ19TRVRfVElNRV9IT1VSX01BU0sgV0xBTl9SVENfU0VUX1RJTUVfSE9VUl9NQVNLCi0jZGVmaW5lIFJUQ19TRVRfVElNRV9IT1VSX0dFVCh4KSBXTEFOX1JUQ19TRVRfVElNRV9IT1VSX0dFVCh4KQotI2RlZmluZSBSVENfU0VUX1RJTUVfSE9VUl9TRVQoeCkgV0xBTl9SVENfU0VUX1RJTUVfSE9VUl9TRVQoeCkKLSNkZWZpbmUgUlRDX1NFVF9USU1FX01JTlVURV9NU0IgV0xBTl9SVENfU0VUX1RJTUVfTUlOVVRFX01TQgotI2RlZmluZSBSVENfU0VUX1RJTUVfTUlOVVRFX0xTQiBXTEFOX1JUQ19TRVRfVElNRV9NSU5VVEVfTFNCCi0jZGVmaW5lIFJUQ19TRVRfVElNRV9NSU5VVEVfTUFTSyBXTEFOX1JUQ19TRVRfVElNRV9NSU5VVEVfTUFTSwotI2RlZmluZSBSVENfU0VUX1RJTUVfTUlOVVRFX0dFVCh4KSBXTEFOX1JUQ19TRVRfVElNRV9NSU5VVEVfR0VUKHgpCi0jZGVmaW5lIFJUQ19TRVRfVElNRV9NSU5VVEVfU0VUKHgpIFdMQU5fUlRDX1NFVF9USU1FX01JTlVURV9TRVQoeCkKLSNkZWZpbmUgUlRDX1NFVF9USU1FX1NFQ09ORF9NU0IgV0xBTl9SVENfU0VUX1RJTUVfU0VDT05EX01TQgotI2RlZmluZSBSVENfU0VUX1RJTUVfU0VDT05EX0xTQiBXTEFOX1JUQ19TRVRfVElNRV9TRUNPTkRfTFNCCi0jZGVmaW5lIFJUQ19TRVRfVElNRV9TRUNPTkRfTUFTSyBXTEFOX1JUQ19TRVRfVElNRV9TRUNPTkRfTUFTSwotI2RlZmluZSBSVENfU0VUX1RJTUVfU0VDT05EX0dFVCh4KSBXTEFOX1JUQ19TRVRfVElNRV9TRUNPTkRfR0VUKHgpCi0jZGVmaW5lIFJUQ19TRVRfVElNRV9TRUNPTkRfU0VUKHgpIFdMQU5fUlRDX1NFVF9USU1FX1NFQ09ORF9TRVQoeCkKLSNkZWZpbmUgUlRDX1NFVF9EQVRFX0FERFJFU1MgV0xBTl9SVENfU0VUX0RBVEVfQUREUkVTUwotI2RlZmluZSBSVENfU0VUX0RBVEVfT0ZGU0VUIFdMQU5fUlRDX1NFVF9EQVRFX09GRlNFVAotI2RlZmluZSBSVENfU0VUX0RBVEVfWUVBUl9NU0IgV0xBTl9SVENfU0VUX0RBVEVfWUVBUl9NU0IKLSNkZWZpbmUgUlRDX1NFVF9EQVRFX1lFQVJfTFNCIFdMQU5fUlRDX1NFVF9EQVRFX1lFQVJfTFNCCi0jZGVmaW5lIFJUQ19TRVRfREFURV9ZRUFSX01BU0sgV0xBTl9SVENfU0VUX0RBVEVfWUVBUl9NQVNLCi0jZGVmaW5lIFJUQ19TRVRfREFURV9ZRUFSX0dFVCh4KSBXTEFOX1JUQ19TRVRfREFURV9ZRUFSX0dFVCh4KQotI2RlZmluZSBSVENfU0VUX0RBVEVfWUVBUl9TRVQoeCkgV0xBTl9SVENfU0VUX0RBVEVfWUVBUl9TRVQoeCkKLSNkZWZpbmUgUlRDX1NFVF9EQVRFX01PTlRIX01TQiBXTEFOX1JUQ19TRVRfREFURV9NT05USF9NU0IKLSNkZWZpbmUgUlRDX1NFVF9EQVRFX01PTlRIX0xTQiBXTEFOX1JUQ19TRVRfREFURV9NT05USF9MU0IKLSNkZWZpbmUgUlRDX1NFVF9EQVRFX01PTlRIX01BU0sgV0xBTl9SVENfU0VUX0RBVEVfTU9OVEhfTUFTSwotI2RlZmluZSBSVENfU0VUX0RBVEVfTU9OVEhfR0VUKHgpIFdMQU5fUlRDX1NFVF9EQVRFX01PTlRIX0dFVCh4KQotI2RlZmluZSBSVENfU0VUX0RBVEVfTU9OVEhfU0VUKHgpIFdMQU5fUlRDX1NFVF9EQVRFX01PTlRIX1NFVCh4KQotI2RlZmluZSBSVENfU0VUX0RBVEVfTU9OVEhfREFZX01TQiBXTEFOX1JUQ19TRVRfREFURV9NT05USF9EQVlfTVNCCi0jZGVmaW5lIFJUQ19TRVRfREFURV9NT05USF9EQVlfTFNCIFdMQU5fUlRDX1NFVF9EQVRFX01PTlRIX0RBWV9MU0IKLSNkZWZpbmUgUlRDX1NFVF9EQVRFX01PTlRIX0RBWV9NQVNLIFdMQU5fUlRDX1NFVF9EQVRFX01PTlRIX0RBWV9NQVNLCi0jZGVmaW5lIFJUQ19TRVRfREFURV9NT05USF9EQVlfR0VUKHgpIFdMQU5fUlRDX1NFVF9EQVRFX01PTlRIX0RBWV9HRVQoeCkKLSNkZWZpbmUgUlRDX1NFVF9EQVRFX01PTlRIX0RBWV9TRVQoeCkgV0xBTl9SVENfU0VUX0RBVEVfTU9OVEhfREFZX1NFVCh4KQotI2RlZmluZSBSVENfU0VUX0FMQVJNX0FERFJFU1MgV0xBTl9SVENfU0VUX0FMQVJNX0FERFJFU1MKLSNkZWZpbmUgUlRDX1NFVF9BTEFSTV9PRkZTRVQgV0xBTl9SVENfU0VUX0FMQVJNX09GRlNFVAotI2RlZmluZSBSVENfU0VUX0FMQVJNX0hPVVJfTVNCIFdMQU5fUlRDX1NFVF9BTEFSTV9IT1VSX01TQgotI2RlZmluZSBSVENfU0VUX0FMQVJNX0hPVVJfTFNCIFdMQU5fUlRDX1NFVF9BTEFSTV9IT1VSX0xTQgotI2RlZmluZSBSVENfU0VUX0FMQVJNX0hPVVJfTUFTSyBXTEFOX1JUQ19TRVRfQUxBUk1fSE9VUl9NQVNLCi0jZGVmaW5lIFJUQ19TRVRfQUxBUk1fSE9VUl9HRVQoeCkgV0xBTl9SVENfU0VUX0FMQVJNX0hPVVJfR0VUKHgpCi0jZGVmaW5lIFJUQ19TRVRfQUxBUk1fSE9VUl9TRVQoeCkgV0xBTl9SVENfU0VUX0FMQVJNX0hPVVJfU0VUKHgpCi0jZGVmaW5lIFJUQ19TRVRfQUxBUk1fTUlOVVRFX01TQiBXTEFOX1JUQ19TRVRfQUxBUk1fTUlOVVRFX01TQgotI2RlZmluZSBSVENfU0VUX0FMQVJNX01JTlVURV9MU0IgV0xBTl9SVENfU0VUX0FMQVJNX01JTlVURV9MU0IKLSNkZWZpbmUgUlRDX1NFVF9BTEFSTV9NSU5VVEVfTUFTSyBXTEFOX1JUQ19TRVRfQUxBUk1fTUlOVVRFX01BU0sKLSNkZWZpbmUgUlRDX1NFVF9BTEFSTV9NSU5VVEVfR0VUKHgpIFdMQU5fUlRDX1NFVF9BTEFSTV9NSU5VVEVfR0VUKHgpCi0jZGVmaW5lIFJUQ19TRVRfQUxBUk1fTUlOVVRFX1NFVCh4KSBXTEFOX1JUQ19TRVRfQUxBUk1fTUlOVVRFX1NFVCh4KQotI2RlZmluZSBSVENfU0VUX0FMQVJNX1NFQ09ORF9NU0IgV0xBTl9SVENfU0VUX0FMQVJNX1NFQ09ORF9NU0IKLSNkZWZpbmUgUlRDX1NFVF9BTEFSTV9TRUNPTkRfTFNCIFdMQU5fUlRDX1NFVF9BTEFSTV9TRUNPTkRfTFNCCi0jZGVmaW5lIFJUQ19TRVRfQUxBUk1fU0VDT05EX01BU0sgV0xBTl9SVENfU0VUX0FMQVJNX1NFQ09ORF9NQVNLCi0jZGVmaW5lIFJUQ19TRVRfQUxBUk1fU0VDT05EX0dFVCh4KSBXTEFOX1JUQ19TRVRfQUxBUk1fU0VDT05EX0dFVCh4KQotI2RlZmluZSBSVENfU0VUX0FMQVJNX1NFQ09ORF9TRVQoeCkgV0xBTl9SVENfU0VUX0FMQVJNX1NFQ09ORF9TRVQoeCkKLSNkZWZpbmUgUlRDX0NPTkZJR19BRERSRVNTIFdMQU5fUlRDX0NPTkZJR19BRERSRVNTCi0jZGVmaW5lIFJUQ19DT05GSUdfT0ZGU0VUIFdMQU5fUlRDX0NPTkZJR19PRkZTRVQKLSNkZWZpbmUgUlRDX0NPTkZJR19CQ0RfTVNCIFdMQU5fUlRDX0NPTkZJR19CQ0RfTVNCCi0jZGVmaW5lIFJUQ19DT05GSUdfQkNEX0xTQiBXTEFOX1JUQ19DT05GSUdfQkNEX0xTQgotI2RlZmluZSBSVENfQ09ORklHX0JDRF9NQVNLIFdMQU5fUlRDX0NPTkZJR19CQ0RfTUFTSwotI2RlZmluZSBSVENfQ09ORklHX0JDRF9HRVQoeCkgV0xBTl9SVENfQ09ORklHX0JDRF9HRVQoeCkKLSNkZWZpbmUgUlRDX0NPTkZJR19CQ0RfU0VUKHgpIFdMQU5fUlRDX0NPTkZJR19CQ0RfU0VUKHgpCi0jZGVmaW5lIFJUQ19DT05GSUdfVFdFTFZFX0hPVVJfTVNCIFdMQU5fUlRDX0NPTkZJR19UV0VMVkVfSE9VUl9NU0IKLSNkZWZpbmUgUlRDX0NPTkZJR19UV0VMVkVfSE9VUl9MU0IgV0xBTl9SVENfQ09ORklHX1RXRUxWRV9IT1VSX0xTQgotI2RlZmluZSBSVENfQ09ORklHX1RXRUxWRV9IT1VSX01BU0sgV0xBTl9SVENfQ09ORklHX1RXRUxWRV9IT1VSX01BU0sKLSNkZWZpbmUgUlRDX0NPTkZJR19UV0VMVkVfSE9VUl9HRVQoeCkgV0xBTl9SVENfQ09ORklHX1RXRUxWRV9IT1VSX0dFVCh4KQotI2RlZmluZSBSVENfQ09ORklHX1RXRUxWRV9IT1VSX1NFVCh4KSBXTEFOX1JUQ19DT05GSUdfVFdFTFZFX0hPVVJfU0VUKHgpCi0jZGVmaW5lIFJUQ19DT05GSUdfRFNFX01TQiBXTEFOX1JUQ19DT05GSUdfRFNFX01TQgotI2RlZmluZSBSVENfQ09ORklHX0RTRV9MU0IgV0xBTl9SVENfQ09ORklHX0RTRV9MU0IKLSNkZWZpbmUgUlRDX0NPTkZJR19EU0VfTUFTSyBXTEFOX1JUQ19DT05GSUdfRFNFX01BU0sKLSNkZWZpbmUgUlRDX0NPTkZJR19EU0VfR0VUKHgpIFdMQU5fUlRDX0NPTkZJR19EU0VfR0VUKHgpCi0jZGVmaW5lIFJUQ19DT05GSUdfRFNFX1NFVCh4KSBXTEFOX1JUQ19DT05GSUdfRFNFX1NFVCh4KQotI2RlZmluZSBSVENfQUxBUk1fU1RBVFVTX0FERFJFU1MgV0xBTl9SVENfQUxBUk1fU1RBVFVTX0FERFJFU1MKLSNkZWZpbmUgUlRDX0FMQVJNX1NUQVRVU19PRkZTRVQgV0xBTl9SVENfQUxBUk1fU1RBVFVTX09GRlNFVAotI2RlZmluZSBSVENfQUxBUk1fU1RBVFVTX0VOQUJMRV9NU0IgV0xBTl9SVENfQUxBUk1fU1RBVFVTX0VOQUJMRV9NU0IKLSNkZWZpbmUgUlRDX0FMQVJNX1NUQVRVU19FTkFCTEVfTFNCIFdMQU5fUlRDX0FMQVJNX1NUQVRVU19FTkFCTEVfTFNCCi0jZGVmaW5lIFJUQ19BTEFSTV9TVEFUVVNfRU5BQkxFX01BU0sgV0xBTl9SVENfQUxBUk1fU1RBVFVTX0VOQUJMRV9NQVNLCi0jZGVmaW5lIFJUQ19BTEFSTV9TVEFUVVNfRU5BQkxFX0dFVCh4KSBXTEFOX1JUQ19BTEFSTV9TVEFUVVNfRU5BQkxFX0dFVCh4KQotI2RlZmluZSBSVENfQUxBUk1fU1RBVFVTX0VOQUJMRV9TRVQoeCkgV0xBTl9SVENfQUxBUk1fU1RBVFVTX0VOQUJMRV9TRVQoeCkKLSNkZWZpbmUgUlRDX0FMQVJNX1NUQVRVU19JTlRFUlJVUFRfTVNCIFdMQU5fUlRDX0FMQVJNX1NUQVRVU19JTlRFUlJVUFRfTVNCCi0jZGVmaW5lIFJUQ19BTEFSTV9TVEFUVVNfSU5URVJSVVBUX0xTQiBXTEFOX1JUQ19BTEFSTV9TVEFUVVNfSU5URVJSVVBUX0xTQgotI2RlZmluZSBSVENfQUxBUk1fU1RBVFVTX0lOVEVSUlVQVF9NQVNLIFdMQU5fUlRDX0FMQVJNX1NUQVRVU19JTlRFUlJVUFRfTUFTSwotI2RlZmluZSBSVENfQUxBUk1fU1RBVFVTX0lOVEVSUlVQVF9HRVQoeCkgV0xBTl9SVENfQUxBUk1fU1RBVFVTX0lOVEVSUlVQVF9HRVQoeCkKLSNkZWZpbmUgUlRDX0FMQVJNX1NUQVRVU19JTlRFUlJVUFRfU0VUKHgpIFdMQU5fUlRDX0FMQVJNX1NUQVRVU19JTlRFUlJVUFRfU0VUKHgpCi0jZGVmaW5lIFVBUlRfV0FLRVVQX0FERFJFU1MgV0xBTl9VQVJUX1dBS0VVUF9BRERSRVNTCi0jZGVmaW5lIFVBUlRfV0FLRVVQX09GRlNFVCBXTEFOX1VBUlRfV0FLRVVQX09GRlNFVAotI2RlZmluZSBVQVJUX1dBS0VVUF9FTkFCTEVfTVNCIFdMQU5fVUFSVF9XQUtFVVBfRU5BQkxFX01TQgotI2RlZmluZSBVQVJUX1dBS0VVUF9FTkFCTEVfTFNCIFdMQU5fVUFSVF9XQUtFVVBfRU5BQkxFX0xTQgotI2RlZmluZSBVQVJUX1dBS0VVUF9FTkFCTEVfTUFTSyBXTEFOX1VBUlRfV0FLRVVQX0VOQUJMRV9NQVNLCi0jZGVmaW5lIFVBUlRfV0FLRVVQX0VOQUJMRV9HRVQoeCkgV0xBTl9VQVJUX1dBS0VVUF9FTkFCTEVfR0VUKHgpCi0jZGVmaW5lIFVBUlRfV0FLRVVQX0VOQUJMRV9TRVQoeCkgV0xBTl9VQVJUX1dBS0VVUF9FTkFCTEVfU0VUKHgpCiAjZGVmaW5lIFJFU0VUX0NBVVNFX0FERFJFU1MgV0xBTl9SRVNFVF9DQVVTRV9BRERSRVNTCiAjZGVmaW5lIFJFU0VUX0NBVVNFX09GRlNFVCBXTEFOX1JFU0VUX0NBVVNFX09GRlNFVAogI2RlZmluZSBSRVNFVF9DQVVTRV9MQVNUX01TQiBXTEFOX1JFU0VUX0NBVVNFX0xBU1RfTVNCCkBAIC03NTMsNDkgKzE1Nyw2IEBACiAjZGVmaW5lIFNZU1RFTV9TTEVFUF9ESVNBQkxFX01BU0sgV0xBTl9TWVNURU1fU0xFRVBfRElTQUJMRV9NQVNLCiAjZGVmaW5lIFNZU1RFTV9TTEVFUF9ESVNBQkxFX0dFVCh4KSBXTEFOX1NZU1RFTV9TTEVFUF9ESVNBQkxFX0dFVCh4KQogI2RlZmluZSBTWVNURU1fU0xFRVBfRElTQUJMRV9TRVQoeCkgV0xBTl9TWVNURU1fU0xFRVBfRElTQUJMRV9TRVQoeCkKLSNkZWZpbmUgU0RJT19XUkFQUEVSX0FERFJFU1MgV0xBTl9TRElPX1dSQVBQRVJfQUREUkVTUwotI2RlZmluZSBTRElPX1dSQVBQRVJfT0ZGU0VUIFdMQU5fU0RJT19XUkFQUEVSX09GRlNFVAotI2RlZmluZSBTRElPX1dSQVBQRVJfU0xFRVBfTVNCIFdMQU5fU0RJT19XUkFQUEVSX1NMRUVQX01TQgotI2RlZmluZSBTRElPX1dSQVBQRVJfU0xFRVBfTFNCIFdMQU5fU0RJT19XUkFQUEVSX1NMRUVQX0xTQgotI2RlZmluZSBTRElPX1dSQVBQRVJfU0xFRVBfTUFTSyBXTEFOX1NESU9fV1JBUFBFUl9TTEVFUF9NQVNLCi0jZGVmaW5lIFNESU9fV1JBUFBFUl9TTEVFUF9HRVQoeCkgV0xBTl9TRElPX1dSQVBQRVJfU0xFRVBfR0VUKHgpCi0jZGVmaW5lIFNESU9fV1JBUFBFUl9TTEVFUF9TRVQoeCkgV0xBTl9TRElPX1dSQVBQRVJfU0xFRVBfU0VUKHgpCi0jZGVmaW5lIFNESU9fV1JBUFBFUl9XQUtFVVBfTVNCIFdMQU5fU0RJT19XUkFQUEVSX1dBS0VVUF9NU0IKLSNkZWZpbmUgU0RJT19XUkFQUEVSX1dBS0VVUF9MU0IgV0xBTl9TRElPX1dSQVBQRVJfV0FLRVVQX0xTQgotI2RlZmluZSBTRElPX1dSQVBQRVJfV0FLRVVQX01BU0sgV0xBTl9TRElPX1dSQVBQRVJfV0FLRVVQX01BU0sKLSNkZWZpbmUgU0RJT19XUkFQUEVSX1dBS0VVUF9HRVQoeCkgV0xBTl9TRElPX1dSQVBQRVJfV0FLRVVQX0dFVCh4KQotI2RlZmluZSBTRElPX1dSQVBQRVJfV0FLRVVQX1NFVCh4KSBXTEFOX1NESU9fV1JBUFBFUl9XQUtFVVBfU0VUKHgpCi0jZGVmaW5lIFNESU9fV1JBUFBFUl9TT0NfT05fTVNCIFdMQU5fU0RJT19XUkFQUEVSX1NPQ19PTl9NU0IKLSNkZWZpbmUgU0RJT19XUkFQUEVSX1NPQ19PTl9MU0IgV0xBTl9TRElPX1dSQVBQRVJfU09DX09OX0xTQgotI2RlZmluZSBTRElPX1dSQVBQRVJfU09DX09OX01BU0sgV0xBTl9TRElPX1dSQVBQRVJfU09DX09OX01BU0sKLSNkZWZpbmUgU0RJT19XUkFQUEVSX1NPQ19PTl9HRVQoeCkgV0xBTl9TRElPX1dSQVBQRVJfU09DX09OX0dFVCh4KQotI2RlZmluZSBTRElPX1dSQVBQRVJfU09DX09OX1NFVCh4KSBXTEFOX1NESU9fV1JBUFBFUl9TT0NfT05fU0VUKHgpCi0jZGVmaW5lIFNESU9fV1JBUFBFUl9PTl9NU0IgV0xBTl9TRElPX1dSQVBQRVJfT05fTVNCCi0jZGVmaW5lIFNESU9fV1JBUFBFUl9PTl9MU0IgV0xBTl9TRElPX1dSQVBQRVJfT05fTFNCCi0jZGVmaW5lIFNESU9fV1JBUFBFUl9PTl9NQVNLIFdMQU5fU0RJT19XUkFQUEVSX09OX01BU0sKLSNkZWZpbmUgU0RJT19XUkFQUEVSX09OX0dFVCh4KSBXTEFOX1NESU9fV1JBUFBFUl9PTl9HRVQoeCkKLSNkZWZpbmUgU0RJT19XUkFQUEVSX09OX1NFVCh4KSBXTEFOX1NESU9fV1JBUFBFUl9PTl9TRVQoeCkKLSNkZWZpbmUgTUFDX1NMRUVQX0NPTlRST0xfQUREUkVTUyBXTEFOX01BQ19TTEVFUF9DT05UUk9MX0FERFJFU1MKLSNkZWZpbmUgTUFDX1NMRUVQX0NPTlRST0xfT0ZGU0VUIFdMQU5fTUFDX1NMRUVQX0NPTlRST0xfT0ZGU0VUCi0jZGVmaW5lIE1BQ19TTEVFUF9DT05UUk9MX0VOQUJMRV9NU0IgV0xBTl9NQUNfU0xFRVBfQ09OVFJPTF9FTkFCTEVfTVNCCi0jZGVmaW5lIE1BQ19TTEVFUF9DT05UUk9MX0VOQUJMRV9MU0IgV0xBTl9NQUNfU0xFRVBfQ09OVFJPTF9FTkFCTEVfTFNCCi0jZGVmaW5lIE1BQ19TTEVFUF9DT05UUk9MX0VOQUJMRV9NQVNLIFdMQU5fTUFDX1NMRUVQX0NPTlRST0xfRU5BQkxFX01BU0sKLSNkZWZpbmUgTUFDX1NMRUVQX0NPTlRST0xfRU5BQkxFX0dFVCh4KSBXTEFOX01BQ19TTEVFUF9DT05UUk9MX0VOQUJMRV9HRVQoeCkKLSNkZWZpbmUgTUFDX1NMRUVQX0NPTlRST0xfRU5BQkxFX1NFVCh4KSBXTEFOX01BQ19TTEVFUF9DT05UUk9MX0VOQUJMRV9TRVQoeCkKLSNkZWZpbmUgS0VFUF9BV0FLRV9BRERSRVNTIFdMQU5fS0VFUF9BV0FLRV9BRERSRVNTCi0jZGVmaW5lIEtFRVBfQVdBS0VfT0ZGU0VUIFdMQU5fS0VFUF9BV0FLRV9PRkZTRVQKLSNkZWZpbmUgS0VFUF9BV0FLRV9DT1VOVF9NU0IgV0xBTl9LRUVQX0FXQUtFX0NPVU5UX01TQgotI2RlZmluZSBLRUVQX0FXQUtFX0NPVU5UX0xTQiBXTEFOX0tFRVBfQVdBS0VfQ09VTlRfTFNCCi0jZGVmaW5lIEtFRVBfQVdBS0VfQ09VTlRfTUFTSyBXTEFOX0tFRVBfQVdBS0VfQ09VTlRfTUFTSwotI2RlZmluZSBLRUVQX0FXQUtFX0NPVU5UX0dFVCh4KSBXTEFOX0tFRVBfQVdBS0VfQ09VTlRfR0VUKHgpCi0jZGVmaW5lIEtFRVBfQVdBS0VfQ09VTlRfU0VUKHgpIFdMQU5fS0VFUF9BV0FLRV9DT1VOVF9TRVQoeCkKLSNkZWZpbmUgTFBPX0NBTF9USU1FX0FERFJFU1MgV0xBTl9MUE9fQ0FMX1RJTUVfQUREUkVTUwotI2RlZmluZSBMUE9fQ0FMX1RJTUVfT0ZGU0VUIFdMQU5fTFBPX0NBTF9USU1FX09GRlNFVAotI2RlZmluZSBMUE9fQ0FMX1RJTUVfTEVOR1RIX01TQiBXTEFOX0xQT19DQUxfVElNRV9MRU5HVEhfTVNCCi0jZGVmaW5lIExQT19DQUxfVElNRV9MRU5HVEhfTFNCIFdMQU5fTFBPX0NBTF9USU1FX0xFTkdUSF9MU0IKLSNkZWZpbmUgTFBPX0NBTF9USU1FX0xFTkdUSF9NQVNLIFdMQU5fTFBPX0NBTF9USU1FX0xFTkdUSF9NQVNLCi0jZGVmaW5lIExQT19DQUxfVElNRV9MRU5HVEhfR0VUKHgpIFdMQU5fTFBPX0NBTF9USU1FX0xFTkdUSF9HRVQoeCkKLSNkZWZpbmUgTFBPX0NBTF9USU1FX0xFTkdUSF9TRVQoeCkgV0xBTl9MUE9fQ0FMX1RJTUVfTEVOR1RIX1NFVCh4KQogI2RlZmluZSBMUE9fSU5JVF9ESVZJREVORF9JTlRfQUREUkVTUyBXTEFOX0xQT19JTklUX0RJVklERU5EX0lOVF9BRERSRVNTCiAjZGVmaW5lIExQT19JTklUX0RJVklERU5EX0lOVF9PRkZTRVQgV0xBTl9MUE9fSU5JVF9ESVZJREVORF9JTlRfT0ZGU0VUCiAjZGVmaW5lIExQT19JTklUX0RJVklERU5EX0lOVF9WQUxVRV9NU0IgV0xBTl9MUE9fSU5JVF9ESVZJREVORF9JTlRfVkFMVUVfTVNCCkBAIC04MjIsMTU0ICsxODMsNSBAQAogI2RlZmluZSBMUE9fQ0FMX0NPVU5UX01BU0sgV0xBTl9MUE9fQ0FMX0NPVU5UX01BU0sKICNkZWZpbmUgTFBPX0NBTF9DT1VOVF9HRVQoeCkgV0xBTl9MUE9fQ0FMX0NPVU5UX0dFVCh4KQogI2RlZmluZSBMUE9fQ0FMX0NPVU5UX1NFVCh4KSBXTEFOX0xQT19DQUxfQ09VTlRfU0VUKHgpCi0jZGVmaW5lIExQT19DQUxfVEVTVF9DT05UUk9MX0FERFJFU1MgV0xBTl9MUE9fQ0FMX1RFU1RfQ09OVFJPTF9BRERSRVNTCi0jZGVmaW5lIExQT19DQUxfVEVTVF9DT05UUk9MX09GRlNFVCBXTEFOX0xQT19DQUxfVEVTVF9DT05UUk9MX09GRlNFVAotI2RlZmluZSBMUE9fQ0FMX1RFU1RfQ09OVFJPTF9FTkFCTEVfTVNCIFdMQU5fTFBPX0NBTF9URVNUX0NPTlRST0xfRU5BQkxFX01TQgotI2RlZmluZSBMUE9fQ0FMX1RFU1RfQ09OVFJPTF9FTkFCTEVfTFNCIFdMQU5fTFBPX0NBTF9URVNUX0NPTlRST0xfRU5BQkxFX0xTQgotI2RlZmluZSBMUE9fQ0FMX1RFU1RfQ09OVFJPTF9FTkFCTEVfTUFTSyBXTEFOX0xQT19DQUxfVEVTVF9DT05UUk9MX0VOQUJMRV9NQVNLCi0jZGVmaW5lIExQT19DQUxfVEVTVF9DT05UUk9MX0VOQUJMRV9HRVQoeCkgV0xBTl9MUE9fQ0FMX1RFU1RfQ09OVFJPTF9FTkFCTEVfR0VUKHgpCi0jZGVmaW5lIExQT19DQUxfVEVTVF9DT05UUk9MX0VOQUJMRV9TRVQoeCkgV0xBTl9MUE9fQ0FMX1RFU1RfQ09OVFJPTF9FTkFCTEVfU0VUKHgpCi0jZGVmaW5lIExQT19DQUxfVEVTVF9DT05UUk9MX1JUQ19DWUNMRVNfTVNCIFdMQU5fTFBPX0NBTF9URVNUX0NPTlRST0xfUlRDX0NZQ0xFU19NU0IKLSNkZWZpbmUgTFBPX0NBTF9URVNUX0NPTlRST0xfUlRDX0NZQ0xFU19MU0IgV0xBTl9MUE9fQ0FMX1RFU1RfQ09OVFJPTF9SVENfQ1lDTEVTX0xTQgotI2RlZmluZSBMUE9fQ0FMX1RFU1RfQ09OVFJPTF9SVENfQ1lDTEVTX01BU0sgV0xBTl9MUE9fQ0FMX1RFU1RfQ09OVFJPTF9SVENfQ1lDTEVTX01BU0sKLSNkZWZpbmUgTFBPX0NBTF9URVNUX0NPTlRST0xfUlRDX0NZQ0xFU19HRVQoeCkgV0xBTl9MUE9fQ0FMX1RFU1RfQ09OVFJPTF9SVENfQ1lDTEVTX0dFVCh4KQotI2RlZmluZSBMUE9fQ0FMX1RFU1RfQ09OVFJPTF9SVENfQ1lDTEVTX1NFVCh4KSBXTEFOX0xQT19DQUxfVEVTVF9DT05UUk9MX1JUQ19DWUNMRVNfU0VUKHgpCi0jZGVmaW5lIExQT19DQUxfVEVTVF9TVEFUVVNfQUREUkVTUyBXTEFOX0xQT19DQUxfVEVTVF9TVEFUVVNfQUREUkVTUwotI2RlZmluZSBMUE9fQ0FMX1RFU1RfU1RBVFVTX09GRlNFVCBXTEFOX0xQT19DQUxfVEVTVF9TVEFUVVNfT0ZGU0VUCi0jZGVmaW5lIExQT19DQUxfVEVTVF9TVEFUVVNfUkVBRFlfTVNCIFdMQU5fTFBPX0NBTF9URVNUX1NUQVRVU19SRUFEWV9NU0IKLSNkZWZpbmUgTFBPX0NBTF9URVNUX1NUQVRVU19SRUFEWV9MU0IgV0xBTl9MUE9fQ0FMX1RFU1RfU1RBVFVTX1JFQURZX0xTQgotI2RlZmluZSBMUE9fQ0FMX1RFU1RfU1RBVFVTX1JFQURZX01BU0sgV0xBTl9MUE9fQ0FMX1RFU1RfU1RBVFVTX1JFQURZX01BU0sKLSNkZWZpbmUgTFBPX0NBTF9URVNUX1NUQVRVU19SRUFEWV9HRVQoeCkgV0xBTl9MUE9fQ0FMX1RFU1RfU1RBVFVTX1JFQURZX0dFVCh4KQotI2RlZmluZSBMUE9fQ0FMX1RFU1RfU1RBVFVTX1JFQURZX1NFVCh4KSBXTEFOX0xQT19DQUxfVEVTVF9TVEFUVVNfUkVBRFlfU0VUKHgpCi0jZGVmaW5lIExQT19DQUxfVEVTVF9TVEFUVVNfQ09VTlRfTVNCIFdMQU5fTFBPX0NBTF9URVNUX1NUQVRVU19DT1VOVF9NU0IKLSNkZWZpbmUgTFBPX0NBTF9URVNUX1NUQVRVU19DT1VOVF9MU0IgV0xBTl9MUE9fQ0FMX1RFU1RfU1RBVFVTX0NPVU5UX0xTQgotI2RlZmluZSBMUE9fQ0FMX1RFU1RfU1RBVFVTX0NPVU5UX01BU0sgV0xBTl9MUE9fQ0FMX1RFU1RfU1RBVFVTX0NPVU5UX01BU0sKLSNkZWZpbmUgTFBPX0NBTF9URVNUX1NUQVRVU19DT1VOVF9HRVQoeCkgV0xBTl9MUE9fQ0FMX1RFU1RfU1RBVFVTX0NPVU5UX0dFVCh4KQotI2RlZmluZSBMUE9fQ0FMX1RFU1RfU1RBVFVTX0NPVU5UX1NFVCh4KSBXTEFOX0xQT19DQUxfVEVTVF9TVEFUVVNfQ09VTlRfU0VUKHgpCi0jZGVmaW5lIENISVBfSURfQUREUkVTUyBXTEFOX0NISVBfSURfQUREUkVTUwotI2RlZmluZSBDSElQX0lEX09GRlNFVCBXTEFOX0NISVBfSURfT0ZGU0VUCi0jZGVmaW5lIENISVBfSURfREVWSUNFX0lEX01TQiBXTEFOX0NISVBfSURfREVWSUNFX0lEX01TQgotI2RlZmluZSBDSElQX0lEX0RFVklDRV9JRF9MU0IgV0xBTl9DSElQX0lEX0RFVklDRV9JRF9MU0IKLSNkZWZpbmUgQ0hJUF9JRF9ERVZJQ0VfSURfTUFTSyBXTEFOX0NISVBfSURfREVWSUNFX0lEX01BU0sKLSNkZWZpbmUgQ0hJUF9JRF9ERVZJQ0VfSURfR0VUKHgpIFdMQU5fQ0hJUF9JRF9ERVZJQ0VfSURfR0VUKHgpCi0jZGVmaW5lIENISVBfSURfREVWSUNFX0lEX1NFVCh4KSBXTEFOX0NISVBfSURfREVWSUNFX0lEX1NFVCh4KQotI2RlZmluZSBDSElQX0lEX0NPTkZJR19JRF9NU0IgV0xBTl9DSElQX0lEX0NPTkZJR19JRF9NU0IKLSNkZWZpbmUgQ0hJUF9JRF9DT05GSUdfSURfTFNCIFdMQU5fQ0hJUF9JRF9DT05GSUdfSURfTFNCCi0jZGVmaW5lIENISVBfSURfQ09ORklHX0lEX01BU0sgV0xBTl9DSElQX0lEX0NPTkZJR19JRF9NQVNLCi0jZGVmaW5lIENISVBfSURfQ09ORklHX0lEX0dFVCh4KSBXTEFOX0NISVBfSURfQ09ORklHX0lEX0dFVCh4KQotI2RlZmluZSBDSElQX0lEX0NPTkZJR19JRF9TRVQoeCkgV0xBTl9DSElQX0lEX0NPTkZJR19JRF9TRVQoeCkKLSNkZWZpbmUgQ0hJUF9JRF9WRVJTSU9OX0lEX01TQiBXTEFOX0NISVBfSURfVkVSU0lPTl9JRF9NU0IKLSNkZWZpbmUgQ0hJUF9JRF9WRVJTSU9OX0lEX0xTQiBXTEFOX0NISVBfSURfVkVSU0lPTl9JRF9MU0IKLSNkZWZpbmUgQ0hJUF9JRF9WRVJTSU9OX0lEX01BU0sgV0xBTl9DSElQX0lEX1ZFUlNJT05fSURfTUFTSwotI2RlZmluZSBDSElQX0lEX1ZFUlNJT05fSURfR0VUKHgpIFdMQU5fQ0hJUF9JRF9WRVJTSU9OX0lEX0dFVCh4KQotI2RlZmluZSBDSElQX0lEX1ZFUlNJT05fSURfU0VUKHgpIFdMQU5fQ0hJUF9JRF9WRVJTSU9OX0lEX1NFVCh4KQotI2RlZmluZSBERVJJVkVEX1JUQ19DTEtfQUREUkVTUyBXTEFOX0RFUklWRURfUlRDX0NMS19BRERSRVNTCi0jZGVmaW5lIERFUklWRURfUlRDX0NMS19PRkZTRVQgV0xBTl9ERVJJVkVEX1JUQ19DTEtfT0ZGU0VUCi0jZGVmaW5lIERFUklWRURfUlRDX0NMS19FWFRFUk5BTF9ERVRFQ1RfRU5fTVNCIFdMQU5fREVSSVZFRF9SVENfQ0xLX0VYVEVSTkFMX0RFVEVDVF9FTl9NU0IKLSNkZWZpbmUgREVSSVZFRF9SVENfQ0xLX0VYVEVSTkFMX0RFVEVDVF9FTl9MU0IgV0xBTl9ERVJJVkVEX1JUQ19DTEtfRVhURVJOQUxfREVURUNUX0VOX0xTQgotI2RlZmluZSBERVJJVkVEX1JUQ19DTEtfRVhURVJOQUxfREVURUNUX0VOX01BU0sgV0xBTl9ERVJJVkVEX1JUQ19DTEtfRVhURVJOQUxfREVURUNUX0VOX01BU0sKLSNkZWZpbmUgREVSSVZFRF9SVENfQ0xLX0VYVEVSTkFMX0RFVEVDVF9FTl9HRVQoeCkgV0xBTl9ERVJJVkVEX1JUQ19DTEtfRVhURVJOQUxfREVURUNUX0VOX0dFVCh4KQotI2RlZmluZSBERVJJVkVEX1JUQ19DTEtfRVhURVJOQUxfREVURUNUX0VOX1NFVCh4KSBXTEFOX0RFUklWRURfUlRDX0NMS19FWFRFUk5BTF9ERVRFQ1RfRU5fU0VUKHgpCi0jZGVmaW5lIERFUklWRURfUlRDX0NMS19FWFRFUk5BTF9ERVRFQ1RfTVNCIFdMQU5fREVSSVZFRF9SVENfQ0xLX0VYVEVSTkFMX0RFVEVDVF9NU0IKLSNkZWZpbmUgREVSSVZFRF9SVENfQ0xLX0VYVEVSTkFMX0RFVEVDVF9MU0IgV0xBTl9ERVJJVkVEX1JUQ19DTEtfRVhURVJOQUxfREVURUNUX0xTQgotI2RlZmluZSBERVJJVkVEX1JUQ19DTEtfRVhURVJOQUxfREVURUNUX01BU0sgV0xBTl9ERVJJVkVEX1JUQ19DTEtfRVhURVJOQUxfREVURUNUX01BU0sKLSNkZWZpbmUgREVSSVZFRF9SVENfQ0xLX0VYVEVSTkFMX0RFVEVDVF9HRVQoeCkgV0xBTl9ERVJJVkVEX1JUQ19DTEtfRVhURVJOQUxfREVURUNUX0dFVCh4KQotI2RlZmluZSBERVJJVkVEX1JUQ19DTEtfRVhURVJOQUxfREVURUNUX1NFVCh4KSBXTEFOX0RFUklWRURfUlRDX0NMS19FWFRFUk5BTF9ERVRFQ1RfU0VUKHgpCi0jZGVmaW5lIERFUklWRURfUlRDX0NMS19GT1JDRV9NU0IgV0xBTl9ERVJJVkVEX1JUQ19DTEtfRk9SQ0VfTVNCCi0jZGVmaW5lIERFUklWRURfUlRDX0NMS19GT1JDRV9MU0IgV0xBTl9ERVJJVkVEX1JUQ19DTEtfRk9SQ0VfTFNCCi0jZGVmaW5lIERFUklWRURfUlRDX0NMS19GT1JDRV9NQVNLIFdMQU5fREVSSVZFRF9SVENfQ0xLX0ZPUkNFX01BU0sKLSNkZWZpbmUgREVSSVZFRF9SVENfQ0xLX0ZPUkNFX0dFVCh4KSBXTEFOX0RFUklWRURfUlRDX0NMS19GT1JDRV9HRVQoeCkKLSNkZWZpbmUgREVSSVZFRF9SVENfQ0xLX0ZPUkNFX1NFVCh4KSBXTEFOX0RFUklWRURfUlRDX0NMS19GT1JDRV9TRVQoeCkKLSNkZWZpbmUgREVSSVZFRF9SVENfQ0xLX1BFUklPRF9NU0IgV0xBTl9ERVJJVkVEX1JUQ19DTEtfUEVSSU9EX01TQgotI2RlZmluZSBERVJJVkVEX1JUQ19DTEtfUEVSSU9EX0xTQiBXTEFOX0RFUklWRURfUlRDX0NMS19QRVJJT0RfTFNCCi0jZGVmaW5lIERFUklWRURfUlRDX0NMS19QRVJJT0RfTUFTSyBXTEFOX0RFUklWRURfUlRDX0NMS19QRVJJT0RfTUFTSwotI2RlZmluZSBERVJJVkVEX1JUQ19DTEtfUEVSSU9EX0dFVCh4KSBXTEFOX0RFUklWRURfUlRDX0NMS19QRVJJT0RfR0VUKHgpCi0jZGVmaW5lIERFUklWRURfUlRDX0NMS19QRVJJT0RfU0VUKHgpIFdMQU5fREVSSVZFRF9SVENfQ0xLX1BFUklPRF9TRVQoeCkKLSNkZWZpbmUgUE9XRVJfUkVHX0FERFJFU1MgV0xBTl9QT1dFUl9SRUdfQUREUkVTUwotI2RlZmluZSBQT1dFUl9SRUdfT0ZGU0VUIFdMQU5fUE9XRVJfUkVHX09GRlNFVAotI2RlZmluZSBQT1dFUl9SRUdfU0xFRVBfTUFLRV9OX0JSRUFLX0VOX01TQiBXTEFOX1BPV0VSX1JFR19TTEVFUF9NQUtFX05fQlJFQUtfRU5fTVNCCi0jZGVmaW5lIFBPV0VSX1JFR19TTEVFUF9NQUtFX05fQlJFQUtfRU5fTFNCIFdMQU5fUE9XRVJfUkVHX1NMRUVQX01BS0VfTl9CUkVBS19FTl9MU0IKLSNkZWZpbmUgUE9XRVJfUkVHX1NMRUVQX01BS0VfTl9CUkVBS19FTl9NQVNLIFdMQU5fUE9XRVJfUkVHX1NMRUVQX01BS0VfTl9CUkVBS19FTl9NQVNLCi0jZGVmaW5lIFBPV0VSX1JFR19TTEVFUF9NQUtFX05fQlJFQUtfRU5fR0VUKHgpIFdMQU5fUE9XRVJfUkVHX1NMRUVQX01BS0VfTl9CUkVBS19FTl9HRVQoeCkKLSNkZWZpbmUgUE9XRVJfUkVHX1NMRUVQX01BS0VfTl9CUkVBS19FTl9TRVQoeCkgV0xBTl9QT1dFUl9SRUdfU0xFRVBfTUFLRV9OX0JSRUFLX0VOX1NFVCh4KQotI2RlZmluZSBQT1dFUl9SRUdfREVCVUdfRU5fTVNCIFdMQU5fUE9XRVJfUkVHX0RFQlVHX0VOX01TQgotI2RlZmluZSBQT1dFUl9SRUdfREVCVUdfRU5fTFNCIFdMQU5fUE9XRVJfUkVHX0RFQlVHX0VOX0xTQgotI2RlZmluZSBQT1dFUl9SRUdfREVCVUdfRU5fTUFTSyBXTEFOX1BPV0VSX1JFR19ERUJVR19FTl9NQVNLCi0jZGVmaW5lIFBPV0VSX1JFR19ERUJVR19FTl9HRVQoeCkgV0xBTl9QT1dFUl9SRUdfREVCVUdfRU5fR0VUKHgpCi0jZGVmaW5lIFBPV0VSX1JFR19ERUJVR19FTl9TRVQoeCkgV0xBTl9QT1dFUl9SRUdfREVCVUdfRU5fU0VUKHgpCi0jZGVmaW5lIFBPV0VSX1JFR19XTEFOX0JCX1BXRF9FTl9NU0IgV0xBTl9QT1dFUl9SRUdfV0xBTl9CQl9QV0RfRU5fTVNCCi0jZGVmaW5lIFBPV0VSX1JFR19XTEFOX0JCX1BXRF9FTl9MU0IgV0xBTl9QT1dFUl9SRUdfV0xBTl9CQl9QV0RfRU5fTFNCCi0jZGVmaW5lIFBPV0VSX1JFR19XTEFOX0JCX1BXRF9FTl9NQVNLIFdMQU5fUE9XRVJfUkVHX1dMQU5fQkJfUFdEX0VOX01BU0sKLSNkZWZpbmUgUE9XRVJfUkVHX1dMQU5fQkJfUFdEX0VOX0dFVCh4KSBXTEFOX1BPV0VSX1JFR19XTEFOX0JCX1BXRF9FTl9HRVQoeCkKLSNkZWZpbmUgUE9XRVJfUkVHX1dMQU5fQkJfUFdEX0VOX1NFVCh4KSBXTEFOX1BPV0VSX1JFR19XTEFOX0JCX1BXRF9FTl9TRVQoeCkKLSNkZWZpbmUgUE9XRVJfUkVHX1dMQU5fTUFDX1BXRF9FTl9NU0IgV0xBTl9QT1dFUl9SRUdfV0xBTl9NQUNfUFdEX0VOX01TQgotI2RlZmluZSBQT1dFUl9SRUdfV0xBTl9NQUNfUFdEX0VOX0xTQiBXTEFOX1BPV0VSX1JFR19XTEFOX01BQ19QV0RfRU5fTFNCCi0jZGVmaW5lIFBPV0VSX1JFR19XTEFOX01BQ19QV0RfRU5fTUFTSyBXTEFOX1BPV0VSX1JFR19XTEFOX01BQ19QV0RfRU5fTUFTSwotI2RlZmluZSBQT1dFUl9SRUdfV0xBTl9NQUNfUFdEX0VOX0dFVCh4KSBXTEFOX1BPV0VSX1JFR19XTEFOX01BQ19QV0RfRU5fR0VUKHgpCi0jZGVmaW5lIFBPV0VSX1JFR19XTEFOX01BQ19QV0RfRU5fU0VUKHgpIFdMQU5fUE9XRVJfUkVHX1dMQU5fTUFDX1BXRF9FTl9TRVQoeCkKLSNkZWZpbmUgUE9XRVJfUkVHX1ZMVkxfTVNCIFdMQU5fUE9XRVJfUkVHX1ZMVkxfTVNCCi0jZGVmaW5lIFBPV0VSX1JFR19WTFZMX0xTQiBXTEFOX1BPV0VSX1JFR19WTFZMX0xTQgotI2RlZmluZSBQT1dFUl9SRUdfVkxWTF9NQVNLIFdMQU5fUE9XRVJfUkVHX1ZMVkxfTUFTSwotI2RlZmluZSBQT1dFUl9SRUdfVkxWTF9HRVQoeCkgV0xBTl9QT1dFUl9SRUdfVkxWTF9HRVQoeCkKLSNkZWZpbmUgUE9XRVJfUkVHX1ZMVkxfU0VUKHgpIFdMQU5fUE9XRVJfUkVHX1ZMVkxfU0VUKHgpCi0jZGVmaW5lIFBPV0VSX1JFR19DUFVfSU5UX0VOQUJMRV9NU0IgV0xBTl9QT1dFUl9SRUdfQ1BVX0lOVF9FTkFCTEVfTVNCCi0jZGVmaW5lIFBPV0VSX1JFR19DUFVfSU5UX0VOQUJMRV9MU0IgV0xBTl9QT1dFUl9SRUdfQ1BVX0lOVF9FTkFCTEVfTFNCCi0jZGVmaW5lIFBPV0VSX1JFR19DUFVfSU5UX0VOQUJMRV9NQVNLIFdMQU5fUE9XRVJfUkVHX0NQVV9JTlRfRU5BQkxFX01BU0sKLSNkZWZpbmUgUE9XRVJfUkVHX0NQVV9JTlRfRU5BQkxFX0dFVCh4KSBXTEFOX1BPV0VSX1JFR19DUFVfSU5UX0VOQUJMRV9HRVQoeCkKLSNkZWZpbmUgUE9XRVJfUkVHX0NQVV9JTlRfRU5BQkxFX1NFVCh4KSBXTEFOX1BPV0VSX1JFR19DUFVfSU5UX0VOQUJMRV9TRVQoeCkKLSNkZWZpbmUgUE9XRVJfUkVHX1dMQU5fSVNPX0RJU19NU0IgV0xBTl9QT1dFUl9SRUdfV0xBTl9JU09fRElTX01TQgotI2RlZmluZSBQT1dFUl9SRUdfV0xBTl9JU09fRElTX0xTQiBXTEFOX1BPV0VSX1JFR19XTEFOX0lTT19ESVNfTFNCCi0jZGVmaW5lIFBPV0VSX1JFR19XTEFOX0lTT19ESVNfTUFTSyBXTEFOX1BPV0VSX1JFR19XTEFOX0lTT19ESVNfTUFTSwotI2RlZmluZSBQT1dFUl9SRUdfV0xBTl9JU09fRElTX0dFVCh4KSBXTEFOX1BPV0VSX1JFR19XTEFOX0lTT19ESVNfR0VUKHgpCi0jZGVmaW5lIFBPV0VSX1JFR19XTEFOX0lTT19ESVNfU0VUKHgpIFdMQU5fUE9XRVJfUkVHX1dMQU5fSVNPX0RJU19TRVQoeCkKLSNkZWZpbmUgUE9XRVJfUkVHX1dMQU5fSVNPX0NOVExfTVNCIFdMQU5fUE9XRVJfUkVHX1dMQU5fSVNPX0NOVExfTVNCCi0jZGVmaW5lIFBPV0VSX1JFR19XTEFOX0lTT19DTlRMX0xTQiBXTEFOX1BPV0VSX1JFR19XTEFOX0lTT19DTlRMX0xTQgotI2RlZmluZSBQT1dFUl9SRUdfV0xBTl9JU09fQ05UTF9NQVNLIFdMQU5fUE9XRVJfUkVHX1dMQU5fSVNPX0NOVExfTUFTSwotI2RlZmluZSBQT1dFUl9SRUdfV0xBTl9JU09fQ05UTF9HRVQoeCkgV0xBTl9QT1dFUl9SRUdfV0xBTl9JU09fQ05UTF9HRVQoeCkKLSNkZWZpbmUgUE9XRVJfUkVHX1dMQU5fSVNPX0NOVExfU0VUKHgpIFdMQU5fUE9XRVJfUkVHX1dMQU5fSVNPX0NOVExfU0VUKHgpCi0jZGVmaW5lIFBPV0VSX1JFR19SQURJT19QV0RfRU5fTVNCIFdMQU5fUE9XRVJfUkVHX1JBRElPX1BXRF9FTl9NU0IKLSNkZWZpbmUgUE9XRVJfUkVHX1JBRElPX1BXRF9FTl9MU0IgV0xBTl9QT1dFUl9SRUdfUkFESU9fUFdEX0VOX0xTQgotI2RlZmluZSBQT1dFUl9SRUdfUkFESU9fUFdEX0VOX01BU0sgV0xBTl9QT1dFUl9SRUdfUkFESU9fUFdEX0VOX01BU0sKLSNkZWZpbmUgUE9XRVJfUkVHX1JBRElPX1BXRF9FTl9HRVQoeCkgV0xBTl9QT1dFUl9SRUdfUkFESU9fUFdEX0VOX0dFVCh4KQotI2RlZmluZSBQT1dFUl9SRUdfUkFESU9fUFdEX0VOX1NFVCh4KSBXTEFOX1BPV0VSX1JFR19SQURJT19QV0RfRU5fU0VUKHgpCi0jZGVmaW5lIFBPV0VSX1JFR19TT0NfSVNPX0VOX01TQiBXTEFOX1BPV0VSX1JFR19TT0NfSVNPX0VOX01TQgotI2RlZmluZSBQT1dFUl9SRUdfU09DX0lTT19FTl9MU0IgV0xBTl9QT1dFUl9SRUdfU09DX0lTT19FTl9MU0IKLSNkZWZpbmUgUE9XRVJfUkVHX1NPQ19JU09fRU5fTUFTSyBXTEFOX1BPV0VSX1JFR19TT0NfSVNPX0VOX01BU0sKLSNkZWZpbmUgUE9XRVJfUkVHX1NPQ19JU09fRU5fR0VUKHgpIFdMQU5fUE9XRVJfUkVHX1NPQ19JU09fRU5fR0VUKHgpCi0jZGVmaW5lIFBPV0VSX1JFR19TT0NfSVNPX0VOX1NFVCh4KSBXTEFOX1BPV0VSX1JFR19TT0NfSVNPX0VOX1NFVCh4KQotI2RlZmluZSBQT1dFUl9SRUdfV0xBTl9JU09fRU5fTVNCIFdMQU5fUE9XRVJfUkVHX1dMQU5fSVNPX0VOX01TQgotI2RlZmluZSBQT1dFUl9SRUdfV0xBTl9JU09fRU5fTFNCIFdMQU5fUE9XRVJfUkVHX1dMQU5fSVNPX0VOX0xTQgotI2RlZmluZSBQT1dFUl9SRUdfV0xBTl9JU09fRU5fTUFTSyBXTEFOX1BPV0VSX1JFR19XTEFOX0lTT19FTl9NQVNLCi0jZGVmaW5lIFBPV0VSX1JFR19XTEFOX0lTT19FTl9HRVQoeCkgV0xBTl9QT1dFUl9SRUdfV0xBTl9JU09fRU5fR0VUKHgpCi0jZGVmaW5lIFBPV0VSX1JFR19XTEFOX0lTT19FTl9TRVQoeCkgV0xBTl9QT1dFUl9SRUdfV0xBTl9JU09fRU5fU0VUKHgpCi0jZGVmaW5lIFBPV0VSX1JFR19XTEFOX1BXRF9FTl9NU0IgV0xBTl9QT1dFUl9SRUdfV0xBTl9QV0RfRU5fTVNCCi0jZGVmaW5lIFBPV0VSX1JFR19XTEFOX1BXRF9FTl9MU0IgV0xBTl9QT1dFUl9SRUdfV0xBTl9QV0RfRU5fTFNCCi0jZGVmaW5lIFBPV0VSX1JFR19XTEFOX1BXRF9FTl9NQVNLIFdMQU5fUE9XRVJfUkVHX1dMQU5fUFdEX0VOX01BU0sKLSNkZWZpbmUgUE9XRVJfUkVHX1dMQU5fUFdEX0VOX0dFVCh4KSBXTEFOX1BPV0VSX1JFR19XTEFOX1BXRF9FTl9HRVQoeCkKLSNkZWZpbmUgUE9XRVJfUkVHX1dMQU5fUFdEX0VOX1NFVCh4KSBXTEFOX1BPV0VSX1JFR19XTEFOX1BXRF9FTl9TRVQoeCkKLSNkZWZpbmUgUE9XRVJfUkVHX1BPV0VSX0VOX01TQiBXTEFOX1BPV0VSX1JFR19QT1dFUl9FTl9NU0IKLSNkZWZpbmUgUE9XRVJfUkVHX1BPV0VSX0VOX0xTQiBXTEFOX1BPV0VSX1JFR19QT1dFUl9FTl9MU0IKLSNkZWZpbmUgUE9XRVJfUkVHX1BPV0VSX0VOX01BU0sgV0xBTl9QT1dFUl9SRUdfUE9XRVJfRU5fTUFTSwotI2RlZmluZSBQT1dFUl9SRUdfUE9XRVJfRU5fR0VUKHgpIFdMQU5fUE9XRVJfUkVHX1BPV0VSX0VOX0dFVCh4KQotI2RlZmluZSBQT1dFUl9SRUdfUE9XRVJfRU5fU0VUKHgpIFdMQU5fUE9XRVJfUkVHX1BPV0VSX0VOX1NFVCh4KQotI2RlZmluZSBDT1JFX0NMS19DVFJMX0FERFJFU1MgV0xBTl9DT1JFX0NMS19DVFJMX0FERFJFU1MKLSNkZWZpbmUgQ09SRV9DTEtfQ1RSTF9PRkZTRVQgV0xBTl9DT1JFX0NMS19DVFJMX09GRlNFVAotI2RlZmluZSBDT1JFX0NMS19DVFJMX0RJVl9NU0IgV0xBTl9DT1JFX0NMS19DVFJMX0RJVl9NU0IKLSNkZWZpbmUgQ09SRV9DTEtfQ1RSTF9ESVZfTFNCIFdMQU5fQ09SRV9DTEtfQ1RSTF9ESVZfTFNCCi0jZGVmaW5lIENPUkVfQ0xLX0NUUkxfRElWX01BU0sgV0xBTl9DT1JFX0NMS19DVFJMX0RJVl9NQVNLCi0jZGVmaW5lIENPUkVfQ0xLX0NUUkxfRElWX0dFVCh4KSBXTEFOX0NPUkVfQ0xLX0NUUkxfRElWX0dFVCh4KQotI2RlZmluZSBDT1JFX0NMS19DVFJMX0RJVl9TRVQoeCkgV0xBTl9DT1JFX0NMS19DVFJMX0RJVl9TRVQoeCkKLSNkZWZpbmUgR1BJT19XQUtFVVBfQ09OVFJPTF9BRERSRVNTIFdMQU5fR1BJT19XQUtFVVBfQ09OVFJPTF9BRERSRVNTCi0jZGVmaW5lIEdQSU9fV0FLRVVQX0NPTlRST0xfT0ZGU0VUIFdMQU5fR1BJT19XQUtFVVBfQ09OVFJPTF9PRkZTRVQKLSNkZWZpbmUgR1BJT19XQUtFVVBfQ09OVFJPTF9FTkFCTEVfTVNCIFdMQU5fR1BJT19XQUtFVVBfQ09OVFJPTF9FTkFCTEVfTVNCCi0jZGVmaW5lIEdQSU9fV0FLRVVQX0NPTlRST0xfRU5BQkxFX0xTQiBXTEFOX0dQSU9fV0FLRVVQX0NPTlRST0xfRU5BQkxFX0xTQgotI2RlZmluZSBHUElPX1dBS0VVUF9DT05UUk9MX0VOQUJMRV9NQVNLIFdMQU5fR1BJT19XQUtFVVBfQ09OVFJPTF9FTkFCTEVfTUFTSwotI2RlZmluZSBHUElPX1dBS0VVUF9DT05UUk9MX0VOQUJMRV9HRVQoeCkgV0xBTl9HUElPX1dBS0VVUF9DT05UUk9MX0VOQUJMRV9HRVQoeCkKLSNkZWZpbmUgR1BJT19XQUtFVVBfQ09OVFJPTF9FTkFCTEVfU0VUKHgpIFdMQU5fR1BJT19XQUtFVVBfQ09OVFJPTF9FTkFCTEVfU0VUKHgpCi0KIAogI2VuZGlmCi0jZW5kaWYKLQotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3NC4wL2h3L3J0Y193bGFuX3JlZy5oIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHc0LjAvaHcvcnRjX3dsYW5fcmVnLmgKaW5kZXggYWJmODcyNi4uNWMwNDhmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHc0LjAvaHcvcnRjX3dsYW5fcmVnLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHc0LjAvaHcvcnRjX3dsYW5fcmVnLmgKQEAgLTk3LDEwMiArOTcsNiBAQAogI2RlZmluZSBXTEFOX1JFU0VUX0NPTlRST0xfU0kwX1JTVF9HRVQoeCkgICAgICAgICgoKHgpICYgV0xBTl9SRVNFVF9DT05UUk9MX1NJMF9SU1RfTUFTSykgPj4gV0xBTl9SRVNFVF9DT05UUk9MX1NJMF9SU1RfTFNCKQogI2RlZmluZSBXTEFOX1JFU0VUX0NPTlRST0xfU0kwX1JTVF9TRVQoeCkgICAgICAgICgoKHgpIDw8IFdMQU5fUkVTRVRfQ09OVFJPTF9TSTBfUlNUX0xTQikgJiBXTEFOX1JFU0VUX0NPTlRST0xfU0kwX1JTVF9NQVNLKQogCi0jZGVmaW5lIFdMQU5fWFRBTF9DT05UUk9MX0FERFJFU1MgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBXTEFOX1hUQUxfQ09OVFJPTF9PRkZTRVQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgV0xBTl9YVEFMX0NPTlRST0xfVENYT19NU0IgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fWFRBTF9DT05UUk9MX1RDWE9fTFNCICAgICAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX1hUQUxfQ09OVFJPTF9UQ1hPX01BU0sgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgV0xBTl9YVEFMX0NPTlRST0xfVENYT19HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFdMQU5fWFRBTF9DT05UUk9MX1RDWE9fTUFTSykgPj4gV0xBTl9YVEFMX0NPTlRST0xfVENYT19MU0IpCi0jZGVmaW5lIFdMQU5fWFRBTF9DT05UUk9MX1RDWE9fU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9YVEFMX0NPTlRST0xfVENYT19MU0IpICYgV0xBTl9YVEFMX0NPTlRST0xfVENYT19NQVNLKQotCi0jZGVmaW5lIFdMQU5fVENYT19ERVRFQ1RfQUREUkVTUyAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBXTEFOX1RDWE9fREVURUNUX09GRlNFVCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgV0xBTl9UQ1hPX0RFVEVDVF9QUkVTRU5UX01TQiAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fVENYT19ERVRFQ1RfUFJFU0VOVF9MU0IgICAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX1RDWE9fREVURUNUX1BSRVNFTlRfTUFTSyAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgV0xBTl9UQ1hPX0RFVEVDVF9QUkVTRU5UX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIFdMQU5fVENYT19ERVRFQ1RfUFJFU0VOVF9NQVNLKSA+PiBXTEFOX1RDWE9fREVURUNUX1BSRVNFTlRfTFNCKQotI2RlZmluZSBXTEFOX1RDWE9fREVURUNUX1BSRVNFTlRfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IFdMQU5fVENYT19ERVRFQ1RfUFJFU0VOVF9MU0IpICYgV0xBTl9UQ1hPX0RFVEVDVF9QUkVTRU5UX01BU0spCi0KLSNkZWZpbmUgV0xBTl9YVEFMX1RFU1RfQUREUkVTUyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBjCi0jZGVmaW5lIFdMQU5fWFRBTF9URVNUX09GRlNFVCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwYwotI2RlZmluZSBXTEFOX1hUQUxfVEVTVF9OT1RDWE9ERVRfTVNCICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9YVEFMX1RFU1RfTk9UQ1hPREVUX0xTQiAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fWFRBTF9URVNUX05PVENYT0RFVF9NQVNLICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBXTEFOX1hUQUxfVEVTVF9OT1RDWE9ERVRfR0VUKHgpICAgICAgICAgICgoKHgpICYgV0xBTl9YVEFMX1RFU1RfTk9UQ1hPREVUX01BU0spID4+IFdMQU5fWFRBTF9URVNUX05PVENYT0RFVF9MU0IpCi0jZGVmaW5lIFdMQU5fWFRBTF9URVNUX05PVENYT0RFVF9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgV0xBTl9YVEFMX1RFU1RfTk9UQ1hPREVUX0xTQikgJiBXTEFOX1hUQUxfVEVTVF9OT1RDWE9ERVRfTUFTSykKLQotI2RlZmluZSBXTEFOX1FVQURSQVRVUkVfQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgV0xBTl9RVUFEUkFUVVJFX09GRlNFVCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIFdMQU5fUVVBRFJBVFVSRV9BRENfTVNCICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBXTEFOX1FVQURSQVRVUkVfQURDX0xTQiAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgV0xBTl9RVUFEUkFUVVJFX0FEQ19NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMGYwCi0jZGVmaW5lIFdMQU5fUVVBRFJBVFVSRV9BRENfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBXTEFOX1FVQURSQVRVUkVfQURDX01BU0spID4+IFdMQU5fUVVBRFJBVFVSRV9BRENfTFNCKQotI2RlZmluZSBXTEFOX1FVQURSQVRVUkVfQURDX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fUVVBRFJBVFVSRV9BRENfTFNCKSAmIFdMQU5fUVVBRFJBVFVSRV9BRENfTUFTSykKLSNkZWZpbmUgV0xBTl9RVUFEUkFUVVJFX1NFTF9NU0IgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFdMQU5fUVVBRFJBVFVSRV9TRUxfTFNCICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBXTEFOX1FVQURSQVRVUkVfU0VMX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgV0xBTl9RVUFEUkFUVVJFX1NFTF9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIFdMQU5fUVVBRFJBVFVSRV9TRUxfTUFTSykgPj4gV0xBTl9RVUFEUkFUVVJFX1NFTF9MU0IpCi0jZGVmaW5lIFdMQU5fUVVBRFJBVFVSRV9TRUxfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9RVUFEUkFUVVJFX1NFTF9MU0IpICYgV0xBTl9RVUFEUkFUVVJFX1NFTF9NQVNLKQotI2RlZmluZSBXTEFOX1FVQURSQVRVUkVfREFDX01TQiAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgV0xBTl9RVUFEUkFUVVJFX0RBQ19MU0IgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fUVVBRFJBVFVSRV9EQUNfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMwotI2RlZmluZSBXTEFOX1FVQURSQVRVUkVfREFDX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgV0xBTl9RVUFEUkFUVVJFX0RBQ19NQVNLKSA+PiBXTEFOX1FVQURSQVRVUkVfREFDX0xTQikKLSNkZWZpbmUgV0xBTl9RVUFEUkFUVVJFX0RBQ19TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBXTEFOX1FVQURSQVRVUkVfREFDX0xTQikgJiBXTEFOX1FVQURSQVRVUkVfREFDX01BU0spCi0KLSNkZWZpbmUgV0xBTl9QTExfQ09OVFJPTF9BRERSRVNTICAgICAgICAgICAgICAgICAweDAwMDAwMDE0Ci0jZGVmaW5lIFdMQU5fUExMX0NPTlRST0xfT0ZGU0VUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAotI2RlZmluZSBXTEFOX1BMTF9DT05UUk9MX0RJR19URVNUX0NMS19NU0IgICAgICAgIDIwCi0jZGVmaW5lIFdMQU5fUExMX0NPTlRST0xfRElHX1RFU1RfQ0xLX0xTQiAgICAgICAgMjAKLSNkZWZpbmUgV0xBTl9QTExfQ09OVFJPTF9ESUdfVEVTVF9DTEtfTUFTSyAgICAgICAweDAwMTAwMDAwCi0jZGVmaW5lIFdMQU5fUExMX0NPTlRST0xfRElHX1RFU1RfQ0xLX0dFVCh4KSAgICAgKCgoeCkgJiBXTEFOX1BMTF9DT05UUk9MX0RJR19URVNUX0NMS19NQVNLKSA+PiBXTEFOX1BMTF9DT05UUk9MX0RJR19URVNUX0NMS19MU0IpCi0jZGVmaW5lIFdMQU5fUExMX0NPTlRST0xfRElHX1RFU1RfQ0xLX1NFVCh4KSAgICAgKCgoeCkgPDwgV0xBTl9QTExfQ09OVFJPTF9ESUdfVEVTVF9DTEtfTFNCKSAmIFdMQU5fUExMX0NPTlRST0xfRElHX1RFU1RfQ0xLX01BU0spCi0jZGVmaW5lIFdMQU5fUExMX0NPTlRST0xfTUFDX09WRVJSSURFX01TQiAgICAgICAgMTkKLSNkZWZpbmUgV0xBTl9QTExfQ09OVFJPTF9NQUNfT1ZFUlJJREVfTFNCICAgICAgICAxOQotI2RlZmluZSBXTEFOX1BMTF9DT05UUk9MX01BQ19PVkVSUklERV9NQVNLICAgICAgIDB4MDAwODAwMDAKLSNkZWZpbmUgV0xBTl9QTExfQ09OVFJPTF9NQUNfT1ZFUlJJREVfR0VUKHgpICAgICAoKCh4KSAmIFdMQU5fUExMX0NPTlRST0xfTUFDX09WRVJSSURFX01BU0spID4+IFdMQU5fUExMX0NPTlRST0xfTUFDX09WRVJSSURFX0xTQikKLSNkZWZpbmUgV0xBTl9QTExfQ09OVFJPTF9NQUNfT1ZFUlJJREVfU0VUKHgpICAgICAoKCh4KSA8PCBXTEFOX1BMTF9DT05UUk9MX01BQ19PVkVSUklERV9MU0IpICYgV0xBTl9QTExfQ09OVFJPTF9NQUNfT1ZFUlJJREVfTUFTSykKLSNkZWZpbmUgV0xBTl9QTExfQ09OVFJPTF9OT1BXRF9NU0IgICAgICAgICAgICAgICAxOAotI2RlZmluZSBXTEFOX1BMTF9DT05UUk9MX05PUFdEX0xTQiAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFdMQU5fUExMX0NPTlRST0xfTk9QV0RfTUFTSyAgICAgICAgICAgICAgMHgwMDA0MDAwMAotI2RlZmluZSBXTEFOX1BMTF9DT05UUk9MX05PUFdEX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgV0xBTl9QTExfQ09OVFJPTF9OT1BXRF9NQVNLKSA+PiBXTEFOX1BMTF9DT05UUk9MX05PUFdEX0xTQikKLSNkZWZpbmUgV0xBTl9QTExfQ09OVFJPTF9OT1BXRF9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBXTEFOX1BMTF9DT05UUk9MX05PUFdEX0xTQikgJiBXTEFOX1BMTF9DT05UUk9MX05PUFdEX01BU0spCi0jZGVmaW5lIFdMQU5fUExMX0NPTlRST0xfVVBEQVRJTkdfTVNCICAgICAgICAgICAgMTcKLSNkZWZpbmUgV0xBTl9QTExfQ09OVFJPTF9VUERBVElOR19MU0IgICAgICAgICAgICAxNwotI2RlZmluZSBXTEFOX1BMTF9DT05UUk9MX1VQREFUSU5HX01BU0sgICAgICAgICAgIDB4MDAwMjAwMDAKLSNkZWZpbmUgV0xBTl9QTExfQ09OVFJPTF9VUERBVElOR19HRVQoeCkgICAgICAgICAoKCh4KSAmIFdMQU5fUExMX0NPTlRST0xfVVBEQVRJTkdfTUFTSykgPj4gV0xBTl9QTExfQ09OVFJPTF9VUERBVElOR19MU0IpCi0jZGVmaW5lIFdMQU5fUExMX0NPTlRST0xfVVBEQVRJTkdfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgV0xBTl9QTExfQ09OVFJPTF9VUERBVElOR19MU0IpICYgV0xBTl9QTExfQ09OVFJPTF9VUERBVElOR19NQVNLKQotI2RlZmluZSBXTEFOX1BMTF9DT05UUk9MX0JZUEFTU19NU0IgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFdMQU5fUExMX0NPTlRST0xfQllQQVNTX0xTQiAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgV0xBTl9QTExfQ09OVFJPTF9CWVBBU1NfTUFTSyAgICAgICAgICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIFdMQU5fUExMX0NPTlRST0xfQllQQVNTX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBXTEFOX1BMTF9DT05UUk9MX0JZUEFTU19NQVNLKSA+PiBXTEFOX1BMTF9DT05UUk9MX0JZUEFTU19MU0IpCi0jZGVmaW5lIFdMQU5fUExMX0NPTlRST0xfQllQQVNTX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9QTExfQ09OVFJPTF9CWVBBU1NfTFNCKSAmIFdMQU5fUExMX0NPTlRST0xfQllQQVNTX01BU0spCi0jZGVmaW5lIFdMQU5fUExMX0NPTlRST0xfUkVGRElWX01TQiAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgV0xBTl9QTExfQ09OVFJPTF9SRUZESVZfTFNCICAgICAgICAgICAgICAxMgotI2RlZmluZSBXTEFOX1BMTF9DT05UUk9MX1JFRkRJVl9NQVNLICAgICAgICAgICAgIDB4MDAwMGYwMDAKLSNkZWZpbmUgV0xBTl9QTExfQ09OVFJPTF9SRUZESVZfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIFdMQU5fUExMX0NPTlRST0xfUkVGRElWX01BU0spID4+IFdMQU5fUExMX0NPTlRST0xfUkVGRElWX0xTQikKLSNkZWZpbmUgV0xBTl9QTExfQ09OVFJPTF9SRUZESVZfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCBXTEFOX1BMTF9DT05UUk9MX1JFRkRJVl9MU0IpICYgV0xBTl9QTExfQ09OVFJPTF9SRUZESVZfTUFTSykKLSNkZWZpbmUgV0xBTl9QTExfQ09OVFJPTF9ESVZfTVNCICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFdMQU5fUExMX0NPTlRST0xfRElWX0xTQiAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX1BMTF9DT05UUk9MX0RJVl9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMDAzZmYKLSNkZWZpbmUgV0xBTl9QTExfQ09OVFJPTF9ESVZfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIFdMQU5fUExMX0NPTlRST0xfRElWX01BU0spID4+IFdMQU5fUExMX0NPTlRST0xfRElWX0xTQikKLSNkZWZpbmUgV0xBTl9QTExfQ09OVFJPTF9ESVZfU0VUKHgpICAgICAgICAgICAgICAoKCh4KSA8PCBXTEFOX1BMTF9DT05UUk9MX0RJVl9MU0IpICYgV0xBTl9QTExfQ09OVFJPTF9ESVZfTUFTSykKLQotI2RlZmluZSBXTEFOX1BMTF9TRVRUTEVfQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTgKLSNkZWZpbmUgV0xBTl9QTExfU0VUVExFX09GRlNFVCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4Ci0jZGVmaW5lIFdMQU5fUExMX1NFVFRMRV9USU1FX01TQiAgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgV0xBTl9QTExfU0VUVExFX1RJTUVfTFNCICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fUExMX1NFVFRMRV9USU1FX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMGZmZgotI2RlZmluZSBXTEFOX1BMTF9TRVRUTEVfVElNRV9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgV0xBTl9QTExfU0VUVExFX1RJTUVfTUFTSykgPj4gV0xBTl9QTExfU0VUVExFX1RJTUVfTFNCKQotI2RlZmluZSBXTEFOX1BMTF9TRVRUTEVfVElNRV9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fUExMX1NFVFRMRV9USU1FX0xTQikgJiBXTEFOX1BMTF9TRVRUTEVfVElNRV9NQVNLKQotCi0jZGVmaW5lIFdMQU5fWFRBTF9TRVRUTEVfQUREUkVTUyAgICAgICAgICAgICAgICAgMHgwMDAwMDAxYwotI2RlZmluZSBXTEFOX1hUQUxfU0VUVExFX09GRlNFVCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMWMKLSNkZWZpbmUgV0xBTl9YVEFMX1NFVFRMRV9USU1FX01TQiAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFdMQU5fWFRBTF9TRVRUTEVfVElNRV9MU0IgICAgICAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX1hUQUxfU0VUVExFX1RJTUVfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgV0xBTl9YVEFMX1NFVFRMRV9USU1FX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIFdMQU5fWFRBTF9TRVRUTEVfVElNRV9NQVNLKSA+PiBXTEFOX1hUQUxfU0VUVExFX1RJTUVfTFNCKQotI2RlZmluZSBXTEFOX1hUQUxfU0VUVExFX1RJTUVfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fWFRBTF9TRVRUTEVfVElNRV9MU0IpICYgV0xBTl9YVEFMX1NFVFRMRV9USU1FX01BU0spCi0KICNkZWZpbmUgV0xBTl9DUFVfQ0xPQ0tfQUREUkVTUyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCiAjZGVmaW5lIFdMQU5fQ1BVX0NMT0NLX09GRlNFVCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAogI2RlZmluZSBXTEFOX0NQVV9DTE9DS19TVEFOREFSRF9NU0IgICAgICAgICAgICAgIDEKQEAgLTIwMSwxNCArMTA1LDYgQEAKICNkZWZpbmUgV0xBTl9DUFVfQ0xPQ0tfU1RBTkRBUkRfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIFdMQU5fQ1BVX0NMT0NLX1NUQU5EQVJEX01BU0spID4+IFdMQU5fQ1BVX0NMT0NLX1NUQU5EQVJEX0xTQikKICNkZWZpbmUgV0xBTl9DUFVfQ0xPQ0tfU1RBTkRBUkRfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCBXTEFOX0NQVV9DTE9DS19TVEFOREFSRF9MU0IpICYgV0xBTl9DUFVfQ0xPQ0tfU1RBTkRBUkRfTUFTSykKIAotI2RlZmluZSBXTEFOX0NMT0NLX09VVF9BRERSRVNTICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKLSNkZWZpbmUgV0xBTl9DTE9DS19PVVRfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI0Ci0jZGVmaW5lIFdMQU5fQ0xPQ0tfT1VUX1NFTEVDVF9NU0IgICAgICAgICAgICAgICAgMwotI2RlZmluZSBXTEFOX0NMT0NLX09VVF9TRUxFQ1RfTFNCICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9DTE9DS19PVVRfU0VMRUNUX01BU0sgICAgICAgICAgICAgICAweDAwMDAwMDBmCi0jZGVmaW5lIFdMQU5fQ0xPQ0tfT1VUX1NFTEVDVF9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBXTEFOX0NMT0NLX09VVF9TRUxFQ1RfTUFTSykgPj4gV0xBTl9DTE9DS19PVVRfU0VMRUNUX0xTQikKLSNkZWZpbmUgV0xBTl9DTE9DS19PVVRfU0VMRUNUX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBXTEFOX0NMT0NLX09VVF9TRUxFQ1RfTFNCKSAmIFdMQU5fQ0xPQ0tfT1VUX1NFTEVDVF9NQVNLKQotCiAjZGVmaW5lIFdMQU5fQ0xPQ0tfQ09OVFJPTF9BRERSRVNTICAgICAgICAgICAgICAgMHgwMDAwMDAyOAogI2RlZmluZSBXTEFOX0NMT0NLX0NPTlRST0xfT0ZGU0VUICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKICNkZWZpbmUgV0xBTl9DTE9DS19DT05UUk9MX0xGX0NMSzMyX01TQiAgICAgICAgICAyCkBAIC0yMjIsNTU1ICsxMTgsNiBAQAogI2RlZmluZSBXTEFOX0NMT0NLX0NPTlRST0xfU0kwX0NMS19HRVQoeCkgICAgICAgICgoKHgpICYgV0xBTl9DTE9DS19DT05UUk9MX1NJMF9DTEtfTUFTSykgPj4gV0xBTl9DTE9DS19DT05UUk9MX1NJMF9DTEtfTFNCKQogI2RlZmluZSBXTEFOX0NMT0NLX0NPTlRST0xfU0kwX0NMS19TRVQoeCkgICAgICAgICgoKHgpIDw8IFdMQU5fQ0xPQ0tfQ09OVFJPTF9TSTBfQ0xLX0xTQikgJiBXTEFOX0NMT0NLX0NPTlRST0xfU0kwX0NMS19NQVNLKQogCi0jZGVmaW5lIFdMQU5fQklBU19PVkVSUklERV9BRERSRVNTICAgICAgICAgICAgICAgMHgwMDAwMDAyYwotI2RlZmluZSBXTEFOX0JJQVNfT1ZFUlJJREVfT0ZGU0VUICAgICAgICAgICAgICAgIDB4MDAwMDAwMmMKLSNkZWZpbmUgV0xBTl9CSUFTX09WRVJSSURFX09OX01TQiAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fQklBU19PVkVSUklERV9PTl9MU0IgICAgICAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX0JJQVNfT1ZFUlJJREVfT05fTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgV0xBTl9CSUFTX09WRVJSSURFX09OX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIFdMQU5fQklBU19PVkVSUklERV9PTl9NQVNLKSA+PiBXTEFOX0JJQVNfT1ZFUlJJREVfT05fTFNCKQotI2RlZmluZSBXTEFOX0JJQVNfT1ZFUlJJREVfT05fU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fQklBU19PVkVSUklERV9PTl9MU0IpICYgV0xBTl9CSUFTX09WRVJSSURFX09OX01BU0spCi0KLSNkZWZpbmUgV0xBTl9XRFRfQ09OVFJPTF9BRERSRVNTICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCi0jZGVmaW5lIFdMQU5fV0RUX0NPTlRST0xfT0ZGU0VUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMAotI2RlZmluZSBXTEFOX1dEVF9DT05UUk9MX0FDVElPTl9NU0IgICAgICAgICAgICAgIDIKLSNkZWZpbmUgV0xBTl9XRFRfQ09OVFJPTF9BQ1RJT05fTFNCICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fV0RUX0NPTlRST0xfQUNUSU9OX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAwNwotI2RlZmluZSBXTEFOX1dEVF9DT05UUk9MX0FDVElPTl9HRVQoeCkgICAgICAgICAgICgoKHgpICYgV0xBTl9XRFRfQ09OVFJPTF9BQ1RJT05fTUFTSykgPj4gV0xBTl9XRFRfQ09OVFJPTF9BQ1RJT05fTFNCKQotI2RlZmluZSBXTEFOX1dEVF9DT05UUk9MX0FDVElPTl9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFdMQU5fV0RUX0NPTlRST0xfQUNUSU9OX0xTQikgJiBXTEFOX1dEVF9DT05UUk9MX0FDVElPTl9NQVNLKQotCi0jZGVmaW5lIFdMQU5fV0RUX1NUQVRVU19BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAotI2RlZmluZSBXTEFOX1dEVF9TVEFUVVNfT0ZGU0VUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKLSNkZWZpbmUgV0xBTl9XRFRfU1RBVFVTX0lOVEVSUlVQVF9NU0IgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fV0RUX1NUQVRVU19JTlRFUlJVUFRfTFNCICAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX1dEVF9TVEFUVVNfSU5URVJSVVBUX01BU0sgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgV0xBTl9XRFRfU1RBVFVTX0lOVEVSUlVQVF9HRVQoeCkgICAgICAgICAoKCh4KSAmIFdMQU5fV0RUX1NUQVRVU19JTlRFUlJVUFRfTUFTSykgPj4gV0xBTl9XRFRfU1RBVFVTX0lOVEVSUlVQVF9MU0IpCi0jZGVmaW5lIFdMQU5fV0RUX1NUQVRVU19JTlRFUlJVUFRfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgV0xBTl9XRFRfU1RBVFVTX0lOVEVSUlVQVF9MU0IpICYgV0xBTl9XRFRfU1RBVFVTX0lOVEVSUlVQVF9NQVNLKQotCi0jZGVmaW5lIFdMQU5fV0RUX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAotI2RlZmluZSBXTEFOX1dEVF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzgKLSNkZWZpbmUgV0xBTl9XRFRfVEFSR0VUX01TQiAgICAgICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBXTEFOX1dEVF9UQVJHRVRfTFNCICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9XRFRfVEFSR0VUX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwM2ZmZmZmCi0jZGVmaW5lIFdMQU5fV0RUX1RBUkdFVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBXTEFOX1dEVF9UQVJHRVRfTUFTSykgPj4gV0xBTl9XRFRfVEFSR0VUX0xTQikKLSNkZWZpbmUgV0xBTl9XRFRfVEFSR0VUX1NFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBXTEFOX1dEVF9UQVJHRVRfTFNCKSAmIFdMQU5fV0RUX1RBUkdFVF9NQVNLKQotCi0jZGVmaW5lIFdMQU5fV0RUX0NPVU5UX0FERFJFU1MgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzYwotI2RlZmluZSBXTEFOX1dEVF9DT1VOVF9PRkZTRVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwM2MKLSNkZWZpbmUgV0xBTl9XRFRfQ09VTlRfVkFMVUVfTVNCICAgICAgICAgICAgICAgICAyMQotI2RlZmluZSBXTEFOX1dEVF9DT1VOVF9WQUxVRV9MU0IgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9XRFRfQ09VTlRfVkFMVUVfTUFTSyAgICAgICAgICAgICAgICAweDAwM2ZmZmZmCi0jZGVmaW5lIFdMQU5fV0RUX0NPVU5UX1ZBTFVFX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiBXTEFOX1dEVF9DT1VOVF9WQUxVRV9NQVNLKSA+PiBXTEFOX1dEVF9DT1VOVF9WQUxVRV9MU0IpCi0jZGVmaW5lIFdMQU5fV0RUX0NPVU5UX1ZBTFVFX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9XRFRfQ09VTlRfVkFMVUVfTFNCKSAmIFdMQU5fV0RUX0NPVU5UX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgV0xBTl9XRFRfUkVTRVRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIFdMQU5fV0RUX1JFU0VUX09GRlNFVCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAotI2RlZmluZSBXTEFOX1dEVF9SRVNFVF9WQUxVRV9NU0IgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9XRFRfUkVTRVRfVkFMVUVfTFNCICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fV0RUX1JFU0VUX1ZBTFVFX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBXTEFOX1dEVF9SRVNFVF9WQUxVRV9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgV0xBTl9XRFRfUkVTRVRfVkFMVUVfTUFTSykgPj4gV0xBTl9XRFRfUkVTRVRfVkFMVUVfTFNCKQotI2RlZmluZSBXTEFOX1dEVF9SRVNFVF9WQUxVRV9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fV0RUX1JFU0VUX1ZBTFVFX0xTQikgJiBXTEFOX1dEVF9SRVNFVF9WQUxVRV9NQVNLKQotCi0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0NAotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfT0ZGU0VUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDQKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX0hDSV9VQVJUX01TQiAgICAgICAgICAgICAyMQotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfSENJX1VBUlRfTFNCICAgICAgICAgICAgIDIxCi0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19IQ0lfVUFSVF9NQVNLICAgICAgICAgICAgMHgwMDIwMDAwMAotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfSENJX1VBUlRfR0VUKHgpICAgICAgICAgICgoKHgpICYgV0xBTl9JTlRfU1RBVFVTX0hDSV9VQVJUX01BU0spID4+IFdMQU5fSU5UX1NUQVRVU19IQ0lfVUFSVF9MU0IpCi0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19IQ0lfVUFSVF9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgV0xBTl9JTlRfU1RBVFVTX0hDSV9VQVJUX0xTQikgJiBXTEFOX0lOVF9TVEFUVVNfSENJX1VBUlRfTUFTSykKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX1RIRVJNX01TQiAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfVEhFUk1fTFNCICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19USEVSTV9NQVNLICAgICAgICAgICAgICAgMHgwMDEwMDAwMAotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfVEhFUk1fR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgV0xBTl9JTlRfU1RBVFVTX1RIRVJNX01BU0spID4+IFdMQU5fSU5UX1NUQVRVU19USEVSTV9MU0IpCi0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19USEVSTV9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9JTlRfU1RBVFVTX1RIRVJNX0xTQikgJiBXTEFOX0lOVF9TVEFUVVNfVEhFUk1fTUFTSykKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX0VGVVNFX09WRVJXUklURV9NU0IgICAgICAxOQotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfRUZVU0VfT1ZFUldSSVRFX0xTQiAgICAgIDE5Ci0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19FRlVTRV9PVkVSV1JJVEVfTUFTSyAgICAgMHgwMDA4MDAwMAotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfRUZVU0VfT1ZFUldSSVRFX0dFVCh4KSAgICgoKHgpICYgV0xBTl9JTlRfU1RBVFVTX0VGVVNFX09WRVJXUklURV9NQVNLKSA+PiBXTEFOX0lOVF9TVEFUVVNfRUZVU0VfT1ZFUldSSVRFX0xTQikKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX0VGVVNFX09WRVJXUklURV9TRVQoeCkgICAoKCh4KSA8PCBXTEFOX0lOVF9TVEFUVVNfRUZVU0VfT1ZFUldSSVRFX0xTQikgJiBXTEFOX0lOVF9TVEFUVVNfRUZVU0VfT1ZFUldSSVRFX01BU0spCi0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19VQVJUX01CT1hfTVNCICAgICAgICAgICAgMTgKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX1VBUlRfTUJPWF9MU0IgICAgICAgICAgICAxOAotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfVUFSVF9NQk9YX01BU0sgICAgICAgICAgIDB4MDAwNDAwMDAKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX1VBUlRfTUJPWF9HRVQoeCkgICAgICAgICAoKCh4KSAmIFdMQU5fSU5UX1NUQVRVU19VQVJUX01CT1hfTUFTSykgPj4gV0xBTl9JTlRfU1RBVFVTX1VBUlRfTUJPWF9MU0IpCi0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19VQVJUX01CT1hfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgV0xBTl9JTlRfU1RBVFVTX1VBUlRfTUJPWF9MU0IpICYgV0xBTl9JTlRfU1RBVFVTX1VBUlRfTUJPWF9NQVNLKQotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfR0VORVJJQ19NQk9YX01TQiAgICAgICAgIDE3Ci0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19HRU5FUklDX01CT1hfTFNCICAgICAgICAgMTcKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX0dFTkVSSUNfTUJPWF9NQVNLICAgICAgICAweDAwMDIwMDAwCi0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19HRU5FUklDX01CT1hfR0VUKHgpICAgICAgKCgoeCkgJiBXTEFOX0lOVF9TVEFUVVNfR0VORVJJQ19NQk9YX01BU0spID4+IFdMQU5fSU5UX1NUQVRVU19HRU5FUklDX01CT1hfTFNCKQotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfR0VORVJJQ19NQk9YX1NFVCh4KSAgICAgICgoKHgpIDw8IFdMQU5fSU5UX1NUQVRVU19HRU5FUklDX01CT1hfTFNCKSAmIFdMQU5fSU5UX1NUQVRVU19HRU5FUklDX01CT1hfTUFTSykKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX1JETUFfTVNCICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfUkRNQV9MU0IgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19SRE1BX01BU0sgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfUkRNQV9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgV0xBTl9JTlRfU1RBVFVTX1JETUFfTUFTSykgPj4gV0xBTl9JTlRfU1RBVFVTX1JETUFfTFNCKQotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfUkRNQV9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fSU5UX1NUQVRVU19SRE1BX0xTQikgJiBXTEFOX0lOVF9TVEFUVVNfUkRNQV9NQVNLKQotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfQlRDT0VYX01TQiAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19CVENPRVhfTFNCICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX0JUQ09FWF9NQVNLICAgICAgICAgICAgICAweDAwMDA4MDAwCi0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19CVENPRVhfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBXTEFOX0lOVF9TVEFUVVNfQlRDT0VYX01BU0spID4+IFdMQU5fSU5UX1NUQVRVU19CVENPRVhfTFNCKQotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfQlRDT0VYX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fSU5UX1NUQVRVU19CVENPRVhfTFNCKSAmIFdMQU5fSU5UX1NUQVRVU19CVENPRVhfTUFTSykKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX1JUQ19QT1dFUl9NU0IgICAgICAgICAgICAxNAotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfUlRDX1BPV0VSX0xTQiAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19SVENfUE9XRVJfTUFTSyAgICAgICAgICAgMHgwMDAwNDAwMAotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfUlRDX1BPV0VSX0dFVCh4KSAgICAgICAgICgoKHgpICYgV0xBTl9JTlRfU1RBVFVTX1JUQ19QT1dFUl9NQVNLKSA+PiBXTEFOX0lOVF9TVEFUVVNfUlRDX1BPV0VSX0xTQikKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX1JUQ19QT1dFUl9TRVQoeCkgICAgICAgICAoKCh4KSA8PCBXTEFOX0lOVF9TVEFUVVNfUlRDX1BPV0VSX0xTQikgJiBXTEFOX0lOVF9TVEFUVVNfUlRDX1BPV0VSX01BU0spCi0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19NQUNfTVNCICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX01BQ19MU0IgICAgICAgICAgICAgICAgICAxMwotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfTUFDX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX01BQ19HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIFdMQU5fSU5UX1NUQVRVU19NQUNfTUFTSykgPj4gV0xBTl9JTlRfU1RBVFVTX01BQ19MU0IpCi0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19NQUNfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9JTlRfU1RBVFVTX01BQ19MU0IpICYgV0xBTl9JTlRfU1RBVFVTX01BQ19NQVNLKQotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfTUFJTEJPWF9NU0IgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19NQUlMQk9YX0xTQiAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX01BSUxCT1hfTUFTSyAgICAgICAgICAgICAweDAwMDAxMDAwCi0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19NQUlMQk9YX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBXTEFOX0lOVF9TVEFUVVNfTUFJTEJPWF9NQVNLKSA+PiBXTEFOX0lOVF9TVEFUVVNfTUFJTEJPWF9MU0IpCi0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19NQUlMQk9YX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9JTlRfU1RBVFVTX01BSUxCT1hfTFNCKSAmIFdMQU5fSU5UX1NUQVRVU19NQUlMQk9YX01BU0spCi0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19SVENfQUxBUk1fTVNCICAgICAgICAgICAgMTEKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX1JUQ19BTEFSTV9MU0IgICAgICAgICAgICAxMQotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfUlRDX0FMQVJNX01BU0sgICAgICAgICAgIDB4MDAwMDA4MDAKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX1JUQ19BTEFSTV9HRVQoeCkgICAgICAgICAoKCh4KSAmIFdMQU5fSU5UX1NUQVRVU19SVENfQUxBUk1fTUFTSykgPj4gV0xBTl9JTlRfU1RBVFVTX1JUQ19BTEFSTV9MU0IpCi0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19SVENfQUxBUk1fU0VUKHgpICAgICAgICAgKCgoeCkgPDwgV0xBTl9JTlRfU1RBVFVTX1JUQ19BTEFSTV9MU0IpICYgV0xBTl9JTlRfU1RBVFVTX1JUQ19BTEFSTV9NQVNLKQotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfSEZfVElNRVJfTVNCICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19IRl9USU1FUl9MU0IgICAgICAgICAgICAgMTAKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX0hGX1RJTUVSX01BU0sgICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19IRl9USU1FUl9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBXTEFOX0lOVF9TVEFUVVNfSEZfVElNRVJfTUFTSykgPj4gV0xBTl9JTlRfU1RBVFVTX0hGX1RJTUVSX0xTQikKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX0hGX1RJTUVSX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBXTEFOX0lOVF9TVEFUVVNfSEZfVElNRVJfTFNCKSAmIFdMQU5fSU5UX1NUQVRVU19IRl9USU1FUl9NQVNLKQotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfTEZfVElNRVIzX01TQiAgICAgICAgICAgIDkKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX0xGX1RJTUVSM19MU0IgICAgICAgICAgICA5Ci0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19MRl9USU1FUjNfTUFTSyAgICAgICAgICAgMHgwMDAwMDIwMAotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfTEZfVElNRVIzX0dFVCh4KSAgICAgICAgICgoKHgpICYgV0xBTl9JTlRfU1RBVFVTX0xGX1RJTUVSM19NQVNLKSA+PiBXTEFOX0lOVF9TVEFUVVNfTEZfVElNRVIzX0xTQikKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX0xGX1RJTUVSM19TRVQoeCkgICAgICAgICAoKCh4KSA8PCBXTEFOX0lOVF9TVEFUVVNfTEZfVElNRVIzX0xTQikgJiBXTEFOX0lOVF9TVEFUVVNfTEZfVElNRVIzX01BU0spCi0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19MRl9USU1FUjJfTVNCICAgICAgICAgICAgOAotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfTEZfVElNRVIyX0xTQiAgICAgICAgICAgIDgKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX0xGX1RJTUVSMl9NQVNLICAgICAgICAgICAweDAwMDAwMTAwCi0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19MRl9USU1FUjJfR0VUKHgpICAgICAgICAgKCgoeCkgJiBXTEFOX0lOVF9TVEFUVVNfTEZfVElNRVIyX01BU0spID4+IFdMQU5fSU5UX1NUQVRVU19MRl9USU1FUjJfTFNCKQotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfTEZfVElNRVIyX1NFVCh4KSAgICAgICAgICgoKHgpIDw8IFdMQU5fSU5UX1NUQVRVU19MRl9USU1FUjJfTFNCKSAmIFdMQU5fSU5UX1NUQVRVU19MRl9USU1FUjJfTUFTSykKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX0xGX1RJTUVSMV9NU0IgICAgICAgICAgICA3Ci0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19MRl9USU1FUjFfTFNCICAgICAgICAgICAgNwotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfTEZfVElNRVIxX01BU0sgICAgICAgICAgIDB4MDAwMDAwODAKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX0xGX1RJTUVSMV9HRVQoeCkgICAgICAgICAoKCh4KSAmIFdMQU5fSU5UX1NUQVRVU19MRl9USU1FUjFfTUFTSykgPj4gV0xBTl9JTlRfU1RBVFVTX0xGX1RJTUVSMV9MU0IpCi0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19MRl9USU1FUjFfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgV0xBTl9JTlRfU1RBVFVTX0xGX1RJTUVSMV9MU0IpICYgV0xBTl9JTlRfU1RBVFVTX0xGX1RJTUVSMV9NQVNLKQotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfTEZfVElNRVIwX01TQiAgICAgICAgICAgIDYKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX0xGX1RJTUVSMF9MU0IgICAgICAgICAgICA2Ci0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19MRl9USU1FUjBfTUFTSyAgICAgICAgICAgMHgwMDAwMDA0MAotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfTEZfVElNRVIwX0dFVCh4KSAgICAgICAgICgoKHgpICYgV0xBTl9JTlRfU1RBVFVTX0xGX1RJTUVSMF9NQVNLKSA+PiBXTEFOX0lOVF9TVEFUVVNfTEZfVElNRVIwX0xTQikKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX0xGX1RJTUVSMF9TRVQoeCkgICAgICAgICAoKCh4KSA8PCBXTEFOX0lOVF9TVEFUVVNfTEZfVElNRVIwX0xTQikgJiBXTEFOX0lOVF9TVEFUVVNfTEZfVElNRVIwX01BU0spCi0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19LRVlQQURfTVNCICAgICAgICAgICAgICAgNQotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfS0VZUEFEX0xTQiAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX0tFWVBBRF9NQVNLICAgICAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19LRVlQQURfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBXTEFOX0lOVF9TVEFUVVNfS0VZUEFEX01BU0spID4+IFdMQU5fSU5UX1NUQVRVU19LRVlQQURfTFNCKQotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfS0VZUEFEX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fSU5UX1NUQVRVU19LRVlQQURfTFNCKSAmIFdMQU5fSU5UX1NUQVRVU19LRVlQQURfTUFTSykKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX1NJX01TQiAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19TSV9MU0IgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfU0lfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX1NJX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIFdMQU5fSU5UX1NUQVRVU19TSV9NQVNLKSA+PiBXTEFOX0lOVF9TVEFUVVNfU0lfTFNCKQotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfU0lfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fSU5UX1NUQVRVU19TSV9MU0IpICYgV0xBTl9JTlRfU1RBVFVTX1NJX01BU0spCi0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19HUElPX01TQiAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfR1BJT19MU0IgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX0dQSU9fTUFTSyAgICAgICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19HUElPX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiBXTEFOX0lOVF9TVEFUVVNfR1BJT19NQVNLKSA+PiBXTEFOX0lOVF9TVEFUVVNfR1BJT19MU0IpCi0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19HUElPX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9JTlRfU1RBVFVTX0dQSU9fTFNCKSAmIFdMQU5fSU5UX1NUQVRVU19HUElPX01BU0spCi0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19VQVJUX01TQiAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfVUFSVF9MU0IgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX1VBUlRfTUFTSyAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19VQVJUX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiBXTEFOX0lOVF9TVEFUVVNfVUFSVF9NQVNLKSA+PiBXTEFOX0lOVF9TVEFUVVNfVUFSVF9MU0IpCi0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19VQVJUX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9JTlRfU1RBVFVTX1VBUlRfTFNCKSAmIFdMQU5fSU5UX1NUQVRVU19VQVJUX01BU0spCi0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19FUlJPUl9NU0IgICAgICAgICAgICAgICAgMQotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfRVJST1JfTFNCICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX0VSUk9SX01BU0sgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19FUlJPUl9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBXTEFOX0lOVF9TVEFUVVNfRVJST1JfTUFTSykgPj4gV0xBTl9JTlRfU1RBVFVTX0VSUk9SX0xTQikKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX0VSUk9SX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBXTEFOX0lOVF9TVEFUVVNfRVJST1JfTFNCKSAmIFdMQU5fSU5UX1NUQVRVU19FUlJPUl9NQVNLKQotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfV0RUX0lOVF9NU0IgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9JTlRfU1RBVFVTX1dEVF9JTlRfTFNCICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fSU5UX1NUQVRVU19XRFRfSU5UX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfV0RUX0lOVF9HRVQoeCkgICAgICAgICAgICgoKHgpICYgV0xBTl9JTlRfU1RBVFVTX1dEVF9JTlRfTUFTSykgPj4gV0xBTl9JTlRfU1RBVFVTX1dEVF9JTlRfTFNCKQotI2RlZmluZSBXTEFOX0lOVF9TVEFUVVNfV0RUX0lOVF9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFdMQU5fSU5UX1NUQVRVU19XRFRfSU5UX0xTQikgJiBXTEFOX0lOVF9TVEFUVVNfV0RUX0lOVF9NQVNLKQotCi0jZGVmaW5lIFdMQU5fTEZfVElNRVIwX0FERFJFU1MgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0OAotI2RlZmluZSBXTEFOX0xGX1RJTUVSMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDgKLSNkZWZpbmUgV0xBTl9MRl9USU1FUjBfVEFSR0VUX01TQiAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBXTEFOX0xGX1RJTUVSMF9UQVJHRVRfTFNCICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9MRl9USU1FUjBfVEFSR0VUX01BU0sgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFdMQU5fTEZfVElNRVIwX1RBUkdFVF9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBXTEFOX0xGX1RJTUVSMF9UQVJHRVRfTUFTSykgPj4gV0xBTl9MRl9USU1FUjBfVEFSR0VUX0xTQikKLSNkZWZpbmUgV0xBTl9MRl9USU1FUjBfVEFSR0VUX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBXTEFOX0xGX1RJTUVSMF9UQVJHRVRfTFNCKSAmIFdMQU5fTEZfVElNRVIwX1RBUkdFVF9NQVNLKQotCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09VTlQwX0FERFJFU1MgICAgICAgICAgICAgMHgwMDAwMDA0YwotI2RlZmluZSBXTEFOX0xGX1RJTUVSX0NPVU5UMF9PRkZTRVQgICAgICAgICAgICAgIDB4MDAwMDAwNGMKLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9DT1VOVDBfVkFMVUVfTVNCICAgICAgICAgICAzMQotI2RlZmluZSBXTEFOX0xGX1RJTUVSX0NPVU5UMF9WQUxVRV9MU0IgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9DT1VOVDBfVkFMVUVfTUFTSyAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09VTlQwX1ZBTFVFX0dFVCh4KSAgICAgICAgKCgoeCkgJiBXTEFOX0xGX1RJTUVSX0NPVU5UMF9WQUxVRV9NQVNLKSA+PiBXTEFOX0xGX1RJTUVSX0NPVU5UMF9WQUxVRV9MU0IpCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09VTlQwX1ZBTFVFX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgV0xBTl9MRl9USU1FUl9DT1VOVDBfVkFMVUVfTFNCKSAmIFdMQU5fTEZfVElNRVJfQ09VTlQwX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9DT05UUk9MMF9BRERSRVNTICAgICAgICAgICAweDAwMDAwMDUwCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09OVFJPTDBfT0ZGU0VUICAgICAgICAgICAgMHgwMDAwMDA1MAotI2RlZmluZSBXTEFOX0xGX1RJTUVSX0NPTlRST0wwX0VOQUJMRV9NU0IgICAgICAgIDIKLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9DT05UUk9MMF9FTkFCTEVfTFNCICAgICAgICAyCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09OVFJPTDBfRU5BQkxFX01BU0sgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBXTEFOX0xGX1RJTUVSX0NPTlRST0wwX0VOQUJMRV9HRVQoeCkgICAgICgoKHgpICYgV0xBTl9MRl9USU1FUl9DT05UUk9MMF9FTkFCTEVfTUFTSykgPj4gV0xBTl9MRl9USU1FUl9DT05UUk9MMF9FTkFCTEVfTFNCKQotI2RlZmluZSBXTEFOX0xGX1RJTUVSX0NPTlRST0wwX0VOQUJMRV9TRVQoeCkgICAgICgoKHgpIDw8IFdMQU5fTEZfVElNRVJfQ09OVFJPTDBfRU5BQkxFX0xTQikgJiBXTEFOX0xGX1RJTUVSX0NPTlRST0wwX0VOQUJMRV9NQVNLKQotI2RlZmluZSBXTEFOX0xGX1RJTUVSX0NPTlRST0wwX0FVVE9fUkVTVEFSVF9NU0IgIDEKLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9DT05UUk9MMF9BVVRPX1JFU1RBUlRfTFNCICAxCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09OVFJPTDBfQVVUT19SRVNUQVJUX01BU0sgMHgwMDAwMDAwMgotI2RlZmluZSBXTEFOX0xGX1RJTUVSX0NPTlRST0wwX0FVVE9fUkVTVEFSVF9HRVQoeCkgKCgoeCkgJiBXTEFOX0xGX1RJTUVSX0NPTlRST0wwX0FVVE9fUkVTVEFSVF9NQVNLKSA+PiBXTEFOX0xGX1RJTUVSX0NPTlRST0wwX0FVVE9fUkVTVEFSVF9MU0IpCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09OVFJPTDBfQVVUT19SRVNUQVJUX1NFVCh4KSAoKCh4KSA8PCBXTEFOX0xGX1RJTUVSX0NPTlRST0wwX0FVVE9fUkVTVEFSVF9MU0IpICYgV0xBTl9MRl9USU1FUl9DT05UUk9MMF9BVVRPX1JFU1RBUlRfTUFTSykKLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9DT05UUk9MMF9SRVNFVF9NU0IgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09OVFJPTDBfUkVTRVRfTFNCICAgICAgICAgMAotI2RlZmluZSBXTEFOX0xGX1RJTUVSX0NPTlRST0wwX1JFU0VUX01BU0sgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9DT05UUk9MMF9SRVNFVF9HRVQoeCkgICAgICAoKCh4KSAmIFdMQU5fTEZfVElNRVJfQ09OVFJPTDBfUkVTRVRfTUFTSykgPj4gV0xBTl9MRl9USU1FUl9DT05UUk9MMF9SRVNFVF9MU0IpCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09OVFJPTDBfUkVTRVRfU0VUKHgpICAgICAgKCgoeCkgPDwgV0xBTl9MRl9USU1FUl9DT05UUk9MMF9SRVNFVF9MU0IpICYgV0xBTl9MRl9USU1FUl9DT05UUk9MMF9SRVNFVF9NQVNLKQotCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfU1RBVFVTMF9BRERSRVNTICAgICAgICAgICAgMHgwMDAwMDA1NAotI2RlZmluZSBXTEFOX0xGX1RJTUVSX1NUQVRVUzBfT0ZGU0VUICAgICAgICAgICAgIDB4MDAwMDAwNTQKLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9TVEFUVVMwX0lOVEVSUlVQVF9NU0IgICAgICAwCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfU1RBVFVTMF9JTlRFUlJVUFRfTFNCICAgICAgMAotI2RlZmluZSBXTEFOX0xGX1RJTUVSX1NUQVRVUzBfSU5URVJSVVBUX01BU0sgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9TVEFUVVMwX0lOVEVSUlVQVF9HRVQoeCkgICAoKCh4KSAmIFdMQU5fTEZfVElNRVJfU1RBVFVTMF9JTlRFUlJVUFRfTUFTSykgPj4gV0xBTl9MRl9USU1FUl9TVEFUVVMwX0lOVEVSUlVQVF9MU0IpCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfU1RBVFVTMF9JTlRFUlJVUFRfU0VUKHgpICAgKCgoeCkgPDwgV0xBTl9MRl9USU1FUl9TVEFUVVMwX0lOVEVSUlVQVF9MU0IpICYgV0xBTl9MRl9USU1FUl9TVEFUVVMwX0lOVEVSUlVQVF9NQVNLKQotCi0jZGVmaW5lIFdMQU5fTEZfVElNRVIxX0FERFJFU1MgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1OAotI2RlZmluZSBXTEFOX0xGX1RJTUVSMV9PRkZTRVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTgKLSNkZWZpbmUgV0xBTl9MRl9USU1FUjFfVEFSR0VUX01TQiAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBXTEFOX0xGX1RJTUVSMV9UQVJHRVRfTFNCICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9MRl9USU1FUjFfVEFSR0VUX01BU0sgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFdMQU5fTEZfVElNRVIxX1RBUkdFVF9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBXTEFOX0xGX1RJTUVSMV9UQVJHRVRfTUFTSykgPj4gV0xBTl9MRl9USU1FUjFfVEFSR0VUX0xTQikKLSNkZWZpbmUgV0xBTl9MRl9USU1FUjFfVEFSR0VUX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBXTEFOX0xGX1RJTUVSMV9UQVJHRVRfTFNCKSAmIFdMQU5fTEZfVElNRVIxX1RBUkdFVF9NQVNLKQotCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09VTlQxX0FERFJFU1MgICAgICAgICAgICAgMHgwMDAwMDA1YwotI2RlZmluZSBXTEFOX0xGX1RJTUVSX0NPVU5UMV9PRkZTRVQgICAgICAgICAgICAgIDB4MDAwMDAwNWMKLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9DT1VOVDFfVkFMVUVfTVNCICAgICAgICAgICAzMQotI2RlZmluZSBXTEFOX0xGX1RJTUVSX0NPVU5UMV9WQUxVRV9MU0IgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9DT1VOVDFfVkFMVUVfTUFTSyAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09VTlQxX1ZBTFVFX0dFVCh4KSAgICAgICAgKCgoeCkgJiBXTEFOX0xGX1RJTUVSX0NPVU5UMV9WQUxVRV9NQVNLKSA+PiBXTEFOX0xGX1RJTUVSX0NPVU5UMV9WQUxVRV9MU0IpCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09VTlQxX1ZBTFVFX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgV0xBTl9MRl9USU1FUl9DT1VOVDFfVkFMVUVfTFNCKSAmIFdMQU5fTEZfVElNRVJfQ09VTlQxX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9DT05UUk9MMV9BRERSRVNTICAgICAgICAgICAweDAwMDAwMDYwCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09OVFJPTDFfT0ZGU0VUICAgICAgICAgICAgMHgwMDAwMDA2MAotI2RlZmluZSBXTEFOX0xGX1RJTUVSX0NPTlRST0wxX0VOQUJMRV9NU0IgICAgICAgIDIKLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9DT05UUk9MMV9FTkFCTEVfTFNCICAgICAgICAyCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09OVFJPTDFfRU5BQkxFX01BU0sgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBXTEFOX0xGX1RJTUVSX0NPTlRST0wxX0VOQUJMRV9HRVQoeCkgICAgICgoKHgpICYgV0xBTl9MRl9USU1FUl9DT05UUk9MMV9FTkFCTEVfTUFTSykgPj4gV0xBTl9MRl9USU1FUl9DT05UUk9MMV9FTkFCTEVfTFNCKQotI2RlZmluZSBXTEFOX0xGX1RJTUVSX0NPTlRST0wxX0VOQUJMRV9TRVQoeCkgICAgICgoKHgpIDw8IFdMQU5fTEZfVElNRVJfQ09OVFJPTDFfRU5BQkxFX0xTQikgJiBXTEFOX0xGX1RJTUVSX0NPTlRST0wxX0VOQUJMRV9NQVNLKQotI2RlZmluZSBXTEFOX0xGX1RJTUVSX0NPTlRST0wxX0FVVE9fUkVTVEFSVF9NU0IgIDEKLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9DT05UUk9MMV9BVVRPX1JFU1RBUlRfTFNCICAxCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09OVFJPTDFfQVVUT19SRVNUQVJUX01BU0sgMHgwMDAwMDAwMgotI2RlZmluZSBXTEFOX0xGX1RJTUVSX0NPTlRST0wxX0FVVE9fUkVTVEFSVF9HRVQoeCkgKCgoeCkgJiBXTEFOX0xGX1RJTUVSX0NPTlRST0wxX0FVVE9fUkVTVEFSVF9NQVNLKSA+PiBXTEFOX0xGX1RJTUVSX0NPTlRST0wxX0FVVE9fUkVTVEFSVF9MU0IpCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09OVFJPTDFfQVVUT19SRVNUQVJUX1NFVCh4KSAoKCh4KSA8PCBXTEFOX0xGX1RJTUVSX0NPTlRST0wxX0FVVE9fUkVTVEFSVF9MU0IpICYgV0xBTl9MRl9USU1FUl9DT05UUk9MMV9BVVRPX1JFU1RBUlRfTUFTSykKLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9DT05UUk9MMV9SRVNFVF9NU0IgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09OVFJPTDFfUkVTRVRfTFNCICAgICAgICAgMAotI2RlZmluZSBXTEFOX0xGX1RJTUVSX0NPTlRST0wxX1JFU0VUX01BU0sgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9DT05UUk9MMV9SRVNFVF9HRVQoeCkgICAgICAoKCh4KSAmIFdMQU5fTEZfVElNRVJfQ09OVFJPTDFfUkVTRVRfTUFTSykgPj4gV0xBTl9MRl9USU1FUl9DT05UUk9MMV9SRVNFVF9MU0IpCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09OVFJPTDFfUkVTRVRfU0VUKHgpICAgICAgKCgoeCkgPDwgV0xBTl9MRl9USU1FUl9DT05UUk9MMV9SRVNFVF9MU0IpICYgV0xBTl9MRl9USU1FUl9DT05UUk9MMV9SRVNFVF9NQVNLKQotCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfU1RBVFVTMV9BRERSRVNTICAgICAgICAgICAgMHgwMDAwMDA2NAotI2RlZmluZSBXTEFOX0xGX1RJTUVSX1NUQVRVUzFfT0ZGU0VUICAgICAgICAgICAgIDB4MDAwMDAwNjQKLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9TVEFUVVMxX0lOVEVSUlVQVF9NU0IgICAgICAwCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfU1RBVFVTMV9JTlRFUlJVUFRfTFNCICAgICAgMAotI2RlZmluZSBXTEFOX0xGX1RJTUVSX1NUQVRVUzFfSU5URVJSVVBUX01BU0sgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9TVEFUVVMxX0lOVEVSUlVQVF9HRVQoeCkgICAoKCh4KSAmIFdMQU5fTEZfVElNRVJfU1RBVFVTMV9JTlRFUlJVUFRfTUFTSykgPj4gV0xBTl9MRl9USU1FUl9TVEFUVVMxX0lOVEVSUlVQVF9MU0IpCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfU1RBVFVTMV9JTlRFUlJVUFRfU0VUKHgpICAgKCgoeCkgPDwgV0xBTl9MRl9USU1FUl9TVEFUVVMxX0lOVEVSUlVQVF9MU0IpICYgV0xBTl9MRl9USU1FUl9TVEFUVVMxX0lOVEVSUlVQVF9NQVNLKQotCi0jZGVmaW5lIFdMQU5fTEZfVElNRVIyX0FERFJFU1MgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2OAotI2RlZmluZSBXTEFOX0xGX1RJTUVSMl9PRkZTRVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjgKLSNkZWZpbmUgV0xBTl9MRl9USU1FUjJfVEFSR0VUX01TQiAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBXTEFOX0xGX1RJTUVSMl9UQVJHRVRfTFNCICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9MRl9USU1FUjJfVEFSR0VUX01BU0sgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFdMQU5fTEZfVElNRVIyX1RBUkdFVF9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBXTEFOX0xGX1RJTUVSMl9UQVJHRVRfTUFTSykgPj4gV0xBTl9MRl9USU1FUjJfVEFSR0VUX0xTQikKLSNkZWZpbmUgV0xBTl9MRl9USU1FUjJfVEFSR0VUX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBXTEFOX0xGX1RJTUVSMl9UQVJHRVRfTFNCKSAmIFdMQU5fTEZfVElNRVIyX1RBUkdFVF9NQVNLKQotCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09VTlQyX0FERFJFU1MgICAgICAgICAgICAgMHgwMDAwMDA2YwotI2RlZmluZSBXTEFOX0xGX1RJTUVSX0NPVU5UMl9PRkZTRVQgICAgICAgICAgICAgIDB4MDAwMDAwNmMKLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9DT1VOVDJfVkFMVUVfTVNCICAgICAgICAgICAzMQotI2RlZmluZSBXTEFOX0xGX1RJTUVSX0NPVU5UMl9WQUxVRV9MU0IgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9DT1VOVDJfVkFMVUVfTUFTSyAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09VTlQyX1ZBTFVFX0dFVCh4KSAgICAgICAgKCgoeCkgJiBXTEFOX0xGX1RJTUVSX0NPVU5UMl9WQUxVRV9NQVNLKSA+PiBXTEFOX0xGX1RJTUVSX0NPVU5UMl9WQUxVRV9MU0IpCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09VTlQyX1ZBTFVFX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgV0xBTl9MRl9USU1FUl9DT1VOVDJfVkFMVUVfTFNCKSAmIFdMQU5fTEZfVElNRVJfQ09VTlQyX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9DT05UUk9MMl9BRERSRVNTICAgICAgICAgICAweDAwMDAwMDcwCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09OVFJPTDJfT0ZGU0VUICAgICAgICAgICAgMHgwMDAwMDA3MAotI2RlZmluZSBXTEFOX0xGX1RJTUVSX0NPTlRST0wyX0VOQUJMRV9NU0IgICAgICAgIDIKLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9DT05UUk9MMl9FTkFCTEVfTFNCICAgICAgICAyCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09OVFJPTDJfRU5BQkxFX01BU0sgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBXTEFOX0xGX1RJTUVSX0NPTlRST0wyX0VOQUJMRV9HRVQoeCkgICAgICgoKHgpICYgV0xBTl9MRl9USU1FUl9DT05UUk9MMl9FTkFCTEVfTUFTSykgPj4gV0xBTl9MRl9USU1FUl9DT05UUk9MMl9FTkFCTEVfTFNCKQotI2RlZmluZSBXTEFOX0xGX1RJTUVSX0NPTlRST0wyX0VOQUJMRV9TRVQoeCkgICAgICgoKHgpIDw8IFdMQU5fTEZfVElNRVJfQ09OVFJPTDJfRU5BQkxFX0xTQikgJiBXTEFOX0xGX1RJTUVSX0NPTlRST0wyX0VOQUJMRV9NQVNLKQotI2RlZmluZSBXTEFOX0xGX1RJTUVSX0NPTlRST0wyX0FVVE9fUkVTVEFSVF9NU0IgIDEKLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9DT05UUk9MMl9BVVRPX1JFU1RBUlRfTFNCICAxCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09OVFJPTDJfQVVUT19SRVNUQVJUX01BU0sgMHgwMDAwMDAwMgotI2RlZmluZSBXTEFOX0xGX1RJTUVSX0NPTlRST0wyX0FVVE9fUkVTVEFSVF9HRVQoeCkgKCgoeCkgJiBXTEFOX0xGX1RJTUVSX0NPTlRST0wyX0FVVE9fUkVTVEFSVF9NQVNLKSA+PiBXTEFOX0xGX1RJTUVSX0NPTlRST0wyX0FVVE9fUkVTVEFSVF9MU0IpCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09OVFJPTDJfQVVUT19SRVNUQVJUX1NFVCh4KSAoKCh4KSA8PCBXTEFOX0xGX1RJTUVSX0NPTlRST0wyX0FVVE9fUkVTVEFSVF9MU0IpICYgV0xBTl9MRl9USU1FUl9DT05UUk9MMl9BVVRPX1JFU1RBUlRfTUFTSykKLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9DT05UUk9MMl9SRVNFVF9NU0IgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09OVFJPTDJfUkVTRVRfTFNCICAgICAgICAgMAotI2RlZmluZSBXTEFOX0xGX1RJTUVSX0NPTlRST0wyX1JFU0VUX01BU0sgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9DT05UUk9MMl9SRVNFVF9HRVQoeCkgICAgICAoKCh4KSAmIFdMQU5fTEZfVElNRVJfQ09OVFJPTDJfUkVTRVRfTUFTSykgPj4gV0xBTl9MRl9USU1FUl9DT05UUk9MMl9SRVNFVF9MU0IpCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09OVFJPTDJfUkVTRVRfU0VUKHgpICAgICAgKCgoeCkgPDwgV0xBTl9MRl9USU1FUl9DT05UUk9MMl9SRVNFVF9MU0IpICYgV0xBTl9MRl9USU1FUl9DT05UUk9MMl9SRVNFVF9NQVNLKQotCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfU1RBVFVTMl9BRERSRVNTICAgICAgICAgICAgMHgwMDAwMDA3NAotI2RlZmluZSBXTEFOX0xGX1RJTUVSX1NUQVRVUzJfT0ZGU0VUICAgICAgICAgICAgIDB4MDAwMDAwNzQKLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9TVEFUVVMyX0lOVEVSUlVQVF9NU0IgICAgICAwCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfU1RBVFVTMl9JTlRFUlJVUFRfTFNCICAgICAgMAotI2RlZmluZSBXTEFOX0xGX1RJTUVSX1NUQVRVUzJfSU5URVJSVVBUX01BU0sgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9TVEFUVVMyX0lOVEVSUlVQVF9HRVQoeCkgICAoKCh4KSAmIFdMQU5fTEZfVElNRVJfU1RBVFVTMl9JTlRFUlJVUFRfTUFTSykgPj4gV0xBTl9MRl9USU1FUl9TVEFUVVMyX0lOVEVSUlVQVF9MU0IpCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfU1RBVFVTMl9JTlRFUlJVUFRfU0VUKHgpICAgKCgoeCkgPDwgV0xBTl9MRl9USU1FUl9TVEFUVVMyX0lOVEVSUlVQVF9MU0IpICYgV0xBTl9MRl9USU1FUl9TVEFUVVMyX0lOVEVSUlVQVF9NQVNLKQotCi0jZGVmaW5lIFdMQU5fTEZfVElNRVIzX0FERFJFU1MgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3OAotI2RlZmluZSBXTEFOX0xGX1RJTUVSM19PRkZTRVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNzgKLSNkZWZpbmUgV0xBTl9MRl9USU1FUjNfVEFSR0VUX01TQiAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBXTEFOX0xGX1RJTUVSM19UQVJHRVRfTFNCICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9MRl9USU1FUjNfVEFSR0VUX01BU0sgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFdMQU5fTEZfVElNRVIzX1RBUkdFVF9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBXTEFOX0xGX1RJTUVSM19UQVJHRVRfTUFTSykgPj4gV0xBTl9MRl9USU1FUjNfVEFSR0VUX0xTQikKLSNkZWZpbmUgV0xBTl9MRl9USU1FUjNfVEFSR0VUX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBXTEFOX0xGX1RJTUVSM19UQVJHRVRfTFNCKSAmIFdMQU5fTEZfVElNRVIzX1RBUkdFVF9NQVNLKQotCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09VTlQzX0FERFJFU1MgICAgICAgICAgICAgMHgwMDAwMDA3YwotI2RlZmluZSBXTEFOX0xGX1RJTUVSX0NPVU5UM19PRkZTRVQgICAgICAgICAgICAgIDB4MDAwMDAwN2MKLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9DT1VOVDNfVkFMVUVfTVNCICAgICAgICAgICAzMQotI2RlZmluZSBXTEFOX0xGX1RJTUVSX0NPVU5UM19WQUxVRV9MU0IgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9DT1VOVDNfVkFMVUVfTUFTSyAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09VTlQzX1ZBTFVFX0dFVCh4KSAgICAgICAgKCgoeCkgJiBXTEFOX0xGX1RJTUVSX0NPVU5UM19WQUxVRV9NQVNLKSA+PiBXTEFOX0xGX1RJTUVSX0NPVU5UM19WQUxVRV9MU0IpCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09VTlQzX1ZBTFVFX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgV0xBTl9MRl9USU1FUl9DT1VOVDNfVkFMVUVfTFNCKSAmIFdMQU5fTEZfVElNRVJfQ09VTlQzX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9DT05UUk9MM19BRERSRVNTICAgICAgICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09OVFJPTDNfT0ZGU0VUICAgICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBXTEFOX0xGX1RJTUVSX0NPTlRST0wzX0VOQUJMRV9NU0IgICAgICAgIDIKLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9DT05UUk9MM19FTkFCTEVfTFNCICAgICAgICAyCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09OVFJPTDNfRU5BQkxFX01BU0sgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBXTEFOX0xGX1RJTUVSX0NPTlRST0wzX0VOQUJMRV9HRVQoeCkgICAgICgoKHgpICYgV0xBTl9MRl9USU1FUl9DT05UUk9MM19FTkFCTEVfTUFTSykgPj4gV0xBTl9MRl9USU1FUl9DT05UUk9MM19FTkFCTEVfTFNCKQotI2RlZmluZSBXTEFOX0xGX1RJTUVSX0NPTlRST0wzX0VOQUJMRV9TRVQoeCkgICAgICgoKHgpIDw8IFdMQU5fTEZfVElNRVJfQ09OVFJPTDNfRU5BQkxFX0xTQikgJiBXTEFOX0xGX1RJTUVSX0NPTlRST0wzX0VOQUJMRV9NQVNLKQotI2RlZmluZSBXTEFOX0xGX1RJTUVSX0NPTlRST0wzX0FVVE9fUkVTVEFSVF9NU0IgIDEKLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9DT05UUk9MM19BVVRPX1JFU1RBUlRfTFNCICAxCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09OVFJPTDNfQVVUT19SRVNUQVJUX01BU0sgMHgwMDAwMDAwMgotI2RlZmluZSBXTEFOX0xGX1RJTUVSX0NPTlRST0wzX0FVVE9fUkVTVEFSVF9HRVQoeCkgKCgoeCkgJiBXTEFOX0xGX1RJTUVSX0NPTlRST0wzX0FVVE9fUkVTVEFSVF9NQVNLKSA+PiBXTEFOX0xGX1RJTUVSX0NPTlRST0wzX0FVVE9fUkVTVEFSVF9MU0IpCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09OVFJPTDNfQVVUT19SRVNUQVJUX1NFVCh4KSAoKCh4KSA8PCBXTEFOX0xGX1RJTUVSX0NPTlRST0wzX0FVVE9fUkVTVEFSVF9MU0IpICYgV0xBTl9MRl9USU1FUl9DT05UUk9MM19BVVRPX1JFU1RBUlRfTUFTSykKLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9DT05UUk9MM19SRVNFVF9NU0IgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09OVFJPTDNfUkVTRVRfTFNCICAgICAgICAgMAotI2RlZmluZSBXTEFOX0xGX1RJTUVSX0NPTlRST0wzX1JFU0VUX01BU0sgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9DT05UUk9MM19SRVNFVF9HRVQoeCkgICAgICAoKCh4KSAmIFdMQU5fTEZfVElNRVJfQ09OVFJPTDNfUkVTRVRfTUFTSykgPj4gV0xBTl9MRl9USU1FUl9DT05UUk9MM19SRVNFVF9MU0IpCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfQ09OVFJPTDNfUkVTRVRfU0VUKHgpICAgICAgKCgoeCkgPDwgV0xBTl9MRl9USU1FUl9DT05UUk9MM19SRVNFVF9MU0IpICYgV0xBTl9MRl9USU1FUl9DT05UUk9MM19SRVNFVF9NQVNLKQotCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfU1RBVFVTM19BRERSRVNTICAgICAgICAgICAgMHgwMDAwMDA4NAotI2RlZmluZSBXTEFOX0xGX1RJTUVSX1NUQVRVUzNfT0ZGU0VUICAgICAgICAgICAgIDB4MDAwMDAwODQKLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9TVEFUVVMzX0lOVEVSUlVQVF9NU0IgICAgICAwCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfU1RBVFVTM19JTlRFUlJVUFRfTFNCICAgICAgMAotI2RlZmluZSBXTEFOX0xGX1RJTUVSX1NUQVRVUzNfSU5URVJSVVBUX01BU0sgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgV0xBTl9MRl9USU1FUl9TVEFUVVMzX0lOVEVSUlVQVF9HRVQoeCkgICAoKCh4KSAmIFdMQU5fTEZfVElNRVJfU1RBVFVTM19JTlRFUlJVUFRfTUFTSykgPj4gV0xBTl9MRl9USU1FUl9TVEFUVVMzX0lOVEVSUlVQVF9MU0IpCi0jZGVmaW5lIFdMQU5fTEZfVElNRVJfU1RBVFVTM19JTlRFUlJVUFRfU0VUKHgpICAgKCgoeCkgPDwgV0xBTl9MRl9USU1FUl9TVEFUVVMzX0lOVEVSUlVQVF9MU0IpICYgV0xBTl9MRl9USU1FUl9TVEFUVVMzX0lOVEVSUlVQVF9NQVNLKQotCi0jZGVmaW5lIFdMQU5fSEZfVElNRVJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4OAotI2RlZmluZSBXTEFOX0hGX1RJTUVSX09GRlNFVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODgKLSNkZWZpbmUgV0xBTl9IRl9USU1FUl9UQVJHRVRfTVNCICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBXTEFOX0hGX1RJTUVSX1RBUkdFVF9MU0IgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFdMQU5fSEZfVElNRVJfVEFSR0VUX01BU0sgICAgICAgICAgICAgICAgMHhmZmZmZjAwMAotI2RlZmluZSBXTEFOX0hGX1RJTUVSX1RBUkdFVF9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgV0xBTl9IRl9USU1FUl9UQVJHRVRfTUFTSykgPj4gV0xBTl9IRl9USU1FUl9UQVJHRVRfTFNCKQotI2RlZmluZSBXTEFOX0hGX1RJTUVSX1RBUkdFVF9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fSEZfVElNRVJfVEFSR0VUX0xTQikgJiBXTEFOX0hGX1RJTUVSX1RBUkdFVF9NQVNLKQotCi0jZGVmaW5lIFdMQU5fSEZfVElNRVJfQ09VTlRfQUREUkVTUyAgICAgICAgICAgICAgMHgwMDAwMDA4YwotI2RlZmluZSBXTEFOX0hGX1RJTUVSX0NPVU5UX09GRlNFVCAgICAgICAgICAgICAgIDB4MDAwMDAwOGMKLSNkZWZpbmUgV0xBTl9IRl9USU1FUl9DT1VOVF9WQUxVRV9NU0IgICAgICAgICAgICAzMQotI2RlZmluZSBXTEFOX0hGX1RJTUVSX0NPVU5UX1ZBTFVFX0xTQiAgICAgICAgICAgIDEyCi0jZGVmaW5lIFdMQU5fSEZfVElNRVJfQ09VTlRfVkFMVUVfTUFTSyAgICAgICAgICAgMHhmZmZmZjAwMAotI2RlZmluZSBXTEFOX0hGX1RJTUVSX0NPVU5UX1ZBTFVFX0dFVCh4KSAgICAgICAgICgoKHgpICYgV0xBTl9IRl9USU1FUl9DT1VOVF9WQUxVRV9NQVNLKSA+PiBXTEFOX0hGX1RJTUVSX0NPVU5UX1ZBTFVFX0xTQikKLSNkZWZpbmUgV0xBTl9IRl9USU1FUl9DT1VOVF9WQUxVRV9TRVQoeCkgICAgICAgICAoKCh4KSA8PCBXTEFOX0hGX1RJTUVSX0NPVU5UX1ZBTFVFX0xTQikgJiBXTEFOX0hGX1RJTUVSX0NPVU5UX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgV0xBTl9IRl9MRl9DT1VOVF9BRERSRVNTICAgICAgICAgICAgICAgICAweDAwMDAwMDkwCi0jZGVmaW5lIFdMQU5fSEZfTEZfQ09VTlRfT0ZGU0VUICAgICAgICAgICAgICAgICAgMHgwMDAwMDA5MAotI2RlZmluZSBXTEFOX0hGX0xGX0NPVU5UX1ZBTFVFX01TQiAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFdMQU5fSEZfTEZfQ09VTlRfVkFMVUVfTFNCICAgICAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX0hGX0xGX0NPVU5UX1ZBTFVFX01BU0sgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgV0xBTl9IRl9MRl9DT1VOVF9WQUxVRV9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFdMQU5fSEZfTEZfQ09VTlRfVkFMVUVfTUFTSykgPj4gV0xBTl9IRl9MRl9DT1VOVF9WQUxVRV9MU0IpCi0jZGVmaW5lIFdMQU5fSEZfTEZfQ09VTlRfVkFMVUVfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9IRl9MRl9DT1VOVF9WQUxVRV9MU0IpICYgV0xBTl9IRl9MRl9DT1VOVF9WQUxVRV9NQVNLKQotCi0jZGVmaW5lIFdMQU5fSEZfVElNRVJfQ09OVFJPTF9BRERSRVNTICAgICAgICAgICAgMHgwMDAwMDA5NAotI2RlZmluZSBXTEFOX0hGX1RJTUVSX0NPTlRST0xfT0ZGU0VUICAgICAgICAgICAgIDB4MDAwMDAwOTQKLSNkZWZpbmUgV0xBTl9IRl9USU1FUl9DT05UUk9MX0VOQUJMRV9NU0IgICAgICAgICAzCi0jZGVmaW5lIFdMQU5fSEZfVElNRVJfQ09OVFJPTF9FTkFCTEVfTFNCICAgICAgICAgMwotI2RlZmluZSBXTEFOX0hGX1RJTUVSX0NPTlRST0xfRU5BQkxFX01BU0sgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgV0xBTl9IRl9USU1FUl9DT05UUk9MX0VOQUJMRV9HRVQoeCkgICAgICAoKCh4KSAmIFdMQU5fSEZfVElNRVJfQ09OVFJPTF9FTkFCTEVfTUFTSykgPj4gV0xBTl9IRl9USU1FUl9DT05UUk9MX0VOQUJMRV9MU0IpCi0jZGVmaW5lIFdMQU5fSEZfVElNRVJfQ09OVFJPTF9FTkFCTEVfU0VUKHgpICAgICAgKCgoeCkgPDwgV0xBTl9IRl9USU1FUl9DT05UUk9MX0VOQUJMRV9MU0IpICYgV0xBTl9IRl9USU1FUl9DT05UUk9MX0VOQUJMRV9NQVNLKQotI2RlZmluZSBXTEFOX0hGX1RJTUVSX0NPTlRST0xfT05fTVNCICAgICAgICAgICAgIDIKLSNkZWZpbmUgV0xBTl9IRl9USU1FUl9DT05UUk9MX09OX0xTQiAgICAgICAgICAgICAyCi0jZGVmaW5lIFdMQU5fSEZfVElNRVJfQ09OVFJPTF9PTl9NQVNLICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBXTEFOX0hGX1RJTUVSX0NPTlRST0xfT05fR0VUKHgpICAgICAgICAgICgoKHgpICYgV0xBTl9IRl9USU1FUl9DT05UUk9MX09OX01BU0spID4+IFdMQU5fSEZfVElNRVJfQ09OVFJPTF9PTl9MU0IpCi0jZGVmaW5lIFdMQU5fSEZfVElNRVJfQ09OVFJPTF9PTl9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgV0xBTl9IRl9USU1FUl9DT05UUk9MX09OX0xTQikgJiBXTEFOX0hGX1RJTUVSX0NPTlRST0xfT05fTUFTSykKLSNkZWZpbmUgV0xBTl9IRl9USU1FUl9DT05UUk9MX0FVVE9fUkVTVEFSVF9NU0IgICAxCi0jZGVmaW5lIFdMQU5fSEZfVElNRVJfQ09OVFJPTF9BVVRPX1JFU1RBUlRfTFNCICAgMQotI2RlZmluZSBXTEFOX0hGX1RJTUVSX0NPTlRST0xfQVVUT19SRVNUQVJUX01BU0sgIDB4MDAwMDAwMDIKLSNkZWZpbmUgV0xBTl9IRl9USU1FUl9DT05UUk9MX0FVVE9fUkVTVEFSVF9HRVQoeCkgKCgoeCkgJiBXTEFOX0hGX1RJTUVSX0NPTlRST0xfQVVUT19SRVNUQVJUX01BU0spID4+IFdMQU5fSEZfVElNRVJfQ09OVFJPTF9BVVRPX1JFU1RBUlRfTFNCKQotI2RlZmluZSBXTEFOX0hGX1RJTUVSX0NPTlRST0xfQVVUT19SRVNUQVJUX1NFVCh4KSAoKCh4KSA8PCBXTEFOX0hGX1RJTUVSX0NPTlRST0xfQVVUT19SRVNUQVJUX0xTQikgJiBXTEFOX0hGX1RJTUVSX0NPTlRST0xfQVVUT19SRVNUQVJUX01BU0spCi0jZGVmaW5lIFdMQU5fSEZfVElNRVJfQ09OVFJPTF9SRVNFVF9NU0IgICAgICAgICAgMAotI2RlZmluZSBXTEFOX0hGX1RJTUVSX0NPTlRST0xfUkVTRVRfTFNCICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9IRl9USU1FUl9DT05UUk9MX1JFU0VUX01BU0sgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFdMQU5fSEZfVElNRVJfQ09OVFJPTF9SRVNFVF9HRVQoeCkgICAgICAgKCgoeCkgJiBXTEFOX0hGX1RJTUVSX0NPTlRST0xfUkVTRVRfTUFTSykgPj4gV0xBTl9IRl9USU1FUl9DT05UUk9MX1JFU0VUX0xTQikKLSNkZWZpbmUgV0xBTl9IRl9USU1FUl9DT05UUk9MX1JFU0VUX1NFVCh4KSAgICAgICAoKCh4KSA8PCBXTEFOX0hGX1RJTUVSX0NPTlRST0xfUkVTRVRfTFNCKSAmIFdMQU5fSEZfVElNRVJfQ09OVFJPTF9SRVNFVF9NQVNLKQotCi0jZGVmaW5lIFdMQU5fSEZfVElNRVJfU1RBVFVTX0FERFJFU1MgICAgICAgICAgICAgMHgwMDAwMDA5OAotI2RlZmluZSBXTEFOX0hGX1RJTUVSX1NUQVRVU19PRkZTRVQgICAgICAgICAgICAgIDB4MDAwMDAwOTgKLSNkZWZpbmUgV0xBTl9IRl9USU1FUl9TVEFUVVNfSU5URVJSVVBUX01TQiAgICAgICAwCi0jZGVmaW5lIFdMQU5fSEZfVElNRVJfU1RBVFVTX0lOVEVSUlVQVF9MU0IgICAgICAgMAotI2RlZmluZSBXTEFOX0hGX1RJTUVSX1NUQVRVU19JTlRFUlJVUFRfTUFTSyAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgV0xBTl9IRl9USU1FUl9TVEFUVVNfSU5URVJSVVBUX0dFVCh4KSAgICAoKCh4KSAmIFdMQU5fSEZfVElNRVJfU1RBVFVTX0lOVEVSUlVQVF9NQVNLKSA+PiBXTEFOX0hGX1RJTUVSX1NUQVRVU19JTlRFUlJVUFRfTFNCKQotI2RlZmluZSBXTEFOX0hGX1RJTUVSX1NUQVRVU19JTlRFUlJVUFRfU0VUKHgpICAgICgoKHgpIDw8IFdMQU5fSEZfVElNRVJfU1RBVFVTX0lOVEVSUlVQVF9MU0IpICYgV0xBTl9IRl9USU1FUl9TVEFUVVNfSU5URVJSVVBUX01BU0spCi0KLSNkZWZpbmUgV0xBTl9SVENfQ09OVFJPTF9BRERSRVNTICAgICAgICAgICAgICAgICAweDAwMDAwMDljCi0jZGVmaW5lIFdMQU5fUlRDX0NPTlRST0xfT0ZGU0VUICAgICAgICAgICAgICAgICAgMHgwMDAwMDA5YwotI2RlZmluZSBXTEFOX1JUQ19DT05UUk9MX0VOQUJMRV9NU0IgICAgICAgICAgICAgIDIKLSNkZWZpbmUgV0xBTl9SVENfQ09OVFJPTF9FTkFCTEVfTFNCICAgICAgICAgICAgICAyCi0jZGVmaW5lIFdMQU5fUlRDX0NPTlRST0xfRU5BQkxFX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBXTEFOX1JUQ19DT05UUk9MX0VOQUJMRV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgV0xBTl9SVENfQ09OVFJPTF9FTkFCTEVfTUFTSykgPj4gV0xBTl9SVENfQ09OVFJPTF9FTkFCTEVfTFNCKQotI2RlZmluZSBXTEFOX1JUQ19DT05UUk9MX0VOQUJMRV9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFdMQU5fUlRDX0NPTlRST0xfRU5BQkxFX0xTQikgJiBXTEFOX1JUQ19DT05UUk9MX0VOQUJMRV9NQVNLKQotI2RlZmluZSBXTEFOX1JUQ19DT05UUk9MX0xPQURfUlRDX01TQiAgICAgICAgICAgIDEKLSNkZWZpbmUgV0xBTl9SVENfQ09OVFJPTF9MT0FEX1JUQ19MU0IgICAgICAgICAgICAxCi0jZGVmaW5lIFdMQU5fUlRDX0NPTlRST0xfTE9BRF9SVENfTUFTSyAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBXTEFOX1JUQ19DT05UUk9MX0xPQURfUlRDX0dFVCh4KSAgICAgICAgICgoKHgpICYgV0xBTl9SVENfQ09OVFJPTF9MT0FEX1JUQ19NQVNLKSA+PiBXTEFOX1JUQ19DT05UUk9MX0xPQURfUlRDX0xTQikKLSNkZWZpbmUgV0xBTl9SVENfQ09OVFJPTF9MT0FEX1JUQ19TRVQoeCkgICAgICAgICAoKCh4KSA8PCBXTEFOX1JUQ19DT05UUk9MX0xPQURfUlRDX0xTQikgJiBXTEFOX1JUQ19DT05UUk9MX0xPQURfUlRDX01BU0spCi0jZGVmaW5lIFdMQU5fUlRDX0NPTlRST0xfTE9BRF9BTEFSTV9NU0IgICAgICAgICAgMAotI2RlZmluZSBXTEFOX1JUQ19DT05UUk9MX0xPQURfQUxBUk1fTFNCICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9SVENfQ09OVFJPTF9MT0FEX0FMQVJNX01BU0sgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFdMQU5fUlRDX0NPTlRST0xfTE9BRF9BTEFSTV9HRVQoeCkgICAgICAgKCgoeCkgJiBXTEFOX1JUQ19DT05UUk9MX0xPQURfQUxBUk1fTUFTSykgPj4gV0xBTl9SVENfQ09OVFJPTF9MT0FEX0FMQVJNX0xTQikKLSNkZWZpbmUgV0xBTl9SVENfQ09OVFJPTF9MT0FEX0FMQVJNX1NFVCh4KSAgICAgICAoKCh4KSA8PCBXTEFOX1JUQ19DT05UUk9MX0xPQURfQUxBUk1fTFNCKSAmIFdMQU5fUlRDX0NPTlRST0xfTE9BRF9BTEFSTV9NQVNLKQotCi0jZGVmaW5lIFdMQU5fUlRDX1RJTUVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBhMAotI2RlZmluZSBXTEFOX1JUQ19USU1FX09GRlNFVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYTAKLSNkZWZpbmUgV0xBTl9SVENfVElNRV9XRUVLX0RBWV9NU0IgICAgICAgICAgICAgICAyNgotI2RlZmluZSBXTEFOX1JUQ19USU1FX1dFRUtfREFZX0xTQiAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFdMQU5fUlRDX1RJTUVfV0VFS19EQVlfTUFTSyAgICAgICAgICAgICAgMHgwNzAwMDAwMAotI2RlZmluZSBXTEFOX1JUQ19USU1FX1dFRUtfREFZX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgV0xBTl9SVENfVElNRV9XRUVLX0RBWV9NQVNLKSA+PiBXTEFOX1JUQ19USU1FX1dFRUtfREFZX0xTQikKLSNkZWZpbmUgV0xBTl9SVENfVElNRV9XRUVLX0RBWV9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBXTEFOX1JUQ19USU1FX1dFRUtfREFZX0xTQikgJiBXTEFOX1JUQ19USU1FX1dFRUtfREFZX01BU0spCi0jZGVmaW5lIFdMQU5fUlRDX1RJTUVfSE9VUl9NU0IgICAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgV0xBTl9SVENfVElNRV9IT1VSX0xTQiAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBXTEFOX1JUQ19USU1FX0hPVVJfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAzZjAwMDAKLSNkZWZpbmUgV0xBTl9SVENfVElNRV9IT1VSX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIFdMQU5fUlRDX1RJTUVfSE9VUl9NQVNLKSA+PiBXTEFOX1JUQ19USU1FX0hPVVJfTFNCKQotI2RlZmluZSBXTEFOX1JUQ19USU1FX0hPVVJfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fUlRDX1RJTUVfSE9VUl9MU0IpICYgV0xBTl9SVENfVElNRV9IT1VSX01BU0spCi0jZGVmaW5lIFdMQU5fUlRDX1RJTUVfTUlOVVRFX01TQiAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgV0xBTl9SVENfVElNRV9NSU5VVEVfTFNCICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFdMQU5fUlRDX1RJTUVfTUlOVVRFX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwN2YwMAotI2RlZmluZSBXTEFOX1JUQ19USU1FX01JTlVURV9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgV0xBTl9SVENfVElNRV9NSU5VVEVfTUFTSykgPj4gV0xBTl9SVENfVElNRV9NSU5VVEVfTFNCKQotI2RlZmluZSBXTEFOX1JUQ19USU1FX01JTlVURV9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fUlRDX1RJTUVfTUlOVVRFX0xTQikgJiBXTEFOX1JUQ19USU1FX01JTlVURV9NQVNLKQotI2RlZmluZSBXTEFOX1JUQ19USU1FX1NFQ09ORF9NU0IgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgV0xBTl9SVENfVElNRV9TRUNPTkRfTFNCICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fUlRDX1RJTUVfU0VDT05EX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDA3ZgotI2RlZmluZSBXTEFOX1JUQ19USU1FX1NFQ09ORF9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgV0xBTl9SVENfVElNRV9TRUNPTkRfTUFTSykgPj4gV0xBTl9SVENfVElNRV9TRUNPTkRfTFNCKQotI2RlZmluZSBXTEFOX1JUQ19USU1FX1NFQ09ORF9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fUlRDX1RJTUVfU0VDT05EX0xTQikgJiBXTEFOX1JUQ19USU1FX1NFQ09ORF9NQVNLKQotCi0jZGVmaW5lIFdMQU5fUlRDX0RBVEVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBhNAotI2RlZmluZSBXTEFOX1JUQ19EQVRFX09GRlNFVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYTQKLSNkZWZpbmUgV0xBTl9SVENfREFURV9ZRUFSX01TQiAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBXTEFOX1JUQ19EQVRFX1lFQVJfTFNCICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFdMQU5fUlRDX0RBVEVfWUVBUl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMGZmMDAwMAotI2RlZmluZSBXTEFOX1JUQ19EQVRFX1lFQVJfR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgV0xBTl9SVENfREFURV9ZRUFSX01BU0spID4+IFdMQU5fUlRDX0RBVEVfWUVBUl9MU0IpCi0jZGVmaW5lIFdMQU5fUlRDX0RBVEVfWUVBUl9TRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9SVENfREFURV9ZRUFSX0xTQikgJiBXTEFOX1JUQ19EQVRFX1lFQVJfTUFTSykKLSNkZWZpbmUgV0xBTl9SVENfREFURV9NT05USF9NU0IgICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBXTEFOX1JUQ19EQVRFX01PTlRIX0xTQiAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgV0xBTl9SVENfREFURV9NT05USF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAxZjAwCi0jZGVmaW5lIFdMQU5fUlRDX0RBVEVfTU9OVEhfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBXTEFOX1JUQ19EQVRFX01PTlRIX01BU0spID4+IFdMQU5fUlRDX0RBVEVfTU9OVEhfTFNCKQotI2RlZmluZSBXTEFOX1JUQ19EQVRFX01PTlRIX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fUlRDX0RBVEVfTU9OVEhfTFNCKSAmIFdMQU5fUlRDX0RBVEVfTU9OVEhfTUFTSykKLSNkZWZpbmUgV0xBTl9SVENfREFURV9NT05USF9EQVlfTVNCICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFdMQU5fUlRDX0RBVEVfTU9OVEhfREFZX0xTQiAgICAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX1JUQ19EQVRFX01PTlRIX0RBWV9NQVNLICAgICAgICAgICAgIDB4MDAwMDAwM2YKLSNkZWZpbmUgV0xBTl9SVENfREFURV9NT05USF9EQVlfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIFdMQU5fUlRDX0RBVEVfTU9OVEhfREFZX01BU0spID4+IFdMQU5fUlRDX0RBVEVfTU9OVEhfREFZX0xTQikKLSNkZWZpbmUgV0xBTl9SVENfREFURV9NT05USF9EQVlfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCBXTEFOX1JUQ19EQVRFX01PTlRIX0RBWV9MU0IpICYgV0xBTl9SVENfREFURV9NT05USF9EQVlfTUFTSykKLQotI2RlZmluZSBXTEFOX1JUQ19TRVRfVElNRV9BRERSRVNTICAgICAgICAgICAgICAgIDB4MDAwMDAwYTgKLSNkZWZpbmUgV0xBTl9SVENfU0VUX1RJTUVfT0ZGU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMGE4Ci0jZGVmaW5lIFdMQU5fUlRDX1NFVF9USU1FX1dFRUtfREFZX01TQiAgICAgICAgICAgMjYKLSNkZWZpbmUgV0xBTl9SVENfU0VUX1RJTUVfV0VFS19EQVlfTFNCICAgICAgICAgICAyNAotI2RlZmluZSBXTEFOX1JUQ19TRVRfVElNRV9XRUVLX0RBWV9NQVNLICAgICAgICAgIDB4MDcwMDAwMDAKLSNkZWZpbmUgV0xBTl9SVENfU0VUX1RJTUVfV0VFS19EQVlfR0VUKHgpICAgICAgICAoKCh4KSAmIFdMQU5fUlRDX1NFVF9USU1FX1dFRUtfREFZX01BU0spID4+IFdMQU5fUlRDX1NFVF9USU1FX1dFRUtfREFZX0xTQikKLSNkZWZpbmUgV0xBTl9SVENfU0VUX1RJTUVfV0VFS19EQVlfU0VUKHgpICAgICAgICAoKCh4KSA8PCBXTEFOX1JUQ19TRVRfVElNRV9XRUVLX0RBWV9MU0IpICYgV0xBTl9SVENfU0VUX1RJTUVfV0VFS19EQVlfTUFTSykKLSNkZWZpbmUgV0xBTl9SVENfU0VUX1RJTUVfSE9VUl9NU0IgICAgICAgICAgICAgICAyMQotI2RlZmluZSBXTEFOX1JUQ19TRVRfVElNRV9IT1VSX0xTQiAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFdMQU5fUlRDX1NFVF9USU1FX0hPVVJfTUFTSyAgICAgICAgICAgICAgMHgwMDNmMDAwMAotI2RlZmluZSBXTEFOX1JUQ19TRVRfVElNRV9IT1VSX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgV0xBTl9SVENfU0VUX1RJTUVfSE9VUl9NQVNLKSA+PiBXTEFOX1JUQ19TRVRfVElNRV9IT1VSX0xTQikKLSNkZWZpbmUgV0xBTl9SVENfU0VUX1RJTUVfSE9VUl9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBXTEFOX1JUQ19TRVRfVElNRV9IT1VSX0xTQikgJiBXTEFOX1JUQ19TRVRfVElNRV9IT1VSX01BU0spCi0jZGVmaW5lIFdMQU5fUlRDX1NFVF9USU1FX01JTlVURV9NU0IgICAgICAgICAgICAgMTQKLSNkZWZpbmUgV0xBTl9SVENfU0VUX1RJTUVfTUlOVVRFX0xTQiAgICAgICAgICAgICA4Ci0jZGVmaW5lIFdMQU5fUlRDX1NFVF9USU1FX01JTlVURV9NQVNLICAgICAgICAgICAgMHgwMDAwN2YwMAotI2RlZmluZSBXTEFOX1JUQ19TRVRfVElNRV9NSU5VVEVfR0VUKHgpICAgICAgICAgICgoKHgpICYgV0xBTl9SVENfU0VUX1RJTUVfTUlOVVRFX01BU0spID4+IFdMQU5fUlRDX1NFVF9USU1FX01JTlVURV9MU0IpCi0jZGVmaW5lIFdMQU5fUlRDX1NFVF9USU1FX01JTlVURV9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgV0xBTl9SVENfU0VUX1RJTUVfTUlOVVRFX0xTQikgJiBXTEFOX1JUQ19TRVRfVElNRV9NSU5VVEVfTUFTSykKLSNkZWZpbmUgV0xBTl9SVENfU0VUX1RJTUVfU0VDT05EX01TQiAgICAgICAgICAgICA2Ci0jZGVmaW5lIFdMQU5fUlRDX1NFVF9USU1FX1NFQ09ORF9MU0IgICAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX1JUQ19TRVRfVElNRV9TRUNPTkRfTUFTSyAgICAgICAgICAgIDB4MDAwMDAwN2YKLSNkZWZpbmUgV0xBTl9SVENfU0VUX1RJTUVfU0VDT05EX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIFdMQU5fUlRDX1NFVF9USU1FX1NFQ09ORF9NQVNLKSA+PiBXTEFOX1JUQ19TRVRfVElNRV9TRUNPTkRfTFNCKQotI2RlZmluZSBXTEFOX1JUQ19TRVRfVElNRV9TRUNPTkRfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IFdMQU5fUlRDX1NFVF9USU1FX1NFQ09ORF9MU0IpICYgV0xBTl9SVENfU0VUX1RJTUVfU0VDT05EX01BU0spCi0KLSNkZWZpbmUgV0xBTl9SVENfU0VUX0RBVEVfQUREUkVTUyAgICAgICAgICAgICAgICAweDAwMDAwMGFjCi0jZGVmaW5lIFdMQU5fUlRDX1NFVF9EQVRFX09GRlNFVCAgICAgICAgICAgICAgICAgMHgwMDAwMDBhYwotI2RlZmluZSBXTEFOX1JUQ19TRVRfREFURV9ZRUFSX01TQiAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFdMQU5fUlRDX1NFVF9EQVRFX1lFQVJfTFNCICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgV0xBTl9SVENfU0VUX0RBVEVfWUVBUl9NQVNLICAgICAgICAgICAgICAweDAwZmYwMDAwCi0jZGVmaW5lIFdMQU5fUlRDX1NFVF9EQVRFX1lFQVJfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBXTEFOX1JUQ19TRVRfREFURV9ZRUFSX01BU0spID4+IFdMQU5fUlRDX1NFVF9EQVRFX1lFQVJfTFNCKQotI2RlZmluZSBXTEFOX1JUQ19TRVRfREFURV9ZRUFSX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fUlRDX1NFVF9EQVRFX1lFQVJfTFNCKSAmIFdMQU5fUlRDX1NFVF9EQVRFX1lFQVJfTUFTSykKLSNkZWZpbmUgV0xBTl9SVENfU0VUX0RBVEVfTU9OVEhfTVNCICAgICAgICAgICAgICAxMgotI2RlZmluZSBXTEFOX1JUQ19TRVRfREFURV9NT05USF9MU0IgICAgICAgICAgICAgIDgKLSNkZWZpbmUgV0xBTl9SVENfU0VUX0RBVEVfTU9OVEhfTUFTSyAgICAgICAgICAgICAweDAwMDAxZjAwCi0jZGVmaW5lIFdMQU5fUlRDX1NFVF9EQVRFX01PTlRIX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBXTEFOX1JUQ19TRVRfREFURV9NT05USF9NQVNLKSA+PiBXTEFOX1JUQ19TRVRfREFURV9NT05USF9MU0IpCi0jZGVmaW5lIFdMQU5fUlRDX1NFVF9EQVRFX01PTlRIX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9SVENfU0VUX0RBVEVfTU9OVEhfTFNCKSAmIFdMQU5fUlRDX1NFVF9EQVRFX01PTlRIX01BU0spCi0jZGVmaW5lIFdMQU5fUlRDX1NFVF9EQVRFX01PTlRIX0RBWV9NU0IgICAgICAgICAgNQotI2RlZmluZSBXTEFOX1JUQ19TRVRfREFURV9NT05USF9EQVlfTFNCICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9SVENfU0VUX0RBVEVfTU9OVEhfREFZX01BU0sgICAgICAgICAweDAwMDAwMDNmCi0jZGVmaW5lIFdMQU5fUlRDX1NFVF9EQVRFX01PTlRIX0RBWV9HRVQoeCkgICAgICAgKCgoeCkgJiBXTEFOX1JUQ19TRVRfREFURV9NT05USF9EQVlfTUFTSykgPj4gV0xBTl9SVENfU0VUX0RBVEVfTU9OVEhfREFZX0xTQikKLSNkZWZpbmUgV0xBTl9SVENfU0VUX0RBVEVfTU9OVEhfREFZX1NFVCh4KSAgICAgICAoKCh4KSA8PCBXTEFOX1JUQ19TRVRfREFURV9NT05USF9EQVlfTFNCKSAmIFdMQU5fUlRDX1NFVF9EQVRFX01PTlRIX0RBWV9NQVNLKQotCi0jZGVmaW5lIFdMQU5fUlRDX1NFVF9BTEFSTV9BRERSRVNTICAgICAgICAgICAgICAgMHgwMDAwMDBiMAotI2RlZmluZSBXTEFOX1JUQ19TRVRfQUxBUk1fT0ZGU0VUICAgICAgICAgICAgICAgIDB4MDAwMDAwYjAKLSNkZWZpbmUgV0xBTl9SVENfU0VUX0FMQVJNX0hPVVJfTVNCICAgICAgICAgICAgICAyMQotI2RlZmluZSBXTEFOX1JUQ19TRVRfQUxBUk1fSE9VUl9MU0IgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFdMQU5fUlRDX1NFVF9BTEFSTV9IT1VSX01BU0sgICAgICAgICAgICAgMHgwMDNmMDAwMAotI2RlZmluZSBXTEFOX1JUQ19TRVRfQUxBUk1fSE9VUl9HRVQoeCkgICAgICAgICAgICgoKHgpICYgV0xBTl9SVENfU0VUX0FMQVJNX0hPVVJfTUFTSykgPj4gV0xBTl9SVENfU0VUX0FMQVJNX0hPVVJfTFNCKQotI2RlZmluZSBXTEFOX1JUQ19TRVRfQUxBUk1fSE9VUl9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFdMQU5fUlRDX1NFVF9BTEFSTV9IT1VSX0xTQikgJiBXTEFOX1JUQ19TRVRfQUxBUk1fSE9VUl9NQVNLKQotI2RlZmluZSBXTEFOX1JUQ19TRVRfQUxBUk1fTUlOVVRFX01TQiAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFdMQU5fUlRDX1NFVF9BTEFSTV9NSU5VVEVfTFNCICAgICAgICAgICAgOAotI2RlZmluZSBXTEFOX1JUQ19TRVRfQUxBUk1fTUlOVVRFX01BU0sgICAgICAgICAgIDB4MDAwMDdmMDAKLSNkZWZpbmUgV0xBTl9SVENfU0VUX0FMQVJNX01JTlVURV9HRVQoeCkgICAgICAgICAoKCh4KSAmIFdMQU5fUlRDX1NFVF9BTEFSTV9NSU5VVEVfTUFTSykgPj4gV0xBTl9SVENfU0VUX0FMQVJNX01JTlVURV9MU0IpCi0jZGVmaW5lIFdMQU5fUlRDX1NFVF9BTEFSTV9NSU5VVEVfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgV0xBTl9SVENfU0VUX0FMQVJNX01JTlVURV9MU0IpICYgV0xBTl9SVENfU0VUX0FMQVJNX01JTlVURV9NQVNLKQotI2RlZmluZSBXTEFOX1JUQ19TRVRfQUxBUk1fU0VDT05EX01TQiAgICAgICAgICAgIDYKLSNkZWZpbmUgV0xBTl9SVENfU0VUX0FMQVJNX1NFQ09ORF9MU0IgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fUlRDX1NFVF9BTEFSTV9TRUNPTkRfTUFTSyAgICAgICAgICAgMHgwMDAwMDA3ZgotI2RlZmluZSBXTEFOX1JUQ19TRVRfQUxBUk1fU0VDT05EX0dFVCh4KSAgICAgICAgICgoKHgpICYgV0xBTl9SVENfU0VUX0FMQVJNX1NFQ09ORF9NQVNLKSA+PiBXTEFOX1JUQ19TRVRfQUxBUk1fU0VDT05EX0xTQikKLSNkZWZpbmUgV0xBTl9SVENfU0VUX0FMQVJNX1NFQ09ORF9TRVQoeCkgICAgICAgICAoKCh4KSA8PCBXTEFOX1JUQ19TRVRfQUxBUk1fU0VDT05EX0xTQikgJiBXTEFOX1JUQ19TRVRfQUxBUk1fU0VDT05EX01BU0spCi0KLSNkZWZpbmUgV0xBTl9SVENfQ09ORklHX0FERFJFU1MgICAgICAgICAgICAgICAgICAweDAwMDAwMGI0Ci0jZGVmaW5lIFdMQU5fUlRDX0NPTkZJR19PRkZTRVQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBiNAotI2RlZmluZSBXTEFOX1JUQ19DT05GSUdfQkNEX01TQiAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgV0xBTl9SVENfQ09ORklHX0JDRF9MU0IgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFdMQU5fUlRDX0NPTkZJR19CQ0RfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBXTEFOX1JUQ19DT05GSUdfQkNEX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgV0xBTl9SVENfQ09ORklHX0JDRF9NQVNLKSA+PiBXTEFOX1JUQ19DT05GSUdfQkNEX0xTQikKLSNkZWZpbmUgV0xBTl9SVENfQ09ORklHX0JDRF9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBXTEFOX1JUQ19DT05GSUdfQkNEX0xTQikgJiBXTEFOX1JUQ19DT05GSUdfQkNEX01BU0spCi0jZGVmaW5lIFdMQU5fUlRDX0NPTkZJR19UV0VMVkVfSE9VUl9NU0IgICAgICAgICAgMQotI2RlZmluZSBXTEFOX1JUQ19DT05GSUdfVFdFTFZFX0hPVVJfTFNCICAgICAgICAgIDEKLSNkZWZpbmUgV0xBTl9SVENfQ09ORklHX1RXRUxWRV9IT1VSX01BU0sgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFdMQU5fUlRDX0NPTkZJR19UV0VMVkVfSE9VUl9HRVQoeCkgICAgICAgKCgoeCkgJiBXTEFOX1JUQ19DT05GSUdfVFdFTFZFX0hPVVJfTUFTSykgPj4gV0xBTl9SVENfQ09ORklHX1RXRUxWRV9IT1VSX0xTQikKLSNkZWZpbmUgV0xBTl9SVENfQ09ORklHX1RXRUxWRV9IT1VSX1NFVCh4KSAgICAgICAoKCh4KSA8PCBXTEFOX1JUQ19DT05GSUdfVFdFTFZFX0hPVVJfTFNCKSAmIFdMQU5fUlRDX0NPTkZJR19UV0VMVkVfSE9VUl9NQVNLKQotI2RlZmluZSBXTEFOX1JUQ19DT05GSUdfRFNFX01TQiAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9SVENfQ09ORklHX0RTRV9MU0IgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fUlRDX0NPTkZJR19EU0VfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBXTEFOX1JUQ19DT05GSUdfRFNFX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgV0xBTl9SVENfQ09ORklHX0RTRV9NQVNLKSA+PiBXTEFOX1JUQ19DT05GSUdfRFNFX0xTQikKLSNkZWZpbmUgV0xBTl9SVENfQ09ORklHX0RTRV9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBXTEFOX1JUQ19DT05GSUdfRFNFX0xTQikgJiBXTEFOX1JUQ19DT05GSUdfRFNFX01BU0spCi0KLSNkZWZpbmUgV0xBTl9SVENfQUxBUk1fU1RBVFVTX0FERFJFU1MgICAgICAgICAgICAweDAwMDAwMGI4Ci0jZGVmaW5lIFdMQU5fUlRDX0FMQVJNX1NUQVRVU19PRkZTRVQgICAgICAgICAgICAgMHgwMDAwMDBiOAotI2RlZmluZSBXTEFOX1JUQ19BTEFSTV9TVEFUVVNfRU5BQkxFX01TQiAgICAgICAgIDEKLSNkZWZpbmUgV0xBTl9SVENfQUxBUk1fU1RBVFVTX0VOQUJMRV9MU0IgICAgICAgICAxCi0jZGVmaW5lIFdMQU5fUlRDX0FMQVJNX1NUQVRVU19FTkFCTEVfTUFTSyAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBXTEFOX1JUQ19BTEFSTV9TVEFUVVNfRU5BQkxFX0dFVCh4KSAgICAgICgoKHgpICYgV0xBTl9SVENfQUxBUk1fU1RBVFVTX0VOQUJMRV9NQVNLKSA+PiBXTEFOX1JUQ19BTEFSTV9TVEFUVVNfRU5BQkxFX0xTQikKLSNkZWZpbmUgV0xBTl9SVENfQUxBUk1fU1RBVFVTX0VOQUJMRV9TRVQoeCkgICAgICAoKCh4KSA8PCBXTEFOX1JUQ19BTEFSTV9TVEFUVVNfRU5BQkxFX0xTQikgJiBXTEFOX1JUQ19BTEFSTV9TVEFUVVNfRU5BQkxFX01BU0spCi0jZGVmaW5lIFdMQU5fUlRDX0FMQVJNX1NUQVRVU19JTlRFUlJVUFRfTVNCICAgICAgMAotI2RlZmluZSBXTEFOX1JUQ19BTEFSTV9TVEFUVVNfSU5URVJSVVBUX0xTQiAgICAgIDAKLSNkZWZpbmUgV0xBTl9SVENfQUxBUk1fU1RBVFVTX0lOVEVSUlVQVF9NQVNLICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFdMQU5fUlRDX0FMQVJNX1NUQVRVU19JTlRFUlJVUFRfR0VUKHgpICAgKCgoeCkgJiBXTEFOX1JUQ19BTEFSTV9TVEFUVVNfSU5URVJSVVBUX01BU0spID4+IFdMQU5fUlRDX0FMQVJNX1NUQVRVU19JTlRFUlJVUFRfTFNCKQotI2RlZmluZSBXTEFOX1JUQ19BTEFSTV9TVEFUVVNfSU5URVJSVVBUX1NFVCh4KSAgICgoKHgpIDw8IFdMQU5fUlRDX0FMQVJNX1NUQVRVU19JTlRFUlJVUFRfTFNCKSAmIFdMQU5fUlRDX0FMQVJNX1NUQVRVU19JTlRFUlJVUFRfTUFTSykKLQotI2RlZmluZSBXTEFOX1VBUlRfV0FLRVVQX0FERFJFU1MgICAgICAgICAgICAgICAgIDB4MDAwMDAwYmMKLSNkZWZpbmUgV0xBTl9VQVJUX1dBS0VVUF9PRkZTRVQgICAgICAgICAgICAgICAgICAweDAwMDAwMGJjCi0jZGVmaW5lIFdMQU5fVUFSVF9XQUtFVVBfRU5BQkxFX01TQiAgICAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX1VBUlRfV0FLRVVQX0VOQUJMRV9MU0IgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9VQVJUX1dBS0VVUF9FTkFCTEVfTUFTSyAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFdMQU5fVUFSVF9XQUtFVVBfRU5BQkxFX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBXTEFOX1VBUlRfV0FLRVVQX0VOQUJMRV9NQVNLKSA+PiBXTEFOX1VBUlRfV0FLRVVQX0VOQUJMRV9MU0IpCi0jZGVmaW5lIFdMQU5fVUFSVF9XQUtFVVBfRU5BQkxFX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9VQVJUX1dBS0VVUF9FTkFCTEVfTFNCKSAmIFdMQU5fVUFSVF9XQUtFVVBfRU5BQkxFX01BU0spCi0KLSNkZWZpbmUgV0xBTl9SRVNFVF9DQVVTRV9BRERSRVNTICAgICAgICAgICAgICAgICAweDAwMDAwMGMwCi0jZGVmaW5lIFdMQU5fUkVTRVRfQ0FVU0VfT0ZGU0VUICAgICAgICAgICAgICAgICAgMHgwMDAwMDBjMAotI2RlZmluZSBXTEFOX1JFU0VUX0NBVVNFX0xBU1RfTVNCICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgV0xBTl9SRVNFVF9DQVVTRV9MQVNUX0xTQiAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fUkVTRVRfQ0FVU0VfTEFTVF9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDAwNwotI2RlZmluZSBXTEFOX1JFU0VUX0NBVVNFX0xBU1RfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgV0xBTl9SRVNFVF9DQVVTRV9MQVNUX01BU0spID4+IFdMQU5fUkVTRVRfQ0FVU0VfTEFTVF9MU0IpCi0jZGVmaW5lIFdMQU5fUkVTRVRfQ0FVU0VfTEFTVF9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9SRVNFVF9DQVVTRV9MQVNUX0xTQikgJiBXTEFOX1JFU0VUX0NBVVNFX0xBU1RfTUFTSykKLQogI2RlZmluZSBXTEFOX1NZU1RFTV9TTEVFUF9BRERSRVNTICAgICAgICAgICAgICAgIDB4MDAwMDAwYzQKICNkZWZpbmUgV0xBTl9TWVNURU1fU0xFRVBfT0ZGU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMGM0CiAjZGVmaW5lIFdMQU5fU1lTVEVNX1NMRUVQX0hPU1RfSUZfTVNCICAgICAgICAgICAgNApAQCAtNzk5LDY5ICsxNDYsNiBAQAogI2RlZmluZSBXTEFOX1NZU1RFTV9TTEVFUF9ESVNBQkxFX0dFVCh4KSAgICAgICAgICgoKHgpICYgV0xBTl9TWVNURU1fU0xFRVBfRElTQUJMRV9NQVNLKSA+PiBXTEFOX1NZU1RFTV9TTEVFUF9ESVNBQkxFX0xTQikKICNkZWZpbmUgV0xBTl9TWVNURU1fU0xFRVBfRElTQUJMRV9TRVQoeCkgICAgICAgICAoKCh4KSA8PCBXTEFOX1NZU1RFTV9TTEVFUF9ESVNBQkxFX0xTQikgJiBXTEFOX1NZU1RFTV9TTEVFUF9ESVNBQkxFX01BU0spCiAKLSNkZWZpbmUgV0xBTl9TRElPX1dSQVBQRVJfQUREUkVTUyAgICAgICAgICAgICAgICAweDAwMDAwMGM4Ci0jZGVmaW5lIFdMQU5fU0RJT19XUkFQUEVSX09GRlNFVCAgICAgICAgICAgICAgICAgMHgwMDAwMDBjOAotI2RlZmluZSBXTEFOX1NESU9fV1JBUFBFUl9TTEVFUF9NU0IgICAgICAgICAgICAgIDMKLSNkZWZpbmUgV0xBTl9TRElPX1dSQVBQRVJfU0xFRVBfTFNCICAgICAgICAgICAgICAzCi0jZGVmaW5lIFdMQU5fU0RJT19XUkFQUEVSX1NMRUVQX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBXTEFOX1NESU9fV1JBUFBFUl9TTEVFUF9HRVQoeCkgICAgICAgICAgICgoKHgpICYgV0xBTl9TRElPX1dSQVBQRVJfU0xFRVBfTUFTSykgPj4gV0xBTl9TRElPX1dSQVBQRVJfU0xFRVBfTFNCKQotI2RlZmluZSBXTEFOX1NESU9fV1JBUFBFUl9TTEVFUF9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFdMQU5fU0RJT19XUkFQUEVSX1NMRUVQX0xTQikgJiBXTEFOX1NESU9fV1JBUFBFUl9TTEVFUF9NQVNLKQotI2RlZmluZSBXTEFOX1NESU9fV1JBUFBFUl9XQUtFVVBfTVNCICAgICAgICAgICAgIDIKLSNkZWZpbmUgV0xBTl9TRElPX1dSQVBQRVJfV0FLRVVQX0xTQiAgICAgICAgICAgICAyCi0jZGVmaW5lIFdMQU5fU0RJT19XUkFQUEVSX1dBS0VVUF9NQVNLICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBXTEFOX1NESU9fV1JBUFBFUl9XQUtFVVBfR0VUKHgpICAgICAgICAgICgoKHgpICYgV0xBTl9TRElPX1dSQVBQRVJfV0FLRVVQX01BU0spID4+IFdMQU5fU0RJT19XUkFQUEVSX1dBS0VVUF9MU0IpCi0jZGVmaW5lIFdMQU5fU0RJT19XUkFQUEVSX1dBS0VVUF9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgV0xBTl9TRElPX1dSQVBQRVJfV0FLRVVQX0xTQikgJiBXTEFOX1NESU9fV1JBUFBFUl9XQUtFVVBfTUFTSykKLSNkZWZpbmUgV0xBTl9TRElPX1dSQVBQRVJfU09DX09OX01TQiAgICAgICAgICAgICAxCi0jZGVmaW5lIFdMQU5fU0RJT19XUkFQUEVSX1NPQ19PTl9MU0IgICAgICAgICAgICAgMQotI2RlZmluZSBXTEFOX1NESU9fV1JBUFBFUl9TT0NfT05fTUFTSyAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgV0xBTl9TRElPX1dSQVBQRVJfU09DX09OX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIFdMQU5fU0RJT19XUkFQUEVSX1NPQ19PTl9NQVNLKSA+PiBXTEFOX1NESU9fV1JBUFBFUl9TT0NfT05fTFNCKQotI2RlZmluZSBXTEFOX1NESU9fV1JBUFBFUl9TT0NfT05fU0VUKHgpICAgICAgICAgICgoKHgpIDw8IFdMQU5fU0RJT19XUkFQUEVSX1NPQ19PTl9MU0IpICYgV0xBTl9TRElPX1dSQVBQRVJfU09DX09OX01BU0spCi0jZGVmaW5lIFdMQU5fU0RJT19XUkFQUEVSX09OX01TQiAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX1NESU9fV1JBUFBFUl9PTl9MU0IgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9TRElPX1dSQVBQRVJfT05fTUFTSyAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFdMQU5fU0RJT19XUkFQUEVSX09OX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiBXTEFOX1NESU9fV1JBUFBFUl9PTl9NQVNLKSA+PiBXTEFOX1NESU9fV1JBUFBFUl9PTl9MU0IpCi0jZGVmaW5lIFdMQU5fU0RJT19XUkFQUEVSX09OX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9TRElPX1dSQVBQRVJfT05fTFNCKSAmIFdMQU5fU0RJT19XUkFQUEVSX09OX01BU0spCi0KLSNkZWZpbmUgV0xBTl9NQUNfU0xFRVBfQ09OVFJPTF9BRERSRVNTICAgICAgICAgICAweDAwMDAwMGNjCi0jZGVmaW5lIFdMQU5fTUFDX1NMRUVQX0NPTlRST0xfT0ZGU0VUICAgICAgICAgICAgMHgwMDAwMDBjYwotI2RlZmluZSBXTEFOX01BQ19TTEVFUF9DT05UUk9MX0VOQUJMRV9NU0IgICAgICAgIDEKLSNkZWZpbmUgV0xBTl9NQUNfU0xFRVBfQ09OVFJPTF9FTkFCTEVfTFNCICAgICAgICAwCi0jZGVmaW5lIFdMQU5fTUFDX1NMRUVQX0NPTlRST0xfRU5BQkxFX01BU0sgICAgICAgMHgwMDAwMDAwMwotI2RlZmluZSBXTEFOX01BQ19TTEVFUF9DT05UUk9MX0VOQUJMRV9HRVQoeCkgICAgICgoKHgpICYgV0xBTl9NQUNfU0xFRVBfQ09OVFJPTF9FTkFCTEVfTUFTSykgPj4gV0xBTl9NQUNfU0xFRVBfQ09OVFJPTF9FTkFCTEVfTFNCKQotI2RlZmluZSBXTEFOX01BQ19TTEVFUF9DT05UUk9MX0VOQUJMRV9TRVQoeCkgICAgICgoKHgpIDw8IFdMQU5fTUFDX1NMRUVQX0NPTlRST0xfRU5BQkxFX0xTQikgJiBXTEFOX01BQ19TTEVFUF9DT05UUk9MX0VOQUJMRV9NQVNLKQotCi0jZGVmaW5lIFdMQU5fS0VFUF9BV0FLRV9BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMDBkMAotI2RlZmluZSBXTEFOX0tFRVBfQVdBS0VfT0ZGU0VUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZDAKLSNkZWZpbmUgV0xBTl9LRUVQX0FXQUtFX0NPVU5UX01TQiAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFdMQU5fS0VFUF9BV0FLRV9DT1VOVF9MU0IgICAgICAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX0tFRVBfQVdBS0VfQ09VTlRfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgV0xBTl9LRUVQX0FXQUtFX0NPVU5UX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIFdMQU5fS0VFUF9BV0FLRV9DT1VOVF9NQVNLKSA+PiBXTEFOX0tFRVBfQVdBS0VfQ09VTlRfTFNCKQotI2RlZmluZSBXTEFOX0tFRVBfQVdBS0VfQ09VTlRfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fS0VFUF9BV0FLRV9DT1VOVF9MU0IpICYgV0xBTl9LRUVQX0FXQUtFX0NPVU5UX01BU0spCi0KLSNkZWZpbmUgV0xBTl9MUE9fQ0FMX1RJTUVfQUREUkVTUyAgICAgICAgICAgICAgICAweDAwMDAwMGQ0Ci0jZGVmaW5lIFdMQU5fTFBPX0NBTF9USU1FX09GRlNFVCAgICAgICAgICAgICAgICAgMHgwMDAwMDBkNAotI2RlZmluZSBXTEFOX0xQT19DQUxfVElNRV9MRU5HVEhfTVNCICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFdMQU5fTFBPX0NBTF9USU1FX0xFTkdUSF9MU0IgICAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX0xQT19DQUxfVElNRV9MRU5HVEhfTUFTSyAgICAgICAgICAgIDB4MDAwMDNmZmYKLSNkZWZpbmUgV0xBTl9MUE9fQ0FMX1RJTUVfTEVOR1RIX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIFdMQU5fTFBPX0NBTF9USU1FX0xFTkdUSF9NQVNLKSA+PiBXTEFOX0xQT19DQUxfVElNRV9MRU5HVEhfTFNCKQotI2RlZmluZSBXTEFOX0xQT19DQUxfVElNRV9MRU5HVEhfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IFdMQU5fTFBPX0NBTF9USU1FX0xFTkdUSF9MU0IpICYgV0xBTl9MUE9fQ0FMX1RJTUVfTEVOR1RIX01BU0spCi0KLSNkZWZpbmUgV0xBTl9MUE9fSU5JVF9ESVZJREVORF9JTlRfQUREUkVTUyAgICAgICAweDAwMDAwMGQ4Ci0jZGVmaW5lIFdMQU5fTFBPX0lOSVRfRElWSURFTkRfSU5UX09GRlNFVCAgICAgICAgMHgwMDAwMDBkOAotI2RlZmluZSBXTEFOX0xQT19JTklUX0RJVklERU5EX0lOVF9WQUxVRV9NU0IgICAgIDIzCi0jZGVmaW5lIFdMQU5fTFBPX0lOSVRfRElWSURFTkRfSU5UX1ZBTFVFX0xTQiAgICAgMAotI2RlZmluZSBXTEFOX0xQT19JTklUX0RJVklERU5EX0lOVF9WQUxVRV9NQVNLICAgIDB4MDBmZmZmZmYKLSNkZWZpbmUgV0xBTl9MUE9fSU5JVF9ESVZJREVORF9JTlRfVkFMVUVfR0VUKHgpICAoKCh4KSAmIFdMQU5fTFBPX0lOSVRfRElWSURFTkRfSU5UX1ZBTFVFX01BU0spID4+IFdMQU5fTFBPX0lOSVRfRElWSURFTkRfSU5UX1ZBTFVFX0xTQikKLSNkZWZpbmUgV0xBTl9MUE9fSU5JVF9ESVZJREVORF9JTlRfVkFMVUVfU0VUKHgpICAoKCh4KSA8PCBXTEFOX0xQT19JTklUX0RJVklERU5EX0lOVF9WQUxVRV9MU0IpICYgV0xBTl9MUE9fSU5JVF9ESVZJREVORF9JTlRfVkFMVUVfTUFTSykKLQotI2RlZmluZSBXTEFOX0xQT19JTklUX0RJVklERU5EX0ZSQUNUSU9OX0FERFJFU1MgIDB4MDAwMDAwZGMKLSNkZWZpbmUgV0xBTl9MUE9fSU5JVF9ESVZJREVORF9GUkFDVElPTl9PRkZTRVQgICAweDAwMDAwMGRjCi0jZGVmaW5lIFdMQU5fTFBPX0lOSVRfRElWSURFTkRfRlJBQ1RJT05fVkFMVUVfTVNCIDEwCi0jZGVmaW5lIFdMQU5fTFBPX0lOSVRfRElWSURFTkRfRlJBQ1RJT05fVkFMVUVfTFNCIDAKLSNkZWZpbmUgV0xBTl9MUE9fSU5JVF9ESVZJREVORF9GUkFDVElPTl9WQUxVRV9NQVNLIDB4MDAwMDA3ZmYKLSNkZWZpbmUgV0xBTl9MUE9fSU5JVF9ESVZJREVORF9GUkFDVElPTl9WQUxVRV9HRVQoeCkgKCgoeCkgJiBXTEFOX0xQT19JTklUX0RJVklERU5EX0ZSQUNUSU9OX1ZBTFVFX01BU0spID4+IFdMQU5fTFBPX0lOSVRfRElWSURFTkRfRlJBQ1RJT05fVkFMVUVfTFNCKQotI2RlZmluZSBXTEFOX0xQT19JTklUX0RJVklERU5EX0ZSQUNUSU9OX1ZBTFVFX1NFVCh4KSAoKCh4KSA8PCBXTEFOX0xQT19JTklUX0RJVklERU5EX0ZSQUNUSU9OX1ZBTFVFX0xTQikgJiBXTEFOX0xQT19JTklUX0RJVklERU5EX0ZSQUNUSU9OX1ZBTFVFX01BU0spCi0KICNkZWZpbmUgV0xBTl9MUE9fQ0FMX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGUwCiAjZGVmaW5lIFdMQU5fTFBPX0NBTF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBlMAogI2RlZmluZSBXTEFOX0xQT19DQUxfRU5BQkxFX01TQiAgICAgICAgICAgICAgICAgIDIwCkBAIC04NzUsMTE5MSArMTU5LDQgQEAKICNkZWZpbmUgV0xBTl9MUE9fQ0FMX0NPVU5UX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIFdMQU5fTFBPX0NBTF9DT1VOVF9NQVNLKSA+PiBXTEFOX0xQT19DQUxfQ09VTlRfTFNCKQogI2RlZmluZSBXTEFOX0xQT19DQUxfQ09VTlRfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fTFBPX0NBTF9DT1VOVF9MU0IpICYgV0xBTl9MUE9fQ0FMX0NPVU5UX01BU0spCiAKLSNkZWZpbmUgV0xBTl9MUE9fQ0FMX1RFU1RfQ09OVFJPTF9BRERSRVNTICAgICAgICAweDAwMDAwMGU0Ci0jZGVmaW5lIFdMQU5fTFBPX0NBTF9URVNUX0NPTlRST0xfT0ZGU0VUICAgICAgICAgMHgwMDAwMDBlNAotI2RlZmluZSBXTEFOX0xQT19DQUxfVEVTVF9DT05UUk9MX0VOQUJMRV9NU0IgICAgIDUKLSNkZWZpbmUgV0xBTl9MUE9fQ0FMX1RFU1RfQ09OVFJPTF9FTkFCTEVfTFNCICAgICA1Ci0jZGVmaW5lIFdMQU5fTFBPX0NBTF9URVNUX0NPTlRST0xfRU5BQkxFX01BU0sgICAgMHgwMDAwMDAyMAotI2RlZmluZSBXTEFOX0xQT19DQUxfVEVTVF9DT05UUk9MX0VOQUJMRV9HRVQoeCkgICgoKHgpICYgV0xBTl9MUE9fQ0FMX1RFU1RfQ09OVFJPTF9FTkFCTEVfTUFTSykgPj4gV0xBTl9MUE9fQ0FMX1RFU1RfQ09OVFJPTF9FTkFCTEVfTFNCKQotI2RlZmluZSBXTEFOX0xQT19DQUxfVEVTVF9DT05UUk9MX0VOQUJMRV9TRVQoeCkgICgoKHgpIDw8IFdMQU5fTFBPX0NBTF9URVNUX0NPTlRST0xfRU5BQkxFX0xTQikgJiBXTEFOX0xQT19DQUxfVEVTVF9DT05UUk9MX0VOQUJMRV9NQVNLKQotI2RlZmluZSBXTEFOX0xQT19DQUxfVEVTVF9DT05UUk9MX1JUQ19DWUNMRVNfTVNCIDQKLSNkZWZpbmUgV0xBTl9MUE9fQ0FMX1RFU1RfQ09OVFJPTF9SVENfQ1lDTEVTX0xTQiAwCi0jZGVmaW5lIFdMQU5fTFBPX0NBTF9URVNUX0NPTlRST0xfUlRDX0NZQ0xFU19NQVNLIDB4MDAwMDAwMWYKLSNkZWZpbmUgV0xBTl9MUE9fQ0FMX1RFU1RfQ09OVFJPTF9SVENfQ1lDTEVTX0dFVCh4KSAoKCh4KSAmIFdMQU5fTFBPX0NBTF9URVNUX0NPTlRST0xfUlRDX0NZQ0xFU19NQVNLKSA+PiBXTEFOX0xQT19DQUxfVEVTVF9DT05UUk9MX1JUQ19DWUNMRVNfTFNCKQotI2RlZmluZSBXTEFOX0xQT19DQUxfVEVTVF9DT05UUk9MX1JUQ19DWUNMRVNfU0VUKHgpICgoKHgpIDw8IFdMQU5fTFBPX0NBTF9URVNUX0NPTlRST0xfUlRDX0NZQ0xFU19MU0IpICYgV0xBTl9MUE9fQ0FMX1RFU1RfQ09OVFJPTF9SVENfQ1lDTEVTX01BU0spCi0KLSNkZWZpbmUgV0xBTl9MUE9fQ0FMX1RFU1RfU1RBVFVTX0FERFJFU1MgICAgICAgICAweDAwMDAwMGU4Ci0jZGVmaW5lIFdMQU5fTFBPX0NBTF9URVNUX1NUQVRVU19PRkZTRVQgICAgICAgICAgMHgwMDAwMDBlOAotI2RlZmluZSBXTEFOX0xQT19DQUxfVEVTVF9TVEFUVVNfUkVBRFlfTVNCICAgICAgIDE2Ci0jZGVmaW5lIFdMQU5fTFBPX0NBTF9URVNUX1NUQVRVU19SRUFEWV9MU0IgICAgICAgMTYKLSNkZWZpbmUgV0xBTl9MUE9fQ0FMX1RFU1RfU1RBVFVTX1JFQURZX01BU0sgICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIFdMQU5fTFBPX0NBTF9URVNUX1NUQVRVU19SRUFEWV9HRVQoeCkgICAgKCgoeCkgJiBXTEFOX0xQT19DQUxfVEVTVF9TVEFUVVNfUkVBRFlfTUFTSykgPj4gV0xBTl9MUE9fQ0FMX1RFU1RfU1RBVFVTX1JFQURZX0xTQikKLSNkZWZpbmUgV0xBTl9MUE9fQ0FMX1RFU1RfU1RBVFVTX1JFQURZX1NFVCh4KSAgICAoKCh4KSA8PCBXTEFOX0xQT19DQUxfVEVTVF9TVEFUVVNfUkVBRFlfTFNCKSAmIFdMQU5fTFBPX0NBTF9URVNUX1NUQVRVU19SRUFEWV9NQVNLKQotI2RlZmluZSBXTEFOX0xQT19DQUxfVEVTVF9TVEFUVVNfQ09VTlRfTVNCICAgICAgIDE1Ci0jZGVmaW5lIFdMQU5fTFBPX0NBTF9URVNUX1NUQVRVU19DT1VOVF9MU0IgICAgICAgMAotI2RlZmluZSBXTEFOX0xQT19DQUxfVEVTVF9TVEFUVVNfQ09VTlRfTUFTSyAgICAgIDB4MDAwMGZmZmYKLSNkZWZpbmUgV0xBTl9MUE9fQ0FMX1RFU1RfU1RBVFVTX0NPVU5UX0dFVCh4KSAgICAoKCh4KSAmIFdMQU5fTFBPX0NBTF9URVNUX1NUQVRVU19DT1VOVF9NQVNLKSA+PiBXTEFOX0xQT19DQUxfVEVTVF9TVEFUVVNfQ09VTlRfTFNCKQotI2RlZmluZSBXTEFOX0xQT19DQUxfVEVTVF9TVEFUVVNfQ09VTlRfU0VUKHgpICAgICgoKHgpIDw8IFdMQU5fTFBPX0NBTF9URVNUX1NUQVRVU19DT1VOVF9MU0IpICYgV0xBTl9MUE9fQ0FMX1RFU1RfU1RBVFVTX0NPVU5UX01BU0spCi0KLSNkZWZpbmUgV0xBTl9DSElQX0lEX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGVjCi0jZGVmaW5lIFdMQU5fQ0hJUF9JRF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBlYwotI2RlZmluZSBXTEFOX0NISVBfSURfREVWSUNFX0lEX01TQiAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFdMQU5fQ0hJUF9JRF9ERVZJQ0VfSURfTFNCICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgV0xBTl9DSElQX0lEX0RFVklDRV9JRF9NQVNLICAgICAgICAgICAgICAweGZmZmYwMDAwCi0jZGVmaW5lIFdMQU5fQ0hJUF9JRF9ERVZJQ0VfSURfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBXTEFOX0NISVBfSURfREVWSUNFX0lEX01BU0spID4+IFdMQU5fQ0hJUF9JRF9ERVZJQ0VfSURfTFNCKQotI2RlZmluZSBXTEFOX0NISVBfSURfREVWSUNFX0lEX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fQ0hJUF9JRF9ERVZJQ0VfSURfTFNCKSAmIFdMQU5fQ0hJUF9JRF9ERVZJQ0VfSURfTUFTSykKLSNkZWZpbmUgV0xBTl9DSElQX0lEX0NPTkZJR19JRF9NU0IgICAgICAgICAgICAgICAxNQotI2RlZmluZSBXTEFOX0NISVBfSURfQ09ORklHX0lEX0xTQiAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgV0xBTl9DSElQX0lEX0NPTkZJR19JRF9NQVNLICAgICAgICAgICAgICAweDAwMDBmZmYwCi0jZGVmaW5lIFdMQU5fQ0hJUF9JRF9DT05GSUdfSURfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBXTEFOX0NISVBfSURfQ09ORklHX0lEX01BU0spID4+IFdMQU5fQ0hJUF9JRF9DT05GSUdfSURfTFNCKQotI2RlZmluZSBXTEFOX0NISVBfSURfQ09ORklHX0lEX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fQ0hJUF9JRF9DT05GSUdfSURfTFNCKSAmIFdMQU5fQ0hJUF9JRF9DT05GSUdfSURfTUFTSykKLSNkZWZpbmUgV0xBTl9DSElQX0lEX1ZFUlNJT05fSURfTVNCICAgICAgICAgICAgICAzCi0jZGVmaW5lIFdMQU5fQ0hJUF9JRF9WRVJTSU9OX0lEX0xTQiAgICAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX0NISVBfSURfVkVSU0lPTl9JRF9NQVNLICAgICAgICAgICAgIDB4MDAwMDAwMGYKLSNkZWZpbmUgV0xBTl9DSElQX0lEX1ZFUlNJT05fSURfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIFdMQU5fQ0hJUF9JRF9WRVJTSU9OX0lEX01BU0spID4+IFdMQU5fQ0hJUF9JRF9WRVJTSU9OX0lEX0xTQikKLSNkZWZpbmUgV0xBTl9DSElQX0lEX1ZFUlNJT05fSURfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCBXTEFOX0NISVBfSURfVkVSU0lPTl9JRF9MU0IpICYgV0xBTl9DSElQX0lEX1ZFUlNJT05fSURfTUFTSykKLQotI2RlZmluZSBXTEFOX0RFUklWRURfUlRDX0NMS19BRERSRVNTICAgICAgICAgICAgIDB4MDAwMDAwZjAKLSNkZWZpbmUgV0xBTl9ERVJJVkVEX1JUQ19DTEtfT0ZGU0VUICAgICAgICAgICAgICAweDAwMDAwMGYwCi0jZGVmaW5lIFdMQU5fREVSSVZFRF9SVENfQ0xLX0VYVEVSTkFMX0RFVEVDVF9FTl9NU0IgMjAKLSNkZWZpbmUgV0xBTl9ERVJJVkVEX1JUQ19DTEtfRVhURVJOQUxfREVURUNUX0VOX0xTQiAyMAotI2RlZmluZSBXTEFOX0RFUklWRURfUlRDX0NMS19FWFRFUk5BTF9ERVRFQ1RfRU5fTUFTSyAweDAwMTAwMDAwCi0jZGVmaW5lIFdMQU5fREVSSVZFRF9SVENfQ0xLX0VYVEVSTkFMX0RFVEVDVF9FTl9HRVQoeCkgKCgoeCkgJiBXTEFOX0RFUklWRURfUlRDX0NMS19FWFRFUk5BTF9ERVRFQ1RfRU5fTUFTSykgPj4gV0xBTl9ERVJJVkVEX1JUQ19DTEtfRVhURVJOQUxfREVURUNUX0VOX0xTQikKLSNkZWZpbmUgV0xBTl9ERVJJVkVEX1JUQ19DTEtfRVhURVJOQUxfREVURUNUX0VOX1NFVCh4KSAoKCh4KSA8PCBXTEFOX0RFUklWRURfUlRDX0NMS19FWFRFUk5BTF9ERVRFQ1RfRU5fTFNCKSAmIFdMQU5fREVSSVZFRF9SVENfQ0xLX0VYVEVSTkFMX0RFVEVDVF9FTl9NQVNLKQotI2RlZmluZSBXTEFOX0RFUklWRURfUlRDX0NMS19FWFRFUk5BTF9ERVRFQ1RfTVNCIDE4Ci0jZGVmaW5lIFdMQU5fREVSSVZFRF9SVENfQ0xLX0VYVEVSTkFMX0RFVEVDVF9MU0IgMTgKLSNkZWZpbmUgV0xBTl9ERVJJVkVEX1JUQ19DTEtfRVhURVJOQUxfREVURUNUX01BU0sgMHgwMDA0MDAwMAotI2RlZmluZSBXTEFOX0RFUklWRURfUlRDX0NMS19FWFRFUk5BTF9ERVRFQ1RfR0VUKHgpICgoKHgpICYgV0xBTl9ERVJJVkVEX1JUQ19DTEtfRVhURVJOQUxfREVURUNUX01BU0spID4+IFdMQU5fREVSSVZFRF9SVENfQ0xLX0VYVEVSTkFMX0RFVEVDVF9MU0IpCi0jZGVmaW5lIFdMQU5fREVSSVZFRF9SVENfQ0xLX0VYVEVSTkFMX0RFVEVDVF9TRVQoeCkgKCgoeCkgPDwgV0xBTl9ERVJJVkVEX1JUQ19DTEtfRVhURVJOQUxfREVURUNUX0xTQikgJiBXTEFOX0RFUklWRURfUlRDX0NMS19FWFRFUk5BTF9ERVRFQ1RfTUFTSykKLSNkZWZpbmUgV0xBTl9ERVJJVkVEX1JUQ19DTEtfRk9SQ0VfTVNCICAgICAgICAgICAxNwotI2RlZmluZSBXTEFOX0RFUklWRURfUlRDX0NMS19GT1JDRV9MU0IgICAgICAgICAgIDE2Ci0jZGVmaW5lIFdMQU5fREVSSVZFRF9SVENfQ0xLX0ZPUkNFX01BU0sgICAgICAgICAgMHgwMDAzMDAwMAotI2RlZmluZSBXTEFOX0RFUklWRURfUlRDX0NMS19GT1JDRV9HRVQoeCkgICAgICAgICgoKHgpICYgV0xBTl9ERVJJVkVEX1JUQ19DTEtfRk9SQ0VfTUFTSykgPj4gV0xBTl9ERVJJVkVEX1JUQ19DTEtfRk9SQ0VfTFNCKQotI2RlZmluZSBXTEFOX0RFUklWRURfUlRDX0NMS19GT1JDRV9TRVQoeCkgICAgICAgICgoKHgpIDw8IFdMQU5fREVSSVZFRF9SVENfQ0xLX0ZPUkNFX0xTQikgJiBXTEFOX0RFUklWRURfUlRDX0NMS19GT1JDRV9NQVNLKQotI2RlZmluZSBXTEFOX0RFUklWRURfUlRDX0NMS19QRVJJT0RfTVNCICAgICAgICAgIDE1Ci0jZGVmaW5lIFdMQU5fREVSSVZFRF9SVENfQ0xLX1BFUklPRF9MU0IgICAgICAgICAgMQotI2RlZmluZSBXTEFOX0RFUklWRURfUlRDX0NMS19QRVJJT0RfTUFTSyAgICAgICAgIDB4MDAwMGZmZmUKLSNkZWZpbmUgV0xBTl9ERVJJVkVEX1JUQ19DTEtfUEVSSU9EX0dFVCh4KSAgICAgICAoKCh4KSAmIFdMQU5fREVSSVZFRF9SVENfQ0xLX1BFUklPRF9NQVNLKSA+PiBXTEFOX0RFUklWRURfUlRDX0NMS19QRVJJT0RfTFNCKQotI2RlZmluZSBXTEFOX0RFUklWRURfUlRDX0NMS19QRVJJT0RfU0VUKHgpICAgICAgICgoKHgpIDw8IFdMQU5fREVSSVZFRF9SVENfQ0xLX1BFUklPRF9MU0IpICYgV0xBTl9ERVJJVkVEX1JUQ19DTEtfUEVSSU9EX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9TTFAzMl9NT0RFX0FERFJFU1MgICAgICAgICAgICAgICAweDAwMDAwMGY0Ci0jZGVmaW5lIE1BQ19QQ1VfU0xQMzJfTU9ERV9PRkZTRVQgICAgICAgICAgICAgICAgMHgwMDAwMDBmNAotI2RlZmluZSBNQUNfUENVX1NMUDMyX01PREVfVFNGMl9XUklURV9TVEFUVVNfTVNCIDI0Ci0jZGVmaW5lIE1BQ19QQ1VfU0xQMzJfTU9ERV9UU0YyX1dSSVRFX1NUQVRVU19MU0IgMjQKLSNkZWZpbmUgTUFDX1BDVV9TTFAzMl9NT0RFX1RTRjJfV1JJVEVfU1RBVFVTX01BU0sgMHgwMTAwMDAwMAotI2RlZmluZSBNQUNfUENVX1NMUDMyX01PREVfVFNGMl9XUklURV9TVEFUVVNfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9TTFAzMl9NT0RFX1RTRjJfV1JJVEVfU1RBVFVTX01BU0spID4+IE1BQ19QQ1VfU0xQMzJfTU9ERV9UU0YyX1dSSVRFX1NUQVRVU19MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfU0xQMzJfTU9ERV9UU0YyX1dSSVRFX1NUQVRVU19TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9TTFAzMl9NT0RFX1RTRjJfV1JJVEVfU1RBVFVTX0xTQikgJiBNQUNfUENVX1NMUDMyX01PREVfVFNGMl9XUklURV9TVEFUVVNfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9TTFAzMl9NT0RFX0ZPUkNFX0JJQVNfQkxPQ0tfT05fTVNCIDIzCi0jZGVmaW5lIE1BQ19QQ1VfU0xQMzJfTU9ERV9GT1JDRV9CSUFTX0JMT0NLX09OX0xTQiAyMwotI2RlZmluZSBNQUNfUENVX1NMUDMyX01PREVfRk9SQ0VfQklBU19CTE9DS19PTl9NQVNLIDB4MDA4MDAwMDAKLSNkZWZpbmUgTUFDX1BDVV9TTFAzMl9NT0RFX0ZPUkNFX0JJQVNfQkxPQ0tfT05fR0VUKHgpICgoKHgpICYgTUFDX1BDVV9TTFAzMl9NT0RFX0ZPUkNFX0JJQVNfQkxPQ0tfT05fTUFTSykgPj4gTUFDX1BDVV9TTFAzMl9NT0RFX0ZPUkNFX0JJQVNfQkxPQ0tfT05fTFNCKQotI2RlZmluZSBNQUNfUENVX1NMUDMyX01PREVfRk9SQ0VfQklBU19CTE9DS19PTl9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9TTFAzMl9NT0RFX0ZPUkNFX0JJQVNfQkxPQ0tfT05fTFNCKSAmIE1BQ19QQ1VfU0xQMzJfTU9ERV9GT1JDRV9CSUFTX0JMT0NLX09OX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfU0xQMzJfTU9ERV9ESVNBQkxFXzMyS0haX01TQiAgICAgMjIKLSNkZWZpbmUgTUFDX1BDVV9TTFAzMl9NT0RFX0RJU0FCTEVfMzJLSFpfTFNCICAgICAyMgotI2RlZmluZSBNQUNfUENVX1NMUDMyX01PREVfRElTQUJMRV8zMktIWl9NQVNLICAgIDB4MDA0MDAwMDAKLSNkZWZpbmUgTUFDX1BDVV9TTFAzMl9NT0RFX0RJU0FCTEVfMzJLSFpfR0VUKHgpICAoKCh4KSAmIE1BQ19QQ1VfU0xQMzJfTU9ERV9ESVNBQkxFXzMyS0haX01BU0spID4+IE1BQ19QQ1VfU0xQMzJfTU9ERV9ESVNBQkxFXzMyS0haX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9TTFAzMl9NT0RFX0RJU0FCTEVfMzJLSFpfU0VUKHgpICAoKCh4KSA8PCBNQUNfUENVX1NMUDMyX01PREVfRElTQUJMRV8zMktIWl9MU0IpICYgTUFDX1BDVV9TTFAzMl9NT0RFX0RJU0FCTEVfMzJLSFpfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9TTFAzMl9NT0RFX1RTRl9XUklURV9TVEFUVVNfTVNCICAyMQotI2RlZmluZSBNQUNfUENVX1NMUDMyX01PREVfVFNGX1dSSVRFX1NUQVRVU19MU0IgIDIxCi0jZGVmaW5lIE1BQ19QQ1VfU0xQMzJfTU9ERV9UU0ZfV1JJVEVfU1RBVFVTX01BU0sgMHgwMDIwMDAwMAotI2RlZmluZSBNQUNfUENVX1NMUDMyX01PREVfVFNGX1dSSVRFX1NUQVRVU19HRVQoeCkgKCgoeCkgJiBNQUNfUENVX1NMUDMyX01PREVfVFNGX1dSSVRFX1NUQVRVU19NQVNLKSA+PiBNQUNfUENVX1NMUDMyX01PREVfVFNGX1dSSVRFX1NUQVRVU19MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfU0xQMzJfTU9ERV9UU0ZfV1JJVEVfU1RBVFVTX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX1NMUDMyX01PREVfVFNGX1dSSVRFX1NUQVRVU19MU0IpICYgTUFDX1BDVV9TTFAzMl9NT0RFX1RTRl9XUklURV9TVEFUVVNfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9TTFAzMl9NT0RFX0VOQUJMRV9NU0IgICAgICAgICAgICAyMAotI2RlZmluZSBNQUNfUENVX1NMUDMyX01PREVfRU5BQkxFX0xTQiAgICAgICAgICAgIDIwCi0jZGVmaW5lIE1BQ19QQ1VfU0xQMzJfTU9ERV9FTkFCTEVfTUFTSyAgICAgICAgICAgMHgwMDEwMDAwMAotI2RlZmluZSBNQUNfUENVX1NMUDMyX01PREVfRU5BQkxFX0dFVCh4KSAgICAgICAgICgoKHgpICYgTUFDX1BDVV9TTFAzMl9NT0RFX0VOQUJMRV9NQVNLKSA+PiBNQUNfUENVX1NMUDMyX01PREVfRU5BQkxFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9TTFAzMl9NT0RFX0VOQUJMRV9TRVQoeCkgICAgICAgICAoKCh4KSA8PCBNQUNfUENVX1NMUDMyX01PREVfRU5BQkxFX0xTQikgJiBNQUNfUENVX1NMUDMyX01PREVfRU5BQkxFX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfU0xQMzJfTU9ERV9IQUxGX0NMS19MQVRFTkNZX01TQiAgMTkKLSNkZWZpbmUgTUFDX1BDVV9TTFAzMl9NT0RFX0hBTEZfQ0xLX0xBVEVOQ1lfTFNCICAwCi0jZGVmaW5lIE1BQ19QQ1VfU0xQMzJfTU9ERV9IQUxGX0NMS19MQVRFTkNZX01BU0sgMHgwMDBmZmZmZgotI2RlZmluZSBNQUNfUENVX1NMUDMyX01PREVfSEFMRl9DTEtfTEFURU5DWV9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX1NMUDMyX01PREVfSEFMRl9DTEtfTEFURU5DWV9NQVNLKSA+PiBNQUNfUENVX1NMUDMyX01PREVfSEFMRl9DTEtfTEFURU5DWV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfU0xQMzJfTU9ERV9IQUxGX0NMS19MQVRFTkNZX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX1NMUDMyX01PREVfSEFMRl9DTEtfTEFURU5DWV9MU0IpICYgTUFDX1BDVV9TTFAzMl9NT0RFX0hBTEZfQ0xLX0xBVEVOQ1lfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX1NMUDMyX1dBS0VfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDAwZjgKLSNkZWZpbmUgTUFDX1BDVV9TTFAzMl9XQUtFX09GRlNFVCAgICAgICAgICAgICAgICAweDAwMDAwMGY4Ci0jZGVmaW5lIE1BQ19QQ1VfU0xQMzJfV0FLRV9YVExfVElNRV9NU0IgICAgICAgICAgMTUKLSNkZWZpbmUgTUFDX1BDVV9TTFAzMl9XQUtFX1hUTF9USU1FX0xTQiAgICAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfU0xQMzJfV0FLRV9YVExfVElNRV9NQVNLICAgICAgICAgMHgwMDAwZmZmZgotI2RlZmluZSBNQUNfUENVX1NMUDMyX1dBS0VfWFRMX1RJTUVfR0VUKHgpICAgICAgICgoKHgpICYgTUFDX1BDVV9TTFAzMl9XQUtFX1hUTF9USU1FX01BU0spID4+IE1BQ19QQ1VfU0xQMzJfV0FLRV9YVExfVElNRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfU0xQMzJfV0FLRV9YVExfVElNRV9TRVQoeCkgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9TTFAzMl9XQUtFX1hUTF9USU1FX0xTQikgJiBNQUNfUENVX1NMUDMyX1dBS0VfWFRMX1RJTUVfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX1NMUDMyX0lOQ19BRERSRVNTICAgICAgICAgICAgICAgIDB4MDAwMDAwZmMKLSNkZWZpbmUgTUFDX1BDVV9TTFAzMl9JTkNfT0ZGU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMGZjCi0jZGVmaW5lIE1BQ19QQ1VfU0xQMzJfSU5DX1RTRl9JTkNfTVNCICAgICAgICAgICAgMTkKLSNkZWZpbmUgTUFDX1BDVV9TTFAzMl9JTkNfVFNGX0lOQ19MU0IgICAgICAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfU0xQMzJfSU5DX1RTRl9JTkNfTUFTSyAgICAgICAgICAgMHgwMDBmZmZmZgotI2RlZmluZSBNQUNfUENVX1NMUDMyX0lOQ19UU0ZfSU5DX0dFVCh4KSAgICAgICAgICgoKHgpICYgTUFDX1BDVV9TTFAzMl9JTkNfVFNGX0lOQ19NQVNLKSA+PiBNQUNfUENVX1NMUDMyX0lOQ19UU0ZfSU5DX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9TTFAzMl9JTkNfVFNGX0lOQ19TRVQoeCkgICAgICAgICAoKCh4KSA8PCBNQUNfUENVX1NMUDMyX0lOQ19UU0ZfSU5DX0xTQikgJiBNQUNfUENVX1NMUDMyX0lOQ19UU0ZfSU5DX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9TTFBfTUlCMV9BRERSRVNTICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCi0jZGVmaW5lIE1BQ19QQ1VfU0xQX01JQjFfT0ZGU0VUICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAotI2RlZmluZSBNQUNfUENVX1NMUF9NSUIxX1NMRUVQX0NOVF9NU0IgICAgICAgICAgIDMxCi0jZGVmaW5lIE1BQ19QQ1VfU0xQX01JQjFfU0xFRVBfQ05UX0xTQiAgICAgICAgICAgMAotI2RlZmluZSBNQUNfUENVX1NMUF9NSUIxX1NMRUVQX0NOVF9NQVNLICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgTUFDX1BDVV9TTFBfTUlCMV9TTEVFUF9DTlRfR0VUKHgpICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfU0xQX01JQjFfU0xFRVBfQ05UX01BU0spID4+IE1BQ19QQ1VfU0xQX01JQjFfU0xFRVBfQ05UX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9TTFBfTUlCMV9TTEVFUF9DTlRfU0VUKHgpICAgICAgICAoKCh4KSA8PCBNQUNfUENVX1NMUF9NSUIxX1NMRUVQX0NOVF9MU0IpICYgTUFDX1BDVV9TTFBfTUlCMV9TTEVFUF9DTlRfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX1NMUF9NSUIyX0FERFJFU1MgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDQKLSNkZWZpbmUgTUFDX1BDVV9TTFBfTUlCMl9PRkZTRVQgICAgICAgICAgICAgICAgICAweDAwMDAwMTA0Ci0jZGVmaW5lIE1BQ19QQ1VfU0xQX01JQjJfQ1lDTEVfQ05UX01TQiAgICAgICAgICAgMzEKLSNkZWZpbmUgTUFDX1BDVV9TTFBfTUlCMl9DWUNMRV9DTlRfTFNCICAgICAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfU0xQX01JQjJfQ1lDTEVfQ05UX01BU0sgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBNQUNfUENVX1NMUF9NSUIyX0NZQ0xFX0NOVF9HRVQoeCkgICAgICAgICgoKHgpICYgTUFDX1BDVV9TTFBfTUlCMl9DWUNMRV9DTlRfTUFTSykgPj4gTUFDX1BDVV9TTFBfTUlCMl9DWUNMRV9DTlRfTFNCKQotI2RlZmluZSBNQUNfUENVX1NMUF9NSUIyX0NZQ0xFX0NOVF9TRVQoeCkgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfU0xQX01JQjJfQ1lDTEVfQ05UX0xTQikgJiBNQUNfUENVX1NMUF9NSUIyX0NZQ0xFX0NOVF9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfU0xQX01JQjNfQUREUkVTUyAgICAgICAgICAgICAgICAgMHgwMDAwMDEwOAotI2RlZmluZSBNQUNfUENVX1NMUF9NSUIzX09GRlNFVCAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDgKLSNkZWZpbmUgTUFDX1BDVV9TTFBfTUlCM19QRU5ESU5HX01TQiAgICAgICAgICAgICAxCi0jZGVmaW5lIE1BQ19QQ1VfU0xQX01JQjNfUEVORElOR19MU0IgICAgICAgICAgICAgMQotI2RlZmluZSBNQUNfUENVX1NMUF9NSUIzX1BFTkRJTkdfTUFTSyAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgTUFDX1BDVV9TTFBfTUlCM19QRU5ESU5HX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfU0xQX01JQjNfUEVORElOR19NQVNLKSA+PiBNQUNfUENVX1NMUF9NSUIzX1BFTkRJTkdfTFNCKQotI2RlZmluZSBNQUNfUENVX1NMUF9NSUIzX1BFTkRJTkdfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfU0xQX01JQjNfUEVORElOR19MU0IpICYgTUFDX1BDVV9TTFBfTUlCM19QRU5ESU5HX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfU0xQX01JQjNfQ0xSX0NOVF9NU0IgICAgICAgICAgICAgMAotI2RlZmluZSBNQUNfUENVX1NMUF9NSUIzX0NMUl9DTlRfTFNCICAgICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9TTFBfTUlCM19DTFJfQ05UX01BU0sgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIE1BQ19QQ1VfU0xQX01JQjNfQ0xSX0NOVF9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBNQUNfUENVX1NMUF9NSUIzX0NMUl9DTlRfTUFTSykgPj4gTUFDX1BDVV9TTFBfTUlCM19DTFJfQ05UX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9TTFBfTUlCM19DTFJfQ05UX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBNQUNfUENVX1NMUF9NSUIzX0NMUl9DTlRfTFNCKSAmIE1BQ19QQ1VfU0xQX01JQjNfQ0xSX0NOVF9NQVNLKQotCi0jZGVmaW5lIFdMQU5fUE9XRVJfUkVHX0FERFJFU1MgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwYwotI2RlZmluZSBXTEFOX1BPV0VSX1JFR19PRkZTRVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMGMKLSNkZWZpbmUgV0xBTl9QT1dFUl9SRUdfU0xFRVBfTUFLRV9OX0JSRUFLX0VOX01TQiAxNQotI2RlZmluZSBXTEFOX1BPV0VSX1JFR19TTEVFUF9NQUtFX05fQlJFQUtfRU5fTFNCIDE1Ci0jZGVmaW5lIFdMQU5fUE9XRVJfUkVHX1NMRUVQX01BS0VfTl9CUkVBS19FTl9NQVNLIDB4MDAwMDgwMDAKLSNkZWZpbmUgV0xBTl9QT1dFUl9SRUdfU0xFRVBfTUFLRV9OX0JSRUFLX0VOX0dFVCh4KSAoKCh4KSAmIFdMQU5fUE9XRVJfUkVHX1NMRUVQX01BS0VfTl9CUkVBS19FTl9NQVNLKSA+PiBXTEFOX1BPV0VSX1JFR19TTEVFUF9NQUtFX05fQlJFQUtfRU5fTFNCKQotI2RlZmluZSBXTEFOX1BPV0VSX1JFR19TTEVFUF9NQUtFX05fQlJFQUtfRU5fU0VUKHgpICgoKHgpIDw8IFdMQU5fUE9XRVJfUkVHX1NMRUVQX01BS0VfTl9CUkVBS19FTl9MU0IpICYgV0xBTl9QT1dFUl9SRUdfU0xFRVBfTUFLRV9OX0JSRUFLX0VOX01BU0spCi0jZGVmaW5lIFdMQU5fUE9XRVJfUkVHX0RFQlVHX0VOX01TQiAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgV0xBTl9QT1dFUl9SRUdfREVCVUdfRU5fTFNCICAgICAgICAgICAgICAxNAotI2RlZmluZSBXTEFOX1BPV0VSX1JFR19ERUJVR19FTl9NQVNLICAgICAgICAgICAgIDB4MDAwMDQwMDAKLSNkZWZpbmUgV0xBTl9QT1dFUl9SRUdfREVCVUdfRU5fR0VUKHgpICAgICAgICAgICAoKCh4KSAmIFdMQU5fUE9XRVJfUkVHX0RFQlVHX0VOX01BU0spID4+IFdMQU5fUE9XRVJfUkVHX0RFQlVHX0VOX0xTQikKLSNkZWZpbmUgV0xBTl9QT1dFUl9SRUdfREVCVUdfRU5fU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCBXTEFOX1BPV0VSX1JFR19ERUJVR19FTl9MU0IpICYgV0xBTl9QT1dFUl9SRUdfREVCVUdfRU5fTUFTSykKLSNkZWZpbmUgV0xBTl9QT1dFUl9SRUdfV0xBTl9CQl9QV0RfRU5fTVNCICAgICAgICAxMwotI2RlZmluZSBXTEFOX1BPV0VSX1JFR19XTEFOX0JCX1BXRF9FTl9MU0IgICAgICAgIDEzCi0jZGVmaW5lIFdMQU5fUE9XRVJfUkVHX1dMQU5fQkJfUFdEX0VOX01BU0sgICAgICAgMHgwMDAwMjAwMAotI2RlZmluZSBXTEFOX1BPV0VSX1JFR19XTEFOX0JCX1BXRF9FTl9HRVQoeCkgICAgICgoKHgpICYgV0xBTl9QT1dFUl9SRUdfV0xBTl9CQl9QV0RfRU5fTUFTSykgPj4gV0xBTl9QT1dFUl9SRUdfV0xBTl9CQl9QV0RfRU5fTFNCKQotI2RlZmluZSBXTEFOX1BPV0VSX1JFR19XTEFOX0JCX1BXRF9FTl9TRVQoeCkgICAgICgoKHgpIDw8IFdMQU5fUE9XRVJfUkVHX1dMQU5fQkJfUFdEX0VOX0xTQikgJiBXTEFOX1BPV0VSX1JFR19XTEFOX0JCX1BXRF9FTl9NQVNLKQotI2RlZmluZSBXTEFOX1BPV0VSX1JFR19XTEFOX01BQ19QV0RfRU5fTVNCICAgICAgIDEyCi0jZGVmaW5lIFdMQU5fUE9XRVJfUkVHX1dMQU5fTUFDX1BXRF9FTl9MU0IgICAgICAgMTIKLSNkZWZpbmUgV0xBTl9QT1dFUl9SRUdfV0xBTl9NQUNfUFdEX0VOX01BU0sgICAgICAweDAwMDAxMDAwCi0jZGVmaW5lIFdMQU5fUE9XRVJfUkVHX1dMQU5fTUFDX1BXRF9FTl9HRVQoeCkgICAgKCgoeCkgJiBXTEFOX1BPV0VSX1JFR19XTEFOX01BQ19QV0RfRU5fTUFTSykgPj4gV0xBTl9QT1dFUl9SRUdfV0xBTl9NQUNfUFdEX0VOX0xTQikKLSNkZWZpbmUgV0xBTl9QT1dFUl9SRUdfV0xBTl9NQUNfUFdEX0VOX1NFVCh4KSAgICAoKCh4KSA8PCBXTEFOX1BPV0VSX1JFR19XTEFOX01BQ19QV0RfRU5fTFNCKSAmIFdMQU5fUE9XRVJfUkVHX1dMQU5fTUFDX1BXRF9FTl9NQVNLKQotI2RlZmluZSBXTEFOX1BPV0VSX1JFR19WTFZMX01TQiAgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFdMQU5fUE9XRVJfUkVHX1ZMVkxfTFNCICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBXTEFOX1BPV0VSX1JFR19WTFZMX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDBmMDAKLSNkZWZpbmUgV0xBTl9QT1dFUl9SRUdfVkxWTF9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIFdMQU5fUE9XRVJfUkVHX1ZMVkxfTUFTSykgPj4gV0xBTl9QT1dFUl9SRUdfVkxWTF9MU0IpCi0jZGVmaW5lIFdMQU5fUE9XRVJfUkVHX1ZMVkxfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9QT1dFUl9SRUdfVkxWTF9MU0IpICYgV0xBTl9QT1dFUl9SRUdfVkxWTF9NQVNLKQotI2RlZmluZSBXTEFOX1BPV0VSX1JFR19DUFVfSU5UX0VOQUJMRV9NU0IgICAgICAgIDcKLSNkZWZpbmUgV0xBTl9QT1dFUl9SRUdfQ1BVX0lOVF9FTkFCTEVfTFNCICAgICAgICA3Ci0jZGVmaW5lIFdMQU5fUE9XRVJfUkVHX0NQVV9JTlRfRU5BQkxFX01BU0sgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBXTEFOX1BPV0VSX1JFR19DUFVfSU5UX0VOQUJMRV9HRVQoeCkgICAgICgoKHgpICYgV0xBTl9QT1dFUl9SRUdfQ1BVX0lOVF9FTkFCTEVfTUFTSykgPj4gV0xBTl9QT1dFUl9SRUdfQ1BVX0lOVF9FTkFCTEVfTFNCKQotI2RlZmluZSBXTEFOX1BPV0VSX1JFR19DUFVfSU5UX0VOQUJMRV9TRVQoeCkgICAgICgoKHgpIDw8IFdMQU5fUE9XRVJfUkVHX0NQVV9JTlRfRU5BQkxFX0xTQikgJiBXTEFOX1BPV0VSX1JFR19DUFVfSU5UX0VOQUJMRV9NQVNLKQotI2RlZmluZSBXTEFOX1BPV0VSX1JFR19XTEFOX0lTT19ESVNfTVNCICAgICAgICAgIDYKLSNkZWZpbmUgV0xBTl9QT1dFUl9SRUdfV0xBTl9JU09fRElTX0xTQiAgICAgICAgICA2Ci0jZGVmaW5lIFdMQU5fUE9XRVJfUkVHX1dMQU5fSVNPX0RJU19NQVNLICAgICAgICAgMHgwMDAwMDA0MAotI2RlZmluZSBXTEFOX1BPV0VSX1JFR19XTEFOX0lTT19ESVNfR0VUKHgpICAgICAgICgoKHgpICYgV0xBTl9QT1dFUl9SRUdfV0xBTl9JU09fRElTX01BU0spID4+IFdMQU5fUE9XRVJfUkVHX1dMQU5fSVNPX0RJU19MU0IpCi0jZGVmaW5lIFdMQU5fUE9XRVJfUkVHX1dMQU5fSVNPX0RJU19TRVQoeCkgICAgICAgKCgoeCkgPDwgV0xBTl9QT1dFUl9SRUdfV0xBTl9JU09fRElTX0xTQikgJiBXTEFOX1BPV0VSX1JFR19XTEFOX0lTT19ESVNfTUFTSykKLSNkZWZpbmUgV0xBTl9QT1dFUl9SRUdfV0xBTl9JU09fQ05UTF9NU0IgICAgICAgICA1Ci0jZGVmaW5lIFdMQU5fUE9XRVJfUkVHX1dMQU5fSVNPX0NOVExfTFNCICAgICAgICAgNQotI2RlZmluZSBXTEFOX1BPV0VSX1JFR19XTEFOX0lTT19DTlRMX01BU0sgICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgV0xBTl9QT1dFUl9SRUdfV0xBTl9JU09fQ05UTF9HRVQoeCkgICAgICAoKCh4KSAmIFdMQU5fUE9XRVJfUkVHX1dMQU5fSVNPX0NOVExfTUFTSykgPj4gV0xBTl9QT1dFUl9SRUdfV0xBTl9JU09fQ05UTF9MU0IpCi0jZGVmaW5lIFdMQU5fUE9XRVJfUkVHX1dMQU5fSVNPX0NOVExfU0VUKHgpICAgICAgKCgoeCkgPDwgV0xBTl9QT1dFUl9SRUdfV0xBTl9JU09fQ05UTF9MU0IpICYgV0xBTl9QT1dFUl9SRUdfV0xBTl9JU09fQ05UTF9NQVNLKQotI2RlZmluZSBXTEFOX1BPV0VSX1JFR19SQURJT19QV0RfRU5fTVNCICAgICAgICAgIDQKLSNkZWZpbmUgV0xBTl9QT1dFUl9SRUdfUkFESU9fUFdEX0VOX0xTQiAgICAgICAgICA0Ci0jZGVmaW5lIFdMQU5fUE9XRVJfUkVHX1JBRElPX1BXRF9FTl9NQVNLICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBXTEFOX1BPV0VSX1JFR19SQURJT19QV0RfRU5fR0VUKHgpICAgICAgICgoKHgpICYgV0xBTl9QT1dFUl9SRUdfUkFESU9fUFdEX0VOX01BU0spID4+IFdMQU5fUE9XRVJfUkVHX1JBRElPX1BXRF9FTl9MU0IpCi0jZGVmaW5lIFdMQU5fUE9XRVJfUkVHX1JBRElPX1BXRF9FTl9TRVQoeCkgICAgICAgKCgoeCkgPDwgV0xBTl9QT1dFUl9SRUdfUkFESU9fUFdEX0VOX0xTQikgJiBXTEFOX1BPV0VSX1JFR19SQURJT19QV0RfRU5fTUFTSykKLSNkZWZpbmUgV0xBTl9QT1dFUl9SRUdfU09DX0lTT19FTl9NU0IgICAgICAgICAgICAzCi0jZGVmaW5lIFdMQU5fUE9XRVJfUkVHX1NPQ19JU09fRU5fTFNCICAgICAgICAgICAgMwotI2RlZmluZSBXTEFOX1BPV0VSX1JFR19TT0NfSVNPX0VOX01BU0sgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgV0xBTl9QT1dFUl9SRUdfU09DX0lTT19FTl9HRVQoeCkgICAgICAgICAoKCh4KSAmIFdMQU5fUE9XRVJfUkVHX1NPQ19JU09fRU5fTUFTSykgPj4gV0xBTl9QT1dFUl9SRUdfU09DX0lTT19FTl9MU0IpCi0jZGVmaW5lIFdMQU5fUE9XRVJfUkVHX1NPQ19JU09fRU5fU0VUKHgpICAgICAgICAgKCgoeCkgPDwgV0xBTl9QT1dFUl9SRUdfU09DX0lTT19FTl9MU0IpICYgV0xBTl9QT1dFUl9SRUdfU09DX0lTT19FTl9NQVNLKQotI2RlZmluZSBXTEFOX1BPV0VSX1JFR19XTEFOX0lTT19FTl9NU0IgICAgICAgICAgIDIKLSNkZWZpbmUgV0xBTl9QT1dFUl9SRUdfV0xBTl9JU09fRU5fTFNCICAgICAgICAgICAyCi0jZGVmaW5lIFdMQU5fUE9XRVJfUkVHX1dMQU5fSVNPX0VOX01BU0sgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBXTEFOX1BPV0VSX1JFR19XTEFOX0lTT19FTl9HRVQoeCkgICAgICAgICgoKHgpICYgV0xBTl9QT1dFUl9SRUdfV0xBTl9JU09fRU5fTUFTSykgPj4gV0xBTl9QT1dFUl9SRUdfV0xBTl9JU09fRU5fTFNCKQotI2RlZmluZSBXTEFOX1BPV0VSX1JFR19XTEFOX0lTT19FTl9TRVQoeCkgICAgICAgICgoKHgpIDw8IFdMQU5fUE9XRVJfUkVHX1dMQU5fSVNPX0VOX0xTQikgJiBXTEFOX1BPV0VSX1JFR19XTEFOX0lTT19FTl9NQVNLKQotI2RlZmluZSBXTEFOX1BPV0VSX1JFR19XTEFOX1BXRF9FTl9NU0IgICAgICAgICAgIDEKLSNkZWZpbmUgV0xBTl9QT1dFUl9SRUdfV0xBTl9QV0RfRU5fTFNCICAgICAgICAgICAxCi0jZGVmaW5lIFdMQU5fUE9XRVJfUkVHX1dMQU5fUFdEX0VOX01BU0sgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBXTEFOX1BPV0VSX1JFR19XTEFOX1BXRF9FTl9HRVQoeCkgICAgICAgICgoKHgpICYgV0xBTl9QT1dFUl9SRUdfV0xBTl9QV0RfRU5fTUFTSykgPj4gV0xBTl9QT1dFUl9SRUdfV0xBTl9QV0RfRU5fTFNCKQotI2RlZmluZSBXTEFOX1BPV0VSX1JFR19XTEFOX1BXRF9FTl9TRVQoeCkgICAgICAgICgoKHgpIDw8IFdMQU5fUE9XRVJfUkVHX1dMQU5fUFdEX0VOX0xTQikgJiBXTEFOX1BPV0VSX1JFR19XTEFOX1BXRF9FTl9NQVNLKQotI2RlZmluZSBXTEFOX1BPV0VSX1JFR19QT1dFUl9FTl9NU0IgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9QT1dFUl9SRUdfUE9XRVJfRU5fTFNCICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fUE9XRVJfUkVHX1BPV0VSX0VOX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBXTEFOX1BPV0VSX1JFR19QT1dFUl9FTl9HRVQoeCkgICAgICAgICAgICgoKHgpICYgV0xBTl9QT1dFUl9SRUdfUE9XRVJfRU5fTUFTSykgPj4gV0xBTl9QT1dFUl9SRUdfUE9XRVJfRU5fTFNCKQotI2RlZmluZSBXTEFOX1BPV0VSX1JFR19QT1dFUl9FTl9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFdMQU5fUE9XRVJfUkVHX1BPV0VSX0VOX0xTQikgJiBXTEFOX1BPV0VSX1JFR19QT1dFUl9FTl9NQVNLKQotCi0jZGVmaW5lIFdMQU5fQ09SRV9DTEtfQ1RSTF9BRERSRVNTICAgICAgICAgICAgICAgMHgwMDAwMDExMAotI2RlZmluZSBXTEFOX0NPUkVfQ0xLX0NUUkxfT0ZGU0VUICAgICAgICAgICAgICAgIDB4MDAwMDAxMTAKLSNkZWZpbmUgV0xBTl9DT1JFX0NMS19DVFJMX0RJVl9NU0IgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFdMQU5fQ09SRV9DTEtfQ1RSTF9ESVZfTFNCICAgICAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX0NPUkVfQ0xLX0NUUkxfRElWX01BU0sgICAgICAgICAgICAgIDB4MDAwMDAwMDcKLSNkZWZpbmUgV0xBTl9DT1JFX0NMS19DVFJMX0RJVl9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFdMQU5fQ09SRV9DTEtfQ1RSTF9ESVZfTUFTSykgPj4gV0xBTl9DT1JFX0NMS19DVFJMX0RJVl9MU0IpCi0jZGVmaW5lIFdMQU5fQ09SRV9DTEtfQ1RSTF9ESVZfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9DT1JFX0NMS19DVFJMX0RJVl9MU0IpICYgV0xBTl9DT1JFX0NMS19DVFJMX0RJVl9NQVNLKQotCi0jZGVmaW5lIFdMQU5fR1BJT19XQUtFVVBfQ09OVFJPTF9BRERSRVNTICAgICAgICAgMHgwMDAwMDExNAotI2RlZmluZSBXTEFOX0dQSU9fV0FLRVVQX0NPTlRST0xfT0ZGU0VUICAgICAgICAgIDB4MDAwMDAxMTQKLSNkZWZpbmUgV0xBTl9HUElPX1dBS0VVUF9DT05UUk9MX0VOQUJMRV9NU0IgICAgICAwCi0jZGVmaW5lIFdMQU5fR1BJT19XQUtFVVBfQ09OVFJPTF9FTkFCTEVfTFNCICAgICAgMAotI2RlZmluZSBXTEFOX0dQSU9fV0FLRVVQX0NPTlRST0xfRU5BQkxFX01BU0sgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgV0xBTl9HUElPX1dBS0VVUF9DT05UUk9MX0VOQUJMRV9HRVQoeCkgICAoKCh4KSAmIFdMQU5fR1BJT19XQUtFVVBfQ09OVFJPTF9FTkFCTEVfTUFTSykgPj4gV0xBTl9HUElPX1dBS0VVUF9DT05UUk9MX0VOQUJMRV9MU0IpCi0jZGVmaW5lIFdMQU5fR1BJT19XQUtFVVBfQ09OVFJPTF9FTkFCTEVfU0VUKHgpICAgKCgoeCkgPDwgV0xBTl9HUElPX1dBS0VVUF9DT05UUk9MX0VOQUJMRV9MU0IpICYgV0xBTl9HUElPX1dBS0VVUF9DT05UUk9MX0VOQUJMRV9NQVNLKQotCi0jZGVmaW5lIEhUX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDExOAotI2RlZmluZSBIVF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMTgKLSNkZWZpbmUgSFRfTU9ERV9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEhUX01PREVfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBIVF9NT0RFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgSFRfTU9ERV9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIEhUX01PREVfTUFTSykgPj4gSFRfTU9ERV9MU0IpCi0jZGVmaW5lIEhUX01PREVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgSFRfTU9ERV9MU0IpICYgSFRfTU9ERV9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfVFNGX0wzMl9BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMDExYwotI2RlZmluZSBNQUNfUENVX1RTRl9MMzJfT0ZGU0VUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMWMKLSNkZWZpbmUgTUFDX1BDVV9UU0ZfTDMyX1ZBTFVFX01TQiAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBNQUNfUENVX1RTRl9MMzJfVkFMVUVfTFNCICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9UU0ZfTDMyX1ZBTFVFX01BU0sgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfVFNGX0wzMl9WQUxVRV9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBNQUNfUENVX1RTRl9MMzJfVkFMVUVfTUFTSykgPj4gTUFDX1BDVV9UU0ZfTDMyX1ZBTFVFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9UU0ZfTDMyX1ZBTFVFX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBNQUNfUENVX1RTRl9MMzJfVkFMVUVfTFNCKSAmIE1BQ19QQ1VfVFNGX0wzMl9WQUxVRV9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfVFNGX1UzMl9BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMDEyMAotI2RlZmluZSBNQUNfUENVX1RTRl9VMzJfT0ZGU0VUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMjAKLSNkZWZpbmUgTUFDX1BDVV9UU0ZfVTMyX1ZBTFVFX01TQiAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBNQUNfUENVX1RTRl9VMzJfVkFMVUVfTFNCICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9UU0ZfVTMyX1ZBTFVFX01BU0sgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfVFNGX1UzMl9WQUxVRV9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBNQUNfUENVX1RTRl9VMzJfVkFMVUVfTUFTSykgPj4gTUFDX1BDVV9UU0ZfVTMyX1ZBTFVFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9UU0ZfVTMyX1ZBTFVFX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBNQUNfUENVX1RTRl9VMzJfVkFMVUVfTFNCKSAmIE1BQ19QQ1VfVFNGX1UzMl9WQUxVRV9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfV0JUSU1FUl9BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMDEyNAotI2RlZmluZSBNQUNfUENVX1dCVElNRVJfT0ZGU0VUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMjQKLSNkZWZpbmUgTUFDX1BDVV9XQlRJTUVSX1ZBTFVFX01TQiAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBNQUNfUENVX1dCVElNRVJfVkFMVUVfTFNCICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9XQlRJTUVSX1ZBTFVFX01BU0sgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfV0JUSU1FUl9WQUxVRV9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBNQUNfUENVX1dCVElNRVJfVkFMVUVfTUFTSykgPj4gTUFDX1BDVV9XQlRJTUVSX1ZBTFVFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9XQlRJTUVSX1ZBTFVFX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBNQUNfUENVX1dCVElNRVJfVkFMVUVfTFNCKSAmIE1BQ19QQ1VfV0JUSU1FUl9WQUxVRV9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfR0VORVJJQ19USU1FUlNfQUREUkVTUyAgICAgICAgICAgMHgwMDAwMDE0MAotI2RlZmluZSBNQUNfUENVX0dFTkVSSUNfVElNRVJTX09GRlNFVCAgICAgICAgICAgIDB4MDAwMDAxNDAKLSNkZWZpbmUgTUFDX1BDVV9HRU5FUklDX1RJTUVSU19EQVRBX01TQiAgICAgICAgICAzMQotI2RlZmluZSBNQUNfUENVX0dFTkVSSUNfVElNRVJTX0RBVEFfTFNCICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9HRU5FUklDX1RJTUVSU19EQVRBX01BU0sgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfR0VORVJJQ19USU1FUlNfREFUQV9HRVQoeCkgICAgICAgKCgoeCkgJiBNQUNfUENVX0dFTkVSSUNfVElNRVJTX0RBVEFfTUFTSykgPj4gTUFDX1BDVV9HRU5FUklDX1RJTUVSU19EQVRBX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9HRU5FUklDX1RJTUVSU19EQVRBX1NFVCh4KSAgICAgICAoKCh4KSA8PCBNQUNfUENVX0dFTkVSSUNfVElNRVJTX0RBVEFfTFNCKSAmIE1BQ19QQ1VfR0VORVJJQ19USU1FUlNfREFUQV9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfR0VORVJJQ19USU1FUlNfTU9ERV9BRERSRVNTICAgICAgMHgwMDAwMDE4MAotI2RlZmluZSBNQUNfUENVX0dFTkVSSUNfVElNRVJTX01PREVfT0ZGU0VUICAgICAgIDB4MDAwMDAxODAKLSNkZWZpbmUgTUFDX1BDVV9HRU5FUklDX1RJTUVSU19NT0RFX0VOQUJMRV9NU0IgICAxNQotI2RlZmluZSBNQUNfUENVX0dFTkVSSUNfVElNRVJTX01PREVfRU5BQkxFX0xTQiAgIDAKLSNkZWZpbmUgTUFDX1BDVV9HRU5FUklDX1RJTUVSU19NT0RFX0VOQUJMRV9NQVNLICAweDAwMDBmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfR0VORVJJQ19USU1FUlNfTU9ERV9FTkFCTEVfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9HRU5FUklDX1RJTUVSU19NT0RFX0VOQUJMRV9NQVNLKSA+PiBNQUNfUENVX0dFTkVSSUNfVElNRVJTX01PREVfRU5BQkxFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9HRU5FUklDX1RJTUVSU19NT0RFX0VOQUJMRV9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9HRU5FUklDX1RJTUVSU19NT0RFX0VOQUJMRV9MU0IpICYgTUFDX1BDVV9HRU5FUklDX1RJTUVSU19NT0RFX0VOQUJMRV9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfR0VORVJJQ19USU1FUlMyX0FERFJFU1MgICAgICAgICAgMHgwMDAwMDFjMAotI2RlZmluZSBNQUNfUENVX0dFTkVSSUNfVElNRVJTMl9PRkZTRVQgICAgICAgICAgIDB4MDAwMDAxYzAKLSNkZWZpbmUgTUFDX1BDVV9HRU5FUklDX1RJTUVSUzJfREFUQV9NU0IgICAgICAgICAzMQotI2RlZmluZSBNQUNfUENVX0dFTkVSSUNfVElNRVJTMl9EQVRBX0xTQiAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9HRU5FUklDX1RJTUVSUzJfREFUQV9NQVNLICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfR0VORVJJQ19USU1FUlMyX0RBVEFfR0VUKHgpICAgICAgKCgoeCkgJiBNQUNfUENVX0dFTkVSSUNfVElNRVJTMl9EQVRBX01BU0spID4+IE1BQ19QQ1VfR0VORVJJQ19USU1FUlMyX0RBVEFfTFNCKQotI2RlZmluZSBNQUNfUENVX0dFTkVSSUNfVElNRVJTMl9EQVRBX1NFVCh4KSAgICAgICgoKHgpIDw8IE1BQ19QQ1VfR0VORVJJQ19USU1FUlMyX0RBVEFfTFNCKSAmIE1BQ19QQ1VfR0VORVJJQ19USU1FUlMyX0RBVEFfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX0dFTkVSSUNfVElNRVJTX01PREUyX0FERFJFU1MgICAgIDB4MDAwMDAyMDAKLSNkZWZpbmUgTUFDX1BDVV9HRU5FUklDX1RJTUVSU19NT0RFMl9PRkZTRVQgICAgICAweDAwMDAwMjAwCi0jZGVmaW5lIE1BQ19QQ1VfR0VORVJJQ19USU1FUlNfTU9ERTJfRU5BQkxFX01TQiAgMTUKLSNkZWZpbmUgTUFDX1BDVV9HRU5FUklDX1RJTUVSU19NT0RFMl9FTkFCTEVfTFNCICAwCi0jZGVmaW5lIE1BQ19QQ1VfR0VORVJJQ19USU1FUlNfTU9ERTJfRU5BQkxFX01BU0sgMHgwMDAwZmZmZgotI2RlZmluZSBNQUNfUENVX0dFTkVSSUNfVElNRVJTX01PREUyX0VOQUJMRV9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0dFTkVSSUNfVElNRVJTX01PREUyX0VOQUJMRV9NQVNLKSA+PiBNQUNfUENVX0dFTkVSSUNfVElNRVJTX01PREUyX0VOQUJMRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfR0VORVJJQ19USU1FUlNfTU9ERTJfRU5BQkxFX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0dFTkVSSUNfVElNRVJTX01PREUyX0VOQUJMRV9MU0IpICYgTUFDX1BDVV9HRU5FUklDX1RJTUVSU19NT0RFMl9FTkFCTEVfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX1NMUDFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDQKLSNkZWZpbmUgTUFDX1BDVV9TTFAxX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjA0Ci0jZGVmaW5lIE1BQ19QQ1VfU0xQMV9BU1NVTUVfRFRJTV9NU0IgICAgICAgICAgICAgMTkKLSNkZWZpbmUgTUFDX1BDVV9TTFAxX0FTU1VNRV9EVElNX0xTQiAgICAgICAgICAgICAxOQotI2RlZmluZSBNQUNfUENVX1NMUDFfQVNTVU1FX0RUSU1fTUFTSyAgICAgICAgICAgIDB4MDAwODAwMDAKLSNkZWZpbmUgTUFDX1BDVV9TTFAxX0FTU1VNRV9EVElNX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfU0xQMV9BU1NVTUVfRFRJTV9NQVNLKSA+PiBNQUNfUENVX1NMUDFfQVNTVU1FX0RUSU1fTFNCKQotI2RlZmluZSBNQUNfUENVX1NMUDFfQVNTVU1FX0RUSU1fU0VUKHgpICAgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfU0xQMV9BU1NVTUVfRFRJTV9MU0IpICYgTUFDX1BDVV9TTFAxX0FTU1VNRV9EVElNX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfU0xQMV9DQUJfVElNRU9VVF9NU0IgICAgICAgICAgICAgMTUKLSNkZWZpbmUgTUFDX1BDVV9TTFAxX0NBQl9USU1FT1VUX0xTQiAgICAgICAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfU0xQMV9DQUJfVElNRU9VVF9NQVNLICAgICAgICAgICAgMHgwMDAwZmZmZgotI2RlZmluZSBNQUNfUENVX1NMUDFfQ0FCX1RJTUVPVVRfR0VUKHgpICAgICAgICAgICgoKHgpICYgTUFDX1BDVV9TTFAxX0NBQl9USU1FT1VUX01BU0spID4+IE1BQ19QQ1VfU0xQMV9DQUJfVElNRU9VVF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfU0xQMV9DQUJfVElNRU9VVF9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9TTFAxX0NBQl9USU1FT1VUX0xTQikgJiBNQUNfUENVX1NMUDFfQ0FCX1RJTUVPVVRfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX1NMUDJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDgKLSNkZWZpbmUgTUFDX1BDVV9TTFAyX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjA4Ci0jZGVmaW5lIE1BQ19QQ1VfU0xQMl9CRUFDT05fVElNRU9VVF9NU0IgICAgICAgICAgMTUKLSNkZWZpbmUgTUFDX1BDVV9TTFAyX0JFQUNPTl9USU1FT1VUX0xTQiAgICAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfU0xQMl9CRUFDT05fVElNRU9VVF9NQVNLICAgICAgICAgMHgwMDAwZmZmZgotI2RlZmluZSBNQUNfUENVX1NMUDJfQkVBQ09OX1RJTUVPVVRfR0VUKHgpICAgICAgICgoKHgpICYgTUFDX1BDVV9TTFAyX0JFQUNPTl9USU1FT1VUX01BU0spID4+IE1BQ19QQ1VfU0xQMl9CRUFDT05fVElNRU9VVF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfU0xQMl9CRUFDT05fVElNRU9VVF9TRVQoeCkgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9TTFAyX0JFQUNPTl9USU1FT1VUX0xTQikgJiBNQUNfUENVX1NMUDJfQkVBQ09OX1RJTUVPVVRfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX1JFU0VUX1RTRl9BRERSRVNTICAgICAgICAgICAgICAgIDB4MDAwMDAyMGMKLSNkZWZpbmUgTUFDX1BDVV9SRVNFVF9UU0ZfT0ZGU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMjBjCi0jZGVmaW5lIE1BQ19QQ1VfUkVTRVRfVFNGX09ORV9TSE9UMl9NU0IgICAgICAgICAgMjUKLSNkZWZpbmUgTUFDX1BDVV9SRVNFVF9UU0ZfT05FX1NIT1QyX0xTQiAgICAgICAgICAyNQotI2RlZmluZSBNQUNfUENVX1JFU0VUX1RTRl9PTkVfU0hPVDJfTUFTSyAgICAgICAgIDB4MDIwMDAwMDAKLSNkZWZpbmUgTUFDX1BDVV9SRVNFVF9UU0ZfT05FX1NIT1QyX0dFVCh4KSAgICAgICAoKCh4KSAmIE1BQ19QQ1VfUkVTRVRfVFNGX09ORV9TSE9UMl9NQVNLKSA+PiBNQUNfUENVX1JFU0VUX1RTRl9PTkVfU0hPVDJfTFNCKQotI2RlZmluZSBNQUNfUENVX1JFU0VUX1RTRl9PTkVfU0hPVDJfU0VUKHgpICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfUkVTRVRfVFNGX09ORV9TSE9UMl9MU0IpICYgTUFDX1BDVV9SRVNFVF9UU0ZfT05FX1NIT1QyX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfUkVTRVRfVFNGX09ORV9TSE9UX01TQiAgICAgICAgICAgMjQKLSNkZWZpbmUgTUFDX1BDVV9SRVNFVF9UU0ZfT05FX1NIT1RfTFNCICAgICAgICAgICAyNAotI2RlZmluZSBNQUNfUENVX1JFU0VUX1RTRl9PTkVfU0hPVF9NQVNLICAgICAgICAgIDB4MDEwMDAwMDAKLSNkZWZpbmUgTUFDX1BDVV9SRVNFVF9UU0ZfT05FX1NIT1RfR0VUKHgpICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfUkVTRVRfVFNGX09ORV9TSE9UX01BU0spID4+IE1BQ19QQ1VfUkVTRVRfVFNGX09ORV9TSE9UX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9SRVNFVF9UU0ZfT05FX1NIT1RfU0VUKHgpICAgICAgICAoKCh4KSA8PCBNQUNfUENVX1JFU0VUX1RTRl9PTkVfU0hPVF9MU0IpICYgTUFDX1BDVV9SRVNFVF9UU0ZfT05FX1NIT1RfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX1RTRl9BRERfUExMX0FERFJFU1MgICAgICAgICAgICAgIDB4MDAwMDAyMTAKLSNkZWZpbmUgTUFDX1BDVV9UU0ZfQUREX1BMTF9PRkZTRVQgICAgICAgICAgICAgICAweDAwMDAwMjEwCi0jZGVmaW5lIE1BQ19QQ1VfVFNGX0FERF9QTExfVkFMVUVfTVNCICAgICAgICAgICAgNwotI2RlZmluZSBNQUNfUENVX1RTRl9BRERfUExMX1ZBTFVFX0xTQiAgICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9UU0ZfQUREX1BMTF9WQUxVRV9NQVNLICAgICAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIE1BQ19QQ1VfVFNGX0FERF9QTExfVkFMVUVfR0VUKHgpICAgICAgICAgKCgoeCkgJiBNQUNfUENVX1RTRl9BRERfUExMX1ZBTFVFX01BU0spID4+IE1BQ19QQ1VfVFNGX0FERF9QTExfVkFMVUVfTFNCKQotI2RlZmluZSBNQUNfUENVX1RTRl9BRERfUExMX1ZBTFVFX1NFVCh4KSAgICAgICAgICgoKHgpIDw8IE1BQ19QQ1VfVFNGX0FERF9QTExfVkFMVUVfTFNCKSAmIE1BQ19QQ1VfVFNGX0FERF9QTExfVkFMVUVfTUFTSykKLQotI2RlZmluZSBTTEVFUF9SRVRFTlRJT05fQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMTQKLSNkZWZpbmUgU0xFRVBfUkVURU5USU9OX09GRlNFVCAgICAgICAgICAgICAgICAgICAweDAwMDAwMjE0Ci0jZGVmaW5lIFNMRUVQX1JFVEVOVElPTl9USU1FX01TQiAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBTTEVFUF9SRVRFTlRJT05fVElNRV9MU0IgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgU0xFRVBfUkVURU5USU9OX1RJTUVfTUFTSyAgICAgICAgICAgICAgICAweDAwMDAwM2ZjCi0jZGVmaW5lIFNMRUVQX1JFVEVOVElPTl9USU1FX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiBTTEVFUF9SRVRFTlRJT05fVElNRV9NQVNLKSA+PiBTTEVFUF9SRVRFTlRJT05fVElNRV9MU0IpCi0jZGVmaW5lIFNMRUVQX1JFVEVOVElPTl9USU1FX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgU0xFRVBfUkVURU5USU9OX1RJTUVfTFNCKSAmIFNMRUVQX1JFVEVOVElPTl9USU1FX01BU0spCi0jZGVmaW5lIFNMRUVQX1JFVEVOVElPTl9NT0RFX01TQiAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBTTEVFUF9SRVRFTlRJT05fTU9ERV9MU0IgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgU0xFRVBfUkVURU5USU9OX01PREVfTUFTSyAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFNMRUVQX1JFVEVOVElPTl9NT0RFX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiBTTEVFUF9SRVRFTlRJT05fTU9ERV9NQVNLKSA+PiBTTEVFUF9SRVRFTlRJT05fTU9ERV9MU0IpCi0jZGVmaW5lIFNMRUVQX1JFVEVOVElPTl9NT0RFX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgU0xFRVBfUkVURU5USU9OX01PREVfTFNCKSAmIFNMRUVQX1JFVEVOVElPTl9NT0RFX01BU0spCi0jZGVmaW5lIFNMRUVQX1JFVEVOVElPTl9FTkFCTEVfTVNCICAgICAgICAgICAgICAgMAotI2RlZmluZSBTTEVFUF9SRVRFTlRJT05fRU5BQkxFX0xTQiAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgU0xFRVBfUkVURU5USU9OX0VOQUJMRV9NQVNLICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFNMRUVQX1JFVEVOVElPTl9FTkFCTEVfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBTTEVFUF9SRVRFTlRJT05fRU5BQkxFX01BU0spID4+IFNMRUVQX1JFVEVOVElPTl9FTkFCTEVfTFNCKQotI2RlZmluZSBTTEVFUF9SRVRFTlRJT05fRU5BQkxFX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IFNMRUVQX1JFVEVOVElPTl9FTkFCTEVfTFNCKSAmIFNMRUVQX1JFVEVOVElPTl9FTkFCTEVfTUFTSykKLQotI2RlZmluZSBCVENPRVhDVFJMX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMTgKLSNkZWZpbmUgQlRDT0VYQ1RSTF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjE4Ci0jZGVmaW5lIEJUQ09FWENUUkxfV0JUSU1FUl9FTkFCTEVfTVNCICAgICAgICAgICAgMjYKLSNkZWZpbmUgQlRDT0VYQ1RSTF9XQlRJTUVSX0VOQUJMRV9MU0IgICAgICAgICAgICAyNgotI2RlZmluZSBCVENPRVhDVFJMX1dCVElNRVJfRU5BQkxFX01BU0sgICAgICAgICAgIDB4MDQwMDAwMDAKLSNkZWZpbmUgQlRDT0VYQ1RSTF9XQlRJTUVSX0VOQUJMRV9HRVQoeCkgICAgICAgICAoKCh4KSAmIEJUQ09FWENUUkxfV0JUSU1FUl9FTkFCTEVfTUFTSykgPj4gQlRDT0VYQ1RSTF9XQlRJTUVSX0VOQUJMRV9MU0IpCi0jZGVmaW5lIEJUQ09FWENUUkxfV0JUSU1FUl9FTkFCTEVfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgQlRDT0VYQ1RSTF9XQlRJTUVSX0VOQUJMRV9MU0IpICYgQlRDT0VYQ1RSTF9XQlRJTUVSX0VOQUJMRV9NQVNLKQotI2RlZmluZSBCVENPRVhDVFJMX1dCU1lOQ19PTl9CRUFDT05fTVNCICAgICAgICAgIDI1Ci0jZGVmaW5lIEJUQ09FWENUUkxfV0JTWU5DX09OX0JFQUNPTl9MU0IgICAgICAgICAgMjUKLSNkZWZpbmUgQlRDT0VYQ1RSTF9XQlNZTkNfT05fQkVBQ09OX01BU0sgICAgICAgICAweDAyMDAwMDAwCi0jZGVmaW5lIEJUQ09FWENUUkxfV0JTWU5DX09OX0JFQUNPTl9HRVQoeCkgICAgICAgKCgoeCkgJiBCVENPRVhDVFJMX1dCU1lOQ19PTl9CRUFDT05fTUFTSykgPj4gQlRDT0VYQ1RSTF9XQlNZTkNfT05fQkVBQ09OX0xTQikKLSNkZWZpbmUgQlRDT0VYQ1RSTF9XQlNZTkNfT05fQkVBQ09OX1NFVCh4KSAgICAgICAoKCh4KSA8PCBCVENPRVhDVFJMX1dCU1lOQ19PTl9CRUFDT05fTFNCKSAmIEJUQ09FWENUUkxfV0JTWU5DX09OX0JFQUNPTl9NQVNLKQotI2RlZmluZSBCVENPRVhDVFJMX1BUQV9NT0RFX01TQiAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIEJUQ09FWENUUkxfUFRBX01PREVfTFNCICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgQlRDT0VYQ1RSTF9QVEFfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAweDAxODAwMDAwCi0jZGVmaW5lIEJUQ09FWENUUkxfUFRBX01PREVfR0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiBCVENPRVhDVFJMX1BUQV9NT0RFX01BU0spID4+IEJUQ09FWENUUkxfUFRBX01PREVfTFNCKQotI2RlZmluZSBCVENPRVhDVFJMX1BUQV9NT0RFX1NFVCh4KSAgICAgICAgICAgICAgICgoKHgpIDw8IEJUQ09FWENUUkxfUFRBX01PREVfTFNCKSAmIEJUQ09FWENUUkxfUFRBX01PREVfTUFTSykKLSNkZWZpbmUgQlRDT0VYQ1RSTF9GUkVRX1RJTUVfTVNCICAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBCVENPRVhDVFJMX0ZSRVFfVElNRV9MU0IgICAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIEJUQ09FWENUUkxfRlJFUV9USU1FX01BU0sgICAgICAgICAgICAgICAgMHgwMDdjMDAwMAotI2RlZmluZSBCVENPRVhDVFJMX0ZSRVFfVElNRV9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgQlRDT0VYQ1RSTF9GUkVRX1RJTUVfTUFTSykgPj4gQlRDT0VYQ1RSTF9GUkVRX1RJTUVfTFNCKQotI2RlZmluZSBCVENPRVhDVFJMX0ZSRVFfVElNRV9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IEJUQ09FWENUUkxfRlJFUV9USU1FX0xTQikgJiBCVENPRVhDVFJMX0ZSRVFfVElNRV9NQVNLKQotI2RlZmluZSBCVENPRVhDVFJMX1BSSU9SSVRZX1RJTUVfTVNCICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIEJUQ09FWENUUkxfUFJJT1JJVFlfVElNRV9MU0IgICAgICAgICAgICAgMTIKLSNkZWZpbmUgQlRDT0VYQ1RSTF9QUklPUklUWV9USU1FX01BU0sgICAgICAgICAgICAweDAwMDNmMDAwCi0jZGVmaW5lIEJUQ09FWENUUkxfUFJJT1JJVFlfVElNRV9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBCVENPRVhDVFJMX1BSSU9SSVRZX1RJTUVfTUFTSykgPj4gQlRDT0VYQ1RSTF9QUklPUklUWV9USU1FX0xTQikKLSNkZWZpbmUgQlRDT0VYQ1RSTF9QUklPUklUWV9USU1FX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBCVENPRVhDVFJMX1BSSU9SSVRZX1RJTUVfTFNCKSAmIEJUQ09FWENUUkxfUFJJT1JJVFlfVElNRV9NQVNLKQotI2RlZmluZSBCVENPRVhDVFJMX1NZTkNfREVUX0VOX01TQiAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIEJUQ09FWENUUkxfU1lOQ19ERVRfRU5fTFNCICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgQlRDT0VYQ1RSTF9TWU5DX0RFVF9FTl9NQVNLICAgICAgICAgICAgICAweDAwMDAwODAwCi0jZGVmaW5lIEJUQ09FWENUUkxfU1lOQ19ERVRfRU5fR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBCVENPRVhDVFJMX1NZTkNfREVUX0VOX01BU0spID4+IEJUQ09FWENUUkxfU1lOQ19ERVRfRU5fTFNCKQotI2RlZmluZSBCVENPRVhDVFJMX1NZTkNfREVUX0VOX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IEJUQ09FWENUUkxfU1lOQ19ERVRfRU5fTFNCKSAmIEJUQ09FWENUUkxfU1lOQ19ERVRfRU5fTUFTSykKLSNkZWZpbmUgQlRDT0VYQ1RSTF9JRExFX0NOVF9FTl9NU0IgICAgICAgICAgICAgICAxMAotI2RlZmluZSBCVENPRVhDVFJMX0lETEVfQ05UX0VOX0xTQiAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIEJUQ09FWENUUkxfSURMRV9DTlRfRU5fTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBCVENPRVhDVFJMX0lETEVfQ05UX0VOX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgQlRDT0VYQ1RSTF9JRExFX0NOVF9FTl9NQVNLKSA+PiBCVENPRVhDVFJMX0lETEVfQ05UX0VOX0xTQikKLSNkZWZpbmUgQlRDT0VYQ1RSTF9JRExFX0NOVF9FTl9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBCVENPRVhDVFJMX0lETEVfQ05UX0VOX0xTQikgJiBCVENPRVhDVFJMX0lETEVfQ05UX0VOX01BU0spCi0jZGVmaW5lIEJUQ09FWENUUkxfRlJBTUVfQ05UX0VOX01TQiAgICAgICAgICAgICAgOQotI2RlZmluZSBCVENPRVhDVFJMX0ZSQU1FX0NOVF9FTl9MU0IgICAgICAgICAgICAgIDkKLSNkZWZpbmUgQlRDT0VYQ1RSTF9GUkFNRV9DTlRfRU5fTUFTSyAgICAgICAgICAgICAweDAwMDAwMjAwCi0jZGVmaW5lIEJUQ09FWENUUkxfRlJBTUVfQ05UX0VOX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBCVENPRVhDVFJMX0ZSQU1FX0NOVF9FTl9NQVNLKSA+PiBCVENPRVhDVFJMX0ZSQU1FX0NOVF9FTl9MU0IpCi0jZGVmaW5lIEJUQ09FWENUUkxfRlJBTUVfQ05UX0VOX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgQlRDT0VYQ1RSTF9GUkFNRV9DTlRfRU5fTFNCKSAmIEJUQ09FWENUUkxfRlJBTUVfQ05UX0VOX01BU0spCi0jZGVmaW5lIEJUQ09FWENUUkxfQ0xLX0NOVF9FTl9NU0IgICAgICAgICAgICAgICAgOAotI2RlZmluZSBCVENPRVhDVFJMX0NMS19DTlRfRU5fTFNCICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgQlRDT0VYQ1RSTF9DTEtfQ05UX0VOX01BU0sgICAgICAgICAgICAgICAweDAwMDAwMTAwCi0jZGVmaW5lIEJUQ09FWENUUkxfQ0xLX0NOVF9FTl9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBCVENPRVhDVFJMX0NMS19DTlRfRU5fTUFTSykgPj4gQlRDT0VYQ1RSTF9DTEtfQ05UX0VOX0xTQikKLSNkZWZpbmUgQlRDT0VYQ1RSTF9DTEtfQ05UX0VOX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBCVENPRVhDVFJMX0NMS19DTlRfRU5fTFNCKSAmIEJUQ09FWENUUkxfQ0xLX0NOVF9FTl9NQVNLKQotI2RlZmluZSBCVENPRVhDVFJMX0dBUF9NU0IgICAgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgQlRDT0VYQ1RSTF9HQVBfTFNCICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEJUQ09FWENUUkxfR0FQX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBCVENPRVhDVFJMX0dBUF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgQlRDT0VYQ1RSTF9HQVBfTUFTSykgPj4gQlRDT0VYQ1RSTF9HQVBfTFNCKQotI2RlZmluZSBCVENPRVhDVFJMX0dBUF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IEJUQ09FWENUUkxfR0FQX0xTQikgJiBCVENPRVhDVFJMX0dBUF9NQVNLKQotCi0jZGVmaW5lIFdCU1lOQ19QUklPUklUWTFfQUREUkVTUyAgICAgICAgICAgICAgICAgMHgwMDAwMDIxYwotI2RlZmluZSBXQlNZTkNfUFJJT1JJVFkxX09GRlNFVCAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMWMKLSNkZWZpbmUgV0JTWU5DX1BSSU9SSVRZMV9CSVRNQVBfTVNCICAgICAgICAgICAgICAzMQotI2RlZmluZSBXQlNZTkNfUFJJT1JJVFkxX0JJVE1BUF9MU0IgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0JTWU5DX1BSSU9SSVRZMV9CSVRNQVBfTUFTSyAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFdCU1lOQ19QUklPUklUWTFfQklUTUFQX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBXQlNZTkNfUFJJT1JJVFkxX0JJVE1BUF9NQVNLKSA+PiBXQlNZTkNfUFJJT1JJVFkxX0JJVE1BUF9MU0IpCi0jZGVmaW5lIFdCU1lOQ19QUklPUklUWTFfQklUTUFQX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgV0JTWU5DX1BSSU9SSVRZMV9CSVRNQVBfTFNCKSAmIFdCU1lOQ19QUklPUklUWTFfQklUTUFQX01BU0spCi0KLSNkZWZpbmUgV0JTWU5DX1BSSU9SSVRZMl9BRERSRVNTICAgICAgICAgICAgICAgICAweDAwMDAwMjIwCi0jZGVmaW5lIFdCU1lOQ19QUklPUklUWTJfT0ZGU0VUICAgICAgICAgICAgICAgICAgMHgwMDAwMDIyMAotI2RlZmluZSBXQlNZTkNfUFJJT1JJVFkyX0JJVE1BUF9NU0IgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFdCU1lOQ19QUklPUklUWTJfQklUTUFQX0xTQiAgICAgICAgICAgICAgMAotI2RlZmluZSBXQlNZTkNfUFJJT1JJVFkyX0JJVE1BUF9NQVNLICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgV0JTWU5DX1BSSU9SSVRZMl9CSVRNQVBfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIFdCU1lOQ19QUklPUklUWTJfQklUTUFQX01BU0spID4+IFdCU1lOQ19QUklPUklUWTJfQklUTUFQX0xTQikKLSNkZWZpbmUgV0JTWU5DX1BSSU9SSVRZMl9CSVRNQVBfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCBXQlNZTkNfUFJJT1JJVFkyX0JJVE1BUF9MU0IpICYgV0JTWU5DX1BSSU9SSVRZMl9CSVRNQVBfTUFTSykKLQotI2RlZmluZSBXQlNZTkNfUFJJT1JJVFkzX0FERFJFU1MgICAgICAgICAgICAgICAgIDB4MDAwMDAyMjQKLSNkZWZpbmUgV0JTWU5DX1BSSU9SSVRZM19PRkZTRVQgICAgICAgICAgICAgICAgICAweDAwMDAwMjI0Ci0jZGVmaW5lIFdCU1lOQ19QUklPUklUWTNfQklUTUFQX01TQiAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgV0JTWU5DX1BSSU9SSVRZM19CSVRNQVBfTFNCICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdCU1lOQ19QUklPUklUWTNfQklUTUFQX01BU0sgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBXQlNZTkNfUFJJT1JJVFkzX0JJVE1BUF9HRVQoeCkgICAgICAgICAgICgoKHgpICYgV0JTWU5DX1BSSU9SSVRZM19CSVRNQVBfTUFTSykgPj4gV0JTWU5DX1BSSU9SSVRZM19CSVRNQVBfTFNCKQotI2RlZmluZSBXQlNZTkNfUFJJT1JJVFkzX0JJVE1BUF9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFdCU1lOQ19QUklPUklUWTNfQklUTUFQX0xTQikgJiBXQlNZTkNfUFJJT1JJVFkzX0JJVE1BUF9NQVNLKQotCi0jZGVmaW5lIEJUQ09FWDBfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIyOAotI2RlZmluZSBCVENPRVgwX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMjgKLSNkZWZpbmUgQlRDT0VYMF9TWU5DX0RVUl9NU0IgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIEJUQ09FWDBfU1lOQ19EVVJfTFNCICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBCVENPRVgwX1NZTkNfRFVSX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgQlRDT0VYMF9TWU5DX0RVUl9HRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIEJUQ09FWDBfU1lOQ19EVVJfTUFTSykgPj4gQlRDT0VYMF9TWU5DX0RVUl9MU0IpCi0jZGVmaW5lIEJUQ09FWDBfU1lOQ19EVVJfU0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgQlRDT0VYMF9TWU5DX0RVUl9MU0IpICYgQlRDT0VYMF9TWU5DX0RVUl9NQVNLKQotCi0jZGVmaW5lIEJUQ09FWDFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIyYwotI2RlZmluZSBCVENPRVgxX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMmMKLSNkZWZpbmUgQlRDT0VYMV9DTEtfVEhSRVNfTVNCICAgICAgICAgICAgICAgICAgICAyMAotI2RlZmluZSBCVENPRVgxX0NMS19USFJFU19MU0IgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgQlRDT0VYMV9DTEtfVEhSRVNfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMWZmZmZmCi0jZGVmaW5lIEJUQ09FWDFfQ0xLX1RIUkVTX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBCVENPRVgxX0NMS19USFJFU19NQVNLKSA+PiBCVENPRVgxX0NMS19USFJFU19MU0IpCi0jZGVmaW5lIEJUQ09FWDFfQ0xLX1RIUkVTX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgQlRDT0VYMV9DTEtfVEhSRVNfTFNCKSAmIEJUQ09FWDFfQ0xLX1RIUkVTX01BU0spCi0KLSNkZWZpbmUgQlRDT0VYMl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjMwCi0jZGVmaW5lIEJUQ09FWDJfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIzMAotI2RlZmluZSBCVENPRVgyX0ZSQU1FX1RIUkVTX01TQiAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgQlRDT0VYMl9GUkFNRV9USFJFU19MU0IgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEJUQ09FWDJfRlJBTUVfVEhSRVNfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBCVENPRVgyX0ZSQU1FX1RIUkVTX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgQlRDT0VYMl9GUkFNRV9USFJFU19NQVNLKSA+PiBCVENPRVgyX0ZSQU1FX1RIUkVTX0xTQikKLSNkZWZpbmUgQlRDT0VYMl9GUkFNRV9USFJFU19TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBCVENPRVgyX0ZSQU1FX1RIUkVTX0xTQikgJiBCVENPRVgyX0ZSQU1FX1RIUkVTX01BU0spCi0KLSNkZWZpbmUgQlRDT0VYM19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjM0Ci0jZGVmaW5lIEJUQ09FWDNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIzNAotI2RlZmluZSBCVENPRVgzX0NMS19DTlRfTVNCICAgICAgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIEJUQ09FWDNfQ0xLX0NOVF9MU0IgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBCVENPRVgzX0NMS19DTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAxZmZmZmYKLSNkZWZpbmUgQlRDT0VYM19DTEtfQ05UX0dFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIEJUQ09FWDNfQ0xLX0NOVF9NQVNLKSA+PiBCVENPRVgzX0NMS19DTlRfTFNCKQotI2RlZmluZSBCVENPRVgzX0NMS19DTlRfU0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IEJUQ09FWDNfQ0xLX0NOVF9MU0IpICYgQlRDT0VYM19DTEtfQ05UX01BU0spCi0KLSNkZWZpbmUgQlRDT0VYNF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjM4Ci0jZGVmaW5lIEJUQ09FWDRfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIzOAotI2RlZmluZSBCVENPRVg0X0ZSQU1FX0NOVF9NU0IgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgQlRDT0VYNF9GUkFNRV9DTlRfTFNCICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEJUQ09FWDRfRlJBTUVfQ05UX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBCVENPRVg0X0ZSQU1FX0NOVF9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgQlRDT0VYNF9GUkFNRV9DTlRfTUFTSykgPj4gQlRDT0VYNF9GUkFNRV9DTlRfTFNCKQotI2RlZmluZSBCVENPRVg0X0ZSQU1FX0NOVF9TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IEJUQ09FWDRfRlJBTUVfQ05UX0xTQikgJiBCVENPRVg0X0ZSQU1FX0NOVF9NQVNLKQotCi0jZGVmaW5lIEJUQ09FWDVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIzYwotI2RlZmluZSBCVENPRVg1X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyM2MKLSNkZWZpbmUgQlRDT0VYNV9JRExFX0NOVF9NU0IgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBCVENPRVg1X0lETEVfQ05UX0xTQiAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgQlRDT0VYNV9JRExFX0NOVF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDBmZmZmCi0jZGVmaW5lIEJUQ09FWDVfSURMRV9DTlRfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiBCVENPRVg1X0lETEVfQ05UX01BU0spID4+IEJUQ09FWDVfSURMRV9DTlRfTFNCKQotI2RlZmluZSBCVENPRVg1X0lETEVfQ05UX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IEJUQ09FWDVfSURMRV9DTlRfTFNCKSAmIEJUQ09FWDVfSURMRV9DTlRfTUFTSykKLQotI2RlZmluZSBCVENPRVg2X0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyNDAKLSNkZWZpbmUgQlRDT0VYNl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjQwCi0jZGVmaW5lIEJUQ09FWDZfSURMRV9SRVNFVF9MVkxfQklUTUFQX01TQiAgICAgICAgMzEKLSNkZWZpbmUgQlRDT0VYNl9JRExFX1JFU0VUX0xWTF9CSVRNQVBfTFNCICAgICAgICAwCi0jZGVmaW5lIEJUQ09FWDZfSURMRV9SRVNFVF9MVkxfQklUTUFQX01BU0sgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBCVENPRVg2X0lETEVfUkVTRVRfTFZMX0JJVE1BUF9HRVQoeCkgICAgICgoKHgpICYgQlRDT0VYNl9JRExFX1JFU0VUX0xWTF9CSVRNQVBfTUFTSykgPj4gQlRDT0VYNl9JRExFX1JFU0VUX0xWTF9CSVRNQVBfTFNCKQotI2RlZmluZSBCVENPRVg2X0lETEVfUkVTRVRfTFZMX0JJVE1BUF9TRVQoeCkgICAgICgoKHgpIDw8IEJUQ09FWDZfSURMRV9SRVNFVF9MVkxfQklUTUFQX0xTQikgJiBCVENPRVg2X0lETEVfUkVTRVRfTFZMX0JJVE1BUF9NQVNLKQotCi0jZGVmaW5lIExPQ0tfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDI0NAotI2RlZmluZSBMT0NLX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyNDQKLSNkZWZpbmUgTE9DS19UTE9DS19TTEFWRV9NU0IgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBMT0NLX1RMT0NLX1NMQVZFX0xTQiAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIExPQ0tfVExPQ0tfU0xBVkVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHhmZjAwMDAwMAotI2RlZmluZSBMT0NLX1RMT0NLX1NMQVZFX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgTE9DS19UTE9DS19TTEFWRV9NQVNLKSA+PiBMT0NLX1RMT0NLX1NMQVZFX0xTQikKLSNkZWZpbmUgTE9DS19UTE9DS19TTEFWRV9TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBMT0NLX1RMT0NLX1NMQVZFX0xTQikgJiBMT0NLX1RMT0NLX1NMQVZFX01BU0spCi0jZGVmaW5lIExPQ0tfVFVOTE9DS19TTEFWRV9NU0IgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgTE9DS19UVU5MT0NLX1NMQVZFX0xTQiAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBMT0NLX1RVTkxPQ0tfU0xBVkVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDBmZjAwMDAKLSNkZWZpbmUgTE9DS19UVU5MT0NLX1NMQVZFX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIExPQ0tfVFVOTE9DS19TTEFWRV9NQVNLKSA+PiBMT0NLX1RVTkxPQ0tfU0xBVkVfTFNCKQotI2RlZmluZSBMT0NLX1RVTkxPQ0tfU0xBVkVfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IExPQ0tfVFVOTE9DS19TTEFWRV9MU0IpICYgTE9DS19UVU5MT0NLX1NMQVZFX01BU0spCi0jZGVmaW5lIExPQ0tfVExPQ0tfTUFTVEVSX01TQiAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgTE9DS19UTE9DS19NQVNURVJfTFNCICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIExPQ0tfVExPQ0tfTUFTVEVSX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBMT0NLX1RMT0NLX01BU1RFUl9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgTE9DS19UTE9DS19NQVNURVJfTUFTSykgPj4gTE9DS19UTE9DS19NQVNURVJfTFNCKQotI2RlZmluZSBMT0NLX1RMT0NLX01BU1RFUl9TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IExPQ0tfVExPQ0tfTUFTVEVSX0xTQikgJiBMT0NLX1RMT0NLX01BU1RFUl9NQVNLKQotI2RlZmluZSBMT0NLX1RVTkxPQ0tfTUFTVEVSX01TQiAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgTE9DS19UVU5MT0NLX01BU1RFUl9MU0IgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIExPQ0tfVFVOTE9DS19NQVNURVJfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBMT0NLX1RVTkxPQ0tfTUFTVEVSX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgTE9DS19UVU5MT0NLX01BU1RFUl9NQVNLKSA+PiBMT0NLX1RVTkxPQ0tfTUFTVEVSX0xTQikKLSNkZWZpbmUgTE9DS19UVU5MT0NLX01BU1RFUl9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBMT0NLX1RVTkxPQ0tfTUFTVEVSX0xTQikgJiBMT0NLX1RVTkxPQ0tfTUFTVEVSX01BU0spCi0KLSNkZWZpbmUgTk9MT0NLX1BSSU9SSVRZX0FERFJFU1MgICAgICAgICAgICAgICAgICAweDAwMDAwMjQ4Ci0jZGVmaW5lIE5PTE9DS19QUklPUklUWV9PRkZTRVQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDI0OAotI2RlZmluZSBOT0xPQ0tfUFJJT1JJVFlfQklUTUFQX01TQiAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIE5PTE9DS19QUklPUklUWV9CSVRNQVBfTFNCICAgICAgICAgICAgICAgMAotI2RlZmluZSBOT0xPQ0tfUFJJT1JJVFlfQklUTUFQX01BU0sgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgTk9MT0NLX1BSSU9SSVRZX0JJVE1BUF9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIE5PTE9DS19QUklPUklUWV9CSVRNQVBfTUFTSykgPj4gTk9MT0NLX1BSSU9SSVRZX0JJVE1BUF9MU0IpCi0jZGVmaW5lIE5PTE9DS19QUklPUklUWV9CSVRNQVBfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgTk9MT0NLX1BSSU9SSVRZX0JJVE1BUF9MU0IpICYgTk9MT0NLX1BSSU9SSVRZX0JJVE1BUF9NQVNLKQotCi0jZGVmaW5lIFdCU1lOQ19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDI0YwotI2RlZmluZSBXQlNZTkNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyNGMKLSNkZWZpbmUgV0JTWU5DX0JUQ0xPQ0tfTVNCICAgICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBXQlNZTkNfQlRDTE9DS19MU0IgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0JTWU5DX0JUQ0xPQ0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFdCU1lOQ19CVENMT0NLX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBXQlNZTkNfQlRDTE9DS19NQVNLKSA+PiBXQlNZTkNfQlRDTE9DS19MU0IpCi0jZGVmaW5lIFdCU1lOQ19CVENMT0NLX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgV0JTWU5DX0JUQ0xPQ0tfTFNCKSAmIFdCU1lOQ19CVENMT0NLX01BU0spCi0KLSNkZWZpbmUgV0JTWU5DMV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjUwCi0jZGVmaW5lIFdCU1lOQzFfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDI1MAotI2RlZmluZSBXQlNZTkMxX0JUQ0xPQ0tfTVNCICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFdCU1lOQzFfQlRDTE9DS19MU0IgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBXQlNZTkMxX0JUQ0xPQ0tfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgV0JTWU5DMV9CVENMT0NLX0dFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFdCU1lOQzFfQlRDTE9DS19NQVNLKSA+PiBXQlNZTkMxX0JUQ0xPQ0tfTFNCKQotI2RlZmluZSBXQlNZTkMxX0JUQ0xPQ0tfU0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFdCU1lOQzFfQlRDTE9DS19MU0IpICYgV0JTWU5DMV9CVENMT0NLX01BU0spCi0KLSNkZWZpbmUgV0JTWU5DMl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjU0Ci0jZGVmaW5lIFdCU1lOQzJfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDI1NAotI2RlZmluZSBXQlNZTkMyX0JUQ0xPQ0tfTVNCICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFdCU1lOQzJfQlRDTE9DS19MU0IgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBXQlNZTkMyX0JUQ0xPQ0tfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgV0JTWU5DMl9CVENMT0NLX0dFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFdCU1lOQzJfQlRDTE9DS19NQVNLKSA+PiBXQlNZTkMyX0JUQ0xPQ0tfTFNCKQotI2RlZmluZSBXQlNZTkMyX0JUQ0xPQ0tfU0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFdCU1lOQzJfQlRDTE9DS19MU0IpICYgV0JTWU5DMl9CVENMT0NLX01BU0spCi0KLSNkZWZpbmUgV0JTWU5DM19BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjU4Ci0jZGVmaW5lIFdCU1lOQzNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDI1OAotI2RlZmluZSBXQlNZTkMzX0JUQ0xPQ0tfTVNCICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFdCU1lOQzNfQlRDTE9DS19MU0IgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBXQlNZTkMzX0JUQ0xPQ0tfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgV0JTWU5DM19CVENMT0NLX0dFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFdCU1lOQzNfQlRDTE9DS19NQVNLKSA+PiBXQlNZTkMzX0JUQ0xPQ0tfTFNCKQotI2RlZmluZSBXQlNZTkMzX0JUQ0xPQ0tfU0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFdCU1lOQzNfQlRDTE9DS19MU0IpICYgV0JTWU5DM19CVENMT0NLX01BU0spCi0KLSNkZWZpbmUgV0JfVElNRVJfVEFSR0VUX0FERFJFU1MgICAgICAgICAgICAgICAgICAweDAwMDAwMjVjCi0jZGVmaW5lIFdCX1RJTUVSX1RBUkdFVF9PRkZTRVQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDI1YwotI2RlZmluZSBXQl9USU1FUl9UQVJHRVRfVkFMVUVfTVNCICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFdCX1RJTUVSX1RBUkdFVF9WQUxVRV9MU0IgICAgICAgICAgICAgICAgMAotI2RlZmluZSBXQl9USU1FUl9UQVJHRVRfVkFMVUVfTUFTSyAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgV0JfVElNRVJfVEFSR0VUX1ZBTFVFX0dFVCh4KSAgICAgICAgICAgICAoKCh4KSAmIFdCX1RJTUVSX1RBUkdFVF9WQUxVRV9NQVNLKSA+PiBXQl9USU1FUl9UQVJHRVRfVkFMVUVfTFNCKQotI2RlZmluZSBXQl9USU1FUl9UQVJHRVRfVkFMVUVfU0VUKHgpICAgICAgICAgICAgICgoKHgpIDw8IFdCX1RJTUVSX1RBUkdFVF9WQUxVRV9MU0IpICYgV0JfVElNRVJfVEFSR0VUX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgV0JfVElNRVJfU0xPUF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjYwCi0jZGVmaW5lIFdCX1RJTUVSX1NMT1BfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDI2MAotI2RlZmluZSBXQl9USU1FUl9TTE9QX1ZBTFVFX01TQiAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgV0JfVElNRVJfU0xPUF9WQUxVRV9MU0IgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdCX1RJTUVSX1NMT1BfVkFMVUVfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDNmZgotI2RlZmluZSBXQl9USU1FUl9TTE9QX1ZBTFVFX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgV0JfVElNRVJfU0xPUF9WQUxVRV9NQVNLKSA+PiBXQl9USU1FUl9TTE9QX1ZBTFVFX0xTQikKLSNkZWZpbmUgV0JfVElNRVJfU0xPUF9WQUxVRV9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBXQl9USU1FUl9TTE9QX1ZBTFVFX0xTQikgJiBXQl9USU1FUl9TTE9QX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgQlRDT0VYX0lOVF9FTl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjY0Ci0jZGVmaW5lIEJUQ09FWF9JTlRfRU5fT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDI2NAotI2RlZmluZSBCVENPRVhfSU5UX0VOX0kyQ19SRUNWX09WRVJGTE9XX01TQiAgICAgIDExCi0jZGVmaW5lIEJUQ09FWF9JTlRfRU5fSTJDX1JFQ1ZfT1ZFUkZMT1dfTFNCICAgICAgMTEKLSNkZWZpbmUgQlRDT0VYX0lOVF9FTl9JMkNfUkVDVl9PVkVSRkxPV19NQVNLICAgICAweDAwMDAwODAwCi0jZGVmaW5lIEJUQ09FWF9JTlRfRU5fSTJDX1JFQ1ZfT1ZFUkZMT1dfR0VUKHgpICAgKCgoeCkgJiBCVENPRVhfSU5UX0VOX0kyQ19SRUNWX09WRVJGTE9XX01BU0spID4+IEJUQ09FWF9JTlRfRU5fSTJDX1JFQ1ZfT1ZFUkZMT1dfTFNCKQotI2RlZmluZSBCVENPRVhfSU5UX0VOX0kyQ19SRUNWX09WRVJGTE9XX1NFVCh4KSAgICgoKHgpIDw8IEJUQ09FWF9JTlRfRU5fSTJDX1JFQ1ZfT1ZFUkZMT1dfTFNCKSAmIEJUQ09FWF9JTlRfRU5fSTJDX1JFQ1ZfT1ZFUkZMT1dfTUFTSykKLSNkZWZpbmUgQlRDT0VYX0lOVF9FTl9JMkNfVFhfRkFJTEVEX01TQiAgICAgICAgICAxMAotI2RlZmluZSBCVENPRVhfSU5UX0VOX0kyQ19UWF9GQUlMRURfTFNCICAgICAgICAgIDEwCi0jZGVmaW5lIEJUQ09FWF9JTlRfRU5fSTJDX1RYX0ZBSUxFRF9NQVNLICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBCVENPRVhfSU5UX0VOX0kyQ19UWF9GQUlMRURfR0VUKHgpICAgICAgICgoKHgpICYgQlRDT0VYX0lOVF9FTl9JMkNfVFhfRkFJTEVEX01BU0spID4+IEJUQ09FWF9JTlRfRU5fSTJDX1RYX0ZBSUxFRF9MU0IpCi0jZGVmaW5lIEJUQ09FWF9JTlRfRU5fSTJDX1RYX0ZBSUxFRF9TRVQoeCkgICAgICAgKCgoeCkgPDwgQlRDT0VYX0lOVF9FTl9JMkNfVFhfRkFJTEVEX0xTQikgJiBCVENPRVhfSU5UX0VOX0kyQ19UWF9GQUlMRURfTUFTSykKLSNkZWZpbmUgQlRDT0VYX0lOVF9FTl9JMkNfTUVTR19TRU5UX01TQiAgICAgICAgICA5Ci0jZGVmaW5lIEJUQ09FWF9JTlRfRU5fSTJDX01FU0dfU0VOVF9MU0IgICAgICAgICAgOQotI2RlZmluZSBCVENPRVhfSU5UX0VOX0kyQ19NRVNHX1NFTlRfTUFTSyAgICAgICAgIDB4MDAwMDAyMDAKLSNkZWZpbmUgQlRDT0VYX0lOVF9FTl9JMkNfTUVTR19TRU5UX0dFVCh4KSAgICAgICAoKCh4KSAmIEJUQ09FWF9JTlRfRU5fSTJDX01FU0dfU0VOVF9NQVNLKSA+PiBCVENPRVhfSU5UX0VOX0kyQ19NRVNHX1NFTlRfTFNCKQotI2RlZmluZSBCVENPRVhfSU5UX0VOX0kyQ19NRVNHX1NFTlRfU0VUKHgpICAgICAgICgoKHgpIDw8IEJUQ09FWF9JTlRfRU5fSTJDX01FU0dfU0VOVF9MU0IpICYgQlRDT0VYX0lOVF9FTl9JMkNfTUVTR19TRU5UX01BU0spCi0jZGVmaW5lIEJUQ09FWF9JTlRfRU5fU1RfTUVTR19SRUNWX01TQiAgICAgICAgICAgOAotI2RlZmluZSBCVENPRVhfSU5UX0VOX1NUX01FU0dfUkVDVl9MU0IgICAgICAgICAgIDgKLSNkZWZpbmUgQlRDT0VYX0lOVF9FTl9TVF9NRVNHX1JFQ1ZfTUFTSyAgICAgICAgICAweDAwMDAwMTAwCi0jZGVmaW5lIEJUQ09FWF9JTlRfRU5fU1RfTUVTR19SRUNWX0dFVCh4KSAgICAgICAgKCgoeCkgJiBCVENPRVhfSU5UX0VOX1NUX01FU0dfUkVDVl9NQVNLKSA+PiBCVENPRVhfSU5UX0VOX1NUX01FU0dfUkVDVl9MU0IpCi0jZGVmaW5lIEJUQ09FWF9JTlRfRU5fU1RfTUVTR19SRUNWX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgQlRDT0VYX0lOVF9FTl9TVF9NRVNHX1JFQ1ZfTFNCKSAmIEJUQ09FWF9JTlRfRU5fU1RfTUVTR19SRUNWX01BU0spCi0jZGVmaW5lIEJUQ09FWF9JTlRfRU5fV0JfVElNRVJfTVNCICAgICAgICAgICAgICAgNwotI2RlZmluZSBCVENPRVhfSU5UX0VOX1dCX1RJTUVSX0xTQiAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgQlRDT0VYX0lOVF9FTl9XQl9USU1FUl9NQVNLICAgICAgICAgICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIEJUQ09FWF9JTlRfRU5fV0JfVElNRVJfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBCVENPRVhfSU5UX0VOX1dCX1RJTUVSX01BU0spID4+IEJUQ09FWF9JTlRfRU5fV0JfVElNRVJfTFNCKQotI2RlZmluZSBCVENPRVhfSU5UX0VOX1dCX1RJTUVSX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IEJUQ09FWF9JTlRfRU5fV0JfVElNRVJfTFNCKSAmIEJUQ09FWF9JTlRfRU5fV0JfVElNRVJfTUFTSykKLSNkZWZpbmUgQlRDT0VYX0lOVF9FTl9OT1NZTkNfTVNCICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIEJUQ09FWF9JTlRfRU5fTk9TWU5DX0xTQiAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBCVENPRVhfSU5UX0VOX05PU1lOQ19NQVNLICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgQlRDT0VYX0lOVF9FTl9OT1NZTkNfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIEJUQ09FWF9JTlRfRU5fTk9TWU5DX01BU0spID4+IEJUQ09FWF9JTlRfRU5fTk9TWU5DX0xTQikKLSNkZWZpbmUgQlRDT0VYX0lOVF9FTl9OT1NZTkNfU0VUKHgpICAgICAgICAgICAgICAoKCh4KSA8PCBCVENPRVhfSU5UX0VOX05PU1lOQ19MU0IpICYgQlRDT0VYX0lOVF9FTl9OT1NZTkNfTUFTSykKLSNkZWZpbmUgQlRDT0VYX0lOVF9FTl9TWU5DX01TQiAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIEJUQ09FWF9JTlRfRU5fU1lOQ19MU0IgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBCVENPRVhfSU5UX0VOX1NZTkNfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgQlRDT0VYX0lOVF9FTl9TWU5DX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIEJUQ09FWF9JTlRfRU5fU1lOQ19NQVNLKSA+PiBCVENPRVhfSU5UX0VOX1NZTkNfTFNCKQotI2RlZmluZSBCVENPRVhfSU5UX0VOX1NZTkNfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IEJUQ09FWF9JTlRfRU5fU1lOQ19MU0IpICYgQlRDT0VYX0lOVF9FTl9TWU5DX01BU0spCi0jZGVmaW5lIEJUQ09FWF9JTlRfRU5fRU5EX01TQiAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBCVENPRVhfSU5UX0VOX0VORF9MU0IgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgQlRDT0VYX0lOVF9FTl9FTkRfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIEJUQ09FWF9JTlRfRU5fRU5EX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBCVENPRVhfSU5UX0VOX0VORF9NQVNLKSA+PiBCVENPRVhfSU5UX0VOX0VORF9MU0IpCi0jZGVmaW5lIEJUQ09FWF9JTlRfRU5fRU5EX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgQlRDT0VYX0lOVF9FTl9FTkRfTFNCKSAmIEJUQ09FWF9JTlRfRU5fRU5EX01BU0spCi0jZGVmaW5lIEJUQ09FWF9JTlRfRU5fRlJBTUVfQ05UX01TQiAgICAgICAgICAgICAgMQotI2RlZmluZSBCVENPRVhfSU5UX0VOX0ZSQU1FX0NOVF9MU0IgICAgICAgICAgICAgIDEKLSNkZWZpbmUgQlRDT0VYX0lOVF9FTl9GUkFNRV9DTlRfTUFTSyAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIEJUQ09FWF9JTlRfRU5fRlJBTUVfQ05UX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBCVENPRVhfSU5UX0VOX0ZSQU1FX0NOVF9NQVNLKSA+PiBCVENPRVhfSU5UX0VOX0ZSQU1FX0NOVF9MU0IpCi0jZGVmaW5lIEJUQ09FWF9JTlRfRU5fRlJBTUVfQ05UX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgQlRDT0VYX0lOVF9FTl9GUkFNRV9DTlRfTFNCKSAmIEJUQ09FWF9JTlRfRU5fRlJBTUVfQ05UX01BU0spCi0jZGVmaW5lIEJUQ09FWF9JTlRfRU5fQ0xLX0NOVF9NU0IgICAgICAgICAgICAgICAgMAotI2RlZmluZSBCVENPRVhfSU5UX0VOX0NMS19DTlRfTFNCICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgQlRDT0VYX0lOVF9FTl9DTEtfQ05UX01BU0sgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIEJUQ09FWF9JTlRfRU5fQ0xLX0NOVF9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBCVENPRVhfSU5UX0VOX0NMS19DTlRfTUFTSykgPj4gQlRDT0VYX0lOVF9FTl9DTEtfQ05UX0xTQikKLSNkZWZpbmUgQlRDT0VYX0lOVF9FTl9DTEtfQ05UX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBCVENPRVhfSU5UX0VOX0NMS19DTlRfTFNCKSAmIEJUQ09FWF9JTlRfRU5fQ0xLX0NOVF9NQVNLKQotCi0jZGVmaW5lIEJUQ09FWF9JTlRfU1RBVF9BRERSRVNTICAgICAgICAgICAgICAgICAgMHgwMDAwMDI2OAotI2RlZmluZSBCVENPRVhfSU5UX1NUQVRfT0ZGU0VUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyNjgKLSNkZWZpbmUgQlRDT0VYX0lOVF9TVEFUX0kyQ19SRUNWX09WRVJGTE9XX01TQiAgICAxMQotI2RlZmluZSBCVENPRVhfSU5UX1NUQVRfSTJDX1JFQ1ZfT1ZFUkZMT1dfTFNCICAgIDExCi0jZGVmaW5lIEJUQ09FWF9JTlRfU1RBVF9JMkNfUkVDVl9PVkVSRkxPV19NQVNLICAgMHgwMDAwMDgwMAotI2RlZmluZSBCVENPRVhfSU5UX1NUQVRfSTJDX1JFQ1ZfT1ZFUkZMT1dfR0VUKHgpICgoKHgpICYgQlRDT0VYX0lOVF9TVEFUX0kyQ19SRUNWX09WRVJGTE9XX01BU0spID4+IEJUQ09FWF9JTlRfU1RBVF9JMkNfUkVDVl9PVkVSRkxPV19MU0IpCi0jZGVmaW5lIEJUQ09FWF9JTlRfU1RBVF9JMkNfUkVDVl9PVkVSRkxPV19TRVQoeCkgKCgoeCkgPDwgQlRDT0VYX0lOVF9TVEFUX0kyQ19SRUNWX09WRVJGTE9XX0xTQikgJiBCVENPRVhfSU5UX1NUQVRfSTJDX1JFQ1ZfT1ZFUkZMT1dfTUFTSykKLSNkZWZpbmUgQlRDT0VYX0lOVF9TVEFUX0kyQ19UWF9GQUlMRURfTVNCICAgICAgICAxMAotI2RlZmluZSBCVENPRVhfSU5UX1NUQVRfSTJDX1RYX0ZBSUxFRF9MU0IgICAgICAgIDEwCi0jZGVmaW5lIEJUQ09FWF9JTlRfU1RBVF9JMkNfVFhfRkFJTEVEX01BU0sgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBCVENPRVhfSU5UX1NUQVRfSTJDX1RYX0ZBSUxFRF9HRVQoeCkgICAgICgoKHgpICYgQlRDT0VYX0lOVF9TVEFUX0kyQ19UWF9GQUlMRURfTUFTSykgPj4gQlRDT0VYX0lOVF9TVEFUX0kyQ19UWF9GQUlMRURfTFNCKQotI2RlZmluZSBCVENPRVhfSU5UX1NUQVRfSTJDX1RYX0ZBSUxFRF9TRVQoeCkgICAgICgoKHgpIDw8IEJUQ09FWF9JTlRfU1RBVF9JMkNfVFhfRkFJTEVEX0xTQikgJiBCVENPRVhfSU5UX1NUQVRfSTJDX1RYX0ZBSUxFRF9NQVNLKQotI2RlZmluZSBCVENPRVhfSU5UX1NUQVRfSTJDX01FU0dfU0VOVF9NU0IgICAgICAgIDkKLSNkZWZpbmUgQlRDT0VYX0lOVF9TVEFUX0kyQ19NRVNHX1NFTlRfTFNCICAgICAgICA5Ci0jZGVmaW5lIEJUQ09FWF9JTlRfU1RBVF9JMkNfTUVTR19TRU5UX01BU0sgICAgICAgMHgwMDAwMDIwMAotI2RlZmluZSBCVENPRVhfSU5UX1NUQVRfSTJDX01FU0dfU0VOVF9HRVQoeCkgICAgICgoKHgpICYgQlRDT0VYX0lOVF9TVEFUX0kyQ19NRVNHX1NFTlRfTUFTSykgPj4gQlRDT0VYX0lOVF9TVEFUX0kyQ19NRVNHX1NFTlRfTFNCKQotI2RlZmluZSBCVENPRVhfSU5UX1NUQVRfSTJDX01FU0dfU0VOVF9TRVQoeCkgICAgICgoKHgpIDw8IEJUQ09FWF9JTlRfU1RBVF9JMkNfTUVTR19TRU5UX0xTQikgJiBCVENPRVhfSU5UX1NUQVRfSTJDX01FU0dfU0VOVF9NQVNLKQotI2RlZmluZSBCVENPRVhfSU5UX1NUQVRfSTJDX01FU0dfUkVDVl9NU0IgICAgICAgIDgKLSNkZWZpbmUgQlRDT0VYX0lOVF9TVEFUX0kyQ19NRVNHX1JFQ1ZfTFNCICAgICAgICA4Ci0jZGVmaW5lIEJUQ09FWF9JTlRfU1RBVF9JMkNfTUVTR19SRUNWX01BU0sgICAgICAgMHgwMDAwMDEwMAotI2RlZmluZSBCVENPRVhfSU5UX1NUQVRfSTJDX01FU0dfUkVDVl9HRVQoeCkgICAgICgoKHgpICYgQlRDT0VYX0lOVF9TVEFUX0kyQ19NRVNHX1JFQ1ZfTUFTSykgPj4gQlRDT0VYX0lOVF9TVEFUX0kyQ19NRVNHX1JFQ1ZfTFNCKQotI2RlZmluZSBCVENPRVhfSU5UX1NUQVRfSTJDX01FU0dfUkVDVl9TRVQoeCkgICAgICgoKHgpIDw8IEJUQ09FWF9JTlRfU1RBVF9JMkNfTUVTR19SRUNWX0xTQikgJiBCVENPRVhfSU5UX1NUQVRfSTJDX01FU0dfUkVDVl9NQVNLKQotI2RlZmluZSBCVENPRVhfSU5UX1NUQVRfV0JfVElNRVJfTVNCICAgICAgICAgICAgIDcKLSNkZWZpbmUgQlRDT0VYX0lOVF9TVEFUX1dCX1RJTUVSX0xTQiAgICAgICAgICAgICA3Ci0jZGVmaW5lIEJUQ09FWF9JTlRfU1RBVF9XQl9USU1FUl9NQVNLICAgICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBCVENPRVhfSU5UX1NUQVRfV0JfVElNRVJfR0VUKHgpICAgICAgICAgICgoKHgpICYgQlRDT0VYX0lOVF9TVEFUX1dCX1RJTUVSX01BU0spID4+IEJUQ09FWF9JTlRfU1RBVF9XQl9USU1FUl9MU0IpCi0jZGVmaW5lIEJUQ09FWF9JTlRfU1RBVF9XQl9USU1FUl9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgQlRDT0VYX0lOVF9TVEFUX1dCX1RJTUVSX0xTQikgJiBCVENPRVhfSU5UX1NUQVRfV0JfVElNRVJfTUFTSykKLSNkZWZpbmUgQlRDT0VYX0lOVF9TVEFUX0JUUFJJT1JJVFlfU1RPTVBfTVNCICAgICA2Ci0jZGVmaW5lIEJUQ09FWF9JTlRfU1RBVF9CVFBSSU9SSVRZX1NUT01QX0xTQiAgICAgNgotI2RlZmluZSBCVENPRVhfSU5UX1NUQVRfQlRQUklPUklUWV9TVE9NUF9NQVNLICAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgQlRDT0VYX0lOVF9TVEFUX0JUUFJJT1JJVFlfU1RPTVBfR0VUKHgpICAoKCh4KSAmIEJUQ09FWF9JTlRfU1RBVF9CVFBSSU9SSVRZX1NUT01QX01BU0spID4+IEJUQ09FWF9JTlRfU1RBVF9CVFBSSU9SSVRZX1NUT01QX0xTQikKLSNkZWZpbmUgQlRDT0VYX0lOVF9TVEFUX0JUUFJJT1JJVFlfU1RPTVBfU0VUKHgpICAoKCh4KSA8PCBCVENPRVhfSU5UX1NUQVRfQlRQUklPUklUWV9TVE9NUF9MU0IpICYgQlRDT0VYX0lOVF9TVEFUX0JUUFJJT1JJVFlfU1RPTVBfTUFTSykKLSNkZWZpbmUgQlRDT0VYX0lOVF9TVEFUX0JUUFJJT1JJVFlfTVNCICAgICAgICAgICA1Ci0jZGVmaW5lIEJUQ09FWF9JTlRfU1RBVF9CVFBSSU9SSVRZX0xTQiAgICAgICAgICAgNQotI2RlZmluZSBCVENPRVhfSU5UX1NUQVRfQlRQUklPUklUWV9NQVNLICAgICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgQlRDT0VYX0lOVF9TVEFUX0JUUFJJT1JJVFlfR0VUKHgpICAgICAgICAoKCh4KSAmIEJUQ09FWF9JTlRfU1RBVF9CVFBSSU9SSVRZX01BU0spID4+IEJUQ09FWF9JTlRfU1RBVF9CVFBSSU9SSVRZX0xTQikKLSNkZWZpbmUgQlRDT0VYX0lOVF9TVEFUX0JUUFJJT1JJVFlfU0VUKHgpICAgICAgICAoKCh4KSA8PCBCVENPRVhfSU5UX1NUQVRfQlRQUklPUklUWV9MU0IpICYgQlRDT0VYX0lOVF9TVEFUX0JUUFJJT1JJVFlfTUFTSykKLSNkZWZpbmUgQlRDT0VYX0lOVF9TVEFUX05PU1lOQ19NU0IgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIEJUQ09FWF9JTlRfU1RBVF9OT1NZTkNfTFNCICAgICAgICAgICAgICAgNAotI2RlZmluZSBCVENPRVhfSU5UX1NUQVRfTk9TWU5DX01BU0sgICAgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgQlRDT0VYX0lOVF9TVEFUX05PU1lOQ19HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIEJUQ09FWF9JTlRfU1RBVF9OT1NZTkNfTUFTSykgPj4gQlRDT0VYX0lOVF9TVEFUX05PU1lOQ19MU0IpCi0jZGVmaW5lIEJUQ09FWF9JTlRfU1RBVF9OT1NZTkNfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgQlRDT0VYX0lOVF9TVEFUX05PU1lOQ19MU0IpICYgQlRDT0VYX0lOVF9TVEFUX05PU1lOQ19NQVNLKQotI2RlZmluZSBCVENPRVhfSU5UX1NUQVRfU1lOQ19NU0IgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgQlRDT0VYX0lOVF9TVEFUX1NZTkNfTFNCICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIEJUQ09FWF9JTlRfU1RBVF9TWU5DX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBCVENPRVhfSU5UX1NUQVRfU1lOQ19HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgQlRDT0VYX0lOVF9TVEFUX1NZTkNfTUFTSykgPj4gQlRDT0VYX0lOVF9TVEFUX1NZTkNfTFNCKQotI2RlZmluZSBCVENPRVhfSU5UX1NUQVRfU1lOQ19TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IEJUQ09FWF9JTlRfU1RBVF9TWU5DX0xTQikgJiBCVENPRVhfSU5UX1NUQVRfU1lOQ19NQVNLKQotI2RlZmluZSBCVENPRVhfSU5UX1NUQVRfRU5EX01TQiAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgQlRDT0VYX0lOVF9TVEFUX0VORF9MU0IgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIEJUQ09FWF9JTlRfU1RBVF9FTkRfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBCVENPRVhfSU5UX1NUQVRfRU5EX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgQlRDT0VYX0lOVF9TVEFUX0VORF9NQVNLKSA+PiBCVENPRVhfSU5UX1NUQVRfRU5EX0xTQikKLSNkZWZpbmUgQlRDT0VYX0lOVF9TVEFUX0VORF9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBCVENPRVhfSU5UX1NUQVRfRU5EX0xTQikgJiBCVENPRVhfSU5UX1NUQVRfRU5EX01BU0spCi0jZGVmaW5lIEJUQ09FWF9JTlRfU1RBVF9GUkFNRV9DTlRfTVNCICAgICAgICAgICAgMQotI2RlZmluZSBCVENPRVhfSU5UX1NUQVRfRlJBTUVfQ05UX0xTQiAgICAgICAgICAgIDEKLSNkZWZpbmUgQlRDT0VYX0lOVF9TVEFUX0ZSQU1FX0NOVF9NQVNLICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIEJUQ09FWF9JTlRfU1RBVF9GUkFNRV9DTlRfR0VUKHgpICAgICAgICAgKCgoeCkgJiBCVENPRVhfSU5UX1NUQVRfRlJBTUVfQ05UX01BU0spID4+IEJUQ09FWF9JTlRfU1RBVF9GUkFNRV9DTlRfTFNCKQotI2RlZmluZSBCVENPRVhfSU5UX1NUQVRfRlJBTUVfQ05UX1NFVCh4KSAgICAgICAgICgoKHgpIDw8IEJUQ09FWF9JTlRfU1RBVF9GUkFNRV9DTlRfTFNCKSAmIEJUQ09FWF9JTlRfU1RBVF9GUkFNRV9DTlRfTUFTSykKLSNkZWZpbmUgQlRDT0VYX0lOVF9TVEFUX0NMS19DTlRfTVNCICAgICAgICAgICAgICAwCi0jZGVmaW5lIEJUQ09FWF9JTlRfU1RBVF9DTEtfQ05UX0xTQiAgICAgICAgICAgICAgMAotI2RlZmluZSBCVENPRVhfSU5UX1NUQVRfQ0xLX0NOVF9NQVNLICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgQlRDT0VYX0lOVF9TVEFUX0NMS19DTlRfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIEJUQ09FWF9JTlRfU1RBVF9DTEtfQ05UX01BU0spID4+IEJUQ09FWF9JTlRfU1RBVF9DTEtfQ05UX0xTQikKLSNkZWZpbmUgQlRDT0VYX0lOVF9TVEFUX0NMS19DTlRfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCBCVENPRVhfSU5UX1NUQVRfQ0xLX0NOVF9MU0IpICYgQlRDT0VYX0lOVF9TVEFUX0NMS19DTlRfTUFTSykKLQotI2RlZmluZSBCVFBSSU9SSVRZX0lOVF9FTl9BRERSRVNTICAgICAgICAgICAgICAgIDB4MDAwMDAyNmMKLSNkZWZpbmUgQlRQUklPUklUWV9JTlRfRU5fT0ZGU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMjZjCi0jZGVmaW5lIEJUUFJJT1JJVFlfSU5UX0VOX0JJVE1BUF9NU0IgICAgICAgICAgICAgMzEKLSNkZWZpbmUgQlRQUklPUklUWV9JTlRfRU5fQklUTUFQX0xTQiAgICAgICAgICAgICAwCi0jZGVmaW5lIEJUUFJJT1JJVFlfSU5UX0VOX0JJVE1BUF9NQVNLICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBCVFBSSU9SSVRZX0lOVF9FTl9CSVRNQVBfR0VUKHgpICAgICAgICAgICgoKHgpICYgQlRQUklPUklUWV9JTlRfRU5fQklUTUFQX01BU0spID4+IEJUUFJJT1JJVFlfSU5UX0VOX0JJVE1BUF9MU0IpCi0jZGVmaW5lIEJUUFJJT1JJVFlfSU5UX0VOX0JJVE1BUF9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgQlRQUklPUklUWV9JTlRfRU5fQklUTUFQX0xTQikgJiBCVFBSSU9SSVRZX0lOVF9FTl9CSVRNQVBfTUFTSykKLQotI2RlZmluZSBCVFBSSU9SSVRZX0lOVF9TVEFUX0FERFJFU1MgICAgICAgICAgICAgIDB4MDAwMDAyNzAKLSNkZWZpbmUgQlRQUklPUklUWV9JTlRfU1RBVF9PRkZTRVQgICAgICAgICAgICAgICAweDAwMDAwMjcwCi0jZGVmaW5lIEJUUFJJT1JJVFlfSU5UX1NUQVRfQklUTUFQX01TQiAgICAgICAgICAgMzEKLSNkZWZpbmUgQlRQUklPUklUWV9JTlRfU1RBVF9CSVRNQVBfTFNCICAgICAgICAgICAwCi0jZGVmaW5lIEJUUFJJT1JJVFlfSU5UX1NUQVRfQklUTUFQX01BU0sgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBCVFBSSU9SSVRZX0lOVF9TVEFUX0JJVE1BUF9HRVQoeCkgICAgICAgICgoKHgpICYgQlRQUklPUklUWV9JTlRfU1RBVF9CSVRNQVBfTUFTSykgPj4gQlRQUklPUklUWV9JTlRfU1RBVF9CSVRNQVBfTFNCKQotI2RlZmluZSBCVFBSSU9SSVRZX0lOVF9TVEFUX0JJVE1BUF9TRVQoeCkgICAgICAgICgoKHgpIDw8IEJUUFJJT1JJVFlfSU5UX1NUQVRfQklUTUFQX0xTQikgJiBCVFBSSU9SSVRZX0lOVF9TVEFUX0JJVE1BUF9NQVNLKQotCi0jZGVmaW5lIEJUUFJJT1JJVFlfU1RPTVBfSU5UX0VOX0FERFJFU1MgICAgICAgICAgMHgwMDAwMDI3NAotI2RlZmluZSBCVFBSSU9SSVRZX1NUT01QX0lOVF9FTl9PRkZTRVQgICAgICAgICAgIDB4MDAwMDAyNzQKLSNkZWZpbmUgQlRQUklPUklUWV9TVE9NUF9JTlRfRU5fQklUTUFQX01TQiAgICAgICAzMQotI2RlZmluZSBCVFBSSU9SSVRZX1NUT01QX0lOVF9FTl9CSVRNQVBfTFNCICAgICAgIDAKLSNkZWZpbmUgQlRQUklPUklUWV9TVE9NUF9JTlRfRU5fQklUTUFQX01BU0sgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIEJUUFJJT1JJVFlfU1RPTVBfSU5UX0VOX0JJVE1BUF9HRVQoeCkgICAgKCgoeCkgJiBCVFBSSU9SSVRZX1NUT01QX0lOVF9FTl9CSVRNQVBfTUFTSykgPj4gQlRQUklPUklUWV9TVE9NUF9JTlRfRU5fQklUTUFQX0xTQikKLSNkZWZpbmUgQlRQUklPUklUWV9TVE9NUF9JTlRfRU5fQklUTUFQX1NFVCh4KSAgICAoKCh4KSA8PCBCVFBSSU9SSVRZX1NUT01QX0lOVF9FTl9CSVRNQVBfTFNCKSAmIEJUUFJJT1JJVFlfU1RPTVBfSU5UX0VOX0JJVE1BUF9NQVNLKQotCi0jZGVmaW5lIEJUUFJJT1JJVFlfU1RPTVBfSU5UX1NUQVRfQUREUkVTUyAgICAgICAgMHgwMDAwMDI3OAotI2RlZmluZSBCVFBSSU9SSVRZX1NUT01QX0lOVF9TVEFUX09GRlNFVCAgICAgICAgIDB4MDAwMDAyNzgKLSNkZWZpbmUgQlRQUklPUklUWV9TVE9NUF9JTlRfU1RBVF9CSVRNQVBfTVNCICAgICAzMQotI2RlZmluZSBCVFBSSU9SSVRZX1NUT01QX0lOVF9TVEFUX0JJVE1BUF9MU0IgICAgIDAKLSNkZWZpbmUgQlRQUklPUklUWV9TVE9NUF9JTlRfU1RBVF9CSVRNQVBfTUFTSyAgICAweGZmZmZmZmZmCi0jZGVmaW5lIEJUUFJJT1JJVFlfU1RPTVBfSU5UX1NUQVRfQklUTUFQX0dFVCh4KSAgKCgoeCkgJiBCVFBSSU9SSVRZX1NUT01QX0lOVF9TVEFUX0JJVE1BUF9NQVNLKSA+PiBCVFBSSU9SSVRZX1NUT01QX0lOVF9TVEFUX0JJVE1BUF9MU0IpCi0jZGVmaW5lIEJUUFJJT1JJVFlfU1RPTVBfSU5UX1NUQVRfQklUTUFQX1NFVCh4KSAgKCgoeCkgPDwgQlRQUklPUklUWV9TVE9NUF9JTlRfU1RBVF9CSVRNQVBfTFNCKSAmIEJUUFJJT1JJVFlfU1RPTVBfSU5UX1NUQVRfQklUTUFQX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9CTUlTU19USU1FT1VUX0FERFJFU1MgICAgICAgICAgICAweDAwMDAwMjdjCi0jZGVmaW5lIE1BQ19QQ1VfQk1JU1NfVElNRU9VVF9PRkZTRVQgICAgICAgICAgICAgMHgwMDAwMDI3YwotI2RlZmluZSBNQUNfUENVX0JNSVNTX1RJTUVPVVRfRU5BQkxFX01TQiAgICAgICAgIDI0Ci0jZGVmaW5lIE1BQ19QQ1VfQk1JU1NfVElNRU9VVF9FTkFCTEVfTFNCICAgICAgICAgMjQKLSNkZWZpbmUgTUFDX1BDVV9CTUlTU19USU1FT1VUX0VOQUJMRV9NQVNLICAgICAgICAweDAxMDAwMDAwCi0jZGVmaW5lIE1BQ19QQ1VfQk1JU1NfVElNRU9VVF9FTkFCTEVfR0VUKHgpICAgICAgKCgoeCkgJiBNQUNfUENVX0JNSVNTX1RJTUVPVVRfRU5BQkxFX01BU0spID4+IE1BQ19QQ1VfQk1JU1NfVElNRU9VVF9FTkFCTEVfTFNCKQotI2RlZmluZSBNQUNfUENVX0JNSVNTX1RJTUVPVVRfRU5BQkxFX1NFVCh4KSAgICAgICgoKHgpIDw8IE1BQ19QQ1VfQk1JU1NfVElNRU9VVF9FTkFCTEVfTFNCKSAmIE1BQ19QQ1VfQk1JU1NfVElNRU9VVF9FTkFCTEVfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9CTUlTU19USU1FT1VUX1ZBTFVFX01TQiAgICAgICAgICAyMwotI2RlZmluZSBNQUNfUENVX0JNSVNTX1RJTUVPVVRfVkFMVUVfTFNCICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9CTUlTU19USU1FT1VUX1ZBTFVFX01BU0sgICAgICAgICAweDAwZmZmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfQk1JU1NfVElNRU9VVF9WQUxVRV9HRVQoeCkgICAgICAgKCgoeCkgJiBNQUNfUENVX0JNSVNTX1RJTUVPVVRfVkFMVUVfTUFTSykgPj4gTUFDX1BDVV9CTUlTU19USU1FT1VUX1ZBTFVFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9CTUlTU19USU1FT1VUX1ZBTFVFX1NFVCh4KSAgICAgICAoKCh4KSA8PCBNQUNfUENVX0JNSVNTX1RJTUVPVVRfVkFMVUVfTFNCKSAmIE1BQ19QQ1VfQk1JU1NfVElNRU9VVF9WQUxVRV9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfQ0FCX0FXQUtFX0FERFJFU1MgICAgICAgICAgICAgICAgMHgwMDAwMDI4MAotI2RlZmluZSBNQUNfUENVX0NBQl9BV0FLRV9PRkZTRVQgICAgICAgICAgICAgICAgIDB4MDAwMDAyODAKLSNkZWZpbmUgTUFDX1BDVV9DQUJfQVdBS0VfRU5BQkxFX01TQiAgICAgICAgICAgICAxNgotI2RlZmluZSBNQUNfUENVX0NBQl9BV0FLRV9FTkFCTEVfTFNCICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIE1BQ19QQ1VfQ0FCX0FXQUtFX0VOQUJMRV9NQVNLICAgICAgICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBNQUNfUENVX0NBQl9BV0FLRV9FTkFCTEVfR0VUKHgpICAgICAgICAgICgoKHgpICYgTUFDX1BDVV9DQUJfQVdBS0VfRU5BQkxFX01BU0spID4+IE1BQ19QQ1VfQ0FCX0FXQUtFX0VOQUJMRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQ0FCX0FXQUtFX0VOQUJMRV9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9DQUJfQVdBS0VfRU5BQkxFX0xTQikgJiBNQUNfUENVX0NBQl9BV0FLRV9FTkFCTEVfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9DQUJfQVdBS0VfRFVSQVRJT05fTVNCICAgICAgICAgICAxNQotI2RlZmluZSBNQUNfUENVX0NBQl9BV0FLRV9EVVJBVElPTl9MU0IgICAgICAgICAgIDAKLSNkZWZpbmUgTUFDX1BDVV9DQUJfQVdBS0VfRFVSQVRJT05fTUFTSyAgICAgICAgICAweDAwMDBmZmZmCi0jZGVmaW5lIE1BQ19QQ1VfQ0FCX0FXQUtFX0RVUkFUSU9OX0dFVCh4KSAgICAgICAgKCgoeCkgJiBNQUNfUENVX0NBQl9BV0FLRV9EVVJBVElPTl9NQVNLKSA+PiBNQUNfUENVX0NBQl9BV0FLRV9EVVJBVElPTl9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfQ0FCX0FXQUtFX0RVUkFUSU9OX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9DQUJfQVdBS0VfRFVSQVRJT05fTFNCKSAmIE1BQ19QQ1VfQ0FCX0FXQUtFX0RVUkFUSU9OX01BU0spCi0KLSNkZWZpbmUgTFBfUEVSRl9DT1VOVEVSX0FERFJFU1MgICAgICAgICAgICAgICAgICAweDAwMDAwMjg0Ci0jZGVmaW5lIExQX1BFUkZfQ09VTlRFUl9PRkZTRVQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDI4NAotI2RlZmluZSBMUF9QRVJGX0NPVU5URVJfRU5fTVNCICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTFBfUEVSRl9DT1VOVEVSX0VOX0xTQiAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIExQX1BFUkZfQ09VTlRFUl9FTl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBMUF9QRVJGX0NPVU5URVJfRU5fR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgTFBfUEVSRl9DT1VOVEVSX0VOX01BU0spID4+IExQX1BFUkZfQ09VTlRFUl9FTl9MU0IpCi0jZGVmaW5lIExQX1BFUkZfQ09VTlRFUl9FTl9TRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPDwgTFBfUEVSRl9DT1VOVEVSX0VOX0xTQikgJiBMUF9QRVJGX0NPVU5URVJfRU5fTUFTSykKLQotI2RlZmluZSBMUF9QRVJGX0xJR0hUX1NMRUVQX0FERFJFU1MgICAgICAgICAgICAgIDB4MDAwMDAyODgKLSNkZWZpbmUgTFBfUEVSRl9MSUdIVF9TTEVFUF9PRkZTRVQgICAgICAgICAgICAgICAweDAwMDAwMjg4Ci0jZGVmaW5lIExQX1BFUkZfTElHSFRfU0xFRVBfQ05UX01TQiAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgTFBfUEVSRl9MSUdIVF9TTEVFUF9DTlRfTFNCICAgICAgICAgICAgICAwCi0jZGVmaW5lIExQX1BFUkZfTElHSFRfU0xFRVBfQ05UX01BU0sgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBMUF9QRVJGX0xJR0hUX1NMRUVQX0NOVF9HRVQoeCkgICAgICAgICAgICgoKHgpICYgTFBfUEVSRl9MSUdIVF9TTEVFUF9DTlRfTUFTSykgPj4gTFBfUEVSRl9MSUdIVF9TTEVFUF9DTlRfTFNCKQotI2RlZmluZSBMUF9QRVJGX0xJR0hUX1NMRUVQX0NOVF9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IExQX1BFUkZfTElHSFRfU0xFRVBfQ05UX0xTQikgJiBMUF9QRVJGX0xJR0hUX1NMRUVQX0NOVF9NQVNLKQotCi0jZGVmaW5lIExQX1BFUkZfREVFUF9TTEVFUF9BRERSRVNTICAgICAgICAgICAgICAgMHgwMDAwMDI4YwotI2RlZmluZSBMUF9QRVJGX0RFRVBfU0xFRVBfT0ZGU0VUICAgICAgICAgICAgICAgIDB4MDAwMDAyOGMKLSNkZWZpbmUgTFBfUEVSRl9ERUVQX1NMRUVQX0NOVF9NU0IgICAgICAgICAgICAgICAzMQotI2RlZmluZSBMUF9QRVJGX0RFRVBfU0xFRVBfQ05UX0xTQiAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTFBfUEVSRl9ERUVQX1NMRUVQX0NOVF9NQVNLICAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIExQX1BFUkZfREVFUF9TTEVFUF9DTlRfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBMUF9QRVJGX0RFRVBfU0xFRVBfQ05UX01BU0spID4+IExQX1BFUkZfREVFUF9TTEVFUF9DTlRfTFNCKQotI2RlZmluZSBMUF9QRVJGX0RFRVBfU0xFRVBfQ05UX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IExQX1BFUkZfREVFUF9TTEVFUF9DTlRfTFNCKSAmIExQX1BFUkZfREVFUF9TTEVFUF9DTlRfTUFTSykKLQotI2RlZmluZSBMUF9QRVJGX09OX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyOTAKLSNkZWZpbmUgTFBfUEVSRl9PTl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjkwCi0jZGVmaW5lIExQX1BFUkZfT05fQ05UX01TQiAgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgTFBfUEVSRl9PTl9DTlRfTFNCICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIExQX1BFUkZfT05fQ05UX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBMUF9QRVJGX09OX0NOVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgTFBfUEVSRl9PTl9DTlRfTUFTSykgPj4gTFBfUEVSRl9PTl9DTlRfTFNCKQotI2RlZmluZSBMUF9QRVJGX09OX0NOVF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IExQX1BFUkZfT05fQ05UX0xTQikgJiBMUF9QRVJGX09OX0NOVF9NQVNLKQotCi0jZGVmaW5lIFNUXzY0X0JJVF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDI5NAotI2RlZmluZSBTVF82NF9CSVRfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyOTQKLSNkZWZpbmUgU1RfNjRfQklUX1RJTUVPVVRfTVNCICAgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBTVF82NF9CSVRfVElNRU9VVF9MU0IgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgU1RfNjRfQklUX1RJTUVPVVRfTUFTSyAgICAgICAgICAgICAgICAgICAweDA3ZmZmZTAwCi0jZGVmaW5lIFNUXzY0X0JJVF9USU1FT1VUX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBTVF82NF9CSVRfVElNRU9VVF9NQVNLKSA+PiBTVF82NF9CSVRfVElNRU9VVF9MU0IpCi0jZGVmaW5lIFNUXzY0X0JJVF9USU1FT1VUX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgU1RfNjRfQklUX1RJTUVPVVRfTFNCKSAmIFNUXzY0X0JJVF9USU1FT1VUX01BU0spCi0jZGVmaW5lIFNUXzY0X0JJVF9SRVFfQUNLX05PVF9QVUxMRURfRE9XTl9NU0IgICAgOAotI2RlZmluZSBTVF82NF9CSVRfUkVRX0FDS19OT1RfUFVMTEVEX0RPV05fTFNCICAgIDgKLSNkZWZpbmUgU1RfNjRfQklUX1JFUV9BQ0tfTk9UX1BVTExFRF9ET1dOX01BU0sgICAweDAwMDAwMTAwCi0jZGVmaW5lIFNUXzY0X0JJVF9SRVFfQUNLX05PVF9QVUxMRURfRE9XTl9HRVQoeCkgKCgoeCkgJiBTVF82NF9CSVRfUkVRX0FDS19OT1RfUFVMTEVEX0RPV05fTUFTSykgPj4gU1RfNjRfQklUX1JFUV9BQ0tfTk9UX1BVTExFRF9ET1dOX0xTQikKLSNkZWZpbmUgU1RfNjRfQklUX1JFUV9BQ0tfTk9UX1BVTExFRF9ET1dOX1NFVCh4KSAoKCh4KSA8PCBTVF82NF9CSVRfUkVRX0FDS19OT1RfUFVMTEVEX0RPV05fTFNCKSAmIFNUXzY0X0JJVF9SRVFfQUNLX05PVF9QVUxMRURfRE9XTl9NQVNLKQotI2RlZmluZSBTVF82NF9CSVRfRFJJVkVfTU9ERV9NU0IgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgU1RfNjRfQklUX0RSSVZFX01PREVfTFNCICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFNUXzY0X0JJVF9EUklWRV9NT0RFX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBTVF82NF9CSVRfRFJJVkVfTU9ERV9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgU1RfNjRfQklUX0RSSVZFX01PREVfTUFTSykgPj4gU1RfNjRfQklUX0RSSVZFX01PREVfTFNCKQotI2RlZmluZSBTVF82NF9CSVRfRFJJVkVfTU9ERV9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFNUXzY0X0JJVF9EUklWRV9NT0RFX0xTQikgJiBTVF82NF9CSVRfRFJJVkVfTU9ERV9NQVNLKQotI2RlZmluZSBTVF82NF9CSVRfQ0xPQ0tfR0FURV9NU0IgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgU1RfNjRfQklUX0NMT0NLX0dBVEVfTFNCICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFNUXzY0X0JJVF9DTE9DS19HQVRFX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAotI2RlZmluZSBTVF82NF9CSVRfQ0xPQ0tfR0FURV9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgU1RfNjRfQklUX0NMT0NLX0dBVEVfTUFTSykgPj4gU1RfNjRfQklUX0NMT0NLX0dBVEVfTFNCKQotI2RlZmluZSBTVF82NF9CSVRfQ0xPQ0tfR0FURV9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFNUXzY0X0JJVF9DTE9DS19HQVRFX0xTQikgJiBTVF82NF9CSVRfQ0xPQ0tfR0FURV9NQVNLKQotI2RlZmluZSBTVF82NF9CSVRfU09DX0NMS19ESVZJREVfUkFUSU9fTVNCICAgICAgIDUKLSNkZWZpbmUgU1RfNjRfQklUX1NPQ19DTEtfRElWSURFX1JBVElPX0xTQiAgICAgICAxCi0jZGVmaW5lIFNUXzY0X0JJVF9TT0NfQ0xLX0RJVklERV9SQVRJT19NQVNLICAgICAgMHgwMDAwMDAzZQotI2RlZmluZSBTVF82NF9CSVRfU09DX0NMS19ESVZJREVfUkFUSU9fR0VUKHgpICAgICgoKHgpICYgU1RfNjRfQklUX1NPQ19DTEtfRElWSURFX1JBVElPX01BU0spID4+IFNUXzY0X0JJVF9TT0NfQ0xLX0RJVklERV9SQVRJT19MU0IpCi0jZGVmaW5lIFNUXzY0X0JJVF9TT0NfQ0xLX0RJVklERV9SQVRJT19TRVQoeCkgICAgKCgoeCkgPDwgU1RfNjRfQklUX1NPQ19DTEtfRElWSURFX1JBVElPX0xTQikgJiBTVF82NF9CSVRfU09DX0NMS19ESVZJREVfUkFUSU9fTUFTSykKLSNkZWZpbmUgU1RfNjRfQklUX01PREVfTVNCICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFNUXzY0X0JJVF9NT0RFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBTVF82NF9CSVRfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgU1RfNjRfQklUX01PREVfR0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFNUXzY0X0JJVF9NT0RFX01BU0spID4+IFNUXzY0X0JJVF9NT0RFX0xTQikKLSNkZWZpbmUgU1RfNjRfQklUX01PREVfU0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBTVF82NF9CSVRfTU9ERV9MU0IpICYgU1RfNjRfQklUX01PREVfTUFTSykKLQotI2RlZmluZSBNRVNTQUdFX1dSX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyOTgKLSNkZWZpbmUgTUVTU0FHRV9XUl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjk4Ci0jZGVmaW5lIE1FU1NBR0VfV1JfVFlQRV9NU0IgICAgICAgICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgTUVTU0FHRV9XUl9UWVBFX0xTQiAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1FU1NBR0VfV1JfVFlQRV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBNRVNTQUdFX1dSX1RZUEVfR0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgTUVTU0FHRV9XUl9UWVBFX01BU0spID4+IE1FU1NBR0VfV1JfVFlQRV9MU0IpCi0jZGVmaW5lIE1FU1NBR0VfV1JfVFlQRV9TRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgTUVTU0FHRV9XUl9UWVBFX0xTQikgJiBNRVNTQUdFX1dSX1RZUEVfTUFTSykKLQotI2RlZmluZSBNRVNTQUdFX1dSX1BfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyOWMKLSNkZWZpbmUgTUVTU0FHRV9XUl9QX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjljCi0jZGVmaW5lIE1FU1NBR0VfV1JfUF9QQVJBTUVURVJfTVNCICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgTUVTU0FHRV9XUl9QX1BBUkFNRVRFUl9MU0IgICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1FU1NBR0VfV1JfUF9QQVJBTUVURVJfTUFTSyAgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBNRVNTQUdFX1dSX1BfUEFSQU1FVEVSX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgTUVTU0FHRV9XUl9QX1BBUkFNRVRFUl9NQVNLKSA+PiBNRVNTQUdFX1dSX1BfUEFSQU1FVEVSX0xTQikKLSNkZWZpbmUgTUVTU0FHRV9XUl9QX1BBUkFNRVRFUl9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBNRVNTQUdFX1dSX1BfUEFSQU1FVEVSX0xTQikgJiBNRVNTQUdFX1dSX1BfUEFSQU1FVEVSX01BU0spCi0KLSNkZWZpbmUgTUVTU0FHRV9SRF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMmEwCi0jZGVmaW5lIE1FU1NBR0VfUkRfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDJhMAotI2RlZmluZSBNRVNTQUdFX1JEX1RZUEVfTVNCICAgICAgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIE1FU1NBR0VfUkRfVFlQRV9MU0IgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBNRVNTQUdFX1JEX1RZUEVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgTUVTU0FHRV9SRF9UWVBFX0dFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIE1FU1NBR0VfUkRfVFlQRV9NQVNLKSA+PiBNRVNTQUdFX1JEX1RZUEVfTFNCKQotI2RlZmluZSBNRVNTQUdFX1JEX1RZUEVfU0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IE1FU1NBR0VfUkRfVFlQRV9MU0IpICYgTUVTU0FHRV9SRF9UWVBFX01BU0spCi0KLSNkZWZpbmUgTUVTU0FHRV9SRF9QX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMmE0Ci0jZGVmaW5lIE1FU1NBR0VfUkRfUF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDJhNAotI2RlZmluZSBNRVNTQUdFX1JEX1BfUEFSQU1FVEVSX01TQiAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIE1FU1NBR0VfUkRfUF9QQVJBTUVURVJfTFNCICAgICAgICAgICAgICAgMAotI2RlZmluZSBNRVNTQUdFX1JEX1BfUEFSQU1FVEVSX01BU0sgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgTUVTU0FHRV9SRF9QX1BBUkFNRVRFUl9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIE1FU1NBR0VfUkRfUF9QQVJBTUVURVJfTUFTSykgPj4gTUVTU0FHRV9SRF9QX1BBUkFNRVRFUl9MU0IpCi0jZGVmaW5lIE1FU1NBR0VfUkRfUF9QQVJBTUVURVJfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgTUVTU0FHRV9SRF9QX1BBUkFNRVRFUl9MU0IpICYgTUVTU0FHRV9SRF9QX1BBUkFNRVRFUl9NQVNLKQotCi0jZGVmaW5lIENISVBfTU9ERV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDJhOAotI2RlZmluZSBDSElQX01PREVfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyYTgKLSNkZWZpbmUgQ0hJUF9NT0RFX0JJVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIENISVBfTU9ERV9CSVRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBDSElQX01PREVfQklUX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKLSNkZWZpbmUgQ0hJUF9NT0RFX0JJVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIENISVBfTU9ERV9CSVRfTUFTSykgPj4gQ0hJUF9NT0RFX0JJVF9MU0IpCi0jZGVmaW5lIENISVBfTU9ERV9CSVRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgQ0hJUF9NT0RFX0JJVF9MU0IpICYgQ0hJUF9NT0RFX0JJVF9NQVNLKQotCi0jZGVmaW5lIENMS19SRVFfRkFMTF9FREdFX0FERFJFU1MgICAgICAgICAgICAgICAgMHgwMDAwMDJhYwotI2RlZmluZSBDTEtfUkVRX0ZBTExfRURHRV9PRkZTRVQgICAgICAgICAgICAgICAgIDB4MDAwMDAyYWMKLSNkZWZpbmUgQ0xLX1JFUV9GQUxMX0VER0VfRU5fTVNCICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBDTEtfUkVRX0ZBTExfRURHRV9FTl9MU0IgICAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIENMS19SRVFfRkFMTF9FREdFX0VOX01BU0sgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBDTEtfUkVRX0ZBTExfRURHRV9FTl9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgQ0xLX1JFUV9GQUxMX0VER0VfRU5fTUFTSykgPj4gQ0xLX1JFUV9GQUxMX0VER0VfRU5fTFNCKQotI2RlZmluZSBDTEtfUkVRX0ZBTExfRURHRV9FTl9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IENMS19SRVFfRkFMTF9FREdFX0VOX0xTQikgJiBDTEtfUkVRX0ZBTExfRURHRV9FTl9NQVNLKQotI2RlZmluZSBDTEtfUkVRX0ZBTExfRURHRV9ERUxBWV9NU0IgICAgICAgICAgICAgIDcKLSNkZWZpbmUgQ0xLX1JFUV9GQUxMX0VER0VfREVMQVlfTFNCICAgICAgICAgICAgICAwCi0jZGVmaW5lIENMS19SRVFfRkFMTF9FREdFX0RFTEFZX01BU0sgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBDTEtfUkVRX0ZBTExfRURHRV9ERUxBWV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgQ0xLX1JFUV9GQUxMX0VER0VfREVMQVlfTUFTSykgPj4gQ0xLX1JFUV9GQUxMX0VER0VfREVMQVlfTFNCKQotI2RlZmluZSBDTEtfUkVRX0ZBTExfRURHRV9ERUxBWV9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IENMS19SRVFfRkFMTF9FREdFX0RFTEFZX0xTQikgJiBDTEtfUkVRX0ZBTExfRURHRV9ERUxBWV9NQVNLKQotCi0jZGVmaW5lIE9UUF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDJiMAotI2RlZmluZSBPVFBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyYjAKLSNkZWZpbmUgT1RQX0xETzI1X0VOX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIE9UUF9MRE8yNV9FTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBPVFBfTERPMjVfRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgT1RQX0xETzI1X0VOX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIE9UUF9MRE8yNV9FTl9NQVNLKSA+PiBPVFBfTERPMjVfRU5fTFNCKQotI2RlZmluZSBPVFBfTERPMjVfRU5fU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IE9UUF9MRE8yNV9FTl9MU0IpICYgT1RQX0xETzI1X0VOX01BU0spCi0jZGVmaW5lIE9UUF9WREQxMl9FTl9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBPVFBfVkREMTJfRU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgT1RQX1ZERDEyX0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIE9UUF9WREQxMl9FTl9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBPVFBfVkREMTJfRU5fTUFTSykgPj4gT1RQX1ZERDEyX0VOX0xTQikKLSNkZWZpbmUgT1RQX1ZERDEyX0VOX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBPVFBfVkREMTJfRU5fTFNCKSAmIE9UUF9WREQxMl9FTl9NQVNLKQotCi0jZGVmaW5lIE9UUF9TVEFUVVNfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDJiNAotI2RlZmluZSBPVFBfU1RBVFVTX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyYjQKLSNkZWZpbmUgT1RQX1NUQVRVU19MRE8yNV9FTl9SRUFEWV9NU0IgICAgICAgICAgICAxCi0jZGVmaW5lIE9UUF9TVEFUVVNfTERPMjVfRU5fUkVBRFlfTFNCICAgICAgICAgICAgMQotI2RlZmluZSBPVFBfU1RBVFVTX0xETzI1X0VOX1JFQURZX01BU0sgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgT1RQX1NUQVRVU19MRE8yNV9FTl9SRUFEWV9HRVQoeCkgICAgICAgICAoKCh4KSAmIE9UUF9TVEFUVVNfTERPMjVfRU5fUkVBRFlfTUFTSykgPj4gT1RQX1NUQVRVU19MRE8yNV9FTl9SRUFEWV9MU0IpCi0jZGVmaW5lIE9UUF9TVEFUVVNfTERPMjVfRU5fUkVBRFlfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgT1RQX1NUQVRVU19MRE8yNV9FTl9SRUFEWV9MU0IpICYgT1RQX1NUQVRVU19MRE8yNV9FTl9SRUFEWV9NQVNLKQotI2RlZmluZSBPVFBfU1RBVFVTX1ZERDEyX0VOX1JFQURZX01TQiAgICAgICAgICAgIDAKLSNkZWZpbmUgT1RQX1NUQVRVU19WREQxMl9FTl9SRUFEWV9MU0IgICAgICAgICAgICAwCi0jZGVmaW5lIE9UUF9TVEFUVVNfVkREMTJfRU5fUkVBRFlfTUFTSyAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBPVFBfU1RBVFVTX1ZERDEyX0VOX1JFQURZX0dFVCh4KSAgICAgICAgICgoKHgpICYgT1RQX1NUQVRVU19WREQxMl9FTl9SRUFEWV9NQVNLKSA+PiBPVFBfU1RBVFVTX1ZERDEyX0VOX1JFQURZX0xTQikKLSNkZWZpbmUgT1RQX1NUQVRVU19WREQxMl9FTl9SRUFEWV9TRVQoeCkgICAgICAgICAoKCh4KSA8PCBPVFBfU1RBVFVTX1ZERDEyX0VOX1JFQURZX0xTQikgJiBPVFBfU1RBVFVTX1ZERDEyX0VOX1JFQURZX01BU0spCi0KLSNkZWZpbmUgUE1VX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMmI4Ci0jZGVmaW5lIFBNVV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDJiOAotI2RlZmluZSBQTVVfUkVHX1dBS0VVUF9USU1FX1NFTF9NU0IgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUE1VX1JFR19XQUtFVVBfVElNRV9TRUxfTFNCICAgICAgICAgICAgICAwCi0jZGVmaW5lIFBNVV9SRUdfV0FLRVVQX1RJTUVfU0VMX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAwMwotI2RlZmluZSBQTVVfUkVHX1dBS0VVUF9USU1FX1NFTF9HRVQoeCkgICAgICAgICAgICgoKHgpICYgUE1VX1JFR19XQUtFVVBfVElNRV9TRUxfTUFTSykgPj4gUE1VX1JFR19XQUtFVVBfVElNRV9TRUxfTFNCKQotI2RlZmluZSBQTVVfUkVHX1dBS0VVUF9USU1FX1NFTF9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFBNVV9SRUdfV0FLRVVQX1RJTUVfU0VMX0xTQikgJiBQTVVfUkVHX1dBS0VVUF9USU1FX1NFTF9NQVNLKQotCi0jZGVmaW5lIFBNVV9DT05GSUdfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDJjMAotI2RlZmluZSBQTVVfQ09ORklHX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyYzAKLSNkZWZpbmUgUE1VX0NPTkZJR19WQUxVRV9NU0IgICAgICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBQTVVfQ09ORklHX1ZBTFVFX0xTQiAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUE1VX0NPTkZJR19WQUxVRV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDBmZmZmCi0jZGVmaW5lIFBNVV9DT05GSUdfVkFMVUVfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiBQTVVfQ09ORklHX1ZBTFVFX01BU0spID4+IFBNVV9DT05GSUdfVkFMVUVfTFNCKQotI2RlZmluZSBQTVVfQ09ORklHX1ZBTFVFX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFBNVV9DT05GSUdfVkFMVUVfTFNCKSAmIFBNVV9DT05GSUdfVkFMVUVfTUFTSykKLQotI2RlZmluZSBQTVVfQllQQVNTX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyYzgKLSNkZWZpbmUgUE1VX0JZUEFTU19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMmM4Ci0jZGVmaW5lIFBNVV9CWVBBU1NfU1dSRUdfTVNCICAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBQTVVfQllQQVNTX1NXUkVHX0xTQiAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUE1VX0JZUEFTU19TV1JFR19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFBNVV9CWVBBU1NfU1dSRUdfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiBQTVVfQllQQVNTX1NXUkVHX01BU0spID4+IFBNVV9CWVBBU1NfU1dSRUdfTFNCKQotI2RlZmluZSBQTVVfQllQQVNTX1NXUkVHX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFBNVV9CWVBBU1NfU1dSRUdfTFNCKSAmIFBNVV9CWVBBU1NfU1dSRUdfTUFTSykKLSNkZWZpbmUgUE1VX0JZUEFTU19EUkVHX01TQiAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFBNVV9CWVBBU1NfRFJFR19MU0IgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBQTVVfQllQQVNTX0RSRUdfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgUE1VX0JZUEFTU19EUkVHX0dFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFBNVV9CWVBBU1NfRFJFR19NQVNLKSA+PiBQTVVfQllQQVNTX0RSRUdfTFNCKQotI2RlZmluZSBQTVVfQllQQVNTX0RSRUdfU0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFBNVV9CWVBBU1NfRFJFR19MU0IpICYgUE1VX0JZUEFTU19EUkVHX01BU0spCi0jZGVmaW5lIFBNVV9CWVBBU1NfUEFSRUdfTVNCICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQTVVfQllQQVNTX1BBUkVHX0xTQiAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUE1VX0JZUEFTU19QQVJFR19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFBNVV9CWVBBU1NfUEFSRUdfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiBQTVVfQllQQVNTX1BBUkVHX01BU0spID4+IFBNVV9CWVBBU1NfUEFSRUdfTFNCKQotI2RlZmluZSBQTVVfQllQQVNTX1BBUkVHX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFBNVV9CWVBBU1NfUEFSRUdfTFNCKSAmIFBNVV9CWVBBU1NfUEFSRUdfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX1RTRjJfTDMyX0FERFJFU1MgICAgICAgICAgICAgICAgIDB4MDAwMDAyY2MKLSNkZWZpbmUgTUFDX1BDVV9UU0YyX0wzMl9PRkZTRVQgICAgICAgICAgICAgICAgICAweDAwMDAwMmNjCi0jZGVmaW5lIE1BQ19QQ1VfVFNGMl9MMzJfVkFMVUVfTVNCICAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgTUFDX1BDVV9UU0YyX0wzMl9WQUxVRV9MU0IgICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1BQ19QQ1VfVFNGMl9MMzJfVkFMVUVfTUFTSyAgICAgICAgICAgICAgMHhmZmZmZmZmZgotI2RlZmluZSBNQUNfUENVX1RTRjJfTDMyX1ZBTFVFX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgTUFDX1BDVV9UU0YyX0wzMl9WQUxVRV9NQVNLKSA+PiBNQUNfUENVX1RTRjJfTDMyX1ZBTFVFX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9UU0YyX0wzMl9WQUxVRV9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBNQUNfUENVX1RTRjJfTDMyX1ZBTFVFX0xTQikgJiBNQUNfUENVX1RTRjJfTDMyX1ZBTFVFX01BU0spCi0KLSNkZWZpbmUgTUFDX1BDVV9UU0YyX1UzMl9BRERSRVNTICAgICAgICAgICAgICAgICAweDAwMDAwMmQwCi0jZGVmaW5lIE1BQ19QQ1VfVFNGMl9VMzJfT0ZGU0VUICAgICAgICAgICAgICAgICAgMHgwMDAwMDJkMAotI2RlZmluZSBNQUNfUENVX1RTRjJfVTMyX1ZBTFVFX01TQiAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIE1BQ19QQ1VfVFNGMl9VMzJfVkFMVUVfTFNCICAgICAgICAgICAgICAgMAotI2RlZmluZSBNQUNfUENVX1RTRjJfVTMyX1ZBTFVFX01BU0sgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgTUFDX1BDVV9UU0YyX1UzMl9WQUxVRV9HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIE1BQ19QQ1VfVFNGMl9VMzJfVkFMVUVfTUFTSykgPj4gTUFDX1BDVV9UU0YyX1UzMl9WQUxVRV9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfVFNGMl9VMzJfVkFMVUVfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgTUFDX1BDVV9UU0YyX1UzMl9WQUxVRV9MU0IpICYgTUFDX1BDVV9UU0YyX1UzMl9WQUxVRV9NQVNLKQotCi0jZGVmaW5lIE1BQ19QQ1VfR0VORVJJQ19USU1FUlNfTU9ERTNfQUREUkVTUyAgICAgMHgwMDAwMDJkNAotI2RlZmluZSBNQUNfUENVX0dFTkVSSUNfVElNRVJTX01PREUzX09GRlNFVCAgICAgIDB4MDAwMDAyZDQKLSNkZWZpbmUgTUFDX1BDVV9HRU5FUklDX1RJTUVSU19NT0RFM19PVkVSRkxPV19JTkRFWF9NU0IgMjcKLSNkZWZpbmUgTUFDX1BDVV9HRU5FUklDX1RJTUVSU19NT0RFM19PVkVSRkxPV19JTkRFWF9MU0IgMjQKLSNkZWZpbmUgTUFDX1BDVV9HRU5FUklDX1RJTUVSU19NT0RFM19PVkVSRkxPV19JTkRFWF9NQVNLIDB4MGYwMDAwMDAKLSNkZWZpbmUgTUFDX1BDVV9HRU5FUklDX1RJTUVSU19NT0RFM19PVkVSRkxPV19JTkRFWF9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0dFTkVSSUNfVElNRVJTX01PREUzX09WRVJGTE9XX0lOREVYX01BU0spID4+IE1BQ19QQ1VfR0VORVJJQ19USU1FUlNfTU9ERTNfT1ZFUkZMT1dfSU5ERVhfTFNCKQotI2RlZmluZSBNQUNfUENVX0dFTkVSSUNfVElNRVJTX01PREUzX09WRVJGTE9XX0lOREVYX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0dFTkVSSUNfVElNRVJTX01PREUzX09WRVJGTE9XX0lOREVYX0xTQikgJiBNQUNfUENVX0dFTkVSSUNfVElNRVJTX01PREUzX09WRVJGTE9XX0lOREVYX01BU0spCi0jZGVmaW5lIE1BQ19QQ1VfR0VORVJJQ19USU1FUlNfTU9ERTNfVEhSRVNIX01TQiAgMTkKLSNkZWZpbmUgTUFDX1BDVV9HRU5FUklDX1RJTUVSU19NT0RFM19USFJFU0hfTFNCICAwCi0jZGVmaW5lIE1BQ19QQ1VfR0VORVJJQ19USU1FUlNfTU9ERTNfVEhSRVNIX01BU0sgMHgwMDBmZmZmZgotI2RlZmluZSBNQUNfUENVX0dFTkVSSUNfVElNRVJTX01PREUzX1RIUkVTSF9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0dFTkVSSUNfVElNRVJTX01PREUzX1RIUkVTSF9NQVNLKSA+PiBNQUNfUENVX0dFTkVSSUNfVElNRVJTX01PREUzX1RIUkVTSF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfR0VORVJJQ19USU1FUlNfTU9ERTNfVEhSRVNIX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0dFTkVSSUNfVElNRVJTX01PREUzX1RIUkVTSF9MU0IpICYgTUFDX1BDVV9HRU5FUklDX1RJTUVSU19NT0RFM19USFJFU0hfTUFTSykKLQotI2RlZmluZSBNQUNfUENVX0RJUkVDVF9DT05ORUNUX0FERFJFU1MgICAgICAgICAgIDB4MDAwMDAyZDgKLSNkZWZpbmUgTUFDX1BDVV9ESVJFQ1RfQ09OTkVDVF9PRkZTRVQgICAgICAgICAgICAweDAwMDAwMmQ4Ci0jZGVmaW5lIE1BQ19QQ1VfRElSRUNUX0NPTk5FQ1RfU1RBX1RTRl8xXzJfU0VMX01TQiAyCi0jZGVmaW5lIE1BQ19QQ1VfRElSRUNUX0NPTk5FQ1RfU1RBX1RTRl8xXzJfU0VMX0xTQiAyCi0jZGVmaW5lIE1BQ19QQ1VfRElSRUNUX0NPTk5FQ1RfU1RBX1RTRl8xXzJfU0VMX01BU0sgMHgwMDAwMDAwNAotI2RlZmluZSBNQUNfUENVX0RJUkVDVF9DT05ORUNUX1NUQV9UU0ZfMV8yX1NFTF9HRVQoeCkgKCgoeCkgJiBNQUNfUENVX0RJUkVDVF9DT05ORUNUX1NUQV9UU0ZfMV8yX1NFTF9NQVNLKSA+PiBNQUNfUENVX0RJUkVDVF9DT05ORUNUX1NUQV9UU0ZfMV8yX1NFTF9MU0IpCi0jZGVmaW5lIE1BQ19QQ1VfRElSRUNUX0NPTk5FQ1RfU1RBX1RTRl8xXzJfU0VMX1NFVCh4KSAoKCh4KSA8PCBNQUNfUENVX0RJUkVDVF9DT05ORUNUX1NUQV9UU0ZfMV8yX1NFTF9MU0IpICYgTUFDX1BDVV9ESVJFQ1RfQ09OTkVDVF9TVEFfVFNGXzFfMl9TRUxfTUFTSykKLSNkZWZpbmUgTUFDX1BDVV9ESVJFQ1RfQ09OTkVDVF9BUF9UU0ZfMV8yX1NFTF9NU0IgMQotI2RlZmluZSBNQUNfUENVX0RJUkVDVF9DT05ORUNUX0FQX1RTRl8xXzJfU0VMX0xTQiAxCi0jZGVmaW5lIE1BQ19QQ1VfRElSRUNUX0NPTk5FQ1RfQVBfVFNGXzFfMl9TRUxfTUFTSyAweDAwMDAwMDAyCi0jZGVmaW5lIE1BQ19QQ1VfRElSRUNUX0NPTk5FQ1RfQVBfVFNGXzFfMl9TRUxfR0VUKHgpICgoKHgpICYgTUFDX1BDVV9ESVJFQ1RfQ09OTkVDVF9BUF9UU0ZfMV8yX1NFTF9NQVNLKSA+PiBNQUNfUENVX0RJUkVDVF9DT05ORUNUX0FQX1RTRl8xXzJfU0VMX0xTQikKLSNkZWZpbmUgTUFDX1BDVV9ESVJFQ1RfQ09OTkVDVF9BUF9UU0ZfMV8yX1NFTF9TRVQoeCkgKCgoeCkgPDwgTUFDX1BDVV9ESVJFQ1RfQ09OTkVDVF9BUF9UU0ZfMV8yX1NFTF9MU0IpICYgTUFDX1BDVV9ESVJFQ1RfQ09OTkVDVF9BUF9UU0ZfMV8yX1NFTF9NQVNLKQotI2RlZmluZSBNQUNfUENVX0RJUkVDVF9DT05ORUNUX0FQX1NUQV9FTkFCTEVfTVNCIDAKLSNkZWZpbmUgTUFDX1BDVV9ESVJFQ1RfQ09OTkVDVF9BUF9TVEFfRU5BQkxFX0xTQiAwCi0jZGVmaW5lIE1BQ19QQ1VfRElSRUNUX0NPTk5FQ1RfQVBfU1RBX0VOQUJMRV9NQVNLIDB4MDAwMDAwMDEKLSNkZWZpbmUgTUFDX1BDVV9ESVJFQ1RfQ09OTkVDVF9BUF9TVEFfRU5BQkxFX0dFVCh4KSAoKCh4KSAmIE1BQ19QQ1VfRElSRUNUX0NPTk5FQ1RfQVBfU1RBX0VOQUJMRV9NQVNLKSA+PiBNQUNfUENVX0RJUkVDVF9DT05ORUNUX0FQX1NUQV9FTkFCTEVfTFNCKQotI2RlZmluZSBNQUNfUENVX0RJUkVDVF9DT05ORUNUX0FQX1NUQV9FTkFCTEVfU0VUKHgpICgoKHgpIDw8IE1BQ19QQ1VfRElSRUNUX0NPTk5FQ1RfQVBfU1RBX0VOQUJMRV9MU0IpICYgTUFDX1BDVV9ESVJFQ1RfQ09OTkVDVF9BUF9TVEFfRU5BQkxFX01BU0spCi0KLSNkZWZpbmUgVEhFUk1fQ1RSTDFfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMmRjCi0jZGVmaW5lIFRIRVJNX0NUUkwxX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDJkYwotI2RlZmluZSBUSEVSTV9DVFJMMV9CWVBBU1NfTVNCICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFRIRVJNX0NUUkwxX0JZUEFTU19MU0IgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgVEhFUk1fQ1RSTDFfQllQQVNTX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIFRIRVJNX0NUUkwxX0JZUEFTU19HRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiBUSEVSTV9DVFJMMV9CWVBBU1NfTUFTSykgPj4gVEhFUk1fQ1RSTDFfQllQQVNTX0xTQikKLSNkZWZpbmUgVEhFUk1fQ1RSTDFfQllQQVNTX1NFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA8PCBUSEVSTV9DVFJMMV9CWVBBU1NfTFNCKSAmIFRIRVJNX0NUUkwxX0JZUEFTU19NQVNLKQotI2RlZmluZSBUSEVSTV9DVFJMMV9XSURUSF9BUkJJVE9SX01TQiAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFRIRVJNX0NUUkwxX1dJRFRIX0FSQklUT1JfTFNCICAgICAgICAgICAgMTIKLSNkZWZpbmUgVEhFUk1fQ1RSTDFfV0lEVEhfQVJCSVRPUl9NQVNLICAgICAgICAgICAweDAwMDBmMDAwCi0jZGVmaW5lIFRIRVJNX0NUUkwxX1dJRFRIX0FSQklUT1JfR0VUKHgpICAgICAgICAgKCgoeCkgJiBUSEVSTV9DVFJMMV9XSURUSF9BUkJJVE9SX01BU0spID4+IFRIRVJNX0NUUkwxX1dJRFRIX0FSQklUT1JfTFNCKQotI2RlZmluZSBUSEVSTV9DVFJMMV9XSURUSF9BUkJJVE9SX1NFVCh4KSAgICAgICAgICgoKHgpIDw8IFRIRVJNX0NUUkwxX1dJRFRIX0FSQklUT1JfTFNCKSAmIFRIRVJNX0NUUkwxX1dJRFRIX0FSQklUT1JfTUFTSykKLSNkZWZpbmUgVEhFUk1fQ1RSTDFfV0lEVEhfTVNCICAgICAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBUSEVSTV9DVFJMMV9XSURUSF9MU0IgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgVEhFUk1fQ1RSTDFfV0lEVEhfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDAwZmUwCi0jZGVmaW5lIFRIRVJNX0NUUkwxX1dJRFRIX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBUSEVSTV9DVFJMMV9XSURUSF9NQVNLKSA+PiBUSEVSTV9DVFJMMV9XSURUSF9MU0IpCi0jZGVmaW5lIFRIRVJNX0NUUkwxX1dJRFRIX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgVEhFUk1fQ1RSTDFfV0lEVEhfTFNCKSAmIFRIRVJNX0NUUkwxX1dJRFRIX01BU0spCi0jZGVmaW5lIFRIRVJNX0NUUkwxX1RZUEVfTVNCICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBUSEVSTV9DVFJMMV9UWVBFX0xTQiAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgVEhFUk1fQ1RSTDFfVFlQRV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4Ci0jZGVmaW5lIFRIRVJNX0NUUkwxX1RZUEVfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiBUSEVSTV9DVFJMMV9UWVBFX01BU0spID4+IFRIRVJNX0NUUkwxX1RZUEVfTFNCKQotI2RlZmluZSBUSEVSTV9DVFJMMV9UWVBFX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFRIRVJNX0NUUkwxX1RZUEVfTFNCKSAmIFRIRVJNX0NUUkwxX1RZUEVfTUFTSykKLSNkZWZpbmUgVEhFUk1fQ1RSTDFfTUVBU1VSRV9NU0IgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFRIRVJNX0NUUkwxX01FQVNVUkVfTFNCICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBUSEVSTV9DVFJMMV9NRUFTVVJFX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgVEhFUk1fQ1RSTDFfTUVBU1VSRV9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIFRIRVJNX0NUUkwxX01FQVNVUkVfTUFTSykgPj4gVEhFUk1fQ1RSTDFfTUVBU1VSRV9MU0IpCi0jZGVmaW5lIFRIRVJNX0NUUkwxX01FQVNVUkVfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgVEhFUk1fQ1RSTDFfTUVBU1VSRV9MU0IpICYgVEhFUk1fQ1RSTDFfTUVBU1VSRV9NQVNLKQotI2RlZmluZSBUSEVSTV9DVFJMMV9JTlRfRU5fTVNCICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgVEhFUk1fQ1RSTDFfSU5UX0VOX0xTQiAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFRIRVJNX0NUUkwxX0lOVF9FTl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBUSEVSTV9DVFJMMV9JTlRfRU5fR0VUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgVEhFUk1fQ1RSTDFfSU5UX0VOX01BU0spID4+IFRIRVJNX0NUUkwxX0lOVF9FTl9MU0IpCi0jZGVmaW5lIFRIRVJNX0NUUkwxX0lOVF9FTl9TRVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPDwgVEhFUk1fQ1RSTDFfSU5UX0VOX0xTQikgJiBUSEVSTV9DVFJMMV9JTlRfRU5fTUFTSykKLSNkZWZpbmUgVEhFUk1fQ1RSTDFfSU5UX1NUQVRVU19NU0IgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFRIRVJNX0NUUkwxX0lOVF9TVEFUVVNfTFNCICAgICAgICAgICAgICAgMAotI2RlZmluZSBUSEVSTV9DVFJMMV9JTlRfU1RBVFVTX01BU0sgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgVEhFUk1fQ1RSTDFfSU5UX1NUQVRVU19HRVQoeCkgICAgICAgICAgICAoKCh4KSAmIFRIRVJNX0NUUkwxX0lOVF9TVEFUVVNfTUFTSykgPj4gVEhFUk1fQ1RSTDFfSU5UX1NUQVRVU19MU0IpCi0jZGVmaW5lIFRIRVJNX0NUUkwxX0lOVF9TVEFUVVNfU0VUKHgpICAgICAgICAgICAgKCgoeCkgPDwgVEhFUk1fQ1RSTDFfSU5UX1NUQVRVU19MU0IpICYgVEhFUk1fQ1RSTDFfSU5UX1NUQVRVU19NQVNLKQotCi0jZGVmaW5lIFRIRVJNX0NUUkwyX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDJlMAotI2RlZmluZSBUSEVSTV9DVFJMMl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyZTAKLSNkZWZpbmUgVEhFUk1fQ1RSTDJfQURDX09GRl9NU0IgICAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBUSEVSTV9DVFJMMl9BRENfT0ZGX0xTQiAgICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFRIRVJNX0NUUkwyX0FEQ19PRkZfTUFTSyAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAotI2RlZmluZSBUSEVSTV9DVFJMMl9BRENfT0ZGX0dFVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgVEhFUk1fQ1RSTDJfQURDX09GRl9NQVNLKSA+PiBUSEVSTV9DVFJMMl9BRENfT0ZGX0xTQikKLSNkZWZpbmUgVEhFUk1fQ1RSTDJfQURDX09GRl9TRVQoeCkgICAgICAgICAgICAgICAoKCh4KSA8PCBUSEVSTV9DVFJMMl9BRENfT0ZGX0xTQikgJiBUSEVSTV9DVFJMMl9BRENfT0ZGX01BU0spCi0jZGVmaW5lIFRIRVJNX0NUUkwyX0FEQ19PTl9NU0IgICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgVEhFUk1fQ1RSTDJfQURDX09OX0xTQiAgICAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBUSEVSTV9DVFJMMl9BRENfT05fTUFTSyAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKLSNkZWZpbmUgVEhFUk1fQ1RSTDJfQURDX09OX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIFRIRVJNX0NUUkwyX0FEQ19PTl9NQVNLKSA+PiBUSEVSTV9DVFJMMl9BRENfT05fTFNCKQotI2RlZmluZSBUSEVSTV9DVFJMMl9BRENfT05fU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IFRIRVJNX0NUUkwyX0FEQ19PTl9MU0IpICYgVEhFUk1fQ1RSTDJfQURDX09OX01BU0spCi0jZGVmaW5lIFRIRVJNX0NUUkwyX1NBTVBMRV9NU0IgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgVEhFUk1fQ1RSTDJfU0FNUExFX0xTQiAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBUSEVSTV9DVFJMMl9TQU1QTEVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDBmZjAwMDAKLSNkZWZpbmUgVEhFUk1fQ1RSTDJfU0FNUExFX0dFVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIFRIRVJNX0NUUkwyX1NBTVBMRV9NQVNLKSA+PiBUSEVSTV9DVFJMMl9TQU1QTEVfTFNCKQotI2RlZmluZSBUSEVSTV9DVFJMMl9TQU1QTEVfU0VUKHgpICAgICAgICAgICAgICAgICgoKHgpIDw8IFRIRVJNX0NUUkwyX1NBTVBMRV9MU0IpICYgVEhFUk1fQ1RSTDJfU0FNUExFX01BU0spCi0jZGVmaW5lIFRIRVJNX0NUUkwyX0hJR0hfTVNCICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgVEhFUk1fQ1RSTDJfSElHSF9MU0IgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFRIRVJNX0NUUkwyX0hJR0hfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBUSEVSTV9DVFJMMl9ISUdIX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgVEhFUk1fQ1RSTDJfSElHSF9NQVNLKSA+PiBUSEVSTV9DVFJMMl9ISUdIX0xTQikKLSNkZWZpbmUgVEhFUk1fQ1RSTDJfSElHSF9TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBUSEVSTV9DVFJMMl9ISUdIX0xTQikgJiBUSEVSTV9DVFJMMl9ISUdIX01BU0spCi0jZGVmaW5lIFRIRVJNX0NUUkwyX0xPV19NU0IgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBUSEVSTV9DVFJMMl9MT1dfTFNCICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgVEhFUk1fQ1RSTDJfTE9XX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIFRIRVJNX0NUUkwyX0xPV19HRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBUSEVSTV9DVFJMMl9MT1dfTUFTSykgPj4gVEhFUk1fQ1RSTDJfTE9XX0xTQikKLSNkZWZpbmUgVEhFUk1fQ1RSTDJfTE9XX1NFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBUSEVSTV9DVFJMMl9MT1dfTFNCKSAmIFRIRVJNX0NUUkwyX0xPV19NQVNLKQotCi0jZGVmaW5lIFRIRVJNX0NUUkwzX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDJlNAotI2RlZmluZSBUSEVSTV9DVFJMM19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyZTQKLSNkZWZpbmUgVEhFUk1fQ1RSTDNfQURDX0dBSU5fTVNCICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBUSEVSTV9DVFJMM19BRENfR0FJTl9MU0IgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgVEhFUk1fQ1RSTDNfQURDX0dBSU5fTUFTSyAgICAgICAgICAgICAgICAweDAwMDFmZjAwCi0jZGVmaW5lIFRIRVJNX0NUUkwzX0FEQ19HQUlOX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiBUSEVSTV9DVFJMM19BRENfR0FJTl9NQVNLKSA+PiBUSEVSTV9DVFJMM19BRENfR0FJTl9MU0IpCi0jZGVmaW5lIFRIRVJNX0NUUkwzX0FEQ19HQUlOX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgVEhFUk1fQ1RSTDNfQURDX0dBSU5fTFNCKSAmIFRIRVJNX0NUUkwzX0FEQ19HQUlOX01BU0spCi0jZGVmaW5lIFRIRVJNX0NUUkwzX0FEQ19PRkZTRVRfTVNCICAgICAgICAgICAgICAgNwotI2RlZmluZSBUSEVSTV9DVFJMM19BRENfT0ZGU0VUX0xTQiAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgVEhFUk1fQ1RSTDNfQURDX09GRlNFVF9NQVNLICAgICAgICAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIFRIRVJNX0NUUkwzX0FEQ19PRkZTRVRfR0VUKHgpICAgICAgICAgICAgKCgoeCkgJiBUSEVSTV9DVFJMM19BRENfT0ZGU0VUX01BU0spID4+IFRIRVJNX0NUUkwzX0FEQ19PRkZTRVRfTFNCKQotI2RlZmluZSBUSEVSTV9DVFJMM19BRENfT0ZGU0VUX1NFVCh4KSAgICAgICAgICAgICgoKHgpIDw8IFRIRVJNX0NUUkwzX0FEQ19PRkZTRVRfTFNCKSAmIFRIRVJNX0NUUkwzX0FEQ19PRkZTRVRfTUFTSykKLQotCi0jaWZuZGVmIF9fQVNTRU1CTEVSX18KLQotdHlwZWRlZiBzdHJ1Y3QgcnRjX3dsYW5fcmVnX3JlZ19zIHsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fcmVzZXRfY29udHJvbDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5feHRhbF9jb250cm9sOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl90Y3hvX2RldGVjdDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5feHRhbF90ZXN0OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9xdWFkcmF0dXJlOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9wbGxfY29udHJvbDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fcGxsX3NldHRsZTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5feHRhbF9zZXR0bGU7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX2NwdV9jbG9jazsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fY2xvY2tfb3V0OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9jbG9ja19jb250cm9sOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9iaWFzX292ZXJyaWRlOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl93ZHRfY29udHJvbDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fd2R0X3N0YXR1czsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fd2R0OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl93ZHRfY291bnQ7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX3dkdF9yZXNldDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5faW50X3N0YXR1czsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fbGZfdGltZXIwOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9sZl90aW1lcl9jb3VudDA7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX2xmX3RpbWVyX2NvbnRyb2wwOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9sZl90aW1lcl9zdGF0dXMwOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9sZl90aW1lcjE7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX2xmX3RpbWVyX2NvdW50MTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fbGZfdGltZXJfY29udHJvbDE7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX2xmX3RpbWVyX3N0YXR1czE7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX2xmX3RpbWVyMjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fbGZfdGltZXJfY291bnQyOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9sZl90aW1lcl9jb250cm9sMjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fbGZfdGltZXJfc3RhdHVzMjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fbGZfdGltZXIzOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9sZl90aW1lcl9jb3VudDM7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX2xmX3RpbWVyX2NvbnRyb2wzOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9sZl90aW1lcl9zdGF0dXMzOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9oZl90aW1lcjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5faGZfdGltZXJfY291bnQ7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX2hmX2xmX2NvdW50OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9oZl90aW1lcl9jb250cm9sOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9oZl90aW1lcl9zdGF0dXM7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX3J0Y19jb250cm9sOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9ydGNfdGltZTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fcnRjX2RhdGU7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX3J0Y19zZXRfdGltZTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fcnRjX3NldF9kYXRlOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9ydGNfc2V0X2FsYXJtOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9ydGNfY29uZmlnOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9ydGNfYWxhcm1fc3RhdHVzOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl91YXJ0X3dha2V1cDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fcmVzZXRfY2F1c2U7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX3N5c3RlbV9zbGVlcDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fc2Rpb193cmFwcGVyOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9tYWNfc2xlZXBfY29udHJvbDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fa2VlcF9hd2FrZTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fbHBvX2NhbF90aW1lOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9scG9faW5pdF9kaXZpZGVuZF9pbnQ7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX2xwb19pbml0X2RpdmlkZW5kX2ZyYWN0aW9uOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9scG9fY2FsOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9scG9fY2FsX3Rlc3RfY29udHJvbDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fbHBvX2NhbF90ZXN0X3N0YXR1czsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fY2hpcF9pZDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fZGVyaXZlZF9ydGNfY2xrOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9zbHAzMl9tb2RlOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9zbHAzMl93YWtlOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9zbHAzMl9pbmM7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X3NscF9taWIxOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9zbHBfbWliMjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3Vfc2xwX21pYjM7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX3Bvd2VyX3JlZzsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fY29yZV9jbGtfY3RybDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fZ3Bpb193YWtldXBfY29udHJvbDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGh0OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV90c2ZfbDMyOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV90c2ZfdTMyOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV93YnRpbWVyOwotICB1bnNpZ25lZCBjaGFyIHBhZDBbMjRdOyAvKiBwYWQgdG8gMHgxNDAgKi8KLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfZ2VuZXJpY190aW1lcnNbMTZdOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9nZW5lcmljX3RpbWVyc19tb2RlOwotICB1bnNpZ25lZCBjaGFyIHBhZDFbNjBdOyAvKiBwYWQgdG8gMHgxYzAgKi8KLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfZ2VuZXJpY190aW1lcnMyWzE2XTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfZ2VuZXJpY190aW1lcnNfbW9kZTI7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X3NscDE7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X3NscDI7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X3Jlc2V0X3RzZjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfdHNmX2FkZF9wbGw7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBzbGVlcF9yZXRlbnRpb247Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBidGNvZXhjdHJsOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2JzeW5jX3ByaW9yaXR5MTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdic3luY19wcmlvcml0eTI7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3YnN5bmNfcHJpb3JpdHkzOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYnRjb2V4MDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGJ0Y29leDE7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBidGNvZXgyOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYnRjb2V4MzsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGJ0Y29leDQ7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBidGNvZXg1OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYnRjb2V4NjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGxvY2s7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBub2xvY2tfcHJpb3JpdHk7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3YnN5bmM7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3YnN5bmMxOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2JzeW5jMjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdic3luYzM7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3Yl90aW1lcl90YXJnZXQ7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3Yl90aW1lcl9zbG9wOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYnRjb2V4X2ludF9lbjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGJ0Y29leF9pbnRfc3RhdDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGJ0cHJpb3JpdHlfaW50X2VuOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYnRwcmlvcml0eV9pbnRfc3RhdDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGJ0cHJpb3JpdHlfc3RvbXBfaW50X2VuOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYnRwcmlvcml0eV9zdG9tcF9pbnRfc3RhdDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfYm1pc3NfdGltZW91dDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfY2FiX2F3YWtlOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbHBfcGVyZl9jb3VudGVyOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbHBfcGVyZl9saWdodF9zbGVlcDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGxwX3BlcmZfZGVlcF9zbGVlcDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGxwX3BlcmZfb247Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBzdF82NF9iaXQ7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtZXNzYWdlX3dyOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWVzc2FnZV93cl9wOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWVzc2FnZV9yZDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1lc3NhZ2VfcmRfcDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGNoaXBfbW9kZTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGNsa19yZXFfZmFsbF9lZGdlOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgb3RwOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgb3RwX3N0YXR1czsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHBtdTsKLSAgdW5zaWduZWQgY2hhciBwYWQyWzRdOyAvKiBwYWQgdG8gMHgyYzAgKi8KLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHBtdV9jb25maWdbMl07Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBwbXVfYnlwYXNzOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV90c2YyX2wzMjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IG1hY19wY3VfdHNmMl91MzI7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBtYWNfcGN1X2dlbmVyaWNfdGltZXJzX21vZGUzOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbWFjX3BjdV9kaXJlY3RfY29ubmVjdDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHRoZXJtX2N0cmwxOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdGhlcm1fY3RybDI7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB0aGVybV9jdHJsMzsKLX0gcnRjX3dsYW5fcmVnX3JlZ190OwotCi0jZW5kaWYgLyogX19BU1NFTUJMRVJfXyAqLwotCiAjZW5kaWYgLyogX1JUQ19XTEFOX1JFR19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHc0LjAvaHcvc2lfcmVnLmggYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzQuMC9ody9zaV9yZWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNkMmUzYy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzQuMC9ody9zaV9yZWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENvcHlyaWdodCAoYykgMjAwNC0yMDEwIEF0aGVyb3MgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gCi0vLwotLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0vLyBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotLy8KLS8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotLy8gV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotLy8gTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLS8vIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLS8vIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotLy8gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLS8vIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0vLwotLy8KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBBdXRob3Iocyk6ID0iQXRoZXJvcyIKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0KLSNpZm5kZWYgX1NJX1JFR19SRUdfSF8KLSNkZWZpbmUgX1NJX1JFR19SRUdfSF8KLQotI2RlZmluZSBTSV9DT05GSUdfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgU0lfQ09ORklHX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCi0jZGVmaW5lIFNJX0NPTkZJR19FUlJfSU5UX01TQiAgICAgICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgU0lfQ09ORklHX0VSUl9JTlRfTFNCICAgICAgICAgICAgICAgICAgICAxOQotI2RlZmluZSBTSV9DT05GSUdfRVJSX0lOVF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKLSNkZWZpbmUgU0lfQ09ORklHX0VSUl9JTlRfR0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIFNJX0NPTkZJR19FUlJfSU5UX01BU0spID4+IFNJX0NPTkZJR19FUlJfSU5UX0xTQikKLSNkZWZpbmUgU0lfQ09ORklHX0VSUl9JTlRfU0VUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA8PCBTSV9DT05GSUdfRVJSX0lOVF9MU0IpICYgU0lfQ09ORklHX0VSUl9JTlRfTUFTSykKLSNkZWZpbmUgU0lfQ09ORklHX0JJRElSX09EX0RBVEFfTVNCICAgICAgICAgICAgICAxOAotI2RlZmluZSBTSV9DT05GSUdfQklESVJfT0RfREFUQV9MU0IgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFNJX0NPTkZJR19CSURJUl9PRF9EQVRBX01BU0sgICAgICAgICAgICAgMHgwMDA0MDAwMAotI2RlZmluZSBTSV9DT05GSUdfQklESVJfT0RfREFUQV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgU0lfQ09ORklHX0JJRElSX09EX0RBVEFfTUFTSykgPj4gU0lfQ09ORklHX0JJRElSX09EX0RBVEFfTFNCKQotI2RlZmluZSBTSV9DT05GSUdfQklESVJfT0RfREFUQV9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFNJX0NPTkZJR19CSURJUl9PRF9EQVRBX0xTQikgJiBTSV9DT05GSUdfQklESVJfT0RfREFUQV9NQVNLKQotI2RlZmluZSBTSV9DT05GSUdfSTJDX01TQiAgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFNJX0NPTkZJR19JMkNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgU0lfQ09ORklHX0kyQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIFNJX0NPTkZJR19JMkNfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBTSV9DT05GSUdfSTJDX01BU0spID4+IFNJX0NPTkZJR19JMkNfTFNCKQotI2RlZmluZSBTSV9DT05GSUdfSTJDX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNJX0NPTkZJR19JMkNfTFNCKSAmIFNJX0NPTkZJR19JMkNfTUFTSykKLSNkZWZpbmUgU0lfQ09ORklHX1BPU19TQU1QTEVfTVNCICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFNJX0NPTkZJR19QT1NfU0FNUExFX0xTQiAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBTSV9DT05GSUdfUE9TX1NBTVBMRV9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKLSNkZWZpbmUgU0lfQ09ORklHX1BPU19TQU1QTEVfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIFNJX0NPTkZJR19QT1NfU0FNUExFX01BU0spID4+IFNJX0NPTkZJR19QT1NfU0FNUExFX0xTQikKLSNkZWZpbmUgU0lfQ09ORklHX1BPU19TQU1QTEVfU0VUKHgpICAgICAgICAgICAgICAoKCh4KSA8PCBTSV9DT05GSUdfUE9TX1NBTVBMRV9MU0IpICYgU0lfQ09ORklHX1BPU19TQU1QTEVfTUFTSykKLSNkZWZpbmUgU0lfQ09ORklHX1BPU19EUklWRV9NU0IgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFNJX0NPTkZJR19QT1NfRFJJVkVfTFNCICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBTSV9DT05GSUdfUE9TX0RSSVZFX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgU0lfQ09ORklHX1BPU19EUklWRV9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIFNJX0NPTkZJR19QT1NfRFJJVkVfTUFTSykgPj4gU0lfQ09ORklHX1BPU19EUklWRV9MU0IpCi0jZGVmaW5lIFNJX0NPTkZJR19QT1NfRFJJVkVfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgU0lfQ09ORklHX1BPU19EUklWRV9MU0IpICYgU0lfQ09ORklHX1BPU19EUklWRV9NQVNLKQotI2RlZmluZSBTSV9DT05GSUdfSU5BQ1RJVkVfREFUQV9NU0IgICAgICAgICAgICAgIDUKLSNkZWZpbmUgU0lfQ09ORklHX0lOQUNUSVZFX0RBVEFfTFNCICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFNJX0NPTkZJR19JTkFDVElWRV9EQVRBX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBTSV9DT05GSUdfSU5BQ1RJVkVfREFUQV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgU0lfQ09ORklHX0lOQUNUSVZFX0RBVEFfTUFTSykgPj4gU0lfQ09ORklHX0lOQUNUSVZFX0RBVEFfTFNCKQotI2RlZmluZSBTSV9DT05GSUdfSU5BQ1RJVkVfREFUQV9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFNJX0NPTkZJR19JTkFDVElWRV9EQVRBX0xTQikgJiBTSV9DT05GSUdfSU5BQ1RJVkVfREFUQV9NQVNLKQotI2RlZmluZSBTSV9DT05GSUdfSU5BQ1RJVkVfQ0xLX01TQiAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgU0lfQ09ORklHX0lOQUNUSVZFX0NMS19MU0IgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFNJX0NPTkZJR19JTkFDVElWRV9DTEtfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBTSV9DT05GSUdfSU5BQ1RJVkVfQ0xLX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgU0lfQ09ORklHX0lOQUNUSVZFX0NMS19NQVNLKSA+PiBTSV9DT05GSUdfSU5BQ1RJVkVfQ0xLX0xTQikKLSNkZWZpbmUgU0lfQ09ORklHX0lOQUNUSVZFX0NMS19TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBTSV9DT05GSUdfSU5BQ1RJVkVfQ0xLX0xTQikgJiBTSV9DT05GSUdfSU5BQ1RJVkVfQ0xLX01BU0spCi0jZGVmaW5lIFNJX0NPTkZJR19ESVZJREVSX01TQiAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBTSV9DT05GSUdfRElWSURFUl9MU0IgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgU0lfQ09ORklHX0RJVklERVJfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBmCi0jZGVmaW5lIFNJX0NPTkZJR19ESVZJREVSX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBTSV9DT05GSUdfRElWSURFUl9NQVNLKSA+PiBTSV9DT05GSUdfRElWSURFUl9MU0IpCi0jZGVmaW5lIFNJX0NPTkZJR19ESVZJREVSX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgU0lfQ09ORklHX0RJVklERVJfTFNCKSAmIFNJX0NPTkZJR19ESVZJREVSX01BU0spCi0KLSNkZWZpbmUgU0lfQ1NfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFNJX0NTX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBTSV9DU19CSVRfQ05UX0lOX0xBU1RfQllURV9NU0IgICAgICAgICAgIDEzCi0jZGVmaW5lIFNJX0NTX0JJVF9DTlRfSU5fTEFTVF9CWVRFX0xTQiAgICAgICAgICAgMTEKLSNkZWZpbmUgU0lfQ1NfQklUX0NOVF9JTl9MQVNUX0JZVEVfTUFTSyAgICAgICAgICAweDAwMDAzODAwCi0jZGVmaW5lIFNJX0NTX0JJVF9DTlRfSU5fTEFTVF9CWVRFX0dFVCh4KSAgICAgICAgKCgoeCkgJiBTSV9DU19CSVRfQ05UX0lOX0xBU1RfQllURV9NQVNLKSA+PiBTSV9DU19CSVRfQ05UX0lOX0xBU1RfQllURV9MU0IpCi0jZGVmaW5lIFNJX0NTX0JJVF9DTlRfSU5fTEFTVF9CWVRFX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgU0lfQ1NfQklUX0NOVF9JTl9MQVNUX0JZVEVfTFNCKSAmIFNJX0NTX0JJVF9DTlRfSU5fTEFTVF9CWVRFX01BU0spCi0jZGVmaW5lIFNJX0NTX0RPTkVfRVJSX01TQiAgICAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgU0lfQ1NfRE9ORV9FUlJfTFNCICAgICAgICAgICAgICAgICAgICAgICAxMAotI2RlZmluZSBTSV9DU19ET05FX0VSUl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgU0lfQ1NfRE9ORV9FUlJfR0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFNJX0NTX0RPTkVfRVJSX01BU0spID4+IFNJX0NTX0RPTkVfRVJSX0xTQikKLSNkZWZpbmUgU0lfQ1NfRE9ORV9FUlJfU0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBTSV9DU19ET05FX0VSUl9MU0IpICYgU0lfQ1NfRE9ORV9FUlJfTUFTSykKLSNkZWZpbmUgU0lfQ1NfRE9ORV9JTlRfTVNCICAgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFNJX0NTX0RPTkVfSU5UX0xTQiAgICAgICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBTSV9DU19ET05FX0lOVF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKLSNkZWZpbmUgU0lfQ1NfRE9ORV9JTlRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFNJX0NTX0RPTkVfSU5UX01BU0spID4+IFNJX0NTX0RPTkVfSU5UX0xTQikKLSNkZWZpbmUgU0lfQ1NfRE9ORV9JTlRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBTSV9DU19ET05FX0lOVF9MU0IpICYgU0lfQ1NfRE9ORV9JTlRfTUFTSykKLSNkZWZpbmUgU0lfQ1NfU1RBUlRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFNJX0NTX1NUQVJUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBTSV9DU19TVEFSVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKLSNkZWZpbmUgU0lfQ1NfU1RBUlRfR0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFNJX0NTX1NUQVJUX01BU0spID4+IFNJX0NTX1NUQVJUX0xTQikKLSNkZWZpbmUgU0lfQ1NfU1RBUlRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBTSV9DU19TVEFSVF9MU0IpICYgU0lfQ1NfU1RBUlRfTUFTSykKLSNkZWZpbmUgU0lfQ1NfUlhfQ05UX01TQiAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFNJX0NTX1JYX0NOVF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBTSV9DU19SWF9DTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZjAKLSNkZWZpbmUgU0lfQ1NfUlhfQ05UX0dFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIFNJX0NTX1JYX0NOVF9NQVNLKSA+PiBTSV9DU19SWF9DTlRfTFNCKQotI2RlZmluZSBTSV9DU19SWF9DTlRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNJX0NTX1JYX0NOVF9MU0IpICYgU0lfQ1NfUlhfQ05UX01BU0spCi0jZGVmaW5lIFNJX0NTX1RYX0NOVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBTSV9DU19UWF9DTlRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgU0lfQ1NfVFhfQ05UX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBmCi0jZGVmaW5lIFNJX0NTX1RYX0NOVF9HRVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBTSV9DU19UWF9DTlRfTUFTSykgPj4gU0lfQ1NfVFhfQ05UX0xTQikKLSNkZWZpbmUgU0lfQ1NfVFhfQ05UX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBTSV9DU19UWF9DTlRfTFNCKSAmIFNJX0NTX1RYX0NOVF9NQVNLKQotCi0jZGVmaW5lIFNJX1RYX0RBVEEwX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBTSV9UWF9EQVRBMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgU0lfVFhfREFUQTBfREFUQTNfTVNCICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBTSV9UWF9EQVRBMF9EQVRBM19MU0IgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFNJX1RYX0RBVEEwX0RBVEEzX01BU0sgICAgICAgICAgICAgICAgICAgMHhmZjAwMDAwMAotI2RlZmluZSBTSV9UWF9EQVRBMF9EQVRBM19HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgU0lfVFhfREFUQTBfREFUQTNfTUFTSykgPj4gU0lfVFhfREFUQTBfREFUQTNfTFNCKQotI2RlZmluZSBTSV9UWF9EQVRBMF9EQVRBM19TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNJX1RYX0RBVEEwX0RBVEEzX0xTQikgJiBTSV9UWF9EQVRBMF9EQVRBM19NQVNLKQotI2RlZmluZSBTSV9UWF9EQVRBMF9EQVRBMl9NU0IgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFNJX1RYX0RBVEEwX0RBVEEyX0xTQiAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgU0lfVFhfREFUQTBfREFUQTJfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwZmYwMDAwCi0jZGVmaW5lIFNJX1RYX0RBVEEwX0RBVEEyX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBTSV9UWF9EQVRBMF9EQVRBMl9NQVNLKSA+PiBTSV9UWF9EQVRBMF9EQVRBMl9MU0IpCi0jZGVmaW5lIFNJX1RYX0RBVEEwX0RBVEEyX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgU0lfVFhfREFUQTBfREFUQTJfTFNCKSAmIFNJX1RYX0RBVEEwX0RBVEEyX01BU0spCi0jZGVmaW5lIFNJX1RYX0RBVEEwX0RBVEExX01TQiAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgU0lfVFhfREFUQTBfREFUQTFfTFNCICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFNJX1RYX0RBVEEwX0RBVEExX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBTSV9UWF9EQVRBMF9EQVRBMV9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgU0lfVFhfREFUQTBfREFUQTFfTUFTSykgPj4gU0lfVFhfREFUQTBfREFUQTFfTFNCKQotI2RlZmluZSBTSV9UWF9EQVRBMF9EQVRBMV9TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNJX1RYX0RBVEEwX0RBVEExX0xTQikgJiBTSV9UWF9EQVRBMF9EQVRBMV9NQVNLKQotI2RlZmluZSBTSV9UWF9EQVRBMF9EQVRBMF9NU0IgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgU0lfVFhfREFUQTBfREFUQTBfTFNCICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFNJX1RYX0RBVEEwX0RBVEEwX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBTSV9UWF9EQVRBMF9EQVRBMF9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgU0lfVFhfREFUQTBfREFUQTBfTUFTSykgPj4gU0lfVFhfREFUQTBfREFUQTBfTFNCKQotI2RlZmluZSBTSV9UWF9EQVRBMF9EQVRBMF9TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNJX1RYX0RBVEEwX0RBVEEwX0xTQikgJiBTSV9UWF9EQVRBMF9EQVRBMF9NQVNLKQotCi0jZGVmaW5lIFNJX1RYX0RBVEExX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwYwotI2RlZmluZSBTSV9UWF9EQVRBMV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGMKLSNkZWZpbmUgU0lfVFhfREFUQTFfREFUQTdfTVNCICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBTSV9UWF9EQVRBMV9EQVRBN19MU0IgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFNJX1RYX0RBVEExX0RBVEE3X01BU0sgICAgICAgICAgICAgICAgICAgMHhmZjAwMDAwMAotI2RlZmluZSBTSV9UWF9EQVRBMV9EQVRBN19HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgU0lfVFhfREFUQTFfREFUQTdfTUFTSykgPj4gU0lfVFhfREFUQTFfREFUQTdfTFNCKQotI2RlZmluZSBTSV9UWF9EQVRBMV9EQVRBN19TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNJX1RYX0RBVEExX0RBVEE3X0xTQikgJiBTSV9UWF9EQVRBMV9EQVRBN19NQVNLKQotI2RlZmluZSBTSV9UWF9EQVRBMV9EQVRBNl9NU0IgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFNJX1RYX0RBVEExX0RBVEE2X0xTQiAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgU0lfVFhfREFUQTFfREFUQTZfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwZmYwMDAwCi0jZGVmaW5lIFNJX1RYX0RBVEExX0RBVEE2X0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBTSV9UWF9EQVRBMV9EQVRBNl9NQVNLKSA+PiBTSV9UWF9EQVRBMV9EQVRBNl9MU0IpCi0jZGVmaW5lIFNJX1RYX0RBVEExX0RBVEE2X1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgU0lfVFhfREFUQTFfREFUQTZfTFNCKSAmIFNJX1RYX0RBVEExX0RBVEE2X01BU0spCi0jZGVmaW5lIFNJX1RYX0RBVEExX0RBVEE1X01TQiAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgU0lfVFhfREFUQTFfREFUQTVfTFNCICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFNJX1RYX0RBVEExX0RBVEE1X01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBTSV9UWF9EQVRBMV9EQVRBNV9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgU0lfVFhfREFUQTFfREFUQTVfTUFTSykgPj4gU0lfVFhfREFUQTFfREFUQTVfTFNCKQotI2RlZmluZSBTSV9UWF9EQVRBMV9EQVRBNV9TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNJX1RYX0RBVEExX0RBVEE1X0xTQikgJiBTSV9UWF9EQVRBMV9EQVRBNV9NQVNLKQotI2RlZmluZSBTSV9UWF9EQVRBMV9EQVRBNF9NU0IgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgU0lfVFhfREFUQTFfREFUQTRfTFNCICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFNJX1RYX0RBVEExX0RBVEE0X01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBTSV9UWF9EQVRBMV9EQVRBNF9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgU0lfVFhfREFUQTFfREFUQTRfTUFTSykgPj4gU0lfVFhfREFUQTFfREFUQTRfTFNCKQotI2RlZmluZSBTSV9UWF9EQVRBMV9EQVRBNF9TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNJX1RYX0RBVEExX0RBVEE0X0xTQikgJiBTSV9UWF9EQVRBMV9EQVRBNF9NQVNLKQotCi0jZGVmaW5lIFNJX1JYX0RBVEEwX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBTSV9SWF9EQVRBMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgU0lfUlhfREFUQTBfREFUQTNfTVNCICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBTSV9SWF9EQVRBMF9EQVRBM19MU0IgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFNJX1JYX0RBVEEwX0RBVEEzX01BU0sgICAgICAgICAgICAgICAgICAgMHhmZjAwMDAwMAotI2RlZmluZSBTSV9SWF9EQVRBMF9EQVRBM19HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgU0lfUlhfREFUQTBfREFUQTNfTUFTSykgPj4gU0lfUlhfREFUQTBfREFUQTNfTFNCKQotI2RlZmluZSBTSV9SWF9EQVRBMF9EQVRBM19TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNJX1JYX0RBVEEwX0RBVEEzX0xTQikgJiBTSV9SWF9EQVRBMF9EQVRBM19NQVNLKQotI2RlZmluZSBTSV9SWF9EQVRBMF9EQVRBMl9NU0IgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFNJX1JYX0RBVEEwX0RBVEEyX0xTQiAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgU0lfUlhfREFUQTBfREFUQTJfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwZmYwMDAwCi0jZGVmaW5lIFNJX1JYX0RBVEEwX0RBVEEyX0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBTSV9SWF9EQVRBMF9EQVRBMl9NQVNLKSA+PiBTSV9SWF9EQVRBMF9EQVRBMl9MU0IpCi0jZGVmaW5lIFNJX1JYX0RBVEEwX0RBVEEyX1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgU0lfUlhfREFUQTBfREFUQTJfTFNCKSAmIFNJX1JYX0RBVEEwX0RBVEEyX01BU0spCi0jZGVmaW5lIFNJX1JYX0RBVEEwX0RBVEExX01TQiAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgU0lfUlhfREFUQTBfREFUQTFfTFNCICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFNJX1JYX0RBVEEwX0RBVEExX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBTSV9SWF9EQVRBMF9EQVRBMV9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgU0lfUlhfREFUQTBfREFUQTFfTUFTSykgPj4gU0lfUlhfREFUQTBfREFUQTFfTFNCKQotI2RlZmluZSBTSV9SWF9EQVRBMF9EQVRBMV9TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNJX1JYX0RBVEEwX0RBVEExX0xTQikgJiBTSV9SWF9EQVRBMF9EQVRBMV9NQVNLKQotI2RlZmluZSBTSV9SWF9EQVRBMF9EQVRBMF9NU0IgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgU0lfUlhfREFUQTBfREFUQTBfTFNCICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFNJX1JYX0RBVEEwX0RBVEEwX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBTSV9SWF9EQVRBMF9EQVRBMF9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgU0lfUlhfREFUQTBfREFUQTBfTUFTSykgPj4gU0lfUlhfREFUQTBfREFUQTBfTFNCKQotI2RlZmluZSBTSV9SWF9EQVRBMF9EQVRBMF9TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNJX1JYX0RBVEEwX0RBVEEwX0xTQikgJiBTSV9SWF9EQVRBMF9EQVRBMF9NQVNLKQotCi0jZGVmaW5lIFNJX1JYX0RBVEExX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAotI2RlZmluZSBTSV9SWF9EQVRBMV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKLSNkZWZpbmUgU0lfUlhfREFUQTFfREFUQTdfTVNCICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBTSV9SWF9EQVRBMV9EQVRBN19MU0IgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFNJX1JYX0RBVEExX0RBVEE3X01BU0sgICAgICAgICAgICAgICAgICAgMHhmZjAwMDAwMAotI2RlZmluZSBTSV9SWF9EQVRBMV9EQVRBN19HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgU0lfUlhfREFUQTFfREFUQTdfTUFTSykgPj4gU0lfUlhfREFUQTFfREFUQTdfTFNCKQotI2RlZmluZSBTSV9SWF9EQVRBMV9EQVRBN19TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNJX1JYX0RBVEExX0RBVEE3X0xTQikgJiBTSV9SWF9EQVRBMV9EQVRBN19NQVNLKQotI2RlZmluZSBTSV9SWF9EQVRBMV9EQVRBNl9NU0IgICAgICAgICAgICAgICAgICAgIDIzCi0jZGVmaW5lIFNJX1JYX0RBVEExX0RBVEE2X0xTQiAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgU0lfUlhfREFUQTFfREFUQTZfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwZmYwMDAwCi0jZGVmaW5lIFNJX1JYX0RBVEExX0RBVEE2X0dFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiBTSV9SWF9EQVRBMV9EQVRBNl9NQVNLKSA+PiBTSV9SWF9EQVRBMV9EQVRBNl9MU0IpCi0jZGVmaW5lIFNJX1JYX0RBVEExX0RBVEE2X1NFVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPDwgU0lfUlhfREFUQTFfREFUQTZfTFNCKSAmIFNJX1JYX0RBVEExX0RBVEE2X01BU0spCi0jZGVmaW5lIFNJX1JYX0RBVEExX0RBVEE1X01TQiAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgU0lfUlhfREFUQTFfREFUQTVfTFNCICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFNJX1JYX0RBVEExX0RBVEE1X01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBTSV9SWF9EQVRBMV9EQVRBNV9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgU0lfUlhfREFUQTFfREFUQTVfTUFTSykgPj4gU0lfUlhfREFUQTFfREFUQTVfTFNCKQotI2RlZmluZSBTSV9SWF9EQVRBMV9EQVRBNV9TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNJX1JYX0RBVEExX0RBVEE1X0xTQikgJiBTSV9SWF9EQVRBMV9EQVRBNV9NQVNLKQotI2RlZmluZSBTSV9SWF9EQVRBMV9EQVRBNF9NU0IgICAgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgU0lfUlhfREFUQTFfREFUQTRfTFNCICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFNJX1JYX0RBVEExX0RBVEE0X01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBTSV9SWF9EQVRBMV9EQVRBNF9HRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgU0lfUlhfREFUQTFfREFUQTRfTUFTSykgPj4gU0lfUlhfREFUQTFfREFUQTRfTFNCKQotI2RlZmluZSBTSV9SWF9EQVRBMV9EQVRBNF9TRVQoeCkgICAgICAgICAgICAgICAgICgoKHgpIDw8IFNJX1JYX0RBVEExX0RBVEE0X0xTQikgJiBTSV9SWF9EQVRBMV9EQVRBNF9NQVNLKQotCi0KLSNpZm5kZWYgX19BU1NFTUJMRVJfXwotCi10eXBlZGVmIHN0cnVjdCBzaV9yZWdfcmVnX3MgewotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgc2lfY29uZmlnOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgc2lfY3M7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBzaV90eF9kYXRhMDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHNpX3R4X2RhdGExOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgc2lfcnhfZGF0YTA7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCBzaV9yeF9kYXRhMTsKLX0gc2lfcmVnX3JlZ190OwotCi0jZW5kaWYgLyogX19BU1NFTUJMRVJfXyAqLwotCi0jZW5kaWYgLyogX1NJX1JFR19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHc0LjAvaHcvdWFydF9yZWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3NC4wL2h3L3VhcnRfcmVnLmgKaW5kZXggYThlY2NhZi4uMzAyYjIwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHc0LjAvaHcvdWFydF9yZWcuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzQuMC9ody91YXJ0X3JlZy5oCkBAIC0yNCwxMDcgKzI0LDYgQEAKICNpZm5kZWYgX1VBUlRfUkVHX1JFR19IXwogI2RlZmluZSBfVUFSVF9SRUdfUkVHX0hfCiAKLSNkZWZpbmUgVUFSVF9EQVRBX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCi0jZGVmaW5lIFVBUlRfREFUQV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAotI2RlZmluZSBVQVJUX0RBVEFfVFhfQ1NSX01TQiAgICAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgVUFSVF9EQVRBX1RYX0NTUl9MU0IgICAgICAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFVBUlRfREFUQV9UWF9DU1JfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAotI2RlZmluZSBVQVJUX0RBVEFfVFhfQ1NSX0dFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgVUFSVF9EQVRBX1RYX0NTUl9NQVNLKSA+PiBVQVJUX0RBVEFfVFhfQ1NSX0xTQikKLSNkZWZpbmUgVUFSVF9EQVRBX1RYX0NTUl9TRVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBVQVJUX0RBVEFfVFhfQ1NSX0xTQikgJiBVQVJUX0RBVEFfVFhfQ1NSX01BU0spCi0jZGVmaW5lIFVBUlRfREFUQV9SWF9DU1JfTVNCICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBVQVJUX0RBVEFfUlhfQ1NSX0xTQiAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgVUFSVF9EQVRBX1JYX0NTUl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCi0jZGVmaW5lIFVBUlRfREFUQV9SWF9DU1JfR0VUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiBVQVJUX0RBVEFfUlhfQ1NSX01BU0spID4+IFVBUlRfREFUQV9SWF9DU1JfTFNCKQotI2RlZmluZSBVQVJUX0RBVEFfUlhfQ1NSX1NFVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpIDw8IFVBUlRfREFUQV9SWF9DU1JfTFNCKSAmIFVBUlRfREFUQV9SWF9DU1JfTUFTSykKLSNkZWZpbmUgVUFSVF9EQVRBX1RYUlhfREFUQV9NU0IgICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFVBUlRfREFUQV9UWFJYX0RBVEFfTFNCICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBVQVJUX0RBVEFfVFhSWF9EQVRBX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgVUFSVF9EQVRBX1RYUlhfREFUQV9HRVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIFVBUlRfREFUQV9UWFJYX0RBVEFfTUFTSykgPj4gVUFSVF9EQVRBX1RYUlhfREFUQV9MU0IpCi0jZGVmaW5lIFVBUlRfREFUQV9UWFJYX0RBVEFfU0VUKHgpICAgICAgICAgICAgICAgKCgoeCkgPDwgVUFSVF9EQVRBX1RYUlhfREFUQV9MU0IpICYgVUFSVF9EQVRBX1RYUlhfREFUQV9NQVNLKQotCi0jZGVmaW5lIFVBUlRfQ09OVFJPTF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBVQVJUX0NPTlRST0xfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgVUFSVF9DT05UUk9MX1JYX0JVU1lfTVNCICAgICAgICAgICAgICAgICAxNQotI2RlZmluZSBVQVJUX0NPTlRST0xfUlhfQlVTWV9MU0IgICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFVBUlRfQ09OVFJPTF9SWF9CVVNZX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwODAwMAotI2RlZmluZSBVQVJUX0NPTlRST0xfUlhfQlVTWV9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgVUFSVF9DT05UUk9MX1JYX0JVU1lfTUFTSykgPj4gVUFSVF9DT05UUk9MX1JYX0JVU1lfTFNCKQotI2RlZmluZSBVQVJUX0NPTlRST0xfUlhfQlVTWV9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFVBUlRfQ09OVFJPTF9SWF9CVVNZX0xTQikgJiBVQVJUX0NPTlRST0xfUlhfQlVTWV9NQVNLKQotI2RlZmluZSBVQVJUX0NPTlRST0xfVFhfQlVTWV9NU0IgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFVBUlRfQ09OVFJPTF9UWF9CVVNZX0xTQiAgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgVUFSVF9DT05UUk9MX1RYX0JVU1lfTUFTSyAgICAgICAgICAgICAgICAweDAwMDA0MDAwCi0jZGVmaW5lIFVBUlRfQ09OVFJPTF9UWF9CVVNZX0dFVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiBVQVJUX0NPTlRST0xfVFhfQlVTWV9NQVNLKSA+PiBVQVJUX0NPTlRST0xfVFhfQlVTWV9MU0IpCi0jZGVmaW5lIFVBUlRfQ09OVFJPTF9UWF9CVVNZX1NFVCh4KSAgICAgICAgICAgICAgKCgoeCkgPDwgVUFSVF9DT05UUk9MX1RYX0JVU1lfTFNCKSAmIFVBUlRfQ09OVFJPTF9UWF9CVVNZX01BU0spCi0jZGVmaW5lIFVBUlRfQ09OVFJPTF9IT1NUX0lOVF9FTkFCTEVfTVNCICAgICAgICAgMTMKLSNkZWZpbmUgVUFSVF9DT05UUk9MX0hPU1RfSU5UX0VOQUJMRV9MU0IgICAgICAgICAxMwotI2RlZmluZSBVQVJUX0NPTlRST0xfSE9TVF9JTlRfRU5BQkxFX01BU0sgICAgICAgIDB4MDAwMDIwMDAKLSNkZWZpbmUgVUFSVF9DT05UUk9MX0hPU1RfSU5UX0VOQUJMRV9HRVQoeCkgICAgICAoKCh4KSAmIFVBUlRfQ09OVFJPTF9IT1NUX0lOVF9FTkFCTEVfTUFTSykgPj4gVUFSVF9DT05UUk9MX0hPU1RfSU5UX0VOQUJMRV9MU0IpCi0jZGVmaW5lIFVBUlRfQ09OVFJPTF9IT1NUX0lOVF9FTkFCTEVfU0VUKHgpICAgICAgKCgoeCkgPDwgVUFSVF9DT05UUk9MX0hPU1RfSU5UX0VOQUJMRV9MU0IpICYgVUFSVF9DT05UUk9MX0hPU1RfSU5UX0VOQUJMRV9NQVNLKQotI2RlZmluZSBVQVJUX0NPTlRST0xfSE9TVF9JTlRfTVNCICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFVBUlRfQ09OVFJPTF9IT1NUX0lOVF9MU0IgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgVUFSVF9DT05UUk9MX0hPU1RfSU5UX01BU0sgICAgICAgICAgICAgICAweDAwMDAxMDAwCi0jZGVmaW5lIFVBUlRfQ09OVFJPTF9IT1NUX0lOVF9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBVQVJUX0NPTlRST0xfSE9TVF9JTlRfTUFTSykgPj4gVUFSVF9DT05UUk9MX0hPU1RfSU5UX0xTQikKLSNkZWZpbmUgVUFSVF9DT05UUk9MX0hPU1RfSU5UX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBVQVJUX0NPTlRST0xfSE9TVF9JTlRfTFNCKSAmIFVBUlRfQ09OVFJPTF9IT1NUX0lOVF9NQVNLKQotI2RlZmluZSBVQVJUX0NPTlRST0xfVFhfQlJFQUtfTVNCICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFVBUlRfQ09OVFJPTF9UWF9CUkVBS19MU0IgICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgVUFSVF9DT05UUk9MX1RYX0JSRUFLX01BU0sgICAgICAgICAgICAgICAweDAwMDAwODAwCi0jZGVmaW5lIFVBUlRfQ09OVFJPTF9UWF9CUkVBS19HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBVQVJUX0NPTlRST0xfVFhfQlJFQUtfTUFTSykgPj4gVUFSVF9DT05UUk9MX1RYX0JSRUFLX0xTQikKLSNkZWZpbmUgVUFSVF9DT05UUk9MX1RYX0JSRUFLX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBVQVJUX0NPTlRST0xfVFhfQlJFQUtfTFNCKSAmIFVBUlRfQ09OVFJPTF9UWF9CUkVBS19NQVNLKQotI2RlZmluZSBVQVJUX0NPTlRST0xfUlhfQlJFQUtfTVNCICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFVBUlRfQ09OVFJPTF9SWF9CUkVBS19MU0IgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgVUFSVF9DT05UUk9MX1JYX0JSRUFLX01BU0sgICAgICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIFVBUlRfQ09OVFJPTF9SWF9CUkVBS19HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBVQVJUX0NPTlRST0xfUlhfQlJFQUtfTUFTSykgPj4gVUFSVF9DT05UUk9MX1JYX0JSRUFLX0xTQikKLSNkZWZpbmUgVUFSVF9DT05UUk9MX1JYX0JSRUFLX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBVQVJUX0NPTlRST0xfUlhfQlJFQUtfTFNCKSAmIFVBUlRfQ09OVFJPTF9SWF9CUkVBS19NQVNLKQotI2RlZmluZSBVQVJUX0NPTlRST0xfU0VSSUFMX1RYX1JFQURZX01TQiAgICAgICAgIDkKLSNkZWZpbmUgVUFSVF9DT05UUk9MX1NFUklBTF9UWF9SRUFEWV9MU0IgICAgICAgICA5Ci0jZGVmaW5lIFVBUlRfQ09OVFJPTF9TRVJJQUxfVFhfUkVBRFlfTUFTSyAgICAgICAgMHgwMDAwMDIwMAotI2RlZmluZSBVQVJUX0NPTlRST0xfU0VSSUFMX1RYX1JFQURZX0dFVCh4KSAgICAgICgoKHgpICYgVUFSVF9DT05UUk9MX1NFUklBTF9UWF9SRUFEWV9NQVNLKSA+PiBVQVJUX0NPTlRST0xfU0VSSUFMX1RYX1JFQURZX0xTQikKLSNkZWZpbmUgVUFSVF9DT05UUk9MX1NFUklBTF9UWF9SRUFEWV9TRVQoeCkgICAgICAoKCh4KSA8PCBVQVJUX0NPTlRST0xfU0VSSUFMX1RYX1JFQURZX0xTQikgJiBVQVJUX0NPTlRST0xfU0VSSUFMX1RYX1JFQURZX01BU0spCi0jZGVmaW5lIFVBUlRfQ09OVFJPTF9UWF9SRUFEWV9PUklERV9NU0IgICAgICAgICAgOAotI2RlZmluZSBVQVJUX0NPTlRST0xfVFhfUkVBRFlfT1JJREVfTFNCICAgICAgICAgIDgKLSNkZWZpbmUgVUFSVF9DT05UUk9MX1RYX1JFQURZX09SSURFX01BU0sgICAgICAgICAweDAwMDAwMTAwCi0jZGVmaW5lIFVBUlRfQ09OVFJPTF9UWF9SRUFEWV9PUklERV9HRVQoeCkgICAgICAgKCgoeCkgJiBVQVJUX0NPTlRST0xfVFhfUkVBRFlfT1JJREVfTUFTSykgPj4gVUFSVF9DT05UUk9MX1RYX1JFQURZX09SSURFX0xTQikKLSNkZWZpbmUgVUFSVF9DT05UUk9MX1RYX1JFQURZX09SSURFX1NFVCh4KSAgICAgICAoKCh4KSA8PCBVQVJUX0NPTlRST0xfVFhfUkVBRFlfT1JJREVfTFNCKSAmIFVBUlRfQ09OVFJPTF9UWF9SRUFEWV9PUklERV9NQVNLKQotI2RlZmluZSBVQVJUX0NPTlRST0xfUlhfUkVBRFlfT1JJREVfTVNCICAgICAgICAgIDcKLSNkZWZpbmUgVUFSVF9DT05UUk9MX1JYX1JFQURZX09SSURFX0xTQiAgICAgICAgICA3Ci0jZGVmaW5lIFVBUlRfQ09OVFJPTF9SWF9SRUFEWV9PUklERV9NQVNLICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBVQVJUX0NPTlRST0xfUlhfUkVBRFlfT1JJREVfR0VUKHgpICAgICAgICgoKHgpICYgVUFSVF9DT05UUk9MX1JYX1JFQURZX09SSURFX01BU0spID4+IFVBUlRfQ09OVFJPTF9SWF9SRUFEWV9PUklERV9MU0IpCi0jZGVmaW5lIFVBUlRfQ09OVFJPTF9SWF9SRUFEWV9PUklERV9TRVQoeCkgICAgICAgKCgoeCkgPDwgVUFSVF9DT05UUk9MX1JYX1JFQURZX09SSURFX0xTQikgJiBVQVJUX0NPTlRST0xfUlhfUkVBRFlfT1JJREVfTUFTSykKLSNkZWZpbmUgVUFSVF9DT05UUk9MX0RNQV9FTkFCTEVfTVNCICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFVBUlRfQ09OVFJPTF9ETUFfRU5BQkxFX0xTQiAgICAgICAgICAgICAgNgotI2RlZmluZSBVQVJUX0NPTlRST0xfRE1BX0VOQUJMRV9NQVNLICAgICAgICAgICAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgVUFSVF9DT05UUk9MX0RNQV9FTkFCTEVfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIFVBUlRfQ09OVFJPTF9ETUFfRU5BQkxFX01BU0spID4+IFVBUlRfQ09OVFJPTF9ETUFfRU5BQkxFX0xTQikKLSNkZWZpbmUgVUFSVF9DT05UUk9MX0RNQV9FTkFCTEVfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCBVQVJUX0NPTlRST0xfRE1BX0VOQUJMRV9MU0IpICYgVUFSVF9DT05UUk9MX0RNQV9FTkFCTEVfTUFTSykKLSNkZWZpbmUgVUFSVF9DT05UUk9MX0ZMT1dfRU5BQkxFX01TQiAgICAgICAgICAgICA1Ci0jZGVmaW5lIFVBUlRfQ09OVFJPTF9GTE9XX0VOQUJMRV9MU0IgICAgICAgICAgICAgNQotI2RlZmluZSBVQVJUX0NPTlRST0xfRkxPV19FTkFCTEVfTUFTSyAgICAgICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgVUFSVF9DT05UUk9MX0ZMT1dfRU5BQkxFX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIFVBUlRfQ09OVFJPTF9GTE9XX0VOQUJMRV9NQVNLKSA+PiBVQVJUX0NPTlRST0xfRkxPV19FTkFCTEVfTFNCKQotI2RlZmluZSBVQVJUX0NPTlRST0xfRkxPV19FTkFCTEVfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IFVBUlRfQ09OVFJPTF9GTE9XX0VOQUJMRV9MU0IpICYgVUFSVF9DT05UUk9MX0ZMT1dfRU5BQkxFX01BU0spCi0jZGVmaW5lIFVBUlRfQ09OVFJPTF9GTE9XX0lOVkVSVF9NU0IgICAgICAgICAgICAgNAotI2RlZmluZSBVQVJUX0NPTlRST0xfRkxPV19JTlZFUlRfTFNCICAgICAgICAgICAgIDQKLSNkZWZpbmUgVUFSVF9DT05UUk9MX0ZMT1dfSU5WRVJUX01BU0sgICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIFVBUlRfQ09OVFJPTF9GTE9XX0lOVkVSVF9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBVQVJUX0NPTlRST0xfRkxPV19JTlZFUlRfTUFTSykgPj4gVUFSVF9DT05UUk9MX0ZMT1dfSU5WRVJUX0xTQikKLSNkZWZpbmUgVUFSVF9DT05UUk9MX0ZMT1dfSU5WRVJUX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBVQVJUX0NPTlRST0xfRkxPV19JTlZFUlRfTFNCKSAmIFVBUlRfQ09OVFJPTF9GTE9XX0lOVkVSVF9NQVNLKQotI2RlZmluZSBVQVJUX0NPTlRST0xfSUZDX0VOQUJMRV9NU0IgICAgICAgICAgICAgIDMKLSNkZWZpbmUgVUFSVF9DT05UUk9MX0lGQ19FTkFCTEVfTFNCICAgICAgICAgICAgICAzCi0jZGVmaW5lIFVBUlRfQ09OVFJPTF9JRkNfRU5BQkxFX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBVQVJUX0NPTlRST0xfSUZDX0VOQUJMRV9HRVQoeCkgICAgICAgICAgICgoKHgpICYgVUFSVF9DT05UUk9MX0lGQ19FTkFCTEVfTUFTSykgPj4gVUFSVF9DT05UUk9MX0lGQ19FTkFCTEVfTFNCKQotI2RlZmluZSBVQVJUX0NPTlRST0xfSUZDX0VOQUJMRV9TRVQoeCkgICAgICAgICAgICgoKHgpIDw8IFVBUlRfQ09OVFJPTF9JRkNfRU5BQkxFX0xTQikgJiBVQVJUX0NPTlRST0xfSUZDX0VOQUJMRV9NQVNLKQotI2RlZmluZSBVQVJUX0NPTlRST0xfSUZDX0RDRV9NU0IgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgVUFSVF9DT05UUk9MX0lGQ19EQ0VfTFNCICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFVBUlRfQ09OVFJPTF9JRkNfRENFX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBVQVJUX0NPTlRST0xfSUZDX0RDRV9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgVUFSVF9DT05UUk9MX0lGQ19EQ0VfTUFTSykgPj4gVUFSVF9DT05UUk9MX0lGQ19EQ0VfTFNCKQotI2RlZmluZSBVQVJUX0NPTlRST0xfSUZDX0RDRV9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFVBUlRfQ09OVFJPTF9JRkNfRENFX0xTQikgJiBVQVJUX0NPTlRST0xfSUZDX0RDRV9NQVNLKQotI2RlZmluZSBVQVJUX0NPTlRST0xfUEFSSVRZX0VOQUJMRV9NU0IgICAgICAgICAgIDEKLSNkZWZpbmUgVUFSVF9DT05UUk9MX1BBUklUWV9FTkFCTEVfTFNCICAgICAgICAgICAxCi0jZGVmaW5lIFVBUlRfQ09OVFJPTF9QQVJJVFlfRU5BQkxFX01BU0sgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBVQVJUX0NPTlRST0xfUEFSSVRZX0VOQUJMRV9HRVQoeCkgICAgICAgICgoKHgpICYgVUFSVF9DT05UUk9MX1BBUklUWV9FTkFCTEVfTUFTSykgPj4gVUFSVF9DT05UUk9MX1BBUklUWV9FTkFCTEVfTFNCKQotI2RlZmluZSBVQVJUX0NPTlRST0xfUEFSSVRZX0VOQUJMRV9TRVQoeCkgICAgICAgICgoKHgpIDw8IFVBUlRfQ09OVFJPTF9QQVJJVFlfRU5BQkxFX0xTQikgJiBVQVJUX0NPTlRST0xfUEFSSVRZX0VOQUJMRV9NQVNLKQotI2RlZmluZSBVQVJUX0NPTlRST0xfUEFSSVRZX0VWRU5fTVNCICAgICAgICAgICAgIDAKLSNkZWZpbmUgVUFSVF9DT05UUk9MX1BBUklUWV9FVkVOX0xTQiAgICAgICAgICAgICAwCi0jZGVmaW5lIFVBUlRfQ09OVFJPTF9QQVJJVFlfRVZFTl9NQVNLICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBVQVJUX0NPTlRST0xfUEFSSVRZX0VWRU5fR0VUKHgpICAgICAgICAgICgoKHgpICYgVUFSVF9DT05UUk9MX1BBUklUWV9FVkVOX01BU0spID4+IFVBUlRfQ09OVFJPTF9QQVJJVFlfRVZFTl9MU0IpCi0jZGVmaW5lIFVBUlRfQ09OVFJPTF9QQVJJVFlfRVZFTl9TRVQoeCkgICAgICAgICAgKCgoeCkgPDwgVUFSVF9DT05UUk9MX1BBUklUWV9FVkVOX0xTQikgJiBVQVJUX0NPTlRST0xfUEFSSVRZX0VWRU5fTUFTSykKLQogI2RlZmluZSBVQVJUX0NMS0RJVl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKICNkZWZpbmUgVUFSVF9DTEtESVZfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CiAjZGVmaW5lIFVBUlRfQ0xLRElWX0NMS19TQ0FMRV9NU0IgICAgICAgICAgICAgICAgMjMKQEAgLTEzOCwxMjMgKzM3LDQgQEAKICNkZWZpbmUgVUFSVF9DTEtESVZfQ0xLX1NURVBfR0VUKHgpICAgICAgICAgICAgICAoKCh4KSAmIFVBUlRfQ0xLRElWX0NMS19TVEVQX01BU0spID4+IFVBUlRfQ0xLRElWX0NMS19TVEVQX0xTQikKICNkZWZpbmUgVUFSVF9DTEtESVZfQ0xLX1NURVBfU0VUKHgpICAgICAgICAgICAgICAoKCh4KSA8PCBVQVJUX0NMS0RJVl9DTEtfU1RFUF9MU0IpICYgVUFSVF9DTEtESVZfQ0xLX1NURVBfTUFTSykKIAotI2RlZmluZSBVQVJUX0lOVF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGMKLSNkZWZpbmUgVUFSVF9JTlRfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBjCi0jZGVmaW5lIFVBUlRfSU5UX1RYX0VNUFRZX0lOVF9NU0IgICAgICAgICAgICAgICAgOQotI2RlZmluZSBVQVJUX0lOVF9UWF9FTVBUWV9JTlRfTFNCICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgVUFSVF9JTlRfVFhfRU1QVFlfSU5UX01BU0sgICAgICAgICAgICAgICAweDAwMDAwMjAwCi0jZGVmaW5lIFVBUlRfSU5UX1RYX0VNUFRZX0lOVF9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBVQVJUX0lOVF9UWF9FTVBUWV9JTlRfTUFTSykgPj4gVUFSVF9JTlRfVFhfRU1QVFlfSU5UX0xTQikKLSNkZWZpbmUgVUFSVF9JTlRfVFhfRU1QVFlfSU5UX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBVQVJUX0lOVF9UWF9FTVBUWV9JTlRfTFNCKSAmIFVBUlRfSU5UX1RYX0VNUFRZX0lOVF9NQVNLKQotI2RlZmluZSBVQVJUX0lOVF9SWF9GVUxMX0lOVF9NU0IgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgVUFSVF9JTlRfUlhfRlVMTF9JTlRfTFNCICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFVBUlRfSU5UX1JYX0ZVTExfSU5UX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAotI2RlZmluZSBVQVJUX0lOVF9SWF9GVUxMX0lOVF9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgVUFSVF9JTlRfUlhfRlVMTF9JTlRfTUFTSykgPj4gVUFSVF9JTlRfUlhfRlVMTF9JTlRfTFNCKQotI2RlZmluZSBVQVJUX0lOVF9SWF9GVUxMX0lOVF9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFVBUlRfSU5UX1JYX0ZVTExfSU5UX0xTQikgJiBVQVJUX0lOVF9SWF9GVUxMX0lOVF9NQVNLKQotI2RlZmluZSBVQVJUX0lOVF9SWF9CUkVBS19PRkZfSU5UX01TQiAgICAgICAgICAgIDcKLSNkZWZpbmUgVUFSVF9JTlRfUlhfQlJFQUtfT0ZGX0lOVF9MU0IgICAgICAgICAgICA3Ci0jZGVmaW5lIFVBUlRfSU5UX1JYX0JSRUFLX09GRl9JTlRfTUFTSyAgICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBVQVJUX0lOVF9SWF9CUkVBS19PRkZfSU5UX0dFVCh4KSAgICAgICAgICgoKHgpICYgVUFSVF9JTlRfUlhfQlJFQUtfT0ZGX0lOVF9NQVNLKSA+PiBVQVJUX0lOVF9SWF9CUkVBS19PRkZfSU5UX0xTQikKLSNkZWZpbmUgVUFSVF9JTlRfUlhfQlJFQUtfT0ZGX0lOVF9TRVQoeCkgICAgICAgICAoKCh4KSA8PCBVQVJUX0lOVF9SWF9CUkVBS19PRkZfSU5UX0xTQikgJiBVQVJUX0lOVF9SWF9CUkVBS19PRkZfSU5UX01BU0spCi0jZGVmaW5lIFVBUlRfSU5UX1JYX0JSRUFLX09OX0lOVF9NU0IgICAgICAgICAgICAgNgotI2RlZmluZSBVQVJUX0lOVF9SWF9CUkVBS19PTl9JTlRfTFNCICAgICAgICAgICAgIDYKLSNkZWZpbmUgVUFSVF9JTlRfUlhfQlJFQUtfT05fSU5UX01BU0sgICAgICAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIFVBUlRfSU5UX1JYX0JSRUFLX09OX0lOVF9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBVQVJUX0lOVF9SWF9CUkVBS19PTl9JTlRfTUFTSykgPj4gVUFSVF9JTlRfUlhfQlJFQUtfT05fSU5UX0xTQikKLSNkZWZpbmUgVUFSVF9JTlRfUlhfQlJFQUtfT05fSU5UX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBVQVJUX0lOVF9SWF9CUkVBS19PTl9JTlRfTFNCKSAmIFVBUlRfSU5UX1JYX0JSRUFLX09OX0lOVF9NQVNLKQotI2RlZmluZSBVQVJUX0lOVF9SWF9QQVJJVFlfRVJSX0lOVF9NU0IgICAgICAgICAgIDUKLSNkZWZpbmUgVUFSVF9JTlRfUlhfUEFSSVRZX0VSUl9JTlRfTFNCICAgICAgICAgICA1Ci0jZGVmaW5lIFVBUlRfSU5UX1JYX1BBUklUWV9FUlJfSU5UX01BU0sgICAgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBVQVJUX0lOVF9SWF9QQVJJVFlfRVJSX0lOVF9HRVQoeCkgICAgICAgICgoKHgpICYgVUFSVF9JTlRfUlhfUEFSSVRZX0VSUl9JTlRfTUFTSykgPj4gVUFSVF9JTlRfUlhfUEFSSVRZX0VSUl9JTlRfTFNCKQotI2RlZmluZSBVQVJUX0lOVF9SWF9QQVJJVFlfRVJSX0lOVF9TRVQoeCkgICAgICAgICgoKHgpIDw8IFVBUlRfSU5UX1JYX1BBUklUWV9FUlJfSU5UX0xTQikgJiBVQVJUX0lOVF9SWF9QQVJJVFlfRVJSX0lOVF9NQVNLKQotI2RlZmluZSBVQVJUX0lOVF9UWF9PRkxPV19FUlJfSU5UX01TQiAgICAgICAgICAgIDQKLSNkZWZpbmUgVUFSVF9JTlRfVFhfT0ZMT1dfRVJSX0lOVF9MU0IgICAgICAgICAgICA0Ci0jZGVmaW5lIFVBUlRfSU5UX1RYX09GTE9XX0VSUl9JTlRfTUFTSyAgICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBVQVJUX0lOVF9UWF9PRkxPV19FUlJfSU5UX0dFVCh4KSAgICAgICAgICgoKHgpICYgVUFSVF9JTlRfVFhfT0ZMT1dfRVJSX0lOVF9NQVNLKSA+PiBVQVJUX0lOVF9UWF9PRkxPV19FUlJfSU5UX0xTQikKLSNkZWZpbmUgVUFSVF9JTlRfVFhfT0ZMT1dfRVJSX0lOVF9TRVQoeCkgICAgICAgICAoKCh4KSA8PCBVQVJUX0lOVF9UWF9PRkxPV19FUlJfSU5UX0xTQikgJiBVQVJUX0lOVF9UWF9PRkxPV19FUlJfSU5UX01BU0spCi0jZGVmaW5lIFVBUlRfSU5UX1JYX09GTE9XX0VSUl9JTlRfTVNCICAgICAgICAgICAgMwotI2RlZmluZSBVQVJUX0lOVF9SWF9PRkxPV19FUlJfSU5UX0xTQiAgICAgICAgICAgIDMKLSNkZWZpbmUgVUFSVF9JTlRfUlhfT0ZMT1dfRVJSX0lOVF9NQVNLICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIFVBUlRfSU5UX1JYX09GTE9XX0VSUl9JTlRfR0VUKHgpICAgICAgICAgKCgoeCkgJiBVQVJUX0lOVF9SWF9PRkxPV19FUlJfSU5UX01BU0spID4+IFVBUlRfSU5UX1JYX09GTE9XX0VSUl9JTlRfTFNCKQotI2RlZmluZSBVQVJUX0lOVF9SWF9PRkxPV19FUlJfSU5UX1NFVCh4KSAgICAgICAgICgoKHgpIDw8IFVBUlRfSU5UX1JYX09GTE9XX0VSUl9JTlRfTFNCKSAmIFVBUlRfSU5UX1JYX09GTE9XX0VSUl9JTlRfTUFTSykKLSNkZWZpbmUgVUFSVF9JTlRfUlhfRlJBTUlOR19FUlJfSU5UX01TQiAgICAgICAgICAyCi0jZGVmaW5lIFVBUlRfSU5UX1JYX0ZSQU1JTkdfRVJSX0lOVF9MU0IgICAgICAgICAgMgotI2RlZmluZSBVQVJUX0lOVF9SWF9GUkFNSU5HX0VSUl9JTlRfTUFTSyAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgVUFSVF9JTlRfUlhfRlJBTUlOR19FUlJfSU5UX0dFVCh4KSAgICAgICAoKCh4KSAmIFVBUlRfSU5UX1JYX0ZSQU1JTkdfRVJSX0lOVF9NQVNLKSA+PiBVQVJUX0lOVF9SWF9GUkFNSU5HX0VSUl9JTlRfTFNCKQotI2RlZmluZSBVQVJUX0lOVF9SWF9GUkFNSU5HX0VSUl9JTlRfU0VUKHgpICAgICAgICgoKHgpIDw8IFVBUlRfSU5UX1JYX0ZSQU1JTkdfRVJSX0lOVF9MU0IpICYgVUFSVF9JTlRfUlhfRlJBTUlOR19FUlJfSU5UX01BU0spCi0jZGVmaW5lIFVBUlRfSU5UX1RYX1JFQURZX0lOVF9NU0IgICAgICAgICAgICAgICAgMQotI2RlZmluZSBVQVJUX0lOVF9UWF9SRUFEWV9JTlRfTFNCICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgVUFSVF9JTlRfVFhfUkVBRFlfSU5UX01BU0sgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFVBUlRfSU5UX1RYX1JFQURZX0lOVF9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBVQVJUX0lOVF9UWF9SRUFEWV9JTlRfTUFTSykgPj4gVUFSVF9JTlRfVFhfUkVBRFlfSU5UX0xTQikKLSNkZWZpbmUgVUFSVF9JTlRfVFhfUkVBRFlfSU5UX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBVQVJUX0lOVF9UWF9SRUFEWV9JTlRfTFNCKSAmIFVBUlRfSU5UX1RYX1JFQURZX0lOVF9NQVNLKQotI2RlZmluZSBVQVJUX0lOVF9SWF9WQUxJRF9JTlRfTVNCICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgVUFSVF9JTlRfUlhfVkFMSURfSU5UX0xTQiAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFVBUlRfSU5UX1JYX1ZBTElEX0lOVF9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBVQVJUX0lOVF9SWF9WQUxJRF9JTlRfR0VUKHgpICAgICAgICAgICAgICgoKHgpICYgVUFSVF9JTlRfUlhfVkFMSURfSU5UX01BU0spID4+IFVBUlRfSU5UX1JYX1ZBTElEX0lOVF9MU0IpCi0jZGVmaW5lIFVBUlRfSU5UX1JYX1ZBTElEX0lOVF9TRVQoeCkgICAgICAgICAgICAgKCgoeCkgPDwgVUFSVF9JTlRfUlhfVkFMSURfSU5UX0xTQikgJiBVQVJUX0lOVF9SWF9WQUxJRF9JTlRfTUFTSykKLQotI2RlZmluZSBVQVJUX0lOVF9FTl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgVUFSVF9JTlRfRU5fT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIFVBUlRfSU5UX0VOX1RYX0VNUFRZX0lOVF9FTl9NU0IgICAgICAgICAgOQotI2RlZmluZSBVQVJUX0lOVF9FTl9UWF9FTVBUWV9JTlRfRU5fTFNCICAgICAgICAgIDkKLSNkZWZpbmUgVUFSVF9JTlRfRU5fVFhfRU1QVFlfSU5UX0VOX01BU0sgICAgICAgICAweDAwMDAwMjAwCi0jZGVmaW5lIFVBUlRfSU5UX0VOX1RYX0VNUFRZX0lOVF9FTl9HRVQoeCkgICAgICAgKCgoeCkgJiBVQVJUX0lOVF9FTl9UWF9FTVBUWV9JTlRfRU5fTUFTSykgPj4gVUFSVF9JTlRfRU5fVFhfRU1QVFlfSU5UX0VOX0xTQikKLSNkZWZpbmUgVUFSVF9JTlRfRU5fVFhfRU1QVFlfSU5UX0VOX1NFVCh4KSAgICAgICAoKCh4KSA8PCBVQVJUX0lOVF9FTl9UWF9FTVBUWV9JTlRfRU5fTFNCKSAmIFVBUlRfSU5UX0VOX1RYX0VNUFRZX0lOVF9FTl9NQVNLKQotI2RlZmluZSBVQVJUX0lOVF9FTl9SWF9GVUxMX0lOVF9FTl9NU0IgICAgICAgICAgIDgKLSNkZWZpbmUgVUFSVF9JTlRfRU5fUlhfRlVMTF9JTlRfRU5fTFNCICAgICAgICAgICA4Ci0jZGVmaW5lIFVBUlRfSU5UX0VOX1JYX0ZVTExfSU5UX0VOX01BU0sgICAgICAgICAgMHgwMDAwMDEwMAotI2RlZmluZSBVQVJUX0lOVF9FTl9SWF9GVUxMX0lOVF9FTl9HRVQoeCkgICAgICAgICgoKHgpICYgVUFSVF9JTlRfRU5fUlhfRlVMTF9JTlRfRU5fTUFTSykgPj4gVUFSVF9JTlRfRU5fUlhfRlVMTF9JTlRfRU5fTFNCKQotI2RlZmluZSBVQVJUX0lOVF9FTl9SWF9GVUxMX0lOVF9FTl9TRVQoeCkgICAgICAgICgoKHgpIDw8IFVBUlRfSU5UX0VOX1JYX0ZVTExfSU5UX0VOX0xTQikgJiBVQVJUX0lOVF9FTl9SWF9GVUxMX0lOVF9FTl9NQVNLKQotI2RlZmluZSBVQVJUX0lOVF9FTl9SWF9CUkVBS19PRkZfSU5UX0VOX01TQiAgICAgIDcKLSNkZWZpbmUgVUFSVF9JTlRfRU5fUlhfQlJFQUtfT0ZGX0lOVF9FTl9MU0IgICAgICA3Ci0jZGVmaW5lIFVBUlRfSU5UX0VOX1JYX0JSRUFLX09GRl9JTlRfRU5fTUFTSyAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBVQVJUX0lOVF9FTl9SWF9CUkVBS19PRkZfSU5UX0VOX0dFVCh4KSAgICgoKHgpICYgVUFSVF9JTlRfRU5fUlhfQlJFQUtfT0ZGX0lOVF9FTl9NQVNLKSA+PiBVQVJUX0lOVF9FTl9SWF9CUkVBS19PRkZfSU5UX0VOX0xTQikKLSNkZWZpbmUgVUFSVF9JTlRfRU5fUlhfQlJFQUtfT0ZGX0lOVF9FTl9TRVQoeCkgICAoKCh4KSA8PCBVQVJUX0lOVF9FTl9SWF9CUkVBS19PRkZfSU5UX0VOX0xTQikgJiBVQVJUX0lOVF9FTl9SWF9CUkVBS19PRkZfSU5UX0VOX01BU0spCi0jZGVmaW5lIFVBUlRfSU5UX0VOX1JYX0JSRUFLX09OX0lOVF9FTl9NU0IgICAgICAgNgotI2RlZmluZSBVQVJUX0lOVF9FTl9SWF9CUkVBS19PTl9JTlRfRU5fTFNCICAgICAgIDYKLSNkZWZpbmUgVUFSVF9JTlRfRU5fUlhfQlJFQUtfT05fSU5UX0VOX01BU0sgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIFVBUlRfSU5UX0VOX1JYX0JSRUFLX09OX0lOVF9FTl9HRVQoeCkgICAgKCgoeCkgJiBVQVJUX0lOVF9FTl9SWF9CUkVBS19PTl9JTlRfRU5fTUFTSykgPj4gVUFSVF9JTlRfRU5fUlhfQlJFQUtfT05fSU5UX0VOX0xTQikKLSNkZWZpbmUgVUFSVF9JTlRfRU5fUlhfQlJFQUtfT05fSU5UX0VOX1NFVCh4KSAgICAoKCh4KSA8PCBVQVJUX0lOVF9FTl9SWF9CUkVBS19PTl9JTlRfRU5fTFNCKSAmIFVBUlRfSU5UX0VOX1JYX0JSRUFLX09OX0lOVF9FTl9NQVNLKQotI2RlZmluZSBVQVJUX0lOVF9FTl9SWF9QQVJJVFlfRVJSX0lOVF9FTl9NU0IgICAgIDUKLSNkZWZpbmUgVUFSVF9JTlRfRU5fUlhfUEFSSVRZX0VSUl9JTlRfRU5fTFNCICAgICA1Ci0jZGVmaW5lIFVBUlRfSU5UX0VOX1JYX1BBUklUWV9FUlJfSU5UX0VOX01BU0sgICAgMHgwMDAwMDAyMAotI2RlZmluZSBVQVJUX0lOVF9FTl9SWF9QQVJJVFlfRVJSX0lOVF9FTl9HRVQoeCkgICgoKHgpICYgVUFSVF9JTlRfRU5fUlhfUEFSSVRZX0VSUl9JTlRfRU5fTUFTSykgPj4gVUFSVF9JTlRfRU5fUlhfUEFSSVRZX0VSUl9JTlRfRU5fTFNCKQotI2RlZmluZSBVQVJUX0lOVF9FTl9SWF9QQVJJVFlfRVJSX0lOVF9FTl9TRVQoeCkgICgoKHgpIDw8IFVBUlRfSU5UX0VOX1JYX1BBUklUWV9FUlJfSU5UX0VOX0xTQikgJiBVQVJUX0lOVF9FTl9SWF9QQVJJVFlfRVJSX0lOVF9FTl9NQVNLKQotI2RlZmluZSBVQVJUX0lOVF9FTl9UWF9PRkxPV19FUlJfSU5UX0VOX01TQiAgICAgIDQKLSNkZWZpbmUgVUFSVF9JTlRfRU5fVFhfT0ZMT1dfRVJSX0lOVF9FTl9MU0IgICAgICA0Ci0jZGVmaW5lIFVBUlRfSU5UX0VOX1RYX09GTE9XX0VSUl9JTlRfRU5fTUFTSyAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBVQVJUX0lOVF9FTl9UWF9PRkxPV19FUlJfSU5UX0VOX0dFVCh4KSAgICgoKHgpICYgVUFSVF9JTlRfRU5fVFhfT0ZMT1dfRVJSX0lOVF9FTl9NQVNLKSA+PiBVQVJUX0lOVF9FTl9UWF9PRkxPV19FUlJfSU5UX0VOX0xTQikKLSNkZWZpbmUgVUFSVF9JTlRfRU5fVFhfT0ZMT1dfRVJSX0lOVF9FTl9TRVQoeCkgICAoKCh4KSA8PCBVQVJUX0lOVF9FTl9UWF9PRkxPV19FUlJfSU5UX0VOX0xTQikgJiBVQVJUX0lOVF9FTl9UWF9PRkxPV19FUlJfSU5UX0VOX01BU0spCi0jZGVmaW5lIFVBUlRfSU5UX0VOX1JYX09GTE9XX0VSUl9JTlRfRU5fTVNCICAgICAgMwotI2RlZmluZSBVQVJUX0lOVF9FTl9SWF9PRkxPV19FUlJfSU5UX0VOX0xTQiAgICAgIDMKLSNkZWZpbmUgVUFSVF9JTlRfRU5fUlhfT0ZMT1dfRVJSX0lOVF9FTl9NQVNLICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIFVBUlRfSU5UX0VOX1JYX09GTE9XX0VSUl9JTlRfRU5fR0VUKHgpICAgKCgoeCkgJiBVQVJUX0lOVF9FTl9SWF9PRkxPV19FUlJfSU5UX0VOX01BU0spID4+IFVBUlRfSU5UX0VOX1JYX09GTE9XX0VSUl9JTlRfRU5fTFNCKQotI2RlZmluZSBVQVJUX0lOVF9FTl9SWF9PRkxPV19FUlJfSU5UX0VOX1NFVCh4KSAgICgoKHgpIDw8IFVBUlRfSU5UX0VOX1JYX09GTE9XX0VSUl9JTlRfRU5fTFNCKSAmIFVBUlRfSU5UX0VOX1JYX09GTE9XX0VSUl9JTlRfRU5fTUFTSykKLSNkZWZpbmUgVUFSVF9JTlRfRU5fUlhfRlJBTUlOR19FUlJfSU5UX0VOX01TQiAgICAyCi0jZGVmaW5lIFVBUlRfSU5UX0VOX1JYX0ZSQU1JTkdfRVJSX0lOVF9FTl9MU0IgICAgMgotI2RlZmluZSBVQVJUX0lOVF9FTl9SWF9GUkFNSU5HX0VSUl9JTlRfRU5fTUFTSyAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgVUFSVF9JTlRfRU5fUlhfRlJBTUlOR19FUlJfSU5UX0VOX0dFVCh4KSAoKCh4KSAmIFVBUlRfSU5UX0VOX1JYX0ZSQU1JTkdfRVJSX0lOVF9FTl9NQVNLKSA+PiBVQVJUX0lOVF9FTl9SWF9GUkFNSU5HX0VSUl9JTlRfRU5fTFNCKQotI2RlZmluZSBVQVJUX0lOVF9FTl9SWF9GUkFNSU5HX0VSUl9JTlRfRU5fU0VUKHgpICgoKHgpIDw8IFVBUlRfSU5UX0VOX1JYX0ZSQU1JTkdfRVJSX0lOVF9FTl9MU0IpICYgVUFSVF9JTlRfRU5fUlhfRlJBTUlOR19FUlJfSU5UX0VOX01BU0spCi0jZGVmaW5lIFVBUlRfSU5UX0VOX1RYX1JFQURZX0lOVF9FTl9NU0IgICAgICAgICAgMQotI2RlZmluZSBVQVJUX0lOVF9FTl9UWF9SRUFEWV9JTlRfRU5fTFNCICAgICAgICAgIDEKLSNkZWZpbmUgVUFSVF9JTlRfRU5fVFhfUkVBRFlfSU5UX0VOX01BU0sgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFVBUlRfSU5UX0VOX1RYX1JFQURZX0lOVF9FTl9HRVQoeCkgICAgICAgKCgoeCkgJiBVQVJUX0lOVF9FTl9UWF9SRUFEWV9JTlRfRU5fTUFTSykgPj4gVUFSVF9JTlRfRU5fVFhfUkVBRFlfSU5UX0VOX0xTQikKLSNkZWZpbmUgVUFSVF9JTlRfRU5fVFhfUkVBRFlfSU5UX0VOX1NFVCh4KSAgICAgICAoKCh4KSA8PCBVQVJUX0lOVF9FTl9UWF9SRUFEWV9JTlRfRU5fTFNCKSAmIFVBUlRfSU5UX0VOX1RYX1JFQURZX0lOVF9FTl9NQVNLKQotI2RlZmluZSBVQVJUX0lOVF9FTl9SWF9WQUxJRF9JTlRfRU5fTVNCICAgICAgICAgIDAKLSNkZWZpbmUgVUFSVF9JTlRfRU5fUlhfVkFMSURfSU5UX0VOX0xTQiAgICAgICAgICAwCi0jZGVmaW5lIFVBUlRfSU5UX0VOX1JYX1ZBTElEX0lOVF9FTl9NQVNLICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBVQVJUX0lOVF9FTl9SWF9WQUxJRF9JTlRfRU5fR0VUKHgpICAgICAgICgoKHgpICYgVUFSVF9JTlRfRU5fUlhfVkFMSURfSU5UX0VOX01BU0spID4+IFVBUlRfSU5UX0VOX1JYX1ZBTElEX0lOVF9FTl9MU0IpCi0jZGVmaW5lIFVBUlRfSU5UX0VOX1JYX1ZBTElEX0lOVF9FTl9TRVQoeCkgICAgICAgKCgoeCkgPDwgVUFSVF9JTlRfRU5fUlhfVkFMSURfSU5UX0VOX0xTQikgJiBVQVJUX0lOVF9FTl9SWF9WQUxJRF9JTlRfRU5fTUFTSykKLQotCi0jaWZuZGVmIF9fQVNTRU1CTEVSX18KLQotdHlwZWRlZiBzdHJ1Y3QgdWFydF9yZWdfcmVnX3MgewotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdWFydF9kYXRhOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdWFydF9jb250cm9sOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdWFydF9jbGtkaXY7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB1YXJ0X2ludDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHVhcnRfaW50X2VuOwotfSB1YXJ0X3JlZ19yZWdfdDsKLQotI2VuZGlmIC8qIF9fQVNTRU1CTEVSX18gKi8KLQogI2VuZGlmIC8qIF9VQVJUX1JFR19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHc0LjAvaHcvdW1ib3hfcmVnLmggYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzQuMC9ody91bWJveF9yZWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjIzM2NiYy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzQuMC9ody91bWJveF9yZWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ29weXJpZ2h0IChjKSAyMDA0LTIwMTAgQXRoZXJvcyBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyAKLS8vCi0vLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLS8vIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0vLwotLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0vLyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0vLyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgotLy8gQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotLy8gV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0vLyBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgotLy8gT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLS8vCi0vLwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIEF1dGhvcihzKTogPSJBdGhlcm9zIgotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQotI2lmZGVmIFdMQU5fSEVBREVSUwotCi0jaW5jbHVkZSAidW1ib3hfd2xhbl9yZWcuaCIKLQotCi0jaWZuZGVmIEJUX0hFQURFUlMKLQotCi0KLSNlbmRpZgotI2VuZGlmCi0KLQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzQuMC9ody91bWJveF93bGFuX3JlZy5oIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHc0LjAvaHcvdW1ib3hfd2xhbl9yZWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDczN2EyOC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzQuMC9ody91bWJveF93bGFuX3JlZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIyICswLDAgQEAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ29weXJpZ2h0IChjKSAyMDA0LTIwMTAgQXRoZXJvcyBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyAKLS8vCi0vLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLS8vIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0vLwotLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0vLyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0vLyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgotLy8gQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotLy8gV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0vLyBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgotLy8gT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLS8vCi0vLwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIEF1dGhvcihzKTogPSJBdGhlcm9zIgotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQotI2lmbmRlZiBfVU1CT1hfV0xBTl9SRUdfUkVHX0hfCi0jZGVmaW5lIF9VTUJPWF9XTEFOX1JFR19SRUdfSF8KLQotI2RlZmluZSBVTUJPWF9GSUZPX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgVU1CT1hfRklGT19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCi0jZGVmaW5lIFVNQk9YX0ZJRk9fREFUQV9NU0IgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBVTUJPWF9GSUZPX0RBVEFfTFNCICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgVU1CT1hfRklGT19EQVRBX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMWZmCi0jZGVmaW5lIFVNQk9YX0ZJRk9fREFUQV9HRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiBVTUJPWF9GSUZPX0RBVEFfTUFTSykgPj4gVU1CT1hfRklGT19EQVRBX0xTQikKLSNkZWZpbmUgVU1CT1hfRklGT19EQVRBX1NFVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA8PCBVTUJPWF9GSUZPX0RBVEFfTFNCKSAmIFVNQk9YX0ZJRk9fREFUQV9NQVNLKQotCi0jZGVmaW5lIFVNQk9YX0ZJRk9fU1RBVFVTX0FERFJFU1MgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBVTUJPWF9GSUZPX1NUQVRVU19PRkZTRVQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgVU1CT1hfRklGT19TVEFUVVNfVFhfRU1QVFlfTVNCICAgICAgICAgICAzCi0jZGVmaW5lIFVNQk9YX0ZJRk9fU1RBVFVTX1RYX0VNUFRZX0xTQiAgICAgICAgICAgMwotI2RlZmluZSBVTUJPWF9GSUZPX1NUQVRVU19UWF9FTVBUWV9NQVNLICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgVU1CT1hfRklGT19TVEFUVVNfVFhfRU1QVFlfR0VUKHgpICAgICAgICAoKCh4KSAmIFVNQk9YX0ZJRk9fU1RBVFVTX1RYX0VNUFRZX01BU0spID4+IFVNQk9YX0ZJRk9fU1RBVFVTX1RYX0VNUFRZX0xTQikKLSNkZWZpbmUgVU1CT1hfRklGT19TVEFUVVNfVFhfRU1QVFlfU0VUKHgpICAgICAgICAoKCh4KSA8PCBVTUJPWF9GSUZPX1NUQVRVU19UWF9FTVBUWV9MU0IpICYgVU1CT1hfRklGT19TVEFUVVNfVFhfRU1QVFlfTUFTSykKLSNkZWZpbmUgVU1CT1hfRklGT19TVEFUVVNfVFhfRlVMTF9NU0IgICAgICAgICAgICAyCi0jZGVmaW5lIFVNQk9YX0ZJRk9fU1RBVFVTX1RYX0ZVTExfTFNCICAgICAgICAgICAgMgotI2RlZmluZSBVTUJPWF9GSUZPX1NUQVRVU19UWF9GVUxMX01BU0sgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgVU1CT1hfRklGT19TVEFUVVNfVFhfRlVMTF9HRVQoeCkgICAgICAgICAoKCh4KSAmIFVNQk9YX0ZJRk9fU1RBVFVTX1RYX0ZVTExfTUFTSykgPj4gVU1CT1hfRklGT19TVEFUVVNfVFhfRlVMTF9MU0IpCi0jZGVmaW5lIFVNQk9YX0ZJRk9fU1RBVFVTX1RYX0ZVTExfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgVU1CT1hfRklGT19TVEFUVVNfVFhfRlVMTF9MU0IpICYgVU1CT1hfRklGT19TVEFUVVNfVFhfRlVMTF9NQVNLKQotI2RlZmluZSBVTUJPWF9GSUZPX1NUQVRVU19SWF9FTVBUWV9NU0IgICAgICAgICAgIDEKLSNkZWZpbmUgVU1CT1hfRklGT19TVEFUVVNfUlhfRU1QVFlfTFNCICAgICAgICAgICAxCi0jZGVmaW5lIFVNQk9YX0ZJRk9fU1RBVFVTX1JYX0VNUFRZX01BU0sgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBVTUJPWF9GSUZPX1NUQVRVU19SWF9FTVBUWV9HRVQoeCkgICAgICAgICgoKHgpICYgVU1CT1hfRklGT19TVEFUVVNfUlhfRU1QVFlfTUFTSykgPj4gVU1CT1hfRklGT19TVEFUVVNfUlhfRU1QVFlfTFNCKQotI2RlZmluZSBVTUJPWF9GSUZPX1NUQVRVU19SWF9FTVBUWV9TRVQoeCkgICAgICAgICgoKHgpIDw8IFVNQk9YX0ZJRk9fU1RBVFVTX1JYX0VNUFRZX0xTQikgJiBVTUJPWF9GSUZPX1NUQVRVU19SWF9FTVBUWV9NQVNLKQotI2RlZmluZSBVTUJPWF9GSUZPX1NUQVRVU19SWF9GVUxMX01TQiAgICAgICAgICAgIDAKLSNkZWZpbmUgVU1CT1hfRklGT19TVEFUVVNfUlhfRlVMTF9MU0IgICAgICAgICAgICAwCi0jZGVmaW5lIFVNQk9YX0ZJRk9fU1RBVFVTX1JYX0ZVTExfTUFTSyAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBVTUJPWF9GSUZPX1NUQVRVU19SWF9GVUxMX0dFVCh4KSAgICAgICAgICgoKHgpICYgVU1CT1hfRklGT19TVEFUVVNfUlhfRlVMTF9NQVNLKSA+PiBVTUJPWF9GSUZPX1NUQVRVU19SWF9GVUxMX0xTQikKLSNkZWZpbmUgVU1CT1hfRklGT19TVEFUVVNfUlhfRlVMTF9TRVQoeCkgICAgICAgICAoKCh4KSA8PCBVTUJPWF9GSUZPX1NUQVRVU19SWF9GVUxMX0xTQikgJiBVTUJPWF9GSUZPX1NUQVRVU19SWF9GVUxMX01BU0spCi0KLSNkZWZpbmUgVU1CT1hfRE1BX1BPTElDWV9BRERSRVNTICAgICAgICAgICAgICAgICAweDAwMDAwMDBjCi0jZGVmaW5lIFVNQk9YX0RNQV9QT0xJQ1lfT0ZGU0VUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwYwotI2RlZmluZSBVTUJPWF9ETUFfUE9MSUNZX1RYX1FVQU5UVU1fTVNCICAgICAgICAgIDMKLSNkZWZpbmUgVU1CT1hfRE1BX1BPTElDWV9UWF9RVUFOVFVNX0xTQiAgICAgICAgICAzCi0jZGVmaW5lIFVNQk9YX0RNQV9QT0xJQ1lfVFhfUVVBTlRVTV9NQVNLICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBVTUJPWF9ETUFfUE9MSUNZX1RYX1FVQU5UVU1fR0VUKHgpICAgICAgICgoKHgpICYgVU1CT1hfRE1BX1BPTElDWV9UWF9RVUFOVFVNX01BU0spID4+IFVNQk9YX0RNQV9QT0xJQ1lfVFhfUVVBTlRVTV9MU0IpCi0jZGVmaW5lIFVNQk9YX0RNQV9QT0xJQ1lfVFhfUVVBTlRVTV9TRVQoeCkgICAgICAgKCgoeCkgPDwgVU1CT1hfRE1BX1BPTElDWV9UWF9RVUFOVFVNX0xTQikgJiBVTUJPWF9ETUFfUE9MSUNZX1RYX1FVQU5UVU1fTUFTSykKLSNkZWZpbmUgVU1CT1hfRE1BX1BPTElDWV9UWF9PUkRFUl9NU0IgICAgICAgICAgICAyCi0jZGVmaW5lIFVNQk9YX0RNQV9QT0xJQ1lfVFhfT1JERVJfTFNCICAgICAgICAgICAgMgotI2RlZmluZSBVTUJPWF9ETUFfUE9MSUNZX1RYX09SREVSX01BU0sgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgVU1CT1hfRE1BX1BPTElDWV9UWF9PUkRFUl9HRVQoeCkgICAgICAgICAoKCh4KSAmIFVNQk9YX0RNQV9QT0xJQ1lfVFhfT1JERVJfTUFTSykgPj4gVU1CT1hfRE1BX1BPTElDWV9UWF9PUkRFUl9MU0IpCi0jZGVmaW5lIFVNQk9YX0RNQV9QT0xJQ1lfVFhfT1JERVJfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgVU1CT1hfRE1BX1BPTElDWV9UWF9PUkRFUl9MU0IpICYgVU1CT1hfRE1BX1BPTElDWV9UWF9PUkRFUl9NQVNLKQotI2RlZmluZSBVTUJPWF9ETUFfUE9MSUNZX1JYX1FVQU5UVU1fTVNCICAgICAgICAgIDEKLSNkZWZpbmUgVU1CT1hfRE1BX1BPTElDWV9SWF9RVUFOVFVNX0xTQiAgICAgICAgICAxCi0jZGVmaW5lIFVNQk9YX0RNQV9QT0xJQ1lfUlhfUVVBTlRVTV9NQVNLICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBVTUJPWF9ETUFfUE9MSUNZX1JYX1FVQU5UVU1fR0VUKHgpICAgICAgICgoKHgpICYgVU1CT1hfRE1BX1BPTElDWV9SWF9RVUFOVFVNX01BU0spID4+IFVNQk9YX0RNQV9QT0xJQ1lfUlhfUVVBTlRVTV9MU0IpCi0jZGVmaW5lIFVNQk9YX0RNQV9QT0xJQ1lfUlhfUVVBTlRVTV9TRVQoeCkgICAgICAgKCgoeCkgPDwgVU1CT1hfRE1BX1BPTElDWV9SWF9RVUFOVFVNX0xTQikgJiBVTUJPWF9ETUFfUE9MSUNZX1JYX1FVQU5UVU1fTUFTSykKLSNkZWZpbmUgVU1CT1hfRE1BX1BPTElDWV9SWF9PUkRFUl9NU0IgICAgICAgICAgICAwCi0jZGVmaW5lIFVNQk9YX0RNQV9QT0xJQ1lfUlhfT1JERVJfTFNCICAgICAgICAgICAgMAotI2RlZmluZSBVTUJPWF9ETUFfUE9MSUNZX1JYX09SREVSX01BU0sgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgVU1CT1hfRE1BX1BPTElDWV9SWF9PUkRFUl9HRVQoeCkgICAgICAgICAoKCh4KSAmIFVNQk9YX0RNQV9QT0xJQ1lfUlhfT1JERVJfTUFTSykgPj4gVU1CT1hfRE1BX1BPTElDWV9SWF9PUkRFUl9MU0IpCi0jZGVmaW5lIFVNQk9YX0RNQV9QT0xJQ1lfUlhfT1JERVJfU0VUKHgpICAgICAgICAgKCgoeCkgPDwgVU1CT1hfRE1BX1BPTElDWV9SWF9PUkRFUl9MU0IpICYgVU1CT1hfRE1BX1BPTElDWV9SWF9PUkRFUl9NQVNLKQotCi0jZGVmaW5lIFVNQk9YMF9ETUFfUlhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1MgICAgMHgwMDAwMDAxMAotI2RlZmluZSBVTUJPWDBfRE1BX1JYX0RFU0NSSVBUT1JfQkFTRV9PRkZTRVQgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgVU1CT1gwX0RNQV9SWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTU19NU0IgMjcKLSNkZWZpbmUgVU1CT1gwX0RNQV9SWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTU19MU0IgMgotI2RlZmluZSBVTUJPWDBfRE1BX1JYX0RFU0NSSVBUT1JfQkFTRV9BRERSRVNTX01BU0sgMHgwZmZmZmZmYwotI2RlZmluZSBVTUJPWDBfRE1BX1JYX0RFU0NSSVBUT1JfQkFTRV9BRERSRVNTX0dFVCh4KSAoKCh4KSAmIFVNQk9YMF9ETUFfUlhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1NfTUFTSykgPj4gVU1CT1gwX0RNQV9SWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTU19MU0IpCi0jZGVmaW5lIFVNQk9YMF9ETUFfUlhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1NfU0VUKHgpICgoKHgpIDw8IFVNQk9YMF9ETUFfUlhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1NfTFNCKSAmIFVNQk9YMF9ETUFfUlhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1NfTUFTSykKLQotI2RlZmluZSBVTUJPWDBfRE1BX1JYX0NPTlRST0xfQUREUkVTUyAgICAgICAgICAgIDB4MDAwMDAwMTQKLSNkZWZpbmUgVU1CT1gwX0RNQV9SWF9DT05UUk9MX09GRlNFVCAgICAgICAgICAgICAweDAwMDAwMDE0Ci0jZGVmaW5lIFVNQk9YMF9ETUFfUlhfQ09OVFJPTF9SRVNVTUVfTVNCICAgICAgICAgMgotI2RlZmluZSBVTUJPWDBfRE1BX1JYX0NPTlRST0xfUkVTVU1FX0xTQiAgICAgICAgIDIKLSNkZWZpbmUgVU1CT1gwX0RNQV9SWF9DT05UUk9MX1JFU1VNRV9NQVNLICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFVNQk9YMF9ETUFfUlhfQ09OVFJPTF9SRVNVTUVfR0VUKHgpICAgICAgKCgoeCkgJiBVTUJPWDBfRE1BX1JYX0NPTlRST0xfUkVTVU1FX01BU0spID4+IFVNQk9YMF9ETUFfUlhfQ09OVFJPTF9SRVNVTUVfTFNCKQotI2RlZmluZSBVTUJPWDBfRE1BX1JYX0NPTlRST0xfUkVTVU1FX1NFVCh4KSAgICAgICgoKHgpIDw8IFVNQk9YMF9ETUFfUlhfQ09OVFJPTF9SRVNVTUVfTFNCKSAmIFVNQk9YMF9ETUFfUlhfQ09OVFJPTF9SRVNVTUVfTUFTSykKLSNkZWZpbmUgVU1CT1gwX0RNQV9SWF9DT05UUk9MX1NUQVJUX01TQiAgICAgICAgICAxCi0jZGVmaW5lIFVNQk9YMF9ETUFfUlhfQ09OVFJPTF9TVEFSVF9MU0IgICAgICAgICAgMQotI2RlZmluZSBVTUJPWDBfRE1BX1JYX0NPTlRST0xfU1RBUlRfTUFTSyAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgVU1CT1gwX0RNQV9SWF9DT05UUk9MX1NUQVJUX0dFVCh4KSAgICAgICAoKCh4KSAmIFVNQk9YMF9ETUFfUlhfQ09OVFJPTF9TVEFSVF9NQVNLKSA+PiBVTUJPWDBfRE1BX1JYX0NPTlRST0xfU1RBUlRfTFNCKQotI2RlZmluZSBVTUJPWDBfRE1BX1JYX0NPTlRST0xfU1RBUlRfU0VUKHgpICAgICAgICgoKHgpIDw8IFVNQk9YMF9ETUFfUlhfQ09OVFJPTF9TVEFSVF9MU0IpICYgVU1CT1gwX0RNQV9SWF9DT05UUk9MX1NUQVJUX01BU0spCi0jZGVmaW5lIFVNQk9YMF9ETUFfUlhfQ09OVFJPTF9TVE9QX01TQiAgICAgICAgICAgMAotI2RlZmluZSBVTUJPWDBfRE1BX1JYX0NPTlRST0xfU1RPUF9MU0IgICAgICAgICAgIDAKLSNkZWZpbmUgVU1CT1gwX0RNQV9SWF9DT05UUk9MX1NUT1BfTUFTSyAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFVNQk9YMF9ETUFfUlhfQ09OVFJPTF9TVE9QX0dFVCh4KSAgICAgICAgKCgoeCkgJiBVTUJPWDBfRE1BX1JYX0NPTlRST0xfU1RPUF9NQVNLKSA+PiBVTUJPWDBfRE1BX1JYX0NPTlRST0xfU1RPUF9MU0IpCi0jZGVmaW5lIFVNQk9YMF9ETUFfUlhfQ09OVFJPTF9TVE9QX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgVU1CT1gwX0RNQV9SWF9DT05UUk9MX1NUT1BfTFNCKSAmIFVNQk9YMF9ETUFfUlhfQ09OVFJPTF9TVE9QX01BU0spCi0KLSNkZWZpbmUgVU1CT1gwX0RNQV9UWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTUyAgICAweDAwMDAwMDE4Ci0jZGVmaW5lIFVNQk9YMF9ETUFfVFhfREVTQ1JJUFRPUl9CQVNFX09GRlNFVCAgICAgMHgwMDAwMDAxOAotI2RlZmluZSBVTUJPWDBfRE1BX1RYX0RFU0NSSVBUT1JfQkFTRV9BRERSRVNTX01TQiAyNwotI2RlZmluZSBVTUJPWDBfRE1BX1RYX0RFU0NSSVBUT1JfQkFTRV9BRERSRVNTX0xTQiAyCi0jZGVmaW5lIFVNQk9YMF9ETUFfVFhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1NfTUFTSyAweDBmZmZmZmZjCi0jZGVmaW5lIFVNQk9YMF9ETUFfVFhfREVTQ1JJUFRPUl9CQVNFX0FERFJFU1NfR0VUKHgpICgoKHgpICYgVU1CT1gwX0RNQV9UWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTU19NQVNLKSA+PiBVTUJPWDBfRE1BX1RYX0RFU0NSSVBUT1JfQkFTRV9BRERSRVNTX0xTQikKLSNkZWZpbmUgVU1CT1gwX0RNQV9UWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTU19TRVQoeCkgKCgoeCkgPDwgVU1CT1gwX0RNQV9UWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTU19MU0IpICYgVU1CT1gwX0RNQV9UWF9ERVNDUklQVE9SX0JBU0VfQUREUkVTU19NQVNLKQotCi0jZGVmaW5lIFVNQk9YMF9ETUFfVFhfQ09OVFJPTF9BRERSRVNTICAgICAgICAgICAgMHgwMDAwMDAxYwotI2RlZmluZSBVTUJPWDBfRE1BX1RYX0NPTlRST0xfT0ZGU0VUICAgICAgICAgICAgIDB4MDAwMDAwMWMKLSNkZWZpbmUgVU1CT1gwX0RNQV9UWF9DT05UUk9MX1JFU1VNRV9NU0IgICAgICAgICAyCi0jZGVmaW5lIFVNQk9YMF9ETUFfVFhfQ09OVFJPTF9SRVNVTUVfTFNCICAgICAgICAgMgotI2RlZmluZSBVTUJPWDBfRE1BX1RYX0NPTlRST0xfUkVTVU1FX01BU0sgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgVU1CT1gwX0RNQV9UWF9DT05UUk9MX1JFU1VNRV9HRVQoeCkgICAgICAoKCh4KSAmIFVNQk9YMF9ETUFfVFhfQ09OVFJPTF9SRVNVTUVfTUFTSykgPj4gVU1CT1gwX0RNQV9UWF9DT05UUk9MX1JFU1VNRV9MU0IpCi0jZGVmaW5lIFVNQk9YMF9ETUFfVFhfQ09OVFJPTF9SRVNVTUVfU0VUKHgpICAgICAgKCgoeCkgPDwgVU1CT1gwX0RNQV9UWF9DT05UUk9MX1JFU1VNRV9MU0IpICYgVU1CT1gwX0RNQV9UWF9DT05UUk9MX1JFU1VNRV9NQVNLKQotI2RlZmluZSBVTUJPWDBfRE1BX1RYX0NPTlRST0xfU1RBUlRfTVNCICAgICAgICAgIDEKLSNkZWZpbmUgVU1CT1gwX0RNQV9UWF9DT05UUk9MX1NUQVJUX0xTQiAgICAgICAgICAxCi0jZGVmaW5lIFVNQk9YMF9ETUFfVFhfQ09OVFJPTF9TVEFSVF9NQVNLICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBVTUJPWDBfRE1BX1RYX0NPTlRST0xfU1RBUlRfR0VUKHgpICAgICAgICgoKHgpICYgVU1CT1gwX0RNQV9UWF9DT05UUk9MX1NUQVJUX01BU0spID4+IFVNQk9YMF9ETUFfVFhfQ09OVFJPTF9TVEFSVF9MU0IpCi0jZGVmaW5lIFVNQk9YMF9ETUFfVFhfQ09OVFJPTF9TVEFSVF9TRVQoeCkgICAgICAgKCgoeCkgPDwgVU1CT1gwX0RNQV9UWF9DT05UUk9MX1NUQVJUX0xTQikgJiBVTUJPWDBfRE1BX1RYX0NPTlRST0xfU1RBUlRfTUFTSykKLSNkZWZpbmUgVU1CT1gwX0RNQV9UWF9DT05UUk9MX1NUT1BfTVNCICAgICAgICAgICAwCi0jZGVmaW5lIFVNQk9YMF9ETUFfVFhfQ09OVFJPTF9TVE9QX0xTQiAgICAgICAgICAgMAotI2RlZmluZSBVTUJPWDBfRE1BX1RYX0NPTlRST0xfU1RPUF9NQVNLICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgVU1CT1gwX0RNQV9UWF9DT05UUk9MX1NUT1BfR0VUKHgpICAgICAgICAoKCh4KSAmIFVNQk9YMF9ETUFfVFhfQ09OVFJPTF9TVE9QX01BU0spID4+IFVNQk9YMF9ETUFfVFhfQ09OVFJPTF9TVE9QX0xTQikKLSNkZWZpbmUgVU1CT1gwX0RNQV9UWF9DT05UUk9MX1NUT1BfU0VUKHgpICAgICAgICAoKCh4KSA8PCBVTUJPWDBfRE1BX1RYX0NPTlRST0xfU1RPUF9MU0IpICYgVU1CT1gwX0RNQV9UWF9DT05UUk9MX1NUT1BfTUFTSykKLQotI2RlZmluZSBVTUJPWF9GSUZPX1RJTUVPVVRfQUREUkVTUyAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgVU1CT1hfRklGT19USU1FT1VUX09GRlNFVCAgICAgICAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIFVNQk9YX0ZJRk9fVElNRU9VVF9FTkFCTEVfU0VUX01TQiAgICAgICAgOAotI2RlZmluZSBVTUJPWF9GSUZPX1RJTUVPVVRfRU5BQkxFX1NFVF9MU0IgICAgICAgIDgKLSNkZWZpbmUgVU1CT1hfRklGT19USU1FT1VUX0VOQUJMRV9TRVRfTUFTSyAgICAgICAweDAwMDAwMTAwCi0jZGVmaW5lIFVNQk9YX0ZJRk9fVElNRU9VVF9FTkFCTEVfU0VUX0dFVCh4KSAgICAgKCgoeCkgJiBVTUJPWF9GSUZPX1RJTUVPVVRfRU5BQkxFX1NFVF9NQVNLKSA+PiBVTUJPWF9GSUZPX1RJTUVPVVRfRU5BQkxFX1NFVF9MU0IpCi0jZGVmaW5lIFVNQk9YX0ZJRk9fVElNRU9VVF9FTkFCTEVfU0VUX1NFVCh4KSAgICAgKCgoeCkgPDwgVU1CT1hfRklGT19USU1FT1VUX0VOQUJMRV9TRVRfTFNCKSAmIFVNQk9YX0ZJRk9fVElNRU9VVF9FTkFCTEVfU0VUX01BU0spCi0jZGVmaW5lIFVNQk9YX0ZJRk9fVElNRU9VVF9WQUxVRV9NU0IgICAgICAgICAgICAgNwotI2RlZmluZSBVTUJPWF9GSUZPX1RJTUVPVVRfVkFMVUVfTFNCICAgICAgICAgICAgIDAKLSNkZWZpbmUgVU1CT1hfRklGT19USU1FT1VUX1ZBTFVFX01BU0sgICAgICAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIFVNQk9YX0ZJRk9fVElNRU9VVF9WQUxVRV9HRVQoeCkgICAgICAgICAgKCgoeCkgJiBVTUJPWF9GSUZPX1RJTUVPVVRfVkFMVUVfTUFTSykgPj4gVU1CT1hfRklGT19USU1FT1VUX1ZBTFVFX0xTQikKLSNkZWZpbmUgVU1CT1hfRklGT19USU1FT1VUX1ZBTFVFX1NFVCh4KSAgICAgICAgICAoKCh4KSA8PCBVTUJPWF9GSUZPX1RJTUVPVVRfVkFMVUVfTFNCKSAmIFVNQk9YX0ZJRk9fVElNRU9VVF9WQUxVRV9NQVNLKQotCi0jZGVmaW5lIFVNQk9YX0lOVF9TVEFUVVNfQUREUkVTUyAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAotI2RlZmluZSBVTUJPWF9JTlRfU1RBVFVTX09GRlNFVCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjQKLSNkZWZpbmUgVU1CT1hfSU5UX1NUQVRVU19IQ0lfRlJBTUVSX1VOREVSRkxPV19NU0IgOQotI2RlZmluZSBVTUJPWF9JTlRfU1RBVFVTX0hDSV9GUkFNRVJfVU5ERVJGTE9XX0xTQiA5Ci0jZGVmaW5lIFVNQk9YX0lOVF9TVEFUVVNfSENJX0ZSQU1FUl9VTkRFUkZMT1dfTUFTSyAweDAwMDAwMjAwCi0jZGVmaW5lIFVNQk9YX0lOVF9TVEFUVVNfSENJX0ZSQU1FUl9VTkRFUkZMT1dfR0VUKHgpICgoKHgpICYgVU1CT1hfSU5UX1NUQVRVU19IQ0lfRlJBTUVSX1VOREVSRkxPV19NQVNLKSA+PiBVTUJPWF9JTlRfU1RBVFVTX0hDSV9GUkFNRVJfVU5ERVJGTE9XX0xTQikKLSNkZWZpbmUgVU1CT1hfSU5UX1NUQVRVU19IQ0lfRlJBTUVSX1VOREVSRkxPV19TRVQoeCkgKCgoeCkgPDwgVU1CT1hfSU5UX1NUQVRVU19IQ0lfRlJBTUVSX1VOREVSRkxPV19MU0IpICYgVU1CT1hfSU5UX1NUQVRVU19IQ0lfRlJBTUVSX1VOREVSRkxPV19NQVNLKQotI2RlZmluZSBVTUJPWF9JTlRfU1RBVFVTX0hDSV9GUkFNRVJfT1ZFUkZMT1dfTVNCIDgKLSNkZWZpbmUgVU1CT1hfSU5UX1NUQVRVU19IQ0lfRlJBTUVSX09WRVJGTE9XX0xTQiA4Ci0jZGVmaW5lIFVNQk9YX0lOVF9TVEFUVVNfSENJX0ZSQU1FUl9PVkVSRkxPV19NQVNLIDB4MDAwMDAxMDAKLSNkZWZpbmUgVU1CT1hfSU5UX1NUQVRVU19IQ0lfRlJBTUVSX09WRVJGTE9XX0dFVCh4KSAoKCh4KSAmIFVNQk9YX0lOVF9TVEFUVVNfSENJX0ZSQU1FUl9PVkVSRkxPV19NQVNLKSA+PiBVTUJPWF9JTlRfU1RBVFVTX0hDSV9GUkFNRVJfT1ZFUkZMT1dfTFNCKQotI2RlZmluZSBVTUJPWF9JTlRfU1RBVFVTX0hDSV9GUkFNRVJfT1ZFUkZMT1dfU0VUKHgpICgoKHgpIDw8IFVNQk9YX0lOVF9TVEFUVVNfSENJX0ZSQU1FUl9PVkVSRkxPV19MU0IpICYgVU1CT1hfSU5UX1NUQVRVU19IQ0lfRlJBTUVSX09WRVJGTE9XX01BU0spCi0jZGVmaW5lIFVNQk9YX0lOVF9TVEFUVVNfUlhfRE1BX0NPTVBMRVRFX01TQiAgICAgNwotI2RlZmluZSBVTUJPWF9JTlRfU1RBVFVTX1JYX0RNQV9DT01QTEVURV9MU0IgICAgIDcKLSNkZWZpbmUgVU1CT1hfSU5UX1NUQVRVU19SWF9ETUFfQ09NUExFVEVfTUFTSyAgICAweDAwMDAwMDgwCi0jZGVmaW5lIFVNQk9YX0lOVF9TVEFUVVNfUlhfRE1BX0NPTVBMRVRFX0dFVCh4KSAgKCgoeCkgJiBVTUJPWF9JTlRfU1RBVFVTX1JYX0RNQV9DT01QTEVURV9NQVNLKSA+PiBVTUJPWF9JTlRfU1RBVFVTX1JYX0RNQV9DT01QTEVURV9MU0IpCi0jZGVmaW5lIFVNQk9YX0lOVF9TVEFUVVNfUlhfRE1BX0NPTVBMRVRFX1NFVCh4KSAgKCgoeCkgPDwgVU1CT1hfSU5UX1NUQVRVU19SWF9ETUFfQ09NUExFVEVfTFNCKSAmIFVNQk9YX0lOVF9TVEFUVVNfUlhfRE1BX0NPTVBMRVRFX01BU0spCi0jZGVmaW5lIFVNQk9YX0lOVF9TVEFUVVNfVFhfRE1BX0VPTV9DT01QTEVURV9NU0IgNgotI2RlZmluZSBVTUJPWF9JTlRfU1RBVFVTX1RYX0RNQV9FT01fQ09NUExFVEVfTFNCIDYKLSNkZWZpbmUgVU1CT1hfSU5UX1NUQVRVU19UWF9ETUFfRU9NX0NPTVBMRVRFX01BU0sgMHgwMDAwMDA0MAotI2RlZmluZSBVTUJPWF9JTlRfU1RBVFVTX1RYX0RNQV9FT01fQ09NUExFVEVfR0VUKHgpICgoKHgpICYgVU1CT1hfSU5UX1NUQVRVU19UWF9ETUFfRU9NX0NPTVBMRVRFX01BU0spID4+IFVNQk9YX0lOVF9TVEFUVVNfVFhfRE1BX0VPTV9DT01QTEVURV9MU0IpCi0jZGVmaW5lIFVNQk9YX0lOVF9TVEFUVVNfVFhfRE1BX0VPTV9DT01QTEVURV9TRVQoeCkgKCgoeCkgPDwgVU1CT1hfSU5UX1NUQVRVU19UWF9ETUFfRU9NX0NPTVBMRVRFX0xTQikgJiBVTUJPWF9JTlRfU1RBVFVTX1RYX0RNQV9FT01fQ09NUExFVEVfTUFTSykKLSNkZWZpbmUgVU1CT1hfSU5UX1NUQVRVU19UWF9ETUFfQ09NUExFVEVfTVNCICAgICA1Ci0jZGVmaW5lIFVNQk9YX0lOVF9TVEFUVVNfVFhfRE1BX0NPTVBMRVRFX0xTQiAgICAgNQotI2RlZmluZSBVTUJPWF9JTlRfU1RBVFVTX1RYX0RNQV9DT01QTEVURV9NQVNLICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgVU1CT1hfSU5UX1NUQVRVU19UWF9ETUFfQ09NUExFVEVfR0VUKHgpICAoKCh4KSAmIFVNQk9YX0lOVF9TVEFUVVNfVFhfRE1BX0NPTVBMRVRFX01BU0spID4+IFVNQk9YX0lOVF9TVEFUVVNfVFhfRE1BX0NPTVBMRVRFX0xTQikKLSNkZWZpbmUgVU1CT1hfSU5UX1NUQVRVU19UWF9ETUFfQ09NUExFVEVfU0VUKHgpICAoKCh4KSA8PCBVTUJPWF9JTlRfU1RBVFVTX1RYX0RNQV9DT01QTEVURV9MU0IpICYgVU1CT1hfSU5UX1NUQVRVU19UWF9ETUFfQ09NUExFVEVfTUFTSykKLSNkZWZpbmUgVU1CT1hfSU5UX1NUQVRVU19IQ0lfU1lOQ19FUlJPUl9NU0IgICAgICA0Ci0jZGVmaW5lIFVNQk9YX0lOVF9TVEFUVVNfSENJX1NZTkNfRVJST1JfTFNCICAgICAgNAotI2RlZmluZSBVTUJPWF9JTlRfU1RBVFVTX0hDSV9TWU5DX0VSUk9SX01BU0sgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgVU1CT1hfSU5UX1NUQVRVU19IQ0lfU1lOQ19FUlJPUl9HRVQoeCkgICAoKCh4KSAmIFVNQk9YX0lOVF9TVEFUVVNfSENJX1NZTkNfRVJST1JfTUFTSykgPj4gVU1CT1hfSU5UX1NUQVRVU19IQ0lfU1lOQ19FUlJPUl9MU0IpCi0jZGVmaW5lIFVNQk9YX0lOVF9TVEFUVVNfSENJX1NZTkNfRVJST1JfU0VUKHgpICAgKCgoeCkgPDwgVU1CT1hfSU5UX1NUQVRVU19IQ0lfU1lOQ19FUlJPUl9MU0IpICYgVU1CT1hfSU5UX1NUQVRVU19IQ0lfU1lOQ19FUlJPUl9NQVNLKQotI2RlZmluZSBVTUJPWF9JTlRfU1RBVFVTX1RYX09WRVJGTE9XX01TQiAgICAgICAgIDMKLSNkZWZpbmUgVU1CT1hfSU5UX1NUQVRVU19UWF9PVkVSRkxPV19MU0IgICAgICAgICAzCi0jZGVmaW5lIFVNQk9YX0lOVF9TVEFUVVNfVFhfT1ZFUkZMT1dfTUFTSyAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBVTUJPWF9JTlRfU1RBVFVTX1RYX09WRVJGTE9XX0dFVCh4KSAgICAgICgoKHgpICYgVU1CT1hfSU5UX1NUQVRVU19UWF9PVkVSRkxPV19NQVNLKSA+PiBVTUJPWF9JTlRfU1RBVFVTX1RYX09WRVJGTE9XX0xTQikKLSNkZWZpbmUgVU1CT1hfSU5UX1NUQVRVU19UWF9PVkVSRkxPV19TRVQoeCkgICAgICAoKCh4KSA8PCBVTUJPWF9JTlRfU1RBVFVTX1RYX09WRVJGTE9XX0xTQikgJiBVTUJPWF9JTlRfU1RBVFVTX1RYX09WRVJGTE9XX01BU0spCi0jZGVmaW5lIFVNQk9YX0lOVF9TVEFUVVNfUlhfVU5ERVJGTE9XX01TQiAgICAgICAgMgotI2RlZmluZSBVTUJPWF9JTlRfU1RBVFVTX1JYX1VOREVSRkxPV19MU0IgICAgICAgIDIKLSNkZWZpbmUgVU1CT1hfSU5UX1NUQVRVU19SWF9VTkRFUkZMT1dfTUFTSyAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFVNQk9YX0lOVF9TVEFUVVNfUlhfVU5ERVJGTE9XX0dFVCh4KSAgICAgKCgoeCkgJiBVTUJPWF9JTlRfU1RBVFVTX1JYX1VOREVSRkxPV19NQVNLKSA+PiBVTUJPWF9JTlRfU1RBVFVTX1JYX1VOREVSRkxPV19MU0IpCi0jZGVmaW5lIFVNQk9YX0lOVF9TVEFUVVNfUlhfVU5ERVJGTE9XX1NFVCh4KSAgICAgKCgoeCkgPDwgVU1CT1hfSU5UX1NUQVRVU19SWF9VTkRFUkZMT1dfTFNCKSAmIFVNQk9YX0lOVF9TVEFUVVNfUlhfVU5ERVJGTE9XX01BU0spCi0jZGVmaW5lIFVNQk9YX0lOVF9TVEFUVVNfVFhfTk9UX0VNUFRZX01TQiAgICAgICAgMQotI2RlZmluZSBVTUJPWF9JTlRfU1RBVFVTX1RYX05PVF9FTVBUWV9MU0IgICAgICAgIDEKLSNkZWZpbmUgVU1CT1hfSU5UX1NUQVRVU19UWF9OT1RfRU1QVFlfTUFTSyAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFVNQk9YX0lOVF9TVEFUVVNfVFhfTk9UX0VNUFRZX0dFVCh4KSAgICAgKCgoeCkgJiBVTUJPWF9JTlRfU1RBVFVTX1RYX05PVF9FTVBUWV9NQVNLKSA+PiBVTUJPWF9JTlRfU1RBVFVTX1RYX05PVF9FTVBUWV9MU0IpCi0jZGVmaW5lIFVNQk9YX0lOVF9TVEFUVVNfVFhfTk9UX0VNUFRZX1NFVCh4KSAgICAgKCgoeCkgPDwgVU1CT1hfSU5UX1NUQVRVU19UWF9OT1RfRU1QVFlfTFNCKSAmIFVNQk9YX0lOVF9TVEFUVVNfVFhfTk9UX0VNUFRZX01BU0spCi0jZGVmaW5lIFVNQk9YX0lOVF9TVEFUVVNfUlhfTk9UX0ZVTExfTVNCICAgICAgICAgMAotI2RlZmluZSBVTUJPWF9JTlRfU1RBVFVTX1JYX05PVF9GVUxMX0xTQiAgICAgICAgIDAKLSNkZWZpbmUgVU1CT1hfSU5UX1NUQVRVU19SWF9OT1RfRlVMTF9NQVNLICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFVNQk9YX0lOVF9TVEFUVVNfUlhfTk9UX0ZVTExfR0VUKHgpICAgICAgKCgoeCkgJiBVTUJPWF9JTlRfU1RBVFVTX1JYX05PVF9GVUxMX01BU0spID4+IFVNQk9YX0lOVF9TVEFUVVNfUlhfTk9UX0ZVTExfTFNCKQotI2RlZmluZSBVTUJPWF9JTlRfU1RBVFVTX1JYX05PVF9GVUxMX1NFVCh4KSAgICAgICgoKHgpIDw8IFVNQk9YX0lOVF9TVEFUVVNfUlhfTk9UX0ZVTExfTFNCKSAmIFVNQk9YX0lOVF9TVEFUVVNfUlhfTk9UX0ZVTExfTUFTSykKLQotI2RlZmluZSBVTUJPWF9JTlRfRU5BQkxFX0FERFJFU1MgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjgKLSNkZWZpbmUgVU1CT1hfSU5UX0VOQUJMRV9PRkZTRVQgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4Ci0jZGVmaW5lIFVNQk9YX0lOVF9FTkFCTEVfSENJX0ZSQU1FUl9VTkRFUkZMT1dfTVNCIDkKLSNkZWZpbmUgVU1CT1hfSU5UX0VOQUJMRV9IQ0lfRlJBTUVSX1VOREVSRkxPV19MU0IgOQotI2RlZmluZSBVTUJPWF9JTlRfRU5BQkxFX0hDSV9GUkFNRVJfVU5ERVJGTE9XX01BU0sgMHgwMDAwMDIwMAotI2RlZmluZSBVTUJPWF9JTlRfRU5BQkxFX0hDSV9GUkFNRVJfVU5ERVJGTE9XX0dFVCh4KSAoKCh4KSAmIFVNQk9YX0lOVF9FTkFCTEVfSENJX0ZSQU1FUl9VTkRFUkZMT1dfTUFTSykgPj4gVU1CT1hfSU5UX0VOQUJMRV9IQ0lfRlJBTUVSX1VOREVSRkxPV19MU0IpCi0jZGVmaW5lIFVNQk9YX0lOVF9FTkFCTEVfSENJX0ZSQU1FUl9VTkRFUkZMT1dfU0VUKHgpICgoKHgpIDw8IFVNQk9YX0lOVF9FTkFCTEVfSENJX0ZSQU1FUl9VTkRFUkZMT1dfTFNCKSAmIFVNQk9YX0lOVF9FTkFCTEVfSENJX0ZSQU1FUl9VTkRFUkZMT1dfTUFTSykKLSNkZWZpbmUgVU1CT1hfSU5UX0VOQUJMRV9IQ0lfRlJBTUVSX09WRVJGTE9XX01TQiA4Ci0jZGVmaW5lIFVNQk9YX0lOVF9FTkFCTEVfSENJX0ZSQU1FUl9PVkVSRkxPV19MU0IgOAotI2RlZmluZSBVTUJPWF9JTlRfRU5BQkxFX0hDSV9GUkFNRVJfT1ZFUkZMT1dfTUFTSyAweDAwMDAwMTAwCi0jZGVmaW5lIFVNQk9YX0lOVF9FTkFCTEVfSENJX0ZSQU1FUl9PVkVSRkxPV19HRVQoeCkgKCgoeCkgJiBVTUJPWF9JTlRfRU5BQkxFX0hDSV9GUkFNRVJfT1ZFUkZMT1dfTUFTSykgPj4gVU1CT1hfSU5UX0VOQUJMRV9IQ0lfRlJBTUVSX09WRVJGTE9XX0xTQikKLSNkZWZpbmUgVU1CT1hfSU5UX0VOQUJMRV9IQ0lfRlJBTUVSX09WRVJGTE9XX1NFVCh4KSAoKCh4KSA8PCBVTUJPWF9JTlRfRU5BQkxFX0hDSV9GUkFNRVJfT1ZFUkZMT1dfTFNCKSAmIFVNQk9YX0lOVF9FTkFCTEVfSENJX0ZSQU1FUl9PVkVSRkxPV19NQVNLKQotI2RlZmluZSBVTUJPWF9JTlRfRU5BQkxFX1JYX0RNQV9DT01QTEVURV9NU0IgICAgIDcKLSNkZWZpbmUgVU1CT1hfSU5UX0VOQUJMRV9SWF9ETUFfQ09NUExFVEVfTFNCICAgICA3Ci0jZGVmaW5lIFVNQk9YX0lOVF9FTkFCTEVfUlhfRE1BX0NPTVBMRVRFX01BU0sgICAgMHgwMDAwMDA4MAotI2RlZmluZSBVTUJPWF9JTlRfRU5BQkxFX1JYX0RNQV9DT01QTEVURV9HRVQoeCkgICgoKHgpICYgVU1CT1hfSU5UX0VOQUJMRV9SWF9ETUFfQ09NUExFVEVfTUFTSykgPj4gVU1CT1hfSU5UX0VOQUJMRV9SWF9ETUFfQ09NUExFVEVfTFNCKQotI2RlZmluZSBVTUJPWF9JTlRfRU5BQkxFX1JYX0RNQV9DT01QTEVURV9TRVQoeCkgICgoKHgpIDw8IFVNQk9YX0lOVF9FTkFCTEVfUlhfRE1BX0NPTVBMRVRFX0xTQikgJiBVTUJPWF9JTlRfRU5BQkxFX1JYX0RNQV9DT01QTEVURV9NQVNLKQotI2RlZmluZSBVTUJPWF9JTlRfRU5BQkxFX1RYX0RNQV9FT01fQ09NUExFVEVfTVNCIDYKLSNkZWZpbmUgVU1CT1hfSU5UX0VOQUJMRV9UWF9ETUFfRU9NX0NPTVBMRVRFX0xTQiA2Ci0jZGVmaW5lIFVNQk9YX0lOVF9FTkFCTEVfVFhfRE1BX0VPTV9DT01QTEVURV9NQVNLIDB4MDAwMDAwNDAKLSNkZWZpbmUgVU1CT1hfSU5UX0VOQUJMRV9UWF9ETUFfRU9NX0NPTVBMRVRFX0dFVCh4KSAoKCh4KSAmIFVNQk9YX0lOVF9FTkFCTEVfVFhfRE1BX0VPTV9DT01QTEVURV9NQVNLKSA+PiBVTUJPWF9JTlRfRU5BQkxFX1RYX0RNQV9FT01fQ09NUExFVEVfTFNCKQotI2RlZmluZSBVTUJPWF9JTlRfRU5BQkxFX1RYX0RNQV9FT01fQ09NUExFVEVfU0VUKHgpICgoKHgpIDw8IFVNQk9YX0lOVF9FTkFCTEVfVFhfRE1BX0VPTV9DT01QTEVURV9MU0IpICYgVU1CT1hfSU5UX0VOQUJMRV9UWF9ETUFfRU9NX0NPTVBMRVRFX01BU0spCi0jZGVmaW5lIFVNQk9YX0lOVF9FTkFCTEVfVFhfRE1BX0NPTVBMRVRFX01TQiAgICAgNQotI2RlZmluZSBVTUJPWF9JTlRfRU5BQkxFX1RYX0RNQV9DT01QTEVURV9MU0IgICAgIDUKLSNkZWZpbmUgVU1CT1hfSU5UX0VOQUJMRV9UWF9ETUFfQ09NUExFVEVfTUFTSyAgICAweDAwMDAwMDIwCi0jZGVmaW5lIFVNQk9YX0lOVF9FTkFCTEVfVFhfRE1BX0NPTVBMRVRFX0dFVCh4KSAgKCgoeCkgJiBVTUJPWF9JTlRfRU5BQkxFX1RYX0RNQV9DT01QTEVURV9NQVNLKSA+PiBVTUJPWF9JTlRfRU5BQkxFX1RYX0RNQV9DT01QTEVURV9MU0IpCi0jZGVmaW5lIFVNQk9YX0lOVF9FTkFCTEVfVFhfRE1BX0NPTVBMRVRFX1NFVCh4KSAgKCgoeCkgPDwgVU1CT1hfSU5UX0VOQUJMRV9UWF9ETUFfQ09NUExFVEVfTFNCKSAmIFVNQk9YX0lOVF9FTkFCTEVfVFhfRE1BX0NPTVBMRVRFX01BU0spCi0jZGVmaW5lIFVNQk9YX0lOVF9FTkFCTEVfSENJX1NZTkNfRVJST1JfTVNCICAgICAgNAotI2RlZmluZSBVTUJPWF9JTlRfRU5BQkxFX0hDSV9TWU5DX0VSUk9SX0xTQiAgICAgIDQKLSNkZWZpbmUgVU1CT1hfSU5UX0VOQUJMRV9IQ0lfU1lOQ19FUlJPUl9NQVNLICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIFVNQk9YX0lOVF9FTkFCTEVfSENJX1NZTkNfRVJST1JfR0VUKHgpICAgKCgoeCkgJiBVTUJPWF9JTlRfRU5BQkxFX0hDSV9TWU5DX0VSUk9SX01BU0spID4+IFVNQk9YX0lOVF9FTkFCTEVfSENJX1NZTkNfRVJST1JfTFNCKQotI2RlZmluZSBVTUJPWF9JTlRfRU5BQkxFX0hDSV9TWU5DX0VSUk9SX1NFVCh4KSAgICgoKHgpIDw8IFVNQk9YX0lOVF9FTkFCTEVfSENJX1NZTkNfRVJST1JfTFNCKSAmIFVNQk9YX0lOVF9FTkFCTEVfSENJX1NZTkNfRVJST1JfTUFTSykKLSNkZWZpbmUgVU1CT1hfSU5UX0VOQUJMRV9UWF9PVkVSRkxPV19NU0IgICAgICAgICAzCi0jZGVmaW5lIFVNQk9YX0lOVF9FTkFCTEVfVFhfT1ZFUkZMT1dfTFNCICAgICAgICAgMwotI2RlZmluZSBVTUJPWF9JTlRfRU5BQkxFX1RYX09WRVJGTE9XX01BU0sgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgVU1CT1hfSU5UX0VOQUJMRV9UWF9PVkVSRkxPV19HRVQoeCkgICAgICAoKCh4KSAmIFVNQk9YX0lOVF9FTkFCTEVfVFhfT1ZFUkZMT1dfTUFTSykgPj4gVU1CT1hfSU5UX0VOQUJMRV9UWF9PVkVSRkxPV19MU0IpCi0jZGVmaW5lIFVNQk9YX0lOVF9FTkFCTEVfVFhfT1ZFUkZMT1dfU0VUKHgpICAgICAgKCgoeCkgPDwgVU1CT1hfSU5UX0VOQUJMRV9UWF9PVkVSRkxPV19MU0IpICYgVU1CT1hfSU5UX0VOQUJMRV9UWF9PVkVSRkxPV19NQVNLKQotI2RlZmluZSBVTUJPWF9JTlRfRU5BQkxFX1JYX1VOREVSRkxPV19NU0IgICAgICAgIDIKLSNkZWZpbmUgVU1CT1hfSU5UX0VOQUJMRV9SWF9VTkRFUkZMT1dfTFNCICAgICAgICAyCi0jZGVmaW5lIFVNQk9YX0lOVF9FTkFCTEVfUlhfVU5ERVJGTE9XX01BU0sgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBVTUJPWF9JTlRfRU5BQkxFX1JYX1VOREVSRkxPV19HRVQoeCkgICAgICgoKHgpICYgVU1CT1hfSU5UX0VOQUJMRV9SWF9VTkRFUkZMT1dfTUFTSykgPj4gVU1CT1hfSU5UX0VOQUJMRV9SWF9VTkRFUkZMT1dfTFNCKQotI2RlZmluZSBVTUJPWF9JTlRfRU5BQkxFX1JYX1VOREVSRkxPV19TRVQoeCkgICAgICgoKHgpIDw8IFVNQk9YX0lOVF9FTkFCTEVfUlhfVU5ERVJGTE9XX0xTQikgJiBVTUJPWF9JTlRfRU5BQkxFX1JYX1VOREVSRkxPV19NQVNLKQotI2RlZmluZSBVTUJPWF9JTlRfRU5BQkxFX1RYX05PVF9FTVBUWV9NU0IgICAgICAgIDEKLSNkZWZpbmUgVU1CT1hfSU5UX0VOQUJMRV9UWF9OT1RfRU1QVFlfTFNCICAgICAgICAxCi0jZGVmaW5lIFVNQk9YX0lOVF9FTkFCTEVfVFhfTk9UX0VNUFRZX01BU0sgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBVTUJPWF9JTlRfRU5BQkxFX1RYX05PVF9FTVBUWV9HRVQoeCkgICAgICgoKHgpICYgVU1CT1hfSU5UX0VOQUJMRV9UWF9OT1RfRU1QVFlfTUFTSykgPj4gVU1CT1hfSU5UX0VOQUJMRV9UWF9OT1RfRU1QVFlfTFNCKQotI2RlZmluZSBVTUJPWF9JTlRfRU5BQkxFX1RYX05PVF9FTVBUWV9TRVQoeCkgICAgICgoKHgpIDw8IFVNQk9YX0lOVF9FTkFCTEVfVFhfTk9UX0VNUFRZX0xTQikgJiBVTUJPWF9JTlRfRU5BQkxFX1RYX05PVF9FTVBUWV9NQVNLKQotI2RlZmluZSBVTUJPWF9JTlRfRU5BQkxFX1JYX05PVF9GVUxMX01TQiAgICAgICAgIDAKLSNkZWZpbmUgVU1CT1hfSU5UX0VOQUJMRV9SWF9OT1RfRlVMTF9MU0IgICAgICAgICAwCi0jZGVmaW5lIFVNQk9YX0lOVF9FTkFCTEVfUlhfTk9UX0ZVTExfTUFTSyAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBVTUJPWF9JTlRfRU5BQkxFX1JYX05PVF9GVUxMX0dFVCh4KSAgICAgICgoKHgpICYgVU1CT1hfSU5UX0VOQUJMRV9SWF9OT1RfRlVMTF9NQVNLKSA+PiBVTUJPWF9JTlRfRU5BQkxFX1JYX05PVF9GVUxMX0xTQikKLSNkZWZpbmUgVU1CT1hfSU5UX0VOQUJMRV9SWF9OT1RfRlVMTF9TRVQoeCkgICAgICAoKCh4KSA8PCBVTUJPWF9JTlRfRU5BQkxFX1JYX05PVF9GVUxMX0xTQikgJiBVTUJPWF9JTlRfRU5BQkxFX1JYX05PVF9GVUxMX01BU0spCi0KLSNkZWZpbmUgVU1CT1hfREVCVUdfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDJjCi0jZGVmaW5lIFVNQk9YX0RFQlVHX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyYwotI2RlZmluZSBVTUJPWF9ERUJVR19TRUxfTVNCICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgVU1CT1hfREVCVUdfU0VMX0xTQiAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFVNQk9YX0RFQlVHX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNwotI2RlZmluZSBVTUJPWF9ERUJVR19TRUxfR0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgVU1CT1hfREVCVUdfU0VMX01BU0spID4+IFVNQk9YX0RFQlVHX1NFTF9MU0IpCi0jZGVmaW5lIFVNQk9YX0RFQlVHX1NFTF9TRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPDwgVU1CT1hfREVCVUdfU0VMX0xTQikgJiBVTUJPWF9ERUJVR19TRUxfTUFTSykKLQotI2RlZmluZSBVTUJPWF9GSUZPX1JFU0VUX0FERFJFU1MgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKLSNkZWZpbmUgVU1CT1hfRklGT19SRVNFVF9PRkZTRVQgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCi0jZGVmaW5lIFVNQk9YX0ZJRk9fUkVTRVRfSU5JVF9NU0IgICAgICAgICAgICAgICAgMAotI2RlZmluZSBVTUJPWF9GSUZPX1JFU0VUX0lOSVRfTFNCICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgVU1CT1hfRklGT19SRVNFVF9JTklUX01BU0sgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFVNQk9YX0ZJRk9fUkVTRVRfSU5JVF9HRVQoeCkgICAgICAgICAgICAgKCgoeCkgJiBVTUJPWF9GSUZPX1JFU0VUX0lOSVRfTUFTSykgPj4gVU1CT1hfRklGT19SRVNFVF9JTklUX0xTQikKLSNkZWZpbmUgVU1CT1hfRklGT19SRVNFVF9JTklUX1NFVCh4KSAgICAgICAgICAgICAoKCh4KSA8PCBVTUJPWF9GSUZPX1JFU0VUX0lOSVRfTFNCKSAmIFVNQk9YX0ZJRk9fUkVTRVRfSU5JVF9NQVNLKQotCi0jZGVmaW5lIFVNQk9YX0hDSV9GUkFNRVJfQUREUkVTUyAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAotI2RlZmluZSBVTUJPWF9IQ0lfRlJBTUVSX09GRlNFVCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKLSNkZWZpbmUgVU1CT1hfSENJX0ZSQU1FUl9DUkNfT1ZFUlJJREVfTVNCICAgICAgICA2Ci0jZGVmaW5lIFVNQk9YX0hDSV9GUkFNRVJfQ1JDX09WRVJSSURFX0xTQiAgICAgICAgNgotI2RlZmluZSBVTUJPWF9IQ0lfRlJBTUVSX0NSQ19PVkVSUklERV9NQVNLICAgICAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgVU1CT1hfSENJX0ZSQU1FUl9DUkNfT1ZFUlJJREVfR0VUKHgpICAgICAoKCh4KSAmIFVNQk9YX0hDSV9GUkFNRVJfQ1JDX09WRVJSSURFX01BU0spID4+IFVNQk9YX0hDSV9GUkFNRVJfQ1JDX09WRVJSSURFX0xTQikKLSNkZWZpbmUgVU1CT1hfSENJX0ZSQU1FUl9DUkNfT1ZFUlJJREVfU0VUKHgpICAgICAoKCh4KSA8PCBVTUJPWF9IQ0lfRlJBTUVSX0NSQ19PVkVSUklERV9MU0IpICYgVU1CT1hfSENJX0ZSQU1FUl9DUkNfT1ZFUlJJREVfTUFTSykKLSNkZWZpbmUgVU1CT1hfSENJX0ZSQU1FUl9FTkFCTEVfTVNCICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFVNQk9YX0hDSV9GUkFNRVJfRU5BQkxFX0xTQiAgICAgICAgICAgICAgNQotI2RlZmluZSBVTUJPWF9IQ0lfRlJBTUVSX0VOQUJMRV9NQVNLICAgICAgICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgVU1CT1hfSENJX0ZSQU1FUl9FTkFCTEVfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIFVNQk9YX0hDSV9GUkFNRVJfRU5BQkxFX01BU0spID4+IFVNQk9YX0hDSV9GUkFNRVJfRU5BQkxFX0xTQikKLSNkZWZpbmUgVU1CT1hfSENJX0ZSQU1FUl9FTkFCTEVfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCBVTUJPWF9IQ0lfRlJBTUVSX0VOQUJMRV9MU0IpICYgVU1CT1hfSENJX0ZSQU1FUl9FTkFCTEVfTUFTSykKLSNkZWZpbmUgVU1CT1hfSENJX0ZSQU1FUl9TWU5DX0VSUk9SX01TQiAgICAgICAgICA0Ci0jZGVmaW5lIFVNQk9YX0hDSV9GUkFNRVJfU1lOQ19FUlJPUl9MU0IgICAgICAgICAgNAotI2RlZmluZSBVTUJPWF9IQ0lfRlJBTUVSX1NZTkNfRVJST1JfTUFTSyAgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgVU1CT1hfSENJX0ZSQU1FUl9TWU5DX0VSUk9SX0dFVCh4KSAgICAgICAoKCh4KSAmIFVNQk9YX0hDSV9GUkFNRVJfU1lOQ19FUlJPUl9NQVNLKSA+PiBVTUJPWF9IQ0lfRlJBTUVSX1NZTkNfRVJST1JfTFNCKQotI2RlZmluZSBVTUJPWF9IQ0lfRlJBTUVSX1NZTkNfRVJST1JfU0VUKHgpICAgICAgICgoKHgpIDw8IFVNQk9YX0hDSV9GUkFNRVJfU1lOQ19FUlJPUl9MU0IpICYgVU1CT1hfSENJX0ZSQU1FUl9TWU5DX0VSUk9SX01BU0spCi0jZGVmaW5lIFVNQk9YX0hDSV9GUkFNRVJfVU5ERVJGTE9XX01TQiAgICAgICAgICAgMwotI2RlZmluZSBVTUJPWF9IQ0lfRlJBTUVSX1VOREVSRkxPV19MU0IgICAgICAgICAgIDMKLSNkZWZpbmUgVU1CT1hfSENJX0ZSQU1FUl9VTkRFUkZMT1dfTUFTSyAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIFVNQk9YX0hDSV9GUkFNRVJfVU5ERVJGTE9XX0dFVCh4KSAgICAgICAgKCgoeCkgJiBVTUJPWF9IQ0lfRlJBTUVSX1VOREVSRkxPV19NQVNLKSA+PiBVTUJPWF9IQ0lfRlJBTUVSX1VOREVSRkxPV19MU0IpCi0jZGVmaW5lIFVNQk9YX0hDSV9GUkFNRVJfVU5ERVJGTE9XX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgVU1CT1hfSENJX0ZSQU1FUl9VTkRFUkZMT1dfTFNCKSAmIFVNQk9YX0hDSV9GUkFNRVJfVU5ERVJGTE9XX01BU0spCi0jZGVmaW5lIFVNQk9YX0hDSV9GUkFNRVJfT1ZFUkZMT1dfTVNCICAgICAgICAgICAgMgotI2RlZmluZSBVTUJPWF9IQ0lfRlJBTUVSX09WRVJGTE9XX0xTQiAgICAgICAgICAgIDIKLSNkZWZpbmUgVU1CT1hfSENJX0ZSQU1FUl9PVkVSRkxPV19NQVNLICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFVNQk9YX0hDSV9GUkFNRVJfT1ZFUkZMT1dfR0VUKHgpICAgICAgICAgKCgoeCkgJiBVTUJPWF9IQ0lfRlJBTUVSX09WRVJGTE9XX01BU0spID4+IFVNQk9YX0hDSV9GUkFNRVJfT1ZFUkZMT1dfTFNCKQotI2RlZmluZSBVTUJPWF9IQ0lfRlJBTUVSX09WRVJGTE9XX1NFVCh4KSAgICAgICAgICgoKHgpIDw8IFVNQk9YX0hDSV9GUkFNRVJfT1ZFUkZMT1dfTFNCKSAmIFVNQk9YX0hDSV9GUkFNRVJfT1ZFUkZMT1dfTUFTSykKLSNkZWZpbmUgVU1CT1hfSENJX0ZSQU1FUl9DT05GSUdfTU9ERV9NU0IgICAgICAgICAxCi0jZGVmaW5lIFVNQk9YX0hDSV9GUkFNRVJfQ09ORklHX01PREVfTFNCICAgICAgICAgMAotI2RlZmluZSBVTUJPWF9IQ0lfRlJBTUVSX0NPTkZJR19NT0RFX01BU0sgICAgICAgIDB4MDAwMDAwMDMKLSNkZWZpbmUgVU1CT1hfSENJX0ZSQU1FUl9DT05GSUdfTU9ERV9HRVQoeCkgICAgICAoKCh4KSAmIFVNQk9YX0hDSV9GUkFNRVJfQ09ORklHX01PREVfTUFTSykgPj4gVU1CT1hfSENJX0ZSQU1FUl9DT05GSUdfTU9ERV9MU0IpCi0jZGVmaW5lIFVNQk9YX0hDSV9GUkFNRVJfQ09ORklHX01PREVfU0VUKHgpICAgICAgKCgoeCkgPDwgVU1CT1hfSENJX0ZSQU1FUl9DT05GSUdfTU9ERV9MU0IpICYgVU1CT1hfSENJX0ZSQU1FUl9DT05GSUdfTU9ERV9NQVNLKQotCi0KLSNpZm5kZWYgX19BU1NFTUJMRVJfXwotCi10eXBlZGVmIHN0cnVjdCB1bWJveF93bGFuX3JlZ19yZWdfcyB7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB1bWJveF9maWZvWzJdOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdW1ib3hfZmlmb19zdGF0dXM7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB1bWJveF9kbWFfcG9saWN5OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdW1ib3gwX2RtYV9yeF9kZXNjcmlwdG9yX2Jhc2U7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB1bWJveDBfZG1hX3J4X2NvbnRyb2w7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB1bWJveDBfZG1hX3R4X2Rlc2NyaXB0b3JfYmFzZTsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHVtYm94MF9kbWFfdHhfY29udHJvbDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHVtYm94X2ZpZm9fdGltZW91dDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHVtYm94X2ludF9zdGF0dXM7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB1bWJveF9pbnRfZW5hYmxlOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdW1ib3hfZGVidWc7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB1bWJveF9maWZvX3Jlc2V0OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdW1ib3hfaGNpX2ZyYW1lcjsKLX0gdW1ib3hfd2xhbl9yZWdfcmVnX3Q7Ci0KLSNlbmRpZiAvKiBfX0FTU0VNQkxFUl9fICovCi0KLSNlbmRpZiAvKiBfVU1CT1hfV0xBTl9SRUdfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3NC4wL2h3L3ZtY19yZWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3NC4wL2h3L3ZtY19yZWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNkODA4OC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL0FSNjAwMi9odzQuMC9ody92bWNfcmVnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjcgKzAsMCBAQAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDQtMjAxMCBBdGhlcm9zIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIAotLy8KLS8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotLy8gcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLS8vCi0vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLS8vIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLS8vIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0vLyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0vLyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLS8vIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0vLyBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotLy8KLS8vCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gQXV0aG9yKHMpOiA9IkF0aGVyb3MiCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCi0jaWZkZWYgV0xBTl9IRUFERVJTCi0KLSNpbmNsdWRlICJ2bWNfd2xhbl9yZWcuaCIKLQotCi0jaWZuZGVmIEJUX0hFQURFUlMKLQotI2RlZmluZSBNQ19CQ0FNX1ZBTElEX0FERFJFU1MgV0xBTl9NQ19CQ0FNX1ZBTElEX0FERFJFU1MKLSNkZWZpbmUgTUNfQkNBTV9WQUxJRF9PRkZTRVQgV0xBTl9NQ19CQ0FNX1ZBTElEX09GRlNFVAotI2RlZmluZSBNQ19CQ0FNX1ZBTElEX0JJVF9NU0IgV0xBTl9NQ19CQ0FNX1ZBTElEX0JJVF9NU0IKLSNkZWZpbmUgTUNfQkNBTV9WQUxJRF9CSVRfTFNCIFdMQU5fTUNfQkNBTV9WQUxJRF9CSVRfTFNCCi0jZGVmaW5lIE1DX0JDQU1fVkFMSURfQklUX01BU0sgV0xBTl9NQ19CQ0FNX1ZBTElEX0JJVF9NQVNLCi0jZGVmaW5lIE1DX0JDQU1fVkFMSURfQklUX0dFVCh4KSBXTEFOX01DX0JDQU1fVkFMSURfQklUX0dFVCh4KQotI2RlZmluZSBNQ19CQ0FNX1ZBTElEX0JJVF9TRVQoeCkgV0xBTl9NQ19CQ0FNX1ZBTElEX0JJVF9TRVQoeCkKLSNkZWZpbmUgTUNfQkNBTV9DT01QQVJFX0FERFJFU1MgV0xBTl9NQ19CQ0FNX0NPTVBBUkVfQUREUkVTUwotI2RlZmluZSBNQ19CQ0FNX0NPTVBBUkVfT0ZGU0VUIFdMQU5fTUNfQkNBTV9DT01QQVJFX09GRlNFVAotI2RlZmluZSBNQ19CQ0FNX0NPTVBBUkVfS0VZX01TQiBXTEFOX01DX0JDQU1fQ09NUEFSRV9LRVlfTVNCCi0jZGVmaW5lIE1DX0JDQU1fQ09NUEFSRV9LRVlfTFNCIFdMQU5fTUNfQkNBTV9DT01QQVJFX0tFWV9MU0IKLSNkZWZpbmUgTUNfQkNBTV9DT01QQVJFX0tFWV9NQVNLIFdMQU5fTUNfQkNBTV9DT01QQVJFX0tFWV9NQVNLCi0jZGVmaW5lIE1DX0JDQU1fQ09NUEFSRV9LRVlfR0VUKHgpIFdMQU5fTUNfQkNBTV9DT01QQVJFX0tFWV9HRVQoeCkKLSNkZWZpbmUgTUNfQkNBTV9DT01QQVJFX0tFWV9TRVQoeCkgV0xBTl9NQ19CQ0FNX0NPTVBBUkVfS0VZX1NFVCh4KQotI2RlZmluZSBNQ19CQ0FNX1RBUkdFVF9BRERSRVNTIFdMQU5fTUNfQkNBTV9UQVJHRVRfQUREUkVTUwotI2RlZmluZSBNQ19CQ0FNX1RBUkdFVF9PRkZTRVQgV0xBTl9NQ19CQ0FNX1RBUkdFVF9PRkZTRVQKLSNkZWZpbmUgTUNfQkNBTV9UQVJHRVRfSU5TVF9NU0IgV0xBTl9NQ19CQ0FNX1RBUkdFVF9JTlNUX01TQgotI2RlZmluZSBNQ19CQ0FNX1RBUkdFVF9JTlNUX0xTQiBXTEFOX01DX0JDQU1fVEFSR0VUX0lOU1RfTFNCCi0jZGVmaW5lIE1DX0JDQU1fVEFSR0VUX0lOU1RfTUFTSyBXTEFOX01DX0JDQU1fVEFSR0VUX0lOU1RfTUFTSwotI2RlZmluZSBNQ19CQ0FNX1RBUkdFVF9JTlNUX0dFVCh4KSBXTEFOX01DX0JDQU1fVEFSR0VUX0lOU1RfR0VUKHgpCi0jZGVmaW5lIE1DX0JDQU1fVEFSR0VUX0lOU1RfU0VUKHgpIFdMQU5fTUNfQkNBTV9UQVJHRVRfSU5TVF9TRVQoeCkKLSNkZWZpbmUgQVBCX0FERFJfRVJST1JfQ09OVFJPTF9BRERSRVNTIFdMQU5fQVBCX0FERFJfRVJST1JfQ09OVFJPTF9BRERSRVNTCi0jZGVmaW5lIEFQQl9BRERSX0VSUk9SX0NPTlRST0xfT0ZGU0VUIFdMQU5fQVBCX0FERFJfRVJST1JfQ09OVFJPTF9PRkZTRVQKLSNkZWZpbmUgQVBCX0FERFJfRVJST1JfQ09OVFJPTF9RVUFMX0VOQUJMRV9NU0IgV0xBTl9BUEJfQUREUl9FUlJPUl9DT05UUk9MX1FVQUxfRU5BQkxFX01TQgotI2RlZmluZSBBUEJfQUREUl9FUlJPUl9DT05UUk9MX1FVQUxfRU5BQkxFX0xTQiBXTEFOX0FQQl9BRERSX0VSUk9SX0NPTlRST0xfUVVBTF9FTkFCTEVfTFNCCi0jZGVmaW5lIEFQQl9BRERSX0VSUk9SX0NPTlRST0xfUVVBTF9FTkFCTEVfTUFTSyBXTEFOX0FQQl9BRERSX0VSUk9SX0NPTlRST0xfUVVBTF9FTkFCTEVfTUFTSwotI2RlZmluZSBBUEJfQUREUl9FUlJPUl9DT05UUk9MX1FVQUxfRU5BQkxFX0dFVCh4KSBXTEFOX0FQQl9BRERSX0VSUk9SX0NPTlRST0xfUVVBTF9FTkFCTEVfR0VUKHgpCi0jZGVmaW5lIEFQQl9BRERSX0VSUk9SX0NPTlRST0xfUVVBTF9FTkFCTEVfU0VUKHgpIFdMQU5fQVBCX0FERFJfRVJST1JfQ09OVFJPTF9RVUFMX0VOQUJMRV9TRVQoeCkKLSNkZWZpbmUgQVBCX0FERFJfRVJST1JfQ09OVFJPTF9FTkFCTEVfTVNCIFdMQU5fQVBCX0FERFJfRVJST1JfQ09OVFJPTF9FTkFCTEVfTVNCCi0jZGVmaW5lIEFQQl9BRERSX0VSUk9SX0NPTlRST0xfRU5BQkxFX0xTQiBXTEFOX0FQQl9BRERSX0VSUk9SX0NPTlRST0xfRU5BQkxFX0xTQgotI2RlZmluZSBBUEJfQUREUl9FUlJPUl9DT05UUk9MX0VOQUJMRV9NQVNLIFdMQU5fQVBCX0FERFJfRVJST1JfQ09OVFJPTF9FTkFCTEVfTUFTSwotI2RlZmluZSBBUEJfQUREUl9FUlJPUl9DT05UUk9MX0VOQUJMRV9HRVQoeCkgV0xBTl9BUEJfQUREUl9FUlJPUl9DT05UUk9MX0VOQUJMRV9HRVQoeCkKLSNkZWZpbmUgQVBCX0FERFJfRVJST1JfQ09OVFJPTF9FTkFCTEVfU0VUKHgpIFdMQU5fQVBCX0FERFJfRVJST1JfQ09OVFJPTF9FTkFCTEVfU0VUKHgpCi0jZGVmaW5lIEFQQl9BRERSX0VSUk9SX1NUQVRVU19BRERSRVNTIFdMQU5fQVBCX0FERFJfRVJST1JfU1RBVFVTX0FERFJFU1MKLSNkZWZpbmUgQVBCX0FERFJfRVJST1JfU1RBVFVTX09GRlNFVCBXTEFOX0FQQl9BRERSX0VSUk9SX1NUQVRVU19PRkZTRVQKLSNkZWZpbmUgQVBCX0FERFJfRVJST1JfU1RBVFVTX1dSSVRFX01TQiBXTEFOX0FQQl9BRERSX0VSUk9SX1NUQVRVU19XUklURV9NU0IKLSNkZWZpbmUgQVBCX0FERFJfRVJST1JfU1RBVFVTX1dSSVRFX0xTQiBXTEFOX0FQQl9BRERSX0VSUk9SX1NUQVRVU19XUklURV9MU0IKLSNkZWZpbmUgQVBCX0FERFJfRVJST1JfU1RBVFVTX1dSSVRFX01BU0sgV0xBTl9BUEJfQUREUl9FUlJPUl9TVEFUVVNfV1JJVEVfTUFTSwotI2RlZmluZSBBUEJfQUREUl9FUlJPUl9TVEFUVVNfV1JJVEVfR0VUKHgpIFdMQU5fQVBCX0FERFJfRVJST1JfU1RBVFVTX1dSSVRFX0dFVCh4KQotI2RlZmluZSBBUEJfQUREUl9FUlJPUl9TVEFUVVNfV1JJVEVfU0VUKHgpIFdMQU5fQVBCX0FERFJfRVJST1JfU1RBVFVTX1dSSVRFX1NFVCh4KQotI2RlZmluZSBBUEJfQUREUl9FUlJPUl9TVEFUVVNfQUREUkVTU19NU0IgV0xBTl9BUEJfQUREUl9FUlJPUl9TVEFUVVNfQUREUkVTU19NU0IKLSNkZWZpbmUgQVBCX0FERFJfRVJST1JfU1RBVFVTX0FERFJFU1NfTFNCIFdMQU5fQVBCX0FERFJfRVJST1JfU1RBVFVTX0FERFJFU1NfTFNCCi0jZGVmaW5lIEFQQl9BRERSX0VSUk9SX1NUQVRVU19BRERSRVNTX01BU0sgV0xBTl9BUEJfQUREUl9FUlJPUl9TVEFUVVNfQUREUkVTU19NQVNLCi0jZGVmaW5lIEFQQl9BRERSX0VSUk9SX1NUQVRVU19BRERSRVNTX0dFVCh4KSBXTEFOX0FQQl9BRERSX0VSUk9SX1NUQVRVU19BRERSRVNTX0dFVCh4KQotI2RlZmluZSBBUEJfQUREUl9FUlJPUl9TVEFUVVNfQUREUkVTU19TRVQoeCkgV0xBTl9BUEJfQUREUl9FUlJPUl9TVEFUVVNfQUREUkVTU19TRVQoeCkKLSNkZWZpbmUgQUhCX0FERFJfRVJST1JfQ09OVFJPTF9BRERSRVNTIFdMQU5fQUhCX0FERFJfRVJST1JfQ09OVFJPTF9BRERSRVNTCi0jZGVmaW5lIEFIQl9BRERSX0VSUk9SX0NPTlRST0xfT0ZGU0VUIFdMQU5fQUhCX0FERFJfRVJST1JfQ09OVFJPTF9PRkZTRVQKLSNkZWZpbmUgQUhCX0FERFJfRVJST1JfQ09OVFJPTF9FTkFCTEVfTVNCIFdMQU5fQUhCX0FERFJfRVJST1JfQ09OVFJPTF9FTkFCTEVfTVNCCi0jZGVmaW5lIEFIQl9BRERSX0VSUk9SX0NPTlRST0xfRU5BQkxFX0xTQiBXTEFOX0FIQl9BRERSX0VSUk9SX0NPTlRST0xfRU5BQkxFX0xTQgotI2RlZmluZSBBSEJfQUREUl9FUlJPUl9DT05UUk9MX0VOQUJMRV9NQVNLIFdMQU5fQUhCX0FERFJfRVJST1JfQ09OVFJPTF9FTkFCTEVfTUFTSwotI2RlZmluZSBBSEJfQUREUl9FUlJPUl9DT05UUk9MX0VOQUJMRV9HRVQoeCkgV0xBTl9BSEJfQUREUl9FUlJPUl9DT05UUk9MX0VOQUJMRV9HRVQoeCkKLSNkZWZpbmUgQUhCX0FERFJfRVJST1JfQ09OVFJPTF9FTkFCTEVfU0VUKHgpIFdMQU5fQUhCX0FERFJfRVJST1JfQ09OVFJPTF9FTkFCTEVfU0VUKHgpCi0jZGVmaW5lIEFIQl9BRERSX0VSUk9SX1NUQVRVU19BRERSRVNTIFdMQU5fQUhCX0FERFJfRVJST1JfU1RBVFVTX0FERFJFU1MKLSNkZWZpbmUgQUhCX0FERFJfRVJST1JfU1RBVFVTX09GRlNFVCBXTEFOX0FIQl9BRERSX0VSUk9SX1NUQVRVU19PRkZTRVQKLSNkZWZpbmUgQUhCX0FERFJfRVJST1JfU1RBVFVTX01BQ19NU0IgV0xBTl9BSEJfQUREUl9FUlJPUl9TVEFUVVNfTUFDX01TQgotI2RlZmluZSBBSEJfQUREUl9FUlJPUl9TVEFUVVNfTUFDX0xTQiBXTEFOX0FIQl9BRERSX0VSUk9SX1NUQVRVU19NQUNfTFNCCi0jZGVmaW5lIEFIQl9BRERSX0VSUk9SX1NUQVRVU19NQUNfTUFTSyBXTEFOX0FIQl9BRERSX0VSUk9SX1NUQVRVU19NQUNfTUFTSwotI2RlZmluZSBBSEJfQUREUl9FUlJPUl9TVEFUVVNfTUFDX0dFVCh4KSBXTEFOX0FIQl9BRERSX0VSUk9SX1NUQVRVU19NQUNfR0VUKHgpCi0jZGVmaW5lIEFIQl9BRERSX0VSUk9SX1NUQVRVU19NQUNfU0VUKHgpIFdMQU5fQUhCX0FERFJfRVJST1JfU1RBVFVTX01BQ19TRVQoeCkKLSNkZWZpbmUgQUhCX0FERFJfRVJST1JfU1RBVFVTX01CT1hfTVNCIFdMQU5fQUhCX0FERFJfRVJST1JfU1RBVFVTX01CT1hfTVNCCi0jZGVmaW5lIEFIQl9BRERSX0VSUk9SX1NUQVRVU19NQk9YX0xTQiBXTEFOX0FIQl9BRERSX0VSUk9SX1NUQVRVU19NQk9YX0xTQgotI2RlZmluZSBBSEJfQUREUl9FUlJPUl9TVEFUVVNfTUJPWF9NQVNLIFdMQU5fQUhCX0FERFJfRVJST1JfU1RBVFVTX01CT1hfTUFTSwotI2RlZmluZSBBSEJfQUREUl9FUlJPUl9TVEFUVVNfTUJPWF9HRVQoeCkgV0xBTl9BSEJfQUREUl9FUlJPUl9TVEFUVVNfTUJPWF9HRVQoeCkKLSNkZWZpbmUgQUhCX0FERFJfRVJST1JfU1RBVFVTX01CT1hfU0VUKHgpIFdMQU5fQUhCX0FERFJfRVJST1JfU1RBVFVTX01CT1hfU0VUKHgpCi0jZGVmaW5lIEFIQl9BRERSX0VSUk9SX1NUQVRVU19BRERSRVNTX01TQiBXTEFOX0FIQl9BRERSX0VSUk9SX1NUQVRVU19BRERSRVNTX01TQgotI2RlZmluZSBBSEJfQUREUl9FUlJPUl9TVEFUVVNfQUREUkVTU19MU0IgV0xBTl9BSEJfQUREUl9FUlJPUl9TVEFUVVNfQUREUkVTU19MU0IKLSNkZWZpbmUgQUhCX0FERFJfRVJST1JfU1RBVFVTX0FERFJFU1NfTUFTSyBXTEFOX0FIQl9BRERSX0VSUk9SX1NUQVRVU19BRERSRVNTX01BU0sKLSNkZWZpbmUgQUhCX0FERFJfRVJST1JfU1RBVFVTX0FERFJFU1NfR0VUKHgpIFdMQU5fQUhCX0FERFJfRVJST1JfU1RBVFVTX0FERFJFU1NfR0VUKHgpCi0jZGVmaW5lIEFIQl9BRERSX0VSUk9SX1NUQVRVU19BRERSRVNTX1NFVCh4KSBXTEFOX0FIQl9BRERSX0VSUk9SX1NUQVRVU19BRERSRVNTX1NFVCh4KQotI2RlZmluZSBCQ0FNX0NPTkZMSUNUX0VSUk9SX0FERFJFU1MgV0xBTl9CQ0FNX0NPTkZMSUNUX0VSUk9SX0FERFJFU1MKLSNkZWZpbmUgQkNBTV9DT05GTElDVF9FUlJPUl9PRkZTRVQgV0xBTl9CQ0FNX0NPTkZMSUNUX0VSUk9SX09GRlNFVAotI2RlZmluZSBCQ0FNX0NPTkZMSUNUX0VSUk9SX0lQT1JUX0ZMQUdfTVNCIFdMQU5fQkNBTV9DT05GTElDVF9FUlJPUl9JUE9SVF9GTEFHX01TQgotI2RlZmluZSBCQ0FNX0NPTkZMSUNUX0VSUk9SX0lQT1JUX0ZMQUdfTFNCIFdMQU5fQkNBTV9DT05GTElDVF9FUlJPUl9JUE9SVF9GTEFHX0xTQgotI2RlZmluZSBCQ0FNX0NPTkZMSUNUX0VSUk9SX0lQT1JUX0ZMQUdfTUFTSyBXTEFOX0JDQU1fQ09ORkxJQ1RfRVJST1JfSVBPUlRfRkxBR19NQVNLCi0jZGVmaW5lIEJDQU1fQ09ORkxJQ1RfRVJST1JfSVBPUlRfRkxBR19HRVQoeCkgV0xBTl9CQ0FNX0NPTkZMSUNUX0VSUk9SX0lQT1JUX0ZMQUdfR0VUKHgpCi0jZGVmaW5lIEJDQU1fQ09ORkxJQ1RfRVJST1JfSVBPUlRfRkxBR19TRVQoeCkgV0xBTl9CQ0FNX0NPTkZMSUNUX0VSUk9SX0lQT1JUX0ZMQUdfU0VUKHgpCi0jZGVmaW5lIEJDQU1fQ09ORkxJQ1RfRVJST1JfRFBPUlRfRkxBR19NU0IgV0xBTl9CQ0FNX0NPTkZMSUNUX0VSUk9SX0RQT1JUX0ZMQUdfTVNCCi0jZGVmaW5lIEJDQU1fQ09ORkxJQ1RfRVJST1JfRFBPUlRfRkxBR19MU0IgV0xBTl9CQ0FNX0NPTkZMSUNUX0VSUk9SX0RQT1JUX0ZMQUdfTFNCCi0jZGVmaW5lIEJDQU1fQ09ORkxJQ1RfRVJST1JfRFBPUlRfRkxBR19NQVNLIFdMQU5fQkNBTV9DT05GTElDVF9FUlJPUl9EUE9SVF9GTEFHX01BU0sKLSNkZWZpbmUgQkNBTV9DT05GTElDVF9FUlJPUl9EUE9SVF9GTEFHX0dFVCh4KSBXTEFOX0JDQU1fQ09ORkxJQ1RfRVJST1JfRFBPUlRfRkxBR19HRVQoeCkKLSNkZWZpbmUgQkNBTV9DT05GTElDVF9FUlJPUl9EUE9SVF9GTEFHX1NFVCh4KSBXTEFOX0JDQU1fQ09ORkxJQ1RfRVJST1JfRFBPUlRfRkxBR19TRVQoeCkKLSNkZWZpbmUgQ1BVX1BFUkZfQ05UX0FERFJFU1MgV0xBTl9DUFVfUEVSRl9DTlRfQUREUkVTUwotI2RlZmluZSBDUFVfUEVSRl9DTlRfT0ZGU0VUIFdMQU5fQ1BVX1BFUkZfQ05UX09GRlNFVAotI2RlZmluZSBDUFVfUEVSRl9DTlRfRU5fTVNCIFdMQU5fQ1BVX1BFUkZfQ05UX0VOX01TQgotI2RlZmluZSBDUFVfUEVSRl9DTlRfRU5fTFNCIFdMQU5fQ1BVX1BFUkZfQ05UX0VOX0xTQgotI2RlZmluZSBDUFVfUEVSRl9DTlRfRU5fTUFTSyBXTEFOX0NQVV9QRVJGX0NOVF9FTl9NQVNLCi0jZGVmaW5lIENQVV9QRVJGX0NOVF9FTl9HRVQoeCkgV0xBTl9DUFVfUEVSRl9DTlRfRU5fR0VUKHgpCi0jZGVmaW5lIENQVV9QRVJGX0NOVF9FTl9TRVQoeCkgV0xBTl9DUFVfUEVSRl9DTlRfRU5fU0VUKHgpCi0jZGVmaW5lIENQVV9JTlNUX0ZFVENIX0FERFJFU1MgV0xBTl9DUFVfSU5TVF9GRVRDSF9BRERSRVNTCi0jZGVmaW5lIENQVV9JTlNUX0ZFVENIX09GRlNFVCBXTEFOX0NQVV9JTlNUX0ZFVENIX09GRlNFVAotI2RlZmluZSBDUFVfSU5TVF9GRVRDSF9DTlRfTVNCIFdMQU5fQ1BVX0lOU1RfRkVUQ0hfQ05UX01TQgotI2RlZmluZSBDUFVfSU5TVF9GRVRDSF9DTlRfTFNCIFdMQU5fQ1BVX0lOU1RfRkVUQ0hfQ05UX0xTQgotI2RlZmluZSBDUFVfSU5TVF9GRVRDSF9DTlRfTUFTSyBXTEFOX0NQVV9JTlNUX0ZFVENIX0NOVF9NQVNLCi0jZGVmaW5lIENQVV9JTlNUX0ZFVENIX0NOVF9HRVQoeCkgV0xBTl9DUFVfSU5TVF9GRVRDSF9DTlRfR0VUKHgpCi0jZGVmaW5lIENQVV9JTlNUX0ZFVENIX0NOVF9TRVQoeCkgV0xBTl9DUFVfSU5TVF9GRVRDSF9DTlRfU0VUKHgpCi0jZGVmaW5lIENQVV9EQVRBX0ZFVENIX0FERFJFU1MgV0xBTl9DUFVfREFUQV9GRVRDSF9BRERSRVNTCi0jZGVmaW5lIENQVV9EQVRBX0ZFVENIX09GRlNFVCBXTEFOX0NQVV9EQVRBX0ZFVENIX09GRlNFVAotI2RlZmluZSBDUFVfREFUQV9GRVRDSF9DTlRfTVNCIFdMQU5fQ1BVX0RBVEFfRkVUQ0hfQ05UX01TQgotI2RlZmluZSBDUFVfREFUQV9GRVRDSF9DTlRfTFNCIFdMQU5fQ1BVX0RBVEFfRkVUQ0hfQ05UX0xTQgotI2RlZmluZSBDUFVfREFUQV9GRVRDSF9DTlRfTUFTSyBXTEFOX0NQVV9EQVRBX0ZFVENIX0NOVF9NQVNLCi0jZGVmaW5lIENQVV9EQVRBX0ZFVENIX0NOVF9HRVQoeCkgV0xBTl9DUFVfREFUQV9GRVRDSF9DTlRfR0VUKHgpCi0jZGVmaW5lIENQVV9EQVRBX0ZFVENIX0NOVF9TRVQoeCkgV0xBTl9DUFVfREFUQV9GRVRDSF9DTlRfU0VUKHgpCi0jZGVmaW5lIENQVV9SQU0xX0NPTkZMSUNUX0FERFJFU1MgV0xBTl9DUFVfUkFNMV9DT05GTElDVF9BRERSRVNTCi0jZGVmaW5lIENQVV9SQU0xX0NPTkZMSUNUX09GRlNFVCBXTEFOX0NQVV9SQU0xX0NPTkZMSUNUX09GRlNFVAotI2RlZmluZSBDUFVfUkFNMV9DT05GTElDVF9DTlRfTVNCIFdMQU5fQ1BVX1JBTTFfQ09ORkxJQ1RfQ05UX01TQgotI2RlZmluZSBDUFVfUkFNMV9DT05GTElDVF9DTlRfTFNCIFdMQU5fQ1BVX1JBTTFfQ09ORkxJQ1RfQ05UX0xTQgotI2RlZmluZSBDUFVfUkFNMV9DT05GTElDVF9DTlRfTUFTSyBXTEFOX0NQVV9SQU0xX0NPTkZMSUNUX0NOVF9NQVNLCi0jZGVmaW5lIENQVV9SQU0xX0NPTkZMSUNUX0NOVF9HRVQoeCkgV0xBTl9DUFVfUkFNMV9DT05GTElDVF9DTlRfR0VUKHgpCi0jZGVmaW5lIENQVV9SQU0xX0NPTkZMSUNUX0NOVF9TRVQoeCkgV0xBTl9DUFVfUkFNMV9DT05GTElDVF9DTlRfU0VUKHgpCi0jZGVmaW5lIENQVV9SQU0yX0NPTkZMSUNUX0FERFJFU1MgV0xBTl9DUFVfUkFNMl9DT05GTElDVF9BRERSRVNTCi0jZGVmaW5lIENQVV9SQU0yX0NPTkZMSUNUX09GRlNFVCBXTEFOX0NQVV9SQU0yX0NPTkZMSUNUX09GRlNFVAotI2RlZmluZSBDUFVfUkFNMl9DT05GTElDVF9DTlRfTVNCIFdMQU5fQ1BVX1JBTTJfQ09ORkxJQ1RfQ05UX01TQgotI2RlZmluZSBDUFVfUkFNMl9DT05GTElDVF9DTlRfTFNCIFdMQU5fQ1BVX1JBTTJfQ09ORkxJQ1RfQ05UX0xTQgotI2RlZmluZSBDUFVfUkFNMl9DT05GTElDVF9DTlRfTUFTSyBXTEFOX0NQVV9SQU0yX0NPTkZMSUNUX0NOVF9NQVNLCi0jZGVmaW5lIENQVV9SQU0yX0NPTkZMSUNUX0NOVF9HRVQoeCkgV0xBTl9DUFVfUkFNMl9DT05GTElDVF9DTlRfR0VUKHgpCi0jZGVmaW5lIENQVV9SQU0yX0NPTkZMSUNUX0NOVF9TRVQoeCkgV0xBTl9DUFVfUkFNMl9DT05GTElDVF9DTlRfU0VUKHgpCi0jZGVmaW5lIENQVV9SQU0zX0NPTkZMSUNUX0FERFJFU1MgV0xBTl9DUFVfUkFNM19DT05GTElDVF9BRERSRVNTCi0jZGVmaW5lIENQVV9SQU0zX0NPTkZMSUNUX09GRlNFVCBXTEFOX0NQVV9SQU0zX0NPTkZMSUNUX09GRlNFVAotI2RlZmluZSBDUFVfUkFNM19DT05GTElDVF9DTlRfTVNCIFdMQU5fQ1BVX1JBTTNfQ09ORkxJQ1RfQ05UX01TQgotI2RlZmluZSBDUFVfUkFNM19DT05GTElDVF9DTlRfTFNCIFdMQU5fQ1BVX1JBTTNfQ09ORkxJQ1RfQ05UX0xTQgotI2RlZmluZSBDUFVfUkFNM19DT05GTElDVF9DTlRfTUFTSyBXTEFOX0NQVV9SQU0zX0NPTkZMSUNUX0NOVF9NQVNLCi0jZGVmaW5lIENQVV9SQU0zX0NPTkZMSUNUX0NOVF9HRVQoeCkgV0xBTl9DUFVfUkFNM19DT05GTElDVF9DTlRfR0VUKHgpCi0jZGVmaW5lIENQVV9SQU0zX0NPTkZMSUNUX0NOVF9TRVQoeCkgV0xBTl9DUFVfUkFNM19DT05GTElDVF9DTlRfU0VUKHgpCi0jZGVmaW5lIENQVV9SQU00X0NPTkZMSUNUX0FERFJFU1MgV0xBTl9DUFVfUkFNNF9DT05GTElDVF9BRERSRVNTCi0jZGVmaW5lIENQVV9SQU00X0NPTkZMSUNUX09GRlNFVCBXTEFOX0NQVV9SQU00X0NPTkZMSUNUX09GRlNFVAotI2RlZmluZSBDUFVfUkFNNF9DT05GTElDVF9DTlRfTVNCIFdMQU5fQ1BVX1JBTTRfQ09ORkxJQ1RfQ05UX01TQgotI2RlZmluZSBDUFVfUkFNNF9DT05GTElDVF9DTlRfTFNCIFdMQU5fQ1BVX1JBTTRfQ09ORkxJQ1RfQ05UX0xTQgotI2RlZmluZSBDUFVfUkFNNF9DT05GTElDVF9DTlRfTUFTSyBXTEFOX0NQVV9SQU00X0NPTkZMSUNUX0NOVF9NQVNLCi0jZGVmaW5lIENQVV9SQU00X0NPTkZMSUNUX0NOVF9HRVQoeCkgV0xBTl9DUFVfUkFNNF9DT05GTElDVF9DTlRfR0VUKHgpCi0jZGVmaW5lIENQVV9SQU00X0NPTkZMSUNUX0NOVF9TRVQoeCkgV0xBTl9DUFVfUkFNNF9DT05GTElDVF9DTlRfU0VUKHgpCi0KLQotI2VuZGlmCi0jZW5kaWYKLQotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vQVI2MDAyL2h3NC4wL2h3L3ZtY193bGFuX3JlZy5oIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHc0LjAvaHcvdm1jX3dsYW5fcmVnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyOGRlMzkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9BUjYwMDIvaHc0LjAvaHcvdm1jX3dsYW5fcmVnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOTUgKzAsMCBAQAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDQtMjAxMCBBdGhlcm9zIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIAotLy8KLS8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotLy8gcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLS8vCi0vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLS8vIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLS8vIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0vLyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0vLyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLS8vIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0vLyBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotLy8KLS8vCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gQXV0aG9yKHMpOiA9IkF0aGVyb3MiCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCi0jaWZuZGVmIF9WTUNfV0xBTl9SRUdfUkVHX0hfCi0jZGVmaW5lIF9WTUNfV0xBTl9SRUdfUkVHX0hfCi0KLSNkZWZpbmUgV0xBTl9NQ19CQ0FNX1ZBTElEX0FERFJFU1MgICAgICAgICAgICAgICAweDAwMDAwMDAwCi0jZGVmaW5lIFdMQU5fTUNfQkNBTV9WQUxJRF9PRkZTRVQgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAotI2RlZmluZSBXTEFOX01DX0JDQU1fVkFMSURfQklUX01TQiAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9NQ19CQ0FNX1ZBTElEX0JJVF9MU0IgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fTUNfQkNBTV9WQUxJRF9CSVRfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBXTEFOX01DX0JDQU1fVkFMSURfQklUX0dFVCh4KSAgICAgICAgICAgICgoKHgpICYgV0xBTl9NQ19CQ0FNX1ZBTElEX0JJVF9NQVNLKSA+PiBXTEFOX01DX0JDQU1fVkFMSURfQklUX0xTQikKLSNkZWZpbmUgV0xBTl9NQ19CQ0FNX1ZBTElEX0JJVF9TRVQoeCkgICAgICAgICAgICAoKCh4KSA8PCBXTEFOX01DX0JDQU1fVkFMSURfQklUX0xTQikgJiBXTEFOX01DX0JDQU1fVkFMSURfQklUX01BU0spCi0KLSNkZWZpbmUgV0xBTl9NQ19CQ0FNX0NPTVBBUkVfQUREUkVTUyAgICAgICAgICAgICAweDAwMDAwMjAwCi0jZGVmaW5lIFdMQU5fTUNfQkNBTV9DT01QQVJFX09GRlNFVCAgICAgICAgICAgICAgMHgwMDAwMDIwMAotI2RlZmluZSBXTEFOX01DX0JDQU1fQ09NUEFSRV9LRVlfTVNCICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIFdMQU5fTUNfQkNBTV9DT01QQVJFX0tFWV9MU0IgICAgICAgICAgICAgMgotI2RlZmluZSBXTEFOX01DX0JDQU1fQ09NUEFSRV9LRVlfTUFTSyAgICAgICAgICAgIDB4MDAwZmZmZmMKLSNkZWZpbmUgV0xBTl9NQ19CQ0FNX0NPTVBBUkVfS0VZX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIFdMQU5fTUNfQkNBTV9DT01QQVJFX0tFWV9NQVNLKSA+PiBXTEFOX01DX0JDQU1fQ09NUEFSRV9LRVlfTFNCKQotI2RlZmluZSBXTEFOX01DX0JDQU1fQ09NUEFSRV9LRVlfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IFdMQU5fTUNfQkNBTV9DT01QQVJFX0tFWV9MU0IpICYgV0xBTl9NQ19CQ0FNX0NPTVBBUkVfS0VZX01BU0spCi0KLSNkZWZpbmUgV0xBTl9NQ19CQ0FNX1RBUkdFVF9BRERSRVNTICAgICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIFdMQU5fTUNfQkNBTV9UQVJHRVRfT0ZGU0VUICAgICAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBXTEFOX01DX0JDQU1fVEFSR0VUX0lOU1RfTVNCICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFdMQU5fTUNfQkNBTV9UQVJHRVRfSU5TVF9MU0IgICAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX01DX0JDQU1fVEFSR0VUX0lOU1RfTUFTSyAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgV0xBTl9NQ19CQ0FNX1RBUkdFVF9JTlNUX0dFVCh4KSAgICAgICAgICAoKCh4KSAmIFdMQU5fTUNfQkNBTV9UQVJHRVRfSU5TVF9NQVNLKSA+PiBXTEFOX01DX0JDQU1fVEFSR0VUX0lOU1RfTFNCKQotI2RlZmluZSBXTEFOX01DX0JDQU1fVEFSR0VUX0lOU1RfU0VUKHgpICAgICAgICAgICgoKHgpIDw8IFdMQU5fTUNfQkNBTV9UQVJHRVRfSU5TVF9MU0IpICYgV0xBTl9NQ19CQ0FNX1RBUkdFVF9JTlNUX01BU0spCi0KLSNkZWZpbmUgV0xBTl9BUEJfQUREUl9FUlJPUl9DT05UUk9MX0FERFJFU1MgICAgICAweDAwMDAwNjAwCi0jZGVmaW5lIFdMQU5fQVBCX0FERFJfRVJST1JfQ09OVFJPTF9PRkZTRVQgICAgICAgMHgwMDAwMDYwMAotI2RlZmluZSBXTEFOX0FQQl9BRERSX0VSUk9SX0NPTlRST0xfUVVBTF9FTkFCTEVfTVNCIDEKLSNkZWZpbmUgV0xBTl9BUEJfQUREUl9FUlJPUl9DT05UUk9MX1FVQUxfRU5BQkxFX0xTQiAxCi0jZGVmaW5lIFdMQU5fQVBCX0FERFJfRVJST1JfQ09OVFJPTF9RVUFMX0VOQUJMRV9NQVNLIDB4MDAwMDAwMDIKLSNkZWZpbmUgV0xBTl9BUEJfQUREUl9FUlJPUl9DT05UUk9MX1FVQUxfRU5BQkxFX0dFVCh4KSAoKCh4KSAmIFdMQU5fQVBCX0FERFJfRVJST1JfQ09OVFJPTF9RVUFMX0VOQUJMRV9NQVNLKSA+PiBXTEFOX0FQQl9BRERSX0VSUk9SX0NPTlRST0xfUVVBTF9FTkFCTEVfTFNCKQotI2RlZmluZSBXTEFOX0FQQl9BRERSX0VSUk9SX0NPTlRST0xfUVVBTF9FTkFCTEVfU0VUKHgpICgoKHgpIDw8IFdMQU5fQVBCX0FERFJfRVJST1JfQ09OVFJPTF9RVUFMX0VOQUJMRV9MU0IpICYgV0xBTl9BUEJfQUREUl9FUlJPUl9DT05UUk9MX1FVQUxfRU5BQkxFX01BU0spCi0jZGVmaW5lIFdMQU5fQVBCX0FERFJfRVJST1JfQ09OVFJPTF9FTkFCTEVfTVNCICAgMAotI2RlZmluZSBXTEFOX0FQQl9BRERSX0VSUk9SX0NPTlRST0xfRU5BQkxFX0xTQiAgIDAKLSNkZWZpbmUgV0xBTl9BUEJfQUREUl9FUlJPUl9DT05UUk9MX0VOQUJMRV9NQVNLICAweDAwMDAwMDAxCi0jZGVmaW5lIFdMQU5fQVBCX0FERFJfRVJST1JfQ09OVFJPTF9FTkFCTEVfR0VUKHgpICgoKHgpICYgV0xBTl9BUEJfQUREUl9FUlJPUl9DT05UUk9MX0VOQUJMRV9NQVNLKSA+PiBXTEFOX0FQQl9BRERSX0VSUk9SX0NPTlRST0xfRU5BQkxFX0xTQikKLSNkZWZpbmUgV0xBTl9BUEJfQUREUl9FUlJPUl9DT05UUk9MX0VOQUJMRV9TRVQoeCkgKCgoeCkgPDwgV0xBTl9BUEJfQUREUl9FUlJPUl9DT05UUk9MX0VOQUJMRV9MU0IpICYgV0xBTl9BUEJfQUREUl9FUlJPUl9DT05UUk9MX0VOQUJMRV9NQVNLKQotCi0jZGVmaW5lIFdMQU5fQVBCX0FERFJfRVJST1JfU1RBVFVTX0FERFJFU1MgICAgICAgMHgwMDAwMDYwNAotI2RlZmluZSBXTEFOX0FQQl9BRERSX0VSUk9SX1NUQVRVU19PRkZTRVQgICAgICAgIDB4MDAwMDA2MDQKLSNkZWZpbmUgV0xBTl9BUEJfQUREUl9FUlJPUl9TVEFUVVNfV1JJVEVfTVNCICAgICAyNQotI2RlZmluZSBXTEFOX0FQQl9BRERSX0VSUk9SX1NUQVRVU19XUklURV9MU0IgICAgIDI1Ci0jZGVmaW5lIFdMQU5fQVBCX0FERFJfRVJST1JfU1RBVFVTX1dSSVRFX01BU0sgICAgMHgwMjAwMDAwMAotI2RlZmluZSBXTEFOX0FQQl9BRERSX0VSUk9SX1NUQVRVU19XUklURV9HRVQoeCkgICgoKHgpICYgV0xBTl9BUEJfQUREUl9FUlJPUl9TVEFUVVNfV1JJVEVfTUFTSykgPj4gV0xBTl9BUEJfQUREUl9FUlJPUl9TVEFUVVNfV1JJVEVfTFNCKQotI2RlZmluZSBXTEFOX0FQQl9BRERSX0VSUk9SX1NUQVRVU19XUklURV9TRVQoeCkgICgoKHgpIDw8IFdMQU5fQVBCX0FERFJfRVJST1JfU1RBVFVTX1dSSVRFX0xTQikgJiBXTEFOX0FQQl9BRERSX0VSUk9SX1NUQVRVU19XUklURV9NQVNLKQotI2RlZmluZSBXTEFOX0FQQl9BRERSX0VSUk9SX1NUQVRVU19BRERSRVNTX01TQiAgIDI0Ci0jZGVmaW5lIFdMQU5fQVBCX0FERFJfRVJST1JfU1RBVFVTX0FERFJFU1NfTFNCICAgMAotI2RlZmluZSBXTEFOX0FQQl9BRERSX0VSUk9SX1NUQVRVU19BRERSRVNTX01BU0sgIDB4MDFmZmZmZmYKLSNkZWZpbmUgV0xBTl9BUEJfQUREUl9FUlJPUl9TVEFUVVNfQUREUkVTU19HRVQoeCkgKCgoeCkgJiBXTEFOX0FQQl9BRERSX0VSUk9SX1NUQVRVU19BRERSRVNTX01BU0spID4+IFdMQU5fQVBCX0FERFJfRVJST1JfU1RBVFVTX0FERFJFU1NfTFNCKQotI2RlZmluZSBXTEFOX0FQQl9BRERSX0VSUk9SX1NUQVRVU19BRERSRVNTX1NFVCh4KSAoKCh4KSA8PCBXTEFOX0FQQl9BRERSX0VSUk9SX1NUQVRVU19BRERSRVNTX0xTQikgJiBXTEFOX0FQQl9BRERSX0VSUk9SX1NUQVRVU19BRERSRVNTX01BU0spCi0KLSNkZWZpbmUgV0xBTl9BSEJfQUREUl9FUlJPUl9DT05UUk9MX0FERFJFU1MgICAgICAweDAwMDAwNjA4Ci0jZGVmaW5lIFdMQU5fQUhCX0FERFJfRVJST1JfQ09OVFJPTF9PRkZTRVQgICAgICAgMHgwMDAwMDYwOAotI2RlZmluZSBXTEFOX0FIQl9BRERSX0VSUk9SX0NPTlRST0xfRU5BQkxFX01TQiAgIDAKLSNkZWZpbmUgV0xBTl9BSEJfQUREUl9FUlJPUl9DT05UUk9MX0VOQUJMRV9MU0IgICAwCi0jZGVmaW5lIFdMQU5fQUhCX0FERFJfRVJST1JfQ09OVFJPTF9FTkFCTEVfTUFTSyAgMHgwMDAwMDAwMQotI2RlZmluZSBXTEFOX0FIQl9BRERSX0VSUk9SX0NPTlRST0xfRU5BQkxFX0dFVCh4KSAoKCh4KSAmIFdMQU5fQUhCX0FERFJfRVJST1JfQ09OVFJPTF9FTkFCTEVfTUFTSykgPj4gV0xBTl9BSEJfQUREUl9FUlJPUl9DT05UUk9MX0VOQUJMRV9MU0IpCi0jZGVmaW5lIFdMQU5fQUhCX0FERFJfRVJST1JfQ09OVFJPTF9FTkFCTEVfU0VUKHgpICgoKHgpIDw8IFdMQU5fQUhCX0FERFJfRVJST1JfQ09OVFJPTF9FTkFCTEVfTFNCKSAmIFdMQU5fQUhCX0FERFJfRVJST1JfQ09OVFJPTF9FTkFCTEVfTUFTSykKLQotI2RlZmluZSBXTEFOX0FIQl9BRERSX0VSUk9SX1NUQVRVU19BRERSRVNTICAgICAgIDB4MDAwMDA2MGMKLSNkZWZpbmUgV0xBTl9BSEJfQUREUl9FUlJPUl9TVEFUVVNfT0ZGU0VUICAgICAgICAweDAwMDAwNjBjCi0jZGVmaW5lIFdMQU5fQUhCX0FERFJfRVJST1JfU1RBVFVTX01BQ19NU0IgICAgICAgMzEKLSNkZWZpbmUgV0xBTl9BSEJfQUREUl9FUlJPUl9TVEFUVVNfTUFDX0xTQiAgICAgICAzMQotI2RlZmluZSBXTEFOX0FIQl9BRERSX0VSUk9SX1NUQVRVU19NQUNfTUFTSyAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgV0xBTl9BSEJfQUREUl9FUlJPUl9TVEFUVVNfTUFDX0dFVCh4KSAgICAoKCh4KSAmIFdMQU5fQUhCX0FERFJfRVJST1JfU1RBVFVTX01BQ19NQVNLKSA+PiBXTEFOX0FIQl9BRERSX0VSUk9SX1NUQVRVU19NQUNfTFNCKQotI2RlZmluZSBXTEFOX0FIQl9BRERSX0VSUk9SX1NUQVRVU19NQUNfU0VUKHgpICAgICgoKHgpIDw8IFdMQU5fQUhCX0FERFJfRVJST1JfU1RBVFVTX01BQ19MU0IpICYgV0xBTl9BSEJfQUREUl9FUlJPUl9TVEFUVVNfTUFDX01BU0spCi0jZGVmaW5lIFdMQU5fQUhCX0FERFJfRVJST1JfU1RBVFVTX01CT1hfTVNCICAgICAgMzAKLSNkZWZpbmUgV0xBTl9BSEJfQUREUl9FUlJPUl9TVEFUVVNfTUJPWF9MU0IgICAgICAzMAotI2RlZmluZSBXTEFOX0FIQl9BRERSX0VSUk9SX1NUQVRVU19NQk9YX01BU0sgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgV0xBTl9BSEJfQUREUl9FUlJPUl9TVEFUVVNfTUJPWF9HRVQoeCkgICAoKCh4KSAmIFdMQU5fQUhCX0FERFJfRVJST1JfU1RBVFVTX01CT1hfTUFTSykgPj4gV0xBTl9BSEJfQUREUl9FUlJPUl9TVEFUVVNfTUJPWF9MU0IpCi0jZGVmaW5lIFdMQU5fQUhCX0FERFJfRVJST1JfU1RBVFVTX01CT1hfU0VUKHgpICAgKCgoeCkgPDwgV0xBTl9BSEJfQUREUl9FUlJPUl9TVEFUVVNfTUJPWF9MU0IpICYgV0xBTl9BSEJfQUREUl9FUlJPUl9TVEFUVVNfTUJPWF9NQVNLKQotI2RlZmluZSBXTEFOX0FIQl9BRERSX0VSUk9SX1NUQVRVU19BRERSRVNTX01TQiAgIDIzCi0jZGVmaW5lIFdMQU5fQUhCX0FERFJfRVJST1JfU1RBVFVTX0FERFJFU1NfTFNCICAgMAotI2RlZmluZSBXTEFOX0FIQl9BRERSX0VSUk9SX1NUQVRVU19BRERSRVNTX01BU0sgIDB4MDBmZmZmZmYKLSNkZWZpbmUgV0xBTl9BSEJfQUREUl9FUlJPUl9TVEFUVVNfQUREUkVTU19HRVQoeCkgKCgoeCkgJiBXTEFOX0FIQl9BRERSX0VSUk9SX1NUQVRVU19BRERSRVNTX01BU0spID4+IFdMQU5fQUhCX0FERFJfRVJST1JfU1RBVFVTX0FERFJFU1NfTFNCKQotI2RlZmluZSBXTEFOX0FIQl9BRERSX0VSUk9SX1NUQVRVU19BRERSRVNTX1NFVCh4KSAoKCh4KSA8PCBXTEFOX0FIQl9BRERSX0VSUk9SX1NUQVRVU19BRERSRVNTX0xTQikgJiBXTEFOX0FIQl9BRERSX0VSUk9SX1NUQVRVU19BRERSRVNTX01BU0spCi0KLSNkZWZpbmUgV0xBTl9CQ0FNX0NPTkZMSUNUX0VSUk9SX0FERFJFU1MgICAgICAgICAweDAwMDAwNjEwCi0jZGVmaW5lIFdMQU5fQkNBTV9DT05GTElDVF9FUlJPUl9PRkZTRVQgICAgICAgICAgMHgwMDAwMDYxMAotI2RlZmluZSBXTEFOX0JDQU1fQ09ORkxJQ1RfRVJST1JfSVBPUlRfRkxBR19NU0IgIDEKLSNkZWZpbmUgV0xBTl9CQ0FNX0NPTkZMSUNUX0VSUk9SX0lQT1JUX0ZMQUdfTFNCICAxCi0jZGVmaW5lIFdMQU5fQkNBTV9DT05GTElDVF9FUlJPUl9JUE9SVF9GTEFHX01BU0sgMHgwMDAwMDAwMgotI2RlZmluZSBXTEFOX0JDQU1fQ09ORkxJQ1RfRVJST1JfSVBPUlRfRkxBR19HRVQoeCkgKCgoeCkgJiBXTEFOX0JDQU1fQ09ORkxJQ1RfRVJST1JfSVBPUlRfRkxBR19NQVNLKSA+PiBXTEFOX0JDQU1fQ09ORkxJQ1RfRVJST1JfSVBPUlRfRkxBR19MU0IpCi0jZGVmaW5lIFdMQU5fQkNBTV9DT05GTElDVF9FUlJPUl9JUE9SVF9GTEFHX1NFVCh4KSAoKCh4KSA8PCBXTEFOX0JDQU1fQ09ORkxJQ1RfRVJST1JfSVBPUlRfRkxBR19MU0IpICYgV0xBTl9CQ0FNX0NPTkZMSUNUX0VSUk9SX0lQT1JUX0ZMQUdfTUFTSykKLSNkZWZpbmUgV0xBTl9CQ0FNX0NPTkZMSUNUX0VSUk9SX0RQT1JUX0ZMQUdfTVNCICAwCi0jZGVmaW5lIFdMQU5fQkNBTV9DT05GTElDVF9FUlJPUl9EUE9SVF9GTEFHX0xTQiAgMAotI2RlZmluZSBXTEFOX0JDQU1fQ09ORkxJQ1RfRVJST1JfRFBPUlRfRkxBR19NQVNLIDB4MDAwMDAwMDEKLSNkZWZpbmUgV0xBTl9CQ0FNX0NPTkZMSUNUX0VSUk9SX0RQT1JUX0ZMQUdfR0VUKHgpICgoKHgpICYgV0xBTl9CQ0FNX0NPTkZMSUNUX0VSUk9SX0RQT1JUX0ZMQUdfTUFTSykgPj4gV0xBTl9CQ0FNX0NPTkZMSUNUX0VSUk9SX0RQT1JUX0ZMQUdfTFNCKQotI2RlZmluZSBXTEFOX0JDQU1fQ09ORkxJQ1RfRVJST1JfRFBPUlRfRkxBR19TRVQoeCkgKCgoeCkgPDwgV0xBTl9CQ0FNX0NPTkZMSUNUX0VSUk9SX0RQT1JUX0ZMQUdfTFNCKSAmIFdMQU5fQkNBTV9DT05GTElDVF9FUlJPUl9EUE9SVF9GTEFHX01BU0spCi0KLSNkZWZpbmUgV0xBTl9DUFVfUEVSRl9DTlRfQUREUkVTUyAgICAgICAgICAgICAgICAweDAwMDAwNjE0Ci0jZGVmaW5lIFdMQU5fQ1BVX1BFUkZfQ05UX09GRlNFVCAgICAgICAgICAgICAgICAgMHgwMDAwMDYxNAotI2RlZmluZSBXTEFOX0NQVV9QRVJGX0NOVF9FTl9NU0IgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9DUFVfUEVSRl9DTlRfRU5fTFNCICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fQ1BVX1BFUkZfQ05UX0VOX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBXTEFOX0NQVV9QRVJGX0NOVF9FTl9HRVQoeCkgICAgICAgICAgICAgICgoKHgpICYgV0xBTl9DUFVfUEVSRl9DTlRfRU5fTUFTSykgPj4gV0xBTl9DUFVfUEVSRl9DTlRfRU5fTFNCKQotI2RlZmluZSBXTEFOX0NQVV9QRVJGX0NOVF9FTl9TRVQoeCkgICAgICAgICAgICAgICgoKHgpIDw8IFdMQU5fQ1BVX1BFUkZfQ05UX0VOX0xTQikgJiBXTEFOX0NQVV9QRVJGX0NOVF9FTl9NQVNLKQotCi0jZGVmaW5lIFdMQU5fQ1BVX0lOU1RfRkVUQ0hfQUREUkVTUyAgICAgICAgICAgICAgMHgwMDAwMDYxOAotI2RlZmluZSBXTEFOX0NQVV9JTlNUX0ZFVENIX09GRlNFVCAgICAgICAgICAgICAgIDB4MDAwMDA2MTgKLSNkZWZpbmUgV0xBTl9DUFVfSU5TVF9GRVRDSF9DTlRfTVNCICAgICAgICAgICAgICAzMQotI2RlZmluZSBXTEFOX0NQVV9JTlNUX0ZFVENIX0NOVF9MU0IgICAgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9DUFVfSU5TVF9GRVRDSF9DTlRfTUFTSyAgICAgICAgICAgICAweGZmZmZmZmZmCi0jZGVmaW5lIFdMQU5fQ1BVX0lOU1RfRkVUQ0hfQ05UX0dFVCh4KSAgICAgICAgICAgKCgoeCkgJiBXTEFOX0NQVV9JTlNUX0ZFVENIX0NOVF9NQVNLKSA+PiBXTEFOX0NQVV9JTlNUX0ZFVENIX0NOVF9MU0IpCi0jZGVmaW5lIFdMQU5fQ1BVX0lOU1RfRkVUQ0hfQ05UX1NFVCh4KSAgICAgICAgICAgKCgoeCkgPDwgV0xBTl9DUFVfSU5TVF9GRVRDSF9DTlRfTFNCKSAmIFdMQU5fQ1BVX0lOU1RfRkVUQ0hfQ05UX01BU0spCi0KLSNkZWZpbmUgV0xBTl9DUFVfREFUQV9GRVRDSF9BRERSRVNTICAgICAgICAgICAgICAweDAwMDAwNjFjCi0jZGVmaW5lIFdMQU5fQ1BVX0RBVEFfRkVUQ0hfT0ZGU0VUICAgICAgICAgICAgICAgMHgwMDAwMDYxYwotI2RlZmluZSBXTEFOX0NQVV9EQVRBX0ZFVENIX0NOVF9NU0IgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIFdMQU5fQ1BVX0RBVEFfRkVUQ0hfQ05UX0xTQiAgICAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX0NQVV9EQVRBX0ZFVENIX0NOVF9NQVNLICAgICAgICAgICAgIDB4ZmZmZmZmZmYKLSNkZWZpbmUgV0xBTl9DUFVfREFUQV9GRVRDSF9DTlRfR0VUKHgpICAgICAgICAgICAoKCh4KSAmIFdMQU5fQ1BVX0RBVEFfRkVUQ0hfQ05UX01BU0spID4+IFdMQU5fQ1BVX0RBVEFfRkVUQ0hfQ05UX0xTQikKLSNkZWZpbmUgV0xBTl9DUFVfREFUQV9GRVRDSF9DTlRfU0VUKHgpICAgICAgICAgICAoKCh4KSA8PCBXTEFOX0NQVV9EQVRBX0ZFVENIX0NOVF9MU0IpICYgV0xBTl9DUFVfREFUQV9GRVRDSF9DTlRfTUFTSykKLQotI2RlZmluZSBXTEFOX0NQVV9SQU0xX0NPTkZMSUNUX0FERFJFU1MgICAgICAgICAgIDB4MDAwMDA2MjAKLSNkZWZpbmUgV0xBTl9DUFVfUkFNMV9DT05GTElDVF9PRkZTRVQgICAgICAgICAgICAweDAwMDAwNjIwCi0jZGVmaW5lIFdMQU5fQ1BVX1JBTTFfQ09ORkxJQ1RfQ05UX01TQiAgICAgICAgICAgMTEKLSNkZWZpbmUgV0xBTl9DUFVfUkFNMV9DT05GTElDVF9DTlRfTFNCICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fQ1BVX1JBTTFfQ09ORkxJQ1RfQ05UX01BU0sgICAgICAgICAgMHgwMDAwMGZmZgotI2RlZmluZSBXTEFOX0NQVV9SQU0xX0NPTkZMSUNUX0NOVF9HRVQoeCkgICAgICAgICgoKHgpICYgV0xBTl9DUFVfUkFNMV9DT05GTElDVF9DTlRfTUFTSykgPj4gV0xBTl9DUFVfUkFNMV9DT05GTElDVF9DTlRfTFNCKQotI2RlZmluZSBXTEFOX0NQVV9SQU0xX0NPTkZMSUNUX0NOVF9TRVQoeCkgICAgICAgICgoKHgpIDw8IFdMQU5fQ1BVX1JBTTFfQ09ORkxJQ1RfQ05UX0xTQikgJiBXTEFOX0NQVV9SQU0xX0NPTkZMSUNUX0NOVF9NQVNLKQotCi0jZGVmaW5lIFdMQU5fQ1BVX1JBTTJfQ09ORkxJQ1RfQUREUkVTUyAgICAgICAgICAgMHgwMDAwMDYyNAotI2RlZmluZSBXTEFOX0NQVV9SQU0yX0NPTkZMSUNUX09GRlNFVCAgICAgICAgICAgIDB4MDAwMDA2MjQKLSNkZWZpbmUgV0xBTl9DUFVfUkFNMl9DT05GTElDVF9DTlRfTVNCICAgICAgICAgICAxMQotI2RlZmluZSBXTEFOX0NQVV9SQU0yX0NPTkZMSUNUX0NOVF9MU0IgICAgICAgICAgIDAKLSNkZWZpbmUgV0xBTl9DUFVfUkFNMl9DT05GTElDVF9DTlRfTUFTSyAgICAgICAgICAweDAwMDAwZmZmCi0jZGVmaW5lIFdMQU5fQ1BVX1JBTTJfQ09ORkxJQ1RfQ05UX0dFVCh4KSAgICAgICAgKCgoeCkgJiBXTEFOX0NQVV9SQU0yX0NPTkZMSUNUX0NOVF9NQVNLKSA+PiBXTEFOX0NQVV9SQU0yX0NPTkZMSUNUX0NOVF9MU0IpCi0jZGVmaW5lIFdMQU5fQ1BVX1JBTTJfQ09ORkxJQ1RfQ05UX1NFVCh4KSAgICAgICAgKCgoeCkgPDwgV0xBTl9DUFVfUkFNMl9DT05GTElDVF9DTlRfTFNCKSAmIFdMQU5fQ1BVX1JBTTJfQ09ORkxJQ1RfQ05UX01BU0spCi0KLSNkZWZpbmUgV0xBTl9DUFVfUkFNM19DT05GTElDVF9BRERSRVNTICAgICAgICAgICAweDAwMDAwNjI4Ci0jZGVmaW5lIFdMQU5fQ1BVX1JBTTNfQ09ORkxJQ1RfT0ZGU0VUICAgICAgICAgICAgMHgwMDAwMDYyOAotI2RlZmluZSBXTEFOX0NQVV9SQU0zX0NPTkZMSUNUX0NOVF9NU0IgICAgICAgICAgIDExCi0jZGVmaW5lIFdMQU5fQ1BVX1JBTTNfQ09ORkxJQ1RfQ05UX0xTQiAgICAgICAgICAgMAotI2RlZmluZSBXTEFOX0NQVV9SQU0zX0NPTkZMSUNUX0NOVF9NQVNLICAgICAgICAgIDB4MDAwMDBmZmYKLSNkZWZpbmUgV0xBTl9DUFVfUkFNM19DT05GTElDVF9DTlRfR0VUKHgpICAgICAgICAoKCh4KSAmIFdMQU5fQ1BVX1JBTTNfQ09ORkxJQ1RfQ05UX01BU0spID4+IFdMQU5fQ1BVX1JBTTNfQ09ORkxJQ1RfQ05UX0xTQikKLSNkZWZpbmUgV0xBTl9DUFVfUkFNM19DT05GTElDVF9DTlRfU0VUKHgpICAgICAgICAoKCh4KSA8PCBXTEFOX0NQVV9SQU0zX0NPTkZMSUNUX0NOVF9MU0IpICYgV0xBTl9DUFVfUkFNM19DT05GTElDVF9DTlRfTUFTSykKLQotI2RlZmluZSBXTEFOX0NQVV9SQU00X0NPTkZMSUNUX0FERFJFU1MgICAgICAgICAgIDB4MDAwMDA2MmMKLSNkZWZpbmUgV0xBTl9DUFVfUkFNNF9DT05GTElDVF9PRkZTRVQgICAgICAgICAgICAweDAwMDAwNjJjCi0jZGVmaW5lIFdMQU5fQ1BVX1JBTTRfQ09ORkxJQ1RfQ05UX01TQiAgICAgICAgICAgMTEKLSNkZWZpbmUgV0xBTl9DUFVfUkFNNF9DT05GTElDVF9DTlRfTFNCICAgICAgICAgICAwCi0jZGVmaW5lIFdMQU5fQ1BVX1JBTTRfQ09ORkxJQ1RfQ05UX01BU0sgICAgICAgICAgMHgwMDAwMGZmZgotI2RlZmluZSBXTEFOX0NQVV9SQU00X0NPTkZMSUNUX0NOVF9HRVQoeCkgICAgICAgICgoKHgpICYgV0xBTl9DUFVfUkFNNF9DT05GTElDVF9DTlRfTUFTSykgPj4gV0xBTl9DUFVfUkFNNF9DT05GTElDVF9DTlRfTFNCKQotI2RlZmluZSBXTEFOX0NQVV9SQU00X0NPTkZMSUNUX0NOVF9TRVQoeCkgICAgICAgICgoKHgpIDw8IFdMQU5fQ1BVX1JBTTRfQ09ORkxJQ1RfQ05UX0xTQikgJiBXTEFOX0NQVV9SQU00X0NPTkZMSUNUX0NOVF9NQVNLKQotCi0KLSNpZm5kZWYgX19BU1NFTUJMRVJfXwotCi10eXBlZGVmIHN0cnVjdCB2bWNfd2xhbl9yZWdfcmVnX3MgewotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9tY19iY2FtX3ZhbGlkWzEyOF07Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX21jX2JjYW1fY29tcGFyZVsxMjhdOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9tY19iY2FtX3RhcmdldFsxMjhdOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9hcGJfYWRkcl9lcnJvcl9jb250cm9sOwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9hcGJfYWRkcl9lcnJvcl9zdGF0dXM7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX2FoYl9hZGRyX2Vycm9yX2NvbnRyb2w7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX2FoYl9hZGRyX2Vycm9yX3N0YXR1czsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fYmNhbV9jb25mbGljdF9lcnJvcjsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fY3B1X3BlcmZfY250OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9jcHVfaW5zdF9mZXRjaDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fY3B1X2RhdGFfZmV0Y2g7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX2NwdV9yYW0xX2NvbmZsaWN0OwotICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgd2xhbl9jcHVfcmFtMl9jb25mbGljdDsKLSAgdm9sYXRpbGUgdW5zaWduZWQgaW50IHdsYW5fY3B1X3JhbTNfY29uZmxpY3Q7Ci0gIHZvbGF0aWxlIHVuc2lnbmVkIGludCB3bGFuX2NwdV9yYW00X2NvbmZsaWN0OwotfSB2bWNfd2xhbl9yZWdfcmVnX3Q7Ci0KLSNlbmRpZiAvKiBfX0FTU0VNQkxFUl9fICovCi0KLSNlbmRpZiAvKiBfVk1DX1dMQU5fUkVHX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL2FfaGNpLmggYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL2FfaGNpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3OWQ2NTIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9hX2hjaS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjgyICswLDAgQEAKLS8vLQotLy8gQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCi0vLyBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gCi0vLwotLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0vLyBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotLy8KLS8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotLy8gV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotLy8gTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLS8vIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLS8vIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotLy8gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLS8vIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0vLwotLy8KLS8vCi0vLwotCi0KLSNpZm5kZWYgX19BX0hDSV9IX18KLSNkZWZpbmUgX19BX0hDSV9IX18KLQotI2RlZmluZSBIQ0lfQ01EX09HRl9NQVNLICAgICAgICAgICAgMHgzRgotI2RlZmluZSBIQ0lfQ01EX09HRl9TSElGVCAgICAgICAgICAgMTAKLSNkZWZpbmUgSENJX0NNRF9HRVRfT0dGKG9wY29kZSkgICAgICgob3Bjb2RlID4+IEhDSV9DTURfT0dGX1NISUZUKSAmIEhDSV9DTURfT0dGX01BU0spCi0KLSNkZWZpbmUgSENJX0NNRF9PQ0ZfTUFTSyAgICAgICAgICAgIDB4M0ZGCi0jZGVmaW5lIEhDSV9DTURfT0NGX1NISUZUICAgICAgICAgICAwIAotI2RlZmluZSBIQ0lfQ01EX0dFVF9PQ0Yob3Bjb2RlKSAgICAgKCgob3Bjb2RlKSA+PiBIQ0lfQ01EX09DRl9TSElGVCkgJiBIQ0lfQ01EX09DRl9NQVNLKQotCi0jZGVmaW5lIEhDSV9GT1JNX09QQ09ERShvY2YsIG9nZikgICAgKChvY2YgJiBIQ0lfQ01EX09DRl9NQVNLKSA8PCBIQ0lfQ01EX09DRl9TSElGVCB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvZ2YgJiBIQ0lfQ01EX09HRl9NQVNLKSA8PCBIQ0lfQ01EX09HRl9TSElGVCkKLQotCi0vKj09PT09PT09IEhDSSBPcGNvZGUgZ3JvdXBzID09PT09PT09PT09PT09PSovCi0jZGVmaW5lIE9HRl9OT1AgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMAotI2RlZmluZSBPR0ZfTElOS19DT05UUk9MICAgICAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgT0dGX0xJTktfUE9MSUNZICAgICAgICAgICAgICAgICAweDAzCi0jZGVmaW5lIE9HRl9JTkZPX1BBUkFNUyAgICAgICAgICAgICAgICAgMHgwNAotI2RlZmluZSBPR0ZfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgIDB4MDUKLSNkZWZpbmUgT0dGX1RFU1RJTkcgICAgICAgICAgICAgICAgICAgICAweDA2Ci0jZGVmaW5lIE9HRl9CTFVFVE9PVEggICAgICAgICAgICAgICAgICAgMHgzRQotI2RlZmluZSBPR0ZfVkVORE9SX0RFQlVHICAgICAgICAgICAgICAgIDB4M0YKLQotCi0KLSNkZWZpbmUgT0NGX05PUCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwCi0KLQotLyo9PT09PSBMaW5rIENvbnRyb2wgQ29tbWFuZHMgT3Bjb2RlPT09PT09PT09PT09PT09PT09PSovCi0jZGVmaW5lIE9DRl9IQ0lfQ3JlYXRlX1BoeXNpY2FsX0xpbmsgICAgICAgICAgICAgICAgMHgzNQotI2RlZmluZSBPQ0ZfSENJX0FjY2VwdF9QaHlzaWNhbF9MaW5rX1JlcSAgICAgICAgICAgIDB4MzYKLSNkZWZpbmUgT0NGX0hDSV9EaXNjb25uZWN0X1BoeXNpY2FsX0xpbmsgICAgICAgICAgICAweDM3Ci0jZGVmaW5lIE9DRl9IQ0lfQ3JlYXRlX0xvZ2ljYWxfTGluayAgICAgICAgICAgICAgICAgMHgzOAotI2RlZmluZSBPQ0ZfSENJX0FjY2VwdF9Mb2dpY2FsX0xpbmsgICAgICAgICAgICAgICAgIDB4MzkKLSNkZWZpbmUgT0NGX0hDSV9EaXNjb25uZWN0X0xvZ2ljYWxfTGluayAgICAgICAgICAgICAweDNBCi0jZGVmaW5lIE9DRl9IQ0lfTG9naWNhbF9MaW5rX0NhbmNlbCAgICAgICAgICAgICAgICAgMHgzQgotI2RlZmluZSBPQ0ZfSENJX0Zsb3dfU3BlY19Nb2RpZnkgICAgICAgICAgICAgICAgICAgIDB4M0MKLQotCi0KLS8qPT09PT0gTGluayBQb2xpY3kgQ29tbWFuZHMgT3Bjb2RlPT09PT09PT09PT09PT09PT09PT0qLwotI2RlZmluZSBPQ0ZfSENJX1NldF9FdmVudF9NYXNrICAgICAgICAgICAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgT0NGX0hDSV9SZXNldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzCi0jZGVmaW5lIE9DRl9IQ0lfUmVhZF9Db25uX0FjY2VwdF9UaW1lb3V0ICAgICAgICAgICAgMHgxNQotI2RlZmluZSBPQ0ZfSENJX1dyaXRlX0Nvbm5fQWNjZXB0X1RpbWVvdXQgICAgICAgICAgIDB4MTYKLSNkZWZpbmUgT0NGX0hDSV9SZWFkX0xpbmtfU3VwZXJ2aXNpb25fVGltZW91dCAgICAgICAweDM2Ci0jZGVmaW5lIE9DRl9IQ0lfV3JpdGVfTGlua19TdXBlcnZpc2lvbl9UaW1lb3V0ICAgICAgMHgzNwotI2RlZmluZSBPQ0ZfSENJX0VuaGFuY2VkX0ZsdXNoICAgICAgICAgICAgICAgICAgICAgIDB4NUYKLSNkZWZpbmUgT0NGX0hDSV9SZWFkX0xvZ2ljYWxfTGlua19BY2NlcHRfVGltZW91dCAgICAweDYxCi0jZGVmaW5lIE9DRl9IQ0lfV3JpdGVfTG9naWNhbF9MaW5rX0FjY2VwdF9UaW1lb3V0ICAgMHg2MgotI2RlZmluZSBPQ0ZfSENJX1NldF9FdmVudF9NYXNrX1BhZ2VfMiAgICAgICAgICAgICAgIDB4NjMKLSNkZWZpbmUgT0NGX0hDSV9SZWFkX0xvY2F0aW9uX0RhdGEgICAgICAgICAgICAgICAgICAweDY0Ci0jZGVmaW5lIE9DRl9IQ0lfV3JpdGVfTG9jYXRpb25fRGF0YSAgICAgICAgICAgICAgICAgMHg2NQotI2RlZmluZSBPQ0ZfSENJX1JlYWRfRmxvd19Db250cm9sX01vZGUgICAgICAgICAgICAgIDB4NjYKLSNkZWZpbmUgT0NGX0hDSV9Xcml0ZV9GbG93X0NvbnRyb2xfTW9kZSAgICAgICAgICAgICAweDY3Ci0jZGVmaW5lIE9DRl9IQ0lfUmVhZF9CRV9GbHVzaF9UaW1lb3V0ICAgICAgICAgICAgICAgMHg2OQotI2RlZmluZSBPQ0ZfSENJX1dyaXRlX0JFX0ZsdXNoX1RpbWVvdXQgICAgICAgICAgICAgIDB4NkEKLSNkZWZpbmUgT0NGX0hDSV9TaG9ydF9SYW5nZV9Nb2RlICAgICAgICAgICAgICAgICAgICAweDZCCi0KLQotLyo9PT09PT09PSBJbmZvIENvbW1hbmRzIE9wY29kZT09PT09PT09PT09PT09PT09PT09PT09PSovCi0jZGVmaW5lIE9DRl9IQ0lfUmVhZF9Mb2NhbF9WZXJfSW5mbyAgICAgICAgICAgICAgICAgMHgwMQotI2RlZmluZSBPQ0ZfSENJX1JlYWRfTG9jYWxfU3VwcG9ydGVkX0NtZHMgICAgICAgICAgIDB4MDIKLSNkZWZpbmUgT0NGX0hDSV9SZWFkX0RhdGFfQmxvY2tfU2l6ZSAgICAgICAgICAgICAgICAweDBBCi0vKj09PT09PT09IFN0YXR1cyBDb21tYW5kcyBPcGNvZGU9PT09PT09PT09PT09PT09PT09PT09Ki8KLSNkZWZpbmUgT0NGX0hDSV9SZWFkX0ZhaWxlZF9Db250YWN0X0NvdW50ZXIgICAgICAgICAweDAxCi0jZGVmaW5lIE9DRl9IQ0lfUmVzZXRfRmFpbGVkX0NvbnRhY3RfQ291bnRlciAgICAgICAgMHgwMgotI2RlZmluZSBPQ0ZfSENJX1JlYWRfTGlua19RdWFsaXR5ICAgICAgICAgICAgICAgICAgIDB4MDMKLSNkZWZpbmUgT0NGX0hDSV9SZWFkX1JTU0kgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1Ci0jZGVmaW5lIE9DRl9IQ0lfUmVhZF9Mb2NhbF9BTVBfSW5mbyAgICAgICAgICAgICAgICAgMHgwOSAgICAKLSNkZWZpbmUgT0NGX0hDSV9SZWFkX0xvY2FsX0FNUF9BU1NPQyAgICAgICAgICAgICAgICAweDBBCi0jZGVmaW5lIE9DRl9IQ0lfV3JpdGVfUmVtb3RlX0FNUF9BU1NPQyAgICAgICAgICAgICAgMHgwQgotCi0KLS8qPT09PT09PSBBTVBfQVNTT0MgU3BlY2lmaWMgVExWIHRhZ3MgPT09PT09PT09PT09PT09PT0qLwotI2RlZmluZSBBTVBfQVNTT0NfTUFDX0FERFJFU1NfSU5GT19UWVBFICAgICAgICAgICAgIDB4MQotI2RlZmluZSBBTVBfQVNTT0NfUFJFRl9DSEFOX0xJU1QgICAgICAgICAgICAgICAgICAgIDB4MgotI2RlZmluZSBBTVBfQVNTT0NfQ09OTkVDVEVEX0NIQU4gICAgICAgICAgICAgICAgICAgIDB4MwotI2RlZmluZSBBTVBfQVNTT0NfUEFMX0NBUEFCSUxJVElFUyAgICAgICAgICAgICAgICAgIDB4NAotI2RlZmluZSBBTVBfQVNTT0NfUEFMX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgIDB4NQotCi0KLS8qPT09PT09PT09IFBBTCBFdmVudHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLSNkZWZpbmUgUEFMX0NPTU1BTkRfQ09NUExFVEVfRVZFTlQgICAgICAgICAgICAgICAgICAweDBFCi0jZGVmaW5lIFBBTF9DT01NQU5EX1NUQVRVU19FVkVOVCAgICAgICAgICAgICAgICAgICAgMHgwRgotI2RlZmluZSBQQUxfSEFSRFdBUkVfRVJST1JfRVZFTlQgICAgICAgICAgICAgICAgICAgIDB4MTAKLSNkZWZpbmUgUEFMX0ZMVVNIX09DQ1VSUkVEX0VWRU5UICAgICAgICAgICAgICAgICAgICAweDExCi0jZGVmaW5lIFBBTF9MT09QQkFDS19FVkVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxOQotI2RlZmluZSBQQUxfQlVGRkVSX09WRVJGTE9XX0VWRU5UICAgICAgICAgICAgICAgICAgIDB4MUEKLSNkZWZpbmUgUEFMX1FPU19WSU9MQVRJT05fRVZFTlQgICAgICAgICAgICAgICAgICAgICAweDFFCi0jZGVmaW5lIFBBTF9FTkhBTkNFRF9GTFVTSF9DT01QTFRfRVZFTlQgICAgICAgICAgICAgMHgzOQotI2RlZmluZSBQQUxfUEhZU0lDQUxfTElOS19DT01QTF9FVkVOVCAgICAgICAgICAgICAgIDB4NDAKLSNkZWZpbmUgUEFMX0NIQU5ORUxfU0VMRUNUX0VWRU5UICAgICAgICAgICAgICAgICAgICAweDQxCi0jZGVmaW5lIFBBTF9ESVNDT05ORUNUX1BIWVNJQ0FMX0xJTktfRVZFTlQgICAgICAgICAgMHg0MgotI2RlZmluZSBQQUxfUEhZX0xJTktfRUFSTFlfTE9TU19XQVJOSU5HX0VWRU5UICAgICAgIDB4NDMKLSNkZWZpbmUgUEFMX1BIWV9MSU5LX1JFQ09WRVJZX0VWRU5UICAgICAgICAgICAgICAgICAweDQ0Ci0jZGVmaW5lIFBBTF9MT0dJQ0FMX0xJTktfQ09NUExfRVZFTlQgICAgICAgICAgICAgICAgMHg0NQotI2RlZmluZSBQQUxfRElTQ09OTkVDVF9MT0dJQ0FMX0xJTktfQ09NUExfRVZFTlQgICAgIDB4NDYKLSNkZWZpbmUgUEFMX0ZMT1dfU1BFQ19NT0RJRllfQ09NUExfRVZFTlQgICAgICAgICAgICAweDQ3Ci0jZGVmaW5lIFBBTF9OVU1fQ09NUExfREFUQV9CTE9DS19FVkVOVCAgICAgICAgICAgICAgMHg0OAotI2RlZmluZSBQQUxfU0hPUlRfUkFOR0VfTU9ERV9DSEFOR0VfQ09NUExfRVZFTlQgICAgIDB4NEMKLSNkZWZpbmUgUEFMX0FNUF9TVEFUVVNfQ0hBTkdFX0VWRU5UICAgICAgICAgICAgICAgICAweDRECi0vKj09PT09PT09IEVuZCBvZiBQQUwgZXZlbnRzIGRlZmluaXRpb24gPT09PT09PT09PT09PT09PT0qLwotCi0KLS8qPT09PT09PT0gVGltZW91dHMgKG5vdCBwYXJ0IG9mIEhDSSBjbWQsIGJ1dCBpbnB1dCB0byBQQUwgZW5naW5lKSA9PT09PT09PT0qLwotI2RlZmluZSBUaW1lcl9Db25uX0FjY2VwdF9UTyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgVGltZXJfTGlua19TdXBlcnZpc2lvbl9UTyAgICAgICAgICAgICAgICAgICAweDAyCi0KLSNkZWZpbmUgTlVNX0hDSV9DT01NQU5EX1BLVFMgICAgICAgICAgICAgICAgMHgxCi0KLQotLyo9PT09PT0gTk9QIENtZCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLSNkZWZpbmUgSENJX0NNRF9OT1AgICAgICAgICAgICAgICAgICAgICBIQ0lfRk9STV9PUENPREUoT0NGX05PUCwgT0dGX05PUCkKLQotCi0vKj09PT09IExpbmsgQ29udHJvbCBDb21tYW5kcz09PT09PT09PT09PT09PT0qLwotI2RlZmluZSBIQ0lfQ3JlYXRlX1BoeXNpY2FsX0xpbmsgICAgICAgIEhDSV9GT1JNX09QQ09ERShPQ0ZfSENJX0NyZWF0ZV9QaHlzaWNhbF9MaW5rLCBPR0ZfTElOS19DT05UUk9MKQotI2RlZmluZSBIQ0lfQWNjZXB0X1BoeXNpY2FsX0xpbmtfUmVxICAgIEhDSV9GT1JNX09QQ09ERShPQ0ZfSENJX0FjY2VwdF9QaHlzaWNhbF9MaW5rX1JlcSwgT0dGX0xJTktfQ09OVFJPTCkKLSNkZWZpbmUgSENJX0Rpc2Nvbm5lY3RfUGh5c2ljYWxfTGluayAgICBIQ0lfRk9STV9PUENPREUoT0NGX0hDSV9EaXNjb25uZWN0X1BoeXNpY2FsX0xpbmssIE9HRl9MSU5LX0NPTlRST0wpCi0jZGVmaW5lIEhDSV9DcmVhdGVfTG9naWNhbF9MaW5rICAgICAgICAgSENJX0ZPUk1fT1BDT0RFKE9DRl9IQ0lfQ3JlYXRlX0xvZ2ljYWxfTGluaywgT0dGX0xJTktfQ09OVFJPTCkKLSNkZWZpbmUgSENJX0FjY2VwdF9Mb2dpY2FsX0xpbmsgICAgICAgICBIQ0lfRk9STV9PUENPREUoT0NGX0hDSV9BY2NlcHRfTG9naWNhbF9MaW5rLCBPR0ZfTElOS19DT05UUk9MKQotI2RlZmluZSBIQ0lfRGlzY29ubmVjdF9Mb2dpY2FsX0xpbmsgICAgIEhDSV9GT1JNX09QQ09ERShPQ0ZfSENJX0Rpc2Nvbm5lY3RfTG9naWNhbF9MaW5rLCBPR0ZfTElOS19DT05UUk9MKQotI2RlZmluZSBIQ0lfTG9naWNhbF9MaW5rX0NhbmNlbCAgICAgICAgIEhDSV9GT1JNX09QQ09ERShPQ0ZfSENJX0xvZ2ljYWxfTGlua19DYW5jZWwsIE9HRl9MSU5LX0NPTlRST0wpCi0jZGVmaW5lIEhDSV9GbG93X1NwZWNfTW9kaWZ5ICAgICAgICAgICAgSENJX0ZPUk1fT1BDT0RFKE9DRl9IQ0lfRmxvd19TcGVjX01vZGlmeSwgT0dGX0xJTktfQ09OVFJPTCkKLQotCi0vKj09PT09IExpbmsgUG9saWN5IENvbW1hbmRzID09PT09PT09PT09PT09PT0qLwotI2RlZmluZSBIQ0lfU2V0X0V2ZW50X01hc2sgICAgICAgICAgICAgIEhDSV9GT1JNX09QQ09ERShPQ0ZfSENJX1NldF9FdmVudF9NYXNrLCBPR0ZfTElOS19QT0xJQ1kpCi0jZGVmaW5lIEhDSV9SZXNldCAgICAgICAgICAgICAgICAgICAgICAgSENJX0ZPUk1fT1BDT0RFKE9DRl9IQ0lfUmVzZXQsIE9HRl9MSU5LX1BPTElDWSkKLSNkZWZpbmUgSENJX0VuaGFuY2VkX0ZsdXNoICAgICAgICAgICAgICBIQ0lfRk9STV9PUENPREUoT0NGX0hDSV9FbmhhbmNlZF9GbHVzaCwgT0dGX0xJTktfUE9MSUNZKQotI2RlZmluZSBIQ0lfUmVhZF9Db25uX0FjY2VwdF9UaW1lb3V0ICAgIEhDSV9GT1JNX09QQ09ERShPQ0ZfSENJX1JlYWRfQ29ubl9BY2NlcHRfVGltZW91dCwgT0dGX0xJTktfUE9MSUNZKQotI2RlZmluZSBIQ0lfV3JpdGVfQ29ubl9BY2NlcHRfVGltZW91dCAgIEhDSV9GT1JNX09QQ09ERShPQ0ZfSENJX1dyaXRlX0Nvbm5fQWNjZXB0X1RpbWVvdXQsIE9HRl9MSU5LX1BPTElDWSkKLSNkZWZpbmUgSENJX1JlYWRfTG9naWNhbF9MaW5rX0FjY2VwdF9UaW1lb3V0ICAgIEhDSV9GT1JNX09QQ09ERShPQ0ZfSENJX1JlYWRfTG9naWNhbF9MaW5rX0FjY2VwdF9UaW1lb3V0LCBPR0ZfTElOS19QT0xJQ1kpCi0jZGVmaW5lIEhDSV9Xcml0ZV9Mb2dpY2FsX0xpbmtfQWNjZXB0X1RpbWVvdXQgICBIQ0lfRk9STV9PUENPREUoT0NGX0hDSV9Xcml0ZV9Mb2dpY2FsX0xpbmtfQWNjZXB0X1RpbWVvdXQsIE9HRl9MSU5LX1BPTElDWSkKLSNkZWZpbmUgSENJX1JlYWRfTGlua19TdXBlcnZpc2lvbl9UaW1lb3V0ICAgICAgIEhDSV9GT1JNX09QQ09ERShPQ0ZfSENJX1JlYWRfTGlua19TdXBlcnZpc2lvbl9UaW1lb3V0LCBPR0ZfTElOS19QT0xJQ1kpCi0jZGVmaW5lIEhDSV9Xcml0ZV9MaW5rX1N1cGVydmlzaW9uX1RpbWVvdXQgICAgICBIQ0lfRk9STV9PUENPREUoT0NGX0hDSV9Xcml0ZV9MaW5rX1N1cGVydmlzaW9uX1RpbWVvdXQsIE9HRl9MSU5LX1BPTElDWSkKLSNkZWZpbmUgSENJX1JlYWRfTG9jYXRpb25fRGF0YSAgICAgICAgICBIQ0lfRk9STV9PUENPREUoT0NGX0hDSV9SZWFkX0xvY2F0aW9uX0RhdGEsIE9HRl9MSU5LX1BPTElDWSkKLSNkZWZpbmUgSENJX1dyaXRlX0xvY2F0aW9uX0RhdGEgICAgICAgICBIQ0lfRk9STV9PUENPREUoT0NGX0hDSV9Xcml0ZV9Mb2NhdGlvbl9EYXRhLCBPR0ZfTElOS19QT0xJQ1kpCi0jZGVmaW5lIEhDSV9TZXRfRXZlbnRfTWFza19QYWdlXzIgICAgICAgSENJX0ZPUk1fT1BDT0RFKE9DRl9IQ0lfU2V0X0V2ZW50X01hc2tfUGFnZV8yLCBPR0ZfTElOS19QT0xJQ1kpCi0jZGVmaW5lIEhDSV9SZWFkX0Zsb3dfQ29udHJvbF9Nb2RlICAgICAgSENJX0ZPUk1fT1BDT0RFKE9DRl9IQ0lfUmVhZF9GbG93X0NvbnRyb2xfTW9kZSwgT0dGX0xJTktfUE9MSUNZKQotI2RlZmluZSBIQ0lfV3JpdGVfRmxvd19Db250cm9sX01vZGUgICAgIEhDSV9GT1JNX09QQ09ERShPQ0ZfSENJX1dyaXRlX0Zsb3dfQ29udHJvbF9Nb2RlLCBPR0ZfTElOS19QT0xJQ1kpCi0jZGVmaW5lIEhDSV9Xcml0ZV9CRV9GbHVzaF9UaW1lb3V0ICAgICAgSENJX0ZPUk1fT1BDT0RFKE9DRl9IQ0lfV3JpdGVfQkVfRmx1c2hfVGltZW91dCwgT0dGX0xJTktfUE9MSUNZKQotI2RlZmluZSBIQ0lfUmVhZF9CRV9GbHVzaF9UaW1lb3V0ICAgICAgIEhDSV9GT1JNX09QQ09ERShPQ0ZfSENJX1JlYWRfQkVfRmx1c2hfVGltZW91dCwgT0dGX0xJTktfUE9MSUNZKQotI2RlZmluZSBIQ0lfU2hvcnRfUmFuZ2VfTW9kZSAgICAgICAgICAgIEhDSV9GT1JNX09QQ09ERShPQ0ZfSENJX1Nob3J0X1JhbmdlX01vZGUsIE9HRl9MSU5LX1BPTElDWSkgICAgICAgICAgICAKLQotCi0vKj09PT09IEluZm8gQ29tbWFuZHMgPT09PT09PT09PT09PT09PT09PT09Ki8KLSNkZWZpbmUgSENJX1JlYWRfTG9jYWxfVmVyX0luZm8gICAgICAgICBIQ0lfRk9STV9PUENPREUoT0NGX0hDSV9SZWFkX0xvY2FsX1Zlcl9JbmZvLCAgT0dGX0lORk9fUEFSQU1TKQotI2RlZmluZSBIQ0lfUmVhZF9Mb2NhbF9TdXBwb3J0ZWRfQ21kcyAgIEhDSV9GT1JNX09QQ09ERShPQ0ZfSENJX1JlYWRfTG9jYWxfU3VwcG9ydGVkX0NtZHMsIE9HRl9JTkZPX1BBUkFNUykKLSNkZWZpbmUgSENJX1JlYWRfRGF0YV9CbG9ja19TaXplICAgICAgICBIQ0lfRk9STV9PUENPREUoT0NGX0hDSV9SZWFkX0RhdGFfQmxvY2tfU2l6ZSwgT0dGX0lORk9fUEFSQU1TKQotCi0vKj09PT09IFN0YXR1cyBDb21tYW5kcyA9PT09PT09PT09PT09PT09PT09PT0qLwotI2RlZmluZSBIQ0lfUmVhZF9MaW5rX1F1YWxpdHkgICAgICAgICAgIEhDSV9GT1JNX09QQ09ERShPQ0ZfSENJX1JlYWRfTGlua19RdWFsaXR5LCBPR0ZfU1RBVFVTKQotI2RlZmluZSBIQ0lfUmVhZF9SU1NJICAgICAgICAgICAgICAgICAgIEhDSV9GT1JNX09QQ09ERShPQ0ZfSENJX1JlYWRfUlNTSSwgT0dGX1NUQVRVUykKLSNkZWZpbmUgSENJX1JlYWRfTG9jYWxfQU1QX0luZm8gICAgICAgICBIQ0lfRk9STV9PUENPREUoT0NGX0hDSV9SZWFkX0xvY2FsX0FNUF9JbmZvLCBPR0ZfU1RBVFVTKQotI2RlZmluZSBIQ0lfUmVhZF9Mb2NhbF9BTVBfQVNTT0MgICAgICAgIEhDSV9GT1JNX09QQ09ERShPQ0ZfSENJX1JlYWRfTG9jYWxfQU1QX0FTU09DLCBPR0ZfU1RBVFVTKQotI2RlZmluZSBIQ0lfV3JpdGVfUmVtb3RlX0FNUF9BU1NPQyAgICAgIEhDSV9GT1JNX09QQ09ERShPQ0ZfSENJX1dyaXRlX1JlbW90ZV9BTVBfQVNTT0MsIE9HRl9TVEFUVVMpCi0KLS8qPT09PT09IEVuZCBvZiBjbWQgZGVmaW5pdGlvbnMgPT09PT09PT09PT09PSovCi0KLQotCi0vKj09PT09IFRpbWVvdXRzKHByaXZhdGUgLSBjYW4ndCBjb21lIGZyb20gSENJKT09PT09PT09PT09PT09PT09Ki8KLSNkZWZpbmUgQ29ubl9BY2NlcHRfVE8gICAgICAgICAgICAgICAgICBIQ0lfRk9STV9PUENPREUoVGltZXJfQ29ubl9BY2NlcHRfVE8sIE9HRl9WRU5ET1JfREVCVUcpCi0jZGVmaW5lIExpbmtfU3VwZXJ2aXNpb25fVE8gICAgICAgICAgICAgSENJX0ZPUk1fT1BDT0RFKFRpbWVyX0xpbmtfU3VwZXJ2aXNpb25fVE8sIE9HRl9WRU5ET1JfREVCVUcpCi0KLS8qLS0tLS0gUEFMIENvbnN0YW50cyAoU2VjIDYgb2YgRG9jKS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZGVmaW5lIE1heDgwMjExX1BBTF9QRFVfU2l6ZSAgICAgIDE0OTIKLSNkZWZpbmUgTWF4ODAyMTFfQU1QX0FTU09DX0xlbiAgICAgIDY3MgotI2RlZmluZSBNaW5HVXNlclByaW8gICAgICAgICAgICAgICAgNAotI2RlZmluZSBNYXhHVXNlclByaW8gICAgICAgICAgICAgICAgNwotI2RlZmluZSBCRVVzZXJQcmlvMCAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBCRVVzZXJQcmlvMSAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBNYXg4MDIxMUJlYWNvblBlcmlvZCAgICAgICAgMjAwMCAgICAvKiBpbiBtaWxsaXNlYyAqLwotI2RlZmluZSBTaG9ydFJhbmdlTW9kZVBvd2VyTWF4ICAgICAgNCAgICAgICAvKiBkQm0gKi8KLQotLyotLS0tLS0gUEFMIFByb3RvY29sIElkZW50aWZpZXJzIChTZWM1LjEpIC0tLS0tLS0tLS0tLS0tLS0tLSovCi10eXBlZGVmIGVudW0gewotICAgIEFDTF9EQVRBID0gMHgwMSwKLSAgICBBQ1RJVklUWV9SRVBPUlQsCi0gICAgU0VDVVJFRF9GUkFNRVMsCi0gICAgTElOS19TVVBFUlZJU0lPTl9SRVEsCi0gICAgTElOS19TVVBFUlZJU0lPTl9SRVNQLAotfVBBTF9QUk9UT0NPTF9JREVOVElGSUVSUzsKLQotI2RlZmluZSBIQ0lfQ01EX0hEUl9TWiAgICAgICAgICAzCi0jZGVmaW5lIEhDSV9FVkVOVF9IRFJfU0laRSAgICAgIDIKLSNkZWZpbmUgTUFYX0VWVF9QS1RfU1ogICAgICAgICAgMjU1Ci0jZGVmaW5lIEFNUF9BU1NPQ19NQVhfRlJBR19TWiAgIDI0OAotI2RlZmluZSBBTVBfTUFYX0dVQVJBTlRFRURfQlcgICAyMDAwMAotCi0jZGVmaW5lIERFRkFVTFRfQ09OTl9BQ0NQVF9UTyAgIDUwMDAKLSNkZWZpbmUgREVGQVVMVF9MTF9BQ0NQVF9UTyAgICAgNTAwMAotI2RlZmluZSBERUZBVUxUX0xTVE8gICAgICAgICAgICAxMDAwMAotCi0jZGVmaW5lIFBBQ0tFVF9CQVNFRF9GTE9XX0NPTlRST0xfTU9ERSAgICAgIDB4MDAKLSNkZWZpbmUgREFUQV9CTEtfQkFTRURfRkxPV19DT05UUk9MX01PREUgICAgMHgwMQotCi0jZGVmaW5lIFNFUlZJQ0VfVFlQRV9CRVNUX0VGRk9SVCAgICAweDAxCi0jZGVmaW5lIFNFUlZJQ0VfVFlQRV9HVUFSQU5URUVEICAgICAweDAyCi0KLSNkZWZpbmUgTUFDX0FERFJfTEVOICAgICAgICAgICAgNgotI2RlZmluZSBMSU5LX0tFWV9MRU4gICAgICAgICAgICAzMgotCi10eXBlZGVmIGVudW0gIHsKLSAgICBBQ0xfREFUQV9QQl8xU1RfTk9OX0FVVE9NQVRJQ0FMTFlfRkxVU0hBQkxFID0gMHgwMCwKLSAgICBBQ0xfREFUQV9QQl9DT05USU5VSU5HX0ZSQUdNRU5UID0gMHgwMSwKLSAgICBBQ0xfREFUQV9QQl8xU1RfQVVUT01BVElDQUxMWV9GTFVTSEFCTEUgPSAweDAyLAotICAgIEFDTF9EQVRBX1BCX0NPTVBMRVRFX1BEVSA9IDB4MDMsCi19IEFDTF9EQVRBX1BCX0ZMQUdTOwotI2RlZmluZSBBQ0xfREFUQV9QQl9GTEFHU19TSElGVCAgICAgMTIKLQotdHlwZWRlZiBlbnVtIHsKLSAgICBBQ0xfREFUQV9CQ19QT0lOVF9UT19QT0lOVCA9IDB4MDAsCi19IEFDTF9EQVRBX0JDX0ZMQUdTOwotI2RlZmluZSBBQ0xfREFUQV9CQ19GTEFHU19TSElGVCAgICAgMTQKLQotLyogQ29tbWFuZCBwa3QgKi8KLXR5cGVkZWYgc3RydWN0ICBoY2lfY21kX3BrdF90IHsKLSAgICB1MTYgb3Bjb2RlOwotICAgIHU4IHBhcmFtX2xlbmd0aDsKLSAgICB1OCBwYXJhbXNbMjU1XTsKLX0gUE9TVFBBQ0sgSENJX0NNRF9QS1Q7Ci0KLSNkZWZpbmUgQUNMX0RBVEFfSERSX1NJWkUgICA0ICAgLyogaGRsX2FuZCBmbGFncyArIGRhdGFfbGVuICovCi0vKiBEYXRhIHBrdCAqLwotdHlwZWRlZiBzdHJ1Y3QgIGhjaV9hY2xfZGF0YV9wa3RfdCB7Ci0gICAgdTE2IGhkbF9hbmRfZmxhZ3M7Ci0gICAgdTE2IGRhdGFfbGVuOwotICAgIHU4IGRhdGFbTWF4ODAyMTFfUEFMX1BEVV9TaXplXTsKLX0gUE9TVFBBQ0sgSENJX0FDTF9EQVRBX1BLVDsKLQotLyogRXZlbnQgcGt0ICovCi10eXBlZGVmIHN0cnVjdCAgaGNpX2V2ZW50X3BrdF90IHsKLSAgICB1OCBldmVudF9jb2RlOwotICAgIHU4IHBhcmFtX2xlbjsKLSAgICB1OCBwYXJhbXNbMjU2XTsKLX0gUE9TVFBBQ0sgSENJX0VWRU5UX1BLVDsKLQotCi0vKj09PT09PT09PT09PT09IEhDSSBDb21tYW5kIGRlZmluaXRpb25zID09PT09PT09PT09PT09PT09PT09PT09ICovCi10eXBlZGVmIHN0cnVjdCBoY2lfY21kX3BoeV9saW5rX3QgewotICAgIHUxNiBvcGNvZGU7Ci0gICAgdTggcGFyYW1fbGVuZ3RoOwotICAgIHU4IHBoeV9saW5rX2hkbDsKLSAgICB1OCBsaW5rX2tleV9sZW47Ci0gICAgdTggbGlua19rZXlfdHlwZTsKLSAgICB1OCBsaW5rX2tleVtMSU5LX0tFWV9MRU5dOwotfSBQT1NUUEFDSyBIQ0lfQ01EX1BIWV9MSU5LOwotCi10eXBlZGVmIHN0cnVjdCAgaGNpX2NtZF93cml0ZV9yZW1fYW1wX2Fzc29jX3QgewotICAgIHUxNiBvcGNvZGU7Ci0gICAgdTggcGFyYW1fbGVuZ3RoOwotICAgIHU4IHBoeV9saW5rX2hkbDsKLSAgICB1MTYgbGVuX3NvX2ZhcjsKLSAgICB1MTYgYW1wX2Fzc29jX3JlbWFpbmluZ19sZW47Ci0gICAgdTggYW1wX2Fzc29jX2ZyYWdbQU1QX0FTU09DX01BWF9GUkFHX1NaXTsKLX0gUE9TVFBBQ0sgSENJX0NNRF9XUklURV9SRU1fQU1QX0FTU09DOwotCi0KLXR5cGVkZWYgc3RydWN0ICBoY2lfY21kX29wY29kZV9oZGxfdCB7Ci0gICAgdTE2IG9wY29kZTsKLSAgICB1OCBwYXJhbV9sZW5ndGg7Ci0gICAgdTE2IGhkbDsKLX0gUE9TVFBBQ0sgSENJX0NNRF9SRUFEX0xJTktfUVVBTCwKLSAgICAgICAgICAgSENJX0NNRF9GTFVTSCwKLSAgICAgICAgICAgSENJX0NNRF9SRUFEX0xJTktfU1VQRVJWSVNJT05fVElNRU9VVDsKLQotdHlwZWRlZiBzdHJ1Y3QgIGhjaV9jbWRfcmVhZF9sb2NhbF9hbXBfYXNzb2NfdCB7Ci0gICAgdTE2IG9wY29kZTsKLSAgICB1OCBwYXJhbV9sZW5ndGg7Ci0gICAgdTggcGh5X2xpbmtfaGRsOwotICAgIHUxNiBsZW5fc29fZmFyOwotICAgIHUxNiBtYXhfcmVtX2FtcF9hc3NvY19sZW47Ci19IFBPU1RQQUNLIEhDSV9DTURfUkVBRF9MT0NBTF9BTVBfQVNTT0M7Ci0KLQotdHlwZWRlZiBzdHJ1Y3QgaGNpX2NtZF9zZXRfZXZlbnRfbWFza190IHsKLSAgICB1MTYgb3Bjb2RlOwotICAgIHU4IHBhcmFtX2xlbmd0aDsKLSAgICB1NjQgbWFzazsKLX1QT1NUUEFDSyBIQ0lfQ01EX1NFVF9FVlRfTUFTSywgSENJX0NNRF9TRVRfRVZUX01BU0tfUEdfMjsKLQotCi10eXBlZGVmIHN0cnVjdCAgaGNpX2NtZF9lbmhhbmNlZF9mbHVzaF90ewotICAgIHUxNiBvcGNvZGU7Ci0gICAgdTggcGFyYW1fbGVuZ3RoOwotICAgIHUxNiBoZGw7Ci0gICAgdTggdHlwZTsKLX0gUE9TVFBBQ0sgSENJX0NNRF9FTkhBTkNFRF9GTFVTSDsKLQotCi10eXBlZGVmIHN0cnVjdCAgaGNpX2NtZF93cml0ZV90aW1lb3V0X3QgewotICAgIHUxNiBvcGNvZGU7Ci0gICAgdTggcGFyYW1fbGVuZ3RoOwotICAgIHUxNiB0aW1lb3V0OwotfSBQT1NUUEFDSyAgSENJX0NNRF9XUklURV9USU1FT1VUOwotCi10eXBlZGVmIHN0cnVjdCAgaGNpX2NtZF93cml0ZV9saW5rX3N1cGVydmlzaW9uX3RpbWVvdXRfdCB7Ci0gICAgdTE2IG9wY29kZTsKLSAgICB1OCBwYXJhbV9sZW5ndGg7Ci0gICAgdTE2IGhkbDsKLSAgICB1MTYgdGltZW91dDsKLX0gUE9TVFBBQ0sgSENJX0NNRF9XUklURV9MSU5LX1NVUEVSVklTSU9OX1RJTUVPVVQ7Ci0KLXR5cGVkZWYgc3RydWN0ICBoY2lfY21kX3dyaXRlX2Zsb3dfY29udHJvbF90IHsKLSAgICB1MTYgb3Bjb2RlOwotICAgIHU4IHBhcmFtX2xlbmd0aDsKLSAgICB1OCBtb2RlOwotfSBQT1NUUEFDSyAgSENJX0NNRF9XUklURV9GTE9XX0NPTlRST0w7Ci0KLXR5cGVkZWYgc3RydWN0ICBsb2NhdGlvbl9kYXRhX2NmZ190IHsKLSAgICB1OCByZWdfZG9tYWluX2F3YXJlOwotICAgIHU4IHJlZ19kb21haW5bM107Ci0gICAgdTggcmVnX29wdGlvbnM7Ci19IFBPU1RQQUNLIExPQ0FUSU9OX0RBVEFfQ0ZHOwotCi10eXBlZGVmIHN0cnVjdCAgaGNpX2NtZF93cml0ZV9sb2NhdGlvbl9kYXRhX3QgewotICAgIHUxNiBvcGNvZGU7Ci0gICAgdTggcGFyYW1fbGVuZ3RoOwotICAgIExPQ0FUSU9OX0RBVEFfQ0ZHICAgY2ZnOwotfSBQT1NUUEFDSyAgSENJX0NNRF9XUklURV9MT0NBVElPTl9EQVRBOwotCi0KLXR5cGVkZWYgc3RydWN0ICBmbG93X3NwZWNfdCB7Ci0gICAgdTggaWQ7Ci0gICAgdTggc2VydmljZV90eXBlOwotICAgIHUxNiBtYXhfc2R1OwotICAgIHUzMiBzZHVfaW50ZXJfYXJyaXZhbF90aW1lOwotICAgIHUzMiBhY2Nlc3NfbGF0ZW5jeTsKLSAgICB1MzIgZmx1c2hfdGltZW91dDsKLX0gUE9TVFBBQ0sgRkxPV19TUEVDOwotCi0KLXR5cGVkZWYgc3RydWN0ICBoY2lfY21kX2NyZWF0ZV9sb2dpY2FsX2xpbmtfdCB7Ci0gICAgdTE2IG9wY29kZTsKLSAgICB1OCBwYXJhbV9sZW5ndGg7Ci0gICAgdTggcGh5X2xpbmtfaGRsOwotICAgIEZMT1dfU1BFQyAgIHR4X2Zsb3dfc3BlYzsKLSAgICBGTE9XX1NQRUMgICByeF9mbG93X3NwZWM7Ci19IFBPU1RQQUNLIEhDSV9DTURfQ1JFQVRFX0xPR0lDQUxfTElOSzsKLQotdHlwZWRlZiBzdHJ1Y3QgIGhjaV9jbWRfZmxvd19zcGVjX21vZGlmeV90IHsKLSAgICB1MTYgb3Bjb2RlOwotICAgIHU4IHBhcmFtX2xlbmd0aDsKLSAgICB1MTYgaGRsOwotICAgIEZMT1dfU1BFQyAgIHR4X2Zsb3dfc3BlYzsKLSAgICBGTE9XX1NQRUMgICByeF9mbG93X3NwZWM7Ci19IFBPU1RQQUNLIEhDSV9DTURfRkxPV19TUEVDX01PRElGWTsKLQotdHlwZWRlZiBzdHJ1Y3QgaGNpX2NtZF9sb2dpY2FsX2xpbmtfY2FuY2VsX3QgewotICAgIHUxNiBvcGNvZGU7Ci0gICAgdTggcGFyYW1fbGVuZ3RoOwotICAgIHU4IHBoeV9saW5rX2hkbDsKLSAgICB1OCB0eF9mbG93X3NwZWNfaWQ7Ci19IFBPU1RQQUNLIEhDSV9DTURfTE9HSUNBTF9MSU5LX0NBTkNFTDsKLQotdHlwZWRlZiBzdHJ1Y3QgIGhjaV9jbWRfZGlzY29ubmVjdF9sb2dpY2FsX2xpbmtfdCB7Ci0gICAgdTE2IG9wY29kZTsKLSAgICB1OCBwYXJhbV9sZW5ndGg7Ci0gICAgdTE2IGxvZ2ljYWxfbGlua19oZGw7Ci19IFBPU1RQQUNLIEhDSV9DTURfRElTQ09OTkVDVF9MT0dJQ0FMX0xJTks7Ci0KLXR5cGVkZWYgc3RydWN0ICBoY2lfY21kX2Rpc2Nvbm5lY3RfcGh5X2xpbmtfdCB7Ci0gICAgdTE2IG9wY29kZTsKLSAgICB1OCBwYXJhbV9sZW5ndGg7Ci0gICAgdTggcGh5X2xpbmtfaGRsOwotfSBQT1NUUEFDSyBIQ0lfQ01EX0RJU0NPTk5FQ1RfUEhZX0xJTks7Ci0KLXR5cGVkZWYgc3RydWN0ICBoY2lfY21kX3NybV90IHsKLSAgICB1MTYgb3Bjb2RlOwotICAgIHU4IHBhcmFtX2xlbmd0aDsKLSAgICB1OCBwaHlfbGlua19oZGw7Ci0gICAgdTggbW9kZTsKLX0gUE9TVFBBQ0sgSENJX0NNRF9TSE9SVF9SQU5HRV9NT0RFOwotLyo9PT09PT09PT09PT09PSBIQ0kgQ29tbWFuZCBkZWZpbml0aW9ucyBlbmQgPT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQotCi0KLS8qPT09PT09PT09PT09PT0gSENJIEV2ZW50IGRlZmluaXRpb25zID09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0KLS8qIENvbW1hbmQgY29tcGxldGUgZXZlbnQgKi8KLXR5cGVkZWYgc3RydWN0ICBoY2lfZXZlbnRfY21kX2NvbXBsZXRlX3QgewotICAgIHU4IGV2ZW50X2NvZGU7Ci0gICAgdTggcGFyYW1fbGVuOwotICAgIHU4IG51bV9oY2lfY21kX3BrdHM7Ci0gICAgdTE2IG9wY29kZTsKLSAgICB1OCBwYXJhbXNbMjU1XTsKLX0gUE9TVFBBQ0sgSENJX0VWRU5UX0NNRF9DT01QTEVURTsKLQotCi0vKiBDb21tYW5kIHN0YXR1cyBldmVudCAqLwotdHlwZWRlZiBzdHJ1Y3QgIGhjaV9ldmVudF9jbWRfc3RhdHVzX3QgewotICAgIHU4IGV2ZW50X2NvZGU7Ci0gICAgdTggcGFyYW1fbGVuOwotICAgIHU4IHN0YXR1czsKLSAgICB1OCBudW1faGNpX2NtZF9wa3RzOwotICAgIHUxNiBvcGNvZGU7Ci19IFBPU1RQQUNLIEhDSV9FVkVOVF9DTURfU1RBVFVTOwotCi0vKiBIYXJkd2FyZSBFcnJvciBldmVudCAqLwotdHlwZWRlZiBzdHJ1Y3QgIGhjaV9ldmVudF9od19lcnJfdCB7Ci0gICAgdTggZXZlbnRfY29kZTsKLSAgICB1OCBwYXJhbV9sZW47Ci0gICAgdTggaHdfZXJyX2NvZGU7Ci19IFBPU1RQQUNLIEhDSV9FVkVOVF9IV19FUlI7Ci0KLS8qIEZsdXNoIG9jY3VycmVkIGV2ZW50ICovCi0vKiBRb3MgVmlvbGF0aW9uIGV2ZW50ICovCi10eXBlZGVmIHN0cnVjdCAgaGNpX2V2ZW50X2hhbmRsZV90IHsKLSAgICB1OCBldmVudF9jb2RlOwotICAgIHU4IHBhcmFtX2xlbjsKLSAgICB1MTYgaGFuZGxlOwotfSBQT1NUUEFDSyBIQ0lfRVZFTlRfRkxVU0hfT0NDUkQsCi0gICAgICAgICAgIEhDSV9FVkVOVF9RT1NfVklPTEFUSU9OOwotCi0vKiBMb29wYmFjayBjb21tYW5kIGV2ZW50ICovCi10eXBlZGVmIHN0cnVjdCBoY2lfbG9vcGJhY2tfY21kX3QgewotICAgIHU4IGV2ZW50X2NvZGU7Ci0gICAgdTggcGFyYW1fbGVuOwotICAgIHU4IHBhcmFtc1syNTJdOwotfSBQT1NUUEFDSyBIQ0lfRVZFTlRfTE9PUEJBQ0tfQ01EOwotCi0vKiBEYXRhIGJ1ZmZlciBvdmVyZmxvdyBldmVudCAqLwotdHlwZWRlZiBzdHJ1Y3QgIGhjaV9kYXRhX2J1Zl9vdmVyZmxvd190IHsKLSAgICB1OCBldmVudF9jb2RlOwotICAgIHU4IHBhcmFtX2xlbjsKLSAgICB1OCBsaW5rX3R5cGU7Ci19IFBPU1RQQUNLICBIQ0lfRVZFTlRfREFUQV9CVUZfT1ZFUkZMT1c7Ci0KLS8qIEVuaGFuY2VkIEZsdXNoIGNvbXBsZXRlIGV2ZW50ICovCi10eXBlZGVmIHN0cnVjdCBoY2lfZW5oYW5jZWRfZmx1c2hfY29tcGx0X3R7Ci0gICAgdTggZXZlbnRfY29kZTsKLSAgICB1OCBwYXJhbV9sZW47Ci0gICAgdTE2IGhkbDsKLX0gUE9TVFBBQ0sgIEhDSV9FVkVOVF9FTkhBTkNFRF9GTFVTSF9DT01QTFQ7Ci0KLS8qIENoYW5uZWwgc2VsZWN0IGV2ZW50ICovCi10eXBlZGVmIHN0cnVjdCAgaGNpX2V2ZW50X2NoYW5fc2VsZWN0X3QgewotICAgIHU4IGV2ZW50X2NvZGU7Ci0gICAgdTggcGFyYW1fbGVuOwotICAgIHU4IHBoeV9saW5rX2hkbDsKLX0gUE9TVFBBQ0sgSENJX0VWRU5UX0NIQU5fU0VMRUNUOwotCi0vKiBQaHlzaWNhbCBMaW5rIENvbXBsZXRlIGV2ZW50ICovCi10eXBlZGVmIHN0cnVjdCAgaGNpX2V2ZW50X3BoeV9saW5rX2NvbXBsZXRlX2V2ZW50X3QgewotICAgIHU4IGV2ZW50X2NvZGU7Ci0gICAgdTggcGFyYW1fbGVuOwotICAgIHU4IHN0YXR1czsKLSAgICB1OCBwaHlfbGlua19oZGw7Ci19IFBPU1RQQUNLIEhDSV9FVkVOVF9QSFlfTElOS19DT01QTEVURTsKLQotLyogTG9naWNhbCBMaW5rIGNvbXBsZXRlIGV2ZW50ICovCi10eXBlZGVmIHN0cnVjdCBoY2lfZXZlbnRfbG9naWNhbF9saW5rX2NvbXBsZXRlX2V2ZW50X3QgewotICAgIHU4IGV2ZW50X2NvZGU7Ci0gICAgdTggcGFyYW1fbGVuOwotICAgIHU4IHN0YXR1czsKLSAgICB1MTYgbG9naWNhbF9saW5rX2hkbDsKLSAgICB1OCBwaHlfaGRsOwotICAgIHU4IHR4X2Zsb3dfaWQ7Ci19IFBPU1RQQUNLIEhDSV9FVkVOVF9MT0dJQ0FMX0xJTktfQ09NUExFVEVfRVZFTlQ7Ci0KLS8qIERpc2Nvbm5lY3QgTG9naWNhbCBMaW5rIGNvbXBsZXRlIGV2ZW50ICovCi10eXBlZGVmIHN0cnVjdCBoY2lfZXZlbnRfZGlzY29ubmVjdF9sb2dpY2FsX2xpbmtfZXZlbnRfdCB7Ci0gICAgdTggZXZlbnRfY29kZTsKLSAgICB1OCBwYXJhbV9sZW47Ci0gICAgdTggc3RhdHVzOwotICAgIHUxNiBsb2dpY2FsX2xpbmtfaGRsOwotICAgIHU4IHJlYXNvbjsKLX0gUE9TVFBBQ0sgSENJX0VWRU5UX0RJU0NPTk5FQ1RfTE9HSUNBTF9MSU5LX0VWRU5UOwotCi0vKiBEaXNjb25uZWN0IFBoeXNpY2FsIExpbmsgY29tcGxldGUgZXZlbnQgKi8KLXR5cGVkZWYgc3RydWN0IGhjaV9ldmVudF9kaXNjb25uZWN0X3BoeV9saW5rX2NvbXBsZXRlX3QgewotICAgIHU4IGV2ZW50X2NvZGU7Ci0gICAgdTggcGFyYW1fbGVuOwotICAgIHU4IHN0YXR1czsKLSAgICB1OCBwaHlfbGlua19oZGw7Ci0gICAgdTggcmVhc29uOwotfSBQT1NUUEFDSyBIQ0lfRVZFTlRfRElTQ09OTkVDVF9QSFlfTElOS19DT01QTEVURTsKLQotdHlwZWRlZiBzdHJ1Y3QgaGNpX2V2ZW50X3BoeXNpY2FsX2xpbmtfbG9zc19lYXJseV93YXJuaW5nX3R7Ci0gICAgdTggZXZlbnRfY29kZTsKLSAgICB1OCBwYXJhbV9sZW47Ci0gICAgdTggcGh5X2hkbDsKLSAgICB1OCByZWFzb247Ci19IFBPU1RQQUNLIEhDSV9FVkVOVF9QSFlfTElOS19MT1NTX0VBUkxZX1dBUk5JTkc7Ci0KLXR5cGVkZWYgc3RydWN0IGhjaV9ldmVudF9waHlzaWNhbF9saW5rX3JlY292ZXJ5X3R7Ci0gICAgdTggZXZlbnRfY29kZTsKLSAgICB1OCBwYXJhbV9sZW47Ci0gICAgdTggcGh5X2hkbDsKLX0gUE9TVFBBQ0sgSENJX0VWRU5UX1BIWV9MSU5LX1JFQ09WRVJZOwotCi0KLS8qIEZsb3cgc3BlYyBtb2RpZnkgY29tcGxldGUgZXZlbnQgKi8KLS8qIEZsdXNoIGV2ZW50ICovCi10eXBlZGVmIHN0cnVjdCBoY2lfZXZlbnRfc3RhdHVzX2hhbmRsZV90IHsKLSAgICB1OCBldmVudF9jb2RlOwotICAgIHU4IHBhcmFtX2xlbjsKLSAgICB1OCBzdGF0dXM7Ci0gICAgdTE2IGhhbmRsZTsKLX0gUE9TVFBBQ0sgSENJX0VWRU5UX0ZMT1dfU1BFQ19NT0RJRlksCi0gICAgICAgICAgIEhDSV9FVkVOVF9GTFVTSDsKLQotCi0vKiBOdW0gb2YgY29tcGxldGVkIGRhdGEgYmxvY2tzIGV2ZW50ICovCi10eXBlZGVmIHN0cnVjdCBoY2lfZXZlbnRfbnVtX29mX2NvbXBsX2RhdGFfYmxrc190IHsKLSAgICB1OCBldmVudF9jb2RlOwotICAgIHU4IHBhcmFtX2xlbjsKLSAgICB1MTYgbnVtX2RhdGFfYmxrczsKLSAgICB1OCBudW1faGFuZGxlczsKLSAgICB1OCBwYXJhbXNbMjU1XTsKLX0gUE9TVFBBQ0sgSENJX0VWRU5UX05VTV9DT01QTF9EQVRBX0JMS1M7Ci0KLS8qIFNob3J0IHJhbmdlIG1vZGUgY2hhbmdlIGNvbXBsZXRlIGV2ZW50ICovCi10eXBlZGVmIHN0cnVjdCAgaGNpX3NybV9jbXBsX3QgewotICAgIHU4IGV2ZW50X2NvZGU7Ci0gICAgdTggcGFyYW1fbGVuOwotICAgIHU4IHN0YXR1czsKLSAgICB1OCBwaHlfbGluazsKLSAgICB1OCBzdGF0ZTsKLX0gUE9TVFBBQ0sgSENJX0VWRU5UX1NSTV9DT01QTDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGNpX2V2ZW50X2FtcF9zdGF0dXNfY2hhbmdlX3R7Ci0gICAgdTggZXZlbnRfY29kZTsKLSAgICB1OCBwYXJhbV9sZW47Ci0gICAgdTggc3RhdHVzOwotICAgIHU4IGFtcF9zdGF0dXM7Ci19IFBPU1RQQUNLIEhDSV9FVkVOVF9BTVBfU1RBVFVTX0NIQU5HRTsKLQotLyo9PT09PT09PT09PT09PSBFdmVudCBkZWZpbml0aW9ucyBlbmQgPT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0KLQotdHlwZWRlZiBzdHJ1Y3QgIGxvY2FsX2FtcF9pbmZvX3Jlc3BfdCB7Ci0gICAgdTggc3RhdHVzOwotICAgIHU4IGFtcF9zdGF0dXM7Ci0gICAgdTMyIHRvdGFsX2J3OyAgICAgICAgICAgLyoga2JwcyAqLwotICAgIHUzMiBtYXhfZ3VyYW50ZWVkX2J3OyAgIC8qIGticHMgKi8KLSAgICB1MzIgbWluX2xhdGVuY3k7Ci0gICAgdTMyIG1heF9wZHVfc2l6ZTsKLSAgICB1OCBhbXBfdHlwZTsKLSAgICB1MTYgcGFsX2NhcGFiaWxpdGllczsKLSAgICB1MTYgYW1wX2Fzc29jX2xlbjsKLSAgICB1MzIgbWF4X2ZsdXNoX3RpbWVvdXQ7ICAvKiBpbiBtcyAqLwotICAgIHUzMiBiZV9mbHVzaF90aW1lb3V0OyAgIC8qIGluIG1zICovCi19IFBPU1RQQUNLICBMT0NBTF9BTVBfSU5GTzsKLQotdHlwZWRlZiBzdHJ1Y3QgIGFtcF9hc3NvY19jbWRfcmVzcF90ewotICAgIHU4IHN0YXR1czsKLSAgICB1OCBwaHlfaGRsOwotICAgIHUxNiBhbXBfYXNzb2NfbGVuOwotICAgIHU4IGFtcF9hc3NvY19mcmFnW0FNUF9BU1NPQ19NQVhfRlJBR19TWl07Ci19UE9TVFBBQ0sgQU1QX0FTU09DX0NNRF9SRVNQOwotCi0KLWVudW0gUEFMX0hDSV9DTURfU1RBVFVTIHsKLSAgICBQQUxfSENJX0NNRF9QUk9DRVNTRUQsCi0gICAgUEFMX0hDSV9DTURfSUdOT1JFRAotfTsgCi0KLQotLyo9PT09PT09PT09PT09IEhDSSBFcnJvciBDb2RlcyA9PT09PT09PT09PT09PT09PT09PT09PSovCi0jZGVmaW5lIEhDSV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwCi0jZGVmaW5lIEhDSV9FUlJfVU5LTk9XX0NNRCAgICAgICAgICAgICAgICAgICAgICAweDAxCi0jZGVmaW5lIEhDSV9FUlJfVU5LTk9XTl9DT05OX0lEICAgICAgICAgICAgICAgICAweDAyCi0jZGVmaW5lIEhDSV9FUlJfSFdfRkFJTFVSRSAgICAgICAgICAgICAgICAgICAgICAweDAzCi0jZGVmaW5lIEhDSV9FUlJfUEFHRV9USU1FT1VUICAgICAgICAgICAgICAgICAgICAweDA0Ci0jZGVmaW5lIEhDSV9FUlJfQVVUSF9GQUlMVVJFICAgICAgICAgICAgICAgICAgICAweDA1Ci0jZGVmaW5lIEhDSV9FUlJfS0VZX01JU1NJTkcgICAgICAgICAgICAgICAgICAgICAweDA2Ci0jZGVmaW5lIEhDSV9FUlJfTUVNX0NBUF9FWEVDRUQgICAgICAgICAgICAgICAgICAweDA3Ci0jZGVmaW5lIEhDSV9FUlJfQ09OX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgICAweDA4Ci0jZGVmaW5lIEhDSV9FUlJfQ09OX0xJTUlUX0VYRUNFRCAgICAgICAgICAgICAgICAweDA5Ci0jZGVmaW5lCUhDSV9FUlJfQUNMX0NPTk5fQUxSRFlfRVhJU1RTCSAgICAgICAgMHgwQgotI2RlZmluZQlIQ0lfRVJSX0NPTU1BTkRfRElTQUxMT1dFRAkJICAgICAgICAweDBDCi0jZGVmaW5lIEhDSV9FUlJfQ09OTl9SRUpfQllfTElNSVRfUkVTICAgICAgICAgICAweDBECi0jZGVmaW5lIEhDSV9FUlJfQ09OTl9SRUpfQllfU0VDICAgICAgICAgICAgICAgICAweDBFCi0jZGVmaW5lIEhDSV9FUlJfQ09OTl9SRUpfQllfQkFEX0FERFIgICAgICAgICAgICAweDBGCi0jZGVmaW5lIEhDSV9FUlJfQ09OTl9BQ0NQVF9USU1FT1VUICAgICAgICAgICAgICAweDEwCi0jZGVmaW5lIEhDSV9FUlJfVU5TVVBQT1JUX0ZFQVRVUkUgICAgICAgICAgICAgICAweDExCi0jZGVmaW5lIEhDSV9FUlJfSU5WQUxJRF9IQ0lfQ01EX1BBUkFNUyAgICAgICAgICAweDEyCi0jZGVmaW5lIEhDSV9FUlJfUkVNT1RFX1VTRVJfVEVSTUlOQVRFX0NPTk4gICAgICAweDEzCi0jZGVmaW5lIEhDSV9FUlJfQ09OX1RFUk1fQllfSE9TVCAgICAgICAgICAgICAgICAweDE2Ci0jZGVmaW5lIEhDSV9FUlJfVU5TUEVDSUZJRURfRVJST1IgICAgICAgICAgICAgICAweDFGCi0jZGVmaW5lIEhDSV9FUlJfRU5DUllQVElPTl9NT0RFX05PVF9TVVBQT1JUICAgICAweDI1Ci0jZGVmaW5lIEhDSV9FUlJfUkVRVUVTVEVEX1FPU19OT1RfU1VQUE9SVCAgICAgICAweDI3Ci0jZGVmaW5lIEhDSV9FUlJfUU9TX1VOQUNDRVBUQUJMRV9QQVJNICAgICAgICAgICAweDJDCi0jZGVmaW5lIEhDSV9FUlJfUU9TX1JFSkVDVEVEICAgICAgICAgICAgICAgICAgICAweDJECi0jZGVmaW5lIEhDSV9FUlJfQ09OTl9SRUpfTk9fU1VJVEFCTEVfQ0hBTiAgICAgICAweDM5Ci0KLS8qPT09PT09PT09PT09PSBIQ0kgRXJyb3IgQ29kZXMgRW5kID09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotCi0vKiBGb2xsb3dpbmcgYXJlIGV2ZW50IHJldHVybiBwYXJhbWV0ZXJzLi4gcGFydCBvZiBIQ0kgZXZlbnRzIAotICovCi10eXBlZGVmIHN0cnVjdCAgdGltZW91dF9yZWFkX3QgewotICAgIHU4IHN0YXR1czsKLSAgICB1MTYgdGltZW91dDsKLX1QT1NUUEFDSyBUSU1FT1VUX0lORk87Ci0KLXR5cGVkZWYgc3RydWN0ICBsaW5rX3N1cGVydmlzaW9uX3RpbWVvdXRfcmVhZF90IHsKLSAgICB1OCBzdGF0dXM7Ci0gICAgdTE2IGhkbDsKLSAgICB1MTYgdGltZW91dDsKLX1QT1NUUEFDSyBMSU5LX1NVUEVSVklTSU9OX1RJTUVPVVRfSU5GTzsKLQotdHlwZWRlZiBzdHJ1Y3QgIHN0YXR1c19oZGxfdCB7Ci0gICAgdTggc3RhdHVzOwotICAgIHUxNiBoZGw7Ci19UE9TVFBBQ0sgSU5GT19TVEFUVVNfSERMOwotCi10eXBlZGVmIHN0cnVjdCB3cml0ZV9yZW1vdGVfYW1wX2Fzc29jX3R7Ci0gICAgdTggc3RhdHVzOwotICAgIHU4IGhkbDsKLX1QT1NUUEFDSyBXUklURV9SRU1PVEVfQU1QX0FTU09DX0lORk87Ci0KLXR5cGVkZWYgc3RydWN0ICByZWFkX2xvY19pbmZvX3QgewotICAgIHU4IHN0YXR1czsKLSAgICBMT0NBVElPTl9EQVRBX0NGRyAgIGxvYzsKLX1QT1NUUEFDSyBSRUFEX0xPQ19JTkZPOwotCi10eXBlZGVmIHN0cnVjdCAgcmVhZF9mbG93X2N0cmxfbW9kZV90IHsKLSAgICB1OCBzdGF0dXM7Ci0gICAgdTggbW9kZTsKLX1QT1NUUEFDSyBSRUFEX0ZMV0NUUkxfSU5GTzsKLQotdHlwZWRlZiBzdHJ1Y3QgIHJlYWRfZGF0YV9ibGtfc2l6ZV90IHsKLSAgICB1OCBzdGF0dXM7Ci0gICAgdTE2IG1heF9hY2xfZGF0YV9wa3RfbGVuOwotICAgIHUxNiBkYXRhX2Jsb2NrX2xlbjsKLSAgICB1MTYgdG90YWxfbnVtX2RhdGFfYmxrczsKLX1QT1NUUEFDSyBSRUFEX0RBVEFfQkxLX1NJWkVfSU5GTzsKLQotLyogUmVhZCBMaW5rIHF1YWxpdHkgaW5mbyAqLwotdHlwZWRlZiBzdHJ1Y3QgbGlua19xdWFsX3QgewotICAgIHU4IHN0YXR1czsKLSAgICB1MTYgaGRsOwotICAgIHU4IGxpbmtfcXVhbDsKLX0gUE9TVFBBQ0sgUkVBRF9MSU5LX1FVQUxfSU5GTywKLSAgICAgICAgICAgIFJFQURfUlNTSV9JTkZPOwotCi10eXBlZGVmIHN0cnVjdCBsbF9jYW5jZWxfcmVzcF90IHsKLSAgICB1OCBzdGF0dXM7Ci0gICAgdTggcGh5X2xpbmtfaGRsOwotICAgIHU4IHR4X2Zsb3dfc3BlY19pZDsKLX0gUE9TVFBBQ0sgTExfQ0FOQ0VMX1JFU1A7Ci0KLXR5cGVkZWYgc3RydWN0IHJlYWRfbG9jYWxfdmVyX2luZm9fdCB7Ci0gICAgdTggc3RhdHVzOwotICAgIHU4IGhjaV92ZXJzaW9uOwotICAgIHUxNiBoY2lfcmV2aXNpb247Ci0gICAgdTggcGFsX3ZlcnNpb247Ci0gICAgdTE2IG1hbmZfbmFtZTsKLSAgICB1MTYgcGFsX3N1Yl92ZXI7Ci19IFBPU1RQQUNLIFJFQURfTE9DQUxfVkVSX0lORk87Ci0KLQotI2VuZGlmICAvKiBfX0FfSENJX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9ibWlfbXNnLmggYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL2JtaV9tc2cuaAppbmRleCBlNzY2MjRjLi44NGU4ZGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL2JtaV9tc2cuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL2JtaV9tc2cuaApAQCAtMjIsMTAgKzIyLDYgQEAKICNpZm5kZWYgX19CTUlfTVNHX0hfXwogI2RlZmluZSBfX0JNSV9NU0dfSF9fCiAKLSNpZm5kZWYgQVRIX1RBUkdFVAotI2luY2x1ZGUgImF0aHN0YXJ0cGFjay5oIgotI2VuZGlmCi0KIC8qCiAgKiBCb290bG9hZGVyIE1lc3NhZ2luZyBJbnRlcmZhY2UgKEJNSSkKICAqCkBAIC0yMzQsOCArMjMwLDQgQEAKICAgICAgICAgICogTm90ZTogTm90IHN1cHBvcnRlZCBvbiBhbGwgdmVyc2lvbnMgb2YgUk9NIGZpcm13YXJlLgogICAgICAgICAgKi8KIAotI2lmbmRlZiBBVEhfVEFSR0VUCi0jaW5jbHVkZSAiYXRoZW5kcGFjay5oIgotI2VuZGlmCi0KICNlbmRpZiAvKiBfX0JNSV9NU0dfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL2J0Y29leEdwaW8uaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vYnRjb2V4R3Bpby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDVhMjM5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vYnRjb2V4R3Bpby5oCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEwIEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgotLy8gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIAotLy8KLS8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotLy8gcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLS8vCi0vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLS8vIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLS8vIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0vLyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0vLyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLS8vIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0vLyBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotLy8KLS8vCi0KLSNpZm5kZWYgQlRDT0VYX0dQSU9fSF8KLSNkZWZpbmUgQlRDT0VYX0dQSU9fSF8KLQotCi0KLSNpZmRlZiBGUEdBCi0jZGVmaW5lIEdQSU9fQSAgICAgICgxNSkKLSNkZWZpbmUgR1BJT19CICAgICAgKDE2KQotI2RlZmluZSBHUElPX0MgICAgICAoMTcpCi0jZGVmaW5lIEdQSU9fRCAgICAgICgxOCkKLSNkZWZpbmUgR1BJT19FICAgICAgKDE5KQotI2RlZmluZSBHUElPX0YgICAgICAoMjEpCi0jZGVmaW5lIEdQSU9fRyAgICAgICgyMSkKLSNlbHNlCi0jZGVmaW5lIEdQSU9fQSAgICAgICgwKQotI2RlZmluZSBHUElPX0IgICAgICAoNSkKLSNkZWZpbmUgR1BJT19DICAgICAgKDYpCi0jZGVmaW5lIEdQSU9fRCAgICAgICg3KQotI2RlZmluZSBHUElPX0UgICAgICAoNykKLSNkZWZpbmUgR1BJT19GICAgICAgKDcpCi0jZGVmaW5lIEdQSU9fRyAgICAgICg3KQotI2VuZGlmCi0KLQotCi0KLQotI2RlZmluZSBHUElPX0RFQlVHX1dPUkRfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxPDxHUElPX0EpCi0jZGVmaW5lIEdQSU9fREVCVUdfV09SRF8yICAgICAgICAgICAgICAgICAgICgxPDxHUElPX0IpCi0jZGVmaW5lIEdQSU9fREVCVUdfV09SRF8zICAgICAgICAgICAgICAgICAgKCgxPDxHUElPX0IpIHwgKDE8PEdQSU9fQSkpCi0jZGVmaW5lIEdQSU9fREVCVUdfV09SRF80ICAgICAoMTw8R1BJT19DKQotI2RlZmluZSBHUElPX0RFQlVHX1dPUkRfNSAgICAoKDE8PEdQSU9fQykgfCAgICAgICAgICAgICAgICgxPDxHUElPX0EpKQotI2RlZmluZSBHUElPX0RFQlVHX1dPUkRfNiAgICAoKDE8PEdQSU9fQykgfCAoMTw8R1BJT19CKSkKLSNkZWZpbmUgR1BJT19ERUJVR19XT1JEXzcgICAgKCgxPDxHUElPX0MpIHwgKDE8PEdQSU9fQikgfCAoMTw8R1BJT19BKSkKLQotI2RlZmluZSBHUElPX0RFQlVHX1dPUkRfOCAgICAgKDE8PEdQSU9fRCkKLSNkZWZpbmUgR1BJT19ERUJVR19XT1JEXzkgICAgKCgxPDxHUElPX0QpIHwgR1BJT19ERUJVR19XT1JEXzEpCi0jZGVmaW5lIEdQSU9fREVCVUdfV09SRF8xMCAgICgoMTw8R1BJT19EKSB8IEdQSU9fREVCVUdfV09SRF8yKQotI2RlZmluZSBHUElPX0RFQlVHX1dPUkRfMTEgICAoKDE8PEdQSU9fRCkgfCBHUElPX0RFQlVHX1dPUkRfMykKLSNkZWZpbmUgR1BJT19ERUJVR19XT1JEXzEyICAgKCgxPDxHUElPX0QpIHwgR1BJT19ERUJVR19XT1JEXzQpCi0jZGVmaW5lIEdQSU9fREVCVUdfV09SRF8xMyAgICgoMTw8R1BJT19EKSB8IEdQSU9fREVCVUdfV09SRF81KQotI2RlZmluZSBHUElPX0RFQlVHX1dPUkRfMTQgICAoKDE8PEdQSU9fRCkgfCBHUElPX0RFQlVHX1dPUkRfNikKLSNkZWZpbmUgR1BJT19ERUJVR19XT1JEXzE1ICAgKCgxPDxHUElPX0QpIHwgR1BJT19ERUJVR19XT1JEXzcpCi0KLSNkZWZpbmUgR1BJT19ERUJVR19XT1JEXzE2ICAgKDE8PEdQSU9fRSkKLSNkZWZpbmUgR1BJT19ERUJVR19XT1JEXzE3ICAgICgoMTw8R1BJT19FKSB8IEdQSU9fREVCVUdfV09SRF8xKQotI2RlZmluZSBHUElPX0RFQlVHX1dPUkRfMTggICAoKDE8PEdQSU9fRSkgfCBHUElPX0RFQlVHX1dPUkRfMikKLSNkZWZpbmUgR1BJT19ERUJVR19XT1JEXzE5ICAgKCgxPDxHUElPX0UpIHwgR1BJT19ERUJVR19XT1JEXzMpCi0jZGVmaW5lIEdQSU9fREVCVUdfV09SRF8yMCAgICgoMTw8R1BJT19FKSB8IEdQSU9fREVCVUdfV09SRF80KQotI2RlZmluZSBHUElPX0RFQlVHX1dPUkRfMjEgICAoKDE8PEdQSU9fRSkgfCBHUElPX0RFQlVHX1dPUkRfNSkKLSNkZWZpbmUgR1BJT19ERUJVR19XT1JEXzIyICAgKCgxPDxHUElPX0UpIHwgR1BJT19ERUJVR19XT1JEXzYpCi0jZGVmaW5lIEdQSU9fREVCVUdfV09SRF8yMyAgICgoMTw8R1BJT19FKSB8IEdQSU9fREVCVUdfV09SRF83KQotCi0KLQotZXh0ZXJuIHZvaWQgYnRjb2V4RGJnUHVsc2VXb3JkKHUzMiBncGlvUGluTWFzayk7Ci1leHRlcm4gdm9pZCBidGNvZXhEYmdQdWxzZSh1MzIgcGluKTsKLQotI2lmZGVmIENPTkZJR19CVENPRVhfRU5BQkxFX0dQSU9fREVCVUcKLSNkZWZpbmUgQlRDT0VYX0RCR19QVUxTRV9XT1JEKGdwaW9QaW5NYXNrKSAgKGJ0Y29leERiZ1B1bHNlV29yZChncGlvUGluTWFzaykpCi0jZGVmaW5lIEJUQ09FWF9EQkdfUFVMU0UocGluKSAgICAgICAgICAgICAgIChidGNvZXhEYmdQdWxzZShwaW4pKQotI2Vsc2UKLSNkZWZpbmUgQlRDT0VYX0RCR19QVUxTRV9XT1JEKGdwaW9QaW5NYXNrKQotI2RlZmluZSBCVENPRVhfREJHX1BVTFNFKHBpbikKLQotI2VuZGlmCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9kYmdsb2cuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vZGJnbG9nLmgKaW5kZXggYjdhMTIzMC4uNTU2NmU1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9kYmdsb2cuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL2RiZ2xvZy5oCkBAIC0yNCwxMCArMjQsNiBAQAogI2lmbmRlZiBfREJHTE9HX0hfCiAjZGVmaW5lIF9EQkdMT0dfSF8KIAotI2lmbmRlZiBBVEhfVEFSR0VUCi0jaW5jbHVkZSAiYXRoc3RhcnRwYWNrLmgiCi0jZW5kaWYKLQogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgpAQCAtMTI3LDggKzEyMyw0IEBACiB9CiAjZW5kaWYKIAotI2lmbmRlZiBBVEhfVEFSR0VUCi0jaW5jbHVkZSAiYXRoZW5kcGFjay5oIgotI2VuZGlmCi0KICNlbmRpZiAvKiBfREJHTE9HX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL2RzZXRfaW50ZXJuYWwuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vZHNldF9pbnRlcm5hbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTQ3NTMzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vZHNldF9pbnRlcm5hbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIDxjb3B5cmlnaHQgZmlsZT0iZHNldF9pbnRlcm5hbC5oIiBjb21wYW55PSJBdGhlcm9zIj4KLS8vICAgIENvcHlyaWdodCAoYykgMjAwNC0yMDEwIEF0aGVyb3MgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gCi0vLwotLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0vLyBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotLy8KLS8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotLy8gV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotLy8gTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLS8vIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLS8vIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotLy8gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLS8vIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0vLwotLy8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gQXV0aG9yKHMpOiA9IkF0aGVyb3MiCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0KLSNpZm5kZWYgX19EU0VUX0lOVEVSTkFMX0hfXwotI2RlZmluZSBfX0RTRVRfSU5URVJOQUxfSF9fCi0KLSNpZm5kZWYgQVRIX1RBUkdFVAotI2luY2x1ZGUgImF0aHN0YXJ0cGFjay5oIgotI2VuZGlmCi0KLS8qCi0gKiBJbnRlcm5hbCBkc2V0IGRlZmluaXRpb25zLCBjb21tb24gZm9yIERhdGFTZXQgbGF5ZXIuCi0gKi8KLQotI2RlZmluZSBEU0VUX1RZUEVfU1RBTkRBUkQgICAgICAwCi0jZGVmaW5lIERTRVRfVFlQRV9CUEFUQ0hFRCAgICAgIDEKLSNkZWZpbmUgRFNFVF9UWVBFX0NPTVBSRVNTRUQgICAgMgotCi0vKiBEYXRhc2V0IGRlc2NyaXB0b3IgKi8KLQotdHlwZWRlZiBQUkVQQUNLIHN0cnVjdCBkc2V0X2Rlc2NyaXB0b3JfcyB7Ci0gIHN0cnVjdCBkc2V0X2Rlc2NyaXB0b3JfcyAgKm5leHQ7ICAgICAgICAgLyogTGlzdCBsaW5rLiBOVUxMIG9ubHkgYXQgdGhlIGxhc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yICovCi0gIHUxNiBpZDsgICAgICAgICAgIC8qIERzZXQgSUQgKi8KLSAgdTE2IHNpemU7ICAgICAgICAgLyogRHNldCBzaXplLiAqLwotICB2b2lkICAgICAgICAgICAgICAgICAgICAgICpEYXRhUHRyOyAgICAgIC8qIFBvaW50ZXIgdG8gcmF3IGRhdGEgZm9yIHN0YW5kYXJkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YVNldCBvciBwb2ludGVyIHRvIG9yaWdpbmFsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNldF9kZXNjcmlwdG9yIGZvciBwYXRjaGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YVNldCAqLwotICB1MzIgZGF0YV90eXBlOyAgICAvKiBEU0VUX1RZUEVfKiwgYWJvdmUgKi8KLQotICB2b2lkICAgICAgICAgICAgICAgICAgICAgICpBdXhQdHI7ICAgICAgIC8qIEFkZGl0aW9uYWwgZGF0YSB0aGF0IG1pZ2h0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZGVkIGZvciBkYXRhX3R5cGUuIEZvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4YW1wbGUsIHBvaW50ZXIgdG8gcGF0Y2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhc2V0IGRlc2NyaXB0b3IgZm9yIEJQYXRjaC4gKi8KLX0gUE9TVFBBQ0sgZHNldF9kZXNjcmlwdG9yX3Q7Ci0KLSNpZm5kZWYgQVRIX1RBUkdFVAotI2luY2x1ZGUgImF0aGVuZHBhY2suaCIKLSNlbmRpZgotCi0jZW5kaWYgLyogX19EU0VUX0lOVEVSTkFMX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9kc2V0aWQuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vZHNldGlkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5MGUzMDkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9kc2V0aWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gPGNvcHlyaWdodCBmaWxlPSJkc2V0aWQuaCIgY29tcGFueT0iQXRoZXJvcyI+Ci0vLyAgICBDb3B5cmlnaHQgKGMpIDIwMDQtMjAxMCBBdGhlcm9zIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIAotLy8KLS8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotLy8gcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLS8vCi0vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLS8vIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLS8vIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0vLyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0vLyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLS8vIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0vLyBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotLy8KLS8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIEF1dGhvcihzKTogPSJBdGhlcm9zIgotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCi0jaWZuZGVmIF9fRFNFVElEX0hfXwotI2RlZmluZSBfX0RTRVRJRF9IX18KLQotI2lmbmRlZiBBVEhfVEFSR0VUCi0jaW5jbHVkZSAiYXRoc3RhcnRwYWNrLmgiCi0jZW5kaWYKLQotLyogV2VsbC1rbm93biBEYXRhU2V0IElEcyAqLwotI2RlZmluZSBEU0VUSURfVU5VU0VEICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAotI2RlZmluZSBEU0VUSURfQk9BUkRfREFUQSAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBDYWwgYW5kIGJvYXJkIGRhdGEgKi8KLSNkZWZpbmUgRFNFVElEX1JFR0RCICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIgLyogUmVndWxhdG9yeSBEYXRhYmFzZSAqLwotI2RlZmluZSBEU0VUSURfUE9XRVJfQ09OVFJPTCAgICAgICAgICAgICAgMHgwMDAwMDAwMyAvKiBUWCBQd3IgTGltICYgQW50IEdhaW4gKi8KLSNkZWZpbmUgRFNFVElEX1VTRVJfQ09ORklHICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQgLyogVXNlciBDb25maWd1cmF0aW9uICovCi0KLSNkZWZpbmUgRFNFVElEX0FOQUxPR19DT05UUk9MX0RBVEFfU1RBUlQgIDB4MDAwMDAwMDUKLSNkZWZpbmUgRFNFVElEX0FOQUxPR19DT05UUk9MX0RBVEFfRU5EICAgIDB4MDAwMDAwMjUKLS8qCi0gKiBHZXQgRFNFVElEIGZvciB2YXJpb3VzIHJlZmVyZW5jZSBjbG9jayBzcGVlZHMuCi0gKiBGb3IgZWFjaCBzcGVlZCB0aGVyZSBhcmUgdGhyZWUgRGF0YVNldHMgdGhhdCBjb3JyZXNwb25kCi0gKiB0byB0aGUgdGhyZWUgY29sdW1ucyBvZiBiYW5rNiBkYXRhIChhZGRyLCAxMWEsIDExYi9nKS4KLSAqIFRoaXMgbWFjcm8gcmV0dXJucyB0aGUgZHNldGlkIG9mIHRoZSBmaXJzdCBvZiB0aG9zZQotICogdGhyZWUgRGF0YVNldHMuCi0gKi8KLSNkZWZpbmUgQU5BTE9HX0NPTlRST0xfREFUQV9EU0VUSUQocmVmY2xrKSBcCi0gICAgICAgIChEU0VUSURfQU5BTE9HX0NPTlRST0xfREFUQV9TVEFSVCArIDMqcmVmY2xrKQotCi0vKgotICogVGhlcmUgYXJlIFRXTyBTVEFSVFVQX1BBVENIIERhdGFTZXRzLgotICogRFNFVElEX1NUQVJUVVBfUEFUQ0ggaXMgaGlzdG9yaWNhbCwgYW5kIHdhcyBhcHBsaWVkIGJlZm9yZSBCTUkgb24KLSAqIGVhcmxpZXIgc3lzdGVtcy4gIE9uIEFSNjAwMiwgaXQgaXMgYXBwbGllZCBhZnRlciBCTUksIGp1c3QgbGlrZQotICogRFNFVElEX1NUQVJUVVBfUEFUQ0gyLgotICovCi0jZGVmaW5lIERTRVRJRF9TVEFSVFVQX1BBVENIICAgICAgICAgICAgICAweDAwMDAwMDI2Ci0jZGVmaW5lIERTRVRJRF9HUElPX0NPTkZJR19QQVRDSCAgICAgICAgICAweDAwMDAwMDI3Ci0jZGVmaW5lIERTRVRJRF9XTEFOUkVHUyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4IC8qIG92ZXJyaWRlIHdsYW4gcmVncyAqLwotI2RlZmluZSBEU0VUSURfU1RBUlRVUF9QQVRDSDIgICAgICAgICAgICAgMHgwMDAwMDAyOQotCi0jZGVmaW5lIERTRVRJRF9XT1dfQ09ORklHICAgICAgICAgICAgICAgICAweDAwMDAwMDkwIC8qIFdvVyBDb25maWd1cmF0aW9uICovCi0KLS8qIEFkZCBXSEFMX0lOSV9EQVRBX0lEIHRvIERTRVRJRF9JTklfREFUQSBmb3IgYSBzcGVjaWZpYyBXSEFMIElOSSB0YWJsZS4gKi8KLSNkZWZpbmUgRFNFVElEX0lOSV9EQVRBICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKLS8qIFJlc2VydmVkIGZvciBXSEFMIElOSSBUYWJsZXM6IDB4MTAwLi4weDExZiAqLwotI2RlZmluZSBEU0VUSURfSU5JX0RBVEFfRU5EICAgICAgICAgICAgICAgMHgwMDAwMDExZgotCi0jZGVmaW5lIERTRVRJRF9WRU5ET1JfU1RBUlQgICAgICAgICAgICAgICAweDAwMDEwMDAwIC8qIFZlbmRvci1kZWZpbmVkIERhdGFTZXRzICovCi0KLSNkZWZpbmUgRFNFVElEX0lOREVYX0VORCAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmUgLyogUmVzZXJ2ZWQgdG8gaW5kaWNhdGUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCBvZiBhIG1lbW9yeS1iYXNlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhU2V0IEluZGV4ICovCi0jZGVmaW5lIERTRVRJRF9JTkRFWF9GUkVFICAgICAgICAgICAgICAgICAweGZmZmZmZmZmIC8qIEFuIHVudXNlZCBpbmRleCBlbnRyeSAqLwotCi0vKiAKLSAqIFBBVENIIERhdGFTZXQgZm9ybWF0OgotICogQSBsaXN0IG9mIHBhdGNoZXMsIHRlcm1pbmF0ZWQgYnkgYSBwYXRjaCB3aXRoCi0gKiBhZGRyZXNzPVBBVENIX0VORC4KLSAqCi0gKiBUaGlzIGFsbG93cyBmb3IgcGF0Y2hlcyB0byBiZSBzdG9yZWQgaW4gZmxhc2guCi0gKi8KLVBSRVBBQ0sgc3RydWN0IHBhdGNoX3MgewotICAgIHUzMiAqYWRkcmVzczsKLSAgICB1MzIgZGF0YTsKLX0gUE9TVFBBQ0sgOwotCi0vKgotICogU2tpcCBzb21lIHBhdGNoZXMuICBDYW4gYmUgdXNlZCB0byBlcmFzZSBhIHNpbmdsZSBwYXRjaCBpbiBhCi0gKiBwYXRjaCBEYXRhU2V0IHdpdGhvdXQgaGF2aW5nIHRvIHJlLXdyaXRlIHRoZSBEYXRhU2V0LiAgTWF5Ci0gKiBhbHNvIGJlIHVzZWQgdG8gZW1iZWQgaW5mb3JtYXRpb24gZm9yIHVzZSBieSBzdWJzZXF1ZW50Ci0gKiBwYXRjaCBjb2RlLiAgVGhlICJkYXRhIiBpbiBhIFBBVENIX1NLSVAgdGVsbHMgaG93IG1hbnkKLSAqIGJ5dGVzIG9mIGxlbmd0aCAicGF0Y2hfcyIgdG8gc2tpcC4KLSAqLwotI2RlZmluZSBQQVRDSF9TS0lQICAgICAgKCh1MzIgKikweDAwMDAwMDAwKQotCi0vKgotICogRXhlY3V0ZSBjb2RlIGF0IHRoZSBhZGRyZXNzIHNwZWNpZmllZCBieSAiZGF0YSIuCi0gKiBUaGUgYWRkcmVzcyBvZiB0aGUgcGF0Y2ggc3RydWN0dXJlIGlzIHBhc3NlZCBhcwotICogdGhlIG9uZSBwYXJhbWV0ZXIuCi0gKi8KLSNkZWZpbmUgUEFUQ0hfQ09ERV9BQlMgICgodTMyICopMHgwMDAwMDAwMSkKLQotLyoKLSAqIFNhbWUgYXMgUEFUQ0hfQ09ERV9BQlMsIGJ1dCB0cmVhdCAiZGF0YSIgYXMgYW4KLSAqIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGF0Y2ggd29yZC4KLSAqLwotI2RlZmluZSBQQVRDSF9DT0RFX1JFTCAgKCh1MzIgKikweDAwMDAwMDAyKQotCi0vKiBNYXJrIHRoZSBlbmQgb2YgdGhpcyBwYXRjaCBEYXRhU2V0LiAqLwotI2RlZmluZSBQQVRDSF9FTkQgICAgICAgKCh1MzIgKikweGZmZmZmZmZmKQotCi0vKgotICogQSBEYXRhU2V0IHdoaWNoIGNvbnRhaW5zIGEgQmluYXJ5IFBhdGNoIHRvIHNvbWUgb3RoZXIgRGF0YVNldAotICogdXNlcyB0aGUgb3JpZ2luYWwgZHNldGlkIHdpdGggdGhlIERTRVRJRF9CUEFUQ0hfRkxBRyBiaXQgc2V0LgotICogU3VjaCBhIEJQYXRjaCBEYXRhU2V0IGNvbnNpc3RzIG9mIEJQYXRjaCBtZXRhZGF0YSBmb2xsb3dlZCBieQotICogdGhlIGJkaWZmIGJ5dGVzLiAgQlBhdGNoIG1ldGFkYXRhIGNvbnNpc3RzIG9mIGEgc2luZ2xlIDMyLWJpdAotICogd29yZCB0aGF0IGNvbnRhaW5zIHRoZSBzaXplIG9mIHRoZSBCUGF0Y2hlZCBmaW5hbCBpbWFnZS4KLSAqCi0gKiBUbyBjcmVhdGUgYSBzdWl0YWJsZSBiZGlmZiBEYXRhU2V0LCB1c2UgYmRpZmYgaW4gaG9zdC90b29scy9iZGlmZgotICogdG8gY3JlYXRlICJkaWZmcyI6Ci0gKiAgYmRpZmYgLXEgLU8gLW5vb2xkbWQ1IC1ub25ld21kNSAtZCBPUklHZmlsZSBORVdmaWxlIGRpZmZzCi0gKiBUaGVuIGFkZCBCUGF0Y2ggbWV0YWRhdGEgdG8gdGhlIHN0YXJ0IG9mICJkaWZmcyIuCi0gKgotICogTkI6IFRoZXJlIGFyZSBzb21lIGltcGxlbWVudGF0aW9uLWluZHVjZWQgcmVzdHJpY3Rpb25zCi0gKiBvbiB3aGljaCBEYXRhU2V0cyBjYW4gYmUgQlBhdGNoZWQuCi0gKi8KLSNkZWZpbmUgRFNFVElEX0JQQVRDSF9GTEFHICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKLQotI2lmbmRlZiBBVEhfVEFSR0VUCi0jaW5jbHVkZSAiYXRoZW5kcGFjay5oIgotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX0RTRVRJRF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vZXBwaW5nX3Rlc3QuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vZXBwaW5nX3Rlc3QuaAppbmRleCA3MDI3ZmFjLi45ZWI1ZmRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL2VwcGluZ190ZXN0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9lcHBpbmdfdGVzdC5oCkBAIC0yNSwxMCArMjUsNiBAQAogI2lmbmRlZiBFUFBJTkdfVEVTVF9IXwogI2RlZmluZSBFUFBJTkdfVEVTVF9IXwogCi0jaWZuZGVmIEFUSF9UQVJHRVQKLSNpbmNsdWRlICJhdGhzdGFydHBhY2suaCIKLSNlbmRpZgotCiAgICAgLyogYWxpZ25tZW50IHRvIDQtYnl0ZXMgKi8KICNkZWZpbmUgRVBQSU5HX0FMSUdOTUVOVF9QQUQgICgoKHNpemVvZihzdHJ1Y3QgaHRjX2ZyYW1lX2hkcikgKyAzKSAmICh+MHgzKSkgLSBzaXplb2Yoc3RydWN0IGh0Y19mcmFtZV9oZHIpKQogCkBAIC0xMTIsOSArMTA4LDQgQEAKICNkZWZpbmUgSENJX1RSQU5TUE9SVF9TVFJFQU1fTlVNICAxNiAgLyogdGhpcyBudW1iZXIgaXMgaGlnaGVyIHRoYW4gdGhlIGRlZmluZSBXTU0gQUMgY2xhc3NlcyBzbyB3ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW4gdXNlIHRoaXMgdG8gZGlzdGluZ3Vpc2ggcGFja2V0cyAqLwogCi0jaWZuZGVmIEFUSF9UQVJHRVQKLSNpbmNsdWRlICJhdGhlbmRwYWNrLmgiCi0jZW5kaWYKLSAgICAKLSAgICAKICNlbmRpZiAvKkVQUElOR19URVNUX0hfKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vZ21ib3hpZi5oIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9nbWJveGlmLmgKaW5kZXggZGQ5YWZiZC4uZWExMWMxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9nbWJveGlmLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9nbWJveGlmLmgKQEAgLTIzLDEwICsyMyw2IEBACiAjaWZuZGVmIF9fR01CT1hJRl9IX18KICNkZWZpbmUgX19HTUJPWElGX0hfXwogCi0jaWZuZGVmIEFUSF9UQVJHRVQKLSNpbmNsdWRlICJhdGhzdGFydHBhY2suaCIKLSNlbmRpZgotCiAvKiBHTUJPWCBpbnRlcmZhY2UgZGVmaW5pdGlvbnMgKi8KICAgICAKICNkZWZpbmUgQVI2S19HTUJPWF9DUkVESVRfQ09VTlRFUiAgICAgICAxICAgLyogd2UgdXNlIGNyZWRpdCBjb3VudGVyIDEgdG8gdHJhY2sgY3JlZGl0cyAqLwpAQCAtNzAsOSArNjYsNSBAQAogI2RlZmluZSBNQk9YX1NJR19IQ0lfQlJJREdFX1BXUl9TQVZfT0ZGICAgNAogCiAKLSNpZm5kZWYgQVRIX1RBUkdFVAotI2luY2x1ZGUgImF0aGVuZHBhY2suaCIKLSNlbmRpZgotCiAjZW5kaWYgLyogX19HTUJPWElGX0hfXyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL2dwaW8uaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vZ3Bpby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzIzMDY2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vZ3Bpby5oCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENvcHlyaWdodCAoYykgMjAwNS0yMDEwIEF0aGVyb3MgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vCi0vLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLS8vIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0vLwotLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0vLyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0vLyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgotLy8gQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotLy8gV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0vLyBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgotLy8gT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLS8vCi0vLwotLy8KLS8vIEF1dGhvcihzKTogPSJBdGhlcm9zIgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2RlZmluZSBBUjYwMDFfR1BJT19QSU5fQ09VTlQgMTgKLSNkZWZpbmUgQVI2MDAyX0dQSU9fUElOX0NPVU5UIDE4Ci0jZGVmaW5lIEFSNjAwM19HUElPX1BJTl9DT1VOVCAyOAotCi0vKgotICogUG9zc2libGUgdmFsdWVzIGZvciBXTUlYX0dQSU9fU0VUX1JFR0lTVEVSX0NNRElELgotICogTkI6IFRoZXNlIG1hdGNoIGhhcmR3YXJlIG9yZGVyLCBzbyB0aGF0IGFkZHJlc3NlcyBjYW4KLSAqIGVhc2lseSBiZSBjb21wdXRlZC4KLSAqLwotI2RlZmluZSBHUElPX0lEX09VVCAgICAgICAgICAgICAweDAwMDAwMDAwCi0jZGVmaW5lIEdQSU9fSURfT1VUX1cxVFMgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgR1BJT19JRF9PVVRfVzFUQyAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBHUElPX0lEX0VOQUJMRSAgICAgICAgICAweDAwMDAwMDAzCi0jZGVmaW5lIEdQSU9fSURfRU5BQkxFX1cxVFMgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgR1BJT19JRF9FTkFCTEVfVzFUQyAgICAgMHgwMDAwMDAwNQotI2RlZmluZSBHUElPX0lEX0lOICAgICAgICAgICAgICAweDAwMDAwMDA2Ci0jZGVmaW5lIEdQSU9fSURfU1RBVFVTICAgICAgICAgIDB4MDAwMDAwMDcKLSNkZWZpbmUgR1BJT19JRF9TVEFUVVNfVzFUUyAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBHUElPX0lEX1NUQVRVU19XMVRDICAgICAweDAwMDAwMDA5Ci0jZGVmaW5lIEdQSU9fSURfUElOMCAgICAgICAgICAgIDB4MDAwMDAwMGEKLSNkZWZpbmUgR1BJT19JRF9QSU4obikgICAgICAgICAgKEdQSU9fSURfUElOMCsobikpCi0KLSNkZWZpbmUgR1BJT19MQVNUX1JFR0lTVEVSX0lEICAgR1BJT19JRF9QSU4oMTcpCi0jZGVmaW5lIEdQSU9fSURfTk9ORSAgICAgICAgICAgIDB4ZmZmZmZmZmYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vZ3Bpb19yZWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vZ3Bpb19yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWQ0MjVkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9ncGlvX3JlZy5oCkBAIC0wLDAgKzEsOSBAQAorI2lmbmRlZiBfR1BJT19SRUdfUkVHX0hfCisjZGVmaW5lIF9HUElPX1JFR19SRUdfSF8KKworI2RlZmluZSBHUElPX1BJTjEwX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNTAKKyNkZWZpbmUgR1BJT19QSU4xMV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDU0CisjZGVmaW5lIEdQSU9fUElOMTJfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1OAorI2RlZmluZSBHUElPX1BJTjEzX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNWMKKworI2VuZGlmIC8qIF9HUElPX1JFR19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9odGMuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vaHRjLmgKaW5kZXggYjlkNDQ5NS4uODVjYmZhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9odGMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL2h0Yy5oCkBAIC0yNCwxMCArMjQsNiBAQAogI2lmbmRlZiBfX0hUQ19IX18KICNkZWZpbmUgX19IVENfSF9fCiAKLSNpZm5kZWYgQVRIX1RBUkdFVAotI2luY2x1ZGUgImF0aHN0YXJ0cGFjay5oIgotI2VuZGlmCi0KICNkZWZpbmUgQV9PRkZTRVRPRih0eXBlLGZpZWxkKSAodW5zaWduZWQgbG9uZykoJigoKHR5cGUgKilOVUxMKS0+ZmllbGQpKQogCiAjZGVmaW5lIEFTU0VNQkxFX1VOQUxJR05FRF9VSU5UMTYocCxoaWdoYnl0ZSxsb3dieXRlKSBcCkBAIC0yMjcsMTAgKzIyMyw1IEBACiAgICAgdTggTG9va0FoZWFkWzRdOyAgICAgLyogNCBieXRlIGxvb2thaGVhZCAqLwogfSBQT1NUUEFDSyBIVENfQlVORExFRF9MT09LQUhFQURfUkVQT1JUOwogCi0jaWZuZGVmIEFUSF9UQVJHRVQKLSNpbmNsdWRlICJhdGhlbmRwYWNrLmgiCi0jZW5kaWYKLQotCiAjZW5kaWYgLyogX19IVENfSF9fICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vaW5pX2RzZXQuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vaW5pX2RzZXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTllMDVmYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL2luaV9kc2V0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ29weXJpZ2h0IChjKSAyMDA0LTIwMTAgQXRoZXJvcyBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLwotLy8KLS8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotLy8gcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLS8vCi0vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLS8vIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLS8vIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0vLyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0vLyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLS8vIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0vLyBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotLy8KLS8vCi0vLwotLy8gQXV0aG9yKHMpOiA9IkF0aGVyb3MiCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jaWZuZGVmIF9JTklfRFNFVF9IXwotI2RlZmluZSBfSU5JX0RTRVRfSF8KLQotLyoKLSAqIEVhY2ggb2YgdGhlc2UgcmVwcmVzZW50cyBhIFdIQUwgSU5JIHRhYmxlLCB3aGljaCBjb25zaXN0cwotICogb2YgYW4gImFkZHJlc3MgY29sdW1uIiBmb2xsb3dlZCBieSAxIG9yIG1vcmUgInZhbHVlIGNvbHVtbnMiLgotICoKLSAqIFNvZnR3YXJlIHVzZXMgdGhlIGJhc2UgV0hBTF9JTklfREFUQV9JRCtjb2x1bW4gdG8gYWNjZXNzIGEKLSAqIERhdGFTZXQgdGhhdCBob2xkcyBhIHBhcnRpY3VsYXIgY29sdW1uIG9mIGRhdGEuCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0jaWYgZGVmaW5lZChBUjYwMDJfUkVWNCkgfHwgZGVmaW5lZChBUjYwMDMpCi0vKiBBZGQgdGhlc2UgZGVmaW5pdGlvbnMgZm9yIGNvbXBhdGliaWxpdHkgICovCi0jZGVmaW5lIFdIQUxfSU5JX0RBVEFfSURfQkJfUkZHQUlOX0xOQTEgV0hBTF9JTklfREFUQV9JRF9CQl9SRkdBSU4KLSNkZWZpbmUgV0hBTF9JTklfREFUQV9JRF9CQl9SRkdBSU5fTE5BMiBXSEFMX0lOSV9EQVRBX0lEX0JCX1JGR0FJTgotICAgIFdIQUxfSU5JX0RBVEFfSURfTlVMTCAgICAgICAgICAgICAgID0wLAotICAgIFdIQUxfSU5JX0RBVEFfSURfTU9ERV9TUEVDSUZJQyAgICAgID0xLCAgLyogMiwzLDQsNSAqLwotICAgIFdIQUxfSU5JX0RBVEFfSURfQ09NTU9OICAgICAgICAgICAgID02LCAgLyogNyAqLwotICAgIFdIQUxfSU5JX0RBVEFfSURfQkJfUkZHQUlOICAgICAgICAgID04LCAgLyogOSwxMCAqLwotI2lmZGVmIEZQR0EKLSAgICBXSEFMX0lOSV9EQVRBX0lEX0FOQUxPR19CQU5LMCAgICAgICA9MTEsIC8qIDEyICovCi0gICAgV0hBTF9JTklfREFUQV9JRF9BTkFMT0dfQkFOSzEgICAgICAgPTEzLCAvKiAxNCAqLwotICAgIFdIQUxfSU5JX0RBVEFfSURfQU5BTE9HX0JBTksyICAgICAgID0xNSwgLyogMTYgKi8KLSAgICBXSEFMX0lOSV9EQVRBX0lEX0FOQUxPR19CQU5LMyAgICAgICA9MTcsIC8qIDE4LCAxOSAqLwotICAgIFdIQUxfSU5JX0RBVEFfSURfQU5BTE9HX0JBTks2ICAgICAgID0yMCwgLyogMjEsMjIgKi8KLSAgICBXSEFMX0lOSV9EQVRBX0lEX0FOQUxPR19CQU5LNyAgICAgICA9MjMsIC8qIDI0ICovCi0gICAgV0hBTF9JTklfREFUQV9JRF9BRERBQyAgICAgICAgICAgICAgPTI1LCAvKiAyNiAqLwotI2Vsc2UKLSAgICBXSEFMX0lOSV9EQVRBX0lEX0FOQUxPR19DT01NT04gICAgICA9MTEsIC8qIDEyICovIAotICAgIFdIQUxfSU5JX0RBVEFfSURfQU5BTE9HX01PREVfU1BFQ0lGSUM9MTMsIC8qIDE0LDE1ICovIAotICAgIFdIQUxfSU5JX0RBVEFfSURfQU5BTE9HX0JBTks2ICAgICAgID0xNiwgLyogMTcsMTggKi8KLSAgICBXSEFMX0lOSV9EQVRBX0lEX01PREVfT1ZFUlJJREVTICAgICA9MTksIC8qIDIwLDIxLDIyLDIzICovCi0gICAgV0hBTF9JTklfREFUQV9JRF9DT01NT05fT1ZFUlJJREVTICAgPTI0LCAvKiAyNSAqLwotICAgIFdIQUxfSU5JX0RBVEFfSURfQU5BTE9HX09WRVJSSURFUyAgID0yNiwgLyogMjcsMjggKi8KLSNlbmRpZiAvKiBGUEdBICovCi0jZWxzZQotICAgIFdIQUxfSU5JX0RBVEFfSURfTlVMTCAgICAgICAgICAgICAgID0wLAotICAgIFdIQUxfSU5JX0RBVEFfSURfTU9ERV9TUEVDSUZJQyAgICAgID0xLCAgLyogMiwzICovCi0gICAgV0hBTF9JTklfREFUQV9JRF9DT01NT04gICAgICAgICAgICAgPTQsICAvKiA1ICovCi0gICAgV0hBTF9JTklfREFUQV9JRF9CQl9SRkdBSU4gICAgICAgICAgPTYsICAvKiA3LDggKi8KLSNkZWZpbmUgV0hBTF9JTklfREFUQV9JRF9CQl9SRkdBSU5fTE5BMSBXSEFMX0lOSV9EQVRBX0lEX0JCX1JGR0FJTgotICAgIFdIQUxfSU5JX0RBVEFfSURfQU5BTE9HX0JBTksxICAgICAgID05LCAgLyogMTAgKi8KLSAgICBXSEFMX0lOSV9EQVRBX0lEX0FOQUxPR19CQU5LMiAgICAgICA9MTEsIC8qIDEyICovCi0gICAgV0hBTF9JTklfREFUQV9JRF9BTkFMT0dfQkFOSzMgICAgICAgPTEzLCAvKiAxNCwgMTUgKi8KLSAgICBXSEFMX0lOSV9EQVRBX0lEX0FOQUxPR19CQU5LNiAgICAgICA9MTYsIC8qIDE3LCAxOCAqLwotICAgIFdIQUxfSU5JX0RBVEFfSURfQU5BTE9HX0JBTks3ICAgICAgID0xOSwgLyogMjAgKi8KLSAgICBXSEFMX0lOSV9EQVRBX0lEX01PREVfT1ZFUlJJREVTICAgICA9MjEsIC8qIDIyLDIzICovCi0gICAgV0hBTF9JTklfREFUQV9JRF9DT01NT05fT1ZFUlJJREVTICAgPTI0LCAvKiAyNSAqLwotICAgIFdIQUxfSU5JX0RBVEFfSURfQU5BTE9HX09WRVJSSURFUyAgID0yNiwgLyogMjcsMjggKi8KLSAgICBXSEFMX0lOSV9EQVRBX0lEX0JCX1JGR0FJTl9MTkEyICAgICA9MjksIC8qIDMwLDMxICovCi0jZW5kaWYKLSAgICBXSEFMX0lOSV9EQVRBX0lEX01BWCAgICAgICAgICAgICAgICA9MzEKLX0gV0hBTF9JTklfREFUQV9JRDsKLQotdHlwZWRlZiBQUkVQQUNLIHN0cnVjdCB7Ci0gICAgdTE2IGZyZXFJbmRleDsgLy8gMSAtIEEgbW9kZSAyIC0gQiBvciBHIG1vZGUgMCAtIGNvbW1vbgotICAgIHUxNiBvZmZzZXQ7Ci0gICAgdTMyIG5ld1ZhbHVlOwotfSBQT1NUUEFDSyBJTklfRFNFVF9SRUdfT1ZFUlJJREU7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9yZWdEYi5oIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9yZWdEYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODI0NWYxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vcmVnRGIuaAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDUtMjAxMCBBdGhlcm9zIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIAotLy8KLS8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotLy8gcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLS8vCi0vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLS8vIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLS8vIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0vLyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0vLyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLS8vIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0vLyBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotLy8KLS8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIEF1dGhvcihzKTogPSJBdGhlcm9zIgotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotI2lmbmRlZiBfX1JFR19EQl9IX18KLSNkZWZpbmUgX19SRUdfREJfSF9fCi0KLSNpbmNsdWRlICIuL3JlZ3VsYXRvcnkvcmVnX2Ric2NoZW1hLmgiCi0jaW5jbHVkZSAiLi9yZWd1bGF0b3J5L3JlZ19kYnZhbHVlcy5oIgotCi0jZW5kaWYgIC8qIF9fUkVHX0RCX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9yZWdkdW1wLmggYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL3JlZ2R1bXAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWE2NDgyMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL3JlZ2R1bXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyA8Y29weXJpZ2h0IGZpbGU9InJlZ2R1bXAuaCIgY29tcGFueT0iQXRoZXJvcyI+Ci0vLyAgICBDb3B5cmlnaHQgKGMpIDIwMDQtMjAxMCBBdGhlcm9zIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIAotLy8KLS8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotLy8gcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLS8vCi0vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLS8vIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLS8vIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0vLyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0vLyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLS8vIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0vLyBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotLy8KLS8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIEF1dGhvcihzKTogPSJBdGhlcm9zIgotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotI2lmbmRlZiBfX1JFR0RVTVBfSF9fCi0jZGVmaW5lIF9fUkVHRFVNUF9IX18KLQotI2lmbmRlZiBBVEhfVEFSR0VUCi0jaW5jbHVkZSAiYXRoc3RhcnRwYWNrLmgiCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQVI2MDAxKQotI2luY2x1ZGUgIkFSNjAwMS9BUjYwMDFfcmVnZHVtcC5oIgotI2VuZGlmCi0jaWYgZGVmaW5lZChBUjYwMDIpCi0jaW5jbHVkZSAiQVI2MDAyL0FSNjAwMl9yZWdkdW1wLmgiCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKF9fQVNTRU1CTEVSX18pCi0vKgotICogVGFyZ2V0IENQVSBzdGF0ZSBhdCB0aGUgdGltZSBvZiBmYWlsdXJlIGlzIHJlZmxlY3RlZAotICogaW4gYSByZWdpc3RlciBkdW1wLCB3aGljaCB0aGUgSG9zdCBjYW4gZmV0Y2ggdGhyb3VnaAotICogdGhlIGRpYWdub3N0aWMgd2luZG93LgotICovCi1QUkVQQUNLIHN0cnVjdCByZWdpc3Rlcl9kdW1wX3MgewotICAgIHUzMiB0YXJnZXRfaWQ7ICAgICAgICAgICAgICAgLyogVGFyZ2V0IElEICovCi0gICAgdTMyIGFzc2xpbmU7ICAgICAgICAgICAgICAgICAvKiBMaW5lIG51bWJlciAoaWYgYXNzZXJ0aW9uIGZhaWx1cmUpICovCi0gICAgdTMyIHBjOyAgICAgICAgICAgICAgICAgICAgICAvKiBQcm9ncmFtIENvdW50ZXIgYXQgdGltZSBvZiBleGNlcHRpb24gKi8KLSAgICB1MzIgYmFkdmFkZHI7ICAgICAgICAgICAgICAgIC8qIFZpcnR1YWwgYWRkcmVzcyBjYXVzaW5nIGV4Y2VwdGlvbiAqLwotICAgIENQVV9leGNlcHRpb25fZnJhbWVfdCBleGNfZnJhbWU7ICAvKiBDUFUtc3BlY2lmaWMgZXhjZXB0aW9uIGluZm8gKi8KLQotICAgIC8qIENvdWxkIGNvcHkgdG9wIG9mIHN0YWNrIGhlcmUsIHRvby4uLi4gKi8KLX0gUE9TVFBBQ0s7Ci0jZW5kaWYgLyogX19BU1NFTUJMRVJfXyAqLwotCi0jaWZuZGVmIEFUSF9UQVJHRVQKLSNpbmNsdWRlICJhdGhlbmRwYWNrLmgiCi0jZW5kaWYKLQotI2VuZGlmIC8qIF9fUkVHRFVNUF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vcmVndWxhdG9yeS9yZWdfZGJzY2hlbWEuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vcmVndWxhdG9yeS9yZWdfZGJzY2hlbWEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDkwNDA0MC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL3JlZ3VsYXRvcnkvcmVnX2Ric2NoZW1hLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMzcgKzAsMCBAQAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENvcHlyaWdodCAoYykgMjAwNS0yMDEwIEF0aGVyb3MgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gCi0vLwotLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0vLyBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotLy8KLS8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotLy8gV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotLy8gTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLS8vIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLS8vIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotLy8gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLS8vIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0vLwotLy8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gQXV0aG9yKHMpOiA9IkF0aGVyb3MiCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0jaWZuZGVmIF9fUkVHX0RCU0NIRU1BX0hfXwotI2RlZmluZSBfX1JFR19EQlNDSEVNQV9IX18KLQotLyoKLSAqIFRoaXMgZmlsZSBkZXNjcmliZXMgdGhlIHJlZ3VsYXRvcnkgREIgc2NoZW1hLCB3aGljaCBpcyBjb21tb24gYmV0d2VlbiB0aGUKLSAqICdnZW5lcmF0b3InIGFuZCAncGFyc2VyJy4gVGhlICdnZW5lcmF0b3InIHJ1bnMgb24gYSBob3N0KHR5cGljYWxseSBhIHg4NgotICogTGludXgpIGFuZCBzcGl0cyBvdXRzIHR3byBiaW5hcnkgZmlsZXMsIHdoaWNoIGZvbGxvdyB0aGUgREIgZmlsZQotICogZm9ybWF0KGRlc2NyaWJlZCBiZWxvdykuIFRoZSByZXN1bHRhbnQgb3V0cHV0ICJyZWd1bGF0b3J5RGF0YV9BRy5iaW4iCi0gKiBpcyBiaW5hcnkgZmlsZSB3aGljaCBoYXMgaW5mb3JtYXRpb24gcmVnYXJkaW5nIEEgYW5kIEcgcmVndWxhdG9yeQotICogaW5mb3JtYXRpb24sIHdoaWxlIHRoZSAicmVndWxhdG9yeURhdGFfRy5iaW4iIGNvbnNpc3RzIG9mIEctT05MWSByZWd1bGF0b3J5Ci0gKiBpbmZvcm1hdGlvbi4gVGhpcyBiaW5hcnkgZmlsZSBpcyBwYXJzZWQgaW4gdGhlIHRhcmdldCBmb3IgZXh0cmFjdGluZwotICogcmVndWxhdG9yeSBpbmZvcm1hdGlvbi4KLSAqIAotICogVGhlIERCIHZhbHVlcyB1c2VkIHRvIHBvcHVsYXRlIHRoZSByZWd1bGF0b3J5IERCIGFyZSBkZWZpbmVkIGluCi0gKiByZWdfZGJ2YWx1ZXMuaAotICoKLSAqLwotCi0vKiBCaW5hcnkgZGF0YSBmaWxlIC0gUmVwcmVzZW50YXRpb24gb2YgUmVndWxhdG9yeSBEQiovCi0jZGVmaW5lIFJFR19EQVRBX0ZJTEVfQUcgICAgIi4vcmVndWxhdG9yeURhdGFfQUcuYmluIgotI2RlZmluZSBSRUdfREFUQV9GSUxFX0cgICAgICIuL3JlZ3VsYXRvcnlEYXRhX0cuYmluIgotCi0KLS8qIFRhYmxlIHRhZ3MgdXNlZCB0byBlbmNvZGUgZGlmZmVyZW50IHRhYmxlcyBpbiB0aGUgZGF0YWJhc2UgKi8KLWVudW0gZGF0YV90YWdzX3R7Ci0gICAgUkVHX0RNTl9QQUlSX01BUFBJTkdfVEFHID0gMCwKLSAgICBSRUdfQ09VTlRSWV9DT0RFX1RPX0VOVU1fUkRfVEFHLAotICAgIFJFR19ETU5fRlJFUV9CQU5EX3JlZ0RtbjVHaHpGcmVxX1RBRywKLSAgICBSRUdfRE1OX0ZSRVFfQkFORF9yZWdEbW4yR2h6MTFfQkdfRnJlcV9UQUcsCi0gICAgUkVHX0RPTUFJTl9UQUcsCi0gICAgTUFYX0RCX1RBQkxFX1RBR1MKLSAgICB9OwotCi0KLQotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSZWd1bGF0b3J5IERCIGZpbGUgZm9ybWF0IDoKLSAqIDQtYnl0ZXMgOiAiUkdEQiIgKE1hZ2ljIEtleSkKLSAqIDQtYnl0ZXMgOiB2ZXJzaW9uIChEZWZhdWx0IGlzIDUzNzkobXkgZXh0bikpCi0gKiA0LWJ5dGVzIDogbGVuZ3RoIG9mIGZpbGUKLSAqIGRiVHlwZSg0KQotICogVEFHKDQpCi0gKiBFbnRyaWVzKDEpZW50cnlTaXplKDEpc2VhcmNoVHlwZSgxKXJlc2VydmVkWzNddGFibGVTaXplKDIpIjB4ZGVhZGJlZWYiKDQpc3RydWN0X2RhdGEuLi4uCi0gKiBUQUcoNCkKLSAqIEVudHJpZXMoMSllbnRyeVNpemUoMSlzZWFyY2hUeXBlKDEpcmVzZXJ2ZWRbM110YWJsZVNpemUoMikiMHhkZWFkYmVlZiIoNClzdHJ1Y3RfZGF0YS4uLi4KLSAqIFRBRyg0KQotICogRW50cmllcygxKWVudHJ5U2l6ZSgxKXNlYXJjaFR5cGUoMSlyZXNlcnZlZFszXXRhYmxlU2l6ZSgyKSIweGRlYWRiZWVmIig0KXN0cnVjdF9kYXRhLi4uLgotICogLi4uCi0gKiAuLi4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICovCi0KLS8qCi0gKiBMZW5ndGggb2YgdGhlIGZpbGUgd291bGQgYmUgZmlsbGVkIGluIHdoZW4gdGhlIGZpbGUgaXMgY3JlYXRlZCBhbmQKLSAqIGl0IHdvdWxkIGluY2x1ZGUgdGhlIGhlYWRlciBzaXplLgotICovCi0KLSNkZWZpbmUgUkVHX0RCX0tFWSAgICAgICAgICAiUkdEQiIgLyogU2hvdWxkIGJlIEVYQUNUTFkgNC1ieXRlcyAqLwotI2RlZmluZSBSRUdfREJfVkVSICAgICAgICAgICA3ODAyICAvKiBCZXR3ZWVuIDAtOTk5OSAqLwotLyogIFJFR19EQl9WRVIgaGlzdG9yeSBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXI6IAotICogIDc4MDI6IDc4IChBU0NJSSBjb2RlIG9mIE4pICsgMDIgKG1pbm9yIHZlcnNpb24gbnVtYmVyKSAtIHVwZGF0ZWQgMTAvMjEvMDkgCi0gKiAgNzgwMTogNzggKEFTQ0lJIGNvZGUgb2YgTikgKyAwMSAobWlub3IgdmVyc2lvbiBudW1iZXIsIGluY3JlbWVudCBvbiBmdXJ0aGVyIGNoYW5nZXMpCi0gKiAgMTE3ODogJzExTicgPSAxMSArIEFTQ0lJIGNvZGUgb2YgTig3OCkKLSAqICA1Mzc5OiBpbml0aWFsIHZlcnNpb24sIG5vIDExTiBzdXBwb3J0Ci0gKi8KLSNkZWZpbmUgTUFHSUNfS0VZX09GRlNFVCAgICAwCi0jZGVmaW5lIFZFUlNJT05fT0ZGU0VUICAgICAgNAotI2RlZmluZSBGSUxFX1NaX09GRlNFVCAgICAgIDgKLSNkZWZpbmUgREJfVFlQRV9PRkZTRVQgICAgICAxMgotCi0jZGVmaW5lIE1BR0lDX0tFWV9TWiAgICAgICAgNAotI2RlZmluZSBWRVJTSU9OX1NaICAgICAgICAgIDQKLSNkZWZpbmUgRklMRV9TWl9TWiAgICAgICAgICA0Ci0jZGVmaW5lIERCX1RZUEVfU1ogICAgICAgICAgNAotI2RlZmluZSBEQl9UQUdfU1ogICAgICAgICAgIDQKLQotI2RlZmluZSBSRUdEQl9HRVRfTUFHSUNLRVkoeCkgICAgICgoY2hhciAqKXggKyBNQUdJQ19LRVlfT0ZGU0VUKSAKLSNkZWZpbmUgUkVHREJfR0VUX1ZFUlNJT04oeCkgICAgICAoKGNoYXIgKil4ICsgVkVSU0lPTl9PRkZTRVQpCi0jZGVmaW5lIFJFR0RCX0dFVF9GSUxFU0laRSh4KSAgICAgKigodW5zaWduZWQgaW50ICopKChjaGFyICopeCArIEZJTEVfU1pfT0ZGU0VUKSkKLSNkZWZpbmUgUkVHREJfR0VUX0RCVFlQRSh4KSAgICAgICAqKChjaGFyICopeCArIERCX1RZUEVfT0ZGU0VUKQotCi0jZGVmaW5lIFJFR0RCX1NFVF9GSUxFU0laRSh4LCBzel8pICooKHVuc2lnbmVkIGludCAqKSgoY2hhciAqKXggKyBGSUxFX1NaX09GRlNFVCkpID0gKHN6XykKLSNkZWZpbmUgUkVHREJfSVNfRU9GKGN1ciwgYmVnaW4pICAoIFJFR0RCX0dFVF9GSUxFU0laRShiZWdpbikgPiAoKGN1cikgLSAoYmVnaW4pKSApCi0KLQotLyogQSBUYWJsZSBjYW4gYmUgc2VhcmNoIGJhc2VkIG9uIGtleSBhcyBhIHBhcmFtZXRlciBvciBhY2Nlc3NlZCBkaXJlY3RseQotICogYnkgZ2l2aW5nIGl0cyBpbmRleCBpbiB0byB0aGUgdGFibGUuCi0gKi8KLWVudW0gc2VhcmNoVHlwZSB7Ci0gICAgS0VZX0JBU0VEX1RBQkxFX1NFQVJDSCA9IDEsCi0gICAgSU5ERVhfQkFTRURfVEFCTEVfQUNDRVNTCi0gICAgfTsKLQotCi0vKiBEYXRhIGlzIG9yZ2FuaXNlZCBhcyBkaWZmZXJlbnQgdGFibGVzLiBUaGVyZSBpcyBhIE1hc3RlciB0YWJsZSwgd2hpY2gKLSAqIGhvbGRzIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBhbGwgdGhlIHRhYmxlcy4gSXQgZG9lcyBub3QgaGF2ZSBhbnkKLSAqIGtub3dsZWRnZSBhYm91dCB0aGUgYXR0cmlidXRlcyBvZiB0aGUgdGFibGUgaXQgaXMgaG9sZGluZwotICogYnV0IGhhcyBleHRlcm5hbCB2aWV3IG9mIHRoZSBzYW1lKGZvciBleCwgaG93IG1hbnkgZW50cmllcywgcmVjb3JkIHNpemUsCi0gKiBob3cgdG8gc2VhcmNoIHRoZSB0YWJsZSwgdG90YWwgdGFibGUgc2l6ZSBhbmQgcmVmZXJlbmNlIHRvIHRoZSBkYXRhCi0gKiBpbnN0YW5jZSBvZiB0YWJsZSkuCi0gKi8KLXR5cGVkZWYgUFJFUEFDSyBzdHJ1Y3QgZGJNYXN0ZXJUYWJsZV90IHsgICAgLyogSG9sZCBwdHJzIHRvIFRhYmxlIGRhdGEgc3RydWN0dXJlcyAqLwotICAgIHU4ICAgICBudW1PZkVudHJpZXM7Ci0gICAgY2hhciBlbnRyeVNpemU7ICAgICAgLyogRW50cnkgc2l6ZSBwZXIgdGFibGUgcm93ICovCi0gICAgY2hhciBzZWFyY2hUeXBlOyAgICAgLyogSW5kZXggYmFzZWQgYWNjZXNzIG9yIGtleSBiYXNlZCAqLwotICAgIGNoYXIgcmVzZXJ2ZWRbM107ICAgIC8qIGZvciBhbGlnbm1lbnQgKi8KLSAgICB1MTYgdGFibGVTaXplOyAgICAgIC8qIFNpemUgb2YgdGhpcyB0YWJsZSAqLwotICAgIGNoYXIgKmRhdGFQdHI7ICAgICAgIC8qIFB0ciB0byB0aGUgYWN0dWFsIFRhYmxlICovCi19IFBPU1RQQUNLIGRiTWFzdGVyVGFibGU7ICAgIC8qIE1hc3RlciB0YWJsZSAtIHRhYmxlIG9mIHRhYmxlcyAqLwotCi0KLS8qIHVzZWQgdG8gZ2V0IHRoZSBudW1iZXIgb2Ygcm93cyBpbiBhIHRhYmxlICovCi0jZGVmaW5lIFJFR0RCX05VTV9PRl9ST1dTKGEpICAgIChzaXplb2YgKGEpIC8gc2l6ZW9mIChhWzBdKSkKLQotLyogCi0gKiBVc2VkIHRvIHNldCB0aGUgUmVnRG9tYWluIGJpdG1hc2sgd2hpY2ggY2hvb3NlcyB3aGljaCBmcmVxdWVuY3kKLSAqIGJhbmQgc3BlY3MgYXJlIHVzZWQuCi0gKi8KLQotI2RlZmluZSBCTUxFTiAyICAgICAgICAgLyogVXNlIDIgMzItYml0IHVpbnQgZm9yIGNoYW5uZWwgYml0bWFzayAqLwotI2RlZmluZSBCTVpFUk8gezAsMH0gICAgLyogQk1MRU4gemVyb3MgKi8KLQotI2RlZmluZSBCTShfZmEsIF9mYiwgX2ZjLCBfZmQsIF9mZSwgX2ZmLCBfZmcsIF9maCkgXAotICAgICAgeygoKChfZmEgPj0gMCkgJiYgKF9mYSA8IDMyKSkgPyAoKCh1MzIpIDEpIDw8IF9mYSkgOiAwKSB8IFwKLSAgICAoKChfZmIgPj0gMCkgJiYgKF9mYiA8IDMyKSkgPyAoKCh1MzIpIDEpIDw8IF9mYikgOiAwKSB8IFwKLSAgICAoKChfZmMgPj0gMCkgJiYgKF9mYyA8IDMyKSkgPyAoKCh1MzIpIDEpIDw8IF9mYykgOiAwKSB8IFwKLSAgICAoKChfZmQgPj0gMCkgJiYgKF9mZCA8IDMyKSkgPyAoKCh1MzIpIDEpIDw8IF9mZCkgOiAwKSB8IFwKLSAgICAoKChfZmUgPj0gMCkgJiYgKF9mZSA8IDMyKSkgPyAoKCh1MzIpIDEpIDw8IF9mZSkgOiAwKSB8IFwKLSAgICAoKChfZmYgPj0gMCkgJiYgKF9mZiA8IDMyKSkgPyAoKCh1MzIpIDEpIDw8IF9mZikgOiAwKSB8IFwKLSAgICAoKChfZmcgPj0gMCkgJiYgKF9mZyA8IDMyKSkgPyAoKCh1MzIpIDEpIDw8IF9mZykgOiAwKSB8IFwKLSAgICAoKChfZmggPj0gMCkgJiYgKF9maCA8IDMyKSkgPyAoKCh1MzIpIDEpIDw8IF9maCkgOiAwKSksIFwKLSAgICAgICAoKCgoX2ZhID4gMzEpICYmIChfZmEgPCA2NCkpID8gKCgodTMyKSAxKSA8PCAoX2ZhIC0gMzIpKSA6IDApIHwgXAotICAgICAgICAoKChfZmIgPiAzMSkgJiYgKF9mYiA8IDY0KSkgPyAoKCh1MzIpIDEpIDw8IChfZmIgLSAzMikpIDogMCkgfCBcCi0gICAgICAgICgoKF9mYyA+IDMxKSAmJiAoX2ZjIDwgNjQpKSA/ICgoKHUzMikgMSkgPDwgKF9mYyAtIDMyKSkgOiAwKSB8IFwKLSAgICAgICAgKCgoX2ZkID4gMzEpICYmIChfZmQgPCA2NCkpID8gKCgodTMyKSAxKSA8PCAoX2ZkIC0gMzIpKSA6IDApIHwgXAotICAgICAgICAoKChfZmUgPiAzMSkgJiYgKF9mZSA8IDY0KSkgPyAoKCh1MzIpIDEpIDw8IChfZmUgLSAzMikpIDogMCkgfCBcCi0gICAgICAgICgoKF9mZiA+IDMxKSAmJiAoX2ZmIDwgNjQpKSA/ICgoKHUzMikgMSkgPDwgKF9mZiAtIDMyKSkgOiAwKSB8IFwKLSAgICAgICAgKCgoX2ZnID4gMzEpICYmIChfZmcgPCA2NCkpID8gKCgodTMyKSAxKSA8PCAoX2ZnIC0gMzIpKSA6IDApIHwgXAotICAgICAgICAoKChfZmggPiAzMSkgJiYgKF9maCA8IDY0KSkgPyAoKCh1MzIpIDEpIDw8IChfZmggLSAzMikpIDogMCkpfQotCi0KLS8qCi0gKiBUSEUgZm9sbG93aW5nIHRhYmxlIGlzIHRoZSBtYXBwaW5nIG9mIHJlZ2RvbWFpbiBwYWlycyBzcGVjaWZpZWQgYnkKLSAqIGEgcmVnZG9tYWluIHZhbHVlIHRvIHRoZSBpbmRpdmlkdWFsIHVuaXRhcnkgcmVnIGRvbWFpbnMKLSAqLwotCi10eXBlZGVmIFBSRVBBQ0sgc3RydWN0IHJlZ19kbW5fcGFpcl9tYXBwaW5nIHsKLSAgICB1MTYgcmVnRG1uRW51bTsgICAgLyogMTYgYml0IHJlZyBkb21haW4gcGFpciAqLwotICAgIHUxNiByZWdEbW41R0h6OyAgICAvKiA1R0h6IHJlZyBkb21haW4gKi8KLSAgICB1MTYgcmVnRG1uMkdIejsgICAgLyogMkdIeiByZWcgZG9tYWluICovCi0gICAgdTggZmxhZ3M1R0h6OyAgICAgLyogUmVxdWlyZW1lbnRzIGZsYWdzIChBZEhvYyBkaXNhbGxvdyBldGMpICovCi0gICAgdTggZmxhZ3MyR0h6OyAgICAgLyogUmVxdWlyZW1lbnRzIGZsYWdzIChBZEhvYyBkaXNhbGxvdyBldGMpICovCi0gICAgdTMyIHBzY2FuTWFzazsgICAgIC8qIFBhc3NpdmUgU2NhbiBmbGFncyB3aGljaCBjYW4gb3ZlcnJpZGUgdW5pdGFyeSBkb21haW4gcGFzc2l2ZSBzY2FuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLiAgVGhpcyB2YWx1ZSBpcyB1c2VkIGFzIGEgbWFzayBvbiB0aGUgdW5pdGFyeSBmbGFncyovCi19IFBPU1RQQUNLIFJFR19ETU5fUEFJUl9NQVBQSU5HOwotCi0jZGVmaW5lIE9GRE1fWUVTICgxIDw8IDApCi0jZGVmaW5lIE9GRE1fTk8gICgwIDw8IDApCi0jZGVmaW5lIE1DU19IVDIwX1lFUyAgICgxIDw8IDEpCi0jZGVmaW5lIE1DU19IVDIwX05PICAgICgwIDw8IDEpCi0jZGVmaW5lIE1DU19IVDQwX0FfWUVTICgxIDw8IDIpCi0jZGVmaW5lIE1DU19IVDQwX0FfTk8gICgwIDw8IDIpCi0jZGVmaW5lIE1DU19IVDQwX0dfWUVTICgxIDw8IDMpCi0jZGVmaW5lIE1DU19IVDQwX0dfTk8gICgwIDw8IDMpCi0KLXR5cGVkZWYgUFJFUEFDSyBzdHJ1Y3QgewotICAgIHUxNiBjb3VudHJ5Q29kZTsKLSAgICB1MTYgcmVnRG1uRW51bTsKLSAgICBjaGFyIGlzb05hbWVbM107Ci0gICAgY2hhciBhbGxvd01vZGU7ICAvKiB3aGF0IG1vZGUgaXMgYWxsb3dlZCAtIGJpdCAwOiBPRkRNOyBiaXQgMTogTUNTX0hUMjA7IGJpdCAyOiBNQ1NfSFQ0MF9BOyBiaXQgMzogTUNTX0hUNDBfRyAqLwotfSBQT1NUUEFDSyBDT1VOVFJZX0NPREVfVE9fRU5VTV9SRDsKLQotLyogbG93ZXIgMTYgYml0cyBvZiBodDQwQ2hhbk1hc2sgKi8KLSNkZWZpbmUgTk9fRlJFUV9IVDQwICAgIDB4MCAgICAgLyogbm8gZnJlcSBpcyBIVDQwIGNhcGFibGUgKi8KLSNkZWZpbmUgRjFfVE9fRjRfSFQ0MCAgIDB4RiAgICAgLyogZnJlcSAxIHRvIDQgaW4gdGhlIGJsb2NrIGlzIGh0NDAgY2FwYWJsZSAqLwotI2RlZmluZSBGMl9UT19GM19IVDQwICAgMHg2ICAgICAvKiBmcmVxIDIgdG8gMyBpbiB0aGUgYmxvY2sgaXMgaHQ0MCBjYXBhYmxlICovCi0jZGVmaW5lIEYxX1RPX0YxMF9IVDQwICAweDNGRiAgIC8qIGZyZXEgMSB0byAxMCBpbiB0aGUgYmxvY2sgaXMgaHQ0MCBjYXBhYmxlICovCi0jZGVmaW5lIEYzX1RPX0YxMV9IVDQwICAweDdGQyAgIC8qIGZyZXEgMyB0byAxMSBpbiB0aGUgYmxvY2sgaXMgaHQ0MCBjYXBhYmxlICovCi0jZGVmaW5lIEYzX1RPX0Y5X0hUNDAgICAweDFGQyAgIC8qIGZyZXEgMyB0byA5IGluIHRoZSBibG9jayBpcyBodDQwIGNhcGFibGUgKi8KLSNkZWZpbmUgRjFfVE9fRjhfSFQ0MCAgIDB4RkYgICAgLyogZnJlcSAxIHRvIDggaW4gdGhlIGJsb2NrIGlzIGh0NDAgY2FwYWJsZSAqLwotI2RlZmluZSBGMV9UT19GNF9GOV9UT19GMTBfSFQ0MCAgIDB4MzBGICAgIC8qIGZyZXEgMSB0byA0LCA5IHRvIDEwIGluIHRoZSBibG9jayBpcyBodDQwIGNhcGFibGUgKi8KLQotLyogdXBwZXIgMTYgYml0cyBvZiBodDQwQ2hhbk1hc2sgKi8KLSNkZWZpbmUgRlJFUV9IQUxGX1JBVEUgICAgICAweDEwMDAwCi0jZGVmaW5lIEZSRVFfUVVBUlRFUl9SQVRFICAgMHgyMDAwMAotCi10eXBlZGVmIFBSRVBBQ0sgc3RydWN0IFJlZ0RtbkZyZXFCYW5kIHsKLSAgICB1MTYgbG93Q2hhbm5lbDsgICAgIC8qIExvdyBjaGFubmVsIGNlbnRlciBpbiBNSHogKi8KLSAgICB1MTYgaGlnaENoYW5uZWw7ICAgIC8qIEhpZ2ggQ2hhbm5lbCBjZW50ZXIgaW4gTUh6ICovCi0gICAgdTggcG93ZXI7ICAgICAgICAgIC8qIE1heCBwb3dlciAoZEJtKSBmb3IgY2hhbm5lbCByYW5nZSAqLwotICAgIHU4IGNoYW5uZWxTZXA7ICAgICAvKiBDaGFubmVsIHNlcGFyYXRpb24gd2l0aGluIHRoZSBiYW5kICovCi0gICAgdTggdXNlRGZzOyAgICAgICAgIC8qIFVzZSBERlMgaW4gdGhlIFJlZ0RvbWFpbiBpZiBjb3JyZXNwb25kaW5nIGJpdCBpcyBzZXQgKi8KLSAgICB1OCBtb2RlOyAgICAgICAgICAgLyogTW9kZSBvZiBvcGVyYXRpb24gKi8KLSAgICB1MzIgdXNlUGFzc1NjYW47ICAgIC8qIFVzZSBQYXNzaXZlIFNjYW4gaW4gdGhlIFJlZ0RvbWFpbiBpZiBjb3JyZXNwb25kaW5nIGJpdCBpcyBzZXQgKi8KLSAgICB1MzIgaHQ0MENoYW5NYXNrOyAgIC8qIGxvd2VyIDE2IGJpdHM6IGluZGljYXRlIHdoaWNoIGZyZXF1ZW5jaWVzIGluIHRoZSBibG9jayBpcyBIVDQwIGNhcGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXIgMTYgYml0czogd2hhdCByYXRlIChoYWxmL3F1YXJ0ZXIpIHRoZSBjaGFubmVsIGlzICAqLwotfSBQT1NUUEFDSyBSRUdfRE1OX0ZSRVFfQkFORDsKLQotCi0KLXR5cGVkZWYgUFJFUEFDSyBzdHJ1Y3QgcmVnRG9tYWluIHsKLSAgICB1MTYgcmVnRG1uRW51bTsgICAgIC8qIHZhbHVlIGZyb20gRW51bVJkIHRhYmxlICovCi0gICAgdTggcmRDVEw7Ci0gICAgdTggbWF4QW50R2FpbjsKLSAgICB1OCBkZnNNYXNrOyAgICAgICAgLyogREZTIGJpdG1hc2sgZm9yIDVHaHogdGFibGVzICovCi0gICAgdTggZmxhZ3M7ICAgICAgICAgIC8qIFJlcXVpcmVtZW50IGZsYWdzIChBZEhvYyBkaXNhbGxvdyBldGMpICovCi0gICAgdTE2IHJlc2VydmVkOyAgICAgICAvKiBmb3IgYWxpZ25tZW50ICovCi0gICAgdTMyIHBzY2FuOyAgICAgICAgICAvKiBCaXRtYXNrIGZvciBwYXNzaXZlIHNjYW4gKi8KLSAgICB1MzIgY2hhbjExYVtCTUxFTl07IC8qIDY0IGJpdCBiaXRtYXNrIGZvciBjaGFubmVsL2JhbmQgc2VsZWN0aW9uICovCi0gICAgdTMyIGNoYW4xMWJnW0JNTEVOXTsvKiA2NCBiaXQgYml0bWFzayBmb3IgY2hhbm5lbC9iYW5kIHNlbGVjdGlvbiAqLwotfSBQT1NUUEFDSyBSRUdfRE9NQUlOOwotCi0jZW5kaWYgLyogX19SRUdfREJTQ0hFTUFfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL3JlZ3VsYXRvcnkvcmVnX2RidmFsdWVzLmggYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL3JlZ3VsYXRvcnkvcmVnX2RidmFsdWVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3OGY5MDMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9yZWd1bGF0b3J5L3JlZ19kYnZhbHVlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTA0ICswLDAgQEAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDUtMjAxMCBBdGhlcm9zIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIAotLy8KLS8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotLy8gcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLS8vCi0vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLS8vIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLS8vIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0vLyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0vLyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLS8vIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0vLyBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotLy8KLS8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIEF1dGhvcihzKTogPSJBdGhlcm9zIgotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCi0jaWZuZGVmIF9fUkVHX0RCVkFMVUVfSF9fCi0jZGVmaW5lIF9fUkVHX0RCVkFMVUVfSF9fCi0KLS8qCi0gKiBOdW1iZXJpbmcgZnJvbSBJU08gMzE2NgotICovCi1lbnVtIENvdW50cnlDb2RlIHsKLSAgICBDVFJZX0FMQkFOSUEgICAgICAgICAgICAgID0gOCwgICAgICAgLyogQWxiYW5pYSAqLwotICAgIENUUllfQUxHRVJJQSAgICAgICAgICAgICAgPSAxMiwgICAgICAvKiBBbGdlcmlhICovCi0gICAgQ1RSWV9BUkdFTlRJTkEgICAgICAgICAgICA9IDMyLCAgICAgIC8qIEFyZ2VudGluYSAqLwotICAgIENUUllfQVJNRU5JQSAgICAgICAgICAgICAgPSA1MSwgICAgICAvKiBBcm1lbmlhICovCi0gICAgQ1RSWV9BUlVCQSAgICAgICAgICAgICAgICA9IDUzMywgICAgIC8qIEFydWJhICovCi0gICAgQ1RSWV9BVVNUUkFMSUEgICAgICAgICAgICA9IDM2LCAgICAgIC8qIEF1c3RyYWxpYSAoZm9yIFNUQSkgKi8KLSAgICBDVFJZX0FVU1RSQUxJQV9BUCAgICAgICAgID0gNTAwMCwgICAgLyogQXVzdHJhbGlhIChmb3IgQVApICovCi0gICAgQ1RSWV9BVVNUUklBICAgICAgICAgICAgICA9IDQwLCAgICAgIC8qIEF1c3RyaWEgKi8KLSAgICBDVFJZX0FaRVJCQUlKQU4gICAgICAgICAgID0gMzEsICAgICAgLyogQXplcmJhaWphbiAqLwotICAgIENUUllfQkFIUkFJTiAgICAgICAgICAgICAgPSA0OCwgICAgICAvKiBCYWhyYWluICovCi0gICAgQ1RSWV9CQU5HTEFERVNIICAgICAgICAgICA9IDUwLCAgICAgIC8qIEJhbmdsYWRlc2ggKi8KLSAgICBDVFJZX0JBUkJBRE9TICAgICAgICAgICAgID0gNTIsICAgICAgLyogQmFyYmFkb3MgKi8KLSAgICBDVFJZX0JFTEFSVVMgICAgICAgICAgICAgID0gMTEyLCAgICAgLyogQmVsYXJ1cyAqLwotICAgIENUUllfQkVMR0lVTSAgICAgICAgICAgICAgPSA1NiwgICAgICAvKiBCZWxnaXVtICovCi0gICAgQ1RSWV9CRUxJWkUgICAgICAgICAgICAgICA9IDg0LCAgICAgIC8qIEJlbGl6ZSAqLwotICAgIENUUllfQk9MSVZJQSAgICAgICAgICAgICAgPSA2OCwgICAgICAvKiBCb2xpdmlhICovCi0gICAgQ1RSWV9CT1NOSUFfSEVSWkVHT1dBTklBICA9IDcwLCAgICAgIC8qIEJvc25pYSAmIEhlcnplZ293YW5pYSAqLwotICAgIENUUllfQlJBWklMICAgICAgICAgICAgICAgPSA3NiwgICAgICAvKiBCcmF6aWwgKi8KLSAgICBDVFJZX0JSVU5FSV9EQVJVU1NBTEFNICAgID0gOTYsICAgICAgLyogQnJ1bmVpIERhcnVzc2FsYW0gKi8KLSAgICBDVFJZX0JVTEdBUklBICAgICAgICAgICAgID0gMTAwLCAgICAgLyogQnVsZ2FyaWEgKi8KLSAgICBDVFJZX0NBTUJPRElBICAgICAgICAgICAgID0gMTE2LCAgICAgLyogQ2FtYm9kaWEgKi8KLSAgICBDVFJZX0NBTkFEQSAgICAgICAgICAgICAgID0gMTI0LCAgICAgLyogQ2FuYWRhIChmb3IgU1RBKSAqLwotICAgIENUUllfQ0FOQURBX0FQICAgICAgICAgICAgPSA1MDAxLCAgICAvKiBDYW5hZGEgKGZvciBBUCkgKi8KLSAgICBDVFJZX0NISUxFICAgICAgICAgICAgICAgID0gMTUyLCAgICAgLyogQ2hpbGUgKi8KLSAgICBDVFJZX0NISU5BICAgICAgICAgICAgICAgID0gMTU2LCAgICAgLyogUGVvcGxlJ3MgUmVwdWJsaWMgb2YgQ2hpbmEgKi8KLSAgICBDVFJZX0NPTE9NQklBICAgICAgICAgICAgID0gMTcwLCAgICAgLyogQ29sb21iaWEgKi8KLSAgICBDVFJZX0NPU1RBX1JJQ0EgICAgICAgICAgID0gMTg4LCAgICAgLyogQ29zdGEgUmljYSAqLwotICAgIENUUllfQ1JPQVRJQSAgICAgICAgICAgICAgPSAxOTEsICAgICAvKiBDcm9hdGlhICovCi0gICAgQ1RSWV9DWVBSVVMgICAgICAgICAgICAgICA9IDE5NiwKLSAgICBDVFJZX0NaRUNIICAgICAgICAgICAgICAgID0gMjAzLCAgICAgLyogQ3plY2ggUmVwdWJsaWMgKi8KLSAgICBDVFJZX0RFTk1BUksgICAgICAgICAgICAgID0gMjA4LCAgICAgLyogRGVubWFyayAqLwotICAgIENUUllfRE9NSU5JQ0FOX1JFUFVCTElDICAgPSAyMTQsICAgICAvKiBEb21pbmljYW4gUmVwdWJsaWMgKi8KLSAgICBDVFJZX0VDVUFET1IgICAgICAgICAgICAgID0gMjE4LCAgICAgLyogRWN1YWRvciAqLwotICAgIENUUllfRUdZUFQgICAgICAgICAgICAgICAgPSA4MTgsICAgICAvKiBFZ3lwdCAqLwotICAgIENUUllfRUxfU0FMVkFET1IgICAgICAgICAgPSAyMjIsICAgICAvKiBFbCBTYWx2YWRvciAqLwotICAgIENUUllfRVNUT05JQSAgICAgICAgICAgICAgPSAyMzMsICAgICAvKiBFc3RvbmlhICovCi0gICAgQ1RSWV9GQUVST0VfSVNMQU5EUyAgICAgICA9IDIzNCwgICAgIC8qIEZhZXJvZSBJc2xhbmRzICovCi0gICAgQ1RSWV9GSU5MQU5EICAgICAgICAgICAgICA9IDI0NiwgICAgIC8qIEZpbmxhbmQgKi8KLSAgICBDVFJZX0ZSQU5DRSAgICAgICAgICAgICAgID0gMjUwLCAgICAgLyogRnJhbmNlICovCi0gICAgQ1RSWV9GUkFOQ0UyICAgICAgICAgICAgICA9IDI1NSwgICAgIC8qIEZyYW5jZTIgKi8KLSAgICBDVFJZX0dFT1JHSUEgICAgICAgICAgICAgID0gMjY4LCAgICAgLyogR2VvcmdpYSAqLwotICAgIENUUllfR0VSTUFOWSAgICAgICAgICAgICAgPSAyNzYsICAgICAvKiBHZXJtYW55ICovCi0gICAgQ1RSWV9HUkVFQ0UgICAgICAgICAgICAgICA9IDMwMCwgICAgIC8qIEdyZWVjZSAqLwotICAgIENUUllfR1JFRU5MQU5EICAgICAgICAgICAgPSAzMDQsICAgICAvKiBHcmVlbmxhbmQgKi8KLSAgICBDVFJZX0dSRU5BREEgICAgICAgICAgICAgID0gMzA4LCAgICAgLyogR3JlbmFkYSAqLwotICAgIENUUllfR1VBTSAgICAgICAgICAgICAgICAgPSAzMTYsICAgICAvKiBHdWFtICovCi0gICAgQ1RSWV9HVUFURU1BTEEgICAgICAgICAgICA9IDMyMCwgICAgIC8qIEd1YXRlbWFsYSAqLwotICAgIENUUllfSEFJVEkgICAgICAgICAgICAgICAgPSAzMzIsICAgICAvKiBIYWl0aSAqLwotICAgIENUUllfSE9ORFVSQVMgICAgICAgICAgICAgPSAzNDAsICAgICAvKiBIb25kdXJhcyAqLwotICAgIENUUllfSE9OR19LT05HICAgICAgICAgICAgPSAzNDQsICAgICAvKiBIb25nIEtvbmcgUy5BLlIuLCBQLlIuQy4gKi8KLSAgICBDVFJZX0hVTkdBUlkgICAgICAgICAgICAgID0gMzQ4LCAgICAgLyogSHVuZ2FyeSAqLwotICAgIENUUllfSUNFTEFORCAgICAgICAgICAgICAgPSAzNTIsICAgICAvKiBJY2VsYW5kICovCi0gICAgQ1RSWV9JTkRJQSAgICAgICAgICAgICAgICA9IDM1NiwgICAgIC8qIEluZGlhICovCi0gICAgQ1RSWV9JTkRPTkVTSUEgICAgICAgICAgICA9IDM2MCwgICAgIC8qIEluZG9uZXNpYSAqLwotICAgIENUUllfSVJBTiAgICAgICAgICAgICAgICAgPSAzNjQsICAgICAvKiBJcmFuICovCi0gICAgQ1RSWV9JUkFRICAgICAgICAgICAgICAgICA9IDM2OCwgICAgIC8qIElyYXEgKi8KLSAgICBDVFJZX0lSRUxBTkQgICAgICAgICAgICAgID0gMzcyLCAgICAgLyogSXJlbGFuZCAqLwotICAgIENUUllfSVNSQUVMICAgICAgICAgICAgICAgPSAzNzYsICAgICAvKiBJc3JhZWwgKi8KLSAgICBDVFJZX0lUQUxZICAgICAgICAgICAgICAgID0gMzgwLCAgICAgLyogSXRhbHkgKi8KLSAgICBDVFJZX0pBTUFJQ0EgICAgICAgICAgICAgID0gMzg4LCAgICAgLyogSmFtYWljYSAqLwotICAgIENUUllfSkFQQU4gICAgICAgICAgICAgICAgPSAzOTIsICAgICAvKiBKYXBhbiAqLwotICAgIENUUllfSkFQQU4xICAgICAgICAgICAgICAgPSAzOTMsICAgICAvKiBKYXBhbiAoSlAxKSAqLwotICAgIENUUllfSkFQQU4yICAgICAgICAgICAgICAgPSAzOTQsICAgICAvKiBKYXBhbiAoSlAwKSAqLwotICAgIENUUllfSkFQQU4zICAgICAgICAgICAgICAgPSAzOTUsICAgICAvKiBKYXBhbiAoSlAxLTEpICovCi0gICAgQ1RSWV9KQVBBTjQgICAgICAgICAgICAgICA9IDM5NiwgICAgIC8qIEphcGFuIChKRTEpICovCi0gICAgQ1RSWV9KQVBBTjUgICAgICAgICAgICAgICA9IDM5NywgICAgIC8qIEphcGFuIChKRTIpICovCi0gICAgQ1RSWV9KQVBBTjYgICAgICAgICAgICAgICA9IDM5OSwgICAgIC8qIEphcGFuIChKUDYpICovCi0gICAgQ1RSWV9KT1JEQU4gICAgICAgICAgICAgICA9IDQwMCwgICAgIC8qIEpvcmRhbiAqLwotICAgIENUUllfS0FaQUtIU1RBTiAgICAgICAgICAgPSAzOTgsICAgICAvKiBLYXpha2hzdGFuICovCi0gICAgQ1RSWV9LRU5ZQSAgICAgICAgICAgICAgICA9IDQwNCwgICAgIC8qIEtlbnlhICovCi0gICAgQ1RSWV9LT1JFQV9OT1JUSCAgICAgICAgICA9IDQwOCwgICAgIC8qIE5vcnRoIEtvcmVhICovCi0gICAgQ1RSWV9LT1JFQV9ST0MgICAgICAgICAgICA9IDQxMCwgICAgIC8qIFNvdXRoIEtvcmVhIChmb3IgU1RBKSAqLwotICAgIENUUllfS09SRUFfUk9DMiAgICAgICAgICAgPSA0MTEsICAgICAvKiBTb3V0aCBLb3JlYSAqLwotICAgIENUUllfS09SRUFfUk9DMyAgICAgICAgICAgPSA0MTIsICAgICAvKiBTb3V0aCBLb3JlYSAoZm9yIEFQKSAqLwotICAgIENUUllfS1VXQUlUICAgICAgICAgICAgICAgPSA0MTQsICAgICAvKiBLdXdhaXQgKi8KLSAgICBDVFJZX0xBVFZJQSAgICAgICAgICAgICAgID0gNDI4LCAgICAgLyogTGF0dmlhICovCi0gICAgQ1RSWV9MRUJBTk9OICAgICAgICAgICAgICA9IDQyMiwgICAgIC8qIExlYmFub24gKi8KLSAgICBDVFJZX0xJQllBICAgICAgICAgICAgICAgID0gNDM0LCAgICAgLyogTGlieWEgKi8KLSAgICBDVFJZX0xJRUNIVEVOU1RFSU4gICAgICAgID0gNDM4LCAgICAgLyogTGllY2h0ZW5zdGVpbiAqLwotICAgIENUUllfTElUSFVBTklBICAgICAgICAgICAgPSA0NDAsICAgICAvKiBMaXRodWFuaWEgKi8KLSAgICBDVFJZX0xVWEVNQk9VUkcgICAgICAgICAgID0gNDQyLCAgICAgLyogTHV4ZW1ib3VyZyAqLwotICAgIENUUllfTUFDQVUgICAgICAgICAgICAgICAgPSA0NDYsICAgICAvKiBNYWNhdSAqLwotICAgIENUUllfTUFDRURPTklBICAgICAgICAgICAgPSA4MDcsICAgICAvKiB0aGUgRm9ybWVyIFl1Z29zbGF2IFJlcHVibGljIG9mIE1hY2Vkb25pYSAqLwotICAgIENUUllfTUFMQVlTSUEgICAgICAgICAgICAgPSA0NTgsICAgICAvKiBNYWxheXNpYSAqLwotICAgIENUUllfTUFMVEEgICAgICAgICAgICAgICAgPSA0NzAsICAgICAvKiBNYWx0YSAqLwotICAgIENUUllfTUVYSUNPICAgICAgICAgICAgICAgPSA0ODQsICAgICAvKiBNZXhpY28gKi8KLSAgICBDVFJZX01PTkFDTyAgICAgICAgICAgICAgID0gNDkyLCAgICAgLyogUHJpbmNpcGFsaXR5IG9mIE1vbmFjbyAqLwotICAgIENUUllfTU9ST0NDTyAgICAgICAgICAgICAgPSA1MDQsICAgICAvKiBNb3JvY2NvICovCi0gICAgQ1RSWV9ORVBBTCAgICAgICAgICAgICAgICA9IDUyNCwgICAgIC8qIE5lcGFsICovICAgCi0gICAgQ1RSWV9ORVRIRVJMQU5EUyAgICAgICAgICA9IDUyOCwgICAgIC8qIE5ldGhlcmxhbmRzICovCi0gICAgQ1RSWV9ORVRIRVJMQU5EX0FOVElMTEVTICA9IDUzMCwgICAgIC8qIE5ldGhlcmxhbmRzLUFudGlsbGVzICovCi0gICAgQ1RSWV9ORVdfWkVBTEFORCAgICAgICAgICA9IDU1NCwgICAgIC8qIE5ldyBaZWFsYW5kICovCi0gICAgQ1RSWV9OSUNBUkFHVUEgICAgICAgICAgICA9IDU1OCwgICAgIC8qIE5pY2FyYWd1YSAqLwotICAgIENUUllfTk9SV0FZICAgICAgICAgICAgICAgPSA1NzgsICAgICAvKiBOb3J3YXkgKi8KLSAgICBDVFJZX09NQU4gICAgICAgICAgICAgICAgID0gNTEyLCAgICAgLyogT21hbiAqLwotICAgIENUUllfUEFLSVNUQU4gICAgICAgICAgICAgPSA1ODYsICAgICAvKiBJc2xhbWljIFJlcHVibGljIG9mIFBha2lzdGFuICovCi0gICAgQ1RSWV9QQU5BTUEgICAgICAgICAgICAgICA9IDU5MSwgICAgIC8qIFBhbmFtYSAqLwotICAgIENUUllfUEFSQUdVQVkgICAgICAgICAgICAgPSA2MDAsICAgICAvKiBQYXJhZ3VheSAqLwotICAgIENUUllfUEVSVSAgICAgICAgICAgICAgICAgPSA2MDQsICAgICAvKiBQZXJ1ICovCi0gICAgQ1RSWV9QSElMSVBQSU5FUyAgICAgICAgICA9IDYwOCwgICAgIC8qIFJlcHVibGljIG9mIHRoZSBQaGlsaXBwaW5lcyAqLwotICAgIENUUllfUE9MQU5EICAgICAgICAgICAgICAgPSA2MTYsICAgICAvKiBQb2xhbmQgKi8KLSAgICBDVFJZX1BPUlRVR0FMICAgICAgICAgICAgID0gNjIwLCAgICAgLyogUG9ydHVnYWwgKi8KLSAgICBDVFJZX1BVRVJUT19SSUNPICAgICAgICAgID0gNjMwLCAgICAgLyogUHVlcnRvIFJpY28gKi8KLSAgICBDVFJZX1FBVEFSICAgICAgICAgICAgICAgID0gNjM0LCAgICAgLyogUWF0YXIgKi8KLSAgICBDVFJZX1JPTUFOSUEgICAgICAgICAgICAgID0gNjQyLCAgICAgLyogUm9tYW5pYSAqLwotICAgIENUUllfUlVTU0lBICAgICAgICAgICAgICAgPSA2NDMsICAgICAvKiBSdXNzaWEgKi8KLSAgICBDVFJZX1NBVURJX0FSQUJJQSAgICAgICAgID0gNjgyLCAgICAgLyogU2F1ZGkgQXJhYmlhICovCi0gICAgQ1RSWV9NT05URU5FR1JPICAgICAgICAgICA9IDg5MSwgICAgIC8qIE1vbnRlbmVncm8gKi8KLSAgICBDVFJZX1NJTkdBUE9SRSAgICAgICAgICAgID0gNzAyLCAgICAgLyogU2luZ2Fwb3JlICovCi0gICAgQ1RSWV9TTE9WQUtJQSAgICAgICAgICAgICA9IDcwMywgICAgIC8qIFNsb3ZhayBSZXB1YmxpYyAqLwotICAgIENUUllfU0xPVkVOSUEgICAgICAgICAgICAgPSA3MDUsICAgICAvKiBTbG92ZW5pYSAqLwotICAgIENUUllfU09VVEhfQUZSSUNBICAgICAgICAgPSA3MTAsICAgICAvKiBTb3V0aCBBZnJpY2EgKi8KLSAgICBDVFJZX1NQQUlOICAgICAgICAgICAgICAgID0gNzI0LCAgICAgLyogU3BhaW4gKi8KLSAgICBDVFJZX1NSSUxBTktBICAgICAgICAgICAgID0gMTQ0LCAgICAgLyogU3JpIExhbmthICovCi0gICAgQ1RSWV9TV0VERU4gICAgICAgICAgICAgICA9IDc1MiwgICAgIC8qIFN3ZWRlbiAqLwotICAgIENUUllfU1dJVFpFUkxBTkQgICAgICAgICAgPSA3NTYsICAgICAvKiBTd2l0emVybGFuZCAqLwotICAgIENUUllfU1lSSUEgICAgICAgICAgICAgICAgPSA3NjAsICAgICAvKiBTeXJpYSAqLwotICAgIENUUllfVEFJV0FOICAgICAgICAgICAgICAgPSAxNTgsICAgICAvKiBUYWl3YW4gKi8KLSAgICBDVFJZX1RIQUlMQU5EICAgICAgICAgICAgID0gNzY0LCAgICAgLyogVGhhaWxhbmQgKi8KLSAgICBDVFJZX1RSSU5JREFEX1lfVE9CQUdPICAgID0gNzgwLCAgICAgLyogVHJpbmlkYWQgeSBUb2JhZ28gKi8KLSAgICBDVFJZX1RVTklTSUEgICAgICAgICAgICAgID0gNzg4LCAgICAgLyogVHVuaXNpYSAqLwotICAgIENUUllfVFVSS0VZICAgICAgICAgICAgICAgPSA3OTIsICAgICAvKiBUdXJrZXkgKi8KLSAgICBDVFJZX1VBRSAgICAgICAgICAgICAgICAgID0gNzg0LCAgICAgLyogVS5BLkUuICovCi0gICAgQ1RSWV9VS1JBSU5FICAgICAgICAgICAgICA9IDgwNCwgICAgIC8qIFVrcmFpbmUgKi8KLSAgICBDVFJZX1VOSVRFRF9LSU5HRE9NICAgICAgID0gODI2LCAgICAgLyogVW5pdGVkIEtpbmdkb20gKi8KLSAgICBDVFJZX1VOSVRFRF9TVEFURVMgICAgICAgID0gODQwLCAgICAgLyogVW5pdGVkIFN0YXRlcyAoZm9yIFNUQSkgKi8KLSAgICBDVFJZX1VOSVRFRF9TVEFURVNfQVAgICAgID0gODQxLCAgICAgLyogVW5pdGVkIFN0YXRlcyAoZm9yIEFQKSAqLwotICAgIENUUllfVU5JVEVEX1NUQVRFU19QUyAgICAgPSA4NDIsICAgICAvKiBVbml0ZWQgU3RhdGVzIC0gcHVibGljIHNhZmV0eSAqLwotICAgIENUUllfVVJVR1VBWSAgICAgICAgICAgICAgPSA4NTgsICAgICAvKiBVcnVndWF5ICovCi0gICAgQ1RSWV9VWkJFS0lTVEFOICAgICAgICAgICA9IDg2MCwgICAgIC8qIFV6YmVraXN0YW4gKi8KLSAgICBDVFJZX1ZFTkVaVUVMQSAgICAgICAgICAgID0gODYyLCAgICAgLyogVmVuZXp1ZWxhICovCi0gICAgQ1RSWV9WSUVUX05BTSAgICAgICAgICAgICA9IDcwNCwgICAgIC8qIFZpZXQgTmFtICovCi0gICAgQ1RSWV9ZRU1FTiAgICAgICAgICAgICAgICA9IDg4NywgICAgIC8qIFllbWVuICovCi0gICAgQ1RSWV9aSU1CQUJXRSAgICAgICAgICAgICA9IDcxNiAgICAgIC8qIFppbWJhYndlICovCi19OwotCi0jZGVmaW5lIENUUllfREVCVUcgICAgICAwCi0jZGVmaW5lIENUUllfREVGQVVMVCAgICAweDFmZgotCi0vKgotICogVGhlIGZvbGxvd2luZyByZWd1bGF0b3J5IGRvbWFpbiBkZWZpbml0aW9ucyBhcmUKLSAqIGZvdW5kIGluIHRoZSBFRVBST00uIEVhY2ggcmVndWxhdG9yeSBkb21haW4KLSAqIGNhbiBvcGVyYXRlIGluIGVpdGhlciBhIDVHSHogb3IgMi40R0h6IHdpcmVsZXNzIG1vZGUgb3IKLSAqIGJvdGggNUdIeiBhbmQgMi40R0h6IHdpcmVsZXNzIG1vZGVzLgotICogSW4gZ2VuZXJhbCwgdGhlIHZhbHVlIGhvbGRzIG5vIHNwZWNpYWwKLSAqIG1lYW5pbmcgYW5kIGlzIHVzZWQgdG8gZGVjb2RlIGludG8gZWl0aGVyIHNwZWNpZmljCi0gKiAyLjRHSHogb3IgNUdIeiB3aXJlbGVzcyBtb2RlIGZvciB0aGF0IHBhcnRpY3VsYXIKLSAqIHJlZ3VsYXRvcnkgZG9tYWluLgotICoKLSAqIEVudW1lcmF0ZWQgUmVndWxhdG9yeSBEb21haW4gSW5mb3JtYXRpb24gOCBiaXQgdmFsdWVzIGluZGljYXRlIHRoYXQKLSAqIHRoZSByZWdkb21haW4gaXMgcmVhbGx5IGEgcGFpciBvZiB1bml0YXJ5IHJlZ2RvbWFpbnMuICAxMiBiaXQgdmFsdWVzCi0gKiBhcmUgdGhlIHJlYWwgdW5pdGFyeSByZWdkb21haW5zIGFuZCBhcmUgdGhlIG9ubHkgb25lcyB3aGljaCBoYXZlIHRoZQotICogZnJlcXVlbmN5IGJpdG1hc2tzIGFuZCBmbGFncyBzZXQuCi0gKi8KLQotZW51bSBFbnVtUmQgewotICAgIE5PX0VOVU1SRCAgID0gMHgwMCwKLSAgICBOVUxMMV9XT1JMRCA9IDB4MDMsICAgICAvKiBGb3IgMTFiLW9ubHkgY291bnRyaWVzIChubyAxMWEgYWxsb3dlZCkgKi8KLSAgICBOVUxMMV9FVFNJQiA9IDB4MDcsICAgICAvKiBJc3JhZWwgKi8KLSAgICBOVUxMMV9FVFNJQyA9IDB4MDgsCi0KLSAgICBGQ0MxX0ZDQ0EgICA9IDB4MTAsICAgICAvKiBVU0EgKi8KLSAgICBGQ0MxX1dPUkxEICA9IDB4MTEsICAgICAvKiBIb25nIEtvbmcgKi8KLSAgICBGQ0MyX0ZDQ0EgICA9IDB4MjAsICAgICAvKiBDYW5hZGEgKi8KLSAgICBGQ0MyX1dPUkxEICA9IDB4MjEsICAgICAvKiBBdXN0cmFsaWEgJiBISyAqLwotICAgIEZDQzJfRVRTSUMgID0gMHgyMiwKLSAgICBGQ0MzX0ZDQ0EgICA9IDB4M0EsICAgICAvKiBVU0EgJiBDYW5hZGEgdy81NDcwIGJhbmQsIDExaCwgREZTIGVuYWJsZWQgKi8KLSAgICBGQ0MzX1dPUkxEICA9IDB4M0IsICAgICAvKiBVU0EgJiBDYW5hZGEgdy81NDcwIGJhbmQsIDExaCwgREZTIGVuYWJsZWQgKi8KLSAgICBGQ0M0X0ZDQ0EgICA9IDB4MTIsICAgICAvKiBGQ0MgcHVibGljIHNhZmV0eSBwbHVzIFVOSUkgYmFuZHMgKi8KLSAgICBGQ0M1X0ZDQ0EgICA9IDB4MTMsICAgICAvKiBVUyB3aXRoIG5vIERGUyAqLwotICAgIEZDQzVfV09STEQgID0gMHgxNiwgICAgIC8qIFVTIHdpdGggbm8gREZTICovCi0gICAgRkNDNl9GQ0NBICAgPSAweDE0LCAgICAgLyogU2FtZSBhcyBGQ0MyX0ZDQ0EgYnV0IHdpdGggNTYwMC01NjUwTUh6IGNoYW5uZWxzIGRpc2FibGVkIGZvciBVUyAmIENhbmFkYSBBUHMgKi8KLSAgICBGQ0M2X1dPUkxEICA9IDB4MjMsICAgICAvKiBTYW1lIGFzIEZDQzJfRkNDQSBidXQgd2l0aCA1NjAwLTU2NTBNSHogY2hhbm5lbHMgZGlzYWJsZWQgZm9yIEF1c3RyYWxpYSBBUHMgKi8KLQotICAgIEVUU0kxX1dPUkxEID0gMHgzNywKLQotICAgIEVUU0kyX1dPUkxEID0gMHgzNSwgICAgIC8qIEh1bmdhcnkgJiBvdGhlcnMgKi8KLSAgICBFVFNJM19XT1JMRCA9IDB4MzYsICAgICAvKiBGcmFuY2UgJiBvdGhlcnMgKi8KLSAgICBFVFNJNF9XT1JMRCA9IDB4MzAsCi0gICAgRVRTSTRfRVRTSUMgPSAweDM4LAotICAgIEVUU0k1X1dPUkxEID0gMHgzOSwKLSAgICBFVFNJNl9XT1JMRCA9IDB4MzQsICAgICAvKiBCdWxnYXJpYSAqLwotICAgIEVUU0lfUkVTRVJWRUQgICA9IDB4MzMsICAgICAvKiBSZXNlcnZlZCAoRG8gbm90IHVzZWQpICovCi0gICAgRlJBTkNFX1JFUyAgPSAweDMxLCAgICAgLyogTGVnYWN5IEZyYW5jZSBmb3IgT0VNICovCi0KLSAgICBBUEw2X1dPUkxEICA9IDB4NUIsICAgICAvKiBTaW5nYXBvcmUgKi8KLSAgICBBUEw0X1dPUkxEICA9IDB4NDIsICAgICAvKiBTaW5nYXBvcmUgKi8KLSAgICBBUEwzX0ZDQ0EgICA9IDB4NTAsCi0gICAgQVBMX1JFU0VSVkVEICAgID0gMHg0NCwgICAgIC8qIFJlc2VydmVkIChEbyBub3QgdXNlZCkgICovCi0gICAgQVBMMl9XT1JMRCAgPSAweDQ1LCAgICAgLyogS29yZWEgKi8KLSAgICBBUEwyX0FQTEMgICA9IDB4NDYsCi0gICAgQVBMM19XT1JMRCAgPSAweDQ3LAotICAgIEFQTDJfQVBMRCAgID0gMHg0OSwgICAgIC8qIEtvcmVhIHdpdGggMi4zRyBjaGFubmVscyAqLwotICAgIEFQTDJfRkNDQSAgID0gMHg0RCwgICAgIC8qIFNwZWNpZmljIE1vYmlsZSBDdXN0b21lciAqLwotICAgIEFQTDFfV09STEQgID0gMHg1MiwgICAgIC8qIExhdGluIEFtZXJpY2EgKi8KLSAgICBBUEwxX0ZDQ0EgICA9IDB4NTMsCi0gICAgQVBMMV9FVFNJQyAgPSAweDU1LAotICAgIEFQTDJfRVRTSUMgID0gMHg1NiwgICAgIC8qIFZlbmV6dWVsYSAqLwotICAgIEFQTDVfV09STEQgID0gMHg1OCwgICAgIC8qIENoaWxlICovCi0gICAgQVBMN19GQ0NBICAgPSAweDVDLAotICAgIEFQTDhfV09STEQgID0gMHg1RCwKLSAgICBBUEw5X1dPUkxEICA9IDB4NUUsCi0gICAgQVBMMTBfV09STEQgPSAweDVGLCAgICAgLyogS29yZWEgNUdIeiBmb3IgU1RBICovCi0KLQotICAgIE1LSzVfTUtLQSAgID0gMHg5OSwgLyogVGhpcyBpcyBhIHRlbXBvcmFyeSB2YWx1ZS4gTUcgYW5kIERRIGhhdmUgdG8gZ2l2ZSBvZmZpY2lhbCBvbmUgKi8KLSAgICBNS0s1X0ZDQ0EgICA9IDB4OUEsIC8qIFRoaXMgaXMgYSB0ZW1wb3JhcnkgdmFsdWUuIE1HIGFuZCBEUSBoYXZlIHRvIGdpdmUgb2ZmaWNpYWwgb25lICovCi0gICAgTUtLNV9NS0tDICAgPSAweDg4LAotICAgIE1LSzExX01LS0EgID0gMHhENCwKLSAgICBNS0sxMV9GQ0NBICA9IDB4RDUsCi0gICAgTUtLMTFfTUtLQyAgPSAweEQ3LAotCi0gICAgLyoKLSAgICAgKiBXb3JsZCBtb2RlIFNLVXMKLSAgICAgKi8KLSAgICBXT1IwX1dPUkxEICA9IDB4NjAsICAgICAvKiBXb3JsZDAgKFdPMCBTS1UpICovCi0gICAgV09SMV9XT1JMRCAgPSAweDYxLCAgICAgLyogV29ybGQxIChXTzEgU0tVKSAqLwotICAgIFdPUjJfV09STEQgID0gMHg2MiwgICAgIC8qIFdvcmxkMiAoV08yIFNLVSkgKi8KLSAgICBXT1IzX1dPUkxEICA9IDB4NjMsICAgICAvKiBXb3JsZDMgKFdPMyBTS1UpICovCi0gICAgV09SNF9XT1JMRCAgPSAweDY0LCAgICAgLyogV29ybGQ0IChXTzQgU0tVKSAqLyAgCi0gICAgV09SNV9FVFNJQyAgPSAweDY1LCAgICAgLyogV29ybGQ1IChXTzUgU0tVKSAqLyAgICAKLQotICAgIFdPUjAxX1dPUkxEID0gMHg2NiwgICAgIC8qIFdvcmxkMC0xIChXVzAtMSBTS1UpICovCi0gICAgV09SMDJfV09STEQgPSAweDY3LCAgICAgLyogV29ybGQwLTIgKFdXMC0yIFNLVSkgKi8KLSAgICBFVTFfV09STEQgICA9IDB4NjgsICAgICAvKiBTYW1lIGFzIFdvcmxkMC0yIChXVzAtMiBTS1UpLCBleGNlcHQgYWN0aXZlIHNjYW4gY2gxLTEzLiBObyBjaDE0ICovCi0KLSAgICBXT1I5X1dPUkxEICA9IDB4NjksICAgICAvKiBXb3JsZDkgKFdPOSBTS1UpICovICAKLSAgICBXT1JBX1dPUkxEICA9IDB4NkEsICAgICAvKiBXb3JsZEEgKFdPQSBTS1UpICovICAKLSAgICBXT1JCX1dPUkxEICA9IDB4NkIsICAgICAvKiBXb3JsZEIgKFdPQSBTS1UpICovICAKLSAgICBXT1JDX1dPUkxEICA9IDB4NkMsICAgICAvKiBXb3JsZEMgKFdPQSBTS1UpICovICAKLQotICAgIC8qCi0gICAgICogUmVndWxhdG9yIGRvbWFpbnMgZW5kaW5nIGluIGEgbnVtYmVyIChlLmcuIEFQTDEsCi0gICAgICogTUsxLCBFVFNJNCwgZXRjKSBhcHBseSB0byA1R0h6IGNoYW5uZWwgYW5kIHBvd2VyCi0gICAgICogaW5mb3JtYXRpb24uICBSZWd1bGF0b3IgZG9tYWlucyBlbmRpbmcgaW4gYSBsZXR0ZXIKLSAgICAgKiAoZS5nLiBBUExBLCBGQ0NBLCBldGMpIGFwcGx5IHRvIDIuNEdIeiBjaGFubmVsIGFuZAotICAgICAqIHBvd2VyIGluZm9ybWF0aW9uLgotICAgICAqLwotICAgIEFQTDEgICAgICAgID0gMHgwMTUwLCAgIC8qIExBVCAmIEFzaWEgKi8KLSAgICBBUEwyICAgICAgICA9IDB4MDI1MCwgICAvKiBMQVQgJiBBc2lhICovCi0gICAgQVBMMyAgICAgICAgPSAweDAzNTAsICAgLyogVGFpd2FuICovCi0gICAgQVBMNCAgICAgICAgPSAweDA0NTAsICAgLyogSm9yZGFuICovCi0gICAgQVBMNSAgICAgICAgPSAweDA1NTAsICAgLyogQ2hpbGUgKi8KLSAgICBBUEw2ICAgICAgICA9IDB4MDY1MCwgICAvKiBTaW5nYXBvcmUgKi8KLSAgICBBUEw3ICAgICAgICA9IDB4MDc1MCwgICAvKiBUYWl3YW4gKi8KLSAgICBBUEw4ICAgICAgICA9IDB4MDg1MCwgICAvKiBNYWxheXNpYSAqLwotICAgIEFQTDkgICAgICAgID0gMHgwOTUwLCAgIC8qIEtvcmVhICovCi0gICAgQVBMMTAgICAgICAgPSAweDEwNTAsICAgLyogS29yZWEgNUdIeiAqLwotCi0gICAgRVRTSTEgICAgICAgPSAweDAxMzAsICAgLyogRXVyb3BlICYgb3RoZXJzICovCi0gICAgRVRTSTIgICAgICAgPSAweDAyMzAsICAgLyogRXVyb3BlICYgb3RoZXJzICovCi0gICAgRVRTSTMgICAgICAgPSAweDAzMzAsICAgLyogRXVyb3BlICYgb3RoZXJzICovCi0gICAgRVRTSTQgICAgICAgPSAweDA0MzAsICAgLyogRXVyb3BlICYgb3RoZXJzICovCi0gICAgRVRTSTUgICAgICAgPSAweDA1MzAsICAgLyogRXVyb3BlICYgb3RoZXJzICovCi0gICAgRVRTSTYgICAgICAgPSAweDA2MzAsICAgLyogRXVyb3BlICYgb3RoZXJzICovCi0gICAgRVRTSUIgICAgICAgPSAweDBCMzAsICAgLyogSXNyYWVsICovCi0gICAgRVRTSUMgICAgICAgPSAweDBDMzAsICAgLyogTGF0aW4gQW1lcmljYSAqLwotCi0gICAgRkNDMSAgICAgICAgPSAweDAxMTAsICAgLyogVVMgJiBvdGhlcnMgKi8KLSAgICBGQ0MyICAgICAgICA9IDB4MDEyMCwgICAvKiBDYW5hZGEsIEF1c3RyYWxpYSAmIE5ldyBaZWFsYW5kICovCi0gICAgRkNDMyAgICAgICAgPSAweDAxNjAsICAgLyogVVMgdy9uZXcgbWlkZGxlIGJhbmQgJiBERlMgKi8gICAgCi0gICAgRkNDNCAgICAgICAgPSAweDAxNjUsCi0gICAgRkNDNSAgICAgICAgPSAweDAxODAsCi0gICAgRkNDNiAgICAgICAgPSAweDA2MTAsCi0gICAgRkNDQSAgICAgICAgPSAweDBBMTAsICAgIAotCi0gICAgQVBMRCAgICAgICAgPSAweDBENTAsICAgLyogU291dGggS29yZWEgKi8KLQotICAgIE1LSzEgICAgICAgID0gMHgwMTQwLCAgIC8qIEphcGFuICovCi0gICAgTUtLMiAgICAgICAgPSAweDAyNDAsICAgLyogSmFwYW4gRXh0ZW5kZWQgKi8KLSAgICBNS0szICAgICAgICA9IDB4MDM0MCwgICAvKiBKYXBhbiBuZXcgNUdIeiAqLwotICAgIE1LSzQgICAgICAgID0gMHgwNDQwLCAgIC8qIEphcGFuIG5ldyA1R0h6ICovCi0gICAgTUtLNSAgICAgICAgPSAweDA1NDAsICAgLyogSmFwYW4gbmV3IDVHSHogKi8KLSAgICBNS0s2ICAgICAgICA9IDB4MDY0MCwgICAvKiBKYXBhbiBuZXcgNUdIeiAqLwotICAgIE1LSzcgICAgICAgID0gMHgwNzQwLCAgIC8qIEphcGFuIG5ldyA1R0h6ICovCi0gICAgTUtLOCAgICAgICAgPSAweDA4NDAsICAgLyogSmFwYW4gbmV3IDVHSHogKi8KLSAgICBNS0s5ICAgICAgICA9IDB4MDk0MCwgICAvKiBKYXBhbiBuZXcgNUdIeiAqLwotICAgIE1LSzEwICAgICAgID0gMHgxMDQwLCAgIC8qIEphcGFuIG5ldyA1R0h6ICovCi0gICAgTUtLMTEgICAgICAgPSAweDExNDAsICAgLyogSmFwYW4gbmV3IDVHSHogKi8KLSAgICBNS0sxMiAgICAgICA9IDB4MTI0MCwgICAvKiBKYXBhbiBuZXcgNUdIeiAqLwotCi0gICAgTUtLQSAgICAgICAgPSAweDBBNDAsICAgLyogSmFwYW4gKi8KLSAgICBNS0tDICAgICAgICA9IDB4MEE1MCwKLQotICAgIE5VTEwxICAgICAgID0gMHgwMTk4LAotICAgIFdPUkxEICAgICAgID0gMHgwMTk5LAotICAgIERFQlVHX1JFR19ETU4gICA9IDB4MDFmZiwKLSAgICBVTklOSVRfUkVHX0RNTiAgPSAweDBmZmYsCi19OwotCi1lbnVtIHsgICAgICAgICAgICAgICAgICAvKiBjb25mb3JtYW5jZSB0ZXN0IGxpbWl0cyAqLwotICAgIEZDQyA9IDB4MTAsCi0gICAgTUtLID0gMHg0MCwKLSAgICBFVFNJICAgID0gMHgzMCwKLSAgICBOT19DVEwgID0gMHhmZiwKLSAgICBDVExfMTFCID0gMSwKLSAgICBDVExfMTFHID0gMgotfTsKLQotCi0vKgotICogVGhlIGZvbGxvd2luZyBhcmUgZmxhZ3MgZm9yIGRpZmZlcmVudCByZXF1aXJlbWVudHMgcGVyIHJlZyBkb21haW4uCi0gKiBUaGVzZSByZXF1aXJlbWVudHMgYXJlIGVpdGhlciBpbmhlcmV0ZWQgZnJvbSB0aGUgcmVnIGRvbWFpbiBwYWlyIG9yCi0gKiBmcm9tIHRoZSB1bml0YXJ5IHJlZyBkb21haW4gaWYgdGhlIHJlZyBkb21haW4gcGFpciBmbGFncyB2YWx1ZSBpcwotICogMAotICovCi0KLWVudW0gewotICAgIE5PX1JFUSAgICAgICAgICAgICAgPSAweDAwLAotICAgIERJU0FMTE9XX0FESE9DXzExQSAgPSAweDAxLAotICAgIEFESE9DX1BFUl8xMUQgICAgICAgPSAweDAyLAotICAgIEFESE9DX05PXzExQSAgICAgICAgPSAweDA0LAotICAgIERJU0FMTE9XX0FESE9DXzExRyAgPSAweDA4Ci19OwotCi0KLQotCi0vKgotICogVGhlIGZvbGxvd2luZyBkZXNjcmliZSB0aGUgYml0IG1hc2tzIGZvciBkaWZmZXJlbnQgcGFzc2l2ZSBzY2FuCi0gKiBjYXBhYmlsaXR5L3JlcXVpcmVtZW50cyBwZXIgcmVnZG9tYWluLgotICovCi0jZGVmaW5lIE5PX1BTQ0FOICAgICAgICAweDAwMDAwMDAwCi0jZGVmaW5lIFBTQ0FOX0ZDQyAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFBTQ0FOX0VUU0kgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFBTQ0FOX01LSyAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFBTQ0FOX0VUU0lCICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIFBTQ0FOX0VUU0lDICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIFBTQ0FOX1dXUiAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIFBTQ0FOX0RFRkVSICAgICAweEZGRkZGRkZGCi0KLS8qIEJpdCBtYXNrcyBmb3IgREZTIHBlciByZWdkb21haW4gKi8KLQotZW51bSB7Ci0gICAgTk9fREZTICAgPSAweDAwLAotICAgIERGU19GQ0MzID0gMHgwMSwKLSAgICBERlNfRVRTSSA9IDB4MDIsCi0gICAgREZTX01LSyAgPSAweDA0Ci19OwotCi0KLSNkZWZpbmUgREVGX1JFR0RNTiAgICAgIEZDQzFfRkNDQQotCi0vKiAKLSAqIFRoZSBmb2xsb3dpbmcgdGFibGUgaXMgdGhlIG1hc3RlciBsaXN0IGZvciBhbGwgZGlmZmVyZW50IGZyZXFldW5jeQotICogYmFuZHMgd2l0aCB0aGUgY29tcGxldGUgbWF0cml4IG9mIGFsbCBwb3NzaWJsZSBmbGFncyBhbmQgc2V0dGluZ3MKLSAqIGZvciBlYWNoIGJhbmQgaWYgaXQgaXMgdXNlZCBpbiBBTlkgcmVnIGRvbWFpbi4KLSAqCi0gKiBUaGUgdGFibGUgb2YgZnJlcXVlbmN5IGJhbmRzIGlzIGluZGV4ZWQgYnkgYSBiaXRtYXNrLiAgVGhlIG9yZGVyaW5nCi0gKiBtdXN0IGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgZW51bSBiZWxvdy4gIFdoZW4gYWRkaW5nIGEgbmV3Ci0gKiBmcmVxdWVuY3kgYmFuZCwgYmUgc3VyZSB0byBtYXRjaCB0aGUgbG9jYXRpb24gaW4gdGhlIGVudW0gd2l0aCB0aGUKLSAqIGNvbW1lbnRzIAotICovCi0KLS8qCi0gKiBUaGVzZSBmcmVxdWVuY3kgdmFsdWVzIGFyZSBhcyBwZXIgY2hhbm5lbCB0YWdzIGFuZCByZWd1bGF0b3J5IGRvbWFpbgotICogaW5mby4gUGxlYXNlIHVwZGF0ZSB0aGVtIGFzIGRhdGFiYXNlIGlzIHVwZGF0ZWQuCi0gKi8KLSNkZWZpbmUgQV9GUkVRX01JTiAgICAgICAgICAgICAgNDkyMAotI2RlZmluZSBBX0ZSRVFfTUFYICAgICAgICAgICAgICA1ODI1Ci0KLSNkZWZpbmUgQV9DSEFOMF9GUkVRICAgICAgICAgICAgNTAwMAotI2RlZmluZSBBX0NIQU5fTUFYICAgICAgICAgICAgICAoKEFfRlJFUV9NQVggLSBBX0NIQU4wX0ZSRVEpLzUpCi0KLSNkZWZpbmUgQkdfRlJFUV9NSU4gICAgICAgICAgICAgMjQxMgotI2RlZmluZSBCR19GUkVRX01BWCAgICAgICAgICAgICAyNDg0Ci0KLSNkZWZpbmUgQkdfQ0hBTjBfRlJFUSAgICAgICAgICAgMjQwNwotI2RlZmluZSBCR19DSEFOX01JTiAgICAgICAgICAgICAoKEJHX0ZSRVFfTUlOIC0gQkdfQ0hBTjBfRlJFUSkvNSkKLSNkZWZpbmUgQkdfQ0hBTl9NQVggICAgICAgICAgICAgMTQgICAgICAvKiBjb3JyZXNwb25kaW5nIHRvIDI0ODQgTUh6ICovCi0KLSNkZWZpbmUgQV8yME1IWl9CQU5EX0ZSRVFfTUFYICAgNTAwMAotCi0KLS8qCi0gKiA1R0h6IDExQSBjaGFubmVsIHRhZ3MKLSAqLwotCi1lbnVtIHsKLSAgICBGMV80OTIwXzQ5ODAsCi0gICAgRjFfNTA0MF81MDgwLAotCi0gICAgRjFfNTEyMF81MjQwLAotCi0gICAgRjFfNTE4MF81MjQwLAotICAgIEYyXzUxODBfNTI0MCwKLSAgICBGM181MTgwXzUyNDAsCi0gICAgRjRfNTE4MF81MjQwLAotICAgIEY1XzUxODBfNTI0MCwKLSAgICBGNl81MTgwXzUyNDAsCi0gICAgRjdfNTE4MF81MjQwLAotCi0gICAgRjFfNTI2MF81MjgwLAotCi0gICAgRjFfNTI2MF81MzIwLAotICAgIEYyXzUyNjBfNTMyMCwKLSAgICBGM181MjYwXzUzMjAsCi0gICAgRjRfNTI2MF81MzIwLAotICAgIEY1XzUyNjBfNTMyMCwKLSAgICBGNl81MjYwXzUzMjAsCi0KLSAgICBGMV81MjYwXzU3MDAsCi0KLSAgICBGMV81MjgwXzUzMjAsCi0KLSAgICBGMV81NTAwXzU2MjAsCi0KLSAgICBGMV81NTAwXzU3MDAsCi0gICAgRjJfNTUwMF81NzAwLAotICAgIEYzXzU1MDBfNTcwMCwKLSAgICBGNF81NTAwXzU3MDAsCi0gICAgRjVfNTUwMF81NzAwLAotICAgIEY2XzU1MDBfNTcwMCwKLSAgICBGN181NTAwXzU3MDAsCi0KLSAgICBGMV81NzQ1XzU4MDUsCi0gICAgRjJfNTc0NV81ODA1LAotCi0gICAgRjFfNTc0NV81ODI1LAotICAgIEYyXzU3NDVfNTgyNSwKLSAgICBGM181NzQ1XzU4MjUsCi0gICAgRjRfNTc0NV81ODI1LAotICAgIEY1XzU3NDVfNTgyNSwKLSAgICBGNl81NzQ1XzU4MjUsCi0KLSAgICBXMV80OTIwXzQ5ODAsCi0gICAgVzFfNTA0MF81MDgwLAotICAgIFcxXzUxNzBfNTIzMCwKLSAgICBXMV81MTgwXzUyNDAsCi0gICAgVzFfNTI2MF81MzIwLAotICAgIFcxXzU3NDVfNTgyNSwKLSAgICBXMV81NTAwXzU3MDAsCi19OwotCi0KLS8qIDIuNCBHSHogdGFibGUgLSBmb3IgMTFiIGFuZCAxMWcgaW5mbyAqLwotZW51bSB7Ci0gICAgQkcxXzIzMTJfMjM3MiwKLSAgICBCRzJfMjMxMl8yMzcyLAotCi0gICAgQkcxXzI0MTJfMjQ3MiwKLSAgICBCRzJfMjQxMl8yNDcyLAotICAgIEJHM18yNDEyXzI0NzIsCi0gICAgQkc0XzI0MTJfMjQ3MiwKLQotICAgIEJHMV8yNDEyXzI0NjIsCi0gICAgQkcyXzI0MTJfMjQ2MiwKLQotICAgIEJHMV8yNDMyXzI0NDIsCi0KLSAgICBCRzFfMjQ1N18yNDcyLAotCi0gICAgQkcxXzI0NjdfMjQ3MiwKLQotICAgIEJHMV8yNDg0XzI0ODQsIC8qIE5vIEcgKi8KLSAgICBCRzJfMjQ4NF8yNDg0LCAvKiBObyBHICovCi0KLSAgICBCRzFfMjUxMl8yNzMyLAotCi0gICAgV0JHMV8yMzEyXzIzNzIsCi0gICAgV0JHMV8yNDEyXzI0MTIsCi0gICAgV0JHMV8yNDE3XzI0MzIsCi0gICAgV0JHMV8yNDM3XzI0NDIsCi0gICAgV0JHMV8yNDQ3XzI0NTcsCi0gICAgV0JHMV8yNDYyXzI0NjIsCi0gICAgV0JHMV8yNDY3XzI0NjcsCi0gICAgV0JHMl8yNDY3XzI0NjcsCi0gICAgV0JHMV8yNDcyXzI0NzIsCi0gICAgV0JHMl8yNDcyXzI0NzIsCi0gICAgV0JHMV8yNDg0XzI0ODQsIC8qIE5vIEcgKi8KLSAgICBXQkcyXzI0ODRfMjQ4NCwgLyogTm8gRyAqLwotfTsKLSAgICAKLSNlbmRpZiAvKiBfX1JFR19EQlZBTFVFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi90YXJnYWRkcnMuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vdGFyZ2FkZHJzLmgKaW5kZXggNzk0YWUyMS4uYzg2NmNlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi90YXJnYWRkcnMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL3RhcmdhZGRycy5oCkBAIC0yMiwxMCArMjIsNiBAQAogI2lmbmRlZiBfX1RBUkdBRERSU19IX18KICNkZWZpbmUgX19UQVJHQUREUlNfSF9fCiAKLSNpZm5kZWYgQVRIX1RBUkdFVAotI2luY2x1ZGUgImF0aHN0YXJ0cGFjay5oIgotI2VuZGlmCi0KICNpZiBkZWZpbmVkKEFSNjAwMikKICNpbmNsdWRlICJBUjYwMDIvYWRkcnMuaCIKICNlbmRpZgpAQCAtOTEsMTUgKzg3LDcgQEAKICAgICAvKiBQb2ludGVyIHRvIGRlYnVnIGxvZ2dpbmcgaGVhZGVyICovCiAgICAgdTMyIGhpX2RiZ2xvZ19oZHI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCiAKLSAgICAvKiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgZmxhc2ggaXMgcHJlc2VudCBvbiBUYXJnZXQuCi0gICAgICogTkI6IGZsYXNoX2lzX3ByZXNlbnQgaW5kaWNhdG9yIGlzIGhlcmUgbm90IGp1c3QKLSAgICAgKiBiZWNhdXNlIGl0IG1pZ2h0IGJlIG9mIGludGVyZXN0IHRvIHRoZSBIb3N0OyBidXQKLSAgICAgKiBhbHNvIGJlY2F1c2UgaXQncyBzZXQgZWFybHkgb24gYnkgVGFyZ2V0J3Mgc3RhcnR1cAotICAgICAqIGFzbSBjb2RlIGFuZCB3ZSBuZWVkIGl0IHRvIGhhdmUgYSBzcGVjaWFsIFJBTSBhZGRyZXNzCi0gICAgICogc28gdGhhdCBpdCBkb2Vzbid0IGdldCByZWluaXRpYWxpemVkIHdpdGggdGhlIHJlc3QKLSAgICAgKiBvZiBkYXRhLgotICAgICAqLwotICAgIHUzMiBoaV9mbGFzaF9pc19wcmVzZW50OyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwYyAqLworICAgIHUzMiBoaV91bnVzZWQxOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwYyAqLwogCiAgICAgLyoKICAgICAgKiBHZW5lcmFsLXB1cnBvc2UgZmxhZyBiaXRzLCBzaW1pbGFyIHRvIEFSNjAwMF9PUFRJT05fKiBmbGFncy4KQEAgLTExMyw3ICsxMDEsNyBAQAogICAgICAqLwogICAgIHUzMiBoaV9zZXJpYWxfZW5hYmxlOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgxNCAqLwogCi0gICAgLyogU3RhcnQgYWRkcmVzcyBvZiBGbGFzaCBEYXRhU2V0IGluZGV4LCBpZiBhbnkgKi8KKyAgICAvKiBTdGFydCBhZGRyZXNzIG9mIERhdGFTZXQgaW5kZXgsIGlmIGFueSAqLwogICAgIHUzMiBoaV9kc2V0X2xpc3RfaGVhZDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgxOCAqLwogCiAgICAgLyogT3ZlcnJpZGUgVGFyZ2V0IGFwcGxpY2F0aW9uIHN0YXJ0IGFkZHJlc3MgKi8KQEAgLTE3MSwzNSArMTU5LDE3OSBAQAogICAgIHUzMiBoaV9oY2lfdWFydF9zdXBwb3J0X3BpbnM7ICAgICAgICAgICAgICAgICAgLyogMHhhNCAqLwogICAgICAgICAvKiBOT1RFOiBieXRlIFswXSA9IFJFU0VUIHBpbiAoYml0IDcgaXMgcG9sYXJpdHkpLCBieXRlc1sxXS4uYnl0ZXNbM10gYXJlIGZvciBmdXR1cmUgdXNlICovCiAgICAgdTMyIGhpX2hjaV91YXJ0X3B3cl9tZ210X3BhcmFtczsgICAgICAgICAgICAgICAvKiAweGE4ICovCi0gICAgICAgIC8qIDB4YTggLSBbMF06IDEgPSBlbmFibGUsIDAgPSBkaXNhYmxlCi0gICAgICAgICAqICAgICAgICBbMV06IDAgPSBVQVJUIEZDIGFjdGl2ZSBsb3csIDEgPSBVQVJUIEZDIGFjdGl2ZSBoaWdoCi0gICAgICAgICAqIDB4YTkgLSBbNzowXTogd2FrZXVwIHRpbWVvdXQgaW4gbXMKLSAgICAgICAgICogMHhhYSwgMHhhYiAtIFsxNTowXTogaWRsZSB0aW1lb3V0IGluIG1zCi0gICAgICAgICAqLyAgICAgICAKLSAgICAvKiBQb2ludGVyIHRvIGV4dGVuZGVkIGJvYXJkIERhdGEgICovCi0gICAgdTMyIGhpX2JvYXJkX2V4dF9kYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweGFjICovCi0gICAgdTMyIGhpX2JvYXJkX2V4dF9kYXRhX2luaXRpYWxpemVkOyAgICAgICAgICAgICAvKiAweGIwICovCisJLyoKKwkgKiAweGE4ICAgLSBbMV06IDAgPSBVQVJUIEZDIGFjdGl2ZSBsb3csIDEgPSBVQVJUIEZDIGFjdGl2ZSBoaWdoCisJICogICAgICBbMzE6MTZdOiB3YWtldXAgdGltZW91dCBpbiBtcworCSAqLworCisJLyogUG9pbnRlciB0byBleHRlbmRlZCBib2FyZCBkYXRhICovCisJdTMyIGhpX2JvYXJkX2V4dF9kYXRhOyAgICAgICAgICAgICAgICAvKiAweGFjICovCisJdTMyIGhpX2JvYXJkX2V4dF9kYXRhX2NvbmZpZzsgICAgICAgICAvKiAweGIwICovCisKKwkvKgorICAgICAgICAgKiBCaXQgWzBdICA6ICAgdmFsaWQKKyAgICAgICAgICogQml0WzMxOjE2OiAgIHNpemUKKwkqLworCS8qCisJICogaGlfcmVzZXRfZmxhZyBpcyB1c2VkIHRvIGRvIHNvbWUgc3R1ZmYgd2hlbiB0YXJnZXQgcmVzZXQuCisJICogc3VjaCBhcyByZXN0b3JlIGFwcF9zdGFydCBhZnRlciB3YXJtIHJlc2V0IG9yCisJICogcHJlc2VydmUgaG9zdCBJbnRlcmVzdCBhcmVhLCBvciBwcmVzZXJ2ZSBST00gZGF0YSwgbGl0ZXJhbHMgZXRjLgorCSAqLworCXUzMiBoaV9yZXNldF9mbGFnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweGI0ICovCisJLyogaW5kaWNhdGUgaGlfcmVzZXRfZmxhZyBpcyB2YWxpZCAqLworCXUzMiBoaV9yZXNldF9mbGFnX3ZhbGlkOyAgICAgICAgICAgICAgICAgICAgICAvKiAweGI4ICovCisJdTMyIGhpX2hjaV91YXJ0X3B3cl9tZ210X3BhcmFtc19leHQ7ICAgICAgICAgICAvKiAweGJjICovCisJLyoKKwkgKiAweGJjIC0gWzMxOjBdOiBpZGxlIHRpbWVvdXQgaW4gbXMKKwkgKi8KKwkvKiBBQ1MgZmxhZ3MgKi8KKwl1MzIgaGlfYWNzX2ZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4YzAgKi8KKwl1MzIgaGlfY29uc29sZV9mbGFnczsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4YzQgKi8KKwl1MzIgaGlfbnZyYW1fc3RhdGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4YzggKi8KKwl1MzIgaGlfb3B0aW9uX2ZsYWcyOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4Y2MgKi8KKworCS8qIElmIG5vbi16ZXJvLCBvdmVycmlkZSB2YWx1ZXMgc2VudCB0byBIb3N0IGluIFdNSV9SRUFEWSBldmVudC4gKi8KKwl1MzIgaGlfc3dfdmVyc2lvbl9vdmVycmlkZTsgICAgICAgICAgICAgICAgICAgIC8qIDB4ZDAgKi8KKwl1MzIgaGlfYWJpX3ZlcnNpb25fb3ZlcnJpZGU7ICAgICAgICAgICAgICAgICAgIC8qIDB4ZDQgKi8KKworCS8qCisJICogUGVyY2VudGFnZSBvZiBoaWdoIHByaW9yaXR5IFJYIHRyYWZmaWMgdG8gdG90YWwgZXhwZWN0ZWQgUlggdHJhZmZpYyAtCisJICogYXBwbGljYWJsZSBvbmx5IHRvIGFyNjAwNAorCSAqLworCXUzMiBoaV9ocF9yeF90cmFmZmljX3JhdGlvOyAgICAgICAgICAgICAgICAgICAgLyogMHhkOCAqLworCisJLyogdGVzdCBhcHBsaWNhdGlvbnMgZmxhZ3MgKi8KKwl1MzIgaGlfdGVzdF9hcHBzX3JlbGF0ZWQgICAgOyAgICAgICAgICAgICAgICAgIC8qIDB4ZGMgKi8KKwkvKiBsb2NhdGlvbiBvZiB0ZXN0IHNjcmlwdCAqLworCXUzMiBoaV9vdGFfdGVzdHNjcmlwdDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHhlMCAqLworCS8qIGxvY2F0aW9uIG9mIENBTCBkYXRhICovCisJdTMyIGhpX2NhbF9kYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweGU0ICovCisJLyogTnVtYmVyIG9mIHBhY2tldCBsb2cgYnVmZmVycyAqLworICAgICAgICB1MzIgaGlfcGt0bG9nX251bV9idWZmZXJzOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4ZTggKi8KKwogfSBQT1NUUEFDSzsKIAogLyogQml0cyBkZWZpbmVkIGluIGhpX29wdGlvbl9mbGFnICovCiAjZGVmaW5lIEhJX09QVElPTl9USU1FUl9XQVIgICAgICAgMHgwMSAvKiBFbmFibGUgdGltZXIgd29ya2Fyb3VuZCAqLwogI2RlZmluZSBISV9PUFRJT05fQk1JX0NSRURfTElNSVQgIDB4MDIgLyogTGltaXQgQk1JIGNvbW1hbmQgY3JlZGl0cyAqLwogI2RlZmluZSBISV9PUFRJT05fUkVMQVlfRE9UMTFfSERSIDB4MDQgLyogUmVsYXkgRG90MTEgaGRyIHRvL2Zyb20gaG9zdCAqLwotI2RlZmluZSBISV9PUFRJT05fRldfTU9ERV9MU0IgICAgIDB4MDggLyogbG93IGJpdCBvZiBNT0RFIChzZWUgYmVsb3cpICovCi0jZGVmaW5lIEhJX09QVElPTl9GV19NT0RFX01TQiAgICAgMHgxMCAvKiBoaWdoIGJpdCBvZiBNT0RFIChzZWUgYmVsb3cpICovCi0jZGVmaW5lIEhJX09QVElPTl9FTkFCTEVfUFJPRklMRSAgMHgyMCAvKiBFbmFibGUgQ1BVIHByb2ZpbGluZyAqLwotI2RlZmluZSBISV9PUFRJT05fRElTQUJMRV9EQkdMT0cgIDB4NDAgLyogRGlzYWJsZSBkZWJ1ZyBsb2dnaW5nICovCi0jZGVmaW5lIEhJX09QVElPTl9TS0lQX0VSQV9UUkFDS0lORyAgMHg4MCAvKiBTa2lwIEVyYSBUcmFja2luZyAqLwotI2RlZmluZSBISV9PUFRJT05fUEFQUkRfRElTQUJMRSAgICAgIDB4MTAwIC8qIERpc2FibGUgUEFQUkQgKGRlYnVnKSAqLworLyogTUFDIGFkZHIgbWV0aG9kIDAtbG9jYWxseSBhZG1pbmlzdHJlZCAxLWdsb2JhbGx5IHVuaXF1ZSBhZGRycyAqLworI2RlZmluZSBISV9PUFRJT05fTUFDX0FERFJfTUVUSE9EICAgMHgwOAorI2RlZmluZSBISV9PUFRJT05fRldfQlJJREdFICAgICAgICAgMHgxMCAvKiBGaXJtd2FyZSBCcmlkZ2luZyAqLworI2RlZmluZSBISV9PUFRJT05fRU5BQkxFX1BST0ZJTEUgICAgMHgyMCAvKiBFbmFibGUgQ1BVIHByb2ZpbGluZyAqLworI2RlZmluZSBISV9PUFRJT05fRElTQUJMRV9EQkdMT0cgICAgMHg0MCAvKiBEaXNhYmxlIGRlYnVnIGxvZ2dpbmcgKi8KKyNkZWZpbmUgSElfT1BUSU9OX1NLSVBfRVJBX1RSQUNLSU5HIDB4ODAgLyogU2tpcCBFcmEgVHJhY2tpbmcgKi8KKyNkZWZpbmUgSElfT1BUSU9OX1BBUFJEX0RJU0FCTEUgICAgIDB4MTAwIC8qIERpc2FibGUgUEFQUkQgKGRlYnVnKSAqLworI2RlZmluZSBISV9PUFRJT05fTlVNX0RFVl9MU0IgICAgICAgMHgyMDAKKyNkZWZpbmUgSElfT1BUSU9OX05VTV9ERVZfTVNCICAgICAgIDB4ODAwCisjZGVmaW5lIEhJX09QVElPTl9ERVZfTU9ERV9MU0IgICAgICAweDEwMDAKKyNkZWZpbmUgSElfT1BUSU9OX0RFVl9NT0RFX01TQiAgICAgIDB4ODAwMDAwMAorLyogRGlzYWJsZSBMb3dGcmVxIFRpbWVyIFN0YWJpbGl6YXRpb24gKi8KKyNkZWZpbmUgSElfT1BUSU9OX05PX0xGVF9TVEJMICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgSElfT1BUSU9OX1NLSVBfUkVHX1NDQU4gICAgIDB4MjAwMDAwMDAgLyogU2tpcCByZWd1bGF0b3J5IHNjYW4gKi8KKy8qIERvIHJlZ3VsYXRvcnkgc2NhbiBkdXJpbmcgaW5pdCBiZWZvcmVzZW5kaW5nIFdNSSByZWFkeSBldmVudCB0byBob3N0ICovCisjZGVmaW5lIEhJX09QVElPTl9JTklUX1JFR19TQ0FOICAgICAweDQwMDAwMDAwCisjZGVmaW5lIEhJX09QVElPTl9TS0lQX01FTU1BUCAgICAgICAweDgwMDAwMDAwIC8qIFJFVjY6IERvIG5vdCBhZGp1c3QgbWVtb3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAgKi8KKworLyogaGlfb3B0aW9uX2ZsYWcyIG9wdGlvbnMgKi8KKyNkZWZpbmUgSElfT1BUSU9OX09GRkxPQURfQU1TRFUgICAgIDB4MDEKKyNkZWZpbmUgSElfT1BUSU9OX0RGU19TVVBQT1JUICAgICAgIDB4MDIgLyogRW5hYmxlIERGUyBzdXBwb3J0ICovCisKKyNkZWZpbmUgSElfT1BUSU9OX01BQ19BRERSX01FVEhPRF9TSElGVCAzCiAKIC8qIDIgYml0cyBvZiBoaV9vcHRpb25fZmxhZyBhcmUgdXNlZCB0byByZXByZXNlbnQgMyBtb2RlcyAqLwogI2RlZmluZSBISV9PUFRJT05fRldfTU9ERV9JQlNTICAgIDB4MCAvKiBJQlNTIE1vZGUgKi8KICNkZWZpbmUgSElfT1BUSU9OX0ZXX01PREVfQlNTX1NUQSAweDEgLyogU1RBIE1vZGUgKi8KICNkZWZpbmUgSElfT1BUSU9OX0ZXX01PREVfQVAgICAgICAweDIgLyogQVAgTW9kZSAqLwogCi0vKiBGdyBNb2RlIE1hc2sgKi8KLSNkZWZpbmUgSElfT1BUSU9OX0ZXX01PREVfTUFTSyAgICAweDMKLSNkZWZpbmUgSElfT1BUSU9OX0ZXX01PREVfU0hJRlQgICAweDMKKy8qIDIgYml0cyBvZiBoaV9vcHRpb24gZmxhZyBhcmUgdXNlZHRvIHJlcHJlc2VudCA0IHN1Ym1vZGVzICovCisjZGVmaW5lIEhJX09QVElPTl9GV19TVUJNT0RFX05PTkUgICAgMHgwICAvKiBOb3JtYWwgbW9kZSAqLworI2RlZmluZSBISV9PUFRJT05fRldfU1VCTU9ERV9QMlBERVYgIDB4MSAgLyogcDJwIGRldmljZSBtb2RlICovCisjZGVmaW5lIEhJX09QVElPTl9GV19TVUJNT0RFX1AyUENMSUVOVCAweDIgLyogcDJwIGNsaWVudCBtb2RlICovCisjZGVmaW5lIEhJX09QVElPTl9GV19TVUJNT0RFX1AyUEdPICAgMHgzIC8qIHAycCBnbyBtb2RlICovCisKKy8qIE51bSBkZXYgTWFzayAqLworI2RlZmluZSBISV9PUFRJT05fTlVNX0RFVl9NQVNLICAgIDB4NworI2RlZmluZSBISV9PUFRJT05fTlVNX0RFVl9TSElGVCAgIDB4OQorCisvKiBmaXJtd2FyZSBicmlkZ2luZyAqLworI2RlZmluZSBISV9PUFRJT05fRldfQlJJREdFX1NISUZUIDB4MDQKKworLyogRncgTW9kZS9TdWJNb2RlIE1hc2sKK3wtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Cit8ICAgU1VCICAgfCAgIFNVQiAgIHwgICBTVUIgICB8ICBTVUIgICAgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgfAorfCBNT0RFWzNdIHwgTU9ERVsyXSB8IE1PREVbMV0gfCBNT0RFWzBdIHwgTU9ERVszXSB8IE1PREVbMl0gfCBNT0RFWzFdIHwgTU9ERVswfAorfCAgICgyKSAgIHwgICAoMikgICB8ICAgKDIpICAgfCAgICgyKSAgIHwgICAoMikgICB8ICAgKDIpICAgfCAgICgyKSAgIHwgICAoMikKK3wtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisqLworI2RlZmluZSBISV9PUFRJT05fRldfTU9ERV9CSVRTICAgICAgICAgMHgyCisjZGVmaW5lIEhJX09QVElPTl9GV19NT0RFX01BU0sgICAgICAgICAweDMKKyNkZWZpbmUgSElfT1BUSU9OX0ZXX01PREVfU0hJRlQgICAgICAgIDB4QworI2RlZmluZSBISV9PUFRJT05fQUxMX0ZXX01PREVfTUFTSyAgICAgMHhGRgorCisjZGVmaW5lIEhJX09QVElPTl9GV19TVUJNT0RFX0JJVFMgICAgICAweDIKKyNkZWZpbmUgSElfT1BUSU9OX0ZXX1NVQk1PREVfTUFTSyAgICAgIDB4MworI2RlZmluZSBISV9PUFRJT05fRldfU1VCTU9ERV9TSElGVCAgICAgMHgxNAorI2RlZmluZSBISV9PUFRJT05fQUxMX0ZXX1NVQk1PREVfTUFTSyAgMHhGRjAwCisjZGVmaW5lIEhJX09QVElPTl9BTExfRldfU1VCTU9ERV9TSElGVCAweDgKKworLyogaGlfcmVzZXRfZmxhZyAqLworCisvKiBwcmVzZXJ2ZSBBcHAgU3RhcnQgYWRkcmVzcyAqLworI2RlZmluZSBISV9SRVNFVF9GTEFHX1BSRVNFUlZFX0FQUF9TVEFSVCAgICAgICAgIDB4MDEKKy8qIHByZXNlcnZlIGhvc3QgaW50ZXJlc3QgKi8KKyNkZWZpbmUgSElfUkVTRVRfRkxBR19QUkVTRVJWRV9IT1NUX0lOVEVSRVNUICAgICAweDAyCisjZGVmaW5lIEhJX1JFU0VUX0ZMQUdfUFJFU0VSVkVfUk9NREFUQSAgICAgICAgICAgMHgwNCAgLyogcHJlc2VydmUgUk9NIGRhdGEgKi8KKyNkZWZpbmUgSElfUkVTRVRfRkxBR19QUkVTRVJWRV9OVlJBTV9TVEFURSAgICAgICAweDA4CisjZGVmaW5lIEhJX1JFU0VUX0ZMQUdfUFJFU0VSVkVfQk9PVF9JTkZPICAgICAgICAgMHgxMAorCisjZGVmaW5lIEhJX1JFU0VUX0ZMQUdfSVNfVkFMSUQgIDB4MTIzNDU2NzggLyogaW5kaWNhdGUgdGhlIHJlc2V0IGZsYWcgaXMKK3ZhbGlkICovCisKKyNkZWZpbmUgT05fUkVTRVRfRkxBR1NfVkFMSUQoKSBcCisJKEhPU1RfSU5URVJFU1QtPmhpX3Jlc2V0X2ZsYWdfdmFsaWQgPT0gSElfUkVTRVRfRkxBR19JU19WQUxJRCkKKworI2RlZmluZSBSRVNFVF9GTEFHU19WQUxJREFURSgpICBcCisJKEhPU1RfSU5URVJFU1QtPmhpX3Jlc2V0X2ZsYWdfdmFsaWQgPSBISV9SRVNFVF9GTEFHX0lTX1ZBTElEKQorCisjZGVmaW5lIFJFU0VUX0ZMQUdTX0lOVkFMSURBVEUoKSBcCisJKEhPU1RfSU5URVJFU1QtPmhpX3Jlc2V0X2ZsYWdfdmFsaWQgPSAwKQorCisjZGVmaW5lIE9OX1JFU0VUX1BSRVNFUlZFX0FQUF9TVEFSVCgpIFwKKyAgICAgICAgKEhPU1RfSU5URVJFU1QtPmhpX3Jlc2V0X2ZsYWcgJiBISV9SRVNFVF9GTEFHX1BSRVNFUlZFX0FQUF9TVEFSVCkKKworI2RlZmluZSBPTl9SRVNFVF9QUkVTRVJWRV9OVlJBTV9TVEFURSgpIFwKKyAgICAgICAgKEhPU1RfSU5URVJFU1QtPmhpX3Jlc2V0X2ZsYWcgJiBISV9SRVNFVF9GTEFHX1BSRVNFUlZFX05WUkFNX1NUQVRFKQorCisjZGVmaW5lIE9OX1JFU0VUX1BSRVNFUlZFX0hPU1RfSU5URVJFU1QoKSBcCisgICAgICAgIChIT1NUX0lOVEVSRVNULT5oaV9yZXNldF9mbGFnICYgSElfUkVTRVRfRkxBR19QUkVTRVJWRV9IT1NUX0lOVEVSRVNUKQorCisjZGVmaW5lIE9OX1JFU0VUX1BSRVNFUlZFX1JPTURBVEEoKSBcCisgICAgICAgIChIT1NUX0lOVEVSRVNULT5oaV9yZXNldF9mbGFnICYgSElfUkVTRVRfRkxBR19QUkVTRVJWRV9ST01EQVRBKQorCisjZGVmaW5lIE9OX1JFU0VUX1BSRVNFUlZFX0JPT1RfSU5GTygpIFwKKyAgICAgICAgKEhPU1RfSU5URVJFU1QtPmhpX3Jlc2V0X2ZsYWcgJiBISV9SRVNFVF9GTEFHX1BSRVNFUlZFX0JPT1RfSU5GTykKKworI2RlZmluZSBISV9BQ1NfRkxBR1NfRU5BQkxFRCAgICAgICAgKDEgPDwgMCkgICAgLyogQUNTIGlzIGVuYWJsZWQgKi8KKyNkZWZpbmUgSElfQUNTX0ZMQUdTX1VTRV9XV0FOICAgICAgICgxIDw8IDEpICAgIC8qIFVzZSBwaHlzaWNhbCBXV0FOIGRldmljZSAqLworI2RlZmluZSBISV9BQ1NfRkxBR1NfVEVTVF9WQVAgICAgICAgKDEgPDwgMikgICAgLyogVXNlIHRlc3QgVkFQICovCisKKy8qIENPTlNPTEUgRkxBR1MKKyAqCisgKiBCaXQgUmFuZ2UgIE1lYW5pbmcKKyAqIC0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgMi4uMCAgICAgVUFSVCBJRCAoMCA9IERlZmF1bHQpCisgKiAgICAzICAgICAgIEJhdWQgU2VsZWN0ICgwID0gOTYwMCwgMSA9IDExNTIwMCkKKyAqICAgMzAuLjQgICAgUmVzZXJ2ZWQKKyAqICAgIDMxICAgICAgRW5hYmxlIENvbnNvbGUKKyAqCisgKi8KKworI2RlZmluZSBISV9DT05TT0xFX0ZMQUdTX0VOQUJMRSAgICAgICAoMSA8PCAzMSkKKyNkZWZpbmUgSElfQ09OU09MRV9GTEFHU19VQVJUX01BU0sgICAgKDB4NykKKyNkZWZpbmUgSElfQ09OU09MRV9GTEFHU19VQVJUX1NISUZUICAgMAorI2RlZmluZSBISV9DT05TT0xFX0ZMQUdTX0JBVURfU0VMRUNUICAoMSA8PCAzKQogCiAvKgogICogSW50ZW5kZWQgZm9yIHVzZSBieSBIb3N0IHNvZnR3YXJlLCB0aGlzIG1hY3JvIHJldHVybnMgdGhlIFRhcmdldCBSQU0KQEAgLTIxMiwzNCArMzQ0LDUyIEBACiAjZGVmaW5lIEFSNjAwM19IT1NUX0lOVEVSRVNUX0lURU1fQUREUkVTUyhpdGVtKSBcCiAgICAgKHUzMikoKHVuc2lnbmVkIGxvbmcpJigoKChzdHJ1Y3QgaG9zdF9pbnRlcmVzdF9zICopKEFSNjAwM19IT1NUX0lOVEVSRVNUX0FERFJFU1MpKS0+aXRlbSkpKQogCisjZGVmaW5lIEFSNjAwNF9IT1NUX0lOVEVSRVNUX0lURU1fQUREUkVTUyhpdGVtKSBcCisgICAgICAgICgodTMyKSYoKCgoc3RydWN0IGhvc3RfaW50ZXJlc3RfcyAqKShBUjYwMDRfSE9TVF9JTlRFUkVTVF9BRERSRVNTKSktPml0ZW0pKSkKKworCiAjZGVmaW5lIEhPU1RfSU5URVJFU1RfREJHTE9HX0lTX0VOQUJMRUQoKSBcCiAgICAgICAgICghKEhPU1RfSU5URVJFU1QtPmhpX29wdGlvbl9mbGFnICYgSElfT1BUSU9OX0RJU0FCTEVfREJHTE9HKSkKIAorI2RlZmluZSBIT1NUX0lOVEVSRVNUX1BLVExPR19JU19FTkFCTEVEKCkgXAorICAgICAgICAoKEhPU1RfSU5URVJFU1QtPmhpX3BrdGxvZ19udW1fYnVmZmVycykpCisKKwogI2RlZmluZSBIT1NUX0lOVEVSRVNUX1BST0ZJTEVfSVNfRU5BQkxFRCgpIFwKICAgICAgICAgKEhPU1RfSU5URVJFU1QtPmhpX29wdGlvbl9mbGFnICYgSElfT1BUSU9OX0VOQUJMRV9QUk9GSUxFKQogCisjZGVmaW5lIExGX1RJTUVSX1NUQUJJTElaQVRJT05fSVNfRU5BQkxFRCgpIFwKKyAgICAgICAgKCEoSE9TVF9JTlRFUkVTVC0+aGlfb3B0aW9uX2ZsYWcgJiBISV9PUFRJT05fTk9fTEZUX1NUQkwpKQorCisjZGVmaW5lIElTX0FNU0RVX09GRkxBT0RfRU5BQkxFRCgpIFwKKyAgICAgICAgKChIT1NUX0lOVEVSRVNULT5oaV9vcHRpb25fZmxhZzIgJiBISV9PUFRJT05fT0ZGTE9BRF9BTVNEVSkpCisKKyNkZWZpbmUgSE9TVF9JTlRFUkVTVF9ERlNfSVNfRU5BQkxFRCgpIFwKKyAgICAgICAgKChIT1NUX0lOVEVSRVNULT5oaV9vcHRpb25fZmxhZzIgJiBISV9PUFRJT05fREZTX1NVUFBPUlQpKQorCiAvKiBDb252ZXJ0IGEgVGFyZ2V0IHZpcnR1YWwgYWRkcmVzcyBpbnRvIGEgVGFyZ2V0IHBoeXNpY2FsIGFkZHJlc3MgKi8KICNkZWZpbmUgQVI2MDAyX1ZUT1AodmFkZHIpICgodmFkZHIpICYgMHgwMDFmZmZmZikKICNkZWZpbmUgQVI2MDAzX1ZUT1AodmFkZHIpICgodmFkZHIpICYgMHgwMDFmZmZmZikKICNkZWZpbmUgVEFSR19WVE9QKFRhcmdldFR5cGUsIHZhZGRyKSBcCiAgICAgICAgICgoKFRhcmdldFR5cGUpID09IFRBUkdFVF9UWVBFX0FSNjAwMikgPyBBUjYwMDJfVlRPUCh2YWRkcikgOiBBUjYwMDNfVlRPUCh2YWRkcikpCiAKLS8qIG92ZXJyaWRlIFJFVjIgUk9NJ3MgYXBwIHN0YXJ0IGFkZHJlc3MgKi8KLSNkZWZpbmUgQVI2MDAyX1JFVjJfQVBQX1NUQVJUX09WRVJSSURFICAgIDB4OTExQTAwCi0jZGVmaW5lIEFSNjAwM19SRVYxX0FQUF9TVEFSVF9PVkVSUklERSAgICAweDk0NGMwMAotI2RlZmluZSBBUjYwMDNfUkVWMV9PVFBfREFUQV9BRERSRVNTICAgICAgMHg1NDI4MDAKLSNkZWZpbmUgQVI2MDAzX1JFVjJfQVBQX1NUQVJUX09WRVJSSURFICAgIDB4OTQ1MDAwCi0jZGVmaW5lIEFSNjAwM19SRVYyX09UUF9EQVRBX0FERFJFU1MgICAgICAweDU0MzgwMAotI2RlZmluZSBBUjYwMDNfQk9BUkRfRVhUX0RBVEFfQUREUkVTUyAgICAgMHg1N0U2MDAKKyNkZWZpbmUgQVI2MDAzX1JFVjJfQVBQX1NUQVJUX09WRVJSSURFICAgICAgICAgIDB4OTQ0QzAwCisjZGVmaW5lIEFSNjAwM19SRVYyX0FQUF9MT0FEX0FERFJFU1MgICAgICAgICAgICAweDU0MzE4MAorI2RlZmluZSBBUjYwMDNfUkVWMl9CT0FSRF9FWFRfREFUQV9BRERSRVNTICAgICAgMHg1N0U1MDAKKyNkZWZpbmUgQVI2MDAzX1JFVjJfREFUQVNFVF9QQVRDSF9BRERSRVNTICAgICAgIDB4NTdlODg0CisjZGVmaW5lIEFSNjAwM19SRVYyX1JBTV9SRVNFUlZFX1NJWkUgICAgICAgICAgICA2OTEyCiAKKyNkZWZpbmUgQVI2MDAzX1JFVjNfQVBQX1NUQVJUX09WRVJSSURFICAgICAgICAgIDB4OTQ1ZDAwCisjZGVmaW5lIEFSNjAwM19SRVYzX0FQUF9MT0FEX0FERFJFU1MgICAgICAgICAgICAweDU0NTAwMAorI2RlZmluZSBBUjYwMDNfUkVWM19CT0FSRF9FWFRfREFUQV9BRERSRVNTICAgICAgMHg1NDIzMzAKKyNkZWZpbmUgQVI2MDAzX1JFVjNfREFUQVNFVF9QQVRDSF9BRERSRVNTICAgICAgIDB4NTdGRjc0CisjZGVmaW5lIEFSNjAwM19SRVYzX1JBTV9SRVNFUlZFX1NJWkUgICAgICAgICAgICA1MTIKKworI2RlZmluZSBBUjYwMDNfQk9BUkRfRVhUX0RBVEFfQUREUkVTUyAgICAgICAgICAgMHg1N0U2MDAKIAogLyogIyBvZiB1MzIgZW50cmllcyBpbiB0YXJncmVncywgdXNlZCBieSBESUFHX0ZFVENIX1RBUkdfUkVHUyAqLwogI2RlZmluZSBBUjYwMDNfRkVUQ0hfVEFSR19SRUdTX0NPVU5UIDY0CiAKICNlbmRpZiAvKiAhX19BU1NFTUJMRVJfXyAqLwogCi0jaWZuZGVmIEFUSF9UQVJHRVQKLSNpbmNsdWRlICJhdGhlbmRwYWNrLmgiCi0jZW5kaWYKLQogI2VuZGlmIC8qIF9fVEFSR0FERFJTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi93bGFuX2RzZXQuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vd2xhbl9kc2V0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3NzViMjUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi93bGFuX2RzZXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMCBBdGhlcm9zIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIAotLy8KLS8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotLy8gcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLS8vCi0vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLS8vIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLS8vIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0vLyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0vLyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLS8vIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0vLyBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotLy8KLS8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIEF1dGhvcihzKTogPSJBdGhlcm9zIgotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotI2lmbmRlZiBfX1dMQU5fRFNFVF9IX18KLSNkZWZpbmUgX19XTEFOX0RTRVRfSF9fCi0KLXR5cGVkZWYgUFJFUEFDSyBzdHJ1Y3Qgd293X2NvbmZpZ19kc2V0IHsKLQotICAgIHU4IHZhbGlkX2RzZXQ7Ci0gICAgdTggZ3Bpb19lbmFibGU7Ci0gICAgdTE2IGdwaW9fcGluOwotfSBQT1NUUEFDSyBXT1dfQ09ORklHX0RTRVQ7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi93bWkuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vd21pLmgKaW5kZXggNGU2MzQzNC4uZDk2ODc0NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vd21pLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi93bWkuaApAQCAtMzQsMTAgKzM0LDYgQEAKICNpZm5kZWYgX1dNSV9IXwogI2RlZmluZSBfV01JX0hfCiAKLSNpZm5kZWYgQVRIX1RBUkdFVAotI2luY2x1ZGUgImF0aHN0YXJ0cGFjay5oIgotI2VuZGlmCi0KICNpbmNsdWRlICJ3bWl4LmgiCiAjaW5jbHVkZSAid2xhbl9kZWZzLmgiCiAKQEAgLTExOCw3ICsxMTQsNyBAQAogdHlwZWRlZiBlbnVtIHsKICAgICBXTUlfREFUQV9IRFJfREFUQV9UWVBFXzgwMl8zID0gMCwKICAgICBXTUlfREFUQV9IRFJfREFUQV9UWVBFXzgwMl8xMSwKLSAgICBXTUlfREFUQV9IRFJfREFUQV9UWVBFX0FDTCwKKyAgICBXTUlfREFUQV9IRFJfREFUQV9UWVBFX0FDTCwgLyogdXNlZCB0byBiZSB1c2VkIGZvciB0aGUgUEFMICovCiB9IFdNSV9EQVRBX0hEUl9EQVRBX1RZUEU7CiAKICNkZWZpbmUgV01JX0RBVEFfSERSX0RBVEFfVFlQRV9NQVNLICAgICAweDMKQEAgLTE1OSw2ICsxNTUsMTYgQEAKICNkZWZpbmUgV01JX0RBVEFfSERSX0dFVF9NRVRBKGgpICAgICAgICAoKChoKS0+aW5mbzIgPj4gV01JX0RBVEFfSERSX01FVEFfU0hJRlQpICYgV01JX0RBVEFfSERSX01FVEFfTUFTSykKICNkZWZpbmUgV01JX0RBVEFfSERSX1NFVF9NRVRBKGgsIF92KSAgICAoKGgpLT5pbmZvMiA9ICgoaCktPmluZm8yICYgfihXTUlfREFUQV9IRFJfTUVUQV9NQVNLIDw8IFdNSV9EQVRBX0hEUl9NRVRBX1NISUZUKSkgfCAoKF92KSA8PCBXTUlfREFUQV9IRFJfTUVUQV9TSElGVCkpCiAKKy8qIE1hY3JvcyBmb3Igb3BlcmF0aW5nIG9uIFdNSV9EQVRBX0hEUiAoaW5mbzMpIGZpZWxkICovCisjZGVmaW5lIFdNSV9EQVRBX0hEUl9ERVZJRF9NQVNLICAgICAgMHhGCisjZGVmaW5lIFdNSV9EQVRBX0hEUl9ERVZJRF9TSElGVCAgICAgMAorI2RlZmluZSBHRVRfREVWSUQoX3YpICAgICAgICAgICAgICAgICgoX3YpICYgV01JX0RBVEFfSERSX0RFVklEX01BU0spCisKKyNkZWZpbmUgV01JX0RBVEFfSERSX0dFVF9ERVZJRChoKSBcCisJKCgoaCktPmluZm8zID4+IFdNSV9EQVRBX0hEUl9ERVZJRF9TSElGVCkgJiBXTUlfREFUQV9IRFJfREVWSURfTUFTSykKKyNkZWZpbmUgV01JX0RBVEFfSERSX1NFVF9ERVZJRChoLCBfdikgXAorCSgoaCktPmluZm8zID0gKChoKS0+aW5mbzMgJiB+KFdNSV9EQVRBX0hEUl9ERVZJRF9NQVNLIDw8IFdNSV9EQVRBX0hEUl9ERVZJRF9TSElGVCkpIHwgKEdFVF9ERVZJRChfdikgPDwgV01JX0RBVEFfSERSX0RFVklEX1NISUZUKSkKKwogdHlwZWRlZiBQUkVQQUNLIHN0cnVjdCB7CiAgICAgczggcnNzaTsKICAgICB1OCBpbmZvOyAgICAgICAgICAgICAgIC8qIHVzYWdlIG9mICdpbmZvJyBmaWVsZCg4LWJpdCk6CkBAIC0xNzUsNyArMTgxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGIxMiAgICAgICAgICAtIEEtTVNEVT8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGIxNTpiMTMgICAgICAtIE1FVEFfREFUQV9WRVJTSU9OIDAgLSA3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICB1MTYgcmVzZXJ2ZWQ7CisgICAgdTE2IGluZm8zOwogfSBQT1NUUEFDSyBXTUlfREFUQV9IRFI7CiAKIC8qCkBAIC0yNTksNiArMjY1LDE3IEBACiAKIAogI2RlZmluZSBXTUlfR0VUX0RFVklDRV9JRChpbmZvMSkgKChpbmZvMSkgJiAweEYpCisvKiBNYWNyb3MgZm9yIG9wZXJhdGluZyBvbiBXTUlfQ01EX0hEUiAoaW5mbzEpIGZpZWxkICovCisjZGVmaW5lIFdNSV9DTURfSERSX0RFVklEX01BU0sgICAgICAweEYKKyNkZWZpbmUgV01JX0NNRF9IRFJfREVWSURfU0hJRlQgICAgIDAKKyNkZWZpbmUgR0VUX0NNRF9ERVZJRChfdikgICAgICAgICAgICgoX3YpICYgV01JX0NNRF9IRFJfREVWSURfTUFTSykKKworI2RlZmluZSBXTUlfQ01EX0hEUl9HRVRfREVWSUQoaCkgXAorCSgoKGgpLT5pbmZvMSA+PiBXTUlfQ01EX0hEUl9ERVZJRF9TSElGVCkgJiBXTUlfQ01EX0hEUl9ERVZJRF9NQVNLKQorI2RlZmluZSBXTUlfQ01EX0hEUl9TRVRfREVWSUQoaCwgX3YpIFwKKwkoKGgpLT5pbmZvMSA9ICgoaCktPmluZm8xICYgXAorCQl+KFdNSV9DTURfSERSX0RFVklEX01BU0sgPDwgV01JX0NNRF9IRFJfREVWSURfU0hJRlQpKSB8IFwKKwkJIChHRVRfQ01EX0RFVklEKF92KSA8PCBXTUlfQ01EX0hEUl9ERVZJRF9TSElGVCkpCiAKIC8qCiAgKiBDb250cm9sIFBhdGgKQEAgLTQzMywxMyArNDUwLDQ3IEBACiAgICAgV01JX1NFVF9CVENPRVhfQlRfT1BFUkFUSU5HX1NUQVRVU19DTURJRCwKICAgICBXTUlfR0VUX0JUQ09FWF9TVEFUU19DTURJRCwKICAgICBXTUlfR0VUX0JUQ09FWF9DT05GSUdfQ01ESUQsCi0gICAgV01JX0dFVF9QTUtfQ01ESUQsCi0gICAgV01JX1NFVF9QQVNTUEhSQVNFX0NNRElELAotICAgIFdNSV9FTkFCTEVfV0FDX0NNRElELAotICAgIFdNSV9XQUNfU0NBTl9SRVBMWV9DTURJRCwKLSAgICBXTUlfV0FDX0NUUkxfUkVRX0NNRElELAotICAgIFdNSV9TRVRfRElWX1BBUkFNU19DTURJRCwKLSAgICBXTUlfU0VUX0VYQ0VTU19UWF9SRVRSWV9USFJFU19DTURJRCwKKworCVdNSV9TRVRfREZTX0VOQUJMRV9DTURJRCwgICAvKiBGMDM0ICovCisJV01JX1NFVF9ERlNfTUlOUlNTSVRIUkVTSF9DTURJRCwKKwlXTUlfU0VUX0RGU19NQVhQVUxTRURVUl9DTURJRCwKKwlXTUlfREZTX1JBREFSX0RFVEVDVEVEX0NNRElELAorCisJLyogUDJQIENNRFMgKi8KKwlXTUlfUDJQX1NFVF9DT05GSUdfQ01ESUQsICAgIC8qIEYwMzggKi8KKwlXTUlfV1BTX1NFVF9DT05GSUdfQ01ESUQsCisJV01JX1NFVF9SRVFfREVWX0FUVFJfQ01ESUQsCisJV01JX1AyUF9GSU5EX0NNRElELAorCVdNSV9QMlBfU1RPUF9GSU5EX0NNRElELAorCVdNSV9QMlBfR09fTkVHX1NUQVJUX0NNRElELAorCVdNSV9QMlBfTElTVEVOX0NNRElELAorCisJV01JX0NPTkZJR19UWF9NQUNfUlVMRVNfQ01ESUQsICAgIC8qIEYwNDAgKi8KKwlXTUlfU0VUX1BST01JU0NVT1VTX01PREVfQ01ESUQsCisJV01JX1JYX0ZSQU1FX0ZJTFRFUl9DTURJRCwKKwlXTUlfU0VUX0NIQU5ORUxfQ01ESUQsCisKKwkvKiBXQUMgY29tbWFuZHMgKi8KKwlXTUlfRU5BQkxFX1dBQ19DTURJRCwKKwlXTUlfV0FDX1NDQU5fUkVQTFlfQ01ESUQsCisJV01JX1dBQ19DVFJMX1JFUV9DTURJRCwKKwlXTUlfU0VUX0RJVl9QQVJBTVNfQ01ESUQsCisKKwlXTUlfR0VUX1BNS19DTURJRCwKKwlXTUlfU0VUX1BBU1NQSFJBU0VfQ01ESUQsCisJV01JX1NFTkRfQVNTT0NfUkVTX0NNRElELAorCVdNSV9TRVRfQVNTT0NfUkVRX1JFTEFZX0NNRElELAorCVdNSV9HRVRfUkZLSUxMX01PREVfQ01ESUQsCisKKwkvKiBBQ1MgY29tbWFuZCwgY29uc2lzdHMgb2Ygc3ViLWNvbW1hbmRzICovCisJV01JX0FDU19DVFJMX0NNRElELAorCisJLyogVWx0cmEgbG93IHBvd2VyIHN0b3JlIC8gcmVjYWxsIGNvbW1hbmRzICovCisJV01JX1NUT1JFUkVDQUxMX0NPTkZJR1VSRV9DTURJRCwKKwlXTUlfU1RPUkVSRUNBTExfUkVDQUxMX0NNRElELAorCVdNSV9TVE9SRVJFQ0FMTF9IT1NUX1JFQURZX0NNRElELAorCVdNSV9GT1JDRV9UQVJHRVRfQVNTRVJUX0NNRElELAorCVdNSV9TRVRfRVhDRVNTX1RYX1JFVFJZX1RIUkVTX0NNRElELAogfSBXTUlfQ09NTUFORF9JRDsKIAogLyoKQEAgLTQ3MCw2ICs1MjEsMTEgQEAKICAgICBMRUFQX0FVVEggICAgICAgICAgID0gMHgwNCwgIC8qIGRpZmZlcmVudCBmcm9tIElFRUVfQVVUSF9NT0RFIGRlZmluaXRpb25zICovCiB9IERPVDExX0FVVEhfTU9ERTsKIAorZW51bSB7CisJQVVUSF9JRExFLAorCUFVVEhfT1BFTl9JTl9QUk9HUkVTUywKK307CisKIHR5cGVkZWYgZW51bSB7CiAgICAgTk9ORV9BVVRIICAgICAgICAgICA9IDB4MDEsCiAgICAgV1BBX0FVVEggICAgICAgICAgICA9IDB4MDIsCkBAIC01NjAsNyArNjE2LDcgQEAKICAqIFdNSV9TRVRfRVhDRVNTX1RYX1JFVFJZX1RIUkVTX0NNRElECiAgKi8KIHR5cGVkZWYgUFJFUEFDSyBzdHJ1Y3QgewotICAgIEFfVUlOVDMyIHRocmVzaG9sZDsKKyAgICB1MzIgdGhyZXNob2xkOwogfSBQT1NUUEFDSyBXTUlfU0VUX0VYQ0VTU19UWF9SRVRSWV9USFJFU19DTUQ7CiAKIC8qCkBAIC0xOTY5LDEyICsyMDI1LDQ3IEBACiAjZW5kaWYKICAgICBXTUlfUkVQT1JUX0JUQ09FWF9TVEFUU19FVkVOVElELAogICAgIFdNSV9SRVBPUlRfQlRDT0VYX0NPTkZJR19FVkVOVElELAotICAgIFdNSV9BQ01fUkVKRUNUX0VWRU5USUQsCi0gICAgV01JX1RISU5fUkVTRVJWRURfU1RBUlRfRVZFTlRJRCA9IDB4ODAwMCwKLSAgICAvKiBFdmVudHMgaW4gdGhpcyByYW5nZSBhcmUgcmVzZXJ2ZWQgZm9yIHRoaW5tb2RlIAotICAgICAqIFNlZSB3bWlfdGhpbi5oIGZvciBhY3R1YWwgZGVmaW5pdGlvbnMgKi8KLSAgICBXTUlfVEhJTl9SRVNFUlZFRF9FTkRfRVZFTlRJRCA9IDB4OGZmZiwKKwlXTUlfR0VUX1BNS19FVkVOVElELAogCisJLyogREZTIEV2ZW50cyAqLworCVdNSV9ERlNfSE9TVF9BVFRBQ0hfRVZFTlRJRCwKKwlXTUlfREZTX0hPU1RfSU5JVF9FVkVOVElELAorCVdNSV9ERlNfUkVTRVRfREVMQVlMSU5FU19FVkVOVElELAorCVdNSV9ERlNfUkVTRVRfUkFEQVJRX0VWRU5USUQsCisJV01JX0RGU19SRVNFVF9BUl9FVkVOVElELAorCVdNSV9ERlNfUkVTRVRfQVJRX0VWRU5USUQsCisJV01JX0RGU19TRVRfRFVSX01VTFRJUExJRVJfRVZFTlRJRCwKKwlXTUlfREZTX1NFVF9CQU5HUkFEQVJfRVZFTlRJRCwKKwlXTUlfREZTX1NFVF9ERUJVR0xFVkVMX0VWRU5USUQsCisJV01JX0RGU19QSFlFUlJfRVZFTlRJRCwKKwkvKiBDQ1ggRXZhbnRzICovCisJV01JX0NDWF9STV9TVEFUVVNfRVZFTlRJRCwKKworCS8qIFAyUCBFdmVudHMgKi8KKwlXTUlfUDJQX0dPX05FR19SRVNVTFRfRVZFTlRJRCwKKworCVdNSV9XQUNfU0NBTl9ET05FX0VWRU5USUQsCisJV01JX1dBQ19SRVBPUlRfQlNTX0VWRU5USUQsCisJV01JX1dBQ19TVEFSVF9XUFNfRVZFTlRJRCwKKwlXTUlfV0FDX0NUUkxfUkVRX1JFUExZX0VWRU5USUQsCisKKwkvKiBSRktJTEwgRXZlbnRzICovCisJV01JX1JGS0lMTF9TVEFURV9DSEFOR0VfRVZFTlRJRCwKKwlXTUlfUkZLSUxMX0dFVF9NT0RFX0NNRF9FVkVOVElELAorCVdNSV9USElOX1JFU0VSVkVEX1NUQVJUX0VWRU5USUQgPSAweDgwMDAsCisKKwkvKgorCSAqIEV2ZW50cyBpbiB0aGlzIHJhbmdlIGFyZSByZXNlcnZlZCBmb3IgdGhpbm1vZGUKKwkgKiBTZWUgd21pX3RoaW4uaCBmb3IgYWN0dWFsIGRlZmluaXRpb25zCisJICovCisJV01JX1RISU5fUkVTRVJWRURfRU5EX0VWRU5USUQgPSAweDhmZmYsCisKKwlXTUlfU0VUX0NIQU5ORUxfRVZFTlRJRCwKKwlXTUlfQVNTT0NfUkVRX0VWRU5USUQsCisKKwkvKiBnZW5lcmljIEFDUyBldmVudCAqLworCVdNSV9BQ1NfRVZFTlRJRCwKKwlXTUlfUkVQT1JUX1dNTV9QQVJBTVNfRVZFTlRJRAogfSBXTUlfRVZFTlRfSUQ7CiAKIApAQCAtMzEyMiwxMCArMzIxMyw2IEBACiAgKiBFbmQgb2YgQVAgbW9kZSBkZWZpbml0aW9ucwogICovCiAKLSNpZm5kZWYgQVRIX1RBUkdFVAotI2luY2x1ZGUgImF0aGVuZHBhY2suaCIKLSNlbmRpZgotCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi93bWlfdGhpbi5oIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi93bWlfdGhpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTgzNjRjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vd21pX3RoaW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDM0NyArMCwwIEBACi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gPGNvcHlyaWdodCBmaWxlPSJ3bWlfdGhpbi5oIiBjb21wYW55PSJBdGhlcm9zIj4KLS8vICAgIENvcHlyaWdodCAoYykgMjAwNC0yMDEwIEF0aGVyb3MgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gCi0vLwotLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0vLyBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotLy8KLS8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotLy8gV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotLy8gTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLS8vIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLS8vIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotLy8gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLS8vIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0vLwotLy8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gQXV0aG9yKHMpOiA9IkF0aGVyb3MiCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0vKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBvZiB0aGUgV01JIHByb3RvY29sIHNwZWNpZmllZCBpbiB0aGUKLSAqIFdpcmVsZXNzIE1vZHVsZSBJbnRlcmZhY2UgKFdNSSkuICBJdCBpbmNsdWRlcyBkZWZpbml0aW9ucyBvZiBhbGwgdGhlCi0gKiBjb21tYW5kcyBhbmQgZXZlbnRzLiBDb21tYW5kcyBhcmUgbWVzc2FnZXMgZnJvbSB0aGUgaG9zdCB0byB0aGUgV00uCi0gKiBFdmVudHMgYW5kIFJlcGxpZXMgYXJlIG1lc3NhZ2VzIGZyb20gdGhlIFdNIHRvIHRoZSBob3N0LgotICoKLSAqIE93bmVyc2hpcCBvZiBjb3JyZWN0bmVzcyBpbiByZWdhcmRzIHRvIFdNSSBjb21tYW5kcwotICogYmVsb25ncyB0byB0aGUgaG9zdCBkcml2ZXIgYW5kIHRoZSBXTSBpcyBub3QgcmVxdWlyZWQgdG8gdmFsaWRhdGUKLSAqIHBhcmFtZXRlcnMgZm9yIHZhbHVlLCBwcm9wZXIgcmFuZ2UsIG9yIGFueSBvdGhlciBjaGVja2luZy4KLSAqCi0gKi8KLQotI2lmbmRlZiBfV01JX1RISU5fSF8KLSNkZWZpbmUgX1dNSV9USElOX0hfCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotCi10eXBlZGVmIGVudW0gewotICAgIFdNSV9USElOX0NPTkZJR19DTURJRCA9ICAweDgwMDAsIC8vIFdNSV9USElOX1JFU0VSVkVEX1NUQVJUIAotICAgIFdNSV9USElOX1NFVF9NSUJfQ01ESUQsCi0gICAgV01JX1RISU5fR0VUX01JQl9DTURJRCwKLSAgICBXTUlfVEhJTl9KT0lOX0NNRElELAotICAgIC8qIGFkZCBuZXcgQ01ESUQncyBoZXJlICovCi0gICAgV01JX1RISU5fUkVTRVJWRURfRU5EX0NNRElEID0gMHg4ZmZmIC8vIFdNSV9USElOX1JFU0VSVkVEX0VORAotfSBXTUlfVEhJTl9DT01NQU5EX0lEOwotCi10eXBlZGVmIGVudW17Ci0gICAgVEVNUExBVEVfRlJNX0ZJUlNUID0gMCwKLSAgICBURU1QTEFURV9GUk1fUFJPQkVfUkVRID1URU1QTEFURV9GUk1fRklSU1QsCi0gICAgVEVNUExBVEVfRlJNX0JFQUNPTiwKLSAgICBURU1QTEFURV9GUk1fUFJPQkVfUkVTUCwKLSAgICBURU1QTEFURV9GUk1fTlVMTCwKLSAgICBURU1QTEFURV9GUk1fUU9TX05VTEwsCi0gICAgVEVNUExBVEVfRlJNX1BTUE9MTCwKLSAgICBURU1QTEFURV9GUk1fTUFYCi19V01JX1RFTVBMQVRFX0ZSTV9UWVBFOwotCi0vKiBURU1QTEFURV9GUk1fTEVOLi4uIHJlcHJlc2VudCB0aGUgbWF4aW11bSBhbGxvd2FibGUKLSAqIGRhdGEgbGVuZ3RocyAoYnl0ZXMpIGZvciBlYWNoIGZyYW1lIHR5cGUgKi8KLSNkZWZpbmUgVEVNUExBVEVfRlJNX0xFTl9QUk9CRV9SRVEgICgyNTYpIC8qIFN5bWJpYW4gZGljdGF0ZXMgYSBtaW5pbXVtIG9mIDI1NiBmb3IgdGhlc2UgMyBmcmFtZSB0eXBlcyAqLwotI2RlZmluZSBURU1QTEFURV9GUk1fTEVOX0JFQUNPTiAgICAgKDI1NikKLSNkZWZpbmUgVEVNUExBVEVfRlJNX0xFTl9QUk9CRV9SRVNQICgyNTYpCi0jZGVmaW5lIFRFTVBMQVRFX0ZSTV9MRU5fTlVMTCAgICAgICAoMzIpCi0jZGVmaW5lIFRFTVBMQVRFX0ZSTV9MRU5fUU9TX05VTEwgICAoMzIpCi0jZGVmaW5lIFRFTVBMQVRFX0ZSTV9MRU5fUFNQT0xMICAgICAoMzIpCi0jZGVmaW5lIFRFTVBMQVRFX0ZSTV9MRU5fU1VNIChURU1QTEFURV9GUk1fTEVOX1BST0JFX1JFUSArIFRFTVBMQVRFX0ZSTV9MRU5fQkVBQ09OICsgVEVNUExBVEVfRlJNX0xFTl9QUk9CRV9SRVNQICsgXAotICAgICAgICAgICAgVEVNUExBVEVfRlJNX0xFTl9OVUxMICsgVEVNUExBVEVfRlJNX0xFTl9RT1NfTlVMTCArIFRFTVBMQVRFX0ZSTV9MRU5fUFNQT0xMKQotCi0KLS8qIE1BQyBIZWFkZXIgQnVpbGQgUnVsZXMgKi8KLS8qICBUaGVzZSB2YWx1ZXMgYWxsb3cgdGhlIGhvc3QgdG8gY29uZmlndXJlIHRoZSAKLSAqICB0YXJnZXQgY29kZSB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciBjb25zdHJ1Y3RpbmcKLSAqICB0aGUgTUFDIGhlYWRlci4gIEluIGNhc2VzIHdoZXJlIHRoZSBNQUMgaGVhZGVyCi0gKiAgaXMgcHJvdmlkZWQgYnkgdGhlIGhvc3QgZnJhbWV3b3JrLCB0aGUgdGFyZ2V0Ci0gKiAgaGFzIGEgZGltaW5pc2hlZCByZXNwb25zaWJpbGl0eSBvdmVyIHdoYXQgZmllbGRzCi0gKiAgaXQgbXVzdCB3cml0ZS4gVGhpcyB3aWxsIHZhcnkgZnJvbSBmcmFtZXdvcmsgdG8gZnJhbWV3b3JrLgotICogIFN5bWJpYW4gcmVxdWlyZXMgZGlmZmVyZW50IGJlaGF2aW9yIGZyb20gTUFDODAyMTEgd2hpY2gKLSAqICByZXF1aXJlcyBkaWZmZXJlbnQgYmVoYXZpb3IgZnJvbSBNUyBOYXRpdmUgV2lmaS4gKi8KLSNkZWZpbmUgV01JX1dSVF9WRVJfVFlQRSAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFdNSV9XUlRfRFVSQVRJT04gICAgMHgwMDAwMDAwMgotI2RlZmluZSBXTUlfV1JUX0RJUkVDVElPTiAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgV01JX1dSVF9QT1dFUiAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIFdNSV9XUlRfV0VQICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBXTUlfV1JUX01PUkUgICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgV01JX1dSVF9CU1NJRCAgICAgICAweDAwMDAwMDQwCi0jZGVmaW5lIFdNSV9XUlRfUU9TICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBXTUlfV1JUX1NFUU5PICAgICAgIDB4MDAwMDAxMDAKLSNkZWZpbmUgV01JX0dVQVJEX1RYICAgICAgICAweDAwMDAwMjAwIC8qIHByZXZlbnRzIFRYIG9wcyB0aGF0IGFyZSBub3QgYWxsb3dlZCBmb3IgYSBjdXJyZW50IHN0YXRlICovCi0jZGVmaW5lIFdNSV9XUlRfREVGQVVMVF9DT05GSUcgIChXTUlfV1JUX1ZFUl9UWVBFIHwgV01JX1dSVF9EVVJBVElPTiB8IFdNSV9XUlRfRElSRUNUSU9OIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV01JX1dSVF9QT1dFUiB8IFdNSV9XUlRfTU9SRSB8IFdNSV9XUlRfV0VQIHwgV01JX1dSVF9CU1NJRCB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdNSV9XUlRfUU9TIHwgV01JX1dSVF9TRVFOTyB8IFdNSV9HVUFSRF9UWCkKLQotLyogV01JX1RISU5fQ09ORklHX1RYQ09NUExFVEUgLS0gVXNlZCB0byBjb25maWd1cmUgdGhlIHBhcmFtcyBhbmQgY29udGVudCBmb3IgCi0gKiAgVFggQ29tcGxldGUgbWVzc2FnZXMgdGhlIHdpbGwgY29tZSBmcm9tIHRoZSBUYXJnZXQuICB0aGVzZSBtZXNzYWdlcyBhcmUgCi0gKiAgZGlzYWJsZWQgYnkgZGVmYXVsdCBidXQgY2FuIGJlIGVuYWJsZWQgdXNpbmcgdGhpcyBzdHJ1Y3R1cmUgYW5kIHRoZSAKLSAqICBXTUlfVEhJTl9DT05GSUdfQ01ESUQuICovCi10eXBlZGVmIFBSRVBBQ0sgc3RydWN0IHsKLSAgICB1OCB2ZXJzaW9uOyAvKiB0aGUgdmVyc2lvbmVkIHR5cGUgb2YgbWVzc2FnZXMgdG8gdXNlIG9yIDAgdG8gZGlzYWJsZSAqLwotICAgIHU4IGNvdW50VGhyZXNob2xkOyAvKiBtc2cgY291bnQgdGhyZXNob2xkIHRyaWdnZXJpbmcgYSB0eCBjb21wbGV0ZSBtZXNzYWdlICovCi0gICAgdTE2IHRpbWVUaHJlc2hvbGQ7IC8qIHRpbWVvdXQgaW50ZXJ2YWwgaW4gTVNFQyB0cmlnZ2VyaW5nIGEgdHggY29tcGxldGUgbWVzc2FnZSAqLwotfSBQT1NUUEFDSyBXTUlfVEhJTl9DT05GSUdfVFhDT01QTEVURTsKLQotLyogV01JX1RISU5fQ09ORklHX0RFQ1JZUFRfRVJSIC0tIFVzZWQgdG8gY29uZmlndXJlIGJlaGF2aW9yIGZvciByZWNlaXZlZCBmcmFtZXMgCi0gKiAgdGhhdCBoYXZlIGRlY3J5cHRpb24gZXJyb3JzLiAgVGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gZGlzY2FyZCB0aGUgZnJhbWUKLSAqICB3aXRob3V0IG5vdGlmaWNhdGlvbi4gQWx0ZXJuYXRlbHksIHRoZSBNQUMgSGVhZGVyIGlzIGZvcndhcmRlZCB0byB0aGUgaG9zdCAKLSAqICB3aXRoIHRoZSBmYWlsZWQgc3RhdHVzLiAqLwotdHlwZWRlZiBQUkVQQUNLIHN0cnVjdCB7Ci0gICAgdTggZW5hYmxlOyAvKiAxID09IHNlbmQgZGVjcnlwdCBlcnJvcnMgdG8gdGhlIGhvc3QsIDAgPT0gZG9uJ3QgKi8KLSAgICB1OCByZXNlcnZlZFszXTsgLyogYWxpZ24gcGFkZGluZyAqLwotfSBQT1NUUEFDSyBXTUlfVEhJTl9DT05GSUdfREVDUllQVF9FUlI7Ci0KLS8qIFdNSV9USElOX0NPTkZJR19UWF9NQUNfUlVMRVMgLS0gVXNlZCB0byBjb25maWd1cmUgYmVoYXZpb3IgZm9yIHRyYW5zbWl0dGVkCi0gKiAgZnJhbWVzIHRoYXQgcmVxdWlyZSBwYXJ0aWFsIE1BQyBoZWFkZXIgY29uc3RydWN0aW9uLiBUaGVzZSBydWxlcyAKLSAqICBhcmUgdXNlZCBieSB0aGUgdGFyZ2V0IHRvIGluZGljYXRlIHdoaWNoIGZpZWxkcyBuZWVkIHRvIGJlIHdyaXR0ZW4uICovCi10eXBlZGVmIFBSRVBBQ0sgc3RydWN0IHsKLSAgICB1MzIgcnVsZXM7IC8qIGNvbWJpbmF0aW9uIG9mIFdNSV9XUlRfLi4uIHZhbHVlcyAqLwotfSBQT1NUUEFDSyBXTUlfVEhJTl9DT05GSUdfVFhfTUFDX1JVTEVTOwotCi0vKiBXTUlfVEhJTl9DT05GSUdfUlhfRklMVEVSX1JVTEVTIC0tIFVzZWQgdG8gY29uZmlndXJlIGJlaGF2aW9yIGZvciByZWNlaXZlZAotICogIGZyYW1lcyBhcyB0byB3aGljaCBmcmFtZXMgc2hvdWxkIGdldCBmb3J3YXJkZWQgdG8gdGhlIGhvc3QgYW5kIHdoaWNoCi0gKiAgc2hvdWxkIGdldCBwcm9jZXNzZWQgaW50ZXJuYWxseS4gKi8KLXR5cGVkZWYgUFJFUEFDSyBzdHJ1Y3QgewotICAgIHUzMiBydWxlczsgLyogY29tYmluYXRpb24gb2YgV01JX0ZJTFRfLi4uIHZhbHVlcyAqLwotfSBQT1NUUEFDSyBXTUlfVEhJTl9DT05GSUdfUlhfRklMVEVSX1JVTEVTOwotCi0vKiBXTUlfVEhJTl9DT05GSUdfQ01EIC0tIFVzZWQgdG8gY29udGFpbiBzb21lIGNvbWJpbmF0aW9uIG9mIHRoZSBhYm92ZQotICogIFdNSV9USElOX0NPTkZJR18uLi4gc3RydWN0dXJlcy4gVGhlIGFjdHVhbCBjb21iaW5hdGlvbiBpcyBpbmRpY2F0ZWQgCi0gKiAgYnkgdGhlIHZhbHVlIG9mIGNmZ0ZpZWxkLiBFYWNoIGJpdCBpbiB0aGlzIGZpZWxkIGNvcnJlc3BvbmRzIHRvIAotICogIG9uZSBvZiB0aGUgYWJvdmUgc3RydWN0dXJlcy4gKi8KLXR5cGVkZWYgUFJFUEFDSyBzdHJ1Y3QgewotI2RlZmluZSBXTUlfVEhJTl9DRkdfVFhDT01QICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBXTUlfVEhJTl9DRkdfREVDUllQVCAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBXTUlfVEhJTl9DRkdfTUFDX1JVTEVTICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBXTUlfVEhJTl9DRkdfRklMVEVSX1JVTEVTICAgMHgwMDAwMDAwOAotICAgIHUzMiBjZmdGaWVsZDsgICAvKiBjb21iaW5hdGlvbiBvZiBXTUlfVEhJTl9DRkdfLi4uIGRlc2NyaWJlcyBjb250ZW50cyBvZiBjb25maWcgY29tbWFuZCAqLwotICAgIHUxNiBsZW5ndGg7ICAgICAvKiBsZW5ndGggaW4gYnl0ZXMgb2YgYXBwZW5kZWQgc3ViLWNvbW1hbmRzICovCi0gICAgdTggcmVzZXJ2ZWRbMl07ICAgLyogYWxpZ24gcGFkZGluZyAqLwotfSBQT1NUUEFDSyBXTUlfVEhJTl9DT05GSUdfQ01EOwotCi0vKiBNSUIgQWNjZXNzIElkZW50aWZpZXJzIHRhaWxvcmVkIGZvciBTeW1iaWFuLiAqLwotZW51bSB7Ci0gICAgTUlCX0lEX1NUQV9NQUMgPSAxLCAgICAgICAgICAgICAvLyBbUkVBRE9OTFldCi0gICAgTUlCX0lEX1JYX0xJRkVfVElNRSwgICAgICAgICAgICAvLyBbTk9UIElNUExFTUVOVEVEXQotICAgIE1JQl9JRF9TTE9UX1RJTUUsICAgICAgICAgICAgICAgLy8gW1JFQUQvV1JJVEVdCi0gICAgTUlCX0lEX1JUU19USFJFU0hPTEQsICAgICAgICAgICAvLyBbUkVBRC9XUklURV0KLSAgICBNSUJfSURfQ1RTX1RPX1NFTEYsICAgICAgICAgICAgIC8vIFtSRUFEL1dSSVRFXQotICAgIE1JQl9JRF9URU1QTEFURV9GUkFNRSwgICAgICAgICAgLy8gW1dSSVRFIE9OTFldCi0gICAgTUlCX0lEX1JYRlJBTUVfRklMVEVSLCAgICAgICAgICAvLyBbUkVBRC9XUklURV0KLSAgICBNSUJfSURfQkVBQ09OX0ZJTFRFUl9UQUJMRSwgICAgIC8vIFtXUklURSBPTkxZXQotICAgIE1JQl9JRF9CRUFDT05fRklMVEVSLCAgICAgICAgICAgLy8gW1JFQUQvV1JJVEVdCi0gICAgTUlCX0lEX0JFQUNPTl9MT1NUX0NPVU5ULCAgICAgICAvLyBbV1JJVEUgT05MWV0KLSAgICBNSUJfSURfUlNTSV9USFJFU0hPTEQsICAgICAgICAgIC8vIFtXUklURSBPTkxZXQotICAgIE1JQl9JRF9IVF9DQVAsICAgICAgICAgICAgICAgICAgLy8gW05PVCBJTVBMRU1FTlRFRF0KLSAgICBNSUJfSURfSFRfT1AsICAgICAgICAgICAgICAgICAgIC8vIFtOT1QgSU1QTEVNRU5URURdCi0gICAgTUlCX0lEX0hUXzJORF9CRUFDT04sICAgICAgICAgICAvLyBbTk9UIElNUExFTUVOVEVEXQotICAgIE1JQl9JRF9IVF9CTE9DS19BQ0ssICAgICAgICAgICAgLy8gW05PVCBJTVBMRU1FTlRFRF0KLSAgICBNSUJfSURfUFJFQU1CTEUsICAgICAgICAgICAgICAgIC8vIFtSRUFEL1dSSVRFXQotICAgIC8qTUlCX0lEX0dST1VQX0FERFJfVEFCTEUsKi8KLSAgICAvKk1JQl9JRF9XRVBfREVGQVVMVF9LRVlfSUQgKi8KLSAgICAvKk1JQl9JRF9UWF9QT1dFUiAqLwotICAgIC8qTUlCX0lEX0FSUF9JUF9UQUJMRSAqLwotICAgIC8qTUlCX0lEX1NMRUVQX01PREUgKi8KLSAgICAvKk1JQl9JRF9XQUtFX0lOVEVSVkFMKi8KLSAgICAvKk1JQl9JRF9TVEFUX1RBQkxFKi8KLSAgICAvKk1JQl9JRF9JQlNTX1BXUl9TQVZFKi8KLSAgICAvKk1JQl9JRF9DT1VOVEVSU19UQUJMRSovCi0gICAgLypNSUJfSURfRVRIRVJUWVBFX0ZJTFRFUiovCi0gICAgLypNSUJfSURfQkNfVURQX0ZJTFRFUiovCi0gICAgICAgCi19OwotCi10eXBlZGVmIFBSRVBBQ0sgc3RydWN0IHsKLSAgICB1OCBhZGRyW0FUSF9NQUNfTEVOXTsKLX0gUE9TVFBBQ0sgV01JX1RISU5fTUlCX1NUQV9NQUM7Ci0KLXR5cGVkZWYgUFJFUEFDSyBzdHJ1Y3QgewotICAgIHUzMiB0aW1lOyAvLyB1bml0cyA9PSBtc2VjCi19IFBPU1RQQUNLIFdNSV9USElOX01JQl9SWF9MSUZFX1RJTUU7Ci0KLXR5cGVkZWYgUFJFUEFDSyBzdHJ1Y3QgewotICAgIHU4IGVuYWJsZTsgLy8xID0gb24sIDAgPSBvZmYKLX0gUE9TVFBBQ0sgV01JX1RISU5fTUlCX0NUU19UT19TRUxGOwotCi10eXBlZGVmIFBSRVBBQ0sgc3RydWN0IHsKLSAgICB1MzIgdGltZTsgLy8gdW5pdHMgPT0gdXNlYwotfSBQT1NUUEFDSyBXTUlfVEhJTl9NSUJfU0xPVF9USU1FOwotCi10eXBlZGVmIFBSRVBBQ0sgc3RydWN0IHsKLSAgICB1MTYgbGVuZ3RoOyAvL3VuaXRzID09IGJ5dGVzCi19IFBPU1RQQUNLIFdNSV9USElOX01JQl9SVFNfVEhSRVNIT0xEOwotCi10eXBlZGVmIFBSRVBBQ0sgc3RydWN0IHsKLSAgICB1OCB0eXBlOyAvLyB0eXBlIG9mIGZyYW1lCi0gICAgdTggcmF0ZTsgLy8gdHggcmF0ZSB0byBiZSB1c2VkIChvbmUgb2YgV01JX0JJVF9SQVRFKQotICAgIHUxNiBsZW5ndGg7IC8vIG51bSBieXRlcyBmb2xsb3dpbmcgdGhpcyBzdHJ1Y3R1cmUgYXMgdGhlIHRlbXBsYXRlIGRhdGEKLX0gUE9TVFBBQ0sgV01JX1RISU5fTUlCX1RFTVBMQVRFX0ZSQU1FOwotCi10eXBlZGVmIFBSRVBBQ0sgc3RydWN0IHsKLSNkZWZpbmUgRlJBTUVfRklMVEVSX1BST01JU0NVT1VTIDB4MDAwMDAwMDEKLSNkZWZpbmUgRlJBTUVfRklMVEVSX0JTU0lEICAgICAgIDB4MDAwMDAwMDIKLSAgICB1MzIgZmlsdGVyTWFzazsKLX0gUE9TVFBBQ0sgV01JX1RISU5fTUlCX1JYRlJBTUVfRklMVEVSOwotCi0KLSNkZWZpbmUgSUVfRklMVEVSX1RSRUFUTUVOVF9DSEFOR0UgMQotI2RlZmluZSBJRV9GSUxURVJfVFJFQVRNRU5UX0FQUEVBUiAyCi0KLXR5cGVkZWYgUFJFUEFDSyBzdHJ1Y3QgewotICAgIHU4IGllOwotICAgIHU4IHRyZWF0bWVudDsKLX0gUE9TVFBBQ0sgV01JX1RISU5fTUlCX0JFQUNPTl9GSUxURVJfVEFCTEU7Ci0KLXR5cGVkZWYgUFJFUEFDSyBzdHJ1Y3QgewotICAgIHU4IGllOwotICAgIHU4IHRyZWF0bWVudDsKLSAgICB1OCBvdWlbM107Ci0gICAgdTggdHlwZTsKLSAgICB1MTYgdmVyc2lvbjsKLX0gUE9TVFBBQ0sgV01JX1RISU5fTUlCX0JFQUNPTl9GSUxURVJfVEFCTEVfT1VJOwotCi10eXBlZGVmIFBSRVBBQ0sgc3RydWN0IHsKLSAgICB1MTYgbnVtRWxlbWVudHM7Ci0gICAgdTggZW50cnlTaXplOyAvLyBzaXplb2YoV01JX1RISU5fTUlCX0JFQUNPTl9GSUxURVJfVEFCTEUpIG9uIGhvc3QgY3B1IG1heSBiZSAyIG1heSBiZSA0Ci0gICAgdTggcmVzZXJ2ZWQ7Ci19IFBPU1RQQUNLIFdNSV9USElOX01JQl9CRUFDT05fRklMVEVSX1RBQkxFX0hFQURFUjsgCi0KLXR5cGVkZWYgUFJFUEFDSyBzdHJ1Y3QgewotICAgIHUzMiBjb3VudDsgLyogbnVtIGJlYWNvbnMgYmV0d2VlbiBkZWxpdmVyaWVzICovCi0gICAgdTggZW5hYmxlOwotICAgIHU4IHJlc2VydmVkWzNdOwotfSBQT1NUUEFDSyBXTUlfVEhJTl9NSUJfQkVBQ09OX0ZJTFRFUjsKLQotdHlwZWRlZiBQUkVQQUNLIHN0cnVjdCB7Ci0gICAgdTMyIGNvdW50OyAvKiBudW0gY29uc2VjIGxvc3QgYmVhY29ucyBhZnRlciB3aGljaCBzZW5kIGV2ZW50ICovCi19IFBPU1RQQUNLIFdNSV9USElOX01JQl9CRUFDT05fTE9TVF9DT1VOVDsKLQotdHlwZWRlZiBQUkVQQUNLIHN0cnVjdCB7Ci0gICAgdTggcnNzaTsgLyogdGhlIGxvdyB0aHJlc2hvbGQgd2hpY2ggY2FuIHRyaWdnZXIgYW4gZXZlbnQgd2FybmluZyAqLwotICAgIHU4IHRvbGVyYW5jZTsgLyogdGhlIHJhbmdlIGFib3ZlIGFuZCBiZWxvdyB0aGUgdGhyZXNob2xkIHRvIHByZXZlbnQgZXZlbnQgZmxvb2RpbmcgdG8gdGhlIGhvc3QuICovCi0gICAgdTggY291bnQ7IC8qIHRoZSBzYW1wbGUgY291bnQgb2YgY29uc2VjdXRpdmUgZnJhbWVzIG5lY2Vzc2FyeSB0byB0cmlnZ2VyIGFuIGV2ZW50LiAqLwotICAgIHU4IHJlc2VydmVkWzFdOyAvKiBwYWRkaW5nICovCi19IFBPU1RQQUNLIFdNSV9USElOX01JQl9SU1NJX1RIUkVTSE9MRDsKLQotCi10eXBlZGVmIFBSRVBBQ0sgc3RydWN0IHsKLSAgICB1MzIgY2FwOwotICAgIHUzMiByeFJhdGVGaWVsZDsKLSAgICB1MzIgYmVhbUZvcm1pbmc7Ci0gICAgdTggYWRkcltBVEhfTUFDX0xFTl07Ci0gICAgdTggZW5hYmxlOwotICAgIHU4IHN0YmM7Ci0gICAgdTggbWF4QU1QRFU7Ci0gICAgdTggbXNkdVNwYWNpbmc7Ci0gICAgdTggbWNzRmVlZGJhY2s7Ci0gICAgdTggYW50ZW5uYVNlbENhcDsKLX0gUE9TVFBBQ0sgV01JX1RISU5fTUlCX0hUX0NBUDsKLQotdHlwZWRlZiBQUkVQQUNLIHN0cnVjdCB7Ci0gICAgdTMyIGluZm9GaWVsZDsKLSAgICB1MzIgYmFzaWNSYXRlRmllbGQ7Ci0gICAgdTggcHJvdGVjdGlvbjsKLSAgICB1OCBzZWNvbmRDaGFubmVsb2Zmc2V0OwotICAgIHU4IGNoYW5uZWxXaWR0aDsKLSAgICB1OCByZXNlcnZlZDsKLX0gUE9TVFBBQ0sgV01JX1RISU5fTUlCX0hUX09QOwotCi10eXBlZGVmIFBSRVBBQ0sgc3RydWN0IHsKLSNkZWZpbmUgU0VDT05EX0JFQUNPTl9QUklNQVJZICAgMQotI2RlZmluZSBTRUNPTkRfQkVBQ09OX0VJVEhFUiAgICAyCi0jZGVmaW5lIFNFQ09ORF9CRUFDT05fU0VDT05EQVJZIDMKLSAgICB1OCBjZmc7Ci0gICAgdTggcmVzZXJ2ZWRbM107IC8qIHBhZGRpbmcgKi8KLX0gUE9TVFBBQ0sgV01JX1RISU5fTUlCX0hUXzJORF9CRUFDT047Ci0KLXR5cGVkZWYgUFJFUEFDSyBzdHJ1Y3QgewotICAgIHU4IHR4VElERmllbGQ7Ci0gICAgdTggcnhUSURGaWVsZDsKLSAgICB1OCByZXNlcnZlZFsyXTsgLyogcGFkZGluZyAqLwotfSBQT1NUUEFDSyBXTUlfVEhJTl9NSUJfSFRfQkxPQ0tfQUNLOwotCi10eXBlZGVmIFBSRVBBQ0sgc3RydWN0IHsKLSAgICB1OCBlbmFibGVMb25nOyAvLyAxID09IGxvbmcgcHJlYW1ibGUsIDAgPT0gc2hvcnQgcHJlYW1ibGUKLSAgICB1OCByZXNlcnZlZFszXTsKLX0gUE9TVFBBQ0sgV01JX1RISU5fTUlCX1BSRUFNQkxFOwotCi10eXBlZGVmIFBSRVBBQ0sgc3RydWN0IHsgICAgCi0gICAgdTE2IGxlbmd0aDsgICAgIC8qIHRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGFwcGVuZGVkIE1JQiBkYXRhICovCi0gICAgdTggbWliSUQ7ICAgICAgLyogdGhlIElEIG9mIHRoZSBNSUIgZWxlbWVudCBiZWluZyBzZXQgKi8KLSAgICB1OCByZXNlcnZlZDsgLyogYWxpZ24gcGFkZGluZyAqLwotfSBQT1NUUEFDSyBXTUlfVEhJTl9TRVRfTUlCX0NNRDsKLQotdHlwZWRlZiBQUkVQQUNLIHN0cnVjdCB7ICAgIAotICAgIHU4IG1pYklEOyAgICAgIC8qIHRoZSBJRCBvZiB0aGUgTUlCIGVsZW1lbnQgYmVpbmcgc2V0ICovCi0gICAgdTggcmVzZXJ2ZWRbM107IC8qIGFsaWduIHBhZGRpbmcgKi8KLX0gUE9TVFBBQ0sgV01JX1RISU5fR0VUX01JQl9DTUQ7Ci0KLXR5cGVkZWYgUFJFUEFDSyBzdHJ1Y3QgewotICAgIHUzMiBiYXNpY1JhdGVNYXNrOyAvKiBiaXQgbWFzayBvZiBiYXNpYyByYXRlcyAqLwotICAgIHUzMiBiZWFjb25JbnR2YWw7IC8qIFRVcyAqLwotICAgIHUxNiBhdGltV2luZG93OyAvKiBUVXMgKi8KLSAgICB1MTYgY2hhbm5lbDsgLyogZnJlcXVlbmN5IGluIE1oeiAqLwotICAgIHU4IG5ldHdvcmtUeXBlOyAvKiBJTkZSQV9ORVRXT1JLIHwgQURIT0NfTkVUV09SSyAqLwotICAgIHU4IHNzaWRMZW5ndGg7IC8qIDAgLSAzMiAqLwotICAgIHU4IHByb2JlOyAgICAgIC8qICE9IDAgOiBpc3N1ZSBwcm9iZSByZXEgYXQgc3RhcnQgKi8KLSAgICB1OCByZXNlcnZlZDsgICAvKiBhbGlnbm1lbnQgKi8KLSAgICB1OCAgICAgc3NpZFtXTUlfTUFYX1NTSURfTEVOXTsgICAgCi0gICAgdTggYnNzaWRbQVRIX01BQ19MRU5dOwotfSBQT1NUUEFDSyBXTUlfVEhJTl9KT0lOX0NNRDsKLQotdHlwZWRlZiBQUkVQQUNLIHN0cnVjdCB7Ci0gICAgdTE2IGR0aW07IC8qIGR0aW0gaW50ZXJ2YWwgaW4gbnVtIGJlYWNvbnMgKi8KLSAgICB1MTYgYWlkOyAvKiA4MDIxMSBBSUQgZnJvbSBBc3NvYyByZXNwICovCi19IFBPU1RQQUNLIFdNSV9USElOX1BPU1RfQVNTT0NfQ01EOwotCi10eXBlZGVmIGVudW0gewotICAgIFdNSV9USElOX0VWRU5USURfUkVTRVJWRURfU1RBUlQgICAgICAgICAgID0gMHg4MDAwLAotICAgIFdNSV9USElOX0dFVF9NSUJfRVZFTlRJRCwKLSAgICBXTUlfVEhJTl9KT0lOX0VWRU5USUQsCi0gICAgCi0gICAgLyogQWRkIG5ldyBUSElOIEVWRU5USUQncyBoZXJlICovCi0gICAgV01JX1RISU5fRVZFTlRJRF9SRVNFUlZFRF9FTkQgICAgICAgICAgID0gMHg4ZmZmICAgIAotfSBXTUlfVEhJTl9FVkVOVF9JRDsKLQotLyogUG9zc2libGUgdmFsdWVzIGZvciBXTUlfVEhJTl9KT0lOX0VWRU5ULnJlc3VsdCAqLwotdHlwZWRlZiBlbnVtIHsKLSAgICBXTUlfVEhJTl9KT0lOX1JFU19TVUNDRVNTID0gMCwgLy8gZGV2aWNlIGhhcyBqb2luZWQgdGhlIG5ldHdvcmsKLSAgICBXTUlfVEhJTl9KT0lOX1JFU19GQUlMLCAvLyBkZXZpY2UgZmFpbGVkIGZvciB1bnNwZWNpZmllZCByZWFzb24KLSAgICBXTUlfVEhJTl9KT0lOX1JFU19USU1FT1VULCAvLyBkZXZpY2UgZmFpbGVkIGR1ZSB0byBubyBiZWFjb24gcnggaW4gdGltZSBsaW1pdAotICAgIFdNSV9USElOX0pPSU5fUkVTX0JBRF9QQVJBTSwgLy8gZGV2aWNlIGZhaWxlZCBkdWUgdG8gYmFkIGNtZCBwYXJhbS4KLX1XTUlfVEhJTl9KT0lOX1JFU1VMVDsKLQotdHlwZWRlZiBQUkVQQUNLIHN0cnVjdCB7Ci0gICAgdTggcmVzdWx0OyAvKiB0aGUgcmVzdWx0IG9mIHRoZSBqb2luIGNtZC4gb25lIG9mIFdNSV9USElOX0pPSU5fUkVTVUxUICovCi0gICAgdTggcmVzZXJ2ZWRbM107IC8qIGFsaWdubWVudCAqLwotfSBQT1NUUEFDSyBXTUlfVEhJTl9KT0lOX0VWRU5UOwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi0jZW5kaWYgLyogX1dNSV9USElOX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL3dtaXguaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vd21peC5oCmluZGV4IDM2YWNiYTYuLjk0MzVlYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vd21peC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vd21peC5oCkBAIC00MCwxMCArNDAsNiBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotI2lmbmRlZiBBVEhfVEFSR0VUCi0jaW5jbHVkZSAiYXRoc3RhcnRwYWNrLmgiCi0jZW5kaWYKLQogI2luY2x1ZGUgImRiZ2xvZy5oIgogCiAvKgpAQCAtMTQ4LDcgKzE0NCw2IEBACiAgKiBBbGwgbWFza3MgYXJlIDE4LWJpdCBtYXNrcyB3aXRoIGJpdCBOIG9wZXJhdGluZyBvbiBHUElPIHBpbiBOLgogICovCiAKLSNpbmNsdWRlICJncGlvLmgiCiAKIC8qCiAgKiBTZXQgR1BJTyBwaW4gb3V0cHV0IHN0YXRlLgpAQCAtMjY4LDkgKzI2Myw2IEBACiAgICAgdTMyIGNvdW50OwogfSBQT1NUUEFDSyBXTUlYX1BST0ZfQ09VTlRfRVZFTlQ7CiAKLSNpZm5kZWYgQVRIX1RBUkdFVAotI2luY2x1ZGUgImF0aGVuZHBhY2suaCIKLSNlbmRpZgogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb25fZHJ2LmggYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uX2Rydi5oCmluZGV4IGI2MDYzMzQuLjM0ZGIyOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb25fZHJ2LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbl9kcnYuaApAQCAtODEsMTAgKzgxLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgTWJveElzcllpZWxkVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggSHRjQ29udHJvbEJ1ZmZlcnMpOwogCi1pbnQgYXI2MDAwX3ByZXBhcmVfdGFyZ2V0KHN0cnVjdCBoaWZfZGV2aWNlICpoaWZEZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIFRhcmdldFR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIFRhcmdldFZlcnNpb24pOwotCiBpbnQgYXI2MDAwX3NldF9oY2lfYnJpZGdlX2ZsYWdzKHN0cnVjdCBoaWZfZGV2aWNlICpoaWZEZXZpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIFRhcmdldFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIEZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9ncGlvX2FwaS5oIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2dwaW9fYXBpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiNGM1NDcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2dwaW9fYXBpLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gPGNvcHlyaWdodCBmaWxlPSJncGlvX2FwaS5oIiBjb21wYW55PSJBdGhlcm9zIj4KLS8vICAgIENvcHlyaWdodCAoYykgMjAwNC0yMDEwIEF0aGVyb3MgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gCi0vLwotLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0vLyBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotLy8KLS8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotLy8gV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotLy8gTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLS8vIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLS8vIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotLy8gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLS8vIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0vLwotLy8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gSG9zdC1zaWRlIEdlbmVyYWwgUHVycG9zZSBJL08gQVBJLgotLy8KLS8vIEF1dGhvcihzKTogPSJBdGhlcm9zIgotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSNpZm5kZWYgX0dQSU9fQVBJX0hfCi0jZGVmaW5lIF9HUElPX0FQSV9IXwotCi0vKgotICogU2VuZCBhIGNvbW1hbmQgdG8gdGhlIFRhcmdldCBpbiBvcmRlciB0byBjaGFuZ2Ugb3V0cHV0IG9uIEdQSU8gcGlucy4KLSAqLwotaW50IHdtaV9ncGlvX291dHB1dF9zZXQoc3RydWN0IHdtaV90ICp3bWlwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgc2V0X21hc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBjbGVhcl9tYXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgZW5hYmxlX21hc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBkaXNhYmxlX21hc2spOwotCi0vKgotICogU2VuZCBhIGNvbW1hbmQgdG8gdGhlIFRhcmdldCByZXF1ZXN0aW5nIGlucHV0IHN0YXRlIG9mIEdQSU8gcGlucy4KLSAqLwotaW50IHdtaV9ncGlvX2lucHV0X2dldChzdHJ1Y3Qgd21pX3QgKndtaXApOwotCi0vKgotICogU2VuZCBhIGNvbW1hbmQgdG8gdGhlIFRhcmdldCB0byBjaGFuZ2UgdGhlIHZhbHVlIG9mIGEgR1BJTyByZWdpc3Rlci4KLSAqLwotaW50IHdtaV9ncGlvX3JlZ2lzdGVyX3NldChzdHJ1Y3Qgd21pX3QgKndtaXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGdwaW9yZWdfaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHZhbHVlKTsKLQotLyoKLSAqIFNlbmQgYSBjb21tYW5kIHRvIHRoZSBUYXJnZXQgdG8gZmV0Y2ggdGhlIHZhbHVlIG9mIGEgR1BJTyByZWdpc3Rlci4KLSAqLwotaW50IHdtaV9ncGlvX3JlZ2lzdGVyX2dldChzdHJ1Y3Qgd21pX3QgKndtaXAsIHUzMiBncGlvcmVnX2lkKTsKLQotLyoKLSAqIFNlbmQgYSBjb21tYW5kIHRvIHRoZSBUYXJnZXQsIGFja25vd2xlZGdpbmcgc29tZSBHUElPIGludGVycnVwdHMuCi0gKi8KLWludCB3bWlfZ3Bpb19pbnRyX2FjayhzdHJ1Y3Qgd21pX3QgKndtaXAsIHUzMiBhY2tfbWFzayk7Ci0KLSNlbmRpZiAvKiBfR1BJT19BUElfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9oaWYuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9oaWYuaAppbmRleCA4MzY1MGQ1Li4yNDIwMGU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvaGlmLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2hpZi5oCkBAIC0zMiw3ICszMiw2IEBACiAvKiBIZWFkZXIgZmlsZXMgKi8KICNpbmNsdWRlICJhX2NvbmZpZy5oIgogI2luY2x1ZGUgImF0aGRlZnMuaCIKLSNpbmNsdWRlICJhX3R5cGVzLmgiCiAjaW5jbHVkZSAiYV9vc2FwaS5oIgogI2luY2x1ZGUgImRsX2xpc3QuaCIKIApAQCAtMTQ4LDcgKzE0Nyw3IEBACiAgKgogICogICBISUZfREVWSUNFX0dFVF9NQk9YX0JMT0NLX1NJWkUKICAqICAgaW5wdXQgOiBub25lCi0gKiAgIG91dHB1dCA6IGFycmF5IG9mIDQgQV9VSU5UMzJzCisgKiAgIG91dHB1dCA6IGFycmF5IG9mIDQgdTMycwogICogICBub3RlczogYmxvY2sgc2l6ZSBpcyByZXR1cm5lZCBmb3IgZWFjaCBtYWlsYm94ICg0KQogICoKICAqICAgSElGX0RFVklDRV9HRVRfTUJPWF9BRERSCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvdGFyZ2V0X3JlZ190YWJsZS5oIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL3RhcmdldF9yZWdfdGFibGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTIyMjVkNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvdGFyZ2V0X3JlZ190YWJsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQ0ICswLDAgQEAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyA8Y29weXJpZ2h0IGZpbGU9InRhcmdldF9yZWdfdGFibGUuaCIgY29tcGFueT0iQXRoZXJvcyI+Ci0vLyAgICBDb3B5cmlnaHQgKGMpIDIwMDQtMjAxMCBBdGhlcm9zIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIAotLy8KLS8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotLy8gcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLS8vCi0vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLS8vIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLS8vIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0vLyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0vLyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLS8vIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0vLyBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotLy8KLS8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIFRhcmdldCByZWdpc3RlciB0YWJsZSBtYWNyb3MgYW5kIHN0cnVjdHVyZSBkZWZpbml0aW9ucwotLy8KLS8vIEF1dGhvcihzKTogPSJBdGhlcm9zIgotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotI2lmbmRlZiBUQVJHRVRfUkVHX1RBQkxFX0hfCi0jZGVmaW5lIFRBUkdFVF9SRUdfVEFCTEVfSF8KLQotI2luY2x1ZGUgInRhcmdhZGRycy5oIgotCi0vKioqIFdBUk5JTkcgOiBBZGQgdG8gdGhlIGVuZCBvZiB0aGUgVEFCTEUhIGRvIG5vdCBjaGFuZ2UgdGhlIG9yZGVyICoqKiovCi10eXBlZGVmIHN0cnVjdCB0YXJnZXRkZWZfcyB7Ci0gICAgdTMyIGRfUlRDX0JBU0VfQUREUkVTUzsKLSAgICB1MzIgZF9TWVNURU1fU0xFRVBfT0ZGU0VUOwotICAgIHUzMiBkX1NZU1RFTV9TTEVFUF9ESVNBQkxFX0xTQjsKLSAgICB1MzIgZF9TWVNURU1fU0xFRVBfRElTQUJMRV9NQVNLOwotICAgIHUzMiBkX0NMT0NLX0NPTlRST0xfT0ZGU0VUOwotICAgIHUzMiBkX0NMT0NLX0NPTlRST0xfU0kwX0NMS19NQVNLOwotICAgIHUzMiBkX1JFU0VUX0NPTlRST0xfT0ZGU0VUOwotICAgIHUzMiBkX1JFU0VUX0NPTlRST0xfU0kwX1JTVF9NQVNLOwotICAgIHUzMiBkX0dQSU9fQkFTRV9BRERSRVNTOwotICAgIHUzMiBkX0dQSU9fUElOMF9PRkZTRVQ7Ci0gICAgdTMyIGRfR1BJT19QSU4xX09GRlNFVDsKLSAgICB1MzIgZF9HUElPX1BJTjBfQ09ORklHX01BU0s7Ci0gICAgdTMyIGRfR1BJT19QSU4xX0NPTkZJR19NQVNLOwotICAgIHUzMiBkX1NJX0NPTkZJR19CSURJUl9PRF9EQVRBX0xTQjsKLSAgICB1MzIgZF9TSV9DT05GSUdfQklESVJfT0RfREFUQV9NQVNLOwotICAgIHUzMiBkX1NJX0NPTkZJR19JMkNfTFNCOwotICAgIHUzMiBkX1NJX0NPTkZJR19JMkNfTUFTSzsKLSAgICB1MzIgZF9TSV9DT05GSUdfUE9TX1NBTVBMRV9MU0I7Ci0gICAgdTMyIGRfU0lfQ09ORklHX1BPU19TQU1QTEVfTUFTSzsKLSAgICB1MzIgZF9TSV9DT05GSUdfSU5BQ1RJVkVfQ0xLX0xTQjsKLSAgICB1MzIgZF9TSV9DT05GSUdfSU5BQ1RJVkVfQ0xLX01BU0s7Ci0gICAgdTMyIGRfU0lfQ09ORklHX0lOQUNUSVZFX0RBVEFfTFNCOwotICAgIHUzMiBkX1NJX0NPTkZJR19JTkFDVElWRV9EQVRBX01BU0s7Ci0gICAgdTMyIGRfU0lfQ09ORklHX0RJVklERVJfTFNCOwotICAgIHUzMiBkX1NJX0NPTkZJR19ESVZJREVSX01BU0s7Ci0gICAgdTMyIGRfU0lfQkFTRV9BRERSRVNTOwotICAgIHUzMiBkX1NJX0NPTkZJR19PRkZTRVQ7Ci0gICAgdTMyIGRfU0lfVFhfREFUQTBfT0ZGU0VUOwotICAgIHUzMiBkX1NJX1RYX0RBVEExX09GRlNFVDsKLSAgICB1MzIgZF9TSV9SWF9EQVRBMF9PRkZTRVQ7Ci0gICAgdTMyIGRfU0lfUlhfREFUQTFfT0ZGU0VUOwotICAgIHUzMiBkX1NJX0NTX09GRlNFVDsKLSAgICB1MzIgZF9TSV9DU19ET05FX0VSUl9NQVNLOwotICAgIHUzMiBkX1NJX0NTX0RPTkVfSU5UX01BU0s7Ci0gICAgdTMyIGRfU0lfQ1NfU1RBUlRfTFNCOwotICAgIHUzMiBkX1NJX0NTX1NUQVJUX01BU0s7Ci0gICAgdTMyIGRfU0lfQ1NfUlhfQ05UX0xTQjsKLSAgICB1MzIgZF9TSV9DU19SWF9DTlRfTUFTSzsKLSAgICB1MzIgZF9TSV9DU19UWF9DTlRfTFNCOwotICAgIHUzMiBkX1NJX0NTX1RYX0NOVF9NQVNLOwotICAgIHUzMiBkX0JPQVJEX0RBVEFfU1o7Ci0gICAgdTMyIGRfQk9BUkRfRVhUX0RBVEFfU1o7Ci19IFRBUkdFVF9SRUdJU1RFUl9UQUJMRTsKLQotI2RlZmluZSBCT0FSRF9EQVRBX1NaX01BWCAyMDQ4Ci0KLSNpZiBkZWZpbmVkKE1ZX1RBUkdFVF9ERUYpIC8qIHsgKi8KLQotI2lmZGVmIEFUSF9SRUdfVEFCTEVfRElSRUNUX0FTU0lHTgotCi1zdGF0aWMgc3RydWN0IHRhcmdldGRlZl9zIG15X3RhcmdldF9kZWYgPSB7Ci0gICAgUlRDX0JBU0VfQUREUkVTUywKLSAgICBTWVNURU1fU0xFRVBfT0ZGU0VULAotICAgIFNZU1RFTV9TTEVFUF9ESVNBQkxFX0xTQiwKLSAgICBTWVNURU1fU0xFRVBfRElTQUJMRV9NQVNLLAotICAgIENMT0NLX0NPTlRST0xfT0ZGU0VULAotICAgIENMT0NLX0NPTlRST0xfU0kwX0NMS19NQVNLLAotICAgIFJFU0VUX0NPTlRST0xfT0ZGU0VULAotICAgIFJFU0VUX0NPTlRST0xfU0kwX1JTVF9NQVNLLAotICAgIEdQSU9fQkFTRV9BRERSRVNTLAotICAgIEdQSU9fUElOMF9PRkZTRVQsCi0gICAgR1BJT19QSU4wX0NPTkZJR19NQVNLLAotICAgIEdQSU9fUElOMV9PRkZTRVQsCi0gICAgR1BJT19QSU4xX0NPTkZJR19NQVNLLAotICAgIFNJX0NPTkZJR19CSURJUl9PRF9EQVRBX0xTQiwKLSAgICBTSV9DT05GSUdfQklESVJfT0RfREFUQV9NQVNLLAotICAgIFNJX0NPTkZJR19JMkNfTFNCLAotICAgIFNJX0NPTkZJR19JMkNfTUFTSywKLSAgICBTSV9DT05GSUdfUE9TX1NBTVBMRV9MU0IsCi0gICAgU0lfQ09ORklHX1BPU19TQU1QTEVfTUFTSywKLSAgICBTSV9DT05GSUdfSU5BQ1RJVkVfQ0xLX0xTQiwKLSAgICBTSV9DT05GSUdfSU5BQ1RJVkVfQ0xLX01BU0ssCi0gICAgU0lfQ09ORklHX0lOQUNUSVZFX0RBVEFfTFNCLAotICAgIFNJX0NPTkZJR19JTkFDVElWRV9EQVRBX01BU0ssCi0gICAgU0lfQ09ORklHX0RJVklERVJfTFNCLAotICAgIFNJX0NPTkZJR19ESVZJREVSX01BU0ssCi0gICAgU0lfQkFTRV9BRERSRVNTLAotICAgIFNJX0NPTkZJR19PRkZTRVQsCi0gICAgU0lfVFhfREFUQTBfT0ZGU0VULAotICAgIFNJX1RYX0RBVEExX09GRlNFVCwKLSAgICBTSV9SWF9EQVRBMF9PRkZTRVQsCi0gICAgU0lfUlhfREFUQTFfT0ZGU0VULAotICAgIFNJX0NTX09GRlNFVCwKLSAgICBTSV9DU19ET05FX0VSUl9NQVNLLAotICAgIFNJX0NTX0RPTkVfSU5UX01BU0ssCi0gICAgU0lfQ1NfU1RBUlRfTFNCLAotICAgIFNJX0NTX1NUQVJUX01BU0ssCi0gICAgU0lfQ1NfUlhfQ05UX0xTQiwKLSAgICBTSV9DU19SWF9DTlRfTUFTSywKLSAgICBTSV9DU19UWF9DTlRfTFNCLAotICAgIFNJX0NTX1RYX0NOVF9NQVNLLAotICAgIE1ZX1RBUkdFVF9CT0FSRF9EQVRBX1NaLAotICAgIE1ZX1RBUkdFVF9CT0FSRF9FWFRfREFUQV9TWiwKLX07Ci0KLSNlbHNlCi0KLXN0YXRpYyBzdHJ1Y3QgdGFyZ2V0ZGVmX3MgbXlfdGFyZ2V0X2RlZiA9IHsKLSAgICAuZF9SVENfQkFTRV9BRERSRVNTID0gUlRDX0JBU0VfQUREUkVTUywKLSAgICAuZF9TWVNURU1fU0xFRVBfT0ZGU0VUID0gU1lTVEVNX1NMRUVQX09GRlNFVCwKLSAgICAuZF9TWVNURU1fU0xFRVBfRElTQUJMRV9MU0IgPSBTWVNURU1fU0xFRVBfRElTQUJMRV9MU0IsCi0gICAgLmRfU1lTVEVNX1NMRUVQX0RJU0FCTEVfTUFTSyA9IFNZU1RFTV9TTEVFUF9ESVNBQkxFX01BU0ssCi0gICAgLmRfQ0xPQ0tfQ09OVFJPTF9PRkZTRVQgPSBDTE9DS19DT05UUk9MX09GRlNFVCwKLSAgICAuZF9DTE9DS19DT05UUk9MX1NJMF9DTEtfTUFTSyA9IENMT0NLX0NPTlRST0xfU0kwX0NMS19NQVNLLAotICAgIC5kX1JFU0VUX0NPTlRST0xfT0ZGU0VUID0gUkVTRVRfQ09OVFJPTF9PRkZTRVQsCi0gICAgLmRfUkVTRVRfQ09OVFJPTF9TSTBfUlNUX01BU0sgPSBSRVNFVF9DT05UUk9MX1NJMF9SU1RfTUFTSywKLSAgICAuZF9HUElPX0JBU0VfQUREUkVTUyA9IEdQSU9fQkFTRV9BRERSRVNTLAotICAgIC5kX0dQSU9fUElOMF9PRkZTRVQgPSBHUElPX1BJTjBfT0ZGU0VULAotICAgIC5kX0dQSU9fUElOMF9DT05GSUdfTUFTSyA9IEdQSU9fUElOMF9DT05GSUdfTUFTSywKLSAgICAuZF9HUElPX1BJTjFfT0ZGU0VUID0gR1BJT19QSU4xX09GRlNFVCwKLSAgICAuZF9HUElPX1BJTjFfQ09ORklHX01BU0sgPSBHUElPX1BJTjFfQ09ORklHX01BU0ssCi0gICAgLmRfU0lfQ09ORklHX0JJRElSX09EX0RBVEFfTFNCID0gU0lfQ09ORklHX0JJRElSX09EX0RBVEFfTFNCLAotICAgIC5kX1NJX0NPTkZJR19CSURJUl9PRF9EQVRBX01BU0sgPSBTSV9DT05GSUdfQklESVJfT0RfREFUQV9NQVNLLAotICAgIC5kX1NJX0NPTkZJR19JMkNfTFNCID0gU0lfQ09ORklHX0kyQ19MU0IsCi0gICAgLmRfU0lfQ09ORklHX0kyQ19NQVNLID0gU0lfQ09ORklHX0kyQ19NQVNLLAotICAgIC5kX1NJX0NPTkZJR19QT1NfU0FNUExFX0xTQiA9IFNJX0NPTkZJR19QT1NfU0FNUExFX0xTQiwKLSAgICAuZF9TSV9DT05GSUdfUE9TX1NBTVBMRV9NQVNLID0gU0lfQ09ORklHX1BPU19TQU1QTEVfTUFTSywKLSAgICAuZF9TSV9DT05GSUdfSU5BQ1RJVkVfQ0xLX0xTQiA9IFNJX0NPTkZJR19JTkFDVElWRV9DTEtfTFNCLAotICAgIC5kX1NJX0NPTkZJR19JTkFDVElWRV9DTEtfTUFTSyA9IFNJX0NPTkZJR19JTkFDVElWRV9DTEtfTUFTSywKLSAgICAuZF9TSV9DT05GSUdfSU5BQ1RJVkVfREFUQV9MU0IgPSBTSV9DT05GSUdfSU5BQ1RJVkVfREFUQV9MU0IsCi0gICAgLmRfU0lfQ09ORklHX0lOQUNUSVZFX0RBVEFfTUFTSyA9IFNJX0NPTkZJR19JTkFDVElWRV9EQVRBX01BU0ssCi0gICAgLmRfU0lfQ09ORklHX0RJVklERVJfTFNCID0gU0lfQ09ORklHX0RJVklERVJfTFNCLAotICAgIC5kX1NJX0NPTkZJR19ESVZJREVSX01BU0sgPSBTSV9DT05GSUdfRElWSURFUl9NQVNLLAotICAgIC5kX1NJX0JBU0VfQUREUkVTUyA9IFNJX0JBU0VfQUREUkVTUywKLSAgICAuZF9TSV9DT05GSUdfT0ZGU0VUID0gU0lfQ09ORklHX09GRlNFVCwKLSAgICAuZF9TSV9UWF9EQVRBMF9PRkZTRVQgPSBTSV9UWF9EQVRBMF9PRkZTRVQsCi0gICAgLmRfU0lfVFhfREFUQTFfT0ZGU0VUID0gU0lfVFhfREFUQTFfT0ZGU0VULAotICAgIC5kX1NJX1JYX0RBVEEwX09GRlNFVCA9IFNJX1JYX0RBVEEwX09GRlNFVCwKLSAgICAuZF9TSV9SWF9EQVRBMV9PRkZTRVQgPSBTSV9SWF9EQVRBMV9PRkZTRVQsCi0gICAgLmRfU0lfQ1NfT0ZGU0VUID0gU0lfQ1NfT0ZGU0VULAotICAgIC5kX1NJX0NTX0RPTkVfRVJSX01BU0sgPSBTSV9DU19ET05FX0VSUl9NQVNLLAotICAgIC5kX1NJX0NTX0RPTkVfSU5UX01BU0sgPSBTSV9DU19ET05FX0lOVF9NQVNLLAotICAgIC5kX1NJX0NTX1NUQVJUX0xTQiA9IFNJX0NTX1NUQVJUX0xTQiwKLSAgICAuZF9TSV9DU19TVEFSVF9NQVNLID0gU0lfQ1NfU1RBUlRfTUFTSywKLSAgICAuZF9TSV9DU19SWF9DTlRfTFNCID0gU0lfQ1NfUlhfQ05UX0xTQiwKLSAgICAuZF9TSV9DU19SWF9DTlRfTUFTSyA9IFNJX0NTX1JYX0NOVF9NQVNLLAotICAgIC5kX1NJX0NTX1RYX0NOVF9MU0IgPSBTSV9DU19UWF9DTlRfTFNCLAotICAgIC5kX1NJX0NTX1RYX0NOVF9NQVNLID0gU0lfQ1NfVFhfQ05UX01BU0ssCi0gICAgLmRfQk9BUkRfREFUQV9TWiA9IE1ZX1RBUkdFVF9CT0FSRF9EQVRBX1NaLAotICAgIC5kX0JPQVJEX0VYVF9EQVRBX1NaID0gTVlfVEFSR0VUX0JPQVJEX0VYVF9EQVRBX1NaLAotfTsKLQotI2VuZGlmCi0KLSNpZiBNWV9UQVJHRVRfQk9BUkRfREFUQV9TWiA+IEJPQVJEX0RBVEFfU1pfTUFYCi0jZXJyb3IgIkJPQVJEX0RBVEFfU1pfTUFYIGlzIHRvbyBzbWFsbCIKLSNlbmRpZgotCi1zdHJ1Y3QgdGFyZ2V0ZGVmX3MgKk1ZX1RBUkdFVF9ERUYgPSAmbXlfdGFyZ2V0X2RlZjsKLQotI2Vsc2UgLyogfSB7ICovCi0KLSNkZWZpbmUgUlRDX0JBU0VfQUREUkVTUyAodGFyZ2V0ZGVmLT5kX1JUQ19CQVNFX0FERFJFU1MpCi0jZGVmaW5lIFNZU1RFTV9TTEVFUF9PRkZTRVQgKHRhcmdldGRlZi0+ZF9TWVNURU1fU0xFRVBfT0ZGU0VUKQotI2RlZmluZSBTWVNURU1fU0xFRVBfRElTQUJMRV9MU0IgKHRhcmdldGRlZi0+ZF9TWVNURU1fU0xFRVBfRElTQUJMRV9MU0IpCi0jZGVmaW5lIFNZU1RFTV9TTEVFUF9ESVNBQkxFX01BU0sgKHRhcmdldGRlZi0+ZF9TWVNURU1fU0xFRVBfRElTQUJMRV9NQVNLKQotI2RlZmluZSBDTE9DS19DT05UUk9MX09GRlNFVCAodGFyZ2V0ZGVmLT5kX0NMT0NLX0NPTlRST0xfT0ZGU0VUKQotI2RlZmluZSBDTE9DS19DT05UUk9MX1NJMF9DTEtfTUFTSyAodGFyZ2V0ZGVmLT5kX0NMT0NLX0NPTlRST0xfU0kwX0NMS19NQVNLKQotI2RlZmluZSBSRVNFVF9DT05UUk9MX09GRlNFVCAodGFyZ2V0ZGVmLT5kX1JFU0VUX0NPTlRST0xfT0ZGU0VUKQotI2RlZmluZSBSRVNFVF9DT05UUk9MX1NJMF9SU1RfTUFTSyAodGFyZ2V0ZGVmLT5kX1JFU0VUX0NPTlRST0xfU0kwX1JTVF9NQVNLKQotI2RlZmluZSBHUElPX0JBU0VfQUREUkVTUyAodGFyZ2V0ZGVmLT5kX0dQSU9fQkFTRV9BRERSRVNTKQotI2RlZmluZSBHUElPX1BJTjBfT0ZGU0VUICh0YXJnZXRkZWYtPmRfR1BJT19QSU4wX09GRlNFVCkKLSNkZWZpbmUgR1BJT19QSU4wX0NPTkZJR19NQVNLICh0YXJnZXRkZWYtPmRfR1BJT19QSU4wX0NPTkZJR19NQVNLKQotI2RlZmluZSBHUElPX1BJTjFfT0ZGU0VUICh0YXJnZXRkZWYtPmRfR1BJT19QSU4xX09GRlNFVCkKLSNkZWZpbmUgR1BJT19QSU4xX0NPTkZJR19NQVNLICh0YXJnZXRkZWYtPmRfR1BJT19QSU4xX0NPTkZJR19NQVNLKQotI2RlZmluZSBTSV9DT05GSUdfQklESVJfT0RfREFUQV9MU0IgKHRhcmdldGRlZi0+ZF9TSV9DT05GSUdfQklESVJfT0RfREFUQV9MU0IpCi0jZGVmaW5lIFNJX0NPTkZJR19CSURJUl9PRF9EQVRBX01BU0sgKHRhcmdldGRlZi0+ZF9TSV9DT05GSUdfQklESVJfT0RfREFUQV9NQVNLKQotI2RlZmluZSBTSV9DT05GSUdfSTJDX0xTQiAodGFyZ2V0ZGVmLT5kX1NJX0NPTkZJR19JMkNfTFNCKQotI2RlZmluZSBTSV9DT05GSUdfSTJDX01BU0sgKHRhcmdldGRlZi0+ZF9TSV9DT05GSUdfSTJDX01BU0spCi0jZGVmaW5lIFNJX0NPTkZJR19QT1NfU0FNUExFX0xTQiAodGFyZ2V0ZGVmLT5kX1NJX0NPTkZJR19QT1NfU0FNUExFX0xTQikKLSNkZWZpbmUgU0lfQ09ORklHX1BPU19TQU1QTEVfTUFTSyAodGFyZ2V0ZGVmLT5kX1NJX0NPTkZJR19QT1NfU0FNUExFX01BU0spCi0jZGVmaW5lIFNJX0NPTkZJR19JTkFDVElWRV9DTEtfTFNCICh0YXJnZXRkZWYtPmRfU0lfQ09ORklHX0lOQUNUSVZFX0NMS19MU0IpCi0jZGVmaW5lIFNJX0NPTkZJR19JTkFDVElWRV9DTEtfTUFTSyAodGFyZ2V0ZGVmLT5kX1NJX0NPTkZJR19JTkFDVElWRV9DTEtfTUFTSykKLSNkZWZpbmUgU0lfQ09ORklHX0lOQUNUSVZFX0RBVEFfTFNCICh0YXJnZXRkZWYtPmRfU0lfQ09ORklHX0lOQUNUSVZFX0RBVEFfTFNCKQotI2RlZmluZSBTSV9DT05GSUdfSU5BQ1RJVkVfREFUQV9NQVNLICh0YXJnZXRkZWYtPmRfU0lfQ09ORklHX0lOQUNUSVZFX0RBVEFfTUFTSykKLSNkZWZpbmUgU0lfQ09ORklHX0RJVklERVJfTFNCICh0YXJnZXRkZWYtPmRfU0lfQ09ORklHX0RJVklERVJfTFNCKQotI2RlZmluZSBTSV9DT05GSUdfRElWSURFUl9NQVNLICh0YXJnZXRkZWYtPmRfU0lfQ09ORklHX0RJVklERVJfTUFTSykKLSNkZWZpbmUgU0lfQkFTRV9BRERSRVNTICh0YXJnZXRkZWYtPmRfU0lfQkFTRV9BRERSRVNTKQotI2RlZmluZSBTSV9DT05GSUdfT0ZGU0VUICh0YXJnZXRkZWYtPmRfU0lfQ09ORklHX09GRlNFVCkKLSNkZWZpbmUgU0lfVFhfREFUQTBfT0ZGU0VUICh0YXJnZXRkZWYtPmRfU0lfVFhfREFUQTBfT0ZGU0VUKQotI2RlZmluZSBTSV9UWF9EQVRBMV9PRkZTRVQgKHRhcmdldGRlZi0+ZF9TSV9UWF9EQVRBMV9PRkZTRVQpCi0jZGVmaW5lIFNJX1JYX0RBVEEwX09GRlNFVCAodGFyZ2V0ZGVmLT5kX1NJX1JYX0RBVEEwX09GRlNFVCkKLSNkZWZpbmUgU0lfUlhfREFUQTFfT0ZGU0VUICh0YXJnZXRkZWYtPmRfU0lfUlhfREFUQTFfT0ZGU0VUKQotI2RlZmluZSBTSV9DU19PRkZTRVQgKHRhcmdldGRlZi0+ZF9TSV9DU19PRkZTRVQpCi0jZGVmaW5lIFNJX0NTX0RPTkVfRVJSX01BU0sgKHRhcmdldGRlZi0+ZF9TSV9DU19ET05FX0VSUl9NQVNLKQotI2RlZmluZSBTSV9DU19ET05FX0lOVF9NQVNLICh0YXJnZXRkZWYtPmRfU0lfQ1NfRE9ORV9JTlRfTUFTSykKLSNkZWZpbmUgU0lfQ1NfU1RBUlRfTFNCICh0YXJnZXRkZWYtPmRfU0lfQ1NfU1RBUlRfTFNCKQotI2RlZmluZSBTSV9DU19TVEFSVF9NQVNLICh0YXJnZXRkZWYtPmRfU0lfQ1NfU1RBUlRfTUFTSykKLSNkZWZpbmUgU0lfQ1NfUlhfQ05UX0xTQiAodGFyZ2V0ZGVmLT5kX1NJX0NTX1JYX0NOVF9MU0IpCi0jZGVmaW5lIFNJX0NTX1JYX0NOVF9NQVNLICh0YXJnZXRkZWYtPmRfU0lfQ1NfUlhfQ05UX01BU0spCi0jZGVmaW5lIFNJX0NTX1RYX0NOVF9MU0IgKHRhcmdldGRlZi0+ZF9TSV9DU19UWF9DTlRfTFNCKQotI2RlZmluZSBTSV9DU19UWF9DTlRfTUFTSyAodGFyZ2V0ZGVmLT5kX1NJX0NTX1RYX0NOVF9NQVNLKQotI2RlZmluZSBFRVBST01fU1ogKHRhcmdldGRlZi0+ZF9CT0FSRF9EQVRBX1NaKQotI2RlZmluZSBFRVBST01fRVhUX1NaICh0YXJnZXRkZWYtPmRfQk9BUkRfRVhUX0RBVEFfU1opCi0KLS8qIFNFVCBtYWNyb3MgKi8KLSNkZWZpbmUgU1lTVEVNX1NMRUVQX0RJU0FCTEVfU0VUKHgpICAgICAgICAgICAgICAoKCh4KSA8PCBTWVNURU1fU0xFRVBfRElTQUJMRV9MU0IpICYgU1lTVEVNX1NMRUVQX0RJU0FCTEVfTUFTSykKLSNkZWZpbmUgU0lfQ09ORklHX0JJRElSX09EX0RBVEFfU0VUKHgpICgoKHgpIDw8IFNJX0NPTkZJR19CSURJUl9PRF9EQVRBX0xTQikgJiBTSV9DT05GSUdfQklESVJfT0RfREFUQV9NQVNLKQotI2RlZmluZSBTSV9DT05GSUdfSTJDX1NFVCh4KSAoKCh4KSA8PCBTSV9DT05GSUdfSTJDX0xTQikgJiBTSV9DT05GSUdfSTJDX01BU0spCi0jZGVmaW5lIFNJX0NPTkZJR19QT1NfU0FNUExFX1NFVCh4KSAoKCh4KSA8PCBTSV9DT05GSUdfUE9TX1NBTVBMRV9MU0IpICYgU0lfQ09ORklHX1BPU19TQU1QTEVfTUFTSykKLSNkZWZpbmUgU0lfQ09ORklHX0lOQUNUSVZFX0NMS19TRVQoeCkgKCgoeCkgPDwgU0lfQ09ORklHX0lOQUNUSVZFX0NMS19MU0IpICYgU0lfQ09ORklHX0lOQUNUSVZFX0NMS19NQVNLKQotI2RlZmluZSBTSV9DT05GSUdfSU5BQ1RJVkVfREFUQV9TRVQoeCkgKCgoeCkgPDwgU0lfQ09ORklHX0lOQUNUSVZFX0RBVEFfTFNCKSAmIFNJX0NPTkZJR19JTkFDVElWRV9EQVRBX01BU0spCi0jZGVmaW5lIFNJX0NPTkZJR19ESVZJREVSX1NFVCh4KSAoKCh4KSA8PCBTSV9DT05GSUdfRElWSURFUl9MU0IpICYgU0lfQ09ORklHX0RJVklERVJfTUFTSykKLSNkZWZpbmUgU0lfQ1NfU1RBUlRfU0VUKHgpICgoKHgpIDw8IFNJX0NTX1NUQVJUX0xTQikgJiBTSV9DU19TVEFSVF9NQVNLKQotI2RlZmluZSBTSV9DU19SWF9DTlRfU0VUKHgpICgoKHgpIDw8IFNJX0NTX1JYX0NOVF9MU0IpICYgU0lfQ1NfUlhfQ05UX01BU0spCi0jZGVmaW5lIFNJX0NTX1RYX0NOVF9TRVQoeCkgKCgoeCkgPDwgU0lfQ1NfVFhfQ05UX0xTQikgJiBTSV9DU19UWF9DTlRfTUFTSykKLQotI2VuZGlmIC8qIH0gKi8KLQotI2VuZGlmIC8qVEFSR0VUX1JFR19UQUJMRV9IXyovCi0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9taXNjZHJ2L2FyM2tjb25maWcuYyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvbWlzY2Rydi9hcjNrY29uZmlnLmMKaW5kZXggNGYxOGY0My4uZTBlYTIxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9taXNjZHJ2L2FyM2tjb25maWcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL21pc2NkcnYvYXIza2NvbmZpZy5jCkBAIC0yNCw3ICsyNCw2IEBACiAKICNpbmNsdWRlICJhX2NvbmZpZy5oIgogI2luY2x1ZGUgImF0aGRlZnMuaCIKLSNpbmNsdWRlICJhX3R5cGVzLmgiCiAjaW5jbHVkZSAiYV9vc2FwaS5oIgogI2RlZmluZSBBVEhfTU9EVUxFX05BTUUgbWlzYwogI2luY2x1ZGUgImFfZGVidWcuaCIKQEAgLTc4LDcgKzc3LDcgQEAKICAgICB9IHdoaWxlIChmYWxzZSk7CiAgICAKICAgICBpZiAocFBhY2tldCAhPSBOVUxMKSB7Ci0gICAgICAgIEFfRlJFRShwUGFja2V0KTsKKyAgICAgICAga2ZyZWUocFBhY2tldCk7CiAgICAgfQogICAgICAgICAKICAgICByZXR1cm4gc3RhdHVzOwpAQCAtMTE2LDcgKzExNSw3IEBACiAgICAgfSB3aGlsZSAoZmFsc2UpOwogICAgICAgIAogICAgIGlmIChwUmVjdlBhY2tldCAhPSBOVUxMKSB7Ci0gICAgICAgIEFfRlJFRShwUmVjdlBhY2tldCk7ICAgIAorICAgICAgICBrZnJlZShwUmVjdlBhY2tldCk7ICAgIAogICAgIH0KICAgICAKICAgICByZXR1cm4gc3RhdHVzOwpAQCAtMjAzLDcgKzIwMiw3IEBACiAgICAgfSB3aGlsZSAoZmFsc2UpOwogCiAgICAgaWYgKHBCdWZmZXIgIT0gTlVMTCkgewotICAgICAgICBBX0ZSRUUocEJ1ZmZlcik7ICAgIAorICAgICAgICBrZnJlZShwQnVmZmVyKTsgICAgCiAgICAgfQogICAgIAogICAgIHJldHVybiBzdGF0dXM7ICAgIApAQCAtMjY4LDcgKzI2Nyw3IEBACiAgICAgfSB3aGlsZSAoZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgaWYgKHBCdWZmZXJUb0ZyZWUgIT0gTlVMTCkgewotICAgICAgICBBX0ZSRUUocEJ1ZmZlclRvRnJlZSk7ICAgIAorICAgICAgICBrZnJlZShwQnVmZmVyVG9GcmVlKTsgICAgCiAgICAgfQogICAgICAgICAKICAgICByZXR1cm4gc3RhdHVzOwpAQCAtMzA0LDcgKzMwMyw3IEBACiAgICAgfQogICAgIAogICAgIGlmIChwQnVmZmVyVG9GcmVlICE9IE5VTEwpIHsKLSAgICAgICAgQV9GUkVFKHBCdWZmZXJUb0ZyZWUpOyAgICAKKyAgICAgICAga2ZyZWUocEJ1ZmZlclRvRnJlZSk7ICAgIAogICAgIH0KICAgICAKICAgICByZXR1cm4gc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTMyOCw3ICszMjcsNyBAQAogICAgIH0KIAogICAgIGlmIChwQnVmZmVyVG9GcmVlICE9IE5VTEwpIHsKLSAgICAgICAgQV9GUkVFKHBCdWZmZXJUb0ZyZWUpOworICAgICAgICBrZnJlZShwQnVmZmVyVG9GcmVlKTsKICAgICB9CiAKICAgICByZXR1cm4gc3RhdHVzOwpAQCAtMzgyLDcgKzM4MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwRXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwQnVmZmVyVG9GcmVlKTsKICAgICBpZiAocEJ1ZmZlclRvRnJlZSAhPSBOVUxMKSB7Ci0gICAgICAgIEFfRlJFRShwQnVmZmVyVG9GcmVlKTsgICAgCisgICAgICAgIGtmcmVlKHBCdWZmZXJUb0ZyZWUpOyAgICAKICAgICB9CiAgICAgaWYgKHN0YXR1cykgewogICAgICAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX0VSUiwoIkhvc3RXYWtldXAgQ29uZmlnIEZhaWxlZCEgXG4iKSk7ICAgIApAQCAtMzk3LDcgKzM5Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwRXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwQnVmZmVyVG9GcmVlKTsKICAgICBpZiAocEJ1ZmZlclRvRnJlZSAhPSBOVUxMKSB7Ci0gICAgICAgIEFfRlJFRShwQnVmZmVyVG9GcmVlKTsgICAgCisgICAgICAgIGtmcmVlKHBCdWZmZXJUb0ZyZWUpOyAgICAKICAgICB9CiAgICAgaWYgKHN0YXR1cykgewogICAgICAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX0VSUiwoIlRhcmdldCBXYWtldXAgQ29uZmlnIEZhaWxlZCEgXG4iKSk7ICAgIApAQCAtNDEyLDcgKzQxMSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwRXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwQnVmZmVyVG9GcmVlKTsKICAgICBpZiAocEJ1ZmZlclRvRnJlZSAhPSBOVUxMKSB7Ci0gICAgICAgIEFfRlJFRShwQnVmZmVyVG9GcmVlKTsgICAgCisgICAgICAgIGtmcmVlKHBCdWZmZXJUb0ZyZWUpOyAgICAKICAgICB9CiAgICAgaWYgKHN0YXR1cykgewogICAgICAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX0VSUiwoIkhvc3RXYWtldXAgRW5hYmxlIEZhaWxlZCEgXG4iKSk7ICAgIApAQCAtNDI3LDcgKzQyNiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwRXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwQnVmZmVyVG9GcmVlKTsKICAgICBpZiAocEJ1ZmZlclRvRnJlZSAhPSBOVUxMKSB7Ci0gICAgICAgIEFfRlJFRShwQnVmZmVyVG9GcmVlKTsgICAgCisgICAgICAgIGtmcmVlKHBCdWZmZXJUb0ZyZWUpOyAgICAKICAgICB9CiAgICAgaWYgKHN0YXR1cykgewogICAgICAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX0VSUiwoIlRhcmdldCBXYWtldXAgRW5hYmxlIEZhaWxlZCEgXG4iKSk7ICAgIApAQCAtNDQyLDcgKzQ0MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwRXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwQnVmZmVyVG9GcmVlKTsKICAgICBpZiAocEJ1ZmZlclRvRnJlZSAhPSBOVUxMKSB7Ci0gICAgICAgIEFfRlJFRShwQnVmZmVyVG9GcmVlKTsgICAgCisgICAgICAgIGtmcmVlKHBCdWZmZXJUb0ZyZWUpOyAgICAKICAgICB9CiAgICAgaWYgKHN0YXR1cykgewogICAgICAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX0VSUiwoIlNsZWVwIEVuYWJsZSBGYWlsZWQhIFxuIikpOyAgICAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvbWlzY2Rydi9hcjNrcHMvYXIza3BzY29uZmlnLmMgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL21pc2NkcnYvYXIza3BzL2FyM2twc2NvbmZpZy5jCmluZGV4IDgzOTNlZmUuLjI4MmNlYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvbWlzY2Rydi9hcjNrcHMvYXIza3BzY29uZmlnLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9taXNjZHJ2L2FyM2twcy9hcjNrcHNjb25maWcuYwpAQCAtMjIyLDcgKzIyMiw3IEBACiAgICAgICAgIEFfUkVMRUFTRV9GSVJNV0FSRShmaXJtd2FyZSk7CiAgICAgICAgIC8qIFBhcnNlIHRoZSBQUyBidWZmZXIgdG8gYSBnbG9iYWwgdmFyaWFibGUgKi8KICAgICAgICAgc3RhdHVzID0gQXRoRG9QYXJzZVBTKGJ1ZmZlcixsZW4pOwotICAgICAgICBBX0ZSRUUoYnVmZmVyKTsKKyAgICAgICAga2ZyZWUoYnVmZmVyKTsKICAgICB9IGVsc2UgewogICAgICAgICBBX1JFTEVBU0VfRklSTVdBUkUoZmlybXdhcmUpOwogICAgIH0KQEAgLTI1Niw3ICsyNTYsNyBAQAogICAgICAgICAgICAgICAgIEFfUkVMRUFTRV9GSVJNV0FSRShmaXJtd2FyZSk7CiAgICAgICAgICAgICAgICAgLyogcGFyc2UgYW5kIHN0b3JlIHRoZSBQYXRjaCBmaWxlIGNvbnRlbnRzIHRvIGEgZ2xvYmFsIHZhcmlhYmxlcyAqLwogICAgICAgICAgICAgICAgIHN0YXR1cyA9IEF0aERvUGFyc2VQYXRjaChidWZmZXIsbGVuKTsKLSAgICAgICAgICAgICAgICBBX0ZSRUUoYnVmZmVyKTsKKyAgICAgICAgICAgICAgICBrZnJlZShidWZmZXIpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBBX1JFTEVBU0VfRklSTVdBUkUoZmlybXdhcmUpOwogICAgICAgICAgICAgfQpAQCAtMjgzLDcgKzI4Myw3IEBACiAgICAgJmJ1ZmZlclRvRnJlZSkgPT0gMCkgewogICAgICAgICBpZihSZWFkUFNFdmVudChldmVudCkgPT0gMCkgeyAvKiBFeGl0IGlmIHRoZSBzdGF0dXMgaXMgc3VjY2VzcyAqLwogICAgICAgICAgICAgaWYoYnVmZmVyVG9GcmVlICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBBX0ZSRUUoYnVmZmVyVG9GcmVlKTsKKyAgICAgICAgICAgICAgICBrZnJlZShidWZmZXJUb0ZyZWUpOwogICAgICAgICAgICAgICAgIH0KIAkKICNpZm5kZWYgSENJX1RSQU5TUE9SVF9TRElPCkBAIC0yOTUsNyArMjk1LDcgQEAKICAgICAgICAgICAgICAgIGdvdG8gY29tcGxldGU7CiAgICAgICAgIH0KICAgICAgICAgaWYoYnVmZmVyVG9GcmVlICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgIEFfRlJFRShidWZmZXJUb0ZyZWUpOworICAgICAgICAgICAgICAga2ZyZWUoYnVmZmVyVG9GcmVlKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIHN0YXR1cyA9IDA7CkBAIC0zMTIsMTMgKzMxMiwxMyBAQAogICAgICAgICAmYnVmZmVyVG9GcmVlKSA9PSAwKSB7CiAgICAgICAgICAgICBpZihSZWFkUFNFdmVudChldmVudCkgIT0gMCkgeyAvKiBFeGl0IGlmIHRoZSBzdGF0dXMgaXMgc3VjY2VzcyAqLwogICAgICAgICAgICAgICAgIGlmKGJ1ZmZlclRvRnJlZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFfRlJFRShidWZmZXJUb0ZyZWUpOworICAgICAgICAgICAgICAgICAgICBrZnJlZShidWZmZXJUb0ZyZWUpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gMTsKICAgICAgICAgICAgICAgICAgICAgZ290byBjb21wbGV0ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmKGJ1ZmZlclRvRnJlZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgQV9GUkVFKGJ1ZmZlclRvRnJlZSk7CisgICAgICAgICAgICAgICAgICAga2ZyZWUoYnVmZmVyVG9GcmVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN0YXR1cyA9IDA7CkBAIC0zNzYsMTAgKzM3NiwxMCBAQAogICAgICAgICBBdGhGcmVlQ29tbWFuZExpc3QoJkhjaUNtZExpc3QsbnVtQ21kcyk7CiAgICAgfQogICAgIGlmKHBhdGgpIHsKLSAgICAgICAgQV9GUkVFKHBhdGgpOworICAgICAgICBrZnJlZShwYXRoKTsKICAgICB9CiAgICAgaWYoY29uZmlnX3BhdGgpIHsKLSAgICAgICAgQV9GUkVFKGNvbmZpZ19wYXRoKTsKKyAgICAgICAga2ZyZWUoY29uZmlnX3BhdGgpOwogICAgIH0KICAgICByZXR1cm4gc3RhdHVzOwogfQpAQCAtNTExLDcgKzUxMSw3IEBACiAKICAgICB9CiAgICAgaWYoYnVmZmVyVG9GcmVlICE9IE5VTEwpIHsKLSAgICAgICAgQV9GUkVFKGJ1ZmZlclRvRnJlZSk7CisgICAgICAgIGtmcmVlKGJ1ZmZlclRvRnJlZSk7CiAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIApAQCAtNTI3LDcgKzUyNyw3IEBACiAKICAgICB9CiAgICAgaWYoYnVmZmVyVG9GcmVlICE9IE5VTEwpIHsKLSAgICAgICAgQV9GUkVFKGJ1ZmZlclRvRnJlZSk7CisgICAgICAgIGtmcmVlKGJ1ZmZlclRvRnJlZSk7CiAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTU2NCw3ICs1NjQsNyBAQAogCiAgICAgfQogICAgIGlmKGJ1ZmZlclRvRnJlZSAhPSBOVUxMKSB7Ci0gICAgICAgIEFfRlJFRShidWZmZXJUb0ZyZWUpOworICAgICAgICBrZnJlZShidWZmZXJUb0ZyZWUpOwogICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL21pc2NkcnYvYXIza3BzL2FyM2twc3BhcnNlci5jIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9taXNjZHJ2L2FyM2twcy9hcjNrcHNwYXJzZXIuYwppbmRleCA5NGEwOTM5Li5jMDFjMGNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL21pc2NkcnYvYXIza3BzL2FyM2twc3BhcnNlci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvbWlzY2Rydi9hcjNrcHMvYXIza3BzcGFyc2VyLmMKQEAgLTM2Miw3ICszNjIsNyBAQAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19FUlIsKCJlcnJvclxuIikpOwogICAgICAgICAgICAgICAgICBpZihCdWZmZXIgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgQV9GUkVFKEJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgICBrZnJlZShCdWZmZXIpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHJldHVybiBBX0VSUk9SOwogICAgICAgICAgICAgIH0KQEAgLTQwMSw3ICs0MDEsNyBAQAogICAgICAgICAgICAgICAgICAgICBpZih1R2V0SW5wdXREYXRhRm9ybWF0KHBDaGFyTGluZSwgJnN0UFNfRGF0YUZvcm1hdCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfRVJSLCgidUdldElucHV0RGF0YUZvcm1hdCBmYWlsXG4iKSk7CiAgICAgICAgICAgICAgICAgICAgICBpZihCdWZmZXIgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBX0ZSRUUoQnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2ZyZWUoQnVmZmVyKTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBX0VSUk9SOwogICAgICAgICAgICAgICAgICAgICB9ICAgIApAQCAtNDIyLDcgKzQyMiw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlmKHVHZXRJbnB1dERhdGFGb3JtYXQocENoYXJMaW5lLCAmc3RQU19EYXRhRm9ybWF0KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19FUlIsKCJ1R2V0SW5wdXREYXRhRm9ybWF0IGZhaWwgXG4iKSk7CiAgICAgICAgICAgICAgICAgICAgICBpZihCdWZmZXIgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBX0ZSRUUoQnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2ZyZWUoQnVmZmVyKTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBX0VSUk9SOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC00MzMsNyArNDMzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgKEJ5dGVDb3VudCA+IExJTkVfU0laRV9NQVgvMikKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgaWYoQnVmZmVyICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQV9GUkVFKEJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtmcmVlKEJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBX0VSUk9SOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC00NDksNyArNDQ5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHVHZXRJbnB1dERhdGFGb3JtYXQocENoYXJMaW5lLCZzdFBTX0RhdGFGb3JtYXQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19FUlIsKCJ1R2V0SW5wdXREYXRhRm9ybWF0IEZhaWxcbiIpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihCdWZmZXIgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQV9GUkVFKEJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZnJlZShCdWZmZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQV9FUlJPUjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTUxMCw3ICs1MTAsNyBAQAogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfRVJSLCgiXG4gQnVmZmVyIG92ZXIgZmxvdyBQUyBGaWxlIHRvbyBiaWchISEiKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKEJ1ZmZlciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBBX0ZSRUUoQnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGtmcmVlKEJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFfRVJST1I7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vU2xlZXAgKDMwMDApOwpAQCAtNTI0LDcgKzUyNCw3IEBACiAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYoQnVmZmVyICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgQV9GUkVFKEJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgICAgIGtmcmVlKEJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVybiBBX0VSUk9SOwogICAgICAgICAgICAgIH0KQEAgLTU0MSwxMyArNTQxLDEzIEBACiAgICB7CiAKICAgICAgIGlmKEJ1ZmZlciAhPSBOVUxMKSB7Ci0gICAgICAgICAgIEFfRlJFRShCdWZmZXIpOworICAgICAgICAgICBrZnJlZShCdWZmZXIpOwogICAgICAgfQogICAgICAgcmV0dXJuIEFfRVJST1I7CiAgICB9CiAKICAgIGlmKEJ1ZmZlciAhPSBOVUxMKSB7Ci0gICAgICAgIEFfRlJFRShCdWZmZXIpOworICAgICAgICBrZnJlZShCdWZmZXIpOwogICAgfQogICAgcmV0dXJuIDA7CiAKQEAgLTYwOSw3ICs2MDksNyBAQAogICAgICAgICAvKiBIYW5kbGUgY2FzZSB3aGVuIHRoZSBudW1iZXIgb2YgcGF0Y2ggYnVmZmVyIGlzIG1vcmUgdGhhbiB0aGUgMjBLICovCiAgICAgICAgIGlmKE1BWF9OVU1fUEFUQ0hfRU5UUlkgPT0gUGF0Y2hfQ291bnQpIHsKICAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IFBhdGNoX0NvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBBX0ZSRUUoUmFtUGF0Y2hbaV0uRGF0YSk7CisgICAgICAgICAgICAgICAga2ZyZWUoUmFtUGF0Y2hbaV0uRGF0YSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gQV9FUlJPUjsKICAgICAgICAgfQpAQCAtODEyLDEzICs4MTIsMTMgQEAKICAgICBmb3IoY291bnQgPSAwOyBjb3VudCA8IFBhdGNoX0NvdW50OyBjb3VudCsrKSB7CiAKICAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19FUlIsKCJGcmVlaW5nIFBhdGNoIEJ1ZmZlciAlZCBcclxuIixjb3VudCkpOwotICAgICAgICBBX0ZSRUUoUmFtUGF0Y2hbUGF0Y2hfQ291bnRdLkRhdGEpOworICAgICAgICBrZnJlZShSYW1QYXRjaFtQYXRjaF9Db3VudF0uRGF0YSk7CiAgICAgfQogCiAgICAgZm9yKGNvdW50ID0gMDsgY291bnQgPCBUYWdfQ291bnQ7IGNvdW50KyspIHsKIAogICAgICAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX0VSUiwoIkZyZWVpbmcgUFMgQnVmZmVyICVkIFxyXG4iLGNvdW50KSk7Ci0gICAgICAgIEFfRlJFRShQc1RhZ0VudHJ5W2NvdW50XS5UYWdEYXRhKTsKKyAgICAgICAga2ZyZWUoUHNUYWdFbnRyeVtjb3VudF0uVGFnRGF0YSk7CiAgICAgfQogCiAvKiAKQEAgLTk2Miw4ICs5NjIsOCBAQAogICAgICAgICByZXR1cm4gQV9FUlJPUjsKICAgICB9CiAgICAgZm9yKGkgPSAwOyBpIDwgbnVtUGFja2V0cztpKyspIHsKLSAgICAgICAgQV9GUkVFKCgqSGNpUGFja2V0TGlzdClbaV0uSGNpcGFja2V0KTsKKyAgICAgICAga2ZyZWUoKCpIY2lQYWNrZXRMaXN0KVtpXS5IY2lwYWNrZXQpOwogICAgIH0gIAotICAgIEFfRlJFRSgqSGNpUGFja2V0TGlzdCk7CisgICAga2ZyZWUoKkhjaVBhY2tldExpc3QpOwogICAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9taXNjZHJ2L2FyM2twcy9hcjNrcHNwYXJzZXIuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvbWlzY2Rydi9hcjNrcHMvYXIza3BzcGFyc2VyLmgKaW5kZXggOTM3OGVmYy4uNGUwZjJmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9taXNjZHJ2L2FyM2twcy9hcjNrcHNwYXJzZXIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL21pc2NkcnYvYXIza3BzL2FyM2twc3BhcnNlci5oCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiYXRoZGVmcy5oIgogI2lmZGVmIEhDSV9UUkFOU1BPUlRfU0RJTwogI2luY2x1ZGUgImFfY29uZmlnLmgiCi0jaW5jbHVkZSAiYV90eXBlcy5oIgogI2luY2x1ZGUgImFfb3NhcGkuaCIKICNkZWZpbmUgQVRIX01PRFVMRV9OQU1FIG1pc2MKICNpbmNsdWRlICJhX2RlYnVnLmgiCkBAIC02MCwxMSArNTksNiBAQAogI2lmbmRlZiBBX01BTExPQwogI2RlZmluZSBBX01BTExPQyhzaXplKSAga21hbGxvYygoc2l6ZSksR0ZQX0tFUk5FTCkKICNlbmRpZiAvKiBBX01BTExPQyAqLwotCi0KLSNpZm5kZWYgQV9GUkVFCi0jZGVmaW5lIEFfRlJFRShhZGRyKSAga2ZyZWUoKGFkZHIpKQotI2VuZGlmIC8qIEFfTUFMTE9DICovCiAjZW5kaWYgLyogSENJX1RSQU5TUE9SVF9VQVJUICovCiAKIC8qIFN0cmluZyBtYW5pcHVsYXRpb24gQVBJcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9taXNjZHJ2L2NvbW1vbl9kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvbWlzY2Rydi9jb21tb25fZHJ2LmMKaW5kZXggYTIzYTUyNC4uMWNlNTM5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9taXNjZHJ2L2NvbW1vbl9kcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL21pc2NkcnYvY29tbW9uX2Rydi5jCkBAIC0yMywxNSArMjMsMTIgQEAKIAogI2luY2x1ZGUgImFfY29uZmlnLmgiCiAjaW5jbHVkZSAiYXRoZGVmcy5oIgotI2luY2x1ZGUgImFfdHlwZXMuaCIKIAotI2luY2x1ZGUgIkFSNjAwMi9odzIuMC9ody9tYm94X2hvc3RfcmVnLmgiCi0jaW5jbHVkZSAiQVI2MDAyL2h3Mi4wL2h3L2FwYl9tYXAuaCIKLSNpbmNsdWRlICJBUjYwMDIvaHcyLjAvaHcvc2lfcmVnLmgiCi0jaW5jbHVkZSAiQVI2MDAyL2h3Mi4wL2h3L2dwaW9fcmVnLmgiCi0jaW5jbHVkZSAiQVI2MDAyL2h3Mi4wL2h3L3J0Y19yZWcuaCIKLSNpbmNsdWRlICJBUjYwMDIvaHcyLjAvaHcvdm1jX3JlZy5oIgotI2luY2x1ZGUgIkFSNjAwMi9odzIuMC9ody9tYm94X3JlZy5oIgorI2luY2x1ZGUgImh3L21ib3hfaG9zdF9yZWcuaCIKKyNpbmNsdWRlICJncGlvX3JlZy5oIgorI2luY2x1ZGUgImh3L3J0Y19yZWcuaCIKKyNpbmNsdWRlICJody9tYm94X3JlZy5oIgorI2luY2x1ZGUgImh3L2FwYl9tYXAuaCIKIAogI2luY2x1ZGUgImFfb3NhcGkuaCIKICNpbmNsdWRlICJ0YXJnYWRkcnMuaCIKQEAgLTY4MywxMTkgKzY4MCw2IEBACiAgICAgcmV0dXJuIHN0YXR1czsKIH0KIAotCi1zdGF0aWMgaW50IHByZXBhcmVfYXI2MDAyKHN0cnVjdCBoaWZfZGV2aWNlICpoaWZEZXZpY2UsIHUzMiBUYXJnZXRWZXJzaW9uKQotewotICAgIGludCBzdGF0dXMgPSAwOwotCi0gICAgLyogcGxhY2Vob2xkZXIgKi8KLQotICAgIHJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXRpYyBpbnQgcHJlcGFyZV9hcjYwMDMoc3RydWN0IGhpZl9kZXZpY2UgKmhpZkRldmljZSwgdTMyIFRhcmdldFZlcnNpb24pCi17Ci0gICAgaW50IHN0YXR1cyA9IDA7Ci0KLSAgICAvKiBwbGFjZWhvbGRlciAqLwotCi0gICAgcmV0dXJuIHN0YXR1czsKLX0KLQotLyogdGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoZSBjYWxsZXIgaGFzIGFscmVhZHkgaW5pdGlhbGl6ZWQgdGhlIEJNSSBBUElzICovCi1pbnQgYXI2MDAwX3ByZXBhcmVfdGFyZ2V0KHN0cnVjdCBoaWZfZGV2aWNlICpoaWZEZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIFRhcmdldFR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIFRhcmdldFZlcnNpb24pCi17Ci0gICAgaWYgKFRhcmdldFR5cGUgPT0gVEFSR0VUX1RZUEVfQVI2MDAyKSB7Ci0gICAgICAgICAgICAvKiBkbyBhbnkgcHJlcGFyYXRpb25zIGZvciBBUjYwMDIgZGV2aWNlcyAqLwotICAgICAgICByZXR1cm4gcHJlcGFyZV9hcjYwMDIoaGlmRGV2aWNlLFRhcmdldFZlcnNpb24pOwotICAgIH0gZWxzZSBpZiAoVGFyZ2V0VHlwZSA9PSBUQVJHRVRfVFlQRV9BUjYwMDMpIHsKLSAgICAgICAgcmV0dXJuIHByZXBhcmVfYXI2MDAzKGhpZkRldmljZSxUYXJnZXRWZXJzaW9uKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX0FSNjAwMl9SRVYxX0ZPUkNFX0hPU1QpCi0vKgotICogQ2FsbCB0aGlzIGZ1bmN0aW9uIGp1c3QgYmVmb3JlIHRoZSBjYWxsIHRvIEJNSUluaXQKLSAqIGluIG9yZGVyIHRvIGZvcmNlKiBBUjYwMDIgcmV2IDEueCBmaXJtd2FyZSB0byBkZXRlY3QgYSBIb3N0LgotICogVEhJUyBJUyBGT1IgVVNFIE9OTFkgV0lUSCBBUjYwMDIgUkVWIDEueC4KLSAqIFRCRFhYWDogUmVtb3ZlIHRoaXMgZnVuY3Rpb24gd2hlbiBSRVYgMS54IGlzIGRlc3VwcG9ydGVkLgotICovCi1pbnQKLWFyNjAwMl9SRVYxX3Jlc2V0X2ZvcmNlX2hvc3QgKHN0cnVjdCBoaWZfZGV2aWNlICpoaWZEZXZpY2UpCi17Ci0gICAgczMyIGk7Ci0gICAgc3RydWN0IGZvcmNlUk9NX3MgewotICAgICAgICB1MzIgYWRkcjsKLSAgICAgICAgdTMyIGRhdGE7Ci0gICAgfTsKLSAgICBzdHJ1Y3QgZm9yY2VST01fcyAqRm9yY2VST007Ci0gICAgczMyIHN6Rm9yY2VST007Ci0gICAgaW50IHN0YXR1cyA9IDA7Ci0gICAgdTMyIGFkZHJlc3M7Ci0gICAgdTMyIGRhdGE7Ci0KLSAgICAvKiBGb3JjZSBBUjYwMDIgUkVWMS54IHRvIHJlY29nbml6ZSBIb3N0IHByZXNlbmNlLgotICAgICAqCi0gICAgICogTm90ZTogVXNlIFJBTSBhdCAweDUyZGY4MC4uMHg1MmRmYTAgd2l0aCBST00gUmVtYXAgZW50cnkgMAotICAgICAqIHNvIHRoYXQgdGhpcyB3b3JrYXJvdW5kIGZ1bmN0aW9ucyB3aXRoIEFSNjAwMi53YXIxLnNoLiAgV2UKLSAgICAgKiBjb3VsZCBmb2xkIHRoYXQgZW50aXJlIHdvcmthcm91bmQgaW50byB0aGlzIG9uZSwgYnV0IGl0J3Mgbm90Ci0gICAgICogd29ydGggdGhlIGVmZm9ydCBhdCB0aGlzIHBvaW50LiAgVGhpcyB3b3JrYXJvdW5kIGNhbm5vdCBiZQotICAgICAqIG1lcmdlZCBpbnRvIHRoZSBvdGhlciB3b3JrYXJvdW5kIGJlY2F1c2UgdGhpcyBtdXN0IGJlIGRvbmUKLSAgICAgKiBiZWZvcmUgQk1JLgotICAgICAqLwotCi0gICAgc3RhdGljIHN0cnVjdCBmb3JjZVJPTV9zIEZvcmNlUk9NX05FV1tdID0gewotICAgICAgICB7MHg1MmRmODAsIDB4MjBmMzFjMDd9LAotICAgICAgICB7MHg1MmRmODQsIDB4OTIzNzQ0MjB9LAotICAgICAgICB7MHg1MmRmODgsIDB4MWQxMjBjMDN9LAotICAgICAgICB7MHg1MmRmOGMsIDB4ZmY4MjE2ZjB9LAotICAgICAgICB7MHg1MmRmOTAsIDB4ZjAxZDEyMGN9LAotICAgICAgICB7MHg1MmRmOTQsIDB4ODEwMDQxMzZ9LAotICAgICAgICB7MHg1MmRmOTgsIDB4YmM5MTAwYmR9LAotICAgICAgICB7MHg1MmRmOWMsIDB4MDBiYmExMDB9LAotCi0gICAgICAgIHsweDAwMDA4MDAwfE1DX1RDQU1fVEFSR0VUX0FERFJFU1MsIDB4MDAxMmRmZTB9LCAvKiBVc2UgcmVtYXAgZW50cnkgMCAqLwotICAgICAgICB7MHgwMDAwODAwMHxNQ19UQ0FNX0NPTVBBUkVfQUREUkVTUywgMHgwMDBlMjM4MH0sCi0gICAgICAgIHsweDAwMDA4MDAwfE1DX1RDQU1fTUFTS19BRERSRVNTLCAweDAwMDAwMDAwfSwKLSAgICAgICAgezB4MDAwMDgwMDB8TUNfVENBTV9WQUxJRF9BRERSRVNTLCAweDAwMDAwMDAxfSwKLQotICAgICAgICB7MHgwMDAxODAwMHwoTE9DQUxfQ09VTlRfQUREUkVTUysweDEwKSwgMH0sIC8qIGNsZWFyIEJNSSBjcmVkaXQgY291bnRlciAqLwotCi0gICAgICAgIHsweDAwMDA0MDAwfEFSNjAwMl9SRVNFVF9DT05UUk9MX0FERFJFU1MsIFJFU0VUX0NPTlRST0xfV0FSTV9SU1RfTUFTS30sCi0gICAgfTsKLQotICAgIGFkZHJlc3MgPSAweDAwNGVkNGIwOyAvKiBSRVYxIHRhcmdldCBzb2Z0d2FyZSBJRCBpcyBzdG9yZWQgaGVyZSAqLwotICAgIHN0YXR1cyA9IGFyNjAwMF9SZWFkUmVnRGlhZyhoaWZEZXZpY2UsICZhZGRyZXNzLCAmZGF0YSk7Ci0gICAgaWYgKHN0YXR1cyB8fCAoZGF0YSAhPSBBUjYwMDJfVkVSU0lPTl9SRVYxKSkgewotICAgICAgICByZXR1cm4gQV9FUlJPUjsgLyogTm90IEFSNjAwMiBSRVYxICovCi0gICAgfQotCi0gICAgRm9yY2VST00gPSBGb3JjZVJPTV9ORVc7Ci0gICAgc3pGb3JjZVJPTSA9IHNpemVvZihGb3JjZVJPTV9ORVcpL3NpemVvZigqRm9yY2VST00pOwotCi0gICAgQVRIX0RFQlVHX1BSSU5URiAoREJHX01JU0NfRFJWLCBBVEhfREVCVUdfVFJDLCAoIkZvcmNlIFRhcmdldCB0byByZWNvZ25pemUgSG9zdC4uLi5cbiIpKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgc3pGb3JjZVJPTTsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKGFyNjAwMF9Xcml0ZVJlZ0RpYWcoaGlmRGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRm9yY2VST01baV0uYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkZvcmNlUk9NW2ldLmRhdGEpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFUSF9ERUJVR19QUklOVEYgKERCR19NSVNDX0RSViwgQVRIX0RFQlVHX1RSQywgKCJDYW5ub3QgZm9yY2UgVGFyZ2V0IHRvIHJlY29nbml6ZSBIb3N0IVxuIikpOwotICAgICAgICAgICAgcmV0dXJuIEFfRVJST1I7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBBX01ERUxBWSgxMDAwKTsKLQotICAgIHJldHVybiAwOwotfQotCi0jZW5kaWYgLyogQ09ORklHX0FSNjAwMl9SRVYxX0ZPUkNFX0hPU1QgKi8KLQogdm9pZCBEZWJ1Z0R1bXBCeXRlcyh1OCAqYnVmZmVyLCB1MTYgbGVuZ3RoLCBjaGFyICpwRGVzY3JpcHRpb24pCiB7CiAgICAgY2hhciBzdHJlYW1bNjBdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9taXNjZHJ2L2NyZWRpdF9kaXN0LmMgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL21pc2NkcnYvY3JlZGl0X2Rpc3QuYwppbmRleCAzM2ZhMDIwLi5jNzc3ZTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL21pc2NkcnYvY3JlZGl0X2Rpc3QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL21pc2NkcnYvY3JlZGl0X2Rpc3QuYwpAQCAtMjMsNyArMjMsNiBAQAogCiAjaW5jbHVkZSAiYV9jb25maWcuaCIKICNpbmNsdWRlICJhdGhkZWZzLmgiCi0jaW5jbHVkZSAiYV90eXBlcy5oIgogI2luY2x1ZGUgImFfb3NhcGkuaCIKICNkZWZpbmUgQVRIX01PRFVMRV9OQU1FIG1pc2MKICNpbmNsdWRlICJhX2RlYnVnLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2FyNjAwMF9hbmRyb2lkLmMgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2FyNjAwMF9hbmRyb2lkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhYTc1ZWUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9hcjYwMDBfYW5kcm9pZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzg4ICswLDAgQEAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDQtMjAxMCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KLS8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLwotLy8gCi0vLwotLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0vLyBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotLy8KLS8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotLy8gV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotLy8gTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLS8vIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLS8vIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotLy8gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLS8vIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0vLwotLy8KLS8vCi0vLyBBdXRob3Iocyk6ID0iQXRoZXJvcyIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jaW5jbHVkZSAiYXI2MDAwX2Rydi5oIgotI2luY2x1ZGUgImh0Yy5oIgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotCi0jaWZkZWYgQ09ORklHX0hBU19FQVJMWVNVU1BFTkQKLSNpbmNsdWRlIDxsaW51eC9lYXJseXN1c3BlbmQuaD4KLSNlbmRpZgotCi1ib29sIGVuYWJsZV9tbWNfaG9zdF9kZXRlY3RfY2hhbmdlID0gZmFsc2U7Ci1zdGF0aWMgdm9pZCBhcjYwMDBfZW5hYmxlX21tY2hvc3RfZGV0ZWN0X2NoYW5nZShpbnQgZW5hYmxlKTsKLQotCi1jaGFyIGZ3cGF0aFsyNTZdID0gIi9zeXN0ZW0vd2lmaSI7Ci1pbnQgd293bGVkb247Ci11bnNpZ25lZCBpbnQgZW5hYmxlbG9nY2F0OwotCi1leHRlcm4gaW50IGJtaWVuYWJsZTsKLWV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqYXI2MDAwX2RldmljZXNbXTsKLWV4dGVybiBjaGFyIGlmbmFtZVtdOwotCi1jb25zdCBjaGFyIGRlZl9pZm5hbWVbXSA9ICJ3bGFuMCI7Ci1tb2R1bGVfcGFyYW1fc3RyaW5nKGZ3cGF0aCwgZndwYXRoLCBzaXplb2YoZndwYXRoKSwgMDY0NCk7Ci1tb2R1bGVfcGFyYW0oZW5hYmxlbG9nY2F0LCB1aW50LCAwNjQ0KTsKLW1vZHVsZV9wYXJhbSh3b3dsZWRvbiwgaW50LCAwNjQ0KTsKLQotI2lmZGVmIENPTkZJR19IQVNfRUFSTFlTVVNQRU5ECi1zdGF0aWMgaW50IHNjcmVlbl9pc19vZmY7Ci1zdGF0aWMgc3RydWN0IGVhcmx5X3N1c3BlbmQgYXI2a19lYXJseV9zdXNwZW5kOwotI2VuZGlmCi0KLXN0YXRpYyBpbnQgKCphcjYwMDBfYXZhaWxfZXZfcCkodm9pZCAqLCB2b2lkICopOwotCi0jaWYgZGVmaW5lZChDT05GSUdfQU5EUk9JRF9MT0dHRVIpICYmICghZGVmaW5lZChDT05GSUdfTU1DX01TTSkpCi1pbnQgbG9nZ2VyX3dyaXRlKGNvbnN0IGVudW0gbG9naWR4IGluZGV4LAotICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgcHJpbywKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyIF9fa2VybmVsICogY29uc3QgdGFnLAotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgX19rZXJuZWwgKiBjb25zdCBmbXQsCi0gICAgICAgICAgICAgICAgLi4uKQotewotICAgIGludCByZXQgPSAwOwotICAgIHZhX2xpc3QgdmFyZ3M7Ci0gICAgc3RydWN0IGZpbGUgKmZpbHAgPSAoc3RydWN0IGZpbGUgKiktRU5PRU5UOwotICAgIG1tX3NlZ21lbnRfdCBvbGRmczsKLSAgICBzdHJ1Y3QgaW92ZWMgdmVjWzNdOwotICAgIGludCB0YWdfYnl0ZXMgPSBzdHJsZW4odGFnKSArIDEsIG1zZ19ieXRlczsKLSAgICBjaGFyICptc2c7ICAgICAgCi0gICAgdmFfc3RhcnQodmFyZ3MsIGZtdCk7Ci0gICAgbXNnID0ga3Zhc3ByaW50ZihHRlBfQVRPTUlDLCBmbXQsIHZhcmdzKTsKLSAgICB2YV9lbmQodmFyZ3MpOwotICAgIGlmICghbXNnKQotICAgICAgICByZXR1cm4gLUVOT01FTTsKLSAgICBpZiAoaW5faW50ZXJydXB0KCkpIHsKLSAgICAgICAgLyogd2UgaGF2ZSBubyBjaG9pY2Ugc2luY2UgYWlvX3dyaXRlIG1heSBiZSBibG9ja2VkICovCi0gICAgICAgIHByaW50ayhLRVJOX0FMRVJUICIlcyIsIG1zZyk7Ci0gICAgICAgIGdvdG8gb3V0X2ZyZWVfbWVzc2FnZTsKLSAgICB9Ci0gICAgbXNnX2J5dGVzID0gc3RybGVuKG1zZykgKyAxOwotICAgIGlmIChtc2dfYnl0ZXMgPD0gMSkgLyogZW1wdHkgbWVzc2FnZT8gKi8KLSAgICAgICAgZ290byBvdXRfZnJlZV9tZXNzYWdlOyAvKiBkb24ndCBib3RoZXIsIHRoZW4gKi8KLSAgICBpZiAoKG1zZ19ieXRlcyArIHRhZ19ieXRlcyArIDEpID4gMjA0OCkgewotICAgICAgICByZXQgPSAtRTJCSUc7Ci0gICAgICAgIGdvdG8gb3V0X2ZyZWVfbWVzc2FnZTsKLSAgICB9Ci0gICAgICAgICAgICAKLSAgICB2ZWNbMF0uaW92X2Jhc2UgID0gKHVuc2lnbmVkIGNoYXIgKikgJnByaW87Ci0gICAgdmVjWzBdLmlvdl9sZW4gICAgPSAxOwotICAgIHZlY1sxXS5pb3ZfYmFzZSAgID0gKHZvaWQgKikgdGFnOwotICAgIHZlY1sxXS5pb3ZfbGVuICAgID0gc3RybGVuKHRhZykgKyAxOwotICAgIHZlY1syXS5pb3ZfYmFzZSAgID0gKHZvaWQgKikgbXNnOwotICAgIHZlY1syXS5pb3ZfbGVuICAgID0gc3RybGVuKG1zZykgKyAxOyAKLQotICAgIG9sZGZzID0gZ2V0X2ZzKCk7Ci0gICAgc2V0X2ZzKEtFUk5FTF9EUyk7Ci0gICAgZG8gewotICAgICAgICBmaWxwID0gZmlscF9vcGVuKCIvZGV2L2xvZy9tYWluIiwgT19XUk9OTFksIFNfSVJVU1IpOwotICAgICAgICBpZiAoSVNfRVJSKGZpbHApIHx8ICFmaWxwLT5mX29wKSB7Ci0gICAgICAgICAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX0VSUiwgKCIlczogZmlscF9vcGVuIC9kZXYvbG9nL21haW4gZXJyb3JcbiIsIF9fRlVOQ1RJT05fXykpOwotICAgICAgICAgICAgcmV0ID0gLUVOT0VOVDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGZpbHAtPmZfb3AtPmFpb193cml0ZSkgewotICAgICAgICAgICAgaW50IG5yX3NlZ3MgPSBzaXplb2YodmVjKSAvIHNpemVvZih2ZWNbMF0pOwotICAgICAgICAgICAgaW50IGxlbiA9IHZlY1swXS5pb3ZfbGVuICsgdmVjWzFdLmlvdl9sZW4gKyB2ZWNbMl0uaW92X2xlbjsKLSAgICAgICAgICAgIHN0cnVjdCBraW9jYiBraW9jYjsKLSAgICAgICAgICAgIGluaXRfc3luY19raW9jYigma2lvY2IsIGZpbHApOwotICAgICAgICAgICAga2lvY2Iua2lfcG9zID0gMDsKLSAgICAgICAgICAgIGtpb2NiLmtpX2xlZnQgPSBsZW47Ci0gICAgICAgICAgICBraW9jYi5raV9uYnl0ZXMgPSBsZW47Ci0gICAgICAgICAgICByZXQgPSBmaWxwLT5mX29wLT5haW9fd3JpdGUoJmtpb2NiLCB2ZWMsIG5yX3NlZ3MsIGtpb2NiLmtpX3Bvcyk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgfSB3aGlsZSAoMCk7Ci0KLSAgICBpZiAoIUlTX0VSUihmaWxwKSkgewotICAgICAgICBmaWxwX2Nsb3NlKGZpbHAsIE5VTEwpOwotICAgIH0KLSAgICBzZXRfZnMob2xkZnMpOwotb3V0X2ZyZWVfbWVzc2FnZToKLSAgICBrZnJlZShtc2cpOwotICAgIHJldHVybiByZXQ7Ci19Ci0jZW5kaWYKLQotaW50IGFuZHJvaWRfbG9nZ2VyX2x2KHZvaWQgKm1vZHVsZSwgaW50IG1hc2spCi17Ci0gICAgc3dpdGNoIChtYXNrKSB7Ci0gICAgY2FzZSBBVEhfREVCVUdfRVJSOgotICAgICAgICByZXR1cm4gNjsKLSAgICBjYXNlIEFUSF9ERUJVR19JTkZPOgotICAgICAgICByZXR1cm4gNDsKLSAgICBjYXNlIEFUSF9ERUJVR19XQVJOOgotICAgICAgICByZXR1cm4gNTsgCi0gICAgY2FzZSBBVEhfREVCVUdfVFJDOiAgICAgICAgCi0gICAgICAgIHJldHVybiAzOyAKLSAgICBkZWZhdWx0OgotI2lmZGVmIERFQlVHCi0gICAgICAgIGlmICghbW9kdWxlKSB7Ci0gICAgICAgICAgICByZXR1cm4gMzsKLSAgICAgICAgfSBlbHNlIGlmIChtb2R1bGUgPT0gJkdFVF9BVEhfTU9EVUxFX0RFQlVHX1ZBUl9OQU1FKGRyaXZlcikpIHsKLSAgICAgICAgICAgIHJldHVybiAobWFzayA8PUFUSF9ERUJVR19NQUtFX01PRFVMRV9NQVNLKDMpKSA/IDMgOiAyOwotICAgICAgICB9IGVsc2UgaWYgKG1vZHVsZSA9PSAmR0VUX0FUSF9NT0RVTEVfREVCVUdfVkFSX05BTUUoaHRjKSkgewotICAgICAgICAgICAgcmV0dXJuIDI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gMzsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgcmV0dXJuIDM7IC8qIERFQlVHICovCi0jZW5kaWYKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbnQgYW5kcm9pZF9yZWFkd3JpdGVfZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSwgY2hhciAqcmJ1ZiwgY29uc3QgY2hhciAqd2J1Ziwgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICBpbnQgcmV0ID0gMDsKLSAgICBzdHJ1Y3QgZmlsZSAqZmlscCA9IChzdHJ1Y3QgZmlsZSAqKS1FTk9FTlQ7Ci0gICAgbW1fc2VnbWVudF90IG9sZGZzOwotICAgIG9sZGZzID0gZ2V0X2ZzKCk7Ci0gICAgc2V0X2ZzKEtFUk5FTF9EUyk7Ci0gICAgZG8gewotICAgICAgICBpbnQgbW9kZSA9ICh3YnVmKSA/IE9fUkRXUiA6IE9fUkRPTkxZOwotICAgICAgICBmaWxwID0gZmlscF9vcGVuKGZpbGVuYW1lLCBtb2RlLCBTX0lSVVNSKTsKLSAgICAgICAgaWYgKElTX0VSUihmaWxwKSB8fCAhZmlscC0+Zl9vcCkgewotICAgICAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19FUlIsICgiJXM6IGZpbGUgJXMgZmlscF9vcGVuIGVycm9yXG4iLCBfX0ZVTkNUSU9OX18sIGZpbGVuYW1lKSk7Ci0gICAgICAgICAgICByZXQgPSAtRU5PRU5UOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgaWYgKGxlbmd0aD09MCkgewotICAgICAgICAgICAgLyogUmVhZCB0aGUgbGVuZ3RoIG9mIHRoZSBmaWxlIG9ubHkgKi8KLSAgICAgICAgICAgIHN0cnVjdCBpbm9kZSAgICAqaW5vZGU7Ci0KLSAgICAgICAgICAgIGlub2RlID0gR0VUX0lOT0RFX0ZST01fRklMRVAoZmlscCk7Ci0gICAgICAgICAgICBpZiAoIWlub2RlKSB7Ci0gICAgICAgICAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19FUlIsICgiJXM6IEdldCBpbm9kZSBmcm9tICVzIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fLCBmaWxlbmFtZSkpOwotICAgICAgICAgICAgICAgIHJldCA9IC1FTk9FTlQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXQgPSBpX3NpemVfcmVhZChpbm9kZS0+aV9tYXBwaW5nLT5ob3N0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHdidWYpIHsKLSAgICAgICAgICAgIGlmICggKHJldD1maWxwLT5mX29wLT53cml0ZShmaWxwLCB3YnVmLCBsZW5ndGgsICZmaWxwLT5mX3BvcykpIDwgMCkgewotICAgICAgICAgICAgICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfRVJSLCAoIiVzOiBXcml0ZSAldSBieXRlcyB0byBmaWxlICVzIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgsIGZpbGVuYW1lLCByZXQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICggKHJldD1maWxwLT5mX29wLT5yZWFkKGZpbHAsIHJidWYsIGxlbmd0aCwgJmZpbHAtPmZfcG9zKSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19FUlIsICgiJXM6IFJlYWQgJXUgYnl0ZXMgZnJvbSBmaWxlICVzIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwgZmlsZW5hbWUsIHJldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSB3aGlsZSAoMCk7Ci0KLSAgICBpZiAoIUlTX0VSUihmaWxwKSkgewotICAgICAgICBmaWxwX2Nsb3NlKGZpbHAsIE5VTEwpOwotICAgIH0KLSAgICBzZXRfZnMob2xkZnMpOwotCi0gICAgcmV0dXJuIHJldDsKLX0KLQotaW50IGFuZHJvaWRfcmVxdWVzdF9maXJtd2FyZShjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKipmaXJtd2FyZV9wLCBjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRldmljZSAqZGV2aWNlKQotewotICAgIGludCByZXQgPSAwOwotICAgIHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmU7Ci0gICAgY2hhciBmaWxlbmFtZVsyNTZdOwotICAgIGNvbnN0IGNoYXIgKnJhd19maWxlbmFtZSA9IG5hbWU7Ci0JKmZpcm13YXJlX3AgPSBmaXJtd2FyZSA9IGt6YWxsb2Moc2l6ZW9mKCpmaXJtd2FyZSksIEdGUF9LRVJORUwpOwotICAgIGlmICghZmlybXdhcmUpIAotCQlyZXR1cm4gLUVOT01FTTsKLQlzcHJpbnRmKGZpbGVuYW1lLCAiJXMvJXMiLCBmd3BhdGgsIHJhd19maWxlbmFtZSk7Ci0gICAgZG8gewotICAgICAgICBzaXplX3QgbGVuZ3RoLCBidWZzaXplLCBibWlzaXplOwotCi0gICAgICAgIGlmICggKHJldD1hbmRyb2lkX3JlYWR3cml0ZV9maWxlKGZpbGVuYW1lLCBOVUxMLCBOVUxMLCAwKSkgPCAwKSB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGxlbmd0aCA9IHJldDsKLSAgICAgICAgfQotICAgIAotICAgICAgICBidWZzaXplID0gQUxJR04obGVuZ3RoLCBQQUdFX1NJWkUpOwotICAgICAgICBibWlzaXplID0gQV9ST1VORF9VUChsZW5ndGgsIDQpOwotICAgICAgICBidWZzaXplID0gbWF4KGJtaXNpemUsIGJ1ZnNpemUpOwotICAgICAgICBmaXJtd2FyZS0+ZGF0YSA9IHZtYWxsb2MoYnVmc2l6ZSk7Ci0gICAgICAgIGZpcm13YXJlLT5zaXplID0gbGVuZ3RoOwotICAgICAgICBpZiAoIWZpcm13YXJlLT5kYXRhKSB7Ci0gICAgICAgICAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX0VSUiwoIiVzOiBDYW5ub3QgYWxsb2NhdGUgYnVmZmVyIGZvciBmaXJtd2FyZVxuIiwgX19GVU5DVElPTl9fKSk7Ci0gICAgICAgICAgICByZXQgPSAtRU5PTUVNOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgaWYgKCAocmV0PWFuZHJvaWRfcmVhZHdyaXRlX2ZpbGUoZmlsZW5hbWUsIChjaGFyKilmaXJtd2FyZS0+ZGF0YSwgTlVMTCwgbGVuZ3RoKSkgIT0gbGVuZ3RoKSB7Ci0gICAgICAgICAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX0VSUiwoIiVzOiBmaWxlIHJlYWQgZXJyb3IsIHJldCAlZCByZXF1ZXN0ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJldCwgbGVuZ3RoKSk7Ci0gICAgICAgICAgICByZXQgPSAtMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgCi0gICAgfSB3aGlsZSAoMCk7Ci0KLSAgICBpZiAocmV0PDApIHsKLSAgICAgICAgaWYgKGZpcm13YXJlKSB7Ci0gICAgICAgICAgICBpZiAoZmlybXdhcmUtPmRhdGEpCi0gICAgICAgICAgICAgICAgdmZyZWUoZmlybXdhcmUtPmRhdGEpOwotICAgICAgICAgICAga2ZyZWUoZmlybXdhcmUpOwotICAgICAgICB9Ci0gICAgICAgICpmaXJtd2FyZV9wID0gTlVMTDsKLSAgICB9IGVsc2UgewotICAgICAgICByZXQgPSAwOwotICAgIH0KLSAgICByZXR1cm4gcmV0OyAgICAKLX0KLQotdm9pZCBhbmRyb2lkX3JlbGVhc2VfZmlybXdhcmUoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSkKLXsKLQlpZiAoZmlybXdhcmUpIHsKLSAgICAgICAgaWYgKGZpcm13YXJlLT5kYXRhKQotICAgICAgICAgICAgdmZyZWUoZmlybXdhcmUtPmRhdGEpOwotICAgICAgICBrZnJlZShmaXJtd2FyZSk7Ci0gICAgfQotfQotCi1zdGF0aWMgaW50IGFyNjAwMF9hbmRyb2lkX2F2YWlsX2V2KHZvaWQgKmNvbnRleHQsIHZvaWQgKmhpZl9oYW5kbGUpCi17Ci0gICAgaW50IHJldDsKLSAgICBhcjYwMDBfZW5hYmxlX21tY2hvc3RfZGV0ZWN0X2NoYW5nZSgwKTsKLSAgICByZXQgPSBhcjYwMDBfYXZhaWxfZXZfcChjb250ZXh0LCBoaWZfaGFuZGxlKTsKLSAgICByZXR1cm4gcmV0OwotfQotCi0vKiBVc2VmdWwgZm9yIHF1YWxjb20gcGxhdGZvcm0gdG8gZGV0ZWN0IG91ciB3bGFuIGNhcmQgZm9yIG1tYyBzdGFjayAqLwotc3RhdGljIHZvaWQgYXI2MDAwX2VuYWJsZV9tbWNob3N0X2RldGVjdF9jaGFuZ2UoaW50IGVuYWJsZSkKLXsKLSNpZmRlZiBDT05GSUdfTU1DX01TTQotI2RlZmluZSBNTUNfTVNNX0RFViAibXNtX3NkY2MuMSIKLSAgICBjaGFyIGJ1ZlszXTsKLSAgICBpbnQgbGVuZ3RoOwotCi0gICAgaWYgKCFlbmFibGVfbW1jX2hvc3RfZGV0ZWN0X2NoYW5nZSkgewotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGxlbmd0aCA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZFxuIiwgZW5hYmxlID8gMSA6IDApOwotICAgIGlmIChhbmRyb2lkX3JlYWR3cml0ZV9maWxlKCIvc3lzL2RldmljZXMvcGxhdGZvcm0vIiBNTUNfTVNNX0RFViAiL2RldGVjdF9jaGFuZ2UiLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBidWYsIGxlbmd0aCkgPCAwKSB7Ci0gICAgICAgIC8qIGZhbGwgYmFjayB0byBwb2xsaW5nICovCi0gICAgICAgIGFuZHJvaWRfcmVhZHdyaXRlX2ZpbGUoIi9zeXMvZGV2aWNlcy9wbGF0Zm9ybS8iIE1NQ19NU01fREVWICIvcG9sbGluZyIsIE5VTEwsIGJ1ZiwgbGVuZ3RoKTsKLSAgICB9Ci0jZW5kaWYKLX0KLQotI2lmZGVmIENPTkZJR19IQVNfRUFSTFlTVVNQRU5ECi1zdGF0aWMgdm9pZCBhbmRyb2lkX2Vhcmx5X3N1c3BlbmQoc3RydWN0IGVhcmx5X3N1c3BlbmQgKmgpCi17Ci0gICAgc2NyZWVuX2lzX29mZiA9IDE7Ci19Ci0KLXN0YXRpYyB2b2lkIGFuZHJvaWRfbGF0ZV9yZXN1bWUoc3RydWN0IGVhcmx5X3N1c3BlbmQgKmgpCi17Ci0gICAgc2NyZWVuX2lzX29mZiA9IDA7Ci19Ci0jZW5kaWYKLQotdm9pZCBhbmRyb2lkX21vZHVsZV9pbml0KE9TRFJWX0NBTExCQUNLUyAqb3NkcnZDYWxsYmFja3MpCi17Ci0gICAgYm1pZW5hYmxlID0gMTsKLSAgICBpZiAoaWZuYW1lWzBdID09ICdcMCcpCi0gICAgICAgIHN0cmNweShpZm5hbWUsIGRlZl9pZm5hbWUpOwotI2lmZGVmIENPTkZJR19IQVNfRUFSTFlTVVNQRU5ECi0gICAgYXI2a19lYXJseV9zdXNwZW5kLnN1c3BlbmQgPSBhbmRyb2lkX2Vhcmx5X3N1c3BlbmQ7Ci0gICAgYXI2a19lYXJseV9zdXNwZW5kLnJlc3VtZSAgPSBhbmRyb2lkX2xhdGVfcmVzdW1lOwotICAgIGFyNmtfZWFybHlfc3VzcGVuZC5sZXZlbCAgID0gRUFSTFlfU1VTUEVORF9MRVZFTF9CTEFOS19TQ1JFRU47Ci0gICAgcmVnaXN0ZXJfZWFybHlfc3VzcGVuZCgmYXI2a19lYXJseV9zdXNwZW5kKTsKLSNlbmRpZgotCi0gICAgYXI2MDAwX2F2YWlsX2V2X3AgPSBvc2RydkNhbGxiYWNrcy0+ZGV2aWNlSW5zZXJ0ZWRIYW5kbGVyOwotICAgIG9zZHJ2Q2FsbGJhY2tzLT5kZXZpY2VJbnNlcnRlZEhhbmRsZXIgPSBhcjYwMDBfYW5kcm9pZF9hdmFpbF9ldjsKLQotICAgIGFyNjAwMF9lbmFibGVfbW1jaG9zdF9kZXRlY3RfY2hhbmdlKDEpOwotfQotCi12b2lkIGFuZHJvaWRfbW9kdWxlX2V4aXQodm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfSEFTX0VBUkxZU1VTUEVORAotICAgIHVucmVnaXN0ZXJfZWFybHlfc3VzcGVuZCgmYXI2a19lYXJseV9zdXNwZW5kKTsKLSNlbmRpZgotICAgIGFyNjAwMF9lbmFibGVfbW1jaG9zdF9kZXRlY3RfY2hhbmdlKDEpOwotfQotCi0jaWZkZWYgQ09ORklHX1BNCi12b2lkIGFuZHJvaWRfYXI2a19jaGVja193b3dfc3RhdHVzKHN0cnVjdCBhcjZfc29mdGMgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGlzRXZlbnQpCi17Ci0gICAgaWYgKAotI2lmZGVmIENPTkZJR19IQVNfRUFSTFlTVVNQRU5ECi0gICAgICAgIHNjcmVlbl9pc19vZmYgJiYgCi0jZW5kaWYgCi0gICAgICAgICAgICBza2IgJiYgYXItPmFyQ29ubmVjdGVkKSB7Ci0gICAgICAgIGJvb2wgbmVlZFdha2UgPSBmYWxzZTsKLSAgICAgICAgaWYgKGlzRXZlbnQpIHsKLSAgICAgICAgICAgIGlmIChBX05FVEJVRl9MRU4oc2tiKSA+PSBzaXplb2YodTE2KSkgewotICAgICAgICAgICAgICAgIHUxNiBjbWQgPSAqKGNvbnN0IHUxNiAqKUFfTkVUQlVGX0RBVEEoc2tiKTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGNtZCkgewotICAgICAgICAgICAgICAgIGNhc2UgV01JX0NPTk5FQ1RfRVZFTlRJRDoKLSAgICAgICAgICAgICAgICBjYXNlIFdNSV9ESVNDT05ORUNUX0VWRU5USUQ6Ci0gICAgICAgICAgICAgICAgICAgIG5lZWRXYWtlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgLyogZG9udCB3YWtlIGxvY2sgdGhlIHN5c3RlbSBmb3Igb3RoZXIgZXZlbnQgKi8KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKEFfTkVUQlVGX0xFTihza2IpID49IHNpemVvZihBVEhfTUFDX0hEUikpIHsKLSAgICAgICAgICAgIEFUSF9NQUNfSERSICpkYXRhcCA9IChBVEhfTUFDX0hEUiAqKUFfTkVUQlVGX0RBVEEoc2tiKTsKLSAgICAgICAgICAgIGlmICghSUVFRTgwMjExX0lTX01VTFRJQ0FTVChkYXRhcC0+ZHN0TWFjKSkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAoQV9CRTJDUFUxNihkYXRhcC0+dHlwZU9yTGVuKSkgewotICAgICAgICAgICAgICAgIGNhc2UgMHgwODAwOiAvKiBJUCAqLwotICAgICAgICAgICAgICAgIGNhc2UgMHg4ODhlOiAvKiBFQVBPTCAqLwotICAgICAgICAgICAgICAgIGNhc2UgMHg4OGM3OiAvKiBSU05fUFJFQVVUSCAqLwotICAgICAgICAgICAgICAgIGNhc2UgMHg4OGI0OiAvKiBXQVBJICovCi0gICAgICAgICAgICAgICAgICAgICBuZWVkV2FrZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDB4MDgwNjogLyogQVJQIGlzIG5vdCBpbXBvcnRhbnQgdG8gaG9sZCB3YWtlIGxvY2sgKi8KLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG5lZWRXYWtlKSB7Ci0gICAgICAgICAgICAvKiBrZWVwIGhvc3Qgd2FrZSB1cCBpZiB0aGVyZSBpcyBhbnkgZXZlbnQgYW5kIHBhY2thdGUgY29taW5nIGluKi8KLSAgICAgICAgICAgIGlmICh3b3dsZWRvbikgewotICAgICAgICAgICAgICAgIGNoYXIgYnVmWzMyXTsKLSAgICAgICAgICAgICAgICBpbnQgbGVuID0gc3ByaW50ZihidWYsICJvbiIpOwotICAgICAgICAgICAgICAgIGFuZHJvaWRfcmVhZHdyaXRlX2ZpbGUoIi9zeXMvcG93ZXIvc3RhdGUiLCBOVUxMLCBidWYsIGxlbik7Ci0KLSAgICAgICAgICAgICAgICBsZW4gPSBzcHJpbnRmKGJ1ZiwgIiVkIiwgMTI3KTsKLSAgICAgICAgICAgICAgICBhbmRyb2lkX3JlYWR3cml0ZV9maWxlKCIvc3lzL2NsYXNzL2xlZHMvbGNkLWJhY2tsaWdodC9icmlnaHRuZXNzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGJ1ZixsZW4pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotI2VuZGlmIC8qIENPTkZJR19QTSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9hcjYwMDBfZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2FyNjAwMF9kcnYuYwppbmRleCA5N2Q2Y2U2Li40OGRkOWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2FyNjAwMF9kcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2FyNjAwMF9kcnYuYwpAQCAtMjcsOSArMjcsNyBAQAogICovCiAKICNpbmNsdWRlICJhcjYwMDBfZHJ2LmgiCi0jaWZkZWYgQVRINktfQ09ORklHX0NGRzgwMjExCiAjaW5jbHVkZSAiY2ZnODAyMTEuaCIKLSNlbmRpZiAvKiBBVEg2S19DT05GSUdfQ0ZHODAyMTEgKi8KICNpbmNsdWRlICJodGMuaCIKICNpbmNsdWRlICJ3bWlfZmlsdGVyX2xpbnV4LmgiCiAjaW5jbHVkZSAiZXBwaW5nX3Rlc3QuaCIKQEAgLTExOCw3ICsxMTYsNiBAQAogI2VuZGlmCiAKIHVuc2lnbmVkIGludCBwcm9jZXNzRG90MTFIZHIgPSAwOwotaW50IGJtaWVuYWJsZSA9IEJNSUVOQUJMRV9ERUZBVUxUOwogCiBjaGFyIGlmbmFtZVtJRk5BTVNJWl0gPSB7MCx9OwogCkBAIC0xMzQsNiArMTMxLDggQEAKIHVuc2lnbmVkIGludCBlbmFibGV1YXJ0cHJpbnQgPSBFTkFCTEVVQVJUUFJJTlRfREVGQVVMVDsKIHVuc2lnbmVkIGludCBsb2dXbWlSYXdNc2dzID0gMDsKIHVuc2lnbmVkIGludCBlbmFibGV0aW1lcndhciA9IDA7Cit1bnNpZ25lZCBpbnQgbnVtX2RldmljZSA9IDE7Cit1bnNpZ25lZCBpbnQgcmVnc2Nhbm1vZGU7CiB1bnNpZ25lZCBpbnQgZndtb2RlID0gMTsKIHVuc2lnbmVkIGludCBtYm94X3lpZWxkX2xpbWl0ID0gOTk7CiB1bnNpZ25lZCBpbnQgZW5hYmxlcnNzaWNvbXBlbnNhdGlvbiA9IDA7CkBAIC0xNDgsNyArMTQ3LDYgQEAKIHVuc2lnbmVkIGludCBub2hpZnNjYXR0ZXJzdXBwb3J0ID0gTk9ISUZTQ0FUVEVSU1VQUE9SVF9ERUZBVUxUOwogCiB1bnNpZ25lZCBpbnQgc2V0dXBoY2kgPSBTRVRVUEhDSV9ERUZBVUxUOwotdW5zaWduZWQgaW50IHNldHVwaGNpcGFsID0gU0VUVVBIQ0lQQUxfREVGQVVMVDsKIHVuc2lnbmVkIGludCBsb2doY2kgPSAwOwogdW5zaWduZWQgaW50IHNldHVwYnRkZXYgPSBTRVRVUEJUREVWX0RFRkFVTFQ7CiAjaWZuZGVmIEVYUE9SVF9IQ0lfQlJJREdFX0lOVEVSRkFDRQpAQCAtMTU2LDE1ICsxNTQsMTQgQEAKIHVuc2lnbmVkIGludCBoY2l1YXJ0c2NhbGUgPSBIQ0lVQVJUU0NBTEVfREVGQVVMVDsKIHVuc2lnbmVkIGludCBoY2l1YXJ0c3RlcCA9IEhDSVVBUlRTVEVQX0RFRkFVTFQ7CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfQ0hFQ0tTVU1fT0ZGTE9BRAogdW5zaWduZWQgaW50IGNzdW1PZmZsb2FkPTA7CiB1bnNpZ25lZCBpbnQgY3N1bU9mZmxvYWRUZXN0PTA7Ci0jZW5kaWYKIHVuc2lnbmVkIGludCBlcHBpbmd0ZXN0PTA7Cit1bnNpZ25lZCBpbnQgbWFjX2FkZHJfbWV0aG9kOwordW5zaWduZWQgaW50IGZpcm13YXJlX2JyaWRnZTsKIAogbW9kdWxlX3BhcmFtX3N0cmluZyhpZm5hbWUsIGlmbmFtZSwgc2l6ZW9mKGlmbmFtZSksIDA2NDQpOwogbW9kdWxlX3BhcmFtKHdsYW5pbml0bW9kZSwgaW50LCAwNjQ0KTsKLW1vZHVsZV9wYXJhbShibWllbmFibGUsIGludCwgMDY0NCk7CiBtb2R1bGVfcGFyYW0oYnlwYXNzd21pLCBib29sLCAwNjQ0KTsKIG1vZHVsZV9wYXJhbShkZWJ1Z2xldmVsLCB1aW50LCAwNjQ0KTsKIG1vZHVsZV9wYXJhbSh0c3BlY0NvbXBsaWFuY2UsIGludCwgMDY0NCk7CkBAIC0xODIsOSArMTc5LDcgQEAKIG1vZHVsZV9wYXJhbShhbGxvd190cmFjZV9zaWduYWwsIGludCwgMDY0NCk7CiBtb2R1bGVfcGFyYW0oZW5hYmxlcnNzaWNvbXBlbnNhdGlvbiwgdWludCwgMDY0NCk7CiBtb2R1bGVfcGFyYW0ocHJvY2Vzc0RvdDExSGRyLCB1aW50LCAwNjQ0KTsKLSNpZmRlZiBDT05GSUdfQ0hFQ0tTVU1fT0ZGTE9BRAogbW9kdWxlX3BhcmFtKGNzdW1PZmZsb2FkLCB1aW50LCAwNjQ0KTsKLSNlbmRpZgogI2lmZGVmIENPTkZJR19IT1NUX1RDTURfU1VQUE9SVAogbW9kdWxlX3BhcmFtKHRlc3Rtb2RlLCB1aW50LCAwNjQ0KTsKICNlbmRpZgpAQCAtMTkyLDcgKzE4Nyw2IEBACiBtb2R1bGVfcGFyYW0obm9oaWZzY2F0dGVyc3VwcG9ydCwgdWludCwgMDY0NCk7CiBtb2R1bGVfcGFyYW0ocGFuaWNfb25fYXNzZXJ0LCB1aW50LCAwNjQ0KTsKIG1vZHVsZV9wYXJhbShzZXR1cGhjaSwgdWludCwgMDY0NCk7Ci1tb2R1bGVfcGFyYW0oc2V0dXBoY2lwYWwsIHVpbnQsIDA2NDQpOwogbW9kdWxlX3BhcmFtKGxvZ2hjaSwgdWludCwgMDY0NCk7CiBtb2R1bGVfcGFyYW0oc2V0dXBidGRldiwgdWludCwgMDY0NCk7CiAjaWZuZGVmIEVYUE9SVF9IQ0lfQlJJREdFX0lOVEVSRkFDRQpAQCAtMjg4LDIwICsyODIsMTEgQEAKIHN0YXRpYyB2b2lkIGFyNjAwMF9kZXRlY3RfZXJyb3IodW5zaWduZWQgbG9uZyBwdHIpOwogc3RhdGljIHZvaWQJYXI2MDAwX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYXI2MDAwX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqYXI2MDAwX2dldF9pd3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KTsKIAogc3RhdGljIHZvaWQgZGlzY29ubmVjdF90aW1lcl9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgcHRyKTsKIAogdm9pZCByZWFkX3Jzc2lfY29tcGVuc2F0aW9uX3BhcmFtKHN0cnVjdCBhcjZfc29mdGMgKmFyKTsKIAotICAgIC8qIGZvciBhbmRyb2lkIGJ1aWxkcyB3ZSBjYWxsIGV4dGVybmFsIEFQSXMgdGhhdCBoYW5kbGUgZmlybXdhcmUgZG93bmxvYWQgYW5kIGNvbmZpZ3VyYXRpb24gKi8KLSNpZmRlZiBBTkRST0lEX0VOVgotLyogISEhISBJbnRlcmltIGFuZHJvaWQgc3VwcG9ydCB0byBtYWtlIGl0IGVhc2llciB0byBwYXRjaCB0aGUgZGVmYXVsdCBkcml2ZXIgZm9yCi0gKiBhbmRyb2lkIHVzZS4gWW91IG11c3QgZGVmaW5lIGFuIGV4dGVybmFsIHNvdXJjZSBmaWxlIGFyNjAwMF9hbmRyb2lkLmMgdGhhdCBoYW5kbGVzIHRoZSBmb2xsb3dpbmcKLSAqIEFQSXMgKi8KLWV4dGVybiB2b2lkIGFuZHJvaWRfbW9kdWxlX2luaXQoT1NEUlZfQ0FMTEJBQ0tTICpvc2RydkNhbGxiYWNrcyk7Ci1leHRlcm4gdm9pZCBhbmRyb2lkX21vZHVsZV9leGl0KHZvaWQpOwotI2VuZGlmCiAvKgogICogSFRDIHNlcnZpY2UgY29ubmVjdGlvbiBoYW5kbGVycwogICovCkBAIC0zMjEsOSArMzA2LDcgQEAKIAogc3RhdGljIEhUQ19TRU5EX0ZVTExfQUNUSU9OIGFyNjAwMF90eF9xdWV1ZV9mdWxsKHZvaWQgKkNvbnRleHQsIHN0cnVjdCBodGNfcGFja2V0ICpwUGFja2V0KTsKIAotI2lmZGVmIEFUSF9BUjZLXzExTl9TVVBQT1JUCiBzdGF0aWMgdm9pZCBhcjYwMDBfYWxsb2NfbmV0YnVmcyhBX05FVEJVRl9RVUVVRV9UICpxLCB1MTYgbnVtKTsKLSNlbmRpZgogc3RhdGljIHZvaWQgYXI2MDAwX2RlbGl2ZXJfZnJhbWVzX3RvX253X3N0YWNrKHZvaWQgKiBkZXYsIHZvaWQgKm9zYnVmKTsKIC8vc3RhdGljIHZvaWQgYXI2MDAwX2RlbGl2ZXJfZnJhbWVzX3RvX2J0X3N0YWNrKHZvaWQgKiBkZXYsIHZvaWQgKm9zYnVmKTsKIApAQCAtMzQ2LDggKzMyOSw2IEBACiBzdGF0aWMgaW50CiBhcjYwMDBfc3lzZnNfYm1pX2luaXQoc3RydWN0IGFyNl9zb2Z0YyAqYXIpOwogCi0vKiBIQ0kgUEFMIGNhbGxiYWNrIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAqLwotaW50IGFyNmtfc2V0dXBfaGNpX3BhbChzdHJ1Y3QgYXI2X3NvZnRjICphcik7CiB2b2lkICBhcjZrX2NsZWFudXBfaGNpX3BhbChzdHJ1Y3QgYXI2X3NvZnRjICphcik7CiAKIHN0YXRpYyB2b2lkCkBAIC0zNjIsMTYgKzM0MywxMyBAQAogCiBzdHJ1Y3QgbmV0X2RldmljZSAqYXI2MDAwX2RldmljZXNbTUFYX0FSNjAwMF07CiBzdGF0aWMgaW50IGlzX25ldGRldl9yZWdpc3RlcmVkOwotZXh0ZXJuIHN0cnVjdCBpd19oYW5kbGVyX2RlZiBhdGhfaXdfaGFuZGxlcl9kZWY7CiBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChhckV2ZW50KTsKIHN0YXRpYyB2b2lkIGFyNjAwMF9jb29raWVfaW5pdChzdHJ1Y3QgYXI2X3NvZnRjICphcik7CiBzdGF0aWMgdm9pZCBhcjYwMDBfY29va2llX2NsZWFudXAoc3RydWN0IGFyNl9zb2Z0YyAqYXIpOwogc3RhdGljIHZvaWQgYXI2MDAwX2ZyZWVfY29va2llKHN0cnVjdCBhcjZfc29mdGMgKmFyLCBzdHJ1Y3QgYXJfY29va2llICogY29va2llKTsKIHN0YXRpYyBzdHJ1Y3QgYXJfY29va2llICphcjYwMDBfYWxsb2NfY29va2llKHN0cnVjdCBhcjZfc29mdGMgKmFyKTsKIAotI2lmZGVmIFVTRVJfS0VZUwogc3RhdGljIGludCBhcjYwMDBfcmVpbnN0YWxsX2tleXMoc3RydWN0IGFyNl9zb2Z0YyAqYXIsdTgga2V5X29wX2N0cmwpOwotI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQVBfVklSVFVBTF9BREFQVEVSX1NVUFBPUlQKIHN0cnVjdCBuZXRfZGV2aWNlICphckFwTmV0RGV2OwpAQCAtMzg5LDcgKzM2Nyw2IEBACiAgICAgLm5kb19vcGVuICAgICAgICAgICAgICAgPSBhcjYwMDBfb3BlbiwKICAgICAubmRvX3N0b3AgICAgICAgICAgICAgICA9IGFyNjAwMF9jbG9zZSwKICAgICAubmRvX2dldF9zdGF0cyAgICAgICAgICA9IGFyNjAwMF9nZXRfc3RhdHMsCi0gICAgLm5kb19kb19pb2N0bCAgICAgICAgICAgPSBhcjYwMDBfaW9jdGwsCiAgICAgLm5kb19zdGFydF94bWl0ICAgICAgICAgPSBhcjYwMDBfZGF0YV90eCwKICAgICAubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGFyNjAwMF9zZXRfbXVsdGljYXN0X2xpc3QsCiB9OwpAQCAtNjEyLDcgKzU4OSw2IEBACiAgICAgc2VuZCA9IGRiZ2xvZ19nZXRfZGVidWdfZnJhZ21lbnQoJmJ1ZmZlcltzZW50XSwgbGVuZ3RoIC0gc2VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVhfV0lSRUxFU1NfRVZFTlRfU0laRSk7CiAgICAgd2hpbGUgKHNlbmQpIHsKLSAgICAgICAgYXI2MDAwX3NlbmRfZXZlbnRfdG9fYXBwKGFyLCBXTUlYX0RCR0xPR19FVkVOVElELCAodTggKikmYnVmZmVyW3NlbnRdLCBzZW5kKTsKICAgICAgICAgc2VudCArPSBzZW5kOwogICAgICAgICBzZW5kID0gZGJnbG9nX2dldF9kZWJ1Z19mcmFnbWVudCgmYnVmZmVyW3NlbnRdLCBsZW5ndGggLSBzZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVhfV0lSRUxFU1NfRVZFTlRfU0laRSk7CkBAIC02MzEsNyArNjA3LDcgQEAKIGFyNjAwMF9pbml0X21vZHVsZSh2b2lkKQogewogICAgIHN0YXRpYyBpbnQgcHJvYmVkID0gMDsKLSAgICBpbnQgc3RhdHVzOworICAgIGludCByOwogICAgIE9TRFJWX0NBTExCQUNLUyBvc2RydkNhbGxiYWNrczsKIAogICAgIGFfbW9kdWxlX2RlYnVnX3N1cHBvcnRfaW5pdCgpOwpAQCAtNjY0LDEyICs2NDAsNiBAQAogICAgIG9zZHJ2Q2FsbGJhY2tzLmRldmljZVBvd2VyQ2hhbmdlSGFuZGxlciA9IGFyNjAwMF9wb3dlcl9jaGFuZ2VfZXY7CiAjZW5kaWYKIAotICAgIGFyNjAwMF9wbV9pbml0KCk7Ci0KLSNpZmRlZiBBTkRST0lEX0VOVgotICAgIGFuZHJvaWRfbW9kdWxlX2luaXQoJm9zZHJ2Q2FsbGJhY2tzKTsKLSNlbmRpZgotCiAjaWZkZWYgREVCVUcKICAgICAvKiBTZXQgdGhlIGRlYnVnIGZsYWdzIGlmIHNwZWNpZmllZCBhdCBsb2FkIHRpbWUgKi8KICAgICBpZihkZWJ1Z2ZsYWdzICE9IDApCkBAIC02ODcsMTMgKzY1Nyw5IEBACiAgICAgbWVtc2V0KCZhcHRjVFIsIDAsIHNpemVvZihBUFRDX1RSQUZGSUNfUkVDT1JEKSk7CiAjZW5kaWYgLyogQURBUFRJVkVfUE9XRVJfVEhST1VHSFBVVF9DT05UUk9MICovCiAKLSNpZmRlZiBDT05GSUdfSE9TVF9HUElPX1NVUFBPUlQKLSAgICBhcjYwMDBfZ3Bpb19pbml0KCk7Ci0jZW5kaWYgLyogQ09ORklHX0hPU1RfR1BJT19TVVBQT1JUICovCi0KLSAgICBzdGF0dXMgPSBISUZJbml0KCZvc2RydkNhbGxiYWNrcyk7Ci0gICAgaWYgKHN0YXR1cykKLSAgICAgICAgcmV0dXJuIC1FTk9ERVY7CisgICAgciA9IEhJRkluaXQoJm9zZHJ2Q2FsbGJhY2tzKTsKKyAgICBpZiAocikKKyAgICAgICAgcmV0dXJuIHI7CiAKICAgICByZXR1cm4gMDsKIH0KQEAgLTcyMywxMiArNjg5LDYgQEAKIAogICAgIGFfbW9kdWxlX2RlYnVnX3N1cHBvcnRfY2xlYW51cCgpOwogCi0gICAgYXI2MDAwX3BtX2V4aXQoKTsKLQotI2lmZGVmIEFORFJPSURfRU5WICAgIAotICAgIGFuZHJvaWRfbW9kdWxlX2V4aXQoKTsKLSNlbmRpZgotCiAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19JTkZPLCgiYXI2MDAwX2NsZWFudXA6IHN1Y2Nlc3NcbiIpKTsKIH0KIApAQCAtNzY5LDcgKzcyOSw2IEBACiB9CiAjZW5kaWYgLyogQURBUFRJVkVfUE9XRVJfVEhST1VHSFBVVF9DT05UUk9MICovCiAKLSNpZmRlZiBBVEhfQVI2S18xMU5fU1VQUE9SVAogc3RhdGljIHZvaWQKIGFyNjAwMF9hbGxvY19uZXRidWZzKEFfTkVUQlVGX1FVRVVFX1QgKnEsIHUxNiBudW0pCiB7CkBAIC03ODgsNyArNzQ3LDYgQEAKICAgICAgICAgQV9QUklOVEYoIiVzKCksIGFsbG9jYXRpb24gb2YgbmV0YnVmIGZhaWxlZCIsIF9fZnVuY19fKTsKICAgICB9CiB9Ci0jZW5kaWYKIAogc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIGJtaV9hdHRyID0gewogICAgIC5hdHRyID0gey5uYW1lID0gImJtaSIsIC5tb2RlID0gMDYwMH0sCkBAIC04OTQsOCArODUyLDYgQEAKICAgICB9IFwKIH0gd2hpbGUoMCkKIAotI2lmZGVmIElOSVRfTU9ERV9EUlZfRU5BQkxFRAotCiAjaWZkZWYgU09GVE1BQ19GSUxFX1VTRUQKICNkZWZpbmUgQVI2MDAyX01BQ19BRERSRVNTX09GRlNFVCAgICAgMHgwQQogI2RlZmluZSBBUjYwMDNfTUFDX0FERFJFU1NfT0ZGU0VUICAgICAweDE2CkBAIC05ODIsNyArOTM4LDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc291cmNlID0gInNvZnRtYWMgZmlsZSI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBBX0ZSRUUobWFjYnVmKTsKKyAgICAgICAgICAgIGtmcmVlKG1hY2J1Zik7CiAgICAgICAgIH0KICAgICAgICAgQV9SRUxFQVNFX0ZJUk1XQVJFKHNvZnRtYWNfZW50cnkpOwogICAgIH0KQEAgLTEwMDUsNiArOTYxLDggQEAKICAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IEFSNjAwM19SRVYxX09UUF9GSUxFOwogICAgICAgICAgICAgfSBlbHNlIGlmIChhci0+YXJWZXJzaW9uLnRhcmdldF92ZXIgPT0gQVI2MDAzX1JFVjJfVkVSU0lPTikgewogICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gQVI2MDAzX1JFVjJfT1RQX0ZJTEU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhci0+YXJWZXJzaW9uLnRhcmdldF92ZXIgPT0gQVI2MDAzX1JFVjNfVkVSU0lPTikgeworICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBBUjYwMDNfUkVWM19PVFBfRklMRTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19FUlIsICgiVW5rbm93biBmaXJtd2FyZSByZXZpc2lvbjogJWRcbiIsIGFyLT5hclZlcnNpb24udGFyZ2V0X3ZlcikpOwogICAgICAgICAgICAgICAgIHJldHVybiBBX0VSUk9SOwpAQCAtMTAxNiw2ICs5NzQsOCBAQAogICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gQVI2MDAzX1JFVjFfRklSTVdBUkVfRklMRTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXItPmFyVmVyc2lvbi50YXJnZXRfdmVyID09IEFSNjAwM19SRVYyX1ZFUlNJT04pIHsKICAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IEFSNjAwM19SRVYyX0ZJUk1XQVJFX0ZJTEU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhci0+YXJWZXJzaW9uLnRhcmdldF92ZXIgPT0gQVI2MDAzX1JFVjNfVkVSU0lPTikgeworICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBBUjYwMDNfUkVWM19GSVJNV0FSRV9GSUxFOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX0VSUiwgKCJVbmtub3duIGZpcm13YXJlIHJldmlzaW9uOiAlZFxuIiwgYXItPmFyVmVyc2lvbi50YXJnZXRfdmVyKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEFfRVJST1I7CkBAIC0xMDI3LDYgKzk4Nyw4IEBACiAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gQVI2MDAzX1JFVjFfRVBQSU5HX0ZJUk1XQVJFX0ZJTEU7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhci0+YXJWZXJzaW9uLnRhcmdldF92ZXIgPT0gQVI2MDAzX1JFVjJfVkVSU0lPTikgewogICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IEFSNjAwM19SRVYyX0VQUElOR19GSVJNV0FSRV9GSUxFOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXItPmFyVmVyc2lvbi50YXJnZXRfdmVyID09IEFSNjAwM19SRVYzX1ZFUlNJT04pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gQVI2MDAzX1JFVjNfRVBQSU5HX0ZJUk1XQVJFX0ZJTEU7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19FUlIsICgiZXBwaW5ndGVzdCA6IHVuc3VwcG9ydGVkIGZpcm13YXJlIHJldmlzaW9uOiAlZFxuIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICBhci0+YXJWZXJzaW9uLnRhcmdldF92ZXIpKTsKQEAgLTEwNDEsNiArMTAwMyw4IEBACiAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gQVI2MDAzX1JFVjFfVENNRF9GSVJNV0FSRV9GSUxFOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXItPmFyVmVyc2lvbi50YXJnZXRfdmVyID09IEFSNjAwM19SRVYyX1ZFUlNJT04pIHsKICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBBUjYwMDNfUkVWMl9UQ01EX0ZJUk1XQVJFX0ZJTEU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhci0+YXJWZXJzaW9uLnRhcmdldF92ZXIgPT0gQVI2MDAzX1JFVjNfVkVSU0lPTikgeworICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBBUjYwMDNfUkVWM19UQ01EX0ZJUk1XQVJFX0ZJTEU7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19FUlIsICgiVW5rbm93biBmaXJtd2FyZSByZXZpc2lvbjogJWRcbiIsIGFyLT5hclZlcnNpb24udGFyZ2V0X3ZlcikpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gQV9FUlJPUjsKQEAgLTEwNjgsNiArMTAzMiw4IEBACiAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBBUjYwMDNfUkVWMV9QQVRDSF9GSUxFOwogICAgICAgICAgICAgfSBlbHNlIGlmIChhci0+YXJWZXJzaW9uLnRhcmdldF92ZXIgPT0gQVI2MDAzX1JFVjJfVkVSU0lPTikgewogICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gQVI2MDAzX1JFVjJfUEFUQ0hfRklMRTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFyLT5hclZlcnNpb24udGFyZ2V0X3ZlciA9PSBBUjYwMDNfUkVWM19WRVJTSU9OKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IEFSNjAwM19SRVYzX1BBVENIX0ZJTEU7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfRVJSLCAoIlVua25vd24gZmlybXdhcmUgcmV2aXNpb246ICVkXG4iLCBhci0+YXJWZXJzaW9uLnRhcmdldF92ZXIpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gQV9FUlJPUjsKQEAgLTEwNzksNiArMTA0NSw4IEBACiAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBBUjYwMDNfUkVWMV9CT0FSRF9EQVRBX0ZJTEU7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGFyLT5hclZlcnNpb24udGFyZ2V0X3ZlciA9PSBBUjYwMDNfUkVWMl9WRVJTSU9OKSB7CiAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBBUjYwMDNfUkVWMl9CT0FSRF9EQVRBX0ZJTEU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhci0+YXJWZXJzaW9uLnRhcmdldF92ZXIgPT0gQVI2MDAzX1JFVjNfVkVSU0lPTikgeworICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBBUjYwMDNfUkVWM19CT0FSRF9EQVRBX0ZJTEU7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfRVJSLCAoIlVua25vd24gZmlybXdhcmUgcmV2aXNpb246ICVkXG4iLCBhci0+YXJWZXJzaW9uLnRhcmdldF92ZXIpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gQV9FUlJPUjsKQEAgLTExMzMsOCArMTEwMSwxMCBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvKiBSZWNvcmQgdGhlIGZhY3QgdGhhdCBleHRlbmRlZCBib2FyZCBEYXRhIElTIGluaXRpYWxpemVkICovCi0gICAgICAgICAgICBwYXJhbSA9IDE7Ci0gICAgICAgICAgICBibWlmbihCTUlXcml0ZU1lbW9yeShhci0+YXJIaWZEZXZpY2UsIEhPU1RfSU5URVJFU1RfSVRFTV9BRERSRVNTKGFyLCBoaV9ib2FyZF9leHRfZGF0YV9pbml0aWFsaXplZCksICh1OCAqKSZwYXJhbSwgNCkpOworICAgICAgICAgICAgcGFyYW0gPSAoYm9hcmRfZXh0X2RhdGFfc2l6ZSA8PCAxNikgfCAxOworICAgICAgICAgICAgYm1pZm4oQk1JV3JpdGVNZW1vcnkoYXItPmFySGlmRGV2aWNlLAorICAgICAgICAgICAgSE9TVF9JTlRFUkVTVF9JVEVNX0FERFJFU1MoYXIsIGhpX2JvYXJkX2V4dF9kYXRhX2NvbmZpZyksCisJCQkJICAgICAgICh1bnNpZ25lZCBjaGFyICopJnBhcmFtLCA0KSk7CiAgICAgICAgIH0KICAgICAgICAgZndfZW50cnlfc2l6ZSA9IGJvYXJkX2RhdGFfc2l6ZTsKICAgICB9CkBAIC0xMTUzLDcgKzExMjMsNiBAQAogICAgIEFfUkVMRUFTRV9GSVJNV0FSRShmd19lbnRyeSk7CiAgICAgcmV0dXJuIDA7CiB9Ci0jZW5kaWYgLyogSU5JVF9NT0RFX0RSVl9FTkFCTEVEICovCiAKIGludAogYXI2MDAwX3VwZGF0ZV9iZGFkZHIoc3RydWN0IGFyNl9zb2Z0YyAqYXIpCkBAIC0xMjAwLDcgKzExNjksNiBAQAogICAgICAgICB9CiAKICAgICAgICAgQV9SRUxFQVNFX0ZJUk1XQVJFKGZ3X2VudHJ5KTsKLSNpZmRlZiBJTklUX01PREVfRFJWX0VOQUJMRUQKICAgICB9IGVsc2UgewogICAgICAgICAvKiBUaGUgY29uZmlnIGlzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGRyaXZlciBpdHNlbGYgKi8KICAgICAgICAgaW50IHN0YXR1czsKQEAgLTEyOTMsNyArMTI2MSw5IEBACiAgICAgICAgICAgICBibWlmbihCTUlXcml0ZU1lbW9yeShhci0+YXJIaWZEZXZpY2UsIEhPU1RfSU5URVJFU1RfSVRFTV9BRERSRVNTKGFyLCBoaV9ib2FyZF9kYXRhX2luaXRpYWxpemVkKSwgKHU4ICopJnBhcmFtLCA0KSk7CiAKICAgICAgICAgICAgIC8qIFRyYW5zZmVyIE9uZSB0aW1lIFByb2dyYW1tYWJsZSBkYXRhICovCi0gICAgICAgICAgICBBUjZLX0RBVEFfRE9XTkxPQURfQUREUkVTUyhhZGRyZXNzLCBhci0+YXJWZXJzaW9uLnRhcmdldF92ZXIpOworCSAgICBBUjZLX0FQUF9MT0FEX0FERFJFU1MoYWRkcmVzcywgYXItPmFyVmVyc2lvbi50YXJnZXRfdmVyKTsKKwkgICAgaWYgKGFyLT5hclZlcnNpb24udGFyZ2V0X3ZlciA9PSBBUjYwMDNfUkVWM19WRVJTSU9OKQorCQkgIGFkZHJlc3MgPSAweDEyMzQ7CiAgICAgICAgICAgICBzdGF0dXMgPSBhcjYwMDBfdHJhbnNmZXJfYmluX2ZpbGUoYXIsIEFSNktfT1RQX0ZJTEUsIGFkZHJlc3MsIHRydWUpOwogICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSAwKSB7CiAgICAgICAgICAgICAgICAgLyogRXhlY3V0ZSB0aGUgT1RQIGNvZGUgKi8KQEAgLTEzMDksNyArMTI3OSw5IEBACiAgICAgICAgIH0KIAogICAgICAgICAvKiBEb3dubG9hZCBUYXJnZXQgZmlybXdhcmUgKi8KLSAgICAgICAgQVI2S19EQVRBX0RPV05MT0FEX0FERFJFU1MoYWRkcmVzcywgYXItPmFyVmVyc2lvbi50YXJnZXRfdmVyKTsKKyAgICAgICAgQVI2S19BUFBfTE9BRF9BRERSRVNTKGFkZHJlc3MsIGFyLT5hclZlcnNpb24udGFyZ2V0X3Zlcik7CisgICAgICAgIGlmIChhci0+YXJWZXJzaW9uLnRhcmdldF92ZXIgPT0gQVI2MDAzX1JFVjNfVkVSU0lPTikKKyAgICAgICAgICAgICAgICBhZGRyZXNzID0gMHgxMjM0OwogICAgICAgICBpZiAoKGFyNjAwMF90cmFuc2Zlcl9iaW5fZmlsZShhciwgQVI2S19GSVJNV0FSRV9GSUxFLCBhZGRyZXNzLCB0cnVlKSkgIT0gMCkgewogICAgICAgICAgICAgcmV0dXJuIEFfRVJST1I7CiAgICAgICAgIH0KQEAgLTEzMTgsMjUgKzEyOTAsMTYgQEAKICAgICAgICAgQVI2S19BUFBfU1RBUlRfT1ZFUlJJREVfQUREUkVTUyhhZGRyZXNzLCBhci0+YXJWZXJzaW9uLnRhcmdldF92ZXIpOwogICAgICAgICBibWlmbihCTUlTZXRBcHBTdGFydChhci0+YXJIaWZEZXZpY2UsIGFkZHJlc3MpKTsKIAotICAgICAgICAvKiBBcHBseSB0aGUgcGF0Y2hlcyAqLwotICAgICAgICBBUjZLX1BBVENIX0RPV05MT0FEX0FERFJFU1MoYWRkcmVzcywgYXItPmFyVmVyc2lvbi50YXJnZXRfdmVyKTsKLSAgICAgICAgaWYgKChhcjYwMDBfdHJhbnNmZXJfYmluX2ZpbGUoYXIsIEFSNktfUEFUQ0hfRklMRSwgYWRkcmVzcywgZmFsc2UpKSAhPSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gQV9FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIHBhcmFtID0gYWRkcmVzczsKLSAgICAgICAgYm1pZm4oQk1JV3JpdGVNZW1vcnkoYXItPmFySGlmRGV2aWNlLCBIT1NUX0lOVEVSRVNUX0lURU1fQUREUkVTUyhhciwgaGlfZHNldF9saXN0X2hlYWQpLCAodTggKikmcGFyYW0sIDQpKTsKLQotICAgICAgICBpZiAoYXItPmFyVGFyZ2V0VHlwZSA9PSBUQVJHRVRfVFlQRV9BUjYwMDMpIHsKLSAgICAgICAgICAgIGlmIChhci0+YXJWZXJzaW9uLnRhcmdldF92ZXIgPT0gQVI2MDAzX1JFVjFfVkVSU0lPTikgewotICAgICAgICAgICAgICAgIC8qIFJlc2VydmUgNS41SyBvZiBSQU0gKi8KLSAgICAgICAgICAgICAgICBwYXJhbSA9IDU2MzI7Ci0gICAgICAgICAgICB9IGVsc2UgeyAvKiBBUjYwMDNfUkVWMl9WRVJTSU9OICovCi0gICAgICAgICAgICAgICAgLyogUmVzZXJ2ZSA2LjVLIG9mIFJBTSAqLwotICAgICAgICAgICAgICAgIHBhcmFtID0gNjY1NjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJtaWZuKEJNSVdyaXRlTWVtb3J5KGFyLT5hckhpZkRldmljZSwgSE9TVF9JTlRFUkVTVF9JVEVNX0FERFJFU1MoYXIsIGhpX2VuZF9SQU1fcmVzZXJ2ZV9zeiksICh1OCAqKSZwYXJhbSwgNCkpOwotICAgICAgICB9CisJaWYoYXItPmFyVGFyZ2V0VHlwZSA9PSBUQVJHRVRfVFlQRV9BUjYwMDMpIHsKKwkJQVI2S19EQVRBU0VUX1BBVENIX0FERFJFU1MoYWRkcmVzcywgYXItPmFyVmVyc2lvbi50YXJnZXRfdmVyKTsKKwkJaWYgKChhcjYwMDBfdHJhbnNmZXJfYmluX2ZpbGUoYXIsIEFSNktfUEFUQ0hfRklMRSwKKwkJCQkJICAgICAgYWRkcmVzcywgZmFsc2UpKSAhPSAwKQorCQkJcmV0dXJuIEFfRVJST1I7CisJCXBhcmFtID0gYWRkcmVzczsKKwkJYm1pZm4oQk1JV3JpdGVNZW1vcnkoYXItPmFySGlmRGV2aWNlLAorCQlIT1NUX0lOVEVSRVNUX0lURU1fQUREUkVTUyhhciwgaGlfZHNldF9saXN0X2hlYWQpLAorCQkJCQkgICAodW5zaWduZWQgY2hhciAqKSZwYXJhbSwgNCkpOworCX0KIAogICAgICAgICAvKiBSZXN0b3JlIHN5c3RlbSBzbGVlcCAqLwogICAgICAgICBhZGRyZXNzID0gUlRDX0JBU0VfQUREUkVTUyArIFNZU1RFTV9TTEVFUF9BRERSRVNTOwpAQCAtMTM5MCw4ICsxMzUzLDYgQEAKICAgICAgICAgICAgIG1zbGVlcCgxMDAwKTsKICAgICAgICAgfQogI2VuZGlmIC8qIEhUQ19SQVdfSU5URVJGQUNFICovCi0KLSNlbmRpZiAvKiBJTklUX01PREVfRFJWX0VOQUJMRUQgKi8KICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTE0NzAsNyArMTQzMSwxMSBAQAogICAgICAgICAgICAgcmV0dXJuIEFfRVJST1I7CiAgICAgICAgIH0KIAorICAgICAgICBwYXJhbSB8PSAobnVtX2RldmljZSA8PCBISV9PUFRJT05fTlVNX0RFVl9TSElGVCk7CiAgICAgICAgIHBhcmFtIHw9IChmd21vZGUgPDwgSElfT1BUSU9OX0ZXX01PREVfU0hJRlQpOworICAgICAgICBwYXJhbSB8PSAobWFjX2FkZHJfbWV0aG9kIDw8IEhJX09QVElPTl9NQUNfQUREUl9NRVRIT0RfU0hJRlQpOworICAgICAgICBwYXJhbSB8PSAoZmlybXdhcmVfYnJpZGdlIDw8IEhJX09QVElPTl9GV19CUklER0VfU0hJRlQpOworCiAKICAgICAgICAgaWYgKEJNSVdyaXRlTWVtb3J5KGFyLT5hckhpZkRldmljZSwKICAgICAgICAgICAgIEhPU1RfSU5URVJFU1RfSVRFTV9BRERSRVNTKGFyLCBoaV9vcHRpb25fZmxhZyksCkBAIC0xNTE4LDE4ICsxNDgzLDM0IEBACiAgICAgICogSXQgaXMgZGlmZmljdWx0IHRvIHBhdGNoIHRoZSBmaXJtd2FyZSBib290IGNvZGUsCiAgICAgICogYnV0IHBvc3NpYmxlIGluIHRoZW9yeS4KICAgICAgKi8KLSAgICBpZiAoYXItPmFyVGFyZ2V0VHlwZSA9PSBUQVJHRVRfVFlQRV9BUjYwMDMpIHsKLSAgICAgICAgcGFyYW0gPSBBUjYwMDNfQk9BUkRfRVhUX0RBVEFfQUREUkVTUzsgCi0gICAgICAgIGlmIChCTUlXcml0ZU1lbW9yeShhci0+YXJIaWZEZXZpY2UsCi0gICAgICAgICAgICBIT1NUX0lOVEVSRVNUX0lURU1fQUREUkVTUyhhciwgaGlfYm9hcmRfZXh0X2RhdGEpLAotICAgICAgICAgICAgKHU4ICopJnBhcmFtLAotICAgICAgICAgICAgNCkgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19FUlIsKCJCTUlXcml0ZU1lbW9yeSBmb3IgaGlfYm9hcmRfZXh0X2RhdGEgZmFpbGVkIFxuIikpOwotICAgICAgICAgICAgcmV0dXJuIEFfRVJST1I7Ci0gICAgICAgIH0KLSAgICB9CiAKKwlpZiAoYXItPmFyVGFyZ2V0VHlwZSA9PSBUQVJHRVRfVFlQRV9BUjYwMDMpIHsKKwkJdTMyIHJhbVJlc2VydmVkU3o7CisJCWlmIChhci0+YXJWZXJzaW9uLnRhcmdldF92ZXIgPT0gQVI2MDAzX1JFVjJfVkVSU0lPTikgeworCQkJcGFyYW0gPSBBUjYwMDNfUkVWMl9CT0FSRF9FWFRfREFUQV9BRERSRVNTOworCQkJcmFtUmVzZXJ2ZWRTeiA9ICBBUjYwMDNfUkVWMl9SQU1fUkVTRVJWRV9TSVpFOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisJCQlwYXJhbSA9IEFSNjAwM19SRVYzX0JPQVJEX0VYVF9EQVRBX0FERFJFU1M7CisJCQlyYW1SZXNlcnZlZFN6ID0gIEFSNjAwM19SRVYzX1JBTV9SRVNFUlZFX1NJWkU7CisJCX0KKwkJaWYgKEJNSVdyaXRlTWVtb3J5KGFyLT5hckhpZkRldmljZSwKKwkJCUhPU1RfSU5URVJFU1RfSVRFTV9BRERSRVNTKGFyLCBoaV9ib2FyZF9leHRfZGF0YSksCisJCQkJCQkgICAodTggKikmcGFyYW0sIDQpICE9IDApIHsKKwkJCQlBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX0VSUiwKKwkJCQkJCSgiQk1JV3JpdGVNZW1vcnkgZm9yICIKKwkJCQkJCSAiaGlfYm9hcmRfZXh0X2RhdGEgZmFpbGVkXG4iKSk7CisJCQkJcmV0dXJuIEFfRVJST1I7CisJCX0KKwkJaWYgKEJNSVdyaXRlTWVtb3J5KGFyLT5hckhpZkRldmljZSwKKwkJCQkgICBIT1NUX0lOVEVSRVNUX0lURU1fQUREUkVTUyhhciwKKwkJCQkgICBoaV9lbmRfUkFNX3Jlc2VydmVfc3opLAorCQkJCSAgICh1OCAqKSZyYW1SZXNlcnZlZFN6LCA0KSAhPSAwKSB7CisJCQlBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX0VSUiAsCisJCQkJCSgiQk1JV3JpdGVNZW1vcnkgZm9yICIKKwkJCQkJICJoaV9lbmRfUkFNX3Jlc2VydmVfc3ogZmFpbGVkXG4iKSk7CisJCQlyZXR1cm4gQV9FUlJPUjsKKwkJfQorCX0KIAogICAgICAgICAvKiBzaW5jZSBCTUlJbml0IGlzIGNhbGxlZCBpbiB0aGUgZHJpdmVyIGxheWVyLCB3ZSBoYXZlIHRvIHNldCB0aGUgYmxvY2sKICAgICAgICAgICogc2l6ZSBoZXJlIGZvciB0aGUgdGFyZ2V0ICovCkBAIC0xNTU1LDkgKzE1MzYsNiBAQAogewogICAgIGRldi0+bmV0ZGV2X29wcyA9ICZhcjYwMDBfbmV0ZGV2X29wczsKICAgICBkZXYtPndhdGNoZG9nX3RpbWVvID0gQVI2MDAwX1RYX1RJTUVPVVQ7Ci0gICAgZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZhdGhfaXdfaGFuZGxlcl9kZWY7Ci0KLSAgICBhdGhfaXdfaGFuZGxlcl9kZWYuZ2V0X3dpcmVsZXNzX3N0YXRzID0gYXI2MDAwX2dldF9pd3N0YXRzOyAvKkRpc3BsYXllZCB2aWEgcHJvYyBmcyAqLwogCiAgICAvKgogICAgICogV2UgbmVlZCB0aGUgT1MgdG8gcHJvdmlkZSB1cyB3aXRoIG1vcmUgaGVhZHJvb20gaW4gb3JkZXIgdG8KQEAgLTE1NzUsMTAgKzE1NTMsNiBAQAogICAgICAgICBzdHJjcHkoZGV2LT5uYW1lLCBuYW1lKTsKICAgICB9CiAKLSNpZmRlZiBTRVRfTU9EVUxFX09XTkVSCi0gICAgU0VUX01PRFVMRV9PV05FUihkZXYpOwotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfQ0hFQ0tTVU1fT0ZGTE9BRAogICAgIGlmKGNzdW1PZmZsb2FkKXsKICAgICAgICAgZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU07IC8qYWR2ZXJ0aXNlIGtlcm5lbCBjYXBhYmlsaXR5IHRvIGRvIFRDUC9VRFAgQ1NVTSBvZmZsb2FkIGZvciBJUFY0Ki8KQEAgLTE1ODgsNiArMTU2Miw1MiBAQAogICAgIHJldHVybjsKIH0KIAorc3RhdGljIGludCBfX2F0aDZrbF9pbml0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWludCByOworCisJcnRubF9sb2NrKCk7CisJciA9IGFyNjAwMF9pbml0KGRldik7CisJcnRubF91bmxvY2soKTsKKworCWlmIChyKSB7CisJCUFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfRVJSLCgiYXI2MDAwX2F2YWlsOiBhcjYwMDBfaW5pdFxuIikpOworCQlyZXR1cm4gcjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIEhUQ19SQVdfSU5URVJGQUNFCitzdGF0aWMgaW50IGF0aDZrbF9pbml0X25ldGRldl93bWkoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpZiAoIWVwcGluZ3Rlc3QgJiYgYnlwYXNzd21pKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBfX2F0aDZrbF9pbml0X25ldGRldihkZXYpOworfQorI2Vsc2UKK3N0YXRpYyBpbnQgYXRoNmtsX2luaXRfbmV0ZGV2X3dtaShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiBfX2F0aDZrbF9pbml0X25ldGRldihkZXYpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgYXRoNmtsX2luaXRfbmV0ZGV2KHN0cnVjdCBhcjZfc29mdGMgKmFyKQoreworCWludCByOworCisgICAgICAgIHIgPSBhcjYwMDBfc3lzZnNfYm1pX2dldF9jb25maWcoYXIsIHdsYW5pbml0bW9kZSk7CisgICAgICAgIGlmIChyKSB7CisJCUFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfRVJSLAorCQkJCSgiYXI2MDAwX2F2YWlsOiAiCisJCQkJICJhcjYwMDBfc3lzZnNfYm1pX2dldF9jb25maWcgZmFpbGVkXG4iKSk7CisJCXJldHVybiByOworICAgICAgICB9CisKKwlyZXR1cm4gYXRoNmtsX2luaXRfbmV0ZGV2X3dtaShhci0+YXJOZXREZXYpOworfQorCiAvKgogICogSFRDIEV2ZW50IGhhbmRsZXJzCiAgKi8KQEAgLTE2MDAsMTAgKzE2MjAsOCBAQAogICAgIHN0cnVjdCBhcjZfc29mdGMgKmFyOwogICAgIGludCBkZXZpY2VfaW5kZXggPSAwOwogICAgIHN0cnVjdCBodGNfaW5pdF9pbmZvICBodGNJbmZvOwotI2lmZGVmIEFUSDZLX0NPTkZJR19DRkc4MDIxMQogICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7Ci0jZW5kaWYgLyogQVRINktfQ09ORklHX0NGRzgwMjExICovCi0gICAgaW50IGluaXRfc3RhdHVzID0gMDsKKyAgICBpbnQgciA9IDA7CiAgICAgc3RydWN0IGhpZl9kZXZpY2Vfb3NfZGV2aWNlX2luZm8gb3NEZXZJbmZvOwogCiAgICAgbWVtc2V0KCZvc0RldkluZm8sIDAsIHNpemVvZihvc0RldkluZm8pKTsKQEAgLTE2MzAsMjIgKzE2NDgsMTIgQEAKICAgICAvKiB3ZSB1c2UgYW5vdGhlciBsb2NhbCAiaSIgdmFyaWFibGUgYmVsb3cuICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgZGV2aWNlX2luZGV4ID0gaTsKIAotI2lmZGVmIEFUSDZLX0NPTkZJR19DRkc4MDIxMQogICAgIHdkZXYgPSBhcjZrX2NmZzgwMjExX2luaXQob3NEZXZJbmZvLnBPU0RldmljZSk7CiAgICAgaWYgKElTX0VSUih3ZGV2KSkgewogICAgICAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX0VSUiwgKCIlczogYXI2a19jZmc4MDIxMV9pbml0IGZhaWxlZFxuIiwgX19mdW5jX18pKTsKICAgICAgICAgcmV0dXJuIEFfRVJST1I7CiAgICAgfQogICAgIGFyX25ldGlmID0gd2Rldl9wcml2KHdkZXYpOwotI2Vsc2UKLSAgICBkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGFyNl9zb2Z0YykpOwotICAgIGlmIChkZXYgPT0gTlVMTCkgewotICAgICAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX0VSUiwoImFyNjAwMF9hdmFpbGFibGU6IGNhbid0IGFsbG9jIGV0aGVyZGV2XG4iKSk7Ci0gICAgICAgIHJldHVybiBBX0VSUk9SOwotICAgIH0KLSAgICBldGhlcl9zZXR1cChkZXYpOwotICAgIGFyX25ldGlmID0gYXI2a19wcml2KGRldik7Ci0jZW5kaWYgLyogQVRINktfQ09ORklHX0NGRzgwMjExICovCiAKICAgICBpZiAoYXJfbmV0aWYgPT0gTlVMTCkgewogICAgICAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX0VSUiwgKCIlczogQ2FuJ3QgYWxsb2NhdGUgYXI2ayBwcml2IG1lbW9yeVxuIiwgX19mdW5jX18pKTsKQEAgLTE2NTUsNyArMTY2Myw2IEBACiAgICAgQV9NRU1aRVJPKGFyX25ldGlmLCBzaXplb2Yoc3RydWN0IGFyNl9zb2Z0YykpOwogICAgIGFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcl9uZXRpZjsKIAotI2lmZGVmIEFUSDZLX0NPTkZJR19DRkc4MDIxMQogICAgIGFyLT53ZGV2ID0gd2RldjsKICAgICB3ZGV2LT5pZnR5cGUgPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOwogCkBAIC0xNjcxLDE1ICsxNjc4LDEwIEBACiAgICAgd2Rldi0+bmV0ZGV2ID0gZGV2OwogICAgIGFyLT5hck5ldHdvcmtUeXBlID0gSU5GUkFfTkVUV09SSzsKICAgICBhci0+c21lU3RhdGUgPSBTTUVfRElTQ09OTkVDVEVEOwotI2VuZGlmIC8qIEFUSDZLX0NPTkZJR19DRkc4MDIxMSAqLworICAgIGFyLT5hckF1dG9BdXRoU3RhZ2UgPSBBVVRIX0lETEU7CiAKICAgICBpbml0X25ldGRldihkZXYsIGlmbmFtZSk7CiAKLSNpZmRlZiBTRVRfTkVUREVWX0RFVgotICAgIGlmIChhcl9uZXRpZikgeyAKLSAgICAgICAgU0VUX05FVERFVl9ERVYoZGV2LCBvc0RldkluZm8ucE9TRGV2aWNlKTsKLSAgICB9Ci0jZW5kaWYgCiAKICAgICBhci0+YXJOZXREZXYgICAgICAgICAgICAgPSBkZXY7CiAgICAgYXItPmFySGlmRGV2aWNlICAgICAgICAgID0gaGlmX2hhbmRsZTsKQEAgLTE3MTksMzUgKzE3MjEsMjMgQEAKIAogICAgIEJNSUluaXQoKTsKIAotICAgIGlmIChibWllbmFibGUpIHsKLSAgICAgICAgYXI2MDAwX3N5c2ZzX2JtaV9pbml0KGFyKTsKLSAgICB9CisgICAgYXI2MDAwX3N5c2ZzX2JtaV9pbml0KGFyKTsKIAogICAgIHsKICAgICAgICAgc3RydWN0IGJtaV90YXJnZXRfaW5mbyB0YXJnX2luZm87CiAKLSAgICAgICAgaWYgKEJNSUdldFRhcmdldEluZm8oYXItPmFySGlmRGV2aWNlLCAmdGFyZ19pbmZvKSAhPSAwKSB7Ci0gICAgICAgICAgICBpbml0X3N0YXR1cyA9IEFfRVJST1I7CisgICAgICAgIHIgPSBCTUlHZXRUYXJnZXRJbmZvKGFyLT5hckhpZkRldmljZSwgJnRhcmdfaW5mbyk7CisgICAgICAgIGlmIChyKQogICAgICAgICAgICAgZ290byBhdmFpbF9ldl9mYWlsZWQ7Ci0gICAgICAgIH0KIAogICAgICAgICBhci0+YXJWZXJzaW9uLnRhcmdldF92ZXIgPSB0YXJnX2luZm8udGFyZ2V0X3ZlcjsKICAgICAgICAgYXItPmFyVGFyZ2V0VHlwZSA9IHRhcmdfaW5mby50YXJnZXRfdHlwZTsKLQotICAgICAgICAgICAgLyogZG8gYW55IHRhcmdldC1zcGVjaWZpYyBwcmVwYXJhdGlvbiB0aGF0IGNhbiBiZSBkb25lIHRocm91Z2ggQk1JICovCi0gICAgICAgIGlmIChhcjYwMDBfcHJlcGFyZV90YXJnZXQoYXItPmFySGlmRGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdfaW5mby50YXJnZXRfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnX2luZm8udGFyZ2V0X3ZlcikgIT0gMCkgewotICAgICAgICAgICAgaW5pdF9zdGF0dXMgPSBBX0VSUk9SOwotICAgICAgICAgICAgZ290byBhdmFpbF9ldl9mYWlsZWQ7Ci0gICAgICAgIH0KLQorCXdkZXYtPndpcGh5LT5od192ZXJzaW9uID0gdGFyZ19pbmZvLnRhcmdldF92ZXI7CiAgICAgfQogCi0gICAgaWYgKGFyNjAwMF9jb25maWd1cmVfdGFyZ2V0KGFyKSAhPSAwKSB7Ci0gICAgICAgICAgICBpbml0X3N0YXR1cyA9IEFfRVJST1I7CisgICAgciA9IGFyNjAwMF9jb25maWd1cmVfdGFyZ2V0KGFyKTsKKyAgICBpZiAocikKICAgICAgICAgICAgIGdvdG8gYXZhaWxfZXZfZmFpbGVkOwotICAgIH0KIAogICAgIEFfTUVNWkVSTygmaHRjSW5mbyxzaXplb2YoaHRjSW5mbykpOwogICAgIGh0Y0luZm8ucENvbnRleHQgPSBhcjsKQEAgLTE3NTUsOCArMTc0NSw4IEBACiAKICAgICBhci0+YXJIdGNUYXJnZXQgPSBIVENDcmVhdGUoYXItPmFySGlmRGV2aWNlLCZodGNJbmZvKTsKIAotICAgIGlmIChhci0+YXJIdGNUYXJnZXQgPT0gTlVMTCkgewotICAgICAgICBpbml0X3N0YXR1cyA9IEFfRVJST1I7CisgICAgaWYgKCFhci0+YXJIdGNUYXJnZXQpIHsKKyAgICAgICAgciA9IC1FTk9NRU07CiAgICAgICAgIGdvdG8gYXZhaWxfZXZfZmFpbGVkOwogICAgIH0KIApAQCAtMTc2NywyMiArMTc1NywxOSBAQAogI2VuZGlmCiAKIAotI2lmZGVmIENPTkZJR19DSEVDS1NVTV9PRkZMT0FECiAgICAgaWYoY3N1bU9mZmxvYWQpewogICAgICAgICAvKmlmIGV4dGVybmFsIGZyYW1lIHdvcmsgaXMgYWxzbyBuZWVkZWQsIGNoYW5nZSBhbmQgdXNlIGFuIGV4dGVuZGVkIHJ4TWV0YVZlcmlvbiovCiAgICAgICAgIGFyLT5yeE1ldGFWZXJzaW9uPVdNSV9NRVRBX1ZFUlNJT05fMjsKICAgICB9Ci0jZW5kaWYKIAotI2lmZGVmIEFUSF9BUjZLXzExTl9TVVBQT1JUCi0gICAgaWYoKGFyLT5hZ2dyX2NudHh0ID0gYWdncl9pbml0KGFyNjAwMF9hbGxvY19uZXRidWZzKSkgPT0gTlVMTCkgeworICAgIGFyLT5hZ2dyX2NudHh0ID0gYWdncl9pbml0KGFyNjAwMF9hbGxvY19uZXRidWZzKTsKKyAgICBpZiAoIWFyLT5hZ2dyX2NudHh0KSB7CiAgICAgICAgICAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX0VSUiwoIiVzKCkgRmFpbGVkIHRvIGluaXRpYWxpemUgYWdnci5cbiIsIF9fZnVuY19fKSk7Ci0gICAgICAgICAgICBpbml0X3N0YXR1cyA9IEFfRVJST1I7CisgICAgICAgICAgICByID0gLUVOT01FTTsKICAgICAgICAgICAgIGdvdG8gYXZhaWxfZXZfZmFpbGVkOwogICAgIH0KIAogICAgIGFnZ3JfcmVnaXN0ZXJfcnhfZGlzcGF0Y2hlcihhci0+YWdncl9jbnR4dCwgKHZvaWQgKilkZXYsIGFyNjAwMF9kZWxpdmVyX2ZyYW1lc190b19ud19zdGFjayk7Ci0jZW5kaWYKIAogICAgIEhJRkNsYWltRGV2aWNlKGFyLT5hckhpZkRldmljZSwgYXIpOwogCkBAIC0xNzkxLDQ2ICsxNzc4LDIwIEBACiAgICAgLyogd2hlbiB0aGUgbW9kdWxlIGlzIHVubG9hZGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIGFyNjAwMF9kZXZpY2VzW2RldmljZV9pbmRleF0gPSBkZXY7CiAKLSAgICAvKiBEb24ndCBpbnN0YWxsIHRoZSBpbml0IGZ1bmN0aW9uIGlmIEJNSSBpcyByZXF1ZXN0ZWQgKi8KLSAgICBpZiAoIWJtaWVuYWJsZSkgewotICAgICAgICBhcjYwMDBfbmV0ZGV2X29wcy5uZG9faW5pdCA9IGFyNjAwMF9pbml0OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfSU5GTywgKCJCTUkgZW5hYmxlZDogJWRcbiIsIHdsYW5pbml0bW9kZSkpOwotICAgICAgICBpZiAoKHdsYW5pbml0bW9kZSA9PSBXTEFOX0lOSVRfTU9ERV9VREVWKSB8fAotICAgICAgICAgICAgKHdsYW5pbml0bW9kZSA9PSBXTEFOX0lOSVRfTU9ERV9EUlYpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgc3RhdHVzID0gMDsKLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBpZiAoKHN0YXR1cyA9IGFyNjAwMF9zeXNmc19ibWlfZ2V0X2NvbmZpZyhhciwgd2xhbmluaXRtb2RlKSkgIT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfRVJSLCgiYXI2MDAwX2F2YWlsOiBhcjYwMDBfc3lzZnNfYm1pX2dldF9jb25maWcgZmFpbGVkXG4iKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSNpZmRlZiBIVENfUkFXX0lOVEVSRkFDRQotICAgICAgICAgICAgICAgIGlmICghZXBwaW5ndGVzdCAmJiBieXBhc3N3bWkpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8qIERvbid0IGNhbGwgYXI2MDAwX2luaXQgZm9yIEFSVCAqLwotICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAKLSAgICAgICAgICAgICAgICBydG5sX2xvY2soKTsKLSAgICAgICAgICAgICAgICBzdGF0dXMgPSAoYXI2MDAwX2luaXQoZGV2KT09MCkgPyAwIDogQV9FUlJPUjsKLSAgICAgICAgICAgICAgICBydG5sX3VubG9jaygpOwotICAgICAgICAgICAgICAgIGlmIChzdGF0dXMpIHsKLSAgICAgICAgICAgICAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19FUlIsKCJhcjYwMDBfYXZhaWw6IGFyNjAwMF9pbml0XG4iKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSB3aGlsZSAoZmFsc2UpOwotCi0gICAgICAgICAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICAgICAgICAgICAgaW5pdF9zdGF0dXMgPSBzdGF0dXM7Ci0gICAgICAgICAgICAgICAgZ290byBhdmFpbF9ldl9mYWlsZWQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX0lORk8sICgiQk1JIGVuYWJsZWQ6ICVkXG4iLCB3bGFuaW5pdG1vZGUpKTsKKyAgICBpZiAoKHdsYW5pbml0bW9kZSA9PSBXTEFOX0lOSVRfTU9ERV9VREVWKSB8fAorICAgICAgICAod2xhbmluaXRtb2RlID09IFdMQU5fSU5JVF9NT0RFX0RSVikpIHsKKwlyID0gYXRoNmtsX2luaXRfbmV0ZGV2KGFyKTsKKwlpZiAocikKKyAgICAgICAgICAgIGdvdG8gYXZhaWxfZXZfZmFpbGVkOwogICAgIH0KIAogICAgIC8qIFRoaXMgcnVucyB0aGUgaW5pdCBmdW5jdGlvbiBpZiByZWdpc3RlcmVkICovCi0gICAgaWYgKHJlZ2lzdGVyX25ldGRldihkZXYpKSB7CisgICAgciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOworICAgIGlmIChyKSB7CiAgICAgICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfRVJSLCgiYXI2MDAwX2F2YWlsOiByZWdpc3Rlcl9uZXRkZXYgZmFpbGVkXG4iKSk7CiAgICAgICAgIGFyNjAwMF9kZXN0cm95KGRldiwgMCk7Ci0gICAgICAgIHJldHVybiBBX0VSUk9SOworICAgICAgICByZXR1cm4gcjsKICAgICB9CiAKIAlpc19uZXRkZXZfcmVnaXN0ZXJlZCA9IDE7CkBAIC0xODQzLDEzICsxODA0LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWFyKSk7CiAKIGF2YWlsX2V2X2ZhaWxlZCA6Ci0gICAgaWYgKGluaXRfc3RhdHVzKSB7Ci0gICAgICAgIGlmIChibWllbmFibGUpIHsgCi0gICAgICAgICAgICBhcjYwMDBfc3lzZnNfYm1pX2RlaW5pdChhcik7ICAKLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAocikKKyAgICAgICAgYXI2MDAwX3N5c2ZzX2JtaV9kZWluaXQoYXIpOyAgCiAKLSAgICByZXR1cm4gaW5pdF9zdGF0dXM7CisgICAgcmV0dXJuIHI7CiB9CiAKIHN0YXRpYyB2b2lkIGFyNjAwMF90YXJnZXRfZmFpbHVyZSh2b2lkICpJbnN0YW5jZSwgaW50IFN0YXR1cykKQEAgLTE4ODAsOSArMTgzOCw2IEBACiAgICAgICAgICAgICBzaXAgPSB0cnVlOwogICAgICAgICAgICAgZXJyRXZlbnQuZXJyb3JWYWwgPSBXTUlfVEFSR0VUX0NPTV9FUlIgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXTUlfVEFSR0VUX0ZBVEFMX0VSUjsKLSAgICAgICAgICAgIGFyNjAwMF9zZW5kX2V2ZW50X3RvX2FwcChhciwgV01JX0VSUk9SX1JFUE9SVF9FVkVOVElELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1OCAqKSZlcnJFdmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoV01JX1RBUkdFVF9FUlJPUl9SRVBPUlRfRVZFTlQpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE5ODAsMTAgKzE5MzUsOCBAQAogICAgICAgICAgICAgICAgICAgICBhcjYwMDBfZGlzY29ubmVjdF9ldmVudChhciwgRElTQ09OTkVDVF9DTUQsIGFyLT5hckJzc2lkLCAwLCBOVUxMLCAwKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0jaWZkZWYgVVNFUl9LRVlTCiAgICAgICAgICAgICBhci0+dXNlcl9zYXZlZGtleXNfc3RhdCA9IFVTRVJfU0FWRURLRVlTX1NUQVRfSU5JVDsKICAgICAgICAgICAgIGFyLT51c2VyX2tleV9jdHJsICAgICAgPSAwOwotI2VuZGlmCiAgICAgICAgIH0KIAogICAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19JTkZPLCgiJXMoKTogV01JIHN0b3BwZWRcbiIsIF9fZnVuY19fKSk7CkBAIC0yMDI1LDE1ICsxOTc4LDYgQEAKICAgICAgICAgaWYgKHNldHVwaGNpKQogICAgICAgICAJYXI2MDAwX2NsZWFudXBfaGNpKGFyKTsKICNlbmRpZgotI2lmZGVmIEVYUE9SVF9IQ0lfUEFMX0lOVEVSRkFDRQotICAgICAgICBpZiAoc2V0dXBoY2lwYWwgJiYgKE5VTEwgIT0gYXI2a0hjaVBhbENhbGxiYWNrc19nLmNsZWFudXBUcmFuc3BvcnQpKSB7Ci0gICAgICAgICAgIGFyNmtIY2lQYWxDYWxsYmFja3NfZy5jbGVhbnVwVHJhbnNwb3J0KGFyKTsKLSAgICAgICAgfQotI2Vsc2UKLQkJCQkvKiBjbGVhbnVwIGhjaSBwYWwgZHJpdmVyIGRhdGEgc3RydWN0dXJlcyAqLwotICAgICAgICBpZihzZXR1cGhjaXBhbCkKLSAgICAgICAgICBhcjZrX2NsZWFudXBfaGNpX3BhbChhcik7Ci0jZW5kaWYKICAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19JTkZPLCgiIFNodXR0aW5nIGRvd24gSFRDIC4uLi4gXG4iKSk7CiAgICAgICAgIC8qIHN0b3AgSFRDICovCiAgICAgICAgIEhUQ1N0b3AoYXItPmFySHRjVGFyZ2V0KTsKQEAgLTIwOTQsOSArMjAzOCw2IEBACiAgICAgaWYgKGFyLT5hcldsYW5Qb3dlclN0YXRlICE9IFdMQU5fUE9XRVJfU1RBVEVfQ1VUX1BXUikgewogICAgICAgICAvKiBvbmx5IHN0b3AgZW5kcG9pbnQgaWYgd2UgYXJlIG5vdCBzdG9wIGl0IGluIHN1c3BlbmRfZXYgKi8KICAgICAgICAgYXI2MDAwX3N0b3BfZW5kcG9pbnQoZGV2LCBmYWxzZSwgdHJ1ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLyogY2xlYXIgdXAgdGhlIHBsYXRmb3JtIHBvd2VyIHN0YXRlIGJlZm9yZSBybW1vZCAqLwotICAgICAgICBwbGF0X3NldHVwX3Bvd2VyKDEsMCk7CiAgICAgfQogCiAgICAgYXItPmFyV2xhblN0YXRlID0gV0xBTl9ESVNBQkxFRDsKQEAgLTIxMTAsOSArMjA1MSw3IEBACiAgICAgICAgIEhJRlJlbGVhc2VEZXZpY2UoYXItPmFySGlmRGV2aWNlKTsKICAgICAgICAgSElGU2h1dERvd25EZXZpY2UoYXItPmFySGlmRGV2aWNlKTsKICAgICB9Ci0jaWZkZWYgQVRIX0FSNktfMTFOX1NVUFBPUlQKICAgICBhZ2dyX21vZHVsZV9kZXN0cm95KGFyLT5hZ2dyX2NudHh0KTsKLSNlbmRpZgogCiAgICAgICAgLyogRG9uZSB3aXRoIGNvb2tpZXMgKi8KICAgICBhcjYwMDBfY29va2llX2NsZWFudXAoYXIpOwpAQCAtMjEyMCw5ICsyMDU5LDcgQEAKICAgICAgICAgLyogY2xlYW51cCBhbnkgYWxsb2NhdGVkIEFNU0RVIGJ1ZmZlcnMgKi8KICAgICBhcjYwMDBfY2xlYW51cF9hbXNkdV9yeGJ1ZnMoYXIpOwogCi0gICAgaWYgKGJtaWVuYWJsZSkgewotICAgICAgICBhcjYwMDBfc3lzZnNfYm1pX2RlaW5pdChhcik7Ci0gICAgfQorICAgIGFyNjAwMF9zeXNmc19ibWlfZGVpbml0KGFyKTsKIAogICAgIC8qIENsZWFudXAgQk1JICovCiAgICAgQk1JQ2xlYW51cCgpOwpAQCAtMjEzNCw3ICsyMDcxLDcgQEAKIAogI2lmZGVmIEhUQ19SQVdfSU5URVJGQUNFCiAgICAgaWYgKGFyLT5hclJhd0h0YykgewotICAgICAgICBBX0ZSRUUoYXItPmFyUmF3SHRjKTsKKyAgICAgICAga2ZyZWUoYXItPmFyUmF3SHRjKTsKICAgICAgICAgYXItPmFyUmF3SHRjID0gTlVMTDsKICAgICB9CiAjZW5kaWYgCkBAIC0yMTQ1LDkgKzIwODIsNyBAQAogICAgIH0KICAgICBmcmVlX25ldGRldihkZXYpOwogCi0jaWZkZWYgQVRINktfQ09ORklHX0NGRzgwMjExCiAgICAgYXI2a19jZmc4MDIxMV9kZWluaXQoYXIpOwotI2VuZGlmIC8qIEFUSDZLX0NPTkZJR19DRkc4MDIxMSAqLwogCiAjaWZkZWYgQ09ORklHX0FQX1ZJUlRVTF9BREFQVEVSX1NVUFBPUlQKICAgICBhcjYwMDBfcmVtb3ZlX2FwX2ludGVyZmFjZSgpOwpAQCAtMjE4Nyw5ICsyMTIyLDYgQEAKICAgICAgICAgYXItPmFySEJDaGFsbGVuZ2VSZXNwLnNlcU51bSA9IDA7CiAgICAgICAgIGVyckV2ZW50LmVycm9yVmFsID0gV01JX1RBUkdFVF9DT01fRVJSIHwgV01JX1RBUkdFVF9GQVRBTF9FUlI7CiAgICAgICAgIEFSNjAwMF9TUElOX1VOTE9DSygmYXItPmFyTG9jaywgMCk7Ci0gICAgICAgIGFyNjAwMF9zZW5kX2V2ZW50X3RvX2FwcChhciwgV01JX0VSUk9SX1JFUE9SVF9FVkVOVElELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHU4ICopJmVyckV2ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKFdNSV9UQVJHRVRfRVJST1JfUkVQT1JUX0VWRU5UKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTIyOTUsMTEgKzIyMjcsOSBAQAogCiAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmFyLT5hckxvY2ssIGZsYWdzKTsKIAotI2lmZGVmIEFUSDZLX0NPTkZJR19DRkc4MDIxMQogICAgIGlmKGFyLT5hcldsYW5TdGF0ZSA9PSBXTEFOX0RJU0FCTEVEKSB7CiAgICAgICAgIGFyLT5hcldsYW5TdGF0ZSA9IFdMQU5fRU5BQkxFRDsKICAgICB9Ci0jZW5kaWYgLyogQVRINktfQ09ORklHX0NGRzgwMjExICovCiAKICAgICBpZiggYXItPmFyQ29ubmVjdGVkIHx8IGJ5cGFzc3dtaSkgewogICAgICAgICBuZXRpZl9jYXJyaWVyX29uKGRldik7CkBAIC0yMzE2LDEyICsyMjQ2LDkgQEAKIHN0YXRpYyBpbnQKIGFyNjAwMF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotI2lmZGVmIEFUSDZLX0NPTkZJR19DRkc4MDIxMQogICAgIHN0cnVjdCBhcjZfc29mdGMgICAgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLSNlbmRpZiAvKiBBVEg2S19DT05GSUdfQ0ZHODAyMTEgKi8KICAgICBuZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKLSNpZmRlZiBBVEg2S19DT05GSUdfQ0ZHODAyMTEKICAgICBhcjYwMDBfZGlzY29ubmVjdChhcik7CiAKICAgICBpZihhci0+YXJXbWlSZWFkeSA9PSB0cnVlKSB7CkBAIC0yMzMyLDcgKzIyNTksNiBAQAogICAgICAgICBhci0+YXJXbGFuU3RhdGUgPSBXTEFOX0RJU0FCTEVEOwogICAgIH0KIAlhcjZrX2NmZzgwMjExX3NjYW5Db21wbGV0ZV9ldmVudChhciwgQV9FQ0FOQ0VMRUQpOwotI2VuZGlmIC8qIEFUSDZLX0NPTkZJR19DRkc4MDIxMSAqLwogCiAgICAgcmV0dXJuIDA7CiB9CkBAIC0yNDIyLDE2ICsyMzQ4LDUyIEBACiAgICAgcmV0dXJuKGFyRW5kcG9pbnQyQWMoYXIsIGVwICkpOwogfQogCisjaWYgZGVmaW5lZChDT05GSUdfQVRINktMX0VOQUJMRV9DT0VYSVNURU5DRSkKK3N0YXRpYyBpbnQgYXRoNmtsX2NvbmZpZ19idGNvZXhfcGFyYW1zKHN0cnVjdCBhcjZfc29mdGMgKmFyKQoreworCWludCByOworCVdNSV9TRVRfQlRDT0VYX0NPTE9DQVRFRF9CVF9ERVZfQ01EIHNiY2JfY21kOworCVdNSV9TRVRfQlRDT0VYX0ZFX0FOVF9DTUQgc2JmYV9jbWQ7CisKKwkvKiBDb25maWd1cmUgdGhlIHR5cGUgb2YgQlQgY29sbG9jYXRlZCB3aXRoIFdMQU4gKi8KKwltZW1zZXQoJnNiY2JfY21kLCAwLCBzaXplb2YoV01JX1NFVF9CVENPRVhfQ09MT0NBVEVEX0JUX0RFVl9DTUQpKTsKKwlzYmNiX2NtZC5idGNvZXhDb0xvY2F0ZWRCVGRldiA9IEFUSDZLTF9CVF9ERVY7CisKKwlyID0gd21pX3NldF9idGNvZXhfY29sb2NhdGVkX2J0X2Rldl9jbWQoYXItPmFyV21pLCAmc2JjYl9jbWQpOworCisJaWYgKHIpIHsKKwkJQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19FUlIsCisJCQkJKCJVbmFibGUgdG8gc2V0IGNvbGxvY2F0ZWQgQlQgdHlwZVxuIikpOworCQlyZXR1cm4gcjsKKwl9CisKKwkvKiBDb25maWd1cmUgdGhlIHR5cGUgb2YgQlQgY29sbG9jYXRlZCB3aXRoIFdMQU4gKi8KKwltZW1zZXQoJnNiZmFfY21kLCAwLCBzaXplb2YoV01JX1NFVF9CVENPRVhfRkVfQU5UX0NNRCkpOworCisJc2JmYV9jbWQuYnRjb2V4RmVBbnRUeXBlID0gQVRINktMX0JUX0FOVEVOTkE7CisKKwlyID0gd21pX3NldF9idGNvZXhfZmVfYW50X2NtZChhci0+YXJXbWksICZzYmZhX2NtZCk7CisJaWYgKHIpIHsKKwkJQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19FUlIsCisJCQkJKCJVbmFibGUgdG8gc2V0IGZvcm50IGVuZCBhbnRlbm5hIGNvbmZpZ3VyYXRpb25cbiIpKTsKKwkJcmV0dXJuIHI7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZWxzZQorc3RhdGljIGludCBhdGg2a2xfY29uZmlnX2J0Y29leF9wYXJhbXMoc3RydWN0IGFyNl9zb2Z0YyAqYXIpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX0FUSDZLTF9FTkFCTEVfQ09FWElTVEVOQ0UgKi8KKwogLyoKICAqIFRoaXMgZnVuY3Rpb24gYXBwbGllcyBXTEFOIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZGVmaW5lZCBpbiB3bGFuX2NvbmZpZy5oCiAgKi8KIGludCBhcjYwMDBfdGFyZ2V0X2NvbmZpZ193bGFuX3BhcmFtcyhzdHJ1Y3QgYXI2X3NvZnRjICphcikKIHsKICAgICBpbnQgc3RhdHVzID0gMDsKLSNpZiBkZWZpbmVkKElOSVRfTU9ERV9EUlZfRU5BQkxFRCkgJiYgZGVmaW5lZChFTkFCTEVfQ09FWElTVEVOQ0UpCi0gICAgV01JX1NFVF9CVENPRVhfQ09MT0NBVEVEX0JUX0RFVl9DTUQgc2JjYl9jbWQ7Ci0gICAgV01JX1NFVF9CVENPRVhfRkVfQU5UX0NNRCBzYmZhX2NtZDsKLSNlbmRpZiAvKiBJTklUX01PREVfRFJWX0VOQUJMRUQgJiYgRU5BQkxFX0NPRVhJU1RFTkNFICovCiAKICNpZmRlZiBDT05GSUdfSE9TVF9UQ01EX1NVUFBPUlQKICAgICBpZiAoYXItPmFyVGFyZ2V0TW9kZSAhPSBBUjYwMDBfV0xBTl9NT0RFKSB7CkBAIC0yNDQ5LDM5ICsyNDExLDkgQEAKICAgICAgICAgc3RhdHVzID0gQV9FUlJPUjsKICAgICB9CiAKLSNpZiBkZWZpbmVkKElOSVRfTU9ERV9EUlZfRU5BQkxFRCkgJiYgZGVmaW5lZChFTkFCTEVfQ09FWElTVEVOQ0UpCi0gICAgLyogQ29uZmlndXJlIHRoZSB0eXBlIG9mIEJUIGNvbGxvY2F0ZWQgd2l0aCBXTEFOICovCi0gICAgbWVtc2V0KCZzYmNiX2NtZCwgMCwgc2l6ZW9mKFdNSV9TRVRfQlRDT0VYX0NPTE9DQVRFRF9CVF9ERVZfQ01EKSk7Ci0jaWZkZWYgQ09ORklHX0FSNjAweF9CVF9RQ09NCi0gICAgc2JjYl9jbWQuYnRjb2V4Q29Mb2NhdGVkQlRkZXYgPSAxOwotI2VsaWYgZGVmaW5lZChDT05GSUdfQVI2MDB4X0JUX0NTUikKLSAgICBzYmNiX2NtZC5idGNvZXhDb0xvY2F0ZWRCVGRldiA9IDI7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19BUjYwMHhfQlRfQVIzMDAxKQotICAgIHNiY2JfY21kLmJ0Y29leENvTG9jYXRlZEJUZGV2ID0gMzsKLSNlbHNlCi0jZXJyb3IgVW5zdXBwb3J0ZWQgQmx1ZXRvb3RoIFR5cGUKLSNlbmRpZiAvKiBDb2xsb2NhdGVkIEJsdWV0b290aCBUeXBlICovCi0KLSAgICBpZiAoKHdtaV9zZXRfYnRjb2V4X2NvbG9jYXRlZF9idF9kZXZfY21kKGFyLT5hcldtaSwgJnNiY2JfY21kKSkgIT0gMCkgewotICAgICAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX0VSUiwoIlVuYWJsZSB0byBzZXQgY29sbG9jYXRlZCBCVCB0eXBlXG4iKSk7Ci0gICAgICAgIHN0YXR1cyA9IEFfRVJST1I7Ci0gICAgfQotCi0gICAgLyogQ29uZmlndXJlIHRoZSB0eXBlIG9mIEJUIGNvbGxvY2F0ZWQgd2l0aCBXTEFOICovCi0gICAgbWVtc2V0KCZzYmZhX2NtZCwgMCwgc2l6ZW9mKFdNSV9TRVRfQlRDT0VYX0ZFX0FOVF9DTUQpKTsKLSNpZmRlZiBDT05GSUdfQVI2MDB4X0RVQUxfQU5URU5OQQotICAgIHNiZmFfY21kLmJ0Y29leEZlQW50VHlwZSA9IDI7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19BUjYwMHhfU0lOR0xFX0FOVEVOTkEpCi0gICAgc2JmYV9jbWQuYnRjb2V4RmVBbnRUeXBlID0gMTsKLSNlbHNlCi0jZXJyb3IgVW5zdXBwb3J0ZWQgRnJvbnQtRW5kIEFudGVubmEgQ29uZmlndXJhdGlvbgotI2VuZGlmIC8qIEFSNjAweCBGcm9udC1FbmQgQW50ZW5uYSBDb25maWd1cmF0aW9uICovCi0KLSAgICBpZiAoKHdtaV9zZXRfYnRjb2V4X2ZlX2FudF9jbWQoYXItPmFyV21pLCAmc2JmYV9jbWQpKSAhPSAwKSB7Ci0gICAgICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfRVJSLCgiVW5hYmxlIHRvIHNldCBmb3JudCBlbmQgYW50ZW5uYSBjb25maWd1cmF0aW9uXG4iKSk7Ci0gICAgICAgIHN0YXR1cyA9IEFfRVJST1I7Ci0gICAgfQotI2VuZGlmIC8qIElOSVRfTU9ERV9EUlZfRU5BQkxFRCAmJiBFTkFCTEVfQ09FWElTVEVOQ0UgKi8KKyAgICBzdGF0dXMgPSBhdGg2a2xfY29uZmlnX2J0Y29leF9wYXJhbXMoYXIpOworICAgIGlmIChzdGF0dXMpCisJcmV0dXJuIHN0YXR1czsKIAogI2lmIFdMQU5fQ09ORklHX0lHTk9SRV9QT1dFUl9TQVZFX0ZBSUxfRVZFTlRfRFVSSU5HX1NDQU4KICAgICBpZiAoKHdtaV9wbXBhcmFtc19jbWQoYXItPmFyV21pLCAwLCAxLCAwLCAwLCAxLCBJR05PUkVfUE9XRVJfU0FWRV9GQUlMX0VWRU5UX0RVUklOR19TQ0FOKSkgIT0gMCkgewpAQCAtMjczNiwxMyArMjY2OCw2IEBACiAgICAgICAgICAgICBzdGF0dXMgPSBhcjYwMDBfc2V0dXBfaGNpKGFyKTsKICAgICAgICAgfQogI2VuZGlmCi0jaWZkZWYgRVhQT1JUX0hDSV9QQUxfSU5URVJGQUNFCi0gICAgICAgIGlmIChzZXR1cGhjaXBhbCAmJiAoTlVMTCAhPSBhcjZrSGNpUGFsQ2FsbGJhY2tzX2cuc2V0dXBUcmFuc3BvcnQpKQotICAgICAgICAgIHN0YXR1cyA9IGFyNmtIY2lQYWxDYWxsYmFja3NfZy5zZXR1cFRyYW5zcG9ydChhcik7Ci0jZWxzZQotICAgICAgICBpZihzZXR1cGhjaXBhbCkKLSAgICAgICAgICBzdGF0dXMgPSBhcjZrX3NldHVwX2hjaV9wYWwoYXIpOwotI2VuZGlmCiAKICAgICB9IHdoaWxlIChmYWxzZSk7CiAKQEAgLTI3NTEsNiArMjY3NiwzOCBAQAogICAgICAgICBnb3RvIGFyNjAwMF9pbml0X2RvbmU7CiAgICAgfQogCisJaWYgKHJlZ3NjYW5tb2RlKSB7CisJCXUzMiBwYXJhbTsKKworCQlpZiAoQk1JUmVhZE1lbW9yeShhci0+YXJIaWZEZXZpY2UsCisJCQkJICBIT1NUX0lOVEVSRVNUX0lURU1fQUREUkVTUyhhciwKKwkJCQkJCQkgICAgIGhpX29wdGlvbl9mbGFnKSwKKwkJCQkJCQkgICAgICh1OCAqKSZwYXJhbSwKKwkJCQkJCQkgICAgIDQpICE9IDApIHsKKwkJCUFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfRVJSLAorCQkJCQkoIkJNSVJlYWRNZW1vcnkgZm9yc2V0dGluZyAiCisJCQkJCSAicmVnc2Nhbm1vZGUgZmFpbGVkXG4iKSk7CisJCQlyZXR1cm4gQV9FUlJPUjsKKwkJfQorCisJCWlmIChyZWdzY2FubW9kZSA9PSAxKQorCQkJcGFyYW0gfD0gSElfT1BUSU9OX1NLSVBfUkVHX1NDQU47CisJCWVsc2UgaWYgKHJlZ3NjYW5tb2RlID09IDIpCisJCQlwYXJhbSB8PSBISV9PUFRJT05fSU5JVF9SRUdfU0NBTjsKKworCQlpZiAoQk1JV3JpdGVNZW1vcnkoYXItPmFySGlmRGV2aWNlLAorCQkJCSAgIEhPU1RfSU5URVJFU1RfSVRFTV9BRERSRVNTKGFyLAorCQkJCQkJCSAgICAgIGhpX29wdGlvbl9mbGFnKSwKKwkJCQkJCQkgICAgICAodTggKikmcGFyYW0sCisJCQkJCQkJICAgICAgNCkgIT0gMCkgeworCQkJQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19FUlIsCisJCQkJCSgiQk1JV3JpdGVNZW1vcnkgZm9yc2V0dGluZyAiCisJCQkJCSJyZWdzY2FubW9kZSBmYWlsZWRcbiIpKTsKKwkJCXJldHVybiBBX0VSUk9SOworCQl9CisJCUFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfSU5GTywgKCJSZWd1bGF0b3J5IHNjYW4gbW9kZSBzZXRcbiIpKTsKKwl9CisKICAgICAvKgogICAgICAqIGdpdmUgb3VyIGNvbm5lY3RlZCBlbmRwb2ludHMgc29tZSBidWZmZXJzCiAgICAgICovCkBAIC0zMDk1LDcgKzMwNTIsNiBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKGFyLT5hcldtaUVuYWJsZWQpIHsKLSNpZmRlZiBDT05GSUdfQ0hFQ0tTVU1fT0ZGTE9BRAogICAgICAgICB1OCBjc3VtU3RhcnQ9MDsKICAgICAgICAgdTggY3N1bURlc3Q9MDsKICAgICAgICAgdTggY3N1bT1za2ItPmlwX3N1bW1lZDsKQEAgLTMxMDQsNyArMzA2MCw2IEBACiAJCQkgc2l6ZW9mKEFUSF9MTENfU05BUF9IRFIpKTsKICAgICAgICAgICAgIGNzdW1EZXN0PXNrYi0+Y3N1bV9vZmZzZXQrY3N1bVN0YXJ0OwogICAgICAgICB9Ci0jZW5kaWYKICAgICAgICAgICAgIGlmIChBX05FVEJVRl9IRUFEUk9PTShza2IpIDwgZGV2LT5oYXJkX2hlYWRlcl9sZW4gLSBMSU5VWF9IQUNLX0ZVREdFX0ZBQ1RPUikgewogICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICAqbmV3YnVmOwogCkBAIC0zMTM1LDcgKzMwOTAsNiBAQAogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0jaWZkZWYgQ09ORklHX0NIRUNLU1VNX09GRkxPQUQKICAgICAgICAgICAgIGlmKGNzdW1PZmZsb2FkICYmIChjc3VtID09Q0hFQ0tTVU1fUEFSVElBTCkpewogICAgICAgICAgICAgICAgIFdNSV9UWF9NRVRBX1YyICBtZXRhVjI7CiAgICAgICAgICAgICAgICAgbWV0YVYyLmNzdW1TdGFydCA9Y3N1bVN0YXJ0OwpAQCAtMzE0OSw3ICszMTAzLDYgQEAKIAogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQotI2VuZGlmCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgaWYgKHdtaV9kYXRhX2hkcl9hZGQoYXItPmFyV21pLCBza2IsIERBVEFfTVNHVFlQRSwgYk1vcmVEYXRhLCBkb3QxMUhkciwwLE5VTEwpICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19FUlIsKCJhcjYwMDBfZGF0YV90eCAtIHdtaV9kYXRhX2hkcl9hZGQgZmFpbGVkXG4iKSk7CkBAIC0zNzA0LDggKzM2NTcsMjMgQEAKICAgICAgICAgICAgICAgICBXTUlfREFUQV9IRFIgKmRoZHIgPSAoV01JX0RBVEFfSERSICopQV9ORVRCVUZfREFUQShza2IpOwogICAgICAgICAgICAgICAgIGJvb2wgaXNfYW1zZHU7CiAgICAgICAgICAgICAgICAgdTggdGlkOwotICAgICAgICAgICAgICAgIGJvb2wgaXNfYWNsX2RhdGFfZnJhbWU7Ci0gICAgICAgICAgICAgICAgaXNfYWNsX2RhdGFfZnJhbWUgPSBXTUlfREFUQV9IRFJfR0VUX0RBVEFfVFlQRShkaGRyKSA9PSBXTUlfREFUQV9IRFJfREFUQV9UWVBFX0FDTDsKKworCQkvKgorCQkgKiBUaGlzIGNoZWNrIGNhbiBiZSByZW1vdmVkIGlmIGFmdGVyIGEgd2hpbGUgd2UgZG8gbm90CisJCSAqIHNlZSB0aGUgd2FybmluZy4gRm9yIG5vdyB3ZSBsZWF2ZSBpdCB0byBlbnN1cmUKKwkJICogd2UgZHJvcCB0aGVzZSBmcmFtZXMgYWNjb3JkaW5nbHkgaW4gY2FzZSB0aGUKKwkJICogdGFyZ2V0IGdlbmVyYXRlcyB0aGVtIGZvciBzb21lIHJlYXNvbi4gVGhlc2UKKwkJICogd2VyZSB1c2VkIGZvciBhbiBpbnRlcm5hbCBQQUwgYnV0IHRoYXQncyBub3QKKwkJICogdXNlZCBvciBzdXBwb3J0ZWQgYW55bW9yZS4gVGhlc2UgZnJhbWVzIHNob3VsZAorCQkgKiBub3QgY29tZSB1cCBmcm9tIHRoZSB0YXJnZXQuCisJCSAqLworICAgICAgICAgICAgICAgIGlmIChXQVJOX09OKFdNSV9EQVRBX0hEUl9HRVRfREFUQV9UWVBFKGRoZHIpID09CisJCQkgICAgV01JX0RBVEFfSERSX0RBVEFfVFlQRV9BQ0wpKSB7CisJCQlBUjYwMDBfU1RBVF9JTkMoYXIsIHJ4X2Vycm9ycyk7CisJCQlBX05FVEJVRl9GUkVFKHNrYik7CisJCQlyZXR1cm47CisJCX0KKwogI2lmZGVmIENPTkZJR19QTSAKICAgICAgICAgICAgICAgICBhcjYwMDBfY2hlY2tfd293X3N0YXR1cyhhciwgTlVMTCwgZmFsc2UpOwogI2VuZGlmIC8qIENPTkZJR19QTSAqLwpAQCAtMzcyNyw3ICszNjk1LDcgQEAKICAgICAgICAgICAgICAgICAgKiBBQ0wgZGF0YSBmcmFtZXMgZG9uJ3QgZm9sbG93IGV0aGVybmV0IGZyYW1lIGJvdW5kcyBmb3IKICAgICAgICAgICAgICAgICAgKiBtaW4gbGVuZ3RoCiAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgaWYgKGFyLT5hck5ldHdvcmtUeXBlICE9IEFQX05FVFdPUksgJiYgICFpc19hY2xfZGF0YV9mcmFtZSAmJgorICAgICAgICAgICAgICAgIGlmIChhci0+YXJOZXR3b3JrVHlwZSAhPSBBUF9ORVRXT1JLICYmCiAgICAgICAgICAgICAgICAgICAgICgocFBhY2tldC0+QWN0dWFsTGVuZ3RoIDwgbWluSGRyTGVuKSB8fAogICAgICAgICAgICAgICAgICAgICAocFBhY2tldC0+QWN0dWFsTGVuZ3RoID4gQVI2MDAwX01BWF9SWF9NRVNTQUdFX1NJWkUpKSkKICAgICAgICAgICAgICAgICB7CkBAIC0zNzY3LDExICszNzM1LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFdNSV9NRVRBX1ZFUlNJT05fMToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IHNpemVvZihXTUlfUlhfTUVUQV9WMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotI2lmZGVmIENPTkZJR19DSEVDS1NVTV9PRkZMT0FECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBXTUlfTUVUQV9WRVJTSU9OXzI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBzaXplb2YoV01JX1JYX01FVEFfVjIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMzg0MSw3ICszODA3LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQV9ORVRCVUZfUFVMTCgodm9pZCopc2tiLCBzaXplb2YoV01JX1JYX01FVEFfVjEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotI2lmZGVmIENPTkZJR19DSEVDS1NVTV9PRkZMT0FECiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFdNSV9NRVRBX1ZFUlNJT05fMjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdNSV9SWF9NRVRBX1YyICpwTWV0YSA9IChXTUlfUlhfTUVUQV9WMiAqKUFfTkVUQlVGX0RBVEEoc2tiKTsKQEAgLTM4NTIsNyArMzgxNyw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFfTkVUQlVGX1BVTEwoKHZvaWQqKXNrYiwgc2l6ZW9mKFdNSV9SWF9NRVRBX1YyKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMzg2Miw3ICszODI2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgLyogTldGOiBwcmludCB0aGUgODAyLjExIGhkciBieXRlcyAqLwogICAgICAgICAgICAgICAgICAgICBpZihjb250YWluc0RvdDExSGRyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSB3bWlfZG90MTFfaGRyX3JlbW92ZShhci0+YXJXbWksc2tiKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKCFpc19hbXNkdSAmJiAhaXNfYWNsX2RhdGFfZnJhbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKCFpc19hbXNkdSkgewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gd21pX2RvdDNfMl9kaXgoc2tiKTsKICAgICAgICAgICAgICAgICAgICAgfQogCkBAIC0zODcyLDE2ICszODM2LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcnhfZG9uZTsKICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGlmIChpc19hY2xfZGF0YV9mcmFtZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgQV9ORVRCVUZfUFVTSChza2IsIHNpemVvZihpbnQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICooKHNob3J0ICopQV9ORVRCVUZfREFUQShza2IpKSA9IFdNSV9BQ0xfREFUQV9FVkVOVElEOwotCSAgICAgICAgICAgICAgICAvKiBzZW5kIHRoZSBkYXRhIHBhY2tldCB0byBQQUwgZHJpdmVyICovCi0JCQlpZihhcjZrX3BhbF9jb25maWdfZy5mcGFyNmtfcGFsX3JlY3ZfcGt0KSB7Ci0JCQkJaWYoKCphcjZrX3BhbF9jb25maWdfZy5mcGFyNmtfcGFsX3JlY3ZfcGt0KShhci0+aGNpcGFsX2luZm8sIHNrYikgPT0gdHJ1ZSkKLQkJCQkJZ290byByeF9kb25lOwotCQkJfQotICAgICAgICAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAgICAgICAgICAgaWYgKChhci0+YXJOZXREZXYtPmZsYWdzICYgSUZGX1VQKSA9PSBJRkZfVVApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhci0+YXJOZXR3b3JrVHlwZSA9PSBBUF9ORVRXT1JLKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYjEgPSBOVUxMOwpAQCAtMzkxNSw5ICszODY5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KLSNpZmRlZiBBVEhfQVI2S18xMU5fU1VQUE9SVAogICAgICAgICAgICAgICAgICAgICBhZ2dyX3Byb2Nlc3NfcmVjdl9mcm0oYXItPmFnZ3JfY250eHQsIHRpZCwgc2VxX25vLCBpc19hbXNkdSwgKHZvaWQgKiopJnNrYik7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICAgICAgYXI2MDAwX2RlbGl2ZXJfZnJhbWVzX3RvX253X3N0YWNrKCh2b2lkICopIGFyLT5hck5ldERldiwgKHZvaWQgKilza2IpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTQxNDYsOTMgKzQwOTgsNiBAQAogICAgIHJldHVybiAmYXItPmFyTmV0U3RhdHM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqCi1hcjYwMDBfZ2V0X2l3c3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYpCi17Ci0gICAgc3RydWN0IGFyNl9zb2Z0YyAqYXIgPSAoc3RydWN0IGFyNl9zb2Z0YyAqKWFyNmtfcHJpdihkZXYpOwotICAgIFRBUkdFVF9TVEFUUyAqcFN0YXRzID0gJmFyLT5hclRhcmdldFN0YXRzOwotICAgIHN0cnVjdCBpd19zdGF0aXN0aWNzICogcEl3U3RhdHMgPSAmYXItPmFySXdTdGF0czsKLSAgICBpbnQgcnRubGxvY2tlZDsKLQotICAgIGlmIChhci0+YklzRGVzdHJveVByb2dyZXNzIHx8IGFyLT5hcldtaVJlYWR5ID09IGZhbHNlIHx8IGFyLT5hcldsYW5TdGF0ZSA9PSBXTEFOX0RJU0FCTEVEKQotICAgIHsKLSAgICAgICAgcEl3U3RhdHMtPnN0YXR1cyA9IDA7Ci0gICAgICAgIHBJd1N0YXRzLT5xdWFsLnF1YWwgPSAwOwotICAgICAgICBwSXdTdGF0cy0+cXVhbC5sZXZlbCA9MDsKLSAgICAgICAgcEl3U3RhdHMtPnF1YWwubm9pc2UgPSAwOwotICAgICAgICBwSXdTdGF0cy0+ZGlzY2FyZC5jb2RlID0wOwotICAgICAgICBwSXdTdGF0cy0+ZGlzY2FyZC5yZXRyaWVzPTA7Ci0gICAgICAgIHBJd1N0YXRzLT5taXNzLmJlYWNvbiA9MDsKLSAgICAgICAgcmV0dXJuIHBJd1N0YXRzOwotICAgIH0KLQotICAgIC8qCi0gICAgICogVGhlIGluX2F0b21pYyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRldGVybWluZSBpZiB0aGUgc2NoZWR1bGluZyBpcwotICAgICAqIGFsbG93ZWQgaW4gdGhlIGN1cnJlbnQgY29udGV4dCBvciBub3QuIFRoaXMgd2FzIGludHJvZHVjZWQgaW4gMi42Ci0gICAgICogRnJvbSB3aGF0IEkgaGF2ZSByZWFkIG9uIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIDIuNCBhbmQgMi42LCB0aGUKLSAgICAgKiAyLjQga2VybmVsIGRpZCBub3Qgc3VwcG9ydCBwcmVlbXB0aW9uIGFuZCBzbyB0aGlzIGNoZWNrIG1pZ2h0IG5vdAotICAgICAqIGJlIHJlcXVpcmVkIGZvciAyLjQga2VybmVscy4KLSAgICAgKi8KLSAgICBpZiAoaW5fYXRvbWljKCkpCi0gICAgewotICAgICAgICB3bWlfZ2V0X3N0YXRzX2NtZChhci0+YXJXbWkpOwotCi0gICAgICAgIHBJd1N0YXRzLT5zdGF0dXMgPSAxIDsKLSAgICAgICAgcEl3U3RhdHMtPnF1YWwucXVhbCA9IHBTdGF0cy0+Y3NfYXZlQmVhY29uX3Jzc2kgLSAxNjE7Ci0gICAgICAgIHBJd1N0YXRzLT5xdWFsLmxldmVsID1wU3RhdHMtPmNzX2F2ZUJlYWNvbl9yc3NpOyAvKiBub2lzZSBpcyAtOTUgZEJtICovCi0gICAgICAgIHBJd1N0YXRzLT5xdWFsLm5vaXNlID0gcFN0YXRzLT5ub2lzZV9mbG9vcl9jYWxpYmF0aW9uOwotICAgICAgICBwSXdTdGF0cy0+ZGlzY2FyZC5jb2RlID0gcFN0YXRzLT5yeF9kZWNyeXB0X2VycjsKLSAgICAgICAgcEl3U3RhdHMtPmRpc2NhcmQucmV0cmllcyA9IHBTdGF0cy0+dHhfcmV0cnlfY250OwotICAgICAgICBwSXdTdGF0cy0+bWlzcy5iZWFjb24gPSBwU3RhdHMtPmNzX2JtaXNzX2NudDsKLSAgICAgICAgcmV0dXJuIHBJd1N0YXRzOwotICAgIH0KLQotICAgIGRldl9ob2xkKGRldik7ICAgCi0gICAgcnRubGxvY2tlZCA9IHJ0bmxfaXNfbG9ja2VkKCk7Ci0gICAgaWYgKHJ0bmxsb2NrZWQpIHsKLSAgICAgICAgcnRubF91bmxvY2soKTsKLSAgICB9Ci0gICAgcEl3U3RhdHMtPnN0YXR1cyA9IDA7Ci0KLSAgICBpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZhci0+YXJTZW0pKSB7Ci0gICAgICAgIGdvdG8gZXJyX2V4aXQ7Ci0gICAgfQotICAgIAotICAgIGRvIHsKLQotICAgICAgICBpZiAoYXItPmJJc0Rlc3Ryb3lQcm9ncmVzcyB8fCBhci0+YXJXbGFuU3RhdGUgPT0gV0xBTl9ESVNBQkxFRCkgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgYXItPnN0YXRzVXBkYXRlUGVuZGluZyA9IHRydWU7Ci0gICAgCi0gICAgICAgIGlmKHdtaV9nZXRfc3RhdHNfY21kKGFyLT5hcldtaSkgIT0gMCkgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoYXJFdmVudCwgYXItPnN0YXRzVXBkYXRlUGVuZGluZyA9PSBmYWxzZSwgd21pdGltZW91dCAqIEhaKTsKLSAgICAgICAgaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0gICAgICAgICAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX0VSUiwoImFyNjAwMCA6IFdNSSBnZXQgc3RhdHMgdGltZW91dCBcbiIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHBJd1N0YXRzLT5zdGF0dXMgPSAxIDsKLSAgICAgICAgcEl3U3RhdHMtPnF1YWwucXVhbCA9IHBTdGF0cy0+Y3NfYXZlQmVhY29uX3Jzc2kgLSAxNjE7Ci0gICAgICAgIHBJd1N0YXRzLT5xdWFsLmxldmVsID1wU3RhdHMtPmNzX2F2ZUJlYWNvbl9yc3NpOyAgLyogbm9pc2UgaXMgLTk1IGRCbSAqLwotICAgICAgICBwSXdTdGF0cy0+cXVhbC5ub2lzZSA9IHBTdGF0cy0+bm9pc2VfZmxvb3JfY2FsaWJhdGlvbjsKLSAgICAgICAgcEl3U3RhdHMtPmRpc2NhcmQuY29kZSA9IHBTdGF0cy0+cnhfZGVjcnlwdF9lcnI7Ci0gICAgICAgIHBJd1N0YXRzLT5kaXNjYXJkLnJldHJpZXMgPSBwU3RhdHMtPnR4X3JldHJ5X2NudDsKLSAgICAgICAgcEl3U3RhdHMtPm1pc3MuYmVhY29uID0gcFN0YXRzLT5jc19ibWlzc19jbnQ7Ci0gICAgfSB3aGlsZSAoMCk7Ci0gICAgdXAoJmFyLT5hclNlbSk7Ci0KLWVycl9leGl0OgotICAgIGlmIChydG5sbG9ja2VkKSB7Ci0gICAgICAgIHJ0bmxfbG9jaygpOwotICAgIH0KLSAgICBkZXZfcHV0KGRldik7Ci0gICAgcmV0dXJuIHBJd1N0YXRzOwotfQotCiB2b2lkCiBhcjYwMDBfcmVhZHlfZXZlbnQodm9pZCAqZGV2dCwgdTggKmRhdGFwLCB1OCBwaHlDYXAsIHUzMiBzd192ZXIsIHUzMiBhYmlfdmVyKQogewpAQCAtNDI1NCw2ICs0MTE5LDI5IEBACiAgICAgd2FrZV91cCgmYXJFdmVudCk7CiB9CiAKK3ZvaWQgYXI2MDAwX2luc3RhbGxfc3RhdGljX3dlcF9rZXlzKHN0cnVjdCBhcjZfc29mdGMgKmFyKQoreworICAgIHU4IGluZGV4OworICAgIHU4IGtleVVzYWdlOworCisgICAgZm9yIChpbmRleCA9IFdNSV9NSU5fS0VZX0lOREVYOyBpbmRleCA8PSBXTUlfTUFYX0tFWV9JTkRFWDsgaW5kZXgrKykgeworICAgICAgICBpZiAoYXItPmFyV2VwS2V5TGlzdFtpbmRleF0uYXJLZXlMZW4pIHsKKyAgICAgICAgICAgIGtleVVzYWdlID0gR1JPVVBfVVNBR0U7CisgICAgICAgICAgICBpZiAoaW5kZXggPT0gYXItPmFyRGVmVHhLZXlJbmRleCkgeworICAgICAgICAgICAgICAgIGtleVVzYWdlIHw9IFRYX1VTQUdFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd21pX2FkZEtleV9jbWQoYXItPmFyV21pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBXRVBfQ1JZUFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlVc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyLT5hcldlcEtleUxpc3RbaW5kZXhdLmFyS2V5TGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyLT5hcldlcEtleUxpc3RbaW5kZXhdLmFyS2V5LCBLRVlfT1BfSU5JVF9WQUwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBOT19TWU5DX1dNSUZMQUcpOworICAgICAgICB9CisgICAgfQorfQorCiB2b2lkCiBhZGRfbmV3X3N0YShzdHJ1Y3QgYXI2X3NvZnRjICphciwgdTggKm1hYywgdTE2IGFpZCwgdTggKndwYWllLAogICAgICAgICAgICAgdTggaWVsZW4sIHU4IGtleW1nbXQsIHU4IHVjaXBoZXIsIHU4IGF1dGgpCkBAIC00MzQ0LDcgKzQyMzIsNyBAQAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBBX1BSSU5URigiQVVUSDogVW5rbm93blxuIik7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH07CisgICAgICAgIH0KICAgICAgICAgc3dpdGNoIChsaXN0ZW5JbnRlcnZhbCYweEZGKSB7CiAgICAgICAgICAgICBjYXNlIFdQQV9QU0tfQVVUSDoKICAgICAgICAgICAgICAgICBBX1BSSU5URigiS2V5TWdtdDogV1BBLVBTS1xuIik7CkBAIC00MzU1LDcgKzQyNDMsNyBAQAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBBX1BSSU5URigiS2V5TWdtdDogTk9ORVxuIik7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH07CisgICAgICAgIH0KICAgICAgICAgc3dpdGNoIChiZWFjb25JbnRlcnZhbCkgewogICAgICAgICAgICAgY2FzZSBBRVNfQ1JZUFQ6CiAgICAgICAgICAgICAgICAgQV9QUklOVEYoIkNpcGhlcjogQUVTXG4iKTsKQEAgLTQzNzQsNyArNDI2Miw3IEBACiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIEFfUFJJTlRGKCJDaXBoZXI6IE5PTkVcbiIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9OworICAgICAgICB9CiAKICAgICAgICAgYWRkX25ld19zdGEoYXIsIGJzc2lkLCBjaGFubmVsIC8qYWlkKi8sCiAgICAgICAgICAgICBhc3NvY0luZm8gLyogV1BBIElFICovLCBhc3NvY1Jlc3BMZW4gLyogSUUgbGVuICovLApAQCAtNDM5MiwxMyArNDI4MCwxMSBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0jaWZkZWYgQVRINktfQ09ORklHX0NGRzgwMjExCiAgICAgYXI2a19jZmc4MDIxMV9jb25uZWN0X2V2ZW50KGFyLCBjaGFubmVsLCBic3NpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuSW50ZXJ2YWwsIGJlYWNvbkludGVydmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXR3b3JrVHlwZSwgYmVhY29uSWVMZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc29jUmVxTGVuLCBhc3NvY1Jlc3BMZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc29jSW5mbyk7Ci0jZW5kaWYgLyogQVRINktfQ09ORklHX0NGRzgwMjExICovCiAKICAgICBtZW1jcHkoYXItPmFyQnNzaWQsIGJzc2lkLCBzaXplb2YoYXItPmFyQnNzaWQpKTsKICAgICBhci0+YXJCc3NDaGFubmVsID0gY2hhbm5lbDsKQEAgLTQ0OTUsNyArNDM4MSw2IEBACiAgICAgICAgIHdpcmVsZXNzX3NlbmRfZXZlbnQoYXItPmFyTmV0RGV2LCBJV0VWQ1VTVE9NLCAmd3JxdSwgYnVmKTsKICAgICB9CiAKLSNpZmRlZiBVU0VSX0tFWVMKICAgICBpZiAoYXItPnVzZXJfc2F2ZWRrZXlzX3N0YXQgPT0gVVNFUl9TQVZFREtFWVNfU1RBVF9SVU4gJiYKICAgICAgICAgYXItPnVzZXJfc2F2ZWRfa2V5cy5rZXlPayA9PSB0cnVlKQogICAgIHsKQEAgLTQ1MDgsMzAgKzQzOTMsOSBAQAogICAgICAgICB9CiAgICAgICAgIGFyNjAwMF9yZWluc3RhbGxfa2V5cyhhciwga2V5X29wX2N0cmwpOwogICAgIH0KLSNlbmRpZiAvKiBVU0VSX0tFWVMgKi8KIAogICAgIG5ldGlmX3dha2VfcXVldWUoYXItPmFyTmV0RGV2KTsKIAotICAgIC8qIEZvciBDRkc4MDIxMSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBkZWZhdWx0IGtleSBjb21lcyBpbiBhZnRlciBjb25uZWN0IHNvIG5vIHBvaW50IGluIHBsdW1iaW5nIGludmFsaWQga2V5cyAqLwotI2lmbmRlZiBBVEg2S19DT05GSUdfQ0ZHODAyMTEKLSAgICBpZiAoKG5ldHdvcmtUeXBlICYgQURIT0NfTkVUV09SSykgICAgICAmJgotICAgICAgICAoT1BFTl9BVVRIID09IGFyLT5hckRvdDExQXV0aE1vZGUpICYmCi0gICAgICAgIChOT05FX0FVVEggPT0gYXItPmFyQXV0aE1vZGUpICAgICAgJiYKLSAgICAgICAgKFdFUF9DUllQVCA9PSBhci0+YXJQYWlyd2lzZUNyeXB0bykpCi0gICAgewotICAgICAgICBpZiAoIWFyLT5hckNvbm5lY3RlZCkgewotICAgICAgICAgICAgd21pX2FkZEtleV9jbWQoYXItPmFyV21pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYXItPmFyRGVmVHhLZXlJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFUF9DUllQVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdST1VQX1VTQUdFIHwgVFhfVVNBR0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBhci0+YXJXZXBLZXlMaXN0W2FyLT5hckRlZlR4S2V5SW5kZXhdLmFyS2V5TGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyLT5hcldlcEtleUxpc3RbYXItPmFyRGVmVHhLZXlJbmRleF0uYXJLZXksIEtFWV9PUF9JTklUX1ZBTCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PX1NZTkNfV01JRkxBRyk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLyogQVRINktfQ09ORklHX0NGRzgwMjExICovCi0KICAgICAvKiBVcGRhdGUgY29ubmVjdCAmIGxpbmsgc3RhdHVzIGF0b21pY2FsbHkgKi8KICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmYXItPmFyTG9jaywgZmxhZ3MpOwogICAgIGFyLT5hckNvbm5lY3RlZCAgPSB0cnVlOwpAQCAtNDY2MSwxMSArNDUyNSw5IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSNpZmRlZiBBVEg2S19DT05GSUdfQ0ZHODAyMTEKICAgICBhcjZrX2NmZzgwMjExX2Rpc2Nvbm5lY3RfZXZlbnQoYXIsIHJlYXNvbiwgYnNzaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc29jUmVzcExlbiwgYXNzb2NJbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbFJlYXNvblN0YXR1cyk7Ci0jZW5kaWYgLyogQVRINktfQ09ORklHX0NGRzgwMjExICovCiAKICAgICAvKiBTZW5kIGRpc2Nvbm5lY3QgZXZlbnQgdG8gc3VwcGxpY2FudCAqLwogICAgIEFfTUVNWkVSTygmd3JxdSwgc2l6ZW9mKHdycXUpKTsKQEAgLTQ3NTEsMTMgKzQ2MTMsMTEgQEAKICAgICAgICAgcmVjb25uZWN0X2ZsYWcgPSAwOwogICAgIH0KIAotI2lmZGVmIFVTRVJfS0VZUwogICAgIGlmIChyZWFzb24gIT0gQ1NFUlZfRElTQ09OTkVDVCkKICAgICB7CiAgICAgICAgIGFyLT51c2VyX3NhdmVka2V5c19zdGF0ID0gVVNFUl9TQVZFREtFWVNfU1RBVF9JTklUOwogICAgICAgICBhci0+dXNlcl9rZXlfY3RybCAgICAgID0gMDsKICAgICB9Ci0jZW5kaWYgLyogVVNFUl9LRVlTICovCiAKICAgICBuZXRpZl9zdG9wX3F1ZXVlKGFyLT5hck5ldERldik7CiAgICAgQV9NRU1aRVJPKGFyLT5hckJzc2lkLCBzaXplb2YoYXItPmFyQnNzaWQpKTsKQEAgLTQ3NzQsNyArNDYzNCw2IEBACiAgICAgYXItPmFyUmVnQ29kZSA9IHJlZ0NvZGU7CiB9CiAKLSNpZmRlZiBBVEhfQVI2S18xMU5fU1VQUE9SVAogdm9pZAogYXI2MDAwX2FnZ3JfcmN2X2FkZGJhX3JlcV9ldnQoc3RydWN0IGFyNl9zb2Z0YyAqYXIsIFdNSV9BRERCQV9SRVFfRVZFTlQgKmV2dCkKIHsKQEAgLTQ3OTYsNyArNDY1NSw2IEBACiB7CiAgICAgYWdncl9yZWN2X2RlbGJhX3JlcV9ldnQoYXItPmFnZ3JfY250eHQsIGV2dC0+dGlkKTsKIH0KLSNlbmRpZgogCiB2b2lkIHJlZ2lzdGVyX3BhbF9jYihhcjZrX3BhbF9jb25maWdfdCAqcGFsQ29uZmlnX3ApCiB7CkBAIC00ODI4LDEyICs0Njg2LDYgQEAKICAgICBidWYgKz0gc2l6ZW9mKGludCk7CiAgICAgbWVtY3B5KGJ1ZiwgY21kLT5idWYsIGNtZC0+ZXZ0X2J1Zl9zeik7CiAKLSAgICBpZihhcjZrX3BhbF9jb25maWdfZy5mcGFyNmtfcGFsX3JlY3ZfcGt0KQotICAgIHsKLSAgICAgIC8qIHBhc3MgdGhlIGNtZCBwYWNrZXQgdG8gUEFMIGRyaXZlciAqLwotICAgICAgaWYoKCphcjZrX3BhbF9jb25maWdfZy5mcGFyNmtfcGFsX3JlY3ZfcGt0KShhci0+aGNpcGFsX2luZm8sIG9zYnVmKSA9PSB0cnVlKQotICAgICAgICByZXR1cm47Ci0gICAgfQogICAgIGFyNjAwMF9kZWxpdmVyX2ZyYW1lc190b19ud19zdGFjayhhci0+YXJOZXREZXYsIG9zYnVmKTsKICAgICBpZihsb2doY2kpIHsKICAgICAgICAgQV9QUklOVEZfTE9HKCJIQ0kgRXZlbnQgRnJvbSBQQUwgPC0tIFxuIik7CkBAIC00ODgzLDcgKzQ3MzUsNyBAQAogICAgICAgICBtZW1jcHkocG1rY2FuZC0+YnNzaWQuc2FfZGF0YSwgaW5mby0+YnNzaWQsIEFUSF9NQUNfTEVOKTsKICAgICAgICAgd3JxdS5kYXRhLmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaXdfcG1raWRfY2FuZCk7CiAgICAgICAgIHdpcmVsZXNzX3NlbmRfZXZlbnQoYXItPmFyTmV0RGV2LCBJV0VWUE1LSURDQU5ELCAmd3JxdSwgKGNoYXIgKilwbWtjYW5kKTsKLSAgICAgICAgQV9GUkVFKHBta2NhbmQpOworICAgICAgICBrZnJlZShwbWtjYW5kKTsKICNlbHNlIC8qIFdJUkVMRVNTX0VYVCA+PSAxOCAqLwogICAgICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMlMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4IiwKICAgICAgICAgICAgICAgICAgdGFnLApAQCAtNDkxOCw5ICs0NzcwLDcgQEAKICAgICAgICAgICAgIHRhZywgcy0+bWFjWzBdLHMtPm1hY1sxXSxzLT5tYWNbMl0scy0+bWFjWzNdLHMtPm1hY1s0XSxzLT5tYWNbNV0pOwogICAgIH0gZWxzZSB7CiAKLSNpZmRlZiBBVEg2S19DT05GSUdfQ0ZHODAyMTEKICAgICBhcjZrX2NmZzgwMjExX3RraXBfbWljZXJyX2V2ZW50KGFyLCBrZXlpZCwgaXNtY2FzdCk7Ci0jZW5kaWYgLyogQVRINktfQ09ORklHX0NGRzgwMjExICovCiAKICAgICAgICAgQV9QUklOVEYoIkFSNjAwMCBUS0lQIE1JQyBlcnJvciByZWNlaXZlZCBmb3Iga2V5aWQgJWQgJXNjYXN0XG4iLAogICAgICAgICAgICAgIGtleWlkICYgMHgzLCBpc21jYXN0ID8gIm11bHRpIjogInVuaSIpOwpAQCAtNDkzNyw5ICs0Nzg3LDcgQEAKIGFyNjAwMF9zY2FuQ29tcGxldGVfZXZlbnQoc3RydWN0IGFyNl9zb2Z0YyAqYXIsIGludCBzdGF0dXMpCiB7CiAKLSNpZmRlZiBBVEg2S19DT05GSUdfQ0ZHODAyMTEKICAgICBhcjZrX2NmZzgwMjExX3NjYW5Db21wbGV0ZV9ldmVudChhciwgc3RhdHVzKTsKLSNlbmRpZiAvKiBBVEg2S19DT05GSUdfQ0ZHODAyMTEgKi8KIAogICAgIGlmICghYXItPmFyVXNlckJzc0ZpbHRlcikgewogICAgICAgICB3bWlfYnNzZmlsdGVyX2NtZChhci0+YXJXbWksIE5PTkVfQlNTX0ZJTFRFUiwgMCk7CkBAIC01MDk3LDE5ICs0OTQ1LDEzIEBACiAgICAgdXNlclJzc2lUaG9sZC5yc3NpID0gcnNzaTsKICAgICBBX1BSSU5URigicnNzaSBUaHJlc2hvbGQgcmFuZ2UgPSAlZCB0YWcgPSAlZCAgcnNzaSA9ICVkXG4iLCBuZXdUaHJlc2hvbGQsCiAgICAgICAgICAgICAgdXNlclJzc2lUaG9sZC50YWcsIHVzZXJSc3NpVGhvbGQucnNzaSk7Ci0KLSAgICBhcjYwMDBfc2VuZF9ldmVudF90b19hcHAoYXIsIFdNSV9SU1NJX1RIUkVTSE9MRF9FVkVOVElELCh1OCAqKSZ1c2VyUnNzaVRob2xkLCBzaXplb2YoVVNFUl9SU1NJX1RIT0xEKSk7CiB9CiAKIAogdm9pZAogYXI2MDAwX2hiQ2hhbGxlbmdlUmVzcF9ldmVudChzdHJ1Y3QgYXI2X3NvZnRjICphciwgdTMyIGNvb2tpZSwgdTMyIHNvdXJjZSkKIHsKLSAgICBpZiAoc291cmNlID09IEFQUF9IQl9DSEFMTEVOR0UpIHsKLSAgICAgICAgLyogUmVwb3J0IGl0IHRvIHRoZSBhcHAgaW4gY2FzZSBpdCB3YW50cyBhIHBvc2l0aXZlIGFja25vd2xlZGdlbWVudCAqLwotICAgICAgICBhcjYwMDBfc2VuZF9ldmVudF90b19hcHAoYXIsIFdNSVhfSEJfQ0hBTExFTkdFX1JFU1BfRVZFTlRJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1OCAqKSZjb29raWUsIHNpemVvZihjb29raWUpKTsKLSAgICB9IGVsc2UgeworICAgIGlmIChzb3VyY2UgIT0gQVBQX0hCX0NIQUxMRU5HRSkgewogICAgICAgICAvKiBUaGlzIHdvdWxkIGlnbm9yZSB0aGUgcmVwbHlzIHRoYXQgY29tZSBpbiBhZnRlciB0aGVpciBkdWUgdGltZSAqLwogICAgICAgICBpZiAoY29va2llID09IGFyLT5hckhCQ2hhbGxlbmdlUmVzcC5zZXFOdW0pIHsKICAgICAgICAgICAgIGFyLT5hckhCQ2hhbGxlbmdlUmVzcC5vdXRzdGFuZGluZyA9IGZhbHNlOwpAQCAtNTU2MiwxMDAgKzU0MDQsNiBAQAogICAgIHJldHVybiBjb29raWU7CiB9CiAKLSNpZmRlZiBTRU5EX0VWRU5UX1RPX0FQUAotLyoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZW5kIGV2ZW50IHdoaWNoIGNvbWUgZnJvbSB0YWdldCB0bwotICogdGhlIGFwcGxpY2F0aW9uLiBUaGUgYnVmIHdoaWNoIHNlbmQgdG8gYXBwbGljYXRpb24gaXMgaW5jbHVkZQotICogdGhlIGV2ZW50IElEIGFuZCBldmVudCBjb250ZW50LgotICovCi0jZGVmaW5lIEVWRU5UX0lEX0xFTiAgIDIKLXZvaWQgYXI2MDAwX3NlbmRfZXZlbnRfdG9fYXBwKHN0cnVjdCBhcjZfc29mdGMgKmFyLCB1MTYgZXZlbnRJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4ICpkYXRhcCwgaW50IGxlbikKLXsKLQotI2lmIChXSVJFTEVTU19FWFQgPj0gMTUpCi0KLS8qIG5vdGU6IElXRVZDVVNUT00gb25seSBleGlzdHMgaW4gd2lyZWxlc3MgZXh0ZW5zaW9ucyBhZnRlciB2ZXJzaW9uIDE1ICovCi0KLSAgICBjaGFyICpidWY7Ci0gICAgdTE2IHNpemU7Ci0gICAgdW5pb24gaXdyZXFfZGF0YSB3cnF1OwotCi0gICAgc2l6ZSA9IGxlbiArIEVWRU5UX0lEX0xFTjsKLQotICAgIGlmIChzaXplID4gSVdfQ1VTVE9NX01BWCkgewotICAgICAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX0VSUiwoIldNSSBldmVudCBJRCA6IDB4JTQuNFgsIGxlbiA9ICVkIHRvbyBiaWcgZm9yIElXRVZDVVNUT00gKG1heD0lZCkgXG4iLAotICAgICAgICAgICAgICAgIGV2ZW50SWQsIHNpemUsIElXX0NVU1RPTV9NQVgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGJ1ZiA9IEFfTUFMTE9DX05PV0FJVChzaXplKTsKLSAgICBpZiAoTlVMTCA9PSBidWYpewotICAgICAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX0VSUiwoIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgJWQgYnl0ZXNcbiIsIF9fZnVuY19fLCBzaXplKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBX01FTVpFUk8oYnVmLCBzaXplKTsKLSAgICBtZW1jcHkoYnVmLCAmZXZlbnRJZCwgRVZFTlRfSURfTEVOKTsKLSAgICBtZW1jcHkoYnVmK0VWRU5UX0lEX0xFTiwgZGF0YXAsIGxlbik7Ci0KLSAgICAvL0FSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfSU5GTywoImV2ZW50IElEID0gJWQsbGVuID0gJWRcbiIsKih1MTYgKilidWYsIHNpemUpKTsKLSAgICBBX01FTVpFUk8oJndycXUsIHNpemVvZih3cnF1KSk7Ci0gICAgd3JxdS5kYXRhLmxlbmd0aCA9IHNpemU7Ci0gICAgd2lyZWxlc3Nfc2VuZF9ldmVudChhci0+YXJOZXREZXYsIElXRVZDVVNUT00sICZ3cnF1LCBidWYpOwotICAgIEFfRlJFRShidWYpOwotI2VuZGlmCi0KLQotfQotCi0vKgotICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNlbmQgZXZlbnRzIGxhcmdlciB0aGFuIDI1NiBieXRlcwotICogdG8gdGhlIGFwcGxpY2F0aW9uLiBUaGUgYnVmIHdoaWNoIGlzIHNlbnQgdG8gYXBwbGljYXRpb24KLSAqIGluY2x1ZGVzIHRoZSBldmVudCBJRCBhbmQgZXZlbnQgY29udGVudC4KLSAqLwotdm9pZCBhcjYwMDBfc2VuZF9nZW5lcmljX2V2ZW50X3RvX2FwcChzdHJ1Y3QgYXI2X3NvZnRjICphciwgdTE2IGV2ZW50SWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4ICpkYXRhcCwgaW50IGxlbikKLXsKLQotI2lmIChXSVJFTEVTU19FWFQgPj0gMTgpCi0KLS8qIElXRVZHRU5JRSBleGlzdHMgaW4gd2lyZWxlc3MgZXh0ZW5zaW9ucyB2ZXJzaW9uIDE4IG9ud2FyZHMgKi8KLQotICAgIGNoYXIgKmJ1ZjsKLSAgICB1MTYgc2l6ZTsKLSAgICB1bmlvbiBpd3JlcV9kYXRhIHdycXU7Ci0KLSAgICBzaXplID0gbGVuICsgRVZFTlRfSURfTEVOOwotCi0gICAgaWYgKHNpemUgPiBJV19HRU5FUklDX0lFX01BWCkgewotICAgICAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX0VSUiwoIldNSSBldmVudCBJRCA6IDB4JTQuNFgsIGxlbiA9ICVkIHRvbyBiaWcgZm9yIElXRVZHRU5JRSAobWF4PSVkKSBcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBldmVudElkLCBzaXplLCBJV19HRU5FUklDX0lFX01BWCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYnVmID0gQV9NQUxMT0NfTk9XQUlUKHNpemUpOwotICAgIGlmIChOVUxMID09IGJ1Zil7Ci0gICAgICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfRVJSLCgiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSAlZCBieXRlc1xuIiwgX19mdW5jX18sIHNpemUpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFfTUVNWkVSTyhidWYsIHNpemUpOwotICAgIG1lbWNweShidWYsICZldmVudElkLCBFVkVOVF9JRF9MRU4pOwotICAgIG1lbWNweShidWYrRVZFTlRfSURfTEVOLCBkYXRhcCwgbGVuKTsKLQotICAgIEFfTUVNWkVSTygmd3JxdSwgc2l6ZW9mKHdycXUpKTsKLSAgICB3cnF1LmRhdGEubGVuZ3RoID0gc2l6ZTsKLSAgICB3aXJlbGVzc19zZW5kX2V2ZW50KGFyLT5hck5ldERldiwgSVdFVkdFTklFLCAmd3JxdSwgYnVmKTsKLQotICAgIEFfRlJFRShidWYpOwotCi0jZW5kaWYgLyogKFdJUkVMRVNTX0VYVCA+PSAxOCkgKi8KLQotfQotI2VuZGlmIC8qIFNFTkRfRVZFTlRfVE9fQVBQICovCi0KLQogdm9pZAogYXI2MDAwX3R4X3JldHJ5X2Vycl9ldmVudCh2b2lkICpkZXZ0KQogewpAQCAtNTY2NiwxMyArNTQxNCw5IEBACiBhcjYwMDBfc25yVGhyZXNob2xkRXZlbnRfcngodm9pZCAqZGV2dCwgV01JX1NOUl9USFJFU0hPTERfVkFMIG5ld1RocmVzaG9sZCwgdTggc25yKQogewogICAgIFdNSV9TTlJfVEhSRVNIT0xEX0VWRU5UIGV2ZW50OwotICAgIHN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilkZXZ0OwogCiAgICAgZXZlbnQucmFuZ2UgPSBuZXdUaHJlc2hvbGQ7CiAgICAgZXZlbnQuc25yID0gc25yOwotCi0gICAgYXI2MDAwX3NlbmRfZXZlbnRfdG9fYXBwKGFyLCBXTUlfU05SX1RIUkVTSE9MRF9FVkVOVElELCAodTggKikmZXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihXTUlfU05SX1RIUkVTSE9MRF9FVkVOVCkpOwogfQogCiB2b2lkCkBAIC01OTk5LDkgKzU3NDMsNyBAQAogfQogI2VuZGlmCiAKLSNpZmRlZiBVU0VSX0tFWVMKIHN0YXRpYyBpbnQKLQogYXI2MDAwX3JlaW5zdGFsbF9rZXlzKHN0cnVjdCBhcjZfc29mdGMgKmFyLCB1OCBrZXlfb3BfY3RybCkKIHsKICAgICBpbnQgc3RhdHVzID0gMDsKQEAgLTYwNDYsNyArNTc4OCw2IEBACiAKICAgICByZXR1cm4gc3RhdHVzOwogfQotI2VuZGlmIC8qIFVTRVJfS0VZUyAqLwogCiAKIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvb3MvbGludXgvYXI2MDAwX3BtLmMgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2FyNjAwMF9wbS5jCmluZGV4IDFhOTA0MjQuLjFlMGFjZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvb3MvbGludXgvYXI2MDAwX3BtLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9hcjYwMDBfcG0uYwpAQCAtMzYsOSArMzYsNiBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCB3bWl0aW1lb3V0OwogZXh0ZXJuIHdhaXRfcXVldWVfaGVhZF90IGFyRXZlbnQ7CiAKLSNpZmRlZiBBTkRST0lEX0VOVgotZXh0ZXJuIHZvaWQgYW5kcm9pZF9hcjZrX2NoZWNrX3dvd19zdGF0dXMoc3RydWN0IGFyNl9zb2Z0YyAqYXIsIHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgaXNFdmVudCk7Ci0jZW5kaWYKICN1bmRlZiBBVEhfTU9EVUxFX05BTUUKICNkZWZpbmUgQVRIX01PRFVMRV9OQU1FIHBtCiAjZGVmaW5lICBBVEhfREVCVUdfUE0gICAgICAgQVRIX0RFQlVHX01BS0VfTU9EVUxFX01BU0soMCkKQEAgLTI4MywxMCArMjgwLDYgQEAKICAgICAgICAgLyogV293IHJlc3VtZSBmcm9tIGlycSBpbnRlcnJ1cHQgKi8KICAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19QTSwgKCIlczogV29XIHJlc3VtZSBmcm9tIGlycSB0aHJlYWQgc3RhdHVzICVkXG4iLCBfX2Z1bmNfXywgYXItPmFyV2xhblBvd2VyU3RhdGUpKTsKICAgICAgICAgYXI2MDAwX3dvd19yZXN1bWUoYXIpOwotICAgIH0gZWxzZSB7Ci0jaWZkZWYgQU5EUk9JRF9FTlYKLSAgICAgICAgYW5kcm9pZF9hcjZrX2NoZWNrX3dvd19zdGF0dXMoYXIsIHNrYiwgaXNFdmVudCk7Ci0jZW5kaWYKICAgICB9CiB9CiAKQEAgLTMwOSwzNyArMzAyLDYgQEAKICAgICByZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgaW50IGFyNjAwMF9wbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotICAgIHBsYXRfc2V0dXBfcG93ZXIoMSwxKTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhcjYwMDBfcG1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0gICAgcGxhdF9zZXR1cF9wb3dlcigwLDEpOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFyNjAwMF9wbV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhcjYwMDBfcG1fcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFyNjAwMF9wbV9kZXZpY2UgPSB7Ci0gICAgLnByb2JlICAgICAgPSBhcjYwMDBfcG1fcHJvYmUsCi0gICAgLnJlbW92ZSAgICAgPSBhcjYwMDBfcG1fcmVtb3ZlLAotICAgIC5zdXNwZW5kICAgID0gYXI2MDAwX3BtX3N1c3BlbmQsCi0gICAgLnJlc3VtZSAgICAgPSBhcjYwMDBfcG1fcmVzdW1lLAotICAgIC5kcml2ZXIgICAgID0gewotICAgICAgICAubmFtZSA9ICJ3bGFuX2FyNjAwMF9wbSIsCi0gICAgfSwKLX07CiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKIGludApAQCAtMzU5LDggKzMyMSw2IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHBsYXRfc2V0dXBfcG93ZXIoMSwwKTsKLQogICAgICAgICAgICAgLyogQ2hhbmdlIHRoZSBzdGF0ZSB0byBPTiAqLwogICAgICAgICAgICAgYXItPmFyV2xhblBvd2VyU3RhdGUgPSBXTEFOX1BPV0VSX1NUQVRFX09OOwogCkBAIC0zNzMsMTcgKzMzMyw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihISUZfREVWSUNFX1BPV0VSX0NIQU5HRV9UWVBFKSk7CiAKICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gQV9QRU5ESU5HKSB7Ci0jaWZkZWYgQU5EUk9JRF9FTlYKLSAgICAgICAgICAgICAgICAgLyogV2FpdCBmb3IgV01JIHJlYWR5IGV2ZW50ICovCi0gICAgICAgICAgICAgICAgdTMyIHRpbWVsZWZ0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoYXJFdmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXItPmFyV21pUmVhZHkgPT0gdHJ1ZSksIHdtaXRpbWVvdXQgKiBIWik7Ci0gICAgICAgICAgICAgICAgaWYgKCF0aW1lbGVmdCB8fCBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotICAgICAgICAgICAgICAgICAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX0VSUiwoImFyNjAwMCA6IEZhaWxlZCB0byBnZXQgd21pIHJlYWR5IFxuIikpOwotICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBBX0VSUk9SOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBzdGF0dXMgPSAwOwogICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT0gMCkgewogICAgICAgICAgICAgICAgIGFyNjAwMF9yZXN0YXJ0X2VuZHBvaW50KGFyLT5hck5ldERldik7CiAgICAgICAgICAgICAgICAgc3RhdHVzID0gMDsKQEAgLTQwMyw4ICszNTIsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSElGX0RFVklDRV9QT1dFUl9DSEFOR0VfVFlQRSkpOwogCi0gICAgICAgICAgICBwbGF0X3NldHVwX3Bvd2VyKDAsMCk7Ci0KICAgICAgICAgICAgIGFyLT5hcldsYW5Qb3dlclN0YXRlID0gV0xBTl9QT1dFUl9TVEFURV9DVVRfUFdSOwogICAgICAgICB9CiAgICAgfSB3aGlsZSAoMCk7CkBAIC02NDIsOCArNTg5LDYgQEAKICAgICAgICAgfQogICAgICAgICBpZiAocFNsZWVwRXZlbnQpIHsKICAgICAgICAgICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfUE0sICgiU0VOVCBXTEFOIFNsZWVwIEV2ZW50ICVkXG4iLCB3bWlTbGVlcEV2ZW50LnNsZWVwU3RhdGUpKTsKLSAgICAgICAgICAgIGFyNjAwMF9zZW5kX2V2ZW50X3RvX2FwcChhciwgV01JX1JFUE9SVF9TTEVFUF9TVEFURV9FVkVOVElELCAodTggKilwU2xlZXBFdmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoV01JX1JFUE9SVF9TTEVFUF9TVEFURV9FVkVOVElEKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgdXAoJmFyLT5hclNlbSk7CkBAIC02NzksMjUgKzYyNCwzIEBACiAgICAgc3RhdHVzID0gYXI2MDAwX3VwZGF0ZV93bGFuX3B3cl9zdGF0ZShhciwgc3RhdGUsIGZhbHNlKTsKICAgICByZXR1cm4gc3RhdHVzOwogfQotCi12b2lkIGFyNjAwMF9wbV9pbml0KCkKLXsKLSAgICBBX1JFR0lTVEVSX01PRFVMRV9ERUJVR19JTkZPKHBtKTsKLSNpZmRlZiBDT05GSUdfUE0KLSAgICAvKgotICAgICAqIFJlZ2lzdGVyIGFyNjAwMF9wbV9kZXZpY2UgaW50byBzeXN0ZW0uCi0gICAgICogV2Ugc2hvdWxkIGFsc28gYWRkIHBsYXRmb3JtX2RldmljZSBpbnRvIHRoZSBmaXJzdCBpdGVtIG9mIGFycmF5Ci0gICAgICogb2YgZGV2aWNlc1tdIGluIGZpbGUgYXJjaC94eHgvbWFjaC14eHgvYm9hcmQteHh4eC5jCi0gICAgICovCi0gICAgaWYgKHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXI2MDAwX3BtX2RldmljZSkpIHsKLSAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19FUlIsKCJhcjYwMDA6IGZhaWwgdG8gcmVnaXN0ZXIgdGhlIHBvd2VyIGNvbnRyb2wgZHJpdmVyLlxuIikpOwotICAgIH0KLSNlbmRpZiAvKiBDT05GSUdfUE0gKi8KLX0KLQotdm9pZCBhcjYwMDBfcG1fZXhpdCgpCi17Ci0jaWZkZWYgQ09ORklHX1BNCi0gICAgcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmFyNjAwMF9wbV9kZXZpY2UpOwotI2VuZGlmIC8qIENPTkZJR19QTSAqLwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9hcjZrX3BhbC5jIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9hcjZrX3BhbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjcxNzlhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvb3MvbGludXgvYXI2a19wYWwuYworKysgL2Rldi9udWxsCkBAIC0xLDQ3OSArMCwwIEBACi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ29weXJpZ2h0IChjKSAyMDA0LTIwMTAgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCi0vLyBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIAotLy8KLS8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotLy8gcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLS8vCi0vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLS8vIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLS8vIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0vLyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0vLyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLS8vIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0vLyBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotLy8KLS8vCi0vLwotLy8gQXV0aG9yKHMpOiA9IkF0aGVyb3MiCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jaW5jbHVkZSAiYXI2MDAwX2Rydi5oIgotI2lmZGVmIEFSNktfRU5BQkxFX0hDSV9QQUwKLSNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oPgotI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvaGNpX2NvcmUuaD4KLSNpbmNsdWRlIDxhcjZrX3BhbC5oPgotCi1leHRlcm4gdW5zaWduZWQgaW50IHNldHVwYnRkZXY7Ci0jZGVmaW5lIGJ0X2NoZWNrX2JpdCh2YWwsIGJpdCkgKHZhbCAmIGJpdCkKLSNkZWZpbmUgYnRfc2V0X2JpdCh2YWwsIGJpdCkgKHZhbCB8PSBiaXQpCi0jZGVmaW5lIGJ0X2NsZWFyX2JpdCh2YWwsIGJpdCkgKHZhbCAmPSB+Yml0KQotCi0vKiBleHBvcnQgQVRIX0FSNktfREVCVUdfSENJX1BBTD15ZXMgaW4gaG9zdC9sb2NhbG1ha2UubGludXguaW5jCi0gKiB0byBlbmFibGUgZGVidWcgaW5mb3JtYXRpb24gKi8KLSNpZmRlZiBIQ0lQQUxfREVCVUcKLSNkZWZpbmUgUFJJTl9MT0coZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9BTEVSVCAiJXM6JWQgLSAlcyBNc2c6IiBmb3JtYXQgIlxuIixfX0ZVTkNUSU9OX18sIF9fTElORV9fLCBfX0ZJTEVfXywgIyMgYXJncykgCi0jZWxzZQotI2RlZmluZSBQUklOX0xPRyhmb3JtYXQsIGFyZ3MuLi4pCi0jZW5kaWYKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEhDSSBQQUwgcHJpdmF0ZSBpbmZvIHN0cnVjdHVyZSAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi10eXBlZGVmIHN0cnVjdCBhcjZrX2hjaV9wYWxfaW5mb19zewotCi0JdW5zaWduZWQgbG9uZyB1bEZsYWdzOwotI2RlZmluZSBIQ0lfTk9STUFMX01PREUgKDEpCi0jZGVmaW5lIEhDSV9SRUdJU1RFUkVEICgxPDwxKQotCXN0cnVjdCBoY2lfZGV2ICpoZGV2OyAgICAgICAgICAgIC8qIEJUIFN0YWNrIEhDSSBkZXYgKi8KLQlzdHJ1Y3QgYXI2X3NvZnRjICphcjsKLQotfWFyNmtfaGNpX3BhbF9pbmZvX3Q7Ci0KLS8qKiogQlQgU3RhY2sgRW50cnlwb2ludHMgKioqKioqKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGJ0X29wZW4gLSBvcGVuIGEgaGFuZGxlIHRvIHRoZSBkZXZpY2UKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IGJ0X29wZW4oc3RydWN0IGhjaV9kZXYgKmhkZXYpCi17Ci0JUFJJTl9MT0coIkhDSSBQQUw6IGJ0X29wZW4gLSBlbnRlciAtIHhcbiIpOwotCXNldF9iaXQoSENJX1JVTk5JTkcsICZoZGV2LT5mbGFncyk7Ci0Jc2V0X2JpdChIQ0lfVVAsICZoZGV2LT5mbGFncyk7Ci0Jc2V0X2JpdChIQ0lfSU5JVCwgJmhkZXYtPmZsYWdzKTsgICAgICAgICAKLQlyZXR1cm4gMDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogYnRfY2xvc2UgLSBjbG9zZSBoYW5kbGUgdG8gdGhlIGRldmljZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgYnRfY2xvc2Uoc3RydWN0IGhjaV9kZXYgKmhkZXYpCi17Ci0JUFJJTl9MT0coIkhDSSBQQUw6IGJ0X2Nsb3NlIC0gZW50ZXJcbiIpOwotCWNsZWFyX2JpdChIQ0lfUlVOTklORywgJmhkZXYtPmZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBidF9pb2N0bCAtIGlvY3RsIHByb2Nlc3NpbmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgYnRfaW9jdGwoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCVBSSU5fTE9HKCJIQ0kgUEFMOiBidF9pb2N0bCAtIGVudGVyXG4iKTsKLQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGJ0X2ZsdXNoIC0gZmx1c2ggb3V0c3RhbmRpbmcgcGFja2V0cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBidF9mbHVzaChzdHJ1Y3QgaGNpX2RldiAqaGRldikKLXsKLQlQUklOX0xPRygiSENJIFBBTDogYnRfZmx1c2ggLSBlbnRlclxuIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKioqKioqKioqKioqKioKLSAqIGJ0X2Rlc3RydWN0ICAKLSAqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBidF9kZXN0cnVjdChzdHJ1Y3QgaGNpX2RldiAqaGRldikKLXsKLQlQUklOX0xPRygiSENJIFBBTDogYnRfZGVzdHJ1Y3QgLSBlbnRlclxuIik7Ci0JLyogbm90aGluZyB0byBkbyBoZXJlICovCi19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBJbnZva2VkIGZyb20gYmx1ZXRvb3RoIHN0YWNrIHZpYSBoZGV2LT5zZW5kKCkKLSAqIHRvIHNlbmQgdGhlIHBhY2tldCBvdXQgdmlhIGFyNmsgdG8gUEFMIGZpcm13YXJlLgotICoKLSAqIEZvciBIQ0kgY29tbWFuZCBwYWNrZXQgd21pX3NlbmRfaGNpX2NtZCgpIGlzIGludm9rZWQuCi0gKiB3bWlfc2VuZF9oY2lfY21kIGFkZHMgV01JX0NNRF9IRFIgYW5kIHNlbmRzIHRoZSBwYWNrZXQKLSAqIHRvIFBBTCBmaXJtd2FyZS4KLSAqCi0gKiBGb3IgSENJIEFDTCBkYXRhIHBhY2tldCB3bWlfZGF0YV9oZHJfYWRkIGlzIGludm9rZWQgCi0gKiB0byBhZGQgV01JX0RBVEFfSERSIHRvIHRoZSBwYWNrZXQuICBhcjYwMDBfYWNsX2RhdGFfdHggCi0gKiBpcyB0aGVuIGludm9rZWQgdG8gc2VuZCB0aGUgcGFja2V0IHRvIFBBTCBmaXJtd2FyZS4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IGJ0cGFsX3NlbmRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IChzdHJ1Y3QgaGNpX2RldiAqKXNrYi0+ZGV2OwotCUhDSV9UUkFOU1BPUlRfUEFDS0VUX1RZUEUgdHlwZTsKLQlhcjZrX2hjaV9wYWxfaW5mb190ICpwSGNpUGFsSW5mbzsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqdHhTa2IgPSBOVUxMOwotCXN0cnVjdCBhcjZfc29mdGMgKmFyOwotCi0JaWYgKCFoZGV2KSB7Ci0JCVBSSU5fTE9HKCJIQ0kgUEFMOiBidHBhbF9zZW5kX2ZyYW1lIC0gbm8gZGV2aWNlXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JaWYgKCF0ZXN0X2JpdChIQ0lfUlVOTklORywgJmhkZXYtPmZsYWdzKSkgewotCQlQUklOX0xPRygiSENJIFBBTDogYnRwYWxfc2VuZF9mcmFtZSAtIG5vdCBvcGVuXG4iKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQlwSGNpUGFsSW5mbyA9IChhcjZrX2hjaV9wYWxfaW5mb190ICopaGRldi0+ZHJpdmVyX2RhdGE7ICAgCi0JQV9BU1NFUlQocEhjaVBhbEluZm8gIT0gTlVMTCk7Ci0JYXIgPSBwSGNpUGFsSW5mby0+YXI7Ci0KLQlQUklOX0xPRygiK2J0cGFsX3NlbmRfZnJhbWUgdHlwZTogJWQgXG4iLGJ0X2NiKHNrYiktPnBrdF90eXBlKTsKLQl0eXBlID0gSENJX0NPTU1BTkRfVFlQRTsKLQotCXN3aXRjaCAoYnRfY2Ioc2tiKS0+cGt0X3R5cGUpIHsKLQkJY2FzZSBIQ0lfQ09NTUFORF9QS1Q6Ci0JCQl0eXBlID0gSENJX0NPTU1BTkRfVFlQRTsKLQkJCWhkZXYtPnN0YXQuY21kX3R4Kys7Ci0JCQlicmVhazsKLQotCQljYXNlIEhDSV9BQ0xEQVRBX1BLVDoKLQkJCXR5cGUgPSBIQ0lfQUNMX1RZUEU7Ci0JCQloZGV2LT5zdGF0LmFjbF90eCsrOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBIQ0lfU0NPREFUQV9QS1Q6Ci0JCQkvKiB3ZSBkb24ndCBzdXBwb3J0IFNDTyBvdmVyIHRoZSBwYWwgKi8KLQkJCWtmcmVlX3NrYihza2IpOwotCQkJcmV0dXJuIDA7Ci0JCWRlZmF1bHQ6Ci0JCQlBX0FTU0VSVChmYWxzZSk7Ci0JCQlrZnJlZV9za2Ioc2tiKTsKLQkJCXJldHVybiAwOwotCX0gCi0KLQlpZiAoQVJfREVCVUdfTFZMX0NIRUNLKEFUSF9ERUJVR19IQ0lfRFVNUCkpIHsKLQkJQV9QUklOVEYoIj4+PiBTZW5kIEhDSSAlcyBwYWNrZXQgbGVuOiAlZFxuIiwKLQkJCQkodHlwZSA9PSBIQ0lfQ09NTUFORF9UWVBFKSA/ICJDT01NQU5EIiA6ICJBQ0wiLAotCQkJCXNrYi0+bGVuKTsKLQkJaWYgKHR5cGUgPT0gSENJX0NPTU1BTkRfVFlQRSkgewotCQkJUFJJTl9MT0coIiAgICBIQ0kgQ29tbWFuZDogT0dGOjB4JVggT0NGOjB4JVggXHJcbiIsIAotCQkJCQlIQ0lfR0VUX09QX0NPREUoc2tiLWRhdGEpID4+IDEwLCBIQ0lfR0VUX09QX0NPREUoc2tiLWRhdGEpICYgMHgzRkYpOwotCQl9Ci0JCUFSX0RFQlVHX1BSSU5UQlVGKHNrYi0+ZGF0YSxza2ItPmxlbiwiQlQgSENJIFNFTkQgUGFja2V0IER1bXAiKTsKLQl9Ci0KLQlkbyB7Ci0JCWlmKHR5cGUgPT0gSENJX0NPTU1BTkRfVFlQRSkKLQkJewotCQkJUFJJTl9MT0coIkhDSSBjb21tYW5kIik7Ci0KLQkJCWlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkKLQkJCXsKLQkJCQlQUklOX0xPRygiV01JIG5vdCByZWFkeSAiKTsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJaWYgKHdtaV9zZW5kX2hjaV9jbWQoYXItPmFyV21pLCBza2ItPmRhdGEsIHNrYi0+bGVuKSAhPSAwKQotCQkJewotCQkJCVBSSU5fTE9HKCJzZW5kIGhjaSBjbWQgZXJyb3IiKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQllbHNlIGlmKHR5cGUgPT0gSENJX0FDTF9UWVBFKQotCQl7Ci0JCQl2b2lkICpvc2J1ZjsKLQotCQkJUFJJTl9MT0coIkFDTCBkYXRhIik7Ci0JCQlpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpCi0JCQl7Ci0JCQkJUFJJTl9MT0coIldNSSBub3QgcmVhZHkiKTsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJLyogbmVlZCB0byBhZGQgV01JIGhlYWRlciBzbyBhbGxvY2F0ZSBhIHNrYiB3aXRoIG1vcmUgc3BhY2UgKi8KLQkJCXR4U2tiID0gYnRfc2tiX2FsbG9jKFRYX1BBQ0tFVF9SU1ZfT0ZGU0VUICsgV01JX01BWF9UWF9NRVRBX1NaICsgCi0JCQkJCXNpemVvZihXTUlfREFUQV9IRFIpICsgc2tiLT5sZW4sIAotCQkJCQlHRlBfQVRPTUlDKTsKLQotCQkJaWYgKHR4U2tiID09IE5VTEwpIHsKLQkJCQlzdGF0dXMgPSBBX05PX01FTU9SWTsKLQkJCQlQUklOX0xPRygiTm8gbWVtb3J5Iik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCWJ0X2NiKHR4U2tiKS0+cGt0X3R5cGUgPSBidF9jYihza2IpLT5wa3RfdHlwZTsKLQkJCXR4U2tiLT5kZXYgPSAodm9pZCAqKXBIY2lQYWxJbmZvLT5oZGV2OwotCQkJc2tiX3Jlc2VydmUodHhTa2IsIFRYX1BBQ0tFVF9SU1ZfT0ZGU0VUICsgV01JX01BWF9UWF9NRVRBX1NaICsgc2l6ZW9mKFdNSV9EQVRBX0hEUikpOwotCQkJbWVtY3B5KHR4U2tiLT5kYXRhLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKLQkJCXNrYl9wdXQodHhTa2Isc2tiLT5sZW4pOwotCQkJLyogQWRkIFdNSSBwYWNrZXQgdHlwZSAqLwotCQkJb3NidWYgPSAodm9pZCAqKXR4U2tiOwotCi0JCQlpZiAod21pX2RhdGFfaGRyX2FkZChhci0+YXJXbWksIG9zYnVmLCBEQVRBX01TR1RZUEUsIDAsIFdNSV9EQVRBX0hEUl9EQVRBX1RZUEVfQUNMLDAsTlVMTCkgIT0gMCkgewotCQkJCVBSSU5fTE9HKCJYSU9DVExfQUNMX0RBVEEgLSB3bWlfZGF0YV9oZHJfYWRkIGZhaWxlZFxuIik7Ci0JCQl9IGVsc2UgewotCQkJCS8qIFNlbmQgZGF0YSBidWZmZXIgb3ZlciBIVEMgKi8KLQkJCQlQUklOX0xPRygiYWNsIGRhdGEgdHgiKTsKLQkJCQlhcjYwMDBfYWNsX2RhdGFfdHgob3NidWYsIGFyLT5hck5ldERldik7Ci0JCQl9Ci0JCQl0eFNrYiA9IE5VTEw7Ci0JCX0KLQl9IHdoaWxlIChmYWxzZSk7Ci0KLQlpZiAodHhTa2IgIT0gTlVMTCkgewotCQlQUklOX0xPRygiRnJlZSBza2IiKTsKLQkJa2ZyZWVfc2tiKHR4U2tiKTsgICAgCi0JfQotCWtmcmVlX3NrYihza2IpOyAgICAgICAgCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBVbnJlZ2lzdGVyIEhDSSBkZXZpY2UgYW5kIGZyZWUgSENJIGRldmljZSBpbmZvCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBidF9jbGVhbnVwX2hjaV9wYWwoYXI2a19oY2lfcGFsX2luZm9fdCAqcEhjaVBhbEluZm8pCi17ICAgCi0JaW50IGVycjsgICAgICAKLQotCWlmIChidF9jaGVja19iaXQocEhjaVBhbEluZm8tPnVsRmxhZ3MsIEhDSV9SRUdJU1RFUkVEKSkgewotCQlidF9jbGVhcl9iaXQocEhjaVBhbEluZm8tPnVsRmxhZ3MsIEhDSV9SRUdJU1RFUkVEKTsKLQkJY2xlYXJfYml0KEhDSV9SVU5OSU5HLCAmcEhjaVBhbEluZm8tPmhkZXYtPmZsYWdzKTsKLQkJY2xlYXJfYml0KEhDSV9VUCwgJnBIY2lQYWxJbmZvLT5oZGV2LT5mbGFncyk7Ci0JCWNsZWFyX2JpdChIQ0lfSU5JVCwgJnBIY2lQYWxJbmZvLT5oZGV2LT5mbGFncyk7ICAgCi0JCUFfQVNTRVJUKHBIY2lQYWxJbmZvLT5oZGV2ICE9IE5VTEwpOwotCQkvKiB1bnJlZ2lzdGVyICovCi0JCVBSSU5fTE9HKCJVbnJlZ2lzdGVyIFBBTCBkZXZpY2UiKTsKLQkJaWYgKChlcnIgPSBoY2lfdW5yZWdpc3Rlcl9kZXYocEhjaVBhbEluZm8tPmhkZXYpKSA8IDApIHsKLQkJCVBSSU5fTE9HKCJIQ0kgUEFMOiBmYWlsZWQgdG8gdW5yZWdpc3RlciB3aXRoIGJsdWV0b290aCAlZFxuIixlcnIpOwotCQl9ICAgICAgICAgIAotCX0KLQotCWtmcmVlKHBIY2lQYWxJbmZvLT5oZGV2KTsKLQlwSGNpUGFsSW5mby0+aGRldiA9IE5VTEw7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEFsbG9jYXRlIEhDSSBkZXZpY2UgYW5kIHN0b3JlIGluIFBBTCBwcml2YXRlIGluZm8gc3RydWN0dXJlLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgYnRfc2V0dXBfaGNpX3BhbChhcjZrX2hjaV9wYWxfaW5mb190ICpwSGNpUGFsSW5mbykKLXsKLQlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgaGNpX2RldiAqcEhjaURldiA9IE5VTEw7Ci0KLQlpZiAoIXNldHVwYnRkZXYpIHsKLQkJcmV0dXJuIDA7Ci0JfSAKLQotCWRvIHsKLQkJLyogYWxsb2NhdGUgYSBCVCBIQ0kgc3RydWN0IGZvciB0aGlzIGRldmljZSAqLwotCQlwSGNpRGV2ID0gaGNpX2FsbG9jX2RldigpOwotCQlpZiAoTlVMTCA9PSBwSGNpRGV2KSB7Ci0JCQlQUklOX0xPRygiSENJIFBBTCBkcml2ZXIgLSBmYWlsZWQgdG8gYWxsb2NhdGUgQlQgSENJIHN0cnVjdCBcbiIpOwotCQkJc3RhdHVzID0gQV9OT19NRU1PUlk7Ci0JCQlicmVhazsKLQkJfSAgICAKLQotCQkvKiBzYXZlIHRoZSBkZXZpY2UsIHdlJ2xsIHJlZ2lzdGVyIHRoaXMgbGF0ZXIgKi8KLQkJcEhjaVBhbEluZm8tPmhkZXYgPSBwSGNpRGV2OyAgICAgICAKLSAgICAgICAgICAgICAgICBTRVRfSENJX0JVU19UWVBFKHBIY2lEZXYsIEhDSV9WSVJUVUFMLCBIQ0lfODAyMTEpOwotCQlwSGNpRGV2LT5kcml2ZXJfZGF0YSA9IHBIY2lQYWxJbmZvOwotCQlwSGNpRGV2LT5vcGVuICAgICA9IGJ0X29wZW47Ci0JCXBIY2lEZXYtPmNsb3NlICAgID0gYnRfY2xvc2U7Ci0JCXBIY2lEZXYtPnNlbmQgICAgID0gYnRwYWxfc2VuZF9mcmFtZTsKLQkJcEhjaURldi0+aW9jdGwgICAgPSBidF9pb2N0bDsKLQkJcEhjaURldi0+Zmx1c2ggICAgPSBidF9mbHVzaDsKLQkJcEhjaURldi0+ZGVzdHJ1Y3QgPSBidF9kZXN0cnVjdDsKLQkJcEhjaURldi0+b3duZXIgPSBUSElTX01PRFVMRTsgCi0JCS8qIGRyaXZlciBpcyBydW5uaW5nIGluIG5vcm1hbCBCVCBtb2RlICovCi0JCVBSSU5fTE9HKCJOb3JtYWwgbW9kZSBlbmFibGVkIik7Ci0JCWJ0X3NldF9iaXQocEhjaVBhbEluZm8tPnVsRmxhZ3MsIEhDSV9OT1JNQUxfTU9ERSk7Ci0KLQl9IHdoaWxlIChmYWxzZSk7Ci0KLQlpZiAoc3RhdHVzKSB7Ci0JCWJ0X2NsZWFudXBfaGNpX3BhbChwSGNpUGFsSW5mbyk7ICAgIAotCX0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ2xlYW51cCBIQ0kgZGV2aWNlIGFuZCBmcmVlIEhDSSBQQUwgcHJpdmF0ZSBpbmZvCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZCBhcjZrX2NsZWFudXBfaGNpX3BhbCh2b2lkICphcl9wKQotewotCXN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcl9wOwotCWFyNmtfaGNpX3BhbF9pbmZvX3QgKnBIY2lQYWxJbmZvID0gKGFyNmtfaGNpX3BhbF9pbmZvX3QgKilhci0+aGNpcGFsX2luZm87Ci0KLQlpZiAocEhjaVBhbEluZm8gIT0gTlVMTCkgewotCQlidF9jbGVhbnVwX2hjaV9wYWwocEhjaVBhbEluZm8pOyAgIAotCQlBX0ZSRUUocEhjaVBhbEluZm8pOwotCQlhci0+aGNpcGFsX2luZm8gPSBOVUxMOwotCX0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBSZWdpc3RlciBIQ0kgZGV2aWNlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBib29sIGFyNmtfcGFsX3RyYW5zcG9ydF9yZWFkeSh2b2lkICpwSGNpUGFsKQotewotCWFyNmtfaGNpX3BhbF9pbmZvX3QgKnBIY2lQYWxJbmZvID0gKGFyNmtfaGNpX3BhbF9pbmZvX3QgKilwSGNpUGFsOwotCi0JUFJJTl9MT0coIkhDSSBkZXZpY2UgdHJhbnNwb3J0IHJlYWR5Iik7Ci0JaWYocEhjaVBhbEluZm8gPT0gTlVMTCkKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKGhjaV9yZWdpc3Rlcl9kZXYocEhjaVBhbEluZm8tPmhkZXYpIDwgMCkgewotCQlQUklOX0xPRygiQ2FuJ3QgcmVnaXN0ZXIgSENJIGRldmljZSIpOwotCQloY2lfZnJlZV9kZXYocEhjaVBhbEluZm8tPmhkZXYpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCVBSSU5fTE9HKCJIQ0kgZGV2aWNlIHJlZ2lzdGVyZWQiKTsKLQlwSGNpUGFsSW5mby0+dWxGbGFncyB8PSBIQ0lfUkVHSVNURVJFRDsKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDYWxsZWQgZnJvbSBhcjZrIGRyaXZlciB3aGVuIGNvbW1hbmQgb3IgQUNMIGRhdGEgCi0gKiBwYWNrZXQgaXMgcmVjZWl2ZWQuIFBhc3MgdGhlIHBhY2tldCB0byBibHVldG9vdGgKLSAqIHN0YWNrIHZpYSBoY2lfcmVjdl9mcmFtZS4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWJvb2wgYXI2a19wYWxfcmVjdl9wa3Qodm9pZCAqcEhjaVBhbCwgdm9pZCAqb3NidWYpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKW9zYnVmOwotCWFyNmtfaGNpX3BhbF9pbmZvX3QgKnBIY2lQYWxJbmZvOwotCWJvb2wgc3VjY2VzcyA9IGZhbHNlOwotCXU4IGJ0VHlwZSA9IDA7Ci0JcEhjaVBhbEluZm8gPSAoYXI2a19oY2lfcGFsX2luZm9fdCAqKXBIY2lQYWw7Ci0KLQlkbyB7Ci0KLQkJLyogaWYgbm9ybWFsIG1vZGUgaXMgbm90IGVuYWJsZWQgcGFzcyBvbiB0byB0aGUgc3RhY2sKLQkJICogYnkgcmV0dXJuaW5nIGZhaWx1cmUgKi8KLQkJaWYoIShwSGNpUGFsSW5mby0+dWxGbGFncyAmIEhDSV9OT1JNQUxfTU9ERSkpCi0JCXsKLQkJCVBSSU5fTE9HKCJOb3JtYWwgbW9kZSBub3QgZW5hYmxlZCIpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoIXRlc3RfYml0KEhDSV9SVU5OSU5HLCAmcEhjaVBhbEluZm8tPmhkZXYtPmZsYWdzKSkgewotCQkJUFJJTl9MT0coIkhDSSBQQUw6IEhDSSAtIG5vdCBydW5uaW5nXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYoKigoc2hvcnQgKilBX05FVEJVRl9EQVRBKHNrYikpID09IFdNSV9BQ0xfREFUQV9FVkVOVElEKQotCQkJYnRUeXBlID0gSENJX0FDTERBVEFfUEtUOwotCQllbHNlCi0JCQlidFR5cGUgPSBIQ0lfRVZFTlRfUEtUOwotCQkvKiBwdWxsIDQgYnl0ZXMgd2hpY2ggY29udGFpbnMgV01JIHBhY2tldCB0eXBlICovCi0JCUFfTkVUQlVGX1BVTEwoc2tiLCBzaXplb2YoaW50KSk7Ci0JCWJ0X2NiKHNrYiktPnBrdF90eXBlID0gYnRUeXBlOwotCQlza2ItPmRldiA9ICh2b2lkICopcEhjaVBhbEluZm8tPmhkZXY7Ci0KLQkJLyogcGFzcyB0aGUgcmVjZWl2ZWQgZXZlbnQgcGFja2V0IHVwIHRoZSBzdGFjayAqLyAgICAKLQkJaWYgKGhjaV9yZWN2X2ZyYW1lKHNrYikgIT0gMCkgewotCQkJUFJJTl9MT0coIkhDSSBQQUw6IGhjaV9yZWN2X2ZyYW1lIGZhaWxlZCBcbiIpOwotCQkJYnJlYWs7Ci0JCX0gZWxzZSB7Ci0JCQlQUklOX0xPRygiSENJIFBBTDogSW5kaWNhdGVkIFJDViBvZiB0eXBlOiVkLCBMZW5ndGg6JWQgXG4iLEhDSV9FVkVOVF9QS1QsIHNrYi0+bGVuKTsKLQkJfQotCQlQUklOX0xPRygiaGNpIHJlY3Ygc3VjY2VzcyIpOwotCQlzdWNjZXNzID0gdHJ1ZTsKLQl9d2hpbGUoZmFsc2UpOwotCXJldHVybiBzdWNjZXNzOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogSENJIFBBTCBpbml0IGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGFyNmsgd2hlbiBpdCBpcyBsb2FkZWQuLgotICogQWxsb2NhdGVzIFBBTCBwcml2YXRlIGluZm8sIHN0b3JlcyB0aGUgc2FtZSBpbiBhcjZrIHByaXZhdGUgaW5mby4KLSAqIFJlZ2lzdGVycyBhIEhDSSBkZXZpY2UuCi0gKiBSZWdpc3RlcnMgcGFja2V0IHJlY2VpdmUgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCBhcjZrIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQgYXI2a19zZXR1cF9oY2lfcGFsKHZvaWQgKmFyX3ApCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0JYXI2a19oY2lfcGFsX2luZm9fdCAqcEhjaVBhbEluZm87Ci0JYXI2a19wYWxfY29uZmlnX3QgYXI2a19wYWxfY29uZmlnOwotCXN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcl9wOwotCi0JZG8gewotCi0JCXBIY2lQYWxJbmZvID0gKGFyNmtfaGNpX3BhbF9pbmZvX3QgKilBX01BTExPQyhzaXplb2YoYXI2a19oY2lfcGFsX2luZm9fdCkpOwotCi0JCWlmIChOVUxMID09IHBIY2lQYWxJbmZvKSB7Ci0JCQlzdGF0dXMgPSBBX05PX01FTU9SWTsKLQkJCWJyZWFrOyAgICAKLQkJfQotCi0JCUFfTUVNWkVSTyhwSGNpUGFsSW5mbywgc2l6ZW9mKGFyNmtfaGNpX3BhbF9pbmZvX3QpKTsKLQkJYXItPmhjaXBhbF9pbmZvID0gcEhjaVBhbEluZm87Ci0JCXBIY2lQYWxJbmZvLT5hciA9IGFyOwotCi0JCXN0YXR1cyA9IGJ0X3NldHVwX2hjaV9wYWwocEhjaVBhbEluZm8pOwotCQlpZiAoc3RhdHVzKSB7Ci0JCQlicmVhazsgICAgCi0JCX0KLQotCQlpZihidF9jaGVja19iaXQocEhjaVBhbEluZm8tPnVsRmxhZ3MsIEhDSV9OT1JNQUxfTU9ERSkpCi0JCQlQUklOX0xPRygiSENJIFBBTDogcnVubmluZyBpbiBub3JtYWwgbW9kZS4uLiBcbiIpOyAgICAKLQkJZWxzZSAKLQkJCVBSSU5fTE9HKCJIQ0kgUEFMOiBydW5uaW5nIGluIHRlc3QgbW9kZS4uLiBcbiIpOyAgICAgCi0KLQkJYXI2a19wYWxfY29uZmlnLmZwYXI2a19wYWxfcmVjdl9wa3QgPSBhcjZrX3BhbF9yZWN2X3BrdDsKLQkJcmVnaXN0ZXJfcGFsX2NiKCZhcjZrX3BhbF9jb25maWcpOwotCQlhcjZrX3BhbF90cmFuc3BvcnRfcmVhZHkoYXItPmhjaXBhbF9pbmZvKTsKLQl9IHdoaWxlIChmYWxzZSk7Ci0KLQlpZiAoc3RhdHVzKSB7Ci0JCWFyNmtfY2xlYW51cF9oY2lfcGFsKGFyKTsgICAgCi0JfQotCXJldHVybiBzdGF0dXM7Ci19Ci0jZWxzZSAgLyogQVI2S19FTkFCTEVfSENJX1BBTCAqLwotaW50IGFyNmtfc2V0dXBfaGNpX3BhbCh2b2lkICphcl9wKQotewotCXJldHVybiAwOwotfQotdm9pZCBhcjZrX2NsZWFudXBfaGNpX3BhbCh2b2lkICphcl9wKQotewotfQotI2VuZGlmIC8qIEFSNktfRU5BQkxFX0hDSV9QQUwgKi8KLQotI2lmZGVmIEVYUE9SVF9IQ0lfUEFMX0lOVEVSRkFDRQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSZWdpc3RlciBpbml0IGFuZCBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIGFyNmsKLSAqIHdoZW4gUEFMIGRyaXZlciBpcyBhIHNlcGFyYXRlIGtlcm5lbCBtb2R1bGUuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludCBhcjZrX3JlZ2lzdGVyX2hjaV9wYWwoc3RydWN0IGhjaV90cmFuc3BvcnRfY2FsbGJhY2tzICpoY2lUcmFuc0NhbGxiYWNrcyk7Ci1zdGF0aWMgaW50IF9faW5pdCBwYWxfaW5pdF9tb2R1bGUodm9pZCkKLXsKLQlzdHJ1Y3QgaGNpX3RyYW5zcG9ydF9jYWxsYmFja3MgaGNpVHJhbnNDYWxsYmFja3M7Ci0KLQloY2lUcmFuc0NhbGxiYWNrcy5zZXR1cFRyYW5zcG9ydCA9IGFyNmtfc2V0dXBfaGNpX3BhbDsKLQloY2lUcmFuc0NhbGxiYWNrcy5jbGVhbnVwVHJhbnNwb3J0ID0gYXI2a19jbGVhbnVwX2hjaV9wYWw7Ci0KLQlpZihhcjZrX3JlZ2lzdGVyX2hjaV9wYWwoJmhjaVRyYW5zQ2FsbGJhY2tzKSAhPSAwKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgcGFsX2NsZWFudXBfbW9kdWxlKHZvaWQpCi17Ci19Ci0KLW1vZHVsZV9pbml0KHBhbF9pbml0X21vZHVsZSk7Ci1tb2R1bGVfZXhpdChwYWxfY2xlYW51cF9tb2R1bGUpOwotTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2NmZzgwMjExLmMgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2NmZzgwMjExLmMKaW5kZXggYmNjYTM5NC4uMzFkN2JhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9jZmc4MDIxMS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvb3MvbGludXgvY2ZnODAyMTEuYwpAQCAtMTcyLDYgKzE3MiwxMiBAQAogICAgIGNhc2UgTkw4MDIxMV9BVVRIVFlQRV9ORVRXT1JLX0VBUDoKICAgICAgICAgYXItPmFyRG90MTFBdXRoTW9kZSA9IExFQVBfQVVUSDsKICAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE5MODAyMTFfQVVUSFRZUEVfQVVUT01BVElDOgorICAgICAgICBhci0+YXJEb3QxMUF1dGhNb2RlID0gT1BFTl9BVVRIOworICAgICAgICBhci0+YXJBdXRvQXV0aFN0YWdlID0gQVVUSF9PUEVOX0lOX1BST0dSRVNTOworICAgICAgICBicmVhazsKKwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGFyLT5hckRvdDExQXV0aE1vZGUgPSBPUEVOX0FVVEg7CiAgICAgICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfSU5GTywKQEAgLTQ2MCw2ICs0NjYsOCBAQAogICAgIGFzc29jUmVxTGVuIC09IGFzc29jUmVxSWVPZmZzZXQ7CiAgICAgYXNzb2NSZXNwTGVuIC09IGFzc29jUmVzcEllT2Zmc2V0OwogCisgICAgYXItPmFyQXV0b0F1dGhTdGFnZSA9IEFVVEhfSURMRTsKKwogICAgIGlmKChBREhPQ19ORVRXT1JLICYgbmV0d29ya1R5cGUpKSB7CiAgICAgICAgIGlmKE5MODAyMTFfSUZUWVBFX0FESE9DICE9IGFyLT53ZGV2LT5pZnR5cGUpIHsKICAgICAgICAgICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfSU5GTywKQEAgLTQ4Nyw3NSArNDk1LDg0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFESE9DX05FVFdPUksgJiBuZXR3b3JrVHlwZSkgPyBXTEFOX0NBUEFCSUxJVFlfSUJTUyA6IFdMQU5fQ0FQQUJJTElUWV9FU1MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBREhPQ19ORVRXT1JLICYgbmV0d29ya1R5cGUpID8gV0xBTl9DQVBBQklMSVRZX0lCU1MgOiBXTEFOX0NBUEFCSUxJVFlfRVNTKSk7CiAKLSAgICBpZighYnNzKSB7Ci0gICAgICAgIGlmIChBREhPQ19ORVRXT1JLICYgbmV0d29ya1R5cGUpIHsKKyAgICAvKgorICAgICAqIEVhcmxpZXIgd2Ugd2VyZSB1cGRhdGluZyB0aGUgY2ZnIGFib3V0IGJzcyBieSBtYWtpbmcgYSBiZWFjb24gZnJhbWUKKyAgICAgKiBvbmx5IGlmIHRoZSBlbnRyeSBmb3IgYnNzIGlzIG5vdCB0aGVyZS4gVGhpcyBjYW4gaGF2ZSBzb21lIGlzc3VlIGlmCisgICAgICogUk9BTSBldmVudCBpcyBnZW5lcmF0ZWQgYW5kIGEgaGVhdnkgdHJhZmZpYyBpcyBvbmdvaW5nLiBUaGUgUk9BTQorICAgICAqIGV2ZW50IGlzIGhhbmRsZWQgdGhyb3VnaCBhIHdvcmsgcXVldWUgYW5kIGJ5IHRoZSB0aW1lIGl0IHJlYWxseSBnZXRzCisgICAgICogaGFuZGxlZCwgQlNTIHdvdWxkIGhhdmUgYmVlbiBhZ2VkIG91dC4gU28gaXQgaXMgYmV0dGVyIHRvIHVwZGF0ZSB0aGUKKyAgICAgKiBjZmcgYWJvdXQgQlNTIGlycmVzcGVjdGl2ZSBvZiBpdHMgZW50cnkgYmVpbmcgcHJlc2VudCByaWdodCBub3cgb3IKKyAgICAgKiBub3QuCisgICAgICovCisKKyAgICBpZiAoQURIT0NfTkVUV09SSyAmIG5ldHdvcmtUeXBlKSB7CiAgICAgICAgICAgICAvKiBjb25zdHJ1Y3QgODAyLjExIG1nbXQgYmVhY29uICovCiAgICAgICAgICAgICBpZihwdHJfaWVfYnVmKSB7Ci0gICAgICAgICAgICAgICAgKnB0cl9pZV9idWYrKyA9IFdMQU5fRUlEX1NTSUQ7Ci0gICAgICAgICAgICAgICAgKnB0cl9pZV9idWYrKyA9IGFyLT5hclNzaWRMZW47Ci0gICAgICAgICAgICAgICAgbWVtY3B5KHB0cl9pZV9idWYsIGFyLT5hclNzaWQsIGFyLT5hclNzaWRMZW4pOwotICAgICAgICAgICAgICAgIHB0cl9pZV9idWYgKz1hci0+YXJTc2lkTGVuOworCQkgICAgKnB0cl9pZV9idWYrKyA9IFdMQU5fRUlEX1NTSUQ7CisJCSAgICAqcHRyX2llX2J1ZisrID0gYXItPmFyU3NpZExlbjsKKwkJICAgIG1lbWNweShwdHJfaWVfYnVmLCBhci0+YXJTc2lkLCBhci0+YXJTc2lkTGVuKTsKKwkJICAgIHB0cl9pZV9idWYgKz1hci0+YXJTc2lkTGVuOwogCi0gICAgICAgICAgICAgICAgKnB0cl9pZV9idWYrKyA9IFdMQU5fRUlEX0lCU1NfUEFSQU1TOwotICAgICAgICAgICAgICAgICpwdHJfaWVfYnVmKysgPSAyOyAvKiBsZW5ndGggKi8KLSAgICAgICAgICAgICAgICAqcHRyX2llX2J1ZisrID0gMDsgLyogQVRJTSB3aW5kb3cgKi8KLSAgICAgICAgICAgICAgICAqcHRyX2llX2J1ZisrID0gMDsgLyogQVRJTSB3aW5kb3cgKi8KKwkJICAgICpwdHJfaWVfYnVmKysgPSBXTEFOX0VJRF9JQlNTX1BBUkFNUzsKKwkJICAgICpwdHJfaWVfYnVmKysgPSAyOyAvKiBsZW5ndGggKi8KKwkJICAgICpwdHJfaWVfYnVmKysgPSAwOyAvKiBBVElNIHdpbmRvdyAqLworCQkgICAgKnB0cl9pZV9idWYrKyA9IDA7IC8qIEFUSU0gd2luZG93ICovCiAKLSAgICAgICAgICAgICAgICAvKiBUT0RPOiB1cGRhdGUgaWJzcyBwYXJhbXMgYW5kIGluY2x1ZGUgc3VwcG9ydGVkIHJhdGVzLAotICAgICAgICAgICAgICAgICAqIERTIHBhcmFtIHNldCwgZXh0ZW5lZCBzdXBwb3J0IHJhdGVzLCB3bW0uICovCisJCSAgICAvKiBUT0RPOiB1cGRhdGUgaWJzcyBwYXJhbXMgYW5kIGluY2x1ZGUgc3VwcG9ydGVkIHJhdGVzLAorCQkgICAgICogRFMgcGFyYW0gc2V0LCBleHRlbmVkIHN1cHBvcnQgcmF0ZXMsIHdtbS4gKi8KIAotICAgICAgICAgICAgICAgIGllX2J1Zl9sZW4gPSBwdHJfaWVfYnVmIC0gaWVfYnVmOworCQkgICAgaWVfYnVmX2xlbiA9IHB0cl9pZV9idWYgLSBpZV9idWY7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNhcGFiaWxpdHkgfD0gSUVFRTgwMjExX0NBUElORk9fSUJTUzsKICAgICAgICAgICAgIGlmKFdFUF9DUllQVCA9PSBhci0+YXJQYWlyd2lzZUNyeXB0bykgewotICAgICAgICAgICAgICAgIGNhcGFiaWxpdHkgfD0gSUVFRTgwMjExX0NBUElORk9fUFJJVkFDWTsKKwkJICAgIGNhcGFiaWxpdHkgfD0gSUVFRTgwMjExX0NBUElORk9fUFJJVkFDWTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1lbWNweShzb3VyY2VfbWFjLCBhci0+YXJOZXREZXYtPmRldl9hZGRyLCBBVEhfTUFDX0xFTik7CiAgICAgICAgICAgICBwdHJfaWVfYnVmID0gaWVfYnVmOwotICAgICAgICB9IGVsc2UgeworICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBjYXBhYmlsaXR5ID0gKih1MTYgKikoJmFzc29jSW5mb1tiZWFjb25JZUxlbl0pOwogICAgICAgICAgICAgbWVtY3B5KHNvdXJjZV9tYWMsIGJzc2lkLCBBVEhfTUFDX0xFTik7CiAgICAgICAgICAgICBwdHJfaWVfYnVmID0gYXNzb2NSZXFJZTsKICAgICAgICAgICAgIGllX2J1Zl9sZW4gPSBhc3NvY1JlcUxlbjsKLSAgICAgICAgfQorICAgIH0KIAotICAgICAgICBzaXplID0gb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LCB1KQotICAgICAgICAgICAgICsgc2l6ZW9mKG1nbXQtPnUuYmVhY29uKQotICAgICAgICAgICAgICsgaWVfYnVmX2xlbjsKKyAgICBzaXplID0gb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LCB1KQorCSAgICArIHNpemVvZihtZ210LT51LmJlYWNvbikKKwkgICAgKyBpZV9idWZfbGVuOwogCi0gICAgICAgIGllZWVtZ210YnVmID0gQV9NQUxMT0NfTk9XQUlUKHNpemUpOwotICAgICAgICBpZighaWVlZW1nbXRidWYpIHsKKyAgICBpZWVlbWdtdGJ1ZiA9IEFfTUFMTE9DX05PV0FJVChzaXplKTsKKyAgICBpZighaWVlZW1nbXRidWYpIHsKICAgICAgICAgICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfRVJSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiJXM6IGllZWVNZ210YnVmIGFsbG9jIGVycm9yXG4iLCBfX2Z1bmNfXykpOworCSAgICBjZmc4MDIxMV9wdXRfYnNzKGJzcyk7CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBBX01FTVpFUk8oaWVlZW1nbXRidWYsIHNpemUpOwotICAgICAgICBtZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKWllZWVtZ210YnVmOwotICAgICAgICBtZ210LT5mcmFtZV9jb250cm9sID0gKElFRUU4MDIxMV9GVFlQRV9NR01UIHwgSUVFRTgwMjExX1NUWVBFX0JFQUNPTik7Ci0gICAgICAgIG1lbWNweShtZ210LT5kYSwgYmNhc3RfbWFjLCBBVEhfTUFDX0xFTik7Ci0gICAgICAgIG1lbWNweShtZ210LT5zYSwgc291cmNlX21hYywgQVRIX01BQ19MRU4pOwotICAgICAgICBtZW1jcHkobWdtdC0+YnNzaWQsIGJzc2lkLCBBVEhfTUFDX0xFTik7Ci0gICAgICAgIG1nbXQtPnUuYmVhY29uLmJlYWNvbl9pbnQgPSBiZWFjb25JbnRlcnZhbDsKLSAgICAgICAgbWdtdC0+dS5iZWFjb24uY2FwYWJfaW5mbyA9IGNhcGFiaWxpdHk7Ci0gICAgICAgIG1lbWNweShtZ210LT51LmJlYWNvbi52YXJpYWJsZSwgcHRyX2llX2J1ZiwgaWVfYnVmX2xlbik7Ci0KLSAgICAgICAgaWJzc19jaGFubmVsID0gaWVlZTgwMjExX2dldF9jaGFubmVsKGFyLT53ZGV2LT53aXBoeSwgKGludCljaGFubmVsKTsKLQotCUFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfSU5GTywKLQkJKCIlczogaW5mb3JtIGJzcyB3aXRoIGJzc2lkICVwTSBjaGFubmVsICVkIGJlYWNvbkludGVydmFsICVkICIKLQkJCSJjYXBhYmlsaXR5IDB4JXhcbiIsIF9fZnVuY19fLCBtZ210LT5ic3NpZCwKLQkJCWlic3NfY2hhbm5lbC0+aHdfdmFsdWUsIGJlYWNvbkludGVydmFsLCBjYXBhYmlsaXR5KSk7Ci0KLSAgICAgICAgYnNzID0gY2ZnODAyMTFfaW5mb3JtX2Jzc19mcmFtZShhci0+d2Rldi0+d2lwaHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWJzc19jaGFubmVsLCBtZ210LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlMTZfdG9fY3B1KHNpemUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbCwgR0ZQX0tFUk5FTCk7Ci0gICAgICAgIEFfRlJFRShpZWVlbWdtdGJ1Zik7Ci0gICAgICAgIGNmZzgwMjExX3B1dF9ic3MoYnNzKTsKICAgICB9CiAKKyAgICBBX01FTVpFUk8oaWVlZW1nbXRidWYsIHNpemUpOworICAgIG1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopaWVlZW1nbXRidWY7CisgICAgbWdtdC0+ZnJhbWVfY29udHJvbCA9IChJRUVFODAyMTFfRlRZUEVfTUdNVCB8IElFRUU4MDIxMV9TVFlQRV9CRUFDT04pOworICAgIG1lbWNweShtZ210LT5kYSwgYmNhc3RfbWFjLCBBVEhfTUFDX0xFTik7CisgICAgbWVtY3B5KG1nbXQtPnNhLCBzb3VyY2VfbWFjLCBBVEhfTUFDX0xFTik7CisgICAgbWVtY3B5KG1nbXQtPmJzc2lkLCBic3NpZCwgQVRIX01BQ19MRU4pOworICAgIG1nbXQtPnUuYmVhY29uLmJlYWNvbl9pbnQgPSBiZWFjb25JbnRlcnZhbDsKKyAgICBtZ210LT51LmJlYWNvbi5jYXBhYl9pbmZvID0gY2FwYWJpbGl0eTsKKyAgICBtZW1jcHkobWdtdC0+dS5iZWFjb24udmFyaWFibGUsIHB0cl9pZV9idWYsIGllX2J1Zl9sZW4pOworCisgICAgaWJzc19jaGFubmVsID0gaWVlZTgwMjExX2dldF9jaGFubmVsKGFyLT53ZGV2LT53aXBoeSwgKGludCljaGFubmVsKTsKKworICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfSU5GTywKKwkJICAgICgiJXM6IGluZm9ybSBic3Mgd2l0aCBic3NpZCAlcE0gY2hhbm5lbCAlZCBiZWFjb25JbnRlcnZhbCAlZCAiCisJCSAgICAgImNhcGFiaWxpdHkgMHgleFxuIiwgX19mdW5jX18sIG1nbXQtPmJzc2lkLAorCQkgICAgIGlic3NfY2hhbm5lbC0+aHdfdmFsdWUsIGJlYWNvbkludGVydmFsLCBjYXBhYmlsaXR5KSk7CisKKyAgICBic3MgPSBjZmc4MDIxMV9pbmZvcm1fYnNzX2ZyYW1lKGFyLT53ZGV2LT53aXBoeSwKKwkJCQkgICAgaWJzc19jaGFubmVsLCBtZ210LAorCQkJCSAgICBsZTE2X3RvX2NwdShzaXplKSwKKwkJCQkgICAgc2lnbmFsLCBHRlBfS0VSTkVMKTsKKyAgICBrZnJlZShpZWVlbWdtdGJ1Zik7CisgICAgY2ZnODAyMTFfcHV0X2Jzcyhic3MpOworCiAgICAgaWYoKEFESE9DX05FVFdPUksgJiBuZXR3b3JrVHlwZSkpIHsKICAgICAgICAgY2ZnODAyMTFfaWJzc19qb2luZWQoYXItPmFyTmV0RGV2LCBic3NpZCwgR0ZQX0tFUk5FTCk7CiAgICAgICAgIHJldHVybjsKQEAgLTYyNSw4ICs2NDIsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCAqYXNzb2NJbmZvLCB1MTYgcHJvdG9jb2xSZWFzb25TdGF0dXMpCiB7CiAKKyAgICB1MTYgc3RhdHVzOworCiAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19JTkZPLCAoIiVzOiByZWFzb249JXVcbiIsIF9fZnVuY19fLCByZWFzb24pKTsKIAorICAgIGlmIChhci0+c2Nhbl9yZXF1ZXN0KSB7CisJY2ZnODAyMTFfc2Nhbl9kb25lKGFyLT5zY2FuX3JlcXVlc3QsIHRydWUpOworICAgICAgICBhci0+c2Nhbl9yZXF1ZXN0ID0gTlVMTDsKKyAgICB9CiAgICAgaWYoKEFESE9DX05FVFdPUksgJiBhci0+YXJOZXR3b3JrVHlwZSkpIHsKICAgICAgICAgaWYoTkw4MDIxMV9JRlRZUEVfQURIT0MgIT0gYXItPndkZXYtPmlmdHlwZSkgewogICAgICAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19JTkZPLApAQCAtNjUxLDIzICs2NzQsNzAgQEAKICAgICAgICAgICAgIC8qIGNvbm5lY3QgY21kIGZhaWxlZCAqLwogICAgICAgICAgICAgd21pX2Rpc2Nvbm5lY3RfY21kKGFyLT5hcldtaSk7CiAgICAgICAgIH0gZWxzZSBpZiAocmVhc29uID09IERJU0NPTk5FQ1RfQ01EKSB7Ci0gICAgICAgICAgICAvKiBjb25uZWN0aW9uIGxvc3MgZHVlIHRvIGRpc2Nvbm5lY3QgY21kIG9yIGxvdyByc3NpICovCi0gICAgICAgICAgICBhci0+YXJDb25uZWN0UGVuZGluZyA9IGZhbHNlOyAgIAotICAgICAgICAgICAgaWYgKGFyLT5zbWVTdGF0ZSA9PSBTTUVfQ09OTkVDVElORykgewotICAgICAgICAgICAgICAgIGNmZzgwMjExX2Nvbm5lY3RfcmVzdWx0KGFyLT5hck5ldERldiwgYnNzaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdMQU5fU1RBVFVTX1VOU1BFQ0lGSUVEX0ZBSUxVUkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0ZQX0tFUk5FTCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNmZzgwMjExX2Rpc2Nvbm5lY3RlZChhci0+YXJOZXREZXYsIHJlYXNvbiwgTlVMTCwgMCwgR0ZQX0tFUk5FTCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhci0+c21lU3RhdGUgPSBTTUVfRElTQ09OTkVDVEVEOwotICAgICAgICB9CisJCWlmIChhci0+YXJBdXRvQXV0aFN0YWdlKSB7CisJCQkvKgorCQkJICogSWYgdGhlIGN1cnJlbnQgYXV0aCBhbGdvcml0aG0gaXMgb3BlbiB0cnkgc2hhcmVkCisJCQkgKiBhbmQgbWFrZSBhdXRvQXV0aFN0YWdlIGlkbGUuIFdlIGRvIG5vdCBtYWtlIGl0CisJCQkgKiBsZWFwIGZvciBub3cgYmVpbmcuCisJCQkgKi8KKwkJCWlmIChhci0+YXJEb3QxMUF1dGhNb2RlID09IE9QRU5fQVVUSCkgeworCQkJCXN0cnVjdCBhcl9rZXkgKmtleSA9IE5VTEw7CisJCQkJa2V5ID0gJmFyLT5rZXlzW2FyLT5hckRlZlR4S2V5SW5kZXhdOworCQkJCWlmIChkb3duX2ludGVycnVwdGlibGUoJmFyLT5hclNlbSkpIHsKKwkJCQkJQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19FUlIsICgiJXM6IGJ1c3ksIGNvdWxkbid0IGdldCBhY2Nlc3NcbiIsIF9fZnVuY19fKSk7CisJCQkJCXJldHVybjsKKwkJCQl9CisKKworCQkJCWFyLT5hckRvdDExQXV0aE1vZGUgPSBTSEFSRURfQVVUSDsKKwkJCQlhci0+YXJBdXRvQXV0aFN0YWdlID0gQVVUSF9JRExFOworCisJCQkJd21pX2FkZEtleV9jbWQoYXItPmFyV21pLCBhci0+YXJEZWZUeEtleUluZGV4LAorCQkJCQkJYXItPmFyUGFpcndpc2VDcnlwdG8sCisJCQkJCQlHUk9VUF9VU0FHRSB8IFRYX1VTQUdFLAorCQkJCQkJa2V5LT5rZXlfbGVuLAorCQkJCQkJTlVMTCwKKwkJCQkJCWtleS0+a2V5LCBLRVlfT1BfSU5JVF9WQUwsIE5VTEwsCisJCQkJCQlOT19TWU5DX1dNSUZMQUcpOworCisJCQkJc3RhdHVzID0gd21pX2Nvbm5lY3RfY21kKGFyLT5hcldtaSwKKwkJCQkJCQkgYXItPmFyTmV0d29ya1R5cGUsCisJCQkJCQkJIGFyLT5hckRvdDExQXV0aE1vZGUsCisJCQkJCQkJIGFyLT5hckF1dGhNb2RlLAorCQkJCQkJCSBhci0+YXJQYWlyd2lzZUNyeXB0bywKKwkJCQkJCQkgYXItPmFyUGFpcndpc2VDcnlwdG9MZW4sCisJCQkJCQkJIGFyLT5hckdyb3VwQ3J5cHRvLAorCQkJCQkJCSBhci0+YXJHcm91cENyeXB0b0xlbiwKKwkJCQkJCQkgYXItPmFyU3NpZExlbiwKKwkJCQkJCQkgYXItPmFyU3NpZCwKKwkJCQkJCQkgYXItPmFyUmVxQnNzaWQsCisJCQkJCQkJIGFyLT5hckNoYW5uZWxIaW50LAorCQkJCQkJCSBhci0+YXJDb25uZWN0Q3RybEZsYWdzKTsKKwkJCQl1cCgmYXItPmFyU2VtKTsKKworCQkJfSBlbHNlIGlmIChhci0+YXJEb3QxMUF1dGhNb2RlID09IFNIQVJFRF9BVVRIKSB7CisJCQkJLyogc2hvdWxkIG5vdCByZWFjaCBoZXJlICovCisJCQl9CisJCX0gZWxzZSB7CisJCQlhci0+YXJDb25uZWN0UGVuZGluZyA9IGZhbHNlOworCQkJaWYgKGFyLT5zbWVTdGF0ZSA9PSBTTUVfQ09OTkVDVElORykgeworCQkJCWNmZzgwMjExX2Nvbm5lY3RfcmVzdWx0KGFyLT5hck5ldERldiwgYnNzaWQsCisJCQkJCQkJTlVMTCwgMCwKKwkJCQkJCQlOVUxMLCAwLAorCQkJCQkJCVdMQU5fU1RBVFVTX1VOU1BFQ0lGSUVEX0ZBSUxVUkUsCisJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCQl9IGVsc2UgeworCQkJCWNmZzgwMjExX2Rpc2Nvbm5lY3RlZChhci0+YXJOZXREZXYsCisJCQkJCQkgICAgICByZWFzb24sCisJCQkJCQkgICAgICBOVUxMLCAwLAorCQkJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJCQl9CisJCQlhci0+c21lU3RhdGUgPSBTTUVfRElTQ09OTkVDVEVEOworCQl9CisJfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChyZWFzb24gIT0gRElTQ09OTkVDVF9DTUQpIHsKLSAgICAgICAgICAgIHdtaV9kaXNjb25uZWN0X2NtZChhci0+YXJXbWkpOwotICAgICAgICB9CisJICAgIGlmIChyZWFzb24gIT0gRElTQ09OTkVDVF9DTUQpCisJCSAgICB3bWlfZGlzY29ubmVjdF9jbWQoYXItPmFyV21pKTsKICAgICB9CiB9CiAKQEAgLTcyOSw3ICs3OTksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGUxNl90b19jcHUoc2l6ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWwsIEdGUF9LRVJORUwpOwogCi0gICAgQV9GUkVFIChpZWVlbWdtdGJ1Zik7CisgICAga2ZyZWUgKGllZWVtZ210YnVmKTsKIH0KIAogc3RhdGljIGludApAQCAtMTIwNSwxMCArMTI3NSwxMCBAQAogCiAgICAgaWYocG1nbXQpIHsKICAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19JTkZPLCAoIiVzOiBNYXggUGVyZlxuIiwgX19mdW5jX18pKTsKLSAgICAgICAgcHdyTW9kZS5wb3dlck1vZGUgPSBNQVhfUEVSRl9QT1dFUjsKKyAgICAgICAgcHdyTW9kZS5wb3dlck1vZGUgPSBSRUNfUE9XRVI7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19JTkZPLCAoIiVzOiBSZWMgUG93ZXJcbiIsIF9fZnVuY19fKSk7Ci0gICAgICAgIHB3ck1vZGUucG93ZXJNb2RlID0gUkVDX1BPV0VSOworICAgICAgICBwd3JNb2RlLnBvd2VyTW9kZSA9IE1BWF9QRVJGX1BPV0VSOwogICAgIH0KIAogICAgIGlmKHdtaV9wb3dlcm1vZGVfY21kKGFyLT5hcldtaSwgcHdyTW9kZS5wb3dlck1vZGUpICE9IDApIHsKQEAgLTEzOTEsNiArMTQ2MSwxNTEgQEAKICAgICBXTEFOX0NJUEhFUl9TVUlURV9DQ01QLAogfTsKIAorYm9vbCBpc19yYXRlX2xlZ2FjeShzMzIgcmF0ZSkKK3sKKwlzdGF0aWMgY29uc3QgczMyIGxlZ2FjeVtdID0geyAxMDAwLCAyMDAwLCA1NTAwLCAxMTAwMCwKKwkJCQkgICAgICA2MDAwLCA5MDAwLCAxMjAwMCwgMTgwMDAsIDI0MDAwLAorCQkJCSAgICAgIDM2MDAwLCA0ODAwMCwgNTQwMDAgfTsKKwl1OCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobGVnYWN5KTsgaSsrKSB7CisJCWlmIChyYXRlID09IGxlZ2FjeVtpXSkKKwkJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworYm9vbCBpc19yYXRlX2h0MjAoczMyIHJhdGUsIHU4ICptY3MsIGJvb2wgKnNnaSkKK3sKKwlzdGF0aWMgY29uc3QgczMyIGh0MjBbXSA9IHsgNjUwMCwgMTMwMDAsIDE5NTAwLCAyNjAwMCwgMzkwMDAsCisJCQkJICAgIDUyMDAwLCA1ODUwMCwgNjUwMDAsIDcyMjAwIH07CisJdTggaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGh0MjApOyBpKyspIHsKKwkJaWYgKHJhdGUgPT0gaHQyMFtpXSkgeworCQkJaWYgKGkgPT0gQVJSQVlfU0laRShodDIwKSAtIDEpCisJCQkJLyogbGFzdCByYXRlIHVzZXMgc2dpICovCisJCQkJKnNnaSA9IHRydWU7CisJCQllbHNlCisJCQkJKnNnaSA9IGZhbHNlOworCisJCQkqbWNzID0gaTsKKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCXJldHVybiBmYWxzZTsKK30KKworYm9vbCBpc19yYXRlX2h0NDAoczMyIHJhdGUsIHU4ICptY3MsIGJvb2wgKnNnaSkKK3sKKwlzdGF0aWMgY29uc3QgczMyIGh0NDBbXSA9IHsgMTM1MDAsIDI3MDAwLCA0MDUwMCwgNTQwMDAsCisJCQkJICAgIDgxMDAwLCAxMDgwMDAsIDEyMTUwMCwgMTM1MDAwLAorCQkJCSAgICAxNTAwMDAgfTsKKwl1OCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaHQ0MCk7IGkrKykgeworCQlpZiAocmF0ZSA9PSBodDQwW2ldKSB7CisJCQlpZiAoaSA9PSBBUlJBWV9TSVpFKGh0NDApIC0gMSkKKwkJCQkvKiBsYXN0IHJhdGUgdXNlcyBzZ2kgKi8KKwkJCQkqc2dpID0gdHJ1ZTsKKwkJCWVsc2UKKwkJCQkqc2dpID0gZmFsc2U7CisKKwkJCSptY3MgPSBpOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQgYXI2a19nZXRfc3RhdGlvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgIHU4ICptYWMsIHN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvKQoreworCXN0cnVjdCBhcjZfc29mdGMgKmFyID0gYXI2a19wcml2KGRldik7CisJbG9uZyBsZWZ0OworCWJvb2wgc2dpOworCXMzMiByYXRlOworCWludCByZXQ7CisJdTggbWNzOworCisJaWYgKG1lbWNtcChtYWMsIGFyLT5hckJzc2lkLCBFVEhfQUxFTikgIT0gMCkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZhci0+YXJTZW0pKQorCQlyZXR1cm4gLUVCVVNZOworCisJYXItPnN0YXRzVXBkYXRlUGVuZGluZyA9IHRydWU7CisKKwlyZXQgPSB3bWlfZ2V0X3N0YXRzX2NtZChhci0+YXJXbWkpOworCisJaWYgKHJldCAhPSAwKSB7CisJCXVwKCZhci0+YXJTZW0pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlsZWZ0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoYXJFdmVudCwKKwkJCQkJCWFyLT5zdGF0c1VwZGF0ZVBlbmRpbmcgPT0gZmFsc2UsCisJCQkJCQl3bWl0aW1lb3V0ICogSFopOworCisJdXAoJmFyLT5hclNlbSk7CisKKwlpZiAobGVmdCA9PSAwKQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwllbHNlIGlmIChsZWZ0IDwgMCkKKwkJcmV0dXJuIGxlZnQ7CisKKwlpZiAoYXItPmFyVGFyZ2V0U3RhdHMucnhfYnl0ZXMpIHsKKwkJc2luZm8tPnJ4X2J5dGVzID0gYXItPmFyVGFyZ2V0U3RhdHMucnhfYnl0ZXM7CisJCXNpbmZvLT5maWxsZWQgfD0gU1RBVElPTl9JTkZPX1JYX0JZVEVTOworCQlzaW5mby0+cnhfcGFja2V0cyA9IGFyLT5hclRhcmdldFN0YXRzLnJ4X3BhY2tldHM7CisJCXNpbmZvLT5maWxsZWQgfD0gU1RBVElPTl9JTkZPX1JYX1BBQ0tFVFM7CisJfQorCisJaWYgKGFyLT5hclRhcmdldFN0YXRzLnR4X2J5dGVzKSB7CisJCXNpbmZvLT50eF9ieXRlcyA9IGFyLT5hclRhcmdldFN0YXRzLnR4X2J5dGVzOworCQlzaW5mby0+ZmlsbGVkIHw9IFNUQVRJT05fSU5GT19UWF9CWVRFUzsKKwkJc2luZm8tPnR4X3BhY2tldHMgPSBhci0+YXJUYXJnZXRTdGF0cy50eF9wYWNrZXRzOworCQlzaW5mby0+ZmlsbGVkIHw9IFNUQVRJT05fSU5GT19UWF9QQUNLRVRTOworCX0KKworCXNpbmZvLT5zaWduYWwgPSBhci0+YXJUYXJnZXRTdGF0cy5jc19yc3NpOworCXNpbmZvLT5maWxsZWQgfD0gU1RBVElPTl9JTkZPX1NJR05BTDsKKworCXJhdGUgPSBhci0+YXJUYXJnZXRTdGF0cy50eF91bmljYXN0X3JhdGU7CisKKwlpZiAoaXNfcmF0ZV9sZWdhY3kocmF0ZSkpIHsKKwkJc2luZm8tPnR4cmF0ZS5sZWdhY3kgPSByYXRlIC8gMTAwOworCX0gZWxzZSBpZiAoaXNfcmF0ZV9odDIwKHJhdGUsICZtY3MsICZzZ2kpKSB7CisJCWlmIChzZ2kpIHsKKwkJCXNpbmZvLT50eHJhdGUuZmxhZ3MgfD0gUkFURV9JTkZPX0ZMQUdTX1NIT1JUX0dJOworCQkJc2luZm8tPnR4cmF0ZS5tY3MgPSBtY3MgLSAxOworCQl9IGVsc2UgeworCQkJc2luZm8tPnR4cmF0ZS5tY3MgPSBtY3M7CisJCX0KKworCQlzaW5mby0+dHhyYXRlLmZsYWdzIHw9IFJBVEVfSU5GT19GTEFHU19NQ1M7CisJfSBlbHNlIGlmIChpc19yYXRlX2h0NDAocmF0ZSwgJm1jcywgJnNnaSkpIHsKKwkJaWYgKHNnaSkgeworCQkJc2luZm8tPnR4cmF0ZS5mbGFncyB8PSBSQVRFX0lORk9fRkxBR1NfU0hPUlRfR0k7CisJCQlzaW5mby0+dHhyYXRlLm1jcyA9IG1jcyAtIDE7CisJCX0gZWxzZSB7CisJCQlzaW5mby0+dHhyYXRlLm1jcyA9IG1jczsKKwkJfQorCisJCXNpbmZvLT50eHJhdGUuZmxhZ3MgfD0gUkFURV9JTkZPX0ZMQUdTXzQwX01IWl9XSURUSDsKKwkJc2luZm8tPnR4cmF0ZS5mbGFncyB8PSBSQVRFX0lORk9fRkxBR1NfTUNTOworCX0gZWxzZSB7CisJCVdBUk4oMSwgImludmFsaWQgcmF0ZTogJWQiLCByYXRlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc2luZm8tPmZpbGxlZCB8PSBTVEFUSU9OX0lORk9fVFhfQklUUkFURTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0CiBjZmc4MDIxMV9vcHMgYXI2a19jZmc4MDIxMV9vcHMgPSB7CiAgICAgLmNoYW5nZV92aXJ0dWFsX2ludGYgPSBhcjZrX2NmZzgwMjExX2NoYW5nZV9pZmFjZSwKQEAgLTE0MTEsNiArMTYyNiw3IEBACiAgICAgLnNldF9wb3dlcl9tZ210ID0gYXI2a19jZmc4MDIxMV9zZXRfcG93ZXJfbWdtdCwKICAgICAuam9pbl9pYnNzID0gYXI2a19jZmc4MDIxMV9qb2luX2lic3MsCiAgICAgLmxlYXZlX2lic3MgPSBhcjZrX2NmZzgwMjExX2xlYXZlX2lic3MsCisgICAgLmdldF9zdGF0aW9uID0gYXI2a19nZXRfc3RhdGlvbiwKIH07CiAKIHN0cnVjdCB3aXJlbGVzc19kZXYgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9lZXByb20uYyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvb3MvbGludXgvZWVwcm9tLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjZmY5ZGEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9lZXByb20uYworKysgL2Rldi9udWxsCkBAIC0xLDU3NCArMCwwIEBACi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ29weXJpZ2h0IChjKSAyMDA0LTIwMTAgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCi0vLyBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIAotLy8KLS8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotLy8gcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLS8vCi0vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLS8vIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLS8vIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0vLyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0vLyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLS8vIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0vLyBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotLy8KLS8vCi0vLwotLy8gQXV0aG9yKHMpOiA9IkF0aGVyb3MiCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0KLSNpbmNsdWRlICJhcjYwMDBfZHJ2LmgiCi0jaW5jbHVkZSAiaHRjLmgiCi0jaW5jbHVkZSA8bGludXgvZnMuaD4KLQotI2luY2x1ZGUgIkFSNjAwMi9odzIuMC9ody9ncGlvX3JlZy5oIgotI2luY2x1ZGUgIkFSNjAwMi9odzIuMC9ody9zaV9yZWcuaCIKLQotLy8KLS8vIGRlZmluZXMKLS8vCi0KLSNkZWZpbmUgTUFYX0ZJTEVOQU1FIDEwMjMKLSNkZWZpbmUgRUVQUk9NX1dBSVRfTElNSVQgMTYgCi0KLSNkZWZpbmUgSE9TVF9JTlRFUkVTVF9JVEVNX0FERFJFU1MoaXRlbSkgICAgICAgICAgXAotICAgICAgICAoQVI2MDAyX0hPU1RfSU5URVJFU1RfSVRFTV9BRERSRVNTKGl0ZW0pKQotCi0jZGVmaW5lIEVFUFJPTV9TWiA3NjgKLQotLyogc29mdCBtYWMgKi8KLSNkZWZpbmUgQVRIX01BQ19MRU4gICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBBVEhfU09GVF9NQUNfVE1QX0JVRl9MRU4gICAgICAgICAgICA2NAotdW5zaWduZWQgY2hhciBtYWNfYWRkcltBVEhfTUFDX0xFTl07Ci11bnNpZ25lZCBjaGFyIHNvZnRfbWFjX3RtcF9idWZbQVRIX1NPRlRfTUFDX1RNUF9CVUZfTEVOXTsKLWNoYXIgKnBfbWFjID0gTlVMTDsKLS8qIHNvZnQgbWFjICovCi0KLS8vCi0vLyBzdGF0aWMgdmFyaWFibGVzCi0vLwotCi1zdGF0aWMgdTggZWVwcm9tX2RhdGFbRUVQUk9NX1NaXTsKLXN0YXRpYyB1MzIgc3lzX3NsZWVwX3JlZzsKLXN0YXRpYyBzdHJ1Y3QgaGlmX2RldmljZSAqcF9ibWlfZGV2aWNlOwotCi0vLwotLy8gRnVuY3Rpb25zCi0vLwotCi0vKiBzb2Z0IG1hYyAqLwotc3RhdGljIGludAotd21pY19ldGhlcl9hdG9uKGNvbnN0IGNoYXIgKm9yaWcsIHU4ICpldGgpCi17Ci0gIGNvbnN0IGNoYXIgKmJ1ZnA7Ci0gIGludCBpOwotCi0gIGkgPSAwOwotICBmb3IoYnVmcCA9IG9yaWc7ICpidWZwICE9ICdcMCc7ICsrYnVmcCkgewotICAgIHVuc2lnbmVkIGludCB2YWw7Ci0JaW50IGgsIGw7Ci0KLQloID0gaGV4X3RvX2JpbigqYnVmcCsrKTsKLQotCWlmIChoIDwgMCkgewotCQlwcmludGsoIiVzOiBNQUMgdmFsdWUgaXMgaW52YWxpZFxuIiwgX19GVU5DVElPTl9fKTsKLQkJYnJlYWs7Ci0JfQotCi0JbCA9IGhleF90b19iaW4oKmJ1ZnArKyk7Ci0JaWYgKGwgPCAwKSB7Ci0JCXByaW50aygiJXM6IE1BQyB2YWx1ZSBpcyBpbnZhbGlkXG4iLCBfX0ZVTkNUSU9OX18pOwotCQlicmVhazsKLQl9Ci0KLQl2YWwgPSAoaCA8PCA0KSB8IGw7Ci0KLSAgICBldGhbaV0gPSAodW5zaWduZWQgY2hhcikgKHZhbCAmIDAzNzcpOwotICAgIGlmKCsraSA9PSBBVEhfTUFDX0xFTikgewotCSAgICAvKiBUaGF0J3MgaXQuICBBbnkgdHJhaWxpbmcganVuaz8gKi8KLQkgICAgaWYgKCpidWZwICE9ICdcMCcpIHsKLQkJICAgIHJldHVybiAwOwotCSAgICB9Ci0JICAgIHJldHVybiAxOwotICAgIH0KLSAgICBpZiAoKmJ1ZnAgIT0gJzonKQotCSAgICBicmVhazsKLSAgfQotICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLXVwZGF0ZV9tYWModW5zaWduZWQgY2hhciAqZWVwcm9tLCBpbnQgc2l6ZSwgdW5zaWduZWQgY2hhciAqbWFjYWRkcikKLXsKLQlpbnQgaTsKLQl1MTYgKnB0ciA9ICh1MTYgKikoZWVwcm9tKzQpOwotCXUxNiBjaGVja3N1bSA9IDA7Ci0KLQltZW1jcHkoZWVwcm9tKzEwLG1hY2FkZHIsNik7Ci0KLQkqcHRyID0gMDsKLQlwdHIgPSAodTE2ICopZWVwcm9tOwotCi0JZm9yIChpPTA7IGk8c2l6ZTsgaSs9MikgewotCQljaGVja3N1bSBePSAqcHRyKys7Ci0JfQotCWNoZWNrc3VtID0gfmNoZWNrc3VtOwotCi0JcHRyID0gKHUxNiAqKShlZXByb20rNCk7Ci0JKnB0ciA9IGNoZWNrc3VtOwotCXJldHVybjsKLX0KLS8qIHNvZnQgbWFjICovCi0KLS8qIFJlYWQgYSBUYXJnZXQgcmVnaXN0ZXIgYW5kIHJldHVybiBpdHMgdmFsdWUuICovCi1pbmxpbmUgdm9pZAotQk1JX3JlYWRfcmVnKHUzMiBhZGRyZXNzLCB1MzIgKnB2YWx1ZSkKLXsKLSAgICBCTUlSZWFkU09DUmVnaXN0ZXIocF9ibWlfZGV2aWNlLCBhZGRyZXNzLCBwdmFsdWUpOwotfQotCi0vKiBXcml0ZSBhIHZhbHVlIHRvIGEgVGFyZ2V0IHJlZ2lzdGVyLiAqLwotaW5saW5lIHZvaWQKLUJNSV93cml0ZV9yZWcodTMyIGFkZHJlc3MsIHUzMiB2YWx1ZSkKLXsKLSAgICBCTUlXcml0ZVNPQ1JlZ2lzdGVyKHBfYm1pX2RldmljZSwgYWRkcmVzcywgdmFsdWUpOwotfQotCi0vKiBSZWFkIFRhcmdldCBtZW1vcnkgd29yZCBhbmQgcmV0dXJuIGl0cyB2YWx1ZS4gKi8KLWlubGluZSB2b2lkCi1CTUlfcmVhZF9tZW0odTMyIGFkZHJlc3MsIHUzMiAqcHZhbHVlKQotewotICAgIEJNSVJlYWRNZW1vcnkocF9ibWlfZGV2aWNlLCBhZGRyZXNzLCAodTgqKShwdmFsdWUpLCA0KTsKLX0KLQotLyogV3JpdGUgYSB3b3JkIHRvIGEgVGFyZ2V0IG1lbW9yeS4gKi8KLWlubGluZSB2b2lkCi1CTUlfd3JpdGVfbWVtKHUzMiBhZGRyZXNzLCB1OCAqcF9kYXRhLCB1MzIgc3opCi17Ci0gICAgQk1JV3JpdGVNZW1vcnkocF9ibWlfZGV2aWNlLCBhZGRyZXNzLCAodTgqKShwX2RhdGEpLCBzeik7IAotfQotCi0vKgotICogRW5hYmxlIGFuZCBjb25maWd1cmUgdGhlIFRhcmdldCdzIFNlcmlhbCBJbnRlcmZhY2UKLSAqIHNvIHdlIGNhbiBhY2Nlc3MgdGhlIEVFUFJPTS4KLSAqLwotc3RhdGljIHZvaWQKLWVuYWJsZV9TSShzdHJ1Y3QgaGlmX2RldmljZSAqcF9kZXZpY2UpCi17Ci0gICAgdTMyIHJlZ3ZhbDsKLQotICAgIHByaW50aygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7Ci0KLSAgICBwX2JtaV9kZXZpY2UgPSBwX2RldmljZTsKLQotICAgIEJNSV9yZWFkX3JlZyhSVENfQkFTRV9BRERSRVNTK1NZU1RFTV9TTEVFUF9PRkZTRVQsICZzeXNfc2xlZXBfcmVnKTsKLSAgICBCTUlfd3JpdGVfcmVnKFJUQ19CQVNFX0FERFJFU1MrU1lTVEVNX1NMRUVQX09GRlNFVCwgU1lTVEVNX1NMRUVQX0RJU0FCTEVfU0VUKDEpKTsgLy9kaXNhYmxlIHN5c3RlbSBzbGVlcCB0ZW1wb3JhcmlseQotCi0gICAgQk1JX3JlYWRfcmVnKFJUQ19CQVNFX0FERFJFU1MrQ0xPQ0tfQ09OVFJPTF9PRkZTRVQsICZyZWd2YWwpOwotICAgIHJlZ3ZhbCAmPSB+Q0xPQ0tfQ09OVFJPTF9TSTBfQ0xLX01BU0s7Ci0gICAgQk1JX3dyaXRlX3JlZyhSVENfQkFTRV9BRERSRVNTK0NMT0NLX0NPTlRST0xfT0ZGU0VULCByZWd2YWwpOwotCi0gICAgQk1JX3JlYWRfcmVnKFJUQ19CQVNFX0FERFJFU1MrUkVTRVRfQ09OVFJPTF9PRkZTRVQsICZyZWd2YWwpOwotICAgIHJlZ3ZhbCAmPSB+UkVTRVRfQ09OVFJPTF9TSTBfUlNUX01BU0s7Ci0gICAgQk1JX3dyaXRlX3JlZyhSVENfQkFTRV9BRERSRVNTK1JFU0VUX0NPTlRST0xfT0ZGU0VULCByZWd2YWwpOwotCi0KLSAgICBCTUlfcmVhZF9yZWcoR1BJT19CQVNFX0FERFJFU1MrR1BJT19QSU4wX09GRlNFVCwgJnJlZ3ZhbCk7Ci0gICAgcmVndmFsICY9IH5HUElPX1BJTjBfQ09ORklHX01BU0s7Ci0gICAgQk1JX3dyaXRlX3JlZyhHUElPX0JBU0VfQUREUkVTUytHUElPX1BJTjBfT0ZGU0VULCByZWd2YWwpOwotCi0gICAgQk1JX3JlYWRfcmVnKEdQSU9fQkFTRV9BRERSRVNTK0dQSU9fUElOMV9PRkZTRVQsICZyZWd2YWwpOwotICAgIHJlZ3ZhbCAmPSB+R1BJT19QSU4xX0NPTkZJR19NQVNLOwotICAgIEJNSV93cml0ZV9yZWcoR1BJT19CQVNFX0FERFJFU1MrR1BJT19QSU4xX09GRlNFVCwgcmVndmFsKTsKLQotICAgIC8qIFNJX0NPTkZJRyA9IDB4NTAwYTY7ICovCi0gICAgcmVndmFsID0gICAgU0lfQ09ORklHX0JJRElSX09EX0RBVEFfU0VUKDEpICB8Ci0gICAgICAgICAgICAgICAgU0lfQ09ORklHX0kyQ19TRVQoMSkgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgU0lfQ09ORklHX1BPU19TQU1QTEVfU0VUKDEpICAgICB8Ci0gICAgICAgICAgICAgICAgU0lfQ09ORklHX0lOQUNUSVZFX0NMS19TRVQoMSkgICB8Ci0gICAgICAgICAgICAgICAgU0lfQ09ORklHX0lOQUNUSVZFX0RBVEFfU0VUKDEpICAgfAotICAgICAgICAgICAgICAgIFNJX0NPTkZJR19ESVZJREVSX1NFVCg2KTsKLSAgICBCTUlfd3JpdGVfcmVnKFNJX0JBU0VfQUREUkVTUytTSV9DT05GSUdfT0ZGU0VULCByZWd2YWwpOwotICAgIAotfQotCi1zdGF0aWMgdm9pZAotZGlzYWJsZV9TSSh2b2lkKQotewotICAgIHUzMiByZWd2YWw7Ci0gICAgCi0gICAgcHJpbnRrKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKLQotICAgIEJNSV93cml0ZV9yZWcoUlRDX0JBU0VfQUREUkVTUytSRVNFVF9DT05UUk9MX09GRlNFVCwgUkVTRVRfQ09OVFJPTF9TSTBfUlNUX01BU0spOwotICAgIEJNSV9yZWFkX3JlZyhSVENfQkFTRV9BRERSRVNTK0NMT0NLX0NPTlRST0xfT0ZGU0VULCAmcmVndmFsKTsKLSAgICByZWd2YWwgfD0gQ0xPQ0tfQ09OVFJPTF9TSTBfQ0xLX01BU0s7Ci0gICAgQk1JX3dyaXRlX3JlZyhSVENfQkFTRV9BRERSRVNTK0NMT0NLX0NPTlRST0xfT0ZGU0VULCByZWd2YWwpOy8vR2F0ZSBTSTAgY2xvY2sKLSAgICBCTUlfd3JpdGVfcmVnKFJUQ19CQVNFX0FERFJFU1MrU1lTVEVNX1NMRUVQX09GRlNFVCwgc3lzX3NsZWVwX3JlZyk7IC8vcmVzdG9yZSBzeXN0ZW0gc2xlZXAgc2V0dGluZwotfQotCi0vKgotICogVGVsbCB0aGUgVGFyZ2V0IHRvIHN0YXJ0IGFuIDgtYnl0ZSByZWFkIGZyb20gRUVQUk9NLAotICogcHV0dGluZyB0aGUgcmVzdWx0cyBpbiBUYXJnZXQgUlhfREFUQSByZWdpc3RlcnMuCi0gKi8KLXN0YXRpYyB2b2lkCi1yZXF1ZXN0XzhieXRlX3JlYWQoaW50IG9mZnNldCkKLXsKLSAgICB1MzIgcmVndmFsOwotCi0vLyAgICBwcmludGsoIiVzOiByZXF1ZXN0XzhieXRlX3JlYWQgZnJvbSBvZmZzZXQgMHgleFxuIiwgX19GVU5DVElPTl9fLCBvZmZzZXQpOwotCi0gICAgCi0gICAgLyogU0lfVFhfREFUQTAgPSByZWFkIGZyb20gb2Zmc2V0ICovCi0gICAgICAgIHJlZ3ZhbCA9KDB4YTE8PDE2KXwKLSAgICAgICAgICAgICAgICAoKG9mZnNldCAmIDB4ZmYpPDw4KSAgICB8Ci0gICAgICAgICAgICAgICAgKDB4YTAgfCAoKG9mZnNldCAmIDB4ZmYwMCk+PjcpKTsKLSAgICAKLSAgICAgICAgQk1JX3dyaXRlX3JlZyhTSV9CQVNFX0FERFJFU1MrU0lfVFhfREFUQTBfT0ZGU0VULCByZWd2YWwpOwotCi0gICAgICAgIHJlZ3ZhbCA9IFNJX0NTX1NUQVJUX1NFVCgxKSAgICAgIHwKLSAgICAgICAgICAgICAgICBTSV9DU19SWF9DTlRfU0VUKDgpICAgICB8Ci0gICAgICAgICAgICAgICAgU0lfQ1NfVFhfQ05UX1NFVCgzKTsKLSAgICAgICAgQk1JX3dyaXRlX3JlZyhTSV9CQVNFX0FERFJFU1MrU0lfQ1NfT0ZGU0VULCByZWd2YWwpOwotfQotCi0vKgotICogVGVsbCB0aGUgVGFyZ2V0IHRvIHN0YXJ0IGEgNC1ieXRlIHdyaXRlIHRvIEVFUFJPTSwKLSAqIHdyaXRpbmcgdmFsdWVzIGZyb20gVGFyZ2V0IFRYX0RBVEEgcmVnaXN0ZXJzLgotICovCi1zdGF0aWMgdm9pZAotcmVxdWVzdF80Ynl0ZV93cml0ZShpbnQgb2Zmc2V0LCB1MzIgZGF0YSkKLXsKLSAgICB1MzIgcmVndmFsOwotCi0gICAgcHJpbnRrKCIlczogcmVxdWVzdF80Ynl0ZV93cml0ZSAoMHgleCkgdG8gb2Zmc2V0IDB4JXhcbiIsIF9fRlVOQ1RJT05fXywgZGF0YSwgb2Zmc2V0KTsKLQotICAgICAgICAvKiBTSV9UWF9EQVRBMCA9IHdyaXRlIGRhdGEgdG8gb2Zmc2V0ICovCi0gICAgICAgIHJlZ3ZhbCA9ICAgICgoZGF0YSAmIDB4ZmZmZikgPDwxNikgICAgfAotICAgICAgICAgICAgICAgICgob2Zmc2V0ICYgMHhmZik8PDgpICAgIHwKLSAgICAgICAgICAgICAgICAoMHhhMCB8ICgob2Zmc2V0ICYgMHhmZjAwKT4+NykpOwotICAgICAgICBCTUlfd3JpdGVfcmVnKFNJX0JBU0VfQUREUkVTUytTSV9UWF9EQVRBMF9PRkZTRVQsIHJlZ3ZhbCk7Ci0KLSAgICAgICAgcmVndmFsID0gICAgZGF0YSA+PiAxNjsKLSAgICAgICAgQk1JX3dyaXRlX3JlZyhTSV9CQVNFX0FERFJFU1MrU0lfVFhfREFUQTFfT0ZGU0VULCByZWd2YWwpOwotCi0gICAgICAgIHJlZ3ZhbCA9ICAgIFNJX0NTX1NUQVJUX1NFVCgxKSAgICAgIHwKLSAgICAgICAgICAgICAgICBTSV9DU19SWF9DTlRfU0VUKDApICAgICB8Ci0gICAgICAgICAgICAgICAgU0lfQ1NfVFhfQ05UX1NFVCg2KTsKLSAgICAgICAgQk1JX3dyaXRlX3JlZyhTSV9CQVNFX0FERFJFU1MrU0lfQ1NfT0ZGU0VULCByZWd2YWwpOwotfQotCi0vKgotICogQ2hlY2sgd2hldGhlciBvciBub3QgYW4gRUVQUk9NIHJlcXVlc3QgdGhhdCB3YXMgc3RhcnRlZAotICogZWFybGllciBoYXMgY29tcGxldGVkIHlldC4KLSAqLwotc3RhdGljIGJvb2wKLXJlcXVlc3RfaW5fcHJvZ3Jlc3Modm9pZCkKLXsKLSAgICB1MzIgcmVndmFsOwotCi0gICAgLyogV2FpdCBmb3IgRE9ORV9JTlQgaW4gU0lfQ1MgKi8KLSAgICBCTUlfcmVhZF9yZWcoU0lfQkFTRV9BRERSRVNTK1NJX0NTX09GRlNFVCwgJnJlZ3ZhbCk7Ci0KLS8vICAgIHByaW50aygiJXM6IHJlcXVlc3QgaW4gcHJvZ3Jlc3MgU0lfQ1M9MHgleFxuIiwgX19GVU5DVElPTl9fLCByZWd2YWwpOwotICAgIGlmIChyZWd2YWwgJiBTSV9DU19ET05FX0VSUl9NQVNLKSB7Ci0gICAgICAgIHByaW50aygiJXM6IEVFUFJPTSBzaWduYWxlZCBFUlJPUiAoMHgleClcbiIsIF9fRlVOQ1RJT05fXywgcmVndmFsKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gKCEocmVndmFsICYgU0lfQ1NfRE9ORV9JTlRfTUFTSykpOwotfQotCi0vKgotICogdHJ5IHRvIGRldGVjdCB0aGUgdHlwZSBvZiBFRVBST00sMTZiaXQgYWRkcmVzcyBvciA4Yml0IGFkZHJlc3MKLSAqLwotCi1zdGF0aWMgdm9pZCBlZXByb21fdHlwZV9kZXRlY3Qodm9pZCkKLXsKLSAgICB1MzIgcmVndmFsOwotICAgIHU4IGkgPSAwOwotCi0gICAgcmVxdWVzdF84Ynl0ZV9yZWFkKDB4MTAwKTsKLSAgIC8qIFdhaXQgZm9yIERPTkVfSU5UIGluIFNJX0NTICovCi0gICAgZG97Ci0gICAgICAgIEJNSV9yZWFkX3JlZyhTSV9CQVNFX0FERFJFU1MrU0lfQ1NfT0ZGU0VULCAmcmVndmFsKTsKLSAgICAgICAgaWYgKHJlZ3ZhbCAmIFNJX0NTX0RPTkVfRVJSX01BU0spIHsKLSAgICAgICAgICAgIHByaW50aygiJXM6IEVSUk9SIDogYWRkcmVzcyB0eXBlIHdhcyB3cm9uZ2x5IHNldFxuIiwgX19GVU5DVElPTl9fKTsgICAgIAotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGkrKyA9PSBFRVBST01fV0FJVF9MSU1JVCkgewotICAgICAgICAgICAgcHJpbnRrKCIlczogRUVQUk9NIG5vdCByZXNwb25kaW5nXG4iLCBfX0ZVTkNUSU9OX18pOwotICAgICAgICB9Ci0gICAgfSB3aGlsZSghKHJlZ3ZhbCAmIFNJX0NTX0RPTkVfSU5UX01BU0spKTsKLX0KLQotLyoKLSAqIEV4dHJhY3QgdGhlIHJlc3VsdHMgb2YgYSBjb21wbGV0ZWQgRUVQUk9NIFJlYWQgcmVxdWVzdAotICogYW5kIHJldHVybiB0aGVtIHRvIHRoZSBjYWxsZXIuCi0gKi8KLWlubGluZSB2b2lkCi1yZWFkXzhieXRlX3Jlc3VsdHModTMyICpkYXRhKQotewotICAgIC8qIFJlYWQgU0lfUlhfREFUQTAgYW5kIFNJX1JYX0RBVEExICovCi0gICAgQk1JX3JlYWRfcmVnKFNJX0JBU0VfQUREUkVTUytTSV9SWF9EQVRBMF9PRkZTRVQsICZkYXRhWzBdKTsKLSAgICBCTUlfcmVhZF9yZWcoU0lfQkFTRV9BRERSRVNTK1NJX1JYX0RBVEExX09GRlNFVCwgJmRhdGFbMV0pOwotfQotCi0KLS8qCi0gKiBXYWl0IGZvciBhIHByZXZpb3VzbHkgc3RhcnRlZCBjb21tYW5kIHRvIGNvbXBsZXRlLgotICogVGltZW91dCBpZiB0aGUgY29tbWFuZCBpcyB0YWtlcyAidG9vIGxvbmciLgotICovCi1zdGF0aWMgdm9pZAotd2FpdF9mb3JfZWVwcm9tX2NvbXBsZXRpb24odm9pZCkKLXsKLSAgICBpbnQgaT0wOwotCi0gICAgd2hpbGUgKHJlcXVlc3RfaW5fcHJvZ3Jlc3MoKSkgewotICAgICAgICBpZiAoaSsrID09IEVFUFJPTV9XQUlUX0xJTUlUKSB7Ci0gICAgICAgICAgICBwcmludGsoIiVzOiBFRVBST00gbm90IHJlc3BvbmRpbmdcbiIsIF9fRlVOQ1RJT05fXyk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8qCi0gKiBIaWdoLWxldmVsIGZ1bmN0aW9uIHdoaWNoIHN0YXJ0cyBhbiA4LWJ5dGUgcmVhZCwKLSAqIHdhaXRzIGZvciBpdCB0byBjb21wbGV0ZSwgYW5kIHJldHVybnMgdGhlIHJlc3VsdC4KLSAqLwotc3RhdGljIHZvaWQKLWZldGNoXzhieXRlcyhpbnQgb2Zmc2V0LCB1MzIgKmRhdGEpCi17Ci0gICAgcmVxdWVzdF84Ynl0ZV9yZWFkKG9mZnNldCk7Ci0gICAgd2FpdF9mb3JfZWVwcm9tX2NvbXBsZXRpb24oKTsKLSAgICByZWFkXzhieXRlX3Jlc3VsdHMoZGF0YSk7Ci0KLSAgICAvKiBDbGVhciBhbnkgcGVuZGluZyBpbnRyICovCi0gICAgQk1JX3dyaXRlX3JlZyhTSV9CQVNFX0FERFJFU1MrU0lfQ1NfT0ZGU0VULCBTSV9DU19ET05FX0lOVF9NQVNLKTsKLX0KLQotLyoKLSAqIEhpZ2gtbGV2ZWwgZnVuY3Rpb24gd2hpY2ggc3RhcnRzIGEgNC1ieXRlIHdyaXRlLAotICogYW5kIHdhaXRzIGZvciBpdCB0byBjb21wbGV0ZS4KLSAqLwotaW5saW5lIHZvaWQKLWNvbW1pdF80Ynl0ZXMoaW50IG9mZnNldCwgdTMyIGRhdGEpCi17Ci0gICAgcmVxdWVzdF80Ynl0ZV93cml0ZShvZmZzZXQsIGRhdGEpOwotICAgIHdhaXRfZm9yX2VlcHJvbV9jb21wbGV0aW9uKCk7Ci19Ci0vKiBBVEhFTlYgKi8KLSNpZmRlZiBBTkRST0lEX0VOVgotdm9pZCBlZXByb21fYXI2MDAwX3RyYW5zZmVyKHN0cnVjdCBoaWZfZGV2aWNlICpkZXZpY2UsIGNoYXIgKmZha2VfZmlsZSwgY2hhciAqcF9tYWMpCi17Ci0gICAgdTMyIGZpcnN0X3dvcmQ7Ci0gICAgdTMyIGJvYXJkX2RhdGFfYWRkcjsKLSAgICBpbnQgaTsKLQotICAgIHByaW50aygiJXM6IEVudGVyXG4iLCBfX0ZVTkNUSU9OX18pOwotCi0gICAgZW5hYmxlX1NJKGRldmljZSk7Ci0gICAgZWVwcm9tX3R5cGVfZGV0ZWN0KCk7Ci0KLSAgICBpZiAoZmFrZV9maWxlKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFRyYW5zZmVyIGZyb20gZmlsZSB0byBUYXJnZXQgUkFNLgotICAgICAgICAgKiBGZXRjaCBzb3VyY2UgZGF0YSBmcm9tIGZpbGUuCi0gICAgICAgICAqLwotICAgICAgICBtbV9zZWdtZW50X3QJCW9sZGZzOwotICAgICAgICBzdHJ1Y3QgZmlsZQkJKmZpbHA7Ci0gICAgICAgIHN0cnVjdCBpbm9kZQkJKmlub2RlID0gTlVMTDsKLSAgICAgICAgaW50CQkJbGVuZ3RoOwotCi0gICAgICAgIC8qIG9wZW4gZmlsZSAqLwotICAgICAgICBvbGRmcyA9IGdldF9mcygpOwotICAgICAgICBzZXRfZnMoS0VSTkVMX0RTKTsKLSAgICAgICAgZmlscCA9IGZpbHBfb3BlbihmYWtlX2ZpbGUsIE9fUkRPTkxZLCBTX0lSVVNSKTsKLQotICAgICAgICBpZiAoSVNfRVJSKGZpbHApKSB7Ci0gICAgICAgICAgICBwcmludGsoIiVzOiBmaWxlICVzIGZpbHBfb3BlbiBlcnJvclxuIiwgX19GVU5DVElPTl9fLCBmYWtlX2ZpbGUpOwotICAgICAgICAgICAgc2V0X2ZzKG9sZGZzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghZmlscC0+Zl9vcCkgewotICAgICAgICAgICAgcHJpbnRrKCIlczogRmlsZSBPcGVyYXRpb24gTWV0aG9kIEVycm9yXG4iLCBfX0ZVTkNUSU9OX18pOwotICAgICAgICAgICAgZmlscF9jbG9zZShmaWxwLCBOVUxMKTsKLSAgICAgICAgICAgIHNldF9mcyhvbGRmcyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpbm9kZSA9IEdFVF9JTk9ERV9GUk9NX0ZJTEVQKGZpbGVwKTsKLSAgICAgICAgaWYgKCFpbm9kZSkgewotICAgICAgICAgICAgcHJpbnRrKCIlczogR2V0IGlub2RlIGZyb20gZmlscCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7Ci0gICAgICAgICAgICBmaWxwX2Nsb3NlKGZpbHAsIE5VTEwpOwotICAgICAgICAgICAgc2V0X2ZzKG9sZGZzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHByaW50aygiJXMgZmlsZSBvZmZzZXQgb3BzaXRpb246ICV4aFxuIiwgX19GVU5DVElPTl9fLCAodW5zaWduZWQpZmlscC0+Zl9wb3MpOwotCi0gICAgICAgIC8qIGZpbGUncyBzaXplICovCi0gICAgICAgIGxlbmd0aCA9IGlfc2l6ZV9yZWFkKGlub2RlLT5pX21hcHBpbmctPmhvc3QpOwotICAgICAgICBwcmludGsoIiVzOiBsZW5ndGg9JWRcbiIsIF9fRlVOQ1RJT05fXywgbGVuZ3RoKTsKLSAgICAgICAgaWYgKGxlbmd0aCAhPSBFRVBST01fU1opIHsKLSAgICAgICAgICAgIHByaW50aygiJXM6IFRoZSBmaWxlJ3Mgc2l6ZSBpcyBub3QgYXMgZXhwZWN0ZWRcbiIsIF9fRlVOQ1RJT05fXyk7Ci0gICAgICAgICAgICBmaWxwX2Nsb3NlKGZpbHAsIE5VTEwpOwotICAgICAgICAgICAgc2V0X2ZzKG9sZGZzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIHJlYWQgZGF0YSAqLwotICAgICAgICBpZiAoZmlscC0+Zl9vcC0+cmVhZChmaWxwLCBlZXByb21fZGF0YSwgbGVuZ3RoLCAmZmlscC0+Zl9wb3MpICE9IGxlbmd0aCkgewotICAgICAgICAgICAgcHJpbnRrKCIlczogZmlsZSByZWFkIGVycm9yXG4iLCBfX0ZVTkNUSU9OX18pOwotICAgICAgICAgICAgZmlscF9jbG9zZShmaWxwLCBOVUxMKTsKLSAgICAgICAgICAgIHNldF9mcyhvbGRmcyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvKiByZWFkIGRhdGEgb3V0IHN1Y2Nlc3NmdWxseSAqLwotICAgICAgICBmaWxwX2Nsb3NlKGZpbHAsIE5VTEwpOwotICAgICAgICBzZXRfZnMob2xkZnMpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFJlYWQgZnJvbSBFRVBST00gdG8gZmlsZSBPUiB0cmFuc2ZlciBmcm9tIEVFUFJPTSB0byBUYXJnZXQgUkFNLgotICAgICAgICAgKiBGZXRjaCBFRVBST01fU1ogQnl0ZXMgb2YgQm9hcmQgRGF0YSwgOCBieXRlcyBhdCBhIHRpbWUuCi0gICAgICAgICAqLwotCi0gICAgICAgIGZldGNoXzhieXRlcygwLCAodTMyICopKCZlZXByb21fZGF0YVswXSkpOwotCi0gICAgICAgIC8qIENoZWNrIHRoZSBmaXJzdCB3b3JkIG9mIEVFUFJPTSBmb3IgdmFsaWRpdHkgKi8KLSAgICAgICAgZmlyc3Rfd29yZCA9ICooKHUzMiAqKWVlcHJvbV9kYXRhKTsKLQotICAgICAgICBpZiAoKGZpcnN0X3dvcmQgPT0gMCkgfHwgKGZpcnN0X3dvcmQgPT0gMHhmZmZmZmZmZikpIHsKLSAgICAgICAgICAgIHByaW50aygiRGlkIG5vdCBmaW5kIEVFUFJPTSB3aXRoIHZhbGlkIEJvYXJkIERhdGEuXG4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoaT04OyBpPEVFUFJPTV9TWjsgaSs9OCkgewotICAgICAgICAgICAgZmV0Y2hfOGJ5dGVzKGksICh1MzIgKikoJmVlcHJvbV9kYXRhW2ldKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBzb2Z0IG1hYyAqLwotICAgIGlmIChwX21hYykgewotCi0gICAgICAgIG1tX3NlZ21lbnRfdAkJb2xkZnM7Ci0gICAgICAgIHN0cnVjdCBmaWxlCQkqZmlscDsKLSAgICAgICAgc3RydWN0IGlub2RlCQkqaW5vZGUgPSBOVUxMOwotICAgICAgICBpbnQJCQlsZW5ndGg7Ci0gICAgICAgIAotICAgICAgICAvKiBvcGVuIGZpbGUgKi8KLSAgICAgICAgb2xkZnMgPSBnZXRfZnMoKTsKLSAgICAgICAgc2V0X2ZzKEtFUk5FTF9EUyk7Ci0gICAgICAgIGZpbHAgPSBmaWxwX29wZW4ocF9tYWMsIE9fUkRPTkxZLCBTX0lSVVNSKTsKLSAgICAgICAgCi0gICAgICAgIHByaW50aygiJXMgdHJ5IHRvIG9wZW4gZmlsZSAlc1xuIiwgX19GVU5DVElPTl9fLCBwX21hYyk7Ci0KLSAgICAgICAgaWYgKElTX0VSUihmaWxwKSkgewotICAgICAgICAgICAgcHJpbnRrKCIlczogZmlsZSAlcyBmaWxwX29wZW4gZXJyb3JcbiIsIF9fRlVOQ1RJT05fXywgcF9tYWMpOwotICAgICAgICAgICAgc2V0X2ZzKG9sZGZzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKCFmaWxwLT5mX29wKSB7Ci0gICAgICAgICAgICBwcmludGsoIiVzOiBGaWxlIE9wZXJhdGlvbiBNZXRob2QgRXJyb3JcbiIsIF9fRlVOQ1RJT05fXyk7Ci0gICAgICAgICAgICBmaWxwX2Nsb3NlKGZpbHAsIE5VTEwpOwotICAgICAgICAgICAgc2V0X2ZzKG9sZGZzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaW5vZGUgPSBHRVRfSU5PREVfRlJPTV9GSUxFUChmaWxlcCk7Ci0gICAgICAgIGlmICghaW5vZGUpIHsKLSAgICAgICAgICAgIHByaW50aygiJXM6IEdldCBpbm9kZSBmcm9tIGZpbHAgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOwotICAgICAgICAgICAgZmlscF9jbG9zZShmaWxwLCBOVUxMKTsKLSAgICAgICAgICAgIHNldF9mcyhvbGRmcyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHByaW50aygiJXMgZmlsZSBvZmZzZXQgb3BzaXRpb246ICV4aFxuIiwgX19GVU5DVElPTl9fLCAodW5zaWduZWQpZmlscC0+Zl9wb3MpOwotICAgICAgICAKLSAgICAgICAgLyogZmlsZSdzIHNpemUgKi8KLSAgICAgICAgbGVuZ3RoID0gaV9zaXplX3JlYWQoaW5vZGUtPmlfbWFwcGluZy0+aG9zdCk7Ci0gICAgICAgIHByaW50aygiJXM6IGxlbmd0aD0lZFxuIiwgX19GVU5DVElPTl9fLCBsZW5ndGgpOwotICAgICAgICBpZiAobGVuZ3RoID4gQVRIX1NPRlRfTUFDX1RNUF9CVUZfTEVOKSB7Ci0gICAgICAgICAgICBwcmludGsoIiVzOiBNQUMgZmlsZSdzIHNpemUgaXMgbm90IGFzIGV4cGVjdGVkXG4iLCBfX0ZVTkNUSU9OX18pOwotICAgICAgICAgICAgZmlscF9jbG9zZShmaWxwLCBOVUxMKTsKLSAgICAgICAgICAgIHNldF9mcyhvbGRmcyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8qIHJlYWQgZGF0YSAqLwotICAgICAgICBpZiAoZmlscC0+Zl9vcC0+cmVhZChmaWxwLCBzb2Z0X21hY190bXBfYnVmLCBsZW5ndGgsICZmaWxwLT5mX3BvcykgIT0gbGVuZ3RoKSB7Ci0gICAgICAgICAgICBwcmludGsoIiVzOiBmaWxlIHJlYWQgZXJyb3JcbiIsIF9fRlVOQ1RJT05fXyk7Ci0gICAgICAgICAgICBmaWxwX2Nsb3NlKGZpbHAsIE5VTEwpOwotICAgICAgICAgICAgc2V0X2ZzKG9sZGZzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0jaWYgMAotICAgICAgICAvKiB0aGUgZGF0YSB3ZSBqdXN0IHJlYWQgKi8KLSAgICAgICAgcHJpbnRrKCIlczogbWFjIGFkZHJlc3MgZnJvbSB0aGUgZmlsZTpcbiIsIF9fRlVOQ1RJT05fXyk7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHByaW50aygiWyVjKDB4JXgpXSwiLCBzb2Z0X21hY190bXBfYnVmW2ldLCBzb2Z0X21hY190bXBfYnVmW2ldKTsKLSAgICAgICAgcHJpbnRrKCJcbiIpOwotI2VuZGlmCi0KLSAgICAgICAgLyogcmVhZCBkYXRhIG91dCBzdWNjZXNzZnVsbHkgKi8KLSAgICAgICAgZmlscF9jbG9zZShmaWxwLCBOVUxMKTsKLSAgICAgICAgc2V0X2ZzKG9sZGZzKTsKLQotICAgICAgICAvKiBjb252ZXJ0IG1hYyBhZGRyZXNzICovCi0gICAgICAgIGlmICghd21pY19ldGhlcl9hdG9uKHNvZnRfbWFjX3RtcF9idWYsIG1hY19hZGRyKSkgewotICAgICAgICAgICAgcHJpbnRrKCIlczogY29udmVydCBtYWMgdmFsdWUgZmFpbFxuIiwgX19GVU5DVElPTl9fKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0jaWYgMAotICAgICAgICAvKiB0aGUgY29udmVydGVkIG1hYyBhZGRyZXNzICovCi0gICAgICAgIHByaW50aygiJXM6IHRoZSBjb252ZXJ0ZWQgbWFjIHZhbHVlXG4iLCBfX0ZVTkNUSU9OX18pOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgQVRIX01BQ19MRU47IGkrKykKLSAgICAgICAgICAgIHByaW50aygiWzB4JXhdLCIsIG1hY19hZGRyW2ldKTsKLSAgICAgICAgcHJpbnRrKCJcbiIpOwotI2VuZGlmCi0gICAgfQotICAgIC8qIHNvZnQgbWFjICovCi0KLSAgICAvKiBEZXRlcm1pbmUgd2hlcmUgaW4gVGFyZ2V0IFJBTSB0byB3cml0ZSBCb2FyZCBEYXRhICovCi0gICAgQk1JX3JlYWRfbWVtKCBIT1NUX0lOVEVSRVNUX0lURU1fQUREUkVTUyhoaV9ib2FyZF9kYXRhKSwgJmJvYXJkX2RhdGFfYWRkcik7Ci0gICAgaWYgKGJvYXJkX2RhdGFfYWRkciA9PSAwKSB7Ci0gICAgICAgIHByaW50aygiaGlfYm9hcmRfZGF0YSBpcyB6ZXJvXG4iKTsKLSAgICB9Ci0KLSAgICAvKiBzb2Z0IG1hYyAqLwotI2lmIDEKLSAgICAvKiBVcGRhdGUgTUFDIGFkZHJlc3MgaW4gUkFNICovCi0gICAgaWYgKHBfbWFjKSB7Ci0JICAgIHVwZGF0ZV9tYWMoZWVwcm9tX2RhdGEsIEVFUFJPTV9TWiwgbWFjX2FkZHIpOwotICAgIH0KLSNlbmRpZgotI2lmIDAKLSAgICAvKiBtYWMgYWRkcmVzcyBpbiBlZXByb20gYXJyYXkgKi8KLSAgICBwcmludGsoIiVzOiBtYWMgdmFsdWVzIGluIGVlcHJvbSBhcnJheVxuIiwgX19GVU5DVElPTl9fKTsKLSAgICBmb3IgKGkgPSAxMDsgaSA8IDEwICsgNjsgaSsrKQotICAgICAgICBwcmludGsoIlsweCV4XSwiLCBlZXByb21fZGF0YVtpXSk7Ci0gICAgcHJpbnRrKCJcbiIpOwotI2VuZGlmCi0gICAgLyogc29mdCBtYWMgKi8KLQotICAgIC8qIFdyaXRlIEVFUFJPTSBkYXRhIHRvIFRhcmdldCBSQU0gKi8KLSAgICBCTUlfd3JpdGVfbWVtKGJvYXJkX2RhdGFfYWRkciwgKCh1OCAqKWVlcHJvbV9kYXRhKSwgRUVQUk9NX1NaKTsKLQotICAgIC8qIFJlY29yZCB0aGUgZmFjdCB0aGF0IEJvYXJkIERhdGEgSVMgaW5pdGlhbGl6ZWQgKi8KLSAgICB7Ci0gICAgICAgdTMyIG9uZSA9IDE7Ci0gICAgICAgQk1JX3dyaXRlX21lbShIT1NUX0lOVEVSRVNUX0lURU1fQUREUkVTUyhoaV9ib2FyZF9kYXRhX2luaXRpYWxpemVkKSwKLSAgICAgICAgICAgICAgICAgICAgICh1OCAqKSZvbmUsIHNpemVvZih1MzIpKTsKLSAgICB9Ci0KLSAgICBkaXNhYmxlX1NJKCk7Ci19Ci0jZW5kaWYKLS8qIEFUSEVOViAqLwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2V4cG9ydF9oY2lfdHJhbnNwb3J0LmMgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2V4cG9ydF9oY2lfdHJhbnNwb3J0LmMKaW5kZXggNDQyYTI4Ni4uNDMwOTk4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9leHBvcnRfaGNpX3RyYW5zcG9ydC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvb3MvbGludXgvZXhwb3J0X2hjaV90cmFuc3BvcnQuYwpAQCAtMjMsNyArMjMsNiBAQAogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICNpbmNsdWRlIDxhX2NvbmZpZy5oPgogI2luY2x1ZGUgPGF0aGRlZnMuaD4KLSNpbmNsdWRlICJhX3R5cGVzLmgiCiAjaW5jbHVkZSAiYV9vc2FwaS5oIgogI2luY2x1ZGUgImh0Y19hcGkuaCIKICNpbmNsdWRlICJhX2Rydi5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9oY2lfYnJpZGdlLmMgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2hjaV9icmlkZ2UuYwppbmRleCAzOWU1Nzk4Li42MDg3ZWRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2hjaV9icmlkZ2UuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2hjaV9icmlkZ2UuYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8YV9jb25maWcuaD4KICNpbmNsdWRlIDxhdGhkZWZzLmg+Ci0jaW5jbHVkZSAiYV90eXBlcy5oIgogI2luY2x1ZGUgImFfb3NhcGkuaCIKICNpbmNsdWRlICJodGNfYXBpLmgiCiAjaW5jbHVkZSAid21pLmgiCkBAIC01ODIsMTEgKzU4MSwxMSBAQAogICAgICAgICB9IAogICAgICAgICAKICAgICAgICAgaWYgKHBIY2lkZXZJbmZvLT5wSFRDU3RydWN0QWxsb2MgIT0gTlVMTCkgewotICAgICAgICAgICAgQV9GUkVFKHBIY2lkZXZJbmZvLT5wSFRDU3RydWN0QWxsb2MpOworICAgICAgICAgICAga2ZyZWUocEhjaWRldkluZm8tPnBIVENTdHJ1Y3RBbGxvYyk7CiAgICAgICAgICAgICBwSGNpZGV2SW5mby0+cEhUQ1N0cnVjdEFsbG9jID0gTlVMTDsgICAgCiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIEFfRlJFRShwSGNpZGV2SW5mbyk7CisgICAgICAgIGtmcmVlKHBIY2lkZXZJbmZvKTsKICNpZm5kZWYgRVhQT1JUX0hDSV9CUklER0VfSU5URVJGQUNFCiAgICAgICAgIGFyLT5oY2lkZXZfaW5mbyA9IE5VTEw7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvb3MvbGludXgvaW5jbHVkZS9hcjYwMDBfZHJ2LmggYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2luY2x1ZGUvYXI2MDAwX2Rydi5oCmluZGV4IDg5ZmQ4MGEuLjIyNDUzYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvb3MvbGludXgvaW5jbHVkZS9hcjYwMDBfZHJ2LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9pbmNsdWRlL2FyNjAwMF9kcnYuaApAQCAtMzMsMTUgKzMzLDEyIEBACiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgotI2lmZGVmIEFUSDZLX0NPTkZJR19DRkc4MDIxMQogI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgotI2VuZGlmIC8qIEFUSDZLX0NPTkZJR19DRkc4MDIxMSAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjaW5jbHVkZSA8YV9jb25maWcuaD4KICNpbmNsdWRlIDxhdGhkZWZzLmg+Ci0jaW5jbHVkZSAiYV90eXBlcy5oIgogI2luY2x1ZGUgImFfb3NhcGkuaCIKICNpbmNsdWRlICJodGNfYXBpLmgiCiAjaW5jbHVkZSAid21pLmgiCkBAIC01MSw4ICs0OCw2IEBACiAjaW5jbHVkZSA8aWVlZTgwMjExX2lvY3RsLmg+CiAjaW5jbHVkZSA8d2xhbl9hcGkuaD4KICNpbmNsdWRlIDx3bWlfYXBpLmg+Ci0jaW5jbHVkZSAiZ3Bpb19hcGkuaCIKLSNpbmNsdWRlICJncGlvLmgiCiAjaW5jbHVkZSAicGt0X2xvZy5oIgogI2luY2x1ZGUgImFnZ3JfcmVjdl9hcGkuaCIKICNpbmNsdWRlIDxob3N0X3ZlcnNpb24uaD4KQEAgLTc2LDcgKzcxLDcgQEAKICNpbmNsdWRlICJody9hcGJfbWFwLmgiCiAjaW5jbHVkZSAiaHcvcnRjX3JlZy5oIgogI2luY2x1ZGUgImh3L21ib3hfcmVnLmgiCi0jaW5jbHVkZSAiaHcvZ3Bpb19yZWcuaCIKKyNpbmNsdWRlICJncGlvX3JlZy5oIgogCiAjZGVmaW5lICBBVEhfREVCVUdfREJHX0xPRyAgICAgICBBVEhfREVCVUdfTUFLRV9NT0RVTEVfTUFTSygwKQogI2RlZmluZSAgQVRIX0RFQlVHX1dMQU5fQ09OTkVDVCAgQVRIX0RFQlVHX01BS0VfTU9EVUxFX01BU0soMSkKQEAgLTk0LDggKzg5LDYgQEAKICNlbmRpZgogCiAKLSNpZmRlZiBVU0VSX0tFWVMKLQogI2RlZmluZSBVU0VSX1NBVkVES0VZU19TVEFUX0lOSVQgICAgIDAKICNkZWZpbmUgVVNFUl9TQVZFREtFWVNfU1RBVF9SVU4gICAgICAxCiAKQEAgLTEwNiw3ICs5OSw2IEBACiAgICAgQ1JZUFRPX1RZUEUgICAgICAgICAgICAgICBrZXlUeXBlOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgIGtleU9rOwogfTsKLSNlbmRpZgogCiAjZGVmaW5lIERCR19JTkZPICAgICAgICAweDAwMDAwMDAxCiAjZGVmaW5lIERCR19FUlJPUiAgICAgICAweDAwMDAwMDAyCkBAIC0yMTUsMzUgKzIwNyw0MiBAQAogI2RlZmluZSBTRVRVUEhDSV9ERUZBVUxUICAgICAgICAgICAwCiAjZW5kaWYgLyogU0VUVVBIQ0lfRU5BQkxFRCAqLwogCi0jaWZkZWYgU0VUVVBIQ0lQQUxfRU5BQkxFRAotI2RlZmluZSBTRVRVUEhDSVBBTF9ERUZBVUxUICAgICAgICAgICAxCi0jZWxzZQotI2RlZmluZSBTRVRVUEhDSVBBTF9ERUZBVUxUICAgICAgICAgICAwCi0jZW5kaWYgLyogU0VUVVBIQ0lQQUxfRU5BQkxFRCAqLwotCiAjaWZkZWYgU0VUVVBCVERFVl9FTkFCTEVECiAjZGVmaW5lIFNFVFVQQlRERVZfREVGQVVMVCAgICAgICAgIDEKICNlbHNlCiAjZGVmaW5lIFNFVFVQQlRERVZfREVGQVVMVCAgICAgICAgIDAKICNlbmRpZiAvKiBTRVRVUEJUREVWX0VOQUJMRUQgKi8KIAotI2lmZGVmIEJNSUVOQUJMRV9TRVQKLSNkZWZpbmUgQk1JRU5BQkxFX0RFRkFVTFQgICAgICAgICAgMQotI2Vsc2UKLSNkZWZpbmUgQk1JRU5BQkxFX0RFRkFVTFQgICAgICAgICAgMAotI2VuZGlmIC8qIEJNSUVOQUJMRV9TRVQgKi8KLQogI2lmZGVmIEVOQUJMRVVBUlRQUklOVF9TRVQKICNkZWZpbmUgRU5BQkxFVUFSVFBSSU5UX0RFRkFVTFQgICAgMQogI2Vsc2UKICNkZWZpbmUgRU5BQkxFVUFSVFBSSU5UX0RFRkFVTFQgICAgMAogI2VuZGlmIC8qIEVOQUJMRUFSVFBSSU5UX1NFVCAqLwogCi0jaWZkZWYgQVRINktfQ09ORklHX0hJRl9WSVJUVUFMX1NDQVRURVIKKyNpZmRlZiBBVEg2S0xfQ09ORklHX0hJRl9WSVJUVUFMX1NDQVRURVIKICNkZWZpbmUgTk9ISUZTQ0FUVEVSU1VQUE9SVF9ERUZBVUxUICAgIDEKLSNlbHNlIC8qIEFUSDZLX0NPTkZJR19ISUZfVklSVFVBTF9TQ0FUVEVSICovCisjZWxzZSAvKiBBVEg2S0xfQ09ORklHX0hJRl9WSVJUVUFMX1NDQVRURVIgKi8KICNkZWZpbmUgTk9ISUZTQ0FUVEVSU1VQUE9SVF9ERUZBVUxUICAgIDAKLSNlbmRpZiAvKiBBVEg2S19DT05GSUdfSElGX1ZJUlRVQUxfU0NBVFRFUiAqLworI2VuZGlmIC8qIEFUSDZLTF9DT05GSUdfSElGX1ZJUlRVQUxfU0NBVFRFUiAqLworCisKKyNpZiBkZWZpbmVkKENPTkZJR19BVEg2S0xfRU5BQkxFX0NPRVhJU1RFTkNFKQorCisjaWZkZWYgQ09ORklHX0FSNjAweF9CVF9RQ09NCisjZGVmaW5lIEFUSDZLTF9CVF9ERVYgMQorI2VsaWYgZGVmaW5lZChDT05GSUdfQVI2MDB4X0JUX0NTUikKKyNkZWZpbmUgQVRINktMX0JUX0RFViAyCisjZWxzZQorI2RlZmluZSBBVEg2S0xfQlRfREVWIDMKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSNjAweF9EVUFMX0FOVEVOTkEKKyNkZWZpbmUgQVRINktMX0JUX0FOVEVOTkEgMgorI2Vsc2UKKyNkZWZpbmUgQVRINktMX0JUX0FOVEVOTkEgMQorI2VuZGlmCisKKyNlbmRpZiAvKiBDT05GSUdfQVRINktMX0VOQUJMRV9DT0VYSVNURU5DRSAqLwogCiAjaWZkZWYgQVI2MDB4X0JUX0FSMzAwMQogI2RlZmluZSBBUjNLSENJQkFVRF9ERUZBVUxUICAgICAgICAzMDAwMDAwCkBAIC0yNTUsMTEgKzI1NCw3IEBACiAjZGVmaW5lIEhDSVVBUlRTVEVQX0RFRkFVTFQgICAgICAgIDAKICNlbmRpZiAvKiBBUjYwMHhfQlRfQVIzMDAxICovCiAKLSNpZmRlZiBJTklUX01PREVfRFJWX0VOQUJMRUQKICNkZWZpbmUgV0xBTl9JTklUX01PREVfREVGQVVMVCAgICAgV0xBTl9JTklUX01PREVfRFJWCi0jZWxzZQotI2RlZmluZSBXTEFOX0lOSVRfTU9ERV9ERUZBVUxUICAgICBXTEFOX0lOSVRfTU9ERV9VU1IKLSNlbmRpZiAvKiBJTklUX01PREVfRFJWX0VOQUJMRUQgKi8KIAogI2RlZmluZSBBUjZLX1BBVENIX0RPV05MT0FEX0FERFJFU1MoX3BhcmFtLCBfdmVyKSBkbyB7IFwKICAgICBpZiAoKF92ZXIpID09IEFSNjAwM19SRVYxX1ZFUlNJT04pIHsgXApAQCAtMjgzLDE1ICsyNzgsMzcgQEAKICAgICB9IFwKIH0gd2hpbGUgKDApCiAKKyNkZWZpbmUgQVI2S19EQVRBU0VUX1BBVENIX0FERFJFU1MoX3BhcmFtLCBfdmVyKSBkbyB7IFwKKyAgICAgICAgaWYgKChfdmVyKSA9PSBBUjYwMDNfUkVWMl9WRVJTSU9OKSB7IFwKKyAgICAgICAgICAgICAgICAoX3BhcmFtKSA9IEFSNjAwM19SRVYyX0RBVEFTRVRfUEFUQ0hfQUREUkVTUzsgXAorICAgICAgICB9IGVsc2UgaWYgKChfdmVyKSA9PSBBUjYwMDNfUkVWM19WRVJTSU9OKSB7IFwKKyAgICAgICAgICAgICAgICAoX3BhcmFtKSA9IEFSNjAwM19SRVYzX0RBVEFTRVRfUEFUQ0hfQUREUkVTUzsgXAorICAgICAgICB9IGVsc2UgeyBcCisgICAgICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfRVJSLCAoIlVua25vd24gVmVyc2lvbjogJWRcbiIsIF92ZXIpKTsgXAorICAgICAgICBBX0FTU0VSVCgwKTsgXAorICAgICAgICB9IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgQVI2S19BUFBfTE9BRF9BRERSRVNTKF9wYXJhbSwgX3ZlcikgZG8geyBcCisgICAgICAgIGlmICgoX3ZlcikgPT0gQVI2MDAzX1JFVjJfVkVSU0lPTikgeyBcCisgICAgICAgICAgICAgICAgKF9wYXJhbSkgPSBBUjYwMDNfUkVWMl9BUFBfTE9BRF9BRERSRVNTOyBcCisgICAgICAgIH0gZWxzZSBpZiAoKF92ZXIpID09IEFSNjAwM19SRVYzX1ZFUlNJT04pIHsgXAorICAgICAgICAgICAgICAgIChfcGFyYW0pID0gQVI2MDAzX1JFVjNfQVBQX0xPQURfQUREUkVTUzsgXAorICAgICAgICB9IGVsc2UgeyBcCisgICAgICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfRVJSLCAoIlVua25vd24gVmVyc2lvbjogJWRcbiIsIF92ZXIpKTsgXAorICAgICAgICBBX0FTU0VSVCgwKTsgXAorICAgICAgICB9IFwKK30gd2hpbGUgKDApCisKICNkZWZpbmUgQVI2S19BUFBfU1RBUlRfT1ZFUlJJREVfQUREUkVTUyhfcGFyYW0sIF92ZXIpIGRvIHsgXAotICAgIGlmICgoX3ZlcikgPT0gQVI2MDAzX1JFVjFfVkVSU0lPTikgeyBcCi0gICAgICAgIChfcGFyYW0pID0gQVI2MDAzX1JFVjFfQVBQX1NUQVJUX09WRVJSSURFOyBcCi0gICAgfSBlbHNlIGlmICgoX3ZlcikgPT0gQVI2MDAzX1JFVjJfVkVSU0lPTikgeyBcCi0gICAgICAgIChfcGFyYW0pID0gQVI2MDAzX1JFVjJfQVBQX1NUQVJUX09WRVJSSURFOyBcCi0gICAgfSBlbHNlIHsgXAotICAgICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfRVJSLCAoIlVua25vd24gVmVyc2lvbjogJWRcbiIsIF92ZXIpKTsgXAotICAgICAgIEFfQVNTRVJUKDApOyBcCi0gICAgfSBcCisgICAgICAgIGlmICgoX3ZlcikgPT0gQVI2MDAzX1JFVjJfVkVSU0lPTikgeyBcCisgICAgICAgICAgICAgICAgKF9wYXJhbSkgPSBBUjYwMDNfUkVWMl9BUFBfU1RBUlRfT1ZFUlJJREU7IFwKKyAgICAgICAgfSBlbHNlIGlmICgoX3ZlcikgPT0gQVI2MDAzX1JFVjNfVkVSU0lPTikgeyBcCisgICAgICAgICAgICAgICAgKF9wYXJhbSkgPSBBUjYwMDNfUkVWM19BUFBfU1RBUlRfT1ZFUlJJREU7IFwKKyAgICAgICAgfSBlbHNlIHsgXAorICAgICAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX0VSUiwgKCJVbmtub3duIFZlcnNpb246ICVkXG4iLCBfdmVyKSk7IFwKKyAgICAgICAgQV9BU1NFUlQoMCk7IFwKKyAgICAgICAgfSBcCiB9IHdoaWxlICgwKQogCiAvKiBBUjYwMDMgMS4wIGRlZmluaXRpb25zICovCkBAIC0zMDQsMTEgKzMyMSwxMSBAQAogI2RlZmluZSBBUjYwMDNfUkVWMV9BUlRfRklSTVdBUkVfRklMRSAgICAgICAiYXRoNmsvQVI2MDAzL2h3MS4wL2RldmljZS5iaW4iCiAjZGVmaW5lIEFSNjAwM19SRVYxX1BBVENIX0ZJTEUgICAgICAgICAgICAgICJhdGg2ay9BUjYwMDMvaHcxLjAvZGF0YS5wYXRjaC5iaW4iCiAjZGVmaW5lIEFSNjAwM19SRVYxX0VQUElOR19GSVJNV0FSRV9GSUxFICAgICJhdGg2ay9BUjYwMDMvaHcxLjAvZW5kcG9pbnRwaW5nLmJpbiIKLSNpZmRlZiBBUjYwMHhfU0QzMV9YWFgKKyNpZmRlZiBDT05GSUdfQVI2MDB4X1NEMzFfWFhYCiAjZGVmaW5lIEFSNjAwM19SRVYxX0JPQVJEX0RBVEFfRklMRSAgICAgICAgICJhdGg2ay9BUjYwMDMvaHcxLjAvYmRhdGEuU0QzMS5iaW4iCi0jZWxpZiBkZWZpbmVkKEFSNjAweF9TRDMyX1hYWCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSNjAweF9TRDMyX1hYWCkKICNkZWZpbmUgQVI2MDAzX1JFVjFfQk9BUkRfREFUQV9GSUxFICAgICAgICAgImF0aDZrL0FSNjAwMy9odzEuMC9iZGF0YS5TRDMyLmJpbiIKLSNlbGlmIGRlZmluZWQoQVI2MDB4X1dCMzFfWFhYKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQVI2MDB4X1dCMzFfWFhYKQogI2RlZmluZSBBUjYwMDNfUkVWMV9CT0FSRF9EQVRBX0ZJTEUgICAgICAgICAiYXRoNmsvQVI2MDAzL2h3MS4wL2JkYXRhLldCMzEuYmluIgogI2Vsc2UKICNkZWZpbmUgQVI2MDAzX1JFVjFfQk9BUkRfREFUQV9GSUxFICAgICAgICAgImF0aDZrL0FSNjAwMy9odzEuMC9iZGF0YS5DVVNUT00uYmluIgpAQCAtMzI0LDE2ICszNDEsMzUgQEAKICNkZWZpbmUgQVI2MDAzX1JFVjJfQVJUX0ZJUk1XQVJFX0ZJTEUgICAgICAgImF0aDZrL0FSNjAwMy9odzIuMC9kZXZpY2UuYmluIgogI2RlZmluZSBBUjYwMDNfUkVWMl9QQVRDSF9GSUxFICAgICAgICAgICAgICAiYXRoNmsvQVI2MDAzL2h3Mi4wL2RhdGEucGF0Y2guYmluIgogI2RlZmluZSBBUjYwMDNfUkVWMl9FUFBJTkdfRklSTVdBUkVfRklMRSAgICAiYXRoNmsvQVI2MDAzL2h3Mi4wL2VuZHBvaW50cGluZy5iaW4iCi0jaWZkZWYgQVI2MDB4X1NEMzFfWFhYCisjaWZkZWYgQ09ORklHX0FSNjAweF9TRDMxX1hYWAogI2RlZmluZSBBUjYwMDNfUkVWMl9CT0FSRF9EQVRBX0ZJTEUgICAgICAgICAiYXRoNmsvQVI2MDAzL2h3Mi4wL2JkYXRhLlNEMzEuYmluIgotI2VsaWYgZGVmaW5lZChBUjYwMHhfU0QzMl9YWFgpCisjZWxpZiBkZWZpbmVkKENPTkZJR19BUjYwMHhfU0QzMl9YWFgpCiAjZGVmaW5lIEFSNjAwM19SRVYyX0JPQVJEX0RBVEFfRklMRSAgICAgICAgICJhdGg2ay9BUjYwMDMvaHcyLjAvYmRhdGEuU0QzMi5iaW4iCi0jZWxpZiBkZWZpbmVkKEFSNjAweF9XQjMxX1hYWCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSNjAweF9XQjMxX1hYWCkKICNkZWZpbmUgQVI2MDAzX1JFVjJfQk9BUkRfREFUQV9GSUxFICAgICAgICAgImF0aDZrL0FSNjAwMy9odzIuMC9iZGF0YS5XQjMxLmJpbiIKICNlbHNlCiAjZGVmaW5lIEFSNjAwM19SRVYyX0JPQVJEX0RBVEFfRklMRSAgICAgICAgICJhdGg2ay9BUjYwMDMvaHcyLjAvYmRhdGEuQ1VTVE9NLmJpbiIKICNlbmRpZiAvKiBCb2FyZCBEYXRhIEZpbGUgKi8KIAorLyogQVI2MDAzIDMuMCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBBUjYwMDNfUkVWM19WRVJTSU9OICAgICAgICAgICAgICAgICAweDMwMDAwNTgyCisjZGVmaW5lIEFSNjAwM19SRVYzX09UUF9GSUxFICAgICAgICAgICAgICAgICJhdGg2ay9BUjYwMDMvaHcyLjEuMS9vdHAuYmluIgorI2RlZmluZSBBUjYwMDNfUkVWM19GSVJNV0FSRV9GSUxFICAgICAgICAgICAiYXRoNmsvQVI2MDAzL2h3Mi4xLjEvYXRod2xhbi5iaW4iCisjZGVmaW5lIEFSNjAwM19SRVYzX1RDTURfRklSTVdBUkVfRklMRSAgICAiYXRoNmsvQVI2MDAzL2h3Mi4xLjEvYXRodGNtZF9yYW0uYmluIgorI2RlZmluZSBBUjYwMDNfUkVWM19BUlRfRklSTVdBUkVfRklMRSAgICAgICAiYXRoNmsvQVI2MDAzL2h3Mi4xLjEvZGV2aWNlLmJpbiIKKyNkZWZpbmUgQVI2MDAzX1JFVjNfUEFUQ0hfRklMRSAgICAgICAgICAgICJhdGg2ay9BUjYwMDMvaHcyLjEuMS9kYXRhLnBhdGNoLmJpbiIKKyNkZWZpbmUgQVI2MDAzX1JFVjNfRVBQSU5HX0ZJUk1XQVJFX0ZJTEUgImF0aDZrL0FSNjAwMy9odzIuMS4xL2VuZHBvaW50cGluZy5iaW4iCisjaWZkZWYgQ09ORklHX0FSNjAweF9TRDMxX1hYWAorI2RlZmluZSBBUjYwMDNfUkVWM19CT0FSRF9EQVRBX0ZJTEUgICAgICAgImF0aDZrL0FSNjAwMy9odzIuMS4xL2JkYXRhLlNEMzEuYmluIgorI2VsaWYgZGVmaW5lZChDT05GSUdfQVI2MDB4X1NEMzJfWFhYKQorI2RlZmluZSBBUjYwMDNfUkVWM19CT0FSRF9EQVRBX0ZJTEUgICAgICAgICJhdGg2ay9BUjYwMDMvaHcyLjEuMS9iZGF0YS5TRDMyLmJpbiIKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSNjAweF9XQjMxX1hYWCkKKyNkZWZpbmUgQVI2MDAzX1JFVjNfQk9BUkRfREFUQV9GSUxFICAgICAgICAiYXRoNmsvQVI2MDAzL2h3Mi4xLjEvYmRhdGEuV0IzMS5iaW4iCisjZWxzZQorI2RlZmluZSBBUjYwMDNfUkVWM19CT0FSRF9EQVRBX0ZJTEUgICAgICAiYXRoNmsvQVI2MDAzL2h3Mi4xLjEvYmRhdGEuQ1VTVE9NLmJpbiIKKyNlbmRpZiAvKiBCb2FyZCBEYXRhIEZpbGUgKi8KKworCiAvKiBQb3dlciBzdGF0ZXMgKi8KIGVudW0gewogICAgIFdMQU5fUFdSX0NUUkxfVVAgPSAwLApAQCAtMzg1LDcgKzQyMSw2IEBACiAgICAgdTggYXJLZXlbNjRdOwogfSA7CiAKLSNpZmRlZiBBVEg2S19DT05GSUdfQ0ZHODAyMTEKIHN0cnVjdCBhcl9rZXkgewogICAgIHU4IGtleVtXTEFOX01BWF9LRVlfTEVOXTsKICAgICB1OCBrZXlfbGVuOwpAQCAtMzk5LDggKzQzNCw2IEBACiAgICAgU01FX0NPTk5FQ1RJTkcsCiAgICAgU01FX0NPTk5FQ1RFRAogfTsKLSNlbmRpZiAvKiBBVEg2S19DT05GSUdfQ0ZHODAyMTEgKi8KLQogCiBzdHJ1Y3QgYXJfbm9kZV9tYXBwaW5nIHsKICAgICB1OCBtYWNBZGRyZXNzWzZdOwpAQCAtNTU3LDExICs1OTAsOSBAQAogICAgIHUzMiBsb2dfY250OwogICAgIHUzMiBkYmdsb2dfaW5pdF9kb25lOwogICAgIHUzMiBhckNvbm5lY3RDdHJsRmxhZ3M7Ci0jaWZkZWYgVVNFUl9LRVlTCiAgICAgczMyIHVzZXJfc2F2ZWRrZXlzX3N0YXQ7CiAgICAgdTMyIHVzZXJfa2V5X2N0cmw7CiAgICAgc3RydWN0IFVTRVJfU0FWRURLRVlTICAgdXNlcl9zYXZlZF9rZXlzOwotI2VuZGlmCiAgICAgVVNFUl9SU1NJX1RIT0xEIHJzc2lfbWFwWzEyXTsKICAgICB1OCBhclVzZXJCc3NGaWx0ZXI7CiAgICAgdTE2IGFwX3Byb2ZpbGVfZmxhZzsgICAgLyogQVAgbW9kZSAqLwpAQCAtNTc3LDcgKzYwOCw2IEBACiAjaWZuZGVmIEVYUE9SVF9IQ0lfQlJJREdFX0lOVEVSRkFDRQogICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICpoY2lkZXZfaW5mbzsKICNlbmRpZgotICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICpoY2lwYWxfaW5mbzsKICAgICBXTUlfQVBfTU9ERV9TVEFUICAgICAgICBhckFQU3RhdHM7CiAgICAgdTggYXBfaGlkZGVuX3NzaWQ7CiAgICAgdTggYXBfY291bnRyeV9jb2RlWzNdOwpAQCAtNTk3LDEyICs2MjcsMTAgQEAKIAlXTUlfQlRDT0VYX1NUQVRTX0VWRU5UICBhckJ0Y29leFN0YXRzOwogICAgIHMzMiAoKmV4aXRDYWxsYmFjaykodm9pZCAqY29uZmlnKTsgIC8qIGdlbmVyaWMgY2FsbGJhY2sgYXQgQVI2SyBleGl0ICovCiAgICAgc3RydWN0IGhpZl9kZXZpY2Vfb3NfZGV2aWNlX2luZm8gICBvc0RldkluZm87Ci0jaWZkZWYgQVRINktfQ09ORklHX0NGRzgwMjExCiAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjsKICAgICBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICAgICpzY2FuX3JlcXVlc3Q7CiAgICAgc3RydWN0IGFyX2tleSAgIGtleXNbV01JX01BWF9LRVlfSU5ERVggKyAxXTsKICAgICB1MzIgc21lU3RhdGU7Ci0jZW5kaWYgLyogQVRINktfQ09ORklHX0NGRzgwMjExICovCiAgICAgdTE2IGFyV2xhblBvd2VyU3RhdGU7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgIGFyV2xhbk9mZjsKICNpZmRlZiBDT05GSUdfUE0KQEAgLTYyMiw2ICs2NTAsNyBAQAogI2lmZGVmIENPTkZJR19BUF9WSVJUVUFMX0FEQVBURVJfU1VQUE9SVAogICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICphckFwRGV2OwogI2VuZGlmCisgICAgdTggYXJBdXRvQXV0aFN0YWdlOwogfTsKIAogI2lmZGVmIENPTkZJR19BUF9WSVJUVUFMX0FEQVBURVJfU1VQUE9SVApAQCAtNjMyLDMwICs2NjEsMTAgQEAKIH07CiAjZW5kaWYgLyogQ09ORklHX0FQX1ZJUlRVQUxfQURBUFRFUl9TVVBQT1JUICovCiAKLSNpZmRlZiBBVEg2S19DT05GSUdfQ0ZHODAyMTEKIHN0YXRpYyBpbmxpbmUgdm9pZCAqYXI2a19wcml2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAgICAgcmV0dXJuICh3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKSk7CiB9Ci0jZWxzZQotI2lmZGVmIENPTkZJR19BUF9WSVJUVUFMX0FEQVBURVJfU1VQUE9SVAotc3RhdGljIGlubGluZSB2b2lkICphcjZrX3ByaXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLSAgICBleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmFyQXBOZXREZXY7Ci0KLSAgICBpZiAoYXJBcE5ldERldiA9PSBkZXYpIHsKLSAgICAgICAgLyogcmV0dXJuIGFyRGV2IHNhdmVkIGluIHZpcnR1YWwgaW50ZXJmYWNlIGNvbnRleHQgKi8KLSAgICAgICAgc3RydWN0IGFyX3ZpcnR1YWxfaW50ZXJmYWNlICphclZpckRldjsKLSAgICAgICAgYXJWaXJEZXYgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgICAgICByZXR1cm4gYXJWaXJEZXYtPmFyRGV2OyAgIAotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBuZXRkZXZfcHJpdihkZXYpOwotICAgIH0KLX0KLSNlbHNlCi0jZGVmaW5lIGFyNmtfcHJpdiAgIG5ldGRldl9wcml2Ci0jZW5kaWYgLyogQ09ORklHX0FQX1ZJUlRVQUxfQURBUFRFUl9TVVBQT1JUICovCi0jZW5kaWYgLyogQVRINktfQ09ORklHX0NGRzgwMjExICovCiAKICNkZWZpbmUgU0VUX0hDSV9CVVNfVFlQRShwSGNpRGV2LCBfX2J1cywgX190eXBlKSBkbyB7IFwKICAgICAocEhjaURldiktPmJ1cyA9IChfX2J1cyk7IFwKQEAgLTcwMSw5ICs3MTAsNiBAQAogICAgIHNwaW5fdW5sb2NrX2JoKGxvY2spOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfSB3aGlsZSAoMCkKIAotaW50IGFyNjAwMF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKLWludCBhcjYwMDBfaW9jdGxfZGlzcGF0Y2hlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKLXZvaWQgYXI2MDAwX2dwaW9faW5pdCh2b2lkKTsKIHZvaWQgYXI2MDAwX2luaXRfcHJvZmlsZV9pbmZvKHN0cnVjdCBhcjZfc29mdGMgKmFyKTsKIHZvaWQgYXI2MDAwX2luc3RhbGxfc3RhdGljX3dlcF9rZXlzKHN0cnVjdCBhcjZfc29mdGMgKmFyKTsKIGludCBhcjYwMDBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvb3MvbGludXgvaW5jbHVkZS9hcjZ4YXBpX2xpbnV4LmggYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2luY2x1ZGUvYXI2eGFwaV9saW51eC5oCmluZGV4IDFhY2ZiOWMuLjE4NGRiZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvb3MvbGludXgvaW5jbHVkZS9hcjZ4YXBpX2xpbnV4LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9pbmNsdWRlL2FyNnhhcGlfbGludXguaApAQCAtODMsMTEgKzgzLDYgQEAKIAogdm9pZCBhcjYwMDBfZGJnbG9nX2luaXRfZG9uZShzdHJ1Y3QgYXI2X3NvZnRjICphcik7CiAKLSNpZmRlZiBTRU5EX0VWRU5UX1RPX0FQUAotdm9pZCBhcjYwMDBfc2VuZF9ldmVudF90b19hcHAoc3RydWN0IGFyNl9zb2Z0YyAqYXIsIHUxNiBldmVudElkLCB1OCAqZGF0YXAsIGludCBsZW4pOwotdm9pZCBhcjYwMDBfc2VuZF9nZW5lcmljX2V2ZW50X3RvX2FwcChzdHJ1Y3QgYXI2X3NvZnRjICphciwgdTE2IGV2ZW50SWQsIHU4ICpkYXRhcCwgaW50IGxlbik7Ci0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19IT1NUX1RDTURfU1VQUE9SVAogdm9pZCBhcjYwMDBfdGNtZF9yeF9yZXBvcnRfZXZlbnQodm9pZCAqZGV2dCwgdTggKnJlc3VsdHMsIGludCBsZW4pOwogI2VuZGlmCkBAIC0xODMsOSArMTc4LDYgQEAKIHZvaWQgYXI2MDAwX2NoZWNrX3dvd19zdGF0dXMoc3RydWN0IGFyNl9zb2Z0YyAqYXIsIHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgaXNFdmVudCk7CiAjZW5kaWYKIAotdm9pZCBhcjYwMDBfcG1faW5pdCh2b2lkKTsKLXZvaWQgYXI2MDAwX3BtX2V4aXQodm9pZCk7Ci0KICNpZmRlZiBDT05GSUdfQVBfVklSVFVBTF9BREFQVEVSX1NVUFBPUlQKIGludCBhcjYwMDBfYWRkX2FwX2ludGVyZmFjZShzdHJ1Y3QgYXI2X3NvZnRjICphciwgY2hhciAqaWZuYW1lKTsKIGludCBhcjYwMDBfcmVtb3ZlX2FwX2ludGVyZmFjZShzdHJ1Y3QgYXI2X3NvZnRjICphcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2luY2x1ZGUvYXRoZHJ2X2xpbnV4LmggYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2luY2x1ZGUvYXRoZHJ2X2xpbnV4LmgKaW5kZXggNjY4MTdjMi4uM2Q1ZjAxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9pbmNsdWRlL2F0aGRydl9saW51eC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvb3MvbGludXgvaW5jbHVkZS9hdGhkcnZfbGludXguaApAQCAtNjIwLDcgKzYyMCw2IEBACiAgKi8KICNkZWZpbmUgQVI2MDAwX1hJT0NUTF9XTUlfU0VUX1RYT1AgICAgICAgICAgICAgICAgICAgICAgNTcKIAotI2lmZGVmIFVTRVJfS0VZUwogLyoKICAqIGFyZ3VtZW50czoKICAqIFVJTlQzMiBjbWQgKEFSNjAwMF9YSU9DVExfVVNFUl9TRVRLRVlTKQpAQCAtNjI4LDcgKzYyNyw2IEBACiAgKiB1c2VzIHN0cnVjdCBhcjYwMDBfdXNlcl9zZXRrZXlzX2luZm8KICAqLwogI2RlZmluZSBBUjYwMDBfWElPQ1RMX1VTRVJfU0VUS0VZUyAgICAgICAgICAgICAgICAgICAgICA1OAotI2VuZGlmIC8qIFVTRVJfS0VZUyAqLwogCiAjZGVmaW5lIEFSNjAwMF9YSU9DVExfV01JX1NFVF9LRUVQQUxJVkUgICAgICAgICAgICAgICAgIDU5CiAvKgpAQCAtOTQyLDcgKzk0MCw3IEBACiAKICNkZWZpbmUgQVI2MDAwX1hJT0NUTF9IQ0lfQ01EICAgICAgICAgICAgICAgICAgICAgICAxMzIKIAotI2RlZmluZSBBUjYwMDBfWElPQ1RMX0FDTF9EQVRBICAgICAgICAgICAgICAgICAgICAgIDEzMworI2RlZmluZSBBUjYwMDBfWElPQ1RMX0FDTF9EQVRBICAgICAgICAgICAgICAgICAgICAgIDEzMyAvKiB1c2VkIHRvIGJlIHVzZWQgZm9yIFBBTCAqLwogCiAjZGVmaW5lIEFSNjAwMF9YSU9DVExfV0xBTl9DT05OX1BSRUNFREVOQ0UgICAgICAgICAgMTM0CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvb3MvbGludXgvaW5jbHVkZS9hdGh0eXBlc19saW51eC5oIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9pbmNsdWRlL2F0aHR5cGVzX2xpbnV4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjYjU2MzIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9pbmNsdWRlL2F0aHR5cGVzX2xpbnV4LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLS8vIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlIGJhc2ljIGF0aGVyb3MgZGF0YSB0eXBlcy4KLS8vIEl0IGlzIHVzZWQgdG8gbWFwIHRoZSBkYXRhIHR5cGVzIGluIGF0aGVyb3MgZmlsZXMgdG8gYSBwbGF0Zm9ybSBzcGVjaWZpYwotLy8gdHlwZS4KLS8vIENvcHlyaWdodCAoYykgMjAwNC0yMDEwIEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgotLy8gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vCi0vLyAKLS8vCi0vLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLS8vIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0vLwotLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0vLyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0vLyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgotLy8gQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotLy8gV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0vLyBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgotLy8gT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLS8vCi0vLwotLy8KLS8vIEF1dGhvcihzKTogPSJBdGhlcm9zIgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmbmRlZiBfQVRIVFlQRVNfTElOVVhfSF8KLSNkZWZpbmUgX0FUSFRZUEVTX0xJTlVYX0hfCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYKLQotdHlwZWRlZiBpbnQ4X3QgICAgICBBX0lOVDg7Ci10eXBlZGVmIGludDE2X3QgICAgIEFfSU5UMTY7Ci10eXBlZGVmIGludDMyX3QgICAgIEFfSU5UMzI7Ci10eXBlZGVmIGludDY0X3QgICAgIEFfSU5UNjQ7Ci0KLXR5cGVkZWYgdV9pbnQ4X3QgICAgIEFfVUlOVDg7Ci10eXBlZGVmIHVfaW50MTZfdCAgICBBX1VJTlQxNjsKLXR5cGVkZWYgdV9pbnQzMl90ICAgIEFfVUlOVDMyOwotdHlwZWRlZiB1X2ludDY0X3QgICAgQV9VSU5UNjQ7Ci0KLXR5cGVkZWYgY2hhciAgICAgICAgICAgIEFfQ0hBUjsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAgIEFfQVRIX1RJTUVSOwotCi0KLSNlbmRpZiAvKiBfQVRIVFlQRVNfTElOVVhfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvb3MvbGludXgvaW5jbHVkZS9jb25maWdfbGludXguaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvb3MvbGludXgvaW5jbHVkZS9jb25maWdfbGludXguaAppbmRleCA1MGY1M2QzLi5kNDAzMGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2luY2x1ZGUvY29uZmlnX2xpbnV4LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9pbmNsdWRlL2NvbmZpZ19saW51eC5oCkBAIC0zMSwxMyArMzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KIAogLyoKLSAqIEhvc3Qtc2lkZSBHUElPIHN1cHBvcnQgaXMgb3B0aW9uYWwuCi0gKiBJZiBydW4tdGltZSBhY2Nlc3MgdG8gR1BJTyBwaW5zIGlzIG5vdCByZXF1aXJlZCwgdGhlbgotICogdGhpcyBzaG91bGQgYmUgY2hhbmdlZCB0byAjdW5kZWYuCi0gKi8KLSNkZWZpbmUgQ09ORklHX0hPU1RfR1BJT19TVVBQT1JUCi0KLS8qCiAgKiBIb3N0IHNpZGUgVGVzdCBDb21tYW5kIHN1cHBvcnQKICAqLwogI2RlZmluZSBDT05GSUdfSE9TVF9UQ01EX1NVUFBPUlQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvb3MvbGludXgvaW5jbHVkZS9vc2FwaV9saW51eC5oIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9pbmNsdWRlL29zYXBpX2xpbnV4LmgKaW5kZXggNTNiNTAwYy4uMDcwNzhiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9pbmNsdWRlL29zYXBpX2xpbnV4LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9pbmNsdWRlL29zYXBpX2xpbnV4LmgKQEAgLTc5LDMzICs3OSwxMCBAQAogI2RlZmluZSBBX01FTVpFUk8oYWRkciwgbGVuKSAgICAgICAgICAgIG1lbXNldChhZGRyLCAwLCBsZW4pCiAjZGVmaW5lIEFfTUFMTE9DKHNpemUpICAgICAgICAgICAgICAgICAga21hbGxvYygoc2l6ZSksIEdGUF9LRVJORUwpCiAjZGVmaW5lIEFfTUFMTE9DX05PV0FJVChzaXplKSAgICAgICAgICAga21hbGxvYygoc2l6ZSksIEdGUF9BVE9NSUMpCi0jZGVmaW5lIEFfRlJFRShhZGRyKSAgICAgICAgICAgICAgICAgICAga2ZyZWUoYWRkcikKIAotI2lmIGRlZmluZWQoQU5EUk9JRF9FTlYpICYmIGRlZmluZWQoQ09ORklHX0FORFJPSURfTE9HR0VSKQotZXh0ZXJuIHVuc2lnbmVkIGludCBlbmFibGVsb2djYXQ7Ci1leHRlcm4gaW50IGFuZHJvaWRfbG9nZ2VyX2x2KHZvaWQqIG1vZHVsZSwgaW50IG1hc2spOwotZW51bSBsb2dpZHggeyBMT0dfTUFJTl9JRFggPSAwIH07Ci1leHRlcm4gaW50IGxvZ2dlcl93cml0ZShjb25zdCBlbnVtIGxvZ2lkeCBpZHgsIAotICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgcHJpbywKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyIF9fa2VybmVsICogY29uc3QgdGFnLAotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgX19rZXJuZWwgKiBjb25zdCBmbXQsCi0gICAgICAgICAgICAgICAgLi4uKTsKLSNkZWZpbmUgQV9BTkRST0lEX1BSSU5URihtYXNrLCBtb2R1bGUsIHRhZ3MsIGFyZ3MuLi4pIGRvIHsgIFwKLSAgICBpZiAoZW5hYmxlbG9nY2F0KSBcCi0gICAgICAgIGxvZ2dlcl93cml0ZShMT0dfTUFJTl9JRFgsIGFuZHJvaWRfbG9nZ2VyX2x2KG1vZHVsZSwgbWFzayksIHRhZ3MsIGFyZ3MpOyBcCi0gICAgZWxzZSBcCi0gICAgICAgIHByaW50ayhLRVJOX0FMRVJUIGFyZ3MpOyBcCi19IHdoaWxlICgwKQotI2lmZGVmIERFQlVHCi0jZGVmaW5lIEFfTE9HR0VSX01PRFVMRV9OQU1FKHgpICN4Ci0jZGVmaW5lIEFfTE9HR0VSKG1hc2ssIG1vZCwgYXJncy4uLikgXAotICAgIEFfQU5EUk9JRF9QUklOVEYobWFzaywgJkdFVF9BVEhfTU9EVUxFX0RFQlVHX1ZBUl9OQU1FKG1vZCksICJhcjZrXyIgQV9MT0dHRVJfTU9EVUxFX05BTUUobW9kKSwgYXJncyk7Ci0jZW5kaWYgCi0jZGVmaW5lIEFfUFJJTlRGKGFyZ3MuLi4pIEFfQU5EUk9JRF9QUklOVEYoQVRIX0RFQlVHX0lORk8sIE5VTEwsICJhcjZrX2RyaXZlciIsIGFyZ3MpCi0jZWxzZQogI2RlZmluZSBBX0xPR0dFUihtYXNrLCBtb2QsIGFyZ3MuLi4pICAgIHByaW50ayhLRVJOX0FMRVJUIGFyZ3MpCiAjZGVmaW5lIEFfUFJJTlRGKGFyZ3MuLi4pICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fQUxFUlQgYXJncykKLSNlbmRpZiAvKiBBTkRST0lEICovCisKICNkZWZpbmUgQV9QUklOVEZfTE9HKGFyZ3MuLi4pICAgICAgICAgICBwcmludGsoYXJncykKICNkZWZpbmUgQV9TUFJJTlRGKGJ1ZiwgYXJncy4uLikJCQlzcHJpbnRmIChidWYsIGFyZ3MpCiAKQEAgLTIxMSwxNyArMTg4LDggQEAKICNkZWZpbmUgQV9BU1NFUlQoZXhwcikKICNlbmRpZiAvKiBERUJVRyAqLwogCi0jaWZkZWYgQU5EUk9JRF9FTlYKLXN0cnVjdCBmaXJtd2FyZTsKLWludCBhbmRyb2lkX3JlcXVlc3RfZmlybXdhcmUoY29uc3Qgc3RydWN0IGZpcm13YXJlICoqZmlybXdhcmVfcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpOwotdm9pZCBhbmRyb2lkX3JlbGVhc2VfZmlybXdhcmUoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSk7Ci0jZGVmaW5lIEFfUkVRVUVTVF9GSVJNV0FSRShfcHBmLCBfcGZpbGUsIF9kZXYpIGFuZHJvaWRfcmVxdWVzdF9maXJtd2FyZShfcHBmLCBfcGZpbGUsIF9kZXYpCi0jZGVmaW5lIEFfUkVMRUFTRV9GSVJNV0FSRShfcGYpIGFuZHJvaWRfcmVsZWFzZV9maXJtd2FyZShfcGYpCi0jZWxzZQogI2RlZmluZSBBX1JFUVVFU1RfRklSTVdBUkUoX3BwZiwgX3BmaWxlLCBfZGV2KSByZXF1ZXN0X2Zpcm13YXJlKF9wcGYsIF9wZmlsZSwgX2RldikKICNkZWZpbmUgQV9SRUxFQVNFX0ZJUk1XQVJFKF9wZikgcmVsZWFzZV9maXJtd2FyZShfcGYpCi0jZW5kaWYgCiAKIC8qCiAgKiBJbml0aWFsaXphdGlvbiBvZiB0aGUgbmV0d29yayBidWZmZXIgc3Vic3lzdGVtCkBAIC0zNjQsMTkgKzMzMiw4IEBACiAKICNkZWZpbmUgQV9NRU1aRVJPKGFkZHIsIGxlbikgICAgICAgICAgICBtZW1zZXQoKGFkZHIpLCAwLCAobGVuKSkKICNkZWZpbmUgQV9NQUxMT0Moc2l6ZSkgICAgICAgICAgICAgICAgICBtYWxsb2Moc2l6ZSkKLSNkZWZpbmUgQV9GUkVFKGFkZHIpICAgICAgICAgICAgICAgICAgICBmcmVlKGFkZHIpCiAKLSNpZmRlZiBBTkRST0lECi0jaWZuZGVmIGVycgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jZGVmaW5lIGVycihfcywgYXJncy4uLikgZG8geyBcCi0gICAgZnByaW50ZihzdGRlcnIsICIlczogbGluZSAlZCAiLCBfX0ZJTEVfXywgX19MSU5FX18pOyBcCi0gICAgZnByaW50ZihzdGRlcnIsIGFyZ3MpOyBmcHJpbnRmKHN0ZGVyciwgIjogJWRcbiIsIGVycm5vKTsgXAotICAgIGV4aXQoX3MpOyB9IHdoaWxlICgwKQotI2VuZGlmCi0jZWxzZQogI2luY2x1ZGUgPGVyci5oPgotI2VuZGlmCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvb3MvbGludXgvaW5jbHVkZS93bGFuX2NvbmZpZy5oIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9pbmNsdWRlL3dsYW5fY29uZmlnLmgKaW5kZXggMmRlNWNlZi4uYzFmZTBjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9pbmNsdWRlL3dsYW5fY29uZmlnLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9pbmNsdWRlL3dsYW5fY29uZmlnLmgKQEAgLTU2LDExICs1Niw3IEBACiAgKiBJZiB0aGUgZmlybXdhcmUgc3VjY2Vzc2x5IHJvYW1zIHdpdGhpbiB0aGUgZGlzY29ubmVjdCB0aW1lb3V0CiAgKiBpdCBzZW5kcyBhIG5ldyBjb25uZWN0IGV2ZW50CiAgKi8KLSNpZmRlZiBBTkRST0lEX0VOVgotI2RlZmluZSBXTEFOX0NPTkZJR19ESVNDT05ORUNUX1RJTUVPVVQgMwotI2Vsc2UKICNkZWZpbmUgV0xBTl9DT05GSUdfRElTQ09OTkVDVF9USU1FT1VUIDEwCi0jZW5kaWYgLyogQU5EUk9JRF9FTlYgKi8gCiAKIC8qCiAgKiBUaGlzIGNvbmZpZ3VyYXRpb24gaXRlbSBkaXNhYmxlcyAxMW4gc3VwcG9ydC4gCkBAIC0xMDksMTAgKzEwNSw0IEBACiAgKi8KICNkZWZpbmUgV0xBTl9DT05GSUdfRElTQUJMRV9UWF9CVVJTVElORyAgICAgMAogCi0vKgotICogUGxhdGZvcm0gc3BlY2lmaWMgZnVuY3Rpb24gdG8gcG93ZXIgT04vT0ZGIEFSNjAwMCAKLSAqIGFuZCBlbmFibGUvZGlzYWJsZSBTRElPIGNhcmQgZGV0ZWN0aW9uCi0gKi8KLSNkZWZpbmUgcGxhdF9zZXR1cF9wb3dlcihvbiwgZGV0ZWN0KQotCiAjZW5kaWYgLyogX0hPU1RfV0xBTl9DT05GSUdfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvb3MvbGludXgvaW5jbHVkZS93bWlfZmlsdGVyX2xpbnV4LmggYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2luY2x1ZGUvd21pX2ZpbHRlcl9saW51eC5oCmluZGV4IGQxNzI2MjUuLjFlYjZmODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvb3MvbGludXgvaW5jbHVkZS93bWlfZmlsdGVyX2xpbnV4LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9pbmNsdWRlL3dtaV9maWx0ZXJfbGludXguaApAQCAtMjY2LDcgKzI2Niw3IEBACiAoMHhGRiksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBUjYwMDBfWElPQ1RMX0RFTEVfQUdHUiAgICAgICAgICAgICAgICAgICAgICAgICAxMzAgICovCiAoMHhGRiksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBUjYwMDBfWElPQ1RMX0ZFVENIX1RBUkdFVF9SRUdTICAgICAgICAgICAgICAgICAxMzEgICovCiAoMHhGRiksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBUjYwMDBfWElPQ1RMX0hDSV9DTUQgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzIgICovCi0oMHhGRiksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBUjYwMDBfWElPQ1RMX0FDTF9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAxMzMgICovCisoMHhGRiksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBUjYwMDBfWElPQ1RMX0FDTF9EQVRBKHVzZWQgdG8gYmUgdXNlZCBmb3IgUEFMKSAxMzMgICovCiAoMHhGRiksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBUjYwMDBfWElPQ1RMX1dMQU5fQ09OTl9QUkVDRURFTkNFICAgICAgICAgICAgICAxMzQgICovCiAoQVBfTkVUV09SSyksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBUjYwMDBfWElPQ1RMX0FQX1NFVF8xMUJHX1JBVEVTRVQgICAgICAgICAgICAgICAxMzUgICovCiAoMHhGRiksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2lvY3RsLmMgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2lvY3RsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkYWEyMDEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9pb2N0bC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDc2NyArMCwwIEBACi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ29weXJpZ2h0IChjKSAyMDA0LTIwMTAgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCi0vLyBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIAotLy8KLS8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotLy8gcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLS8vCi0vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLS8vIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLS8vIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0vLyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0vLyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLS8vIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0vLyBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotLy8KLS8vCi0vLwotLy8gQXV0aG9yKHMpOiA9IkF0aGVyb3MiCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jaW5jbHVkZSAiYXI2MDAwX2Rydi5oIgotI2luY2x1ZGUgImllZWU4MDIxMV9pb2N0bC5oIgotI2luY2x1ZGUgImFyNmthcF9jb21tb24uaCIKLSNpbmNsdWRlICJ0YXJnYWRkcnMuaCIKLSNpbmNsdWRlICJhX2hjaS5oIgotI2luY2x1ZGUgIndsYW5fY29uZmlnLmgiCi0KLWV4dGVybiBpbnQgZW5hYmxlcnNzaWNvbXBlbnNhdGlvbjsKLXUzMiB0Y21kUnhGcmVxOwotZXh0ZXJuIHVuc2lnbmVkIGludCB3bWl0aW1lb3V0OwotZXh0ZXJuIEFfV0FJVFFVRVVFX0hFQUQgYXJFdmVudDsKLWV4dGVybiBpbnQgdHNwZWNDb21wbGlhbmNlOwotZXh0ZXJuIGludCBibWllbmFibGU7Ci1leHRlcm4gaW50IGxvZ2hjaTsKLQotc3RhdGljIGludAotYXI2MDAwX2lvY3RsX2dldF9yb2FtX3RibChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxKQotewotICAgIHN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLQotICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0KLSAgICBpZih3bWlfZ2V0X3JvYW1fdGJsX2NtZChhci0+YXJXbWkpICE9IDApIHsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLWFyNjAwMF9pb2N0bF9nZXRfcm9hbV9kYXRhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEpCi17Ci0gICAgc3RydWN0IGFyNl9zb2Z0YyAqYXIgPSAoc3RydWN0IGFyNl9zb2Z0YyAqKWFyNmtfcHJpdihkZXYpOwotCi0gICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgIHJldHVybiAtRUlPOwotICAgIH0KLQotCi0gICAgLyogY3VycmVudGx5IGFzc3VtZSBvbmx5IHJvYW0gdGltZXMgYXJlIHJlcXVpcmVkICovCi0gICAgaWYod21pX2dldF9yb2FtX2RhdGFfY21kKGFyLT5hcldtaSwgUk9BTV9EQVRBX1RJTUUpICE9IDApIHsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotCi0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotYXI2MDAwX2lvY3RsX3NldF9yb2FtX2N0cmwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2hhciAqdXNlcmRhdGEpCi17Ci0gICAgc3RydWN0IGFyNl9zb2Z0YyAqYXIgPSAoc3RydWN0IGFyNl9zb2Z0YyAqKWFyNmtfcHJpdihkZXYpOwotICAgIFdNSV9TRVRfUk9BTV9DVFJMX0NNRCBjbWQ7Ci0gICAgdTggc2l6ZSA9IHNpemVvZihjbWQpOwotCi0gICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgIHJldHVybiAtRUlPOwotICAgIH0KLQotCi0gICAgaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIHVzZXJkYXRhLCBzaXplKSkgewotICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICB9Ci0KLSAgICBpZiAoY21kLnJvYW1DdHJsVHlwZSA9PSBXTUlfU0VUX0hPU1RfQklBUykgewotICAgICAgICBpZiAoY21kLmluZm8uYnNzQmlhc0luZm8ubnVtQnNzID4gMSkgewotICAgICAgICAgICAgc2l6ZSArPSAoY21kLmluZm8uYnNzQmlhc0luZm8ubnVtQnNzIC0gMSkgKiBzaXplb2YoV01JX0JTU19CSUFTKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChjb3B5X2Zyb21fdXNlcigmY21kLCB1c2VyZGF0YSwgc2l6ZSkpIHsKLSAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgfQotCi0gICAgaWYod21pX3NldF9yb2FtX2N0cmxfY21kKGFyLT5hcldtaSwgJmNtZCwgc2l6ZSkgIT0gMCkgewotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotYXI2MDAwX2lvY3RsX3NldF9wb3dlcnNhdmVfdGltZXJzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgKnVzZXJkYXRhKQotewotICAgIHN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLSAgICBXTUlfUE9XRVJTQVZFX1RJTUVSU19QT0xJQ1lfQ01EIGNtZDsKLSAgICB1OCBzaXplID0gc2l6ZW9mKGNtZCk7Ci0KLSAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotCi0gICAgaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIHVzZXJkYXRhLCBzaXplKSkgewotICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICB9Ci0KLSAgICBpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgdXNlcmRhdGEsIHNpemUpKSB7Ci0gICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgIH0KLQotICAgIGlmKHdtaV9zZXRfcG93ZXJzYXZlX3RpbWVyc19jbWQoYXItPmFyV21pLCAmY21kLCBzaXplKSAhPSAwKSB7Ci0gICAgICAgIHJldHVybiAtRUlPOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1hcjYwMDBfaW9jdGxfc2V0X3Fvc19zdXBwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEpCi17Ci0gICAgc3RydWN0IGFyNl9zb2Z0YyAqYXIgPSAoc3RydWN0IGFyNl9zb2Z0YyAqKWFyNmtfcHJpdihkZXYpOwotICAgIFdNSV9TRVRfUU9TX1NVUFBfQ01EIGNtZDsKLSAgICBpbnQgcmV0OwotCi0gICAgaWYgKChkZXYtPmZsYWdzICYgSUZGX1VQKSAhPSBJRkZfVVApIHsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0KLSAgICBpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgKGNoYXIgKikoKHVuc2lnbmVkIGludCopcnEtPmlmcl9kYXRhICsgMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjbWQpKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgIH0KLQotICAgIHJldCA9IHdtaV9zZXRfcW9zX3N1cHBfY21kKGFyLT5hcldtaSwgY21kLnN0YXR1cyk7Ci0KLSAgICBzd2l0Y2ggKHJldCkgewotICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgY2FzZSBBX0VCVVNZIDoKLSAgICAgICAgICAgIHJldHVybiAtRUJVU1k7Ci0gICAgICAgIGNhc2UgQV9OT19NRU1PUlk6Ci0gICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKLSAgICAgICAgY2FzZSBBX0VJTlZBTDoKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgIH0KLX0KLQotc3RhdGljIGludAotYXI2MDAwX2lvY3RsX3NldF93bW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSkKLXsKLSAgICBzdHJ1Y3QgYXI2X3NvZnRjICphciA9IChzdHJ1Y3QgYXI2X3NvZnRjICopYXI2a19wcml2KGRldik7Ci0gICAgV01JX1NFVF9XTU1fQ01EIGNtZDsKLSAgICBpbnQgcmV0OwotCi0gICAgaWYgKChkZXYtPmZsYWdzICYgSUZGX1VQKSAhPSBJRkZfVVApIHsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0KLSAgICBpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgKGNoYXIgKikoKHVuc2lnbmVkIGludCopcnEtPmlmcl9kYXRhICsgMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjbWQpKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgIH0KLQotICAgIGlmIChjbWQuc3RhdHVzID09IFdNSV9XTU1fRU5BQkxFRCkgewotICAgICAgICBhci0+YXJXbW1FbmFibGVkID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBhci0+YXJXbW1FbmFibGVkID0gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0ID0gd21pX3NldF93bW1fY21kKGFyLT5hcldtaSwgY21kLnN0YXR1cyk7Ci0KLSAgICBzd2l0Y2ggKHJldCkgewotICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgY2FzZSBBX0VCVVNZIDoKLSAgICAgICAgICAgIHJldHVybiAtRUJVU1k7Ci0gICAgICAgIGNhc2UgQV9OT19NRU1PUlk6Ci0gICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKLSAgICAgICAgY2FzZSBBX0VJTlZBTDoKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgIH0KLX0KLQotc3RhdGljIGludAotYXI2MDAwX2lvY3RsX3NldF90eG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEpCi17Ci0gICAgc3RydWN0IGFyNl9zb2Z0YyAqYXIgPSAoc3RydWN0IGFyNl9zb2Z0YyAqKWFyNmtfcHJpdihkZXYpOwotICAgIFdNSV9TRVRfV01NX1RYT1BfQ01EIGNtZDsKLSAgICBpbnQgcmV0OwotCi0gICAgaWYgKChkZXYtPmZsYWdzICYgSUZGX1VQKSAhPSBJRkZfVVApIHsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0KLSAgICBpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgKGNoYXIgKikoKHVuc2lnbmVkIGludCopcnEtPmlmcl9kYXRhICsgMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjbWQpKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgIH0KLQotICAgIHJldCA9IHdtaV9zZXRfd21tX3R4b3AoYXItPmFyV21pLCBjbWQudHhvcEVuYWJsZSk7Ci0KLSAgICBzd2l0Y2ggKHJldCkgewotICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgY2FzZSBBX0VCVVNZIDoKLSAgICAgICAgICAgIHJldHVybiAtRUJVU1k7Ci0gICAgICAgIGNhc2UgQV9OT19NRU1PUlk6Ci0gICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKLSAgICAgICAgY2FzZSBBX0VJTlZBTDoKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgIH0KLX0KLQotc3RhdGljIGludAotYXI2MDAwX2lvY3RsX2dldF9yZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxKQotewotICAgIHN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLSAgICBpbnQgcmV0ID0gMDsKLQotICAgIGlmICgoZGV2LT5mbGFncyAmIElGRl9VUCkgIT0gSUZGX1VQIHx8IGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgIHJldHVybiAtRUlPOwotICAgIH0KLQotICAgIGlmKGNvcHlfdG9fdXNlcigoY2hhciAqKSgodW5zaWduZWQgaW50KilycS0+aWZyX2RhdGEgKyAxKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXItPmFyUmVnQ29kZSwgc2l6ZW9mKGFyLT5hclJlZ0NvZGUpKSkKLSAgICAgICAgcmV0ID0gLUVGQVVMVDsKLQotICAgIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQKLWFyNjAwMF9pb2N0bF9zZXRfY291bnRyeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxKQotewotICAgIHN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLSAgICBXTUlfQVBfU0VUX0NPVU5UUllfQ01EIGNtZDsKLSAgICBpbnQgcmV0OwotCi0gICAgaWYgKChkZXYtPmZsYWdzICYgSUZGX1VQKSAhPSBJRkZfVVApIHsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0KLSAgICBpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgKGNoYXIgKikoKHVuc2lnbmVkIGludCopcnEtPmlmcl9kYXRhICsgMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjbWQpKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgIH0KLQotICAgIGFyLT5hcF9wcm9maWxlX2ZsYWcgPSAxOyAvKiBUaGVyZSBpcyBhIGNoYW5nZSBpbiBwcm9maWxlICovCi0KLSAgICByZXQgPSB3bWlfc2V0X2NvdW50cnkoYXItPmFyV21pLCBjbWQuY291bnRyeUNvZGUpOwotICAgIG1lbWNweShhci0+YXBfY291bnRyeV9jb2RlLCBjbWQuY291bnRyeUNvZGUsIDMpOwotCi0gICAgc3dpdGNoIChyZXQpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGNhc2UgQV9FQlVTWSA6Ci0gICAgICAgICAgICByZXR1cm4gLUVCVVNZOwotICAgICAgICBjYXNlIEFfTk9fTUVNT1JZOgotICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Ci0gICAgICAgIGNhc2UgQV9FSU5WQUw6Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICB9Ci19Ci0KLQotLyogR2V0IHBvd2VyIG1vZGUgY29tbWFuZCAqLwotc3RhdGljIGludAotYXI2MDAwX2lvY3RsX2dldF9wb3dlcl9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEpCi17Ci0gICAgc3RydWN0IGFyNl9zb2Z0YyAqYXIgPSAoc3RydWN0IGFyNl9zb2Z0YyAqKWFyNmtfcHJpdihkZXYpOwotICAgIFdNSV9QT1dFUl9NT0RFX0NNRCBwb3dlcl9tb2RlOwotICAgIGludCByZXQgPSAwOwotCi0gICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgIHJldHVybiAtRUlPOwotICAgIH0KLQotICAgIHBvd2VyX21vZGUucG93ZXJNb2RlID0gd21pX2dldF9wb3dlcl9tb2RlX2NtZChhci0+YXJXbWkpOwotICAgIGlmIChjb3B5X3RvX3VzZXIocnEtPmlmcl9kYXRhLCAmcG93ZXJfbW9kZSwgc2l6ZW9mKFdNSV9QT1dFUl9NT0RFX0NNRCkpKSB7Ci0gICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldDsKLX0KLQotCi1zdGF0aWMgaW50Ci1hcjYwMDBfaW9jdGxfc2V0X2NoYW5uZWxQYXJhbXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSkKLXsKLSAgICBzdHJ1Y3QgYXI2X3NvZnRjICphciA9IChzdHJ1Y3QgYXI2X3NvZnRjICopYXI2a19wcml2KGRldik7Ci0gICAgV01JX0NIQU5ORUxfUEFSQU1TX0NNRCBjbWQsICpjbWRwOwotICAgIGludCByZXQgPSAwOwotCi0gICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgIHJldHVybiAtRUlPOwotICAgIH0KLQotCi0gICAgaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIHJxLT5pZnJfZGF0YSwgc2l6ZW9mKGNtZCkpKSB7Ci0gICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgIH0KLQotICAgIGlmKCAoYXItPmFyTmV4dE1vZGUgPT0gQVBfTkVUV09SSykgJiYgKGNtZC5udW1DaGFubmVscyB8fCBjbWQuc2NhblBhcmFtKSApIHsKLSAgICAgICAgQV9QUklOVEYoIkVSUk9SOiBPbmx5IHdtb2RlIGlzIGFsbG93ZWQgaW4gQVAgbW9kZVxuIik7Ci0gICAgICAgIHJldHVybiAtRUlPOwotICAgIH0KLQotICAgIGlmIChjbWQubnVtQ2hhbm5lbHMgPiAxKSB7Ci0gICAgICAgIGNtZHAgPSBBX01BTExPQygxMzApOwotICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoY21kcCwgcnEtPmlmcl9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICgqY21kcCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjbWQubnVtQ2hhbm5lbHMgLSAxKSAqIHNpemVvZih1MTYpKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGtmcmVlKGNtZHApOwotICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBjbWRwID0gJmNtZDsKLSAgICB9Ci0KLSAgICBpZiAoKGFyLT5hclBoeUNhcGFiaWxpdHkgPT0gV01JXzExR19DQVBBQklMSVRZKSAmJgotICAgICAgICAoKGNtZHAtPnBoeU1vZGUgPT0gV01JXzExQV9NT0RFKSB8fCAoY21kcC0+cGh5TW9kZSA9PSBXTUlfMTFBR19NT0RFKSkpCi0gICAgewotICAgICAgICByZXQgPSAtRUlOVkFMOwotICAgIH0KLQotICAgIGlmICghcmV0ICYmCi0gICAgICAgICh3bWlfc2V0X2NoYW5uZWxQYXJhbXNfY21kKGFyLT5hcldtaSwgY21kcC0+c2NhblBhcmFtLCBjbWRwLT5waHlNb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRwLT5udW1DaGFubmVscywgY21kcC0+Y2hhbm5lbExpc3QpCi0gICAgICAgICAhPSAwKSkKLSAgICB7Ci0gICAgICAgIHJldCA9IC1FSU87Ci0gICAgfQotCi0gICAgaWYgKGNtZC5udW1DaGFubmVscyA+IDEpIHsKLSAgICAgICAga2ZyZWUoY21kcCk7Ci0gICAgfQotCi0gICAgYXItPmFwX3dtb2RlID0gY21kcC0+cGh5TW9kZTsKLSAgICAvKiBTZXQgdGhlIHByb2ZpbGUgY2hhbmdlIGZsYWcgdG8gYWxsb3cgYSBjb21taXQgY21kICovCi0gICAgYXItPmFwX3Byb2ZpbGVfZmxhZyA9IDE7Ci0KLSAgICByZXR1cm4gcmV0OwotfQotCi0KLXN0YXRpYyBpbnQKLWFyNjAwMF9pb2N0bF9zZXRfc25yX3RocmVzaG9sZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxKQotewotCi0gICAgc3RydWN0IGFyNl9zb2Z0YyAqYXIgPSAoc3RydWN0IGFyNl9zb2Z0YyAqKWFyNmtfcHJpdihkZXYpOwotICAgIFdNSV9TTlJfVEhSRVNIT0xEX1BBUkFNU19DTUQgY21kOwotICAgIGludCByZXQgPSAwOwotCi0gICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgIHJldHVybiAtRUlPOwotICAgIH0KLQotICAgIGlmIChjb3B5X2Zyb21fdXNlcigmY21kLCBycS0+aWZyX2RhdGEsIHNpemVvZihjbWQpKSkgewotICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICB9Ci0KLSAgICBpZiggd21pX3NldF9zbnJfdGhyZXNob2xkX3BhcmFtcyhhci0+YXJXbWksICZjbWQpICE9IDAgKSB7Ci0gICAgICAgIHJldCA9IC1FSU87Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludAotYXI2MDAwX2lvY3RsX3NldF9yc3NpX3RocmVzaG9sZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxKQotewotI2RlZmluZSBTV0FQX1RIT0xEKHRob2xkMSwgdGhvbGQyKSBkbyB7IFwKLSAgICBVU0VSX1JTU0lfVEhPTEQgdG1wVGhvbGQ7ICAgICAgICAgICBcCi0gICAgdG1wVGhvbGQudGFnID0gdGhvbGQxLnRhZzsgICAgICAgICAgXAotICAgIHRtcFRob2xkLnJzc2kgPSB0aG9sZDEucnNzaTsgICAgICAgIFwKLSAgICB0aG9sZDEudGFnID0gdGhvbGQyLnRhZzsgICAgICAgICAgICBcCi0gICAgdGhvbGQxLnJzc2kgPSB0aG9sZDIucnNzaTsgICAgICAgICAgXAotICAgIHRob2xkMi50YWcgPSB0bXBUaG9sZC50YWc7ICAgICAgICAgIFwKLSAgICB0aG9sZDIucnNzaSA9IHRtcFRob2xkLnJzc2k7ICAgICAgICBcCi19IHdoaWxlICgwKQotCi0gICAgc3RydWN0IGFyNl9zb2Z0YyAqYXIgPSAoc3RydWN0IGFyNl9zb2Z0YyAqKWFyNmtfcHJpdihkZXYpOwotICAgIFdNSV9SU1NJX1RIUkVTSE9MRF9QQVJBTVNfQ01EIGNtZDsKLSAgICBVU0VSX1JTU0lfUEFSQU1TIHJzc2lQYXJhbXM7Ci0gICAgczMyIGksIGo7Ci0gICAgaW50IHJldCA9IDA7Ci0KLSAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotCi0gICAgaWYgKGNvcHlfZnJvbV91c2VyKChjaGFyICopJnJzc2lQYXJhbXMsIChjaGFyICopKCh1bnNpZ25lZCBpbnQgKilycS0+aWZyX2RhdGEgKyAxKSwgc2l6ZW9mKFVTRVJfUlNTSV9QQVJBTVMpKSkgewotICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICB9Ci0gICAgY21kLndlaWdodCA9IHJzc2lQYXJhbXMud2VpZ2h0OwotICAgIGNtZC5wb2xsVGltZSA9IHJzc2lQYXJhbXMucG9sbFRpbWU7Ci0KLSAgICBtZW1jcHkoYXItPnJzc2lfbWFwLCAmcnNzaVBhcmFtcy50aG9sZHMsIHNpemVvZihhci0+cnNzaV9tYXApKTsKLSAgICAvKgotICAgICAqICBvbmx5IDYgZWxlbWVudHMsIHNvIHVzZSBidWJibGUgc29ydGluZywgaW4gYXNjZW5kaW5nIG9yZGVyCi0gICAgICovCi0gICAgZm9yIChpID0gNTsgaSA+IDA7IGktLSkgewotICAgICAgICBmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7IC8qIGFib3ZlIHRob2xkcyAqLwotICAgICAgICAgICAgaWYgKGFyLT5yc3NpX21hcFtqKzFdLnJzc2kgPCBhci0+cnNzaV9tYXBbal0ucnNzaSkgewotICAgICAgICAgICAgICAgIFNXQVBfVEhPTEQoYXItPnJzc2lfbWFwW2orMV0sIGFyLT5yc3NpX21hcFtqXSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGFyLT5yc3NpX21hcFtqKzFdLnJzc2kgPT0gYXItPnJzc2lfbWFwW2pdLnJzc2kpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBmb3IgKGkgPSAxMTsgaSA+IDY7IGktLSkgewotICAgICAgICBmb3IgKGogPSA2OyBqIDwgaTsgaisrKSB7IC8qIGJlbG93IHRob2xkcyAqLwotICAgICAgICAgICAgaWYgKGFyLT5yc3NpX21hcFtqKzFdLnJzc2kgPCBhci0+cnNzaV9tYXBbal0ucnNzaSkgewotICAgICAgICAgICAgICAgIFNXQVBfVEhPTEQoYXItPnJzc2lfbWFwW2orMV0sIGFyLT5yc3NpX21hcFtqXSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGFyLT5yc3NpX21hcFtqKzFdLnJzc2kgPT0gYXItPnJzc2lfbWFwW2pdLnJzc2kpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotI2lmZGVmIERFQlVHCi0gICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHsKLSAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19JTkZPLCgidGhvbGRbJWRdLnRhZzogJWQsIHRob2xkWyVkXS5yc3NpOiAlZCBcbiIsCi0gICAgICAgICAgICAgICAgaSwgYXItPnJzc2lfbWFwW2ldLnRhZywgaSwgYXItPnJzc2lfbWFwW2ldLnJzc2kpKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGlmIChlbmFibGVyc3NpY29tcGVuc2F0aW9uKSB7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCA2OyBpKyspCi0gICAgICAgICAgICBhci0+cnNzaV9tYXBbaV0ucnNzaSA9IHJzc2lfY29tcGVuc2F0aW9uX3JldmVyc2VfY2FsYyhhciwgYXItPnJzc2lfbWFwW2ldLnJzc2ksIHRydWUpOwotICAgICAgICBmb3IgKGkgPSA2OyBpIDwgMTI7IGkrKykKLSAgICAgICAgICAgIGFyLT5yc3NpX21hcFtpXS5yc3NpID0gcnNzaV9jb21wZW5zYXRpb25fcmV2ZXJzZV9jYWxjKGFyLCBhci0+cnNzaV9tYXBbaV0ucnNzaSwgZmFsc2UpOwotICAgIH0KLQotICAgIGNtZC50aHJlc2hvbGRBYm92ZTFfVmFsID0gYXItPnJzc2lfbWFwWzBdLnJzc2k7Ci0gICAgY21kLnRocmVzaG9sZEFib3ZlMl9WYWwgPSBhci0+cnNzaV9tYXBbMV0ucnNzaTsKLSAgICBjbWQudGhyZXNob2xkQWJvdmUzX1ZhbCA9IGFyLT5yc3NpX21hcFsyXS5yc3NpOwotICAgIGNtZC50aHJlc2hvbGRBYm92ZTRfVmFsID0gYXItPnJzc2lfbWFwWzNdLnJzc2k7Ci0gICAgY21kLnRocmVzaG9sZEFib3ZlNV9WYWwgPSBhci0+cnNzaV9tYXBbNF0ucnNzaTsKLSAgICBjbWQudGhyZXNob2xkQWJvdmU2X1ZhbCA9IGFyLT5yc3NpX21hcFs1XS5yc3NpOwotICAgIGNtZC50aHJlc2hvbGRCZWxvdzFfVmFsID0gYXItPnJzc2lfbWFwWzZdLnJzc2k7Ci0gICAgY21kLnRocmVzaG9sZEJlbG93Ml9WYWwgPSBhci0+cnNzaV9tYXBbN10ucnNzaTsKLSAgICBjbWQudGhyZXNob2xkQmVsb3czX1ZhbCA9IGFyLT5yc3NpX21hcFs4XS5yc3NpOwotICAgIGNtZC50aHJlc2hvbGRCZWxvdzRfVmFsID0gYXItPnJzc2lfbWFwWzldLnJzc2k7Ci0gICAgY21kLnRocmVzaG9sZEJlbG93NV9WYWwgPSBhci0+cnNzaV9tYXBbMTBdLnJzc2k7Ci0gICAgY21kLnRocmVzaG9sZEJlbG93Nl9WYWwgPSBhci0+cnNzaV9tYXBbMTFdLnJzc2k7Ci0KLSAgICBpZiggd21pX3NldF9yc3NpX3RocmVzaG9sZF9wYXJhbXMoYXItPmFyV21pLCAmY21kKSAhPSAwICkgewotICAgICAgICByZXQgPSAtRUlPOwotICAgIH0KLQotICAgIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQKLWFyNjAwMF9pb2N0bF9zZXRfbHFfdGhyZXNob2xkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEpCi17Ci0KLSAgICBzdHJ1Y3QgYXI2X3NvZnRjICphciA9IChzdHJ1Y3QgYXI2X3NvZnRjICopYXI2a19wcml2KGRldik7Ci0gICAgV01JX0xRX1RIUkVTSE9MRF9QQVJBTVNfQ01EIGNtZDsKLSAgICBpbnQgcmV0ID0gMDsKLQotICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0KLSAgICBpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgKGNoYXIgKikoKHVuc2lnbmVkIGludCAqKXJxLT5pZnJfZGF0YSArIDEpLCBzaXplb2YoY21kKSkpIHsKLSAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgfQotCi0gICAgaWYoIHdtaV9zZXRfbHFfdGhyZXNob2xkX3BhcmFtcyhhci0+YXJXbWksICZjbWQpICE9IDAgKSB7Ci0gICAgICAgIHJldCA9IC1FSU87Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldDsKLX0KLQotCi1zdGF0aWMgaW50Ci1hcjYwMDBfaW9jdGxfc2V0X3Byb2JlZFNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSkKLXsKLSAgICBzdHJ1Y3QgYXI2X3NvZnRjICphciA9IChzdHJ1Y3QgYXI2X3NvZnRjICopYXI2a19wcml2KGRldik7Ci0gICAgV01JX1BST0JFRF9TU0lEX0NNRCBjbWQ7Ci0gICAgaW50IHJldCA9IDA7Ci0KLSAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotCi0gICAgaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIHJxLT5pZnJfZGF0YSwgc2l6ZW9mKGNtZCkpKSB7Ci0gICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgIH0KLQotICAgIGlmICh3bWlfcHJvYmVkU3NpZF9jbWQoYXItPmFyV21pLCBjbWQuZW50cnlJbmRleCwgY21kLmZsYWcsIGNtZC5zc2lkTGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZC5zc2lkKSAhPSAwKQotICAgIHsKLSAgICAgICAgcmV0ID0gLUVJTzsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50Ci1hcjYwMDBfaW9jdGxfc2V0X2JhZEFwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEpCi17Ci0gICAgc3RydWN0IGFyNl9zb2Z0YyAqYXIgPSAoc3RydWN0IGFyNl9zb2Z0YyAqKWFyNmtfcHJpdihkZXYpOwotICAgIFdNSV9BRERfQkFEX0FQX0NNRCBjbWQ7Ci0gICAgaW50IHJldCA9IDA7Ci0KLSAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotCi0KLSAgICBpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgcnEtPmlmcl9kYXRhLCBzaXplb2YoY21kKSkpIHsKLSAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgfQotCi0gICAgaWYgKGNtZC5iYWRBcEluZGV4ID4gV01JX01BWF9CQURfQVBfSU5ERVgpIHsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotCi0gICAgaWYgKG1lbWNtcChjbWQuYnNzaWQsIG51bGxfbWFjLCBBUjYwMDBfRVRIX0FERFJfTEVOKSA9PSAwKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFRoaXMgaXMgYSBkZWxldGUgYmFkQVAuCi0gICAgICAgICAqLwotICAgICAgICBpZiAod21pX2RlbGV0ZUJhZEFwX2NtZChhci0+YXJXbWksIGNtZC5iYWRBcEluZGV4KSAhPSAwKSB7Ci0gICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHdtaV9hZGRCYWRBcF9jbWQoYXItPmFyV21pLCBjbWQuYmFkQXBJbmRleCwgY21kLmJzc2lkKSAhPSAwKSB7Ci0gICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludAotYXI2MDAwX2lvY3RsX2NyZWF0ZV9xb3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSkKLXsKLSAgICBzdHJ1Y3QgYXI2X3NvZnRjICphciA9IChzdHJ1Y3QgYXI2X3NvZnRjICopYXI2a19wcml2KGRldik7Ci0gICAgV01JX0NSRUFURV9QU1RSRUFNX0NNRCBjbWQ7Ci0gICAgaW50IHJldDsKLQotICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0KLQotICAgIGlmIChjb3B5X2Zyb21fdXNlcigmY21kLCBycS0+aWZyX2RhdGEsIHNpemVvZihjbWQpKSkgewotICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICB9Ci0KLSAgICByZXQgPSB3bWlfdmVyaWZ5X3RzcGVjX3BhcmFtcygmY21kLCB0c3BlY0NvbXBsaWFuY2UpOwotICAgIGlmIChyZXQgPT0gMCkKLSAgICAgICAgcmV0ID0gd21pX2NyZWF0ZV9wc3RyZWFtX2NtZChhci0+YXJXbWksICZjbWQpOwotCi0gICAgc3dpdGNoIChyZXQpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGNhc2UgQV9FQlVTWSA6Ci0gICAgICAgICAgICByZXR1cm4gLUVCVVNZOwotICAgICAgICBjYXNlIEFfTk9fTUVNT1JZOgotICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Ci0gICAgICAgIGNhc2UgQV9FSU5WQUw6Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbnQKLWFyNjAwMF9pb2N0bF9kZWxldGVfcW9zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEpCi17Ci0gICAgc3RydWN0IGFyNl9zb2Z0YyAqYXIgPSAoc3RydWN0IGFyNl9zb2Z0YyAqKWFyNmtfcHJpdihkZXYpOwotICAgIFdNSV9ERUxFVEVfUFNUUkVBTV9DTUQgY21kOwotICAgIGludCByZXQgPSAwOwotCi0gICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgIHJldHVybiAtRUlPOwotICAgIH0KLQotICAgIGlmIChjb3B5X2Zyb21fdXNlcigmY21kLCBycS0+aWZyX2RhdGEsIHNpemVvZihjbWQpKSkgewotICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICB9Ci0KLSAgICByZXQgPSB3bWlfZGVsZXRlX3BzdHJlYW1fY21kKGFyLT5hcldtaSwgY21kLnRyYWZmaWNDbGFzcywgY21kLnRzaWQpOwotCi0gICAgc3dpdGNoIChyZXQpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGNhc2UgQV9FQlVTWSA6Ci0gICAgICAgICAgICByZXR1cm4gLUVCVVNZOwotICAgICAgICBjYXNlIEFfTk9fTUVNT1JZOgotICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Ci0gICAgICAgIGNhc2UgQV9FSU5WQUw6Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbnQKLWFyNjAwMF9pb2N0bF9nZXRfcW9zX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEpCi17Ci0gICAgc3RydWN0IGFyNl9zb2Z0YyAqYXIgPSAoc3RydWN0IGFyNl9zb2Z0YyAqKWFyNmtfcHJpdihkZXYpOwotICAgIHN0cnVjdCBhcjYwMDBfcXVldWVyZXEgcXJlcTsKLSAgICBpbnQgcmV0ID0gMDsKLQotICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0KLSAgICBpZiggY29weV9mcm9tX3VzZXIoJnFyZXEsIHJxLT5pZnJfZGF0YSwKLSAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgYXI2MDAwX3F1ZXVlcmVxKSkpCi0gICAgICAgIHJldHVybiAtRUZBVUxUOwotCi0gICAgcXJlcS5hY3RpdmVUc2lkcyA9IHdtaV9nZXRfbWFwcGVkX3Fvc19xdWV1ZShhci0+YXJXbWksIHFyZXEudHJhZmZpY0NsYXNzKTsKLQotICAgIGlmIChjb3B5X3RvX3VzZXIocnEtPmlmcl9kYXRhLCAmcXJlcSwKLSAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBhcjYwMDBfcXVldWVyZXEpKSkKLSAgICB7Ci0gICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldDsKLX0KLQotI2lmZGVmIENPTkZJR19IT1NUX1RDTURfU1VQUE9SVAotc3RhdGljIGludAotYXI2MDAwX2lvY3RsX3RjbWRfZ2V0X3J4X3JlcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGlmcmVxICpycSwgdTggKmRhdGEsIHUzMiBsZW4pCi17Ci0gICAgc3RydWN0IGFyNl9zb2Z0YyAqYXIgPSAoc3RydWN0IGFyNl9zb2Z0YyAqKWFyNmtfcHJpdihkZXYpOwotICAgIHUzMiBidWZbNCtUQ01EX01BWF9SQVRFU107Ci0gICAgaW50IHJldCA9IDA7Ci0KLSAgICBpZiAoYXItPmJJc0Rlc3Ryb3lQcm9ncmVzcykgewotICAgICAgICByZXR1cm4gLUVCVVNZOwotICAgIH0KLQotICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0KLSAgICBpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZhci0+YXJTZW0pKSB7Ci0gICAgICAgIHJldHVybiAtRVJFU1RBUlRTWVM7Ci0gICAgfQotCi0gICAgaWYgKGFyLT5iSXNEZXN0cm95UHJvZ3Jlc3MpIHsKLSAgICAgICAgdXAoJmFyLT5hclNlbSk7Ci0gICAgICAgIHJldHVybiAtRUJVU1k7Ci0gICAgfQotCi0gICAgYXItPnRjbWRSeFJlcG9ydCA9IDA7Ci0gICAgaWYgKHdtaV90ZXN0X2NtZChhci0+YXJXbWksIGRhdGEsIGxlbikgIT0gMCkgewotICAgICAgICB1cCgmYXItPmFyU2VtKTsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotCi0gICAgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoYXJFdmVudCwgYXItPnRjbWRSeFJlcG9ydCAhPSAwLCB3bWl0aW1lb3V0ICogSFopOwotCi0gICAgaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0gICAgICAgIHJldCA9IC1FSU5UUjsKLSAgICB9Ci0KLSAgICBidWZbMF0gPSBhci0+dGNtZFJ4VG90YWxQa3Q7Ci0gICAgYnVmWzFdID0gYXItPnRjbWRSeFJzc2k7Ci0gICAgYnVmWzJdID0gYXItPnRjbWRSeGNyY0VyclBrdDsKLSAgICBidWZbM10gPSBhci0+dGNtZFJ4c2VjRXJyUGt0OwotICAgIG1lbWNweSgoKHU4ICopYnVmKSsoNCpzaXplb2YodTMyKSksIGFyLT50Y21kUmF0ZUNudCwgc2l6ZW9mKGFyLT50Y21kUmF0ZUNudCkpOwotICAgIG1lbWNweSgoKHU4ICopYnVmKSsoNCpzaXplb2YodTMyKSkrKFRDTURfTUFYX1JBVEVTICpzaXplb2YodTE2KSksIGFyLT50Y21kUmF0ZUNudFNob3J0R3VhcmQsIHNpemVvZihhci0+dGNtZFJhdGVDbnRTaG9ydEd1YXJkKSk7Ci0KLSAgICBpZiAoIXJldCAmJiBjb3B5X3RvX3VzZXIocnEtPmlmcl9kYXRhLCBidWYsIHNpemVvZihidWYpKSkgewotICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgIH0KLQotICAgIHVwKCZhci0+YXJTZW0pOwotCi0gICAgcmV0dXJuIHJldDsKLX0KLQotdm9pZAotYXI2MDAwX3RjbWRfcnhfcmVwb3J0X2V2ZW50KHZvaWQgKmRldnQsIHU4ICpyZXN1bHRzLCBpbnQgbGVuKQotewotICAgIHN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilkZXZ0OwotICAgIFRDTURfQ09OVF9SWCAqIHJ4X3JlcCA9IChUQ01EX0NPTlRfUlggKilyZXN1bHRzOwotCi0gICAgaWYgKGVuYWJsZXJzc2ljb21wZW5zYXRpb24pIHsKLSAgICAgICAgcnhfcmVwLT51LnJlcG9ydC5yc3NpSW5EQm0gPSByc3NpX2NvbXBlbnNhdGlvbl9jYWxjX3RjbWQodGNtZFJ4RnJlcSwgcnhfcmVwLT51LnJlcG9ydC5yc3NpSW5EQm0scnhfcmVwLT51LnJlcG9ydC50b3RhbFBrdCk7Ci0gICAgfQotCi0KLSAgICBhci0+dGNtZFJ4VG90YWxQa3QgPSByeF9yZXAtPnUucmVwb3J0LnRvdGFsUGt0OwotICAgIGFyLT50Y21kUnhSc3NpID0gcnhfcmVwLT51LnJlcG9ydC5yc3NpSW5EQm07Ci0gICAgYXItPnRjbWRSeGNyY0VyclBrdCA9IHJ4X3JlcC0+dS5yZXBvcnQuY3JjRXJyUGt0OwotICAgIGFyLT50Y21kUnhzZWNFcnJQa3QgPSByeF9yZXAtPnUucmVwb3J0LnNlY0VyclBrdDsKLSAgICBhci0+dGNtZFJ4UmVwb3J0ID0gMTsKLSAgICBBX01FTVpFUk8oYXItPnRjbWRSYXRlQ250LCAgc2l6ZW9mKGFyLT50Y21kUmF0ZUNudCkpOwotICAgIEFfTUVNWkVSTyhhci0+dGNtZFJhdGVDbnRTaG9ydEd1YXJkLCAgc2l6ZW9mKGFyLT50Y21kUmF0ZUNudFNob3J0R3VhcmQpKTsKLSAgICBtZW1jcHkoYXItPnRjbWRSYXRlQ250LCByeF9yZXAtPnUucmVwb3J0LnJhdGVDbnQsIHNpemVvZihhci0+dGNtZFJhdGVDbnQpKTsKLSAgICBtZW1jcHkoYXItPnRjbWRSYXRlQ250U2hvcnRHdWFyZCwgcnhfcmVwLT51LnJlcG9ydC5yYXRlQ250U2hvcnRHdWFyZCwgc2l6ZW9mKGFyLT50Y21kUmF0ZUNudFNob3J0R3VhcmQpKTsKLQotICAgIHdha2VfdXAoJmFyRXZlbnQpOwotfQotI2VuZGlmIC8qIENPTkZJR19IT1NUX1RDTURfU1VQUE9SVCovCi0KLXN0YXRpYyBpbnQKLWFyNjAwMF9pb2N0bF9zZXRfZXJyb3JfcmVwb3J0X2JpdG1hc2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSkKLXsKLSAgICBzdHJ1Y3QgYXI2X3NvZnRjICphciA9IChzdHJ1Y3QgYXI2X3NvZnRjICopYXI2a19wcml2KGRldik7Ci0gICAgV01JX1RBUkdFVF9FUlJPUl9SRVBPUlRfQklUTUFTSyBjbWQ7Ci0gICAgaW50IHJldCA9IDA7Ci0KLSAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotCi0gICAgaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIHJxLT5pZnJfZGF0YSwgc2l6ZW9mKGNtZCkpKSB7Ci0gICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgIH0KLQotICAgIHJldCA9IHdtaV9zZXRfZXJyb3JfcmVwb3J0X2JpdG1hc2soYXItPmFyV21pLCBjbWQuYml0bWFzayk7Ci0KLSAgICByZXR1cm4gIChyZXQ9PTAgPyByZXQgOiAtRUlOVkFMKTsKLX0KLQotc3RhdGljIGludAotYXI2MDAwX2NsZWFyX3RhcmdldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotICAgIHN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLSAgICBUQVJHRVRfU1RBVFMgKnBTdGF0cyA9ICZhci0+YXJUYXJnZXRTdGF0czsKLSAgICBpbnQgcmV0ID0gMDsKLQotICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgIHJldHVybiAtRUlPOwotICAgIH0KLSAgICBBUjYwMDBfU1BJTl9MT0NLKCZhci0+YXJMb2NrLCAwKTsKLSAgICBBX01FTVpFUk8ocFN0YXRzLCBzaXplb2YoVEFSR0VUX1NUQVRTKSk7Ci0gICAgQVI2MDAwX1NQSU5fVU5MT0NLKCZhci0+YXJMb2NrLCAwKTsKLSAgICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50Ci1hcjYwMDBfaW9jdGxfZ2V0X3RhcmdldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxKQotewotICAgIHN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLSAgICBUQVJHRVRfU1RBVFNfQ01EIGNtZDsKLSAgICBUQVJHRVRfU1RBVFMgKnBTdGF0cyA9ICZhci0+YXJUYXJnZXRTdGF0czsKLSAgICBpbnQgcmV0ID0gMDsKLQotICAgIGlmIChhci0+YklzRGVzdHJveVByb2dyZXNzKSB7Ci0gICAgICAgIHJldHVybiAtRUJVU1k7Ci0gICAgfQotICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0gICAgaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIHJxLT5pZnJfZGF0YSwgc2l6ZW9mKGNtZCkpKSB7Ci0gICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgIH0KLSAgICBpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZhci0+YXJTZW0pKSB7Ci0gICAgICAgIHJldHVybiAtRVJFU1RBUlRTWVM7Ci0gICAgfQotICAgIGlmIChhci0+YklzRGVzdHJveVByb2dyZXNzKSB7Ci0gICAgICAgIHVwKCZhci0+YXJTZW0pOwotICAgICAgICByZXR1cm4gLUVCVVNZOwotICAgIH0KLQotICAgIGFyLT5zdGF0c1VwZGF0ZVBlbmRpbmcgPSB0cnVlOwotCi0gICAgaWYod21pX2dldF9zdGF0c19jbWQoYXItPmFyV21pKSAhPSAwKSB7Ci0gICAgICAgIHVwKCZhci0+YXJTZW0pOwotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0KLSAgICB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChhckV2ZW50LCBhci0+c3RhdHNVcGRhdGVQZW5kaW5nID09IGZhbHNlLCB3bWl0aW1lb3V0ICogSFopOwotCi0gICAgaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0gICAgICAgIHJldCA9IC1FSU5UUjsKLSAgICB9Ci0KLSAgICBpZiAoIXJldCAmJiBjb3B5X3RvX3VzZXIocnEtPmlmcl9kYXRhLCBwU3RhdHMsIHNpemVvZigqcFN0YXRzKSkpIHsKLSAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICB9Ci0KLSAgICBpZiAoY21kLmNsZWFyU3RhdHMgPT0gMSkgewotICAgICAgICByZXQgPSBhcjYwMDBfY2xlYXJfdGFyZ2V0X3N0YXRzKGRldik7Ci0gICAgfQotCi0gICAgdXAoJmFyLT5hclNlbSk7Ci0KLSAgICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50Ci1hcjYwMDBfaW9jdGxfZ2V0X2FwX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEpCi17Ci0gICAgc3RydWN0IGFyNl9zb2Z0YyAqYXIgPSAoc3RydWN0IGFyNl9zb2Z0YyAqKWFyNmtfcHJpdihkZXYpOwotICAgIHUzMiBhY3Rpb247IC8qIEFsbG9jYXRpbmcgb25seSB0aGUgZGVzaXJlZCBzcGFjZSBvbiB0aGUgZnJhbWUuIERlY2xhcmluZyBpcyBhcyBhIFdNSV9BUF9NT0RFX1NUQVQgdmFyaWFibGUgcmVzdWx0cyBpbiBleGNlZWRpbmcgdGhlIGNvbXBpbGVyIGltcG9zZWQgbGltaXQgb24gdGhlIG1heGltdW0gZnJhbWUgc2l6ZSAqLwotICAgIFdNSV9BUF9NT0RFX1NUQVQgKnBTdGF0cyA9ICZhci0+YXJBUFN0YXRzOwotICAgIGludCByZXQgPSAwOwotCi0gICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgIHJldHVybiAtRUlPOwotICAgIH0KLSAgICBpZiAoY29weV9mcm9tX3VzZXIoJmFjdGlvbiwgKGNoYXIgKikoKHVuc2lnbmVkIGludCopcnEtPmlmcl9kYXRhICsgMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih1MzIpKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgIH0KLSAgICBpZiAoYWN0aW9uID09IEFQX0NMRUFSX1NUQVRTKSB7Ci0gICAgICAgIHU4IGk7Ci0gICAgICAgIEFSNjAwMF9TUElOX0xPQ0soJmFyLT5hckxvY2ssIDApOwotICAgICAgICBmb3IoaSA9IDA7IGkgPCBBUF9NQVhfTlVNX1NUQTsgaSsrKSB7Ci0gICAgICAgICAgICBwU3RhdHMtPnN0YVtpXS50eF9ieXRlcyA9IDA7Ci0gICAgICAgICAgICBwU3RhdHMtPnN0YVtpXS50eF9wa3RzID0gMDsKLSAgICAgICAgICAgIHBTdGF0cy0+c3RhW2ldLnR4X2Vycm9yID0gMDsKLSAgICAgICAgICAgIHBTdGF0cy0+c3RhW2ldLnR4X2Rpc2NhcmQgPSAwOwotICAgICAgICAgICAgcFN0YXRzLT5zdGFbaV0ucnhfYnl0ZXMgPSAwOwotICAgICAgICAgICAgcFN0YXRzLT5zdGFbaV0ucnhfcGt0cyA9IDA7Ci0gICAgICAgICAgICBwU3RhdHMtPnN0YVtpXS5yeF9lcnJvciA9IDA7Ci0gICAgICAgICAgICBwU3RhdHMtPnN0YVtpXS5yeF9kaXNjYXJkID0gMDsKLSAgICAgICAgfQotICAgICAgICBBUjYwMDBfU1BJTl9VTkxPQ0soJmFyLT5hckxvY2ssIDApOwotICAgICAgICByZXR1cm4gcmV0OwotICAgIH0KLQotICAgIGlmIChkb3duX2ludGVycnVwdGlibGUoJmFyLT5hclNlbSkpIHsKLSAgICAgICAgcmV0dXJuIC1FUkVTVEFSVFNZUzsKLSAgICB9Ci0KLSAgICBhci0+c3RhdHNVcGRhdGVQZW5kaW5nID0gdHJ1ZTsKLQotICAgIGlmKHdtaV9nZXRfc3RhdHNfY21kKGFyLT5hcldtaSkgIT0gMCkgewotICAgICAgICB1cCgmYXItPmFyU2VtKTsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotCi0gICAgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoYXJFdmVudCwgYXItPnN0YXRzVXBkYXRlUGVuZGluZyA9PSBmYWxzZSwgd21pdGltZW91dCAqIEhaKTsKLQotICAgIGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotICAgICAgICByZXQgPSAtRUlOVFI7Ci0gICAgfQotCi0gICAgaWYgKCFyZXQgJiYgY29weV90b191c2VyKHJxLT5pZnJfZGF0YSwgcFN0YXRzLCBzaXplb2YoKnBTdGF0cykpKSB7Ci0gICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgfQotCi0gICAgdXAoJmFyLT5hclNlbSk7Ci0KLSAgICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50Ci1hcjYwMDBfaW9jdGxfc2V0X2FjY2Vzc19wYXJhbXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSkKLXsKLSAgICBzdHJ1Y3QgYXI2X3NvZnRjICphciA9IChzdHJ1Y3QgYXI2X3NvZnRjICopYXI2a19wcml2KGRldik7Ci0gICAgV01JX1NFVF9BQ0NFU1NfUEFSQU1TX0NNRCBjbWQ7Ci0gICAgaW50IHJldCA9IDA7Ci0KLSAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotCi0gICAgaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIHJxLT5pZnJfZGF0YSwgc2l6ZW9mKGNtZCkpKSB7Ci0gICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgIH0KLQotICAgIGlmICh3bWlfc2V0X2FjY2Vzc19wYXJhbXNfY21kKGFyLT5hcldtaSwgY21kLmFjLCBjbWQudHhvcCwgY21kLmVDV21pbiwgY21kLmVDV21heCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQuYWlmc24pID09IDApCi0gICAgewotICAgICAgICByZXQgPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldCA9IC1FSU5WQUw7Ci0gICAgfQotCi0gICAgcmV0dXJuIChyZXQpOwotfQotCi1zdGF0aWMgaW50Ci1hcjYwMDBfaW9jdGxfc2V0X2Rpc2Nvbm5lY3RfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxKQotewotICAgIHN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLSAgICBXTUlfRElTQ19USU1FT1VUX0NNRCBjbWQ7Ci0gICAgaW50IHJldCA9IDA7Ci0KLSAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotCi0gICAgaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIHJxLT5pZnJfZGF0YSwgc2l6ZW9mKGNtZCkpKSB7Ci0gICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgIH0KLQotICAgIGlmICh3bWlfZGlzY3RpbWVvdXRfY21kKGFyLT5hcldtaSwgY21kLmRpc2Nvbm5lY3RUaW1lb3V0KSA9PSAwKQotICAgIHsKLSAgICAgICAgcmV0ID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgICByZXQgPSAtRUlOVkFMOwotICAgIH0KLQotICAgIHJldHVybiAocmV0KTsKLX0KLQotc3RhdGljIGludAotYXI2MDAwX3hpb2N0bF9zZXRfdm9pY2VfcGt0X3NpemUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2hhciAqdXNlcmRhdGEpCi17Ci0gICAgc3RydWN0IGFyNl9zb2Z0YyAqYXIgPSAoc3RydWN0IGFyNl9zb2Z0YyAqKWFyNmtfcHJpdihkZXYpOwotICAgIFdNSV9TRVRfVk9JQ0VfUEtUX1NJWkVfQ01EIGNtZDsKLSAgICBpbnQgcmV0ID0gMDsKLQotICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0KLSAgICBpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgdXNlcmRhdGEsIHNpemVvZihjbWQpKSkgewotICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICB9Ci0KLSAgICBpZiAod21pX3NldF92b2ljZV9wa3Rfc2l6ZV9jbWQoYXItPmFyV21pLCBjbWQudm9pY2VQa3RTaXplKSA9PSAwKQotICAgIHsKLSAgICAgICAgcmV0ID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgICByZXQgPSAtRUlOVkFMOwotICAgIH0KLQotCi0gICAgcmV0dXJuIChyZXQpOwotfQotCi1zdGF0aWMgaW50Ci1hcjYwMDBfeGlvY3RsX3NldF9tYXhfc3BfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgKnVzZXJkYXRhKQotewotICAgIHN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLSAgICBXTUlfU0VUX01BWF9TUF9MRU5fQ01EIGNtZDsKLSAgICBpbnQgcmV0ID0gMDsKLQotICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0KLSAgICBpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgdXNlcmRhdGEsIHNpemVvZihjbWQpKSkgewotICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICB9Ci0KLSAgICBpZiAod21pX3NldF9tYXhfc3BfbGVuX2NtZChhci0+YXJXbWksIGNtZC5tYXhTUExlbikgPT0gMCkKLSAgICB7Ci0gICAgICAgIHJldCA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0ID0gLUVJTlZBTDsKLSAgICB9Ci0KLSAgICByZXR1cm4gKHJldCk7Ci19Ci0KLQotc3RhdGljIGludAotYXI2MDAwX3hpb2N0bF9zZXRfYnRfc3RhdHVzX2NtZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjaGFyICp1c2VyZGF0YSkKLXsKLSAgICBzdHJ1Y3QgYXI2X3NvZnRjICphciA9IChzdHJ1Y3QgYXI2X3NvZnRjICopYXI2a19wcml2KGRldik7Ci0gICAgV01JX1NFVF9CVF9TVEFUVVNfQ01EIGNtZDsKLSAgICBpbnQgcmV0ID0gMDsKLQotICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0KLSAgICBpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgdXNlcmRhdGEsIHNpemVvZihjbWQpKSkgewotICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICB9Ci0KLSAgICBpZiAod21pX3NldF9idF9zdGF0dXNfY21kKGFyLT5hcldtaSwgY21kLnN0cmVhbVR5cGUsIGNtZC5zdGF0dXMpID09IDApCi0gICAgewotICAgICAgICByZXQgPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldCA9IC1FSU5WQUw7Ci0gICAgfQotCi0gICAgcmV0dXJuIChyZXQpOwotfQotCi1zdGF0aWMgaW50Ci1hcjYwMDBfeGlvY3RsX3NldF9idF9wYXJhbXNfY21kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgKnVzZXJkYXRhKQotewotICAgIHN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLSAgICBXTUlfU0VUX0JUX1BBUkFNU19DTUQgY21kOwotICAgIGludCByZXQgPSAwOwotCi0gICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgIHJldHVybiAtRUlPOwotICAgIH0KLQotICAgIGlmIChjb3B5X2Zyb21fdXNlcigmY21kLCB1c2VyZGF0YSwgc2l6ZW9mKGNtZCkpKSB7Ci0gICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgIH0KLQotICAgIGlmICh3bWlfc2V0X2J0X3BhcmFtc19jbWQoYXItPmFyV21pLCAmY21kKSA9PSAwKQotICAgIHsKLSAgICAgICAgcmV0ID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgICByZXQgPSAtRUlOVkFMOwotICAgIH0KLQotICAgIHJldHVybiAocmV0KTsKLX0KLQotc3RhdGljIGludAotYXI2MDAwX3hpb2N0bF9zZXRfYnRjb2V4X2ZlX2FudF9jbWQoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsIGNoYXIgKnVzZXJkYXRhKQotewotCXN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLQlXTUlfU0VUX0JUQ09FWF9GRV9BTlRfQ01EIGNtZDsKLSAgICBpbnQgcmV0ID0gMDsKLQotCWlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIHVzZXJkYXRhLCBzaXplb2YoY21kKSkpIHsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0gICAgaWYgKHdtaV9zZXRfYnRjb2V4X2ZlX2FudF9jbWQoYXItPmFyV21pLCAmY21kKSA9PSAwKQotICAgIHsKLSAgICAgICAgcmV0ID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgICByZXQgPSAtRUlOVkFMOwotICAgIH0KLQotCXJldHVybihyZXQpOwotfQotCi1zdGF0aWMgaW50Ci1hcjYwMDBfeGlvY3RsX3NldF9idGNvZXhfY29sb2NhdGVkX2J0X2Rldl9jbWQoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsIGNoYXIgKnVzZXJkYXRhKQotewotCXN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLQlXTUlfU0VUX0JUQ09FWF9DT0xPQ0FURURfQlRfREVWX0NNRCBjbWQ7Ci0gICAgaW50IHJldCA9IDA7Ci0KLQlpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIHVzZXJkYXRhLCBzaXplb2YoY21kKSkpIHsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0gICAgaWYgKHdtaV9zZXRfYnRjb2V4X2NvbG9jYXRlZF9idF9kZXZfY21kKGFyLT5hcldtaSwgJmNtZCkgPT0gMCkKLSAgICB7Ci0gICAgICAgIHJldCA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0ID0gLUVJTlZBTDsKLSAgICB9Ci0KLQlyZXR1cm4ocmV0KTsKLX0KLQotc3RhdGljIGludAotYXI2MDAwX3hpb2N0bF9zZXRfYnRjb2V4X2J0aW5xdWlyeV9wYWdlX2NvbmZpZ19jbWQoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsICBjaGFyICp1c2VyZGF0YSkKLXsKLQlzdHJ1Y3QgYXI2X3NvZnRjICphciA9IChzdHJ1Y3QgYXI2X3NvZnRjICopYXI2a19wcml2KGRldik7Ci0JV01JX1NFVF9CVENPRVhfQlRJTlFVSVJZX1BBR0VfQ09ORklHX0NNRCBjbWQ7Ci0gICAgaW50IHJldCA9IDA7Ci0KLQlpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIHVzZXJkYXRhLCBzaXplb2YoY21kKSkpIHsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0gICAgaWYgKHdtaV9zZXRfYnRjb2V4X2J0aW5xdWlyeV9wYWdlX2NvbmZpZ19jbWQoYXItPmFyV21pLCAmY21kKSA9PSAwKQotICAgIHsKLSAgICAgICAgcmV0ID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgICByZXQgPSAtRUlOVkFMOwotICAgIH0KLQotCXJldHVybihyZXQpOwotfQotCi1zdGF0aWMgaW50Ci1hcjYwMDBfeGlvY3RsX3NldF9idGNvZXhfc2NvX2NvbmZpZ19jbWQoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsIGNoYXIgKnVzZXJkYXRhKQotewotCXN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLQlXTUlfU0VUX0JUQ09FWF9TQ09fQ09ORklHX0NNRCBjbWQ7Ci0gICAgaW50IHJldCA9IDA7Ci0KLQlpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIHVzZXJkYXRhLCBzaXplb2YoY21kKSkpIHsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0gICAgaWYgKHdtaV9zZXRfYnRjb2V4X3Njb19jb25maWdfY21kKGFyLT5hcldtaSwgJmNtZCkgPT0gMCkKLSAgICB7Ci0gICAgICAgIHJldCA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0ID0gLUVJTlZBTDsKLSAgICB9Ci0KLQlyZXR1cm4ocmV0KTsKLX0KLQotc3RhdGljIGludAotYXI2MDAwX3hpb2N0bF9zZXRfYnRjb2V4X2EyZHBfY29uZmlnX2NtZChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwKLQkJCQkJCQkJCQkJCQkJY2hhciAqdXNlcmRhdGEpCi17Ci0Jc3RydWN0IGFyNl9zb2Z0YyAqYXIgPSAoc3RydWN0IGFyNl9zb2Z0YyAqKWFyNmtfcHJpdihkZXYpOwotCVdNSV9TRVRfQlRDT0VYX0EyRFBfQ09ORklHX0NNRCBjbWQ7Ci0gICAgaW50IHJldCA9IDA7Ci0KLQlpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIHVzZXJkYXRhLCBzaXplb2YoY21kKSkpIHsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0gICAgaWYgKHdtaV9zZXRfYnRjb2V4X2EyZHBfY29uZmlnX2NtZChhci0+YXJXbWksICZjbWQpID09IDApCi0gICAgewotICAgICAgICByZXQgPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldCA9IC1FSU5WQUw7Ci0gICAgfQotCi0JcmV0dXJuKHJldCk7Ci19Ci0KLXN0YXRpYyBpbnQKLWFyNjAwMF94aW9jdGxfc2V0X2J0Y29leF9hY2xjb2V4X2NvbmZpZ19jbWQoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsIGNoYXIgKnVzZXJkYXRhKQotewotCXN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLQlXTUlfU0VUX0JUQ09FWF9BQ0xDT0VYX0NPTkZJR19DTUQgY21kOwotICAgIGludCByZXQgPSAwOwotCi0JaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWlmIChjb3B5X2Zyb21fdXNlcigmY21kLCB1c2VyZGF0YSwgc2l6ZW9mKGNtZCkpKSB7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotICAgIGlmICh3bWlfc2V0X2J0Y29leF9hY2xjb2V4X2NvbmZpZ19jbWQoYXItPmFyV21pLCAmY21kKSA9PSAwKQotICAgIHsKLSAgICAgICAgcmV0ID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgICByZXQgPSAtRUlOVkFMOwotICAgIH0KLQotCXJldHVybihyZXQpOwotfQotCi1zdGF0aWMgaW50Ci1hcjYwMDAwX3hpb2N0bF9zZXRfYnRjb2V4X2RlYnVnX2NtZChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwgY2hhciAqdXNlcmRhdGEpCi17Ci0Jc3RydWN0IGFyNl9zb2Z0YyAqYXIgPSAoc3RydWN0IGFyNl9zb2Z0YyAqKWFyNmtfcHJpdihkZXYpOwotCVdNSV9TRVRfQlRDT0VYX0RFQlVHX0NNRCBjbWQ7Ci0gICAgaW50IHJldCA9IDA7Ci0KLQlpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIHVzZXJkYXRhLCBzaXplb2YoY21kKSkpIHsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0gICAgaWYgKHdtaV9zZXRfYnRjb2V4X2RlYnVnX2NtZChhci0+YXJXbWksICZjbWQpID09IDApCi0gICAgewotICAgICAgICByZXQgPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldCA9IC1FSU5WQUw7Ci0gICAgfQotCi0JcmV0dXJuKHJldCk7Ci19Ci0KLXN0YXRpYyBpbnQKLWFyNjAwMF94aW9jdGxfc2V0X2J0Y29leF9idF9vcGVyYXRpbmdfc3RhdHVzX2NtZChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwgY2hhciAqdXNlcmRhdGEpCi17Ci0gICAgIHN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLSAgICAgV01JX1NFVF9CVENPRVhfQlRfT1BFUkFUSU5HX1NUQVRVU19DTUQgY21kOwotICAgICBpbnQgcmV0ID0gMDsKLQotICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotCXJldHVybiAtRUlPOwotICAgIH0KLQotICAgIGlmIChjb3B5X2Zyb21fdXNlcigmY21kLCB1c2VyZGF0YSwgc2l6ZW9mKGNtZCkpKSB7Ci0JcmV0dXJuIC1FRkFVTFQ7Ci0gICAgfQotCi0gICAgaWYgKHdtaV9zZXRfYnRjb2V4X2J0X29wZXJhdGluZ19zdGF0dXNfY21kKGFyLT5hcldtaSwgJmNtZCkgPT0gMCkKLSAgICB7Ci0gICAgICAgIHJldCA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0ID0gLUVJTlZBTDsKLSAgICB9Ci0gICAgcmV0dXJuKHJldCk7Ci19Ci0KLXN0YXRpYyBpbnQKLWFyNjAwMF94aW9jdGxfZ2V0X2J0Y29leF9jb25maWdfY21kKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LCBjaGFyICp1c2VyZGF0YSwKLQkJCQkJCQkJCQkJc3RydWN0IGlmcmVxICpycSkKLXsKLQotCXN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLSAgICBBUjYwMDBfQlRDT0VYX0NPTkZJRyBidGNvZXhDb25maWc7Ci0gICAgV01JX0JUQ09FWF9DT05GSUdfRVZFTlQgKnBidGNvZXhDb25maWdFdiA9ICZhci0+YXJCdGNvZXhDb25maWc7Ci0KLSAgICBpbnQgcmV0ID0gMDsKLQotICAgIGlmIChhci0+YklzRGVzdHJveVByb2dyZXNzKSB7Ci0gICAgICAgICAgICByZXR1cm4gLUVCVVNZOwotICAgIH0KLSAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIHJldHVybiAtRUlPOwotICAgIH0KLQlpZiAoY29weV9mcm9tX3VzZXIoJmJ0Y29leENvbmZpZy5jb25maWdDbWQsIHVzZXJkYXRhLCBzaXplb2YoQVI2MDAwX0JUQ09FWF9DT05GSUcpKSkgewotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0gICAgaWYgKGRvd25faW50ZXJydXB0aWJsZSgmYXItPmFyU2VtKSkgewotICAgICAgICByZXR1cm4gLUVSRVNUQVJUU1lTOwotICAgIH0KLQotICAgIGlmICh3bWlfZ2V0X2J0Y29leF9jb25maWdfY21kKGFyLT5hcldtaSwgKFdNSV9HRVRfQlRDT0VYX0NPTkZJR19DTUQgKikmYnRjb2V4Q29uZmlnLmNvbmZpZ0NtZCkgIT0gMCkKLSAgICB7Ci0gICAgCXVwKCZhci0+YXJTZW0pOwotICAgIAlyZXR1cm4gLUVJTzsKLSAgICB9Ci0KLSAgICBhci0+c3RhdHNVcGRhdGVQZW5kaW5nID0gdHJ1ZTsKLQotICAgIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGFyRXZlbnQsIGFyLT5zdGF0c1VwZGF0ZVBlbmRpbmcgPT0gZmFsc2UsIHdtaXRpbWVvdXQgKiBIWik7Ci0KLSAgICBpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLSAgICAgICByZXQgPSAtRUlOVFI7Ci0gICAgfQotCi0gICAgaWYgKCFyZXQgJiYgY29weV90b191c2VyKGJ0Y29leENvbmZpZy5jb25maWdFdmVudCwgcGJ0Y29leENvbmZpZ0V2LCBzaXplb2YoV01JX0JUQ09FWF9DT05GSUdfRVZFTlQpKSkgewotICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICB9Ci0gICAgdXAoJmFyLT5hclNlbSk7Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludAotYXI2MDAwX3hpb2N0bF9nZXRfYnRjb2V4X3N0YXRzX2NtZChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwgY2hhciAqdXNlcmRhdGEsIHN0cnVjdCBpZnJlcSAqcnEpCi17Ci0Jc3RydWN0IGFyNl9zb2Z0YyAqYXIgPSAoc3RydWN0IGFyNl9zb2Z0YyAqKWFyNmtfcHJpdihkZXYpOwotICAgIEFSNjAwMF9CVENPRVhfU1RBVFMgYnRjb2V4U3RhdHM7Ci0gICAgV01JX0JUQ09FWF9TVEFUU19FVkVOVCAqcGJ0Y29leFN0YXRzID0gJmFyLT5hckJ0Y29leFN0YXRzOwotICAgIGludCByZXQgPSAwOwotCi0gICAgaWYgKGFyLT5iSXNEZXN0cm95UHJvZ3Jlc3MpIHsKLSAgICAgICAgICAgIHJldHVybiAtRUJVU1k7Ci0gICAgfQotICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotCi0gICAgaWYgKGRvd25faW50ZXJydXB0aWJsZSgmYXItPmFyU2VtKSkgewotICAgICAgICByZXR1cm4gLUVSRVNUQVJUU1lTOwotICAgIH0KLQotCWlmIChjb3B5X2Zyb21fdXNlcigmYnRjb2V4U3RhdHMuc3RhdHNFdmVudCwgdXNlcmRhdGEsIHNpemVvZihBUjYwMDBfQlRDT0VYX0NPTkZJRykpKSB7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotICAgIGlmICh3bWlfZ2V0X2J0Y29leF9zdGF0c19jbWQoYXItPmFyV21pKSAhPSAwKQotICAgIHsKLSAgICAJdXAoJmFyLT5hclNlbSk7Ci0gICAgCXJldHVybiAtRUlPOwotICAgIH0KLQotICAgIGFyLT5zdGF0c1VwZGF0ZVBlbmRpbmcgPSB0cnVlOwotCi0gICAgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoYXJFdmVudCwgYXItPnN0YXRzVXBkYXRlUGVuZGluZyA9PSBmYWxzZSwgd21pdGltZW91dCAqIEhaKTsKLQotICAgIGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotICAgICAgIHJldCA9IC1FSU5UUjsKLSAgICB9Ci0KLSAgICBpZiAoIXJldCAmJiBjb3B5X3RvX3VzZXIoYnRjb2V4U3RhdHMuc3RhdHNFdmVudCwgcGJ0Y29leFN0YXRzLCBzaXplb2YoV01JX0JUQ09FWF9TVEFUU19FVkVOVCkpKSB7Ci0gICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgIH0KLQotCi0gICAgdXAoJmFyLT5hclNlbSk7Ci0KLQlyZXR1cm4ocmV0KTsKLX0KLQotc3RhdGljIGludAotYXI2MDAwX3hpb2N0bF9zZXRfZXhjZXNzX3R4X3JldHJ5X3RocmVzX2NtZChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwgY2hhciAqIHVzZXJkYXRhKQotewotICAgIHN0cnVjdCBhcjZfc29mdGMgICAgICphciAgICAgPSAoc3RydWN0IGFyNl9zb2Z0YyAqKWFyNmtfcHJpdihkZXYpOwotICAgIFdNSV9TRVRfRVhDRVNTX1RYX1JFVFJZX1RIUkVTX0NNRCBjbWQ7Ci0gICAgaW50IHJldCA9IDA7Ci0KLSAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotCi0gICAgaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIHVzZXJkYXRhLCBzaXplb2YoY21kKSkpIHsKLSAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgfQotCi0gICAgaWYgKHdtaV9zZXRfZXhjZXNzX3R4X3JldHJ5X3RocmVzX2NtZChhci0+YXJXbWksICZjbWQpICE9IDApCi0gICAgewotICAgICAgICByZXQgPSAtRUlOVkFMOwotICAgIH0KLSAgICByZXR1cm4ocmV0KTsKLX0KLQotI2lmZGVmIENPTkZJR19IT1NUX0dQSU9fU1VQUE9SVAotc3RydWN0IGFyNjAwMF9ncGlvX2ludHJfd2FpdF9jbWRfcyAgZ3Bpb19pbnRyX3Jlc3VsdHM7Ci0vKiBncGlvX3JlZ19yZXN1bHRzIGFuZCBncGlvX2RhdGFfYXZhaWxhYmxlIGFyZSBwcm90ZWN0ZWQgYnkgYXJTZW0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXI2MDAwX2dwaW9fcmVnaXN0ZXJfY21kX3MgZ3Bpb19yZWdfcmVzdWx0czsKLXN0YXRpYyBib29sIGdwaW9fZGF0YV9hdmFpbGFibGU7IC8qIFJlcXVlc3RlZCBHUElPIGRhdGEgYXZhaWxhYmxlICovCi1zdGF0aWMgYm9vbCBncGlvX2ludHJfYXZhaWxhYmxlOyAvKiBHUElPIGludGVycnVwdCBpbmZvIGF2YWlsYWJsZSAqLwotc3RhdGljIGJvb2wgZ3Bpb19hY2tfcmVjZWl2ZWQ7ICAgLyogR1BJTyBhY2sgd2FzIHJlY2VpdmVkICovCi0KLS8qIEhvc3Qtc2lkZSBpbml0aWFsaXphdGlvbiBmb3IgR2VuZXJhbCBQdXJwb3NlIEkvTyBzdXBwb3J0ICovCi12b2lkIGFyNjAwMF9ncGlvX2luaXQodm9pZCkKLXsKLSAgICBncGlvX2ludHJfYXZhaWxhYmxlID0gZmFsc2U7Ci0gICAgZ3Bpb19kYXRhX2F2YWlsYWJsZSA9IGZhbHNlOwotICAgIGdwaW9fYWNrX3JlY2VpdmVkICAgPSBmYWxzZTsKLX0KLQotLyoKLSAqIENhbGxlZCB3aGVuIGEgR1BJTyBpbnRlcnJ1cHQgaXMgcmVjZWl2ZWQgZnJvbSB0aGUgVGFyZ2V0LgotICogaW50cl92YWx1ZXMgc2hvd3Mgd2hpY2ggR1BJTyBwaW5zIGhhdmUgaW50ZXJydXB0ZWQuCi0gKiBpbnB1dF92YWx1ZXMgc2hvd3MgYSByZWNlbnQgdmFsdWUgb2YgR1BJTyBwaW5zLgotICovCi12b2lkCi1hcjYwMDBfZ3Bpb19pbnRyX3J4KHUzMiBpbnRyX21hc2ssIHUzMiBpbnB1dF92YWx1ZXMpCi17Ci0gICAgZ3Bpb19pbnRyX3Jlc3VsdHMuaW50cl9tYXNrID0gaW50cl9tYXNrOwotICAgIGdwaW9faW50cl9yZXN1bHRzLmlucHV0X3ZhbHVlcyA9IGlucHV0X3ZhbHVlczsKLSAgICAqKCh2b2xhdGlsZSBib29sICopJmdwaW9faW50cl9hdmFpbGFibGUpID0gdHJ1ZTsKLSAgICB3YWtlX3VwKCZhckV2ZW50KTsKLX0KLQotLyoKLSAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSByZXNwb25zZSBpcyByZWNlaXZlZCBmcm9tIHRoZSBUYXJnZXQKLSAqIGZvciBhIHByZXZpb3VzIG9yIGFyNjAwMF9ncGlvX2lucHV0X2dldCBvciBhcjYwMDBfZ3Bpb19yZWdpc3Rlcl9nZXQKLSAqIGNhbGwuCi0gKi8KLXZvaWQKLWFyNjAwMF9ncGlvX2RhdGFfcngodTMyIHJlZ19pZCwgdTMyIHZhbHVlKQotewotICAgIGdwaW9fcmVnX3Jlc3VsdHMuZ3Bpb3JlZ19pZCA9IHJlZ19pZDsKLSAgICBncGlvX3JlZ19yZXN1bHRzLnZhbHVlID0gdmFsdWU7Ci0gICAgKigodm9sYXRpbGUgYm9vbCAqKSZncGlvX2RhdGFfYXZhaWxhYmxlKSA9IHRydWU7Ci0gICAgd2FrZV91cCgmYXJFdmVudCk7Ci19Ci0KLS8qCi0gKiBUaGlzIGlzIGNhbGxlZCB3aGVuIGFuIGFja25vd2xlZGdlbWVudCBpcyByZWNlaXZlZCBmcm9tIHRoZSBUYXJnZXQKLSAqIGZvciBhIHByZXZpb3VzIG9yIGFyNjAwMF9ncGlvX291dHB1dF9zZXQgb3IgYXI2MDAwX2dwaW9fcmVnaXN0ZXJfc2V0Ci0gKiBjYWxsLgotICovCi12b2lkCi1hcjYwMDBfZ3Bpb19hY2tfcngodm9pZCkKLXsKLSAgICBncGlvX2Fja19yZWNlaXZlZCA9IHRydWU7Ci0gICAgd2FrZV91cCgmYXJFdmVudCk7Ci19Ci0KLWludAotYXI2MDAwX2dwaW9fb3V0cHV0X3NldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgICAgICAgICAgICB1MzIgc2V0X21hc2ssCi0gICAgICAgICAgICAgICAgICAgICAgIHUzMiBjbGVhcl9tYXNrLAotICAgICAgICAgICAgICAgICAgICAgICB1MzIgZW5hYmxlX21hc2ssCi0gICAgICAgICAgICAgICAgICAgICAgIHUzMiBkaXNhYmxlX21hc2spCi17Ci0gICAgc3RydWN0IGFyNl9zb2Z0YyAqYXIgPSAoc3RydWN0IGFyNl9zb2Z0YyAqKWFyNmtfcHJpdihkZXYpOwotCi0gICAgZ3Bpb19hY2tfcmVjZWl2ZWQgPSBmYWxzZTsKLSAgICByZXR1cm4gd21pX2dwaW9fb3V0cHV0X3NldChhci0+YXJXbWksCi0gICAgICAgICAgICAgICAgc2V0X21hc2ssIGNsZWFyX21hc2ssIGVuYWJsZV9tYXNrLCBkaXNhYmxlX21hc2spOwotfQotCi1zdGF0aWMgaW50Ci1hcjYwMDBfZ3Bpb19pbnB1dF9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLSAgICBzdHJ1Y3QgYXI2X3NvZnRjICphciA9IChzdHJ1Y3QgYXI2X3NvZnRjICopYXI2a19wcml2KGRldik7Ci0KLSAgICAqKCh2b2xhdGlsZSBib29sICopJmdwaW9fZGF0YV9hdmFpbGFibGUpID0gZmFsc2U7Ci0gICAgcmV0dXJuIHdtaV9ncGlvX2lucHV0X2dldChhci0+YXJXbWkpOwotfQotCi1zdGF0aWMgaW50Ci1hcjYwMDBfZ3Bpb19yZWdpc3Rlcl9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgZ3Bpb3JlZ19pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgdmFsdWUpCi17Ci0gICAgc3RydWN0IGFyNl9zb2Z0YyAqYXIgPSAoc3RydWN0IGFyNl9zb2Z0YyAqKWFyNmtfcHJpdihkZXYpOwotCi0gICAgZ3Bpb19hY2tfcmVjZWl2ZWQgPSBmYWxzZTsKLSAgICByZXR1cm4gd21pX2dwaW9fcmVnaXN0ZXJfc2V0KGFyLT5hcldtaSwgZ3Bpb3JlZ19pZCwgdmFsdWUpOwotfQotCi1zdGF0aWMgaW50Ci1hcjYwMDBfZ3Bpb19yZWdpc3Rlcl9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgZ3Bpb3JlZ19pZCkKLXsKLSAgICBzdHJ1Y3QgYXI2X3NvZnRjICphciA9IChzdHJ1Y3QgYXI2X3NvZnRjICopYXI2a19wcml2KGRldik7Ci0KLSAgICAqKCh2b2xhdGlsZSBib29sICopJmdwaW9fZGF0YV9hdmFpbGFibGUpID0gZmFsc2U7Ci0gICAgcmV0dXJuIHdtaV9ncGlvX3JlZ2lzdGVyX2dldChhci0+YXJXbWksIGdwaW9yZWdfaWQpOwotfQotCi1zdGF0aWMgaW50Ci1hcjYwMDBfZ3Bpb19pbnRyX2FjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgICAgICAgICAgdTMyIGFja19tYXNrKQotewotICAgIHN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLQotICAgIGdwaW9faW50cl9hdmFpbGFibGUgPSBmYWxzZTsKLSAgICByZXR1cm4gd21pX2dwaW9faW50cl9hY2soYXItPmFyV21pLCBhY2tfbWFzayk7Ci19Ci0jZW5kaWYgLyogQ09ORklHX0hPU1RfR1BJT19TVVBQT1JUICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19UQVJHRVRfUFJPRklMRV9TVVBQT1JUKQotc3RhdGljIHN0cnVjdCBwcm9mX2NvdW50X3MgcHJvZl9jb3VudF9yZXN1bHRzOwotc3RhdGljIGJvb2wgcHJvZl9jb3VudF9hdmFpbGFibGU7IC8qIFJlcXVlc3RlZCBHUElPIGRhdGEgYXZhaWxhYmxlICovCi0KLXN0YXRpYyBpbnQKLXByb2ZfY291bnRfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0gICAgc3RydWN0IGFyNl9zb2Z0YyAqYXIgPSAoc3RydWN0IGFyNl9zb2Z0YyAqKWFyNmtfcHJpdihkZXYpOwotCi0gICAgKigodm9sYXRpbGUgYm9vbCAqKSZwcm9mX2NvdW50X2F2YWlsYWJsZSkgPSBmYWxzZTsKLSAgICByZXR1cm4gd21pX3Byb2ZfY291bnRfZ2V0X2NtZChhci0+YXJXbWkpOwotfQotCi0vKgotICogVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHJlc3BvbnNlIGlzIHJlY2VpdmVkIGZyb20gdGhlIFRhcmdldAotICogZm9yIGEgcHJldmlvdXMgcHJvZl9jb3VudF9nZXQgY2FsbC4KLSAqLwotdm9pZAotcHJvZl9jb3VudF9yeCh1MzIgYWRkciwgdTMyIGNvdW50KQotewotICAgIHByb2ZfY291bnRfcmVzdWx0cy5hZGRyID0gYWRkcjsKLSAgICBwcm9mX2NvdW50X3Jlc3VsdHMuY291bnQgPSBjb3VudDsKLSAgICAqKCh2b2xhdGlsZSBib29sICopJnByb2ZfY291bnRfYXZhaWxhYmxlKSA9IHRydWU7Ci0gICAgd2FrZV91cCgmYXJFdmVudCk7Ci19Ci0jZW5kaWYgLyogQ09ORklHX1RBUkdFVF9QUk9GSUxFX1NVUFBPUlQgKi8KLQotCi1zdGF0aWMgaW50Ci1hcjYwMDBfY3JlYXRlX2FjbF9kYXRhX29zYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICp1c2VyZGF0YSwgdm9pZCAqKnBfb3NidWYpCi17Ci0gICAgdm9pZCAqb3NidWYgPSBOVUxMOwotICAgIHU4IHRtcF9zcGFjZVs4XTsKLSAgICBIQ0lfQUNMX0RBVEFfUEtUICphY2w7Ci0gICAgdTggaGRyX3NpemUsICpkYXRhcD1OVUxMOwotICAgIGludCByZXQgPSAwOwotCi0gICAgLyogQUNMIGlzIGluIGRhdGEgcGF0aC4gVGhlcmUgaXMgYSBuZWVkIHRvIGNyZWF0ZSBwb29sCi0gICAgICogbWVjaGFuaXNtIGZvciBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIE5FVEJVRnMgLSBUb0RvIGxhdGVyLgotICAgICAqLwotCi0gICAgKnBfb3NidWYgPSBOVUxMOwotICAgIGFjbCA9IChIQ0lfQUNMX0RBVEFfUEtUICopdG1wX3NwYWNlOwotICAgIGhkcl9zaXplID0gc2l6ZW9mKGFjbC0+aGRsX2FuZF9mbGFncykgKyBzaXplb2YoYWNsLT5kYXRhX2xlbik7Ci0KLSAgICBkbyB7Ci0gICAgICAgIGlmIChhX2NvcHlfZnJvbV91c2VyKGFjbCwgdXNlcmRhdGEsIGhkcl9zaXplKSkgewotICAgICAgICAgICAgcmV0ID0gQV9FRkFVTFQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIG9zYnVmID0gQV9ORVRCVUZfQUxMT0MoaGRyX3NpemUgKyBhY2wtPmRhdGFfbGVuKTsKLSAgICAgICAgaWYgKG9zYnVmID09IE5VTEwpIHsKLSAgICAgICAgICAgcmV0ID0gQV9OT19NRU1PUlk7Ci0gICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIEFfTkVUQlVGX1BVVChvc2J1ZiwgaGRyX3NpemUgKyBhY2wtPmRhdGFfbGVuKTsKLSAgICAgICAgZGF0YXAgPSAodTggKilBX05FVEJVRl9EQVRBKG9zYnVmKTsKLQotICAgICAgICAvKiBSZWFsIGNvcHkgdG8gb3NidWYgKi8KLSAgICAgICAgYWNsID0gKEhDSV9BQ0xfREFUQV9QS1QgKikoZGF0YXApOwotICAgICAgICBtZW1jcHkoYWNsLCB0bXBfc3BhY2UsIGhkcl9zaXplKTsKLSAgICAgICAgaWYgKGFfY29weV9mcm9tX3VzZXIoYWNsLT5kYXRhLCB1c2VyZGF0YSArIGhkcl9zaXplLCBhY2wtPmRhdGFfbGVuKSkgewotICAgICAgICAgICAgcmV0ID0gQV9FRkFVTFQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0gd2hpbGUoZmFsc2UpOwotCi0gICAgaWYgKHJldCA9PSAwKSB7Ci0gICAgICAgICpwX29zYnVmID0gb3NidWY7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQV9ORVRCVUZfRlJFRShvc2J1Zik7Ci0gICAgfQotICAgIHJldHVybiByZXQ7Ci19Ci0KLQotCi1pbnQKLWFyNjAwMF9pb2N0bF9hcF9zZXRwYXJhbShzdHJ1Y3QgYXI2X3NvZnRjICphciwgaW50IHBhcmFtLCBpbnQgdmFsdWUpCi17Ci0gICAgaW50IHJldD0wOwotCi0gICAgc3dpdGNoKHBhcmFtKSB7Ci0gICAgICAgIGNhc2UgSUVFRTgwMjExX1BBUkFNX1dQQToKLSAgICAgICAgICAgIHN3aXRjaCAodmFsdWUpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFdQQV9NT0RFX1dQQTE6Ci0gICAgICAgICAgICAgICAgICAgIGFyLT5hckF1dGhNb2RlID0gV1BBX0FVVEg7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV1BBX01PREVfV1BBMjoKLSAgICAgICAgICAgICAgICAgICAgYXItPmFyQXV0aE1vZGUgPSBXUEEyX0FVVEg7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV1BBX01PREVfQVVUTzoKLSAgICAgICAgICAgICAgICAgICAgYXItPmFyQXV0aE1vZGUgPSBXUEFfQVVUSCB8IFdQQTJfQVVUSDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXUEFfTU9ERV9OT05FOgotICAgICAgICAgICAgICAgICAgICBhci0+YXJBdXRoTW9kZSA9IE5PTkVfQVVUSDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRUVFODAyMTFfUEFSQU1fQVVUSE1PREU6Ci0gICAgICAgICAgICBpZih2YWx1ZSA9PSBJRUVFODAyMTFfQVVUSF9XUEFfUFNLKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFdQQV9BVVRIID09IGFyLT5hckF1dGhNb2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFyLT5hckF1dGhNb2RlID0gV1BBX1BTS19BVVRIOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoV1BBMl9BVVRIID09IGFyLT5hckF1dGhNb2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFyLT5hckF1dGhNb2RlID0gV1BBMl9QU0tfQVVUSDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChXUEFfQVVUSCB8IFdQQTJfQVVUSCkgPT0gYXItPmFyQXV0aE1vZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgYXItPmFyQXV0aE1vZGUgPSBXUEFfUFNLX0FVVEggfCBXUEEyX1BTS19BVVRIOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfRVJSLCgiRXJyb3IgLSAgU2V0dGluZyBQU0sgIlwKLSAgICAgICAgICAgICAgICAgICAgICAgICJtb2RlIHdoZW4gV1BBIHBhcmFtIHdhcyBzZXQgdG8gJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBhci0+YXJBdXRoTW9kZSkpOwotICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElFRUU4MDIxMV9QQVJBTV9VQ0FTVENJUEhFUjoKLSAgICAgICAgICAgIGFyLT5hclBhaXJ3aXNlQ3J5cHRvID0gMDsKLSAgICAgICAgICAgIGlmKHZhbHVlICYgKDE8PElFRUU4MDIxMV9DSVBIRVJfQUVTX0NDTSkpIHsKLSAgICAgICAgICAgICAgICBhci0+YXJQYWlyd2lzZUNyeXB0byB8PSBBRVNfQ1JZUFQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZih2YWx1ZSAmICgxPDxJRUVFODAyMTFfQ0lQSEVSX1RLSVApKSB7Ci0gICAgICAgICAgICAgICAgYXItPmFyUGFpcndpc2VDcnlwdG8gfD0gVEtJUF9DUllQVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmKCFhci0+YXJQYWlyd2lzZUNyeXB0bykgewotICAgICAgICAgICAgICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfRVJSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJFcnJvciAtIEludmFsaWQgY2lwaGVyIGluIFdQQSBcbiIpKTsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSUVFRTgwMjExX1BBUkFNX1BSSVZBQ1k6Ci0gICAgICAgICAgICBpZih2YWx1ZSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgYXItPmFyRG90MTFBdXRoTW9kZSAgICAgID0gT1BFTl9BVVRIOwotICAgICAgICAgICAgICAgIGFyLT5hckF1dGhNb2RlICAgICAgICAgICA9IE5PTkVfQVVUSDsKLSAgICAgICAgICAgICAgICBhci0+YXJQYWlyd2lzZUNyeXB0byAgICAgPSBOT05FX0NSWVBUOwotICAgICAgICAgICAgICAgIGFyLT5hclBhaXJ3aXNlQ3J5cHRvTGVuICA9IDA7Ci0gICAgICAgICAgICAgICAgYXItPmFyR3JvdXBDcnlwdG8gICAgICAgID0gTk9ORV9DUllQVDsKLSAgICAgICAgICAgICAgICBhci0+YXJHcm91cENyeXB0b0xlbiAgICAgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgV0FQSV9FTkFCTEUKLSAgICAgICAgY2FzZSBJRUVFODAyMTFfUEFSQU1fV0FQSToKLSAgICAgICAgICAgIEFfUFJJTlRGKCJXQVBJIFBvbGljeTogJWRcbiIsIHZhbHVlKTsKLSAgICAgICAgICAgIGFyLT5hckRvdDExQXV0aE1vZGUgICAgICA9IE9QRU5fQVVUSDsKLSAgICAgICAgICAgIGFyLT5hckF1dGhNb2RlICAgICAgICAgICA9IE5PTkVfQVVUSDsKLSAgICAgICAgICAgIGlmKHZhbHVlICYgMHgxKSB7Ci0gICAgICAgICAgICAgICAgYXItPmFyUGFpcndpc2VDcnlwdG8gICAgID0gV0FQSV9DUllQVDsKLSAgICAgICAgICAgICAgICBhci0+YXJHcm91cENyeXB0byAgICAgICAgPSBXQVBJX0NSWVBUOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBhci0+YXJQYWlyd2lzZUNyeXB0byAgICAgPSBOT05FX0NSWVBUOwotICAgICAgICAgICAgICAgIGFyLT5hckdyb3VwQ3J5cHRvICAgICAgICA9IE5PTkVfQ1JZUFQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIH0KLSAgICByZXR1cm4gcmV0OwotfQotCi1pbnQKLWFyNjAwMF9pb2N0bF9zZXRwYXJhbShzdHJ1Y3QgYXI2X3NvZnRjICphciwgaW50IHBhcmFtLCBpbnQgdmFsdWUpCi17Ci0gICAgYm9vbCBwcm9mQ2hhbmdlZCA9IGZhbHNlOwotICAgIGludCByZXQ9MDsKLQotICAgIGlmKGFyLT5hck5leHRNb2RlID09IEFQX05FVFdPUkspIHsKLSAgICAgICAgYXItPmFwX3Byb2ZpbGVfZmxhZyA9IDE7IC8qIFRoZXJlIGlzIGEgY2hhbmdlIGluIHByb2ZpbGUgKi8KLSAgICAgICAgc3dpdGNoIChwYXJhbSkgewotICAgICAgICAgICAgY2FzZSBJRUVFODAyMTFfUEFSQU1fV1BBOgotICAgICAgICAgICAgY2FzZSBJRUVFODAyMTFfUEFSQU1fQVVUSE1PREU6Ci0gICAgICAgICAgICBjYXNlIElFRUU4MDIxMV9QQVJBTV9VQ0FTVENJUEhFUjoKLSAgICAgICAgICAgIGNhc2UgSUVFRTgwMjExX1BBUkFNX1BSSVZBQ1k6Ci0gICAgICAgICAgICBjYXNlIElFRUU4MDIxMV9QQVJBTV9XQVBJOgotICAgICAgICAgICAgICAgIHJldCA9IGFyNjAwMF9pb2N0bF9hcF9zZXRwYXJhbShhciwgcGFyYW0sIHZhbHVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3dpdGNoIChwYXJhbSkgewotICAgICAgICBjYXNlIElFRUU4MDIxMV9QQVJBTV9XUEE6Ci0gICAgICAgICAgICBzd2l0Y2ggKHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBXUEFfTU9ERV9XUEExOgotICAgICAgICAgICAgICAgICAgICBhci0+YXJBdXRoTW9kZSA9IFdQQV9BVVRIOwotICAgICAgICAgICAgICAgICAgICBwcm9mQ2hhbmdlZCAgICA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV1BBX01PREVfV1BBMjoKLSAgICAgICAgICAgICAgICAgICAgYXItPmFyQXV0aE1vZGUgPSBXUEEyX0FVVEg7Ci0gICAgICAgICAgICAgICAgICAgIHByb2ZDaGFuZ2VkICAgID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXUEFfTU9ERV9OT05FOgotICAgICAgICAgICAgICAgICAgICBhci0+YXJBdXRoTW9kZSA9IE5PTkVfQVVUSDsKLSAgICAgICAgICAgICAgICAgICAgcHJvZkNoYW5nZWQgICAgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElFRUU4MDIxMV9QQVJBTV9BVVRITU9ERToKLSAgICAgICAgICAgIHN3aXRjaCh2YWx1ZSkgewotICAgICAgICAgICAgICAgIGNhc2UgSUVFRTgwMjExX0FVVEhfV1BBX1BTSzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKFdQQV9BVVRIID09IGFyLT5hckF1dGhNb2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhci0+YXJBdXRoTW9kZSA9IFdQQV9QU0tfQVVUSDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZDaGFuZ2VkICAgID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChXUEEyX0FVVEggPT0gYXItPmFyQXV0aE1vZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyLT5hckF1dGhNb2RlID0gV1BBMl9QU0tfQVVUSDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZDaGFuZ2VkICAgID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfRVJSLCgiRXJyb3IgLSAgU2V0dGluZyBQU0sgIlwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kZSB3aGVuIFdQQSBwYXJhbSB3YXMgc2V0IHRvICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyLT5hckF1dGhNb2RlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgSUVFRTgwMjExX0FVVEhfV1BBX0NDS006Ci0gICAgICAgICAgICAgICAgICAgIGlmIChXUEEyX0FVVEggPT0gYXItPmFyQXV0aE1vZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyLT5hckF1dGhNb2RlID0gV1BBMl9BVVRIX0NDS007Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhci0+YXJBdXRoTW9kZSA9IFdQQV9BVVRIX0NDS007Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRUVFODAyMTFfUEFSQU1fVUNBU1RDSVBIRVI6Ci0gICAgICAgICAgICBzd2l0Y2ggKHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBJRUVFODAyMTFfQ0lQSEVSX0FFU19DQ006Ci0gICAgICAgICAgICAgICAgICAgIGFyLT5hclBhaXJ3aXNlQ3J5cHRvID0gQUVTX0NSWVBUOwotICAgICAgICAgICAgICAgICAgICBwcm9mQ2hhbmdlZCAgICAgICAgICA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgSUVFRTgwMjExX0NJUEhFUl9US0lQOgotICAgICAgICAgICAgICAgICAgICBhci0+YXJQYWlyd2lzZUNyeXB0byA9IFRLSVBfQ1JZUFQ7Ci0gICAgICAgICAgICAgICAgICAgIHByb2ZDaGFuZ2VkICAgICAgICAgID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBJRUVFODAyMTFfQ0lQSEVSX1dFUDoKLSAgICAgICAgICAgICAgICAgICAgYXItPmFyUGFpcndpc2VDcnlwdG8gPSBXRVBfQ1JZUFQ7Ci0gICAgICAgICAgICAgICAgICAgIHByb2ZDaGFuZ2VkICAgICAgICAgID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBJRUVFODAyMTFfQ0lQSEVSX05PTkU6Ci0gICAgICAgICAgICAgICAgICAgIGFyLT5hclBhaXJ3aXNlQ3J5cHRvID0gTk9ORV9DUllQVDsKLSAgICAgICAgICAgICAgICAgICAgcHJvZkNoYW5nZWQgICAgICAgICAgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElFRUU4MDIxMV9QQVJBTV9VQ0FTVEtFWUxFTjoKLSAgICAgICAgICAgIGlmICghSUVFRTgwMjExX0lTX1ZBTElEX1dFUF9DSVBIRVJfTEVOKHZhbHVlKSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGFyLT5hclBhaXJ3aXNlQ3J5cHRvTGVuID0gdmFsdWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRUVFODAyMTFfUEFSQU1fTUNBU1RDSVBIRVI6Ci0gICAgICAgICAgICBzd2l0Y2ggKHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBJRUVFODAyMTFfQ0lQSEVSX0FFU19DQ006Ci0gICAgICAgICAgICAgICAgICAgIGFyLT5hckdyb3VwQ3J5cHRvID0gQUVTX0NSWVBUOwotICAgICAgICAgICAgICAgICAgICBwcm9mQ2hhbmdlZCAgICAgICA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgSUVFRTgwMjExX0NJUEhFUl9US0lQOgotICAgICAgICAgICAgICAgICAgICBhci0+YXJHcm91cENyeXB0byA9IFRLSVBfQ1JZUFQ7Ci0gICAgICAgICAgICAgICAgICAgIHByb2ZDaGFuZ2VkICAgICAgID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBJRUVFODAyMTFfQ0lQSEVSX1dFUDoKLSAgICAgICAgICAgICAgICAgICAgYXItPmFyR3JvdXBDcnlwdG8gPSBXRVBfQ1JZUFQ7Ci0gICAgICAgICAgICAgICAgICAgIHByb2ZDaGFuZ2VkICAgICAgID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBJRUVFODAyMTFfQ0lQSEVSX05PTkU6Ci0gICAgICAgICAgICAgICAgICAgIGFyLT5hckdyb3VwQ3J5cHRvID0gTk9ORV9DUllQVDsKLSAgICAgICAgICAgICAgICAgICAgcHJvZkNoYW5nZWQgICAgICAgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElFRUU4MDIxMV9QQVJBTV9NQ0FTVEtFWUxFTjoKLSAgICAgICAgICAgIGlmICghSUVFRTgwMjExX0lTX1ZBTElEX1dFUF9DSVBIRVJfTEVOKHZhbHVlKSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGFyLT5hckdyb3VwQ3J5cHRvTGVuID0gdmFsdWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRUVFODAyMTFfUEFSQU1fQ09VTlRFUk1FQVNVUkVTOgotICAgICAgICAgICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB3bWlfc2V0X3RraXBfY291bnRlcm1lYXN1cmVzX2NtZChhci0+YXJXbWksIHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmICgoYXItPmFyTmV4dE1vZGUgIT0gQVBfTkVUV09SSykgJiYgKHByb2ZDaGFuZ2VkID09IHRydWUpKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIHByb2ZpbGUgaGFzIGNoYW5nZWQuICBFcmFzZSBzc2lkIHRvIHNpZ25hbCBjaGFuZ2UKLSAgICAgICAgICovCi0gICAgICAgIEFfTUVNWkVSTyhhci0+YXJTc2lkLCBzaXplb2YoYXItPmFyU3NpZCkpOwotICAgIH0KLQotICAgIHJldHVybiByZXQ7Ci19Ci0KLWludAotYXI2MDAwX2lvY3RsX3NldGtleShzdHJ1Y3QgYXI2X3NvZnRjICphciwgc3RydWN0IGllZWU4MDIxMXJlcV9rZXkgKmlrKQotewotICAgIEtFWV9VU0FHRSBrZXlVc2FnZTsKLSAgICBpbnQgc3RhdHVzOwotICAgIENSWVBUT19UWVBFIGtleVR5cGUgPSBOT05FX0NSWVBUOwotCi0jaWZkZWYgVVNFUl9LRVlTCi0gICAgYXItPnVzZXJfc2F2ZWRfa2V5cy5rZXlPayA9IGZhbHNlOwotI2VuZGlmCi0gICAgaWYgKCAoMCA9PSBtZW1jbXAoaWstPmlrX21hY2FkZHIsIG51bGxfbWFjLCBJRUVFODAyMTFfQUREUl9MRU4pKSB8fAotICAgICAgICAgKDAgPT0gbWVtY21wKGlrLT5pa19tYWNhZGRyLCBiY2FzdF9tYWMsIElFRUU4MDIxMV9BRERSX0xFTikpICkgewotICAgICAgICBrZXlVc2FnZSA9IEdST1VQX1VTQUdFOwotICAgICAgICBpZihhci0+YXJOZXh0TW9kZSA9PSBBUF9ORVRXT1JLKSB7Ci0gICAgICAgICAgICBtZW1jcHkoJmFyLT5hcF9tb2RlX2JrZXksIGlrLAotICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFyZXFfa2V5KSk7Ci0jaWZkZWYgV0FQSV9FTkFCTEUKLSAgICAgICAgICAgIGlmKGFyLT5hclBhaXJ3aXNlQ3J5cHRvID09IFdBUElfQ1JZUFQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYXBfc2V0X3dhcGlfa2V5KGFyLCBpayk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgfQotI2lmZGVmIFVTRVJfS0VZUwotICAgICAgICBtZW1jcHkoJmFyLT51c2VyX3NhdmVkX2tleXMuYmNhc3RfaWssIGlrLAotICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMXJlcV9rZXkpKTsKLSNlbmRpZgotICAgIH0gZWxzZSB7Ci0gICAgICAgIGtleVVzYWdlID0gUEFJUldJU0VfVVNBR0U7Ci0jaWZkZWYgVVNFUl9LRVlTCi0gICAgICAgIG1lbWNweSgmYXItPnVzZXJfc2F2ZWRfa2V5cy51Y2FzdF9paywgaWssCi0gICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExcmVxX2tleSkpOwotI2VuZGlmCi0jaWZkZWYgV0FQSV9FTkFCTEUKLSAgICAgICAgaWYoYXItPmFyTmV4dE1vZGUgPT0gQVBfTkVUV09SSykgewotICAgICAgICAgICAgaWYoYXItPmFyUGFpcndpc2VDcnlwdG8gPT0gV0FQSV9DUllQVCkgewotICAgICAgICAgICAgICAgIHJldHVybiBhcF9zZXRfd2FwaV9rZXkoYXIsIGlrKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotCi0gICAgc3dpdGNoIChpay0+aWtfdHlwZSkgewotICAgICAgICBjYXNlIElFRUU4MDIxMV9DSVBIRVJfV0VQOgotICAgICAgICAgICAga2V5VHlwZSA9IFdFUF9DUllQVDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElFRUU4MDIxMV9DSVBIRVJfVEtJUDoKLSAgICAgICAgICAgIGtleVR5cGUgPSBUS0lQX0NSWVBUOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSUVFRTgwMjExX0NJUEhFUl9BRVNfQ0NNOgotICAgICAgICAgICAga2V5VHlwZSA9IEFFU19DUllQVDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotI2lmZGVmIFVTRVJfS0VZUwotICAgIGFyLT51c2VyX3NhdmVkX2tleXMua2V5VHlwZSA9IGtleVR5cGU7Ci0jZW5kaWYKLSAgICBpZiAoSUVFRTgwMjExX0NJUEhFUl9DQ0tNX0tSSyAhPSBpay0+aWtfdHlwZSkgewotICAgICAgICBpZiAoTk9ORV9DUllQVCA9PSBrZXlUeXBlKSB7Ci0gICAgICAgICAgICByZXR1cm4gLUVJTzsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgoV0VQX0NSWVBUID09IGtleVR5cGUpJiYoIWFyLT5hckNvbm5lY3RlZCkpIHsKLSAgICAgICAgICAgICBpbnQgaW5kZXggPSBpay0+aWtfa2V5aXg7Ci0KLSAgICAgICAgICAgIGlmICghSUVFRTgwMjExX0lTX1ZBTElEX1dFUF9DSVBIRVJfTEVOKGlrLT5pa19rZXlsZW4pKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFfTUVNWkVSTyhhci0+YXJXZXBLZXlMaXN0W2luZGV4XS5hcktleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoYXItPmFyV2VwS2V5TGlzdFtpbmRleF0uYXJLZXkpKTsKLSAgICAgICAgICAgIG1lbWNweShhci0+YXJXZXBLZXlMaXN0W2luZGV4XS5hcktleSwgaWstPmlrX2tleWRhdGEsIGlrLT5pa19rZXlsZW4pOwotICAgICAgICAgICAgYXItPmFyV2VwS2V5TGlzdFtpbmRleF0uYXJLZXlMZW4gPSBpay0+aWtfa2V5bGVuOwotCi0gICAgICAgICAgICBpZihpay0+aWtfZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0RFRkFVTFQpewotICAgICAgICAgICAgICAgIGFyLT5hckRlZlR4S2V5SW5kZXggPSBpbmRleDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKChXUEFfUFNLX0FVVEggPT0gYXItPmFyQXV0aE1vZGUpIHx8IChXUEEyX1BTS19BVVRIID09IGFyLT5hckF1dGhNb2RlKSkgJiYKLSAgICAgICAgICAgIChHUk9VUF9VU0FHRSAmIGtleVVzYWdlKSkKLSAgICAgICAgewotICAgICAgICAgICAgQV9VTlRJTUVPVVQoJmFyLT5kaXNjb25uZWN0X3RpbWVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXR1cyA9IHdtaV9hZGRLZXlfY21kKGFyLT5hcldtaSwgaWstPmlrX2tleWl4LCBrZXlUeXBlLCBrZXlVc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWstPmlrX2tleWxlbiwgKHU4ICopJmlrLT5pa19rZXlyc2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlrLT5pa19rZXlkYXRhLCBLRVlfT1BfSU5JVF9WQUwsIGlrLT5pa19tYWNhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTWU5DX0JPVEhfV01JRkxBRyk7Ci0KLSAgICAgICAgaWYgKHN0YXR1cykgewotICAgICAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBzdGF0dXMgPSB3bWlfYWRkX2tya19jbWQoYXItPmFyV21pLCBpay0+aWtfa2V5ZGF0YSk7Ci0gICAgfQotCi0jaWZkZWYgVVNFUl9LRVlTCi0gICAgYXItPnVzZXJfc2F2ZWRfa2V5cy5rZXlPayA9IHRydWU7Ci0jZW5kaWYKLQotICAgIHJldHVybiAwOwotfQotCi1pbnQgYXI2MDAwX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCi17Ci0gICAgc3RydWN0IGFyNl9zb2Z0YyAqYXIgPSAoc3RydWN0IGFyNl9zb2Z0YyAqKWFyNmtfcHJpdihkZXYpOwotICAgIHN0cnVjdCBoaWZfZGV2aWNlICpoaWZEZXZpY2UgPSBhci0+YXJIaWZEZXZpY2U7Ci0gICAgaW50IHJldCA9IDAsIHBhcmFtOwotICAgIHVuc2lnbmVkIGludCBhZGRyZXNzID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoID0gMDsKLSAgICB1bnNpZ25lZCBjaGFyICpidWZmZXI7Ci0gICAgY2hhciAqdXNlcmRhdGE7Ci0gICAgdTMyIGNvbm5lY3RDdHJsRmxhZ3M7Ci0KLQotICAgIFdNSV9TRVRfQUtNUF9QQVJBTVNfQ01EICBha21wUGFyYW1zOwotICAgIFdNSV9TRVRfUE1LSURfTElTVF9DTUQgICBwbWtpZEluZm87Ci0KLSAgICBXTUlfU0VUX0hUX0NBUF9DTUQgaHRDYXA7Ci0gICAgV01JX1NFVF9IVF9PUF9DTUQgaHRPcDsKLQotICAgIC8qCi0gICAgICogaW9jdGwgb3BlcmF0aW9ucyBtYXkgaGF2ZSB0byB3YWl0IGZvciB0aGUgVGFyZ2V0LCBzbyB3ZSBjYW5ub3QgaG9sZCBydG5sLgotICAgICAqIFByZXZlbnQgdGhlIGRldmljZSBmcm9tIGRpc2FwcGVhcmluZyB1bmRlciB1cyBhbmQgcmVsZWFzZSB0aGUgbG9jayBkdXJpbmcKLSAgICAgKiB0aGUgaW9jdGwgb3BlcmF0aW9uLgotICAgICAqLwotICAgIGRldl9ob2xkKGRldik7Ci0gICAgcnRubF91bmxvY2soKTsKLQotICAgIGlmIChjbWQgPT0gQVI2MDAwX0lPQ1RMX0VYVEVOREVEKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFRoaXMgYWxsb3dzIGZvciBtYW55IG1vcmUgd2lyZWxlc3MgaW9jdGxzIHRoYW4gd291bGQgb3RoZXJ3aXNlCi0gICAgICAgICAqIGJlIGF2YWlsYWJsZS4gIEFwcGxpY2F0aW9ucyBlbWJlZCB0aGUgYWN0dWFsIGlvY3RsIGNvbW1hbmQgaW4KLSAgICAgICAgICogdGhlIGZpcnN0IHdvcmQgb2YgdGhlIHBhcmFtZXRlciBibG9jaywgYW5kIHVzZSB0aGUgY29tbWFuZAotICAgICAgICAgKiBBUjYwMDBfSU9DVExfRVhURU5ERURfQ01EIG9uIHRoZSBpb2N0bCBjYWxsLgotICAgICAgICAgKi8KLQlpZiAoZ2V0X3VzZXIoY21kLCAoaW50ICopcnEtPmlmcl9kYXRhKSkgewotCSAgICByZXQgPSAtRUZBVUxUOwotCSAgICBnb3RvIGlvY3RsX2RvbmU7Ci0JfQotICAgICAgICB1c2VyZGF0YSA9IChjaGFyICopKCgodW5zaWduZWQgaW50ICopcnEtPmlmcl9kYXRhKSsxKTsKLSAgICAgICAgaWYoaXNfeGlvY3RsX2FsbG93ZWQoYXItPmFyTmV4dE1vZGUsIGNtZCkgIT0gMCkgewotICAgICAgICAgICAgQV9QUklOVEYoInhpb2N0bDogY21kPSVkIG5vdCBhbGxvd2VkIGluIHRoaXMgbW9kZVxuIixjbWQpOwotICAgICAgICAgICAgcmV0ID0gLUVPUE5PVFNVUFA7Ci0gICAgICAgICAgICBnb3RvIGlvY3RsX2RvbmU7Ci0gICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGludCByZXQgPSBpc19pd2lvY3RsX2FsbG93ZWQoYXItPmFyTmV4dE1vZGUsIGNtZCk7Ci0gICAgICAgIGlmKHJldCA9PSBBX0VOT1RTVVApIHsKLSAgICAgICAgICAgIEFfUFJJTlRGKCJpd2lvY3RsOiBjbWQ9MHgleCBub3QgYWxsb3dlZCBpbiB0aGlzIG1vZGVcbiIsIGNtZCk7Ci0gICAgICAgICAgICByZXQgPSAtRU9QTk9UU1VQUDsKLSAgICAgICAgICAgIGdvdG8gaW9jdGxfZG9uZTsKLSAgICAgICAgfSBlbHNlIGlmIChyZXQgPT0gQV9FUlJPUikgewotICAgICAgICAgICAgLyogSXQgaXMgbm90IG91ciBpb2N0bCAob3V0IG9mIHJhbmdlIGlvY3RsKSAqLwotICAgICAgICAgICAgcmV0ID0gLUVPUE5PVFNVUFA7Ci0gICAgICAgICAgICBnb3RvIGlvY3RsX2RvbmU7Ci0gICAgICAgIH0KLSAgICAgICAgdXNlcmRhdGEgPSAoY2hhciAqKXJxLT5pZnJfZGF0YTsKLSAgICB9Ci0KLSAgICBpZiAoKGFyLT5hcldsYW5TdGF0ZSA9PSBXTEFOX0RJU0FCTEVEKSAmJgotICAgICAgICAoKGNtZCAhPSBBUjYwMDBfWElPQ1RSTF9XTUlfU0VUX1dMQU5fU1RBVEUpICYmCi0gICAgICAgICAoY21kICE9IEFSNjAwMF9YSU9DVExfR0VUX1dMQU5fU0xFRVBfU1RBVEUpICYmCi0gICAgICAgICAoY21kICE9IEFSNjAwMF9YSU9DVExfRElBR19SRUFEKSAmJgotICAgICAgICAgKGNtZCAhPSBBUjYwMDBfWElPQ1RMX0RJQUdfV1JJVEUpICYmCi0gICAgICAgICAoY21kICE9IEFSNjAwMF9YSU9DVExfU0VUX0JUX0hXX1BPV0VSX1NUQVRFKSAmJgotICAgICAgICAgKGNtZCAhPSBBUjYwMDBfWElPQ1RMX0dFVF9CVF9IV19QT1dFUl9TVEFURSkgJiYKLSAgICAgICAgIChjbWQgIT0gQVI2MDAwX1hJT0NUTF9BRERfQVBfSU5URVJGQUNFKSAmJgotICAgICAgICAgKGNtZCAhPSBBUjYwMDBfWElPQ1RMX1JFTU9WRV9BUF9JTlRFUkZBQ0UpICYmCi0gICAgICAgICAoY21kICE9IEFSNjAwMF9JT0NUTF9XTUlfR0VUUkVWKSkpCi0gICAgewotICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICBnb3RvIGlvY3RsX2RvbmU7Ci0gICAgfQotCi0gICAgcmV0ID0gMDsKLSAgICBzd2l0Y2goY21kKQotICAgIHsKLSAgICAgICAgY2FzZSBJRUVFODAyMTFfSU9DVExfU0VUUEFSQU06Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBwYXJhbSwgdmFsdWU7Ci0gICAgICAgICAgICBpbnQgKnB0ciA9IChpbnQgKilycS0+aWZyX2lmcnUuaWZydV9uZXduYW1lOwotICAgICAgICAgICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcGFyYW0gPSAqcHRyKys7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSAqcHRyOwotICAgICAgICAgICAgICAgIHJldCA9IGFyNjAwMF9pb2N0bF9zZXRwYXJhbShhcixwYXJhbSx2YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIElFRUU4MDIxMV9JT0NUTF9TRVRLRVk6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFyZXFfa2V5IGtleWRhdGE7Ci0gICAgICAgICAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgfSBlbHNlIGlmIChjb3B5X2Zyb21fdXNlcigma2V5ZGF0YSwgdXNlcmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFyZXFfa2V5KSkpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBhcjYwMDBfaW9jdGxfc2V0a2V5KGFyLCAma2V5ZGF0YSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIElFRUU4MDIxMV9JT0NUTF9ERUxLRVk6Ci0gICAgICAgIGNhc2UgSUVFRTgwMjExX0lPQ1RMX1NFVE9QVElFOgotICAgICAgICB7Ci0gICAgICAgICAgICAvL3JldCA9IC1FSU87Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIElFRUU4MDIxMV9JT0NUTF9TRVRNTE1FOgotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExcmVxX21sbWUgbWxtZTsKLSAgICAgICAgICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNvcHlfZnJvbV91c2VyKCZtbG1lLCB1c2VyZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMXJlcV9tbG1lKSkpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG1sbWUuaW1fb3ApIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRUVFODAyMTFfTUxNRV9BVVRIT1JJWkU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBBX1BSSU5URigic2V0bWxtZSBBVVRIT1JJWkUgJTAyWDolMDJYXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1sbWUuaW1fbWFjYWRkcls0XSwgbWxtZS5pbV9tYWNhZGRyWzVdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElFRUU4MDIxMV9NTE1FX1VOQVVUSE9SSVpFOgotICAgICAgICAgICAgICAgICAgICAgICAgQV9QUklOVEYoInNldG1sbWUgVU5BVVRIT1JJWkUgJTAyWDolMDJYXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1sbWUuaW1fbWFjYWRkcls0XSwgbWxtZS5pbV9tYWNhZGRyWzVdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElFRUU4MDIxMV9NTE1FX0RFQVVUSDoKLSAgICAgICAgICAgICAgICAgICAgICAgIEFfUFJJTlRGKCJzZXRtbG1lIERFQVVUSCAlMDJYOiUwMlhcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWxtZS5pbV9tYWNhZGRyWzRdLCBtbG1lLmltX21hY2FkZHJbNV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgLy9yZW1vdmVfc3RhKGFyLCBtbG1lLmltX21hY2FkZHIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSUVFRTgwMjExX01MTUVfRElTQVNTT0M6Ci0gICAgICAgICAgICAgICAgICAgICAgICBBX1BSSU5URigic2V0bWxtZSBESVNBU1NPQyAlMDJYOiUwMlhcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWxtZS5pbV9tYWNhZGRyWzRdLCBtbG1lLmltX21hY2FkZHJbNV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgLy9yZW1vdmVfc3RhKGFyLCBtbG1lLmltX21hY2FkZHIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBpb2N0bF9kb25lOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHdtaV9hcF9zZXRfbWxtZShhci0+YXJXbWksIG1sbWUuaW1fb3AsIG1sbWUuaW1fbWFjYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWxtZS5pbV9yZWFzb24pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBJRUVFODAyMTFfSU9DVExfQUREUE1LSUQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFyZXFfYWRkcG1raWQgIHJlcTsKLSAgICAgICAgICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNvcHlfZnJvbV91c2VyKCZyZXEsIHVzZXJkYXRhLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMXJlcV9hZGRwbWtpZCkpKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaW50IHN0YXR1czsKLQotICAgICAgICAgICAgICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfV0xBTl9DT05ORUNULCgiQWRkIHBta2lkIGZvciAlMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeCBlbj0lZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgcmVxLnBpX2Jzc2lkWzBdLCByZXEucGlfYnNzaWRbMV0sIHJlcS5waV9ic3NpZFsyXSwKLSAgICAgICAgICAgICAgICAgICAgcmVxLnBpX2Jzc2lkWzNdLCByZXEucGlfYnNzaWRbNF0sIHJlcS5waV9ic3NpZFs1XSwKLSAgICAgICAgICAgICAgICAgICAgcmVxLnBpX2VuYWJsZSkpOwotCi0gICAgICAgICAgICAgICAgc3RhdHVzID0gd21pX3NldFBta2lkX2NtZChhci0+YXJXbWksIHJlcS5waV9ic3NpZCwgcmVxLnBpX3Bta2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLnBpX2VuYWJsZSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gaW9jdGxfZG9uZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotI2lmZGVmIENPTkZJR19IT1NUX1RDTURfU1VQUE9SVAotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfVENNRF9DT05UX1RYOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFRDTURfQ09OVF9UWCB0eENtZDsKLQotICAgICAgICAgICAgICAgIGlmICgoYXItPnRjbWRQbSA9PSBUQ01EX1BNX1NMRUVQKSB8fAotICAgICAgICAgICAgICAgICAgICAoYXItPnRjbWRQbSA9PSBUQ01EX1BNX0RFRVBTTEVFUCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBBX1BSSU5URigiQ2FuIE5PVCBzZW5kIHR4IHRjbWQgd2hlbiB0YXJnZXQgaXMgYXNsZWVwISBcbiIpOwotICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGlvY3RsX2RvbmU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYoY29weV9mcm9tX3VzZXIoJnR4Q21kLCB1c2VyZGF0YSwgc2l6ZW9mKFRDTURfQ09OVF9UWCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gaW9jdGxfZG9uZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB3bWlfdGVzdF9jbWQoYXItPmFyV21pLCh1OCAqKSZ0eENtZCwgc2l6ZW9mKFRDTURfQ09OVF9UWCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfVENNRF9DT05UX1JYOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFRDTURfQ09OVF9SWCByeENtZDsKLQotICAgICAgICAgICAgICAgIGlmICgoYXItPnRjbWRQbSA9PSBUQ01EX1BNX1NMRUVQKSB8fAotICAgICAgICAgICAgICAgICAgICAoYXItPnRjbWRQbSA9PSBUQ01EX1BNX0RFRVBTTEVFUCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBBX1BSSU5URigiQ2FuIE5PVCBzZW5kIHJ4IHRjbWQgd2hlbiB0YXJnZXQgaXMgYXNsZWVwISBcbiIpOwotICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGlvY3RsX2RvbmU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmKGNvcHlfZnJvbV91c2VyKCZyeENtZCwgdXNlcmRhdGEsIHNpemVvZihUQ01EX0NPTlRfUlgpKSkgewotICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGlvY3RsX2RvbmU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgc3dpdGNoKHJ4Q21kLmFjdCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVENNRF9DT05UX1JYX1BST01JUzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBUQ01EX0NPTlRfUlhfRklMVEVSOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFRDTURfQ09OVF9SWF9TRVRNQUM6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVENNRF9DT05UX1JYX1NFVF9BTlRfU1dJVENIX1RBQkxFOgotICAgICAgICAgICAgICAgICAgICAgICAgIHdtaV90ZXN0X2NtZChhci0+YXJXbWksKHU4ICopJnJ4Q21kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKFRDTURfQ09OVF9SWCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgIHRjbWRSeEZyZXEgPSByeENtZC51LnBhcmEuZnJlcTsKLSAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBUQ01EX0NPTlRfUlhfUkVQT1JUOgotICAgICAgICAgICAgICAgICAgICAgICAgIGFyNjAwMF9pb2N0bF90Y21kX2dldF9yeF9yZXBvcnQoZGV2LCBycSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAodTggKikmcnhDbWQsIHNpemVvZihUQ01EX0NPTlRfUlgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICBBX1BSSU5URigiVW5rbm93biBDb250IFJ4IG1vZGU6ICVkXG4iLHJ4Q21kLmFjdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGlvY3RsX2RvbmU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9UQ01EX1BNOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFRDTURfUE0gcG1DbWQ7Ci0KLSAgICAgICAgICAgICAgICBpZihjb3B5X2Zyb21fdXNlcigmcG1DbWQsIHVzZXJkYXRhLCBzaXplb2YoVENNRF9QTSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gaW9jdGxfZG9uZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYXItPnRjbWRQbSA9IHBtQ21kLm1vZGU7Ci0gICAgICAgICAgICAgICAgd21pX3Rlc3RfY21kKGFyLT5hcldtaSwgKHU4ICopJnBtQ21kLCBzaXplb2YoVENNRF9QTSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogQ09ORklHX0hPU1RfVENNRF9TVVBQT1JUICovCi0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX0JNSV9ET05FOgotICAgICAgICAgICAgaWYoYm1pZW5hYmxlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJ0bmxfbG9jaygpOyAvKiBhcjYwMDBfaW5pdCBleHBlY3RzIHRvIGJlIGNhbGxlZCBob2xkaW5nIHJ0bmwgbG9jayAqLwotICAgICAgICAgICAgICAgIHJldCA9IGFyNjAwMF9pbml0KGRldik7Ci0gICAgICAgICAgICAgICAgcnRubF91bmxvY2soKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXQgPSBCTUlEb25lKGhpZkRldmljZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfQk1JX1JFQURfTUVNT1JZOgotCSAgICAgaWYgKGdldF91c2VyKGFkZHJlc3MsICh1bnNpZ25lZCBpbnQgKil1c2VyZGF0YSkgfHwKLQkJZ2V0X3VzZXIobGVuZ3RoLCAodW5zaWduZWQgaW50ICopdXNlcmRhdGEgKyAxKSkgewotCQlyZXQgPSAtRUZBVUxUOwotCQlicmVhazsKLQkgICAgfQotCi0gICAgICAgICAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX0lORk8sKCJSZWFkIE1lbW9yeSAoYWRkcmVzczogMHgleCwgbGVuZ3RoOiAlZClcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MsIGxlbmd0aCkpOwotICAgICAgICAgICAgaWYgKChidWZmZXIgPSAodW5zaWduZWQgY2hhciAqKUFfTUFMTE9DKGxlbmd0aCkpICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBBX01FTVpFUk8oYnVmZmVyLCBsZW5ndGgpOwotICAgICAgICAgICAgICAgIHJldCA9IEJNSVJlYWRNZW1vcnkoaGlmRGV2aWNlLCBhZGRyZXNzLCBidWZmZXIsIGxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvcHlfdG9fdXNlcihycS0+aWZyX2RhdGEsIGJ1ZmZlciwgbGVuZ3RoKSkgewotICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBBX0ZSRUUoYnVmZmVyKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVOT01FTTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9CTUlfV1JJVEVfTUVNT1JZOgotCSAgICAgaWYgKGdldF91c2VyKGFkZHJlc3MsICh1bnNpZ25lZCBpbnQgKil1c2VyZGF0YSkgfHwKLQkJZ2V0X3VzZXIobGVuZ3RoLCAodW5zaWduZWQgaW50ICopdXNlcmRhdGEgKyAxKSkgewotCQlyZXQgPSAtRUZBVUxUOwotCQlicmVhazsKLQkgICAgfQotICAgICAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19JTkZPLCgiV3JpdGUgTWVtb3J5IChhZGRyZXNzOiAweCV4LCBsZW5ndGg6ICVkKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcywgbGVuZ3RoKSk7Ci0gICAgICAgICAgICBpZiAoKGJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopQV9NQUxMT0MobGVuZ3RoKSkgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIEFfTUVNWkVSTyhidWZmZXIsIGxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZmZlciwgJnVzZXJkYXRhW3NpemVvZihhZGRyZXNzKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihsZW5ndGgpXSwgbGVuZ3RoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gQk1JV3JpdGVNZW1vcnkoaGlmRGV2aWNlLCBhZGRyZXNzLCBidWZmZXIsIGxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIEFfRlJFRShidWZmZXIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRU5PTUVNOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX0JNSV9URVNUOgotICAgICAgICAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX0VSUiwoIk5vIGxvbmdlciBzdXBwb3J0ZWRcbiIpKTsKLSAgICAgICAgICAgcmV0ID0gLUVPUE5PVFNVUFA7Ci0gICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9CTUlfRVhFQ1VURToKLQkgICAgIGlmIChnZXRfdXNlcihhZGRyZXNzLCAodW5zaWduZWQgaW50ICopdXNlcmRhdGEpIHx8Ci0JCWdldF91c2VyKHBhcmFtLCAodW5zaWduZWQgaW50ICopdXNlcmRhdGEgKyAxKSkgewotCQlyZXQgPSAtRUZBVUxUOwotCQlicmVhazsKLQkgICAgfQotICAgICAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19JTkZPLCgiRXhlY3V0ZSAoYWRkcmVzczogMHgleCwgcGFyYW06ICVkKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcywgcGFyYW0pKTsKLSAgICAgICAgICAgIHJldCA9IEJNSUV4ZWN1dGUoaGlmRGV2aWNlLCBhZGRyZXNzLCAodTMyICopJnBhcmFtKTsKLQkgICAgLyogcmV0dXJuIHZhbHVlICovCi0JICAgIGlmIChwdXRfdXNlcihwYXJhbSwgKHVuc2lnbmVkIGludCAqKXJxLT5pZnJfZGF0YSkpIHsKLQkJcmV0ID0gLUVGQVVMVDsKLQkJYnJlYWs7Ci0JICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9CTUlfU0VUX0FQUF9TVEFSVDoKLQkgICAgaWYgKGdldF91c2VyKGFkZHJlc3MsICh1bnNpZ25lZCBpbnQgKil1c2VyZGF0YSkpIHsKLQkJcmV0ID0gLUVGQVVMVDsKLQkJYnJlYWs7Ci0JICAgIH0KLSAgICAgICAgICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfSU5GTywoIlNldCBBcHAgU3RhcnQgKGFkZHJlc3M6IDB4JXgpXG4iLCBhZGRyZXNzKSk7Ci0gICAgICAgICAgICByZXQgPSBCTUlTZXRBcHBTdGFydChoaWZEZXZpY2UsIGFkZHJlc3MpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX0JNSV9SRUFEX1NPQ19SRUdJU1RFUjoKLQkgICAgaWYgKGdldF91c2VyKGFkZHJlc3MsICh1bnNpZ25lZCBpbnQgKil1c2VyZGF0YSkpIHsKLQkJcmV0ID0gLUVGQVVMVDsKLQkJYnJlYWs7Ci0JICAgIH0KLSAgICAgICAgICAgIHJldCA9IEJNSVJlYWRTT0NSZWdpc3RlcihoaWZEZXZpY2UsIGFkZHJlc3MsICh1MzIgKikmcGFyYW0pOwotCSAgICAvKiByZXR1cm4gdmFsdWUgKi8KLQkgICAgaWYgKHB1dF91c2VyKHBhcmFtLCAodW5zaWduZWQgaW50ICopcnEtPmlmcl9kYXRhKSkgewotCQlyZXQgPSAtRUZBVUxUOwotCQlicmVhazsKLQkgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX0JNSV9XUklURV9TT0NfUkVHSVNURVI6Ci0JICAgIGlmIChnZXRfdXNlcihhZGRyZXNzLCAodW5zaWduZWQgaW50ICopdXNlcmRhdGEpIHx8Ci0JCWdldF91c2VyKHBhcmFtLCAodW5zaWduZWQgaW50ICopdXNlcmRhdGEgKyAxKSkgewotCQlyZXQgPSAtRUZBVUxUOwotCQlicmVhazsKLQkgICAgfQotICAgICAgICAgICAgcmV0ID0gQk1JV3JpdGVTT0NSZWdpc3RlcihoaWZEZXZpY2UsIGFkZHJlc3MsIHBhcmFtKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0jaWZkZWYgSFRDX1JBV19JTlRFUkZBQ0UKLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX0hUQ19SQVdfT1BFTjoKLSAgICAgICAgICAgIHJldCA9IDA7Ci0gICAgICAgICAgICBpZiAoIWFyUmF3SWZFbmFibGVkKGFyKSkgewotICAgICAgICAgICAgICAgIC8qIG1ha2Ugc3VyZSBibG9jayBzaXplIGlzIHNldCBpbiBjYXNlIHRoZSB0YXJnZXQgd2FzIHJlc2V0IHNpbmNlIGxhc3QKLSAgICAgICAgICAgICAgICAgICogQk1JIHBoYXNlIChpLmUuIGZsYXNodXAgZG93bmxvYWRzKSAqLwotICAgICAgICAgICAgICAgIHJldCA9IGFyNjAwMF9zZXRfaHRjX3BhcmFtcyhhci0+YXJIaWZEZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyLT5hclRhcmdldFR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICAvKiB1c2UgZGVmYXVsdCB5aWVsZCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgLyogdXNlIGRlZmF1bHQgbnVtYmVyIG9mIEhUQyBjdHJsIGJ1ZmZlcnMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICBpZiAocmV0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvKiBUZXJtaW5hdGUgdGhlIEJNSSBwaGFzZSAqLwotICAgICAgICAgICAgICAgIHJldCA9IEJNSURvbmUoaGlmRGV2aWNlKTsKLSAgICAgICAgICAgICAgICBpZiAocmV0ID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gYXI2MDAwX2h0Y19yYXdfb3Blbihhcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX0hUQ19SQVdfQ0xPU0U6Ci0gICAgICAgICAgICBpZiAoYXJSYXdJZkVuYWJsZWQoYXIpKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gYXI2MDAwX2h0Y19yYXdfY2xvc2UoYXIpOwotICAgICAgICAgICAgICAgIGFyUmF3SWZFbmFibGVkKGFyKSA9IGZhbHNlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXQgPSBBX0VSUk9SOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX0hUQ19SQVdfUkVBRDoKLSAgICAgICAgICAgIGlmIChhclJhd0lmRW5hYmxlZChhcikpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3RyZWFtSUQ7Ci0JCWlmIChnZXRfdXNlcihzdHJlYW1JRCwgKHVuc2lnbmVkIGludCAqKXVzZXJkYXRhKSB8fAotCQkgICAgZ2V0X3VzZXIobGVuZ3RoLCAodW5zaWduZWQgaW50ICopdXNlcmRhdGEgKyAxKSkgewotCQkgICAgcmV0ID0gLUVGQVVMVDsKLQkJICAgIGJyZWFrOwotCQl9Ci0gICAgICAgICAgICAgICAgYnVmZmVyID0gKHVuc2lnbmVkIGNoYXIqKXJxLT5pZnJfZGF0YSArIHNpemVvZihsZW5ndGgpOwotICAgICAgICAgICAgICAgIHJldCA9IGFyNjAwMF9odGNfcmF3X3JlYWQoYXIsIChIVENfUkFXX1NUUkVBTV9JRClzdHJlYW1JRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKilidWZmZXIsIGxlbmd0aCk7Ci0JCWlmIChwdXRfdXNlcihyZXQsICh1bnNpZ25lZCBpbnQgKilycS0+aWZyX2RhdGEpKSB7Ci0JCSAgICByZXQgPSAtRUZBVUxUOwotCQkgICAgYnJlYWs7Ci0JCX0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gQV9FUlJPUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9IVENfUkFXX1dSSVRFOgotICAgICAgICAgICAgaWYgKGFyUmF3SWZFbmFibGVkKGFyKSkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdHJlYW1JRDsKLQkJaWYgKGdldF91c2VyKHN0cmVhbUlELCAodW5zaWduZWQgaW50ICopdXNlcmRhdGEpIHx8Ci0JCSAgICBnZXRfdXNlcihsZW5ndGgsICh1bnNpZ25lZCBpbnQgKil1c2VyZGF0YSArIDEpKSB7Ci0JCSAgICByZXQgPSAtRUZBVUxUOwotCQkgICAgYnJlYWs7Ci0JCX0KLSAgICAgICAgICAgICAgICBidWZmZXIgPSAodW5zaWduZWQgY2hhciopdXNlcmRhdGEgKyBzaXplb2Yoc3RyZWFtSUQpICsgc2l6ZW9mKGxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgcmV0ID0gYXI2MDAwX2h0Y19yYXdfd3JpdGUoYXIsIChIVENfUkFXX1NUUkVBTV9JRClzdHJlYW1JRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciopYnVmZmVyLCBsZW5ndGgpOwotCQlpZiAocHV0X3VzZXIocmV0LCAodW5zaWduZWQgaW50ICopcnEtPmlmcl9kYXRhKSkgewotCQkgICAgcmV0ID0gLUVGQVVMVDsKLQkJICAgIGJyZWFrOwotCQl9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldCA9IEFfRVJST1I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBIVENfUkFXX0lOVEVSRkFDRSAqLwotCi0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9CTUlfTFpfU1RSRUFNX1NUQVJUOgotCSAgICBpZiAoZ2V0X3VzZXIoYWRkcmVzcywgKHVuc2lnbmVkIGludCAqKXVzZXJkYXRhKSkgewotCQlyZXQgPSAtRUZBVUxUOwotCQlicmVhazsKLQkgICAgfQotICAgICAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19JTkZPLCgiU3RhcnQgQ29tcHJlc3NlZCBTdHJlYW0gKGFkZHJlc3M6IDB4JXgpXG4iLCBhZGRyZXNzKSk7Ci0gICAgICAgICAgICByZXQgPSBCTUlMWlN0cmVhbVN0YXJ0KGhpZkRldmljZSwgYWRkcmVzcyk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfQk1JX0xaX0RBVEE6Ci0JICAgIGlmIChnZXRfdXNlcihsZW5ndGgsICh1bnNpZ25lZCBpbnQgKil1c2VyZGF0YSkpIHsKLQkJcmV0ID0gLUVGQVVMVDsKLQkJYnJlYWs7Ci0JICAgIH0KLSAgICAgICAgICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfSU5GTywoIlNlbmQgQ29tcHJlc3NlZCBEYXRhIChsZW5ndGg6ICVkKVxuIiwgbGVuZ3RoKSk7Ci0gICAgICAgICAgICBpZiAoKGJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopQV9NQUxMT0MobGVuZ3RoKSkgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIEFfTUVNWkVSTyhidWZmZXIsIGxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZmZlciwgJnVzZXJkYXRhW3NpemVvZihsZW5ndGgpXSwgbGVuZ3RoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gQk1JTFpEYXRhKGhpZkRldmljZSwgYnVmZmVyLCBsZW5ndGgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBBX0ZSRUUoYnVmZmVyKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVOT01FTTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0jaWYgZGVmaW5lZChDT05GSUdfVEFSR0VUX1BST0ZJTEVfU1VQUE9SVCkKLSAgICAgICAgLyoKLSAgICAgICAgICogT3B0aW9uYWwgc3VwcG9ydCBmb3IgVGFyZ2V0LXNpZGUgcHJvZmlsaW5nLgotICAgICAgICAgKiBOb3QgbmVlZGVkIGluIHByb2R1Y3Rpb24uCi0gICAgICAgICAqLwotCi0gICAgICAgIC8qIENvbmZpZ3VyZSBUYXJnZXQtc2lkZSBwcm9maWxpbmcgKi8KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX1BST0ZfQ0ZHOgotICAgICAgICB7Ci0gICAgICAgICAgICB1MzIgcGVyaW9kOwotICAgICAgICAgICAgdTMyIG5iaW5zOwotCSAgICBpZiAoZ2V0X3VzZXIocGVyaW9kLCAodW5zaWduZWQgaW50ICopdXNlcmRhdGEpIHx8Ci0JCWdldF91c2VyKG5iaW5zLCAodW5zaWduZWQgaW50ICopdXNlcmRhdGEgKyAxKSkgewotCQlyZXQgPSAtRUZBVUxUOwotCQlicmVhazsKLQkgICAgfQotCi0gICAgICAgICAgICBpZiAod21pX3Byb2ZfY2ZnX2NtZChhci0+YXJXbWksIHBlcmlvZCwgbmJpbnMpICE9IDApIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIFN0YXJ0IGEgcHJvZmlsaW5nIGJ1Y2tldC9iaW4gYXQgdGhlIHNwZWNpZmllZCBhZGRyZXNzICovCi0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9QUk9GX0FERFJfU0VUOgotICAgICAgICB7Ci0gICAgICAgICAgICB1MzIgYWRkcjsKLQkgICAgaWYgKGdldF91c2VyKGFkZHIsICh1bnNpZ25lZCBpbnQgKil1c2VyZGF0YSkpIHsKLQkJcmV0ID0gLUVGQVVMVDsKLQkJYnJlYWs7Ci0JICAgIH0KLQotICAgICAgICAgICAgaWYgKHdtaV9wcm9mX2FkZHJfc2V0X2NtZChhci0+YXJXbWksIGFkZHIpICE9IDApIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIFNUQVJUIFRhcmdldC1zaWRlIHByb2ZpbGluZyAqLwotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfUFJPRl9TVEFSVDoKLSAgICAgICAgICAgIHdtaV9wcm9mX3N0YXJ0X2NtZChhci0+YXJXbWkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLyogU1RPUCBUYXJnZXQtc2lkZSBwcm9maWxpbmcgKi8KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX1BST0ZfU1RPUDoKLSAgICAgICAgICAgIHdtaV9wcm9mX3N0b3BfY21kKGFyLT5hcldtaSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX1BST0ZfQ09VTlRfR0VUOgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoYXItPmJJc0Rlc3Ryb3lQcm9ncmVzcykgewotICAgICAgICAgICAgICAgIHJldCA9IC1FQlVTWTsKLSAgICAgICAgICAgICAgICBnb3RvIGlvY3RsX2RvbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgICAgIGdvdG8gaW9jdGxfZG9uZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChkb3duX2ludGVycnVwdGlibGUoJmFyLT5hclNlbSkpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRVJFU1RBUlRTWVM7Ci0gICAgICAgICAgICAgICAgZ290byBpb2N0bF9kb25lOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGFyLT5iSXNEZXN0cm95UHJvZ3Jlc3MpIHsKLSAgICAgICAgICAgICAgICB1cCgmYXItPmFyU2VtKTsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUJVU1k7Ci0gICAgICAgICAgICAgICAgZ290byBpb2N0bF9kb25lOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwcm9mX2NvdW50X2F2YWlsYWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgcmV0ID0gcHJvZl9jb3VudF9nZXQoZGV2KTsKLSAgICAgICAgICAgIGlmIChyZXQgIT0gMCkgewotICAgICAgICAgICAgICAgIHVwKCZhci0+YXJTZW0pOwotICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICAgICAgZ290byBpb2N0bF9kb25lOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvKiBXYWl0IGZvciBUYXJnZXQgdG8gcmVzcG9uZC4gKi8KLSAgICAgICAgICAgIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShhckV2ZW50LCBwcm9mX2NvdW50X2F2YWlsYWJsZSk7Ci0gICAgICAgICAgICBpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlOVFI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIodXNlcmRhdGEsICZwcm9mX2NvdW50X3Jlc3VsdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YocHJvZl9jb3VudF9yZXN1bHRzKSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVwKCZhci0+YXJTZW0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDT05GSUdfVEFSR0VUX1BST0ZJTEVfU1VQUE9SVCAqLwotCi0gICAgICAgIGNhc2UgQVI2MDAwX0lPQ1RMX1dNSV9HRVRSRVY6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIocnEtPmlmcl9kYXRhLCAmYXItPmFyVmVyc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGFyLT5hclZlcnNpb24pKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBUjYwMDBfSU9DVExfV01JX1NFVFBXUjoKLSAgICAgICAgewotICAgICAgICAgICAgV01JX1BPV0VSX01PREVfQ01EIHB3ck1vZGVDbWQ7Ci0KLSAgICAgICAgICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNvcHlfZnJvbV91c2VyKCZwd3JNb2RlQ21kLCB1c2VyZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHB3ck1vZGVDbWQpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAod21pX3Bvd2VybW9kZV9jbWQoYXItPmFyV21pLCBwd3JNb2RlQ21kLnBvd2VyTW9kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBUjYwMDBfSU9DVExfV01JX1NFVF9JQlNTX1BNX0NBUFM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFdNSV9JQlNTX1BNX0NBUFNfQ01EIGlic3NQbUNhcHM7Ci0KLSAgICAgICAgICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNvcHlfZnJvbV91c2VyKCZpYnNzUG1DYXBzLCB1c2VyZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGlic3NQbUNhcHMpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAod21pX2lic3NwbWNhcHNfY21kKGFyLT5hcldtaSwgaWJzc1BtQ2Fwcy5wb3dlcl9zYXZpbmcsIGlic3NQbUNhcHMudHRsLAotICAgICAgICAgICAgICAgICAgICBpYnNzUG1DYXBzLmF0aW1fd2luZG93cywgaWJzc1BtQ2Fwcy50aW1lb3V0X3ZhbHVlKSAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgQVI2MDAwX1NQSU5fTE9DSygmYXItPmFyTG9jaywgMCk7Ci0gICAgICAgICAgICAgICAgYXItPmFySWJzc1BzRW5hYmxlID0gaWJzc1BtQ2Fwcy5wb3dlcl9zYXZpbmc7Ci0gICAgICAgICAgICAgICAgQVI2MDAwX1NQSU5fVU5MT0NLKCZhci0+YXJMb2NrLCAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9XTUlfU0VUX0FQX1BTOgotICAgICAgICB7Ci0gICAgICAgICAgICBXTUlfQVBfUFNfQ01EIGFwUHNDbWQ7Ci0KLSAgICAgICAgICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNvcHlfZnJvbV91c2VyKCZhcFBzQ21kLCB1c2VyZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGFwUHNDbWQpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAod21pX2FwcHNfY21kKGFyLT5hcldtaSwgYXBQc0NtZC5wc1R5cGUsIGFwUHNDbWQuaWRsZV90aW1lLAotICAgICAgICAgICAgICAgICAgICBhcFBzQ21kLnBzX3BlcmlvZCwgYXBQc0NtZC5zbGVlcF9wZXJpb2QpICE9IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQVI2MDAwX0lPQ1RMX1dNSV9TRVRfUE1QQVJBTVM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFdNSV9QT1dFUl9QQVJBTVNfQ01EIHBtUGFyYW1zOwotCi0gICAgICAgICAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgfSBlbHNlIGlmIChjb3B5X2Zyb21fdXNlcigmcG1QYXJhbXMsIHVzZXJkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YocG1QYXJhbXMpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAod21pX3BtcGFyYW1zX2NtZChhci0+YXJXbWksIHBtUGFyYW1zLmlkbGVfcGVyaW9kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBtUGFyYW1zLnBzcG9sbF9udW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG1QYXJhbXMuZHRpbV9wb2xpY3ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG1QYXJhbXMudHhfd2FrZXVwX3BvbGljeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbVBhcmFtcy5udW1fdHhfdG9fd2FrZXVwLAotI2lmIFdMQU5fQ09ORklHX0lHTk9SRV9QT1dFUl9TQVZFX0ZBSUxfRVZFTlRfRFVSSU5HX1NDQU4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJR05PUkVfUE9XRVJfU0FWRV9GQUlMX0VWRU5UX0RVUklOR19TQ0FOIAotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRU5EX1BPV0VSX1NBVkVfRkFJTF9FVkVOVF9BTFdBWVMKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgIT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBUjYwMDBfSU9DVExfV01JX1NFVFNDQU46Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNvcHlfZnJvbV91c2VyKCZhci0+c2NQYXJhbXMsIHVzZXJkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoYXItPnNjUGFyYW1zKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKENBTl9TQ0FOX0lOX0NPTk5FQ1QoYXItPnNjUGFyYW1zLnNjYW5DdHJsRmxhZ3MpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFyLT5hclNraXBTY2FuID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgYXItPmFyU2tpcFNjYW4gPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh3bWlfc2NhbnBhcmFtc19jbWQoYXItPmFyV21pLCBhci0+c2NQYXJhbXMuZmdfc3RhcnRfcGVyaW9kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXItPnNjUGFyYW1zLmZnX2VuZF9wZXJpb2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhci0+c2NQYXJhbXMuYmdfcGVyaW9kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXItPnNjUGFyYW1zLm1pbmFjdF9jaGR3ZWxsX3RpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhci0+c2NQYXJhbXMubWF4YWN0X2NoZHdlbGxfdGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyLT5zY1BhcmFtcy5wYXNfY2hkd2VsbF90aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXItPnNjUGFyYW1zLnNob3J0U2NhblJhdGlvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXItPnNjUGFyYW1zLnNjYW5DdHJsRmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhci0+c2NQYXJhbXMubWF4X2Rmc2NoX2FjdF90aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXItPnNjUGFyYW1zLm1heGFjdF9zY2FuX3Blcl9zc2lkKSAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFSNjAwMF9JT0NUTF9XTUlfU0VUTElTVEVOSU5UOgotICAgICAgICB7Ci0gICAgICAgICAgICBXTUlfTElTVEVOX0lOVF9DTUQgbGlzdGVuQ21kOwotCi0gICAgICAgICAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgfSBlbHNlIGlmIChjb3B5X2Zyb21fdXNlcigmbGlzdGVuQ21kLCB1c2VyZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGxpc3RlbkNtZCkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAod21pX2xpc3RlbmludGVydmFsX2NtZChhci0+YXJXbWksIGxpc3RlbkNtZC5saXN0ZW5JbnRlcnZhbCwgbGlzdGVuQ21kLm51bUJlYWNvbnMpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBUjYwMDBfU1BJTl9MT0NLKCZhci0+YXJMb2NrLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyLT5hckxpc3RlbkludGVydmFsVCA9IGxpc3RlbkNtZC5saXN0ZW5JbnRlcnZhbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyLT5hckxpc3RlbkludGVydmFsQiA9IGxpc3RlbkNtZC5udW1CZWFjb25zOwotICAgICAgICAgICAgICAgICAgICAgICAgQVI2MDAwX1NQSU5fVU5MT0NLKCZhci0+YXJMb2NrLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBUjYwMDBfSU9DVExfV01JX1NFVF9CTUlTU19USU1FOgotICAgICAgICB7Ci0gICAgICAgICAgICBXTUlfQk1JU1NfVElNRV9DTUQgYm1pc3NDbWQ7Ci0KLSAgICAgICAgICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNvcHlfZnJvbV91c2VyKCZibWlzc0NtZCwgdXNlcmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihibWlzc0NtZCkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh3bWlfYm1pc3N0aW1lX2NtZChhci0+YXJXbWksIGJtaXNzQ21kLmJtaXNzVGltZSwgYm1pc3NDbWQubnVtQmVhY29ucykgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQVI2MDAwX0lPQ1RMX1dNSV9TRVRCU1NGSUxURVI6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFdNSV9CU1NfRklMVEVSX0NNRCBmaWx0OwotCi0gICAgICAgICAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgfSBlbHNlIGlmIChjb3B5X2Zyb21fdXNlcigmZmlsdCwgdXNlcmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihmaWx0KSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHdtaV9ic3NmaWx0ZXJfY21kKGFyLT5hcldtaSwgZmlsdC5ic3NGaWx0ZXIsIGZpbHQuaWVNYXNrKQotICAgICAgICAgICAgICAgICAgICAgICAgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGFyLT5hclVzZXJCc3NGaWx0ZXIgPSBmaWx0LmJzc0ZpbHRlcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgQVI2MDAwX0lPQ1RMX1dNSV9TRVRfU05SVEhSRVNIT0xEOgotICAgICAgICB7Ci0gICAgICAgICAgICByZXQgPSBhcjYwMDBfaW9jdGxfc2V0X3Nucl90aHJlc2hvbGQoZGV2LCBycSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfV01JX1NFVF9SU1NJVEhSRVNIT0xEOgotICAgICAgICB7Ci0gICAgICAgICAgICByZXQgPSBhcjYwMDBfaW9jdGxfc2V0X3Jzc2lfdGhyZXNob2xkKGRldiwgcnEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX1dNSV9DTFJfUlNTSVNOUjoKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldCA9IHdtaV9jbHJfcnNzaV9zbnIoYXItPmFyV21pKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9XTUlfU0VUX0xRVEhSRVNIT0xEOgotICAgICAgICB7Ci0gICAgICAgICAgICByZXQgPSBhcjYwMDBfaW9jdGxfc2V0X2xxX3RocmVzaG9sZChkZXYsIHJxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9XTUlfU0VUX0xQUkVBTUJMRToKLSAgICAgICAgewotICAgICAgICAgICAgV01JX1NFVF9MUFJFQU1CTEVfQ01EIHNldExwcmVhbWJsZUNtZDsKLQotICAgICAgICAgICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY29weV9mcm9tX3VzZXIoJnNldExwcmVhbWJsZUNtZCwgdXNlcmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzZXRMcHJlYW1ibGVDbWQpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAod21pX3NldF9scHJlYW1ibGVfY21kKGFyLT5hcldtaSwgc2V0THByZWFtYmxlQ21kLnN0YXR1cywKLSNpZiBXTEFOX0NPTkZJR19ET05PVF9JR05PUkVfQkFSS0VSX0lOX0VSUCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFdNSV9ET05PVF9JR05PUkVfQkFSS0VSX0lOX0VSUAotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFdNSV9JR05PUkVfQkFSS0VSX0lOX0VSUAotI2VuZGlmCi0gICAgICAgICAgICAgICAgKSAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9XTUlfU0VUX1JUUzoKLSAgICAgICAgewotICAgICAgICAgICAgV01JX1NFVF9SVFNfQ01EIHJ0c0NtZDsKLSAgICAgICAgICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNvcHlfZnJvbV91c2VyKCZydHNDbWQsIHVzZXJkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YocnRzQ21kKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYXItPmFyUlRTID0gcnRzQ21kLnRocmVzaG9sZDsKLSAgICAgICAgICAgICAgICBpZiAod21pX3NldF9ydHNfY21kKGFyLT5hcldtaSwgcnRzQ21kLnRocmVzaG9sZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfV01JX1NFVF9XTU06Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldCA9IGFyNjAwMF9pb2N0bF9zZXRfd21tKGRldiwgcnEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfV01JX1NFVF9RT1NfU1VQUDoKLSAgICAgICAgewotICAgICAgICAgICAgcmV0ID0gYXI2MDAwX2lvY3RsX3NldF9xb3Nfc3VwcChkZXYsIHJxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9XTUlfU0VUX1RYT1A6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldCA9IGFyNjAwMF9pb2N0bF9zZXRfdHhvcChkZXYsIHJxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9XTUlfR0VUX1JEOgotICAgICAgICB7Ci0gICAgICAgICAgICByZXQgPSBhcjYwMDBfaW9jdGxfZ2V0X3JkKGRldiwgcnEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBUjYwMDBfSU9DVExfV01JX1NFVF9DSEFOTkVMUEFSQU1TOgotICAgICAgICB7Ci0gICAgICAgICAgICByZXQgPSBhcjYwMDBfaW9jdGxfc2V0X2NoYW5uZWxQYXJhbXMoZGV2LCBycSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFSNjAwMF9JT0NUTF9XTUlfU0VUX1BST0JFRFNTSUQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldCA9IGFyNjAwMF9pb2N0bF9zZXRfcHJvYmVkU3NpZChkZXYsIHJxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQVI2MDAwX0lPQ1RMX1dNSV9TRVRfQkFEQVA6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldCA9IGFyNjAwMF9pb2N0bF9zZXRfYmFkQXAoZGV2LCBycSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFSNjAwMF9JT0NUTF9XTUlfQ1JFQVRFX1FPUzoKLSAgICAgICAgewotICAgICAgICAgICAgcmV0ID0gYXI2MDAwX2lvY3RsX2NyZWF0ZV9xb3MoZGV2LCBycSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFSNjAwMF9JT0NUTF9XTUlfREVMRVRFX1FPUzoKLSAgICAgICAgewotICAgICAgICAgICAgcmV0ID0gYXI2MDAwX2lvY3RsX2RlbGV0ZV9xb3MoZGV2LCBycSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFSNjAwMF9JT0NUTF9XTUlfR0VUX1FPU19RVUVVRToKLSAgICAgICAgewotICAgICAgICAgICAgcmV0ID0gYXI2MDAwX2lvY3RsX2dldF9xb3NfcXVldWUoZGV2LCBycSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFSNjAwMF9JT0NUTF9XTUlfR0VUX1RBUkdFVF9TVEFUUzoKLSAgICAgICAgewotICAgICAgICAgICAgcmV0ID0gYXI2MDAwX2lvY3RsX2dldF90YXJnZXRfc3RhdHMoZGV2LCBycSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFSNjAwMF9JT0NUTF9XTUlfU0VUX0VSUk9SX1JFUE9SVF9CSVRNQVNLOgotICAgICAgICB7Ci0gICAgICAgICAgICByZXQgPSBhcjYwMDBfaW9jdGxfc2V0X2Vycm9yX3JlcG9ydF9iaXRtYXNrKGRldiwgcnEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBUjYwMDBfSU9DVExfV01JX1NFVF9BU1NPQ19JTkZPOgotICAgICAgICB7Ci0gICAgICAgICAgICBXTUlfU0VUX0FTU09DX0lORk9fQ01EIGNtZDsKLSAgICAgICAgICAgIHU4IGFzc29jSW5mb1tXTUlfTUFYX0FTU09DX0lORk9fTEVOXTsKLQotICAgICAgICAgICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLQkJYnJlYWs7Ci0JICAgIH0KLQotCSAgICBpZiAoZ2V0X3VzZXIoY21kLmllVHlwZSwgdXNlcmRhdGEpKSB7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JCWJyZWFrOwotCSAgICB9Ci0JICAgIGlmIChjbWQuaWVUeXBlID49IFdNSV9NQVhfQVNTT0NfSU5GT19UWVBFKSB7Ci0JCXJldCA9IC1FSU87Ci0JCWJyZWFrOwotCSAgICB9Ci0KLQkgICAgaWYgKGdldF91c2VyKGNtZC5idWZmZXJTaXplLCB1c2VyZGF0YSArIDEpIHx8Ci0JCShjbWQuYnVmZmVyU2l6ZSA+IFdNSV9NQVhfQVNTT0NfSU5GT19MRU4pIHx8Ci0JCWNvcHlfZnJvbV91c2VyKGFzc29jSW5mbywgdXNlcmRhdGEgKyAyLCBjbWQuYnVmZmVyU2l6ZSkpIHsKLQkJcmV0ID0gLUVGQVVMVDsKLQkJYnJlYWs7Ci0JICAgIH0KLQkgICAgaWYgKHdtaV9hc3NvY2luZm9fY21kKGFyLT5hcldtaSwgY21kLmllVHlwZSwKLQkJCQkgIGNtZC5idWZmZXJTaXplLCBhc3NvY0luZm8pICE9IDApIHsKLQkJcmV0ID0gLUVJTzsKLQkJYnJlYWs7Ci0JICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQVI2MDAwX0lPQ1RMX1dNSV9TRVRfQUNDRVNTX1BBUkFNUzoKLSAgICAgICAgewotICAgICAgICAgICAgcmV0ID0gYXI2MDAwX2lvY3RsX3NldF9hY2Nlc3NfcGFyYW1zKGRldiwgcnEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBUjYwMDBfSU9DVExfV01JX1NFVF9ESVNDX1RJTUVPVVQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldCA9IGFyNjAwMF9pb2N0bF9zZXRfZGlzY29ubmVjdF90aW1lb3V0KGRldiwgcnEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX0ZPUkNFX1RBUkdFVF9SRVNFVDoKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGFyLT5hckh0Y1RhcmdldCkKLSAgICAgICAgICAgIHsKLS8vICAgICAgICAgICAgICAgIEhUQ0ZvcmNlUmVzZXQoaHRjVGFyZ2V0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX1dBUk4sKCJhcjYwMDBfaW9jdGwgY2Fubm90IGF0dGVtcHQgcmVzZXQuXG4iKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfVEFSR0VUX0lORk86Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9DSEVDS19UQVJHRVRfUkVBRFk6IC8qIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8qIElmIHdlIG1hZGUgaXQgdG8gaGVyZSwgdGhlbiB0aGUgVGFyZ2V0IGV4aXN0cyBhbmQgaXMgcmVhZHkuICovCi0KLSAgICAgICAgICAgIGlmIChjbWQgPT0gQVI2MDAwX1hJT0NUTF9UQVJHRVRfSU5GTykgewotICAgICAgICAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIoKHUzMiAqKXJxLT5pZnJfZGF0YSwgJmFyLT5hclZlcnNpb24udGFyZ2V0X3ZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihhci0+YXJWZXJzaW9uLnRhcmdldF92ZXIpKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIoKCh1MzIgKilycS0+aWZyX2RhdGEpKzEsICZhci0+YXJUYXJnZXRUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGFyLT5hclRhcmdldFR5cGUpKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX1dNSV9TRVRfSEJfQ0hBTExFTkdFX1JFU1BfUEFSQU1TOgotICAgICAgICB7Ci0gICAgICAgICAgICBXTUlfU0VUX0hCX0NIQUxMRU5HRV9SRVNQX1BBUkFNU19DTUQgaGJwYXJhbTsKLQotICAgICAgICAgICAgaWYgKGNvcHlfZnJvbV91c2VyKCZoYnBhcmFtLCB1c2VyZGF0YSwgc2l6ZW9mKGhicGFyYW0pKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBUjYwMDBfU1BJTl9MT0NLKCZhci0+YXJMb2NrLCAwKTsKLSAgICAgICAgICAgICAgICAvKiBTdGFydCBhIGN5Y2xpYyB0aW1lciB3aXRoIHRoZSBwYXJhbWV0ZXJzIHByb3ZpZGVkLiAqLwotICAgICAgICAgICAgICAgIGlmIChoYnBhcmFtLmZyZXF1ZW5jeSkgewotICAgICAgICAgICAgICAgICAgICBhci0+YXJIQkNoYWxsZW5nZVJlc3AuZnJlcXVlbmN5ID0gaGJwYXJhbS5mcmVxdWVuY3k7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChoYnBhcmFtLnRocmVzaG9sZCkgewotICAgICAgICAgICAgICAgICAgICBhci0+YXJIQkNoYWxsZW5nZVJlc3AubWlzc1RocmVzID0gaGJwYXJhbS50aHJlc2hvbGQ7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLyogRGVsZXRlIHRoZSBwZW5kaW5nIHRpbWVyIGFuZCBzdGFydCBhIG5ldyBvbmUgKi8KLSAgICAgICAgICAgICAgICBpZiAodGltZXJfcGVuZGluZygmYXItPmFySEJDaGFsbGVuZ2VSZXNwLnRpbWVyKSkgewotICAgICAgICAgICAgICAgICAgICBBX1VOVElNRU9VVCgmYXItPmFySEJDaGFsbGVuZ2VSZXNwLnRpbWVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgQV9USU1FT1VUX01TKCZhci0+YXJIQkNoYWxsZW5nZVJlc3AudGltZXIsIGFyLT5hckhCQ2hhbGxlbmdlUmVzcC5mcmVxdWVuY3kgKiAxMDAwLCAwKTsKLSAgICAgICAgICAgICAgICBBUjYwMDBfU1BJTl9VTkxPQ0soJmFyLT5hckxvY2ssIDApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX1dNSV9HRVRfSEJfQ0hBTExFTkdFX1JFU1A6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHUzMiBjb29raWU7Ci0KLSAgICAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmY29va2llLCB1c2VyZGF0YSwgc2l6ZW9mKGNvb2tpZSkpKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICBnb3RvIGlvY3RsX2RvbmU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qIFNlbmQgdGhlIGNoYWxsZW5nZSBvbiB0aGUgY29udHJvbCBjaGFubmVsICovCi0gICAgICAgICAgICBpZiAod21pX2dldF9jaGFsbGVuZ2VfcmVzcF9jbWQoYXItPmFyV21pLCBjb29raWUsIEFQUF9IQl9DSEFMTEVOR0UpICE9IDApIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgICAgIGdvdG8gaW9jdGxfZG9uZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0jaWZkZWYgVVNFUl9LRVlTCi0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9VU0VSX1NFVEtFWVM6Ci0gICAgICAgIHsKLQotICAgICAgICAgICAgYXItPnVzZXJfc2F2ZWRrZXlzX3N0YXQgPSBVU0VSX1NBVkVES0VZU19TVEFUX1JVTjsKLQotICAgICAgICAgICAgaWYgKGNvcHlfZnJvbV91c2VyKCZhci0+dXNlcl9rZXlfY3RybCwgdXNlcmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGFyLT51c2VyX2tleV9jdHJsKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICBnb3RvIGlvY3RsX2RvbmU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFfUFJJTlRGKCJhcjYwMDAgVVNFUiBzZXQga2V5ICV4XG4iLCBhci0+dXNlcl9rZXlfY3RybCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotI2VuZGlmIC8qIFVTRVJfS0VZUyAqLwotCi0jaWZkZWYgQ09ORklHX0hPU1RfR1BJT19TVVBQT1JUCi0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9HUElPX09VVFBVVF9TRVQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cnVjdCBhcjYwMDBfZ3Bpb19vdXRwdXRfc2V0X2NtZF9zIGdwaW9fb3V0cHV0X3NldF9jbWQ7Ci0KLSAgICAgICAgICAgIGlmIChhci0+YklzRGVzdHJveVByb2dyZXNzKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVCVVNZOwotICAgICAgICAgICAgICAgIGdvdG8gaW9jdGxfZG9uZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICAgICAgZ290byBpb2N0bF9kb25lOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGRvd25faW50ZXJydXB0aWJsZSgmYXItPmFyU2VtKSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FUkVTVEFSVFNZUzsKLSAgICAgICAgICAgICAgICBnb3RvIGlvY3RsX2RvbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYXItPmJJc0Rlc3Ryb3lQcm9ncmVzcykgewotICAgICAgICAgICAgICAgIHVwKCZhci0+YXJTZW0pOwotICAgICAgICAgICAgICAgIHJldCA9IC1FQlVTWTsKLSAgICAgICAgICAgICAgICBnb3RvIGlvY3RsX2RvbmU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmZ3Bpb19vdXRwdXRfc2V0X2NtZCwgdXNlcmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihncGlvX291dHB1dF9zZXRfY21kKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gYXI2MDAwX2dwaW9fb3V0cHV0X3NldChkZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncGlvX291dHB1dF9zZXRfY21kLnNldF9tYXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Bpb19vdXRwdXRfc2V0X2NtZC5jbGVhcl9tYXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Bpb19vdXRwdXRfc2V0X2NtZC5lbmFibGVfbWFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwaW9fb3V0cHV0X3NldF9jbWQuZGlzYWJsZV9tYXNrKTsKLSAgICAgICAgICAgICAgICBpZiAocmV0ICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB1cCgmYXItPmFyU2VtKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9HUElPX0lOUFVUX0dFVDoKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGFyLT5iSXNEZXN0cm95UHJvZ3Jlc3MpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUJVU1k7Ci0gICAgICAgICAgICAgICAgZ290byBpb2N0bF9kb25lOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgICAgICBnb3RvIGlvY3RsX2RvbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZhci0+YXJTZW0pKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVSRVNUQVJUU1lTOwotICAgICAgICAgICAgICAgIGdvdG8gaW9jdGxfZG9uZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChhci0+YklzRGVzdHJveVByb2dyZXNzKSB7Ci0gICAgICAgICAgICAgICAgdXAoJmFyLT5hclNlbSk7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVCVVNZOwotICAgICAgICAgICAgICAgIGdvdG8gaW9jdGxfZG9uZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0ID0gYXI2MDAwX2dwaW9faW5wdXRfZ2V0KGRldik7Ci0gICAgICAgICAgICBpZiAocmV0ICE9IDApIHsKLSAgICAgICAgICAgICAgICB1cCgmYXItPmFyU2VtKTsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgICAgIGdvdG8gaW9jdGxfZG9uZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyogV2FpdCBmb3IgVGFyZ2V0IHRvIHJlc3BvbmQuICovCi0gICAgICAgICAgICB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoYXJFdmVudCwgZ3Bpb19kYXRhX2F2YWlsYWJsZSk7Ci0gICAgICAgICAgICBpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlOVFI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFfQVNTRVJUKGdwaW9fcmVnX3Jlc3VsdHMuZ3Bpb3JlZ19pZCA9PSBHUElPX0lEX05PTkUpOwotCi0gICAgICAgICAgICAgICAgaWYgKGNvcHlfdG9fdXNlcih1c2VyZGF0YSwgJmdwaW9fcmVnX3Jlc3VsdHMudmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZ3Bpb19yZWdfcmVzdWx0cy52YWx1ZSkpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB1cCgmYXItPmFyU2VtKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9HUElPX1JFR0lTVEVSX1NFVDoKLSAgICAgICAgewotICAgICAgICAgICAgc3RydWN0IGFyNjAwMF9ncGlvX3JlZ2lzdGVyX2NtZF9zIGdwaW9fcmVnaXN0ZXJfY21kOwotCi0gICAgICAgICAgICBpZiAoYXItPmJJc0Rlc3Ryb3lQcm9ncmVzcykgewotICAgICAgICAgICAgICAgIHJldCA9IC1FQlVTWTsKLSAgICAgICAgICAgICAgICBnb3RvIGlvY3RsX2RvbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgICAgIGdvdG8gaW9jdGxfZG9uZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChkb3duX2ludGVycnVwdGlibGUoJmFyLT5hclNlbSkpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRVJFU1RBUlRTWVM7Ci0gICAgICAgICAgICAgICAgZ290byBpb2N0bF9kb25lOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGFyLT5iSXNEZXN0cm95UHJvZ3Jlc3MpIHsKLSAgICAgICAgICAgICAgICB1cCgmYXItPmFyU2VtKTsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUJVU1k7Ci0gICAgICAgICAgICAgICAgZ290byBpb2N0bF9kb25lOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoJmdwaW9fcmVnaXN0ZXJfY21kLCB1c2VyZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGdwaW9fcmVnaXN0ZXJfY21kKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gYXI2MDAwX2dwaW9fcmVnaXN0ZXJfc2V0KGRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Bpb19yZWdpc3Rlcl9jbWQuZ3Bpb3JlZ19pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Bpb19yZWdpc3Rlcl9jbWQudmFsdWUpOwotICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8qIFdhaXQgZm9yIGFja25vd2xlZGdlbWVudCBmcm9tIFRhcmdldCAqLwotICAgICAgICAgICAgICAgIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShhckV2ZW50LCBncGlvX2Fja19yZWNlaXZlZCk7Ci0gICAgICAgICAgICAgICAgaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU5UUjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB1cCgmYXItPmFyU2VtKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9HUElPX1JFR0lTVEVSX0dFVDoKLSAgICAgICAgewotICAgICAgICAgICAgc3RydWN0IGFyNjAwMF9ncGlvX3JlZ2lzdGVyX2NtZF9zIGdwaW9fcmVnaXN0ZXJfY21kOwotCi0gICAgICAgICAgICBpZiAoYXItPmJJc0Rlc3Ryb3lQcm9ncmVzcykgewotICAgICAgICAgICAgICAgIHJldCA9IC1FQlVTWTsKLSAgICAgICAgICAgICAgICBnb3RvIGlvY3RsX2RvbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgICAgIGdvdG8gaW9jdGxfZG9uZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChkb3duX2ludGVycnVwdGlibGUoJmFyLT5hclNlbSkpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRVJFU1RBUlRTWVM7Ci0gICAgICAgICAgICAgICAgZ290byBpb2N0bF9kb25lOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGFyLT5iSXNEZXN0cm95UHJvZ3Jlc3MpIHsKLSAgICAgICAgICAgICAgICB1cCgmYXItPmFyU2VtKTsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUJVU1k7Ci0gICAgICAgICAgICAgICAgZ290byBpb2N0bF9kb25lOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoJmdwaW9fcmVnaXN0ZXJfY21kLCB1c2VyZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGdwaW9fcmVnaXN0ZXJfY21kKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gYXI2MDAwX2dwaW9fcmVnaXN0ZXJfZ2V0KGRldiwgZ3Bpb19yZWdpc3Rlcl9jbWQuZ3Bpb3JlZ19pZCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJldCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVwKCZhci0+YXJTZW0pOwotICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGlvY3RsX2RvbmU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLyogV2FpdCBmb3IgVGFyZ2V0IHRvIHJlc3BvbmQuICovCi0gICAgICAgICAgICAgICAgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGFyRXZlbnQsIGdwaW9fZGF0YV9hdmFpbGFibGUpOwotICAgICAgICAgICAgICAgIGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlOVFI7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQV9BU1NFUlQoZ3Bpb19yZWdpc3Rlcl9jbWQuZ3Bpb3JlZ19pZCA9PSBncGlvX3JlZ19yZXN1bHRzLmdwaW9yZWdfaWQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY29weV90b191c2VyKHVzZXJkYXRhLCAmZ3Bpb19yZWdfcmVzdWx0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZ3Bpb19yZWdfcmVzdWx0cykpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgdXAoJmFyLT5hclNlbSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfR1BJT19JTlRSX0FDSzoKLSAgICAgICAgewotICAgICAgICAgICAgc3RydWN0IGFyNjAwMF9ncGlvX2ludHJfYWNrX2NtZF9zIGdwaW9faW50cl9hY2tfY21kOwotCi0gICAgICAgICAgICBpZiAoYXItPmJJc0Rlc3Ryb3lQcm9ncmVzcykgewotICAgICAgICAgICAgICAgIHJldCA9IC1FQlVTWTsKLSAgICAgICAgICAgICAgICBnb3RvIGlvY3RsX2RvbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgICAgIGdvdG8gaW9jdGxfZG9uZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChkb3duX2ludGVycnVwdGlibGUoJmFyLT5hclNlbSkpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRVJFU1RBUlRTWVM7Ci0gICAgICAgICAgICAgICAgZ290byBpb2N0bF9kb25lOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGFyLT5iSXNEZXN0cm95UHJvZ3Jlc3MpIHsKLSAgICAgICAgICAgICAgICB1cCgmYXItPmFyU2VtKTsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUJVU1k7Ci0gICAgICAgICAgICAgICAgZ290byBpb2N0bF9kb25lOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoJmdwaW9faW50cl9hY2tfY21kLCB1c2VyZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGdwaW9faW50cl9hY2tfY21kKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gYXI2MDAwX2dwaW9faW50cl9hY2soZGV2LCBncGlvX2ludHJfYWNrX2NtZC5hY2tfbWFzayk7Ci0gICAgICAgICAgICAgICAgaWYgKHJldCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgdXAoJmFyLT5hclNlbSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfR1BJT19JTlRSX1dBSVQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8qIFdhaXQgZm9yIFRhcmdldCB0byByZXBvcnQgYW4gaW50ZXJydXB0LiAqLwotICAgICAgICAgICAgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGFyRXZlbnQsIGdwaW9faW50cl9hdmFpbGFibGUpOwotCi0gICAgICAgICAgICBpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlOVFI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIodXNlcmRhdGEsICZncGlvX2ludHJfcmVzdWx0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihncGlvX2ludHJfcmVzdWx0cykpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotI2VuZGlmIC8qIENPTkZJR19IT1NUX0dQSU9fU1VQUE9SVCAqLwotCi0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9EQkdMT0dfQ0ZHX01PRFVMRToKLSAgICAgICAgewotICAgICAgICAgICAgc3RydWN0IGFyNjAwMF9kYmdsb2dfbW9kdWxlX2NvbmZpZ19zIGNvbmZpZzsKLQotICAgICAgICAgICAgaWYgKGNvcHlfZnJvbV91c2VyKCZjb25maWcsIHVzZXJkYXRhLCBzaXplb2YoY29uZmlnKSkpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgICAgIGdvdG8gaW9jdGxfZG9uZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyogU2VuZCB0aGUgY2hhbGxlbmdlIG9uIHRoZSBjb250cm9sIGNoYW5uZWwgKi8KLSAgICAgICAgICAgIGlmICh3bWlfY29uZmlnX2RlYnVnX21vZHVsZV9jbWQoYXItPmFyV21pLCBjb25maWcubW1hc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy50c3IsIGNvbmZpZy5yZXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zaXplLCBjb25maWcudmFsaWQpICE9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgICAgICBnb3RvIGlvY3RsX2RvbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9EQkdMT0dfR0VUX0RFQlVHX0xPR1M6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8qIFNlbmQgdGhlIGNoYWxsZW5nZSBvbiB0aGUgY29udHJvbCBjaGFubmVsICovCi0gICAgICAgICAgICBpZiAoYXI2MDAwX2RiZ2xvZ19nZXRfZGVidWdfbG9ncyhhcikgIT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgICAgIGdvdG8gaW9jdGxfZG9uZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX1NFVF9BREhPQ19CU1NJRDoKLSAgICAgICAgewotICAgICAgICAgICAgV01JX1NFVF9BREhPQ19CU1NJRF9DTUQgYWRob2NCc3NpZDsKLQotICAgICAgICAgICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY29weV9mcm9tX3VzZXIoJmFkaG9jQnNzaWQsIHVzZXJkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoYWRob2NCc3NpZCkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1lbWNtcChhZGhvY0Jzc2lkLmJzc2lkLCBiY2FzdF9tYWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSNjAwMF9FVEhfQUREUl9MRU4pID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0KLSAgICAgICAgICAgICAgICBtZW1jcHkoYXItPmFyUmVxQnNzaWQsIGFkaG9jQnNzaWQuYnNzaWQsIHNpemVvZihhci0+YXJSZXFCc3NpZCkpOwotICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9TRVRfT1BUX01PREU6Ci0gICAgICAgIHsKLSAgICAgICAgV01JX1NFVF9PUFRfTU9ERV9DTUQgb3B0TW9kZUNtZDsKLSAgICAgICAgICAgIHN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLQotICAgICAgICAgICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY29weV9mcm9tX3VzZXIoJm9wdE1vZGVDbWQsIHVzZXJkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yob3B0TW9kZUNtZCkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGFyLT5hckNvbm5lY3RlZCAmJiBvcHRNb2RlQ21kLm9wdE1vZGUgPT0gU1BFQ0lBTF9PTikgewotICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAod21pX3NldF9vcHRfbW9kZV9jbWQoYXItPmFyV21pLCBvcHRNb2RlQ21kLm9wdE1vZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICE9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX09QVF9TRU5EX0ZSQU1FOgotICAgICAgICB7Ci0gICAgICAgICAgICBXTUlfT1BUX1RYX0ZSQU1FX0NNRCBvcHRUeEZybUNtZDsKLSAgICAgICAgICAgIHU4IGRhdGFbTUFYX09QVF9EQVRBX0xFTl07Ci0KLSAgICAgICAgICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmb3B0VHhGcm1DbWQsIHVzZXJkYXRhLCBzaXplb2Yob3B0VHhGcm1DbWQpKSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChvcHRUeEZybUNtZC5vcHRJRURhdGFMZW4gPiBNQVhfT1BUX0RBVEFfTEVOKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGNvcHlfZnJvbV91c2VyKGRhdGEsIHVzZXJkYXRhK3NpemVvZihXTUlfT1BUX1RYX0ZSQU1FX0NNRCkgLSAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRUeEZybUNtZC5vcHRJRURhdGFMZW4pKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0ID0gd21pX29wdF90eF9mcmFtZV9jbWQoYXItPmFyV21pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdFR4RnJtQ21kLmZybVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0VHhGcm1DbWQuZHN0QWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRUeEZybUNtZC5ic3NpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRUeEZybUNtZC5vcHRJRURhdGFMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfV01JX1NFVFJFVFJZTElNSVRTOgotICAgICAgICB7Ci0gICAgICAgICAgICBXTUlfU0VUX1JFVFJZX0xJTUlUU19DTUQgc2V0UmV0cnlQYXJhbXM7Ci0KLSAgICAgICAgICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNvcHlfZnJvbV91c2VyKCZzZXRSZXRyeVBhcmFtcywgdXNlcmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzZXRSZXRyeVBhcmFtcykpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh3bWlfc2V0X3JldHJ5X2xpbWl0c19jbWQoYXItPmFyV21pLCBzZXRSZXRyeVBhcmFtcy5mcmFtZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXRyeVBhcmFtcy50cmFmZmljQ2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXRyeVBhcmFtcy5tYXhSZXRyaWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmV0cnlQYXJhbXMuZW5hYmxlTm90aWZ5KSAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgQVI2MDAwX1NQSU5fTE9DSygmYXItPmFyTG9jaywgMCk7Ci0gICAgICAgICAgICAgICAgYXItPmFyTWF4UmV0cmllcyA9IHNldFJldHJ5UGFyYW1zLm1heFJldHJpZXM7Ci0gICAgICAgICAgICAgICAgQVI2MDAwX1NQSU5fVU5MT0NLKCZhci0+YXJMb2NrLCAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX1NFVF9CRUFDT05fSU5UVkFMOgotICAgICAgICB7Ci0gICAgICAgICAgICBXTUlfQkVBQ09OX0lOVF9DTUQgYkludHZsQ21kOwotCi0gICAgICAgICAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgfSBlbHNlIGlmIChjb3B5X2Zyb21fdXNlcigmYkludHZsQ21kLCB1c2VyZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGJJbnR2bENtZCkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHdtaV9zZXRfYWRob2NfYmNvbkludHZsX2NtZChhci0+YXJXbWksIGJJbnR2bENtZC5iZWFjb25JbnRlcnZhbCkKLSAgICAgICAgICAgICAgICAgICAgICAgICE9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmKHJldCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgYXItPmFwX2JlYWNvbl9pbnRlcnZhbCA9IGJJbnR2bENtZC5iZWFjb25JbnRlcnZhbDsKLSAgICAgICAgICAgICAgICBhci0+YXBfcHJvZmlsZV9mbGFnID0gMTsgLyogVGhlcmUgaXMgYSBjaGFuZ2UgaW4gcHJvZmlsZSAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBJRUVFODAyMTFfSU9DVExfU0VUQVVUSEFMRzoKLSAgICAgICAgewotICAgICAgICAgICAgc3RydWN0IGFyNl9zb2Z0YyAqYXIgPSAoc3RydWN0IGFyNl9zb2Z0YyAqKWFyNmtfcHJpdihkZXYpOwotICAgICAgICAgICAgc3RydWN0IGllZWU4MDIxMXJlcV9hdXRoYWxnIHJlcTsKLQotICAgICAgICAgICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY29weV9mcm9tX3VzZXIoJnJlcSwgdXNlcmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExcmVxX2F1dGhhbGcpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAocmVxLmF1dGhfYWxnICYgQVVUSF9BTEdfT1BFTl9TWVNURU0pIHsKLSAgICAgICAgICAgICAgICAgICAgYXItPmFyRG90MTFBdXRoTW9kZSAgfD0gT1BFTl9BVVRIOwotICAgICAgICAgICAgICAgICAgICBhci0+YXJQYWlyd2lzZUNyeXB0byAgPSBOT05FX0NSWVBUOwotICAgICAgICAgICAgICAgICAgICBhci0+YXJHcm91cENyeXB0byAgICAgPSBOT05FX0NSWVBUOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAocmVxLmF1dGhfYWxnICYgQVVUSF9BTEdfU0hBUkVEX0tFWSkgewotICAgICAgICAgICAgICAgICAgICBhci0+YXJEb3QxMUF1dGhNb2RlICB8PSBTSEFSRURfQVVUSDsKLSAgICAgICAgICAgICAgICAgICAgYXItPmFyUGFpcndpc2VDcnlwdG8gID0gV0VQX0NSWVBUOwotICAgICAgICAgICAgICAgICAgICBhci0+YXJHcm91cENyeXB0byAgICAgPSBXRVBfQ1JZUFQ7Ci0gICAgICAgICAgICAgICAgICAgIGFyLT5hckF1dGhNb2RlICAgICAgICA9IE5PTkVfQVVUSDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHJlcS5hdXRoX2FsZyA9PSBBVVRIX0FMR19MRUFQKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFyLT5hckRvdDExQXV0aE1vZGUgICA9IExFQVBfQVVUSDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9TRVRfVk9JQ0VfUEtUX1NJWkU6Ci0gICAgICAgICAgICByZXQgPSBhcjYwMDBfeGlvY3RsX3NldF92b2ljZV9wa3Rfc2l6ZShkZXYsIHVzZXJkYXRhKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9TRVRfTUFYX1NQOgotICAgICAgICAgICAgcmV0ID0gYXI2MDAwX3hpb2N0bF9zZXRfbWF4X3NwX2xlbihkZXYsIHVzZXJkYXRhKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9XTUlfR0VUX1JPQU1fVEJMOgotICAgICAgICAgICAgcmV0ID0gYXI2MDAwX2lvY3RsX2dldF9yb2FtX3RibChkZXYsIHJxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfV01JX1NFVF9ST0FNX0NUUkw6Ci0gICAgICAgICAgICByZXQgPSBhcjYwMDBfaW9jdGxfc2V0X3JvYW1fY3RybChkZXYsIHVzZXJkYXRhKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVFJMX1dNSV9TRVRfUE9XRVJTQVZFX1RJTUVSUzoKLSAgICAgICAgICAgIHJldCA9IGFyNjAwMF9pb2N0bF9zZXRfcG93ZXJzYXZlX3RpbWVycyhkZXYsIHVzZXJkYXRhKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVFJMX1dNSV9HRVRfUE9XRVJfTU9ERToKLSAgICAgICAgICAgIHJldCA9IGFyNjAwMF9pb2N0bF9nZXRfcG93ZXJfbW9kZShkZXYsIHJxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVFJMX1dNSV9TRVRfV0xBTl9TVEFURToKLSAgICAgICAgewotICAgICAgICAgICAgQVI2MDAwX1dMQU5fU1RBVEUgc3RhdGU7Ci0JICAgIGlmIChnZXRfdXNlcihzdGF0ZSwgKHVuc2lnbmVkIGludCAqKXVzZXJkYXRhKSkKLQkJcmV0ID0gLUVGQVVMVDsKLQkgICAgZWxzZSBpZiAoYXI2MDAwX3NldF93bGFuX3N0YXRlKGFyLCBzdGF0ZSkgIT0gMCkKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX1dNSV9HRVRfUk9BTV9EQVRBOgotICAgICAgICAgICAgcmV0ID0gYXI2MDAwX2lvY3RsX2dldF9yb2FtX2RhdGEoZGV2LCBycSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfV01JX1NFVF9CVF9TVEFUVVM6Ci0gICAgICAgICAgICByZXQgPSBhcjYwMDBfeGlvY3RsX3NldF9idF9zdGF0dXNfY21kKGRldiwgdXNlcmRhdGEpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX1dNSV9TRVRfQlRfUEFSQU1TOgotICAgICAgICAgICAgcmV0ID0gYXI2MDAwX3hpb2N0bF9zZXRfYnRfcGFyYW1zX2NtZChkZXYsIHVzZXJkYXRhKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0JCWNhc2UgQVI2MDAwX1hJT0NUTF9XTUlfU0VUX0JUQ09FWF9GRV9BTlQ6Ci0JCQlyZXQgPSBhcjYwMDBfeGlvY3RsX3NldF9idGNvZXhfZmVfYW50X2NtZChkZXYsIHVzZXJkYXRhKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgQVI2MDAwX1hJT0NUTF9XTUlfU0VUX0JUQ09FWF9DT0xPQ0FURURfQlRfREVWOgotCQkJcmV0ID0gYXI2MDAwX3hpb2N0bF9zZXRfYnRjb2V4X2NvbG9jYXRlZF9idF9kZXZfY21kKGRldiwgdXNlcmRhdGEpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBBUjYwMDBfWElPQ1RMX1dNSV9TRVRfQlRDT0VYX0JUSU5RVUlSWV9QQUdFX0NPTkZJRzoKLQkJCXJldCA9IGFyNjAwMF94aW9jdGxfc2V0X2J0Y29leF9idGlucXVpcnlfcGFnZV9jb25maWdfY21kKGRldiwgdXNlcmRhdGEpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBBUjYwMDBfWElPQ1RMX1dNSV9TRVRfQlRDT0VYX1NDT19DT05GSUc6Ci0JCQlyZXQgPSBhcjYwMDBfeGlvY3RsX3NldF9idGNvZXhfc2NvX2NvbmZpZ19jbWQoIGRldiwgdXNlcmRhdGEpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBBUjYwMDBfWElPQ1RMX1dNSV9TRVRfQlRDT0VYX0EyRFBfQ09ORklHOgotCQkJcmV0ID0gYXI2MDAwX3hpb2N0bF9zZXRfYnRjb2V4X2EyZHBfY29uZmlnX2NtZChkZXYsIHVzZXJkYXRhKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgQVI2MDAwX1hJT0NUTF9XTUlfU0VUX0JUQ09FWF9BQ0xDT0VYX0NPTkZJRzoKLQkJCXJldCA9IGFyNjAwMF94aW9jdGxfc2V0X2J0Y29leF9hY2xjb2V4X2NvbmZpZ19jbWQoZGV2LCB1c2VyZGF0YSk7Ci0JCQlicmVhazsKLQotCQljYXNlIEFSNjAwMF9YSU9DVExfV01JX1NFVF9CVENPRVhfREVCVUc6Ci0JCQlyZXQgPSBhcjYwMDAwX3hpb2N0bF9zZXRfYnRjb2V4X2RlYnVnX2NtZChkZXYsIHVzZXJkYXRhKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgQVI2MDAwX1hJT0NUTF9XTUlfU0VUX0JUX09QRVJBVElOR19TVEFUVVM6Ci0JCQlyZXQgPSBhcjYwMDBfeGlvY3RsX3NldF9idGNvZXhfYnRfb3BlcmF0aW5nX3N0YXR1c19jbWQoZGV2LCB1c2VyZGF0YSk7Ci0JCQlicmVhazsKLQotCQljYXNlIEFSNjAwMF9YSU9DVExfV01JX0dFVF9CVENPRVhfQ09ORklHOgotCQkJcmV0ID0gYXI2MDAwX3hpb2N0bF9nZXRfYnRjb2V4X2NvbmZpZ19jbWQoZGV2LCB1c2VyZGF0YSwgcnEpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBBUjYwMDBfWElPQ1RMX1dNSV9HRVRfQlRDT0VYX1NUQVRTOgotCQkJcmV0ID0gYXI2MDAwX3hpb2N0bF9nZXRfYnRjb2V4X3N0YXRzX2NtZChkZXYsIHVzZXJkYXRhLCBycSk7Ci0JCQlicmVhazsKLQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfV01JX1NUQVJUU0NBTjoKLSAgICAgICAgewotICAgICAgICAgICAgV01JX1NUQVJUX1NDQU5fQ01EIHNldFN0YXJ0U2NhbkNtZCwgKmNtZHA7Ci0KLSAgICAgICAgICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29weV9mcm9tX3VzZXIoJnNldFN0YXJ0U2NhbkNtZCwgdXNlcmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc2V0U3RhcnRTY2FuQ21kKSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzZXRTdGFydFNjYW5DbWQubnVtQ2hhbm5lbHMgPiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjbWRwID0gQV9NQUxMT0MoMTMwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcihjbWRwLCB1c2VyZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKCpjbWRwKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChzZXRTdGFydFNjYW5DbWQubnVtQ2hhbm5lbHMgLSAxKSAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHUxNikpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZnJlZShjbWRwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gaW9jdGxfZG9uZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNtZHAgPSAmc2V0U3RhcnRTY2FuQ21kOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHdtaV9zdGFydHNjYW5fY21kKGFyLT5hcldtaSwgY21kcC0+c2NhblR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRwLT5mb3JjZUZnU2NhbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHAtPmlzTGVnYWN5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kcC0+aG9tZUR3ZWxsVGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHAtPmZvcmNlU2NhbkludGVydmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kcC0+bnVtQ2hhbm5lbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRwLT5jaGFubmVsTGlzdCkgIT0gMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9XTUlfU0VURklYUkFURVM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFdNSV9GSVhfUkFURVNfQ01EIHNldEZpeFJhdGVzQ21kOwotICAgICAgICAgICAgaW50IHJldHVyblN0YXR1czsKLQotICAgICAgICAgICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb3B5X2Zyb21fdXNlcigmc2V0Rml4UmF0ZXNDbWQsIHVzZXJkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHNldEZpeFJhdGVzQ21kKSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVyblN0YXR1cyA9IHdtaV9zZXRfZml4cmF0ZXNfY21kKGFyLT5hcldtaSwgc2V0Rml4UmF0ZXNDbWQuZml4UmF0ZU1hc2spOwotICAgICAgICAgICAgICAgICAgICBpZiAocmV0dXJuU3RhdHVzID09IEFfRUlOVkFMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlOVkFMOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYocmV0dXJuU3RhdHVzICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhci0+YXBfcHJvZmlsZV9mbGFnID0gMTsgLyogVGhlcmUgaXMgYSBjaGFuZ2UgaW4gcHJvZmlsZSAqLwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfV01JX0dFVEZJWFJBVEVTOgotICAgICAgICB7Ci0gICAgICAgICAgICBXTUlfRklYX1JBVEVTX0NNRCBnZXRGaXhSYXRlc0NtZDsKLSAgICAgICAgICAgIHN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLSAgICAgICAgICAgIGludCByZXQgPSAwOwotCi0gICAgICAgICAgICBpZiAoYXItPmJJc0Rlc3Ryb3lQcm9ncmVzcykgewotICAgICAgICAgICAgICAgIHJldCA9IC1FQlVTWTsKLSAgICAgICAgICAgICAgICBnb3RvIGlvY3RsX2RvbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgICAgIGdvdG8gaW9jdGxfZG9uZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGRvd25faW50ZXJydXB0aWJsZSgmYXItPmFyU2VtKSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FUkVTVEFSVFNZUzsKLSAgICAgICAgICAgICAgICBnb3RvIGlvY3RsX2RvbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYXItPmJJc0Rlc3Ryb3lQcm9ncmVzcykgewotICAgICAgICAgICAgICAgIHVwKCZhci0+YXJTZW0pOwotICAgICAgICAgICAgICAgIHJldCA9IC1FQlVTWTsKLSAgICAgICAgICAgICAgICBnb3RvIGlvY3RsX2RvbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKiBVc2VkIGNvcHlfZnJvbV91c2VyL2NvcHlfdG9fdXNlciB0byBhY2Nlc3MgdXNlciBzcGFjZSBkYXRhICovCi0gICAgICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoJmdldEZpeFJhdGVzQ21kLCB1c2VyZGF0YSwgc2l6ZW9mKGdldEZpeFJhdGVzQ21kKSkpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBhci0+YXJSYXRlTWFzayA9IDB4RkZGRkZGRkY7Ci0KLSAgICAgICAgICAgICAgICBpZiAod21pX2dldF9yYXRlbWFza19jbWQoYXItPmFyV21pKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVwKCZhci0+YXJTZW0pOwotICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGlvY3RsX2RvbmU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoYXJFdmVudCwgYXItPmFyUmF0ZU1hc2sgIT0gMHhGRkZGRkZGRiwgd21pdGltZW91dCAqIEhaKTsKLQotICAgICAgICAgICAgICAgIGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlOVFI7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCFyZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgZ2V0Rml4UmF0ZXNDbWQuZml4UmF0ZU1hc2sgPSBhci0+YXJSYXRlTWFzazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZihjb3B5X3RvX3VzZXIodXNlcmRhdGEsICZnZXRGaXhSYXRlc0NtZCwgc2l6ZW9mKGdldEZpeFJhdGVzQ21kKSkpIHsKLSAgICAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHVwKCZhci0+YXJTZW0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX1dNSV9TRVRfQVVUSE1PREU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFdNSV9TRVRfQVVUSF9NT0RFX0NNRCBzZXRBdXRoTW9kZTsKLQotICAgICAgICAgICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY29weV9mcm9tX3VzZXIoJnNldEF1dGhNb2RlLCB1c2VyZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHNldEF1dGhNb2RlKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHdtaV9zZXRfYXV0aG1vZGVfY21kKGFyLT5hcldtaSwgc2V0QXV0aE1vZGUubW9kZSkgIT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX1dNSV9TRVRfUkVBU1NPQ01PREU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFdNSV9TRVRfUkVBU1NPQ19NT0RFX0NNRCBzZXRSZWFzc29jTW9kZTsKLQotICAgICAgICAgICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY29weV9mcm9tX3VzZXIoJnNldFJlYXNzb2NNb2RlLCB1c2VyZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHNldFJlYXNzb2NNb2RlKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHdtaV9zZXRfcmVhc3NvY21vZGVfY21kKGFyLT5hcldtaSwgc2V0UmVhc3NvY01vZGUubW9kZSkgIT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX0RJQUdfUkVBRDoKLSAgICAgICAgewotICAgICAgICAgICAgdTMyIGFkZHIsIGRhdGE7Ci0JICAgIGlmIChnZXRfdXNlcihhZGRyLCAodW5zaWduZWQgaW50ICopdXNlcmRhdGEpKSB7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JCWJyZWFrOwotCSAgICB9Ci0gICAgICAgICAgICBhZGRyID0gVEFSR19WVE9QKGFyLT5hclRhcmdldFR5cGUsIGFkZHIpOwotICAgICAgICAgICAgaWYgKGFyNjAwMF9SZWFkUmVnRGlhZyhhci0+YXJIaWZEZXZpY2UsICZhZGRyLCAmZGF0YSkgIT0gMCkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICB9Ci0JICAgIGlmIChwdXRfdXNlcihkYXRhLCAodW5zaWduZWQgaW50ICopdXNlcmRhdGEgKyAxKSkgewotCQlyZXQgPSAtRUZBVUxUOwotCQlicmVhazsKLQkgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX0RJQUdfV1JJVEU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHUzMiBhZGRyLCBkYXRhOwotCSAgICBpZiAoZ2V0X3VzZXIoYWRkciwgKHVuc2lnbmVkIGludCAqKXVzZXJkYXRhKSB8fAotCQlnZXRfdXNlcihkYXRhLCAodW5zaWduZWQgaW50ICopdXNlcmRhdGEgKyAxKSkgewotCQlyZXQgPSAtRUZBVUxUOwotCQlicmVhazsKLQkgICAgfQotICAgICAgICAgICAgYWRkciA9IFRBUkdfVlRPUChhci0+YXJUYXJnZXRUeXBlLCBhZGRyKTsKLSAgICAgICAgICAgIGlmIChhcjYwMDBfV3JpdGVSZWdEaWFnKGFyLT5hckhpZkRldmljZSwgJmFkZHIsICZkYXRhKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9XTUlfU0VUX0tFRVBBTElWRToKLSAgICAgICAgewotICAgICAgICAgICAgIFdNSV9TRVRfS0VFUEFMSVZFX0NNRCBzZXRLZWVwQWxpdmU7Ci0gICAgICAgICAgICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICAgICAgIGdvdG8gaW9jdGxfZG9uZTsKLSAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvcHlfZnJvbV91c2VyKCZzZXRLZWVwQWxpdmUsIHVzZXJkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHNldEtlZXBBbGl2ZSkpKXsKLSAgICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICBpZiAod21pX3NldF9rZWVwYWxpdmVfY21kKGFyLT5hcldtaSwgc2V0S2VlcEFsaXZlLmtlZXBhbGl2ZUludGVydmFsKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfV01JX1NFVF9QQVJBTVM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgICBXTUlfU0VUX1BBUkFNU19DTUQgY21kOwotICAgICAgICAgICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgICAgICBnb3RvIGlvY3RsX2RvbmU7Ci0gICAgICAgICAgICAgfSBlbHNlIGlmIChjb3B5X2Zyb21fdXNlcigmY21kLCB1c2VyZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjbWQpKSl7Ci0gICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICAgfSBlbHNlIGlmIChjb3B5X2Zyb21fdXNlcigmY21kLCB1c2VyZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjbWQpICsgY21kLmxlbmd0aCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgIGlmICh3bWlfc2V0X3BhcmFtc19jbWQoYXItPmFyV21pLCBjbWQub3Bjb2RlLCBjbWQubGVuZ3RoLCBjbWQuYnVmZmVyKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfV01JX1NFVF9NQ0FTVF9GSUxURVI6Ci0gICAgICAgIHsKLSAgICAgICAgICAgICBXTUlfU0VUX01DQVNUX0ZJTFRFUl9DTUQgY21kOwotICAgICAgICAgICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgICAgICBnb3RvIGlvY3RsX2RvbmU7Ci0gICAgICAgICAgICAgfSBlbHNlIGlmIChjb3B5X2Zyb21fdXNlcigmY21kLCB1c2VyZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjbWQpKSl7Ci0gICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgaWYgKHdtaV9zZXRfbWNhc3RfZmlsdGVyX2NtZChhci0+YXJXbWksIGNtZC5tdWx0aWNhc3RfbWFjWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZC5tdWx0aWNhc3RfbWFjWzFdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZC5tdWx0aWNhc3RfbWFjWzJdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZC5tdWx0aWNhc3RfbWFjWzNdKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfV01JX0RFTF9NQ0FTVF9GSUxURVI6Ci0gICAgICAgIHsKLSAgICAgICAgICAgICBXTUlfU0VUX01DQVNUX0ZJTFRFUl9DTUQgY21kOwotICAgICAgICAgICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgICAgICBnb3RvIGlvY3RsX2RvbmU7Ci0gICAgICAgICAgICAgfSBlbHNlIGlmIChjb3B5X2Zyb21fdXNlcigmY21kLCB1c2VyZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjbWQpKSl7Ci0gICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgaWYgKHdtaV9kZWxfbWNhc3RfZmlsdGVyX2NtZChhci0+YXJXbWksIGNtZC5tdWx0aWNhc3RfbWFjWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZC5tdWx0aWNhc3RfbWFjWzFdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZC5tdWx0aWNhc3RfbWFjWzJdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZC5tdWx0aWNhc3RfbWFjWzNdKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfV01JX01DQVNUX0ZJTFRFUjoKLSAgICAgICAgewotICAgICAgICAgICAgIFdNSV9NQ0FTVF9GSUxURVJfQ01EIGNtZDsKLSAgICAgICAgICAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgICAgICAgZ290byBpb2N0bF9kb25lOwotICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgdXNlcmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoY21kKSkpewotICAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgIGlmICh3bWlfbWNhc3RfZmlsdGVyX2NtZChhci0+YXJXbWksIGNtZC5lbmFibGUpICAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfV01JX0dFVF9LRUVQQUxJVkU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLSAgICAgICAgICAgIFdNSV9HRVRfS0VFUEFMSVZFX0NNRCBnZXRLZWVwQWxpdmU7Ci0gICAgICAgICAgICBpbnQgcmV0ID0gMDsKLSAgICAgICAgICAgIGlmIChhci0+YklzRGVzdHJveVByb2dyZXNzKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0tRUJVU1k7Ci0gICAgICAgICAgICAgICAgZ290byBpb2N0bF9kb25lOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgICAgZ290byBpb2N0bF9kb25lOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGRvd25faW50ZXJydXB0aWJsZSgmYXItPmFyU2VtKSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FUkVTVEFSVFNZUzsKLSAgICAgICAgICAgICAgICBnb3RvIGlvY3RsX2RvbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYXItPmJJc0Rlc3Ryb3lQcm9ncmVzcykgewotICAgICAgICAgICAgICAgIHVwKCZhci0+YXJTZW0pOwotICAgICAgICAgICAgICAgIHJldCA9IC1FQlVTWTsKLSAgICAgICAgICAgICAgICBnb3RvIGlvY3RsX2RvbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoJmdldEtlZXBBbGl2ZSwgdXNlcmRhdGEsc2l6ZW9mKGdldEtlZXBBbGl2ZSkpKSB7Ci0gICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGdldEtlZXBBbGl2ZS5rZWVwYWxpdmVJbnRlcnZhbCA9IHdtaV9nZXRfa2VlcGFsaXZlX2NtZChhci0+YXJXbWkpOwotICAgICAgICAgICAgYXItPmFyS2VlcGFsaXZlQ29uZmlndXJlZCA9IDB4RkY7Ci0gICAgICAgICAgICBpZiAod21pX2dldF9rZWVwYWxpdmVfY29uZmlndXJlZChhci0+YXJXbWkpICE9IDApewotICAgICAgICAgICAgICAgIHVwKCZhci0+YXJTZW0pOwotICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICAgICAgZ290byBpb2N0bF9kb25lOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoYXJFdmVudCwgYXItPmFyS2VlcGFsaXZlQ29uZmlndXJlZCAhPSAweEZGLCB3bWl0aW1lb3V0ICogSFopOwotICAgICAgICAgICAgaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTlRSOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXJldCkgewotICAgICAgICAgICAgICAgIGdldEtlZXBBbGl2ZS5jb25maWd1cmVkID0gYXItPmFyS2VlcGFsaXZlQ29uZmlndXJlZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIodXNlcmRhdGEsICZnZXRLZWVwQWxpdmUsIHNpemVvZihnZXRLZWVwQWxpdmUpKSkgewotICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVwKCZhci0+YXJTZW0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX1dNSV9TRVRfQVBQSUU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFdNSV9TRVRfQVBQSUVfQ01EIGFwcElFY21kOwotICAgICAgICAgICAgdTggYXBwSWVJbmZvW0lFRUU4MDIxMV9BUFBJRV9GUkFNRV9NQVhfTEVOXTsKLSAgICAgICAgICAgIHUzMiBmVHlwZSxpZUxlbjsKLQotICAgICAgICAgICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgICAgICBnb3RvIGlvY3RsX2RvbmU7Ci0gICAgICAgICAgICB9Ci0JICAgIGlmIChnZXRfdXNlcihmVHlwZSwgKHUzMiAqKXVzZXJkYXRhKSkgewotCQlyZXQgPSAtRUZBVUxUOwotCQlicmVhazsKLQkgICAgfQotICAgICAgICAgICAgYXBwSUVjbWQubWdtdEZybVR5cGUgPSBmVHlwZTsKLSAgICAgICAgICAgIGlmIChhcHBJRWNtZC5tZ210RnJtVHlwZSA+PSBJRUVFODAyMTFfQVBQSUVfTlVNX09GX0ZSQU1FKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0JCWlmIChnZXRfdXNlcihpZUxlbiwgKHUzMiAqKSh1c2VyZGF0YSArIDQpKSkgewotCQkgICAgcmV0ID0gLUVGQVVMVDsKLQkJICAgIGJyZWFrOwotCQl9Ci0gICAgICAgICAgICAgICAgYXBwSUVjbWQuaWVMZW4gPSBpZUxlbjsKLSAgICAgICAgICAgICAgICBBX1BSSU5URigiV1BTSUU6IFR5cGUtJWQsIExlbi0lZFxuIixhcHBJRWNtZC5tZ210RnJtVHlwZSwgYXBwSUVjbWQuaWVMZW4pOwotICAgICAgICAgICAgICAgIGlmIChhcHBJRWNtZC5pZUxlbiA+IElFRUU4MDIxMV9BUFBJRV9GUkFNRV9NQVhfTEVOKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoYXBwSWVJbmZvLCB1c2VyZGF0YSArIDgsIGFwcElFY21kLmllTGVuKSkgewotICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh3bWlfc2V0X2FwcGllX2NtZChhci0+YXJXbWksIGFwcElFY21kLm1nbXRGcm1UeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwSUVjbWQuaWVMZW4sICBhcHBJZUluZm8pICE9IDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfV01JX1NFVF9NR01UX0ZSTV9SWF9GSUxURVI6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFdNSV9CU1NfRklMVEVSX0NNRCBjbWQ7Ci0gICAgICAgICAgICB1MzIgZmlsdGVyVHlwZTsKLQotICAgICAgICAgICAgaWYgKGNvcHlfZnJvbV91c2VyKCZmaWx0ZXJUeXBlLCB1c2VyZGF0YSwgc2l6ZW9mKHUzMikpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgZ290byBpb2N0bF9kb25lOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZpbHRlclR5cGUgJiAoSUVFRTgwMjExX0ZJTFRFUl9UWVBFX0JFQUNPTiB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRUVFODAyMTFfRklMVEVSX1RZUEVfUFJPQkVfUkVTUCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY21kLmJzc0ZpbHRlciA9IEFMTF9CU1NfRklMVEVSOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjbWQuYnNzRmlsdGVyID0gTk9ORV9CU1NfRklMVEVSOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHdtaV9ic3NmaWx0ZXJfY21kKGFyLT5hcldtaSwgY21kLmJzc0ZpbHRlciwgMCkgIT0gMCkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGFyLT5hclVzZXJCc3NGaWx0ZXIgPSBjbWQuYnNzRmlsdGVyOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBUjYwMDBfU1BJTl9MT0NLKCZhci0+YXJMb2NrLCAwKTsKLSAgICAgICAgICAgIGFyLT5hck1nbXRGaWx0ZXIgPSBmaWx0ZXJUeXBlOwotICAgICAgICAgICAgQVI2MDAwX1NQSU5fVU5MT0NLKCZhci0+YXJMb2NrLCAwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9XTUlfU0VUX1dTQ19TVEFUVVM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHUzMiB3c2Nfc3RhdHVzOwotCi0gICAgICAgICAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgICAgIGdvdG8gaW9jdGxfZG9uZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY29weV9mcm9tX3VzZXIoJndzY19zdGF0dXMsIHVzZXJkYXRhLCBzaXplb2YodTMyKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICBnb3RvIGlvY3RsX2RvbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAod21pX3NldF93c2Nfc3RhdHVzX2NtZChhci0+YXJXbWksIHdzY19zdGF0dXMpICE9IDApIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX0JNSV9ST01QQVRDSF9JTlNUQUxMOgotICAgICAgICB7Ci0gICAgICAgICAgICB1MzIgUk9NX2FkZHI7Ci0gICAgICAgICAgICB1MzIgUkFNX2FkZHI7Ci0gICAgICAgICAgICB1MzIgbmJ5dGVzOwotICAgICAgICAgICAgdTMyIGRvX2FjdGl2YXRlOwotICAgICAgICAgICAgdTMyIHJvbXBhdGNoX2lkOwotCi0JICAgIGlmIChnZXRfdXNlcihST01fYWRkciwgKHUzMiAqKXVzZXJkYXRhKSB8fAotCQlnZXRfdXNlcihSQU1fYWRkciwgKHUzMiAqKXVzZXJkYXRhICsgMSkgfHwKLQkJZ2V0X3VzZXIobmJ5dGVzLCAodTMyICopdXNlcmRhdGEgKyAyKSB8fAotCQlnZXRfdXNlcihkb19hY3RpdmF0ZSwgKHUzMiAqKXVzZXJkYXRhICsgMykpIHsKLQkJcmV0ID0gLUVGQVVMVDsKLQkJYnJlYWs7Ci0JICAgIH0KLSAgICAgICAgICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfSU5GTywoIkluc3RhbGwgcm9tcGF0Y2ggZnJvbSBST006IDB4JXggdG8gUkFNOiAweCV4ICBsZW5ndGg6ICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST01fYWRkciwgUkFNX2FkZHIsIG5ieXRlcykpOwotICAgICAgICAgICAgcmV0ID0gQk1Jcm9tcGF0Y2hJbnN0YWxsKGhpZkRldmljZSwgUk9NX2FkZHIsIFJBTV9hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ieXRlcywgZG9fYWN0aXZhdGUsICZyb21wYXRjaF9pZCk7Ci0gICAgICAgICAgICBpZiAocmV0ID09IDApIHsKLQkJLyogcmV0dXJuIHZhbHVlICovCi0JCWlmIChwdXRfdXNlcihyb21wYXRjaF9pZCwgKHVuc2lnbmVkIGludCAqKXJxLT5pZnJfZGF0YSkpIHsKLQkJICAgIHJldCA9IC1FRkFVTFQ7Ci0JCSAgICBicmVhazsKLQkJfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfQk1JX1JPTVBBVENIX1VOSU5TVEFMTDoKLSAgICAgICAgewotICAgICAgICAgICAgdTMyIHJvbXBhdGNoX2lkOwotCi0JICAgIGlmIChnZXRfdXNlcihyb21wYXRjaF9pZCwgKHUzMiAqKXVzZXJkYXRhKSkgewotCQlyZXQgPSAtRUZBVUxUOwotCQlicmVhazsKLQkgICAgfQotICAgICAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19JTkZPLCgiVU5pbnN0YWxsIHJvbXBhdGNoX2lkICVkXG4iLCByb21wYXRjaF9pZCkpOwotICAgICAgICAgICAgcmV0ID0gQk1Jcm9tcGF0Y2hVbmluc3RhbGwoaGlmRGV2aWNlLCByb21wYXRjaF9pZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9CTUlfUk9NUEFUQ0hfQUNUSVZBVEU6Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9CTUlfUk9NUEFUQ0hfREVBQ1RJVkFURToKLSAgICAgICAgewotICAgICAgICAgICAgdTMyIHJvbXBhdGNoX2NvdW50OwotCi0JICAgIGlmIChnZXRfdXNlcihyb21wYXRjaF9jb3VudCwgKHUzMiAqKXVzZXJkYXRhKSkgewotCQlyZXQgPSAtRUZBVUxUOwotCQlicmVhazsKLQkgICAgfQotICAgICAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19JTkZPLCgiQ2hhbmdlIHJvbXBhdGNoIGFjdGl2YXRpb24gY291bnQ9JWRcbiIsIHJvbXBhdGNoX2NvdW50KSk7Ci0gICAgICAgICAgICBsZW5ndGggPSBzaXplb2YodTMyKSAqIHJvbXBhdGNoX2NvdW50OwotICAgICAgICAgICAgaWYgKChidWZmZXIgPSAodW5zaWduZWQgY2hhciAqKUFfTUFMTE9DKGxlbmd0aCkpICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBBX01FTVpFUk8oYnVmZmVyLCBsZW5ndGgpOwotICAgICAgICAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcihidWZmZXIsICZ1c2VyZGF0YVtzaXplb2Yocm9tcGF0Y2hfY291bnQpXSwgbGVuZ3RoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNtZCA9PSBBUjYwMDBfWElPQ1RMX0JNSV9ST01QQVRDSF9BQ1RJVkFURSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gQk1Jcm9tcGF0Y2hBY3RpdmF0ZShoaWZEZXZpY2UsIHJvbXBhdGNoX2NvdW50LCAodTMyICopYnVmZmVyKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IEJNSXJvbXBhdGNoRGVhY3RpdmF0ZShoaWZEZXZpY2UsIHJvbXBhdGNoX2NvdW50LCAodTMyICopYnVmZmVyKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBBX0ZSRUUoYnVmZmVyKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVOT01FTTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX1NFVF9JUDoKLSAgICAgICAgewotICAgICAgICAgICAgV01JX1NFVF9JUF9DTUQgc2V0SVA7Ci0KLSAgICAgICAgICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNvcHlfZnJvbV91c2VyKCZzZXRJUCwgdXNlcmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzZXRJUCkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh3bWlfc2V0X2lwX2NtZChhci0+YXJXbWksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzZXRJUCkgIT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfV01JX1NFVF9IT1NUX1NMRUVQX01PREU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFdNSV9TRVRfSE9TVF9TTEVFUF9NT0RFX0NNRCBzZXRIb3N0U2xlZXBNb2RlOwotCi0gICAgICAgICAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgfSBlbHNlIGlmIChjb3B5X2Zyb21fdXNlcigmc2V0SG9zdFNsZWVwTW9kZSwgdXNlcmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzZXRIb3N0U2xlZXBNb2RlKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHdtaV9zZXRfaG9zdF9zbGVlcF9tb2RlX2NtZChhci0+YXJXbWksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzZXRIb3N0U2xlZXBNb2RlKSAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfV01JX1NFVF9XT1dfTU9ERToKLSAgICAgICAgewotICAgICAgICAgICAgV01JX1NFVF9XT1dfTU9ERV9DTUQgc2V0V293TW9kZTsKLQotICAgICAgICAgICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY29weV9mcm9tX3VzZXIoJnNldFdvd01vZGUsIHVzZXJkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc2V0V293TW9kZSkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh3bWlfc2V0X3dvd19tb2RlX2NtZChhci0+YXJXbWksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzZXRXb3dNb2RlKSAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfV01JX0dFVF9XT1dfTElTVDoKLSAgICAgICAgewotICAgICAgICAgICAgV01JX0dFVF9XT1dfTElTVF9DTUQgZ2V0V293TGlzdDsKLQotICAgICAgICAgICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY29weV9mcm9tX3VzZXIoJmdldFdvd0xpc3QsIHVzZXJkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZ2V0V293TGlzdCkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh3bWlfZ2V0X3dvd19saXN0X2NtZChhci0+YXJXbWksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnZXRXb3dMaXN0KSAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfV01JX0FERF9XT1dfUEFUVEVSTjoKLSAgICAgICAgewotI2RlZmluZSBXT1dfUEFUVEVSTl9TSVpFIDY0Ci0jZGVmaW5lIFdPV19NQVNLX1NJWkUgNjQKLQotICAgICAgICAgICAgV01JX0FERF9XT1dfUEFUVEVSTl9DTUQgY21kOwotICAgICAgICAgICAgdTggbWFza19kYXRhW1dPV19QQVRURVJOX1NJWkVdPXswfTsKLSAgICAgICAgICAgIHU4IHBhdHRlcm5fZGF0YVtXT1dfUEFUVEVSTl9TSVpFXT17MH07Ci0KLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAKLSAgICAgICAgICAgICAgICB9IAotICAgICAgICAgICAgICAgIGlmKGNvcHlfZnJvbV91c2VyKCZjbWQsIHVzZXJkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihXTUlfQUREX1dPV19QQVRURVJOX0NNRCkpKSAKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcihwYXR0ZXJuX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJkYXRhICsgMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kLmZpbHRlcl9zaXplKSkgCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgIAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIobWFza19kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1c2VyZGF0YSArIDMgKyBjbWQuZmlsdGVyX3NpemUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZC5maWx0ZXJfc2l6ZSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHdtaV9hZGRfd293X3BhdHRlcm5fY21kKGFyLT5hcldtaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY21kLCBwYXR0ZXJuX2RhdGEsIG1hc2tfZGF0YSwgY21kLmZpbHRlcl9zaXplKSAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IHdoaWxlKGZhbHNlKTsKLSN1bmRlZiBXT1dfUEFUVEVSTl9TSVpFCi0jdW5kZWYgV09XX01BU0tfU0laRQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX1dNSV9ERUxfV09XX1BBVFRFUk46Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFdNSV9ERUxfV09XX1BBVFRFUk5fQ01EIGRlbFdvd1BhdHRlcm47Ci0KLSAgICAgICAgICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNvcHlfZnJvbV91c2VyKCZkZWxXb3dQYXR0ZXJuLCB1c2VyZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGRlbFdvd1BhdHRlcm4pKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAod21pX2RlbF93b3dfcGF0dGVybl9jbWQoYXItPmFyV21pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGVsV293UGF0dGVybikgIT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX0RVTVBfSFRDX0NSRURJVF9TVEFURToKLSAgICAgICAgICAgIGlmIChhci0+YXJIdGNUYXJnZXQgIT0gTlVMTCkgewotI2lmZGVmIEFUSF9ERUJVR19NT0RVTEUKLSAgICAgICAgICAgICAgICBIVENEdW1wQ3JlZGl0U3RhdGVzKGFyLT5hckh0Y1RhcmdldCk7Ci0jZW5kaWYgLyogQVRIX0RFQlVHX01PRFVMRSAqLwotI2lmZGVmIEhUQ19FUF9TVEFUX1BST0ZJTElORwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0IGh0Y19lbmRwb2ludF9zdGF0cyBzdGF0czsKLSAgICAgICAgICAgICAgICAgICAgaW50IGk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEhUQ0dldEVuZHBvaW50U3RhdGlzdGljcyhhci0+YXJIdGNUYXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhUQ19FUF9TVEFUX1NBTVBMRV9BTkRfQ0xFQVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGF0cykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBX1BSSU5URihLRVJOX0FMRVJUIi0tLS0tLS0gUHJvZmlsaW5nIEVuZHBvaW50IDogJWQgXG4iLCBpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBX1BSSU5URihLRVJOX0FMRVJUIlR4Q3JlZGl0TG93SW5kaWNhdGlvbnMgOiAlZCBcbiIsIHN0YXRzLlR4Q3JlZGl0TG93SW5kaWNhdGlvbnMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFfUFJJTlRGKEtFUk5fQUxFUlQiVHhJc3N1ZWQgOiAlZCBcbiIsIHN0YXRzLlR4SXNzdWVkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBX1BSSU5URihLRVJOX0FMRVJUIlR4RHJvcHBlZDogJWQgXG4iLCBzdGF0cy5UeERyb3BwZWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFfUFJJTlRGKEtFUk5fQUxFUlQiVHhQYWNrZXRzQnVuZGxlZCA6ICVkIFxuIiwgc3RhdHMuVHhQYWNrZXRzQnVuZGxlZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQV9QUklOVEYoS0VSTl9BTEVSVCJUeEJ1bmRsZXMgOiAlZCBcbiIsIHN0YXRzLlR4QnVuZGxlcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQV9QUklOVEYoS0VSTl9BTEVSVCJUeENyZWRpdFJwdHMgOiAlZCBcbiIsIHN0YXRzLlR4Q3JlZGl0UnB0cyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQV9QUklOVEYoS0VSTl9BTEVSVCJUeENyZWRpdHNScHRzRnJvbVJ4IDogJWQgXG4iLCBzdGF0cy5UeENyZWRpdFJwdHNGcm9tUngpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFfUFJJTlRGKEtFUk5fQUxFUlQiVHhDcmVkaXRzUnB0c0Zyb21PdGhlciA6ICVkIFxuIiwgc3RhdHMuVHhDcmVkaXRScHRzRnJvbU90aGVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBX1BSSU5URihLRVJOX0FMRVJUIlR4Q3JlZGl0c1JwdHNGcm9tRXAwIDogJWQgXG4iLCBzdGF0cy5UeENyZWRpdFJwdHNGcm9tRXAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBX1BSSU5URihLRVJOX0FMRVJUIlR4Q3JlZGl0c0Zyb21SeCA6ICVkIFxuIiwgc3RhdHMuVHhDcmVkaXRzRnJvbVJ4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBX1BSSU5URihLRVJOX0FMRVJUIlR4Q3JlZGl0c0Zyb21PdGhlciA6ICVkIFxuIiwgc3RhdHMuVHhDcmVkaXRzRnJvbU90aGVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBX1BSSU5URihLRVJOX0FMRVJUIlR4Q3JlZGl0c0Zyb21FcDAgOiAlZCBcbiIsIHN0YXRzLlR4Q3JlZGl0c0Zyb21FcDApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFfUFJJTlRGKEtFUk5fQUxFUlQiVHhDcmVkaXRzQ29uc3VtbWVkIDogJWQgXG4iLCBzdGF0cy5UeENyZWRpdHNDb25zdW1tZWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFfUFJJTlRGKEtFUk5fQUxFUlQiVHhDcmVkaXRzUmV0dXJuZWQgOiAlZCBcbiIsIHN0YXRzLlR4Q3JlZGl0c1JldHVybmVkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBX1BSSU5URihLRVJOX0FMRVJUIlJ4UmVjZWl2ZWQgOiAlZCBcbiIsIHN0YXRzLlJ4UmVjZWl2ZWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFfUFJJTlRGKEtFUk5fQUxFUlQiUnhQYWNrZXRzQnVuZGxlZCA6ICVkIFxuIiwgc3RhdHMuUnhQYWNrZXRzQnVuZGxlZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQV9QUklOVEYoS0VSTl9BTEVSVCJSeExvb2tBaGVhZHMgOiAlZCBcbiIsIHN0YXRzLlJ4TG9va0FoZWFkcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQV9QUklOVEYoS0VSTl9BTEVSVCJSeEJ1bmRsZUxvb2tBaGVhZHMgOiAlZCBcbiIsIHN0YXRzLlJ4QnVuZGxlTG9va0FoZWFkcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQV9QUklOVEYoS0VSTl9BTEVSVCJSeEJ1bmRsZUluZEZyb21IZHIgOiAlZCBcbiIsIHN0YXRzLlJ4QnVuZGxlSW5kRnJvbUhkcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQV9QUklOVEYoS0VSTl9BTEVSVCJSeEFsbG9jVGhyZXNoSGl0IDogJWQgXG4iLCBzdGF0cy5SeEFsbG9jVGhyZXNoSGl0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBX1BSSU5URihLRVJOX0FMRVJUIlJ4QWxsb2NUaHJlc2hCeXRlcyA6ICVkIFxuIiwgc3RhdHMuUnhBbGxvY1RocmVzaEJ5dGVzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBX1BSSU5URihLRVJOX0FMRVJUIi0tLS0gXG4iKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9UUkFGRklDX0FDVElWSVRZX0NIQU5HRToKLSAgICAgICAgICAgIGlmIChhci0+YXJIdGNUYXJnZXQgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHN0cnVjdCBhcjYwMDBfdHJhZmZpY19hY3Rpdml0eV9jaGFuZ2UgZGF0YTsKLQotICAgICAgICAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmZGF0YSwgdXNlcmRhdGEsIHNpemVvZihkYXRhKSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGlvY3RsX2RvbmU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvKiBub3RlLCB0aGlzIGlzIHVzZWQgZm9yIHRlc3RpbmcgKG1ib3ggcGluZyB0ZXN0aW5nKSwgaW5kaWNhdGUgYWN0aXZpdHkKLSAgICAgICAgICAgICAgICAgICAgICogY2hhbmdlIHVzaW5nIHRoZSBzdHJlYW0gSUQgYXMgdGhlIHRyYWZmaWMgY2xhc3MgKi8KLSAgICAgICAgICAgICAgICBhcjYwMDBfaW5kaWNhdGVfdHhfYWN0aXZpdHkoYXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1OClkYXRhLlN0cmVhbUlELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLkFjdGl2ZSA/IHRydWUgOiBmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX1dNSV9TRVRfQ09OTkVDVF9DVFJMX0ZMQUdTOgotICAgICAgICAgICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY29weV9mcm9tX3VzZXIoJmNvbm5lY3RDdHJsRmxhZ3MsIHVzZXJkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoY29ubmVjdEN0cmxGbGFncykpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGFyLT5hckNvbm5lY3RDdHJsRmxhZ3MgPSBjb25uZWN0Q3RybEZsYWdzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9XTUlfU0VUX0FLTVBfUEFSQU1TOgotICAgICAgICAgICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY29weV9mcm9tX3VzZXIoJmFrbXBQYXJhbXMsIHVzZXJkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoV01JX1NFVF9BS01QX1BBUkFNU19DTUQpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAod21pX3NldF9ha21wX3BhcmFtc19jbWQoYXItPmFyV21pLCAmYWttcFBhcmFtcykgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfV01JX1NFVF9QTUtJRF9MSVNUOgotICAgICAgICAgICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvcHlfZnJvbV91c2VyKCZwbWtpZEluZm8ubnVtUE1LSUQsIHVzZXJkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YocG1raWRJbmZvLm51bVBNS0lEKSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNvcHlfZnJvbV91c2VyKCZwbWtpZEluZm8ucG1raWRMaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyZGF0YSArIHNpemVvZihwbWtpZEluZm8ubnVtUE1LSUQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbWtpZEluZm8ubnVtUE1LSUQgKiBzaXplb2YoV01JX1BNS0lEKSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHdtaV9zZXRfcG1raWRfbGlzdF9jbWQoYXItPmFyV21pLCAmcG1raWRJbmZvKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9XTUlfR0VUX1BNS0lEX0xJU1Q6Ci0gICAgICAgICAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgfSBlbHNlICB7Ci0gICAgICAgICAgICAgICAgaWYgKHdtaV9nZXRfcG1raWRfbGlzdF9jbWQoYXItPmFyV21pKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9XTUlfQUJPUlRfU0NBTjoKLSAgICAgICAgICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXQgPSB3bWlfYWJvcnRfc2Nhbl9jbWQoYXItPmFyV21pKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfQVBfSElEREVOX1NTSUQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHU4IGhpZGRlbl9zc2lkOwotICAgICAgICAgICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY29weV9mcm9tX3VzZXIoJmhpZGRlbl9zc2lkLCB1c2VyZGF0YSwgc2l6ZW9mKGhpZGRlbl9zc2lkKSkpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB3bWlfYXBfc2V0X2hpZGRlbl9zc2lkKGFyLT5hcldtaSwgaGlkZGVuX3NzaWQpOwotICAgICAgICAgICAgICAgIGFyLT5hcF9oaWRkZW5fc3NpZCA9IGhpZGRlbl9zc2lkOwotICAgICAgICAgICAgICAgIGFyLT5hcF9wcm9maWxlX2ZsYWcgPSAxOyAvKiBUaGVyZSBpcyBhIGNoYW5nZSBpbiBwcm9maWxlICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfQVBfR0VUX1NUQV9MSVNUOgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB1OCBpOwotICAgICAgICAgICAgICAgIGFwX2dldF9zdGFfdCB0ZW1wOwotICAgICAgICAgICAgICAgIEFfTUVNWkVSTygmdGVtcCwgc2l6ZW9mKHRlbXApKTsKLSAgICAgICAgICAgICAgICBmb3IoaT0wO2k8QVBfTUFYX05VTV9TVEE7aSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1lbWNweSh0ZW1wLnN0YVtpXS5tYWMsIGFyLT5zdGFfbGlzdFtpXS5tYWMsIEFUSF9NQUNfTEVOKTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcC5zdGFbaV0uYWlkID0gYXItPnN0YV9saXN0W2ldLmFpZDsKLSAgICAgICAgICAgICAgICAgICAgdGVtcC5zdGFbaV0ua2V5bWdtdCA9IGFyLT5zdGFfbGlzdFtpXS5rZXltZ210OwotICAgICAgICAgICAgICAgICAgICB0ZW1wLnN0YVtpXS51Y2lwaGVyID0gYXItPnN0YV9saXN0W2ldLnVjaXBoZXI7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXAuc3RhW2ldLmF1dGggPSBhci0+c3RhX2xpc3RbaV0uYXV0aDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYoY29weV90b191c2VyKChhcF9nZXRfc3RhX3QgKilycS0+aWZyX2RhdGEsICZ0ZW1wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGFyLT5zdGFfbGlzdCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX0FQX1NFVF9OVU1fU1RBOgotICAgICAgICB7Ci0gICAgICAgICAgICB1OCBudW1fc3RhOwotICAgICAgICAgICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY29weV9mcm9tX3VzZXIoJm51bV9zdGEsIHVzZXJkYXRhLCBzaXplb2YobnVtX3N0YSkpKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgIH0gZWxzZSBpZihudW1fc3RhID4gQVBfTUFYX05VTV9TVEEpIHsKLSAgICAgICAgICAgICAgICAvKiB2YWx1ZSBvdXQgb2YgcmFuZ2UgKi8KLSAgICAgICAgICAgICAgICByZXQgPSAtRUlOVkFMOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB3bWlfYXBfc2V0X251bV9zdGEoYXItPmFyV21pLCBudW1fc3RhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9BUF9TRVRfQUNMX1BPTElDWToKLSAgICAgICAgewotICAgICAgICAgICAgdTggcG9saWN5OwotICAgICAgICAgICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY29weV9mcm9tX3VzZXIoJnBvbGljeSwgdXNlcmRhdGEsIHNpemVvZihwb2xpY3kpKSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICB9IGVsc2UgaWYocG9saWN5ID09IGFyLT5nX2FjbC5wb2xpY3kpIHsKLSAgICAgICAgICAgICAgICAvKiBObyBjaGFuZ2UgaW4gcG9saWN5ICovCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmKCEocG9saWN5ICYgQVBfQUNMX1JFVEFJTl9MSVNUX01BU0spKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIGNsZWFyIEFDTCBsaXN0ICovCi0gICAgICAgICAgICAgICAgICAgIG1lbXNldCgmYXItPmdfYWNsLDAsc2l6ZW9mKFdNSV9BUF9BQ0wpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYXItPmdfYWNsLnBvbGljeSA9IHBvbGljeTsKLSAgICAgICAgICAgICAgICB3bWlfYXBfc2V0X2FjbF9wb2xpY3koYXItPmFyV21pLCBwb2xpY3kpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX0FQX1NFVF9BQ0xfTUFDOgotICAgICAgICB7Ci0gICAgICAgICAgICBXTUlfQVBfQUNMX01BQ19DTUQgICAgYWNsOwotICAgICAgICAgICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY29weV9mcm9tX3VzZXIoJmFjbCwgdXNlcmRhdGEsIHNpemVvZihhY2wpKSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmKGFjbF9hZGRfZGVsX21hYygmYXItPmdfYWNsLCAmYWNsKSkgewotICAgICAgICAgICAgICAgICAgICB3bWlfYXBfYWNsX21hY19saXN0KGFyLT5hcldtaSwgJmFjbCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQV9QUklOVEYoIkFDTCBsaXN0IGVycm9yXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfQVBfR0VUX0FDTF9MSVNUOgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgfSBlbHNlIGlmKGNvcHlfdG9fdXNlcigoV01JX0FQX0FDTCAqKXJxLT5pZnJfZGF0YSwgJmFyLT5nX2FjbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihXTUlfQVBfQUNMKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9BUF9DT01NSVRfQ09ORklHOgotICAgICAgICB7Ci0gICAgICAgICAgICByZXQgPSBhcjYwMDBfYXBfbW9kZV9wcm9maWxlX2NvbW1pdChhcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIElFRUU4MDIxMV9JT0NUTF9HRVRXUEFJRToKLSAgICAgICAgewotICAgICAgICAgICAgc3RydWN0IGllZWU4MDIxMXJlcV93cGFpZSB3cGFpZTsKLSAgICAgICAgICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNvcHlfZnJvbV91c2VyKCZ3cGFpZSwgdXNlcmRhdGEsIHNpemVvZih3cGFpZSkpKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoYXI2MDAwX2FwX21vZGVfZ2V0X3dwYV9pZShhciwgJndwYWllKSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICB9IGVsc2UgaWYoY29weV90b191c2VyKHVzZXJkYXRhLCAmd3BhaWUsIHNpemVvZih3cGFpZSkpKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9BUF9DT05OX0lOQUNUX1RJTUU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHUzMiBwZXJpb2Q7Ci0gICAgICAgICAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgfSBlbHNlIGlmIChjb3B5X2Zyb21fdXNlcigmcGVyaW9kLCB1c2VyZGF0YSwgc2l6ZW9mKHBlcmlvZCkpKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgd21pX2FwX2Nvbm5faW5hY3RfdGltZShhci0+YXJXbWksIHBlcmlvZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfQVBfUFJPVF9TQ0FOX1RJTUU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFdNSV9BUF9QUk9UX1NDQU5fVElNRV9DTUQgIGJnc2NhbjsKLSAgICAgICAgICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNvcHlfZnJvbV91c2VyKCZiZ3NjYW4sIHVzZXJkYXRhLCBzaXplb2YoYmdzY2FuKSkpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB3bWlfYXBfYmdzY2FuX3RpbWUoYXItPmFyV21pLCBiZ3NjYW4ucGVyaW9kX21pbiwgYmdzY2FuLmR3ZWxsX21zKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9BUF9TRVRfQ09VTlRSWToKLSAgICAgICAgewotICAgICAgICAgICAgcmV0ID0gYXI2MDAwX2lvY3RsX3NldF9jb3VudHJ5KGRldiwgcnEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX0FQX1NFVF9EVElNOgotICAgICAgICB7Ci0gICAgICAgICAgICBXTUlfQVBfU0VUX0RUSU1fQ01EICBkOwotICAgICAgICAgICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY29weV9mcm9tX3VzZXIoJmQsIHVzZXJkYXRhLCBzaXplb2YoZCkpKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYoZC5kdGltID4gMCAmJiBkLmR0aW0gPCAxMSkgewotICAgICAgICAgICAgICAgICAgICBhci0+YXBfZHRpbV9wZXJpb2QgPSBkLmR0aW07Ci0gICAgICAgICAgICAgICAgICAgIHdtaV9hcF9zZXRfZHRpbShhci0+YXJXbWksIGQuZHRpbSk7Ci0gICAgICAgICAgICAgICAgICAgIGFyLT5hcF9wcm9maWxlX2ZsYWcgPSAxOyAvKiBUaGVyZSBpcyBhIGNoYW5nZSBpbiBwcm9maWxlICovCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQV9QUklOVEYoIkRUSU0gb3V0IG9mIHJhbmdlLiBWYWxpZCByYW5nZSBpcyBbMS0xMF1cbiIpOwotICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9XTUlfVEFSR0VUX0VWRU5UX1JFUE9SVDoKLSAgICAgICAgewotICAgICAgICAgICAgV01JX1NFVF9UQVJHRVRfRVZFTlRfUkVQT1JUX0NNRCBldnRDZmdDbWQ7Ci0KLSAgICAgICAgICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoJmV2dENmZ0NtZCwgdXNlcmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGV2dENmZ0NtZCkpKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldCA9IHdtaV9zZXRfdGFyZ2V0X2V2ZW50X3JlcG9ydF9jbWQoYXItPmFyV21pLCAmZXZ0Q2ZnQ21kKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9BUF9JTlRSQV9CU1NfQ09NTToKLSAgICAgICAgewotICAgICAgICAgICAgdTggaW50cmE9MDsKLSAgICAgICAgICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNvcHlfZnJvbV91c2VyKCZpbnRyYSwgdXNlcmRhdGEsIHNpemVvZihpbnRyYSkpKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYXItPmludHJhX2JzcyA9IChpbnRyYT8xOjApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX0RVTVBfTU9EVUxFX0RFQlVHX0lORk86Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cnVjdCBkcnZfZGVidWdfbW9kdWxlX3MgbW9kdWxlaW5mbzsKLQotICAgICAgICAgICAgaWYgKGNvcHlfZnJvbV91c2VyKCZtb2R1bGVpbmZvLCB1c2VyZGF0YSwgc2l6ZW9mKG1vZHVsZWluZm8pKSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGFfZHVtcF9tb2R1bGVfZGVidWdfaW5mb19ieV9uYW1lKG1vZHVsZWluZm8ubW9kdWxlbmFtZSk7Ci0gICAgICAgICAgICByZXQgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX01PRFVMRV9ERUJVR19TRVRfTUFTSzoKLSAgICAgICAgewotICAgICAgICAgICAgc3RydWN0IGRydl9kZWJ1Z19tb2R1bGVfcyBtb2R1bGVpbmZvOwotCi0gICAgICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoJm1vZHVsZWluZm8sIHVzZXJkYXRhLCBzaXplb2YobW9kdWxlaW5mbykpKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGFfc2V0X21vZHVsZV9tYXNrKG1vZHVsZWluZm8ubW9kdWxlbmFtZSwgbW9kdWxlaW5mby5tYXNrKSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9NT0RVTEVfREVCVUdfR0VUX01BU0s6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cnVjdCBkcnZfZGVidWdfbW9kdWxlX3MgbW9kdWxlaW5mbzsKLQotICAgICAgICAgICAgaWYgKGNvcHlfZnJvbV91c2VyKCZtb2R1bGVpbmZvLCB1c2VyZGF0YSwgc2l6ZW9mKG1vZHVsZWluZm8pKSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChhX2dldF9tb2R1bGVfbWFzayhtb2R1bGVpbmZvLm1vZHVsZW5hbWUsICZtb2R1bGVpbmZvLm1hc2spKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGNvcHlfdG9fdXNlcih1c2VyZGF0YSwgJm1vZHVsZWluZm8sIHNpemVvZihtb2R1bGVpbmZvKSkpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotI2lmZGVmIEFUSF9BUjZLXzExTl9TVVBQT1JUCi0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9EVU1QX1JDVl9BR0dSX1NUQVRTOgotICAgICAgICB7Ci0gICAgICAgICAgICBQQUNLRVRfTE9HICpjb3B5X29mX3BrdF9sb2c7Ci0KLSAgICAgICAgICAgIGFnZ3JfZHVtcF9zdGF0cyhhci0+YWdncl9jbnR4dCwgJmNvcHlfb2ZfcGt0X2xvZyk7Ci0gICAgICAgICAgICBpZiAoY29weV90b191c2VyKHJxLT5pZnJfZGF0YSwgY29weV9vZl9wa3RfbG9nLCBzaXplb2YoUEFDS0VUX0xPRykpKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9TRVRVUF9BR0dSOgotICAgICAgICB7Ci0gICAgICAgICAgICBXTUlfQUREQkFfUkVRX0NNRCBjbWQ7Ci0KLSAgICAgICAgICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIHVzZXJkYXRhLCBzaXplb2YoY21kKSkpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB3bWlfc2V0dXBfYWdncl9jbWQoYXItPmFyV21pLCBjbWQudGlkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfREVMRV9BR0dSOgotICAgICAgICB7Ci0gICAgICAgICAgICBXTUlfREVMQkFfUkVRX0NNRCBjbWQ7Ci0KLSAgICAgICAgICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIHVzZXJkYXRhLCBzaXplb2YoY21kKSkpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB3bWlfZGVsZXRlX2FnZ3JfY21kKGFyLT5hcldtaSwgY21kLnRpZCwgY21kLmlzX3NlbmRlcl9pbml0aWF0b3IpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9BTExPV19BR0dSOgotICAgICAgICB7Ci0gICAgICAgICAgICBXTUlfQUxMT1dfQUdHUl9DTUQgY21kOwotCi0gICAgICAgICAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgfSBlbHNlIGlmIChjb3B5X2Zyb21fdXNlcigmY21kLCB1c2VyZGF0YSwgc2l6ZW9mKGNtZCkpKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgd21pX2FsbG93X2FnZ3JfY21kKGFyLT5hcldtaSwgY21kLnR4X2FsbG93X2FnZ3IsIGNtZC5yeF9hbGxvd19hZ2dyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfU0VUX0hUX0NBUDoKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY29weV9mcm9tX3VzZXIoJmh0Q2FwLCB1c2VyZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGh0Q2FwKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0KLSAgICAgICAgICAgICAgICBpZiAod21pX3NldF9odF9jYXBfY21kKGFyLT5hcldtaSwgJmh0Q2FwKSAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfU0VUX0hUX09QOgotICAgICAgICB7Ci0gICAgICAgICAgICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY29weV9mcm9tX3VzZXIoJmh0T3AsIHVzZXJkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoaHRPcCkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgIH0gZWxzZSB7Ci0KLSAgICAgICAgICAgICAgICBpZiAod21pX3NldF9odF9vcF9jbWQoYXItPmFyV21pLCBodE9wLnN0YV9jaGFuX3dpZHRoKSAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX0FDTF9EQVRBOgotICAgICAgICB7Ci0gICAgICAgICAgICB2b2lkICpvc2J1ZiA9IE5VTEw7Ci0gICAgICAgICAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgfSBlbHNlIGlmIChhcjYwMDBfY3JlYXRlX2FjbF9kYXRhX29zYnVmKGRldiwgKHU4ICopdXNlcmRhdGEsICZvc2J1ZikgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHdtaV9kYXRhX2hkcl9hZGQoYXItPmFyV21pLCBvc2J1ZiwgREFUQV9NU0dUWVBFLCAwLCBXTUlfREFUQV9IRFJfREFUQV9UWVBFX0FDTCwwLE5VTEwpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19FUlIsKCJYSU9DVExfQUNMX0RBVEEgLSB3bWlfZGF0YV9oZHJfYWRkIGZhaWxlZFxuIikpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgZGF0YSBidWZmZXIgb3ZlciBIVEMgKi8KLSAgICAgICAgICAgICAgICAgICAgYXI2MDAwX2FjbF9kYXRhX3R4KG9zYnVmLCBhci0+YXJOZXREZXYpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9IQ0lfQ01EOgotICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyIHRtcF9idWZbNTEyXTsKLSAgICAgICAgICAgIHM4IGk7Ci0gICAgICAgICAgICBXTUlfSENJX0NNRCAqY21kID0gKFdNSV9IQ0lfQ01EICopdG1wX2J1ZjsKLSAgICAgICAgICAgIHU4IHNpemU7Ci0KLSAgICAgICAgICAgIHNpemUgPSBzaXplb2YoY21kLT5jbWRfYnVmX3N6KTsKLSAgICAgICAgICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNvcHlfZnJvbV91c2VyKGNtZCwgdXNlcmRhdGEsIHNpemUpKSB7Ci0gICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICB9IGVsc2UgaWYoY29weV9mcm9tX3VzZXIoY21kLT5idWYsIHVzZXJkYXRhICsgc2l6ZSwgY21kLT5jbWRfYnVmX3N6KSkgewotICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAod21pX3NlbmRfaGNpX2NtZChhci0+YXJXbWksIGNtZC0+YnVmLCBjbWQtPmNtZF9idWZfc3opICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICAgICAgfWVsc2UgaWYobG9naGNpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFfUFJJTlRGX0xPRygiSENJIENvbW1hbmQgVG8gUEFMIC0tPiBcbiIpOwotICAgICAgICAgICAgICAgICAgICBmb3IoaSA9IDA7IGkgPCBjbWQtPmNtZF9idWZfc3o7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgQV9QUklOVEZfTE9HKCIweCUwMnggIixjbWQtPmJ1ZltpXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZigoaSAlIDEwKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQV9QUklOVEZfTE9HKCJcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIEFfUFJJTlRGX0xPRygiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgQV9QUklOVEZfTE9HKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfV0xBTl9DT05OX1BSRUNFREVOQ0U6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFdNSV9TRVRfQlRfV0xBTl9DT05OX1BSRUNFREVOQ0UgY21kOwotICAgICAgICAgICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgdXNlcmRhdGEsIHNpemVvZihjbWQpKSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChjbWQucHJlY2VkZW5jZSA9PSBCVF9XTEFOX0NPTk5fUFJFQ0RFTkNFX1dMQU4gfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQucHJlY2VkZW5jZSA9PSBCVF9XTEFOX0NPTk5fUFJFQ0RFTkNFX1BBTCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIHdtaV9zZXRfd2xhbl9jb25uX3ByZWNlZGVuY2VfY21kKGFyLT5hcldtaSwgY21kLnByZWNlZGVuY2UpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlOVkFMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9BUF9HRVRfU1RBVDoKLSAgICAgICAgewotICAgICAgICAgICAgcmV0ID0gYXI2MDAwX2lvY3RsX2dldF9hcF9zdGF0cyhkZXYsIHJxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9TRVRfVFhfU0VMRUNUX1JBVEVTOgotICAgICAgICB7Ci0gICAgICAgICAgICBXTUlfU0VUX1RYX1NFTEVDVF9SQVRFU19DTUQgbWFza3M7Ci0KLSAgICAgICAgICAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgfSBlbHNlIGlmIChjb3B5X2Zyb21fdXNlcigmbWFza3MsIHVzZXJkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobWFza3MpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgICB9IGVsc2UgewotCi0gICAgICAgICAgICAgICAgaWYgKHdtaV9zZXRfdHhfc2VsZWN0X3JhdGVzX2NtZChhci0+YXJXbWksIG1hc2tzLnJhdGVNYXNrcykgIT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfQVBfR0VUX0hJRERFTl9TU0lEOgotICAgICAgICB7Ci0gICAgICAgICAgICBXTUlfQVBfSElEREVOX1NTSURfQ01EIHNzaWQ7Ci0gICAgICAgICAgICBzc2lkLmhpZGRlbl9zc2lkID0gYXItPmFwX2hpZGRlbl9zc2lkOwotCi0gICAgICAgICAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgfSBlbHNlIGlmKGNvcHlfdG9fdXNlcigoV01JX0FQX0hJRERFTl9TU0lEX0NNRCAqKXJxLT5pZnJfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzc2lkLCBzaXplb2YoV01JX0FQX0hJRERFTl9TU0lEX0NNRCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfQVBfR0VUX0NPVU5UUlk6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFdNSV9BUF9TRVRfQ09VTlRSWV9DTUQgY3R5OwotICAgICAgICAgICAgbWVtY3B5KGN0eS5jb3VudHJ5Q29kZSwgYXItPmFwX2NvdW50cnlfY29kZSwgMyk7Ci0KLSAgICAgICAgICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICB9IGVsc2UgaWYoY29weV90b191c2VyKChXTUlfQVBfU0VUX0NPVU5UUllfQ01EICopcnEtPmlmcl9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0eSwgc2l6ZW9mKFdNSV9BUF9TRVRfQ09VTlRSWV9DTUQpKSkgewotICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX0FQX0dFVF9XTU9ERToKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgIH0gZWxzZSBpZihjb3B5X3RvX3VzZXIoKHU4ICopcnEtPmlmcl9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFyLT5hcF93bW9kZSwgc2l6ZW9mKHU4KSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9BUF9HRVRfRFRJTToKLSAgICAgICAgewotICAgICAgICAgICAgV01JX0FQX1NFVF9EVElNX0NNRCBkdGltOwotICAgICAgICAgICAgZHRpbS5kdGltID0gYXItPmFwX2R0aW1fcGVyaW9kOwotCi0gICAgICAgICAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgfSBlbHNlIGlmKGNvcHlfdG9fdXNlcigoV01JX0FQX1NFVF9EVElNX0NNRCAqKXJxLT5pZnJfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkdGltLCBzaXplb2YoV01JX0FQX1NFVF9EVElNX0NNRCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfQVBfR0VUX0JJTlRWTDoKLSAgICAgICAgewotICAgICAgICAgICAgV01JX0JFQUNPTl9JTlRfQ01EIGJpOwotICAgICAgICAgICAgYmkuYmVhY29uSW50ZXJ2YWwgPSBhci0+YXBfYmVhY29uX2ludGVydmFsOwotCi0gICAgICAgICAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgfSBlbHNlIGlmKGNvcHlfdG9fdXNlcigoV01JX0JFQUNPTl9JTlRfQ01EICopcnEtPmlmcl9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJpLCBzaXplb2YoV01JX0JFQUNPTl9JTlRfQ01EKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9BUF9HRVRfUlRTOgotICAgICAgICB7Ci0gICAgICAgICAgICBXTUlfU0VUX1JUU19DTUQgcnRzOwotICAgICAgICAgICAgcnRzLnRocmVzaG9sZCA9IGFyLT5hclJUUzsKLQkgICAgIAotICAgICAgICAgICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgIH0gZWxzZSBpZihjb3B5X3RvX3VzZXIoKFdNSV9TRVRfUlRTX0NNRCAqKXJxLT5pZnJfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZydHMsIHNpemVvZihXTUlfU0VUX1JUU19DTUQpKSkgewotICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX0ZFVENIX1RBUkdFVF9SRUdTOgotICAgICAgICB7Ci0gICAgICAgICAgICB1MzIgdGFyZ3JlZ3NbQVI2MDAzX0ZFVENIX1RBUkdfUkVHU19DT1VOVF07Ci0KLSAgICAgICAgICAgIGlmIChhci0+YXJUYXJnZXRUeXBlID09IFRBUkdFVF9UWVBFX0FSNjAwMykgewotICAgICAgICAgICAgICAgIGFyNmtfRmV0Y2hUYXJnZXRSZWdzKGhpZkRldmljZSwgdGFyZ3JlZ3MpOwotICAgICAgICAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIoKHUzMiAqKXJxLT5pZnJfZGF0YSwgJnRhcmdyZWdzLCBzaXplb2YodGFyZ3JlZ3MpKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRU9QTk9UU1VQUDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9BUF9TRVRfMTFCR19SQVRFU0VUOgotICAgICAgICB7Ci0gICAgICAgICAgICBXTUlfQVBfU0VUXzExQkdfUkFURVNFVF9DTUQgIHJhdGU7Ci0gICAgICAgICAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgfSBlbHNlIGlmIChjb3B5X2Zyb21fdXNlcigmcmF0ZSwgdXNlcmRhdGEsIHNpemVvZihyYXRlKSkpIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB3bWlfYXBfc2V0X3JhdGVzZXQoYXItPmFyV21pLCByYXRlLnJhdGVzZXQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX0dFVF9XTEFOX1NMRUVQX1NUQVRFOgotICAgICAgICB7Ci0gICAgICAgICAgICBXTUlfUkVQT1JUX1NMRUVQX1NUQVRFX0VWRU5UICB3bWlTbGVlcEV2ZW50IDsKLQotICAgICAgICAgICAgaWYgKGFyLT5hcldsYW5TdGF0ZSA9PSBXTEFOX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICB3bWlTbGVlcEV2ZW50LnNsZWVwU3RhdGUgPSBXTUlfUkVQT1JUX1NMRUVQX1NUQVRVU19JU19BV0FLRTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgd21pU2xlZXBFdmVudC5zbGVlcFN0YXRlID0gV01JX1JFUE9SVF9TTEVFUF9TVEFUVVNfSVNfREVFUF9TTEVFUDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJxLT5pZnJfaWZydS5pZnJ1X2l2YWx1ZSA9IGFyLT5hcldsYW5TdGF0ZTsgLyogcmV0dXJuIHZhbHVlICovCi0KLSAgICAgICAgICAgIGFyNjAwMF9zZW5kX2V2ZW50X3RvX2FwcChhciwgV01JX1JFUE9SVF9TTEVFUF9TVEFURV9FVkVOVElELCAodTggKikmd21pU2xlZXBFdmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoV01JX1JFUE9SVF9TTEVFUF9TVEFURV9FVkVOVElEKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotI2lmZGVmIENPTkZJR19QTQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfU0VUX0JUX0hXX1BPV0VSX1NUQVRFOgotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3RhdGU7Ci0JICAgIGlmIChnZXRfdXNlcihzdGF0ZSwgKHVuc2lnbmVkIGludCAqKXVzZXJkYXRhKSkgewotCQlyZXQgPSAtRUZBVUxUOwotCQlicmVhazsKLQkgICAgfQotICAgICAgICAgICAgaWYgKGFyNjAwMF9zZXRfYnRfaHdfc3RhdGUoYXIsIHN0YXRlKSE9IDApIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgfSAgICAgICAKLSAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQVI2MDAwX1hJT0NUTF9HRVRfQlRfSFdfUE9XRVJfU1RBVEU6Ci0gICAgICAgICAgICBycS0+aWZyX2lmcnUuaWZydV9pdmFsdWUgPSAhYXItPmFyQlRPZmY7IC8qIHJldHVybiB2YWx1ZSAqLwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfV01JX1NFVF9UWF9TR0lfUEFSQU06Ci0gICAgICAgIHsKLSAgICAgICAgICAgICBXTUlfU0VUX1RYX1NHSV9QQVJBTV9DTUQgU0dJQ21kOwotCi0gICAgICAgICAgICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICAgfSBlbHNlIGlmIChjb3B5X2Zyb21fdXNlcigmU0dJQ21kLCB1c2VyZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihTR0lDbWQpKSl7Ci0gICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICAgfSBlbHNlewotICAgICAgICAgICAgICAgICAgICAgaWYgKHdtaV9TR0lfY21kKGFyLT5hcldtaSwgU0dJQ21kLnNnaU1hc2ssIFNHSUNtZC5zZ2lQRVJUaHJlc2hvbGQpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlPOwotICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgfQotICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBBUjYwMDBfWElPQ1RMX0FERF9BUF9JTlRFUkZBQ0U6Ci0jaWZkZWYgQ09ORklHX0FQX1ZJUlRVQUxfQURBUFRFUl9TVVBQT1JUCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoYXIgYXBfaWZuYW1lW0lGTkFNU0laXSA9IHswLH07Ci0gICAgICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoYXBfaWZuYW1lLCB1c2VyZGF0YSwgSUZOQU1TSVopKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFyNjAwMF9hZGRfYXBfaW50ZXJmYWNlKGFyLCBhcF9pZm5hbWUpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKLSAgICAgICAgICAgICAgICB9IAotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgcmV0ID0gLUVPUE5PVFNVUFA7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfUkVNT1ZFX0FQX0lOVEVSRkFDRToKLSNpZmRlZiBDT05GSUdfQVBfVklSVFVBTF9BREFQVEVSX1NVUFBPUlQKLSAgICAgICAgICAgIGlmIChhcjYwMDBfcmVtb3ZlX2FwX2ludGVyZmFjZShhcikgIT0gMCkgewotICAgICAgICAgICAgICAgIHJldCA9IC1FSU87Ci0gICAgICAgICAgICB9IAotI2Vsc2UKLSAgICAgICAgICAgIHJldCA9IC1FT1BOT1RTVVBQOwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEFSNjAwMF9YSU9DVExfV01JX1NFVF9FWENFU1NfVFhfUkVUUllfVEhSRVM6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldCA9IGFyNjAwMF94aW9jdGxfc2V0X2V4Y2Vzc190eF9yZXRyeV90aHJlc19jbWQoZGV2LCB1c2VyZGF0YSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXQgPSAtRU9QTk9UU1VQUDsKLSAgICB9Ci0KLWlvY3RsX2RvbmU6Ci0gICAgcnRubF9sb2NrKCk7IC8qIHJlc3RvcmUgcnRubCBzdGF0ZSAqLwotICAgIGRldl9wdXQoZGV2KTsKLQotICAgIHJldHVybiByZXQ7Ci19Ci0KLXU4IG1hY19jbXBfd2lsZCh1OCAqbWFjLCB1OCAqbmV3X21hYywgdTggd2lsZCwgdTggbmV3X3dpbGQpCi17Ci0gICAgdTggaTsKLQotICAgIGZvcihpPTA7aTxBVEhfTUFDX0xFTjtpKyspIHsKLSAgICAgICAgaWYoKHdpbGQgJiAxPDxpKSAmJiAobmV3X3dpbGQgJiAxPDxpKSkgY29udGludWU7Ci0gICAgICAgIGlmKG1hY1tpXSAhPSBuZXdfbWFjW2ldKSByZXR1cm4gMTsKLSAgICB9Ci0gICAgaWYoKG1lbWNtcChuZXdfbWFjLCBudWxsX21hYywgNik9PTApICYmIG5ld193aWxkICYmCi0gICAgICAgICh3aWxkICE9IG5ld193aWxkKSkgewotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdTggYWNsX2FkZF9kZWxfbWFjKFdNSV9BUF9BQ0wgKmEsIFdNSV9BUF9BQ0xfTUFDX0NNRCAqYWNsKQotewotICAgIHM4IGFscmVhZHlfYXZhaWw9LTEsIGZyZWVfc2xvdD0tMSwgaTsKLQotICAgIC8qIFRvIGNoZWNrIHdoZXRoZXIgdGhpcyBtYWMgaXMgYWxyZWFkeSB0aGVyZSBpbiBvdXIgbGlzdCAqLwotICAgIGZvcihpPUFQX0FDTF9TSVpFLTE7aT49MDtpLS0pCi0gICAgewotICAgICAgICBpZihtYWNfY21wX3dpbGQoYS0+YWNsX21hY1tpXSwgYWNsLT5tYWMsIGEtPndpbGRjYXJkW2ldLAotICAgICAgICAgICAgYWNsLT53aWxkY2FyZCk9PTApCi0gICAgICAgICAgICAgICAgYWxyZWFkeV9hdmFpbCA9IGk7Ci0KLSAgICAgICAgaWYoISgoMSA8PCBpKSAmIGEtPmluZGV4KSkKLSAgICAgICAgICAgIGZyZWVfc2xvdCA9IGk7Ci0gICAgfQotCi0gICAgaWYoYWNsLT5hY3Rpb24gPT0gQUREX01BQ19BRERSKQotICAgIHsKLSAgICAgICAgLyogRG9udCBhZGQgbWFjIGlmIGl0IGlzIGFscmVhZHkgYXZhaWxhYmxlICovCi0gICAgICAgIGlmKChhbHJlYWR5X2F2YWlsID49IDApIHx8IChmcmVlX3Nsb3QgPT0gLTEpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgbWVtY3B5KGEtPmFjbF9tYWNbZnJlZV9zbG90XSwgYWNsLT5tYWMsIEFUSF9NQUNfTEVOKTsKLSAgICAgICAgYS0+aW5kZXggPSBhLT5pbmRleCB8ICgxIDw8IGZyZWVfc2xvdCk7Ci0gICAgICAgIGFjbC0+aW5kZXggPSBmcmVlX3Nsb3Q7Ci0gICAgICAgIGEtPndpbGRjYXJkW2ZyZWVfc2xvdF0gPSBhY2wtPndpbGRjYXJkOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgZWxzZSBpZihhY2wtPmFjdGlvbiA9PSBERUxfTUFDX0FERFIpCi0gICAgewotICAgICAgICBpZihhY2wtPmluZGV4ID4gQVBfQUNMX1NJWkUpCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICBpZighKGEtPmluZGV4ICYgKDEgPDwgYWNsLT5pbmRleCkpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgQV9NRU1aRVJPKGEtPmFjbF9tYWNbYWNsLT5pbmRleF0sQVRIX01BQ19MRU4pOwotICAgICAgICBhLT5pbmRleCA9IGEtPmluZGV4ICYgfigxIDw8IGFjbC0+aW5kZXgpOwotICAgICAgICBhLT53aWxkY2FyZFthY2wtPmluZGV4XSA9IDA7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9uZXRidWYuYyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvb3MvbGludXgvbmV0YnVmLmMKaW5kZXggYTljOTZiMy4uOTYzYTJmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9uZXRidWYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L25ldGJ1Zi5jCkBAIC0yMiw3ICsyMiw2IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogI2luY2x1ZGUgPGFfY29uZmlnLmg+CiAjaW5jbHVkZSAiYXRoZGVmcy5oIgotI2luY2x1ZGUgImFfdHlwZXMuaCIKICNpbmNsdWRlICJhX29zYXBpLmgiCiAjaW5jbHVkZSAiaHRjX3BhY2tldC5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L3dpcmVsZXNzX2V4dC5jIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC93aXJlbGVzc19leHQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI3Nzk0My4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L3dpcmVsZXNzX2V4dC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjcyMyArMCwwIEBACi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ29weXJpZ2h0IChjKSAyMDA0LTIwMTAgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCi0vLyBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIAotLy8KLS8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotLy8gcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLS8vCi0vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLS8vIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLS8vIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0vLyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0vLyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLS8vIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0vLyBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotLy8KLS8vCi0vLwotLy8gQXV0aG9yKHMpOiA9IkF0aGVyb3MiCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jaW5jbHVkZSAiYXI2MDAwX2Rydi5oIgotCi0jZGVmaW5lIElXRV9TVFJFQU1fQUREX0VWRU5UKHAxLCBwMiwgcDMsIHA0LCBwNSkgXAotICAgIGl3ZV9zdHJlYW1fYWRkX2V2ZW50KChwMSksIChwMiksIChwMyksIChwNCksIChwNSkpCi0KLSNkZWZpbmUgSVdFX1NUUkVBTV9BRERfUE9JTlQocDEsIHAyLCBwMywgcDQsIHA1KSBcCi0gICAgaXdlX3N0cmVhbV9hZGRfcG9pbnQoKHAxKSwgKHAyKSwgKHAzKSwgKHA0KSwgKHA1KSkKLQotI2RlZmluZSBJV0VfU1RSRUFNX0FERF9WQUxVRShwMSwgcDIsIHAzLCBwNCwgcDUsIHA2KSBcCi0gICAgaXdlX3N0cmVhbV9hZGRfdmFsdWUoKHAxKSwgKHAyKSwgKHAzKSwgKHA0KSwgKHA1KSwgKHA2KSkKLQotc3RhdGljIHZvaWQgYXI2MDAwX3NldF9xdWFsaXR5KHN0cnVjdCBpd19xdWFsaXR5ICppcSwgczggcnNzaSk7Ci1leHRlcm4gdW5zaWduZWQgaW50IHdtaXRpbWVvdXQ7Ci1leHRlcm4gQV9XQUlUUVVFVUVfSEVBRCBhckV2ZW50OwotCi0jaWYgV0lSRUxFU1NfRVhUID4gMTQKLS8qCi0gKiBFbmNvZGUgYSBXUEEgb3IgUlNOIGluZm9ybWF0aW9uIGVsZW1lbnQgYXMgYSBjdXN0b20KLSAqIGVsZW1lbnQgdXNpbmcgdGhlIGhvc3RhcCBmb3JtYXQuCi0gKi8KLXN0YXRpYyB1X2ludAotZW5jb2RlX2llKHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUsCi0gICAgY29uc3QgdV9pbnQ4X3QgKmllLCBzaXplX3QgaWVsZW4sCi0gICAgY29uc3QgY2hhciAqbGVhZGVyLCBzaXplX3QgbGVhZGVyX2xlbikKLXsKLSAgICB1X2ludDhfdCAqcDsKLSAgICBpbnQgaTsKLQotICAgIGlmIChidWZzaXplIDwgbGVhZGVyX2xlbikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcCA9IGJ1ZjsKLSAgICBtZW1jcHkocCwgbGVhZGVyLCBsZWFkZXJfbGVuKTsKLSAgICBidWZzaXplIC09IGxlYWRlcl9sZW47Ci0gICAgcCArPSBsZWFkZXJfbGVuOwotICAgIGZvciAoaSA9IDA7IGkgPCBpZWxlbiAmJiBidWZzaXplID4gMjsgaSsrKQotICAgIHsKLSAgICAgICAgcCArPSBzcHJpbnRmKChjaGFyKilwLCAiJTAyeCIsIGllW2ldKTsKLSAgICAgICAgYnVmc2l6ZSAtPSAyOwotICAgIH0KLSAgICByZXR1cm4gKGkgPT0gaWVsZW4gPyBwIC0gKHVfaW50OF90ICopYnVmIDogMCk7Ci19Ci0jZW5kaWYgLyogV0lSRUxFU1NfRVhUID4gMTQgKi8KLQotc3RhdGljIHU4IGdldF9ic3NfcGh5X2NhcGFiaWxpdHkoYnNzX3QgKmJzcykKLXsKLSAgICB1OCBjYXBhYmlsaXR5ID0gMDsKLSAgICBzdHJ1Y3QgaWVlZTgwMjExX2NvbW1vbl9pZSAqY2llID0gJmJzcy0+bmlfY2llOwotI2RlZmluZSBDSEFOX0lTXzExQSh4KSAgICAgICAgICAgICAgKCEoKHggPj0gMjQxMikgJiYgKHggPD0gMjQ4NCkpKQotICAgIGlmIChDSEFOX0lTXzExQShjaWUtPmllX2NoYW4pKSB7Ci0gICAgICAgIGlmIChjaWUtPmllX2h0Y2FwKSB7Ci0gICAgICAgICAgICBjYXBhYmlsaXR5ID0gV01JXzExTkFfQ0FQQUJJTElUWTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNhcGFiaWxpdHkgPSBXTUlfMTFBX0NBUEFCSUxJVFk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKChjaWUtPmllX2VycCkgfHwgKGNpZS0+aWVfeHJhdGVzKSkgewotICAgICAgICBpZiAoY2llLT5pZV9odGNhcCkgewotICAgICAgICAgICAgY2FwYWJpbGl0eSA9IFdNSV8xMU5HX0NBUEFCSUxJVFk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjYXBhYmlsaXR5ID0gV01JXzExR19DQVBBQklMSVRZOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBjYXBhYmlsaXR5OwotfQotCi12b2lkCi1hcjYwMDBfc2Nhbl9ub2RlKHZvaWQgKmFyZywgYnNzX3QgKm5pKQotewotICAgIHN0cnVjdCBpd19ldmVudCBpd2U7Ci0jaWYgV0lSRUxFU1NfRVhUID4gMTQKLSAgICBjaGFyIGJ1ZlsyNTZdOwotI2VuZGlmCi0gICAgc3RydWN0IGFyX2dpd3NjYW5fcGFyYW0gKnBhcmFtOwotICAgIGNoYXIgKmN1cnJlbnRfZXY7Ci0gICAgY2hhciAqZW5kX2J1ZjsKLSAgICBzdHJ1Y3QgaWVlZTgwMjExX2NvbW1vbl9pZSAgKmNpZTsKLSAgICBjaGFyICpjdXJyZW50X3ZhbDsKLSAgICBzMzIgajsKLSAgICB1MzIgcmF0ZV9sZW4sIGRhdGFfbGVuID0gMDsKLQotICAgIHBhcmFtID0gKHN0cnVjdCBhcl9naXdzY2FuX3BhcmFtICopYXJnOwotCi0gICAgY3VycmVudF9ldiA9IHBhcmFtLT5jdXJyZW50X2V2OwotICAgIGVuZF9idWYgPSBwYXJhbS0+ZW5kX2J1ZjsKLQotICAgIGNpZSA9ICZuaS0+bmlfY2llOwotCi0gICAgaWYgKChlbmRfYnVmIC0gY3VycmVudF9ldikgPiBJV19FVl9BRERSX0xFTikKLSAgICB7Ci0gICAgICAgIEFfTUVNWkVSTygmaXdlLCBzaXplb2YoaXdlKSk7Ci0gICAgICAgIGl3ZS5jbWQgPSBTSU9DR0lXQVA7Ci0gICAgICAgIGl3ZS51LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotICAgICAgICBtZW1jcHkoaXdlLnUuYXBfYWRkci5zYV9kYXRhLCBuaS0+bmlfbWFjYWRkciwgNik7Ci0gICAgICAgIGN1cnJlbnRfZXYgPSBJV0VfU1RSRUFNX0FERF9FVkVOVChwYXJhbS0+aW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpd2UsIElXX0VWX0FERFJfTEVOKTsKLSAgICB9Ci0gICAgcGFyYW0tPmJ5dGVzX25lZWRlZCArPSBJV19FVl9BRERSX0xFTjsKLQotICAgIGRhdGFfbGVuID0gY2llLT5pZV9zc2lkWzFdICsgSVdfRVZfUE9JTlRfTEVOOwotICAgIGlmICgoZW5kX2J1ZiAtIGN1cnJlbnRfZXYpID4gZGF0YV9sZW4pCi0gICAgewotICAgICAgICBBX01FTVpFUk8oJml3ZSwgc2l6ZW9mKGl3ZSkpOwotICAgICAgICBpd2UuY21kID0gU0lPQ0dJV0VTU0lEOwotICAgICAgICBpd2UudS5kYXRhLmZsYWdzID0gMTsKLSAgICAgICAgaXdlLnUuZGF0YS5sZW5ndGggPSBjaWUtPmllX3NzaWRbMV07Ci0gICAgICAgIGN1cnJlbnRfZXYgPSBJV0VfU1RSRUFNX0FERF9QT0lOVChwYXJhbS0+aW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpd2UsIChjaGFyKikmY2llLT5pZV9zc2lkWzJdKTsKLSAgICB9Ci0gICAgcGFyYW0tPmJ5dGVzX25lZWRlZCArPSBkYXRhX2xlbjsKLQotICAgIGlmIChjaWUtPmllX2NhcEluZm8gJiAoSUVFRTgwMjExX0NBUElORk9fRVNTfElFRUU4MDIxMV9DQVBJTkZPX0lCU1MpKSB7Ci0gICAgICAgIGlmICgoZW5kX2J1ZiAtIGN1cnJlbnRfZXYpID4gSVdfRVZfVUlOVF9MRU4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFfTUVNWkVSTygmaXdlLCBzaXplb2YoaXdlKSk7Ci0gICAgICAgICAgICBpd2UuY21kID0gU0lPQ0dJV01PREU7Ci0gICAgICAgICAgICBpd2UudS5tb2RlID0gY2llLT5pZV9jYXBJbmZvICYgSUVFRTgwMjExX0NBUElORk9fRVNTID8KLSAgICAgICAgICAgICAgICAgICAgICAgICBJV19NT0RFX01BU1RFUiA6IElXX01PREVfQURIT0M7Ci0gICAgICAgICAgICBjdXJyZW50X2V2ID0gSVdFX1NUUkVBTV9BRERfRVZFTlQocGFyYW0tPmluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOwotICAgICAgICB9Ci0gICAgICAgIHBhcmFtLT5ieXRlc19uZWVkZWQgKz0gSVdfRVZfVUlOVF9MRU47Ci0gICAgfQotCi0gICAgaWYgKChlbmRfYnVmIC0gY3VycmVudF9ldikgPiBJV19FVl9GUkVRX0xFTikKLSAgICB7Ci0gICAgICAgIEFfTUVNWkVSTygmaXdlLCBzaXplb2YoaXdlKSk7Ci0gICAgICAgIGl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKLSAgICAgICAgaXdlLnUuZnJlcS5tID0gY2llLT5pZV9jaGFuICogMTAwMDAwOwotICAgICAgICBpd2UudS5mcmVxLmUgPSAxOwotICAgICAgICBjdXJyZW50X2V2ID0gSVdFX1NUUkVBTV9BRERfRVZFTlQocGFyYW0tPmluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXdlLCBJV19FVl9GUkVRX0xFTik7Ci0gICAgfQotICAgIHBhcmFtLT5ieXRlc19uZWVkZWQgKz0gSVdfRVZfRlJFUV9MRU47Ci0KLSAgICBpZiAoKGVuZF9idWYgLSBjdXJyZW50X2V2KSA+IElXX0VWX1FVQUxfTEVOKQotICAgIHsKLSAgICAgICAgQV9NRU1aRVJPKCZpd2UsIHNpemVvZihpd2UpKTsKLSAgICAgICAgaXdlLmNtZCA9IElXRVZRVUFMOwotICAgICAgICBhcjYwMDBfc2V0X3F1YWxpdHkoJml3ZS51LnF1YWwsIG5pLT5uaV9zbnIpOwotICAgICAgICBjdXJyZW50X2V2ID0gSVdFX1NUUkVBTV9BRERfRVZFTlQocGFyYW0tPmluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXdlLCBJV19FVl9RVUFMX0xFTik7Ci0gICAgfQotICAgIHBhcmFtLT5ieXRlc19uZWVkZWQgKz0gSVdfRVZfUVVBTF9MRU47Ci0KLSAgICBpZiAoKGVuZF9idWYgLSBjdXJyZW50X2V2KSA+IElXX0VWX1BPSU5UX0xFTikKLSAgICB7Ci0gICAgICAgIEFfTUVNWkVSTygmaXdlLCBzaXplb2YoaXdlKSk7Ci0gICAgICAgIGl3ZS5jbWQgPSBTSU9DR0lXRU5DT0RFOwotICAgICAgICBpZiAoY2llLT5pZV9jYXBJbmZvICYgSUVFRTgwMjExX0NBUElORk9fUFJJVkFDWSkgewotICAgICAgICAgICAgaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9FTkFCTEVEIHwgSVdfRU5DT0RFX05PS0VZOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKLSAgICAgICAgfQotICAgICAgICBpd2UudS5kYXRhLmxlbmd0aCA9IDA7Ci0gICAgICAgIGN1cnJlbnRfZXYgPSBJV0VfU1RSRUFNX0FERF9QT0lOVChwYXJhbS0+aW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpd2UsICIiKTsKLSAgICB9Ci0gICAgcGFyYW0tPmJ5dGVzX25lZWRlZCArPSBJV19FVl9QT0lOVF9MRU47Ci0KLSAgICAvKiBzdXBwb3J0ZWQgYml0IHJhdGUgKi8KLSAgICBBX01FTVpFUk8oJml3ZSwgc2l6ZW9mKGl3ZSkpOwotICAgIGl3ZS5jbWQgPSBTSU9DR0lXUkFURTsKLSAgICBpd2UudS5iaXRyYXRlLmZpeGVkID0gMDsKLSAgICBpd2UudS5iaXRyYXRlLmRpc2FibGVkID0gMDsKLSAgICBpd2UudS5iaXRyYXRlLnZhbHVlID0gMDsKLSAgICBjdXJyZW50X3ZhbCA9IGN1cnJlbnRfZXYgKyBJV19FVl9MQ1BfTEVOOwotICAgIHBhcmFtLT5ieXRlc19uZWVkZWQgKz0gSVdfRVZfTENQX0xFTjsKLQotICAgIGlmIChjaWUtPmllX3JhdGVzICE9IE5VTEwpIHsKLSAgICAgICAgcmF0ZV9sZW4gPSBjaWUtPmllX3JhdGVzWzFdOwotICAgICAgICBkYXRhX2xlbiA9IChyYXRlX2xlbiAqIChJV19FVl9QQVJBTV9MRU4gLSBJV19FVl9MQ1BfTEVOKSk7Ci0gICAgICAgIGlmICgoZW5kX2J1ZiAtIGN1cnJlbnRfZXYpID4gZGF0YV9sZW4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCByYXRlX2xlbjsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgdmFsOwotICAgICAgICAgICAgICAgICAgICB2YWwgPSBjaWUtPmllX3JhdGVzWzIgKyBqXTsKLSAgICAgICAgICAgICAgICAgICAgaXdlLnUuYml0cmF0ZS52YWx1ZSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAodmFsID49IDB4ODApPyAoKHZhbCAtIDB4ODApICogNTAwMDAwKTogKHZhbCAqIDUwMDAwMCk7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfdmFsID0gSVdFX1NUUkVBTV9BRERfVkFMVUUocGFyYW0tPmluZm8sIGN1cnJlbnRfZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF92YWwsIGVuZF9idWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJml3ZSwgSVdfRVZfUEFSQU1fTEVOKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBwYXJhbS0+Ynl0ZXNfbmVlZGVkICs9IGRhdGFfbGVuOwotICAgIH0KLQotICAgIGlmIChjaWUtPmllX3hyYXRlcyAhPSBOVUxMKSB7Ci0gICAgICAgIHJhdGVfbGVuID0gY2llLT5pZV94cmF0ZXNbMV07Ci0gICAgICAgIGRhdGFfbGVuID0gKHJhdGVfbGVuICogKElXX0VWX1BBUkFNX0xFTiAtIElXX0VWX0xDUF9MRU4pKTsKLSAgICAgICAgaWYgKChlbmRfYnVmIC0gY3VycmVudF9ldikgPiBkYXRhX2xlbikKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHJhdGVfbGVuOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciB2YWw7Ci0gICAgICAgICAgICAgICAgICAgIHZhbCA9IGNpZS0+aWVfeHJhdGVzWzIgKyBqXTsKLSAgICAgICAgICAgICAgICAgICAgaXdlLnUuYml0cmF0ZS52YWx1ZSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAodmFsID49IDB4ODApPyAoKHZhbCAtIDB4ODApICogNTAwMDAwKTogKHZhbCAqIDUwMDAwMCk7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfdmFsID0gSVdFX1NUUkVBTV9BRERfVkFMVUUocGFyYW0tPmluZm8sIGN1cnJlbnRfZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF92YWwsIGVuZF9idWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJml3ZSwgSVdfRVZfUEFSQU1fTEVOKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBwYXJhbS0+Ynl0ZXNfbmVlZGVkICs9IGRhdGFfbGVuOwotICAgIH0KLSAgICAvKiByZW1vdmUgZml4ZWQgaGVhZGVyIGlmIG5vIHJhdGVzIHdlcmUgYWRkZWQgKi8KLSAgICBpZiAoKGN1cnJlbnRfdmFsIC0gY3VycmVudF9ldikgPiBJV19FVl9MQ1BfTEVOKQotICAgICAgICBjdXJyZW50X2V2ID0gY3VycmVudF92YWw7Ci0KLSNpZiBXSVJFTEVTU19FWFQgPj0gMTgKLSAgICAvKiBJRSAqLwotICAgIGlmIChjaWUtPmllX3dwYSAhPSBOVUxMKSB7Ci0gICAgICAgIGRhdGFfbGVuID0gY2llLT5pZV93cGFbMV0gKyAyICsgSVdfRVZfUE9JTlRfTEVOOwotICAgICAgICBpZiAoKGVuZF9idWYgLSBjdXJyZW50X2V2KSA+IGRhdGFfbGVuKQotICAgICAgICB7Ci0gICAgICAgICAgICBBX01FTVpFUk8oJml3ZSwgc2l6ZW9mKGl3ZSkpOwotICAgICAgICAgICAgaXdlLmNtZCA9IElXRVZHRU5JRTsKLSAgICAgICAgICAgIGl3ZS51LmRhdGEubGVuZ3RoID0gY2llLT5pZV93cGFbMV0gKyAyOwotICAgICAgICAgICAgY3VycmVudF9ldiA9IElXRV9TVFJFQU1fQUREX1BPSU5UKHBhcmFtLT5pbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpd2UsIChjaGFyKiljaWUtPmllX3dwYSk7Ci0gICAgICAgIH0KLSAgICAgICAgcGFyYW0tPmJ5dGVzX25lZWRlZCArPSBkYXRhX2xlbjsKLSAgICB9Ci0KLSAgICBpZiAoY2llLT5pZV9yc24gIT0gTlVMTCAmJiBjaWUtPmllX3JzblswXSA9PSBJRUVFODAyMTFfRUxFTUlEX1JTTikgewotICAgICAgICBkYXRhX2xlbiA9IGNpZS0+aWVfcnNuWzFdICsgMiArIElXX0VWX1BPSU5UX0xFTjsKLSAgICAgICAgaWYgKChlbmRfYnVmIC0gY3VycmVudF9ldikgPiBkYXRhX2xlbikKLSAgICAgICAgewotICAgICAgICAgICAgQV9NRU1aRVJPKCZpd2UsIHNpemVvZihpd2UpKTsKLSAgICAgICAgICAgIGl3ZS5jbWQgPSBJV0VWR0VOSUU7Ci0gICAgICAgICAgICBpd2UudS5kYXRhLmxlbmd0aCA9IGNpZS0+aWVfcnNuWzFdICsgMjsKLSAgICAgICAgICAgIGN1cnJlbnRfZXYgPSBJV0VfU1RSRUFNX0FERF9QT0lOVChwYXJhbS0+aW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXdlLCAoY2hhciopY2llLT5pZV9yc24pOwotICAgICAgICB9Ci0gICAgICAgIHBhcmFtLT5ieXRlc19uZWVkZWQgKz0gZGF0YV9sZW47Ci0gICAgfQotCi0jZW5kaWYgLyogV0lSRUxFU1NfRVhUID49IDE4ICovCi0KLSAgICBpZiAoKGVuZF9idWYgLSBjdXJyZW50X2V2KSA+IElXX0VWX0NIQVJfTEVOKQotICAgIHsKLSAgICAgICAgLyogcHJvdG9jb2wgKi8KLSAgICAgICAgQV9NRU1aRVJPKCZpd2UsIHNpemVvZihpd2UpKTsKLSAgICAgICAgaXdlLmNtZCA9IFNJT0NHSVdOQU1FOwotICAgICAgICBzd2l0Y2ggKGdldF9ic3NfcGh5X2NhcGFiaWxpdHkobmkpKSB7Ci0gICAgICAgIGNhc2UgV01JXzExQV9DQVBBQklMSVRZOgotICAgICAgICAgICAgc25wcmludGYoaXdlLnUubmFtZSwgSUZOQU1TSVosICJJRUVFIDgwMi4xMWEiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdNSV8xMUdfQ0FQQUJJTElUWToKLSAgICAgICAgICAgIHNucHJpbnRmKGl3ZS51Lm5hbWUsIElGTkFNU0laLCAiSUVFRSA4MDIuMTFnIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXTUlfMTFOQV9DQVBBQklMSVRZOgotICAgICAgICAgICAgc25wcmludGYoaXdlLnUubmFtZSwgSUZOQU1TSVosICJJRUVFIDgwMi4xMW5hIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXTUlfMTFOR19DQVBBQklMSVRZOgotICAgICAgICAgICAgc25wcmludGYoaXdlLnUubmFtZSwgSUZOQU1TSVosICJJRUVFIDgwMi4xMW5nIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHNucHJpbnRmKGl3ZS51Lm5hbWUsIElGTkFNU0laLCAiSUVFRSA4MDIuMTFiIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjdXJyZW50X2V2ID0gSVdFX1NUUkVBTV9BRERfRVZFTlQocGFyYW0tPmluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXdlLCBJV19FVl9DSEFSX0xFTik7Ci0gICAgfQotICAgIHBhcmFtLT5ieXRlc19uZWVkZWQgKz0gSVdfRVZfQ0hBUl9MRU47Ci0KLSNpZiBXSVJFTEVTU19FWFQgPiAxNAotICAgIEFfTUVNWkVSTygmaXdlLCBzaXplb2YoaXdlKSk7Ci0gICAgaXdlLmNtZCA9IElXRVZDVVNUT007Ci0gICAgaXdlLnUuZGF0YS5sZW5ndGggPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiYmNuX2ludD0lZCIsIGNpZS0+aWVfYmVhY29uSW50KTsKLSAgICBkYXRhX2xlbiA9IGl3ZS51LmRhdGEubGVuZ3RoICsgSVdfRVZfUE9JTlRfTEVOOwotICAgIGlmICgoZW5kX2J1ZiAtIGN1cnJlbnRfZXYpID4gZGF0YV9sZW4pCi0gICAgewotICAgICAgICBjdXJyZW50X2V2ID0gSVdFX1NUUkVBTV9BRERfUE9JTlQocGFyYW0tPmluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXdlLCBidWYpOwotICAgIH0KLSAgICBwYXJhbS0+Ynl0ZXNfbmVlZGVkICs9IGRhdGFfbGVuOwotCi0jaWYgV0lSRUxFU1NfRVhUIDwgMTgKLSAgICBpZiAoY2llLT5pZV93cGEgIT0gTlVMTCkgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciB3cGFfbGVhZGVyW10gPSAid3BhX2llPSI7Ci0gICAgICAgIGRhdGFfbGVuID0gKHNpemVvZih3cGFfbGVhZGVyKSAtIDEpICsgKChjaWUtPmllX3dwYVsxXSsyKSAqIDIpICsgSVdfRVZfUE9JTlRfTEVOOwotICAgICAgICBpZiAoKGVuZF9idWYgLSBjdXJyZW50X2V2KSA+IGRhdGFfbGVuKQotICAgICAgICB7Ci0gICAgICAgICAgICBBX01FTVpFUk8oJml3ZSwgc2l6ZW9mKGl3ZSkpOwotICAgICAgICAgICAgaXdlLmNtZCA9IElXRVZDVVNUT007Ci0gICAgICAgICAgICBpd2UudS5kYXRhLmxlbmd0aCA9IGVuY29kZV9pZShidWYsIHNpemVvZihidWYpLCBjaWUtPmllX3dwYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpZS0+aWVfd3BhWzFdKzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cGFfbGVhZGVyLCBzaXplb2Yod3BhX2xlYWRlciktMSk7Ci0KLSAgICAgICAgICAgIGlmIChpd2UudS5kYXRhLmxlbmd0aCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgY3VycmVudF9ldiA9IElXRV9TVFJFQU1fQUREX1BPSU5UKHBhcmFtLT5pbmZvLCBjdXJyZW50X2V2LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kX2J1ZiwgJml3ZSwgYnVmKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBwYXJhbS0+Ynl0ZXNfbmVlZGVkICs9IGRhdGFfbGVuOwotICAgIH0KLQotICAgIGlmIChjaWUtPmllX3JzbiAhPSBOVUxMICYmIGNpZS0+aWVfcnNuWzBdID09IElFRUU4MDIxMV9FTEVNSURfUlNOKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIHJzbl9sZWFkZXJbXSA9ICJyc25faWU9IjsKLSAgICAgICAgZGF0YV9sZW4gPSAoc2l6ZW9mKHJzbl9sZWFkZXIpIC0gMSkgKyAoKGNpZS0+aWVfcnNuWzFdKzIpICogMikgKyBJV19FVl9QT0lOVF9MRU47Ci0gICAgICAgIGlmICgoZW5kX2J1ZiAtIGN1cnJlbnRfZXYpID4gZGF0YV9sZW4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFfTUVNWkVSTygmaXdlLCBzaXplb2YoaXdlKSk7Ci0gICAgICAgICAgICBpd2UuY21kID0gSVdFVkNVU1RPTTsKLSAgICAgICAgICAgIGl3ZS51LmRhdGEubGVuZ3RoID0gZW5jb2RlX2llKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGNpZS0+aWVfcnNuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2llLT5pZV9yc25bMV0rMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzbl9sZWFkZXIsIHNpemVvZihyc25fbGVhZGVyKS0xKTsKLQotICAgICAgICAgICAgaWYgKGl3ZS51LmRhdGEubGVuZ3RoICE9IDApIHsKLSAgICAgICAgICAgICAgICBjdXJyZW50X2V2ID0gSVdFX1NUUkVBTV9BRERfUE9JTlQocGFyYW0tPmluZm8sIGN1cnJlbnRfZXYsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfYnVmLCAmaXdlLCBidWYpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHBhcmFtLT5ieXRlc19uZWVkZWQgKz0gZGF0YV9sZW47Ci0gICAgfQotI2VuZGlmIC8qIFdJUkVMRVNTX0VYVCA8IDE4ICovCi0KLSAgICBpZiAoY2llLT5pZV93bW0gIT0gTlVMTCkgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciB3bW1fbGVhZGVyW10gPSAid21tX2llPSI7Ci0gICAgICAgIGRhdGFfbGVuID0gKHNpemVvZih3bW1fbGVhZGVyKSAtIDEpICsgKChjaWUtPmllX3dtbVsxXSsyKSAqIDIpICsgSVdfRVZfUE9JTlRfTEVOOwotICAgICAgICBpZiAoKGVuZF9idWYgLSBjdXJyZW50X2V2KSA+IGRhdGFfbGVuKQotICAgICAgICB7Ci0gICAgICAgICAgICBBX01FTVpFUk8oJml3ZSwgc2l6ZW9mKGl3ZSkpOwotICAgICAgICAgICAgaXdlLmNtZCA9IElXRVZDVVNUT007Ci0gICAgICAgICAgICBpd2UudS5kYXRhLmxlbmd0aCA9IGVuY29kZV9pZShidWYsIHNpemVvZihidWYpLCBjaWUtPmllX3dtbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpZS0+aWVfd21tWzFdKzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3bW1fbGVhZGVyLCBzaXplb2Yod21tX2xlYWRlciktMSk7Ci0gICAgICAgICAgICBpZiAoaXdlLnUuZGF0YS5sZW5ndGggIT0gMCkgewotICAgICAgICAgICAgICAgIGN1cnJlbnRfZXYgPSBJV0VfU1RSRUFNX0FERF9QT0lOVChwYXJhbS0+aW5mbywgY3VycmVudF9ldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kX2J1ZiwgJml3ZSwgYnVmKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBwYXJhbS0+Ynl0ZXNfbmVlZGVkICs9IGRhdGFfbGVuOwotICAgIH0KLQotICAgIGlmIChjaWUtPmllX2F0aCAhPSBOVUxMKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIGF0aF9sZWFkZXJbXSA9ICJhdGhfaWU9IjsKLSAgICAgICAgZGF0YV9sZW4gPSAoc2l6ZW9mKGF0aF9sZWFkZXIpIC0gMSkgKyAoKGNpZS0+aWVfYXRoWzFdKzIpICogMikgKyBJV19FVl9QT0lOVF9MRU47Ci0gICAgICAgIGlmICgoZW5kX2J1ZiAtIGN1cnJlbnRfZXYpID4gZGF0YV9sZW4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFfTUVNWkVSTygmaXdlLCBzaXplb2YoaXdlKSk7Ci0gICAgICAgICAgICBpd2UuY21kID0gSVdFVkNVU1RPTTsKLSAgICAgICAgICAgIGl3ZS51LmRhdGEubGVuZ3RoID0gZW5jb2RlX2llKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGNpZS0+aWVfYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2llLT5pZV9hdGhbMV0rMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0aF9sZWFkZXIsIHNpemVvZihhdGhfbGVhZGVyKS0xKTsKLSAgICAgICAgICAgIGlmIChpd2UudS5kYXRhLmxlbmd0aCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgY3VycmVudF9ldiA9IElXRV9TVFJFQU1fQUREX1BPSU5UKHBhcmFtLT5pbmZvLCBjdXJyZW50X2V2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfYnVmLCAmaXdlLCBidWYpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHBhcmFtLT5ieXRlc19uZWVkZWQgKz0gZGF0YV9sZW47Ci0gICAgfQotCi0jaWZkZWYgV0FQSV9FTkFCTEUKLSAgICBpZiAoY2llLT5pZV93YXBpICE9IE5VTEwpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgd2FwaV9sZWFkZXJbXSA9ICJ3YXBpX2llPSI7Ci0gICAgICAgIGRhdGFfbGVuID0gKHNpemVvZih3YXBpX2xlYWRlcikgLSAxKSArICgoY2llLT5pZV93YXBpWzFdICsgMikgKiAyKSArIElXX0VWX1BPSU5UX0xFTjsKLSAgICAgICAgaWYgKChlbmRfYnVmIC0gY3VycmVudF9ldikgPiBkYXRhX2xlbikgewotICAgICAgICAgICAgQV9NRU1aRVJPKCZpd2UsIHNpemVvZihpd2UpKTsKLSAgICAgICAgICAgIGl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwotICAgICAgICAgICAgaXdlLnUuZGF0YS5sZW5ndGggPSBlbmNvZGVfaWUoYnVmLCBzaXplb2YoYnVmKSwgY2llLT5pZV93YXBpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaWUtPmllX3dhcGlbMV0gKyAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXBpX2xlYWRlciwgc2l6ZW9mKHdhcGlfbGVhZGVyKSAtIDEpOwotICAgICAgICAgICAgaWYgKGl3ZS51LmRhdGEubGVuZ3RoICE9IDApIHsKLSAgICAgICAgICAgICAgICBjdXJyZW50X2V2ID0gSVdFX1NUUkVBTV9BRERfUE9JTlQocGFyYW0tPmluZm8sIGN1cnJlbnRfZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZF9idWYsICZpd2UsIGJ1Zik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcGFyYW0tPmJ5dGVzX25lZWRlZCArPSBkYXRhX2xlbjsKLSAgICB9Ci0jZW5kaWYgLyogV0FQSV9FTkFCTEUgKi8KLQotI2VuZGlmIC8qIFdJUkVMRVNTX0VYVCA+IDE0ICovCi0KLSNpZiBXSVJFTEVTU19FWFQgPj0gMTgKLSAgICBpZiAoY2llLT5pZV93c2MgIT0gTlVMTCkgewotICAgICAgICBkYXRhX2xlbiA9IChjaWUtPmllX3dzY1sxXSArIDIpICsgSVdfRVZfUE9JTlRfTEVOOwotICAgICAgICBpZiAoKGVuZF9idWYgLSBjdXJyZW50X2V2KSA+IGRhdGFfbGVuKQotICAgICAgICB7Ci0gICAgICAgICAgICBBX01FTVpFUk8oJml3ZSwgc2l6ZW9mKGl3ZSkpOwotICAgICAgICAgICAgaXdlLmNtZCA9IElXRVZHRU5JRTsKLSAgICAgICAgICAgIGl3ZS51LmRhdGEubGVuZ3RoID0gY2llLT5pZV93c2NbMV0gKyAyOwotICAgICAgICAgICAgY3VycmVudF9ldiA9IElXRV9TVFJFQU1fQUREX1BPSU5UKHBhcmFtLT5pbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpd2UsIChjaGFyKiljaWUtPmllX3dzYyk7Ci0gICAgICAgIH0KLSAgICAgICAgcGFyYW0tPmJ5dGVzX25lZWRlZCArPSBkYXRhX2xlbjsKLSAgICB9Ci0jZW5kaWYgLyogV0lSRUxFU1NfRVhUID49IDE4ICovCi0KLSAgICBwYXJhbS0+Y3VycmVudF9ldiA9IGN1cnJlbnRfZXY7Ci19Ci0KLWludAotYXI2MDAwX2lvY3RsX2dpd3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQotewotICAgIHN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLSAgICBzdHJ1Y3QgYXJfZ2l3c2Nhbl9wYXJhbSBwYXJhbTsKLQotICAgIGlmIChpc19pd2lvY3RsX2FsbG93ZWQoYXItPmFyTmV4dE1vZGUsIGluZm8tPmNtZCkgIT0gMCkgewotICAgICAgICBBX1BSSU5URigid2V4dF9pb2N0bDogY21kPTB4JXggbm90IGFsbG93ZWQgaW4gdGhpcyBtb2RlXG4iLCBpbmZvLT5jbWQpOwotICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7Ci0gICAgfQotCi0gICAgaWYgKGFyLT5hcldsYW5TdGF0ZSA9PSBXTEFOX0RJU0FCTEVEKSB7Ci0gICAgICAgIHJldHVybiAtRUlPOwotICAgIH0KLQotICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0KLSAgICBwYXJhbS5jdXJyZW50X2V2ID0gZXh0cmE7Ci0gICAgcGFyYW0uZW5kX2J1ZiA9IGV4dHJhICsgZGF0YS0+bGVuZ3RoOwotICAgIHBhcmFtLmJ5dGVzX25lZWRlZCA9IDA7Ci0gICAgcGFyYW0uaW5mbyA9IGluZm87Ci0KLSAgICAvKiBUcmFuc2xhdGUgZGF0YSB0byBXRSBmb3JtYXQgKi8KLSAgICB3bWlfaXRlcmF0ZV9ub2Rlcyhhci0+YXJXbWksIGFyNjAwMF9zY2FuX25vZGUsICZwYXJhbSk7Ci0KLSAgICAvKiBjaGVjayBpZiBieXRlcyBuZWVkZWQgaXMgZ3JlYXRlciB0aGFuIGJ5dGVzIGNvbnN1bWVkICovCi0gICAgaWYgKHBhcmFtLmJ5dGVzX25lZWRlZCA+IChwYXJhbS5jdXJyZW50X2V2IC0gZXh0cmEpKQotICAgIHsKLSAgICAgICAgLyogUmVxdWVzdCBvbmUgYnl0ZSBtb3JlIHRoYW4gbmVlZGVkLCBiZWNhdXNlIHdoZW4gImRhdGEtPmxlbmd0aCIgZXF1YWxzIGJ5dGVzX25lZWRlZCwKLSAgICAgICAgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGFkZCB0aGUgbGFzdCBldmVudCBkYXRhIGFzIGFsbCBpd2Vfc3RyZWFtX2FkZF94eHh4eCgpIGZ1bmN0aW9ucwotICAgICAgICBjaGVja3Mgd2hldGhlciAoY3VyX3B0ciArIGV2X2xlbikgPCBlbmRfcHRyLCBkdWUgdG8gdGhpcyBvbmUgbW9yZSByZXRyeSB3b3VsZCBoYXBwZW4qLwotICAgICAgICBkYXRhLT5sZW5ndGggPSBwYXJhbS5ieXRlc19uZWVkZWQgKyAxOwotCi0gICAgICAgIHJldHVybiAtRTJCSUc7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLWV4dGVybiBpbnQgcmVjb25uZWN0X2ZsYWc7Ci0vKiBTSU9DU0lXRVNTSUQgKi8KLXN0YXRpYyBpbnQKLWFyNjAwMF9pb2N0bF9zaXdlc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqc3NpZCkKLXsKLSAgICBzdHJ1Y3QgYXI2X3NvZnRjICphciA9IChzdHJ1Y3QgYXI2X3NvZnRjICopYXI2a19wcml2KGRldik7Ci0gICAgaW50IHN0YXR1czsKLSAgICB1OCBhck5ldHdvcmtUeXBlOwotICAgIHU4IHByZXZNb2RlID0gYXItPmFyTmV0d29ya1R5cGU7Ci0KLSAgICBpZiAoaXNfaXdpb2N0bF9hbGxvd2VkKGFyLT5hck5leHRNb2RlLCBpbmZvLT5jbWQpICE9IDApIHsKLSAgICAgICAgQV9QUklOVEYoIndleHRfaW9jdGw6IGNtZD0weCV4IG5vdCBhbGxvd2VkIGluIHRoaXMgbW9kZVxuIiwgaW5mby0+Y21kKTsKLSAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOwotICAgIH0KLQotICAgIGlmIChhci0+YklzRGVzdHJveVByb2dyZXNzKSB7Ci0gICAgICAgIHJldHVybiAtRUJVU1k7Ci0gICAgfQotCi0gICAgaWYgKGFyLT5hcldsYW5TdGF0ZSA9PSBXTEFOX0RJU0FCTEVEKSB7Ci0gICAgICAgIHJldHVybiAtRUlPOwotICAgIH0KLQotICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0KLSNpZiBkZWZpbmVkKFdJUkVMRVNTX0VYVCkKLSAgICBpZiAoV0lSRUxFU1NfRVhUID49IDIwKSB7Ci0gICAgICAgIGRhdGEtPmxlbmd0aCArPSAxOwotICAgIH0KLSNlbmRpZgotCi0gICAgLyoKLSAgICAgKiBpd2NvbmZpZyBwYXNzZXMgYSBudWxsIHRlcm1pbmF0ZWQgc3RyaW5nIHdpdGggbGVuZ3RoIGluY2x1ZGluZyB0aGlzCi0gICAgICogc28gd2UgbmVlZCB0byBhY2NvdW50IGZvciB0aGlzCi0gICAgICovCi0gICAgaWYgKGRhdGEtPmZsYWdzICYmICghZGF0YS0+bGVuZ3RoIHx8IChkYXRhLT5sZW5ndGggPT0gMSkgfHwKLSAgICAgICAgKChkYXRhLT5sZW5ndGggLSAxKSA+IHNpemVvZihhci0+YXJTc2lkKSkpKQotICAgIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogc3NpZCBpcyBpbnZhbGlkCi0gICAgICAgICAqLwotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0KLSAgICBpZiAoYXItPmFyTmV4dE1vZGUgPT0gQVBfTkVUV09SSykgewotICAgICAgICAvKiBTU0lEIGNoYW5nZSBmb3IgQVAgbmV0d29yayAtIFdpbGwgdGFrZSBlZmZlY3Qgb24gY29tbWl0ICovCi0gICAgICAgIGlmKG1lbWNtcChhci0+YXJTc2lkLHNzaWQsMzIpICE9IDApIHsKLSAgICAgICAgICAgICBhci0+YXJTc2lkTGVuID0gZGF0YS0+bGVuZ3RoIC0gMTsKLSAgICAgICAgICAgIG1lbWNweShhci0+YXJTc2lkLCBzc2lkLCBhci0+YXJTc2lkTGVuKTsKLSAgICAgICAgICAgIGFyLT5hcF9wcm9maWxlX2ZsYWcgPSAxOyAvKiBUaGVyZSBpcyBhIGNoYW5nZSBpbiBwcm9maWxlICovCi0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfSBlbHNlIGlmKGFyLT5hck5ldHdvcmtUeXBlID09IEFQX05FVFdPUkspIHsKLSAgICAgICAgdTggY3RyOwotICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0gICAgICAgIC8qIFdlIGFyZSBzd2l0Y2hpbmcgZnJvbSBBUCB0byBTVEEgfCBJQlNTIG1vZGUsIGNsZWFudXAgdGhlIEFQIHN0YXRlICovCi0gICAgICAgIGZvciAoY3RyPTA7IGN0ciA8IEFQX01BWF9OVU1fU1RBOyBjdHIrKykgewotICAgICAgICAgICAgcmVtb3ZlX3N0YShhciwgYXItPnN0YV9saXN0W2N0cl0ubWFjLCAwKTsKLSAgICAgICAgfQotICAgICAgICBBX01VVEVYX0xPQ0soJmFyLT5tY2FzdHBzcUxvY2spOwotICAgICAgICB3aGlsZSAoIUFfTkVUQlVGX1FVRVVFX0VNUFRZKCZhci0+bWNhc3Rwc3EpKSB7Ci0gICAgICAgICAgICBza2IgPSBBX05FVEJVRl9ERVFVRVVFKCZhci0+bWNhc3Rwc3EpOwotICAgICAgICAgICAgQV9ORVRCVUZfRlJFRShza2IpOwotICAgICAgICB9Ci0gICAgICAgIEFfTVVURVhfVU5MT0NLKCZhci0+bWNhc3Rwc3FMb2NrKTsKLSAgICB9Ci0KLSAgICAvKiBBZGRlZCBmb3IgYnVnIDI1MTc4LCByZXR1cm4gYW4gSU9DVEwgZXJyb3IgaW5zdGVhZCBvZiB0YXJnZXQgcmV0dXJuaW5nCi0gICAgICAgSWxsZWdhbCBwYXJhbWV0ZXIgZXJyb3Igd2hlbiBlaXRoZXIgdGhlIEJTU0lEIG9yIGNoYW5uZWwgaXMgbWlzc2luZwotICAgICAgIGFuZCB3ZSBjYW5ub3Qgc2NhbiBkdXJpbmcgY29ubmVjdC4KLSAgICAgKi8KLSAgICBpZiAoZGF0YS0+ZmxhZ3MpIHsKLSAgICAgICAgaWYgKGFyLT5hclNraXBTY2FuID09IHRydWUgJiYKLSAgICAgICAgICAgIChhci0+YXJDaGFubmVsSGludCA9PSAwIHx8Ci0gICAgICAgICAgICAgKCFhci0+YXJSZXFCc3NpZFswXSAmJiAhYXItPmFyUmVxQnNzaWRbMV0gJiYgIWFyLT5hclJlcUJzc2lkWzJdICYmCi0gICAgICAgICAgICAgICFhci0+YXJSZXFCc3NpZFszXSAmJiAhYXItPmFyUmVxQnNzaWRbNF0gJiYgIWFyLT5hclJlcUJzc2lkWzVdKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGRvd25faW50ZXJydXB0aWJsZSgmYXItPmFyU2VtKSkgewotICAgICAgICByZXR1cm4gLUVSRVNUQVJUU1lTOwotICAgIH0KLQotICAgIGlmIChhci0+YklzRGVzdHJveVByb2dyZXNzIHx8IGFyLT5hcldsYW5TdGF0ZSA9PSBXTEFOX0RJU0FCTEVEKSB7Ci0gICAgICAgIHVwKCZhci0+YXJTZW0pOwotICAgICAgICByZXR1cm4gLUVCVVNZOwotICAgIH0KLQotICAgIGlmIChhci0+YXJUeFBlbmRpbmdbd21pX2dldF9jb250cm9sX2VwKGFyLT5hcldtaSldKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIHNsZWVwIHVudGlsIHRoZSBjb21tYW5kIHF1ZXVlIGRyYWlucwotICAgICAgICAgKi8KLSAgICAgICAgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoYXJFdmVudCwKLSAgICAgICAgICAgIGFyLT5hclR4UGVuZGluZ1t3bWlfZ2V0X2NvbnRyb2xfZXAoYXItPmFyV21pKV0gPT0gMCwgd21pdGltZW91dCAqIEhaKTsKLSAgICAgICAgaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gLUVJTlRSOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFkYXRhLT5mbGFncykgewotICAgICAgICBhck5ldHdvcmtUeXBlID0gYXItPmFyTmV0d29ya1R5cGU7Ci0jaWZkZWYgQVRINktfQ09ORklHX0NGRzgwMjExCi0gICAgICAgIGlmIChhci0+YXJDb25uZWN0ZWQpIHsKLSNlbmRpZiAvKiBBVEg2S19DT05GSUdfQ0ZHODAyMTEgKi8KLSAgICAgICAgICAgIGFyNjAwMF9pbml0X3Byb2ZpbGVfaW5mbyhhcik7Ci0jaWZkZWYgQVRINktfQ09ORklHX0NGRzgwMjExCi0gICAgICAgIH0KLSNlbmRpZiAvKiBBVEg2S19DT05GSUdfQ0ZHODAyMTEgKi8KLSAgICAgICAgYXItPmFyTmV0d29ya1R5cGUgPSBhck5ldHdvcmtUeXBlOwotICAgIH0KLQotICAgIC8qIFVwZGF0ZSB0aGUgYXJOZXR3b3JrVHlwZSAqLwotICAgIGFyLT5hck5ldHdvcmtUeXBlID0gYXItPmFyTmV4dE1vZGU7Ci0KLSAgICBpZiAoKHByZXZNb2RlICE9IEFQX05FVFdPUkspICYmCi0gICAgICAgICgoYXItPmFyU3NpZExlbikgfHwgCi0gICAgICAgICgoYXItPmFyU3NpZExlbiA9PSAwKSAmJiAoYXItPmFyQ29ubmVjdGVkIHx8IGFyLT5hckNvbm5lY3RQZW5kaW5nKSkgfHwgCi0gICAgICAgICghZGF0YS0+ZmxhZ3MpKSkKLSAgICB7Ci0gICAgICAgIGlmICgoIWRhdGEtPmZsYWdzKSB8fAotICAgICAgICAgICAgKG1lbWNtcChhci0+YXJTc2lkLCBzc2lkLCBhci0+YXJTc2lkTGVuKSAhPSAwKSB8fAotICAgICAgICAgICAgKGFyLT5hclNzaWRMZW4gIT0gKGRhdGEtPmxlbmd0aCAtIDEpKSkKLSAgICAgICAgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFNTSUQgc2V0IHByZXZpb3VzbHkgb3IgZXNzaWQgb2ZmIGhhcyBiZWVuIGlzc3VlZC4KLSAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgKiBEaXNjb25uZWN0IENvbW1hbmQgaXMgaXNzdWVkIGluIHR3byBjYXNlcyBhZnRlciB3bWkgaXMgcmVhZHkKLSAgICAgICAgICAgICAqICgxKSBzc2lkIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBwcmV2aW91cyBzZXR0aW5nCi0gICAgICAgICAgICAgKiAoMikgZXNzaWQgb2ZmIGhhcyBiZWVuIGlzc3VlZAotICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IHRydWUpIHsKLSAgICAgICAgICAgICAgICByZWNvbm5lY3RfZmxhZyA9IDA7Ci0gICAgICAgICAgICAgICAgc3RhdHVzID0gd21pX3NldFBta2lkX2NtZChhci0+YXJXbWksIGFyLT5hckJzc2lkLCBOVUxMLCAwKTsKLSAgICAgICAgICAgICAgICBhcjYwMDBfZGlzY29ubmVjdChhcik7Ci0gICAgICAgICAgICAgICAgQV9NRU1aRVJPKGFyLT5hclNzaWQsIHNpemVvZihhci0+YXJTc2lkKSk7Ci0gICAgICAgICAgICAgICAgYXItPmFyU3NpZExlbiA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKGFyLT5hclNraXBTY2FuID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFfTUVNWkVSTyhhci0+YXJSZXFCc3NpZCwgc2l6ZW9mKGFyLT5hclJlcUJzc2lkKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghZGF0YS0+ZmxhZ3MpIHsKLSAgICAgICAgICAgICAgICAgICAgdXAoJmFyLT5hclNlbSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgIHVwKCZhci0+YXJTZW0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFNTSUQgaXMgc2FtZSwgc28gd2UgYXNzdW1lIHByb2ZpbGUgaGFzbid0IGNoYW5nZWQuCi0gICAgICAgICAgICAgKiBJZiB0aGUgaW50ZXJmYWNlIGlzIHVwIGFuZCB3bWkgaXMgcmVhZHksIHdlIGlzc3VlCi0gICAgICAgICAgICAgKiBhIHJlY29ubmVjdCBjbWQuIElzc3VlIGEgcmVjb25uZWN0IG9ubHkgd2UgYXJlIGFscmVhZHkKLSAgICAgICAgICAgICAqIGNvbm5lY3RlZC4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYoKGFyLT5hckNvbm5lY3RlZCA9PSB0cnVlKSAmJiAoYXItPmFyV21pUmVhZHkgPT0gdHJ1ZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVjb25uZWN0X2ZsYWcgPSB0cnVlOwotICAgICAgICAgICAgICAgIHN0YXR1cyA9IHdtaV9yZWNvbm5lY3RfY21kKGFyLT5hcldtaSxhci0+YXJSZXFCc3NpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhci0+YXJDaGFubmVsSGludCk7Ci0gICAgICAgICAgICAgICAgdXAoJmFyLT5hclNlbSk7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXR1cykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlewotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICogRG9udCByZXR1cm4gaWYgY29ubmVjdCBpcyBwZW5kaW5nLgotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIGlmKCEoYXItPmFyQ29ubmVjdFBlbmRpbmcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVwKCZhci0+YXJTZW0pOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhci0+YXJTc2lkTGVuID0gZGF0YS0+bGVuZ3RoIC0gMTsKLSAgICBtZW1jcHkoYXItPmFyU3NpZCwgc3NpZCwgYXItPmFyU3NpZExlbik7Ci0KLSAgICBpZiAoYXI2MDAwX2Nvbm5lY3RfdG9fYXAoYXIpIT0gMCkgewotICAgICAgICB1cCgmYXItPmFyU2VtKTsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfWVsc2V7Ci0gICAgICB1cCgmYXItPmFyU2VtKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIFNJT0NHSVdFU1NJRCAqLwotc3RhdGljIGludAotYXI2MDAwX2lvY3RsX2dpd2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICplc3NpZCkKLXsKLSAgICBzdHJ1Y3QgYXI2X3NvZnRjICphciA9IChzdHJ1Y3QgYXI2X3NvZnRjICopYXI2a19wcml2KGRldik7Ci0KLSAgICBpZiAoaXNfaXdpb2N0bF9hbGxvd2VkKGFyLT5hck5leHRNb2RlLCBpbmZvLT5jbWQpICE9IDApIHsKLSAgICAgICAgQV9QUklOVEYoIndleHRfaW9jdGw6IGNtZD0weCV4IG5vdCBhbGxvd2VkIGluIHRoaXMgbW9kZVxuIiwgaW5mby0+Y21kKTsKLSAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOwotICAgIH0KLQotICAgIGlmIChhci0+YXJXbGFuU3RhdGUgPT0gV0xBTl9ESVNBQkxFRCkgewotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0KLSAgICBpZiAoIWFyLT5hclNzaWRMZW4pIHsKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgfQotCi0gICAgZGF0YS0+ZmxhZ3MgPSAxOwotICAgIGRhdGEtPmxlbmd0aCA9IGFyLT5hclNzaWRMZW47Ci0gICAgbWVtY3B5KGVzc2lkLCBhci0+YXJTc2lkLCBhci0+YXJTc2lkTGVuKTsKLQotICAgIHJldHVybiAwOwotfQotCi0KLXZvaWQgYXI2MDAwX2luc3RhbGxfc3RhdGljX3dlcF9rZXlzKHN0cnVjdCBhcjZfc29mdGMgKmFyKQotewotICAgIHU4IGluZGV4OwotICAgIHU4IGtleVVzYWdlOwotCi0gICAgZm9yIChpbmRleCA9IFdNSV9NSU5fS0VZX0lOREVYOyBpbmRleCA8PSBXTUlfTUFYX0tFWV9JTkRFWDsgaW5kZXgrKykgewotICAgICAgICBpZiAoYXItPmFyV2VwS2V5TGlzdFtpbmRleF0uYXJLZXlMZW4pIHsKLSAgICAgICAgICAgIGtleVVzYWdlID0gR1JPVVBfVVNBR0U7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gYXItPmFyRGVmVHhLZXlJbmRleCkgewotICAgICAgICAgICAgICAgIGtleVVzYWdlIHw9IFRYX1VTQUdFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgd21pX2FkZEtleV9jbWQoYXItPmFyV21pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBXRVBfQ1JZUFQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlVc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyLT5hcldlcEtleUxpc3RbaW5kZXhdLmFyS2V5TGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyLT5hcldlcEtleUxpc3RbaW5kZXhdLmFyS2V5LCBLRVlfT1BfSU5JVF9WQUwsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBOT19TWU5DX1dNSUZMQUcpOwotICAgICAgICB9Ci0gICAgfQotfQotCi0vKgotICogU0lPQ1NJV1JBVEUKLSAqLwotaW50Ci1hcjYwMDBfaW9jdGxfc2l3cmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgIHN0cnVjdCBpd19wYXJhbSAqcnJxLCBjaGFyICpleHRyYSkKLXsKLSAgICBzdHJ1Y3QgYXI2X3NvZnRjICphciA9IChzdHJ1Y3QgYXI2X3NvZnRjICopYXI2a19wcml2KGRldik7Ci0gICAgdTMyIGticHM7Ci0gICAgczggcmF0ZV9pZHg7Ci0KLSAgICBpZiAoaXNfaXdpb2N0bF9hbGxvd2VkKGFyLT5hck5leHRNb2RlLCBpbmZvLT5jbWQpICE9IDApIHsKLSAgICAgICAgQV9QUklOVEYoIndleHRfaW9jdGw6IGNtZD0weCV4IG5vdCBhbGxvd2VkIGluIHRoaXMgbW9kZVxuIiwgaW5mby0+Y21kKTsKLSAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOwotICAgIH0KLQotICAgIGlmIChycnEtPmZpeGVkKSB7Ci0gICAgICAgIGticHMgPSBycnEtPnZhbHVlIC8gMTAwMDsgICAgICAgICAgIC8qIHJycS0+dmFsdWUgaXMgaW4gYnBzICovCi0gICAgfSBlbHNlIHsKLSAgICAgICAga2JwcyA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLTEgaW5kaWNhdGVzIGF1dG8gcmF0ZSAqLwotICAgIH0KLSAgICBpZihrYnBzICE9IC0xICYmIHdtaV92YWxpZGF0ZV9iaXRyYXRlKGFyLT5hcldtaSwga2JwcywgJnJhdGVfaWR4KSAhPSAwKQotICAgIHsKLSAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19FUlIsKCJCaXRSYXRlIGlzIG5vdCBWYWxpZCAlZFxuIiwga2JwcykpOwotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0gICAgYXItPmFyQml0UmF0ZSA9IGticHM7Ci0gICAgaWYoYXItPmFyV21pUmVhZHkgPT0gdHJ1ZSkKLSAgICB7Ci0gICAgICAgIGlmICh3bWlfc2V0X2JpdHJhdGVfY21kKGFyLT5hcldtaSwga2JwcywgLTEsIC0xKSAhPSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotLyoKLSAqIFNJT0NHSVdSQVRFCi0gKi8KLWludAotYXI2MDAwX2lvY3RsX2dpd3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpCi17Ci0gICAgc3RydWN0IGFyNl9zb2Z0YyAqYXIgPSAoc3RydWN0IGFyNl9zb2Z0YyAqKWFyNmtfcHJpdihkZXYpOwotICAgIGludCByZXQgPSAwOwotCi0gICAgaWYgKGlzX2l3aW9jdGxfYWxsb3dlZChhci0+YXJOZXh0TW9kZSwgaW5mby0+Y21kKSAhPSAwKSB7Ci0gICAgICAgIEFfUFJJTlRGKCJ3ZXh0X2lvY3RsOiBjbWQ9MHgleCBub3QgYWxsb3dlZCBpbiB0aGlzIG1vZGVcbiIsIGluZm8tPmNtZCk7Ci0gICAgICAgIHJldHVybiAtRU9QTk9UU1VQUDsKLSAgICB9Ci0KLSAgICBpZiAoYXItPmJJc0Rlc3Ryb3lQcm9ncmVzcykgewotICAgICAgICByZXR1cm4gLUVCVVNZOwotICAgIH0KLQotICAgIGlmIChhci0+YXJXbGFuU3RhdGUgPT0gV0xBTl9ESVNBQkxFRCkgewotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0KLSAgICBpZiAoKGFyLT5hck5leHRNb2RlICE9IEFQX05FVFdPUksgJiYgIWFyLT5hckNvbm5lY3RlZCkgfHwgYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgcnJxLT52YWx1ZSA9IDEwMDAgKiAxMDAwOyAgICAgICAKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYgKGRvd25faW50ZXJydXB0aWJsZSgmYXItPmFyU2VtKSkgewotICAgICAgICByZXR1cm4gLUVSRVNUQVJUU1lTOwotICAgIH0KLQotICAgIGlmIChhci0+YklzRGVzdHJveVByb2dyZXNzIHx8IGFyLT5hcldsYW5TdGF0ZSA9PSBXTEFOX0RJU0FCTEVEKSB7Ci0gICAgICAgIHVwKCZhci0+YXJTZW0pOwotICAgICAgICByZXR1cm4gLUVCVVNZOwotICAgIH0KLQotICAgIGFyLT5hckJpdFJhdGUgPSAweEZGRkY7Ci0gICAgaWYgKHdtaV9nZXRfYml0cmF0ZV9jbWQoYXItPmFyV21pKSAhPSAwKSB7Ci0gICAgICAgIHVwKCZhci0+YXJTZW0pOwotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0gICAgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoYXJFdmVudCwgYXItPmFyQml0UmF0ZSAhPSAweEZGRkYsIHdtaXRpbWVvdXQgKiBIWik7Ci0gICAgaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0gICAgICAgIHJldCA9IC1FSU5UUjsKLSAgICB9Ci0gICAgLyogSWYgdGhlIGludGVyZmFjZSBpcyBkb3duIG9yIHdtaSBpcyBub3QgcmVhZHkgb3IgdGhlIHRhcmdldCBpcyBub3QKLSAgICAgICBjb25uZWN0ZWQgLSByZXR1cm4gdGhlIHZhbHVlIHN0b3JlZCBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZSAqLwotICAgIGlmICghcmV0KSB7Ci0gICAgICAgIGlmIChhci0+YXJCaXRSYXRlID09IC0xKSB7Ci0gICAgICAgICAgICBycnEtPmZpeGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHJycS0+dmFsdWUgPSAwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcnJxLT52YWx1ZSA9IGFyLT5hckJpdFJhdGUgKiAxMDAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdXAoJmFyLT5hclNlbSk7Ci0KLSAgICByZXR1cm4gcmV0OwotfQotCi0vKgotICogU0lPQ1NJV1RYUE9XCi0gKi8KLXN0YXRpYyBpbnQKLWFyNjAwMF9pb2N0bF9zaXd0eHBvdyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICAgc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKQotewotICAgIHN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLSAgICB1OCBkYk07Ci0KLSAgICBpZiAoaXNfaXdpb2N0bF9hbGxvd2VkKGFyLT5hck5leHRNb2RlLCBpbmZvLT5jbWQpICE9IDApIHsKLSAgICAgICAgQV9QUklOVEYoIndleHRfaW9jdGw6IGNtZD0weCV4IG5vdCBhbGxvd2VkIGluIHRoaXMgbW9kZVxuIiwgaW5mby0+Y21kKTsKLSAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOwotICAgIH0KLQotICAgIGlmIChhci0+YXJXbGFuU3RhdGUgPT0gV0xBTl9ESVNBQkxFRCkgewotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0KLSAgICBpZiAocnJxLT5kaXNhYmxlZCkgewotICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7Ci0gICAgfQotCi0gICAgaWYgKHJycS0+Zml4ZWQpIHsKLSAgICAgICAgaWYgKHJycS0+ZmxhZ3MgIT0gSVdfVFhQT1dfREJNKSB7Ci0gICAgICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7Ci0gICAgICAgIH0KLSAgICAgICAgYXItPmFyVHhQd3I9IGRiTSA9IHJycS0+dmFsdWU7Ci0gICAgICAgIGFyLT5hclR4UHdyU2V0ID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBhci0+YXJUeFB3ciA9IGRiTSA9IDA7Ci0gICAgICAgIGFyLT5hclR4UHdyU2V0ID0gZmFsc2U7Ci0gICAgfQotICAgIGlmKGFyLT5hcldtaVJlYWR5ID09IHRydWUpCi0gICAgewotICAgICAgICBBUl9ERUJVR19QUklOVEYoQVRIX0RFQlVHX1dMQU5fVFgsKCJTZXQgdHggcHdyIGNtZCAlZCBkYk1cbiIsIGRiTSkpOwotICAgICAgICB3bWlfc2V0X3R4UHdyX2NtZChhci0+YXJXbWksIGRiTSk7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi0vKgotICogU0lPQ0dJV1RYUE9XCi0gKi8KLWludAotYXI2MDAwX2lvY3RsX2dpd3R4cG93KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKQotewotICAgIHN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLSAgICBpbnQgcmV0ID0gMDsKLQotICAgIGlmIChpc19pd2lvY3RsX2FsbG93ZWQoYXItPmFyTmV4dE1vZGUsIGluZm8tPmNtZCkgIT0gMCkgewotICAgICAgICBBX1BSSU5URigid2V4dF9pb2N0bDogY21kPTB4JXggbm90IGFsbG93ZWQgaW4gdGhpcyBtb2RlXG4iLCBpbmZvLT5jbWQpOwotICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7Ci0gICAgfQotCi0gICAgaWYgKGFyLT5iSXNEZXN0cm95UHJvZ3Jlc3MpIHsKLSAgICAgICAgcmV0dXJuIC1FQlVTWTsKLSAgICB9Ci0KLSAgICBpZiAoYXItPmFyV2xhblN0YXRlID09IFdMQU5fRElTQUJMRUQpIHsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotCi0gICAgaWYgKGRvd25faW50ZXJydXB0aWJsZSgmYXItPmFyU2VtKSkgewotICAgICAgICByZXR1cm4gLUVSRVNUQVJUU1lTOwotICAgIH0KLQotICAgIGlmIChhci0+YklzRGVzdHJveVByb2dyZXNzKSB7Ci0gICAgICAgIHVwKCZhci0+YXJTZW0pOwotICAgICAgICByZXR1cm4gLUVCVVNZOwotICAgIH0KLQotICAgIGlmKChhci0+YXJXbWlSZWFkeSA9PSB0cnVlKSAmJiAoYXItPmFyQ29ubmVjdGVkID09IHRydWUpKQotICAgIHsKLSAgICAgICAgYXItPmFyVHhQd3IgPSAwOwotCi0gICAgICAgIGlmICh3bWlfZ2V0X3R4UHdyX2NtZChhci0+YXJXbWkpICE9IDApIHsKLSAgICAgICAgICAgIHVwKCZhci0+YXJTZW0pOwotICAgICAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgICAgIH0KLQotICAgICAgICB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChhckV2ZW50LCBhci0+YXJUeFB3ciAhPSAwLCB3bWl0aW1lb3V0ICogSFopOwotCi0gICAgICAgIGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotICAgICAgICAgICAgcmV0ID0gLUVJTlRSOwotICAgICAgICAgfQotICAgIH0KLSAgIC8qIElmIHRoZSBpbnRlcmFjZSBpcyBkb3duIG9yIHdtaSBpcyBub3QgcmVhZHkgb3IgdGFyZ2V0IGlzIG5vdCBjb25uZWN0ZWQKLSAgICAgIHRoZW4gcmV0dXJuIHZhbHVlIHN0b3JlZCBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZSAqLwotCi0gICAgaWYgKCFyZXQpIHsKLSAgICAgICAgIGlmIChhci0+YXJUeFB3clNldCA9PSB0cnVlKSB7Ci0gICAgICAgICAgICBycnEtPmZpeGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBycnEtPnZhbHVlID0gYXItPmFyVHhQd3I7Ci0gICAgICAgIHJycS0+ZmxhZ3MgPSBJV19UWFBPV19EQk07Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIElXTElTVCBuZWVkIHRoaXMgZmxhZyB0byBnZXQgVHhQb3dlcgotICAgICAgICAvLwotICAgICAgICBycnEtPmRpc2FibGVkID0gMDsKLSAgICB9Ci0KLSAgICB1cCgmYXItPmFyU2VtKTsKLQotICAgIHJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBTSU9DU0lXUkVUUlkKLSAqIHNpbmNlIGl3Y29uZmlnIG9ubHkgcHJvdmlkZXMgdXMgd2l0aCBvbmUgbWF4IHJldHJ5IHZhbHVlLCB3ZSB1c2UgaXQKLSAqIHRvIGFwcGx5IHRvIGRhdGEgZnJhbWVzIG9mIHRoZSBCRSB0cmFmZmljIGNsYXNzLgotICovCi1zdGF0aWMgaW50Ci1hcjYwMDBfaW9jdGxfc2l3cmV0cnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgIHN0cnVjdCBpd19wYXJhbSAqcnJxLCBjaGFyICpleHRyYSkKLXsKLSAgICBzdHJ1Y3QgYXI2X3NvZnRjICphciA9IChzdHJ1Y3QgYXI2X3NvZnRjICopYXI2a19wcml2KGRldik7Ci0KLSAgICBpZiAoaXNfaXdpb2N0bF9hbGxvd2VkKGFyLT5hck5leHRNb2RlLCBpbmZvLT5jbWQpICE9IDApIHsKLSAgICAgICAgQV9QUklOVEYoIndleHRfaW9jdGw6IGNtZD0weCV4IG5vdCBhbGxvd2VkIGluIHRoaXMgbW9kZVxuIiwgaW5mby0+Y21kKTsKLSAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOwotICAgIH0KLQotICAgIGlmIChhci0+YXJXbGFuU3RhdGUgPT0gV0xBTl9ESVNBQkxFRCkgewotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0KLSAgICBpZiAocnJxLT5kaXNhYmxlZCkgewotICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7Ci0gICAgfQotCi0gICAgaWYgKChycnEtPmZsYWdzICYgSVdfUkVUUllfVFlQRSkgIT0gSVdfUkVUUllfTElNSVQpIHsKLSAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOwotICAgIH0KLQotICAgIGlmICggIShycnEtPnZhbHVlID49IFdNSV9NSU5fUkVUUklFUykgfHwgIShycnEtPnZhbHVlIDw9IFdNSV9NQVhfUkVUUklFUykpIHsKLSAgICAgICAgICAgIHJldHVybiAtIEVJTlZBTDsKLSAgICB9Ci0gICAgaWYoYXItPmFyV21pUmVhZHkgPT0gdHJ1ZSkKLSAgICB7Ci0gICAgICAgIGlmICh3bWlfc2V0X3JldHJ5X2xpbWl0c19jbWQoYXItPmFyV21pLCBEQVRBX0ZSQU1FVFlQRSwgV01NX0FDX0JFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJycS0+dmFsdWUsIDApICE9IDApewotICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYXItPmFyTWF4UmV0cmllcyA9IHJycS0+dmFsdWU7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBTSU9DR0lXUkVUUlkKLSAqLwotc3RhdGljIGludAotYXI2MDAwX2lvY3RsX2dpd3JldHJ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpCi17Ci0gICAgc3RydWN0IGFyNl9zb2Z0YyAqYXIgPSAoc3RydWN0IGFyNl9zb2Z0YyAqKWFyNmtfcHJpdihkZXYpOwotCi0gICAgaWYgKGlzX2l3aW9jdGxfYWxsb3dlZChhci0+YXJOZXh0TW9kZSwgaW5mby0+Y21kKSAhPSAwKSB7Ci0gICAgICAgIEFfUFJJTlRGKCJ3ZXh0X2lvY3RsOiBjbWQ9MHgleCBub3QgYWxsb3dlZCBpbiB0aGlzIG1vZGVcbiIsIGluZm8tPmNtZCk7Ci0gICAgICAgIHJldHVybiAtRU9QTk9UU1VQUDsKLSAgICB9Ci0KLSAgICBpZiAoYXItPmFyV2xhblN0YXRlID09IFdMQU5fRElTQUJMRUQpIHsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotCi0gICAgcnJxLT5kaXNhYmxlZCA9IDA7Ci0gICAgc3dpdGNoIChycnEtPmZsYWdzICYgSVdfUkVUUllfVFlQRSkgewotICAgIGNhc2UgSVdfUkVUUllfTElGRVRJTUU6Ci0gICAgICAgIHJldHVybiAtRU9QTk9UU1VQUDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJV19SRVRSWV9MSU1JVDoKLSAgICAgICAgcnJxLT5mbGFncyA9IElXX1JFVFJZX0xJTUlUOwotICAgICAgICBzd2l0Y2ggKHJycS0+ZmxhZ3MgJiBJV19SRVRSWV9NT0RJRklFUikgewotICAgICAgICBjYXNlIElXX1JFVFJZX01JTjoKLSAgICAgICAgICAgIHJycS0+ZmxhZ3MgfD0gSVdfUkVUUllfTUlOOwotICAgICAgICAgICAgcnJxLT52YWx1ZSA9IFdNSV9NSU5fUkVUUklFUzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElXX1JFVFJZX01BWDoKLSAgICAgICAgICAgIHJycS0+ZmxhZ3MgfD0gSVdfUkVUUllfTUFYOwotICAgICAgICAgICAgcnJxLT52YWx1ZSA9IGFyLT5hck1heFJldHJpZXM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBTSU9DU0lXRU5DT0RFCi0gKi8KLXN0YXRpYyBpbnQKLWFyNjAwMF9pb2N0bF9zaXdlbmNvZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgICAgc3RydWN0IGl3X3BvaW50ICplcnEsIGNoYXIgKmtleWJ1ZikKLXsKLSAgICBzdHJ1Y3QgYXI2X3NvZnRjICphciA9IChzdHJ1Y3QgYXI2X3NvZnRjICopYXI2a19wcml2KGRldik7Ci0gICAgaW50IGluZGV4OwotICAgIHMzMiBhdXRoID0gMDsKLQotICAgIGlmIChpc19pd2lvY3RsX2FsbG93ZWQoYXItPmFyTmV4dE1vZGUsIGluZm8tPmNtZCkgIT0gMCkgewotICAgICAgICBBX1BSSU5URigid2V4dF9pb2N0bDogY21kPTB4JXggbm90IGFsbG93ZWQgaW4gdGhpcyBtb2RlXG4iLCBpbmZvLT5jbWQpOwotICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7Ci0gICAgfQotCi0gICAgaWYoYXItPmFyTmV4dE1vZGUgIT0gQVBfTkVUV09SSykgewotICAgIC8qCi0gICAgICogIFN0YXRpYyBXRVAgS2V5cyBzaG91bGQgYmUgY29uZmlndXJlZCBiZWZvcmUgc2V0dGluZyB0aGUgU1NJRAotICAgICAqLwotICAgIGlmIChhci0+YXJTc2lkWzBdICYmIGVycS0+bGVuZ3RoKSB7Ci0gICAgICAgIHJldHVybiAtRUlPOwotICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoYXItPmFyV2xhblN0YXRlID09IFdMQU5fRElTQUJMRUQpIHsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotCi0gICAgaW5kZXggPSBlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYOwotCi0gICAgaWYgKGluZGV4ICYmICgoKGluZGV4IC0gMSkgPCBXTUlfTUlOX0tFWV9JTkRFWCkgfHwKLSAgICAgICAgICAgICAgICAgICgoaW5kZXggLSAxKSA+IFdNSV9NQVhfS0VZX0lOREVYKSkpCi0gICAgewotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0KLSAgICBpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9ESVNBQkxFRCkgewotICAgICAgICAvKgotICAgICAgICAgKiBFbmNyeXB0aW9uIGRpc2FibGVkCi0gICAgICAgICAqLwotICAgICAgICBpZiAoaW5kZXgpIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBJZiBrZXkgaW5kZXggd2FzIHNwZWNpZmllZCB0aGVuIGNsZWFyIHRoZSBzcGVjaWZpZWQga2V5Ci0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGluZGV4LS07Ci0gICAgICAgICAgICBBX01FTVpFUk8oYXItPmFyV2VwS2V5TGlzdFtpbmRleF0uYXJLZXksCi0gICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGFyLT5hcldlcEtleUxpc3RbaW5kZXhdLmFyS2V5KSk7Ci0gICAgICAgICAgICBhci0+YXJXZXBLZXlMaXN0W2luZGV4XS5hcktleUxlbiA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgYXItPmFyRG90MTFBdXRoTW9kZSAgICAgICA9IE9QRU5fQVVUSDsKLSAgICAgICAgYXItPmFyUGFpcndpc2VDcnlwdG8gICAgICA9IE5PTkVfQ1JZUFQ7Ci0gICAgICAgIGFyLT5hckdyb3VwQ3J5cHRvICAgICAgICAgPSBOT05FX0NSWVBUOwotICAgICAgICBhci0+YXJBdXRoTW9kZSAgICAgICAgICAgID0gTk9ORV9BVVRIOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIEVuYWJsaW5nIFdFUCBlbmNyeXB0aW9uCi0gICAgICAgICAqLwotICAgICAgICBpZiAoaW5kZXgpIHsKLSAgICAgICAgICAgIGluZGV4LS07ICAgICAgICAgICAgICAgIC8qIGtleWluZGV4IGlzIG9mZiBiYXNlIDEgaW4gaXdjb25maWcgKi8KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX09QRU4pIHsKLSAgICAgICAgICAgIGF1dGggfD0gT1BFTl9BVVRIOwotICAgICAgICAgICAgYXItPmFyRGVmVHhLZXlJbmRleCA9IGluZGV4OwotICAgICAgICB9Ci0gICAgICAgIGlmIChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX1JFU1RSSUNURUQpIHsKLSAgICAgICAgICAgIGF1dGggfD0gU0hBUkVEX0FVVEg7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWF1dGgpIHsKLSAgICAgICAgICAgIGF1dGggPSBPUEVOX0FVVEg7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZXJxLT5sZW5ndGgpIHsKLSAgICAgICAgICAgIGlmICghSUVFRTgwMjExX0lTX1ZBTElEX1dFUF9DSVBIRVJfTEVOKGVycS0+bGVuZ3RoKSkgewotICAgICAgICAgICAgICAgIHJldHVybiAtRUlPOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBX01FTVpFUk8oYXItPmFyV2VwS2V5TGlzdFtpbmRleF0uYXJLZXksCi0gICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGFyLT5hcldlcEtleUxpc3RbaW5kZXhdLmFyS2V5KSk7Ci0gICAgICAgICAgICBtZW1jcHkoYXItPmFyV2VwS2V5TGlzdFtpbmRleF0uYXJLZXksIGtleWJ1ZiwgZXJxLT5sZW5ndGgpOwotICAgICAgICAgICAgYXItPmFyV2VwS2V5TGlzdFtpbmRleF0uYXJLZXlMZW4gPSBlcnEtPmxlbmd0aDsKLSAgICAgICAgICAgIGFyLT5hckRvdDExQXV0aE1vZGUgICAgICAgPSBhdXRoOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGFyLT5hcldlcEtleUxpc3RbaW5kZXhdLmFyS2V5TGVuID09IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFyLT5hckRlZlR4S2V5SW5kZXggPSBpbmRleDsKLQotICAgICAgICAgICAgaWYoYXItPmFyU3NpZExlbiAmJiBhci0+YXJXZXBLZXlMaXN0W2luZGV4XS5hcktleUxlbikgewotICAgICAgICAgICAgICAgIHdtaV9hZGRLZXlfY21kKGFyLT5hcldtaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRVBfQ1JZUFQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JPVVBfVVNBR0UgfCBUWF9VU0FHRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhci0+YXJXZXBLZXlMaXN0W2luZGV4XS5hcktleUxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyLT5hcldlcEtleUxpc3RbaW5kZXhdLmFyS2V5LCBLRVlfT1BfSU5JVF9WQUwsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9fU1lOQ19XTUlGTEFHKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGFyLT5hclBhaXJ3aXNlQ3J5cHRvICAgICAgPSBXRVBfQ1JZUFQ7Ci0gICAgICAgIGFyLT5hckdyb3VwQ3J5cHRvICAgICAgICAgPSBXRVBfQ1JZUFQ7Ci0gICAgICAgIGFyLT5hckF1dGhNb2RlICAgICAgICAgICAgPSBOT05FX0FVVEg7Ci0gICAgfQotCi0gICAgaWYoYXItPmFyTmV4dE1vZGUgIT0gQVBfTkVUV09SSykgewotICAgIC8qCi0gICAgICogcHJvZmlsZSBoYXMgY2hhbmdlZC4gIEVyYXNlIHNzaWQgdG8gc2lnbmFsIGNoYW5nZQotICAgICAqLwotICAgICAgICBBX01FTVpFUk8oYXItPmFyU3NpZCwgc2l6ZW9mKGFyLT5hclNzaWQpKTsKLSAgICAgICAgYXItPmFyU3NpZExlbiA9IDA7Ci0gICAgfQotICAgIGFyLT5hcF9wcm9maWxlX2ZsYWcgPSAxOyAvKiBUaGVyZSBpcyBhIGNoYW5nZSBpbiBwcm9maWxlICovCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLWFyNjAwMF9pb2N0bF9naXdlbmNvZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgICAgc3RydWN0IGl3X3BvaW50ICplcnEsIGNoYXIgKmtleSkKLXsKLSAgICBzdHJ1Y3QgYXI2X3NvZnRjICphciA9IChzdHJ1Y3QgYXI2X3NvZnRjICopYXI2a19wcml2KGRldik7Ci0gICAgdTgga2V5SW5kZXg7Ci0gICAgc3RydWN0IGFyX3dlcF9rZXkgKndrOwotCi0gICAgaWYgKGlzX2l3aW9jdGxfYWxsb3dlZChhci0+YXJOZXh0TW9kZSwgaW5mby0+Y21kKSAhPSAwKSB7Ci0gICAgICAgIEFfUFJJTlRGKCJ3ZXh0X2lvY3RsOiBjbWQ9MHgleCBub3QgYWxsb3dlZCBpbiB0aGlzIG1vZGVcbiIsIGluZm8tPmNtZCk7Ci0gICAgICAgIHJldHVybiAtRU9QTk9UU1VQUDsKLSAgICB9Ci0KLSAgICBpZiAoYXItPmFyV2xhblN0YXRlID09IFdMQU5fRElTQUJMRUQpIHsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotCi0gICAgaWYgKGFyLT5hclBhaXJ3aXNlQ3J5cHRvID09IE5PTkVfQ1JZUFQpIHsKLSAgICAgICAgZXJxLT5sZW5ndGggPSAwOwotICAgICAgICBlcnEtPmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChhci0+YXJQYWlyd2lzZUNyeXB0byA9PSBXRVBfQ1JZUFQpIHsKLSAgICAgICAgICAgIC8qIGdldCB0aGUga2V5SW5kZXggKi8KLSAgICAgICAgICAgIGtleUluZGV4ID0gZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKLSAgICAgICAgICAgIGlmICgwID09IGtleUluZGV4KSB7Ci0gICAgICAgICAgICAgICAga2V5SW5kZXggPSBhci0+YXJEZWZUeEtleUluZGV4OwotICAgICAgICAgICAgfSBlbHNlIGlmICgoa2V5SW5kZXggLSAxIDwgV01JX01JTl9LRVlfSU5ERVgpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgIChrZXlJbmRleCAtIDEgPiBXTUlfTUFYX0tFWV9JTkRFWCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAga2V5SW5kZXggPSBXTUlfTUlOX0tFWV9JTkRFWDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAga2V5SW5kZXgtLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVycS0+ZmxhZ3MgPSBrZXlJbmRleCArIDE7Ci0gICAgICAgICAgICBlcnEtPmZsYWdzICY9IH5JV19FTkNPREVfRElTQUJMRUQ7Ci0gICAgICAgICAgICB3ayA9ICZhci0+YXJXZXBLZXlMaXN0W2tleUluZGV4XTsKLSAgICAgICAgICAgIGlmIChlcnEtPmxlbmd0aCA+IHdrLT5hcktleUxlbikgewotICAgICAgICAgICAgICAgIGVycS0+bGVuZ3RoID0gd2stPmFyS2V5TGVuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHdrLT5hcktleUxlbikgewotICAgICAgICAgICAgICAgIG1lbWNweShrZXksIHdrLT5hcktleSwgZXJxLT5sZW5ndGgpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZXJxLT5mbGFncyAmPSB+SVdfRU5DT0RFX0RJU0FCTEVEOwotICAgICAgICAgICAgaWYgKGFyLT51c2VyX3NhdmVkX2tleXMua2V5T2spIHsKLSAgICAgICAgICAgICAgICBlcnEtPmxlbmd0aCA9IGFyLT51c2VyX3NhdmVkX2tleXMudWNhc3RfaWsuaWtfa2V5bGVuOwotICAgICAgICAgICAgICAgIGlmIChlcnEtPmxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICBtZW1jcHkoa2V5LCBhci0+dXNlcl9zYXZlZF9rZXlzLnVjYXN0X2lrLmlrX2tleWRhdGEsIGVycS0+bGVuZ3RoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGVycS0+bGVuZ3RoID0gMTsgICAgLy8gbm90IHJlYWxseSBwcmludGluZyBhbnkga2V5IGJ1dCBsZXQgaXdjb25maWcga25vdyBlbmMgaXMgb24KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhci0+YXJEb3QxMUF1dGhNb2RlICYgT1BFTl9BVVRIKSB7Ci0gICAgICAgICAgICBlcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9PUEVOOwotICAgICAgICB9Ci0gICAgICAgIGlmIChhci0+YXJEb3QxMUF1dGhNb2RlICYgU0hBUkVEX0FVVEgpIHsKLSAgICAgICAgICAgIGVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX1JFU1RSSUNURUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotI2lmIFdJUkVMRVNTX0VYVCA+PSAxOAotLyoKLSAqIFNJT0NTSVdHRU5JRQotICovCi1zdGF0aWMgaW50Ci1hcjYwMDBfaW9jdGxfc2l3Z2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgICAgc3RydWN0IGl3X3BvaW50ICplcnEsIGNoYXIgKmV4dHJhKQotewotICAgIHN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLQotI2lmZGVmIFdBUElfRU5BQkxFCi0gICAgdTggKmllID0gZXJxLT5wb2ludGVyOwotICAgIHU4IGllX3R5cGUgPSBpZVswXTsKLSAgICB1MTYgaWVfbGVuZ3RoID0gZXJxLT5sZW5ndGg7Ci0gICAgdTggd2FwaV9pZVsxMjhdOwotI2VuZGlmCi0KLSAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotI2lmZGVmIFdBUElfRU5BQkxFCi0gICAgaWYgKGllX3R5cGUgPT0gSUVFRTgwMjExX0VMRU1JRF9XQVBJKSB7Ci0gICAgICAgIGlmIChpZV9sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIod2FwaV9pZSwgaWUsIGllX2xlbmd0aCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB3bWlfc2V0X2FwcGllX2NtZChhci0+YXJXbWksIFdNSV9GUkFNRV9BU1NPQ19SRVEsIGllX2xlbmd0aCwgd2FwaV9pZSk7Ci0gICAgfSBlbHNlIGlmIChpZV9sZW5ndGggPT0gMCkgewotICAgICAgICB3bWlfc2V0X2FwcGllX2NtZChhci0+YXJXbWksIFdNSV9GUkFNRV9BU1NPQ19SRVEsIGllX2xlbmd0aCwgd2FwaV9pZSk7Ci0gICAgfQotI2VuZGlmCi0gICAgcmV0dXJuIDA7Ci19Ci0KLQotLyoKLSAqIFNJT0NHSVdHRU5JRQotICovCi1zdGF0aWMgaW50Ci1hcjYwMDBfaW9jdGxfZ2l3Z2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgICAgc3RydWN0IGl3X3BvaW50ICplcnEsIGNoYXIgKmV4dHJhKQotewotICAgIHN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLQotICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0gICAgZXJxLT5sZW5ndGggPSAwOwotICAgIGVycS0+ZmxhZ3MgPSAwOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBTSU9DU0lXQVVUSAotICovCi1zdGF0aWMgaW50Ci1hcjYwMDBfaW9jdGxfc2l3YXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKmRhdGEsIGNoYXIgKmV4dHJhKQotewotICAgIHN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLQotICAgIGJvb2wgcHJvZkNoYW5nZWQ7Ci0gICAgdTE2IHBhcmFtOwotICAgIHMzMiByZXQ7Ci0gICAgczMyIHZhbHVlOwotCi0gICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgIHJldHVybiAtRUlPOwotICAgIH0KLQotICAgIGlmIChhci0+YXJXbGFuU3RhdGUgPT0gV0xBTl9ESVNBQkxFRCkgewotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0KLSAgICBwYXJhbSA9IGRhdGEtPmZsYWdzICYgSVdfQVVUSF9JTkRFWDsKLSAgICB2YWx1ZSA9IGRhdGEtPnZhbHVlOwotICAgIHByb2ZDaGFuZ2VkID0gdHJ1ZTsKLSAgICByZXQgPSAwOwotCi0gICAgc3dpdGNoIChwYXJhbSkgewotICAgICAgICBjYXNlIElXX0FVVEhfV1BBX1ZFUlNJT046Ci0gICAgICAgICAgICBpZiAodmFsdWUgJiBJV19BVVRIX1dQQV9WRVJTSU9OX0RJU0FCTEVEKSB7Ci0gICAgICAgICAgICAgICAgYXItPmFyQXV0aE1vZGUgPSBOT05FX0FVVEg7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICYgSVdfQVVUSF9XUEFfVkVSU0lPTl9XUEEpIHsKLSAgICAgICAgICAgICAgICAgICAgYXItPmFyQXV0aE1vZGUgPSBXUEFfQVVUSDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgJiBJV19BVVRIX1dQQV9WRVJTSU9OX1dQQTIpIHsKLSAgICAgICAgICAgICAgICAgICAgYXItPmFyQXV0aE1vZGUgPSBXUEEyX0FVVEg7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldCA9IC0xOwotICAgICAgICAgICAgICAgIHByb2ZDaGFuZ2VkICAgID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJV19BVVRIX0NJUEhFUl9QQUlSV0lTRToKLSAgICAgICAgICAgIGlmICh2YWx1ZSAmIElXX0FVVEhfQ0lQSEVSX05PTkUpIHsKLSAgICAgICAgICAgICAgICBhci0+YXJQYWlyd2lzZUNyeXB0byA9IE5PTkVfQ1JZUFQ7Ci0gICAgICAgICAgICAgICAgYXItPmFyUGFpcndpc2VDcnlwdG9MZW4gPSAwOwotICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSAmIElXX0FVVEhfQ0lQSEVSX1dFUDQwKSB7Ci0gICAgICAgICAgICAgICAgYXItPmFyUGFpcndpc2VDcnlwdG8gPSBXRVBfQ1JZUFQ7Ci0gICAgICAgICAgICAgICAgYXItPmFyUGFpcndpc2VDcnlwdG9MZW4gPSA1OwotICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSAmIElXX0FVVEhfQ0lQSEVSX1RLSVApIHsKLSAgICAgICAgICAgICAgICBhci0+YXJQYWlyd2lzZUNyeXB0byA9IFRLSVBfQ1JZUFQ7Ci0gICAgICAgICAgICAgICAgYXItPmFyUGFpcndpc2VDcnlwdG9MZW4gPSAwOwotICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSAmIElXX0FVVEhfQ0lQSEVSX0NDTVApIHsKLSAgICAgICAgICAgICAgICBhci0+YXJQYWlyd2lzZUNyeXB0byA9IEFFU19DUllQVDsKLSAgICAgICAgICAgICAgICBhci0+YXJQYWlyd2lzZUNyeXB0b0xlbiA9IDA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICYgSVdfQVVUSF9DSVBIRVJfV0VQMTA0KSB7Ci0gICAgICAgICAgICAgICAgYXItPmFyUGFpcndpc2VDcnlwdG8gPSBXRVBfQ1JZUFQ7Ci0gICAgICAgICAgICAgICAgYXItPmFyUGFpcndpc2VDcnlwdG9MZW4gPSAxMzsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLTE7Ci0gICAgICAgICAgICAgICAgcHJvZkNoYW5nZWQgICAgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElXX0FVVEhfQ0lQSEVSX0dST1VQOgotICAgICAgICAgICAgaWYgKHZhbHVlICYgSVdfQVVUSF9DSVBIRVJfTk9ORSkgewotICAgICAgICAgICAgICAgIGFyLT5hckdyb3VwQ3J5cHRvID0gTk9ORV9DUllQVDsKLSAgICAgICAgICAgICAgICBhci0+YXJHcm91cENyeXB0b0xlbiA9IDA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICYgSVdfQVVUSF9DSVBIRVJfV0VQNDApIHsKLSAgICAgICAgICAgICAgICBhci0+YXJHcm91cENyeXB0byA9IFdFUF9DUllQVDsKLSAgICAgICAgICAgICAgICBhci0+YXJHcm91cENyeXB0b0xlbiA9IDU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICYgSVdfQVVUSF9DSVBIRVJfVEtJUCkgewotICAgICAgICAgICAgICAgIGFyLT5hckdyb3VwQ3J5cHRvID0gVEtJUF9DUllQVDsKLSAgICAgICAgICAgICAgICBhci0+YXJHcm91cENyeXB0b0xlbiA9IDA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICYgSVdfQVVUSF9DSVBIRVJfQ0NNUCkgewotICAgICAgICAgICAgICAgIGFyLT5hckdyb3VwQ3J5cHRvID0gQUVTX0NSWVBUOwotICAgICAgICAgICAgICAgIGFyLT5hckdyb3VwQ3J5cHRvTGVuID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgJiBJV19BVVRIX0NJUEhFUl9XRVAxMDQpIHsKLSAgICAgICAgICAgICAgICBhci0+YXJHcm91cENyeXB0byA9IFdFUF9DUllQVDsKLSAgICAgICAgICAgICAgICBhci0+YXJHcm91cENyeXB0b0xlbiA9IDEzOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtMTsKLSAgICAgICAgICAgICAgICBwcm9mQ2hhbmdlZCAgICA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSVdfQVVUSF9LRVlfTUdNVDoKLSAgICAgICAgICAgIGlmICh2YWx1ZSAmIElXX0FVVEhfS0VZX01HTVRfUFNLKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFdQQV9BVVRIID09IGFyLT5hckF1dGhNb2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFyLT5hckF1dGhNb2RlID0gV1BBX1BTS19BVVRIOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoV1BBMl9BVVRIID09IGFyLT5hckF1dGhNb2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFyLT5hckF1dGhNb2RlID0gV1BBMl9QU0tfQVVUSDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZXQgPSAtMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCEodmFsdWUgJiBJV19BVVRIX0tFWV9NR01UXzgwMl8xWCkpIHsKLSAgICAgICAgICAgICAgICBhci0+YXJBdXRoTW9kZSA9IE5PTkVfQVVUSDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElXX0FVVEhfVEtJUF9DT1VOVEVSTUVBU1VSRVM6Ci0gICAgICAgICAgICB3bWlfc2V0X3RraXBfY291bnRlcm1lYXN1cmVzX2NtZChhci0+YXJXbWksIHZhbHVlKTsKLSAgICAgICAgICAgIHByb2ZDaGFuZ2VkICAgID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJV19BVVRIX0RST1BfVU5FTkNSWVBURUQ6Ci0gICAgICAgICAgICBwcm9mQ2hhbmdlZCAgICA9IGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKLSAgICAgICAgICAgIGFyLT5hckRvdDExQXV0aE1vZGUgPSAwOwotICAgICAgICAgICAgaWYgKHZhbHVlICYgSVdfQVVUSF9BTEdfT1BFTl9TWVNURU0pIHsKLSAgICAgICAgICAgICAgICBhci0+YXJEb3QxMUF1dGhNb2RlICB8PSBPUEVOX0FVVEg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodmFsdWUgJiBJV19BVVRIX0FMR19TSEFSRURfS0VZKSB7Ci0gICAgICAgICAgICAgICAgYXItPmFyRG90MTFBdXRoTW9kZSAgfD0gU0hBUkVEX0FVVEg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodmFsdWUgJiBJV19BVVRIX0FMR19MRUFQKSB7Ci0gICAgICAgICAgICAgICAgYXItPmFyRG90MTFBdXRoTW9kZSAgID0gTEVBUF9BVVRIOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYoYXItPmFyRG90MTFBdXRoTW9kZSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLTE7Ci0gICAgICAgICAgICAgICAgcHJvZkNoYW5nZWQgICAgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElXX0FVVEhfV1BBX0VOQUJMRUQ6Ci0gICAgICAgICAgICBpZiAoIXZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgYXItPmFyQXV0aE1vZGUgPSBOT05FX0FVVEg7Ci0gICAgICAgICAgICAgICAgLyogd2hlbiB0aGUgc3VwcGxpY2FudCBpcyBzdG9wcGVkLCBpdCBjYWxscyB0aGlzCi0gICAgICAgICAgICAgICAgICogaGFuZGxlciB3aXRoIHZhbHVlPTAuIFRoZSBmb2xsb3dpbmdzIG5lZWQgdG8gYmUKLSAgICAgICAgICAgICAgICAgKiByZXNldCBpZiB0aGUgU1RBIHdlcmUgdG8gY29ubmVjdCBhZ2FpbgotICAgICAgICAgICAgICAgICAqIHdpdGhvdXQgc2VjdXJpdHkKLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBhci0+YXJEb3QxMUF1dGhNb2RlID0gT1BFTl9BVVRIOwotICAgICAgICAgICAgICAgIGFyLT5hclBhaXJ3aXNlQ3J5cHRvID0gTk9ORV9DUllQVDsKLSAgICAgICAgICAgICAgICBhci0+YXJQYWlyd2lzZUNyeXB0b0xlbiA9IDA7Ci0gICAgICAgICAgICAgICAgYXItPmFyR3JvdXBDcnlwdG8gPSBOT05FX0NSWVBUOwotICAgICAgICAgICAgICAgIGFyLT5hckdyb3VwQ3J5cHRvTGVuID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElXX0FVVEhfUlhfVU5FTkNSWVBURURfRUFQT0w6Ci0gICAgICAgICAgICBwcm9mQ2hhbmdlZCAgICA9IGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSVdfQVVUSF9ST0FNSU5HX0NPTlRST0w6Ci0gICAgICAgICAgICBwcm9mQ2hhbmdlZCAgICA9IGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSVdfQVVUSF9QUklWQUNZX0lOVk9LRUQ6Ci0gICAgICAgICAgICBpZiAoIXZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgYXItPmFyUGFpcndpc2VDcnlwdG8gPSBOT05FX0NSWVBUOwotICAgICAgICAgICAgICAgIGFyLT5hclBhaXJ3aXNlQ3J5cHRvTGVuID0gMDsKLSAgICAgICAgICAgICAgICBhci0+YXJHcm91cENyeXB0byA9IE5PTkVfQ1JZUFQ7Ci0gICAgICAgICAgICAgICAgYXItPmFyR3JvdXBDcnlwdG9MZW4gPSAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgV0FQSV9FTkFCTEUKLSAgICAgICAgY2FzZSBJV19BVVRIX1dBUElfRU5BQkxFRDoKLSAgICAgICAgICAgIGFyLT5hcldhcGlFbmFibGUgPSB2YWx1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgIHJldCA9IC0xOwotICAgICAgICAgICBwcm9mQ2hhbmdlZCAgICA9IGZhbHNlOwotICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAocHJvZkNoYW5nZWQgPT0gdHJ1ZSkgewotICAgICAgICAvKgotICAgICAgICAgKiBwcm9maWxlIGhhcyBjaGFuZ2VkLiAgRXJhc2Ugc3NpZCB0byBzaWduYWwgY2hhbmdlCi0gICAgICAgICAqLwotICAgICAgICBBX01FTVpFUk8oYXItPmFyU3NpZCwgc2l6ZW9mKGFyLT5hclNzaWQpKTsKLSAgICAgICAgYXItPmFyU3NpZExlbiA9IDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldDsKLX0KLQotCi0vKgotICogU0lPQ0dJV0FVVEgKLSAqLwotc3RhdGljIGludAotYXI2MDAwX2lvY3RsX2dpd2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgICAgc3RydWN0IGl3X3BhcmFtICpkYXRhLCBjaGFyICpleHRyYSkKLXsKLSAgICBzdHJ1Y3QgYXI2X3NvZnRjICphciA9IChzdHJ1Y3QgYXI2X3NvZnRjICopYXI2a19wcml2KGRldik7Ci0gICAgdTE2IHBhcmFtOwotICAgIHMzMiByZXQ7Ci0KLSAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotCi0gICAgaWYgKGFyLT5hcldsYW5TdGF0ZSA9PSBXTEFOX0RJU0FCTEVEKSB7Ci0gICAgICAgIHJldHVybiAtRUlPOwotICAgIH0KLQotICAgIHBhcmFtID0gZGF0YS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYOwotICAgIHJldCA9IDA7Ci0gICAgZGF0YS0+dmFsdWUgPSAwOwotCi0KLSAgICBzd2l0Y2ggKHBhcmFtKSB7Ci0gICAgICAgIGNhc2UgSVdfQVVUSF9XUEFfVkVSU0lPTjoKLSAgICAgICAgICAgIGlmIChhci0+YXJBdXRoTW9kZSA9PSBOT05FX0FVVEgpIHsKLSAgICAgICAgICAgICAgICBkYXRhLT52YWx1ZSB8PSBJV19BVVRIX1dQQV9WRVJTSU9OX0RJU0FCTEVEOwotICAgICAgICAgICAgfSBlbHNlIGlmIChhci0+YXJBdXRoTW9kZSA9PSBXUEFfQVVUSCkgewotICAgICAgICAgICAgICAgIGRhdGEtPnZhbHVlIHw9IElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBOwotICAgICAgICAgICAgfSBlbHNlIGlmIChhci0+YXJBdXRoTW9kZSA9PSBXUEEyX0FVVEgpIHsKLSAgICAgICAgICAgICAgICBkYXRhLT52YWx1ZSB8PSBJV19BVVRIX1dQQV9WRVJTSU9OX1dQQTI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldCA9IC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSVdfQVVUSF9DSVBIRVJfUEFJUldJU0U6Ci0gICAgICAgICAgICBpZiAoYXItPmFyUGFpcndpc2VDcnlwdG8gPT0gTk9ORV9DUllQVCkgewotICAgICAgICAgICAgICAgIGRhdGEtPnZhbHVlIHw9IElXX0FVVEhfQ0lQSEVSX05PTkU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGFyLT5hclBhaXJ3aXNlQ3J5cHRvID09IFdFUF9DUllQVCkgewotICAgICAgICAgICAgICAgIGlmIChhci0+YXJQYWlyd2lzZUNyeXB0b0xlbiA9PSAxMykgewotICAgICAgICAgICAgICAgICAgICBkYXRhLT52YWx1ZSB8PSBJV19BVVRIX0NJUEhFUl9XRVAxMDQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YS0+dmFsdWUgfD0gSVdfQVVUSF9DSVBIRVJfV0VQNDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChhci0+YXJQYWlyd2lzZUNyeXB0byA9PSBUS0lQX0NSWVBUKSB7Ci0gICAgICAgICAgICAgICAgZGF0YS0+dmFsdWUgfD0gSVdfQVVUSF9DSVBIRVJfVEtJUDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoYXItPmFyUGFpcndpc2VDcnlwdG8gPT0gQUVTX0NSWVBUKSB7Ci0gICAgICAgICAgICAgICAgZGF0YS0+dmFsdWUgfD0gSVdfQVVUSF9DSVBIRVJfQ0NNUDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJV19BVVRIX0NJUEhFUl9HUk9VUDoKLSAgICAgICAgICAgIGlmIChhci0+YXJHcm91cENyeXB0byA9PSBOT05FX0NSWVBUKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEtPnZhbHVlIHw9IElXX0FVVEhfQ0lQSEVSX05PTkU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGFyLT5hckdyb3VwQ3J5cHRvID09IFdFUF9DUllQVCkgewotICAgICAgICAgICAgICAgIGlmIChhci0+YXJHcm91cENyeXB0b0xlbiA9PSAxMykgewotICAgICAgICAgICAgICAgICAgICBkYXRhLT52YWx1ZSB8PSBJV19BVVRIX0NJUEhFUl9XRVAxMDQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YS0+dmFsdWUgfD0gSVdfQVVUSF9DSVBIRVJfV0VQNDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChhci0+YXJHcm91cENyeXB0byA9PSBUS0lQX0NSWVBUKSB7Ci0gICAgICAgICAgICAgICAgZGF0YS0+dmFsdWUgfD0gSVdfQVVUSF9DSVBIRVJfVEtJUDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoYXItPmFyR3JvdXBDcnlwdG8gPT0gQUVTX0NSWVBUKSB7Ci0gICAgICAgICAgICAgICAgZGF0YS0+dmFsdWUgfD0gSVdfQVVUSF9DSVBIRVJfQ0NNUDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJV19BVVRIX0tFWV9NR01UOgotICAgICAgICAgICAgaWYgKChhci0+YXJBdXRoTW9kZSA9PSBXUEFfUFNLX0FVVEgpIHx8Ci0gICAgICAgICAgICAgICAgKGFyLT5hckF1dGhNb2RlID09IFdQQTJfUFNLX0FVVEgpKSB7Ci0gICAgICAgICAgICAgICAgZGF0YS0+dmFsdWUgfD0gSVdfQVVUSF9LRVlfTUdNVF9QU0s7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKChhci0+YXJBdXRoTW9kZSA9PSBXUEFfQVVUSCkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgKGFyLT5hckF1dGhNb2RlID09IFdQQTJfQVVUSCkpIHsKLSAgICAgICAgICAgICAgICBkYXRhLT52YWx1ZSB8PSBJV19BVVRIX0tFWV9NR01UXzgwMl8xWDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElXX0FVVEhfVEtJUF9DT1VOVEVSTUVBU1VSRVM6Ci0gICAgICAgICAgICAvLyBUT0RPLiBTYXZlIGNvdW50ZXJtZWFzc3VyZSBlbmFibGUvZGlzYWJsZQotICAgICAgICAgICAgZGF0YS0+dmFsdWUgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSVdfQVVUSF9EUk9QX1VORU5DUllQVEVEOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKLSAgICAgICAgICAgIGlmIChhci0+YXJEb3QxMUF1dGhNb2RlID09IE9QRU5fQVVUSCkgewotICAgICAgICAgICAgICAgIGRhdGEtPnZhbHVlIHw9IElXX0FVVEhfQUxHX09QRU5fU1lTVEVNOwotICAgICAgICAgICAgfSBlbHNlIGlmIChhci0+YXJEb3QxMUF1dGhNb2RlID09IFNIQVJFRF9BVVRIKSB7Ci0gICAgICAgICAgICAgICAgZGF0YS0+dmFsdWUgfD0gSVdfQVVUSF9BTEdfU0hBUkVEX0tFWTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoYXItPmFyRG90MTFBdXRoTW9kZSA9PSBMRUFQX0FVVEgpIHsKLSAgICAgICAgICAgICAgICBkYXRhLT52YWx1ZSB8PSBJV19BVVRIX0FMR19MRUFQOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXQgPSAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElXX0FVVEhfV1BBX0VOQUJMRUQ6Ci0gICAgICAgICAgICBpZiAoYXItPmFyQXV0aE1vZGUgPT0gTk9ORV9BVVRIKSB7Ci0gICAgICAgICAgICAgICAgZGF0YS0+dmFsdWUgPSAwOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkYXRhLT52YWx1ZSA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJV19BVVRIX1JYX1VORU5DUllQVEVEX0VBUE9MOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSVdfQVVUSF9ST0FNSU5HX0NPTlRST0w6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJV19BVVRIX1BSSVZBQ1lfSU5WT0tFRDoKLSAgICAgICAgICAgIGlmIChhci0+YXJQYWlyd2lzZUNyeXB0byA9PSBOT05FX0NSWVBUKSB7Ci0gICAgICAgICAgICAgICAgZGF0YS0+dmFsdWUgPSAwOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkYXRhLT52YWx1ZSA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSNpZmRlZiBXQVBJX0VOQUJMRQotICAgICAgICBjYXNlIElXX0FVVEhfV0FQSV9FTkFCTEVEOgotICAgICAgICAgICAgZGF0YS0+dmFsdWUgPSBhci0+YXJXYXBpRW5hYmxlOwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgcmV0ID0gLTE7Ci0gICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi0vKgotICogU0lPQ1NJV1BNS1NBCi0gKi8KLXN0YXRpYyBpbnQKLWFyNjAwMF9pb2N0bF9zaXdwbWtzYShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQotewotICAgIHN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLSAgICBzMzIgcmV0OwotICAgIGludCBzdGF0dXM7Ci0gICAgc3RydWN0IGl3X3Bta3NhICpwbWtzYTsKLQotICAgIHBta3NhID0gKHN0cnVjdCBpd19wbWtzYSAqKWV4dHJhOwotCi0gICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgIHJldHVybiAtRUlPOwotICAgIH0KLQotICAgIHJldCA9IDA7Ci0gICAgc3RhdHVzID0gMDsKLQotICAgIHN3aXRjaCAocG1rc2EtPmNtZCkgewotICAgICAgICBjYXNlIElXX1BNS1NBX0FERDoKLSAgICAgICAgICAgIHN0YXR1cyA9IHdtaV9zZXRQbWtpZF9jbWQoYXItPmFyV21pLCAodTggKilwbWtzYS0+YnNzaWQuc2FfZGF0YSwgcG1rc2EtPnBta2lkLCB0cnVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElXX1BNS1NBX1JFTU9WRToKLSAgICAgICAgICAgIHN0YXR1cyA9IHdtaV9zZXRQbWtpZF9jbWQoYXItPmFyV21pLCAodTggKilwbWtzYS0+YnNzaWQuc2FfZGF0YSwgcG1rc2EtPnBta2lkLCBmYWxzZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJV19QTUtTQV9GTFVTSDoKLSAgICAgICAgICAgIGlmIChhci0+YXJDb25uZWN0ZWQgPT0gdHJ1ZSkgewotICAgICAgICAgICAgICAgIHN0YXR1cyA9IHdtaV9zZXRQbWtpZF9jbWQoYXItPmFyV21pLCBhci0+YXJCc3NpZCwgTlVMTCwgMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldD0tMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICAgIHJldCA9IC0xOwotICAgIH0KLQotICAgIHJldHVybiByZXQ7Ci19Ci0KLSNpZmRlZiBXQVBJX0VOQUJMRQotCi0jZGVmaW5lIFBOX0lOSVQgMHg1YzM2NWMzNgotCi1zdGF0aWMgaW50IGFyNjAwMF9zZXRfd2FwaV9rZXkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgICAgc3RydWN0IGl3X3BvaW50ICplcnEsIGNoYXIgKmV4dHJhKQotewotICAgIHN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLSAgICBzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7Ci0gICAgS0VZX1VTQUdFICAga2V5VXNhZ2UgPSAwOwotICAgIHMzMiBrZXlMZW47Ci0gICAgdTggKmtleURhdGE7Ci0gICAgczMyIGluZGV4OwotICAgIHUzMiAqUE47Ci0gICAgczMyIGk7Ci0gICAgaW50ICAgIHN0YXR1czsKLSAgICB1OCB3YXBpS2V5UnNjWzE2XTsKLSAgICBDUllQVE9fVFlQRSBrZXlUeXBlID0gV0FQSV9DUllQVDsKLSAgICBjb25zdCB1OCBicm9hZGNhc3RNYWNbXSA9IHsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfTsKLQotICAgIGluZGV4ID0gZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKLSAgICBpZiAoaW5kZXggJiYgKCgoaW5kZXggLSAxKSA8IFdNSV9NSU5fS0VZX0lOREVYKSB8fAotICAgICAgICAgICAgICAgICgoaW5kZXggLSAxKSA+IFdNSV9NQVhfS0VZX0lOREVYKSkpIHsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotCi0gICAgaW5kZXgtLTsKLSAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gNCkgewotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0gICAga2V5RGF0YSA9ICh1OCAqKShleHQgKyAxKTsKLSAgICBrZXlMZW4gPSBlcnEtPmxlbmd0aCAtIHNpemVvZihzdHJ1Y3QgaXdfZW5jb2RlX2V4dCk7Ci0gICAgbWVtY3B5KHdhcGlLZXlSc2MsIGV4dC0+dHhfc2VxLCBzaXplb2Yod2FwaUtleVJzYykpOwotCi0gICAgaWYgKG1lbWNtcChleHQtPmFkZHIuc2FfZGF0YSwgYnJvYWRjYXN0TWFjLCBzaXplb2YoYnJvYWRjYXN0TWFjKSkgPT0gMCkgewotICAgICAgICBrZXlVc2FnZSB8PSBHUk9VUF9VU0FHRTsKLSAgICAgICAgUE4gPSAodTMyICopd2FwaUtleVJzYzsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotICAgICAgICAgICAgUE5baV0gPSBQTl9JTklUOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAga2V5VXNhZ2UgfD0gUEFJUldJU0VfVVNBR0U7Ci0gICAgfQotICAgIHN0YXR1cyA9IHdtaV9hZGRLZXlfY21kKGFyLT5hcldtaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleVVzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXBpS2V5UnNjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleURhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgS0VZX09QX0lOSVRfV0FQSVBOLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU1lOQ19CRUZPUkVfV01JRkxBRyk7Ci0gICAgaWYgKDAgIT0gc3RhdHVzKSB7Ci0gICAgICAgIHJldHVybiAtRUlPOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotI2VuZGlmCi0KLS8qCi0gKiBTSU9DU0lXRU5DT0RFRVhUCi0gKi8KLXN0YXRpYyBpbnQKLWFyNjAwMF9pb2N0bF9zaXdlbmNvZGVleHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgICAgc3RydWN0IGl3X3BvaW50ICplcnEsIGNoYXIgKmV4dHJhKQotewotICAgIHN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLSAgICBzMzIgaW5kZXg7Ci0gICAgc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dDsKLSAgICBLRVlfVVNBR0Uga2V5VXNhZ2U7Ci0gICAgczMyIGtleUxlbjsKLSAgICB1OCAqa2V5RGF0YTsKLSAgICB1OCBrZXlSc2NbOF07Ci0gICAgaW50IHN0YXR1czsKLSAgICBDUllQVE9fVFlQRSBrZXlUeXBlOwotI2lmZGVmIFVTRVJfS0VZUwotICAgIHN0cnVjdCBpZWVlODAyMTFyZXFfa2V5IGlrOwotI2VuZGlmIC8qIFVTRVJfS0VZUyAqLwotCi0gICAgaWYgKGFyLT5hcldsYW5TdGF0ZSA9PSBXTEFOX0RJU0FCTEVEKSB7Ci0gICAgICAgIHJldHVybiAtRUlPOwotICAgIH0KLQotI2lmZGVmIFVTRVJfS0VZUwotICAgIGFyLT51c2VyX3NhdmVkX2tleXMua2V5T2sgPSBmYWxzZTsKLSNlbmRpZiAvKiBVU0VSX0tFWVMgKi8KLQotICAgIGluZGV4ID0gZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKLQotICAgIGlmIChpbmRleCAmJiAoKChpbmRleCAtIDEpIDwgV01JX01JTl9LRVlfSU5ERVgpIHx8Ci0gICAgICAgICAgICAgICAgICAoKGluZGV4IC0gMSkgPiBXTUlfTUFYX0tFWV9JTkRFWCkpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotCi0gICAgZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7Ci0gICAgaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogRW5jcnlwdGlvbiBkaXNhYmxlZAotICAgICAgICAgKi8KLSAgICAgICAgaWYgKGluZGV4KSB7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogSWYga2V5IGluZGV4IHdhcyBzcGVjaWZpZWQgdGhlbiBjbGVhciB0aGUgc3BlY2lmaWVkIGtleQotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpbmRleC0tOwotICAgICAgICAgICAgQV9NRU1aRVJPKGFyLT5hcldlcEtleUxpc3RbaW5kZXhdLmFyS2V5LAotICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihhci0+YXJXZXBLZXlMaXN0W2luZGV4XS5hcktleSkpOwotICAgICAgICAgICAgYXItPmFyV2VwS2V5TGlzdFtpbmRleF0uYXJLZXlMZW4gPSAwOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogRW5hYmxpbmcgV0VQIGVuY3J5cHRpb24KLSAgICAgICAgICovCi0gICAgICAgIGlmIChpbmRleCkgewotICAgICAgICAgICAgaW5kZXgtLTsgICAgICAgICAgICAgICAgLyoga2V5aW5kZXggaXMgb2ZmIGJhc2UgMSBpbiBpd2NvbmZpZyAqLwotICAgICAgICB9Ci0KLSAgICAgICAga2V5VXNhZ2UgPSAwOwotICAgICAgICBrZXlMZW4gPSBlcnEtPmxlbmd0aCAtIHNpemVvZihzdHJ1Y3QgaXdfZW5jb2RlX2V4dCk7Ci0KLSAgICAgICAgaWYgKGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9TRVRfVFhfS0VZKSB7Ci0gICAgICAgICAgICBrZXlVc2FnZSA9IFRYX1VTQUdFOwotICAgICAgICAgICAgYXItPmFyRGVmVHhLZXlJbmRleCA9IGluZGV4OwotICAgICAgICAgICAgLy8gSnVzdCBzZXR0aW5nIHRoZSBrZXkgaW5kZXgKLSAgICAgICAgICAgIGlmIChrZXlMZW4gPT0gMCkgewotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGtleUxlbiA8PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gLUVJTzsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIGtleSBmb2xsb3dzIGl3X2VuY29kZV9leHQgKi8KLSAgICAgICAga2V5RGF0YSA9ICh1OCAqKShleHQgKyAxKTsKLQotICAgICAgICBzd2l0Y2ggKGV4dC0+YWxnKSB7Ci0gICAgICAgICAgICBjYXNlIElXX0VOQ09ERV9BTEdfV0VQOgotICAgICAgICAgICAgICAgIGtleVR5cGUgPSBXRVBfQ1JZUFQ7Ci0jaWZkZWYgVVNFUl9LRVlTCi0gICAgICAgICAgICAgICAgaWsuaWtfdHlwZSA9IElFRUU4MDIxMV9DSVBIRVJfV0VQOwotI2VuZGlmIC8qIFVTRVJfS0VZUyAqLwotICAgICAgICAgICAgICAgIGlmICghSUVFRTgwMjExX0lTX1ZBTElEX1dFUF9DSVBIRVJfTEVOKGtleUxlbikpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLyogQ2hlY2sgd2hldGhlciBpdCBpcyBzdGF0aWMgd2VwLiAqLwotICAgICAgICAgICAgICAgIGlmICghYXItPmFyQ29ubmVjdGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFfTUVNWkVSTyhhci0+YXJXZXBLZXlMaXN0W2luZGV4XS5hcktleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGFyLT5hcldlcEtleUxpc3RbaW5kZXhdLmFyS2V5KSk7Ci0gICAgICAgICAgICAgICAgICAgIG1lbWNweShhci0+YXJXZXBLZXlMaXN0W2luZGV4XS5hcktleSwga2V5RGF0YSwga2V5TGVuKTsKLSAgICAgICAgICAgICAgICAgICAgYXItPmFyV2VwS2V5TGlzdFtpbmRleF0uYXJLZXlMZW4gPSBrZXlMZW47Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBJV19FTkNPREVfQUxHX1RLSVA6Ci0gICAgICAgICAgICAgICAga2V5VHlwZSA9IFRLSVBfQ1JZUFQ7Ci0jaWZkZWYgVVNFUl9LRVlTCi0gICAgICAgICAgICAgICAgaWsuaWtfdHlwZSA9IElFRUU4MDIxMV9DSVBIRVJfVEtJUDsKLSNlbmRpZiAvKiBVU0VSX0tFWVMgKi8KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSVdfRU5DT0RFX0FMR19DQ01QOgotICAgICAgICAgICAgICAgIGtleVR5cGUgPSBBRVNfQ1JZUFQ7Ci0jaWZkZWYgVVNFUl9LRVlTCi0gICAgICAgICAgICAgICAgaWsuaWtfdHlwZSA9IElFRUU4MDIxMV9DSVBIRVJfQUVTX0NDTTsKLSNlbmRpZiAvKiBVU0VSX0tFWVMgKi8KLSAgICAgICAgICAgICAgICBicmVhazsKLSNpZmRlZiBXQVBJX0VOQUJMRQotICAgICAgICAgICAgY2FzZSBJV19FTkNPREVfQUxHX1NNNDoKLSAgICAgICAgICAgICAgICBpZiAoYXItPmFyV2FwaUVuYWJsZSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXI2MDAwX3NldF93YXBpX2tleShkZXYsIGluZm8sIGVycSwgZXh0cmEpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlPOwotICAgICAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAgY2FzZSBJV19FTkNPREVfQUxHX1BNSzoKLSAgICAgICAgICAgICAgICBhci0+YXJDb25uZWN0Q3RybEZsYWdzIHw9IENPTk5FQ1RfRE9fV1BBX09GRkxPQUQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHdtaV9zZXRfcG1rX2NtZChhci0+YXJXbWksIGtleURhdGEpOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTzsKLSAgICAgICAgfQotCi0KLSAgICAgICAgaWYgKGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9HUk9VUF9LRVkpIHsKLSAgICAgICAgICAgIGtleVVzYWdlIHw9IEdST1VQX1VTQUdFOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAga2V5VXNhZ2UgfD0gUEFJUldJU0VfVVNBR0U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX1JYX1NFUV9WQUxJRCkgewotICAgICAgICAgICAgbWVtY3B5KGtleVJzYywgZXh0LT5yeF9zZXEsIHNpemVvZihrZXlSc2MpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFfTUVNWkVSTyhrZXlSc2MsIHNpemVvZihrZXlSc2MpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgoKFdQQV9QU0tfQVVUSCA9PSBhci0+YXJBdXRoTW9kZSkgfHwgKFdQQTJfUFNLX0FVVEggPT0gYXItPmFyQXV0aE1vZGUpKSAmJgotICAgICAgICAgICAgKEdST1VQX1VTQUdFICYga2V5VXNhZ2UpKQotICAgICAgICB7Ci0gICAgICAgICAgICBBX1VOVElNRU9VVCgmYXItPmRpc2Nvbm5lY3RfdGltZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgIHN0YXR1cyA9IHdtaV9hZGRLZXlfY21kKGFyLT5hcldtaSwgaW5kZXgsIGtleVR5cGUsIGtleVVzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUxlbiwga2V5UnNjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleURhdGEsIEtFWV9PUF9JTklUX1ZBTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAodTggKilleHQtPmFkZHIuc2FfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTWU5DX0JPVEhfV01JRkxBRyk7Ci0gICAgICAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICAgICAgICByZXR1cm4gLUVJTzsKLSAgICAgICAgIH0KLQotI2lmZGVmIFVTRVJfS0VZUwotICAgICAgICBpay5pa19rZXlpeCA9IGluZGV4OwotICAgICAgICBpay5pa19rZXlsZW4gPSBrZXlMZW47Ci0gICAgICAgIG1lbWNweShpay5pa19rZXlkYXRhLCBrZXlEYXRhLCBrZXlMZW4pOwotICAgICAgICBtZW1jcHkoJmlrLmlrX2tleXJzYywga2V5UnNjLCBzaXplb2Yoa2V5UnNjKSk7Ci0gICAgICAgIG1lbWNweShpay5pa19tYWNhZGRyLCBleHQtPmFkZHIuc2FfZGF0YSwgRVRIX0FMRU4pOwotICAgICAgICBpZiAoZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX0dST1VQX0tFWSkgewotICAgICAgICAgICAgbWVtY3B5KCZhci0+dXNlcl9zYXZlZF9rZXlzLmJjYXN0X2lrLCAmaWssCi0gICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExcmVxX2tleSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbWVtY3B5KCZhci0+dXNlcl9zYXZlZF9rZXlzLnVjYXN0X2lrLCAmaWssCi0gICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFyZXFfa2V5KSk7Ci0gICAgICAgIH0KLSAgICAgICAgYXItPnVzZXJfc2F2ZWRfa2V5cy5rZXlPayA9IHRydWU7Ci0jZW5kaWYgLyogVVNFUl9LRVlTICovCi0gICAgfQotCi0KLSAgICByZXR1cm4gMDsKLX0KLQotLyoKLSAqIFNJT0NHSVdFTkNPREVFWFQKLSAqLwotc3RhdGljIGludAotYXI2MDAwX2lvY3RsX2dpd2VuY29kZWV4dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwgY2hhciAqZXh0cmEpCi17Ci0gICAgc3RydWN0IGFyNl9zb2Z0YyAqYXIgPSAoc3RydWN0IGFyNl9zb2Z0YyAqKWFyNmtfcHJpdihkZXYpOwotCi0gICAgaWYgKGFyLT5hcldsYW5TdGF0ZSA9PSBXTEFOX0RJU0FCTEVEKSB7Ci0gICAgICAgIHJldHVybiAtRUlPOwotICAgIH0KLQotICAgIGlmIChhci0+YXJQYWlyd2lzZUNyeXB0byA9PSBOT05FX0NSWVBUKSB7Ci0gICAgICAgIGVycS0+bGVuZ3RoID0gMDsKLSAgICAgICAgZXJxLT5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKLSAgICB9IGVsc2UgewotICAgICAgICBlcnEtPmxlbmd0aCA9IDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYgLy8gV0lSRUxFU1NfRVhUID49IDE4Ci0KLSNpZiBXSVJFTEVTU19FWFQgPiAyMAotc3RhdGljIGludCBhcjYwMDBfaW9jdGxfc2l3cG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0jaWZuZGVmIEFUSDZLX0NPTkZJR19PVEFfTU9ERQotICAgIHN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLSAgICBXTUlfUE9XRVJfTU9ERSBwb3dlcl9tb2RlOwotCi0gICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgIHJldHVybiAtRUlPOwotICAgIH0KLQotICAgIGlmIChhci0+YXJXbGFuU3RhdGUgPT0gV0xBTl9ESVNBQkxFRCkgewotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0KLSAgICBpZiAod3JxdS0+cG93ZXIuZGlzYWJsZWQpCi0gICAgICAgIHBvd2VyX21vZGUgPSBNQVhfUEVSRl9QT1dFUjsKLSAgICBlbHNlCi0gICAgICAgIHBvd2VyX21vZGUgPSBSRUNfUE9XRVI7Ci0KLSAgICBpZiAod21pX3Bvd2VybW9kZV9jbWQoYXItPmFyV21pLCBwb3dlcl9tb2RlKSA8IDApCi0gICAgICAgIHJldHVybiAtRUlPOwotI2VuZGlmCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYXI2MDAwX2lvY3RsX2dpd3Bvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotICAgIHN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLSAgICBXTUlfUE9XRVJfTU9ERSBwb3dlcl9tb2RlOwotCi0gICAgaWYgKGFyLT5hcldtaVJlYWR5ID09IGZhbHNlKSB7Ci0gICAgICAgIHJldHVybiAtRUlPOwotICAgIH0KLQotICAgIGlmIChhci0+YXJXbGFuU3RhdGUgPT0gV0xBTl9ESVNBQkxFRCkgewotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0KLSAgICBwb3dlcl9tb2RlID0gd21pX2dldF9wb3dlcl9tb2RlX2NtZChhci0+YXJXbWkpOwotCi0gICAgaWYgKHBvd2VyX21vZGUgPT0gTUFYX1BFUkZfUE9XRVIpCi0gICAgICAgIHdycXUtPnBvd2VyLmRpc2FibGVkID0gMTsKLSAgICBlbHNlCi0gICAgICAgIHdycXUtPnBvd2VyLmRpc2FibGVkID0gMDsKLQotICAgIHJldHVybiAwOwotfQotI2VuZGlmIC8vIFdJUkVMRVNTX0VYVCA+IDIwCi0KLS8qCi0gKiBTSU9DR0lXTkFNRQotICovCi1pbnQKLWFyNjAwMF9pb2N0bF9naXduYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgIGNoYXIgKm5hbWUsIGNoYXIgKmV4dHJhKQotewotICAgIHU4IGNhcGFiaWxpdHk7Ci0gICAgc3RydWN0IGFyNl9zb2Z0YyAqYXIgPSAoc3RydWN0IGFyNl9zb2Z0YyAqKWFyNmtfcHJpdihkZXYpOwotCi0gICAgaWYgKGlzX2l3aW9jdGxfYWxsb3dlZChhci0+YXJOZXh0TW9kZSwgaW5mby0+Y21kKSAhPSAwKSB7Ci0gICAgICAgIEFfUFJJTlRGKCJ3ZXh0X2lvY3RsOiBjbWQ9MHgleCBub3QgYWxsb3dlZCBpbiB0aGlzIG1vZGVcbiIsIGluZm8tPmNtZCk7Ci0gICAgICAgIHJldHVybiAtRU9QTk9UU1VQUDsKLSAgICB9Ci0KLSAgICBpZiAoYXItPmFyV2xhblN0YXRlID09IFdMQU5fRElTQUJMRUQpIHsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotCi0gICAgY2FwYWJpbGl0eSA9IGFyLT5hclBoeUNhcGFiaWxpdHk7Ci0gICAgaWYoYXItPmFyTmV0d29ya1R5cGUgPT0gSU5GUkFfTkVUV09SSyAmJiBhci0+YXJDb25uZWN0ZWQpIHsKLSAgICAgICAgYnNzX3QgKmJzcyA9IHdtaV9maW5kX25vZGUoYXItPmFyV21pLCBhci0+YXJCc3NpZCk7Ci0gICAgICAgIGlmIChic3MpIHsKLSAgICAgICAgICAgIGNhcGFiaWxpdHkgPSBnZXRfYnNzX3BoeV9jYXBhYmlsaXR5KGJzcyk7Ci0gICAgICAgICAgICB3bWlfbm9kZV9yZXR1cm4oYXItPmFyV21pLCBic3MpOwotICAgICAgICB9Ci0gICAgfQotICAgIHN3aXRjaCAoY2FwYWJpbGl0eSkgewotICAgIGNhc2UgKFdNSV8xMUFfQ0FQQUJJTElUWSk6Ci0gICAgICAgIHN0cm5jcHkobmFtZSwgIkFSNjAwMCA4MDIuMTFhIiwgSUZOQU1TSVopOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIChXTUlfMTFHX0NBUEFCSUxJVFkpOgotICAgICAgICBzdHJuY3B5KG5hbWUsICJBUjYwMDAgODAyLjExZyIsIElGTkFNU0laKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoV01JXzExQUdfQ0FQQUJJTElUWSk6Ci0gICAgICAgIHN0cm5jcHkobmFtZSwgIkFSNjAwMCA4MDIuMTFhZyIsIElGTkFNU0laKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoV01JXzExTkFfQ0FQQUJJTElUWSk6Ci0gICAgICAgIHN0cm5jcHkobmFtZSwgIkFSNjAwMCA4MDIuMTFuYSIsIElGTkFNU0laKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoV01JXzExTkdfQ0FQQUJJTElUWSk6Ci0gICAgICAgIHN0cm5jcHkobmFtZSwgIkFSNjAwMCA4MDIuMTFuZyIsIElGTkFNU0laKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoV01JXzExTkFHX0NBUEFCSUxJVFkpOgotICAgICAgICBzdHJuY3B5KG5hbWUsICJBUjYwMDAgODAyLjExbmFnIiwgSUZOQU1TSVopOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzdHJuY3B5KG5hbWUsICJBUjYwMDAgODAyLjExYiIsIElGTkFNU0laKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBTSU9DU0lXRlJFUQotICovCi1pbnQKLWFyNjAwMF9pb2N0bF9zaXdmcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgc3RydWN0IGl3X2ZyZXEgKmZyZXEsIGNoYXIgKmV4dHJhKQotewotICAgIHN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLQotICAgIGlmIChpc19pd2lvY3RsX2FsbG93ZWQoYXItPmFyTmV4dE1vZGUsIGluZm8tPmNtZCkgIT0gMCkgewotICAgICAgICBBX1BSSU5URigid2V4dF9pb2N0bDogY21kPTB4JXggbm90IGFsbG93ZWQgaW4gdGhpcyBtb2RlXG4iLCBpbmZvLT5jbWQpOwotICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7Ci0gICAgfQotCi0gICAgaWYgKGFyLT5hcldsYW5TdGF0ZSA9PSBXTEFOX0RJU0FCTEVEKSB7Ci0gICAgICAgIHJldHVybiAtRUlPOwotICAgIH0KLQotICAgIC8qCi0gICAgICogV2Ugc3VwcG9ydCBsaW1pdGluZyB0aGUgY2hhbm5lbHMgdmlhIHdtaWNvbmZpZy4KLSAgICAgKgotICAgICAqIFdlIHVzZSB0aGlzIGNvbW1hbmQgdG8gY29uZmlndXJlIHRoZSBjaGFubmVsIGhpbnQgZm9yIHRoZSBjb25uZWN0IGNtZAotICAgICAqIHNvIGl0IGlzIHBvc3NpYmxlIHRoZSB0YXJnZXQgd2lsbCBlbmQgdXAgY29ubmVjdGluZyB0byBhIGRpZmZlcmVudAotICAgICAqIGNoYW5uZWwuCi0gICAgICovCi0gICAgaWYgKGZyZXEtPmUgPiAxKSB7Ci0gICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgIH0gZWxzZSBpZiAoZnJlcS0+ZSA9PSAxKSB7Ci0gICAgICAgIGFyLT5hckNoYW5uZWxIaW50ID0gZnJlcS0+bSAvIDEwMDAwMDsKLSAgICB9IGVsc2UgewotICAgICAgICBpZihmcmVxLT5tKSB7Ci0gICAgICAgICAgICBhci0+YXJDaGFubmVsSGludCA9IHdsYW5faWVlZTJmcmVxKGZyZXEtPm0pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogQXV0byBDaGFubmVsIFNlbGVjdGlvbiAqLwotICAgICAgICAgICAgYXItPmFyQ2hhbm5lbEhpbnQgPSAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYXItPmFwX3Byb2ZpbGVfZmxhZyA9IDE7IC8qIFRoZXJlIGlzIGEgY2hhbmdlIGluIHByb2ZpbGUgKi8KLQotICAgIEFfUFJJTlRGKCJjaGFubmVsIGhpbnQgc2V0IHRvICVkXG4iLCBhci0+YXJDaGFubmVsSGludCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBTSU9DR0lXRlJFUQotICovCi1pbnQKLWFyNjAwMF9pb2N0bF9naXdmcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgY2hhciAqZXh0cmEpCi17Ci0gICAgc3RydWN0IGFyNl9zb2Z0YyAqYXIgPSAoc3RydWN0IGFyNl9zb2Z0YyAqKWFyNmtfcHJpdihkZXYpOwotCi0gICAgaWYgKGlzX2l3aW9jdGxfYWxsb3dlZChhci0+YXJOZXh0TW9kZSwgaW5mby0+Y21kKSAhPSAwKSB7Ci0gICAgICAgIEFfUFJJTlRGKCJ3ZXh0X2lvY3RsOiBjbWQ9MHgleCBub3QgYWxsb3dlZCBpbiB0aGlzIG1vZGVcbiIsIGluZm8tPmNtZCk7Ci0gICAgICAgIHJldHVybiAtRU9QTk9UU1VQUDsKLSAgICB9Ci0KLSAgICBpZiAoYXItPmFyV2xhblN0YXRlID09IFdMQU5fRElTQUJMRUQpIHsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotCi0gICAgaWYgKGFyLT5hck5ldHdvcmtUeXBlID09IEFQX05FVFdPUkspIHsKLSAgICAgICAgaWYoYXItPmFyQ2hhbm5lbEhpbnQpIHsKLSAgICAgICAgICAgIGZyZXEtPm0gPSBhci0+YXJDaGFubmVsSGludCAqIDEwMDAwMDsKLSAgICAgICAgfSBlbHNlIGlmKGFyLT5hckFDUykgewotICAgICAgICAgICAgZnJlcS0+bSA9IGFyLT5hckFDUyAqIDEwMDAwMDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGFyLT5hckNvbm5lY3RlZCAhPSB0cnVlKSB7Ci0gICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZyZXEtPm0gPSBhci0+YXJCc3NDaGFubmVsICogMTAwMDAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZnJlcS0+ZSA9IDE7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotLyoKLSAqIFNJT0NTSVdNT0RFCi0gKi8KLWludAotYXI2MDAwX2lvY3RsX3Npd21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICBfX3UzMiAqbW9kZSwgY2hhciAqZXh0cmEpCi17Ci0gICAgc3RydWN0IGFyNl9zb2Z0YyAqYXIgPSAoc3RydWN0IGFyNl9zb2Z0YyAqKWFyNmtfcHJpdihkZXYpOwotCi0gICAgaWYgKGlzX2l3aW9jdGxfYWxsb3dlZChhci0+YXJOZXh0TW9kZSwgaW5mby0+Y21kKSAhPSAwKSB7Ci0gICAgICAgIEFfUFJJTlRGKCJ3ZXh0X2lvY3RsOiBjbWQ9MHgleCBub3QgYWxsb3dlZCBpbiB0aGlzIG1vZGVcbiIsIGluZm8tPmNtZCk7Ci0gICAgICAgIHJldHVybiAtRU9QTk9UU1VQUDsKLSAgICB9Ci0KLSAgICBpZiAoYXItPmFyV2xhblN0YXRlID09IFdMQU5fRElTQUJMRUQpIHsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBjbGVhciBTU0lEIGR1cmluZyBtb2RlIHN3aXRjaCBpbiBjb25uZWN0ZWQgc3RhdGUKLSAgICAgKi8KLSAgICBpZighKGFyLT5hck5ldHdvcmtUeXBlID09ICgoKCptb2RlKSA9PSBJV19NT0RFX0lORlJBKSA/IElORlJBX05FVFdPUksgOiBBREhPQ19ORVRXT1JLKSkgJiYgKGFyLT5hckNvbm5lY3RlZCA9PSB0cnVlKSApewotICAgICAgICBBX01FTVpFUk8oYXItPmFyU3NpZCwgc2l6ZW9mKGFyLT5hclNzaWQpKTsKLSAgICAgICAgYXItPmFyU3NpZExlbiA9IDA7Ci0gICAgfQotCi0gICAgc3dpdGNoICgqbW9kZSkgewotICAgIGNhc2UgSVdfTU9ERV9JTkZSQToKLSAgICAgICAgYXItPmFyTmV4dE1vZGUgPSBJTkZSQV9ORVRXT1JLOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElXX01PREVfQURIT0M6Ci0gICAgICAgIGFyLT5hck5leHRNb2RlID0gQURIT0NfTkVUV09SSzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJV19NT0RFX01BU1RFUjoKLSAgICAgICAgYXItPmFyTmV4dE1vZGUgPSBBUF9ORVRXT1JLOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0KLSAgICAvKiBjbGVhciBhbGwgc2hhcmVkIHBhcmFtZXRlcnMgYmV0d2VlbiBBUCBhbmQgU1RBfElCU1MgbW9kZXMgd2hlbiB3ZQotICAgICAqIHN3aXRjaCBiZXR3ZWVuIHRoZW0uIFN3aXRjaCBiZXR3ZWVuIFNUQSAmIElCU1MgbW9kZXMgZG9lcydudCBjbGVhcgotICAgICAqIHRoZSBzaGFyZWQgcHJvZmlsZS4gVGhpcyBpcyBhcyBwZXIgdGhlIG9yaWdpbmFsIGRlc2lnbiBmb3Igc3dpdGNoaW5nCi0gICAgICogYmV0d2VlbiBTVEEgJiBJQlNTLgotICAgICAqLwotICAgIGlmIChhci0+YXJOZXR3b3JrVHlwZSA9PSBBUF9ORVRXT1JLIHx8IGFyLT5hck5leHRNb2RlID09IEFQX05FVFdPUkspIHsKLSAgICAgICAgYXItPmFyRG90MTFBdXRoTW9kZSAgICAgID0gT1BFTl9BVVRIOwotICAgICAgICBhci0+YXJBdXRoTW9kZSAgICAgICAgICAgPSBOT05FX0FVVEg7Ci0gICAgICAgIGFyLT5hclBhaXJ3aXNlQ3J5cHRvICAgICA9IE5PTkVfQ1JZUFQ7Ci0gICAgICAgIGFyLT5hclBhaXJ3aXNlQ3J5cHRvTGVuICA9IDA7Ci0gICAgICAgIGFyLT5hckdyb3VwQ3J5cHRvICAgICAgICA9IE5PTkVfQ1JZUFQ7Ci0gICAgICAgIGFyLT5hckdyb3VwQ3J5cHRvTGVuICAgICA9IDA7Ci0gICAgICAgIGFyLT5hckNoYW5uZWxIaW50ICAgICAgICA9IDA7Ci0gICAgICAgIGFyLT5hckJzc0NoYW5uZWwgICAgICAgICA9IDA7Ci0gICAgICAgIEFfTUVNWkVSTyhhci0+YXJCc3NpZCwgc2l6ZW9mKGFyLT5hckJzc2lkKSk7Ci0gICAgICAgIEFfTUVNWkVSTyhhci0+YXJTc2lkLCBzaXplb2YoYXItPmFyU3NpZCkpOwotICAgICAgICBhci0+YXJTc2lkTGVuID0gMDsKLSAgICB9Ci0KLSAgICAvKiBTU0lEIGhhcyB0byBiZSBjbGVhcmVkIHRvIHRyaWdnZXIgYSBwcm9maWxlIGNoYW5nZSB3aGlsZSBzd2l0Y2hpbmcKLSAgICAgKiBiZXR3ZWVuIFNUQSAmIElCU1MgbW9kZXMgaGF2aW5nIHRoZSBzYW1lIFNTSUQKLSAgICAgKi8KLSAgICBpZiAoYXItPmFyTmV0d29ya1R5cGUgIT0gYXItPmFyTmV4dE1vZGUpIHsKLSAgICAgICAgQV9NRU1aRVJPKGFyLT5hclNzaWQsIHNpemVvZihhci0+YXJTc2lkKSk7Ci0gICAgICAgIGFyLT5hclNzaWRMZW4gPSAwOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi0vKgotICogU0lPQ0dJV01PREUKLSAqLwotaW50Ci1hcjYwMDBfaW9jdGxfZ2l3bW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgIF9fdTMyICptb2RlLCBjaGFyICpleHRyYSkKLXsKLSAgICBzdHJ1Y3QgYXI2X3NvZnRjICphciA9IChzdHJ1Y3QgYXI2X3NvZnRjICopYXI2a19wcml2KGRldik7Ci0KLSAgICBpZiAoaXNfaXdpb2N0bF9hbGxvd2VkKGFyLT5hck5leHRNb2RlLCBpbmZvLT5jbWQpICE9IDApIHsKLSAgICAgICAgQV9QUklOVEYoIndleHRfaW9jdGw6IGNtZD0weCV4IG5vdCBhbGxvd2VkIGluIHRoaXMgbW9kZVxuIiwgaW5mby0+Y21kKTsKLSAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOwotICAgIH0KLQotICAgIGlmIChhci0+YXJXbGFuU3RhdGUgPT0gV0xBTl9ESVNBQkxFRCkgewotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKGFyLT5hck5ldHdvcmtUeXBlKSB7Ci0gICAgY2FzZSBJTkZSQV9ORVRXT1JLOgotICAgICAgICAqbW9kZSA9IElXX01PREVfSU5GUkE7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQURIT0NfTkVUV09SSzoKLSAgICAgICAgKm1vZGUgPSBJV19NT0RFX0FESE9DOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFQX05FVFdPUks6Ci0gICAgICAgICptb2RlID0gSVdfTU9ERV9NQVNURVI7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAtRUlPOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotLyoKLSAqIFNJT0NTSVdTRU5TCi0gKi8KLWludAotYXI2MDAwX2lvY3RsX3Npd3NlbnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnNlbnMsIGNoYXIgKmV4dHJhKQotewotICAgIHJldHVybiAwOwotfQotCi0vKgotICogU0lPQ0dJV1NFTlMKLSAqLwotaW50Ci1hcjYwMDBfaW9jdGxfZ2l3c2VucyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgIHN0cnVjdCBpd19wYXJhbSAqc2VucywgY2hhciAqZXh0cmEpCi17Ci0gICAgc2Vucy0+dmFsdWUgPSAwOwotICAgIHNlbnMtPmZpeGVkID0gMTsKLQotICAgIHJldHVybiAwOwotfQotCi0vKgotICogU0lPQ0dJV1JBTkdFCi0gKi8KLWludAotYXI2MDAwX2lvY3RsX2dpd3JhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQotewotICAgIHN0cnVjdCBhcjZfc29mdGMgKmFyID0gKHN0cnVjdCBhcjZfc29mdGMgKilhcjZrX3ByaXYoZGV2KTsKLSAgICBzdHJ1Y3QgaXdfcmFuZ2UgKnJhbmdlID0gKHN0cnVjdCBpd19yYW5nZSAqKSBleHRyYTsKLSAgICBpbnQgaSwgcmV0ID0gMDsKLQotICAgIGlmIChpc19pd2lvY3RsX2FsbG93ZWQoYXItPmFyTmV4dE1vZGUsIGluZm8tPmNtZCkgIT0gMCkgewotICAgICAgICBBX1BSSU5URigid2V4dF9pb2N0bDogY21kPTB4JXggbm90IGFsbG93ZWQgaW4gdGhpcyBtb2RlXG4iLCBpbmZvLT5jbWQpOwotICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7Ci0gICAgfQotCi0gICAgaWYgKGFyLT5iSXNEZXN0cm95UHJvZ3Jlc3MpIHsKLSAgICAgICAgcmV0dXJuIC1FQlVTWTsKLSAgICB9Ci0KLSAgICBpZiAoYXItPmFyV21pUmVhZHkgPT0gZmFsc2UpIHsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotCi0gICAgaWYgKGRvd25faW50ZXJydXB0aWJsZSgmYXItPmFyU2VtKSkgewotICAgICAgICByZXR1cm4gLUVSRVNUQVJUU1lTOwotICAgIH0KLQotICAgIGlmIChhci0+YklzRGVzdHJveVByb2dyZXNzKSB7Ci0gICAgICAgIHVwKCZhci0+YXJTZW0pOwotICAgICAgICByZXR1cm4gLUVCVVNZOwotICAgIH0KLQotICAgIGFyLT5hck51bUNoYW5uZWxzID0gLTE7Ci0gICAgQV9NRU1aRVJPKGFyLT5hckNoYW5uZWxMaXN0LCBzaXplb2YgKGFyLT5hckNoYW5uZWxMaXN0KSk7Ci0KLSAgICBpZiAod21pX2dldF9jaGFubmVsTGlzdF9jbWQoYXItPmFyV21pKSAhPSAwKSB7Ci0gICAgICAgIHVwKCZhci0+YXJTZW0pOwotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0KLSAgICB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChhckV2ZW50LCBhci0+YXJOdW1DaGFubmVscyAhPSAtMSwgd21pdGltZW91dCAqIEhaKTsKLQotICAgIGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotICAgICAgICB1cCgmYXItPmFyU2VtKTsKLSAgICAgICAgcmV0dXJuIC1FSU5UUjsKLSAgICB9Ci0KLSAgICBkYXRhLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKTsKLSAgICBBX01FTVpFUk8ocmFuZ2UsIHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpKTsKLQotICAgIHJhbmdlLT50eHBvd2VyX2NhcGEgPSAwOwotCi0gICAgcmFuZ2UtPm1pbl9wbXAgPSAxICogMTAyNDsKLSAgICByYW5nZS0+bWF4X3BtcCA9IDY1NTM1ICogMTAyNDsKLSAgICByYW5nZS0+bWluX3BtdCA9IDEgKiAxMDI0OwotICAgIHJhbmdlLT5tYXhfcG10ID0gMTAwMCAqIDEwMjQ7Ci0gICAgcmFuZ2UtPnBtcF9mbGFncyA9IElXX1BPV0VSX1BFUklPRDsKLSAgICByYW5nZS0+cG10X2ZsYWdzID0gSVdfUE9XRVJfVElNRU9VVDsKLSAgICByYW5nZS0+cG1fY2FwYSA9IDA7Ci0KLSAgICByYW5nZS0+d2VfdmVyc2lvbl9jb21waWxlZCA9IFdJUkVMRVNTX0VYVDsKLSAgICByYW5nZS0+d2VfdmVyc2lvbl9zb3VyY2UgPSAxMzsKLQotICAgIHJhbmdlLT5yZXRyeV9jYXBhID0gSVdfUkVUUllfTElNSVQ7Ci0gICAgcmFuZ2UtPnJldHJ5X2ZsYWdzID0gSVdfUkVUUllfTElNSVQ7Ci0gICAgcmFuZ2UtPm1pbl9yZXRyeSA9IDA7Ci0gICAgcmFuZ2UtPm1heF9yZXRyeSA9IDI1NTsKLQotICAgIHJhbmdlLT5udW1fZnJlcXVlbmN5ID0gcmFuZ2UtPm51bV9jaGFubmVscyA9IGFyLT5hck51bUNoYW5uZWxzOwotICAgIGZvciAoaSA9IDA7IGkgPCBhci0+YXJOdW1DaGFubmVsczsgaSsrKSB7Ci0gICAgICAgIHJhbmdlLT5mcmVxW2ldLmkgPSB3bGFuX2ZyZXEyaWVlZShhci0+YXJDaGFubmVsTGlzdFtpXSk7Ci0gICAgICAgIHJhbmdlLT5mcmVxW2ldLm0gPSBhci0+YXJDaGFubmVsTGlzdFtpXSAqIDEwMDAwMDsKLSAgICAgICAgcmFuZ2UtPmZyZXFbaV0uZSA9IDE7Ci0gICAgICAgICAvKgotICAgICAgICAgKiBMaW51eCBzdXBwb3J0cyBtYXggb2YgMzIgY2hhbm5lbHMsIGJhaWwgb3V0IG9uY2UgeW91Ci0gICAgICAgICAqIHJlYWNoIHRoZSBtYXguCi0gICAgICAgICAqLwotICAgICAgICBpZiAoaSA9PSBJV19NQVhfRlJFUVVFTkNJRVMpIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogTWF4IHF1YWxpdHkgaXMgbWF4IGZpZWxkIHZhbHVlIG1pbnVzIG5vaXNlIGZsb29yICovCi0gICAgcmFuZ2UtPm1heF9xdWFsLnF1YWwgID0gMHhmZiAtIDE2MTsKLQotICAgIC8qCi0gICAgICogSW4gb3JkZXIgdG8gdXNlIGRCbSBtZWFzdXJlbWVudHMsICdsZXZlbCcgbXVzdCBiZSBsb3dlcgotICAgICAqIHRoYW4gYW55IHBvc3NpYmxlIG1lYXN1cmVtZW50IChzZWUgaXdfcHJpbnRfc3RhdHMoKSBpbgotICAgICAqIHdpcmVsZXNzIHRvb2xzKS4gIEl0J3MgdW5jbGVhciBob3cgdGhpcyBpcyBtZWFudCB0byBiZQotICAgICAqIGRvbmUsIGJ1dCBzZXR0aW5nIHplcm8gaW4gdGhlc2UgdmFsdWVzIGZvcmNlcyBkQm0gYW5kCi0gICAgICogdGhlIGFjdHVhbCBudW1iZXJzIGFyZSBub3QgdXNlZC4KLSAgICAgKi8KLSAgICByYW5nZS0+bWF4X3F1YWwubGV2ZWwgPSAwOwotICAgIHJhbmdlLT5tYXhfcXVhbC5ub2lzZSA9IDA7Ci0KLSAgICByYW5nZS0+c2Vuc2l0aXZpdHkgPSAzOwotCi0gICAgcmFuZ2UtPm1heF9lbmNvZGluZ190b2tlbnMgPSA0OwotICAgIC8qIFhYWCBxdWVyeSBkcml2ZXIgdG8gZmluZCBvdXQgc3VwcG9ydGVkIGtleSBzaXplcyAqLwotICAgIHJhbmdlLT5udW1fZW5jb2Rpbmdfc2l6ZXMgPSAzOwotICAgIHJhbmdlLT5lbmNvZGluZ19zaXplWzBdID0gNTsgICAgICAgIC8qIDQwLWJpdCAqLwotICAgIHJhbmdlLT5lbmNvZGluZ19zaXplWzFdID0gMTM7ICAgICAgIC8qIDEwNC1iaXQgKi8KLSAgICByYW5nZS0+ZW5jb2Rpbmdfc2l6ZVsyXSA9IDE2OyAgICAgICAvKiAxMjgtYml0ICovCi0KLSAgICByYW5nZS0+bnVtX2JpdHJhdGVzID0gMDsKLQotICAgIC8qIGVzdGltYXRlZCBtYXhpbXVtIFRDUCB0aHJvdWdocHV0IHZhbHVlcyAoYnBzKSAqLwotICAgIHJhbmdlLT50aHJvdWdocHV0ID0gMjIwMDAwMDA7Ci0KLSAgICByYW5nZS0+bWluX3J0cyA9IDA7Ci0gICAgcmFuZ2UtPm1heF9ydHMgPSAyMzQ3OwotICAgIHJhbmdlLT5taW5fZnJhZyA9IDI1NjsKLSAgICByYW5nZS0+bWF4X2ZyYWcgPSAyMzQ2OwotCi0gICAgdXAoJmFyLT5hclNlbSk7Ci0KLSAgICByZXR1cm4gcmV0OwotfQotCi0KLS8qCi0gKiBTSU9DU0lXQVAKLSAqIFRoaXMgaW9jdGwgaXMgdXNlZCB0byBzZXQgdGhlIGRlc2lyZWQgYnNzaWQgZm9yIHRoZSBjb25uZWN0IGNvbW1hbmQuCi0gKi8KLWludAotYXI2MDAwX2lvY3RsX3Npd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwgY2hhciAqZXh0cmEpCi17Ci0gICAgc3RydWN0IGFyNl9zb2Z0YyAqYXIgPSAoc3RydWN0IGFyNl9zb2Z0YyAqKWFyNmtfcHJpdihkZXYpOwotCi0gICAgaWYgKGlzX2l3aW9jdGxfYWxsb3dlZChhci0+YXJOZXh0TW9kZSwgaW5mby0+Y21kKSAhPSAwKSB7Ci0gICAgICAgIEFfUFJJTlRGKCJ3ZXh0X2lvY3RsOiBjbWQ9MHgleCBub3QgYWxsb3dlZCBpbiB0aGlzIG1vZGVcbiIsIGluZm8tPmNtZCk7Ci0gICAgICAgIHJldHVybiAtRU9QTk9UU1VQUDsKLSAgICB9Ci0KLSAgICBpZiAoYXItPmFyV2xhblN0YXRlID09IFdMQU5fRElTQUJMRUQpIHsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotCi0gICAgaWYgKGFwX2FkZHItPnNhX2ZhbWlseSAhPSBBUlBIUkRfRVRIRVIpIHsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotCi0gICAgaWYgKG1lbWNtcCgmYXBfYWRkci0+c2FfZGF0YSwgYmNhc3RfbWFjLCBBUjYwMDBfRVRIX0FERFJfTEVOKSA9PSAwKSB7Ci0gICAgICAgIEFfTUVNWkVSTyhhci0+YXJSZXFCc3NpZCwgc2l6ZW9mKGFyLT5hclJlcUJzc2lkKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbWVtY3B5KGFyLT5hclJlcUJzc2lkLCAmYXBfYWRkci0+c2FfZGF0YSwgIHNpemVvZihhci0+YXJSZXFCc3NpZCkpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi0vKgotICogU0lPQ0dJV0FQCi0gKi8KLWludAotYXI2MDAwX2lvY3RsX2dpd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwgY2hhciAqZXh0cmEpCi17Ci0gICAgc3RydWN0IGFyNl9zb2Z0YyAqYXIgPSAoc3RydWN0IGFyNl9zb2Z0YyAqKWFyNmtfcHJpdihkZXYpOwotCi0gICAgaWYgKGlzX2l3aW9jdGxfYWxsb3dlZChhci0+YXJOZXh0TW9kZSwgaW5mby0+Y21kKSAhPSAwKSB7Ci0gICAgICAgIEFfUFJJTlRGKCJ3ZXh0X2lvY3RsOiBjbWQ9MHgleCBub3QgYWxsb3dlZCBpbiB0aGlzIG1vZGVcbiIsIGluZm8tPmNtZCk7Ci0gICAgICAgIHJldHVybiAtRU9QTk9UU1VQUDsKLSAgICB9Ci0KLSAgICBpZiAoYXItPmFyV2xhblN0YXRlID09IFdMQU5fRElTQUJMRUQpIHsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotCi0gICAgaWYgKGFyLT5hck5ldHdvcmtUeXBlID09IEFQX05FVFdPUkspIHsKLSAgICAgICAgbWVtY3B5KCZhcF9hZGRyLT5zYV9kYXRhLCBkZXYtPmRldl9hZGRyLCBBVEhfTUFDX0xFTik7Ci0gICAgICAgIGFwX2FkZHItPnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYgKGFyLT5hckNvbm5lY3RlZCAhPSB0cnVlKSB7Ci0gICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgIH0KLQotICAgIG1lbWNweSgmYXBfYWRkci0+c2FfZGF0YSwgYXItPmFyQnNzaWQsIHNpemVvZihhci0+YXJCc3NpZCkpOwotICAgIGFwX2FkZHItPnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLQotICAgIHJldHVybiAwOwotfQotCi0jaWYgKFdJUkVMRVNTX0VYVCA+PSAxOCkKLS8qCi0gKiBTSU9DU0lXTUxNRQotICovCi1pbnQKLWFyNjAwMF9pb2N0bF9zaXdtbG1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKLXsKLSAgICBzdHJ1Y3QgYXI2X3NvZnRjICphciA9IChzdHJ1Y3QgYXI2X3NvZnRjICopYXI2a19wcml2KGRldik7Ci0KLSAgICBpZiAoaXNfaXdpb2N0bF9hbGxvd2VkKGFyLT5hck5leHRNb2RlLCBpbmZvLT5jbWQpICE9IDApIHsKLSAgICAgICAgQV9QUklOVEYoIndleHRfaW9jdGw6IGNtZD0weCV4IG5vdCBhbGxvd2VkIGluIHRoaXMgbW9kZVxuIiwgaW5mby0+Y21kKTsKLSAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOwotICAgIH0KLQotICAgIGlmIChhci0+YklzRGVzdHJveVByb2dyZXNzKSB7Ci0gICAgICAgIHJldHVybiAtRUJVU1k7Ci0gICAgfQotCi0gICAgaWYgKGFyLT5hcldsYW5TdGF0ZSA9PSBXTEFOX0RJU0FCTEVEKSB7Ci0gICAgICAgIHJldHVybiAtRUlPOwotICAgIH0KLQotICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0KLSAgICBpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZhci0+YXJTZW0pKSB7Ci0gICAgICAgIHJldHVybiAtRVJFU1RBUlRTWVM7Ci0gICAgfQotCi0gICAgaWYgKGRhdGEtPnBvaW50ZXIgJiYgZGF0YS0+bGVuZ3RoID09IHNpemVvZihzdHJ1Y3QgaXdfbWxtZSkpIHsKLQotICAgICAgICB1OCBhck5ldHdvcmtUeXBlOwotICAgICAgICBzdHJ1Y3QgaXdfbWxtZSBtbG1lOwotCi0gICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmbWxtZSwgZGF0YS0+cG9pbnRlciwgc2l6ZW9mKHN0cnVjdCBpd19tbG1lKSkpCi0gICAgICAgICAgICByZXR1cm4gLUVJTzsKLQotICAgICAgICBzd2l0Y2ggKG1sbWUuY21kKSB7Ci0KLSAgICAgICAgICAgIGNhc2UgSVdfTUxNRV9ERUFVVEg6Ci0gICAgICAgICAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCi0gICAgICAgICAgICBjYXNlIElXX01MTUVfRElTQVNTT0M6Ci0gICAgICAgICAgICAgICAgaWYgKChhci0+YXJDb25uZWN0ZWQgIT0gdHJ1ZSkgfHwKLSAgICAgICAgICAgICAgICAgICAgKG1lbWNtcChhci0+YXJCc3NpZCwgbWxtZS5hZGRyLnNhX2RhdGEsIDYpICE9IDApKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgdXAoJmFyLT5hclNlbSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB3bWlfc2V0UG1raWRfY21kKGFyLT5hcldtaSwgYXItPmFyQnNzaWQsIE5VTEwsIDApOwotICAgICAgICAgICAgICAgIGFyTmV0d29ya1R5cGUgPSBhci0+YXJOZXR3b3JrVHlwZTsKLSAgICAgICAgICAgICAgICBhcjYwMDBfaW5pdF9wcm9maWxlX2luZm8oYXIpOwotICAgICAgICAgICAgICAgIGFyLT5hck5ldHdvcmtUeXBlID0gYXJOZXR3b3JrVHlwZTsKLSAgICAgICAgICAgICAgICByZWNvbm5lY3RfZmxhZyA9IDA7Ci0gICAgICAgICAgICAgICAgYXI2MDAwX2Rpc2Nvbm5lY3QoYXIpOwotICAgICAgICAgICAgICAgIEFfTUVNWkVSTyhhci0+YXJTc2lkLCBzaXplb2YoYXItPmFyU3NpZCkpOwotICAgICAgICAgICAgICAgIGFyLT5hclNzaWRMZW4gPSAwOwotICAgICAgICAgICAgICAgIGlmIChhci0+YXJTa2lwU2NhbiA9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgICAgICBBX01FTVpFUk8oYXItPmFyUmVxQnNzaWQsIHNpemVvZihhci0+YXJSZXFCc3NpZCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBJV19NTE1FX0FVVEg6Ci0gICAgICAgICAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCi0gICAgICAgICAgICBjYXNlIElXX01MTUVfQVNTT0M6Ci0gICAgICAgICAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHVwKCZhci0+YXJTZW0pOwotICAgICAgICAgICAgICAgIHJldHVybiAtRU9QTk9UU1VQUDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHVwKCZhci0+YXJTZW0pOwotICAgIHJldHVybiAwOwotfQotI2VuZGlmIC8qIFdJUkVMRVNTX0VYVCA+PSAxOCAqLwotCi0vKgotICogU0lPQ0dJV0FQTElTVAotICovCi1pbnQKLWFyNjAwMF9pb2N0bF9pd2FwbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCi17Ci0gICAgcmV0dXJuIC1FSU87ICAgICAgICAgICAgLyogZm9yIG5vdyAqLwotfQotCi0vKgotICogU0lPQ1NJV1NDQU4KLSAqLwotaW50Ci1hcjYwMDBfaW9jdGxfc2l3c2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCi17Ci0jZGVmaW5lIEFDVF9EV0VMTFRJTUVfREVGQVVMVCAgIDEwNQotI2RlZmluZSBIT01FX1RYRFJBSU5fVElNRSAgICAgICAxMDAKLSNkZWZpbmUgU0NBTl9JTlQgICAgICAgICAgICAgICAgSE9NRV9UWERSQUlOX1RJTUUgKyBBQ1RfRFdFTExUSU1FX0RFRkFVTFQKLSAgICBzdHJ1Y3QgYXI2X3NvZnRjICphciA9IChzdHJ1Y3QgYXI2X3NvZnRjICopYXI2a19wcml2KGRldik7Ci0gICAgaW50IHJldCA9IDA7Ci0KLSAgICBpZiAoaXNfaXdpb2N0bF9hbGxvd2VkKGFyLT5hck5leHRNb2RlLCBpbmZvLT5jbWQpICE9IDApIHsKLSAgICAgICAgQV9QUklOVEYoIndleHRfaW9jdGw6IGNtZD0weCV4IG5vdCBhbGxvd2VkIGluIHRoaXMgbW9kZVxuIiwgaW5mby0+Y21kKTsKLSAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOwotICAgIH0KLQotICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0KLSAgICBpZiAoYXItPmFyV2xhblN0YXRlID09IFdMQU5fRElTQUJMRUQpIHsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotCi0gICAgLyogSWYgc2NhbiBpcyBpc3N1ZWQgaW4gdGhlIG1pZGRsZSBvZiBvbmdvaW5nIHNjYW4gb3IgY29ubmVjdCwKLSAgICAgICBkb250IGlzc3VlIGFub3RoZXIgb25lICovCi0gICAgaWYgKCBhci0+c2Nhbl90cmlnZ2VyZWQgPiAwICkgewotICAgICAgICArK2FyLT5zY2FuX3RyaWdnZXJlZDsKLSAgICAgICAgaWYgKGFyLT5zY2FuX3RyaWdnZXJlZCA8IDUpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19XTEFOX1NDQU4sKCJTY2FuIHJlcXVlc3QgaXMgdHJpZ2dlcmVkIG92ZXIgNSB0aW1lcy4gTm90IHNjYW4gY29tcGxldGUgZXZlbnRcbiIpKTsKLSAgICAgICAgfQotICAgIH0gCi0KLSAgICBpZiAoIWFyLT5hclVzZXJCc3NGaWx0ZXIpIHsKLSAgICAgICAgaWYgKHdtaV9ic3NmaWx0ZXJfY21kKGFyLT5hcldtaSwgQUxMX0JTU19GSUxURVIsIDApICE9IDApIHsKLSAgICAgICAgICAgIHJldHVybiAtRUlPOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGFyLT5hckNvbm5lY3RlZCkgewotICAgICAgICBpZiAgKHdtaV9nZXRfc3RhdHNfY21kKGFyLT5hcldtaSkgIT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNpZmRlZiBBTkRST0lEX0VOVgotI2lmIFdJUkVMRVNTX0VYVCA+PSAxOAotICAgIGlmIChkYXRhLT5wb2ludGVyICYmIChkYXRhLT5sZW5ndGggPT0gc2l6ZW9mKHN0cnVjdCBpd19zY2FuX3JlcSkpKQotICAgIHsKLSAgICAgICAgaWYgKChkYXRhLT5mbGFncyAmIElXX1NDQU5fVEhJU19FU1NJRCkgPT0gSVdfU0NBTl9USElTX0VTU0lEKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJ1Y3QgaXdfc2Nhbl9yZXEgcmVxOwotICAgICAgICAgICAgaWYgKGNvcHlfZnJvbV91c2VyKCZyZXEsIGRhdGEtPnBvaW50ZXIsIHNpemVvZihzdHJ1Y3QgaXdfc2Nhbl9yZXEpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTzsKLSAgICAgICAgICAgIGlmICh3bWlfcHJvYmVkU3NpZF9jbWQoYXItPmFyV21pLCAxLCBTUEVDSUZJQ19TU0lEX0ZMQUcsIHJlcS5lc3NpZF9sZW4sIHJlcS5lc3NpZCkgIT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTzsKLSAgICAgICAgICAgIGFyLT5zY2FuU3BlY2lmaWNTc2lkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChhci0+c2NhblNwZWNpZmljU3NpZCkgewotICAgICAgICAgICAgICAgIGlmICh3bWlfcHJvYmVkU3NpZF9jbWQoYXItPmFyV21pLCAxLCBESVNBQkxFX1NTSURfRkxBRywgMCwgTlVMTCkgIT0gMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgICAgICAgICAgICAgIGFyLT5zY2FuU3BlY2lmaWNTc2lkID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKGFyLT5zY2FuU3BlY2lmaWNTc2lkKSB7Ci0gICAgICAgICAgICBpZiAod21pX3Byb2JlZFNzaWRfY21kKGFyLT5hcldtaSwgMSwgRElTQUJMRV9TU0lEX0ZMQUcsIDAsIE5VTEwpICE9IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgICAgICAgICAgYXItPnNjYW5TcGVjaWZpY1NzaWQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotI2VuZGlmIC8qIEFORFJPSURfRU5WICovCi0KLSAgICBpZiAod21pX3N0YXJ0c2Nhbl9jbWQoYXItPmFyV21pLCBXTUlfTE9OR19TQ0FOLCBmYWxzZSwgZmFsc2UsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgTlVMTCkgIT0gMCkgewotICAgICAgICByZXQgPSAtRUlPOwotICAgIH0KLQotICAgIGlmIChyZXQgPT0gMCkgewotICAgICAgICBhci0+c2Nhbl90cmlnZ2VyZWQgPSAxOwotICAgIH0KLQotICAgIHJldHVybiByZXQ7Ci0jdW5kZWYgIEFDVF9EV0VMTFRJTUVfREVGQVVMVAotI3VuZGVmIEhPTUVfVFhEUkFJTl9USU1FCi0jdW5kZWYgU0NBTl9JTlQKLX0KLQotCi0vKgotICogVW5pdHMgYXJlIGluIGRiIGFib3ZlIHRoZSBub2lzZSBmbG9vci4gVGhhdCBtZWFucyB0aGUKLSAqIHJzc2kgdmFsdWVzIHJlcG9ydGVkIGluIHRoZSB0eC9yeCBkZXNjcmlwdG9ycyBpbiB0aGUKLSAqIGRyaXZlciBhcmUgdGhlIFNOUiBleHByZXNzZWQgaW4gZGIuCi0gKgotICogSWYgeW91IGFzc3VtZSB0aGF0IHRoZSBub2lzZSBmbG9vciBpcyAtOTUsIHdoaWNoIGlzIGFuCi0gKiBleGNlbGxlbnQgYXNzdW1wdGlvbiA5OS41ICUgb2YgdGhlIHRpbWUsIHRoZW4geW91IGNhbgotICogZGVyaXZlIHRoZSBhYnNvbHV0ZSBzaWduYWwgbGV2ZWwgKGkuZS4gLTk1ICsgcnNzaSkuCi0gKiBUaGVyZSBhcmUgc29tZSBvdGhlciBzbGlnaHQgZmFjdG9ycyB0byB0YWtlIGludG8gYWNjb3VudAotICogZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIHJzc2kgbWVhc3VyZW1lbnQgaXMgZnJvbSAxMWIsCi0gKiAxMWcsIG9yIDExYS4gICBUaGVzZSBkaWZmZXJlbmNlcyBhcmUgYXQgbW9zdCAyZGIgYW5kCi0gKiBjYW4gYmUgZG9jdW1lbnRlZC4KLSAqCi0gKiBOQjogdmFyaW91cyBjYWxjdWxhdGlvbnMgYXJlIGJhc2VkIG9uIHRoZSBvcmlub2NvL3dhdmVsYW4KLSAqICAgICBkcml2ZXJzIGZvciBjb21wYXRpYmlsaXR5Ci0gKi8KLXN0YXRpYyB2b2lkCi1hcjYwMDBfc2V0X3F1YWxpdHkoc3RydWN0IGl3X3F1YWxpdHkgKmlxLCBzOCByc3NpKQotewotICAgIGlmIChyc3NpIDwgMCkgewotICAgICAgICBpcS0+cXVhbCA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaXEtPnF1YWwgPSByc3NpOwotICAgIH0KLQotICAgIC8qIE5COiBtYXggaXMgOTQgYmVjYXVzZSBub2lzZSBpcyBoYXJkY29kZWQgdG8gMTYxICovCi0gICAgaWYgKGlxLT5xdWFsID4gOTQpCi0gICAgICAgIGlxLT5xdWFsID0gOTQ7Ci0KLSAgICBpcS0+bm9pc2UgPSAxNjE7ICAgICAgICAvKiAtOTVkQm0gKi8KLSAgICBpcS0+bGV2ZWwgPSBpcS0+bm9pc2UgKyBpcS0+cXVhbDsKLSAgICBpcS0+dXBkYXRlZCA9IDc7Ci19Ci0KLQotaW50Ci1hcjYwMDBfaW9jdGxfc2l3Y29tbWl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKLXsKLSAgICBzdHJ1Y3QgYXI2X3NvZnRjICphciA9IChzdHJ1Y3QgYXI2X3NvZnRjICopYXI2a19wcml2KGRldik7Ci0KLSAgICBpZiAoaXNfaXdpb2N0bF9hbGxvd2VkKGFyLT5hck5leHRNb2RlLCBpbmZvLT5jbWQpICE9IDApIHsKLSAgICAgICAgQV9QUklOVEYoIndleHRfaW9jdGw6IGNtZD0weCV4IG5vdCBhbGxvd2VkIGluIHRoaXMgbW9kZVxuIiwgaW5mby0+Y21kKTsKLSAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOwotICAgIH0KLQotICAgIGlmIChhci0+YXJXbWlSZWFkeSA9PSBmYWxzZSkgewotICAgICAgICByZXR1cm4gLUVJTzsKLSAgICB9Ci0KLSAgICBpZiAoYXItPmFyV2xhblN0YXRlID09IFdMQU5fRElTQUJMRUQpIHsKLSAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotCi0gICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19XTEFOX0NPTk5FQ1QsKCJBUDogU1NJRCAlcyBmcmVxICVkIGF1dGhtb2RlICVkIGRvdDExIGF1dGggJWQiXAotICAgICAgICAgICAgICAgICAgICAiIFBXIGNyeXB0byAlZCBHUlAgY3J5cHRvICVkXG4iLAotICAgICAgICAgICAgICAgICAgICBhci0+YXJTc2lkLCBhci0+YXJDaGFubmVsSGludCwKLSAgICAgICAgICAgICAgICAgICAgYXItPmFyQXV0aE1vZGUsIGFyLT5hckRvdDExQXV0aE1vZGUsCi0gICAgICAgICAgICAgICAgICAgIGFyLT5hclBhaXJ3aXNlQ3J5cHRvLCBhci0+YXJHcm91cENyeXB0bykpOwotCi0gICAgYXI2MDAwX2FwX21vZGVfcHJvZmlsZV9jb21taXQoYXIpOwotCi0gICAgLyogaWYgdGhlcmUgaXMgYSBwcm9maWxlIHN3aXRjaCBmcm9tIFNUQXxJQlNTIG1vZGUgdG8gQVAgbW9kZSwKLSAgICAgKiB1cGRhdGUgdGhlIGhvc3QgZHJpdmVyIGFzc29jaWF0aW9uIHN0YXRlIGZvciB0aGUgU1RBfElCU1MgbW9kZS4KLSAgICAgKi8KLSAgICBpZiAoYXItPmFyTmV0d29ya1R5cGUgIT0gQVBfTkVUV09SSyAmJiBhci0+YXJOZXh0TW9kZSA9PSBBUF9ORVRXT1JLKSB7Ci0gICAgICAgIC8qIFN0b3AgZ2V0dGluZyBwa3RzIGZyb20gdXBwZXIgc3RhY2sgKi8KLSAgICAgICAgbmV0aWZfc3RvcF9xdWV1ZShhci0+YXJOZXREZXYpOwotICAgICAgICBBX01FTVpFUk8oYXItPmFyQnNzaWQsIHNpemVvZihhci0+YXJCc3NpZCkpOwotICAgICAgICBhci0+YXJCc3NDaGFubmVsID0gMDsKLSAgICAgICAgYXItPmFyQmVhY29uSW50ZXJ2YWwgPSAwOwotCi0gICAgICAgIC8qIEZsdXNoIHRoZSBUeCBxdWV1ZXMgKi8KLSAgICAgICAgYXI2MDAwX1R4RGF0YUNsZWFudXAoYXIpOwotCi0gICAgICAgIC8qIFN0YXJ0IGdldHRpbmcgcGt0cyBmcm9tIHVwcGVyIHN0YWNrICovCi0gICAgICAgIG5ldGlmX3dha2VfcXVldWUoYXItPmFyTmV0RGV2KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotI2RlZmluZSBXX1BST1RPKF94KSB3YWl0XyAjIyBfeAotI2RlZmluZSBXQUlUX0hBTkRMRVJfSU1QTChfeCwgdHlwZSkgXAotaW50IHdhaXRfICMjIF94IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCB0eXBlIHdycXUsIGNoYXIgKmV4dHJhKSB7XAotICAgIGludCByZXQ7IFwKLSAgICBkZXZfaG9sZChkZXYpOyBcCi0gICAgcnRubF91bmxvY2soKTsgXAotICAgIHJldCA9IF94KGRldiwgaW5mbywgd3JxdSwgZXh0cmEpOyBcCi0gICAgcnRubF9sb2NrKCk7IFwKLSAgICBkZXZfcHV0KGRldik7IFwKLSAgICByZXR1cm4gcmV0O1wKLX0KLQotV0FJVF9IQU5ETEVSX0lNUEwoYXI2MDAwX2lvY3RsX3Npd2Vzc2lkLCBzdHJ1Y3QgaXdfcG9pbnQgKikKLVdBSVRfSEFORExFUl9JTVBMKGFyNjAwMF9pb2N0bF9naXdyYXRlLCBzdHJ1Y3QgaXdfcGFyYW0gKikKLVdBSVRfSEFORExFUl9JTVBMKGFyNjAwMF9pb2N0bF9naXd0eHBvdywgc3RydWN0IGl3X3BhcmFtICopCi1XQUlUX0hBTkRMRVJfSU1QTChhcjYwMDBfaW9jdGxfZ2l3cmFuZ2UsIHN0cnVjdCBpd19wb2ludCopCi0KLS8qIFN0cnVjdHVyZXMgdG8gZXhwb3J0IHRoZSBXaXJlbGVzcyBIYW5kbGVycyAqLwotc3RhdGljIGNvbnN0IGl3X2hhbmRsZXIgYXRoX2hhbmRsZXJzW10gPSB7Ci0gICAgKGl3X2hhbmRsZXIpIGFyNjAwMF9pb2N0bF9zaXdjb21taXQsICAgICAgICAvKiBTSU9DU0lXQ09NTUlUICovCi0gICAgKGl3X2hhbmRsZXIpIGFyNjAwMF9pb2N0bF9naXduYW1lLCAgICAgICAgICAvKiBTSU9DR0lXTkFNRSAqLwotICAgIChpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0lPQ1NJV05XSUQgKi8KLSAgICAoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNJT0NHSVdOV0lEICovCi0gICAgKGl3X2hhbmRsZXIpIGFyNjAwMF9pb2N0bF9zaXdmcmVxLCAgICAgICAgICAvKiBTSU9DU0lXRlJFUSAqLwotICAgIChpd19oYW5kbGVyKSBhcjYwMDBfaW9jdGxfZ2l3ZnJlcSwgICAgICAgICAgLyogU0lPQ0dJV0ZSRVEgKi8KLSAgICAoaXdfaGFuZGxlcikgYXI2MDAwX2lvY3RsX3Npd21vZGUsICAgICAgICAgIC8qIFNJT0NTSVdNT0RFICovCi0gICAgKGl3X2hhbmRsZXIpIGFyNjAwMF9pb2N0bF9naXdtb2RlLCAgICAgICAgICAvKiBTSU9DR0lXTU9ERSAqLwotICAgIChpd19oYW5kbGVyKSBhcjYwMDBfaW9jdGxfc2l3c2VucywgICAgICAgICAgLyogU0lPQ1NJV1NFTlMgKi8KLSAgICAoaXdfaGFuZGxlcikgYXI2MDAwX2lvY3RsX2dpd3NlbnMsICAgICAgICAgIC8qIFNJT0NHSVdTRU5TICovCi0gICAgKGl3X2hhbmRsZXIpIE5VTEwgLyogbm90IF91c2VkICovLCAgICAgICAgICAvKiBTSU9DU0lXUkFOR0UgKi8KLSAgICAoaXdfaGFuZGxlcikgV19QUk9UTyhhcjYwMDBfaW9jdGxfZ2l3cmFuZ2UpLC8qIFNJT0NHSVdSQU5HRSAqLwotICAgIChpd19oYW5kbGVyKSBOVUxMIC8qIG5vdCB1c2VkICovLCAgICAgICAgICAgLyogU0lPQ1NJV1BSSVYgKi8KLSAgICAoaXdfaGFuZGxlcikgTlVMTCAvKiBrZXJuZWwgY29kZSAqLywgICAgICAgIC8qIFNJT0NHSVdQUklWICovCi0gICAgKGl3X2hhbmRsZXIpIE5VTEwgLyogbm90IHVzZWQgKi8sICAgICAgICAgICAvKiBTSU9DU0lXU1RBVFMgKi8KLSAgICAoaXdfaGFuZGxlcikgTlVMTCAvKiBrZXJuZWwgY29kZSAqLywgICAgICAgIC8qIFNJT0NHSVdTVEFUUyAqLwotICAgIChpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0lPQ1NJV1NQWSAqLwotICAgIChpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0lPQ0dJV1NQWSAqLwotICAgIChpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0lPQ1NJV1RIUlNQWSAqLwotICAgIChpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0lPQ0dJV1RIUlNQWSAqLwotICAgIChpd19oYW5kbGVyKSBhcjYwMDBfaW9jdGxfc2l3YXAsICAgICAgICAgICAgLyogU0lPQ1NJV0FQICovCi0gICAgKGl3X2hhbmRsZXIpIGFyNjAwMF9pb2N0bF9naXdhcCwgICAgICAgICAgICAvKiBTSU9DR0lXQVAgKi8KLSNpZiAoV0lSRUxFU1NfRVhUID49IDE4KQotICAgIChpd19oYW5kbGVyKSBhcjYwMDBfaW9jdGxfc2l3bWxtZSwgICAgICAgICAgLyogU0lPQ1NJV01MTUUgKi8KLSNlbHNlCi0gICAgKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtLSBob2xlIC0tICovCi0jZW5kaWYgIC8qIFdJUkVMRVNTX0VYVCA+PSAxOCAqLwotICAgIChpd19oYW5kbGVyKSBhcjYwMDBfaW9jdGxfaXdhcGxpc3QsICAgICAgICAgLyogU0lPQ0dJV0FQTElTVCAqLwotICAgIChpd19oYW5kbGVyKSBhcjYwMDBfaW9jdGxfc2l3c2NhbiwgICAgICAgICAgLyogU0lPQ1NJV1NDQU4gKi8KLSAgICAoaXdfaGFuZGxlcikgYXI2MDAwX2lvY3RsX2dpd3NjYW4sICAgICAgICAgIC8qIFNJT0NHSVdTQ0FOICovCi0gICAgKGl3X2hhbmRsZXIpIFdfUFJPVE8oYXI2MDAwX2lvY3RsX3Npd2Vzc2lkKSwvKiBTSU9DU0lXRVNTSUQgKi8KLSAgICAoaXdfaGFuZGxlcikgYXI2MDAwX2lvY3RsX2dpd2Vzc2lkLCAgICAgICAgIC8qIFNJT0NHSVdFU1NJRCAqLwotICAgIChpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0lPQ1NJV05JQ0tOICovCi0gICAgKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTSU9DR0lXTklDS04gKi8KLSAgICAoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC0tIGhvbGUgLS0gKi8KLSAgICAoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC0tIGhvbGUgLS0gKi8KLSAgICAoaXdfaGFuZGxlcikgYXI2MDAwX2lvY3RsX3Npd3JhdGUsICAgICAgICAgIC8qIFNJT0NTSVdSQVRFICovCi0gICAgKGl3X2hhbmRsZXIpIFdfUFJPVE8oYXI2MDAwX2lvY3RsX2dpd3JhdGUpLCAvKiBTSU9DR0lXUkFURSAqLwotICAgIChpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0lPQ1NJV1JUUyAqLwotICAgIChpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0lPQ0dJV1JUUyAqLwotICAgIChpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0lPQ1NJV0ZSQUcgKi8KLSAgICAoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNJT0NHSVdGUkFHICovCi0gICAgKGl3X2hhbmRsZXIpIGFyNjAwMF9pb2N0bF9zaXd0eHBvdywgICAgICAgICAvKiBTSU9DU0lXVFhQT1cgKi8KLSAgICAoaXdfaGFuZGxlcikgV19QUk9UTyhhcjYwMDBfaW9jdGxfZ2l3dHhwb3cpLC8qIFNJT0NHSVdUWFBPVyAqLwotICAgIChpd19oYW5kbGVyKSBhcjYwMDBfaW9jdGxfc2l3cmV0cnksICAgICAgICAgLyogU0lPQ1NJV1JFVFJZICovCi0gICAgKGl3X2hhbmRsZXIpIGFyNjAwMF9pb2N0bF9naXdyZXRyeSwgICAgICAgICAvKiBTSU9DR0lXUkVUUlkgKi8KLSAgICAoaXdfaGFuZGxlcikgYXI2MDAwX2lvY3RsX3Npd2VuY29kZSwgICAgICAgIC8qIFNJT0NTSVdFTkNPREUgKi8KLSAgICAoaXdfaGFuZGxlcikgYXI2MDAwX2lvY3RsX2dpd2VuY29kZSwgICAgICAgIC8qIFNJT0NHSVdFTkNPREUgKi8KLSNpZiBXSVJFTEVTU19FWFQgPiAyMAotICAgIChpd19oYW5kbGVyKSBhcjYwMDBfaW9jdGxfc2l3cG93ZXIsICAgICAgICAgLyogU0lPQ1NJV1BPV0VSICovCi0gICAgKGl3X2hhbmRsZXIpIGFyNjAwMF9pb2N0bF9naXdwb3dlciwgICAgICAgICAvKiBTSU9DR0lXUE9XRVIgKi8KLSNlbmRpZiAvLyBXSVJFTEVTU19FWFQgPiAyMAotI2lmIFdJUkVMRVNTX0VYVCA+PSAxOAotICAgIChpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLS0gaG9sZSAtLSAqLwotICAgIChpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLS0gaG9sZSAtLSAqLwotICAgIChpd19oYW5kbGVyKSBhcjYwMDBfaW9jdGxfc2l3Z2VuaWUsICAgICAgICAgLyogU0lPQ1NJV0dFTklFICovCi0gICAgKGl3X2hhbmRsZXIpIGFyNjAwMF9pb2N0bF9naXdnZW5pZSwgICAgICAgICAvKiBTSU9DR0lXR0VOSUUgKi8KLSAgICAoaXdfaGFuZGxlcikgYXI2MDAwX2lvY3RsX3Npd2F1dGgsICAgICAgICAgIC8qIFNJT0NTSVdBVVRIICovCi0gICAgKGl3X2hhbmRsZXIpIGFyNjAwMF9pb2N0bF9naXdhdXRoLCAgICAgICAgICAvKiBTSU9DR0lXQVVUSCAqLwotICAgIChpd19oYW5kbGVyKSBhcjYwMDBfaW9jdGxfc2l3ZW5jb2RlZXh0LCAgICAgLyogU0lPQ1NJV0VOQ09ERUVYVCAqLwotICAgIChpd19oYW5kbGVyKSBhcjYwMDBfaW9jdGxfZ2l3ZW5jb2RlZXh0LCAgICAgLyogU0lPQ0dJV0VOQ09ERUVYVCAqLwotICAgIChpd19oYW5kbGVyKSBhcjYwMDBfaW9jdGxfc2l3cG1rc2EsICAgICAgICAgLyogU0lPQ1NJV1BNS1NBICovCi0jZW5kaWYgLy8gV0lSRUxFU1NfRVhUID49IDE4Ci19OwotCi1zdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgYXRoX2l3X2hhbmRsZXJfZGVmID0gewotICAgIC5zdGFuZGFyZCAgICAgICAgID0gKGl3X2hhbmRsZXIgKilhdGhfaGFuZGxlcnMsCi0gICAgLm51bV9zdGFuZGFyZCAgICAgPSBBUlJBWV9TSVpFKGF0aF9oYW5kbGVycyksCi0gICAgLnByaXZhdGUgICAgICAgICAgPSBOVUxMLAotICAgIC5udW1fcHJpdmF0ZSAgICAgID0gMCwKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL3Jlb3JkZXIvcmN2X2FnZ3IuYyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvcmVvcmRlci9yY3ZfYWdnci5jCmluZGV4IDA5NGIyMjcuLjliMTUwOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvcmVvcmRlci9yY3ZfYWdnci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvcmVvcmRlci9yY3ZfYWdnci5jCkBAIC0yMSwxMSArMjEsOCBAQAogICoKICAqLwogCi0jaWZkZWYgIEFUSF9BUjZLXzExTl9TVVBQT1JUCi0KICNpbmNsdWRlIDxhX2NvbmZpZy5oPgogI2luY2x1ZGUgPGF0aGRlZnMuaD4KLSNpbmNsdWRlIDxhX3R5cGVzLmg+CiAjaW5jbHVkZSA8YV9vc2FwaS5oPgogI2luY2x1ZGUgPGFfZGVidWcuaD4KICNpbmNsdWRlICJwa3RfbG9nLmgiCkBAIC00MCw3ICszNyw3IEBACiBhZ2dyX3NsaWNlX2Ftc2R1KHN0cnVjdCBhZ2dyX2luZm8gKnBfYWdnciwgc3RydWN0IHJ4dGlkICpyeHRpZCwgdm9pZCAqKm9zYnVmKTsKIAogc3RhdGljIHZvaWQKLWFnZ3JfdGltZW91dChBX0FUSF9USU1FUiBhcmcpOworYWdncl90aW1lb3V0KHVuc2lnbmVkIGxvbmcgYXJnKTsKIAogc3RhdGljIHZvaWQKIGFnZ3JfZGVxdWVfZnJtcyhzdHJ1Y3QgYWdncl9pbmZvICpwX2FnZ3IsIHU4IHRpZCwgdTE2IHNlcV9ubywgdTggb3JkZXIpOwpAQCAtMTIzLDcgKzEyMCw3IEBACiAgICAgcnh0aWQtPmhvbGRfcV9zeiA9IDA7CiAKICAgICBpZihyeHRpZC0+aG9sZF9xKSB7Ci0gICAgICAgIEFfRlJFRShyeHRpZC0+aG9sZF9xKTsKKyAgICAgICAga2ZyZWUocnh0aWQtPmhvbGRfcSk7CiAgICAgICAgIHJ4dGlkLT5ob2xkX3EgPSBOVUxMOwogICAgIH0KIApAQCAtMTU0LDcgKzE1MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBBX05FVEJVRl9GUkVFKHJ4dGlkLT5ob2xkX3Fba10ub3NidWYpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIEFfRlJFRShyeHRpZC0+aG9sZF9xKTsKKyAgICAgICAgICAgICAgICBrZnJlZShyeHRpZC0+aG9sZF9xKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8qIEZyZWUgdGhlIGRpc3BhdGNoIHEgY29udGVudHMqLwogICAgICAgICAgICAgd2hpbGUoQV9ORVRCVUZfUVVFVUVfU0laRSgmcnh0aWQtPnEpKSB7CkBAIC0xNjgsNyArMTY1LDcgQEAKICAgICAgICAgd2hpbGUoQV9ORVRCVUZfUVVFVUVfU0laRSgmcF9hZ2dyLT5mcmVlUSkpIHsKICAgICAgICAgICAgIEFfTkVUQlVGX0ZSRUUoQV9ORVRCVUZfREVRVUVVRSgmcF9hZ2dyLT5mcmVlUSkpOwogICAgICAgICB9Ci0gICAgICAgIEFfRlJFRShwX2FnZ3IpOworICAgICAgICBrZnJlZShwX2FnZ3IpOwogICAgIH0KICAgICBBX1BSSU5URigib3V0IGFnZ3JfbW9kdWxlX2Rlc3Ryb3lcbiIpOwogfQpAQCAtNTczLDcgKzU3MCw3IEBACiAKIAogc3RhdGljIHZvaWQKLWFnZ3JfdGltZW91dChBX0FUSF9USU1FUiBhcmcpCithZ2dyX3RpbWVvdXQodW5zaWduZWQgbG9uZyBhcmcpCiB7CiAgICAgdTggaSxqOwogICAgIHN0cnVjdCBhZ2dyX2luZm8gKnBfYWdnciA9IChzdHJ1Y3QgYWdncl9pbmZvICopYXJnOwpAQCAtNjYyLDUgKzY1OSwzIEBACiAgICAgQV9QUklOVEYoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4iKTsKIAogfQotCi0jZW5kaWYgIC8qIEFUSF9BUjZLXzExTl9TVVBQT1JUICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL3dsYW4vaW5jbHVkZS9pZWVlODAyMTEuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvd2xhbi9pbmNsdWRlL2llZWU4MDIxMS5oCmluZGV4IDUzMmFiMGUuLmNmNDdkMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvd2xhbi9pbmNsdWRlL2llZWU4MDIxMS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvd2xhbi9pbmNsdWRlL2llZWU4MDIxMS5oCkBAIC0yMyw4ICsyMyw2IEBACiAjaWZuZGVmIF9ORVQ4MDIxMV9JRUVFODAyMTFfSF8KICNkZWZpbmUgX05FVDgwMjExX0lFRUU4MDIxMV9IXwogCi0jaW5jbHVkZSAiYXRoc3RhcnRwYWNrLmgiCi0KIC8qCiAgKiA4MDIuMTEgcHJvdG9jb2wgZGVmaW5pdGlvbnMuCiAgKi8KQEAgLTM5Niw2ICszOTQsNCBAQAogCiAjZGVmaW5lIElFRUU4MDIxMV9QU19NQVhfUVVFVUUgICAgNTAgLypNYXhpbXVtIG5vIG9mIGJ1ZmZlcnMgdGhhdCBjYW4gYmUgcXVldWVzIGZvciBQUyovCiAKLSNpbmNsdWRlICJhdGhlbmRwYWNrLmgiCi0KICNlbmRpZiAvKiBfTkVUODAyMTFfSUVFRTgwMjExX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL3dsYW4vc3JjL3dsYW5fbm9kZS5jIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC93bGFuL3NyYy93bGFuX25vZGUuYwppbmRleCAxYTNhYzdkLi4wZmU1ZjRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL3dsYW4vc3JjL3dsYW5fbm9kZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvd2xhbi9zcmMvd2xhbl9ub2RlLmMKQEAgLTI0LDcgKzI0LDYgQEAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAjaW5jbHVkZSA8YV9jb25maWcuaD4KICNpbmNsdWRlIDxhdGhkZWZzLmg+Ci0jaW5jbHVkZSA8YV90eXBlcy5oPgogI2luY2x1ZGUgPGFfb3NhcGkuaD4KICNkZWZpbmUgQVRIX01PRFVMRV9OQU1FIHdsYW4KICNpbmNsdWRlIDxhX2RlYnVnLmg+CkBAIC01NCw3ICs1Myw3IEBACiAjZW5kaWYKIAogI2lmZGVmIFRIUkVBRF9YCi1zdGF0aWMgdm9pZCB3bGFuX25vZGVfdGltZW91dChBX0FUSF9USU1FUiBhcmcpOworc3RhdGljIHZvaWQgd2xhbl9ub2RlX3RpbWVvdXQodW5zaWduZWQgbG9uZyBhcmcpOwogI2VuZGlmCiAKIHN0YXRpYyBic3NfdCAqIF9pZWVlODAyMTFfZmluZF9ub2RlIChzdHJ1Y3QgaWVlZTgwMjExX25vZGVfdGFibGUgKm50LApAQCAtNzIsNyArNzEsNyBAQAogICAgICAgICB7CiAgICAgICAgIG5pLT5uaV9idWYgPSBBX01BTExPQ19OT1dBSVQod2hfc2l6ZSk7CiAgICAgICAgIGlmIChuaS0+bmlfYnVmID09IE5VTEwpIHsKLSAgICAgICAgICAgIEFfRlJFRShuaSk7CisgICAgICAgICAgICBrZnJlZShuaSk7CiAgICAgICAgICAgICBuaSA9IE5VTEw7CiAgICAgICAgICAgICByZXR1cm4gbmk7CiAgICAgICAgIH0KQEAgLTEwNCw5ICsxMDMsOSBAQAogd2xhbl9ub2RlX2ZyZWUoYnNzX3QgKm5pKQogewogICAgIGlmIChuaS0+bmlfYnVmICE9IE5VTEwpIHsKLSAgICAgICAgQV9GUkVFKG5pLT5uaV9idWYpOworICAgICAgICBrZnJlZShuaS0+bmlfYnVmKTsKICAgICB9Ci0gICAgQV9GUkVFKG5pKTsKKyAgICBrZnJlZShuaSk7CiB9CiAKIHZvaWQKQEAgLTM3NSw3ICszNzQsNyBAQAogCiAjaWZkZWYgVEhSRUFEX1gKIHN0YXRpYyB2b2lkCi13bGFuX25vZGVfdGltZW91dCAoQV9BVEhfVElNRVIgYXJnKQord2xhbl9ub2RlX3RpbWVvdXQgKHVuc2lnbmVkIGxvbmcgYXJnKQogewogICAgIHN0cnVjdCBpZWVlODAyMTFfbm9kZV90YWJsZSAqbnQgPSAoc3RydWN0IGllZWU4MDIxMV9ub2RlX3RhYmxlICopYXJnOwogICAgIGJzc190ICpic3MsICpuZXh0QnNzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC93bGFuL3NyYy93bGFuX3JlY3ZfYmVhY29uLmMgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL3dsYW4vc3JjL3dsYW5fcmVjdl9iZWFjb24uYwppbmRleCA5ZWJmZWNmLi4wN2I4MzEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL3dsYW4vc3JjL3dsYW5fcmVjdl9iZWFjb24uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL3dsYW4vc3JjL3dsYW5fcmVjdl9iZWFjb24uYwpAQCAtMjUsNyArMjUsNiBAQAogCiAjaW5jbHVkZSAiYV9jb25maWcuaCIKICNpbmNsdWRlICJhdGhkZWZzLmgiCi0jaW5jbHVkZSAiYV90eXBlcy5oIgogI2luY2x1ZGUgImFfb3NhcGkuaCIKICNpbmNsdWRlIDx3bWkuaD4KICNpbmNsdWRlIDxpZWVlODAyMTEuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvd2xhbi9zcmMvd2xhbl91dGlscy5jIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC93bGFuL3NyYy93bGFuX3V0aWxzLmMKaW5kZXggZmQwNWUzOS4uYmM5MTU5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC93bGFuL3NyYy93bGFuX3V0aWxzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC93bGFuL3NyYy93bGFuX3V0aWxzLmMKQEAgLTI0LDcgKzI0LDYgQEAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAjaW5jbHVkZSA8YV9jb25maWcuaD4KICNpbmNsdWRlIDxhdGhkZWZzLmg+Ci0jaW5jbHVkZSA8YV90eXBlcy5oPgogI2luY2x1ZGUgPGFfb3NhcGkuaD4KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvd21pL3dtaS5jIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC93bWkvd21pLmMKaW5kZXggYTAwYmYwYS4uNGExN2Y5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC93bWkvd21pLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC93bWkvd21pLmMKQEAgLTI1LDcgKzI1LDYgQEAKIAogI2luY2x1ZGUgPGFfY29uZmlnLmg+CiAjaW5jbHVkZSA8YXRoZGVmcy5oPgotI2luY2x1ZGUgPGFfdHlwZXMuaD4KICNpbmNsdWRlIDxhX29zYXBpLmg+CiAjaW5jbHVkZSAiaHRjLmgiCiAjaW5jbHVkZSAiaHRjX2FwaS5oIgpAQCAtMzUsNyArMzQsNiBAQAogI2luY2x1ZGUgPGllZWU4MDIxMS5oPgogI2luY2x1ZGUgPGllZWU4MDIxMV9ub2RlLmg+CiAjaW5jbHVkZSAiZHNldF9hcGkuaCIKLSNpbmNsdWRlICJncGlvX2FwaS5oIgogI2luY2x1ZGUgIndtaV9ob3N0LmgiCiAjaW5jbHVkZSAiYV9kcnYuaCIKICNpbmNsdWRlICJhX2Rydl9hcGkuaCIKQEAgLTEyOSwxNCArMTI3LDYgQEAKIHN0YXRpYyBpbnQKIHdtaV9zZXRfcGFyYW1zX2V2ZW50X3J4KHN0cnVjdCB3bWlfdCAqd21pcCwgdTggKmRhdGFwLCB1MzIgbGVuKTsKIAotc3RhdGljIGludAotd21pX2FjbV9yZWplY3RfZXZlbnRfcngoc3RydWN0IHdtaV90ICp3bWlwLCB1OCAqZGF0YXAsIHUzMiBsZW4pOwotCi0jaWZkZWYgQ09ORklHX0hPU1RfR1BJT19TVVBQT1JUCi1zdGF0aWMgaW50IHdtaV9ncGlvX2ludHJfcngoc3RydWN0IHdtaV90ICp3bWlwLCB1OCAqZGF0YXAsIGludCBsZW4pOwotc3RhdGljIGludCB3bWlfZ3Bpb19kYXRhX3J4KHN0cnVjdCB3bWlfdCAqd21pcCwgdTggKmRhdGFwLCBpbnQgbGVuKTsKLXN0YXRpYyBpbnQgd21pX2dwaW9fYWNrX3J4KHN0cnVjdCB3bWlfdCAqd21pcCwgdTggKmRhdGFwLCBpbnQgbGVuKTsKLSNlbmRpZiAvKiBDT05GSUdfSE9TVF9HUElPX1NVUFBPUlQgKi8KIAogI2lmZGVmIENPTkZJR19IT1NUX1RDTURfU1VQUE9SVAogc3RhdGljIGludApAQCAtMTg3LDEzICsxNzcsMTEgQEAKIAogc3RhdGljIGludCB3bWlfcGVlcl9ub2RlX2V2ZW50X3J4IChzdHJ1Y3Qgd21pX3QgKndtaXAsIHU4ICpkYXRhcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuKTsKLSNpZmRlZiBBVEhfQVI2S18xMU5fU1VQUE9SVAogc3RhdGljIGludCB3bWlfYWRkYmFfcmVxX2V2ZW50X3J4KHN0cnVjdCB3bWlfdCAqLCB1OCAqLCBpbnQpOwogc3RhdGljIGludCB3bWlfYWRkYmFfcmVzcF9ldmVudF9yeChzdHJ1Y3Qgd21pX3QgKiwgdTggKiwgaW50KTsKIHN0YXRpYyBpbnQgd21pX2RlbGJhX3JlcV9ldmVudF9yeChzdHJ1Y3Qgd21pX3QgKiwgdTggKiwgaW50KTsKIHN0YXRpYyBpbnQgd21pX2J0Y29leF9jb25maWdfZXZlbnRfcngoc3RydWN0IHdtaV90ICp3bWlwLCB1OCAqZGF0YXAsIGludCBsZW4pOwogc3RhdGljIGludCB3bWlfYnRjb2V4X3N0YXRzX2V2ZW50X3J4KHN0cnVjdCB3bWlfdCAqd21pcCwgdTggKmRhdGFwLCBpbnQgbGVuKTsKLSNlbmRpZgogc3RhdGljIGludCB3bWlfaGNpX2V2ZW50X3J4KHN0cnVjdCB3bWlfdCAqLCB1OCAqLCBpbnQpOwogCiAjaWZkZWYgV0FQSV9FTkFCTEUKQEAgLTI3Myw4ICsyNjEsNiBAQAogICAgICAgICAgICAgICAgIFdNTV9BQ19WTywKICAgICAgICAgICAgIH07CiAKLSNpbmNsdWRlICJhdGhzdGFydHBhY2suaCIKLQogLyogVGhpcyBzdHVmZiBpcyB1c2VkIHdoZW4gd2Ugd2FudCBhIHNpbXBsZSBsYXllci0zIHZpc2liaWxpdHkgKi8KIHR5cGVkZWYgUFJFUEFDSyBzdHJ1Y3QgX2lwaGRyIHsKICAgICB1OCBpcF92ZXJfaGRybGVuOyAgICAgICAgICAvKiB2ZXJzaW9uIGFuZCBoZHIgbGVuZ3RoICovCkBAIC0yOTIsOCArMjc4LDYgQEAKICAgICB1OCBpcF9kc3RbNF07CiB9IFBPU1RQQUNLIGlwaGRyOwogCi0jaW5jbHVkZSAiYXRoZW5kcGFjay5oIgotCiBzdGF0aWMgczE2IHJzc2lfZXZlbnRfdmFsdWUgPSAwOwogc3RhdGljIHMxNiBzbnJfZXZlbnRfdmFsdWUgPSAwOwogCkBAIC0zODEsNyArMzY1LDcgQEAKICAgICAgICAgICAgIEFfTVVURVhfREVMRVRFKCZ3bWlwLT53bWlfbG9jayk7CiAjZW5kaWYKICAgICAgICAgfQotICAgICAgICBBX0ZSRUUod21pcCk7CisgICAgICAgIGtmcmVlKHdtaXApOwogICAgIH0KIH0KIApAQCAtNDc1LDcgKzQ1OSw2IEBACiAgICAgICAgIAkqcFZlcnNpb24gPSBXTUlfTUVUQV9WRVJTSU9OXzE7CiAJCXJldHVybiAoMCk7CiAgICAgCQl9Ci0jaWZkZWYgQ09ORklHX0NIRUNLU1VNX09GRkxPQUQKIAljYXNlIFdNSV9NRVRBX1ZFUlNJT05fMjoKIAkJewogICAgICAJCVdNSV9UWF9NRVRBX1YyICpwVjIgOwpAQCAtNDg3LDcgKzQ3MCw2IEBACiAgICAgICAgICAJbWVtY3B5KHBWMiwoV01JX1RYX01FVEFfVjIgKilwVHhNZXRhUyxzaXplb2YoV01JX1RYX01FVEFfVjIpKTsKIAkJcmV0dXJuICgwKTsKICAgICAJCX0KLSNlbmRpZgogCWRlZmF1bHQ6CiAJCXJldHVybiAoMCk7CiAgICAgfQpAQCAtNTI1LDcgKzUwNyw4IEBACiAgICAgfQogCiAgICAgV01JX0RBVEFfSERSX1NFVF9NRVRBKGR0SGRyLCBtZXRhVmVyc2lvbik7Ci0gICAgLy9kdEhkci0+cnNzaSA9IDA7CisKKyAgICBkdEhkci0+aW5mbzMgPSAwOwogCiAgICAgcmV0dXJuICgwKTsKIH0KQEAgLTg2NSwxNyArODQ4LDYgQEAKICAgICAgICAgc3RhdHVzID0gd21pX2RzZXRfZGF0YV9yZXFfcngod21pcCwgZGF0YXAsIGxlbik7CiAgICAgICAgIGJyZWFrOwogI2VuZGlmIC8qIENPTkZJR19IT1NUX0RTRVRfU1VQUE9SVCAqLwotI2lmZGVmIENPTkZJR19IT1NUX0dQSU9fU1VQUE9SVAotICAgIGNhc2UgKFdNSVhfR1BJT19JTlRSX0VWRU5USUQpOgotICAgICAgICB3bWlfZ3Bpb19pbnRyX3J4KHdtaXAsIGRhdGFwLCBsZW4pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIChXTUlYX0dQSU9fREFUQV9FVkVOVElEKToKLSAgICAgICAgd21pX2dwaW9fZGF0YV9yeCh3bWlwLCBkYXRhcCwgbGVuKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoV01JWF9HUElPX0FDS19FVkVOVElEKToKLSAgICAgICAgd21pX2dwaW9fYWNrX3J4KHdtaXAsIGRhdGFwLCBsZW4pOwotICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBDT05GSUdfSE9TVF9HUElPX1NVUFBPUlQgKi8KICAgICBjYXNlIChXTUlYX0hCX0NIQUxMRU5HRV9SRVNQX0VWRU5USUQpOgogICAgICAgICB3bWlfaGJDaGFsbGVuZ2VSZXNwX3J4KHdtaXAsIGRhdGFwLCBsZW4pOwogICAgICAgICBicmVhazsKQEAgLTk2NywyMyArOTM5LDE5IEBACiAgICAgY2FzZSAoV01JX1JFQURZX0VWRU5USUQpOgogICAgICAgICBBX0RQUklOVEYoREJHX1dNSSwgKERCR0ZNVCAiV01JX1JFQURZX0VWRU5USURcbiIsIERCR0FSRykpOwogICAgICAgICBzdGF0dXMgPSB3bWlfcmVhZHlfZXZlbnRfcngod21pcCwgZGF0YXAsIGxlbik7Ci0gICAgICAgIEFfV01JX1NFTkRfRVZFTlRfVE9fQVBQKHdtaXAtPndtaV9kZXZ0LCBpZCwgZGF0YXAsIGxlbik7CiAgICAgICAgIEFfV01JX0RCR0xPR19JTklUX0RPTkUod21pcC0+d21pX2RldnQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIChXTUlfQ09OTkVDVF9FVkVOVElEKToKICAgICAgICAgQV9EUFJJTlRGKERCR19XTUksIChEQkdGTVQgIldNSV9DT05ORUNUX0VWRU5USURcbiIsIERCR0FSRykpOwogICAgICAgICBzdGF0dXMgPSB3bWlfY29ubmVjdF9ldmVudF9yeCh3bWlwLCBkYXRhcCwgbGVuKTsKLSAgICAgICAgQV9XTUlfU0VORF9HRU5FUklDX0VWRU5UX1RPX0FQUCh3bWlwLT53bWlfZGV2dCwgaWQsIGRhdGFwLCBsZW4pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIChXTUlfRElTQ09OTkVDVF9FVkVOVElEKToKICAgICAgICAgQV9EUFJJTlRGKERCR19XTUksIChEQkdGTVQgIldNSV9ESVNDT05ORUNUX0VWRU5USURcbiIsIERCR0FSRykpOwogICAgICAgICBzdGF0dXMgPSB3bWlfZGlzY29ubmVjdF9ldmVudF9yeCh3bWlwLCBkYXRhcCwgbGVuKTsKLSAgICAgICAgQV9XTUlfU0VORF9FVkVOVF9UT19BUFAod21pcC0+d21pX2RldnQsIGlkLCBkYXRhcCwgbGVuKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAoV01JX1BFRVJfTk9ERV9FVkVOVElEKToKICAgICAgICAgQV9EUFJJTlRGIChEQkdfV01JLCAoREJHRk1UICJXTUlfUEVFUl9OT0RFX0VWRU5USURcbiIsIERCR0FSRykpOwogICAgICAgICBzdGF0dXMgPSB3bWlfcGVlcl9ub2RlX2V2ZW50X3J4KHdtaXAsIGRhdGFwLCBsZW4pOwotICAgICAgICBBX1dNSV9TRU5EX0VWRU5UX1RPX0FQUCh3bWlwLT53bWlfZGV2dCwgaWQsIGRhdGFwLCBsZW4pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIChXTUlfVEtJUF9NSUNFUlJfRVZFTlRJRCk6CiAgICAgICAgIEFfRFBSSU5URihEQkdfV01JLCAoREJHRk1UICJXTUlfVEtJUF9NSUNFUlJfRVZFTlRJRFxuIiwgREJHQVJHKSk7CkBAIC0xMDE0LDcgKzk4Miw2IEBACiAgICAgICAgICAgICBtZW1jcHkoYmloLT5ic3NpZCwgYmloMi5ic3NpZCwgQVRIX01BQ19MRU4pOwogCiAgICAgICAgICAgICBzdGF0dXMgPSB3bWlfYnNzSW5mb19ldmVudF9yeCh3bWlwLCBkYXRhcCwgbGVuKTsKLSAgICAgICAgICAgIEFfV01JX1NFTkRfR0VORVJJQ19FVkVOVF9UT19BUFAod21pcC0+d21pX2RldnQsIGlkLCBkYXRhcCwgbGVuKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIChXTUlfUkVHRE9NQUlOX0VWRU5USUQpOgpAQCAtMTAyNCwxMyArOTkxLDYgQEAKICAgICBjYXNlIChXTUlfUFNUUkVBTV9USU1FT1VUX0VWRU5USUQpOgogICAgICAgICBBX0RQUklOVEYoREJHX1dNSSwgKERCR0ZNVCAiV01JX1BTVFJFQU1fVElNRU9VVF9FVkVOVElEXG4iLCBEQkdBUkcpKTsKICAgICAgICAgc3RhdHVzID0gd21pX3BzdHJlYW1fdGltZW91dF9ldmVudF9yeCh3bWlwLCBkYXRhcCwgbGVuKTsKLSAgICAgICAgICAgIC8qIHBzdHJlYW1zIGFyZSBmYXRwaXBlIGFic3RyYWN0aW9ucyB0aGF0IGdldCBpbXBsaWNpdGx5IGNyZWF0ZWQuCi0gICAgICAgICAgICAgKiBVc2VyIGFwcHMgb25seSBkZWFsIHdpdGggdGhpbnN0cmVhbXMuIGNyZWF0aW9uIG9mIGEgdGhpbnN0cmVhbQotICAgICAgICAgICAgICogYnkgdGhlIHVzZXIgb3IgZGF0YSB0cmFmZmljIGZsb3cgaW4gYW4gQUMgdHJpZ2dlcnMgaW1wbGljaXQKLSAgICAgICAgICAgICAqIHBzdHJlYW0gY3JlYXRpb24uIERvIHdlIG5lZWQgdG8gc2VuZCB0aGlzIGV2ZW50IHRvIEFwcC4uPwotICAgICAgICAgICAgICogbm8gaGFybSBpbiBzZW5kaW5nIGl0LgotICAgICAgICAgICAgICovCi0gICAgICAgIEFfV01JX1NFTkRfRVZFTlRfVE9fQVBQKHdtaXAtPndtaV9kZXZ0LCBpZCwgZGF0YXAsIGxlbik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgKFdNSV9ORUlHSEJPUl9SRVBPUlRfRVZFTlRJRCk6CiAgICAgICAgIEFfRFBSSU5URihEQkdfV01JLCAoREJHRk1UICJXTUlfTkVJR0hCT1JfUkVQT1JUX0VWRU5USURcbiIsIERCR0FSRykpOwpAQCAtMTAzOSw3ICs5OTksNiBAQAogICAgIGNhc2UgKFdNSV9TQ0FOX0NPTVBMRVRFX0VWRU5USUQpOgogICAgICAgICBBX0RQUklOVEYoREJHX1dNSSwgKERCR0ZNVCAiV01JX1NDQU5fQ09NUExFVEVfRVZFTlRJRFxuIiwgREJHQVJHKSk7CiAgICAgICAgIHN0YXR1cyA9IHdtaV9zY2FuQ29tcGxldGVfcngod21pcCwgZGF0YXAsIGxlbik7Ci0gICAgICAgIEFfV01JX1NFTkRfRVZFTlRfVE9fQVBQKHdtaXAtPndtaV9kZXZ0LCBpZCwgZGF0YXAsIGxlbik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgKFdNSV9DTURFUlJPUl9FVkVOVElEKToKICAgICAgICAgQV9EUFJJTlRGKERCR19XTUksIChEQkdGTVQgIldNSV9DTURFUlJPUl9FVkVOVElEXG4iLCBEQkdBUkcpKTsKQEAgLTEwNTYsNyArMTAxNSw2IEBACiAgICAgY2FzZSAoV01JX0VSUk9SX1JFUE9SVF9FVkVOVElEKToKICAgICAgICAgQV9EUFJJTlRGKERCR19XTUksIChEQkdGTVQgIldNSV9FUlJPUl9SRVBPUlRfRVZFTlRJRFxuIiwgREJHQVJHKSk7CiAgICAgICAgIHN0YXR1cyA9IHdtaV9yZXBvcnRFcnJvckV2ZW50X3J4KHdtaXAsIGRhdGFwLCBsZW4pOwotICAgICAgICBBX1dNSV9TRU5EX0VWRU5UX1RPX0FQUCh3bWlwLT53bWlfZGV2dCwgaWQsIGRhdGFwLCBsZW4pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIChXTUlfT1BUX1JYX0ZSQU1FX0VWRU5USUQpOgogICAgICAgICBBX0RQUklOVEYoREJHX1dNSSwgKERCR0ZNVCAiV01JX09QVF9SWF9GUkFNRV9FVkVOVElEXG4iLCBEQkdBUkcpKTsKQEAgLTEwOTUsNyArMTA1Myw2IEBACiAgICAgY2FzZSAoV01JX1RYX1JFVFJZX0VSUl9FVkVOVElEKToKICAgICAgICAgQV9EUFJJTlRGKERCR19XTUksIChEQkdGTVQgIldNSV9UWF9SRVRSWV9FUlJfRVZFTlRJRFxuIiwgREJHQVJHKSk7CiAgICAgICAgIHN0YXR1cyA9IHdtaV90eFJldHJ5RXJyRXZlbnRfcngod21pcCwgZGF0YXAsIGxlbik7Ci0gICAgICAgIEFfV01JX1NFTkRfRVZFTlRfVE9fQVBQKHdtaXAtPndtaV9kZXZ0LCBpZCwgZGF0YXAsIGxlbik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgKFdNSV9TTlJfVEhSRVNIT0xEX0VWRU5USUQpOgogICAgICAgICBBX0RQUklOVEYoREJHX1dNSSwgKERCR0ZNVCAiV01JX1NOUl9USFJFU0hPTERfRVZFTlRJRFxuIiwgREJHQVJHKSk7CkBAIC0xMTA0LDcgKzEwNjEsNiBAQAogICAgIGNhc2UgKFdNSV9MUV9USFJFU0hPTERfRVZFTlRJRCk6CiAgICAgICAgIEFfRFBSSU5URihEQkdfV01JLCAoREJHRk1UICJXTUlfTFFfVEhSRVNIT0xEX0VWRU5USURcbiIsIERCR0FSRykpOwogICAgICAgICBzdGF0dXMgPSB3bWlfbHFUaHJlc2hvbGRFdmVudF9yeCh3bWlwLCBkYXRhcCwgbGVuKTsKLSAgICAgICAgQV9XTUlfU0VORF9FVkVOVF9UT19BUFAod21pcC0+d21pX2RldnQsIGlkLCBkYXRhcCwgbGVuKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAoV01JX0FQTElTVF9FVkVOVElEKToKICAgICAgICAgQVJfREVCVUdfUFJJTlRGKEFUSF9ERUJVR19XTUksICgiUmVjZWl2ZWQgQVBMSVNUIEV2ZW50XG4iKSk7CkBAIC0xMTMzLDExICsxMDg5LDYgQEAKICAgICAgICAgQV9EUFJJTlRGKERCR19XTUksIChEQkdGTVQgIldNSV9TRVRfUEFSQU1TX1JFUExZIEV2ZW50XG4iLCBEQkdBUkcpKTsKICAgICAgICAgc3RhdHVzID0gd21pX3NldF9wYXJhbXNfZXZlbnRfcngod21pcCwgZGF0YXAsIGxlbik7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgKFdNSV9BQ01fUkVKRUNUX0VWRU5USUQpOgotICAgICAgICBBX0RQUklOVEYoREJHX1dNSSwgKERCR0ZNVCAiV01JX1NFVF9QQVJBTVNfUkVQTFkgRXZlbnRcbiIsIERCR0FSRykpOwotICAgICAgICBzdGF0dXMgPSB3bWlfYWNtX3JlamVjdF9ldmVudF9yeCh3bWlwLCBkYXRhcCwgbGVuKTsKLSAgICAgICAgYnJlYWs7CQkKLSNpZmRlZiBBVEhfQVI2S18xMU5fU1VQUE9SVAogICAgIGNhc2UgKFdNSV9BRERCQV9SRVFfRVZFTlRJRCk6CiAgICAgICAgIHN0YXR1cyA9IHdtaV9hZGRiYV9yZXFfZXZlbnRfcngod21pcCwgZGF0YXAsIGxlbik7CiAgICAgICAgIGJyZWFrOwpAQCAtMTE1NSw3ICsxMTA2LDYgQEAKIAkgICAgQV9EUFJJTlRGKERCR19XTUksIChEQkdGTVQgIldNSV9CVENPRVhfU1RBVFNfRVZFTlRJRCIsIERCR0FSRykpOwogICAgIAlzdGF0dXMgPSB3bWlfYnRjb2V4X3N0YXRzX2V2ZW50X3J4KHdtaXAsIGRhdGFwLCBsZW4pOwogCSAgICBicmVhazsKLSNlbmRpZgogICAgIGNhc2UgKFdNSV9UWF9DT01QTEVURV9FVkVOVElEKToKICAgICAgICAgewogICAgICAgICAgICAgaW50IGluZGV4OwpAQCAtMTIwOCw3ICsxMTU4LDcgQEAKIC8qIFNlbmQgYSAic2ltcGxlIiBleHRlbmRlZCB3bWkgY29tbWFuZCAtLSBvbmUgd2l0aCBubyBhcmd1bWVudHMuCiAgICBFbmFibGluZyB0aGlzIGNvbW1hbmQgb25seSBpZiBHUElPIG9yIHByb2ZpbGluZyBzdXBwb3J0IGlzIGVuYWJsZWQuCiAgICBUaGlzIGlzIHRvIHN1cHByZXNzIHdhcm5pbmdzIG9uIHNvbWUgcGxhdGZvcm1zICovCi0jaWYgZGVmaW5lZChDT05GSUdfSE9TVF9HUElPX1NVUFBPUlQpIHx8IGRlZmluZWQoQ09ORklHX1RBUkdFVF9QUk9GSUxFX1NVUFBPUlQpCisjaWYgZGVmaW5lZChDT05GSUdfVEFSR0VUX1BST0ZJTEVfU1VQUE9SVCkKIHN0YXRpYyBpbnQKIHdtaV9zaW1wbGVfY21kX3h0bmQoc3RydWN0IHdtaV90ICp3bWlwLCBXTUlYX0NPTU1BTkRfSUQgY21kaWQpCiB7CkBAIC0yMjk4LDQ2ICsyMjQ4LDYgQEAKICAgICByZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19IT1NUX0dQSU9fU1VQUE9SVAotc3RhdGljIGludAotd21pX2dwaW9faW50cl9yeChzdHJ1Y3Qgd21pX3QgKndtaXAsIHU4ICpkYXRhcCwgaW50IGxlbikKLXsKLSAgICBXTUlYX0dQSU9fSU5UUl9FVkVOVCAqZ3Bpb19pbnRyID0gKFdNSVhfR1BJT19JTlRSX0VWRU5UICopZGF0YXA7Ci0KLSAgICBBX0RQUklOVEYoREJHX1dNSSwKLSAgICAgICAgKERCR0ZNVCAiRW50ZXIgLSBpbnRybWFzaz0weCV4IGlucHV0PTB4JXguXG4iLCBEQkdBUkcsCi0gICAgICAgIGdwaW9faW50ci0+aW50cl9tYXNrLCBncGlvX2ludHItPmlucHV0X3ZhbHVlcykpOwotCi0gICAgQV9XTUlfR1BJT19JTlRSX1JYKGdwaW9faW50ci0+aW50cl9tYXNrLCBncGlvX2ludHItPmlucHV0X3ZhbHVlcyk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotd21pX2dwaW9fZGF0YV9yeChzdHJ1Y3Qgd21pX3QgKndtaXAsIHU4ICpkYXRhcCwgaW50IGxlbikKLXsKLSAgICBXTUlYX0dQSU9fREFUQV9FVkVOVCAqZ3Bpb19kYXRhID0gKFdNSVhfR1BJT19EQVRBX0VWRU5UICopZGF0YXA7Ci0KLSAgICBBX0RQUklOVEYoREJHX1dNSSwKLSAgICAgICAgKERCR0ZNVCAiRW50ZXIgLSByZWc9JWQgdmFsdWU9MHgleFxuIiwgREJHQVJHLAotICAgICAgICBncGlvX2RhdGEtPnJlZ19pZCwgZ3Bpb19kYXRhLT52YWx1ZSkpOwotCi0gICAgQV9XTUlfR1BJT19EQVRBX1JYKGdwaW9fZGF0YS0+cmVnX2lkLCBncGlvX2RhdGEtPnZhbHVlKTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci13bWlfZ3Bpb19hY2tfcngoc3RydWN0IHdtaV90ICp3bWlwLCB1OCAqZGF0YXAsIGludCBsZW4pCi17Ci0gICAgQV9EUFJJTlRGKERCR19XTUksIChEQkdGTVQgIkVudGVyXG4iLCBEQkdBUkcpKTsKLQotICAgIEFfV01JX0dQSU9fQUNLX1JYKCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLSNlbmRpZiAvKiBDT05GSUdfSE9TVF9HUElPX1NVUFBPUlQgKi8KLQogLyoKICAqIENhbGxlZCB0byBzZW5kIGEgd21pIGNvbW1hbmQuIENvbW1hbmQgc3BlY2lmaWMgZGF0YSBpcyBhbHJlYWR5IGJ1aWx0CiAgKiBvbiBvc2J1ZiBhbmQgY3VycmVudCBvc2J1Zi0+ZGF0YSBwb2ludHMgdG8gaXQuCkBAIC0zMDc1LDYgKzI5ODUsNyBAQAogICAgIGR0SGRyLT5pbmZvID0KICAgICAgIChTWU5DX01TR1RZUEUgJiBXTUlfREFUQV9IRFJfTVNHX1RZUEVfTUFTSykgPDwgV01JX0RBVEFfSERSX01TR19UWVBFX1NISUZUOwogCisgICAgZHRIZHItPmluZm8zID0gMDsKICAgICBBX0RQUklOVEYoREJHX1dNSSwgKERCR0ZNVCAiRW50ZXIgLSBlaWQgJWRcbiIsIERCR0FSRywgZWlkKSk7CiAKICAgICByZXR1cm4gKEFfV01JX0NPTlRST0xfVFgod21pcC0+d21pX2RldnQsIG9zYnVmLCBlaWQpKTsKQEAgLTQyODIsMTMyICs0MTkzLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBOT19TWU5DX1dNSUZMQUcpKTsKIH0KIAotI2lmZGVmIENPTkZJR19IT1NUX0dQSU9fU1VQUE9SVAotLyogU2VuZCBhIGNvbW1hbmQgdG8gVGFyZ2V0IHRvIGNoYW5nZSBHUElPIG91dHB1dCBwaW5zLiAqLwotaW50Ci13bWlfZ3Bpb19vdXRwdXRfc2V0KHN0cnVjdCB3bWlfdCAqd21pcCwKLSAgICAgICAgICAgICAgICAgICAgdTMyIHNldF9tYXNrLAotICAgICAgICAgICAgICAgICAgICB1MzIgY2xlYXJfbWFzaywKLSAgICAgICAgICAgICAgICAgICAgdTMyIGVuYWJsZV9tYXNrLAotICAgICAgICAgICAgICAgICAgICB1MzIgZGlzYWJsZV9tYXNrKQotewotICAgIHZvaWQgKm9zYnVmOwotICAgIFdNSVhfR1BJT19PVVRQVVRfU0VUX0NNRCAqb3V0cHV0X3NldDsKLSAgICBpbnQgc2l6ZTsKLQotICAgIHNpemUgPSBzaXplb2YoKm91dHB1dF9zZXQpOwotCi0gICAgQV9EUFJJTlRGKERCR19XTUksCi0gICAgICAgIChEQkdGTVQgIkVudGVyIC0gc2V0PTB4JXggY2xlYXI9MHgleCBlbmI9MHgleCBkaXM9MHgleFxuIiwgREJHQVJHLAotICAgICAgICBzZXRfbWFzaywgY2xlYXJfbWFzaywgZW5hYmxlX21hc2ssIGRpc2FibGVfbWFzaykpOwotCi0gICAgb3NidWYgPSBBX05FVEJVRl9BTExPQyhzaXplKTsKLSAgICBpZiAob3NidWYgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gQV9OT19NRU1PUlk7Ci0gICAgfQotICAgIEFfTkVUQlVGX1BVVChvc2J1Ziwgc2l6ZSk7Ci0gICAgb3V0cHV0X3NldCA9IChXTUlYX0dQSU9fT1VUUFVUX1NFVF9DTUQgKikoQV9ORVRCVUZfREFUQShvc2J1ZikpOwotCi0gICAgb3V0cHV0X3NldC0+c2V0X21hc2sgICAgICAgICAgICAgICAgICAgPSBzZXRfbWFzazsKLSAgICBvdXRwdXRfc2V0LT5jbGVhcl9tYXNrICAgICAgICAgICAgICAgICA9IGNsZWFyX21hc2s7Ci0gICAgb3V0cHV0X3NldC0+ZW5hYmxlX21hc2sgICAgICAgICAgICAgICAgPSBlbmFibGVfbWFzazsKLSAgICBvdXRwdXRfc2V0LT5kaXNhYmxlX21hc2sgICAgICAgICAgICAgICA9IGRpc2FibGVfbWFzazsKLQotICAgIHJldHVybiAod21pX2NtZF9zZW5kX3h0bmQod21pcCwgb3NidWYsIFdNSVhfR1BJT19PVVRQVVRfU0VUX0NNRElELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOT19TWU5DX1dNSUZMQUcpKTsKLX0KLQotLyogU2VuZCBhIGNvbW1hbmQgdG8gdGhlIFRhcmdldCByZXF1ZXN0aW5nIHN0YXRlIG9mIHRoZSBHUElPIGlucHV0IHBpbnMgKi8KLWludAotd21pX2dwaW9faW5wdXRfZ2V0KHN0cnVjdCB3bWlfdCAqd21pcCkKLXsKLSAgICBBX0RQUklOVEYoREJHX1dNSSwgKERCR0ZNVCAiRW50ZXJcbiIsIERCR0FSRykpOwotCi0gICAgcmV0dXJuIHdtaV9zaW1wbGVfY21kX3h0bmQod21pcCwgV01JWF9HUElPX0lOUFVUX0dFVF9DTURJRCk7Ci19Ci0KLS8qIFNlbmQgYSBjb21tYW5kIHRvIHRoZSBUYXJnZXQgdGhhdCBjaGFuZ2VzIHRoZSB2YWx1ZSBvZiBhIEdQSU8gcmVnaXN0ZXIuICovCi1pbnQKLXdtaV9ncGlvX3JlZ2lzdGVyX3NldChzdHJ1Y3Qgd21pX3QgKndtaXAsCi0gICAgICAgICAgICAgICAgICAgICAgdTMyIGdwaW9yZWdfaWQsCi0gICAgICAgICAgICAgICAgICAgICAgdTMyIHZhbHVlKQotewotICAgIHZvaWQgKm9zYnVmOwotICAgIFdNSVhfR1BJT19SRUdJU1RFUl9TRVRfQ01EICpyZWdpc3Rlcl9zZXQ7Ci0gICAgaW50IHNpemU7Ci0KLSAgICBzaXplID0gc2l6ZW9mKCpyZWdpc3Rlcl9zZXQpOwotCi0gICAgQV9EUFJJTlRGKERCR19XTUksCi0gICAgICAgIChEQkdGTVQgIkVudGVyIC0gcmVnPSVkIHZhbHVlPTB4JXhcbiIsIERCR0FSRywgZ3Bpb3JlZ19pZCwgdmFsdWUpKTsKLQotICAgIG9zYnVmID0gQV9ORVRCVUZfQUxMT0Moc2l6ZSk7Ci0gICAgaWYgKG9zYnVmID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIEFfTk9fTUVNT1JZOwotICAgIH0KLSAgICBBX05FVEJVRl9QVVQob3NidWYsIHNpemUpOwotICAgIHJlZ2lzdGVyX3NldCA9IChXTUlYX0dQSU9fUkVHSVNURVJfU0VUX0NNRCAqKShBX05FVEJVRl9EQVRBKG9zYnVmKSk7Ci0KLSAgICByZWdpc3Rlcl9zZXQtPmdwaW9yZWdfaWQgICAgICAgICAgICAgICA9IGdwaW9yZWdfaWQ7Ci0gICAgcmVnaXN0ZXJfc2V0LT52YWx1ZSAgICAgICAgICAgICAgICAgICAgPSB2YWx1ZTsKLQotICAgIHJldHVybiAod21pX2NtZF9zZW5kX3h0bmQod21pcCwgb3NidWYsIFdNSVhfR1BJT19SRUdJU1RFUl9TRVRfQ01ESUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PX1NZTkNfV01JRkxBRykpOwotfQotCi0vKiBTZW5kIGEgY29tbWFuZCB0byB0aGUgVGFyZ2V0IHRvIGZldGNoIHRoZSB2YWx1ZSBvZiBhIEdQSU8gcmVnaXN0ZXIuICovCi1pbnQKLXdtaV9ncGlvX3JlZ2lzdGVyX2dldChzdHJ1Y3Qgd21pX3QgKndtaXAsCi0gICAgICAgICAgICAgICAgICAgICAgdTMyIGdwaW9yZWdfaWQpCi17Ci0gICAgdm9pZCAqb3NidWY7Ci0gICAgV01JWF9HUElPX1JFR0lTVEVSX0dFVF9DTUQgKnJlZ2lzdGVyX2dldDsKLSAgICBpbnQgc2l6ZTsKLQotICAgIHNpemUgPSBzaXplb2YoKnJlZ2lzdGVyX2dldCk7Ci0KLSAgICBBX0RQUklOVEYoREJHX1dNSSwgKERCR0ZNVCAiRW50ZXIgLSByZWc9JWRcbiIsIERCR0FSRywgZ3Bpb3JlZ19pZCkpOwotCi0gICAgb3NidWYgPSBBX05FVEJVRl9BTExPQyhzaXplKTsKLSAgICBpZiAob3NidWYgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gQV9OT19NRU1PUlk7Ci0gICAgfQotICAgIEFfTkVUQlVGX1BVVChvc2J1Ziwgc2l6ZSk7Ci0gICAgcmVnaXN0ZXJfZ2V0ID0gKFdNSVhfR1BJT19SRUdJU1RFUl9HRVRfQ01EICopKEFfTkVUQlVGX0RBVEEob3NidWYpKTsKLQotICAgIHJlZ2lzdGVyX2dldC0+Z3Bpb3JlZ19pZCAgICAgICAgICAgICAgID0gZ3Bpb3JlZ19pZDsKLQotICAgIHJldHVybiAod21pX2NtZF9zZW5kX3h0bmQod21pcCwgb3NidWYsIFdNSVhfR1BJT19SRUdJU1RFUl9HRVRfQ01ESUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PX1NZTkNfV01JRkxBRykpOwotfQotCi0vKiBTZW5kIGEgY29tbWFuZCB0byB0aGUgVGFyZ2V0IGFja25vd2xlZGdpbmcgc29tZSBHUElPIGludGVycnVwdHMuICovCi1pbnQKLXdtaV9ncGlvX2ludHJfYWNrKHN0cnVjdCB3bWlfdCAqd21pcCwKLSAgICAgICAgICAgICAgICAgIHUzMiBhY2tfbWFzaykKLXsKLSAgICB2b2lkICpvc2J1ZjsKLSAgICBXTUlYX0dQSU9fSU5UUl9BQ0tfQ01EICppbnRyX2FjazsKLSAgICBpbnQgc2l6ZTsKLQotICAgIHNpemUgPSBzaXplb2YoKmludHJfYWNrKTsKLQotICAgIEFfRFBSSU5URihEQkdfV01JLCAoREJHRk1UICJFbnRlciBhY2tfbWFzaz0weCV4XG4iLCBEQkdBUkcsIGFja19tYXNrKSk7Ci0KLSAgICBvc2J1ZiA9IEFfTkVUQlVGX0FMTE9DKHNpemUpOwotICAgIGlmIChvc2J1ZiA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBBX05PX01FTU9SWTsKLSAgICB9Ci0gICAgQV9ORVRCVUZfUFVUKG9zYnVmLCBzaXplKTsKLSAgICBpbnRyX2FjayA9IChXTUlYX0dQSU9fSU5UUl9BQ0tfQ01EICopKEFfTkVUQlVGX0RBVEEob3NidWYpKTsKLQotICAgIGludHJfYWNrLT5hY2tfbWFzayAgICAgICAgICAgICAgID0gYWNrX21hc2s7Ci0KLSAgICByZXR1cm4gKHdtaV9jbWRfc2VuZF94dG5kKHdtaXAsIG9zYnVmLCBXTUlYX0dQSU9fSU5UUl9BQ0tfQ01ESUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PX1NZTkNfV01JRkxBRykpOwotfQotI2VuZGlmIC8qIENPTkZJR19IT1NUX0dQSU9fU1VQUE9SVCAqLwotCiBpbnQKIHdtaV9zZXRfYWNjZXNzX3BhcmFtc19jbWQoc3RydWN0IHdtaV90ICp3bWlwLCB1OCBhYywgIHUxNiB0eG9wLCB1OCBlQ1dtaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGVDV21heCwgdTggYWlmc24pCkBAIC00NjgzLDggKzQ0NjgsNiBAQAogCiAgICBBX0RQUklOVEYoREJHX1dNSSwgKERCR0ZNVCAiRW50ZXJcbiIsIERCR0FSRykpOwogCi0gICBBX1dNSV9UQ01EX1JYX1JFUE9SVF9FVkVOVCh3bWlwLT53bWlfZGV2dCwgZGF0YXAsIGxlbik7Ci0KICAgIHJldHVybiAwOwogfQogCkBAIC01NTAwLDE5ICs1MjgzLDYgQEAKIH0KIAogCi0KLXN0YXRpYyBpbnQKLXdtaV9hY21fcmVqZWN0X2V2ZW50X3J4KHN0cnVjdCB3bWlfdCAqd21pcCwgdTggKmRhdGFwLCB1MzIgbGVuKQotewotICAgIFdNSV9BQ01fUkVKRUNUX0VWRU5UICpldjsKLQotICAgIGV2ID0gKFdNSV9BQ01fUkVKRUNUX0VWRU5UICopZGF0YXA7Ci0gICAgd21pcC0+d21pX3RyYWZmaWNfY2xhc3MgPSBldi0+dHJhZmZpY0NsYXNzOwotICAgIHByaW50aygiQUNNIFJFSkVDVCAlZFxuIix3bWlwLT53bWlfdHJhZmZpY19jbGFzcyk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQogI2lmZGVmIENPTkZJR19IT1NUX0RTRVRfU1VQUE9SVAogaW50CiB3bWlfZHNldF9kYXRhX3JlcGx5KHN0cnVjdCB3bWlfdCAqd21pcCwKQEAgLTU4NzcsNyArNTY0Nyw3IEBACiAKICAgICBhcjYwMDBfc2Nhbl9pbmRpY2F0aW9uICh3bWlwLT53bWlfZGV2dCwgcEFyNmtTY2FuSW5kRXZlbnQsIHNpemUpOwogCi0gICAgQV9GUkVFKHBBcjZrU2NhbkluZEV2ZW50KTsKKyAgICBrZnJlZShwQXI2a1NjYW5JbmRFdmVudCk7CiB9CiAjZW5kaWYKIApAQCAtNTk5NSw3ICs1NzY1LDYgQEAKICAgICByZXR1cm4gMDsKIH0KIAotI2lmZGVmIEFUSF9BUjZLXzExTl9TVVBQT1JUCiBzdGF0aWMgaW50CiB3bWlfYWRkYmFfcmVxX2V2ZW50X3J4KHN0cnVjdCB3bWlfdCAqd21pcCwgdTggKmRhdGFwLCBpbnQgbGVuKQogewpAQCAtNjA0OCw3ICs1ODE3LDYgQEAKICAgICAgcmV0dXJuIDA7CiAKIH0KLSNlbmRpZgogCiBzdGF0aWMgaW50CiB3bWlfaGNpX2V2ZW50X3J4KHN0cnVjdCB3bWlfdCAqd21pcCwgdTggKmRhdGFwLCBpbnQgbGVuKQpAQCAtNjM3Miw3ICs2MTQwLDYgQEAKICAgICByZXR1cm4gKHdtaV9jbWRfc2VuZCh3bWlwLCBvc2J1ZiwgV01JX0FQX1NFVF8xMUJHX1JBVEVTRVRfQ01ESUQsIE5PX1NZTkNfV01JRkxBRykpOwogfQogCi0jaWZkZWYgQVRIX0FSNktfMTFOX1NVUFBPUlQKIGludAogd21pX3NldF9odF9jYXBfY21kKHN0cnVjdCB3bWlfdCAqd21pcCwgV01JX1NFVF9IVF9DQVBfQ01EICpjbWQpCiB7CkBAIC02NDE4LDcgKzYxODUsNiBAQAogICAgIHJldHVybiAod21pX2NtZF9zZW5kKHdtaXAsIG9zYnVmLCBXTUlfU0VUX0hUX09QX0NNRElELAogICAgICAgICAgICAgICAgICAgICAgICAgIE5PX1NZTkNfV01JRkxBRykpOwogfQotI2VuZGlmCiAKIGludAogd21pX3NldF90eF9zZWxlY3RfcmF0ZXNfY21kKHN0cnVjdCB3bWlfdCAqd21pcCwgdTMyICpwTWFza0FycmF5KQpAQCAtNjQ2MCw3ICs2MjI2LDYgQEAKICAgICByZXR1cm4gKHdtaV9jbWRfc2VuZCh3bWlwLCBvc2J1ZiwgV01JX0hDSV9DTURfQ01ESUQsIE5PX1NZTkNfV01JRkxBRykpOwogfQogCi0jaWZkZWYgQVRIX0FSNktfMTFOX1NVUFBPUlQKIGludAogd21pX2FsbG93X2FnZ3JfY21kKHN0cnVjdCB3bWlfdCAqd21pcCwgdTE2IHR4X3RpZG1hc2ssIHUxNiByeF90aWRtYXNrKQogewpAQCAtNjUyMCw3ICs2Mjg1LDYgQEAKICAgICAvKiBEZWxldGUgdGhlIGxvY2FsIGFnZ3Igc3RhdGUsIG9uIGhvc3QgKi8KICAgICByZXR1cm4gKHdtaV9jbWRfc2VuZCh3bWlwLCBvc2J1ZiwgV01JX0RFTEJBX1JFUV9DTURJRCwgTk9fU1lOQ19XTUlGTEFHKSk7CiB9Ci0jZW5kaWYKIAogaW50CiB3bWlfc2V0X3J4X2ZyYW1lX2Zvcm1hdF9jbWQoc3RydWN0IHdtaV90ICp3bWlwLCB1OCByeE1ldGFWZXJzaW9uLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9LY29uZmlnCmluZGV4IGI2Zjg2MzUuLmY0Y2Y5YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL0tjb25maWcKQEAgLTEsMjEgKzEsMjYgQEAKLW1lbnVjb25maWcgQlJDTTgwMjExCi0JdHJpc3RhdGUgIkJyb2FkY29tIElFRUU4MDIuMTFuIFdMQU4gZHJpdmVycyIKLQlkZXBlbmRzIG9uIFdMQU4KK2NvbmZpZyBCUkNNVVRJTAorCXRyaXN0YXRlCisJZGVmYXVsdCBuCiAKIGNvbmZpZyBCUkNNU01BQwotCWJvb2wgIkJyb2FkY29tIElFRUU4MDIuMTFuIFBDSWUgU29mdE1BQyBXTEFOIGRyaXZlciIKKwl0cmlzdGF0ZSAiQnJvYWRjb20gSUVFRTgwMi4xMW4gUENJZSBTb2Z0TUFDIFdMQU4gZHJpdmVyIgorCWRlZmF1bHQgbgogCWRlcGVuZHMgb24gUENJCi0JZGVwZW5kcyBvbiBCUkNNODAyMTEgJiYgTUFDODAyMTEKKwlkZXBlbmRzIG9uIFdMQU4gJiYgTUFDODAyMTEKKwlzZWxlY3QgQlJDTVVUSUwKIAlzZWxlY3QgRldfTE9BREVSCisJc2VsZWN0IENSQ19DQ0lUVAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgUENJZSB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBCcm9hZGNvbQogCSAgSUVFRTgwMi4xMW4gU29mdE1BQyBjaGlwc2V0cy4gIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsCiAJICBiZSBjYWxsZWQgYnJjbXNtYWMua28uCiAKIGNvbmZpZyBCUkNNRk1BQwotCWJvb2wgIkJyb2FkY29tIElFRUU4MDIuMTFuIGVtYmVkZGVkIEZ1bGxNQUMgV0xBTiBkcml2ZXIiCisJdHJpc3RhdGUgIkJyb2FkY29tIElFRUU4MDIuMTFuIGVtYmVkZGVkIEZ1bGxNQUMgV0xBTiBkcml2ZXIiCisJZGVmYXVsdCBuCiAJZGVwZW5kcyBvbiBNTUMKLQlkZXBlbmRzIG9uIEJSQ004MDIxMSAmJiBDRkc4MDIxMQorCWRlcGVuZHMgb24gV0xBTiAmJiBDRkc4MDIxMQorCXNlbGVjdCBCUkNNVVRJTAogCXNlbGVjdCBGV19MT0FERVIKIAlzZWxlY3QgV0lSRUxFU1NfRVhUCiAJc2VsZWN0IFdFWFRfUFJJVgpAQCAtMjgsNiArMzMsNiBAQAogY29uZmlnIEJSQ01EQkcKIAlib29sICJCcm9hZGNvbSBkcml2ZXIgZGVidWcgZnVuY3Rpb25zIgogCWRlZmF1bHQgbgotCWRlcGVuZHMgb24gQlJDTTgwMjExCisJZGVwZW5kcyBvbiBCUkNNU01BQyB8fCBCUkNNRk1BQwogCS0tLWhlbHAtLS0KIAkgIFNlbGVjdGluZyB0aGlzIGVuYWJsZXMgYWRkaXRpb25hbCBjb2RlIGZvciBkZWJ1ZyBwdXJwb3Nlcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL01ha2VmaWxlCmluZGV4IGMwNjRjZGYuLmU3YjNmMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9NYWtlZmlsZQpAQCAtMTksNSArMTksNiBAQAogc3ViZGlyLWNjZmxhZ3MteQkJCQkJOj0gLURCQ01ETUEzMgogc3ViZGlyLWNjZmxhZ3MtJChDT05GSUdfQlJDTURCRykJKz0gLURCQ01EQkcgLURCQ01EQkdfQVNTRVJUCiAKK29iai0kKENPTkZJR19CUkNNVVRJTCkJKz0gdXRpbC8KIG9iai0kKENPTkZJR19CUkNNRk1BQykJKz0gYnJjbWZtYWMvCiBvYmotJChDT05GSUdfQlJDTVNNQUMpCSs9IGJyY21zbWFjLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9SRUFETUUgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL1JFQURNRQppbmRleCBmOGZhY2IwLi44YWQ1NTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL1JFQURNRQorKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL1JFQURNRQpAQCAtMSw5MCArMSw2NCBAQAotQnJvYWRjb20gTWFjODAyMTEgZHJpdmVyCitCcm9hZGNvbSBicmNtc21hYyAobWFjODAyMTEtYmFzZWQgc29mdG1hYyBQQ0llKSBhbmQgYnJjbWZtYWMgKFNESU8pIGRyaXZlcnMuCiAKLVRoaXMgaXMgYSBkcml2ZXIgaW4gcHJvZ3Jlc3MuICBJdCBoYXMgZmVhdHVyZXMgc3RpbGwgdG8gYmUgaW1wbGVtZW50ZWQgd2VsbCBhcwotYnVncyBpbiBjdXJyZW50IGNvZGUuCitDb21wbGV0ZWx5IG9wZW4gc291cmNlIGhvc3QgZHJpdmVycywgbm8gYmluYXJ5IG9iamVjdCBmaWxlcy4KKworU3VwcG9ydCBmb3IgdGhlIGZvbGxvd2luZyBjaGlwczoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIGJyY21zbWFjIChQQ0llKQorICAgIE5hbWUgICAgICAgIERldmljZSBJRAorICAgIEJDTTQzMTMgICAgIDB4NDcyNworICAgIEJDTTQzMjI0ICAgIDB4NDM1MworICAgIEJDTTQzMjI1ICAgIDB4NDM1NworCisgICAgYnJjbWZtYWMgKFNESU8pCisgICAgTmFtZQorICAgIEJDTTQzMjkKKworQm90aCBicmNtc21hYyBhbmQgYnJjbWZtYWMgZHJpdmVycyByZXF1aXJlIGZpcm13YXJlIGZpbGVzIHRoYXQgbmVlZCB0byBiZQorc2VwYXJhdGVseSBkb3dubG9hZGVkLgorCitGaXJtd2FyZQorPT09PT09PT09PT09PT09PT09PT09PQorRmlybXdhcmUgaXMgYXZhaWxhYmxlIGZyb20gdGhlIExpbnV4IGZpcm13YXJlIHJlcG9zaXRvcnkgYXQ6CisKKyAgICBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZHdtdzIvbGludXgtZmlybXdhcmUuZ2l0CisgICAgaHR0cDovL2dpdC5rZXJuZWwub3JnLz9wPWxpbnV4L2tlcm5lbC9naXQvZHdtdzIvbGludXgtZmlybXdhcmUuZ2l0CisgICAgaHR0cHM6Ly9naXQua2VybmVsLm9yZy8/cD1saW51eC9rZXJuZWwvZ2l0L2R3bXcyL2xpbnV4LWZpcm13YXJlLmdpdAogCiAKLVdoYXQncyBoZXJlIGFuZCBub3QgaGVyZQotPT09PT09PT09PT09PT09PT09PT09PT0KLS0gQ29tcGxldGVseSBvcGVuIHNvdXJjZSBob3N0IGRyaXZlciwgbm8gYmluYXJ5IG9iamVjdCBmaWxlcwotLSBGZWF0dXJlcyBCcm9hZGNvbSdzIE9uZURyaXZlciBhcmNoaXRlY3R1cmUgKHNpbmdsZSBzb3VyY2UgYmFzZSBmb3IKLSAgc3VwcG9ydGVkIGNoaXBzIGFuZCBhcmNoaXRlY3R1cmVzKQotLSBPbi1jaGlwIGZpcm13YXJlIGxvYWRlZCB1c2luZyBzdGFuZGFyZCByZXF1ZXN0X2Zpcm13YXJlKCkKLS0gU3VwcG9ydCBmb3IgQkNNNDMyMjQsIEJDTTQzMjI1LCBCQ000MzEzIChQQ0llIE5JQykKLS0gRnJhbWV3b3JrIGZvciBzdXBwb3J0aW5nIG5ldyBjaGlwcywgaW5jbHVkaW5nIG1hYzgwMjExLWF3YXJlIGVtYmVkZGVkIGNoaXBzCi0tIERvZXMgbm90IHN1cHBvcnQgb2xkZXIgUENJL1BDSWUgY2hpcHMgd2l0aCBTU0IgYmFja3BsYW5lCi0tIERyaXZlciBpbmNsdWRlcyBCTUFDIGludGVyZmFjZSBmb3IgdHJhbnNwYXJlbnQgZG9uZ2xlIHN1cHBvcnQKLS0gVXNlcyBtaW5zdHJlbF9odCByYXRlIGFsZ29yaXRobQotLSBIVyBiYXNlZCBlbmNyeXB0aW9uIG5vdCBlbmFibGVkIHlldAotCi0KLVdoYXQncyBkb25lCi09PT09PT09PT09Ci0tIEludGVncmF0aW9uIHdpdGggbWFjODAyMTEgc3RhY2sKLS0gQS1NUERVIHNpbmdsZSAmIGR1YWwgc3RyZWFtIHJhdGVzCi0tIEJDTTQzMjI0OglEdWFsYmFuZCwgRHVhbCBzdHJlYW0sIDIwTUh6IGNoYW5uZWxzCi0JVGhyb3VnaHB1dCAoaW4gY2hhbWJlcik6IH44NS05MCBNYml0cy9zZWMgKGluIGJvdGggMi40ICYgNSBHSHogYmFuZHMpCi0tIEJDTTQzMjI1OgkyLjQgR0h6LCBEdWFsIFN0cmVhbSwgMjBNSHogY2hhbm5lbHMKLQlUaHJvdWdocHV0IChpbiBjaGFtYmVyKTogfjg1LTkwIE1iaXRzL3NlYwotLSBCQ000MzEzOgkJMi40IEdIeiwgU2luZ2xlIFN0cmVhbQotCVRocm91Z2hwdXQgKGluIGNoYW1iZXIpOiB+NDAgTWJpdHMvc2VjCi0KLQotVGhpbmdzIFRvIEJlIERvbmUKLT09PT09PT09PT09PT09PT09Ci1TZWUgdGhlIFRPRE8gZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitCcm9hZGNvbSBicmNtc21hYyBkcml2ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLSBTdXBwb3J0IGZvciBib3RoIDMyIGFuZCA2NCBiaXQgTGludXgga2VybmVscwogCiAKIEZpcm13YXJlIGluc3RhbGxhdGlvbgogPT09PT09PT09PT09PT09PT09PT09PQotRmlybXdhcmUgaXMgYXZhaWxhYmxlIGZyb20gdGhlIExpbnV4IGZpcm13YXJlIHJlcG9zaXRvcnkgYXQ6Ci0KLQlnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZHdtdzIvbGludXgtZmlybXdhcmUuZ2l0Ci0JaHR0cDovL2dpdC5rZXJuZWwub3JnLz9wPWxpbnV4L2tlcm5lbC9naXQvZHdtdzIvbGludXgtZmlybXdhcmUuZ2l0Ci0JaHR0cHM6Ly9naXQua2VybmVsLm9yZy8/cD1saW51eC9rZXJuZWwvZ2l0L2R3bXcyL2xpbnV4LWZpcm13YXJlLmdpdAotCi1Gb3IgYWxsIGNoaXBzLCBjb3B5IGJyY20vYmNtNDN4eC0wLmZ3IGFuZCBicmNtL2JjbTQzeHhfaGRyLTAuZncgdG8KLS9saWIvZmlybXdhcmUvYnJjbSAob3Igd2hlcmV2ZXIgZmlybXdhcmUgaXMgbm9ybWFsbHkgaW5zdGFsbGVkIG9uIHlvdXIgc3lzdGVtKS4KLQotQ3VycmVudGx5IHN1cHBvcnRlZCBjaGlwcwotPT09PT09PT09PT09PT0KLVBDSQotTmFtZQkJRGV2aWNlIElECi1CQ000MzEzCQkweDQ3MjcKLUJDTTQzMjI0CTB4NDM1MwotQkNNNDMyMjUJMHg0MzU3CitDb3B5IGJyY20vYmNtNDN4eC0wLmZ3IGFuZCBicmNtL2JjbTQzeHhfaGRyLTAuZncgdG8KKy9saWIvZmlybXdhcmUvYnJjbSAob3Igd2hlcmV2ZXIgZmlybXdhcmUgaXMgbm9ybWFsbHkgaW5zdGFsbGVkCitvbiB5b3VyIHN5c3RlbSkuCiAKIAotQnVncy9Qcm9ibGVtcwotPT09PT09PT09PT09PT0KLS0gRHJpdmVyIGNhbiBnZXQgY29uZnVzZWQgd2hpbGUgc2Nhbm5pbmcgZHVyaW5nIGhpZ2ggdGhyb3VnaHB1dCwgY2FuIGNhdXNlCi0gIGJ1cnBpbmcsIGhhbmdpbmcsIGFuZCBwb3NzaWJsZSBjcmFzaGluZy4KLS0gT2NjYXNpb25hbCBoYW5ncyAmIGJ1cnBzIHdpdGggQkNNNDMyMjQgb24gMi40IEdIeiB3aXRoIGR1YWwgc3RyZWFtIHJhdGVzLgotLSBPY2Nhc2lvbmFsIGNyYXNoZXMgd2l0aCBCQ000MzIyNCBvbiBtdWx0aWNvcmUgbWFjaGluZXMuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0Jyb2FkY29tIGJyY21mbWFjIGRyaXZlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistIFN1cHBvcnQgZm9yIDMyIGJpdCBMaW51eCBrZXJuZWwsIDY0IGJpdCB1bnRlc3RlZAogCiAKLU5vdGUgb24gUmVndWxhdG9yeSBJbXBsZW1lbnRhdGlvbgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLVRoaXMgZ2VuZXJhdGlvbiBvZiBjaGlwcyBjb250YWluIGFkZGl0aW9uYWwgcmVndWxhdG9yeSBzdXBwb3J0IGluZGVwZW5kZW50IG9mCi10aGUgZHJpdmVyLiBUaGUgZGV2aWNlcyB1c2UgYSBzaW5nbGUgd29ybGR3aWRlIHJlZ3VsYXRvcnkgZG9tYWluLCB3aXRoIGNoYW5uZWxzCi0xMi0xNCAoMi40IEdIeiBiYW5kKSBhbmQgY2hhbm5lbHMgNTItNjQgYW5kIDEwMC0xNDAgKDUgR0h6IGJhbmQpIHJlc3RyaWN0ZWQgdG8KLXBhc3NpdmUgb3BlcmF0aW9uLiBUcmFuc21pc3Npb24gb24gdGhvc2UgY2hhbm5lbHMgaXMgc3VwcHJlc3NlZCB1bnRpbAotYXBwcm9wcmlhdGUgb3RoZXIgdHJhZmZpYyBpcyBvYnNlcnZlZCBvbiB0aG9zZSBjaGFubmVscy4KLQotV2l0aGluIHRoZSBkcml2ZXIsIHdlIHVzZSB0aGUgZmljdGl0aW91cyBjb3VudHJ5IGNvZGUgIlgyIiB0byByZXByZXNlbnQgdGhpcwotd29ybGR3aWRlIHJlZ3VsYXRvcnkgZG9tYWluLiBUaGVyZSBpcyBjdXJyZW50bHkgbm8gaW50ZXJmYWNlIHRvIGNvbmZpZ3VyZSBhCi1kaWZmZXJlbnQgZG9tYWluLgotCi1UaGUgZHJpdmVyIHJlYWRzIHRoZSBTUk9NIGNvdW50cnkgY29kZSBmcm9tIHRoZSBjaGlwIGFuZCBoYW5kcyBpdCB1cCB0bwotbWFjODAyMTEgYXMgdGhlIHJlZ3VsYXRvcnkgaGludCwgaG93ZXZlciB0aGlzIGluZm9ybWF0aW9uIGlzIG90aGVyd2lzZSB1bnVzZWQKLXdpdGggdGhlIGRyaXZlci4KK0Zpcm13YXJlIGluc3RhbGxhdGlvbgorPT09PT09PT09PT09PT09PT09PT09PQorQ29weSBicmNtL2JjbTQzMjktZnVsbG1hYy00LmJpbiBhbmQgYnJjbS9iY200MzI5LWZ1bGxtYWMtNC50eHQKK3RvIC9saWIvZmlybXdhcmUvYnJjbSAob3Igd2hlcmV2ZXIgZmlybXdhcmUgaXMgbm9ybWFsbHkgaW5zdGFsbGVkIG9uIHlvdXIKK3N5c3RlbSkuCiAKIAogQ29udGFjdCBJbmZvOgogPT09PT09PT09PT09PQogQnJldHQgUnVkbGV5CQlicnVkbGV5QGJyb2FkY29tLmNvbQogSGVucnkgUHRhc2luc2tpCQloZW5yeXBAYnJvYWRjb20uY29tCi1Eb3dhbiBLaW0JCQlkb3dhbkBicm9hZGNvbS5jb20KK0Rvd2FuIEtpbQkJZG93YW5AYnJvYWRjb20uY29tCiBSb2xhbmQgVm9zc2VuCQlydm9zc2VuQGJyb2FkY29tLmNvbQogQXJlbmQgdmFuIFNwcmllbAlhcmVuZEBicm9hZGNvbS5jb20KIAorRm9yIG1vcmUgaW5mbywgcmVmZXIgdG86IGh0dHA6Ly9saW51eHdpcmVsZXNzLm9yZy9lbi91c2Vycy9Ecml2ZXJzL2JyY204MDIxMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9UT0RPCmluZGV4IDI0ZWJhZGIuLmU5YzEzOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvVE9ETworKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL1RPRE8KQEAgLTEsNTEgKzEsMTUgQEAKLVRvIERvIExpc3QgZm9yIEJyb2FkY29tIE1hYzgwMjExIGRyaXZlcgotCi1GZWF0dXJlcyB0byBiZSBhZGRlZAotPT09PT09PT09PT09PT09PT09PT09Ci0tIDQwIE1IeiBjaGFubmVscwotLSBQb3dlciBTYXZlCi0tIEFQCi0tIElCU1MKLS0gSFctYmFzZWQgZW5jcnlwdGlvbgotLSBMRUQgc3VwcG9ydAotLSBSRktJTEwKLS0gRGVidWdmcyBhbmQgZGVidWdhYmlsaXR5Ci0KLUNvZGUgY2xlYW51cAotPT09PT09PT09PT09Ci0tIFVzZSBwcm9wZXIga2VybmVsIGNvZGluZyBzdGFuZGFyZHMKLS0gUmVtb3ZlIG92ZXJsYXAgd2l0aCBzeXN0ZW0gaGVhZGVyIGZpbGVzLiAoaWUgbXVjaCBvZiBpbmNsdWRlL3Byb3RvLyouaCBzaG91bGQKLSAgYmUgcmVtb3ZlZCkKLS0gUHVyZ2UgdW51c2VkIHZhcmlhYmxlcy9kYXRhIHN0cnVjdHMvZnVuY3Rpb25zIEJVVCBrZWVwIGNvZGUgcmVsYXRlZCB0bwotICBmZWF0dXJlcyB0aGF0IGFyZSBiZWluZyBhZGRlZCAoaWUgQVAgbW9kZSwgNDAgTWh6IGNoYW5uZWxzLCBJQlNTIGV0YykuCi0tIFJlcGxhY2UgcHJvcHJpZXRhcnkgdXRpbGl0eSBmdW5jdGlvbnMgd2l0aCBwdWJsaWMga2VybmVsIHZlcnNpb25zLgorVG8gRG8gTGlzdCBmb3IgQnJvYWRjb20gTWFjODAyMTEgZHJpdmVyIGJlZm9yZSBnZXR0aW5nIGluIG1haW5saW5lCiAKIEJ1Z3MKID09PT0KLS0gVmFyaW91cyBvY2Nhc2lvbmFsIGFzc2VydHMvaGFuZ3MKLS0gU2Nhbm5pbmcgZHVyaW5nIGRhdGEgdHJhbnNmZXIgc29tZXRpbWVzIGNhdXNlcyBtYWpvciBzbG93ZG93bnMuICBTb21ldGltZXMKLSAgcmV2Y292ZXJzIHdoZW4gc2NhbiBpcyBkb25lLCBvdGhlciB0aW1lcyBub3QuCi0tIE1hYzgwMjExIEFQSSBub3QgY29tcGxldGVseSBpbXBsZW1lbnRlZCAoaWUgb3BzX2Jzc19pbmZvX2NoYW5nZWQsCi0gIG9wc19nZXRfc3RhdHMsIGV0YykKKy0gT29wcyBvbiBBTVBEVSB0cmFmZmljLCB0byBiZSBzb2x2ZWQgYnkgbmV3IHVjb2RlIChjdXJyZW50bHkgdW5kZXIgdGVzdCkKIAotT3RoZXIKLT09PT09Ci0tIHdsY19tYWM4MDIxMS5bY2hdLCB3bF9tYWM4MDIxMS5bY2hdIGFuZCBsaW51eF9vc2wuYyBhbGwgbmVlZCB0byBiZSByZWZhY3RvcmVkCi0gICAgYW5kIGNvbWJpbmVkLgotLSBNZXJnZSBmaWxlcyB0aGF0IGFyZSBwYXJ0aWFsbHkgZHVwbGljYXRlZCBiZXR3ZWVuIHRoZSBzb2Z0bWFjIGFuZCBmdWxsbWFjCi0gIGRyaXZlcnMKK2JyY21mbWFjIGFuZCBicmNtc21hYworPT09PT09PT09PT09PT09PT09PT09CistIEFTU0VSVFMgbm90IGFsbG93ZWQgaW4gbWFpbmxpbmUsIHJlcGxhY2UgYnkgd2FybmluZyArIGVycm9yIGhhbmRsaW5nCistIFJlcGxhY2UgcHJpbnRrIGFuZCBXTF9FUlJPUigpIHdpdGggcHJvcGVyIHJvdXRpbmVzCisKK2JyY21mbWFjCis9PT09PT09PT09PT09PT09PT09PT0KIC0gUmVwbGFjZSBkcml2ZXIncyBwcm9wcmlldGFyeSBzc2IgaW50ZXJmYWNlIHdpdGggZ2VuZXJpYyBrZXJuZWwgc3NiIG1vZHVsZQotICAob25seSB1c2VkIHdoZW4gY29tcGlsaW5nIGZvciBTRElPKS4KLS0gUENJIGFuZCBTRElPIHN1cHBvcnQgYXJlIGN1cnJlbnRseSAjaWZkZWYnZWQgZXhjbHVzaXZlIG9mIGVhY2ggb3RoZXIsIHdoaWNoCi0gIGxlYWRzIHRvIGEgc2VwYXJhdGUgd2wua28gZm9yIGVhY2guICBUaGlzIHNob3VsZCBiZSBjaGFuZ2VkIHRvIHJ1bnRpbWUKLSAgaGFuZGxpbmcgb2YgZGlmZmVyZW50IGludGVyZmFjZXMgc28gdGhhdCBhIHNpbmdsZSBiaW5hcnkgZHJpdmVyIGNhbiBiZSBidWlsdC4KLS0gQWRkIHN1cHBvcnQgZm9yIG5ldyBjaGlwcyAob2J2aW91c2x5IGFuIG9uZ29pbmcgaXRlbSkuCi0KLUNvbnRhY3QKLT09PT09Ci1CcmV0dCBSdWRsZXkgPGJydWRsZXlAYnJvYWRjb20uY29tPgotSGVucnkgUHRhc2luc2tpIDxoZW5yeXBAYnJvYWRjb20uY29tPgotRG93YW4gS2ltIDxkb3dhbkBicm9hZGNvbS5jb20+Ci1Sb2xhbmQgVm9zc2VuIDxydm9zc2VuQGJyb2FkY29tLmNvbT4KLUFyZW5kIHZhbiBTcHJpZWwgPGFyZW5kQGJyb2FkY29tLmNvbT4KLQorLSBCdWlsZCBhbmQgdGVzdCBvbiA2NCBiaXQgbGludXgga2VybmVsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZQppbmRleCBhYzVhN2Q0Li5jNWVjNTYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGUKQEAgLTM2LDggKzM2LDcgQEAKIAogY2NmbGFncy15ICs9IFwKIAktSWRyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMJXAotCS1JZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9pbmNsdWRlCQlcCi0JLUlkcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwKKwktSWRyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvaW5jbHVkZQogCiBESERPRklMRVMgPSBcCiAJd2xfY2ZnODAyMTEubyBcCkBAIC01MSwxMyArNTAsNyBAQAogCWJjbXNkaC5vIFwKIAliY21zZGhfbGludXgubwlcCiAJYmNtc2RoX3NkbW1jLm8gXAotCWJjbXNkaF9zZG1tY19saW51eC5vIFwKLQlhaXV0aWxzLm8gXAotCXNpdXRpbHMubyBcCi0Jc2J1dGlscy5vIFwKLQliY211dGlscy5vIFwKLQliY213aWZpLm8gXAotCWhuZHBtdS5vCisJYmNtc2RoX3NkbW1jX2xpbnV4Lm8KIAotb2JqLW0gKz0gYnJjbWZtYWMubworb2JqLSQoQ09ORklHX0JSQ01GTUFDKSArPSBicmNtZm1hYy5vCiBicmNtZm1hYy1vYmpzICs9ICQoREhET0ZJTEVTKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy9SRUFETUUgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL1JFQURNRQppbmRleCBiZTI5ZTQyLi4xMzk1OTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL1JFQURNRQorKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL1JFQURNRQpAQCAtMSwzNyArMSwyIEBACi1Ccm9hZGNvbSBmdWxsbWFjIGRyaXZlcgogCi1UaGlzIGlzIHByb2R1Y3Rpb24gZHJpdmVyLgotCi1XaGF0J3MgaGVyZQotPT09PT09PT09PT0KLS0gQ29tcGxldGVseSBvcGVuIHNvdXJjZSBob3N0IGRyaXZlciwgbm8gYmluYXJ5IG9iamVjdCBmaWxlcwotLSBGZWF0dXJlcyBCcm9hZGNvbSdzIE9uZURyaXZlciBhcmNoaXRlY3R1cmUgKHNpbmdsZSBzb3VyY2UgYmFzZSBmb3IKLSAgc3VwcG9ydGVkIGNoaXBzIGFuZCBhcmNoaXRlY3R1cmVzKQotLSBPbi1jaGlwIGZpcm13YXJlIGxvYWRlZCB1c2luZyBzdGFuZGFyZCByZXF1ZXN0X2Zpcm13YXJlKCkKLS0gU3VwcG9ydCBmb3IgQkNNNDMyOShTRElPKQotCi1XaGF0J3MgZG9uZQotPT09PT09PT09PQotLSBJbnRlZ3JhdGlvbiB3aXRoIGNmZzgwMjExIHN0YWNrCi0tIE1vc3Qgb2YgTWFjIGZ1bmN0aW9uYWxpdHkgaXMgcGVyZm9ybWVkIGluIGRvbmdsZQotLSBBLU1QRFUgc2luZ2xlIHN0cmVhbSByYXRlcwotLSBCQ000MzI5OglEdWFsYmFuZCwgU2luZ2xlIHN0cmVhbSwgMjBNSHogY2hhbm5lbHMKLQotRmlybXdhcmUgaW5zdGFsbGF0aW9uCi09PT09PT09PT09PT09PT09PT09PT09Ci1GaXJtd2FyZSBpcyBhdmFpbGFibGUgZnJvbSB0aGUgTGludXggZmlybXdhcmUgcmVwb3NpdG9yeSBhdDoKLQotCWdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9kd213Mi9saW51eC1maXJtd2FyZS5naXQKLQlodHRwOi8vZ2l0Lmtlcm5lbC5vcmcvP3A9bGludXgva2VybmVsL2dpdC9kd213Mi9saW51eC1maXJtd2FyZS5naXQKLQlodHRwczovL2dpdC5rZXJuZWwub3JnLz9wPWxpbnV4L2tlcm5lbC9naXQvZHdtdzIvbGludXgtZmlybXdhcmUuZ2l0Ci0KLUZvciA0MzI5IGNoaXAsIGNvcHkgYnJjbS9iY200MzI5LWZ1bGxtYWMtNC5iaW4gYW5kIGJyY20vYmNtNDMyOS1mdWxsbWFjLTQudHh0Ci10byAvbGliL2Zpcm13YXJlL2JyY20gKG9yIHdoZXJldmVyIGZpcm13YXJlIGlzIG5vcm1hbGx5IGluc3RhbGxlZCBvbiB5b3VyCi1zeXN0ZW0pLgotCi1Db250YWN0IEluZm86Ci09PT09PT09PT09PT09Ci1CcmV0dCBSdWRsZXkJYnJ1ZGxleUBicm9hZGNvbS5jb20KLUhlbnJ5IFB0YXNpbnNraSBoZW5yeXBAYnJvYWRjb20uY29tCi1Ob2hlZSBLbwlub2hlZWtAYnJvYWRjb20uY29tCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvYmNtY2hpcC5oIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy9iY21jaGlwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBkNGMzYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvYmNtY2hpcC5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkKKyAqIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIF9iY21jaGlwX2hfCisjZGVmaW5lIF9iY21jaGlwX2hfCisKKy8qIENvcmUgcmVnIGFkZHJlc3MgdHJhbnNsYXRpb24gKi8KKyNkZWZpbmUgQ09SRV9DQ19SRUcoYmFzZSwgZmllbGQpCShiYXNlICsgb2Zmc2V0b2YoY2hpcGNyZWdzX3QsIGZpZWxkKSkKKyNkZWZpbmUgQ09SRV9CVVNfUkVHKGJhc2UsIGZpZWxkKQkoYmFzZSArIG9mZnNldG9mKHNkcGNtZF9yZWdzX3QsIGZpZWxkKSkKKyNkZWZpbmUgQ09SRV9TQihiYXNlLCBmaWVsZCkgXAorCQkoYmFzZSArIFNCQ09ORklHT0ZGICsgb2Zmc2V0b2Yoc2Jjb25maWdfdCwgZmllbGQpKQorCisvKiBiY200MzI5ICovCisvKiBTRElPIGRldmljZSBjb3JlLCBJRCAweDgyOSAqLworI2RlZmluZSBCQ000MzI5X0NPUkVfQlVTX0JBU0UJCTB4MTgwMTEwMDAKKy8qIGludGVybmFsIG1lbW9yeSBjb3JlLCBJRCAweDgwZSAqLworI2RlZmluZSBCQ000MzI5X0NPUkVfU09DUkFNX0JBU0UJMHgxODAwMzAwMAorLyogQVJNIENvcnRleCBNMyBjb3JlLCBJRCAweDgyYSAqLworI2RlZmluZSBCQ000MzI5X0NPUkVfQVJNX0JBU0UJCTB4MTgwMDIwMDAKKyNkZWZpbmUgQkNNNDMyOV9SQU1TSVpFCQkJMHg0ODAwMAorCisjZW5kaWYJCQkJLyogX2JjbWNoaXBfaF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jCmluZGV4IDQ3M2Y1N2QuLjM3NTBmY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYwpAQCAtMTcsMTEgKzE3LDExIEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaV9pZHMuaD4KICNpbmNsdWRlIDxiY21kZWZzLmg+CiAjaW5jbHVkZSA8YmNtZGV2cy5oPgogI2luY2x1ZGUgPGJjbXV0aWxzLmg+CiAjaW5jbHVkZSA8aG5kc29jLmg+Ci0jaW5jbHVkZSA8c2l1dGlscy5oPgogCiAjaW5jbHVkZSA8YmNtc2RoLmg+CQkvKiBCUkNNIEFQSSBmb3IgU0RJTwogCQkJIGNsaWVudHMgKHN1Y2ggYXMgd2wsIGRoZCkgKi8KQEAgLTI5LDYgKzI5LDggQEAKICNpbmNsdWRlIDxzYnNkaW8uaD4JCS8qIEJSQ00gc2RpbyBkZXZpY2UgY29yZSAqLwogCiAjaW5jbHVkZSA8c2Rpby5oPgkJLyogc2RpbyBzcGVjICovCisjaW5jbHVkZSAiZG5nbF9zdGF0cy5oIgorI2luY2x1ZGUgImRoZC5oIgogCiAjZGVmaW5lIFNESU9IX0FQSV9BQ0NFU1NfUkVUUllfTElNSVQJMgogY29uc3QgdWludCBiY21zZGhfbXNnbGV2ZWwgPSBCQ01TREhfRVJST1JfVkFMOwpAQCAtMTI2LDcgKzEyOCw3IEBACiAJQVNTRVJUKGJjbXNkaCk7CiAKIAlzdGF0dXMgPSBzZGlvaF9pbnRlcnJ1cHRfc2V0KGJjbXNkaC0+c2Rpb2gsIHRydWUpOwotCXJldHVybiBTRElPSF9BUElfU1VDQ0VTUyhzdGF0dXMpID8gMCA6IEJDTUVfRVJST1I7CisJcmV0dXJuIFNESU9IX0FQSV9TVUNDRVNTKHN0YXR1cykgPyAwIDogLUVJTzsKIH0KIAogaW50IGJjbXNkaF9pbnRyX2Rpc2FibGUodm9pZCAqc2RoKQpAQCAtMTM2LDcgKzEzOCw3IEBACiAJQVNTRVJUKGJjbXNkaCk7CiAKIAlzdGF0dXMgPSBzZGlvaF9pbnRlcnJ1cHRfc2V0KGJjbXNkaC0+c2Rpb2gsIGZhbHNlKTsKLQlyZXR1cm4gU0RJT0hfQVBJX1NVQ0NFU1Moc3RhdHVzKSA/IDAgOiBCQ01FX0VSUk9SOworCXJldHVybiBTRElPSF9BUElfU1VDQ0VTUyhzdGF0dXMpID8gMCA6IC1FSU87CiB9CiAKIGludCBiY21zZGhfaW50cl9yZWcodm9pZCAqc2RoLCBiY21zZGhfY2JfZm5fdCBmbiwgdm9pZCAqYXJnaCkKQEAgLTE0Niw3ICsxNDgsNyBAQAogCUFTU0VSVChiY21zZGgpOwogCiAJc3RhdHVzID0gc2Rpb2hfaW50ZXJydXB0X3JlZ2lzdGVyKGJjbXNkaC0+c2Rpb2gsIGZuLCBhcmdoKTsKLQlyZXR1cm4gU0RJT0hfQVBJX1NVQ0NFU1Moc3RhdHVzKSA/IDAgOiBCQ01FX0VSUk9SOworCXJldHVybiBTRElPSF9BUElfU1VDQ0VTUyhzdGF0dXMpID8gMCA6IC1FSU87CiB9CiAKIGludCBiY21zZGhfaW50cl9kZXJlZyh2b2lkICpzZGgpCkBAIC0xNTYsNyArMTU4LDcgQEAKIAlBU1NFUlQoYmNtc2RoKTsKIAogCXN0YXR1cyA9IHNkaW9oX2ludGVycnVwdF9kZXJlZ2lzdGVyKGJjbXNkaC0+c2Rpb2gpOwotCXJldHVybiBTRElPSF9BUElfU1VDQ0VTUyhzdGF0dXMpID8gMCA6IEJDTUVfRVJST1I7CisJcmV0dXJuIFNESU9IX0FQSV9TVUNDRVNTKHN0YXR1cykgPyAwIDogLUVJTzsKIH0KIAogI2lmIGRlZmluZWQoREhEX0RFQlVHKQpAQCAtMTc0LDcgKzE3Niw3IEBACiAJQVNTRVJUKHNkaCk7CiAKIAkvKiBkb24ndCBzdXBwb3J0IHlldCAqLwotCXJldHVybiBCQ01FX1VOU1VQUE9SVEVEOworCXJldHVybiAtRU5PVFNVUFA7CiB9CiAKIHU4IGJjbXNkaF9jZmdfcmVhZCh2b2lkICpzZGgsIHVpbnQgZm5jX251bSwgdTMyIGFkZHIsIGludCAqZXJyKQpAQCAtMjA0LDcgKzIwNiw3IEBACiAJCSAmJiAocmV0cnkrKyA8IFNESU9IX0FQSV9BQ0NFU1NfUkVUUllfTElNSVQpKTsKICNlbmRpZgogCWlmIChlcnIpCi0JCSplcnIgPSAoU0RJT0hfQVBJX1NVQ0NFU1Moc3RhdHVzKSA/IDAgOiBCQ01FX1NESU9fRVJST1IpOworCQkqZXJyID0gKFNESU9IX0FQSV9TVUNDRVNTKHN0YXR1cykgPyAwIDogLUVJTyk7CiAKIAlCQ01TREhfSU5GTygoIiVzOmZ1biA9ICVkLCBhZGRyID0gMHgleCwgdThkYXRhID0gMHgleFxuIiwKIAkJICAgICBfX2Z1bmNfXywgZm5jX251bSwgYWRkciwgZGF0YSkpOwpAQCAtMjM5LDcgKzI0MSw3IEBACiAJCSAmJiAocmV0cnkrKyA8IFNESU9IX0FQSV9BQ0NFU1NfUkVUUllfTElNSVQpKTsKICNlbmRpZgogCWlmIChlcnIpCi0JCSplcnIgPSBTRElPSF9BUElfU1VDQ0VTUyhzdGF0dXMpID8gMCA6IEJDTUVfU0RJT19FUlJPUjsKKwkJKmVyciA9IFNESU9IX0FQSV9TVUNDRVNTKHN0YXR1cykgPyAwIDogLUVJTzsKIAogCUJDTVNESF9JTkZPKCgiJXM6ZnVuID0gJWQsIGFkZHIgPSAweCV4LCB1OGRhdGEgPSAweCV4XG4iLAogCQkgICAgIF9fZnVuY19fLCBmbmNfbnVtLCBhZGRyLCBkYXRhKSk7CkBAIC0yNjEsNyArMjYzLDcgQEAKIAkJCSAgICAgICBmbmNfbnVtLCBhZGRyLCAmZGF0YSwgNCk7CiAKIAlpZiAoZXJyKQotCQkqZXJyID0gKFNESU9IX0FQSV9TVUNDRVNTKHN0YXR1cykgPyAwIDogQkNNRV9TRElPX0VSUk9SKTsKKwkJKmVyciA9IChTRElPSF9BUElfU1VDQ0VTUyhzdGF0dXMpID8gMCA6IC1FSU8pOwogCiAJQkNNU0RIX0lORk8oKCIlczpmdW4gPSAlZCwgYWRkciA9IDB4JXgsIHUzMmRhdGEgPSAweCV4XG4iLAogCQkgICAgIF9fZnVuY19fLCBmbmNfbnVtLCBhZGRyLCBkYXRhKSk7CkBAIC0yODYsNyArMjg4LDcgQEAKIAkJCSAgICAgICBTRElPSF9XUklURSwgZm5jX251bSwgYWRkciwgJmRhdGEsIDQpOwogCiAJaWYgKGVycikKLQkJKmVyciA9IChTRElPSF9BUElfU1VDQ0VTUyhzdGF0dXMpID8gMCA6IEJDTUVfU0RJT19FUlJPUik7CisJCSplcnIgPSAoU0RJT0hfQVBJX1NVQ0NFU1Moc3RhdHVzKSA/IDAgOiAtRUlPKTsKIAogCUJDTVNESF9JTkZPKCgiJXM6ZnVuID0gJWQsIGFkZHIgPSAweCV4LCB1MzJkYXRhID0gMHgleFxuIiwKIAkJICAgICBfX2Z1bmNfXywgZm5jX251bSwgYWRkciwgZGF0YSkpOwpAQCAtMzE3LDcgKzMxOSw3IEBACiAJCXRtcF9idWYgPSBrbWFsbG9jKGxlbmd0aCwgR0ZQX0FUT01JQyk7CiAJCWlmICh0bXBfYnVmID09IE5VTEwpIHsKIAkJCUJDTVNESF9FUlJPUigoIiVzOiBvdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXykpOwotCQkJcmV0dXJuIEJDTUVfTk9NRU07CisJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQltZW1jcHkodG1wX2J1ZiwgY2lzLCBsZW5ndGgpOwogCQlmb3IgKHRtcF9wdHIgPSB0bXBfYnVmLCBwdHIgPSBjaXM7IHB0ciA8IChjaXMgKyBsZW5ndGggLSA0KTsKQEAgLTMyOSw3ICszMzEsNyBAQAogCQlrZnJlZSh0bXBfYnVmKTsKIAl9CiAKLQlyZXR1cm4gU0RJT0hfQVBJX1NVQ0NFU1Moc3RhdHVzKSA/IDAgOiBCQ01FX0VSUk9SOworCXJldHVybiBTRElPSF9BUElfU1VDQ0VTUyhzdGF0dXMpID8gMCA6IC1FSU87CiB9CiAKIHN0YXRpYyBpbnQgYmNtc2Roc2Rpb19zZXRfc2JhZGRyX3dpbmRvdyh2b2lkICpzZGgsIHUzMiBhZGRyZXNzKQpAQCAtNDY3LDcgKzQ2OSw3IEBACiAJLyogQXN5bmMgbm90IGltcGxlbWVudGVkIHlldCAqLwogCUFTU0VSVCghKGZsYWdzICYgU0RJT19SRVFfQVNZTkMpKTsKIAlpZiAoZmxhZ3MgJiBTRElPX1JFUV9BU1lOQykKLQkJcmV0dXJuIEJDTUVfVU5TVVBQT1JURUQ7CisJCXJldHVybiAtRU5PVFNVUFA7CiAKIAlpZiAoYmFyMCAhPSBiY21zZGgtPnNid2FkKSB7CiAJCWVyciA9IGJjbXNkaHNkaW9fc2V0X3NiYWRkcl93aW5kb3coYmNtc2RoLCBiYXIwKTsKQEAgLTQ4OCw3ICs0OTAsNyBAQAogCQkJCSAgICAgIFNESU9IX1JFQUQsIGZuLCBhZGRyLCB3aWR0aCwgbmJ5dGVzLCBidWYsCiAJCQkJICAgICAgcGt0KTsKIAotCXJldHVybiBTRElPSF9BUElfU1VDQ0VTUyhzdGF0dXMpID8gMCA6IEJDTUVfU0RJT19FUlJPUjsKKwlyZXR1cm4gU0RJT0hfQVBJX1NVQ0NFU1Moc3RhdHVzKSA/IDAgOiAtRUlPOwogfQogCiBpbnQKQEAgLTUxMiw3ICs1MTQsNyBAQAogCS8qIEFzeW5jIG5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8KIAlBU1NFUlQoIShmbGFncyAmIFNESU9fUkVRX0FTWU5DKSk7CiAJaWYgKGZsYWdzICYgU0RJT19SRVFfQVNZTkMpCi0JCXJldHVybiBCQ01FX1VOU1VQUE9SVEVEOworCQlyZXR1cm4gLUVOT1RTVVBQOwogCiAJaWYgKGJhcjAgIT0gYmNtc2RoLT5zYndhZCkgewogCQllcnIgPSBiY21zZGhzZGlvX3NldF9zYmFkZHJfd2luZG93KGJjbXNkaCwgYmFyMCk7CkBAIC01MzMsNyArNTM1LDcgQEAKIAkJCQkgICAgICBTRElPSF9XUklURSwgZm4sIGFkZHIsIHdpZHRoLCBuYnl0ZXMsIGJ1ZiwKIAkJCQkgICAgICBwa3QpOwogCi0JcmV0dXJuIFNESU9IX0FQSV9TVUNDRVNTKHN0YXR1cykgPyAwIDogQkNNRV9FUlJPUjsKKwlyZXR1cm4gU0RJT0hfQVBJX1NVQ0NFU1Moc3RhdHVzKSA/IDAgOiAtRUlPOwogfQogCiBpbnQgYmNtc2RoX3J3ZGF0YSh2b2lkICpzZGgsIHVpbnQgcncsIHUzMiBhZGRyLCB1OCAqYnVmLCB1aW50IG5ieXRlcykKQEAgLTU1Myw3ICs1NTUsNyBAQAogCQkJCSAocncgPyBTRElPSF9XUklURSA6IFNESU9IX1JFQUQpLCBTRElPX0ZVTkNfMSwKIAkJCQkgYWRkciwgNCwgbmJ5dGVzLCBidWYsIE5VTEwpOwogCi0JcmV0dXJuIFNESU9IX0FQSV9TVUNDRVNTKHN0YXR1cykgPyAwIDogQkNNRV9FUlJPUjsKKwlyZXR1cm4gU0RJT0hfQVBJX1NVQ0NFU1Moc3RhdHVzKSA/IDAgOiAtRUlPOwogfQogCiBpbnQgYmNtc2RoX2Fib3J0KHZvaWQgKnNkaCwgdWludCBmbikKQEAgLTU4MCw3ICs1ODIsNyBAQAogaW50IGJjbXNkaF9xdWVyeV9kZXZpY2Uodm9pZCAqc2RoKQogewogCWJjbXNkaF9pbmZvX3QgKmJjbXNkaCA9IChiY21zZGhfaW5mb190ICopIHNkaDsKLQliY21zZGgtPnZlbmRldmlkID0gKFZFTkRPUl9CUk9BRENPTSA8PCAxNikgfCAwOworCWJjbXNkaC0+dmVuZGV2aWQgPSAoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSA8PCAxNikgfCAwOwogCXJldHVybiBiY21zZGgtPnZlbmRldmlkOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaF9saW51eC5jIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGhfbGludXguYwppbmRleCBhYzViYmM4Li40NjVmNjIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaF9saW51eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoX2xpbnV4LmMKQEAgLTQzLDYgKzQzLDkgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNlbmRpZgkJCQkvKiBDT05GSUdfTUFDSF9TQU5ER0FURTJHICovCiAKKyNpbmNsdWRlICJkbmdsX3N0YXRzLmgiCisjaW5jbHVkZSAiZGhkLmgiCisKIC8qKgogICogU0RJTyBIb3N0IENvbnRyb2xsZXIgaW5mbwogICovCkBAIC04NywxMSArOTAsMTEgQEAKIAkJcmV0dXJuIHRydWU7CiAKIAkvKiBDaGVjayBmb3IgQlJDTSAyN1hYIFN0YW5kYXJkIGhvc3QgY29udHJvbGxlciAqLwotCWlmIChkZXZpY2UgPT0gQkNNMjdYWF9TRElPSF9JRCAmJiB2ZW5kb3IgPT0gVkVORE9SX0JST0FEQ09NKQorCWlmIChkZXZpY2UgPT0gQkNNMjdYWF9TRElPSF9JRCAmJiB2ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9CUk9BRENPTSkKIAkJcmV0dXJuIHRydWU7CiAKIAkvKiBDaGVjayBmb3IgQlJDTSBTdGFuZGFyZCBob3N0IGNvbnRyb2xsZXIgKi8KLQlpZiAoZGV2aWNlID09IFNESU9IX0ZQR0FfSUQgJiYgdmVuZG9yID09IFZFTkRPUl9CUk9BRENPTSkKKwlpZiAoZGV2aWNlID09IFNESU9IX0ZQR0FfSUQgJiYgdmVuZG9yID09IFBDSV9WRU5ET1JfSURfQlJPQURDT00pCiAJCXJldHVybiB0cnVlOwogCiAJLyogQ2hlY2sgZm9yIFRJIFBDSXh4MjEgU3RhbmRhcmQgaG9zdCBjb250cm9sbGVyICovCkBAIC0xMTEsOCArMTE0LDcgQEAKICNlbmRpZgkJCQkvKiBCQ01TRElPSF9TVEQgKi8KICNpZmRlZiBCQ01TRElPSF9TUEkKIAkvKiBUaGlzIGlzIHRoZSBQY2lTcGlIb3N0LiAqLwotCWlmIChkZXZpY2UgPT0gU1BJSF9GUEdBX0lEICYmIHZlbmRvciA9PSBWRU5ET1JfQlJPQURDT00pIHsKLQkJV0xfTk9ORSgiRm91bmQgUENJIFNQSSBIb3N0IENvbnRyb2xsZXJcbiIpOworCWlmIChkZXZpY2UgPT0gU1BJSF9GUEdBX0lEICYmIHZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0JST0FEQ09NKSB7CiAJCXJldHVybiB0cnVlOwogCX0KICNlbmRpZgkJCQkvKiBCQ01TRElPSF9TUEkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoX3NkbW1jLmMgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaF9zZG1tYy5jCmluZGV4IDcxYzM1NzEuLmMwZmZiZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoX3NkbW1jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGhfc2RtbWMuYwpAQCAtMjYsMTQgKzI2LDExIEBACiAjaW5jbHVkZSA8bGludXgvbW1jL2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvc2Rpb19mdW5jLmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL3NkaW9faWRzLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogCiAjaW5jbHVkZSA8ZG5nbF9zdGF0cy5oPgogI2luY2x1ZGUgPGRoZC5oPgogCi0jaWYgZGVmaW5lZChDT05GSUdfUE1fU0xFRVApCi0jaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgotZXh0ZXJuIHZvbGF0aWxlIGJvb2wgZGhkX21tY19zdXNwZW5kOwotI2VuZGlmCiAjaW5jbHVkZSAiYmNtc2RoX3NkbW1jLmgiCiAKIGV4dGVybiBpbnQgc2Rpb19mdW5jdGlvbl9pbml0KHZvaWQpOwpAQCAtNjgsNiArNjUsMTMgQEAKIGludCBzZGlvaF9zZG1tY19jYXJkX3JlZ3JlYWQoc2Rpb2hfaW5mb190ICpzZCwgaW50IGZ1bmMsIHUzMiByZWdhZGRyLAogCQkJICAgICBpbnQgcmVnc2l6ZSwgdTMyICpkYXRhKTsKIAordm9pZCBzZGlvaF9zZGlvX3NldF9ob3N0X3BtX2ZsYWdzKGludCBmbGFnKQoreworCWlmIChzZGlvX3NldF9ob3N0X3BtX2ZsYWdzKGdJbnN0YW5jZS0+ZnVuY1sxXSwgZmxhZykpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byBzZXQgcG1fZmxhZ3MgMHglMDh4XG4iLFwKKwkJCSBfX2Z1bmNfXywgKHVuc2lnbmVkIGludClmbGFnKTsKK30KKwogc3RhdGljIGludCBzZGlvaF9zZG1tY19jYXJkX2VuYWJsZWZ1bmNzKHNkaW9oX2luZm9fdCAqc2QpCiB7CiAJaW50IGVycl9yZXQ7CkBAIC00MTYsNyArNDIwLDcgQEAKIAogCXZpID0gYmNtX2lvdmFyX2xvb2t1cChzZGlvaF9pb3ZhcnMsIG5hbWUpOwogCWlmICh2aSA9PSBOVUxMKSB7Ci0JCWJjbWVycm9yID0gQkNNRV9VTlNVUFBPUlRFRDsKKwkJYmNtZXJyb3IgPSAtRU5PVFNVUFA7CiAJCWdvdG8gZXhpdDsKIAl9CiAKQEAgLTQ2NSw3ICs0NjksNyBAQAogCiAJY2FzZSBJT1ZfR1ZBTChJT1ZfQkxPQ0tTSVpFKToKIAkJaWYgKCh1MzIpIGludF92YWwgPiBzaS0+bnVtX2Z1bmNzKSB7Ci0JCQliY21lcnJvciA9IEJDTUVfQkFEQVJHOworCQkJYmNtZXJyb3IgPSAtRUlOVkFMOwogCQkJYnJlYWs7CiAJCX0KIAkJaW50X3ZhbCA9IChzMzIpIHNpLT5jbGllbnRfYmxvY2tfc2l6ZVtpbnRfdmFsXTsKQEAgLTQ3OSw3ICs0ODMsNyBAQAogCQkJdWludCBtYXhzaXplOwogCiAJCQlpZiAoZnVuYyA+IHNpLT5udW1fZnVuY3MpIHsKLQkJCQliY21lcnJvciA9IEJDTUVfQkFEQVJHOworCQkJCWJjbWVycm9yID0gLUVJTlZBTDsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtNDk3LDcgKzUwMSw3IEBACiAJCQkJbWF4c2l6ZSA9IDA7CiAJCQl9CiAJCQlpZiAoYmxrc2l6ZSA+IG1heHNpemUpIHsKLQkJCQliY21lcnJvciA9IEJDTUVfQkFEQVJHOworCQkJCWJjbWVycm9yID0gLUVJTlZBTDsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWlmICghYmxrc2l6ZSkKQEAgLTYwMCw3ICs2MDQsNyBAQAogCQkJICAgIHx8IHNkX3B0ci0+b2Zmc2V0ID4gU0RfTWF4Q3VyQ2FwKSB7CiAJCQkJc2RfZXJyKCgiJXM6IGJhZCBvZmZzZXQgMHgleFxuIiwgX19mdW5jX18sCiAJCQkJCXNkX3B0ci0+b2Zmc2V0KSk7Ci0JCQkJYmNtZXJyb3IgPSBCQ01FX0JBREFSRzsKKwkJCQliY21lcnJvciA9IC1FSU5WQUw7CiAJCQkJYnJlYWs7CiAJCQl9CiAKQEAgLTYzMCw3ICs2MzQsNyBAQAogCQkJICAgIHx8IHNkX3B0ci0+b2Zmc2V0ID4gU0RfTWF4Q3VyQ2FwKSB7CiAJCQkJc2RfZXJyKCgiJXM6IGJhZCBvZmZzZXQgMHgleFxuIiwgX19mdW5jX18sCiAJCQkJCXNkX3B0ci0+b2Zmc2V0KSk7Ci0JCQkJYmNtZXJyb3IgPSBCQ01FX0JBREFSRzsKKwkJCQliY21lcnJvciA9IC1FSU5WQUw7CiAJCQkJYnJlYWs7CiAJCQl9CiAKQEAgLTY0OSw3ICs2NTMsNyBAQAogCiAJCQlpZiAoc2Rpb2hfY2ZnX3JlYWQKIAkJCSAgICAoc2ksIHNkX3B0ci0+ZnVuYywgc2RfcHRyLT5vZmZzZXQsICZkYXRhKSkgewotCQkJCWJjbWVycm9yID0gQkNNRV9TRElPX0VSUk9SOworCQkJCWJjbWVycm9yID0gLUVJTzsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtNjY1LDE0ICs2NjksMTQgQEAKIAogCQkJaWYgKHNkaW9oX2NmZ193cml0ZQogCQkJICAgIChzaSwgc2RfcHRyLT5mdW5jLCBzZF9wdHItPm9mZnNldCwgJmRhdGEpKSB7Ci0JCQkJYmNtZXJyb3IgPSBCQ01FX1NESU9fRVJST1I7CisJCQkJYmNtZXJyb3IgPSAtRUlPOwogCQkJCWJyZWFrOwogCQkJfQogCQkJYnJlYWs7CiAJCX0KIAogCWRlZmF1bHQ6Ci0JCWJjbWVycm9yID0gQkNNRV9VTlNVUFBPUlRFRDsKKwkJYmNtZXJyb3IgPSAtRU5PVFNVUFA7CiAJCWJyZWFrOwogCX0KIGV4aXQ6CkBAIC0xMDA2LDE3ICsxMDEwLDE2IEBACiAKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgYnVmZmVyIG9yIHBhY2tldCwgYW5kIGZpeGVzIGV2ZXJ5dGhpbmcgdXAKLSAqIHNvIHRoYXQgaW4gdGhlCi0gKiBlbmQsIGEgRE1BLWFibGUgcGFja2V0IGlzIGNyZWF0ZWQuCisgKiBzbyB0aGF0IGluIHRoZSBlbmQsIGEgRE1BLWFibGUgcGFja2V0IGlzIGNyZWF0ZWQuCiAgKgogICogQSBidWZmZXIgZG9lcyBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIHBhY2tldCBwb2ludGVyLAogICogYW5kIG1heSBvciBtYXkgbm90IGJlIGFsaWduZWQuCiAgKiBBIHBhY2tldCBtYXkgY29uc2lzdCBvZiBhIHNpbmdsZSBwYWNrZXQsIG9yIGEgcGFja2V0IGNoYWluLgotICogSWYgaXQgaXMgYSBwYWNrZXQgY2hhaW4sCi0gKiB0aGVuIGFsbCB0aGUgcGFja2V0cyBpbiB0aGUgY2hhaW4gbXVzdCBiZSBwcm9wZXJseSBhbGlnbmVkLgotICogSWYgdGhlIHBhY2tldCBkYXRhIGlzIG5vdAotICogYWxpZ25lZCwgdGhlbiB0aGVyZSBtYXkgb25seSBiZSBvbmUgcGFja2V0LCBhbmQgaW4gdGhpcyBjYXNlLAotICogaXQgaXMgY29waWVkIHRvIGEgbmV3CisgKiBJZiBpdCBpcyBhIHBhY2tldCBjaGFpbiwgdGhlbiBhbGwgdGhlIHBhY2tldHMgaW4gdGhlIGNoYWluCisgKiBtdXN0IGJlIHByb3Blcmx5IGFsaWduZWQuCisgKgorICogSWYgdGhlIHBhY2tldCBkYXRhIGlzIG5vdCBhbGlnbmVkLCB0aGVuIHRoZXJlIG1heSBvbmx5IGJlCisgKiBvbmUgcGFja2V0LCBhbmQgaW4gdGhpcyBjYXNlLCAgaXQgaXMgY29waWVkIHRvIGEgbmV3CiAgKiBhbGlnbmVkIHBhY2tldC4KICAqCiAgKi8KQEAgLTEwMzYsOSArMTAzOSw5IEBACiAJaWYgKHBrdCA9PSBOVUxMKSB7CiAJCXNkX2RhdGEoKCIlczogQ3JlYXRpbmcgbmV3ICVzIFBhY2tldCwgbGVuPSVkXG4iLAogCQkJIF9fZnVuY19fLCB3cml0ZSA/ICJUWCIgOiAiUlgiLCBidWZsZW5fdSkpOwotCQlteXBrdCA9IHBrdF9idWZfZ2V0X3NrYihidWZsZW5fdSk7CisJCW15cGt0ID0gYmNtX3BrdF9idWZfZ2V0X3NrYihidWZsZW5fdSk7CiAJCWlmICghbXlwa3QpIHsKLQkJCXNkX2VycigoIiVzOiBwa3RfYnVmX2dldF9za2IgZmFpbGVkOiBsZW4gJWRcbiIsCisJCQlzZF9lcnIoKCIlczogYmNtX3BrdF9idWZfZ2V0X3NrYiBmYWlsZWQ6IGxlbiAlZFxuIiwKIAkJCQlfX2Z1bmNfXywgYnVmbGVuX3UpKTsKIAkJCXJldHVybiBTRElPSF9BUElfUkNfRkFJTDsKIAkJfQpAQCAtMTA1NCw3ICsxMDU3LDcgQEAKIAkJaWYgKCF3cml0ZSkKIAkJCW1lbWNweShidWZmZXIsIG15cGt0LT5kYXRhLCBidWZsZW5fdSk7CiAKLQkJcGt0X2J1Zl9mcmVlX3NrYihteXBrdCk7CisJCWJjbV9wa3RfYnVmX2ZyZWVfc2tiKG15cGt0KTsKIAl9IGVsc2UgaWYgKCgodTMyKSAocGt0LT5kYXRhKSAmIERNQV9BTElHTl9NQVNLKSAhPSAwKSB7CiAJCS8qIENhc2UgMjogV2UgaGF2ZSBhIHBhY2tldCwgYnV0IGl0IGlzIHVuYWxpZ25lZC4gKi8KIApAQCAtMTA2Myw5ICsxMDY2LDkgQEAKIAogCQlzZF9kYXRhKCgiJXM6IENyZWF0aW5nIGFsaWduZWQgJXMgUGFja2V0LCBsZW49JWRcbiIsCiAJCQkgX19mdW5jX18sIHdyaXRlID8gIlRYIiA6ICJSWCIsIHBrdC0+bGVuKSk7Ci0JCW15cGt0ID0gcGt0X2J1Zl9nZXRfc2tiKHBrdC0+bGVuKTsKKwkJbXlwa3QgPSBiY21fcGt0X2J1Zl9nZXRfc2tiKHBrdC0+bGVuKTsKIAkJaWYgKCFteXBrdCkgewotCQkJc2RfZXJyKCgiJXM6IHBrdF9idWZfZ2V0X3NrYiBmYWlsZWQ6IGxlbiAlZFxuIiwKKwkJCXNkX2VycigoIiVzOiBiY21fcGt0X2J1Zl9nZXRfc2tiIGZhaWxlZDogbGVuICVkXG4iLAogCQkJCV9fZnVuY19fLCBwa3QtPmxlbikpOwogCQkJcmV0dXJuIFNESU9IX0FQSV9SQ19GQUlMOwogCQl9CkBAIC0xMDgxLDcgKzEwODQsNyBAQAogCQlpZiAoIXdyaXRlKQogCQkJbWVtY3B5KHBrdC0+ZGF0YSwgbXlwa3QtPmRhdGEsIG15cGt0LT5sZW4pOwogCi0JCXBrdF9idWZfZnJlZV9za2IobXlwa3QpOworCQliY21fcGt0X2J1Zl9mcmVlX3NrYihteXBrdCk7CiAJfSBlbHNlIHsJCS8qIGNhc2UgMzogV2UgaGF2ZSBhIHBhY2tldCBhbmQKIAkJCQkgaXQgaXMgYWxpZ25lZC4gKi8KIAkJc2RfZGF0YSgoIiVzOiBBbGlnbmVkICVzIFBhY2tldCwgZGlyZWN0IERNQVxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoX3NkbW1jX2xpbnV4LmMgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaF9zZG1tY19saW51eC5jCmluZGV4IGQ3MzhkNGQuLjI3OTJhNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoX3NkbW1jX2xpbnV4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGhfc2RtbWNfbGludXguYwpAQCAtMjcsNiArMjcsOSBAQAogI2luY2x1ZGUgPGxpbnV4L21tYy9zZGlvX2Z1bmMuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvc2Rpb19pZHMuaD4KIAorI2luY2x1ZGUgImRuZ2xfc3RhdHMuaCIKKyNpbmNsdWRlICJkaGQuaCIKKwogI2lmICFkZWZpbmVkKFNESU9fVkVORE9SX0lEX0JST0FEQ09NKQogI2RlZmluZSBTRElPX1ZFTkRPUl9JRF9CUk9BRENPTQkJMHgwMmQwCiAjZW5kaWYJCQkJLyogIWRlZmluZWQoU0RJT19WRU5ET1JfSURfQlJPQURDT00pICovCkBAIC0xNTEsMTEgKzE1NCwxMSBAQAogCXNkb3MgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2Rvc19pbmZvKSwgR0ZQX0FUT01JQyk7CiAJc2QtPnNkb3NfaW5mbyA9ICh2b2lkICopc2RvczsKIAlpZiAoc2RvcyA9PSBOVUxMKQotCQlyZXR1cm4gQkNNRV9OT01FTTsKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlzZG9zLT5zZCA9IHNkOwogCXNwaW5fbG9ja19pbml0KCZzZG9zLT5sb2NrKTsKLQlyZXR1cm4gQkNNRV9PSzsKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCBzZGlvaF9zZG1tY19vc2ZyZWUoc2Rpb2hfaW5mb190ICpzZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvYmNtdXRpbHMuYyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvYmNtdXRpbHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGUxMjk2YS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL2JjbXV0aWxzLmMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSAiLi4vdXRpbC9iY211dGlscy5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy9iY213aWZpLmMgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL2JjbXdpZmkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZlOTg4Yy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL2JjbXdpZmkuYworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlICIuLi91dGlsL2JjbXdpZmkuYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvZGhkLmggYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL2RoZC5oCmluZGV4IDYwY2Y3ODIuLmE3MjZiNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvZGhkLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy9kaGQuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIC8qIFRoZSBrZXJuZWwgdGhyZWFkaW5nIGlzIHNkaW8tc3BlY2lmaWMgKi8KQEAgLTEyMiwxOSArMTIzLDIyIEBACiB9IGRoZF9wdWJfdDsKIAogI2lmIGRlZmluZWQoQ09ORklHX1BNX1NMRUVQKQotCitleHRlcm4gYXRvbWljX3QgZGhkX21tY19zdXNwZW5kOwogI2RlZmluZSBESERfUE1fUkVTVU1FX1dBSVRfSU5JVChhKSBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChhKTsKLSNkZWZpbmUgX0RIRF9QTV9SRVNVTUVfV0FJVChhLCBiKSBkbyB7XAotCQkJaW50IHJldHJ5ID0gMDsgXAotCQkJd2hpbGUgKGRoZF9tbWNfc3VzcGVuZCAmJiByZXRyeSsrICE9IGIpIHsgXAotCQkJCXdhaXRfZXZlbnRfdGltZW91dChhLCBmYWxzZSwgSFovMTAwKTsgXAotCQkJfSBcCi0JCX0Jd2hpbGUgKDApCisjZGVmaW5lIF9ESERfUE1fUkVTVU1FX1dBSVQoYSwgYikgZG8geyBcCisJCWludCByZXRyeSA9IDA7IFwKKwkJd2hpbGUgKGF0b21pY19yZWFkKCZkaGRfbW1jX3N1c3BlbmQpICYmIHJldHJ5KysgIT0gYikgeyBcCisJCQl3YWl0X2V2ZW50X3RpbWVvdXQoYSwgZmFsc2UsIEhaLzEwMCk7IFwKKwkJfSBcCisJfQl3aGlsZSAoMCkKICNkZWZpbmUgREhEX1BNX1JFU1VNRV9XQUlUKGEpCV9ESERfUE1fUkVTVU1FX1dBSVQoYSwgMzApCiAjZGVmaW5lIERIRF9QTV9SRVNVTUVfV0FJVF9GT1JFVkVSKGEpCV9ESERfUE1fUkVTVU1FX1dBSVQoYSwgfjApCiAjZGVmaW5lIERIRF9QTV9SRVNVTUVfUkVUVVJOX0VSUk9SKGEpCVwKLQlkbyB7IGlmIChkaGRfbW1jX3N1c3BlbmQpIHJldHVybiBhOyB9IHdoaWxlICgwKQotI2RlZmluZSBESERfUE1fUkVTVU1FX1JFVFVSTglkbyB7IGlmIChkaGRfbW1jX3N1c3BlbmQpIHJldHVybjsgfSB3aGlsZSAoMCkKKwlkbyB7IGlmIChhdG9taWNfcmVhZCgmZGhkX21tY19zdXNwZW5kKSkgcmV0dXJuIGE7IH0gd2hpbGUgKDApCisjZGVmaW5lIERIRF9QTV9SRVNVTUVfUkVUVVJOCWRvIHsgXAorCWlmIChhdG9taWNfcmVhZCgmZGhkX21tY19zdXNwZW5kKSkgXAorCQlyZXR1cm47IFwKKwl9IHdoaWxlICgwKQogCiAjZGVmaW5lIERIRF9TUElOV0FJVF9TTEVFUF9JTklUKGEpIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGEpOwogI2RlZmluZSBTUElOV0FJVF9TTEVFUChhLCBleHAsIHVzKSBkbyB7IFwKQEAgLTM5Nyw0ICs0MDEsMTQgQEAKIGV4dGVybiB2b2lkIGRoZF93YWl0X2Zvcl9ldmVudChkaGRfcHViX3QgKmRoZCwgYm9vbCAqIGxvY2t2YXIpOwogZXh0ZXJuIHZvaWQgZGhkX3dhaXRfZXZlbnRfd2FrZXVwKGRoZF9wdWJfdCAqZGhkKTsKIAorZXh0ZXJuIHUzMiBnX2Fzc2VydF90eXBlOworCisjaWZkZWYgQkNNREJHCisjZGVmaW5lIEFTU0VSVChleHApIFwKKwkgIGRvIHsgaWYgKCEoZXhwKSkgb3NsX2Fzc2VydCgjZXhwLCBfX0ZJTEVfXywgX19MSU5FX18pOyB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgb3NsX2Fzc2VydChjaGFyICpleHAsIGNoYXIgKmZpbGUsIGludCBsaW5lKTsKKyNlbHNlCisjZGVmaW5lIEFTU0VSVChleHApCWRvIHt9IHdoaWxlICgwKQorI2VuZGlmICAvKiBkZWZpbmVkKEJDTURCRykgKi8KKwogI2VuZGlmCQkJCS8qIF9kaGRfaF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvZGhkX2NkYy5jIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy9kaGRfY2RjLmMKaW5kZXggMzlhNGQwMC4uYmE1YTVjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy9kaGRfY2RjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy9kaGRfY2RjLmMKQEAgLTExMSw3ICsxMTEsNyBAQAogCS8qIFJlc3BvbmQgImJjbWVycm9yIiBhbmQgImJjbWVycm9yc3RyIiB3aXRoIGxvY2FsIGNhY2hlICovCiAJaWYgKGNtZCA9PSBXTENfR0VUX1ZBUiAmJiBidWYpIHsKIAkJaWYgKCFzdHJjbXAoKGNoYXIgKilidWYsICJiY21lcnJvcnN0ciIpKSB7Ci0JCQlzdHJuY3B5KChjaGFyICopYnVmLCBiY21lcnJvcnN0cihkaGQtPmRvbmdsZV9lcnJvciksCisJCQlzdHJuY3B5KChjaGFyICopYnVmLCAiYmNtX2Vycm9yIiwKIAkJCQlCQ01FX1NUUkxFTik7CiAJCQlnb3RvIGRvbmU7CiAJCX0gZWxzZSBpZiAoIXN0cmNtcCgoY2hhciAqKWJ1ZiwgImJjbWVycm9yIikpIHsKQEAgLTI1Myw5ICsyNTMsOSBAQAogCQkJImxhc3RjbWQ9MHgleCAoJWx1KVxuIiwKIAkJCWlvYy0+Y21kLCAodW5zaWduZWQgbG9uZylpb2MtPmNtZCwgcHJvdC0+bGFzdGNtZCwKIAkJCSh1bnNpZ25lZCBsb25nKXByb3QtPmxhc3RjbWQpKTsKLQkJaWYgKChpb2MtPmNtZCA9PSBXTENfU0VUX1ZBUikgfHwgKGlvYy0+Y21kID09IFdMQ19HRVRfVkFSKSkgeworCQlpZiAoKGlvYy0+Y21kID09IFdMQ19TRVRfVkFSKSB8fCAoaW9jLT5jbWQgPT0gV0xDX0dFVF9WQVIpKQogCQkJREhEX1RSQUNFKCgiaW92YXIgY21kPSVzXG4iLCAoY2hhciAqKWJ1ZikpOwotCQl9CisKIAkJZ290byBkb25lOwogCX0KIApAQCAtMzA5LDcgKzMwOSw3IEBACiBkaGRfcHJvdF9pb3Zhcl9vcChkaGRfcHViX3QgKmRoZHAsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCSAgdm9pZCAqcGFyYW1zLCBpbnQgcGxlbiwgdm9pZCAqYXJnLCBpbnQgbGVuLCBib29sIHNldCkKIHsKLQlyZXR1cm4gQkNNRV9VTlNVUFBPUlRFRDsKKwlyZXR1cm4gLUVOT1RTVVBQOwogfQogCiB2b2lkIGRoZF9wcm90X2R1bXAoZGhkX3B1Yl90ICpkaGRwLCBzdHJ1Y3QgYmNtc3RyYnVmICpzdHJidWYpCkBAIC0zNTcsNyArMzU3LDcgQEAKIAlpZiAocGt0YnVmLT5sZW4gPCBCRENfSEVBREVSX0xFTikgewogCQlESERfRVJST1IoKCIlczogcnggZGF0YSB0b28gc2hvcnQgKCVkIDwgJWQpXG4iLCBfX2Z1bmNfXywKIAkJCSAgIHBrdGJ1Zi0+bGVuLCBCRENfSEVBREVSX0xFTikpOwotCQlyZXR1cm4gQkNNRV9FUlJPUjsKKwkJcmV0dXJuIC1FQkFERTsKIAl9CiAKIAloID0gKHN0cnVjdCBiZGNfaGVhZGVyICopKHBrdGJ1Zi0+ZGF0YSk7CkBAIC0zNjYsMTQgKzM2NiwxNCBAQAogCWlmICgqaWZpZHggPj0gREhEX01BWF9JRlMpIHsKIAkJREhEX0VSUk9SKCgiJXM6IHJ4IGRhdGEgaWZudW0gb3V0IG9mIHJhbmdlICglZClcbiIsCiAJCQkgICBfX2Z1bmNfXywgKmlmaWR4KSk7Ci0JCXJldHVybiBCQ01FX0VSUk9SOworCQlyZXR1cm4gLUVCQURFOwogCX0KIAogCWlmICgoKGgtPmZsYWdzICYgQkRDX0ZMQUdfVkVSX01BU0spID4+IEJEQ19GTEFHX1ZFUl9TSElGVCkgIT0KIAkgICAgQkRDX1BST1RPX1ZFUikgewogCQlESERfRVJST1IoKCIlczogbm9uLUJEQyBwYWNrZXQgcmVjZWl2ZWQsIGZsYWdzIDB4JXhcbiIsCiAJCQkgICBkaGRfaWZuYW1lKGRoZCwgKmlmaWR4KSwgaC0+ZmxhZ3MpKTsKLQkJcmV0dXJuIEJDTUVfRVJST1I7CisJCXJldHVybiAtRUJBREU7CiAJfQogCiAJaWYgKGgtPmZsYWdzICYgQkRDX0ZMQUdfU1VNX0dPT0QpIHsKQEAgLTQxNiw3ICs0MTYsNyBAQAogCiBmYWlsOgogCWtmcmVlKGNkYyk7Ci0JcmV0dXJuIEJDTUVfTk9NRU07CisJcmV0dXJuIC1FTk9NRU07CiB9CiAKIC8qIH5OT1RFfiBXaGF0IGlmIGFub3RoZXIgdGhyZWFkIGlzIHdhaXRpbmcgb24gdGhlIHNlbWFwaG9yZT8gIEhvbGRpbmcgaXQ/ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL2RoZF9jb21tb24uYyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvZGhkX2NvbW1vbi5jCmluZGV4IGFhMTcxZjYuLjBiZmI5M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvZGhkX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvZGhkX2NvbW1vbi5jCkBAIC0xODksNyArMTg5LDcgQEAKIAkvKiBBZGQgYW55IGJ1cyBpbmZvICovCiAJZGhkX2J1c19kdW1wKGRoZHAsIHN0cmJ1Zik7CiAKLQlyZXR1cm4gIXN0cmJ1Zi0+c2l6ZSA/IEJDTUVfQlVGVE9PU0hPUlQgOiAwOworCXJldHVybiAhc3RyYnVmLT5zaXplID8gLUVPVkVSRkxPVyA6IDA7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTIyNSw3ICsyMjUsNyBAQAogCQlicmVhazsKIAogCWNhc2UgSU9WX0dWQUwoSU9WX0JDTUVSUk9SU1RSKToKLQkJc3RybmNweSgoY2hhciAqKWFyZywgYmNtZXJyb3JzdHIoZGhkX3B1Yi0+YmNtZXJyb3IpLAorCQlzdHJuY3B5KChjaGFyICopYXJnLCAiYmNtX2Vycm9yIiwKIAkJCUJDTUVfU1RSTEVOKTsKIAkJKChjaGFyICopYXJnKVtCQ01FX1NUUkxFTiAtIDFdID0gMHgwMDsKIAkJYnJlYWs7CkBAIC0yNDIsNyArMjQyLDcgQEAKIAogCWNhc2UgSU9WX1NWQUwoSU9WX1dEVElDSyk6CiAJCWlmICghZGhkX3B1Yi0+dXApIHsKLQkJCWJjbWVycm9yID0gQkNNRV9OT1RVUDsKKwkJCWJjbWVycm9yID0gLUVOT0xJTks7CiAJCQlicmVhazsKIAkJfQogCQlkaGRfb3Nfd2RfdGltZXIoZGhkX3B1YiwgKHVpbnQpIGludF92YWwpOwpAQCAtMjg5LDcgKzI4OSw3IEBACiAKIAljYXNlIElPVl9TVkFMKElPVl9JT0NUTFRJTUVPVVQpOnsKIAkJCWlmIChpbnRfdmFsIDw9IDApCi0JCQkJYmNtZXJyb3IgPSBCQ01FX0JBREFSRzsKKwkJCQliY21lcnJvciA9IC1FSU5WQUw7CiAJCQllbHNlCiAJCQkJZGhkX29zX3NldF9pb2N0bF9yZXNwX3RpbWVvdXQoKHVuc2lnbmVkIGludCkKIAkJCQkJCQkgICAgICBpbnRfdmFsKTsKQEAgLTI5Nyw3ICsyOTcsNyBAQAogCQl9CiAKIAlkZWZhdWx0OgotCQliY21lcnJvciA9IEJDTUVfVU5TVVBQT1JURUQ7CisJCWJjbWVycm9yID0gLUVOT1RTVVBQOwogCQlicmVhazsKIAl9CiAKQEAgLTMxNiw3ICszMTYsNyBAQAogCSAqIGV4Y2VlZGluZyB0b3RhbCBxdWV1ZSBsZW5ndGgKIAkgKi8KIAlpZiAoIXBrdHFfcGZ1bGwocSwgcHJlYykgJiYgIXBrdHFfZnVsbChxKSkgewotCQlwa3RxX3BlbnEocSwgcHJlYywgcGt0KTsKKwkJYmNtX3BrdHFfcGVucShxLCBwcmVjLCBwa3QpOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKQEAgLTMyNCw3ICszMjQsNyBAQAogCWlmIChwa3RxX3BmdWxsKHEsIHByZWMpKQogCQllcHJlYyA9IHByZWM7CiAJZWxzZSBpZiAocGt0cV9mdWxsKHEpKSB7Ci0JCXAgPSBwa3RxX3BlZWtfdGFpbChxLCAmZXByZWMpOworCQlwID0gYmNtX3BrdHFfcGVla190YWlsKHEsICZlcHJlYyk7CiAJCUFTU0VSVChwKTsKIAkJaWYgKGVwcmVjID4gcHJlYykKIAkJCXJldHVybiBmYWxzZTsKQEAgLTMzOCwyMSArMzM4LDIxIEBACiAJCWlmIChlcHJlYyA9PSBwcmVjICYmICFkaXNjYXJkX29sZGVzdCkKIAkJCXJldHVybiBmYWxzZTsJLyogcmVmdXNlIG5ld2VyIChpbmNvbWluZykgcGFja2V0ICovCiAJCS8qIEV2aWN0IHBhY2tldCBhY2NvcmRpbmcgdG8gZGlzY2FyZCBwb2xpY3kgKi8KLQkJcCA9IGRpc2NhcmRfb2xkZXN0ID8gcGt0cV9wZGVxKHEsIGVwcmVjKSA6IHBrdHFfcGRlcV90YWlsKHEsCi0JCQkJCQkgIGVwcmVjKTsKKwkJcCA9IGRpc2NhcmRfb2xkZXN0ID8gYmNtX3BrdHFfcGRlcShxLCBlcHJlYykgOgorCQkJYmNtX3BrdHFfcGRlcV90YWlsKHEsIGVwcmVjKTsKIAkJaWYgKHAgPT0gTlVMTCkgewotCQkJREhEX0VSUk9SKCgiJXM6IHBrdHFfcGVucSgpIGZhaWxlZCwgb2xkZXN0ICVkLiIsCisJCQlESERfRVJST1IoKCIlczogYmNtX3BrdHFfcGVucSgpIGZhaWxlZCwgb2xkZXN0ICVkLiIsCiAJCQkJICAgX19mdW5jX18sIGRpc2NhcmRfb2xkZXN0KSk7CiAJCQlBU1NFUlQocCk7CiAJCX0KIAotCQlwa3RfYnVmX2ZyZWVfc2tiKHApOworCQliY21fcGt0X2J1Zl9mcmVlX3NrYihwKTsKIAl9CiAKIAkvKiBFbnF1ZXVlICovCi0JcCA9IHBrdHFfcGVucShxLCBwcmVjLCBwa3QpOworCXAgPSBiY21fcGt0cV9wZW5xKHEsIHByZWMsIHBrdCk7CiAJaWYgKHAgPT0gTlVMTCkgewotCQlESERfRVJST1IoKCIlczogcGt0cV9wZW5xKCkgZmFpbGVkLiIsIF9fZnVuY19fKSk7CisJCURIRF9FUlJPUigoIiVzOiBiY21fcGt0cV9wZW5xKCkgZmFpbGVkLiIsIF9fZnVuY19fKSk7CiAJCUFTU0VSVChwKTsKIAl9CiAKQEAgLTM4MSw3ICszODEsNyBAQAogCiAJdmkgPSBiY21faW92YXJfbG9va3VwKGRoZF9pb3ZhcnMsIG5hbWUpOwogCWlmICh2aSA9PSBOVUxMKSB7Ci0JCWJjbWVycm9yID0gQkNNRV9VTlNVUFBPUlRFRDsKKwkJYmNtZXJyb3IgPSAtRU5PVFNVUFA7CiAJCWdvdG8gZXhpdDsKIAl9CiAKQEAgLTQyMCwxOSArNDIwLDE5IEBACiAJREhEX1RSQUNFKCgiJXM6IEVudGVyXG4iLCBfX2Z1bmNfXykpOwogCiAJaWYgKCFidWYpCi0JCXJldHVybiBCQ01FX0JBREFSRzsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzd2l0Y2ggKGlvYy0+Y21kKSB7CiAJY2FzZSBESERfR0VUX01BR0lDOgogCQlpZiAoYnVmbGVuIDwgc2l6ZW9mKGludCkpCi0JCQliY21lcnJvciA9IEJDTUVfQlVGVE9PU0hPUlQ7CisJCQliY21lcnJvciA9IC1FT1ZFUkZMT1c7CiAJCWVsc2UKIAkJCSooaW50ICopYnVmID0gREhEX0lPQ1RMX01BR0lDOwogCQlicmVhazsKIAogCWNhc2UgREhEX0dFVF9WRVJTSU9OOgogCQlpZiAoYnVmbGVuIDwgc2l6ZW9mKGludCkpCi0JCQliY21lcnJvciA9IC1CQ01FX0JVRlRPT1NIT1JUOworCQkJYmNtZXJyb3IgPSAtRU9WRVJGTE9XOwogCQllbHNlCiAJCQkqKGludCAqKWJ1ZiA9IERIRF9JT0NUTF9WRVJTSU9OOwogCQlicmVhazsKQEAgLTQ0OCw3ICs0NDgsNyBAQAogCQkJCTsKIAogCQkJaWYgKCphcmcpIHsKLQkJCQliY21lcnJvciA9IEJDTUVfQlVGVE9PU0hPUlQ7CisJCQkJYmNtZXJyb3IgPSAtRU9WRVJGTE9XOwogCQkJCWJyZWFrOwogCQkJfQogCkBAIC00NjQsNyArNDY0LDcgQEAKIAkJCQliY21lcnJvciA9CiAJCQkJICAgIGRoZF9pb3Zhcl9vcChkaGRfcHViLCBidWYsIE5VTEwsIDAsIGFyZywKIAkJCQkJCSBhcmdsZW4sIElPVl9TRVQpOwotCQkJaWYgKGJjbWVycm9yICE9IEJDTUVfVU5TVVBQT1JURUQpCisJCQlpZiAoYmNtZXJyb3IgIT0gLUVOT1RTVVBQKQogCQkJCWJyZWFrOwogCiAJCQkvKiBub3QgaW4gZ2VuZXJpYyB0YWJsZSwgdHJ5IHByb3RvY29sIG1vZHVsZSAqLwpAQCAtNDc2LDcgKzQ3Niw3IEBACiAJCQkJYmNtZXJyb3IgPSBkaGRfcHJvdF9pb3Zhcl9vcChkaGRfcHViLCBidWYsCiAJCQkJCQkJICAgICBOVUxMLCAwLCBhcmcsCiAJCQkJCQkJICAgICBhcmdsZW4sIElPVl9TRVQpOwotCQkJaWYgKGJjbWVycm9yICE9IEJDTUVfVU5TVVBQT1JURUQpCisJCQlpZiAoYmNtZXJyb3IgIT0gLUVOT1RTVVBQKQogCQkJCWJyZWFrOwogCiAJCQkvKiBpZiBzdGlsbCBub3QgZm91bmQsIHRyeSBidXMgbW9kdWxlICovCkBAIC00OTMsNyArNDkzLDcgQEAKIAkJfQogCiAJZGVmYXVsdDoKLQkJYmNtZXJyb3IgPSBCQ01FX1VOU1VQUE9SVEVEOworCQliY21lcnJvciA9IC1FTk9UU1VQUDsKIAl9CiAKIAlyZXR1cm4gYmNtZXJyb3I7CkBAIC01ODYsNiArNTg2LDggQEAKIAl9CiAKIAlESERfRVZFTlQoKCJFVkVOVDogJXMsIGV2ZW50IElEID0gJWRcbiIsIGV2ZW50X25hbWUsIGV2ZW50X3R5cGUpKTsKKwlESERfRVZFTlQoKCJmbGFncyAweCUwNHgsIHN0YXR1cyAlZCwgcmVhc29uICVkLCBhdXRoX3R5cGUgJWQgTUFDICVzXG4iLAorCQkJCWZsYWdzLCBzdGF0dXMsIHJlYXNvbiwgYXV0aF90eXBlLCBlYWJ1ZikpOwogCiAJaWYgKGZsYWdzICYgV0xDX0VWRU5UX01TR19MSU5LKQogCQlsaW5rID0gdHJ1ZTsKQEAgLTgxNSwxNCArODE3LDE0IEBACiAKIAlpZiAobWVtY21wKEJSQ01fT1VJLCAmcHZ0X2RhdGEtPmJjbV9oZHIub3VpWzBdLCBET1QxMV9PVUlfTEVOKSkgewogCQlESERfRVJST1IoKCIlczogbWlzbWF0Y2hlZCBPVUksIGJhaWxpbmdcbiIsIF9fZnVuY19fKSk7Ci0JCXJldHVybiBCQ01FX0VSUk9SOworCQlyZXR1cm4gLUVCQURFOwogCX0KIAogCS8qIEJSQ00gZXZlbnQgcGt0IG1heSBiZSB1bmFsaWduZWQgLSB1c2UgeHh4X3VhIHRvIGxvYWQgdXNlcl9zdWJ0eXBlLiAqLwogCWlmIChnZXRfdW5hbGlnbmVkX2JlMTYoJnB2dF9kYXRhLT5iY21faGRyLnVzcl9zdWJ0eXBlKSAhPQogCSAgICBCQ01JTENQX0JDTV9TVUJUWVBFX0VWRU5UKSB7CiAJCURIRF9FUlJPUigoIiVzOiBtaXNtYXRjaGVkIHN1YnR5cGUsIGJhaWxpbmdcbiIsIF9fZnVuY19fKSk7Ci0JCXJldHVybiBCQ01FX0VSUk9SOworCQlyZXR1cm4gLUVCQURFOwogCX0KIAogCSpkYXRhX3B0ciA9ICZwdnRfZGF0YVsxXTsKQEAgLTkwMiw3ICs5MDQsNyBAQAogCXdsX3Nob3dfaG9zdF9ldmVudChldmVudCwgZXZlbnRfZGF0YSk7CiAjZW5kaWYJCQkJLyogU0hPV19FVkVOVFMgKi8KIAotCXJldHVybiBCQ01FX09LOworCXJldHVybiAwOwogfQogCiAvKiBDb252ZXJ0IHVzZXIncyBpbnB1dCBpbiBoZXggcGF0dGVybiB0byBieXRlLXNpemUgbWFzayAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy9kaGRfbGludXguYyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvZGhkX2xpbnV4LmMKaW5kZXggZGQwMzc1Ny4uZjM1NmM1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy9kaGRfbGludXguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL2RoZF9saW51eC5jCkBAIC0xNjYsNyArMTY2LDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1BNX1NMRUVQKQogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KLXZvbGF0aWxlIGJvb2wgZGhkX21tY19zdXNwZW5kID0gZmFsc2U7CithdG9taWNfdCBkaGRfbW1jX3N1c3BlbmQ7CiBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChkaGRfZHBjX3dhaXQpOwogI2VuZGlmCS8qICBkZWZpbmVkKENPTkZJR19QTV9TTEVFUCkgKi8KIApAQCAtMzI1LDcgKzMyNSw3IEBACiB1aW50IGRoZF9yYWRpb191cCA9IDE7CiAKIC8qIE5ldHdvcmsgaW50ZWZhY2UgbmFtZSAqLwotY2hhciBpZmFjZV9uYW1lW0lGTkFNU0laXTsKK2NoYXIgaWZhY2VfbmFtZVtJRk5BTVNJWl0gPSAid2xhbiI7CiBtb2R1bGVfcGFyYW1fc3RyaW5nKGlmYWNlX25hbWUsIGlmYWNlX25hbWUsIElGTkFNU0laLCAwKTsKIAogLyogVGhlIGZvbGxvd2luZyBhcmUgc3BlY2lmaWMgdG8gdGhlIFNESU8gZG9uZ2xlICovCkBAIC0zODUsMTAgKzM4NSw2IEBACiAjZGVmaW5lIERIRF9DT01QSUxFRAogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19XSVJFTEVTU19FWFQpCi1zdHJ1Y3QgaXdfc3RhdGlzdGljcyAqZGhkX2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLSNlbmRpZgkJCQkvKiBkZWZpbmVkKENPTkZJR19XSVJFTEVTU19FWFQpICovCi0KIHN0YXRpYyB2b2lkIGRoZF9kcGModW5zaWduZWQgbG9uZyBkYXRhKTsKIC8qIGZvcndhcmQgZGVjbCAqLwogZXh0ZXJuIGludCBkaGRfd2FpdF9wZW5kODAyMXgoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC00MTEsMTEgKzQwNywxMSBAQAogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBQTV9ISUJFUk5BVElPTl9QUkVQQVJFOgogCWNhc2UgUE1fU1VTUEVORF9QUkVQQVJFOgotCQlkaGRfbW1jX3N1c3BlbmQgPSB0cnVlOworCQlhdG9taWNfc2V0KCZkaGRfbW1jX3N1c3BlbmQsIHRydWUpOwogCQlyZXR1cm4gTk9USUZZX09LOwogCWNhc2UgUE1fUE9TVF9ISUJFUk5BVElPTjoKIAljYXNlIFBNX1BPU1RfU1VTUEVORDoKLQkJZGhkX21tY19zdXNwZW5kID0gZmFsc2U7CisJCWF0b21pY19zZXQoJmRoZF9tbWNfc3VzcGVuZCwgZmFsc2UpOwogCQlyZXR1cm4gTk9USUZZX09LOwogCX0KIAlyZXR1cm4gMDsKQEAgLTE2MTksNTEgKzE2MTUsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgczE2IGxpbnV4YmNtZXJyb3JtYXBbXSA9IHsgMCwJLyogMCAqLwotCS1FSU5WQUwsCQkvKiBCQ01FX0VSUk9SICovCi0JLUVJTlZBTCwJCS8qIEJDTUVfQkFEQVJHICovCi0JLUVJTlZBTCwJCS8qIEJDTUVfQkFET1BUSU9OICovCi0JLUVJTlZBTCwJCS8qIEJDTUVfTk9UVVAgKi8KLQktRUlOVkFMLAkJLyogQkNNRV9OT1RET1dOICovCi0JLUVJTlZBTCwJCS8qIEJDTUVfTk9UQVAgKi8KLQktRUlOVkFMLAkJLyogQkNNRV9OT1RTVEEgKi8KLQktRUlOVkFMLAkJLyogQkNNRV9CQURLRVlJRFggKi8KLQktRUlOVkFMLAkJLyogQkNNRV9SQURJT09GRiAqLwotCS1FSU5WQUwsCQkvKiBCQ01FX05PVEJBTkRMT0NLRUQgKi8KLQktRUlOVkFMLAkJLyogQkNNRV9OT0NMSyAqLwotCS1FSU5WQUwsCQkvKiBCQ01FX0JBRFJBVEVTRVQgKi8KLQktRUlOVkFMLAkJLyogQkNNRV9CQURCQU5EICovCi0JLUUyQklHLAkJCS8qIEJDTUVfQlVGVE9PU0hPUlQgKi8KLQktRTJCSUcsCQkJLyogQkNNRV9CVUZUT09MT05HICovCi0JLUVCVVNZLAkJCS8qIEJDTUVfQlVTWSAqLwotCS1FSU5WQUwsCQkvKiBCQ01FX05PVEFTU09DSUFURUQgKi8KLQktRUlOVkFMLAkJLyogQkNNRV9CQURTU0lETEVOICovCi0JLUVJTlZBTCwJCS8qIEJDTUVfT1VUT0ZSQU5HRUNIQU4gKi8KLQktRUlOVkFMLAkJLyogQkNNRV9CQURDSEFOICovCi0JLUVGQVVMVCwJCS8qIEJDTUVfQkFEQUREUiAqLwotCS1FTk9NRU0sCQkvKiBCQ01FX05PUkVTT1VSQ0UgKi8KLQktRU9QTk9UU1VQUCwJCS8qIEJDTUVfVU5TVVBQT1JURUQgKi8KLQktRU1TR1NJWkUsCQkvKiBCQ01FX0JBRExFTkdUSCAqLwotCS1FSU5WQUwsCQkvKiBCQ01FX05PVFJFQURZICovCi0JLUVQRVJNLAkJCS8qIEJDTUVfTk9UUEVSTUlUVEVEICovCi0JLUVOT01FTSwJCS8qIEJDTUVfTk9NRU0gKi8KLQktRUlOVkFMLAkJLyogQkNNRV9BU1NPQ0lBVEVEICovCi0JLUVSQU5HRSwJCS8qIEJDTUVfUkFOR0UgKi8KLQktRUlOVkFMLAkJLyogQkNNRV9OT1RGT1VORCAqLwotCS1FSU5WQUwsCQkvKiBCQ01FX1dNRV9OT1RfRU5BQkxFRCAqLwotCS1FSU5WQUwsCQkvKiBCQ01FX1RTUEVDX05PVEZPVU5EICovCi0JLUVJTlZBTCwJCS8qIEJDTUVfQUNNX05PVFNVUFBPUlRFRCAqLwotCS1FSU5WQUwsCQkvKiBCQ01FX05PVF9XTUVfQVNTT0NJQVRJT04gKi8KLQktRUlPLAkJCS8qIEJDTUVfU0RJT19FUlJPUiAqLwotCS1FTk9ERVYsCQkvKiBCQ01FX0RPTkdMRV9ET1dOICovCi0JLUVJTlZBTCwJCS8qIEJDTUVfVkVSU0lPTiAqLwotCS1FSU8sCQkJLyogQkNNRV9UWEZBSUwgKi8KLQktRUlPLAkJCS8qIEJDTUVfUlhGQUlMICovCi0JLUVJTlZBTCwJCS8qIEJDTUVfTk9ERVZJQ0UgKi8KLQktRUlOVkFMLAkJLyogQkNNRV9OTU9ERV9ESVNBQkxFRCAqLwotCS1FTk9EQVRBLAkJLyogQkNNRV9OT05SRVNJREVOVCAqLwotfTsKLQogc3RhdGljIGludCBkaGRfaW9jdGxfZW50cnkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCiB7CiAJZGhkX2luZm9fdCAqZGhkID0gKihkaGRfaW5mb190ICoqKSBuZXRkZXZfcHJpdihuZXQpOwpAQCAtMTY5OSw3ICsxNjUwLDcgQEAKIAogCS8qIENvcHkgdGhlIGlvYyBjb250cm9sIHN0cnVjdHVyZSBwYXJ0IG9mIGlvY3RsIHJlcXVlc3QgKi8KIAlpZiAoY29weV9mcm9tX3VzZXIoJmlvYywgaWZyLT5pZnJfZGF0YSwgc2l6ZW9mKHdsX2lvY3RsX3QpKSkgewotCQliY21lcnJvciA9IC1CQ01FX0JBREFERFI7CisJCWJjbWVycm9yID0gLUVJTlZBTDsKIAkJZ290byBkb25lOwogCX0KIApAQCAtMTcxNSwxMSArMTY2NiwxMSBAQAogCQl7CiAJCQlidWYgPSBrbWFsbG9jKGJ1ZmxlbiwgR0ZQX0FUT01JQyk7CiAJCQlpZiAoIWJ1ZikgewotCQkJCWJjbWVycm9yID0gLUJDTUVfTk9NRU07CisJCQkJYmNtZXJyb3IgPSAtRU5PTUVNOwogCQkJCWdvdG8gZG9uZTsKIAkJCX0KIAkJCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIGlvYy5idWYsIGJ1ZmxlbikpIHsKLQkJCQliY21lcnJvciA9IC1CQ01FX0JBREFERFI7CisJCQkJYmNtZXJyb3IgPSAtRUlOVkFMOwogCQkJCWdvdG8gZG9uZTsKIAkJCX0KIAkJfQpAQCAtMTcyOCwxMiArMTY3OSwxMiBAQAogCS8qIFRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiB3bCBhbmQgZGhkIHJlYWQgNCBtb3JlIGJ5ZXMgKi8KIAlpZiAoKGNvcHlfZnJvbV91c2VyKCZkcml2ZXIsIChjaGFyICopaWZyLT5pZnJfZGF0YSArIHNpemVvZih3bF9pb2N0bF90KSwKIAkJCSAgICBzaXplb2YodWludCkpICE9IDApKSB7Ci0JCWJjbWVycm9yID0gLUJDTUVfQkFEQUREUjsKKwkJYmNtZXJyb3IgPSAtRUlOVkFMOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKSB7Ci0JCWJjbWVycm9yID0gLUJDTUVfRVBFUk07CisJCWJjbWVycm9yID0gLUVQRVJNOwogCQlnb3RvIGRvbmU7CiAJfQogCkBAIC0xNzQ4LDEyICsxNjk5LDEyIEBACiAJLyogc2VuZCB0byBkb25nbGUgKG11c3QgYmUgdXAsIGFuZCB3bCkgKi8KIAlpZiAoKGRoZC0+cHViLmJ1c3N0YXRlICE9IERIRF9CVVNfREFUQSkpIHsKIAkJREhEX0VSUk9SKCgiJXMgRE9OR0xFX0RPV04sX19mdW5jX19cbiIsIF9fZnVuY19fKSk7Ci0JCWJjbWVycm9yID0gQkNNRV9ET05HTEVfRE9XTjsKKwkJYmNtZXJyb3IgPSAtRUlPOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJaWYgKCFkaGQtPnB1Yi5pc3dsKSB7Ci0JCWJjbWVycm9yID0gQkNNRV9ET05HTEVfRE9XTjsKKwkJYmNtZXJyb3IgPSAtRUlPOwogCQlnb3RvIGRvbmU7CiAJfQogCkBAIC0xNzgxLDEwICsxNzMyLDggQEAKIAogCWlmIChiY21lcnJvciA+IDApCiAJCWJjbWVycm9yID0gMDsKLQllbHNlIGlmIChiY21lcnJvciA8IEJDTUVfTEFTVCkKLQkJYmNtZXJyb3IgPSBCQ01FX0VSUk9SOwogCi0JcmV0dXJuIGxpbnV4YmNtZXJyb3JtYXBbLWJjbWVycm9yXTsKKwlyZXR1cm4gYmNtZXJyb3I7CiB9CiAKIHN0YXRpYyBpbnQgZGhkX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKQEAgLTE5OTcsNyArMTk0Niw2IEBACiAJCQlzdHJjcHkoZndfcGF0aCwgd2xfY2ZnODAyMTFfZ2V0X2Z3bmFtZSgpKTsKIAkJCXN0cmNweShudl9wYXRoLCB3bF9jZmc4MDIxMV9nZXRfbnZyYW1uYW1lKCkpOwogCQl9Ci0JCXdsX2NmZzgwMjExX2RiZ19sZXZlbChEQkdfQ0ZHODAyMTFfR0VUKCkpOwogCX0KIAogCS8qIFNldCB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgKi8KQEAgLTIwNjIsNyArMjAxMCw5IEBACiAJZ19idXMgPSBidXM7CiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19QTV9TTEVFUCkKLQlyZWdpc3Rlcl9wbV9ub3RpZmllcigmZGhkX3NsZWVwX3BtX25vdGlmaWVyKTsKKwlhdG9taWNfc2V0KCZkaGRfbW1jX3N1c3BlbmQsIGZhbHNlKTsKKwlpZiAoIUlTX0NGRzgwMjExX0ZBVk9SSVRFKCkpCisJCXJlZ2lzdGVyX3BtX25vdGlmaWVyKCZkaGRfc2xlZXBfcG1fbm90aWZpZXIpOwogI2VuZGlmCS8qIGRlZmluZWQoQ09ORklHX1BNX1NMRUVQKSAqLwogCS8qICYmIGRlZmluZWQoREhEX0dQTCkgKi8KIAkvKiBJbml0IGxvY2sgc3VzcGVuZCB0byBwcmV2ZW50IGtlcm5lbCBnb2luZyB0byBzdXNwZW5kICovCkBAIC0yMjUyLDE4ICsyMjAyLDYgQEAKIAluZXQtPmhhcmRfaGVhZGVyX2xlbiA9IEVUSF9ITEVOICsgZGhkLT5wdWIuaGRybGVuOwogCW5ldC0+ZXRodG9vbF9vcHMgPSAmZGhkX2V0aHRvb2xfb3BzOwogCi0jaWYgZGVmaW5lZChDT05GSUdfV0lSRUxFU1NfRVhUKQotCWlmICghSVNfQ0ZHODAyMTFfRkFWT1JJVEUoKSkgewotI2lmIFdJUkVMRVNTX0VYVCA8IDE5Ci0JCW5ldC0+Z2V0X3dpcmVsZXNzX3N0YXRzID0gZGhkX2dldF93aXJlbGVzc19zdGF0czsKLSNlbmRpZgkJCQkvKiBXSVJFTEVTU19FWFQgPCAxOSAqLwotI2lmIFdJUkVMRVNTX0VYVCA+IDEyCi0JCW5ldC0+d2lyZWxlc3NfaGFuZGxlcnMgPQotCQkgICAgKHN0cnVjdCBpd19oYW5kbGVyX2RlZiAqKSZ3bF9pd19oYW5kbGVyX2RlZjsKLSNlbmRpZgkJCQkvKiBXSVJFTEVTU19FWFQgPiAxMiAqLwotCX0KLSNlbmRpZgkJCQkvKiBkZWZpbmVkKENPTkZJR19XSVJFTEVTU19FWFQpICovCi0KIAlkaGQtPnB1Yi5yeHN6ID0gbmV0LT5tdHUgKyBuZXQtPmhhcmRfaGVhZGVyX2xlbiArIGRoZC0+cHViLmhkcmxlbjsKIAogCW1lbWNweShuZXQtPmRldl9hZGRyLCB0ZW1wX2FkZHIsIEVUSF9BTEVOKTsKQEAgLTIyODAsNyArMjIxOCw3IEBACiAKIGZhaWw6CiAJbmV0LT5uZXRkZXZfb3BzID0gTlVMTDsKLQlyZXR1cm4gQkNNRV9FUlJPUjsKKwlyZXR1cm4gLUVCQURFOwogfQogCiB2b2lkIGRoZF9idXNfZGV0YWNoKGRoZF9wdWJfdCAqZGhkcCkKQEAgLTIzNjgsNyArMjMwNiw4IEBACiAJCQkJd2xfY2ZnODAyMTFfZGV0YWNoKCk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19QTV9TTEVFUCkKLQkJCXVucmVnaXN0ZXJfcG1fbm90aWZpZXIoJmRoZF9zbGVlcF9wbV9ub3RpZmllcik7CisJCQlpZiAoIUlTX0NGRzgwMjExX0ZBVk9SSVRFKCkpCisJCQkJdW5yZWdpc3Rlcl9wbV9ub3RpZmllcigmZGhkX3NsZWVwX3BtX25vdGlmaWVyKTsKICNlbmRpZgkvKiBkZWZpbmVkKENPTkZJR19QTV9TTEVFUCkgKi8KIAkJCS8qICYmIGRlZmluZWQoREhEX0dQTCkgKi8KIAkJCWZyZWVfbmV0ZGV2KGlmcC0+bmV0KTsKQEAgLTI2NzAsMjEgKzI2MDksNiBAQAogCWRoZF9vc19zZHVubG9jayhwdWIpOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfV0lSRUxFU1NfRVhUKQotc3RydWN0IGl3X3N0YXRpc3RpY3MgKmRoZF9nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlpbnQgcmVzID0gMDsKLQlkaGRfaW5mb190ICpkaGQgPSAqKGRoZF9pbmZvX3QgKiopIG5ldGRldl9wcml2KGRldik7Ci0KLQlyZXMgPSB3bF9pd19nZXRfd2lyZWxlc3Nfc3RhdHMoZGV2LCAmZGhkLT5pdy53c3RhdHMpOwotCi0JaWYgKHJlcyA9PSAwKQotCQlyZXR1cm4gJmRoZC0+aXcud3N0YXRzOwotCWVsc2UKLQkJcmV0dXJuIE5VTEw7Ci19Ci0jZW5kaWYJLyogZGVmaW5lZChDT05GSUdfV0lSRUxFU1NfRVhUKSAqLwotCiBzdGF0aWMgaW50CiBkaGRfd2xfaG9zdF9ldmVudChkaGRfaW5mb190ICpkaGQsIGludCAqaWZpZHgsIHZvaWQgKnBrdGRhdGEsCiAJCSAgd2xfZXZlbnRfbXNnX3QgKmV2ZW50LCB2b2lkICoqZGF0YSkKQEAgLTI2OTQsNyArMjYxOCw3IEBACiAJQVNTRVJUKGRoZCAhPSBOVUxMKTsKIAogCWJjbWVycm9yID0gd2xfaG9zdF9ldmVudChkaGQsIGlmaWR4LCBwa3RkYXRhLCBldmVudCwgZGF0YSk7Ci0JaWYgKGJjbWVycm9yICE9IEJDTUVfT0spCisJaWYgKGJjbWVycm9yICE9IDApCiAJCXJldHVybiBiY21lcnJvcjsKIAogI2lmIGRlZmluZWQoQ09ORklHX1dJUkVMRVNTX0VYVCkKQEAgLTI4OTQsNiArMjgxOCwxMyBAQAogCXJldHVybiBwZW5kOwogfQogCit2b2lkIHdsX29zX3dkX3RpbWVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1aW50IHdkdGljaykKK3sKKwlkaGRfaW5mb190ICpkaGQgPSAqKGRoZF9pbmZvX3QgKiopbmV0ZGV2X3ByaXYobmRldik7CisKKwlkaGRfb3Nfd2RfdGltZXIoJmRoZC0+cHViLCB3ZHRpY2spOworfQorCiAjaWZkZWYgREhEX0RFQlVHCiBpbnQgd3JpdGVfdG9fZmlsZShkaGRfcHViX3QgKmRoZCwgdTggKmJ1ZiwgaW50IHNpemUpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL2RoZF9zZGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL2RoZF9zZGlvLmMKaW5kZXggNDY0ZjUyYS4uYTcxYzZmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy9kaGRfc2Rpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvZGhkX3NkaW8uYwpAQCAtMTUsOCArMTUsMTEgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxiY21kZWZzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcHJpbnRrLmg+CisjaW5jbHVkZSA8bGludXgvcGNpX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGJjbWRlZnMuaD4KICNpbmNsdWRlIDxiY21zZGguaD4KIAogI2lmZGVmIEJDTUVNQkVESU1BR0UKQEAgLTI3LDggKzMwLDYgQEAKICNpbmNsdWRlIDxiY211dGlscy5oPgogI2luY2x1ZGUgPGJjbWRldnMuaD4KIAotI2luY2x1ZGUgPHNpdXRpbHMuaD4KLSNpbmNsdWRlIDxobmRwbXUuaD4KICNpbmNsdWRlIDxobmRzb2MuaD4KICNpZmRlZiBESERfREVCVUcKICNpbmNsdWRlIDxobmRydGVfYXJtdHJhcC5oPgpAQCAtNTEsNyArNTIsNyBAQAogI2luY2x1ZGUgPGRoZF9kYmcuaD4KICNpbmNsdWRlIDxkaGRpb2N0bC5oPgogI2luY2x1ZGUgPHNkaW92YXIuaD4KLSNpbmNsdWRlIDxzaXV0aWxzX3ByaXYuaD4KKyNpbmNsdWRlIDxiY21jaGlwLmg+CiAKICNpZm5kZWYgREhEU0RJT19NRU1fRFVNUF9GTkFNRQogI2RlZmluZSBESERTRElPX01FTV9EVU1QX0ZOQU1FICAgICAgICAgIm1lbV9kdW1wIgpAQCAtMTM2LDEyICsxMzcsNiBAQAogLyogRmxhZ3MgZm9yIFNESCBjYWxscyAqLwogI2RlZmluZSBGMlNZTkMJKFNESU9fUkVRXzRCWVRFIHwgU0RJT19SRVFfRklYRUQpCiAKLS8qIFBhY2tldCBmcmVlIGFwcGxpY2FibGUgdW5jb25kaXRpb25hbGx5IGZvciBzZGlvIGFuZCBzZHNwaS4gIENvbmRpdGlvbmFsIGlmCi0gKiBidWZwb29sIHdhcyBwcmVzZW50IGZvciBnc3BpIGJ1cy4KLSAqLwotI2RlZmluZSBQS1RGUkVFMigpCQlpZiAoKGJ1cy0+YnVzICE9IFNQSV9CVVMpIHx8IGJ1cy0+dXNlYnVmcG9vbCkgXAotCQkJCQkJCXBrdF9idWZfZnJlZV9za2IocGt0KTsKLQogLyoKICAqIENvbnZlcnNpb24gb2YgODAyLjFEIHByaW9yaXR5IHRvIHByZWNlZGVuY2UgbGV2ZWwKICAqLwpAQCAtMTY1LDEyICsxNjAsMjggQEAKIH0gZGhkX2NvbnNvbGVfdDsKICNlbmRpZgkJCQkvKiBESERfREVCVUcgKi8KIAorLyogbWlzYyBjaGlwIGluZm8gbmVlZGVkIGJ5IHNvbWUgb2YgdGhlIHJvdXRpbmVzICovCitzdHJ1Y3QgY2hpcF9pbmZvIHsKKwl1MzIgY2hpcDsKKwl1MzIgY2hpcHJldjsKKwl1MzIgY2Njb3JlYmFzZTsKKwl1MzIgY2NyZXY7CisJdTMyIGNjY2FwczsKKwl1MzIgYnVzY29yZWJhc2U7CisJdTMyIGJ1c2NvcmVyZXY7CisJdTMyIGJ1c2NvcmV0eXBlOworCXUzMiByYW1jb3JlYmFzZTsKKwl1MzIgYXJtY29yZWJhc2U7CisJdTMyIHBtdXJldjsKKwl1MzIgcmFtc2l6ZTsKK307CisKIC8qIFByaXZhdGUgZGF0YSBmb3IgU0RJTyBidXMgaW50ZXJhY3Rpb24gKi8KIHR5cGVkZWYgc3RydWN0IGRoZF9idXMgewogCWRoZF9wdWJfdCAqZGhkOwogCiAJYmNtc2RoX2luZm9fdCAqc2RoOwkvKiBIYW5kbGUgZm9yIEJDTVNESCBjYWxscyAqLwotCXNpX3QgKnNpaDsJCS8qIEhhbmRsZSBmb3IgU0kgY2FsbHMgKi8KKwlzdHJ1Y3QgY2hpcF9pbmZvICpjaTsJLyogQ2hpcCBpbmZvIHN0cnVjdCAqLwogCWNoYXIgKnZhcnM7CQkvKiBWYXJpYWJsZXMgKGZyb20gQ0lTIGFuZC9vciBvdGhlcikgKi8KIAl1aW50IHZhcnN6OwkJLyogU2l6ZSBvZiB2YXJpYWJsZXMgYnVmZmVyICovCiAJdTMyIHNiYWRkcjsJCS8qIEN1cnJlbnQgU0Igd2luZG93IHBvaW50ZXIgKC0xLCBpbnZhbGlkKSAqLwpAQCAtNDIxLDggKzQzMiw2IEBACiAKICNkZWZpbmUgSE9TVElOVE1BU0sJCShJX0hNQl9TV19NQVNLIHwgSV9DSElQQUNUSVZFKQogCi0jZGVmaW5lIEdTUElfUFI1NTE1MF9CQUlMT1VUCi0KICNpZmRlZiBTRFRFU1QKIHN0YXRpYyB2b2lkIGRoZHNkaW9fdGVzdHJjdihkaGRfYnVzX3QgKmJ1cywgdm9pZCAqcGt0LCB1aW50IHNlcSk7CiBzdGF0aWMgdm9pZCBkaGRzZGlvX3NkdGVzdF9zZXQoZGhkX2J1c190ICpidXMsIGJvb2wgc3RhcnQpOwpAQCAtNDQ3LDEwICs0NTYsNiBAQAogc3RhdGljIHVpbnQgcHJvY2Vzc19udnJhbV92YXJzKGNoYXIgKnZhcmJ1ZiwgdWludCBsZW4pOwogCiBzdGF0aWMgdm9pZCBkaGRfZG9uZ2xlX3NldG1lbXNpemUoc3RydWN0IGRoZF9idXMgKmJ1cywgaW50IG1lbV9zaXplKTsKLXN0YXRpYyBpbnQgZGhkX2JjbXNkaF9yZWN2X2J1ZihkaGRfYnVzX3QgKmJ1cywgdTMyIGFkZHIsIHVpbnQgZm4sCi0JCQkgICAgICAgdWludCBmbGFncywgdTggKmJ1ZiwgdWludCBuYnl0ZXMsCi0JCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnBrdCwgYmNtc2RoX2NtcGx0X2ZuX3QgY29tcGxldGUsCi0JCQkgICAgICAgdm9pZCAqaGFuZGxlKTsKIHN0YXRpYyBpbnQgZGhkX2JjbXNkaF9zZW5kX2J1ZihkaGRfYnVzX3QgKmJ1cywgdTMyIGFkZHIsIHVpbnQgZm4sCiAJCQkgICAgICAgdWludCBmbGFncywgdTggKmJ1ZiwgdWludCBuYnl0ZXMsCiAJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnBrdCwgYmNtc2RoX2NtcGx0X2ZuX3QgY29tcGxldGUsCkBAIC00NjQsNiArNDY5LDIzIEBACiAjaWZkZWYgQkNNRU1CRURJTUFHRQogc3RhdGljIGludCBkaGRzZGlvX2Rvd25sb2FkX2NvZGVfYXJyYXkoc3RydWN0IGRoZF9idXMgKmJ1cyk7CiAjZW5kaWYKK3N0YXRpYyB2b2lkIGRoZHNkaW9fY2hpcF9kaXNhYmxlY29yZShiY21zZGhfaW5mb190ICpzZGgsIHUzMiBjb3JlYmFzZSk7CitzdGF0aWMgaW50IGRoZHNkaW9fY2hpcF9hdHRhY2goc3RydWN0IGRoZF9idXMgKmJ1cywgdm9pZCAqcmVncyk7CitzdGF0aWMgdm9pZCBkaGRzZGlvX2NoaXBfcmVzZXRjb3JlKGJjbXNkaF9pbmZvX3QgKnNkaCwgdTMyIGNvcmViYXNlKTsKK3N0YXRpYyB2b2lkIGRoZHNkaW9fc2Rpb2RfZHJpdmVfc3RyZW5ndGhfaW5pdChzdHJ1Y3QgZGhkX2J1cyAqYnVzLAorCQkJCQl1MzIgZHJpdmVzdHJlbmd0aCk7CitzdGF0aWMgdm9pZCBkaGRzZGlvX2NoaXBfZGV0YWNoKHN0cnVjdCBkaGRfYnVzICpidXMpOworCisvKiBQYWNrZXQgZnJlZSBhcHBsaWNhYmxlIHVuY29uZGl0aW9uYWxseSBmb3Igc2RpbyBhbmQgc2RzcGkuCisgKiBDb25kaXRpb25hbCBpZiBidWZwb29sIHdhcyBwcmVzZW50IGZvciBnc3BpIGJ1cy4KKyAqLworc3RhdGljIHZvaWQgZGhkc2Rpb19wa3RmcmVlMihkaGRfYnVzX3QgKmJ1cywgc3RydWN0IHNrX2J1ZmYgKnBrdCkKK3sKKwlkaGRfb3Nfc2Rsb2NrX3J4cShidXMtPmRoZCk7CisJaWYgKChidXMtPmJ1cyAhPSBTUElfQlVTKSB8fCBidXMtPnVzZWJ1ZnBvb2wpCisJCWJjbV9wa3RfYnVmX2ZyZWVfc2tiKHBrdCk7CisJZGhkX29zX3NkdW5sb2NrX3J4cShidXMtPmRoZCk7Cit9CiAKIHN0YXRpYyB2b2lkIGRoZF9kb25nbGVfc2V0bWVtc2l6ZShzdHJ1Y3QgZGhkX2J1cyAqYnVzLCBpbnQgbWVtX3NpemUpCiB7CkBAIC01MTEsOCArNTMzLDggQEAKIAkJY2xrcmVxID0KIAkJICAgIGJ1cy0+YWxwX29ubHkgPyBTQlNESU9fQUxQX0FWQUlMX1JFUSA6IFNCU0RJT19IVF9BVkFJTF9SRVE7CiAKLQkJaWYgKChidXMtPnNpaC0+Y2hpcCA9PSBCQ000MzI5X0NISVBfSUQpCi0JCSAgICAmJiAoYnVzLT5zaWgtPmNoaXByZXYgPT0gMCkpCisJCWlmICgoYnVzLT5jaS0+Y2hpcCA9PSBCQ000MzI5X0NISVBfSUQpCisJCSAgICAmJiAoYnVzLT5jaS0+Y2hpcHJldiA9PSAwKSkKIAkJCWNsa3JlcSB8PSBTQlNESU9fRk9SQ0VfQUxQOwogCiAJCWJjbXNkaF9jZmdfd3JpdGUoc2RoLCBTRElPX0ZVTkNfMSwgU0JTRElPX0ZVTkMxX0NISVBDTEtDU1IsCkBAIC01MjAsMTEgKzU0MiwxMSBAQAogCQlpZiAoZXJyKSB7CiAJCQlESERfRVJST1IoKCIlczogSFQgQXZhaWwgcmVxdWVzdCBlcnJvcjogJWRcbiIsCiAJCQkJICAgX19mdW5jX18sIGVycikpOwotCQkJcmV0dXJuIEJDTUVfRVJST1I7CisJCQlyZXR1cm4gLUVCQURFOwogCQl9CiAKLQkJaWYgKHBlbmRvayAmJiAoKGJ1cy0+c2loLT5idXNjb3JldHlwZSA9PSBQQ01DSUFfQ09SRV9JRCkKLQkJCSAgICAgICAmJiAoYnVzLT5zaWgtPmJ1c2NvcmVyZXYgPT0gOSkpKSB7CisJCWlmIChwZW5kb2sgJiYgKChidXMtPmNpLT5idXNjb3JldHlwZSA9PSBQQ01DSUFfQ09SRV9JRCkKKwkJCSAgICAgICAmJiAoYnVzLT5jaS0+YnVzY29yZXJldiA9PSA5KSkpIHsKIAkJCXUzMiBkdW1teSwgcmV0cmllczsKIAkJCVJfU0RSRUcoZHVtbXksICZidXMtPnJlZ3MtPmNsb2NrY3Rsc3RhdHVzLCByZXRyaWVzKTsKIAkJfQpAQCAtNTM2LDcgKzU1OCw3IEBACiAJCWlmIChlcnIpIHsKIAkJCURIRF9FUlJPUigoIiVzOiBIVCBBdmFpbCByZWFkIGVycm9yOiAlZFxuIiwKIAkJCQkgICBfX2Z1bmNfXywgZXJyKSk7Ci0JCQlyZXR1cm4gQkNNRV9FUlJPUjsKKwkJCXJldHVybiAtRUJBREU7CiAJCX0KIAogCQkvKiBHbyB0byBwZW5kaW5nIGFuZCBhd2FpdCBpbnRlcnJ1cHQgaWYgYXBwcm9wcmlhdGUgKi8KQEAgLTU0OCw3ICs1NzAsNyBAQAogCQkJaWYgKGVycikgewogCQkJCURIRF9FUlJPUigoIiVzOiBEZXZjdGwgZXJyb3Igc2V0dGluZyBDQTogJWRcbiIsCiAJCQkJCV9fZnVuY19fLCBlcnIpKTsKLQkJCQlyZXR1cm4gQkNNRV9FUlJPUjsKKwkJCQlyZXR1cm4gLUVCQURFOwogCQkJfQogCiAJCQlkZXZjdGwgfD0gU0JTRElPX0RFVkNUTF9DQV9JTlRfT05MWTsKQEAgLTU1Nyw3ICs1NzksNyBAQAogCQkJREhEX0lORk8oKCJDTEtDVEw6IHNldCBQRU5ESU5HXG4iKSk7CiAJCQlidXMtPmNsa3N0YXRlID0gQ0xLX1BFTkRJTkc7CiAKLQkJCXJldHVybiBCQ01FX09LOworCQkJcmV0dXJuIDA7CiAJCX0gZWxzZSBpZiAoYnVzLT5jbGtzdGF0ZSA9PSBDTEtfUEVORElORykgewogCQkJLyogQ2FuY2VsIENBLW9ubHkgaW50ZXJydXB0IGZpbHRlciAqLwogCQkJZGV2Y3RsID0KQEAgLTU4MSwxMiArNjAzLDEyIEBACiAJCWlmIChlcnIpIHsKIAkJCURIRF9FUlJPUigoIiVzOiBIVCBBdmFpbCByZXF1ZXN0IGVycm9yOiAlZFxuIiwKIAkJCQkgICBfX2Z1bmNfXywgZXJyKSk7Ci0JCQlyZXR1cm4gQkNNRV9FUlJPUjsKKwkJCXJldHVybiAtRUJBREU7CiAJCX0KIAkJaWYgKCFTQlNESU9fQ0xLQVYoY2xrY3RsLCBidXMtPmFscF9vbmx5KSkgewogCQkJREhEX0VSUk9SKCgiJXM6IEhUIEF2YWlsIHRpbWVvdXQgKCVkKTogY2xrY3RsIDB4JTAyeFxuIiwKIAkJCQkgICBfX2Z1bmNfXywgUE1VX01BWF9UUkFOU0lUSU9OX0RMWSwgY2xrY3RsKSk7Ci0JCQlyZXR1cm4gQkNNRV9FUlJPUjsKKwkJCXJldHVybiAtRUJBREU7CiAJCX0KIAogCQkvKiBNYXJrIGNsb2NrIGF2YWlsYWJsZSAqLwpAQCAtNjMwLDEwICs2NTIsMTAgQEAKIAkJaWYgKGVycikgewogCQkJREhEX0VSUk9SKCgiJXM6IEZhaWxlZCBhY2Nlc3MgdHVybmluZyBjbG9jayBvZmY6ICVkXG4iLAogCQkJCSAgIF9fZnVuY19fLCBlcnIpKTsKLQkJCXJldHVybiBCQ01FX0VSUk9SOworCQkJcmV0dXJuIC1FQkFERTsKIAkJfQogCX0KLQlyZXR1cm4gQkNNRV9PSzsKKwlyZXR1cm4gMDsKIH0KIAogLyogQ2hhbmdlIGlkbGUvYWN0aXZlIFNEIHN0YXRlICovCkBAIC02NTMsNyArNjc1LDcgQEAKIAkJCWlmIChlcnIpIHsKIAkJCQlESERfRVJST1IoKCIlczogZXJyb3IgZW5hYmxpbmcgc2RfY2xvY2s6ICVkXG4iLAogCQkJCQkgICBfX2Z1bmNfXywgZXJyKSk7Ci0JCQkJcmV0dXJuIEJDTUVfRVJST1I7CisJCQkJcmV0dXJuIC1FQkFERTsKIAkJCX0KIAogCQkJaW92YWx1ZSA9IGJ1cy0+c2RfbW9kZTsKQEAgLTY2Miw3ICs2ODQsNyBAQAogCQkJaWYgKGVycikgewogCQkJCURIRF9FUlJPUigoIiVzOiBlcnJvciBjaGFuZ2luZyBzZF9tb2RlOiAlZFxuIiwKIAkJCQkJICAgX19mdW5jX18sIGVycikpOwotCQkJCXJldHVybiBCQ01FX0VSUk9SOworCQkJCXJldHVybiAtRUJBREU7CiAJCQl9CiAJCX0gZWxzZSBpZiAoYnVzLT5pZGxlY2xvY2sgIT0gREhEX0lETEVfQUNUSVZFKSB7CiAJCQkvKiBSZXN0b3JlIGNsb2NrIHNwZWVkICovCkBAIC02NzIsNyArNjk0LDcgQEAKIAkJCWlmIChlcnIpIHsKIAkJCQlESERfRVJST1IoKCIlczogZXJyb3IgcmVzdG9yaW5nIHNkX2Rpdmlzb3I6ICVkXG4iLAogCQkJCQlfX2Z1bmNfXywgZXJyKSk7Ci0JCQkJcmV0dXJuIEJDTUVfRVJST1I7CisJCQkJcmV0dXJuIC1FQkFERTsKIAkJCX0KIAkJfQogCQlidXMtPmNsa3N0YXRlID0gQ0xLX1NET05MWTsKQEAgLTY4MSw3ICs3MDMsNyBAQAogCQlpZiAoKGJ1cy0+c2RfZGl2aXNvciA9PSAtMSkgfHwgKGJ1cy0+c2RfbW9kZSA9PSAtMSkpIHsKIAkJCURIRF9UUkFDRSgoIiVzOiBjYW4ndCBpZGxlIGNsb2NrLCBkaXZpc29yICVkIG1vZGUgJWRcbiIsCiAJCQkJICAgX19mdW5jX18sIGJ1cy0+c2RfZGl2aXNvciwgYnVzLT5zZF9tb2RlKSk7Ci0JCQlyZXR1cm4gQkNNRV9FUlJPUjsKKwkJCXJldHVybiAtRUJBREU7CiAJCX0KIAkJaWYgKGJ1cy0+aWRsZWNsb2NrID09IERIRF9JRExFX1NUT1ApIHsKIAkJCWlmIChzZDFpZGxlKSB7CkBAIC02OTQsNyArNzE2LDcgQEAKIAkJCQlpZiAoZXJyKSB7CiAJCQkJCURIRF9FUlJPUigoIiVzOiBlcnJvciBjaGFuZ2luZyBzZF9jbG9jazogJWRcbiIsCiAJCQkJCQlfX2Z1bmNfXywgZXJyKSk7Ci0JCQkJCXJldHVybiBCQ01FX0VSUk9SOworCQkJCQlyZXR1cm4gLUVCQURFOwogCQkJCX0KIAkJCX0KIApAQCAtNzA0LDcgKzcyNiw3IEBACiAJCQlpZiAoZXJyKSB7CiAJCQkJREhEX0VSUk9SKCgiJXM6IGVycm9yIGRpc2FibGluZyBzZF9jbG9jazogJWRcbiIsCiAJCQkJCSAgIF9fZnVuY19fLCBlcnIpKTsKLQkJCQlyZXR1cm4gQkNNRV9FUlJPUjsKKwkJCQlyZXR1cm4gLUVCQURFOwogCQkJfQogCQl9IGVsc2UgaWYgKGJ1cy0+aWRsZWNsb2NrICE9IERIRF9JRExFX0FDVElWRSkgewogCQkJLyogU2V0IGRpdmlzb3IgdG8gaWRsZSB2YWx1ZSAqLwpAQCAtNzE0LDEzICs3MzYsMTMgQEAKIAkJCWlmIChlcnIpIHsKIAkJCQlESERfRVJST1IoKCIlczogZXJyb3IgY2hhbmdpbmcgc2RfZGl2aXNvcjogJWRcbiIsCiAJCQkJCV9fZnVuY19fLCBlcnIpKTsKLQkJCQlyZXR1cm4gQkNNRV9FUlJPUjsKKwkJCQlyZXR1cm4gLUVCQURFOwogCQkJfQogCQl9CiAJCWJ1cy0+Y2xrc3RhdGUgPSBDTEtfTk9ORTsKIAl9CiAKLQlyZXR1cm4gQkNNRV9PSzsKKwlyZXR1cm4gMDsKIH0KIAogLyogVHJhbnNpdGlvbiBTRCBhbmQgYmFja3BsYW5lIGNsb2NrIHJlYWRpbmVzcyAqLwpAQCAtNzM4LDcgKzc2MCw3IEBACiAJCQlkaGRfb3Nfd2RfdGltZXIoYnVzLT5kaGQsIGRoZF93YXRjaGRvZ19tcyk7CiAJCQlidXMtPmFjdGl2aXR5ID0gdHJ1ZTsKIAkJfQotCQlyZXR1cm4gQkNNRV9PSzsKKwkJcmV0dXJuIDA7CiAJfQogCiAJc3dpdGNoICh0YXJnZXQpIHsKQEAgLTc3Nyw3ICs3OTksNyBAQAogCURIRF9JTkZPKCgiZGhkc2Rpb19jbGtjdGw6ICVkIC0+ICVkXG4iLCBvbGRzdGF0ZSwgYnVzLT5jbGtzdGF0ZSkpOwogI2VuZGlmCQkJCS8qIERIRF9ERUJVRyAqLwogCi0JcmV0dXJuIEJDTUVfT0s7CisJcmV0dXJuIDA7CiB9CiAKIGludCBkaGRzZGlvX2J1c3NsZWVwKGRoZF9idXNfdCAqYnVzLCBib29sIHNsZWVwKQpAQCAtNzkyLDEzICs4MTQsMTMgQEAKIAogCS8qIERvbmUgaWYgd2UncmUgYWxyZWFkeSBpbiB0aGUgcmVxdWVzdGVkIHN0YXRlICovCiAJaWYgKHNsZWVwID09IGJ1cy0+c2xlZXBpbmcpCi0JCXJldHVybiBCQ01FX09LOworCQlyZXR1cm4gMDsKIAogCS8qIEdvaW5nIHRvIHNsZWVwOiBzZXQgdGhlIGFsYXJtIGFuZCB0dXJuIG9mZiB0aGUgbGlnaHRzLi4uICovCiAJaWYgKHNsZWVwKSB7CiAJCS8qIERvbid0IHNsZWVwIGlmIHNvbWV0aGluZyBpcyBwZW5kaW5nICovCiAJCWlmIChidXMtPmRwY19zY2hlZCB8fCBidXMtPnJ4c2tpcCB8fCBwa3RxX2xlbigmYnVzLT50eHEpKQotCQkJcmV0dXJuIEJDTUVfQlVTWTsKKwkJCXJldHVybiAtRUJVU1k7CiAKIAkJLyogRGlzYWJsZSBTRElPIGludGVycnVwdHMgKG5vIGxvbmdlciBpbnRlcmVzdGVkKSAqLwogCQliY21zZGhfaW50cl9kaXNhYmxlKGJ1cy0+c2RoKTsKQEAgLTgxOCw4ICs4NDAsOCBAQAogCQkJCSBTQlNESU9fRk9SQ0VfSFdfQ0xLUkVRX09GRiwgTlVMTCk7CiAKIAkJLyogSXNvbGF0ZSB0aGUgYnVzICovCi0JCWlmIChidXMtPnNpaC0+Y2hpcCAhPSBCQ000MzI5X0NISVBfSUQKLQkJICAgICYmIGJ1cy0+c2loLT5jaGlwICE9IEJDTTQzMTlfQ0hJUF9JRCkgeworCQlpZiAoYnVzLT5jaS0+Y2hpcCAhPSBCQ000MzI5X0NISVBfSUQKKwkJICAgICYmIGJ1cy0+Y2ktPmNoaXAgIT0gQkNNNDMxOV9DSElQX0lEKSB7CiAJCQliY21zZGhfY2ZnX3dyaXRlKHNkaCwgU0RJT19GVU5DXzEsIFNCU0RJT19ERVZJQ0VfQ1RMLAogCQkJCQkgU0JTRElPX0RFVkNUTF9QQURTX0lTTywgTlVMTCk7CiAJCX0KQEAgLTgzNSw4ICs4NTcsOCBAQAogCiAJCS8qIEZvcmNlIHBhZCBpc29sYXRpb24gb2ZmIGlmIHBvc3NpYmxlCiAJCQkgKGluIGNhc2UgcG93ZXIgbmV2ZXIgdG9nZ2xlZCkgKi8KLQkJaWYgKChidXMtPnNpaC0+YnVzY29yZXR5cGUgPT0gUENNQ0lBX0NPUkVfSUQpCi0JCSAgICAmJiAoYnVzLT5zaWgtPmJ1c2NvcmVyZXYgPj0gMTApKQorCQlpZiAoKGJ1cy0+Y2ktPmJ1c2NvcmV0eXBlID09IFBDTUNJQV9DT1JFX0lEKQorCQkgICAgJiYgKGJ1cy0+Y2ktPmJ1c2NvcmVyZXYgPj0gMTApKQogCQkJYmNtc2RoX2NmZ193cml0ZShzZGgsIFNESU9fRlVOQ18xLCBTQlNESU9fREVWSUNFX0NUTCwgMCwKIAkJCQkJIE5VTEwpOwogCkBAIC04NjQsNyArODg2LDcgQEAKIAkJfQogCX0KIAotCXJldHVybiBCQ01FX09LOworCXJldHVybiAwOwogfQogCiAjaWYgZGVmaW5lZChPT0JfSU5UUl9PTkxZKQpAQCAtOTIyLDcgKzk0NCw3IEBACiAJc2RoID0gYnVzLT5zZGg7CiAKIAlpZiAoYnVzLT5kaGQtPmRvbmdsZV9yZXNldCkgewotCQlyZXQgPSBCQ01FX05PVFJFQURZOworCQlyZXQgPSAtRVBFUk07CiAJCWdvdG8gZG9uZTsKIAl9CiAKQEAgLTkzNSwxOSArOTU3LDE5IEBACiAJCQlESERfSU5GTygoIiVzOiBpbnN1ZmZpY2llbnQgaGVhZHJvb20gJWQgZm9yICVkIHBhZFxuIiwKIAkJCQkgIF9fZnVuY19fLCBza2JfaGVhZHJvb20ocGt0KSwgcGFkKSk7CiAJCQlidXMtPmRoZC0+dHhfcmVhbGxvYysrOwotCQkJbmV3ID0gcGt0X2J1Zl9nZXRfc2tiKHBrdC0+bGVuICsgREhEX1NEQUxJR04pOworCQkJbmV3ID0gYmNtX3BrdF9idWZfZ2V0X3NrYihwa3QtPmxlbiArIERIRF9TREFMSUdOKTsKIAkJCWlmICghbmV3KSB7CiAJCQkJREhEX0VSUk9SKCgiJXM6IGNvdWxkbid0IGFsbG9jYXRlIG5ldyAlZC1ieXRlICIKIAkJCQkJInBhY2tldFxuIiwKIAkJCQkJX19mdW5jX18sIHBrdC0+bGVuICsgREhEX1NEQUxJR04pKTsKLQkJCQlyZXQgPSBCQ01FX05PTUVNOworCQkJCXJldCA9IC1FTk9NRU07CiAJCQkJZ290byBkb25lOwogCQkJfQogCiAJCQlQS1RBTElHTihuZXcsIHBrdC0+bGVuLCBESERfU0RBTElHTik7CiAJCQltZW1jcHkobmV3LT5kYXRhLCBwa3QtPmRhdGEsIHBrdC0+bGVuKTsKIAkJCWlmIChmcmVlX3BrdCkKLQkJCQlwa3RfYnVmX2ZyZWVfc2tiKHBrdCk7CisJCQkJYmNtX3BrdF9idWZfZnJlZV9za2IocGt0KTsKIAkJCS8qIGZyZWUgdGhlIHBrdCBpZiBjYW5uZWQgb25lIGlzIG5vdCB1c2VkICovCiAJCQlmcmVlX3BrdCA9IHRydWU7CiAJCQlwa3QgPSBuZXc7CkBAIC05ODMsOSArMTAwNSwxMiBAQAogCWlmIChESERfQllURVNfT04oKSAmJgogCSAgICAoKChESERfQ1RMX09OKCkgJiYgKGNoYW4gPT0gU0RQQ01fQ09OVFJPTF9DSEFOTkVMKSkgfHwKIAkgICAgICAoREhEX0RBVEFfT04oKSAmJiAoY2hhbiAhPSBTRFBDTV9DT05UUk9MX0NIQU5ORUwpKSkpKSB7Ci0JCXByaGV4KCJUeCBGcmFtZSIsIGZyYW1lLCBsZW4pOworCQlwcmludGsoS0VSTl9ERUJVRyAiVHggRnJhbWU6XG4iKTsKKwkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoIiIsIERVTVBfUFJFRklYX09GRlNFVCwgZnJhbWUsIGxlbik7CiAJfSBlbHNlIGlmIChESERfSERSU19PTigpKSB7Ci0JCXByaGV4KCJUeEhkciIsIGZyYW1lLCBtaW5fdCh1MTYsIGxlbiwgMTYpKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlR4SGRyOlxuIik7CisJCXByaW50X2hleF9kdW1wX2J5dGVzKCIiLCBEVU1QX1BSRUZJWF9PRkZTRVQsCisJCQkJICAgICBmcmFtZSwgbWluX3QodTE2LCBsZW4sIDE2KSk7CiAJfQogI2VuZGlmCiAKQEAgLTEwMTksNyArMTA0NCw3IEBACiAJCSAgICBkaGRfYmNtc2RoX3NlbmRfYnVmKGJ1cywgYmNtc2RoX2N1cl9zYndhZChzZGgpLCBTRElPX0ZVTkNfMiwKIAkJCQkJRjJTWU5DLCBmcmFtZSwgbGVuLCBwa3QsIE5VTEwsIE5VTEwpOwogCQlidXMtPmYydHhkYXRhKys7Ci0JCUFTU0VSVChyZXQgIT0gQkNNRV9QRU5ESU5HKTsKKwkJQVNTRVJUKHJldCAhPSAtQkNNRV9QRU5ESU5HKTsKIAogCQlpZiAocmV0IDwgMCkgewogCQkJLyogT24gZmFpbHVyZSwgYWJvcnQgdGhlIGNvbW1hbmQKQEAgLTEwNjEsMTQgKzEwODYsMTQgQEAKIAlkaGRfb3Nfc2Rsb2NrKGJ1cy0+ZGhkKTsKIAogCWlmIChmcmVlX3BrdCkKLQkJcGt0X2J1Zl9mcmVlX3NrYihwa3QpOworCQliY21fcGt0X2J1Zl9mcmVlX3NrYihwa3QpOwogCiAJcmV0dXJuIHJldDsKIH0KIAogaW50IGRoZF9idXNfdHhkYXRhKHN0cnVjdCBkaGRfYnVzICpidXMsIHN0cnVjdCBza19idWZmICpwa3QpCiB7Ci0JaW50IHJldCA9IEJDTUVfRVJST1I7CisJaW50IHJldCA9IC1FQkFERTsKIAl1aW50IGRhdGFsZW4sIHByZWM7CiAKIAlESERfVFJBQ0UoKCIlczogRW50ZXJcbiIsIF9fZnVuY19fKSk7CkBAIC0xMTEwLDExICsxMTM1LDExIEBACiAJCWlmIChkaGRfcHJlY19lbnEoYnVzLT5kaGQsICZidXMtPnR4cSwgcGt0LCBwcmVjKSA9PSBmYWxzZSkgewogCQkJc2tiX3B1bGwocGt0LCBTRFBDTV9IRFJMRU4pOwogCQkJZGhkX3R4Y29tcGxldGUoYnVzLT5kaGQsIHBrdCwgZmFsc2UpOwotCQkJcGt0X2J1Zl9mcmVlX3NrYihwa3QpOworCQkJYmNtX3BrdF9idWZfZnJlZV9za2IocGt0KTsKIAkJCURIRF9FUlJPUigoIiVzOiBvdXQgb2YgYnVzLT50eHEgISEhXG4iLCBfX2Z1bmNfXykpOwotCQkJcmV0ID0gQkNNRV9OT1JFU09VUkNFOworCQkJcmV0ID0gLUVOT1NSOwogCQl9IGVsc2UgewotCQkJcmV0ID0gQkNNRV9PSzsKKwkJCXJldCA9IDA7CiAJCX0KIAkJZGhkX29zX3NkdW5sb2NrX3R4cShidXMtPmRoZCk7CiAKQEAgLTExODMsNyArMTIwOCw3IEBACiAJLyogU2VuZCBmcmFtZXMgdW50aWwgdGhlIGxpbWl0IG9yIHNvbWUgb3RoZXIgZXZlbnQgKi8KIAlmb3IgKGNudCA9IDA7IChjbnQgPCBtYXhmcmFtZXMpICYmIERBVEFPSyhidXMpOyBjbnQrKykgewogCQlkaGRfb3Nfc2Rsb2NrX3R4cShidXMtPmRoZCk7Ci0JCXBrdCA9IHBrdHFfbWRlcSgmYnVzLT50eHEsIHR4X3ByZWNfbWFwLCAmcHJlY19vdXQpOworCQlwa3QgPSBiY21fcGt0cV9tZGVxKCZidXMtPnR4cSwgdHhfcHJlY19tYXAsICZwcmVjX291dCk7CiAJCWlmIChwa3QgPT0gTlVMTCkgewogCQkJZGhkX29zX3NkdW5sb2NrX3R4cShidXMtPmRoZCk7CiAJCQlicmVhazsKQEAgLTEzMTMsMTAgKzEzMzgsMTUgQEAKIAogCWlmIChyZXQgPT0gLTEpIHsKICNpZmRlZiBESERfREVCVUcKLQkJaWYgKERIRF9CWVRFU19PTigpICYmIERIRF9DVExfT04oKSkKLQkJCXByaGV4KCJUeCBGcmFtZSIsIGZyYW1lLCBsZW4pOwotCQllbHNlIGlmIChESERfSERSU19PTigpKQotCQkJcHJoZXgoIlR4SGRyIiwgZnJhbWUsIG1pbl90KHUxNiwgbGVuLCAxNikpOworCQlpZiAoREhEX0JZVEVTX09OKCkgJiYgREhEX0NUTF9PTigpKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiVHggRnJhbWU6XG4iKTsKKwkJCXByaW50X2hleF9kdW1wX2J5dGVzKCIiLCBEVU1QX1BSRUZJWF9PRkZTRVQsCisJCQkJCSAgICAgZnJhbWUsIGxlbik7CisJCX0gZWxzZSBpZiAoREhEX0hEUlNfT04oKSkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIlR4SGRyOlxuIik7CisJCQlwcmludF9oZXhfZHVtcF9ieXRlcygiIiwgRFVNUF9QUkVGSVhfT0ZGU0VULAorCQkJCQkgICAgIGZyYW1lLCBtaW5fdCh1MTYsIGxlbiwgMTYpKTsKKwkJfQogI2VuZGlmCiAKIAkJZG8gewpAQCAtMTMyNiw3ICsxMzU2LDcgQEAKIAkJCQkJCVNESU9fRlVOQ18yLCBGMlNZTkMsIGZyYW1lLCBsZW4sCiAJCQkJCQlOVUxMLCBOVUxMLCBOVUxMKTsKIAotCQkJQVNTRVJUKHJldCAhPSBCQ01FX1BFTkRJTkcpOworCQkJQVNTRVJUKHJldCAhPSAtQkNNRV9QRU5ESU5HKTsKIAogCQkJaWYgKHJldCA8IDApIHsKIAkJCQkvKiBPbiBmYWlsdXJlLCBhYm9ydCB0aGUgY29tbWFuZCBhbmQKQEAgLTE2NjksNyArMTY5OSw3IEBACiAKIAltZW1jcHkoJnBrdGdlbiwgYXJnLCBzaXplb2YocGt0Z2VuKSk7CiAJaWYgKHBrdGdlbi52ZXJzaW9uICE9IERIRF9QS1RHRU5fVkVSU0lPTikKLQkJcmV0dXJuIEJDTUVfQkFEQVJHOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCW9sZGNudCA9IGJ1cy0+cGt0Z2VuX2NvdW50OwogCW9sZG1vZGUgPSBidXMtPnBrdGdlbl9tb2RlOwpAQCAtMTc3OCw3ICsxODA4LDcgQEAKIAlpZiAoYWRkciA9PSAwIHx8ICgofmFkZHIgPj4gMTYpICYgMHhmZmZmKSA9PSAoYWRkciAmIDB4ZmZmZikpIHsKIAkJREhEX0VSUk9SKCgiJXM6IGFkZHJlc3MgKDB4JTA4eCkgb2Ygc2RwY21fc2hhcmVkIGludmFsaWRcbiIsCiAJCQkgICBfX2Z1bmNfXywgYWRkcikpOwotCQlyZXR1cm4gQkNNRV9FUlJPUjsKKwkJcmV0dXJuIC1FQkFERTsKIAl9CiAKIAkvKiBSZWFkIGhuZHJ0ZV9zaGFyZWQgc3RydWN0dXJlICovCkBAIC0xODAxLDEwICsxODMxLDEwIEBACiAJCQkgICAiaXMgZGlmZmVyZW50IHRoYW4gc2RwY21fc2hhcmVkIHZlcnNpb24gJWQgaW4gZG9uZ2xlXG4iLAogCQkJICAgX19mdW5jX18sIFNEUENNX1NIQVJFRF9WRVJTSU9OLAogCQkJICAgc2gtPmZsYWdzICYgU0RQQ01fU0hBUkVEX1ZFUlNJT05fTUFTSykpOwotCQlyZXR1cm4gQkNNRV9FUlJPUjsKKwkJcmV0dXJuIC1FQkFERTsKIAl9CiAKLQlyZXR1cm4gQkNNRV9PSzsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBkaGRzZGlvX2NoZWNrZGllZChkaGRfYnVzX3QgKmJ1cywgdTggKmRhdGEsIHVpbnQgc2l6ZSkKQEAgLTE4MzAsNyArMTg2MCw3IEBACiAJCWlmIChtYnVmZmVyID09IE5VTEwpIHsKIAkJCURIRF9FUlJPUigoIiVzOiBrbWFsbG9jKCVkKSBmYWlsZWRcbiIsIF9fZnVuY19fLAogCQkJCSAgIG1zaXplKSk7Ci0JCQliY21lcnJvciA9IEJDTUVfTk9NRU07CisJCQliY21lcnJvciA9IC1FTk9NRU07CiAJCQlnb3RvIGRvbmU7CiAJCX0KIAl9CkBAIC0xODM4LDcgKzE4NjgsNyBAQAogCXN0ciA9IGttYWxsb2MobWF4c3RybGVuLCBHRlBfQVRPTUlDKTsKIAlpZiAoc3RyID09IE5VTEwpIHsKIAkJREhEX0VSUk9SKCgiJXM6IGttYWxsb2MoJWQpIGZhaWxlZFxuIiwgX19mdW5jX18sIG1heHN0cmxlbikpOwotCQliY21lcnJvciA9IEJDTUVfTk9NRU07CisJCWJjbWVycm9yID0gLUVOT01FTTsKIAkJZ290byBkb25lOwogCX0KIApAQCAtMjAwNywxOSArMjAzNywxOSBAQAogCQljLT5idWZzaXplID0gbGUzMl90b19jcHUoYy0+bG9nLmJ1Zl9zaXplKTsKIAkJYy0+YnVmID0ga21hbGxvYyhjLT5idWZzaXplLCBHRlBfQVRPTUlDKTsKIAkJaWYgKGMtPmJ1ZiA9PSBOVUxMKQotCQkJcmV0dXJuIEJDTUVfTk9NRU07CisJCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlpZHggPSBsZTMyX3RvX2NwdShjLT5sb2cuaWR4KTsKIAogCS8qIFByb3RlY3QgYWdhaW5zdCBjb3JydXB0IHZhbHVlICovCiAJaWYgKGlkeCA+IGMtPmJ1ZnNpemUpCi0JCXJldHVybiBCQ01FX0VSUk9SOworCQlyZXR1cm4gLUVCQURFOwogCiAJLyogU2tpcCByZWFkaW5nIHRoZSBjb25zb2xlIGJ1ZmZlciBpZiB0aGUgaW5kZXggcG9pbnRlcgogCSBoYXMgbm90IG1vdmVkICovCiAJaWYgKGlkeCA9PSBjLT5sYXN0KQotCQlyZXR1cm4gQkNNRV9PSzsKKwkJcmV0dXJuIDA7CiAKIAkvKiBSZWFkIHRoZSBjb25zb2xlIGJ1ZmZlciAqLwogCWFkZHIgPSBsZTMyX3RvX2NwdShjLT5sb2cuYnVmKTsKQEAgLTIwNTcsMjMgKzIwODcsMjMgQEAKIAl9CiBicmVhazI6CiAKLQlyZXR1cm4gQkNNRV9PSzsKKwlyZXR1cm4gMDsKIH0KICNlbmRpZgkJCQkvKiBESERfREVCVUcgKi8KIAogaW50IGRoZHNkaW9fZG93bmxvYWR2YXJzKGRoZF9idXNfdCAqYnVzLCB2b2lkICphcmcsIGludCBsZW4pCiB7Ci0JaW50IGJjbWVycm9yID0gQkNNRV9PSzsKKwlpbnQgYmNtZXJyb3IgPSAwOwogCiAJREhEX1RSQUNFKCgiJXM6IEVudGVyXG4iLCBfX2Z1bmNfXykpOwogCiAJLyogQmFzaWMgc2FuaXR5IGNoZWNrcyAqLwogCWlmIChidXMtPmRoZC0+dXApIHsKLQkJYmNtZXJyb3IgPSBCQ01FX05PVERPV047CisJCWJjbWVycm9yID0gLUVJU0NPTk47CiAJCWdvdG8gZXJyOwogCX0KIAlpZiAoIWxlbikgewotCQliY21lcnJvciA9IEJDTUVfQlVGVE9PU0hPUlQ7CisJCWJjbWVycm9yID0gLUVPVkVSRkxPVzsKIAkJZ290byBlcnI7CiAJfQogCkBAIC0yMDgzLDcgKzIxMTMsNyBAQAogCWJ1cy0+dmFycyA9IGttYWxsb2MobGVuLCBHRlBfQVRPTUlDKTsKIAlidXMtPnZhcnN6ID0gYnVzLT52YXJzID8gbGVuIDogMDsKIAlpZiAoYnVzLT52YXJzID09IE5VTEwpIHsKLQkJYmNtZXJyb3IgPSBCQ01FX05PTUVNOworCQliY21lcnJvciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyOwogCX0KIApAQCAtMjEyMiw3ICsyMTUyLDcgQEAKIAkvKiBDaGVjayBpZiBkb25nbGUgaXMgaW4gcmVzZXQuIElmIHNvLCBvbmx5IGFsbG93IERFVlJFU0VUIGlvdmFycyAqLwogCWlmIChidXMtPmRoZC0+ZG9uZ2xlX3Jlc2V0ICYmICEoYWN0aW9uaWQgPT0gSU9WX1NWQUwoSU9WX0RFVlJFU0VUKSB8fAogCQkJCQlhY3Rpb25pZCA9PSBJT1ZfR1ZBTChJT1ZfREVWUkVTRVQpKSkgewotCQliY21lcnJvciA9IEJDTUVfTk9UUkVBRFk7CisJCWJjbWVycm9yID0gLUVQRVJNOwogCQlnb3RvIGV4aXQ7CiAJfQogCkBAIC0yMTgyLDcgKzIyMTIsNyBAQAogCiAJY2FzZSBJT1ZfU1ZBTChJT1ZfSURMRVRJTUUpOgogCQlpZiAoKGludF92YWwgPCAwKSAmJiAoaW50X3ZhbCAhPSBESERfSURMRV9JTU1FRElBVEUpKQotCQkJYmNtZXJyb3IgPSBCQ01FX0JBREFSRzsKKwkJCWJjbWVycm9yID0gLUVJTlZBTDsKIAkJZWxzZQogCQkJYnVzLT5pZGxldGltZSA9IGludF92YWw7CiAJCWJyZWFrOwpAQCAtMjIyOCw3ICsyMjU4LDcgQEAKIAkJCQkiMHglMDh4IHNpemUgJWQgZHNpemUgJWRcbiIsCiAJCQkJX19mdW5jX18sIChzZXQgPyAic2V0IiA6ICJnZXQiKSwKIAkJCQlhZGRyZXNzLCBzaXplLCBkc2l6ZSkpOwotCQkJCWJjbWVycm9yID0gQkNNRV9CQURBUkc7CisJCQkJYmNtZXJyb3IgPSAtRUlOVkFMOwogCQkJCWJyZWFrOwogCQkJfQogCkBAIC0yMjQzLDcgKzIyNzMsNyBAQAogCQkJCURIRF9FUlJPUigoIiVzOiByYW1zaXplIDB4JTA4eCBkb2Vzbid0IGhhdmUgJWQgIgogCQkJCSJieXRlcyBhdCAweCUwOHhcbiIsCiAJCQkJX19mdW5jX18sIGJ1cy0+b3JpZ19yYW1zaXplLCBzaXplLCBhZGRyZXNzKSk7Ci0JCQkJYmNtZXJyb3IgPSBCQ01FX0JBREFSRzsKKwkJCQliY21lcnJvciA9IC1FSU5WQUw7CiAJCQkJYnJlYWs7CiAJCQl9CiAKQEAgLTIyNzEsNyArMjMwMSw3IEBACiAKIAljYXNlIElPVl9TVkFMKElPVl9TRElPRF9EUklWRSk6CiAJCWRoZF9zZGlvZF9kcml2ZV9zdHJlbmd0aCA9IGludF92YWw7Ci0JCXNpX3NkaW9kX2RyaXZlX3N0cmVuZ3RoX2luaXQoYnVzLT5zaWgsCisJCWRoZHNkaW9fc2Rpb2RfZHJpdmVfc3RyZW5ndGhfaW5pdChidXMsCiAJCQkJCSAgICAgZGhkX3NkaW9kX2RyaXZlX3N0cmVuZ3RoKTsKIAkJYnJlYWs7CiAKQEAgLTIzMDEsNyArMjMzMSw3IEBACiAKIAljYXNlIElPVl9TVkFMKElPVl9TRFJYQ0hBSU4pOgogCQlpZiAoYm9vbF92YWwgJiYgIWJ1cy0+c2RfcnhjaGFpbikKLQkJCWJjbWVycm9yID0gQkNNRV9VTlNVUFBPUlRFRDsKKwkJCWJjbWVycm9yID0gLUVOT1RTVVBQOwogCQllbHNlCiAJCQlidXMtPnVzZV9yeGNoYWluID0gYm9vbF92YWw7CiAJCWJyZWFrOwpAQCAtMjMyNCw3ICsyMzU0LDcgQEAKIAkJaWYgKGJ1cy0+dmFyc3ogPCAodWludCkgbGVuKQogCQkJbWVtY3B5KGFyZywgYnVzLT52YXJzLCBidXMtPnZhcnN6KTsKIAkJZWxzZQotCQkJYmNtZXJyb3IgPSBCQ01FX0JVRlRPT1NIT1JUOworCQkJYmNtZXJyb3IgPSAtRU9WRVJGTE9XOwogCQlicmVhazsKICNlbmRpZgkJCQkvKiBESERfREVCVUcgKi8KIApAQCAtMjM0MCw3ICsyMzcwLDcgQEAKIAkJCXNpemUgPSBzZF9wdHItPmZ1bmM7CiAJCQlpbnRfdmFsID0gKHMzMikgYmNtc2RoX3JlZ19yZWFkKGJ1cy0+c2RoLCBhZGRyLCBzaXplKTsKIAkJCWlmIChiY21zZGhfcmVnZmFpbChidXMtPnNkaCkpCi0JCQkJYmNtZXJyb3IgPSBCQ01FX1NESU9fRVJST1I7CisJCQkJYmNtZXJyb3IgPSAtRUlPOwogCQkJbWVtY3B5KGFyZywgJmludF92YWwsIHNpemVvZihzMzIpKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0yMzU2LDcgKzIzODYsNyBAQAogCQkJc2l6ZSA9IHNkX3B0ci0+ZnVuYzsKIAkJCWJjbXNkaF9yZWdfd3JpdGUoYnVzLT5zZGgsIGFkZHIsIHNpemUsIHNkX3B0ci0+dmFsdWUpOwogCQkJaWYgKGJjbXNkaF9yZWdmYWlsKGJ1cy0+c2RoKSkKLQkJCQliY21lcnJvciA9IEJDTUVfU0RJT19FUlJPUjsKKwkJCQliY21lcnJvciA9IC1FSU87CiAJCQlicmVhazsKIAkJfQogCkBAIC0yMzczLDcgKzI0MDMsNyBAQAogCQkJc2l6ZSA9IHNkcmVnLmZ1bmM7CiAJCQlpbnRfdmFsID0gKHMzMikgYmNtc2RoX3JlZ19yZWFkKGJ1cy0+c2RoLCBhZGRyLCBzaXplKTsKIAkJCWlmIChiY21zZGhfcmVnZmFpbChidXMtPnNkaCkpCi0JCQkJYmNtZXJyb3IgPSBCQ01FX1NESU9fRVJST1I7CisJCQkJYmNtZXJyb3IgPSAtRUlPOwogCQkJbWVtY3B5KGFyZywgJmludF92YWwsIHNpemVvZihzMzIpKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0yMzg5LDcgKzI0MTksNyBAQAogCQkJc2l6ZSA9IHNkcmVnLmZ1bmM7CiAJCQliY21zZGhfcmVnX3dyaXRlKGJ1cy0+c2RoLCBhZGRyLCBzaXplLCBzZHJlZy52YWx1ZSk7CiAJCQlpZiAoYmNtc2RoX3JlZ2ZhaWwoYnVzLT5zZGgpKQotCQkJCWJjbWVycm9yID0gQkNNRV9TRElPX0VSUk9SOworCQkJCWJjbWVycm9yID0gLUVJTzsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTI0ODgsNyArMjUxOCw3IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJYmNtZXJyb3IgPSBCQ01FX1VOU1VQUE9SVEVEOworCQliY21lcnJvciA9IC1FTk9UU1VQUDsKIAkJYnJlYWs7CiAJfQogCkBAIC0yNTI1LDcgKzI1NTUsNyBAQAogCWlmIChidXMtPnZhcnMpIHsKIAkJdmJ1ZmZlciA9IGt6YWxsb2ModmFyc2l6ZSwgR0ZQX0FUT01JQyk7CiAJCWlmICghdmJ1ZmZlcikKLQkJCXJldHVybiBCQ01FX05PTUVNOworCQkJcmV0dXJuIC1FTk9NRU07CiAKIAkJbWVtY3B5KHZidWZmZXIsIGJ1cy0+dmFycywgYnVzLT52YXJzeik7CiAKQEAgLTI1MzcsNyArMjU2Nyw3IEBACiAJCURIRF9JTkZPKCgiQ29tcGFyZSBOVlJBTSBkbCAmIHVsOyB2YXJzaXplPSVkXG4iLCB2YXJzaXplKSk7CiAJCW52cmFtX3VsYXJyYXkgPSBrbWFsbG9jKHZhcnNpemUsIEdGUF9BVE9NSUMpOwogCQlpZiAoIW52cmFtX3VsYXJyYXkpCi0JCQlyZXR1cm4gQkNNRV9OT01FTTsKKwkJCXJldHVybiAtRU5PTUVNOwogCiAJCS8qIFVwbG9hZCBpbWFnZSB0byB2ZXJpZnkgZG93bmxvYWRlZCBjb250ZW50cy4gKi8KIAkJbWVtc2V0KG52cmFtX3VsYXJyYXksIDB4YWEsIHZhcnNpemUpOwpAQCAtMjU5Niw0MiArMjYyNiwxOCBAQAogc3RhdGljIGludCBkaGRzZGlvX2Rvd25sb2FkX3N0YXRlKGRoZF9idXNfdCAqYnVzLCBib29sIGVudGVyKQogewogCXVpbnQgcmV0cmllczsKKwl1MzIgcmVnZGF0YTsKIAlpbnQgYmNtZXJyb3IgPSAwOwogCiAJLyogVG8gZW50ZXIgZG93bmxvYWQgc3RhdGUsIGRpc2FibGUgQVJNIGFuZCByZXNldCBTT0NSQU0uCiAJICogVG8gZXhpdCBkb3dubG9hZCBzdGF0ZSwgc2ltcGx5IHJlc2V0IEFSTSAoZGVmYXVsdCBpcyBSQU0gYm9vdCkuCiAJICovCiAJaWYgKGVudGVyKSB7Ci0KIAkJYnVzLT5hbHBfb25seSA9IHRydWU7CiAKLQkJaWYgKCEoc2lfc2V0Y29yZShidXMtPnNpaCwgQVJNN1NfQ09SRV9JRCwgMCkpICYmCi0JCSAgICAhKHNpX3NldGNvcmUoYnVzLT5zaWgsIEFSTUNNM19DT1JFX0lELCAwKSkpIHsKLQkJCURIRF9FUlJPUigoIiVzOiBGYWlsZWQgdG8gZmluZCBBUk0gY29yZSFcbiIsIF9fZnVuY19fKSk7Ci0JCQliY21lcnJvciA9IEJDTUVfRVJST1I7Ci0JCQlnb3RvIGZhaWw7Ci0JCX0KKwkJZGhkc2Rpb19jaGlwX2Rpc2FibGVjb3JlKGJ1cy0+c2RoLCBidXMtPmNpLT5hcm1jb3JlYmFzZSk7CiAKLQkJc2lfY29yZV9kaXNhYmxlKGJ1cy0+c2loLCAwKTsKLQkJaWYgKGJjbXNkaF9yZWdmYWlsKGJ1cy0+c2RoKSkgewotCQkJYmNtZXJyb3IgPSBCQ01FX1NESU9fRVJST1I7Ci0JCQlnb3RvIGZhaWw7Ci0JCX0KLQotCQlpZiAoIShzaV9zZXRjb3JlKGJ1cy0+c2loLCBTT0NSQU1fQ09SRV9JRCwgMCkpKSB7Ci0JCQlESERfRVJST1IoKCIlczogRmFpbGVkIHRvIGZpbmQgU09DUkFNIGNvcmUhXG4iLAotCQkJCSAgIF9fZnVuY19fKSk7Ci0JCQliY21lcnJvciA9IEJDTUVfRVJST1I7Ci0JCQlnb3RvIGZhaWw7Ci0JCX0KLQotCQlzaV9jb3JlX3Jlc2V0KGJ1cy0+c2loLCAwLCAwKTsKLQkJaWYgKGJjbXNkaF9yZWdmYWlsKGJ1cy0+c2RoKSkgewotCQkJREhEX0VSUk9SKCgiJXM6IEZhaWx1cmUgdHJ5aW5nIHJlc2V0IFNPQ1JBTSBjb3JlP1xuIiwKLQkJCQkgICBfX2Z1bmNfXykpOwotCQkJYmNtZXJyb3IgPSBCQ01FX1NESU9fRVJST1I7Ci0JCQlnb3RvIGZhaWw7Ci0JCX0KKwkJZGhkc2Rpb19jaGlwX3Jlc2V0Y29yZShidXMtPnNkaCwgYnVzLT5jaS0+cmFtY29yZWJhc2UpOwogCiAJCS8qIENsZWFyIHRoZSB0b3AgYml0IG9mIG1lbW9yeSAqLwogCQlpZiAoYnVzLT5yYW1zaXplKSB7CkBAIC0yNjQwLDE3ICsyNjQ2LDE0IEBACiAJCQkJCSAodTggKikmemVyb3MsIDQpOwogCQl9CiAJfSBlbHNlIHsKLQkJaWYgKCEoc2lfc2V0Y29yZShidXMtPnNpaCwgU09DUkFNX0NPUkVfSUQsIDApKSkgewotCQkJREhEX0VSUk9SKCgiJXM6IEZhaWxlZCB0byBmaW5kIFNPQ1JBTSBjb3JlIVxuIiwKLQkJCQkgICBfX2Z1bmNfXykpOwotCQkJYmNtZXJyb3IgPSBCQ01FX0VSUk9SOwotCQkJZ290byBmYWlsOwotCQl9Ci0KLQkJaWYgKCFzaV9pc2NvcmV1cChidXMtPnNpaCkpIHsKKwkJcmVnZGF0YSA9IGJjbXNkaF9yZWdfcmVhZChidXMtPnNkaCwKKwkJCUNPUkVfU0IoYnVzLT5jaS0+cmFtY29yZWJhc2UsIHNidG1zdGF0ZWxvdyksIDQpOworCQlyZWdkYXRhICY9IChTQlRNTF9SRVNFVCB8IFNCVE1MX1JFSl9NQVNLIHwKKwkJCShTSUNGX0NMT0NLX0VOIDw8IFNCVE1MX1NJQ0ZfU0hJRlQpKTsKKwkJaWYgKChTSUNGX0NMT0NLX0VOIDw8IFNCVE1MX1NJQ0ZfU0hJRlQpICE9IHJlZ2RhdGEpIHsKIAkJCURIRF9FUlJPUigoIiVzOiBTT0NSQU0gY29yZSBpcyBkb3duIGFmdGVyIHJlc2V0P1xuIiwKIAkJCQkgICBfX2Z1bmNfXykpOwotCQkJYmNtZXJyb3IgPSBCQ01FX0VSUk9SOworCQkJYmNtZXJyb3IgPSAtRUJBREU7CiAJCQlnb3RvIGZhaWw7CiAJCX0KIApAQCAtMjY2MCw0MSArMjY2MywxNiBAQAogCQkJYmNtZXJyb3IgPSAwOwogCQl9CiAKLQkJaWYgKCFzaV9zZXRjb3JlKGJ1cy0+c2loLCBQQ01DSUFfQ09SRV9JRCwgMCkgJiYKLQkJICAgICFzaV9zZXRjb3JlKGJ1cy0+c2loLCBTRElPRF9DT1JFX0lELCAwKSkgewotCQkJREhEX0VSUk9SKCgiJXM6IENhbid0IGNoYW5nZSBiYWNrIHRvIFNESU8gY29yZT9cbiIsCi0JCQkJICAgX19mdW5jX18pKTsKLQkJCWJjbWVycm9yID0gQkNNRV9FUlJPUjsKLQkJCWdvdG8gZmFpbDsKLQkJfQogCQlXX1NEUkVHKDB4RkZGRkZGRkYsICZidXMtPnJlZ3MtPmludHN0YXR1cywgcmV0cmllcyk7CiAKLQkJaWYgKCEoc2lfc2V0Y29yZShidXMtPnNpaCwgQVJNN1NfQ09SRV9JRCwgMCkpICYmCi0JCSAgICAhKHNpX3NldGNvcmUoYnVzLT5zaWgsIEFSTUNNM19DT1JFX0lELCAwKSkpIHsKLQkJCURIRF9FUlJPUigoIiVzOiBGYWlsZWQgdG8gZmluZCBBUk0gY29yZSFcbiIsIF9fZnVuY19fKSk7Ci0JCQliY21lcnJvciA9IEJDTUVfRVJST1I7Ci0JCQlnb3RvIGZhaWw7Ci0JCX0KLQotCQlzaV9jb3JlX3Jlc2V0KGJ1cy0+c2loLCAwLCAwKTsKLQkJaWYgKGJjbXNkaF9yZWdmYWlsKGJ1cy0+c2RoKSkgewotCQkJREhEX0VSUk9SKCgiJXM6IEZhaWx1cmUgdHJ5aW5nIHRvIHJlc2V0IEFSTSBjb3JlP1xuIiwKLQkJCQkgICBfX2Z1bmNfXykpOwotCQkJYmNtZXJyb3IgPSBCQ01FX1NESU9fRVJST1I7Ci0JCQlnb3RvIGZhaWw7Ci0JCX0KKwkJZGhkc2Rpb19jaGlwX3Jlc2V0Y29yZShidXMtPnNkaCwgYnVzLT5jaS0+YXJtY29yZWJhc2UpOwogCiAJCS8qIEFsbG93IEhUIENsb2NrIG5vdyB0aGF0IHRoZSBBUk0gaXMgcnVubmluZy4gKi8KIAkJYnVzLT5hbHBfb25seSA9IGZhbHNlOwogCiAJCWJ1cy0+ZGhkLT5idXNzdGF0ZSA9IERIRF9CVVNfTE9BRDsKIAl9Ci0KIGZhaWw6Ci0JLyogQWx3YXlzIHJldHVybiB0byBTRElPRCBjb3JlICovCi0JaWYgKCFzaV9zZXRjb3JlKGJ1cy0+c2loLCBQQ01DSUFfQ09SRV9JRCwgMCkpCi0JCXNpX3NldGNvcmUoYnVzLT5zaWgsIFNESU9EX0NPUkVfSUQsIDApOwotCiAJcmV0dXJuIGJjbWVycm9yOwogfQogCkBAIC0yNzM5LDcgKzI3MTcsNyBAQAogCQlpZiAoc2V0ICYmIHN0cmNtcChuYW1lLCAic2RfZGl2aXNvciIpID09IDApIHsKIAkJCWlmIChiY21zZGhfaW92YXJfb3AoYnVzLT5zZGgsICJzZF9kaXZpc29yIiwgTlVMTCwgMCwKIAkJCQkJICAgICZidXMtPnNkX2Rpdmlzb3IsIHNpemVvZihzMzIpLAotCQkJCQkgICAgZmFsc2UpICE9IEJDTUVfT0spIHsKKwkJCQkJICAgIGZhbHNlKSAhPSAwKSB7CiAJCQkJYnVzLT5zZF9kaXZpc29yID0gLTE7CiAJCQkJREhEX0VSUk9SKCgiJXM6IGZhaWwgb24gJXMgZ2V0XG4iLCBfX2Z1bmNfXywKIAkJCQkJICAgbmFtZSkpOwpAQCAtMjc1Miw3ICsyNzMwLDcgQEAKIAkJaWYgKHNldCAmJiBzdHJjbXAobmFtZSwgInNkX21vZGUiKSA9PSAwKSB7CiAJCQlpZiAoYmNtc2RoX2lvdmFyX29wKGJ1cy0+c2RoLCAic2RfbW9kZSIsIE5VTEwsIDAsCiAJCQkJCSAgICAmYnVzLT5zZF9tb2RlLCBzaXplb2YoczMyKSwKLQkJCQkJICAgIGZhbHNlKSAhPSBCQ01FX09LKSB7CisJCQkJCSAgICBmYWxzZSkgIT0gMCkgewogCQkJCWJ1cy0+c2RfbW9kZSA9IC0xOwogCQkJCURIRF9FUlJPUigoIiVzOiBmYWlsIG9uICVzIGdldFxuIiwgX19mdW5jX18sCiAJCQkJCSAgIG5hbWUpKTsKQEAgLTI3NjcsNyArMjc0NSw3IEBACiAJCQlpZiAoYmNtc2RoX2lvdmFyX29wCiAJCQkgICAgKGJ1cy0+c2RoLCAic2RfYmxvY2tzaXplIiwgJmZudW0sIHNpemVvZihzMzIpLAogCQkJICAgICAmYnVzLT5ibG9ja3NpemUsIHNpemVvZihzMzIpLAotCQkJICAgICBmYWxzZSkgIT0gQkNNRV9PSykgeworCQkJICAgICBmYWxzZSkgIT0gMCkgewogCQkJCWJ1cy0+YmxvY2tzaXplID0gMDsKIAkJCQlESERfRVJST1IoKCIlczogZmFpbCBvbiAlcyBnZXRcbiIsIF9fZnVuY19fLAogCQkJCQkgICAic2RfYmxvY2tzaXplIikpOwpAQCAtMjg2NywxNCArMjg0NSwxNCBAQAogCWRoZHNkaW9fY2xrY3RsKGJ1cywgQ0xLX1NET05MWSwgZmFsc2UpOwogCiAJLyogQ2xlYXIgdGhlIGRhdGEgcGFja2V0IHF1ZXVlcyAqLwotCXBrdHFfZmx1c2goJmJ1cy0+dHhxLCB0cnVlKTsKKwliY21fcGt0cV9mbHVzaCgmYnVzLT50eHEsIHRydWUsIE5VTEwsIE5VTEwpOwogCiAJLyogQ2xlYXIgYW55IGhlbGQgZ2xvbW1pbmcgc3R1ZmYgKi8KIAlpZiAoYnVzLT5nbG9tZCkKLQkJcGt0X2J1Zl9mcmVlX3NrYihidXMtPmdsb21kKTsKKwkJYmNtX3BrdF9idWZfZnJlZV9za2IoYnVzLT5nbG9tZCk7CiAKIAlpZiAoYnVzLT5nbG9tKQotCQlwa3RfYnVmX2ZyZWVfc2tiKGJ1cy0+Z2xvbSk7CisJCWJjbV9wa3RfYnVmX2ZyZWVfc2tiKGJ1cy0+Z2xvbSk7CiAKIAlidXMtPmdsb20gPSBidXMtPmdsb21kID0gTlVMTDsKIApAQCAtMjk0OCwxNCArMjkyNiwxMSBAQAogCiAJLyogSWYgRjIgc3VjY2Vzc2Z1bGx5IGVuYWJsZWQsIHNldCBjb3JlIGFuZCBlbmFibGUgaW50ZXJydXB0cyAqLwogCWlmIChyZWFkeSA9PSBlbmFibGUpIHsKLQkJLyogTWFrZSBzdXJlIHdlJ3JlIHRhbGtpbmcgdG8gdGhlIGNvcmUuICovCi0JCWJ1cy0+cmVncyA9IHNpX3NldGNvcmUoYnVzLT5zaWgsIFBDTUNJQV9DT1JFX0lELCAwKTsKLQkJaWYgKCEoYnVzLT5yZWdzKSkKLQkJCWJ1cy0+cmVncyA9IHNpX3NldGNvcmUoYnVzLT5zaWgsIFNESU9EX0NPUkVfSUQsIDApOwotCiAJCS8qIFNldCB1cCB0aGUgaW50ZXJydXB0IG1hc2sgYW5kIGVuYWJsZSBpbnRlcnJ1cHRzICovCiAJCWJ1cy0+aG9zdGludG1hc2sgPSBIT1NUSU5UTUFTSzsKLQkJV19TRFJFRyhidXMtPmhvc3RpbnRtYXNrLCAmYnVzLT5yZWdzLT5ob3N0aW50bWFzaywgcmV0cmllcyk7CisJCVdfU0RSRUcoYnVzLT5ob3N0aW50bWFzaywKKwkJCSh1bnNpZ25lZCBpbnQgKilDT1JFX0JVU19SRUcoYnVzLT5jaS0+YnVzY29yZWJhc2UsCisJCQlob3N0aW50bWFzayksIHJldHJpZXMpOwogCiAJCWJjbXNkaF9jZmdfd3JpdGUoYnVzLT5zZGgsIFNESU9fRlVOQ18xLCBTQlNESU9fV0FURVJNQVJLLAogCQkJCSAodTgpIHdhdGVybWFyaywgJmVycik7CkBAIC0zMTM0LDEyICszMTA5LDExIEBACiAJfQogCiAJLyogUmVhZCByZW1haW5kZXIgb2YgZnJhbWUgYm9keSBpbnRvIHRoZSByeGN0bCBidWZmZXIgKi8KLQlzZHJldCA9Ci0JICAgIGRoZF9iY21zZGhfcmVjdl9idWYoYnVzLCBiY21zZGhfY3VyX3Nid2FkKHNkaCksIFNESU9fRlVOQ18yLCBGMlNZTkMsCi0JCQkJKGJ1cy0+cnhjdGwgKyBmaXJzdHJlYWQpLCByZGxlbiwgTlVMTCwgTlVMTCwKLQkJCQlOVUxMKTsKKwlzZHJldCA9IGJjbXNkaF9yZWN2X2J1ZihidXMsIGJjbXNkaF9jdXJfc2J3YWQoc2RoKSwgU0RJT19GVU5DXzIsCisJCQkJRjJTWU5DLCAoYnVzLT5yeGN0bCArIGZpcnN0cmVhZCksIHJkbGVuLAorCQkJCU5VTEwsIE5VTEwsIE5VTEwpOwogCWJ1cy0+ZjJyeGRhdGErKzsKLQlBU1NFUlQoc2RyZXQgIT0gQkNNRV9QRU5ESU5HKTsKKwlBU1NFUlQoc2RyZXQgIT0gLUJDTUVfUEVORElORyk7CiAKIAkvKiBDb250cm9sIGZyYW1lIGZhaWx1cmVzIG5lZWQgcmV0cmFuc21pc3Npb24gKi8KIAlpZiAoc2RyZXQgPCAwKSB7CkBAIC0zMTUzLDggKzMxMjcsMTAgQEAKIGdvdHBrdDoKIAogI2lmZGVmIERIRF9ERUJVRwotCWlmIChESERfQllURVNfT04oKSAmJiBESERfQ1RMX09OKCkpCi0JCXByaGV4KCJSeEN0cmwiLCBidXMtPnJ4Y3RsLCBsZW4pOworCWlmIChESERfQllURVNfT04oKSAmJiBESERfQ1RMX09OKCkpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlJ4Q3RybDpcbiIpOworCQlwcmludF9oZXhfZHVtcF9ieXRlcygiIiwgRFVNUF9QUkVGSVhfT0ZGU0VULCBidXMtPnJ4Y3RsLCBsZW4pOworCX0KICNlbmRpZgogCiAJLyogUG9pbnQgdG8gdmFsaWQgZGF0YSBhbmQgaW5kaWNhdGUgaXRzIGxlbmd0aCAqLwpAQCAtMzIyOCwxMCArMzIwNCwxMSBAQAogCQkJfQogCiAJCQkvKiBBbGxvY2F0ZS9jaGFpbiBwYWNrZXQgZm9yIG5leHQgc3ViZnJhbWUgKi8KLQkJCXBuZXh0ID0gcGt0X2J1Zl9nZXRfc2tiKHN1YmxlbiArIERIRF9TREFMSUdOKTsKKwkJCXBuZXh0ID0gYmNtX3BrdF9idWZfZ2V0X3NrYihzdWJsZW4gKyBESERfU0RBTElHTik7CiAJCQlpZiAocG5leHQgPT0gTlVMTCkgewotCQkJCURIRF9FUlJPUigoIiVzOiBwa3RfYnVmX2dldF9za2IgZmFpbGVkLCBudW0gJWQgbGVuICVkXG4iLAotCQkJCQkgICBfX2Z1bmNfXywgbnVtLCBzdWJsZW4pKTsKKwkJCQlESERfRVJST1IoKCIlczogYmNtX3BrdF9idWZfZ2V0X3NrYiBmYWlsZWQsICIKKwkJCQkJIm51bSAlZCBsZW4gJWRcbiIsIF9fZnVuY19fLAorCQkJCQludW0sIHN1YmxlbikpOwogCQkJCWJyZWFrOwogCQkJfQogCQkJQVNTRVJUKCEocG5leHQtPnByZXYpKTsKQEAgLTMyNjQsMTMgKzMyNDEsMTMgQEAKIAkJCXBmaXJzdCA9IHBuZXh0ID0gTlVMTDsKIAkJfSBlbHNlIHsKIAkJCWlmIChwZmlyc3QpCi0JCQkJcGt0X2J1Zl9mcmVlX3NrYihwZmlyc3QpOworCQkJCWJjbV9wa3RfYnVmX2ZyZWVfc2tiKHBmaXJzdCk7CiAJCQlidXMtPmdsb20gPSBOVUxMOwogCQkJbnVtID0gMDsKIAkJfQogCiAJCS8qIERvbmUgd2l0aCBkZXNjcmlwdG9yIHBhY2tldCAqLwotCQlwa3RfYnVmX2ZyZWVfc2tiKGJ1cy0+Z2xvbWQpOworCQliY21fcGt0X2J1Zl9mcmVlX3NrYihidXMtPmdsb21kKTsKIAkJYnVzLT5nbG9tZCA9IE5VTEw7CiAJCWJ1cy0+bmV4dGxlbiA9IDA7CiAKQEAgLTMyOTEsMjcgKzMyNjgsMjMgQEAKIAkJfQogCiAJCXBmaXJzdCA9IGJ1cy0+Z2xvbTsKLQkJZGxlbiA9ICh1MTYpIHBrdHRvdGxlbihwZmlyc3QpOworCQlkbGVuID0gKHUxNikgYmNtX3BrdHRvdGxlbihwZmlyc3QpOwogCiAJCS8qIERvIGFuIFNESU8gcmVhZCBmb3IgdGhlIHN1cGVyZnJhbWUuICBDb25maWd1cmFibGUgaW92YXIgdG8KIAkJICogcmVhZCBkaXJlY3RseSBpbnRvIHRoZSBjaGFpbmVkIHBhY2tldCwgb3IgYWxsb2NhdGUgYSBsYXJnZQogCQkgKiBwYWNrZXQgYW5kIGFuZCBjb3B5IGludG8gdGhlIGNoYWluLgogCQkgKi8KIAkJaWYgKHVzZWNoYWluKSB7Ci0JCQllcnJjb2RlID0gZGhkX2JjbXNkaF9yZWN2X2J1ZihidXMsCi0JCQkJCQkgICAgICBiY21zZGhfY3VyX3Nid2FkCi0JCQkJCQkgICAgICAoYnVzLT5zZGgpLCBTRElPX0ZVTkNfMiwKLQkJCQkJCSAgICAgIEYyU1lOQywKLQkJCQkJCSAgICAgICh1OCAqKSBwZmlyc3QtPmRhdGEsCi0JCQkJCQkgICAgICBkbGVuLCBwZmlyc3QsIE5VTEwsIE5VTEwpOworCQkJZXJyY29kZSA9IGJjbXNkaF9yZWN2X2J1ZihidXMsCisJCQkJCWJjbXNkaF9jdXJfc2J3YWQoYnVzLT5zZGgpLCBTRElPX0ZVTkNfMiwKKwkJCQkJRjJTWU5DLCAodTggKikgcGZpcnN0LT5kYXRhLCBkbGVuLAorCQkJCQlwZmlyc3QsIE5VTEwsIE5VTEwpOwogCQl9IGVsc2UgaWYgKGJ1cy0+ZGF0YXB0cikgewotCQkJZXJyY29kZSA9IGRoZF9iY21zZGhfcmVjdl9idWYoYnVzLAotCQkJCQkJICAgICAgYmNtc2RoX2N1cl9zYndhZAotCQkJCQkJICAgICAgKGJ1cy0+c2RoKSwgU0RJT19GVU5DXzIsCi0JCQkJCQkgICAgICBGMlNZTkMsIGJ1cy0+ZGF0YXB0ciwKLQkJCQkJCSAgICAgIGRsZW4sIE5VTEwsIE5VTEwsIE5VTEwpOwotCQkJc3VibGVuID0KLQkJCSAgICAodTE2KSBwa3Rmcm9tYnVmKHBmaXJzdCwgMCwgZGxlbiwKKwkJCWVycmNvZGUgPSBiY21zZGhfcmVjdl9idWYoYnVzLAorCQkJCQliY21zZGhfY3VyX3Nid2FkKGJ1cy0+c2RoKSwgU0RJT19GVU5DXzIsCisJCQkJCUYyU1lOQywgYnVzLT5kYXRhcHRyLCBkbGVuLAorCQkJCQlOVUxMLCBOVUxMLCBOVUxMKTsKKwkJCXN1YmxlbiA9ICh1MTYpIGJjbV9wa3Rmcm9tYnVmKHBmaXJzdCwgMCwgZGxlbiwKIAkJCQkJCWJ1cy0+ZGF0YXB0cik7CiAJCQlpZiAoc3VibGVuICE9IGRsZW4pIHsKIAkJCQlESERfRVJST1IoKCIlczogRkFJTEVEIFRPIENPUFksIGRsZW4gJWQgc3VibGVuICVkXG4iLApAQCAtMzMyNSw3ICszMjk4LDcgQEAKIAkJCWVycmNvZGUgPSAtMTsKIAkJfQogCQlidXMtPmYycnhkYXRhKys7Ci0JCUFTU0VSVChlcnJjb2RlICE9IEJDTUVfUEVORElORyk7CisJCUFTU0VSVChlcnJjb2RlICE9IC1CQ01FX1BFTkRJTkcpOwogCiAJCS8qIE9uIGZhaWx1cmUsIGtpbGwgdGhlIHN1cGVyZnJhbWUsIGFsbG93IGEgY291cGxlIHJldHJpZXMgKi8KIAkJaWYgKGVycmNvZGUgPCAwKSB7CkBAIC0zMzM5LDcgKzMzMTIsNyBAQAogCQkJCWJ1cy0+Z2xvbWVyciA9IDA7CiAJCQkJZGhkc2Rpb19yeGZhaWwoYnVzLCB0cnVlLCBmYWxzZSk7CiAJCQkJZGhkX29zX3NkbG9ja19yeHEoYnVzLT5kaGQpOwotCQkJCXBrdF9idWZfZnJlZV9za2IoYnVzLT5nbG9tKTsKKwkJCQliY21fcGt0X2J1Zl9mcmVlX3NrYihidXMtPmdsb20pOwogCQkJCWRoZF9vc19zZHVubG9ja19yeHEoYnVzLT5kaGQpOwogCQkJCWJ1cy0+cnhnbG9tZmFpbCsrOwogCQkJCWJ1cy0+Z2xvbSA9IE5VTEw7CkBAIC0zMzQ4LDggKzMzMjEsOSBAQAogCQl9CiAjaWZkZWYgREhEX0RFQlVHCiAJCWlmIChESERfR0xPTV9PTigpKSB7Ci0JCQlwcmhleCgiU1VQRVJGUkFNRSIsIHBmaXJzdC0+ZGF0YSwKLQkJCSAgICAgIG1pbl90KGludCwgcGZpcnN0LT5sZW4sIDQ4KSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiU1VQRVJGUkFNRTpcbiIpOworCQkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoIiIsIERVTVBfUFJFRklYX09GRlNFVCwKKwkJCQlwZmlyc3QtPmRhdGEsIG1pbl90KGludCwgcGZpcnN0LT5sZW4sIDQ4KSk7CiAJCX0KICNlbmRpZgogCkBAIC0zNDMwLDggKzM0MDQsMTEgQEAKIAkJCWNoYW4gPSBTRFBDTV9QQUNLRVRfQ0hBTk5FTCgmZHB0cltTRFBDTV9GUkFNRVRBR19MRU5dKTsKIAkJCWRvZmYgPSBTRFBDTV9ET0ZGU0VUX1ZBTFVFKCZkcHRyW1NEUENNX0ZSQU1FVEFHX0xFTl0pOwogI2lmZGVmIERIRF9ERUJVRwotCQkJaWYgKERIRF9HTE9NX09OKCkpCi0JCQkJcHJoZXgoInN1YmZyYW1lIiwgZHB0ciwgMzIpOworCQkJaWYgKERIRF9HTE9NX09OKCkpIHsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAic3ViZnJhbWU6XG4iKTsKKwkJCQlwcmludF9oZXhfZHVtcF9ieXRlcygiIiwgRFVNUF9QUkVGSVhfT0ZGU0VULAorCQkJCQkJICAgICBkcHRyLCAzMik7CisJCQl9CiAjZW5kaWYKIAogCQkJaWYgKCh1MTYpfihzdWJsZW4gXiBjaGVjaykpIHsKQEAgLTM0NjgsNyArMzQ0NSw3IEBACiAJCQkJYnVzLT5nbG9tZXJyID0gMDsKIAkJCQlkaGRzZGlvX3J4ZmFpbChidXMsIHRydWUsIGZhbHNlKTsKIAkJCQlkaGRfb3Nfc2Rsb2NrX3J4cShidXMtPmRoZCk7Ci0JCQkJcGt0X2J1Zl9mcmVlX3NrYihidXMtPmdsb20pOworCQkJCWJjbV9wa3RfYnVmX2ZyZWVfc2tiKGJ1cy0+Z2xvbSk7CiAJCQkJZGhkX29zX3NkdW5sb2NrX3J4cShidXMtPmRoZCk7CiAJCQkJYnVzLT5yeGdsb21mYWlsKys7CiAJCQkJYnVzLT5nbG9tID0gTlVMTDsKQEAgLTM1MDgsMTUgKzM0ODUsMTggQEAKIAkJCQlyeHNlcSA9IHNlcTsKIAkJCX0KICNpZmRlZiBESERfREVCVUcKLQkJCWlmIChESERfQllURVNfT04oKSAmJiBESERfREFUQV9PTigpKQotCQkJCXByaGV4KCJSeCBTdWJmcmFtZSBEYXRhIiwgZHB0ciwgZGxlbik7CisJCQlpZiAoREhEX0JZVEVTX09OKCkgJiYgREhEX0RBVEFfT04oKSkgeworCQkJCXByaW50ayhLRVJOX0RFQlVHICJSeCBTdWJmcmFtZSBEYXRhOlxuIik7CisJCQkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoIiIsIERVTVBfUFJFRklYX09GRlNFVCwKKwkJCQkJCSAgICAgZHB0ciwgZGxlbik7CisJCQl9CiAjZW5kaWYKIAogCQkJX19za2JfdHJpbShwZmlyc3QsIHN1Ymxlbik7CiAJCQlza2JfcHVsbChwZmlyc3QsIGRvZmYpOwogCiAJCQlpZiAocGZpcnN0LT5sZW4gPT0gMCkgewotCQkJCXBrdF9idWZfZnJlZV9za2IocGZpcnN0KTsKKwkJCQliY21fcGt0X2J1Zl9mcmVlX3NrYihwZmlyc3QpOwogCQkJCWlmIChwbGFzdCkgewogCQkJCQlwbGFzdC0+bmV4dCA9IHBuZXh0OwogCQkJCX0gZWxzZSB7CkBAIC0zNTI5LDcgKzM1MDksNyBAQAogCQkJCURIRF9FUlJPUigoIiVzOiByeCBwcm90b2NvbCBlcnJvclxuIiwKIAkJCQkJICAgX19mdW5jX18pKTsKIAkJCQlidXMtPmRoZC0+cnhfZXJyb3JzKys7Ci0JCQkJcGt0X2J1Zl9mcmVlX3NrYihwZmlyc3QpOworCQkJCWJjbV9wa3RfYnVmX2ZyZWVfc2tiKHBmaXJzdCk7CiAJCQkJaWYgKHBsYXN0KSB7CiAJCQkJCXBsYXN0LT5uZXh0ID0gcG5leHQ7CiAJCQkJfSBlbHNlIHsKQEAgLTM1NTIsOCArMzUzMiw5IEBACiAJCQkJX19mdW5jX18sIG51bSwgcGZpcnN0LCBwZmlyc3QtPmRhdGEsCiAJCQkJcGZpcnN0LT5sZW4sIHBmaXJzdC0+bmV4dCwKIAkJCQlwZmlyc3QtPnByZXYpKTsKLQkJCQlwcmhleCgiIiwgKHU4ICopIHBmaXJzdC0+ZGF0YSwKLQkJCQkgICAgICBtaW5fdChpbnQsIHBmaXJzdC0+bGVuLCAzMikpOworCQkJCXByaW50X2hleF9kdW1wX2J5dGVzKCIiLCBEVU1QX1BSRUZJWF9PRkZTRVQsCisJCQkJCQlwZmlyc3QtPmRhdGEsCisJCQkJCQltaW5fdChpbnQsIHBmaXJzdC0+bGVuLCAzMikpOwogCQkJfQogI2VuZGlmCQkJCS8qIERIRF9ERUJVRyAqLwogCQl9CkBAIC0zNTc4LDcgKzM1NTksNiBAQAogCXUxNiBsZW4sIGNoZWNrOwkvKiBFeHRyYWN0ZWQgaGFyZHdhcmUgaGVhZGVyIGZpZWxkcyAqLwogCXU4IGNoYW4sIHNlcSwgZG9mZjsJLyogRXh0cmFjdGVkIHNvZnR3YXJlIGhlYWRlciBmaWVsZHMgKi8KIAl1OCBmY2JpdHM7CQkvKiBFeHRyYWN0ZWQgZmNiaXRzIGZyb20gc29mdHdhcmUgaGVhZGVyICovCi0JdTggZGVsdGE7CiAKIAlzdHJ1Y3Qgc2tfYnVmZiAqcGt0OwkJLyogUGFja2V0IGZvciBldmVudCBvciBkYXRhIGZyYW1lcyAqLwogCXUxNiBwYWQ7CQkvKiBOdW1iZXIgb2YgcGFkIGJ5dGVzIHRvIHJlYWQgKi8KQEAgLTM2NjcsNyArMzY0Nyw3IEBACiAJCQkgKi8KIAkJCS8qIEFsbG9jYXRlIGEgcGFja2V0IGJ1ZmZlciAqLwogCQkJZGhkX29zX3NkbG9ja19yeHEoYnVzLT5kaGQpOwotCQkJcGt0ID0gcGt0X2J1Zl9nZXRfc2tiKHJkbGVuICsgREhEX1NEQUxJR04pOworCQkJcGt0ID0gYmNtX3BrdF9idWZfZ2V0X3NrYihyZGxlbiArIERIRF9TREFMSUdOKTsKIAkJCWlmICghcGt0KSB7CiAJCQkJaWYgKGJ1cy0+YnVzID09IFNQSV9CVVMpIHsKIAkJCQkJYnVzLT51c2VidWZwb29sID0gZmFsc2U7CkBAIC0zNjg0LDE2ICszNjY0LDEzIEBACiAJCQkJCUFTU0VSVChidXMtPnJ4Y3RsID49IGJ1cy0+cnhidWYpOwogCQkJCQlyeGJ1ZiA9IGJ1cy0+cnhjdGw7CiAJCQkJCS8qIFJlYWQgdGhlIGVudGlyZSBmcmFtZSAqLwotCQkJCQlzZHJldCA9IGRoZF9iY21zZGhfcmVjdl9idWYoYnVzLAotCQkJCQkJICAgIGJjbXNkaF9jdXJfc2J3YWQKLQkJCQkJCSAgICAoc2RoKSwKLQkJCQkJCSAgICBTRElPX0ZVTkNfMiwKLQkJCQkJCSAgICBGMlNZTkMsCi0JCQkJCQkgICAgcnhidWYsCi0JCQkJCQkgICAgcmRsZW4sIE5VTEwsCi0JCQkJCQkgICAgTlVMTCwgTlVMTCk7CisJCQkJCXNkcmV0ID0gYmNtc2RoX3JlY3ZfYnVmKGJ1cywKKwkJCQkJCSAgICBiY21zZGhfY3VyX3Nid2FkKHNkaCksCisJCQkJCQkgICAgU0RJT19GVU5DXzIsIEYyU1lOQywKKwkJCQkJCSAgICByeGJ1ZiwgcmRsZW4sCisJCQkJCQkgICAgTlVMTCwgTlVMTCwgTlVMTCk7CiAJCQkJCWJ1cy0+ZjJyeGRhdGErKzsKLQkJCQkJQVNTRVJUKHNkcmV0ICE9IEJDTUVfUEVORElORyk7CisJCQkJCUFTU0VSVChzZHJldCAhPSAtQkNNRV9QRU5ESU5HKTsKIAogCQkJCQkvKiBDb250cm9sIGZyYW1lIGZhaWx1cmVzIG5lZWQKIAkJCQkJIHJldHJhbnNtaXNzaW9uICovCkBAIC0zNzEzLDggKzM2OTAsMTEgQEAKIAkJCQl9IGVsc2UgewogCQkJCQkvKiBHaXZlIHVwIG9uIGRhdGEsCiAJCQkJCXJlcXVlc3QgcnR4IG9mIGV2ZW50cyAqLwotCQkJCQlESERfRVJST1IoKCIlcyAobmV4dGxlbik6IHBrdF9idWZfZ2V0X3NrYiBmYWlsZWQ6IGxlbiAlZCByZGxlbiAlZCAiICJleHBlY3RlZCByeHNlcSAlZFxuIiwKLQkJCQkJCV9fZnVuY19fLCBsZW4sIHJkbGVuLCByeHNlcSkpOworCQkJCQlESERfRVJST1IoKCIlcyAobmV4dGxlbik6ICIKKwkJCQkJCSAgICJiY21fcGt0X2J1Zl9nZXRfc2tiIGZhaWxlZDoiCisJCQkJCQkgICAiIGxlbiAlZCByZGxlbiAlZCBleHBlY3RlZCIKKwkJCQkJCSAgICIgcnhzZXEgJWRcbiIsIF9fZnVuY19fLAorCQkJCQkJICAgbGVuLCByZGxlbiwgcnhzZXEpKTsKIAkJCQkJLyogSnVzdCBnbyB0cnkgYWdhaW4gdy9ub3JtYWwKIAkJCQkJaGVhZGVyIHJlYWQgKi8KIAkJCQkJZGhkX29zX3NkdW5sb2NrX3J4cShidXMtPmRoZCk7CkBAIC0zNzI4LDE5ICszNzA4LDE4IEBACiAJCQkJUEtUQUxJR04ocGt0LCByZGxlbiwgREhEX1NEQUxJR04pOwogCQkJCXJ4YnVmID0gKHU4ICopIChwa3QtPmRhdGEpOwogCQkJCS8qIFJlYWQgdGhlIGVudGlyZSBmcmFtZSAqLwotCQkJCXNkcmV0ID0KLQkJCQkgICAgZGhkX2JjbXNkaF9yZWN2X2J1ZihidXMsCisJCQkJc2RyZXQgPSBiY21zZGhfcmVjdl9idWYoYnVzLAogCQkJCQkJYmNtc2RoX2N1cl9zYndhZChzZGgpLAogCQkJCQkJU0RJT19GVU5DXzIsIEYyU1lOQywKLQkJCQkJCXJ4YnVmLCByZGxlbiwgcGt0LCBOVUxMLAotCQkJCQkJTlVMTCk7CisJCQkJCQlyeGJ1ZiwgcmRsZW4sCisJCQkJCQlwa3QsIE5VTEwsIE5VTEwpOwogCQkJCWJ1cy0+ZjJyeGRhdGErKzsKLQkJCQlBU1NFUlQoc2RyZXQgIT0gQkNNRV9QRU5ESU5HKTsKKwkJCQlBU1NFUlQoc2RyZXQgIT0gLUJDTUVfUEVORElORyk7CiAKIAkJCQlpZiAoc2RyZXQgPCAwKSB7CiAJCQkJCURIRF9FUlJPUigoIiVzIChuZXh0bGVuKTogcmVhZCAlZCBieXRlcyBmYWlsZWQ6ICVkXG4iLAogCQkJCQkJX19mdW5jX18sIHJkbGVuLCBzZHJldCkpOwotCQkJCQlwa3RfYnVmX2ZyZWVfc2tiKHBrdCk7CisJCQkJCWJjbV9wa3RfYnVmX2ZyZWVfc2tiKHBrdCk7CiAJCQkJCWJ1cy0+ZGhkLT5yeF9lcnJvcnMrKzsKIAkJCQkJZGhkX29zX3NkdW5sb2NrX3J4cShidXMtPmRoZCk7CiAJCQkJCS8qIEZvcmNlIHJldHJ5IHcvbm9ybWFsIGhlYWRlciByZWFkLgpAQCAtMzc2NywyMyArMzc0NiwxOSBAQAogCQkJaWYgKCEobGVuIHwgY2hlY2spKSB7CiAJCQkJREhEX0lORk8oKCIlcyAobmV4dGxlbik6IHJlYWQgemVyb3MgaW4gSFcgIgogCQkJCQkiaGVhZGVyPz8/XG4iLCBfX2Z1bmNfXykpOwotCQkJCWRoZF9vc19zZGxvY2tfcnhxKGJ1cy0+ZGhkKTsKLQkJCQlQS1RGUkVFMigpOwotCQkJCWRoZF9vc19zZHVubG9ja19yeHEoYnVzLT5kaGQpOwotCQkJCUdTUElfUFI1NTE1MF9CQUlMT1VUOworCQkJCWRoZHNkaW9fcGt0ZnJlZTIoYnVzLCBwa3QpOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCiAJCQkvKiBWYWxpZGF0ZSBjaGVjayBieXRlcyAqLwogCQkJaWYgKCh1MTYpfihsZW4gXiBjaGVjaykpIHsKLQkJCQlESERfRVJST1IoKCIlcyAobmV4dGxlbik6IEhXIGhkciBlcnJvcjogbmV4dGxlbi9sZW4vY2hlY2siICIgMHglMDR4LzB4JTA0eC8weCUwNHhcbiIsCisJCQkJREhEX0VSUk9SKCgiJXMgKG5leHRsZW4pOiBIVyBoZHIgZXJyb3I6IgorCQkJCQkiIG5leHRsZW4vbGVuL2NoZWNrIgorCQkJCQkiIDB4JTA0eC8weCUwNHgvMHglMDR4XG4iLAogCQkJCQlfX2Z1bmNfXywgbmV4dGxlbiwgbGVuLCBjaGVjaykpOwotCQkJCWRoZF9vc19zZGxvY2tfcnhxKGJ1cy0+ZGhkKTsKLQkJCQlQS1RGUkVFMigpOwotCQkJCWRoZF9vc19zZHVubG9ja19yeHEoYnVzLT5kaGQpOwogCQkJCWJ1cy0+cnhfYmFkaGRyKys7CiAJCQkJZGhkc2Rpb19yeGZhaWwoYnVzLCBmYWxzZSwgZmFsc2UpOwotCQkJCUdTUElfUFI1NTE1MF9CQUlMT1VUOworCQkJCWRoZHNkaW9fcGt0ZnJlZTIoYnVzLCBwa3QpOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCkBAIC0zNzkxLDEwICszNzY2LDcgQEAKIAkJCWlmIChsZW4gPCBTRFBDTV9IRFJMRU4pIHsKIAkJCQlESERfRVJST1IoKCIlcyAobmV4dGxlbik6IEhXIGhkciBsZW5ndGggIgogCQkJCQkiaW52YWxpZDogJWRcbiIsIF9fZnVuY19fLCBsZW4pKTsKLQkJCQlkaGRfb3Nfc2Rsb2NrX3J4cShidXMtPmRoZCk7Ci0JCQkJUEtURlJFRTIoKTsKLQkJCQlkaGRfb3Nfc2R1bmxvY2tfcnhxKGJ1cy0+ZGhkKTsKLQkJCQlHU1BJX1BSNTUxNTBfQkFJTE9VVDsKKwkJCQlkaGRzZGlvX3BrdGZyZWUyKGJ1cywgcGt0KTsKIAkJCQljb250aW51ZTsKIAkJCX0KIApAQCAtMzgwMywzMSArMzc3NSwyNSBAQAogCQkJaWYgKGxlbl9jb25zaXN0ZW50KSB7CiAJCQkJLyogTWlzbWF0Y2gsIGZvcmNlIHJldHJ5IHcvbm9ybWFsCiAJCQkJCWhlYWRlciAobWF5IGJlID40SykgKi8KLQkJCQlESERfRVJST1IoKCIlcyAobmV4dGxlbik6IG1pc21hdGNoLCBuZXh0bGVuICVkIGxlbiAlZCBybmQgJWQ7ICIgImV4cGVjdGVkIHJ4c2VxICVkXG4iLAorCQkJCURIRF9FUlJPUigoIiVzIChuZXh0bGVuKTogbWlzbWF0Y2gsICIKKwkJCQkJIm5leHRsZW4gJWQgbGVuICVkIHJuZCAlZDsgIgorCQkJCQkiZXhwZWN0ZWQgcnhzZXEgJWRcbiIsCiAJCQkJCV9fZnVuY19fLCBuZXh0bGVuLAogCQkJCQlsZW4sIHJvdW5kdXAobGVuLCAxNiksIHJ4c2VxKSk7Ci0JCQkJZGhkX29zX3NkbG9ja19yeHEoYnVzLT5kaGQpOwotCQkJCVBLVEZSRUUyKCk7Ci0JCQkJZGhkX29zX3NkdW5sb2NrX3J4cShidXMtPmRoZCk7Ci0JCQkJZGhkc2Rpb19yeGZhaWwoYnVzLCB0cnVlLAotCQkJCQkgICAgICAgKGJ1cy0+YnVzID09Ci0JCQkJCQlTUElfQlVTKSA/IGZhbHNlIDogdHJ1ZSk7Ci0JCQkJR1NQSV9QUjU1MTUwX0JBSUxPVVQ7CisJCQkJZGhkc2Rpb19yeGZhaWwoYnVzLCB0cnVlLCAoYnVzLT5idXMgIT0gU1BJX0JVUykpOworCQkJCWRoZHNkaW9fcGt0ZnJlZTIoYnVzLCBwa3QpOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCiAJCQkvKiBFeHRyYWN0IHNvZnR3YXJlIGhlYWRlciBmaWVsZHMgKi8KLQkJCWNoYW4gPQotCQkJICAgIFNEUENNX1BBQ0tFVF9DSEFOTkVMKCZidXMtPnJ4aGRyCi0JCQkJCQkgW1NEUENNX0ZSQU1FVEFHX0xFTl0pOwotCQkJc2VxID0KLQkJCSAgICBTRFBDTV9QQUNLRVRfU0VRVUVOQ0UoJmJ1cy0+cnhoZHIKLQkJCQkJCSAgW1NEUENNX0ZSQU1FVEFHX0xFTl0pOwotCQkJZG9mZiA9Ci0JCQkgICAgU0RQQ01fRE9GRlNFVF9WQUxVRSgmYnVzLT5yeGhkcgotCQkJCQkJW1NEUENNX0ZSQU1FVEFHX0xFTl0pOwotCQkJdHhtYXggPQotCQkJICAgIFNEUENNX1dJTkRPV19WQUxVRSgmYnVzLT5yeGhkcltTRFBDTV9GUkFNRVRBR19MRU5dKTsKKwkJCWNoYW4gPSBTRFBDTV9QQUNLRVRfQ0hBTk5FTCgKKwkJCQkJJmJ1cy0+cnhoZHJbU0RQQ01fRlJBTUVUQUdfTEVOXSk7CisJCQlzZXEgPSBTRFBDTV9QQUNLRVRfU0VRVUVOQ0UoCisJCQkJCSZidXMtPnJ4aGRyW1NEUENNX0ZSQU1FVEFHX0xFTl0pOworCQkJZG9mZiA9IFNEUENNX0RPRkZTRVRfVkFMVUUoCisJCQkJCSZidXMtPnJ4aGRyW1NEUENNX0ZSQU1FVEFHX0xFTl0pOworCQkJdHhtYXggPSBTRFBDTV9XSU5ET1dfVkFMVUUoCisJCQkJCSZidXMtPnJ4aGRyW1NEUENNX0ZSQU1FVEFHX0xFTl0pOwogCiAJCQlidXMtPm5leHRsZW4gPQogCQkJICAgIGJ1cy0+cnhoZHJbU0RQQ01fRlJBTUVUQUdfTEVOICsKQEAgLTM4MzksMjEgKzM4MDUsMTggQEAKIAkJCX0KIAogCQkJYnVzLT5kaGQtPnJ4X3JlYWRhaGVhZF9jbnQrKzsKKwogCQkJLyogSGFuZGxlIEZsb3cgQ29udHJvbCAqLwotCQkJZmNiaXRzID0KLQkJCSAgICBTRFBDTV9GQ01BU0tfVkFMVUUoJmJ1cy0+cnhoZHJbU0RQQ01fRlJBTUVUQUdfTEVOXSk7CisJCQlmY2JpdHMgPSBTRFBDTV9GQ01BU0tfVkFMVUUoCisJCQkJCSZidXMtPnJ4aGRyW1NEUENNX0ZSQU1FVEFHX0xFTl0pOwogCi0JCQlkZWx0YSA9IDA7Ci0JCQlpZiAofmJ1cy0+Zmxvd2NvbnRyb2wgJiBmY2JpdHMpIHsKLQkJCQlidXMtPmZjX3hvZmYrKzsKLQkJCQlkZWx0YSA9IDE7Ci0JCQl9Ci0JCQlpZiAoYnVzLT5mbG93Y29udHJvbCAmIH5mY2JpdHMpIHsKLQkJCQlidXMtPmZjX3hvbisrOwotCQkJCWRlbHRhID0gMTsKLQkJCX0KKwkJCWlmIChidXMtPmZsb3djb250cm9sICE9IGZjYml0cykgeworCQkJCWlmICh+YnVzLT5mbG93Y29udHJvbCAmIGZjYml0cykKKwkJCQkJYnVzLT5mY194b2ZmKys7CiAKLQkJCWlmIChkZWx0YSkgeworCQkJCWlmIChidXMtPmZsb3djb250cm9sICYgfmZjYml0cykKKwkJCQkJYnVzLT5mY194b24rKzsKKwogCQkJCWJ1cy0+ZmNfcmN2ZCsrOwogCQkJCWJ1cy0+Zmxvd2NvbnRyb2wgPSBmY2JpdHM7CiAJCQl9CkBAIC0zODc2LDMzICszODM5LDMwIEBACiAJCQlidXMtPnR4X21heCA9IHR4bWF4OwogCiAjaWZkZWYgREhEX0RFQlVHCi0JCQlpZiAoREhEX0JZVEVTX09OKCkgJiYgREhEX0RBVEFfT04oKSkKLQkJCQlwcmhleCgiUnggRGF0YSIsIHJ4YnVmLCBsZW4pOwotCQkJZWxzZSBpZiAoREhEX0hEUlNfT04oKSkKLQkJCQlwcmhleCgiUnhIZHIiLCBidXMtPnJ4aGRyLCBTRFBDTV9IRFJMRU4pOworCQkJaWYgKERIRF9CWVRFU19PTigpICYmIERIRF9EQVRBX09OKCkpIHsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiUnggRGF0YTpcbiIpOworCQkJCXByaW50X2hleF9kdW1wX2J5dGVzKCIiLCBEVU1QX1BSRUZJWF9PRkZTRVQsCisJCQkJCQkgICAgIHJ4YnVmLCBsZW4pOworCQkJfSBlbHNlIGlmIChESERfSERSU19PTigpKSB7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIlJ4SGRyOlxuIik7CisJCQkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoIiIsIERVTVBfUFJFRklYX09GRlNFVCwKKwkJCQkJCSAgICAgYnVzLT5yeGhkciwgU0RQQ01fSERSTEVOKTsKKwkJCX0KICNlbmRpZgogCiAJCQlpZiAoY2hhbiA9PSBTRFBDTV9DT05UUk9MX0NIQU5ORUwpIHsKIAkJCQlpZiAoYnVzLT5idXMgPT0gU1BJX0JVUykgewogCQkJCQlkaGRzZGlvX3JlYWRfY29udHJvbChidXMsIHJ4YnVmLCBsZW4sCiAJCQkJCQkJICAgICBkb2ZmKTsKLQkJCQkJaWYgKGJ1cy0+dXNlYnVmcG9vbCkgewotCQkJCQkJZGhkX29zX3NkbG9ja19yeHEoYnVzLT5kaGQpOwotCQkJCQkJcGt0X2J1Zl9mcmVlX3NrYihwa3QpOwotCQkJCQkJZGhkX29zX3NkdW5sb2NrX3J4cShidXMtPmRoZCk7Ci0JCQkJCX0KLQkJCQkJY29udGludWU7CiAJCQkJfSBlbHNlIHsKIAkJCQkJREhEX0VSUk9SKCgiJXMgKG5leHRsZW4pOiByZWFkYWhlYWQgb24gY29udHJvbCIgIiBwYWNrZXQgJWQ/XG4iLAogCQkJCQkJX19mdW5jX18sIHNlcSkpOwogCQkJCQkvKiBGb3JjZSByZXRyeSB3L25vcm1hbCBoZWFkZXIgcmVhZCAqLwogCQkJCQlidXMtPm5leHRsZW4gPSAwOwogCQkJCQlkaGRzZGlvX3J4ZmFpbChidXMsIGZhbHNlLCB0cnVlKTsKLQkJCQkJZGhkX29zX3NkbG9ja19yeHEoYnVzLT5kaGQpOwotCQkJCQlQS1RGUkVFMigpOwotCQkJCQlkaGRfb3Nfc2R1bmxvY2tfcnhxKGJ1cy0+ZGhkKTsKLQkJCQkJY29udGludWU7CiAJCQkJfQorCQkJCWRoZHNkaW9fcGt0ZnJlZTIoYnVzLCBwa3QpOworCQkJCWNvbnRpbnVlOwogCQkJfQogCiAJCQlpZiAoKGJ1cy0+YnVzID09IFNQSV9CVVMpICYmICFidXMtPnVzZWJ1ZnBvb2wpIHsKQEAgLTM5MTUsMTEgKzM4NzUsOCBAQAogCQkJaWYgKChkb2ZmIDwgU0RQQ01fSERSTEVOKSB8fCAoZG9mZiA+IGxlbikpIHsKIAkJCQlESERfRVJST1IoKCIlcyAobmV4dGxlbik6IGJhZCBkYXRhIG9mZnNldCAlZDogSFcgbGVuICVkIG1pbiAlZFxuIiwKIAkJCQkJX19mdW5jX18sIGRvZmYsIGxlbiwgU0RQQ01fSERSTEVOKSk7Ci0JCQkJZGhkX29zX3NkbG9ja19yeHEoYnVzLT5kaGQpOwotCQkJCVBLVEZSRUUyKCk7Ci0JCQkJZGhkX29zX3NkdW5sb2NrX3J4cShidXMtPmRoZCk7Ci0JCQkJQVNTRVJUKDApOwogCQkJCWRoZHNkaW9fcnhmYWlsKGJ1cywgZmFsc2UsIGZhbHNlKTsKKwkJCQlkaGRzZGlvX3BrdGZyZWUyKGJ1cywgcGt0KTsKIAkJCQljb250aW51ZTsKIAkJCX0KIApAQCAtMzkzMSwxMiArMzg4OCwxMSBAQAogCQkJYnJlYWs7CiAKIAkJLyogUmVhZCBmcmFtZSBoZWFkZXIgKGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSkgKi8KLQkJc2RyZXQgPQotCQkgICAgZGhkX2JjbXNkaF9yZWN2X2J1ZihidXMsIGJjbXNkaF9jdXJfc2J3YWQoc2RoKSwgU0RJT19GVU5DXzIsCi0JCQkJCUYyU1lOQywgYnVzLT5yeGhkciwgZmlyc3RyZWFkLCBOVUxMLAotCQkJCQlOVUxMLCBOVUxMKTsKKwkJc2RyZXQgPSBiY21zZGhfcmVjdl9idWYoYnVzLCBiY21zZGhfY3VyX3Nid2FkKHNkaCksCisJCQkJU0RJT19GVU5DXzIsIEYyU1lOQywgYnVzLT5yeGhkciwgZmlyc3RyZWFkLAorCQkJCU5VTEwsIE5VTEwsIE5VTEwpOwogCQlidXMtPmYycnhoZHJzKys7Ci0JCUFTU0VSVChzZHJldCAhPSBCQ01FX1BFTkRJTkcpOworCQlBU1NFUlQoc2RyZXQgIT0gLUJDTUVfUEVORElORyk7CiAKIAkJaWYgKHNkcmV0IDwgMCkgewogCQkJREhEX0VSUk9SKCgiJXM6IFJYSEVBREVSIEZBSUxFRDogJWRcbiIsIF9fZnVuY19fLApAQCAtMzk0Niw4ICszOTAyLDExIEBACiAJCQljb250aW51ZTsKIAkJfQogI2lmZGVmIERIRF9ERUJVRwotCQlpZiAoREhEX0JZVEVTX09OKCkgfHwgREhEX0hEUlNfT04oKSkKLQkJCXByaGV4KCJSeEhkciIsIGJ1cy0+cnhoZHIsIFNEUENNX0hEUkxFTik7CisJCWlmIChESERfQllURVNfT04oKSB8fCBESERfSERSU19PTigpKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiUnhIZHI6XG4iKTsKKwkJCXByaW50X2hleF9kdW1wX2J5dGVzKCIiLCBEVU1QX1BSRUZJWF9PRkZTRVQsCisJCQkJCSAgICAgYnVzLT5yeGhkciwgU0RQQ01fSERSTEVOKTsKKwkJfQogI2VuZGlmCiAKIAkJLyogRXh0cmFjdCBoYXJkd2FyZSBoZWFkZXIgZmllbGRzICovCkBAIC00MDA2LDE3ICszOTY1LDEzIEBACiAJCS8qIEhhbmRsZSBGbG93IENvbnRyb2wgKi8KIAkJZmNiaXRzID0gU0RQQ01fRkNNQVNLX1ZBTFVFKCZidXMtPnJ4aGRyW1NEUENNX0ZSQU1FVEFHX0xFTl0pOwogCi0JCWRlbHRhID0gMDsKLQkJaWYgKH5idXMtPmZsb3djb250cm9sICYgZmNiaXRzKSB7Ci0JCQlidXMtPmZjX3hvZmYrKzsKLQkJCWRlbHRhID0gMTsKLQkJfQotCQlpZiAoYnVzLT5mbG93Y29udHJvbCAmIH5mY2JpdHMpIHsKLQkJCWJ1cy0+ZmNfeG9uKys7Ci0JCQlkZWx0YSA9IDE7Ci0JCX0KKwkJaWYgKGJ1cy0+Zmxvd2NvbnRyb2wgIT0gZmNiaXRzKSB7CisJCQlpZiAofmJ1cy0+Zmxvd2NvbnRyb2wgJiBmY2JpdHMpCisJCQkJYnVzLT5mY194b2ZmKys7CiAKLQkJaWYgKGRlbHRhKSB7CisJCQlpZiAoYnVzLT5mbG93Y29udHJvbCAmIH5mY2JpdHMpCisJCQkJYnVzLT5mY194b24rKzsKKwogCQkJYnVzLT5mY19yY3ZkKys7CiAJCQlidXMtPmZsb3djb250cm9sID0gZmNiaXRzOwogCQl9CkBAIC00MDc3LDExICs0MDMyLDExIEBACiAJCX0KIAogCQlkaGRfb3Nfc2Rsb2NrX3J4cShidXMtPmRoZCk7Ci0JCXBrdCA9IHBrdF9idWZfZ2V0X3NrYihyZGxlbiArIGZpcnN0cmVhZCArIERIRF9TREFMSUdOKTsKKwkJcGt0ID0gYmNtX3BrdF9idWZfZ2V0X3NrYihyZGxlbiArIGZpcnN0cmVhZCArIERIRF9TREFMSUdOKTsKIAkJaWYgKCFwa3QpIHsKIAkJCS8qIEdpdmUgdXAgb24gZGF0YSwgcmVxdWVzdCBydHggb2YgZXZlbnRzICovCi0JCQlESERfRVJST1IoKCIlczogcGt0X2J1Zl9nZXRfc2tiIGZhaWxlZDogcmRsZW4gJWQgY2hhbiAlZFxuIiwKLQkJCQkgICBfX2Z1bmNfXywgcmRsZW4sIGNoYW4pKTsKKwkJCURIRF9FUlJPUigoIiVzOiBiY21fcGt0X2J1Zl9nZXRfc2tiIGZhaWxlZDogcmRsZW4gJWQgIgorCQkJCSJjaGFuICVkXG4iLCBfX2Z1bmNfXywgcmRsZW4sIGNoYW4pKTsKIAkJCWJ1cy0+ZGhkLT5yeF9kcm9wcGVkKys7CiAJCQlkaGRfb3Nfc2R1bmxvY2tfcnhxKGJ1cy0+ZGhkKTsKIAkJCWRoZHNkaW9fcnhmYWlsKGJ1cywgZmFsc2UsIFJFVFJZQ0hBTihjaGFuKSk7CkBAIC00MDk3LDEyICs0MDUyLDExIEBACiAJCVBLVEFMSUdOKHBrdCwgcmRsZW4sIERIRF9TREFMSUdOKTsKIAogCQkvKiBSZWFkIHRoZSByZW1haW5pbmcgZnJhbWUgZGF0YSAqLwotCQlzZHJldCA9Ci0JCSAgICBkaGRfYmNtc2RoX3JlY3ZfYnVmKGJ1cywgYmNtc2RoX2N1cl9zYndhZChzZGgpLCBTRElPX0ZVTkNfMiwKKwkJc2RyZXQgPSBiY21zZGhfcmVjdl9idWYoYnVzLCBiY21zZGhfY3VyX3Nid2FkKHNkaCksIFNESU9fRlVOQ18yLAogCQkJCQlGMlNZTkMsICgodTggKikgKHBrdC0+ZGF0YSkpLCByZGxlbiwKIAkJCQkJcGt0LCBOVUxMLCBOVUxMKTsKIAkJYnVzLT5mMnJ4ZGF0YSsrOwotCQlBU1NFUlQoc2RyZXQgIT0gQkNNRV9QRU5ESU5HKTsKKwkJQVNTRVJUKHNkcmV0ICE9IC1CQ01FX1BFTkRJTkcpOwogCiAJCWlmIChzZHJldCA8IDApIHsKIAkJCURIRF9FUlJPUigoIiVzOiByZWFkICVkICVzIGJ5dGVzIGZhaWxlZDogJWRcbiIsCkBAIC00MTEzLDcgKzQwNjcsNyBAQAogCQkJCSAgICAgICA/ICJkYXRhIiA6ICJ0ZXN0IikpLAogCQkJCSAgIHNkcmV0KSk7CiAJCQlkaGRfb3Nfc2Rsb2NrX3J4cShidXMtPmRoZCk7Ci0JCQlwa3RfYnVmX2ZyZWVfc2tiKHBrdCk7CisJCQliY21fcGt0X2J1Zl9mcmVlX3NrYihwa3QpOwogCQkJZGhkX29zX3NkdW5sb2NrX3J4cShidXMtPmRoZCk7CiAJCQlidXMtPmRoZC0+cnhfZXJyb3JzKys7CiAJCQlkaGRzZGlvX3J4ZmFpbChidXMsIHRydWUsIFJFVFJZQ0hBTihjaGFuKSk7CkBAIC00MTI1LDggKzQwNzksMTEgQEAKIAkJbWVtY3B5KHBrdC0+ZGF0YSwgYnVzLT5yeGhkciwgZmlyc3RyZWFkKTsKIAogI2lmZGVmIERIRF9ERUJVRwotCQlpZiAoREhEX0JZVEVTX09OKCkgJiYgREhEX0RBVEFfT04oKSkKLQkJCXByaGV4KCJSeCBEYXRhIiwgcGt0LT5kYXRhLCBsZW4pOworCQlpZiAoREhEX0JZVEVTX09OKCkgJiYgREhEX0RBVEFfT04oKSkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIlJ4IERhdGE6XG4iKTsKKwkJCXByaW50X2hleF9kdW1wX2J5dGVzKCIiLCBEVU1QX1BSRUZJWF9PRkZTRVQsCisJCQkJCSAgICAgcGt0LT5kYXRhLCBsZW4pOworCQl9CiAjZW5kaWYKIAogZGVsaXZlcjoKQEAgLTQxMzcsNyArNDA5NCwxMCBAQAogCQkJCQlfX2Z1bmNfXywgbGVuKSk7CiAjaWZkZWYgREhEX0RFQlVHCiAJCQkJaWYgKERIRF9HTE9NX09OKCkpIHsKLQkJCQkJcHJoZXgoIkdsb20gRGF0YSIsIHBrdC0+ZGF0YSwgbGVuKTsKKwkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIkdsb20gRGF0YTpcbiIpOworCQkJCQlwcmludF9oZXhfZHVtcF9ieXRlcygiIiwKKwkJCQkJCQkgICAgIERVTVBfUFJFRklYX09GRlNFVCwKKwkJCQkJCQkgICAgIHBrdC0+ZGF0YSwgbGVuKTsKIAkJCQl9CiAjZW5kaWYKIAkJCQlfX3NrYl90cmltKHBrdCwgbGVuKTsKQEAgLTQxNjYsMTMgKzQxMjYsMTMgQEAKIAogCQlpZiAocGt0LT5sZW4gPT0gMCkgewogCQkJZGhkX29zX3NkbG9ja19yeHEoYnVzLT5kaGQpOwotCQkJcGt0X2J1Zl9mcmVlX3NrYihwa3QpOworCQkJYmNtX3BrdF9idWZfZnJlZV9za2IocGt0KTsKIAkJCWRoZF9vc19zZHVubG9ja19yeHEoYnVzLT5kaGQpOwogCQkJY29udGludWU7CiAJCX0gZWxzZSBpZiAoZGhkX3Byb3RfaGRycHVsbChidXMtPmRoZCwgJmlmaWR4LCBwa3QpICE9IDApIHsKIAkJCURIRF9FUlJPUigoIiVzOiByeCBwcm90b2NvbCBlcnJvclxuIiwgX19mdW5jX18pKTsKIAkJCWRoZF9vc19zZGxvY2tfcnhxKGJ1cy0+ZGhkKTsKLQkJCXBrdF9idWZfZnJlZV9za2IocGt0KTsKKwkJCWJjbV9wa3RfYnVmX2ZyZWVfc2tiKHBrdCk7CiAJCQlkaGRfb3Nfc2R1bmxvY2tfcnhxKGJ1cy0+ZGhkKTsKIAkJCWJ1cy0+ZGhkLT5yeF9lcnJvcnMrKzsKIAkJCWNvbnRpbnVlOwpAQCAtNDI0NSwxNiArNDIwNSwxNiBAQAogCiAJLyoKIAkgKiBGbG93IENvbnRyb2wgaGFzIGJlZW4gbW92ZWQgaW50byB0aGUgUlggaGVhZGVycyBhbmQgdGhpcyBvdXQgb2YgYmFuZAotCSAqIG1ldGhvZCBpc24ndCB1c2VkIGFueSBtb3JlLiAgTGVhZSB0aGlzIGhlcmUgZm9yIHBvc3NpYmx5Ci0JICogcmVtYWluaW5nIGJhY2t3YXJkCi0JICogY29tcGF0aWJsZSB3aXRoIG9sZGVyIGRvbmdsZXMKKwkgKiBtZXRob2QgaXNuJ3QgdXNlZCBhbnkgbW9yZS4KKwkgKiByZW1haW5pbmcgYmFja3dhcmQgY29tcGF0aWJsZSB3aXRoIG9sZGVyIGRvbmdsZXMuCiAJICovCiAJaWYgKGhtYl9kYXRhICYgSE1CX0RBVEFfRkMpIHsKLQkJZmNiaXRzID0KLQkJICAgIChobWJfZGF0YSAmIEhNQl9EQVRBX0ZDREFUQV9NQVNLKSA+PiBITUJfREFUQV9GQ0RBVEFfU0hJRlQ7CisJCWZjYml0cyA9IChobWJfZGF0YSAmIEhNQl9EQVRBX0ZDREFUQV9NQVNLKSA+PgorCQkJCQkJCUhNQl9EQVRBX0ZDREFUQV9TSElGVDsKIAogCQlpZiAoZmNiaXRzICYgfmJ1cy0+Zmxvd2NvbnRyb2wpCiAJCQlidXMtPmZjX3hvZmYrKzsKKwogCQlpZiAoYnVzLT5mbG93Y29udHJvbCAmIH5mY2JpdHMpCiAJCQlidXMtPmZjX3hvbisrOwogCkBAIC00NDU0LDcgKzQ0MTQsNyBAQAogCQkJCQlGMlNZTkMsICh1OCAqKSBidXMtPmN0cmxfZnJhbWVfYnVmLAogCQkJCQkodTMyKSBidXMtPmN0cmxfZnJhbWVfbGVuLCBOVUxMLAogCQkJCQlOVUxMLCBOVUxMKTsKLQkJQVNTRVJUKHJldCAhPSBCQ01FX1BFTkRJTkcpOworCQlBU1NFUlQocmV0ICE9IC1CQ01FX1BFTkRJTkcpOwogCiAJCWlmIChyZXQgPCAwKSB7CiAJCQkvKiBPbiBmYWlsdXJlLCBhYm9ydCB0aGUgY29tbWFuZCBhbmQKQEAgLTQ0OTMsNyArNDQ1Myw3IEBACiAJfQogCS8qIFNlbmQgcXVldWVkIGZyYW1lcyAobGltaXQgMSBpZiByeCBtYXkgc3RpbGwgYmUgcGVuZGluZykgKi8KIAllbHNlIGlmICgoYnVzLT5jbGtzdGF0ZSA9PSBDTEtfQVZBSUwpICYmICFidXMtPmZjc3RhdGUgJiYKLQkJIHBrdHFfbWxlbigmYnVzLT50eHEsIH5idXMtPmZsb3djb250cm9sKSAmJiB0eGxpbWl0CisJCSBiY21fcGt0cV9tbGVuKCZidXMtPnR4cSwgfmJ1cy0+Zmxvd2NvbnRyb2wpICYmIHR4bGltaXQKIAkJICYmIERBVEFPSyhidXMpKSB7CiAJCWZyYW1lY250ID0gcnhkb25lID8gdHhsaW1pdCA6IG1pbih0eGxpbWl0LCBkaGRfdHhtaW5tYXgpOwogCQlmcmFtZWNudCA9IGRoZHNkaW9fc2VuZGZyb21xKGJ1cywgZnJhbWVjbnQpOwpAQCAtNDUxNCw3ICs0NDc0LDcgQEAKIAkJCSJJX0NISVBBQ1RJVkUgaW50ZXJydXB0XG4iLCBfX2Z1bmNfXykpOwogCQlyZXNjaGVkID0gdHJ1ZTsKIAl9IGVsc2UgaWYgKGJ1cy0+aW50c3RhdHVzIHx8IGJ1cy0+aXBlbmQgfHwKLQkJKCFidXMtPmZjc3RhdGUgJiYgcGt0cV9tbGVuKCZidXMtPnR4cSwgfmJ1cy0+Zmxvd2NvbnRyb2wpICYmCisJCSghYnVzLT5mY3N0YXRlICYmIGJjbV9wa3RxX21sZW4oJmJ1cy0+dHhxLCB+YnVzLT5mbG93Y29udHJvbCkgJiYKIAkJCURBVEFPSyhidXMpKSB8fCBQS1RfQVZBSUxBQkxFKCkpIHsKIAkJcmVzY2hlZCA9IHRydWU7CiAJfQpAQCAtNDY0OCwxMSArNDYwOCwxMiBAQAogCiAJCS8qIEFsbG9jYXRlIGFuIGFwcHJvcHJpYXRlLXNpemVkIHBhY2tldCAqLwogCQlsZW4gPSBidXMtPnBrdGdlbl9sZW47Ci0JCXBrdCA9IHBrdF9idWZfZ2V0X3NrYigKKwkJcGt0ID0gYmNtX3BrdF9idWZfZ2V0X3NrYigKIAkJCShsZW4gKyBTRFBDTV9IRFJMRU4gKyBTRFBDTV9URVNUX0hEUkxFTiArIERIRF9TREFMSUdOKSwKIAkJCXRydWUpOwogCQlpZiAoIXBrdCkgewotCQkJREhEX0VSUk9SKCgiJXM6IHBrdF9idWZfZ2V0X3NrYiBmYWlsZWQhXG4iLCBfX2Z1bmNfXykpOworCQkJREhEX0VSUk9SKCgiJXM6IGJjbV9wa3RfYnVmX2dldF9za2IgZmFpbGVkIVxuIiwKKwkJCQlfX2Z1bmNfXykpOwogCQkJYnJlYWs7CiAJCX0KIAkJUEtUQUxJR04ocGt0LCAobGVuICsgU0RQQ01fSERSTEVOICsgU0RQQ01fVEVTVF9IRFJMRU4pLApAQCAtNDY3OSw3ICs0NjQwLDcgQEAKIAkJZGVmYXVsdDoKIAkJCURIRF9FUlJPUigoIlVucmVjb2duaXplZCBwa3RnZW4gbW9kZSAlZFxuIiwKIAkJCQkgICBidXMtPnBrdGdlbl9tb2RlKSk7Ci0JCQlwa3RfYnVmX2ZyZWVfc2tiKHBrdCwgdHJ1ZSk7CisJCQliY21fcGt0X2J1Zl9mcmVlX3NrYihwa3QsIHRydWUpOwogCQkJYnVzLT5wa3RnZW5fY291bnQgPSAwOwogCQkJcmV0dXJuOwogCQl9CkBAIC00Njk3LDggKzQ2NTgsOSBAQAogI2lmZGVmIERIRF9ERUJVRwogCQlpZiAoREhEX0JZVEVTX09OKCkgJiYgREhEX0RBVEFfT04oKSkgewogCQkJZGF0YSA9ICh1OCAqKSAocGt0LT5kYXRhKSArIFNEUENNX0hEUkxFTjsKLQkJCXByaGV4KCJkaGRzZGlvX3BrdGdlbjogVHggRGF0YSIsIGRhdGEsCi0JCQkgICAgICBwa3QtPmxlbiAtIFNEUENNX0hEUkxFTik7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiZGhkc2Rpb19wa3RnZW46IFR4IERhdGE6XG4iKTsKKwkJCXByaW50X2hleF9kdW1wX2J5dGVzKCIiLCBEVU1QX1BSRUZJWF9PRkZTRVQsIGRhdGEsCisJCQkJCSAgICAgcGt0LT5sZW4gLSBTRFBDTV9IRFJMRU4pOwogCQl9CiAjZW5kaWYKIApAQCAtNDcyNywxMCArNDY4OSwxMCBAQAogCXU4ICpkYXRhOwogCiAJLyogQWxsb2NhdGUgdGhlIHBhY2tldCAqLwotCXBrdCA9IHBrdF9idWZfZ2V0X3NrYihTRFBDTV9IRFJMRU4gKyBTRFBDTV9URVNUX0hEUkxFTiArIERIRF9TREFMSUdOLAotCQkJdHJ1ZSk7CisJcGt0ID0gYmNtX3BrdF9idWZfZ2V0X3NrYihTRFBDTV9IRFJMRU4gKyBTRFBDTV9URVNUX0hEUkxFTiArCisJCURIRF9TREFMSUdOLCB0cnVlKTsKIAlpZiAoIXBrdCkgewotCQlESERfRVJST1IoKCIlczogcGt0X2J1Zl9nZXRfc2tiIGZhaWxlZCFcbiIsIF9fZnVuY19fKSk7CisJCURIRF9FUlJPUigoIiVzOiBiY21fcGt0X2J1Zl9nZXRfc2tiIGZhaWxlZCFcbiIsIF9fZnVuY19fKSk7CiAJCXJldHVybjsKIAl9CiAJUEtUQUxJR04ocGt0LCAoU0RQQ01fSERSTEVOICsgU0RQQ01fVEVTVF9IRFJMRU4pLCBESERfU0RBTElHTik7CkBAIC00NzYyLDcgKzQ3MjQsNyBAQAogCWlmIChwa3RsZW4gPCBTRFBDTV9URVNUX0hEUkxFTikgewogCQlESERfRVJST1IoKCJkaGRzZGlvX3Jlc3RyY3Y6IHRvc3MgcnVudCBmcmFtZSwgcGt0bGVuICVkXG4iLAogCQkJICAgcGt0bGVuKSk7Ci0JCXBrdF9idWZfZnJlZV9za2IocGt0LCBmYWxzZSk7CisJCWJjbV9wa3RfYnVmX2ZyZWVfc2tiKHBrdCwgZmFsc2UpOwogCQlyZXR1cm47CiAJfQogCkBAIC00NzgwLDcgKzQ3NDIsNyBAQAogCQkJREhEX0VSUk9SKCgiZGhkc2Rpb190ZXN0cmN2OiBmcmFtZSBsZW5ndGggbWlzbWF0Y2gsICIKIAkJCQkicGt0bGVuICVkIHNlcSAlZCIgIiBjbWQgJWQgZXh0cmEgJWQgbGVuICVkXG4iLAogCQkJCXBrdGxlbiwgc2VxLCBjbWQsIGV4dHJhLCBsZW4pKTsKLQkJCXBrdF9idWZfZnJlZV9za2IocGt0LCBmYWxzZSk7CisJCQliY21fcGt0X2J1Zl9mcmVlX3NrYihwa3QsIGZhbHNlKTsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAgLTQ3OTUsMTQgKzQ3NTcsMTQgQEAKIAkJCWJ1cy0+cGt0Z2VuX3NlbnQrKzsKIAkJfSBlbHNlIHsKIAkJCWJ1cy0+cGt0Z2VuX2ZhaWwrKzsKLQkJCXBrdF9idWZfZnJlZV9za2IocGt0LCBmYWxzZSk7CisJCQliY21fcGt0X2J1Zl9mcmVlX3NrYihwa3QsIGZhbHNlKTsKIAkJfQogCQlidXMtPnBrdGdlbl9yY3ZkKys7CiAJCWJyZWFrOwogCiAJY2FzZSBTRFBDTV9URVNUX0VDSE9SU1A6CiAJCWlmIChidXMtPmV4dF9sb29wKSB7Ci0JCQlwa3RfYnVmX2ZyZWVfc2tiKHBrdCwgZmFsc2UpOworCQkJYmNtX3BrdF9idWZfZnJlZV9za2IocGt0LCBmYWxzZSk7CiAJCQlidXMtPnBrdGdlbl9yY3ZkKys7CiAJCQlicmVhazsKIAkJfQpAQCAtNDgxNSwxMiArNDc3NywxMiBAQAogCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0JCXBrdF9idWZfZnJlZV9za2IocGt0LCBmYWxzZSk7CisJCWJjbV9wa3RfYnVmX2ZyZWVfc2tiKHBrdCwgZmFsc2UpOwogCQlidXMtPnBrdGdlbl9yY3ZkKys7CiAJCWJyZWFrOwogCiAJY2FzZSBTRFBDTV9URVNUX0RJU0NBUkQ6Ci0JCXBrdF9idWZfZnJlZV9za2IocGt0LCBmYWxzZSk7CisJCWJjbV9wa3RfYnVmX2ZyZWVfc2tiKHBrdCwgZmFsc2UpOwogCQlidXMtPnBrdGdlbl9yY3ZkKys7CiAJCWJyZWFrOwogCkBAIC00ODMwLDcgKzQ3OTIsNyBAQAogCQlESERfSU5GTygoImRoZHNkaW9fdGVzdHJjdjogdW5zdXBwb3J0ZWQgb3IgdW5rbm93biBjb21tYW5kLCAiCiAJCQkicGt0bGVuICVkIHNlcSAlZCIgIiBjbWQgJWQgZXh0cmEgJWQgbGVuICVkXG4iLAogCQkJcGt0bGVuLCBzZXEsIGNtZCwgZXh0cmEsIGxlbikpOwotCQlwa3RfYnVmX2ZyZWVfc2tiKHBrdCwgZmFsc2UpOworCQliY21fcGt0X2J1Zl9mcmVlX3NrYihwa3QsIGZhbHNlKTsKIAkJYnJlYWs7CiAJfQogCkBAIC00OTUyLDcgKzQ5MTQsNyBAQAogCiAJLyogQWRkcmVzcyBjb3VsZCBiZSB6ZXJvIGlmIENPTlNPTEUgOj0gMCBpbiBkb25nbGUgTWFrZWZpbGUgKi8KIAlpZiAoYnVzLT5jb25zb2xlX2FkZHIgPT0gMCkKLQkJcmV0dXJuIEJDTUVfVU5TVVBQT1JURUQ7CisJCXJldHVybiAtRU5PVFNVUFA7CiAKIAkvKiBFeGNsdXNpdmUgYnVzIGFjY2VzcyAqLwogCWRoZF9vc19zZGxvY2soYnVzLT5kaGQpOwpAQCAtNDk2MCw3ICs0OTIyLDcgQEAKIAkvKiBEb24ndCBhbGxvdyBpbnB1dCBpZiBkb25nbGUgaXMgaW4gcmVzZXQgKi8KIAlpZiAoYnVzLT5kaGQtPmRvbmdsZV9yZXNldCkgewogCQlkaGRfb3Nfc2R1bmxvY2soYnVzLT5kaGQpOwotCQlyZXR1cm4gQkNNRV9OT1RSRUFEWTsKKwkJcmV0dXJuIC1FUEVSTTsKIAl9CiAKIAkvKiBSZXF1ZXN0IGNsb2NrIHRvIGFsbG93IFNESU8gYWNjZXNzZXMgKi8KQEAgLTQ5OTEsNyArNDk1Myw3IEBACiAJLyogQnVtcCBkb25nbGUgYnkgc2VuZGluZyBhbiBlbXB0eSBldmVudCBwa3QuCiAJICogc2RwY21fc2VuZHVwIChSWCkgY2hlY2tzIGZvciB2aXJ0dWFsIGNvbnNvbGUgaW5wdXQuCiAJICovCi0JcGt0ID0gcGt0X2J1Zl9nZXRfc2tiKDQgKyBTRFBDTV9SRVNFUlZFKTsKKwlwa3QgPSBiY21fcGt0X2J1Zl9nZXRfc2tiKDQgKyBTRFBDTV9SRVNFUlZFKTsKIAlpZiAoKHBrdCAhPSBOVUxMKSAmJiBidXMtPmNsa3N0YXRlID09IENMS19BVkFJTCkKIAkJZGhkc2Rpb190eHBrdChidXMsIHBrdCwgU0RQQ01fRVZFTlRfQ0hBTk5FTCwgdHJ1ZSk7CiAKQEAgLTUwODksNyArNTA1MSw3IEBACiAJLyogQ2hlY2sgdGhlIFZlbmRvciBJRCAqLwogCXN3aXRjaCAodmVuaWQpIHsKIAljYXNlIDB4MDAwMDoKLQljYXNlIFZFTkRPUl9CUk9BRENPTToKKwljYXNlIFBDSV9WRU5ET1JfSURfQlJPQURDT006CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCURIRF9FUlJPUigoIiVzOiB1bmtub3duIHZlbmRvcjogMHglMDR4XG4iLCBfX2Z1bmNfXywgdmVuaWQpKTsKQEAgLTUxNzksNyArNTE0MSw3IEBACiAJLyogaWYgZmlybXdhcmUgcGF0aCBwcmVzZW50IHRyeSB0byBkb3dubG9hZCBhbmQgYnJpbmcgdXAgYnVzICovCiAJcmV0ID0gZGhkX2J1c19zdGFydChidXMtPmRoZCk7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCWlmIChyZXQgPT0gQkNNRV9OT1RVUCkgeworCQlpZiAocmV0ID09IC1FTk9MSU5LKSB7CiAJCQlESERfRVJST1IoKCIlczogZG9uZ2xlIGlzIG5vdCByZXNwb25kaW5nXG4iLCBfX2Z1bmNfXykpOwogCQkJZ290byBmYWlsOwogCQl9CkBAIC01MjE1LDcgKzUxNzcsMTAgQEAKIAogI2VuZGlmCQkJCS8qIERIRF9ERUJVRyAqLwogCi0JLyogRm9yY2UgUExMIG9mZiB1bnRpbCBzaV9hdHRhY2goKSBwcm9ncmFtcyBQTEwgY29udHJvbCByZWdzICovCisJLyoKKwkgKiBGb3JjZSBQTEwgb2ZmIHVudGlsIGRoZHNkaW9fY2hpcF9hdHRhY2goKQorCSAqIHByb2dyYW1zIFBMTCBjb250cm9sIHJlZ3MKKwkgKi8KIAogCWJjbXNkaF9jZmdfd3JpdGUoc2RoLCBTRElPX0ZVTkNfMSwgU0JTRElPX0ZVTkMxX0NISVBDTEtDU1IsCiAJCQkgREhEX0lOSVRfQ0xLQ1RMMSwgJmVycik7CkBAIC01MjgxLDM0ICs1MjQ2LDI2IEBACiAJfQogI2VuZGlmCQkJCS8qIERIRF9ERUJVRyAqLwogCi0JLyogc2lfYXR0YWNoKCkgd2lsbCBwcm92aWRlIGFuIFNJIGhhbmRsZSBhbmQgc2NhbiB0aGUgYmFja3BsYW5lICovCi0JYnVzLT5zaWggPSBzaV9hdHRhY2goKHVpbnQpIGRldmlkLCByZWdzdmEsIERIRF9CVVMsIHNkaCwKLQkJCQkgICAmYnVzLT52YXJzLCAmYnVzLT52YXJzeik7Ci0JaWYgKCEoYnVzLT5zaWgpKSB7Ci0JCURIRF9FUlJPUigoIiVzOiBzaV9hdHRhY2ggZmFpbGVkIVxuIiwgX19mdW5jX18pKTsKKwlpZiAoZGhkc2Rpb19jaGlwX2F0dGFjaChidXMsIHJlZ3N2YSkpIHsKKwkJREhEX0VSUk9SKCgiJXM6IGRoZHNkaW9fY2hpcF9hdHRhY2ggZmFpbGVkIVxuIiwgX19mdW5jX18pKTsKIAkJZ290byBmYWlsOwogCX0KIAotCWJjbXNkaF9jaGlwaW5mbyhzZGgsIGJ1cy0+c2loLT5jaGlwLCBidXMtPnNpaC0+Y2hpcHJldik7CisJYmNtc2RoX2NoaXBpbmZvKHNkaCwgYnVzLT5jaS0+Y2hpcCwgYnVzLT5jaS0+Y2hpcHJldik7CiAKLQlpZiAoIWRoZHNkaW9fY2hpcG1hdGNoKCh1MTYpIGJ1cy0+c2loLT5jaGlwKSkgeworCWlmICghZGhkc2Rpb19jaGlwbWF0Y2goKHUxNikgYnVzLT5jaS0+Y2hpcCkpIHsKIAkJREhEX0VSUk9SKCgiJXM6IHVuc3VwcG9ydGVkIGNoaXA6IDB4JTA0eFxuIiwKLQkJCSAgIF9fZnVuY19fLCBidXMtPnNpaC0+Y2hpcCkpOworCQkJICAgX19mdW5jX18sIGJ1cy0+Y2ktPmNoaXApKTsKIAkJZ290byBmYWlsOwogCX0KIAotCXNpX3NkaW9kX2RyaXZlX3N0cmVuZ3RoX2luaXQoYnVzLT5zaWgsIGRoZF9zZGlvZF9kcml2ZV9zdHJlbmd0aCk7CisJZGhkc2Rpb19zZGlvZF9kcml2ZV9zdHJlbmd0aF9pbml0KGJ1cywgZGhkX3NkaW9kX2RyaXZlX3N0cmVuZ3RoKTsKIAogCS8qIEdldCBpbmZvIG9uIHRoZSBBUk0gYW5kIFNPQ1JBTSBjb3Jlcy4uLiAqLwogCWlmICghREhEX05PUE1VKGJ1cykpIHsKLQkJaWYgKChzaV9zZXRjb3JlKGJ1cy0+c2loLCBBUk03U19DT1JFX0lELCAwKSkgfHwKLQkJICAgIChzaV9zZXRjb3JlKGJ1cy0+c2loLCBBUk1DTTNfQ09SRV9JRCwgMCkpKSB7Ci0JCQlidXMtPmFybXJldiA9IHNpX2NvcmVyZXYoYnVzLT5zaWgpOwotCQl9IGVsc2UgewotCQkJREhEX0VSUk9SKCgiJXM6IGZhaWxlZCB0byBmaW5kIEFSTSBjb3JlIVxuIiwgX19mdW5jX18pKTsKLQkJCWdvdG8gZmFpbDsKLQkJfQotCQlidXMtPm9yaWdfcmFtc2l6ZSA9IHNpX3NvY3JhbV9zaXplKGJ1cy0+c2loKTsKKwkJYnVzLT5hcm1yZXYgPSBTQkNPUkVSRVYoYmNtc2RoX3JlZ19yZWFkKGJ1cy0+c2RoLAorCQkJQ09SRV9TQihidXMtPmNpLT5hcm1jb3JlYmFzZSwgc2JpZGhpZ2gpLCA0KSk7CisJCWJ1cy0+b3JpZ19yYW1zaXplID0gYnVzLT5jaS0+cmFtc2l6ZTsKIAkJaWYgKCEoYnVzLT5vcmlnX3JhbXNpemUpKSB7CiAJCQlESERfRVJST1IoKCIlczogZmFpbGVkIHRvIGZpbmQgU09DUkFNIG1lbW9yeSFcbiIsCiAJCQkJICAgX19mdW5jX18pKTsKQEAgLTUzMjIsMjIgKzUyNzksMTIgQEAKIAkJCSAgIGJ1cy0+cmFtc2l6ZSwgYnVzLT5vcmlnX3JhbXNpemUpKTsKIAl9CiAKLQkvKiAuLi5idXQgbm9ybWFsbHkgZGVhbCB3aXRoIHRoZSBTRFBDTURFViBjb3JlICovCi0JYnVzLT5yZWdzID0gc2lfc2V0Y29yZShidXMtPnNpaCwgUENNQ0lBX0NPUkVfSUQsIDApOwotCWlmICghYnVzLT5yZWdzKSB7Ci0JCWJ1cy0+cmVncyA9IHNpX3NldGNvcmUoYnVzLT5zaWgsIFNESU9EX0NPUkVfSUQsIDApOwotCQlpZiAoIWJ1cy0+cmVncykgewotCQkJREhEX0VSUk9SKCgiJXM6IGZhaWxlZCB0byBmaW5kIFNESU9ERVYgY29yZSFcbiIsCi0JCQkJCV9fZnVuY19fKSk7Ci0JCQlnb3RvIGZhaWw7Ci0JCX0KLQl9Ci0JYnVzLT5zZHBjbXJldiA9IHNpX2NvcmVyZXYoYnVzLT5zaWgpOworCWJ1cy0+cmVncyA9ICh2b2lkICopYnVzLT5jaS0+YnVzY29yZWJhc2U7CiAKIAkvKiBTZXQgY29yZSBjb250cm9sIHNvIGFuIFNESU8gcmVzZXQgZG9lcyBhIGJhY2twbGFuZSByZXNldCAqLwogCU9SX1JFRygmYnVzLT5yZWdzLT5jb3JlY29udHJvbCwgQ0NfQlBSRVNFTik7CiAKLQlwa3RxX2luaXQoJmJ1cy0+dHhxLCAoUFJJT01BU0sgKyAxKSwgVFhRTEVOKTsKKwliY21fcGt0cV9pbml0KCZidXMtPnR4cSwgKFBSSU9NQVNLICsgMSksIFRYUUxFTik7CiAKIAkvKiBMb2NhdGUgYW4gYXBwcm9wcmlhdGVseS1hbGlnbmVkIHBvcnRpb24gb2YgaGRyYnVmICovCiAJYnVzLT5yeGhkciA9ICh1OCAqKSByb3VuZHVwKCh1bnNpZ25lZCBsb25nKSZidXMtPmhkcmJ1ZlswXSwgREhEX1NEQUxJR04pOwpAQCAtNTQyNSw3ICs1MzcyLDcgQEAKIAkvKiBRdWVyeSB0aGUgU0QgY2xvY2sgc3BlZWQgKi8KIAlpZiAoYmNtc2RoX2lvdmFyX29wKHNkaCwgInNkX2Rpdmlzb3IiLCBOVUxMLCAwLAogCQkJICAgICZidXMtPnNkX2Rpdmlzb3IsIHNpemVvZihzMzIpLAotCQkJICAgIGZhbHNlKSAhPSBCQ01FX09LKSB7CisJCQkgICAgZmFsc2UpICE9IDApIHsKIAkJREhEX0VSUk9SKCgiJXM6IGZhaWwgb24gJXMgZ2V0XG4iLCBfX2Z1bmNfXywgInNkX2Rpdmlzb3IiKSk7CiAJCWJ1cy0+c2RfZGl2aXNvciA9IC0xOwogCX0gZWxzZSB7CkBAIC01NDM1LDcgKzUzODIsNyBAQAogCiAJLyogUXVlcnkgdGhlIFNEIGJ1cyBtb2RlICovCiAJaWYgKGJjbXNkaF9pb3Zhcl9vcChzZGgsICJzZF9tb2RlIiwgTlVMTCwgMCwKLQkJCSAgICAmYnVzLT5zZF9tb2RlLCBzaXplb2YoczMyKSwgZmFsc2UpICE9IEJDTUVfT0spIHsKKwkJCSAgICAmYnVzLT5zZF9tb2RlLCBzaXplb2YoczMyKSwgZmFsc2UpICE9IDApIHsKIAkJREhEX0VSUk9SKCgiJXM6IGZhaWwgb24gJXMgZ2V0XG4iLCBfX2Z1bmNfXywgInNkX21vZGUiKSk7CiAJCWJ1cy0+c2RfbW9kZSA9IC0xOwogCX0gZWxzZSB7CkBAIC01NDQ2LDcgKzUzOTMsNyBAQAogCS8qIFF1ZXJ5IHRoZSBGMiBibG9jayBzaXplLCBzZXQgcm91bmR1cCBhY2NvcmRpbmdseSAqLwogCWZudW0gPSAyOwogCWlmIChiY21zZGhfaW92YXJfb3Aoc2RoLCAic2RfYmxvY2tzaXplIiwgJmZudW0sIHNpemVvZihzMzIpLAotCQkJICAgICZidXMtPmJsb2Nrc2l6ZSwgc2l6ZW9mKHMzMiksIGZhbHNlKSAhPSBCQ01FX09LKSB7CisJCQkgICAgJmJ1cy0+YmxvY2tzaXplLCBzaXplb2YoczMyKSwgZmFsc2UpICE9IDApIHsKIAkJYnVzLT5ibG9ja3NpemUgPSAwOwogCQlESERfRVJST1IoKCIlczogZmFpbCBvbiAlcyBnZXRcbiIsIF9fZnVuY19fLCAic2RfYmxvY2tzaXplIikpOwogCX0gZWxzZSB7CkBAIC01NDU5LDcgKzU0MDYsNyBAQAogCQkgZGVmYXVsdCB0byB1c2UgaWYgc3VwcG9ydGVkICovCiAJaWYgKGJjbXNkaF9pb3Zhcl9vcChzZGgsICJzZF9yeGNoYWluIiwgTlVMTCwgMCwKIAkJCSAgICAmYnVzLT5zZF9yeGNoYWluLCBzaXplb2YoczMyKSwKLQkJCSAgICBmYWxzZSkgIT0gQkNNRV9PSykgeworCQkJICAgIGZhbHNlKSAhPSAwKSB7CiAJCWJ1cy0+c2RfcnhjaGFpbiA9IGZhbHNlOwogCX0gZWxzZSB7CiAJCURIRF9JTkZPKCgiJXM6IGJ1cyBtb2R1bGUgKHRocm91Z2ggYmNtc2RoIEFQSSkgJXMgY2hhaW5pbmdcbiIsCkBAIC01NTA5LDEwICs1NDU2LDggQEAKIAkJYmNtc2RoX2ludHJfZGVyZWcoYnVzLT5zZGgpOwogCiAJCWlmIChidXMtPmRoZCkgewotCi0JCQlkaGRzZGlvX3JlbGVhc2VfZG9uZ2xlKGJ1cyk7Ci0KIAkJCWRoZF9kZXRhY2goYnVzLT5kaGQpOworCQkJZGhkc2Rpb19yZWxlYXNlX2RvbmdsZShidXMpOwogCQkJYnVzLT5kaGQgPSBOVUxMOwogCQl9CiAKQEAgLTU1NDgsMTMgKzU0OTMsMTAgQEAKIAlpZiAoYnVzLT5kaGQgJiYgYnVzLT5kaGQtPmRvbmdsZV9yZXNldCkKIAkJcmV0dXJuOwogCi0JaWYgKGJ1cy0+c2loKSB7CisJaWYgKGJ1cy0+Y2kpIHsKIAkJZGhkc2Rpb19jbGtjdGwoYnVzLCBDTEtfQVZBSUwsIGZhbHNlKTsKLSNpZiAhZGVmaW5lZChCQ01MWFNETU1DKQotCQlzaV93YXRjaGRvZyhidXMtPnNpaCwgNCk7Ci0jZW5kaWYJCQkJLyogIWRlZmluZWQoQkNNTFhTRE1NQykgKi8KIAkJZGhkc2Rpb19jbGtjdGwoYnVzLCBDTEtfTk9ORSwgZmFsc2UpOwotCQlzaV9kZXRhY2goYnVzLT5zaWgpOworCQlkaGRzZGlvX2NoaXBfZGV0YWNoKGJ1cyk7CiAJCWlmIChidXMtPnZhcnMgJiYgYnVzLT52YXJzeikKIAkJCWtmcmVlKGJ1cy0+dmFycyk7CiAJCWJ1cy0+dmFycyA9IE5VTEw7CkBAIC01NjQyLDcgKzU1ODQsNyBAQAogCiAJCXVsYXJyYXkgPSBrbWFsbG9jKGJ1cy0+cmFtc2l6ZSwgR0ZQX0FUT01JQyk7CiAJCWlmICghdWxhcnJheSkgewotCQkJYmNtZXJyb3IgPSBCQ01FX05PTUVNOworCQkJYmNtZXJyb3IgPSAtRU5PTUVNOwogCQkJZ290byBlcnI7CiAJCX0KIAkJLyogVXBsb2FkIGltYWdlIHRvIHZlcmlmeSBkb3dubG9hZGVkIGNvbnRlbnRzLiAqLwpAQCAtNTg2NSw3ICs1ODA3LDcgQEAKIAl9IGVsc2UgewogCQlESERfRVJST1IoKCIlczogZXJyb3IgcmVhZGluZyBudnJhbSBmaWxlOiAlZFxuIiwKIAkJCSAgIF9fZnVuY19fLCBsZW4pKTsKLQkJYmNtZXJyb3IgPSBCQ01FX1NESU9fRVJST1I7CisJCWJjbWVycm9yID0gLUVJTzsKIAl9CiAKIGVycjoKQEAgLTU5NTQsMTkgKzU4OTYsNiBAQAogCXJldHVybiBiY21lcnJvcjsKIH0KIAotc3RhdGljIGludAotZGhkX2JjbXNkaF9yZWN2X2J1ZihkaGRfYnVzX3QgKmJ1cywgdTMyIGFkZHIsIHVpbnQgZm4sIHVpbnQgZmxhZ3MsCi0JCSAgICB1OCAqYnVmLCB1aW50IG5ieXRlcywgc3RydWN0IHNrX2J1ZmYgKnBrdCwKLQkJICAgIGJjbXNkaF9jbXBsdF9mbl90IGNvbXBsZXRlLCB2b2lkICpoYW5kbGUpCi17Ci0JaW50IHN0YXR1czsKLQotCS8qIDQzMjk6IEdTUEkgY2hlY2sgKi8KLQlzdGF0dXMgPQotCSAgICBiY21zZGhfcmVjdl9idWYoYnVzLT5zZGgsIGFkZHIsIGZuLCBmbGFncywgYnVmLCBuYnl0ZXMsIHBrdCwKLQkJCSAgICBjb21wbGV0ZSwgaGFuZGxlKTsKLQlyZXR1cm4gc3RhdHVzOwotfQogCiBzdGF0aWMgaW50CiBkaGRfYmNtc2RoX3NlbmRfYnVmKGRoZF9idXNfdCAqYnVzLCB1MzIgYWRkciwgdWludCBmbiwgdWludCBmbGFncywKQEAgLTU5ODAsOCArNTkwOSw4IEBACiAKIHVpbnQgZGhkX2J1c19jaGlwKHN0cnVjdCBkaGRfYnVzICpidXMpCiB7Ci0JQVNTRVJUKGJ1cy0+c2loICE9IE5VTEwpOwotCXJldHVybiBidXMtPnNpaC0+Y2hpcDsKKwlBU1NFUlQoYnVzLT5jaSAhPSBOVUxMKTsKKwlyZXR1cm4gYnVzLT5jaS0+Y2hpcDsKIH0KIAogdm9pZCAqZGhkX2J1c19wdWIoc3RydWN0IGRoZF9idXMgKmJ1cykKQEAgLTYwMjMsNyArNTk1Miw3IEBACiAJCQlESERfVFJBQ0UoKCIlczogIFdMQU4gT0ZGIERPTkVcbiIsIF9fZnVuY19fKSk7CiAJCQkvKiBBcHAgY2FuIG5vdyByZW1vdmUgcG93ZXIgZnJvbSBkZXZpY2UgKi8KIAkJfSBlbHNlCi0JCQliY21lcnJvciA9IEJDTUVfU0RJT19FUlJPUjsKKwkJCWJjbWVycm9yID0gLUVJTzsKIAl9IGVsc2UgewogCQkvKiBBcHAgbXVzdCBoYXZlIHJlc3RvcmVkIHBvd2VyIHRvIGRldmljZSBiZWZvcmUgY2FsbGluZyAqLwogCkBAIC02MDU4LDE1ICs1OTg3LDQwNCBAQAogCQkJCQlESERfVFJBQ0UoKCIlczogV0xBTiBPTiBET05FXG4iLAogCQkJCQkJICAgX19mdW5jX18pKTsKIAkJCQl9IGVsc2UKLQkJCQkJYmNtZXJyb3IgPSBCQ01FX1NESU9fRVJST1I7CisJCQkJCWJjbWVycm9yID0gLUVJTzsKIAkJCX0gZWxzZQotCQkJCWJjbWVycm9yID0gQkNNRV9TRElPX0VSUk9SOworCQkJCWJjbWVycm9yID0gLUVJTzsKIAkJfSBlbHNlIHsKLQkJCWJjbWVycm9yID0gQkNNRV9OT1RET1dOOworCQkJYmNtZXJyb3IgPSAtRUlTQ09OTjsKIAkJCURIRF9FUlJPUigoIiVzOiBTZXQgREVWUkVTRVQ9ZmFsc2UgaW52b2tlZCB3aGVuIGRldmljZSAiCiAJCQkJImlzIG9uXG4iLCBfX2Z1bmNfXykpOwotCQkJYmNtZXJyb3IgPSBCQ01FX1NESU9fRVJST1I7CisJCQliY21lcnJvciA9IC1FSU87CiAJCX0KIAl9CiAJcmV0dXJuIGJjbWVycm9yOwogfQorCitzdGF0aWMgaW50CitkaGRzZGlvX2NoaXBfcmVjb2duaXRpb24oYmNtc2RoX2luZm9fdCAqc2RoLCBzdHJ1Y3QgY2hpcF9pbmZvICpjaSwgdm9pZCAqcmVncykKK3sKKwl1MzIgcmVnZGF0YTsKKworCS8qCisJICogR2V0IENDIGNvcmUgcmV2CisJICogQ2hpcGlkIGlzIGFzc3VtZSB0byBiZSBhdCBvZmZzZXQgMCBmcm9tIHJlZ3MgYXJnCisJICogRm9yIGRpZmZlcmVudCBjaGlwdHlwZXMgb3Igb2xkIHNkaW8gaG9zdHMgdy9vIGNoaXBjb21tb24sCisJICogb3RoZXIgd2F5cyBvZiByZWNvZ25pdGlvbiBzaG91bGQgYmUgYWRkZWQgaGVyZS4KKwkgKi8KKwljaS0+Y2Njb3JlYmFzZSA9ICh1MzIpcmVnczsKKwlyZWdkYXRhID0gYmNtc2RoX3JlZ19yZWFkKHNkaCwgQ09SRV9DQ19SRUcoY2ktPmNjY29yZWJhc2UsIGNoaXBpZCksIDQpOworCWNpLT5jaGlwID0gcmVnZGF0YSAmIENJRF9JRF9NQVNLOworCWNpLT5jaGlwcmV2ID0gKHJlZ2RhdGEgJiBDSURfUkVWX01BU0spID4+IENJRF9SRVZfU0hJRlQ7CisKKwlESERfSU5GTygoIiVzOiBjaGlwaWQ9MHgleCBjaGlwcmV2PSVkXG4iLAorCQlfX2Z1bmNfXywgY2ktPmNoaXAsIGNpLT5jaGlwcmV2KSk7CisKKwkvKiBBZGRyZXNzIG9mIGNvcmVzIGZvciBuZXcgY2hpcHMgc2hvdWxkIGJlIGFkZGVkIGhlcmUgKi8KKwlzd2l0Y2ggKGNpLT5jaGlwKSB7CisJY2FzZSBCQ000MzI5X0NISVBfSUQ6CisJCWNpLT5idXNjb3JlYmFzZSA9IEJDTTQzMjlfQ09SRV9CVVNfQkFTRTsKKwkJY2ktPnJhbWNvcmViYXNlID0gQkNNNDMyOV9DT1JFX1NPQ1JBTV9CQVNFOworCQljaS0+YXJtY29yZWJhc2UJPSBCQ000MzI5X0NPUkVfQVJNX0JBU0U7CisJCWNpLT5yYW1zaXplID0gQkNNNDMyOV9SQU1TSVpFOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlESERfRVJST1IoKCIlczogY2hpcGlkIDB4JXggaXMgbm90IHN1cHBvcnRlZFxuIiwKKwkJCV9fZnVuY19fLCBjaS0+Y2hpcCkpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZWdkYXRhID0gYmNtc2RoX3JlZ19yZWFkKHNkaCwKKwkJQ09SRV9TQihjaS0+Y2Njb3JlYmFzZSwgc2JpZGhpZ2gpLCA0KTsKKwljaS0+Y2NyZXYgPSBTQkNPUkVSRVYocmVnZGF0YSk7CisKKwlyZWdkYXRhID0gYmNtc2RoX3JlZ19yZWFkKHNkaCwKKwkJQ09SRV9DQ19SRUcoY2ktPmNjY29yZWJhc2UsIHBtdWNhcGFiaWxpdGllcyksIDQpOworCWNpLT5wbXVyZXYgPSByZWdkYXRhICYgUENBUF9SRVZfTUFTSzsKKworCXJlZ2RhdGEgPSBiY21zZGhfcmVnX3JlYWQoc2RoLCBDT1JFX1NCKGNpLT5idXNjb3JlYmFzZSwgc2JpZGhpZ2gpLCA0KTsKKwljaS0+YnVzY29yZXJldiA9IFNCQ09SRVJFVihyZWdkYXRhKTsKKwljaS0+YnVzY29yZXR5cGUgPSAocmVnZGF0YSAmIFNCSURIX0NDX01BU0spID4+IFNCSURIX0NDX1NISUZUOworCisJREhEX0lORk8oKCIlczogY2NyZXY9JWQsIHBtdXJldj0lZCwgYnVzY29yZSByZXYvdHlwZT0lZC8weCV4XG4iLAorCQlfX2Z1bmNfXywgY2ktPmNjcmV2LCBjaS0+cG11cmV2LAorCQljaS0+YnVzY29yZXJldiwgY2ktPmJ1c2NvcmV0eXBlKSk7CisKKwkvKiBnZXQgY2hpcGNvbW1vbiBjYXBhYmlsaXRlcyAqLworCWNpLT5jY2NhcHMgPSBiY21zZGhfcmVnX3JlYWQoc2RoLAorCQlDT1JFX0NDX1JFRyhjaS0+Y2Njb3JlYmFzZSwgY2FwYWJpbGl0aWVzKSwgNCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2RoZHNkaW9fY2hpcF9kaXNhYmxlY29yZShiY21zZGhfaW5mb190ICpzZGgsIHUzMiBjb3JlYmFzZSkKK3sKKwl1MzIgcmVnZGF0YTsKKworCXJlZ2RhdGEgPSBiY21zZGhfcmVnX3JlYWQoc2RoLAorCQlDT1JFX1NCKGNvcmViYXNlLCBzYnRtc3RhdGVsb3cpLCA0KTsKKwlpZiAocmVnZGF0YSAmIFNCVE1MX1JFU0VUKQorCQlyZXR1cm47CisKKwlyZWdkYXRhID0gYmNtc2RoX3JlZ19yZWFkKHNkaCwKKwkJQ09SRV9TQihjb3JlYmFzZSwgc2J0bXN0YXRlbG93KSwgNCk7CisJaWYgKChyZWdkYXRhICYgKFNJQ0ZfQ0xPQ0tfRU4gPDwgU0JUTUxfU0lDRl9TSElGVCkpICE9IDApIHsKKwkJLyoKKwkJICogc2V0IHRhcmdldCByZWplY3QgYW5kIHNwaW4gdW50aWwgYnVzeSBpcyBjbGVhcgorCQkgKiAocHJlc2VydmUgY29yZS1zcGVjaWZpYyBiaXRzKQorCQkgKi8KKwkJcmVnZGF0YSA9IGJjbXNkaF9yZWdfcmVhZChzZGgsCisJCQlDT1JFX1NCKGNvcmViYXNlLCBzYnRtc3RhdGVsb3cpLCA0KTsKKwkJYmNtc2RoX3JlZ193cml0ZShzZGgsIENPUkVfU0IoY29yZWJhc2UsIHNidG1zdGF0ZWxvdyksIDQsCisJCQlyZWdkYXRhIHwgU0JUTUxfUkVKKTsKKworCQlyZWdkYXRhID0gYmNtc2RoX3JlZ19yZWFkKHNkaCwKKwkJCUNPUkVfU0IoY29yZWJhc2UsIHNidG1zdGF0ZWxvdyksIDQpOworCQl1ZGVsYXkoMSk7CisJCVNQSU5XQUlUKChiY21zZGhfcmVnX3JlYWQoc2RoLAorCQkJQ09SRV9TQihjb3JlYmFzZSwgc2J0bXN0YXRlaGlnaCksIDQpICYKKwkJCVNCVE1IX0JVU1kpLCAxMDAwMDApOworCisJCXJlZ2RhdGEgPSBiY21zZGhfcmVnX3JlYWQoc2RoLAorCQkJQ09SRV9TQihjb3JlYmFzZSwgc2J0bXN0YXRlaGlnaCksIDQpOworCQlpZiAocmVnZGF0YSAmIFNCVE1IX0JVU1kpCisJCQlESERfRVJST1IoKCIlczogQVJNIGNvcmUgc3RpbGwgYnVzeVxuIiwgX19mdW5jX18pKTsKKworCQlyZWdkYXRhID0gYmNtc2RoX3JlZ19yZWFkKHNkaCwKKwkJCUNPUkVfU0IoY29yZWJhc2UsIHNiaWRsb3cpLCA0KTsKKwkJaWYgKHJlZ2RhdGEgJiBTQklETF9JTklUKSB7CisJCQlyZWdkYXRhID0gYmNtc2RoX3JlZ19yZWFkKHNkaCwKKwkJCQlDT1JFX1NCKGNvcmViYXNlLCBzYmltc3RhdGUpLCA0KSB8CisJCQkJU0JJTV9SSjsKKwkJCWJjbXNkaF9yZWdfd3JpdGUoc2RoLAorCQkJCUNPUkVfU0IoY29yZWJhc2UsIHNiaW1zdGF0ZSksIDQsCisJCQkJcmVnZGF0YSk7CisJCQlyZWdkYXRhID0gYmNtc2RoX3JlZ19yZWFkKHNkaCwKKwkJCQlDT1JFX1NCKGNvcmViYXNlLCBzYmltc3RhdGUpLCA0KTsKKwkJCXVkZWxheSgxKTsKKwkJCVNQSU5XQUlUKChiY21zZGhfcmVnX3JlYWQoc2RoLAorCQkJCUNPUkVfU0IoY29yZWJhc2UsIHNiaW1zdGF0ZSksIDQpICYKKwkJCQlTQklNX0JZKSwgMTAwMDAwKTsKKwkJfQorCisJCS8qIHNldCByZXNldCBhbmQgcmVqZWN0IHdoaWxlIGVuYWJsaW5nIHRoZSBjbG9ja3MgKi8KKwkJYmNtc2RoX3JlZ193cml0ZShzZGgsCisJCQlDT1JFX1NCKGNvcmViYXNlLCBzYnRtc3RhdGVsb3cpLCA0LAorCQkJKCgoU0lDRl9GR0MgfCBTSUNGX0NMT0NLX0VOKSA8PCBTQlRNTF9TSUNGX1NISUZUKSB8CisJCQlTQlRNTF9SRUogfCBTQlRNTF9SRVNFVCkpOworCQlyZWdkYXRhID0gYmNtc2RoX3JlZ19yZWFkKHNkaCwKKwkJCUNPUkVfU0IoY29yZWJhc2UsIHNidG1zdGF0ZWxvdyksIDQpOworCQl1ZGVsYXkoMTApOworCisJCS8qIGNsZWFyIHRoZSBpbml0aWF0b3IgcmVqZWN0IGJpdCAqLworCQlyZWdkYXRhID0gYmNtc2RoX3JlZ19yZWFkKHNkaCwKKwkJCUNPUkVfU0IoY29yZWJhc2UsIHNiaWRsb3cpLCA0KTsKKwkJaWYgKHJlZ2RhdGEgJiBTQklETF9JTklUKSB7CisJCQlyZWdkYXRhID0gYmNtc2RoX3JlZ19yZWFkKHNkaCwKKwkJCQlDT1JFX1NCKGNvcmViYXNlLCBzYmltc3RhdGUpLCA0KSAmCisJCQkJflNCSU1fUko7CisJCQliY21zZGhfcmVnX3dyaXRlKHNkaCwKKwkJCQlDT1JFX1NCKGNvcmViYXNlLCBzYmltc3RhdGUpLCA0LAorCQkJCXJlZ2RhdGEpOworCQl9CisJfQorCisJLyogbGVhdmUgcmVzZXQgYW5kIHJlamVjdCBhc3NlcnRlZCAqLworCWJjbXNkaF9yZWdfd3JpdGUoc2RoLCBDT1JFX1NCKGNvcmViYXNlLCBzYnRtc3RhdGVsb3cpLCA0LAorCQkoU0JUTUxfUkVKIHwgU0JUTUxfUkVTRVQpKTsKKwl1ZGVsYXkoMSk7Cit9CisKK3N0YXRpYyBpbnQKK2RoZHNkaW9fY2hpcF9hdHRhY2goc3RydWN0IGRoZF9idXMgKmJ1cywgdm9pZCAqcmVncykKK3sKKwlzdHJ1Y3QgY2hpcF9pbmZvICpjaTsKKwlpbnQgZXJyOworCXU4IGNsa3ZhbCwgY2xrc2V0OworCisJREhEX1RSQUNFKCgiJXM6IEVudGVyXG4iLCBfX2Z1bmNfXykpOworCisJLyogYWxsb2MgY2hpcF9pbmZvX3QgKi8KKwljaSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjaGlwX2luZm8pLCBHRlBfQVRPTUlDKTsKKwlpZiAoTlVMTCA9PSBjaSkgeworCQlESERfRVJST1IoKCIlczogbWFsbG9jIGZhaWxlZCFcbiIsIF9fZnVuY19fKSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbXNldCgodW5zaWduZWQgY2hhciAqKWNpLCAwLCBzaXplb2Yoc3RydWN0IGNoaXBfaW5mbykpOworCisJLyogYnVzL2NvcmUvY2xrIHNldHVwIGZvciByZWdpc3RlciBhY2Nlc3MgKi8KKwkvKiBUcnkgZm9yY2luZyBTRElPIGNvcmUgdG8gZG8gQUxQQXZhaWwgcmVxdWVzdCBvbmx5ICovCisJY2xrc2V0ID0gU0JTRElPX0ZPUkNFX0hXX0NMS1JFUV9PRkYgfCBTQlNESU9fQUxQX0FWQUlMX1JFUTsKKwliY21zZGhfY2ZnX3dyaXRlKGJ1cy0+c2RoLCBTRElPX0ZVTkNfMSwgU0JTRElPX0ZVTkMxX0NISVBDTEtDU1IsCisJCQljbGtzZXQsICZlcnIpOworCWlmIChlcnIpIHsKKwkJREhEX0VSUk9SKCgiJXM6IGVycm9yIHdyaXRpbmcgZm9yIEhUIG9mZlxuIiwgX19mdW5jX18pKTsKKwkJZ290byBmYWlsOworCX0KKworCS8qIElmIHJlZ2lzdGVyIHN1cHBvcnRlZCwgd2FpdCBmb3IgQUxQQXZhaWwgYW5kIHRoZW4gZm9yY2UgQUxQICovCisJLyogVGhpcyBtYXkgdGFrZSB1cCB0byAxNSBtaWxsaXNlY29uZHMgKi8KKwljbGt2YWwgPSBiY21zZGhfY2ZnX3JlYWQoYnVzLT5zZGgsIFNESU9fRlVOQ18xLAorCQkJU0JTRElPX0ZVTkMxX0NISVBDTEtDU1IsIE5VTEwpOworCWlmICgoY2xrdmFsICYgflNCU0RJT19BVkJJVFMpID09IGNsa3NldCkgeworCQlTUElOV0FJVCgoKGNsa3ZhbCA9CisJCQkJYmNtc2RoX2NmZ19yZWFkKGJ1cy0+c2RoLCBTRElPX0ZVTkNfMSwKKwkJCQkJCVNCU0RJT19GVU5DMV9DSElQQ0xLQ1NSLAorCQkJCQkJTlVMTCkpLAorCQkJCSFTQlNESU9fQUxQQVYoY2xrdmFsKSksCisJCQkJUE1VX01BWF9UUkFOU0lUSU9OX0RMWSk7CisJCWlmICghU0JTRElPX0FMUEFWKGNsa3ZhbCkpIHsKKwkJCURIRF9FUlJPUigoIiVzOiB0aW1lb3V0IG9uIEFMUEFWIHdhaXQsIGNsa3ZhbCAweCUwMnhcbiIsCisJCQkJX19mdW5jX18sIGNsa3ZhbCkpOworCQkJZXJyID0gLUVCVVNZOworCQkJZ290byBmYWlsOworCQl9CisJCWNsa3NldCA9IFNCU0RJT19GT1JDRV9IV19DTEtSRVFfT0ZGIHwKKwkJCQlTQlNESU9fRk9SQ0VfQUxQOworCQliY21zZGhfY2ZnX3dyaXRlKGJ1cy0+c2RoLCBTRElPX0ZVTkNfMSwKKwkJCQlTQlNESU9fRlVOQzFfQ0hJUENMS0NTUiwKKwkJCQljbGtzZXQsICZlcnIpOworCQl1ZGVsYXkoNjUpOworCX0gZWxzZSB7CisJCURIRF9FUlJPUigoIiVzOiBDaGlwQ2xrQ1NSIGFjY2Vzczogd3JvdGUgMHglMDJ4IHJlYWQgMHglMDJ4XG4iLAorCQkJX19mdW5jX18sIGNsa3NldCwgY2xrdmFsKSk7CisJCWVyciA9IC1FQUNDRVM7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBBbHNvLCBkaXNhYmxlIHRoZSBleHRyYSBTRElPIHB1bGwtdXBzICovCisJYmNtc2RoX2NmZ193cml0ZShidXMtPnNkaCwgU0RJT19GVU5DXzEsIFNCU0RJT19GVU5DMV9TRElPUFVMTFVQLCAwLAorCQkJIE5VTEwpOworCisJZXJyID0gZGhkc2Rpb19jaGlwX3JlY29nbml0aW9uKGJ1cy0+c2RoLCBjaSwgcmVncyk7CisJaWYgKGVycikKKwkJZ290byBmYWlsOworCisJLyoKKwkgKiBNYWtlIHN1cmUgYW55IG9uLWNoaXAgQVJNIGlzIG9mZiAoaW4gY2FzZSBzdHJhcHBpbmcgaXMgd3JvbmcpLAorCSAqIG9yIGRvd25sb2FkZWQgY29kZSB3YXMgYWxyZWFkeSBydW5uaW5nLgorCSAqLworCWRoZHNkaW9fY2hpcF9kaXNhYmxlY29yZShidXMtPnNkaCwgY2ktPmFybWNvcmViYXNlKTsKKworCWJjbXNkaF9yZWdfd3JpdGUoYnVzLT5zZGgsCisJCUNPUkVfQ0NfUkVHKGNpLT5jY2NvcmViYXNlLCBncGlvcHVsbHVwKSwgNCwgMCk7CisJYmNtc2RoX3JlZ193cml0ZShidXMtPnNkaCwKKwkJQ09SRV9DQ19SRUcoY2ktPmNjY29yZWJhc2UsIGdwaW9wdWxsZG93biksIDQsIDApOworCisJLyogRGlzYWJsZSBGMiB0byBjbGVhciBhbnkgaW50ZXJtZWRpYXRlIGZyYW1lIHN0YXRlIG9uIHRoZSBkb25nbGUgKi8KKwliY21zZGhfY2ZnX3dyaXRlKGJ1cy0+c2RoLCBTRElPX0ZVTkNfMCwgU0RJT0RfQ0NDUl9JT0VOLAorCQlTRElPX0ZVTkNfRU5BQkxFXzEsIE5VTEwpOworCisJLyogV0FSOiBjbWQ1MiBiYWNrcGxhbmUgcmVhZCBzbyBjb3JlIEhXIHdpbGwgZHJvcCBBTFBSZXEgKi8KKwljbGt2YWwgPSBiY21zZGhfY2ZnX3JlYWQoYnVzLT5zZGgsIFNESU9fRlVOQ18xLAorCQkJMCwgTlVMTCk7CisKKwkvKiBEb25lIHdpdGggYmFja3BsYW5lLWRlcGVuZGVudCBhY2Nlc3NlcywgY2FuIGRyb3AgY2xvY2suLi4gKi8KKwliY21zZGhfY2ZnX3dyaXRlKGJ1cy0+c2RoLCBTRElPX0ZVTkNfMSwgU0JTRElPX0ZVTkMxX0NISVBDTEtDU1IsIDAsCisJCQkgTlVMTCk7CisKKwlidXMtPmNpID0gY2k7CisJcmV0dXJuIDA7CitmYWlsOgorCWJ1cy0+Y2kgPSBOVUxMOworCWtmcmVlKGNpKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZAorZGhkc2Rpb19jaGlwX3Jlc2V0Y29yZShiY21zZGhfaW5mb190ICpzZGgsIHUzMiBjb3JlYmFzZSkKK3sKKwl1MzIgcmVnZGF0YTsKKworCS8qCisJICogTXVzdCBkbyB0aGUgZGlzYWJsZSBzZXF1ZW5jZSBmaXJzdCB0byB3b3JrIGZvcgorCSAqIGFyYml0cmFyeSBjdXJyZW50IGNvcmUgc3RhdGUuCisJICovCisJZGhkc2Rpb19jaGlwX2Rpc2FibGVjb3JlKHNkaCwgY29yZWJhc2UpOworCisJLyoKKwkgKiBOb3cgZG8gdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLgorCSAqIHNldCByZXNldCB3aGlsZSBlbmFibGluZyB0aGUgY2xvY2sgYW5kCisJICogZm9yY2luZyB0aGVtIG9uIHRocm91Z2hvdXQgdGhlIGNvcmUKKwkgKi8KKwliY21zZGhfcmVnX3dyaXRlKHNkaCwgQ09SRV9TQihjb3JlYmFzZSwgc2J0bXN0YXRlbG93KSwgNCwKKwkJKChTSUNGX0ZHQyB8IFNJQ0ZfQ0xPQ0tfRU4pIDw8IFNCVE1MX1NJQ0ZfU0hJRlQpIHwKKwkJU0JUTUxfUkVTRVQpOworCXVkZWxheSgxKTsKKworCXJlZ2RhdGEgPSBiY21zZGhfcmVnX3JlYWQoc2RoLCBDT1JFX1NCKGNvcmViYXNlLCBzYnRtc3RhdGVoaWdoKSwgNCk7CisJaWYgKHJlZ2RhdGEgJiBTQlRNSF9TRVJSKQorCQliY21zZGhfcmVnX3dyaXRlKHNkaCwgQ09SRV9TQihjb3JlYmFzZSwgc2J0bXN0YXRlaGlnaCksIDQsIDApOworCisJcmVnZGF0YSA9IGJjbXNkaF9yZWdfcmVhZChzZGgsIENPUkVfU0IoY29yZWJhc2UsIHNiaW1zdGF0ZSksIDQpOworCWlmIChyZWdkYXRhICYgKFNCSU1fSUJFIHwgU0JJTV9UTykpCisJCWJjbXNkaF9yZWdfd3JpdGUoc2RoLCBDT1JFX1NCKGNvcmViYXNlLCBzYmltc3RhdGUpLCA0LAorCQkJcmVnZGF0YSAmIH4oU0JJTV9JQkUgfCBTQklNX1RPKSk7CisKKwkvKiBjbGVhciByZXNldCBhbmQgYWxsb3cgaXQgdG8gcHJvcGFnYXRlIHRocm91Z2hvdXQgdGhlIGNvcmUgKi8KKwliY21zZGhfcmVnX3dyaXRlKHNkaCwgQ09SRV9TQihjb3JlYmFzZSwgc2J0bXN0YXRlbG93KSwgNCwKKwkJKFNJQ0ZfRkdDIDw8IFNCVE1MX1NJQ0ZfU0hJRlQpIHwKKwkJKFNJQ0ZfQ0xPQ0tfRU4gPDwgU0JUTUxfU0lDRl9TSElGVCkpOworCXVkZWxheSgxKTsKKworCS8qIGxlYXZlIGNsb2NrIGVuYWJsZWQgKi8KKwliY21zZGhfcmVnX3dyaXRlKHNkaCwgQ09SRV9TQihjb3JlYmFzZSwgc2J0bXN0YXRlbG93KSwgNCwKKwkJKFNJQ0ZfQ0xPQ0tfRU4gPDwgU0JUTUxfU0lDRl9TSElGVCkpOworCXVkZWxheSgxKTsKK30KKworLyogU0RJTyBQYWQgZHJpdmUgc3RyZW5ndGggdG8gc2VsZWN0IHZhbHVlIG1hcHBpbmdzICovCitzdHJ1Y3Qgc2Rpb2RfZHJpdmVfc3RyIHsKKwl1OCBzdHJlbmd0aDsJLyogUGFkIERyaXZlIFN0cmVuZ3RoIGluIG1BICovCisJdTggc2VsOwkJLyogQ2hpcC1zcGVjaWZpYyBzZWxlY3QgdmFsdWUgKi8KK307CisKKy8qIFNESU8gRHJpdmUgU3RyZW5ndGggdG8gc2VsIHZhbHVlIHRhYmxlIGZvciBQTVUgUmV2IDEgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Rpb2RfZHJpdmVfc3RyIHNkaW9kX2RyaXZlX3N0cmVuZ3RoX3RhYjFbXSA9IHsKKwl7CisJNCwgMHgyfSwgeworCTIsIDB4M30sIHsKKwkxLCAweDB9LCB7CisJMCwgMHgwfQorCX07CisKKy8qIFNESU8gRHJpdmUgU3RyZW5ndGggdG8gc2VsIHZhbHVlIHRhYmxlIGZvciBQTVUgUmV2IDIsIDMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Rpb2RfZHJpdmVfc3RyIHNkaW9kX2RyaXZlX3N0cmVuZ3RoX3RhYjJbXSA9IHsKKwl7CisJMTIsIDB4N30sIHsKKwkxMCwgMHg2fSwgeworCTgsIDB4NX0sIHsKKwk2LCAweDR9LCB7CisJNCwgMHgyfSwgeworCTIsIDB4MX0sIHsKKwkwLCAweDB9CisJfTsKKworLyogU0RJTyBEcml2ZSBTdHJlbmd0aCB0byBzZWwgdmFsdWUgdGFibGUgZm9yIFBNVSBSZXYgOCAoMS44VikgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Rpb2RfZHJpdmVfc3RyIHNkaW9kX2RyaXZlX3N0cmVuZ3RoX3RhYjNbXSA9IHsKKwl7CisJMzIsIDB4N30sIHsKKwkyNiwgMHg2fSwgeworCTIyLCAweDV9LCB7CisJMTYsIDB4NH0sIHsKKwkxMiwgMHgzfSwgeworCTgsIDB4Mn0sIHsKKwk0LCAweDF9LCB7CisJMCwgMHgwfQorCX07CisKKyNkZWZpbmUgU0RJT0RfRFJWU1RSX0tFWShjaGlwLCBwbXUpICAgICAoKChjaGlwKSA8PCAxNikgfCAocG11KSkKKworc3RhdGljIHZvaWQKK2RoZHNkaW9fc2Rpb2RfZHJpdmVfc3RyZW5ndGhfaW5pdChzdHJ1Y3QgZGhkX2J1cyAqYnVzLCB1MzIgZHJpdmVzdHJlbmd0aCkgeworCXN0cnVjdCBzZGlvZF9kcml2ZV9zdHIgKnN0cl90YWIgPSBOVUxMOworCXUzMiBzdHJfbWFzayA9IDA7CisJdTMyIHN0cl9zaGlmdCA9IDA7CisJY2hhciBjaG5bOF07CisKKwlpZiAoIShidXMtPmNpLT5jY2NhcHMgJiBDQ19DQVBfUE1VKSkKKwkJcmV0dXJuOworCisJc3dpdGNoIChTRElPRF9EUlZTVFJfS0VZKGJ1cy0+Y2ktPmNoaXAsIGJ1cy0+Y2ktPnBtdXJldikpIHsKKwljYXNlIFNESU9EX0RSVlNUUl9LRVkoQkNNNDMyNV9DSElQX0lELCAxKToKKwkJc3RyX3RhYiA9IChzdHJ1Y3Qgc2Rpb2RfZHJpdmVfc3RyICopJnNkaW9kX2RyaXZlX3N0cmVuZ3RoX3RhYjE7CisJCXN0cl9tYXNrID0gMHgzMDAwMDAwMDsKKwkJc3RyX3NoaWZ0ID0gMjg7CisJCWJyZWFrOworCWNhc2UgU0RJT0RfRFJWU1RSX0tFWShCQ000MzI1X0NISVBfSUQsIDIpOgorCWNhc2UgU0RJT0RfRFJWU1RSX0tFWShCQ000MzI1X0NISVBfSUQsIDMpOgorCQlzdHJfdGFiID0gKHN0cnVjdCBzZGlvZF9kcml2ZV9zdHIgKikmc2Rpb2RfZHJpdmVfc3RyZW5ndGhfdGFiMjsKKwkJc3RyX21hc2sgPSAweDAwMDAzODAwOworCQlzdHJfc2hpZnQgPSAxMTsKKwkJYnJlYWs7CisJY2FzZSBTRElPRF9EUlZTVFJfS0VZKEJDTTQzMzZfQ0hJUF9JRCwgOCk6CisJCXN0cl90YWIgPSAoc3RydWN0IHNkaW9kX2RyaXZlX3N0ciAqKSZzZGlvZF9kcml2ZV9zdHJlbmd0aF90YWIzOworCQlzdHJfbWFzayA9IDB4MDAwMDM4MDA7CisJCXN0cl9zaGlmdCA9IDExOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlESERfRVJST1IoKCJObyBTRElPIERyaXZlIHN0cmVuZ3RoIGluaXQiCisJCQkiZG9uZSBmb3IgY2hpcCAlcyByZXYgJWQgcG11cmV2ICVkXG4iLAorCQkJYmNtX2NoaXBuYW1lKGJ1cy0+Y2ktPmNoaXAsIGNobiwgOCksCisJCQlidXMtPmNpLT5jaGlwcmV2LCBidXMtPmNpLT5wbXVyZXYpKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHN0cl90YWIgIT0gTlVMTCkgeworCQl1MzIgZHJpdmVzdHJlbmd0aF9zZWwgPSAwOworCQl1MzIgY2NfZGF0YV90ZW1wOworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBzdHJfdGFiW2ldLnN0cmVuZ3RoICE9IDA7IGkrKykgeworCQkJaWYgKGRyaXZlc3RyZW5ndGggPj0gc3RyX3RhYltpXS5zdHJlbmd0aCkgeworCQkJCWRyaXZlc3RyZW5ndGhfc2VsID0gc3RyX3RhYltpXS5zZWw7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQliY21zZGhfcmVnX3dyaXRlKGJ1cy0+c2RoLAorCQkJQ09SRV9DQ19SRUcoYnVzLT5jaS0+Y2Njb3JlYmFzZSwgY2hpcGNvbnRyb2xfYWRkciksCisJCQk0LCAxKTsKKwkJY2NfZGF0YV90ZW1wID0gYmNtc2RoX3JlZ19yZWFkKGJ1cy0+c2RoLAorCQkJQ09SRV9DQ19SRUcoYnVzLT5jaS0+Y2Njb3JlYmFzZSwgY2hpcGNvbnRyb2xfYWRkciksIDQpOworCQljY19kYXRhX3RlbXAgJj0gfnN0cl9tYXNrOworCQlkcml2ZXN0cmVuZ3RoX3NlbCA8PD0gc3RyX3NoaWZ0OworCQljY19kYXRhX3RlbXAgfD0gZHJpdmVzdHJlbmd0aF9zZWw7CisJCWJjbXNkaF9yZWdfd3JpdGUoYnVzLT5zZGgsCisJCQlDT1JFX0NDX1JFRyhidXMtPmNpLT5jY2NvcmViYXNlLCBjaGlwY29udHJvbF9hZGRyKSwKKwkJCTQsIGNjX2RhdGFfdGVtcCk7CisKKwkJREhEX0lORk8oKCJTRElPOiAlZG1BIGRyaXZlIHN0cmVuZ3RoIHNlbGVjdGVkLCBzZXQgdG8gMHglMDh4XG4iLAorCQkJZHJpdmVzdHJlbmd0aCwgY2NfZGF0YV90ZW1wKSk7CisJfQorfQorCitzdGF0aWMgdm9pZAorZGhkc2Rpb19jaGlwX2RldGFjaChzdHJ1Y3QgZGhkX2J1cyAqYnVzKQoreworCURIRF9UUkFDRSgoIiVzOiBFbnRlclxuIiwgX19mdW5jX18pKTsKKworCWtmcmVlKGJ1cy0+Y2kpOworCWJ1cy0+Y2kgPSBOVUxMOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy9obmRwbXUuYyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvaG5kcG11LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4NDFkYTYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy9obmRwbXUuYworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlICIuLi91dGlsL2huZHBtdS5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy9zYnV0aWxzLmMgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL3NidXRpbHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQ0OTZiOC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL3NidXRpbHMuYworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlICIuLi91dGlsL3NidXRpbHMuYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvc2l1dGlscy5jIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy9zaXV0aWxzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0MjhlOTkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy9zaXV0aWxzLmMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSAiLi4vdXRpbC9zaXV0aWxzLmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL3dsX2NmZzgwMjExLmMgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL3dsX2NmZzgwMjExLmMKaW5kZXggNTU1YjA1Ni4uZTNiNDA5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy93bF9jZmc4MDIxMS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvd2xfY2ZnODAyMTEuYwpAQCAtMzksMTEgKzM5LDEzIEBACiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KICNpbmNsdWRlIDx3bF9jZmc4MDIxMS5oPgogCit2b2lkIHNkaW9oX3NkaW9fc2V0X2hvc3RfcG1fZmxhZ3MoaW50IGZsYWcpOworCiBzdGF0aWMgc3RydWN0IHNkaW9fZnVuYyAqY2ZnODAyMTFfc2Rpb19mdW5jOwogc3RhdGljIHN0cnVjdCB3bF9kZXYgKndsX2NmZzgwMjExX2RldjsKIHN0YXRpYyBjb25zdCB1OCBldGhlcl9iY2FzdFtFVEhfQUxFTl0gPSB7MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX07CiAKLXUzMiB3bF9kYmdfbGV2ZWwgPSBXTF9EQkdfRVJSIHwgV0xfREJHX0lORk87Cit1MzIgd2xfZGJnX2xldmVsID0gV0xfREJHX0VSUjsKIAogI2RlZmluZSBXTF80MzI5X0ZXX0ZJTEUgImJyY20vYmNtNDMyOS1mdWxsbWFjLTQuYmluIgogI2RlZmluZSBXTF80MzI5X05WUkFNX0ZJTEUgImJyY20vYmNtNDMyOS1mdWxsbWFjLTQudHh0IgpAQCAtMTgwLDQxICsxODIsMzQgQEAKICoqIGNmZzgwMjExIGNvbm5lY3QgdXRpbGl0ZXMKICovCiBzdGF0aWMgczMyIHdsX3NldF93cGFfdmVyc2lvbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCXN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKTsKKwkJCXN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKTsKIHN0YXRpYyBzMzIgd2xfc2V0X2F1dGhfdHlwZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICAgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpOworCQkJc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpOwogc3RhdGljIHMzMiB3bF9zZXRfc2V0X2NpcGhlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKTsKKwkJCXN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKTsKIHN0YXRpYyBzMzIgd2xfc2V0X2tleV9tZ210KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKTsKKwkJCXN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKTsKIHN0YXRpYyBzMzIgd2xfc2V0X3NldF9zaGFyZWRrZXkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKTsKKwkJCXN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKTsKIHN0YXRpYyBzMzIgd2xfZ2V0X2Fzc29jX2llcyhzdHJ1Y3Qgd2xfcHJpdiAqd2wpOworc3RhdGljIHZvaWQgd2xfY2xlYXJfYXNzb2NfaWVzKHN0cnVjdCB3bF9wcml2ICp3bCk7CiBzdGF0aWMgdm9pZCB3bF9jaF90b19jaGFuc3BlYyhpbnQgY2gsCiAJc3RydWN0IHdsX2pvaW5fcGFyYW1zICpqb2luX3BhcmFtcywgc2l6ZV90ICpqb2luX3BhcmFtc19zaXplKTsKIAogLyoKICoqIGluZm9ybWF0aW9uIGVsZW1lbnQgdXRpbGl0aWVzCiAqLwotc3RhdGljIHZvaWQgd2xfcnN0X2llKHN0cnVjdCB3bF9wcml2ICp3bCk7CiBzdGF0aWMgX191c2VkIHMzMiB3bF9hZGRfaWUoc3RydWN0IHdsX3ByaXYgKndsLCB1OCB0LCB1OCBsLCB1OCAqdik7Ci1zdGF0aWMgczMyIHdsX21yZ19pZShzdHJ1Y3Qgd2xfcHJpdiAqd2wsIHU4ICppZV9zdHJlYW0sIHUxNiBpZV9zaXplKTsKLXN0YXRpYyBzMzIgd2xfY3BfaWUoc3RydWN0IHdsX3ByaXYgKndsLCB1OCAqZHN0LCB1MTYgZHN0X3NpemUpOwotc3RhdGljIHUzMiB3bF9nZXRfaWVsZW4oc3RydWN0IHdsX3ByaXYgKndsKTsKLQogc3RhdGljIHMzMiB3bF9tb2RlX3RvX25sODAyMTFfaWZ0eXBlKHMzMiBtb2RlKTsKLQogc3RhdGljIHN0cnVjdCB3aXJlbGVzc19kZXYgKndsX2FsbG9jX3dkZXYoczMyIHNpemVvZl9pZmFjZSwKLQkJCQkJICBzdHJ1Y3QgZGV2aWNlICpkZXYpOworCQkJc3RydWN0IGRldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHdsX2ZyZWVfd2RldihzdHJ1Y3Qgd2xfcHJpdiAqd2wpOwotCiBzdGF0aWMgczMyIHdsX2luZm9ybV9ic3Moc3RydWN0IHdsX3ByaXYgKndsKTsKIHN0YXRpYyBzMzIgd2xfaW5mb3JtX3NpbmdsZV9ic3Moc3RydWN0IHdsX3ByaXYgKndsLCBzdHJ1Y3Qgd2xfYnNzX2luZm8gKmJpKTsKIHN0YXRpYyBzMzIgd2xfdXBkYXRlX2Jzc19pbmZvKHN0cnVjdCB3bF9wcml2ICp3bCk7Ci0KIHN0YXRpYyBzMzIgd2xfYWRkX2tleWV4dChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgdTgga2V5X2lkeCwgY29uc3QgdTggKm1hY19hZGRyLAotCQkJICAgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcyk7CisJCQl1OCBrZXlfaWR4LCBjb25zdCB1OCAqbWFjX2FkZHIsCisJCQlzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKTsKIAogLyoKICoqIGtleSBpbmRpYW5lc3Mgc3dhcCB1dGlsaXRpZXMKQEAgLTI0MCw3ICsyMzUsNiBAQAogKiogaWJzcyBtb2RlIHV0aWxpdGllcwogKi8KIHN0YXRpYyBib29sIHdsX2lzX2lic3Ntb2RlKHN0cnVjdCB3bF9wcml2ICp3bCk7Ci1zdGF0aWMgYm9vbCB3bF9pc19pYnNzc3RhcnRlcihzdHJ1Y3Qgd2xfcHJpdiAqd2wpOwogCiAvKgogKiogZG9uZ2xlIHVwL2Rvd24gLCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdXRpbGl0aWVzCkBAIC0yNDgsNyArMjQyLDYgQEAKIHN0YXRpYyBib29sIHdsX2lzX2xpbmtkb3duKHN0cnVjdCB3bF9wcml2ICp3bCwgY29uc3Qgd2xfZXZlbnRfbXNnX3QgKmUpOwogc3RhdGljIGJvb2wgd2xfaXNfbGlua3VwKHN0cnVjdCB3bF9wcml2ICp3bCwgY29uc3Qgd2xfZXZlbnRfbXNnX3QgKmUpOwogc3RhdGljIGJvb2wgd2xfaXNfbm9uZXR3b3JrKHN0cnVjdCB3bF9wcml2ICp3bCwgY29uc3Qgd2xfZXZlbnRfbXNnX3QgKmUpOwotc3RhdGljIHZvaWQgd2xfbGlua191cChzdHJ1Y3Qgd2xfcHJpdiAqd2wpOwogc3RhdGljIHZvaWQgd2xfbGlua19kb3duKHN0cnVjdCB3bF9wcml2ICp3bCk7CiBzdGF0aWMgczMyIHdsX2RvbmdsZV9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzMzIgaWZ0eXBlKTsKIHN0YXRpYyBzMzIgX193bF9jZmc4MDIxMV91cChzdHJ1Y3Qgd2xfcHJpdiAqd2wpOwpAQCAtMjY2LDE4ICsyNTksMTkgQEAKIHN0YXRpYyBzMzIgd2xfZG9uZ2xlX3Bvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgcG93ZXJfbW9kZSk7CiBzdGF0aWMgczMyIHdsX2RvbmdsZV9nbG9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgZ2xvbSwKIAkJCSAgICB1MzIgZG9uZ2xlX2FsaWduKTsKLXN0YXRpYyBzMzIgd2xfZG9uZ2xlX3JvYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiByb2FtdmFyLAotCQkJICAgIHUzMiBiY25fdGltZW91dCk7Ci1zdGF0aWMgczMyIHdsX2RvbmdsZV9ldmVudG1zZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7Ci1zdGF0aWMgczMyIHdsX2RvbmdsZV9zY2FudGltZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgczMyIHNjYW5fYXNzb2NfdGltZSwKLQkJCQlzMzIgc2Nhbl91bmFzc29jX3RpbWUpOwogc3RhdGljIHMzMiB3bF9kb25nbGVfb2ZmbG9hZChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgczMyIGFycG9lLAogCQkJICAgICAgIHMzMiBhcnBfb2wpOwogc3RhdGljIHMzMiB3bF9wYXR0ZXJuX2F0b2goczggKnNyYywgczggKmRzdCk7CiBzdGF0aWMgczMyIHdsX2RvbmdsZV9maWx0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBmaWx0ZXJfbW9kZSk7CiBzdGF0aWMgczMyIHdsX3VwZGF0ZV93aXBoeWJhbmRzKHN0cnVjdCB3bF9wcml2ICp3bCk7CiAjZW5kaWYJCQkJLyogIUVNQkVEREVEX1BMQVRGT1JNICovCisKK3N0YXRpYyBzMzIgd2xfZG9uZ2xlX2V2ZW50bXNnKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKK3N0YXRpYyBzMzIgd2xfZG9uZ2xlX3NjYW50aW1lKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzMzIgc2Nhbl9hc3NvY190aW1lLAorCQkJCXMzMiBzY2FuX3VuYXNzb2NfdGltZSwgczMyIHNjYW5fcGFzc2l2ZV90aW1lKTsKIHN0YXRpYyBzMzIgd2xfY29uZmlnX2RvbmdsZShzdHJ1Y3Qgd2xfcHJpdiAqd2wsIGJvb2wgbmVlZF9sb2NrKTsKK3N0YXRpYyBzMzIgd2xfZG9uZ2xlX3JvYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiByb2FtdmFyLAorCQkJICAgIHUzMiBiY25fdGltZW91dCk7CiAKIC8qCiAqKiBpc2NhbiBoYW5kbGVyCkBAIC0zNTIsMzAgKzM0Niw2IEBACiB9IHdoaWxlICgwKQogCiBleHRlcm4gaW50IGRoZF93YWl0X3BlbmQ4MDIxeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQotI2lmIChXTF9EQkdfTEVWRUwgPiAwKQotI2RlZmluZSBXTF9EQkdfRVNUUl9NQVgJMzIKLXN0YXRpYyBzOCB3bF9kYmdfZXN0cltdW1dMX0RCR19FU1RSX01BWF0gPSB7Ci0JIlNFVF9TU0lEIiwgIkpPSU4iLCAiU1RBUlQiLCAiQVVUSCIsICJBVVRIX0lORCIsCi0JIkRFQVVUSCIsICJERUFVVEhfSU5EIiwgIkFTU09DIiwgIkFTU09DX0lORCIsICJSRUFTU09DIiwKLQkiUkVBU1NPQ19JTkQiLCAiRElTQVNTT0MiLCAiRElTQVNTT0NfSU5EIiwgIlFVSUVUX1NUQVJUIiwgIlFVSUVUX0VORCIsCi0JIkJFQUNPTl9SWCIsICJMSU5LIiwgIk1JQ19FUlJPUiIsICJORElTX0xJTksiLCAiUk9BTSIsCi0JIlRYRkFJTCIsICJQTUtJRF9DQUNIRSIsICJSRVRST0dSQURFX1RTRiIsICJQUlVORSIsICJBVVRPQVVUSCIsCi0JIkVBUE9MX01TRyIsICJTQ0FOX0NPTVBMRVRFIiwgIkFERFRTX0lORCIsICJERUxUU19JTkQiLCAiQkNOU0VOVF9JTkQiLAotCSJCQ05SWF9NU0ciLCAiQkNOTE9TVF9NU0ciLCAiUk9BTV9QUkVQIiwgIlBGTl9ORVRfRk9VTkQiLAotCSJQRk5fTkVUX0xPU1QiLAotCSJSRVNFVF9DT01QTEVURSIsICJKT0lOX1NUQVJUIiwgIlJPQU1fU1RBUlQiLCAiQVNTT0NfU1RBUlQiLAotCSJJQlNTX0FTU09DIiwKLQkiUkFESU8iLCAiUFNNX1dBVENIRE9HIiwKLQkiUFJPQlJFUV9NU0ciLAotCSJTQ0FOX0NPTkZJUk1fSU5EIiwgIlBTS19TVVAiLCAiQ09VTlRSWV9DT0RFX0NIQU5HRUQiLAotCSJFWENFRURFRF9NRURJVU1fVElNRSIsICJJQ1ZfRVJST1IiLAotCSJVTklDQVNUX0RFQ09ERV9FUlJPUiIsICJNVUxUSUNBU1RfREVDT0RFX0VSUk9SIiwgIlRSQUNFIiwKLQkiSUYiLAotCSJSU1NJIiwgIlBGTl9TQ0FOX0NPTVBMRVRFIiwgIkFDVElPTl9GUkFNRSIsICJBQ1RJT05fRlJBTUVfQ09NUExFVEUiLAotfTsKLSNlbmRpZgkJCQkvKiBXTF9EQkdfTEVWRUwgKi8KLQogI2RlZmluZSBDSEFOMkcoX2NoYW5uZWwsIF9mcmVxLCBfZmxhZ3MpIHsJCQlcCiAJLmJhbmQJCQk9IElFRUU4MDIxMV9CQU5EXzJHSFosCQlcCiAJLmNlbnRlcl9mcmVxCQk9IChfZnJlcSksCQkJXApAQCAtNjA0LDEwICs1NzQsMTEgQEAKIAlzdHJ1Y3Qgd2xfcHJpdiAqd2wgPSB3aXBoeV90b193bCh3aXBoeSk7CiAJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjsKIAlzMzIgaW5mcmEgPSAwOwotCXMzMiBhcCA9IDA7CiAJczMyIGVyciA9IDA7CiAKKwlXTF9UUkFDRSgiRW50ZXJcbiIpOwogCUNIRUNLX1NZU19VUCgpOworCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfV0RTOgpAQCAtNjE2LDMyICs1ODcsMzQgQEAKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CiAJCXdsLT5jb25mLT5tb2RlID0gV0xfTU9ERV9JQlNTOworCQlpbmZyYSA9IDA7CiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAkJd2wtPmNvbmYtPm1vZGUgPSBXTF9NT0RFX0JTUzsKIAkJaW5mcmEgPSAxOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBkb25lOwogCX0KKwogCWluZnJhID0gY3B1X3RvX2xlMzIoaW5mcmEpOwotCWFwID0gY3B1X3RvX2xlMzIoYXApOwotCXdkZXYgPSBuZGV2LT5pZWVlODAyMTFfcHRyOwotCXdkZXYtPmlmdHlwZSA9IHR5cGU7Ci0JV0xfREJHKCIlcyA6IGFwICglZCksIGluZnJhICglZClcbiIsIG5kZXYtPm5hbWUsIGFwLCBpbmZyYSk7CiAJZXJyID0gd2xfZGV2X2lvY3RsKG5kZXYsIFdMQ19TRVRfSU5GUkEsICZpbmZyYSwgc2l6ZW9mKGluZnJhKSk7CiAJaWYgKHVubGlrZWx5KGVycikpIHsKIAkJV0xfRVJSKCJXTENfU0VUX0lORlJBIGVycm9yICglZClcbiIsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCWVyciA9IHdsX2Rldl9pb2N0bChuZGV2LCBXTENfU0VUX0FQLCAmYXAsIHNpemVvZihhcCkpOwotCWlmICh1bmxpa2VseShlcnIpKSB7Ci0JCVdMX0VSUigiV0xDX1NFVF9BUCBlcnJvciAoJWQpXG4iLCBlcnIpOwotCQlyZXR1cm4gZXJyOworCQllcnIgPSAtRUFHQUlOOworCX0gZWxzZSB7CisJCXdkZXYgPSBuZGV2LT5pZWVlODAyMTFfcHRyOworCQl3ZGV2LT5pZnR5cGUgPSB0eXBlOwogCX0KIAotCS8qIC1FSU5QUk9HUkVTUzogQ2FsbCBjb21taXQgaGFuZGxlciAqLwotCXJldHVybiAtRUlOUFJPR1JFU1M7CisJV0xfSU5GTygiSUYgVHlwZSA9ICVzXG4iLAorCQkod2wtPmNvbmYtPm1vZGUgPT0gV0xfTU9ERV9JQlNTKSA/ICJBZGhvYyIgOiAiSW5mcmEiKTsKKworZG9uZToKKwlXTF9UUkFDRSgiRXhpdFxuIik7CisKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCB3bF9pc2Nhbl9wcmVwKHN0cnVjdCB3bF9zY2FuX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3Qgd2xjX3NzaWQgKnNzaWQpCkBAIC03NDAsNyArNzEzLDcgQEAKIAllcnIgPSB3bF9kZXZfaW9jdGwod2xfdG9fbmRldih3bCksIFdMQ19TRVRfUEFTU0lWRV9TQ0FOLAogCQkJJnBhc3NpdmVfc2Nhbiwgc2l6ZW9mKHBhc3NpdmVfc2NhbikpOwogCWlmICh1bmxpa2VseShlcnIpKSB7Ci0JCVdMX0RCRygiZXJyb3IgKCVkKVxuIiwgZXJyKTsKKwkJV0xfRVJSKCJlcnJvciAoJWQpXG4iLCBlcnIpOwogCQlyZXR1cm4gZXJyOwogCX0KIAl3bF9zZXRfbXBjKG5kZXYsIDApOwpAQCAtNzc0LDI2ICs3NDcsMjUgQEAKIAkJICAgICAgIChpbnQpd2wtPnN0YXR1cyk7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KKwlpZiAodGVzdF9iaXQoV0xfU1RBVFVTX0NPTk5FQ1RJTkcsICZ3bC0+c3RhdHVzKSkgeworCQlXTF9FUlIoIkNvbm5lY3RpbmcgOiBzdGF0dXMgKCVkKVxuIiwKKwkJICAgICAgIChpbnQpd2wtPnN0YXR1cyk7CisJCXJldHVybiAtRUFHQUlOOworCX0KIAogCWlzY2FuX3JlcSA9IGZhbHNlOwogCXNwZWNfc2NhbiA9IGZhbHNlOwotCWlmIChyZXF1ZXN0KSB7CQkvKiBzY2FuIGJzcyAqLworCWlmIChyZXF1ZXN0KSB7CisJCS8qIHNjYW4gYnNzICovCiAJCXNzaWRzID0gcmVxdWVzdC0+c3NpZHM7Ci0JCWlmICh3bC0+aXNjYW5fb24gJiYgKCFzc2lkcyB8fCAhc3NpZHMtPnNzaWRfbGVuKSkgewkvKiBmb3IKLQkJCQkJCQkgKiBzcGVjaWZpYyBzY2FuLAotCQkJCQkJCSAqIHNzaWRzLT5zc2lkX2xlbiBoYXMKLQkJCQkJCQkgKiBub24temVybyhzc2lkIHN0cmluZykKLQkJCQkJCQkgKiBsZW5ndGguCi0JCQkJCQkJICogT3RoZXJ3aXNlIHRoaXMgaXMgMC4KLQkJCQkJCQkgKiB3ZSBkbyBub3QgaXNjYW4gZm9yCi0JCQkJCQkJICogc3BlY2lmaWMgc2NhbiByZXF1ZXN0Ci0JCQkJCQkJICovCisJCWlmICh3bC0+aXNjYW5fb24gJiYgKCFzc2lkcyB8fCAhc3NpZHMtPnNzaWRfbGVuKSkKIAkJCWlzY2FuX3JlcSA9IHRydWU7Ci0JCX0KLQl9IGVsc2UgewkJLyogc2NhbiBpbiBpYnNzICovCisJfSBlbHNlIHsKKwkJLyogc2NhbiBpbiBpYnNzICovCiAJCS8qIHdlIGRvbid0IGRvIGlzY2FuIGluIGlic3MgKi8KIAkJc3NpZHMgPSB0aGlzX3NzaWQ7CiAJfQorCiAJd2wtPnNjYW5fcmVxdWVzdCA9IHJlcXVlc3Q7CiAJc2V0X2JpdChXTF9TVEFUVVNfU0NBTk5JTkcsICZ3bC0+c3RhdHVzKTsKIAlpZiAoaXNjYW5fcmVxKSB7CkBAIC04MDMsNyArNzc1LDcgQEAKIAkJZWxzZQogCQkJZ290byBzY2FuX291dDsKIAl9IGVsc2UgewotCQlXTF9EQkcoInNzaWQgXCIlc1wiLCBzc2lkX2xlbiAoJWQpXG4iLAorCQlXTF9TQ0FOKCJzc2lkIFwiJXNcIiwgc3NpZF9sZW4gKCVkKVxuIiwKIAkJICAgICAgIHNzaWRzLT5zc2lkLCBzc2lkcy0+c3NpZF9sZW4pOwogCQltZW1zZXQoJnNyLT5zc2lkLCAwLCBzaXplb2Yoc3ItPnNzaWQpKTsKIAkJc3ItPnNzaWQuU1NJRF9sZW4gPQpAQCAtODExLDEzICs3ODMsMTEgQEAKIAkJaWYgKHNyLT5zc2lkLlNTSURfbGVuKSB7CiAJCQltZW1jcHkoc3ItPnNzaWQuU1NJRCwgc3NpZHMtPnNzaWQsIHNyLT5zc2lkLlNTSURfbGVuKTsKIAkJCXNyLT5zc2lkLlNTSURfbGVuID0gY3B1X3RvX2xlMzIoc3ItPnNzaWQuU1NJRF9sZW4pOwotCQkJV0xfREJHKCJTcGVjaWZpYyBzY2FuIHNzaWQ9XCIlc1wiIGxlbj0lZFxuIiwKLQkJCSAgICAgICBzci0+c3NpZC5TU0lELCBzci0+c3NpZC5TU0lEX2xlbik7CiAJCQlzcGVjX3NjYW4gPSB0cnVlOwogCQl9IGVsc2UgewotCQkJV0xfREJHKCJCcm9hZGNhc3Qgc2NhblxuIik7CisJCQlXTF9TQ0FOKCJCcm9hZGNhc3Qgc2NhblxuIik7CiAJCX0KLQkJV0xfREJHKCJzci0+c3NpZC5TU0lEX2xlbiAoJWQpXG4iLCBzci0+c3NpZC5TU0lEX2xlbik7CisKIAkJcGFzc2l2ZV9zY2FuID0gd2wtPmFjdGl2ZV9zY2FuID8gMCA6IDE7CiAJCWVyciA9IHdsX2Rldl9pb2N0bChuZGV2LCBXTENfU0VUX1BBU1NJVkVfU0NBTiwKIAkJCQkmcGFzc2l2ZV9zY2FuLCBzaXplb2YocGFzc2l2ZV9zY2FuKSk7CkBAIC04NTQsMTMgKzgyNCwxNSBAQAogewogCXMzMiBlcnIgPSAwOwogCi0JQ0hFQ0tfU1lTX1VQKCk7Ci0JZXJyID0gX193bF9jZmc4MDIxMV9zY2FuKHdpcGh5LCBuZGV2LCByZXF1ZXN0LCBOVUxMKTsKLQlpZiAodW5saWtlbHkoZXJyKSkgewotCQlXTF9EQkcoInNjYW4gZXJyb3IgKCVkKVxuIiwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9CisJV0xfVFJBQ0UoIkVudGVyXG4iKTsKIAorCUNIRUNLX1NZU19VUCgpOworCisJZXJyID0gX193bF9jZmc4MDIxMV9zY2FuKHdpcGh5LCBuZGV2LCByZXF1ZXN0LCBOVUxMKTsKKwlpZiAodW5saWtlbHkoZXJyKSkKKwkJV0xfRVJSKCJzY2FuIGVycm9yICglZClcbiIsIGVycik7CisKKwlXTF9UUkFDRSgiRXhpdFxuIik7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtODc1LDkgKzg0Nyw4IEBACiAJQlVHX09OKCFsZW4pOwogCiAJZXJyID0gd2xfZGV2X2lvY3RsKGRldiwgV0xDX1NFVF9WQVIsIGJ1ZiwgbGVuKTsKLQlpZiAodW5saWtlbHkoZXJyKSkgeworCWlmICh1bmxpa2VseShlcnIpKQogCQlXTF9FUlIoImVycm9yICglZClcbiIsIGVycik7Ci0JfQogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTg5OCw5ICs4NjksOSBAQAogCQkJc2l6ZW9mKHZhci5idWYpKTsKIAlCVUdfT04oIWxlbik7CiAJZXJyID0gd2xfZGV2X2lvY3RsKGRldiwgV0xDX0dFVF9WQVIsICZ2YXIsIGxlbik7Ci0JaWYgKHVubGlrZWx5KGVycikpIHsKKwlpZiAodW5saWtlbHkoZXJyKSkKIAkJV0xfRVJSKCJlcnJvciAoJWQpXG4iLCBlcnIpOwotCX0KKwogCSpyZXR2YWwgPSBsZTMyX3RvX2NwdSh2YXIudmFsKTsKIAogCXJldHVybiBlcnI7CkBAIC05MTEsMTAgKzg4Miw5IEBACiAJczMyIGVyciA9IDA7CiAKIAllcnIgPSB3bF9kZXZfaW50dmFyX3NldChkZXYsICJydHN0aHJlc2giLCBydHNfdGhyZXNob2xkKTsKLQlpZiAodW5saWtlbHkoZXJyKSkgeworCWlmICh1bmxpa2VseShlcnIpKQogCQlXTF9FUlIoIkVycm9yICglZClcbiIsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQorCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtOTIzLDEwICs4OTMsOSBAQAogCXMzMiBlcnIgPSAwOwogCiAJZXJyID0gd2xfZGV2X2ludHZhcl9zZXQoZGV2LCAiZnJhZ3RocmVzaCIsIGZyYWdfdGhyZXNob2xkKTsKLQlpZiAodW5saWtlbHkoZXJyKSkgeworCWlmICh1bmxpa2VseShlcnIpKQogCQlXTF9FUlIoIkVycm9yICglZClcbiIsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQorCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtOTUwLDM3ICs5MTksNDAgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHdsX3RvX25kZXYod2wpOwogCXMzMiBlcnIgPSAwOwogCisJV0xfVFJBQ0UoIkVudGVyXG4iKTsKIAlDSEVDS19TWVNfVVAoKTsKKwogCWlmIChjaGFuZ2VkICYgV0lQSFlfUEFSQU1fUlRTX1RIUkVTSE9MRCAmJgogCSAgICAod2wtPmNvbmYtPnJ0c190aHJlc2hvbGQgIT0gd2lwaHktPnJ0c190aHJlc2hvbGQpKSB7CiAJCXdsLT5jb25mLT5ydHNfdGhyZXNob2xkID0gd2lwaHktPnJ0c190aHJlc2hvbGQ7CiAJCWVyciA9IHdsX3NldF9ydHMobmRldiwgd2wtPmNvbmYtPnJ0c190aHJlc2hvbGQpOwogCQlpZiAoIWVycikKLQkJCXJldHVybiBlcnI7CisJCQlnb3RvIGRvbmU7CiAJfQogCWlmIChjaGFuZ2VkICYgV0lQSFlfUEFSQU1fRlJBR19USFJFU0hPTEQgJiYKIAkgICAgKHdsLT5jb25mLT5mcmFnX3RocmVzaG9sZCAhPSB3aXBoeS0+ZnJhZ190aHJlc2hvbGQpKSB7CiAJCXdsLT5jb25mLT5mcmFnX3RocmVzaG9sZCA9IHdpcGh5LT5mcmFnX3RocmVzaG9sZDsKIAkJZXJyID0gd2xfc2V0X2ZyYWcobmRldiwgd2wtPmNvbmYtPmZyYWdfdGhyZXNob2xkKTsKIAkJaWYgKCFlcnIpCi0JCQlyZXR1cm4gZXJyOworCQkJZ290byBkb25lOwogCX0KIAlpZiAoY2hhbmdlZCAmIFdJUEhZX1BBUkFNX1JFVFJZX0xPTkcKIAkgICAgJiYgKHdsLT5jb25mLT5yZXRyeV9sb25nICE9IHdpcGh5LT5yZXRyeV9sb25nKSkgewogCQl3bC0+Y29uZi0+cmV0cnlfbG9uZyA9IHdpcGh5LT5yZXRyeV9sb25nOwogCQllcnIgPSB3bF9zZXRfcmV0cnkobmRldiwgd2wtPmNvbmYtPnJldHJ5X2xvbmcsIHRydWUpOwogCQlpZiAoIWVycikKLQkJCXJldHVybiBlcnI7CisJCQlnb3RvIGRvbmU7CiAJfQogCWlmIChjaGFuZ2VkICYgV0lQSFlfUEFSQU1fUkVUUllfU0hPUlQKIAkgICAgJiYgKHdsLT5jb25mLT5yZXRyeV9zaG9ydCAhPSB3aXBoeS0+cmV0cnlfc2hvcnQpKSB7CiAJCXdsLT5jb25mLT5yZXRyeV9zaG9ydCA9IHdpcGh5LT5yZXRyeV9zaG9ydDsKIAkJZXJyID0gd2xfc2V0X3JldHJ5KG5kZXYsIHdsLT5jb25mLT5yZXRyeV9zaG9ydCwgZmFsc2UpOwotCQlpZiAoIWVycikgewotCQkJcmV0dXJuIGVycjsKLQkJfQorCQlpZiAoIWVycikKKwkJCWdvdG8gZG9uZTsKIAl9CiAKK2RvbmU6CisJV0xfVFJBQ0UoIkV4aXRcbiIpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTk4OSw2OCArOTYxLDEzOSBAQAogCQkgICAgICBzdHJ1Y3QgY2ZnODAyMTFfaWJzc19wYXJhbXMgKnBhcmFtcykKIHsKIAlzdHJ1Y3Qgd2xfcHJpdiAqd2wgPSB3aXBoeV90b193bCh3aXBoeSk7Ci0Jc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzOwotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjsKIAlzdHJ1Y3Qgd2xfam9pbl9wYXJhbXMgam9pbl9wYXJhbXM7Ci0Jc3RydWN0IGNmZzgwMjExX3NzaWQgc3NpZDsKLQlzMzIgc2Nhbl9yZXRyeSA9IDA7CisJc2l6ZV90IGpvaW5fcGFyYW1zX3NpemUgPSAwOwogCXMzMiBlcnIgPSAwOworCXMzMiB3c2VjID0gMDsKKwlzMzIgYmNucHJkOwogCisJV0xfVFJBQ0UoIkVudGVyXG4iKTsKIAlDSEVDS19TWVNfVVAoKTsKLQlpZiAocGFyYW1zLT5ic3NpZCkgewotCQlXTF9FUlIoIkludmFsaWQgYnNzaWRcbiIpOworCisJaWYgKHBhcmFtcy0+c3NpZCkKKwkJV0xfQ09OTigiU1NJRDogJXNcbiIsIHBhcmFtcy0+c3NpZCk7CisJZWxzZSB7CisJCVdMX0NPTk4oIlNTSUQ6IE5VTEwsIE5vdCBzdXBwb3J0ZWRcbiIpOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQotCWJzcyA9IGNmZzgwMjExX2dldF9pYnNzKHdpcGh5LCBOVUxMLCBwYXJhbXMtPnNzaWQsIHBhcmFtcy0+c3NpZF9sZW4pOwotCWlmICghYnNzKSB7Ci0JCW1lbWNweShzc2lkLnNzaWQsIHBhcmFtcy0+c3NpZCwgcGFyYW1zLT5zc2lkX2xlbik7Ci0JCXNzaWQuc3NpZF9sZW4gPSBwYXJhbXMtPnNzaWRfbGVuOwotCQlkbyB7Ci0JCQlpZiAodW5saWtlbHkKLQkJCSAgICAoX193bF9jZmc4MDIxMV9zY2FuKHdpcGh5LCBkZXYsIE5VTEwsICZzc2lkKSA9PQotCQkJICAgICAtRUJVU1kpKSB7Ci0JCQkJd2xfZGVsYXkoMTUwKTsKLQkJCX0gZWxzZSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0gd2hpbGUgKCsrc2Nhbl9yZXRyeSA8IFdMX1NDQU5fUkVUUllfTUFYKTsKLQkJcnRubF91bmxvY2soKTsJLyogdG8gYWxsb3cgc2Nhbl9pbmZvcm0gdG8gcGFyb3BhZ2F0ZQotCQkJCQkgdG8gY2ZnODAyMTEgcGxhbmUgKi8KLQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKDQgKiBIWik7CS8qIHdhaXQgNCBzZWNvbnMKLQkJCQkJCSB0aWxsIHNjYW4gZG9uZS4uLi4gKi8KLQkJcnRubF9sb2NrKCk7Ci0JCWJzcyA9IGNmZzgwMjExX2dldF9pYnNzKHdpcGh5LCBOVUxMLAotCQkJCQlwYXJhbXMtPnNzaWQsIHBhcmFtcy0+c3NpZF9sZW4pOwotCX0KLQlpZiAoYnNzKSB7Ci0JCXdsLT5pYnNzX3N0YXJ0ZXIgPSBmYWxzZTsKLQkJV0xfREJHKCJGb3VuZCBJQlNTXG4iKTsKLQl9IGVsc2UgewotCQl3bC0+aWJzc19zdGFydGVyID0gdHJ1ZTsKLQl9Ci0JY2hhbiA9IHBhcmFtcy0+Y2hhbm5lbDsKLQlpZiAoY2hhbikKLQkJd2wtPmNoYW5uZWwgPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoY2hhbi0+Y2VudGVyX2ZyZXEpOwotCS8qCi0JICoqIEpvaW4gd2l0aCBzcGVjaWZpYyBCU1NJRCBhbmQgY2FjaGVkIFNTSUQKLQkgKiogSWYgU1NJRCBpcyB6ZXJvIGpvaW4gYmFzZWQgb24gQlNTSUQgb25seQotCSAqLwotCW1lbXNldCgmam9pbl9wYXJhbXMsIDAsIHNpemVvZihqb2luX3BhcmFtcykpOwotCW1lbWNweSgodm9pZCAqKWpvaW5fcGFyYW1zLnNzaWQuU1NJRCwgKHZvaWQgKilwYXJhbXMtPnNzaWQsCi0JICAgICAgIHBhcmFtcy0+c3NpZF9sZW4pOwotCWpvaW5fcGFyYW1zLnNzaWQuU1NJRF9sZW4gPSBjcHVfdG9fbGUzMihwYXJhbXMtPnNzaWRfbGVuKTsKLQlpZiAocGFyYW1zLT5ic3NpZCkKLQkJbWVtY3B5KCZqb2luX3BhcmFtcy5wYXJhbXMuYnNzaWQsIHBhcmFtcy0+YnNzaWQsCi0JCSAgICAgICBFVEhfQUxFTik7Ci0JZWxzZQotCQltZW1zZXQoJmpvaW5fcGFyYW1zLnBhcmFtcy5ic3NpZCwgMCwgRVRIX0FMRU4pOwogCi0JZXJyID0gd2xfZGV2X2lvY3RsKGRldiwgV0xDX1NFVF9TU0lELCAmam9pbl9wYXJhbXMsCi0JCQlzaXplb2Yoam9pbl9wYXJhbXMpKTsKKwlpZiAocGFyYW1zLT5ic3NpZCkKKwkJV0xfQ09OTigiQlNTSUQ6ICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYXG4iLAorCQlwYXJhbXMtPmJzc2lkWzBdLCBwYXJhbXMtPmJzc2lkWzFdLCBwYXJhbXMtPmJzc2lkWzJdLAorCQlwYXJhbXMtPmJzc2lkWzNdLCBwYXJhbXMtPmJzc2lkWzRdLCBwYXJhbXMtPmJzc2lkWzVdKTsKKwllbHNlCisJCVdMX0NPTk4oIk5vIEJTU0lEIHNwZWNpZmllZFxuIik7CisKKwlpZiAocGFyYW1zLT5jaGFubmVsKQorCQlXTF9DT05OKCJjaGFubmVsOiAlZFxuIiwgcGFyYW1zLT5jaGFubmVsLT5jZW50ZXJfZnJlcSk7CisJZWxzZQorCQlXTF9DT05OKCJubyBjaGFubmVsIHNwZWNpZmllZFxuIik7CisKKwlpZiAocGFyYW1zLT5jaGFubmVsX2ZpeGVkKQorCQlXTF9DT05OKCJmaXhlZCBjaGFubmVsIHJlcXVpcmVkXG4iKTsKKwllbHNlCisJCVdMX0NPTk4oIm5vIGZpeGVkIGNoYW5uZWwgcmVxdWlyZWRcbiIpOworCisJaWYgKHBhcmFtcy0+aWUgJiYgcGFyYW1zLT5pZV9sZW4pCisJCVdMX0NPTk4oImllIGxlbjogJWRcbiIsIHBhcmFtcy0+aWVfbGVuKTsKKwllbHNlCisJCVdMX0NPTk4oIm5vIGllIHNwZWNpZmllZFxuIik7CisKKwlpZiAocGFyYW1zLT5iZWFjb25faW50ZXJ2YWwpCisJCVdMX0NPTk4oImJlYWNvbiBpbnRlcnZhbDogJWRcbiIsIHBhcmFtcy0+YmVhY29uX2ludGVydmFsKTsKKwllbHNlCisJCVdMX0NPTk4oIm5vIGJlYWNvbiBpbnRlcnZhbCBzcGVjaWZpZWRcbiIpOworCisJaWYgKHBhcmFtcy0+YmFzaWNfcmF0ZXMpCisJCVdMX0NPTk4oImJhc2ljIHJhdGVzOiAlMDhYXG4iLCBwYXJhbXMtPmJhc2ljX3JhdGVzKTsKKwllbHNlCisJCVdMX0NPTk4oIm5vIGJhc2ljIHJhdGVzIHNwZWNpZmllZFxuIik7CisKKwlpZiAocGFyYW1zLT5wcml2YWN5KQorCQlXTF9DT05OKCJwcml2YWN5IHJlcXVpcmVkXG4iKTsKKwllbHNlCisJCVdMX0NPTk4oIm5vIHByaXZhY3kgcmVxdWlyZWRcbiIpOworCisJLyogQ29uZmlndXJlIFByaXZhY3kgZm9yIHN0YXJ0ZXIgKi8KKwlpZiAocGFyYW1zLT5wcml2YWN5KQorCQl3c2VjIHw9IFdFUF9FTkFCTEVEOworCisJZXJyID0gd2xfZGV2X2ludHZhcl9zZXQoZGV2LCAid3NlYyIsIHdzZWMpOwogCWlmICh1bmxpa2VseShlcnIpKSB7Ci0JCVdMX0VSUigiRXJyb3IgKCVkKVxuIiwgZXJyKTsKLQkJcmV0dXJuIGVycjsKKwkJV0xfRVJSKCJ3c2VjIGZhaWxlZCAoJWQpXG4iLCBlcnIpOworCQlnb3RvIGRvbmU7CiAJfQorCisJLyogQ29uZmlndXJlIEJlYWNvbiBJbnRlcnZhbCBmb3Igc3RhcnRlciAqLworCWlmIChwYXJhbXMtPmJlYWNvbl9pbnRlcnZhbCkKKwkJYmNucHJkID0gY3B1X3RvX2xlMzIocGFyYW1zLT5iZWFjb25faW50ZXJ2YWwpOworCWVsc2UKKwkJYmNucHJkID0gY3B1X3RvX2xlMzIoMTAwKTsKKworCWVyciA9IHdsX2Rldl9pb2N0bChkZXYsIFdMQ19TRVRfQkNOUFJELCAmYmNucHJkLCBzaXplb2YoYmNucHJkKSk7CisJaWYgKHVubGlrZWx5KGVycikpIHsKKwkJV0xfRVJSKCJXTENfU0VUX0JDTlBSRCBmYWlsZWQgKCVkKVxuIiwgZXJyKTsKKwkJZ290byBkb25lOworCX0KKworCS8qIENvbmZpZ3VyZSByZXF1aXJlZCBqb2luIHBhcmFtZXRlciAqLworCW1lbXNldCgmam9pbl9wYXJhbXMsIDAsIHNpemVvZih3bF9qb2luX3BhcmFtc190KSk7CisKKwkvKiBTU0lEICovCisJam9pbl9wYXJhbXMuc3NpZC5TU0lEX2xlbiA9CisJCQkocGFyYW1zLT5zc2lkX2xlbiA+IDMyKSA/IDMyIDogcGFyYW1zLT5zc2lkX2xlbjsKKwltZW1jcHkoam9pbl9wYXJhbXMuc3NpZC5TU0lELCBwYXJhbXMtPnNzaWQsIGpvaW5fcGFyYW1zLnNzaWQuU1NJRF9sZW4pOworCWpvaW5fcGFyYW1zLnNzaWQuU1NJRF9sZW4gPSBjcHVfdG9fbGUzMihqb2luX3BhcmFtcy5zc2lkLlNTSURfbGVuKTsKKwlqb2luX3BhcmFtc19zaXplID0gc2l6ZW9mKGpvaW5fcGFyYW1zLnNzaWQpOworCXdsX3VwZGF0ZV9wcm9mKHdsLCBOVUxMLCAmam9pbl9wYXJhbXMuc3NpZCwgV0xfUFJPRl9TU0lEKTsKKworCS8qIEJTU0lEICovCisJaWYgKHBhcmFtcy0+YnNzaWQpIHsKKwkJbWVtY3B5KGpvaW5fcGFyYW1zLnBhcmFtcy5ic3NpZCwgcGFyYW1zLT5ic3NpZCwgRVRIX0FMRU4pOworCQlqb2luX3BhcmFtc19zaXplID0KKwkJCXNpemVvZihqb2luX3BhcmFtcy5zc2lkKSArIFdMX0FTU09DX1BBUkFNU19GSVhFRF9TSVpFOworCX0gZWxzZSB7CisJCW1lbWNweShqb2luX3BhcmFtcy5wYXJhbXMuYnNzaWQsIGV0aGVyX2JjYXN0LCBFVEhfQUxFTik7CisJfQorCXdsX3VwZGF0ZV9wcm9mKHdsLCBOVUxMLCAmam9pbl9wYXJhbXMucGFyYW1zLmJzc2lkLCBXTF9QUk9GX0JTU0lEKTsKKworCS8qIENoYW5uZWwgKi8KKwlpZiAocGFyYW1zLT5jaGFubmVsKSB7CisJCXUzMiB0YXJnZXRfY2hhbm5lbDsKKworCQl3bC0+Y2hhbm5lbCA9CisJCQlpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoCisJCQkJcGFyYW1zLT5jaGFubmVsLT5jZW50ZXJfZnJlcSk7CisJCWlmIChwYXJhbXMtPmNoYW5uZWxfZml4ZWQpIHsKKwkJCS8qIGFkZGluZyBjaGFuc3BlYyAqLworCQkJd2xfY2hfdG9fY2hhbnNwZWMod2wtPmNoYW5uZWwsCisJCQkJJmpvaW5fcGFyYW1zLCAmam9pbl9wYXJhbXNfc2l6ZSk7CisJCX0KKworCQkvKiBzZXQgY2hhbm5lbCBmb3Igc3RhcnRlciAqLworCQl0YXJnZXRfY2hhbm5lbCA9IGNwdV90b19sZTMyKHdsLT5jaGFubmVsKTsKKwkJZXJyID0gd2xfZGV2X2lvY3RsKGRldiwgV0xDX1NFVF9DSEFOTkVMLAorCQkJJnRhcmdldF9jaGFubmVsLCBzaXplb2YodGFyZ2V0X2NoYW5uZWwpKTsKKwkJaWYgKHVubGlrZWx5KGVycikpIHsKKwkJCVdMX0VSUigiV0xDX1NFVF9DSEFOTkVMIGZhaWxlZCAoJWQpXG4iLCBlcnIpOworCQkJZ290byBkb25lOworCQl9CisJfSBlbHNlCisJCXdsLT5jaGFubmVsID0gMDsKKworCXdsLT5pYnNzX3N0YXJ0ZXIgPSBmYWxzZTsKKworCisJZXJyID0gd2xfZGV2X2lvY3RsKGRldiwgV0xDX1NFVF9TU0lELCAmam9pbl9wYXJhbXMsIGpvaW5fcGFyYW1zX3NpemUpOworCWlmICh1bmxpa2VseShlcnIpKSB7CisJCVdMX0VSUigiV0xDX1NFVF9TU0lEIGZhaWxlZCAoJWQpXG4iLCBlcnIpOworCQlnb3RvIGRvbmU7CisJfQorCisJc2V0X2JpdChXTF9TVEFUVVNfQ09OTkVDVElORywgJndsLT5zdGF0dXMpOworCitkb25lOgorCVdMX1RSQUNFKCJFeGl0XG4iKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMDU5LDkgKzExMDIsMTMgQEAKIAlzdHJ1Y3Qgd2xfcHJpdiAqd2wgPSB3aXBoeV90b193bCh3aXBoeSk7CiAJczMyIGVyciA9IDA7CiAKKwlXTF9UUkFDRSgiRW50ZXJcbiIpOwogCUNIRUNLX1NZU19VUCgpOworCiAJd2xfbGlua19kb3duKHdsKTsKIAorCVdMX1RSQUNFKCJFeGl0XG4iKTsKKwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTEwNzksNyArMTEyNiw3IEBACiAJCXZhbCA9IFdQQTJfQVVUSF9QU0sgfCBXUEEyX0FVVEhfVU5TUEVDSUZJRUQ7CiAJZWxzZQogCQl2YWwgPSBXUEFfQVVUSF9ESVNBQkxFRDsKLQlXTF9EQkcoInNldHRpbmcgd3BhX2F1dGggdG8gMHglMHhcbiIsIHZhbCk7CisJV0xfQ09OTigic2V0dGluZyB3cGFfYXV0aCB0byAweCUweFxuIiwgdmFsKTsKIAllcnIgPSB3bF9kZXZfaW50dmFyX3NldChkZXYsICJ3cGFfYXV0aCIsIHZhbCk7CiAJaWYgKHVubGlrZWx5KGVycikpIHsKIAkJV0xfRVJSKCJzZXQgd3BhX2F1dGggZmFpbGVkICglZClcbiIsIGVycik7CkBAIC0xMTAxLDE4ICsxMTQ4LDE4IEBACiAJc3dpdGNoIChzbWUtPmF1dGhfdHlwZSkgewogCWNhc2UgTkw4MDIxMV9BVVRIVFlQRV9PUEVOX1NZU1RFTToKIAkJdmFsID0gMDsKLQkJV0xfREJHKCJvcGVuIHN5c3RlbVxuIik7CisJCVdMX0NPTk4oIm9wZW4gc3lzdGVtXG4iKTsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0FVVEhUWVBFX1NIQVJFRF9LRVk6CiAJCXZhbCA9IDE7Ci0JCVdMX0RCRygic2hhcmVkIGtleVxuIik7CisJCVdMX0NPTk4oInNoYXJlZCBrZXlcbiIpOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfQVVUSFRZUEVfQVVUT01BVElDOgogCQl2YWwgPSAyOwotCQlXTF9EQkcoImF1dG9tYXRpY1xuIik7CisJCVdMX0NPTk4oImF1dG9tYXRpY1xuIik7CiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9BVVRIVFlQRV9ORVRXT1JLX0VBUDoKLQkJV0xfREJHKCJuZXR3b3JrIGVhcFxuIik7CisJCVdMX0NPTk4oIm5ldHdvcmsgZWFwXG4iKTsKIAlkZWZhdWx0OgogCQl2YWwgPSAyOwogCQlXTF9FUlIoImludmFsaWQgYXV0aCB0eXBlICglZClcbiIsIHNtZS0+YXV0aF90eXBlKTsKQEAgLTExODEsNyArMTIyOCw3IEBACiAJCX0KIAl9CiAKLQlXTF9EQkcoInB2YWwgKCVkKSBndmFsICglZClcbiIsIHB2YWwsIGd2YWwpOworCVdMX0NPTk4oInB2YWwgKCVkKSBndmFsICglZClcbiIsIHB2YWwsIGd2YWwpOwogCWVyciA9IHdsX2Rldl9pbnR2YXJfc2V0KGRldiwgIndzZWMiLCBwdmFsIHwgZ3ZhbCk7CiAJaWYgKHVubGlrZWx5KGVycikpIHsKIAkJV0xfRVJSKCJlcnJvciAoJWQpXG4iLCBlcnIpOwpAQCAtMTIzNyw3ICsxMjg0LDcgQEAKIAkJCX0KIAkJfQogCi0JCVdMX0RCRygic2V0dGluZyB3cGFfYXV0aCB0byAlZFxuIiwgdmFsKTsKKwkJV0xfQ09OTigic2V0dGluZyB3cGFfYXV0aCB0byAlZFxuIiwgdmFsKTsKIAkJZXJyID0gd2xfZGV2X2ludHZhcl9zZXQoZGV2LCAid3BhX2F1dGgiLCB2YWwpOwogCQlpZiAodW5saWtlbHkoZXJyKSkgewogCQkJV0xfRVJSKCJjb3VsZCBub3Qgc2V0IHdwYV9hdXRoICglZClcbiIsIGVycik7CkBAIC0xMjYwLDEwICsxMzA3LDEwIEBACiAJczMyIHZhbDsKIAlzMzIgZXJyID0gMDsKIAotCVdMX0RCRygia2V5IGxlbiAoJWQpXG4iLCBzbWUtPmtleV9sZW4pOworCVdMX0NPTk4oImtleSBsZW4gKCVkKVxuIiwgc21lLT5rZXlfbGVuKTsKIAlpZiAoc21lLT5rZXlfbGVuKSB7CiAJCXNlYyA9IHdsX3JlYWRfcHJvZih3bCwgV0xfUFJPRl9TRUMpOwotCQlXTF9EQkcoIndwYV92ZXJzaW9ucyAweCV4IGNpcGhlcl9wYWlyd2lzZSAweCV4XG4iLAorCQlXTF9DT05OKCJ3cGFfdmVyc2lvbnMgMHgleCBjaXBoZXJfcGFpcndpc2UgMHgleFxuIiwKIAkJICAgICAgIHNlYy0+d3BhX3ZlcnNpb25zLCBzZWMtPmNpcGhlcl9wYWlyd2lzZSk7CiAJCWlmICghCiAJCSAgICAoc2VjLT53cGFfdmVyc2lvbnMgJiAoTkw4MDIxMV9XUEFfVkVSU0lPTl8xIHwKQEAgLTEyOTIsOSArMTMzOSw5IEBACiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCQkvKiBTZXQgdGhlIG5ldyBrZXkvaW5kZXggKi8KLQkJCVdMX0RCRygia2V5IGxlbmd0aCAoJWQpIGtleSBpbmRleCAoJWQpIGFsZ28gKCVkKVxuIiwKKwkJCVdMX0NPTk4oImtleSBsZW5ndGggKCVkKSBrZXkgaW5kZXggKCVkKSBhbGdvICglZClcbiIsCiAJCQkgICAgICAga2V5Lmxlbiwga2V5LmluZGV4LCBrZXkuYWxnbyk7Ci0JCQlXTF9EQkcoImtleSBcIiVzXCJcbiIsIGtleS5kYXRhKTsKKwkJCVdMX0NPTk4oImtleSBcIiVzXCJcbiIsIGtleS5kYXRhKTsKIAkJCXN3YXBfa2V5X2Zyb21fQkUoJmtleSk7CiAJCQllcnIgPSB3bF9kZXZfaW9jdGwoZGV2LCBXTENfU0VUX0tFWSwgJmtleSwKIAkJCQkJc2l6ZW9mKGtleSkpOwpAQCAtMTMwMyw3ICsxMzUwLDcgQEAKIAkJCQlyZXR1cm4gZXJyOwogCQkJfQogCQkJaWYgKHNlYy0+YXV0aF90eXBlID09IE5MODAyMTFfQVVUSFRZUEVfT1BFTl9TWVNURU0pIHsKLQkJCQlXTF9EQkcoInNldCBhdXRoX3R5cGUgdG8gc2hhcmVkIGtleVxuIik7CisJCQkJV0xfQ09OTigic2V0IGF1dGhfdHlwZSB0byBzaGFyZWQga2V5XG4iKTsKIAkJCQl2YWwgPSAxOwkvKiBzaGFyZWQga2V5ICovCiAJCQkJZXJyID0gd2xfZGV2X2ludHZhcl9zZXQoZGV2LCAiYXV0aCIsIHZhbCk7CiAJCQkJaWYgKHVubGlrZWx5KGVycikpIHsKQEAgLTEzMjcsMTcgKzEzNzQsMjQgQEAKIAogCXMzMiBlcnIgPSAwOwogCisJV0xfVFJBQ0UoIkVudGVyXG4iKTsKIAlDSEVDS19TWVNfVVAoKTsKKwogCWlmICh1bmxpa2VseSghc21lLT5zc2lkKSkgewogCQlXTF9FUlIoIkludmFsaWQgc3NpZFxuIik7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CisKIAlpZiAoY2hhbikgewotCQl3bC0+Y2hhbm5lbCA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChjaGFuLT5jZW50ZXJfZnJlcSk7Ci0JCVdMX0RCRygiY2hhbm5lbCAoJWQpLCBjZW50ZXJfcmVxICglZClcbiIsCi0JCSAgICAgICB3bC0+Y2hhbm5lbCwgY2hhbi0+Y2VudGVyX2ZyZXEpOwotCX0KLQlXTF9EQkcoImllICglcCksIGllX2xlbiAoJXpkKVxuIiwgc21lLT5pZSwgc21lLT5pZV9sZW4pOworCQl3bC0+Y2hhbm5lbCA9CisJCQlpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoY2hhbi0+Y2VudGVyX2ZyZXEpOworCQlXTF9DT05OKCJjaGFubmVsICglZCksIGNlbnRlcl9yZXEgKCVkKVxuIiwKKwkJCXdsLT5jaGFubmVsLCBjaGFuLT5jZW50ZXJfZnJlcSk7CisJfSBlbHNlCisJCXdsLT5jaGFubmVsID0gMDsKKworCVdMX0lORk8oImllICglcCksIGllX2xlbiAoJXpkKVxuIiwgc21lLT5pZSwgc21lLT5pZV9sZW4pOworCiAJZXJyID0gd2xfc2V0X3dwYV92ZXJzaW9uKGRldiwgc21lKTsKIAlpZiAodW5saWtlbHkoZXJyKSkKIAkJcmV0dXJuIGVycjsKQEAgLTEzNzAsMTUgKzE0MjQsMTggQEAKIAltZW1jcHkoJmpvaW5fcGFyYW1zLnNzaWQuU1NJRCwgc21lLT5zc2lkLCBqb2luX3BhcmFtcy5zc2lkLlNTSURfbGVuKTsKIAlqb2luX3BhcmFtcy5zc2lkLlNTSURfbGVuID0gY3B1X3RvX2xlMzIoam9pbl9wYXJhbXMuc3NpZC5TU0lEX2xlbik7CiAJd2xfdXBkYXRlX3Byb2Yod2wsIE5VTEwsICZqb2luX3BhcmFtcy5zc2lkLCBXTF9QUk9GX1NTSUQpOwotCW1lbWNweShqb2luX3BhcmFtcy5wYXJhbXMuYnNzaWQsIGV0aGVyX2JjYXN0LCBFVEhfQUxFTik7CiAKLQl3bF9jaF90b19jaGFuc3BlYyh3bC0+Y2hhbm5lbCwgJmpvaW5fcGFyYW1zLCAmam9pbl9wYXJhbXNfc2l6ZSk7Ci0JV0xfREJHKCJqb2luX3BhcmFtX3NpemUgJXp1XG4iLCBqb2luX3BhcmFtc19zaXplKTsKKwlpZiAoc21lLT5ic3NpZCkKKwkJbWVtY3B5KGpvaW5fcGFyYW1zLnBhcmFtcy5ic3NpZCwgc21lLT5ic3NpZCwgRVRIX0FMRU4pOworCWVsc2UKKwkJbWVtY3B5KGpvaW5fcGFyYW1zLnBhcmFtcy5ic3NpZCwgZXRoZXJfYmNhc3QsIEVUSF9BTEVOKTsKIAogCWlmIChqb2luX3BhcmFtcy5zc2lkLlNTSURfbGVuIDwgSUVFRTgwMjExX01BWF9TU0lEX0xFTikgewotCQlXTF9EQkcoInNzaWQgXCIlc1wiLCBsZW4gKCVkKVxuIiwKKwkJV0xfQ09OTigic3NpZCBcIiVzXCIsIGxlbiAoJWQpXG4iLAogCQkgICAgICAgam9pbl9wYXJhbXMuc3NpZC5TU0lELCBqb2luX3BhcmFtcy5zc2lkLlNTSURfbGVuKTsKIAl9CisKKwl3bF9jaF90b19jaGFuc3BlYyh3bC0+Y2hhbm5lbCwgJmpvaW5fcGFyYW1zLCAmam9pbl9wYXJhbXNfc2l6ZSk7CiAJZXJyID0gd2xfZGV2X2lvY3RsKGRldiwgV0xDX1NFVF9TU0lELCAmam9pbl9wYXJhbXMsIGpvaW5fcGFyYW1zX3NpemUpOwogCWlmICh1bmxpa2VseShlcnIpKSB7CiAJCVdMX0VSUigiZXJyb3IgKCVkKVxuIiwgZXJyKTsKQEAgLTEzODYsNiArMTQ0Myw3IEBACiAJfQogCXNldF9iaXQoV0xfU1RBVFVTX0NPTk5FQ1RJTkcsICZ3bC0+c3RhdHVzKTsKIAorCVdMX1RSQUNFKCJFeGl0XG4iKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMzk1LDI0ICsxNDUzLDI0IEBACiB7CiAJc3RydWN0IHdsX3ByaXYgKndsID0gd2lwaHlfdG9fd2wod2lwaHkpOwogCXNjYl92YWxfdCBzY2J2YWw7Ci0JYm9vbCBhY3QgPSBmYWxzZTsKIAlzMzIgZXJyID0gMDsKIAotCVdMX0RCRygiUmVhc29uICVkXG4iLCByZWFzb25fY29kZSk7CisJV0xfVFJBQ0UoIkVudGVyLiBSZWFzb24gY29kZSA9ICVkXG4iLCByZWFzb25fY29kZSk7CiAJQ0hFQ0tfU1lTX1VQKCk7Ci0JYWN0ID0gKihib29sICopIHdsX3JlYWRfcHJvZih3bCwgV0xfUFJPRl9BQ1QpOwotCWlmIChsaWtlbHkoYWN0KSkgewotCQlzY2J2YWwudmFsID0gcmVhc29uX2NvZGU7Ci0JCW1lbWNweSgmc2NidmFsLmVhLCAmd2wtPmJzc2lkLCBFVEhfQUxFTik7Ci0JCXNjYnZhbC52YWwgPSBjcHVfdG9fbGUzMihzY2J2YWwudmFsKTsKLQkJZXJyID0gd2xfZGV2X2lvY3RsKGRldiwgV0xDX0RJU0FTU09DLCAmc2NidmFsLAotCQkJCXNpemVvZihzY2JfdmFsX3QpKTsKLQkJaWYgKHVubGlrZWx5KGVycikpIHsKLQkJCVdMX0VSUigiZXJyb3IgKCVkKVxuIiwgZXJyKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQl9CiAKKwljbGVhcl9iaXQoV0xfU1RBVFVTX0NPTk5FQ1RFRCwgJndsLT5zdGF0dXMpOworCisJc2NidmFsLnZhbCA9IHJlYXNvbl9jb2RlOworCW1lbWNweSgmc2NidmFsLmVhLCB3bF9yZWFkX3Byb2Yod2wsIFdMX1BST0ZfQlNTSUQpLCBFVEhfQUxFTik7CisJc2NidmFsLnZhbCA9IGNwdV90b19sZTMyKHNjYnZhbC52YWwpOworCWVyciA9IHdsX2Rldl9pb2N0bChkZXYsIFdMQ19ESVNBU1NPQywgJnNjYnZhbCwKKwkJCXNpemVvZihzY2JfdmFsX3QpKTsKKwlpZiAodW5saWtlbHkoZXJyKSkKKwkJV0xfRVJSKCJlcnJvciAoJWQpXG4iLCBlcnIpOworCisJd2wtPmxpbmtfdXAgPSBmYWxzZTsKKworCVdMX1RSQUNFKCJFeGl0XG4iKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNDI3LDIwICsxNDg1LDI0IEBACiAJczMyIGVyciA9IDA7CiAJczMyIGRpc2FibGUgPSAwOwogCisJV0xfVFJBQ0UoIkVudGVyXG4iKTsKIAlDSEVDS19TWVNfVVAoKTsKKwogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgTkw4MDIxMV9UWF9QT1dFUl9BVVRPTUFUSUM6CiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9UWF9QT1dFUl9MSU1JVEVEOgogCQlpZiAoZGJtIDwgMCkgewogCQkJV0xfRVJSKCJUWF9QT1dFUl9MSU1JVEVEIC0gZGJtIGlzIG5lZ2F0aXZlXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gZG9uZTsKIAkJfQogCQlicmVhazsKIAljYXNlIE5MODAyMTFfVFhfUE9XRVJfRklYRUQ6CiAJCWlmIChkYm0gPCAwKSB7CiAJCQlXTF9FUlIoIlRYX1BPV0VSX0ZJWEVEIC0gZGJtIGlzIG5lZ2F0aXZlXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gZG9uZTsKIAkJfQogCQlicmVhazsKIAl9CkBAIC0xNDQ4LDEwICsxNTEwLDggQEAKIAlkaXNhYmxlID0gV0xfUkFESU9fU1dfRElTQUJMRSA8PCAxNjsKIAlkaXNhYmxlID0gY3B1X3RvX2xlMzIoZGlzYWJsZSk7CiAJZXJyID0gd2xfZGV2X2lvY3RsKG5kZXYsIFdMQ19TRVRfUkFESU8sICZkaXNhYmxlLCBzaXplb2YoZGlzYWJsZSkpOwotCWlmICh1bmxpa2VseShlcnIpKSB7CisJaWYgKHVubGlrZWx5KGVycikpCiAJCVdMX0VSUigiV0xDX1NFVF9SQURJTyBlcnJvciAoJWQpXG4iLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KIAogCWlmIChkYm0gPiAweGZmZmYpCiAJCXR4cHdybXcgPSAweGZmZmY7CkBAIC0xNDU5LDEyICsxNTE5LDEyIEBACiAJCXR4cHdybXcgPSAodTE2KSBkYm07CiAJZXJyID0gd2xfZGV2X2ludHZhcl9zZXQobmRldiwgInF0eHBvd2VyIiwKIAkJCShzMzIpIChiY21fbXdfdG9fcWRibSh0eHB3cm13KSkpOwotCWlmICh1bmxpa2VseShlcnIpKSB7CisJaWYgKHVubGlrZWx5KGVycikpCiAJCVdMX0VSUigicXR4cG93ZXIgZXJyb3IgKCVkKVxuIiwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9CiAJd2wtPmNvbmYtPnR4X3Bvd2VyID0gZGJtOwogCitkb25lOgorCVdMX1RSQUNFKCJFeGl0XG4iKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNDc2LDE1ICsxNTM2LDIwIEBACiAJdTggcmVzdWx0OwogCXMzMiBlcnIgPSAwOwogCisJV0xfVFJBQ0UoIkVudGVyXG4iKTsKIAlDSEVDS19TWVNfVVAoKTsKKwogCWVyciA9IHdsX2Rldl9pbnR2YXJfZ2V0KG5kZXYsICJxdHhwb3dlciIsICZ0eHB3cmRibSk7CiAJaWYgKHVubGlrZWx5KGVycikpIHsKIAkJV0xfRVJSKCJlcnJvciAoJWQpXG4iLCBlcnIpOwotCQlyZXR1cm4gZXJyOworCQlnb3RvIGRvbmU7CiAJfQorCiAJcmVzdWx0ID0gKHU4KSAodHhwd3JkYm0gJiB+V0xfVFhQV1JfT1ZFUlJJREUpOwogCSpkYm0gPSAoczMyKSBiY21fcWRibV90b19tdyhyZXN1bHQpOwogCitkb25lOgorCVdMX1RSQUNFKCJFeGl0XG4iKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNDk2LDE0ICsxNTYxLDE2IEBACiAJczMyIHdzZWM7CiAJczMyIGVyciA9IDA7CiAKLQlXTF9EQkcoImtleSBpbmRleCAoJWQpXG4iLCBrZXlfaWR4KTsKKwlXTF9UUkFDRSgiRW50ZXJcbiIpOworCVdMX0NPTk4oImtleSBpbmRleCAoJWQpXG4iLCBrZXlfaWR4KTsKIAlDSEVDS19TWVNfVVAoKTsKIAogCWVyciA9IHdsX2Rldl9pb2N0bChkZXYsIFdMQ19HRVRfV1NFQywgJndzZWMsIHNpemVvZih3c2VjKSk7CiAJaWYgKHVubGlrZWx5KGVycikpIHsKIAkJV0xfRVJSKCJXTENfR0VUX1dTRUMgZXJyb3IgKCVkKVxuIiwgZXJyKTsKLQkJcmV0dXJuIGVycjsKKwkJZ290byBkb25lOwogCX0KKwogCXdzZWMgPSBsZTMyX3RvX2NwdSh3c2VjKTsKIAlpZiAod3NlYyAmIFdFUF9FTkFCTEVEKSB7CiAJCS8qIEp1c3Qgc2VsZWN0IGEgbmV3IGN1cnJlbnQga2V5ICovCkBAIC0xNTExLDEwICsxNTc4LDExIEBACiAJCWluZGV4ID0gY3B1X3RvX2xlMzIoaW5kZXgpOwogCQllcnIgPSB3bF9kZXZfaW9jdGwoZGV2LCBXTENfU0VUX0tFWV9QUklNQVJZLCAmaW5kZXgsCiAJCQkJc2l6ZW9mKGluZGV4KSk7Ci0JCWlmICh1bmxpa2VseShlcnIpKSB7CisJCWlmICh1bmxpa2VseShlcnIpKQogCQkJV0xfRVJSKCJlcnJvciAoJWQpXG4iLCBlcnIpOwotCQl9CiAJfQorZG9uZToKKwlXTF9UUkFDRSgiRXhpdFxuIik7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTU0Nyw3ICsxNjE1LDcgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJV0xfREJHKCJTZXR0aW5nIHRoZSBrZXkgaW5kZXggJWRcbiIsIGtleS5pbmRleCk7CisJCVdMX0NPTk4oIlNldHRpbmcgdGhlIGtleSBpbmRleCAlZFxuIiwga2V5LmluZGV4KTsKIAkJbWVtY3B5KGtleS5kYXRhLCBwYXJhbXMtPmtleSwga2V5Lmxlbik7CiAKIAkJaWYgKHBhcmFtcy0+Y2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVApIHsKQEAgLTE1NzEsMjMgKzE2MzksMjMgQEAKIAkJc3dpdGNoIChwYXJhbXMtPmNpcGhlcikgewogCQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwOgogCQkJa2V5LmFsZ28gPSBDUllQVE9fQUxHT19XRVAxOwotCQkJV0xfREJHKCJXTEFOX0NJUEhFUl9TVUlURV9XRVA0MFxuIik7CisJCQlXTF9DT05OKCJXTEFOX0NJUEhFUl9TVUlURV9XRVA0MFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ6CiAJCQlrZXkuYWxnbyA9IENSWVBUT19BTEdPX1dFUDEyODsKLQkJCVdMX0RCRygiV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0XG4iKTsKKwkJCVdMX0NPTk4oIldMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9US0lQOgogCQkJa2V5LmFsZ28gPSBDUllQVE9fQUxHT19US0lQOwotCQkJV0xfREJHKCJXTEFOX0NJUEhFUl9TVUlURV9US0lQXG4iKTsKKwkJCVdMX0NPTk4oIldMQU5fQ0lQSEVSX1NVSVRFX1RLSVBcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUM6CiAJCQlrZXkuYWxnbyA9IENSWVBUT19BTEdPX0FFU19DQ007Ci0JCQlXTF9EQkcoIldMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDXG4iKTsKKwkJCVdMX0NPTk4oIldMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVA6CiAJCQlrZXkuYWxnbyA9IENSWVBUT19BTEdPX0FFU19DQ007Ci0JCQlXTF9EQkcoIldMQU5fQ0lQSEVSX1NVSVRFX0NDTVBcbiIpOworCQkJV0xfQ09OTigiV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUFxuIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCVdMX0VSUigiSW52YWxpZCBjaXBoZXIgKDB4JXgpXG4iLCBwYXJhbXMtPmNpcGhlcik7CkBAIC0xNjE0LDEyICsxNjgyLDE2IEBACiAJczMyIHZhbDsKIAlzMzIgd3NlYzsKIAlzMzIgZXJyID0gMDsKKwl1OCBrZXlidWZbOF07CiAKLQlXTF9EQkcoImtleSBpbmRleCAoJWQpXG4iLCBrZXlfaWR4KTsKKwlXTF9UUkFDRSgiRW50ZXJcbiIpOworCVdMX0NPTk4oImtleSBpbmRleCAoJWQpXG4iLCBrZXlfaWR4KTsKIAlDSEVDS19TWVNfVVAoKTsKIAotCWlmIChtYWNfYWRkcikKKwlpZiAobWFjX2FkZHIpIHsKKwkJV0xfVFJBQ0UoIkV4aXQiKTsKIAkJcmV0dXJuIHdsX2FkZF9rZXlleHQod2lwaHksIGRldiwga2V5X2lkeCwgbWFjX2FkZHIsIHBhcmFtcyk7CisJfQogCW1lbXNldCgma2V5LCAwLCBzaXplb2Yoa2V5KSk7CiAKIAlrZXkubGVuID0gKHUzMikgcGFyYW1zLT5rZXlfbGVuOwpAQCAtMTYyNyw3ICsxNjk5LDggQEAKIAogCWlmICh1bmxpa2VseShrZXkubGVuID4gc2l6ZW9mKGtleS5kYXRhKSkpIHsKIAkJV0xfRVJSKCJUb28gbG9uZyBrZXkgbGVuZ3RoICgldSlcbiIsIGtleS5sZW4pOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBkb25lOwogCX0KIAltZW1jcHkoa2V5LmRhdGEsIHBhcmFtcy0+a2V5LCBrZXkubGVuKTsKIApAQCAtMTYzNSwyNyArMTcwOCwzMSBAQAogCXN3aXRjaCAocGFyYW1zLT5jaXBoZXIpIHsKIAljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwOgogCQlrZXkuYWxnbyA9IENSWVBUT19BTEdPX1dFUDE7Ci0JCVdMX0RCRygiV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDBcbiIpOworCQlXTF9DT05OKCJXTEFOX0NJUEhFUl9TVUlURV9XRVA0MFxuIik7CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OgogCQlrZXkuYWxnbyA9IENSWVBUT19BTEdPX1dFUDEyODsKLQkJV0xfREJHKCJXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDRcbiIpOworCQlXTF9DT05OKCJXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDRcbiIpOwogCQlicmVhazsKIAljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVA6CisJCW1lbWNweShrZXlidWYsICZrZXkuZGF0YVsyNF0sIHNpemVvZihrZXlidWYpKTsKKwkJbWVtY3B5KCZrZXkuZGF0YVsyNF0sICZrZXkuZGF0YVsxNl0sIHNpemVvZihrZXlidWYpKTsKKwkJbWVtY3B5KCZrZXkuZGF0YVsxNl0sIGtleWJ1Ziwgc2l6ZW9mKGtleWJ1ZikpOwogCQlrZXkuYWxnbyA9IENSWVBUT19BTEdPX1RLSVA7Ci0JCVdMX0RCRygiV0xBTl9DSVBIRVJfU1VJVEVfVEtJUFxuIik7CisJCVdMX0NPTk4oIldMQU5fQ0lQSEVSX1NVSVRFX1RLSVBcbiIpOwogCQlicmVhazsKIAljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDOgogCQlrZXkuYWxnbyA9IENSWVBUT19BTEdPX0FFU19DQ007Ci0JCVdMX0RCRygiV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUNcbiIpOworCQlXTF9DT05OKCJXTEFOX0NJUEhFUl9TVUlURV9BRVNfQ01BQ1xuIik7CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUDoKIAkJa2V5LmFsZ28gPSBDUllQVE9fQUxHT19BRVNfQ0NNOwotCQlXTF9EQkcoIldMQU5fQ0lQSEVSX1NVSVRFX0NDTVBcbiIpOworCQlXTF9DT05OKCJXTEFOX0NJUEhFUl9TVUlURV9DQ01QXG4iKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJV0xfRVJSKCJJbnZhbGlkIGNpcGhlciAoMHgleClcbiIsIHBhcmFtcy0+Y2lwaGVyKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZG9uZTsKIAl9CiAKIAkvKiBTZXQgdGhlIG5ldyBrZXkvaW5kZXggKi8KQEAgLTE2NjMsMzAgKzE3NDAsMzAgQEAKIAllcnIgPSB3bF9kZXZfaW9jdGwoZGV2LCBXTENfU0VUX0tFWSwgJmtleSwgc2l6ZW9mKGtleSkpOwogCWlmICh1bmxpa2VseShlcnIpKSB7CiAJCVdMX0VSUigiV0xDX1NFVF9LRVkgZXJyb3IgKCVkKVxuIiwgZXJyKTsKLQkJcmV0dXJuIGVycjsKKwkJZ290byBkb25lOwogCX0KIAogCXZhbCA9IFdFUF9FTkFCTEVEOwogCWVyciA9IHdsX2Rldl9pbnR2YXJfZ2V0KGRldiwgIndzZWMiLCAmd3NlYyk7CiAJaWYgKHVubGlrZWx5KGVycikpIHsKIAkJV0xfRVJSKCJnZXQgd3NlYyBlcnJvciAoJWQpXG4iLCBlcnIpOwotCQlyZXR1cm4gZXJyOworCQlnb3RvIGRvbmU7CiAJfQogCXdzZWMgJj0gfihXRVBfRU5BQkxFRCk7CiAJd3NlYyB8PSB2YWw7CiAJZXJyID0gd2xfZGV2X2ludHZhcl9zZXQoZGV2LCAid3NlYyIsIHdzZWMpOwogCWlmICh1bmxpa2VseShlcnIpKSB7CiAJCVdMX0VSUigic2V0IHdzZWMgZXJyb3IgKCVkKVxuIiwgZXJyKTsKLQkJcmV0dXJuIGVycjsKKwkJZ290byBkb25lOwogCX0KIAogCXZhbCA9IDE7CQkvKiBhc3N1bWUgc2hhcmVkIGtleS4gb3RoZXJ3aXNlIDAgKi8KIAl2YWwgPSBjcHVfdG9fbGUzMih2YWwpOwogCWVyciA9IHdsX2Rldl9pb2N0bChkZXYsIFdMQ19TRVRfQVVUSCwgJnZhbCwgc2l6ZW9mKHZhbCkpOwotCWlmICh1bmxpa2VseShlcnIpKSB7CisJaWYgKHVubGlrZWx5KGVycikpCiAJCVdMX0VSUigiV0xDX1NFVF9BVVRIIGVycm9yICglZClcbiIsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQorZG9uZToKKwlXTF9UUkFDRSgiRXhpdFxuIik7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTY5OSw2ICsxNzc2LDcgQEAKIAlzMzIgdmFsOwogCXMzMiB3c2VjOwogCisJV0xfVFJBQ0UoIkVudGVyXG4iKTsKIAlDSEVDS19TWVNfVVAoKTsKIAltZW1zZXQoJmtleSwgMCwgc2l6ZW9mKGtleSkpOwogCkBAIC0xNzA2LDM0ICsxNzg0LDM5IEBACiAJa2V5LmZsYWdzID0gV0xfUFJJTUFSWV9LRVk7CiAJa2V5LmFsZ28gPSBDUllQVE9fQUxHT19PRkY7CiAKLQlXTF9EQkcoImtleSBpbmRleCAoJWQpXG4iLCBrZXlfaWR4KTsKKwlXTF9DT05OKCJrZXkgaW5kZXggKCVkKVxuIiwga2V5X2lkeCk7CiAJLyogU2V0IHRoZSBuZXcga2V5L2luZGV4ICovCiAJc3dhcF9rZXlfZnJvbV9CRSgma2V5KTsKIAllcnIgPSB3bF9kZXZfaW9jdGwoZGV2LCBXTENfU0VUX0tFWSwgJmtleSwgc2l6ZW9mKGtleSkpOwogCWlmICh1bmxpa2VseShlcnIpKSB7CiAJCWlmIChlcnIgPT0gLUVJTlZBTCkgewotCQkJaWYgKGtleS5pbmRleCA+PSBET1QxMV9NQVhfREVGQVVMVF9LRVlTKSB7CisJCQlpZiAoa2V5LmluZGV4ID49IERPVDExX01BWF9ERUZBVUxUX0tFWVMpCiAJCQkJLyogd2UgaWdub3JlIHRoaXMga2V5IGluZGV4IGluIHRoaXMgY2FzZSAqLwotCQkJCVdMX0RCRygiaW52YWxpZCBrZXkgaW5kZXggKCVkKVxuIiwga2V5X2lkeCk7Ci0JCQl9Ci0JCX0gZWxzZSB7CisJCQkJV0xfRVJSKCJpbnZhbGlkIGtleSBpbmRleCAoJWQpXG4iLCBrZXlfaWR4KTsKKwkJfSBlbHNlCiAJCQlXTF9FUlIoIldMQ19TRVRfS0VZIGVycm9yICglZClcbiIsIGVycik7Ci0JCX0KLQkJcmV0dXJuIGVycjsKKworCQkvKiBJZ25vcmUgdGhpcyBlcnJvciwgbWF5IGhhcHBlbiBkdXJpbmcgRElTQVNTT0MgKi8KKwkJZXJyID0gLUVBR0FJTjsKKwkJZ290byBkb25lOwogCX0KIAogCXZhbCA9IDA7CiAJZXJyID0gd2xfZGV2X2ludHZhcl9nZXQoZGV2LCAid3NlYyIsICZ3c2VjKTsKIAlpZiAodW5saWtlbHkoZXJyKSkgewogCQlXTF9FUlIoImdldCB3c2VjIGVycm9yICglZClcbiIsIGVycik7Ci0JCXJldHVybiBlcnI7CisJCS8qIElnbm9yZSB0aGlzIGVycm9yLCBtYXkgaGFwcGVuIGR1cmluZyBESVNBU1NPQyAqLworCQllcnIgPSAtRUFHQUlOOworCQlnb3RvIGRvbmU7CiAJfQogCXdzZWMgJj0gfihXRVBfRU5BQkxFRCk7CiAJd3NlYyB8PSB2YWw7CiAJZXJyID0gd2xfZGV2X2ludHZhcl9zZXQoZGV2LCAid3NlYyIsIHdzZWMpOwogCWlmICh1bmxpa2VseShlcnIpKSB7CiAJCVdMX0VSUigic2V0IHdzZWMgZXJyb3IgKCVkKVxuIiwgZXJyKTsKLQkJcmV0dXJuIGVycjsKKwkJLyogSWdub3JlIHRoaXMgZXJyb3IsIG1heSBoYXBwZW4gZHVyaW5nIERJU0FTU09DICovCisJCWVyciA9IC1FQUdBSU47CisJCWdvdG8gZG9uZTsKIAl9CiAKIAl2YWwgPSAwOwkJLyogYXNzdW1lIG9wZW4ga2V5LiBvdGhlcndpc2UgMSAqLwpAQCAtMTc0MSw4ICsxODI0LDExIEBACiAJZXJyID0gd2xfZGV2X2lvY3RsKGRldiwgV0xDX1NFVF9BVVRILCAmdmFsLCBzaXplb2YodmFsKSk7CiAJaWYgKHVubGlrZWx5KGVycikpIHsKIAkJV0xfRVJSKCJXTENfU0VUX0FVVEggZXJyb3IgKCVkKVxuIiwgZXJyKTsKLQkJcmV0dXJuIGVycjsKKwkJLyogSWdub3JlIHRoaXMgZXJyb3IsIG1heSBoYXBwZW4gZHVyaW5nIERJU0FTU09DICovCisJCWVyciA9IC1FQUdBSU47CiAJfQorZG9uZToKKwlXTF9UUkFDRSgiRXhpdFxuIik7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTc1OCw3ICsxODQ0LDggQEAKIAlzMzIgd3NlYzsKIAlzMzIgZXJyID0gMDsKIAotCVdMX0RCRygia2V5IGluZGV4ICglZClcbiIsIGtleV9pZHgpOworCVdMX1RSQUNFKCJFbnRlclxuIik7CisJV0xfQ09OTigia2V5IGluZGV4ICglZClcbiIsIGtleV9pZHgpOwogCUNIRUNLX1NZU19VUCgpOwogCiAJbWVtc2V0KCZrZXksIDAsIHNpemVvZihrZXkpKTsKQEAgLTE3NzEsNyArMTg1OCw5IEBACiAJZXJyID0gd2xfZGV2X2lvY3RsKGRldiwgV0xDX0dFVF9XU0VDLCAmd3NlYywgc2l6ZW9mKHdzZWMpKTsKIAlpZiAodW5saWtlbHkoZXJyKSkgewogCQlXTF9FUlIoIldMQ19HRVRfV1NFQyBlcnJvciAoJWQpXG4iLCBlcnIpOwotCQlyZXR1cm4gZXJyOworCQkvKiBJZ25vcmUgdGhpcyBlcnJvciwgbWF5IGhhcHBlbiBkdXJpbmcgRElTQVNTT0MgKi8KKwkJZXJyID0gLUVBR0FJTjsKKwkJZ290byBkb25lOwogCX0KIAl3c2VjID0gbGUzMl90b19jcHUod3NlYyk7CiAJc3dpdGNoICh3c2VjKSB7CkBAIC0xNzc5LDI2ICsxODY4LDI5IEBACiAJCXNlYyA9IHdsX3JlYWRfcHJvZih3bCwgV0xfUFJPRl9TRUMpOwogCQlpZiAoc2VjLT5jaXBoZXJfcGFpcndpc2UgJiBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCkgewogCQkJcGFyYW1zLmNpcGhlciA9IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwOwotCQkJV0xfREJHKCJXTEFOX0NJUEhFUl9TVUlURV9XRVA0MFxuIik7CisJCQlXTF9DT05OKCJXTEFOX0NJUEhFUl9TVUlURV9XRVA0MFxuIik7CiAJCX0gZWxzZSBpZiAoc2VjLT5jaXBoZXJfcGFpcndpc2UgJiBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQpIHsKIAkJCXBhcmFtcy5jaXBoZXIgPSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ7Ci0JCQlXTF9EQkcoIldMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNFxuIik7CisJCQlXTF9DT05OKCJXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDRcbiIpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgVEtJUF9FTkFCTEVEOgogCQlwYXJhbXMuY2lwaGVyID0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUDsKLQkJV0xfREJHKCJXTEFOX0NJUEhFUl9TVUlURV9US0lQXG4iKTsKKwkJV0xfQ09OTigiV0xBTl9DSVBIRVJfU1VJVEVfVEtJUFxuIik7CiAJCWJyZWFrOwogCWNhc2UgQUVTX0VOQUJMRUQ6CiAJCXBhcmFtcy5jaXBoZXIgPSBXTEFOX0NJUEhFUl9TVUlURV9BRVNfQ01BQzsKLQkJV0xfREJHKCJXTEFOX0NJUEhFUl9TVUlURV9BRVNfQ01BQ1xuIik7CisJCVdMX0NPTk4oIldMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDXG4iKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJV0xfRVJSKCJJbnZhbGlkIGFsZ28gKDB4JXgpXG4iLCB3c2VjKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZG9uZTsKIAl9Ci0KIAljYWxsYmFjayhjb29raWUsICZwYXJhbXMpOworCitkb25lOgorCVdMX1RSQUNFKCJFeGl0XG4iKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xODA3LDYgKzE4OTksNyBAQAogCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBrZXlfaWR4KQogewogCVdMX0lORk8oIk5vdCBzdXBwb3J0ZWRcbiIpOworCiAJQ0hFQ0tfU1lTX1VQKCk7CiAJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQpAQCAtMTgyMCwxMiArMTkxMywyMCBAQAogCWludCByc3NpOwogCXMzMiByYXRlOwogCXMzMiBlcnIgPSAwOworCXU4ICpic3NpZCA9IHdsX3JlYWRfcHJvZih3bCwgV0xfUFJPRl9CU1NJRCk7CiAKKwlXTF9UUkFDRSgiRW50ZXJcbiIpOwogCUNIRUNLX1NZU19VUCgpOworCiAJaWYgKHVubGlrZWx5Ci0JICAgIChtZW1jbXAobWFjLCB3bF9yZWFkX3Byb2Yod2wsIFdMX1BST0ZfQlNTSUQpLCBFVEhfQUxFTikpKSB7Ci0JCVdMX0VSUigiV3JvbmcgTWFjIGFkZHJlc3NcbiIpOwotCQlyZXR1cm4gLUVOT0VOVDsKKwkgICAgKG1lbWNtcChtYWMsIGJzc2lkLCBFVEhfQUxFTikpKSB7CisJCVdMX0VSUigiV3JvbmcgTWFjIGFkZHJlc3MgY2ZnX21hYy0lWDolWDolWDolWDolWDolWCIKKwkJCSJ3bF9ic3NpZC0lWDolWDolWDolWDolWDolWFxuIiwKKwkJCW1hY1swXSwgbWFjWzFdLCBtYWNbMl0sIG1hY1szXSwgbWFjWzRdLCBtYWNbNV0sCisJCQlic3NpZFswXSwgYnNzaWRbMV0sIGJzc2lkWzJdLCBic3NpZFszXSwKKwkJCWJzc2lkWzRdLCBic3NpZFs1XSk7CisJCWVyciA9IC1FTk9FTlQ7CisJCWdvdG8gZG9uZTsKIAl9CiAKIAkvKiBSZXBvcnQgdGhlIGN1cnJlbnQgdHggcmF0ZSAqLwpAQCAtMTgzNiw3ICsxOTM3LDcgQEAKIAkJcmF0ZSA9IGxlMzJfdG9fY3B1KHJhdGUpOwogCQlzaW5mby0+ZmlsbGVkIHw9IFNUQVRJT05fSU5GT19UWF9CSVRSQVRFOwogCQlzaW5mby0+dHhyYXRlLmxlZ2FjeSA9IHJhdGUgKiA1OwotCQlXTF9EQkcoIlJhdGUgJWQgTWJwc1xuIiwgcmF0ZSAvIDIpOworCQlXTF9DT05OKCJSYXRlICVkIE1icHNcbiIsIHJhdGUgLyAyKTsKIAl9CiAKIAlpZiAodGVzdF9iaXQoV0xfU1RBVFVTX0NPTk5FQ1RFRCwgJndsLT5zdGF0dXMpKSB7CkBAIC0xODQ1LDE0ICsxOTQ2LDE1IEBACiAJCQkJc2l6ZW9mKHNjYl92YWxfdCkpOwogCQlpZiAodW5saWtlbHkoZXJyKSkgewogCQkJV0xfRVJSKCJDb3VsZCBub3QgZ2V0IHJzc2kgKCVkKVxuIiwgZXJyKTsKLQkJCXJldHVybiBlcnI7CiAJCX0KIAkJcnNzaSA9IGxlMzJfdG9fY3B1KHNjYl92YWwudmFsKTsKIAkJc2luZm8tPmZpbGxlZCB8PSBTVEFUSU9OX0lORk9fU0lHTkFMOwogCQlzaW5mby0+c2lnbmFsID0gcnNzaTsKLQkJV0xfREJHKCJSU1NJICVkIGRCbVxuIiwgcnNzaSk7CisJCVdMX0NPTk4oIlJTU0kgJWQgZEJtXG4iLCByc3NpKTsKIAl9CiAKK2RvbmU6CisJV0xfVFJBQ0UoIkV4aXRcbiIpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE4NjMsMTggKzE5NjUsMjEgQEAKIAlzMzIgcG07CiAJczMyIGVyciA9IDA7CiAKKwlXTF9UUkFDRSgiRW50ZXJcbiIpOwogCUNIRUNLX1NZU19VUCgpOworCiAJcG0gPSBlbmFibGVkID8gUE1fRkFTVCA6IFBNX09GRjsKIAlwbSA9IGNwdV90b19sZTMyKHBtKTsKLQlXTF9EQkcoInBvd2VyIHNhdmUgJXNcbiIsIChwbSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpKTsKKwlXTF9JTkZPKCJwb3dlciBzYXZlICVzXG4iLCAocG0gPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSk7CisKIAllcnIgPSB3bF9kZXZfaW9jdGwoZGV2LCBXTENfU0VUX1BNLCAmcG0sIHNpemVvZihwbSkpOwogCWlmICh1bmxpa2VseShlcnIpKSB7CiAJCWlmIChlcnIgPT0gLUVOT0RFVikKLQkJCVdMX0RCRygibmV0X2RldmljZSBpcyBub3QgcmVhZHkgeWV0XG4iKTsKKwkJCVdMX0VSUigibmV0X2RldmljZSBpcyBub3QgcmVhZHkgeWV0XG4iKTsKIAkJZWxzZQogCQkJV0xfRVJSKCJlcnJvciAoJWQpXG4iLCBlcnIpOwotCQlyZXR1cm4gZXJyOwogCX0KKwlXTF9UUkFDRSgiRXhpdFxuIik7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTkxOCwxNCArMjAyMywxNiBAQAogCXUzMiBsZWdhY3k7CiAJczMyIGVyciA9IDA7CiAKKwlXTF9UUkFDRSgiRW50ZXJcbiIpOwogCUNIRUNLX1NZU19VUCgpOworCiAJLyogYWRkciBwYXJhbSBpcyBhbHdheXMgTlVMTC4gaWdub3JlIGl0ICovCiAJLyogR2V0IGN1cnJlbnQgcmF0ZXNldCAqLwogCWVyciA9IHdsX2Rldl9pb2N0bChkZXYsIFdMQ19HRVRfQ1VSUl9SQVRFU0VULCAmcmF0ZXNldCwKIAkJCXNpemVvZihyYXRlc2V0KSk7CiAJaWYgKHVubGlrZWx5KGVycikpIHsKIAkJV0xfRVJSKCJjb3VsZCBub3QgZ2V0IGN1cnJlbnQgcmF0ZXNldCAoJWQpXG4iLCBlcnIpOwotCQlyZXR1cm4gZXJyOworCQlnb3RvIGRvbmU7CiAJfQogCiAJcmF0ZXNldC5jb3VudCA9IGxlMzJfdG9fY3B1KHJhdGVzZXQuY291bnQpOwpAQCAtMTkzNiwxNSArMjA0MywxNCBAQAogCiAJdmFsID0gd2xfZ19yYXRlc1tsZWdhY3kgLSAxXS5iaXRyYXRlICogMTAwMDAwOwogCi0JaWYgKHZhbCA8IHJhdGVzZXQuY291bnQpIHsKKwlpZiAodmFsIDwgcmF0ZXNldC5jb3VudCkKIAkJLyogU2VsZWN0IHJhdGUgYnkgcmF0ZXNldCBpbmRleCAqLwogCQlyYXRlID0gcmF0ZXNldC5yYXRlc1t2YWxdICYgMHg3ZjsKLQl9IGVsc2UgeworCWVsc2UKIAkJLyogU3BlY2lmaWVkIHJhdGUgaW4gYnBzICovCiAJCXJhdGUgPSB2YWwgLyA1MDAwMDA7Ci0JfQogCi0JV0xfREJHKCJyYXRlICVkIG1icHNcbiIsIHJhdGUgLyAyKTsKKwlXTF9DT05OKCJyYXRlICVkIG1icHNcbiIsIHJhdGUgLyAyKTsKIAogCS8qCiAJICoKQEAgLTE5NTUsNDAgKzIwNjEsMTA1IEBACiAJZXJyX2EgPSB3bF9kZXZfaW50dmFyX3NldChkZXYsICJhX3JhdGUiLCByYXRlKTsKIAlpZiAodW5saWtlbHkoZXJyX2JnICYmIGVycl9hKSkgewogCQlXTF9FUlIoImNvdWxkIG5vdCBzZXQgZml4ZWQgcmF0ZSAoJWQpICglZClcbiIsIGVycl9iZywgZXJyX2EpOwotCQlyZXR1cm4gZXJyX2JnIHwgZXJyX2E7CisJCWVyciA9IGVycl9iZyB8IGVycl9hOwogCX0KIAorZG9uZToKKwlXTF9UUkFDRSgiRXhpdFxuIik7CiAJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHMzMiB3bF9jZmc4MDIxMV9yZXN1bWUoc3RydWN0IHdpcGh5ICp3aXBoeSkKIHsKLQlzMzIgZXJyID0gMDsKKwlzdHJ1Y3Qgd2xfcHJpdiAqd2wgPSB3aXBoeV90b193bCh3aXBoeSk7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSB3bF90b19uZGV2KHdsKTsKIAotCUNIRUNLX1NZU19VUCgpOwotCXdsX2ludm9rZV9pc2Nhbih3aXBoeV90b193bCh3aXBoeSkpOworCS8qCisJICogQ2hlY2sgZm9yIFdMX1NUQVRVU19SRUFEWSBiZWZvcmUgYW55IGZ1bmN0aW9uIGNhbGwgd2hpY2gKKwkgKiBjb3VsZCByZXN1bHQgaXMgYnVzIGFjY2Vzcy4gRG9uJ3QgYmxvY2sgdGhlIHJlc3VtZSBmb3IKKwkgKiBhbnkgZHJpdmVyIGVycm9yIGNvbmRpdGlvbnMKKwkgKi8KKwlXTF9UUkFDRSgiRW50ZXJcbiIpOwogCi0JcmV0dXJuIGVycjsKKyNpZiBkZWZpbmVkKENPTkZJR19QTV9TTEVFUCkKKwlhdG9taWNfc2V0KCZkaGRfbW1jX3N1c3BlbmQsIGZhbHNlKTsKKyNlbmRpZgkvKiAgZGVmaW5lZChDT05GSUdfUE1fU0xFRVApICovCisKKwlpZiAodGVzdF9iaXQoV0xfU1RBVFVTX1JFQURZLCAmd2wtPnN0YXR1cykpIHsKKwkJLyogVHVybiBvbiBXYXRjaGRvZyB0aW1lciAqLworCQl3bF9vc193ZF90aW1lcihuZGV2LCBkaGRfd2F0Y2hkb2dfbXMpOworCQl3bF9pbnZva2VfaXNjYW4od2lwaHlfdG9fd2wod2lwaHkpKTsKKwl9CisKKwlXTF9UUkFDRSgiRXhpdFxuIik7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzMzIgd2xfY2ZnODAyMTFfc3VzcGVuZChzdHJ1Y3Qgd2lwaHkgKndpcGh5KQogewogCXN0cnVjdCB3bF9wcml2ICp3bCA9IHdpcGh5X3RvX3dsKHdpcGh5KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHdsX3RvX25kZXYod2wpOwotCXMzMiBlcnIgPSAwOworCisJV0xfVFJBQ0UoIkVudGVyXG4iKTsKKworCS8qCisJICogQ2hlY2sgZm9yIFdMX1NUQVRVU19SRUFEWSBiZWZvcmUgYW55IGZ1bmN0aW9uIGNhbGwgd2hpY2gKKwkgKiBjb3VsZCByZXN1bHQgaXMgYnVzIGFjY2Vzcy4gRG9uJ3QgYmxvY2sgdGhlIHN1c3BlbmQgZm9yCisJICogYW55IGRyaXZlciBlcnJvciBjb25kaXRpb25zCisJICovCisKKwkvKgorCSAqIFdoaWxlIGdvaW5nIHRvIHN1c3BlbmQgaWYgYXNzb2NpYXRlZCB3aXRoIEFQIGRpc2Fzc29jaWF0ZQorCSAqIGZyb20gQVAgdG8gc2F2ZSBwb3dlciB3aGlsZSBzeXN0ZW0gaXMgaW4gc3VzcGVuZGVkIHN0YXRlCisJICovCisJaWYgKHRlc3RfYml0KFdMX1NUQVRVU19DT05ORUNURUQsICZ3bC0+c3RhdHVzKSAmJgorCQl0ZXN0X2JpdChXTF9TVEFUVVNfUkVBRFksICZ3bC0+c3RhdHVzKSkgeworCQlXTF9JTkZPKCJEaXNhc3NvY2lhdGluZyBmcm9tIEFQIgorCQkJIiB3aGlsZSBlbnRlcmluZyBzdXNwZW5kIHN0YXRlXG4iKTsKKwkJd2xfbGlua19kb3duKHdsKTsKKworCQkvKgorCQkgKiBNYWtlIHN1cmUgV1BBX1N1cHBsaWNhbnQgcmVjZWl2ZXMgYWxsIHRoZSBldmVudAorCQkgKiBnZW5lcmF0ZWQgZHVlIHRvIERJU0FTU09DIGNhbGwgdG8gdGhlIGZ3IHRvIGtlZXAKKwkJICogdGhlIHN0YXRlIGZ3IGFuZCBXUEFfU3VwcGxpY2FudCBzdGF0ZSBjb25zaXN0ZW50CisJCSAqLworCQlydG5sX3VubG9jaygpOworCQl3bF9kZWxheSg1MDApOworCQlydG5sX2xvY2soKTsKKwl9CiAKIAlzZXRfYml0KFdMX1NUQVRVU19TQ0FOX0FCT1JUSU5HLCAmd2wtPnN0YXR1cyk7Ci0Jd2xfdGVybV9pc2Nhbih3bCk7CisJaWYgKHRlc3RfYml0KFdMX1NUQVRVU19SRUFEWSwgJndsLT5zdGF0dXMpKQorCQl3bF90ZXJtX2lzY2FuKHdsKTsKKwogCWlmICh3bC0+c2Nhbl9yZXF1ZXN0KSB7Ci0JCWNmZzgwMjExX3NjYW5fZG9uZSh3bC0+c2Nhbl9yZXF1ZXN0LCB0cnVlKTsJLyogdHJ1ZSBtZWFucwotCQkJCQkJCQkgYWJvcnQgKi8KLQkJd2xfc2V0X21wYyhuZGV2LCAxKTsKKwkJLyogSW5kaWRhdGUgc2NhbiBhYm9ydCB0byBjZmc4MDIxMSBsYXllciAqLworCQlXTF9JTkZPKCJUZXJtaW5hdGluZyBzY2FuIGluIHByb2dyZXNzXG4iKTsKKwkJY2ZnODAyMTFfc2Nhbl9kb25lKHdsLT5zY2FuX3JlcXVlc3QsIHRydWUpOwogCQl3bC0+c2Nhbl9yZXF1ZXN0ID0gTlVMTDsKIAl9CiAJY2xlYXJfYml0KFdMX1NUQVRVU19TQ0FOTklORywgJndsLT5zdGF0dXMpOwogCWNsZWFyX2JpdChXTF9TVEFUVVNfU0NBTl9BQk9SVElORywgJndsLT5zdGF0dXMpOworCWNsZWFyX2JpdChXTF9TVEFUVVNfQ09OTkVDVElORywgJndsLT5zdGF0dXMpOworCWNsZWFyX2JpdChXTF9TVEFUVVNfQ09OTkVDVEVELCAmd2wtPnN0YXR1cyk7CiAKLQlyZXR1cm4gZXJyOworCS8qIEluZm9ybSBTRElPIHN0YWNrIG5vdCB0byBzd2l0Y2ggb2ZmIHBvd2VyIHRvIHRoZSBjaGlwICovCisJc2Rpb2hfc2Rpb19zZXRfaG9zdF9wbV9mbGFncyhNTUNfUE1fS0VFUF9QT1dFUik7CisKKwkvKiBUdXJuIG9mZiB3YXRjaGRvZyB0aW1lciAqLworCWlmICh0ZXN0X2JpdChXTF9TVEFUVVNfUkVBRFksICZ3bC0+c3RhdHVzKSkgeworCQlXTF9JTkZPKCJUZXJtaW5hdGUgd2F0Y2hkb2cgdGltZXIgYW5kIGVuYWJsZSBNUENcbiIpOworCQl3bF9zZXRfbXBjKG5kZXYsIDEpOworCQl3bF9vc193ZF90aW1lcihuZGV2LCAwKTsKKwl9CisKKyNpZiBkZWZpbmVkKENPTkZJR19QTV9TTEVFUCkKKwlhdG9taWNfc2V0KCZkaGRfbW1jX3N1c3BlbmQsIHRydWUpOworI2VuZGlmCS8qICBkZWZpbmVkKENPTkZJR19QTV9TTEVFUCkgKi8KKworCVdMX1RSQUNFKCJFeGl0XG4iKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgX191c2VkIHMzMgpAQCAtMTk5NywxOCArMjE2OCwxNyBAQAogewogCWludCBpLCBqOwogCi0JV0xfREJHKCJObyBvZiBlbGVtZW50cyAlZFxuIiwgcG1rX2xpc3QtPnBta2lkcy5ucG1raWQpOworCVdMX0NPTk4oIk5vIG9mIGVsZW1lbnRzICVkXG4iLCBwbWtfbGlzdC0+cG1raWRzLm5wbWtpZCk7CiAJZm9yIChpID0gMDsgaSA8IHBta19saXN0LT5wbWtpZHMubnBta2lkOyBpKyspIHsKLQkJV0xfREJHKCJQTUtJRFslZF06ICVwTSA9XG4iLCBpLAorCQlXTF9DT05OKCJQTUtJRFslZF06ICVwTSA9XG4iLCBpLAogCQkJJnBta19saXN0LT5wbWtpZHMucG1raWRbaV0uQlNTSUQpOwotCQlmb3IgKGogPSAwOyBqIDwgV0xBTl9QTUtJRF9MRU47IGorKykgewotCQkJV0xfREJHKCIlMDJ4XG4iLCBwbWtfbGlzdC0+cG1raWRzLnBta2lkW2ldLlBNS0lEW2pdKTsKLQkJfQorCQlmb3IgKGogPSAwOyBqIDwgV0xBTl9QTUtJRF9MRU47IGorKykKKwkJCVdMX0NPTk4oIiUwMnhcbiIsIHBta19saXN0LT5wbWtpZHMucG1raWRbaV0uUE1LSURbal0pOwogCX0KLQlpZiAobGlrZWx5KCFlcnIpKSB7Ci0JCWVyciA9IHdsX2Rldl9idWZ2YXJfc2V0KGRldiwgInBta2lkX2luZm8iLCAoY2hhciAqKXBta19saXN0LAorCisJaWYgKGxpa2VseSghZXJyKSkKKwkJd2xfZGV2X2J1ZnZhcl9zZXQoZGV2LCAicG1raWRfaW5mbyIsIChjaGFyICopcG1rX2xpc3QsCiAJCQkJCXNpemVvZigqcG1rX2xpc3QpKTsKLQl9CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtMjAyMSw3ICsyMTkxLDkgQEAKIAlzMzIgZXJyID0gMDsKIAlpbnQgaTsKIAorCVdMX1RSQUNFKCJFbnRlclxuIik7CiAJQ0hFQ0tfU1lTX1VQKCk7CisKIAlmb3IgKGkgPSAwOyBpIDwgd2wtPnBta19saXN0LT5wbWtpZHMubnBta2lkOyBpKyspCiAJCWlmICghbWVtY21wKHBta3NhLT5ic3NpZCwgJndsLT5wbWtfbGlzdC0+cG1raWRzLnBta2lkW2ldLkJTU0lELAogCQkJICAgIEVUSF9BTEVOKSkKQEAgLTIwMzMsMTkgKzIyMDUsMTkgQEAKIAkJICAgICAgIFdMQU5fUE1LSURfTEVOKTsKIAkJaWYgKGkgPT0gd2wtPnBta19saXN0LT5wbWtpZHMubnBta2lkKQogCQkJd2wtPnBta19saXN0LT5wbWtpZHMubnBta2lkKys7Ci0JfSBlbHNlIHsKKwl9IGVsc2UKIAkJZXJyID0gLUVJTlZBTDsKLQl9Ci0JV0xfREJHKCJzZXRfcG1rc2EsSVdfUE1LU0FfQUREIC0gUE1LSUQ6ICVwTSA9XG4iLAorCisJV0xfQ09OTigic2V0X3Bta3NhLElXX1BNS1NBX0FERCAtIFBNS0lEOiAlcE0gPVxuIiwKIAkgICAgICAgJndsLT5wbWtfbGlzdC0+cG1raWRzLnBta2lkW3dsLT5wbWtfbGlzdC0+cG1raWRzLm5wbWtpZF0uQlNTSUQpOwotCWZvciAoaSA9IDA7IGkgPCBXTEFOX1BNS0lEX0xFTjsgaSsrKSB7Ci0JCVdMX0RCRygiJTAyeFxuIiwKKwlmb3IgKGkgPSAwOyBpIDwgV0xBTl9QTUtJRF9MRU47IGkrKykKKwkJV0xfQ09OTigiJTAyeFxuIiwKIAkJICAgICAgIHdsLT5wbWtfbGlzdC0+cG1raWRzLnBta2lkW3dsLT5wbWtfbGlzdC0+cG1raWRzLm5wbWtpZF0uCiAJCSAgICAgICBQTUtJRFtpXSk7Ci0JfQogCiAJZXJyID0gd2xfdXBkYXRlX3Bta2xpc3QoZGV2LCB3bC0+cG1rX2xpc3QsIGVycik7CiAKKwlXTF9UUkFDRSgiRXhpdFxuIik7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjA1OCwxNSArMjIzMCwxNSBAQAogCXMzMiBlcnIgPSAwOwogCWludCBpOwogCisJV0xfVFJBQ0UoIkVudGVyXG4iKTsKIAlDSEVDS19TWVNfVVAoKTsKIAltZW1jcHkoJnBta2lkLnBta2lkWzBdLkJTU0lELCBwbWtzYS0+YnNzaWQsIEVUSF9BTEVOKTsKIAltZW1jcHkoJnBta2lkLnBta2lkWzBdLlBNS0lELCBwbWtzYS0+cG1raWQsIFdMQU5fUE1LSURfTEVOKTsKIAotCVdMX0RCRygiZGVsX3Bta3NhLElXX1BNS1NBX1JFTU9WRSAtIFBNS0lEOiAlcE0gPVxuIiwKKwlXTF9DT05OKCJkZWxfcG1rc2EsSVdfUE1LU0FfUkVNT1ZFIC0gUE1LSUQ6ICVwTSA9XG4iLAogCSAgICAgICAmcG1raWQucG1raWRbMF0uQlNTSUQpOwotCWZvciAoaSA9IDA7IGkgPCBXTEFOX1BNS0lEX0xFTjsgaSsrKSB7Ci0JCVdMX0RCRygiJTAyeFxuIiwgcG1raWQucG1raWRbMF0uUE1LSURbaV0pOwotCX0KKwlmb3IgKGkgPSAwOyBpIDwgV0xBTl9QTUtJRF9MRU47IGkrKykKKwkJV0xfQ09OTigiJTAyeFxuIiwgcG1raWQucG1raWRbMF0uUE1LSURbaV0pOwogCiAJZm9yIChpID0gMDsgaSA8IHdsLT5wbWtfbGlzdC0+cG1raWRzLm5wbWtpZDsgaSsrKQogCQlpZiAoIW1lbWNtcApAQCAtMjA4NiwxMiArMjI1OCwxMiBAQAogCQkJICAgICAgIFdMQU5fUE1LSURfTEVOKTsKIAkJfQogCQl3bC0+cG1rX2xpc3QtPnBta2lkcy5ucG1raWQtLTsKLQl9IGVsc2UgeworCX0gZWxzZQogCQllcnIgPSAtRUlOVkFMOwotCX0KIAogCWVyciA9IHdsX3VwZGF0ZV9wbWtsaXN0KGRldiwgd2wtPnBta19saXN0LCBlcnIpOwogCisJV0xfVFJBQ0UoIkV4aXRcbiIpOwogCXJldHVybiBlcnI7CiAKIH0KQEAgLTIxMDIsOSArMjI3NCwxMyBAQAogCXN0cnVjdCB3bF9wcml2ICp3bCA9IHdpcGh5X3RvX3dsKHdpcGh5KTsKIAlzMzIgZXJyID0gMDsKIAorCVdMX1RSQUNFKCJFbnRlclxuIik7CiAJQ0hFQ0tfU1lTX1VQKCk7CisKIAltZW1zZXQod2wtPnBta19saXN0LCAwLCBzaXplb2YoKndsLT5wbWtfbGlzdCkpOwogCWVyciA9IHdsX3VwZGF0ZV9wbWtsaXN0KGRldiwgd2wtPnBta19saXN0LCBlcnIpOworCisJV0xfVFJBQ0UoIkV4aXRcbiIpOwogCXJldHVybiBlcnI7CiAKIH0KQEAgLTIyMzUsNyArMjQxMSw3IEBACiAJCSAgICAgICBic3NfbGlzdC0+dmVyc2lvbik7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9Ci0JV0xfREJHKCJzY2FubmVkIEFQIGNvdW50ICglZClcbiIsIGJzc19saXN0LT5jb3VudCk7CisJV0xfU0NBTigic2Nhbm5lZCBBUCBjb3VudCAoJWQpXG4iLCBic3NfbGlzdC0+Y291bnQpOwogCWJpID0gbmV4dF9ic3MoYnNzX2xpc3QsIGJpKTsKIAlmb3JfZWFjaF9ic3MoYnNzX2xpc3QsIGJpLCBpKSB7CiAJCWVyciA9IHdsX2luZm9ybV9zaW5nbGVfYnNzKHdsLCBiaSk7CkBAIC0yMjQ1LDg5ICsyNDIxLDEzNyBAQAogCXJldHVybiBlcnI7CiB9CiAKKwogc3RhdGljIHMzMiB3bF9pbmZvcm1fc2luZ2xlX2JzcyhzdHJ1Y3Qgd2xfcHJpdiAqd2wsIHN0cnVjdCB3bF9ic3NfaW5mbyAqYmkpCiB7CiAJc3RydWN0IHdpcGh5ICp3aXBoeSA9IHdsX3RvX3dpcGh5KHdsKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqbm90aWZ5X2NoYW5uZWw7CisJc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzOwogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKmJhbmQ7Ci0Jc3RydWN0IHdsX2NmZzgwMjExX2Jzc19pbmZvICpub3RpZl9ic3NfaW5mbzsKLQlzdHJ1Y3Qgd2xfc2Nhbl9yZXEgKnNyID0gd2xfdG9fc3Iod2wpOwotCXN0cnVjdCBiZWFjb25fcHJvYmVyZXNwICpiZWFjb25fcHJvYmVyZXNwOwotCXMzMiBtZ210X3R5cGU7Ci0JdTMyIHNpZ25hbDsKLQl1MzIgZnJlcTsKIAlzMzIgZXJyID0gMDsKKwl1MTYgY2hhbm5lbDsKKwl1MzIgZnJlcTsKKwl1NjQgbm90aWZ5X3RpbWVzdGFtcDsKKwl1MTYgbm90aWZ5X2NhcGFiaWxpdHk7CisJdTE2IG5vdGlmeV9pbnRlcnZhbDsKKwl1OCAqbm90aWZ5X2llOworCXNpemVfdCBub3RpZnlfaWVsZW47CisJczMyIG5vdGlmeV9zaWduYWw7CiAKIAlpZiAodW5saWtlbHkobGUzMl90b19jcHUoYmktPmxlbmd0aCkgPiBXTF9CU1NfSU5GT19NQVgpKSB7Ci0JCVdMX0RCRygiQmVhY29uIGlzIGxhcmdlciB0aGFuIGJ1ZmZlci4gRGlzY2FyZGluZ1xuIik7Ci0JCXJldHVybiBlcnI7CisJCVdMX0VSUigiQnNzIGluZm8gaXMgbGFyZ2VyIHRoYW4gYnVmZmVyLiBEaXNjYXJkaW5nXG4iKTsKKwkJcmV0dXJuIDA7CiAJfQotCW5vdGlmX2Jzc19pbmZvID0KLQkgICAga3phbGxvYyhzaXplb2YoKm5vdGlmX2Jzc19pbmZvKSArIHNpemVvZigqbWdtdCkgLSBzaXplb2YodTgpICsKLQkJICAgIFdMX0JTU19JTkZPX01BWCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHVubGlrZWx5KCFub3RpZl9ic3NfaW5mbykpIHsKLQkJV0xfRVJSKCJub3RpZl9ic3NfaW5mbyBhbGxvYyBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilub3RpZl9ic3NfaW5mby0+ZnJhbWVfYnVmOwotCW5vdGlmX2Jzc19pbmZvLT5jaGFubmVsID0KLQkJYmktPmN0bF9jaCA/IGJpLT5jdGxfY2ggOiBDSFNQRUNfQ0hBTk5FTChiaS0+Y2hhbnNwZWMpOwogCi0JaWYgKG5vdGlmX2Jzc19pbmZvLT5jaGFubmVsIDw9IENIX01BWF8yR19DSEFOTkVMKQorCWNoYW5uZWwgPSBiaS0+Y3RsX2NoID8gYmktPmN0bF9jaCA6CisJCQkJQ0hTUEVDX0NIQU5ORUwobGUxNl90b19jcHUoYmktPmNoYW5zcGVjKSk7CisKKwlpZiAoY2hhbm5lbCA8PSBDSF9NQVhfMkdfQ0hBTk5FTCkKIAkJYmFuZCA9IHdpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXTsKIAllbHNlCiAJCWJhbmQgPSB3aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl07Ci0Jbm90aWZfYnNzX2luZm8tPnJzc2kgPSBiaS0+UlNTSTsKLQltZW1jcHkobWdtdC0+YnNzaWQsICZiaS0+QlNTSUQsIEVUSF9BTEVOKTsKLQltZ210X3R5cGUgPSB3bC0+YWN0aXZlX3NjYW4gPwotCQlJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCA6IElFRUU4MDIxMV9TVFlQRV9CRUFDT047Ci0JaWYgKCFtZW1jbXAoYmktPlNTSUQsIHNyLT5zc2lkLlNTSUQsIGJpLT5TU0lEX2xlbikpIHsKLQkJbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKLQkJCQkJCQltZ210X3R5cGUpOwotCX0KLQliZWFjb25fcHJvYmVyZXNwID0gd2wtPmFjdGl2ZV9zY2FuID8KLQkJKHN0cnVjdCBiZWFjb25fcHJvYmVyZXNwICopJm1nbXQtPnUucHJvYmVfcmVzcCA6Ci0JCShzdHJ1Y3QgYmVhY29uX3Byb2JlcmVzcCAqKSZtZ210LT51LmJlYWNvbjsKLQliZWFjb25fcHJvYmVyZXNwLT50aW1lc3RhbXAgPSAwOwotCWJlYWNvbl9wcm9iZXJlc3AtPmJlYWNvbl9pbnQgPSBjcHVfdG9fbGUxNihiaS0+YmVhY29uX3BlcmlvZCk7Ci0JYmVhY29uX3Byb2JlcmVzcC0+Y2FwYWJfaW5mbyA9IGNwdV90b19sZTE2KGJpLT5jYXBhYmlsaXR5KTsKLQl3bF9yc3RfaWUod2wpOwotCS8qCi0JKiB3bF9hZGRfaWUgaXMgbm90IG5lY2Vzc2FyeSBiZWNhdXNlIGl0IGNhbiBvbmx5IGFkZCBkdXBsaWNhdGVkCi0JKiBTU0lELCByYXRlIGluZm9ybWF0aW9uIHRvIGZyYW1lX2J1ZgotCSovCi0JLyoKLQkqIHdsX2FkZF9pZSh3bCwgV0xBTl9FSURfU1NJRCwgYmktPlNTSURfbGVuLCBiaS0+U1NJRCk7Ci0JKiB3bF9hZGRfaWUod2wsIFdMQU5fRUlEX1NVUFBfUkFURVMsIGJpLT5yYXRlc2V0LmNvdW50LAotCSogYmktPnJhdGVzZXQucmF0ZXMpOwotCSovCi0Jd2xfbXJnX2llKHdsLCAoKHU4ICopIGJpKSArIGJpLT5pZV9vZmZzZXQsIGJpLT5pZV9sZW5ndGgpOwotCXdsX2NwX2llKHdsLCBiZWFjb25fcHJvYmVyZXNwLT52YXJpYWJsZSwgV0xfQlNTX0lORk9fTUFYIC0KLQkJIG9mZnNldG9mKHN0cnVjdCB3bF9jZmc4MDIxMV9ic3NfaW5mbywgZnJhbWVfYnVmKSk7Ci0Jbm90aWZfYnNzX2luZm8tPmZyYW1lX2xlbiA9Ci0JICAgIG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwKLQkJICAgICB1LmJlYWNvbi52YXJpYWJsZSkgKyB3bF9nZXRfaWVsZW4od2wpOwotCWZyZXEgPSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3kobm90aWZfYnNzX2luZm8tPmNoYW5uZWwsCi0JCQkJCSAgICAgIGJhbmQtPmJhbmQpOwogCi0JY2hhbm5lbCA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbCh3aXBoeSwgZnJlcSk7CisJZnJlcSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShjaGFubmVsLCBiYW5kLT5iYW5kKTsKKwlub3RpZnlfY2hhbm5lbCA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbCh3aXBoeSwgZnJlcSk7CiAKLQlXTF9EQkcoIlNTSUQgOiBcIiVzXCIsIHJzc2kgJWQsIGNoYW5uZWwgJWQsIGNhcGFiaWxpdHkgOiAweDA0JXgsIGJzc2lkICVwTVxuIiwKLQkgICAgICAgYmktPlNTSUQsCi0JICAgICAgIG5vdGlmX2Jzc19pbmZvLT5yc3NpLCBub3RpZl9ic3NfaW5mby0+Y2hhbm5lbCwKLQkgICAgICAgbWdtdC0+dS5iZWFjb24uY2FwYWJfaW5mbywgJmJpLT5CU1NJRCk7CisJbm90aWZ5X3RpbWVzdGFtcCA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcykqMTAwMDsgLyogdVNlYyAqLworCW5vdGlmeV9jYXBhYmlsaXR5ID0gbGUxNl90b19jcHUoYmktPmNhcGFiaWxpdHkpOworCW5vdGlmeV9pbnRlcnZhbCA9IGxlMTZfdG9fY3B1KGJpLT5iZWFjb25fcGVyaW9kKTsKKwlub3RpZnlfaWUgPSAodTggKiliaSArIGxlMTZfdG9fY3B1KGJpLT5pZV9vZmZzZXQpOworCW5vdGlmeV9pZWxlbiA9IGxlMTZfdG9fY3B1KGJpLT5pZV9sZW5ndGgpOworCW5vdGlmeV9zaWduYWwgPSAoczE2KWxlMTZfdG9fY3B1KGJpLT5SU1NJKSAqIDEwMDsKIAotCXNpZ25hbCA9IG5vdGlmX2Jzc19pbmZvLT5yc3NpICogMTAwOwotCWlmICh1bmxpa2VseSghY2ZnODAyMTFfaW5mb3JtX2Jzc19mcmFtZSh3aXBoeSwgY2hhbm5lbCwgbWdtdCwKLQkJCQkJCWxlMTZfdG9fY3B1Ci0JCQkJCQkobm90aWZfYnNzX2luZm8tPmZyYW1lX2xlbiksCi0JCQkJCQlzaWduYWwsIEdGUF9LRVJORUwpKSkgeworCVdMX0NPTk4oImJzc2lkOiAlMi4yWDolMi4yWDolMi4yWDolMi4yWDolMi4yWDolMi4yWFxuIiwKKwkJCWJpLT5CU1NJRFswXSwgYmktPkJTU0lEWzFdLCBiaS0+QlNTSURbMl0sCisJCQliaS0+QlNTSURbM10sIGJpLT5CU1NJRFs0XSwgYmktPkJTU0lEWzVdKTsKKwlXTF9DT05OKCJDaGFubmVsOiAlZCglZClcbiIsIGNoYW5uZWwsIGZyZXEpOworCVdMX0NPTk4oIkNhcGFiaWxpdHk6ICVYXG4iLCBub3RpZnlfY2FwYWJpbGl0eSk7CisJV0xfQ09OTigiQmVhY29uIGludGVydmFsOiAlZFxuIiwgbm90aWZ5X2ludGVydmFsKTsKKwlXTF9DT05OKCJTaWduYWw6ICVkXG4iLCBub3RpZnlfc2lnbmFsKTsKKwlXTF9DT05OKCJub3RpZnlfdGltZXN0YW1wOiAlIzAxOGxseFxuIiwgbm90aWZ5X3RpbWVzdGFtcCk7CisKKwlic3MgPSBjZmc4MDIxMV9pbmZvcm1fYnNzKHdpcGh5LCBub3RpZnlfY2hhbm5lbCwgKGNvbnN0IHU4ICopYmktPkJTU0lELAorCQlub3RpZnlfdGltZXN0YW1wLCBub3RpZnlfY2FwYWJpbGl0eSwgbm90aWZ5X2ludGVydmFsLCBub3RpZnlfaWUsCisJCW5vdGlmeV9pZWxlbiwgbm90aWZ5X3NpZ25hbCwgR0ZQX0tFUk5FTCk7CisKKwlpZiAodW5saWtlbHkoIWJzcykpIHsKIAkJV0xfRVJSKCJjZmc4MDIxMV9pbmZvcm1fYnNzX2ZyYW1lIGVycm9yXG4iKTsKLQkJa2ZyZWUobm90aWZfYnNzX2luZm8pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0Ja2ZyZWUobm90aWZfYnNzX2luZm8pOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHMzMgord2xfaW5mb3JtX2lic3Moc3RydWN0IHdsX3ByaXYgKndsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQpCit7CisJc3RydWN0IHdpcGh5ICp3aXBoeSA9IHdsX3RvX3dpcGh5KHdsKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKm5vdGlmeV9jaGFubmVsOworCXN0cnVjdCB3bF9ic3NfaW5mbyAqYmkgPSBOVUxMOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKmJhbmQ7CisJdTggKmJ1ZiA9IE5VTEw7CisJczMyIGVyciA9IDA7CisJdTE2IGNoYW5uZWw7CisJdTMyIGZyZXE7CisJdTY0IG5vdGlmeV90aW1lc3RhbXA7CisJdTE2IG5vdGlmeV9jYXBhYmlsaXR5OworCXUxNiBub3RpZnlfaW50ZXJ2YWw7CisJdTggKm5vdGlmeV9pZTsKKwlzaXplX3Qgbm90aWZ5X2llbGVuOworCXMzMiBub3RpZnlfc2lnbmFsOworCisJV0xfVFJBQ0UoIkVudGVyXG4iKTsKKworCWJ1ZiA9IGt6YWxsb2MoV0xfQlNTX0lORk9fTUFYLCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVmID09IE5VTEwpIHsKKwkJV0xfRVJSKCJremFsbG9jKCkgZmFpbGVkXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBDbGVhblVwOworCX0KKworCSoodTMyICopYnVmID0gY3B1X3RvX2xlMzIoV0xfQlNTX0lORk9fTUFYKTsKKworCWVyciA9IHdsX2Rldl9pb2N0bChkZXYsIFdMQ19HRVRfQlNTX0lORk8sIGJ1ZiwgV0xfQlNTX0lORk9fTUFYKTsKKwlpZiAodW5saWtlbHkoZXJyKSkgeworCQlXTF9FUlIoIldMQ19HRVRfQlNTX0lORk8gZmFpbGVkOiAlZFxuIiwgZXJyKTsKKwkJZ290byBDbGVhblVwOworCX0KKworCWJpID0gKHdsX2Jzc19pbmZvX3QgKikoYnVmICsgNCk7CisKKwljaGFubmVsID0gYmktPmN0bF9jaCA/IGJpLT5jdGxfY2ggOgorCQkJCUNIU1BFQ19DSEFOTkVMKGxlMTZfdG9fY3B1KGJpLT5jaGFuc3BlYykpOworCisJaWYgKGNoYW5uZWwgPD0gQ0hfTUFYXzJHX0NIQU5ORUwpCisJCWJhbmQgPSB3aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07CisJZWxzZQorCQliYW5kID0gd2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOworCisJZnJlcSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShjaGFubmVsLCBiYW5kLT5iYW5kKTsKKwlub3RpZnlfY2hhbm5lbCA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbCh3aXBoeSwgZnJlcSk7CisKKwlub3RpZnlfdGltZXN0YW1wID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzKSoxMDAwOyAvKiB1U2VjICovCisJbm90aWZ5X2NhcGFiaWxpdHkgPSBsZTE2X3RvX2NwdShiaS0+Y2FwYWJpbGl0eSk7CisJbm90aWZ5X2ludGVydmFsID0gbGUxNl90b19jcHUoYmktPmJlYWNvbl9wZXJpb2QpOworCW5vdGlmeV9pZSA9ICh1OCAqKWJpICsgbGUxNl90b19jcHUoYmktPmllX29mZnNldCk7CisJbm90aWZ5X2llbGVuID0gbGUxNl90b19jcHUoYmktPmllX2xlbmd0aCk7CisJbm90aWZ5X3NpZ25hbCA9IChzMTYpbGUxNl90b19jcHUoYmktPlJTU0kpICogMTAwOworCisJV0xfQ09OTigiY2hhbm5lbDogJWQoJWQpXG4iLCBjaGFubmVsLCBmcmVxKTsKKwlXTF9DT05OKCJjYXBhYmlsaXR5OiAlWFxuIiwgbm90aWZ5X2NhcGFiaWxpdHkpOworCVdMX0NPTk4oImJlYWNvbiBpbnRlcnZhbDogJWRcbiIsIG5vdGlmeV9pbnRlcnZhbCk7CisJV0xfQ09OTigic2lnbmFsOiAlZFxuIiwgbm90aWZ5X3NpZ25hbCk7CisJV0xfQ09OTigibm90aWZ5X3RpbWVzdGFtcDogJSMwMThsbHhcbiIsIG5vdGlmeV90aW1lc3RhbXApOworCisJY2ZnODAyMTFfaW5mb3JtX2Jzcyh3aXBoeSwgbm90aWZ5X2NoYW5uZWwsIGJzc2lkLAorCQlub3RpZnlfdGltZXN0YW1wLCBub3RpZnlfY2FwYWJpbGl0eSwgbm90aWZ5X2ludGVydmFsLAorCQlub3RpZnlfaWUsIG5vdGlmeV9pZWxlbiwgbm90aWZ5X3NpZ25hbCwgR0ZQX0tFUk5FTCk7CisKK0NsZWFuVXA6CisKKwlrZnJlZShidWYpOworCisJV0xfVFJBQ0UoIkV4aXRcbiIpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTIzMzUsMTcgKzI1NTksMTIgQEAKIHN0YXRpYyBib29sIHdsX2lzX2xpbmt1cChzdHJ1Y3Qgd2xfcHJpdiAqd2wsIGNvbnN0IHdsX2V2ZW50X21zZ190ICplKQogewogCXUzMiBldmVudCA9IGJlMzJfdG9fY3B1KGUtPmV2ZW50X3R5cGUpOwotCXUxNiBmbGFncyA9IGJlMTZfdG9fY3B1KGUtPmZsYWdzKTsKKwl1MzIgc3RhdHVzID0gYmUzMl90b19jcHUoZS0+c3RhdHVzKTsKIAotCWlmIChldmVudCA9PSBXTENfRV9MSU5LKSB7Ci0JCWlmIChmbGFncyAmIFdMQ19FVkVOVF9NU0dfTElOSykgewotCQkJaWYgKHdsX2lzX2lic3Ntb2RlKHdsKSkgewotCQkJCWlmICh3bF9pc19pYnNzc3RhcnRlcih3bCkpIHsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9CisJaWYgKGV2ZW50ID09IFdMQ19FX1NFVF9TU0lEICYmIHN0YXR1cyA9PSBXTENfRV9TVEFUVVNfU1VDQ0VTUykgeworCQlXTF9DT05OKCJQcm9jZXNzaW5nIHNldCBzc2lkXG4iKTsKKwkJd2wtPmxpbmtfdXAgPSB0cnVlOworCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKIAlyZXR1cm4gZmFsc2U7CkBAIC0yMzU2LDEzICsyNTc1LDEwIEBACiAJdTMyIGV2ZW50ID0gYmUzMl90b19jcHUoZS0+ZXZlbnRfdHlwZSk7CiAJdTE2IGZsYWdzID0gYmUxNl90b19jcHUoZS0+ZmxhZ3MpOwogCi0JaWYgKGV2ZW50ID09IFdMQ19FX0RFQVVUSF9JTkQgfHwgZXZlbnQgPT0gV0xDX0VfRElTQVNTT0NfSU5EKSB7CisJaWYgKGV2ZW50ID09IFdMQ19FX0xJTksgJiYgKCEoZmxhZ3MgJiBXTENfRVZFTlRfTVNHX0xJTkspKSkgeworCQlXTF9DT05OKCJQcm9jZXNzaW5nIGxpbmsgZG93blxuIik7CiAJCXJldHVybiB0cnVlOwotCX0gZWxzZSBpZiAoZXZlbnQgPT0gV0xDX0VfTElOSykgewotCQlpZiAoIShmbGFncyAmIFdMQ19FVkVOVF9NU0dfTElOSykpCi0JCQlyZXR1cm4gdHJ1ZTsKIAl9Ci0KIAlyZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTIzNzAsMTAgKzI1ODYsMTcgQEAKIHsKIAl1MzIgZXZlbnQgPSBiZTMyX3RvX2NwdShlLT5ldmVudF90eXBlKTsKIAl1MzIgc3RhdHVzID0gYmUzMl90b19jcHUoZS0+c3RhdHVzKTsKKwl1MTYgZmxhZ3MgPSBiZTE2X3RvX2NwdShlLT5mbGFncyk7CiAKLQlpZiAoZXZlbnQgPT0gV0xDX0VfU0VUX1NTSUQgfHwgZXZlbnQgPT0gV0xDX0VfTElOSykgewotCQlpZiAoc3RhdHVzID09IFdMQ19FX1NUQVRVU19OT19ORVRXT1JLUykKLQkJCXJldHVybiB0cnVlOworCWlmIChldmVudCA9PSBXTENfRV9MSU5LICYmIHN0YXR1cyA9PSBXTENfRV9TVEFUVVNfTk9fTkVUV09SS1MpIHsKKwkJV0xfQ09OTigiUHJvY2Vzc2luZyBMaW5rICVzICYgbm8gbmV0d29yayBmb3VuZFxuIiwKKwkJCQlmbGFncyAmIFdMQ19FVkVOVF9NU0dfTElOSyA/ICJ1cCIgOiAiZG93biIpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlpZiAoZXZlbnQgPT0gV0xDX0VfU0VUX1NTSUQgJiYgc3RhdHVzICE9IFdMQ19FX1NUQVRVU19TVUNDRVNTKSB7CisJCVdMX0NPTk4oIlByb2Nlc3NpbmcgY29ubmVjdGluZyAmIG5vIG5ldHdvcmsgZm91bmRcbiIpOworCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKIAlyZXR1cm4gZmFsc2U7CkBAIC0yMzgzLDMwICsyNjA2LDM5IEBACiB3bF9ub3RpZnlfY29ubmVjdF9zdGF0dXMoc3RydWN0IHdsX3ByaXYgKndsLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAkJCSBjb25zdCB3bF9ldmVudF9tc2dfdCAqZSwgdm9pZCAqZGF0YSkKIHsKLQlib29sIGFjdDsKIAlzMzIgZXJyID0gMDsKIAogCWlmICh3bF9pc19saW5rdXAod2wsIGUpKSB7Ci0JCXdsX2xpbmtfdXAod2wpOworCQlXTF9DT05OKCJMaW5rdXBcbiIpOwogCQlpZiAod2xfaXNfaWJzc21vZGUod2wpKSB7Ci0JCQljZmc4MDIxMV9pYnNzX2pvaW5lZChuZGV2LCAoczggKikmZS0+YWRkciwKLQkJCQkJICAgICBHRlBfS0VSTkVMKTsKLQkJCVdMX0RCRygiam9pbmVkIGluIElCU1MgbmV0d29ya1xuIik7Ci0JCX0gZWxzZSB7CisJCQl3bF91cGRhdGVfcHJvZih3bCwgTlVMTCwgKHZvaWQgKillLT5hZGRyLAorCQkJCVdMX1BST0ZfQlNTSUQpOworCQkJd2xfaW5mb3JtX2lic3Mod2wsIG5kZXYsIGUtPmFkZHIpOworCQkJY2ZnODAyMTFfaWJzc19qb2luZWQobmRldiwgZS0+YWRkciwgR0ZQX0tFUk5FTCk7CisJCQljbGVhcl9iaXQoV0xfU1RBVFVTX0NPTk5FQ1RJTkcsICZ3bC0+c3RhdHVzKTsKKwkJCXNldF9iaXQoV0xfU1RBVFVTX0NPTk5FQ1RFRCwgJndsLT5zdGF0dXMpOworCQl9IGVsc2UKIAkJCXdsX2Jzc19jb25uZWN0X2RvbmUod2wsIG5kZXYsIGUsIGRhdGEsIHRydWUpOwotCQkJV0xfREJHKCJqb2luZWQgaW4gQlNTIG5ldHdvcmsgXCIlc1wiXG4iLAotCQkJICAgICAgICgoc3RydWN0IHdsY19zc2lkICopCi0JCQkJd2xfcmVhZF9wcm9mKHdsLCBXTF9QUk9GX1NTSUQpKS0+U1NJRCk7Ci0JCX0KLQkJYWN0ID0gdHJ1ZTsKLQkJd2xfdXBkYXRlX3Byb2Yod2wsIGUsICZhY3QsIFdMX1BST0ZfQUNUKTsKIAl9IGVsc2UgaWYgKHdsX2lzX2xpbmtkb3duKHdsLCBlKSkgewotCQljZmc4MDIxMV9kaXNjb25uZWN0ZWQobmRldiwgMCwgTlVMTCwgMCwgR0ZQX0tFUk5FTCk7Ci0JCWNsZWFyX2JpdChXTF9TVEFUVVNfQ09OTkVDVEVELCAmd2wtPnN0YXR1cyk7Ci0JCXdsX2xpbmtfZG93bih3bCk7CisJCVdMX0NPTk4oIkxpbmtkb3duXG4iKTsKKwkJaWYgKHdsX2lzX2lic3Ntb2RlKHdsKSkgeworCQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChXTF9TVEFUVVNfQ09OTkVDVEVELAorCQkJCSZ3bC0+c3RhdHVzKSkKKwkJCQl3bF9saW5rX2Rvd24od2wpOworCQl9IGVsc2UgeworCQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChXTF9TVEFUVVNfQ09OTkVDVEVELAorCQkJCSZ3bC0+c3RhdHVzKSkgeworCQkJCWNmZzgwMjExX2Rpc2Nvbm5lY3RlZChuZGV2LCAwLCBOVUxMLCAwLAorCQkJCQlHRlBfS0VSTkVMKTsKKwkJCQl3bF9saW5rX2Rvd24od2wpOworCQkJfQorCQl9CiAJCXdsX2luaXRfcHJvZih3bC0+cHJvZmlsZSk7CiAJfSBlbHNlIGlmICh3bF9pc19ub25ldHdvcmsod2wsIGUpKSB7Ci0JCXdsX2Jzc19jb25uZWN0X2RvbmUod2wsIG5kZXYsIGUsIGRhdGEsIGZhbHNlKTsKKwkJaWYgKHdsX2lzX2lic3Ntb2RlKHdsKSkKKwkJCWNsZWFyX2JpdChXTF9TVEFUVVNfQ09OTkVDVElORywgJndsLT5zdGF0dXMpOworCQllbHNlCisJCQl3bF9ic3NfY29ubmVjdF9kb25lKHdsLCBuZGV2LCBlLCBkYXRhLCBmYWxzZSk7CiAJfQogCiAJcmV0dXJuIGVycjsKQEAgLTI0MTYsMTIgKzI2NDgsMTYgQEAKIHdsX25vdGlmeV9yb2FtaW5nX3N0YXR1cyhzdHJ1Y3Qgd2xfcHJpdiAqd2wsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAogCQkJIGNvbnN0IHdsX2V2ZW50X21zZ190ICplLCB2b2lkICpkYXRhKQogewotCWJvb2wgYWN0OwogCXMzMiBlcnIgPSAwOworCXUzMiBldmVudCA9IGJlMzJfdG9fY3B1KGUtPmV2ZW50X3R5cGUpOworCXUzMiBzdGF0dXMgPSBiZTMyX3RvX2NwdShlLT5zdGF0dXMpOwogCi0Jd2xfYnNzX3JvYW1pbmdfZG9uZSh3bCwgbmRldiwgZSwgZGF0YSk7Ci0JYWN0ID0gdHJ1ZTsKLQl3bF91cGRhdGVfcHJvZih3bCwgZSwgJmFjdCwgV0xfUFJPRl9BQ1QpOworCWlmIChldmVudCA9PSBXTENfRV9ST0FNICYmIHN0YXR1cyA9PSBXTENfRV9TVEFUVVNfU1VDQ0VTUykgeworCQlpZiAodGVzdF9iaXQoV0xfU1RBVFVTX0NPTk5FQ1RFRCwgJndsLT5zdGF0dXMpKQorCQkJd2xfYnNzX3JvYW1pbmdfZG9uZSh3bCwgbmRldiwgZSwgZGF0YSk7CisJCWVsc2UKKwkJCXdsX2Jzc19jb25uZWN0X2RvbmUod2wsIG5kZXYsIGUsIGRhdGEsIHRydWUpOworCX0KIAogCXJldHVybiBlcnI7CiB9CkBAIC0yNDY4LDYgKzI3MDQsOCBAQAogCXUzMiByZXNwX2xlbjsKIAlzMzIgZXJyID0gMDsKIAorCXdsX2NsZWFyX2Fzc29jX2llcyh3bCk7CisKIAllcnIgPSB3bF9kZXZfYnVmdmFyX2dldChuZGV2LCAiYXNzb2NfaW5mbyIsIHdsLT5leHRyYV9idWYsCiAJCQkJV0xfQVNTT0NfSU5GT19NQVgpOwogCWlmICh1bmxpa2VseShlcnIpKSB7CkBAIC0yNTA1LDEyICsyNzQzLDI1IEBACiAJCWNvbm5faW5mby0+cmVzcF9pZV9sZW4gPSAwOwogCQljb25uX2luZm8tPnJlc3BfaWUgPSBOVUxMOwogCX0KLQlXTF9EQkcoInJlcSBsZW4gKCVkKSByZXNwIGxlbiAoJWQpXG4iLAorCVdMX0NPTk4oInJlcSBsZW4gKCVkKSByZXNwIGxlbiAoJWQpXG4iLAogCSAgICAgICBjb25uX2luZm8tPnJlcV9pZV9sZW4sIGNvbm5faW5mby0+cmVzcF9pZV9sZW4pOwogCiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIHZvaWQgd2xfY2xlYXJfYXNzb2NfaWVzKHN0cnVjdCB3bF9wcml2ICp3bCkKK3sKKwlzdHJ1Y3Qgd2xfY29ubmVjdF9pbmZvICpjb25uX2luZm8gPSB3bF90b19jb25uKHdsKTsKKworCWtmcmVlKGNvbm5faW5mby0+cmVxX2llKTsKKwljb25uX2luZm8tPnJlcV9pZSA9IE5VTEw7CisJY29ubl9pbmZvLT5yZXFfaWVfbGVuID0gMDsKKwlrZnJlZShjb25uX2luZm8tPnJlc3BfaWUpOworCWNvbm5faW5mby0+cmVzcF9pZSA9IE5VTEw7CisJY29ubl9pbmZvLT5yZXNwX2llX2xlbiA9IDA7Cit9CisKKwogc3RhdGljIHZvaWQgd2xfY2hfdG9fY2hhbnNwZWMoaW50IGNoLCBzdHJ1Y3Qgd2xfam9pbl9wYXJhbXMgKmpvaW5fcGFyYW1zLAogCXNpemVfdCAqam9pbl9wYXJhbXNfc2l6ZSkKIHsKQEAgLTI1MjAsNyArMjc3MSw3IEBACiAJCWpvaW5fcGFyYW1zLT5wYXJhbXMuY2hhbnNwZWNfbnVtID0gMTsKIAkJam9pbl9wYXJhbXMtPnBhcmFtcy5jaGFuc3BlY19saXN0WzBdID0gY2g7CiAKLQkJaWYgKGpvaW5fcGFyYW1zLT5wYXJhbXMuY2hhbnNwZWNfbGlzdFswXSkKKwkJaWYgKGpvaW5fcGFyYW1zLT5wYXJhbXMuY2hhbnNwZWNfbGlzdFswXSA8PSBDSF9NQVhfMkdfQ0hBTk5FTCkKIAkJCWNoYW5zcGVjIHw9IFdMX0NIQU5TUEVDX0JBTkRfMkc7CiAJCWVsc2UKIAkJCWNoYW5zcGVjIHw9IFdMX0NIQU5TUEVDX0JBTkRfNUc7CkBAIC0yNTM5LDE0ICsyNzkwLDE0IEBACiAJCWpvaW5fcGFyYW1zLT5wYXJhbXMuY2hhbnNwZWNfbnVtID0KIAkJCWNwdV90b19sZTMyKGpvaW5fcGFyYW1zLT5wYXJhbXMuY2hhbnNwZWNfbnVtKTsKIAotCQlXTF9EQkcoImpvaW5fcGFyYW1zLT5wYXJhbXMuY2hhbnNwZWNfbGlzdFswXT0gJSNYLCBjaGFubmVsICVkLCBjaGFuc3BlYyAlI1hcbiIsCisJCVdMX0NPTk4oImpvaW5fcGFyYW1zLT5wYXJhbXMuY2hhbnNwZWNfbGlzdFswXT0gJSNYLCIKKwkJCSJjaGFubmVsICVkLCBjaGFuc3BlYyAlI1hcbiIsCiAJCSAgICAgICBqb2luX3BhcmFtcy0+cGFyYW1zLmNoYW5zcGVjX2xpc3RbMF0sIGNoLCBjaGFuc3BlYyk7CiAJfQogfQogCiBzdGF0aWMgczMyIHdsX3VwZGF0ZV9ic3NfaW5mbyhzdHJ1Y3Qgd2xfcHJpdiAqd2wpCiB7Ci0Jc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzOwogCXN0cnVjdCB3bF9ic3NfaW5mbyAqYmk7CiAJc3RydWN0IHdsY19zc2lkICpzc2lkOwogCXN0cnVjdCBiY21fdGx2ICp0aW07CkBAIC0yNTU2LDY3ICsyODA3LDUyIEBACiAJdTggKmllOwogCXMzMiBlcnIgPSAwOwogCisJV0xfVFJBQ0UoIkVudGVyXG4iKTsKIAlpZiAod2xfaXNfaWJzc21vZGUod2wpKQogCQlyZXR1cm4gZXJyOwogCiAJc3NpZCA9IChzdHJ1Y3Qgd2xjX3NzaWQgKil3bF9yZWFkX3Byb2Yod2wsIFdMX1BST0ZfU1NJRCk7Ci0JYnNzID0KLQkgICAgY2ZnODAyMTFfZ2V0X2Jzcyh3bF90b193aXBoeSh3bCksIE5VTEwsIChzOCAqKSZ3bC0+YnNzaWQsCi0JCQkgICAgIHNzaWQtPlNTSUQsIHNzaWQtPlNTSURfbGVuLCBXTEFOX0NBUEFCSUxJVFlfRVNTLAotCQkJICAgICBXTEFOX0NBUEFCSUxJVFlfRVNTKTsKIAotCXJ0bmxfbG9jaygpOwotCWlmICh1bmxpa2VseSghYnNzKSkgewotCQlXTF9EQkcoIkNvdWxkIG5vdCBmaW5kIHRoZSBBUFxuIik7Ci0JCSoodTMyICopIHdsLT5leHRyYV9idWYgPSBjcHVfdG9fbGUzMihXTF9FWFRSQV9CVUZfTUFYKTsKLQkJZXJyID0gd2xfZGV2X2lvY3RsKHdsX3RvX25kZXYod2wpLCBXTENfR0VUX0JTU19JTkZPLAotCQkJCXdsLT5leHRyYV9idWYsIFdMX0VYVFJBX0JVRl9NQVgpOwotCQlpZiAodW5saWtlbHkoZXJyKSkgewotCQkJV0xfRVJSKCJDb3VsZCBub3QgZ2V0IGJzcyBpbmZvICVkXG4iLCBlcnIpOwotCQkJZ290byB1cGRhdGVfYnNzX2luZm9fb3V0OwotCQl9Ci0JCWJpID0gKHN0cnVjdCB3bF9ic3NfaW5mbyAqKSh3bC0+ZXh0cmFfYnVmICsgNCk7Ci0JCWlmICh1bmxpa2VseShtZW1jbXAoJmJpLT5CU1NJRCwgJndsLT5ic3NpZCwgRVRIX0FMRU4pKSkgewotCQkJZXJyID0gLUVJTzsKLQkJCWdvdG8gdXBkYXRlX2Jzc19pbmZvX291dDsKLQkJfQotCQllcnIgPSB3bF9pbmZvcm1fc2luZ2xlX2Jzcyh3bCwgYmkpOwotCQlpZiAodW5saWtlbHkoZXJyKSkKLQkJCWdvdG8gdXBkYXRlX2Jzc19pbmZvX291dDsKLQotCQlpZSA9ICgodTggKiliaSkgKyBiaS0+aWVfb2Zmc2V0OwotCQlpZV9sZW4gPSBiaS0+aWVfbGVuZ3RoOwotCQliZWFjb25faW50ZXJ2YWwgPSBjcHVfdG9fbGUxNihiaS0+YmVhY29uX3BlcmlvZCk7Ci0JfSBlbHNlIHsKLQkJV0xfREJHKCJGb3VuZCB0aGUgQVAgaW4gdGhlIGxpc3QgLSBCU1NJRCAlcE1cbiIsIGJzcy0+YnNzaWQpOwotCQlpZSA9IGJzcy0+aW5mb3JtYXRpb25fZWxlbWVudHM7Ci0JCWllX2xlbiA9IGJzcy0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzOwotCQliZWFjb25faW50ZXJ2YWwgPSBic3MtPmJlYWNvbl9pbnRlcnZhbDsKLQkJY2ZnODAyMTFfcHV0X2Jzcyhic3MpOworCSoodTMyICopd2wtPmV4dHJhX2J1ZiA9IGNwdV90b19sZTMyKFdMX0VYVFJBX0JVRl9NQVgpOworCWVyciA9IHdsX2Rldl9pb2N0bCh3bF90b19uZGV2KHdsKSwgV0xDX0dFVF9CU1NfSU5GTywKKwkJCXdsLT5leHRyYV9idWYsIFdMX0VYVFJBX0JVRl9NQVgpOworCWlmICh1bmxpa2VseShlcnIpKSB7CisJCVdMX0VSUigiQ291bGQgbm90IGdldCBic3MgaW5mbyAlZFxuIiwgZXJyKTsKKwkJZ290byB1cGRhdGVfYnNzX2luZm9fb3V0OwogCX0KIAorCWJpID0gKHN0cnVjdCB3bF9ic3NfaW5mbyAqKSh3bC0+ZXh0cmFfYnVmICsgNCk7CisJZXJyID0gd2xfaW5mb3JtX3NpbmdsZV9ic3Mod2wsIGJpKTsKKwlpZiAodW5saWtlbHkoZXJyKSkKKwkJZ290byB1cGRhdGVfYnNzX2luZm9fb3V0OworCisJaWUgPSAoKHU4ICopYmkpICsgYmktPmllX29mZnNldDsKKwlpZV9sZW4gPSBiaS0+aWVfbGVuZ3RoOworCWJlYWNvbl9pbnRlcnZhbCA9IGNwdV90b19sZTE2KGJpLT5iZWFjb25fcGVyaW9kKTsKKwogCXRpbSA9IGJjbV9wYXJzZV90bHZzKGllLCBpZV9sZW4sIFdMQU5fRUlEX1RJTSk7Ci0JaWYgKHRpbSkgeworCWlmICh0aW0pCiAJCWR0aW1fcGVyaW9kID0gdGltLT5kYXRhWzFdOwotCX0gZWxzZSB7CisJZWxzZSB7CiAJCS8qCiAJCSogYWN0aXZlIHNjYW4gd2FzIGRvbmUgc28gd2UgY291bGQgbm90IGdldCBkdGltCiAJCSogaW5mb3JtYXRpb24gb3V0IG9mIHByb2JlIHJlc3BvbnNlLgogCQkqIHNvIHdlIHNwZWZpY2lhbGx5IHF1ZXJ5IGR0aW0gaW5mb3JtYXRpb24gdG8gZG9uZ2xlLgogCQkqLwotCQllcnIgPSB3bF9kZXZfaW9jdGwod2xfdG9fbmRldih3bCksIFdMQ19HRVRfRFRJTVBSRCwKLQkJCSZkdGltX3BlcmlvZCwgc2l6ZW9mKGR0aW1fcGVyaW9kKSk7CisJCXUzMiB2YXI7CisJCWVyciA9IHdsX2Rldl9pbnR2YXJfZ2V0KHdsX3RvX25kZXYod2wpLCAiZHRpbV9hc3NvYyIsICZ2YXIpOwogCQlpZiAodW5saWtlbHkoZXJyKSkgewotCQkJV0xfRVJSKCJXTENfR0VUX0RUSU1QUkQgZXJyb3IgKCVkKVxuIiwgZXJyKTsKKwkJCVdMX0VSUigid2wgZHRpbV9hc3NvYyBmYWlsZWQgKCVkKVxuIiwgZXJyKTsKIAkJCWdvdG8gdXBkYXRlX2Jzc19pbmZvX291dDsKIAkJfQorCQlkdGltX3BlcmlvZCA9ICh1OCl2YXI7CiAJfQogCiAJd2xfdXBkYXRlX3Byb2Yod2wsIE5VTEwsICZiZWFjb25faW50ZXJ2YWwsIFdMX1BST0ZfQkVBQ09OSU5UKTsKIAl3bF91cGRhdGVfcHJvZih3bCwgTlVMTCwgJmR0aW1fcGVyaW9kLCBXTF9QUk9GX0RUSU1QRVJJT0QpOwogCiB1cGRhdGVfYnNzX2luZm9fb3V0OgotCXJ0bmxfdW5sb2NrKCk7CisJV0xfVFJBQ0UoIkV4aXQiKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yNjI3LDE3ICsyODYzLDIwIEBACiAJc3RydWN0IHdsX2Nvbm5lY3RfaW5mbyAqY29ubl9pbmZvID0gd2xfdG9fY29ubih3bCk7CiAJczMyIGVyciA9IDA7CiAKKwlXTF9UUkFDRSgiRW50ZXJcbiIpOworCiAJd2xfZ2V0X2Fzc29jX2llcyh3bCk7Ci0JbWVtY3B5KCZ3bC0+YnNzaWQsICZlLT5hZGRyLCBFVEhfQUxFTik7CisJd2xfdXBkYXRlX3Byb2Yod2wsIE5VTEwsICZlLT5hZGRyLCBXTF9QUk9GX0JTU0lEKTsKIAl3bF91cGRhdGVfYnNzX2luZm8od2wpOworCiAJY2ZnODAyMTFfcm9hbWVkKG5kZXYsCi0JCQkodTggKikmd2wtPmJzc2lkLAorCQkJKHU4ICopd2xfcmVhZF9wcm9mKHdsLCBXTF9QUk9GX0JTU0lEKSwKIAkJCWNvbm5faW5mby0+cmVxX2llLCBjb25uX2luZm8tPnJlcV9pZV9sZW4sCiAJCQljb25uX2luZm8tPnJlc3BfaWUsIGNvbm5faW5mby0+cmVzcF9pZV9sZW4sIEdGUF9LRVJORUwpOwotCVdMX0RCRygiUmVwb3J0IHJvYW1pbmcgcmVzdWx0XG4iKTsKKwlXTF9DT05OKCJSZXBvcnQgcm9hbWluZyByZXN1bHRcbiIpOwogCiAJc2V0X2JpdChXTF9TVEFUVVNfQ09OTkVDVEVELCAmd2wtPnN0YXR1cyk7Ci0KKwlXTF9UUkFDRSgiRXhpdFxuIik7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjY0OCwzMCArMjg4NywyOCBAQAogCXN0cnVjdCB3bF9jb25uZWN0X2luZm8gKmNvbm5faW5mbyA9IHdsX3RvX2Nvbm4od2wpOwogCXMzMiBlcnIgPSAwOwogCi0Jd2xfZ2V0X2Fzc29jX2llcyh3bCk7Ci0JbWVtY3B5KCZ3bC0+YnNzaWQsICZlLT5hZGRyLCBFVEhfQUxFTik7Ci0Jd2xfdXBkYXRlX2Jzc19pbmZvKHdsKTsKKwlXTF9UUkFDRSgiRW50ZXJcbiIpOworCiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChXTF9TVEFUVVNfQ09OTkVDVElORywgJndsLT5zdGF0dXMpKSB7CisJCWlmIChjb21wbGV0ZWQpIHsKKwkJCXdsX2dldF9hc3NvY19pZXMod2wpOworCQkJd2xfdXBkYXRlX3Byb2Yod2wsIE5VTEwsICZlLT5hZGRyLCBXTF9QUk9GX0JTU0lEKTsKKwkJCXdsX3VwZGF0ZV9ic3NfaW5mbyh3bCk7CisJCX0KIAkJY2ZnODAyMTFfY29ubmVjdF9yZXN1bHQobmRldiwKLQkJCQkJKHU4ICopJndsLT5ic3NpZCwKKwkJCQkJKHU4ICopd2xfcmVhZF9wcm9mKHdsLCBXTF9QUk9GX0JTU0lEKSwKIAkJCQkJY29ubl9pbmZvLT5yZXFfaWUsCiAJCQkJCWNvbm5faW5mby0+cmVxX2llX2xlbiwKIAkJCQkJY29ubl9pbmZvLT5yZXNwX2llLAogCQkJCQljb25uX2luZm8tPnJlc3BfaWVfbGVuLAogCQkJCQljb21wbGV0ZWQgPyBXTEFOX1NUQVRVU19TVUNDRVNTIDogV0xBTl9TVEFUVVNfQVVUSF9USU1FT1VULAogCQkJCQlHRlBfS0VSTkVMKTsKLQkJV0xfREJHKCJSZXBvcnQgY29ubmVjdCByZXN1bHQgLSBjb25uZWN0aW9uICVzXG4iLAotCQkgICAgICAgY29tcGxldGVkID8gInN1Y2NlZWRlZCIgOiAiZmFpbGVkIik7Ci0JfSBlbHNlIHsKLQkJY2ZnODAyMTFfcm9hbWVkKG5kZXYsCi0JCQkJKHU4ICopJndsLT5ic3NpZCwKLQkJCQljb25uX2luZm8tPnJlcV9pZSwgY29ubl9pbmZvLT5yZXFfaWVfbGVuLAotCQkJCWNvbm5faW5mby0+cmVzcF9pZSwgY29ubl9pbmZvLT5yZXNwX2llX2xlbiwKLQkJCQlHRlBfS0VSTkVMKTsKLQkJV0xfREJHKCJSZXBvcnQgcm9hbWluZyByZXN1bHRcbiIpOworCQlpZiAoY29tcGxldGVkKQorCQkJc2V0X2JpdChXTF9TVEFUVVNfQ09OTkVDVEVELCAmd2wtPnN0YXR1cyk7CisJCVdMX0NPTk4oIlJlcG9ydCBjb25uZWN0IHJlc3VsdCAtIGNvbm5lY3Rpb24gJXNcbiIsCisJCQkJY29tcGxldGVkID8gInN1Y2NlZWRlZCIgOiAiZmFpbGVkIik7CiAJfQotCXNldF9iaXQoV0xfU1RBVFVTX0NPTk5FQ1RFRCwgJndsLT5zdGF0dXMpOwotCisJV0xfVFJBQ0UoIkV4aXRcbiIpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTI3MDMsMzcgKzI5NDAsNDUgQEAKIAlzdHJ1Y3Qgd2xfc2Nhbl9yZXN1bHRzICpic3NfbGlzdDsKIAl1MzIgbGVuID0gV0xfU0NBTl9CVUZfTUFYOwogCXMzMiBlcnIgPSAwOworCWJvb2wgc2Nhbl9hYm9ydCA9IGZhbHNlOwogCi0JaWYgKHdsLT5pc2Nhbl9vbiAmJiB3bC0+aXNjYW5fa2lja3N0YXJ0KQorCVdMX1RSQUNFKCJFbnRlclxuIik7CisKKwlpZiAod2wtPmlzY2FuX29uICYmIHdsLT5pc2Nhbl9raWNrc3RhcnQpIHsKKwkJV0xfVFJBQ0UoIkV4aXRcbiIpOwogCQlyZXR1cm4gd2xfd2FrZXVwX2lzY2FuKHdsX3RvX2lzY2FuKHdsKSk7CisJfQogCiAJaWYgKHVubGlrZWx5KCF0ZXN0X2FuZF9jbGVhcl9iaXQoV0xfU1RBVFVTX1NDQU5OSU5HLCAmd2wtPnN0YXR1cykpKSB7CiAJCVdMX0VSUigiU2NhbiBjb21wbGV0ZSB3aGlsZSBkZXZpY2Ugbm90IHNjYW5uaW5nXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXNjYW5fYWJvcnQgPSB0cnVlOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIHNjYW5fZG9uZV9vdXQ7CiAJfQotCWlmICh1bmxpa2VseSghd2wtPnNjYW5fcmVxdWVzdCkpIHsKLQl9Ci0JcnRubF9sb2NrKCk7CisKIAllcnIgPSB3bF9kZXZfaW9jdGwobmRldiwgV0xDX0dFVF9DSEFOTkVMLCAmY2hhbm5lbF9pbmZvcm0sCiAJCQlzaXplb2YoY2hhbm5lbF9pbmZvcm0pKTsKIAlpZiAodW5saWtlbHkoZXJyKSkgewogCQlXTF9FUlIoInNjYW4gYnVzeSAoJWQpXG4iLCBlcnIpOworCQlzY2FuX2Fib3J0ID0gdHJ1ZTsKIAkJZ290byBzY2FuX2RvbmVfb3V0OwogCX0KIAljaGFubmVsX2luZm9ybS5zY2FuX2NoYW5uZWwgPSBsZTMyX3RvX2NwdShjaGFubmVsX2luZm9ybS5zY2FuX2NoYW5uZWwpOwogCWlmICh1bmxpa2VseShjaGFubmVsX2luZm9ybS5zY2FuX2NoYW5uZWwpKSB7CiAKLQkJV0xfREJHKCJjaGFubmVsX2luZm9ybS5zY2FuX2NoYW5uZWwgKCVkKVxuIiwKKwkJV0xfQ09OTigiY2hhbm5lbF9pbmZvcm0uc2Nhbl9jaGFubmVsICglZClcbiIsCiAJCSAgICAgICBjaGFubmVsX2luZm9ybS5zY2FuX2NoYW5uZWwpOwogCX0KIAl3bC0+YnNzX2xpc3QgPSB3bC0+c2Nhbl9yZXN1bHRzOwogCWJzc19saXN0ID0gd2wtPmJzc19saXN0OwogCW1lbXNldChic3NfbGlzdCwgMCwgbGVuKTsKIAlic3NfbGlzdC0+YnVmbGVuID0gY3B1X3RvX2xlMzIobGVuKTsKKwogCWVyciA9IHdsX2Rldl9pb2N0bChuZGV2LCBXTENfU0NBTl9SRVNVTFRTLCBic3NfbGlzdCwgbGVuKTsKIAlpZiAodW5saWtlbHkoZXJyKSkgewogCQlXTF9FUlIoIiVzIFNjYW5fcmVzdWx0cyBlcnJvciAoJWQpXG4iLCBuZGV2LT5uYW1lLCBlcnIpOwogCQllcnIgPSAtRUlOVkFMOworCQlzY2FuX2Fib3J0ID0gdHJ1ZTsKIAkJZ290byBzY2FuX2RvbmVfb3V0OwogCX0KIAlic3NfbGlzdC0+YnVmbGVuID0gbGUzMl90b19jcHUoYnNzX2xpc3QtPmJ1Zmxlbik7CkBAIC0yNzQxLDE2ICsyOTg2LDIxIEBACiAJYnNzX2xpc3QtPmNvdW50ID0gbGUzMl90b19jcHUoYnNzX2xpc3QtPmNvdW50KTsKIAogCWVyciA9IHdsX2luZm9ybV9ic3Mod2wpOwotCWlmIChlcnIpCisJaWYgKGVycikgeworCQlzY2FuX2Fib3J0ID0gdHJ1ZTsKIAkJZ290byBzY2FuX2RvbmVfb3V0OworCX0KIAogc2Nhbl9kb25lX291dDoKIAlpZiAod2wtPnNjYW5fcmVxdWVzdCkgewotCQljZmc4MDIxMV9zY2FuX2RvbmUod2wtPnNjYW5fcmVxdWVzdCwgZmFsc2UpOworCQlXTF9TQ0FOKCJjYWxsaW5nIGNmZzgwMjExX3NjYW5fZG9uZVxuIik7CisJCWNmZzgwMjExX3NjYW5fZG9uZSh3bC0+c2Nhbl9yZXF1ZXN0LCBzY2FuX2Fib3J0KTsKIAkJd2xfc2V0X21wYyhuZGV2LCAxKTsKIAkJd2wtPnNjYW5fcmVxdWVzdCA9IE5VTEw7CiAJfQotCXJ0bmxfdW5sb2NrKCk7CisKKwlXTF9UUkFDRSgiRXhpdFxuIik7CisKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yNzczLDEyICszMDIzLDcgQEAKIHsKIAltZW1zZXQoZWwsIDAsIHNpemVvZigqZWwpKTsKIAllbC0+aGFuZGxlcltXTENfRV9TQ0FOX0NPTVBMRVRFXSA9IHdsX25vdGlmeV9zY2FuX3N0YXR1czsKLQllbC0+aGFuZGxlcltXTENfRV9KT0lOXSA9IHdsX25vdGlmeV9jb25uZWN0X3N0YXR1czsKIAllbC0+aGFuZGxlcltXTENfRV9MSU5LXSA9IHdsX25vdGlmeV9jb25uZWN0X3N0YXR1czsKLQllbC0+aGFuZGxlcltXTENfRV9ERUFVVEhfSU5EXSA9IHdsX25vdGlmeV9jb25uZWN0X3N0YXR1czsKLQllbC0+aGFuZGxlcltXTENfRV9ESVNBU1NPQ19JTkRdID0gd2xfbm90aWZ5X2Nvbm5lY3Rfc3RhdHVzOwotCWVsLT5oYW5kbGVyW1dMQ19FX0FTU09DX0lORF0gPSB3bF9ub3RpZnlfY29ubmVjdF9zdGF0dXM7Ci0JZWwtPmhhbmRsZXJbV0xDX0VfUkVBU1NPQ19JTkRdID0gd2xfbm90aWZ5X2Nvbm5lY3Rfc3RhdHVzOwogCWVsLT5oYW5kbGVyW1dMQ19FX1JPQU1dID0gd2xfbm90aWZ5X3JvYW1pbmdfc3RhdHVzOwogCWVsLT5oYW5kbGVyW1dMQ19FX01JQ19FUlJPUl0gPSB3bF9ub3RpZnlfbWljX3N0YXR1czsKIAllbC0+aGFuZGxlcltXTENfRV9TRVRfU1NJRF0gPSB3bF9ub3RpZnlfY29ubmVjdF9zdGF0dXM7CkBAIC0yOTEyLDYgKzMxNTcsOCBAQAogCQlyZXR1cm47CiAJfQogCWlmIChsaWtlbHkod2wtPnNjYW5fcmVxdWVzdCkpIHsKKwkJV0xfU0NBTigiSVNDQU4gQ29tcGxldGVkIHNjYW46ICVzXG4iLAorCQkJCWFib3J0ZWQgPyAiQWJvcnRlZCIgOiAiRG9uZSIpOwogCQljZmc4MDIxMV9zY2FuX2RvbmUod2wtPnNjYW5fcmVxdWVzdCwgYWJvcnRlZCk7CiAJCXdsX3NldF9tcGMobmRldiwgMSk7CiAJCXdsLT5zY2FuX3JlcXVlc3QgPSBOVUxMOwpAQCAtMjkyMiw3ICszMTY5LDcgQEAKIHN0YXRpYyBzMzIgd2xfd2FrZXVwX2lzY2FuKHN0cnVjdCB3bF9pc2Nhbl9jdHJsICppc2NhbikKIHsKIAlpZiAobGlrZWx5KGlzY2FuLT5zdGF0ZSAhPSBXTF9JU0NBTl9TVEFURV9JRExFKSkgewotCQlXTF9EQkcoIndha2UgdXAgaXNjYW5cbiIpOworCQlXTF9TQ0FOKCJ3YWtlIHVwIGlzY2FuXG4iKTsKIAkJdXAoJmlzY2FuLT5zeW5jKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMjk1OCw4ICszMjA1LDggQEAKIAlyZXN1bHRzLT5idWZsZW4gPSBsZTMyX3RvX2NwdShyZXN1bHRzLT5idWZsZW4pOwogCXJlc3VsdHMtPnZlcnNpb24gPSBsZTMyX3RvX2NwdShyZXN1bHRzLT52ZXJzaW9uKTsKIAlyZXN1bHRzLT5jb3VudCA9IGxlMzJfdG9fY3B1KHJlc3VsdHMtPmNvdW50KTsKLQlXTF9EQkcoInJlc3VsdHMtPmNvdW50ID0gJWRcbiIsIHJlc3VsdHMtPmNvdW50KTsKLQlXTF9EQkcoInJlc3VsdHMtPmJ1ZmxlbiA9ICVkXG4iLCByZXN1bHRzLT5idWZsZW4pOworCVdMX1NDQU4oInJlc3VsdHMtPmNvdW50ID0gJWRcbiIsIHJlc3VsdHMtPmNvdW50KTsKKwlXTF9TQ0FOKCJyZXN1bHRzLT5idWZsZW4gPSAlZFxuIiwgcmVzdWx0cy0+YnVmbGVuKTsKIAkqc3RhdHVzID0gbGUzMl90b19jcHUobGlzdF9idWYtPnN0YXR1cyk7CiAJKmJzc19saXN0ID0gcmVzdWx0czsKIApAQCAtMzA1Myw3ICszMzAwLDcgQEAKIAkJZGVsX3RpbWVyX3N5bmMoJmlzY2FuLT50aW1lcik7CiAJCWlzY2FuLT50aW1lcl9vbiA9IDA7CiAJfQotCVdMX0RCRygiJXMgd2FzIHRlcm1pbmF0ZWRcbiIsIF9fZnVuY19fKTsKKwlXTF9TQ0FOKCJJU0NBTiB0aHJlYWQgdGVybWluYXRlZFxuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMwNjQsNyArMzMxMSw3IEBACiAKIAlpZiAoaXNjYW4pIHsKIAkJaXNjYW4tPnRpbWVyX29uID0gMDsKLQkJV0xfREJHKCJ0aW1lciBleHBpcmVkXG4iKTsKKwkJV0xfU0NBTigidGltZXIgZXhwaXJlZFxuIik7CiAJCXdsX3dha2V1cF9pc2Nhbihpc2Nhbik7CiAJfQogfQpAQCAtMzE5MSw3ICszNDM4LDcgQEAKIAkJV0xfRVJSKCJ3bF9jZmc4MDIxMV9kZXYgaXMgaW52YWxpZFxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQlXTF9EQkcoImZ1bmMgJXBcbiIsIHdsX2NmZzgwMjExX2dldF9zZGlvX2Z1bmMoKSk7CisJV0xfSU5GTygiZnVuYyAlcFxuIiwgd2xfY2ZnODAyMTFfZ2V0X3NkaW9fZnVuYygpKTsKIAl3ZGV2ID0gd2xfYWxsb2Nfd2RldihzaXplb2Yoc3RydWN0IHdsX2lmYWNlKSwgJndsX2NmZzgwMjExX2dldF9zZGlvX2Z1bmMoKS0+ZGV2KTsKIAlpZiAoSVNfRVJSKHdkZXYpKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTMyMTEsNyArMzQ1OCw2IEBACiAJCWdvdG8gY2ZnODAyMTFfYXR0YWNoX291dDsKIAl9CiAJd2xfc2V0X2RydmRhdGEod2xfY2ZnODAyMTFfZGV2LCBjaSk7Ci0Jc2V0X2JpdChXTF9TVEFUVVNfUkVBRFksICZ3bC0+c3RhdHVzKTsKIAogCXJldHVybiBlcnI7CiAKQEAgLTMyNTUsMTYgKzM1MDEsMTYgQEAKIAkJCVdMX0VSUigiZXZlbnQgcXVldWUgZW1wdHkuLi5cbiIpOwogCQkJQlVHKCk7CiAJCX0KLQkJV0xfREJHKCJldmVudCB0eXBlICglZClcbiIsIGUtPmV0eXBlKTsKKwkJV0xfSU5GTygiZXZlbnQgdHlwZSAoJWQpXG4iLCBlLT5ldHlwZSk7CiAJCWlmICh3bC0+ZWwuaGFuZGxlcltlLT5ldHlwZV0pIHsKIAkJCXdsLT5lbC5oYW5kbGVyW2UtPmV0eXBlXSAod2wsIHdsX3RvX25kZXYod2wpLCAmZS0+ZW1zZywKIAkJCQkJCSAgZS0+ZWRhdGEpOwogCQl9IGVsc2UgewotCQkJV0xfREJHKCJVbmtub3duIEV2ZW50ICglZCk6IGlnbm9yaW5nXG4iLCBlLT5ldHlwZSk7CisJCQlXTF9JTkZPKCJVbmtub3duIEV2ZW50ICglZCk6IGlnbm9yaW5nXG4iLCBlLT5ldHlwZSk7CiAJCX0KIAkJd2xfcHV0X2V2ZW50KGUpOwogCX0KLQlXTF9EQkcoIiVzIHdhcyB0ZXJtaW5hdGVkXG4iLCBfX2Z1bmNfXyk7CisJV0xfSU5GTygid2FzIHRlcm1pbmF0ZWRcbiIpOwogCXJldHVybiAwOwogfQogCkBAIC0zMjczLDExICszNTE5LDcgQEAKIHsKIAl1MzIgZXZlbnRfdHlwZSA9IGJlMzJfdG9fY3B1KGUtPmV2ZW50X3R5cGUpOwogCXN0cnVjdCB3bF9wcml2ICp3bCA9IG5kZXZfdG9fd2wobmRldik7Ci0jaWYgKFdMX0RCR19MRVZFTCA+IDApCi0JczggKmVzdHIgPSAoZXZlbnRfdHlwZSA8PSBzaXplb2Yod2xfZGJnX2VzdHIpIC8gV0xfREJHX0VTVFJfTUFYIC0gMSkgPwotCSAgICB3bF9kYmdfZXN0cltldmVudF90eXBlXSA6IChzOCAqKSAiVW5rbm93biI7Ci0jZW5kaWYJCQkJLyogKFdMX0RCR19MRVZFTCA+IDApICovCi0JV0xfREJHKCJldmVudF90eXBlICglZCk6IiAiV0xDX0VfIiAiJXNcbiIsIGV2ZW50X3R5cGUsIGVzdHIpOworCiAJaWYgKGxpa2VseSghd2xfZW5xX2V2ZW50KHdsLCBldmVudF90eXBlLCBlLCBkYXRhKSkpCiAJCXdsX3dha2V1cF9ldmVudCh3bCk7CiB9CkBAIC0zMzcwLDcgKzM2MTIsNiBAQAogc3RhdGljIHMzMiB3bF9kb25nbGVfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgczMyIGlmdHlwZSkKIHsKIAlzMzIgaW5mcmEgPSAwOwotCXMzMiBhcCA9IDA7CiAJczMyIGVyciA9IDA7CiAKIAlzd2l0Y2ggKGlmdHlwZSkgewpAQCAtMzM4MSw2ICszNjIyLDcgQEAKIAkJZXJyID0gLUVJTlZBTDsKIAkJcmV0dXJuIGVycjsKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQlpbmZyYSA9IDA7CiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAkJaW5mcmEgPSAxOwpAQCAtMzM5MSwyMCArMzYzMywxMyBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAlpbmZyYSA9IGNwdV90b19sZTMyKGluZnJhKTsKLQlhcCA9IGNwdV90b19sZTMyKGFwKTsKLQlXTF9EQkcoIiVzIGFwICglZCksIGluZnJhICglZClcbiIsIG5kZXYtPm5hbWUsIGFwLCBpbmZyYSk7CiAJZXJyID0gd2xfZGV2X2lvY3RsKG5kZXYsIFdMQ19TRVRfSU5GUkEsICZpbmZyYSwgc2l6ZW9mKGluZnJhKSk7CiAJaWYgKHVubGlrZWx5KGVycikpIHsKIAkJV0xfRVJSKCJXTENfU0VUX0lORlJBIGVycm9yICglZClcbiIsIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQotCWVyciA9IHdsX2Rldl9pb2N0bChuZGV2LCBXTENfU0VUX0FQLCAmYXAsIHNpemVvZihhcCkpOwotCWlmICh1bmxpa2VseShlcnIpKSB7Ci0JCVdMX0VSUigiV0xDX1NFVF9BUCBlcnJvciAoJWQpXG4iLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KIAotCXJldHVybiAtRUlOUFJPR1JFU1M7CisJcmV0dXJuIDA7CiB9CiAKICNpZm5kZWYgRU1CRURERURfUExBVEZPUk0KQEAgLTM0NjUsMTE2ICszNzAwLDYgQEAKIH0KIAogc3RhdGljIHMzMgotd2xfZG9uZ2xlX3JvYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiByb2FtdmFyLCB1MzIgYmNuX3RpbWVvdXQpCi17Ci0JczggaW92YnVmW1dMX0VWRU5USU5HX01BU0tfTEVOICsgMTJdOwkvKiAgUm9vbSBmb3IgImV2ZW50X21zZ3MiICsKLQkJCQkJCSAnXDAnICsgYml0dmVjICAqLwotCXMzMiBlcnIgPSAwOwotCi0JLyogU2V0dXAgdGltZW91dCBpZiBCZWFjb25zIGFyZSBsb3N0IGFuZCByb2FtIGlzCi0JCSBvZmYgdG8gcmVwb3J0IGxpbmsgZG93biAqLwotCWlmIChyb2FtdmFyKSB7Ci0JCWJjbV9ta2lvdmFyKCJiY25fdGltZW91dCIsIChjaGFyICopJmJjbl90aW1lb3V0LCA0LCBpb3ZidWYsCi0JCQkgICAgc2l6ZW9mKGlvdmJ1ZikpOwotCQllcnIgPSB3bF9kZXZfaW9jdGwobmRldiwgV0xDX1NFVF9WQVIsIGlvdmJ1Ziwgc2l6ZW9mKGlvdmJ1ZikpOwotCQlpZiAodW5saWtlbHkoZXJyKSkgewotCQkJV0xfRVJSKCJiY25fdGltZW91dCBlcnJvciAoJWQpXG4iLCBlcnIpOwotCQkJZ290byBkb25nbGVfcm9tX291dDsKLQkJfQotCX0KLQkvKiBFbmFibGUvRGlzYWJsZSBidWlsdC1pbiByb2FtaW5nIHRvIGFsbG93IHN1cHBsaWNhbnQKLQkJIHRvIHRha2UgY2FyZSBvZiByb2FtaW5nICovCi0JYmNtX21raW92YXIoInJvYW1fb2ZmIiwgKGNoYXIgKikmcm9hbXZhciwgNCwgaW92YnVmLCBzaXplb2YoaW92YnVmKSk7Ci0JZXJyID0gd2xfZGV2X2lvY3RsKG5kZXYsIFdMQ19TRVRfVkFSLCBpb3ZidWYsIHNpemVvZihpb3ZidWYpKTsKLQlpZiAodW5saWtlbHkoZXJyKSkgewotCQlXTF9FUlIoInJvYW1fb2ZmIGVycm9yICglZClcbiIsIGVycik7Ci0JCWdvdG8gZG9uZ2xlX3JvbV9vdXQ7Ci0JfQotZG9uZ2xlX3JvbV9vdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHMzMiB3bF9kb25nbGVfZXZlbnRtc2coc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCi17Ci0KLQlzOCBpb3ZidWZbV0xfRVZFTlRJTkdfTUFTS19MRU4gKyAxMl07CS8qICBSb29tIGZvciAiZXZlbnRfbXNncyIgKwotCQkJCQkJICdcMCcgKyBiaXR2ZWMgICovCi0JczggZXZlbnRtYXNrW1dMX0VWRU5USU5HX01BU0tfTEVOXTsKLQlzMzIgZXJyID0gMDsKLQotCS8qIFNldHVwIGV2ZW50X21zZ3MgKi8KLQliY21fbWtpb3ZhcigiZXZlbnRfbXNncyIsIGV2ZW50bWFzaywgV0xfRVZFTlRJTkdfTUFTS19MRU4sIGlvdmJ1ZiwKLQkJICAgIHNpemVvZihpb3ZidWYpKTsKLQllcnIgPSB3bF9kZXZfaW9jdGwobmRldiwgV0xDX0dFVF9WQVIsIGlvdmJ1Ziwgc2l6ZW9mKGlvdmJ1ZikpOwotCWlmICh1bmxpa2VseShlcnIpKSB7Ci0JCVdMX0VSUigiR2V0IGV2ZW50X21zZ3MgZXJyb3IgKCVkKVxuIiwgZXJyKTsKLQkJZ290byBkb25nbGVfZXZlbnRtc2dfb3V0OwotCX0KLQltZW1jcHkoZXZlbnRtYXNrLCBpb3ZidWYsIFdMX0VWRU5USU5HX01BU0tfTEVOKTsKLQotCXNldGJpdChldmVudG1hc2ssIFdMQ19FX1NFVF9TU0lEKTsKLQlzZXRiaXQoZXZlbnRtYXNrLCBXTENfRV9QUlVORSk7Ci0Jc2V0Yml0KGV2ZW50bWFzaywgV0xDX0VfQVVUSCk7Ci0Jc2V0Yml0KGV2ZW50bWFzaywgV0xDX0VfUkVBU1NPQyk7Ci0Jc2V0Yml0KGV2ZW50bWFzaywgV0xDX0VfUkVBU1NPQ19JTkQpOwotCXNldGJpdChldmVudG1hc2ssIFdMQ19FX0RFQVVUSF9JTkQpOwotCXNldGJpdChldmVudG1hc2ssIFdMQ19FX0RJU0FTU09DX0lORCk7Ci0Jc2V0Yml0KGV2ZW50bWFzaywgV0xDX0VfRElTQVNTT0MpOwotCXNldGJpdChldmVudG1hc2ssIFdMQ19FX0pPSU4pOwotCXNldGJpdChldmVudG1hc2ssIFdMQ19FX0FTU09DX0lORCk7Ci0Jc2V0Yml0KGV2ZW50bWFzaywgV0xDX0VfUFNLX1NVUCk7Ci0Jc2V0Yml0KGV2ZW50bWFzaywgV0xDX0VfTElOSyk7Ci0Jc2V0Yml0KGV2ZW50bWFzaywgV0xDX0VfTkRJU19MSU5LKTsKLQlzZXRiaXQoZXZlbnRtYXNrLCBXTENfRV9NSUNfRVJST1IpOwotCXNldGJpdChldmVudG1hc2ssIFdMQ19FX1BNS0lEX0NBQ0hFKTsKLQlzZXRiaXQoZXZlbnRtYXNrLCBXTENfRV9UWEZBSUwpOwotCXNldGJpdChldmVudG1hc2ssIFdMQ19FX0pPSU5fU1RBUlQpOwotCXNldGJpdChldmVudG1hc2ssIFdMQ19FX1NDQU5fQ09NUExFVEUpOwotCi0JYmNtX21raW92YXIoImV2ZW50X21zZ3MiLCBldmVudG1hc2ssIFdMX0VWRU5USU5HX01BU0tfTEVOLCBpb3ZidWYsCi0JCSAgICBzaXplb2YoaW92YnVmKSk7Ci0JZXJyID0gd2xfZGV2X2lvY3RsKG5kZXYsIFdMQ19TRVRfVkFSLCBpb3ZidWYsIHNpemVvZihpb3ZidWYpKTsKLQlpZiAodW5saWtlbHkoZXJyKSkgewotCQlXTF9FUlIoIlNldCBldmVudF9tc2dzIGVycm9yICglZClcbiIsIGVycik7Ci0JCWdvdG8gZG9uZ2xlX2V2ZW50bXNnX291dDsKLQl9Ci0KLWRvbmdsZV9ldmVudG1zZ19vdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHMzMgotd2xfZG9uZ2xlX3NjYW50aW1lKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzMzIgc2Nhbl9hc3NvY190aW1lLAotCQkgICBzMzIgc2Nhbl91bmFzc29jX3RpbWUpCi17Ci0JczMyIGVyciA9IDA7Ci0KLQllcnIgPSB3bF9kZXZfaW9jdGwobmRldiwgV0xDX1NFVF9TQ0FOX0NIQU5ORUxfVElNRSwgJnNjYW5fYXNzb2NfdGltZSwKLQkJCXNpemVvZihzY2FuX2Fzc29jX3RpbWUpKTsKLQlpZiAoZXJyKSB7Ci0JCWlmIChlcnIgPT0gLUVPUE5PVFNVUFApIHsKLQkJCVdMX0lORk8oIlNjYW4gYXNzb2MgdGltZSBpcyBub3Qgc3VwcG9ydGVkXG4iKTsKLQkJfSBlbHNlIHsKLQkJCVdMX0VSUigiU2NhbiBhc3NvYyB0aW1lIGVycm9yICglZClcbiIsIGVycik7Ci0JCX0KLQkJZ290byBkb25nbGVfc2NhbnRpbWVfb3V0OwotCX0KLQllcnIgPSB3bF9kZXZfaW9jdGwobmRldiwgV0xDX1NFVF9TQ0FOX1VOQVNTT0NfVElNRSwgJnNjYW5fdW5hc3NvY190aW1lLAotCQkJc2l6ZW9mKHNjYW5fdW5hc3NvY190aW1lKSk7Ci0JaWYgKGVycikgewotCQlpZiAoZXJyID09IC1FT1BOT1RTVVBQKSB7Ci0JCQlXTF9JTkZPKCJTY2FuIHVuYXNzb2MgdGltZSBpcyBub3Qgc3VwcG9ydGVkXG4iKTsKLQkJfSBlbHNlIHsKLQkJCVdMX0VSUigiU2NhbiB1bmFzc29jIHRpbWUgZXJyb3IgKCVkKVxuIiwgZXJyKTsKLQkJfQotCQlnb3RvIGRvbmdsZV9zY2FudGltZV9vdXQ7Ci0JfQotCi1kb25nbGVfc2NhbnRpbWVfb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBzMzIKIHdsX2RvbmdsZV9vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzMzIgYXJwb2UsIHMzMiBhcnBfb2wpCiB7CiAJczggaW92YnVmW1dMX0VWRU5USU5HX01BU0tfTEVOICsgMTJdOwkvKiAgUm9vbSBmb3IgImV2ZW50X21zZ3MiICsKQEAgLTM3MjIsNiArMzg0NywxNTQgQEAKIH0KICNlbmRpZgkJCQkvKiAhRU1CRURERURfUExBVEZPUk0gKi8KIAorc3RhdGljIHMzMiB3bF9kb25nbGVfZXZlbnRtc2coc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJczggaW92YnVmW1dMX0VWRU5USU5HX01BU0tfTEVOICsgMTJdOwkvKiAgUm9vbSBmb3IgImV2ZW50X21zZ3MiICsKKwkJCQkJCSAnXDAnICsgYml0dmVjICAqLworCXM4IGV2ZW50bWFza1tXTF9FVkVOVElOR19NQVNLX0xFTl07CisJczMyIGVyciA9IDA7CisKKwlXTF9UUkFDRSgiRW50ZXJcbiIpOworCisJLyogU2V0dXAgZXZlbnRfbXNncyAqLworCWJjbV9ta2lvdmFyKCJldmVudF9tc2dzIiwgZXZlbnRtYXNrLCBXTF9FVkVOVElOR19NQVNLX0xFTiwgaW92YnVmLAorCQkgICAgc2l6ZW9mKGlvdmJ1ZikpOworCWVyciA9IHdsX2Rldl9pb2N0bChuZGV2LCBXTENfR0VUX1ZBUiwgaW92YnVmLCBzaXplb2YoaW92YnVmKSk7CisJaWYgKHVubGlrZWx5KGVycikpIHsKKwkJV0xfRVJSKCJHZXQgZXZlbnRfbXNncyBlcnJvciAoJWQpXG4iLCBlcnIpOworCQlnb3RvIGRvbmdsZV9ldmVudG1zZ19vdXQ7CisJfQorCW1lbWNweShldmVudG1hc2ssIGlvdmJ1ZiwgV0xfRVZFTlRJTkdfTUFTS19MRU4pOworCisJc2V0Yml0KGV2ZW50bWFzaywgV0xDX0VfU0VUX1NTSUQpOworCXNldGJpdChldmVudG1hc2ssIFdMQ19FX1JPQU0pOworCXNldGJpdChldmVudG1hc2ssIFdMQ19FX1BSVU5FKTsKKwlzZXRiaXQoZXZlbnRtYXNrLCBXTENfRV9BVVRIKTsKKwlzZXRiaXQoZXZlbnRtYXNrLCBXTENfRV9SRUFTU09DKTsKKwlzZXRiaXQoZXZlbnRtYXNrLCBXTENfRV9SRUFTU09DX0lORCk7CisJc2V0Yml0KGV2ZW50bWFzaywgV0xDX0VfREVBVVRIX0lORCk7CisJc2V0Yml0KGV2ZW50bWFzaywgV0xDX0VfRElTQVNTT0NfSU5EKTsKKwlzZXRiaXQoZXZlbnRtYXNrLCBXTENfRV9ESVNBU1NPQyk7CisJc2V0Yml0KGV2ZW50bWFzaywgV0xDX0VfSk9JTik7CisJc2V0Yml0KGV2ZW50bWFzaywgV0xDX0VfQVNTT0NfSU5EKTsKKwlzZXRiaXQoZXZlbnRtYXNrLCBXTENfRV9QU0tfU1VQKTsKKwlzZXRiaXQoZXZlbnRtYXNrLCBXTENfRV9MSU5LKTsKKwlzZXRiaXQoZXZlbnRtYXNrLCBXTENfRV9ORElTX0xJTkspOworCXNldGJpdChldmVudG1hc2ssIFdMQ19FX01JQ19FUlJPUik7CisJc2V0Yml0KGV2ZW50bWFzaywgV0xDX0VfUE1LSURfQ0FDSEUpOworCXNldGJpdChldmVudG1hc2ssIFdMQ19FX1RYRkFJTCk7CisJc2V0Yml0KGV2ZW50bWFzaywgV0xDX0VfSk9JTl9TVEFSVCk7CisJc2V0Yml0KGV2ZW50bWFzaywgV0xDX0VfU0NBTl9DT01QTEVURSk7CisKKwliY21fbWtpb3ZhcigiZXZlbnRfbXNncyIsIGV2ZW50bWFzaywgV0xfRVZFTlRJTkdfTUFTS19MRU4sIGlvdmJ1ZiwKKwkJICAgIHNpemVvZihpb3ZidWYpKTsKKwllcnIgPSB3bF9kZXZfaW9jdGwobmRldiwgV0xDX1NFVF9WQVIsIGlvdmJ1Ziwgc2l6ZW9mKGlvdmJ1ZikpOworCWlmICh1bmxpa2VseShlcnIpKSB7CisJCVdMX0VSUigiU2V0IGV2ZW50X21zZ3MgZXJyb3IgKCVkKVxuIiwgZXJyKTsKKwkJZ290byBkb25nbGVfZXZlbnRtc2dfb3V0OworCX0KKworZG9uZ2xlX2V2ZW50bXNnX291dDoKKwlXTF9UUkFDRSgiRXhpdFxuIik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHMzMgord2xfZG9uZ2xlX3JvYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiByb2FtdmFyLCB1MzIgYmNuX3RpbWVvdXQpCit7CisJczggaW92YnVmWzMyXTsKKwlzMzIgcm9hbXRyaWdnZXJbMl07CisJczMyIHJvYW1fZGVsdGFbMl07CisJczMyIGVyciA9IDA7CisKKwkvKgorCSAqIFNldHVwIHRpbWVvdXQgaWYgQmVhY29ucyBhcmUgbG9zdCBhbmQgcm9hbSBpcworCSAqIG9mZiB0byByZXBvcnQgbGluayBkb3duCisJICovCisJaWYgKHJvYW12YXIpIHsKKwkJYmNtX21raW92YXIoImJjbl90aW1lb3V0IiwgKGNoYXIgKikmYmNuX3RpbWVvdXQsCisJCQlzaXplb2YoYmNuX3RpbWVvdXQpLCBpb3ZidWYsIHNpemVvZihpb3ZidWYpKTsKKwkJZXJyID0gd2xfZGV2X2lvY3RsKG5kZXYsIFdMQ19TRVRfVkFSLCBpb3ZidWYsIHNpemVvZihpb3ZidWYpKTsKKwkJaWYgKHVubGlrZWx5KGVycikpIHsKKwkJCVdMX0VSUigiYmNuX3RpbWVvdXQgZXJyb3IgKCVkKVxuIiwgZXJyKTsKKwkJCWdvdG8gZG9uZ2xlX3JvbV9vdXQ7CisJCX0KKwl9CisKKwkvKgorCSAqIEVuYWJsZS9EaXNhYmxlIGJ1aWx0LWluIHJvYW1pbmcgdG8gYWxsb3cgc3VwcGxpY2FudAorCSAqIHRvIHRha2UgY2FyZSBvZiByb2FtaW5nCisJICovCisJV0xfSU5GTygiSW50ZXJuYWwgUm9hbWluZyA9ICVzXG4iLCByb2FtdmFyID8gIk9mZiIgOiAiT24iKTsKKwliY21fbWtpb3Zhcigicm9hbV9vZmYiLCAoY2hhciAqKSZyb2FtdmFyLAorCQkJCXNpemVvZihyb2FtdmFyKSwgaW92YnVmLCBzaXplb2YoaW92YnVmKSk7CisJZXJyID0gd2xfZGV2X2lvY3RsKG5kZXYsIFdMQ19TRVRfVkFSLCBpb3ZidWYsIHNpemVvZihpb3ZidWYpKTsKKwlpZiAodW5saWtlbHkoZXJyKSkgeworCQlXTF9FUlIoInJvYW1fb2ZmIGVycm9yICglZClcbiIsIGVycik7CisJCWdvdG8gZG9uZ2xlX3JvbV9vdXQ7CisJfQorCisJcm9hbXRyaWdnZXJbMF0gPSBXTF9ST0FNX1RSSUdHRVJfTEVWRUw7CisJcm9hbXRyaWdnZXJbMV0gPSBXTENfQkFORF9BTEw7CisJZXJyID0gd2xfZGV2X2lvY3RsKG5kZXYsIFdMQ19TRVRfUk9BTV9UUklHR0VSLAorCQkJKHZvaWQgKilyb2FtdHJpZ2dlciwgc2l6ZW9mKHJvYW10cmlnZ2VyKSk7CisJaWYgKHVubGlrZWx5KGVycikpIHsKKwkJV0xfRVJSKCJXTENfU0VUX1JPQU1fVFJJR0dFUiBlcnJvciAoJWQpXG4iLCBlcnIpOworCQlnb3RvIGRvbmdsZV9yb21fb3V0OworCX0KKworCXJvYW1fZGVsdGFbMF0gPSBXTF9ST0FNX0RFTFRBOworCXJvYW1fZGVsdGFbMV0gPSBXTENfQkFORF9BTEw7CisJZXJyID0gd2xfZGV2X2lvY3RsKG5kZXYsIFdMQ19TRVRfUk9BTV9ERUxUQSwKKwkJCQkodm9pZCAqKXJvYW1fZGVsdGEsIHNpemVvZihyb2FtX2RlbHRhKSk7CisJaWYgKHVubGlrZWx5KGVycikpIHsKKwkJV0xfRVJSKCJXTENfU0VUX1JPQU1fREVMVEEgZXJyb3IgKCVkKVxuIiwgZXJyKTsKKwkJZ290byBkb25nbGVfcm9tX291dDsKKwl9CisKK2RvbmdsZV9yb21fb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzMzIKK3dsX2RvbmdsZV9zY2FudGltZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgczMyIHNjYW5fYXNzb2NfdGltZSwKKwkJczMyIHNjYW5fdW5hc3NvY190aW1lLCBzMzIgc2Nhbl9wYXNzaXZlX3RpbWUpCit7CisJczMyIGVyciA9IDA7CisKKwllcnIgPSB3bF9kZXZfaW9jdGwobmRldiwgV0xDX1NFVF9TQ0FOX0NIQU5ORUxfVElNRSwgJnNjYW5fYXNzb2NfdGltZSwKKwkJCXNpemVvZihzY2FuX2Fzc29jX3RpbWUpKTsKKwlpZiAoZXJyKSB7CisJCWlmIChlcnIgPT0gLUVPUE5PVFNVUFApCisJCQlXTF9JTkZPKCJTY2FuIGFzc29jIHRpbWUgaXMgbm90IHN1cHBvcnRlZFxuIik7CisJCWVsc2UKKwkJCVdMX0VSUigiU2NhbiBhc3NvYyB0aW1lIGVycm9yICglZClcbiIsIGVycik7CisJCWdvdG8gZG9uZ2xlX3NjYW50aW1lX291dDsKKwl9CisJZXJyID0gd2xfZGV2X2lvY3RsKG5kZXYsIFdMQ19TRVRfU0NBTl9VTkFTU09DX1RJTUUsICZzY2FuX3VuYXNzb2NfdGltZSwKKwkJCXNpemVvZihzY2FuX3VuYXNzb2NfdGltZSkpOworCWlmIChlcnIpIHsKKwkJaWYgKGVyciA9PSAtRU9QTk9UU1VQUCkKKwkJCVdMX0lORk8oIlNjYW4gdW5hc3NvYyB0aW1lIGlzIG5vdCBzdXBwb3J0ZWRcbiIpOworCQllbHNlCisJCQlXTF9FUlIoIlNjYW4gdW5hc3NvYyB0aW1lIGVycm9yICglZClcbiIsIGVycik7CisJCWdvdG8gZG9uZ2xlX3NjYW50aW1lX291dDsKKwl9CisKKwllcnIgPSB3bF9kZXZfaW9jdGwobmRldiwgV0xDX1NFVF9TQ0FOX1BBU1NJVkVfVElNRSwgJnNjYW5fcGFzc2l2ZV90aW1lLAorCQkJc2l6ZW9mKHNjYW5fcGFzc2l2ZV90aW1lKSk7CisJaWYgKGVycikgeworCQlpZiAoZXJyID09IC1FT1BOT1RTVVBQKQorCQkJV0xfSU5GTygiU2NhbiBwYXNzaXZlIHRpbWUgaXMgbm90IHN1cHBvcnRlZFxuIik7CisJCWVsc2UKKwkJCVdMX0VSUigiU2NhbiBwYXNzaXZlIHRpbWUgZXJyb3IgKCVkKVxuIiwgZXJyKTsKKwkJZ290byBkb25nbGVfc2NhbnRpbWVfb3V0OworCX0KKworZG9uZ2xlX3NjYW50aW1lX291dDoKKwlyZXR1cm4gZXJyOworfQorCiBzMzIgd2xfY29uZmlnX2RvbmdsZShzdHJ1Y3Qgd2xfcHJpdiAqd2wsIGJvb2wgbmVlZF9sb2NrKQogewogI2lmbmRlZiBESERfU0RBTElHTgpAQCAtMzc1MiwxOCArNDAyNSwyMCBAQAogCWVyciA9IHdsX2RvbmdsZV9nbG9tKG5kZXYsIDAsIERIRF9TREFMSUdOKTsKIAlpZiAodW5saWtlbHkoZXJyKSkKIAkJZ290byBkZWZhdWx0X2NvbmZfb3V0OwotCWVyciA9IHdsX2RvbmdsZV9yb2FtKG5kZXYsICh3bC0+cm9hbV9vbiA/IDAgOiAxKSwgMyk7Ci0JaWYgKHVubGlrZWx5KGVycikpCi0JCWdvdG8gZGVmYXVsdF9jb25mX291dDsKKworCXdsX2RvbmdsZV9vZmZsb2FkKG5kZXYsIDEsIDB4Zik7CisJd2xfZG9uZ2xlX2ZpbHRlcihuZGV2LCAxKTsKKyNlbmRpZiAvKiAhRU1CRURERURfUExBVEZPUk0gKi8KKworCXdsX2RvbmdsZV9zY2FudGltZShuZGV2LCBXTF9TQ0FOX0NIQU5ORUxfVElNRSwKKwkJCVdMX1NDQU5fVU5BU1NPQ19USU1FLCBXTF9TQ0FOX1BBU1NJVkVfVElNRSk7CisKIAllcnIgPSB3bF9kb25nbGVfZXZlbnRtc2cobmRldik7CiAJaWYgKHVubGlrZWx5KGVycikpCiAJCWdvdG8gZGVmYXVsdF9jb25mX291dDsKLQotCXdsX2RvbmdsZV9zY2FudGltZShuZGV2LCA0MCwgODApOwotCXdsX2RvbmdsZV9vZmZsb2FkKG5kZXYsIDEsIDB4Zik7Ci0Jd2xfZG9uZ2xlX2ZpbHRlcihuZGV2LCAxKTsKLSNlbmRpZgkJCQkvKiAhRU1CRURERURfUExBVEZPUk0gKi8KLQorCWVyciA9IHdsX2RvbmdsZV9yb2FtKG5kZXYsICh3bC0+cm9hbV9vbiA/IDAgOiAxKSwgV0xfQkVBQ09OX1RJTUVPVVQpOworCWlmICh1bmxpa2VseShlcnIpKQorCQlnb3RvIGRlZmF1bHRfY29uZl9vdXQ7CiAJZXJyID0gd2xfZG9uZ2xlX21vZGUobmRldiwgd2Rldi0+aWZ0eXBlKTsKIAlpZiAodW5saWtlbHkoZXJyICYmIGVyciAhPSAtRUlOUFJPR1JFU1MpKQogCQlnb3RvIGRlZmF1bHRfY29uZl9vdXQ7CkBAIC0zNzk4LDcgKzQwNzMsNyBAQAogCX0KIAogCXBoeSA9ICgoY2hhciAqKSZwaHlfbGlzdClbMV07Ci0JV0xfREJHKCIlYyBwaHlcbiIsIHBoeSk7CisJV0xfSU5GTygiJWMgcGh5XG4iLCBwaHkpOwogCWlmIChwaHkgPT0gJ24nIHx8IHBoeSA9PSAnYScpIHsKIAkJd2lwaHkgPSB3bF90b193aXBoeSh3bCk7CiAJCXdpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSA9ICZfX3dsX2JhbmRfNWdoel9uOwpAQCAtMzgxMSw2ICs0MDg2LDggQEAKIHsKIAlzMzIgZXJyID0gMDsKIAorCXNldF9iaXQoV0xfU1RBVFVTX1JFQURZLCAmd2wtPnN0YXR1cyk7CisKIAl3bF9kZWJ1Z2ZzX2FkZF9uZXRkZXZfcGFyYW1zKHdsKTsKIAogCWVyciA9IHdsX2NvbmZpZ19kb25nbGUod2wsIGZhbHNlKTsKQEAgLTM4MTgsNDEgKzQwOTUsMjkgQEAKIAkJcmV0dXJuIGVycjsKIAogCXdsX2ludm9rZV9pc2Nhbih3bCk7Ci0Jc2V0X2JpdChXTF9TVEFUVVNfUkVBRFksICZ3bC0+c3RhdHVzKTsKKwogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBzMzIgX193bF9jZmc4MDIxMV9kb3duKHN0cnVjdCB3bF9wcml2ICp3bCkKIHsKLQlzMzIgZXJyID0gMDsKLQotCS8qIENoZWNrIGlmIGNmZzgwMjExIGludGVyZmFjZSBpcyBhbHJlYWR5IGRvd24gKi8KLQlpZiAoIXRlc3RfYml0KFdMX1NUQVRVU19SRUFEWSwgJndsLT5zdGF0dXMpKQotCQlyZXR1cm4gZXJyOwkvKiBpdCBpcyBldmVuIG5vdCByZWFkeSAqLwotCiAJc2V0X2JpdChXTF9TVEFUVVNfU0NBTl9BQk9SVElORywgJndsLT5zdGF0dXMpOwogCXdsX3Rlcm1faXNjYW4od2wpOwogCWlmICh3bC0+c2Nhbl9yZXF1ZXN0KSB7Ci0JCWNmZzgwMjExX3NjYW5fZG9uZSh3bC0+c2Nhbl9yZXF1ZXN0LCB0cnVlKTsJLyogdHJ1ZQotCQkJCQkJCQkgbWVhbnMgYWJvcnQgKi8KLQkJLyogd2xfc2V0X21wYyh3bF90b19uZGV2KHdsKSwgMSk7ICovCS8qIEJVRwotCQkJCQkJKiB0aGlzIG9wZXJhdGlvbiBjYW5ub3QgaGVscAotCQkJCQkJKiBidXQgaGVyZSBiZWNhdXNlIHNkaW8KLQkJCQkJCSogaXMgYWxyZWFkeSBkb3duIHRocm91Z2gKLQkJCQkJCSogcm1tb2QgcHJvY2Vzcy4KLQkJCQkJCSogTmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0bwotCQkJCQkJKiBhZGRyZXNzIHRoaXMgaXNzdWUKLQkJCQkJCSovCisJCWNmZzgwMjExX3NjYW5fZG9uZSh3bC0+c2Nhbl9yZXF1ZXN0LCB0cnVlKTsKKwkJLyogTWF5IG5lZWQgdG8gcGVyZm9ybSB0aGlzIHRvIGNvdmVyIHJtbW9kICovCisJCS8qIHdsX3NldF9tcGMod2xfdG9fbmRldih3bCksIDEpOyAqLwogCQl3bC0+c2Nhbl9yZXF1ZXN0ID0gTlVMTDsKIAl9CiAJY2xlYXJfYml0KFdMX1NUQVRVU19SRUFEWSwgJndsLT5zdGF0dXMpOwogCWNsZWFyX2JpdChXTF9TVEFUVVNfU0NBTk5JTkcsICZ3bC0+c3RhdHVzKTsKIAljbGVhcl9iaXQoV0xfU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZ3bC0+c3RhdHVzKTsKKwljbGVhcl9iaXQoV0xfU1RBVFVTX0NPTk5FQ1RJTkcsICZ3bC0+c3RhdHVzKTsKIAljbGVhcl9iaXQoV0xfU1RBVFVTX0NPTk5FQ1RFRCwgJndsLT5zdGF0dXMpOwogCiAJd2xfZGVidWdmc19yZW1vdmVfbmV0ZGV2KHdsKTsKIAotCXJldHVybiBlcnI7CisJcmV0dXJuIDA7CiB9CiAKIHMzMiB3bF9jZmc4MDIxMV91cCh2b2lkKQpAQCAtMzg5Nyw4ICs0MTYyLDYgQEAKIAlzd2l0Y2ggKGl0ZW0pIHsKIAljYXNlIFdMX1BST0ZfU0VDOgogCQlyZXR1cm4gJndsLT5wcm9maWxlLT5zZWM7Ci0JY2FzZSBXTF9QUk9GX0FDVDoKLQkJcmV0dXJuICZ3bC0+cHJvZmlsZS0+YWN0aXZlOwogCWNhc2UgV0xfUFJPRl9CU1NJRDoKIAkJcmV0dXJuICZ3bC0+cHJvZmlsZS0+YnNzaWQ7CiAJY2FzZSBXTF9QUk9GX1NTSUQ6CkBAIC0zOTMyLDkgKzQxOTUsNiBAQAogCWNhc2UgV0xfUFJPRl9TRUM6CiAJCW1lbWNweSgmd2wtPnByb2ZpbGUtPnNlYywgZGF0YSwgc2l6ZW9mKHdsLT5wcm9maWxlLT5zZWMpKTsKIAkJYnJlYWs7Ci0JY2FzZSBXTF9QUk9GX0FDVDoKLQkJd2wtPnByb2ZpbGUtPmFjdGl2ZSA9ICooYm9vbCAqKWRhdGE7Ci0JCWJyZWFrOwogCWNhc2UgV0xfUFJPRl9CRUFDT05JTlQ6CiAJCXdsLT5wcm9maWxlLT5iZWFjb25faW50ZXJ2YWwgPSAqKHUxNiAqKWRhdGE7CiAJCWJyZWFrOwpAQCAtMzk1MCwzNCArNDIxMCwxMSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXZvaWQgd2xfY2ZnODAyMTFfZGJnX2xldmVsKHUzMiBsZXZlbCkKLXsKLQkvKgotCSogcHJvaGliaXQgdG8gY2hhbmdlIGRlYnVnIGxldmVsCi0JKiBieSBpbnNtb2QgcGFyYW1ldGVyLgotCSogZXZlbnR1YWxseSBkZWJ1ZyBsZXZlbCB3aWxsIGJlIGNvbmZpZ3VyZWQKLQkqIGluIGNvbXBpbGUgdGltZSBieSB1c2luZyBDT05GSUdfWFhYCi0JKi8KLQkvKiB3bF9kYmdfbGV2ZWwgPSBsZXZlbDsgKi8KLX0KLQogc3RhdGljIGJvb2wgd2xfaXNfaWJzc21vZGUoc3RydWN0IHdsX3ByaXYgKndsKQogewogCXJldHVybiB3bC0+Y29uZi0+bW9kZSA9PSBXTF9NT0RFX0lCU1M7CiB9CiAKLXN0YXRpYyBib29sIHdsX2lzX2lic3NzdGFydGVyKHN0cnVjdCB3bF9wcml2ICp3bCkKLXsKLQlyZXR1cm4gd2wtPmlic3Nfc3RhcnRlcjsKLX0KLQotc3RhdGljIHZvaWQgd2xfcnN0X2llKHN0cnVjdCB3bF9wcml2ICp3bCkKLXsKLQlzdHJ1Y3Qgd2xfaWUgKmllID0gd2xfdG9faWUod2wpOwotCi0JaWUtPm9mZnNldCA9IDA7Ci19Ci0KIHN0YXRpYyBfX3VzZWQgczMyIHdsX2FkZF9pZShzdHJ1Y3Qgd2xfcHJpdiAqd2wsIHU4IHQsIHU4IGwsIHU4ICp2KQogewogCXN0cnVjdCB3bF9pZSAqaWUgPSB3bF90b19pZSh3bCk7CkBAIC0zOTk1LDU4ICs0MjMyLDI0IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHMzMiB3bF9tcmdfaWUoc3RydWN0IHdsX3ByaXYgKndsLCB1OCAqaWVfc3RyZWFtLCB1MTYgaWVfc2l6ZSkKLXsKLQlzdHJ1Y3Qgd2xfaWUgKmllID0gd2xfdG9faWUod2wpOwotCXMzMiBlcnIgPSAwOwotCi0JaWYgKHVubGlrZWx5KGllLT5vZmZzZXQgKyBpZV9zaXplID4gV0xfVExWX0lORk9fTUFYKSkgewotCQlXTF9FUlIoImVpX3N0cmVhbSBjcm9zc2VzIGJ1ZmZlciBib3VuZGFyeVxuIik7Ci0JCXJldHVybiAtRU5PU1BDOwotCX0KLQltZW1jcHkoJmllLT5idWZbaWUtPm9mZnNldF0sIGllX3N0cmVhbSwgaWVfc2l6ZSk7Ci0JaWUtPm9mZnNldCArPSBpZV9zaXplOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHMzMiB3bF9jcF9pZShzdHJ1Y3Qgd2xfcHJpdiAqd2wsIHU4ICpkc3QsIHUxNiBkc3Rfc2l6ZSkKLXsKLQlzdHJ1Y3Qgd2xfaWUgKmllID0gd2xfdG9faWUod2wpOwotCXMzMiBlcnIgPSAwOwotCi0JaWYgKHVubGlrZWx5KGllLT5vZmZzZXQgPiBkc3Rfc2l6ZSkpIHsKLQkJV0xfRVJSKCJkc3Rfc2l6ZSBpcyBub3QgZW5vdWdoXG4iKTsKLQkJcmV0dXJuIC1FTk9TUEM7Ci0JfQotCW1lbWNweShkc3QsICZpZS0+YnVmWzBdLCBpZS0+b2Zmc2V0KTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB1MzIgd2xfZ2V0X2llbGVuKHN0cnVjdCB3bF9wcml2ICp3bCkKLXsKLQlzdHJ1Y3Qgd2xfaWUgKmllID0gd2xfdG9faWUod2wpOwotCi0JcmV0dXJuIGllLT5vZmZzZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHdsX2xpbmtfdXAoc3RydWN0IHdsX3ByaXYgKndsKQotewotCXdsLT5saW5rX3VwID0gdHJ1ZTsKLX0KIAogc3RhdGljIHZvaWQgd2xfbGlua19kb3duKHN0cnVjdCB3bF9wcml2ICp3bCkKIHsKLQlzdHJ1Y3Qgd2xfY29ubmVjdF9pbmZvICpjb25uX2luZm8gPSB3bF90b19jb25uKHdsKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKKwlzMzIgZXJyID0gMDsKIAotCXdsLT5saW5rX3VwID0gZmFsc2U7Ci0Ja2ZyZWUoY29ubl9pbmZvLT5yZXFfaWUpOwotCWNvbm5faW5mby0+cmVxX2llID0gTlVMTDsKLQljb25uX2luZm8tPnJlcV9pZV9sZW4gPSAwOwotCWtmcmVlKGNvbm5faW5mby0+cmVzcF9pZSk7Ci0JY29ubl9pbmZvLT5yZXNwX2llID0gTlVMTDsKLQljb25uX2luZm8tPnJlc3BfaWVfbGVuID0gMDsKKwlXTF9UUkFDRSgiRW50ZXJcbiIpOworCWNsZWFyX2JpdChXTF9TVEFUVVNfQ09OTkVDVEVELCAmd2wtPnN0YXR1cyk7CisKKwlpZiAod2wtPmxpbmtfdXApIHsKKwkJZGV2ID0gd2xfdG9fbmRldih3bCk7CisJCVdMX0lORk8oIkNhbGwgV0xDX0RJU0FTU09DIHRvIHN0b3AgZXhjZXNzIHJvYW1pbmdcbiAiKTsKKwkJZXJyID0gd2xfZGV2X2lvY3RsKGRldiwgV0xDX0RJU0FTU09DLCBOVUxMLCAwKTsKKwkJaWYgKHVubGlrZWx5KGVycikpCisJCQlXTF9FUlIoIldMQ19ESVNBU1NPQyBmYWlsZWQgKCVkKVxuIiwgZXJyKTsKKwkJd2wtPmxpbmtfdXAgPSBmYWxzZTsKKwl9CisJV0xfVFJBQ0UoIkV4aXRcbiIpOwogfQogCiBzdGF0aWMgdm9pZCB3bF9sb2NrX2VxKHN0cnVjdCB3bF9wcml2ICp3bCkKQEAgLTQxMTYsNyArNDMxOSw3IEBACiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeSA9IE5VTEw7CiAJczMyIGVyciA9IDA7CiAKLQlXTF9EQkcoImZpbGUgbmFtZSA6IFwiJXNcIlxuIiwgZmlsZV9uYW1lKTsKKwlXTF9JTkZPKCJmaWxlIG5hbWUgOiBcIiVzXCJcbiIsIGZpbGVfbmFtZSk7CiAJd2wgPSBXTF9QUklWX0dFVCgpOwogCiAJaWYgKCF0ZXN0X2JpdChXTF9GV19MT0FESU5HX0RPTkUsICZ3bC0+ZnctPnN0YXR1cykpIHsKQEAgLTQxMjksNyArNDMzMiw3IEBACiAJCXNldF9iaXQoV0xfRldfTE9BRElOR19ET05FLCAmd2wtPmZ3LT5zdGF0dXMpOwogCQlmd19lbnRyeSA9IHdsLT5mdy0+ZndfZW50cnk7CiAJCWlmIChmd19lbnRyeSkgewotCQkJV0xfREJHKCJmdyBzaXplICglemQpLCBkYXRhICglcClcbiIsCisJCQlXTF9JTkZPKCJmdyBzaXplICglemQpLCBkYXRhICglcClcbiIsCiAJCQkgICAgICAgZndfZW50cnktPnNpemUsIGZ3X2VudHJ5LT5kYXRhKTsKIAkJfQogCX0gZWxzZSBpZiAoIXRlc3RfYml0KFdMX05WUkFNX0xPQURJTkdfRE9ORSwgJndsLT5mdy0+c3RhdHVzKSkgewpAQCAtNDE0MiwxMSArNDM0NSwxMSBAQAogCQlzZXRfYml0KFdMX05WUkFNX0xPQURJTkdfRE9ORSwgJndsLT5mdy0+c3RhdHVzKTsKIAkJZndfZW50cnkgPSB3bC0+ZnctPmZ3X2VudHJ5OwogCQlpZiAoZndfZW50cnkpIHsKLQkJCVdMX0RCRygibnZyYW0gc2l6ZSAoJXpkKSwgZGF0YSAoJXApXG4iLAorCQkJV0xfSU5GTygibnZyYW0gc2l6ZSAoJXpkKSwgZGF0YSAoJXApXG4iLAogCQkJICAgICAgIGZ3X2VudHJ5LT5zaXplLCBmd19lbnRyeS0+ZGF0YSk7CiAJCX0KIAl9IGVsc2UgewotCQlXTF9EQkcoIkRvd25sb2FkaW5nIGFscmVhZHkgZG9uZS4gTm90aGluZyB0byBkbyBtb3JlXG4iKTsKKwkJV0xfSU5GTygiRG93bmxvYWRpbmcgYWxyZWFkeSBkb25lLiBOb3RoaW5nIHRvIGRvIG1vcmVcbiIpOwogCQllcnIgPSAtRVBFUk07CiAJfQogCkBAIC00MTc5LDEzICs0MzgyLDE2IEBACiBzdGF0aWMgdm9pZCB3bF9zZXRfbXBjKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgbXBjKQogewogCXMzMiBlcnIgPSAwOworCXN0cnVjdCB3bF9wcml2ICp3bCA9IG5kZXZfdG9fd2wobmRldik7CiAKLQllcnIgPSB3bF9kZXZfaW50dmFyX3NldChuZGV2LCAibXBjIiwgbXBjKTsKLQlpZiAodW5saWtlbHkoZXJyKSkgewotCQlXTF9FUlIoImZhaWwgdG8gc2V0IG1wY1xuIik7Ci0JCXJldHVybjsKKwlpZiAodGVzdF9iaXQoV0xfU1RBVFVTX1JFQURZLCAmd2wtPnN0YXR1cykpIHsKKwkJZXJyID0gd2xfZGV2X2ludHZhcl9zZXQobmRldiwgIm1wYyIsIG1wYyk7CisJCWlmICh1bmxpa2VseShlcnIpKSB7CisJCQlXTF9FUlIoImZhaWwgdG8gc2V0IG1wY1xuIik7CisJCQlyZXR1cm47CisJCX0KKwkJV0xfSU5GTygiTVBDIDogJWRcbiIsIG1wYyk7CiAJfQotCVdMX0RCRygiTVBDIDogJWRcbiIsIG1wYyk7CiB9CiAKIHN0YXRpYyBpbnQgd2xfZGVidWdmc19hZGRfbmV0ZGV2X3BhcmFtcyhzdHJ1Y3Qgd2xfcHJpdiAqd2wpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL3dsX2NmZzgwMjExLmggYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL3dsX2NmZzgwMjExLmgKaW5kZXggNTExMjE2MC4uOTk2MDMzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy93bF9jZmc4MDIxMS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvd2xfY2ZnODAyMTEuaApAQCAtMjgsNDUgKzI4LDczIEBACiBzdHJ1Y3Qgd2xfc2VjdXJpdHk7CiBzdHJ1Y3Qgd2xfaWJzczsKIAotI2RlZmluZSBXTF9EQkdfTk9ORQkwCi0jZGVmaW5lIFdMX0RCR19EQkcgCSgxIDw8IDIpCi0jZGVmaW5lIFdMX0RCR19JTkZPCSgxIDw8IDEpCi0jZGVmaW5lIFdMX0RCR19FUlIJKDEgPDwgMCkKLSNkZWZpbmUgV0xfREJHX01BU0sgKChXTF9EQkdfREJHIHwgV0xfREJHX0lORk8gfCBXTF9EQkdfRVJSKSA8PCAxKQorI2RlZmluZSBXTF9EQkdfTk9ORQkJMAorI2RlZmluZSBXTF9EQkdfQ09OTgkJKDEgPDwgNSkKKyNkZWZpbmUgV0xfREJHX1NDQU4JCSgxIDw8IDQpCisjZGVmaW5lIFdMX0RCR19UUkFDRQkJKDEgPDwgMykKKyNkZWZpbmUgV0xfREJHX0lORk8JCSgxIDw8IDEpCisjZGVmaW5lIFdMX0RCR19FUlIJCSgxIDw8IDApCisjZGVmaW5lIFdMX0RCR19NQVNLCQkoKFdMX0RCR19JTkZPIHwgV0xfREJHX0VSUiB8IFdMX0RCR19UUkFDRSkgfCBcCisJCQkJKFdMX0RCR19TQ0FOKSB8IChXTF9EQkdfQ09OTikpCiAKLSNkZWZpbmUgV0xfREJHX0xFVkVMIDEJCS8qIDAgaW52YWxpZGF0ZXMgYWxsIGRlYnVnIG1lc3NhZ2VzLgotCQkJCSBkZWZhdWx0IGlzIDEgKi8KICNkZWZpbmUJV0xfRVJSKGZtdCwgYXJncy4uLikJCQkJCVwKIGRvIHsJCQkJCQkJCVwKIAlpZiAod2xfZGJnX2xldmVsICYgV0xfREJHX0VSUikgewkJCVwKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewkJCQlcCiAJCQlwcmludGsoS0VSTl9FUlIgIkVSUk9SIEAlcyA6ICIgZm10LAlcCi0JCQkgICAgICAgX19mdW5jX18sICMjYXJncyk7CQlcCisJCQkJX19mdW5jX18sICMjYXJncyk7CQlcCiAJCX0JCQkJCQlcCiAJfQkJCQkJCQlcCiB9IHdoaWxlICgwKQogCisjaWYgKGRlZmluZWQgQkNNREJHKQogI2RlZmluZQlXTF9JTkZPKGZtdCwgYXJncy4uLikJCQkJCVwKIGRvIHsJCQkJCQkJCVwKIAlpZiAod2xfZGJnX2xldmVsICYgV0xfREJHX0lORk8pIHsJCQlcCiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsJCQkJXAogCQkJcHJpbnRrKEtFUk5fRVJSICJJTkZPIEAlcyA6ICIgZm10LAlcCi0JCQkgICAgICAgX19mdW5jX18sICMjYXJncyk7CQlcCisJCQkJX19mdW5jX18sICMjYXJncyk7CQlcCiAJCX0JCQkJCQlcCiAJfQkJCQkJCQlcCiB9IHdoaWxlICgwKQogCi0jaWYgKFdMX0RCR19MRVZFTCA+IDApCi0jZGVmaW5lCVdMX0RCRyhmbXQsIGFyZ3MuLi4pCQkJCQlcCisjZGVmaW5lCVdMX1RSQUNFKGZtdCwgYXJncy4uLikJCQkJCVwKIGRvIHsJCQkJCQkJCVwKLQlpZiAod2xfZGJnX2xldmVsICYgV0xfREJHX0RCRykgewkJCVwKLQkJcHJpbnRrKEtFUk5fRVJSICJERUJVRyBAJXMgOiIgZm10LAkJXAotCQkgICAgICAgX19mdW5jX18sICMjYXJncyk7CQkJXAorCWlmICh3bF9kYmdfbGV2ZWwgJiBXTF9EQkdfVFJBQ0UpIHsJCQlcCisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsJCQkJXAorCQkJcHJpbnRrKEtFUk5fRVJSICJUUkFDRSBAJXMgOiAiIGZtdCwJXAorCQkJCV9fZnVuY19fLCAjI2FyZ3MpOwkJXAorCQl9CQkJCQkJXAogCX0JCQkJCQkJXAogfSB3aGlsZSAoMCkKLSNlbHNlCQkJCS8qICEoV0xfREJHX0xFVkVMID4gMCkgKi8KLSNkZWZpbmUJV0xfREJHKGZtdCwgYXJncy4uLikgbm9wcmludGsoZm10LCAjI2FyZ3MpCi0jZW5kaWYJCQkJLyogKFdMX0RCR19MRVZFTCA+IDApICovCisKKyNkZWZpbmUJV0xfU0NBTihmbXQsIGFyZ3MuLi4pCQkJCQlcCitkbyB7CQkJCQkJCQlcCisJaWYgKHdsX2RiZ19sZXZlbCAmIFdMX0RCR19TQ0FOKSB7CQkJXAorCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CQkJCVwKKwkJCXByaW50ayhLRVJOX0VSUiAiU0NBTiBAJXMgOiAiIGZtdCwJXAorCQkJCV9fZnVuY19fLCAjI2FyZ3MpOwkJXAorCQl9CQkJCQkJXAorCX0JCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlXTF9DT05OKGZtdCwgYXJncy4uLikJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlpZiAod2xfZGJnX2xldmVsICYgV0xfREJHX0NPTk4pIHsJCQlcCisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsJCQkJXAorCQkJcHJpbnRrKEtFUk5fRVJSICJDT05OIEAlcyA6ICIgZm10LAlcCisJCQkJX19mdW5jX18sICMjYXJncyk7CQlcCisJCX0JCQkJCQlcCisJfQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZWxzZSAvKiAoZGVmaW5lZCBCQ01EQkcpICovCisjZGVmaW5lCVdMX0lORk8oZm10LCBhcmdzLi4uKQorI2RlZmluZQlXTF9UUkFDRShmbXQsIGFyZ3MuLi4pCisjZGVmaW5lCVdMX1NDQU4oZm10LCBhcmdzLi4uKQorI2RlZmluZQlXTF9DT05OKGZtdCwgYXJncy4uLikKKyNlbmRpZiAvKiAoZGVmaW5lZCBCQ01EQkcpICovCisKIAogI2RlZmluZSBXTF9TQ0FOX1JFVFJZX01BWAkzCS8qIHVzZWQgZm9yIGlic3Mgc2NhbiAqLwogI2RlZmluZSBXTF9OVU1fU0NBTl9NQVgJCTEKQEAgLTk1LDYgKzEyMywxNCBAQAogCQkJCSAqLwogI2RlZmluZSBXTF9GSUxFX05BTUVfTUFYCQkyNTYKIAorI2RlZmluZSBXTF9ST0FNX1RSSUdHRVJfTEVWRUwJCS03NQorI2RlZmluZSBXTF9ST0FNX0RFTFRBCQkJMjAKKyNkZWZpbmUgV0xfQkVBQ09OX1RJTUVPVVQJCTMKKworI2RlZmluZSBXTF9TQ0FOX0NIQU5ORUxfVElNRQkJNDAKKyNkZWZpbmUgV0xfU0NBTl9VTkFTU09DX1RJTUUJCTQwCisjZGVmaW5lIFdMX1NDQU5fUEFTU0lWRV9USU1FCQkxMjAKKwogLyogZG9uZ2xlIHN0YXR1cyAqLwogZW51bSB3bF9zdGF0dXMgewogCVdMX1NUQVRVU19SRUFEWSwKQEAgLTIyNyw3ICsyNjMsNiBAQAogCXN0cnVjdCB3bF9zZWN1cml0eSBzZWM7CiAJc3RydWN0IHdsX2lic3MgaWJzczsKIAlzMzIgYmFuZDsKLQlib29sIGFjdGl2ZTsKIH07CiAKIC8qIGRvbmdsZSBpc2NhbiBldmVudCBsb29wICovCkBAIC0yOTgsNyArMzMzLDYgQEAKIAkJCQkJCSBjZmc4MDIxMSBsYXllciAqLwogCXN0cnVjdCB3bF9pZSBpZTsJLyogaW5mb3JtYXRpb24gZWxlbWVudCBvYmplY3QgZm9yCiAJCQkJCSBpbnRlcm5hbCBwdXJwb3NlICovCi0JdTggYnNzaWRbRVRIX0FMRU5dOwkvKiBic3NpZCBvZiBjdXJyZW50bHkgZW5nYWdlZCBuZXR3b3JrICovCiAJc3RydWN0IHNlbWFwaG9yZSBldmVudF9zeW5jOwkvKiBmb3Igc3luY2hyb25pemF0aW9uIG9mIG1haW4gZXZlbnQKIAkJCQkJIHRocmVhZCAqLwogCXN0cnVjdCB3bF9wcm9maWxlICpwcm9maWxlOwkvKiBob2xkaW5nIGRvbmdsZSBwcm9maWxlICovCkBAIC0zNzUsNSArNDA5LDYgQEAKIAkJCQkJCSB0aGUgZG9uZ2xlICovCiBleHRlcm4gczggKndsX2NmZzgwMjExX2dldF9udnJhbW5hbWUodm9pZCk7CS8qIGdldCBudnJhbSBuYW1lIGZvcgogCQkJCQkJIHRoZSBkb25nbGUgKi8KK2V4dGVybiB2b2lkIHdsX29zX3dkX3RpbWVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1aW50IHdkdGljayk7CiAKICNlbmRpZgkJCQkvKiBfd2xfY2ZnODAyMTFfaF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvd2xfaXcuYyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvd2xfaXcuYwppbmRleCBiNDk5NTdmLi45MjljZWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL3dsX2l3LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy93bF9pdy5jCkBAIC02OSw4ICs2OSw2IEBACiAjZGVmaW5lIE1BWF9XTElXX0lPQ1RMX0xFTiAxMDI0CiAKICNpZmRlZiBDT05GSUdfV0lSRUxFU1NfRVhUCi0KLWV4dGVybiBzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqZGhkX2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGV4dGVybiBpbnQgZGhkX3dhaXRfcGVuZDgwMjF4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogI2VuZGlmCiAKQEAgLTExOSw2ICsxMTcsOSBAQAogCiBzdGF0aWMgY29uc3QgdTggZXRoZXJfYmNhc3RbRVRIX0FMRU5dID0gezI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9OwogCisvKiBHbG9iYWwgQVNTRVJUIHR5cGUgZmxhZyAqLwordTMyIGdfYXNzZXJ0X3R5cGU7CisKIHN0YXRpYyB2b2lkIHdsX2l3X3RpbWVyZnVuYyh1bnNpZ25lZCBsb25nIGRhdGEpOwogc3RhdGljIHZvaWQgd2xfaXdfc2V0X2V2ZW50X21hc2soc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHdsX2l3X2lzY2FuKGlzY2FuX2luZm9fdCAqaXNjYW4sIHdsY19zc2lkX3QgKnNzaWQsIHUxNiBhY3Rpb24pOwpAQCAtMzcyLDcgKzM3Myw3IEBACiAJCWlmIChmd3JxLT5tID4gNDAwMCAmJiBmd3JxLT5tIDwgNTAwMCkKIAkJCXNmID0gV0ZfQ0hBTl9GQUNUT1JfNF9HOwogCi0JCWNoYW4gPSB3Zl9taHoyY2hhbm5lbChmd3JxLT5tLCBzZik7CisJCWNoYW4gPSBiY21fbWh6MmNoYW5uZWwoZndycS0+bSwgc2YpOwogCX0KIAljaGFuID0gY3B1X3RvX2xlMzIoY2hhbik7CiAKQEAgLTQ5NSw5ICs0OTYsNyBAQAogCWxpc3QgPSAod2xfdTMyX2xpc3RfdCAqKSBjaGFubmVsczsKIAogCWR3cnEtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpOwotCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKHJhbmdlKSk7Ci0KLQlyYW5nZS0+bWluX253aWQgPSByYW5nZS0+bWF4X253aWQgPSAwOworCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKCpyYW5nZSkpOwogCiAJbGlzdC0+Y291bnQgPSBjcHVfdG9fbGUzMihNQVhDSEFOTkVMKTsKIAllcnJvciA9IGRldl93bGNfaW9jdGwoZGV2LCBXTENfR0VUX1ZBTElEX0NIQU5ORUxTLCBjaGFubmVscywKQEAgLTMxMzEsNyArMzEzMCw3IEBACiAJLnByaXZhdGVfYXJncyA9IDAsCiAKICNpZiBXSVJFTEVTU19FWFQgPj0gMTkKLQkuZ2V0X3dpcmVsZXNzX3N0YXRzID0gZGhkX2dldF93aXJlbGVzc19zdGF0cywKKwkuZ2V0X3dpcmVsZXNzX3N0YXRzID0gTlVMTCwKICNlbmRpZgogfTsKICNlbmRpZgkJCQkvKiBXSVJFTEVTU19FWFQgPiAxMiAqLwpAQCAtMzU0OCwxMDMgKzM1NDcsNiBAQAogI2VuZGlmCQkJCS8qIFdJUkVMRVNTX0VYVCA+IDEzICovCiB9CiAKLWludAotd2xfaXdfZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19zdGF0aXN0aWNzICp3c3RhdHMpCi17Ci0JaW50IHJlcyA9IDA7Ci0Jc3RydWN0IHdsX2NudCBjbnQ7Ci0JaW50IHBoeV9ub2lzZTsKLQlpbnQgcnNzaTsKLQlzY2JfdmFsX3Qgc2NiX3ZhbDsKLQotCXBoeV9ub2lzZSA9IDA7Ci0JcmVzID0gZGV2X3dsY19pb2N0bChkZXYsIFdMQ19HRVRfUEhZX05PSVNFLCAmcGh5X25vaXNlLAotCQkJCXNpemVvZihwaHlfbm9pc2UpKTsKLQlpZiAocmVzKQotCQlnb3RvIGRvbmU7Ci0KLQlwaHlfbm9pc2UgPSBsZTMyX3RvX2NwdShwaHlfbm9pc2UpOwotCVdMX1RSQUNFKCJ3bF9pd19nZXRfd2lyZWxlc3Nfc3RhdHMgcGh5IG5vaXNlPSVkXG4iLCBwaHlfbm9pc2UpOwotCi0JbWVtc2V0KCZzY2JfdmFsLCAwLCBzaXplb2Yoc2NiX3ZhbF90KSk7Ci0JcmVzID0gZGV2X3dsY19pb2N0bChkZXYsIFdMQ19HRVRfUlNTSSwgJnNjYl92YWwsIHNpemVvZihzY2JfdmFsX3QpKTsKLQlpZiAocmVzKQotCQlnb3RvIGRvbmU7Ci0KLQlyc3NpID0gbGUzMl90b19jcHUoc2NiX3ZhbC52YWwpOwotCVdMX1RSQUNFKCJ3bF9pd19nZXRfd2lyZWxlc3Nfc3RhdHMgcnNzaT0lZFxuIiwgcnNzaSk7Ci0JaWYgKHJzc2kgPD0gV0xfSVdfUlNTSV9OT19TSUdOQUwpCi0JCXdzdGF0cy0+cXVhbC5xdWFsID0gMDsKLQllbHNlIGlmIChyc3NpIDw9IFdMX0lXX1JTU0lfVkVSWV9MT1cpCi0JCXdzdGF0cy0+cXVhbC5xdWFsID0gMTsKLQllbHNlIGlmIChyc3NpIDw9IFdMX0lXX1JTU0lfTE9XKQotCQl3c3RhdHMtPnF1YWwucXVhbCA9IDI7Ci0JZWxzZSBpZiAocnNzaSA8PSBXTF9JV19SU1NJX0dPT0QpCi0JCXdzdGF0cy0+cXVhbC5xdWFsID0gMzsKLQllbHNlIGlmIChyc3NpIDw9IFdMX0lXX1JTU0lfVkVSWV9HT09EKQotCQl3c3RhdHMtPnF1YWwucXVhbCA9IDQ7Ci0JZWxzZQotCQl3c3RhdHMtPnF1YWwucXVhbCA9IDU7Ci0KLQl3c3RhdHMtPnF1YWwubGV2ZWwgPSAweDEwMCArIHJzc2k7Ci0Jd3N0YXRzLT5xdWFsLm5vaXNlID0gMHgxMDAgKyBwaHlfbm9pc2U7Ci0jaWYgV0lSRUxFU1NfRVhUID4gMTgKLQl3c3RhdHMtPnF1YWwudXBkYXRlZCB8PSAoSVdfUVVBTF9BTExfVVBEQVRFRCB8IElXX1FVQUxfREJNKTsKLSNlbHNlCi0Jd3N0YXRzLT5xdWFsLnVwZGF0ZWQgfD0gNzsKLSNlbmRpZgotCi0jaWYgV0lSRUxFU1NfRVhUID4gMTEKLQlXTF9UUkFDRSgid2xfaXdfZ2V0X3dpcmVsZXNzX3N0YXRzIGNvdW50ZXJzPSV6dVxuIiwKLQkJIHNpemVvZihzdHJ1Y3Qgd2xfY250KSk7Ci0KLQltZW1zZXQoJmNudCwgMCwgc2l6ZW9mKHN0cnVjdCB3bF9jbnQpKTsKLQlyZXMgPQotCSAgICBkZXZfd2xjX2J1ZnZhcl9nZXQoZGV2LCAiY291bnRlcnMiLCAoY2hhciAqKSZjbnQsCi0JCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB3bF9jbnQpKTsKLQlpZiAocmVzKSB7Ci0JCVdMX0VSUk9SKCJ3bF9pd19nZXRfd2lyZWxlc3Nfc3RhdHMgY291bnRlcnMgZmFpbGVkIGVycm9yPSVkXG4iLAotCQkJIHJlcyk7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQljbnQudmVyc2lvbiA9IGxlMTZfdG9fY3B1KGNudC52ZXJzaW9uKTsKLQlpZiAoY250LnZlcnNpb24gIT0gV0xfQ05UX1RfVkVSU0lPTikgewotCQlXTF9UUkFDRSgiXHRJbmNvcnJlY3QgY291bnRlciB2ZXJzaW9uOiBleHBlY3RlZCAlZDsgZ290ICVkXG4iLAotCQkJIFdMX0NOVF9UX1ZFUlNJT04sIGNudC52ZXJzaW9uKTsKLQkJZ290byBkb25lOwotCX0KLQotCXdzdGF0cy0+ZGlzY2FyZC5ud2lkID0gMDsKLQl3c3RhdHMtPmRpc2NhcmQuY29kZSA9IGxlMzJfdG9fY3B1KGNudC5yeHVuZGVjKTsKLQl3c3RhdHMtPmRpc2NhcmQuZnJhZ21lbnQgPSBsZTMyX3RvX2NwdShjbnQucnhmcmFnZXJyKTsKLQl3c3RhdHMtPmRpc2NhcmQucmV0cmllcyA9IGxlMzJfdG9fY3B1KGNudC50eGZhaWwpOwotCXdzdGF0cy0+ZGlzY2FyZC5taXNjID0gbGUzMl90b19jcHUoY250LnJ4cnVudCkgKwotCQlsZTMyX3RvX2NwdShjbnQucnhnaWFudCk7Ci0Jd3N0YXRzLT5taXNzLmJlYWNvbiA9IDA7Ci0KLQlXTF9UUkFDRSgid2xfaXdfZ2V0X3dpcmVsZXNzX3N0YXRzIGNvdW50ZXJzIHR4ZnJhbWU9JWQgdHhieXRlPSVkXG4iLAotCQkgbGUzMl90b19jcHUoY250LnR4ZnJhbWUpLCBsZTMyX3RvX2NwdShjbnQudHhieXRlKSk7Ci0JV0xfVFJBQ0UoIndsX2l3X2dldF93aXJlbGVzc19zdGF0cyBjb3VudGVycyByeGZybXRvb2xvbmc9JWRcbiIsCi0JCSAgbGUzMl90b19jcHUoY250LnJ4ZnJtdG9vbG9uZykpOwotCVdMX1RSQUNFKCJ3bF9pd19nZXRfd2lyZWxlc3Nfc3RhdHMgY291bnRlcnMgcnhiYWRwbGNwPSVkXG4iLAotCQkgIGxlMzJfdG9fY3B1KGNudC5yeGJhZHBsY3ApKTsKLQlXTF9UUkFDRSgid2xfaXdfZ2V0X3dpcmVsZXNzX3N0YXRzIGNvdW50ZXJzIHJ4dW5kZWM9JWRcbiIsCi0JCSAgbGUzMl90b19jcHUoY250LnJ4dW5kZWMpKTsKLQlXTF9UUkFDRSgid2xfaXdfZ2V0X3dpcmVsZXNzX3N0YXRzIGNvdW50ZXJzIHJ4ZnJhZ2Vycj0lZFxuIiwKLQkJICBsZTMyX3RvX2NwdShjbnQucnhmcmFnZXJyKSk7Ci0JV0xfVFJBQ0UoIndsX2l3X2dldF93aXJlbGVzc19zdGF0cyBjb3VudGVycyB0eGZhaWw9JWRcbiIsCi0JCSAgbGUzMl90b19jcHUoY250LnR4ZmFpbCkpOwotCVdMX1RSQUNFKCJ3bF9pd19nZXRfd2lyZWxlc3Nfc3RhdHMgY291bnRlcnMgcnhydW50PSVkXG4iLAotCQkgIGxlMzJfdG9fY3B1KGNudC5yeHJ1bnQpKTsKLQlXTF9UUkFDRSgid2xfaXdfZ2V0X3dpcmVsZXNzX3N0YXRzIGNvdW50ZXJzIHJ4Z2lhbnQ9JWRcbiIsCi0JCSAgbGUzMl90b19jcHUoY250LnJ4Z2lhbnQpKTsKLSNlbmRpZgkJCQkvKiBXSVJFTEVTU19FWFQgPiAxMSAqLwotCi1kb25lOgotCXJldHVybiByZXM7Ci19Ci0KIGludCB3bF9pd19hdHRhY2goc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqZGhkcCkKIHsKIAlpbnQgcGFyYW1zX3NpemU7CkBAIC0zNjcyLDggKzM1NzQsMTAgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlpc2Nhbi0+aXNjYW5fZXhfcGFyYW1zX3AgPSBrbWFsbG9jKHBhcmFtc19zaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWlzY2FuLT5pc2Nhbl9leF9wYXJhbXNfcCkKKwlpZiAoIWlzY2FuLT5pc2Nhbl9leF9wYXJhbXNfcCkgeworCQlrZnJlZShpc2Nhbik7CiAJCXJldHVybiAtRU5PTUVNOworCX0KIAlpc2Nhbi0+aXNjYW5fZXhfcGFyYW1fc2l6ZSA9IHBhcmFtc19zaXplOwogCWlzY2FuLT5zeXNpb2NfdHNrID0gTlVMTDsKIApAQCAtMzc0MiwzICszNjQ2LDUwIEBACiAKIAlnX3NjYW4gPSBOVUxMOwogfQorCisjaWYgZGVmaW5lZChCQ01EQkcpCit2b2lkIG9zbF9hc3NlcnQoY2hhciAqZXhwLCBjaGFyICpmaWxlLCBpbnQgbGluZSkKK3sKKwljaGFyIHRlbXBidWZbMjU2XTsKKwljaGFyICpiYXNlbmFtZTsKKworCWJhc2VuYW1lID0gc3RycmNocihmaWxlLCAnLycpOworCS8qIHNraXAgdGhlICcvJyAqLworCWlmIChiYXNlbmFtZSkKKwkJYmFzZW5hbWUrKzsKKworCWlmICghYmFzZW5hbWUpCisJCWJhc2VuYW1lID0gZmlsZTsKKworCXNucHJpbnRmKHRlbXBidWYsIDI1NiwKKwkJICJhc3NlcnRpb24gXCIlc1wiIGZhaWxlZDogZmlsZSBcIiVzXCIsIGxpbmUgJWRcbiIsIGV4cCwKKwkJIGJhc2VuYW1lLCBsaW5lKTsKKworCS8qCisJICogUHJpbnQgYXNzZXJ0IG1lc3NhZ2UgYW5kIGdpdmUgaXQgdGltZSB0bworCSAqIGJlIHdyaXR0ZW4gdG8gL3Zhci9sb2cvbWVzc2FnZXMKKwkgKi8KKwlpZiAoIWluX2ludGVycnVwdCgpKSB7CisJCWNvbnN0IGludCBkZWxheSA9IDM7CisJCXByaW50ayhLRVJOX0VSUiAiJXMiLCB0ZW1wYnVmKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJwYW5pYyBpbiAlZCBzZWNvbmRzXG4iLCBkZWxheSk7CisJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCXNjaGVkdWxlX3RpbWVvdXQoZGVsYXkgKiBIWik7CisJfQorCisJc3dpdGNoIChnX2Fzc2VydF90eXBlKSB7CisJY2FzZSAwOgorCQlwYW5pYyhLRVJOX0VSUiAiJXMiLCB0ZW1wYnVmKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwcmludGsoS0VSTl9FUlIgIiVzIiwgdGVtcGJ1Zik7CisJCUJVRygpOworCQlicmVhazsKKwljYXNlIDI6CisJCXByaW50ayhLRVJOX0VSUiAiJXMiLCB0ZW1wYnVmKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorI2VuZGlmCQkJCS8qIGRlZmluZWQoQkNNREJHKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvTWFrZWZpbGUKaW5kZXggYzRhYWZlNS4uOGQ3NWZlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL01ha2VmaWxlCkBAIC0yNSw3ICsyNSw2IEBACiAJLURCQ01OVlJBTVIJCQkJXAogCS1JZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYyBcCiAJLUlkcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3BoeSBcCi0JLUlkcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwgXAogCS1JZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9pbmNsdWRlCiAKIEJSQ01TTUFDX09GSUxFUyA6PSBcCkBAIC0zOCwyNiArMzcsMjMgQEAKIAl3bGNfY2hhbm5lbC5vIFwKIAl3bGNfbWFpbi5vIFwKIAl3bGNfcGh5X3NoaW0ubyBcCisJd2xjX3BtdS5vIFwKIAl3bGNfcmF0ZS5vIFwKIAl3bGNfc3RmLm8gXAorCWFpdXRpbHMubyBcCiAJcGh5L3dsY19waHlfY21uLm8gXAogCXBoeS93bGNfcGh5X2xjbi5vIFwKIAlwaHkvd2xjX3BoeV9uLm8gXAogCXBoeS93bGNfcGh5dGJsX2xjbi5vIFwKIAlwaHkvd2xjX3BoeXRibF9uLm8gXAotCS4uL3V0aWwvYWl1dGlscy5vIFwKLQkuLi91dGlsL3NpdXRpbHMubyBcCi0JLi4vdXRpbC9iY211dGlscy5vIFwKLQkuLi91dGlsL2JjbXdpZmkubyBcCi0JLi4vdXRpbC9iY21vdHAubyBcCi0JLi4vdXRpbC9iY21zcm9tLm8gXAotCS4uL3V0aWwvaG5kZG1hLm8gXAotCS4uL3V0aWwvaG5kcG11Lm8gXAotCS4uL3V0aWwvbmljcGNpLm8gXAotCS4uL3V0aWwvcW1hdGgubyBcCi0JLi4vdXRpbC9udnJhbS9udnJhbV9yby5vCisJcGh5L3dsY19waHlfcW1hdGgubyBcCisJYmNtb3RwLm8gXAorCWJjbXNyb20ubyBcCisJaG5kZG1hLm8gXAorCW5pY3BjaS5vIFwKKwludnJhbS5vCiAKIE1PRFVMRVBGWCA6PSBicmNtc21hYwogCi1vYmotbQkrPSAkKE1PRFVMRVBGWCkubworb2JqLSQoQ09ORklHX0JSQ01TTUFDKQkrPSAkKE1PRFVMRVBGWCkubwogJChNT0RVTEVQRlgpLW9ianMJPSAkKEJSQ01TTUFDX09GSUxFUykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvYWl1dGlscy5jIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy9haXV0aWxzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYxMTg1ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvYWl1dGlscy5jCkBAIC0wLDAgKzEsMjA1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWQorICogU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGJjbWRlZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxiY211dGlscy5oPgorI2luY2x1ZGUgPGFpdXRpbHMuaD4KKyNpbmNsdWRlIDxobmRzb2MuaD4KKyNpbmNsdWRlIDxzYmNoaXBjLmg+CisjaW5jbHVkZSA8cGNpY2ZnLmg+CisjaW5jbHVkZSA8YmNtZGV2cy5oPgorCisvKiAqKioqKioqKioqIGZyb20gc2l1dGlscy5jICoqKioqKioqKioqICovCisjaW5jbHVkZSA8cGNpX2NvcmUuaD4KKyNpbmNsdWRlIDxwY2llX2NvcmUuaD4KKyNpbmNsdWRlIDxuaWNwY2kuaD4KKyNpbmNsdWRlIDxiY21udnJhbS5oPgorI2luY2x1ZGUgPGJjbXNyb20uaD4KKyNpbmNsdWRlIDx3bGNfcG11Lmg+CisKKyNkZWZpbmUgQkNNNDcxNjJfRE1QKCkgKChzaWgtPmNoaXAgPT0gQkNNNDcxNjJfQ0hJUF9JRCkgJiYgXAorCQkoc2loLT5jaGlwcmV2ID09IDApICYmIFwKKwkJKHNpaS0+Y29yZWlkW3NpaS0+Y3VyaWR4XSA9PSBNSVBTNzRLX0NPUkVfSUQpKQorCisvKiBFUk9NIHBhcnNpbmcgKi8KKworc3RhdGljIHUzMgorZ2V0X2Vyb21fZW50KHNpX3QgKnNpaCwgdTMyICoqZXJvbXB0ciwgdTMyIG1hc2ssIHUzMiBtYXRjaCkKK3sKKwl1MzIgZW50OworCXVpbnQgaW52ID0gMCwgbm9tID0gMDsKKworCXdoaWxlICh0cnVlKSB7CisJCWVudCA9IFJfUkVHKCplcm9tcHRyKTsKKwkJKCplcm9tcHRyKSsrOworCisJCWlmIChtYXNrID09IDApCisJCQlicmVhazsKKworCQlpZiAoKGVudCAmIEVSX1ZBTElEKSA9PSAwKSB7CisJCQlpbnYrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGVudCA9PSAoRVJfRU5EIHwgRVJfVkFMSUQpKQorCQkJYnJlYWs7CisKKwkJaWYgKChlbnQgJiBtYXNrKSA9PSBtYXRjaCkKKwkJCWJyZWFrOworCisJCW5vbSsrOworCX0KKworCVNJX1ZNU0coKCIlczogUmV0dXJuaW5nIGVudCAweCUwOHhcbiIsIF9fZnVuY19fLCBlbnQpKTsKKwlpZiAoaW52ICsgbm9tKSB7CisJCVNJX1ZNU0coKCIgIGFmdGVyICVkIGludmFsaWQgYW5kICVkIG5vbi1tYXRjaGluZyBlbnRyaWVzXG4iLAorCQkJIGludiwgbm9tKSk7CisJfQorCXJldHVybiBlbnQ7Cit9CisKK3N0YXRpYyB1MzIKK2dldF9hc2Qoc2lfdCAqc2loLCB1MzIgKiplcm9tcHRyLCB1aW50IHNwLCB1aW50IGFkLCB1aW50IHN0LAorCXUzMiAqYWRkcmwsIHUzMiAqYWRkcmgsIHUzMiAqc2l6ZWwsIHUzMiAqc2l6ZWgpCit7CisJdTMyIGFzZCwgc3osIHN6ZDsKKworCWFzZCA9IGdldF9lcm9tX2VudChzaWgsIGVyb21wdHIsIEVSX1ZBTElELCBFUl9WQUxJRCk7CisJaWYgKCgoYXNkICYgRVJfVEFHMSkgIT0gRVJfQUREKSB8fAorCSAgICAoKChhc2QgJiBBRF9TUF9NQVNLKSA+PiBBRF9TUF9TSElGVCkgIT0gc3ApIHx8CisJICAgICgoYXNkICYgQURfU1RfTUFTSykgIT0gc3QpKSB7CisJCS8qIFRoaXMgaXMgbm90IHdoYXQgd2Ugd2FudCwgInB1c2giIGl0IGJhY2sgKi8KKwkJKCplcm9tcHRyKS0tOworCQlyZXR1cm4gMDsKKwl9CisJKmFkZHJsID0gYXNkICYgQURfQUREUl9NQVNLOworCWlmIChhc2QgJiBBRF9BRzMyKQorCQkqYWRkcmggPSBnZXRfZXJvbV9lbnQoc2loLCBlcm9tcHRyLCAwLCAwKTsKKwllbHNlCisJCSphZGRyaCA9IDA7CisJKnNpemVoID0gMDsKKwlzeiA9IGFzZCAmIEFEX1NaX01BU0s7CisJaWYgKHN6ID09IEFEX1NaX1NaRCkgeworCQlzemQgPSBnZXRfZXJvbV9lbnQoc2loLCBlcm9tcHRyLCAwLCAwKTsKKwkJKnNpemVsID0gc3pkICYgU0RfU1pfTUFTSzsKKwkJaWYgKHN6ZCAmIFNEX1NHMzIpCisJCQkqc2l6ZWggPSBnZXRfZXJvbV9lbnQoc2loLCBlcm9tcHRyLCAwLCAwKTsKKwl9IGVsc2UKKwkJKnNpemVsID0gQURfU1pfQkFTRSA8PCAoc3ogPj4gQURfU1pfU0hJRlQpOworCisJU0lfVk1TRygoIiAgU1AgJWQsIGFkICVkOiBzdCA9ICVkLCAweCUwOHhfMHglMDh4IEAgMHglMDh4XzB4JTA4eFxuIiwKKwkJIHNwLCBhZCwgc3QsICpzaXplaCwgKnNpemVsLCAqYWRkcmgsICphZGRybCkpOworCisJcmV0dXJuIGFzZDsKK30KKworc3RhdGljIHZvaWQgYWlfaHdmaXh1cChzaV9pbmZvX3QgKnNpaSkKK3sKK30KKworLyogcGFyc2UgdGhlIGVudW1lcmF0aW9uIHJvbSB0byBpZGVudGlmeSBhbGwgY29yZXMgKi8KK3ZvaWQgYWlfc2NhbihzaV90ICpzaWgsIHZvaWQgKnJlZ3MsIHVpbnQgZGV2aWQpCit7CisJc2lfaW5mb190ICpzaWkgPSBTSV9JTkZPKHNpaCk7CisJY2hpcGNyZWdzX3QgKmNjID0gKGNoaXBjcmVnc190ICopIHJlZ3M7CisJdTMyIGVyb21iYXNlLCAqZXJvbXB0ciwgKmVyb21saW07CisKKwllcm9tYmFzZSA9IFJfUkVHKCZjYy0+ZXJvbXB0cik7CisKKwlzd2l0Y2ggKHNpaC0+YnVzdHlwZSkgeworCWNhc2UgU0lfQlVTOgorCQllcm9tcHRyID0gKHUzMiAqKSBSRUdfTUFQKGVyb21iYXNlLCBTSV9DT1JFX1NJWkUpOworCQlicmVhazsKKworCWNhc2UgUENJX0JVUzoKKwkJLyogU2V0IHdyYXBwZXJzIGFkZHJlc3MgKi8KKwkJc2lpLT5jdXJ3cmFwID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpcmVncyArIFNJX0NPUkVfU0laRSk7CisKKwkJLyogTm93IHBvaW50IHRoZSB3aW5kb3cgYXQgdGhlIGVyb20gKi8KKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChzaWktPnBidXMsIFBDSV9CQVIwX1dJTiwgZXJvbWJhc2UpOworCQllcm9tcHRyID0gcmVnczsKKwkJYnJlYWs7CisKKwljYXNlIFNQSV9CVVM6CisJY2FzZSBTRElPX0JVUzoKKwkJZXJvbXB0ciA9ICh1MzIgKikodW5zaWduZWQgbG9uZyllcm9tYmFzZTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlTSV9FUlJPUigoIkRvbid0IGtub3cgaG93IHRvIGRvIEFYSSBlbnVtZXJ0aW9uIG9uIGJ1cyAlZFxuIiwKKwkJCSAgc2loLT5idXN0eXBlKSk7CisJCXJldHVybjsKKwl9CisJZXJvbWxpbSA9IGVyb21wdHIgKyAoRVJfUkVNQVBDT05UUk9MIC8gc2l6ZW9mKHUzMikpOworCisJU0lfVk1TRygoImFpX3NjYW46IHJlZ3MgPSAweCVwLCBlcm9tYmFzZSA9IDB4JTA4eCwgZXJvbXB0ciA9IDB4JXAsIGVyb21saW0gPSAweCVwXG4iLCByZWdzLCBlcm9tYmFzZSwgZXJvbXB0ciwgZXJvbWxpbSkpOworCXdoaWxlIChlcm9tcHRyIDwgZXJvbWxpbSkgeworCQl1MzIgY2lhLCBjaWIsIGNpZCwgbWZnLCBjcmV2LCBubXcsIG5zdywgbm1wLCBuc3A7CisJCXUzMiBtcGQsIGFzZCwgYWRkcmwsIGFkZHJoLCBzaXplbCwgc2l6ZWg7CisJCXUzMiAqYmFzZTsKKwkJdWludCBpLCBqLCBpZHg7CisJCWJvb2wgYnI7CisKKwkJYnIgPSBmYWxzZTsKKworCQkvKiBHcm9rIGEgY29tcG9uZW50ICovCisJCWNpYSA9IGdldF9lcm9tX2VudChzaWgsICZlcm9tcHRyLCBFUl9UQUcsIEVSX0NJKTsKKwkJaWYgKGNpYSA9PSAoRVJfRU5EIHwgRVJfVkFMSUQpKSB7CisJCQlTSV9WTVNHKCgiRm91bmQgRU5EIG9mIGVyb20gYWZ0ZXIgJWQgY29yZXNcbiIsCisJCQkJIHNpaS0+bnVtY29yZXMpKTsKKwkJCWFpX2h3Zml4dXAoc2lpKTsKKwkJCXJldHVybjsKKwkJfQorCQliYXNlID0gZXJvbXB0ciAtIDE7CisJCWNpYiA9IGdldF9lcm9tX2VudChzaWgsICZlcm9tcHRyLCAwLCAwKTsKKworCQlpZiAoKGNpYiAmIEVSX1RBRykgIT0gRVJfQ0kpIHsKKwkJCVNJX0VSUk9SKCgiQ0lBIG5vdCBmb2xsb3dlZCBieSBDSUJcbiIpKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKworCQljaWQgPSAoY2lhICYgQ0lBX0NJRF9NQVNLKSA+PiBDSUFfQ0lEX1NISUZUOworCQltZmcgPSAoY2lhICYgQ0lBX01GR19NQVNLKSA+PiBDSUFfTUZHX1NISUZUOworCQljcmV2ID0gKGNpYiAmIENJQl9SRVZfTUFTSykgPj4gQ0lCX1JFVl9TSElGVDsKKwkJbm13ID0gKGNpYiAmIENJQl9OTVdfTUFTSykgPj4gQ0lCX05NV19TSElGVDsKKwkJbnN3ID0gKGNpYiAmIENJQl9OU1dfTUFTSykgPj4gQ0lCX05TV19TSElGVDsKKwkJbm1wID0gKGNpYiAmIENJQl9OTVBfTUFTSykgPj4gQ0lCX05NUF9TSElGVDsKKwkJbnNwID0gKGNpYiAmIENJQl9OU1BfTUFTSykgPj4gQ0lCX05TUF9TSElGVDsKKworCQlTSV9WTVNHKCgiRm91bmQgY29tcG9uZW50IDB4JTA0eC8weCUwNHggcmV2ICVkIGF0IGVyb20gYWRkciAweCVwLCB3aXRoIG5tdyA9ICVkLCAiICJuc3cgPSAlZCwgbm1wID0gJWQgJiBuc3AgPSAlZFxuIiwgbWZnLCBjaWQsIGNyZXYsIGJhc2UsIG5tdywgbnN3LCBubXAsIG5zcCkpOworCisJCWlmICgoKG1mZyA9PSBNRkdJRF9BUk0pICYmIChjaWQgPT0gREVGX0FJX0NPTVApKSB8fCAobnNwID09IDApKQorCQkJY29udGludWU7CisJCWlmICgobm13ICsgbnN3ID09IDApKSB7CisJCQkvKiBBIGNvbXBvbmVudCB3aGljaCBpcyBub3QgYSBjb3JlICovCisJCQlpZiAoY2lkID09IE9PQl9ST1VURVJfQ09SRV9JRCkgeworCQkJCWFzZCA9IGdldF9hc2Qoc2loLCAmZXJvbXB0ciwgMCwgMCwgQURfU1RfU0xBVkUsCisJCQkJCSAgICAgICZhZGRybCwgJmFkZHJoLCAmc2l6ZWwsICZzaXplaCk7CisJCQkJaWYgKGFzZCAhPSAwKSB7CisJCQkJCXNpaS0+b29iX3JvdXRlciA9IGFkZHJsOworCQkJCX0KKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWR4ID0gc2lpLT5udW1jb3JlczsKKy8qCQlzaWktPmVyb21wdHJbaWR4XSA9IGJhc2U7ICovCisJCXNpaS0+Y2lhW2lkeF0gPSBjaWE7CisJCXNpaS0+Y2liW2lkeF0gPSBjaWI7CisJCXNpaS0+Y29yZWlkW2lkeF0gPSBjaWQ7CisKKwkJZm9yIChpID0gMDsgaSA8IG5tcDsgaSsrKSB7CisJCQltcGQgPSBnZXRfZXJvbV9lbnQoc2loLCAmZXJvbXB0ciwgRVJfVkFMSUQsIEVSX1ZBTElEKTsKKwkJCWlmICgobXBkICYgRVJfVEFHKSAhPSBFUl9NUCkgeworCQkJCVNJX0VSUk9SKCgiTm90IGVub3VnaCBNUCBlbnRyaWVzIGZvciBjb21wb25lbnQgMHgleFxuIiwgY2lkKSk7CisJCQkJZ290byBlcnJvcjsKKwkJCX0KKwkJCVNJX1ZNU0coKCIgIE1hc3RlciBwb3J0ICVkLCBtcDogJWQgaWQ6ICVkXG4iLCBpLAorCQkJCSAobXBkICYgTVBEX01QX01BU0spID4+IE1QRF9NUF9TSElGVCwKKwkJCQkgKG1wZCAmIE1QRF9NVUlfTUFTSykgPj4gTVBEX01VSV9TSElGVCkpOworCQl9CisKKwkJLyogRmlyc3QgU2xhdmUgQWRkcmVzcyBEZXNjcmlwdG9yIHNob3VsZCBiZSBwb3J0IDA6CisJCSAqIHRoZSBtYWluIHJlZ2lzdGVyIHNwYWNlIGZvciB0aGUgY29yZQorCQkgKi8KKwkJYXNkID0KKwkJICAgIGdldF9hc2Qoc2loLCAmZXJvbXB0ciwgMCwgMCwgQURfU1RfU0xBVkUsICZhZGRybCwgJmFkZHJoLAorCQkJICAgICZzaXplbCwgJnNpemVoKTsKKwkJaWYgKGFzZCA9PSAwKSB7CisJCQkvKiBUcnkgYWdhaW4gdG8gc2VlIGlmIGl0IGlzIGEgYnJpZGdlICovCisJCQlhc2QgPQorCQkJICAgIGdldF9hc2Qoc2loLCAmZXJvbXB0ciwgMCwgMCwgQURfU1RfQlJJREdFLCAmYWRkcmwsCisJCQkJICAgICZhZGRyaCwgJnNpemVsLCAmc2l6ZWgpOworCQkJaWYgKGFzZCAhPSAwKQorCQkJCWJyID0gdHJ1ZTsKKwkJCWVsc2UgaWYgKChhZGRyaCAhPSAwKSB8fCAoc2l6ZWggIT0gMCkKKwkJCQkgfHwgKHNpemVsICE9IFNJX0NPUkVfU0laRSkpIHsKKwkJCQlTSV9FUlJPUigoIkZpcnN0IFNsYXZlIEFTRCBmb3IgY29yZSAweCUwNHggbWFsZm9ybWVkICIgIigweCUwOHgpXG4iLCBjaWQsIGFzZCkpOworCQkJCWdvdG8gZXJyb3I7CisJCQl9CisJCX0KKwkJc2lpLT5jb3Jlc2JhW2lkeF0gPSBhZGRybDsKKwkJc2lpLT5jb3Jlc2JhX3NpemVbaWR4XSA9IHNpemVsOworCQkvKiBHZXQgYW55IG1vcmUgQVNEcyBpbiBwb3J0IDAgKi8KKwkJaiA9IDE7CisJCWRvIHsKKwkJCWFzZCA9CisJCQkgICAgZ2V0X2FzZChzaWgsICZlcm9tcHRyLCAwLCBqLCBBRF9TVF9TTEFWRSwgJmFkZHJsLAorCQkJCSAgICAmYWRkcmgsICZzaXplbCwgJnNpemVoKTsKKwkJCWlmICgoYXNkICE9IDApICYmIChqID09IDEpICYmIChzaXplbCA9PSBTSV9DT1JFX1NJWkUpKSB7CisJCQkJc2lpLT5jb3Jlc2JhMltpZHhdID0gYWRkcmw7CisJCQkJc2lpLT5jb3Jlc2JhMl9zaXplW2lkeF0gPSBzaXplbDsKKwkJCX0KKwkJCWorKzsKKwkJfSB3aGlsZSAoYXNkICE9IDApOworCisJCS8qIEdvIHRocm91Z2ggdGhlIEFTRHMgZm9yIG90aGVyIHNsYXZlIHBvcnRzICovCisJCWZvciAoaSA9IDE7IGkgPCBuc3A7IGkrKykgeworCQkJaiA9IDA7CisJCQlkbyB7CisJCQkJYXNkID0KKwkJCQkgICAgZ2V0X2FzZChzaWgsICZlcm9tcHRyLCBpLCBqKyssIEFEX1NUX1NMQVZFLAorCQkJCQkgICAgJmFkZHJsLCAmYWRkcmgsICZzaXplbCwgJnNpemVoKTsKKwkJCX0gd2hpbGUgKGFzZCAhPSAwKTsKKwkJCWlmIChqID09IDApIHsKKwkJCQlTSV9FUlJPUigoIiBTUCAlZCBoYXMgbm8gYWRkcmVzcyBkZXNjcmlwdG9yc1xuIiwKKwkJCQkJICBpKSk7CisJCQkJZ290byBlcnJvcjsKKwkJCX0KKwkJfQorCisJCS8qIE5vdyBnZXQgbWFzdGVyIHdyYXBwZXJzICovCisJCWZvciAoaSA9IDA7IGkgPCBubXc7IGkrKykgeworCQkJYXNkID0KKwkJCSAgICBnZXRfYXNkKHNpaCwgJmVyb21wdHIsIGksIDAsIEFEX1NUX01XUkFQLCAmYWRkcmwsCisJCQkJICAgICZhZGRyaCwgJnNpemVsLCAmc2l6ZWgpOworCQkJaWYgKGFzZCA9PSAwKSB7CisJCQkJU0lfRVJST1IoKCJNaXNzaW5nIGRlc2NyaXB0b3IgZm9yIE1XICVkXG4iLCBpKSk7CisJCQkJZ290byBlcnJvcjsKKwkJCX0KKwkJCWlmICgoc2l6ZWggIT0gMCkgfHwgKHNpemVsICE9IFNJX0NPUkVfU0laRSkpIHsKKwkJCQlTSV9FUlJPUigoIk1hc3RlciB3cmFwcGVyICVkIGlzIG5vdCA0S0JcbiIsIGkpKTsKKwkJCQlnb3RvIGVycm9yOworCQkJfQorCQkJaWYgKGkgPT0gMCkKKwkJCQlzaWktPndyYXBiYVtpZHhdID0gYWRkcmw7CisJCX0KKworCQkvKiBBbmQgZmluYWxseSBzbGF2ZSB3cmFwcGVycyAqLworCQlmb3IgKGkgPSAwOyBpIDwgbnN3OyBpKyspIHsKKwkJCXVpbnQgZndwID0gKG5zcCA9PSAxKSA/IDAgOiAxOworCQkJYXNkID0KKwkJCSAgICBnZXRfYXNkKHNpaCwgJmVyb21wdHIsIGZ3cCArIGksIDAsIEFEX1NUX1NXUkFQLAorCQkJCSAgICAmYWRkcmwsICZhZGRyaCwgJnNpemVsLCAmc2l6ZWgpOworCQkJaWYgKGFzZCA9PSAwKSB7CisJCQkJU0lfRVJST1IoKCJNaXNzaW5nIGRlc2NyaXB0b3IgZm9yIFNXICVkXG4iLCBpKSk7CisJCQkJZ290byBlcnJvcjsKKwkJCX0KKwkJCWlmICgoc2l6ZWggIT0gMCkgfHwgKHNpemVsICE9IFNJX0NPUkVfU0laRSkpIHsKKwkJCQlTSV9FUlJPUigoIlNsYXZlIHdyYXBwZXIgJWQgaXMgbm90IDRLQlxuIiwgaSkpOworCQkJCWdvdG8gZXJyb3I7CisJCQl9CisJCQlpZiAoKG5tdyA9PSAwKSAmJiAoaSA9PSAwKSkKKwkJCQlzaWktPndyYXBiYVtpZHhdID0gYWRkcmw7CisJCX0KKworCQkvKiBEb24ndCByZWNvcmQgYnJpZGdlcyAqLworCQlpZiAoYnIpCisJCQljb250aW51ZTsKKworCQkvKiBEb25lIHdpdGggY29yZSAqLworCQlzaWktPm51bWNvcmVzKys7CisJfQorCisJU0lfRVJST1IoKCJSZWFjaGVkIGVuZCBvZiBlcm9tIHdpdGhvdXQgZmluZGluZyBFTkQiKSk7CisKKyBlcnJvcjoKKwlzaWktPm51bWNvcmVzID0gMDsKKwlyZXR1cm47Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gY2hhbmdlcyB0aGUgbG9naWNhbCAiZm9jdXMiIHRvIHRoZSBpbmRpY2F0ZWQgY29yZS4KKyAqIFJldHVybiB0aGUgY3VycmVudCBjb3JlJ3MgdmlydHVhbCBhZGRyZXNzLgorICovCit2b2lkICphaV9zZXRjb3JlaWR4KHNpX3QgKnNpaCwgdWludCBjb3JlaWR4KQoreworCXNpX2luZm9fdCAqc2lpID0gU0lfSU5GTyhzaWgpOworCXUzMiBhZGRyID0gc2lpLT5jb3Jlc2JhW2NvcmVpZHhdOworCXUzMiB3cmFwID0gc2lpLT53cmFwYmFbY29yZWlkeF07CisJdm9pZCAqcmVnczsKKworCWlmIChjb3JlaWR4ID49IHNpaS0+bnVtY29yZXMpCisJCXJldHVybiBOVUxMOworCisJc3dpdGNoIChzaWgtPmJ1c3R5cGUpIHsKKwljYXNlIFNJX0JVUzoKKwkJLyogbWFwIG5ldyBvbmUgKi8KKwkJaWYgKCFzaWktPnJlZ3NbY29yZWlkeF0pIHsKKwkJCXNpaS0+cmVnc1tjb3JlaWR4XSA9IFJFR19NQVAoYWRkciwgU0lfQ09SRV9TSVpFKTsKKwkJfQorCQlzaWktPmN1cm1hcCA9IHJlZ3MgPSBzaWktPnJlZ3NbY29yZWlkeF07CisJCWlmICghc2lpLT53cmFwcGVyc1tjb3JlaWR4XSkgeworCQkJc2lpLT53cmFwcGVyc1tjb3JlaWR4XSA9IFJFR19NQVAod3JhcCwgU0lfQ09SRV9TSVpFKTsKKwkJfQorCQlzaWktPmN1cndyYXAgPSBzaWktPndyYXBwZXJzW2NvcmVpZHhdOworCQlicmVhazsKKworCWNhc2UgUENJX0JVUzoKKwkJLyogcG9pbnQgYmFyMCB3aW5kb3cgKi8KKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChzaWktPnBidXMsIFBDSV9CQVIwX1dJTiwgYWRkcik7CisJCXJlZ3MgPSBzaWktPmN1cm1hcDsKKwkJLyogcG9pbnQgYmFyMCAybmQgNEtCIHdpbmRvdyAqLworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHNpaS0+cGJ1cywgUENJX0JBUjBfV0lOMiwgd3JhcCk7CisJCWJyZWFrOworCisJY2FzZSBTUElfQlVTOgorCWNhc2UgU0RJT19CVVM6CisJCXNpaS0+Y3VybWFwID0gcmVncyA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpYWRkcjsKKwkJc2lpLT5jdXJ3cmFwID0gKHZvaWQgKikodW5zaWduZWQgbG9uZyl3cmFwOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJlZ3MgPSBOVUxMOworCQlicmVhazsKKwl9CisKKwlzaWktPmN1cm1hcCA9IHJlZ3M7CisJc2lpLT5jdXJpZHggPSBjb3JlaWR4OworCisJcmV0dXJuIHJlZ3M7Cit9CisKKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGFkZHJlc3Mgc3BhY2VzIGluIGN1cnJlbnQgY29yZSAqLworaW50IGFpX251bWFkZHJzcGFjZXMoc2lfdCAqc2loKQoreworCXJldHVybiAyOworfQorCisvKiBSZXR1cm4gdGhlIGFkZHJlc3Mgb2YgdGhlIG50aCBhZGRyZXNzIHNwYWNlIGluIHRoZSBjdXJyZW50IGNvcmUgKi8KK3UzMiBhaV9hZGRyc3BhY2Uoc2lfdCAqc2loLCB1aW50IGFzaWR4KQoreworCXNpX2luZm9fdCAqc2lpOworCXVpbnQgY2lkeDsKKworCXNpaSA9IFNJX0lORk8oc2loKTsKKwljaWR4ID0gc2lpLT5jdXJpZHg7CisKKwlpZiAoYXNpZHggPT0gMCkKKwkJcmV0dXJuIHNpaS0+Y29yZXNiYVtjaWR4XTsKKwllbHNlIGlmIChhc2lkeCA9PSAxKQorCQlyZXR1cm4gc2lpLT5jb3Jlc2JhMltjaWR4XTsKKwllbHNlIHsKKwkJU0lfRVJST1IoKCIlczogTmVlZCB0byBwYXJzZSB0aGUgZXJvbSBhZ2FpbiB0byBmaW5kIGFkZHIgc3BhY2UgJWRcbiIsIF9fZnVuY19fLCBhc2lkeCkpOworCQlyZXR1cm4gMDsKKwl9Cit9CisKKy8qIFJldHVybiB0aGUgc2l6ZSBvZiB0aGUgbnRoIGFkZHJlc3Mgc3BhY2UgaW4gdGhlIGN1cnJlbnQgY29yZSAqLwordTMyIGFpX2FkZHJzcGFjZXNpemUoc2lfdCAqc2loLCB1aW50IGFzaWR4KQoreworCXNpX2luZm9fdCAqc2lpOworCXVpbnQgY2lkeDsKKworCXNpaSA9IFNJX0lORk8oc2loKTsKKwljaWR4ID0gc2lpLT5jdXJpZHg7CisKKwlpZiAoYXNpZHggPT0gMCkKKwkJcmV0dXJuIHNpaS0+Y29yZXNiYV9zaXplW2NpZHhdOworCWVsc2UgaWYgKGFzaWR4ID09IDEpCisJCXJldHVybiBzaWktPmNvcmVzYmEyX3NpemVbY2lkeF07CisJZWxzZSB7CisJCVNJX0VSUk9SKCgiJXM6IE5lZWQgdG8gcGFyc2UgdGhlIGVyb20gYWdhaW4gdG8gZmluZCBhZGRyIHNwYWNlICVkXG4iLCBfX2Z1bmNfXywgYXNpZHgpKTsKKwkJcmV0dXJuIDA7CisJfQorfQorCit1aW50IGFpX2ZsYWcoc2lfdCAqc2loKQoreworCXNpX2luZm9fdCAqc2lpOworCWFpZG1wX3QgKmFpOworCisJc2lpID0gU0lfSU5GTyhzaWgpOworCWlmIChCQ000NzE2Ml9ETVAoKSkgeworCQlTSV9FUlJPUigoIiVzOiBBdHRlbXB0aW5nIHRvIHJlYWQgTUlQUyBETVAgcmVnaXN0ZXJzIG9uIDQ3MTYyYTAiLCBfX2Z1bmNfXykpOworCQlyZXR1cm4gc2lpLT5jdXJpZHg7CisJfQorCWFpID0gc2lpLT5jdXJ3cmFwOworCisJcmV0dXJuIFJfUkVHKCZhaS0+b29ic2Vsb3V0YTMwKSAmIDB4MWY7Cit9CisKK3ZvaWQgYWlfc2V0aW50KHNpX3QgKnNpaCwgaW50IHNpZmxhZykKK3sKK30KKwordWludCBhaV9jb3JldmVuZG9yKHNpX3QgKnNpaCkKK3sKKwlzaV9pbmZvX3QgKnNpaTsKKwl1MzIgY2lhOworCisJc2lpID0gU0lfSU5GTyhzaWgpOworCWNpYSA9IHNpaS0+Y2lhW3NpaS0+Y3VyaWR4XTsKKwlyZXR1cm4gKGNpYSAmIENJQV9NRkdfTUFTSykgPj4gQ0lBX01GR19TSElGVDsKK30KKwordWludCBhaV9jb3JlcmV2KHNpX3QgKnNpaCkKK3sKKwlzaV9pbmZvX3QgKnNpaTsKKwl1MzIgY2liOworCisJc2lpID0gU0lfSU5GTyhzaWgpOworCWNpYiA9IHNpaS0+Y2liW3NpaS0+Y3VyaWR4XTsKKwlyZXR1cm4gKGNpYiAmIENJQl9SRVZfTUFTSykgPj4gQ0lCX1JFVl9TSElGVDsKK30KKworYm9vbCBhaV9pc2NvcmV1cChzaV90ICpzaWgpCit7CisJc2lfaW5mb190ICpzaWk7CisJYWlkbXBfdCAqYWk7CisKKwlzaWkgPSBTSV9JTkZPKHNpaCk7CisJYWkgPSBzaWktPmN1cndyYXA7CisKKwlyZXR1cm4gKCgoUl9SRUcoJmFpLT5pb2N0cmwpICYgKFNJQ0ZfRkdDIHwgU0lDRl9DTE9DS19FTikpID09CisJCSBTSUNGX0NMT0NLX0VOKQorCQkmJiAoKFJfUkVHKCZhaS0+cmVzZXRjdHJsKSAmIEFJUkNfUkVTRVQpID09IDApKTsKK30KKwordm9pZCBhaV9jb3JlX2NmbGFnc193byhzaV90ICpzaWgsIHUzMiBtYXNrLCB1MzIgdmFsKQoreworCXNpX2luZm9fdCAqc2lpOworCWFpZG1wX3QgKmFpOworCXUzMiB3OworCisJc2lpID0gU0lfSU5GTyhzaWgpOworCisJaWYgKEJDTTQ3MTYyX0RNUCgpKSB7CisJCVNJX0VSUk9SKCgiJXM6IEFjY2Vzc2luZyBNSVBTIERNUCByZWdpc3RlciAoaW9jdHJsKSBvbiA0NzE2MmEwIiwKKwkJCSAgX19mdW5jX18pKTsKKwkJcmV0dXJuOworCX0KKworCWFpID0gc2lpLT5jdXJ3cmFwOworCisJaWYgKG1hc2sgfHwgdmFsKSB7CisJCXcgPSAoKFJfUkVHKCZhaS0+aW9jdHJsKSAmIH5tYXNrKSB8IHZhbCk7CisJCVdfUkVHKCZhaS0+aW9jdHJsLCB3KTsKKwl9Cit9CisKK3UzMiBhaV9jb3JlX2NmbGFncyhzaV90ICpzaWgsIHUzMiBtYXNrLCB1MzIgdmFsKQoreworCXNpX2luZm9fdCAqc2lpOworCWFpZG1wX3QgKmFpOworCXUzMiB3OworCisJc2lpID0gU0lfSU5GTyhzaWgpOworCWlmIChCQ000NzE2Ml9ETVAoKSkgeworCQlTSV9FUlJPUigoIiVzOiBBY2Nlc3NpbmcgTUlQUyBETVAgcmVnaXN0ZXIgKGlvY3RybCkgb24gNDcxNjJhMCIsCisJCQkgIF9fZnVuY19fKSk7CisJCXJldHVybiAwOworCX0KKworCWFpID0gc2lpLT5jdXJ3cmFwOworCisJaWYgKG1hc2sgfHwgdmFsKSB7CisJCXcgPSAoKFJfUkVHKCZhaS0+aW9jdHJsKSAmIH5tYXNrKSB8IHZhbCk7CisJCVdfUkVHKCZhaS0+aW9jdHJsLCB3KTsKKwl9CisKKwlyZXR1cm4gUl9SRUcoJmFpLT5pb2N0cmwpOworfQorCit1MzIgYWlfY29yZV9zZmxhZ3Moc2lfdCAqc2loLCB1MzIgbWFzaywgdTMyIHZhbCkKK3sKKwlzaV9pbmZvX3QgKnNpaTsKKwlhaWRtcF90ICphaTsKKwl1MzIgdzsKKworCXNpaSA9IFNJX0lORk8oc2loKTsKKwlpZiAoQkNNNDcxNjJfRE1QKCkpIHsKKwkJU0lfRVJST1IoKCIlczogQWNjZXNzaW5nIE1JUFMgRE1QIHJlZ2lzdGVyIChpb3N0YXR1cykgb24gNDcxNjJhMCIsIF9fZnVuY19fKSk7CisJCXJldHVybiAwOworCX0KKworCWFpID0gc2lpLT5jdXJ3cmFwOworCisJaWYgKG1hc2sgfHwgdmFsKSB7CisJCXcgPSAoKFJfUkVHKCZhaS0+aW9zdGF0dXMpICYgfm1hc2spIHwgdmFsKTsKKwkJV19SRUcoJmFpLT5pb3N0YXR1cywgdyk7CisJfQorCisJcmV0dXJuIFJfUkVHKCZhaS0+aW9zdGF0dXMpOworfQorCisvKiAqKioqKioqKioqKioqKiogZnJvbSBzaXV0aWxzLmMgKioqKioqKioqKioqKiogKi8KKy8qIGxvY2FsIHByb3RvdHlwZXMgKi8KK3N0YXRpYyBzaV9pbmZvX3QgKmFpX2RvYXR0YWNoKHNpX2luZm9fdCAqc2lpLCB1aW50IGRldmlkLCB2b2lkICpyZWdzLAorCQkJICAgICAgdWludCBidXN0eXBlLCB2b2lkICpzZGgsIGNoYXIgKip2YXJzLAorCQkJICAgICAgdWludCAqdmFyc3opOworc3RhdGljIGJvb2wgYWlfYnVzY29yZV9wcmVwKHNpX2luZm9fdCAqc2lpLCB1aW50IGJ1c3R5cGUsIHVpbnQgZGV2aWQsCisJCQkgICAgdm9pZCAqc2RoKTsKK3N0YXRpYyBib29sIGFpX2J1c2NvcmVfc2V0dXAoc2lfaW5mb190ICpzaWksIGNoaXBjcmVnc190ICpjYywgdWludCBidXN0eXBlLAorCQkJICAgICB1MzIgc2F2ZXdpbiwgdWludCAqb3JpZ2lkeCwgdm9pZCAqcmVncyk7CitzdGF0aWMgdm9pZCBhaV9udnJhbV9wcm9jZXNzKHNpX2luZm9fdCAqc2lpLCBjaGFyICpwdmFycyk7CisKKy8qIGRldiBwYXRoIGNvbmNhdGVuYXRpb24gdXRpbCAqLworc3RhdGljIGNoYXIgKmFpX2RldnBhdGh2YXIoc2lfdCAqc2loLCBjaGFyICp2YXIsIGludCBsZW4sIGNvbnN0IGNoYXIgKm5hbWUpOworc3RhdGljIGJvb2wgX2FpX2Nsa2N0bF9jYyhzaV9pbmZvX3QgKnNpaSwgdWludCBtb2RlKTsKK3N0YXRpYyBib29sIGFpX2lzcGNpZShzaV9pbmZvX3QgKnNpaSk7CisKKy8qIGdsb2JhbCB2YXJpYWJsZSB0byBpbmRpY2F0ZSByZXNlcnZhdGlvbi9yZWxlYXNlIG9mIGdwaW8ncyAqLworc3RhdGljIHUzMiBhaV9ncGlvcmVzZXJ2YXRpb247CisKKy8qCisgKiBBbGxvY2F0ZSBhIHNpIGhhbmRsZS4KKyAqIGRldmlkIC0gcGNpIGRldmljZSBpZCAodXNlZCB0byBkZXRlcm1pbmUgY2hpcCMpCisgKiBvc2ggLSBvcGFxdWUgT1MgaGFuZGxlCisgKiByZWdzIC0gdmlydHVhbCBhZGRyZXNzIG9mIGluaXRpYWwgY29yZSByZWdpc3RlcnMKKyAqIGJ1c3R5cGUgLSBwY2kvc2Ivc2Rpby9ldGMKKyAqIHZhcnMgLSBwb2ludGVyIHRvIGEgcG9pbnRlciBhcmVhIGZvciAiZW52aXJvbm1lbnQiIHZhcmlhYmxlcworICogdmFyc3ogLSBwb2ludGVyIHRvIGludCB0byByZXR1cm4gdGhlIHNpemUgb2YgdGhlIHZhcnMKKyAqLworc2lfdCAqYWlfYXR0YWNoKHVpbnQgZGV2aWQsIHZvaWQgKnJlZ3MsIHVpbnQgYnVzdHlwZSwKKwkJdm9pZCAqc2RoLCBjaGFyICoqdmFycywgdWludCAqdmFyc3opCit7CisJc2lfaW5mb190ICpzaWk7CisKKwkvKiBhbGxvYyBzaV9pbmZvX3QgKi8KKwlzaWkgPSBrbWFsbG9jKHNpemVvZihzaV9pbmZvX3QpLCBHRlBfQVRPTUlDKTsKKwlpZiAoc2lpID09IE5VTEwpIHsKKwkJU0lfRVJST1IoKCJzaV9hdHRhY2g6IG1hbGxvYyBmYWlsZWQhXG4iKSk7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmIChhaV9kb2F0dGFjaChzaWksIGRldmlkLCByZWdzLCBidXN0eXBlLCBzZGgsIHZhcnMsIHZhcnN6KSA9PQorCSAgICBOVUxMKSB7CisJCWtmcmVlKHNpaSk7CisJCXJldHVybiBOVUxMOworCX0KKwlzaWktPnZhcnMgPSB2YXJzID8gKnZhcnMgOiBOVUxMOworCXNpaS0+dmFyc3ogPSB2YXJzeiA/ICp2YXJzeiA6IDA7CisKKwlyZXR1cm4gKHNpX3QgKikgc2lpOworfQorCisvKiBnbG9iYWwga2VybmVsIHJlc291cmNlICovCitzdGF0aWMgc2lfaW5mb190IGtzaWk7CisKK3N0YXRpYyBib29sIGFpX2J1c2NvcmVfcHJlcChzaV9pbmZvX3QgKnNpaSwgdWludCBidXN0eXBlLCB1aW50IGRldmlkLAorCQkJICAgIHZvaWQgKnNkaCkKK3sKKwkvKiBrbHVkZ2UgdG8gZW5hYmxlIHRoZSBjbG9jayBvbiB0aGUgNDMwNiB3aGljaCBsYWNrcyBhIHNsb3djbG9jayAqLworCWlmIChidXN0eXBlID09IFBDSV9CVVMgJiYgIWFpX2lzcGNpZShzaWkpKQorCQlhaV9jbGtjdGxfeHRhbCgmc2lpLT5wdWIsIFhUQUwgfCBQTEwsIE9OKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgYWlfYnVzY29yZV9zZXR1cChzaV9pbmZvX3QgKnNpaSwgY2hpcGNyZWdzX3QgKmNjLCB1aW50IGJ1c3R5cGUsCisJCQkgICAgIHUzMiBzYXZld2luLCB1aW50ICpvcmlnaWR4LCB2b2lkICpyZWdzKQoreworCWJvb2wgcGNpLCBwY2llOworCXVpbnQgaTsKKwl1aW50IHBjaWlkeCwgcGNpZWlkeCwgcGNpcmV2LCBwY2llcmV2OworCisJY2MgPSBhaV9zZXRjb3JlaWR4KCZzaWktPnB1YiwgU0lfQ0NfSURYKTsKKworCS8qIGdldCBjaGlwY29tbW9uIHJldiAqLworCXNpaS0+cHViLmNjcmV2ID0gKGludClhaV9jb3JlcmV2KCZzaWktPnB1Yik7CisKKwkvKiBnZXQgY2hpcGNvbW1vbiBjaGlwc3RhdHVzICovCisJaWYgKHNpaS0+cHViLmNjcmV2ID49IDExKQorCQlzaWktPnB1Yi5jaGlwc3QgPSBSX1JFRygmY2MtPmNoaXBzdGF0dXMpOworCisJLyogZ2V0IGNoaXBjb21tb24gY2FwYWJpbGl0ZXMgKi8KKwlzaWktPnB1Yi5jY2NhcHMgPSBSX1JFRygmY2MtPmNhcGFiaWxpdGllcyk7CisJLyogZ2V0IGNoaXBjb21tb24gZXh0ZW5kZWQgY2FwYWJpbGl0aWVzICovCisKKwlpZiAoc2lpLT5wdWIuY2NyZXYgPj0gMzUpCisJCXNpaS0+cHViLmNjY2Fwc19leHQgPSBSX1JFRygmY2MtPmNhcGFiaWxpdGllc19leHQpOworCisJLyogZ2V0IHBtdSByZXYgYW5kIGNhcHMgKi8KKwlpZiAoc2lpLT5wdWIuY2NjYXBzICYgQ0NfQ0FQX1BNVSkgeworCQlzaWktPnB1Yi5wbXVjYXBzID0gUl9SRUcoJmNjLT5wbXVjYXBhYmlsaXRpZXMpOworCQlzaWktPnB1Yi5wbXVyZXYgPSBzaWktPnB1Yi5wbXVjYXBzICYgUENBUF9SRVZfTUFTSzsKKwl9CisKKwkvKiBmaWd1cmUgb3V0IGJ1cy9vcmlnbmFsIGNvcmUgaWR4ICovCisJc2lpLT5wdWIuYnVzY29yZXR5cGUgPSBOT0RFVl9DT1JFX0lEOworCXNpaS0+cHViLmJ1c2NvcmVyZXYgPSBOT1JFVjsKKwlzaWktPnB1Yi5idXNjb3JlaWR4ID0gQkFESURYOworCisJcGNpID0gcGNpZSA9IGZhbHNlOworCXBjaXJldiA9IHBjaWVyZXYgPSBOT1JFVjsKKwlwY2lpZHggPSBwY2llaWR4ID0gQkFESURYOworCisJZm9yIChpID0gMDsgaSA8IHNpaS0+bnVtY29yZXM7IGkrKykgeworCQl1aW50IGNpZCwgY3JldjsKKworCQlhaV9zZXRjb3JlaWR4KCZzaWktPnB1YiwgaSk7CisJCWNpZCA9IGFpX2NvcmVpZCgmc2lpLT5wdWIpOworCQljcmV2ID0gYWlfY29yZXJldigmc2lpLT5wdWIpOworCisJCS8qIERpc3BsYXkgY29yZXMgZm91bmQgKi8KKwkJU0lfVk1TRygoIkNPUkVbJWRdOiBpZCAweCV4IHJldiAlZCBiYXNlIDB4JXggcmVncyAweCVwXG4iLAorCQkJIGksIGNpZCwgY3Jldiwgc2lpLT5jb3Jlc2JhW2ldLCBzaWktPnJlZ3NbaV0pKTsKKworCQlpZiAoYnVzdHlwZSA9PSBQQ0lfQlVTKSB7CisJCQlpZiAoY2lkID09IFBDSV9DT1JFX0lEKSB7CisJCQkJcGNpaWR4ID0gaTsKKwkJCQlwY2lyZXYgPSBjcmV2OworCQkJCXBjaSA9IHRydWU7CisJCQl9IGVsc2UgaWYgKGNpZCA9PSBQQ0lFX0NPUkVfSUQpIHsKKwkJCQlwY2llaWR4ID0gaTsKKwkJCQlwY2llcmV2ID0gY3JldjsKKwkJCQlwY2llID0gdHJ1ZTsKKwkJCX0KKwkJfQorCisJCS8qIGZpbmQgdGhlIGNvcmUgaWR4IGJlZm9yZSBlbnRlcmluZyB0aGlzIGZ1bmMuICovCisJCWlmICgoc2F2ZXdpbiAmJiAoc2F2ZXdpbiA9PSBzaWktPmNvcmVzYmFbaV0pKSB8fAorCQkgICAgKHJlZ3MgPT0gc2lpLT5yZWdzW2ldKSkKKwkJCSpvcmlnaWR4ID0gaTsKKwl9CisKKwlpZiAocGNpICYmIHBjaWUpIHsKKwkJaWYgKGFpX2lzcGNpZShzaWkpKQorCQkJcGNpID0gZmFsc2U7CisJCWVsc2UKKwkJCXBjaWUgPSBmYWxzZTsKKwl9CisJaWYgKHBjaSkgeworCQlzaWktPnB1Yi5idXNjb3JldHlwZSA9IFBDSV9DT1JFX0lEOworCQlzaWktPnB1Yi5idXNjb3JlcmV2ID0gcGNpcmV2OworCQlzaWktPnB1Yi5idXNjb3JlaWR4ID0gcGNpaWR4OworCX0gZWxzZSBpZiAocGNpZSkgeworCQlzaWktPnB1Yi5idXNjb3JldHlwZSA9IFBDSUVfQ09SRV9JRDsKKwkJc2lpLT5wdWIuYnVzY29yZXJldiA9IHBjaWVyZXY7CisJCXNpaS0+cHViLmJ1c2NvcmVpZHggPSBwY2llaWR4OworCX0KKworCVNJX1ZNU0coKCJCdXNjb3JlIGlkL3R5cGUvcmV2ICVkLzB4JXgvJWRcbiIsIHNpaS0+cHViLmJ1c2NvcmVpZHgsCisJCSBzaWktPnB1Yi5idXNjb3JldHlwZSwgc2lpLT5wdWIuYnVzY29yZXJldikpOworCisJLyogZml4dXAgbmVjZXNzYXJ5IGNoaXAvY29yZSBjb25maWd1cmF0aW9ucyAqLworCWlmIChzaWktPnB1Yi5idXN0eXBlID09IFBDSV9CVVMpIHsKKwkJaWYgKFNJX0ZBU1Qoc2lpKSkgeworCQkJaWYgKCFzaWktPnBjaCkgeworCQkJCXNpaS0+cGNoID0gKHZvaWQgKilwY2ljb3JlX2luaXQoCisJCQkJCSZzaWktPnB1Yiwgc2lpLT5wYnVzLAorCQkJCQkodm9pZCAqKVBDSUVSRUdTKHNpaSkpOworCQkJCWlmIChzaWktPnBjaCA9PSBOVUxMKQorCQkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKwkJaWYgKGFpX3BjaV9maXhjZmcoJnNpaS0+cHViKSkgeworCQkJU0lfRVJST1IoKCJzaV9kb2F0dGFjaDogc2lfcGNpX2ZpeGNmZyBmYWlsZWRcbiIpKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCS8qIHJldHVybiB0byB0aGUgb3JpZ2luYWwgY29yZSAqLworCWFpX3NldGNvcmVpZHgoJnNpaS0+cHViLCAqb3JpZ2lkeCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIF9fdXNlZCB2b2lkIGFpX252cmFtX3Byb2Nlc3Moc2lfaW5mb190ICpzaWksIGNoYXIgKnB2YXJzKQoreworCXVpbnQgdyA9IDA7CisKKwkvKiBnZXQgYm9hcmR0eXBlIGFuZCBib2FyZHJldiAqLworCXN3aXRjaCAoc2lpLT5wdWIuYnVzdHlwZSkgeworCWNhc2UgUENJX0JVUzoKKwkJLyogZG8gYSBwY2kgY29uZmlnIHJlYWQgdG8gZ2V0IHN1YnN5c3RlbSBpZCBhbmQgc3VidmVuZG9yIGlkICovCisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChzaWktPnBidXMsIFBDSV9TVUJTWVNURU1fVkVORE9SX0lELCAmdyk7CisJCS8qIExldCBudnJhbSB2YXJpYWJsZXMgb3ZlcnJpZGUgc3Vic3lzdGVtIFZlbmQvSUQgKi8KKwkJc2lpLT5wdWIuYm9hcmR2ZW5kb3IgPSAodTE2KWFpX2dldGRldnBhdGhpbnR2YXIoJnNpaS0+cHViLAorCQkJImJvYXJkdmVuZG9yIik7CisJCWlmIChzaWktPnB1Yi5ib2FyZHZlbmRvciA9PSAwKQorCQkJc2lpLT5wdWIuYm9hcmR2ZW5kb3IgPSB3ICYgMHhmZmZmOworCQllbHNlCisJCQlTSV9FUlJPUigoIk92ZXJyaWRpbmcgYm9hcmR2ZW5kb3I6IDB4JXggaW5zdGVhZCBvZiAiCisJCQkJICAiMHgleFxuIiwgc2lpLT5wdWIuYm9hcmR2ZW5kb3IsIHcgJiAweGZmZmYpKTsKKwkJc2lpLT5wdWIuYm9hcmR0eXBlID0gKHUxNilhaV9nZXRkZXZwYXRoaW50dmFyKCZzaWktPnB1YiwKKwkJCSJib2FyZHR5cGUiKTsKKwkJaWYgKHNpaS0+cHViLmJvYXJkdHlwZSA9PSAwKQorCQkJc2lpLT5wdWIuYm9hcmR0eXBlID0gKHcgPj4gMTYpICYgMHhmZmZmOworCQllbHNlCisJCQlTSV9FUlJPUigoIk92ZXJyaWRpbmcgYm9hcmR0eXBlOiAweCV4IGluc3RlYWQgb2YgMHgleFxuIgorCQkJCSAgLCBzaWktPnB1Yi5ib2FyZHR5cGUsICh3ID4+IDE2KSAmIDB4ZmZmZikpOworCQlicmVhazsKKworCQlzaWktPnB1Yi5ib2FyZHZlbmRvciA9IGdldGludHZhcihwdmFycywgIm1hbmZpZCIpOworCQlzaWktPnB1Yi5ib2FyZHR5cGUgPSBnZXRpbnR2YXIocHZhcnMsICJwcm9kaWQiKTsKKwkJYnJlYWs7CisKKwljYXNlIFNJX0JVUzoKKwljYXNlIEpUQUdfQlVTOgorCQlzaWktPnB1Yi5ib2FyZHZlbmRvciA9IFBDSV9WRU5ET1JfSURfQlJPQURDT007CisJCXNpaS0+cHViLmJvYXJkdHlwZSA9IGdldGludHZhcihwdmFycywgInByb2RpZCIpOworCQlpZiAocHZhcnMgPT0gTlVMTCB8fCAoc2lpLT5wdWIuYm9hcmR0eXBlID09IDApKSB7CisJCQlzaWktPnB1Yi5ib2FyZHR5cGUgPSBnZXRpbnR2YXIoTlVMTCwgImJvYXJkdHlwZSIpOworCQkJaWYgKHNpaS0+cHViLmJvYXJkdHlwZSA9PSAwKQorCQkJCXNpaS0+cHViLmJvYXJkdHlwZSA9IDB4ZmZmZjsKKwkJfQorCQlicmVhazsKKwl9CisKKwlpZiAoc2lpLT5wdWIuYm9hcmR0eXBlID09IDApIHsKKwkJU0lfRVJST1IoKCJzaV9kb2F0dGFjaDogdW5rbm93biBib2FyZCB0eXBlXG4iKSk7CisJfQorCisJc2lpLT5wdWIuYm9hcmRmbGFncyA9IGdldGludHZhcihwdmFycywgImJvYXJkZmxhZ3MiKTsKK30KKworc3RhdGljIHNpX2luZm9fdCAqYWlfZG9hdHRhY2goc2lfaW5mb190ICpzaWksIHVpbnQgZGV2aWQsCisJCQkgICAgICB2b2lkICpyZWdzLCB1aW50IGJ1c3R5cGUsIHZvaWQgKnBidXMsCisJCQkgICAgICBjaGFyICoqdmFycywgdWludCAqdmFyc3opCit7CisJc3RydWN0IHNpX3B1YiAqc2loID0gJnNpaS0+cHViOworCXUzMiB3LCBzYXZld2luOworCWNoaXBjcmVnc190ICpjYzsKKwljaGFyICpwdmFycyA9IE5VTEw7CisJdWludCBzb2NpdHlwZTsKKwl1aW50IG9yaWdpZHg7CisKKwltZW1zZXQoKHVuc2lnbmVkIGNoYXIgKikgc2lpLCAwLCBzaXplb2Yoc2lfaW5mb190KSk7CisKKwlzYXZld2luID0gMDsKKworCXNpaC0+YnVzY29yZWlkeCA9IEJBRElEWDsKKworCXNpaS0+Y3VybWFwID0gcmVnczsKKwlzaWktPnBidXMgPSBwYnVzOworCisJLyogY2hlY2sgdG8gc2VlIGlmIHdlIGFyZSBhIHNpIGNvcmUgbWltaWMnaW5nIGEgcGNpIGNvcmUgKi8KKwlpZiAoYnVzdHlwZSA9PSBQQ0lfQlVTKSB7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChzaWktPnBidXMsIFBDSV9TUFJPTV9DT05UUk9MLCAgJncpOworCQlpZiAodyA9PSAweGZmZmZmZmZmKSB7CisJCQlTSV9FUlJPUigoIiVzOiBpbmNvbWluZyBidXMgaXMgUENJIGJ1dCBpdCdzIGEgbGllLCAiCisJCQkJIiBzd2l0Y2hpbmcgdG8gU0kgZGV2aWQ6MHgleFxuIiwKKwkJCQlfX2Z1bmNfXywgZGV2aWQpKTsKKwkJCWJ1c3R5cGUgPSBTSV9CVVM7CisJCX0KKwl9CisKKwkvKiBmaW5kIENoaXBjb21tb24gYWRkcmVzcyAqLworCWlmIChidXN0eXBlID09IFBDSV9CVVMpIHsKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHNpaS0+cGJ1cywgUENJX0JBUjBfV0lOLCAmc2F2ZXdpbik7CisJCWlmICghR09PRENPUkVBRERSKHNhdmV3aW4sIFNJX0VOVU1fQkFTRSkpCisJCQlzYXZld2luID0gU0lfRU5VTV9CQVNFOworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHNpaS0+cGJ1cywgUENJX0JBUjBfV0lOLAorCQkJCSAgICAgICBTSV9FTlVNX0JBU0UpOworCQljYyA9IChjaGlwY3JlZ3NfdCAqKSByZWdzOworCX0gZWxzZSB7CisJCWNjID0gKGNoaXBjcmVnc190ICopIFJFR19NQVAoU0lfRU5VTV9CQVNFLCBTSV9DT1JFX1NJWkUpOworCX0KKworCXNpaC0+YnVzdHlwZSA9IGJ1c3R5cGU7CisKKwkvKiBidXMvY29yZS9jbGsgc2V0dXAgZm9yIHJlZ2lzdGVyIGFjY2VzcyAqLworCWlmICghYWlfYnVzY29yZV9wcmVwKHNpaSwgYnVzdHlwZSwgZGV2aWQsIHBidXMpKSB7CisJCVNJX0VSUk9SKCgic2lfZG9hdHRhY2g6IHNpX2NvcmVfY2xrX3ByZXAgZmFpbGVkICVkXG4iLAorCQkJICBidXN0eXBlKSk7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qCisJICogQ2hpcElEIHJlY29nbml0aW9uLgorCSAqICAgV2UgYXNzdW1lIHdlIGNhbiByZWFkIGNoaXBpZCBhdCBvZmZzZXQgMCBmcm9tIHRoZSByZWdzIGFyZy4KKwkgKiAgIElmIHdlIGFkZCBvdGhlciBjaGlwdHlwZXMgKG9yIGlmIHdlIG5lZWQgdG8gc3VwcG9ydCBvbGQgc2RpbworCSAqICAgaG9zdHMgdy9vIGNoaXBjb21tb24pLCBzb21lIHdheSBvZiByZWNvZ25pemluZyB0aGVtIG5lZWRzIHRvCisJICogICBiZSBhZGRlZCBoZXJlLgorCSAqLworCXcgPSBSX1JFRygmY2MtPmNoaXBpZCk7CisJc29jaXR5cGUgPSAodyAmIENJRF9UWVBFX01BU0spID4+IENJRF9UWVBFX1NISUZUOworCS8qIE1pZ2h0IGFzIHdsbCBmaWxsIGluIGNoaXAgaWQgcmV2ICYgcGtnICovCisJc2loLT5jaGlwID0gdyAmIENJRF9JRF9NQVNLOworCXNpaC0+Y2hpcHJldiA9ICh3ICYgQ0lEX1JFVl9NQVNLKSA+PiBDSURfUkVWX1NISUZUOworCXNpaC0+Y2hpcHBrZyA9ICh3ICYgQ0lEX1BLR19NQVNLKSA+PiBDSURfUEtHX1NISUZUOworCisJc2loLT5pc3NpbSA9IElTX1NJTShzaWgtPmNoaXBwa2cpOworCisJLyogc2NhbiBmb3IgY29yZXMgKi8KKwlpZiAoc29jaXR5cGUgPT0gU09DSV9BSSkgeworCQlTSV9NU0coKCJGb3VuZCBjaGlwIHR5cGUgQUkgKDB4JTA4eClcbiIsIHcpKTsKKwkJLyogcGFzcyBjaGlwYyBhZGRyZXNzIGluc3RlYWQgb2Ygb3JpZ2luYWwgY29yZSBiYXNlICovCisJCWFpX3NjYW4oJnNpaS0+cHViLCAodm9pZCAqKWNjLCBkZXZpZCk7CisJfSBlbHNlIHsKKwkJU0lfRVJST1IoKCJGb3VuZCBjaGlwIG9mIHVua25vd24gdHlwZSAoMHglMDh4KVxuIiwgdykpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJLyogbm8gY29yZXMgZm91bmQsIGJhaWwgb3V0ICovCisJaWYgKHNpaS0+bnVtY29yZXMgPT0gMCkgeworCQlTSV9FUlJPUigoInNpX2RvYXR0YWNoOiBjb3VsZCBub3QgZmluZCBhbnkgY29yZXNcbiIpKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCS8qIGJ1cy9jb3JlL2NsayBzZXR1cCAqLworCW9yaWdpZHggPSBTSV9DQ19JRFg7CisJaWYgKCFhaV9idXNjb3JlX3NldHVwKHNpaSwgY2MsIGJ1c3R5cGUsIHNhdmV3aW4sICZvcmlnaWR4LCByZWdzKSkgeworCQlTSV9FUlJPUigoInNpX2RvYXR0YWNoOiBzaV9idXNjb3JlX3NldHVwIGZhaWxlZFxuIikpOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogYXNzdW1lIGN1cnJlbnQgY29yZSBpcyBDQyAqLworCWlmICgoc2lpLT5wdWIuY2NyZXYgPT0gMHgyNSkKKwkgICAgJiYKKwkgICAgKChzaWgtPmNoaXAgPT0gQkNNNDMyMzZfQ0hJUF9JRAorCSAgICAgIHx8IHNpaC0+Y2hpcCA9PSBCQ000MzIzNV9DSElQX0lECisJICAgICAgfHwgc2loLT5jaGlwID09IEJDTTQzMjM4X0NISVBfSUQpCisJICAgICAmJiAoc2lpLT5wdWIuY2hpcHJldiA8PSAyKSkpIHsKKworCQlpZiAoKGNjLT5jaGlwc3RhdHVzICYgQ1NUNDMyMzZfQlBfQ0xLKSAhPSAwKSB7CisJCQl1aW50IGNsa2RpdjsKKwkJCWNsa2RpdiA9IFJfUkVHKCZjYy0+Y2xrZGl2KTsKKwkJCS8qIG90cF9jbGtfZGl2IGlzIGV2ZW4gbnVtYmVyLCAxMjAvMTQgPCA5bWh6ICovCisJCQljbGtkaXYgPSAoY2xrZGl2ICYgfkNMS0RfT1RQKSB8ICgxNCA8PCBDTEtEX09UUF9TSElGVCk7CisJCQlXX1JFRygmY2MtPmNsa2RpdiwgY2xrZGl2KTsKKwkJCVNJX0VSUk9SKCgiJXM6IHNldCBjbGtkaXYgdG8gJXhcbiIsIF9fZnVuY19fLCBjbGtkaXYpKTsKKwkJfQorCQl1ZGVsYXkoMTApOworCX0KKworCS8qIEluaXQgbnZyYW0gZnJvbSBmbGFzaCBpZiBpdCBleGlzdHMgKi8KKwludnJhbV9pbml0KCk7CisKKwkvKiBJbml0IG52cmFtIGZyb20gc3Byb20vb3RwIGlmIHRoZXkgZXhpc3QgKi8KKwlpZiAoc3JvbV92YXJfaW5pdAorCSAgICAoJnNpaS0+cHViLCBidXN0eXBlLCByZWdzLCB2YXJzLCB2YXJzeikpIHsKKwkJU0lfRVJST1IoKCJzaV9kb2F0dGFjaDogc3JvbV92YXJfaW5pdCBmYWlsZWQ6IGJhZCBzcm9tXG4iKSk7CisJCWdvdG8gZXhpdDsKKwl9CisJcHZhcnMgPSB2YXJzID8gKnZhcnMgOiBOVUxMOworCWFpX252cmFtX3Byb2Nlc3Moc2lpLCBwdmFycyk7CisKKwkvKiA9PT0gTlZSQU0sIGNsb2NrIGlzIHJlYWR5ID09PSAqLworCWNjID0gKGNoaXBjcmVnc190ICopIGFpX3NldGNvcmUoc2loLCBDQ19DT1JFX0lELCAwKTsKKwlXX1JFRygmY2MtPmdwaW9wdWxsdXAsIDApOworCVdfUkVHKCZjYy0+Z3Bpb3B1bGxkb3duLCAwKTsKKwlhaV9zZXRjb3JlaWR4KHNpaCwgb3JpZ2lkeCk7CisKKwkvKiBQTVUgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb25zICovCisJaWYgKFBNVUNUTF9FTkFCKHNpaCkpIHsKKwkJdTMyIHh0YWxmcmVxOworCQlzaV9wbXVfaW5pdChzaWgpOworCQlzaV9wbXVfY2hpcF9pbml0KHNpaCk7CisJCXh0YWxmcmVxID0gZ2V0aW50dmFyKHB2YXJzLCAieHRhbGZyZXEiKTsKKwkJLyogSWYgeHRhbGZyZXEgdmFyIG5vdCBhdmFpbGFibGUsIHRyeSB0byBtZWFzdXJlIGl0ICovCisJCWlmICh4dGFsZnJlcSA9PSAwKQorCQkJeHRhbGZyZXEgPSBzaV9wbXVfbWVhc3VyZV9hbHBjbGsoc2loKTsKKwkJc2lfcG11X3BsbF9pbml0KHNpaCwgeHRhbGZyZXEpOworCQlzaV9wbXVfcmVzX2luaXQoc2loKTsKKwkJc2lfcG11X3N3cmVnX2luaXQoc2loKTsKKwl9CisKKwkvKiBzZXR1cCB0aGUgR1BJTyBiYXNlZCBMRUQgcG93ZXJzYXZlIHJlZ2lzdGVyICovCisJdyA9IGdldGludHZhcihwdmFycywgImxlZGRjIik7CisJaWYgKHcgPT0gMCkKKwkJdyA9IERFRkFVTFRfR1BJT1RJTUVSVkFMOworCWFpX2NvcmVyZWcoc2loLCBTSV9DQ19JRFgsIG9mZnNldG9mKGNoaXBjcmVnc190LCBncGlvdGltZXJ2YWwpLCB+MCwgdyk7CisKKwlpZiAoUENJRShzaWkpKSB7CisJCXBjaWNvcmVfYXR0YWNoKHNpaS0+cGNoLCBwdmFycywgU0lfRE9BVFRBQ0gpOworCX0KKworCWlmICgoc2loLT5jaGlwID09IEJDTTQzMjI0X0NISVBfSUQpIHx8CisJICAgIChzaWgtPmNoaXAgPT0gQkNNNDM0MjFfQ0hJUF9JRCkpIHsKKwkJLyoKKwkJICogZW5hYmxlIDEyIG1BIGRyaXZlIHN0cmVudGggZm9yIDQzMjI0IGFuZAorCQkgKiBzZXQgY2hpcENvbnRyb2wgcmVnaXN0ZXIgYml0IDE1CisJCSAqLworCQlpZiAoc2loLT5jaGlwcmV2ID09IDApIHsKKwkJCVNJX01TRygoIkFwcGx5aW5nIDQzMjI0QTAgV0FSc1xuIikpOworCQkJYWlfY29yZXJlZyhzaWgsIFNJX0NDX0lEWCwKKwkJCQkgICBvZmZzZXRvZihjaGlwY3JlZ3NfdCwgY2hpcGNvbnRyb2wpLAorCQkJCSAgIENDVFJMNDMyMjRfR1BJT19UT0dHTEUsCisJCQkJICAgQ0NUUkw0MzIyNF9HUElPX1RPR0dMRSk7CisJCQlzaV9wbXVfY2hpcGNvbnRyb2woc2loLCAwLCBDQ1RSTF80MzIyNEEwXzEyTUFfTEVEX0RSSVZFLAorCQkJCQkgICBDQ1RSTF80MzIyNEEwXzEyTUFfTEVEX0RSSVZFKTsKKwkJfQorCQlpZiAoc2loLT5jaGlwcmV2ID49IDEpIHsKKwkJCVNJX01TRygoIkFwcGx5aW5nIDQzMjI0QjArIFdBUnNcbiIpKTsKKwkJCXNpX3BtdV9jaGlwY29udHJvbChzaWgsIDAsIENDVFJMXzQzMjI0QjBfMTJNQV9MRURfRFJJVkUsCisJCQkJCSAgIENDVFJMXzQzMjI0QjBfMTJNQV9MRURfRFJJVkUpOworCQl9CisJfQorCisJaWYgKHNpaC0+Y2hpcCA9PSBCQ000MzEzX0NISVBfSUQpIHsKKwkJLyoKKwkJICogZW5hYmxlIDEyIG1BIGRyaXZlIHN0cmVudGggZm9yIDQzMTMgYW5kCisJCSAqIHNldCBjaGlwQ29udHJvbCByZWdpc3RlciBiaXQgMQorCQkgKi8KKwkJU0lfTVNHKCgiQXBwbHlpbmcgNDMxMyBXQVJzXG4iKSk7CisJCXNpX3BtdV9jaGlwY29udHJvbChzaWgsIDAsIENDVFJMXzQzMTNfMTJNQV9MRURfRFJJVkUsCisJCQkJICAgQ0NUUkxfNDMxM18xMk1BX0xFRF9EUklWRSk7CisJfQorCisJaWYgKHNpaC0+Y2hpcCA9PSBCQ000MzMxX0NISVBfSUQpIHsKKwkJLyogRW5hYmxlIEV4dCBQQSBsaW5lcyBkZXBlbmRpbmcgb24gY2hpcCBwYWNrYWdlIG9wdGlvbiAqLworCQlhaV9jaGlwY29udHJsX2VwYTQzMzEoc2loLCB0cnVlKTsKKwl9CisKKwlyZXR1cm4gc2lpOworIGV4aXQ6CisJaWYgKHNpaC0+YnVzdHlwZSA9PSBQQ0lfQlVTKSB7CisJCWlmIChzaWktPnBjaCkKKwkJCXBjaWNvcmVfZGVpbml0KHNpaS0+cGNoKTsKKwkJc2lpLT5wY2ggPSBOVUxMOworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKiBtYXkgYmUgY2FsbGVkIHdpdGggY29yZSBpbiByZXNldCAqLwordm9pZCBhaV9kZXRhY2goc2lfdCAqc2loKQoreworCXNpX2luZm9fdCAqc2lpOworCXVpbnQgaWR4OworCisJc3RydWN0IHNpX3B1YiAqc2lfbG9jYWwgPSBOVUxMOworCWJjb3B5KCZzaWgsICZzaV9sb2NhbCwgc2l6ZW9mKHNpX3QgKiopKTsKKworCXNpaSA9IFNJX0lORk8oc2loKTsKKworCWlmIChzaWkgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaWYgKHNpaC0+YnVzdHlwZSA9PSBTSV9CVVMpCisJCWZvciAoaWR4ID0gMDsgaWR4IDwgU0lfTUFYQ09SRVM7IGlkeCsrKQorCQkJaWYgKHNpaS0+cmVnc1tpZHhdKSB7CisJCQkJaW91bm1hcChzaWktPnJlZ3NbaWR4XSk7CisJCQkJc2lpLT5yZWdzW2lkeF0gPSBOVUxMOworCQkJfQorCisJbnZyYW1fZXhpdCgpOwkvKiBmcmVlIHVwIG52cmFtIGJ1ZmZlcnMgKi8KKworCWlmIChzaWgtPmJ1c3R5cGUgPT0gUENJX0JVUykgeworCQlpZiAoc2lpLT5wY2gpCisJCQlwY2ljb3JlX2RlaW5pdChzaWktPnBjaCk7CisJCXNpaS0+cGNoID0gTlVMTDsKKwl9CisKKwlpZiAoc2lpICE9ICZrc2lpKQorCQlrZnJlZShzaWkpOworfQorCisvKiByZWdpc3RlciBkcml2ZXIgaW50ZXJydXB0IGRpc2FibGluZyBhbmQgcmVzdG9yaW5nIGNhbGxiYWNrIGZ1bmN0aW9ucyAqLwordm9pZAorYWlfcmVnaXN0ZXJfaW50cl9jYWxsYmFjayhzaV90ICpzaWgsIHZvaWQgKmludHJzb2ZmX2ZuLCB2b2lkICppbnRyc3Jlc3RvcmVfZm4sCisJCQkgIHZvaWQgKmludHJzZW5hYmxlZF9mbiwgdm9pZCAqaW50cl9hcmcpCit7CisJc2lfaW5mb190ICpzaWk7CisKKwlzaWkgPSBTSV9JTkZPKHNpaCk7CisJc2lpLT5pbnRyX2FyZyA9IGludHJfYXJnOworCXNpaS0+aW50cnNvZmZfZm4gPSAoc2lfaW50cnNvZmZfdCkgaW50cnNvZmZfZm47CisJc2lpLT5pbnRyc3Jlc3RvcmVfZm4gPSAoc2lfaW50cnNyZXN0b3JlX3QpIGludHJzcmVzdG9yZV9mbjsKKwlzaWktPmludHJzZW5hYmxlZF9mbiA9IChzaV9pbnRyc2VuYWJsZWRfdCkgaW50cnNlbmFibGVkX2ZuOworCS8qIHNhdmUgY3VycmVudCBjb3JlIGlkLiAgd2hlbiB0aGlzIGZ1bmN0aW9uIGNhbGxlZCwgdGhlIGN1cnJlbnQgY29yZQorCSAqIG11c3QgYmUgdGhlIGNvcmUgd2hpY2ggcHJvdmlkZXMgZHJpdmVyIGZ1bmN0aW9ucyhpbCwgZXQsIHdsLCBldGMuKQorCSAqLworCXNpaS0+ZGV2X2NvcmVpZCA9IHNpaS0+Y29yZWlkW3NpaS0+Y3VyaWR4XTsKK30KKwordm9pZCBhaV9kZXJlZ2lzdGVyX2ludHJfY2FsbGJhY2soc2lfdCAqc2loKQoreworCXNpX2luZm9fdCAqc2lpOworCisJc2lpID0gU0lfSU5GTyhzaWgpOworCXNpaS0+aW50cnNvZmZfZm4gPSBOVUxMOworfQorCit1aW50IGFpX2NvcmVpZChzaV90ICpzaWgpCit7CisJc2lfaW5mb190ICpzaWk7CisKKwlzaWkgPSBTSV9JTkZPKHNpaCk7CisJcmV0dXJuIHNpaS0+Y29yZWlkW3NpaS0+Y3VyaWR4XTsKK30KKwordWludCBhaV9jb3JlaWR4KHNpX3QgKnNpaCkKK3sKKwlzaV9pbmZvX3QgKnNpaTsKKworCXNpaSA9IFNJX0lORk8oc2loKTsKKwlyZXR1cm4gc2lpLT5jdXJpZHg7Cit9CisKK2Jvb2wgYWlfYmFja3BsYW5lNjQoc2lfdCAqc2loKQoreworCXJldHVybiAoc2loLT5jY2NhcHMgJiBDQ19DQVBfQktQTE42NCkgIT0gMDsKK30KKworLyogcmV0dXJuIGluZGV4IG9mIGNvcmVpZCBvciBCQURJRFggaWYgbm90IGZvdW5kICovCit1aW50IGFpX2ZpbmRjb3JlaWR4KHNpX3QgKnNpaCwgdWludCBjb3JlaWQsIHVpbnQgY29yZXVuaXQpCit7CisJc2lfaW5mb190ICpzaWk7CisJdWludCBmb3VuZDsKKwl1aW50IGk7CisKKwlzaWkgPSBTSV9JTkZPKHNpaCk7CisKKwlmb3VuZCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2lpLT5udW1jb3JlczsgaSsrKQorCQlpZiAoc2lpLT5jb3JlaWRbaV0gPT0gY29yZWlkKSB7CisJCQlpZiAoZm91bmQgPT0gY29yZXVuaXQpCisJCQkJcmV0dXJuIGk7CisJCQlmb3VuZCsrOworCQl9CisKKwlyZXR1cm4gQkFESURYOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjaGFuZ2VzIGxvZ2ljYWwgImZvY3VzIiB0byB0aGUgaW5kaWNhdGVkIGNvcmU7CisgKiBtdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdHMgb2ZmLgorICogTW9yZW92ZXIsIGNhbGxlcnMgc2hvdWxkIGtlZXAgaW50ZXJydXB0cyBvZmYgZHVyaW5nIHN3aXRjaGluZworICogb3V0IG9mIGFuZCBiYWNrIHRvIGQxMSBjb3JlLgorICovCit2b2lkICphaV9zZXRjb3JlKHNpX3QgKnNpaCwgdWludCBjb3JlaWQsIHVpbnQgY29yZXVuaXQpCit7CisJdWludCBpZHg7CisKKwlpZHggPSBhaV9maW5kY29yZWlkeChzaWgsIGNvcmVpZCwgY29yZXVuaXQpOworCWlmICghR09PRElEWChpZHgpKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBhaV9zZXRjb3JlaWR4KHNpaCwgaWR4KTsKK30KKworLyogVHVybiBvZmYgaW50ZXJydXB0IGFzIHJlcXVpcmVkIGJ5IGFpX3NldGNvcmUsIGJlZm9yZSBzd2l0Y2ggY29yZSAqLwordm9pZCAqYWlfc3dpdGNoX2NvcmUoc2lfdCAqc2loLCB1aW50IGNvcmVpZCwgdWludCAqb3JpZ2lkeCwgdWludCAqaW50cl92YWwpCit7CisJdm9pZCAqY2M7CisJc2lfaW5mb190ICpzaWk7CisKKwlzaWkgPSBTSV9JTkZPKHNpaCk7CisKKwlpZiAoU0lfRkFTVChzaWkpKSB7CisJCS8qIE92ZXJsb2FkaW5nIHRoZSBvcmlnaWR4IHZhcmlhYmxlIHRvIHJlbWVtYmVyIHRoZSBjb3JlaWQsCisJCSAqIHRoaXMgd29ya3MgYmVjYXVzZSB0aGUgY29yZSBpZHMgY2Fubm90IGJlIGNvbmZ1c2VkIHdpdGgKKwkJICogY29yZSBpbmRpY2VzLgorCQkgKi8KKwkJKm9yaWdpZHggPSBjb3JlaWQ7CisJCWlmIChjb3JlaWQgPT0gQ0NfQ09SRV9JRCkKKwkJCXJldHVybiAodm9pZCAqKUNDUkVHU19GQVNUKHNpaSk7CisJCWVsc2UgaWYgKGNvcmVpZCA9PSBzaWgtPmJ1c2NvcmV0eXBlKQorCQkJcmV0dXJuICh2b2lkICopUENJRVJFR1Moc2lpKTsKKwl9CisJSU5UUl9PRkYoc2lpLCAqaW50cl92YWwpOworCSpvcmlnaWR4ID0gc2lpLT5jdXJpZHg7CisJY2MgPSBhaV9zZXRjb3JlKHNpaCwgY29yZWlkLCAwKTsKKwlyZXR1cm4gY2M7Cit9CisKKy8qIHJlc3RvcmUgY29yZWlkeCBhbmQgcmVzdG9yZSBpbnRlcnJ1cHQgKi8KK3ZvaWQgYWlfcmVzdG9yZV9jb3JlKHNpX3QgKnNpaCwgdWludCBjb3JlaWQsIHVpbnQgaW50cl92YWwpCit7CisJc2lfaW5mb190ICpzaWk7CisKKwlzaWkgPSBTSV9JTkZPKHNpaCk7CisJaWYgKFNJX0ZBU1Qoc2lpKQorCSAgICAmJiAoKGNvcmVpZCA9PSBDQ19DT1JFX0lEKSB8fCAoY29yZWlkID09IHNpaC0+YnVzY29yZXR5cGUpKSkKKwkJcmV0dXJuOworCisJYWlfc2V0Y29yZWlkeChzaWgsIGNvcmVpZCk7CisJSU5UUl9SRVNUT1JFKHNpaSwgaW50cl92YWwpOworfQorCit2b2lkIGFpX3dyaXRlX3dyYXBwZXJyZWcoc2lfdCAqc2loLCB1MzIgb2Zmc2V0LCB1MzIgdmFsKQoreworCXNpX2luZm9fdCAqc2lpID0gU0lfSU5GTyhzaWgpOworCXUzMiAqdyA9ICh1MzIgKikgc2lpLT5jdXJ3cmFwOworCVdfUkVHKHcgKyAob2Zmc2V0IC8gNCksIHZhbCk7CisJcmV0dXJuOworfQorCisvKgorICogU3dpdGNoIHRvICdjb3JlaWR4JywgaXNzdWUgYSBzaW5nbGUgYXJiaXRyYXJ5IDMyYml0IHJlZ2lzdGVyIG1hc2smc2V0CisgKiBvcGVyYXRpb24sIHN3aXRjaCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBjb3JlLCBhbmQgcmV0dXJuIHRoZSBuZXcgdmFsdWUuCisgKgorICogV2hlbiB1c2luZyB0aGUgc2lsaWNvbiBiYWNrcGxhbmUsIG5vIGZpZGRsaW5nIHdpdGggaW50ZXJydXB0cyBvciBjb3JlCisgKiBzd2l0Y2hlcyBpcyBuZWVkZWQuCisgKgorICogQWxzbywgd2hlbiB1c2luZyBwY2kvcGNpZSwgd2UgY2FuIG9wdGltaXplIGF3YXkgdGhlIGNvcmUgc3dpdGNoaW5nIGZvciBwY2kKKyAqIHJlZ2lzdGVycyBhbmQgKG9uIG5ld2VyIHBjaSBjb3JlcykgY2hpcGNvbW1vbiByZWdpc3RlcnMuCisgKi8KK3VpbnQgYWlfY29yZXJlZyhzaV90ICpzaWgsIHVpbnQgY29yZWlkeCwgdWludCByZWdvZmYsIHVpbnQgbWFzaywgdWludCB2YWwpCit7CisJdWludCBvcmlnaWR4ID0gMDsKKwl1MzIgKnIgPSBOVUxMOworCXVpbnQgdzsKKwl1aW50IGludHJfdmFsID0gMDsKKwlib29sIGZhc3QgPSBmYWxzZTsKKwlzaV9pbmZvX3QgKnNpaTsKKworCXNpaSA9IFNJX0lORk8oc2loKTsKKworCWlmIChjb3JlaWR4ID49IFNJX01BWENPUkVTKQorCQlyZXR1cm4gMDsKKworCWlmIChzaWgtPmJ1c3R5cGUgPT0gU0lfQlVTKSB7CisJCS8qIElmIGludGVybmFsIGJ1cywgd2UgY2FuIGFsd2F5cyBnZXQgYXQgZXZlcnl0aGluZyAqLworCQlmYXN0ID0gdHJ1ZTsKKwkJLyogbWFwIGlmIGRvZXMgbm90IGV4aXN0ICovCisJCWlmICghc2lpLT5yZWdzW2NvcmVpZHhdKSB7CisJCQlzaWktPnJlZ3NbY29yZWlkeF0gPSBSRUdfTUFQKHNpaS0+Y29yZXNiYVtjb3JlaWR4XSwKKwkJCQkJCSAgICAgU0lfQ09SRV9TSVpFKTsKKwkJfQorCQlyID0gKHUzMiAqKSAoKHVuc2lnbmVkIGNoYXIgKikgc2lpLT5yZWdzW2NvcmVpZHhdICsgcmVnb2ZmKTsKKwl9IGVsc2UgaWYgKHNpaC0+YnVzdHlwZSA9PSBQQ0lfQlVTKSB7CisJCS8qCisJCSAqIElmIHBjaS9wY2llLCB3ZSBjYW4gZ2V0IGF0IHBjaS9wY2llIHJlZ3MKKwkJICogYW5kIG9uIG5ld2VyIGNvcmVzIHRvIGNoaXBjCisJCSAqLworCQlpZiAoKHNpaS0+Y29yZWlkW2NvcmVpZHhdID09IENDX0NPUkVfSUQpICYmIFNJX0ZBU1Qoc2lpKSkgeworCQkJLyogQ2hpcGMgcmVnaXN0ZXJzIGFyZSBtYXBwZWQgYXQgMTJLQiAqLworCisJCQlmYXN0ID0gdHJ1ZTsKKwkJCXIgPSAodTMyICopICgoY2hhciAqKXNpaS0+Y3VybWFwICsKKwkJCQkJUENJXzE2S0IwX0NDUkVHU19PRkZTRVQgKyByZWdvZmYpOworCQl9IGVsc2UgaWYgKHNpaS0+cHViLmJ1c2NvcmVpZHggPT0gY29yZWlkeCkgeworCQkJLyoKKwkJCSAqIHBjaSByZWdpc3RlcnMgYXJlIGF0IGVpdGhlciBpbiB0aGUgbGFzdCAyS0Igb2YKKwkJCSAqIGFuIDhLQiB3aW5kb3cgb3IsIGluIHBjaWUgYW5kIHBjaSByZXYgMTMgYXQgOEtCCisJCQkgKi8KKwkJCWZhc3QgPSB0cnVlOworCQkJaWYgKFNJX0ZBU1Qoc2lpKSkKKwkJCQlyID0gKHUzMiAqKSAoKGNoYXIgKilzaWktPmN1cm1hcCArCisJCQkJCQlQQ0lfMTZLQjBfUENJUkVHU19PRkZTRVQgKworCQkJCQkJcmVnb2ZmKTsKKwkJCWVsc2UKKwkJCQlyID0gKHUzMiAqKSAoKGNoYXIgKilzaWktPmN1cm1hcCArCisJCQkJCQkoKHJlZ29mZiA+PSBTQkNPTkZJR09GRikgPworCQkJCQkJIFBDSV9CQVIwX1BDSVNCUl9PRkZTRVQgOgorCQkJCQkJIFBDSV9CQVIwX1BDSVJFR1NfT0ZGU0VUKSArCisJCQkJCQlyZWdvZmYpOworCQl9CisJfQorCisJaWYgKCFmYXN0KSB7CisJCUlOVFJfT0ZGKHNpaSwgaW50cl92YWwpOworCisJCS8qIHNhdmUgY3VycmVudCBjb3JlIGluZGV4ICovCisJCW9yaWdpZHggPSBhaV9jb3JlaWR4KCZzaWktPnB1Yik7CisKKwkJLyogc3dpdGNoIGNvcmUgKi8KKwkJciA9ICh1MzIgKikgKCh1bnNpZ25lZCBjaGFyICopIGFpX3NldGNvcmVpZHgoJnNpaS0+cHViLCBjb3JlaWR4KQorCQkJCSsgcmVnb2ZmKTsKKwl9CisKKwkvKiBtYXNrIGFuZCBzZXQgKi8KKwlpZiAobWFzayB8fCB2YWwpIHsKKwkJdyA9IChSX1JFRyhyKSAmIH5tYXNrKSB8IHZhbDsKKwkJV19SRUcociwgdyk7CisJfQorCisJLyogcmVhZGJhY2sgKi8KKwl3ID0gUl9SRUcocik7CisKKwlpZiAoIWZhc3QpIHsKKwkJLyogcmVzdG9yZSBjb3JlIGluZGV4ICovCisJCWlmIChvcmlnaWR4ICE9IGNvcmVpZHgpCisJCQlhaV9zZXRjb3JlaWR4KCZzaWktPnB1Yiwgb3JpZ2lkeCk7CisKKwkJSU5UUl9SRVNUT1JFKHNpaSwgaW50cl92YWwpOworCX0KKworCXJldHVybiB3OworfQorCit2b2lkIGFpX2NvcmVfZGlzYWJsZShzaV90ICpzaWgsIHUzMiBiaXRzKQoreworCXNpX2luZm9fdCAqc2lpOworCXUzMiBkdW1teTsKKwlhaWRtcF90ICphaTsKKworCXNpaSA9IFNJX0lORk8oc2loKTsKKworCWFpID0gc2lpLT5jdXJ3cmFwOworCisJLyogaWYgY29yZSBpcyBhbHJlYWR5IGluIHJlc2V0LCBqdXN0IHJldHVybiAqLworCWlmIChSX1JFRygmYWktPnJlc2V0Y3RybCkgJiBBSVJDX1JFU0VUKQorCQlyZXR1cm47CisKKwlXX1JFRygmYWktPmlvY3RybCwgYml0cyk7CisJZHVtbXkgPSBSX1JFRygmYWktPmlvY3RybCk7CisJdWRlbGF5KDEwKTsKKworCVdfUkVHKCZhaS0+cmVzZXRjdHJsLCBBSVJDX1JFU0VUKTsKKwl1ZGVsYXkoMSk7Cit9CisKKy8qIHJlc2V0IGFuZCByZS1lbmFibGUgYSBjb3JlCisgKiBpbnB1dHM6CisgKiBiaXRzIC0gY29yZSBzcGVjaWZpYyBiaXRzIHRoYXQgYXJlIHNldCBkdXJpbmcgYW5kIGFmdGVyIHJlc2V0IHNlcXVlbmNlCisgKiByZXNldGJpdHMgLSBjb3JlIHNwZWNpZmljIGJpdHMgdGhhdCBhcmUgc2V0IG9ubHkgZHVyaW5nIHJlc2V0IHNlcXVlbmNlCisgKi8KK3ZvaWQgYWlfY29yZV9yZXNldChzaV90ICpzaWgsIHUzMiBiaXRzLCB1MzIgcmVzZXRiaXRzKQoreworCXNpX2luZm9fdCAqc2lpOworCWFpZG1wX3QgKmFpOworCXUzMiBkdW1teTsKKworCXNpaSA9IFNJX0lORk8oc2loKTsKKwlhaSA9IHNpaS0+Y3Vyd3JhcDsKKworCS8qCisJICogTXVzdCBkbyB0aGUgZGlzYWJsZSBzZXF1ZW5jZSBmaXJzdCB0byB3b3JrCisJICogZm9yIGFyYml0cmFyeSBjdXJyZW50IGNvcmUgc3RhdGUuCisJICovCisJYWlfY29yZV9kaXNhYmxlKHNpaCwgKGJpdHMgfCByZXNldGJpdHMpKTsKKworCS8qCisJICogTm93IGRvIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4KKwkgKi8KKwlXX1JFRygmYWktPmlvY3RybCwgKGJpdHMgfCBTSUNGX0ZHQyB8IFNJQ0ZfQ0xPQ0tfRU4pKTsKKwlkdW1teSA9IFJfUkVHKCZhaS0+aW9jdHJsKTsKKwlXX1JFRygmYWktPnJlc2V0Y3RybCwgMCk7CisJdWRlbGF5KDEpOworCisJV19SRUcoJmFpLT5pb2N0cmwsIChiaXRzIHwgU0lDRl9DTE9DS19FTikpOworCWR1bW15ID0gUl9SRUcoJmFpLT5pb2N0cmwpOworCXVkZWxheSgxKTsKK30KKworLyogcmV0dXJuIHRoZSBzbG93IGNsb2NrIHNvdXJjZSAtIExQTywgWFRBTCwgb3IgUENJICovCitzdGF0aWMgdWludCBhaV9zbG93Y2xrX3NyYyhzaV9pbmZvX3QgKnNpaSkKK3sKKwljaGlwY3JlZ3NfdCAqY2M7CisJdTMyIHZhbDsKKworCWlmIChzaWktPnB1Yi5jY3JldiA8IDYpIHsKKwkJaWYgKHNpaS0+cHViLmJ1c3R5cGUgPT0gUENJX0JVUykgeworCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHNpaS0+cGJ1cywgUENJX0dQSU9fT1VULAorCQkJCQkgICAgICAmdmFsKTsKKwkJCWlmICh2YWwgJiBQQ0lfQ0ZHX0dQSU9fU0NTKQorCQkJCXJldHVybiBTQ0NfU1NfUENJOworCQl9CisJCXJldHVybiBTQ0NfU1NfWFRBTDsKKwl9IGVsc2UgaWYgKHNpaS0+cHViLmNjcmV2IDwgMTApIHsKKwkJY2MgPSAoY2hpcGNyZWdzX3QgKikgYWlfc2V0Y29yZWlkeCgmc2lpLT5wdWIsIHNpaS0+Y3VyaWR4KTsKKwkJcmV0dXJuIFJfUkVHKCZjYy0+c2xvd19jbGtfY3RsKSAmIFNDQ19TU19NQVNLOworCX0gZWxzZQkJCS8qIEluc3RhLWNsb2NrICovCisJCXJldHVybiBTQ0NfU1NfWFRBTDsKK30KKworLyoKKyogcmV0dXJuIHRoZSBJTFAgKHNsb3djbG9jaykgbWluIG9yIG1heCBmcmVxdWVuY3kKKyogcHJlY29uZGl0aW9uOiB3ZSd2ZSBlc3RhYmxpc2hlZCB0aGUgY2hpcCBoYXMgZHluYW1pYyBjbGsgY29udHJvbAorKi8KK3N0YXRpYyB1aW50IGFpX3Nsb3djbGtfZnJlcShzaV9pbmZvX3QgKnNpaSwgYm9vbCBtYXhfZnJlcSwgY2hpcGNyZWdzX3QgKmNjKQoreworCXUzMiBzbG93Y2xrOworCXVpbnQgZGl2OworCisJc2xvd2NsayA9IGFpX3Nsb3djbGtfc3JjKHNpaSk7CisJaWYgKHNpaS0+cHViLmNjcmV2IDwgNikgeworCQlpZiAoc2xvd2NsayA9PSBTQ0NfU1NfUENJKQorCQkJcmV0dXJuIG1heF9mcmVxID8gKFBDSU1BWEZSRVEgLyA2NCkKKwkJCQk6IChQQ0lNSU5GUkVRIC8gNjQpOworCQllbHNlCisJCQlyZXR1cm4gbWF4X2ZyZXEgPyAoWFRBTE1BWEZSRVEgLyAzMikKKwkJCQk6IChYVEFMTUlORlJFUSAvIDMyKTsKKwl9IGVsc2UgaWYgKHNpaS0+cHViLmNjcmV2IDwgMTApIHsKKwkJZGl2ID0gNCAqCisJCSAgICAoKChSX1JFRygmY2MtPnNsb3dfY2xrX2N0bCkgJiBTQ0NfQ0RfTUFTSykgPj4KKwkJICAgICAgU0NDX0NEX1NISUZUKSArIDEpOworCQlpZiAoc2xvd2NsayA9PSBTQ0NfU1NfTFBPKQorCQkJcmV0dXJuIG1heF9mcmVxID8gTFBPTUFYRlJFUSA6IExQT01JTkZSRVE7CisJCWVsc2UgaWYgKHNsb3djbGsgPT0gU0NDX1NTX1hUQUwpCisJCQlyZXR1cm4gbWF4X2ZyZXEgPyAoWFRBTE1BWEZSRVEgLyBkaXYpCisJCQkJOiAoWFRBTE1JTkZSRVEgLyBkaXYpOworCQllbHNlIGlmIChzbG93Y2xrID09IFNDQ19TU19QQ0kpCisJCQlyZXR1cm4gbWF4X2ZyZXEgPyAoUENJTUFYRlJFUSAvIGRpdikKKwkJCQk6IChQQ0lNSU5GUkVRIC8gZGl2KTsKKwl9IGVsc2UgeworCQkvKiBDaGlwYyByZXYgMTAgaXMgSW5zdGFDbG9jayAqLworCQlkaXYgPSBSX1JFRygmY2MtPnN5c3RlbV9jbGtfY3RsKSA+PiBTWUNDX0NEX1NISUZUOworCQlkaXYgPSA0ICogKGRpdiArIDEpOworCQlyZXR1cm4gbWF4X2ZyZXEgPyBYVEFMTUFYRlJFUSA6IChYVEFMTUlORlJFUSAvIGRpdik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhaV9jbGtjdGxfc2V0ZGVsYXkoc2lfaW5mb190ICpzaWksIHZvaWQgKmNoaXBjcmVncykKK3sKKwljaGlwY3JlZ3NfdCAqY2MgPSAoY2hpcGNyZWdzX3QgKikgY2hpcGNyZWdzOworCXVpbnQgc2xvd21heGZyZXEsIHBsbF9kZWxheSwgc2xvd2NsazsKKwl1aW50IHBsbF9vbl9kZWxheSwgZnJlZl9zZWxfZGVsYXk7CisKKwlwbGxfZGVsYXkgPSBQTExfREVMQVk7CisKKwkvKgorCSAqIElmIHRoZSBzbG93IGNsb2NrIGlzIG5vdCBzb3VyY2VkIGJ5IHRoZSB4dGFsIHRoZW4KKwkgKiBhZGQgdGhlIHh0YWxfb25fZGVsYXkgc2luY2UgdGhlIHh0YWwgd2lsbCBhbHNvIGJlCisJICogcG93ZXJlZCBkb3duIGJ5IGR5bmFtaWMgY2xrIGNvbnRyb2wgbG9naWMuCisJICovCisKKwlzbG93Y2xrID0gYWlfc2xvd2Nsa19zcmMoc2lpKTsKKwlpZiAoc2xvd2NsayAhPSBTQ0NfU1NfWFRBTCkKKwkJcGxsX2RlbGF5ICs9IFhUQUxfT05fREVMQVk7CisKKwkvKiBTdGFydGluZyB3aXRoIDQzMTggaXQgaXMgSUxQIHRoYXQgaXMgdXNlZCBmb3IgdGhlIGRlbGF5cyAqLworCXNsb3dtYXhmcmVxID0KKwkgICAgYWlfc2xvd2Nsa19mcmVxKHNpaSwgKHNpaS0+cHViLmNjcmV2ID49IDEwKSA/IGZhbHNlIDogdHJ1ZSwgY2MpOworCisJcGxsX29uX2RlbGF5ID0gKChzbG93bWF4ZnJlcSAqIHBsbF9kZWxheSkgKyA5OTk5OTkpIC8gMTAwMDAwMDsKKwlmcmVmX3NlbF9kZWxheSA9ICgoc2xvd21heGZyZXEgKiBGUkVGX0RFTEFZKSArIDk5OTk5OSkgLyAxMDAwMDAwOworCisJV19SRUcoJmNjLT5wbGxfb25fZGVsYXksIHBsbF9vbl9kZWxheSk7CisJV19SRUcoJmNjLT5mcmVmX3NlbF9kZWxheSwgZnJlZl9zZWxfZGVsYXkpOworfQorCisvKiBpbml0aWFsaXplIHBvd2VyIGNvbnRyb2wgZGVsYXkgcmVnaXN0ZXJzICovCit2b2lkIGFpX2Nsa2N0bF9pbml0KHNpX3QgKnNpaCkKK3sKKwlzaV9pbmZvX3QgKnNpaTsKKwl1aW50IG9yaWdpZHggPSAwOworCWNoaXBjcmVnc190ICpjYzsKKwlib29sIGZhc3Q7CisKKwlpZiAoIUNDQ1RMX0VOQUIoc2loKSkKKwkJcmV0dXJuOworCisJc2lpID0gU0lfSU5GTyhzaWgpOworCWZhc3QgPSBTSV9GQVNUKHNpaSk7CisJaWYgKCFmYXN0KSB7CisJCW9yaWdpZHggPSBzaWktPmN1cmlkeDsKKwkJY2MgPSAoY2hpcGNyZWdzX3QgKikgYWlfc2V0Y29yZShzaWgsIENDX0NPUkVfSUQsIDApOworCQlpZiAoY2MgPT0gTlVMTCkKKwkJCXJldHVybjsKKwl9IGVsc2UgeworCQljYyA9IChjaGlwY3JlZ3NfdCAqKSBDQ1JFR1NfRkFTVChzaWkpOworCQlpZiAoY2MgPT0gTlVMTCkKKwkJCXJldHVybjsKKwl9CisKKwkvKiBzZXQgYWxsIEluc3RhY2xrIGNoaXAgSUxQIHRvIDEgTUh6ICovCisJaWYgKHNpaC0+Y2NyZXYgPj0gMTApCisJCVNFVF9SRUcoJmNjLT5zeXN0ZW1fY2xrX2N0bCwgU1lDQ19DRF9NQVNLLAorCQkJKElMUF9ESVZfMU1IWiA8PCBTWUNDX0NEX1NISUZUKSk7CisKKwlhaV9jbGtjdGxfc2V0ZGVsYXkoc2lpLCAodm9pZCAqKWNjKTsKKworCWlmICghZmFzdCkKKwkJYWlfc2V0Y29yZWlkeChzaWgsIG9yaWdpZHgpOworfQorCisvKgorICogcmV0dXJuIHRoZSB2YWx1ZSBzdWl0YWJsZSBmb3Igd3JpdGluZyB0byB0aGUKKyAqIGRvdDExIGNvcmUgRkFTVF9QV1JVUF9ERUxBWSByZWdpc3RlcgorICovCit1MTYgYWlfY2xrY3RsX2Zhc3RfcHdydXBfZGVsYXkoc2lfdCAqc2loKQoreworCXNpX2luZm9fdCAqc2lpOworCXVpbnQgb3JpZ2lkeCA9IDA7CisJY2hpcGNyZWdzX3QgKmNjOworCXVpbnQgc2xvd21pbmZyZXE7CisJdTE2IGZwZGVsYXk7CisJdWludCBpbnRyX3ZhbCA9IDA7CisJYm9vbCBmYXN0OworCisJc2lpID0gU0lfSU5GTyhzaWgpOworCWlmIChQTVVDVExfRU5BQihzaWgpKSB7CisJCUlOVFJfT0ZGKHNpaSwgaW50cl92YWwpOworCQlmcGRlbGF5ID0gc2lfcG11X2Zhc3RfcHdydXBfZGVsYXkoc2loKTsKKwkJSU5UUl9SRVNUT1JFKHNpaSwgaW50cl92YWwpOworCQlyZXR1cm4gZnBkZWxheTsKKwl9CisKKwlpZiAoIUNDQ1RMX0VOQUIoc2loKSkKKwkJcmV0dXJuIDA7CisKKwlmYXN0ID0gU0lfRkFTVChzaWkpOworCWZwZGVsYXkgPSAwOworCWlmICghZmFzdCkgeworCQlvcmlnaWR4ID0gc2lpLT5jdXJpZHg7CisJCUlOVFJfT0ZGKHNpaSwgaW50cl92YWwpOworCQljYyA9IChjaGlwY3JlZ3NfdCAqKSBhaV9zZXRjb3JlKHNpaCwgQ0NfQ09SRV9JRCwgMCk7CisJCWlmIChjYyA9PSBOVUxMKQorCQkJZ290byBkb25lOworCX0gZWxzZSB7CisJCWNjID0gKGNoaXBjcmVnc190ICopIENDUkVHU19GQVNUKHNpaSk7CisJCWlmIChjYyA9PSBOVUxMKQorCQkJZ290byBkb25lOworCX0KKworCXNsb3dtaW5mcmVxID0gYWlfc2xvd2Nsa19mcmVxKHNpaSwgZmFsc2UsIGNjKTsKKwlmcGRlbGF5ID0gKCgoUl9SRUcoJmNjLT5wbGxfb25fZGVsYXkpICsgMikgKiAxMDAwMDAwKSArCisJCSAgIChzbG93bWluZnJlcSAtIDEpKSAvIHNsb3dtaW5mcmVxOworCisgZG9uZToKKwlpZiAoIWZhc3QpIHsKKwkJYWlfc2V0Y29yZWlkeChzaWgsIG9yaWdpZHgpOworCQlJTlRSX1JFU1RPUkUoc2lpLCBpbnRyX3ZhbCk7CisJfQorCXJldHVybiBmcGRlbGF5OworfQorCisvKiB0dXJuIHByaW1hcnkgeHRhbCBhbmQvb3IgcGxsIG9mZi9vbiAqLworaW50IGFpX2Nsa2N0bF94dGFsKHNpX3QgKnNpaCwgdWludCB3aGF0LCBib29sIG9uKQoreworCXNpX2luZm9fdCAqc2lpOworCXUzMiBpbiwgb3V0LCBvdXRlbjsKKworCXNpaSA9IFNJX0lORk8oc2loKTsKKworCXN3aXRjaCAoc2loLT5idXN0eXBlKSB7CisKKwljYXNlIFBDSV9CVVM6CisJCS8qIHBjaWUgY29yZSBkb2Vzbid0IGhhdmUgYW55IG1hcHBpbmcgdG8gY29udHJvbCB0aGUgeHRhbCBwdSAqLworCQlpZiAoUENJRShzaWkpKQorCQkJcmV0dXJuIC0xOworCisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChzaWktPnBidXMsIFBDSV9HUElPX0lOLCAmaW4pOworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoc2lpLT5wYnVzLCBQQ0lfR1BJT19PVVQsICZvdXQpOworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoc2lpLT5wYnVzLCBQQ0lfR1BJT19PVVRFTiwgJm91dGVuKTsKKworCQkvKgorCQkgKiBBdm9pZCBnbGl0Y2hpbmcgdGhlIGNsb2NrIGlmIEdQUlMgaXMgYWxyZWFkeSB1c2luZyBpdC4KKwkJICogV2UgY2FuJ3QgYWN0dWFsbHkgcmVhZCB0aGUgc3RhdGUgb2YgdGhlIFBMTFBEIHNvIHdlIGluZmVyIGl0CisJCSAqIGJ5IHRoZSB2YWx1ZSBvZiBYVEFMX1BVIHdoaWNoICppcyogcmVhZGFibGUgdmlhIGdwaW9pbi4KKwkJICovCisJCWlmIChvbiAmJiAoaW4gJiBQQ0lfQ0ZHX0dQSU9fWFRBTCkpCisJCQlyZXR1cm4gMDsKKworCQlpZiAod2hhdCAmIFhUQUwpCisJCQlvdXRlbiB8PSBQQ0lfQ0ZHX0dQSU9fWFRBTDsKKwkJaWYgKHdoYXQgJiBQTEwpCisJCQlvdXRlbiB8PSBQQ0lfQ0ZHX0dQSU9fUExMOworCisJCWlmIChvbikgeworCQkJLyogdHVybiBwcmltYXJ5IHh0YWwgb24gKi8KKwkJCWlmICh3aGF0ICYgWFRBTCkgeworCQkJCW91dCB8PSBQQ0lfQ0ZHX0dQSU9fWFRBTDsKKwkJCQlpZiAod2hhdCAmIFBMTCkKKwkJCQkJb3V0IHw9IFBDSV9DRkdfR1BJT19QTEw7CisJCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChzaWktPnBidXMsCisJCQkJCQkgICAgICAgUENJX0dQSU9fT1VULCBvdXQpOworCQkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoc2lpLT5wYnVzLAorCQkJCQkJICAgICAgIFBDSV9HUElPX09VVEVOLCBvdXRlbik7CisJCQkJdWRlbGF5KFhUQUxfT05fREVMQVkpOworCQkJfQorCisJCQkvKiB0dXJuIHBsbCBvbiAqLworCQkJaWYgKHdoYXQgJiBQTEwpIHsKKwkJCQlvdXQgJj0gflBDSV9DRkdfR1BJT19QTEw7CisJCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChzaWktPnBidXMsCisJCQkJCQkgICAgICAgUENJX0dQSU9fT1VULCBvdXQpOworCQkJCW1kZWxheSgyKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmICh3aGF0ICYgWFRBTCkKKwkJCQlvdXQgJj0gflBDSV9DRkdfR1BJT19YVEFMOworCQkJaWYgKHdoYXQgJiBQTEwpCisJCQkJb3V0IHw9IFBDSV9DRkdfR1BJT19QTEw7CisJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHNpaS0+cGJ1cywKKwkJCQkJICAgICAgIFBDSV9HUElPX09VVCwgb3V0KTsKKwkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoc2lpLT5wYnVzLAorCQkJCQkgICAgICAgUENJX0dQSU9fT1VURU4sIG91dGVuKTsKKwkJfQorCisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogIGNsb2NrIGNvbnRyb2wgcG9saWN5IGZ1bmN0aW9uIHRocm91Z2h0IGNoaXBjb21tb24KKyAqCisgKiAgICBzZXQgZHluYW1pYyBjbGsgY29udHJvbCBtb2RlIChmb3JjZXNsb3csIGZvcmNlZmFzdCwgZHluYW1pYykKKyAqICAgIHJldHVybnMgdHJ1ZSBpZiB3ZSBhcmUgZm9yY2luZyBmYXN0IGNsb2NrCisgKiAgICB0aGlzIGlzIGEgd3JhcHBlciBvdmVyIHRoZSBuZXh0IGludGVybmFsIGZ1bmN0aW9uCisgKiAgICAgIHRvIGFsbG93IGZsZXhpYmxlIHBvbGljeSBzZXR0aW5ncyBmb3Igb3V0c2lkZSBjYWxsZXIKKyAqLworYm9vbCBhaV9jbGtjdGxfY2Moc2lfdCAqc2loLCB1aW50IG1vZGUpCit7CisJc2lfaW5mb190ICpzaWk7CisKKwlzaWkgPSBTSV9JTkZPKHNpaCk7CisKKwkvKiBjaGlwY29tbW9uIGNvcmVzIHByaW9yIHRvIHJldjYgZG9uJ3Qgc3VwcG9ydCBkeW5hbWljIGNsb2NrIGNvbnRyb2wgKi8KKwlpZiAoc2loLT5jY3JldiA8IDYpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChQQ0lfRk9SQ0VIVChzaWkpKQorCQlyZXR1cm4gbW9kZSA9PSBDTEtfRkFTVDsKKworCXJldHVybiBfYWlfY2xrY3RsX2NjKHNpaSwgbW9kZSk7Cit9CisKKy8qIGNsayBjb250cm9sIG1lY2hhbmlzbSB0aHJvdWdoIGNoaXBjb21tb24sIG5vIHBvbGljeSBjaGVja2luZyAqLworc3RhdGljIGJvb2wgX2FpX2Nsa2N0bF9jYyhzaV9pbmZvX3QgKnNpaSwgdWludCBtb2RlKQoreworCXVpbnQgb3JpZ2lkeCA9IDA7CisJY2hpcGNyZWdzX3QgKmNjOworCXUzMiBzY2M7CisJdWludCBpbnRyX3ZhbCA9IDA7CisJYm9vbCBmYXN0ID0gU0lfRkFTVChzaWkpOworCisJLyogY2hpcGNvbW1vbiBjb3JlcyBwcmlvciB0byByZXY2IGRvbid0IHN1cHBvcnQgZHluYW1pYyBjbG9jayBjb250cm9sICovCisJaWYgKHNpaS0+cHViLmNjcmV2IDwgNikKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKCFmYXN0KSB7CisJCUlOVFJfT0ZGKHNpaSwgaW50cl92YWwpOworCQlvcmlnaWR4ID0gc2lpLT5jdXJpZHg7CisKKwkJaWYgKChzaWktPnB1Yi5idXN0eXBlID09IFNJX0JVUykgJiYKKwkJICAgIGFpX3NldGNvcmUoJnNpaS0+cHViLCBNSVBTMzNfQ09SRV9JRCwgMCkgJiYKKwkJICAgIChhaV9jb3JlcmV2KCZzaWktPnB1YikgPD0gNykgJiYgKHNpaS0+cHViLmNjcmV2ID49IDEwKSkKKwkJCWdvdG8gZG9uZTsKKworCQljYyA9IChjaGlwY3JlZ3NfdCAqKSBhaV9zZXRjb3JlKCZzaWktPnB1YiwgQ0NfQ09SRV9JRCwgMCk7CisJfSBlbHNlIHsKKwkJY2MgPSAoY2hpcGNyZWdzX3QgKikgQ0NSRUdTX0ZBU1Qoc2lpKTsKKwkJaWYgKGNjID09IE5VTEwpCisJCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKCFDQ0NUTF9FTkFCKCZzaWktPnB1YikgJiYgKHNpaS0+cHViLmNjcmV2IDwgMjApKQorCQlnb3RvIGRvbmU7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIENMS19GQVNUOgkJLyogRk9SQ0VIVCwgZmFzdCAocGxsKSBjbG9jayAqLworCQlpZiAoc2lpLT5wdWIuY2NyZXYgPCAxMCkgeworCQkJLyoKKwkJCSAqIGRvbid0IGZvcmdldCB0byBmb3JjZSB4dGFsIGJhY2sKKwkJCSAqIG9uIGJlZm9yZSB3ZSBjbGVhciBTQ0NfRFlOX1hUQUwuLgorCQkJICovCisJCQlhaV9jbGtjdGxfeHRhbCgmc2lpLT5wdWIsIFhUQUwsIE9OKTsKKwkJCVNFVF9SRUcoJmNjLT5zbG93X2Nsa19jdGwsCisJCQkJKFNDQ19YQyB8IFNDQ19GUyB8IFNDQ19JUCksIFNDQ19JUCk7CisJCX0gZWxzZSBpZiAoc2lpLT5wdWIuY2NyZXYgPCAyMCkgeworCQkJT1JfUkVHKCZjYy0+c3lzdGVtX2Nsa19jdGwsIFNZQ0NfSFIpOworCQl9IGVsc2UgeworCQkJT1JfUkVHKCZjYy0+Y2xrX2N0bF9zdCwgQ0NTX0ZPUkNFSFQpOworCQl9CisKKwkJLyogd2FpdCBmb3IgdGhlIFBMTCAqLworCQlpZiAoUE1VQ1RMX0VOQUIoJnNpaS0+cHViKSkgeworCQkJdTMyIGh0YXZhaWwgPSBDQ1NfSFRBVkFJTDsKKwkJCVNQSU5XQUlUKCgoUl9SRUcoJmNjLT5jbGtfY3RsX3N0KSAmIGh0YXZhaWwpCisJCQkJICA9PSAwKSwgUE1VX01BWF9UUkFOU0lUSU9OX0RMWSk7CisJCX0gZWxzZSB7CisJCQl1ZGVsYXkoUExMX0RFTEFZKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQ0xLX0RZTkFNSUM6CS8qIGVuYWJsZSBkeW5hbWljIGNsb2NrIGNvbnRyb2wgKi8KKwkJaWYgKHNpaS0+cHViLmNjcmV2IDwgMTApIHsKKwkJCXNjYyA9IFJfUkVHKCZjYy0+c2xvd19jbGtfY3RsKTsKKwkJCXNjYyAmPSB+KFNDQ19GUyB8IFNDQ19JUCB8IFNDQ19YQyk7CisJCQlpZiAoKHNjYyAmIFNDQ19TU19NQVNLKSAhPSBTQ0NfU1NfWFRBTCkKKwkJCQlzY2MgfD0gU0NDX1hDOworCQkJV19SRUcoJmNjLT5zbG93X2Nsa19jdGwsIHNjYyk7CisKKwkJCS8qCisJCQkgKiBmb3IgZHluYW1pYyBjb250cm9sLCB3ZSBoYXZlIHRvCisJCQkgKiByZWxlYXNlIG91ciB4dGFsX3B1ICJmb3JjZSBvbiIKKwkJCSAqLworCQkJaWYgKHNjYyAmIFNDQ19YQykKKwkJCQlhaV9jbGtjdGxfeHRhbCgmc2lpLT5wdWIsIFhUQUwsIE9GRik7CisJCX0gZWxzZSBpZiAoc2lpLT5wdWIuY2NyZXYgPCAyMCkgeworCQkJLyogSW5zdGFjbG9jayAqLworCQkJQU5EX1JFRygmY2MtPnN5c3RlbV9jbGtfY3RsLCB+U1lDQ19IUik7CisJCX0gZWxzZSB7CisJCQlBTkRfUkVHKCZjYy0+Y2xrX2N0bF9zdCwgfkNDU19GT1JDRUhUKTsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworIGRvbmU6CisJaWYgKCFmYXN0KSB7CisJCWFpX3NldGNvcmVpZHgoJnNpaS0+cHViLCBvcmlnaWR4KTsKKwkJSU5UUl9SRVNUT1JFKHNpaSwgaW50cl92YWwpOworCX0KKwlyZXR1cm4gbW9kZSA9PSBDTEtfRkFTVDsKK30KKworLyogQnVpbGQgZGV2aWNlIHBhdGguIFN1cHBvcnQgU0ksIFBDSSwgYW5kIEpUQUcgZm9yIG5vdy4gKi8KK2ludCBhaV9kZXZwYXRoKHNpX3QgKnNpaCwgY2hhciAqcGF0aCwgaW50IHNpemUpCit7CisJaW50IHNsZW47CisKKwlpZiAoIXBhdGggfHwgc2l6ZSA8PSAwKQorCQlyZXR1cm4gLTE7CisKKwlzd2l0Y2ggKHNpaC0+YnVzdHlwZSkgeworCWNhc2UgU0lfQlVTOgorCWNhc2UgSlRBR19CVVM6CisJCXNsZW4gPSBzbnByaW50ZihwYXRoLCAoc2l6ZV90KSBzaXplLCAic2IvJXUvIiwgYWlfY29yZWlkeChzaWgpKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQlVTOgorCQlzbGVuID0gc25wcmludGYocGF0aCwgKHNpemVfdCkgc2l6ZSwgInBjaS8ldS8ldS8iLAorCQkJKChzdHJ1Y3QgcGNpX2RldiAqKSgoU0lfSU5GTyhzaWgpKS0+cGJ1cykpLT5idXMtPm51bWJlciwKKwkJCVBDSV9TTE9UKAorCQkJICAgICgoc3RydWN0IHBjaV9kZXYgKikoKFNJX0lORk8oc2loKSktPnBidXMpKS0+ZGV2Zm4pKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlzbGVuID0gLTE7CisJCWJyZWFrOworCX0KKworCWlmIChzbGVuIDwgMCB8fCBzbGVuID49IHNpemUpIHsKKwkJcGF0aFswXSA9ICdcMCc7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogR2V0IGEgdmFyaWFibGUsIGJ1dCBvbmx5IGlmIGl0IGhhcyBhIGRldnBhdGggcHJlZml4ICovCitjaGFyICphaV9nZXRkZXZwYXRodmFyKHNpX3QgKnNpaCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwljaGFyIHZhcm5hbWVbU0lfREVWUEFUSF9CVUZTWiArIDMyXTsKKworCWFpX2RldnBhdGh2YXIoc2loLCB2YXJuYW1lLCBzaXplb2YodmFybmFtZSksIG5hbWUpOworCisJcmV0dXJuIGdldHZhcihOVUxMLCB2YXJuYW1lKTsKK30KKworLyogR2V0IGEgdmFyaWFibGUsIGJ1dCBvbmx5IGlmIGl0IGhhcyBhIGRldnBhdGggcHJlZml4ICovCitpbnQgYWlfZ2V0ZGV2cGF0aGludHZhcihzaV90ICpzaWgsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisjaWYgZGVmaW5lZChCQ01CVVNUWVBFKSAmJiAoQkNNQlVTVFlQRSA9PSBTSV9CVVMpCisJcmV0dXJuIGdldGludHZhcihOVUxMLCBuYW1lKTsKKyNlbHNlCisJY2hhciB2YXJuYW1lW1NJX0RFVlBBVEhfQlVGU1ogKyAzMl07CisKKwlhaV9kZXZwYXRodmFyKHNpaCwgdmFybmFtZSwgc2l6ZW9mKHZhcm5hbWUpLCBuYW1lKTsKKworCXJldHVybiBnZXRpbnR2YXIoTlVMTCwgdmFybmFtZSk7CisjZW5kaWYKK30KKworY2hhciAqYWlfZ2V0bnZyYW1mbHZhcihzaV90ICpzaWgsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIGdldHZhcihOVUxMLCBuYW1lKTsKK30KKworLyogQ29uY2F0ZW5hdGUgdGhlIGRldiBwYXRoIHdpdGggYSB2YXJuYW1lIGludG8gdGhlIGdpdmVuICd2YXInIGJ1ZmZlcgorICogYW5kIHJldHVybiB0aGUgJ3ZhcicgcG9pbnRlci4gTm90aGluZyBpcyBkb25lIHRvIHRoZSBhcmd1bWVudHMgaWYKKyAqIGxlbiA9PSAwIG9yIHZhciBpcyBOVUxMLCB2YXIgaXMgc3RpbGwgcmV0dXJuZWQuIE9uIG92ZXJmbG93LCB0aGUKKyAqIGZpcnN0IGNoYXIgd2lsbCBiZSBzZXQgdG8gJ1wwJy4KKyAqLworc3RhdGljIGNoYXIgKmFpX2RldnBhdGh2YXIoc2lfdCAqc2loLCBjaGFyICp2YXIsIGludCBsZW4sIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJdWludCBwYXRoX2xlbjsKKworCWlmICghdmFyIHx8IGxlbiA8PSAwKQorCQlyZXR1cm4gdmFyOworCisJaWYgKGFpX2RldnBhdGgoc2loLCB2YXIsIGxlbikgPT0gMCkgeworCQlwYXRoX2xlbiA9IHN0cmxlbih2YXIpOworCisJCWlmIChzdHJsZW4obmFtZSkgKyAxID4gKHVpbnQpIChsZW4gLSBwYXRoX2xlbikpCisJCQl2YXJbMF0gPSAnXDAnOworCQllbHNlCisJCQlzdHJuY3B5KHZhciArIHBhdGhfbGVuLCBuYW1lLCBsZW4gLSBwYXRoX2xlbiAtIDEpOworCX0KKworCXJldHVybiB2YXI7Cit9CisKKy8qIHJldHVybiB0cnVlIGlmIFBDSUUgY2FwYWJpbGl0eSBleGlzdHMgaW4gdGhlIHBjaSBjb25maWcgc3BhY2UgKi8KK3N0YXRpYyBfX3VzZWQgYm9vbCBhaV9pc3BjaWUoc2lfaW5mb190ICpzaWkpCit7CisJdTggY2FwX3B0cjsKKworCWlmIChzaWktPnB1Yi5idXN0eXBlICE9IFBDSV9CVVMpCisJCXJldHVybiBmYWxzZTsKKworCWNhcF9wdHIgPQorCSAgICBwY2ljb3JlX2ZpbmRfcGNpX2NhcGFiaWxpdHkoc2lpLT5wYnVzLCBQQ0lfQ0FQX0lEX0VYUCwgTlVMTCwKKwkJCQkJTlVMTCk7CisJaWYgKCFjYXBfcHRyKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBhaV9wY2lfd2FyMTYxNjUoc2lfdCAqc2loKQoreworCXNpX2luZm9fdCAqc2lpOworCisJc2lpID0gU0lfSU5GTyhzaWgpOworCisJcmV0dXJuIFBDSShzaWkpICYmIChzaWgtPmJ1c2NvcmVyZXYgPD0gMTApOworfQorCit2b2lkIGFpX3BjaV91cChzaV90ICpzaWgpCit7CisJc2lfaW5mb190ICpzaWk7CisKKwlzaWkgPSBTSV9JTkZPKHNpaCk7CisKKwkvKiBpZiBub3QgcGNpIGJ1cywgd2UncmUgZG9uZSAqLworCWlmIChzaWgtPmJ1c3R5cGUgIT0gUENJX0JVUykKKwkJcmV0dXJuOworCisJaWYgKFBDSV9GT1JDRUhUKHNpaSkpCisJCV9haV9jbGtjdGxfY2Moc2lpLCBDTEtfRkFTVCk7CisKKwlpZiAoUENJRShzaWkpKQorCQlwY2ljb3JlX3VwKHNpaS0+cGNoLCBTSV9QQ0lVUCk7CisKK30KKworLyogVW5jb25maWd1cmUgYW5kL29yIGFwcGx5IHZhcmlvdXMgV0FScyB3aGVuIHN5c3RlbSBpcyBnb2luZyB0byBzbGVlcCBtb2RlICovCit2b2lkIGFpX3BjaV9zbGVlcChzaV90ICpzaWgpCit7CisJc2lfaW5mb190ICpzaWk7CisKKwlzaWkgPSBTSV9JTkZPKHNpaCk7CisKKwlwY2ljb3JlX3NsZWVwKHNpaS0+cGNoKTsKK30KKworLyogVW5jb25maWd1cmUgYW5kL29yIGFwcGx5IHZhcmlvdXMgV0FScyB3aGVuIGdvaW5nIGRvd24gKi8KK3ZvaWQgYWlfcGNpX2Rvd24oc2lfdCAqc2loKQoreworCXNpX2luZm9fdCAqc2lpOworCisJc2lpID0gU0lfSU5GTyhzaWgpOworCisJLyogaWYgbm90IHBjaSBidXMsIHdlJ3JlIGRvbmUgKi8KKwlpZiAoc2loLT5idXN0eXBlICE9IFBDSV9CVVMpCisJCXJldHVybjsKKworCS8qIHJlbGVhc2UgRk9SQ0VIVCBzaW5jZSBjaGlwIGlzIGdvaW5nIHRvICJkb3duIiBzdGF0ZSAqLworCWlmIChQQ0lfRk9SQ0VIVChzaWkpKQorCQlfYWlfY2xrY3RsX2NjKHNpaSwgQ0xLX0RZTkFNSUMpOworCisJcGNpY29yZV9kb3duKHNpaS0+cGNoLCBTSV9QQ0lET1dOKTsKK30KKworLyoKKyAqIENvbmZpZ3VyZSB0aGUgcGNpIGNvcmUgZm9yIHBjaSBjbGllbnQgKE5JQykgYWN0aW9uCisgKiBjb3JlbWFzayBpcyB0aGUgYml0dmVjIG9mIGNvcmVzIGJ5IGluZGV4IHRvIGJlIGVuYWJsZWQuCisgKi8KK3ZvaWQgYWlfcGNpX3NldHVwKHNpX3QgKnNpaCwgdWludCBjb3JlbWFzaykKK3sKKwlzaV9pbmZvX3QgKnNpaTsKKwlzdHJ1Y3Qgc2JwY2lyZWdzICpwY2lyZWdzID0gTlVMTDsKKwl1MzIgc2lmbGFnID0gMCwgdzsKKwl1aW50IGlkeCA9IDA7CisKKwlzaWkgPSBTSV9JTkZPKHNpaCk7CisKKwlpZiAoc2lpLT5wdWIuYnVzdHlwZSAhPSBQQ0lfQlVTKQorCQlyZXR1cm47CisKKwlpZiAoUENJKHNpaSkpIHsKKwkJLyogZ2V0IGN1cnJlbnQgY29yZSBpbmRleCAqLworCQlpZHggPSBzaWktPmN1cmlkeDsKKworCQkvKiB3ZSBpbnRlcnJ1cHQgb24gdGhpcyBiYWNrcGxhbmUgZmxhZyBudW1iZXIgKi8KKwkJc2lmbGFnID0gYWlfZmxhZyhzaWgpOworCisJCS8qIHN3aXRjaCBvdmVyIHRvIHBjaSBjb3JlICovCisJCXBjaXJlZ3MgPSBhaV9zZXRjb3JlaWR4KHNpaCwgc2lpLT5wdWIuYnVzY29yZWlkeCk7CisJfQorCisJLyoKKwkgKiBFbmFibGUgc2ItPnBjaSBpbnRlcnJ1cHRzLiAgQXNzdW1lCisJICogUENJIHJldiAyLjMgc3VwcG9ydCB3YXMgYWRkZWQgaW4gcGNpIGNvcmUgcmV2IDYgYW5kIHRoaW5ncyBjaGFuZ2VkLi4KKwkgKi8KKwlpZiAoUENJRShzaWkpIHx8IChQQ0koc2lpKSAmJiAoKHNpaS0+cHViLmJ1c2NvcmVyZXYpID49IDYpKSkgeworCQkvKiBwY2kgY29uZmlnIHdyaXRlIHRvIHNldCB0aGlzIGNvcmUgYml0IGluIFBDSUludE1hc2sgKi8KKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHNpaS0+cGJ1cywgUENJX0lOVF9NQVNLLCAmdyk7CisJCXcgfD0gKGNvcmVtYXNrIDw8IFBDSV9TQklNX1NISUZUKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChzaWktPnBidXMsIFBDSV9JTlRfTUFTSywgdyk7CisJfSBlbHNlIHsKKwkJLyogc2V0IHNiaW50dmVjIGJpdCBmb3Igb3VyIGZsYWcgbnVtYmVyICovCisJCWFpX3NldGludChzaWgsIHNpZmxhZyk7CisJfQorCisJaWYgKFBDSShzaWkpKSB7CisJCU9SX1JFRygmcGNpcmVncy0+c2J0b3BjaTIsCisJCSAgICAgICAoU0JUT1BDSV9QUkVGIHwgU0JUT1BDSV9CVVJTVCkpOworCQlpZiAoc2lpLT5wdWIuYnVzY29yZXJldiA+PSAxMSkgeworCQkJT1JfUkVHKCZwY2lyZWdzLT5zYnRvcGNpMiwKKwkJCSAgICAgICBTQlRPUENJX1JDX1JFQURNVUxUSSk7CisJCQl3ID0gUl9SRUcoJnBjaXJlZ3MtPmNsa3J1bik7CisJCQlXX1JFRygmcGNpcmVncy0+Y2xrcnVuLAorCQkJICAgICAgKHcgfCBQQ0lfQ0xLUlVOX0RTQkwpKTsKKwkJCXcgPSBSX1JFRygmcGNpcmVncy0+Y2xrcnVuKTsKKwkJfQorCisJCS8qIHN3aXRjaCBiYWNrIHRvIHByZXZpb3VzIGNvcmUgKi8KKwkJYWlfc2V0Y29yZWlkeChzaWgsIGlkeCk7CisJfQorfQorCisvKgorICogRml4dXAgU1JPTWxlc3MgUENJIGRldmljZSdzIGNvbmZpZ3VyYXRpb24uCisgKiBUaGUgY3VycmVudCBjb3JlIG1heSBiZSBjaGFuZ2VkIHVwb24gcmV0dXJuLgorICovCitpbnQgYWlfcGNpX2ZpeGNmZyhzaV90ICpzaWgpCit7CisJdWludCBvcmlnaWR4LCBwY2lpZHg7CisJc3RydWN0IHNicGNpcmVncyAqcGNpcmVncyA9IE5VTEw7CisJc2JwY2llcmVnc190ICpwY2llcmVncyA9IE5VTEw7CisJdm9pZCAqcmVncyA9IE5VTEw7CisJdTE2IHZhbDE2LCAqcmVnMTYgPSBOVUxMOworCisJc2lfaW5mb190ICpzaWkgPSBTSV9JTkZPKHNpaCk7CisKKwkvKiBGaXh1cCBQSSBpbiBTUk9NIHNoYWRvdyBhcmVhIHRvIGVuYWJsZSB0aGUgY29ycmVjdCBQQ0kgY29yZSBhY2Nlc3MgKi8KKwkvKiBzYXZlIHRoZSBjdXJyZW50IGluZGV4ICovCisJb3JpZ2lkeCA9IGFpX2NvcmVpZHgoJnNpaS0+cHViKTsKKworCS8qIGNoZWNrICdwaScgaXMgY29ycmVjdCBhbmQgZml4IGl0IGlmIG5vdCAqLworCWlmIChzaWktPnB1Yi5idXNjb3JldHlwZSA9PSBQQ0lFX0NPUkVfSUQpIHsKKwkJcGNpZXJlZ3MgPSBhaV9zZXRjb3JlKCZzaWktPnB1YiwgUENJRV9DT1JFX0lELCAwKTsKKwkJcmVncyA9IHBjaWVyZWdzOworCQlyZWcxNiA9ICZwY2llcmVncy0+c3Byb21bU1JTSF9QSV9PRkZTRVRdOworCX0gZWxzZSBpZiAoc2lpLT5wdWIuYnVzY29yZXR5cGUgPT0gUENJX0NPUkVfSUQpIHsKKwkJcGNpcmVncyA9IGFpX3NldGNvcmUoJnNpaS0+cHViLCBQQ0lfQ09SRV9JRCwgMCk7CisJCXJlZ3MgPSBwY2lyZWdzOworCQlyZWcxNiA9ICZwY2lyZWdzLT5zcHJvbVtTUlNIX1BJX09GRlNFVF07CisJfQorCXBjaWlkeCA9IGFpX2NvcmVpZHgoJnNpaS0+cHViKTsKKwl2YWwxNiA9IFJfUkVHKHJlZzE2KTsKKwlpZiAoKCh2YWwxNiAmIFNSU0hfUElfTUFTSykgPj4gU1JTSF9QSV9TSElGVCkgIT0gKHUxNikgcGNpaWR4KSB7CisJCXZhbDE2ID0KKwkJICAgICh1MTYpIChwY2lpZHggPDwgU1JTSF9QSV9TSElGVCkgfCAodmFsMTYgJgorCQkJCQkJCSAgflNSU0hfUElfTUFTSyk7CisJCVdfUkVHKHJlZzE2LCB2YWwxNik7CisJfQorCisJLyogcmVzdG9yZSB0aGUgb3JpZ2luYWwgaW5kZXggKi8KKwlhaV9zZXRjb3JlaWR4KCZzaWktPnB1Yiwgb3JpZ2lkeCk7CisKKwlwY2ljb3JlX2h3dXAoc2lpLT5wY2gpOworCXJldHVybiAwOworfQorCisvKiBtYXNrJnNldCBncGlvY29udHJvbCBiaXRzICovCit1MzIgYWlfZ3Bpb2NvbnRyb2woc2lfdCAqc2loLCB1MzIgbWFzaywgdTMyIHZhbCwgdTggcHJpb3JpdHkpCit7CisJdWludCByZWdvZmY7CisKKwlyZWdvZmYgPSAwOworCisJLyogZ3Bpb3MgY291bGQgYmUgc2hhcmVkIG9uIHJvdXRlciBwbGF0Zm9ybXMKKwkgKiBpZ25vcmUgcmVzZXJ2YXRpb24gaWYgaXQncyBoaWdoIHByaW9yaXR5IChlLmcuLCB0ZXN0IGFwcHMpCisJICovCisJaWYgKChwcmlvcml0eSAhPSBHUElPX0hJX1BSSU9SSVRZKSAmJgorCSAgICAoc2loLT5idXN0eXBlID09IFNJX0JVUykgJiYgKHZhbCB8fCBtYXNrKSkgeworCQltYXNrID0gcHJpb3JpdHkgPyAoYWlfZ3Bpb3Jlc2VydmF0aW9uICYgbWFzaykgOgorCQkgICAgKChhaV9ncGlvcmVzZXJ2YXRpb24gfCBtYXNrKSAmIH4oYWlfZ3Bpb3Jlc2VydmF0aW9uKSk7CisJCXZhbCAmPSBtYXNrOworCX0KKworCXJlZ29mZiA9IG9mZnNldG9mKGNoaXBjcmVnc190LCBncGlvY29udHJvbCk7CisJcmV0dXJuIGFpX2NvcmVyZWcoc2loLCBTSV9DQ19JRFgsIHJlZ29mZiwgbWFzaywgdmFsKTsKK30KKwordm9pZCBhaV9jaGlwY29udHJsX2VwYTQzMzEoc2lfdCAqc2loLCBib29sIG9uKQoreworCXNpX2luZm9fdCAqc2lpOworCWNoaXBjcmVnc190ICpjYzsKKwl1aW50IG9yaWdpZHg7CisJdTMyIHZhbDsKKworCXNpaSA9IFNJX0lORk8oc2loKTsKKwlvcmlnaWR4ID0gYWlfY29yZWlkeChzaWgpOworCisJY2MgPSAoY2hpcGNyZWdzX3QgKikgYWlfc2V0Y29yZShzaWgsIENDX0NPUkVfSUQsIDApOworCisJdmFsID0gUl9SRUcoJmNjLT5jaGlwY29udHJvbCk7CisKKwlpZiAob24pIHsKKwkJaWYgKHNpaC0+Y2hpcHBrZyA9PSA5IHx8IHNpaC0+Y2hpcHBrZyA9PSAweGIpIHsKKwkJCS8qIEV4dCBQQSBDb250cm9scyBmb3IgNDMzMSAxMng5IFBhY2thZ2UgKi8KKwkJCVdfUkVHKCZjYy0+Y2hpcGNvbnRyb2wsIHZhbCB8CisJCQkgICAgICAoQ0NUUkw0MzMxX0VYVFBBX0VOIHwKKwkJCSAgICAgICBDQ1RSTDQzMzFfRVhUUEFfT05fR1BJTzJfNSkpOworCQl9IGVsc2UgeworCQkJLyogRXh0IFBBIENvbnRyb2xzIGZvciA0MzMxIDEyeDEyIFBhY2thZ2UgKi8KKwkJCVdfUkVHKCZjYy0+Y2hpcGNvbnRyb2wsCisJCQkgICAgICB2YWwgfCAoQ0NUUkw0MzMxX0VYVFBBX0VOKSk7CisJCX0KKwl9IGVsc2UgeworCQl2YWwgJj0gfihDQ1RSTDQzMzFfRVhUUEFfRU4gfCBDQ1RSTDQzMzFfRVhUUEFfT05fR1BJTzJfNSk7CisJCVdfUkVHKCZjYy0+Y2hpcGNvbnRyb2wsIHZhbCk7CisJfQorCisJYWlfc2V0Y29yZWlkeChzaWgsIG9yaWdpZHgpOworfQorCisvKiBFbmFibGUgQlQtQ09FWCAmIEV4LVBBIGZvciA0MzEzICovCit2b2lkIGFpX2VwYV80MzEzd2FyKHNpX3QgKnNpaCkKK3sKKwlzaV9pbmZvX3QgKnNpaTsKKwljaGlwY3JlZ3NfdCAqY2M7CisJdWludCBvcmlnaWR4OworCisJc2lpID0gU0lfSU5GTyhzaWgpOworCW9yaWdpZHggPSBhaV9jb3JlaWR4KHNpaCk7CisKKwljYyA9IChjaGlwY3JlZ3NfdCAqKSBhaV9zZXRjb3JlKHNpaCwgQ0NfQ09SRV9JRCwgMCk7CisKKwkvKiBFUEEgRml4ICovCisJV19SRUcoJmNjLT5ncGlvY29udHJvbCwKKwkgICAgICBSX1JFRygmY2MtPmdwaW9jb250cm9sKSB8IEdQSU9fQ1RSTF9FUEFfRU5fTUFTSyk7CisKKwlhaV9zZXRjb3JlaWR4KHNpaCwgb3JpZ2lkeCk7Cit9CisKKy8qIGNoZWNrIGlmIHRoZSBkZXZpY2UgaXMgcmVtb3ZlZCAqLworYm9vbCBhaV9kZXZpY2VyZW1vdmVkKHNpX3QgKnNpaCkKK3sKKwl1MzIgdzsKKwlzaV9pbmZvX3QgKnNpaTsKKworCXNpaSA9IFNJX0lORk8oc2loKTsKKworCXN3aXRjaCAoc2loLT5idXN0eXBlKSB7CisJY2FzZSBQQ0lfQlVTOgorCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoc2lpLT5wYnVzLCBQQ0lfVkVORE9SX0lELCAmdyk7CisJCWlmICgodyAmIDB4RkZGRikgIT0gUENJX1ZFTkRPUl9JRF9CUk9BRENPTSkKKwkJCXJldHVybiB0cnVlOworCQlicmVhazsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCitib29sIGFpX2lzX3Nwcm9tX2F2YWlsYWJsZShzaV90ICpzaWgpCit7CisJaWYgKHNpaC0+Y2NyZXYgPj0gMzEpIHsKKwkJc2lfaW5mb190ICpzaWk7CisJCXVpbnQgb3JpZ2lkeDsKKwkJY2hpcGNyZWdzX3QgKmNjOworCQl1MzIgc3JvbWN0cmw7CisKKwkJaWYgKChzaWgtPmNjY2FwcyAmIENDX0NBUF9TUk9NKSA9PSAwKQorCQkJcmV0dXJuIGZhbHNlOworCisJCXNpaSA9IFNJX0lORk8oc2loKTsKKwkJb3JpZ2lkeCA9IHNpaS0+Y3VyaWR4OworCQljYyA9IGFpX3NldGNvcmVpZHgoc2loLCBTSV9DQ19JRFgpOworCQlzcm9tY3RybCA9IFJfUkVHKCZjYy0+c3JvbWNvbnRyb2wpOworCQlhaV9zZXRjb3JlaWR4KHNpaCwgb3JpZ2lkeCk7CisJCXJldHVybiBzcm9tY3RybCAmIFNSQ19QUkVTRU5UOworCX0KKworCXN3aXRjaCAoc2loLT5jaGlwKSB7CisJY2FzZSBCQ000MzI5X0NISVBfSUQ6CisJCXJldHVybiAoc2loLT5jaGlwc3QgJiBDU1Q0MzI5X1NQUk9NX1NFTCkgIT0gMDsKKwljYXNlIEJDTTQzMTlfQ0hJUF9JRDoKKwkJcmV0dXJuIChzaWgtPmNoaXBzdCAmIENTVDQzMTlfU1BST01fU0VMKSAhPSAwOworCWNhc2UgQkNNNDMzNl9DSElQX0lEOgorCQlyZXR1cm4gKHNpaC0+Y2hpcHN0ICYgQ1NUNDMzNl9TUFJPTV9QUkVTRU5UKSAhPSAwOworCWNhc2UgQkNNNDMzMF9DSElQX0lEOgorCQlyZXR1cm4gKHNpaC0+Y2hpcHN0ICYgQ1NUNDMzMF9TUFJPTV9QUkVTRU5UKSAhPSAwOworCWNhc2UgQkNNNDMxM19DSElQX0lEOgorCQlyZXR1cm4gKHNpaC0+Y2hpcHN0ICYgQ1NUNDMxM19TUFJPTV9QUkVTRU5UKSAhPSAwOworCWNhc2UgQkNNNDMzMV9DSElQX0lEOgorCQlyZXR1cm4gKHNpaC0+Y2hpcHN0ICYgQ1NUNDMzMV9TUFJPTV9QUkVTRU5UKSAhPSAwOworCWRlZmF1bHQ6CisJCXJldHVybiB0cnVlOworCX0KK30KKworYm9vbCBhaV9pc19vdHBfZGlzYWJsZWQoc2lfdCAqc2loKQoreworCXN3aXRjaCAoc2loLT5jaGlwKSB7CisJY2FzZSBCQ000MzI5X0NISVBfSUQ6CisJCXJldHVybiAoc2loLT5jaGlwc3QgJiBDU1Q0MzI5X1NQUk9NX09UUF9TRUxfTUFTSykgPT0KKwkJICAgIENTVDQzMjlfT1RQX1BXUkROOworCWNhc2UgQkNNNDMxOV9DSElQX0lEOgorCQlyZXR1cm4gKHNpaC0+Y2hpcHN0ICYgQ1NUNDMxOV9TUFJPTV9PVFBfU0VMX01BU0spID09CisJCSAgICBDU1Q0MzE5X09UUF9QV1JETjsKKwljYXNlIEJDTTQzMzZfQ0hJUF9JRDoKKwkJcmV0dXJuIChzaWgtPmNoaXBzdCAmIENTVDQzMzZfT1RQX1BSRVNFTlQpID09IDA7CisJY2FzZSBCQ000MzMwX0NISVBfSUQ6CisJCXJldHVybiAoc2loLT5jaGlwc3QgJiBDU1Q0MzMwX09UUF9QUkVTRU5UKSA9PSAwOworCWNhc2UgQkNNNDMxM19DSElQX0lEOgorCQlyZXR1cm4gKHNpaC0+Y2hpcHN0ICYgQ1NUNDMxM19PVFBfUFJFU0VOVCkgPT0gMDsKKwkJLyogVGhlc2UgY2hpcHMgYWx3YXlzIGhhdmUgdGhlaXIgT1RQIG9uICovCisJY2FzZSBCQ000MzIyNF9DSElQX0lEOgorCWNhc2UgQkNNNDMyMjVfQ0hJUF9JRDoKKwljYXNlIEJDTTQzNDIxX0NISVBfSUQ6CisJY2FzZSBCQ000MzIzNV9DSElQX0lEOgorCWNhc2UgQkNNNDMyMzZfQ0hJUF9JRDoKKwljYXNlIEJDTTQzMjM4X0NISVBfSUQ6CisJY2FzZSBCQ000MzMxX0NISVBfSUQ6CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworYm9vbCBhaV9pc19vdHBfcG93ZXJlZChzaV90ICpzaWgpCit7CisJaWYgKFBNVUNUTF9FTkFCKHNpaCkpCisJCXJldHVybiBzaV9wbXVfaXNfb3RwX3Bvd2VyZWQoc2loKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBhaV9vdHBfcG93ZXIoc2lfdCAqc2loLCBib29sIG9uKQoreworCWlmIChQTVVDVExfRU5BQihzaWgpKQorCQlzaV9wbXVfb3RwX3Bvd2VyKHNpaCwgb24pOworCXVkZWxheSgxMDAwKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvYWl1dGlscy5oIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy9haXV0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk4MDk5ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvYWl1dGlscy5oCkBAIC0wLDAgKzEsNTQ2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDExIEJyb2FkY29tIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZglfYWl1dGlsc19oXworI2RlZmluZQlfYWl1dGlsc19oXworCisvKiBjcHAgY29udG9ydGlvbnMgdG8gY29uY2F0ZW5hdGUgdy9hcmcgcHJlc2NhbiAqLworI2lmbmRlZiBQQUQKKyNkZWZpbmUJX1BBRExJTkUobGluZSkJcGFkICMjIGxpbmUKKyNkZWZpbmUJX1hTVFIobGluZSkJX1BBRExJTkUobGluZSkKKyNkZWZpbmUJUEFECQlfWFNUUihfX0xJTkVfXykKKyNlbmRpZgorCisvKiBJbmNsdWRlIHRoZSBzb2NpIHNwZWNpZmljIGZpbGVzICovCisjaW5jbHVkZSA8YWlkbXAuaD4KKworLyoKKyAqIFNPQyBJbnRlcmNvbm5lY3QgQWRkcmVzcyBNYXAuCisgKiBBbGwgcmVnaW9ucyBtYXkgbm90IGV4aXN0IG9uIGFsbCBjaGlwcy4KKyAqLworLyogUGh5c2ljYWwgU0RSQU0gKi8KKyNkZWZpbmUgU0lfU0RSQU1fQkFTRQkJMHgwMDAwMDAwMAorLyogSG9zdCBNb2RlIHNiMnBjaXRyYW5zbGF0aW9uMCAoNjQgTUIpICovCisjZGVmaW5lIFNJX1BDSV9NRU0JCTB4MDgwMDAwMDAKKyNkZWZpbmUgU0lfUENJX01FTV9TWgkJKDY0ICogMTAyNCAqIDEwMjQpCisvKiBIb3N0IE1vZGUgc2IycGNpdHJhbnNsYXRpb24xICg2NCBNQikgKi8KKyNkZWZpbmUgU0lfUENJX0NGRwkJMHgwYzAwMDAwMAorLyogQnl0ZXN3YXBwZWQgUGh5c2ljYWwgU0RSQU0gKi8KKyNkZWZpbmUJU0lfU0RSQU1fU1dBUFBFRAkweDEwMDAwMDAwCisvKiBSZWdpb24gMiBmb3Igc2RyYW0gKDUxMiBNQikgKi8KKyNkZWZpbmUgU0lfU0RSQU1fUjIJCTB4ODAwMDAwMDAKKworI2lmZGVmIFNJX0VOVU1fQkFTRV9WQVJJQUJMRQorI2RlZmluZSBTSV9FTlVNX0JBU0UJCShzaWktPnB1Yi5zaV9lbnVtX2Jhc2UpCisjZWxzZQorI2RlZmluZSBTSV9FTlVNX0JBU0UJCTB4MTgwMDAwMDAJLyogRW51bWVyYXRpb24gc3BhY2UgYmFzZSAqLworI2VuZGlmCQkJCS8qIFNJX0VOVU1fQkFTRV9WQVJJQUJMRSAqLworCisvKiBXcmFwcGVyIHNwYWNlIGJhc2UgKi8KKyNkZWZpbmUgU0lfV1JBUF9CQVNFCQkweDE4MTAwMDAwCisvKiBlYWNoIGNvcmUgZ2V0cyA0S2J5dGVzIGZvciByZWdpc3RlcnMgKi8KKyNkZWZpbmUgU0lfQ09SRV9TSVpFCQkweDEwMDAKKy8qCisgKiBNYXggY29yZXMgKHRoaXMgaXMgYXJiaXRyYXJ5LCBmb3Igc29mdHdhcmUKKyAqIGNvbnZlbmllbmNlIGFuZCBjb3VsZCBiZSBjaGFuZ2VkIGlmIHdlCisgKiBtYWtlIGFueSBsYXJnZXIgY2hpcHMKKyAqLworI2RlZmluZQlTSV9NQVhDT1JFUwkJMTYKKworLyogT24tY2hpcCBSQU0gb24gY2hpcHMgdGhhdCBhbHNvIGhhdmUgRERSICovCisjZGVmaW5lCVNJX0ZBU1RSQU0JCTB4MTkwMDAwMDAKKyNkZWZpbmUJU0lfRkFTVFJBTV9TV0FQUEVECTB4MTk4MDAwMDAKKworLyogRmxhc2ggUmVnaW9uIDIgKHJlZ2lvbiAxIHNoYWRvd2VkIGhlcmUpICovCisjZGVmaW5lCVNJX0ZMQVNIMgkJMHgxYzAwMDAwMAorLyogU2l6ZSBvZiBGbGFzaCBSZWdpb24gMiAqLworI2RlZmluZQlTSV9GTEFTSDJfU1oJCTB4MDIwMDAwMDAKKy8qIEFSTSBDb3J0ZXgtTTMgUk9NICovCisjZGVmaW5lCVNJX0FSTUNNM19ST00JCTB4MWUwMDAwMDAKKy8qIE1JUFMgRmxhc2ggUmVnaW9uIDEgKi8KKyNkZWZpbmUJU0lfRkxBU0gxCQkweDFmYzAwMDAwCisvKiBNSVBTIFNpemUgb2YgRmxhc2ggUmVnaW9uIDEgKi8KKyNkZWZpbmUJU0lfRkxBU0gxX1NaCQkweDAwNDAwMDAwCisvKiBBUk03VERNSS1TIFJPTSAqLworI2RlZmluZQlTSV9BUk03U19ST00JCTB4MjAwMDAwMDAKKy8qIEFSTSBDb3J0ZXgtTTMgU1JBTSBSZWdpb24gMiAqLworI2RlZmluZQlTSV9BUk1DTTNfU1JBTTIJCTB4NjAwMDAwMDAKKy8qIEFSTTdURE1JLVMgU1JBTSBSZWdpb24gMiAqLworI2RlZmluZQlTSV9BUk03U19TUkFNMgkJMHg4MDAwMDAwMAorLyogQVJNIEZsYXNoIFJlZ2lvbiAxICovCisjZGVmaW5lCVNJX0FSTV9GTEFTSDEJCTB4ZmZmZjAwMDAKKy8qIEFSTSBTaXplIG9mIEZsYXNoIFJlZ2lvbiAxICovCisjZGVmaW5lCVNJX0FSTV9GTEFTSDFfU1oJMHgwMDAxMDAwMAorCisvKiBDbGllbnQgTW9kZSBzYjJwY2l0cmFuc2xhdGlvbjIgKDEgR0IpICovCisjZGVmaW5lIFNJX1BDSV9ETUEJCTB4NDAwMDAwMDAKKy8qIENsaWVudCBNb2RlIHNiMnBjaXRyYW5zbGF0aW9uMiAoMSBHQikgKi8KKyNkZWZpbmUgU0lfUENJX0RNQTIJCTB4ODAwMDAwMDAKKy8qIENsaWVudCBNb2RlIHNiMnBjaXRyYW5zbGF0aW9uMiBzaXplIGluIGJ5dGVzICovCisjZGVmaW5lIFNJX1BDSV9ETUFfU1oJCTB4NDAwMDAwMDAKKy8qIFBDSUUgQ2xpZW50IE1vZGUgc2IycGNpdHJhbnNsYXRpb24yICgyIFpldHRhQnl0ZXMpLCBsb3cgMzIgYml0cyAqLworI2RlZmluZSBTSV9QQ0lFX0RNQV9MMzIJCTB4MDAwMDAwMDAKKy8qIFBDSUUgQ2xpZW50IE1vZGUgc2IycGNpdHJhbnNsYXRpb24yICgyIFpldHRhQnl0ZXMpLCBoaWdoIDMyIGJpdHMgKi8KKyNkZWZpbmUgU0lfUENJRV9ETUFfSDMyCQkweDgwMDAwMDAwCisKKy8qIGNvcmUgY29kZXMgKi8KKyNkZWZpbmUJTk9ERVZfQ09SRV9JRAkJMHg3MDAJLyogSW52YWxpZCBjb3JlaWQgKi8KKyNkZWZpbmUJQ0NfQ09SRV9JRAkJMHg4MDAJLyogY2hpcGNvbW1vbiBjb3JlICovCisjZGVmaW5lCUlMSU5FMjBfQ09SRV9JRAkJMHg4MDEJLyogaWxpbmUyMCBjb3JlICovCisjZGVmaW5lCVNSQU1fQ09SRV9JRAkJMHg4MDIJLyogc3JhbSBjb3JlICovCisjZGVmaW5lCVNEUkFNX0NPUkVfSUQJCTB4ODAzCS8qIHNkcmFtIGNvcmUgKi8KKyNkZWZpbmUJUENJX0NPUkVfSUQJCTB4ODA0CS8qIHBjaSBjb3JlICovCisjZGVmaW5lCU1JUFNfQ09SRV9JRAkJMHg4MDUJLyogbWlwcyBjb3JlICovCisjZGVmaW5lCUVORVRfQ09SRV9JRAkJMHg4MDYJLyogZW5ldCBtYWMgY29yZSAqLworI2RlZmluZQlDT0RFQ19DT1JFX0lECQkweDgwNwkvKiB2OTAgY29kZWMgY29yZSAqLworI2RlZmluZQlVU0JfQ09SRV9JRAkJMHg4MDgJLyogdXNiIDEuMSBob3N0L2RldmljZSBjb3JlICovCisjZGVmaW5lCUFEU0xfQ09SRV9JRAkJMHg4MDkJLyogQURTTCBjb3JlICovCisjZGVmaW5lCUlMSU5FMTAwX0NPUkVfSUQJMHg4MGEJLyogaWxpbmUxMDAgY29yZSAqLworI2RlZmluZQlJUFNFQ19DT1JFX0lECQkweDgwYgkvKiBpcHNlYyBjb3JlICovCisjZGVmaW5lCVVUT1BJQV9DT1JFX0lECQkweDgwYwkvKiB1dG9waWEgY29yZSAqLworI2RlZmluZQlQQ01DSUFfQ09SRV9JRAkJMHg4MGQJLyogcGNtY2lhIGNvcmUgKi8KKyNkZWZpbmUJU09DUkFNX0NPUkVfSUQJCTB4ODBlCS8qIGludGVybmFsIG1lbW9yeSBjb3JlICovCisjZGVmaW5lCU1FTUNfQ09SRV9JRAkJMHg4MGYJLyogbWVtYyBzZHJhbSBjb3JlICovCisjZGVmaW5lCU9GRE1fQ09SRV9JRAkJMHg4MTAJLyogT0ZETSBwaHkgY29yZSAqLworI2RlZmluZQlFWFRJRl9DT1JFX0lECQkweDgxMQkvKiBleHRlcm5hbCBpbnRlcmZhY2UgY29yZSAqLworI2RlZmluZQlEMTFfQ09SRV9JRAkJMHg4MTIJLyogODAyLjExIE1BQyBjb3JlICovCisjZGVmaW5lCUFQSFlfQ09SRV9JRAkJMHg4MTMJLyogODAyLjExYSBwaHkgY29yZSAqLworI2RlZmluZQlCUEhZX0NPUkVfSUQJCTB4ODE0CS8qIDgwMi4xMWIgcGh5IGNvcmUgKi8KKyNkZWZpbmUJR1BIWV9DT1JFX0lECQkweDgxNQkvKiA4MDIuMTFnIHBoeSBjb3JlICovCisjZGVmaW5lCU1JUFMzM19DT1JFX0lECQkweDgxNgkvKiBtaXBzMzMwMiBjb3JlICovCisjZGVmaW5lCVVTQjExSF9DT1JFX0lECQkweDgxNwkvKiB1c2IgMS4xIGhvc3QgY29yZSAqLworI2RlZmluZQlVU0IxMURfQ09SRV9JRAkJMHg4MTgJLyogdXNiIDEuMSBkZXZpY2UgY29yZSAqLworI2RlZmluZQlVU0IyMEhfQ09SRV9JRAkJMHg4MTkJLyogdXNiIDIuMCBob3N0IGNvcmUgKi8KKyNkZWZpbmUJVVNCMjBEX0NPUkVfSUQJCTB4ODFhCS8qIHVzYiAyLjAgZGV2aWNlIGNvcmUgKi8KKyNkZWZpbmUJU0RJT0hfQ09SRV9JRAkJMHg4MWIJLyogc2RpbyBob3N0IGNvcmUgKi8KKyNkZWZpbmUJUk9CT19DT1JFX0lECQkweDgxYwkvKiByb2Jvc3dpdGNoIGNvcmUgKi8KKyNkZWZpbmUJQVRBMTAwX0NPUkVfSUQJCTB4ODFkCS8qIHBhcmFsbGVsIEFUQSBjb3JlICovCisjZGVmaW5lCVNBVEFYT1JfQ09SRV9JRAkJMHg4MWUJLyogc2VyaWFsIEFUQSAmIFhPUiBETUEgY29yZSAqLworI2RlZmluZQlHSUdFVEhfQ09SRV9JRAkJMHg4MWYJLyogZ2lnYWJpdCBldGhlcm5ldCBjb3JlICovCisjZGVmaW5lCVBDSUVfQ09SRV9JRAkJMHg4MjAJLyogcGNpIGV4cHJlc3MgY29yZSAqLworI2RlZmluZQlOUEhZX0NPUkVfSUQJCTB4ODIxCS8qIDgwMi4xMW4gMngyIHBoeSBjb3JlICovCisjZGVmaW5lCVNSQU1DX0NPUkVfSUQJCTB4ODIyCS8qIFNSQU0gY29udHJvbGxlciBjb3JlICovCisjZGVmaW5lCU1JTklNQUNfQ09SRV9JRAkJMHg4MjMJLyogTUlOSSBNQUMvcGh5IGNvcmUgKi8KKyNkZWZpbmUJQVJNMTFfQ09SRV9JRAkJMHg4MjQJLyogQVJNIDExNzYgY29yZSAqLworI2RlZmluZQlBUk03U19DT1JFX0lECQkweDgyNQkvKiBBUk03dGRtaS1zIGNvcmUgKi8KKyNkZWZpbmUJTFBQSFlfQ09SRV9JRAkJMHg4MjYJLyogODAyLjExYS9iL2cgcGh5IGNvcmUgKi8KKyNkZWZpbmUJUE1VX0NPUkVfSUQJCTB4ODI3CS8qIFBNVSBjb3JlICovCisjZGVmaW5lCVNTTlBIWV9DT1JFX0lECQkweDgyOAkvKiA4MDIuMTFuIHNpbmdsZS1zdHJlYW0gcGh5IGNvcmUgKi8KKyNkZWZpbmUJU0RJT0RfQ09SRV9JRAkJMHg4MjkJLyogU0RJTyBkZXZpY2UgY29yZSAqLworI2RlZmluZQlBUk1DTTNfQ09SRV9JRAkJMHg4MmEJLyogQVJNIENvcnRleCBNMyBjb3JlICovCisjZGVmaW5lCUhUUEhZX0NPUkVfSUQJCTB4ODJiCS8qIDgwMi4xMW4gNHg0IHBoeSBjb3JlICovCisjZGVmaW5lCU1JUFM3NEtfQ09SRV9JRAkJMHg4MmMJLyogbWlwcyA3NGsgY29yZSAqLworI2RlZmluZQlHTUFDX0NPUkVfSUQJCTB4ODJkCS8qIEdpZ2FiaXQgTUFDIGNvcmUgKi8KKyNkZWZpbmUJRE1FTUNfQ09SRV9JRAkJMHg4MmUJLyogRERSMS8yIG1lbW9yeSBjb250cm9sbGVyIGNvcmUgKi8KKyNkZWZpbmUJUENJRVJDX0NPUkVfSUQJCTB4ODJmCS8qIFBDSUUgUm9vdCBDb21wbGV4IGNvcmUgKi8KKyNkZWZpbmUJT0NQX0NPUkVfSUQJCTB4ODMwCS8qIE9DUDJPQ1AgYnJpZGdlIGNvcmUgKi8KKyNkZWZpbmUJU0NfQ09SRV9JRAkJMHg4MzEJLyogc2hhcmVkIGNvbW1vbiBjb3JlICovCisjZGVmaW5lCUFIQl9DT1JFX0lECQkweDgzMgkvKiBPQ1AyQUhCIGJyaWRnZSBjb3JlICovCisjZGVmaW5lCVNQSUhfQ09SRV9JRAkJMHg4MzMJLyogU1BJIGhvc3QgY29yZSAqLworI2RlZmluZQlJMlNfQ09SRV9JRAkJMHg4MzQJLyogSTJTIGNvcmUgKi8KKyNkZWZpbmUJRE1FTVNfQ09SRV9JRAkJMHg4MzUJLyogU0RSL0REUjEgbWVtb3J5IGNvbnRyb2xsZXIgY29yZSAqLworI2RlZmluZQlERUZfU0hJTV9DT01QCQkweDgzNwkvKiBTSElNIGNvbXBvbmVudCBpbiB1YnVzLzYzNjIgKi8KKyNkZWZpbmUgT09CX1JPVVRFUl9DT1JFX0lECTB4MzY3CS8qIE9PQiByb3V0ZXIgY29yZSBJRCAqLworI2RlZmluZQlERUZfQUlfQ09NUAkJMHhmZmYJLyogRGVmYXVsdCBjb21wb25lbnQsIGluIGFpIGNoaXBzIGl0CisJCQkJCSAqIG1hcHMgYWxsIHVudXNlZCBhZGRyZXNzIHJhbmdlcworCQkJCQkgKi8KKworLyogVGhlcmUgYXJlIFRXTyBjb25zdGFudHMgb24gYWxsIEhORCBjaGlwczogU0lfRU5VTV9CQVNFIGFib3ZlLAorICogYW5kIGNoaXBjb21tb24gYmVpbmcgdGhlIGZpcnN0IGNvcmU6CisgKi8KKyNkZWZpbmUJU0lfQ0NfSURYCQkwCisKKy8qIFNPQyBJbnRlcmNvbm5lY3QgdHlwZXMgKGFrYSBjaGlwIHR5cGVzKSAqLworI2RlZmluZQlTT0NJX0FJCQkJMQorCisvKiBDb21tb24gY29yZSBjb250cm9sIGZsYWdzICovCisjZGVmaW5lCVNJQ0ZfQklTVF9FTgkJMHg4MDAwCisjZGVmaW5lCVNJQ0ZfUE1FX0VOCQkweDQwMDAKKyNkZWZpbmUJU0lDRl9DT1JFX0JJVFMJCTB4M2ZmYworI2RlZmluZQlTSUNGX0ZHQwkJMHgwMDAyCisjZGVmaW5lCVNJQ0ZfQ0xPQ0tfRU4JCTB4MDAwMQorCisvKiBDb21tb24gY29yZSBzdGF0dXMgZmxhZ3MgKi8KKyNkZWZpbmUJU0lTRl9CSVNUX0RPTkUJCTB4ODAwMAorI2RlZmluZQlTSVNGX0JJU1RfRVJST1IJCTB4NDAwMAorI2RlZmluZQlTSVNGX0dBVEVEX0NMSwkJMHgyMDAwCisjZGVmaW5lCVNJU0ZfRE1BNjQJCTB4MTAwMAorI2RlZmluZQlTSVNGX0NPUkVfQklUUwkJMHgwZmZmCisKKy8qIEEgcmVnaXN0ZXIgdGhhdCBpcyBjb21tb24gdG8gYWxsIGNvcmVzIHRvCisgKiBjb21tdW5pY2F0ZSB3L1BNVSByZWdhcmRpbmcgY2xvY2sgY29udHJvbC4KKyAqLworI2RlZmluZSBTSV9DTEtfQ1RMX1NUCQkweDFlMAkvKiBjbG9jayBjb250cm9sIGFuZCBzdGF0dXMgKi8KKworLyogY2xrX2N0bF9zdCByZWdpc3RlciAqLworI2RlZmluZQlDQ1NfRk9SQ0VBTFAJCTB4MDAwMDAwMDEJLyogZm9yY2UgQUxQIHJlcXVlc3QgKi8KKyNkZWZpbmUJQ0NTX0ZPUkNFSFQJCTB4MDAwMDAwMDIJLyogZm9yY2UgSFQgcmVxdWVzdCAqLworI2RlZmluZQlDQ1NfRk9SQ0VJTFAJCTB4MDAwMDAwMDQJLyogZm9yY2UgSUxQIHJlcXVlc3QgKi8KKyNkZWZpbmUJQ0NTX0FMUEFSRVEJCTB4MDAwMDAwMDgJLyogQUxQIEF2YWlsIFJlcXVlc3QgKi8KKyNkZWZpbmUJQ0NTX0hUQVJFUQkJMHgwMDAwMDAxMAkvKiBIVCBBdmFpbCBSZXF1ZXN0ICovCisjZGVmaW5lCUNDU19GT1JDRUhXUkVRT0ZGCTB4MDAwMDAwMjAJLyogRm9yY2UgSFcgQ2xvY2sgUmVxdWVzdCBPZmYgKi8KKyNkZWZpbmUgQ0NTX0VSU1JDX1JFUV9NQVNLCTB4MDAwMDA3MDAJLyogZXh0ZXJuYWwgcmVzb3VyY2UgcmVxdWVzdHMgKi8KKyNkZWZpbmUgQ0NTX0VSU1JDX1JFUV9TSElGVAk4CisjZGVmaW5lCUNDU19BTFBBVkFJTAkJMHgwMDAxMDAwMAkvKiBBTFAgaXMgYXZhaWxhYmxlICovCisjZGVmaW5lCUNDU19IVEFWQUlMCQkweDAwMDIwMDAwCS8qIEhUIGlzIGF2YWlsYWJsZSAqLworI2RlZmluZSBDQ1NfQlBfT05fQVBMCQkweDAwMDQwMDAwCS8qIFJPOiBydW5uaW5nIG9uIEFMUCBjbG9jayAqLworI2RlZmluZSBDQ1NfQlBfT05fSFQJCTB4MDAwODAwMDAJLyogUk86IHJ1bm5pbmcgb24gSFQgY2xvY2sgKi8KKyNkZWZpbmUgQ0NTX0VSU1JDX1NUU19NQVNLCTB4MDcwMDAwMDAJLyogZXh0ZXJuYWwgcmVzb3VyY2Ugc3RhdHVzICovCisjZGVmaW5lIENDU19FUlNSQ19TVFNfU0hJRlQJMjQKKworLyogSFQgYXZhaWwgaW4gY2hpcGMgYW5kIHBjbWNpYSBvbiA0MzI4YTAgKi8KKyNkZWZpbmUJQ0NTMF9IVEFWQUlMCQkweDAwMDEwMDAwCisvKiBBTFAgYXZhaWwgaW4gY2hpcGMgYW5kIHBjbWNpYSBvbiA0MzI4YTAgKi8KKyNkZWZpbmUJQ0NTMF9BTFBBVkFJTAkJMHgwMDAyMDAwMAorCisvKiBOb3QgcmVhbGx5IHJlbGF0ZWQgdG8gU09DIEludGVyY29ubmVjdCwgYnV0IGEgY291cGxlIG9mIHNvZnR3YXJlCisgKiBjb252ZW50aW9ucyBmb3IgdGhlIHVzZSB0aGUgZmxhc2ggc3BhY2U6CisgKi8KKworLyogTWludW11bSBhbW91bnQgb2YgZmxhc2ggd2Ugc3VwcG9ydCAqLworI2RlZmluZSBGTEFTSF9NSU4JCTB4MDAwMjAwMDAJLyogTWluaW11bSBmbGFzaCBzaXplICovCisKKy8qIEEgYm9vdC9iaW5hcnkgbWF5IGhhdmUgYW4gZW1iZWRkZWQgYmxvY2sgdGhhdCBkZXNjcmliZXMgaXRzIHNpemUgICovCisjZGVmaW5lCUJJU1pfT0ZGU0VUCQkweDNlMAkvKiBBdCB0aGlzIG9mZnNldCBpbnRvIHRoZSBiaW5hcnkgKi8KKyNkZWZpbmUJQklTWl9NQUdJQwkJMHg0MjQ5NTM1YQkvKiBNYXJrZWQgd2l0aCB2YWx1ZTogJ0JJU1onICovCisjZGVmaW5lCUJJU1pfTUFHSUNfSURYCQkwCS8qIFdvcmQgMDogbWFnaWMgKi8KKyNkZWZpbmUJQklTWl9UWFRTVF9JRFgJCTEJLyogICAgICAxOiB0ZXh0IHN0YXJ0ICovCisjZGVmaW5lCUJJU1pfVFhURU5EX0lEWAkJMgkvKiAgICAgIDI6IHRleHQgZW5kICovCisjZGVmaW5lCUJJU1pfREFUQVNUX0lEWAkJMwkvKiAgICAgIDM6IGRhdGEgc3RhcnQgKi8KKyNkZWZpbmUJQklTWl9EQVRBRU5EX0lEWAk0CS8qICAgICAgNDogZGF0YSBlbmQgKi8KKyNkZWZpbmUJQklTWl9CU1NTVF9JRFgJCTUJLyogICAgICA1OiBic3Mgc3RhcnQgKi8KKyNkZWZpbmUJQklTWl9CU1NFTkRfSURYCQk2CS8qICAgICAgNjogYnNzIGVuZCAqLworI2RlZmluZSBCSVNaX1NJWkUJCTcJLyogZGVzY3JpcHRvciBzaXplIGluIDMyLWJpdCBpbnRlZ2VycyAqLworCisjZGVmaW5lCVNJX0lORk8oc2loKQkoc2lfaW5mb190ICopc2loCisKKyNkZWZpbmUJR09PRENPUkVBRERSKHgsIGIpIFwKKwkoKCh4KSA+PSAoYikpICYmICgoeCkgPCAoKGIpICsgU0lfTUFYQ09SRVMgKiBTSV9DT1JFX1NJWkUpKSAmJiBcCisJCUlTX0FMSUdORUQoKHgpLCBTSV9DT1JFX1NJWkUpKQorI2RlZmluZQlHT09EUkVHUyhyZWdzKSBcCisJKChyZWdzKSAhPSBOVUxMICYmIElTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpKHJlZ3MpLCBTSV9DT1JFX1NJWkUpKQorI2RlZmluZSBCQURDT1JFQUREUgkwCisjZGVmaW5lCUdPT0RJRFgoaWR4KQkoKCh1aW50KWlkeCkgPCBTSV9NQVhDT1JFUykKKyNkZWZpbmUJTk9SRVYJCS0xCS8qIEludmFsaWQgcmV2ICovCisKKy8qIE5ld2VyIGNoaXBzIGNhbiBhY2Nlc3MgUENJL1BDSUUgYW5kIENDIGNvcmUgd2l0aG91dCByZXF1aXJpbmcgdG8gY2hhbmdlCisgKiBQQ0kgQkFSMCBXSU4KKyAqLworI2RlZmluZSBTSV9GQVNUKHNpKSAoKChzaSktPnB1Yi5idXNjb3JldHlwZSA9PSBQQ0lFX0NPUkVfSUQpIHx8CVwKKwkJICAgICAoKChzaSktPnB1Yi5idXNjb3JldHlwZSA9PSBQQ0lfQ09SRV9JRCkgJiYgXAorCQkgICAgICAoc2kpLT5wdWIuYnVzY29yZXJldiA+PSAxMykpCisKKyNkZWZpbmUgUENJRVJFR1Moc2kpICgoKGNoYXIgKikoKHNpKS0+Y3VybWFwKSArIFBDSV8xNktCMF9QQ0lSRUdTX09GRlNFVCkpCisjZGVmaW5lIENDUkVHU19GQVNUKHNpKSAoKChjaGFyICopKChzaSktPmN1cm1hcCkgKyBQQ0lfMTZLQjBfQ0NSRUdTX09GRlNFVCkpCisKKy8qCisgKiBNYWNyb3MgdG8gZGlzYWJsZS9yZXN0b3JlIGZ1bmN0aW9uIGNvcmUoRDExLCBFTkVULCBJTElORTIwLCBldGMpIGludGVycnVwdHMKKyAqIGJlZm9yZSBhZnRlciBjb3JlIHN3aXRjaGluZyB0byBhdm9pZCBpbnZhbGlkIHJlZ2lzdGVyIGFjY2Vzc3MgaW5zaWRlIElTUi4KKyAqLworI2RlZmluZSBJTlRSX09GRihzaSwgaW50cl92YWwpIFwKKwlpZiAoKHNpKS0+aW50cnNvZmZfZm4gJiYgXAorCSAgICAoc2kpLT5jb3JlaWRbKHNpKS0+Y3VyaWR4XSA9PSAoc2kpLT5kZXZfY29yZWlkKSBcCisJCWludHJfdmFsID0gKCooc2kpLT5pbnRyc29mZl9mbikoKHNpKS0+aW50cl9hcmcpCisjZGVmaW5lIElOVFJfUkVTVE9SRShzaSwgaW50cl92YWwpIFwKKwlpZiAoKHNpKS0+aW50cnNyZXN0b3JlX2ZuICYmIFwKKwkgICAgKHNpKS0+Y29yZWlkWyhzaSktPmN1cmlkeF0gPT0gKHNpKS0+ZGV2X2NvcmVpZCkgXAorCQkoKihzaSktPmludHJzcmVzdG9yZV9mbikoKHNpKS0+aW50cl9hcmcsIGludHJfdmFsKQorCisvKiBkeW5hbWljIGNsb2NrIGNvbnRyb2wgZGVmaW5lcyAqLworI2RlZmluZQlMUE9NSU5GUkVRCQkyNTAwMAkvKiBsb3cgcG93ZXIgb3NjaWxsYXRvciBtaW4gKi8KKyNkZWZpbmUJTFBPTUFYRlJFUQkJNDMwMDAJLyogbG93IHBvd2VyIG9zY2lsbGF0b3IgbWF4ICovCisjZGVmaW5lCVhUQUxNSU5GUkVRCQkxOTgwMDAwMAkvKiAyMCBNSHogLSAxJSAqLworI2RlZmluZQlYVEFMTUFYRlJFUQkJMjAyMDAwMDAJLyogMjAgTUh6ICsgMSUgKi8KKyNkZWZpbmUJUENJTUlORlJFUQkJMjUwMDAwMDAJLyogMjUgTUh6ICovCisjZGVmaW5lCVBDSU1BWEZSRVEJCTM0MDAwMDAwCS8qIDMzIE1IeiArIGZ1ZGdlICovCisKKyNkZWZpbmUJSUxQX0RJVl81TUhaCQkwCS8qIElMUCA9IDUgTUh6ICovCisjZGVmaW5lCUlMUF9ESVZfMU1IWgkJNAkvKiBJTFAgPSAxIE1IeiAqLworCisjZGVmaW5lIFBDSShzaSkJCSgoKHNpKS0+cHViLmJ1c3R5cGUgPT0gUENJX0JVUykgJiYJXAorCQkJICgoc2kpLT5wdWIuYnVzY29yZXR5cGUgPT0gUENJX0NPUkVfSUQpKQorI2RlZmluZSBQQ0lFKHNpKQkoKChzaSktPnB1Yi5idXN0eXBlID09IFBDSV9CVVMpICYmCVwKKwkJCSAoKHNpKS0+cHViLmJ1c2NvcmV0eXBlID09IFBDSUVfQ09SRV9JRCkpCisjZGVmaW5lIFBDSV9GT1JDRUhUKHNpKQlcCisJKFBDSUUoc2kpICYmIChzaS0+cHViLmNoaXAgPT0gQkNNNDcxNl9DSElQX0lEKSkKKworLyogR1BJTyBCYXNlZCBMRUQgcG93ZXJzYXZlIGRlZmluZXMgKi8KKyNkZWZpbmUgREVGQVVMVF9HUElPX09OVElNRQkxMAkvKiBEZWZhdWx0OiAxMCUgb24gKi8KKyNkZWZpbmUgREVGQVVMVF9HUElPX09GRlRJTUUJOTAJLyogRGVmYXVsdDogMTAlIG9uICovCisKKyNpZm5kZWYgREVGQVVMVF9HUElPVElNRVJWQUwKKyNkZWZpbmUgREVGQVVMVF9HUElPVElNRVJWQUwgXAorCSgoREVGQVVMVF9HUElPX09OVElNRSA8PCBHUElPX09OVElNRV9TSElGVCkgfCBERUZBVUxUX0dQSU9fT0ZGVElNRSkKKyNlbmRpZgorCisvKgorICogRGF0YSBzdHJ1Y3R1cmUgdG8gZXhwb3J0IGFsbCBjaGlwIHNwZWNpZmljIGNvbW1vbiB2YXJpYWJsZXMKKyAqICAgcHVibGljIChyZWFkLW9ubHkpIHBvcnRpb24gb2YgYWl1dGlscyBoYW5kbGUgcmV0dXJuZWQgYnkgc2lfYXR0YWNoKCkKKyAqLworc3RydWN0IHNpX3B1YiB7CisJdWludCBidXN0eXBlOwkJLyogU0lfQlVTLCBQQ0lfQlVTICovCisJdWludCBidXNjb3JldHlwZTsJLyogUENJX0NPUkVfSUQsIFBDSUVfQ09SRV9JRCwgUENNQ0lBX0NPUkVfSUQgKi8KKwl1aW50IGJ1c2NvcmVyZXY7CS8qIGJ1c2NvcmUgcmV2ICovCisJdWludCBidXNjb3JlaWR4OwkvKiBidXNjb3JlIGluZGV4ICovCisJaW50IGNjcmV2OwkJLyogY2hpcCBjb21tb24gY29yZSByZXYgKi8KKwl1MzIgY2NjYXBzOwkJLyogY2hpcCBjb21tb24gY2FwYWJpbGl0aWVzICovCisJdTMyIGNjY2Fwc19leHQ7CS8qIGNoaXAgY29tbW9uIGNhcGFiaWxpdGllcyBleHRlbnNpb24gKi8KKwlpbnQgcG11cmV2OwkJLyogcG11IGNvcmUgcmV2ICovCisJdTMyIHBtdWNhcHM7CQkvKiBwbXUgY2FwYWJpbGl0aWVzICovCisJdWludCBib2FyZHR5cGU7CQkvKiBib2FyZCB0eXBlICovCisJdWludCBib2FyZHZlbmRvcjsJLyogYm9hcmQgdmVuZG9yICovCisJdWludCBib2FyZGZsYWdzOwkvKiBib2FyZCBmbGFncyAqLworCXVpbnQgYm9hcmRmbGFnczI7CS8qIGJvYXJkIGZsYWdzMiAqLworCXVpbnQgY2hpcDsJCS8qIGNoaXAgbnVtYmVyICovCisJdWludCBjaGlwcmV2OwkJLyogY2hpcCByZXZpc2lvbiAqLworCXVpbnQgY2hpcHBrZzsJCS8qIGNoaXAgcGFja2FnZSBvcHRpb24gKi8KKwl1MzIgY2hpcHN0OwkJLyogY2hpcCBzdGF0dXMgKi8KKwlib29sIGlzc2ltOwkJLyogY2hpcCBpcyBpbiBzaW11bGF0aW9uIG9yIGVtdWxhdGlvbiAqLworCXVpbnQgc29jaXJldjsJCS8qIFNPQyBpbnRlcmNvbm5lY3QgcmV2ICovCisJYm9vbCBwY2lfcHIzMjQxNDsKKworfTsKKworLyoKKyAqIGZvciBISUdIX09OTFkgZHJpdmVyLCB0aGUgc2lfdCBtdXN0IGJlIHdyaXRhYmxlIHRvIGFsbG93IHN0YXRlcyBzeW5jIGZyb20KKyAqIEJNQUMgdG8gSElHSCBkcml2ZXIgZm9yIG1vbm9saXRoaWMgZHJpdmVyLCBpdCBpcyByZWFkb25seSB0byBwcmV2ZW50IGFjY2lkZW50CisgKiBjaGFuZ2UKKyAqLwordHlwZWRlZiBjb25zdCBzdHJ1Y3Qgc2lfcHViIHNpX3Q7CisKKy8qCisgKiBNYW55IG9mIHRoZSByb3V0aW5lcyBiZWxvdyB0YWtlIGFuICdzaWgnIGhhbmRsZSBhcyB0aGVpciBmaXJzdCBhcmcuCisgKiBBbGxvY2F0ZSB0aGlzIGJ5IGNhbGxpbmcgc2lfYXR0YWNoKCkuICBGcmVlIGl0IGJ5IGNhbGxpbmcgc2lfZGV0YWNoKCkuCisgKiBBdCBhbnkgb25lIHRpbWUsIHRoZSBzaWggaXMgbG9naWNhbGx5IGZvY3VzZWQgb24gb25lIHBhcnRpY3VsYXIgc2kgY29yZQorICogKHRoZSAiY3VycmVudCBjb3JlIikuCisgKiBVc2Ugc2lfc2V0Y29yZSgpIG9yIHNpX3NldGNvcmVpZHgoKSB0byBjaGFuZ2UgdGhlIGFzc29jaWF0aW9uIHRvIGFub3RoZXIgY29yZQorICovCisKKyNkZWZpbmUJQkFESURYCQkoU0lfTUFYQ09SRVMgKyAxKQorCisvKiBjbGtjdGwgeHRhbCB3aGF0IGZsYWdzICovCisjZGVmaW5lCVhUQUwJCQkweDEJLyogcHJpbWFyeSBjcnlzdGFsIG9zY2lsbGF0b3IgKDIwNTApICovCisjZGVmaW5lCVBMTAkJCTB4MgkvKiBtYWluIGNoaXAgcGxsICovCisKKy8qIGNsa2N0bCBjbGsgbW9kZSAqLworI2RlZmluZQlDTEtfRkFTVAkJMAkvKiBmb3JjZSBmYXN0IChwbGwpIGNsb2NrICovCisjZGVmaW5lCUNMS19EWU5BTUlDCQkyCS8qIGVuYWJsZSBkeW5hbWljIGNsb2NrIGNvbnRyb2wgKi8KKworLyogR1BJTyB1c2FnZSBwcmlvcml0aWVzICovCisjZGVmaW5lIEdQSU9fRFJWX1BSSU9SSVRZCTAJLyogRHJpdmVyICovCisjZGVmaW5lIEdQSU9fQVBQX1BSSU9SSVRZCTEJLyogQXBwbGljYXRpb24gKi8KKyNkZWZpbmUgR1BJT19ISV9QUklPUklUWQkyCS8qIEhpZ2hlc3QgcHJpb3JpdHkuIElnbm9yZSBHUElPCisJCQkJCSAqIHJlc2VydmF0aW9uCisJCQkJCSAqLworCisvKiBHUElPIHB1bGwgdXAvZG93biAqLworI2RlZmluZSBHUElPX1BVTExVUAkJMAorI2RlZmluZSBHUElPX1BVTExETgkJMQorCisvKiBHUElPIGV2ZW50IHJlZ3R5cGUgKi8KKyNkZWZpbmUgR1BJT19SRUdFVlQJCTAJLyogR1BJTyByZWdpc3RlciBldmVudCAqLworI2RlZmluZSBHUElPX1JFR0VWVF9JTlRNU0sJMQkvKiBHUElPIHJlZ2lzdGVyIGV2ZW50IGludCBtYXNrICovCisjZGVmaW5lIEdQSU9fUkVHRVZUX0lOVFBPTAkyCS8qIEdQSU8gcmVnaXN0ZXIgZXZlbnQgaW50IHBvbGFyaXR5ICovCisKKy8qIGRldmljZSBwYXRoICovCisjZGVmaW5lIFNJX0RFVlBBVEhfQlVGU1oJMTYJLyogbWluIGJ1ZmZlciBzaXplIGluIGJ5dGVzICovCisKKy8qIFNJIHJvdXRpbmUgZW51bWVyYXRpb246IHRvIGJlIHVzZWQgYnkgdXBkYXRlIGZ1bmN0aW9uIHdpdGggbXVsdGlwbGUgaG9va3MgKi8KKyNkZWZpbmUJU0lfRE9BVFRBQ0gJMQorI2RlZmluZSBTSV9QQ0lET1dOCTIKKyNkZWZpbmUgU0lfUENJVVAJMworCisjZGVmaW5lCUlTU0lNX0VOQUIoc2loKQkwCisKKy8qIFBNVSBjbG9jay9wb3dlciBjb250cm9sICovCisjaWYgZGVmaW5lZChCQ01QTVVDVEwpCisjZGVmaW5lIFBNVUNUTF9FTkFCKHNpaCkJKEJDTVBNVUNUTCkKKyNlbHNlCisjZGVmaW5lIFBNVUNUTF9FTkFCKHNpaCkJKChzaWgpLT5jY2NhcHMgJiBDQ19DQVBfUE1VKQorI2VuZGlmCisKKy8qIGNoaXBjb21tb24gY2xvY2svcG93ZXIgY29udHJvbCAoZXhjbHVzaXZlIHdpdGggUE1VJ3MpICovCisjaWYgZGVmaW5lZChCQ01QTVVDVEwpICYmIEJDTVBNVUNUTAorI2RlZmluZSBDQ0NUTF9FTkFCKHNpaCkJCSgwKQorI2RlZmluZSBDQ1BMTF9FTkFCKHNpaCkJCSgwKQorI2Vsc2UKKyNkZWZpbmUgQ0NDVExfRU5BQihzaWgpCQkoKHNpaCktPmNjY2FwcyAmIENDX0NBUF9QV1JfQ1RMKQorI2RlZmluZSBDQ1BMTF9FTkFCKHNpaCkJCSgoc2loKS0+Y2NjYXBzICYgQ0NfQ0FQX1BMTF9NQVNLKQorI2VuZGlmCisKK3R5cGVkZWYgdm9pZCAoKmdwaW9faGFuZGxlcl90KSAodTMyIHN0YXQsIHZvaWQgKmFyZyk7CisKKy8qIEV4dGVybmFsIFBBIGVuYWJsZSBtYXNrICovCisjZGVmaW5lIEdQSU9fQ1RSTF9FUEFfRU5fTUFTSyAweDQwCisKKyNkZWZpbmUJU0lfRVJST1IoYXJncykKKworI2lmZGVmIEJDTURCRworI2RlZmluZQlTSV9NU0coYXJncykJcHJpbnRrIGFyZ3MKKyNlbHNlCisjZGVmaW5lCVNJX01TRyhhcmdzKQorI2VuZGlmCQkJCS8qIEJDTURCRyAqLworCisvKiBEZWZpbmUgU0lfVk1TRyB0byBwcmludGYgZm9yIHZlcmJvc2UgZGVidWdnaW5nLCBidXQgZG9uJ3QgY2hlY2sgaXQgaW4gKi8KKyNkZWZpbmUJU0lfVk1TRyhhcmdzKQorCisjZGVmaW5lCUlTX1NJTShjaGlwcGtnKQlcCisJKChjaGlwcGtnID09IEhETFNJTV9QS0dfSUQpIHx8IChjaGlwcGtnID09IEhXU0lNX1BLR19JRCkpCisKK3R5cGVkZWYgdTMyKCpzaV9pbnRyc29mZl90KSAodm9pZCAqaW50cl9hcmcpOwordHlwZWRlZiB2b2lkICgqc2lfaW50cnNyZXN0b3JlX3QpICh2b2lkICppbnRyX2FyZywgdTMyIGFyZyk7Cit0eXBlZGVmIGJvb2woKnNpX2ludHJzZW5hYmxlZF90KSAodm9pZCAqaW50cl9hcmcpOworCit0eXBlZGVmIHN0cnVjdCBncGlvaF9pdGVtIHsKKwl2b2lkICphcmc7CisJYm9vbCBsZXZlbDsKKwlncGlvX2hhbmRsZXJfdCBoYW5kbGVyOworCXUzMiBldmVudDsKKwlzdHJ1Y3QgZ3Bpb2hfaXRlbSAqbmV4dDsKK30gZ3Bpb2hfaXRlbV90OworCisvKiBtaXNjIHNpIGluZm8gbmVlZGVkIGJ5IHNvbWUgb2YgdGhlIHJvdXRpbmVzICovCit0eXBlZGVmIHN0cnVjdCBzaV9pbmZvIHsKKwlzdHJ1Y3Qgc2lfcHViIHB1YjsJLyogYmFjayBwbGFuZSBwdWJsaWMgc3RhdGUgKG11c3QgYmUgZmlyc3QpICovCisJdm9pZCAqcGJ1czsJCS8qIGhhbmRsZSB0byBidXMgKHBjaS9zZGlvLy4uKSAqLworCXVpbnQgZGV2X2NvcmVpZDsJLyogdGhlIGNvcmUgcHJvdmlkZXMgZHJpdmVyIGZ1bmN0aW9ucyAqLworCXZvaWQgKmludHJfYXJnOwkJLyogaW50ZXJydXB0IGNhbGxiYWNrIGZ1bmN0aW9uIGFyZyAqLworCXNpX2ludHJzb2ZmX3QgaW50cnNvZmZfZm47CS8qIHR1cm5zIGNoaXAgaW50ZXJydXB0cyBvZmYgKi8KKwlzaV9pbnRyc3Jlc3RvcmVfdCBpbnRyc3Jlc3RvcmVfZm47IC8qIHJlc3RvcmUgY2hpcCBpbnRlcnJ1cHRzICovCisJc2lfaW50cnNlbmFibGVkX3QgaW50cnNlbmFibGVkX2ZuOyAvKiBjaGVjayBpZiBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovCisKKwl2b2lkICpwY2g7CQkvKiBQQ0kvRSBjb3JlIGhhbmRsZSAqLworCisJZ3Bpb2hfaXRlbV90ICpncGlvaF9oZWFkOwkvKiBHUElPIGV2ZW50IGhhbmRsZXJzIGxpc3QgKi8KKworCWJvb2wgbWVtc2VnOwkJLyogZmxhZyB0byB0b2dnbGUgTUVNX1NFRyByZWdpc3RlciAqLworCisJY2hhciAqdmFyczsKKwl1aW50IHZhcnN6OworCisJdm9pZCAqY3VybWFwOwkJLyogY3VycmVudCByZWdzIHZhICovCisJdm9pZCAqcmVnc1tTSV9NQVhDT1JFU107CS8qIG90aGVyIHJlZ3MgdmEgKi8KKworCXVpbnQgY3VyaWR4OwkJLyogY3VycmVudCBjb3JlIGluZGV4ICovCisJdWludCBudW1jb3JlczsJCS8qICMgZGlzY292ZXJlZCBjb3JlcyAqLworCXVpbnQgY29yZWlkW1NJX01BWENPUkVTXTsgLyogaWQgb2YgZWFjaCBjb3JlICovCisJdTMyIGNvcmVzYmFbU0lfTUFYQ09SRVNdOyAvKiBiYWNrcGxhbmUgYWRkcmVzcyBvZiBlYWNoIGNvcmUgKi8KKwl2b2lkICpyZWdzMltTSV9NQVhDT1JFU107IC8qIDJuZCB2aXJ0dWFsIGFkZHJlc3MgcGVyIGNvcmUgKHVzYmgyMCkgKi8KKwl1MzIgY29yZXNiYTJbU0lfTUFYQ09SRVNdOyAvKiAybmQgcGh5cyBhZGRyZXNzIHBlciBjb3JlICh1c2JoMjApICovCisJdTMyIGNvcmVzYmFfc2l6ZVtTSV9NQVhDT1JFU107IC8qIGJhY2twbGFuZSBhZGRyZXNzIHNwYWNlIHNpemUgKi8KKwl1MzIgY29yZXNiYTJfc2l6ZVtTSV9NQVhDT1JFU107CS8qIHNlY29uZCBhZGRyZXNzIHNwYWNlIHNpemUgKi8KKworCXZvaWQgKmN1cndyYXA7CQkvKiBjdXJyZW50IHdyYXBwZXIgdmEgKi8KKwl2b2lkICp3cmFwcGVyc1tTSV9NQVhDT1JFU107CS8qIG90aGVyIGNvcmVzIHdyYXBwZXIgdmEgKi8KKwl1MzIgd3JhcGJhW1NJX01BWENPUkVTXTsJLyogYWRkcmVzcyBvZiBjb250cm9sbGluZyB3cmFwcGVyICovCisKKwl1MzIgY2lhW1NJX01BWENPUkVTXTsJLyogZXJvbSBjaWEgZW50cnkgZm9yIGVhY2ggY29yZSAqLworCXUzMiBjaWJbU0lfTUFYQ09SRVNdOwkvKiBlcm9tIGNpYSBlbnRyeSBmb3IgZWFjaCBjb3JlICovCisJdTMyIG9vYl9yb3V0ZXI7CS8qIG9vYiByb3V0ZXIgcmVnaXN0ZXJzIGZvciBheGkgKi8KK30gc2lfaW5mb190OworCisvKiBBTUJBIEludGVyY29ubmVjdCBleHBvcnRlZCBleHRlcm5zICovCitleHRlcm4gdm9pZCBhaV9zY2FuKHNpX3QgKnNpaCwgdm9pZCAqcmVncywgdWludCBkZXZpZCk7CisKK2V4dGVybiB1aW50IGFpX2ZsYWcoc2lfdCAqc2loKTsKK2V4dGVybiB2b2lkIGFpX3NldGludChzaV90ICpzaWgsIGludCBzaWZsYWcpOworZXh0ZXJuIHVpbnQgYWlfY29yZWlkeChzaV90ICpzaWgpOworZXh0ZXJuIHVpbnQgYWlfY29yZXZlbmRvcihzaV90ICpzaWgpOworZXh0ZXJuIHVpbnQgYWlfY29yZXJldihzaV90ICpzaWgpOworZXh0ZXJuIGJvb2wgYWlfaXNjb3JldXAoc2lfdCAqc2loKTsKK2V4dGVybiB2b2lkICphaV9zZXRjb3JlaWR4KHNpX3QgKnNpaCwgdWludCBjb3JlaWR4KTsKK2V4dGVybiB1MzIgYWlfY29yZV9jZmxhZ3Moc2lfdCAqc2loLCB1MzIgbWFzaywgdTMyIHZhbCk7CitleHRlcm4gdm9pZCBhaV9jb3JlX2NmbGFnc193byhzaV90ICpzaWgsIHUzMiBtYXNrLCB1MzIgdmFsKTsKK2V4dGVybiB1MzIgYWlfY29yZV9zZmxhZ3Moc2lfdCAqc2loLCB1MzIgbWFzaywgdTMyIHZhbCk7CitleHRlcm4gdWludCBhaV9jb3JlcmVnKHNpX3QgKnNpaCwgdWludCBjb3JlaWR4LCB1aW50IHJlZ29mZiwgdWludCBtYXNrLAorCQkgICAgICAgdWludCB2YWwpOworZXh0ZXJuIHZvaWQgYWlfY29yZV9yZXNldChzaV90ICpzaWgsIHUzMiBiaXRzLCB1MzIgcmVzZXRiaXRzKTsKK2V4dGVybiB2b2lkIGFpX2NvcmVfZGlzYWJsZShzaV90ICpzaWgsIHUzMiBiaXRzKTsKK2V4dGVybiBpbnQgYWlfbnVtYWRkcnNwYWNlcyhzaV90ICpzaWgpOworZXh0ZXJuIHUzMiBhaV9hZGRyc3BhY2Uoc2lfdCAqc2loLCB1aW50IGFzaWR4KTsKK2V4dGVybiB1MzIgYWlfYWRkcnNwYWNlc2l6ZShzaV90ICpzaWgsIHVpbnQgYXNpZHgpOworZXh0ZXJuIHZvaWQgYWlfd3JpdGVfd3JhcF9yZWcoc2lfdCAqc2loLCB1MzIgb2Zmc2V0LCB1MzIgdmFsKTsKKworLyogPT09IGV4cG9ydGVkIGZ1bmN0aW9ucyA9PT0gKi8KK2V4dGVybiBzaV90ICphaV9hdHRhY2godWludCBwY2lkZXYsIHZvaWQgKnJlZ3MsIHVpbnQgYnVzdHlwZSwKKwkJICAgICAgIHZvaWQgKnNkaCwgY2hhciAqKnZhcnMsIHVpbnQgKnZhcnN6KTsKKworZXh0ZXJuIHZvaWQgYWlfZGV0YWNoKHNpX3QgKnNpaCk7CitleHRlcm4gYm9vbCBhaV9wY2lfd2FyMTYxNjUoc2lfdCAqc2loKTsKKworZXh0ZXJuIHVpbnQgYWlfY29yZWlkKHNpX3QgKnNpaCk7CitleHRlcm4gdWludCBhaV9jb3JlcmV2KHNpX3QgKnNpaCk7CitleHRlcm4gdWludCBhaV9jb3JlcmVnKHNpX3QgKnNpaCwgdWludCBjb3JlaWR4LCB1aW50IHJlZ29mZiwgdWludCBtYXNrLAorCQl1aW50IHZhbCk7CitleHRlcm4gdm9pZCBhaV93cml0ZV93cmFwcGVycmVnKHNpX3QgKnNpaCwgdTMyIG9mZnNldCwgdTMyIHZhbCk7CitleHRlcm4gdTMyIGFpX2NvcmVfY2ZsYWdzKHNpX3QgKnNpaCwgdTMyIG1hc2ssIHUzMiB2YWwpOworZXh0ZXJuIHUzMiBhaV9jb3JlX3NmbGFncyhzaV90ICpzaWgsIHUzMiBtYXNrLCB1MzIgdmFsKTsKK2V4dGVybiBib29sIGFpX2lzY29yZXVwKHNpX3QgKnNpaCk7CitleHRlcm4gdWludCBhaV9maW5kY29yZWlkeChzaV90ICpzaWgsIHVpbnQgY29yZWlkLCB1aW50IGNvcmV1bml0KTsKK2V4dGVybiB2b2lkICphaV9zZXRjb3JlaWR4KHNpX3QgKnNpaCwgdWludCBjb3JlaWR4KTsKK2V4dGVybiB2b2lkICphaV9zZXRjb3JlKHNpX3QgKnNpaCwgdWludCBjb3JlaWQsIHVpbnQgY29yZXVuaXQpOworZXh0ZXJuIHZvaWQgKmFpX3N3aXRjaF9jb3JlKHNpX3QgKnNpaCwgdWludCBjb3JlaWQsIHVpbnQgKm9yaWdpZHgsCisJCQkgICAgdWludCAqaW50cl92YWwpOworZXh0ZXJuIHZvaWQgYWlfcmVzdG9yZV9jb3JlKHNpX3QgKnNpaCwgdWludCBjb3JlaWQsIHVpbnQgaW50cl92YWwpOworZXh0ZXJuIHZvaWQgYWlfY29yZV9yZXNldChzaV90ICpzaWgsIHUzMiBiaXRzLCB1MzIgcmVzZXRiaXRzKTsKK2V4dGVybiB2b2lkIGFpX2NvcmVfZGlzYWJsZShzaV90ICpzaWgsIHUzMiBiaXRzKTsKK2V4dGVybiB1MzIgYWlfYWxwX2Nsb2NrKHNpX3QgKnNpaCk7CitleHRlcm4gdTMyIGFpX2lscF9jbG9jayhzaV90ICpzaWgpOworZXh0ZXJuIHZvaWQgYWlfcGNpX3NldHVwKHNpX3QgKnNpaCwgdWludCBjb3JlbWFzayk7CitleHRlcm4gdm9pZCBhaV9zZXRpbnQoc2lfdCAqc2loLCBpbnQgc2lmbGFnKTsKK2V4dGVybiBib29sIGFpX2JhY2twbGFuZTY0KHNpX3QgKnNpaCk7CitleHRlcm4gdm9pZCBhaV9yZWdpc3Rlcl9pbnRyX2NhbGxiYWNrKHNpX3QgKnNpaCwgdm9pZCAqaW50cnNvZmZfZm4sCisJCQkJICAgICAgdm9pZCAqaW50cnNyZXN0b3JlX2ZuLAorCQkJCSAgICAgIHZvaWQgKmludHJzZW5hYmxlZF9mbiwgdm9pZCAqaW50cl9hcmcpOworZXh0ZXJuIHZvaWQgYWlfZGVyZWdpc3Rlcl9pbnRyX2NhbGxiYWNrKHNpX3QgKnNpaCk7CitleHRlcm4gdm9pZCBhaV9jbGtjdGxfaW5pdChzaV90ICpzaWgpOworZXh0ZXJuIHUxNiBhaV9jbGtjdGxfZmFzdF9wd3J1cF9kZWxheShzaV90ICpzaWgpOworZXh0ZXJuIGJvb2wgYWlfY2xrY3RsX2NjKHNpX3QgKnNpaCwgdWludCBtb2RlKTsKK2V4dGVybiBpbnQgYWlfY2xrY3RsX3h0YWwoc2lfdCAqc2loLCB1aW50IHdoYXQsIGJvb2wgb24pOworZXh0ZXJuIGJvb2wgYWlfZGV2aWNlcmVtb3ZlZChzaV90ICpzaWgpOworZXh0ZXJuIHUzMiBhaV9ncGlvY29udHJvbChzaV90ICpzaWgsIHUzMiBtYXNrLCB1MzIgdmFsLAorCQkJICAgICB1OCBwcmlvcml0eSk7CisKKy8qIE9UUCBzdGF0dXMgKi8KK2V4dGVybiBib29sIGFpX2lzX290cF9kaXNhYmxlZChzaV90ICpzaWgpOworZXh0ZXJuIGJvb2wgYWlfaXNfb3RwX3Bvd2VyZWQoc2lfdCAqc2loKTsKK2V4dGVybiB2b2lkIGFpX290cF9wb3dlcihzaV90ICpzaWgsIGJvb2wgb24pOworCisvKiBTUFJPTSBhdmFpbGFiaWxpdHkgKi8KK2V4dGVybiBib29sIGFpX2lzX3Nwcm9tX2F2YWlsYWJsZShzaV90ICpzaWgpOworCisvKgorICogQnVpbGQgZGV2aWNlIHBhdGguIFBhdGggc2l6ZSBtdXN0IGJlID49IFNJX0RFVlBBVEhfQlVGU1ouCisgKiBUaGUgcmV0dXJuZWQgcGF0aCBpcyBOVUxMIHRlcm1pbmF0ZWQgYW5kIGhhcyB0cmFpbGluZyAnLycuCisgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBub256ZXJvIG90aGVyd2lzZS4KKyAqLworZXh0ZXJuIGludCBhaV9kZXZwYXRoKHNpX3QgKnNpaCwgY2hhciAqcGF0aCwgaW50IHNpemUpOworLyogUmVhZCB2YXJpYWJsZSB3aXRoIHByZXBlbmRpbmcgdGhlIGRldnBhdGggdG8gdGhlIG5hbWUgKi8KK2V4dGVybiBjaGFyICphaV9nZXRkZXZwYXRodmFyKHNpX3QgKnNpaCwgY29uc3QgY2hhciAqbmFtZSk7CitleHRlcm4gaW50IGFpX2dldGRldnBhdGhpbnR2YXIoc2lfdCAqc2loLCBjb25zdCBjaGFyICpuYW1lKTsKKworZXh0ZXJuIHZvaWQgYWlfcGNpX3NsZWVwKHNpX3QgKnNpaCk7CitleHRlcm4gdm9pZCBhaV9wY2lfZG93bihzaV90ICpzaWgpOworZXh0ZXJuIHZvaWQgYWlfcGNpX3VwKHNpX3QgKnNpaCk7CitleHRlcm4gaW50IGFpX3BjaV9maXhjZmcoc2lfdCAqc2loKTsKKworZXh0ZXJuIHZvaWQgYWlfY2hpcGNvbnRybF9lcGE0MzMxKHNpX3QgKnNpaCwgYm9vbCBvbik7CisvKiBFbmFibGUgRXgtUEEgZm9yIDQzMTMgKi8KK2V4dGVybiB2b2lkIGFpX2VwYV80MzEzd2FyKHNpX3QgKnNpaCk7CisKK2NoYXIgKmFpX2dldG52cmFtZmx2YXIoc2lfdCAqc2loLCBjb25zdCBjaGFyICpuYW1lKTsKKworI2VuZGlmCQkJCS8qIF9haXV0aWxzX2hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvYmNtb3RwLmMgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL2JjbW90cC5jCnNpbWlsYXJpdHkgaW5kZXggOTAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9iY21vdHAuYwpyZW5hbWUgdG8gZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy9iY21vdHAuYwppbmRleCAxNzk5MTIxLi5kMDk2MjhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvYmNtb3RwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy9iY21vdHAuYwpAQCAtMTcsMTYgKzE3LDE3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxiY21kZWZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvY3JjLWNjaXR0Lmg+CisKKyNpbmNsdWRlIDxiY21kZWZzLmg+CiAjaW5jbHVkZSA8YmNtZGV2cy5oPgogI2luY2x1ZGUgPGJjbXV0aWxzLmg+Ci0jaW5jbHVkZSA8c2l1dGlscy5oPgorI2luY2x1ZGUgPGFpdXRpbHMuaD4KICNpbmNsdWRlIDxobmRzb2MuaD4KICNpbmNsdWRlIDxzYmNoaXBjLmg+CiAjaW5jbHVkZSA8YmNtb3RwLmg+Ci0jaW5jbHVkZSAic2l1dGlsc19wcml2LmgiCiAKIC8qCiAgKiBUaGVyZSBhcmUgdHdvIGRpZmZlcmVudCBPVFAgY29udHJvbGxlcnMgc28gZmFyOgpAQCAtMTc3LDkgKzE3OCw2IEBACiAKIAlvaSA9IChvdHBpbmZvX3QgKikgb2g7CiAKLQlBU1NFUlQod24gPCBvaS0+d3NpemUpOwotCUFTU0VSVChjYyAhPSBOVUxMKTsKLQogCXJldHVybiBSX1JFRygmY2MtPnNyb21vdHBbd25dKTsKIH0KIApAQCAtMjI5LDcgKzIyNyw3IEBACiAJCXJldCA9IG9zaXpldyAqIDIgLSBPVFBfU1pfRlVfNzIgLSBPVFBfU1pfQ0hFQ0tTVU07CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUFTU0VSVCgwKTsJLyogRG9uJ3Qga25vdyBhYm91dCB0aGlzIGNoaXAgKi8KKwkJYnJlYWs7CS8qIERvbid0IGtub3cgYWJvdXQgdGhpcyBjaGlwICovCiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTMxMywxOSArMzExLDE2IEBACiAJb3RwaW5mb190ICpvaTsKIAogCS8qIE1ha2Ugc3VyZSB3ZSdyZSBydW5uaW5nIElQWCBPVFAgKi8KLQlBU1NFUlQoT1RQVFlQRV9JUFgoc2loLT5jY3JldikpOwogCWlmICghT1RQVFlQRV9JUFgoc2loLT5jY3JldikpCiAJCXJldHVybiBOVUxMOwogCiAJLyogTWFrZSBzdXJlIE9UUCBpcyBub3QgZGlzYWJsZWQgKi8KLQlpZiAoc2lfaXNfb3RwX2Rpc2FibGVkKHNpaCkpIHsKKwlpZiAoYWlfaXNfb3RwX2Rpc2FibGVkKHNpaCkpCiAJCXJldHVybiBOVUxMOwotCX0KIAogCS8qIE1ha2Ugc3VyZSBPVFAgaXMgcG93ZXJlZCB1cCAqLwotCWlmICghc2lfaXNfb3RwX3Bvd2VyZWQoc2loKSkgeworCWlmICghYWlfaXNfb3RwX3Bvd2VyZWQoc2loKSkKIAkJcmV0dXJuIE5VTEw7Ci0JfQogCiAJb2kgPSAmb3RwaW5mbzsKIApAQCAtMzYwLDEzICszNTUsMTIgQEAKIAl9CiAKIAkvKiBSZXRyaWV2ZSBPVFAgcmVnaW9uIGluZm8gKi8KLQlpZHggPSBzaV9jb3JlaWR4KHNpaCk7Ci0JY2MgPSBzaV9zZXRjb3JlaWR4KHNpaCwgU0lfQ0NfSURYKTsKLQlBU1NFUlQoY2MgIT0gTlVMTCk7CisJaWR4ID0gYWlfY29yZWlkeChzaWgpOworCWNjID0gYWlfc2V0Y29yZWlkeChzaWgsIFNJX0NDX0lEWCk7CiAKIAlfaXB4b3RwX2luaXQob2ksIGNjKTsKIAotCXNpX3NldGNvcmVpZHgoc2loLCBpZHgpOworCWFpX3NldGNvcmVpZHgoc2loLCBpZHgpOwogCiAJcmV0dXJuICh2b2lkICopb2k7CiB9CkBAIC0zODQsMTEgKzM3OCwxMSBAQAogCQlzeiA9ICh1aW50KSBvaS0+aHdsaW0gLSBvaS0+aHdiYXNlOwogCQlpZiAoIShvaS0+c3RhdHVzICYgT1RQU19HVVBfSFcpKSB7CiAJCQkqd2xlbiA9IHN6OwotCQkJcmV0dXJuIEJDTUVfTk9URk9VTkQ7CisJCQlyZXR1cm4gLUVOT0RBVEE7CiAJCX0KIAkJaWYgKCp3bGVuIDwgc3opIHsKIAkJCSp3bGVuID0gc3o7Ci0JCQlyZXR1cm4gQkNNRV9CVUZUT09TSE9SVDsKKwkJCXJldHVybiAtRU9WRVJGTE9XOwogCQl9CiAJCWJhc2UgPSBvaS0+aHdiYXNlOwogCQlicmVhazsKQEAgLTM5NiwxMSArMzkwLDExIEBACiAJCXN6ID0gKCh1aW50KSBvaS0+c3dsaW0gLSBvaS0+c3diYXNlKTsKIAkJaWYgKCEob2ktPnN0YXR1cyAmIE9UUFNfR1VQX1NXKSkgewogCQkJKndsZW4gPSBzejsKLQkJCXJldHVybiBCQ01FX05PVEZPVU5EOworCQkJcmV0dXJuIC1FTk9EQVRBOwogCQl9CiAJCWlmICgqd2xlbiA8IHN6KSB7CiAJCQkqd2xlbiA9IHN6OwotCQkJcmV0dXJuIEJDTUVfQlVGVE9PU0hPUlQ7CisJCQlyZXR1cm4gLUVPVkVSRkxPVzsKIAkJfQogCQliYXNlID0gb2ktPnN3YmFzZTsKIAkJYnJlYWs7CkBAIC00MDgsMTEgKzQwMiwxMSBAQAogCQlzeiA9IE9UUEdVX0NJX1NaOwogCQlpZiAoIShvaS0+c3RhdHVzICYgT1RQU19HVVBfQ0kpKSB7CiAJCQkqd2xlbiA9IHN6OwotCQkJcmV0dXJuIEJDTUVfTk9URk9VTkQ7CisJCQlyZXR1cm4gLUVOT0RBVEE7CiAJCX0KIAkJaWYgKCp3bGVuIDwgc3opIHsKIAkJCSp3bGVuID0gc3o7Ci0JCQlyZXR1cm4gQkNNRV9CVUZUT09TSE9SVDsKKwkJCXJldHVybiAtRU9WRVJGTE9XOwogCQl9CiAJCWJhc2UgPSBvaS0+b3RwZ3VfYmFzZSArIE9UUEdVX0NJX09GRjsKIAkJYnJlYWs7CkBAIC00MjAsMTEgKzQxNCwxMSBAQAogCQlzeiA9ICh1aW50KSBvaS0+ZmxpbSAtIG9pLT5mYmFzZTsKIAkJaWYgKCEob2ktPnN0YXR1cyAmIE9UUFNfR1VQX0ZVU0UpKSB7CiAJCQkqd2xlbiA9IHN6OwotCQkJcmV0dXJuIEJDTUVfTk9URk9VTkQ7CisJCQlyZXR1cm4gLUVOT0RBVEE7CiAJCX0KIAkJaWYgKCp3bGVuIDwgc3opIHsKIAkJCSp3bGVuID0gc3o7Ci0JCQlyZXR1cm4gQkNNRV9CVUZUT09TSE9SVDsKKwkJCXJldHVybiAtRU9WRVJGTE9XOwogCQl9CiAJCWJhc2UgPSBvaS0+ZmJhc2U7CiAJCWJyZWFrOwpAQCAtNDMyLDM0ICs0MjYsMzMgQEAKIAkJc3ogPSAoKHVpbnQpIG9pLT5mbGltIC0gb2ktPmh3YmFzZSk7CiAJCWlmICghKG9pLT5zdGF0dXMgJiAoT1RQU19HVVBfSFcgfCBPVFBTX0dVUF9TVykpKSB7CiAJCQkqd2xlbiA9IHN6OwotCQkJcmV0dXJuIEJDTUVfTk9URk9VTkQ7CisJCQlyZXR1cm4gLUVOT0RBVEE7CiAJCX0KIAkJaWYgKCp3bGVuIDwgc3opIHsKIAkJCSp3bGVuID0gc3o7Ci0JCQlyZXR1cm4gQkNNRV9CVUZUT09TSE9SVDsKKwkJCXJldHVybiAtRU9WRVJGTE9XOwogCQl9CiAJCWJhc2UgPSBvaS0+aHdiYXNlOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm4gQkNNRV9CQURBUkc7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlkeCA9IHNpX2NvcmVpZHgob2ktPnNpaCk7Ci0JY2MgPSBzaV9zZXRjb3JlaWR4KG9pLT5zaWgsIFNJX0NDX0lEWCk7Ci0JQVNTRVJUKGNjICE9IE5VTEwpOworCWlkeCA9IGFpX2NvcmVpZHgob2ktPnNpaCk7CisJY2MgPSBhaV9zZXRjb3JlaWR4KG9pLT5zaWgsIFNJX0NDX0lEWCk7CiAKIAkvKiBSZWFkIHRoZSBkYXRhICovCiAJZm9yIChpID0gMDsgaSA8IHN6OyBpKyspCiAJCWRhdGFbaV0gPSBpcHhvdHBfb3RwcihvaCwgY2MsIGJhc2UgKyBpKTsKIAotCXNpX3NldGNvcmVpZHgob2ktPnNpaCwgaWR4KTsKKwlhaV9zZXRjb3JlaWR4KG9pLT5zaWgsIGlkeCk7CiAJKndsZW4gPSBzejsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBpcHhvdHBfbnZyZWFkKHZvaWQgKm9oLCBjaGFyICpkYXRhLCB1aW50ICpsZW4pCiB7Ci0JcmV0dXJuIEJDTUVfVU5TVVBQT1JURUQ7CisJcmV0dXJuIC1FTk9UU1VQUDsKIH0KIAogc3RhdGljIG90cF9mbl90IGlweG90cF9mbiA9IHsKQEAgLTU2NywxNCArNTYwLDggQEAKIAogc3RhdGljIHUxNiBobmRvdHBfb3Rwcih2b2lkICpvaCwgY2hpcGNyZWdzX3QgKmNjLCB1aW50IHduKQogewotI2lmZGVmIEJDTURCRwotCW90cGluZm9fdCAqb2kgPSAob3RwaW5mb190ICopIG9oOwotI2VuZGlmCiAJdm9sYXRpbGUgdTE2ICpwdHI7CiAKLQlBU1NFUlQod24gPCAoKG9pLT5zaXplIC8gMikgKyBPVFBfUkNfTElNX09GRikpOwotCUFTU0VSVChjYyAhPSBOVUxMKTsKLQogCXB0ciA9ICh2b2xhdGlsZSB1MTYgKikoKHZvbGF0aWxlIGNoYXIgKiljYyArIENDX1NST01fT1RQKTsKIAlyZXR1cm4gUl9SRUcoJnB0clt3bl0pOwogfQpAQCAtNTg0LDEwICs1NzEsNiBAQAogCW90cGluZm9fdCAqb2kgPSAob3RwaW5mb190ICopIG9oOwogCXZvbGF0aWxlIHUxNiAqcHRyOwogCi0JQVNTRVJUKHdvZmYgPj0gKC0oKGludClvaS0+c2l6ZSAvIDIpKSk7Ci0JQVNTRVJUKHdvZmYgPCBPVFBfTElNX09GRik7Ci0JQVNTRVJUKGNjICE9IE5VTEwpOwotCiAJcHRyID0gKHZvbGF0aWxlIHUxNiAqKSgodm9sYXRpbGUgY2hhciAqKWNjICsgQ0NfU1JPTV9PVFApOwogCiAJcmV0dXJuIFJfUkVHKCZwdHJbKG9pLT5zaXplIC8gMikgKyB3b2ZmXSk7CkBAIC02MzEsMTAgKzYxNCwxMCBAQAogCiAJb2kgPSAmb3RwaW5mbzsKIAotCWlkeCA9IHNpX2NvcmVpZHgoc2loKTsKKwlpZHggPSBhaV9jb3JlaWR4KHNpaCk7CiAKIAkvKiBDaGVjayBmb3Igb3RwICovCi0JY2MgPSBzaV9zZXRjb3JlaWR4KHNpaCwgU0lfQ0NfSURYKTsKKwljYyA9IGFpX3NldGNvcmVpZHgoc2loLCBTSV9DQ19JRFgpOwogCWlmIChjYyAhPSBOVUxMKSB7CiAJCWNhcCA9IFJfUkVHKCZjYy0+Y2FwYWJpbGl0aWVzKTsKIAkJaWYgKChjYXAgJiBDQ19DQVBfT1RQU0laRSkgPT0gMCkgewpAQCAtNjQyLDExICs2MjUsNyBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQkvKiBBcyBvZiByaWdodCBub3csIHN1cHBvcnQgb25seSA0MzIwYTIsIDQzMTFhMSBhbmQgNDMxMiAqLwotCQlBU1NFUlQoKG9pLT5jY3JldiA9PSAxMikgfHwgKG9pLT5jY3JldiA9PSAxNykKLQkJICAgICAgIHx8IChvaS0+Y2NyZXYgPT0gMjIpKTsKLQkJaWYgKCEKLQkJICAgICgob2ktPmNjcmV2ID09IDEyKSB8fCAob2ktPmNjcmV2ID09IDE3KQorCQlpZiAoISgob2ktPmNjcmV2ID09IDEyKSB8fCAob2ktPmNjcmV2ID09IDE3KQogCQkgICAgIHx8IChvaS0+Y2NyZXYgPT0gMjIpKSkKIAkJCXJldHVybiBOVUxMOwogCkBAIC02OTAsNyArNjY5LDcgQEAKIAl9CiAKICBvdXQ6CQkJCS8qIEFsbCBkb25lICovCi0Jc2lfc2V0Y29yZWlkeChzaWgsIGlkeCk7CisJYWlfc2V0Y29yZWlkeChzaWgsIGlkeCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNzAyLDI1ICs2ODEsMzAgQEAKIAljaGlwY3JlZ3NfdCAqY2M7CiAJaW50IGk7CiAKLQkvKiBPbmx5IHN1cHBvcnQgSFcgcmVnaW9uIChubyBhY3RpdmUgY2hpcHMgdXNlIEhORCBPVFAgU1cgcmVnaW9uKSAqLwotCUFTU0VSVChyZWdpb24gPT0gT1RQX0hXX1JFR0lPTik7CisKKwlpZiAocmVnaW9uICE9IE9UUF9IV19SRUdJT04pIHsKKwkJLyoKKwkJICogT25seSBzdXBwb3J0IEhXIHJlZ2lvbgorCQkgKiAobm8gYWN0aXZlIGNoaXBzIHVzZSBITkQgT1RQIFNXIHJlZ2lvbikKKwkJICogKi8KKwkJcmV0dXJuIC1FTk9UU1VQUDsKKwl9CiAKIAkvKiBSZWdpb24gZW1wdHk/ICovCiAJc3QgPSBvaS0+aHdwcm90IHwgb2ktPnNpZ252YWxpZDsKIAlpZiAoKHN0ICYgcmVnaW9uKSA9PSAwKQotCQlyZXR1cm4gQkNNRV9OT1RGT1VORDsKKwkJcmV0dXJuIC1FTk9EQVRBOwogCiAJKndsZW4gPQogCSAgICAoKGludCkqd2xlbiA8IG9pLT5ib3VuZGFyeSAvIDIpID8gKndsZW4gOiAodWludCkgb2ktPmJvdW5kYXJ5IC8gMjsKIAotCWlkeCA9IHNpX2NvcmVpZHgob2ktPnNpaCk7Ci0JY2MgPSBzaV9zZXRjb3JlaWR4KG9pLT5zaWgsIFNJX0NDX0lEWCk7Ci0JQVNTRVJUKGNjICE9IE5VTEwpOworCWlkeCA9IGFpX2NvcmVpZHgob2ktPnNpaCk7CisJY2MgPSBhaV9zZXRjb3JlaWR4KG9pLT5zaWgsIFNJX0NDX0lEWCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgKGludCkqd2xlbjsgaSsrKQogCQlkYXRhW2ldID0gaG5kb3RwX290cHIob2gsIGNjLCBpKTsKIAotCXNpX3NldGNvcmVpZHgob2ktPnNpaCwgaWR4KTsKKwlhaV9zZXRjb3JlaWR4KG9pLT5zaWgsIGlkeCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTczNyw5ICs3MjEsOCBAQAogCXUxNiAqcmF3b3RwID0gTlVMTDsKIAogCS8qIHNhdmUgdGhlIG9yaWcgY29yZSAqLwotCWlkeCA9IHNpX2NvcmVpZHgob2ktPnNpaCk7Ci0JY2MgPSBzaV9zZXRjb3JlaWR4KG9pLT5zaWgsIFNJX0NDX0lEWCk7Ci0JQVNTRVJUKGNjICE9IE5VTEwpOworCWlkeCA9IGFpX2NvcmVpZHgob2ktPnNpaCk7CisJY2MgPSBhaV9zZXRjb3JlaWR4KG9pLT5zaWgsIFNJX0NDX0lEWCk7CiAKIAlzdCA9IGhuZG90cF9zdGF0dXMob2gpOwogCWlmICghKHN0ICYgKE9UUF9IV19SRUdJT04gfCBPVFBfU1dfUkVHSU9OKSkpIHsKQEAgLTc5Nyw4ICs3ODAsOCBAQAogCQkJLyogQmFkIGxlbmd0aCwgdHJ5IHRvIGZpbmQgYW5vdGhlciBjaHVuayBhbnl3YXkgKi8KIAkJCXJzeiA9IDY7CiAJCX0KLQkJaWYgKGhuZGNyYzE2KCh1OCAqKSAmcmF3b3RwW2ldLCByc3osCi0JCQkgICAgIENSQzE2X0lOSVRfVkFMVUUpID09IENSQzE2X0dPT0RfVkFMVUUpIHsKKwkJaWYgKGNyY19jY2l0dChDUkMxNl9JTklUX1ZBTFVFLCAodTggKikgJnJhd290cFtpXSwgcnN6KSA9PQorCQkJQ1JDMTZfR09PRF9WQUxVRSkgewogCQkJLyogR29vZCBjcmMsIGNvcHkgdGhlIHZhcnMgKi8KIAkJCWdjaHVua3MrKzsKIAkJCWRzeiA9IHJzeiAtIDY7CkBAIC04MzEsNyArODE0LDcgQEAKIAogIG91dDoKIAlrZnJlZShyYXdvdHApOwotCXNpX3NldGNvcmVpZHgob2ktPnNpaCwgaWR4KTsKKwlhaV9zZXRjb3JlaWR4KG9pLT5zaWgsIGlkeCk7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC04NzYsMTAgKzg1OSwxMCBAQAogdTE2IG90cF9yZWFkX2JpdCh2b2lkICpvaCwgdWludCBvZmZzZXQpCiB7CiAJb3RwaW5mb190ICpvaSA9IChvdHBpbmZvX3QgKikgb2g7Ci0JdWludCBpZHggPSBzaV9jb3JlaWR4KG9pLT5zaWgpOwotCWNoaXBjcmVnc190ICpjYyA9IHNpX3NldGNvcmVpZHgob2ktPnNpaCwgU0lfQ0NfSURYKTsKKwl1aW50IGlkeCA9IGFpX2NvcmVpZHgob2ktPnNpaCk7CisJY2hpcGNyZWdzX3QgKmNjID0gYWlfc2V0Y29yZWlkeChvaS0+c2loLCBTSV9DQ19JRFgpOwogCXUxNiByZWFkQml0ID0gKHUxNikgb2ktPmZuLT5yZWFkX2JpdChvaCwgY2MsIG9mZnNldCk7Ci0Jc2lfc2V0Y29yZWlkeChvaS0+c2loLCBpZHgpOworCWFpX3NldGNvcmVpZHgob2ktPnNpaCwgaWR4KTsKIAlyZXR1cm4gcmVhZEJpdDsKIH0KIApAQCAtOTIxLDE4ICs5MDQsMTggQEAKIAl2b2lkICpvaDsKIAlpbnQgZXJyID0gMDsKIAotCXdhc3VwID0gc2lfaXNfb3RwX3Bvd2VyZWQoc2loKTsKKwl3YXN1cCA9IGFpX2lzX290cF9wb3dlcmVkKHNpaCk7CiAJaWYgKCF3YXN1cCkKLQkJc2lfb3RwX3Bvd2VyKHNpaCwgdHJ1ZSk7CisJCWFpX290cF9wb3dlcihzaWgsIHRydWUpOwogCi0JaWYgKCFzaV9pc19vdHBfcG93ZXJlZChzaWgpIHx8IHNpX2lzX290cF9kaXNhYmxlZChzaWgpKSB7Ci0JCWVyciA9IEJDTUVfTk9UUkVBRFk7CisJaWYgKCFhaV9pc19vdHBfcG93ZXJlZChzaWgpIHx8IGFpX2lzX290cF9kaXNhYmxlZChzaWgpKSB7CisJCWVyciA9IC1FUEVSTTsKIAkJZ290byBvdXQ7CiAJfQogCiAJb2ggPSBvdHBfaW5pdChzaWgpOwogCWlmIChvaCA9PSBOVUxMKSB7Ci0JCWVyciA9IEJDTUVfRVJST1I7CisJCWVyciA9IC1FQkFERTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC05NDAsNyArOTIzLDcgQEAKIAogIG91dDoKIAlpZiAoIXdhc3VwKQotCQlzaV9vdHBfcG93ZXIoc2loLCBmYWxzZSk7CisJCWFpX290cF9wb3dlcihzaWgsIGZhbHNlKTsKIAogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL2JjbXNyb20uYyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvYmNtc3JvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZmM2NDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL2JjbXNyb20uYwpAQCAtMCwwICsxLDcxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWQorICogU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxiY21kZWZzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8YmNtdXRpbHMuaD4KKyNpbmNsdWRlIDxobmRzb2MuaD4KKyNpbmNsdWRlIDxzYmNoaXBjLmg+CisjaW5jbHVkZSA8YmNtZGV2cy5oPgorI2luY2x1ZGUgPHBjaWNmZy5oPgorI2luY2x1ZGUgPGFpdXRpbHMuaD4KKyNpbmNsdWRlIDxiY21zcm9tLmg+CisjaW5jbHVkZSA8YmNtc3JvbV90YmwuaD4KKworI2luY2x1ZGUgPGJjbW52cmFtLmg+CisjaW5jbHVkZSA8YmNtb3RwLmg+CisKKyNkZWZpbmUgU1JPTV9PRkZTRVQoc2loKSAoKHNpaC0+Y2NyZXYgPiAzMSkgPyBcCisJKCgoc2loLT5jY2NhcHMgJiBDQ19DQVBfU1JPTSkgPT0gMCkgPyBOVUxMIDogXAorCSAoKHU4ICopY3VybWFwICsgUENJXzE2S0IwX0NDUkVHU19PRkZTRVQgKyBDQ19TUk9NX09UUCkpIDogXAorCSgodTggKiljdXJtYXAgKyBQQ0lfQkFSMF9TUFJPTV9PRkZTRVQpKQorCisjaWYgZGVmaW5lZChCQ01EQkcpCisjZGVmaW5lIFdSSVRFX0VOQUJMRV9ERUxBWQk1MDAJLyogNTAwIG1zIGFmdGVyIHdyaXRlIGVuYWJsZS9kaXNhYmxlIHRvZ2dsZSAqLworI2RlZmluZSBXUklURV9XT1JEX0RFTEFZCTIwCS8qIDIwIG1zIGJldHdlZW4gZWFjaCB3b3JkIHdyaXRlICovCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgdmFyYnVmIHsKKwljaGFyICpiYXNlOwkJLyogcG9pbnRlciB0byBidWZmZXIgYmFzZSAqLworCWNoYXIgKmJ1ZjsJCS8qIHBvaW50ZXIgdG8gY3VycmVudCBwb3NpdGlvbiAqLworCXVuc2lnbmVkIGludCBzaXplOwkvKiBjdXJyZW50IChyZXNpZHVhbCkgc2l6ZSBpbiBieXRlcyAqLworfSB2YXJidWZfdDsKK2V4dGVybiBjaGFyICpfdmFyczsKK2V4dGVybiB1aW50IF92YXJzejsKKworc3RhdGljIGludCBpbml0dmFyc19zcm9tX3NpKHNpX3QgKnNpaCwgdm9pZCAqY3VybWFwLCBjaGFyICoqdmFycywgdWludCAqY291bnQpOworc3RhdGljIHZvaWQgX2luaXR2YXJzX3Nyb21fcGNpKHU4IHNyb21yZXYsIHUxNiAqc3JvbSwgdWludCBvZmYsIHZhcmJ1Zl90ICpiKTsKK3N0YXRpYyBpbnQgaW5pdHZhcnNfc3JvbV9wY2koc2lfdCAqc2loLCB2b2lkICpjdXJtYXAsIGNoYXIgKip2YXJzLCB1aW50ICpjb3VudCk7CitzdGF0aWMgaW50IGluaXR2YXJzX2ZsYXNoX3NpKHNpX3QgKnNpaCwgY2hhciAqKnZhcnMsIHVpbnQgKmNvdW50KTsKK3N0YXRpYyBpbnQgc3Byb21fcmVhZF9wY2koc2lfdCAqc2loLCB1MTYgKnNwcm9tLAorCQkJICB1aW50IHdvcmRvZmYsIHUxNiAqYnVmLCB1aW50IG53b3JkcywgYm9vbCBjaGVja19jcmMpOworI2lmIGRlZmluZWQoQkNNTlZSQU1SKQorc3RhdGljIGludCBvdHBfcmVhZF9wY2koc2lfdCAqc2loLCB1MTYgKmJ1ZiwgdWludCBidWZzeik7CisjZW5kaWYKK3N0YXRpYyB1MTYgc3JvbV9jY19jbWQoc2lfdCAqc2loLCB2b2lkICpjY3JlZ3MsIHUzMiBjbWQsCisJCQkgIHVpbnQgd29yZG9mZiwgdTE2IGRhdGEpOworCitzdGF0aWMgaW50IGluaXR2YXJzX3RhYmxlKGNoYXIgKnN0YXJ0LCBjaGFyICplbmQsCisJCQkgIGNoYXIgKip2YXJzLCB1aW50ICpjb3VudCk7CitzdGF0aWMgaW50IGluaXR2YXJzX2ZsYXNoKHNpX3QgKnNpaCwgY2hhciAqKnZwLAorCQkJICB1aW50IGxlbik7CisKKy8qIEluaXRpYWxpemF0aW9uIG9mIHZhcmJ1ZiBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyB2b2lkIHZhcmJ1Zl9pbml0KHZhcmJ1Zl90ICpiLCBjaGFyICpidWYsIHVpbnQgc2l6ZSkKK3sKKwliLT5zaXplID0gc2l6ZTsKKwliLT5iYXNlID0gYi0+YnVmID0gYnVmOworfQorCisvKiBhcHBlbmQgYSBudWxsIHRlcm1pbmF0ZWQgdmFyPXZhbHVlIHN0cmluZyAqLworc3RhdGljIGludCB2YXJidWZfYXBwZW5kKHZhcmJ1Zl90ICpiLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCWludCByOworCXNpemVfdCBsZW47CisJY2hhciAqczsKKworCWlmIChiLT5zaXplIDwgMikKKwkJcmV0dXJuIDA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlyID0gdnNucHJpbnRmKGItPmJ1ZiwgYi0+c2l6ZSwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKworCS8qIEM5OSBzbnByaW50ZiBiZWhhdmlvciByZXR1cm5zIHIgPj0gc2l6ZSBvbiBvdmVyZmxvdywKKwkgKiBvdGhlcnMgcmV0dXJuIC0xIG9uIG92ZXJmbG93LgorCSAqIEFsbCByZXR1cm4gLTEgb24gZm9ybWF0IGVycm9yLgorCSAqIFdlIG5lZWQgdG8gbGVhdmUgcm9vbSBmb3IgMiBudWxsIHRlcm1pbmF0aW9ucywgb25lIGZvciB0aGUgY3VycmVudCB2YXIKKwkgKiBzdHJpbmcsIGFuZCBvbmUgZm9yIGZpbmFsIG51bGwgb2YgdGhlIHZhciB0YWJsZS4gU28gY2hlY2sgdGhhdCB0aGUKKwkgKiBzdHJsZW4gd3JpdHRlbiwgciwgbGVhdmVzIHJvb20gZm9yIDIgY2hhcnMuCisJICovCisJaWYgKChyID09IC0xKSB8fCAociA+IChpbnQpKGItPnNpemUgLSAyKSkpIHsKKwkJYi0+c2l6ZSA9IDA7CisJCXJldHVybiAwOworCX0KKworCS8qIFJlbW92ZSBhbnkgZWFybGllciBvY2N1cnJlbmNlIG9mIHRoZSBzYW1lIHZhcmlhYmxlICovCisJcyA9IHN0cmNocihiLT5idWYsICc9Jyk7CisJaWYgKHMgIT0gTlVMTCkgeworCQlsZW4gPSAoc2l6ZV90KSAocyAtIGItPmJ1Zik7CisJCWZvciAocyA9IGItPmJhc2U7IHMgPCBiLT5idWY7KSB7CisJCQlpZiAoKG1lbWNtcChzLCBiLT5idWYsIGxlbikgPT0gMCkgJiYgc1tsZW5dID09ICc9JykgeworCQkJCWxlbiA9IHN0cmxlbihzKSArIDE7CisJCQkJbWVtbW92ZShzLCAocyArIGxlbiksCisJCQkJCSgoYi0+YnVmICsgciArIDEpIC0gKHMgKyBsZW4pKSk7CisJCQkJYi0+YnVmIC09IGxlbjsKKwkJCQliLT5zaXplICs9ICh1bnNpZ25lZCBpbnQpbGVuOworCQkJCWJyZWFrOworCQkJfQorCisJCQl3aGlsZSAoKnMrKykKKwkJCQk7CisJCX0KKwl9CisKKwkvKiBza2lwIG92ZXIgdGhpcyBzdHJpbmcncyBudWxsIHRlcm1pbmF0aW9uICovCisJcisrOworCWItPnNpemUgLT0gcjsKKwliLT5idWYgKz0gcjsKKworCXJldHVybiByOworfQorCisvKgorICogSW5pdGlhbGl6ZSBsb2NhbCB2YXJzIGZyb20gdGhlIHJpZ2h0IHNvdXJjZSBmb3IgdGhpcyBwbGF0Zm9ybS4KKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG5vbnplcm8gb24gZXJyb3IuCisgKi8KK2ludCBzcm9tX3Zhcl9pbml0KHNpX3QgKnNpaCwgdWludCBidXN0eXBlLCB2b2lkICpjdXJtYXAsCisJCSAgY2hhciAqKnZhcnMsIHVpbnQgKmNvdW50KQoreworCXVpbnQgbGVuOworCisJbGVuID0gMDsKKworCWlmICh2YXJzID09IE5VTEwgfHwgY291bnQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwkqdmFycyA9IE5VTEw7CisJKmNvdW50ID0gMDsKKworCXN3aXRjaCAoYnVzdHlwZSkgeworCWNhc2UgU0lfQlVTOgorCWNhc2UgSlRBR19CVVM6CisJCXJldHVybiBpbml0dmFyc19zcm9tX3NpKHNpaCwgY3VybWFwLCB2YXJzLCBjb3VudCk7CisKKwljYXNlIFBDSV9CVVM6CisJCWlmIChjdXJtYXAgPT0gTlVMTCkKKwkJCXJldHVybiAtMTsKKworCQlyZXR1cm4gaW5pdHZhcnNfc3JvbV9wY2koc2loLCBjdXJtYXAsIHZhcnMsIGNvdW50KTsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gLTE7Cit9CisKKy8qIEluIGNoaXBzIHdpdGggY2hpcGNvbW1vbiByZXYgMzIgYW5kIGxhdGVyLCB0aGUgc3JvbSBpcyBpbiBjaGlwY29tbW9uLAorICogbm90IGluIHRoZSBidXMgY29yZXMuCisgKi8KK3N0YXRpYyB1MTYKK3Nyb21fY2NfY21kKHNpX3QgKnNpaCwgdm9pZCAqY2NyZWdzLCB1MzIgY21kLAorCSAgICB1aW50IHdvcmRvZmYsIHUxNiBkYXRhKQoreworCWNoaXBjcmVnc190ICpjYyA9IChjaGlwY3JlZ3NfdCAqKSBjY3JlZ3M7CisJdWludCB3YWl0X2NudCA9IDEwMDA7CisKKwlpZiAoKGNtZCA9PSBTUkNfT1BfUkVBRCkgfHwgKGNtZCA9PSBTUkNfT1BfV1JJVEUpKSB7CisJCVdfUkVHKCZjYy0+c3JvbWFkZHJlc3MsIHdvcmRvZmYgKiAyKTsKKwkJaWYgKGNtZCA9PSBTUkNfT1BfV1JJVEUpCisJCQlXX1JFRygmY2MtPnNyb21kYXRhLCBkYXRhKTsKKwl9CisKKwlXX1JFRygmY2MtPnNyb21jb250cm9sLCBTUkNfU1RBUlQgfCBjbWQpOworCisJd2hpbGUgKHdhaXRfY250LS0pIHsKKwkJaWYgKChSX1JFRygmY2MtPnNyb21jb250cm9sKSAmIFNSQ19CVVNZKSA9PSAwKQorCQkJYnJlYWs7CisJfQorCisJaWYgKCF3YWl0X2NudCkgeworCQlyZXR1cm4gMHhmZmZmOworCX0KKwlpZiAoY21kID09IFNSQ19PUF9SRUFEKQorCQlyZXR1cm4gKHUxNikgUl9SRUcoJmNjLT5zcm9tZGF0YSk7CisJZWxzZQorCQlyZXR1cm4gMHhmZmZmOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbHRvaDE2X2J1Zih1MTYgKmJ1ZiwgdW5zaWduZWQgaW50IHNpemUpCit7CisJZm9yIChzaXplIC89IDI7IHNpemU7IHNpemUtLSkKKwkJKihidWYgKyBzaXplKSA9IGxlMTZfdG9fY3B1KCooYnVmICsgc2l6ZSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHRvbDE2X2J1Zih1MTYgKmJ1ZiwgdW5zaWduZWQgaW50IHNpemUpCit7CisJZm9yIChzaXplIC89IDI7IHNpemU7IHNpemUtLSkKKwkJKihidWYgKyBzaXplKSA9IGNwdV90b19sZTE2KCooYnVmICsgc2l6ZSkpOworfQorCisvKgorICogUmVhZCBpbiBhbmQgdmFsaWRhdGUgc3Byb20uCisgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBub256ZXJvIG9uIGVycm9yLgorICovCitzdGF0aWMgaW50CitzcHJvbV9yZWFkX3BjaShzaV90ICpzaWgsIHUxNiAqc3Byb20sIHVpbnQgd29yZG9mZiwKKwkgICAgICAgdTE2ICpidWYsIHVpbnQgbndvcmRzLCBib29sIGNoZWNrX2NyYykKK3sKKwlpbnQgZXJyID0gMDsKKwl1aW50IGk7CisJdm9pZCAqY2NyZWdzID0gTlVMTDsKKworCS8qIHJlYWQgdGhlIHNwcm9tICovCisJZm9yIChpID0gMDsgaSA8IG53b3JkczsgaSsrKSB7CisKKwkJaWYgKHNpaC0+Y2NyZXYgPiAzMSAmJiBJU1NJTV9FTkFCKHNpaCkpIHsKKwkJCS8qIHVzZSBpbmRpcmVjdCBzaW5jZSBkaXJlY3QgaXMgdG9vIHNsb3cgb24gUVQgKi8KKwkJCWlmICgoc2loLT5jY2NhcHMgJiBDQ19DQVBfU1JPTSkgPT0gMCkKKwkJCQlyZXR1cm4gMTsKKworCQkJY2NyZWdzID0gKHZvaWQgKikoKHU4ICopIHNwcm9tIC0gQ0NfU1JPTV9PVFApOworCQkJYnVmW2ldID0KKwkJCSAgICBzcm9tX2NjX2NtZChzaWgsIGNjcmVncywgU1JDX09QX1JFQUQsCisJCQkJCXdvcmRvZmYgKyBpLCAwKTsKKworCQl9IGVsc2UgeworCQkJaWYgKElTU0lNX0VOQUIoc2loKSkKKwkJCQlidWZbaV0gPSBSX1JFRygmc3Byb21bd29yZG9mZiArIGldKTsKKworCQkJYnVmW2ldID0gUl9SRUcoJnNwcm9tW3dvcmRvZmYgKyBpXSk7CisJCX0KKworCX0KKworCS8qIGJ5cGFzcyBjcmMgY2hlY2tpbmcgZm9yIHNpbXVsYXRpb24gdG8gYWxsb3cgc3JvbSBoYWNrICovCisJaWYgKElTU0lNX0VOQUIoc2loKSkKKwkJcmV0dXJuIGVycjsKKworCWlmIChjaGVja19jcmMpIHsKKworCQlpZiAoYnVmWzBdID09IDB4ZmZmZikgeworCQkJLyogVGhlIGhhcmR3YXJlIHRoaW5rcyB0aGF0IGFuIHNyb20gdGhhdCBzdGFydHMgd2l0aCAweGZmZmYKKwkJCSAqIGlzIGJsYW5rLCByZWdhcmRsZXNzIG9mIHRoZSByZXN0IG9mIHRoZSBjb250ZW50LCBzbyBkZWNsYXJlCisJCQkgKiBpdCBiYWQuCisJCQkgKi8KKwkJCXJldHVybiAxOworCQl9CisKKwkJLyogZml4dXAgdGhlIGVuZGlhbm5lc3Mgc28gY3JjOCB3aWxsIHBhc3MgKi8KKwkJaHRvbDE2X2J1ZihidWYsIG53b3JkcyAqIDIpOworCQlpZiAoYmNtX2NyYzgoKHU4ICopIGJ1ZiwgbndvcmRzICogMiwgQ1JDOF9JTklUX1ZBTFVFKSAhPQorCQkgICAgQ1JDOF9HT09EX1ZBTFVFKSB7CisJCQkvKiBEQkcgb25seSBwY2kgYWx3YXlzIHJlYWQgc3JvbTQgZmlyc3QsIHRoZW4gc3JvbTgvOSAqLworCQkJZXJyID0gMTsKKwkJfQorCQkvKiBub3cgY29ycmVjdCB0aGUgZW5kaWFubmVzcyBvZiB0aGUgYnl0ZSBhcnJheSAqLworCQlsdG9oMTZfYnVmKGJ1ZiwgbndvcmRzICogMik7CisJfQorCXJldHVybiBlcnI7Cit9CisKKyNpZiBkZWZpbmVkKEJDTU5WUkFNUikKK3N0YXRpYyBpbnQgb3RwX3JlYWRfcGNpKHNpX3QgKnNpaCwgdTE2ICpidWYsIHVpbnQgYnVmc3opCit7CisJdTggKm90cDsKKwl1aW50IHN6ID0gT1RQX1NaX01BWCAvIDI7CS8qIHNpemUgaW4gd29yZHMgKi8KKwlpbnQgZXJyID0gMDsKKworCW90cCA9IGt6YWxsb2MoT1RQX1NaX01BWCwgR0ZQX0FUT01JQyk7CisJaWYgKG90cCA9PSBOVUxMKSB7CisJCXJldHVybiAtRUJBREU7CisJfQorCisJZXJyID0gb3RwX3JlYWRfcmVnaW9uKHNpaCwgT1RQX0hXX1JHTiwgKHUxNiAqKSBvdHAsICZzeik7CisKKwltZW1jcHkoYnVmLCBvdHAsIGJ1ZnN6KTsKKworCWtmcmVlKG90cCk7CisKKwkvKiBDaGVjayBDUkMgKi8KKwlpZiAoYnVmWzBdID09IDB4ZmZmZikgeworCQkvKiBUaGUgaGFyZHdhcmUgdGhpbmtzIHRoYXQgYW4gc3JvbSB0aGF0IHN0YXJ0cyB3aXRoIDB4ZmZmZgorCQkgKiBpcyBibGFuaywgcmVnYXJkbGVzcyBvZiB0aGUgcmVzdCBvZiB0aGUgY29udGVudCwgc28gZGVjbGFyZQorCQkgKiBpdCBiYWQuCisJCSAqLworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBmaXh1cCB0aGUgZW5kaWFubmVzcyBzbyBjcmM4IHdpbGwgcGFzcyAqLworCWh0b2wxNl9idWYoYnVmLCBidWZzeik7CisJaWYgKGJjbV9jcmM4KCh1OCAqKSBidWYsIFNST000X1dPUkRTICogMiwgQ1JDOF9JTklUX1ZBTFVFKSAhPQorCSAgICBDUkM4X0dPT0RfVkFMVUUpIHsKKwkJZXJyID0gMTsKKwl9CisJLyogbm93IGNvcnJlY3QgdGhlIGVuZGlhbm5lc3Mgb2YgdGhlIGJ5dGUgYXJyYXkgKi8KKwlsdG9oMTZfYnVmKGJ1ZiwgYnVmc3opOworCisJcmV0dXJuIGVycjsKK30KKyNlbmRpZgkJCQkvKiBkZWZpbmVkKEJDTU5WUkFNUikgKi8KKy8qCisqIENyZWF0ZSB2YXJpYWJsZSB0YWJsZSBmcm9tIG1lbW9yeS4KKyogUmV0dXJuIDAgb24gc3VjY2Vzcywgbm9uemVybyBvbiBlcnJvci4KKyovCitzdGF0aWMgaW50IGluaXR2YXJzX3RhYmxlKGNoYXIgKnN0YXJ0LCBjaGFyICplbmQsCisJCQkgIGNoYXIgKip2YXJzLCB1aW50ICpjb3VudCkKK3sKKwlpbnQgYyA9IChpbnQpKGVuZCAtIHN0YXJ0KTsKKworCS8qIGRvIGl0IG9ubHkgd2hlbiB0aGVyZSBpcyBtb3JlIHRoYW4ganVzdCB0aGUgbnVsbCBzdHJpbmcgKi8KKwlpZiAoYyA+IDEpIHsKKwkJY2hhciAqdnAgPSBrbWFsbG9jKGMsIEdGUF9BVE9NSUMpOworCQlpZiAoIXZwKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCW1lbWNweSh2cCwgc3RhcnQsIGMpOworCQkqdmFycyA9IHZwOworCQkqY291bnQgPSBjOworCX0gZWxzZSB7CisJCSp2YXJzID0gTlVMTDsKKwkJKmNvdW50ID0gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEZpbmQgdmFyaWFibGVzIHdpdGggPGRldnBhdGg+IGZyb20gZmxhc2guICdiYXNlJyBwb2ludHMgdG8gdGhlIGJlZ2lubmluZworICogb2YgdGhlIHRhYmxlIHVwb24gZW50ZXIgYW5kIHRvIHRoZSBlbmQgb2YgdGhlIHRhYmxlIHVwb24gZXhpdCB3aGVuIHN1Y2Nlc3MuCisgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBub256ZXJvIG9uIGVycm9yLgorICovCitzdGF0aWMgaW50IGluaXR2YXJzX2ZsYXNoKHNpX3QgKnNpaCwgY2hhciAqKmJhc2UsIHVpbnQgbGVuKQoreworCWNoYXIgKnZwID0gKmJhc2U7CisJY2hhciAqZmxhc2g7CisJaW50IGVycjsKKwljaGFyICpzOworCXVpbnQgbCwgZGwsIGNvcHlfbGVuOworCWNoYXIgZGV2cGF0aFtTSV9ERVZQQVRIX0JVRlNaXTsKKworCS8qIGFsbG9jYXRlIG1lbW9yeSBhbmQgcmVhZCBpbiBmbGFzaCAqLworCWZsYXNoID0ga21hbGxvYyhOVlJBTV9TUEFDRSwgR0ZQX0FUT01JQyk7CisJaWYgKCFmbGFzaCkKKwkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gbnZyYW1fZ2V0YWxsKGZsYXNoLCBOVlJBTV9TUEFDRSk7CisJaWYgKGVycikKKwkJZ290byBleGl0OworCisJYWlfZGV2cGF0aChzaWgsIGRldnBhdGgsIHNpemVvZihkZXZwYXRoKSk7CisKKwkvKiBncmFiIHZhcnMgd2l0aCB0aGUgPGRldnBhdGg+IHByZWZpeCBpbiBuYW1lICovCisJZGwgPSBzdHJsZW4oZGV2cGF0aCk7CisJZm9yIChzID0gZmxhc2g7IHMgJiYgKnM7IHMgKz0gbCArIDEpIHsKKwkJbCA9IHN0cmxlbihzKTsKKworCQkvKiBza2lwIG5vbi1tYXRjaGluZyB2YXJpYWJsZSAqLworCQlpZiAoc3RybmNtcChzLCBkZXZwYXRoLCBkbCkpCisJCQljb250aW51ZTsKKworCQkvKiBpcyB0aGVyZSBlbm91Z2ggcm9vbSB0byBjb3B5PyAqLworCQljb3B5X2xlbiA9IGwgLSBkbCArIDE7CisJCWlmIChsZW4gPCBjb3B5X2xlbikgeworCQkJZXJyID0gLUVPVkVSRkxPVzsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCS8qIG5vIHByZWZpeCwganVzdCB0aGUgbmFtZT12YWx1ZSAqLworCQlzdHJuY3B5KHZwLCAmc1tkbF0sIGNvcHlfbGVuKTsKKwkJdnAgKz0gY29weV9sZW47CisJCWxlbiAtPSBjb3B5X2xlbjsKKwl9CisKKwkvKiBhZGQgbnVsbCBzdHJpbmcgYXMgdGVybWluYXRvciAqLworCWlmIChsZW4gPCAxKSB7CisJCWVyciA9IC1FT1ZFUkZMT1c7CisJCWdvdG8gZXhpdDsKKwl9CisJKnZwKysgPSAnXDAnOworCisJKmJhc2UgPSB2cDsKKworIGV4aXQ6CWtmcmVlKGZsYXNoKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogSW5pdGlhbGl6ZSBub252b2xhdGlsZSB2YXJpYWJsZSB0YWJsZSBmcm9tIGZsYXNoLgorICogUmV0dXJuIDAgb24gc3VjY2Vzcywgbm9uemVybyBvbiBlcnJvci4KKyAqLworc3RhdGljIGludCBpbml0dmFyc19mbGFzaF9zaShzaV90ICpzaWgsIGNoYXIgKip2YXJzLCB1aW50ICpjb3VudCkKK3sKKwljaGFyICp2cCwgKmJhc2U7CisJaW50IGVycjsKKworCWJhc2UgPSB2cCA9IGttYWxsb2MoTUFYU1pfTlZSQU1fVkFSUywgR0ZQX0FUT01JQyk7CisJaWYgKCF2cCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllcnIgPSBpbml0dmFyc19mbGFzaChzaWgsICZ2cCwgTUFYU1pfTlZSQU1fVkFSUyk7CisJaWYgKGVyciA9PSAwKQorCQllcnIgPSBpbml0dmFyc190YWJsZShiYXNlLCB2cCwgdmFycywgY291bnQpOworCisJa2ZyZWUoYmFzZSk7CisKKwlyZXR1cm4gZXJyOworfQorCisvKiBQYXJzZSBTUk9NIGFuZCBjcmVhdGUgbmFtZT12YWx1ZSBwYWlycy4gJ3Nyb20nIHBvaW50cyB0bworICogdGhlIFNST00gd29yZCBhcnJheS4gJ29mZicgc3BlY2lmaWVzIHRoZSBvZmZzZXQgb2YgdGhlCisgKiBmaXJzdCB3b3JkICdzcm9tJyBwb2ludHMgdG8sIHdoaWNoIHNob3VsZCBiZSBlaXRoZXIgMCBvcgorICogU1JPTTNfU1dSR19PRkYgKGZ1bGwgU1JPTSBvciBzb2Z0d2FyZSByZWdpb24pLgorICovCisKK3N0YXRpYyB1aW50IG1hc2tfc2hpZnQodTE2IG1hc2spCit7CisJdWludCBpOworCWZvciAoaSA9IDA7IGkgPCAoc2l6ZW9mKG1hc2spIDw8IDMpOyBpKyspIHsKKwkJaWYgKG1hc2sgJiAoMSA8PCBpKSkKKwkJCXJldHVybiBpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVpbnQgbWFza193aWR0aCh1MTYgbWFzaykKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAoc2l6ZW9mKG1hc2spIDw8IDMpIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJaWYgKG1hc2sgJiAoMSA8PCBpKSkKKwkJCXJldHVybiAodWludCkgKGkgLSBtYXNrX3NoaWZ0KG1hc2spICsgMSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfaW5pdHZhcnNfc3JvbV9wY2kodTggc3JvbXJldiwgdTE2ICpzcm9tLCB1aW50IG9mZiwgdmFyYnVmX3QgKmIpCit7CisJdTE2IHc7CisJdTMyIHZhbDsKKwljb25zdCBzcm9tdmFyX3QgKnNydjsKKwl1aW50IHdpZHRoOworCXVpbnQgZmxhZ3M7CisJdTMyIHNyID0gKDEgPDwgc3JvbXJldik7CisKKwl2YXJidWZfYXBwZW5kKGIsICJzcm9tcmV2PSVkIiwgc3JvbXJldik7CisKKwlmb3IgKHNydiA9IHBjaV9zcm9tdmFyczsgc3J2LT5uYW1lICE9IE5VTEw7IHNydisrKSB7CisJCWNvbnN0IGNoYXIgKm5hbWU7CisKKwkJaWYgKChzcnYtPnJldm1hc2sgJiBzcikgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChzcnYtPm9mZiA8IG9mZikKKwkJCWNvbnRpbnVlOworCisJCWZsYWdzID0gc3J2LT5mbGFnczsKKwkJbmFtZSA9IHNydi0+bmFtZTsKKworCQkvKiBUaGlzIGVudHJ5IGlzIGZvciBtZmdjIG9ubHkuIERvbid0IGdlbmVyYXRlIHBhcmFtIGZvciBpdCwgKi8KKwkJaWYgKGZsYWdzICYgU1JGTF9OT1ZBUikKKwkJCWNvbnRpbnVlOworCisJCWlmIChmbGFncyAmIFNSRkxfRVRIQUREUikgeworCQkJdTggZWFbRVRIX0FMRU5dOworCisJCQllYVswXSA9IChzcm9tW3Nydi0+b2ZmIC0gb2ZmXSA+PiA4KSAmIDB4ZmY7CisJCQllYVsxXSA9IHNyb21bc3J2LT5vZmYgLSBvZmZdICYgMHhmZjsKKwkJCWVhWzJdID0gKHNyb21bc3J2LT5vZmYgKyAxIC0gb2ZmXSA+PiA4KSAmIDB4ZmY7CisJCQllYVszXSA9IHNyb21bc3J2LT5vZmYgKyAxIC0gb2ZmXSAmIDB4ZmY7CisJCQllYVs0XSA9IChzcm9tW3Nydi0+b2ZmICsgMiAtIG9mZl0gPj4gOCkgJiAweGZmOworCQkJZWFbNV0gPSBzcm9tW3Nydi0+b2ZmICsgMiAtIG9mZl0gJiAweGZmOworCisJCQl2YXJidWZfYXBwZW5kKGIsICIlcz0lcE0iLCBuYW1lLCBlYSk7CisJCX0gZWxzZSB7CisJCQl3ID0gc3JvbVtzcnYtPm9mZiAtIG9mZl07CisJCQl2YWwgPSAodyAmIHNydi0+bWFzaykgPj4gbWFza19zaGlmdChzcnYtPm1hc2spOworCQkJd2lkdGggPSBtYXNrX3dpZHRoKHNydi0+bWFzayk7CisKKwkJCXdoaWxlIChzcnYtPmZsYWdzICYgU1JGTF9NT1JFKSB7CisJCQkJc3J2Kys7CisJCQkJaWYgKHNydi0+b2ZmID09IDAgfHwgc3J2LT5vZmYgPCBvZmYpCisJCQkJCWNvbnRpbnVlOworCisJCQkJdyA9IHNyb21bc3J2LT5vZmYgLSBvZmZdOworCQkJCXZhbCArPQorCQkJCSAgICAoKHcgJiBzcnYtPm1hc2spID4+IG1hc2tfc2hpZnQoc3J2LT4KKwkJCQkJCQkJICAgbWFzaykpIDw8CisJCQkJICAgIHdpZHRoOworCQkJCXdpZHRoICs9IG1hc2tfd2lkdGgoc3J2LT5tYXNrKTsKKwkJCX0KKworCQkJaWYgKChmbGFncyAmIFNSRkxfTk9GRlMpCisJCQkgICAgJiYgKChpbnQpdmFsID09ICgxIDw8IHdpZHRoKSAtIDEpKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoZmxhZ3MgJiBTUkZMX0NDT0RFKSB7CisJCQkJaWYgKHZhbCA9PSAwKQorCQkJCQl2YXJidWZfYXBwZW5kKGIsICJjY29kZT0iKTsKKwkJCQllbHNlCisJCQkJCXZhcmJ1Zl9hcHBlbmQoYiwgImNjb2RlPSVjJWMiLAorCQkJCQkJICAgICAgKHZhbCA+PiA4KSwgKHZhbCAmIDB4ZmYpKTsKKwkJCX0KKwkJCS8qIExFRCBQb3dlcnNhdmUgZHV0eSBjeWNsZSBoYXMgdG8gYmUgc2NhbGVkOgorCQkJICoob25jb3VudCA+PiAyNCkgKG9mZmNvdW50ID4+IDgpCisJCQkgKi8KKwkJCWVsc2UgaWYgKGZsYWdzICYgU1JGTF9MRUREQykgeworCQkJCXUzMiB3MzIgPSAoKCh2YWwgPj4gOCkgJiAweGZmKSA8PCAyNCkgfAkvKiBvbmNvdW50ICovCisJCQkJICAgICgoKHZhbCAmIDB4ZmYpKSA8PCA4KTsJLyogb2ZmY291bnQgKi8KKwkJCQl2YXJidWZfYXBwZW5kKGIsICJsZWRkYz0lZCIsIHczMik7CisJCQl9IGVsc2UgaWYgKGZsYWdzICYgU1JGTF9QUkhFWCkKKwkJCQl2YXJidWZfYXBwZW5kKGIsICIlcz0weCV4IiwgbmFtZSwgdmFsKTsKKwkJCWVsc2UgaWYgKChmbGFncyAmIFNSRkxfUFJTSUdOKQorCQkJCSAmJiAodmFsICYgKDEgPDwgKHdpZHRoIC0gMSkpKSkKKwkJCQl2YXJidWZfYXBwZW5kKGIsICIlcz0lZCIsIG5hbWUsCisJCQkJCSAgICAgIChpbnQpKHZhbCB8ICh+MCA8PCB3aWR0aCkpKTsKKwkJCWVsc2UKKwkJCQl2YXJidWZfYXBwZW5kKGIsICIlcz0ldSIsIG5hbWUsIHZhbCk7CisJCX0KKwl9CisKKwlpZiAoc3JvbXJldiA+PSA0KSB7CisJCS8qIERvIHBlci1wYXRoIHZhcmlhYmxlcyAqLworCQl1aW50IHAsIHBiLCBwc3o7CisKKwkJaWYgKHNyb21yZXYgPj0gOCkgeworCQkJcGIgPSBTUk9NOF9QQVRIMDsKKwkJCXBzeiA9IFNST004X1BBVEgxIC0gU1JPTThfUEFUSDA7CisJCX0gZWxzZSB7CisJCQlwYiA9IFNST000X1BBVEgwOworCQkJcHN6ID0gU1JPTTRfUEFUSDEgLSBTUk9NNF9QQVRIMDsKKwkJfQorCisJCWZvciAocCA9IDA7IHAgPCBNQVhfUEFUSF9TUk9NOyBwKyspIHsKKwkJCWZvciAoc3J2ID0gcGVycGF0aF9wY2lfc3JvbXZhcnM7IHNydi0+bmFtZSAhPSBOVUxMOworCQkJICAgICBzcnYrKykgeworCQkJCWlmICgoc3J2LT5yZXZtYXNrICYgc3IpID09IDApCisJCQkJCWNvbnRpbnVlOworCisJCQkJaWYgKHBiICsgc3J2LT5vZmYgPCBvZmYpCisJCQkJCWNvbnRpbnVlOworCisJCQkJLyogVGhpcyBlbnRyeSBpcyBmb3IgbWZnYyBvbmx5LiBEb24ndCBnZW5lcmF0ZSBwYXJhbSBmb3IgaXQsICovCisJCQkJaWYgKHNydi0+ZmxhZ3MgJiBTUkZMX05PVkFSKQorCQkJCQljb250aW51ZTsKKworCQkJCXcgPSBzcm9tW3BiICsgc3J2LT5vZmYgLSBvZmZdOworCQkJCXZhbCA9ICh3ICYgc3J2LT5tYXNrKSA+PiBtYXNrX3NoaWZ0KHNydi0+bWFzayk7CisJCQkJd2lkdGggPSBtYXNrX3dpZHRoKHNydi0+bWFzayk7CisKKwkJCQkvKiBDaGVhdGluZzogbm8gcGVyLXBhdGggdmFyIGlzIG1vcmUgdGhhbiAxIHdvcmQgKi8KKworCQkJCWlmICgoc3J2LT5mbGFncyAmIFNSRkxfTk9GRlMpCisJCQkJICAgICYmICgoaW50KXZhbCA9PSAoMSA8PCB3aWR0aCkgLSAxKSkKKwkJCQkJY29udGludWU7CisKKwkJCQlpZiAoc3J2LT5mbGFncyAmIFNSRkxfUFJIRVgpCisJCQkJCXZhcmJ1Zl9hcHBlbmQoYiwgIiVzJWQ9MHgleCIsIHNydi0+bmFtZSwKKwkJCQkJCSAgICAgIHAsIHZhbCk7CisJCQkJZWxzZQorCQkJCQl2YXJidWZfYXBwZW5kKGIsICIlcyVkPSVkIiwgc3J2LT5uYW1lLAorCQkJCQkJICAgICAgcCwgdmFsKTsKKwkJCX0KKwkJCXBiICs9IHBzejsKKwkJfQorCX0KK30KKworLyoKKyAqIEluaXRpYWxpemUgbm9udm9sYXRpbGUgdmFyaWFibGUgdGFibGUgZnJvbSBzcHJvbS4KKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG5vbnplcm8gb24gZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgaW5pdHZhcnNfc3JvbV9wY2koc2lfdCAqc2loLCB2b2lkICpjdXJtYXAsIGNoYXIgKip2YXJzLCB1aW50ICpjb3VudCkKK3sKKwl1MTYgKnNyb20sICpzcm9td2luZG93OworCXU4IHNyb21yZXYgPSAwOworCXUzMiBzcjsKKwl2YXJidWZfdCBiOworCWNoYXIgKnZwLCAqYmFzZSA9IE5VTEw7CisJYm9vbCBmbGFzaCA9IGZhbHNlOworCWludCBlcnIgPSAwOworCisJLyoKKwkgKiBBcHBseSBDUkMgb3ZlciBTUk9NIGNvbnRlbnQgcmVnYXJkbGVzcyBTUk9NIGlzIHByZXNlbnQgb3Igbm90LAorCSAqIGFuZCB1c2UgdmFyaWFibGUgPGRldnBhdGg+c3JvbXJldidzIGV4aXN0ZW5jZSBpbiBmbGFzaCB0byBkZWNpZGUKKwkgKiBpZiB3ZSBzaG91bGQgcmV0dXJuIGFuIGVycm9yIHdoZW4gQ1JDIGZhaWxzIG9yIHJlYWQgU1JPTSB2YXJpYWJsZXMKKwkgKiBmcm9tIGZsYXNoLgorCSAqLworCXNyb20gPSBrbWFsbG9jKFNST01fTUFYLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNyb20pCisJCXJldHVybiAtMjsKKworCXNyb213aW5kb3cgPSAodTE2ICopIFNST01fT0ZGU0VUKHNpaCk7CisJaWYgKGFpX2lzX3Nwcm9tX2F2YWlsYWJsZShzaWgpKSB7CisJCWVyciA9CisJCSAgICBzcHJvbV9yZWFkX3BjaShzaWgsIHNyb213aW5kb3csIDAsIHNyb20sIFNST01fV09SRFMsCisJCQkJICAgdHJ1ZSk7CisKKwkJaWYgKChzcm9tW1NST000X1NJR05dID09IFNST000X1NJR05BVFVSRSkgfHwKKwkJICAgICgoKHNpaC0+YnVzY29yZXR5cGUgPT0gUENJRV9DT1JFX0lEKQorCQkgICAgICAmJiAoc2loLT5idXNjb3JlcmV2ID49IDYpKQorCQkgICAgIHx8ICgoc2loLT5idXNjb3JldHlwZSA9PSBQQ0lfQ09SRV9JRCkKKwkJCSAmJiAoc2loLT5idXNjb3JlcmV2ID49IDB4ZSkpKSkgeworCQkJLyogc3JvbXJldiA+PSA0LCByZWFkIG1vcmUgKi8KKwkJCWVyciA9CisJCQkgICAgc3Byb21fcmVhZF9wY2koc2loLCBzcm9td2luZG93LCAwLCBzcm9tLAorCQkJCQkgICBTUk9NNF9XT1JEUywgdHJ1ZSk7CisJCQlzcm9tcmV2ID0gc3JvbVtTUk9NNF9DUkNSRVZdICYgMHhmZjsKKwkJfSBlbHNlIGlmIChlcnIgPT0gMCkgeworCQkJLyogc3JvbSBpcyBnb29kIGFuZCBpcyByZXYgPCA0ICovCisJCQkvKiB0b3Agd29yZCBvZiBzcHJvbSBjb250YWlucyB2ZXJzaW9uIGFuZCBjcmM4ICovCisJCQlzcm9tcmV2ID0gc3JvbVtTUk9NX0NSQ1JFVl0gJiAweGZmOworCQkJLyogYmNtNDQwMSBzcm9tcyBtaXNwcm9ncmFtbWVkICovCisJCQlpZiAoc3JvbXJldiA9PSAweDEwKQorCQkJCXNyb21yZXYgPSAxOworCQl9CisJfQorI2lmIGRlZmluZWQoQkNNTlZSQU1SKQorCS8qIFVzZSBPVFAgaWYgU1BST00gbm90IGF2YWlsYWJsZSAqLworCWVsc2UgeworCQllcnIgPSBvdHBfcmVhZF9wY2koc2loLCBzcm9tLCBTUk9NX01BWCk7CisJCWlmIChlcnIgPT0gMCkKKwkJCS8qIE9UUCBvbmx5IGNvbnRhaW4gU1JPTSByZXY4L3JldjkgZm9yIG5vdyAqLworCQkJc3JvbXJldiA9IHNyb21bU1JPTTRfQ1JDUkVWXSAmIDB4ZmY7CisJCWVsc2UKKwkJCWVyciA9IDE7CisJfQorI2Vsc2UKKwllbHNlCisJCWVyciA9IDE7CisjZW5kaWYKKworCS8qCisJICogV2Ugd2FudCBpbnRlcm5hbC93bHRlc3QgZHJpdmVyIHRvIGNvbWUgdXAgd2l0aCBkZWZhdWx0CisJICogc3JvbXZhcnMgc28gd2UgY2FuIHByb2dyYW0gYSBibGFuayBTUFJPTS9PVFAuCisJICovCisJaWYgKGVycikgeworCQljaGFyICp2YWx1ZTsKKwkJdTMyIHZhbDsKKwkJdmFsID0gMDsKKworCQl2YWx1ZSA9IGFpX2dldGRldnBhdGh2YXIoc2loLCAic3JvbXJldiIpOworCQlpZiAodmFsdWUpIHsKKwkJCXNyb21yZXYgPSAodTgpIHNpbXBsZV9zdHJ0b3VsKHZhbHVlLCBOVUxMLCAwKTsKKwkJCWZsYXNoID0gdHJ1ZTsKKwkJCWdvdG8gdmFyc2NvbnQ7CisJCX0KKworCQl2YWx1ZSA9IGFpX2dldG52cmFtZmx2YXIoc2loLCAic3JvbXJldiIpOworCQlpZiAodmFsdWUpIHsKKwkJCWVyciA9IDA7CisJCQlnb3RvIGVycm91dDsKKwkJfQorCisJCXsKKwkJCWVyciA9IC0xOworCQkJZ290byBlcnJvdXQ7CisJCX0KKwl9CisKKyB2YXJzY29udDoKKwkvKiBCaXRtYXNrIGZvciB0aGUgc3JvbXJldiAqLworCXNyID0gMSA8PCBzcm9tcmV2OworCisJLyogc3JvbSB2ZXJzaW9uIGNoZWNrOiBDdXJyZW50IHZhbGlkIHZlcnNpb25zOiAxLCAyLCAzLCA0LCA1LCA4LCA5ICovCisJaWYgKChzciAmIDB4MzNlKSA9PSAwKSB7CisJCWVyciA9IC0yOworCQlnb3RvIGVycm91dDsKKwl9CisKKwliYXNlID0gdnAgPSBrbWFsbG9jKE1BWFNaX05WUkFNX1ZBUlMsIEdGUF9BVE9NSUMpOworCWlmICghdnApIHsKKwkJZXJyID0gLTI7CisJCWdvdG8gZXJyb3V0OworCX0KKworCS8qIHJlYWQgdmFyaWFibGVzIGZyb20gZmxhc2ggKi8KKwlpZiAoZmxhc2gpIHsKKwkJZXJyID0gaW5pdHZhcnNfZmxhc2goc2loLCAmdnAsIE1BWFNaX05WUkFNX1ZBUlMpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJvdXQ7CisJCWdvdG8gdmFyc2RvbmU7CisJfQorCisJdmFyYnVmX2luaXQoJmIsIGJhc2UsIE1BWFNaX05WUkFNX1ZBUlMpOworCisJLyogcGFyc2UgU1JPTSBpbnRvIG5hbWU9dmFsdWUgcGFpcnMuICovCisJX2luaXR2YXJzX3Nyb21fcGNpKHNyb21yZXYsIHNyb20sIDAsICZiKTsKKworCS8qIGZpbmFsIG51bGxieXRlIHRlcm1pbmF0b3IgKi8KKwl2cCA9IGIuYnVmOworCSp2cCsrID0gJ1wwJzsKKworIHZhcnNkb25lOgorCWVyciA9IGluaXR2YXJzX3RhYmxlKGJhc2UsIHZwLCB2YXJzLCBjb3VudCk7CisKKyBlcnJvdXQ6CisJaWYgKGJhc2UpCisJCWtmcmVlKGJhc2UpOworCisJa2ZyZWUoc3JvbSk7CisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IGluaXR2YXJzX3Nyb21fc2koc2lfdCAqc2loLCB2b2lkICpjdXJtYXAsIGNoYXIgKip2YXJzLCB1aW50ICp2YXJzeikKK3sKKwkvKiBTZWFyY2ggZmxhc2ggbnZyYW0gc2VjdGlvbiBmb3Igc3JvbSB2YXJpYWJsZXMgKi8KKwlyZXR1cm4gaW5pdHZhcnNfZmxhc2hfc2koc2loLCB2YXJzLCB2YXJzeik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvYmNtc3JvbV90YmwuaCBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvYmNtc3JvbV90YmwuaApzaW1pbGFyaXR5IGluZGV4IDg4JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvYmNtc3JvbV90YmwuaApyZW5hbWUgdG8gZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy9iY21zcm9tX3RibC5oCmluZGV4IDIyYWU3YzEuLmY0YjNlNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9iY21zcm9tX3RibC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvYmNtc3JvbV90YmwuaApAQCAtMTcsNyArMTcsNiBAQAogI2lmbmRlZglfYmNtc3JvbV90YmxfaF8KICNkZWZpbmUJX2JjbXNyb21fdGJsX2hfCiAKLSNpbmNsdWRlICJzYnBjbWNpYS5oIgogI2luY2x1ZGUgIndsaW9jdGwuaCIKIAogdHlwZWRlZiBzdHJ1Y3QgewpAQCAtNTExLDczICs1MTAsNCBAQAogI2RlZmluZSBPVFBfTUFORklECSgweGZmIC0gMykJLyogQ0lTVFBMX01BTkZJRCAqLwogI2RlZmluZSBPVFBfUkFXMQkoMHhmZiAtIDQpCS8qIExpa2UgUkFXLCBidXQgY29tZXMgZmlyc3QgKi8KIAotc3RhdGljIGNvbnN0IGNpc190dXBsZV90IGNpc19obmJ1dmFyc1tdID0gewotCXtPVFBfUkFXMSwgMCwgIiJ9LAkvKiBzcGVjaWFsIGNhc2UgKi8KLQl7T1RQX1ZFUlNfMSwgMCwgInNtYW5mIHNwcm9kdWN0bmFtZSJ9LAkvKiBzcGVjaWFsIGNhc2UgKG5vbiBCUkNNIHR1cGxlKSAqLwotCXtPVFBfTUFORklELCA0LCAiMm1hbmZpZCAycHJvZGlkIn0sCS8qIHNwZWNpYWwgY2FzZSAobm9uIEJSQ00gdHVwbGUpICovCi0Je0hOQlVfU1JPTVJFViwgMiwgIjFzcm9tcmV2In0sCi0JLyogTk9URTogc3ViZGV2aWQgaXMgYWxzbyB3cml0dGVuIHRvIGJvYXJkdHlwZS4KLQkgKiAgICAgICBOZWVkIHRvIHdyaXRlIEhOQlVfQk9BUkRUWVBFIHRvIGNoYW5nZSBpdCBpZiBpdCBpcyBkaWZmZXJlbnQuCi0JICovCi0Je0hOQlVfQ0hJUElELCAxMSwgIjJ2ZW5kaWQgMmRldmlkIDJjaGlwcmV2IDJzdWJ2ZW5kaWQgMnN1YmRldmlkIn0sCi0Je0hOQlVfQk9BUkRSRVYsIDMsICIyYm9hcmRyZXYifSwKLQl7SE5CVV9QQVBBUk1TLCAxMCwgIjJwYTBiMCAycGEwYjEgMnBhMGIyIDFwYTBpdHNzaXQgMXBhMG1heHB3ciAxb3BvIn0sCi0Je0hOQlVfQUEsIDMsICIxYWEyZyAxYWE1ZyJ9LAotCXtITkJVX0FBLCAzLCAiMWFhMCAxYWExIn0sCS8qIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KLQl7SE5CVV9BRywgNSwgIjFhZzAgMWFnMSAxYWcyIDFhZzMifSwKLQl7SE5CVV9CT0FSREZMQUdTLCA5LCAiNGJvYXJkZmxhZ3MgNGJvYXJkZmxhZ3MyIn0sCi0Je0hOQlVfTEVEUywgNSwgIjFsZWRiaDAgMWxlZGJoMSAxbGVkYmgyIDFsZWRiaDMifSwKLQl7SE5CVV9DQ09ERSwgNCwgIjJjY29kZSAxY2N0bCJ9LAotCXtITkJVX0NDS1BPLCAzLCAiMmNja3BvIn0sCi0Je0hOQlVfT0ZETVBPLCA1LCAiNG9mZG1wbyJ9LAotCXtITkJVX1JETElELCAzLCAiMnJkbGlkIn0sCi0Je0hOQlVfUlNTSVNNQlhBMkcsIDMsICIwcnNzaXNtZjJnIDByc3Npc21jMmcgMHJzc2lzYXYyZyAwYnhhMmcifSwJLyogc3BlY2lhbCBjYXNlICovCi0Je0hOQlVfUlNTSVNNQlhBNUcsIDMsICIwcnNzaXNtZjVnIDByc3Npc21jNWcgMHJzc2lzYXY1ZyAwYnhhNWcifSwJLyogc3BlY2lhbCBjYXNlICovCi0Je0hOQlVfWFRBTEZSRVEsIDUsICI0eHRhbGZyZXEifSwKLQl7SE5CVV9UUkkyRywgMiwgIjF0cmkyZyJ9LAotCXtITkJVX1RSSTVHLCA0LCAiMXRyaTVnbCAxdHJpNWcgMXRyaTVnaCJ9LAotCXtITkJVX1JYUE8yRywgMiwgIjFyeHBvMmcifSwKLQl7SE5CVV9SWFBPNUcsIDIsICIxcnhwbzVnIn0sCi0Je0hOQlVfQk9BUkROVU0sIDMsICIyYm9hcmRudW0ifSwKLQl7SE5CVV9NQUNBRERSLCA3LCAiNm1hY2FkZHIifSwJLyogc3BlY2lhbCBjYXNlICovCi0Je0hOQlVfUkRMU04sIDMsICIycmRsc24ifSwKLQl7SE5CVV9CT0FSRFRZUEUsIDMsICIyYm9hcmR0eXBlIn0sCi0Je0hOQlVfTEVEREMsIDMsICIybGVkZGMifSwKLQl7SE5CVV9SRExSTkRJUywgMiwgIjFyZGxuZGlzIn0sCi0Je0hOQlVfQ0hBSU5TV0lUQ0gsIDUsICIxdHhjaGFpbiAxcnhjaGFpbiAyYW50c3dpdGNoIn0sCi0Je0hOQlVfUkVHUkVWLCAyLCAiMXJlZ3JldiJ9LAotCXtITkJVX0ZFTSwgNSwgIjBhbnRzd2N0bDJnLCAwdHJpc28yZywgMHBkZXRyYW5nZTJnLCAwZXh0cGFnYWluMmcsIDB0c3NpcG9zMmciICIwYW50c3djdGw1ZywgMHRyaXNvNWcsIDBwZGV0cmFuZ2U1ZywgMGV4dHBhZ2FpbjVnLCAwdHNzaXBvczVnIn0sCS8qIHNwZWNpYWwgY2FzZSAqLwotCXtITkJVX1BBUEFSTVNfQzAsIDMxLCAiMW1heHAyZ2EwIDFpdHQyZ2EwIDJwYTJndzBhMCAycGEyZ3cxYTAgIgotCSAiMnBhMmd3MmEwIDFtYXhwNWdhMCAxaXR0NWdhMCAxbWF4cDVnaGEwIDFtYXhwNWdsYTAgMnBhNWd3MGEwICIKLQkgIjJwYTVndzFhMCAycGE1Z3cyYTAgMnBhNWdsdzBhMCAycGE1Z2x3MWEwIDJwYTVnbHcyYTAgMnBhNWdodzBhMCAiCi0JICIycGE1Z2h3MWEwIDJwYTVnaHcyYTAifSwKLQl7SE5CVV9QQVBBUk1TX0MxLCAzMSwgIjFtYXhwMmdhMSAxaXR0MmdhMSAycGEyZ3cwYTEgMnBhMmd3MWExICIKLQkgIjJwYTJndzJhMSAxbWF4cDVnYTEgMWl0dDVnYTEgMW1heHA1Z2hhMSAxbWF4cDVnbGExIDJwYTVndzBhMSAiCi0JICIycGE1Z3cxYTEgMnBhNWd3MmExIDJwYTVnbHcwYTEgMnBhNWdsdzFhMSAycGE1Z2x3MmExIDJwYTVnaHcwYTEgIgotCSAiMnBhNWdodzFhMSAycGE1Z2h3MmExIn0sCi0Je0hOQlVfUE9fQ0NLT0ZETSwgMTksICIyY2NrMmdwbyA0b2ZkbTJncG8gNG9mZG01Z3BvIDRvZmRtNWdscG8gIgotCSAiNG9mZG01Z2hwbyJ9LAotCXtITkJVX1BPX01DUzJHLCAxNywgIjJtY3MyZ3BvMCAybWNzMmdwbzEgMm1jczJncG8yIDJtY3MyZ3BvMyAiCi0JICIybWNzMmdwbzQgMm1jczJncG81IDJtY3MyZ3BvNiAybWNzMmdwbzcifSwKLQl7SE5CVV9QT19NQ1M1R00sIDE3LCAiMm1jczVncG8wIDJtY3M1Z3BvMSAybWNzNWdwbzIgMm1jczVncG8zICIKLQkgIjJtY3M1Z3BvNCAybWNzNWdwbzUgMm1jczVncG82IDJtY3M1Z3BvNyJ9LAotCXtITkJVX1BPX01DUzVHTEgsIDMzLCAiMm1jczVnbHBvMCAybWNzNWdscG8xIDJtY3M1Z2xwbzIgMm1jczVnbHBvMyAiCi0JICIybWNzNWdscG80IDJtY3M1Z2xwbzUgMm1jczVnbHBvNiAybWNzNWdscG83ICIKLQkgIjJtY3M1Z2hwbzAgMm1jczVnaHBvMSAybWNzNWdocG8yIDJtY3M1Z2hwbzMgIgotCSAiMm1jczVnaHBvNCAybWNzNWdocG81IDJtY3M1Z2hwbzYgMm1jczVnaHBvNyJ9LAotCXtITkJVX0NDS0ZJTFRUWVBFLCAyLCAiMWNja2RpZ2ZpbHR0eXBlIn0sCi0Je0hOQlVfUE9fQ0RELCAzLCAiMmNkZHBvIn0sCi0Je0hOQlVfUE9fU1RCQywgMywgIjJzdGJjcG8ifSwKLQl7SE5CVV9QT180ME0sIDMsICIyYnc0MHBvIn0sCi0Je0hOQlVfUE9fNDBNRFVQLCAzLCAiMmJ3ZHVwcG8ifSwKLQl7SE5CVV9SRExSV1UsIDIsICIxcmRscnd1In0sCi0Je0hOQlVfV1BTLCAzLCAiMXdwc2dwaW8gMXdwc2xlZCJ9LAotCXtITkJVX1VTQkZTLCAyLCAiMXVzYmZzIn0sCi0Je0hOQlVfQ1VTVE9NMSwgNSwgIjRjdXN0b212YXIxIn0sCi0Je09UUF9SQVcsIDAsICIifSwJLyogc3BlY2lhbCBjYXNlICovCi0Je0hOQlVfT0ZETVBPNUcsIDEzLCAiNG9mZG01Z3BvIDRvZmRtNWdscG8gNG9mZG01Z2hwbyJ9LAotCXtITkJVX1VTQkVQTlVNLCAzLCAiMnVzYmVwbnVtIn0sCi0JezB4RkYsIDAsICIifQotfTsKLQogI2VuZGlmCQkJCS8qIF9iY21zcm9tX3RibF9oXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy9kMTEuaCBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvZDExLmgKaW5kZXggYTlkMTgyZi4uZDkxZTQxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy9kMTEuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL2QxMS5oCkBAIC0xNyw2ICsxNyw4IEBACiAjaWZuZGVmCV9EMTFfSAogI2RlZmluZQlfRDExX0gKIAorI2luY2x1ZGUgPHNiY29uZmlnLmg+CisKICNpZm5kZWYgV0xfUlNTSV9BTlRfTUFYCiAjZGVmaW5lIFdMX1JTU0lfQU5UX01BWAkJNAkvKiBtYXggcG9zc2libGUgcnggYW50ZW5uYXMgKi8KICNlbGlmIFdMX1JTU0lfQU5UX01BWCAhPSA0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvaG5kZG1hLmMgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL2huZGRtYS5jCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9obmRkbWEuYwpyZW5hbWUgdG8gZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy9obmRkbWEuYwppbmRleCBiZTMzOWZlLi5mNjA3MzE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvaG5kZG1hLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy9obmRkbWEuYwpAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgPGJjbWRldnMuaD4KICNpbmNsdWRlIDxobmRzb2MuaD4KICNpbmNsdWRlIDxiY211dGlscy5oPgotI2luY2x1ZGUgPHNpdXRpbHMuaD4KKyNpbmNsdWRlIDxhaXV0aWxzLmg+CiAKICNpbmNsdWRlIDxzYmhuZGRtYS5oPgogI2luY2x1ZGUgPGhuZGRtYS5oPgpAQCAtMjkzLDIzICsyOTMsMTAgQEAKIAogCWRpLT5tc2dfbGV2ZWwgPSBtc2dfbGV2ZWwgPyBtc2dfbGV2ZWwgOiAmZG1hX21zZ19sZXZlbDsKIAotCS8qIG9sZCBjaGlwcyB3L28gc2IgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCAqLwotCUFTU0VSVChzaWggIT0gTlVMTCk7CiAKLQlkaS0+ZG1hNjQgPSAoKHNpX2NvcmVfc2ZsYWdzKHNpaCwgMCwgMCkgJiBTSVNGX0RNQTY0KSA9PSBTSVNGX0RNQTY0KTsKLQotCS8qIGNoZWNrIGFyZ3VtZW50cyAqLwotCUFTU0VSVChJU1BPV0VST0YyKG50eGQpKTsKLQlBU1NFUlQoSVNQT1dFUk9GMihucnhkKSk7Ci0KLQlpZiAobnJ4ZCA9PSAwKQotCQlBU1NFUlQoZG1hcmVnc3J4ID09IE5VTEwpOwotCWlmIChudHhkID09IDApCi0JCUFTU0VSVChkbWFyZWdzdHggPT0gTlVMTCk7CisJZGktPmRtYTY0ID0gKChhaV9jb3JlX3NmbGFncyhzaWgsIDAsIDApICYgU0lTRl9ETUE2NCkgPT0gU0lTRl9ETUE2NCk7CiAKIAkvKiBpbml0IGRtYSByZWcgcG9pbnRlciAqLwotCUFTU0VSVChudHhkIDw9IEQ2NE1BWEREKTsKLQlBU1NFUlQobnJ4ZCA8PSBENjRNQVhERCk7CiAJZGktPmQ2NHR4cmVncyA9IChkbWE2NHJlZ3NfdCAqKSBkbWFyZWdzdHg7CiAJZGktPmQ2NHJ4cmVncyA9IChkbWE2NHJlZ3NfdCAqKSBkbWFyZWdzcng7CiAJZGktPmhuZGRtYS5kaV9mbiA9IChjb25zdCBkaV9mY25fdCAqKSZkbWE2NHByb2M7CkBAIC0zNjksMTEgKzM1NiwxMSBAQAogCWRpLT5kYXRhb2Zmc2V0bG93ID0gZGktPmRhdGFvZmZzZXRsb3cgKyBTSV9TRFJBTV9TV0FQUEVEOwogI2VuZGlmCQkJCS8qIGRlZmluZWQoX19taXBzX18pICYmIGRlZmluZWQoSUxfQklHRU5ESUFOKSAqLwogCS8qIFdBUjY0NDUwIDogRE1BQ3RsLkFkZHIgZXh0IGZpZWxkcyBhcmUgbm90IHN1cHBvcnRlZCBpbiBTRElPRCBjb3JlLiAqLwotCWlmICgoc2lfY29yZWlkKHNpaCkgPT0gU0RJT0RfQ09SRV9JRCkKLQkgICAgJiYgKChzaV9jb3JlcmV2KHNpaCkgPiAwKSAmJiAoc2lfY29yZXJldihzaWgpIDw9IDIpKSkKKwlpZiAoKGFpX2NvcmVpZChzaWgpID09IFNESU9EX0NPUkVfSUQpCisJICAgICYmICgoYWlfY29yZXJldihzaWgpID4gMCkgJiYgKGFpX2NvcmVyZXYoc2loKSA8PSAyKSkpCiAJCWRpLT5hZGRyZXh0ID0gMDsKLQllbHNlIGlmICgoc2lfY29yZWlkKHNpaCkgPT0gSTJTX0NPUkVfSUQpICYmCi0JCSAoKHNpX2NvcmVyZXYoc2loKSA9PSAwKSB8fCAoc2lfY29yZXJldihzaWgpID09IDEpKSkKKwllbHNlIGlmICgoYWlfY29yZWlkKHNpaCkgPT0gSTJTX0NPUkVfSUQpICYmCisJCSAoKGFpX2NvcmVyZXYoc2loKSA9PSAwKSB8fCAoYWlfY29yZXJldihzaWgpID09IDEpKSkKIAkJZGktPmFkZHJleHQgPSAwOwogCWVsc2UKIAkJZGktPmFkZHJleHQgPSBfZG1hX2lzYWRkcmV4dChkaSk7CkBAIC00ODgsNyArNDc1LDYgQEAKICNlbHNlCiAJaWYgKChkaS0+ZGF0YW9mZnNldGxvdyA9PSAwKSB8fCAhKFBIWVNBRERSTE8ocGEpICYgUENJMzJBRERSX0hJR0gpKSB7CiAjZW5kaWYJCQkJLyogZGVmaW5lZChfX21pcHNfXykgJiYgZGVmaW5lZChJTF9CSUdFTkRJQU4pICovCi0JCUFTU0VSVCgoUEhZU0FERFJISShwYSkgJiBQQ0k2NEFERFJfSElHSCkgPT0gMCk7CiAKIAkJV19TTSgmZGRyaW5nW291dGlkeF0uYWRkcmxvdywKIAkJICAgICBCVVNfU1dBUDMyKFBIWVNBRERSTE8ocGEpICsgZGktPmRhdGFvZmZzZXRsb3cpKTsKQEAgLTQ5OSwxMSArNDg1LDkgQEAKIAl9IGVsc2UgewogCQkvKiBhZGRyZXNzIGV4dGVuc2lvbiBmb3IgMzItYml0IFBDSSAqLwogCQl1MzIgYWU7Ci0JCUFTU0VSVChkaS0+YWRkcmV4dCk7CiAKIAkJYWUgPSAoUEhZU0FERFJMTyhwYSkgJiBQQ0kzMkFERFJfSElHSCkgPj4gUENJMzJBRERSX0hJR0hfU0hJRlQ7CiAJCVBIWVNBRERSTE8ocGEpICY9IH5QQ0kzMkFERFJfSElHSDsKLQkJQVNTRVJUKFBIWVNBRERSSEkocGEpID09IDApOwogCiAJCWN0cmwyIHw9IChhZSA8PCBENjRfQ1RSTDJfQUVfU0hJRlQpICYgRDY0X0NUUkwyX0FFOwogCQlXX1NNKCZkZHJpbmdbb3V0aWR4XS5hZGRybG93LApAQCAtNTQ0LDEwICs1MjgsNiBAQAogCiAJRE1BX1RSQUNFKCgiJXM6IGRtYV9kZXRhY2hcbiIsIGRpLT5uYW1lKSk7CiAKLQkvKiBzaG91bGRuJ3QgYmUgaGVyZSBpZiBkZXNjcmlwdG9ycyBhcmUgdW5yZWNsYWltZWQgKi8KLQlBU1NFUlQoZGktPnR4aW4gPT0gZGktPnR4b3V0KTsKLQlBU1NFUlQoZGktPnJ4aW4gPT0gZGktPnJ4b3V0KTsKLQogCS8qIGZyZWUgZG1hIGRlc2NyaXB0b3IgcmluZ3MgKi8KIAlpZiAoZGktPnR4ZDY0KQogCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRpLT5wYnVzLCBkaS0+dHhkYWxsb2MsCkBAIC02MDIsMTQgKzU4MiwxMiBAQAogCQlpZiAoIV9kbWE2NF9hZGRyZXh0KGRpLT5kNjR0eHJlZ3MpKSB7CiAJCQlETUFfRVJST1IoKCIlczogX2RtYV9pc2FkZHJleHQ6IERNQTY0IHR4IGRvZXNuJ3QgaGF2ZSAiCiAJCQkJICAgIkFFIHNldFxuIiwgZGktPm5hbWUpKTsKLQkJCUFTU0VSVCgwKTsKIAkJfQogCQlyZXR1cm4gdHJ1ZTsKIAl9IGVsc2UgaWYgKGRpLT5kNjRyeHJlZ3MgIT0gTlVMTCkgewogCQlpZiAoIV9kbWE2NF9hZGRyZXh0KGRpLT5kNjRyeHJlZ3MpKSB7CiAJCQlETUFfRVJST1IoKCIlczogX2RtYV9pc2FkZHJleHQ6IERNQTY0IHJ4IGRvZXNuJ3QgaGF2ZSAiCiAJCQkJICAgIkFFIHNldFxuIiwgZGktPm5hbWUpKTsKLQkJCUFTU0VSVCgwKTsKIAkJfQogCQlyZXR1cm4gdHJ1ZTsKIAl9CkBAIC02NDIsOCArNjIwLDYgQEAKIAl9IGVsc2UgewogCQkvKiBETUE2NCAzMmJpdHMgYWRkcmVzcyBleHRlbnNpb24gKi8KIAkJdTMyIGFlOwotCQlBU1NFUlQoZGktPmFkZHJleHQpOwotCQlBU1NFUlQoUEhZU0FERFJISShwYSkgPT0gMCk7CiAKIAkJLyogc2hpZnQgdGhlIGhpZ2ggYml0KHMpIGZyb20gcGEgdG8gYWUgKi8KIAkJYWUgPSAoUEhZU0FERFJMTyhwYSkgJiBQQ0kzMkFERFJfSElHSCkgPj4KQEAgLTczOCw3ICs3MTQsNyBAQAogICogICBBZnRlciBpdCByZWFjaGVzIHRoZSBtYXggc2l6ZSBvZiBidWZmZXIsIHRoZSBkYXRhIGNvbnRpbnVlcyBpbiBuZXh0IERNQSBkZXNjcmlwdG9yCiAgKiAgIGJ1ZmZlciBXSVRIT1VUIERNQSBoZWFkZXIKICAqLwotc3RhdGljIHZvaWQgKkJDTUZBU1RQQVRIIF9kbWFfcngoZG1hX2luZm9fdCAqZGkpCitzdGF0aWMgdm9pZCAqX2RtYV9yeChkbWFfaW5mb190ICpkaSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqcCwgKmhlYWQsICp0YWlsOwogCXVpbnQgbGVuOwpAQCAtNzUyLDE2ICs3MjgsNyBAQAogCiAJbGVuID0gbGUxNl90b19jcHUoKih1MTYgKikgKGhlYWQtPmRhdGEpKTsKIAlETUFfVFJBQ0UoKCIlczogZG1hX3J4IGxlbiAlZFxuIiwgZGktPm5hbWUsIGxlbikpOwotCi0jaWYgZGVmaW5lZChfX21pcHNfXykKLSNkZWZpbmUgT1NMX1VOQ0FDSEVEKHZhKSAgICAgICAgKCh2b2lkICopS1NFRzFBRERSKCh2YSkpKQotCWlmICghbGVuKSB7Ci0JCXdoaWxlICghKGxlbiA9ICoodTE2ICopIE9TTF9VTkNBQ0hFRChoZWFkLT5kYXRhKSkpCi0JCQl1ZGVsYXkoMSk7Ci0KLQkJKih1MTYgKikgKGhlYWQtPmRhdGEpID0gY3B1X3RvX2xlMTYoKHUxNikgbGVuKTsKLQl9Ci0jZW5kaWYJCQkJLyogZGVmaW5lZChfX21pcHNfXykgKi8KKwlkbWFfc3Bpbl9mb3JfbGVuKGxlbiwgaGVhZCk7CiAKIAkvKiBzZXQgYWN0dWFsIGxlbmd0aCAqLwogCXBrdF9sZW4gPSBtaW4oKGRpLT5yeG9mZnNldCArIGxlbiksIGRpLT5yeGJ1ZnNpemUpOwpAQCAtNzgzLDcgKzc1MCw2IEBACiAjaWZkZWYgQkNNREJHCiAJCWlmIChyZXNpZCA+IDApIHsKIAkJCXVpbnQgY3VyOwotCQkJQVNTRVJUKHAgPT0gTlVMTCk7CiAJCQljdXIgPQogCQkJICAgIEIySSgoKFJfUkVHKCZkaS0+ZDY0cnhyZWdzLT5zdGF0dXMwKSAmCiAJCQkJICBENjRfUlMwX0NEX01BU0spIC0KQEAgLTc5Nyw3ICs3NjMsNyBAQAogCQlpZiAoKGRpLT5obmRkbWEuZG1hY3RybGZsYWdzICYgRE1BX0NUUkxfUlhNVUxUSSkgPT0gMCkgewogCQkJRE1BX0VSUk9SKCgiJXM6IGRtYV9yeDogYmFkIGZyYW1lIGxlbmd0aCAoJWQpXG4iLAogCQkJCSAgIGRpLT5uYW1lLCBsZW4pKTsKLQkJCXBrdF9idWZfZnJlZV9za2IoaGVhZCk7CisJCQliY21fcGt0X2J1Zl9mcmVlX3NrYihoZWFkKTsKIAkJCWRpLT5obmRkbWEucnhnaWFudHMrKzsKIAkJCWdvdG8gbmV4dF9mcmFtZTsKIAkJfQpAQCAtODExLDcgKzc3Nyw3IEBACiAgKiAgdGhpcyB3aWxsIHN0YWxsIHRoZSByeCBkbWEgYW5kIHVzZXIgbWlnaHQgd2FudCB0byBjYWxsIHJ4ZmlsbCBhZ2FpbiBhc2FwCiAgKiAgVGhpcyB1bmxpa2VseSBoYXBwZW5zIG9uIG1lbW9yeS1yaWNoIE5JQywgYnV0IG9mdGVuIG9uIG1lbW9yeS1jb25zdHJhaW5lZCBkb25nbGUKICAqLwotc3RhdGljIGJvb2wgQkNNRkFTVFBBVEggX2RtYV9yeGZpbGwoZG1hX2luZm9fdCAqZGkpCitzdGF0aWMgYm9vbCBfZG1hX3J4ZmlsbChkbWFfaW5mb190ICpkaSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqcDsKIAl1MTYgcnhpbiwgcnhvdXQ7CkBAIC04NDUsNyArODExLDcgQEAKIAkJICAgc2l6ZSB0byBiZSBhbGxvY2F0ZWQKIAkJICovCiAKLQkJcCA9IHBrdF9idWZfZ2V0X3NrYihkaS0+cnhidWZzaXplICsgZXh0cmFfb2Zmc2V0KTsKKwkJcCA9IGJjbV9wa3RfYnVmX2dldF9za2IoZGktPnJ4YnVmc2l6ZSArIGV4dHJhX29mZnNldCk7CiAKIAkJaWYgKHAgPT0gTlVMTCkgewogCQkJRE1BX0VSUk9SKCgiJXM6IGRtYV9yeGZpbGw6IG91dCBvZiByeGJ1ZnNcbiIsCkBAIC04NzQsMTAgKzg0MCw3IEBACiAJCXBhID0gcGNpX21hcF9zaW5nbGUoZGktPnBidXMsIHAtPmRhdGEsCiAJCQlkaS0+cnhidWZzaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCi0JCUFTU0VSVChJU19BTElHTkVEKFBIWVNBRERSTE8ocGEpLCA0KSk7Ci0KIAkJLyogc2F2ZSB0aGUgZnJlZSBwYWNrZXQgcG9pbnRlciAqLwotCQlBU1NFUlQoZGktPnJ4cFtyeG91dF0gPT0gTlVMTCk7CiAJCWRpLT5yeHBbcnhvdXRdID0gcDsKIAogCQkvKiByZXNldCBmbGFncyBmb3IgZWFjaCBkZXNjcmlwdG9yICovCkBAIC05NDYsMTAgKzkwOSwxMCBAQAogCURNQV9UUkFDRSgoIiVzOiBkbWFfcnhyZWNsYWltXG4iLCBkaS0+bmFtZSkpOwogCiAJd2hpbGUgKChwID0gX2RtYV9nZXRuZXh0cnhwKGRpLCB0cnVlKSkpCi0JCXBrdF9idWZfZnJlZV9za2IocCk7CisJCWJjbV9wa3RfYnVmX2ZyZWVfc2tiKHApOwogfQogCi1zdGF0aWMgdm9pZCAqQkNNRkFTVFBBVEggX2RtYV9nZXRuZXh0cnhwKGRtYV9pbmZvX3QgKmRpLCBib29sIGZvcmNlYWxsKQorc3RhdGljIHZvaWQgKl9kbWFfZ2V0bmV4dHJ4cChkbWFfaW5mb190ICpkaSwgYm9vbCBmb3JjZWFsbCkKIHsKIAlpZiAoZGktPm5yeGQgPT0gMCkKIAkJcmV0dXJuIE5VTEw7CkBAIC0xMDE5LDggKzk4Miw2IEBACiAJCXJldHVybiAwOwogCX0KIAotCUFTU0VSVCgoZmxhZ3MgJiB+bWFzaykgPT0gMCk7Ci0KIAlkbWFjdHJsZmxhZ3MgJj0gfm1hc2s7CiAJZG1hY3RybGZsYWdzIHw9IGZsYWdzOwogCkBAIC0xMDUzLDkgKzEwMTQsNiBAQAogewogCWlmICghc3RyY21wKG5hbWUsICImdHhhdmFpbCIpKQogCQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpJihkaS0+aG5kZG1hLnR4YXZhaWwpOwotCWVsc2UgewotCQlBU1NFUlQoMCk7Ci0JfQogCXJldHVybiAwOwogfQogCkBAIC0xMDYzLDggKzEwMjEsNiBAQAogdTggZG1hX2FsaWduX3NpemV0b2JpdHModWludCBzaXplKQogewogCXU4IGJpdHBvcyA9IDA7Ci0JQVNTRVJUKHNpemUpOwotCUFTU0VSVCghKHNpemUgJiAoc2l6ZSAtIDEpKSk7CiAJd2hpbGUgKHNpemUgPj49IDEpIHsKIAkJYml0cG9zKys7CiAJfQpAQCAtMTE3MSw3ICsxMTI3LDcgQEAKIAkgICAgIEQ2NF9YQ19TRSk7CiB9CiAKLXN0YXRpYyB2b2lkIEJDTUZBU1RQQVRIIGRtYTY0X3R4cmVjbGFpbShkbWFfaW5mb190ICpkaSwgdHhkX3JhbmdlX3QgcmFuZ2UpCitzdGF0aWMgdm9pZCBkbWE2NF90eHJlY2xhaW0oZG1hX2luZm9fdCAqZGksIHR4ZF9yYW5nZV90IHJhbmdlKQogewogCXZvaWQgKnA7CiAKQEAgLTExODcsNyArMTE0Myw3IEBACiAJd2hpbGUgKChwID0gZG1hNjRfZ2V0bmV4dHR4cChkaSwgcmFuZ2UpKSkgewogCQkvKiBGb3IgdW5mcmFtZWQgZGF0YSwgd2UgZG9uJ3QgaGF2ZSBhbnkgcGFja2V0cyB0byBmcmVlICovCiAJCWlmICghKGRpLT5obmRkbWEuZG1hY3RybGZsYWdzICYgRE1BX0NUUkxfVU5GUkFNRUQpKQotCQkJcGt0X2J1Zl9mcmVlX3NrYihwKTsKKwkJCWJjbV9wa3RfYnVmX2ZyZWVfc2tiKHApOwogCX0KIH0KIApAQCAtMTIzMCwxMiArMTE4Niw4IEBACiAJCWRpLT50eGRhbGlnbiA9ICh1aW50KSAoKHM4ICopZGktPnR4ZDY0IC0gKHM4ICopIHZhKTsKIAkJUEhZU0FERFJMT1NFVChkaS0+dHhkcGEsCiAJCQkgICAgICBQSFlTQUREUkxPKGRpLT50eGRwYW9yaWcpICsgZGktPnR4ZGFsaWduKTsKLQkJLyogTWFrZSBzdXJlIHRoYXQgYWxpZ25tZW50IGRpZG4ndCBvdmVyZmxvdyAqLwotCQlBU1NFUlQoUEhZU0FERFJMTyhkaS0+dHhkcGEpID49IFBIWVNBRERSTE8oZGktPnR4ZHBhb3JpZykpOwotCiAJCVBIWVNBRERSSElTRVQoZGktPnR4ZHBhLCBQSFlTQUREUkhJKGRpLT50eGRwYW9yaWcpKTsKIAkJZGktPnR4ZGFsbG9jID0gYWxsb2NlZDsKLQkJQVNTRVJUKElTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpZGktPnR4ZDY0LCBhbGlnbikpOwogCX0gZWxzZSB7CiAJCXZhID0gZG1hX3JpbmdhbGxvYyhkaSwgRDY0UklOR0FMSUdOLCBzaXplLCAmYWxpZ25fYml0cywKIAkJCSZhbGxvY2VkLCAmZGktPnJ4ZHBhb3JpZyk7CkBAIC0xMjQ4LDEyICsxMjAwLDggQEAKIAkJZGktPnJ4ZGFsaWduID0gKHVpbnQpICgoczggKilkaS0+cnhkNjQgLSAoczggKikgdmEpOwogCQlQSFlTQUREUkxPU0VUKGRpLT5yeGRwYSwKIAkJCSAgICAgIFBIWVNBRERSTE8oZGktPnJ4ZHBhb3JpZykgKyBkaS0+cnhkYWxpZ24pOwotCQkvKiBNYWtlIHN1cmUgdGhhdCBhbGlnbm1lbnQgZGlkbid0IG92ZXJmbG93ICovCi0JCUFTU0VSVChQSFlTQUREUkxPKGRpLT5yeGRwYSkgPj0gUEhZU0FERFJMTyhkaS0+cnhkcGFvcmlnKSk7Ci0KIAkJUEhZU0FERFJISVNFVChkaS0+cnhkcGEsIFBIWVNBRERSSEkoZGktPnJ4ZHBhb3JpZykpOwogCQlkaS0+cnhkYWxsb2MgPSBhbGxvY2VkOwotCQlBU1NFUlQoSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylkaS0+cnhkNjQsIGFsaWduKSk7CiAJfQogCiAJcmV0dXJuIHRydWU7CkBAIC0xMzk2LDcgKzEzNDQsNiBAQAogCQlmbGFncyB8PSBENjRfQ1RSTDFfRU9UOwogCiAJZG1hNjRfZGRfdXBkKGRpLCBkaS0+dHhkNjQsIHBhLCB0eG91dCwgJmZsYWdzLCBsZW4pOwotCUFTU0VSVChkaS0+dHhwW3R4b3V0XSA9PSBOVUxMKTsKIAogCS8qIHNhdmUgdGhlIGJ1ZmZlciBwb2ludGVyIC0gdXNlZCBieSBkbWFfZ2V0cG9zICovCiAJZGktPnR4cFt0eG91dF0gPSBidWY7CkBAIC0xNDI3LDcgKzEzNzQsNyBAQAogICogV0FSTklORzogY2FsbCBtdXN0IGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgZm9yIGVycm9yLgogICogICB0aGUgZXJyb3IodG9zcyBmcmFtZXMpIGNvdWxkIGJlIGZhdGFsIGFuZCBjYXVzZSBtYW55IHN1YnNlcXVlbnQgaGFyZCB0byBkZWJ1ZyBwcm9ibGVtcwogICovCi1zdGF0aWMgaW50IEJDTUZBU1RQQVRIIGRtYTY0X3R4ZmFzdChkbWFfaW5mb190ICpkaSwgc3RydWN0IHNrX2J1ZmYgKnAwLAorc3RhdGljIGludCBkbWE2NF90eGZhc3QoZG1hX2luZm9fdCAqZGksIHN0cnVjdCBza19idWZmICpwMCwKIAkJCQkgICAgYm9vbCBjb21taXQpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnAsICpuZXh0OwpAQCAtMTQ1MSw5ICsxMzk4LDYgQEAKIAogCQlkYXRhID0gcC0+ZGF0YTsKIAkJbGVuID0gcC0+bGVuOwotI2lmZGVmIEJDTV9ETUFQQUQKLQkJbGVuICs9IFBLVERNQVBBRChkaS0+b3NoLCBwKTsKLSNlbmRpZgkJCQkvKiBCQ01fRE1BUEFEICovCiAJCW5leHQgPSBwLT5uZXh0OwogCiAJCS8qIHJldHVybiBub256ZXJvIGlmIG91dCBvZiB0eCBkZXNjcmlwdG9ycyAqLwpAQCAtMTUwNCw3ICsxNDQ4LDYgQEAKIAkJCQlwYSA9IG1hcC0+c2Vnc1tqIC0gMV0uYWRkcjsKIAkJCX0KIAkJCWRtYTY0X2RkX3VwZChkaSwgZGktPnR4ZDY0LCBwYSwgdHhvdXQsICZmbGFncywgbGVuKTsKLQkJCUFTU0VSVChkaS0+dHhwW3R4b3V0XSA9PSBOVUxMKTsKIAogCQkJdHhvdXQgPSBORVhUVFhEKHR4b3V0KTsKIAkJfQpAQCAtMTUzNyw3ICsxNDgwLDcgQEAKIAogIG91dG9mdHhkOgogCURNQV9FUlJPUigoIiVzOiBkbWFfdHhmYXN0OiBvdXQgb2YgdHhkcyAhISFcbiIsIGRpLT5uYW1lKSk7Ci0JcGt0X2J1Zl9mcmVlX3NrYihwMCk7CisJYmNtX3BrdF9idWZfZnJlZV9za2IocDApOwogCWRpLT5obmRkbWEudHhhdmFpbCA9IDA7CiAJZGktPmhuZGRtYS50eG5vYnVmKys7CiAJcmV0dXJuIC0xOwpAQCAtMTU1Myw3ICsxNDk2LDcgQEAKICAqIElmIHJhbmdlIGlzIEhORERNQV9SQU5HRV9BTEwsIHJlY2xhaW0gYWxsIHR4ZChzKSBwb3N0ZWQgdG8gdGhlIHJpbmcgYW5kCiAgKiByZXR1cm4gYXNzb2NpYXRlZCBwYWNrZXQgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgaGFyZHdhcmUgcG9pbnRlcnMuCiAgKi8KLXN0YXRpYyB2b2lkICpCQ01GQVNUUEFUSCBkbWE2NF9nZXRuZXh0dHhwKGRtYV9pbmZvX3QgKmRpLCB0eGRfcmFuZ2VfdCByYW5nZSkKK3N0YXRpYyB2b2lkICpkbWE2NF9nZXRuZXh0dHhwKGRtYV9pbmZvX3QgKmRpLCB0eGRfcmFuZ2VfdCByYW5nZSkKIHsKIAl1MTYgc3RhcnQsIGVuZCwgaTsKIAl1MTYgYWN0aXZlX2Rlc2M7CkBAIC0xNjQ1LDE1ICsxNTg4LDEyIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkICpCQ01GQVNUUEFUSCBkbWE2NF9nZXRuZXh0cnhwKGRtYV9pbmZvX3QgKmRpLCBib29sIGZvcmNlYWxsKQorc3RhdGljIHZvaWQgKmRtYTY0X2dldG5leHRyeHAoZG1hX2luZm9fdCAqZGksIGJvb2wgZm9yY2VhbGwpCiB7CiAJdWludCBpLCBjdXJyOwogCXZvaWQgKnJ4cDsKIAlkbWFhZGRyX3QgcGE7CiAKLQkvKiBpZiBmb3JjaW5nLCBkbWEgZW5naW5lIG11c3QgYmUgZGlzYWJsZWQgKi8KLQlBU1NFUlQoIWZvcmNlYWxsIHx8ICFkbWE2NF9yeGVuYWJsZWQoZGkpKTsKLQogCWkgPSBkaS0+cnhpbjsKIAogCS8qIHJldHVybiBpZiBubyBwYWNrZXRzIHBvc3RlZCAqLwpAQCAtMTY3MCw3ICsxNjEwLDYgQEAKIAogCS8qIGdldCB0aGUgcGFja2V0IHBvaW50ZXIgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgcnggZGVzY3JpcHRvciAqLwogCXJ4cCA9IGRpLT5yeHBbaV07Ci0JQVNTRVJUKHJ4cCk7CiAJZGktPnJ4cFtpXSA9IE5VTEw7CiAKIAlQSFlTQUREUkxPU0VUKHBhLApAQCAtMTcxMiw4ICsxNjUxLDYgQEAKIAl1MzIgdzsKIAl1MTYgZmlyc3QsIGxhc3Q7CiAKLQlBU1NFUlQoZG1hNjRfdHhzdXNwZW5kZWRpZGxlKGRpKSk7Ci0KIAluYWN0aXZlID0gX2RtYV90eGFjdGl2ZShkaSk7CiAJYWQgPSAodTE2KSAoQjJJCiAJCSAgICAgICAoKCgoUl9SRUcoJmRpLT5kNjR0eHJlZ3MtPnN0YXR1czEpICYKQEAgLTE3MjEsOCArMTY1OCw2IEBACiAJCQkgIC0gZGktPnhtdHB0cmJhc2UpICYgRDY0X1hTMV9BRF9NQVNLKSwgZG1hNjRkZF90KSk7CiAJcm90ID0gVFhEKGFkIC0gZGktPnR4aW4pOwogCi0JQVNTRVJUKHJvdCA8IGRpLT5udHhkKTsKLQogCS8qIGZ1bGwtcmluZyBjYXNlIGlzIGEgbG90IGhhcmRlciAtIGRvbid0IHdvcnJ5IGFib3V0IHRoaXMgKi8KIAlpZiAocm90ID49IChkaS0+bnR4ZCAtIG5hY3RpdmUpKSB7CiAJCURNQV9FUlJPUigoIiVzOiBkbWFfdHhyb3RhdGU6IHJpbmcgZnVsbCAtIHB1bnRcbiIsIGRpLT5uYW1lKSk7CkBAIC0xNzU2LDcgKzE2OTEsNiBAQAogCQlXX1NNKCZkaS0+dHhkNjRbb2xkXS5hZGRyaGlnaCwgQlVTX1NXQVAzMigweGRlYWRiZWVmKSk7CiAKIAkJLyogbW92ZSB0aGUgY29ycmVzcG9uZGluZyB0eHBbXSBlbnRyeSAqLwotCQlBU1NFUlQoZGktPnR4cFtuZXddID09IE5VTEwpOwogCQlkaS0+dHhwW25ld10gPSBkaS0+dHhwW29sZF07CiAKIAkJLyogTW92ZSB0aGUgbWFwICovCkBAIC0xNzgzLDE2ICsxNzE3LDE2IEBACiB7CiAJLyogUGVyZm9ybSA2NC1iaXQgY2hlY2tzIG9ubHkgaWYgd2Ugd2FudCB0byBhZHZlcnRpc2UgNjQtYml0ICg+IDMyYml0KSBjYXBhYmlsaXR5KSAqLwogCS8qIERNQSBlbmdpbmUgaXMgNjQtYml0IGNhcGFibGUgKi8KLQlpZiAoKHNpX2NvcmVfc2ZsYWdzKHNpaCwgMCwgMCkgJiBTSVNGX0RNQTY0KSA9PSBTSVNGX0RNQTY0KSB7CisJaWYgKChhaV9jb3JlX3NmbGFncyhzaWgsIDAsIDApICYgU0lTRl9ETUE2NCkgPT0gU0lTRl9ETUE2NCkgewogCQkvKiBiYWNrcGxhbmUgYXJlIDY0LWJpdCBjYXBhYmxlICovCi0JCWlmIChzaV9iYWNrcGxhbmU2NChzaWgpKQorCQlpZiAoYWlfYmFja3BsYW5lNjQoc2loKSkKIAkJCS8qIElmIGJ1cyBpcyBTeXN0ZW0gQmFja3BsYW5lIG9yIFBDSUUgdGhlbiB3ZSBjYW4gYWNjZXNzIDY0LWJpdHMgKi8KIAkJCWlmICgoc2loLT5idXN0eXBlID09IFNJX0JVUykgfHwKIAkJCSAgICAoKHNpaC0+YnVzdHlwZSA9PSBQQ0lfQlVTKSAmJgogCQkJICAgICAoc2loLT5idXNjb3JldHlwZSA9PSBQQ0lFX0NPUkVfSUQpKSkKIAkJCQlyZXR1cm4gRE1BRERSV0lEVEhfNjQ7CiAJfQotCUFTU0VSVCgwKTsgLyogRE1BIGhhcmR3YXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIqLworCS8qIERNQSBoYXJkd2FyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyKi8KIAlyZXR1cm4gRE1BRERSV0lEVEhfNjQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9uaWNwY2kuYyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvbmljcGNpLmMKc2ltaWxhcml0eSBpbmRleCA5MiUKcmVuYW1lIGZyb20gZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS91dGlsL25pY3BjaS5jCnJlbmFtZSB0byBkcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL25pY3BjaS5jCmluZGV4IGExZmIyZjAuLjE4Yjg0NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9uaWNwY2kuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL25pY3BjaS5jCkBAIC0xOSw3ICsxOSw4IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8YmNtZGVmcy5oPgogI2luY2x1ZGUgPGJjbXV0aWxzLmg+Ci0jaW5jbHVkZSA8c2l1dGlscy5oPgorI2luY2x1ZGUgPGJjbW52cmFtLmg+CisjaW5jbHVkZSA8YWl1dGlscy5oPgogI2luY2x1ZGUgPGhuZHNvYy5oPgogI2luY2x1ZGUgPGJjbWRldnMuaD4KICNpbmNsdWRlIDxzYmNoaXBjLmg+CkBAIC04Myw4ICs4NCw2IEBACiB7CiAJcGNpY29yZV9pbmZvX3QgKnBpOwogCi0JQVNTRVJUKHNpaC0+YnVzdHlwZSA9PSBQQ0lfQlVTKTsKLQogCS8qIGFsbG9jIHBjaWNvcmVfaW5mb190ICovCiAJcGkgPSBremFsbG9jKHNpemVvZihwY2ljb3JlX2luZm9fdCksIEdGUF9BVE9NSUMpOwogCWlmIChwaSA9PSBOVUxMKSB7CkBAIC05OCwxMCArOTcsOCBAQAogCWlmIChzaWgtPmJ1c2NvcmV0eXBlID09IFBDSUVfQ09SRV9JRCkgewogCQl1OCBjYXBfcHRyOwogCQlwaS0+cmVncy5wY2llcmVncyA9IChzYnBjaWVyZWdzX3QgKikgcmVnczsKLQkJY2FwX3B0ciA9Ci0JCSAgICBwY2ljb3JlX2ZpbmRfcGNpX2NhcGFiaWxpdHkocGktPmRldiwgUENJX0NBUF9QQ0lFQ0FQX0lELAotCQkJCQkJTlVMTCwgTlVMTCk7Ci0JCUFTU0VSVChjYXBfcHRyKTsKKwkJY2FwX3B0ciA9IHBjaWNvcmVfZmluZF9wY2lfY2FwYWJpbGl0eShwaS0+ZGV2LCBQQ0lfQ0FQX0lEX0VYUCwKKwkJCQkJCSAgICAgIE5VTEwsIE5VTEwpOwogCQlwaS0+cGNpZWNhcF9sY3JlZ19vZmZzZXQgPSBjYXBfcHRyICsgUENJRV9DQVBfTElOS0NUUkxfT0ZGU0VUOwogCX0gZWxzZQogCQlwaS0+cmVncy5wY2lyZWdzID0gKHN0cnVjdCBzYnBjaXJlZ3MgKikgcmVnczsKQEAgLTEzMCwxNiArMTI3LDE2IEBACiAJdTggYnl0ZV92YWw7CiAKIAkvKiBjaGVjayBmb3IgSGVhZGVyIHR5cGUgMCAqLwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0NGR19IRFIsICZieXRlX3ZhbCk7Ci0JaWYgKChieXRlX3ZhbCAmIDB4N2YpICE9IFBDSV9IRUFERVJfTk9STUFMKQorCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0hFQURFUl9UWVBFLCAmYnl0ZV92YWwpOworCWlmICgoYnl0ZV92YWwgJiAweDdmKSAhPSBQQ0lfSEVBREVSX1RZUEVfTk9STUFMKQogCQlnb3RvIGVuZDsKIAogCS8qIGNoZWNrIGlmIHRoZSBjYXBhYmlsaXR5IHBvaW50ZXIgZmllbGQgZXhpc3RzICovCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfQ0ZHX1NUQVQsICZieXRlX3ZhbCk7Ci0JaWYgKCEoYnl0ZV92YWwgJiBQQ0lfQ0FQUFRSX1BSRVNFTlQpKQorCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX1NUQVRVUywgJmJ5dGVfdmFsKTsKKwlpZiAoIShieXRlX3ZhbCAmIFBDSV9TVEFUVVNfQ0FQX0xJU1QpKQogCQlnb3RvIGVuZDsKIAotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0NGR19DQVBQVFIsICZjYXBfcHRyKTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9DQVBBQklMSVRZX0xJU1QsICZjYXBfcHRyKTsKIAkvKiBjaGVjayBpZiB0aGUgY2FwYWJpbGl0eSBwb2ludGVyIGlzIDB4MDAgKi8KIAlpZiAoY2FwX3B0ciA9PSAweDAwKQogCQlnb3RvIGVuZDsKQEAgLTE2Nyw4ICsxNjQsOCBAQAogCQkqYnVmbGVuID0gMDsKIAkJLyogY29weSB0aGUgY3BhYmlsaXR5IGRhdGEgZXhjbHVkaW5nIGNhcCBJRCBhbmQgbmV4dCBwdHIgKi8KIAkJY2FwX2RhdGEgPSBjYXBfcHRyICsgMjsKLQkJaWYgKChidWZzaXplICsgY2FwX2RhdGEpID4gU1pQQ1IpCi0JCQlidWZzaXplID0gU1pQQ1IgLSBjYXBfZGF0YTsKKwkJaWYgKChidWZzaXplICsgY2FwX2RhdGEpID4gUENJX1NaUENSKQorCQkJYnVmc2l6ZSA9IFBDSV9TWlBDUiAtIGNhcF9kYXRhOwogCQkqYnVmbGVuID0gYnVmc2l6ZTsKIAkJd2hpbGUgKGJ1ZnNpemUtLSkgewogCQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBjYXBfZGF0YSwgYnVmKTsKQEAgLTE4Nyw4ICsxODQsNiBAQAogewogCXVpbnQgcmV0dmFsID0gMHhGRkZGRkZGRjsKIAotCUFTU0VSVChwY2llcmVncyAhPSBOVUxMKTsKLQogCXN3aXRjaCAoYWRkcnR5cGUpIHsKIAljYXNlIFBDSUVfQ09ORklHUkVHUzoKIAkJV19SRUcoKCZwY2llcmVncy0+Y29uZmlnYWRkciksIG9mZnNldCk7CkBAIC0yMDEsNyArMTk2LDYgQEAKIAkJcmV0dmFsID0gUl9SRUcoJihwY2llcmVncy0+cGNpZWluZGRhdGEpKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJQVNTRVJUKDApOwogCQlicmVhazsKIAl9CiAKQEAgLTIxMiw4ICsyMDYsNiBAQAogcGNpZV93cml0ZXJlZyhzYnBjaWVyZWdzX3QgKnBjaWVyZWdzLCB1aW50IGFkZHJ0eXBlLAogCSAgICAgIHVpbnQgb2Zmc2V0LCB1aW50IHZhbCkKIHsKLQlBU1NFUlQocGNpZXJlZ3MgIT0gTlVMTCk7Ci0KIAlzd2l0Y2ggKGFkZHJ0eXBlKSB7CiAJY2FzZSBQQ0lFX0NPTkZJR1JFR1M6CiAJCVdfUkVHKCgmcGNpZXJlZ3MtPmNvbmZpZ2FkZHIpLCBvZmZzZXQpOwpAQCAtMjI0LDcgKzIxNiw2IEBACiAJCVdfUkVHKCgmcGNpZXJlZ3MtPnBjaWVpbmRkYXRhKSwgdmFsKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJQVNTRVJUKDApOwogCQlicmVhazsKIAl9CiAJcmV0dXJuIDA7CkBAIC0zODQsNyArMzc1LDYgQEAKIHN0YXRpYyB2b2lkIHBjaWVfY2xrcmVxX3VwZChwY2ljb3JlX2luZm9fdCAqcGksIHVpbnQgc3RhdGUpCiB7CiAJc2lfdCAqc2loID0gcGktPnNpaDsKLQlBU1NFUlQoUENJRV9QVUIoc2loKSk7CiAKIAlzd2l0Y2ggKHN0YXRlKSB7CiAJY2FzZSBTSV9ET0FUVEFDSDoKQEAgLTM5MywxMCArMzgzLDEwIEBACiAJCWJyZWFrOwogCWNhc2UgU0lfUENJRE9XTjoKIAkJaWYgKHNpaC0+YnVzY29yZXJldiA9PSA2KSB7CS8qIHR1cm4gb24gc2VyZGVzIFBMTCBkb3duICovCi0JCQlzaV9jb3JlcmVnKHNpaCwgU0lfQ0NfSURYLAorCQkJYWlfY29yZXJlZyhzaWgsIFNJX0NDX0lEWCwKIAkJCQkgICBvZmZzZXRvZihjaGlwY3JlZ3NfdCwgY2hpcGNvbnRyb2xfYWRkciksIH4wLAogCQkJCSAgIDApOwotCQkJc2lfY29yZXJlZyhzaWgsIFNJX0NDX0lEWCwKKwkJCWFpX2NvcmVyZWcoc2loLCBTSV9DQ19JRFgsCiAJCQkJICAgb2Zmc2V0b2YoY2hpcGNyZWdzX3QsIGNoaXBjb250cm9sX2RhdGEpLAogCQkJCSAgIH4weDQwLCAwKTsKIAkJfSBlbHNlIGlmIChwaS0+cGNpZV9wcjQyNzY3KSB7CkBAIC00MDUsMTAgKzM5NSwxMCBAQAogCQlicmVhazsKIAljYXNlIFNJX1BDSVVQOgogCQlpZiAoc2loLT5idXNjb3JlcmV2ID09IDYpIHsJLyogdHVybiBvZmYgc2VyZGVzIFBMTCBkb3duICovCi0JCQlzaV9jb3JlcmVnKHNpaCwgU0lfQ0NfSURYLAorCQkJYWlfY29yZXJlZyhzaWgsIFNJX0NDX0lEWCwKIAkJCQkgICBvZmZzZXRvZihjaGlwY3JlZ3NfdCwgY2hpcGNvbnRyb2xfYWRkciksIH4wLAogCQkJCSAgIDApOwotCQkJc2lfY29yZXJlZyhzaWgsIFNJX0NDX0lEWCwKKwkJCWFpX2NvcmVyZWcoc2loLCBTSV9DQ19JRFgsCiAJCQkJICAgb2Zmc2V0b2YoY2hpcGNyZWdzX3QsIGNoaXBjb250cm9sX2RhdGEpLAogCQkJCSAgIH4weDQwLCAweDQwKTsKIAkJfSBlbHNlIGlmIChQQ0lFX0FTUE0oc2loKSkgewkvKiBkaXNhYmxlIGNsa3JlcSAqLwpAQCAtNDE2LDcgKzQwNiw2IEBACiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJQVNTRVJUKDApOwogCQlicmVhazsKIAl9CiB9CkBAIC01MzQsMTAgKzUyMyw4IEBACiAJc2JwY2llcmVnc190ICpwY2llcmVncyA9IHBpLT5yZWdzLnBjaWVyZWdzOwogCXUxNiAqcmVnMTY7CiAKLQlBU1NFUlQocGktPnNpaC0+YnVzY29yZXJldiA9PSA3KTsKLQogCS8qIHR1cm4gb2ZmIHNlcmRlcyBQTEwgZG93biAqLwotCXNpX2NvcmVyZWcocGktPnNpaCwgU0lfQ0NfSURYLCBvZmZzZXRvZihjaGlwY3JlZ3NfdCwgY2hpcGNvbnRyb2wpLAorCWFpX2NvcmVyZWcocGktPnNpaCwgU0lfQ0NfSURYLCBvZmZzZXRvZihjaGlwY3JlZ3NfdCwgY2hpcGNvbnRyb2wpLAogCQkgICBDSElQQ1RSTF80MzIxX1BMTF9ET1dOLCBDSElQQ1RSTF80MzIxX1BMTF9ET1dOKTsKIAogCS8qICBjbGVhciBzcm9tIHNoYWRvdyBiYWNrZG9vciAqLwpAQCAtNjkzLDE2ICs2ODAsMTUgQEAKIAl1OCBjYXBfcHRyOwogCXUzMiBwbWVjYXA7CiAKLQljYXBfcHRyID0KLQkgICAgcGNpY29yZV9maW5kX3BjaV9jYXBhYmlsaXR5KHBpLT5kZXYsIFBDSV9DQVBfUE9XRVJNR01UQ0FQX0lELCBOVUxMLAotCQkJCQlOVUxMKTsKKwljYXBfcHRyID0gcGNpY29yZV9maW5kX3BjaV9jYXBhYmlsaXR5KHBpLT5kZXYsIFBDSV9DQVBfSURfUE0sIE5VTEwsCisJCQkJCSAgICAgIE5VTEwpOwogCiAJaWYgKCFjYXBfcHRyKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQocGktPmRldiwgY2FwX3B0ciwgJnBtZWNhcCk7CiAKLQlyZXR1cm4gKHBtZWNhcCAmIFBNRV9DQVBfUE1fU1RBVEVTKSAhPSAwOworCXJldHVybiAocG1lY2FwICYgKFBDSV9QTV9DQVBfUE1FX01BU0sgPDwgMTYpKSAhPSAwOwogfQogCiAvKiByZXR1cm4gdHJ1ZSBpZiBQTSBjYXBhYmlsaXR5IGV4aXN0cyBpbiB0aGUgcGNpIGNvbmZpZyBzcGFjZQpAQCAtNzE0LDEwICs3MDAsOSBAQAogCXUzMiBwbWVjYXA7CiAKIAlpZiAoIXBpLT5wbWVjYXBfb2Zmc2V0KSB7Ci0JCWNhcF9wdHIgPQotCQkgICAgcGNpY29yZV9maW5kX3BjaV9jYXBhYmlsaXR5KHBpLT5kZXYsCi0JCQkJCQlQQ0lfQ0FQX1BPV0VSTUdNVENBUF9JRCwgTlVMTCwKLQkJCQkJCU5VTEwpOworCQljYXBfcHRyID0gcGNpY29yZV9maW5kX3BjaV9jYXBhYmlsaXR5KHBpLT5kZXYsCisJCQkJCQkgICAgICBQQ0lfQ0FQX0lEX1BNLAorCQkJCQkJICAgICAgTlVMTCwgTlVMTCk7CiAJCWlmICghY2FwX3B0cikKIAkJCXJldHVybiBmYWxzZTsKIApAQCAtNzI3LDcgKzcxMiw3IEBACiAJCQkJCSZwbWVjYXApOwogCiAJCS8qIEF0IGxlYXN0IG9uZSBzdGF0ZSBjYW4gZ2VuZXJhdGUgUE1FICovCi0JCXBpLT5wbWVjYXAgPSAocG1lY2FwICYgUE1FX0NBUF9QTV9TVEFURVMpICE9IDA7CisJCXBpLT5wbWVjYXAgPSAocG1lY2FwICYgKFBDSV9QTV9DQVBfUE1FX01BU0sgPDwgMTYpKSAhPSAwOwogCX0KIAogCXJldHVybiBwaS0+cG1lY2FwOwpAQCAtNzQzLDExICs3MjgsMTEgQEAKIAlpZiAoIXBjaWNvcmVfcG1lY2FwKHBpKSkKIAkJcmV0dXJuOwogCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBpLT5kZXYsIHBpLT5wbWVjYXBfb2Zmc2V0ICsgUE1FX0NTUl9PRkZTRVQsCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBpLT5kZXYsIHBpLT5wbWVjYXBfb2Zmc2V0ICsgUENJX1BNX0NUUkwsCiAJCQkJJncpOwotCXcgfD0gKFBNRV9DU1JfUE1FX0VOKTsKKwl3IHw9IChQQ0lfUE1fQ1RSTF9QTUVfRU5BQkxFKTsKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBpLT5kZXYsCi0JCQkJcGktPnBtZWNhcF9vZmZzZXQgKyBQTUVfQ1NSX09GRlNFVCwgdyk7CisJCQkJcGktPnBtZWNhcF9vZmZzZXQgKyBQQ0lfUE1fQ1RSTCwgdyk7CiB9CiAKIC8qCkBAIC03NjEsMTAgKzc0NiwxMCBAQAogCWlmICghcGNpY29yZV9wbWVjYXAocGkpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGktPmRldiwgcGktPnBtZWNhcF9vZmZzZXQgKyBQTUVfQ1NSX09GRlNFVCwKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGktPmRldiwgcGktPnBtZWNhcF9vZmZzZXQgKyBQQ0lfUE1fQ1RSTCwKIAkJCQkmdyk7CiAKLQlyZXR1cm4gKHcgJiBQTUVfQ1NSX1BNRV9TVEFUKSA9PSBQTUVfQ1NSX1BNRV9TVEFUOworCXJldHVybiAodyAmIFBDSV9QTV9DVFJMX1BNRV9TVEFUVVMpID09IFBDSV9QTV9DVFJMX1BNRV9TVEFUVVM7CiB9CiAKIC8qIERpc2FibGUgUE1FIGdlbmVyYXRpb24sIGNsZWFyIHRoZSBQTUUgc3RhdHVzIGJpdCBpZiBzZXQKQEAgLTc3NywxNiArNzYyLDE2IEBACiAJaWYgKCFwY2ljb3JlX3BtZWNhcChwaSkpCiAJCXJldHVybjsKIAotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwaS0+ZGV2LCBwaS0+cG1lY2FwX29mZnNldCArIFBNRV9DU1JfT0ZGU0VULAorCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwaS0+ZGV2LCBwaS0+cG1lY2FwX29mZnNldCArIFBDSV9QTV9DVFJMLAogCQkJCSZ3KTsKIAogCVBDSV9FUlJPUigoInBjaWNvcmVfcGNpX3BtZWNsciBQTUVDU1IgOiAweCV4XG4iLCB3KSk7CiAKIAkvKiBQTUVTVEFUIGlzIGNsZWFyZWQgYnkgd3JpdGluZyAxIHRvIGl0ICovCi0JdyAmPSB+KFBNRV9DU1JfUE1FX0VOKTsKKwl3ICY9IH4oUENJX1BNX0NUUkxfUE1FX0VOQUJMRSk7CiAKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBpLT5kZXYsCi0JCQkJcGktPnBtZWNhcF9vZmZzZXQgKyBQTUVfQ1NSX09GRlNFVCwgdyk7CisJCQkJcGktPnBtZWNhcF9vZmZzZXQgKyBQQ0lfUE1fQ1RSTCwgdyk7CiB9CiAKIHUzMiBwY2llX2xjcmVnKHZvaWQgKnBjaCwgdTMyIG1hc2ssIHUzMiB2YWwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvbnZyYW0vbnZyYW1fcm8uYyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvbnZyYW0uYwpzaW1pbGFyaXR5IGluZGV4IDc2JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvbnZyYW0vbnZyYW1fcm8uYwpyZW5hbWUgdG8gZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy9udnJhbS5jCmluZGV4IGE2OTdmZjEuLjA4NWVjMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9udnJhbS9udnJhbV9yby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvbnZyYW0uYwpAQCAtMTgsMTEgKzE4LDggQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxiY21kZWZzLmg+CiAjaW5jbHVkZSA8YmNtdXRpbHMuaD4KLSNpbmNsdWRlIDxzaXV0aWxzLmg+CiAjaW5jbHVkZSA8YmNtbnZyYW0uaD4KICNpbmNsdWRlIDxzYmNoaXBjLmg+Ci0jaW5jbHVkZSA8YmNtc3JvbS5oPgotI2luY2x1ZGUgPGJjbW90cC5oPgogI2luY2x1ZGUgPGJjbWRldnMuaD4KICNpbmNsdWRlIDxobmRzb2MuaD4KIApAQCAtNDMsMzYgKzQwLDcgQEAKIAogc3RhdGljIGNoYXIgKmZpbmR2YXIoY2hhciAqdmFycywgY2hhciAqbGltLCBjb25zdCBjaGFyICpuYW1lKTsKIAotI2lmIGRlZmluZWQoRkxBU0gpCi0vKiBjb3B5IGZsYXNoIHRvIHJhbSAqLwotc3RhdGljIHZvaWQgZ2V0X2ZsYXNoX252cmFtKHNpX3QgKnNpaCwgc3RydWN0IG52cmFtX2hlYWRlciAqbnZoKQotewotCXVpbnQgbnZzLCBidWZzejsKLQl2YXJzX3QgKm5ldzsKLQotCW52cyA9IFJfUkVHKCZudmgtPmxlbikgLSBzaXplb2Yoc3RydWN0IG52cmFtX2hlYWRlcik7Ci0JYnVmc3ogPSBudnMgKyBWQVJTX1RfT0g7Ci0KLQluZXcgPSBrbWFsbG9jKGJ1ZnN6LCBHRlBfQVRPTUlDKTsKLQlpZiAobmV3ID09IE5VTEwpIHsKLQkJTlZSX01TRygoIk91dCBvZiBtZW1vcnkgZm9yIGZsYXNoIHZhcnNcbiIpKTsKLQkJcmV0dXJuOwotCX0KLQluZXctPnZhcnMgPSAoY2hhciAqKW5ldyArIFZBUlNfVF9PSDsKLQotCW5ldy0+YnVmc3ogPSBidWZzejsKLQluZXctPnNpemUgPSBudnM7Ci0JbmV3LT5uZXh0ID0gdmFyczsKLQl2YXJzID0gbmV3OwotCi0JbWVtY3B5KG5ldy0+dmFycywgJm52aFsxXSwgbnZzKTsKLQotCU5WUl9NU0coKCIlczogZmxhc2ggbnZyYW0gQCAlcCwgY29waWVkICVkIGJ5dGVzIHRvICVwXG4iLCBfX2Z1bmNfXywKLQkJIG52aCwgbnZzLCBuZXctPnZhcnMpKTsKLX0KLSNlbmRpZgkJCQkvKiBGTEFTSCAqLwotCi1pbnQgbnZyYW1faW5pdCh2b2lkICpzaSkKK2ludCBudnJhbV9pbml0KHZvaWQpCiB7CiAKIAkvKiBNYWtlIHN1cmUgd2UgcmVhZCBudnJhbSBpbiBmbGFzaCBqdXN0IG9uY2UgYmVmb3JlIGZyZWVpbmcgdGhlIG1lbW9yeSAqLwpAQCAtODMsMTQgKzUxLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBudnJhbV9hcHBlbmQodm9pZCAqc2ksIGNoYXIgKnZhcmxzdCwgdWludCB2YXJzeikKK2ludCBudnJhbV9hcHBlbmQoY2hhciAqdmFybHN0LCB1aW50IHZhcnN6KQogewogCXVpbnQgYnVmc3ogPSBWQVJTX1RfT0g7CiAJdmFyc190ICpuZXc7CiAKIAluZXcgPSBrbWFsbG9jKGJ1ZnN6LCBHRlBfQVRPTUlDKTsKIAlpZiAobmV3ID09IE5VTEwpCi0JCXJldHVybiBCQ01FX05PTUVNOworCQlyZXR1cm4gLUVOT01FTTsKIAogCW5ldy0+dmFycyA9IHZhcmxzdDsKIAluZXctPmJ1ZnN6ID0gYnVmc3o7CkBAIC05OCwxNyArNjYsMTQgQEAKIAluZXctPm5leHQgPSB2YXJzOwogCXZhcnMgPSBuZXc7CiAKLQlyZXR1cm4gQkNNRV9PSzsKKwlyZXR1cm4gMDsKIH0KIAotdm9pZCBudnJhbV9leGl0KHZvaWQgKnNpKQordm9pZCBudnJhbV9leGl0KHZvaWQpCiB7CiAJdmFyc190ICp0aGlzLCAqbmV4dDsKLQlzaV90ICpzaWg7CiAKLQlzaWggPSAoc2lfdCAqKSBzaTsKIAl0aGlzID0gdmFyczsKLQogCWlmICh0aGlzKQogCQlrZnJlZSh0aGlzLT52YXJzKTsKIApAQCAtMTM4LDYgKzEwMyw0OSBAQAogCXJldHVybiBOVUxMOwogfQogCisvKgorICogU2VhcmNoIHRoZSBuYW1lPXZhbHVlIHZhcnMgZm9yIGEgc3BlY2lmaWMgb25lIGFuZCByZXR1cm4gaXRzIHZhbHVlLgorICogUmV0dXJucyBOVUxMIGlmIG5vdCBmb3VuZC4KKyAqLworY2hhciAqZ2V0dmFyKGNoYXIgKnZhcnMsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJY2hhciAqczsKKwlpbnQgbGVuOworCisJaWYgKCFuYW1lKQorCQlyZXR1cm4gTlVMTDsKKworCWxlbiA9IHN0cmxlbihuYW1lKTsKKwlpZiAobGVuID09IDApCisJCXJldHVybiBOVUxMOworCisJLyogZmlyc3QgbG9vayBpbiB2YXJzW10gKi8KKwlmb3IgKHMgPSB2YXJzOyBzICYmICpzOykgeworCQlpZiAoKG1lbWNtcChzLCBuYW1lLCBsZW4pID09IDApICYmIChzW2xlbl0gPT0gJz0nKSkKKwkJCXJldHVybiAmc1tsZW4gKyAxXTsKKworCQl3aGlsZSAoKnMrKykKKwkJCTsKKwl9CisJLyogdGhlbiBxdWVyeSBudnJhbSAqLworCXJldHVybiBudnJhbV9nZXQobmFtZSk7Cit9CisKKy8qCisgKiBTZWFyY2ggdGhlIHZhcnMgZm9yIGEgc3BlY2lmaWMgb25lIGFuZCByZXR1cm4gaXRzIHZhbHVlIGFzCisgKiBhbiBpbnRlZ2VyLiBSZXR1cm5zIDAgaWYgbm90IGZvdW5kLgorICovCitpbnQgZ2V0aW50dmFyKGNoYXIgKnZhcnMsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJY2hhciAqdmFsOworCisJdmFsID0gZ2V0dmFyKHZhcnMsIG5hbWUpOworCWlmICh2YWwgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc2ltcGxlX3N0cnRvdWwodmFsLCBOVUxMLCAwKTsKK30KKwogY2hhciAqbnZyYW1fZ2V0KGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJY2hhciAqdiA9IE5VTEw7CkBAIC0xNjIsNyArMTcwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IG52cmFtX3Jlc2V0KHZvaWQgKnNpKQoraW50IG52cmFtX3Jlc2V0KHZvaWQpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC0xODksNyArMTk3LDcgQEAKIAkJd2hpbGUgKChmcm9tIDwgbGltKSAmJiAoKmZyb20pKSB7CiAJCQlsZW4gPSBzdHJsZW4oZnJvbSkgKyAxOwogCQkJaWYgKHJlc2lkIDwgKGFjYyArIGxlbikpCi0JCQkJcmV0dXJuIEJDTUVfQlVGVE9PU0hPUlQ7CisJCQkJcmV0dXJuIC1FT1ZFUkZMT1c7CiAJCQltZW1jcHkodG8sIGZyb20sIGxlbik7CiAJCQlhY2MgKz0gbGVuOwogCQkJZnJvbSArPSBsZW47CkBAIC0yMDEsNyArMjA5LDcgQEAKIAkJdGhpcyA9IHRoaXMtPm5leHQ7CiAJfQogCWlmIChyZXNpZCA8IDEpCi0JCXJldHVybiBCQ01FX0JVRlRPT1NIT1JUOworCQlyZXR1cm4gLUVPVkVSRkxPVzsKIAkqYnVmID0gJ1wwJzsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3dsY19waHlfY21uLmMgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3BoeS93bGNfcGh5X2Ntbi5jCmluZGV4IDhmNzVhZjIuLjZjYmE0ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3dsY19waHlfY21uLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy9waHkvd2xjX3BoeV9jbW4uYwpAQCAtMTgsMTAgKzE4LDEyIEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxiY21kZWZzLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKworI2luY2x1ZGUgPGJjbWRlZnMuaD4KICNpbmNsdWRlIDxiY21udnJhbS5oPgogI2luY2x1ZGUgPHNiY2hpcGMuaD4KICNpbmNsdWRlIDxiY21kZXZzLmg+CkBAIC0xNTUsOCArMTU3LDYgQEAKIAljaGFyICpzOwogCWludCBsZW47CiAKLQlBU1NFUlQocGktPnZhcnMgIT0gKGNoYXIgKikmcGktPnZhcnMpOwotCiAJaWYgKCFuYW1lKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtMjQxLDcgKzI0MSw3IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJQVNTRVJUKFZBTElEX1BIWVRZUEUocGktPnB1YnBpLnBoeV90eXBlKSk7CisJCWJyZWFrOwogCX0KIAogCWlmICgoRDExUkVWX0dFKHBpLT5zaC0+Y29yZXJldiwgMjQpKSB8fApAQCAtMzkxLDE2ICszOTEsNiBAQAogCVdfUkVHKCZwaS0+cmVncy0+cGh5Y2hhbm5lbCwgdmFsKTsKIH0KIAotI2lmIGRlZmluZWQoQkNNREJHKQotc3RhdGljIGJvb2wgd2xjX3BoeV93YXI0MTQ3NihwaHlfaW5mb190ICpwaSkKLXsKLQl1MzIgbWMgPSBSX1JFRygmcGktPnJlZ3MtPm1hY2NvbnRyb2wpOwotCi0JcmV0dXJuICgobWMgJiBNQ1RMX0VOX01BQykgPT0gMCkKLQkgICAgfHwgKChtYyAmIE1DVExfUEhZTE9DSykgPT0gTUNUTF9QSFlMT0NLKTsKLX0KLSNlbmRpZgotCiB1MTYgcmVhZF9waHlfcmVnKHBoeV9pbmZvX3QgKnBpLCB1MTYgYWRkcikKIHsKIAlkMTFyZWdzX3QgKnJlZ3M7CkBAIC00MTIsMTAgKzQwMiw2IEBACiAJKHZvaWQpUl9SRUcoJnJlZ3MtPnBoeXJlZ2FkZHIpOwogI2VuZGlmCiAKLQlBU1NFUlQoIQotCSAgICAgICAoRDExUkVWX0lTKHBpLT5zaC0+Y29yZXJldiwgMTEpCi0JCXx8IEQxMVJFVl9JUyhwaS0+c2gtPmNvcmVyZXYsIDEyKSkgfHwgd2xjX3BoeV93YXI0MTQ3NihwaSkpOwotCiAJcGktPnBoeV93cmVnID0gMDsKIAlyZXR1cm4gUl9SRUcoJnJlZ3MtPnBoeXJlZ2RhdGEpOwogfQpAQCAtNDU1LDEwICs0NDEsNiBAQAogCSh2b2lkKVJfUkVHKCZyZWdzLT5waHlyZWdhZGRyKTsKICNlbmRpZgogCi0JQVNTRVJUKCEKLQkgICAgICAgKEQxMVJFVl9JUyhwaS0+c2gtPmNvcmVyZXYsIDExKQotCQl8fCBEMTFSRVZfSVMocGktPnNoLT5jb3JlcmV2LCAxMikpIHx8IHdsY19waHlfd2FyNDE0NzYocGkpKTsKLQogCVdfUkVHKCZyZWdzLT5waHlyZWdkYXRhLCAoUl9SRUcoJnJlZ3MtPnBoeXJlZ2RhdGEpICYgdmFsKSk7CiAJcGktPnBoeV93cmVnID0gMDsKIH0KQEAgLTQ3NCwxMCArNDU2LDYgQEAKIAkodm9pZClSX1JFRygmcmVncy0+cGh5cmVnYWRkcik7CiAjZW5kaWYKIAotCUFTU0VSVCghCi0JICAgICAgIChEMTFSRVZfSVMocGktPnNoLT5jb3JlcmV2LCAxMSkKLQkJfHwgRDExUkVWX0lTKHBpLT5zaC0+Y29yZXJldiwgMTIpKSB8fCB3bGNfcGh5X3dhcjQxNDc2KHBpKSk7Ci0KIAlXX1JFRygmcmVncy0+cGh5cmVnZGF0YSwgKFJfUkVHKCZyZWdzLT5waHlyZWdkYXRhKSB8IHZhbCkpOwogCXBpLT5waHlfd3JlZyA9IDA7CiB9CkBAIC00OTMsMTAgKzQ3MSw2IEBACiAJKHZvaWQpUl9SRUcoJnJlZ3MtPnBoeXJlZ2FkZHIpOwogI2VuZGlmCiAKLQlBU1NFUlQoIQotCSAgICAgICAoRDExUkVWX0lTKHBpLT5zaC0+Y29yZXJldiwgMTEpCi0JCXx8IEQxMVJFVl9JUyhwaS0+c2gtPmNvcmVyZXYsIDEyKSkgfHwgd2xjX3BoeV93YXI0MTQ3NihwaSkpOwotCiAJV19SRUcoJnJlZ3MtPnBoeXJlZ2RhdGEsCiAJICAgICAgKChSX1JFRygmcmVncy0+cGh5cmVnZGF0YSkgJiB+bWFzaykgfCAodmFsICYgbWFzaykpKTsKIAlwaS0+cGh5X3dyZWcgPSAwOwpAQCAtNTc5LDE0ICs1NTMsMTIgQEAKIHZvaWQgd2xjX3BoeV9zaGFyZWRfZGV0YWNoKHNoYXJlZF9waHlfdCAqcGh5X3NoKQogewogCWlmIChwaHlfc2gpIHsKLQkJaWYgKHBoeV9zaC0+cGh5X2hlYWQpIHsKLQkJCUFTU0VSVCghcGh5X3NoLT5waHlfaGVhZCk7Ci0JCX0KIAkJa2ZyZWUocGh5X3NoKTsKIAl9CiB9CiAKLXdsY19waHlfdCAqd2xjX3BoeV9hdHRhY2goc2hhcmVkX3BoeV90ICpzaCwgdm9pZCAqcmVncywgaW50IGJhbmR0eXBlLCBjaGFyICp2YXJzKQord2xjX3BoeV90ICp3bGNfcGh5X2F0dGFjaChzaGFyZWRfcGh5X3QgKnNoLCB2b2lkICpyZWdzLCBpbnQgYmFuZHR5cGUsCisJCQkgIGNoYXIgKnZhcnMsIHN0cnVjdCB3aXBoeSAqd2lwaHkpCiB7CiAJcGh5X2luZm9fdCAqcGk7CiAJdTMyIHNmbGFncyA9IDA7CkBAIC01OTYsNyArNTY4LDcgQEAKIAlpZiAoRDExUkVWX0lTKHNoLT5jb3JlcmV2LCA0KSkKIAkJc2ZsYWdzID0gU0lTRl8yR19QSFkgfCBTSVNGXzVHX1BIWTsKIAllbHNlCi0JCXNmbGFncyA9IHNpX2NvcmVfc2ZsYWdzKHNoLT5zaWgsIDAsIDApOworCQlzZmxhZ3MgPSBhaV9jb3JlX3NmbGFncyhzaC0+c2loLCAwLCAwKTsKIAogCWlmIChCQU5EXzVHKGJhbmR0eXBlKSkgewogCQlpZiAoKHNmbGFncyAmIChTSVNGXzVHX1BIWSB8IFNJU0ZfREJfUEhZKSkgPT0gMCkgewpAQCAtNjE2LDYgKzU4OCw3IEBACiAJaWYgKHBpID09IE5VTEwpIHsKIAkJcmV0dXJuIE5VTEw7CiAJfQorCXBpLT53aXBoeSA9IHdpcGh5OwogCXBpLT5yZWdzID0gKGQxMXJlZ3NfdCAqKSByZWdzOwogCXBpLT5zaCA9IHNoOwogCXBpLT5waHlfaW5pdF9wb3IgPSB0cnVlOwpAQCAtNzgxLDggKzc1NCw2IEBACiAJCQlwaS0+c2gtPnBoeV9oZWFkID0gcGktPm5leHQ7CiAJCWVsc2UgaWYgKHBpLT5zaC0+cGh5X2hlYWQtPm5leHQgPT0gcGkpCiAJCQlwaS0+c2gtPnBoeV9oZWFkLT5uZXh0ID0gTlVMTDsKLQkJZWxzZQotCQkJQVNTRVJUKDApOwogCiAJCWlmIChwaS0+cGlfZnB0ci5kZXRhY2gpCiAJCQkocGktPnBpX2ZwdHIuZGV0YWNoKSAocGkpOwpAQCAtODk0LDcgKzg2NSw2IEBACiAJCQlwaHlfYndfY2xrYml0cyA9IFNJQ0ZfQlc0MDsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJQVNTRVJUKDApOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC05NjIsMjQgKzkzMiwyMCBAQAogCXBpLT5yYWRpb19jaGFuc3BlYyA9IGNoYW5zcGVjOwogCiAJbWMgPSBSX1JFRygmcGktPnJlZ3MtPm1hY2NvbnRyb2wpOwotCWlmICgobWMgJiBNQ1RMX0VOX01BQykgIT0gMCkgewotCQlBU1NFUlQoKGNvbnN0IGNoYXIgKikKLQkJICAgICAgICJ3bGNfcGh5X2luaXQ6IENhbGxlZCB3aXRoIHRoZSBNQUMgcnVubmluZyEiID09IE5VTEwpOwotCX0KLQotCUFTU0VSVChwaSAhPSBOVUxMKTsKKwlpZiAoV0FSTihtYyAmIE1DVExfRU5fTUFDLCAiSFcgZXJyb3IgTUFDIHJ1bm5pbmcgb24gaW5pdCIpKQorCQlyZXR1cm47CiAKIAlpZiAoIShwaS0+bWVhc3VyZV9ob2xkICYgUEhZX0hPTERfRk9SX1NDQU4pKSB7CiAJCXBpLT5tZWFzdXJlX2hvbGQgfD0gUEhZX0hPTERfRk9SX05PVF9BU1NPQzsKIAl9CiAKLQlpZiAoRDExUkVWX0dFKHBpLT5zaC0+Y29yZXJldiwgNSkpCi0JCUFTU0VSVChzaV9jb3JlX3NmbGFncyhwaS0+c2gtPnNpaCwgMCwgMCkgJiBTSVNGX0ZDTEtBKTsKKwlpZiAoV0FSTighKGFpX2NvcmVfc2ZsYWdzKHBpLT5zaC0+c2loLCAwLCAwKSAmIFNJU0ZfRkNMS0EpLAorCQkgIkhXIGVycm9yIFNJU0ZfRkNMS0FcbiIpKQorCQlyZXR1cm47CiAKIAlwaHlfaW5pdCA9IHBpLT5waV9mcHRyLmluaXQ7CiAKIAlpZiAocGh5X2luaXQgPT0gTlVMTCkgewotCQlBU1NFUlQocGh5X2luaXQgIT0gTlVMTCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEwMTMsNyArOTc5LDkgQEAKIAlwaHlfaW5mb190ICpwaSA9IChwaHlfaW5mb190ICopIHBpaDsKIAlpbml0Zm5fdCBjYWxfaW5pdCA9IE5VTEw7CiAKLQlBU1NFUlQoKFJfUkVHKCZwaS0+cmVncy0+bWFjY29udHJvbCkgJiBNQ1RMX0VOX01BQykgPT0gMCk7CisJaWYgKFdBUk4oKFJfUkVHKCZwaS0+cmVncy0+bWFjY29udHJvbCkgJiBNQ1RMX0VOX01BQykgIT0gMCwKKwkJICJIVyBlcnJvcjogTUFDIGVuYWJsZWQgZHVyaW5nIHBoeSBjYWxcbiIpKQorCQlyZXR1cm47CiAKIAlpZiAoIXBpLT5pbml0aWFsaXplZCkgewogCQljYWxfaW5pdCA9IHBpLT5waV9mcHRyLmNhbGluaXQ7CkBAIC0xMDI5LDggKzk5Nyw2IEBACiAJcGh5X2luZm9fdCAqcGkgPSAocGh5X2luZm9fdCAqKSBwaWg7CiAJaW50IGNhbGxiYWNrcyA9IDA7CiAKLQlBU1NFUlQocGktPnBoeXRlc3Rfb24gPT0gZmFsc2UpOwotCiAJaWYgKHBpLT5waHljYWxfdGltZXIKIAkgICAgJiYgIXdsYXBpX2RlbF90aW1lcihwaS0+c2gtPnBoeXNoaW0sIHBpLT5waHljYWxfdGltZXIpKQogCQljYWxsYmFja3MrKzsKQEAgLTEwNzAsOCArMTAzNiw2IEBACiAKIHZvaWQgd2xjX3BoeV90YWJsZV9kYXRhX3dyaXRlKHBoeV9pbmZvX3QgKnBpLCB1aW50IHdpZHRoLCB1MzIgdmFsKQogewotCUFTU0VSVCgod2lkdGggPT0gOCkgfHwgKHdpZHRoID09IDE2KSB8fCAod2lkdGggPT0gMzIpKTsKLQogCWlmICgocGktPnNoLT5jaGlwID09IEJDTTQzMjI0X0NISVBfSUQgfHwKIAkgICAgIHBpLT5zaC0+Y2hpcCA9PSBCQ000MzQyMV9DSElQX0lEKSAmJgogCSAgICAocGktPnNoLT5jaGlwcmV2ID09IDEpICYmCkBAIC0xMTA1LDggKzEwNjksNiBAQAogCWNvbnN0IHUxNiAqcHRibF8xNmIgPSAoY29uc3QgdTE2ICopcHRibF9pbmZvLT50YmxfcHRyOwogCWNvbnN0IHUzMiAqcHRibF8zMmIgPSAoY29uc3QgdTMyICopcHRibF9pbmZvLT50YmxfcHRyOwogCi0JQVNTRVJUKCh0Ymxfd2lkdGggPT0gOCkgfHwgKHRibF93aWR0aCA9PSAxNikgfHwgKHRibF93aWR0aCA9PSAzMikpOwotCiAJd3JpdGVfcGh5X3JlZyhwaSwgdGJsQWRkciwgKHRibF9pZCA8PCAxMCkgfCB0Ymxfb2Zmc2V0KTsKIAogCWZvciAoaWR4ID0gMDsgaWR4IDwgcHRibF9pbmZvLT50YmxfbGVuOyBpZHgrKykgewpAQCAtMTE0OCw4ICsxMTEwLDYgQEAKIAl1MTYgKnB0YmxfMTZiID0gKHUxNiAqKXB0YmxfaW5mby0+dGJsX3B0cjsKIAl1MzIgKnB0YmxfMzJiID0gKHUzMiAqKXB0YmxfaW5mby0+dGJsX3B0cjsKIAotCUFTU0VSVCgodGJsX3dpZHRoID09IDgpIHx8ICh0Ymxfd2lkdGggPT0gMTYpIHx8ICh0Ymxfd2lkdGggPT0gMzIpKTsKLQogCXdyaXRlX3BoeV9yZWcocGksIHRibEFkZHIsICh0YmxfaWQgPDwgMTApIHwgdGJsX29mZnNldCk7CiAKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IHB0YmxfaW5mby0+dGJsX2xlbjsgaWR4KyspIHsKQEAgLTEyNDMsOCArMTIwMyw2IEBACiAJfTsKIAl1MzIgKmR1bW15cGt0OwogCi0JQVNTRVJUKChSX1JFRygmcGktPnJlZ3MtPm1hY2NvbnRyb2wpICYgTUNUTF9FTl9NQUMpID09IDApOwotCiAJZHVtbXlwa3QgPSAodTMyICopIChvZmRtID8gb2ZkbXBrdCA6IGNja3BrdCk7CiAJd2xhcGlfYm1hY193cml0ZV90ZW1wbGF0ZV9yYW0ocGktPnNoLT5waHlzaGltLCAwLCBEVU1NWV9QS1RfTEVOLAogCQkJCSAgICAgIGR1bW15cGt0KTsKQEAgLTEyNTgsNyArMTIxNiw2IEBACiAKIAlXX1JFRygmcmVncy0+dHhlX3BoeWN0bCwgKG9mZG0gPyAxIDogMCkgfCBQSFlfVFhDX0FOVF8wKTsKIAlpZiAoSVNOUEhZKHBpKSB8fCBJU0xDTlBIWShwaSkpIHsKLQkJQVNTRVJUKG9mZG0pOwogCQlXX1JFRygmcmVncy0+dHhlX3BoeWN0bDEsIDB4MUEwMik7CiAJfQogCkBAIC0xMzE3LDcgKzEyNzQsNiBAQAogdm9pZCB3bGNfcGh5X2hvbGRfdXBkKHdsY19waHlfdCAqcGloLCBtYm9vbCBpZCwgYm9vbCBzZXQpCiB7CiAJcGh5X2luZm9fdCAqcGkgPSAocGh5X2luZm9fdCAqKSBwaWg7Ci0JQVNTRVJUKGlkKTsKIAogCWlmIChzZXQpIHsKIAkJbWJvb2xzZXQocGktPm1lYXN1cmVfaG9sZCwgaWQpOwpAQCAtMTQzOSw4ICsxMzk1LDYgQEAKIAl1MTYgbV9jdXJfY2hhbm5lbDsKIAljaGFuc2V0Zm5fdCBjaGFuc3BlY19zZXQgPSBOVUxMOwogCi0JQVNTRVJUKCF3Zl9jaHNwZWNfbWFsZm9ybWVkKGNoYW5zcGVjKSk7Ci0KIAltX2N1cl9jaGFubmVsID0gQ0hTUEVDX0NIQU5ORUwoY2hhbnNwZWMpOwogCWlmIChDSFNQRUNfSVM1RyhjaGFuc3BlYykpCiAJCW1fY3VyX2NoYW5uZWwgfD0gRDExX0NVUkNIQU5ORUxfNUc7CkBAIC0xNDgwLDggKzE0MzQsNyBAQAogCQlyYW5nZSA9IHdsY19waHlfZ2V0X2NoYW5fZnJlcV9yYW5nZV9ucGh5KHBpLCBjaGFubmVsKTsKIAl9IGVsc2UgaWYgKElTTENOUEhZKHBpKSkgewogCQlyYW5nZSA9IHdsY19waHlfY2hhbnNwZWNfZnJlcTJiYW5kcmFuZ2VfbHBzc24oZnJlcSk7Ci0JfSBlbHNlCi0JCUFTU0VSVCgwKTsKKwl9CiAKIAlyZXR1cm4gcmFuZ2U7CiB9CkBAIC0xNTExLDggKzE0NjQsNiBAQAogCXVpbnQgaTsKIAl1aW50IGNoYW5uZWw7CiAKLQlBU1NFUlQoKGJhbmQgPT0gV0xDX0JBTkRfMkcpIHx8IChiYW5kID09IFdMQ19CQU5EXzVHKSk7Ci0KIAltZW1zZXQoY2hhbm5lbHMsIDAsIHNpemVvZihjaGFudmVjX3QpKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNoYW5faW5mb19hbGwpOyBpKyspIHsKQEAgLTE1MzUsOCArMTQ4Niw2IEBACiAJdWludCBjaGFubmVsOwogCWNoYW5zcGVjX3QgY2hzcGVjOwogCi0JQVNTRVJUKChiYW5kID09IFdMQ19CQU5EXzJHKSB8fCAoYmFuZCA9PSBXTENfQkFORF81RykpOwotCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2hhbl9pbmZvX2FsbCk7IGkrKykgewogCQljaGFubmVsID0gY2hhbl9pbmZvX2FsbFtpXS5jaGFuOwogCkBAIC0xNTcyLDggKzE1MjEsNiBAQAogCQkJcmV0dXJuIGNoc3BlYzsKIAl9CiAKLQlBU1NFUlQoMCk7Ci0KIAlyZXR1cm4gKGNoYW5zcGVjX3QpIElOVkNIQU5TUEVDOwogfQogCkBAIC0xNTgxLDcgKzE1MjgsNiBAQAogewogCXBoeV9pbmZvX3QgKnBpID0gKHBoeV9pbmZvX3QgKikgcHBpOwogCi0JQVNTRVJUKHFkYm0gIT0gTlVMTCk7CiAJKnFkYm0gPSBwaS0+dHhfdXNlcl90YXJnZXRbMF07CiAJaWYgKG92ZXJyaWRlICE9IE5VTEwpCiAJCSpvdmVycmlkZSA9IHBpLT50eHB3cm92ZXJyaWRlOwpAQCAtMTcwMyw3ICsxNjQ5LDYgQEAKIAkJCQlicmVhazsKIAkJCX0KIAkJfQotCQlBU1NFUlQoaSA8IEFSUkFZX1NJWkUoY2hhbl9pbmZvX2FsbCkpOwogCiAJCWlmIChwaS0+aHd0eHB3cikgewogCQkJKm1heF9wd3IgPSBwaS0+aHd0eHB3cltpXTsKQEAgLTIxMzQsNyArMjA3OSw2IEBACiB7CiAJaW50IGo7CiAJaWYgKElTTlBIWShwaSkpIHsKLQkJQVNTRVJUKDApOwogCQlyZXR1cm47CiAJfQogCkBAIC0yNDY2LDggKzI0MTAsNiBAQAogCQkJbW9kX3BoeV9yZWcocGksIDB4NDEwLCAoMHgxIDw8IDEpLCAweDAwIDw8IDEpOwogCQkJbW9kX3BoeV9yZWcocGksIDB4NDEwLCAoMHgxIDw8IDApLCAodTE2KSB2YWwgPDwgMCk7CiAJCX0KLQl9IGVsc2UgewotCQlBU1NFUlQoMCk7CiAJfQogCiAJaWYgKCFzdXNwZW5kKQpAQCAtMjQ4Myw3ICsyNDI1LDYgQEAKIAl1OCBpOwogCiAJbWVtc2V0KCh1OCAqKSBjbXBseF9wd3JfZGJtLCAwLCBzaXplb2YoY21wbHhfcHdyX2RibSkpOwotCUFTU0VSVChwaS0+cHVicGkucGh5X2NvcmVudW0gPD0gUEhZX0NPUkVfTUFYKTsKIAl3bGNfcGh5X2NvbXB1dGVfZEIoY21wbHhfcHdyLCBjbXBseF9wd3JfZGJtLCBwaS0+cHVicGkucGh5X2NvcmVudW0pOwogCiAJZm9yIChpID0gMDsgaSA8IHBpLT5wdWJwaS5waHlfY29yZW51bTsgaSsrKSB7CkBAIC0yNTI5LDcgKzI0NzAsNiBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCUFTU0VSVCgwKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0yNjc4LDcgKzI2MTgsNiBAQAogCXM4IG5vaXNlX2RibSA9IFBIWV9OT0lTRV9GSVhFRF9WQUxfTlBIWTsKIAl1OCBpZHgsIGNvcmU7CiAKLQlBU1NFUlQocGktPnB1YnBpLnBoeV9jb3JlbnVtIDw9IFBIWV9DT1JFX01BWCk7CiAJbWVtc2V0KCh1OCAqKSBjbXBseF9wd3IsIDAsIHNpemVvZihjbXBseF9wd3IpKTsKIAltZW1zZXQoKHU4ICopIG5vaXNlX2RibV9hbnQsIDAsIHNpemVvZihub2lzZV9kYm1fYW50KSk7CiAKQEAgLTI3NjAsOCArMjY5OSw2IEBACiAJCWNoYW5uZWwgPSBqc3NpX2F1eCAmIEQxMV9DVVJDSEFOTkVMX01BWDsKIAogCQlub2lzZV9kYm0gPSB3bGNfcGh5X25vaXNlX3JlYWRfc2htZW0ocGkpOwotCX0gZWxzZSB7Ci0JCUFTU0VSVCgwKTsKIAl9CiAKIAl3bGNfcGh5X25vaXNlX2NiKHBpLCBjaGFubmVsLCBub2lzZV9kYm0pOwpAQCAtMjgxMSwyNSArMjc0OCwyMCBAQAogCiB2b2lkIHdsY19waHlfY29tcHV0ZV9kQih1MzIgKmNtcGx4X3B3ciwgczggKnBfY21wbHhfcHdyX2RCLCB1OCBjb3JlKQogewotCXU4IHNoaWZ0X2N0LCBsc2IsIG1zYiwgc2Vjb25kbXNiLCBpOworCXU4IG1zYiwgc2Vjb25kbXNiLCBpOwogCXUzMiB0bXA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY29yZTsgaSsrKSB7CisJCXNlY29uZG1zYiA9IDA7CiAJCXRtcCA9IGNtcGx4X3B3cltpXTsKLQkJc2hpZnRfY3QgPSBtc2IgPSBzZWNvbmRtc2IgPSAwOwotCQl3aGlsZSAodG1wICE9IDApIHsKLQkJCXRtcCA9IHRtcCA+PiAxOwotCQkJc2hpZnRfY3QrKzsKLQkJCWxzYiA9ICh1OCkgKHRtcCAmIDEpOwotCQkJaWYgKGxzYiA9PSAxKQotCQkJCW1zYiA9IHNoaWZ0X2N0OwotCQl9Ci0JCXNlY29uZG1zYiA9ICh1OCkgKChjbXBseF9wd3JbaV0gPj4gKG1zYiAtIDEpKSAmIDEpOworCQltc2IgPSBmbHModG1wKTsKKwkJaWYgKG1zYikKKwkJCXNlY29uZG1zYiA9ICh1OCkgKCh0bXAgPj4gKC0tbXNiIC0gMSkpICYgMSk7CiAJCXBfY21wbHhfcHdyX2RCW2ldID0gKHM4KSAoMyAqIG1zYiArIDIgKiBzZWNvbmRtc2IpOwogCX0KIH0KIAotdm9pZCBCQ01GQVNUUEFUSCB3bGNfcGh5X3Jzc2lfY29tcHV0ZSh3bGNfcGh5X3QgKnBpaCwgdm9pZCAqY3R4KQordm9pZCB3bGNfcGh5X3Jzc2lfY29tcHV0ZSh3bGNfcGh5X3QgKnBpaCwgdm9pZCAqY3R4KQogewogCXdsY19kMTFyeGhkcl90ICp3bGNfcnhoZHIgPSAod2xjX2QxMXJ4aGRyX3QgKikgY3R4OwogCWQxMXJ4aGRyX3QgKnJ4aCA9ICZ3bGNfcnhoZHItPnJ4aGRyOwpAQCAtMjg3MSwxMCArMjgwMyw3IEBACiAJCQlyc3NpIC09IDI1NjsKIAl9IGVsc2UgaWYgKHJhZGlvaWQgPT0gQkNNMjA1NV9JRCB8fCByYWRpb2lkID09IEJDTTIwNTZfSUQKIAkJICAgfHwgcmFkaW9pZCA9PSBCQ00yMDU3X0lEKSB7Ci0JCUFTU0VSVChJU05QSFkocGkpKTsKIAkJcnNzaSA9IHdsY19waHlfcnNzaV9jb21wdXRlX25waHkocGksIHdsY19yeGhkcik7Ci0JfSBlbHNlIHsKLQkJQVNTRVJUKChjb25zdCBjaGFyICopIlVua25vd24gcmFkaW8iID09IE5VTEwpOwogCX0KIAogIGVuZDoKQEAgLTI5MDAsOSArMjgyOSw2IEBACiAJCXdsY19sY25waHlfZGVhZl9tb2RlKHBpLCB0cnVlKTsKIAllbHNlIGlmIChJU05QSFkocGkpKQogCQl3bGNfbnBoeV9kZWFmX21vZGUocGksIHRydWUpOwotCWVsc2UgewotCQlBU1NFUlQoMCk7Ci0JfQogfQogCiB2b2lkIHdsY19waHlfd2F0Y2hkb2cod2xjX3BoeV90ICpwaWgpCkBAIC0zMTYzLDEzICszMDg5LDkgQEAKIAkJCX0gZWxzZSBpZiAocGktPm5waHlfcGVyaWNhbCA9PSBQSFlfUEVSSUNBTF9TUEhBU0UpCiAJCQkJd2xjX3BoeV9jYWxfcGVyaWNhbF9ucGh5X3J1bihwaSwKIAkJCQkJCQkgICAgIFBIWV9QRVJJQ0FMX0FVVE8pOwotCQkJZWxzZSB7Ci0JCQkJQVNTRVJUKDApOwotCQkJfQogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUFTU0VSVCgwKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtMzE5MiwyNSArMzExNCw2IEBACiAJcmV0dXJuIG5iaXRzOwogfQogCi11MzIgd2xjX3BoeV9zcXJ0X2ludCh1MzIgdmFsdWUpCi17Ci0JdTMyIHJvb3QgPSAwLCBzaGlmdCA9IDA7Ci0KLQlmb3IgKHNoaWZ0ID0gMDsgc2hpZnQgPCAzMjsgc2hpZnQgKz0gMikgewotCQlpZiAoKCgweDQwMDAwMDAwID4+IHNoaWZ0KSArIHJvb3QpIDw9IHZhbHVlKSB7Ci0JCQl2YWx1ZSAtPSAoKDB4NDAwMDAwMDAgPj4gc2hpZnQpICsgcm9vdCk7Ci0JCQlyb290ID0gKHJvb3QgPj4gMSkgfCAoMHg0MDAwMDAwMCA+PiBzaGlmdCk7Ci0JCX0gZWxzZSB7Ci0JCQlyb290ID0gcm9vdCA+PiAxOwotCQl9Ci0JfQotCi0JaWYgKHJvb3QgPCB2YWx1ZSkKLQkJKytyb290OwotCi0JcmV0dXJuIHJvb3Q7Ci19Ci0KIHZvaWQgd2xjX3BoeV9zdGZfY2hhaW5faW5pdCh3bGNfcGh5X3QgKnBpaCwgdTggdHhjaGFpbiwgdTggcnhjaGFpbikKIHsKIAlwaHlfaW5mb190ICpwaSA9IChwaHlfaW5mb190ICopIHBpaDsKQEAgLTMzMTEsMTIgKzMyMTQsMTIgQEAKIAkJCQltb2RfcGh5X3JlZyhwaSwgMHg0NGMsICgweDEgPDwgMiksICgxKSA8PCAyKTsKIAogCQkJfQotCQkJc2lfY29yZXJlZyhwaS0+c2gtPnNpaCwgU0lfQ0NfSURYLAorCQkJYWlfY29yZXJlZyhwaS0+c2gtPnNpaCwgU0lfQ0NfSURYLAogCQkJCSAgIG9mZnNldG9mKGNoaXBjcmVnc190LCBncGlvY29udHJvbCksIH4weDAsCiAJCQkJICAgMHgwKTsKLQkJCXNpX2NvcmVyZWcocGktPnNoLT5zaWgsIFNJX0NDX0lEWCwKKwkJCWFpX2NvcmVyZWcocGktPnNoLT5zaWgsIFNJX0NDX0lEWCwKIAkJCQkgICBvZmZzZXRvZihjaGlwY3JlZ3NfdCwgZ3Bpb291dCksIDB4NDAsIDB4NDApOwotCQkJc2lfY29yZXJlZyhwaS0+c2gtPnNpaCwgU0lfQ0NfSURYLAorCQkJYWlfY29yZXJlZyhwaS0+c2gtPnNpaCwgU0lfQ0NfSURYLAogCQkJCSAgIG9mZnNldG9mKGNoaXBjcmVnc190LCBncGlvb3V0ZW4pLCAweDQwLAogCQkJCSAgIDB4NDApOwogCQl9IGVsc2UgewpAQCAtMzMyNCwxMSArMzIyNywxMSBAQAogCiAJCQltb2RfcGh5X3JlZyhwaSwgMHg0NGQsICgweDEgPDwgMiksICgwKSA8PCAyKTsKIAotCQkJc2lfY29yZXJlZyhwaS0+c2gtPnNpaCwgU0lfQ0NfSURYLAorCQkJYWlfY29yZXJlZyhwaS0+c2gtPnNpaCwgU0lfQ0NfSURYLAogCQkJCSAgIG9mZnNldG9mKGNoaXBjcmVnc190LCBncGlvb3V0KSwgMHg0MCwgMHgwMCk7Ci0JCQlzaV9jb3JlcmVnKHBpLT5zaC0+c2loLCBTSV9DQ19JRFgsCisJCQlhaV9jb3JlcmVnKHBpLT5zaC0+c2loLCBTSV9DQ19JRFgsCiAJCQkJICAgb2Zmc2V0b2YoY2hpcGNyZWdzX3QsIGdwaW9vdXRlbiksIDB4NDAsIDB4MCk7Ci0JCQlzaV9jb3JlcmVnKHBpLT5zaC0+c2loLCBTSV9DQ19JRFgsCisJCQlhaV9jb3JlcmVnKHBpLT5zaC0+c2loLCBTSV9DQ19JRFgsCiAJCQkJICAgb2Zmc2V0b2YoY2hpcGNyZWdzX3QsIGdwaW9jb250cm9sKSwgfjB4MCwKIAkJCQkgICAweDQwKTsKIAkJfQpAQCAtMzM4NywzMyArMzI5MCw2IEBACiAJKm9mZG1vZmZzZXQgPSAwOwogfQogCi11MzIgd2xjX3BoeV9xZGl2X3JvdW5kdXAodTMyIGRpdmlkZW5kLCB1MzIgZGl2aXNvciwgdTggcHJlY2lzaW9uKQotewotCXUzMiBxdW90aWVudCwgcmVtYWluZGVyLCByb3VuZHVwLCByYml0OwotCi0JQVNTRVJUKGRpdmlzb3IpOwotCi0JcXVvdGllbnQgPSBkaXZpZGVuZCAvIGRpdmlzb3I7Ci0JcmVtYWluZGVyID0gZGl2aWRlbmQgJSBkaXZpc29yOwotCXJiaXQgPSBkaXZpc29yICYgMTsKLQlyb3VuZHVwID0gKGRpdmlzb3IgPj4gMSkgKyByYml0OwotCi0Jd2hpbGUgKHByZWNpc2lvbi0tKSB7Ci0JCXF1b3RpZW50IDw8PSAxOwotCQlpZiAocmVtYWluZGVyID49IHJvdW5kdXApIHsKLQkJCXF1b3RpZW50Kys7Ci0JCQlyZW1haW5kZXIgPSAoKHJlbWFpbmRlciAtIHJvdW5kdXApIDw8IDEpICsgcmJpdDsKLQkJfSBlbHNlIHsKLQkJCXJlbWFpbmRlciA8PD0gMTsKLQkJfQotCX0KLQotCWlmIChyZW1haW5kZXIgPj0gcm91bmR1cCkKLQkJcXVvdGllbnQrKzsKLQotCXJldHVybiBxdW90aWVudDsKLX0KLQogczggd2xjX3BoeV91cGRfcnNzaV9vZmZzZXQocGh5X2luZm9fdCAqcGksIHM4IHJzc2ksIGNoYW5zcGVjX3QgY2hhbnNwZWMpCiB7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3dsY19waHlfaGFsLmggYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3BoeS93bGNfcGh5X2hhbC5oCmluZGV4IGJmOTYyZDUuLjg5MzkxNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3dsY19waHlfaGFsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy9waHkvd2xjX3BoeV9oYWwuaApAQCAtMTgsOSArMTgsMTAgQEAKICNkZWZpbmUgX3dsY19waHlfaF8KIAogI2luY2x1ZGUgPHdsaW9jdGwuaD4KLSNpbmNsdWRlIDxzaXV0aWxzLmg+CisjaW5jbHVkZSA8YWl1dGlscy5oPgogI2luY2x1ZGUgPGQxMS5oPgogI2luY2x1ZGUgPHdsY19waHlfc2hpbS5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgkvKiBzdHJ1Y3Qgd2lwaHkgKi8KIAogI2RlZmluZQlJRENPREVfVkVSX01BU0sJCTB4MDAwMDAwMGYKICNkZWZpbmUJSURDT0RFX1ZFUl9TSElGVAkwCkBAIC0xNDksNyArMTUwLDcgQEAKIGV4dGVybiBzaGFyZWRfcGh5X3QgKndsY19waHlfc2hhcmVkX2F0dGFjaChzaGFyZWRfcGh5X3BhcmFtc190ICpzaHApOwogZXh0ZXJuIHZvaWQgd2xjX3BoeV9zaGFyZWRfZGV0YWNoKHNoYXJlZF9waHlfdCAqcGh5X3NoKTsKIGV4dGVybiB3bGNfcGh5X3QgKndsY19waHlfYXR0YWNoKHNoYXJlZF9waHlfdCAqc2gsIHZvaWQgKnJlZ3MsIGludCBiYW5kdHlwZSwKLQkJCQkgY2hhciAqdmFycyk7CisJCQkJIGNoYXIgKnZhcnMsIHN0cnVjdCB3aXBoeSAqd2lwaHkpOwogZXh0ZXJuIHZvaWQgd2xjX3BoeV9kZXRhY2god2xjX3BoeV90ICpwcGkpOwogCiBleHRlcm4gYm9vbCB3bGNfcGh5X2dldF9waHl2ZXJzaW9uKHdsY19waHlfdCAqcGloLCB1MTYgKnBoeXR5cGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3BoeS93bGNfcGh5X2ludC5oIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy9waHkvd2xjX3BoeV9pbnQuaAppbmRleCA2ZTEyYTk1Li4xMGNiZjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3BoeS93bGNfcGh5X2ludC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3dsY19waHlfaW50LmgKQEAgLTkzNiw2ICs5MzYsNyBAQAogCXU4IHBoeWNhbF90ZW1wZGVsdGE7CiAJdTMyIG1jczIwX3BvOwogCXUzMiBtY3M0MF9wbzsKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5OwogfTsKIAogdHlwZWRlZiBzMzIgZml4ZWQ7CkBAIC0xMDI0LDcgKzEwMjUsNiBAQAogCiBleHRlcm4gdm9pZCB3bGNfcGh5X2NvcmRpYyhmaXhlZCB0aGV0YSwgY3MzMiAqdmFsKTsKIGV4dGVybiB1OCB3bGNfcGh5X25iaXRzKHMzMiB2YWx1ZSk7Ci1leHRlcm4gdTMyIHdsY19waHlfc3FydF9pbnQodTMyIHZhbHVlKTsKIGV4dGVybiB2b2lkIHdsY19waHlfY29tcHV0ZV9kQih1MzIgKmNtcGx4X3B3ciwgczggKnBfZEIsIHU4IGNvcmUpOwogCiBleHRlcm4gdWludCB3bGNfcGh5X2luaXRfcmFkaW9fcmVnc19hbGxiYW5kcyhwaHlfaW5mb190ICpwaSwKQEAgLTEwOTMsOCArMTA5Myw2IEBACiBleHRlcm4gdm9pZCB3bGNfMjA2NF92Y29fY2FsKHBoeV9pbmZvX3QgKnBpKTsKIAogZXh0ZXJuIHZvaWQgd2xjX3BoeV90eHBvd2VyX3JlY2FsY190YXJnZXQocGh5X2luZm9fdCAqcGkpOwotZXh0ZXJuIHUzMiB3bGNfcGh5X3FkaXZfcm91bmR1cCh1MzIgZGl2aWRlbmQsIHUzMiBkaXZpc29yLAotCQkJCSAgIHU4IHByZWNpc2lvbik7CiAKICNkZWZpbmUgTENOUEhZX1RCTF9JRF9QQVBEQ09NUERFTFRBVEJMCTB4MTgKICNkZWZpbmUgTENOUEhZX1RYX1BPV0VSX1RBQkxFX1NJWkUJMTI4CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3BoeS93bGNfcGh5X2xjbi5jIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy9waHkvd2xjX3BoeV9sY24uYwppbmRleCBhNWE3YmI4Li5iODg2NGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3BoeS93bGNfcGh5X2xjbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3dsY19waHlfbGNuLmMKQEAgLTE5LDE4ICsxOSwxOSBAQAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8d2xjX2NmZy5oPgotI2luY2x1ZGUgPHFtYXRoLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8c2l1dGlscy5oPgotI2luY2x1ZGUgPGhuZHBtdS5oPgorI2luY2x1ZGUgPGFpdXRpbHMuaD4KKyNpbmNsdWRlIDx3bGNfcG11Lmg+CisjaW5jbHVkZSA8YmNtbnZyYW0uaD4KIAogI2luY2x1ZGUgPGJjbWRldnMuaD4KICNpbmNsdWRlIDxzYmhuZGRtYS5oPgogCi0jaW5jbHVkZSA8d2xjX3BoeV9yYWRpby5oPgotI2luY2x1ZGUgPHdsY19waHlfaW50Lmg+Ci0jaW5jbHVkZSA8d2xjX3BoeV9sY24uaD4KLSNpbmNsdWRlIDx3bGNfcGh5dGJsX2xjbi5oPgorI2luY2x1ZGUgIndsY19waHlfcmFkaW8uaCIKKyNpbmNsdWRlICJ3bGNfcGh5X2ludC5oIgorI2luY2x1ZGUgIndsY19waHlfcW1hdGguaCIKKyNpbmNsdWRlICJ3bGNfcGh5X2xjbi5oIgorI2luY2x1ZGUgIndsY19waHl0YmxfbGNuLmgiCiAKICNkZWZpbmUgUExMXzIwNjRfTkRJVgkJOTAKICNkZWZpbmUgUExMXzIwNjRfTE9XX0VORF9WQ08gCTMwMDAKQEAgLTEwODEsOCArMTA4Miw2IEBACiB7CiAJdTMyIHF1b3RpZW50LCByZW1haW5kZXIsIHJvdW5kdXAsIHJiaXQ7CiAKLQlBU1NFUlQoZGl2aXNvcik7Ci0KIAlxdW90aWVudCA9IGRpdmlkZW5kIC8gZGl2aXNvcjsKIAlyZW1haW5kZXIgPSBkaXZpZGVuZCAlIGRpdmlzb3I7CiAJcmJpdCA9IGRpdmlzb3IgJiAxOwpAQCAtMTc4MCwxMSArMTc3OSw2IEBACiAJczggaW5kZXg7CiAJcGh5X2luZm9fbGNucGh5X3QgKnBpX2xjbiA9IHBpLT51LnBpX2xjbnBoeTsKIAotCUFTU0VSVCgoTENOUEhZX1RYX1BXUl9DVFJMX09GRiA9PSBtb2RlKSB8fAotCSAgICAgICAoTENOUEhZX1RYX1BXUl9DVFJMX1NXID09IG1vZGUpIHx8Ci0JICAgICAgIChMQ05QSFlfVFhfUFdSX0NUUkxfSFcgPT0gbW9kZSkgfHwKLQkgICAgICAgKExDTlBIWV9UWF9QV1JfQ1RSTF9URU1QQkFTRUQgPT0gbW9kZSkpOwotCiAJbW9kZSA9IHdsY19sY25waHlfc2V0X3R4X3B3cl9jdHJsX21vZGUocGksIG1vZGUpOwogCW9sZF9tb2RlID0gd2xjX2xjbnBoeV9zZXRfdHhfcHdyX2N0cmxfbW9kZShwaSwgb2xkX21vZGUpOwogCkBAIC0xOTA0LDE2ICsxODk4LDE0IEBACiAJCWJyZWFrOwogCiAJY2FzZSBMQ05QSFlfQ0FMX1JFQ0FMOgotCQlBU1NFUlQocGlfbGNuLT5sY25waHlfY2FsX3Jlc3VsdHMudHhpcWxvY2FsX2Jlc3Rjb2VmZnNfdmFsaWQpOwotCiAJCXN0YXJ0X2NvZWZmcyA9IHN5c3RfY29lZmZzOwotCiAJCWNhbF9jbWRzID0gY29tbWFuZHNfcmVjYWw7CiAJCW5fY2FsX2NtZHMgPSBBUlJBWV9TSVpFKGNvbW1hbmRzX3JlY2FsKTsKIAkJY29tbWFuZF9udW1zID0gY29tbWFuZF9udW1zX3JlY2FsOwogCQlicmVhazsKKwogCWRlZmF1bHQ6Ci0JCUFTU0VSVChmYWxzZSk7CisJCWJyZWFrOwogCX0KIAogCXdsY19sY25waHlfY29tbW9uX3dyaXRlX3RhYmxlKHBpLCBMQ05QSFlfVEJMX0lEX0lRTE9DQUwsCkBAIC0yNDYwLDggKzI0NTIsNiBAQAogCWxjbnBoeV90eGdhaW5zX3QgZ2FpbnM7CiAJcGh5X2luZm9fbGNucGh5X3QgKnBpX2xjbiA9IHBpLT51LnBpX2xjbnBoeTsKIAotCUFTU0VSVChpbmRleCA8PSBMQ05QSFlfTUFYX1RYX1BPV0VSX0lOREVYKTsKLQogCXBpX2xjbi0+bGNucGh5X3R4X3Bvd2VyX2lkeF9vdmVycmlkZSA9IChzOCkgaW5kZXg7CiAJcGlfbGNuLT5sY25waHlfY3VycmVudF9pbmRleCA9ICh1OCkgaW5kZXg7CiAKQEAgLTI3NjAsNyArMjc1MCw2IEBACiAJCWRvIHsKIAkJCWJ3ID0gcGh5X2J3ICogMTAwMCAqIGs7CiAJCQludW1fc2FtcHMgPSBidyAvIEFCUyhmX2tIeik7Ci0JCQlBU1NFUlQobnVtX3NhbXBzIDw9IEFSUkFZX1NJWkUoZGF0YV9idWYpKTsKIAkJCWsrKzsKIAkJfSB3aGlsZSAoKG51bV9zYW1wcyAqICh1MzIpIChBQlMoZl9rSHopKSkgIT0gYncpOwogCX0gZWxzZQpAQCAtMzI1NSw3ICszMjQ0LDcgQEAKIAl9CiAJYiAvPSB0ZW1wOwogCWIgLT0gYSAqIGE7Ci0JYiA9IChzMzIpIHdsY19waHlfc3FydF9pbnQoKHUzMikgYik7CisJYiA9IChzMzIpIGludF9zcXJ0KCh1bnNpZ25lZCBsb25nKSBiKTsKIAliIC09ICgxIDw8IDEwKTsKIAlhMF9uZXcgPSAodTE2KSAoYSAmIDB4M2ZmKTsKIAliMF9uZXcgPSAodTE2KSAoYiAmIDB4M2ZmKTsKQEAgLTMyOTgsOCArMzI4Nyw2IEBACiAJCXJldHVybiBmYWxzZTsKIAl9CiAJaWYgKG1vZHVsZSA9PSAyKSB7Ci0JCUFTU0VSVChpcWNvbXBfc3opOwotCiAJCXdoaWxlIChpcWNvbXBfc3otLSkgewogCQkJaWYgKGlxY29tcFtpcWNvbXBfc3pdLmNoYW4gPT0KIAkJCSAgICBDSFNQRUNfQ0hBTk5FTChwaS0+cmFkaW9fY2hhbnNwZWMpKSB7CkBAIC0zMzEzLDcgKzMzMDAsNiBAQAogCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0JCUFTU0VSVChyZXN1bHQpOwogCQlnb3RvIGNhbF9kb25lOwogCX0KIApAQCAtMzU4NCw5ICszNTcwLDYgQEAKIAkJaWYgKHdsY19sY25waHlfdGVtcHNlbnNlX2Jhc2VkX3B3cl9jdHJsX2VuYWJsZWQocGkpKQogCQkJd2xjX2xjbnBoeV90eF9wb3dlcl9hZGp1c3RtZW50KCh3bGNfcGh5X3QgKikgcGkpOwogCQlicmVhazsKLQlkZWZhdWx0OgotCQlBU1NFUlQoMCk7Ci0JCWJyZWFrOwogCX0KIH0KIApAQCAtNTA3MSw5ICs1MDU0LDcgQEAKIAkJcGktPmh3cHdyY3RybF9jYXBhYmxlID0gdHJ1ZTsKIAl9CiAKLQlwaS0+eHRhbGZyZXEgPSBzaV9hbHBfY2xvY2socGktPnNoLT5zaWgpOwotCUFTU0VSVCgwID09IChwaS0+eHRhbGZyZXEgJSAxMDAwKSk7Ci0KKwlwaS0+eHRhbGZyZXEgPSBzaV9wbXVfYWxwX2Nsb2NrKHBpLT5zaC0+c2loKTsKIAlwaV9sY24tPmxjbnBoeV9wYXBkX3J4R25DdHJsX2luaXQgPSAwOwogCiAJcGktPnBpX2ZwdHIuaW5pdCA9IHdsY19waHlfaW5pdF9sY25waHk7CkBAIC01MjkzLDkgKzUyNzQsNyBAQAogCQkJfQogCQl9CiAKLQkJaWYgKGZpbHRfaW5kZXggPT0gLTEpIHsKLQkJCUFTU0VSVChmYWxzZSk7Ci0JCX0gZWxzZSB7CisJCWlmIChmaWx0X2luZGV4ICE9IC0xKSB7CiAJCQlmb3IgKGogPSAwOyBqIDwgTENOUEhZX05VTV9ESUdfRklMVF9DT0VGRlM7IGorKykgewogCQkJCXdyaXRlX3BoeV9yZWcocGksIGFkZHJbal0sCiAJCQkJCSAgICAgIExDTlBIWV90eGRpZ2ZpbHRjb2VmZnNfY2NrCkBAIC01MzEwLDkgKzUyODksNyBAQAogCQkJfQogCQl9CiAKLQkJaWYgKGZpbHRfaW5kZXggPT0gLTEpIHsKLQkJCUFTU0VSVChmYWxzZSk7Ci0JCX0gZWxzZSB7CisJCWlmIChmaWx0X2luZGV4ICE9IC0xKSB7CiAJCQlmb3IgKGogPSAwOyBqIDwgTENOUEhZX05VTV9ESUdfRklMVF9DT0VGRlM7IGorKykgewogCQkJCXdyaXRlX3BoeV9yZWcocGksIGFkZHJfb2ZkbVtqXSwKIAkJCQkJICAgICAgTENOUEhZX3R4ZGlnZmlsdGNvZWZmc19vZmRtCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3BoeS93bGNfcGh5X24uYyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3dsY19waHlfbi5jCmluZGV4IDc5NDdjNjAuLjcxMjc1MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3dsY19waHlfbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3dsY19waHlfbi5jCkBAIC0yMCw5ICsyMCw5IEBACiAjaW5jbHVkZSA8d2xjX2NmZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8c2l1dGlscy5oPgorI2luY2x1ZGUgPGFpdXRpbHMuaD4KICNpbmNsdWRlIDxzYmNoaXBjLmg+Ci0jaW5jbHVkZSA8aG5kcG11Lmg+CisjaW5jbHVkZSA8d2xjX3BtdS5oPgogCiAjaW5jbHVkZSA8YmNtZGV2cy5oPgogI2luY2x1ZGUgPHNiaG5kZG1hLmg+CkBAIC0xNDIxOCw4ICsxNDIxOCw2IEBACiB7CiAJdTE2IGFkZHIsIHZhbDsKIAotCUFTU0VSVChJU05QSFkocGkpKTsKLQogCXZhbCA9IDB4MWUxZjsKIAlmb3IgKGFkZHIgPSAoTlBIWV9UT19CUEhZX09GRiArIEJQSFlfUlNTSV9MVVQpOwogCSAgICAgYWRkciA8PSAoTlBIWV9UT19CUEhZX09GRiArIEJQSFlfUlNTSV9MVVRfRU5EKTsgYWRkcisrKSB7CkBAIC0xNDM2Nyw4ICsxNDM2NSw2IEBACiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCi0JCQlBU1NFUlQoMCk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xNDQwMSw4ICsxNDM5Nyw2IEBACiAJCQkJCQkJCSBbaWR4XSk7CiAJCQkJCWJyZWFrOwogCQkJCWRlZmF1bHQ6Ci0KLQkJCQkJQVNTRVJUKDApOwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9IGVsc2UgewpAQCAtMTQ1NTAsNyArMTQ1NDQsNyBAQAogCSAgICAgKHBpLT5zaC0+Y2hpcHBrZyA9PSBCQ000NzE4X1BLR19JRCkpKSB7CiAJCWlmICgocGktPnNoLT5ib2FyZGZsYWdzICYgQkZMX0VYVExOQSkgJiYKIAkJICAgIChDSFNQRUNfSVMyRyhwaS0+cmFkaW9fY2hhbnNwZWMpKSkgewotCQkJc2lfY29yZXJlZyhwaS0+c2gtPnNpaCwgU0lfQ0NfSURYLAorCQkJYWlfY29yZXJlZyhwaS0+c2gtPnNpaCwgU0lfQ0NfSURYLAogCQkJCSAgIG9mZnNldG9mKGNoaXBjcmVnc190LCBjaGlwY29udHJvbCksIDB4NDAsCiAJCQkJICAgMHg0MCk7CiAJCX0KQEAgLTE0NTY0LDE3ICsxNDU1OCwxNSBAQAogCWlmICgocGktPm5waHlfZ2JhbmRfc3B1cndhcjJfZW4pICYmIENIU1BFQ19JUzJHKHBpLT5yYWRpb19jaGFuc3BlYykgJiYKIAkgICAgQ0hTUEVDX0lTNDAocGktPnJhZGlvX2NoYW5zcGVjKSkgewogCi0JCXJlZ3MgPSAoZDExcmVnc190ICopIHNpX3N3aXRjaF9jb3JlKHBpLT5zaC0+c2loLCBEMTFfQ09SRV9JRCwKKwkJcmVncyA9IChkMTFyZWdzX3QgKikgYWlfc3dpdGNoX2NvcmUocGktPnNoLT5zaWgsIEQxMV9DT1JFX0lELAogCQkJCQkJICAgICZvcmlnaWR4LCAmaW50cl92YWwpOwotCQlBU1NFUlQocmVncyAhPSBOVUxMKTsKLQogCQlkMTFfY2xrX2N0bF9zdCA9IFJfUkVHKCZyZWdzLT5jbGtfY3RsX3N0KTsKIAkJQU5EX1JFRygmcmVncy0+Y2xrX2N0bF9zdCwKIAkJCX4oQ0NTX0ZPUkNFSFQgfCBDQ1NfSFRBUkVRKSk7CiAKIAkJV19SRUcoJnJlZ3MtPmNsa19jdGxfc3QsIGQxMV9jbGtfY3RsX3N0KTsKIAotCQlzaV9yZXN0b3JlX2NvcmUocGktPnNoLT5zaWgsIG9yaWdpZHgsIGludHJfdmFsKTsKKwkJYWlfcmVzdG9yZV9jb3JlKHBpLT5zaC0+c2loLCBvcmlnaWR4LCBpbnRyX3ZhbCk7CiAJfQogCiAJcGktPnVzZV9pbnRfdHhfaXFsb19jYWxfbnBoeSA9CkBAIC0xNDc4MywxMCArMTQ3NzUsNyBAQAogCQkJCQkJcmZwd3Jfb2Zmc2V0ID0gKHMxNikKIAkJCQkJCSAgICBucGh5X3BhcGRfcGFkZ2Fpbl9kbHRfMmdfMjA1N3JldjcKIAkJCQkJCSAgICBbcGFkX2duXTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCUFTU0VSVCgwKTsKIAkJCQkJfQotCiAJCQkJfSBlbHNlIHsKIAkJCQkJaWYgKChwaS0+cHVicGkucmFkaW9yZXYgPT0gMykgfHwKIAkJCQkJICAgIChwaS0+cHVicGkucmFkaW9yZXYgPT0gNCkgfHwKQEAgLTE0ODAwLDggKzE0Nzg5LDYgQEAKIAkJCQkJCXJmcHdyX29mZnNldCA9IChzMTYpCiAJCQkJCQkgICAgbnBoeV9wYXBkX3BnYWdhaW5fZGx0XzVnXzIwNTdyZXY3CiAJCQkJCQkgICAgW3BnYV9nbl07Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlBU1NFUlQoMCk7CiAJCQkJCX0KIAkJCQl9CiAJCQkJd2xjX3BoeV90YWJsZV93cml0ZV9ucGh5KHBpLApAQCAtMTQ5MDUsMTAgKzE0ODkyLDEwIEBACiAJCQkJfQogCiAJCQkJaWYgKHdsY19waHlfY2FsX3R4aXFsb19ucGh5Ci0JCQkJICAgIChwaSwgdGFyZ2V0X2dhaW4sIHRydWUsIGZhbHNlKSA9PSBCQ01FX09LKSB7CisJCQkJICAgIChwaSwgdGFyZ2V0X2dhaW4sIHRydWUsIGZhbHNlKSA9PSAwKSB7CiAJCQkJCWlmICh3bGNfcGh5X2NhbF9yeGlxX25waHkKIAkJCQkJICAgIChwaSwgdGFyZ2V0X2dhaW4sIDIsCi0JCQkJCSAgICAgZmFsc2UpID09IEJDTUVfT0spIHsKKwkJCQkJICAgICBmYWxzZSkgPT0gMCkgewogCQkJCQkJd2xjX3BoeV9zYXZlY2FsX25waHkocGkpOwogCiAJCQkJCX0KQEAgLTE0OTYzLDggKzE0OTUwLDYgQEAKIHsKIAl1MTYgdmFsOwogCi0JQVNTRVJUKDAgPT0gKFJfUkVHKCZwaS0+cmVncy0+bWFjY29udHJvbCkgJiBNQ1RMX0VOX01BQykpOwotCiAJd2xhcGlfYm1hY19waHljbGtfZmdjKHBpLT5zaC0+cGh5c2hpbSwgT04pOwogCiAJdmFsID0gcmVhZF9waHlfcmVnKHBpLCAweDAxKTsKQEAgLTE2MTMwLDggKzE2MTE1LDYgQEAKIAkJCQkJCSAweDE4LCAxNiwgYmNtX2FkY192bWlkKTsKIAkJCXdsY19waHlfdGFibGVfd3JpdGVfbnBoeShwaSwgTlBIWV9UQkxfSURfQUZFQ1RSTCwgNCwKIAkJCQkJCSAweDFjLCAxNiwgYmNtX2FkY19nYWluKTsKLQkJfSBlbHNlIHsKLQkJCUFTU0VSVCgwKTsKIAkJfQogCiAJCXdyaXRlX3JhZGlvX3JlZyhwaSwKQEAgLTE3NDE4LDggKzE3NDAxLDEwIEBACiAJU1BJTldBSVQoKChyZWFkX3JhZGlvX3JlZyhwaSwgUkFESU9fMjA1NV9DQUxfQ09VTlRFUl9PVVQyKSAmCiAJCSAgIFJBRElPXzIwNTVfUkNBTF9ET05FKSAhPSBSQURJT18yMDU1X1JDQUxfRE9ORSksIDIwMDApOwogCi0JQVNTRVJUKChyZWFkX3JhZGlvX3JlZyhwaSwgUkFESU9fMjA1NV9DQUxfQ09VTlRFUl9PVVQyKSAmCi0JCVJBRElPXzIwNTVfUkNBTF9ET05FKSA9PSBSQURJT18yMDU1X1JDQUxfRE9ORSk7CisJaWYgKFdBUk4oKHJlYWRfcmFkaW9fcmVnKHBpLCBSQURJT18yMDU1X0NBTF9DT1VOVEVSX09VVDIpICYKKwkJIFJBRElPXzIwNTVfUkNBTF9ET05FKSAhPSBSQURJT18yMDU1X1JDQUxfRE9ORSwKKwkJICJIVyBlcnJvcjogcmFkaW8gY2FsaWJyYXRpb24xXG4iKSkKKwkJcmV0dXJuOwogCiAJYW5kX3JhZGlvX3JlZyhwaSwgUkFESU9fMjA1NV9DQUxfTFBPX0NOVFJMLAogCQkgICAgICB+KFJBRElPXzIwNTVfQ0FMX0xQT19FTkFCTEUpKTsKQEAgLTE3NTEwLDcgKzE3NDk1LDYgQEAKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlBU1NFUlQoMCk7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTE3NTcxLDcgKzE3NTU1LDYgQEAKIAogCQkJCXJlZ3NfMjA1N19wdHIgPSByZWdzXzIwNTdfcmV2NXYxOwogCQkJfSBlbHNlIHsKLQkJCQlBU1NFUlQoMCk7CiAJCQkJYnJlYWs7CiAJCQl9CiAKQEAgLTE3NTg2LDExICsxNzU2OSw4IEBACiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJQVNTRVJUKDApOwogCQkJYnJlYWs7CiAJCX0KLQl9IGVsc2UgewotCQlBU1NFUlQoMCk7CiAJfQogCiAJd2xjX3BoeV9pbml0X3JhZGlvX3JlZ3NfYWxsYmFuZHMocGksIHJlZ3NfMjA1N19wdHIpOwpAQCAtMTc3MDgsNyArMTc2ODgsNiBAQAogCQl9CiAKIAkJaWYgKGkgPj0gdGJsX2xlbikgewotCQkJQVNTRVJUKGkgPCB0YmxfbGVuKTsKIAkJCWdvdG8gZmFpbDsKIAkJfQogCQlpZiAocGktPnB1YnBpLnJhZGlvcmV2ID09IDUpIHsKQEAgLTE3NzY1LDcgKzE3NzQ0LDYgQEAKIAkJfQogCiAJCWlmIChpID49IHRibF9sZW4pIHsKLQkJCUFTU0VSVChpIDwgdGJsX2xlbik7CiAJCQlnb3RvIGZhaWw7CiAJCX0KIAkJKnQxID0gJmNoYW5faW5mb190YmxfcF8xW2ldOwpAQCAtMTc3NzcsNyArMTc3NTUsNiBAQAogCQkJCWJyZWFrOwogCiAJCWlmIChpID49IEFSUkFZX1NJWkUoY2hhbl9pbmZvX25waHlfMjA1NSkpIHsKLQkJCUFTU0VSVChpIDwgQVJSQVlfU0laRShjaGFuX2luZm9fbnBoeV8yMDU1KSk7CiAJCQlnb3RvIGZhaWw7CiAJCX0KIAkJKnQzID0gJmNoYW5faW5mb19ucGh5XzIwNTVbaV07CkBAIC0xODI3Niw3ICsxODI1Myw5IEBACiAJCQl1ZGVsYXkoMTAwKTsKIAkJfQogCi0JCUFTU0VSVChpIDwgTUFYXzIwNXhfUkNBTF9XQUlUTE9PUFMpOworCQlpZiAoV0FSTihpID09IE1BWF8yMDV4X1JDQUxfV0FJVExPT1BTLAorCQkJICJIVyBlcnJvcjogcmFkaW8gY2FsaWIyIikpCisJCQlyZXR1cm4gMDsKIAogCQltb2RfcmFkaW9fcmVnKHBpLCBSQURJT18yMDU3X1JDQUxfQ09ORklHLCAweDIsIDB4MCk7CiAKQEAgLTE4MzI1LDcgKzE4MzA0LDkgQEAKIAkJCXVkZWxheSgxMDApOwogCQl9CiAKLQkJQVNTRVJUKGkgPCBNQVhfMjA1eF9SQ0FMX1dBSVRMT09QUyk7CisJCWlmIChXQVJOKGkgPT0gTUFYXzIwNXhfUkNBTF9XQUlUTE9PUFMsCisJCQkgIkhXIGVycm9yOiByYWRpbyBjYWxpYjMiKSkKKwkJCXJldHVybiAwOwogCiAJCXdyaXRlX3JhZGlvX3JlZyhwaSwgUkFESU9fMjA1Nl9TWU5fUkNBTF9NQVNURVIgfCBSQURJT18yMDU2X1NZTiwKIAkJCQkweDEpOwpAQCAtMTg1NzIsOCArMTg1NTMsNiBAQAogCQl1ZGVsYXkoNTAwKTsKIAl9CiAKLQlBU1NFUlQocmNjYWxfdmFsaWQgJiAweDIpOwotCiAJd3JpdGVfcmFkaW9fcmVnKHBpLCBSQURJT18yMDU3X1JDQ0FMX1NUQVJUX1IxX1ExX1AxLCAweDE1KTsKIAogCXJjY2FsX3ZhbGlkID0gMDsKQEAgLTE4NTk2LDggKzE4NTc1LDYgQEAKIAkJdWRlbGF5KDUwMCk7CiAJfQogCi0JQVNTRVJUKHJjY2FsX3ZhbGlkICYgMHgyKTsKLQogCXdyaXRlX3JhZGlvX3JlZyhwaSwgUkFESU9fMjA1N19SQ0NBTF9TVEFSVF9SMV9RMV9QMSwgMHgxNSk7CiAKIAlyY2NhbF92YWxpZCA9IDA7CkBAIC0xODYyMSw3ICsxODU5OCw4IEBACiAJCXVkZWxheSg1MDApOwogCX0KIAotCUFTU0VSVChyY2NhbF92YWxpZCAmIDB4Mik7CisJaWYgKFdBUk4oIShyY2NhbF92YWxpZCAmIDB4MiksICJIVyBlcnJvcjogcmFkaW8gY2FsaWI0IikpCisJCXJldHVybiAwOwogCiAJd3JpdGVfcmFkaW9fcmVnKHBpLCBSQURJT18yMDU3X1JDQ0FMX1NUQVJUX1IxX1ExX1AxLCAweDE1KTsKIApAQCAtMTk1ODUsOCArMTk1NjMsNiBAQAogCQkJCQkJIDEsIDB4MDgsIDE2LCAmdjIpOwogCQkJd2xjX3BoeV90YWJsZV93cml0ZV9ucGh5KHBpLCBOUEhZX1RCTF9JRF9BTlRTV0NUUkxMVVQsCiAJCQkJCQkgMSwgMHgwQywgMTYsICZ2Myk7Ci0JCX0gZWxzZSB7Ci0JCQlBU1NFUlQoMCk7CiAJCX0KIAogCQlpZiAocGktPnNyb21fZmVtNWcuYW50c3djdHJsbHV0ID09IDApIHsKQEAgLTE5NTk4LDE1ICsxOTU3NCwxMyBAQAogCQkJCQkJIDEsIDB4MTgsIDE2LCAmdjIpOwogCQkJd2xjX3BoeV90YWJsZV93cml0ZV9ucGh5KHBpLCBOUEhZX1RCTF9JRF9BTlRTV0NUUkxMVVQsCiAJCQkJCQkgMSwgMHgxQywgMTYsICZ2Myk7Ci0JCX0gZWxzZSB7Ci0JCQlBU1NFUlQoMCk7CiAJCX0KIAl9IGVsc2UgewogCiAJCXdyaXRlX3BoeV9yZWcocGksIDB4YzgsIDB4MCk7CiAJCXdyaXRlX3BoeV9yZWcocGksIDB4YzksIDB4MCk7CiAKLQkJc2lfZ3Bpb2NvbnRyb2wocGktPnNoLT5zaWgsIG1hc2ssIG1hc2ssIEdQSU9fRFJWX1BSSU9SSVRZKTsKKwkJYWlfZ3Bpb2NvbnRyb2wocGktPnNoLT5zaWgsIG1hc2ssIG1hc2ssIEdQSU9fRFJWX1BSSU9SSVRZKTsKIAogCQltYyA9IFJfUkVHKCZwaS0+cmVncy0+bWFjY29udHJvbCk7CiAJCW1jICY9IH5NQ1RMX0dQT1VUX1NFTF9NQVNLOwpAQCAtMTk3MDMsOCArMTk2NzcsNyBAQAogCW9yX3BoeV9yZWcocGksIDB4YTMsIHRyaWdnZXJfbWFzayk7CiAJU1BJTldBSVQoKHJlYWRfcGh5X3JlZyhwaSwgMHhhNCkgJiBzdGF0dXNfbWFzayksIDIwMDAwMCk7CiAJd3JpdGVfcGh5X3JlZyhwaSwgMHhhMSwgb3JpZ19SZnNlcUNvcmVBY3R2KTsKLQotCUFTU0VSVCgocmVhZF9waHlfcmVnKHBpLCAweGE0KSAmIHN0YXR1c19tYXNrKSA9PSAwKTsKKwlXQVJOKHJlYWRfcGh5X3JlZyhwaSwgMHhhNCkgJiBzdGF0dXNfbWFzaywgIkhXIGVycm9yIGluIHJmIik7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xOTcxOCw4ICsxOTY5MSw2IEBACiAJCSAgICAzKSA/IE5QSFlfUkVWM19SRlNFUV9DTURfRU5EIDogTlBIWV9SRlNFUV9DTURfRU5EOwogCXU4IGVuZF9kbHkgPSAxOwogCi0JQVNTRVJUKGxlbiA8PSAxNik7Ci0KIAlpZiAocGktPnBoeWhhbmdfYXZvaWQpCiAJCXdsY19waHlfc3RheV9pbl9jYXJyaWVyc2VhcmNoX25waHkocGksIHRydWUpOwogCkBAIC0yMTQ2Nyw3ICsyMTQzOCw3IEBACiAJd2xjX3BoeV9yZXNldGNjYV9ucGh5KHBpKTsKIH0KIAotaW50IEJDTUZBU1RQQVRICitpbnQKIHdsY19waHlfcnNzaV9jb21wdXRlX25waHkocGh5X2luZm9fdCAqcGksIHdsY19kMTFyeGhkcl90ICp3bGNfcnhoKQogewogCWQxMXJ4aGRyX3QgKnJ4aCA9ICZ3bGNfcnhoLT5yeGhkcjsKQEAgLTIxNTAzLDggKzIxNDc0LDYgQEAKIAkJcnhwd3IgPSAocnhwd3IwIDwgcnhwd3IxKSA/IHJ4cHdyMCA6IHJ4cHdyMTsKIAllbHNlIGlmIChwaS0+c2gtPnJzc2lfbW9kZSA9PSBSU1NJX0FOVF9NRVJHRV9BVkcpCiAJCXJ4cHdyID0gKHJ4cHdyMCArIHJ4cHdyMSkgPj4gMTsKLQllbHNlCi0JCUFTU0VSVCgwKTsKIAogCXJldHVybiByeHB3cjsKIH0KQEAgLTIxNTg4LDggKzIxNTU3LDkgQEAKIAogCQkJCQlTUElOV0FJVCgoKHJlYWRfcGh5X3JlZyhwaSwgMHg3OCkgJiB2YWwpCiAJCQkJCQkgICE9IDApLCAxMDAwMCk7Ci0JCQkJCUFTU0VSVCgocmVhZF9waHlfcmVnKHBpLCAweDc4KSAmIHZhbCkgPT0KLQkJCQkJICAgICAgIDApOworCQkJCQlpZiAoV0FSTihyZWFkX3BoeV9yZWcocGksIDB4NzgpICYgdmFsLAorCQkJCQkJIkhXIGVycm9yOiBvdmVycmlkZSBmYWlsZWQiKSkKKwkJCQkJCXJldHVybjsKIAogCQkJCQltYXNrID0gKDB4MSA8PCAwKTsKIAkJCQkJdmFsID0gMCA8PCAwOwpAQCAtMjIyMzMsOCArMjIyMDMsNiBAQAogCiBzdGF0aWMgdm9pZCB3bGNfcGh5X3Jlc3RvcmVfcnNzaWNhbF9ucGh5KHBoeV9pbmZvX3QgKnBpKQogewotCUFTU0VSVChOUkVWX0dFKHBpLT5wdWJwaS5waHlfcmV2LCAzKSk7Ci0KIAlpZiAoQ0hTUEVDX0lTMkcocGktPnJhZGlvX2NoYW5zcGVjKSkgewogCQlpZiAocGktPm5waHlfcnNzaWNhbF9jaGFuc3BlY18yRyA9PSAwKQogCQkJcmV0dXJuOwpAQCAtMjIzOTksMTMgKzIyMzY3LDEzIEBACiAJbnVtX3NhbXBzID0KIAkJd2xjX3BoeV9nZW5fbG9hZF9zYW1wbGVzX25waHkocGksIGZfa0h6LCBtYXhfdmFsLCBkYWNfdGVzdF9tb2RlKTsKIAlpZiAobnVtX3NhbXBzID09IDApIHsKLQkJcmV0dXJuIEJDTUVfRVJST1I7CisJCXJldHVybiAtRUJBREU7CiAJfQogCiAJd2xjX3BoeV9ydW5zYW1wbGVzX25waHkocGksIG51bV9zYW1wcywgbG9vcHMsIHdhaXQsIGlxbW9kZSwKIAkJCQlkYWNfdGVzdF9tb2RlLCBtb2RpZnlfYmJtdWx0KTsKIAotCXJldHVybiBCQ01FX09LOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjI3NzUsOCArMjI3NDMsNiBAQAogCQkJfQogCQl9CiAKLQkJQVNTRVJUKGlkeCAhPSAtMSk7Ci0KIAkJcGFyYW1zLT50eGdtID0gdGJsX2lxY2FsX2dhaW5wYXJhbXNfbnBoeVtiYW5kX2lkeF1ba11bMV07CiAJCXBhcmFtcy0+cGdhID0gdGJsX2lxY2FsX2dhaW5wYXJhbXNfbnBoeVtiYW5kX2lkeF1ba11bMl07CiAJCXBhcmFtcy0+cGFkID0gdGJsX2lxY2FsX2dhaW5wYXJhbXNfbnBoeVtiYW5kX2lkeF1ba11bM107CkBAIC0yMzg1NSw4ICsyMzgyMSw2IEBACiAJaWYgKFBIWV9NVVRFRChwaSkpCiAJCXJldHVybjsKIAotCUFTU0VSVChwaS0+bnBoeV9wZXJpY2FsICE9IFBIWV9QRVJJQ0FMX0RJU0FCTEUpOwotCiAJaWYgKGNhbHR5cGUgPT0gUEhZX1BFUklDQUxfQVVUTykKIAkJZnVsbGNhbCA9IChwaS0+cmFkaW9fY2hhbnNwZWMgIT0gcGktPm5waHlfdHhpcWxvY2FsX2NoYW5zcGVjKTsKIAllbHNlIGlmIChjYWx0eXBlID09IFBIWV9QRVJJQ0FMX1BBUlRJQUwpCkBAIC0yMzkxMyw3ICsyMzg3Nyw3IEBACiAKIAkJCXRhcmdldF9nYWluID0gcGktPm5waHlfY2FsX3RhcmdldF9nYWluOwogCQl9Ci0JCWlmIChCQ01FX09LID09CisJCWlmICgwID09CiAJCSAgICB3bGNfcGh5X2NhbF90eGlxbG9fbnBoeShwaSwgdGFyZ2V0X2dhaW4sIGZ1bGxjYWwsIG1waGFzZSkpIHsKIAkJCWlmIChQSFlfSVBBKHBpKSkKIAkJCQl3bGNfcGh5X2E0KHBpLCB0cnVlKTsKQEAgLTIzOTI1LDcgKzIzODg5LDcgQEAKIAkJCXdsYXBpX3N1c3BlbmRfbWFjX2FuZF93YWl0KHBpLT5zaC0+cGh5c2hpbSk7CiAJCQl3bGNfcGh5cmVnX2VudGVyKCh3bGNfcGh5X3QgKikgcGkpOwogCi0JCQlpZiAoQkNNRV9PSyA9PSB3bGNfcGh5X2NhbF9yeGlxX25waHkocGksIHRhcmdldF9nYWluLAorCQkJaWYgKDAgPT0gd2xjX3BoeV9jYWxfcnhpcV9ucGh5KHBpLCB0YXJnZXRfZ2FpbiwKIAkJCQkJCQkgICAgIChwaS0+CiAJCQkJCQkJICAgICAgZmlyc3RfY2FsX2FmdGVyX2Fzc29jCiAJCQkJCQkJICAgICAgfHwgKHBpLT4KQEAgLTIzOTU1LDggKzIzOTE5LDYgQEAKIAkJCXdsY19waHlfcmFkaW8yMDV4X3Zjb2NhbF9ucGh5KHBpKTsKIAkJfQogCX0gZWxzZSB7Ci0JCUFTU0VSVChwaS0+bnBoeV9wZXJpY2FsID49IFBIWV9QRVJJQ0FMX01QSEFTRSk7Ci0KIAkJc3dpdGNoIChwaS0+bXBoYXNlX2NhbF9waGFzZV9pZCkgewogCQljYXNlIE1QSEFTRV9DQUxfU1RBVEVfSU5JVDoKIAkJCXBpLT5ucGh5X3BlcmljYWxfbGFzdCA9IHBpLT5zaC0+bm93OwpAQCAtMjM5ODAsNyArMjM5NDIsNyBAQAogCiAJCQlpZiAod2xjX3BoeV9jYWxfdHhpcWxvX25waHkKIAkJCSAgICAocGksIHBpLT5ucGh5X2NhbF90YXJnZXRfZ2FpbiwgZnVsbGNhbCwKLQkJCSAgICAgdHJ1ZSkgIT0gQkNNRV9PSykgeworCQkJICAgICB0cnVlKSAhPSAwKSB7CiAKIAkJCQl3bGNfcGh5X2NhbF9wZXJpY2FsX21waGFzZV9yZXNldChwaSk7CiAJCQkJYnJlYWs7CkBAIC0yNDAxMiw3ICsyMzk3NCw3IEBACiAJCQkJCQkgIChwaS0+Zmlyc3RfY2FsX2FmdGVyX2Fzc29jIHx8CiAJCQkJCQkgICAocGktPmNhbF90eXBlX292ZXJyaWRlID09CiAJCQkJCQkgICAgUEhZX1BFUklDQUxfRlVMTCkpID8gMiA6IDAsCi0JCQkJCQkgIGZhbHNlKSA9PSBCQ01FX09LKSB7CisJCQkJCQkgIGZhbHNlKSA9PSAwKSB7CiAJCQkJd2xjX3BoeV9zYXZlY2FsX25waHkocGkpOwogCQkJfQogCkBAIC0yNDA1Miw3ICsyNDAxNCw2IEBACiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJQVNTRVJUKDApOwogCQkJd2xjX3BoeV9jYWxfcGVyaWNhbF9tcGhhc2VfcmVzZXQocGkpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTI0MTE2LDcgKzI0MDc3LDcgQEAKIAl2b2lkICp0YmxfcHRyOwogCWJvb2wgbGFkZGVyX3VwZGF0ZWRbMl07CiAJdTggbXBoYXNlX2NhbF9sYXN0cGhhc2UgPSAwOwotCWludCBiY21lcnJvciA9IEJDTUVfT0s7CisJaW50IGJjbWVycm9yID0gMDsKIAlib29sIHBoeWhhbmdfYXZvaWRfc3RhdGUgPSBmYWxzZTsKIAogCXUxNiB0YmxfdHhfaXFsb19jYWxfbG9mdF9sYWRkZXJfMjBbXSA9IHsKQEAgLTI0MjQyLDEzICsyNDIwMywxMyBAQAogCiAJaWYgKHBpLT5tcGhhc2VfY2FsX3BoYXNlX2lkID4gTVBIQVNFX0NBTF9TVEFURV9UWFBIQVNFMCkgewogCQl3bGNfcGh5X3J1bnNhbXBsZXNfbnBoeShwaSwgcGh5X2J3ICogOCwgMHhmZmZmLCAwLCAxLCAwLCBmYWxzZSk7Ci0JCWJjbWVycm9yID0gQkNNRV9PSzsKKwkJYmNtZXJyb3IgPSAwOwogCX0gZWxzZSB7CiAJCWJjbWVycm9yID0KIAkJICAgIHdsY19waHlfdHhfdG9uZV9ucGh5KHBpLCB0b25lX2ZyZXEsIG1heF92YWwsIDEsIDAsIGZhbHNlKTsKIAl9CiAKLQlpZiAoYmNtZXJyb3IgPT0gQkNNRV9PSykgeworCWlmIChiY21lcnJvciA9PSAwKSB7CiAKIAkJaWYgKHBpLT5tcGhhc2VfY2FsX3BoYXNlX2lkID4gTVBIQVNFX0NBTF9TVEFURV9UWFBIQVNFMCkgewogCQkJdGJsX3B0ciA9IHBpLT5tcGhhc2VfdHhjYWxfYmVzdGNvZWZmczsKQEAgLTI0MzYxLDcgKzI0MzIyLDkgQEAKIAogCQkJU1BJTldBSVQoKChyZWFkX3BoeV9yZWcocGksIDB4YzApICYgMHhjMDAwKSAhPSAwKSwKIAkJCQkgMjAwMDApOwotCQkJQVNTRVJUKChyZWFkX3BoeV9yZWcocGksIDB4YzApICYgMHhjMDAwKSA9PSAwKTsKKwkJCWlmIChXQVJOKHJlYWRfcGh5X3JlZyhwaSwgMHhjMCkgJiAweGMwMDAsCisJCQkJICJIVyBlcnJvcjogdHhpcSBjYWxpYiIpKQorCQkJCXJldHVybiAtRUlPOwogCiAJCQl3bGNfcGh5X3RhYmxlX3JlYWRfbnBoeShwaSwgTlBIWV9UQkxfSURfSVFMT0NBTCwKIAkJCQkJCXRibF9sZW4sIDk2LCAxNiwgdGJsX2J1Zik7CkBAIC0yNDQ2OCw4ICsyNDQzMSw2IEBACiB7CiAJdTE2IHRibF9idWZbN107CiAKLQlBU1NFUlQoTlJFVl9MVChwaS0+cHVicGkucGh5X3JldiwgMikpOwotCiAJaWYgKChwaS0+bnBoeV90eGlxbG9jYWxfY2hhbnNwZWMgPT0gcGktPnJhZGlvX2NoYW5zcGVjKSAmJgogCSAgICAocGktPm5waHlfdHhpcWxvY2FsX2NvZWZmc3ZhbGlkKSkgewogCQl3bGNfcGh5X3RhYmxlX3JlYWRfbnBoeShwaSwgTlBIWV9UQkxfSURfSVFMT0NBTCwKQEAgLTI0NTQ0LDEwICsyNDUwNSwxMSBAQAogCiAJU1BJTldBSVQoKChyZWFkX3BoeV9yZWcocGksIDB4MTI5KSAmIE5QSFlfSXFlc3RDbWRfaXFzdGFydCkgIT0gMCksCiAJCSAxMDAwMCk7Ci0JQVNTRVJUKChyZWFkX3BoeV9yZWcocGksIDB4MTI5KSAmIE5QSFlfSXFlc3RDbWRfaXFzdGFydCkgPT0gMCk7CisJaWYgKFdBUk4ocmVhZF9waHlfcmVnKHBpLCAweDEyOSkgJiBOUEhZX0lxZXN0Q21kX2lxc3RhcnQsCisJCSAiSFcgZXJyb3I6IHJ4aXEgZXN0IikpCisJCXJldHVybjsKIAogCWlmICgocmVhZF9waHlfcmVnKHBpLCAweDEyOSkgJiBOUEhZX0lxZXN0Q21kX2lxc3RhcnQpID09IDApIHsKLQkJQVNTRVJUKHBpLT5wdWJwaS5waHlfY29yZW51bSA8PSBQSFlfQ09SRV9NQVgpOwogCQlmb3IgKGNvcmUgPSAwOyBjb3JlIDwgcGktPnB1YnBpLnBoeV9jb3JlbnVtOyBjb3JlKyspIHsKIAkJCWVzdFtjb3JlXS5pX3B3ciA9CiAJCQkgICAgKHJlYWRfcGh5X3JlZyhwaSwgTlBIWV9JcWVzdGlwd3JBY2NIaShjb3JlKSkgPDwgMTYpCkBAIC0yNDU3Miw3ICsyNDUzNCw3IEBACiAJdTMyIGlpID0gMCwgcXEgPSAwOwogCXMxNiBpcV9uYml0cywgcXFfbmJpdHMsIGJyc2gsIGFyc2g7CiAJczMyIGEsIGIsIHRlbXA7Ci0JaW50IGJjbWVycm9yID0gQkNNRV9PSzsKKwlpbnQgYmNtZXJyb3IgPSAwOwogCXVpbnQgY2FsX3JldHJ5ID0gMDsKIAogCWlmIChjb3JlX21hc2sgPT0gMHgwKQpAQCAtMjQ2MDIsNyArMjQ1NjQsNyBAQAogCQl9CiAKIAkJaWYgKChpaSArIHFxKSA8IE5QSFlfTUlOX1JYSVFfUFdSKSB7Ci0JCQliY21lcnJvciA9IEJDTUVfRVJST1I7CisJCQliY21lcnJvciA9IC1FQkFERTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTI0NjE0LDE0ICsyNDU3NiwxNCBAQAogCQkJYSA9ICgtKGlxIDw8ICgzMCAtIGlxX25iaXRzKSkgKyAoaWkgPj4gKDEgKyBhcnNoKSkpOwogCQkJdGVtcCA9IChzMzIpIChpaSA+PiBhcnNoKTsKIAkJCWlmICh0ZW1wID09IDApIHsKLQkJCQliY21lcnJvciA9IEJDTUVfRVJST1I7CisJCQkJYmNtZXJyb3IgPSAtRUJBREU7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlhID0gKC0oaXEgPDwgKDMwIC0gaXFfbmJpdHMpKSArIChpaSA8PCAoLTEgLSBhcnNoKSkpOwogCQkJdGVtcCA9IChzMzIpIChpaSA8PCAtYXJzaCk7CiAJCQlpZiAodGVtcCA9PSAwKSB7Ci0JCQkJYmNtZXJyb3IgPSBCQ01FX0VSUk9SOworCQkJCWJjbWVycm9yID0gLUVCQURFOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CkBAIC0yNDYzMywyMCArMjQ1OTUsMjAgQEAKIAkJCWIgPSAocXEgPDwgKDMxIC0gcXFfbmJpdHMpKTsKIAkJCXRlbXAgPSAoczMyKSAoaWkgPj4gYnJzaCk7CiAJCQlpZiAodGVtcCA9PSAwKSB7Ci0JCQkJYmNtZXJyb3IgPSBCQ01FX0VSUk9SOworCQkJCWJjbWVycm9yID0gLUVCQURFOwogCQkJCWJyZWFrOwogCQkJfQogCQl9IGVsc2UgewogCQkJYiA9IChxcSA8PCAoMzEgLSBxcV9uYml0cykpOwogCQkJdGVtcCA9IChzMzIpIChpaSA8PCAtYnJzaCk7CiAJCQlpZiAodGVtcCA9PSAwKSB7Ci0JCQkJYmNtZXJyb3IgPSBCQ01FX0VSUk9SOworCQkJCWJjbWVycm9yID0gLUVCQURFOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CiAJCWIgLz0gdGVtcDsKIAkJYiAtPSBhICogYTsKLQkJYiA9IChzMzIpIHdsY19waHlfc3FydF9pbnQoKHUzMikgYik7CisJCWIgPSAoczMyKSBpbnRfc3FydCgodW5zaWduZWQgbG9uZykgYik7CiAJCWIgLT0gKDEgPDwgMTApOwogCiAJCWlmICgoY3Vycl9jb3JlID09IFBIWV9DT1JFXzApICYmIChjb3JlX21hc2sgJiAweDEpKSB7CkBAIC0yNDY3MSw3ICsyNDYzMyw3IEBACiAJCX0KIAl9CiAKLQlpZiAoYmNtZXJyb3IgIT0gQkNNRV9PSykgeworCWlmIChiY21lcnJvciAhPSAwKSB7CiAJCXByaW50aygiJXM6IEZhaWxlZCwgY250ID0gJWRcbiIsIF9fZnVuY19fLCBjYWxfcmV0cnkpOwogCiAJCWlmIChjYWxfcmV0cnkgPCBDQUxfUkVUUllfQ05UKSB7CkBAIC0yNTQ1MSw3ICsyNTQxMyw3IEBACiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJQVNTRVJUKDApOworCQkJYnJlYWs7CiAJCX0KIAogCQlpZiAoKGN1cnJfZ2FpbnRibF9pbmRleCA8IDApIHx8CkBAIC0yNTkxNiw3ICsyNTg3OCw3IEBACiAKIAl3bGNfcGh5X3N0YXlfaW5fY2FycmllcnNlYXJjaF9ucGh5KHBpLCBmYWxzZSk7CiAKLQlyZXR1cm4gQkNNRV9PSzsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludApAQCAtMjU5NDEsNyArMjU5MDMsNyBAQAogCXUxNiBjYWxfZ2FpblsyXTsKIAlucGh5X2lxY2FsX3BhcmFtc190IGNhbF9wYXJhbXNbMl07CiAJdTggcGh5X2J3OwotCWludCBiY21lcnJvciA9IEJDTUVfT0s7CisJaW50IGJjbWVycm9yID0gMDsKIAlib29sIGZpcnN0X3BsYXl0b25lID0gdHJ1ZTsKIAogCXdsY19waHlfc3RheV9pbl9jYXJyaWVyc2VhcmNoX25waHkocGksIHRydWUpOwpAQCAtMjYwOTEsNyArMjYwNTMsNyBAQAogCQkJCQkJCTAsIDAsIDAsIHRydWUpOwogCQkJfQogCi0JCQlpZiAoYmNtZXJyb3IgPT0gQkNNRV9PSykgeworCQkJaWYgKGJjbWVycm9yID09IDApIHsKIAkJCQlpZiAoZ2Fpbl9wYXNzIDwgMykgewogCiAJCQkJCXdsY19waHlfcnhfaXFfZXN0X25waHkocGksIGVzdCwKQEAgLTI2MTE0LDcgKzI2MDc2LDcgQEAKIAkJCQl3bGNfcGh5X3N0b3BwbGF5YmFja19ucGh5KHBpKTsKIAkJCX0KIAotCQkJaWYgKGJjbWVycm9yICE9IEJDTUVfT0spCisJCQlpZiAoYmNtZXJyb3IgIT0gMCkKIAkJCQlicmVhazsKIAkJfQogCkBAIC0yNjEzMCw3ICsyNjA5Miw3IEBACiAJCQkgICAgICAweGE3LCBvcmlnX0FmZWN0cmxDb3JlKTsKIAkJd3JpdGVfcGh5X3JlZyhwaSwgMHhhMiwgb3JpZ19SZnNlcUNvcmVBY3R2KTsKIAotCQlpZiAoYmNtZXJyb3IgIT0gQkNNRV9PSykKKwkJaWYgKGJjbWVycm9yICE9IDApCiAJCQlicmVhazsKIAl9CiAKQEAgLTI2MjcwLDggKzI2MjMyLDYgQEAKIAogCQkJCXR4X3B3cmN0cmxfdGJsID0KIAkJCQkgICAgbnBoeV90cGNfdHhnYWluX2lwYV8yZ18yMDU3cmV2NzsKLQkJCX0gZWxzZSB7Ci0JCQkJQVNTRVJUKDApOwogCQkJfQogCiAJCX0gZWxzZSBpZiAoTlJFVl9JUyhwaS0+cHVicGkucGh5X3JldiwgNikpIHsKQEAgLTI2MzAzLDggKzI2MjYzLDYgQEAKIAogCQkJCXR4X3B3cmN0cmxfdGJsID0KIAkJCQkgICAgbnBoeV90cGNfdHhnYWluX2lwYV81Z18yMDU3cmV2NzsKLQkJCX0gZWxzZSB7Ci0JCQkJQVNTRVJUKDApOwogCQkJfQogCiAJCX0gZWxzZSB7CkBAIC0yNjM0Nyw4ICsyNjMwNSw2IEBACiAJCQkJICAgfHwgKHBpLT5wdWJwaS5yYWRpb3JldiA9PSA2KSkgewogCiAJCQkJbWl4Z2FpbiA9IDB4MDA7Ci0JCQl9IGVsc2UgewotCQkJCUFTU0VSVCgwKTsKIAkJCX0KIAogCQl9IGVsc2UgewpAQCAtMjYzNjEsOCArMjYzMTcsNiBAQAogCQkJCSAgIHx8IChwaS0+cHVicGkucmFkaW9yZXYgPT0gOCkpIHsKIAogCQkJCW1peGdhaW4gPSAweDA7Ci0JCQl9IGVsc2UgewotCQkJCUFTU0VSVCgwKTsKIAkJCX0KIAkJfQogCkBAIC0yNjQ2NCw4ICsyNjQxOCw2IEBACiAJCQkJV1JJVEVfUkFESU9fUkVHMyhwaSwgUkFESU9fMjA1NywgVFgsIGNvcmUsCiAJCQkJCQkgVFhSWENPVVBMRV8yR19BVFRFTiwgMHhmMCk7CiAKLQkJCX0gZWxzZSB7Ci0JCQkJQVNTRVJUKDApOwogCQkJfQogCiAJCQlXUklURV9SQURJT19SRUczKHBpLCBSQURJT18yMDU3LCBUWCwgb2ZmX2NvcmUsCkBAIC0yNjcyNCw4ICsyNjY3Niw2IEBACiAJdTMyICpidWYsICpzcmMsICpkc3QsIHN6OwogCiAJc3ogPSBlbmQgLSBzdGFydCArIDE7Ci0JQVNTRVJUKGVuZCA+IHN0YXJ0KTsKLQlBU1NFUlQoZW5kIDwgTlBIWV9QQVBEX0VQU19UQkxfU0laRSk7CiAKIAlidWYgPSBrbWFsbG9jKDIgKiBzaXplb2YodTMyKSAqIE5QSFlfUEFQRF9FUFNfVEJMX1NJWkUsIEdGUF9BVE9NSUMpOwogCWlmIChOVUxMID09IGJ1ZikgewpAQCAtMjY3ODcsOCArMjY3MzcsNiBAQAogCiAJcGh5X2E3ID0gKGNvcmUgPT0gUEhZX0NPUkVfMCkgPyAxIDogMDsKIAotCUFTU0VSVCgoY2FsX21vZGUgPT0gQ0FMX0ZVTEwpIHx8IChjYWxfbW9kZSA9PSBDQUxfR0NUUkwpCi0JICAgICAgIHx8IChjYWxfbW9kZSA9PSBDQUxfU09GVCkpOwogCXBoeV9hNiA9ICgoY2FsX21vZGUgPT0gQ0FMX0dDVFJMKQogCQkgIHx8IChjYWxfbW9kZSA9PSBDQUxfU09GVCkpID8gdHJ1ZSA6IGZhbHNlOwogCkBAIC0yNzMzMyw4ICsyNzI4MSw2IEBACiAJCQkJCQkJICAgIG5waHlfcGFwZF9jYWxfZ2Fpbl9pbmRleAogCQkJCQkJCSAgICBbcGh5X2I1XSwgcGh5X2I1KTsKIAotCQkJCX0gZWxzZSB7Ci0JCQkJCUFTU0VSVCgwKTsKIAkJCQl9CiAKIAkJCQlwaHlfYjFbcGh5X2I1XS5nYWlucy5wYWRbcGh5X2I1XSA9CkBAIC0yNzQxNyw4ICsyNzM2Myw2IEBACiAJCQkJCSAgICAtKG5waHlfcGFwZF9wYWRnYWluX2RsdF8yZ18yMDU3cmV2NwogCQkJCQkgICAgICBbcGh5X2I4XQogCQkJCQkgICAgICArIDEpIC8gMjsKLQkJCQl9IGVsc2UgewotCQkJCQlBU1NFUlQoMCk7CiAJCQkJfQogCQkJfSBlbHNlIHsKIAkJCQlwaHlfYjcgPSBwaHlfYjFbcGh5X2I1XS5nYWlucy5wZ2FbcGh5X2I1XTsKQEAgLTI3NDM1LDggKzI3Mzc5LDYgQEAKIAkJCQkJICAgIC0obnBoeV9wYXBkX3BnYWdhaW5fZGx0XzVnXzIwNTdyZXY3CiAJCQkJCSAgICAgIFtwaHlfYjddCiAJCQkJCSAgICAgICsgMSkgLyAyOwotCQkJCX0gZWxzZSB7Ci0JCQkJCUFTU0VSVCgwKTsKIAkJCQl9CiAKIAkJCQlwaHlfYjEwID0gLTk7CkBAIC0yNzUzNiw4ICsyNzQ3OCw2IEBACiAJdTggdHhwaVsyXSwgY2hhbl9mcmVxX3JhbmdlOwogCXMzMiByZnB3cl9vZmZzZXQ7CiAKLQlBU1NFUlQocGktPm5waHlfdHhwd3JjdHJsID09IFBIWV9UUENfSFdfT0ZGKTsKLQogCWlmIChwaS0+cGh5aGFuZ19hdm9pZCkKIAkJd2xjX3BoeV9zdGF5X2luX2NhcnJpZXJzZWFyY2hfbnBoeShwaSwgdHJ1ZSk7CiAKQEAgLTI5MTc5LDcgKzI5MTE5LDYgQEAKIAkJKm1heF9wd3IgPSBwaS0+dHhfc3JvbV9tYXhfcmF0ZV81Z19oaVt0eHBfcmF0ZV9pZHhdOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlBU1NFUlQoMCk7CiAJCSptYXhfcHdyID0gcGktPnR4X3Nyb21fbWF4X3JhdGVfMmdbdHhwX3JhdGVfaWR4XTsKIAkJYnJlYWs7CiAJfQpAQCAtMjkxOTEsOCArMjkxMzAsNiBAQAogewogCXUxNiBjbGlwX29mZltdID0geyAweGZmZmYsIDB4ZmZmZiB9OwogCi0JQVNTRVJUKDAgPT0gKFJfUkVHKCZwaS0+cmVncy0+bWFjY29udHJvbCkgJiBNQ1RMX0VOX01BQykpOwotCiAJaWYgKGVuYWJsZSkgewogCQlpZiAocGktPm5waHlfZGVhZl9jb3VudCA9PSAwKSB7CiAJCQlwaS0+Y2xhc3NpZmllcl9zdGF0ZSA9CkBAIC0yOTIwNyw4ICsyOTE0NCw2IEBACiAJCXdsY19waHlfcmVzZXRjY2FfbnBoeShwaSk7CiAKIAl9IGVsc2UgewotCQlBU1NFUlQocGktPm5waHlfZGVhZl9jb3VudCA+IDApOwotCiAJCXBpLT5ucGh5X2RlYWZfY291bnQtLTsKIAogCQlpZiAocGktPm5waHlfZGVhZl9jb3VudCA9PSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3BoeS93bGNfcGh5X3FtYXRoLmMgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3BoeS93bGNfcGh5X3FtYXRoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk4MTc2ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3dsY19waHlfcW1hdGguYwpAQCAtMCwwICsxLDI5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWQorICogU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSAid2xjX3BoeV9xbWF0aC5oIgorCisvKgorRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gbWFrZSAxNiBiaXQgdW5zaWduZWQgbXVsdGlwbGljYXRpb24uIFRvIGZpdCB0aGUgb3V0cHV0IGludG8KKzE2IGJpdHMgdGhlIDMyIGJpdCBtdWx0aXBsaWNhdGlvbiByZXN1bHQgaXMgcmlnaHQgc2hpZnRlZCBieSAxNiBiaXRzLgorKi8KK3UxNiBxbV9tdWx1MTYodTE2IG9wMSwgdTE2IG9wMikKK3sKKwlyZXR1cm4gKHUxNikgKCgodTMyKSBvcDEgKiAodTMyKSBvcDIpID4+IDE2KTsKK30KKworLyoKK0Rlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIG1ha2UgMTYgYml0IG11bHRpcGxpY2F0aW9uIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBpbiAxNiBiaXRzLgorVG8gZml0IHRoZSBtdWx0aXBsaWNhdGlvbiByZXN1bHQgaW50byAxNiBiaXRzIHRoZSBtdWx0aXBsaWNhdGlvbiByZXN1bHQgaXMgcmlnaHQgc2hpZnRlZCBieQorMTUgYml0cy4gUmlnaHQgc2hpZnRpbmcgMTUgYml0cyBpbnN0ZWFkIG9mIDE2IGJpdHMgaXMgZG9uZSB0byByZW1vdmUgdGhlIGV4dHJhIHNpZ24gYml0IGZvcm1lZAorZHVlIHRvIHRoZSBtdWx0aXBsaWNhdGlvbi4KK1doZW4gYm90aCB0aGUgMTZiaXQgaW5wdXRzIGFyZSAweDgwMDAgdGhlbiB0aGUgb3V0cHV0IGlzIHNhdHVyYXRlZCB0byAweDdmZmZmZmZmLgorKi8KK3MxNiBxbV9tdWxzMTYoczE2IG9wMSwgczE2IG9wMikKK3sKKwlzMzIgcmVzdWx0OworCWlmIChvcDEgPT0gKHMxNikgMHg4MDAwICYmIG9wMiA9PSAoczE2KSAweDgwMDApIHsKKwkJcmVzdWx0ID0gMHg3ZmZmZmZmZjsKKwl9IGVsc2UgeworCQlyZXN1bHQgPSAoKHMzMikgKG9wMSkgKiAoczMyKSAob3AyKSk7CisJfQorCXJldHVybiAoczE2KSAocmVzdWx0ID4+IDE1KTsKK30KKworLyoKK0Rlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIGFkZCB0d28gMzIgYml0IG51bWJlcnMgYW5kIHJldHVybiB0aGUgMzJiaXQgcmVzdWx0LgorSWYgdGhlIHJlc3VsdCBvdmVyZmxvdyAzMiBiaXRzLCB0aGUgb3V0cHV0IHdpbGwgYmUgc2F0dXJhdGVkIHRvIDMyYml0cy4KKyovCitzMzIgcW1fYWRkMzIoczMyIG9wMSwgczMyIG9wMikKK3sKKwlzMzIgcmVzdWx0OworCXJlc3VsdCA9IG9wMSArIG9wMjsKKwlpZiAob3AxIDwgMCAmJiBvcDIgPCAwICYmIHJlc3VsdCA+IDApIHsKKwkJcmVzdWx0ID0gMHg4MDAwMDAwMDsKKwl9IGVsc2UgaWYgKG9wMSA+IDAgJiYgb3AyID4gMCAmJiByZXN1bHQgPCAwKSB7CisJCXJlc3VsdCA9IDB4N2ZmZmZmZmY7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCitEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiBhZGQgdHdvIDE2IGJpdCBudW1iZXJzIGFuZCByZXR1cm4gdGhlIDE2Yml0IHJlc3VsdC4KK0lmIHRoZSByZXN1bHQgb3ZlcmZsb3cgMTYgYml0cywgdGhlIG91dHB1dCB3aWxsIGJlIHNhdHVyYXRlZCB0byAxNmJpdHMuCisqLworczE2IHFtX2FkZDE2KHMxNiBvcDEsIHMxNiBvcDIpCit7CisJczE2IHJlc3VsdDsKKwlzMzIgdGVtcCA9IChzMzIpIG9wMSArIChzMzIpIG9wMjsKKwlpZiAodGVtcCA+IChzMzIpIDB4N2ZmZikgeworCQlyZXN1bHQgPSAoczE2KSAweDdmZmY7CisJfSBlbHNlIGlmICh0ZW1wIDwgKHMzMikgMHhmZmZmODAwMCkgeworCQlyZXN1bHQgPSAoczE2KSAweGZmZmY4MDAwOworCX0gZWxzZSB7CisJCXJlc3VsdCA9IChzMTYpIHRlbXA7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCitEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiBtYWtlIDE2IGJpdCBzdWJ0cmFjdGlvbiBhbmQgcmV0dXJuIHRoZSAxNmJpdCByZXN1bHQuCitJZiB0aGUgcmVzdWx0IG92ZXJmbG93IDE2IGJpdHMsIHRoZSBvdXRwdXQgd2lsbCBiZSBzYXR1cmF0ZWQgdG8gMTZiaXRzLgorKi8KK3MxNiBxbV9zdWIxNihzMTYgb3AxLCBzMTYgb3AyKQoreworCXMxNiByZXN1bHQ7CisJczMyIHRlbXAgPSAoczMyKSBvcDEgLSAoczMyKSBvcDI7CisJaWYgKHRlbXAgPiAoczMyKSAweDdmZmYpIHsKKwkJcmVzdWx0ID0gKHMxNikgMHg3ZmZmOworCX0gZWxzZSBpZiAodGVtcCA8IChzMzIpIDB4ZmZmZjgwMDApIHsKKwkJcmVzdWx0ID0gKHMxNikgMHhmZmZmODAwMDsKKwl9IGVsc2UgeworCQlyZXN1bHQgPSAoczE2KSB0ZW1wOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gbWFrZSBhIDMyIGJpdCBzYXR1cmF0ZWQgbGVmdCBzaGlmdCB3aGVuIHRoZSBzcGVjaWZpZWQgc2hpZnQKK2lzICt2ZS4gVGhpcyBmdW5jdGlvbiB3aWxsIG1ha2UgYSAzMiBiaXQgcmlnaHQgc2hpZnQgd2hlbiB0aGUgc3BlY2lmaWVkIHNoaWZ0IGlzIC12ZS4KK1RoaXMgZnVuY3Rpb24gcmV0dXJuIHRoZSByZXN1bHQgYWZ0ZXIgc2hpZnRpbmcgb3BlcmF0aW9uLgorKi8KK3MzMiBxbV9zaGwzMihzMzIgb3AsIGludCBzaGlmdCkKK3sKKwlpbnQgaTsKKwlzMzIgcmVzdWx0OworCXJlc3VsdCA9IG9wOworCWlmIChzaGlmdCA+IDMxKQorCQlzaGlmdCA9IDMxOworCWVsc2UgaWYgKHNoaWZ0IDwgLTMxKQorCQlzaGlmdCA9IC0zMTsKKwlpZiAoc2hpZnQgPj0gMCkgeworCQlmb3IgKGkgPSAwOyBpIDwgc2hpZnQ7IGkrKykgeworCQkJcmVzdWx0ID0gcW1fYWRkMzIocmVzdWx0LCByZXN1bHQpOworCQl9CisJfSBlbHNlIHsKKwkJcmVzdWx0ID0gcmVzdWx0ID4+ICgtc2hpZnQpOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gbWFrZSBhIDE2IGJpdCBzYXR1cmF0ZWQgbGVmdCBzaGlmdCB3aGVuIHRoZSBzcGVjaWZpZWQgc2hpZnQKK2lzICt2ZS4gVGhpcyBmdW5jdGlvbiB3aWxsIG1ha2UgYSAxNiBiaXQgcmlnaHQgc2hpZnQgd2hlbiB0aGUgc3BlY2lmaWVkIHNoaWZ0IGlzIC12ZS4KK1RoaXMgZnVuY3Rpb24gcmV0dXJuIHRoZSByZXN1bHQgYWZ0ZXIgc2hpZnRpbmcgb3BlcmF0aW9uLgorKi8KK3MxNiBxbV9zaGwxNihzMTYgb3AsIGludCBzaGlmdCkKK3sKKwlpbnQgaTsKKwlzMTYgcmVzdWx0OworCXJlc3VsdCA9IG9wOworCWlmIChzaGlmdCA+IDE1KQorCQlzaGlmdCA9IDE1OworCWVsc2UgaWYgKHNoaWZ0IDwgLTE1KQorCQlzaGlmdCA9IC0xNTsKKwlpZiAoc2hpZnQgPiAwKSB7CisJCWZvciAoaSA9IDA7IGkgPCBzaGlmdDsgaSsrKSB7CisJCQlyZXN1bHQgPSBxbV9hZGQxNihyZXN1bHQsIHJlc3VsdCk7CisJCX0KKwl9IGVsc2UgeworCQlyZXN1bHQgPSByZXN1bHQgPj4gKC1zaGlmdCk7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCitEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiBtYWtlIGEgMTYgYml0IHJpZ2h0IHNoaWZ0IHdoZW4gc2hpZnQgaXMgK3ZlLgorVGhpcyBmdW5jdGlvbiBtYWtlIGEgMTYgYml0IHNhdHVyYXRlZCBsZWZ0IHNoaWZ0IHdoZW4gc2hpZnQgaXMgLXZlLiBUaGlzIGZ1bmN0aW9uCityZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgc2hpZnQgb3BlcmF0aW9uLgorKi8KK3MxNiBxbV9zaHIxNihzMTYgb3AsIGludCBzaGlmdCkKK3sKKwlyZXR1cm4gcW1fc2hsMTYob3AsIC1zaGlmdCk7Cit9CisKKy8qCitEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiByZXR1cm4gdGhlIG51bWJlciBvZiByZWR1bmRhbnQgc2lnbiBiaXRzIGluIGEgMzIgYml0IG51bWJlci4KK0V4YW1wbGU6IHFtX25vcm0zMigweDAwMDAwMDgwKSA9IDIzCisqLworczE2IHFtX25vcm0zMihzMzIgb3ApCit7CisJdTE2IHUxNmV4dHJhU2lnbkJpdHM7CisJaWYgKG9wID09IDApIHsKKwkJcmV0dXJuIDMxOworCX0gZWxzZSB7CisJCXUxNmV4dHJhU2lnbkJpdHMgPSAwOworCQl3aGlsZSAoKG9wID4+IDMxKSA9PSAob3AgPj4gMzApKSB7CisJCQl1MTZleHRyYVNpZ25CaXRzKys7CisJCQlvcCA9IG9wIDw8IDE7CisJCX0KKwl9CisJcmV0dXJuIHUxNmV4dHJhU2lnbkJpdHM7Cit9CisKKy8qIFRoaXMgdGFibGUgaXMgbG9nMigxKyhpLzMyKSkgd2hlcmUgaT1bMDoxOjMxXSwgaW4gcS4xNSBmb3JtYXQgKi8KK3N0YXRpYyBjb25zdCBzMTYgbG9nX3RhYmxlW10gPSB7CisJMCwKKwkxNDU1LAorCTI4NjYsCisJNDIzNiwKKwk1NTY4LAorCTY4NjMsCisJODEyNCwKKwk5MzUyLAorCTEwNTQ5LAorCTExNzE2LAorCTEyODU1LAorCTEzOTY4LAorCTE1MDU1LAorCTE2MTE3LAorCTE3MTU2LAorCTE4MTczLAorCTE5MTY4LAorCTIwMTQzLAorCTIxMDk4LAorCTIyMDM0LAorCTIyOTUyLAorCTIzODUyLAorCTI0NzM2LAorCTI1NjA0LAorCTI2NDU1LAorCTI3MjkyLAorCTI4MTE0LAorCTI4OTIyLAorCTI5NzE3LAorCTMwNDk4LAorCTMxMjY3LAorCTMyMDI0Cit9OworCisjZGVmaW5lIExPR19UQUJMRV9TSVpFIDMyCS8qIGxvZ190YWJsZSBzaXplICovCisjZGVmaW5lIExPRzJfTE9HX1RBQkxFX1NJWkUgNQkvKiBsb2cyKGxvZ190YWJsZSBzaXplKSAqLworI2RlZmluZSBRX0xPR19UQUJMRSAxNQkJLyogcWZvcm1hdCBvZiBsb2dfdGFibGUgKi8KKyNkZWZpbmUgTE9HMTBfMgkJMTk3MjgJLyogbG9nMTAoMikgaW4gcS4xNiAqLworCisvKgorRGVzY3JpcHRpb246CitUaGlzIHJvdXRpbmUgdGFrZXMgdGhlIGlucHV0IG51bWJlciBOIGFuZCBpdHMgcSBmb3JtYXQgcU4gYW5kIGNvbXB1dGUKK3RoZSBsb2cxMChOKS4gVGhpcyByb3V0aW5lIGZpcnN0IG5vcm1hbGl6ZXMgdGhlIGlucHV0IG5vIE4uCVRoZW4gTiBpcyBpbiBtYWcqKDJeeCkgZm9ybWF0LgorbWFnIGlzIGFueSBudW1iZXIgaW4gdGhlIHJhbmdlIDJeMzAtKDJeMzEgLSAxKS4gVGhlbiBsb2cyKG1hZyAqIDJeeCkgPSBsb2cyKG1hZykgKyB4IGlzIGNvbXB1dGVkLgorRnJvbSB0aGF0IGxvZzEwKG1hZyAqIDJeeCkgPSBsb2cyKG1hZyAqIDJeeCkgKiBsb2cxMCgyKSBpcyBjb21wdXRlZC4KK1RoaXMgcm91dGluZSBsb29rcyB0aGUgbG9nMiB2YWx1ZSBpbiB0aGUgdGFibGUgY29uc2lkZXJpbmcgTE9HMl9MT0dfVEFCTEVfU0laRSsxIE1TQnMuCitBcyB0aGUgTVNCIGlzIGFsd2F5cyAxLCBvbmx5IG5leHQgTE9HMl9PRl9MT0dfVEFCTEVfU0laRSBNU0JzIGFyZSB1c2VkIGZvciB0YWJsZSBsb29rdXAuCitOZXh0IDE2IE1TQnMgYXJlIHVzZWQgZm9yIGludGVycG9sYXRpb24uCitJbnB1dHM6CitOIC0gbnVtYmVyIHRvIHdoaWNoIGxvZzEwIGhhcyB0byBiZSBmb3VuZC4KK3FOIC0gcSBmb3JtYXQgb2YgTgorbG9nMTBOIC0gYWRkcmVzcyB3aGVyZSBsb2cxMChOKSB3aWxsIGJlIHdyaXR0ZW4uCitxTG9nMTBOIC0gYWRkcmVzcyB3aGVyZSBsb2cxME4gcWZvcm1hdCB3aWxsIGJlIHdyaXR0ZW4uCitOb3RlL1Byb2JsZW06CitGb3IgYWNjdXJhdGUgcmVzdWx0cyBpbnB1dCBzaG91bGQgYmUgaW4gbm9ybWFsaXplZCBvciBuZWFyIG5vcm1hbGl6ZWQgZm9ybS4KKyovCit2b2lkIHFtX2xvZzEwKHMzMiBOLCBzMTYgcU4sIHMxNiAqbG9nMTBOLCBzMTYgKnFMb2cxME4pCit7CisJczE2IHMxNm5vcm0sIHMxNnRhYmxlSW5kZXgsIHMxNmVycm9yQXBwcm94aW1hdGlvbjsKKwl1MTYgdTE2b2Zmc2V0OworCXMzMiBzMzJsb2c7CisKKwkvKiBub3JtYWxpemUgdGhlIE4uICovCisJczE2bm9ybSA9IHFtX25vcm0zMihOKTsKKwlOID0gTiA8PCBzMTZub3JtOworCisJLyogVGhlIHFmb3JtYXQgb2YgTiBhZnRlciBub3JtYWxpemF0aW9uLgorCSAqIC0zMCBpcyBhZGRlZCB0byB0cmVhdCB0aGUgbm8gYXMgYmV0d2VlbiAxLjAgdG8gMi4wCisJICogaS5lLiBhZnRlciBhZGRpbmcgdGhlIC0zMCB0byB0aGUgcWZvcm1hdCB0aGUgZGVjaW1hbCBwb2ludCB3aWxsIGJlCisJICoganVzdCByaWd0aHQgb2YgdGhlIE1TQi4gKGkuZS4gYWZ0ZXIgc2lnbiBiaXQgYW5kIDFzdCBNU0IpLiBpLmUuCisJICogYXQgdGhlIHJpZ2h0IHNpZGUgb2YgMzB0aCBiaXQuCisJICovCisJcU4gPSBxTiArIHMxNm5vcm0gLSAzMDsKKworCS8qIHRha2UgdGhlIHRhYmxlIGluZGV4IGFzIHRoZSBMT0cyX09GX0xPR19UQUJMRV9TSVpFIGJpdHMgcmlnaHQgb2YgdGhlIE1TQiAqLworCXMxNnRhYmxlSW5kZXggPSAoczE2KSAoTiA+PiAoMzIgLSAoMiArIExPRzJfTE9HX1RBQkxFX1NJWkUpKSk7CisKKwkvKiByZW1vdmUgdGhlIE1TQi4gdGhlIE1TQiBpcyBhbHdheXMgMSBhZnRlciBub3JtYWxpemF0aW9uLiAqLworCXMxNnRhYmxlSW5kZXggPQorCSAgICBzMTZ0YWJsZUluZGV4ICYgKHMxNikgKCgxIDw8IExPRzJfTE9HX1RBQkxFX1NJWkUpIC0gMSk7CisKKwkvKiByZW1vdmUgdGhlICgxK0xPRzJfT0ZfTE9HX1RBQkxFX1NJWkUpIE1TQnMgaW4gdGhlIE4uICovCisJTiA9IE4gJiAoKDEgPDwgKDMyIC0gKDIgKyBMT0cyX0xPR19UQUJMRV9TSVpFKSkpIC0gMSk7CisKKwkvKiB0YWtlIHRoZSBvZmZzZXQgYXMgdGhlIDE2IE1TQlMgYWZ0ZXIgdGFibGUgaW5kZXguCisJICovCisJdTE2b2Zmc2V0ID0gKHUxNikgKE4gPj4gKDMyIC0gKDIgKyBMT0cyX0xPR19UQUJMRV9TSVpFICsgMTYpKSk7CisKKwkvKiBsb29rIHRoZSBsb2cgdmFsdWUgaW4gdGhlIHRhYmxlLiAqLworCXMzMmxvZyA9IGxvZ190YWJsZVtzMTZ0YWJsZUluZGV4XTsJLyogcS4xNSBmb3JtYXQgKi8KKworCS8qIGludGVycG9sYXRlIHVzaW5nIHRoZSBvZmZzZXQuICovCisJczE2ZXJyb3JBcHByb3hpbWF0aW9uID0gKHMxNikgcW1fbXVsdTE2KHUxNm9mZnNldCwgKHUxNikgKGxvZ190YWJsZVtzMTZ0YWJsZUluZGV4ICsgMV0gLSBsb2dfdGFibGVbczE2dGFibGVJbmRleF0pKTsJLyogcS4xNSAqLworCisJczMybG9nID0gcW1fYWRkMTYoKHMxNikgczMybG9nLCBzMTZlcnJvckFwcHJveGltYXRpb24pOwkvKiBxLjE1IGZvcm1hdCAqLworCisJLyogYWRqdXN0IGZvciB0aGUgcWZvcm1hdCBvZiB0aGUgTiBhcworCSAqIGxvZzIobWFnICogMl54KSA9IGxvZzIobWFnKSArIHgKKwkgKi8KKwlzMzJsb2cgPSBxbV9hZGQzMihzMzJsb2csICgoczMyKSAtcU4pIDw8IDE1KTsJLyogcS4xNSBmb3JtYXQgKi8KKworCS8qIG5vcm1hbGl6ZSB0aGUgcmVzdWx0LiAqLworCXMxNm5vcm0gPSBxbV9ub3JtMzIoczMybG9nKTsKKworCS8qIGJyaW5nIGFsbCB0aGUgaW1wb3J0YW50IGJpdHMgaW50byBsb3dlciAxNiBiaXRzICovCisJczMybG9nID0gcW1fc2hsMzIoczMybG9nLCBzMTZub3JtIC0gMTYpOwkvKiBxLjE1K3MxNm5vcm0tMTYgZm9ybWF0ICovCisKKwkvKiBjb21wdXRlIHRoZSBsb2cxMChOKSBieSBtdWx0aXBseWluZyBsb2cyKE4pIHdpdGggbG9nMTAoMikuCisJICogYXMgbG9nMTAobWFnICogMl54KSA9IGxvZzIobWFnICogMl54KSAqIGxvZzEwKDIpCisJICogbG9nMTBOIGluIHEuMTUrczE2bm9ybS0xNisxIChMT0cxMF8yIGlzIGluIHEuMTYpCisJICovCisJKmxvZzEwTiA9IHFtX211bHMxNigoczE2KSBzMzJsb2csIChzMTYpIExPRzEwXzIpOworCisJLyogd3JpdGUgdGhlIHEgZm9ybWF0IG9mIHRoZSByZXN1bHQuICovCisJKnFMb2cxME4gPSAxNSArIHMxNm5vcm0gLSAxNiArIDE7CisKKwlyZXR1cm47Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2luY2x1ZGUvcW1hdGguaCBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3dsY19waHlfcW1hdGguaApzaW1pbGFyaXR5IGluZGV4IDYzJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2luY2x1ZGUvcW1hdGguaApyZW5hbWUgdG8gZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy9waHkvd2xjX3BoeV9xbWF0aC5oCmluZGV4IDVmNTI1ZGIuLjNkY2VlMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvaW5jbHVkZS9xbWF0aC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3dsY19waHlfcW1hdGguaApAQCAtMTcsMTQgKzE3LDYgQEAKICNpZm5kZWYgX19RTUFUSF9IX18KICNkZWZpbmUgX19RTUFUSF9IX18KIAotczE2IHFtX3NhdDMyKHMzMiBvcCk7Ci0KLXMzMiBxbV9tdWwzMjE2MTYoczE2IG9wMSwgczE2IG9wMik7Ci0KLXMxNiBxbV9tdWwxNihzMTYgb3AxLCBzMTYgb3AyKTsKLQotczMyIHFtX211bHMzMjE2MTYoczE2IG9wMSwgczE2IG9wMik7Ci0KIHUxNiBxbV9tdWx1MTYodTE2IG9wMSwgdTE2IG9wMik7CiAKIHMxNiBxbV9tdWxzMTYoczE2IG9wMSwgczE2IG9wMik7CkBAIC0zNSw0NCArMjcsMTQgQEAKIAogczE2IHFtX3N1YjE2KHMxNiBvcDEsIHMxNiBvcDIpOwogCi1zMzIgcW1fc3ViMzIoczMyIG9wMSwgczMyIG9wMik7Ci0KLXMzMiBxbV9tYWMzMjE2MTYoczMyIGFjYywgczE2IG9wMSwgczE2IG9wMik7Ci0KIHMzMiBxbV9zaGwzMihzMzIgb3AsIGludCBzaGlmdCk7CiAKLXMzMiBxbV9zaHIzMihzMzIgb3AsIGludCBzaGlmdCk7Ci0KIHMxNiBxbV9zaGwxNihzMTYgb3AsIGludCBzaGlmdCk7CiAKIHMxNiBxbV9zaHIxNihzMTYgb3AsIGludCBzaGlmdCk7CiAKLXMxNiBxbV9ub3JtMTYoczE2IG9wKTsKLQogczE2IHFtX25vcm0zMihzMzIgb3ApOwogCi1zMTYgcW1fZGl2X3MoczE2IG51bSwgczE2IGRlbm9tKTsKLQotczE2IHFtX2FiczE2KHMxNiBvcCk7Ci0KLXMxNiBxbV9kaXYxNihzMTYgbnVtLCBzMTYgZGVub20sIHMxNiAqcVF1b3RpZW50KTsKLQotczMyIHFtX2FiczMyKHMzMiBvcCk7Ci0KLXMxNiBxbV9kaXYxNjMyMzIoczMyIG51bSwgczMyIGRlbm9tLCBzMTYgKnFxdW90aWVudCk7Ci0KLXMzMiBxbV9tdWwzMjMyMTYoczMyIG9wMSwgczE2IG9wMik7Ci0KLXMzMiBxbV9tdWxzdTMyMTYxNihzMTYgb3AxLCB1MTYgb3AyKTsKLQotczMyIHFtX211bHMzMjMyMTYoczMyIG9wMSwgczE2IG9wMik7Ci0KLXMzMiBxbV9tdWwzMihzMzIgYSwgczMyIGIpOwotCi1zMzIgcW1fbXVsczMyKHMzMiBhLCBzMzIgYik7Ci0KIHZvaWQgcW1fbG9nMTAoczMyIE4sIHMxNiBxTiwgczE2ICpsb2cxME4sIHMxNiAqcUxvZzEwTik7CiAKLXZvaWQgcW1fMWJ5TihzMzIgTiwgczE2IHFOLCBzMzIgKnJlc3VsdCwgczE2ICpxUmVzdWx0KTsKLQogI2VuZGlmCQkJCS8qICNpZm5kZWYgX19RTUFUSF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xfZGJnLmggYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsX2RiZy5oCmluZGV4IDU0YWYyNTcuLjU1ODJkZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xfZGJnLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bF9kYmcuaApAQCAtMTcsMjUgKzE3LDE5IEBACiAjaWZuZGVmIF93bF9kYmdfaF8KICNkZWZpbmUgX3dsX2RiZ19oXwogCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CQkJLyogZGV2X2VycigpICovCisKIC8qIHdsX21zZ19sZXZlbCBpcyBhIGJpdCB2ZWN0b3Igd2l0aCBkZWZzIGluIHdsaW9jdGwuaCAqLwogZXh0ZXJuIHUzMiB3bF9tc2dfbGV2ZWw7CiAKLSNkZWZpbmUgV0xfTk9ORShmbXQsIGFyZ3MuLi4pIG5vX3ByaW50ayhmbXQsICMjYXJncykKLQotI2RlZmluZSBXTF9QUklOVChsZXZlbCwgZm10LCBhcmdzLi4uKQkJXAorI2RlZmluZSBCQ01NU0coZGV2LCBmbXQsIGFyZ3MuLi4pCQlcCiBkbyB7CQkJCQkJXAotCWlmICh3bF9tc2dfbGV2ZWwgJiBsZXZlbCkJCVwKLQkJcHJpbnRrKGZtdCwgIyNhcmdzKTsJCVwKKwlpZiAod2xfbXNnX2xldmVsICYgV0xfVFJBQ0VfVkFMKQlcCisJCXdpcGh5X2VycihkZXYsICIlczogIiBmbXQsIF9fZnVuY19fLCAjI2FyZ3MpOwlcCiB9IHdoaWxlICgwKQogCiAjaWZkZWYgQkNNREJHCiAKLSNkZWZpbmUJV0xfRVJST1IoZm10LCBhcmdzLi4uKQlXTF9QUklOVChXTF9FUlJPUl9WQUwsIGZtdCwgIyNhcmdzKQotI2RlZmluZQlXTF9UUkFDRShmbXQsIGFyZ3MuLi4pCVdMX1BSSU5UKFdMX1RSQUNFX1ZBTCwgZm10LCAjI2FyZ3MpCi0jZGVmaW5lIFdMX0FNUERVKGZtdCwgYXJncy4uLikJV0xfUFJJTlQoV0xfQU1QRFVfVkFMLCBmbXQsICMjYXJncykKLSNkZWZpbmUgV0xfRkZQTEQoZm10LCBhcmdzLi4uKQlXTF9QUklOVChXTF9GRlBMRF9WQUwsIGZtdCwgIyNhcmdzKQotCi0jZGVmaW5lIFdMX0VSUk9SX09OKCkJCSh3bF9tc2dfbGV2ZWwgJiBXTF9FUlJPUl9WQUwpCiAKIC8qIEV4dHJhIG1lc3NhZ2UgY29udHJvbCBmb3IgQU1QRFUgZGVidWdnaW5nICovCiAjZGVmaW5lICAgV0xfQU1QRFVfVVBETl9WQUwJMHgwMDAwMDAwMQkvKiBDb25maWcgdXAvZG93biByZWxhdGVkICAqLwpAQCAtNzgsMTIgKzcyLDYgQEAKIAogI2Vsc2UJCQkJLyogQkNNREJHICovCiAKLSNkZWZpbmUJV0xfRVJST1IoZm10LCBhcmdzLi4uKQkJbm9fcHJpbnRrKGZtdCwgIyNhcmdzKQotI2RlZmluZQlXTF9UUkFDRShmbXQsIGFyZ3MuLi4pCQlub19wcmludGsoZm10LCAjI2FyZ3MpCi0jZGVmaW5lIFdMX0FNUERVKGZtdCwgYXJncy4uLikJCW5vX3ByaW50ayhmbXQsICMjYXJncykKLSNkZWZpbmUgV0xfRkZQTEQoZm10LCBhcmdzLi4uKQkJbm9fcHJpbnRrKGZtdCwgIyNhcmdzKQotCi0jZGVmaW5lIFdMX0VSUk9SX09OKCkJCTAKIAogI2RlZmluZSBXTF9BTVBEVV9VUEROKGZtdCwgYXJncy4uLikJbm9fcHJpbnRrKGZtdCwgIyNhcmdzKQogI2RlZmluZSBXTF9BTVBEVV9SWChmbXQsIGFyZ3MuLi4pCW5vX3ByaW50ayhmbXQsICMjYXJncykKQEAgLTk5LDQgKzg3LDYgQEAKIAogI2VuZGlmCQkJCS8qIEJDTURCRyAqLwogCisjZGVmaW5lIFdMX0VSUk9SX09OKCkJCSh3bF9tc2dfbGV2ZWwgJiBXTF9FUlJPUl9WQUwpCisKICNlbmRpZgkJCQkvKiBfd2xfZGJnX2hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsX2V4cG9ydC5oIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bF9leHBvcnQuaAppbmRleCA5ZmY3NjBmLi4wZmUwYjI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsX2V4cG9ydC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xfZXhwb3J0LmgKQEAgLTQyLDUgKzQyLDYgQEAKIGV4dGVybiB2b2lkIHdsX2FkZF90aW1lcihzdHJ1Y3Qgd2xfaW5mbyAqd2wsIHN0cnVjdCB3bF90aW1lciAqdGltZXIsIHVpbnQgbXMsCiAJCQkgaW50IHBlcmlvZGljKTsKIGV4dGVybiBib29sIHdsX2RlbF90aW1lcihzdHJ1Y3Qgd2xfaW5mbyAqd2wsIHN0cnVjdCB3bF90aW1lciAqdGltZXIpOworZXh0ZXJuIHZvaWQgd2xfbXNsZWVwKHN0cnVjdCB3bF9pbmZvICp3bCwgdWludCBtcyk7CiAKICNlbmRpZgkJCQkvKiBfd2xfZXhwb3J0X2hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsX21hYzgwMjExLmMgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsX21hYzgwMjExLmMKaW5kZXggYzFiMDdhZS4uNmM2MjM2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bF9tYWM4MDIxMS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xfbWFjODAyMTEuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGJjbWRlZnMuaD4KICNpbmNsdWRlIDxiY213aWZpLmg+CiAjaW5jbHVkZSA8YmNtdXRpbHMuaD4KKyNpbmNsdWRlIDxiY21udnJhbS5oPgogI2luY2x1ZGUgPHBjaWNmZy5oPgogI2luY2x1ZGUgPHdsaW9jdGwuaD4KICNpbmNsdWRlIDxzYmhuZGRtYS5oPgpAQCAtNDgsNiArNDksOCBAQAogI2luY2x1ZGUgIndsX3Vjb2RlLmgiCiAjaW5jbHVkZSAid2xfbWFjODAyMTEuaCIKIAorI2RlZmluZSBOX1RYX1FVRVVFUwk0IC8qICN0eCBxdWV1ZXMgb24gbWFjODAyMTE8LT5kcml2ZXIgaW50ZXJmYWNlICovCisKIHN0YXRpYyB2b2lkIHdsX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiBzdGF0aWMgdm9pZCBfd2xfdGltZXIoc3RydWN0IHdsX3RpbWVyICp0KTsKIApAQCAtODEsNiArODQsNyBAQAogCQkJCSAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCk7CiBzdGF0aWMgdm9pZCB3bF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogc3RhdGljIHZvaWQgd2xfZnJlZShzdHJ1Y3Qgd2xfaW5mbyAqd2wpOworc3RhdGljIHZvaWQgd2xfc2V0X2Jhc2ljX3JhdGUoc3RydWN0IHdsX3JhdGVzZXQgKnJzLCB1MTYgcmF0ZSwgYm9vbCBpc19icik7CiAKIE1PRFVMRV9BVVRIT1IoIkJyb2FkY29tIENvcnBvcmF0aW9uIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkJyb2FkY29tIDgwMi4xMW4gd2lyZWxlc3MgTEFOIGRyaXZlci4iKTsKQEAgLTEyOSw3ICsxMzMsNiBAQAogc3RhdGljIHZvaWQgd2xfb3BzX3NldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU2NCB0c2YpOwogc3RhdGljIGludCB3bF9vcHNfZ2V0X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cyk7Ci1zdGF0aWMgaW50IHdsX29wc19zZXRfcnRzX3RocmVzaG9sZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIHZhbHVlKTsKIHN0YXRpYyB2b2lkIHdsX29wc19zdGFfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJCSAgICAgIGVudW0gc3RhX25vdGlmeV9jbWQgY21kLApAQCAtMTQ3LDYgKzE1MCw3IEBACiAJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCwgdTE2ICpzc24sCiAJCQkgICAgICAgdTggYnVmX3NpemUpOwogc3RhdGljIHZvaWQgd2xfb3BzX3Jma2lsbF9wb2xsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3N0YXRpYyB2b2lkIHdsX29wc19mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBkcm9wKTsKIAogc3RhdGljIHZvaWQgd2xfb3BzX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtMTU0LDcgKzE1OCw3IEBACiAKIAlXTF9MT0NLKHdsKTsKIAlpZiAoIXdsLT5wdWItPnVwKSB7Ci0JCVdMX0VSUk9SKCJvcHMtPnR4IGNhbGxlZCB3aGlsZSBkb3duXG4iKTsKKwkJd2lwaHlfZXJyKHdsLT53aXBoeSwgIm9wcy0+dHggY2FsbGVkIHdoaWxlIGRvd25cbiIpOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBkb25lOwogCX0KQEAgLTE2OSw3ICsxNzMsNiBAQAogCWJvb2wgYmxvY2tlZDsKIAkvKgogCSAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjdXJjaGFuID0gaHctPmNvbmYuY2hhbm5lbDsKLQkgIFdMX05PTkUoIiVzIDogSW5pdGlhbCBjaGFubmVsOiAlZFxuIiwgX19mdW5jX18sIGN1cmNoYW4tPmh3X3ZhbHVlKTsKIAkqLwogCiAJaWVlZTgwMjExX3dha2VfcXVldWVzKGh3KTsKQEAgLTE4NCwxMCArMTg3LDYgQEAKIAogc3RhdGljIHZvaWQgd2xfb3BzX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7Ci0jaWZkZWYgQlJDTURCRwotCXN0cnVjdCB3bF9pbmZvICp3bCA9IGh3LT5wcml2OwotCUFTU0VSVCh3bCk7Ci0jZW5kaWYgLypCUkNNREJHKi8KIAlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoaHcpOwogfQogCkBAIC0yMDMsOCArMjAyLDggQEAKIAkgICAgdmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKIAkgICAgdmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX1dEUyAmJgogCSAgICB2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKLQkJV0xfRVJST1IoIiVzOiBBdHRlbXB0IHRvIGFkZCB0eXBlICVkLCBvbmx5IFNUQSBmb3Igbm93XG4iLAotCQkJIF9fZnVuY19fLCB2aWYtPnR5cGUpOworCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiJXM6IEF0dGVtcHQgdG8gYWRkIHR5cGUgJWQsIG9ubHkiCisJCQkgICIgU1RBIGZvciBub3dcbiIsIF9fZnVuY19fLCB2aWYtPnR5cGUpOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCkBAIC0yMTQsNyArMjEzLDggQEAKIAlXTF9VTkxPQ0sod2wpOwogCiAJaWYgKGVyciAhPSAwKSB7Ci0JCVdMX0VSUk9SKCIlczogd2xfdXAoKSByZXR1cm5lZCAlZFxuIiwgX19mdW5jX18sIGVycik7CisJCXdpcGh5X2Vycihody0+d2lwaHksICIlczogd2xfdXAoKSByZXR1cm5lZCAlZFxuIiwgX19mdW5jX18sCisJCQkgIGVycik7CiAJfQogCXJldHVybiBlcnI7CiB9CkBAIC0yNDksNyArMjQ5LDggQEAKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0NIQU5fSFQ0ME1JTlVTOgogCWNhc2UgTkw4MDIxMV9DSEFOX0hUNDBQTFVTOgotCQlXTF9FUlJPUigiJXM6IE5lZWQgdG8gaW1wbGVtZW50IDQwIE1oeiBDaGFubmVscyFcbiIsIF9fZnVuY19fKTsKKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwKKwkJCSAgIiVzOiBOZWVkIHRvIGltcGxlbWVudCA0MCBNaHogQ2hhbm5lbHMhXG4iLCBfX2Z1bmNfXyk7CiAJCWVyciA9IDE7CiAJCWJyZWFrOwogCX0KQEAgLTI2NSwzOSArMjY2LDQxIEBACiAJc3RydWN0IHdsX2luZm8gKndsID0gSFdfVE9fV0woaHcpOwogCWludCBlcnIgPSAwOwogCWludCBuZXdfaW50OworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBody0+d2lwaHk7CiAKIAlXTF9MT0NLKHdsKTsKIAlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9MSVNURU5fSU5URVJWQUwpIHsKIAkJaWYgKHdsY19pb3Zhcl9zZXRpbnQKIAkJICAgICh3bC0+d2xjLCAiYmNuX2xpX2JjbiIsIGNvbmYtPmxpc3Rlbl9pbnRlcnZhbCkpIHsKLQkJCVdMX0VSUk9SKCIlczogRXJyb3Igc2V0dGluZyBsaXN0ZW5faW50ZXJ2YWxcbiIsCi0JCQkJIF9fZnVuY19fKTsKKwkJCXdpcGh5X2Vycih3aXBoeSwgIiVzOiBFcnJvciBzZXR0aW5nIGxpc3Rlbl9pbnRlcnZhbFxuIiwKKwkJCQkgIF9fZnVuY19fKTsKIAkJCWVyciA9IC1FSU87CiAJCQlnb3RvIGNvbmZpZ19vdXQ7CiAJCX0KIAkJd2xjX2lvdmFyX2dldGludCh3bC0+d2xjLCAiYmNuX2xpX2JjbiIsICZuZXdfaW50KTsKLQkJQVNTRVJUKG5ld19pbnQgPT0gY29uZi0+bGlzdGVuX2ludGVydmFsKTsKIAl9CiAJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfTU9OSVRPUikKLQkJV0xfRVJST1IoIiVzOiBjaGFuZ2UgbW9uaXRvciBtb2RlOiAlcyAoaW1wbGVtZW50KVxuIiwgX19mdW5jX18sCi0JCQkgY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9NT05JVE9SID8KLQkJCQkidHJ1ZSIgOiAiZmFsc2UiKTsKKwkJd2lwaHlfZXJyKHdpcGh5LCAiJXM6IGNoYW5nZSBtb25pdG9yIG1vZGU6ICVzIChpbXBsZW1lbnQpXG4iLAorCQkJICBfX2Z1bmNfXywgY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9NT05JVE9SID8KKwkJCSAgInRydWUiIDogImZhbHNlIik7CiAJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpCi0JCVdMX0VSUk9SKCIlczogY2hhbmdlIHBvd2VyLXNhdmUgbW9kZTogJXMgKGltcGxlbWVudClcbiIsCi0JCQkgX19mdW5jX18sIGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMgPwotCQkJCSJ0cnVlIiA6ICJmYWxzZSIpOworCQl3aXBoeV9lcnIod2lwaHksICIlczogY2hhbmdlIHBvd2VyLXNhdmUgbW9kZTogJXMgKGltcGxlbWVudClcbiIsCisJCQkgIF9fZnVuY19fLCBjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTID8KKwkJCSAgInRydWUiIDogImZhbHNlIik7CiAKIAlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QT1dFUikgewogCQlpZiAod2xjX2lvdmFyX3NldGludAogCQkgICAgKHdsLT53bGMsICJxdHhwb3dlciIsIGNvbmYtPnBvd2VyX2xldmVsICogNCkpIHsKLQkJCVdMX0VSUk9SKCIlczogRXJyb3Igc2V0dGluZyBwb3dlcl9sZXZlbFxuIiwgX19mdW5jX18pOworCQkJd2lwaHlfZXJyKHdpcGh5LCAiJXM6IEVycm9yIHNldHRpbmcgcG93ZXJfbGV2ZWxcbiIsCisJCQkJICBfX2Z1bmNfXyk7CiAJCQllcnIgPSAtRUlPOwogCQkJZ290byBjb25maWdfb3V0OwogCQl9CiAJCXdsY19pb3Zhcl9nZXRpbnQod2wtPndsYywgInF0eHBvd2VyIiwgJm5ld19pbnQpOwogCQlpZiAobmV3X2ludCAhPSAoY29uZi0+cG93ZXJfbGV2ZWwgKiA0KSkKLQkJCVdMX0VSUk9SKCIlczogUG93ZXIgbGV2ZWwgcmVxICE9IGFjdHVhbCwgJWQgJWRcbiIsCi0JCQkJIF9fZnVuY19fLCBjb25mLT5wb3dlcl9sZXZlbCAqIDQsIG5ld19pbnQpOworCQkJd2lwaHlfZXJyKHdpcGh5LCAiJXM6IFBvd2VyIGxldmVsIHJlcSAhPSBhY3R1YWwsICVkICVkIgorCQkJCSAgIlxuIiwgX19mdW5jX18sIGNvbmYtPnBvd2VyX2xldmVsICogNCwKKwkJCQkgIG5ld19pbnQpOwogCX0KIAlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMKSB7CiAJCWVyciA9IGllZWVfc2V0X2NoYW5uZWwoaHcsIGNvbmYtPmNoYW5uZWwsIGNvbmYtPmNoYW5uZWxfdHlwZSk7CkBAIC0zMDYsMTMgKzMwOSwxMyBAQAogCQlpZiAod2xjX3NldAogCQkgICAgKHdsLT53bGMsIFdMQ19TRVRfU1JMLAogCQkgICAgIGNvbmYtPnNob3J0X2ZyYW1lX21heF90eF9jb3VudCkgPCAwKSB7Ci0JCQlXTF9FUlJPUigiJXM6IEVycm9yIHNldHRpbmcgc3JsXG4iLCBfX2Z1bmNfXyk7CisJCQl3aXBoeV9lcnIod2lwaHksICIlczogRXJyb3Igc2V0dGluZyBzcmxcbiIsIF9fZnVuY19fKTsKIAkJCWVyciA9IC1FSU87CiAJCQlnb3RvIGNvbmZpZ19vdXQ7CiAJCX0KIAkJaWYgKHdsY19zZXQod2wtPndsYywgV0xDX1NFVF9MUkwsIGNvbmYtPmxvbmdfZnJhbWVfbWF4X3R4X2NvdW50KQogCQkgICAgPCAwKSB7Ci0JCQlXTF9FUlJPUigiJXM6IEVycm9yIHNldHRpbmcgbHJsXG4iLCBfX2Z1bmNfXyk7CisJCQl3aXBoeV9lcnIod2lwaHksICIlczogRXJyb3Igc2V0dGluZyBscmxcbiIsIF9fZnVuY19fKTsKIAkJCWVyciA9IC1FSU87CiAJCQlnb3RvIGNvbmZpZ19vdXQ7CiAJCX0KQEAgLTMyOSwyNSArMzMyLDE4IEBACiAJCQlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvLCB1MzIgY2hhbmdlZCkKIHsKIAlzdHJ1Y3Qgd2xfaW5mbyAqd2wgPSBIV19UT19XTChodyk7CisJc3RydWN0IHdpcGh5ICp3aXBoeSA9IGh3LT53aXBoeTsKIAlpbnQgdmFsOwogCiAJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9BU1NPQykgewogCQkvKiBhc3NvY2lhdGlvbiBzdGF0dXMgY2hhbmdlZCAoYXNzb2NpYXRlZC9kaXNhc3NvY2lhdGVkKQogCQkgKiBhbHNvIGltcGxpZXMgYSBjaGFuZ2UgaW4gdGhlIEFJRC4KIAkJICovCi0JCVdMX0VSUk9SKCIlczogJXM6ICVzYXNzb2NpYXRlZFxuIiwgS0JVSUxEX01PRE5BTUUsIF9fZnVuY19fLAotCQkJIGluZm8tPmFzc29jID8gIiIgOiAiZGlzIik7CisJCXdpcGh5X2Vycih3aXBoeSwgIiVzOiAlczogJXNhc3NvY2lhdGVkXG4iLCBLQlVJTERfTU9ETkFNRSwKKwkJCSAgX19mdW5jX18sIGluZm8tPmFzc29jID8gIiIgOiAiZGlzIik7CisJCVdMX0xPQ0sod2wpOwogCQl3bGNfYXNzb2NpYXRlX3VwZCh3bC0+d2xjLCBpbmZvLT5hc3NvYyk7Ci0JfQotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfRVJQX0NUU19QUk9UKSB7Ci0JCS8qIENUUyBwcm90ZWN0aW9uIGNoYW5nZWQgKi8KLQkJV0xfRVJST1IoIiVzOiB1c2VfY3RzX3Byb3Q6ICVzIChpbXBsZW1lbnQpXG4iLCBfX2Z1bmNfXywKLQkJCWluZm8tPnVzZV9jdHNfcHJvdCA/ICJ0cnVlIiA6ICJmYWxzZSIpOwotCX0KLQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0VSUF9QUkVBTUJMRSkgewotCQkvKiBwcmVhbWJsZSBjaGFuZ2VkICovCi0JCVdMX0VSUk9SKCIlczogc2hvcnQgcHJlYW1ibGU6ICVzIChpbXBsZW1lbnQpXG4iLCBfX2Z1bmNfXywKLQkJCWluZm8tPnVzZV9zaG9ydF9wcmVhbWJsZSA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCQlXTF9VTkxPQ0sod2wpOwogCX0KIAlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0VSUF9TTE9UKSB7CiAJCS8qIHNsb3QgdGltaW5nIGNoYW5nZWQgKi8KQEAgLTM2MywyOSArMzU5LDU3IEBACiAJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9IVCkgewogCQkvKiA4MDIuMTFuIHBhcmFtZXRlcnMgY2hhbmdlZCAqLwogCQl1MTYgbW9kZSA9IGluZm8tPmh0X29wZXJhdGlvbl9tb2RlOwotCQlXTF9OT05FKCIlczogSFQgbW9kZTogMHglMDRYXG4iLCBfX2Z1bmNfXywgbW9kZSk7CisKKwkJV0xfTE9DSyh3bCk7CiAJCXdsY19wcm90ZWN0aW9uX3VwZCh3bC0+d2xjLCBXTENfUFJPVF9OX0NGRywKIAkJCW1vZGUgJiBJRUVFODAyMTFfSFRfT1BfTU9ERV9QUk9URUNUSU9OKTsKIAkJd2xjX3Byb3RlY3Rpb25fdXBkKHdsLT53bGMsIFdMQ19QUk9UX05fTk9OR0YsCiAJCQltb2RlICYgSUVFRTgwMjExX0hUX09QX01PREVfTk9OX0dGX1NUQV9QUlNOVCk7CiAJCXdsY19wcm90ZWN0aW9uX3VwZCh3bC0+d2xjLCBXTENfUFJPVF9OX09CU1MsCiAJCQltb2RlICYgSUVFRTgwMjExX0hUX09QX01PREVfTk9OX0hUX1NUQV9QUlNOVCk7CisJCVdMX1VOTE9DSyh3bCk7CiAJfQogCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkFTSUNfUkFURVMpIHsKLQkJLyogQmFzaWMgcmF0ZXNldCBjaGFuZ2VkICovCi0JCVdMX0VSUk9SKCIlczogTmVlZCB0byBjaGFuZ2UgQmFzaWMgUmF0ZXM6IDB4JXggKGltcGxlbWVudClcbiIsCi0JCQkgX19mdW5jX18sICh1MzIpIGluZm8tPmJhc2ljX3JhdGVzKTsKKwkJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqYmk7CisJCXUzMiBicl9tYXNrLCBpOworCQl1MTYgcmF0ZTsKKwkJc3RydWN0IHdsX3JhdGVzZXQgcnM7CisJCWludCBlcnJvcjsKKworCQkvKiByZXRyaWV2ZSB0aGUgY3VycmVudCByYXRlcyAqLworCQlXTF9MT0NLKHdsKTsKKwkJZXJyb3IgPSB3bGNfaW9jdGwod2wtPndsYywgV0xDX0dFVF9DVVJSX1JBVEVTRVQsCisJCQkJICAmcnMsIHNpemVvZihycyksIE5VTEwpOworCQlXTF9VTkxPQ0sod2wpOworCQlpZiAoZXJyb3IpIHsKKwkJCXdpcGh5X2Vycih3aXBoeSwgIiVzOiByZXRyaWV2ZSByYXRlc2V0IGZhaWxlZDogJWRcbiIsCisJCQkJICBfX2Z1bmNfXywgZXJyb3IpOworCQkJcmV0dXJuOworCQl9CisJCWJyX21hc2sgPSBpbmZvLT5iYXNpY19yYXRlczsKKwkJYmkgPSBody0+d2lwaHktPmJhbmRzW3dsY19nZXRfY3VyYmFuZCh3bC0+d2xjKV07CisJCWZvciAoaSA9IDA7IGkgPCBiaS0+bl9iaXRyYXRlczsgaSsrKSB7CisJCQkvKiBjb252ZXJ0IHRvIGludGVybmFsIHJhdGUgdmFsdWUgKi8KKwkJCXJhdGUgPSAoYmktPmJpdHJhdGVzW2ldLmJpdHJhdGUgPDwgMSkgLyAxMDsKKworCQkJLyogc2V0L2NsZWFyIGJhc2ljIHJhdGUgZmxhZyAqLworCQkJd2xfc2V0X2Jhc2ljX3JhdGUoJnJzLCByYXRlLCBicl9tYXNrICYgMSk7CisJCQlicl9tYXNrID4+PSAxOworCQl9CisKKwkJLyogdXBkYXRlIHRoZSByYXRlIHNldCAqLworCQlXTF9MT0NLKHdsKTsKKwkJd2xjX2lvY3RsKHdsLT53bGMsIFdMQ19TRVRfUkFURVNFVCwgJnJzLCBzaXplb2YocnMpLCBOVUxMKTsKKwkJV0xfVU5MT0NLKHdsKTsKIAl9CiAJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT05fSU5UKSB7CiAJCS8qIEJlYWNvbiBpbnRlcnZhbCBjaGFuZ2VkICovCi0JCVdMX05PTkUoIiVzOiBCZWFjb24gSW50ZXJ2YWw6ICVkXG4iLAotCQkJX19mdW5jX18sIGluZm8tPmJlYWNvbl9pbnQpOworCQlXTF9MT0NLKHdsKTsKIAkJd2xjX3NldCh3bC0+d2xjLCBXTENfU0VUX0JDTlBSRCwgaW5mby0+YmVhY29uX2ludCk7CisJCVdMX1VOTE9DSyh3bCk7CiAJfQogCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQlNTSUQpIHsKIAkJLyogQlNTSUQgY2hhbmdlZCwgZm9yIHdoYXRldmVyIHJlYXNvbiAoSUJTUyBhbmQgbWFuYWdlZCBtb2RlKSAqLwotCQlXTF9OT05FKCIlczogbmV3IEJTU0lEOiBhaWQgJWQgIGJzczolcE1cbiIsIF9fZnVuY19fLAotCQkJaW5mby0+YWlkLCBpbmZvLT5ic3NpZCk7CiAJCVdMX0xPQ0sod2wpOwogCQl3bGNfc2V0X2FkZHJtYXRjaCh3bC0+d2xjLCBSQ01fQlNTSURfT0ZGU0VULAogCQkJCSAgaW5mby0+YnNzaWQpOwpAQCAtMzkzLDQxICs0MTcsNDIgQEAKIAl9CiAJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT04pIHsKIAkJLyogQmVhY29uIGRhdGEgY2hhbmdlZCwgcmV0cmlldmUgbmV3IGJlYWNvbiAoYmVhY29uaW5nIG1vZGVzKSAqLwotCQlXTF9FUlJPUigiJXM6IGJlYWNvbiBjaGFuZ2VkXG4iLCBfX2Z1bmNfXyk7CisJCXdpcGh5X2Vycih3aXBoeSwgIiVzOiBiZWFjb24gY2hhbmdlZFxuIiwgX19mdW5jX18pOwogCX0KIAlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKSB7CiAJCS8qIEJlYWNvbmluZyBzaG91bGQgYmUgZW5hYmxlZC9kaXNhYmxlZCAoYmVhY29uaW5nIG1vZGVzKSAqLwotCQlXTF9FUlJPUigiJXM6IEJlYWNvbiBlbmFibGVkOiAlc1xuIiwgX19mdW5jX18sCi0JCQkgaW5mby0+ZW5hYmxlX2JlYWNvbiA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCQl3aXBoeV9lcnIod2lwaHksICIlczogQmVhY29uIGVuYWJsZWQ6ICVzXG4iLCBfX2Z1bmNfXywKKwkJCSAgaW5mby0+ZW5hYmxlX2JlYWNvbiA/ICJ0cnVlIiA6ICJmYWxzZSIpOwogCX0KIAlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0NRTSkgewogCQkvKiBDb25uZWN0aW9uIHF1YWxpdHkgbW9uaXRvciBjb25maWcgY2hhbmdlZCAqLwotCQlXTF9FUlJPUigiJXM6IGNxbSBjaGFuZ2U6IHRocmVzaG9sZCAlZCwgaHlzICVkIChpbXBsZW1lbnQpXG4iLAotCQkJX19mdW5jX18sIGluZm8tPmNxbV9yc3NpX3Rob2xkLCBpbmZvLT5jcW1fcnNzaV9oeXN0KTsKKwkJd2lwaHlfZXJyKHdpcGh5LCAiJXM6IGNxbSBjaGFuZ2U6IHRocmVzaG9sZCAlZCwgaHlzICVkICIKKwkJCSAgIiAoaW1wbGVtZW50KVxuIiwgX19mdW5jX18sIGluZm8tPmNxbV9yc3NpX3Rob2xkLAorCQkJICBpbmZvLT5jcW1fcnNzaV9oeXN0KTsKIAl9CiAJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9JQlNTKSB7CiAJCS8qIElCU1Mgam9pbiBzdGF0dXMgY2hhbmdlZCAqLwotCQlXTF9FUlJPUigiJXM6IElCU1Mgam9pbmVkOiAlcyAoaW1wbGVtZW50KVxuIiwgX19mdW5jX18sCi0JCQlpbmZvLT5pYnNzX2pvaW5lZCA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCQl3aXBoeV9lcnIod2lwaHksICIlczogSUJTUyBqb2luZWQ6ICVzIChpbXBsZW1lbnQpXG4iLCBfX2Z1bmNfXywKKwkJCSAgaW5mby0+aWJzc19qb2luZWQgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKIAl9CiAJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9BUlBfRklMVEVSKSB7CiAJCS8qIEhhcmR3YXJlIEFSUCBmaWx0ZXIgYWRkcmVzcyBsaXN0IG9yIHN0YXRlIGNoYW5nZWQgKi8KLQkJV0xfRVJST1IoIiVzOiBhcnAgZmlsdGVyaW5nOiBlbmFibGVkICVzLCBjb3VudCAlZCAoaW1wbGVtZW50KVxuIiwKLQkJCV9fZnVuY19fLCBpbmZvLT5hcnBfZmlsdGVyX2VuYWJsZWQgPyAidHJ1ZSIgOiAiZmFsc2UiLAotCQkJaW5mby0+YXJwX2FkZHJfY250KTsKKwkJd2lwaHlfZXJyKHdpcGh5LCAiJXM6IGFycCBmaWx0ZXJpbmc6IGVuYWJsZWQgJXMsIGNvdW50ICVkIgorCQkJICAiIChpbXBsZW1lbnQpXG4iLCBfX2Z1bmNfXywgaW5mby0+YXJwX2ZpbHRlcl9lbmFibGVkID8KKwkJCSAgInRydWUiIDogImZhbHNlIiwgaW5mby0+YXJwX2FkZHJfY250KTsKIAl9CiAJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9RT1MpIHsKIAkJLyoKIAkJICogUW9TIGZvciB0aGlzIGFzc29jaWF0aW9uIHdhcyBlbmFibGVkL2Rpc2FibGVkLgogCQkgKiBOb3RlIHRoYXQgaXQgaXMgb25seSBldmVyIGRpc2FibGVkIGZvciBzdGF0aW9uIG1vZGUuCiAJCSAqLwotCQlXTF9FUlJPUigiJXM6IHFvcyBlbmFibGVkOiAlcyAoaW1wbGVtZW50KVxuIiwgX19mdW5jX18sCi0JCQlpbmZvLT5xb3MgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKwkJd2lwaHlfZXJyKHdpcGh5LCAiJXM6IHFvcyBlbmFibGVkOiAlcyAoaW1wbGVtZW50KVxuIiwgX19mdW5jX18sCisJCQkgIGluZm8tPnFvcyA/ICJ0cnVlIiA6ICJmYWxzZSIpOwogCX0KIAlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0lETEUpIHsKIAkJLyogSWRsZSBjaGFuZ2VkIGZvciB0aGlzIEJTUy9pbnRlcmZhY2UgKi8KLQkJV0xfRVJST1IoIiVzOiBCU1MgaWRsZTogJXMgKGltcGxlbWVudClcbiIsIF9fZnVuY19fLAotCQkJaW5mby0+aWRsZSA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCQl3aXBoeV9lcnIod2lwaHksICIlczogQlNTIGlkbGU6ICVzIChpbXBsZW1lbnQpXG4iLCBfX2Z1bmNfXywKKwkJCSAgaW5mby0+aWRsZSA/ICJ0cnVlIiA6ICJmYWxzZSIpOwogCX0KIAlyZXR1cm47CiB9CkBAIC00MzgsMjMgKzQ2MywyMyBAQAogCQkJdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywgdTY0IG11bHRpY2FzdCkKIHsKIAlzdHJ1Y3Qgd2xfaW5mbyAqd2wgPSBody0+cHJpdjsKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gaHctPndpcGh5OwogCiAJY2hhbmdlZF9mbGFncyAmPSBNQUNfRklMVEVSUzsKIAkqdG90YWxfZmxhZ3MgJj0gTUFDX0ZJTFRFUlM7CiAJaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpCi0JCVdMX0VSUk9SKCJGSUZfUFJPTUlTQ19JTl9CU1NcbiIpOworCQl3aXBoeV9lcnIod2lwaHksICJGSUZfUFJPTUlTQ19JTl9CU1NcbiIpOwogCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0FMTE1VTFRJKQotCQlXTF9FUlJPUigiRklGX0FMTE1VTFRJXG4iKTsKKwkJd2lwaHlfZXJyKHdpcGh5LCAiRklGX0FMTE1VTFRJXG4iKTsKIAlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9GQ1NGQUlMKQotCQlXTF9FUlJPUigiRklGX0ZDU0ZBSUxcbiIpOworCQl3aXBoeV9lcnIod2lwaHksICJGSUZfRkNTRkFJTFxuIik7CiAJaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfUExDUEZBSUwpCi0JCVdMX0VSUk9SKCJGSUZfUExDUEZBSUxcbiIpOworCQl3aXBoeV9lcnIod2lwaHksICJGSUZfUExDUEZBSUxcbiIpOwogCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0NPTlRST0wpCi0JCVdMX0VSUk9SKCJGSUZfQ09OVFJPTFxuIik7CisJCXdpcGh5X2Vycih3aXBoeSwgIkZJRl9DT05UUk9MXG4iKTsKIAlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9PVEhFUl9CU1MpCi0JCVdMX0VSUk9SKCJGSUZfT1RIRVJfQlNTXG4iKTsKKwkJd2lwaHlfZXJyKHdpcGh5LCAiRklGX09USEVSX0JTU1xuIik7CiAJaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykgewotCQlXTF9OT05FKCJGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQ1xuIik7CiAJCVdMX0xPQ0sod2wpOwogCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpIHsKIAkJCXdsLT5wdWItPm1hYzgwMjExX3N0YXRlIHw9IE1BQzgwMjExX1BST01JU0NfQkNOUzsKQEAgLTQ3MSwxNCArNDk2LDEyIEBACiBzdGF0aWMgaW50CiB3bF9vcHNfc2V0X3RpbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgYm9vbCBzZXQpCiB7Ci0JV0xfTk9ORSgiJXM6IEVudGVyXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHdsX29wc19zd19zY2FuX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCB3bF9pbmZvICp3bCA9IGh3LT5wcml2OwotCVdMX05PTkUoIlNjYW4gU3RhcnRcbiIpOwogCVdMX0xPQ0sod2wpOwogCXdsY19zY2FuX3N0YXJ0KHdsLT53bGMpOwogCVdMX1VOTE9DSyh3bCk7CkBAIC00ODgsNyArNTExLDYgQEAKIHN0YXRpYyB2b2lkIHdsX29wc19zd19zY2FuX2NvbXBsZXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCB3bF9pbmZvICp3bCA9IGh3LT5wcml2OwotCVdMX05PTkUoIlNjYW4gQ29tcGxldGVcbiIpOwogCVdMX0xPQ0sod2wpOwogCXdsY19zY2FuX3N0b3Aod2wtPndsYyk7CiAJV0xfVU5MT0NLKHdsKTsKQEAgLTQ5Nyw3ICs1MTksNyBAQAogCiBzdGF0aWMgdm9pZCB3bF9vcHNfc2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTY0IHRzZikKIHsKLQlXTF9FUlJPUigiJXM6IEVudGVyXG4iLCBfX2Z1bmNfXyk7CisJd2lwaHlfZXJyKGh3LT53aXBoeSwgIiVzOiBFbnRlclxuIiwgX19mdW5jX18pOwogCXJldHVybjsKIH0KIApAQCAtNTEwLDIwICs1MzIsMTAgQEAKIAogCVdMX0xPQ0sod2wpOwogCWNudCA9IHdsLT5wdWItPl9jbnQ7Ci0Jc3RhdHMtPmRvdDExQUNLRmFpbHVyZUNvdW50ID0gY250LT50eG5vYWNrOwotCXN0YXRzLT5kb3QxMVJUU0ZhaWx1cmVDb3VudCA9IGNudC0+dHhub2N0czsKLQlzdGF0cy0+ZG90MTFGQ1NFcnJvckNvdW50ID0gY250LT5yeGNyYzsKLQlzdGF0cy0+ZG90MTFSVFNTdWNjZXNzQ291bnQgPSBjbnQtPnR4cnRzOwotCVdMX1VOTE9DSyh3bCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgd2xfb3BzX3NldF9ydHNfdGhyZXNob2xkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgdmFsdWUpCi17Ci0Jc3RydWN0IHdsX2luZm8gKndsID0gaHctPnByaXY7Ci0KLQlXTF9MT0NLKHdsKTsKLQl3bGNfaW92YXJfc2V0aW50KHdsLT53bGMsICJydHN0aHJlc2giLCB2YWx1ZSAmIDB4RkZGRik7CisJc3RhdHMtPmRvdDExQUNLRmFpbHVyZUNvdW50ID0gMDsKKwlzdGF0cy0+ZG90MTFSVFNGYWlsdXJlQ291bnQgPSAwOworCXN0YXRzLT5kb3QxMUZDU0Vycm9yQ291bnQgPSAwOworCXN0YXRzLT5kb3QxMVJUU1N1Y2Nlc3NDb3VudCA9IDA7CiAJV0xfVU5MT0NLKHdsKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTUzMiwxMCArNTQ0LDEwIEBACiB3bF9vcHNfc3RhX25vdGlmeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJICBlbnVtIHN0YV9ub3RpZnlfY21kIGNtZCwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKIHsKLQlXTF9OT05FKCIlczogRW50ZXJcbiIsIF9fZnVuY19fKTsKIAlzd2l0Y2ggKGNtZCkgewogCWRlZmF1bHQ6Ci0JCVdMX0VSUk9SKCIlczogVW5rbm93biBjbWQgPSAlZFxuIiwgX19mdW5jX18sIGNtZCk7CisJCXdpcGh5X2Vycihody0+d2lwaHksICIlczogVW5rbm93biBjbWQgPSAlZFxuIiwgX19mdW5jX18sCisJCQkgIGNtZCk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm47CkBAIC01NDcsMTIgKzU1OSw4IEBACiB7CiAJc3RydWN0IHdsX2luZm8gKndsID0gaHctPnByaXY7CiAKLQlXTF9OT05FKCIlczogRW50ZXIgKFdNRSBjb25maWcpXG4iLCBfX2Z1bmNfXyk7Ci0JV0xfTk9ORSgicXVldWUgJWQsIHR4b3AgJWQsIGN3bWluICVkLCBjd21heCAlZCwgYWlmcyAlZFxuIiwgcXVldWUsCi0JCSBwYXJhbXMtPnR4b3AsIHBhcmFtcy0+Y3dfbWluLCBwYXJhbXMtPmN3X21heCwgcGFyYW1zLT5haWZzKTsKLQogCVdMX0xPQ0sod2wpOwotCXdsY193bWVfc2V0cGFyYW1zKHdsLT53bGMsIHF1ZXVlLCAodm9pZCAqKXBhcmFtcywgdHJ1ZSk7CisJd2xjX3dtZV9zZXRwYXJhbXMod2wtPndsYywgcXVldWUsIHBhcmFtcywgdHJ1ZSk7CiAJV0xfVU5MT0NLKHdsKTsKIAogCXJldHVybiAwOwpAQCAtNTYwLDcgKzU2OCw3IEBACiAKIHN0YXRpYyB1NjQgd2xfb3BzX2dldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7Ci0JV0xfRVJST1IoIiVzOiBFbnRlclxuIiwgX19mdW5jX18pOworCXdpcGh5X2Vycihody0+d2lwaHksICIlczogRW50ZXJcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTg1LDcgKzU5Myw3IEBACiAJd2wtPnB1Yi0+Z2xvYmFsX2FtcGR1ID0gJihzY2ItPnNjYl9hbXBkdSk7CiAJd2wtPnB1Yi0+Z2xvYmFsX2FtcGR1LT5zY2IgPSBzY2I7CiAJd2wtPnB1Yi0+Z2xvYmFsX2FtcGR1LT5tYXhfcGR1ID0gMTY7Ci0JcGt0cV9pbml0KCZzY2ItPnNjYl9hbXBkdS50eHEsIEFNUERVX01BWF9TQ0JfVElELAorCWJjbV9wa3RxX2luaXQoJnNjYi0+c2NiX2FtcGR1LnR4cSwgQU1QRFVfTUFYX1NDQl9USUQsCiAJCSAgQU1QRFVfTUFYX1NDQl9USUQgKiBQS1RRX0xFTl9ERUZBVUxUKTsKIAogCXN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCA9IHRydWU7CkBAIC02MDMsNyArNjExLDYgQEAKIHdsX29wc19zdGFfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCiB7Ci0JV0xfTk9ORSgiJXM6IEVudGVyXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYxNCwyNyArNjIxLDI1IEBACiAJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkLCB1MTYgKnNzbiwKIAkJICAgIHU4IGJ1Zl9zaXplKQogewotI2lmIGRlZmluZWQoQkNNREJHKQogCXN0cnVjdCBzY2IgKnNjYiA9IChzdHJ1Y3Qgc2NiICopc3RhLT5kcnZfcHJpdjsKLSNlbmRpZgogCXN0cnVjdCB3bF9pbmZvICp3bCA9IGh3LT5wcml2OwogCWludCBzdGF0dXM7CiAKLQlBU1NFUlQoc2NiLT5tYWdpYyA9PSBTQ0JfTUFHSUMpOworCWlmIChXQVJOX09OKHNjYi0+bWFnaWMgIT0gU0NCX01BR0lDKSkKKwkJcmV0dXJuIC1FSURSTTsKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUQVJUOgotCQlXTF9OT05FKCIlczogYWN0aW9uID0gSUVFRTgwMjExX0FNUERVX1JYX1NUQVJUXG4iLCBfX2Z1bmNfXyk7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUT1A6Ci0JCVdMX05PTkUoIiVzOiBhY3Rpb24gPSBJRUVFODAyMTFfQU1QRFVfUlhfU1RPUFxuIiwgX19mdW5jX18pOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9TVEFSVDoKIAkJV0xfTE9DSyh3bCk7CiAJCXN0YXR1cyA9IHdsY19hZ2dyZWdhdGFibGUod2wtPndsYywgdGlkKTsKIAkJV0xfVU5MT0NLKHdsKTsKIAkJaWYgKCFzdGF0dXMpIHsKLQkJCS8qIFdMX0VSUk9SKCJTVEFSVDogdGlkICVkIGlzIG5vdCBhZ2cnIGFibGUsIHJldHVybiBGQUlMVVJFIHRvIHN0YWNrXG4iLCB0aWQpOyAqLwotCQkJcmV0dXJuIC0xOworCQkJd2lwaHlfZXJyKHdsLT53aXBoeSwgIlNUQVJUOiB0aWQgJWQgaXMgbm90IGFnZ1wnYWJsZVxuIiwKKwkJCQkgIHRpZCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQkvKiBYWFg6IFVzZSB0aGUgc3RhcnRpbmcgc2VxdWVuY2UgbnVtYmVyIHByb3ZpZGVkIC4uLiAqLwogCQkqc3NuID0gMDsKQEAgLTY1MCwxMSArNjU1LDEwIEBACiAJY2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfT1BFUkFUSU9OQUw6CiAJCS8qIE5vdCBzdXJlIHdoYXQgdG8gZG8gaGVyZSAqLwogCQkvKiBQb3dlciBzYXZlIHdha2V1cCAqLwotCQlXTF9OT05FKCIlczogYWN0aW9uID0gSUVFRTgwMjExX0FNUERVX1RYX09QRVJBVElPTkFMXG4iLAotCQkJX19mdW5jX18pOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlXTF9FUlJPUigiJXM6IEludmFsaWQgY29tbWFuZCwgaWdub3JpbmdcbiIsIF9fZnVuY19fKTsKKwkJd2lwaHlfZXJyKHdsLT53aXBoeSwgIiVzOiBJbnZhbGlkIGNvbW1hbmQsIGlnbm9yaW5nXG4iLAorCQkJICBfX2Z1bmNfXyk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC02NjksMTAgKzY3MywyMSBAQAogCWJsb2NrZWQgPSB3bGNfY2hlY2tfcmFkaW9fZGlzYWJsZWQod2wtPndsYyk7CiAJV0xfVU5MT0NLKHdsKTsKIAotCVdMX05PTkUoIndsOiByZmtpbGxfcG9sbDogJWRcbiIsIGJsb2NrZWQpOwogCXdpcGh5X3Jma2lsbF9zZXRfaHdfc3RhdGUod2wtPnB1Yi0+aWVlZV9ody0+d2lwaHksIGJsb2NrZWQpOwogfQogCitzdGF0aWMgdm9pZCB3bF9vcHNfZmx1c2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgZHJvcCkKK3sKKwlzdHJ1Y3Qgd2xfaW5mbyAqd2wgPSBIV19UT19XTChodyk7CisKKwlub19wcmludGsoIiVzOiBkcm9wID0gJXNcbiIsIF9fZnVuY19fLCBkcm9wID8gInRydWUiIDogImZhbHNlIik7CisKKwkvKiB3YWl0IGZvciBwYWNrZXQgcXVldWUgYW5kIGRtYSBmaWZvcyB0byBydW4gZW1wdHkgKi8KKwlXTF9MT0NLKHdsKTsKKwl3bGNfd2FpdF9mb3JfdHhfY29tcGxldGlvbih3bC0+d2xjLCBkcm9wKTsKKwlXTF9VTkxPQ0sod2wpOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgd2xfb3BzID0gewogCS50eCA9IHdsX29wc190eCwKIAkuc3RhcnQgPSB3bF9vcHNfc3RhcnQsCkBAIC02ODcsNyArNzAyLDYgQEAKIAkuc3dfc2Nhbl9jb21wbGV0ZSA9IHdsX29wc19zd19zY2FuX2NvbXBsZXRlLAogCS5zZXRfdHNmID0gd2xfb3BzX3NldF90c2YsCiAJLmdldF9zdGF0cyA9IHdsX29wc19nZXRfc3RhdHMsCi0JLnNldF9ydHNfdGhyZXNob2xkID0gd2xfb3BzX3NldF9ydHNfdGhyZXNob2xkLAogCS5zdGFfbm90aWZ5ID0gd2xfb3BzX3N0YV9ub3RpZnksCiAJLmNvbmZfdHggPSB3bF9vcHNfY29uZl90eCwKIAkuZ2V0X3RzZiA9IHdsX29wc19nZXRfdHNmLApAQCAtNjk1LDYgKzcwOSw3IEBACiAJLnN0YV9yZW1vdmUgPSB3bF9vcHNfc3RhX3JlbW92ZSwKIAkuYW1wZHVfYWN0aW9uID0gd2xfb3BzX2FtcGR1X2FjdGlvbiwKIAkucmZraWxsX3BvbGwgPSB3bF9vcHNfcmZraWxsX3BvbGwsCisJLmZsdXNoID0gd2xfb3BzX2ZsdXNoLAogfTsKIAogLyoKQEAgLTcwMiw4ICs3MTcsNiBAQAogICovCiBzdGF0aWMgaW50IHdsX3NldF9oaW50KHN0cnVjdCB3bF9pbmZvICp3bCwgY2hhciAqYWJicmV2KQogewotCVdMX05PTkUoIiVzOiBTZW5kaW5nIGNvdW50cnkgY29kZSAlYyVjIHRvIE1BQzgwMjExXG4iLAotCQkgX19mdW5jX18sIGFiYnJldlswXSwgYWJicmV2WzFdKTsKIAlyZXR1cm4gcmVndWxhdG9yeV9oaW50KHdsLT5wdWItPmllZWVfaHctPndpcGh5LCBhYmJyZXYpOwogfQogCkBAIC03MjQsNyArNzM3LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgd2xfaW5mbyAqd2xfYXR0YWNoKHUxNiB2ZW5kb3IsIHUxNiBkZXZpY2UsIHVuc2lnbmVkIGxvbmcgcmVncywKIAkJCSAgICB1aW50IGJ1c3R5cGUsIHZvaWQgKmJ0cGFyYW0sIHVpbnQgaXJxKQogewotCXN0cnVjdCB3bF9pbmZvICp3bDsKKwlzdHJ1Y3Qgd2xfaW5mbyAqd2wgPSBOVUxMOwogCWludCB1bml0LCBlcnI7CiAKIAl1bnNpZ25lZCBsb25nIGJhc2VfYWRkcjsKQEAgLTczNSwxNCArNzQ4LDE2IEBACiAJZXJyID0gMDsKIAogCWlmICh1bml0IDwgMCkgewotCQlXTF9FUlJPUigid2wlZDogdW5pdCBudW1iZXIgb3ZlcmZsb3csIGV4aXRpbmdcbiIsIHVuaXQpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAkvKiBhbGxvY2F0ZSBwcml2YXRlIGluZm8gKi8KIAlodyA9IHBjaV9nZXRfZHJ2ZGF0YShidHBhcmFtKTsJLyogYnRwYXJhbSA9PSBwZGV2ICovCi0Jd2wgPSBody0+cHJpdjsKLQlBU1NFUlQod2wpOworCWlmIChodyAhPSBOVUxMKQorCQl3bCA9IGh3LT5wcml2OworCWlmIChXQVJOX09OKGh3ID09IE5VTEwpIHx8IFdBUk5fT04od2wgPT0gTlVMTCkpCisJCXJldHVybiBOVUxMOworCXdsLT53aXBoeSA9IGh3LT53aXBoeTsKIAogCWF0b21pY19zZXQoJndsLT5jYWxsYmFja3MsIDApOwogCkBAIC03NTksMTMgKzc3NCwxMyBAQAogCQkvKiBEbyBub3RoaW5nICovCiAJfSBlbHNlIHsKIAkJYnVzdHlwZSA9IFBDSV9CVVM7Ci0JCVdMX1RSQUNFKCJmb3JjZSB0byBQQ0lcbiIpOworCQlCQ01NU0cod2wtPndpcGh5LCAiZm9yY2UgdG8gUENJXG4iKTsKIAl9CiAJd2wtPmJjbV9idXN0eXBlID0gYnVzdHlwZTsKIAogCXdsLT5yZWdzdmEgPSBpb3JlbWFwX25vY2FjaGUoYmFzZV9hZGRyLCBQQ0lfQkFSMF9XSU5TWik7CiAJaWYgKHdsLT5yZWdzdmEgPT0gTlVMTCkgewotCQlXTF9FUlJPUigid2wlZDogaW9yZW1hcCgpIGZhaWxlZFxuIiwgdW5pdCk7CisJCXdpcGh5X2Vycih3bC0+d2lwaHksICJ3bCVkOiBpb3JlbWFwKCkgZmFpbGVkXG4iLCB1bml0KTsKIAkJZ290byBmYWlsOwogCX0KIAlzcGluX2xvY2tfaW5pdCgmd2wtPmxvY2spOwpAQCAtNzczLDExICs3ODgsMTEgQEAKIAogCS8qIHByZXBhcmUgdWNvZGUgKi8KIAlpZiAod2xfcmVxdWVzdF9mdyh3bCwgKHN0cnVjdCBwY2lfZGV2ICopYnRwYXJhbSkgPCAwKSB7Ci0JCVdMX0VSUk9SKCIlczogRmFpbGVkIHRvIGZpbmQgZmlybXdhcmUgdXN1YWxseSBpbiAlc1xuIiwKLQkJCSBLQlVJTERfTU9ETkFNRSwgIi9saWIvZmlybXdhcmUvYnJjbSIpOworCQl3aXBoeV9lcnIod2wtPndpcGh5LCAiJXM6IEZhaWxlZCB0byBmaW5kIGZpcm13YXJlIHVzdWFsbHkgaW4gIgorCQkJICAiJXNcbiIsIEtCVUlMRF9NT0ROQU1FLCAiL2xpYi9maXJtd2FyZS9icmNtIik7CiAJCXdsX3JlbGVhc2VfZncod2wpOwogCQl3bF9yZW1vdmUoKHN0cnVjdCBwY2lfZGV2ICopYnRwYXJhbSk7Ci0JCWdvdG8gZmFpbDE7CisJCXJldHVybiBOVUxMOwogCX0KIAogCS8qIGNvbW1vbiBsb2FkLXRpbWUgaW5pdGlhbGl6YXRpb24gKi8KQEAgLTc4NSwyNCArODAwLDIyIEBACiAJCQkgICAgIHdsLT5yZWdzdmEsIHdsLT5iY21fYnVzdHlwZSwgYnRwYXJhbSwgJmVycik7CiAJd2xfcmVsZWFzZV9mdyh3bCk7CiAJaWYgKCF3bC0+d2xjKSB7Ci0JCVdMX0VSUk9SKCIlczogd2xjX2F0dGFjaCgpIGZhaWxlZCB3aXRoIGNvZGUgJWRcbiIsCi0JCQkgS0JVSUxEX01PRE5BTUUsIGVycik7CisJCXdpcGh5X2Vycih3bC0+d2lwaHksICIlczogd2xjX2F0dGFjaCgpIGZhaWxlZCB3aXRoIGNvZGUgJWRcbiIsCisJCQkgIEtCVUlMRF9NT0ROQU1FLCBlcnIpOwogCQlnb3RvIGZhaWw7CiAJfQogCXdsLT5wdWIgPSB3bGNfcHViKHdsLT53bGMpOwogCiAJd2wtPnB1Yi0+aWVlZV9odyA9IGh3OwotCUFTU0VSVCh3bC0+cHViLT5pZWVlX2h3KTsKLQlBU1NFUlQod2wtPnB1Yi0+aWVlZV9ody0+cHJpdiA9PSB3bCk7Ci0KIAogCWlmICh3bGNfaW92YXJfc2V0aW50KHdsLT53bGMsICJtcGMiLCAwKSkgewotCQlXTF9FUlJPUigid2wlZDogRXJyb3Igc2V0dGluZyBNUEMgdmFyaWFibGUgdG8gMFxuIiwgdW5pdCk7CisJCXdpcGh5X2Vycih3bC0+d2lwaHksICJ3bCVkOiBFcnJvciBzZXR0aW5nIE1QQyB2YXJpYWJsZSB0byAwXG4iLAorCQkJICB1bml0KTsKIAl9CiAKIAkvKiByZWdpc3RlciBvdXIgaW50ZXJydXB0IGhhbmRsZXIgKi8KIAlpZiAocmVxdWVzdF9pcnEoaXJxLCB3bF9pc3IsIElSUUZfU0hBUkVELCBLQlVJTERfTU9ETkFNRSwgd2wpKSB7Ci0JCVdMX0VSUk9SKCJ3bCVkOiByZXF1ZXN0X2lycSgpIGZhaWxlZFxuIiwgdW5pdCk7CisJCXdpcGh5X2Vycih3bC0+d2lwaHksICJ3bCVkOiByZXF1ZXN0X2lycSgpIGZhaWxlZFxuIiwgdW5pdCk7CiAJCWdvdG8gZmFpbDsKIAl9CiAJd2wtPmlycSA9IGlycTsKQEAgLTgxMiwxOCArODI1LDIwIEBACiAJCQkgICAgTlVMTCk7CiAKIAlpZiAoaWVlZV9od19pbml0KGh3KSkgewotCQlXTF9FUlJPUigid2wlZDogJXM6IGllZWVfaHdfaW5pdCBmYWlsZWQhXG4iLCB1bml0LCBfX2Z1bmNfXyk7CisJCXdpcGh5X2Vycih3bC0+d2lwaHksICJ3bCVkOiAlczogaWVlZV9od19pbml0IGZhaWxlZCFcbiIsIHVuaXQsCisJCQkgIF9fZnVuY19fKTsKIAkJZ290byBmYWlsOwogCX0KIAogCW1lbWNweShwZXJtLCAmd2wtPnB1Yi0+Y3VyX2V0aGVyYWRkciwgRVRIX0FMRU4pOwotCUFTU0VSVChpc192YWxpZF9ldGhlcl9hZGRyKHBlcm0pKTsKKwlpZiAoV0FSTl9PTighaXNfdmFsaWRfZXRoZXJfYWRkcihwZXJtKSkpCisJCWdvdG8gZmFpbDsKIAlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihodywgcGVybSk7CiAKIAllcnIgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoaHcpOwogCWlmIChlcnIpIHsKLQkJV0xfRVJST1IoIiVzOiBpZWVlODAyMTFfcmVnaXN0ZXJfaHcgZmFpbGVkLCBzdGF0dXMgJWRcbiIsCi0JCQkgX19mdW5jX18sIGVycik7CisJCXdpcGh5X2Vycih3bC0+d2lwaHksICIlczogaWVlZTgwMjExX3JlZ2lzdGVyX2h3IGZhaWxlZCwgc3RhdHVzIgorCQkJICAiJWRcbiIsIF9fZnVuY19fLCBlcnIpOwogCX0KIAogCWlmICh3bC0+cHViLT5zcm9tX2Njb2RlWzBdKQpAQCAtODMxLDggKzg0Niw4IEBACiAJZWxzZQogCQllcnIgPSB3bF9zZXRfaGludCh3bCwgIlVTIik7CiAJaWYgKGVycikgewotCQlXTF9FUlJPUigiJXM6IHJlZ3VsYXRvcnlfaGludCBmYWlsZWQsIHN0YXR1cyAlZFxuIiwKLQkJCSBfX2Z1bmNfXywgZXJyKTsKKwkJd2lwaHlfZXJyKHdsLT53aXBoeSwgIiVzOiByZWd1bGF0b3J5X2hpbnQgZmFpbGVkLCBzdGF0dXMgJWRcbiIsCisJCQkgIF9fZnVuY19fLCBlcnIpOwogCX0KIAogCXdsX2ZvdW5kKys7CkBAIC04NDAsNyArODU1LDYgQEAKIAogZmFpbDoKIAl3bF9mcmVlKHdsKTsKLWZhaWwxOgogCXJldHVybiBOVUxMOwogfQogCkBAIC0xMDI3LDkgKzEwNDEsOCBAQAogCWh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0gPSBOVUxMOwogCiAJaWYgKHdsY19nZXQod2wtPndsYywgV0xDX0dFVF9QSFlMSVNULCAoaW50ICopJnBoeV9saXN0KSA8IDApIHsKLQkJV0xfRVJST1IoIlBoeSBsaXN0IGZhaWxlZFxuIik7CisJCXdpcGh5X2Vycihody0+d2lwaHksICJQaHkgbGlzdCBmYWlsZWRcbiIpOwogCX0KLQlXTF9OT05FKCIlczogcGh5bGlzdCA9ICVjXG4iLCBfX2Z1bmNfXywgcGh5X2xpc3RbMF0pOwogCiAJaWYgKHBoeV9saXN0WzBdID09ICduJyB8fCBwaHlfbGlzdFswXSA9PSAnYycpIHsKIAkJaWYgKHBoeV9saXN0WzBdID09ICdjJykgewpAQCAtMTAzOSw4ICsxMDUyLDcgQEAKIAkJfQogCQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJndsX2JhbmRfMkdIel9ucGh5OwogCX0gZWxzZSB7Ci0JCUJVRygpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRVBFUk07CiAJfQogCiAJLyogQXNzdW1lIGFsbCBiYW5kcyB1c2UgdGhlIHNhbWUgcGh5LiAgVHJ1ZSBmb3IgMTFuIGRldmljZXMuICovCkBAIC0xMDUwLDEyICsxMDYyLDkgQEAKIAkJCWh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0gPQogCQkJICAgICZ3bF9iYW5kXzVHSHpfbnBoeTsKIAkJfSBlbHNlIHsKLQkJCXJldHVybiAtMTsKKwkJCXJldHVybiAtRVBFUk07CiAJCX0KIAl9Ci0KLQlXTF9OT05FKCIlczogMmdoeiA9ICVkLCA1Z2h6ID0gJWRcbiIsIF9fZnVuY19fLCAxLCBoYXNfNWcpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwNzAsOCArMTA3OSw3IEBACiAJICAgIHwgSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OOwogCiAJaHctPmV4dHJhX3R4X2hlYWRyb29tID0gd2xjX2dldF9oZWFkZXJfbGVuKCk7Ci0JLyogRklYTUU6IHNob3VsZCBnZXQgdGhpcyBmcm9tIHdsYy0+bWFjaHdjYXAgKi8KLQlody0+cXVldWVzID0gNDsKKwlody0+cXVldWVzID0gTl9UWF9RVUVVRVM7CiAJLyogRklYTUU6IHRoaXMgZG9lc24ndCBzZWVtIHRvIGJlIHVzZWQgcHJvcGVybHkgaW4gbWluc3RyZWxfaHQuCiAJICogbWFjODAyMTEvc3RhdHVzLmM6aWVlZTgwMjExX3R4X3N0YXR1cygpIGNoZWNrcyB0aGlzIHZhbHVlLAogCSAqIGJ1dCBtYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmM6bWluc3RyZWxfaHRfZ2V0X3JhdGUoKQpAQCAtMTEwNCwxMSArMTExMiw5IEBACiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CiAJdTMyIHZhbDsKIAotCUFTU0VSVChwZGV2KTsKLQotCVdMX1RSQUNFKCIlczogYnVzICVkIHNsb3QgJWQgZnVuYyAlZCBpcnEgJWRcbiIsCi0JCSBfX2Z1bmNfXywgcGRldi0+YnVzLT5udW1iZXIsIFBDSV9TTE9UKHBkZXYtPmRldmZuKSwKLQkJIFBDSV9GVU5DKHBkZXYtPmRldmZuKSwgcGRldi0+aXJxKTsKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiYnVzICVkIHNsb3QgJWQgZnVuYyAlZCBpcnEgJWRcbiIsCisJICAgICAgIHBkZXYtPmJ1cy0+bnVtYmVyLCBQQ0lfU0xPVChwZGV2LT5kZXZmbiksCisJICAgICAgIFBDSV9GVU5DKHBkZXYtPmRldmZuKSwgcGRldi0+aXJxKTsKIAogCWlmICgocGRldi0+dmVuZG9yICE9IFBDSV9WRU5ET1JfSURfQlJPQURDT00pIHx8CiAJICAgICgoKHBkZXYtPmRldmljZSAmIDB4ZmYwMCkgIT0gMHg0MzAwKSAmJgpAQCAtMTExOCw5ICsxMTI0LDkgQEAKIAogCXJjID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKHJjKSB7Ci0JCVdMX0VSUk9SKCIlczogQ2Fubm90IGVuYWJsZSBkZXZpY2UgJWQtJWRfJWRcbiIsCi0JCQkgX19mdW5jX18sIHBkZXYtPmJ1cy0+bnVtYmVyLCBQQ0lfU0xPVChwZGV2LT5kZXZmbiksCi0JCQkgUENJX0ZVTkMocGRldi0+ZGV2Zm4pKTsKKwkJcHJfZXJyKCIlczogQ2Fubm90IGVuYWJsZSBkZXZpY2UgJWQtJWRfJWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgcGRldi0+YnVzLT5udW1iZXIsIFBDSV9TTE9UKHBkZXYtPmRldmZuKSwKKwkJICAgICAgIFBDSV9GVU5DKHBkZXYtPmRldmZuKSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKQEAgLTExMzEsOSArMTEzNyw4IEBACiAKIAlodyA9IGllZWU4MDIxMV9hbGxvY19odyhzaXplb2Yoc3RydWN0IHdsX2luZm8pLCAmd2xfb3BzKTsKIAlpZiAoIWh3KSB7Ci0JCVdMX0VSUk9SKCIlczogaWVlZTgwMjExX2FsbG9jX2h3IGZhaWxlZFxuIiwgX19mdW5jX18pOwotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyXzE7CisJCXByX2VycigiJXM6IGllZWU4MDIxMV9hbGxvY19odyBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJU0VUX0lFRUU4MDIxMV9ERVYoaHcsICZwZGV2LT5kZXYpOwpAQCAtMTE0NiwxNCArMTE1MSwxMSBAQAogCQkgICAgICAgUENJX0JVUywgcGRldiwgcGRldi0+aXJxKTsKIAogCWlmICghd2wpIHsKLQkJV0xfRVJST1IoIiVzOiAlczogd2xfYXR0YWNoIGZhaWxlZCFcbiIsCi0JCQkgS0JVSUxEX01PRE5BTUUsIF9fZnVuY19fKTsKKwkJcHJfZXJyKCIlczogJXM6IHdsX2F0dGFjaCBmYWlsZWQhXG4iLCBLQlVJTERfTU9ETkFNRSwKKwkJICAgICAgIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXJldHVybiAwOwotIGVycl8xOgotCVdMX0VSUk9SKCIlczogZXJyXzE6IE1ham9yIGhvYXJrYWdlXG4iLCBfX2Z1bmNfXyk7Ci0JcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgd2xfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQpAQCAtMTE2MSwxMiArMTE2MywxMSBAQAogCXN0cnVjdCB3bF9pbmZvICp3bDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKIAotCVdMX1RSQUNFKCJ3bDogd2xfc3VzcGVuZFxuIik7Ci0KIAlodyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAl3bCA9IEhXX1RPX1dMKGh3KTsKIAlpZiAoIXdsKSB7Ci0JCVdMX0VSUk9SKCJ3bDogd2xfc3VzcGVuZDogcGNpX2dldF9kcnZkYXRhIGZhaWxlZFxuIik7CisJCXdpcGh5X2Vycih3bC0+d2lwaHksCisJCQkgICJ3bF9zdXNwZW5kOiBwY2lfZ2V0X2RydmRhdGEgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC0xMTg3LDExICsxMTg4LDExIEBACiAJaW50IGVyciA9IDA7CiAJdTMyIHZhbDsKIAotCVdMX1RSQUNFKCJ3bDogd2xfcmVzdW1lXG4iKTsKIAlodyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAl3bCA9IEhXX1RPX1dMKGh3KTsKIAlpZiAoIXdsKSB7Ci0JCVdMX0VSUk9SKCJ3bDogd2xfcmVzdW1lOiBwY2lfZ2V0X2RydmRhdGEgZmFpbGVkXG4iKTsKKwkJd2lwaHlfZXJyKHdsLT53aXBoeSwKKwkJCSAgIndsOiB3bF9yZXN1bWU6IHBjaV9nZXRfZHJ2ZGF0YSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTEyMzEsNyArMTIzMiw3IEBACiAJaHcgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJd2wgPSBIV19UT19XTChodyk7CiAJaWYgKCF3bCkgewotCQlXTF9FUlJPUigid2w6IHdsX3JlbW92ZTogcGNpX2dldF9kcnZkYXRhIGZhaWxlZFxuIik7CisJCXByX2Vycigid2w6IHdsX3JlbW92ZTogcGNpX2dldF9kcnZkYXRhIGZhaWxlZFxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEyMzksNyArMTI0MCw3IEBACiAJc3RhdHVzID0gd2xjX2NoaXBtYXRjaChwZGV2LT52ZW5kb3IsIHBkZXYtPmRldmljZSk7CiAJV0xfVU5MT0NLKHdsKTsKIAlpZiAoIXN0YXR1cykgewotCQlXTF9FUlJPUigid2w6IHdsX3JlbW92ZTogd2xjX2NoaXBtYXRjaCBmYWlsZWRcbiIpOworCQl3aXBoeV9lcnIod2wtPndpcGh5LCAid2w6IHdsX3JlbW92ZTogd2xjX2NoaXBtYXRjaCBmYWlsZWRcbiIpOwogCQlyZXR1cm47CiAJfQogCWlmICh3bC0+d2xjKSB7CkBAIC0xMjQ5LDcgKzEyNTAsNiBAQAogCQlXTF9MT0NLKHdsKTsKIAkJd2xfZG93bih3bCk7CiAJCVdMX1VOTE9DSyh3bCk7Ci0JCVdMX05PTkUoIiVzOiBEb3duXG4iLCBfX2Z1bmNfXyk7CiAJfQogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIApAQCAtMTM0Miw3ICsxMzQyLDYgQEAKIHsKIAlzdHJ1Y3Qgd2xfdGltZXIgKnQsICpuZXh0OwogCi0JQVNTRVJUKHdsKTsKIAkvKiBmcmVlIHVjb2RlIGRhdGEgKi8KIAlpZiAod2wtPmZ3LmZ3X2NudCkKIAkJd2xfdWNvZGVfZGF0YV9mcmVlKCk7CkBAIC0xMzg5LDEzICsxMzg4LDMwIEBACiAJd2wtPnJlZ3N2YSA9IE5VTEw7CiB9CiAKKy8qIGZsYWdzIHRoZSBnaXZlbiByYXRlIGluIHJhdGVzZXQgYXMgcmVxdWVzdGVkICovCitzdGF0aWMgdm9pZCB3bF9zZXRfYmFzaWNfcmF0ZShzdHJ1Y3Qgd2xfcmF0ZXNldCAqcnMsIHUxNiByYXRlLCBib29sIGlzX2JyKQoreworCXUzMiBpOworCisJZm9yIChpID0gMDsgaSA8IHJzLT5jb3VudDsgaSsrKSB7CisJCWlmIChyYXRlICE9IChycy0+cmF0ZXNbaV0gJiAweDdmKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChpc19icikKKwkJCXJzLT5yYXRlc1tpXSB8PSBXTENfUkFURV9GTEFHOworCQllbHNlCisJCQlycy0+cmF0ZXNbaV0gJj0gV0xDX1JBVEVfTUFTSzsKKwkJcmV0dXJuOworCX0KK30KKwogLyoKICAqIHByZWNvbmRpdGlvbjogcGVyaW1ldGVyIGxvY2sgaGFzIGJlZW4gYWNxdWlyZWQKICAqLwogdm9pZCB3bF90eGZsb3djb250cm9sKHN0cnVjdCB3bF9pbmZvICp3bCwgc3RydWN0IHdsX2lmICp3bGlmLCBib29sIHN0YXRlLAogCQkgICAgICBpbnQgcHJpbykKIHsKLQlXTF9FUlJPUigiU2hvdWxkbid0IGJlIGhlcmUgJXNcbiIsIF9fZnVuY19fKTsKKwl3aXBoeV9lcnIod2wtPndpcGh5LCAiU2hvdWxkbid0IGJlIGhlcmUgJXNcbiIsIF9fZnVuY19fKTsKIH0KIAogLyoKQEAgLTE0MDMsOCArMTQxOSw3IEBACiAgKi8KIHZvaWQgd2xfaW5pdChzdHJ1Y3Qgd2xfaW5mbyAqd2wpCiB7Ci0JV0xfVFJBQ0UoIndsJWQ6IHdsX2luaXRcbiIsIHdsLT5wdWItPnVuaXQpOwotCisJQkNNTVNHKFdMX1RPX0hXKHdsKS0+d2lwaHksICJ3bCVkXG4iLCB3bC0+cHViLT51bml0KTsKIAl3bF9yZXNldCh3bCk7CiAKIAl3bGNfaW5pdCh3bC0+d2xjKTsKQEAgLTE0MTUsOCArMTQzMCw3IEBACiAgKi8KIHVpbnQgd2xfcmVzZXQoc3RydWN0IHdsX2luZm8gKndsKQogewotCVdMX1RSQUNFKCJ3bCVkOiB3bF9yZXNldFxuIiwgd2wtPnB1Yi0+dW5pdCk7Ci0KKwlCQ01NU0coV0xfVE9fSFcod2wpLT53aXBoeSwgIndsJWRcbiIsIHdsLT5wdWItPnVuaXQpOwogCXdsY19yZXNldCh3bC0+d2xjKTsKIAogCS8qIGRwYyB3aWxsIG5vdCBiZSByZXNjaGVkdWxlZCAqLwpAQCAtMTQyOSw3ICsxNDQzLDcgQEAKICAqIFRoZXNlIGFyZSBpbnRlcnJ1cHQgb24vb2ZmIGVudHJ5IHBvaW50cy4gRGlzYWJsZSBpbnRlcnJ1cHRzCiAgKiBkdXJpbmcgaW50ZXJydXB0IHN0YXRlIHRyYW5zaXRpb24uCiAgKi8KLXZvaWQgQkNNRkFTVFBBVEggd2xfaW50cnNvbihzdHJ1Y3Qgd2xfaW5mbyAqd2wpCit2b2lkIHdsX2ludHJzb24oc3RydWN0IHdsX2luZm8gKndsKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTE0NDYsNyArMTQ2MCw3IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLXUzMiBCQ01GQVNUUEFUSCB3bF9pbnRyc29mZihzdHJ1Y3Qgd2xfaW5mbyAqd2wpCit1MzIgd2xfaW50cnNvZmYoc3RydWN0IHdsX2luZm8gKndsKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHN0YXR1czsKQEAgLTE1MDMsNyArMTUxNyw3IEBACiAJV0xfTE9DSyh3bCk7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBCQ01GQVNUUEFUSCB3bF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQorc3RhdGljIGlycXJldHVybl90IHdsX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IHdsX2luZm8gKndsOwogCWJvb2wgb3Vycywgd2FudGRwYzsKQEAgLTE1MjEsNyArMTUzNSw2IEBACiAKIAkJCS8qIC4uLmFuZCBjYWxsIHRoZSBzZWNvbmQgbGV2ZWwgaW50ZXJydXB0IGhhbmRsZXIgKi8KIAkJCS8qIHNjaGVkdWxlIGRwYyAqLwotCQkJQVNTRVJUKHdsLT5yZXNjaGVkID09IGZhbHNlKTsKIAkJCXRhc2tsZXRfc2NoZWR1bGUoJndsLT50YXNrbGV0KTsKIAkJfQogCX0KQEAgLTE1MzEsNyArMTU0NCw3IEBACiAJcmV0dXJuIElSUV9SRVRWQUwob3Vycyk7CiB9CiAKLXN0YXRpYyB2b2lkIEJDTUZBU1RQQVRIIHdsX2RwYyh1bnNpZ25lZCBsb25nIGRhdGEpCitzdGF0aWMgdm9pZCB3bF9kcGModW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCB3bF9pbmZvICp3bDsKIApAQCAtMTYxMyw3ICsxNjI2LDggQEAKIAogCXQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd2xfdGltZXIpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXQpIHsKLQkJV0xfRVJST1IoIndsJWQ6IHdsX2luaXRfdGltZXI6IG91dCBvZiBtZW1vcnlcbiIsIHdsLT5wdWItPnVuaXQpOworCQl3aXBoeV9lcnIod2wtPndpcGh5LCAid2wlZDogd2xfaW5pdF90aW1lcjogb3V0IG9mIG1lbW9yeVxuIiwKKwkJCSAgd2wtPnB1Yi0+dW5pdCk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTY0NCwxMiArMTY1OCwxMCBAQAogewogI2lmZGVmIEJDTURCRwogCWlmICh0LT5zZXQpIHsKLQkJV0xfRVJST1IoIiVzOiBBbHJlYWR5IHNldC4gTmFtZTogJXMsIHBlciAlZFxuIiwKLQkJCSBfX2Z1bmNfXywgdC0+bmFtZSwgcGVyaW9kaWMpOworCQl3aXBoeV9lcnIod2wtPndpcGh5LCAiJXM6IEFscmVhZHkgc2V0LiBOYW1lOiAlcywgcGVyICVkXG4iLAorCQkJICBfX2Z1bmNfXywgdC0+bmFtZSwgcGVyaW9kaWMpOwogCX0KICNlbmRpZgotCUFTU0VSVCghdC0+c2V0KTsKLQogCXQtPm1zID0gbXM7CiAJdC0+cGVyaW9kaWMgPSAoYm9vbCkgcGVyaW9kaWM7CiAJdC0+c2V0ID0gdHJ1ZTsKQEAgLTE3MTksMzcgKzE3MzEsNiBAQAogICovCiBzdGF0aWMgaW50IHdsX2xpbnV4X3dhdGNoZG9nKHZvaWQgKmN0eCkKIHsKLQlzdHJ1Y3Qgd2xfaW5mbyAqd2wgPSAoc3RydWN0IHdsX2luZm8gKikgY3R4OwotCXN0cnVjdCB3bF9jbnQgKmNudDsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSBOVUxMOwotCXVpbnQgaWQ7Ci0JLyogcmVmcmVzaCBzdGF0cyAqLwotCWlmICh3bC0+cHViLT51cCkgewotCQlBU1NFUlQod2wtPnN0YXRzX2lkIDwgMik7Ci0KLQkJY250ID0gd2wtPnB1Yi0+X2NudDsKLQkJaWQgPSAxIC0gd2wtPnN0YXRzX2lkOwotCQlzdGF0cyA9ICZ3bC0+c3RhdHNfd2F0Y2hkb2dbaWRdOwotCQlzdGF0cy0+cnhfcGFja2V0cyA9IGNudC0+cnhmcmFtZTsKLQkJc3RhdHMtPnR4X3BhY2tldHMgPSBjbnQtPnR4ZnJhbWU7Ci0JCXN0YXRzLT5yeF9ieXRlcyA9IGNudC0+cnhieXRlOwotCQlzdGF0cy0+dHhfYnl0ZXMgPSBjbnQtPnR4Ynl0ZTsKLQkJc3RhdHMtPnJ4X2Vycm9ycyA9IGNudC0+cnhlcnJvcjsKLQkJc3RhdHMtPnR4X2Vycm9ycyA9IGNudC0+dHhlcnJvcjsKLQkJc3RhdHMtPmNvbGxpc2lvbnMgPSAwOwotCi0JCXN0YXRzLT5yeF9sZW5ndGhfZXJyb3JzID0gMDsKLQkJc3RhdHMtPnJ4X292ZXJfZXJyb3JzID0gY250LT5yeG9mbG87Ci0JCXN0YXRzLT5yeF9jcmNfZXJyb3JzID0gY250LT5yeGNyYzsKLQkJc3RhdHMtPnJ4X2ZyYW1lX2Vycm9ycyA9IDA7Ci0JCXN0YXRzLT5yeF9maWZvX2Vycm9ycyA9IGNudC0+cnhvZmxvOwotCQlzdGF0cy0+cnhfbWlzc2VkX2Vycm9ycyA9IDA7Ci0KLQkJc3RhdHMtPnR4X2ZpZm9fZXJyb3JzID0gY250LT50eHVmbG87Ci0KLQkJd2wtPnN0YXRzX2lkID0gaWQ7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE3ODAsOCArMTc2MSw4IEBACiAJCQkJcGRhdGEgPSB3bC0+ZncuZndfYmluW2ldLT5kYXRhICsgaGRyLT5vZmZzZXQ7CiAJCQkJKnBidWYgPSBrbWFsbG9jKGhkci0+bGVuLCBHRlBfQVRPTUlDKTsKIAkJCQlpZiAoKnBidWYgPT0gTlVMTCkgewotCQkJCQlXTF9FUlJPUigiZmFpbCB0byBhbGxvYyAlZCBieXRlc1xuIiwKLQkJCQkJCSBoZHItPmxlbik7CisJCQkJCXdpcGh5X2Vycih3bC0+d2lwaHksICJmYWlsIHRvIGFsbG9jICVkIgorCQkJCQkJICAiIGJ5dGVzXG4iLCBoZHItPmxlbik7CiAJCQkJCWdvdG8gZmFpbDsKIAkJCQl9CiAJCQkJbWVtY3B5KCpwYnVmLCBwZGF0YSwgaGRyLT5sZW4pOwpAQCAtMTc4OSwxMCArMTc3MCwxMSBAQAogCQkJfQogCQl9CiAJfQotCVdMX0VSUk9SKCJFUlJPUjogdWNvZGUgYnVmIHRhZzolZCBjYW4gbm90IGJlIGZvdW5kIVxuIiwgaWR4KTsKKwl3aXBoeV9lcnIod2wtPndpcGh5LCAiRVJST1I6IHVjb2RlIGJ1ZiB0YWc6JWQgY2FuIG5vdCBiZSBmb3VuZCFcbiIsCisJCSAgaWR4KTsKIAkqcGJ1ZiA9IE5VTEw7CiBmYWlsOgotCXJldHVybiBCQ01FX05PVEZPVU5EOworCXJldHVybiAtRU5PREFUQTsKIH0KIAogLyoKQEAgLTE4MTAsMTQgKzE3OTIsMTggQEAKIAkJICAgICBlbnRyeSsrLCBoZHIrKykgewogCQkJaWYgKGhkci0+aWR4ID09IGlkeCkgewogCQkJCXBkYXRhID0gd2wtPmZ3LmZ3X2JpbltpXS0+ZGF0YSArIGhkci0+b2Zmc2V0OwotCQkJCUFTU0VSVChoZHItPmxlbiA9PSA0KTsKKwkJCQlpZiAoaGRyLT5sZW4gIT0gNCkgeworCQkJCQl3aXBoeV9lcnIod2wtPndpcGh5LAorCQkJCQkJICAiRVJST1I6IGZ3IGhkciBsZW5cbiIpOworCQkJCQlyZXR1cm4gLUVOT01TRzsKKwkJCQl9CiAJCQkJKmRhdGEgPSAqKCh1MzIgKikgcGRhdGEpOwogCQkJCXJldHVybiAwOwogCQkJfQogCQl9CiAJfQotCVdMX0VSUk9SKCJFUlJPUjogdWNvZGUgdGFnOiVkIGNhbiBub3QgYmUgZm91bmQhXG4iLCBpZHgpOwotCXJldHVybiAtMTsKKwl3aXBoeV9lcnIod2wtPndpcGh5LCAiRVJST1I6IHVjb2RlIHRhZzolZCBjYW4gbm90IGJlIGZvdW5kIVxuIiwgaWR4KTsKKwlyZXR1cm4gLUVOT01TRzsKIH0KIAogLyoKQEAgLTE4MzcsMjYgKzE4MjMsMjIgQEAKIAkJCWJyZWFrOwogCQlzcHJpbnRmKGZ3X25hbWUsICIlcy0lZC5mdyIsIHdsX2Zpcm13YXJlc1tpXSwKIAkJCVVDT0RFX0xPQURFUl9BUElfVkVSKTsKLQkJV0xfTk9ORSgicmVxdWVzdCBmdyAlc1xuIiwgZndfbmFtZSk7CiAJCXN0YXR1cyA9IHJlcXVlc3RfZmlybXdhcmUoJndsLT5mdy5md19iaW5baV0sIGZ3X25hbWUsIGRldmljZSk7CiAJCWlmIChzdGF0dXMpIHsKLQkJCVdMX0VSUk9SKCIlczogZmFpbCB0byBsb2FkIGZpcm13YXJlICVzXG4iLAotCQkJCSBLQlVJTERfTU9ETkFNRSwgZndfbmFtZSk7CisJCQl3aXBoeV9lcnIod2wtPndpcGh5LCAiJXM6IGZhaWwgdG8gbG9hZCBmaXJtd2FyZSAlc1xuIiwKKwkJCQkgIEtCVUlMRF9NT0ROQU1FLCBmd19uYW1lKTsKIAkJCXJldHVybiBzdGF0dXM7CiAJCX0KLQkJV0xfTk9ORSgicmVxdWVzdCBmdyAlc1xuIiwgZndfbmFtZSk7CiAJCXNwcmludGYoZndfbmFtZSwgIiVzX2hkci0lZC5mdyIsIHdsX2Zpcm13YXJlc1tpXSwKIAkJCVVDT0RFX0xPQURFUl9BUElfVkVSKTsKIAkJc3RhdHVzID0gcmVxdWVzdF9maXJtd2FyZSgmd2wtPmZ3LmZ3X2hkcltpXSwgZndfbmFtZSwgZGV2aWNlKTsKIAkJaWYgKHN0YXR1cykgewotCQkJV0xfRVJST1IoIiVzOiBmYWlsIHRvIGxvYWQgZmlybXdhcmUgJXNcbiIsCi0JCQkJIEtCVUlMRF9NT0ROQU1FLCBmd19uYW1lKTsKKwkJCXdpcGh5X2Vycih3bC0+d2lwaHksICIlczogZmFpbCB0byBsb2FkIGZpcm13YXJlICVzXG4iLAorCQkJCSAgS0JVSUxEX01PRE5BTUUsIGZ3X25hbWUpOwogCQkJcmV0dXJuIHN0YXR1czsKIAkJfQogCQl3bC0+ZncuaGRyX251bV9lbnRyaWVzW2ldID0KIAkJICAgIHdsLT5mdy5md19oZHJbaV0tPnNpemUgLyAoc2l6ZW9mKHN0cnVjdCB3bF9md19oZHIpKTsKLQkJV0xfTk9ORSgicmVxdWVzdCBmdyAlcyBmaW5kOiAlZCBlbnRyaWVzXG4iLAotCQkJZndfbmFtZSwgd2wtPmZ3Lmhkcl9udW1fZW50cmllc1tpXSk7CiAJfQogCXdsLT5mdy5md19jbnQgPSBpOwogCXJldHVybiB3bF91Y29kZV9kYXRhX2luaXQod2wpOwpAQCAtMTkwNCwxNiArMTg4NiwxNyBAQAogCQlpZiAoZncgPT0gTlVMTCAmJiBmd19oZHIgPT0gTlVMTCkgewogCQkJYnJlYWs7CiAJCX0gZWxzZSBpZiAoZncgPT0gTlVMTCB8fCBmd19oZHIgPT0gTlVMTCkgewotCQkJV0xfRVJST1IoIiVzOiBpbnZhbGlkIGJpbi9oZHIgZndcbiIsIF9fZnVuY19fKTsKKwkJCXdpcGh5X2Vycih3bC0+d2lwaHksICIlczogaW52YWxpZCBiaW4vaGRyIGZ3XG4iLAorCQkJCSAgX19mdW5jX18pOwogCQkJcmMgPSAtRUJBREY7CiAJCX0gZWxzZSBpZiAoZndfaGRyLT5zaXplICUgc2l6ZW9mKHN0cnVjdCB3bF9md19oZHIpKSB7Ci0JCQlXTF9FUlJPUigiJXM6IG5vbiBpbnRlZ3JhbCBmdyBoZHIgZmlsZSBzaXplICV6dS8lenVcbiIsCi0JCQkJIF9fZnVuY19fLCBmd19oZHItPnNpemUsCi0JCQkJIHNpemVvZihzdHJ1Y3Qgd2xfZndfaGRyKSk7CisJCQl3aXBoeV9lcnIod2wtPndpcGh5LCAiJXM6IG5vbiBpbnRlZ3JhbCBmdyBoZHIgZmlsZSAiCisJCQkJInNpemUgJXp1LyV6dVxuIiwgX19mdW5jX18sIGZ3X2hkci0+c2l6ZSwKKwkJCQlzaXplb2Yoc3RydWN0IHdsX2Z3X2hkcikpOwogCQkJcmMgPSAtRUJBREY7CiAJCX0gZWxzZSBpZiAoZnctPnNpemUgPCBNSU5fRldfU0laRSB8fCBmdy0+c2l6ZSA+IE1BWF9GV19TSVpFKSB7Ci0JCQlXTF9FUlJPUigiJXM6IG91dCBvZiBib3VuZHMgZncgZmlsZSBzaXplICV6dVxuIiwKLQkJCQkgX19mdW5jX18sIGZ3LT5zaXplKTsKKwkJCXdpcGh5X2Vycih3bC0+d2lwaHksICIlczogb3V0IG9mIGJvdW5kcyBmdyBmaWxlIHNpemUgIgorCQkJCSAgIiV6dVxuIiwgX19mdW5jX18sIGZ3LT5zaXplKTsKIAkJCXJjID0gLUVCQURGOwogCQl9IGVsc2UgewogCQkJLyogY2hlY2sgaWYgdWNvZGUgc2VjdGlvbiBvdmVycnVucyBmaXJtd2FyZSBpbWFnZSAqLwpAQCAtMTkyMiwxNSArMTkwNSwxNyBAQAogCQkJICAgICAhcmM7IGVudHJ5KyssIHVjb2RlX2hkcisrKSB7CiAJCQkJaWYgKHVjb2RlX2hkci0+b2Zmc2V0ICsgdWNvZGVfaGRyLT5sZW4gPgogCQkJCSAgICBmdy0+c2l6ZSkgewotCQkJCQlXTF9FUlJPUigiJXM6IGNvbmZsaWN0aW5nIGJpbi9oZHJcbiIsCi0JCQkJCQkgX19mdW5jX18pOworCQkJCQl3aXBoeV9lcnIod2wtPndpcGh5LAorCQkJCQkJICAiJXM6IGNvbmZsaWN0aW5nIGJpbi9oZHJcbiIsCisJCQkJCQkgIF9fZnVuY19fKTsKIAkJCQkJcmMgPSAtRUJBREY7CiAJCQkJfQogCQkJfQogCQl9CiAJfQogCWlmIChyYyA9PSAwICYmIHdsLT5mdy5md19jbnQgIT0gaSkgewotCQlXTF9FUlJPUigiJXM6IGludmFsaWQgZndfY250PSVkXG4iLCBfX2Z1bmNfXywgd2wtPmZ3LmZ3X2NudCk7CisJCXdpcGh5X2Vycih3bC0+d2lwaHksICIlczogaW52YWxpZCBmd19jbnQ9JWRcbiIsIF9fZnVuY19fLAorCQkJd2wtPmZ3LmZ3X2NudCk7CiAJCXJjID0gLUVCQURGOwogCX0KIAlyZXR1cm4gcmM7CkBAIC0xOTQzLDggKzE5MjgsNiBAQAogewogCWJvb2wgYmxvY2tlZCA9IHdsY19jaGVja19yYWRpb19kaXNhYmxlZCh3bC0+d2xjKTsKIAotCVdMX05PTkUoIiVzOiB1cGRhdGUgaHcgc3RhdGU6IGJsb2NrZWQ9JXNcbiIsIF9fZnVuY19fLAotCQlibG9ja2VkID8gInRydWUiIDogImZhbHNlIik7CiAJV0xfVU5MT0NLKHdsKTsKIAl3aXBoeV9yZmtpbGxfc2V0X2h3X3N0YXRlKHdsLT5wdWItPmllZWVfaHctPndpcGh5LCBibG9ja2VkKTsKIAlpZiAoYmxvY2tlZCkKQEAgLTE5NTIsMyArMTkzNSwxMyBAQAogCVdMX0xPQ0sod2wpOwogCXJldHVybiBibG9ja2VkOwogfQorCisvKgorICogcHJlY29uZGl0aW9uOiBwZXJpbWV0ZXIgbG9jayBoYXMgYmVlbiBhY3F1aXJlZAorICovCit2b2lkIHdsX21zbGVlcChzdHJ1Y3Qgd2xfaW5mbyAqd2wsIHVpbnQgbXMpCit7CisJV0xfVU5MT0NLKHdsKTsKKwltc2xlZXAobXMpOworCVdMX0xPQ0sod2wpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bF9tYWM4MDIxMS5oIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bF9tYWM4MDIxMS5oCmluZGV4IGYzMTk4Y2MuLmU3MDNkOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xfbWFjODAyMTEuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsX21hYzgwMjExLmgKQEAgLTY3LDExICs2Nyw4IEBACiAjaWZkZWYgTElOVVhTVEFfUFMKIAl1MzIgcGNpX3Bzc3RhdGVbMTZdOwkvKiBwY2kgcHMtc3RhdGUgc2F2ZS9yZXN0b3JlICovCiAjZW5kaWYKLQkvKiBSUEMsIGhhbmRsZSwgbG9jaywgdHhxLCB3b3JraXRlbSAqLwotCXVpbnQgc3RhdHNfaWQ7CQkvKiB0aGUgY3VycmVudCBzZXQgb2Ygc3RhdHMgKi8KLQkvKiBwaW5nLXBvbmcgc3RhdHMgY291bnRlcnMgdXBkYXRlZCBieSBMaW51eCB3YXRjaGRvZyAqLwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzX3dhdGNoZG9nWzJdOwogCXN0cnVjdCB3bF9maXJtd2FyZSBmdzsKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5OwogfTsKIAogI2RlZmluZSBXTF9MT0NLKHdsKQlzcGluX2xvY2tfYmgoJih3bCktPmxvY2spCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19hbGxvYy5jIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfYWxsb2MuYwppbmRleCBlOTI4ZmExLi44MmM2NGNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19hbGxvYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX2FsbG9jLmMKQEAgLTE4LDcgKzE4LDcgQEAKIAogI2luY2x1ZGUgPGJjbWRlZnMuaD4KICNpbmNsdWRlIDxiY211dGlscy5oPgotI2luY2x1ZGUgPHNpdXRpbHMuaD4KKyNpbmNsdWRlIDxhaXV0aWxzLmg+CiAjaW5jbHVkZSA8d2xpb2N0bC5oPgogI2luY2x1ZGUgPHNiaG5kZG1hLmg+CiAKQEAgLTQzLDE3ICs0Myw3IEBACiBzdGF0aWMgdm9pZCB3bGNfcHViX21mcmVlKHN0cnVjdCB3bGNfcHViICpwdWIpOwogc3RhdGljIHZvaWQgd2xjX3R1bmFibGVzX2luaXQod2xjX3R1bmFibGVzX3QgKnR1bmFibGVzLCB1aW50IGRldmlkKTsKIAotdm9pZCAqd2xjX2NhbGxvYyh1aW50IHVuaXQsIHVpbnQgc2l6ZSkKLXsKLQl2b2lkICppdGVtOwotCi0JaXRlbSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0FUT01JQyk7Ci0JaWYgKGl0ZW0gPT0gTlVMTCkKLQkJV0xfRVJST1IoIndsJWQ6ICVzOiBvdXQgb2YgbWVtb3J5XG4iLCB1bml0LCBfX2Z1bmNfXyk7Ci0JcmV0dXJuIGl0ZW07Ci19Ci0KLXZvaWQgd2xjX3R1bmFibGVzX2luaXQod2xjX3R1bmFibGVzX3QgKnR1bmFibGVzLCB1aW50IGRldmlkKQorc3RhdGljIHZvaWQgd2xjX3R1bmFibGVzX2luaXQod2xjX3R1bmFibGVzX3QgKnR1bmFibGVzLCB1aW50IGRldmlkKQogewogCXR1bmFibGVzLT5udHhkID0gTlRYRDsKIAl0dW5hYmxlcy0+bnJ4ZCA9IE5SWEQ7CkBAIC03NSwxNCArNjUsMTMgQEAKIHsKIAlzdHJ1Y3Qgd2xjX3B1YiAqcHViOwogCi0JcHViID0gd2xjX2NhbGxvYyh1bml0LCBzaXplb2Yoc3RydWN0IHdsY19wdWIpKTsKKwlwdWIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd2xjX3B1YiksIEdGUF9BVE9NSUMpOwogCWlmIChwdWIgPT0gTlVMTCkgewogCQkqZXJyID0gMTAwMTsKIAkJZ290byBmYWlsOwogCX0KIAotCXB1Yi0+dHVuYWJsZXMgPSB3bGNfY2FsbG9jKHVuaXQsCi0JCXNpemVvZih3bGNfdHVuYWJsZXNfdCkpOworCXB1Yi0+dHVuYWJsZXMgPSBremFsbG9jKHNpemVvZih3bGNfdHVuYWJsZXNfdCksIEdGUF9BVE9NSUMpOwogCWlmIChwdWItPnR1bmFibGVzID09IE5VTEwpIHsKIAkJKmVyciA9IDEwMjg7CiAJCWdvdG8gZmFpbDsKQEAgLTkxLDEyICs4MCw3IEBACiAJLyogbmVlZCB0byBpbml0IHRoZSB0dW5hYmxlcyBub3cgKi8KIAl3bGNfdHVuYWJsZXNfaW5pdChwdWItPnR1bmFibGVzLCBkZXZpZCk7CiAKLQlwdWItPl9jbnQgPSB3bGNfY2FsbG9jKHVuaXQsIHNpemVvZihzdHJ1Y3Qgd2xfY250KSk7Ci0JaWYgKHB1Yi0+X2NudCA9PSBOVUxMKQotCQlnb3RvIGZhaWw7Ci0KLQlwdWItPm11bHRpY2FzdCA9ICh1OCAqKXdsY19jYWxsb2ModW5pdCwKLQkJKEVUSF9BTEVOICogTUFYTVVMVElMSVNUKSk7CisJcHViLT5tdWx0aWNhc3QgPSBremFsbG9jKEVUSF9BTEVOICogTUFYTVVMVElMSVNULCBHRlBfQVRPTUlDKTsKIAlpZiAocHViLT5tdWx0aWNhc3QgPT0gTlVMTCkgewogCQkqZXJyID0gMTAwMzsKIAkJZ290byBmYWlsOwpAQCAtMTE1LDcgKzk5LDYgQEAKIAkJcmV0dXJuOwogCiAJa2ZyZWUocHViLT5tdWx0aWNhc3QpOwotCWtmcmVlKHB1Yi0+X2NudCk7CiAJa2ZyZWUocHViLT50dW5hYmxlcyk7CiAJa2ZyZWUocHViKTsKIH0KQEAgLTEyNCwxMiArMTA3LDExIEBACiB7CiAJc3RydWN0IHdsY19ic3NjZmcgKmNmZzsKIAotCWNmZyA9IChzdHJ1Y3Qgd2xjX2Jzc2NmZyAqKSB3bGNfY2FsbG9jKHVuaXQsIHNpemVvZihzdHJ1Y3Qgd2xjX2Jzc2NmZykpOworCWNmZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bGNfYnNzY2ZnKSwgR0ZQX0FUT01JQyk7CiAJaWYgKGNmZyA9PSBOVUxMKQogCQlnb3RvIGZhaWw7CiAKLQljZmctPmN1cnJlbnRfYnNzID0gKHdsY19ic3NfaW5mb190ICopd2xjX2NhbGxvYyh1bml0LAotCQlzaXplb2Yod2xjX2Jzc19pbmZvX3QpKTsKKwljZmctPmN1cnJlbnRfYnNzID0ga3phbGxvYyhzaXplb2Yod2xjX2Jzc19pbmZvX3QpLCBHRlBfQVRPTUlDKTsKIAlpZiAoY2ZnLT5jdXJyZW50X2JzcyA9PSBOVUxMKQogCQlnb3RvIGZhaWw7CiAKQEAgLTE1MCw3ICsxMzIsOCBAQAogCWtmcmVlKGNmZyk7CiB9CiAKLXZvaWQgd2xjX2Jzc2NmZ19JRF9hc3NpZ24oc3RydWN0IHdsY19pbmZvICp3bGMsIHN0cnVjdCB3bGNfYnNzY2ZnICpic3NjZmcpCitzdGF0aWMgdm9pZCB3bGNfYnNzY2ZnX0lEX2Fzc2lnbihzdHJ1Y3Qgd2xjX2luZm8gKndsYywKKwkJCQkgc3RydWN0IHdsY19ic3NjZmcgKmJzc2NmZykKIHsKIAlic3NjZmctPklEID0gd2xjLT5uZXh0X2Jzc2NmZ19JRDsKIAl3bGMtPm5leHRfYnNzY2ZnX0lEKys7CkBAIC0xNjMsNyArMTQ2LDcgQEAKIHsKIAlzdHJ1Y3Qgd2xjX2luZm8gKndsYzsKIAotCXdsYyA9IChzdHJ1Y3Qgd2xjX2luZm8gKikgd2xjX2NhbGxvYyh1bml0LCBzaXplb2Yoc3RydWN0IHdsY19pbmZvKSk7CisJd2xjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdsY19pbmZvKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHdsYyA9PSBOVUxMKSB7CiAJCSplcnIgPSAxMDAyOwogCQlnb3RvIGZhaWw7CkBAIC0xODEsMTYgKzE2NCwxNSBAQAogCiAJLyogYWxsb2NhdGUgc3RydWN0IHdsY19od19pbmZvIHN0YXRlIHN0cnVjdHVyZSAqLwogCi0Jd2xjLT5odyA9IChzdHJ1Y3Qgd2xjX2h3X2luZm8gKil3bGNfY2FsbG9jKHVuaXQsCi0JCQlzaXplb2Yoc3RydWN0IHdsY19od19pbmZvKSk7CisJd2xjLT5odyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bGNfaHdfaW5mbyksIEdGUF9BVE9NSUMpOwogCWlmICh3bGMtPmh3ID09IE5VTEwpIHsKIAkJKmVyciA9IDEwMDU7CiAJCWdvdG8gZmFpbDsKIAl9CiAJd2xjLT5ody0+d2xjID0gd2xjOwogCi0Jd2xjLT5ody0+YmFuZHN0YXRlWzBdID0gd2xjX2NhbGxvYyh1bml0LAotCQkoc2l6ZW9mKHN0cnVjdCB3bGNfaHdiYW5kKSAqIE1BWEJBTkRTKSk7CisJd2xjLT5ody0+YmFuZHN0YXRlWzBdID0KKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHdsY19od2JhbmQpICogTUFYQkFORFMsIEdGUF9BVE9NSUMpOwogCWlmICh3bGMtPmh3LT5iYW5kc3RhdGVbMF0gPT0gTlVMTCkgewogCQkqZXJyID0gMTAwNjsKIAkJZ290byBmYWlsOwpAQCAtMjA0LDE1ICsxODYsMTQgQEAKIAkJfQogCX0KIAotCXdsYy0+bW9kdWxlY2IgPSB3bGNfY2FsbG9jKHVuaXQsCi0JCXNpemVvZihzdHJ1Y3QgbW9kdWxlY2IpICogV0xDX01BWE1PRFVMRVMpOworCXdsYy0+bW9kdWxlY2IgPQorCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgbW9kdWxlY2IpICogV0xDX01BWE1PRFVMRVMsIEdGUF9BVE9NSUMpOwogCWlmICh3bGMtPm1vZHVsZWNiID09IE5VTEwpIHsKIAkJKmVyciA9IDEwMDk7CiAJCWdvdG8gZmFpbDsKIAl9CiAKLQl3bGMtPmRlZmF1bHRfYnNzID0gKHdsY19ic3NfaW5mb190ICopd2xjX2NhbGxvYyh1bml0LAotCQlzaXplb2Yod2xjX2Jzc19pbmZvX3QpKTsKKwl3bGMtPmRlZmF1bHRfYnNzID0ga3phbGxvYyhzaXplb2Yod2xjX2Jzc19pbmZvX3QpLCBHRlBfQVRPTUlDKTsKIAlpZiAod2xjLT5kZWZhdWx0X2JzcyA9PSBOVUxMKSB7CiAJCSplcnIgPSAxMDEwOwogCQlnb3RvIGZhaWw7CkBAIC0yMjUsMTUgKzIwNiwxNiBAQAogCX0KIAl3bGNfYnNzY2ZnX0lEX2Fzc2lnbih3bGMsIHdsYy0+Y2ZnKTsKIAotCXdsYy0+cGt0X2NhbGxiYWNrID0gd2xjX2NhbGxvYyh1bml0LAotCQkoc2l6ZW9mKHN0cnVjdCBwa3RfY2IpICogKHdsYy0+cHViLT50dW5hYmxlcy0+bWF4cGt0Y2IgKyAxKSkpOworCXdsYy0+cGt0X2NhbGxiYWNrID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBrdF9jYikgKgorCQkJCSAgICAod2xjLT5wdWItPnR1bmFibGVzLT5tYXhwa3RjYiArIDEpLAorCQkJCSAgICBHRlBfQVRPTUlDKTsKIAlpZiAod2xjLT5wa3RfY2FsbGJhY2sgPT0gTlVMTCkgewogCQkqZXJyID0gMTAxMzsKIAkJZ290byBmYWlsOwogCX0KIAotCXdsYy0+d3NlY19kZWZfa2V5c1swXSA9ICh3c2VjX2tleV90ICopd2xjX2NhbGxvYyh1bml0LAotCQkoc2l6ZW9mKHdzZWNfa2V5X3QpICogV0xDX0RFRkFVTFRfS0VZUykpOworCXdsYy0+d3NlY19kZWZfa2V5c1swXSA9CisJCWt6YWxsb2Moc2l6ZW9mKHdzZWNfa2V5X3QpICogV0xDX0RFRkFVTFRfS0VZUywgR0ZQX0FUT01JQyk7CiAJaWYgKHdsYy0+d3NlY19kZWZfa2V5c1swXSA9PSBOVUxMKSB7CiAJCSplcnIgPSAxMDE1OwogCQlnb3RvIGZhaWw7CkBAIC0yNDYsMjEgKzIyOCwyMCBAQAogCQl9CiAJfQogCi0Jd2xjLT5wcm90ZWN0aW9uID0gd2xjX2NhbGxvYyh1bml0LAotCQlzaXplb2Yoc3RydWN0IHdsY19wcm90ZWN0aW9uKSk7CisJd2xjLT5wcm90ZWN0aW9uID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdsY19wcm90ZWN0aW9uKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHdsYy0+cHJvdGVjdGlvbiA9PSBOVUxMKSB7CiAJCSplcnIgPSAxMDE2OwogCQlnb3RvIGZhaWw7CiAJfQogCi0Jd2xjLT5zdGYgPSB3bGNfY2FsbG9jKHVuaXQsIHNpemVvZihzdHJ1Y3Qgd2xjX3N0ZikpOworCXdsYy0+c3RmID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdsY19zdGYpLCBHRlBfQVRPTUlDKTsKIAlpZiAod2xjLT5zdGYgPT0gTlVMTCkgewogCQkqZXJyID0gMTAxNzsKIAkJZ290byBmYWlsOwogCX0KIAotCXdsYy0+YmFuZHN0YXRlWzBdID0gKHN0cnVjdCB3bGNiYW5kICopd2xjX2NhbGxvYyh1bml0LAotCQkJCShzaXplb2Yoc3RydWN0IHdsY2JhbmQpKk1BWEJBTkRTKSk7CisJd2xjLT5iYW5kc3RhdGVbMF0gPQorCQlremFsbG9jKHNpemVvZihzdHJ1Y3Qgd2xjYmFuZCkqTUFYQkFORFMsIEdGUF9BVE9NSUMpOwogCWlmICh3bGMtPmJhbmRzdGF0ZVswXSA9PSBOVUxMKSB7CiAJCSplcnIgPSAxMDI1OwogCQlnb3RvIGZhaWw7CkBAIC0yNzQsMTUgKzI1NSwxNCBAQAogCQl9CiAJfQogCi0Jd2xjLT5jb3Jlc3RhdGUgPSAoc3RydWN0IHdsY2NvcmUgKil3bGNfY2FsbG9jKHVuaXQsCi0JCQkJCQkgICAgICBzaXplb2Yoc3RydWN0IHdsY2NvcmUpKTsKKwl3bGMtPmNvcmVzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bGNjb3JlKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHdsYy0+Y29yZXN0YXRlID09IE5VTEwpIHsKIAkJKmVyciA9IDEwMjY7CiAJCWdvdG8gZmFpbDsKIAl9CiAKIAl3bGMtPmNvcmVzdGF0ZS0+bWFjc3RhdF9zbmFwc2hvdCA9Ci0JCShtYWNzdGF0X3QgKil3bGNfY2FsbG9jKHVuaXQsIHNpemVvZihtYWNzdGF0X3QpKTsKKwkJa3phbGxvYyhzaXplb2YobWFjc3RhdF90KSwgR0ZQX0FUT01JQyk7CiAJaWYgKHdsYy0+Y29yZXN0YXRlLT5tYWNzdGF0X3NuYXBzaG90ID09IE5VTEwpIHsKIAkJKmVyciA9IDEwMjc7CiAJCWdvdG8gZmFpbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX2FsbG9jLmggYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19hbGxvYy5oCmluZGV4IDFmYjc0MzAuLjk1Zjk1MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX2FsbG9jLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfYWxsb2MuaApAQCAtMTQsNyArMTQsNSBAQAogICogQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAqLwogCi1leHRlcm4gdm9pZCAqd2xjX2NhbGxvYyh1aW50IHVuaXQsIHVpbnQgc2l6ZSk7Ci0KIGV4dGVybiBzdHJ1Y3Qgd2xjX2luZm8gKndsY19hdHRhY2hfbWFsbG9jKHVpbnQgdW5pdCwgdWludCAqZXJyLCB1aW50IGRldmlkKTsKIGV4dGVybiB2b2lkIHdsY19kZXRhY2hfbWZyZWUoc3RydWN0IHdsY19pbmZvICp3bGMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfYW1wZHUuYyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX2FtcGR1LmMKaW5kZXggZjAwODY1OS4uODVhZDcwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfYW1wZHUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19hbXBkdS5jCkBAIC0xOCw3ICsxOCw3IEBACiAKICNpbmNsdWRlIDxiY21kZWZzLmg+CiAjaW5jbHVkZSA8YmNtdXRpbHMuaD4KLSNpbmNsdWRlIDxzaXV0aWxzLmg+CisjaW5jbHVkZSA8YWl1dGlscy5oPgogI2luY2x1ZGUgPHdsaW9jdGwuaD4KICNpbmNsdWRlIDxzYmhuZGRtYS5oPgogI2luY2x1ZGUgPGhuZGRtYS5oPgpAQCAtMzgsMTIgKzM4LDYgQEAKICNpbmNsdWRlICJ3bGNfbWFpbi5oIgogI2luY2x1ZGUgIndsY19hbXBkdS5oIgogCi0vKgotICoJRGlzYWJsZSBBTVBEVSBzdGF0aXN0aWNzIGNvdW50ZXJzIGZvciBub3cKLSAqLwotI2RlZmluZSBXTENOVElOQ1IoYSkKLSNkZWZpbmUgV0xDTlRBREQoYSwgYikKLQogI2RlZmluZSBBTVBEVV9NQVhfTVBEVQkJMzIJLyogbWF4IG51bWJlciBvZiBtcGR1cyBpbiBhbiBhbXBkdSAqLwogI2RlZmluZSBBTVBEVV9OVU1fTVBEVV9MRUdBQ1kJMTYJLyogbWF4IG51bWJlciBvZiBtcGR1cyBpbiBhbiBhbXBkdSB0byBhIGxlZ2FjeSAqLwogI2RlZmluZSBBTVBEVV9UWF9CQV9NQVhfV1NJWkUJNjQJLyogbWF4IFR4IGJhIHdpbmRvdyBzaXplIChpbiBwZHUpICovCkBAIC03NiwxNiArNzAsNiBAQAogCUFNUERVX0RFTElNSVRFUl9MRU4gKyAzXAogCSsgRE9UMTFfQTRfSERSX0xFTiArIERPVDExX1FPU19MRU4gKyBET1QxMV9JVl9NQVhfTEVOKQogCi0jaWZkZWYgQkNNREJHCi11MzIgd2xfYW1wZHVfZGJnID0KLSAgICBXTF9BTVBEVV9VUEROX1ZBTCB8Ci0gICAgV0xfQU1QRFVfRVJSX1ZBTCB8Ci0gICAgV0xfQU1QRFVfVFhfVkFMIHwKLSAgICBXTF9BTVBEVV9SWF9WQUwgfAotICAgIFdMX0FNUERVX0NUTF9WQUwgfAotICAgIFdMX0FNUERVX0hXX1ZBTCB8IFdMX0FNUERVX0hXVFhTX1ZBTCB8IFdMX0FNUERVX0hXREJHX1ZBTDsKLSNlbmRpZgotCiAvKiBzdHJ1Y3R1cmUgdG8gaG9sZCB0eCBmaWZvIGluZm9ybWF0aW9uIGFuZCBwcmUtbG9hZGluZyBzdGF0ZQogICogY291bnRlcnMgc3BlY2lmaWMgdG8gdHggdW5kZXJmbG93cyBvZiBhbXBkdXMKICAqIHNvbWUgY291bnRlcnMgbWlnaHQgYmUgcmVkdW5kYW50IHdpdGggdGhlIG9uZXMgaW4gd2xjIG9yIGFtcGR1IHN0cnVjdHVyZXMuCkBAIC0xMzAsNiArMTE0LDEyIEBACiAKIH07CiAKKy8qIHVzZWQgZm9yIGZsdXNoaW5nIGFtcGR1IHBhY2tldHMgKi8KK3N0cnVjdCBjYl9kZWxfYW1wZHVfcGFycyB7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKKwl1MTYgdGlkOworfTsKKwogI2RlZmluZSBBTVBEVV9DTEVBTlVQRkxBR19SWCAgICgweDEpCiAjZGVmaW5lIEFNUERVX0NMRUFOVVBGTEFHX1RYICAgKDB4MikKIApAQCAtMTQzLDkgKzEzMyw2IEBACiBzdGF0aWMgc2NiX2FtcGR1X3RpZF9pbmlfdCAqd2xjX2FtcGR1X2luaXRfdGlkX2luaShzdHJ1Y3QgYW1wZHVfaW5mbyAqYW1wZHUsCiAJCQkJCQkgICBzY2JfYW1wZHVfdCAqc2NiX2FtcGR1LAogCQkJCQkJICAgdTggdGlkLCBib29sIG92ZXJyaWRlKTsKLXN0YXRpYyB2b2lkIGFtcGR1X2NsZWFudXBfdGlkX2luaShzdHJ1Y3QgYW1wZHVfaW5mbyAqYW1wZHUsCi0JCQkJICBzY2JfYW1wZHVfdCAqc2NiX2FtcGR1LAotCQkJCSAgdTggdGlkLCBib29sIGZvcmNlKTsKIHN0YXRpYyB2b2lkIGFtcGR1X3VwZGF0ZV9tYXhfdHhsZW4oc3RydWN0IGFtcGR1X2luZm8gKmFtcGR1LCB1OCBkdXIpOwogc3RhdGljIHZvaWQgc2NiX2FtcGR1X3VwZGF0ZV9jb25maWcoc3RydWN0IGFtcGR1X2luZm8gKmFtcGR1LCBzdHJ1Y3Qgc2NiICpzY2IpOwogc3RhdGljIHZvaWQgc2NiX2FtcGR1X3VwZGF0ZV9jb25maWdfYWxsKHN0cnVjdCBhbXBkdV9pbmZvICphbXBkdSk7CkBAIC0xNjQsMTcgKzE1MSwxMCBAQAogCXN0cnVjdCBhbXBkdV9pbmZvICphbXBkdTsKIAlpbnQgaTsKIAotCS8qIHNvbWUgY29kZSBkZXBlbmRzIG9uIHBhY2tlZCBzdHJ1Y3R1cmVzICovCi0JQVNTRVJUKERPVDExX01BWE5VTUZSQUdTID09IE5CSVRTKHUxNikpOwotCUFTU0VSVChJU1BPV0VST0YyKEFNUERVX1RYX0JBX01BWF9XU0laRSkpOwotCUFTU0VSVChJU1BPV0VST0YyKEFNUERVX1JYX0JBX01BWF9XU0laRSkpOwotCUFTU0VSVCh3bGMtPnB1Yi0+dHVuYWJsZXMtPmFtcGR1bnVtbXBkdSA8PSBBTVBEVV9NQVhfTVBEVSk7Ci0JQVNTRVJUKHdsYy0+cHViLT50dW5hYmxlcy0+YW1wZHVudW1tcGR1ID4gMCk7Ci0KIAlhbXBkdSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhbXBkdV9pbmZvKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFhbXBkdSkgewotCQlXTF9FUlJPUigid2wlZDogd2xjX2FtcGR1X2F0dGFjaDogb3V0IG9mIG1lbVxuIiwKLQkJCSB3bGMtPnB1Yi0+dW5pdCk7CisJCXdpcGh5X2Vycih3bGMtPndpcGh5LCAid2wlZDogd2xjX2FtcGR1X2F0dGFjaDogb3V0IG9mIG1lbVxuIiwKKwkJCSAgd2xjLT5wdWItPnVuaXQpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJYW1wZHUtPndsYyA9IHdsYzsKQEAgLTIzNywyNyArMjE3LDYgQEAKIAlrZnJlZShhbXBkdSk7CiB9CiAKLXZvaWQgc2NiX2FtcGR1X2NsZWFudXAoc3RydWN0IGFtcGR1X2luZm8gKmFtcGR1LCBzdHJ1Y3Qgc2NiICpzY2IpCi17Ci0Jc2NiX2FtcGR1X3QgKnNjYl9hbXBkdSA9IFNDQl9BTVBEVV9DVUJCWShhbXBkdSwgc2NiKTsKLQl1OCB0aWQ7Ci0KLQlXTF9BTVBEVV9VUEROKCJzY2JfYW1wZHVfY2xlYW51cDogZW50ZXJcbiIpOwotCUFTU0VSVChzY2JfYW1wZHUpOwotCi0JZm9yICh0aWQgPSAwOyB0aWQgPCBBTVBEVV9NQVhfU0NCX1RJRDsgdGlkKyspIHsKLQkJYW1wZHVfY2xlYW51cF90aWRfaW5pKGFtcGR1LCBzY2JfYW1wZHUsIHRpZCwgZmFsc2UpOwotCX0KLX0KLQotLyogcmVzZXQgdGhlIGFtcGR1IHN0YXRlIG1hY2hpbmUgc28gdGhhdCBpdCBjYW4gZ3JhY2VmdWxseSBoYW5kbGUgcGFja2V0cyB0aGF0IHdlcmUKLSAqIGZyZWVkIGZyb20gdGhlIGRtYSBhbmQgdHggcXVldWVzIGR1cmluZyByZWluaXQKLSAqLwotdm9pZCB3bGNfYW1wZHVfcmVzZXQoc3RydWN0IGFtcGR1X2luZm8gKmFtcGR1KQotewotCVdMX05PTkUoIiVzOiBFbnRlcmluZ1xuIiwgX19mdW5jX18pOwotfQotCiBzdGF0aWMgdm9pZCBzY2JfYW1wZHVfdXBkYXRlX2NvbmZpZyhzdHJ1Y3QgYW1wZHVfaW5mbyAqYW1wZHUsIHN0cnVjdCBzY2IgKnNjYikKIHsKIAlzY2JfYW1wZHVfdCAqc2NiX2FtcGR1ID0gU0NCX0FNUERVX0NVQkJZKGFtcGR1LCBzY2IpOwpAQCAtMjg0LDExICsyNDMsOSBAQAogCXNjYl9hbXBkdS0+cmVsZWFzZSA9IG1pbihzY2JfYW1wZHUtPnJlbGVhc2UsCiAJCQkJIGFtcGR1LT5maWZvX3RiW1RYX0FDX0JFX0ZJRk9dLgogCQkJCSBtY3MyYW1wZHVfdGFibGVbRkZQTERfTUFYX01DU10pOwotCi0JQVNTRVJUKHNjYl9hbXBkdS0+cmVsZWFzZSk7CiB9CiAKLXZvaWQgc2NiX2FtcGR1X3VwZGF0ZV9jb25maWdfYWxsKHN0cnVjdCBhbXBkdV9pbmZvICphbXBkdSkKK3N0YXRpYyB2b2lkIHNjYl9hbXBkdV91cGRhdGVfY29uZmlnX2FsbChzdHJ1Y3QgYW1wZHVfaW5mbyAqYW1wZHUpCiB7CiAJc2NiX2FtcGR1X3VwZGF0ZV9jb25maWcoYW1wZHUsIGFtcGR1LT53bGMtPnB1Yi0+Z2xvYmFsX3NjYik7CiB9CkBAIC0zMzYsNyArMjkzLDcgQEAKIAkJCSBNX1VDT0RFX01BQ1NUQVQgKyBvZmZzZXRvZihtYWNzdGF0X3QsIHR4ZnVuZmxbZmlkXSkpOwogCW5ld190eHVuZmwgPSAodTE2KSAoY3VyX3R4dW5mbCAtIGZpZm8tPnByZXZfdHhmdW5mbCk7CiAJaWYgKG5ld190eHVuZmwgPT0gMCkgewotCQlXTF9GRlBMRCgiY2hlY2tfdHh1bmZsIDogVFggc3RhdHVzIEZSQUcgc2V0IGJ1dCBubyB0eCB1bmRlcmZsb3dzXG4iKTsKKwkJQkNNTVNHKHdsYy0+d2lwaHksICJUWCBzdGF0dXMgRlJBRyBzZXQgYnV0IG5vIHR4IHVuZGVyZmxvd3NcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCWZpZm8tPnByZXZfdHhmdW5mbCA9IGN1cl90eHVuZmw7CkBAIC0zNDYsNyArMzAzLDYgQEAKIAogCS8qIGNoZWNrIGlmIGZpZm8gaXMgYmlnIGVub3VnaCAqLwogCWlmICh3bGNfeG10Zmlmb19zel9nZXQod2xjLCBmaWQsICZ4bXRmaWZvX3N6KSkgewotCQlXTF9GRlBMRCgiY2hlY2tfdHh1bmZsIDogZ2V0IHhtdGZpZm9fc3ogZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMzYwLDggKzMxNiw4IEBACiAJaWYgKGZpZm8tPmFjY3VtX3R4ZnVuZmwgPCAxMCkKIAkJcmV0dXJuIDA7CiAKLQlXTF9GRlBMRCgiYW1wZHVfY291bnQgJWQgIHR4X3VuZGVyZmxvd3MgJWRcbiIsCi0JCSBjdXJyZW50X2FtcGR1X2NudCwgZmlmby0+YWNjdW1fdHhmdW5mbCk7CisJQkNNTVNHKHdsYy0+d2lwaHksICJhbXBkdV9jb3VudCAlZCAgdHhfdW5kZXJmbG93cyAlZFxuIiwKKwkJY3VycmVudF9hbXBkdV9jbnQsIGZpZm8tPmFjY3VtX3R4ZnVuZmwpOwogCiAJLyoKIAkgICBjb21wdXRlIHRoZSBjdXJyZW50IHJhdGlvIG9mIHR4IHVuZmwgcGVyIGFtcGR1LgpAQCAtMzg4LDcgKzM0NCw2IEBACiAJICovCiAKIAlpZiAoZmlmby0+YW1wZHVfcGxkX3NpemUgPj0gbWF4X21wZHUgKiBGRlBMRF9NUERVX1NJWkUpIHsKLQkJV0xfRkZQTEQoKCJ0eCBmaWZvIHBsZCA6IG1heCBhbXBkdSBmaXRzIGluIGZpZm9cbikiKSk7CiAJCWZpZm8tPmFjY3VtX3R4ZnVuZmwgPSAwOwogCQlyZXR1cm4gMDsKIAl9CkBAIC00MDYsNyArMzYxLDcgQEAKIAkJLyoKIAkJICAgY29tcHV0ZSBhIG5ldyBkbWEgeGZlciByYXRlIGZvciBtYXhfbXBkdSBAIG1heCBtY3MuCiAJCSAgIFRoaXMgaXMgdGhlIG1pbmltdW0gZG1hIHJhdGUgdGhhdAotCQkgICBjYW4gYWNoaWV2ZSBubyB1bmZlcmZsb3cgY29uZGl0aW9uIGZvciB0aGUgY3VycmVudCBtcGR1IHNpemUuCisJCSAgIGNhbiBhY2hpZXZlIG5vIHVuZGVyZmxvdyBjb25kaXRpb24gZm9yIHRoZSBjdXJyZW50IG1wZHUgc2l6ZS4KIAkJICovCiAJCS8qIG5vdGUgOiB3ZSBkaXZpZGUvbXVsdGlwbHkgYnkgMTAwIHRvIGF2b2lkIGludGVnZXIgb3ZlcmZsb3dzICovCiAJCWZpZm8tPmRtYXhmZXJyYXRlID0KQEAgLTQxNCw4ICszNjksOSBAQAogCQkgICAgICAobWF4X21wZHUgKiBGRlBMRF9NUERVX1NJWkUgLSBmaWZvLT5hbXBkdV9wbGRfc2l6ZSkpCiAJCSAgICAgLyAobWF4X21wZHUgKiBGRlBMRF9NUERVX1NJWkUpKSAqIDEwMDsKIAotCQlXTF9GRlBMRCgiRE1BIGVzdGltYXRlZCB0cmFuc2ZlciByYXRlICVkOyBwcmUtbG9hZCBzaXplICVkXG4iLAotCQkJIGZpZm8tPmRtYXhmZXJyYXRlLCBmaWZvLT5hbXBkdV9wbGRfc2l6ZSk7CisJCUJDTU1TRyh3bGMtPndpcGh5LCAiRE1BIGVzdGltYXRlZCB0cmFuc2ZlciByYXRlICVkOyAiCisJCQkicHJlLWxvYWQgc2l6ZSAlZFxuIiwKKwkJCWZpZm8tPmRtYXhmZXJyYXRlLCBmaWZvLT5hbXBkdV9wbGRfc2l6ZSk7CiAJfSBlbHNlIHsKIAogCQkvKiBkZWNyZWFzZSBhbXBkdSBzaXplICovCkBAIC00NjksNyArNDI1LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIEJDTUZBU1RQQVRICitzdGF0aWMgdm9pZAogd2xjX2FtcGR1X2FnZyhzdHJ1Y3QgYW1wZHVfaW5mbyAqYW1wZHUsIHN0cnVjdCBzY2IgKnNjYiwgc3RydWN0IHNrX2J1ZmYgKnAsCiAJICAgICAgdWludCBwcmVjKQogewpAQCAtNDg3LDcgKzQ0Myw3IEBACiAJcmV0dXJuOwogfQogCi1pbnQgQkNNRkFTVFBBVEgKK2ludAogd2xjX3NlbmRhbXBkdShzdHJ1Y3QgYW1wZHVfaW5mbyAqYW1wZHUsIHN0cnVjdCB3bGNfdHhxX2luZm8gKnFpLAogCSAgICAgIHN0cnVjdCBza19idWZmICoqcGR1LCBpbnQgcHJlYykKIHsKQEAgLTUyMSwzNSArNDc3LDMxIEBACiAJYm9vbCBmYnJfaXNjY2s7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvOwogCXUxNiBxbGVuOworCXN0cnVjdCB3aXBoeSAqd2lwaHk7CiAKIAl3bGMgPSBhbXBkdS0+d2xjOworCXdpcGh5ID0gd2xjLT53aXBoeTsKIAlwID0gKnBkdTsKIAotCUFTU0VSVChwKTsKLQogCXRpZCA9ICh1OCkgKHAtPnByaW9yaXR5KTsKLQlBU1NFUlQodGlkIDwgQU1QRFVfTUFYX1NDQl9USUQpOwogCiAJZiA9IGFtcGR1LT5maWZvX3RiICsgcHJpbzJmaWZvW3RpZF07CiAKIAlzY2IgPSB3bGMtPnB1Yi0+Z2xvYmFsX3NjYjsKLQlBU1NFUlQoc2NiLT5tYWdpYyA9PSBTQ0JfTUFHSUMpOwotCiAJc2NiX2FtcGR1ID0gU0NCX0FNUERVX0NVQkJZKGFtcGR1LCBzY2IpOwotCUFTU0VSVChzY2JfYW1wZHUpOwogCWluaSA9ICZzY2JfYW1wZHUtPmluaVt0aWRdOwogCiAJLyogTGV0IHByZXNzdXJlIGNvbnRpbnVlIHRvIGJ1aWxkIC4uLiAqLwogCXFsZW4gPSBwa3RxX3BsZW4oJnFpLT5xLCBwcmVjKTsKIAlpZiAoaW5pLT50eF9pbl90cmFuc2l0ID4gMCAmJiBxbGVuIDwgc2NiX2FtcGR1LT5tYXhfcGR1KSB7Ci0JCXJldHVybiBCQ01FX0JVU1k7CisJCXJldHVybiAtRUJVU1k7CiAJfQogCiAJd2xjX2FtcGR1X2FnZyhhbXBkdSwgc2NiLCBwLCB0aWQpOwogCiAJaWYgKHdsYy0+YmxvY2tfZGF0YWZpZm8pIHsKLQkJV0xfRVJST1IoIiVzOiBGaWZvIGJsb2NrZWRcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIEJDTUVfQlVTWTsKKwkJd2lwaHlfZXJyKHdpcGh5LCAiJXM6IEZpZm8gYmxvY2tlZFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVCVVNZOwogCX0KIAlycl9yZXRyeV9saW1pdCA9IGFtcGR1LT5ycl9yZXRyeV9saW1pdF90aWRbdGlkXTsKIAlhbXBkdV9sZW4gPSAwOwpAQCAtNTYzLDMyICs1MTUsMjkgQEAKIAkJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkgewogCQkJZXJyID0gd2xjX3ByZXBfcGR1KHdsYywgcCwgJmZpZm8pOwogCQl9IGVsc2UgewotCQkJV0xfRVJST1IoIiVzOiBBTVBEVSBmbGFnIGlzIG9mZiFcbiIsIF9fZnVuY19fKTsKKwkJCXdpcGh5X2Vycih3aXBoeSwgIiVzOiBBTVBEVSBmbGFnIGlzIG9mZiFcbiIsIF9fZnVuY19fKTsKIAkJCSpwZHUgPSBOVUxMOwogCQkJZXJyID0gMDsKIAkJCWJyZWFrOwogCQl9CiAKIAkJaWYgKGVycikgewotCQkJaWYgKGVyciA9PSBCQ01FX0JVU1kpIHsKLQkJCQlXTF9FUlJPUigid2wlZDogd2xjX3NlbmRhbXBkdTogcHJlcF94ZHUgcmV0cnk7IHNlcSAweCV4XG4iLAotCQkJCQkgd2xjLT5wdWItPnVuaXQsIHNlcSk7Ci0JCQkJV0xDTlRJTkNSKGFtcGR1LT5jbnQtPnNkdXJldHJ5KTsKKwkJCWlmIChlcnIgPT0gLUVCVVNZKSB7CisJCQkJd2lwaHlfZXJyKHdpcGh5LCAid2wlZDogd2xjX3NlbmRhbXBkdTogIgorCQkJCQkgICJwcmVwX3hkdSByZXRyeTsgc2VxIDB4JXhcbiIsCisJCQkJCSAgd2xjLT5wdWItPnVuaXQsIHNlcSk7CiAJCQkJKnBkdSA9IHA7CiAJCQkJYnJlYWs7CiAJCQl9CiAKIAkJCS8qIGVycm9yIGluIHRoZSBwYWNrZXQ7IHJlamVjdCBpdCAqLwotCQkJV0xfQU1QRFVfRVJSKCJ3bCVkOiB3bGNfc2VuZGFtcGR1OiBwcmVwX3hkdSByZWplY3RlZDsgc2VxIDB4JXhcbiIsCi0JCQkJICAgICB3bGMtPnB1Yi0+dW5pdCwgc2VxKTsKLQkJCVdMQ05USU5DUihhbXBkdS0+Y250LT5zZHVyZWplY3RlZCk7Ci0KKwkJCXdpcGh5X2Vycih3aXBoeSwgIndsJWQ6IHdsY19zZW5kYW1wZHU6IHByZXBfeGR1ICIKKwkJCQkgICJyZWplY3RlZDsgc2VxIDB4JXhcbiIsIHdsYy0+cHViLT51bml0LCBzZXEpOwogCQkJKnBkdSA9IE5VTEw7CiAJCQlicmVhazsKIAkJfQogCiAJCS8qIHBrdCBpcyBnb29kIHRvIGJlIGFnZ3JlZ2F0ZWQgKi8KLQkJQVNTRVJUKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSk7CiAJCXR4aCA9IChkMTF0eGhfdCAqKSBwLT5kYXRhOwogCQlwbGNwID0gKHU4ICopICh0eGggKyAxKTsKIAkJaCA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKShwbGNwICsgRDExX1BIWV9IRFJfTEVOKTsKQEAgLTU5OSw3ICs1NDgsNiBAQAogCQltY2wgPSBsZTE2X3RvX2NwdSh0eGgtPk1hY1R4Q29udHJvbExvdyk7CiAJCW1jbCAmPSB+VFhDX0FNUERVX01BU0s7CiAJCWZicl9pc2NjayA9ICEobGUxNl90b19jcHUodHhoLT5YdHJhRnJhbWVUeXBlcykgJiAweDMpOwotCQlBU1NFUlQoIWZicl9pc2Njayk7CiAJCXR4aC0+UHJlbG9hZFNpemUgPSAwOwkvKiBhbHdheXMgZGVmYXVsdCB0byAwICovCiAKIAkJLyogIEhhbmRsZSByZXRyeSBsaW1pdHMgKi8KQEAgLTYwNyw3ICs1NTUsNiBAQAogCQkJdHhyYXRlWzBdLmNvdW50Kys7CiAJCQlyciA9IHRydWU7CiAJCQlmYnIgPSBmYWxzZTsKLQkJCUFTU0VSVCghZmJyKTsKIAkJfSBlbHNlIHsKIAkJCWZiciA9IHRydWU7CiAJCQlyciA9IGZhbHNlOwpAQCAtNjIyLDggKzU2OSw4IEBACiAJCW5kZWxpbSA9IHR4aC0+UlRTUExDUEZhbGxiYWNrW0FNUERVX0ZCUl9OVUxMX0RFTElNXTsKIAkJc2VnX2NudCArPSAxOwogCi0JCVdMX0FNUERVX1RYKCJ3bCVkOiB3bGNfc2VuZGFtcGR1OiBtcGR1ICVkIHBsY3BfbGVuICVkXG4iLAotCQkJICAgIHdsYy0+cHViLT51bml0LCBjb3VudCwgbGVuKTsKKwkJQkNNTVNHKHdsYy0+d2lwaHksICJ3bCVkOiBtcGR1ICVkIHBsY3BfbGVuICVkXG4iLAorCQkJd2xjLT5wdWItPnVuaXQsIGNvdW50LCBsZW4pOwogCiAJCS8qCiAJCSAqIGFnZ3JlZ2F0ZWFibGUgbXBkdS4gRm9yIHVjb2RlL2h3IGFnZywKQEAgLTY1MSwxMCArNTk4LDExIEBACiAJCWxlbiA9IHJvdW5kdXAobGVuLCA0KTsKIAkJYW1wZHVfbGVuICs9IChsZW4gKyAobmRlbGltICsgMSkgKiBBTVBEVV9ERUxJTUlURVJfTEVOKTsKIAotCQlkbWFfbGVuICs9ICh1MTYpIHBrdHRvdGxlbihwKTsKKwkJZG1hX2xlbiArPSAodTE2KSBiY21fcGt0dG90bGVuKHApOwogCi0JCVdMX0FNUERVX1RYKCJ3bCVkOiB3bGNfc2VuZGFtcGR1OiBhbXBkdV9sZW4gJWQgc2VnX2NudCAlZCBudWxsIGRlbGltICVkXG4iLAotCQkJICAgIHdsYy0+cHViLT51bml0LCBhbXBkdV9sZW4sIHNlZ19jbnQsIG5kZWxpbSk7CisJCUJDTU1TRyh3bGMtPndpcGh5LCAid2wlZDogYW1wZHVfbGVuICVkIgorCQkJIiBzZWdfY250ICVkIG51bGwgZGVsaW0gJWRcbiIsCisJCQl3bGMtPnB1Yi0+dW5pdCwgYW1wZHVfbGVuLCBzZWdfY250LCBuZGVsaW0pOwogCiAJCXR4aC0+TWFjVHhDb250cm9sTG93ID0gY3B1X3RvX2xlMTYobWNsKTsKIApAQCAtNjc5LDE1ICs2MjcsMTQgQEAKIAkJCWlzNDAgPSAocGxjcDAgJiBNSU1PX1BMQ1BfNDBNSFopID8gMSA6IDA7CiAJCQlzZ2kgPSBQTENQM19JU1NHSShwbGNwMykgPyAxIDogMDsKIAkJCW1jcyA9IHBsY3AwICYgfk1JTU9fUExDUF80ME1IWjsKLQkJCUFTU0VSVChtY3MgPCBNQ1NfVEFCTEVfU0laRSk7CiAJCQltYXhsZW4gPQogCQkJICAgIG1pbihzY2JfYW1wZHUtPm1heF9yeGxlbiwKIAkJCQlhbXBkdS0+bWF4X3R4bGVuW21jc11baXM0MF1bc2dpXSk7CiAKLQkJCVdMX05PTkUoInNlbmRhbXBkdTogc2dpICVkLCBpczQwICVkLCBtY3MgJWRcbiIsCi0JCQkJc2dpLCBpczQwLCBtY3MpOwotCi0JCQltYXhsZW4gPSA2NCAqIDEwMjQ7CS8qIFhYWCBGaXggbWUgdG8gaG9ub3IgcmVhbCBtYXhfcnhsZW4gKi8KKwkJCS8qIFhYWCBGaXggbWUgdG8gaG9ub3IgcmVhbCBtYXhfcnhsZW4gKi8KKwkJCS8qIGNhbiBmaXggdGhpcyBhcyBzb29uIGFzIGFtcGR1X2FjdGlvbigpIGluIG1hYzgwMjExLmgKKwkJCSAqIGdldHMgZXh0cmEgdThidWZfc2l6ZSBwYXIgKi8KKwkJCW1heGxlbiA9IDY0ICogMTAyNDsKIAogCQkJaWYgKGlzNDApCiAJCQkJbWltb19jdGxjaGJ3ID0KQEAgLTcyOCwxNCArNjc1LDEzIEBACiAJCS8qIHRlc3Qgd2hldGhlciB0byBhZGQgbW9yZSAqLwogCQlpZiAoKE1DU19SQVRFKG1jcywgdHJ1ZSwgZmFsc2UpID49IGYtPmRtYXhmZXJyYXRlKSAmJgogCQkgICAgKGNvdW50ID09IGYtPm1jczJhbXBkdV90YWJsZVttY3NdKSkgewotCQkJV0xfQU1QRFVfRVJSKCJ3bCVkOiBQUiAzNzY0NDogc3RvcHBpbmcgYW1wZHUgYXQgJWQgZm9yIG1jcyAlZFxuIiwKLQkJCQkgICAgIHdsYy0+cHViLT51bml0LCBjb3VudCwgbWNzKTsKKwkJCUJDTU1TRyh3bGMtPndpcGh5LCAid2wlZDogUFIgMzc2NDQ6IHN0b3BwaW5nIgorCQkJCSIgYW1wZHUgYXQgJWQgZm9yIG1jcyAlZFxuIiwKKwkJCQl3bGMtPnB1Yi0+dW5pdCwgY291bnQsIG1jcyk7CiAJCQlicmVhazsKIAkJfQogCiAJCWlmIChjb3VudCA9PSBzY2JfYW1wZHUtPm1heF9wZHUpIHsKLQkJCVdMX05PTkUoIlN0b3AgdGFraW5nIGZyb20gcSwgcmVhY2hlZCAlZCBkZWVwXG4iLAotCQkJCXNjYl9hbXBkdS0+bWF4X3BkdSk7CiAJCQlicmVhazsKIAkJfQogCkBAIC03NDgsMjYgKzY5NCwyNCBAQAogCQkJICAgICgodTgpIChwLT5wcmlvcml0eSkgPT0gdGlkKSkgewogCiAJCQkJcGxlbiA9Ci0JCQkJICAgIHBrdHRvdGxlbihwKSArIEFNUERVX01BWF9NUERVX09WRVJIRUFEOworCQkJCSAgICBiY21fcGt0dG90bGVuKHApICsgQU1QRFVfTUFYX01QRFVfT1ZFUkhFQUQ7CiAJCQkJcGxlbiA9IG1heChzY2JfYW1wZHUtPm1pbl9sZW4sIHBsZW4pOwogCiAJCQkJaWYgKChwbGVuICsgYW1wZHVfbGVuKSA+IG1heGxlbikgewogCQkJCQlwID0gTlVMTDsKLQkJCQkJV0xfRVJST1IoIiVzOiBCb2d1cyBwbGVuICMxXG4iLAotCQkJCQkJIF9fZnVuY19fKTsKLQkJCQkJQVNTRVJUKDMgPT0gNCk7CisJCQkJCXdpcGh5X2Vycih3aXBoeSwgIiVzOiBCb2d1cyBwbGVuICMxXG4iLAorCQkJCQkJX19mdW5jX18pOwogCQkJCQljb250aW51ZTsKIAkJCQl9CiAKIAkJCQkvKiBjaGVjayBpZiB0aGVyZSBhcmUgZW5vdWdoIGRlc2NyaXB0b3JzIGF2YWlsYWJsZSAqLwogCQkJCWlmIChUWEFWQUlMKHdsYywgZmlmbykgPD0gKHNlZ19jbnQgKyAxKSkgewotCQkJCQlXTF9FUlJPUigiJXM6IE5vIGZpZm8gc3BhY2UgICAhISEhISFcbiIsCi0JCQkJCQkgX19mdW5jX18pOworCQkJCQl3aXBoeV9lcnIod2lwaHksICIlczogTm8gZmlmbyBzcGFjZSAgIgorCQkJCQkJICAiISFcbiIsIF9fZnVuY19fKTsKIAkJCQkJcCA9IE5VTEw7CiAJCQkJCWNvbnRpbnVlOwogCQkJCX0KLQkJCQlwID0gcGt0cV9wZGVxKCZxaS0+cSwgcHJlYyk7Ci0JCQkJQVNTRVJUKHApOworCQkJCXAgPSBiY21fcGt0cV9wZGVxKCZxaS0+cSwgcHJlYyk7CiAJCQl9IGVsc2UgewogCQkJCXAgPSBOVUxMOwogCQkJfQpAQCAtNzc3LDggKzcyMSw2IEBACiAJaW5pLT50eF9pbl90cmFuc2l0ICs9IGNvdW50OwogCiAJaWYgKGNvdW50KSB7Ci0JCVdMQ05UQUREKGFtcGR1LT5jbnQtPnR4bXBkdSwgY291bnQpOwotCiAJCS8qIHBhdGNoIHVwIHRoZSBsYXN0IHR4aCAqLwogCQl0eGggPSAoZDExdHhoX3QgKikgcGt0W2NvdW50IC0gMV0tPmRhdGE7CiAJCW1jbCA9IGxlMTZfdG9fY3B1KHR4aC0+TWFjVHhDb250cm9sTG93KTsKQEAgLTg2MSwyMiArODAzLDIwIEBACiAKIAkJLyogc2V0IGZsYWcgYW5kIHBsY3AgZm9yIGZhbGxiYWNrIHJhdGUgKi8KIAkJaWYgKGZicikgewotCQkJV0xDTlRBREQoYW1wZHUtPmNudC0+dHhmYnJfbXBkdSwgY291bnQpOwotCQkJV0xDTlRJTkNSKGFtcGR1LT5jbnQtPnR4ZmJyX2FtcGR1KTsKIAkJCW1jaCB8PSBUWENfQU1QRFVfRkJSOwogCQkJdHhoLT5NYWNUeENvbnRyb2xIaWdoID0gY3B1X3RvX2xlMTYobWNoKTsKIAkJCVdMQ19TRVRfTUlNT19QTENQX0FNUERVKHBsY3ApOwogCQkJV0xDX1NFVF9NSU1PX1BMQ1BfQU1QRFUodHhoLT5GcmFnUExDUEZhbGxiYWNrKTsKIAkJfQogCi0JCVdMX0FNUERVX1RYKCJ3bCVkOiB3bGNfc2VuZGFtcGR1OiBjb3VudCAlZCBhbXBkdV9sZW4gJWRcbiIsCi0JCQkgICAgd2xjLT5wdWItPnVuaXQsIGNvdW50LCBhbXBkdV9sZW4pOworCQlCQ01NU0cod2xjLT53aXBoeSwgIndsJWQ6IGNvdW50ICVkIGFtcGR1X2xlbiAlZFxuIiwKKwkJCXdsYy0+cHViLT51bml0LCBjb3VudCwgYW1wZHVfbGVuKTsKIAogCQkvKiBpbmZvcm0gcmF0ZV9zZWwgaWYgaXQgdGhpcyBpcyBhIHJhdGUgcHJvYmUgcGt0ICovCiAJCWZyYW1laWQgPSBsZTE2X3RvX2NwdSh0eGgtPlR4RnJhbWVJRCk7CiAJCWlmIChmcmFtZWlkICYgVFhGSURfUkFURV9QUk9CRV9NQVNLKSB7Ci0JCQlXTF9FUlJPUigiJXM6IFhYWCB3aGF0IHRvIGRvIHdpdGggVFhGSURfUkFURV9QUk9CRV9NQVNLIT9cbiIsCi0JCQkJIF9fZnVuY19fKTsKKwkJCXdpcGh5X2Vycih3aXBoeSwgIiVzOiBYWFggd2hhdCB0byBkbyB3aXRoICIKKwkJCQkgICJUWEZJRF9SQVRFX1BST0JFX01BU0shP1xuIiwgX19mdW5jX18pOwogCQl9CiAJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogCQkJd2xjX3R4Zmlmbyh3bGMsIGZpZm8sIHBrdFtpXSwgaSA9PSAoY291bnQgLSAxKSwKQEAgLTg4Nyw3ICs4MjcsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXZvaWQgQkNNRkFTVFBBVEgKK3ZvaWQKIHdsY19hbXBkdV9kb3R4c3RhdHVzKHN0cnVjdCBhbXBkdV9pbmZvICphbXBkdSwgc3RydWN0IHNjYiAqc2NiLAogCQkgICAgIHN0cnVjdCBza19idWZmICpwLCB0eF9zdGF0dXNfdCAqdHhzKQogewpAQCAtODk4LDggKzgzOCw2IEBACiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvOwogCiAJdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IocCk7Ci0JQVNTRVJUKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSk7Ci0JQVNTRVJUKHR4cy0+c3RhdHVzICYgVFhfU1RBVFVTX0FNUERVKTsKIAogCS8qIEJNQUNfTk9URTogRm9yIHRoZSBzcGxpdCBkcml2ZXIsIHNlY29uZCBsZXZlbCB0eHN0YXR1cyBjb21lcyBsYXRlcgogCSAqIFNvIGlmIHRoZSBBQ0sgd2FzIHJlY2VpdmVkIHRoZW4gd2FpdCBmb3IgdGhlIHNlY29uZCBsZXZlbCBlbHNlIGp1c3QKQEAgLTkxMywyMiArODUxLDE2IEBACiAJCQl1ZGVsYXkoMSk7CiAJCQlzdGF0dXNfZGVsYXkrKzsKIAkJCWlmIChzdGF0dXNfZGVsYXkgPiAxMCkgewotCQkJCUFTU0VSVChzdGF0dXNfZGVsYXkgPD0gMTApOwotCQkJCXJldHVybjsKKwkJCQlyZXR1cm47IC8qIGVycm9yIGNvbmRpdGlvbiAqLwogCQkJfQogCQl9CiAKLQkJQVNTRVJUKCEoczEgJiBUWF9TVEFUVVNfSU5URVJNRURJQVRFKSk7Ci0JCUFTU0VSVChzMSAmIFRYX1NUQVRVU19BTVBEVSk7CiAJCXMyID0gUl9SRUcoJndsYy0+cmVncy0+ZnJtdHhzdGF0dXMyKTsKIAl9CiAKIAlpZiAobGlrZWx5KHNjYikpIHsKLQkJQVNTRVJUKHNjYi0+bWFnaWMgPT0gU0NCX01BR0lDKTsKIAkJc2NiX2FtcGR1ID0gU0NCX0FNUERVX0NVQkJZKGFtcGR1LCBzY2IpOwotCQlBU1NFUlQoc2NiX2FtcGR1KTsKIAkJaW5pID0gU0NCX0FNUERVX0lOSShzY2JfYW1wZHUsIHAtPnByaW9yaXR5KTsKLQkJQVNTRVJUKGluaS0+c2NiID09IHNjYik7CiAJCXdsY19hbXBkdV9kb3R4c3RhdHVzX2NvbXBsZXRlKGFtcGR1LCBzY2IsIHAsIHR4cywgczEsIHMyKTsKIAl9IGVsc2UgewogCQkvKiBsb29wIHRocm91Z2ggYWxsIHBrdHMgYW5kIGZyZWUgKi8KQEAgLTkzOSwyMSArODcxLDE5IEBACiAJCQl0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihwKTsKIAkJCXR4aCA9IChkMTF0eGhfdCAqKSBwLT5kYXRhOwogCQkJbWNsID0gbGUxNl90b19jcHUodHhoLT5NYWNUeENvbnRyb2xMb3cpOwotCQkJQVNTRVJUKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSk7Ci0JCQlwa3RfYnVmX2ZyZWVfc2tiKHApOworCQkJYmNtX3BrdF9idWZfZnJlZV9za2IocCk7CiAJCQkvKiBicmVhayBvdXQgaWYgbGFzdCBwYWNrZXQgb2YgYW1wZHUgKi8KIAkJCWlmICgoKG1jbCAmIFRYQ19BTVBEVV9NQVNLKSA+PiBUWENfQU1QRFVfU0hJRlQpID09CiAJCQkgICAgVFhDX0FNUERVX0xBU1QpCiAJCQkJYnJlYWs7CiAJCQlwID0gR0VUTkVYVFRYUCh3bGMsIHF1ZXVlKTsKLQkJCUFTU0VSVChwICE9IE5VTEwpOwogCQl9CiAJCXdsY190eGZpZm9fY29tcGxldGUod2xjLCBxdWV1ZSwgYW1wZHUtPnR4cGt0X3dlaWdodCk7CiAJfQogCXdsY19hbXBkdV90eGZsb3djb250cm9sKHdsYywgc2NiX2FtcGR1LCBpbmkpOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogcmF0ZV9zdGF0dXMoc3RydWN0IHdsY19pbmZvICp3bGMsIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbywKIAkgICAgdHhfc3RhdHVzX3QgKnR4cywgdTggbWNzKQogewpAQCAtOTY5LDcgKzg5OSw3IEBACiAKICNkZWZpbmUgU0hPUlROQU1FICJBTVBEVSBzdGF0dXMiCiAKLXN0YXRpYyB2b2lkIEJDTUZBU1RQQVRICitzdGF0aWMgdm9pZAogd2xjX2FtcGR1X2RvdHhzdGF0dXNfY29tcGxldGUoc3RydWN0IGFtcGR1X2luZm8gKmFtcGR1LCBzdHJ1Y3Qgc2NiICpzY2IsCiAJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcCwgdHhfc3RhdHVzX3QgKnR4cywKIAkJCSAgICAgIHUzMiBzMSwgdTMyIHMyKQpAQCAtOTkxLDMwICs5MjEsMjEgQEAKIAl1OCBhbnRzZWxpZCA9IDA7CiAJdTggcmV0cnlfbGltaXQsIHJyX3JldHJ5X2xpbWl0OwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IocCk7CisJc3RydWN0IHdpcGh5ICp3aXBoeSA9IHdsYy0+d2lwaHk7CiAKICNpZmRlZiBCQ01EQkcKIAl1OCBob2xlW0FNUERVX01BWF9NUERVXTsKIAltZW1zZXQoaG9sZSwgMCwgc2l6ZW9mKGhvbGUpKTsKICNlbmRpZgogCi0JQVNTRVJUKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSk7Ci0JQVNTRVJUKHR4cy0+c3RhdHVzICYgVFhfU1RBVFVTX0FNUERVKTsKLQogCXNjYl9hbXBkdSA9IFNDQl9BTVBEVV9DVUJCWShhbXBkdSwgc2NiKTsKLQlBU1NFUlQoc2NiX2FtcGR1KTsKLQogCXRpZCA9ICh1OCkgKHAtPnByaW9yaXR5KTsKIAogCWluaSA9IFNDQl9BTVBEVV9JTkkoc2NiX2FtcGR1LCB0aWQpOwogCXJldHJ5X2xpbWl0ID0gYW1wZHUtPnJldHJ5X2xpbWl0X3RpZFt0aWRdOwogCXJyX3JldHJ5X2xpbWl0ID0gYW1wZHUtPnJyX3JldHJ5X2xpbWl0X3RpZFt0aWRdOwotCi0JQVNTRVJUKGluaS0+c2NiID09IHNjYik7Ci0KIAltZW1zZXQoYml0bWFwLCAwLCBzaXplb2YoYml0bWFwKSk7CiAJcXVldWUgPSB0eHMtPmZyYW1laWQgJiBUWEZJRF9RVUVVRV9NQVNLOwotCUFTU0VSVChxdWV1ZSA8IEFDX0NPVU5UKTsKLQogCXN1cHJfc3RhdHVzID0gdHhzLT5zdGF0dXMgJiBUWF9TVEFUVVNfU1VQUl9NQVNLOwogCiAJaWYgKHR4cy0+c3RhdHVzICYgVFhfU1RBVFVTX0FDS19SQ1YpIHsKQEAgLTEwMjIsMTMgKzk0MywxMyBAQAogCQkJdXBkYXRlX3JhdGUgPSBmYWxzZTsKIAkJfQogCi0JCUFTU0VSVCh0eHMtPnN0YXR1cyAmIFRYX1NUQVRVU19JTlRFUk1FRElBVEUpOworCQlXQVJOX09OKCEodHhzLT5zdGF0dXMgJiBUWF9TVEFUVVNfSU5URVJNRURJQVRFKSk7CiAJCXN0YXJ0X3NlcSA9IHR4cy0+c2VxdWVuY2UgPj4gU0VRTlVNX1NISUZUOwogCQliaXRtYXBbMF0gPSAodHhzLT5zdGF0dXMgJiBUWF9TVEFUVVNfQkFfQk1BUDAzX01BU0spID4+CiAJCSAgICBUWF9TVEFUVVNfQkFfQk1BUDAzX1NISUZUOwogCi0JCUFTU0VSVCghKHMxICYgVFhfU1RBVFVTX0lOVEVSTUVESUFURSkpOwotCQlBU1NFUlQoczEgJiBUWF9TVEFUVVNfQU1QRFUpOworCQlXQVJOX09OKHMxICYgVFhfU1RBVFVTX0lOVEVSTUVESUFURSk7CisJCVdBUk5fT04oIShzMSAmIFRYX1NUQVRVU19BTVBEVSkpOwogCiAJCWJpdG1hcFswXSB8PQogCQkgICAgKHMxICYgVFhfU1RBVFVTX0JBX0JNQVA0N19NQVNLKSA8PApAQCAtMTA0NCwzMCArOTY1LDI0IEBACiAKIAkJYmFfcmVjZCA9IHRydWU7CiAJfSBlbHNlIHsKLQkJV0xDTlRJTkNSKGFtcGR1LT5jbnQtPm5vYmEpOwogCQlpZiAoc3Vwcl9zdGF0dXMpIHsKIAkJCXVwZGF0ZV9yYXRlID0gZmFsc2U7CiAJCQlpZiAoc3Vwcl9zdGF0dXMgPT0gVFhfU1RBVFVTX1NVUFJfQkFEQ0gpIHsKLQkJCQlXTF9FUlJPUigiJXM6IFBrdCB0eCBzdXBwcmVzc2VkLCBpbGxlZ2FsIGNoYW5uZWwgcG9zc2libHkgJWRcbiIsCi0JCQkJCSBfX2Z1bmNfXywKLQkJCQkJIENIU1BFQ19DSEFOTkVMKHdsYy0+ZGVmYXVsdF9ic3MtPmNoYW5zcGVjKSk7CisJCQkJd2lwaHlfZXJyKHdpcGh5LCAiJXM6IFBrdCB0eCBzdXBwcmVzc2VkLCAiCisJCQkJCSAgImlsbGVnYWwgY2hhbm5lbCBwb3NzaWJseSAlZFxuIiwKKwkJCQkJICBfX2Z1bmNfXywgQ0hTUEVDX0NIQU5ORUwoCisJCQkJCSAgd2xjLT5kZWZhdWx0X2Jzcy0+Y2hhbnNwZWMpKTsKIAkJCX0gZWxzZSB7Ci0JCQkJaWYgKHN1cHJfc3RhdHVzID09IFRYX1NUQVRVU19TVVBSX0ZSQUcpCi0JCQkJCVdMX05PTkUoIiVzOiBBTVBEVSBmcmFnIGVyclxuIiwKLQkJCQkJCV9fZnVuY19fKTsKLQkJCQllbHNlCi0JCQkJCVdMX0VSUk9SKCIlczogd2xjX2FtcGR1X2RvdHhzdGF0dXM6IHN1cHJfc3RhdHVzIDB4JXhcbiIsCisJCQkJaWYgKHN1cHJfc3RhdHVzICE9IFRYX1NUQVRVU19TVVBSX0ZSQUcpCisJCQkJCXdpcGh5X2Vycih3aXBoeSwgIiVzOiB3bGNfYW1wZHVfZG90eCIKKwkJCQkJCSAgInN0YXR1czpzdXByX3N0YXR1cyAweCV4XG4iLAogCQkJCQkJIF9fZnVuY19fLCBzdXByX3N0YXR1cyk7CiAJCQl9CiAJCQkvKiBubyBuZWVkIHRvIHJldHJ5IGZvciBiYWRjaDsgd2lsbCBmYWlsIGFnYWluICovCiAJCQlpZiAoc3Vwcl9zdGF0dXMgPT0gVFhfU1RBVFVTX1NVUFJfQkFEQ0ggfHwKIAkJCSAgICBzdXByX3N0YXR1cyA9PSBUWF9TVEFUVVNfU1VQUl9FWFBUSU1FKSB7CiAJCQkJcmV0cnkgPSBmYWxzZTsKLQkJCQl3bGMtPnB1Yi0+X2NudC0+dHhjaGFucmVqKys7CiAJCQl9IGVsc2UgaWYgKHN1cHJfc3RhdHVzID09IFRYX1NUQVRVU19TVVBSX0VYUFRJTUUpIHsKLQotCQkJCXdsYy0+cHViLT5fY250LT50eGV4cHRpbWUrKzsKLQogCQkJCS8qIFRYIHVuZGVyZmxvdyA6IHRyeSB0dW5pbmcgcHJlLWxvYWRpbmcgb3IgYW1wZHUgc2l6ZSAqLwogCQkJfSBlbHNlIGlmIChzdXByX3N0YXR1cyA9PSBUWF9TVEFUVVNfU1VQUl9GUkFHKSB7CiAJCQkJLyogaWYgdGhlcmUgd2VyZSB1bmRlcmZsb3dzLCBidXQgcHJlLWxvYWRpbmcgaXMgbm90IGFjdGl2ZSwKQEAgLTEwODAsMTIgKzk5NSwxMiBAQAogCQkJfQogCQl9IGVsc2UgaWYgKHR4cy0+cGh5ZXJyKSB7CiAJCQl1cGRhdGVfcmF0ZSA9IGZhbHNlOwotCQkJd2xjLT5wdWItPl9jbnQtPnR4cGh5ZXJyKys7Ci0JCQlXTF9FUlJPUigid2wlZDogd2xjX2FtcGR1X2RvdHhzdGF0dXM6IHR4IHBoeSBlcnJvciAoMHgleClcbiIsCi0JCQkJIHdsYy0+cHViLT51bml0LCB0eHMtPnBoeWVycik7CisJCQl3aXBoeV9lcnIod2lwaHksICJ3bCVkOiB3bGNfYW1wZHVfZG90eHN0YXR1czogdHggcGh5ICIKKwkJCQkgICJlcnJvciAoMHgleClcbiIsIHdsYy0+cHViLT51bml0LAorCQkJCSAgdHhzLT5waHllcnIpOwogCiAJCQlpZiAoV0xfRVJST1JfT04oKSkgewotCQkJCXBycGt0KCJ0eHBrdCAoQU1QRFUpIiwgcCk7CisJCQkJYmNtX3BycGt0KCJ0eHBrdCAoQU1QRFUpIiwgcCk7CiAJCQkJd2xjX3ByaW50X3R4ZGVzYygoZDExdHhoX3QgKikgcC0+ZGF0YSk7CiAJCQl9CiAJCQl3bGNfcHJpbnRfdHhzdGF0dXModHhzKTsKQEAgLTEwOTUsNyArMTAxMCw2IEBACiAJLyogbG9vcCB0aHJvdWdoIGFsbCBwa3RzIGFuZCByZXRyeSBpZiBub3QgYWNrZWQgKi8KIAl3aGlsZSAocCkgewogCQl0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihwKTsKLQkJQVNTRVJUKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSk7CiAJCXR4aCA9IChkMTF0eGhfdCAqKSBwLT5kYXRhOwogCQltY2wgPSBsZTE2X3RvX2NwdSh0eGgtPk1hY1R4Q29udHJvbExvdyk7CiAJCXBsY3AgPSAodTggKikgKHR4aCArIDEpOwpAQCAtMTExMSwxMSArMTAyNSwxMCBAQAogCQlhY2tfcmVjZCA9IGZhbHNlOwogCQlpZiAoYmFfcmVjZCkgewogCQkJYmluZGV4ID0gTU9EU1VCX1BPVzIoc2VxLCBzdGFydF9zZXEsIFNFUU5VTV9NQVgpOwotCi0JCQlXTF9BTVBEVV9UWCgiJXM6IHRpZCAlZCBzZXEgaXMgJWQsIHN0YXJ0X3NlcSBpcyAlZCwgYmluZGV4IGlzICVkIHNldCAlZCwgaW5kZXggJWRcbiIsCi0JCQkJICAgIF9fZnVuY19fLCB0aWQsIHNlcSwgc3RhcnRfc2VxLCBiaW5kZXgsCi0JCQkJICAgIGlzc2V0KGJpdG1hcCwgYmluZGV4KSwgaW5kZXgpOwotCisJCQlCQ01NU0cod2xjLT53aXBoeSwgInRpZCAlZCBzZXEgJWQsIgorCQkJCSIgc3RhcnRfc2VxICVkLCBiaW5kZXggJWQgc2V0ICVkLCBpbmRleCAlZFxuIiwKKwkJCQl0aWQsIHNlcSwgc3RhcnRfc2VxLCBiaW5kZXgsCisJCQkJaXNzZXQoYml0bWFwLCBiaW5kZXgpLCBpbmRleCk7CiAJCQkvKiBpZiBhY2tlZCB0aGVuIGNsZWFyIGJpdCBhbmQgZnJlZSBwYWNrZXQgKi8KIAkJCWlmICgoYmluZGV4IDwgQU1QRFVfVFhfQkFfTUFYX1dTSVpFKQogCQkJICAgICYmIGlzc2V0KGJpdG1hcCwgYmluZGV4KSkgewpAQCAtMTEyMywyMSArMTAzNiwxMiBAQAogCQkJCWluaS0+dHhyZXRyeVtpbmRleF0gPSAwOwogCiAJCQkJLyogYW1wZHVfYWNrX2xlbjogbnVtYmVyIG9mIGFja2VkIGFnZ3JlZ2F0ZWQgZnJhbWVzICovCi0JCQkJLyogYW1wZHVfYWNrX21hcDogYmxvY2sgYWNrIGJpdCBtYXAgZm9yIHRoZSBhZ2dyZWdhdGlvbiAqLwogCQkJCS8qIGFtcGR1X2xlbjogbnVtYmVyIG9mIGFnZ3JlZ2F0ZWQgZnJhbWVzICovCiAJCQkJcmF0ZV9zdGF0dXMod2xjLCB0eF9pbmZvLCB0eHMsIG1jcyk7CiAJCQkJdHhfaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOwogCQkJCXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FNUERVOwotCi0JCQkJLyogWFhYIFRPRE86IE1ha2UgdGhlc2UgYWNjdXJhdGUuICovCiAJCQkJdHhfaW5mby0+c3RhdHVzLmFtcGR1X2Fja19sZW4gPQotCQkJCSAgICAodHhzLT4KLQkJCQkgICAgIHN0YXR1cyAmIFRYX1NUQVRVU19GUk1fUlRYX01BU0spID4+Ci0JCQkJICAgIFRYX1NUQVRVU19GUk1fUlRYX1NISUZUOwotCQkJCXR4X2luZm8tPnN0YXR1cy5hbXBkdV9sZW4gPQotCQkJCSAgICAodHhzLT4KLQkJCQkgICAgIHN0YXR1cyAmIFRYX1NUQVRVU19GUk1fUlRYX01BU0spID4+Ci0JCQkJICAgIFRYX1NUQVRVU19GUk1fUlRYX1NISUZUOworCQkJCQl0eF9pbmZvLT5zdGF0dXMuYW1wZHVfbGVuID0gMTsKIAogCQkJCXNrYl9wdWxsKHAsIEQxMV9QSFlfSERSX0xFTik7CiAJCQkJc2tiX3B1bGwocCwgRDExX1RYSF9MRU4pOwpAQCAtMTE2MywxMiArMTA2NywxNSBAQAogCQkJCS8qIFJldHJ5IHRpbWVvdXQgKi8KIAkJCQlpbmktPnR4X2luX3RyYW5zaXQtLTsKIAkJCQlpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXModHhfaW5mbyk7CisJCQkJdHhfaW5mby0+c3RhdHVzLmFtcGR1X2Fja19sZW4gPSAwOworCQkJCXR4X2luZm8tPnN0YXR1cy5hbXBkdV9sZW4gPSAxOwogCQkJCXR4X2luZm8tPmZsYWdzIHw9CiAJCQkJICAgIElFRUU4MDIxMV9UWF9TVEFUX0FNUERVX05PX0JBQ0s7CiAJCQkJc2tiX3B1bGwocCwgRDExX1BIWV9IRFJfTEVOKTsKIAkJCQlza2JfcHVsbChwLCBEMTFfVFhIX0xFTik7Ci0JCQkJV0xfRVJST1IoIiVzOiBCQSBUaW1lb3V0LCBzZXEgJWQsIGluX3RyYW5zaXQgJWRcbiIsCi0JCQkJCSBTSE9SVE5BTUUsIHNlcSwgaW5pLT50eF9pbl90cmFuc2l0KTsKKwkJCQl3aXBoeV9lcnIod2lwaHksICIlczogQkEgVGltZW91dCwgc2VxICVkLCBpbl8iCisJCQkJCSJ0cmFuc2l0ICVkXG4iLCBTSE9SVE5BTUUsIHNlcSwKKwkJCQkJaW5pLT50eF9pbl90cmFuc2l0KTsKIAkJCQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUod2xjLT5wdWItPmllZWVfaHcsCiAJCQkJCQkJICAgIHApOwogCQkJfQpAQCAtMTE4MSwxMiArMTA4OCw4IEBACiAJCQlicmVhazsKIAogCQlwID0gR0VUTkVYVFRYUCh3bGMsIHF1ZXVlKTsKLQkJaWYgKHAgPT0gTlVMTCkgewotCQkJQVNTRVJUKHApOwotCQkJYnJlYWs7Ci0JCX0KIAl9Ci0Jd2xjX3NlbmRfcSh3bGMsIHdsYy0+YWN0aXZlX3F1ZXVlKTsKKwl3bGNfc2VuZF9xKHdsYyk7CiAKIAkvKiB1cGRhdGUgcmF0ZSBzdGF0ZSAqLwogCWFudHNlbGlkID0gd2xjX2FudHNlbF9hbnRzZWwyaWQod2xjLT5hc2ksIG1pbW9hbnRzZWwpOwpAQCAtMTE5NCwyOCArMTA5Nyw2IEBACiAJd2xjX3R4Zmlmb19jb21wbGV0ZSh3bGMsIHF1ZXVlLCBhbXBkdS0+dHhwa3Rfd2VpZ2h0KTsKIH0KIAotc3RhdGljIHZvaWQKLWFtcGR1X2NsZWFudXBfdGlkX2luaShzdHJ1Y3QgYW1wZHVfaW5mbyAqYW1wZHUsIHNjYl9hbXBkdV90ICpzY2JfYW1wZHUsIHU4IHRpZCwKLQkJICAgICAgYm9vbCBmb3JjZSkKLXsKLQlzY2JfYW1wZHVfdGlkX2luaV90ICppbmk7Ci0JaW5pID0gU0NCX0FNUERVX0lOSShzY2JfYW1wZHUsIHRpZCk7Ci0JaWYgKCFpbmkpCi0JCXJldHVybjsKLQotCVdMX0FNUERVX0NUTCgid2wlZDogYW1wZHVfY2xlYW51cF90aWRfaW5pOiB0aWQgJWRcbiIsCi0JCSAgICAgYW1wZHUtPndsYy0+cHViLT51bml0LCB0aWQpOwotCi0JaWYgKGluaS0+dHhfaW5fdHJhbnNpdCAmJiAhZm9yY2UpCi0JCXJldHVybjsKLQotCXNjYl9hbXBkdSA9IFNDQl9BTVBEVV9DVUJCWShhbXBkdSwgaW5pLT5zY2IpOwotCUFTU0VSVChpbmkgPT0gJnNjYl9hbXBkdS0+aW5pW2luaS0+dGlkXSk7Ci0KLQkvKiBmcmVlIGFsbCBidWZmZXJlZCB0eCBwYWNrZXRzICovCi0JcGt0cV9wZmx1c2goJnNjYl9hbXBkdS0+dHhxLCBpbmktPnRpZCwgdHJ1ZSwgTlVMTCwgMCk7Ci19Ci0KIC8qIGluaXRpYWxpemUgdGhlIGluaXRpYXRvciBjb2RlIGZvciB0aWQgKi8KIHN0YXRpYyBzY2JfYW1wZHVfdGlkX2luaV90ICp3bGNfYW1wZHVfaW5pdF90aWRfaW5pKHN0cnVjdCBhbXBkdV9pbmZvICphbXBkdSwKIAkJCQkJCSAgIHNjYl9hbXBkdV90ICpzY2JfYW1wZHUsCkBAIC0xMjIzLDE0ICsxMTA0LDEwIEBACiB7CiAJc2NiX2FtcGR1X3RpZF9pbmlfdCAqaW5pOwogCi0JQVNTRVJUKHNjYl9hbXBkdSk7Ci0JQVNTRVJUKHNjYl9hbXBkdS0+c2NiKTsKLQlBU1NFUlQoU0NCX0FNUERVKHNjYl9hbXBkdS0+c2NiKSk7Ci0JQVNTRVJUKHRpZCA8IEFNUERVX01BWF9TQ0JfVElEKTsKLQogCS8qIGNoZWNrIGZvciBwZXItdGlkIGNvbnRyb2wgb2YgYW1wZHUgKi8KIAlpZiAoIWFtcGR1LT5pbmlfZW5hYmxlW3RpZF0pIHsKLQkJV0xfRVJST1IoIiVzOiBSZWplY3RpbmcgdGlkICVkXG4iLCBfX2Z1bmNfXywgdGlkKTsKKwkJd2lwaHlfZXJyKGFtcGR1LT53bGMtPndpcGh5LCAiJXM6IFJlamVjdGluZyB0aWQgJWRcbiIsCisJCQkgIF9fZnVuY19fLCB0aWQpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTEyMzgsOCArMTExNSw2IEBACiAJaW5pLT50aWQgPSB0aWQ7CiAJaW5pLT5zY2IgPSBzY2JfYW1wZHUtPnNjYjsKIAlpbmktPm1hZ2ljID0gSU5JX01BR0lDOwotCVdMQ05USU5DUihhbXBkdS0+Y250LT50eGFkZGJhcmVxKTsKLQogCXJldHVybiBpbmk7CiB9CiAKQEAgLTEyNTEsMTQgKzExMjYsMTQgQEAKIAogCWlmIChvbikgewogCQlpZiAoIU5fRU5BQih3bGMtPnB1YikpIHsKLQkJCVdMX0FNUERVX0VSUigid2wlZDogZHJpdmVyIG5vdCBubW9kZSBlbmFibGVkXG4iLAotCQkJCSAgICAgd2xjLT5wdWItPnVuaXQpOwotCQkJcmV0dXJuIEJDTUVfVU5TVVBQT1JURUQ7CisJCQl3aXBoeV9lcnIoYW1wZHUtPndsYy0+d2lwaHksICJ3bCVkOiBkcml2ZXIgbm90ICIKKwkJCQkibm1vZGUgZW5hYmxlZFxuIiwgd2xjLT5wdWItPnVuaXQpOworCQkJcmV0dXJuIC1FTk9UU1VQUDsKIAkJfQogCQlpZiAoIXdsY19hbXBkdV9jYXAoYW1wZHUpKSB7Ci0JCQlXTF9BTVBEVV9FUlIoIndsJWQ6IGRldmljZSBub3QgYW1wZHUgY2FwYWJsZVxuIiwKLQkJCQkgICAgIHdsYy0+cHViLT51bml0KTsKLQkJCXJldHVybiBCQ01FX1VOU1VQUE9SVEVEOworCQkJd2lwaHlfZXJyKGFtcGR1LT53bGMtPndpcGh5LCAid2wlZDogZGV2aWNlIG5vdCAiCisJCQkJImFtcGR1IGNhcGFibGVcbiIsIHdsYy0+cHViLT51bml0KTsKKwkJCXJldHVybiAtRU5PVFNVUFA7CiAJCX0KIAkJd2xjLT5wdWItPl9hbXBkdSA9IG9uOwogCX0KQEAgLTEyOTUsNDMgKzExNzAsNiBAQAogCX0KIH0KIAotdTggQkNNRkFTVFBBVEgKLXdsY19hbXBkdV9udWxsX2RlbGltX2NudChzdHJ1Y3QgYW1wZHVfaW5mbyAqYW1wZHUsIHN0cnVjdCBzY2IgKnNjYiwKLQkJCSByYXRlc3BlY190IHJzcGVjLCBpbnQgcGh5bGVuKQotewotCXNjYl9hbXBkdV90ICpzY2JfYW1wZHU7Ci0JaW50IGJ5dGVzLCBjbnQsIHRtcDsKLQl1OCB0eF9kZW5zaXR5OwotCi0JQVNTRVJUKHNjYik7Ci0JQVNTRVJUKFNDQl9BTVBEVShzY2IpKTsKLQotCXNjYl9hbXBkdSA9IFNDQl9BTVBEVV9DVUJCWShhbXBkdSwgc2NiKTsKLQlBU1NFUlQoc2NiX2FtcGR1KTsKLQotCWlmIChzY2JfYW1wZHUtPm1wZHVfZGVuc2l0eSA9PSAwKQotCQlyZXR1cm4gMDsKLQotCS8qIFJTUEVDMlJBVEUgaXMgaW4ga2JwcyB1bml0cyA9PT4gflJTUEVDMlJBVEUvMl4xMyBpcyBpbiBieXRlcy91c2VjCi0JICAgZGVuc2l0eSB4IGlzIGluIDJeKHgtNCkgdXNlYwotCSAgID09PiAjIG9mIGJ5dGVzIG5lZWRlZCBmb3IgcmVxIGRlbnNpdHkgPSByYXRlLzJeKDE3LXgpCi0JICAgPT0+ICMgb2YgbnVsbCBkZWxpbWl0ZXJzID0gY2VpbChjZWlsKHJhdGUvMl4oMTcteCkpIC0gcGh5bGVuKS80KQotCSAqLwotCi0JdHhfZGVuc2l0eSA9IHNjYl9hbXBkdS0+bXBkdV9kZW5zaXR5OwotCi0JQVNTRVJUKHR4X2RlbnNpdHkgPD0gQU1QRFVfTUFYX01QRFVfREVOU0lUWSk7Ci0JdG1wID0gMSA8PCAoMTcgLSB0eF9kZW5zaXR5KTsKLQlieXRlcyA9IENFSUwoUlNQRUMyUkFURShyc3BlYyksIHRtcCk7Ci0KLQlpZiAoYnl0ZXMgPiBwaHlsZW4pIHsKLQkJY250ID0gQ0VJTChieXRlcyAtIHBoeWxlbiwgQU1QRFVfREVMSU1JVEVSX0xFTik7Ci0JCUFTU0VSVChjbnQgPD0gMjU1KTsKLQkJcmV0dXJuICh1OCkgY250OwotCX0gZWxzZQotCQlyZXR1cm4gMDsKLX0KLQogdm9pZCB3bGNfYW1wZHVfbWFjYWRkcl91cGQoc3RydWN0IHdsY19pbmZvICp3bGMpCiB7CiAJY2hhciB0ZW1wbGF0ZVtUX1JBTV9BQ0NFU1NfU1ogKiAyXTsKQEAgLTEzNjMsMTcgKzEyMDEsMTEgQEAKIAl9CiB9CiAKLXN0cnVjdCBjYl9kZWxfYW1wZHVfcGFycyB7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKLQl1MTYgdGlkOwotfTsKLQogLyoKICAqIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaGVscHMgZmx1c2hpbmcgYW1wZHUgcGFja2V0cyBmcm9tIGEgcHJpb3JpdHkgcXVldWUKICAqLwotc3RhdGljIGJvb2wgY2JfZGVsX2FtcGR1X3BrdCh2b2lkICpwLCBpbnQgYXJnX2EpCitzdGF0aWMgYm9vbCBjYl9kZWxfYW1wZHVfcGt0KHN0cnVjdCBza19idWZmICptcGR1LCB2b2lkICphcmdfYSkKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbXBkdSA9IChzdHJ1Y3Qgc2tfYnVmZiAqKXA7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihtcGR1KTsKIAlzdHJ1Y3QgY2JfZGVsX2FtcGR1X3BhcnMgKmFtcGR1X3BhcnMgPQogCQkJCSAoc3RydWN0IGNiX2RlbF9hbXBkdV9wYXJzICopYXJnX2E7CkBAIC0xNDA2LDcgKzEyMzgsNyBAQAogdm9pZCB3bGNfYW1wZHVfZmx1c2goc3RydWN0IHdsY19pbmZvICp3bGMsCiAJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCkKIHsKLQlzdHJ1Y3Qgd2xjX3R4cV9pbmZvICpxaSA9IHdsYy0+YWN0aXZlX3F1ZXVlOworCXN0cnVjdCB3bGNfdHhxX2luZm8gKnFpID0gd2xjLT5wa3RfcXVldWU7CiAJc3RydWN0IHBrdHEgKnBxID0gJnFpLT5xOwogCWludCBwcmVjOwogCXN0cnVjdCBjYl9kZWxfYW1wZHVfcGFycyBhbXBkdV9wYXJzOwpAQCAtMTQxNCw4ICsxMjQ2LDggQEAKIAlhbXBkdV9wYXJzLnN0YSA9IHN0YTsKIAlhbXBkdV9wYXJzLnRpZCA9IHRpZDsKIAlmb3IgKHByZWMgPSAwOyBwcmVjIDwgcHEtPm51bV9wcmVjOyBwcmVjKyspIHsKLQkJcGt0cV9wZmx1c2gocHEsIHByZWMsIHRydWUsIGNiX2RlbF9hbXBkdV9wa3QsCi0JCQkgICAgKGludCkmYW1wZHVfcGFycyk7CisJCWJjbV9wa3RxX3BmbHVzaChwcSwgcHJlYywgdHJ1ZSwgY2JfZGVsX2FtcGR1X3BrdCwKKwkJCSAgICAodm9pZCAqKSZhbXBkdV9wYXJzKTsKIAl9CiAJd2xjX2ludmFsX2RtYV9wa3RzKHdsYy0+aHcsIHN0YSwgZG1hX2NiX2ZuX2FtcGR1KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX2FtcGR1LmggYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19hbXBkdS5oCmluZGV4IDE3ZTllYmMuLjYzZDQwM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX2FtcGR1LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfYW1wZHUuaApAQCAtMjMsMTAgKzIzLDcgQEAKIAkJCSBzdHJ1Y3Qgc2tfYnVmZiAqKmFnZ3AsIGludCBwcmVjKTsKIGV4dGVybiB2b2lkIHdsY19hbXBkdV9kb3R4c3RhdHVzKHN0cnVjdCBhbXBkdV9pbmZvICphbXBkdSwgc3RydWN0IHNjYiAqc2NiLAogCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqcCwgdHhfc3RhdHVzX3QgKnR4cyk7Ci1leHRlcm4gdm9pZCB3bGNfYW1wZHVfcmVzZXQoc3RydWN0IGFtcGR1X2luZm8gKmFtcGR1KTsKIGV4dGVybiB2b2lkIHdsY19hbXBkdV9tYWNhZGRyX3VwZChzdHJ1Y3Qgd2xjX2luZm8gKndsYyk7CiBleHRlcm4gdm9pZCB3bGNfYW1wZHVfc2htX3VwZChzdHJ1Y3QgYW1wZHVfaW5mbyAqYW1wZHUpOwotZXh0ZXJuIHU4IHdsY19hbXBkdV9udWxsX2RlbGltX2NudChzdHJ1Y3QgYW1wZHVfaW5mbyAqYW1wZHUsIHN0cnVjdCBzY2IgKnNjYiwKLQkJCQkgICAgICByYXRlc3BlY190IHJzcGVjLCBpbnQgcGh5bGVuKTsKIAogI2VuZGlmCQkJCS8qIF93bGNfYW1wZHVfaF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX2FudHNlbC5jIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfYW50c2VsLmMKaW5kZXggODVhNzNhOS4uMTExZWYzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfYW50c2VsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfYW50c2VsLmMKQEAgLTIyLDcgKzIyLDggQEAKIAogI2luY2x1ZGUgPGJjbWRlZnMuaD4KICNpbmNsdWRlIDxiY211dGlscy5oPgotI2luY2x1ZGUgPHNpdXRpbHMuaD4KKyNpbmNsdWRlIDxiY21udnJhbS5oPgorI2luY2x1ZGUgPGFpdXRpbHMuaD4KICNpbmNsdWRlIDxiY21kZXZzLmg+CiAjaW5jbHVkZSA8c2JobmRkbWEuaD4KICNpbmNsdWRlIDx3bGlvY3RsLmg+CkBAIC05OCw4ICs5OSw4IEBACiAKIAlhc2kgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYW50c2VsX2luZm8pLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWFzaSkgewotCQlXTF9FUlJPUigid2wlZDogd2xjX2FudHNlbF9hdHRhY2g6IG91dCBvZiBtZW1cbiIsCi0JCQkgd2xjLT5wdWItPnVuaXQpOworCQl3aXBoeV9lcnIod2xjLT53aXBoeSwgIndsJWQ6IHdsY19hbnRzZWxfYXR0YWNoOiBvdXQgb2YgbWVtXG4iLAorCQkJICB3bGMtPnB1Yi0+dW5pdCk7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtMTI4LDggKzEyOSw4IEBACiAJCQkJYXNpLT5hbnRzZWxfYXZhaWwgPSBmYWxzZTsKIAkJCX0gZWxzZSB7CiAJCQkJYXNpLT5hbnRzZWxfYXZhaWwgPSBmYWxzZTsKLQkJCQlXTF9FUlJPUigid2xjX2FudHNlbF9hdHRhY2g6IDJvMyBib2FyZCBjZmcgaW52YWxpZFxuIik7Ci0JCQkJQVNTRVJUKDApOworCQkJCXdpcGh5X2Vycih3bGMtPndpcGh5LCAid2xjX2FudHNlbF9hdHRhY2g6IDJvMyAiCisJCQkJCSAgImJvYXJkIGNmZyBpbnZhbGlkXG4iKTsKIAkJCX0KIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtMjAwLDcgKzIwMSw3IEBACiAJfQogfQogCi12b2lkIEJDTUZBU1RQQVRICit2b2lkCiB3bGNfYW50c2VsX2FudGNmZ19nZXQoc3RydWN0IGFudHNlbF9pbmZvICphc2ksIGJvb2wgdXNlZGVmLCBib29sIHNlbCwKIAkJICAgICAgdTggYW50c2VsaWQsIHU4IGZiYW50c2VsaWQsIHU4ICphbnRjZmcsCiAJCSAgICAgIHU4ICpmYmFudGNmZykKQEAgLTI5Nyw4ICsyOTgsNiBAQAogCXU4IGFudF9jZmc7CiAJdTE2IG1pbW9fYW50c2VsOwogCi0JQVNTRVJUKGFzaS0+YW50c2VsX3R5cGUgIT0gQU5UU0VMX05BKTsKLQogCS8qIDEpIFVwZGF0ZSBUWCBhbnRjb25maWcgZm9yIGFsbCBmcmFtZXMgdGhhdCBhcmUgbm90IHVuaWNhc3QgZGF0YQogCSAqICAgIChha2EgZGVmYXVsdCBUWCkKIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX2JtYWMuYyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX2JtYWMuYwppbmRleCA0YjZlMTgxLi40NTM0OTI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19ibWFjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfYm1hYy5jCkBAIC0yNSwxOSArMjUsMjAgQEAKICNpbmNsdWRlIDxiY21kZWZzLmg+CiAjaW5jbHVkZSA8YmNtZGV2cy5oPgogI2luY2x1ZGUgPGJjbXdpZmkuaD4KLSNpbmNsdWRlIDxzaXV0aWxzLmg+CisjaW5jbHVkZSA8YWl1dGlscy5oPgogI2luY2x1ZGUgPGJjbXNyb20uaD4KICNpbmNsdWRlIDxiY21vdHAuaD4KICNpbmNsdWRlIDxiY211dGlscy5oPgorI2luY2x1ZGUgPGJjbW52cmFtLmg+CiAjaW5jbHVkZSA8d2xpb2N0bC5oPgogI2luY2x1ZGUgPHNiY29uZmlnLmg+CiAjaW5jbHVkZSA8c2JjaGlwYy5oPgogI2luY2x1ZGUgPHBjaWNmZy5oPgogI2luY2x1ZGUgPHNiaG5kZG1hLmg+CiAjaW5jbHVkZSA8aG5kZG1hLmg+Ci0jaW5jbHVkZSA8aG5kcG11Lmg+CiAKICNpbmNsdWRlICJ3bGNfdHlwZXMuaCIKKyNpbmNsdWRlICJ3bGNfcG11LmgiCiAjaW5jbHVkZSAiZDExLmgiCiAjaW5jbHVkZSAid2xjX2NmZy5oIgogI2luY2x1ZGUgIndsY19yYXRlLmgiCkBAIC0yMDAsNiArMjAxLDggQEAKIAogc3RhdGljIHZvaWQgV0xCQU5ESU5JVEZOKHdsY191Y29kZV9ic2luaXQpIChzdHJ1Y3Qgd2xjX2h3X2luZm8gKndsY19odykKIHsKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gd2xjX2h3LT53bGMtPndpcGh5OworCiAJLyogaW5pdCBtaWNyb2NvZGUgaG9zdCBmbGFncyAqLwogCXdsY193cml0ZV9taGYod2xjX2h3LCB3bGNfaHctPmJhbmQtPm1oZnMpOwogCkBAIC0yMDgsMjAgKzIxMSwyMSBAQAogCQlpZiAoV0xDSVNOUEhZKHdsY19ody0+YmFuZCkpIHsKIAkJCXdsY193cml0ZV9pbml0cyh3bGNfaHcsIGQxMW4wYnNpbml0dmFsczE2KTsKIAkJfSBlbHNlIHsKLQkJCVdMX0VSUk9SKCIlczogd2wlZDogdW5zdXBwb3J0ZWQgcGh5IGluIGNvcmVyZXYgJWRcbiIsCi0JCQkJIF9fZnVuY19fLCB3bGNfaHctPnVuaXQsIHdsY19ody0+Y29yZXJldik7CisJCQl3aXBoeV9lcnIod2lwaHksICIlczogd2wlZDogdW5zdXBwb3J0ZWQgcGh5IGluIGNvcmVyZXYiCisJCQkJICAiICVkXG4iLCBfX2Z1bmNfXywgd2xjX2h3LT51bml0LAorCQkJCSAgd2xjX2h3LT5jb3JlcmV2KTsKIAkJfQogCX0gZWxzZSB7CiAJCWlmIChEMTFSRVZfSVMod2xjX2h3LT5jb3JlcmV2LCAyNCkpIHsKIAkJCWlmIChXTENJU0xDTlBIWSh3bGNfaHctPmJhbmQpKSB7CiAJCQkJd2xjX3dyaXRlX2luaXRzKHdsY19odywgZDExbGNuMGJzaW5pdHZhbHMyNCk7CiAJCQl9IGVsc2UKLQkJCQlXTF9FUlJPUigiJXM6IHdsJWQ6IHVuc3VwcG9ydGVkIHBoeSBpbiBjb3JlcmV2ICVkXG4iLAotCQkJCQkgX19mdW5jX18sIHdsY19ody0+dW5pdCwKLQkJCQkJIHdsY19ody0+Y29yZXJldik7CisJCQkJd2lwaHlfZXJyKHdpcGh5LCAiJXM6IHdsJWQ6IHVuc3VwcG9ydGVkIHBoeSBpbiIKKwkJCQkJICAiIGNvcmUgcmV2ICVkXG4iLCBfX2Z1bmNfXywKKwkJCQkJICB3bGNfaHctPnVuaXQsIHdsY19ody0+Y29yZXJldik7CiAJCX0gZWxzZSB7Ci0JCQlXTF9FUlJPUigiJXM6IHdsJWQ6IHVuc3VwcG9ydGVkIGNvcmVyZXYgJWRcbiIsCi0JCQkJIF9fZnVuY19fLCB3bGNfaHctPnVuaXQsIHdsY19ody0+Y29yZXJldik7CisJCQl3aXBoeV9lcnIod2lwaHksICIlczogd2wlZDogdW5zdXBwb3J0ZWQgY29yZXJldiAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgd2xjX2h3LT51bml0LCB3bGNfaHctPmNvcmVyZXYpOwogCQl9CiAJfQogfQpAQCAtMjMyLDEyICsyMzYsOSBAQAogCXN0cnVjdCB3bGNfaHdfaW5mbyAqd2xjX2h3ID0gd2xjLT5odzsKIAl1MzIgbWFjaW50bWFzazsKIAotCVdMX1RSQUNFKCJ3bCVkOiB3bGNfc2V0YmFuZF9pbmFjdFxuIiwgd2xjX2h3LT51bml0KTsKKwlCQ01NU0cod2xjLT53aXBoeSwgIndsJWRcbiIsIHdsY19ody0+dW5pdCk7CiAKLQlBU1NFUlQoYmFuZHVuaXQgIT0gd2xjX2h3LT5iYW5kLT5iYW5kdW5pdCk7Ci0JQVNTRVJUKHNpX2lzY29yZXVwKHdsY19ody0+c2loKSk7Ci0JQVNTRVJUKChSX1JFRygmd2xjX2h3LT5yZWdzLT5tYWNjb250cm9sKSAmIE1DVExfRU5fTUFDKSA9PQotCSAgICAgICAwKTsKKwlXQVJOX09OKChSX1JFRygmd2xjX2h3LT5yZWdzLT5tYWNjb250cm9sKSAmIE1DVExfRU5fTUFDKSAhPSAwKTsKIAogCS8qIGRpc2FibGUgaW50ZXJydXB0cyAqLwogCW1hY2ludG1hc2sgPSB3bF9pbnRyc29mZih3bGMtPndsKTsKQEAgLTI0NSw4ICsyNDYsNiBAQAogCS8qIHJhZGlvIG9mZiAqLwogCXdsY19waHlfc3dpdGNoX3JhZGlvKHdsY19ody0+YmFuZC0+cGksIE9GRik7CiAKLQlBU1NFUlQod2xjX2h3LT5jbGspOwotCiAJd2xjX2JtYWNfY29yZV9waHlfY2xrKHdsY19odywgT0ZGKTsKIAogCXdsY19zZXR4YmFuZCh3bGNfaHcsIGJhbmR1bml0KTsKQEAgLTI1OSw3ICsyNTgsNyBAQAogICogUmV0dXJuIHRydWUgaWYgbW9yZSBmcmFtZXMgbmVlZCB0byBiZSBwcm9jZXNzZWQuIGZhbHNlIG90aGVyd2lzZS4KICAqIFBhcmFtICdib3VuZCcgaW5kaWNhdGVzIG1heC4gIyBmcmFtZXMgdG8gcHJvY2VzcyBiZWZvcmUgYnJlYWsgb3V0LgogICovCi1zdGF0aWMgYm9vbCBCQ01GQVNUUEFUSAorc3RhdGljIGJvb2wKIHdsY19ibWFjX3JlY3Yoc3RydWN0IHdsY19od19pbmZvICp3bGNfaHcsIHVpbnQgZmlmbywgYm9vbCBib3VuZCkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqcDsKQEAgLTI2NywxMCArMjY2LDkgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqdGFpbCA9IE5VTEw7CiAJdWludCBuID0gMDsKIAl1aW50IGJvdW5kX2xpbWl0ID0gYm91bmQgPyB3bGNfaHctPndsYy0+cHViLT50dW5hYmxlcy0+cnhibmQgOiAtMTsKLQl1MzIgdHNmX2gsIHRzZl9sOwogCXdsY19kMTFyeGhkcl90ICp3bGNfcnhoZHIgPSBOVUxMOwogCi0JV0xfVFJBQ0UoIndsJWQ6ICVzXG4iLCB3bGNfaHctPnVuaXQsIF9fZnVuY19fKTsKKwlCQ01NU0cod2xjX2h3LT53bGMtPndpcGh5LCAid2wlZFxuIiwgd2xjX2h3LT51bml0KTsKIAkvKiBnYXRoZXIgcmVjZWl2ZWQgZnJhbWVzICovCiAJd2hpbGUgKChwID0gZG1hX3J4KHdsY19ody0+ZGlbZmlmb10pKSkgewogCkBAIC0yODYsOSArMjg0LDYgQEAKIAkJCWJyZWFrOwogCX0KIAotCS8qIGdldCB0aGUgVFNGIFJFRyByZWFkaW5nICovCi0Jd2xjX2JtYWNfcmVhZF90c2Yod2xjX2h3LCAmdHNmX2wsICZ0c2ZfaCk7Ci0KIAkvKiBwb3N0IG1vcmUgcmJ1ZnMgKi8KIAlkbWFfcnhmaWxsKHdsY19ody0+ZGlbZmlmb10pOwogCkBAIC0yOTcsOSArMjkyLDcgQEAKIAkJaGVhZCA9IGhlYWQtPnByZXY7CiAJCXAtPnByZXYgPSBOVUxMOwogCi0JCS8qIHJlY29yZCB0aGUgdHNmX2wgaW4gd2xjX3J4ZDExaGRyICovCiAJCXdsY19yeGhkciA9ICh3bGNfZDExcnhoZHJfdCAqKSBwLT5kYXRhOwotCQl3bGNfcnhoZHItPnRzZl9sID0gY3B1X3RvX2xlMzIodHNmX2wpOwogCiAJCS8qIGNvbXB1dGUgdGhlIFJTU0kgZnJvbSBkMTFyeGhkciBhbmQgcmVjb3JkIGl0IGluIHdsY19yeGQxMWhyICovCiAJCXdsY19waHlfcnNzaV9jb21wdXRlKHdsY19ody0+YmFuZC0+cGksIHdsY19yeGhkcik7CkBAIC0zMTQsMTUgKzMwNywxNyBAQAogICogICBSZXR1cm4gdHJ1ZSBpZiBhbm90aGVyIGRwYyBuZWVkcyB0byBiZSByZS1zY2hlZHVsZWQuIGZhbHNlIG90aGVyd2lzZS4KICAqICAgUGFyYW0gJ2JvdW5kZWQnIGluZGljYXRlcyBpZiBhcHBsaWNhYmxlIGxvb3BzIHNob3VsZCBiZSBib3VuZGVkLgogICovCi1ib29sIEJDTUZBU1RQQVRIIHdsY19kcGMoc3RydWN0IHdsY19pbmZvICp3bGMsIGJvb2wgYm91bmRlZCkKK2Jvb2wgd2xjX2RwYyhzdHJ1Y3Qgd2xjX2luZm8gKndsYywgYm9vbCBib3VuZGVkKQogewogCXUzMiBtYWNpbnRzdGF0dXM7CiAJc3RydWN0IHdsY19od19pbmZvICp3bGNfaHcgPSB3bGMtPmh3OwogCWQxMXJlZ3NfdCAqcmVncyA9IHdsY19ody0+cmVnczsKIAlib29sIGZhdGFsID0gZmFsc2U7CisJc3RydWN0IHdpcGh5ICp3aXBoeSA9IHdsYy0+d2lwaHk7CiAKIAlpZiAoREVWSUNFUkVNT1ZFRCh3bGMpKSB7Ci0JCVdMX0VSUk9SKCJ3bCVkOiAlczogZGVhZCBjaGlwXG4iLCB3bGNfaHctPnVuaXQsIF9fZnVuY19fKTsKKwkJd2lwaHlfZXJyKHdpcGh5LCAid2wlZDogJXM6IGRlYWQgY2hpcFxuIiwgd2xjX2h3LT51bml0LAorCQkJICBfX2Z1bmNfXyk7CiAJCXdsX2Rvd24od2xjLT53bCk7CiAJCXJldHVybiBmYWxzZTsKIAl9CkBAIC0zMzEsMTMgKzMyNiwxMCBAQAogCW1hY2ludHN0YXR1cyA9IHdsYy0+bWFjaW50c3RhdHVzOwogCXdsYy0+bWFjaW50c3RhdHVzID0gMDsKIAotCVdMX1RSQUNFKCJ3bCVkOiB3bGNfZHBjOiBtYWNpbnRzdGF0dXMgMHgleFxuIiwKLQkJIHdsY19ody0+dW5pdCwgbWFjaW50c3RhdHVzKTsKKwlCQ01NU0cod2xjLT53aXBoeSwgIndsJWQ6IG1hY2ludHN0YXR1cyAweCV4XG4iLAorCSAgICAgICB3bGNfaHctPnVuaXQsIG1hY2ludHN0YXR1cyk7CiAKLQlpZiAobWFjaW50c3RhdHVzICYgTUlfUFJRKSB7Ci0JCS8qIFByb2Nlc3MgcHJvYmUgcmVxdWVzdCBGSUZPICovCi0JCUFTU0VSVCgwICYmICJQUlEgSW50ZXJydXB0IGluIG5vbi1NQlNTIik7Ci0JfQorCVdBUk5fT04obWFjaW50c3RhdHVzICYgTUlfUFJRKTsgLyogUFJRIEludGVycnVwdCBpbiBub24tTUJTUyAqLwogCiAJLyogQkNOIHRlbXBsYXRlIGlzIGF2YWlsYWJsZSAqLwogCS8qIFpaWjogVXNlIEFQX0FDVElWRSA/ICovCkBAIC0zNTUsNyArMzQ3LDcgQEAKIAkJaWYgKHdsY19ibWFjX3R4c3RhdHVzKHdsYy0+aHcsIGJvdW5kZWQsICZmYXRhbCkpCiAJCQl3bGMtPm1hY2ludHN0YXR1cyB8PSBNSV9URlM7CiAJCWlmIChmYXRhbCkgewotCQkJV0xfRVJST1IoIk1JX1RGUzogZmF0YWxcbiIpOworCQkJd2lwaHlfZXJyKHdpcGh5LCAiTUlfVEZTOiBmYXRhbFxuIik7CiAJCQlnb3RvIGZhdGFsOwogCQl9CiAJfQpAQCAtMzY1LDE3ICszNTcsMTEgQEAKIAogCS8qIEFUSU0gd2luZG93IGVuZCAqLwogCWlmIChtYWNpbnRzdGF0dXMgJiBNSV9BVElNV0lORU5EKSB7Ci0JCVdMX1RSQUNFKCJ3bGNfaXNyOiBlbmQgb2YgQVRJTSB3aW5kb3dcbiIpOwotCisJCUJDTU1TRyh3bGMtPndpcGh5LCAiZW5kIG9mIEFUSU0gd2luZG93XG4iKTsKIAkJT1JfUkVHKCZyZWdzLT5tYWNjb21tYW5kLCB3bGMtPnF2YWxpZCk7CiAJCXdsYy0+cXZhbGlkID0gMDsKIAl9CiAKLQkvKiBwaHkgdHggZXJyb3IgKi8KLQlpZiAobWFjaW50c3RhdHVzICYgTUlfUEhZVFhFUlIpIHsKLQkJd2xjLT5wdWItPl9jbnQtPnR4cGh5ZXJyKys7Ci0JfQotCiAJLyogcmVjZWl2ZWQgZGF0YSBvciBjb250cm9sIGZyYW1lLCBNSV9ETUFJTlQgaXMgaW5kaWNhdGlvbiBvZiBSWF9GSUZPIGludGVycnVwdCAqLwogCWlmIChtYWNpbnRzdGF0dXMgJiBNSV9ETUFJTlQpIHsKIAkJaWYgKHdsY19ibWFjX3JlY3Yod2xjX2h3LCBSWF9GSUZPLCBib3VuZGVkKSkgewpAQCAtMzg2LDcgKzM3Miw3IEBACiAJLyogVFggRklGTyBzdXNwZW5kL2ZsdXNoIGNvbXBsZXRpb24gKi8KIAlpZiAobWFjaW50c3RhdHVzICYgTUlfVFhTVE9QKSB7CiAJCWlmICh3bGNfYm1hY190eF9maWZvX3N1c3BlbmRlZCh3bGNfaHcsIFRYX0RBVEFfRklGTykpIHsKLQkJCS8qICAgICAgV0xfRVJST1IoImRwYzogZmlmb19zdXNwZW5kX2NvbWxldGVcbiIpOyAqLworCQkJLyogd2lwaHlfZXJyKHdpcGh5LCAiZHBjOiBmaWZvX3N1c3BlbmRfY29tbGV0ZVxuIik7ICovCiAJCX0KIAl9CiAKQEAgLTM5NiwxNSArMzgyLDEyIEBACiAJfQogCiAJaWYgKG1hY2ludHN0YXR1cyAmIE1JX0dQMCkgewotCQlXTF9FUlJPUigid2wlZDogUFNNIG1pY3JvY29kZSB3YXRjaGRvZyBmaXJlZCBhdCAlZCAoc2Vjb25kcykuIFJlc2V0dGluZy5cbiIsCi0JCQkgd2xjX2h3LT51bml0LCB3bGNfaHctPm5vdyk7CisJCXdpcGh5X2Vycih3aXBoeSwgIndsJWQ6IFBTTSBtaWNyb2NvZGUgd2F0Y2hkb2cgZmlyZWQgYXQgJWQgIgorCQkJIihzZWNvbmRzKS4gUmVzZXR0aW5nLlxuIiwgd2xjX2h3LT51bml0LCB3bGNfaHctPm5vdyk7CiAKIAkJcHJpbnRrX29uY2UoIiVzIDogUFNNIFdhdGNoZG9nLCBjaGlwaWQgMHgleCwgY2hpcHJldiAweCV4XG4iLAogCQkJCQlfX2Z1bmNfXywgd2xjX2h3LT5zaWgtPmNoaXAsCiAJCQkJCXdsY19ody0+c2loLT5jaGlwcmV2KTsKLQotCQl3bGMtPnB1Yi0+X2NudC0+cHNtd2RzKys7Ci0KIAkJLyogYmlnIGhhbW1lciAqLwogCQl3bF9pbml0KHdsYy0+d2wpOwogCX0KQEAgLTQxNSwyMCArMzk4LDE0IEBACiAJfQogCiAJaWYgKG1hY2ludHN0YXR1cyAmIE1JX1JGRElTQUJMRSkgewotCQlXTF9UUkFDRSgid2wlZDogQk1BQyBEZXRlY3RlZCBhIGNoYW5nZSBvbiB0aGUgUkYgRGlzYWJsZSBJbnB1dFxuIiwgd2xjX2h3LT51bml0KTsKLQotCQl3bGMtPnB1Yi0+X2NudC0+cmZkaXNhYmxlKys7CisJCUJDTU1TRyh3bGMtPndpcGh5LCAid2wlZDogQk1BQyBEZXRlY3RlZCBhIGNoYW5nZSBvbiB0aGUiCisJCSAgICAgICAiIFJGIERpc2FibGUgSW5wdXRcbiIsIHdsY19ody0+dW5pdCk7CiAJCXdsX3Jma2lsbF9zZXRfaHdfc3RhdGUod2xjLT53bCk7CiAJfQogCiAJLyogc2VuZCBhbnkgZW5xJ2QgdHggcGFja2V0cy4gSnVzdCBtYWtlcyBzdXJlIHRvIGp1bXAgc3RhcnQgdHggKi8KLQlpZiAoIXBrdHFfZW1wdHkoJndsYy0+YWN0aXZlX3F1ZXVlLT5xKSkKLQkJd2xjX3NlbmRfcSh3bGMsIHdsYy0+YWN0aXZlX3F1ZXVlKTsKLQotCUFTU0VSVCh3bGNfcHNfY2hlY2sod2xjKSk7Ci0KLQkvKiBtYWtlIHN1cmUgdGhlIGJvdW5kIGluZGljYXRpb24gYW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBhcmUgaW4gc3luYyAqLwotCUFTU0VSVChib3VuZGVkID09IHRydWUgfHwgd2xjLT5tYWNpbnRzdGF0dXMgPT0gMCk7CisJaWYgKCFwa3RxX2VtcHR5KCZ3bGMtPnBrdF9xdWV1ZS0+cSkpCisJCXdsY19zZW5kX3Eod2xjKTsKIAogCS8qIGl0IGlzbid0IGRvbmUgYW5kIG5lZWRzIHRvIGJlIHJlc2NoZWQgaWYgbWFjaW50c3RhdHVzIGlzIG5vbi16ZXJvICovCiAJcmV0dXJuIHdsYy0+bWFjaW50c3RhdHVzICE9IDA7CkBAIC00NDQsNyArNDIxLDcgQEAKIAlzdHJ1Y3Qgd2xjX2luZm8gKndsYyA9IChzdHJ1Y3Qgd2xjX2luZm8gKikgYXJnOwogCXN0cnVjdCB3bGNfaHdfaW5mbyAqd2xjX2h3ID0gd2xjLT5odzsKIAotCVdMX1RSQUNFKCJ3bCVkOiB3bGNfYm1hY193YXRjaGRvZ1xuIiwgd2xjX2h3LT51bml0KTsKKwlCQ01NU0cod2xjLT53aXBoeSwgIndsJWRcbiIsIHdsY19ody0+dW5pdCk7CiAKIAlpZiAoIXdsY19ody0+dXApCiAJCXJldHVybjsKQEAgLTQ2Nyw4ICs0NDQsNyBAQAogewogCXVpbnQgYmFuZHVuaXQ7CiAKLQlXTF9UUkFDRSgid2wlZDogd2xjX2JtYWNfc2V0X2NoYW5zcGVjIDB4JXhcbiIsCi0JCSB3bGNfaHctPnVuaXQsIGNoYW5zcGVjKTsKKwlCQ01NU0cod2xjX2h3LT53bGMtPndpcGh5LCAid2wlZDogMHgleFxuIiwgd2xjX2h3LT51bml0LCBjaGFuc3BlYyk7CiAKIAl3bGNfaHctPmNoYW5zcGVjID0gY2hhbnNwZWM7CiAKQEAgLTUyMiw2ICs0OTgsNyBAQAogCXN0cnVjdCB3bGNfaHdfaW5mbyAqd2xjX2h3ID0gd2xjLT5odzsKIAl1aW50IHVuaXQgPSB3bGNfaHctPnVuaXQ7CiAJd2xjX3R1bmFibGVzX3QgKnR1bmUgPSB3bGMtPnB1Yi0+dHVuYWJsZXM7CisJc3RydWN0IHdpcGh5ICp3aXBoeSA9IHdsYy0+d2lwaHk7CiAKIAkvKiBuYW1lIGFuZCBvZmZzZXRzIGZvciBkbWFfYXR0YWNoICovCiAJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAid2wlZCIsIHVuaXQpOwpAQCAtNTM3LDggKzUxNCw4IEBACiAJCSAgICBkbWFfYWRkcndpZHRoKHdsY19ody0+c2loLCBETUFSRUcod2xjX2h3LCBETUFfVFgsIDApKTsKIAogCQlpZiAoIXdsX2FsbG9jX2RtYV9yZXNvdXJjZXMod2xjX2h3LT53bGMtPndsLCBhZGRyd2lkdGgpKSB7Ci0JCQlXTF9FUlJPUigid2wlZDogd2xjX2F0dGFjaDogYWxsb2NfZG1hX3Jlc291cmNlcyBmYWlsZWRcbiIsCi0JCQkJIHVuaXQpOworCQkJd2lwaHlfZXJyKHdpcGh5LCAid2wlZDogd2xjX2F0dGFjaDogYWxsb2NfZG1hXyIKKwkJCQkgICJyZXNvdXJjZXMgZmFpbGVkXG4iLCB1bml0KTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQogCkBAIC01NDcsOCArNTI0LDYgQEAKIAkJICogVFg6IFRYX0FDX0JLX0ZJRk8gKFRYIEFDIEJhY2tncm91bmQgZGF0YSBwYWNrZXRzKQogCQkgKiBSWDogUlhfRklGTyAoUlggZGF0YSBwYWNrZXRzKQogCQkgKi8KLQkJQVNTRVJUKFRYX0FDX0JLX0ZJRk8gPT0gMCk7Ci0JCUFTU0VSVChSWF9GSUZPID09IDApOwogCQl3bGNfaHctPmRpWzBdID0gZG1hX2F0dGFjaChuYW1lLCB3bGNfaHctPnNpaCwKIAkJCQkJICAgKHdtZSA/IERNQVJFRyh3bGNfaHcsIERNQV9UWCwgMCkgOgogCQkJCQkgICAgTlVMTCksIERNQVJFRyh3bGNfaHcsIERNQV9SWCwgMCksCkBAIC01NjMsOCArNTM4LDYgQEAKIAkJICogICAobGVnYWN5KSBUWF9EQVRBX0ZJRk8gKFRYIGRhdGEgcGFja2V0cykKIAkJICogUlg6IFVOVVNFRAogCQkgKi8KLQkJQVNTRVJUKFRYX0FDX0JFX0ZJRk8gPT0gMSk7Ci0JCUFTU0VSVChUWF9EQVRBX0ZJRk8gPT0gMSk7CiAJCXdsY19ody0+ZGlbMV0gPSBkbWFfYXR0YWNoKG5hbWUsIHdsY19ody0+c2loLAogCQkJCQkgICBETUFSRUcod2xjX2h3LCBETUFfVFgsIDEpLCBOVUxMLAogCQkJCQkgICB0dW5lLT5udHhkLCAwLCAwLCAtMSwgMCwgMCwKQEAgLTU3Niw3ICs1NDksNiBAQAogCQkgKiBUWDogVFhfQUNfVklfRklGTyAoVFggQUMgVmlkZW8gZGF0YSBwYWNrZXRzKQogCQkgKiBSWDogVU5VU0VECiAJCSAqLwotCQlBU1NFUlQoVFhfQUNfVklfRklGTyA9PSAyKTsKIAkJd2xjX2h3LT5kaVsyXSA9IGRtYV9hdHRhY2gobmFtZSwgd2xjX2h3LT5zaWgsCiAJCQkJCSAgIERNQVJFRyh3bGNfaHcsIERNQV9UWCwgMiksIE5VTEwsCiAJCQkJCSAgIHR1bmUtPm50eGQsIDAsIDAsIC0xLCAwLCAwLApAQCAtNTg3LDggKzU1OSw2IEBACiAJCSAqIFRYOiBUWF9BQ19WT19GSUZPIChUWCBBQyBWb2ljZSBkYXRhIHBhY2tldHMpCiAJCSAqICAgKGxlZ2FjeSkgVFhfQ1RMX0ZJRk8gKFRYIGNvbnRyb2wgJiBtZ210IHBhY2tldHMpCiAJCSAqLwotCQlBU1NFUlQoVFhfQUNfVk9fRklGTyA9PSAzKTsKLQkJQVNTRVJUKFRYX0NUTF9GSUZPID09IDMpOwogCQl3bGNfaHctPmRpWzNdID0gZG1hX2F0dGFjaChuYW1lLCB3bGNfaHctPnNpaCwKIAkJCQkJICAgRE1BUkVHKHdsY19odywgRE1BX1RYLCAzKSwKIAkJCQkJICAgTlVMTCwgdHVuZS0+bnR4ZCwgMCwgMCwgLTEsCkBAIC01OTcsNyArNTY3LDggQEAKIC8qIENsZWFuZXIgdG8gbGVhdmUgdGhpcyBhcyBpZiB3aXRoIEFQIGRlZmluZWQgKi8KIAogCQlpZiAoZG1hX2F0dGFjaF9lcnIpIHsKLQkJCVdMX0VSUk9SKCJ3bCVkOiB3bGNfYXR0YWNoOiBkbWFfYXR0YWNoIGZhaWxlZFxuIiwgdW5pdCk7CisJCQl3aXBoeV9lcnIod2lwaHksICJ3bCVkOiB3bGNfYXR0YWNoOiBkbWFfYXR0YWNoIGZhaWxlZCIKKwkJCQkgICJcbiIsIHVuaXQpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAKQEAgLTY0NCwxMSArNjE1LDEwIEBACiAJdWludCBqOwogCWJvb2wgd21lID0gZmFsc2U7CiAJc2hhcmVkX3BoeV9wYXJhbXNfdCBzaGFfcGFyYW1zOworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSB3bGMtPndpcGh5OwogCi0JV0xfVFJBQ0UoIndsJWQ6IHdsY19ibWFjX2F0dGFjaDogdmVuZG9yIDB4JXggZGV2aWNlIDB4JXhcbiIsCi0JCSB1bml0LCB2ZW5kb3IsIGRldmljZSk7Ci0KLQlBU1NFUlQoc2l6ZW9mKHdsY19kMTFyeGhkcl90KSA8PSBXTF9IV1JYT0ZGKTsKKwlCQ01NU0cod2xjLT53aXBoeSwgIndsJWQ6IHZlbmRvciAweCV4IGRldmljZSAweCV4XG4iLCB1bml0LCB2ZW5kb3IsCisJCWRldmljZSk7CiAKIAl3bWUgPSB0cnVlOwogCkBAIC02NjYsMTAgKzYzNiwxMSBAQAogCSAqIEFsc28gaW5pdGlhbGl6ZSBzb2Z0d2FyZSBzdGF0ZSB0aGF0IGRlcGVuZHMgb24gdGhlIHBhcnRpY3VsYXIgaGFyZHdhcmUKIAkgKiB3ZSBhcmUgcnVubmluZy4KIAkgKi8KLQl3bGNfaHctPnNpaCA9IHNpX2F0dGFjaCgodWludCkgZGV2aWNlLCByZWdzdmEsIGJ1c3R5cGUsIGJ0cGFyYW0sCisJd2xjX2h3LT5zaWggPSBhaV9hdHRhY2goKHVpbnQpIGRldmljZSwgcmVnc3ZhLCBidXN0eXBlLCBidHBhcmFtLAogCQkJCSZ3bGNfaHctPnZhcnMsICZ3bGNfaHctPnZhcnNfc2l6ZSk7CiAJaWYgKHdsY19ody0+c2loID09IE5VTEwpIHsKLQkJV0xfRVJST1IoIndsJWQ6IHdsY19ibWFjX2F0dGFjaDogc2lfYXR0YWNoIGZhaWxlZFxuIiwgdW5pdCk7CisJCXdpcGh5X2Vycih3aXBoeSwgIndsJWQ6IHdsY19ibWFjX2F0dGFjaDogc2lfYXR0YWNoIGZhaWxlZFxuIiwKKwkJCSAgdW5pdCk7CiAJCWVyciA9IDExOwogCQlnb3RvIGZhaWw7CiAJfQpAQCAtNjg5LDIxICs2NjAsMjMgQEAKIAkJdmFyID0gZ2V0dmFyKHZhcnMsICJ2ZW5kaWQiKTsKIAkJaWYgKHZhcikgewogCQkJdmVuZG9yID0gKHUxNikgc2ltcGxlX3N0cnRvdWwodmFyLCBOVUxMLCAwKTsKLQkJCVdMX0VSUk9SKCJPdmVycmlkaW5nIHZlbmRvciBpZCA9IDB4JXhcbiIsIHZlbmRvcik7CisJCQl3aXBoeV9lcnIod2lwaHksICJPdmVycmlkaW5nIHZlbmRvciBpZCA9IDB4JXhcbiIsCisJCQkJICB2ZW5kb3IpOwogCQl9CiAJCXZhciA9IGdldHZhcih2YXJzLCAiZGV2aWQiKTsKIAkJaWYgKHZhcikgewogCQkJdTE2IGRldmlkID0gKHUxNikgc2ltcGxlX3N0cnRvdWwodmFyLCBOVUxMLCAwKTsKIAkJCWlmIChkZXZpZCAhPSAweGZmZmYpIHsKIAkJCQlkZXZpY2UgPSBkZXZpZDsKLQkJCQlXTF9FUlJPUigiT3ZlcnJpZGluZyBkZXZpY2UgaWQgPSAweCV4XG4iLAotCQkJCQkgZGV2aWNlKTsKKwkJCQl3aXBoeV9lcnIod2lwaHksICJPdmVycmlkaW5nIGRldmljZSBpZCA9IDB4JXgiCisJCQkJCSAgIlxuIiwgZGV2aWNlKTsKIAkJCX0KIAkJfQogCiAJCS8qIHZlcmlmeSBhZ2FpbiB0aGUgZGV2aWNlIGlzIHN1cHBvcnRlZCAqLwogCQlpZiAoIXdsY19jaGlwbWF0Y2godmVuZG9yLCBkZXZpY2UpKSB7Ci0JCQlXTF9FUlJPUigid2wlZDogd2xjX2JtYWNfYXR0YWNoOiBVbnN1cHBvcnRlZCB2ZW5kb3IvZGV2aWNlICgweCV4LzB4JXgpXG4iLAorCQkJd2lwaHlfZXJyKHdpcGh5LCAid2wlZDogd2xjX2JtYWNfYXR0YWNoOiBVbnN1cHBvcnRlZCAiCisJCQkJInZlbmRvci9kZXZpY2UgKDB4JXgvMHgleClcbiIsCiAJCQkJIHVuaXQsIHZlbmRvciwgZGV2aWNlKTsKIAkJCWVyciA9IDEyOwogCQkJZ290byBmYWlsOwpAQCAtNzE0LDggKzY4Nyw4IEBACiAJd2xjX2h3LT5kZXZpY2VpZCA9IGRldmljZTsKIAogCS8qIHNldCBiYXIwIHdpbmRvdyB0byBwb2ludCBhdCBEMTEgY29yZSAqLwotCXdsY19ody0+cmVncyA9IChkMTFyZWdzX3QgKikgc2lfc2V0Y29yZSh3bGNfaHctPnNpaCwgRDExX0NPUkVfSUQsIDApOwotCXdsY19ody0+Y29yZXJldiA9IHNpX2NvcmVyZXYod2xjX2h3LT5zaWgpOworCXdsY19ody0+cmVncyA9IChkMTFyZWdzX3QgKikgYWlfc2V0Y29yZSh3bGNfaHctPnNpaCwgRDExX0NPUkVfSUQsIDApOworCXdsY19ody0+Y29yZXJldiA9IGFpX2NvcmVyZXYod2xjX2h3LT5zaWgpOwogCiAJcmVncyA9IHdsY19ody0+cmVnczsKIApAQCAtNzI4LDcgKzcwMSw3IEBACiAJfQogCiAJLyogaW5pdGlhbGl6ZSBwb3dlciBjb250cm9sIHJlZ2lzdGVycyAqLwotCXNpX2Nsa2N0bF9pbml0KHdsY19ody0+c2loKTsKKwlhaV9jbGtjdGxfaW5pdCh3bGNfaHctPnNpaCk7CiAKIAkvKiByZXF1ZXN0IGZhc3RjbG9jayBhbmQgZm9yY2UgZmFzdGNsb2NrIGZvciB0aGUgcmVzdCBvZiBhdHRhY2gKIAkgKiBicmluZyB0aGUgZDExIGNvcmUgb3V0IG9mIHJlc2V0LgpAQCAtNzM5LDggKzcxMiw4IEBACiAJd2xjX2JtYWNfY29yZXJlc2V0KHdsY19odywgV0xDX1VTRV9DT1JFRkxBR1MpOwogCiAJaWYgKCF3bGNfYm1hY192YWxpZGF0ZV9jaGlwX2FjY2Vzcyh3bGNfaHcpKSB7Ci0JCVdMX0VSUk9SKCJ3bCVkOiB3bGNfYm1hY19hdHRhY2g6IHZhbGlkYXRlX2NoaXBfYWNjZXNzIGZhaWxlZFxuIiwKLQkJCSB1bml0KTsKKwkJd2lwaHlfZXJyKHdpcGh5LCAid2wlZDogd2xjX2JtYWNfYXR0YWNoOiB2YWxpZGF0ZV9jaGlwX2FjY2VzcyAiCisJCQkiZmFpbGVkXG4iLCB1bml0KTsKIAkJZXJyID0gMTQ7CiAJCWdvdG8gZmFpbDsKIAl9CkBAIC03NTIsNyArNzI1LDggQEAKIAkJaiA9IEJPQVJEUkVWX1BST01PVEVEOwogCXdsY19ody0+Ym9hcmRyZXYgPSAodTE2KSBqOwogCWlmICghd2xjX3ZhbGlkYm9hcmR0eXBlKHdsY19odykpIHsKLQkJV0xfRVJST1IoIndsJWQ6IHdsY19ibWFjX2F0dGFjaDogVW5zdXBwb3J0ZWQgQnJvYWRjb20gYm9hcmQgdHlwZSAoMHgleCkiICIgb3IgcmV2aXNpb24gbGV2ZWwgKDB4JXgpXG4iLAorCQl3aXBoeV9lcnIod2lwaHksICJ3bCVkOiB3bGNfYm1hY19hdHRhY2g6IFVuc3VwcG9ydGVkIEJyb2FkY29tICIKKwkJCSJib2FyZCB0eXBlICgweCV4KSIgIiBvciByZXZpc2lvbiBsZXZlbCAoMHgleClcbiIsCiAJCQkgdW5pdCwgd2xjX2h3LT5zaWgtPmJvYXJkdHlwZSwgd2xjX2h3LT5ib2FyZHJldik7CiAJCWVyciA9IDE1OwogCQlnb3RvIGZhaWw7CkBAIC03NjUsNyArNzM5LDcgQEAKIAkJd2xjX2JtYWNfcGxscmVxKHdsY19odywgdHJ1ZSwgV0xDX1BMTFJFUV9TSEFSRUQpOwogCiAJaWYgKCh3bGNfaHctPnNpaC0+YnVzdHlwZSA9PSBQQ0lfQlVTKQotCSAgICAmJiAoc2lfcGNpX3dhcjE2MTY1KHdsY19ody0+c2loKSkpCisJICAgICYmIChhaV9wY2lfd2FyMTYxNjUod2xjX2h3LT5zaWgpKSkKIAkJd2xjLT53YXIxNjE2NSA9IHRydWU7CiAKIAkvKiBjaGVjayBkZXZpY2UgaWQoc3JvbSwgbnZyYW0gZXRjLikgdG8gc2V0IGJhbmRzICovCkBAIC03OTQsOCArNzY4LDggQEAKIAl3bGNfaHctPnBoeXNoaW0gPSB3bGNfcGh5X3NoaW1fYXR0YWNoKHdsY19odywgd2xjLT53bCwgd2xjKTsKIAogCWlmICh3bGNfaHctPnBoeXNoaW0gPT0gTlVMTCkgewotCQlXTF9FUlJPUigid2wlZDogd2xjX2JtYWNfYXR0YWNoOiB3bGNfcGh5X3NoaW1fYXR0YWNoIGZhaWxlZFxuIiwKLQkJCSB1bml0KTsKKwkJd2lwaHlfZXJyKHdpcGh5LCAid2wlZDogd2xjX2JtYWNfYXR0YWNoOiB3bGNfcGh5X3NoaW1fYXR0YWNoICIKKwkJCSJmYWlsZWRcbiIsIHVuaXQpOwogCQllcnIgPSAyNTsKIAkJZ290byBmYWlsOwogCX0KQEAgLTg0NCwyMyArODE4LDIyIEBACiAJCXdsY19ody0+YmFuZC0+YmFuZHR5cGUgPSBqID8gV0xDX0JBTkRfNUcgOiBXTENfQkFORF8yRzsKIAkJd2xjLT5iYW5kLT5iYW5kdW5pdCA9IGo7CiAJCXdsYy0+YmFuZC0+YmFuZHR5cGUgPSBqID8gV0xDX0JBTkRfNUcgOiBXTENfQkFORF8yRzsKLQkJd2xjLT5jb3JlLT5jb3JlaWR4ID0gc2lfY29yZWlkeCh3bGNfaHctPnNpaCk7CisJCXdsYy0+Y29yZS0+Y29yZWlkeCA9IGFpX2NvcmVpZHgod2xjX2h3LT5zaWgpOwogCiAJCXdsY19ody0+bWFjaHdjYXAgPSBSX1JFRygmcmVncy0+bWFjaHdjYXApOwogCQl3bGNfaHctPm1hY2h3Y2FwX2JhY2t1cCA9IHdsY19ody0+bWFjaHdjYXA7CiAKIAkJLyogaW5pdCB0eCBmaWZvIHNpemUgKi8KLQkJQVNTRVJUKCh3bGNfaHctPmNvcmVyZXYgLSBYTVRGSUZPVEJMX1NUQVJUUkVWKSA8Ci0JCSAgICAgICBBUlJBWV9TSVpFKHhtdGZpZm9fc3opKTsKIAkJd2xjX2h3LT54bXRmaWZvX3N6ID0KIAkJICAgIHhtdGZpZm9fc3pbKHdsY19ody0+Y29yZXJldiAtIFhNVEZJRk9UQkxfU1RBUlRSRVYpXTsKIAogCQkvKiBHZXQgYSBwaHkgZm9yIHRoaXMgYmFuZCAqLwogCQl3bGNfaHctPmJhbmQtPnBpID0gd2xjX3BoeV9hdHRhY2god2xjX2h3LT5waHlfc2gsCi0JCQkodm9pZCAqKXJlZ3MsIHdsY19ibWFjX2JhbmR0eXBlKHdsY19odyksIHZhcnMpOworCQkJKHZvaWQgKilyZWdzLCB3bGNfYm1hY19iYW5kdHlwZSh3bGNfaHcpLCB2YXJzLAorCQkJd2xjLT53aXBoeSk7CiAJCWlmICh3bGNfaHctPmJhbmQtPnBpID09IE5VTEwpIHsKLQkJCVdMX0VSUk9SKCJ3bCVkOiB3bGNfYm1hY19hdHRhY2g6IHdsY19waHlfYXR0YWNoIGZhaWxlZFxuIiwKLQkJCQkgdW5pdCk7CisJCQl3aXBoeV9lcnIod2lwaHksICJ3bCVkOiB3bGNfYm1hY19hdHRhY2g6IHdsY19waHlfIgorCQkJCSAgImF0dGFjaCBmYWlsZWRcbiIsIHVuaXQpOwogCQkJZXJyID0gMTc7CiAJCQlnb3RvIGZhaWw7CiAJCX0KQEAgLTg5MCw5ICs4NjMsOSBAQAogCQkJCWdvdG8gYmFkX3BoeTsKIAkJfSBlbHNlIHsKICBiYWRfcGh5OgotCQkJV0xfRVJST1IoIndsJWQ6IHdsY19ibWFjX2F0dGFjaDogdW5zdXBwb3J0ZWQgcGh5IHR5cGUvcmV2ICglZC8lZClcbiIsCi0JCQkJIHVuaXQsCi0JCQkJIHdsY19ody0+YmFuZC0+cGh5dHlwZSwgd2xjX2h3LT5iYW5kLT5waHlyZXYpOworCQkJd2lwaHlfZXJyKHdpcGh5LCAid2wlZDogd2xjX2JtYWNfYXR0YWNoOiB1bnN1cHBvcnRlZCAiCisJCQkJICAicGh5IHR5cGUvcmV2ICglZC8lZClcbiIsIHVuaXQsCisJCQkJICB3bGNfaHctPmJhbmQtPnBoeXR5cGUsIHdsY19ody0+YmFuZC0+cGh5cmV2KTsKIAkJCWVyciA9IDE4OwogCQkJZ290byBmYWlsOwogCQl9CkBAIC05MjUsMTAgKzg5OCwxMCBAQAogCiAJLyogTWF0Y2ggZHJpdmVyICJkb3duIiBzdGF0ZSAqLwogCWlmICh3bGNfaHctPnNpaC0+YnVzdHlwZSA9PSBQQ0lfQlVTKQotCQlzaV9wY2lfZG93bih3bGNfaHctPnNpaCk7CisJCWFpX3BjaV9kb3duKHdsY19ody0+c2loKTsKIAogCS8qIHJlZ2lzdGVyIHNiIGludGVycnVwdCBjYWxsYmFjayBmdW5jdGlvbnMgKi8KLQlzaV9yZWdpc3Rlcl9pbnRyX2NhbGxiYWNrKHdsY19ody0+c2loLCAodm9pZCAqKXdsY193bGludHJzb2ZmLAorCWFpX3JlZ2lzdGVyX2ludHJfY2FsbGJhY2sod2xjX2h3LT5zaWgsICh2b2lkICopd2xjX3dsaW50cnNvZmYsCiAJCQkJICAodm9pZCAqKXdsY193bGludHJzcmVzdG9yZSwgTlVMTCwgd2xjKTsKIAogCS8qIHR1cm4gb2ZmIHBsbCBhbmQgeHRhbCB0byBtYXRjaCBkcml2ZXIgImRvd24iIHN0YXRlICovCkBAIC05NDcsMjcgKzkyMCwzMCBAQAogCS8qIGluaXQgZXRoZXJhZGRyIHN0YXRlIHZhcmlhYmxlcyAqLwogCW1hY2FkZHIgPSB3bGNfZ2V0X21hY2FkZHIod2xjX2h3KTsKIAlpZiAobWFjYWRkciA9PSBOVUxMKSB7Ci0JCVdMX0VSUk9SKCJ3bCVkOiB3bGNfYm1hY19hdHRhY2g6IG1hY2FkZHIgbm90IGZvdW5kXG4iLCB1bml0KTsKKwkJd2lwaHlfZXJyKHdpcGh5LCAid2wlZDogd2xjX2JtYWNfYXR0YWNoOiBtYWNhZGRyIG5vdCBmb3VuZFxuIiwKKwkJCSAgdW5pdCk7CiAJCWVyciA9IDIxOwogCQlnb3RvIGZhaWw7CiAJfQogCWJjbV9ldGhlcl9hdG9lKG1hY2FkZHIsIHdsY19ody0+ZXRoZXJhZGRyKTsKIAlpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIod2xjX2h3LT5ldGhlcmFkZHIpIHx8CiAJICAgIGlzX3plcm9fZXRoZXJfYWRkcih3bGNfaHctPmV0aGVyYWRkcikpIHsKLQkJV0xfRVJST1IoIndsJWQ6IHdsY19ibWFjX2F0dGFjaDogYmFkIG1hY2FkZHIgJXNcbiIsCi0JCQkgdW5pdCwgbWFjYWRkcik7CisJCXdpcGh5X2Vycih3aXBoeSwgIndsJWQ6IHdsY19ibWFjX2F0dGFjaDogYmFkIG1hY2FkZHIgJXNcbiIsCisJCQkgIHVuaXQsIG1hY2FkZHIpOwogCQllcnIgPSAyMjsKIAkJZ290byBmYWlsOwogCX0KIAotCVdMX1RSQUNFKCIlczo6IGRldmljZWlkIDB4JXggbmJhbmRzICVkIGJvYXJkIDB4JXggbWFjYWRkcjogJXNcbiIsCi0JCSBfX2Z1bmNfXywgd2xjX2h3LT5kZXZpY2VpZCwgd2xjX2h3LT5fbmJhbmRzLAorCUJDTU1TRyh3bGMtPndpcGh5LAorCQkgImRldmljZWlkIDB4JXggbmJhbmRzICVkIGJvYXJkIDB4JXggbWFjYWRkcjogJXNcbiIsCisJCSB3bGNfaHctPmRldmljZWlkLCB3bGNfaHctPl9uYmFuZHMsCiAJCSB3bGNfaHctPnNpaC0+Ym9hcmR0eXBlLCBtYWNhZGRyKTsKIAogCXJldHVybiBlcnI7CiAKICBmYWlsOgotCVdMX0VSUk9SKCJ3bCVkOiB3bGNfYm1hY19hdHRhY2g6IGZhaWxlZCB3aXRoIGVyciAlZFxuIiwgdW5pdCwgZXJyKTsKKwl3aXBoeV9lcnIod2lwaHksICJ3bCVkOiB3bGNfYm1hY19hdHRhY2g6IGZhaWxlZCB3aXRoIGVyciAlZFxuIiwgdW5pdCwKKwkJICBlcnIpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTEwMTEsMTAgKzk4NywxMCBAQAogCQkvKiBkZXRhY2ggaW50ZXJydXB0IHN5bmMgbWVjaGFuaXNtIHNpbmNlIGludGVycnVwdCBpcyBkaXNhYmxlZCBhbmQgcGVyLXBvcnQKIAkJICogaW50ZXJydXB0IG9iamVjdCBtYXkgaGFzIGJlZW4gZnJlZWQuIHRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSBzYiBjb3JlIHN3aXRjaAogCQkgKi8KLQkJc2lfZGVyZWdpc3Rlcl9pbnRyX2NhbGxiYWNrKHdsY19ody0+c2loKTsKKwkJYWlfZGVyZWdpc3Rlcl9pbnRyX2NhbGxiYWNrKHdsY19ody0+c2loKTsKIAogCQlpZiAod2xjX2h3LT5zaWgtPmJ1c3R5cGUgPT0gUENJX0JVUykKLQkJCXNpX3BjaV9zbGVlcCh3bGNfaHctPnNpaCk7CisJCQlhaV9wY2lfc2xlZXAod2xjX2h3LT5zaWgpOwogCX0KIAogCXdsY19ibWFjX2RldGFjaF9kbWFwaW8od2xjX2h3KTsKQEAgLTEwMzksNyArMTAxNSw3IEBACiAJd2xjX2h3LT52YXJzID0gTlVMTDsKIAogCWlmICh3bGNfaHctPnNpaCkgewotCQlzaV9kZXRhY2god2xjX2h3LT5zaWgpOworCQlhaV9kZXRhY2god2xjX2h3LT5zaWgpOwogCQl3bGNfaHctPnNpaCA9IE5VTEw7CiAJfQogCkBAIC0xMDQ5LDkgKzEwMjUsNyBAQAogCiB2b2lkIHdsY19ibWFjX3Jlc2V0KHN0cnVjdCB3bGNfaHdfaW5mbyAqd2xjX2h3KQogewotCVdMX1RSQUNFKCJ3bCVkOiB3bGNfYm1hY19yZXNldFxuIiwgd2xjX2h3LT51bml0KTsKLQotCXdsY19ody0+d2xjLT5wdWItPl9jbnQtPnJlc2V0Kys7CisJQkNNTVNHKHdsY19ody0+d2xjLT53aXBoeSwgIndsJWRcbiIsIHdsY19ody0+dW5pdCk7CiAKIAkvKiByZXNldCB0aGUgY29yZSAqLwogCWlmICghREVWSUNFUkVNT1ZFRCh3bGNfaHctPndsYykpCkBAIC0xMDcwLDcgKzEwNDQsNyBAQAogCWJvb2wgZmFzdGNsazsKIAlzdHJ1Y3Qgd2xjX2luZm8gKndsYyA9IHdsY19ody0+d2xjOwogCi0JV0xfVFJBQ0UoIndsJWQ6IHdsY19ibWFjX2luaXRcbiIsIHdsY19ody0+dW5pdCk7CisJQkNNTVNHKHdsY19ody0+d2xjLT53aXBoeSwgIndsJWRcbiIsIHdsY19ody0+dW5pdCk7CiAKIAkvKiByZXF1ZXN0IEZBU1QgY2xvY2sgaWYgbm90IG9uICovCiAJZmFzdGNsayA9IHdsY19ody0+Zm9yY2VmYXN0Y2xrOwpAQCAtMTExOSwxNiArMTA5MywxNCBAQAogewogCXVpbnQgY29yZW1hc2s7CiAKLQlXTF9UUkFDRSgid2wlZDogJXM6XG4iLCB3bGNfaHctPnVuaXQsIF9fZnVuY19fKTsKLQotCUFTU0VSVCh3bGNfaHctPndsYy0+cHViLT5od191cCAmJiB3bGNfaHctPndsYy0+bWFjaW50bWFzayA9PSAwKTsKKwlCQ01NU0cod2xjX2h3LT53bGMtPndpcGh5LCAid2wlZFxuIiwgd2xjX2h3LT51bml0KTsKIAogCS8qCiAJICogRW5hYmxlIHBsbCBhbmQgeHRhbCwgaW5pdGlhbGl6ZSB0aGUgcG93ZXIgY29udHJvbCByZWdpc3RlcnMsCiAJICogYW5kIGZvcmNlIGZhc3RjbG9jayBmb3IgdGhlIHJlbWFpbmRlciBvZiB3bGNfdXAoKS4KIAkgKi8KIAl3bGNfYm1hY194dGFsKHdsY19odywgT04pOwotCXNpX2Nsa2N0bF9pbml0KHdsY19ody0+c2loKTsKKwlhaV9jbGtjdGxfaW5pdCh3bGNfaHctPnNpaCk7CiAJd2xjX2Nsa2N0bF9jbGsod2xjX2h3LCBDTEtfRkFTVCk7CiAKIAkvKgpAQCAtMTEzOCw5ICsxMTEwLDcgQEAKIAljb3JlbWFzayA9ICgxIDw8IHdsY19ody0+d2xjLT5jb3JlLT5jb3JlaWR4KTsKIAogCWlmICh3bGNfaHctPnNpaC0+YnVzdHlwZSA9PSBQQ0lfQlVTKQotCQlzaV9wY2lfc2V0dXAod2xjX2h3LT5zaWgsIGNvcmVtYXNrKTsKLQotCUFTU0VSVChzaV9jb3JlaWQod2xjX2h3LT5zaWgpID09IEQxMV9DT1JFX0lEKTsKKwkJYWlfcGNpX3NldHVwKHdsY19ody0+c2loLCBjb3JlbWFzayk7CiAKIAkvKgogCSAqIE5lZWQgdG8gcmVhZCB0aGUgaHdyYWRpbyBzdGF0dXMgaGVyZSB0byBjb3ZlciB0aGUgY2FzZSB3aGVyZSB0aGUgc3lzdGVtCkBAIC0xMTQ5LDEzICsxMTE5LDEzIEBACiAJaWYgKHdsY19ibWFjX3JhZGlvX3JlYWRfaHdkaXNhYmxlZCh3bGNfaHcpKSB7CiAJCS8qIHB1dCBTQiBQQ0kgaW4gZG93biBzdGF0ZSBhZ2FpbiAqLwogCQlpZiAod2xjX2h3LT5zaWgtPmJ1c3R5cGUgPT0gUENJX0JVUykKLQkJCXNpX3BjaV9kb3duKHdsY19ody0+c2loKTsKKwkJCWFpX3BjaV9kb3duKHdsY19ody0+c2loKTsKIAkJd2xjX2JtYWNfeHRhbCh3bGNfaHcsIE9GRik7Ci0JCXJldHVybiBCQ01FX1JBRElPT0ZGOworCQlyZXR1cm4gLUVOT01FRElVTTsKIAl9CiAKIAlpZiAod2xjX2h3LT5zaWgtPmJ1c3R5cGUgPT0gUENJX0JVUykKLQkJc2lfcGNpX3VwKHdsY19ody0+c2loKTsKKwkJYWlfcGNpX3VwKHdsY19ody0+c2loKTsKIAogCS8qIHJlc2V0IHRoZSBkMTEgY29yZSAqLwogCXdsY19ibWFjX2NvcmVyZXNldCh3bGNfaHcsIFdMQ19VU0VfQ09SRUZMQUdTKTsKQEAgLTExNjUsMTQgKzExMzUsMTMgQEAKIAogaW50IHdsY19ibWFjX3VwX2ZpbmlzaChzdHJ1Y3Qgd2xjX2h3X2luZm8gKndsY19odykKIHsKLQlXTF9UUkFDRSgid2wlZDogJXM6XG4iLCB3bGNfaHctPnVuaXQsIF9fZnVuY19fKTsKKwlCQ01NU0cod2xjX2h3LT53bGMtPndpcGh5LCAid2wlZFxuIiwgd2xjX2h3LT51bml0KTsKIAogCXdsY19ody0+dXAgPSB0cnVlOwogCXdsY19waHlfaHdfc3RhdGVfdXBkKHdsY19ody0+YmFuZC0+cGksIHRydWUpOwogCiAJLyogRlVMTFkgZW5hYmxlIGR5bmFtaWMgcG93ZXIgY29udHJvbCBhbmQgZDExIGNvcmUgaW50ZXJydXB0ICovCiAJd2xjX2Nsa2N0bF9jbGsod2xjX2h3LCBDTEtfRFlOQU1JQyk7Ci0JQVNTRVJUKHdsY19ody0+d2xjLT5tYWNpbnRtYXNrID09IDApOwogCXdsX2ludHJzb24od2xjX2h3LT53bGMtPndsKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTExODIsNyArMTE1MSw3IEBACiAJYm9vbCBkZXZfZ29uZTsKIAl1aW50IGNhbGxiYWNrcyA9IDA7CiAKLQlXTF9UUkFDRSgid2wlZDogJXM6XG4iLCB3bGNfaHctPnVuaXQsIF9fZnVuY19fKTsKKwlCQ01NU0cod2xjX2h3LT53bGMtPndpcGh5LCAid2wlZFxuIiwgd2xjX2h3LT51bml0KTsKIAogCWlmICghd2xjX2h3LT51cCkKIAkJcmV0dXJuIGNhbGxiYWNrczsKQEAgLTEyMTAsNyArMTE3OSw3IEBACiAJdWludCBjYWxsYmFja3MgPSAwOwogCWJvb2wgZGV2X2dvbmU7CiAKLQlXTF9UUkFDRSgid2wlZDogJXM6XG4iLCB3bGNfaHctPnVuaXQsIF9fZnVuY19fKTsKKwlCQ01NU0cod2xjX2h3LT53bGMtPndpcGh5LCAid2wlZFxuIiwgd2xjX2h3LT51bml0KTsKIAogCWlmICghd2xjX2h3LT51cCkKIAkJcmV0dXJuIGNhbGxiYWNrczsKQEAgLTEyMzAsNyArMTE5OSw3IEBACiAJfSBlbHNlIHsKIAogCQkvKiBSZXNldCBhbmQgZGlzYWJsZSB0aGUgY29yZSAqLwotCQlpZiAoc2lfaXNjb3JldXAod2xjX2h3LT5zaWgpKSB7CisJCWlmIChhaV9pc2NvcmV1cCh3bGNfaHctPnNpaCkpIHsKIAkJCWlmIChSX1JFRygmd2xjX2h3LT5yZWdzLT5tYWNjb250cm9sKSAmCiAJCQkgICAgTUNUTF9FTl9NQUMpCiAJCQkJd2xjX3N1c3BlbmRfbWFjX2FuZF93YWl0KHdsY19ody0+d2xjKTsKQEAgLTEyNDEsNyArMTIxMCw3IEBACiAJCS8qIHR1cm4gb2ZmIHByaW1hcnkgeHRhbCBhbmQgcGxsICovCiAJCWlmICghd2xjX2h3LT5ub3Jlc2V0KSB7CiAJCQlpZiAod2xjX2h3LT5zaWgtPmJ1c3R5cGUgPT0gUENJX0JVUykKLQkJCQlzaV9wY2lfZG93bih3bGNfaHctPnNpaCk7CisJCQkJYWlfcGNpX2Rvd24od2xjX2h3LT5zaWgpOwogCQkJd2xjX2JtYWNfeHRhbCh3bGNfaHcsIE9GRik7CiAJCX0KIAl9CkBAIC0xMjU3LDggKzEyMjYsNiBAQAogCS8qIHdhaXQgdW50aWwgdWNvZGUgaXMgbm8gbG9uZ2VyIGFzbGVlcCAqLwogCVNQSU5XQUlUKCh3bGNfYm1hY19yZWFkX3NobSh3bGNfaHcsIE1fVUNPREVfREJHU1QpID09CiAJCSAgREJHU1RfQVNMRUVQKSwgd2xjX2h3LT53bGMtPmZhc3Rwd3J1cF9kbHkpOwotCi0JQVNTRVJUKHdsY19ibWFjX3JlYWRfc2htKHdsY19odywgTV9VQ09ERV9EQkdTVCkgIT0gREJHU1RfQVNMRUVQKTsKIH0KIAogdm9pZCB3bGNfYm1hY19od19ldGhlcmFkZHIoc3RydWN0IHdsY19od19pbmZvICp3bGNfaHcsIHU4ICplYSkKQEAgLTEyOTIsOSArMTI1OSw5IEBACiAJCQkJCSAgICgmd2xjX2h3LT5yZWdzLT4KIAkJCQkJICAgIGNsa19jdGxfc3QpICYgQ0NTX0hUQVZBSUwpID09IDApLAogCQkJCQkgUE1VX01BWF9UUkFOU0lUSU9OX0RMWSk7Ci0JCQkJQVNTRVJUKFJfUkVHCi0JCQkJICAgICAgICgmd2xjX2h3LT5yZWdzLT4KLQkJCQkJY2xrX2N0bF9zdCkgJiBDQ1NfSFRBVkFJTCk7CisJCQkJV0FSTl9PTighKFJfUkVHCisJCQkJCSAgKCZ3bGNfaHctPnJlZ3MtPgorCQkJCQkgICBjbGtfY3RsX3N0KSAmIENDU19IVEFWQUlMKSk7CiAJCQl9IGVsc2UgewogCQkJCWlmICgod2xjX2h3LT5zaWgtPnBtdXJldiA9PSAwKSAmJgogCQkJCSAgICAoUl9SRUcKQEAgLTEzMTYsMTEgKzEyODMsMTIgQEAKIAkJICogdGhlbiB1c2UgRkNBIHRvIHZlcmlmeSBtYWMgaXMgcnVubmluZyBmYXN0IGNsb2NrCiAJCSAqLwogCi0JCXdsY19ody0+Zm9yY2VmYXN0Y2xrID0gc2lfY2xrY3RsX2NjKHdsY19ody0+c2loLCBtb2RlKTsKKwkJd2xjX2h3LT5mb3JjZWZhc3RjbGsgPSBhaV9jbGtjdGxfY2Mod2xjX2h3LT5zaWgsIG1vZGUpOwogCiAJCS8qIGNoZWNrIGZhc3QgY2xvY2sgaXMgYXZhaWxhYmxlIChpZiBjb3JlIGlzIG5vdCBpbiByZXNldCkgKi8KIAkJaWYgKHdsY19ody0+Zm9yY2VmYXN0Y2xrICYmIHdsY19ody0+Y2xrKQotCQkJQVNTRVJUKHNpX2NvcmVfc2ZsYWdzKHdsY19ody0+c2loLCAwLCAwKSAmIFNJU0ZfRkNMS0EpOworCQkJV0FSTl9PTighKGFpX2NvcmVfc2ZsYWdzKHdsY19ody0+c2loLCAwLCAwKSAmCisJCQkJICBTSVNGX0ZDTEtBKSk7CiAKIAkJLyoga2VlcCB0aGUgdWNvZGUgd2FrZSBiaXQgb24gaWYgZm9yY2VmYXN0Y2xrIGlzIG9uCiAJCSAqIHNpbmNlIHdlIGRvIG5vdCB3YW50IHVjb2RlIHRvIHB1dCB1cyBiYWNrIHRvIHNsb3cgY2xvY2sKQEAgLTEzODIsOSArMTM1MCw4IEBACiAJfTsKIAlzdHJ1Y3Qgd2xjX2h3YmFuZCAqYmFuZDsKIAotCUFTU0VSVCgodmFsICYgfm1hc2spID09IDApOwotCUFTU0VSVChpZHggPCBNSEZNQVgpOwotCUFTU0VSVChBUlJBWV9TSVpFKGFkZHIpID09IE1IRk1BWCk7CisJaWYgKCh2YWwgJiB+bWFzaykgfHwgaWR4ID49IE1IRk1BWCkKKwkJcmV0dXJuOyAvKiBlcnJvciBjb25kaXRpb24gKi8KIAogCXN3aXRjaCAoYmFuZHMpIHsKIAkJLyogQ3VycmVudCBiYW5kIG9ubHkgb3IgYWxsIGJhbmRzLApAQCAtMTQwMSw4ICsxMzY4LDcgQEAKIAkJYmFuZCA9IHdsY19ody0+YmFuZHN0YXRlW0JBTkRfMkdfSU5ERVhdOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlBU1NFUlQoMCk7Ci0JCWJhbmQgPSBOVUxMOworCQliYW5kID0gTlVMTDsJLyogZXJyb3IgY29uZGl0aW9uICovCiAJfQogCiAJaWYgKGJhbmQpIHsKQEAgLTE0MjksOCArMTM5NSw5IEBACiB1MTYgd2xjX2JtYWNfbWhmX2dldChzdHJ1Y3Qgd2xjX2h3X2luZm8gKndsY19odywgdTggaWR4LCBpbnQgYmFuZHMpCiB7CiAJc3RydWN0IHdsY19od2JhbmQgKmJhbmQ7Ci0JQVNTRVJUKGlkeCA8IE1IRk1BWCk7CiAKKwlpZiAoaWR4ID49IE1IRk1BWCkKKwkJcmV0dXJuIDA7IC8qIGVycm9yIGNvbmRpdGlvbiAqLwogCXN3aXRjaCAoYmFuZHMpIHsKIAljYXNlIFdMQ19CQU5EX0FVVE86CiAJCWJhbmQgPSB3bGNfaHctPmJhbmQ7CkBAIC0xNDQyLDggKzE0MDksNyBAQAogCQliYW5kID0gd2xjX2h3LT5iYW5kc3RhdGVbQkFORF8yR19JTkRFWF07CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUFTU0VSVCgwKTsKLQkJYmFuZCA9IE5VTEw7CisJCWJhbmQgPSBOVUxMOwkJLyogZXJyb3IgY29uZGl0aW9uICovCiAJfQogCiAJaWYgKCFiYW5kKQpAQCAtMTQ2MCw4ICsxNDI2LDYgQEAKIAkJTV9IT1NUX0ZMQUdTNQogCX07CiAKLQlBU1NFUlQoQVJSQVlfU0laRShhZGRyKSA9PSBNSEZNQVgpOwotCiAJZm9yIChpZHggPSAwOyBpZHggPCBNSEZNQVg7IGlkeCsrKSB7CiAJCXdsY19ibWFjX3dyaXRlX3NobSh3bGNfaHcsIGFkZHJbaWR4XSwgbWhmc1tpZHhdKTsKIAl9CkBAIC0xNDg2LDggKzE0NTAsOCBAQAogCXUzMiBtYWNjb250cm9sOwogCXUzMiBuZXdfbWFjY29udHJvbDsKIAotCUFTU0VSVCgodmFsICYgfm1hc2spID09IDApOwotCisJaWYgKHZhbCAmIH5tYXNrKQorCQlyZXR1cm47IC8qIGVycm9yIGNvbmRpdGlvbiAqLwogCW1hY2NvbnRyb2wgPSB3bGNfaHctPm1hY2NvbnRyb2w7CiAJbmV3X21hY2NvbnRyb2wgPSAobWFjY29udHJvbCAmIH5tYXNrKSB8IHZhbDsKIApAQCAtMTUyMiw4ICsxNDg2LDYgQEAKIAogdm9pZCB3bGNfdWNvZGVfd2FrZV9vdmVycmlkZV9zZXQoc3RydWN0IHdsY19od19pbmZvICp3bGNfaHcsIHUzMiBvdmVycmlkZV9iaXQpCiB7Ci0JQVNTRVJUKCh3bGNfaHctPndha2Vfb3ZlcnJpZGUgJiBvdmVycmlkZV9iaXQpID09IDApOwotCiAJaWYgKHdsY19ody0+d2FrZV9vdmVycmlkZSB8fCAod2xjX2h3LT5tYWNjb250cm9sICYgTUNUTF9XQUtFKSkgewogCQltYm9vbHNldCh3bGNfaHctPndha2Vfb3ZlcnJpZGUsIG92ZXJyaWRlX2JpdCk7CiAJCXJldHVybjsKQEAgLTE1MzksOCArMTUwMSw2IEBACiAKIHZvaWQgd2xjX3Vjb2RlX3dha2Vfb3ZlcnJpZGVfY2xlYXIoc3RydWN0IHdsY19od19pbmZvICp3bGNfaHcsIHUzMiBvdmVycmlkZV9iaXQpCiB7Ci0JQVNTRVJUKHdsY19ody0+d2FrZV9vdmVycmlkZSAmIG92ZXJyaWRlX2JpdCk7Ci0KIAltYm9vbGNscih3bGNfaHctPndha2Vfb3ZlcnJpZGUsIG92ZXJyaWRlX2JpdCk7CiAKIAlpZiAod2xjX2h3LT53YWtlX292ZXJyaWRlIHx8ICh3bGNfaHctPm1hY2NvbnRyb2wgJiBNQ1RMX1dBS0UpKQpAQCAtMTU5MSwzMyArMTU1MSw2IEBACiB9CiAKIC8qCi0gKiBXcml0ZSBhIE1BQyBhZGRyZXNzIHRvIHRoZSByY210YSBzdHJ1Y3R1cmUKLSAqLwotdm9pZAotd2xjX2JtYWNfc2V0X3JjbXRhKHN0cnVjdCB3bGNfaHdfaW5mbyAqd2xjX2h3LCBpbnQgaWR4LAotCQkgICBjb25zdCB1OCAqYWRkcikKLXsKLQlkMTFyZWdzX3QgKnJlZ3MgPSB3bGNfaHctPnJlZ3M7Ci0Jdm9sYXRpbGUgdTE2ICpvYmpkYXRhMTYgPSAodm9sYXRpbGUgdTE2ICopJnJlZ3MtPm9iamRhdGE7Ci0JdTMyIG1hY19obTsKLQl1MTYgbWFjX2w7Ci0KLQlXTF9UUkFDRSgid2wlZDogJXNcbiIsIHdsY19ody0+dW5pdCwgX19mdW5jX18pOwotCi0JbWFjX2htID0KLQkgICAgKGFkZHJbM10gPDwgMjQpIHwgKGFkZHJbMl0gPDwgMTYpIHwKLQkgICAgKGFkZHJbMV0gPDwgOCkgfCBhZGRyWzBdOwotCW1hY19sID0gKGFkZHJbNV0gPDwgOCkgfCBhZGRyWzRdOwotCi0JV19SRUcoJnJlZ3MtPm9iamFkZHIsIChPQkpBRERSX1JDTVRBX1NFTCB8IChpZHggKiAyKSkpOwotCSh2b2lkKVJfUkVHKCZyZWdzLT5vYmphZGRyKTsKLQlXX1JFRygmcmVncy0+b2JqZGF0YSwgbWFjX2htKTsKLQlXX1JFRygmcmVncy0+b2JqYWRkciwgKE9CSkFERFJfUkNNVEFfU0VMIHwgKChpZHggKiAyKSArIDEpKSk7Ci0JKHZvaWQpUl9SRUcoJnJlZ3MtPm9iamFkZHIpOwotCVdfUkVHKG9iamRhdGExNiwgbWFjX2wpOwotfQotCi0vKgogICogV3JpdGUgYSBNQUMgYWRkcmVzcyB0byB0aGUgZ2l2ZW4gbWF0Y2ggcmVnIG9mZnNldCBpbiB0aGUgUlhFIG1hdGNoIGVuZ2luZS4KICAqLwogdm9pZApAQCAtMTYyOSw5ICsxNTYyLDggQEAKIAl1MTYgbWFjX207CiAJdTE2IG1hY19oOwogCi0JV0xfVFJBQ0UoIndsJWQ6IHdsY19ibWFjX3NldF9hZGRybWF0Y2hcbiIsIHdsY19ody0+dW5pdCk7Ci0KLQlBU1NFUlQobWF0Y2hfcmVnX29mZnNldCA8IFJDTV9TSVpFKTsKKwlCQ01NU0cod2xjX2h3LT53bGMtPndpcGh5LCAid2wlZDogd2xjX2JtYWNfc2V0X2FkZHJtYXRjaFxuIiwKKwkJIHdsY19ody0+dW5pdCk7CiAKIAlyZWdzID0gd2xjX2h3LT5yZWdzOwogCW1hY19sID0gYWRkclswXSB8IChhZGRyWzFdIDw8IDgpOwpAQCAtMTY1MywxNyArMTU4NSw5IEBACiAJZDExcmVnc190ICpyZWdzOwogCXUzMiB3b3JkOwogCWJvb2wgYmVfYml0OwotI2lmZGVmIElMX0JJR0VORElBTgotCXZvbGF0aWxlIHUxNiAqZHB0ciA9IE5VTEw7Ci0jZW5kaWYJCQkJLyogSUxfQklHRU5ESUFOICovCi0JV0xfVFJBQ0UoIndsJWQ6IHdsY19ibWFjX3dyaXRlX3RlbXBsYXRlX3JhbVxuIiwgd2xjX2h3LT51bml0KTsKKwlCQ01NU0cod2xjX2h3LT53bGMtPndpcGh5LCAid2wlZFxuIiwgd2xjX2h3LT51bml0KTsKIAogCXJlZ3MgPSB3bGNfaHctPnJlZ3M7Ci0KLQlBU1NFUlQoSVNfQUxJR05FRChvZmZzZXQsIHNpemVvZih1MzIpKSk7Ci0JQVNTRVJUKElTX0FMSUdORUQobGVuLCBzaXplb2YodTMyKSkpOwotCUFTU0VSVCgob2Zmc2V0ICYgfjB4ZmZmZikgPT0gMCk7Ci0KIAlXX1JFRygmcmVncy0+dHBsYXRld3JwdHIsIG9mZnNldCk7CiAKIAkvKiBpZiBNQ1RMX0JJR0VORCBiaXQgc2V0IGluIG1hYyBjb250cm9sIHJlZ2lzdGVyLApAQCAtMTcxNiw4ICsxNjQwLDYgQEAKIAogCXdsY19waHlfYndfc3RhdGVfc2V0KHdsY19ody0+YmFuZC0+cGksIGJ3KTsKIAotCUFTU0VSVCh3bGNfaHctPmNsayk7Ci0KIAl3bGNfYm1hY19waHlfcmVzZXQod2xjX2h3KTsKIAl3bGNfcGh5X2luaXQod2xjX2h3LT5iYW5kLT5waSwgd2xjX3BoeV9jaGFuc3BlY19nZXQod2xjX2h3LT5iYW5kLT5waSkpOwogCkBAIC0xNzM0LDcgKzE2NTYsNiBAQAogCXdsY19ibWFjX3dyaXRlX3RlbXBsYXRlX3JhbSh3bGNfaHcsIFRfQkNOMF9UUExfQkFTRSwgKGxlbiArIDMpICYgfjMsCiAJCQkJICAgIGJjbik7CiAJLyogd3JpdGUgYmVhY29uIGxlbmd0aCB0byBTQ1IgKi8KLQlBU1NFUlQobGVuIDwgNjU1MzYpOwogCXdsY19ibWFjX3dyaXRlX3NobSh3bGNfaHcsIE1fQkNOMF9GUk1fQllURVNaLCAodTE2KSBsZW4pOwogCS8qIG1hcmsgYmVhY29uMCB2YWxpZCAqLwogCU9SX1JFRygmcmVncy0+bWFjY29tbWFuZCwgTUNNRF9CQ04wVkxEKTsKQEAgLTE3NDgsNyArMTY2OSw2IEBACiAJd2xjX2JtYWNfd3JpdGVfdGVtcGxhdGVfcmFtKHdsY19odywgVF9CQ04xX1RQTF9CQVNFLCAobGVuICsgMykgJiB+MywKIAkJCQkgICAgYmNuKTsKIAkvKiB3cml0ZSBiZWFjb24gbGVuZ3RoIHRvIFNDUiAqLwotCUFTU0VSVChsZW4gPCA2NTUzNik7CiAJd2xjX2JtYWNfd3JpdGVfc2htKHdsY19odywgTV9CQ04xX0ZSTV9CWVRFU1osICh1MTYpIGxlbik7CiAJLyogbWFyayBiZWFjb24xIHZhbGlkICovCiAJT1JfUkVHKCZyZWdzLT5tYWNjb21tYW5kLCBNQ01EX0JDTjFWTEQpOwpAQCAtMTc3Miw4ICsxNjkyLDYgQEAKIAkJZWxzZSBpZiAoIQogCQkJIChSX1JFRygmcmVncy0+bWFjY29tbWFuZCkgJiBNQ01EX0JDTjFWTEQpKQogCQkJd2xjX3dyaXRlX2h3X2JjbnRlbXBsYXRlMSh3bGNfaHcsIGJjbiwgbGVuKTsKLQkJZWxzZQkJLyogb25lIHRlbXBsYXRlIHNob3VsZCBhbHdheXMgaGF2ZSBiZWVuIGF2YWlsYWJsZSAqLwotCQkJQVNTRVJUKDApOwogCX0KIH0KIApAQCAtMTgwMCwxNSArMTcxOCw4IEBACiB7CiAJc3RydWN0IHdsY19od19pbmZvICp3bGNfaHcgPSB3bGMtPmh3OwogCi0JV0xfVFJBQ0UoIndsJWQ6IHdsY19ibWFjX2JzaW5pdDogYmFuZHVuaXQgJWRcbiIsCi0JCSB3bGNfaHctPnVuaXQsIHdsY19ody0+YmFuZC0+YmFuZHVuaXQpOwotCi0JLyogc2FuaXR5IGNoZWNrICovCi0JaWYgKFBIWV9UWVBFKFJfUkVHKCZ3bGNfaHctPnJlZ3MtPnBoeXZlcnNpb24pKSAhPQotCSAgICBQSFlfVFlQRV9MQ05YTikKLQkJQVNTRVJUKCh1aW50KQotCQkgICAgICAgUEhZX1RZUEUoUl9SRUcoJndsY19ody0+cmVncy0+cGh5dmVyc2lvbikpCi0JCSAgICAgICA9PSB3bGNfaHctPmJhbmQtPnBoeXR5cGUpOworCUJDTU1TRyh3bGMtPndpcGh5LCAid2wlZDogYmFuZHVuaXQgJWRcbiIsIHdsY19ody0+dW5pdCwKKwkJd2xjX2h3LT5iYW5kLT5iYW5kdW5pdCk7CiAKIAl3bGNfdWNvZGVfYnNpbml0KHdsY19odyk7CiAKQEAgLTE4MzcsMjMgKzE3NDgsMjMgQEAKIAogc3RhdGljIHZvaWQgd2xjX2JtYWNfY29yZV9waHlfY2xrKHN0cnVjdCB3bGNfaHdfaW5mbyAqd2xjX2h3LCBib29sIGNsaykKIHsKLQlXTF9UUkFDRSgid2wlZDogd2xjX2JtYWNfY29yZV9waHlfY2xrOiBjbGsgJWRcbiIsIHdsY19ody0+dW5pdCwgY2xrKTsKKwlCQ01NU0cod2xjX2h3LT53bGMtPndpcGh5LCAid2wlZDogY2xrICVkXG4iLCB3bGNfaHctPnVuaXQsIGNsayk7CiAKIAl3bGNfaHctPnBoeWNsayA9IGNsazsKIAogCWlmIChPRkYgPT0gY2xrKSB7CS8qIGNsZWFyIGdtb2RlIGJpdCwgcHV0IHBoeSBpbnRvIHJlc2V0ICovCiAKLQkJc2lfY29yZV9jZmxhZ3Mod2xjX2h3LT5zaWgsIChTSUNGX1BSU1QgfCBTSUNGX0ZHQyB8IFNJQ0ZfR01PREUpLAorCQlhaV9jb3JlX2NmbGFncyh3bGNfaHctPnNpaCwgKFNJQ0ZfUFJTVCB8IFNJQ0ZfRkdDIHwgU0lDRl9HTU9ERSksCiAJCQkgICAgICAgKFNJQ0ZfUFJTVCB8IFNJQ0ZfRkdDKSk7CiAJCXVkZWxheSgxKTsKLQkJc2lfY29yZV9jZmxhZ3Mod2xjX2h3LT5zaWgsIChTSUNGX1BSU1QgfCBTSUNGX0ZHQyksIFNJQ0ZfUFJTVCk7CisJCWFpX2NvcmVfY2ZsYWdzKHdsY19ody0+c2loLCAoU0lDRl9QUlNUIHwgU0lDRl9GR0MpLCBTSUNGX1BSU1QpOwogCQl1ZGVsYXkoMSk7CiAKIAl9IGVsc2UgewkJLyogdGFrZSBwaHkgb3V0IG9mIHJlc2V0ICovCiAKLQkJc2lfY29yZV9jZmxhZ3Mod2xjX2h3LT5zaWgsIChTSUNGX1BSU1QgfCBTSUNGX0ZHQyksIFNJQ0ZfRkdDKTsKKwkJYWlfY29yZV9jZmxhZ3Mod2xjX2h3LT5zaWgsIChTSUNGX1BSU1QgfCBTSUNGX0ZHQyksIFNJQ0ZfRkdDKTsKIAkJdWRlbGF5KDEpOwotCQlzaV9jb3JlX2NmbGFncyh3bGNfaHctPnNpaCwgKFNJQ0ZfRkdDKSwgMCk7CisJCWFpX2NvcmVfY2ZsYWdzKHdsY19ody0+c2loLCAoU0lDRl9GR0MpLCAwKTsKIAkJdWRlbGF5KDEpOwogCiAJfQpAQCAtMTg2MiwxOCArMTc3MywxOCBAQAogLyogUGVyZm9ybSBhIHNvZnQgcmVzZXQgb2YgdGhlIFBIWSBQTEwgKi8KIHZvaWQgd2xjX2JtYWNfY29yZV9waHlwbGxfcmVzZXQoc3RydWN0IHdsY19od19pbmZvICp3bGNfaHcpCiB7Ci0JV0xfVFJBQ0UoIndsJWQ6IHdsY19ibWFjX2NvcmVfcGh5cGxsX3Jlc2V0XG4iLCB3bGNfaHctPnVuaXQpOworCUJDTU1TRyh3bGNfaHctPndsYy0+d2lwaHksICJ3bCVkXG4iLCB3bGNfaHctPnVuaXQpOwogCi0Jc2lfY29yZXJlZyh3bGNfaHctPnNpaCwgU0lfQ0NfSURYLAorCWFpX2NvcmVyZWcod2xjX2h3LT5zaWgsIFNJX0NDX0lEWCwKIAkJICAgb2Zmc2V0b2YoY2hpcGNyZWdzX3QsIGNoaXBjb250cm9sX2FkZHIpLCB+MCwgMCk7CiAJdWRlbGF5KDEpOwotCXNpX2NvcmVyZWcod2xjX2h3LT5zaWgsIFNJX0NDX0lEWCwKKwlhaV9jb3JlcmVnKHdsY19ody0+c2loLCBTSV9DQ19JRFgsCiAJCSAgIG9mZnNldG9mKGNoaXBjcmVnc190LCBjaGlwY29udHJvbF9kYXRhKSwgMHg0LCAwKTsKIAl1ZGVsYXkoMSk7Ci0Jc2lfY29yZXJlZyh3bGNfaHctPnNpaCwgU0lfQ0NfSURYLAorCWFpX2NvcmVyZWcod2xjX2h3LT5zaWgsIFNJX0NDX0lEWCwKIAkJICAgb2Zmc2V0b2YoY2hpcGNyZWdzX3QsIGNoaXBjb250cm9sX2RhdGEpLCAweDQsIDQpOwogCXVkZWxheSgxKTsKLQlzaV9jb3JlcmVnKHdsY19ody0+c2loLCBTSV9DQ19JRFgsCisJYWlfY29yZXJlZyh3bGNfaHctPnNpaCwgU0lfQ0NfSURYLAogCQkgICBvZmZzZXRvZihjaGlwY3JlZ3NfdCwgY2hpcGNvbnRyb2xfZGF0YSksIDB4NCwgMCk7CiAJdWRlbGF5KDEpOwogfQpAQCAtMTg4OCwxOCArMTc5OSwxOCBAQAogCQlyZXR1cm47CiAKIAlpZiAoT04gPT0gY2xrKQotCQlzaV9jb3JlX2NmbGFncyh3bGNfaHctPnNpaCwgU0lDRl9GR0MsIFNJQ0ZfRkdDKTsKKwkJYWlfY29yZV9jZmxhZ3Mod2xjX2h3LT5zaWgsIFNJQ0ZfRkdDLCBTSUNGX0ZHQyk7CiAJZWxzZQotCQlzaV9jb3JlX2NmbGFncyh3bGNfaHctPnNpaCwgU0lDRl9GR0MsIDApOworCQlhaV9jb3JlX2NmbGFncyh3bGNfaHctPnNpaCwgU0lDRl9GR0MsIDApOwogCiB9CiAKIHZvaWQgd2xjX2JtYWNfbWFjcGh5Y2xrX3NldChzdHJ1Y3Qgd2xjX2h3X2luZm8gKndsY19odywgYm9vbCBjbGspCiB7CiAJaWYgKE9OID09IGNsaykKLQkJc2lfY29yZV9jZmxhZ3Mod2xjX2h3LT5zaWgsIFNJQ0ZfTVBDTEtFLCBTSUNGX01QQ0xLRSk7CisJCWFpX2NvcmVfY2ZsYWdzKHdsY19ody0+c2loLCBTSUNGX01QQ0xLRSwgU0lDRl9NUENMS0UpOwogCWVsc2UKLQkJc2lfY29yZV9jZmxhZ3Mod2xjX2h3LT5zaWgsIFNJQ0ZfTVBDTEtFLCAwKTsKKwkJYWlfY29yZV9jZmxhZ3Mod2xjX2h3LT5zaWgsIFNJQ0ZfTVBDTEtFLCAwKTsKIH0KIAogdm9pZCB3bGNfYm1hY19waHlfcmVzZXQoc3RydWN0IHdsY19od19pbmZvICp3bGNfaHcpCkBAIC0xOTA4LDcgKzE4MTksNyBAQAogCXUzMiBwaHlfYndfY2xrYml0czsKIAlib29sIHBoeV9pbl9yZXNldCA9IGZhbHNlOwogCi0JV0xfVFJBQ0UoIndsJWQ6IHdsY19ibWFjX3BoeV9yZXNldFxuIiwgd2xjX2h3LT51bml0KTsKKwlCQ01NU0cod2xjX2h3LT53bGMtPndpcGh5LCAid2wlZFxuIiwgd2xjX2h3LT51bml0KTsKIAogCWlmIChwaWggPT0gTlVMTCkKIAkJcmV0dXJuOwpAQCAtMTkxOSw3ICsxODMwLDcgQEAKIAlpZiAoV0xDSVNOUEhZKHdsY19ody0+YmFuZCkgJiYgTlJFVl9HRSh3bGNfaHctPmJhbmQtPnBoeXJldiwgMykgJiYKIAkgICAgTlJFVl9MRSh3bGNfaHctPmJhbmQtPnBoeXJldiwgNCkpIHsKIAkJLyogU2V0IHRoZSBQSFkgYmFuZHdpZHRoICovCi0JCXNpX2NvcmVfY2ZsYWdzKHdsY19ody0+c2loLCBTSUNGX0JXTUFTSywgcGh5X2J3X2Nsa2JpdHMpOworCQlhaV9jb3JlX2NmbGFncyh3bGNfaHctPnNpaCwgU0lDRl9CV01BU0ssIHBoeV9id19jbGtiaXRzKTsKIAogCQl1ZGVsYXkoMSk7CiAKQEAgLTE5MjcsMTIgKzE4MzgsMTIgQEAKIAkJd2xjX2JtYWNfY29yZV9waHlwbGxfcmVzZXQod2xjX2h3KTsKIAogCQkvKiByZXNldCB0aGUgUEhZICovCi0JCXNpX2NvcmVfY2ZsYWdzKHdsY19ody0+c2loLCAoU0lDRl9QUlNUIHwgU0lDRl9QQ0xLRSksCisJCWFpX2NvcmVfY2ZsYWdzKHdsY19ody0+c2loLCAoU0lDRl9QUlNUIHwgU0lDRl9QQ0xLRSksCiAJCQkgICAgICAgKFNJQ0ZfUFJTVCB8IFNJQ0ZfUENMS0UpKTsKIAkJcGh5X2luX3Jlc2V0ID0gdHJ1ZTsKIAl9IGVsc2UgewogCi0JCXNpX2NvcmVfY2ZsYWdzKHdsY19ody0+c2loLAorCQlhaV9jb3JlX2NmbGFncyh3bGNfaHctPnNpaCwKIAkJCSAgICAgICAoU0lDRl9QUlNUIHwgU0lDRl9QQ0xLRSB8IFNJQ0ZfQldNQVNLKSwKIAkJCSAgICAgICAoU0lDRl9QUlNUIHwgU0lDRl9QQ0xLRSB8IHBoeV9id19jbGtiaXRzKSk7CiAJfQpAQCAtMTk1MSwxMyArMTg2Miw5IEBACiAJc3RydWN0IHdsY19pbmZvICp3bGMgPSB3bGNfaHctPndsYzsKIAl1MzIgbWFjaW50bWFzazsKIAotCUFTU0VSVChOQkFORFNfSFcod2xjX2h3KSA+IDEpOwotCUFTU0VSVChiYW5kdW5pdCAhPSB3bGNfaHctPmJhbmQtPmJhbmR1bml0KTsKLQogCS8qIEVuYWJsZSB0aGUgZDExIGNvcmUgYmVmb3JlIGFjY2Vzc2luZyBpdCAqLwotCWlmICghc2lfaXNjb3JldXAod2xjX2h3LT5zaWgpKSB7Ci0JCXNpX2NvcmVfcmVzZXQod2xjX2h3LT5zaWgsIDAsIDApOwotCQlBU1NFUlQoc2lfaXNjb3JldXAod2xjX2h3LT5zaWgpKTsKKwlpZiAoIWFpX2lzY29yZXVwKHdsY19ody0+c2loKSkgeworCQlhaV9jb3JlX3Jlc2V0KHdsY19ody0+c2loLCAwLCAwKTsKIAkJd2xjX21jdHJsX3Jlc2V0KHdsY19odyk7CiAJfQogCkBAIC0xOTgzLDE0ICsxODkwLDE0IEBACiAJd2xfaW50cnNyZXN0b3JlKHdsYy0+d2wsIG1hY2ludG1hc2spOwogCiAJLyogdWNvZGUgc2hvdWxkIHN0aWxsIGJlIHN1c3BlbmRlZC4uICovCi0JQVNTRVJUKChSX1JFRygmd2xjX2h3LT5yZWdzLT5tYWNjb250cm9sKSAmIE1DVExfRU5fTUFDKSA9PQotCSAgICAgICAwKTsKKwlXQVJOX09OKChSX1JFRygmd2xjX2h3LT5yZWdzLT5tYWNjb250cm9sKSAmIE1DVExfRU5fTUFDKSAhPSAwKTsKIH0KIAogLyogbG93LWxldmVsIGJhbmQgc3dpdGNoIHV0aWxpdHkgcm91dGluZSAqLwogdm9pZCBXTEJBTkRJTklURk4od2xjX3NldHhiYW5kKSAoc3RydWN0IHdsY19od19pbmZvICp3bGNfaHcsIHVpbnQgYmFuZHVuaXQpCiB7Ci0JV0xfVFJBQ0UoIndsJWQ6IHdsY19zZXR4YmFuZDogYmFuZHVuaXQgJWRcbiIsIHdsY19ody0+dW5pdCwgYmFuZHVuaXQpOworCUJDTU1TRyh3bGNfaHctPndsYy0+d2lwaHksICJ3bCVkOiBiYW5kdW5pdCAlZFxuIiwgd2xjX2h3LT51bml0LAorCQliYW5kdW5pdCk7CiAKIAl3bGNfaHctPmJhbmQgPSB3bGNfaHctPmJhbmRzdGF0ZVtiYW5kdW5pdF07CiAKQEAgLTE5OTksNyArMTkwNiw3IEBACiAKIAkvKiBzZXQgZ21vZGUgY29yZSBmbGFnICovCiAJaWYgKHdsY19ody0+c2JjbGsgJiYgIXdsY19ody0+bm9yZXNldCkgewotCQlzaV9jb3JlX2NmbGFncyh3bGNfaHctPnNpaCwgU0lDRl9HTU9ERSwKKwkJYWlfY29yZV9jZmxhZ3Mod2xjX2h3LT5zaWgsIFNJQ0ZfR01PREUsCiAJCQkgICAgICAgKChiYW5kdW5pdCA9PSAwKSA/IFNJQ0ZfR01PREUgOiAwKSk7CiAJfQogfQpAQCAtMjAwOSw3ICsxOTE2LDggQEAKIAogCS8qIHJlamVjdCB1bnN1cHBvcnRlZCBjb3JlcmV2ICovCiAJaWYgKCFWQUxJRF9DT1JFUkVWKHdsY19ody0+Y29yZXJldikpIHsKLQkJV0xfRVJST1IoInVuc3VwcG9ydGVkIGNvcmUgcmV2ICVkXG4iLCB3bGNfaHctPmNvcmVyZXYpOworCQl3aXBoeV9lcnIod2xjX2h3LT53bGMtPndpcGh5LCAidW5zdXBwb3J0ZWQgY29yZSByZXYgJWRcbiIsCisJCQkgIHdsY19ody0+Y29yZXJldik7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKQEAgLTIwMzQsNyArMTk0Miw3IEBACiAJCQlnb29kYm9hcmQgPSBmYWxzZTsKIAl9CiAKLQlpZiAod2xjX2h3LT5zaWgtPmJvYXJkdmVuZG9yICE9IFZFTkRPUl9CUk9BRENPTSkKKwlpZiAod2xjX2h3LT5zaWgtPmJvYXJkdmVuZG9yICE9IFBDSV9WRU5ET1JfSURfQlJPQURDT00pCiAJCXJldHVybiBnb29kYm9hcmQ7CiAKIAlyZXR1cm4gZ29vZGJvYXJkOwpAQCAtMjA1Nyw4ICsxOTY1LDggQEAKIAogCW1hY2FkZHIgPSBnZXR2YXIod2xjX2h3LT52YXJzLCB2YXJuYW1lKTsKIAlpZiAobWFjYWRkciA9PSBOVUxMKSB7Ci0JCVdMX0VSUk9SKCJ3bCVkOiB3bGNfZ2V0X21hY2FkZHI6IG1hY2FkZHIgZ2V0dmFyKCVzKSBub3QgZm91bmRcbiIsCi0JCQkgd2xjX2h3LT51bml0LCB2YXJuYW1lKTsKKwkJd2lwaHlfZXJyKHdsY19ody0+d2xjLT53aXBoeSwgIndsJWQ6IHdsY19nZXRfbWFjYWRkcjogbWFjYWRkciAiCisJCQkgICJnZXR2YXIoJXMpIG5vdCBmb3VuZFxuIiwgd2xjX2h3LT51bml0LCB2YXJuYW1lKTsKIAl9CiAKIAlyZXR1cm4gbWFjYWRkcjsKQEAgLTIwOTQsOSArMjAwMiw5IEBACiAJCSAgICAod2xjX2h3LT5zaWgtPmNoaXAgPT0gQkNNNDMyMjVfQ0hJUF9JRCkgfHwKIAkJICAgICh3bGNfaHctPnNpaC0+Y2hpcCA9PSBCQ000MzQyMV9DSElQX0lEKSkKIAkJCXdsY19ody0+cmVncyA9Ci0JCQkgICAgKGQxMXJlZ3NfdCAqKSBzaV9zZXRjb3JlKHdsY19ody0+c2loLCBEMTFfQ09SRV9JRCwKKwkJCSAgICAoZDExcmVnc190ICopIGFpX3NldGNvcmUod2xjX2h3LT5zaWgsIEQxMV9DT1JFX0lELAogCQkJCQkJICAgICAwKTsKLQkJc2lfY29yZV9yZXNldCh3bGNfaHctPnNpaCwgZmxhZ3MsIHJlc2V0Yml0cyk7CisJCWFpX2NvcmVfcmVzZXQod2xjX2h3LT5zaWgsIGZsYWdzLCByZXNldGJpdHMpOwogCQl3bGNfbWN0cmxfcmVzZXQod2xjX2h3KTsKIAl9CiAKQEAgLTIxMDQsNyArMjAxMiw3IEBACiAKIAkvKiBwdXQgY29yZSBiYWNrIGludG8gcmVzZXQgKi8KIAlpZiAoIWNsaykKLQkJc2lfY29yZV9kaXNhYmxlKHdsY19ody0+c2loLCAwKTsKKwkJYWlfY29yZV9kaXNhYmxlKHdsY19ody0+c2loLCAwKTsKIAogCWlmICgheHRhbCkKIAkJd2xjX2JtYWNfeHRhbCh3bGNfaHcsIE9GRik7CkBAIC0yMTE4LDI1ICsyMDI2LDI1IEBACiAJaWYgKHdsY19ody0+d2xjLT5wdWItPmh3X3VwKQogCQlyZXR1cm47CiAKLQlXTF9UUkFDRSgid2wlZDogJXM6XG4iLCB3bGNfaHctPnVuaXQsIF9fZnVuY19fKTsKKwlCQ01NU0cod2xjX2h3LT53bGMtPndpcGh5LCAid2wlZFxuIiwgd2xjX2h3LT51bml0KTsKIAogCS8qCiAJICogRW5hYmxlIHBsbCBhbmQgeHRhbCwgaW5pdGlhbGl6ZSB0aGUgcG93ZXIgY29udHJvbCByZWdpc3RlcnMsCiAJICogYW5kIGZvcmNlIGZhc3RjbG9jayBmb3IgdGhlIHJlbWFpbmRlciBvZiB3bGNfdXAoKS4KIAkgKi8KIAl3bGNfYm1hY194dGFsKHdsY19odywgT04pOwotCXNpX2Nsa2N0bF9pbml0KHdsY19ody0+c2loKTsKKwlhaV9jbGtjdGxfaW5pdCh3bGNfaHctPnNpaCk7CiAJd2xjX2Nsa2N0bF9jbGsod2xjX2h3LCBDTEtfRkFTVCk7CiAKIAlpZiAod2xjX2h3LT5zaWgtPmJ1c3R5cGUgPT0gUENJX0JVUykgewotCQlzaV9wY2lfZml4Y2ZnKHdsY19ody0+c2loKTsKKwkJYWlfcGNpX2ZpeGNmZyh3bGNfaHctPnNpaCk7CiAKIAkJLyogQUkgY2hpcCBkb2Vzbid0IHJlc3RvcmUgYmFyMHdpbjIgb24gaGliZXJuYXRpb24vcmVzdW1lLCBuZWVkIHN3IGZpeHVwICovCiAJCWlmICgod2xjX2h3LT5zaWgtPmNoaXAgPT0gQkNNNDMyMjRfQ0hJUF9JRCkgfHwKIAkJICAgICh3bGNfaHctPnNpaC0+Y2hpcCA9PSBCQ000MzIyNV9DSElQX0lEKSB8fAogCQkgICAgKHdsY19ody0+c2loLT5jaGlwID09IEJDTTQzNDIxX0NISVBfSUQpKQogCQkJd2xjX2h3LT5yZWdzID0KLQkJCSAgICAoZDExcmVnc190ICopIHNpX3NldGNvcmUod2xjX2h3LT5zaWgsIEQxMV9DT1JFX0lELAorCQkJICAgIChkMTFyZWdzX3QgKikgYWlfc2V0Y29yZSh3bGNfaHctPnNpaCwgRDExX0NPUkVfSUQsCiAJCQkJCQkgICAgIDApOwogCX0KIApAQCAtMjE1MSw3ICsyMDU5LDcgQEAKIAkJaWYgKCEKIAkJICAgICh3bGNfaHctPmJvYXJkcmV2ID49IDB4MTI1MAogCQkgICAgICYmICh3bGNfaHctPmJvYXJkZmxhZ3MgJiBCRkxfRkVNX0JUKSkpCi0JCQlzaV9lcGFfNDMxM3dhcih3bGNfaHctPnNpaCk7CisJCQlhaV9lcGFfNDMxM3dhcih3bGNfaHctPnNpaCk7CiAJfQogfQogCkBAIC0yMTc5LDcgKzIwODcsNyBAQAogCWlmIChmbGFncyA9PSBXTENfVVNFX0NPUkVGTEFHUykKIAkJZmxhZ3MgPSAod2xjX2h3LT5iYW5kLT5waSA/IHdsY19ody0+YmFuZC0+Y29yZV9mbGFncyA6IDApOwogCi0JV0xfVFJBQ0UoIndsJWQ6ICVzXG4iLCB3bGNfaHctPnVuaXQsIF9fZnVuY19fKTsKKwlCQ01NU0cod2xjX2h3LT53bGMtPndpcGh5LCAid2wlZFxuIiwgd2xjX2h3LT51bml0KTsKIAogCXJlZ3MgPSB3bGNfaHctPnJlZ3M7CiAKQEAgLTIxODksMTcgKzIwOTcsMTkgQEAKIAkJd2xjX2Nsa2N0bF9jbGsod2xjX2h3LCBDTEtfRkFTVCk7CiAKIAkvKiByZXNldCB0aGUgZG1hIGVuZ2luZXMgZXhjZXB0IGZpcnN0IHRpbWUgdGhydSAqLwotCWlmIChzaV9pc2NvcmV1cCh3bGNfaHctPnNpaCkpIHsKKwlpZiAoYWlfaXNjb3JldXAod2xjX2h3LT5zaWgpKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBORklGTzsgaSsrKQogCQkJaWYgKCh3bGNfaHctPmRpW2ldKSAmJiAoIWRtYV90eHJlc2V0KHdsY19ody0+ZGlbaV0pKSkgewotCQkJCVdMX0VSUk9SKCJ3bCVkOiAlczogZG1hX3R4cmVzZXRbJWRdOiBjYW5ub3Qgc3RvcCBkbWFcbiIsCi0JCQkJCSB3bGNfaHctPnVuaXQsIF9fZnVuY19fLCBpKTsKKwkJCQl3aXBoeV9lcnIod2xjX2h3LT53bGMtPndpcGh5LCAid2wlZDogJXM6ICIKKwkJCQkJICAiZG1hX3R4cmVzZXRbJWRdOiBjYW5ub3Qgc3RvcCBkbWFcbiIsCisJCQkJCSAgIHdsY19ody0+dW5pdCwgX19mdW5jX18sIGkpOwogCQkJfQogCiAJCWlmICgod2xjX2h3LT5kaVtSWF9GSUZPXSkKIAkJICAgICYmICghd2xjX2RtYV9yeHJlc2V0KHdsY19odywgUlhfRklGTykpKSB7Ci0JCQlXTF9FUlJPUigid2wlZDogJXM6IGRtYV9yeHJlc2V0WyVkXTogY2Fubm90IHN0b3AgZG1hXG4iLAotCQkJCSB3bGNfaHctPnVuaXQsIF9fZnVuY19fLCBSWF9GSUZPKTsKKwkJCXdpcGh5X2Vycih3bGNfaHctPndsYy0+d2lwaHksICJ3bCVkOiAlczogZG1hX3J4cmVzZXQiCisJCQkJICAiWyVkXTogY2Fubm90IHN0b3AgZG1hXG4iLAorCQkJCSAgd2xjX2h3LT51bml0LCBfX2Z1bmNfXywgUlhfRklGTyk7CiAJCX0KIAl9CiAJLyogaWYgbm9yZXNldCwganVzdCBzdG9wIHRoZSBwc20gYW5kIHJldHVybiAqLwpAQCAtMjIyNCw3ICsyMTM0LDcgQEAKIAkgKiAgd2l0aCBvdGhlciBkcml2ZXIgbGlrZSBtaXBzL2FybSBzaW5jZSB0aGV5IG1heSB0b3VjaCBjaGlwY29tbW9uIGFzIHdlbGwuCiAJICovCiAJd2xjX2h3LT5jbGsgPSBmYWxzZTsKLQlzaV9jb3JlX3Jlc2V0KHdsY19ody0+c2loLCBmbGFncywgcmVzZXRiaXRzKTsKKwlhaV9jb3JlX3Jlc2V0KHdsY19ody0+c2loLCBmbGFncywgcmVzZXRiaXRzKTsKIAl3bGNfaHctPmNsayA9IHRydWU7CiAJaWYgKHdsY19ody0+YmFuZCAmJiB3bGNfaHctPmJhbmQtPnBpKQogCQl3bGNfcGh5X2h3X2Nsa19zdGF0ZV91cGQod2xjX2h3LT5iYW5kLT5waSwgdHJ1ZSk7CkBAIC0yMzE1LDEwICsyMjI1LDExIEBACiAJYm9vbCBmaWZvc3pfZml4dXAgPSBmYWxzZTsKIAlpbnQgZXJyID0gMDsKIAl1MTYgYnVmW05GSUZPXTsKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gd2xjLT53aXBoeTsKIAogCXJlZ3MgPSB3bGNfaHctPnJlZ3M7CiAKLQlXTF9UUkFDRSgid2wlZDogd2xjX2NvcmVpbml0XG4iLCB3bGNfaHctPnVuaXQpOworCUJDTU1TRyh3bGMtPndpcGh5LCAid2wlZFxuIiwgd2xjX2h3LT51bml0KTsKIAogCS8qIHJlc2V0IFBTTSAqLwogCXdsY19ibWFjX21jdHJsKHdsY19odywgfjAsIChNQ1RMX0lIUl9FTiB8IE1DVExfUFNNX0pNUF8wIHwgTUNUTF9XQUtFKSk7CkBAIC0yMzM4LDI5ICsyMjQ5LDMxIEBACiAJU1BJTldBSVQoKChSX1JFRygmcmVncy0+bWFjaW50c3RhdHVzKSAmIE1JX01BQ1NTUE5ERCkgPT0gMCksCiAJCSAxMDAwICogMTAwMCk7CiAJaWYgKChSX1JFRygmcmVncy0+bWFjaW50c3RhdHVzKSAmIE1JX01BQ1NTUE5ERCkgPT0gMCkKLQkJV0xfRVJST1IoIndsJWQ6IHdsY19jb3JlaW5pdDogdWNvZGUgZGlkIG5vdCBzZWxmLXN1c3BlbmQhXG4iLAotCQkJIHdsY19ody0+dW5pdCk7CisJCXdpcGh5X2Vycih3aXBoeSwgIndsJWQ6IHdsY19jb3JlaW5pdDogdWNvZGUgZGlkIG5vdCBzZWxmLSIKKwkJCSAgInN1c3BlbmQhXG4iLCB3bGNfaHctPnVuaXQpOwogCiAJd2xjX2dwaW9faW5pdCh3bGMpOwogCi0Jc2ZsYWdzID0gc2lfY29yZV9zZmxhZ3Mod2xjX2h3LT5zaWgsIDAsIDApOworCXNmbGFncyA9IGFpX2NvcmVfc2ZsYWdzKHdsY19ody0+c2loLCAwLCAwKTsKIAogCWlmIChEMTFSRVZfSVMod2xjX2h3LT5jb3JlcmV2LCAyMykpIHsKIAkJaWYgKFdMQ0lTTlBIWSh3bGNfaHctPmJhbmQpKQogCQkJd2xjX3dyaXRlX2luaXRzKHdsY19odywgZDExbjBpbml0dmFsczE2KTsKIAkJZWxzZQotCQkJV0xfRVJST1IoIiVzOiB3bCVkOiB1bnN1cHBvcnRlZCBwaHkgaW4gY29yZXJldiAlZFxuIiwKLQkJCQkgX19mdW5jX18sIHdsY19ody0+dW5pdCwgd2xjX2h3LT5jb3JlcmV2KTsKKwkJCXdpcGh5X2Vycih3aXBoeSwgIiVzOiB3bCVkOiB1bnN1cHBvcnRlZCBwaHkgaW4gY29yZXJldiIKKwkJCQkgICIgJWRcbiIsIF9fZnVuY19fLCB3bGNfaHctPnVuaXQsCisJCQkJICB3bGNfaHctPmNvcmVyZXYpOwogCX0gZWxzZSBpZiAoRDExUkVWX0lTKHdsY19ody0+Y29yZXJldiwgMjQpKSB7CiAJCWlmIChXTENJU0xDTlBIWSh3bGNfaHctPmJhbmQpKSB7CiAJCQl3bGNfd3JpdGVfaW5pdHMod2xjX2h3LCBkMTFsY24waW5pdHZhbHMyNCk7CiAJCX0gZWxzZSB7Ci0JCQlXTF9FUlJPUigiJXM6IHdsJWQ6IHVuc3VwcG9ydGVkIHBoeSBpbiBjb3JlcmV2ICVkXG4iLAotCQkJCSBfX2Z1bmNfXywgd2xjX2h3LT51bml0LCB3bGNfaHctPmNvcmVyZXYpOworCQkJd2lwaHlfZXJyKHdpcGh5LCAiJXM6IHdsJWQ6IHVuc3VwcG9ydGVkIHBoeSBpbiBjb3JlcmV2IgorCQkJCSAgIiAlZFxuIiwgX19mdW5jX18sIHdsY19ody0+dW5pdCwKKwkJCQkgIHdsY19ody0+Y29yZXJldik7CiAJCX0KIAl9IGVsc2UgewotCQlXTF9FUlJPUigiJXM6IHdsJWQ6IHVuc3VwcG9ydGVkIGNvcmVyZXYgJWRcbiIsCi0JCQkgX19mdW5jX18sIHdsY19ody0+dW5pdCwgd2xjX2h3LT5jb3JlcmV2KTsKKwkJd2lwaHlfZXJyKHdpcGh5LCAiJXM6IHdsJWQ6IHVuc3VwcG9ydGVkIGNvcmVyZXYgJWRcbiIsCisJCQkgIF9fZnVuY19fLCB3bGNfaHctPnVuaXQsIHdsY19ody0+Y29yZXJldik7CiAJfQogCiAJLyogRm9yIG9sZCB1Y29kZSwgdHhmaWZvIHNpemVzIG5lZWRzIHRvIGJlIG1vZGlmaWVkKGluY3JlYXNlZCkgKi8KQEAgLTI0MDIsMTMgKzIzMTUsMTMgQEAKIAkJZXJyID0gLTE7CiAJfQogCWlmIChlcnIgIT0gMCkgewotCQlXTF9FUlJPUigid2xjX2NvcmVpbml0OiB0eGZpZm8gbWlzbWF0Y2g6IHVjb2RlIHNpemUgJWQgZHJpdmVyIHNpemUgJWQgaW5kZXggJWRcbiIsCi0JCQkgYnVmW2ldLCB3bGNfaHctPnhtdGZpZm9fc3pbaV0sIGkpOwotCQlBU1NFUlQoMCk7CisJCXdpcGh5X2Vycih3aXBoeSwgIndsY19jb3JlaW5pdDogdHhmaWZvIG1pc21hdGNoOiB1Y29kZSBzaXplICVkIgorCQkJICAiIGRyaXZlciBzaXplICVkIGluZGV4ICVkXG4iLCBidWZbaV0sCisJCQkgIHdsY19ody0+eG10Zmlmb19zeltpXSwgaSk7CiAJfQogCiAJLyogbWFrZSBzdXJlIHdlIGNhbiBzdGlsbCB0YWxrIHRvIHRoZSBtYWMgKi8KLQlBU1NFUlQoUl9SRUcoJnJlZ3MtPm1hY2NvbnRyb2wpICE9IDB4ZmZmZmZmZmYpOworCVdBUk5fT04oUl9SRUcoJnJlZ3MtPm1hY2NvbnRyb2wpID09IDB4ZmZmZmZmZmYpOwogCiAJLyogYmFuZC1zcGVjaWZpYyBpbml0cyBkb25lIGJ5IHdsY19ic2luaXQoKSAqLwogCkBAIC0yNDM3LDcgKzIzNTAsNyBAQAogCXdsY19ibWFjX21hY3BoeWNsa19zZXQod2xjX2h3LCBPTik7CiAKIAkvKiBwcm9ncmFtIGR5bmFtaWMgY2xvY2sgY29udHJvbCBmYXN0IHBvd2VydXAgZGVsYXkgcmVnaXN0ZXIgKi8KLQl3bGMtPmZhc3Rwd3J1cF9kbHkgPSBzaV9jbGtjdGxfZmFzdF9wd3J1cF9kZWxheSh3bGNfaHctPnNpaCk7CisJd2xjLT5mYXN0cHdydXBfZGx5ID0gYWlfY2xrY3RsX2Zhc3RfcHdydXBfZGVsYXkod2xjX2h3LT5zaWgpOwogCVdfUkVHKCZyZWdzLT5zY2NfZmFzdHB3cnVwX2RseSwgd2xjLT5mYXN0cHdydXBfZGx5KTsKIAogCS8qIHRlbGwgdGhlIHVjb2RlIHRoZSBjb3JlcmV2ICovCkBAIC0yNTU0LDcgKzI0NjcsNiBAQAogCQl3bGNfcGh5X2FudHNlbF9pbml0KHdsY19ody0+YmFuZC0+cGksIGZhbHNlKTsKIAogCX0gZWxzZSBpZiAod2xjX2h3LT5hbnRzZWxfdHlwZSA9PSBBTlRTRUxfMng0KSB7Ci0JCUFTU0VSVCgoZ20gJiBCT0FSRF9HUElPXzEyKSA9PSAwKTsKIAkJZ20gfD0gZ2MgfD0gKEJPQVJEX0dQSU9fMTIgfCBCT0FSRF9HUElPXzEzKTsKIAkJLyoKIAkJICogVGhlIGJvYXJkIGl0c2VsZiBpcyBwb3dlcmVkIGJ5IHRoZXNlIEdQSU9zCkBAIC0yNTgxLDcgKzI0OTMsNyBAQAogCQlnbSB8PSBnYyB8PSBCT0FSRF9HUElPX1BBQ1RSTDsKIAogCS8qIGFwcGx5IHRvIGdwaW9jb250cm9sIHJlZ2lzdGVyICovCi0Jc2lfZ3Bpb2NvbnRyb2wod2xjX2h3LT5zaWgsIGdtLCBnYywgR1BJT19EUlZfUFJJT1JJVFkpOworCWFpX2dwaW9jb250cm9sKHdsY19ody0+c2loLCBnbSwgZ2MsIEdQSU9fRFJWX1BSSU9SSVRZKTsKIH0KIAogc3RhdGljIHZvaWQgd2xjX3Vjb2RlX2Rvd25sb2FkKHN0cnVjdCB3bGNfaHdfaW5mbyAqd2xjX2h3KQpAQCAtMjU5OCwxNiArMjUxMCwxOCBAQAogCQkJCQliY200M3h4XzE2X21pbW9zeik7CiAJCQl3bGNfaHctPnVjb2RlX2xvYWRlZCA9IHRydWU7CiAJCX0gZWxzZQotCQkJV0xfRVJST1IoIiVzOiB3bCVkOiB1bnN1cHBvcnRlZCBwaHkgaW4gY29yZXJldiAlZFxuIiwKLQkJCQkgX19mdW5jX18sIHdsY19ody0+dW5pdCwgd2xjX2h3LT5jb3JlcmV2KTsKKwkJCXdpcGh5X2Vycih3bGMtPndpcGh5LCAiJXM6IHdsJWQ6IHVuc3VwcG9ydGVkIHBoeSBpbiAiCisJCQkJICAiY29yZXJldiAlZFxuIiwKKwkJCQkgIF9fZnVuY19fLCB3bGNfaHctPnVuaXQsIHdsY19ody0+Y29yZXJldik7CiAJfSBlbHNlIGlmIChEMTFSRVZfSVMod2xjX2h3LT5jb3JlcmV2LCAyNCkpIHsKIAkJaWYgKFdMQ0lTTENOUEhZKHdsY19ody0+YmFuZCkpIHsKIAkJCXdsY191Y29kZV93cml0ZSh3bGNfaHcsIGJjbTQzeHhfMjRfbGNuLAogCQkJCQliY200M3h4XzI0X2xjbnN6KTsKIAkJCXdsY19ody0+dWNvZGVfbG9hZGVkID0gdHJ1ZTsKIAkJfSBlbHNlIHsKLQkJCVdMX0VSUk9SKCIlczogd2wlZDogdW5zdXBwb3J0ZWQgcGh5IGluIGNvcmVyZXYgJWRcbiIsCi0JCQkJIF9fZnVuY19fLCB3bGNfaHctPnVuaXQsIHdsY19ody0+Y29yZXJldik7CisJCQl3aXBoeV9lcnIod2xjLT53aXBoeSwgIiVzOiB3bCVkOiB1bnN1cHBvcnRlZCBwaHkgaW4gIgorCQkJCSAgImNvcmVyZXYgJWRcbiIsCisJCQkJICBfX2Z1bmNfXywgd2xjX2h3LT51bml0LCB3bGNfaHctPmNvcmVyZXYpOwogCQl9CiAJfQogfQpAQCAtMjYxOCw5ICsyNTMyLDcgQEAKIAl1aW50IGk7CiAJdWludCBjb3VudDsKIAotCVdMX1RSQUNFKCJ3bCVkOiB3bGNfdWNvZGVfd3JpdGVcbiIsIHdsY19ody0+dW5pdCk7Ci0KLQlBU1NFUlQoSVNfQUxJR05FRChuYnl0ZXMsIHNpemVvZih1MzIpKSk7CisJQkNNTVNHKHdsY19ody0+d2xjLT53aXBoeSwgIndsJWRcbiIsIHdsY19ody0+dW5pdCk7CiAKIAljb3VudCA9IChuYnl0ZXMgLyBzaXplb2YodTMyKSk7CiAKQEAgLTI2MzYsMTMgKzI1NDgsMTEgQEAKIAlpbnQgaTsKIAl2b2xhdGlsZSB1OCAqYmFzZTsKIAotCVdMX1RSQUNFKCJ3bCVkOiB3bGNfd3JpdGVfaW5pdHNcbiIsIHdsY19ody0+dW5pdCk7CisJQkNNTVNHKHdsY19ody0+d2xjLT53aXBoeSwgIndsJWRcbiIsIHdsY19ody0+dW5pdCk7CiAKIAliYXNlID0gKHZvbGF0aWxlIHU4ICopd2xjX2h3LT5yZWdzOwogCiAJZm9yIChpID0gMDsgaW5pdHNbaV0uYWRkciAhPSAweGZmZmY7IGkrKykgewotCQlBU1NFUlQoKGluaXRzW2ldLnNpemUgPT0gMikgfHwgKGluaXRzW2ldLnNpemUgPT0gNCkpOwotCiAJCWlmIChpbml0c1tpXS5zaXplID09IDIpCiAJCQlXX1JFRygodTE2ICopKGJhc2UgKyBpbml0c1tpXS5hZGRyKSwKIAkJCSAgICAgIGluaXRzW2ldLnZhbHVlKTsKQEAgLTI3MDAsNiArMjYxMCw3IEBACiAJdWludCB1bml0OwogCXVpbnQgaW50c3RhdHVzLCBpZHg7CiAJZDExcmVnc190ICpyZWdzID0gd2xjX2h3LT5yZWdzOworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSB3bGNfaHctPndsYy0+d2lwaHk7CiAKIAl1bml0ID0gd2xjX2h3LT51bml0OwogCkBAIC0yNzEwLDQ2ICsyNjIxLDQxIEBACiAJCWlmICghaW50c3RhdHVzKQogCQkJY29udGludWU7CiAKLQkJV0xfVFJBQ0UoIndsJWQ6IHdsY19ibWFjX2ZpZm9lcnJvcnM6IGludHN0YXR1cyVkIDB4JXhcbiIsCi0JCQkgdW5pdCwgaWR4LCBpbnRzdGF0dXMpOworCQlCQ01NU0cod2xjX2h3LT53bGMtPndpcGh5LCAid2wlZDogaW50c3RhdHVzJWQgMHgleFxuIiwKKwkJCXVuaXQsIGlkeCwgaW50c3RhdHVzKTsKIAogCQlpZiAoaW50c3RhdHVzICYgSV9STykgewotCQkJV0xfRVJST1IoIndsJWQ6IGZpZm8gJWQ6IHJlY2VpdmUgZmlmbyBvdmVyZmxvd1xuIiwKLQkJCQkgdW5pdCwgaWR4KTsKLQkJCXdsY19ody0+d2xjLT5wdWItPl9jbnQtPnJ4b2ZsbysrOworCQkJd2lwaHlfZXJyKHdpcGh5LCAid2wlZDogZmlmbyAlZDogcmVjZWl2ZSBmaWZvICIKKwkJCQkgICJvdmVyZmxvd1xuIiwgdW5pdCwgaWR4KTsKIAkJCWZhdGFsID0gdHJ1ZTsKIAkJfQogCiAJCWlmIChpbnRzdGF0dXMgJiBJX1BDKSB7Ci0JCQlXTF9FUlJPUigid2wlZDogZmlmbyAlZDogZGVzY3JpcHRvciBlcnJvclxuIiwKKwkJCXdpcGh5X2Vycih3aXBoeSwgIndsJWQ6IGZpZm8gJWQ6IGRlc2NyaXB0b3IgZXJyb3JcbiIsCiAJCQkJIHVuaXQsIGlkeCk7Ci0JCQl3bGNfaHctPndsYy0+cHViLT5fY250LT5kbWFkZSsrOwogCQkJZmF0YWwgPSB0cnVlOwogCQl9CiAKIAkJaWYgKGludHN0YXR1cyAmIElfUEQpIHsKLQkJCVdMX0VSUk9SKCJ3bCVkOiBmaWZvICVkOiBkYXRhIGVycm9yXG4iLCB1bml0LCBpZHgpOwotCQkJd2xjX2h3LT53bGMtPnB1Yi0+X2NudC0+ZG1hZGErKzsKKwkJCXdpcGh5X2Vycih3aXBoeSwgIndsJWQ6IGZpZm8gJWQ6IGRhdGEgZXJyb3JcbiIsIHVuaXQsCisJCQkJICBpZHgpOwogCQkJZmF0YWwgPSB0cnVlOwogCQl9CiAKIAkJaWYgKGludHN0YXR1cyAmIElfREUpIHsKLQkJCVdMX0VSUk9SKCJ3bCVkOiBmaWZvICVkOiBkZXNjcmlwdG9yIHByb3RvY29sIGVycm9yXG4iLAotCQkJCSB1bml0LCBpZHgpOwotCQkJd2xjX2h3LT53bGMtPnB1Yi0+X2NudC0+ZG1hcGUrKzsKKwkJCXdpcGh5X2Vycih3aXBoeSwgIndsJWQ6IGZpZm8gJWQ6IGRlc2NyaXB0b3IgcHJvdG9jb2wgIgorCQkJCSAgImVycm9yXG4iLCB1bml0LCBpZHgpOwogCQkJZmF0YWwgPSB0cnVlOwogCQl9CiAKIAkJaWYgKGludHN0YXR1cyAmIElfUlUpIHsKLQkJCVdMX0VSUk9SKCJ3bCVkOiBmaWZvICVkOiByZWNlaXZlIGRlc2NyaXB0b3IgdW5kZXJmbG93XG4iLAotCQkJCSBpZHgsIHVuaXQpOwotCQkJd2xjX2h3LT53bGMtPnB1Yi0+X2NudC0+cnh1ZmxvW2lkeF0rKzsKKwkJCXdpcGh5X2Vycih3aXBoeSwgIndsJWQ6IGZpZm8gJWQ6IHJlY2VpdmUgZGVzY3JpcHRvciAiCisJCQkJICAidW5kZXJmbG93XG4iLCBpZHgsIHVuaXQpOwogCQl9CiAKIAkJaWYgKGludHN0YXR1cyAmIElfWFUpIHsKLQkJCVdMX0VSUk9SKCJ3bCVkOiBmaWZvICVkOiB0cmFuc21pdCBmaWZvIHVuZGVyZmxvd1xuIiwKLQkJCQkgaWR4LCB1bml0KTsKLQkJCXdsY19ody0+d2xjLT5wdWItPl9jbnQtPnR4dWZsbysrOworCQkJd2lwaHlfZXJyKHdpcGh5LCAid2wlZDogZmlmbyAlZDogdHJhbnNtaXQgZmlmbyAiCisJCQkJICAidW5kZXJmbG93XG4iLCBpZHgsIHVuaXQpOwogCQkJZmF0YWwgPSB0cnVlOwogCQl9CiAKQEAgLTI3NjUsNyArMjY3MSw2IEBACiB2b2lkIHdsY19pbnRyc29uKHN0cnVjdCB3bGNfaW5mbyAqd2xjKQogewogCXN0cnVjdCB3bGNfaHdfaW5mbyAqd2xjX2h3ID0gd2xjLT5odzsKLQlBU1NFUlQod2xjLT5kZWZtYWNpbnRtYXNrKTsKIAl3bGMtPm1hY2ludG1hc2sgPSB3bGMtPmRlZm1hY2ludG1hc2s7CiAJV19SRUcoJndsY19ody0+cmVncy0+bWFjaW50bWFzaywgd2xjLT5tYWNpbnRtYXNrKTsKIH0KQEAgLTI4NTksNyArMjc2NCw3IEBACiBpbnQgd2xjX2JtYWNfeG10Zmlmb19zel9nZXQoc3RydWN0IHdsY19od19pbmZvICp3bGNfaHcsIHVpbnQgZmlmbywgdWludCAqYmxvY2tzKQogewogCWlmIChmaWZvID49IE5GSUZPKQotCQlyZXR1cm4gQkNNRV9SQU5HRTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAkqYmxvY2tzID0gd2xjX2h3LT54bXRmaWZvX3N6W2ZpZm9dOwogCkBAIC0yOTYyLDcgKzI4NjcsOCBAQAogCS8qIG1hY2ludHN0YXR1cyBpbmNsdWRlcyBhIERNQSBpbnRlcnJ1cHQgc3VtbWFyeSBiaXQgKi8KIAltYWNpbnRzdGF0dXMgPSBSX1JFRygmcmVncy0+bWFjaW50c3RhdHVzKTsKIAotCVdMX1RSQUNFKCJ3bCVkOiBtYWNpbnRzdGF0dXM6IDB4JXhcbiIsIHdsY19ody0+dW5pdCwgbWFjaW50c3RhdHVzKTsKKwlCQ01NU0cod2xjLT53aXBoeSwgIndsJWQ6IG1hY2ludHN0YXR1czogMHgleFxuIiwgd2xjX2h3LT51bml0LAorCQkgbWFjaW50c3RhdHVzKTsKIAogCS8qIGRldGVjdCBjYXJkYnVzIHJlbW92ZWQsIGluIHBvd2VyIGRvd24oc3VzcGVuZCkgYW5kIGluIHJlc2V0ICovCiAJaWYgKERFVklDRVJFTU9WRUQod2xjKSkKQEAgLTMwMTMsOCArMjkxOSw2IEBACiB7CiAJdTMyIG1hY2ludHN0YXR1czsKIAotCUFTU0VSVCh3bGMtPm1hY2ludHN0YXR1cyAhPSAwKTsKLQogCS8qIHJlYWQgYW5kIGNsZWFyIG1hY2ludHN0YXR1cyBhbmQgaW50c3RhdHVzIHJlZ2lzdGVycyAqLwogCW1hY2ludHN0YXR1cyA9IHdsY19pbnRzdGF0dXMod2xjLCBmYWxzZSk7CiAKQEAgLTMwMzQsNyArMjkzOCw3IEBACiAgKiAqd2FudGRwYyB3aWxsIGJlIHNldCB0byB0cnVlIGlmIGZ1cnRoZXIgd2xjX2RwYygpIHByb2Nlc3NpbmcgaXMgcmVxdWlyZWQsCiAgKiBmYWxzZSBvdGhlcndpc2UuCiAgKi8KLWJvb2wgQkNNRkFTVFBBVEggd2xjX2lzcihzdHJ1Y3Qgd2xjX2luZm8gKndsYywgYm9vbCAqd2FudGRwYykKK2Jvb2wgd2xjX2lzcihzdHJ1Y3Qgd2xjX2luZm8gKndsYywgYm9vbCAqd2FudGRwYykKIHsKIAlzdHJ1Y3Qgd2xjX2h3X2luZm8gKndsY19odyA9IHdsYy0+aHc7CiAJdTMyIG1hY2ludHN0YXR1czsKQEAgLTMwNDgsNyArMjk1Miw4IEBACiAJbWFjaW50c3RhdHVzID0gd2xjX2ludHN0YXR1cyh3bGMsIHRydWUpOwogCiAJaWYgKG1hY2ludHN0YXR1cyA9PSAweGZmZmZmZmZmKQotCQlXTF9FUlJPUigiREVWSUNFUkVNT1ZFRCBkZXRlY3RlZCBpbiB0aGUgSVNSIGNvZGUgcGF0aFxuIik7CisJCXdpcGh5X2Vycih3bGMtPndpcGh5LCAiREVWSUNFUkVNT1ZFRCBkZXRlY3RlZCBpbiB0aGUgSVNSIGNvZGUiCisJCQkgICIgcGF0aFxuIik7CiAKIAkvKiBpdCBpcyBub3QgZm9yIHVzICovCiAJaWYgKG1hY2ludHN0YXR1cyA9PSAwKQpAQCAtMzA1NywxNCArMjk2MiwxMyBAQAogCSp3YW50ZHBjID0gdHJ1ZTsKIAogCS8qIHNhdmUgaW50ZXJydXB0IHN0YXR1cyBiaXRzICovCi0JQVNTRVJUKHdsYy0+bWFjaW50c3RhdHVzID09IDApOwogCXdsYy0+bWFjaW50c3RhdHVzID0gbWFjaW50c3RhdHVzOwogCiAJcmV0dXJuIHRydWU7CiAKIH0KIAotc3RhdGljIGJvb2wgQkNNRkFTVFBBVEgKK3N0YXRpYyBib29sCiB3bGNfYm1hY19kb3R4c3RhdHVzKHN0cnVjdCB3bGNfaHdfaW5mbyAqd2xjX2h3LCB0eF9zdGF0dXNfdCAqdHhzLCB1MzIgczIpCiB7CiAJLyogZGlzY2FyZCBpbnRlcm1lZGlhdGUgaW5kaWNhdGlvbnMgZm9yIHVjb2RlIHdpdGggb25lIGxlZ2l0aW1hdGUgY2FzZToKQEAgLTMwODMsNyArMjk4Nyw3IEBACiAvKiBwcm9jZXNzIHR4IGNvbXBsZXRpb24gZXZlbnRzIGluIEJNQUMKICAqIFJldHVybiB0cnVlIGlmIG1vcmUgdHggc3RhdHVzIG5lZWQgdG8gYmUgcHJvY2Vzc2VkLiBmYWxzZSBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBib29sIEJDTUZBU1RQQVRICitzdGF0aWMgYm9vbAogd2xjX2JtYWNfdHhzdGF0dXMoc3RydWN0IHdsY19od19pbmZvICp3bGNfaHcsIGJvb2wgYm91bmQsIGJvb2wgKmZhdGFsKQogewogCWJvb2wgbW9yZXBlbmRpbmcgPSBmYWxzZTsKQEAgLTMwOTgsNyArMzAwMiw3IEBACiAJICovCiAJdWludCBtYXhfdHhfbnVtID0gYm91bmQgPyB3bGMtPnB1Yi0+dHVuYWJsZXMtPnR4c2JuZCA6IC0xOwogCi0JV0xfVFJBQ0UoIndsJWQ6IHdsY19ibWFjX3R4c3RhdHVzXG4iLCB3bGNfaHctPnVuaXQpOworCUJDTU1TRyh3bGMtPndpcGh5LCAid2wlZFxuIiwgd2xjX2h3LT51bml0KTsKIAogCXR4cyA9ICZ0eHN0YXR1czsKIAlyZWdzID0gd2xjX2h3LT5yZWdzOwpAQCAtMzEwNiw5ICszMDEwLDggQEAKIAkgICAgICAgJiYgKHMxID0gUl9SRUcoJnJlZ3MtPmZybXR4c3RhdHVzKSkgJiBUWFNfVikgewogCiAJCWlmIChzMSA9PSAweGZmZmZmZmZmKSB7Ci0JCQlXTF9FUlJPUigid2wlZDogJXM6IGRlYWQgY2hpcFxuIiwKKwkJCXdpcGh5X2Vycih3bGMtPndpcGh5LCAid2wlZDogJXM6IGRlYWQgY2hpcFxuIiwKIAkJCQl3bGNfaHctPnVuaXQsIF9fZnVuY19fKTsKLQkJCUFTU0VSVChzMSAhPSAweGZmZmZmZmZmKTsKIAkJCXJldHVybiBtb3JlcGVuZGluZzsKIAkJfQogCkBAIC0zMTMzLDggKzMwMzYsOCBAQAogCWlmIChuID49IG1heF90eF9udW0pCiAJCW1vcmVwZW5kaW5nID0gdHJ1ZTsKIAotCWlmICghcGt0cV9lbXB0eSgmd2xjLT5hY3RpdmVfcXVldWUtPnEpKQotCQl3bGNfc2VuZF9xKHdsYywgd2xjLT5hY3RpdmVfcXVldWUpOworCWlmICghcGt0cV9lbXB0eSgmd2xjLT5wa3RfcXVldWUtPnEpKQorCQl3bGNfc2VuZF9xKHdsYyk7CiAKIAlyZXR1cm4gbW9yZXBlbmRpbmc7CiB9CkBAIC0zMTQ0LDkgKzMwNDcsMTAgQEAKIAlzdHJ1Y3Qgd2xjX2h3X2luZm8gKndsY19odyA9IHdsYy0+aHc7CiAJZDExcmVnc190ICpyZWdzID0gd2xjX2h3LT5yZWdzOwogCXUzMiBtYywgbWk7CisJc3RydWN0IHdpcGh5ICp3aXBoeSA9IHdsYy0+d2lwaHk7CiAKLQlXTF9UUkFDRSgid2wlZDogd2xjX3N1c3BlbmRfbWFjX2FuZF93YWl0OiBiYW5kdW5pdCAlZFxuIiwKLQkJIHdsY19ody0+dW5pdCwgd2xjX2h3LT5iYW5kLT5iYW5kdW5pdCk7CisJQkNNTVNHKHdsYy0+d2lwaHksICJ3bCVkOiBiYW5kdW5pdCAlZFxuIiwgd2xjX2h3LT51bml0LAorCQl3bGNfaHctPmJhbmQtPmJhbmR1bml0KTsKIAogCS8qCiAJICogVHJhY2sgb3ZlcmxhcHBpbmcgc3VzcGVuZCByZXF1ZXN0cwpAQCAtMzE2MSwyMSArMzA2NSwyMyBAQAogCW1jID0gUl9SRUcoJnJlZ3MtPm1hY2NvbnRyb2wpOwogCiAJaWYgKG1jID09IDB4ZmZmZmZmZmYpIHsKLQkJV0xfRVJST1IoIndsJWQ6ICVzOiBkZWFkIGNoaXBcbiIsIHdsY19ody0+dW5pdCwgX19mdW5jX18pOworCQl3aXBoeV9lcnIod2lwaHksICJ3bCVkOiAlczogZGVhZCBjaGlwXG4iLCB3bGNfaHctPnVuaXQsCisJCQkgIF9fZnVuY19fKTsKIAkJd2xfZG93bih3bGMtPndsKTsKIAkJcmV0dXJuOwogCX0KLQlBU1NFUlQoIShtYyAmIE1DVExfUFNNX0pNUF8wKSk7Ci0JQVNTRVJUKG1jICYgTUNUTF9QU01fUlVOKTsKLQlBU1NFUlQobWMgJiBNQ1RMX0VOX01BQyk7CisJV0FSTl9PTihtYyAmIE1DVExfUFNNX0pNUF8wKTsKKwlXQVJOX09OKCEobWMgJiBNQ1RMX1BTTV9SVU4pKTsKKwlXQVJOX09OKCEobWMgJiBNQ1RMX0VOX01BQykpOwogCiAJbWkgPSBSX1JFRygmcmVncy0+bWFjaW50c3RhdHVzKTsKIAlpZiAobWkgPT0gMHhmZmZmZmZmZikgewotCQlXTF9FUlJPUigid2wlZDogJXM6IGRlYWQgY2hpcFxuIiwgd2xjX2h3LT51bml0LCBfX2Z1bmNfXyk7CisJCXdpcGh5X2Vycih3aXBoeSwgIndsJWQ6ICVzOiBkZWFkIGNoaXBcbiIsIHdsY19ody0+dW5pdCwKKwkJCSAgX19mdW5jX18pOwogCQl3bF9kb3duKHdsYy0+d2wpOwogCQlyZXR1cm47CiAJfQotCUFTU0VSVCghKG1pICYgTUlfTUFDU1NQTkREKSk7CisJV0FSTl9PTihtaSAmIE1JX01BQ1NTUE5ERCk7CiAKIAl3bGNfYm1hY19tY3RybCh3bGNfaHcsIE1DVExfRU5fTUFDLCAwKTsKIApAQCAtMzE4MywyNCArMzA4OSwyNiBAQAogCQkgV0xDX01BWF9NQUNfU1VTUEVORCk7CiAKIAlpZiAoIShSX1JFRygmcmVncy0+bWFjaW50c3RhdHVzKSAmIE1JX01BQ1NTUE5ERCkpIHsKLQkJV0xfRVJST1IoIndsJWQ6IHdsY19zdXNwZW5kX21hY19hbmRfd2FpdDogd2FpdGVkICVkIHVTIGFuZCBNSV9NQUNTU1BOREQgaXMgc3RpbGwgbm90IG9uLlxuIiwKLQkJCSB3bGNfaHctPnVuaXQsIFdMQ19NQVhfTUFDX1NVU1BFTkQpOwotCQlXTF9FUlJPUigid2wlZDogcHNtZGVidWcgMHglMDh4LCBwaHlkZWJ1ZyAweCUwOHgsIHBzbV9icmMgMHglMDR4XG4iLAotCQkJIHdsY19ody0+dW5pdCwKLQkJCSBSX1JFRygmcmVncy0+cHNtZGVidWcpLAotCQkJIFJfUkVHKCZyZWdzLT5waHlkZWJ1ZyksCi0JCQkgUl9SRUcoJnJlZ3MtPnBzbV9icmMpKTsKKwkJd2lwaHlfZXJyKHdpcGh5LCAid2wlZDogd2xjX3N1c3BlbmRfbWFjX2FuZF93YWl0OiB3YWl0ZWQgJWQgdVMiCisJCQkgICIgYW5kIE1JX01BQ1NTUE5ERCBpcyBzdGlsbCBub3Qgb24uXG4iLAorCQkJICB3bGNfaHctPnVuaXQsIFdMQ19NQVhfTUFDX1NVU1BFTkQpOworCQl3aXBoeV9lcnIod2lwaHksICJ3bCVkOiBwc21kZWJ1ZyAweCUwOHgsIHBoeWRlYnVnIDB4JTA4eCwgIgorCQkJICAicHNtX2JyYyAweCUwNHhcbiIsIHdsY19ody0+dW5pdCwKKwkJCSAgUl9SRUcoJnJlZ3MtPnBzbWRlYnVnKSwKKwkJCSAgUl9SRUcoJnJlZ3MtPnBoeWRlYnVnKSwKKwkJCSAgUl9SRUcoJnJlZ3MtPnBzbV9icmMpKTsKIAl9CiAKIAltYyA9IFJfUkVHKCZyZWdzLT5tYWNjb250cm9sKTsKIAlpZiAobWMgPT0gMHhmZmZmZmZmZikgewotCQlXTF9FUlJPUigid2wlZDogJXM6IGRlYWQgY2hpcFxuIiwgd2xjX2h3LT51bml0LCBfX2Z1bmNfXyk7CisJCXdpcGh5X2Vycih3aXBoeSwgIndsJWQ6ICVzOiBkZWFkIGNoaXBcbiIsIHdsY19ody0+dW5pdCwKKwkJCSAgX19mdW5jX18pOwogCQl3bF9kb3duKHdsYy0+d2wpOwogCQlyZXR1cm47CiAJfQotCUFTU0VSVCghKG1jICYgTUNUTF9QU01fSk1QXzApKTsKLQlBU1NFUlQobWMgJiBNQ1RMX1BTTV9SVU4pOwotCUFTU0VSVCghKG1jICYgTUNUTF9FTl9NQUMpKTsKKwlXQVJOX09OKG1jICYgTUNUTF9QU01fSk1QXzApOworCVdBUk5fT04oIShtYyAmIE1DVExfUFNNX1JVTikpOworCVdBUk5fT04obWMgJiBNQ1RMX0VOX01BQyk7CiB9CiAKIHZvaWQgd2xjX2VuYWJsZV9tYWMoc3RydWN0IHdsY19pbmZvICp3bGMpCkBAIC0zMjA5LDMyICszMTE3LDMxIEBACiAJZDExcmVnc190ICpyZWdzID0gd2xjX2h3LT5yZWdzOwogCXUzMiBtYywgbWk7CiAKLQlXTF9UUkFDRSgid2wlZDogd2xjX2VuYWJsZV9tYWM6IGJhbmR1bml0ICVkXG4iLAotCQkgd2xjX2h3LT51bml0LCB3bGMtPmJhbmQtPmJhbmR1bml0KTsKKwlCQ01NU0cod2xjLT53aXBoeSwgIndsJWQ6IGJhbmR1bml0ICVkXG4iLCB3bGNfaHctPnVuaXQsCisJCXdsYy0+YmFuZC0+YmFuZHVuaXQpOwogCiAJLyoKIAkgKiBUcmFjayBvdmVybGFwcGluZyBzdXNwZW5kIHJlcXVlc3RzCiAJICovCi0JQVNTRVJUKHdsY19ody0+bWFjX3N1c3BlbmRfZGVwdGggPiAwKTsKIAl3bGNfaHctPm1hY19zdXNwZW5kX2RlcHRoLS07CiAJaWYgKHdsY19ody0+bWFjX3N1c3BlbmRfZGVwdGggPiAwKQogCQlyZXR1cm47CiAKIAltYyA9IFJfUkVHKCZyZWdzLT5tYWNjb250cm9sKTsKLQlBU1NFUlQoIShtYyAmIE1DVExfUFNNX0pNUF8wKSk7Ci0JQVNTRVJUKCEobWMgJiBNQ1RMX0VOX01BQykpOwotCUFTU0VSVChtYyAmIE1DVExfUFNNX1JVTik7CisJV0FSTl9PTihtYyAmIE1DVExfUFNNX0pNUF8wKTsKKwlXQVJOX09OKG1jICYgTUNUTF9FTl9NQUMpOworCVdBUk5fT04oIShtYyAmIE1DVExfUFNNX1JVTikpOwogCiAJd2xjX2JtYWNfbWN0cmwod2xjX2h3LCBNQ1RMX0VOX01BQywgTUNUTF9FTl9NQUMpOwogCVdfUkVHKCZyZWdzLT5tYWNpbnRzdGF0dXMsIE1JX01BQ1NTUE5ERCk7CiAKIAltYyA9IFJfUkVHKCZyZWdzLT5tYWNjb250cm9sKTsKLQlBU1NFUlQoIShtYyAmIE1DVExfUFNNX0pNUF8wKSk7Ci0JQVNTRVJUKG1jICYgTUNUTF9FTl9NQUMpOwotCUFTU0VSVChtYyAmIE1DVExfUFNNX1JVTik7CisJV0FSTl9PTihtYyAmIE1DVExfUFNNX0pNUF8wKTsKKwlXQVJOX09OKCEobWMgJiBNQ1RMX0VOX01BQykpOworCVdBUk5fT04oIShtYyAmIE1DVExfUFNNX1JVTikpOwogCiAJbWkgPSBSX1JFRygmcmVncy0+bWFjaW50c3RhdHVzKTsKLQlBU1NFUlQoIShtaSAmIE1JX01BQ1NTUE5ERCkpOworCVdBUk5fT04obWkgJiBNSV9NQUNTU1BOREQpOwogCiAJd2xjX3Vjb2RlX3dha2Vfb3ZlcnJpZGVfY2xlYXIod2xjX2h3LCBXTENfV0FLRV9PVkVSUklERV9NQUNTVVNQRU5EKTsKIH0KQEAgLTMzMTQsNyArMzIyMSw3IEBACiAJCXdsY191cGRfb2ZkbV9wY3RsMV90YWJsZSh3bGNfaHcpOwogfQogCi12b2lkIEJDTUZBU1RQQVRICit2b2lkCiB3bGNfYm1hY19yZWFkX3RzZihzdHJ1Y3Qgd2xjX2h3X2luZm8gKndsY19odywgdTMyICp0c2ZfbF9wdHIsCiAJCSAgdTMyICp0c2ZfaF9wdHIpCiB7CkBAIC0zMzMxLDggKzMyMzgsOSBAQAogewogCWQxMXJlZ3NfdCAqcmVnczsKIAl1MzIgdywgdmFsOworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSB3bGNfaHctPndsYy0+d2lwaHk7CiAKLQlXTF9UUkFDRSgid2wlZDogdmFsaWRhdGVfY2hpcF9hY2Nlc3NcbiIsIHdsY19ody0+dW5pdCk7CisJQkNNTVNHKHdpcGh5LCAid2wlZFxuIiwgd2xjX2h3LT51bml0KTsKIAogCXJlZ3MgPSB3bGNfaHctPnJlZ3M7CiAKQEAgLTMzNTEsOCArMzI1OSw4IEBACiAJKHZvaWQpUl9SRUcoJnJlZ3MtPm9iamFkZHIpOwogCXZhbCA9IFJfUkVHKCZyZWdzLT5vYmpkYXRhKTsKIAlpZiAodmFsICE9ICh1MzIpIDB4YWE1NTU1YWEpIHsKLQkJV0xfRVJST1IoIndsJWQ6IHZhbGlkYXRlX2NoaXBfYWNjZXNzOiBTSE0gPSAweCV4LCBleHBlY3RlZCAweGFhNTU1NWFhXG4iLAotCQkJIHdsY19ody0+dW5pdCwgdmFsKTsKKwkJd2lwaHlfZXJyKHdpcGh5LCAid2wlZDogdmFsaWRhdGVfY2hpcF9hY2Nlc3M6IFNITSA9IDB4JXgsICIKKwkJCSAgImV4cGVjdGVkIDB4YWE1NTU1YWFcbiIsIHdsY19ody0+dW5pdCwgdmFsKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIApAQCAtMzM2NCw4ICszMjcyLDggQEAKIAkodm9pZClSX1JFRygmcmVncy0+b2JqYWRkcik7CiAJdmFsID0gUl9SRUcoJnJlZ3MtPm9iamRhdGEpOwogCWlmICh2YWwgIT0gKHUzMikgMHg1NWFhYWE1NSkgewotCQlXTF9FUlJPUigid2wlZDogdmFsaWRhdGVfY2hpcF9hY2Nlc3M6IFNITSA9IDB4JXgsIGV4cGVjdGVkIDB4NTVhYWFhNTVcbiIsCi0JCQkgd2xjX2h3LT51bml0LCB2YWwpOworCQl3aXBoeV9lcnIod2lwaHksICJ3bCVkOiB2YWxpZGF0ZV9jaGlwX2FjY2VzczogU0hNID0gMHgleCwgIgorCQkJICAiZXhwZWN0ZWQgMHg1NWFhYWE1NVxuIiwgd2xjX2h3LT51bml0LCB2YWwpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCkBAIC0zMzc5LDEwICszMjg3LDEwIEBACiAJdyA9IFJfUkVHKCZyZWdzLT5tYWNjb250cm9sKTsKIAlpZiAoKHcgIT0gKE1DVExfSUhSX0VOIHwgTUNUTF9XQUtFKSkgJiYKIAkgICAgKHcgIT0gKE1DVExfSUhSX0VOIHwgTUNUTF9HTU9ERSB8IE1DVExfV0FLRSkpKSB7Ci0JCVdMX0VSUk9SKCJ3bCVkOiB2YWxpZGF0ZV9jaGlwX2FjY2VzczogbWFjY29udHJvbCA9IDB4JXgsIGV4cGVjdGVkIDB4JXggb3IgMHgleFxuIiwKLQkJCSB3bGNfaHctPnVuaXQsIHcsCi0JCQkgKE1DVExfSUhSX0VOIHwgTUNUTF9XQUtFKSwKLQkJCSAoTUNUTF9JSFJfRU4gfCBNQ1RMX0dNT0RFIHwgTUNUTF9XQUtFKSk7CisJCXdpcGh5X2Vycih3aXBoeSwgIndsJWQ6IHZhbGlkYXRlX2NoaXBfYWNjZXNzOiBtYWNjb250cm9sID0gIgorCQkJICAiMHgleCwgZXhwZWN0ZWQgMHgleCBvciAweCV4XG4iLCB3bGNfaHctPnVuaXQsIHcsCisJCQkgIChNQ1RMX0lIUl9FTiB8IE1DVExfV0FLRSksCisJCQkgIChNQ1RMX0lIUl9FTiB8IE1DVExfR01PREUgfCBNQ1RMX1dBS0UpKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIApAQCAtMzM5Niw3ICszMzA0LDcgQEAKIAlkMTFyZWdzX3QgKnJlZ3M7CiAJdTMyIHRtcDsKIAotCVdMX1RSQUNFKCJ3bCVkOiB3bGNfYm1hY19jb3JlX3BoeXBsbF9jdGxcbiIsIHdsY19ody0+dW5pdCk7CisJQkNNTVNHKHdsY19ody0+d2xjLT53aXBoeSwgIndsJWRcbiIsIHdsY19ody0+dW5pdCk7CiAKIAl0bXAgPSAwOwogCXJlZ3MgPSB3bGNfaHctPnJlZ3M7CkBAIC0zNDEzLDkgKzMzMjEsOCBAQAogCQkJdG1wID0gUl9SRUcoJnJlZ3MtPmNsa19jdGxfc3QpOwogCQkJaWYgKCh0bXAgJiAoQ0NTX0VSU1JDX0FWQUlMX0hUKSkgIT0KIAkJCSAgICAoQ0NTX0VSU1JDX0FWQUlMX0hUKSkgewotCQkJCVdMX0VSUk9SKCIlczogdHVybiBvbiBQSFkgUExMIGZhaWxlZFxuIiwKLQkJCQkJIF9fZnVuY19fKTsKLQkJCQlBU1NFUlQoMCk7CisJCQkJd2lwaHlfZXJyKHdsY19ody0+d2xjLT53aXBoeSwgIiVzOiB0dXJuIG9uIFBIWSIKKwkJCQkJICAiIFBMTCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCU9SX1JFRygmcmVncy0+Y2xrX2N0bF9zdCwKQEAgLTM0MzEsOSArMzMzOCw4IEBACiAJCQkgICAgIChDQ1NfRVJTUkNfQVZBSUxfRDExUExMIHwgQ0NTX0VSU1JDX0FWQUlMX1BIWVBMTCkpCiAJCQkgICAgIT0KIAkJCSAgICAoQ0NTX0VSU1JDX0FWQUlMX0QxMVBMTCB8IENDU19FUlNSQ19BVkFJTF9QSFlQTEwpKSB7Ci0JCQkJV0xfRVJST1IoIiVzOiB0dXJuIG9uIFBIWSBQTEwgZmFpbGVkXG4iLAotCQkJCQkgX19mdW5jX18pOwotCQkJCUFTU0VSVCgwKTsKKwkJCQl3aXBoeV9lcnIod2xjX2h3LT53bGMtPndpcGh5LCAiJXM6IHR1cm4gb24gIgorCQkJCQkgICJQSFkgUExMIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQkJfQogCQl9CiAJfSBlbHNlIHsKQEAgLTM0NDksOSArMzM1NSw3IEBACiB7CiAJYm9vbCBkZXZfZ29uZTsKIAotCVdMX1RSQUNFKCJ3bCVkOiAlc1xuIiwgd2xjX2h3LT51bml0LCBfX2Z1bmNfXyk7Ci0KLQlBU1NFUlQoIXdsY19ody0+dXApOworCUJDTU1TRyh3bGNfaHctPndsYy0+d2lwaHksICJ3bCVkXG4iLCB3bGNfaHctPnVuaXQpOwogCiAJZGV2X2dvbmUgPSBERVZJQ0VSRU1PVkVEKHdsY19ody0+d2xjKTsKIApAQCAtMzQ3NywyNCArMzM4MSwyNCBAQAogCiAJLyogcmVtb3ZlIGdwaW8gY29udHJvbHMgKi8KIAlpZiAod2xjX2h3LT51Y29kZV9kYmdzZWwpCi0JCXNpX2dwaW9jb250cm9sKHdsY19ody0+c2loLCB+MCwgMCwgR1BJT19EUlZfUFJJT1JJVFkpOworCQlhaV9ncGlvY29udHJvbCh3bGNfaHctPnNpaCwgfjAsIDAsIEdQSU9fRFJWX1BSSU9SSVRZKTsKIAogCXdsY19ody0+Y2xrID0gZmFsc2U7Ci0Jc2lfY29yZV9kaXNhYmxlKHdsY19ody0+c2loLCAwKTsKKwlhaV9jb3JlX2Rpc2FibGUod2xjX2h3LT5zaWgsIDApOwogCXdsY19waHlfaHdfY2xrX3N0YXRlX3VwZCh3bGNfaHctPmJhbmQtPnBpLCBmYWxzZSk7CiB9CiAKIC8qIHBvd2VyIGJvdGggdGhlIHBsbCBhbmQgZXh0ZXJuYWwgb3NjaWxsYXRvciBvbi9vZmYgKi8KIHN0YXRpYyB2b2lkIHdsY19ibWFjX3h0YWwoc3RydWN0IHdsY19od19pbmZvICp3bGNfaHcsIGJvb2wgd2FudCkKIHsKLQlXTF9UUkFDRSgid2wlZDogd2xjX2JtYWNfeHRhbDogd2FudCAlZFxuIiwgd2xjX2h3LT51bml0LCB3YW50KTsKKwlCQ01NU0cod2xjX2h3LT53bGMtPndpcGh5LCAid2wlZDogd2FudCAlZFxuIiwgd2xjX2h3LT51bml0LCB3YW50KTsKIAogCS8qIGRvbnQgcG93ZXIgZG93biBpZiBwbGxkb3duIGlzIGZhbHNlIG9yIHdlIG11c3QgcG9sbCBodyByYWRpbyBkaXNhYmxlICovCiAJaWYgKCF3YW50ICYmIHdsY19ody0+cGxscmVxKQogCQlyZXR1cm47CiAKIAlpZiAod2xjX2h3LT5zaWgpCi0JCXNpX2Nsa2N0bF94dGFsKHdsY19ody0+c2loLCBYVEFMIHwgUExMLCB3YW50KTsKKwkJYWlfY2xrY3RsX3h0YWwod2xjX2h3LT5zaWgsIFhUQUwgfCBQTEwsIHdhbnQpOwogCiAJd2xjX2h3LT5zYmNsayA9IHdhbnQ7CiAJaWYgKCF3bGNfaHctPnNiY2xrKSB7CkBAIC0zNTE2LDggKzM0MjAsNyBAQAogCQlpZiAod2xjX2h3LT5kaVtpXSkgewogCQkJZG1hX3R4cmVjbGFpbSh3bGNfaHctPmRpW2ldLCBITkRETUFfUkFOR0VfQUxMKTsKIAkJCVRYUEtUUEVORENMUih3bGMsIGkpOwotCQkJV0xfVFJBQ0UoIndsY19mbHVzaHF1ZXVlczogcGt0cGVuZCBmaWZvICVkIGNsZWFyZWRcbiIsCi0JCQkJIGkpOworCQkJQkNNTVNHKHdsYy0+d2lwaHksICJwa3RwZW5kIGZpZm8gJWQgY2xyZFxuIiwgaSk7CiAJCX0KIAogCS8qIGZyZWUgYW55IHBvc3RlZCByeCBwYWNrZXRzICovCkBAIC0zNTM0LDI2ICszNDM3LDYgQEAKIAl3bGNfYm1hY193cml0ZV9vYmptZW0od2xjX2h3LCBvZmZzZXQsIHYsIE9CSkFERFJfU0hNX1NFTCk7CiB9CiAKLS8qIFNldCBhIHJhbmdlIG9mIHNoYXJlZCBtZW1vcnkgdG8gYSB2YWx1ZS4KLSAqIFNITSAnb2Zmc2V0JyBuZWVkcyB0byBiZSBhbiBldmVuIGFkZHJlc3MgYW5kCi0gKiBCdWZmZXIgbGVuZ3RoICdsZW4nIG11c3QgYmUgYW4gZXZlbiBudW1iZXIgb2YgYnl0ZXMKLSAqLwotdm9pZCB3bGNfYm1hY19zZXRfc2htKHN0cnVjdCB3bGNfaHdfaW5mbyAqd2xjX2h3LCB1aW50IG9mZnNldCwgdTE2IHYsIGludCBsZW4pCi17Ci0JaW50IGk7Ci0KLQkvKiBvZmZzZXQgYW5kIGxlbiBuZWVkIHRvIGJlIGV2ZW4gKi8KLQlBU1NFUlQoKG9mZnNldCAmIDEpID09IDApOwotCUFTU0VSVCgobGVuICYgMSkgPT0gMCk7Ci0KLQlpZiAobGVuIDw9IDApCi0JCXJldHVybjsKLQotCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gMikgewotCQl3bGNfYm1hY193cml0ZV9vYmptZW0od2xjX2h3LCBvZmZzZXQgKyBpLCB2LCBPQkpBRERSX1NITV9TRUwpOwotCX0KLX0KLQogc3RhdGljIHUxNgogd2xjX2JtYWNfcmVhZF9vYmptZW0oc3RydWN0IHdsY19od19pbmZvICp3bGNfaHcsIHVpbnQgb2Zmc2V0LCB1MzIgc2VsKQogewpAQCAtMzU2Miw4ICszNDQ1LDYgQEAKIAl2b2xhdGlsZSB1MTYgKm9iamRhdGFfaGkgPSBvYmpkYXRhX2xvICsgMTsKIAl1MTYgdjsKIAotCUFTU0VSVCgob2Zmc2V0ICYgMSkgPT0gMCk7Ci0KIAlXX1JFRygmcmVncy0+b2JqYWRkciwgc2VsIHwgKG9mZnNldCA+PiAyKSk7CiAJKHZvaWQpUl9SRUcoJnJlZ3MtPm9iamFkZHIpOwogCWlmIChvZmZzZXQgJiAyKSB7CkBAIC0zNTgyLDggKzM0NjMsNiBAQAogCXZvbGF0aWxlIHUxNiAqb2JqZGF0YV9sbyA9ICh2b2xhdGlsZSB1MTYgKikmcmVncy0+b2JqZGF0YTsKIAl2b2xhdGlsZSB1MTYgKm9iamRhdGFfaGkgPSBvYmpkYXRhX2xvICsgMTsKIAotCUFTU0VSVCgob2Zmc2V0ICYgMSkgPT0gMCk7Ci0KIAlXX1JFRygmcmVncy0+b2JqYWRkciwgc2VsIHwgKG9mZnNldCA+PiAyKSk7CiAJKHZvaWQpUl9SRUcoJnJlZ3MtPm9iamFkZHIpOwogCWlmIChvZmZzZXQgJiAyKSB7CkBAIC0zNjA2LDExICszNDg1LDcgQEAKIAljb25zdCB1OCAqcCA9IChjb25zdCB1OCAqKWJ1ZjsKIAlpbnQgaTsKIAotCS8qIG9mZnNldCBhbmQgbGVuIG5lZWQgdG8gYmUgZXZlbiAqLwotCUFTU0VSVCgob2Zmc2V0ICYgMSkgPT0gMCk7Ci0JQVNTRVJUKChsZW4gJiAxKSA9PSAwKTsKLQotCWlmIChsZW4gPD0gMCkKKwlpZiAobGVuIDw9IDAgfHwgKG9mZnNldCAmIDEpIHx8IChsZW4gJiAxKSkKIAkJcmV0dXJuOwogCiAJZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7CkBAIC0zNjMyLDExICszNTA3LDcgQEAKIAl1OCAqcCA9ICh1OCAqKSBidWY7CiAJaW50IGk7CiAKLQkvKiBvZmZzZXQgYW5kIGxlbiBuZWVkIHRvIGJlIGV2ZW4gKi8KLQlBU1NFUlQoKG9mZnNldCAmIDEpID09IDApOwotCUFTU0VSVCgobGVuICYgMSkgPT0gMCk7Ci0KLQlpZiAobGVuIDw9IDApCisJaWYgKGxlbiA8PSAwIHx8IChvZmZzZXQgJiAxKSB8fCAobGVuICYgMSkpCiAJCXJldHVybjsKIAogCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gMikgewpAQCAtMzY0OCw4ICszNTE5LDggQEAKIAogdm9pZCB3bGNfYm1hY19jb3B5ZnJvbV92YXJzKHN0cnVjdCB3bGNfaHdfaW5mbyAqd2xjX2h3LCBjaGFyICoqYnVmLCB1aW50ICpsZW4pCiB7Ci0JV0xfVFJBQ0UoIndsY19ibWFjX2NvcHlmcm9tX3ZhcnMsIG52cmFtIHZhcnMgdG90bGVuPSVkXG4iLAotCQkgd2xjX2h3LT52YXJzX3NpemUpOworCUJDTU1TRyh3bGNfaHctPndsYy0+d2lwaHksICJudnJhbSB2YXJzIHRvdGxlbj0lZFxuIiwKKwkJd2xjX2h3LT52YXJzX3NpemUpOwogCiAJKmJ1ZiA9IHdsY19ody0+dmFyczsKIAkqbGVuID0gd2xjX2h3LT52YXJzX3NpemU7CkBAIC0zNjczLDE1ICszNTQ0LDggQEAKIAl9CiB9CiAKLXZvaWQgd2xjX2JtYWNfc2V0X25vcmVzZXQoc3RydWN0IHdsY19od19pbmZvICp3bGNfaHcsIGJvb2wgbm9yZXNldF9mbGFnKQotewotCXdsY19ody0+bm9yZXNldCA9IG5vcmVzZXRfZmxhZzsKLX0KLQogdm9pZCB3bGNfYm1hY19wbGxyZXEoc3RydWN0IHdsY19od19pbmZvICp3bGNfaHcsIGJvb2wgc2V0LCBtYm9vbCByZXFfYml0KQogewotCUFTU0VSVChyZXFfYml0KTsKLQogCWlmIChzZXQpIHsKIAkJaWYgKG1ib29saXNzZXQod2xjX2h3LT5wbGxyZXEsIHJlcV9iaXQpKQogCQkJcmV0dXJuOwpAQCAtMzcwOSwxMiArMzU3Myw2IEBACiAJcmV0dXJuOwogfQogCi0vKiB0aGlzIHdpbGwgYmUgdHJ1ZSBmb3IgYWxsIGFpIGNoaXBzICovCi1ib29sIHdsY19ibWFjX3RhY2xlYXIoc3RydWN0IHdsY19od19pbmZvICp3bGNfaHcsIGJvb2wgdGFfb2spCi17Ci0JcmV0dXJuIHRydWU7Ci19Ci0KIHUxNiB3bGNfYm1hY19yYXRlX3NobV9vZmZzZXQoc3RydWN0IHdsY19od19pbmZvICp3bGNfaHcsIHU4IHJhdGUpCiB7CiAJdTE2IHRhYmxlX3B0cjsKQEAgLTM3MzAsNyArMzU4OCw3IEBACiAJLyogZm9yIGEgZ2l2ZW4gcmF0ZSwgdGhlIExTLW5pYmJsZSBvZiB0aGUgUExDUCBTSUdOQUwgZmllbGQgaXMKIAkgKiB0aGUgaW5kZXggaW50byB0aGUgcmF0ZSB0YWJsZS4KIAkgKi8KLQlwaHlfcmF0ZSA9IHJhdGVfaW5mb1tyYXRlXSAmIFJBVEVfTUFTSzsKKwlwaHlfcmF0ZSA9IHJhdGVfaW5mb1tyYXRlXSAmIFdMQ19SQVRFX01BU0s7CiAJaW5kZXggPSBwaHlfcmF0ZSAmIDB4ZjsKIAogCS8qIEZpbmQgdGhlIFNITSBwb2ludGVyIHRvIHRoZSByYXRlIHRhYmxlIGVudHJ5IGJ5IGxvb2tpbmcgaW4gdGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19ibWFjLmggYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19ibWFjLmgKaW5kZXggOWMyYzY1OC4uYTVkY2NjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfYm1hYy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX2JtYWMuaApAQCAtMTMwLDggKzEzMCw2IEBACiAJCQkgICAgICB3bGNfYm1hY19zdGF0ZV90ICpzdGF0ZSk7CiBleHRlcm4gdm9pZCB3bGNfYm1hY193cml0ZV9zaG0oc3RydWN0IHdsY19od19pbmZvICp3bGNfaHcsIHVpbnQgb2Zmc2V0LCB1MTYgdik7CiBleHRlcm4gdTE2IHdsY19ibWFjX3JlYWRfc2htKHN0cnVjdCB3bGNfaHdfaW5mbyAqd2xjX2h3LCB1aW50IG9mZnNldCk7Ci1leHRlcm4gdm9pZCB3bGNfYm1hY19zZXRfc2htKHN0cnVjdCB3bGNfaHdfaW5mbyAqd2xjX2h3LCB1aW50IG9mZnNldCwgdTE2IHYsCi0JCQkgICAgIGludCBsZW4pOwogZXh0ZXJuIHZvaWQgd2xjX2JtYWNfd3JpdGVfdGVtcGxhdGVfcmFtKHN0cnVjdCB3bGNfaHdfaW5mbyAqd2xjX2h3LCBpbnQgb2Zmc2V0LAogCQkJCQlpbnQgbGVuLCB2b2lkICpidWYpOwogZXh0ZXJuIHZvaWQgd2xjX2JtYWNfY29weWZyb21fdmFycyhzdHJ1Y3Qgd2xjX2h3X2luZm8gKndsY19odywgY2hhciAqKmJ1ZiwKQEAgLTE1MSw4ICsxNDksNiBAQAogZXh0ZXJuIHZvaWQgd2xjX3Vjb2RlX3dha2Vfb3ZlcnJpZGVfY2xlYXIoc3RydWN0IHdsY19od19pbmZvICp3bGNfaHcsCiAJCQkJCSAgdTMyIG92ZXJyaWRlX2JpdCk7CiAKLWV4dGVybiB2b2lkIHdsY19ibWFjX3NldF9yY210YShzdHJ1Y3Qgd2xjX2h3X2luZm8gKndsY19odywgaW50IGlkeCwKLQkJCSAgICAgICBjb25zdCB1OCAqYWRkcik7CiBleHRlcm4gdm9pZCB3bGNfYm1hY19zZXRfYWRkcm1hdGNoKHN0cnVjdCB3bGNfaHdfaW5mbyAqd2xjX2h3LAogCQkJCSAgIGludCBtYXRjaF9yZWdfb2Zmc2V0LAogCQkJCSAgIGNvbnN0IHU4ICphZGRyKTsKQEAgLTE2Myw3ICsxNTksNiBAQAogCQkJICAgICAgdTMyICp0c2ZfaF9wdHIpOwogZXh0ZXJuIHZvaWQgd2xjX2JtYWNfc2V0X2N3bWluKHN0cnVjdCB3bGNfaHdfaW5mbyAqd2xjX2h3LCB1MTYgbmV3bWluKTsKIGV4dGVybiB2b2lkIHdsY19ibWFjX3NldF9jd21heChzdHJ1Y3Qgd2xjX2h3X2luZm8gKndsY19odywgdTE2IG5ld21heCk7Ci1leHRlcm4gdm9pZCB3bGNfYm1hY19zZXRfbm9yZXNldChzdHJ1Y3Qgd2xjX2h3X2luZm8gKndsYywgYm9vbCBub3Jlc2V0X2ZsYWcpOwogCiBleHRlcm4gdm9pZCB3bGNfYm1hY19yZXRyeWxpbWl0X3VwZChzdHJ1Y3Qgd2xjX2h3X2luZm8gKndsY19odywgdTE2IFNSTCwKIAkJCQkgICAgdTE2IExSTCk7CkBAIC0xNzYsNyArMTcxLDYgQEAKIGV4dGVybiB2b2lkIHdsY19ibWFjX2J3X3NldChzdHJ1Y3Qgd2xjX2h3X2luZm8gKndsY19odywgdTE2IGJ3KTsKIGV4dGVybiB2b2lkIHdsY19ibWFjX3BsbHJlcShzdHJ1Y3Qgd2xjX2h3X2luZm8gKndsY19odywgYm9vbCBzZXQsCiAJCQkgICAgbWJvb2wgcmVxX2JpdCk7Ci1leHRlcm4gYm9vbCB3bGNfYm1hY190YWNsZWFyKHN0cnVjdCB3bGNfaHdfaW5mbyAqd2xjX2h3LCBib29sIHRhX29rKTsKIGV4dGVybiB2b2lkIHdsY19ibWFjX2h3X3VwKHN0cnVjdCB3bGNfaHdfaW5mbyAqd2xjX2h3KTsKIGV4dGVybiB1MTYgd2xjX2JtYWNfcmF0ZV9zaG1fb2Zmc2V0KHN0cnVjdCB3bGNfaHdfaW5mbyAqd2xjX2h3LCB1OCByYXRlKTsKIGV4dGVybiB2b2lkIHdsY19ibWFjX2FudHNlbF9zZXQoc3RydWN0IHdsY19od19pbmZvICp3bGNfaHcsIHUzMiBhbnRzZWxfYXZhaWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfYnNzY2ZnLmggYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19ic3NjZmcuaAppbmRleCBiYmNmZjRmLi4yNTcyNTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19ic3NjZmcuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19ic3NjZmcuaApAQCAtMTIyLDkgKzEyMiw2IEBACiAjZGVmaW5lIEhXQkNOX0VOQUIoY2ZnKQkJKCgoY2ZnKS0+ZmxhZ3MgJiBXTENfQlNTQ0ZHX0hXX0JDTikgIT0gMCkKICNkZWZpbmUgSFdQUkJfRU5BQihjZmcpCQkoKChjZmcpLT5mbGFncyAmIFdMQ19CU1NDRkdfSFdfUFJCKSAhPSAwKQogCi1leHRlcm4gdm9pZCB3bGNfYnNzY2ZnX0lEX2Fzc2lnbihzdHJ1Y3Qgd2xjX2luZm8gKndsYywKLQkJCQkgc3RydWN0IHdsY19ic3NjZmcgKmJzc2NmZyk7Ci0KIC8qIEV4dGVuZCBOX0VOQUIgdG8gcGVyLUJTUyAqLwogI2RlZmluZSBCU1NfTl9FTkFCKHdsYywgY2ZnKSBcCiAJKE5fRU5BQigod2xjKS0+cHViKSAmJiAhKChjZmcpLT5mbGFncyAmIFdMQ19CU1NDRkdfMTFOX0RJU0FCTEUpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfY2hhbm5lbC5jIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfY2hhbm5lbC5jCmluZGV4IDk2MTYxYzAuLmEzYTJiZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX2NoYW5uZWwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19jaGFubmVsLmMKQEAgLTIxLDcgKzIxLDggQEAKIAogI2luY2x1ZGUgPGJjbWRlZnMuaD4KICNpbmNsdWRlIDxiY211dGlscy5oPgotI2luY2x1ZGUgPHNpdXRpbHMuaD4KKyNpbmNsdWRlIDxiY21udnJhbS5oPgorI2luY2x1ZGUgPGFpdXRpbHMuaD4KICNpbmNsdWRlIDxzYmhuZGRtYS5oPgogI2luY2x1ZGUgPHdsaW9jdGwuaD4KIApAQCAtMTA2LDcgKzEwNyw4IEBACiAJCQkJCQkJCSAqdHhwd3IsCiAJCQkJCQkJCSB1OAogCQkJCQkJCQkgbG9jYWxfY29uc3RyYWludF9xZGJtKTsKLXZvaWQgd2xjX2xvY2FsZV9hZGRfY2hhbm5lbHMoY2hhbnZlY190ICp0YXJnZXQsIGNvbnN0IGNoYW52ZWNfdCAqY2hhbm5lbHMpOworc3RhdGljIHZvaWQgd2xjX2xvY2FsZV9hZGRfY2hhbm5lbHMoY2hhbnZlY190ICp0YXJnZXQsCisJCQkJICAgIGNvbnN0IGNoYW52ZWNfdCAqY2hhbm5lbHMpOwogc3RhdGljIGNvbnN0IGxvY2FsZV9taW1vX2luZm9fdCAqd2xjX2dldF9taW1vXzJnKHU4IGxvY2FsZV9pZHgpOwogc3RhdGljIGNvbnN0IGxvY2FsZV9taW1vX2luZm9fdCAqd2xjX2dldF9taW1vXzVnKHU4IGxvY2FsZV9pZHgpOwogCkBAIC0zOTYsNyArMzk4LDggQEAKIAkmbG9jYWxlXzVnX0hJR0g0CiB9OwogCi12b2lkIHdsY19sb2NhbGVfYWRkX2NoYW5uZWxzKGNoYW52ZWNfdCAqdGFyZ2V0LCBjb25zdCBjaGFudmVjX3QgKmNoYW5uZWxzKQorc3RhdGljIHZvaWQgd2xjX2xvY2FsZV9hZGRfY2hhbm5lbHMoY2hhbnZlY190ICp0YXJnZXQsCisJCQkJICAgIGNvbnN0IGNoYW52ZWNfdCAqY2hhbm5lbHMpCiB7CiAJdTggaTsKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGNoYW52ZWNfdCk7IGkrKykgewpAQCAtNTk0LDEwICs1OTcsNyBAQAogc3RhdGljIGNvbnN0IGxvY2FsZV9pbmZvX3QgKndsY19nZXRfbG9jYWxlXzJnKHU4IGxvY2FsZV9pZHgpCiB7CiAJaWYgKGxvY2FsZV9pZHggPj0gQVJSQVlfU0laRShnX2xvY2FsZV8yZ190YWJsZSkpIHsKLQkJV0xfRVJST1IoIiVzOiBsb2NhbGUgMmcgaW5kZXggc2l6ZSBvdXQgb2YgcmFuZ2UgJWRcbiIsCi0JCQkgX19mdW5jX18sIGxvY2FsZV9pZHgpOwotCQlBU1NFUlQobG9jYWxlX2lkeCA8IEFSUkFZX1NJWkUoZ19sb2NhbGVfMmdfdGFibGUpKTsKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiBOVUxMOyAvKiBlcnJvciBjb25kaXRpb24gKi8KIAl9CiAJcmV0dXJuIGdfbG9jYWxlXzJnX3RhYmxlW2xvY2FsZV9pZHhdOwogfQpAQCAtNjA1LDI5ICs2MDUsMjIgQEAKIHN0YXRpYyBjb25zdCBsb2NhbGVfaW5mb190ICp3bGNfZ2V0X2xvY2FsZV81Zyh1OCBsb2NhbGVfaWR4KQogewogCWlmIChsb2NhbGVfaWR4ID49IEFSUkFZX1NJWkUoZ19sb2NhbGVfNWdfdGFibGUpKSB7Ci0JCVdMX0VSUk9SKCIlczogbG9jYWxlIDVnIGluZGV4IHNpemUgb3V0IG9mIHJhbmdlICVkXG4iLAotCQkJIF9fZnVuY19fLCBsb2NhbGVfaWR4KTsKLQkJQVNTRVJUKGxvY2FsZV9pZHggPCBBUlJBWV9TSVpFKGdfbG9jYWxlXzVnX3RhYmxlKSk7Ci0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gTlVMTDsgLyogZXJyb3IgY29uZGl0aW9uICovCiAJfQogCXJldHVybiBnX2xvY2FsZV81Z190YWJsZVtsb2NhbGVfaWR4XTsKIH0KIAotY29uc3QgbG9jYWxlX21pbW9faW5mb190ICp3bGNfZ2V0X21pbW9fMmcodTggbG9jYWxlX2lkeCkKK3N0YXRpYyBjb25zdCBsb2NhbGVfbWltb19pbmZvX3QgKndsY19nZXRfbWltb18yZyh1OCBsb2NhbGVfaWR4KQogewogCWlmIChsb2NhbGVfaWR4ID49IEFSUkFZX1NJWkUoZ19taW1vXzJnX3RhYmxlKSkgewotCQlXTF9FUlJPUigiJXM6IG1pbW8gMmcgaW5kZXggc2l6ZSBvdXQgb2YgcmFuZ2UgJWRcbiIsCi0JCQkgX19mdW5jX18sIGxvY2FsZV9pZHgpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJcmV0dXJuIGdfbWltb18yZ190YWJsZVtsb2NhbGVfaWR4XTsKIH0KIAotY29uc3QgbG9jYWxlX21pbW9faW5mb190ICp3bGNfZ2V0X21pbW9fNWcodTggbG9jYWxlX2lkeCkKK3N0YXRpYyBjb25zdCBsb2NhbGVfbWltb19pbmZvX3QgKndsY19nZXRfbWltb181Zyh1OCBsb2NhbGVfaWR4KQogewogCWlmIChsb2NhbGVfaWR4ID49IEFSUkFZX1NJWkUoZ19taW1vXzVnX3RhYmxlKSkgewotCQlXTF9FUlJPUigiJXM6IG1pbW8gNWcgaW5kZXggc2l6ZSBvdXQgb2YgcmFuZ2UgJWRcbiIsCi0JCQkgX19mdW5jX18sIGxvY2FsZV9pZHgpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJcmV0dXJuIGdfbWltb181Z190YWJsZVtsb2NhbGVfaWR4XTsKQEAgLTY0MSwxMSArNjM0LDEyIEBACiAJc3RydWN0IHdsY19wdWIgKnB1YiA9IHdsYy0+cHViOwogCWNoYXIgKmNjb2RlOwogCi0JV0xfVFJBQ0UoIndsJWQ6IHdsY19jaGFubmVsX21ncl9hdHRhY2hcbiIsIHdsYy0+cHViLT51bml0KTsKKwlCQ01NU0cod2xjLT53aXBoeSwgIndsJWRcbiIsIHdsYy0+cHViLT51bml0KTsKIAogCXdsY19jbSA9IGt6YWxsb2Moc2l6ZW9mKHdsY19jbV9pbmZvX3QpLCBHRlBfQVRPTUlDKTsKIAlpZiAod2xjX2NtID09IE5VTEwpIHsKLQkJV0xfRVJST1IoIndsJWQ6ICVzOiBvdXQgb2YgbWVtb3J5IiwgcHViLT51bml0LCBfX2Z1bmNfXyk7CisJCXdpcGh5X2Vycih3bGMtPndpcGh5LCAid2wlZDogJXM6IG91dCBvZiBtZW1vcnkiLCBwdWItPnVuaXQsCisJCQkgIF9fZnVuY19fKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCXdsY19jbS0+cHViID0gcHViOwpAQCAtNjU2LDkgKzY1MCw2IEBACiAJY2NvZGUgPSBnZXR2YXIod2xjLT5wdWItPnZhcnMsICJjY29kZSIpOwogCWlmIChjY29kZSkgewogCQlzdHJuY3B5KHdsYy0+cHViLT5zcm9tX2Njb2RlLCBjY29kZSwgV0xDX0NOVFJZX0JVRl9TWiAtIDEpOwotCQlXTF9OT05FKCIlczogU1JPTSBjb3VudHJ5IGNvZGUgaXMgJWMlY1xuIiwKLQkJCV9fZnVuY19fLAotCQkJd2xjLT5wdWItPnNyb21fY2NvZGVbMF0sIHdsYy0+cHViLT5zcm9tX2Njb2RlWzFdKTsKIAl9CiAKIAkvKiBpbnRlcm5hbCBjb3VudHJ5IGluZm9ybWF0aW9uIHdoaWNoIG11c3QgbWF0Y2ggcmVndWxhdG9yeSBjb25zdHJhaW50cyBpbiBmaXJtd2FyZSAqLwpAQCAtNjY2LDggKzY1Nyw2IEBACiAJc3RybmNweShjb3VudHJ5X2FiYnJldiwgIlgyIiwgc2l6ZW9mKGNvdW50cnlfYWJicmV2KSAtIDEpOwogCWNvdW50cnkgPSB3bGNfY291bnRyeV9sb29rdXAod2xjLCBjb3VudHJ5X2FiYnJldik7CiAKLQlBU1NFUlQoY291bnRyeSAhPSBOVUxMKTsKLQogCS8qIHNhdmUgZGVmYXVsdCBjb3VudHJ5IGZvciBleGl0aW5nIDExZCByZWd1bGF0b3J5IG1vZGUgKi8KIAlzdHJuY3B5KHdsYy0+Y291bnRyeV9kZWZhdWx0LCBjb3VudHJ5X2FiYnJldiwgV0xDX0NOVFJZX0JVRl9TWiAtIDEpOwogCkBAIC03MDgsMTAgKzY5Nyw2IEBACiAJY2hhciBtYXBwZWRfY2NvZGVbV0xDX0NOVFJZX0JVRl9TWl07CiAJdWludCBtYXBwZWRfcmVncmV2OwogCi0JV0xfTk9ORSgiJXM6IChjb3VudHJ5X2FiYnJldiBcIiVzXCIsIGNjb2RlIFwiJXNcIiwgcmVncmV2ICVkKSBTUFJPTSBcIiVzXCIvJXVcbiIsCi0JCV9fZnVuY19fLCBjb3VudHJ5X2FiYnJldiwgY2NvZGUsIHJlZ3JldiwKLQkJd2xjX2NtLT5zcm9tX2Njb2RlLCB3bGNfY20tPnNyb21fcmVncmV2KTsKLQogCS8qIGlmIHJlZ3JldiBpcyAtMSwgbG9va3VwIHRoZSBtYXBwZWQgY291bnRyeSBjb2RlLAogCSAqIG90aGVyd2lzZSB1c2UgdGhlIGNjb2RlIGFuZCByZWdyZXYgZGlyZWN0bHkKIAkgKi8KQEAgLTcyMiwxNCArNzA3LDEzIEBACiAJCQkJCSZtYXBwZWRfcmVncmV2KTsKIAl9IGVsc2UgewogCQkvKiBmaW5kIHRoZSBtYXRjaGluZyBidWlsdC1pbiBjb3VudHJ5IGRlZmluaXRpb24gKi8KLQkJQVNTRVJUKDApOwogCQljb3VudHJ5ID0gd2xjX2NvdW50cnlfbG9va3VwX2RpcmVjdChjY29kZSwgcmVncmV2KTsKIAkJc3RybmNweShtYXBwZWRfY2NvZGUsIGNjb2RlLCBXTENfQ05UUllfQlVGX1NaKTsKIAkJbWFwcGVkX3JlZ3JldiA9IHJlZ3JldjsKIAl9CiAKIAlpZiAoY291bnRyeSA9PSBOVUxMKQotCQlyZXR1cm4gQkNNRV9CQURBUkc7CisJCXJldHVybiAtRUlOVkFMOwogCiAJLyogc2V0IHRoZSBkcml2ZXIgc3RhdGUgZm9yIHRoZSBjb3VudHJ5ICovCiAJd2xjX3NldF9jb3VudHJ5X2NvbW1vbih3bGNfY20sIGNvdW50cnlfYWJicmV2LCBtYXBwZWRfY2NvZGUsCkBAIC03NTIsOCArNzM2LDYgQEAKIAlzdHJ1Y3Qgd2xjX2luZm8gKndsYyA9IHdsY19jbS0+d2xjOwogCWNoYXIgcHJldl9jb3VudHJ5X2FiYnJldltXTENfQ05UUllfQlVGX1NaXTsKIAotCUFTU0VSVChjb3VudHJ5ICE9IE5VTEwpOwotCiAJLyogc2F2ZSBjdXJyZW50IGNvdW50cnkgc3RhdGUgKi8KIAl3bGNfY20tPmNvdW50cnkgPSBjb3VudHJ5OwogCkBAIC04MjEsOCArODAzLDggQEAKIAogCS8qIGNoZWNrIGZvciBjdXJyZW50bHkgc3VwcG9ydGVkIGNjb2RlIHNpemUgKi8KIAlpZiAoc3RybGVuKGNjb2RlKSA+IChXTENfQ05UUllfQlVGX1NaIC0gMSkpIHsKLQkJV0xfRVJST1IoIndsJWQ6ICVzOiBjY29kZSBcIiVzXCIgdG9vIGxvbmcgZm9yIG1hdGNoXG4iLAotCQkJIHdsYy0+cHViLT51bml0LCBfX2Z1bmNfXywgY2NvZGUpOworCQl3aXBoeV9lcnIod2xjLT53aXBoeSwgIndsJWQ6ICVzOiBjY29kZSBcIiVzXCIgdG9vIGxvbmcgZm9yICIKKwkJCSAgIm1hdGNoXG4iLCB3bGMtPnB1Yi0+dW5pdCwgX19mdW5jX18sIGNjb2RlKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC04MzcsOCArODE5LDcgQEAKIAlpZiAoIXN0cmNtcChzcm9tX2Njb2RlLCBjY29kZSkpIHsKIAkJKm1hcHBlZF9yZWdyZXYgPSBzcm9tX3JlZ3JldjsKIAkJbWFwcGVkID0gMDsKLQkJV0xfRVJST1IoInNyb21fY29kZSA9PSBjY29kZSAlc1xuIiwgX19mdW5jX18pOwotCQlBU1NFUlQoMCk7CisJCXdpcGh5X2Vycih3bGMtPndpcGh5LCAic3JvbV9jb2RlID09IGNjb2RlICVzXG4iLCBfX2Z1bmNfXyk7CiAJfSBlbHNlIHsKIAkJbWFwcGVkID0KIAkJICAgIHdsY19jb3VudHJ5X2FnZ3JlZ2F0ZV9tYXAod2xjX2NtLCBjY29kZSwgbWFwcGVkX2Njb2RlLApAQCAtODUxLDcgKzgzMiw2IEBACiAJLyogaWYgdGhlcmUgaXMgbm90IGFuIGV4YWN0IHJldiBtYXRjaCwgZGVmYXVsdCB0byByZXYgemVybyAqLwogCWlmIChjb3VudHJ5ID09IE5VTEwgJiYgKm1hcHBlZF9yZWdyZXYgIT0gMCkgewogCQkqbWFwcGVkX3JlZ3JldiA9IDA7Ci0JCUFTU0VSVCgwKTsKIAkJY291bnRyeSA9CiAJCSAgICB3bGNfY291bnRyeV9sb29rdXBfZGlyZWN0KG1hcHBlZF9jY29kZSwgKm1hcHBlZF9yZWdyZXYpOwogCX0KQEAgLTg4OCw5ICs4NjgsNiBAQAogCQkJcmV0dXJuICZjbnRyeV9sb2NhbGVzW2ldLmNvdW50cnk7CiAJCX0KIAl9Ci0KLQlXTF9FUlJPUigiJXM6IFJldHVybmluZyBOVUxMXG4iLCBfX2Z1bmNfXyk7Ci0JQVNTRVJUKDApOwogCXJldHVybiBOVUxMOwogfQogCkBAIC05MTEsMTIgKzg4OCwxMCBAQAogCQlsaSA9IEJBTkRfNUcoYmFuZC0+YmFuZHR5cGUpID8KIAkJICAgIHdsY19nZXRfbG9jYWxlXzVnKGNvdW50cnktPmxvY2FsZV81RykgOgogCQkgICAgd2xjX2dldF9sb2NhbGVfMmcoY291bnRyeS0+bG9jYWxlXzJHKTsKLQkJQVNTRVJUKGxpKTsKIAkJd2xjX2NtLT5iYW5kc3RhdGVbYmFuZC0+YmFuZHVuaXRdLmxvY2FsZV9mbGFncyA9IGxpLT5mbGFnczsKIAkJbGlfbWltbyA9IEJBTkRfNUcoYmFuZC0+YmFuZHR5cGUpID8KIAkJICAgIHdsY19nZXRfbWltb181Zyhjb3VudHJ5LT5sb2NhbGVfbWltb181RykgOgogCQkgICAgd2xjX2dldF9taW1vXzJnKGNvdW50cnktPmxvY2FsZV9taW1vXzJHKTsKLQkJQVNTRVJUKGxpX21pbW8pOwogCiAJCS8qIG1lcmdlIHRoZSBtaW1vIG5vbi1taW1vIGxvY2FsZSBmbGFncyAqLwogCQl3bGNfY20tPmJhbmRzdGF0ZVtiYW5kLT5iYW5kdW5pdF0ubG9jYWxlX2ZsYWdzIHw9CkBAIC05NjgsOSArOTQzLDEwIEBACiAJaWYgKGNoYW4gPT0gSU5WQ0hBTk5FTCkgewogCQkvKiBjb3VudHJ5L2xvY2FsZSB3aXRoIG5vIHZhbGlkIGNoYW5uZWxzLCBzZXQgdGhlIHJhZGlvIGRpc2FibGUgYml0ICovCiAJCW1ib29sc2V0KHdsYy0+cHViLT5yYWRpb19kaXNhYmxlZCwgV0xfUkFESU9fQ09VTlRSWV9ESVNBQkxFKTsKLQkJV0xfRVJST1IoIndsJWQ6ICVzOiBubyB2YWxpZCBjaGFubmVsIGZvciBcIiVzXCIgbmJhbmRzICVkIGJhbmRsb2NrZWQgJWRcbiIsCi0JCQkgd2xjLT5wdWItPnVuaXQsIF9fZnVuY19fLAotCQkJIHdsY19jbS0+Y291bnRyeV9hYmJyZXYsIE5CQU5EUyh3bGMpLCB3bGMtPmJhbmRsb2NrZWQpOworCQl3aXBoeV9lcnIod2xjLT53aXBoeSwgIndsJWQ6ICVzOiBubyB2YWxpZCBjaGFubmVsIGZvciBcIiVzXCIgIgorCQkJICAibmJhbmRzICVkIGJhbmRsb2NrZWQgJWRcbiIsIHdsYy0+cHViLT51bml0LAorCQkJICBfX2Z1bmNfXywgd2xjX2NtLT5jb3VudHJ5X2FiYnJldiwgTkJBTkRTKHdsYyksCisJCQkgIHdsYy0+YmFuZGxvY2tlZCk7CiAJfSBlbHNlCiAJICAgIGlmIChtYm9vbGlzc2V0KHdsYy0+cHViLT5yYWRpb19kaXNhYmxlZCwKIAkJV0xfUkFESU9fQ09VTlRSWV9ESVNBQkxFKSkgewpAQCAtMTUyMCwxMCArMTQ5Niw5IEBACiAJdTggY2hhbm5lbCA9IENIU1BFQ19DSEFOTkVMKGNoc3BlYyk7CiAKIAkvKiBjaGVjayB0aGUgY2hhbnNwZWMgKi8KLQlpZiAod2ZfY2hzcGVjX21hbGZvcm1lZChjaHNwZWMpKSB7Ci0JCVdMX0VSUk9SKCJ3bCVkOiBtYWxmb3JtZWQgY2hhbnNwZWMgMHgleFxuIiwKLQkJCSB3bGMtPnB1Yi0+dW5pdCwgY2hzcGVjKTsKLQkJQVNTRVJUKDApOworCWlmIChiY21fY2hzcGVjX21hbGZvcm1lZChjaHNwZWMpKSB7CisJCXdpcGh5X2Vycih3bGMtPndpcGh5LCAid2wlZDogbWFsZm9ybWVkIGNoYW5zcGVjIDB4JXhcbiIsCisJCQl3bGMtPnB1Yi0+dW5pdCwgY2hzcGVjKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfa2V5LmggYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19rZXkuaAppbmRleCA1MGE0ZTM4Li5jYWIxMGM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19rZXkuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19rZXkuaApAQCAtMTE1LDcgKzExNSw3IEBACiAjZGVmaW5lIFdTRUNfSUJTU19QRUVSX0dST1VQX0tFWQkoMSA8PCA3KQkvKiBGbGFnOiBncm91cCBrZXkgZm9yIGEgSUJTUyBQRUVSICovCiAjZGVmaW5lIFdTRUNfSUNWX0VSUk9SCQkoMSA8PCA4KQkvKiBQcm92b2tlIGRlbGliZXJhdGUgSUNWIGVycm9yICovCiAKLSNkZWZpbmUgd2xjX2tleV9pbnNlcnQoYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgaSwgaikgKEJDTUVfRVJST1IpCisjZGVmaW5lIHdsY19rZXlfaW5zZXJ0KGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgsIGksIGopICgtRUJBREUpCiAjZGVmaW5lIHdsY19rZXlfdXBkYXRlKGEsIGIsIGMpIGRvIHt9IHdoaWxlICgwKQogI2RlZmluZSB3bGNfa2V5X3JlbW92ZShhLCBiLCBjKSBkbyB7fSB3aGlsZSAoMCkKICNkZWZpbmUgd2xjX2tleV9yZW1vdmVfYWxsKGEsIGIpIGRvIHt9IHdoaWxlICgwKQpAQCAtMTI2LDEyICsxMjYsMTIgQEAKICNkZWZpbmUgd2xjX2tleV9od19pbml0KGEsIGIsIGMpICBkbyB7fSB3aGlsZSAoMCkKICNkZWZpbmUgd2xjX2tleV9od193b3dsX2luaXQoYSwgYiwgYywgZCkgZG8ge30gd2hpbGUgKDApCiAjZGVmaW5lIHdsY19rZXlfc3dfd293bF91cGRhdGUoYSwgYiwgYywgZCwgZSkgZG8ge30gd2hpbGUgKDApCi0jZGVmaW5lIHdsY19rZXlfc3dfd293bF9jcmVhdGUoYSwgYiwgYykgKEJDTUVfRVJST1IpCisjZGVmaW5lIHdsY19rZXlfc3dfd293bF9jcmVhdGUoYSwgYiwgYykgKC1FQkFERSkKICNkZWZpbmUgd2xjX2tleV9pdl91cGRhdGUoYSwgYiwgYywgZCwgZSkgZG8geyh2b2lkKWU7IH0gd2hpbGUgKDApCiAjZGVmaW5lIHdsY19rZXlfaXZfaW5pdChhLCBiLCBjKSBkbyB7fSB3aGlsZSAoMCkKLSNkZWZpbmUgd2xjX2tleV9zZXRfZXJyb3IoYSwgYiwgYykgKEJDTUVfRVJST1IpCi0jZGVmaW5lIHdsY19rZXlfZHVtcF9odyhhLCBiKSAoQkNNRV9FUlJPUikKLSNkZWZpbmUgd2xjX2tleV9kdW1wX3N3KGEsIGIpIChCQ01FX0VSUk9SKQorI2RlZmluZSB3bGNfa2V5X3NldF9lcnJvcihhLCBiLCBjKSAoLUVCQURFKQorI2RlZmluZSB3bGNfa2V5X2R1bXBfaHcoYSwgYikgKC1FQkFERSkKKyNkZWZpbmUgd2xjX2tleV9kdW1wX3N3KGEsIGIpICgtRUJBREUpCiAjZGVmaW5lIHdsY19rZXlfZGVma2V5ZmxhZyhhKSAoMCkKICNkZWZpbmUgd2xjX3JjbXRhX2FkZF9ic3NpZChhLCBiKSBkbyB7fSB3aGlsZSAoMCkKICNkZWZpbmUgd2xjX3JjbXRhX2RlbF9ic3NpZChhLCBiKSBkbyB7fSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX21haW4uYyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX21haW4uYwppbmRleCBhYjdhYjg1Li40YjRhMzFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19tYWluLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfbWFpbi5jCkBAIC0xNiwyMCArMTYsMjIgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpX2lkcy5oPgogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgogCiAjaW5jbHVkZSA8YmNtZGVmcy5oPgogI2luY2x1ZGUgPGJjbWRldnMuaD4KICNpbmNsdWRlIDxiY211dGlscy5oPgogI2luY2x1ZGUgPGJjbXdpZmkuaD4KLSNpbmNsdWRlIDxzaXV0aWxzLmg+CisjaW5jbHVkZSA8YmNtbnZyYW0uaD4KKyNpbmNsdWRlIDxhaXV0aWxzLmg+CiAjaW5jbHVkZSA8cGNpY2ZnLmg+CiAjaW5jbHVkZSA8YmNtc3JvbS5oPgogI2luY2x1ZGUgPHdsaW9jdGwuaD4KICNpbmNsdWRlIDxzYmhuZGRtYS5oPgogI2luY2x1ZGUgPGhuZGRtYS5oPgotI2luY2x1ZGUgPGhuZHBtdS5oPgogCisjaW5jbHVkZSAid2xjX3BtdS5oIgogI2luY2x1ZGUgImQxMS5oIgogI2luY2x1ZGUgIndsY190eXBlcy5oIgogI2luY2x1ZGUgIndsY19jZmcuaCIKQEAgLTUxLDEyICs1Myw3IEBACiAjaW5jbHVkZSAid2xjX2FsbG9jLmgiCiAjaW5jbHVkZSAid2xfZGJnLmgiCiAKLS8qCi0gKglEaXNhYmxlIHN0YXRpc3RpY3MgY291bnRpbmcgZm9yIFdNRQotICovCi0jZGVmaW5lIFdMQ05UU0VUKGEsIGIpCi0jZGVmaW5lIFdMQ05USU5DUihhKQotI2RlZmluZSBXTENOVEFERChhLCBiKQorI2luY2x1ZGUgIndsX21hYzgwMjExLmgiCiAKIC8qCiAgKiBXUEEoMikgZGVmaW5pdGlvbnMKQEAgLTI0Miw3ICsyMzksNyBAQAogI2RlZmluZSBXTENfUkVQTEFZX0NOVFJTX1ZBTFVFCVdQQV9DQVBfMTZfUkVQTEFZX0NOVFJTCiAKIC8qIGxvY2FsIHByb3RvdHlwZXMgKi8KLXN0YXRpYyB1MTYgQkNNRkFTVFBBVEggd2xjX2QxMWhkcnNfbWFjODAyMTEoc3RydWN0IHdsY19pbmZvICp3bGMsCitzdGF0aWMgdTE2IHdsY19kMTFoZHJzX21hYzgwMjExKHN0cnVjdCB3bGNfaW5mbyAqd2xjLAogCQkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcCwKIAkJCQkJICAgICAgIHN0cnVjdCBzY2IgKnNjYiwgdWludCBmcmFnLApAQCAtMjUwLDggKzI0Nyw2IEBACiAJCQkJCSAgICAgICB1aW50IG5leHRfZnJhZ19sZW4sCiAJCQkJCSAgICAgICB3c2VjX2tleV90ICprZXksCiAJCQkJCSAgICAgICByYXRlc3BlY190IHJzcGVjX292ZXJyaWRlKTsKLQotc3RhdGljIHZvaWQgd2xjX2N0cnVwZF9jYWNoZSh1MTYgY3VyX3N0YXQsIHUxNiAqbWFjc3RhdF9zbmFwc2hvdCwgdTMyICptYWNzdGF0KTsKIHN0YXRpYyB2b2lkIHdsY19ic3NfZGVmYXVsdF9pbml0KHN0cnVjdCB3bGNfaW5mbyAqd2xjKTsKIHN0YXRpYyB2b2lkIHdsY191Y29kZV9tYWNfdXBkKHN0cnVjdCB3bGNfaW5mbyAqd2xjKTsKIHN0YXRpYyByYXRlc3BlY190IG1hYzgwMjExX3dsY19zZXRfbnJhdGUoc3RydWN0IHdsY19pbmZvICp3bGMsCkBAIC0yNzMsMTMgKzI2OCwxMyBAQAogCQkJCSAgICAgc3RydWN0IHdsY190eHFfaW5mbyAqcWksCiAJCQkJICAgICBib29sIG9uLCBpbnQgcHJpbyk7CiBzdGF0aWMgdm9pZCB3bGNfdHhmbG93Y29udHJvbF9yZXNldChzdHJ1Y3Qgd2xjX2luZm8gKndsYyk7Ci1zdGF0aWMgdTE2IHdsY19jb21wdXRlX2FpcnRpbWUoc3RydWN0IHdsY19pbmZvICp3bGMsIHJhdGVzcGVjX3QgcnNwZWMsCi0JCQkJICB1aW50IGxlbmd0aCk7Ci1zdGF0aWMgdm9pZCB3bGNfY29tcHV0ZV9jY2tfcGxjcChyYXRlc3BlY190IHJhdGUsIHVpbnQgbGVuZ3RoLCB1OCAqcGxjcCk7CitzdGF0aWMgdm9pZCB3bGNfY29tcHV0ZV9jY2tfcGxjcChzdHJ1Y3Qgd2xjX2luZm8gKndsYywgcmF0ZXNwZWNfdCByYXRlLAorCQkJCSB1aW50IGxlbmd0aCwgdTggKnBsY3ApOwogc3RhdGljIHZvaWQgd2xjX2NvbXB1dGVfb2ZkbV9wbGNwKHJhdGVzcGVjX3QgcmF0ZSwgdWludCBsZW5ndGgsIHU4ICpwbGNwKTsKIHN0YXRpYyB2b2lkIHdsY19jb21wdXRlX21pbW9fcGxjcChyYXRlc3BlY190IHJhdGUsIHVpbnQgbGVuZ3RoLCB1OCAqcGxjcCk7CiBzdGF0aWMgdTE2IHdsY19jb21wdXRlX2ZyYW1lX2R1cihzdHJ1Y3Qgd2xjX2luZm8gKndsYywgcmF0ZXNwZWNfdCByYXRlLAogCQkJCSAgICB1OCBwcmVhbWJsZV90eXBlLCB1aW50IG5leHRfZnJhZ19sZW4pOworc3RhdGljIHU2NCB3bGNfcmVjb3Zlcl90c2Y2NChzdHJ1Y3Qgd2xjX2luZm8gKndsYywgc3RydWN0IHdsY19kMTFyeGhkciAqcnhoKTsKIHN0YXRpYyB2b2lkIHdsY19yZWN2Y3RsKHN0cnVjdCB3bGNfaW5mbyAqd2xjLAogCQkJZDExcnhoZHJfdCAqcnhoLCBzdHJ1Y3Qgc2tfYnVmZiAqcCk7CiBzdGF0aWMgdWludCB3bGNfY2FsY19mcmFtZV9sZW4oc3RydWN0IHdsY19pbmZvICp3bGMsIHJhdGVzcGVjX3QgcmF0ZSwKQEAgLTMyMCwzNSArMzE1LDYgQEAKIHN0YXRpYyBpbnQgX3dsY19pb2N0bChzdHJ1Y3Qgd2xjX2luZm8gKndsYywgaW50IGNtZCwgdm9pZCAqYXJnLCBpbnQgbGVuLAogCQkgICAgICBzdHJ1Y3Qgd2xjX2lmICp3bGNpZik7CiAKLSNpZiBkZWZpbmVkKEJDTURCRykKLXZvaWQgd2xjX2dldF9yY210YShzdHJ1Y3Qgd2xjX2luZm8gKndsYywgaW50IGlkeCwgdTggKmFkZHIpCi17Ci0JZDExcmVnc190ICpyZWdzID0gd2xjLT5yZWdzOwotCXUzMiB2MzI7Ci0KLQlXTF9UUkFDRSgid2wlZDogJXNcbiIsIFdMQ1dMVU5JVCh3bGMpLCBfX2Z1bmNfXyk7Ci0KLQlXX1JFRygmcmVncy0+b2JqYWRkciwgKE9CSkFERFJfUkNNVEFfU0VMIHwgKGlkeCAqIDIpKSk7Ci0JKHZvaWQpUl9SRUcoJnJlZ3MtPm9iamFkZHIpOwotCXYzMiA9IFJfUkVHKCZyZWdzLT5vYmpkYXRhKTsKLQlhZGRyWzBdID0gKHU4KSB2MzI7Ci0JYWRkclsxXSA9ICh1OCkgKHYzMiA+PiA4KTsKLQlhZGRyWzJdID0gKHU4KSAodjMyID4+IDE2KTsKLQlhZGRyWzNdID0gKHU4KSAodjMyID4+IDI0KTsKLQlXX1JFRygmcmVncy0+b2JqYWRkciwgKE9CSkFERFJfUkNNVEFfU0VMIHwgKChpZHggKiAyKSArIDEpKSk7Ci0JKHZvaWQpUl9SRUcoJnJlZ3MtPm9iamFkZHIpOwotCXYzMiA9IFJfUkVHKCZyZWdzLT5vYmpkYXRhKTsKLQlhZGRyWzRdID0gKHU4KSB2MzI7Ci0JYWRkcls1XSA9ICh1OCkgKHYzMiA+PiA4KTsKLX0KLSNlbmRpZgkJCQkvKiBkZWZpbmVkKEJDTURCRykgKi8KLQotLyoga2VlcCB0aGUgY2hpcCBhd2FrZSBpZiBuZWVkZWQgKi8KLWJvb2wgd2xjX3N0YXlfYXdha2Uoc3RydWN0IHdsY19pbmZvICp3bGMpCi17Ci0JcmV0dXJuIHRydWU7Ci19Ci0KIC8qIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlIFBNIGJpdCBzaG91bGQgYmUgc2V0IGluIG91dGdvaW5nIGZyYW1lcyBhbmQgU1RBWV9BV0FLRSBpcyBtZWFuaW5nZnVsCiAgKi8KIGJvb2wgd2xjX3BzX2FsbG93ZWQoc3RydWN0IHdsY19pbmZvICp3bGMpCkBAIC0zODAsNyArMzQ2LDcgQEAKIAogdm9pZCB3bGNfcmVzZXQoc3RydWN0IHdsY19pbmZvICp3bGMpCiB7Ci0JV0xfVFJBQ0UoIndsJWQ6IHdsY19yZXNldFxuIiwgd2xjLT5wdWItPnVuaXQpOworCUJDTU1TRyh3bGMtPndpcGh5LCAid2wlZFxuIiwgd2xjLT5wdWItPnVuaXQpOwogCiAJd2xjLT5jaGVja19mb3JfdW5hbGlnbmVkX3RidHQgPSBmYWxzZTsKIApAQCAtMzkyLDE0ICszNTgsMTQgQEAKIAkJc2l6ZW9mKG1hY3N0YXRfdCkpOwogCiAJd2xjX2JtYWNfcmVzZXQod2xjLT5odyk7Ci0Jd2xjX2FtcGR1X3Jlc2V0KHdsYy0+YW1wZHUpOwogCXdsYy0+dHhyZXRyaWVkID0gMDsKIAogfQogCiB2b2lkIHdsY19mYXRhbF9lcnJvcihzdHJ1Y3Qgd2xjX2luZm8gKndsYykKIHsKLQlXTF9FUlJPUigid2wlZDogZmF0YWwgZXJyb3IsIHJlaW5pdGlhbGl6aW5nXG4iLCB3bGMtPnB1Yi0+dW5pdCk7CisJd2lwaHlfZXJyKHdsYy0+d2lwaHksICJ3bCVkOiBmYXRhbCBlcnJvciwgcmVpbml0aWFsaXppbmdcbiIsCisJCSAgd2xjLT5wdWItPnVuaXQpOwogCXdsX2luaXQod2xjLT53bCk7CiB9CiAKQEAgLTQxNCwxMSArMzgwLDYgQEAKIAkgICAgMSB8IFdMX0NIQU5TUEVDX0JXXzIwIHwgV0xfQ0hBTlNQRUNfQ1RMX1NCX05PTkUgfAogCSAgICBXTF9DSEFOU1BFQ19CQU5EXzJHOwogCi0JLyogbWFrZSBzdXJlIHRoZSBjaGFubmVsIGlzIG9uIHRoZSBzdXBwb3J0ZWQgYmFuZCBpZiB3ZSBhcmUgYmFuZC1yZXN0cmljdGVkICovCi0JaWYgKHdsYy0+YmFuZGxvY2tlZCB8fCBOQkFORFMod2xjKSA9PSAxKSB7Ci0JCUFTU0VSVChDSFNQRUNfV0xDQkFORFVOSVQoY2hhbnNwZWMpID09IHdsYy0+YmFuZC0+YmFuZHVuaXQpOwotCX0KLQlBU1NFUlQod2xjX3ZhbGlkX2NoYW5zcGVjX2RiKHdsYy0+Y21pLCBjaGFuc3BlYykpOwogCXJldHVybiBjaGFuc3BlYzsKIH0KIApAQCAtNDQwLDcgKzQwMSw3IEBACiAJc3RydWN0IHdsY19ic3NjZmcgKmJzc2NmZzsKIAlib29sIG11dGUgPSBmYWxzZTsKIAotCVdMX1RSQUNFKCJ3bCVkOiB3bGNfaW5pdFxuIiwgd2xjLT5wdWItPnVuaXQpOworCUJDTU1TRyh3bGMtPndpcGh5LCAid2wlZFxuIiwgd2xjLT5wdWItPnVuaXQpOwogCiAJcmVncyA9IHdsYy0+cmVnczsKIApAQCAtNDYzLDcgKzQyNCw2IEBACiAJd2xjX2Jjbl9saV91cGQod2xjKTsKIAl3bGMtPmJjbl93YWl0X3ByZCA9CiAJICAgICh1OCkgKHdsY19ibWFjX3JlYWRfc2htKHdsYy0+aHcsIE1fTk9TTFBaTkFURFRJTSkgPj4gMTApOwotCUFTU0VSVCh3bGMtPmJjbl93YWl0X3ByZCA+IDApOwogCiAJLyogdGhlIHdvcmxkIGlzIG5ldyBhZ2Fpbiwgc28gaXMgb3VyIHJlcG9ydGVkIHJhdGUgKi8KIAl3bGNfcmVwcmF0ZV9pbml0KHdsYyk7CkBAIC01MjQsNyArNDg0LDcgQEAKIAkvKiBFbmFibGUgRURDRiBtb2RlICh3aGlsZSB0aGUgTUFDIGlzIHN1c3BlbmRlZCkgKi8KIAlpZiAoRURDRl9FTkFCKHdsYy0+cHViKSkgewogCQlPUl9SRUcoJnJlZ3MtPmlmc19jdGwsIElGU19VU0VFRENGKTsKLQkJd2xjX2VkY2Zfc2V0cGFyYW1zKHdsYy0+Y2ZnLCBmYWxzZSk7CisJCXdsY19lZGNmX3NldHBhcmFtcyh3bGMsIGZhbHNlKTsKIAl9CiAKIAkvKiBJbml0IHByZWNlZGVuY2UgbWFwcyBmb3IgZW1wdHkgRklGT3MgKi8KQEAgLTU1OSw3ICs1MTksNiBAQAogCWlmIChXTENfV01FX1JFVFJZX1NIT1JUX0dFVCh3bGMsIDApID09IDApIHsJLyogVW5pbml0aWFsaXplZDsgcmVhZCBmcm9tIEhXICovCiAJCWludCBhYzsKIAotCQlBU1NFUlQod2xjLT5jbGspOwogCQlmb3IgKGFjID0gMDsgYWMgPCBBQ19DT1VOVDsgYWMrKykgewogCQkJd2xjLT53bWVfcmV0cmllc1thY10gPQogCQkJICAgIHdsY19yZWFkX3NobSh3bGMsIE1fQUNfVFhMTVRfQUREUihhYykpOwpAQCAtNjA0LDgyICs1NjMsMjcgQEAKIAl3bGNfbWN0cmwod2xjLCBNQ1RMX1BST01JU0MgfCBNQ1RMX0tFRVBDT05UUk9MLCBwcm9taXNjX2JpdHMpOwogfQogCi0vKiBjaGVjayBpZiBocHMgYW5kIHdha2Ugc3RhdGVzIG9mIHN3IGFuZCBodyBhcmUgaW4gc3luYyAqLwotYm9vbCB3bGNfcHNfY2hlY2soc3RydWN0IHdsY19pbmZvICp3bGMpCi17Ci0JYm9vbCByZXMgPSB0cnVlOwotCWJvb2wgaHBzLCB3YWtlOwotCWJvb2wgd2FrZV9vazsKLQotCWlmICghQVBfQUNUSVZFKHdsYykpIHsKLQkJdTMyIHRtcDsKLQkJdG1wID0gUl9SRUcoJndsYy0+cmVncy0+bWFjY29udHJvbCk7Ci0KLQkJLyoKLQkJICogSWYgZGV2aWNlcmVtb3ZlZCBpcyBkZXRlY3RlZCwgdGhlbiBkb24ndCB0YWtlIGFueSBhY3Rpb24gYXMKLQkJICogdGhpcyBjYW4gYmUgY2FsbGVkIGluIGFueSBjb250ZXh0LiBBc3N1bWUgdGhhdCBjYWxsZXIgd2lsbAotCQkgKiB0YWtlIGNhcmUgb2YgdGhlIGNvbmRpdGlvbi4gVGhpcyBpcyBqdXN0IHRvIGF2b2lkIGFzc2VydAotCQkgKi8KLQkJaWYgKHRtcCA9PSAweGZmZmZmZmZmKSB7Ci0JCQlXTF9FUlJPUigid2wlZDogJXM6IGRlYWQgY2hpcFxuIiwKLQkJCQkgd2xjLT5wdWItPnVuaXQsIF9fZnVuY19fKTsKLQkJCXJldHVybiBERVZJQ0VSRU1PVkVEKHdsYyk7Ci0JCX0KLQotCQlocHMgPSBQU19BTExPV0VEKHdsYyk7Ci0KLQkJaWYgKGhwcyAhPSAoKHRtcCAmIE1DVExfSFBTKSAhPSAwKSkgewotCQkJaW50IGlkeDsKLQkJCXN0cnVjdCB3bGNfYnNzY2ZnICpjZmc7Ci0JCQlXTF9FUlJPUigid2wlZDogaHBzIG5vdCBzeW5jLCBzdyAlZCwgbWFjY29udHJvbCAweCV4XG4iLAotCQkJCSB3bGMtPnB1Yi0+dW5pdCwgaHBzLCB0bXApOwotCQkJRk9SRUFDSF9CU1Mod2xjLCBpZHgsIGNmZykgewotCQkJCWlmICghQlNTQ0ZHX1NUQShjZmcpKQotCQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJcmVzID0gZmFsc2U7Ci0JCX0KLQkJLyogRm9yIGEgbW9ub2xpdGhpYyBidWlsZCB0aGUgd2FrZSBjaGVjayBjYW4gYmUgZXhhY3Qgc2luY2UgaXQgbG9va3MgYXQgd2FrZQotCQkgKiBvdmVycmlkZSBiaXRzLiBUaGUgTUNUTF9XQUtFIGJpdCBzaG91bGQgbWF0Y2ggdGhlICd3YWtlJyB2YWx1ZS4KLQkJICovCi0JCXdha2UgPSBTVEFZX0FXQUtFKHdsYykgfHwgd2xjLT5ody0+d2FrZV9vdmVycmlkZTsKLQkJd2FrZV9vayA9ICh3YWtlID09ICgodG1wICYgTUNUTF9XQUtFKSAhPSAwKSk7Ci0JCWlmIChocHMgJiYgIXdha2Vfb2spIHsKLQkJCVdMX0VSUk9SKCJ3bCVkOiB3YWtlIG5vdCBzeW5jLCBzdyAlZCBtYWNjb250cm9sIDB4JXhcbiIsCi0JCQkJIHdsYy0+cHViLT51bml0LCB3YWtlLCB0bXApOwotCQkJcmVzID0gZmFsc2U7Ci0JCX0KLQl9Ci0JQVNTRVJUKHJlcyk7Ci0JcmV0dXJuIHJlczsKLX0KLQogLyogcHVzaCBzdyBocHMgYW5kIHdha2Ugc3RhdGUgdGhyb3VnaCBoYXJkd2FyZSAqLwogdm9pZCB3bGNfc2V0X3BzX2N0cmwoc3RydWN0IHdsY19pbmZvICp3bGMpCiB7CiAJdTMyIHYxLCB2MjsKLQlib29sIGhwcywgd2FrZTsKKwlib29sIGhwczsKIAlib29sIGF3YWtlX2JlZm9yZTsKIAogCWhwcyA9IFBTX0FMTE9XRUQod2xjKTsKLQl3YWtlID0gaHBzID8gKFNUQVlfQVdBS0Uod2xjKSkgOiB0cnVlOwogCi0JV0xfVFJBQ0UoIndsJWQ6IHdsY19zZXRfcHNfY3RybDogaHBzICVkIHdha2UgJWRcbiIsCi0JCSB3bGMtPnB1Yi0+dW5pdCwgaHBzLCB3YWtlKTsKKwlCQ01NU0cod2xjLT53aXBoeSwgIndsJWQ6IGhwcyAlZFxuIiwgd2xjLT5wdWItPnVuaXQsIGhwcyk7CiAKIAl2MSA9IFJfUkVHKCZ3bGMtPnJlZ3MtPm1hY2NvbnRyb2wpOwotCXYyID0gMDsKKwl2MiA9IE1DVExfV0FLRTsKIAlpZiAoaHBzKQogCQl2MiB8PSBNQ1RMX0hQUzsKLQlpZiAod2FrZSkKLQkJdjIgfD0gTUNUTF9XQUtFOwogCiAJd2xjX21jdHJsKHdsYywgTUNUTF9XQUtFIHwgTUNUTF9IUFMsIHYyKTsKIAogCWF3YWtlX2JlZm9yZSA9ICgodjEgJiBNQ1RMX1dBS0UpIHx8ICgodjEgJiBNQ1RMX0hQUykgPT0gMCkpOwogCi0JaWYgKHdha2UgJiYgIWF3YWtlX2JlZm9yZSkKKwlpZiAoIWF3YWtlX2JlZm9yZSkKIAkJd2xjX2JtYWNfd2FpdF9mb3Jfd2FrZSh3bGMtPmh3KTsKIAogfQpAQCAtNzMwLDggKzYzNCw2IEBACiAJaW50IGlkeDsKIAlzdHJ1Y3Qgd2xjX2Jzc2NmZyAqY2ZnOwogCi0JQVNTRVJUKHdsYy0+YmFuZC0+Z21vZGUpOwotCiAJLyogdXNlIHRoZSBvdmVycmlkZSBpZiBpdCBpcyBzZXQgKi8KIAlpZiAod2xjLT5zaG9ydHNsb3Rfb3ZlcnJpZGUgIT0gV0xDX1NIT1JUU0xPVF9BVVRPKQogCQlzaG9ydHNsb3QgPSAod2xjLT5zaG9ydHNsb3Rfb3ZlcnJpZGUgPT0gV0xDX1NIT1JUU0xPVF9PTik7CkBAIC03NjIsOCArNjY0LDggQEAKIAogCWxvY2FsID0gV0xDX1RYUFdSX01BWDsKIAlpZiAod2xjLT5wdWItPmFzc29jaWF0ZWQgJiYKLQkgICAgKHdmX2Noc3BlY19jdGxjaGFuKHdsYy0+Y2hhbnNwZWMpID09Ci0JICAgICB3Zl9jaHNwZWNfY3RsY2hhbih3bGMtPmhvbWVfY2hhbnNwZWMpKSkgeworCSAgICAoYmNtX2Noc3BlY19jdGxjaGFuKHdsYy0+Y2hhbnNwZWMpID09CisJICAgICBiY21fY2hzcGVjX2N0bGNoYW4od2xjLT5ob21lX2NoYW5zcGVjKSkpIHsKIAogCQkvKiBnZXQgdGhlIGxvY2FsIHBvd2VyIGNvbnN0cmFpbnQgaWYgd2UgYXJlIG9uIHRoZSBBUCdzCiAJCSAqIGNoYW5uZWwgWzgwMi4xMWgsIDcuMy4yLjEzXQpAQCAtODI2LDkgKzcyOCw4IEBACiAJY2hhbnNwZWNfdCBvbGRfY2hhbnNwZWMgPSB3bGMtPmNoYW5zcGVjOwogCiAJaWYgKCF3bGNfdmFsaWRfY2hhbnNwZWNfZGIod2xjLT5jbWksIGNoYW5zcGVjKSkgewotCQlXTF9FUlJPUigid2wlZDogJXM6IEJhZCBjaGFubmVsICVkXG4iLAotCQkJIHdsYy0+cHViLT51bml0LCBfX2Z1bmNfXywgQ0hTUEVDX0NIQU5ORUwoY2hhbnNwZWMpKTsKLQkJQVNTRVJUKHdsY192YWxpZF9jaGFuc3BlY19kYih3bGMtPmNtaSwgY2hhbnNwZWMpKTsKKwkJd2lwaHlfZXJyKHdsYy0+d2lwaHksICJ3bCVkOiAlczogQmFkIGNoYW5uZWwgJWRcbiIsCisJCQkgIHdsYy0+cHViLT51bml0LCBfX2Z1bmNfXywgQ0hTUEVDX0NIQU5ORUwoY2hhbnNwZWMpKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtODM4LDkgKzczOSwxMCBAQAogCQlpZiAod2xjLT5iYW5kLT5iYW5kdW5pdCAhPSBiYW5kdW5pdCB8fCB3bGMtPmJhbmRpbml0X3BlbmRpbmcpIHsKIAkJCXN3aXRjaGJhbmQgPSB0cnVlOwogCQkJaWYgKHdsYy0+YmFuZGxvY2tlZCkgewotCQkJCVdMX0VSUk9SKCJ3bCVkOiAlczogY2hzcGVjICVkIGJhbmQgaXMgbG9ja2VkIVxuIiwKLQkJCQkJIHdsYy0+cHViLT51bml0LCBfX2Z1bmNfXywKLQkJCQkJIENIU1BFQ19DSEFOTkVMKGNoYW5zcGVjKSk7CisJCQkJd2lwaHlfZXJyKHdsYy0+d2lwaHksICJ3bCVkOiAlczogY2hzcGVjICVkICIKKwkJCQkJICAiYmFuZCBpcyBsb2NrZWQhXG4iLAorCQkJCQkgIHdsYy0+cHViLT51bml0LCBfX2Z1bmNfXywKKwkJCQkJICBDSFNQRUNfQ0hBTk5FTChjaGFuc3BlYykpOwogCQkJCXJldHVybjsKIAkJCX0KIAkJCS8qIEJNQUNfTk9URTogc2hvdWxkIHRoZSBzZXRiYW5kIGNhbGwgY29tZSBhZnRlciB0aGUgd2xjX2JtYWNfY2hhbnNwZWMoKSA/CkBAIC04NTIsOCArNzU0LDYgQEAKIAkJfQogCX0KIAotCUFTU0VSVChOX0VOQUIod2xjLT5wdWIpIHx8ICFDSFNQRUNfSVM0MChjaGFuc3BlYykpOwotCiAJLyogc3luYyB1cCBwaHkvcmFkaW8gY2hhbnNwZWMgKi8KIAl3bGNfc2V0X3BoeV9jaGFuc3BlYyh3bGMsIGNoYW5zcGVjKTsKIApAQCAtODg3LDcgKzc4Nyw3IEBACiAJaWYgKGxlbiA9PSBzaXplb2YodHhfcG93ZXJfbGVnYWN5X3QpKQogCQlvbGRfcG93ZXIgPSAodHhfcG93ZXJfbGVnYWN5X3QgKikgcHdyOwogCWVsc2UgaWYgKGxlbiA8IHNpemVvZih0eF9wb3dlcl90KSkKLQkJcmV0dXJuIEJDTUVfQlVGVE9PU0hPUlQ7CisJCXJldHVybiAtRU9WRVJGTE9XOwogCiAJbWVtc2V0KCZwb3dlciwgMCwgc2l6ZW9mKHR4X3Bvd2VyX3QpKTsKIApAQCAtMTA5OCwxMCArOTk4LDEwIEBACiAJdWludCBpOwogCiAJLyogVXNlIHRoZSBsb3dlc3QgYmFzaWMgcmF0ZSAqLwotCWxvd2VzdF9iYXNpY19yc3BlYyA9IHJzLT5yYXRlc1swXSAmIFJBVEVfTUFTSzsKKwlsb3dlc3RfYmFzaWNfcnNwZWMgPSBycy0+cmF0ZXNbMF0gJiBXTENfUkFURV9NQVNLOwogCWZvciAoaSA9IDA7IGkgPCBycy0+Y291bnQ7IGkrKykgewogCQlpZiAocnMtPnJhdGVzW2ldICYgV0xDX1JBVEVfRkxBRykgewotCQkJbG93ZXN0X2Jhc2ljX3JzcGVjID0gcnMtPnJhdGVzW2ldICYgUkFURV9NQVNLOworCQkJbG93ZXN0X2Jhc2ljX3JzcGVjID0gcnMtPnJhdGVzW2ldICYgV0xDX1JBVEVfTUFTSzsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTE0MSw3ICsxMDQxLDcgQEAKICovCiB2b2lkIHdsY19wcm90ZWN0aW9uX3VwZChzdHJ1Y3Qgd2xjX2luZm8gKndsYywgdWludCBpZHgsIGludCB2YWwpCiB7Ci0JV0xfVFJBQ0UoIndsY19wcm90ZWN0aW9uX3VwZDogaWR4ICVkLCB2YWwgJWRcbiIsIGlkeCwgdmFsKTsKKwlCQ01NU0cod2xjLT53aXBoeSwgImlkeCAlZCwgdmFsICVkXG4iLCBpZHgsIHZhbCk7CiAKIAlzd2l0Y2ggKGlkeCkgewogCWNhc2UgV0xDX1BST1RfR19TUEVDOgpAQCAtMTE3OSw3ICsxMDc5LDYgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlBU1NFUlQoMCk7CiAJCWJyZWFrOwogCX0KIApAQCAtMTI1MiwxNCArMTE1MSwxMiBAQAogCXVpbnQgcGFya2JhbmQ7CiAJdWludCBpLCBiYW5kX29yZGVyWzJdOwogCi0JV0xfVFJBQ0UoIndsJWQ6IHdsY19iYW5kaW5pdF9vcmRlcmVkXG4iLCB3bGMtPnB1Yi0+dW5pdCk7CisJQkNNTVNHKHdsYy0+d2lwaHksICJ3bCVkXG4iLCB3bGMtPnB1Yi0+dW5pdCk7CiAJLyoKIAkgKiBXZSBtaWdodCBoYXZlIGJlZW4gYmFuZGxvY2tlZCBkdXJpbmcgZG93biBhbmQgdGhlIGNoaXAgcG93ZXItY3ljbGVkIChoaWJlcm5hdGUpLgogCSAqIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGJhbmQgdG8gcGFyayBvbgogCSAqLwogCWlmICh3bGMtPmJhbmRsb2NrZWQgfHwgTkJBTkRTKHdsYykgPT0gMSkgewotCQlBU1NFUlQoQ0hTUEVDX1dMQ0JBTkRVTklUKGNoYW5zcGVjKSA9PSB3bGMtPmJhbmQtPmJhbmR1bml0KTsKLQogCQlwYXJrYmFuZCA9IHdsYy0+YmFuZC0+YmFuZHVuaXQ7CS8qIHVwZGF0ZWQgaW4gd2xjX2JhbmRsb2NrKCkgKi8KIAkJYmFuZF9vcmRlclswXSA9IGJhbmRfb3JkZXJbMV0gPSBwYXJrYmFuZDsKIAl9IGVsc2UgewpAQCAtMTI4MSw3ICsxMTc4LDcgQEAKIAogCQkvKiBmaWxsIGluIGh3X3JhdGUgKi8KIAkJd2xjX3JhdGVzZXRfZmlsdGVyKCZkZWZhdWx0X3JhdGVzZXQsICZ3bGMtPmJhbmQtPmh3X3JhdGVzZXQsCi0JCQkJICAgZmFsc2UsIFdMQ19SQVRFU19DQ0tfT0ZETSwgUkFURV9NQVNLLAorCQkJCSAgIGZhbHNlLCBXTENfUkFURVNfQ0NLX09GRE0sIFdMQ19SQVRFX01BU0ssCiAJCQkJICAgKGJvb2wpIE5fRU5BQih3bGMtPnB1YikpOwogCiAJCS8qIGluaXQgYmFzaWMgcmF0ZSBsb29rdXAgKi8KQEAgLTEyOTUsNyArMTE5Miw3IEBACiAvKiBiYW5kLXNwZWNpZmljIGluaXQgKi8KIHN0YXRpYyB2b2lkIFdMQkFORElOSVRGTih3bGNfYnNpbml0KSAoc3RydWN0IHdsY19pbmZvICp3bGMpCiB7Ci0JV0xfVFJBQ0UoIndsJWQ6IHdsY19ic2luaXQ6IGJhbmR1bml0ICVkXG4iLAorCUJDTU1TRyh3bGMtPndpcGh5LCAid2wlZDogYmFuZHVuaXQgJWRcbiIsCiAJCSB3bGMtPnB1Yi0+dW5pdCwgd2xjLT5iYW5kLT5iYW5kdW5pdCk7CiAKIAkvKiB3cml0ZSB1Y29kZSBBQ0svQ1RTIHJhdGUgdGFibGUgKi8KQEAgLTEzMTUsMTAgKzEyMTIsNiBAQAogCWludCBpZHg7CiAJc3RydWN0IHdsY19ic3NjZmcgKmNmZzsKIAotCUFTU0VSVChOQkFORFMod2xjKSA+IDEpOwotCUFTU0VSVCghd2xjLT5iYW5kbG9ja2VkKTsKLQlBU1NFUlQoYmFuZHVuaXQgIT0gd2xjLT5iYW5kLT5iYW5kdW5pdCB8fCB3bGMtPmJhbmRpbml0X3BlbmRpbmcpOwotCiAJd2xjLT5iYW5kID0gd2xjLT5iYW5kc3RhdGVbYmFuZHVuaXRdOwogCiAJaWYgKCF3bGMtPnB1Yi0+dXApCkBAIC0xMzU1LDQxICsxMjQ4LDI4IEBACiAJCSAgY3B1X3RvX2xlMTYoRURDRl9BQ19WT19UWE9QX1NUQSl9CiAJCSB9CiAJfTsKLQotCUFTU0VSVChzaXplb2YoKnBlKSA9PSBXTUVfUEFSQU1fSUVfTEVOKTsKIAltZW1jcHkocGUsICZzdGFkZWYsIHNpemVvZigqcGUpKTsKIH0KIAotdm9pZCB3bGNfd21lX3NldHBhcmFtcyhzdHJ1Y3Qgd2xjX2luZm8gKndsYywgdTE2IGFjaSwgdm9pZCAqYXJnLCBib29sIHN1c3BlbmQpCit2b2lkIHdsY193bWVfc2V0cGFyYW1zKHN0cnVjdCB3bGNfaW5mbyAqd2xjLCB1MTYgYWNpLAorCQkgICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcywKKwkJICAgICAgIGJvb2wgc3VzcGVuZCkKIHsKIAlpbnQgaTsKIAlzaG1fYWNwYXJhbXNfdCBhY3Bfc2htOwogCXUxNiAqc2htX2VudHJ5OwotCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMgPSBhcmc7Ci0KLQlBU1NFUlQod2xjKTsKIAogCS8qIE9ubHkgYXBwbHkgcGFyYW1zIGlmIHRoZSBjb3JlIGlzIG91dCBvZiByZXNldCBhbmQgaGFzIGNsb2NrcyAqLwogCWlmICghd2xjLT5jbGspIHsKLQkJV0xfRVJST1IoIndsJWQ6ICVzIDogbm8tY2xvY2tcbiIsIHdsYy0+cHViLT51bml0LCBfX2Z1bmNfXyk7CisJCXdpcGh5X2Vycih3bGMtPndpcGh5LCAid2wlZDogJXMgOiBuby1jbG9ja1xuIiwgd2xjLT5wdWItPnVuaXQsCisJCQkgIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAotCS8qCi0JICogQVAgdXNlcyBBQyBwYXJhbXMgZnJvbSB3bWVfcGFyYW1faWVfYXAuCi0JICogQVAgYWR2ZXJ0aXNlcyBBQyBwYXJhbXMgZnJvbSB3bWVfcGFyYW1faWUuCi0JICogU1RBIHVzZXMgQUMgcGFyYW1zIGZyb20gd21lX3BhcmFtX2llLgotCSAqLwotCiAJd2xjLT53bWVfYWRtY3RsID0gMDsKIAogCWRvIHsKIAkJbWVtc2V0KChjaGFyICopJmFjcF9zaG0sIDAsIHNpemVvZihzaG1fYWNwYXJhbXNfdCkpOwotCQkvKiBmaW5kIG91dCB3aGljaCBhYyB0aGlzIHNldCBvZiBwYXJhbXMgYXBwbGllcyB0byAqLwotCQlBU1NFUlQoYWNpIDwgQUNfQ09VTlQpOwotCQkvKiBzZXQgdGhlIGFkbWlzc2lvbiBjb250cm9sIHBvbGljeSBmb3IgdGhpcyBBQyAqLwotCQkvKiB3bGMtPndtZV9hZG1jdGwgfD0gMSA8PCBhY2k7ICovLyogc2hvdWxkIGJlIHNldCA/PyAgc2VlbXMgbGlrZSBvZmYgYnkgZGVmYXVsdCAqLwotCiAJCS8qIGZpbGwgaW4gc2htIGFjIHBhcmFtcyBzdHJ1Y3QgKi8KIAkJYWNwX3NobS50eG9wID0gbGUxNl90b19jcHUocGFyYW1zLT50eG9wKTsKIAkJLyogY29udmVydCBmcm9tIHVuaXRzIG9mIDMydXMgdG8gdXMgZm9yIHVjb2RlICovCkBAIC0xNDAzLDggKzEyODMsOCBAQAogCiAJCWlmIChhY3Bfc2htLmFpZnMgPCBFRENGX0FJRlNOX01JTgogCQkgICAgfHwgYWNwX3NobS5haWZzID4gRURDRl9BSUZTTl9NQVgpIHsKLQkJCVdMX0VSUk9SKCJ3bCVkOiB3bGNfZWRjZl9zZXRwYXJhbXM6IGJhZCBhaWZzICVkXG4iLAotCQkJCSB3bGMtPnB1Yi0+dW5pdCwgYWNwX3NobS5haWZzKTsKKwkJCXdpcGh5X2Vycih3bGMtPndpcGh5LCAid2wlZDogd2xjX2VkY2Zfc2V0cGFyYW1zOiBiYWQgIgorCQkJCSAgImFpZnMgJWRcbiIsIHdsYy0+cHViLT51bml0LCBhY3Bfc2htLmFpZnMpOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtMTQzOSwyMCArMTMxOSwxNCBAQAogCiB9CiAKLXZvaWQgd2xjX2VkY2Zfc2V0cGFyYW1zKHN0cnVjdCB3bGNfYnNzY2ZnICpjZmcsIGJvb2wgc3VzcGVuZCkKK3ZvaWQgd2xjX2VkY2Zfc2V0cGFyYW1zKHN0cnVjdCB3bGNfaW5mbyAqd2xjLCBib29sIHN1c3BlbmQpCiB7Ci0Jc3RydWN0IHdsY19pbmZvICp3bGMgPSBjZmctPndsYzsKLQl1aW50IGFjaSwgaSwgajsKKwl1MTYgYWNpOworCWludCBpX2FjOwogCWVkY2ZfYWNwYXJhbV90ICplZGNmX2FjcDsKLQlzaG1fYWNwYXJhbXNfdCBhY3Bfc2htOwotCXUxNiAqc2htX2VudHJ5OwogCi0JQVNTRVJUKGNmZyk7Ci0JQVNTRVJUKHdsYyk7Ci0KLQkvKiBPbmx5IGFwcGx5IHBhcmFtcyBpZiB0aGUgY29yZSBpcyBvdXQgb2YgcmVzZXQgYW5kIGhhcyBjbG9ja3MgKi8KLQlpZiAoIXdsYy0+Y2xrKQotCQlyZXR1cm47CisJc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgdHhxX3BhcnM7CisJc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcyA9ICZ0eHFfcGFyczsKIAogCS8qCiAJICogQVAgdXNlcyBBQyBwYXJhbXMgZnJvbSB3bWVfcGFyYW1faWVfYXAuCkBAIC0xNDYyLDU5ICsxMzM2LDI0IEBACiAKIAllZGNmX2FjcCA9IChlZGNmX2FjcGFyYW1fdCAqKSAmd2xjLT53bWVfcGFyYW1faWUuYWNwYXJhbVswXTsKIAotCXdsYy0+d21lX2FkbWN0bCA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQUNfQ09VTlQ7IGkrKywgZWRjZl9hY3ArKykgewotCQltZW1zZXQoKGNoYXIgKikmYWNwX3NobSwgMCwgc2l6ZW9mKHNobV9hY3BhcmFtc190KSk7CisJZm9yIChpX2FjID0gMDsgaV9hYyA8IEFDX0NPVU5UOyBpX2FjKyssIGVkY2ZfYWNwKyspIHsKIAkJLyogZmluZCBvdXQgd2hpY2ggYWMgdGhpcyBzZXQgb2YgcGFyYW1zIGFwcGxpZXMgdG8gKi8KIAkJYWNpID0gKGVkY2ZfYWNwLT5BQ0kgJiBFRENGX0FDSV9NQVNLKSA+PiBFRENGX0FDSV9TSElGVDsKLQkJQVNTRVJUKGFjaSA8IEFDX0NPVU5UKTsKIAkJLyogc2V0IHRoZSBhZG1pc3Npb24gY29udHJvbCBwb2xpY3kgZm9yIHRoaXMgQUMgKi8KIAkJaWYgKGVkY2ZfYWNwLT5BQ0kgJiBFRENGX0FDTV9NQVNLKSB7CiAJCQl3bGMtPndtZV9hZG1jdGwgfD0gMSA8PCBhY2k7CiAJCX0KIAogCQkvKiBmaWxsIGluIHNobSBhYyBwYXJhbXMgc3RydWN0ICovCi0JCWFjcF9zaG0udHhvcCA9IGxlMTZfdG9fY3B1KGVkY2ZfYWNwLT5UWE9QKTsKLQkJLyogY29udmVydCBmcm9tIHVuaXRzIG9mIDMydXMgdG8gdXMgZm9yIHVjb2RlICovCi0JCXdsYy0+ZWRjZl90eG9wW2FjaV0gPSBhY3Bfc2htLnR4b3AgPQotCQkgICAgRURDRl9UWE9QMlVTRUMoYWNwX3NobS50eG9wKTsKLQkJYWNwX3NobS5haWZzID0gKGVkY2ZfYWNwLT5BQ0kgJiBFRENGX0FJRlNOX01BU0spOwotCi0JCWlmIChhY2kgPT0gQUNfVkkgJiYgYWNwX3NobS50eG9wID09IDAKLQkJICAgICYmIGFjcF9zaG0uYWlmcyA8IEVEQ0ZfQUlGU05fTUFYKQotCQkJYWNwX3NobS5haWZzKys7Ci0KLQkJaWYgKGFjcF9zaG0uYWlmcyA8IEVEQ0ZfQUlGU05fTUlOCi0JCSAgICB8fCBhY3Bfc2htLmFpZnMgPiBFRENGX0FJRlNOX01BWCkgewotCQkJV0xfRVJST1IoIndsJWQ6IHdsY19lZGNmX3NldHBhcmFtczogYmFkIGFpZnMgJWRcbiIsCi0JCQkJIHdsYy0+cHViLT51bml0LCBhY3Bfc2htLmFpZnMpOwotCQkJY29udGludWU7Ci0JCX0KKwkJcGFyYW1zLT50eG9wID0gZWRjZl9hY3AtPlRYT1A7CisJCXBhcmFtcy0+YWlmcyA9IGVkY2ZfYWNwLT5BQ0k7CiAKIAkJLyogQ1dtaW4gPSAyXihFQ1dtaW4pIC0gMSAqLwotCQlhY3Bfc2htLmN3bWluID0gRURDRl9FQ1cyQ1coZWRjZl9hY3AtPkVDVyAmIEVEQ0ZfRUNXTUlOX01BU0spOworCQlwYXJhbXMtPmN3X21pbiA9IEVEQ0ZfRUNXMkNXKGVkY2ZfYWNwLT5FQ1cgJiBFRENGX0VDV01JTl9NQVNLKTsKIAkJLyogQ1dtYXggPSAyXihFQ1dtYXgpIC0gMSAqLwotCQlhY3Bfc2htLmN3bWF4ID0gRURDRl9FQ1cyQ1coKGVkY2ZfYWNwLT5FQ1cgJiBFRENGX0VDV01BWF9NQVNLKQorCQlwYXJhbXMtPmN3X21heCA9IEVEQ0ZfRUNXMkNXKChlZGNmX2FjcC0+RUNXICYgRURDRl9FQ1dNQVhfTUFTSykKIAkJCQkJICAgID4+IEVEQ0ZfRUNXTUFYX1NISUZUKTsKLQkJYWNwX3NobS5jd2N1ciA9IGFjcF9zaG0uY3dtaW47Ci0JCWFjcF9zaG0uYnNsb3RzID0KLQkJICAgIFJfUkVHKCZ3bGMtPnJlZ3MtPnRzZl9yYW5kb20pICYgYWNwX3NobS5jd2N1cjsKLQkJYWNwX3NobS5yZWdnYXAgPSBhY3Bfc2htLmJzbG90cyArIGFjcF9zaG0uYWlmczsKLQkJLyogSW5kaWNhdGUgdGhlIG5ldyBwYXJhbXMgdG8gdGhlIHVjb2RlICovCi0JCWFjcF9zaG0uc3RhdHVzID0gd2xjX3JlYWRfc2htKHdsYywgKE1fRURDRl9RSU5GTyArCi0JCQkJCQkgICAgd21lX3NobWVtYWNpbmRleChhY2kpICoKLQkJCQkJCSAgICBNX0VEQ0ZfUUxFTiArCi0JCQkJCQkgICAgTV9FRENGX1NUQVRVU19PRkYpKTsKLQkJYWNwX3NobS5zdGF0dXMgfD0gV01FX1NUQVRVU19ORVdBQzsKLQotCQkvKiBGaWxsIGluIHNobSBhY3BhcmFtIHRhYmxlICovCi0JCXNobV9lbnRyeSA9ICh1MTYgKikgJmFjcF9zaG07Ci0JCWZvciAoaiA9IDA7IGogPCAoaW50KXNpemVvZihzaG1fYWNwYXJhbXNfdCk7IGogKz0gMikKLQkJCXdsY193cml0ZV9zaG0od2xjLAotCQkJCSAgICAgIE1fRURDRl9RSU5GTyArCi0JCQkJICAgICAgd21lX3NobWVtYWNpbmRleChhY2kpICogTV9FRENGX1FMRU4gKyBqLAotCQkJCSAgICAgICpzaG1fZW50cnkrKyk7CisJCXdsY193bWVfc2V0cGFyYW1zKHdsYywgYWNpLCBwYXJhbXMsIHN1c3BlbmQpOwogCX0KIAogCWlmIChzdXNwZW5kKQpAQCAtMTUzNSwxNCArMTM3NCwxNiBAQAogCXdsYy0+d2R0aW1lciA9IHdsX2luaXRfdGltZXIod2xjLT53bCwgd2xjX3dhdGNoZG9nX2J5X3RpbWVyLAogCQl3bGMsICJ3YXRjaGRvZyIpOwogCWlmICghd2xjLT53ZHRpbWVyKSB7Ci0JCVdMX0VSUk9SKCJ3bCVkOiAgd2xfaW5pdF90aW1lciBmb3Igd2R0aW1lciBmYWlsZWRcbiIsIHVuaXQpOworCQl3aXBoeV9lcnIod2xjLT53aXBoeSwgIndsJWQ6ICB3bF9pbml0X3RpbWVyIGZvciB3ZHRpbWVyICIKKwkJCSAgImZhaWxlZFxuIiwgdW5pdCk7CiAJCWdvdG8gZmFpbDsKIAl9CiAKIAl3bGMtPnJhZGlvX3RpbWVyID0gd2xfaW5pdF90aW1lcih3bGMtPndsLCB3bGNfcmFkaW9fdGltZXIsCiAJCXdsYywgInJhZGlvIik7CiAJaWYgKCF3bGMtPnJhZGlvX3RpbWVyKSB7Ci0JCVdMX0VSUk9SKCJ3bCVkOiAgd2xfaW5pdF90aW1lciBmb3IgcmFkaW9fdGltZXIgZmFpbGVkXG4iLCB1bml0KTsKKwkJd2lwaHlfZXJyKHdsYy0+d2lwaHksICJ3bCVkOiAgd2xfaW5pdF90aW1lciBmb3IgcmFkaW9fdGltZXIgIgorCQkJICAiZmFpbGVkXG4iLCB1bml0KTsKIAkJZ290byBmYWlsOwogCX0KIApAQCAtMTY4OSwyMCArMTUzMCwyMyBAQAogCiAJd2xjLT5hc2kgPSB3bGNfYW50c2VsX2F0dGFjaCh3bGMpOwogCWlmICh3bGMtPmFzaSA9PSBOVUxMKSB7Ci0JCVdMX0VSUk9SKCJ3bCVkOiB3bGNfYXR0YWNoOiB3bGNfYW50c2VsX2F0dGFjaCBmYWlsZWRcbiIsIHVuaXQpOworCQl3aXBoeV9lcnIod2xjLT53aXBoeSwgIndsJWQ6IHdsY19hdHRhY2g6IHdsY19hbnRzZWxfYXR0YWNoICIKKwkJCSAgImZhaWxlZFxuIiwgdW5pdCk7CiAJCWVyciA9IDQ0OwogCQlnb3RvIGZhaWw7CiAJfQogCiAJd2xjLT5hbXBkdSA9IHdsY19hbXBkdV9hdHRhY2god2xjKTsKIAlpZiAod2xjLT5hbXBkdSA9PSBOVUxMKSB7Ci0JCVdMX0VSUk9SKCJ3bCVkOiB3bGNfYXR0YWNoOiB3bGNfYW1wZHVfYXR0YWNoIGZhaWxlZFxuIiwgdW5pdCk7CisJCXdpcGh5X2Vycih3bGMtPndpcGh5LCAid2wlZDogd2xjX2F0dGFjaDogd2xjX2FtcGR1X2F0dGFjaCAiCisJCQkgICJmYWlsZWRcbiIsIHVuaXQpOwogCQllcnIgPSA1MDsKIAkJZ290byBmYWlsOwogCX0KIAogCWlmICgod2xjX3N0Zl9hdHRhY2god2xjKSAhPSAwKSkgewotCQlXTF9FUlJPUigid2wlZDogd2xjX2F0dGFjaDogd2xjX3N0Zl9hdHRhY2ggZmFpbGVkXG4iLCB1bml0KTsKKwkJd2lwaHlfZXJyKHdsYy0+d2lwaHksICJ3bCVkOiB3bGNfYXR0YWNoOiB3bGNfc3RmX2F0dGFjaCAiCisJCQkgICJmYWlsZWRcbiIsIHVuaXQpOwogCQllcnIgPSA2ODsKIAkJZ290byBmYWlsOwogCX0KQEAgLTE3MjAsNTYgKzE1NjQsMjEgQEAKIC8qCiAgKiBUaGUgY29tbW9uIGRyaXZlciBlbnRyeSByb3V0aW5lLiBFcnJvciBjb2RlcyBzaG91bGQgYmUgdW5pcXVlCiAgKi8KLXZvaWQgKndsY19hdHRhY2godm9pZCAqd2wsIHUxNiB2ZW5kb3IsIHUxNiBkZXZpY2UsIHVpbnQgdW5pdCwgYm9vbCBwaW9tb2RlLAotCQkgdm9pZCAqcmVnc3ZhLCB1aW50IGJ1c3R5cGUsIHZvaWQgKmJ0cGFyYW0sIHVpbnQgKnBlcnIpCit2b2lkICp3bGNfYXR0YWNoKHN0cnVjdCB3bF9pbmZvICp3bCwgdTE2IHZlbmRvciwgdTE2IGRldmljZSwgdWludCB1bml0LAorCQkgYm9vbCBwaW9tb2RlLCB2b2lkICpyZWdzdmEsIHVpbnQgYnVzdHlwZSwgdm9pZCAqYnRwYXJhbSwKKwkJIHVpbnQgKnBlcnIpCiB7CiAJc3RydWN0IHdsY19pbmZvICp3bGM7CiAJdWludCBlcnIgPSAwOwogCXVpbnQgajsKIAlzdHJ1Y3Qgd2xjX3B1YiAqcHViOwotCXN0cnVjdCB3bGNfdHhxX2luZm8gKnFpOwogCXVpbnQgbl9kaXNhYmxlZDsKIAotCVdMX05PTkUoIndsJWQ6ICVzOiB2ZW5kb3IgMHgleCBkZXZpY2UgMHgleFxuIiwKLQkJdW5pdCwgX19mdW5jX18sIHZlbmRvciwgZGV2aWNlKTsKLQotCUFTU0VSVChXU0VDX01BWF9SQ01UQV9LRVlTIDw9IFdTRUNfTUFYX0tFWVMpOwotCUFTU0VSVChXU0VDX01BWF9ERUZBVUxUX0tFWVMgPT0gV0xDX0RFRkFVTFRfS0VZUyk7Ci0KLQkvKiBzb21lIGNvZGUgZGVwZW5kcyBvbiBwYWNrZWQgc3RydWN0dXJlcyAqLwotCUFTU0VSVChzaXplb2Yoc3RydWN0IGV0aGhkcikgPT0gRVRIX0hMRU4pOwotCUFTU0VSVChzaXplb2YoZDExcmVnc190KSA9PSBTSV9DT1JFX1NJWkUpOwotCUFTU0VSVChzaXplb2Yob2ZkbV9waHlfaGRyX3QpID09IEQxMV9QSFlfSERSX0xFTik7Ci0JQVNTRVJUKHNpemVvZihjY2tfcGh5X2hkcl90KSA9PSBEMTFfUEhZX0hEUl9MRU4pOwotCUFTU0VSVChzaXplb2YoZDExdHhoX3QpID09IEQxMV9UWEhfTEVOKTsKLQlBU1NFUlQoc2l6ZW9mKGQxMXJ4aGRyX3QpID09IFJYSERSX0xFTik7Ci0JQVNTRVJUKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcikgPT0gRE9UMTFfQTRfSERSX0xFTik7Ci0JQVNTRVJUKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3J0cykgPT0gRE9UMTFfUlRTX0xFTik7Ci0JQVNTRVJUKHNpemVvZih0eF9zdGF0dXNfdCkgPT0gVFhTVEFUVVNfTEVOKTsKLQlBU1NFUlQoc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwKSA9PSBIVF9DQVBfSUVfTEVOKTsKLSNpZmRlZiBCUkNNX0ZVTExNQUMKLQlBU1NFUlQob2Zmc2V0b2Yod2xfc2Nhbl9wYXJhbXNfdCwgY2hhbm5lbF9saXN0KSA9PQotCSAgICAgICBXTF9TQ0FOX1BBUkFNU19GSVhFRF9TSVpFKTsKLSNlbmRpZgotCUFTU0VSVChJU19BTElHTkVEKG9mZnNldG9mKHdzZWNfa2V5X3QsIGRhdGEpLCBzaXplb2YodTMyKSkpOwotCUFTU0VSVChJU1BPV0VST0YyKE1BX1dJTkRPV19TWikpOwotCi0JQVNTRVJUKHNpemVvZih3bGNfZDExcnhoZHJfdCkgPD0gV0xfSFdSWE9GRik7Ci0KLQkvKgotCSAqIE51bWJlciBvZiByZXBsYXkgY291bnRlcnMgdmFsdWUgdXNlZCBpbiBXUEEgSUUgbXVzdCBtYXRjaCAjIHJ4aXZzCi0JICogc3VwcG9ydGVkIGluIHdzZWNfa2V5X3Qgc3RydWN0LiBTZWUgODAyLjExaS9EMy4wIHNlY3QuIDcuMy4yLjE3Ci0JICogJ1JTTiBJbmZvcm1hdGlvbiBFbGVtZW50JyBmaWd1cmUgOCBmb3IgdGhpcyBtYXBwaW5nLgotCSAqLwotCUFTU0VSVCgoV1BBX0NBUF8xNl9SRVBMQVlfQ05UUlMgPT0gV0xDX1JFUExBWV9DTlRSU19WQUxVRQotCQkmJiAxNiA9PSBXTENfTlVNUlhJVlMpCi0JICAgICAgIHx8IChXUEFfQ0FQXzRfUkVQTEFZX0NOVFJTID09IFdMQ19SRVBMQVlfQ05UUlNfVkFMVUUKLQkJICAgJiYgNCA9PSBXTENfTlVNUlhJVlMpKTsKLQogCS8qIGFsbG9jYXRlIHN0cnVjdCB3bGNfaW5mbyBzdGF0ZSBhbmQgaXRzIHN1YnN0cnVjdHVyZXMgKi8KIAl3bGMgPSAoc3RydWN0IHdsY19pbmZvICopIHdsY19hdHRhY2hfbWFsbG9jKHVuaXQsICZlcnIsIGRldmljZSk7CiAJaWYgKHdsYyA9PSBOVUxMKQogCQlnb3RvIGZhaWw7CisJd2xjLT53aXBoeSA9IHdsLT53aXBoeTsKIAlwdWIgPSB3bGMtPnB1YjsKIAogI2lmIGRlZmluZWQoQkNNREJHKQpAQCAtMTg5Miw3ICsxNzAxLDcgQEAKIAkJLyogZmlsbCBpbiBod19yYXRlc2V0ICh1c2VkIGVhcmx5IGJ5IFdMQ19TRVRfUkFURVNFVCkgKi8KIAkJd2xjX3JhdGVzZXRfZmlsdGVyKCZ3bGMtPmJhbmQtPmRlZnJhdGVzZXQsCiAJCQkJICAgJndsYy0+YmFuZC0+aHdfcmF0ZXNldCwgZmFsc2UsCi0JCQkJICAgV0xDX1JBVEVTX0NDS19PRkRNLCBSQVRFX01BU0ssCisJCQkJICAgV0xDX1JBVEVTX0NDS19PRkRNLCBXTENfUkFURV9NQVNLLAogCQkJCSAgIChib29sKSBOX0VOQUIod2xjLT5wdWIpKTsKIAl9CiAKQEAgLTE5MDUsNyArMTcxNCw4IEBACiAJCWdvdG8gZmFpbDsKIAogCWlmICghd2xjX3RpbWVyc19pbml0KHdsYywgdW5pdCkpIHsKLQkJV0xfRVJST1IoIndsJWQ6ICVzOiB3bGNfaW5pdF90aW1lciBmYWlsZWRcbiIsIHVuaXQsIF9fZnVuY19fKTsKKwkJd2lwaHlfZXJyKHdsLT53aXBoeSwgIndsJWQ6ICVzOiB3bGNfaW5pdF90aW1lciBmYWlsZWRcbiIsIHVuaXQsCisJCQkgIF9fZnVuY19fKTsKIAkJZXJyID0gMzI7CiAJCWdvdG8gZmFpbDsKIAl9CkBAIC0xOTEzLDggKzE3MjMsOCBAQAogCS8qIGRlcGVuZCBvbiByYXRlc2V0LCBnbW9kZSAqLwogCXdsYy0+Y21pID0gd2xjX2NoYW5uZWxfbWdyX2F0dGFjaCh3bGMpOwogCWlmICghd2xjLT5jbWkpIHsKLQkJV0xfRVJST1IoIndsJWQ6ICVzOiB3bGNfY2hhbm5lbF9tZ3JfYXR0YWNoIGZhaWxlZFxuIiwKLQkJCSB1bml0LCBfX2Z1bmNfXyk7CisJCXdpcGh5X2Vycih3bC0+d2lwaHksICJ3bCVkOiAlczogd2xjX2NoYW5uZWxfbWdyX2F0dGFjaCBmYWlsZWQiCisJCQkgICJcbiIsIHVuaXQsIF9fZnVuY19fKTsKIAkJZXJyID0gMzM7CiAJCWdvdG8gZmFpbDsKIAl9CkBAIC0xOTI3LDI2ICsxNzM3LDE5IEBACiAJICovCiAKIAkvKiBhbGxvY2F0ZSBvdXIgaW5pdGlhbCBxdWV1ZSAqLwotCXFpID0gd2xjX3R4cV9hbGxvYyh3bGMpOwotCWlmIChxaSA9PSBOVUxMKSB7Ci0JCVdMX0VSUk9SKCJ3bCVkOiAlczogZmFpbGVkIHRvIG1hbGxvYyB0eCBxdWV1ZVxuIiwKLQkJCSB1bml0LCBfX2Z1bmNfXyk7CisJd2xjLT5wa3RfcXVldWUgPSB3bGNfdHhxX2FsbG9jKHdsYyk7CisJaWYgKHdsYy0+cGt0X3F1ZXVlID09IE5VTEwpIHsKKwkJd2lwaHlfZXJyKHdsLT53aXBoeSwgIndsJWQ6ICVzOiBmYWlsZWQgdG8gbWFsbG9jIHR4IHF1ZXVlXG4iLAorCQkJICB1bml0LCBfX2Z1bmNfXyk7CiAJCWVyciA9IDEwMDsKIAkJZ290byBmYWlsOwogCX0KLQl3bGMtPmFjdGl2ZV9xdWV1ZSA9IHFpOwogCiAJd2xjLT5ic3NjZmdbMF0gPSB3bGMtPmNmZzsKIAl3bGMtPmNmZy0+X2lkeCA9IDA7CiAJd2xjLT5jZmctPndsYyA9IHdsYzsKIAlwdWItPnR4bWF4cGt0cyA9IE1BWFRYUEtUUzsKIAotCXB1Yi0+X2NudC0+dmVyc2lvbiA9IFdMX0NOVF9UX1ZFUlNJT047Ci0JcHViLT5fY250LT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IHdsX2NudCk7Ci0KLQlXTENOVFNFVChwdWItPl93bWVfY250LT52ZXJzaW9uLCBXTF9XTUVfQ05UX1ZFUlNJT04pOwotCVdMQ05UU0VUKHB1Yi0+X3dtZV9jbnQtPmxlbmd0aCwgc2l6ZW9mKHdsX3dtZV9jbnRfdCkpOwotCiAJd2xjX3dtZV9pbml0cGFyYW1zX3N0YSh3bGMsICZ3bGMtPndtZV9wYXJhbV9pZSk7CiAKIAl3bGMtPm1pbW9mdCA9IEZUX0hUOwpAQCAtMjAxNCw3ICsxODE3LDggQEAKIAlyZXR1cm4gKHZvaWQgKil3bGM7CiAKICBmYWlsOgotCVdMX0VSUk9SKCJ3bCVkOiAlczogZmFpbGVkIHdpdGggZXJyICVkXG4iLCB1bml0LCBfX2Z1bmNfXywgZXJyKTsKKwl3aXBoeV9lcnIod2wtPndpcGh5LCAid2wlZDogJXM6IGZhaWxlZCB3aXRoIGVyciAlZFxuIiwKKwkJICB1bml0LCBfX2Z1bmNfXywgZXJyKTsKIAlpZiAod2xjKQogCQl3bGNfZGV0YWNoKHdsYyk7CiAKQEAgLTIwMzIsOCArMTgzNiw4IEBACiAJCS8qIGRlZmF1bHQgYW50ZW5uYSBnYWluIGZvciBzcm9tIHJldiAxIGlzIDIgZEJtICg4IHFkYm0pICovCiAJCXdsYy0+YmFuZC0+YW50Z2FpbiA9IDg7CiAJfSBlbHNlIGlmICh3bGMtPmJhbmQtPmFudGdhaW4gPT0gLTEpIHsKLQkJV0xfRVJST1IoIndsJWQ6ICVzOiBJbnZhbGlkIGFudGVubmFzIGF2YWlsYWJsZSBpbiBzcm9tLCB1c2luZyAyZEJcbiIsCi0JCQkgdW5pdCwgX19mdW5jX18pOworCQl3aXBoeV9lcnIod2xjLT53aXBoeSwgIndsJWQ6ICVzOiBJbnZhbGlkIGFudGVubmFzIGF2YWlsYWJsZSBpbiIKKwkJCSAgIiBzcm9tLCB1c2luZyAyZEJcbiIsIHVuaXQsIF9fZnVuY19fKTsKIAkJd2xjLT5iYW5kLT5hbnRnYWluID0gODsKIAl9IGVsc2UgewogCQlzOCBnYWluLCBmcmFjdDsKQEAgLTIwNzIsOCArMTg3Niw4IEBACiAJCWFhID0gKHM4KSBnZXRpbnR2YXIodmFycywKIAkJCQkgICAgICAoQkFORF81RyhiYW5kdHlwZSkgPyAiYWExIiA6ICJhYTAiKSk7CiAJaWYgKChhYSA8IDEpIHx8IChhYSA+IDE1KSkgewotCQlXTF9FUlJPUigid2wlZDogJXM6IEludmFsaWQgYW50ZW5uYXMgYXZhaWxhYmxlIGluIHNyb20gKDB4JXgpLCB1c2luZyAzXG4iLAotCQkJIHVuaXQsIF9fZnVuY19fLCBhYSk7CisJCXdpcGh5X2Vycih3bGMtPndpcGh5LCAid2wlZDogJXM6IEludmFsaWQgYW50ZW5uYXMgYXZhaWxhYmxlIGluIgorCQkJICAiIHNyb20gKDB4JXgpLCB1c2luZyAzXG4iLCB1bml0LCBfX2Z1bmNfXywgYWEpOwogCQlhYSA9IDM7CiAJfQogCkBAIC0yMTM0LDE1ICsxOTM4LDEyIEBACiAgKi8KIHVpbnQgd2xjX2RldGFjaChzdHJ1Y3Qgd2xjX2luZm8gKndsYykKIHsKLQl1aW50IGk7CiAJdWludCBjYWxsYmFja3MgPSAwOwogCiAJaWYgKHdsYyA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAotCVdMX1RSQUNFKCJ3bCVkOiAlc1xuIiwgd2xjLT5wdWItPnVuaXQsIF9fZnVuY19fKTsKLQotCUFTU0VSVCghd2xjLT5wdWItPnVwKTsKKwlCQ01NU0cod2xjLT53aXBoeSwgIndsJWRcbiIsIHdsYy0+cHViLT51bml0KTsKIAogCWNhbGxiYWNrcyArPSB3bGNfYm1hY19kZXRhY2god2xjKTsKIApAQCAtMjE4MiwxMyArMTk4Myw2IEBACiAJd2hpbGUgKHdsYy0+dHhfcXVldWVzICE9IE5VTEwpCiAJCXdsY190eHFfZnJlZSh3bGMsIHdsYy0+dHhfcXVldWVzKTsKIAotCS8qCi0JICogY29uc2lzdGVuY3kgY2hlY2s6IHdsY19tb2R1bGVfcmVnaXN0ZXIvd2xjX21vZHVsZV91bnJlZ2lzdGVyIGNhbGxzCi0JICogc2hvdWxkIG1hdGNoIHRoZXJlZm9yZSBub3RoaW5nIHNob3VsZCBiZSBsZWZ0IGhlcmUuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IFdMQ19NQVhNT0RVTEVTOyBpKyspCi0JCUFTU0VSVCh3bGMtPm1vZHVsZWNiW2ldLm5hbWVbMF0gPT0gJ1wwJyk7Ci0KIAl3bGNfZGV0YWNoX21mcmVlKHdsYyk7CiAJcmV0dXJuIGNhbGxiYWNrczsKIH0KQEAgLTIzMDAsOCArMjA5NCw2IEBACiAvKiBtYWludGFpbiBMRUQgYmVoYXZpb3IgaW4gZG93biBzdGF0ZSAqLwogc3RhdGljIHZvaWQgd2xjX2Rvd25fbGVkX3VwZChzdHJ1Y3Qgd2xjX2luZm8gKndsYykKIHsKLQlBU1NFUlQoIXdsYy0+cHViLT51cCk7Ci0KIAkvKiBtYWludGFpbiBMRURzIHdoaWxlIGluIGRvd24gc3RhdGUsIHR1cm4gb24gc2JjbGsgaWYgbm90IGF2YWlsYWJsZSB5ZXQgKi8KIAkvKiB0dXJuIG9uIHNiY2xrIGlmIG5lY2Vzc2FyeSAqLwogCWlmICghQVBfRU5BQih3bGMtPnB1YikpIHsKQEAgLTIzNDksNyArMjE0MSw4IEBACiAJc3RydWN0IHdsY19pbmZvICp3bGMgPSAoc3RydWN0IHdsY19pbmZvICopIGFyZzsKIAogCWlmIChERVZJQ0VSRU1PVkVEKHdsYykpIHsKLQkJV0xfRVJST1IoIndsJWQ6ICVzOiBkZWFkIGNoaXBcbiIsIHdsYy0+cHViLT51bml0LCBfX2Z1bmNfXyk7CisJCXdpcGh5X2Vycih3bGMtPndpcGh5LCAid2wlZDogJXM6IGRlYWQgY2hpcFxuIiwgd2xjLT5wdWItPnVuaXQsCisJCQlfX2Z1bmNfXyk7CiAJCXdsX2Rvd24od2xjLT53bCk7CiAJCXJldHVybjsKIAl9CkBAIC0yMzU4LDggKzIxNTEsNiBAQAogCWlmICh3bGMtPm1wY19vZmZjbnQgPCBXTENfTVBDX01BWF9ERUxBWUNOVCkKIAkJd2xjLT5tcGNfb2ZmY250Kys7CiAKLQkvKiB2YWxpZGF0ZSBhbGwgdGhlIHJlYXNvbnMgZHJpdmVyIGNvdWxkIGJlIGRvd24gYW5kIHJ1bm5pbmcgdGhpcyByYWRpb190aW1lciAqLwotCUFTU0VSVCh3bGMtPnB1Yi0+cmFkaW9fZGlzYWJsZWQgfHwgd2xjLT5kb3duX292ZXJyaWRlKTsKIAl3bGNfcmFkaW9faHdkaXNhYmxlX3VwZCh3bGMpOwogCXdsY19yYWRpb191cGQod2xjKTsKIH0KQEAgLTIzODEsNTYgKzIxNzIsMTEgQEAKIAlpZiAoIXdsYy0+cmFkaW9fbW9uaXRvcikKIAkJcmV0dXJuIHRydWU7CiAKLQlBU1NFUlQoKHdsYy0+cHViLT53bGZlYXR1cmVmbGFnICYgV0xfU1dGTF9OT0hXUkFESU8pICE9Ci0JICAgICAgIFdMX1NXRkxfTk9IV1JBRElPKTsKLQogCXdsYy0+cmFkaW9fbW9uaXRvciA9IGZhbHNlOwogCXdsY19wbGxyZXEod2xjLCBmYWxzZSwgV0xDX1BMTFJFUV9SQURJT19NT04pOwogCXJldHVybiB3bF9kZWxfdGltZXIod2xjLT53bCwgd2xjLT5yYWRpb190aW1lcik7CiB9CiAKLS8qIGJyaW5nIHRoZSBkcml2ZXIgZG93biwgYnV0IGRvbid0IHJlc2V0IGhhcmR3YXJlICovCi12b2lkIHdsY19vdXQoc3RydWN0IHdsY19pbmZvICp3bGMpCi17Ci0Jd2xjX2JtYWNfc2V0X25vcmVzZXQod2xjLT5odywgdHJ1ZSk7Ci0Jd2xjX3JhZGlvX3VwZCh3bGMpOwotCXdsX2Rvd24od2xjLT53bCk7Ci0Jd2xjX2JtYWNfc2V0X25vcmVzZXQod2xjLT5odywgZmFsc2UpOwotCi0JLyogY29yZSBjbGsgaXMgdHJ1ZSBpbiBCTUFDIGRyaXZlciBkdWUgdG8gbm9yZXNldCwgbmVlZCB0byBtaXJyb3IgaXQgaW4gSElHSCAqLwotCXdsYy0+Y2xrID0gdHJ1ZTsKLQotCS8qIFRoaXMgd2lsbCBtYWtlIHN1cmUgdGhhdCB3aGVuICd1cCcgaXMgZG9uZQotCSAqIGFmdGVyICdvdXQnIGl0J2xsIHJlc3RvcmUgaGFyZHdhcmUgKGVzcGVjaWFsbHkgZ3Bpb3MpCi0JICovCi0Jd2xjLT5wdWItPmh3X3VwID0gZmFsc2U7Ci19Ci0KLSNpZiBkZWZpbmVkKEJDTURCRykKLS8qIFZlcmlmeSB0aGUgc2FuaXR5IG9mIHdsYy0+dHhfcHJlY19tYXAuIFRoaXMgY2FuIGJlIGRvbmUgb25seSBieSBtYWtpbmcgc3VyZSB0aGF0Ci0gKiBpZiB0aGVyZSBpcyBubyBwYWNrZXQgcGVuZGluZyBmb3IgdGhlIEZJRk8sIHRoZW4gdGhlIGNvcnJlc3BvbmRpbmcgcHJlYyBiaXRzIHNob3VsZCBiZSBzZXQKLSAqIGluIHByZWNfbWFwLiBPZiBjb3Vyc2UsIGlnbm9yZSB0aGlzIHJ1bGUgd2hlbiBibG9ja19kYXRhZmlmbyBpcyBzZXQKLSAqLwotc3RhdGljIGJvb2wgd2xjX3R4X3ByZWNfbWFwX3ZlcmlmeShzdHJ1Y3Qgd2xjX2luZm8gKndsYykKLXsKLQkvKiBGb3Igbm9uLVdNRSwgYm90aCBmaWZvcyBoYXZlIG92ZXJsYXBwaW5nIHByZWNfbWFwLiBTbyBpdCdzIGFuIGVycm9yIG9ubHkgaWYgYm90aAotCSAqIGZhaWwgdGhlIGNoZWNrLgotCSAqLwotCWlmICghRURDRl9FTkFCKHdsYy0+cHViKSkgewotCQlpZiAoIShXTENfVFhfRklGT19DSEVDSyh3bGMsIFRYX0RBVEFfRklGTykgfHwKLQkJICAgICAgV0xDX1RYX0ZJRk9fQ0hFQ0sod2xjLCBUWF9DVExfRklGTykpKQotCQkJcmV0dXJuIGZhbHNlOwotCQllbHNlCi0JCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlyZXR1cm4gV0xDX1RYX0ZJRk9fQ0hFQ0sod2xjLCBUWF9BQ19CS19GSUZPKQotCQkmJiBXTENfVFhfRklGT19DSEVDSyh3bGMsIFRYX0FDX0JFX0ZJRk8pCi0JCSYmIFdMQ19UWF9GSUZPX0NIRUNLKHdsYywgVFhfQUNfVklfRklGTykKLQkJJiYgV0xDX1RYX0ZJRk9fQ0hFQ0sod2xjLCBUWF9BQ19WT19GSUZPKTsKLX0KLSNlbmRpZgkJCQkvKiBCQ01EQkcgKi8KLQogc3RhdGljIHZvaWQgd2xjX3dhdGNoZG9nX2J5X3RpbWVyKHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3Qgd2xjX2luZm8gKndsYyA9IChzdHJ1Y3Qgd2xjX2luZm8gKikgYXJnOwpAQCAtMjQ1MCwxMyArMjE5NiwxNCBAQAogCWludCBpOwogCXN0cnVjdCB3bGNfYnNzY2ZnICpjZmc7CiAKLQlXTF9UUkFDRSgid2wlZDogd2xjX3dhdGNoZG9nXG4iLCB3bGMtPnB1Yi0+dW5pdCk7CisJQkNNTVNHKHdsYy0+d2lwaHksICJ3bCVkXG4iLCB3bGMtPnB1Yi0+dW5pdCk7CiAKIAlpZiAoIXdsYy0+cHViLT51cCkKIAkJcmV0dXJuOwogCiAJaWYgKERFVklDRVJFTU9WRUQod2xjKSkgewotCQlXTF9FUlJPUigid2wlZDogJXM6IGRlYWQgY2hpcFxuIiwgd2xjLT5wdWItPnVuaXQsIF9fZnVuY19fKTsKKwkJd2lwaHlfZXJyKHdsYy0+d2lwaHksICJ3bCVkOiAlczogZGVhZCBjaGlwXG4iLCB3bGMtPnB1Yi0+dW5pdCwKKwkJCSAgX19mdW5jX18pOwogCQl3bF9kb3duKHdsYy0+d2wpOwogCQlyZXR1cm47CiAJfQpAQCAtMjQ4MCw5ICsyMjI3LDYgQEAKIAkvKiByYWRpbyBzeW5jOiBzdy9ody9tcGMgLS0+IHJhZGlvX2Rpc2FibGUvcmFkaW9fZW5hYmxlICovCiAJd2xjX3JhZGlvX2h3ZGlzYWJsZV91cGQod2xjKTsKIAl3bGNfcmFkaW9fdXBkKHdsYyk7Ci0JLyogaWYgaXNtcGMsIGRyaXZlciBzaG91bGQgYmUgaW4gZG93biBzdGF0ZSBpZiB1cC9kb3duIGlzIGFsbG93ZWQgKi8KLQlpZiAod2xjLT5tcGMgJiYgd2xjX2lzbXBjKHdsYykpCi0JCUFTU0VSVCghd2xjLT5wdWItPnVwKTsKIAkvKiBpZiByYWRpbyBpcyBkaXNhYmxlLCBkcml2ZXIgbWF5IGJlIGRvd24sIHF1aXQgaGVyZSAqLwogCWlmICh3bGMtPnB1Yi0+cmFkaW9fZGlzYWJsZWQpCiAJCXJldHVybjsKQEAgLTI1MTUsMjMgKzIyNTksMTYgQEAKIAkJd2xjLT50ZW1wc2Vuc2VfbGFzdHRpbWUgPSB3bGMtPnB1Yi0+bm93OwogCQl3bGNfdGVtcHNlbnNlX3VwZCh3bGMpOwogCX0KLQkvKiBCTUFDX05PVEU6IGZvciBISUdIX09OTFkgZHJpdmVyLCB0aGlzIHNlZW1zIGJlaW5nIGNhbGxlZCBhZnRlciBSUEMgYnVzIGZhaWxlZCAqLwotCUFTU0VSVCh3bGNfYm1hY190YWNsZWFyKHdsYy0+aHcsIHRydWUpKTsKLQotCS8qIFZlcmlmeSB0aGF0IHR4X3ByZWNfbWFwIGFuZCBmaWZvcyBhcmUgaW4gc3luYyB0byBhdm9pZCBsb2NrIHVwcyAqLwotCUFTU0VSVCh3bGNfdHhfcHJlY19tYXBfdmVyaWZ5KHdsYykpOwotCi0JQVNTRVJUKHdsY19wc19jaGVjayh3bGMpKTsKIH0KIAogLyogbWFrZSBpbnRlcmZhY2Ugb3BlcmF0aW9uYWwgKi8KIGludCB3bGNfdXAoc3RydWN0IHdsY19pbmZvICp3bGMpCiB7Ci0JV0xfVFJBQ0UoIndsJWQ6ICVzOlxuIiwgd2xjLT5wdWItPnVuaXQsIF9fZnVuY19fKTsKKwlCQ01NU0cod2xjLT53aXBoeSwgIndsJWRcbiIsIHdsYy0+cHViLT51bml0KTsKIAogCS8qIEhXIGlzIHR1cm5lZCBvZmYgc28gZG9uJ3QgdHJ5IHRvIGFjY2VzcyBpdCAqLwogCWlmICh3bGMtPnB1Yi0+aHdfb2ZmIHx8IERFVklDRVJFTU9WRUQod2xjKSkKLQkJcmV0dXJuIEJDTUVfUkFESU9PRkY7CisJCXJldHVybiAtRU5PTUVESVVNOwogCiAJaWYgKCF3bGMtPnB1Yi0+aHdfdXApIHsKIAkJd2xjX2JtYWNfaHdfdXAod2xjLT5odyk7CkBAIC0yNTU2LDExICsyMjkzLDExIEBACiAJICogaWYgcmFkaW8gaXMgZGlzYWJsZWQsIGFib3J0IHVwLCBsb3dlciBwb3dlciwgc3RhcnQgcmFkaW8gdGltZXIgYW5kIHJldHVybiAwKGZvciBORElTKQogCSAqIGRvbid0IGNhbGwgcmFkaW9fdXBkYXRlIHRvIGF2b2lkIGxvb3Bpbmcgd2xjX3VwLgogCSAqCi0JICogd2xjX2JtYWNfdXBfcHJlcCgpIHJldHVybnMgZWl0aGVyIDAgb3IgQkNNRV9SQURJT09GRiBvbmx5CisJICogd2xjX2JtYWNfdXBfcHJlcCgpIHJldHVybnMgZWl0aGVyIDAgb3IgLUJDTUVfUkFESU9PRkYgb25seQogCSAqLwogCWlmICghd2xjLT5wdWItPnJhZGlvX2Rpc2FibGVkKSB7CiAJCWludCBzdGF0dXMgPSB3bGNfYm1hY191cF9wcmVwKHdsYy0+aHcpOwotCQlpZiAoc3RhdHVzID09IEJDTUVfUkFESU9PRkYpIHsKKwkJaWYgKHN0YXR1cyA9PSAtRU5PTUVESVVNKSB7CiAJCQlpZiAoIW1ib29saXNzZXQKIAkJCSAgICAod2xjLT5wdWItPnJhZGlvX2Rpc2FibGVkLCBXTF9SQURJT19IV19ESVNBQkxFKSkgewogCQkJCWludCBpZHg7CkBAIC0yNTcyLDEyICsyMzA5LDEzIEBACiAJCQkJCWlmICghQlNTQ0ZHX1NUQShic3NjZmcpCiAJCQkJCSAgICB8fCAhYnNzY2ZnLT5lbmFibGUgfHwgIWJzc2NmZy0+QlNTKQogCQkJCQkJY29udGludWU7Ci0JCQkJCVdMX0VSUk9SKCJ3bCVkLiVkOiB3bGNfdXA6IHJmZGlzYWJsZSAtPiAiICJ3bGNfYnNzY2ZnX2Rpc2FibGUoKVxuIiwKLQkJCQkJCSB3bGMtPnB1Yi0+dW5pdCwgaWR4KTsKKwkJCQkJd2lwaHlfZXJyKHdsYy0+d2lwaHksICJ3bCVkLiVkOiB3bGNfdXAiCisJCQkJCQkgICI6IHJmZGlzYWJsZSAtPiAiCisJCQkJCQkgICJ3bGNfYnNzY2ZnX2Rpc2FibGUoKVxuIiwKKwkJCQkJCSAgIHdsYy0+cHViLT51bml0LCBpZHgpOwogCQkJCX0KIAkJCX0KLQkJfSBlbHNlCi0JCQlBU1NFUlQoIXN0YXR1cyk7CisJCX0KIAl9CiAKIAlpZiAod2xjLT5wdWItPnJhZGlvX2Rpc2FibGVkKSB7CkBAIC0yNjIxLDcgKzIzNTksNiBAQAogCXdsY193bWVfcmV0cmllc193cml0ZSh3bGMpOwogCiAJLyogc3RhcnQgb25lIHNlY29uZCB3YXRjaGRvZyB0aW1lciAqLwotCUFTU0VSVCghd2xjLT5XRGFybWVkKTsKIAl3bF9hZGRfdGltZXIod2xjLT53bCwgd2xjLT53ZHRpbWVyLCBUSU1FUl9JTlRFUlZBTF9XQVRDSERPRywgdHJ1ZSk7CiAJd2xjLT5XRGFybWVkID0gdHJ1ZTsKIApAQCAtMjY3MywxMiArMjQxMCwxMiBAQAogCWJvb2wgZGV2X2dvbmUgPSBmYWxzZTsKIAlzdHJ1Y3Qgd2xjX3R4cV9pbmZvICpxaTsKIAotCVdMX1RSQUNFKCJ3bCVkOiAlczpcbiIsIHdsYy0+cHViLT51bml0LCBfX2Z1bmNfXyk7CisJQkNNTVNHKHdsYy0+d2lwaHksICJ3bCVkXG4iLCB3bGMtPnB1Yi0+dW5pdCk7CiAKIAkvKiBjaGVjayBpZiB3ZSBhcmUgYWxyZWFkeSBpbiB0aGUgZ29pbmcgZG93biBwYXRoICovCiAJaWYgKHdsYy0+Z29pbmdfZG93bikgewotCQlXTF9FUlJPUigid2wlZDogJXM6IERyaXZlciBnb2luZyBkb3duIHNvIHJldHVyblxuIiwKLQkJCSB3bGMtPnB1Yi0+dW5pdCwgX19mdW5jX18pOworCQl3aXBoeV9lcnIod2xjLT53aXBoeSwgIndsJWQ6ICVzOiBEcml2ZXIgZ29pbmcgZG93biBzbyByZXR1cm4iCisJCQkgICJcbiIsIHdsYy0+cHViLT51bml0LCBfX2Z1bmNfXyk7CiAJCXJldHVybiAwOwogCX0KIAlpZiAoIXdsYy0+cHViLT51cCkKQEAgLTI3MDcsOSArMjQ0NCw2IEBACiAJLyogY2FuY2VsIGFsbCBvdGhlciB0aW1lcnMgKi8KIAljYWxsYmFja3MgKz0gd2xjX2Rvd25fZGVsX3RpbWVyKHdsYyk7CiAKLQkvKiBpbnRlcnJ1cHQgbXVzdCBoYXZlIGJlZW4gYmxvY2tlZCAqLwotCUFTU0VSVCgod2xjLT5tYWNpbnRtYXNrID09IDApIHx8ICF3bGMtPnB1Yi0+dXApOwotCiAJd2xjLT5wdWItPnVwID0gZmFsc2U7CiAKIAl3bGNfcGh5X211dGVfdXBkKHdsYy0+YmFuZC0+cGksIGZhbHNlLCBQSFlfTVVURV9BTEwpOwpAQCAtMjcxOSw4ICsyNDUzLDcgQEAKIAogCS8qIGZsdXNoIHR4IHF1ZXVlcyAqLwogCWZvciAocWkgPSB3bGMtPnR4X3F1ZXVlczsgcWkgIT0gTlVMTDsgcWkgPSBxaS0+bmV4dCkgewotCQlwa3RxX2ZsdXNoKCZxaS0+cSwgdHJ1ZSwgTlVMTCwgMCk7Ci0JCUFTU0VSVChwa3RxX2VtcHR5KCZxaS0+cSkpOworCQliY21fcGt0cV9mbHVzaCgmcWktPnEsIHRydWUsIE5VTEwsIE5VTEwpOwogCX0KIAogCWNhbGxiYWNrcyArPSB3bGNfYm1hY19kb3duX2ZpbmlzaCh3bGMtPmh3KTsKQEAgLTI3MjgsMTMgKzI0NjEsNiBAQAogCS8qIHdsY19ibWFjX2Rvd25fZmluaXNoIGhhcyBkb25lIHdsY19jb3JlZGlzYWJsZSgpLiBzbyBjbGsgaXMgb2ZmICovCiAJd2xjLT5jbGsgPSBmYWxzZTsKIAotI2lmZGVmIEJDTURCRwotCS8qIFNpbmNlIGFsbCB0aGUgcGFja2V0cyBzaG91bGQgaGF2ZSBiZWVuIGZyZWVkLAotCSAqIGFsbCBjYWxsYmFja3Mgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQKLQkgKi8KLQlmb3IgKGkgPSAxOyBpIDw9IHdsYy0+cHViLT50dW5hYmxlcy0+bWF4cGt0Y2I7IGkrKykKLQkJQVNTRVJUKHdsYy0+cGt0X2NhbGxiYWNrW2ldLmZuID09IE5VTEwpOwotI2VuZGlmCiAJd2xjLT5nb2luZ19kb3duID0gZmFsc2U7CiAJcmV0dXJuIGNhbGxiYWNrczsKIH0KQEAgLTI3NjEsNyArMjQ4Nyw3IEBACiAJICogR21vZGUgaXMgbm90IEdNT0RFX0xFR0FDWV9CCiAJICovCiAJaWYgKE5fRU5BQih3bGMtPnB1YikgJiYgZ21vZGUgPT0gR01PREVfTEVHQUNZX0IpCi0JCXJldHVybiBCQ01FX1VOU1VQUE9SVEVEOworCQlyZXR1cm4gLUVOT1RTVVBQOwogCiAJLyogdmVyaWZ5IHRoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aCAyRyBiYW5kIGFuZCBncmFiIHRoZSBiYW5kIHBvaW50ZXIgKi8KIAlpZiAod2xjLT5iYW5kLT5iYW5kdHlwZSA9PSBXTENfQkFORF8yRykKQEAgLTI3NzAsMTIgKzI0OTYsMTIgQEAKIAkJICh3bGMtPmJhbmRzdGF0ZVtPVEhFUkJBTkRVTklUKHdsYyldLT5iYW5kdHlwZSA9PSBXTENfQkFORF8yRykpCiAJCWJhbmQgPSB3bGMtPmJhbmRzdGF0ZVtPVEhFUkJBTkRVTklUKHdsYyldOwogCWVsc2UKLQkJcmV0dXJuIEJDTUVfQkFEQkFORDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBMZWdhY3kgb3IgYnVzdCB3aGVuIG5vIE9GRE0gaXMgc3VwcG9ydGVkIGJ5IHJlZ3VsYXRvcnkgKi8KIAlpZiAoKHdsY19jaGFubmVsX2xvY2FsZV9mbGFnc19pbl9iYW5kKHdsYy0+Y21pLCBiYW5kLT5iYW5kdW5pdCkgJgogCSAgICAgV0xDX05PX09GRE0pICYmIChnbW9kZSAhPSBHTU9ERV9MRUdBQ1lfQikpCi0JCXJldHVybiBCQ01FX1JBTkdFOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIHVwZGF0ZSBjb25maWd1cmF0aW9uIHZhbHVlICovCiAJaWYgKGNvbmZpZyA9PSB0cnVlKQpAQCAtMjgyMyw5ICsyNTQ5LDkgQEAKIAogCWRlZmF1bHQ6CiAJCS8qIEVycm9yICovCi0JCVdMX0VSUk9SKCJ3bCVkOiAlczogaW52YWxpZCBnbW9kZSAlZFxuIiwKLQkJCSB3bGMtPnB1Yi0+dW5pdCwgX19mdW5jX18sIGdtb2RlKTsKLQkJcmV0dXJuIEJDTUVfVU5TVVBQT1JURUQ7CisJCXdpcGh5X2Vycih3bGMtPndpcGh5LCAid2wlZDogJXM6IGludmFsaWQgZ21vZGUgJWRcbiIsCisJCQkgIHdsYy0+cHViLT51bml0LCBfX2Z1bmNfXywgZ21vZGUpOworCQlyZXR1cm4gLUVOT1RTVVBQOwogCX0KIAogCS8qCkBAIC0yOTA0LDExICsyNjMwLDExIEBACiAJY2FzZSBXTF8xMU5fMngyOgogCWNhc2UgV0xfMTFOXzN4MzoKIAkJaWYgKCEoV0xDX1BIWV8xMU5fQ0FQKHdsYy0+YmFuZCkpKQotCQkJZXJyID0gQkNNRV9CQURCQU5EOworCQkJZXJyID0gLUVJTlZBTDsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQllcnIgPSBCQ01FX1JBTkdFOworCQllcnIgPSAtRUlOVkFMOwogCQlicmVhazsKIAl9CiAKQEAgLTI5MjEsNyArMjY0Nyw2IEBACiAJaW50IGVycjsKIAogCWVyciA9IHdsY19ubW9kZV92YWxpZGF0ZSh3bGMsIG5tb2RlKTsKLQlBU1NFUlQoZXJyID09IDApOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTI5NTAsNyArMjY3NSw2IEBACiAJCQlubW9kZSA9IFdMXzExTl8yeDI7CiAJY2FzZSBXTF8xMU5fMngyOgogCWNhc2UgV0xfMTFOXzN4MzoKLQkJQVNTRVJUKFdMQ19QSFlfMTFOX0NBUCh3bGMtPmJhbmQpKTsKIAkJLyogZm9yY2UgR01PREVfQVVUTyBpZiBOTU9ERSBpcyBPTiAqLwogCQl3bGNfc2V0X2dtb2RlKHdsYywgR01PREVfQVVUTywgdHJ1ZSk7CiAJCWlmIChubW9kZSA9PSBXTF8xMU5fM3gzKQpAQCAtMjk2Nyw3ICsyNjkxLDYgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlBU1NFUlQoMCk7CiAJCWJyZWFrOwogCX0KIApAQCAtMjk4Myw3ICsyNzA2LDcgQEAKIAogCS8qIGNoZWNrIGZvciBiYWQgY291bnQgdmFsdWUgKi8KIAlpZiAoKHJzLmNvdW50ID09IDApIHx8IChycy5jb3VudCA+IFdMQ19OVU1SQVRFUykpCi0JCXJldHVybiBCQ01FX0JBRFJBVEVTRVQ7CisJCXJldHVybiAtRUlOVkFMOwogCiAJLyogdHJ5IHRoZSBjdXJyZW50IGJhbmQgKi8KIAliYW5kdW5pdCA9IHdsYy0+YmFuZC0+YmFuZHVuaXQ7CkBAIC0zMDA1LDcgKzI3MjgsNyBAQAogCQkJZ290byBnb29kOwogCX0KIAotCXJldHVybiBCQ01FX0VSUk9SOworCXJldHVybiAtRUJBREU7CiAKICBnb29kOgogCS8qIGFwcGx5IG5ldyByYXRlc2V0ICovCkBAIC0zMDY3LDggKzI3OTAsOCBAQAogCXdsY19ic3NfaW5mb190ICpjdXJyZW50X2JzczsKIAogCS8qIHVwZGF0ZSBic3NjZmcgcG9pbnRlciAqLwotCWJzc2NmZyA9IE5VTEw7CQkvKiBYWFg6IEhhY2sgYnNzY2ZnIHRvIGJlIHNpemUgb25lIGFuZCB1c2UgdGhpcyBnbG9iYWxseSAqLwotCWN1cnJlbnRfYnNzID0gTlVMTDsKKwlic3NjZmcgPSB3bGMtPmNmZzsKKwljdXJyZW50X2JzcyA9IGJzc2NmZy0+Y3VycmVudF9ic3M7CiAKIAkvKiBpbml0aWFsaXplIHRoZSBmb2xsb3dpbmcgdG8gZ2V0IHJpZCBvZiBjb21waWxlciB3YXJuaW5nICovCiAJbmV4dHNjYiA9IE5VTEw7CkBAIC0zMDc4LDEzICsyODAxLDEyIEBACiAKIAkvKiBJZiB0aGUgZGV2aWNlIGlzIHR1cm5lZCBvZmYsIHRoZW4gaXQncyBub3QgInJlbW92ZWQiICovCiAJaWYgKCF3bGMtPnB1Yi0+aHdfb2ZmICYmIERFVklDRVJFTU9WRUQod2xjKSkgewotCQlXTF9FUlJPUigid2wlZDogJXM6IGRlYWQgY2hpcFxuIiwgd2xjLT5wdWItPnVuaXQsIF9fZnVuY19fKTsKKwkJd2lwaHlfZXJyKHdsYy0+d2lwaHksICJ3bCVkOiAlczogZGVhZCBjaGlwXG4iLCB3bGMtPnB1Yi0+dW5pdCwKKwkJCSAgX19mdW5jX18pOwogCQl3bF9kb3duKHdsYy0+d2wpOwotCQlyZXR1cm4gQkNNRV9FUlJPUjsKKwkJcmV0dXJuIC1FQkFERTsKIAl9CiAKLQlBU1NFUlQoISh3bGMtPnB1Yi0+aHdfb2ZmICYmIHdsYy0+cHViLT51cCkpOwotCiAJLyogZGVmYXVsdCBhcmd1bWVudCBpcyBnZW5lcmljIGludGVnZXIgKi8KIAlwdmFsID0gYXJnID8gKGludCAqKWFyZzpOVUxMOwogCkBAIC0zMDk2LDExICsyODE4LDYgQEAKIAogCS8qIGJvb2wgY29udmVyc2lvbiB0byBhdm9pZCBkdXBsaWNhdGlvbiBiZWxvdyAqLwogCWJvb2xfdmFsID0gdmFsICE9IDA7Ci0KLQlpZiAoY21kICE9IFdMQ19TRVRfQ0hBTk5FTCkKLQkJV0xfTk9ORSgiV0xDX0lPQ1RMOiBjbWQgJWQgdmFsIDB4JXggKCVkKSBsZW4gJWRcbiIsCi0JCQljbWQsICh1aW50KXZhbCwgdmFsLCBsZW4pOwotCiAJYmNtZXJyb3IgPSAwOwogCXJlZ3MgPSB3bGMtPnJlZ3M7CiAKQEAgLTMxMTgsOSArMjgzNSwxMCBAQAogCiAJZGVmYXVsdDoKIAkJaWYgKChhcmcgPT0gTlVMTCkgfHwgKGxlbiA8PSAwKSkgewotCQkJV0xfRVJST1IoIndsJWQ6ICVzOiBDb21tYW5kICVkIG5lZWRzIGFyZ3VtZW50c1xuIiwKLQkJCQkgd2xjLT5wdWItPnVuaXQsIF9fZnVuY19fLCBjbWQpOwotCQkJYmNtZXJyb3IgPSBCQ01FX0JBREFSRzsKKwkJCXdpcGh5X2Vycih3bGMtPndpcGh5LCAid2wlZDogJXM6IENvbW1hbmQgJWQgbmVlZHMgIgorCQkJCSAgImFyZ3VtZW50c1xuIiwKKwkJCQkgIHdsYy0+cHViLT51bml0LCBfX2Z1bmNfXywgY21kKTsKKwkJCWJjbWVycm9yID0gLUVJTlZBTDsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCX0KQEAgLTMxNDQsNyArMjg2MiwxMCBAQAogCWNhc2UgV0xDX0dFVF9DSEFOTkVMOnsKIAkJCWNoYW5uZWxfaW5mb190ICpjaSA9IChjaGFubmVsX2luZm9fdCAqKSBhcmc7CiAKLQkJCUFTU0VSVChsZW4gPiAoaW50KXNpemVvZihjaSkpOworCQkJaWYgKGxlbiA8PSAoaW50KXNpemVvZihjaSkpIHsKKwkJCQliY21lcnJvciA9IEVPVkVSRkxPVzsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CiAKIAkJCWNpLT5od19jaGFubmVsID0KIAkJCSAgICBDSFNQRUNfQ0hBTk5FTChXTENfQkFORF9QSV9SQURJT19DSEFOU1BFQyk7CkBAIC0zMTU5LDEyICsyODgwLDEyIEBACiAJCQljaGFuc3BlY190IGNoc3BlYyA9IENIMjBNSFpfQ0hTUEVDKHZhbCk7CiAKIAkJCWlmICh2YWwgPCAwIHx8IHZhbCA+IE1BWENIQU5ORUwpIHsKLQkJCQliY21lcnJvciA9IEJDTUVfT1VUT0ZSQU5HRUNIQU47CisJCQkJYmNtZXJyb3IgPSAtRUlOVkFMOwogCQkJCWJyZWFrOwogCQkJfQogCiAJCQlpZiAoIXdsY192YWxpZF9jaGFuc3BlY19kYih3bGMtPmNtaSwgY2hzcGVjKSkgewotCQkJCWJjbWVycm9yID0gQkNNRV9CQURDSEFOOworCQkJCWJjbWVycm9yID0gLUVJTlZBTDsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtMzE5MSw3ICsyOTEyLDcgQEAKICNpZiBkZWZpbmVkKEJDTURCRykKIAljYXNlIFdMQ19HRVRfVUNGTEFHUzoKIAkJaWYgKCF3bGMtPnB1Yi0+dXApIHsKLQkJCWJjbWVycm9yID0gQkNNRV9OT1RVUDsKKwkJCWJjbWVycm9yID0gLUVOT0xJTks7CiAJCQlicmVhazsKIAkJfQogCkBAIC0zMjA2LDcgKzI5MjcsNyBAQAogCQkJYnJlYWs7CiAKIAkJaWYgKHZhbCA+PSBNSEZNQVgpIHsKLQkJCWJjbWVycm9yID0gQkNNRV9SQU5HRTsKKwkJCWJjbWVycm9yID0gLUVJTlZBTDsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTMyMTUsNyArMjkzNiw3IEBACiAKIAljYXNlIFdMQ19TRVRfVUNGTEFHUzoKIAkJaWYgKCF3bGMtPnB1Yi0+dXApIHsKLQkJCWJjbWVycm9yID0gQkNNRV9OT1RVUDsKKwkJCWJjbWVycm9yID0gLUVOT0xJTks7CiAJCQlicmVhazsKIAkJfQogCkBAIC0zMjMxLDcgKzI5NTIsNyBAQAogCiAJCWkgPSAodTE2KSB2YWw7CiAJCWlmIChpID49IE1IRk1BWCkgewotCQkJYmNtZXJyb3IgPSBCQ01FX1JBTkdFOworCQkJYmNtZXJyb3IgPSAtRUlOVkFMOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMzI1Myw3ICsyOTc0LDcgQEAKIAkJCWJyZWFrOwogCiAJCWlmICh2YWwgJiAxKSB7Ci0JCQliY21lcnJvciA9IEJDTUVfQkFEQUREUjsKKwkJCWJjbWVycm9yID0gLUVJTlZBTDsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTMyNzQsNyArMjk5NSw3IEBACiAJCQlicmVhazsKIAogCQlpZiAodmFsICYgMSkgewotCQkJYmNtZXJyb3IgPSBCQ01FX0JBREFERFI7CisJCQliY21lcnJvciA9IC1FSU5WQUw7CiAJCQlicmVhazsKIAkJfQogCkBAIC0zMjg4LDcgKzMwMDksNyBAQAogCQliYW5kID0gV0xDX0JBTkRfQVVUTzsKIAogCQlpZiAobGVuIDwgKGludCkoc2l6ZW9mKHJ3X3JlZ190KSAtIHNpemVvZih1aW50KSkpIHsKLQkJCWJjbWVycm9yID0gQkNNRV9CVUZUT09TSE9SVDsKKwkJCWJjbWVycm9yID0gLUVPVkVSRkxPVzsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTMzMDEsNyArMzAyMiw3IEBACiAJCQlicmVhazsKIAogCQlpZiAoKHItPmJ5dGVvZmYgKyByLT5zaXplKSA+IHNpemVvZihkMTFyZWdzX3QpKSB7Ci0JCQliY21lcnJvciA9IEJDTUVfQkFEQUREUjsKKwkJCWJjbWVycm9yID0gLUVJTlZBTDsKIAkJCWJyZWFrOwogCQl9CiAJCWlmIChyLT5zaXplID09IHNpemVvZih1MzIpKQpAQCAtMzMxMyw3ICszMDM0LDcgQEAKIAkJCSAgICBSX1JFRygodTE2ICopKCh1bnNpZ25lZCBjaGFyICopKHVuc2lnbmVkIGxvbmcpcmVncyArCiAJCQkJCSAgICAgIHItPmJ5dGVvZmYpKTsKIAkJZWxzZQotCQkJYmNtZXJyb3IgPSBCQ01FX0JBREFERFI7CisJCQliY21lcnJvciA9IC1FSU5WQUw7CiAJCWJyZWFrOwogCiAJY2FzZSBXTENfV19SRUc6CkBAIC0zMzIyLDcgKzMwNDMsNyBAQAogCQliYW5kID0gV0xDX0JBTkRfQVVUTzsKIAogCQlpZiAobGVuIDwgKGludCkoc2l6ZW9mKHJ3X3JlZ190KSAtIHNpemVvZih1aW50KSkpIHsKLQkJCWJjbWVycm9yID0gQkNNRV9CVUZUT09TSE9SVDsKKwkJCWJjbWVycm9yID0gLUVPVkVSRkxPVzsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTMzMzUsNyArMzA1Niw3IEBACiAJCQlicmVhazsKIAogCQlpZiAoci0+Ynl0ZW9mZiArIHItPnNpemUgPiBzaXplb2YoZDExcmVnc190KSkgewotCQkJYmNtZXJyb3IgPSBCQ01FX0JBREFERFI7CisJCQliY21lcnJvciA9IC1FSU5WQUw7CiAJCQlicmVhazsKIAkJfQogCQlpZiAoci0+c2l6ZSA9PSBzaXplb2YodTMyKSkKQEAgLTMzNDUsNyArMzA2Niw3IEBACiAJCQlXX1JFRygodTE2ICopKCh1bnNpZ25lZCBjaGFyICopKHVuc2lnbmVkIGxvbmcpIHJlZ3MgKwogCQkJCQkgIHItPmJ5dGVvZmYpLCByLT52YWwpOwogCQllbHNlCi0JCQliY21lcnJvciA9IEJDTUVfQkFEQUREUjsKKwkJCWJjbWVycm9yID0gLUVJTlZBTDsKIAkJYnJlYWs7CiAjZW5kaWYJCQkJLyogQkNNREJHICovCiAKQEAgLTMzOTMsNyArMzExNCw3IEBACiAJY2FzZSBXTENfU0VUX0FOVERJVjoKIAkJLyogdmFsdWVzIGFyZSAtMT1kcml2ZXIgZGVmYXVsdCwgMD1mb3JjZTAsIDE9Zm9yY2UxLCAyPXN0YXJ0MSwgMz1zdGFydDAgKi8KIAkJaWYgKCh2YWwgPCAtMSkgfHwgKHZhbCA+IDMpKSB7Ci0JCQliY21lcnJvciA9IEJDTUVfUkFOR0U7CisJCQliY21lcnJvciA9IC1FSU5WQUw7CiAJCQlicmVhazsKIAkJfQogCkBAIC0zNDA4LDEzICszMTI5LDEzIEBACiAJCQl1MTYgcnhzdGF0dXM7CiAKIAkJCWlmICghd2xjLT5wdWItPnVwKSB7Ci0JCQkJYmNtZXJyb3IgPSBCQ01FX05PVFVQOworCQkJCWJjbWVycm9yID0gLUVOT0xJTks7CiAJCQkJYnJlYWs7CiAJCQl9CiAKIAkJCXJ4c3RhdHVzID0gUl9SRUcoJndsYy0+cmVncy0+cGh5cnhzdGF0dXMwKTsKIAkJCWlmIChyeHN0YXR1cyA9PSAweGRlYWQgfHwgcnhzdGF0dXMgPT0gKHUxNikgLTEpIHsKLQkJCQliY21lcnJvciA9IEJDTUVfRVJST1I7CisJCQkJYmNtZXJyb3IgPSAtRUJBREU7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQkqcHZhbCA9IChyeHN0YXR1cyAmIFBSWFMwX1JYQU5UX1VQU1VCQkFORCkgPyAxIDogMDsKQEAgLTM0MjQsNyArMzE0NSw3IEBACiAjaWYgZGVmaW5lZChCQ01EQkcpCiAJY2FzZSBXTENfR0VUX1VDQU5URElWOgogCQlpZiAoIXdsYy0+Y2xrKSB7Ci0JCQliY21lcnJvciA9IEJDTUVfTk9DTEs7CisJCQliY21lcnJvciA9IC1FSU87CiAJCQlicmVhazsKIAkJfQogCkBAIC0zNDM1LDEzICszMTU2LDEzIEBACiAKIAljYXNlIFdMQ19TRVRfVUNBTlRESVY6ewogCQkJaWYgKCF3bGMtPnB1Yi0+dXApIHsKLQkJCQliY21lcnJvciA9IEJDTUVfTk9UVVA7CisJCQkJYmNtZXJyb3IgPSAtRU5PTElOSzsKIAkJCQlicmVhazsKIAkJCX0KIAogCQkJLyogaWYgbXVsdGliYW5kLCBiYW5kIG11c3QgYmUgbG9ja2VkICovCiAJCQlpZiAoSVNfTUJBTkRfVU5MT0NLRUQod2xjKSkgewotCQkJCWJjbWVycm9yID0gQkNNRV9OT1RCQU5ETE9DS0VEOworCQkJCWJjbWVycm9yID0gLUVOT01FRElVTTsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtMzQ2Nyw3ICszMTg4LDcgQEAKIAkJCX0KIAkJCXdsY193bWVfcmV0cmllc193cml0ZSh3bGMpOwogCQl9IGVsc2UKLQkJCWJjbWVycm9yID0gQkNNRV9SQU5HRTsKKwkJCWJjbWVycm9yID0gLUVJTlZBTDsKIAkJYnJlYWs7CiAKIAljYXNlIFdMQ19HRVRfTFJMOgpAQCAtMzQ4Niw3ICszMjA3LDcgQEAKIAkJCX0KIAkJCXdsY193bWVfcmV0cmllc193cml0ZSh3bGMpOwogCQl9IGVsc2UKLQkJCWJjbWVycm9yID0gQkNNRV9SQU5HRTsKKwkJCWJjbWVycm9yID0gLUVJTlZBTDsKIAkJYnJlYWs7CiAKIAljYXNlIFdMQ19HRVRfQ1dNSU46CkBAIC0zNDk1LDE0ICszMjE2LDE0IEBACiAKIAljYXNlIFdMQ19TRVRfQ1dNSU46CiAJCWlmICghd2xjLT5jbGspIHsKLQkJCWJjbWVycm9yID0gQkNNRV9OT0NMSzsKKwkJCWJjbWVycm9yID0gLUVJTzsKIAkJCWJyZWFrOwogCQl9CiAKIAkJaWYgKHZhbCA+PSAxICYmIHZhbCA8PSAyNTUpIHsKIAkJCXdsY19zZXRfY3dtaW4od2xjLCAodTE2KSB2YWwpOwogCQl9IGVsc2UKLQkJCWJjbWVycm9yID0gQkNNRV9SQU5HRTsKKwkJCWJjbWVycm9yID0gLUVJTlZBTDsKIAkJYnJlYWs7CiAKIAljYXNlIFdMQ19HRVRfQ1dNQVg6CkBAIC0zNTExLDE0ICszMjMyLDE0IEBACiAKIAljYXNlIFdMQ19TRVRfQ1dNQVg6CiAJCWlmICghd2xjLT5jbGspIHsKLQkJCWJjbWVycm9yID0gQkNNRV9OT0NMSzsKKwkJCWJjbWVycm9yID0gLUVJTzsKIAkJCWJyZWFrOwogCQl9CiAKIAkJaWYgKHZhbCA+PSAyNTUgJiYgdmFsIDw9IDIwNDcpIHsKIAkJCXdsY19zZXRfY3dtYXgod2xjLCAodTE2KSB2YWwpOwogCQl9IGVsc2UKLQkJCWJjbWVycm9yID0gQkNNRV9SQU5HRTsKKwkJCWJjbWVycm9yID0gLUVJTlZBTDsKIAkJYnJlYWs7CiAKIAljYXNlIFdMQ19HRVRfUkFESU86CS8qIHVzZSBtYXNrIGlmIGRvbid0IHdhbnQgdG8gZXhwb3NlIHNvbWUgaW50ZXJuYWwgYml0cyAqLwpAQCAtMzUzOSw5ICszMjYwLDkgQEAKIAkJCWlmICgocmFkaW9tYXNrID09IDApIHx8IChyYWRpb21hc2sgJiB+dmFsaWRiaXRzKQogCQkJICAgIHx8IChyYWRpb3ZhbCAmIH52YWxpZGJpdHMpCiAJCQkgICAgfHwgKChyYWRpb3ZhbCAmIH5yYWRpb21hc2spICE9IDApKSB7Ci0JCQkJV0xfRVJST1IoIlNFVF9SQURJTyB3aXRoIHdyb25nIGJpdHMgMHgleFxuIiwKLQkJCQkJIHZhbCk7Ci0JCQkJYmNtZXJyb3IgPSBCQ01FX1JBTkdFOworCQkJCXdpcGh5X2Vycih3bGMtPndpcGh5LCAiU0VUX1JBRElPIHdpdGggd3JvbmcgIgorCQkJCQkgICJiaXRzIDB4JXhcbiIsIHZhbCk7CisJCQkJYmNtZXJyb3IgPSAtRUlOVkFMOwogCQkJCWJyZWFrOwogCQkJfQogCkBAIC0zNTY2LDcgKzMyODcsNyBAQAogCQkJd3NlY19rZXlfdCAqc3JjX2tleSA9IHdsYy0+d3NlY19rZXlzW3ZhbF07CiAKIAkJCWlmIChsZW4gPCAoaW50KXNpemVvZihrZXkpKSB7Ci0JCQkJYmNtZXJyb3IgPSBCQ01FX0JVRlRPT1NIT1JUOworCQkJCWJjbWVycm9yID0gLUVPVkVSRkxPVzsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtMzU4Niw3ICszMzA3LDcgQEAKIAogCQkJbWVtY3B5KGFyZywgJmtleSwgc2l6ZW9mKGtleSkpOwogCQl9IGVsc2UKLQkJCWJjbWVycm9yID0gQkNNRV9CQURLRVlJRFg7CisJCQliY21lcnJvciA9IC1FSU5WQUw7CiAJCWJyZWFrOwogI2VuZGlmCQkJCS8qIGRlZmluZWQoQkNNREJHKSAqLwogCkBAIC0zNjAwLDcgKzMzMjEsNyBAQAogCQkJd3NlY19rZXlfdCAqa2V5OwogCiAJCQlpZiAobGVuIDwgRE9UMTFfV1BBX0tFWV9SU0NfTEVOKSB7Ci0JCQkJYmNtZXJyb3IgPSBCQ01FX0JVRlRPT1NIT1JUOworCQkJCWJjbWVycm9yID0gLUVPVkVSRkxPVzsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtMzYzNyw3ICszMzU4LDcgQEAKIAogCQkJCW1lbWNweShhcmcsIHNlcSwgc2l6ZW9mKHNlcSkpOwogCQkJfSBlbHNlIHsKLQkJCQliY21lcnJvciA9IEJDTUVfQkFES0VZSURYOworCQkJCWJjbWVycm9yID0gLUVJTlZBTDsKIAkJCX0KIAkJCWJyZWFrOwogCQl9CkBAIC0zNjQ2LDEzICszMzY3LDEzIEBACiAJCQl3bF9yYXRlc2V0X3QgKnJldF9ycyA9ICh3bF9yYXRlc2V0X3QgKikgYXJnOwogCQkJd2xjX3JhdGVzZXRfdCAqcnM7CiAKLQkJCWlmIChic3NjZmctPmFzc29jaWF0ZWQpCisJCQlpZiAod2xjLT5wdWItPmFzc29jaWF0ZWQpCiAJCQkJcnMgPSAmY3VycmVudF9ic3MtPnJhdGVzZXQ7CiAJCQllbHNlCiAJCQkJcnMgPSAmd2xjLT5kZWZhdWx0X2Jzcy0+cmF0ZXNldDsKIAogCQkJaWYgKGxlbiA8IChpbnQpKHJzLT5jb3VudCArIHNpemVvZihycy0+Y291bnQpKSkgewotCQkJCWJjbWVycm9yID0gQkNNRV9CVUZUT09TSE9SVDsKKwkJCQliY21lcnJvciA9IC1FT1ZFUkZMT1c7CiAJCQkJYnJlYWs7CiAJCQl9CiAKQEAgLTM2NzAsNyArMzM5MSw3IEBACiAJCQl3bGNfZGVmYXVsdF9yYXRlc2V0KHdsYywgKHdsY19yYXRlc2V0X3QgKikgJnJzKTsKIAogCQkJaWYgKGxlbiA8IChpbnQpKHJzLmNvdW50ICsgc2l6ZW9mKHJzLmNvdW50KSkpIHsKLQkJCQliY21lcnJvciA9IEJDTUVfQlVGVE9PU0hPUlQ7CisJCQkJYmNtZXJyb3IgPSAtRU9WRVJGTE9XOwogCQkJCWJyZWFrOwogCQkJfQogCkBAIC0zNjg1LDEyICszNDA2LDEyIEBACiAJCQl3bF9yYXRlc2V0X3QgKmluX3JzID0gKHdsX3JhdGVzZXRfdCAqKSBhcmc7CiAKIAkJCWlmIChsZW4gPCAoaW50KShpbl9ycy0+Y291bnQgKyBzaXplb2YoaW5fcnMtPmNvdW50KSkpIHsKLQkJCQliY21lcnJvciA9IEJDTUVfQlVGVE9PU0hPUlQ7CisJCQkJYmNtZXJyb3IgPSAtRU9WRVJGTE9XOwogCQkJCWJyZWFrOwogCQkJfQogCiAJCQlpZiAoaW5fcnMtPmNvdW50ID4gV0xDX05VTVJBVEVTKSB7Ci0JCQkJYmNtZXJyb3IgPSBCQ01FX0JVRlRPT0xPTkc7CisJCQkJYmNtZXJyb3IgPSAtRU5PQlVGUzsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtMzczMyw3ICszNDU0LDcgQEAKIAkJICAgICYmIHZhbCA8PSBET1QxMV9NQVhfQkVBQ09OX1BFUklPRCkgewogCQkJd2xjLT5kZWZhdWx0X2Jzcy0+YmVhY29uX3BlcmlvZCA9ICh1MTYpIHZhbDsKIAkJfSBlbHNlCi0JCQliY21lcnJvciA9IEJDTUVfUkFOR0U7CisJCQliY21lcnJvciA9IC1FSU5WQUw7CiAJCWJyZWFrOwogCiAJY2FzZSBXTENfR0VUX0RUSU1QUkQ6CkBAIC0zNzQ5LDcgKzM0NzAsNyBAQAogCQkgICAgJiYgdmFsIDw9IERPVDExX01BWF9EVElNX1BFUklPRCkgewogCQkJd2xjLT5kZWZhdWx0X2Jzcy0+ZHRpbV9wZXJpb2QgPSAodTgpIHZhbDsKIAkJfSBlbHNlCi0JCQliY21lcnJvciA9IEJDTUVfUkFOR0U7CisJCQliY21lcnJvciA9IC1FSU5WQUw7CiAJCWJyZWFrOwogCiAjaWZkZWYgU1VQUE9SVF9QUwpAQCAtMzc2NSw3ICszNDg2LDcgQEAKIAkJCS8qIENoYW5nZSB3YXRjaGRvZyBkcml2ZXIgdG8gYWxpZ24gd2F0Y2hkb2cgd2l0aCB0YnR0IGlmIHBvc3NpYmxlICovCiAJCQl3bGNfd2F0Y2hkb2dfdXBkKHdsYywgUFNfQUxMT1dFRCh3bGMpKTsKIAkJfSBlbHNlCi0JCQliY21lcnJvciA9IEJDTUVfRVJST1I7CisJCQliY21lcnJvciA9IC1FQkFERTsKIAkJYnJlYWs7CiAjZW5kaWYJCQkJLyogU1VQUE9SVF9QUyAqLwogCkBAIC0zNzczLDcgKzM0OTQsNyBAQAogI2lmZGVmIEJDTURCRwogCWNhc2UgV0xDX0dFVF9XQUtFOgogCQlpZiAoQVBfRU5BQih3bGMtPnB1YikpIHsKLQkJCWJjbWVycm9yID0gQkNNRV9OT1RTVEE7CisJCQliY21lcnJvciA9IC1CQ01FX05PVFNUQTsKIAkJCWJyZWFrOwogCQl9CiAJCSpwdmFsID0gd2xjLT53YWtlOwpAQCAtMzc4MSw3ICszNTAyLDcgQEAKIAogCWNhc2UgV0xDX1NFVF9XQUtFOgogCQlpZiAoQVBfRU5BQih3bGMtPnB1YikpIHsKLQkJCWJjbWVycm9yID0gQkNNRV9OT1RTVEE7CisJCQliY21lcnJvciA9IC1CQ01FX05PVFNUQTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTM4MTYsMjQgKzM1MzcsNiBAQAogCQl3bGMtPmRlZmF1bHRfYnNzLT5hdGltX3dpbmRvdyA9ICh1MzIpIHZhbDsKIAkJYnJlYWs7CiAKLQljYXNlIFdMQ19HRVRfUEtUQ05UUzp7Ci0JCQlnZXRfcGt0Y250X3QgKnBrdGNudCA9IChnZXRfcGt0Y250X3QgKikgcHZhbDsKLQkJCXdsY19zdGF0c3VwZCh3bGMpOwotCQkJcGt0Y250LT5yeF9nb29kX3BrdCA9IHdsYy0+cHViLT5fY250LT5yeGZyYW1lOwotCQkJcGt0Y250LT5yeF9iYWRfcGt0ID0gd2xjLT5wdWItPl9jbnQtPnJ4ZXJyb3I7Ci0JCQlwa3RjbnQtPnR4X2dvb2RfcGt0ID0KLQkJCSAgICB3bGMtPnB1Yi0+X2NudC0+dHhmcm1zbnQ7Ci0JCQlwa3RjbnQtPnR4X2JhZF9wa3QgPQotCQkJICAgIHdsYy0+cHViLT5fY250LT50eGVycm9yICsKLQkJCSAgICB3bGMtPnB1Yi0+X2NudC0+dHhmYWlsOwotCQkJaWYgKGxlbiA+PSAoaW50KXNpemVvZihnZXRfcGt0Y250X3QpKSB7Ci0JCQkJLyogQmUgYmFja3dhcmQgY29tcGF0aWJsZSAtIG9ubHkgaWYgYnVmZmVyIGlzIGxhcmdlIGVub3VnaCAgKi8KLQkJCQlwa3RjbnQtPnJ4X29jYXN0X2dvb2RfcGt0ID0KLQkJCQkgICAgd2xjLT5wdWItPl9jbnQtPnJ4bWZybW9jYXN0OwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQogI2lmZGVmIFNVUFBPUlRfSFdLRVkKIAljYXNlIFdMQ19HRVRfV1NFQzoKIAkJYmNtZXJyb3IgPQpAQCAtMzg3Niw3ICszNTc5LDcgQEAKIAkJewogCQkJdW5zaWduZWQgY2hhciAqY3AgPSBhcmc7CiAJCQlpZiAobGVuIDwgMykgewotCQkJCWJjbWVycm9yID0gQkNNRV9CVUZUT09TSE9SVDsKKwkJCQliY21lcnJvciA9IC1FT1ZFUkZMT1c7CiAJCQkJYnJlYWs7CiAJCQl9CiAKQEAgLTM5MDIsNyArMzYwNSw3IEBACiAJY2FzZSBXTENfU0VUX1NIT1JUU0xPVF9PVkVSUklERToKIAkJaWYgKCh2YWwgIT0gV0xDX1NIT1JUU0xPVF9BVVRPKSAmJgogCQkgICAgKHZhbCAhPSBXTENfU0hPUlRTTE9UX09GRikgJiYgKHZhbCAhPSBXTENfU0hPUlRTTE9UX09OKSkgewotCQkJYmNtZXJyb3IgPSBCQ01FX1JBTkdFOworCQkJYmNtZXJyb3IgPSAtRUlOVkFMOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMzk1OSw3ICszNjYyLDcgQEAKIAkJaWYgKCF3bGMtPnB1Yi0+YXNzb2NpYXRlZCkKIAkJCWJjbWVycm9yID0gd2xjX3NldF9nbW9kZSh3bGMsICh1OCkgdmFsLCB0cnVlKTsKIAkJZWxzZSB7Ci0JCQliY21lcnJvciA9IEJDTUVfQVNTT0NJQVRFRDsKKwkJCWJjbWVycm9yID0gLUVJU0NPTk47CiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKQEAgLTM5NzYsNyArMzY3OSw3IEBACiAJCWlmICgodmFsICE9IFdMQ19QUk9URUNUSU9OX0NUTF9PRkYpICYmCiAJCSAgICAodmFsICE9IFdMQ19QUk9URUNUSU9OX0NUTF9MT0NBTCkgJiYKIAkJICAgICh2YWwgIT0gV0xDX1BST1RFQ1RJT05fQ1RMX09WRVJMQVApKSB7Ci0JCQliY21lcnJvciA9IEJDTUVfUkFOR0U7CisJCQliY21lcnJvciA9IC1FSU5WQUw7CiAJCQlicmVhazsKIAkJfQogCkBAIC0zOTk1LDcgKzM2OTgsNyBAQAogCWNhc2UgV0xDX1NFVF9HTU9ERV9QUk9URUNUSU9OX09WRVJSSURFOgogCQlpZiAoKHZhbCAhPSBXTENfUFJPVEVDVElPTl9BVVRPKSAmJgogCQkgICAgKHZhbCAhPSBXTENfUFJPVEVDVElPTl9PRkYpICYmICh2YWwgIT0gV0xDX1BST1RFQ1RJT05fT04pKSB7Ci0JCQliY21lcnJvciA9IEJDTUVfUkFOR0U7CisJCQliY21lcnJvciA9IC1FSU5WQUw7CiAJCQlicmVhazsKIAkJfQogCkBAIC00MDA4LDE0ICszNzExLDE0IEBACiAKIAkJCS8qIGNvcHlpbiAqLwogCQkJaWYgKGxlbiA8IChpbnQpc2l6ZW9mKHdsY19yYXRlc2V0X3QpKSB7Ci0JCQkJYmNtZXJyb3IgPSBCQ01FX0JVRlRPT1NIT1JUOworCQkJCWJjbWVycm9yID0gLUVPVkVSRkxPVzsKIAkJCQlicmVhazsKIAkJCX0KIAkJCW1lbWNweSgmcnMsIGFyZywgc2l6ZW9mKHdsY19yYXRlc2V0X3QpKTsKIAogCQkJLyogY2hlY2sgZm9yIGJhZCBjb3VudCB2YWx1ZSAqLwogCQkJaWYgKHJzLmNvdW50ID4gV0xDX05VTVJBVEVTKSB7Ci0JCQkJYmNtZXJyb3IgPSBCQ01FX0JBRFJBVEVTRVQ7CS8qIGludmFsaWQgcmF0ZXNldCAqLworCQkJCWJjbWVycm9yID0gLUVJTlZBTDsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtNDAyMyw3ICszNzI2LDggQEAKIAkJCWlmICghKHdsYy0+YmFuZC0+Z21vZGUgfHwKIAkJCSAgICAgICgoTkJBTkRTKHdsYykgPiAxKQogCQkJICAgICAgICYmIHdsYy0+YmFuZHN0YXRlW09USEVSQkFORFVOSVQod2xjKV0tPmdtb2RlKSkpIHsKLQkJCQliY21lcnJvciA9IEJDTUVfQkFEQkFORDsJLyogZ21vZGUgb25seSBjb21tYW5kIHdoZW4gbm90IGluIGdtb2RlICovCisJCQkJLyogZ21vZGUgb25seSBjb21tYW5kIHdoZW4gbm90IGluIGdtb2RlICovCisJCQkJYmNtZXJyb3IgPSAtRUlOVkFMOwogCQkJCWJyZWFrOwogCQkJfQogCkBAIC00MDM0LDE1ICszNzM4LDE5IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAKLQkJCS8qIHZhbGlkYXRlIHJhdGVzZXQgYnkgY29tcGFyaW5nIHByZSBhbmQgcG9zdCBzb3J0ZWQgYWdhaW5zdCAxMWcgaHcgcmF0ZXMgKi8KLQkJCXdsY19yYXRlc2V0X2ZpbHRlcigmcnMsICZuZXcsIGZhbHNlLCBXTENfUkFURVNfQ0NLX09GRE0sCi0JCQkJCSAgIFJBVEVfTUFTSywgQlNTX05fRU5BQih3bGMsIGJzc2NmZykpOworCQkJLyoKKwkJCSAqIHZhbGlkYXRlIHJhdGVzZXQgYnkgY29tcGFyaW5nIHByZSBhbmQKKwkJCSAqIHBvc3Qgc29ydGVkIGFnYWluc3QgMTFnIGh3IHJhdGVzCisJCQkgKi8KKwkJCXdsY19yYXRlc2V0X2ZpbHRlcigmcnMsICZuZXcsIGZhbHNlLAorCQkJCQkgICBXTENfUkFURVNfQ0NLX09GRE0sIFdMQ19SQVRFX01BU0ssCisJCQkJCSAgIEJTU19OX0VOQUIod2xjLCBic3NjZmcpKTsKIAkJCXdsY19yYXRlX2h3cnNfZmlsdGVyX3NvcnRfdmFsaWRhdGUoJm5ldywKIAkJCQkJCQkgICAmY2NrX29mZG1fcmF0ZXMsCiAJCQkJCQkJICAgZmFsc2UsCiAJCQkJCQkJICAgd2xjLT5zdGYtPnR4c3RyZWFtcyk7CiAJCQlpZiAocnMuY291bnQgIT0gbmV3LmNvdW50KSB7Ci0JCQkJYmNtZXJyb3IgPSBCQ01FX0JBRFJBVEVTRVQ7CS8qIGludmFsaWQgcmF0ZXNldCAqLworCQkJCWJjbWVycm9yID0gLUVJTlZBTDsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtNDA2NCwxMSArMzc3MiwxMiBAQAogCQlpZiAoISh3bGMtPmJhbmQtPmdtb2RlIHx8CiAJCSAgICAgICgoTkJBTkRTKHdsYykgPiAxKQogCQkgICAgICAgJiYgd2xjLT5iYW5kc3RhdGVbT1RIRVJCQU5EVU5JVCh3bGMpXS0+Z21vZGUpKSkgewotCQkJYmNtZXJyb3IgPSBCQ01FX0JBREJBTkQ7CS8qIGdtb2RlIG9ubHkgY29tbWFuZCB3aGVuIG5vdCBpbiBnbW9kZSAqLworCQkJLyogZ21vZGUgb25seSBjb21tYW5kIHdoZW4gbm90IGluIGdtb2RlICovCisJCQliY21lcnJvciA9IC1FSU5WQUw7CiAJCQlicmVhazsKIAkJfQogCQlpZiAobGVuIDwgKGludClzaXplb2Yod2xjX3JhdGVzZXRfdCkpIHsKLQkJCWJjbWVycm9yID0gQkNNRV9CVUZUT09TSE9SVDsKKwkJCWJjbWVycm9yID0gLUVPVkVSRkxPVzsKIAkJCWJyZWFrOwogCQl9CiAJCW1lbWNweShhcmcsICZ3bGMtPnN1cF9yYXRlc19vdmVycmlkZSwgc2l6ZW9mKHdsY19yYXRlc2V0X3QpKTsKQEAgLTQwODEsMTEgKzM3OTAsMTEgQEAKIAogCWNhc2UgV0xDX1NFVF9QUkJfUkVTUF9USU1FT1VUOgogCQlpZiAod2xjLT5wdWItPnVwKSB7Ci0JCQliY21lcnJvciA9IEJDTUVfTk9URE9XTjsKKwkJCWJjbWVycm9yID0gLUVJU0NPTk47CiAJCQlicmVhazsKIAkJfQogCQlpZiAodmFsIDwgMCB8fCB2YWwgPj0gMHhGRkZGKSB7Ci0JCQliY21lcnJvciA9IEJDTUVfUkFOR0U7CS8qIGJhZCB2YWx1ZSAqLworCQkJYmNtZXJyb3IgPSAtRUlOVkFMOwkvKiBiYWQgdmFsdWUgKi8KIAkJCWJyZWFrOwogCQl9CiAJCXdsYy0+cHJiX3Jlc3BfdGltZW91dCA9ICh1MTYpIHZhbDsKQEAgLTQwOTksNyArMzgwOCw3IEBACiAJCQlpZiAoa2V5ICE9IE5VTEwpIHsKIAkJCQkqcHZhbCA9IGtleS0+aWQgPT0gdmFsID8gdHJ1ZSA6IGZhbHNlOwogCQkJfSBlbHNlIHsKLQkJCQliY21lcnJvciA9IEJDTUVfQkFES0VZSURYOworCQkJCWJjbWVycm9yID0gLUVJTlZBTDsKIAkJCX0KIAkJCWJyZWFrOwogCQl9CkBAIC00MTA3LDcgKzM4MTYsNyBAQAogCWNhc2UgV0xDX1NFVF9LRVlfUFJJTUFSWTp7CiAJCQl3c2VjX2tleV90ICprZXksICpvbGRfa2V5OwogCi0JCQliY21lcnJvciA9IEJDTUVfQkFES0VZSURYOworCQkJYmNtZXJyb3IgPSAtRUlOVkFMOwogCiAJCQkvKiB0cmVhdCB0aGUgJ3ZhbCcgcGFybSBhcyB0aGUga2V5IGlkICovCiAJCQlmb3IgKGkgPSAwOyBpIDwgV1NFQ19NQVhfREVGQVVMVF9LRVlTOyBpKyspIHsKQEAgLTQxMTksNyArMzgyOCw3IEBACiAJCQkJCQkgICAgfldTRUNfUFJJTUFSWV9LRVk7CiAJCQkJCWtleS0+ZmxhZ3MgfD0gV1NFQ19QUklNQVJZX0tFWTsKIAkJCQkJYnNzY2ZnLT53c2VjX2luZGV4ID0gaTsKLQkJCQkJYmNtZXJyb3IgPSBCQ01FX09LOworCQkJCQliY21lcnJvciA9IDA7CiAJCQkJfQogCQkJfQogCQkJYnJlYWs7CkBAIC00MTQxLDcgKzM4NTAsNyBAQAogCQkJCTsKIAogCQkJaWYgKGkgPT0gKHVpbnQpIGxlbikgewotCQkJCWJjbWVycm9yID0gQkNNRV9CVUZUT09TSE9SVDsKKwkJCQliY21lcnJvciA9IC1FT1ZFUkZMT1c7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlpKys7CS8qIGluY2x1ZGUgdGhlIG51bGwgaW4gdGhlIHN0cmluZyBsZW5ndGggKi8KQEAgLTQxNjIsMzcgKzM4NzEsMjUgQEAKIAkJfQogCiAJY2FzZSBXTENfU0VUX1dTRUNfUE1LOgotCQliY21lcnJvciA9IEJDTUVfVU5TVVBQT1JURUQ7CisJCWJjbWVycm9yID0gLUVOT1RTVVBQOwogCQlicmVhazsKIAogI2lmIGRlZmluZWQoQkNNREJHKQogCWNhc2UgV0xDX0NVUlJFTlRfUFdSOgogCQlpZiAoIXdsYy0+cHViLT51cCkKLQkJCWJjbWVycm9yID0gQkNNRV9OT1RVUDsKKwkJCWJjbWVycm9yID0gLUVOT0xJTks7CiAJCWVsc2UKIAkJCWJjbWVycm9yID0gd2xjX2dldF9jdXJyZW50X3R4cHdyKHdsYywgYXJnLCBsZW4pOwogCQlicmVhazsKICNlbmRpZgogCiAJY2FzZSBXTENfTEFTVDoKLQkJV0xfRVJST1IoIiVzOiBXTENfTEFTVFxuIiwgX19mdW5jX18pOworCQl3aXBoeV9lcnIod2xjLT53aXBoeSwgIiVzOiBXTENfTEFTVFxuIiwgX19mdW5jX18pOwogCX0KICBkb25lOgogCi0JaWYgKGJjbWVycm9yKSB7Ci0JCWlmIChWQUxJRF9CQ01FUlJPUihiY21lcnJvcikpCi0JCQl3bGMtPnB1Yi0+YmNtZXJyb3IgPSBiY21lcnJvcjsKLQkJZWxzZSB7Ci0JCQliY21lcnJvciA9IDA7Ci0JCX0KLQotCX0KLQkvKiBCTUFDX05PVEU6IGZvciBISUdIX09OTFkgZHJpdmVyLCB0aGlzIHNlZW1zIGJlaW5nIGNhbGxlZCBhZnRlciBSUEMgYnVzIGZhaWxlZCAqLwotCS8qIEluIGh3X29mZiBjb25kaXRpb24sIElPQ1RMcyB0aGF0IHJlYWNoIGhlcmUgYXJlIGRlZW1lZCBzYWZlIGJ1dCB0YWNsZWFyIHdvdWxkCi0JICogY2VydGFpbmx5IHJlc3VsdCBpbiBnZXR0aW5nIC0xIGZvciByZWdpc3RlciByZWFkcy4gU28gc2tpcCB0YV9jbGVhciBhbHRvZ2V0aGVyCi0JICovCi0JaWYgKCEod2xjLT5wdWItPmh3X29mZikpCi0JCUFTU0VSVCh3bGNfYm1hY190YWNsZWFyKHdsYy0+aHcsIHRhX29rKSB8fCAhdGFfb2spOworCWlmIChiY21lcnJvcikKKwkJd2xjLT5wdWItPmJjbWVycm9yID0gYmNtZXJyb3I7CiAKIAlyZXR1cm4gYmNtZXJyb3I7CiB9CkBAIC00MjAzLDMwICszOTAwLDIwIEBACiB7CiAJLyogaWYgYmFuZCBpcyBzcGVjaWZpZWQsIGl0IG11c3QgYmUgdGhlIGN1cnJlbnQgYmFuZCAqLwogCWlmICgoYmFuZCAhPSBXTENfQkFORF9BVVRPKSAmJiAoYmFuZCAhPSAodWludCkgd2xjLT5iYW5kLT5iYW5kdHlwZSkpCi0JCXJldHVybiBCQ01FX0JBREJBTkQ7CisJCXJldHVybiAtRUlOVkFMOwogCiAJLyogaWYgbXVsdGliYW5kIGFuZCBiYW5kIGlzIG5vdCBzcGVjaWZpZWQsIGJhbmQgbXVzdCBiZSBsb2NrZWQgKi8KIAlpZiAoKGJhbmQgPT0gV0xDX0JBTkRfQVVUTykgJiYgSVNfTUJBTkRfVU5MT0NLRUQod2xjKSkKLQkJcmV0dXJuIEJDTUVfTk9UQkFORExPQ0tFRDsKKwkJcmV0dXJuIC1FTk9NRURJVU07CiAKIAkvKiBtdXN0IGhhdmUgY29yZSBjbG9ja3MgKi8KIAlpZiAoIXdsYy0+Y2xrKQotCQlyZXR1cm4gQkNNRV9OT0NMSzsKKwkJcmV0dXJuIC1FSU87CiAKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgkJCQkvKiBkZWZpbmVkKEJDTURCRykgKi8KIAotI2lmIGRlZmluZWQoQkNNREJHKQotLyogRm9yIHNvbWUgaW9jdGxzLCBtYWtlIHN1cmUgdGhhdCB0aGUgcGkgcG9pbnRlciBtYXRjaGVzIHRoZSBjdXJyZW50IHBoeSAqLwotaW50IHdsY19pb2NwaWNoayhzdHJ1Y3Qgd2xjX2luZm8gKndsYywgdWludCBwaHl0eXBlKQotewotCWlmICh3bGMtPmJhbmQtPnBoeXR5cGUgIT0gcGh5dHlwZSkKLQkJcmV0dXJuIEJDTUVfQkFEQkFORDsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCiAvKiBMb29rIHVwIHRoZSBnaXZlbiB2YXIgbmFtZSBpbiB0aGUgZ2l2ZW4gdGFibGUgKi8KIHN0YXRpYyBjb25zdCBiY21faW92YXJfdCAqd2xjX2lvdmFyX2xvb2t1cChjb25zdCBiY21faW92YXJfdCAqdGFibGUsCiAJCQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUpCkBAIC00MjQxLDggKzM5MjgsNiBAQAogCWVsc2UKIAkJbG9va3VwX25hbWUgPSBuYW1lOwogCi0JQVNTRVJUKHRhYmxlICE9IE5VTEwpOwotCiAJZm9yICh2aSA9IHRhYmxlOyB2aS0+bmFtZTsgdmkrKykgewogCQlpZiAoIXN0cmNtcCh2aS0+bmFtZSwgbG9va3VwX25hbWUpKQogCQkJcmV0dXJuIHZpOwpAQCAtNDI2NiwyMSArMzk1MSw2IEBACiAJCQkgICAgSU9WX1NFVCwgTlVMTCk7CiB9CiAKLS8qIHNpbXBsaWZpZWQgczggZ2V0IGludGVyZmFjZSBmb3IgY29tbW9uIFdMQ19HRVRfVkFSIGlvY3RsIGhhbmRsZXIgKi8KLWludCB3bGNfaW92YXJfZ2V0czgoc3RydWN0IHdsY19pbmZvICp3bGMsIGNvbnN0IGNoYXIgKm5hbWUsIHM4ICphcmcpCi17Ci0JaW50IGlvdmFyX2ludDsKLQlpbnQgZXJyOwotCi0JZXJyID0KLQkgICAgd2xjX2lvdmFyX29wKHdsYywgbmFtZSwgTlVMTCwgMCwgJmlvdmFyX2ludCwgc2l6ZW9mKGlvdmFyX2ludCksCi0JCQkgSU9WX0dFVCwgTlVMTCk7Ci0JaWYgKCFlcnIpCi0JCSphcmcgPSAoczgpIGlvdmFyX2ludDsKLQotCXJldHVybiBlcnI7Ci19Ci0KIC8qCiAgKiByZWdpc3RlciBpb3ZhciB0YWJsZSwgd2F0Y2hkb2cgYW5kIGRvd24gaGFuZGxlcnMuCiAgKiBjYWxsaW5nIGZ1bmN0aW9uIG11c3Qga2VlcCAnaW92YXJzJyB1bnRpbCB3bGNfbW9kdWxlX3VucmVnaXN0ZXIgaXMgY2FsbGVkLgpAQCAtNDI5Myw5ICszOTYzLDYgQEAKIAlzdHJ1Y3Qgd2xjX2luZm8gKndsYyA9IChzdHJ1Y3Qgd2xjX2luZm8gKikgcHViLT53bGM7CiAJaW50IGk7CiAKLQlBU1NFUlQobmFtZSAhPSBOVUxMKTsKLQlBU1NFUlQoaV9mbiAhPSBOVUxMIHx8IHdfZm4gIT0gTlVMTCB8fCBkX2ZuICE9IE5VTEwpOwotCiAJLyogZmluZCBhbiBlbXB0eSBlbnRyeSBhbmQganVzdCBhZGQsIG5vIGR1cGxpY2F0aW9uIGNoZWNrISAqLwogCWZvciAoaSA9IDA7IGkgPCBXTENfTUFYTU9EVUxFUzsgaSsrKSB7CiAJCWlmICh3bGMtPm1vZHVsZWNiW2ldLm5hbWVbMF0gPT0gJ1wwJykgewpAQCAtNDMxMCw5ICszOTc3LDcgQEAKIAkJfQogCX0KIAotCS8qIGl0IGlzIHRpbWUgdG8gaW5jcmVhc2UgdGhlIGNhcGFjaXR5ICovCi0JQVNTRVJUKGkgPCBXTENfTUFYTU9EVUxFUyk7Ci0JcmV0dXJuIEJDTUVfTk9SRVNPVVJDRTsKKwlyZXR1cm4gLUVOT1NSOwogfQogCiAvKiB1bnJlZ2lzdGVyIG1vZHVsZSBjYWxsYmFja3MgKi8KQEAgLTQzMjIsOSArMzk4Nyw3IEBACiAJaW50IGk7CiAKIAlpZiAod2xjID09IE5VTEwpCi0JCXJldHVybiBCQ01FX05PVEZPVU5EOwotCi0JQVNTRVJUKG5hbWUgIT0gTlVMTCk7CisJCXJldHVybiAtRU5PREFUQTsKIAogCWZvciAoaSA9IDA7IGkgPCBXTENfTUFYTU9EVUxFUzsgaSsrKSB7CiAJCWlmICghc3RyY21wKHdsYy0+bW9kdWxlY2JbaV0ubmFtZSwgbmFtZSkgJiYKQEAgLTQzMzUsNyArMzk5OCw3IEBACiAJfQogCiAJLyogdGFibGUgbm90IGZvdW5kISAqLwotCXJldHVybiBCQ01FX05PVEZPVU5EOworCXJldHVybiAtRU5PREFUQTsKIH0KIAogLyogV3JpdGUgV01FIHR1bmFibGUgcGFyYW1ldGVycyBmb3IgcmV0cmFuc21pdC9tYXggcmF0ZSBmcm9tIHdsYyBzdHJ1Y3QgdG8gdWNvZGUgKi8KQEAgLTQzNzEsMjMgKzQwMzQsMTEgQEAKIAl1MzIgYWN0aW9uaWQ7CiAJaW50IGk7CiAKLQlBU1NFUlQobmFtZSAhPSBOVUxMKTsKLQotCUFTU0VSVChsZW4gPj0gMCk7Ci0KLQkvKiBHZXQgTVVTVCBoYXZlIHJldHVybiBzcGFjZSAqLwotCUFTU0VSVChzZXQgfHwgKGFyZyAmJiBsZW4pKTsKLQotCUFTU0VSVCghKHdsYy0+cHViLT5od19vZmYgJiYgd2xjLT5wdWItPnVwKSk7Ci0KLQkvKiBTZXQgZG9lcyBOT1QgdGFrZSBxdWFsaWZpZXJzICovCi0JQVNTRVJUKCFzZXQgfHwgKCFwYXJhbXMgJiYgIXBfbGVuKSk7Ci0KIAlpZiAoIXNldCAmJiAobGVuID09IHNpemVvZihpbnQpKSAmJgogCSAgICAhKElTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpKGFyZyksICh1aW50KSBzaXplb2YoaW50KSkpKSB7Ci0JCVdMX0VSUk9SKCJ3bCVkOiAlcyB1bmFsaWduZWQgZ2V0IHB0ciBmb3IgJXNcbiIsCi0JCQkgd2xjLT5wdWItPnVuaXQsIF9fZnVuY19fLCBuYW1lKTsKLQkJQVNTRVJUKDApOworCQl3aXBoeV9lcnIod2xjLT53aXBoeSwgIndsJWQ6ICVzIHVuYWxpZ25lZCBnZXQgcHRyIGZvciAlc1xuIiwKKwkJCSAgd2xjLT5wdWItPnVuaXQsIF9fZnVuY19fLCBuYW1lKTsKKwkJcmV0dXJuIC1FTk9UU1VQUDsKIAl9CiAKIAkvKiBmaW5kIHRoZSBnaXZlbiBpb3ZhciBuYW1lICovCkBAIC00NDAwLDggKzQwNTEsNyBAQAogCX0KIAkvKiBpb3ZhciBuYW1lIG5vdCBmb3VuZCAqLwogCWlmIChpID49IFdMQ19NQVhNT0RVTEVTKSB7Ci0JCWVyciA9IEJDTUVfVU5TVVBQT1JURUQ7Ci0JCWdvdG8gZXhpdDsKKwkJcmV0dXJuIC1FTk9UU1VQUDsKIAl9CiAKIAkvKiBzZXQgdXAgJ3BhcmFtcycgcG9pbnRlciBpbiBjYXNlIHRoaXMgaXMgYSBzZXQgY29tbWFuZCBzbyB0aGF0CkBAIC00NDI2LDggKzQwNzYsNiBAQAogCWVyciA9IHdsYy0+bW9kdWxlY2JbaV0uaW92YXJfZm4od2xjLT5tb2R1bGVjYltpXS5oZGwsIHZpLCBhY3Rpb25pZCwKIAkJCQkJbmFtZSwgcGFyYW1zLCBwX2xlbiwgYXJnLCBsZW4sIHZhbF9zaXplLAogCQkJCQl3bGNpZik7Ci0KLSBleGl0OgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTQ0NDMsMjIgKzQwOTEsMjIgQEAKIAlpZiAoc2V0KSB7CiAJCWlmICgoKHZpLT5mbGFncyAmIElPVkZfU0VUX0RPV04pICYmIHdsYy0+cHViLT51cCkgfHwKIAkJICAgICgodmktPmZsYWdzICYgSU9WRl9TRVRfVVApICYmICF3bGMtPnB1Yi0+dXApKSB7Ci0JCQllcnIgPSAod2xjLT5wdWItPnVwID8gQkNNRV9OT1RET1dOIDogQkNNRV9OT1RVUCk7CisJCQllcnIgPSAod2xjLT5wdWItPnVwID8gLUVJU0NPTk4gOiAtRU5PTElOSyk7CiAJCX0gZWxzZSBpZiAoKHZpLT5mbGFncyAmIElPVkZfU0VUX0JBTkQpCiAJCQkgICAmJiBJU19NQkFORF9VTkxPQ0tFRCh3bGMpKSB7Ci0JCQllcnIgPSBCQ01FX05PVEJBTkRMT0NLRUQ7CisJCQllcnIgPSAtRU5PTUVESVVNOwogCQl9IGVsc2UgaWYgKCh2aS0+ZmxhZ3MgJiBJT1ZGX1NFVF9DTEspICYmICF3bGMtPmNsaykgewotCQkJZXJyID0gQkNNRV9OT0NMSzsKKwkJCWVyciA9IC1FSU87CiAJCX0KIAl9IGVsc2UgewogCQlpZiAoKCh2aS0+ZmxhZ3MgJiBJT1ZGX0dFVF9ET1dOKSAmJiB3bGMtPnB1Yi0+dXApIHx8CiAJCSAgICAoKHZpLT5mbGFncyAmIElPVkZfR0VUX1VQKSAmJiAhd2xjLT5wdWItPnVwKSkgewotCQkJZXJyID0gKHdsYy0+cHViLT51cCA/IEJDTUVfTk9URE9XTiA6IEJDTUVfTk9UVVApOworCQkJZXJyID0gKHdsYy0+cHViLT51cCA/IC1FSVNDT05OIDogLUVOT0xJTkspOwogCQl9IGVsc2UgaWYgKCh2aS0+ZmxhZ3MgJiBJT1ZGX0dFVF9CQU5EKQogCQkJICAgJiYgSVNfTUJBTkRfVU5MT0NLRUQod2xjKSkgewotCQkJZXJyID0gQkNNRV9OT1RCQU5ETE9DS0VEOworCQkJZXJyID0gLUVOT01FRElVTTsKIAkJfSBlbHNlIGlmICgodmktPmZsYWdzICYgSU9WRl9HRVRfQ0xLKSAmJiAhd2xjLT5jbGspIHsKLQkJCWVyciA9IEJDTUVfTk9DTEs7CisJCQllcnIgPSAtRUlPOwogCQl9CiAJfQogCkBAIC00NTEzLDcgKzQxNjEsNyBAQAogCWJvb2wgYm9vbF92YWwyOwogCXdsY19ic3NfaW5mb190ICpjdXJyZW50X2JzczsKIAotCVdMX1RSQUNFKCJ3bCVkOiAlc1xuIiwgd2xjLT5wdWItPnVuaXQsIF9fZnVuY19fKTsKKwlCQ01NU0cod2xjLT53aXBoeSwgIndsJWRcbiIsIHdsYy0+cHViLT51bml0KTsKIAogCWJzc2NmZyA9IE5VTEw7CiAJY3VycmVudF9ic3MgPSBOVUxMOwpAQCAtNDUzNyw4ICs0MTg1LDcgQEAKIAlib29sX3ZhbCA9IChpbnRfdmFsICE9IDApID8gdHJ1ZSA6IGZhbHNlOwogCWJvb2xfdmFsMiA9IChpbnRfdmFsMiAhPSAwKSA/IHRydWUgOiBmYWxzZTsKIAotCVdMX1RSQUNFKCJ3bCVkOiAlczogaWQgJWRcbiIsCi0JCSB3bGMtPnB1Yi0+dW5pdCwgX19mdW5jX18sIElPVl9JRChhY3Rpb25pZCkpOworCUJDTU1TRyh3bGMtPndpcGh5LCAid2wlZDogaWQgJWRcbiIsIHdsYy0+cHViLT51bml0LCBJT1ZfSUQoYWN0aW9uaWQpKTsKIAkvKiBEbyB0aGUgYWN0dWFsIHBhcmFtZXRlciBpbXBsZW1lbnRhdGlvbiAqLwogCXN3aXRjaCAoYWN0aW9uaWQpIHsKIAljYXNlIElPVl9TVkFMKElPVl9SVFNUSFJFU0gpOgpAQCAtNDU1MSw3ICs0MTk4LDcgQEAKIAogCQkJZXJyID0gd2xjX3BoeV90eHBvd2VyX2dldCh3bGMtPmJhbmQtPnBpLCAmcWRibSwKIAkJCQkmb3ZlcnJpZGUpOwotCQkJaWYgKGVyciAhPSBCQ01FX09LKQorCQkJaWYgKGVyciAhPSAwKQogCQkJCXJldHVybiBlcnI7CiAKIAkJCS8qIFJldHVybiBxZGJtIHVuaXRzICovCkBAIC00NTk5LDggKzQyNDYsOSBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCVdMX0VSUk9SKCJ3bCVkOiAlczogdW5zdXBwb3J0ZWRcbiIsIHdsYy0+cHViLT51bml0LCBfX2Z1bmNfXyk7Ci0JCWVyciA9IEJDTUVfVU5TVVBQT1JURUQ7CisJCXdpcGh5X2Vycih3bGMtPndpcGh5LCAid2wlZDogJXM6IHVuc3VwcG9ydGVkXG4iLAorCQkJICB3bGMtPnB1Yi0+dW5pdCwgX19mdW5jX18pOworCQllcnIgPSAtRU5PVFNVUFA7CiAJCWJyZWFrOwogCX0KIApAQCAtNDYzNSw3ICs0MjgzLDcgQEAKIAkJLyogU2lnbmVkIHZhbHVlcyBhcmUgY2hlY2tlZCBhZ2FpbnN0IG1heF92YWwgYW5kIG1pbl92YWwgKi8KIAkJaWYgKChzMzIpIHZhbCA8IChzMzIpIG1pbl92YWwKIAkJICAgIHx8IChzMzIpIHZhbCA+IChzMzIpIG1heF92YWwpCi0JCQllcnIgPSBCQ01FX1JBTkdFOworCQkJZXJyID0gLUVJTlZBTDsKIAkJYnJlYWs7CiAKIAljYXNlIElPVlRfVUlOVDMyOgpAQCAtNDY0OSw3ICs0Mjk3LDcgQEAKIAkJaWYgKHZpLT5mbGFncyAmIElPVkZfTlRSTCkKIAkJCW1pbl92YWwgPSAxOwogCQlpZiAoKHZhbCA8IG1pbl92YWwpIHx8ICh2YWwgPiBtYXhfdmFsKSkKLQkJCWVyciA9IEJDTUVfUkFOR0U7CisJCQllcnIgPSAtRUlOVkFMOwogCQlicmVhazsKIAl9CiAKQEAgLTQ3MDgsMjQgKzQzNTYsNiBAQAogI2VuZGlmCQkJCS8qIGRlZmluZWQoQkNNREJHKSAqLwogfQogCi1zdGF0aWMgdm9pZAotd2xjX2N0cnVwZF9jYWNoZSh1MTYgY3VyX3N0YXQsIHUxNiAqbWFjc3RhdF9zbmFwc2hvdCwgdTMyICptYWNzdGF0KQotewotCXUxNiB2OwotCXUxNiBkZWx0YTsKLQotCXYgPSBsZTE2X3RvX2NwdShjdXJfc3RhdCk7Ci0JZGVsdGEgPSAodTE2KSh2IC0gKm1hY3N0YXRfc25hcHNob3QpOwotCi0JaWYgKGRlbHRhICE9IDApIHsKLQkJKm1hY3N0YXQgKz0gZGVsdGE7Ci0JCSptYWNzdGF0X3NuYXBzaG90ID0gdjsKLQl9Ci19Ci0KLSNkZWZpbmUgTUFDU1RBVFVQRChuYW1lKSBcCi0Jd2xjX2N0cnVwZF9jYWNoZShtYWNzdGF0cy5uYW1lLCAmd2xjLT5jb3JlLT5tYWNzdGF0X3NuYXBzaG90LT5uYW1lLCAmd2xjLT5wdWItPl9jbnQtPm5hbWUpCi0KIHZvaWQgd2xjX3N0YXRzdXBkKHN0cnVjdCB3bGNfaW5mbyAqd2xjKQogewogCWludCBpOwpAQCAtNDc1Myw2OCArNDM4MywxMiBAQAogCXdsY19ibWFjX2NvcHlmcm9tX3NobSh3bGMtPmh3LCBNX1VDT0RFX01BQ1NUQVQsCiAJCQkgICAgICAmbWFjc3RhdHMsIHNpemVvZihtYWNzdGF0X3QpKTsKIAotCS8qIHVwZGF0ZSBtYWMgc3RhdHMgKi8KLQlNQUNTVEFUVVBEKHR4YWxsZnJtKTsKLQlNQUNTVEFUVVBEKHR4cnRzZnJtKTsKLQlNQUNTVEFUVVBEKHR4Y3RzZnJtKTsKLQlNQUNTVEFUVVBEKHR4YWNrZnJtKTsKLQlNQUNTVEFUVVBEKHR4ZG5sZnJtKTsKLQlNQUNTVEFUVVBEKHR4YmNuZnJtKTsKLQlmb3IgKGkgPSAwOyBpIDwgTkZJRk87IGkrKykKLQkJTUFDU1RBVFVQRCh0eGZ1bmZsW2ldKTsKLQlNQUNTVEFUVVBEKHR4dHBsdW5mbCk7Ci0JTUFDU1RBVFVQRCh0eHBoeWVycik7Ci0JTUFDU1RBVFVQRChyeGZybXRvb2xvbmcpOwotCU1BQ1NUQVRVUEQocnhmcm10b29zaHJ0KTsKLQlNQUNTVEFUVVBEKHJ4aW52bWFjaGRyKTsKLQlNQUNTVEFUVVBEKHJ4YmFkZmNzKTsKLQlNQUNTVEFUVVBEKHJ4YmFkcGxjcCk7Ci0JTUFDU1RBVFVQRChyeGNyc2dsaXRjaCk7Ci0JTUFDU1RBVFVQRChyeHN0cnQpOwotCU1BQ1NUQVRVUEQocnhkZnJtdWNhc3RtYnNzKTsKLQlNQUNTVEFUVVBEKHJ4bWZybXVjYXN0bWJzcyk7Ci0JTUFDU1RBVFVQRChyeGNmcm11Y2FzdCk7Ci0JTUFDU1RBVFVQRChyeHJ0c3VjYXN0KTsKLQlNQUNTVEFUVVBEKHJ4Y3RzdWNhc3QpOwotCU1BQ1NUQVRVUEQocnhhY2t1Y2FzdCk7Ci0JTUFDU1RBVFVQRChyeGRmcm1vY2FzdCk7Ci0JTUFDU1RBVFVQRChyeG1mcm1vY2FzdCk7Ci0JTUFDU1RBVFVQRChyeGNmcm1vY2FzdCk7Ci0JTUFDU1RBVFVQRChyeHJ0c29jYXN0KTsKLQlNQUNTVEFUVVBEKHJ4Y3Rzb2Nhc3QpOwotCU1BQ1NUQVRVUEQocnhkZnJtbWNhc3QpOwotCU1BQ1NUQVRVUEQocnhtZnJtbWNhc3QpOwotCU1BQ1NUQVRVUEQocnhjZnJtbWNhc3QpOwotCU1BQ1NUQVRVUEQocnhiZWFjb25tYnNzKTsKLQlNQUNTVEFUVVBEKHJ4ZGZybXVjYXN0b2Jzcyk7Ci0JTUFDU1RBVFVQRChyeGJlYWNvbm9ic3MpOwotCU1BQ1NUQVRVUEQocnhyc3B0bW91dCk7Ci0JTUFDU1RBVFVQRChiY250eGNhbmNsKTsKLQlNQUNTVEFUVVBEKHJ4ZjBvdmZsKTsKLQlNQUNTVEFUVVBEKHJ4ZjFvdmZsKTsKLQlNQUNTVEFUVVBEKHJ4ZjJvdmZsKTsKLQlNQUNTVEFUVVBEKHR4c2ZvdmZsKTsKLQlNQUNTVEFUVVBEKHBtcW92ZmwpOwotCU1BQ1NUQVRVUEQocnhjZ3BycWZybSk7Ci0JTUFDU1RBVFVQRChyeGNncHJzcW92ZmwpOwotCU1BQ1NUQVRVUEQodHhjZ3Byc2ZhaWwpOwotCU1BQ1NUQVRVUEQodHhjZ3Byc3N1Yyk7Ci0JTUFDU1RBVFVQRChwcnNfdGltZW91dCk7Ci0JTUFDU1RBVFVQRChyeG5hY2spOwotCU1BQ1NUQVRVUEQoZnJtc2NvbnMpOwotCU1BQ1NUQVRVUEQodHhuYWNrKTsKLQlNQUNTVEFUVVBEKHR4Z2xpdGNoX25hY2spOwotCU1BQ1NUQVRVUEQodHhidXJzdCk7Ci0JTUFDU1RBVFVQRChwaHl3YXRjaGRvZyk7Ci0JTUFDU1RBVFVQRChwa3RlbmdyeGR1Y2FzdCk7Ci0JTUFDU1RBVFVQRChwa3RlbmdyeGRtY2FzdCk7Ci0KICNpZmRlZiBCQ01EQkcKIAkvKiBjaGVjayBmb3IgcnggZmlmbyAwIG92ZXJmbG93ICovCiAJZGVsdGEgPSAodTE2KSAod2xjLT5jb3JlLT5tYWNzdGF0X3NuYXBzaG90LT5yeGYwb3ZmbCAtIHJ4ZjBvdmZsKTsKIAlpZiAoZGVsdGEpCi0JCVdMX0VSUk9SKCJ3bCVkOiAldSByeCBmaWZvIDAgb3ZlcmZsb3dzIVxuIiwKLQkJCSB3bGMtPnB1Yi0+dW5pdCwgZGVsdGEpOworCQl3aXBoeV9lcnIod2xjLT53aXBoeSwgIndsJWQ6ICV1IHJ4IGZpZm8gMCBvdmVyZmxvd3MhXG4iLAorCQkJICB3bGMtPnB1Yi0+dW5pdCwgZGVsdGEpOwogCiAJLyogY2hlY2sgZm9yIHR4IGZpZm8gdW5kZXJmbG93cyAqLwogCWZvciAoaSA9IDA7IGkgPCBORklGTzsgaSsrKSB7CkBAIC00ODIyLDU3ICs0Mzk2LDIzIEBACiAJCSAgICAodTE2KSAod2xjLT5jb3JlLT5tYWNzdGF0X3NuYXBzaG90LT50eGZ1bmZsW2ldIC0KIAkJCSAgICAgIHR4ZnVuZmxbaV0pOwogCQlpZiAoZGVsdGEpCi0JCQlXTF9FUlJPUigid2wlZDogJXUgdHggZmlmbyAlZCB1bmRlcmZsb3dzIVxuIiwKLQkJCQkgd2xjLT5wdWItPnVuaXQsIGRlbHRhLCBpKTsKKwkJCXdpcGh5X2Vycih3bGMtPndpcGh5LCAid2wlZDogJXUgdHggZmlmbyAlZCB1bmRlcmZsb3dzISIKKwkJCQkgICJcbiIsIHdsYy0+cHViLT51bml0LCBkZWx0YSwgaSk7CiAJfQogI2VuZGlmCQkJCS8qIEJDTURCRyAqLwogCi0JLyogZG90MTEgY291bnRlciB1cGRhdGUgKi8KLQotCVdMQ05UU0VUKHdsYy0+cHViLT5fY250LT50eHJ0cywKLQkJICh3bGMtPnB1Yi0+X2NudC0+cnhjdHN1Y2FzdCAtCi0JCSAgd2xjLT5wdWItPl9jbnQtPmQxMWNudF90eHJ0c19vZmYpKTsKLQlXTENOVFNFVCh3bGMtPnB1Yi0+X2NudC0+cnhjcmMsCi0JCSAod2xjLT5wdWItPl9jbnQtPnJ4YmFkZmNzIC0gd2xjLT5wdWItPl9jbnQtPmQxMWNudF9yeGNyY19vZmYpKTsKLQlXTENOVFNFVCh3bGMtPnB1Yi0+X2NudC0+dHhub2N0cywKLQkJICgod2xjLT5wdWItPl9jbnQtPnR4cnRzZnJtIC0gd2xjLT5wdWItPl9jbnQtPnJ4Y3RzdWNhc3QpIC0KLQkJICB3bGMtPnB1Yi0+X2NudC0+ZDExY250X3R4bm9jdHNfb2ZmKSk7Ci0KIAkvKiBtZXJnZSBjb3VudGVycyBmcm9tIGRtYSBtb2R1bGUgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTkZJRk87IGkrKykgewogCQlpZiAod2xjLT5ody0+ZGlbaV0pIHsKLQkJCVdMQ05UQUREKHdsYy0+cHViLT5fY250LT50eG5vYnVmLAotCQkJCSAod2xjLT5ody0+ZGlbaV0pLT50eG5vYnVmKTsKLQkJCVdMQ05UQUREKHdsYy0+cHViLT5fY250LT5yeG5vYnVmLAotCQkJCSAod2xjLT5ody0+ZGlbaV0pLT5yeG5vYnVmKTsKLQkJCVdMQ05UQUREKHdsYy0+cHViLT5fY250LT5yeGdpYW50LAotCQkJCSAod2xjLT5ody0+ZGlbaV0pLT5yeGdpYW50cyk7CiAJCQlkbWFfY291bnRlcnJlc2V0KHdsYy0+aHctPmRpW2ldKTsKIAkJfQogCX0KLQotCS8qCi0JICogQWdncmVnYXRlIHRyYW5zbWl0IGFuZCByZWNlaXZlIGVycm9ycyB0aGF0IHByb2JhYmx5IHJlc3VsdGVkCi0JICogaW4gdGhlIGxvc3Mgb2YgYSBmcmFtZSBhcmUgY29tcHV0ZWQgb24gdGhlIGZseS4KLQkgKi8KLQlXTENOVFNFVCh3bGMtPnB1Yi0+X2NudC0+dHhlcnJvciwKLQkJIHdsYy0+cHViLT5fY250LT50eG5vYnVmICsgd2xjLT5wdWItPl9jbnQtPnR4bm9hc3NvYyArCi0JCSB3bGMtPnB1Yi0+X2NudC0+dHh1ZmxvICsgd2xjLT5wdWItPl9jbnQtPnR4cnVudCArCi0JCSB3bGMtPnB1Yi0+X2NudC0+ZG1hZGUgKyB3bGMtPnB1Yi0+X2NudC0+ZG1hZGEgKwotCQkgd2xjLT5wdWItPl9jbnQtPmRtYXBlKTsKLQlXTENOVFNFVCh3bGMtPnB1Yi0+X2NudC0+cnhlcnJvciwKLQkJIHdsYy0+cHViLT5fY250LT5yeG9mbG8gKyB3bGMtPnB1Yi0+X2NudC0+cnhub2J1ZiArCi0JCSB3bGMtPnB1Yi0+X2NudC0+cnhmcmFnZXJyICsgd2xjLT5wdWItPl9jbnQtPnJ4cnVudCArCi0JCSB3bGMtPnB1Yi0+X2NudC0+cnhnaWFudCArIHdsYy0+cHViLT5fY250LT5yeG5vc2NiICsKLQkJIHdsYy0+cHViLT5fY250LT5yeGJhZHNyY21hYyk7Ci0JZm9yIChpID0gMDsgaSA8IE5GSUZPOyBpKyspCi0JCXdsYy0+cHViLT5fY250LT5yeGVycm9yICs9IHdsYy0+cHViLT5fY250LT5yeHVmbG9baV07CiB9CiAKIGJvb2wgd2xjX2NoaXBtYXRjaCh1MTYgdmVuZG9yLCB1MTYgZGV2aWNlKQogewotCWlmICh2ZW5kb3IgIT0gVkVORE9SX0JST0FEQ09NKSB7Ci0JCVdMX0VSUk9SKCJ3bGNfY2hpcG1hdGNoOiB1bmtub3duIHZlbmRvciBpZCAlMDR4XG4iLCB2ZW5kb3IpOworCWlmICh2ZW5kb3IgIT0gUENJX1ZFTkRPUl9JRF9CUk9BRENPTSkgeworCQlwcl9lcnIoIndsY19jaGlwbWF0Y2g6IHVua25vd24gdmVuZG9yIGlkICUwNHhcbiIsIHZlbmRvcik7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKQEAgLTQ4ODQsNyArNDQyNCw3IEBACiAJaWYgKChkZXZpY2UgPT0gQkNNNDMyMzZfRDExTl9JRCkgfHwgKGRldmljZSA9PSBCQ000MzIzNl9EMTFOMkdfSUQpKQogCQlyZXR1cm4gdHJ1ZTsKIAotCVdMX0VSUk9SKCJ3bGNfY2hpcG1hdGNoOiB1bmtub3duIGRldmljZSBpZCAlMDR4XG4iLCBkZXZpY2UpOworCXByX2Vycigid2xjX2NoaXBtYXRjaDogdW5rbm93biBkZXZpY2UgaWQgJTA0eFxuIiwgZGV2aWNlKTsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTQ5MjMsNyArNDQ2Myw5IEBACiAJY2hhciBoZXhidWZbMjU2XTsKIAogCS8qIGFkZCBwbGNwIGhlYWRlciBhbG9uZyB3aXRoIHR4aCBkZXNjcmlwdG9yICovCi0JcHJoZXgoIlJhdyBUeERlc2MgKyBwbGNwIGhlYWRlciIsICh1bnNpZ25lZCBjaGFyICopIHR4aCwgc2l6ZW9mKGQxMXR4aF90KSArIDQ4KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiUmF3IFR4RGVzYyArIHBsY3AgaGVhZGVyOlxuIik7CisJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoIiIsIERVTVBfUFJFRklYX09GRlNFVCwKKwkJCSAgICAgdHhoLCBzaXplb2YoZDExdHhoX3QpICsgNDgpOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgIlR4Q3RsTG93OiAlMDR4ICIsIG10Y2wpOwogCXByaW50ayhLRVJOX0RFQlVHICJUeEN0bEhpZ2g6ICUwNHggIiwgbXRjaCk7CkBAIC00OTk0LDcgKzQ1MzYsOCBAQAogCQl7MCwgTlVMTH0KIAl9OwogCi0JcHJoZXgoIlJhdyBSeERlc2MiLCAodW5zaWduZWQgY2hhciAqKSByeGgsIHNpemVvZihkMTFyeGhkcl90KSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlJhdyBSeERlc2M6XG4iKTsKKwlwcmludF9oZXhfZHVtcF9ieXRlcygiIiwgRFVNUF9QUkVGSVhfT0ZGU0VULCByeGgsIHNpemVvZihkMTFyeGhkcl90KSk7CiAKIAliY21fZm9ybWF0X2ZsYWdzKG1hY3N0YXRfZmxhZ3MsIG1hY3N0YXR1czEsIGZsYWdzdHIsIDY0KTsKIApAQCAtNTAzMyw4ICs0NTc2LDYgQEAKIAkJfQogCX0KIAkqcCA9ICdcMCc7Ci0JQVNTRVJUKHAgPCBlbmRwKTsKLQogCXJldHVybiAoaW50KShwIC0gYnVmKTsKIH0KICNlbmRpZgkJCQkvKiBkZWZpbmVkKEJDTURCRykgKi8KQEAgLTUwNTUsMTMgKzQ1OTYsMTMgQEAKICAqCiAgKiBSZXR1cm5zIHRydWUgaWYgcGFja2V0IGNvbnN1bWVkIChxdWV1ZWQpLCBmYWxzZSBpZiBub3QuCiAgKi8KLWJvb2wgQkNNRkFTVFBBVEgKK2Jvb2wKIHdsY19wcmVjX2VucShzdHJ1Y3Qgd2xjX2luZm8gKndsYywgc3RydWN0IHBrdHEgKnEsIHZvaWQgKnBrdCwgaW50IHByZWMpCiB7CiAJcmV0dXJuIHdsY19wcmVjX2VucV9oZWFkKHdsYywgcSwgcGt0LCBwcmVjLCBmYWxzZSk7CiB9CiAKLWJvb2wgQkNNRkFTVFBBVEgKK2Jvb2wKIHdsY19wcmVjX2VucV9oZWFkKHN0cnVjdCB3bGNfaW5mbyAqd2xjLCBzdHJ1Y3QgcGt0cSAqcSwgc3RydWN0IHNrX2J1ZmYgKnBrdCwKIAkJICBpbnQgcHJlYywgYm9vbCBoZWFkKQogewpAQCAtNTA3MiwxMSArNDYxMywxMCBAQAogCWlmIChwa3RxX3BmdWxsKHEsIHByZWMpKQogCQllcHJlYyA9IHByZWM7CiAJZWxzZSBpZiAocGt0cV9mdWxsKHEpKSB7Ci0JCXAgPSBwa3RxX3BlZWtfdGFpbChxLCAmZXByZWMpOwotCQlBU1NFUlQocCAhPSBOVUxMKTsKKwkJcCA9IGJjbV9wa3RxX3BlZWtfdGFpbChxLCAmZXByZWMpOwogCQlpZiAoZXByZWMgPiBwcmVjKSB7Ci0JCQlXTF9FUlJPUigiJXM6IEZhaWxpbmc6IGVwcmVjICVkID4gcHJlYyAlZFxuIiwKLQkJCQkgX19mdW5jX18sIGVwcmVjLCBwcmVjKTsKKwkJCXdpcGh5X2Vycih3bGMtPndpcGh5LCAiJXM6IEZhaWxpbmc6IGVwcmVjICVkID4gcHJlYyAlZCIKKwkJCQkgICJcbiIsIF9fZnVuY19fLCBlcHJlYywgcHJlYyk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAl9CkBAIC01MDg1LDY5ICs0NjI1LDUxIEBACiAJaWYgKGVwcmVjID49IDApIHsKIAkJYm9vbCBkaXNjYXJkX29sZGVzdDsKIAotCQkvKiBEZXRlY3QgcXVldWVpbmcgdG8gdW5jb25maWd1cmVkIHByZWNlZGVuY2UgKi8KLQkJQVNTRVJUKCFwa3RxX3BlbXB0eShxLCBlcHJlYykpOwotCiAJCWRpc2NhcmRfb2xkZXN0ID0gQUNfQklUTUFQX1RTVCh3bGMtPndtZV9kcCwgZXByZWMpOwogCiAJCS8qIFJlZnVzZSBuZXdlciBwYWNrZXQgdW5sZXNzIGNvbmZpZ3VyZWQgdG8gZGlzY2FyZCBvbGRlc3QgKi8KIAkJaWYgKGVwcmVjID09IHByZWMgJiYgIWRpc2NhcmRfb2xkZXN0KSB7Ci0JCQlXTF9FUlJPUigiJXM6IE5vIHdoZXJlIHRvIGdvLCBwcmVjID09ICVkXG4iLAotCQkJCSBfX2Z1bmNfXywgcHJlYyk7CisJCQl3aXBoeV9lcnIod2xjLT53aXBoeSwgIiVzOiBObyB3aGVyZSB0byBnbywgcHJlYyA9PSAlZCIKKwkJCQkgICJcbiIsIF9fZnVuY19fLCBwcmVjKTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQogCiAJCS8qIEV2aWN0IHBhY2tldCBhY2NvcmRpbmcgdG8gZGlzY2FyZCBwb2xpY3kgKi8KLQkJcCA9IGRpc2NhcmRfb2xkZXN0ID8gcGt0cV9wZGVxKHEsIGVwcmVjKSA6IHBrdHFfcGRlcV90YWlsKHEsCi0JCQkJCQkJCQkgIGVwcmVjKTsKLQkJQVNTRVJUKHAgIT0gTlVMTCk7Ci0KLQkJLyogSW5jcmVtZW50IHdtZSBzdGF0cyAqLwotCQlpZiAoV01FX0VOQUIod2xjLT5wdWIpKSB7Ci0JCQlXTENOVElOQ1Iod2xjLT5wdWItPl93bWVfY250LT4KLQkJCQkgIHR4X2ZhaWxlZFtXTUVfUFJJTzJBQyhwLT5wcmlvcml0eSldLnBhY2tldHMpOwotCQkJV0xDTlRBREQod2xjLT5wdWItPl93bWVfY250LT4KLQkJCQkgdHhfZmFpbGVkW1dNRV9QUklPMkFDKHAtPnByaW9yaXR5KV0uYnl0ZXMsCi0JCQkJIHBrdHRvdGxlbihwKSk7Ci0JCX0KLQkJcGt0X2J1Zl9mcmVlX3NrYihwKTsKLQkJd2xjLT5wdWItPl9jbnQtPnR4bm9idWYrKzsKKwkJcCA9IGRpc2NhcmRfb2xkZXN0ID8gYmNtX3BrdHFfcGRlcShxLCBlcHJlYykgOgorCQkJYmNtX3BrdHFfcGRlcV90YWlsKHEsIGVwcmVjKTsKKwkJYmNtX3BrdF9idWZfZnJlZV9za2IocCk7CiAJfQogCiAJLyogRW5xdWV1ZSAqLwogCWlmIChoZWFkKQotCQlwID0gcGt0cV9wZW5xX2hlYWQocSwgcHJlYywgcGt0KTsKKwkJcCA9IGJjbV9wa3RxX3BlbnFfaGVhZChxLCBwcmVjLCBwa3QpOwogCWVsc2UKLQkJcCA9IHBrdHFfcGVucShxLCBwcmVjLCBwa3QpOwotCUFTU0VSVChwICE9IE5VTEwpOworCQlwID0gYmNtX3BrdHFfcGVucShxLCBwcmVjLCBwa3QpOwogCiAJcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQkNNRkFTVFBBVEggd2xjX3R4cV9lbnEodm9pZCAqY3R4LCBzdHJ1Y3Qgc2NiICpzY2IsIHN0cnVjdCBza19idWZmICpzZHUsCit2b2lkIHdsY190eHFfZW5xKHZvaWQgKmN0eCwgc3RydWN0IHNjYiAqc2NiLCBzdHJ1Y3Qgc2tfYnVmZiAqc2R1LAogCQkJICAgICB1aW50IHByZWMpCiB7CiAJc3RydWN0IHdsY19pbmZvICp3bGMgPSAoc3RydWN0IHdsY19pbmZvICopIGN0eDsKLQlzdHJ1Y3Qgd2xjX3R4cV9pbmZvICpxaSA9IHdsYy0+YWN0aXZlX3F1ZXVlOwkvKiBDaGVjayBtZSAqLworCXN0cnVjdCB3bGNfdHhxX2luZm8gKnFpID0gd2xjLT5wa3RfcXVldWU7CS8qIENoZWNrIG1lICovCiAJc3RydWN0IHBrdHEgKnEgPSAmcWktPnE7CiAJaW50IHByaW87CiAKIAlwcmlvID0gc2R1LT5wcmlvcml0eTsKIAotCUFTU0VSVChwa3RxX21heChxKSA+PSB3bGMtPnB1Yi0+dHVuYWJsZXMtPmRhdGFoaXdhdCk7Ci0KIAlpZiAoIXdsY19wcmVjX2VucSh3bGMsIHEsIHNkdSwgcHJlYykpIHsKIAkJaWYgKCFFRENGX0VOQUIod2xjLT5wdWIpCiAJCSAgICB8fCAod2xjLT5wdWItPndsZmVhdHVyZWZsYWcgJiBXTF9TV0ZMX0ZMT1dDT05UUk9MKSkKLQkJCVdMX0VSUk9SKCJ3bCVkOiB3bGNfdHhxX2VucTogdHhxIG92ZXJmbG93XG4iLAotCQkJCSB3bGMtPnB1Yi0+dW5pdCk7CisJCQl3aXBoeV9lcnIod2xjLT53aXBoeSwgIndsJWQ6IHdsY190eHFfZW5xOiB0eHEgb3ZlcmZsb3ciCisJCQkJICAiXG4iLCB3bGMtPnB1Yi0+dW5pdCk7CiAKIAkJLyoKIAkJICogWFhYIHdlIG1pZ2h0IGhpdCB0aGlzIGNvbmR0aW9uIGluIGNhc2UKIAkJICogcGFja2V0IGZsb29kaW5nIGZyb20gbWFjODAyMTEgc3RhY2sKIAkJICovCi0JCXBrdF9idWZfZnJlZV9za2Ioc2R1KTsKLQkJd2xjLT5wdWItPl9jbnQtPnR4bm9idWYrKzsKKwkJYmNtX3BrdF9idWZfZnJlZV9za2Ioc2R1KTsKIAl9CiAKIAkvKiBDaGVjayBpZiBmbG93IGNvbnRyb2wgbmVlZHMgdG8gYmUgdHVybmVkIG9uIGFmdGVyIGVucXVldWluZyB0aGUgcGFja2V0CkBAIC01MTY3LDcgKzQ2ODksNyBAQAogCX0KIH0KIAotYm9vbCBCQ01GQVNUUEFUSAorYm9vbAogd2xjX3NlbmRwa3RfbWFjODAyMTEoc3RydWN0IHdsY19pbmZvICp3bGMsIHN0cnVjdCBza19idWZmICpzZHUsCiAJCSAgICAgc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CkBAIC01MTc3LDQzICs0Njk5LDMwIEBACiAJc3RydWN0IHNjYiAqc2NiID0gJmdsb2JhbF9zY2I7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmQxMV9oZWFkZXIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikoc2R1LT5kYXRhKTsKIAotCUFTU0VSVChzZHUpOwotCiAJLyogODAyLjExIHN0YW5kYXJkIHJlcXVpcmVzIG1hbmFnZW1lbnQgdHJhZmZpYyB0byBnbyBhdCBoaWdoZXN0IHByaW9yaXR5ICovCiAJcHJpbyA9IGllZWU4MDIxMV9pc19kYXRhKGQxMV9oZWFkZXItPmZyYW1lX2NvbnRyb2wpID8gc2R1LT5wcmlvcml0eSA6CiAJCU1BWFBSSU87CiAJZmlmbyA9IHByaW8yZmlmb1twcmlvXTsKLQotCUFTU0VSVCgodWludCkgc2tiX2hlYWRyb29tKHNkdSkgPj0gVFhPRkYpOwotCUFTU0VSVCghKHNkdS0+bmV4dCkpOwotCUFTU0VSVCghKHNkdS0+cHJldikpOwotCUFTU0VSVChmaWZvIDwgTkZJRk8pOwotCiAJcGt0ID0gc2R1OwogCWlmICh1bmxpa2VseQogCSAgICAod2xjX2QxMWhkcnNfbWFjODAyMTEod2xjLCBodywgcGt0LCBzY2IsIDAsIDEsIGZpZm8sIDAsIE5VTEwsIDApKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJd2xjX3R4cV9lbnEod2xjLCBzY2IsIHBrdCwgV0xDX1BSSU9fVE9fUFJFQyhwcmlvKSk7Ci0Jd2xjX3NlbmRfcSh3bGMsIHdsYy0+YWN0aXZlX3F1ZXVlKTsKLQotCXdsYy0+cHViLT5fY250LT5pZWVlX3R4Kys7CisJd2xjX3NlbmRfcSh3bGMpOwogCXJldHVybiAwOwogfQogCi12b2lkIEJDTUZBU1RQQVRIIHdsY19zZW5kX3Eoc3RydWN0IHdsY19pbmZvICp3bGMsIHN0cnVjdCB3bGNfdHhxX2luZm8gKnFpKQordm9pZCB3bGNfc2VuZF9xKHN0cnVjdCB3bGNfaW5mbyAqd2xjKQogewogCXN0cnVjdCBza19idWZmICpwa3RbRE9UMTFfTUFYTlVNRlJBR1NdOwogCWludCBwcmVjOwogCXUxNiBwcmVjX21hcDsKIAlpbnQgZXJyID0gMCwgaSwgY291bnQ7CiAJdWludCBmaWZvOworCXN0cnVjdCB3bGNfdHhxX2luZm8gKnFpID0gd2xjLT5wa3RfcXVldWU7CiAJc3RydWN0IHBrdHEgKnEgPSAmcWktPnE7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvOwogCi0JLyogb25seSBkbyB3b3JrIGZvciB0aGUgYWN0aXZlIHF1ZXVlICovCi0JaWYgKHFpICE9IHdsYy0+YWN0aXZlX3F1ZXVlKQotCQlyZXR1cm47Ci0KIAlpZiAoaW5fc2VuZF9xKQogCQlyZXR1cm47CiAJZWxzZQpAQCAtNTIyNCw3ICs0NzMzLDcgQEAKIAkvKiBTZW5kIGFsbCB0aGUgZW5xJ2QgcGt0cyB0aGF0IHdlIGNhbi4KIAkgKiBEZXF1ZXVlIHBhY2tldHMgd2l0aCBwcmVjZWRlbmNlIHdpdGggZW1wdHkgSFcgZmlmbyBvbmx5CiAJICovCi0Jd2hpbGUgKHByZWNfbWFwICYmIChwa3RbMF0gPSBwa3RxX21kZXEocSwgcHJlY19tYXAsICZwcmVjKSkpIHsKKwl3aGlsZSAocHJlY19tYXAgJiYgKHBrdFswXSA9IGJjbV9wa3RxX21kZXEocSwgcHJlY19tYXAsICZwcmVjKSkpIHsKIAkJdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IocGt0WzBdKTsKIAkJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkgewogCQkJZXJyID0gd2xjX3NlbmRhbXBkdSh3bGMtPmFtcGR1LCBxaSwgcGt0LCBwcmVjKTsKQEAgLTUyMzgsOCArNDc0Nyw4IEBACiAJCQl9CiAJCX0KIAotCQlpZiAoZXJyID09IEJDTUVfQlVTWSkgewotCQkJcGt0cV9wZW5xX2hlYWQocSwgcHJlYywgcGt0WzBdKTsKKwkJaWYgKGVyciA9PSAtRUJVU1kpIHsKKwkJCWJjbV9wa3RxX3BlbnFfaGVhZChxLCBwcmVjLCBwa3RbMF0pOwogCQkJLyogSWYgc2VuZCBmYWlsZWQgZHVlIHRvIGFueSBvdGhlciByZWFzb24gdGhhbiBhIGNoYW5nZSBpbgogCQkJICogSFcgRklGTyBjb25kaXRpb24sIHF1aXQuIE90aGVyd2lzZSwgcmVhZCB0aGUgbmV3IHByZWNfbWFwIQogCQkJICovCkBAIC01MjkwLDE0ICs0Nzk5LDEzIEBACiAJcmV0dXJuIGZyYW1laWQ7CiB9CiAKLXZvaWQgQkNNRkFTVFBBVEgKK3ZvaWQKIHdsY190eGZpZm8oc3RydWN0IHdsY19pbmZvICp3bGMsIHVpbnQgZmlmbywgc3RydWN0IHNrX2J1ZmYgKnAsIGJvb2wgY29tbWl0LAogCSAgIHM4IHR4cGt0cGVuZCkKIHsKIAl1MTYgZnJhbWVpZCA9IElOVkFMSURGSUQ7CiAJZDExdHhoX3QgKnR4aDsKIAotCUFTU0VSVChmaWZvIDwgTkZJRk8pOwogCXR4aCA9IChkMTF0eGhfdCAqKSAocC0+ZGF0YSk7CiAKIAkvKiBXaGVuIGEgQkMvTUMgZnJhbWUgaXMgYmVpbmcgY29tbWl0dGVkIHRvIHRoZSBCQ01DIGZpZm8gdmlhIERNQSAoTk9UIFBJTyksIHVwZGF0ZQpAQCAtNTMxNyw3ICs0ODI1LDcgQEAKIAkgKi8KIAlpZiAoY29tbWl0KSB7CiAJCVRYUEtUUEVORElOQyh3bGMsIGZpZm8sIHR4cGt0cGVuZCk7Ci0JCVdMX1RSQUNFKCJ3bGNfdHhmaWZvLCBwa3RwZW5kIGluYyAlZCB0byAlZFxuIiwKKwkJQkNNTVNHKHdsYy0+d2lwaHksICJwa3RwZW5kIGluYyAlZCB0byAlZFxuIiwKIAkJCSB0eHBrdHBlbmQsIFRYUEtUUEVOREdFVCh3bGMsIGZpZm8pKTsKIAl9CiAKQEAgLTUzMjYsNTcgKzQ4MzQsMTEgQEAKIAkJQkNNQ0ZJRCh3bGMsIGZyYW1laWQpOwogCiAJaWYgKGRtYV90eGZhc3Qod2xjLT5ody0+ZGlbZmlmb10sIHAsIGNvbW1pdCkgPCAwKSB7Ci0JCVdMX0VSUk9SKCJ3bGNfdHhmaWZvOiBmYXRhbCwgdG9zcyBmcmFtZXMgISEhXG4iKTsKKwkJd2lwaHlfZXJyKHdsYy0+d2lwaHksICJ3bGNfdHhmaWZvOiBmYXRhbCwgdG9zcyBmcmFtZXMgISEhXG4iKTsKIAl9CiB9CiAKLXN0YXRpYyB1MTYKLXdsY19jb21wdXRlX2FpcnRpbWUoc3RydWN0IHdsY19pbmZvICp3bGMsIHJhdGVzcGVjX3QgcnNwZWMsIHVpbnQgbGVuZ3RoKQotewotCXUxNiB1c2VjID0gMDsKLQl1aW50IG1hY19yYXRlID0gUlNQRUMyUkFURShyc3BlYyk7Ci0JdWludCBuc3ltczsKLQotCWlmIChJU19NQ1MocnNwZWMpKSB7Ci0JCS8qIG5vdCBzdXBwb3J0ZWQgeWV0ICovCi0JCUFTU0VSVCgwKTsKLQl9IGVsc2UgaWYgKElTX09GRE0ocnNwZWMpKSB7Ci0JCS8qIG5zeW1zID0gQ2VpbGluZyhOYml0cyAvIChOYml0cy9zeW0pKQotCQkgKgotCQkgKiBOYml0cyA9IGxlbmd0aCAqIDgKLQkJICogTmJpdHMvc3ltID0gTWJwcyAqIDQgPSBtYWNfcmF0ZSAqIDIKLQkJICovCi0JCW5zeW1zID0gQ0VJTCgobGVuZ3RoICogOCksIChtYWNfcmF0ZSAqIDIpKTsKLQotCQkvKiB1c2VjID0gc3ltYm9scyAqIHVzZWMvc3ltYm9sICovCi0JCXVzZWMgPSAodTE2KSAobnN5bXMgKiBBUEhZX1NZTUJPTF9USU1FKTsKLQkJcmV0dXJuIHVzZWM7Ci0JfSBlbHNlIHsKLQkJc3dpdGNoIChtYWNfcmF0ZSkgewotCQljYXNlIFdMQ19SQVRFXzFNOgotCQkJdXNlYyA9IGxlbmd0aCA8PCAzOwotCQkJYnJlYWs7Ci0JCWNhc2UgV0xDX1JBVEVfMk06Ci0JCQl1c2VjID0gbGVuZ3RoIDw8IDI7Ci0JCQlicmVhazsKLQkJY2FzZSBXTENfUkFURV81TTU6Ci0JCQl1c2VjID0gKGxlbmd0aCA8PCA0KSAvIDExOwotCQkJYnJlYWs7Ci0JCWNhc2UgV0xDX1JBVEVfMTFNOgotCQkJdXNlYyA9IChsZW5ndGggPDwgMykgLyAxMTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJV0xfRVJST1IoIndsJWQ6IHdsY19jb21wdXRlX2FpcnRpbWU6IHVuc3VwcG9ydGVkIHJzcGVjIDB4JXhcbiIsCi0JCQkJIHdsYy0+cHViLT51bml0LCByc3BlYyk7Ci0JCQlBU1NFUlQoKGNvbnN0IGNoYXIgKikiQmFkIHBoeV9yYXRlIiA9PSBOVUxMKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmV0dXJuIHVzZWM7Ci19Ci0KLXZvaWQgQkNNRkFTVFBBVEgKK3ZvaWQKIHdsY19jb21wdXRlX3BsY3Aoc3RydWN0IHdsY19pbmZvICp3bGMsIHJhdGVzcGVjX3QgcnNwZWMsIHVpbnQgbGVuZ3RoLCB1OCAqcGxjcCkKIHsKIAlpZiAoSVNfTUNTKHJzcGVjKSkgewpAQCAtNTM4NCw3ICs0ODQ2LDcgQEAKIAl9IGVsc2UgaWYgKElTX09GRE0ocnNwZWMpKSB7CiAJCXdsY19jb21wdXRlX29mZG1fcGxjcChyc3BlYywgbGVuZ3RoLCBwbGNwKTsKIAl9IGVsc2UgewotCQl3bGNfY29tcHV0ZV9jY2tfcGxjcChyc3BlYywgbGVuZ3RoLCBwbGNwKTsKKwkJd2xjX2NvbXB1dGVfY2NrX3BsY3Aod2xjLCByc3BlYywgbGVuZ3RoLCBwbGNwKTsKIAl9CiAJcmV0dXJuOwogfQpAQCAtNTM5Myw3ICs0ODU1LDYgQEAKIHN0YXRpYyB2b2lkIHdsY19jb21wdXRlX21pbW9fcGxjcChyYXRlc3BlY190IHJzcGVjLCB1aW50IGxlbmd0aCwgdTggKnBsY3ApCiB7CiAJdTggbWNzID0gKHU4KSAocnNwZWMgJiBSU1BFQ19SQVRFX01BU0spOwotCUFTU0VSVChJU19NQ1MocnNwZWMpKTsKIAlwbGNwWzBdID0gbWNzOwogCWlmIChSU1BFQ19JUzQwTUhaKHJzcGVjKSB8fCAobWNzID09IDMyKSkKIAkJcGxjcFswXSB8PSBNSU1PX1BMQ1BfNDBNSFo7CkBAIC01NDA1LDE5ICs0ODY2LDE1IEBACiB9CiAKIC8qIFJhdGU6IDgwMi4xMSByYXRlIGNvZGUsIGxlbmd0aDogUFNEVSBsZW5ndGggaW4gb2N0ZXRzICovCi1zdGF0aWMgdm9pZCBCQ01GQVNUUEFUSAorc3RhdGljIHZvaWQKIHdsY19jb21wdXRlX29mZG1fcGxjcChyYXRlc3BlY190IHJzcGVjLCB1MzIgbGVuZ3RoLCB1OCAqcGxjcCkKIHsKIAl1OCByYXRlX3NpZ25hbDsKIAl1MzIgdG1wID0gMDsKIAlpbnQgcmF0ZSA9IFJTUEVDMlJBVEUocnNwZWMpOwogCi0JQVNTRVJUKElTX09GRE0ocnNwZWMpKTsKLQogCS8qIGVuY29kZSByYXRlIHBlciA4MDIuMTFhLTE5OTkgc2VjIDE3LjMuNC4xLCB3aXRoIGxzYiB0cmFuc21pdHRlZCBmaXJzdCAqLwotCXJhdGVfc2lnbmFsID0gcmF0ZV9pbmZvW3JhdGVdICYgUkFURV9NQVNLOwotCUFTU0VSVChyYXRlX3NpZ25hbCAhPSAwKTsKLQorCXJhdGVfc2lnbmFsID0gcmF0ZV9pbmZvW3JhdGVdICYgV0xDX1JBVEVfTUFTSzsKIAltZW1zZXQocGxjcCwgMCwgRDExX1BIWV9IRFJfTEVOKTsKIAlEMTFBX1BIWV9IRFJfU1JBVEUoKG9mZG1fcGh5X2hkcl90ICopIHBsY3AsIHJhdGVfc2lnbmFsKTsKIApAQCAtNTQzNiw3ICs0ODkzLDggQEAKICAqIEJyb2tlbiBvdXQgZm9yIFBSUS4KICAqLwogCi1zdGF0aWMgdm9pZCB3bGNfY2NrX3BsY3Bfc2V0KGludCByYXRlXzUwMCwgdWludCBsZW5ndGgsIHU4ICpwbGNwKQorc3RhdGljIHZvaWQgd2xjX2Nja19wbGNwX3NldChzdHJ1Y3Qgd2xjX2luZm8gKndsYywgaW50IHJhdGVfNTAwLCB1aW50IGxlbmd0aCwKKwkJCSAgICAgdTggKnBsY3ApCiB7CiAJdTE2IHVzZWMgPSAwOwogCXU4IGxlID0gMDsKQEAgLTU0NjMsNyArNDkyMSw4IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJV0xfRVJST1IoIndsY19jY2tfcGxjcF9zZXQ6IHVuc3VwcG9ydGVkIHJhdGUgJWRcbiIsIHJhdGVfNTAwKTsKKwkJd2lwaHlfZXJyKHdsYy0+d2lwaHksICJ3bGNfY2NrX3BsY3Bfc2V0OiB1bnN1cHBvcnRlZCByYXRlICVkIgorCQkJICAiXG4iLCByYXRlXzUwMCk7CiAJCXJhdGVfNTAwID0gV0xDX1JBVEVfMU07CiAJCXVzZWMgPSBsZW5ndGggPDwgMzsKIAkJYnJlYWs7CkBAIC01NDgxLDEzICs0OTQwLDEyIEBACiB9CiAKIC8qIFJhdGU6IDgwMi4xMSByYXRlIGNvZGUsIGxlbmd0aDogUFNEVSBsZW5ndGggaW4gb2N0ZXRzICovCi1zdGF0aWMgdm9pZCB3bGNfY29tcHV0ZV9jY2tfcGxjcChyYXRlc3BlY190IHJzcGVjLCB1aW50IGxlbmd0aCwgdTggKnBsY3ApCitzdGF0aWMgdm9pZCB3bGNfY29tcHV0ZV9jY2tfcGxjcChzdHJ1Y3Qgd2xjX2luZm8gKndsYywgcmF0ZXNwZWNfdCByc3BlYywKKwkJCQkgdWludCBsZW5ndGgsIHU4ICpwbGNwKQogewogCWludCByYXRlID0gUlNQRUMyUkFURShyc3BlYyk7CiAKLQlBU1NFUlQoSVNfQ0NLKHJzcGVjKSk7Ci0KLQl3bGNfY2NrX3BsY3Bfc2V0KHJhdGUsIGxlbmd0aCwgcGxjcCk7CisJd2xjX2Nja19wbGNwX3NldCh3bGMsIHJhdGUsIGxlbmd0aCwgcGxjcCk7CiB9CiAKIC8qIHdsY19jb21wdXRlX2ZyYW1lX2R1cigpCkBAIC01NTAwLDcgKzQ5NTgsNyBAQAogICogbmV4dF9mcmFnX2xlbgluZXh0IE1QRFUgbGVuZ3RoIGluIGJ5dGVzCiAgKiBwcmVhbWJsZV90eXBlCXVzZSBzaG9ydC9HRiBvciBsb25nL01NIFBMQ1AgaGVhZGVyCiAgKi8KLXN0YXRpYyB1MTYgQkNNRkFTVFBBVEgKK3N0YXRpYyB1MTYKIHdsY19jb21wdXRlX2ZyYW1lX2R1cihzdHJ1Y3Qgd2xjX2luZm8gKndsYywgcmF0ZXNwZWNfdCByYXRlLCB1OCBwcmVhbWJsZV90eXBlLAogCQkgICAgICB1aW50IG5leHRfZnJhZ19sZW4pCiB7CkBAIC01NTM0LDcgKzQ5OTIsNyBAQAogICogcmF0ZQkJCW5leHQgTVBEVSByYXRlIGluIHVuaXQgb2YgNTAwa2JwcwogICogZnJhbWVfbGVuCQluZXh0IE1QRFUgZnJhbWUgbGVuZ3RoIGluIGJ5dGVzCiAgKi8KLXUxNiBCQ01GQVNUUEFUSAordTE2CiB3bGNfY29tcHV0ZV9ydHNjdHNfZHVyKHN0cnVjdCB3bGNfaW5mbyAqd2xjLCBib29sIGN0c19vbmx5LCByYXRlc3BlY190IHJ0c19yYXRlLAogCQkgICAgICAgcmF0ZXNwZWNfdCBmcmFtZV9yYXRlLCB1OCBydHNfcHJlYW1ibGVfdHlwZSwKIAkJICAgICAgIHU4IGZyYW1lX3ByZWFtYmxlX3R5cGUsIHVpbnQgZnJhbWVfbGVuLCBib29sIGJhKQpAQCAtNTU2NiwzMyArNTAyNCw3IEBACiAJcmV0dXJuIGR1cjsKIH0KIAotc3RhdGljIGJvb2wgd2xjX3BoeV9yc3BlY19jaGVjayhzdHJ1Y3Qgd2xjX2luZm8gKndsYywgdTE2IGJ3LCByYXRlc3BlY190IHJzcGVjKQotewotCWlmIChJU19NQ1MocnNwZWMpKSB7Ci0JCXVpbnQgbWNzID0gcnNwZWMgJiBSU1BFQ19SQVRFX01BU0s7Ci0KLQkJaWYgKG1jcyA8IDgpIHsKLQkJCUFTU0VSVChSU1BFQ19TVEYocnNwZWMpIDwgUEhZX1RYQzFfTU9ERV9TRE0pOwotCQl9IGVsc2UgaWYgKChtY3MgPj0gOCkgJiYgKG1jcyA8PSAyMykpIHsKLQkJCUFTU0VSVChSU1BFQ19TVEYocnNwZWMpID09IFBIWV9UWEMxX01PREVfU0RNKTsKLQkJfSBlbHNlIGlmIChtY3MgPT0gMzIpIHsKLQkJCUFTU0VSVChSU1BFQ19TVEYocnNwZWMpIDwgUEhZX1RYQzFfTU9ERV9TRE0pOwotCQkJQVNTRVJUKGJ3ID09IFBIWV9UWEMxX0JXXzQwTUhaX0RVUCk7Ci0JCX0KLQl9IGVsc2UgaWYgKElTX09GRE0ocnNwZWMpKSB7Ci0JCUFTU0VSVChSU1BFQ19TVEYocnNwZWMpIDwgUEhZX1RYQzFfTU9ERV9TVEJDKTsKLQl9IGVsc2UgewotCQlBU1NFUlQoSVNfQ0NLKHJzcGVjKSk7Ci0KLQkJQVNTRVJUKChidyA9PSBQSFlfVFhDMV9CV18yME1IWikKLQkJICAgICAgIHx8IChidyA9PSBQSFlfVFhDMV9CV18yME1IWl9VUCkpOwotCQlBU1NFUlQoUlNQRUNfU1RGKHJzcGVjKSA9PSBQSFlfVFhDMV9NT0RFX1NJU08pOwotCX0KLQotCXJldHVybiB0cnVlOwotfQotCi11MTYgQkNNRkFTVFBBVEggd2xjX3BoeXR4Y3RsMV9jYWxjKHN0cnVjdCB3bGNfaW5mbyAqd2xjLCByYXRlc3BlY190IHJzcGVjKQordTE2IHdsY19waHl0eGN0bDFfY2FsYyhzdHJ1Y3Qgd2xjX2luZm8gKndsYywgcmF0ZXNwZWNfdCByc3BlYykKIHsKIAl1MTYgcGh5Y3RsMSA9IDA7CiAJdTE2IGJ3OwpAQCAtNTYwMywxMiArNTAzNSwxMCBAQAogCQlidyA9IFJTUEVDX0dFVF9CVyhyc3BlYyk7CiAJCS8qIDEwTWh6IGlzIG5vdCBzdXBwb3J0ZWQgeWV0ICovCiAJCWlmIChidyA8IFBIWV9UWEMxX0JXXzIwTUhaKSB7Ci0JCQlXTF9FUlJPUigid2xjX3BoeXR4Y3RsMV9jYWxjOiBidyAlZCBpcyBub3Qgc3VwcG9ydGVkIHlldCwgc2V0IHRvIDIwTFxuIiwKLQkJCQkgYncpOworCQkJd2lwaHlfZXJyKHdsYy0+d2lwaHksICJ3bGNfcGh5dHhjdGwxX2NhbGM6IGJ3ICVkIGlzICIKKwkJCQkgICJub3Qgc3VwcG9ydGVkIHlldCwgc2V0IHRvIDIwTFxuIiwgYncpOwogCQkJYncgPSBQSFlfVFhDMV9CV18yME1IWjsKIAkJfQotCi0JCXdsY19waHlfcnNwZWNfY2hlY2sod2xjLCBidywgcnNwZWMpOwogCX0KIAogCWlmIChJU19NQ1MocnNwZWMpKSB7CkBAIC01NjI5LDggKzUwNTksOCBAQAogCQkvKiBnZXQgdGhlIHBoeWN0bCBieXRlIGZyb20gcmF0ZSBwaHljZmcgdGFibGUgKi8KIAkJcGh5Y2ZnID0gd2xjX3JhdGVfbGVnYWN5X3BoeWN0bChSU1BFQzJSQVRFKHJzcGVjKSk7CiAJCWlmIChwaHljZmcgPT0gLTEpIHsKLQkJCVdMX0VSUk9SKCJ3bGNfcGh5dHhjdGwxX2NhbGM6IHdyb25nIGxlZ2FjeSBPRkRNL0NDSyByYXRlXG4iKTsKLQkJCUFTU0VSVCgwKTsKKwkJCXdpcGh5X2Vycih3bGMtPndpcGh5LCAid2xjX3BoeXR4Y3RsMV9jYWxjOiB3cm9uZyAiCisJCQkJICAibGVnYWN5IE9GRE0vQ0NLIHJhdGVcbiIpOwogCQkJcGh5Y2ZnID0gMDsKIAkJfQogCQkvKiBzZXQgdGhlIHVwcGVyIGJ5dGUgb2YgcGh5Y3RsMSAqLwpAQCAtNTYzOCwxOCArNTA2OCwxMCBAQAogCQkgICAgKGJ3IHwgKHBoeWNmZyA8PCA4KSB8CiAJCSAgICAgKFJTUEVDX1NURihyc3BlYykgPDwgUEhZX1RYQzFfTU9ERV9TSElGVCkpOwogCX0KLQotI2lmZGVmIEJDTURCRwotCS8qIHBoeSBjbG9jayBtdXN0IHN1cHBvcnQgNDBNaHogaWYgdHggZGVzY3JpcHRvciB1c2VzIGl0ICovCi0JaWYgKChwaHljdGwxICYgUEhZX1RYQzFfQldfTUFTSykgPj0gUEhZX1RYQzFfQldfNDBNSFopIHsKLQkJQVNTRVJUKENIU1BFQ19XTENfQlcod2xjLT5jaGFuc3BlYykgPT0gV0xDXzQwX01IWik7Ci0JCUFTU0VSVCh3bGMtPmNoYW5zcGVjID09IHdsY19waHlfY2hhbnNwZWNfZ2V0KHdsYy0+YmFuZC0+cGkpKTsKLQl9Ci0jZW5kaWYJCQkJLyogQkNNREJHICovCiAJcmV0dXJuIHBoeWN0bDE7CiB9CiAKLXJhdGVzcGVjX3QgQkNNRkFTVFBBVEgKK3JhdGVzcGVjX3QKIHdsY19yc3BlY190b19ydHNfcnNwZWMoc3RydWN0IHdsY19pbmZvICp3bGMsIHJhdGVzcGVjX3QgcnNwZWMsIGJvb2wgdXNlX3JzcGVjLAogCQkgICAgICAgdTE2IG1pbW9fY3RsY2hidykKIHsKQEAgLTU3MDUsNyArNTEyNyw3IEBACiAgKiBoZWFkcm9vbSA9PSBEMTFfUEhZX0hEUl9MRU4gKyBEMTFfVFhIX0xFTiAoRDExX1RYSF9MRU4gaXMgbm93IDEwNCBieXRlcykKICAqCiAgKi8KLXN0YXRpYyB1MTYgQkNNRkFTVFBBVEgKK3N0YXRpYyB1MTYKIHdsY19kMTFoZHJzX21hYzgwMjExKHN0cnVjdCB3bGNfaW5mbyAqd2xjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcCwgc3RydWN0IHNjYiAqc2NiLCB1aW50IGZyYWcsCiAJCSAgICAgdWludCBuZnJhZ3MsIHVpbnQgcXVldWUsIHVpbnQgbmV4dF9mcmFnX2xlbiwKQEAgLTU3NDQsMTQgKzUxNjYsMTIgQEAKIAl1MTYgbWltb190eGJ3OwogCXU4IG1pbW9fcHJlYW1ibGVfdHlwZTsKIAotCUFTU0VSVChxdWV1ZSA8IE5GSUZPKTsKLQogCS8qIGxvY2F0ZSA4MDIuMTEgTUFDIGhlYWRlciAqLwogCWggPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikocC0+ZGF0YSk7CiAJcW9zID0gaWVlZTgwMjExX2lzX2RhdGFfcW9zKGgtPmZyYW1lX2NvbnRyb2wpOwogCiAJLyogY29tcHV0ZSBsZW5ndGggb2YgZnJhbWUgaW4gYnl0ZXMgZm9yIHVzZSBpbiBQTENQIGNvbXB1dGF0aW9ucyAqLwotCWxlbiA9IHBrdHRvdGxlbihwKTsKKwlsZW4gPSBiY21fcGt0dG90bGVuKHApOwogCXBoeWxlbiA9IGxlbiArIEZDU19MRU47CiAKIAkvKiBJZiBXRVAgZW5hYmxlZCwgYWRkIHJvb20gaW4gcGh5bGVuIGZvciB0aGUgYWRkaXRpb25hbCBieXRlcyBvZgpAQCAtNTc2NSw3ICs1MTg1LDYgQEAKIAogCS8qIEdldCB0eF9pbmZvICovCiAJdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IocCk7Ci0JQVNTRVJUKHR4X2luZm8pOwogCiAJLyogYWRkIFBMQ1AgKi8KIAlwbGNwID0gc2tiX3B1c2gocCwgRDExX1BIWV9IRFJfTEVOKTsKQEAgLTU3NzcsMTAgKzUxOTYsOSBAQAogCS8qIHNldHVwIGZyYW1laWQgKi8KIAlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FTU0lHTl9TRVEpIHsKIAkJLyogbm9uLUFQIFNUQSBzaG91bGQgbmV2ZXIgdXNlIEJDTUMgcXVldWUgKi8KLQkJQVNTRVJUKHF1ZXVlICE9IFRYX0JDTUNfRklGTyk7CiAJCWlmIChxdWV1ZSA9PSBUWF9CQ01DX0ZJRk8pIHsKLQkJCVdMX0VSUk9SKCJ3bCVkOiAlczogQVNTRVJUIHF1ZXVlID09IFRYX0JDTUMhXG4iLAotCQkJCSBXTENXTFVOSVQod2xjKSwgX19mdW5jX18pOworCQkJd2lwaHlfZXJyKHdsYy0+d2lwaHksICJ3bCVkOiAlczogQVNTRVJUIHF1ZXVlID09ICIKKwkJCQkgICJUWF9CQ01DIVxuIiwgV0xDV0xVTklUKHdsYyksIF9fZnVuY19fKTsKIAkJCWZyYW1laWQgPSBiY21jX2ZpZF9nZW5lcmF0ZSh3bGMsIE5VTEwsIHR4aCk7CiAJCX0gZWxzZSB7CiAJCQkvKiBJbmNyZW1lbnQgdGhlIGNvdW50ZXIgZm9yIGZpcnN0IGZyYWdtZW50ICovCkBAIC01ODAzLDEzICs1MjIxLDkgQEAKIAlpZiAoU0NCX1BTKHNjYikgfHwgaWVlZTgwMjExX2lzX2JlYWNvbihoLT5mcmFtZV9jb250cm9sKSkKIAkJbWNsIHw9IFRYQ19JR05PUkVQTVE7CiAKLQlBU1NFUlQoaHctPm1heF9yYXRlcyA8PSBJRUVFODAyMTFfVFhfTUFYX1JBVEVTKTsKLQlBU1NFUlQoaHctPm1heF9yYXRlcyA9PSAyKTsKLQogCXR4cmF0ZVswXSA9IHR4X2luZm8tPmNvbnRyb2wucmF0ZXM7CiAJdHhyYXRlWzFdID0gdHhyYXRlWzBdICsgMTsKIAotCUFTU0VSVCh0eHJhdGVbMF0tPmlkeCA+PSAwKTsKIAkvKiBpZiByYXRlIGNvbnRyb2wgYWxnb3JpdGhtIGRpZG4ndCBnaXZlIHVzIGEgZmFsbGJhY2sgcmF0ZSwgdXNlIHRoZSBwcmltYXJ5IHJhdGUgKi8KIAlpZiAodHhyYXRlWzFdLT5pZHggPCAwKSB7CiAJCXR4cmF0ZVsxXSA9IHR4cmF0ZVswXTsKQEAgLTU4MTksNyArNTIzMyw2IEBACiAJCWlzX21jc1trXSA9CiAJCSAgICB0eHJhdGVba10tPmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX01DUyA/IHRydWUgOiBmYWxzZTsKIAkJaWYgKCFpc19tY3Nba10pIHsKLQkJCUFTU0VSVCghKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkpOwogCQkJaWYgKCh0eHJhdGVba10tPmlkeCA+PSAwKQogCQkJICAgICYmICh0eHJhdGVba10tPmlkeCA8CiAJCQkJaHctPndpcGh5LT5iYW5kc1t0eF9pbmZvLT5iYW5kXS0+bl9iaXRyYXRlcykpIHsKQEAgLTU4MzEsMTAgKzUyNDQsNiBAQAogCQkJCSAgICBmbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfU0hPUlRfUFJFQU1CTEUgPwogCQkJCSAgICB0cnVlIDogZmFsc2U7CiAJCQl9IGVsc2UgewotCQkJCUFTU0VSVCgodHhyYXRlW2tdLT5pZHggPj0gMCkgJiYKLQkJCQkgICAgICAgKHR4cmF0ZVtrXS0+aWR4IDwKLQkJCQkJaHctPndpcGh5LT5iYW5kc1t0eF9pbmZvLT5iYW5kXS0+Ci0JCQkJCW5fYml0cmF0ZXMpKTsKIAkJCQlyYXRlX3ZhbFtrXSA9IFdMQ19SQVRFXzFNOwogCQkJfQogCQl9IGVsc2UgewpAQCAtNTg1Nyw3ICs1MjY2LDYgQEAKIAogCQkvKiAoMSkgUkFURTogZGV0ZXJtaW5lIGFuZCB2YWxpZGF0ZSBwcmltYXJ5IHJhdGUgYW5kIGZhbGxiYWNrIHJhdGVzICovCiAJCWlmICghUlNQRUNfQUNUSVZFKHJzcGVjW2tdKSkgewotCQkJQVNTRVJUKFJTUEVDX0FDVElWRShyc3BlY1trXSkpOwogCQkJcnNwZWNba10gPSBXTENfUkFURV8xTTsKIAkJfSBlbHNlIHsKIAkJCWlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaC0+YWRkcjEpKSB7CkBAIC01ODg1LDcgKzUyOTMsNiBAQAogCQkJCSAgICAmJiBXTENfU1RGX1NTX1NUQkNfVFgod2xjLCBzY2IpKSB7CiAJCQkJCXU4IHN0YzsKIAotCQkJCQlBU1NFUlQoV0xDX1NUQkNfQ0FQX1BIWSh3bGMpKTsKIAkJCQkJc3RjID0gMTsJLyogTnNzIGZvciBzaW5nbGUgc3RyZWFtIGlzIGFsd2F5cyAxICovCiAJCQkJCXJzcGVjW2tdIHw9CiAJCQkJCSAgICAoUEhZX1RYQzFfTU9ERV9TVEJDIDw8CkBAIC01OTE4LDcgKzUzMjUsNiBAQAogCQkJCQlpZiAod2xjLT5vZmRtXzQwdHhidyAhPSBBVVRPKQogCQkJCQkJbWltb190eGJ3ID0gd2xjLT5vZmRtXzQwdHhidzsKIAkJCQl9IGVsc2UgewotCQkJCQlBU1NFUlQoSVNfQ0NLKHJzcGVjW2tdKSk7CiAJCQkJCWlmICh3bGMtPmNja180MHR4YncgIT0gQVVUTykKIAkJCQkJCW1pbW9fdHhidyA9IHdsYy0+Y2NrXzQwdHhidzsKIAkJCQl9CkBAIC01OTU3LDkgKzUzNjMsOSBAQAogCiAJCQlpZiAoKHR4cmF0ZVtrXS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfTUNTKQogCQkJICAgICYmICghSVNfTUNTKHJzcGVjW2tdKSkpIHsKLQkJCQlXTF9FUlJPUigid2wlZDogJXM6IElFRUU4MDIxMV9UWF9SQ19NQ1MgIT0gSVNfTUNTKHJzcGVjKVxuIiwKLQkJCQkJIFdMQ1dMVU5JVCh3bGMpLCBfX2Z1bmNfXyk7Ci0JCQkJQVNTRVJUKDAgJiYgIlJhdGUgbWlzbWF0Y2giKTsKKwkJCQl3aXBoeV9lcnIod2xjLT53aXBoeSwgIndsJWQ6ICVzOiBJRUVFODAyMTFfVFhfIgorCQkJCQkgICJSQ19NQ1MgIT0gSVNfTUNTKHJzcGVjKVxuIiwKKwkJCQkJICBXTENXTFVOSVQod2xjKSwgX19mdW5jX18pOwogCQkJfQogCiAJCQlpZiAoSVNfTUNTKHJzcGVjW2tdKSkgewpAQCAtNTk3MywyMiArNTM3OSwxNSBAQAogCQkJCX0KIAkJCX0KIAotCQkJLyogbWltbyBidyBmaWVsZCBNVVNUIG5vdyBiZSB2YWxpZCBpbiB0aGUgcnNwZWMgKGl0IGFmZmVjdHMgZHVyYXRpb24gY2FsY3VsYXRpb25zKSAqLwotCQkJQVNTRVJUKFZBTElEX1JBVEVfREJHKHdsYywgcnNwZWNbMF0pKTsKLQogCQkJLyogc2hvdWxkIGJlIGJldHRlciBjb25kaXRpb25hbGl6ZWQgKi8KIAkJCWlmICghSVNfTUNTKHJzcGVjWzBdKQogCQkJICAgICYmICh0eF9pbmZvLT5jb250cm9sLnJhdGVzWzBdLgogCQkJCWZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSkpCiAJCQkJcHJlYW1ibGVfdHlwZVtrXSA9IFdMQ19TSE9SVF9QUkVBTUJMRTsKLQotCQkJQVNTRVJUKCFJU19NQ1MocnNwZWNbMF0pCi0JCQkgICAgICAgfHwgV0xDX0lTX01JTU9fUFJFQU1CTEUocHJlYW1ibGVfdHlwZVtrXSkpOwogCQl9CiAJfSBlbHNlIHsKIAkJZm9yIChrID0gMDsgayA8IGh3LT5tYXhfcmF0ZXM7IGsrKykgewogCQkJLyogU2V0IGN0cmxjaGJ3IGFzIDIwTWh6ICovCi0JCQlBU1NFUlQoIUlTX01DUyhyc3BlY1trXSkpOwogCQkJcnNwZWNba10gJj0gflJTUEVDX0JXX01BU0s7CiAJCQlyc3BlY1trXSB8PSAoUEhZX1RYQzFfQldfMjBNSFogPDwgUlNQRUNfQldfU0hJRlQpOwogCkBAIC02MDgwLDggKzU0NzksNiBAQAogCS8qIFNldCBmYWxsYmFjayByYXRlIHByZWFtYmxlIHR5cGUgKi8KIAlpZiAoKHByZWFtYmxlX3R5cGVbMV0gPT0gV0xDX1NIT1JUX1BSRUFNQkxFKSB8fAogCSAgICAocHJlYW1ibGVfdHlwZVsxXSA9PSBXTENfR0ZfUFJFQU1CTEUpKSB7Ci0JCUFTU0VSVCgocHJlYW1ibGVfdHlwZVsxXSA9PSBXTENfR0ZfUFJFQU1CTEUpIHx8Ci0JCSAgICAgICAoIUlTX01DUyhyc3BlY1sxXSkpKTsKIAkJaWYgKFJTUEVDMlJBVEUocnNwZWNbMV0pICE9IFdMQ19SQVRFXzFNKQogCQkJbWNoIHw9IFRYQ19QUkVBTUJMRV9EQVRBX0ZCX1NIT1JUOwogCX0KQEAgLTYxNDYsNyArNTU0Myw2IEBACiAJCX0KIAogCQkvKiBSVFMgUExDUCBoZWFkZXIgKi8KLQkJQVNTRVJUKElTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpdHhoLT5SVFNQaHlIZWFkZXIsIHNpemVvZih1MTYpKSk7CiAJCXJ0c19wbGNwID0gdHhoLT5SVFNQaHlIZWFkZXI7CiAJCWlmICh1c2VfY3RzKQogCQkJcnRzX3BoeWxlbiA9IERPVDExX0NUU19MRU4gKyBGQ1NfTEVOOwpAQCAtNjIyOSwxMSArNTYyNSw4IEBACiAJcGh5Y3RsID0gRlJBTUVUWVBFKHJzcGVjWzBdLCB3bGMtPm1pbW9mdCk7CiAJaWYgKChwcmVhbWJsZV90eXBlWzBdID09IFdMQ19TSE9SVF9QUkVBTUJMRSkgfHwKIAkgICAgKHByZWFtYmxlX3R5cGVbMF0gPT0gV0xDX0dGX1BSRUFNQkxFKSkgewotCQlBU1NFUlQoKHByZWFtYmxlX3R5cGVbMF0gPT0gV0xDX0dGX1BSRUFNQkxFKQotCQkgICAgICAgfHwgIUlTX01DUyhyc3BlY1swXSkpOwogCQlpZiAoUlNQRUMyUkFURShyc3BlY1swXSkgIT0gV0xDX1JBVEVfMU0pCiAJCQlwaHljdGwgfD0gUEhZX1RYQ19TSE9SVF9IRFI7Ci0JCXdsYy0+cHViLT5fY250LT50eHByc2hvcnQrKzsKIAl9CiAKIAkvKiBwaHl0eGFudCBpcyBwcm9wZXJseSBiaXQgc2hpZnRlZCAqLwpAQCAtNjI3NCwyMSArNTY2NywxMCBAQAogCQl9CiAJfQogCi0JaWYgKElTX01DUyhyc3BlY1swXSkpCi0JCUFTU0VSVChJU19NQ1MocnNwZWNbMV0pKTsKLQotCUFTU0VSVCghSVNfTUNTKHJzcGVjWzBdKSB8fAotCSAgICAgICAoKHByZWFtYmxlX3R5cGVbMF0gPT0gV0xDX01NX1BSRUFNQkxFKSA9PSAodHhoLT5NTW9kZUxlbiAhPSAwKSkpOwotCUFTU0VSVCghSVNfTUNTKHJzcGVjWzFdKSB8fAotCSAgICAgICAoKHByZWFtYmxlX3R5cGVbMV0gPT0gV0xDX01NX1BSRUFNQkxFKSA9PQotCQkodHhoLT5NTW9kZUZickxlbiAhPSAwKSkpOwotCiAJYWMgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcocCk7CiAJaWYgKFNDQl9XTUUoc2NiKSAmJiBxb3MgJiYgd2xjLT5lZGNmX3R4b3BbYWNdKSB7CiAJCXVpbnQgZnJhZ19kdXIsIGR1ciwgZHVyX2ZhbGxiYWNrOwogCi0JCUFTU0VSVCghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaC0+YWRkcjEpKTsKLQogCQkvKiBXTUU6IFVwZGF0ZSBUWE9QIHRocmVzaG9sZCAqLwogCQlpZiAoKCEodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSkgJiYgKGZyYWcgPT0gMCkpIHsKIAkJCWZyYWdfZHVyID0KQEAgLTYzNTksMTYgKzU3NDEsMTggQEAKIAkJCQkJfQogCQkJCX0KIAkJCX0gZWxzZQotCQkJCVdMX0VSUk9SKCJ3bCVkOiAlcyB0eG9wIGludmFsaWQgZm9yIHJhdGUgJWRcbiIsCi0JCQkJCSB3bGMtPnB1Yi0+dW5pdCwgZmlmb19uYW1lc1txdWV1ZV0sCi0JCQkJCSBSU1BFQzJSQVRFKHJzcGVjWzBdKSk7CisJCQkJd2lwaHlfZXJyKHdsYy0+d2lwaHksICJ3bCVkOiAlcyB0eG9wIGludmFsaWQgIgorCQkJCQkgICJmb3IgcmF0ZSAlZFxuIiwKKwkJCQkJICB3bGMtPnB1Yi0+dW5pdCwgZmlmb19uYW1lc1txdWV1ZV0sCisJCQkJCSAgUlNQRUMyUkFURShyc3BlY1swXSkpOwogCiAJCQlpZiAoZHVyID4gd2xjLT5lZGNmX3R4b3BbYWNdKQotCQkJCVdMX0VSUk9SKCJ3bCVkOiAlczogJXMgdHhvcCBleGNlZWRlZCBwaHlsZW4gJWQvJWQgZHVyICVkLyVkXG4iLAotCQkJCQkgd2xjLT5wdWItPnVuaXQsIF9fZnVuY19fLAotCQkJCQkgZmlmb19uYW1lc1txdWV1ZV0sCi0JCQkJCSBwaHlsZW4sIHdsYy0+ZnJhZ3RocmVzaFtxdWV1ZV0sCi0JCQkJCSBkdXIsIHdsYy0+ZWRjZl90eG9wW2FjXSk7CisJCQkJd2lwaHlfZXJyKHdsYy0+d2lwaHksICJ3bCVkOiAlczogJXMgdHhvcCAiCisJCQkJCSAgImV4Y2VlZGVkIHBoeWxlbiAlZC8lZCBkdXIgJWQvJWRcbiIsCisJCQkJCSAgd2xjLT5wdWItPnVuaXQsIF9fZnVuY19fLAorCQkJCQkgIGZpZm9fbmFtZXNbcXVldWVdLAorCQkJCQkgIHBoeWxlbiwgd2xjLT5mcmFndGhyZXNoW3F1ZXVlXSwKKwkJCQkJICBkdXIsIHdsYy0+ZWRjZl90eG9wW2FjXSk7CiAJCX0KIAl9CiAKQEAgLTYzNzksOCArNTc2Myw2IEBACiB7CiAJc3RydWN0IHdsY19ic3NjZmcgKmNmZyA9IHdsYy0+Y2ZnOwogCi0Jd2xjLT5wdWItPl9jbnQtPnRidHQrKzsKLQogCWlmIChCU1NDRkdfU1RBKGNmZykpIHsKIAkJLyogcnVuIHdhdGNoZG9nIGhlcmUgaWYgdGhlIHdhdGNoZG9nIHRpbWVyIGlzIG5vdCBhcm1lZCAqLwogCQlpZiAoV0xDX1dBVENIRE9HX1RCVFQod2xjKSkgewpAQCAtNjQxMCwxMjcgKzU3OTIsNiBAQAogCX0KIH0KIAotLyogR1AgdGltZXIgaXMgYSBmcmVlcnVubmluZyAzMiBiaXQgY291bnRlciwgZGVjcmVtZW50cyBhdCAxIHVzIHJhdGUgKi8KLXZvaWQgd2xjX2h3dGltZXJfZ3B0aW1lcl9zZXQoc3RydWN0IHdsY19pbmZvICp3bGMsIHVpbnQgdXMpCi17Ci0JV19SRUcoJndsYy0+cmVncy0+Z3B0aW1lciwgdXMpOwotfQotCi12b2lkIHdsY19od3RpbWVyX2dwdGltZXJfYWJvcnQoc3RydWN0IHdsY19pbmZvICp3bGMpCi17Ci0JV19SRUcoJndsYy0+cmVncy0+Z3B0aW1lciwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdsY19od3RpbWVyX2dwdGltZXJfY2Ioc3RydWN0IHdsY19pbmZvICp3bGMpCi17Ci0JLyogd2hlbiBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLCB0aGUgY291bnRlciBpcyBsb2FkZWQgd2l0aCBsYXN0IHZhbHVlCi0JICogd3JpdHRlbiBhbmQgY29udGludWUgdG8gZGVjcmVtZW50LiBTbyBpdCBoYXMgdG8gYmUgY2xlYW5lZCBmaXJzdAotCSAqLwotCVdfUkVHKCZ3bGMtPnJlZ3MtPmdwdGltZXIsIDApOwotfQotCi0vKgotICogVGhpcyBmbiBoYXMgYWxsIHRoZSBoaWdoIGxldmVsIGRwYyBwcm9jZXNzaW5nIGZyb20gd2xjX2RwYy4KLSAqIFBPTElDWTogbm8gbWFjaW5zdGF0dXMgY2hhbmdlLCBubyBib3VuZGluZyBsb29wLgotICogICAgICAgICBBbGwgZHBjIGJvdW5kaW5nIHNob3VsZCBiZSBoYW5kbGVkIGluIEJNQUMgZHBjLCBsaWtlIHR4c3RhdHVzIGFuZCByeGludAotICovCi12b2lkIHdsY19oaWdoX2RwYyhzdHJ1Y3Qgd2xjX2luZm8gKndsYywgdTMyIG1hY2ludHN0YXR1cykKLXsKLQlkMTFyZWdzX3QgKnJlZ3MgPSB3bGMtPnJlZ3M7Ci0jaWZkZWYgQkNNREJHCi0JY2hhciBmbGFnc3RyWzEyOF07Ci0Jc3RhdGljIGNvbnN0IGJjbV9iaXRfZGVzY190IGludF9mbGFnc1tdID0gewotCQl7TUlfTUFDU1NQTkRELCAiTUFDU1NQTkREIn0sCi0JCXtNSV9CQ05UUEwsICJCQ05UUEwifSwKLQkJe01JX1RCVFQsICJUQlRUIn0sCi0JCXtNSV9CQ05TVUNDRVNTLCAiQkNOU1VDQ0VTUyJ9LAotCQl7TUlfQkNOQ0FOQ0xELCAiQkNOQ0FOQ0xEIn0sCi0JCXtNSV9BVElNV0lORU5ELCAiQVRJTVdJTkVORCJ9LAotCQl7TUlfUE1RLCAiUE1RIn0sCi0JCXtNSV9OU1BFQ0dFTl8wLCAiTlNQRUNHRU5fMCJ9LAotCQl7TUlfTlNQRUNHRU5fMSwgIk5TUEVDR0VOXzEifSwKLQkJe01JX01BQ1RYRVJSLCAiTUFDVFhFUlIifSwKLQkJe01JX05TUEVDR0VOXzMsICJOU1BFQ0dFTl8zIn0sCi0JCXtNSV9QSFlUWEVSUiwgIlBIWVRYRVJSIn0sCi0JCXtNSV9QTUUsICJQTUUifSwKLQkJe01JX0dQMCwgIkdQMCJ9LAotCQl7TUlfR1AxLCAiR1AxIn0sCi0JCXtNSV9ETUFJTlQsICJETUFJTlQifSwKLQkJe01JX1RYU1RPUCwgIlRYU1RPUCJ9LAotCQl7TUlfQ0NBLCAiQ0NBIn0sCi0JCXtNSV9CR19OT0lTRSwgIkJHX05PSVNFIn0sCi0JCXtNSV9EVElNX1RCVFQsICJEVElNX1RCVFQifSwKLQkJe01JX1BSUSwgIlBSUSJ9LAotCQl7TUlfUFdSVVAsICJQV1JVUCJ9LAotCQl7TUlfUkZESVNBQkxFLCAiUkZESVNBQkxFIn0sCi0JCXtNSV9URlMsICJURlMifSwKLQkJe01JX1BIWUNIQU5HRUQsICJQSFlDSEFOR0VEIn0sCi0JCXtNSV9UTywgIlRPIn0sCi0JCXswLCBOVUxMfQotCX07Ci0KLQlpZiAobWFjaW50c3RhdHVzICYgfihNSV9UQlRUIHwgTUlfVFhTVE9QKSkgewotCQliY21fZm9ybWF0X2ZsYWdzKGludF9mbGFncywgbWFjaW50c3RhdHVzLCBmbGFnc3RyLAotCQkJCSBzaXplb2YoZmxhZ3N0cikpOwotCQlXTF9UUkFDRSgid2wlZDogbWFjaW50c3RhdHVzIDB4JXggJXNcbiIsCi0JCQkgd2xjLT5wdWItPnVuaXQsIG1hY2ludHN0YXR1cywgZmxhZ3N0cik7Ci0JfQotI2VuZGlmCQkJCS8qIEJDTURCRyAqLwotCi0JaWYgKG1hY2ludHN0YXR1cyAmIE1JX1BSUSkgewotCQkvKiBQcm9jZXNzIHByb2JlIHJlcXVlc3QgRklGTyAqLwotCQlBU1NFUlQoMCAmJiAiUFJRIEludGVycnVwdCBpbiBub24tTUJTUyIpOwotCX0KLQotCS8qIFRCVFQgaW5kaWNhdGlvbiAqLwotCS8qIHVjb2RlIG9ubHkgZ2l2ZXMgZWl0aGVyIFRCVFQgb3IgRFRJTV9UQlRULCBub3QgYm90aCAqLwotCWlmIChtYWNpbnRzdGF0dXMgJiAoTUlfVEJUVCB8IE1JX0RUSU1fVEJUVCkpCi0JCXdsY190YnR0KHdsYywgcmVncyk7Ci0KLQlpZiAobWFjaW50c3RhdHVzICYgTUlfR1AwKSB7Ci0JCVdMX0VSUk9SKCJ3bCVkOiBQU00gbWljcm9jb2RlIHdhdGNoZG9nIGZpcmVkIGF0ICVkIChzZWNvbmRzKS4gUmVzZXR0aW5nLlxuIiwKLQkJCSB3bGMtPnB1Yi0+dW5pdCwgd2xjLT5wdWItPm5vdyk7Ci0KLQkJcHJpbnRrX29uY2UoIiVzIDogUFNNIFdhdGNoZG9nLCBjaGlwaWQgMHgleCwgY2hpcHJldiAweCV4XG4iLAotCQkJCQlfX2Z1bmNfXywgd2xjLT5wdWItPnNpaC0+Y2hpcCwKLQkJCQkJd2xjLT5wdWItPnNpaC0+Y2hpcHJldik7Ci0KLQkJd2xjLT5wdWItPl9jbnQtPnBzbXdkcysrOwotCi0JCS8qIGJpZyBoYW1tZXIgKi8KLQkJd2xfaW5pdCh3bGMtPndsKTsKLQl9Ci0KLQkvKiBncHRpbWVyIHRpbWVvdXQgKi8KLQlpZiAobWFjaW50c3RhdHVzICYgTUlfVE8pIHsKLQkJd2xjX2h3dGltZXJfZ3B0aW1lcl9jYih3bGMpOwotCX0KLQotCWlmIChtYWNpbnRzdGF0dXMgJiBNSV9SRkRJU0FCTEUpIHsKLQkJV0xfRVJST1IoIndsJWQ6IE1BQyBEZXRlY3RlZCBhIGNoYW5nZSBvbiB0aGUgUkYgRGlzYWJsZSBJbnB1dCAweCV4XG4iLAotCQkJIHdsYy0+cHViLT51bml0LAotCQkJIFJfUkVHKCZyZWdzLT5waHlkZWJ1ZykgJiBQREJHX1JGRCk7Ci0JCS8qIGRlbGF5IHRoZSBjbGVhbnVwIHRvIHdsX2Rvd24gaW4gSUJTUyBjYXNlICovCi0JCWlmICgoUl9SRUcoJnJlZ3MtPnBoeWRlYnVnKSAmIFBEQkdfUkZEKSkgewotCQkJaW50IGlkeDsKLQkJCXN0cnVjdCB3bGNfYnNzY2ZnICpic3NjZmc7Ci0JCQlGT1JFQUNIX0JTUyh3bGMsIGlkeCwgYnNzY2ZnKSB7Ci0JCQkJaWYgKCFCU1NDRkdfU1RBKGJzc2NmZykgfHwgIWJzc2NmZy0+ZW5hYmxlCi0JCQkJICAgIHx8ICFic3NjZmctPkJTUykKLQkJCQkJY29udGludWU7Ci0JCQkJV0xfRVJST1IoIndsJWQ6IHdsY19kcGM6IHJmZGlzYWJsZSAtPiB3bGNfYnNzY2ZnX2Rpc2FibGUoKVxuIiwKLQkJCQkJIHdsYy0+cHViLT51bml0KTsKLQkJCX0KLQkJfQotCX0KLQotCS8qIHNlbmQgYW55IGVucSdkIHR4IHBhY2tldHMuIEp1c3QgbWFrZXMgc3VyZSB0byBqdW1wIHN0YXJ0IHR4ICovCi0JaWYgKCFwa3RxX2VtcHR5KCZ3bGMtPmFjdGl2ZV9xdWV1ZS0+cSkpCi0JCXdsY19zZW5kX3Eod2xjLCB3bGMtPmFjdGl2ZV9xdWV1ZSk7Ci0KLQlBU1NFUlQod2xjX3BzX2NoZWNrKHdsYykpOwotfQotCiBzdGF0aWMgdm9pZCB3bGNfd2FyMTYxNjUoc3RydWN0IHdsY19pbmZvICp3bGMsIGJvb2wgdHgpCiB7CiAJaWYgKHR4KSB7CkBAIC02NTQ2LDcgKzU4MDcsNyBAQAogCiAvKiBwcm9jZXNzIGFuIGluZGl2aWR1YWwgdHhfc3RhdHVzX3QgKi8KIC8qIFdMQ19ISUdIX0FQSSAqLwotYm9vbCBCQ01GQVNUUEFUSAorYm9vbAogd2xjX2RvdHhzdGF0dXMoc3RydWN0IHdsY19pbmZvICp3bGMsIHR4X3N0YXR1c190ICp0eHMsIHUzMiBmcm1fdHgyKQogewogCXN0cnVjdCBza19idWZmICpwOwpAQCAtNjU3MiwxNiArNTgzMywxMiBAQAogCSAqLwogCWlmICghKHR4cy0+c3RhdHVzICYgVFhfU1RBVFVTX0FNUERVKQogCSAgICAmJiAodHhzLT5zdGF0dXMgJiBUWF9TVEFUVVNfSU5URVJNRURJQVRFKSkgewotCQlXTENOVEFERCh3bGMtPnB1Yi0+X2NudC0+dHhub2FjaywKLQkJCSAoKHR4cy0+Ci0JCQkgICBzdGF0dXMgJiBUWF9TVEFUVVNfRlJNX1JUWF9NQVNLKSA+PgotCQkJICBUWF9TVEFUVVNfRlJNX1JUWF9TSElGVCkpOwotCQlXTF9FUlJPUigiJXM6IElOVEVSTUVESUFURSBidXQgbm90IEFNUERVXG4iLCBfX2Z1bmNfXyk7CisJCXdpcGh5X2Vycih3bGMtPndpcGh5LCAiJXM6IElOVEVSTUVESUFURSBidXQgbm90IEFNUERVXG4iLAorCQkJICBfX2Z1bmNfXyk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKIAlxdWV1ZSA9IHR4cy0+ZnJhbWVpZCAmIFRYRklEX1FVRVVFX01BU0s7Ci0JQVNTRVJUKHF1ZXVlIDwgTkZJRk8pOwogCWlmIChxdWV1ZSA+PSBORklGTykgewogCQlwID0gTlVMTDsKIAkJZ290byBmYXRhbDsKQEAgLTY1OTgsNDEgKzU4NTUsMzEgQEAKIAogCWlmICh0eHMtPnBoeWVycikgewogCQlpZiAoV0xfRVJST1JfT04oKSkgewotCQkJV0xfRVJST1IoInBoeWVyciAweCV4LCByYXRlIDB4JXhcbiIsCi0JCQkJIHR4cy0+cGh5ZXJyLCB0eGgtPk1haW5SYXRlcyk7CisJCQl3aXBoeV9lcnIod2xjLT53aXBoeSwgInBoeWVyciAweCV4LCByYXRlIDB4JXhcbiIsCisJCQkJICB0eHMtPnBoeWVyciwgdHhoLT5NYWluUmF0ZXMpOwogCQkJd2xjX3ByaW50X3R4ZGVzYyh0eGgpOwogCQl9CiAJCXdsY19wcmludF90eHN0YXR1cyh0eHMpOwogCX0KIAotCUFTU0VSVCh0eHMtPmZyYW1laWQgPT0gY3B1X3RvX2xlMTYodHhoLT5UeEZyYW1lSUQpKTsKIAlpZiAodHhzLT5mcmFtZWlkICE9IGNwdV90b19sZTE2KHR4aC0+VHhGcmFtZUlEKSkKIAkJZ290byBmYXRhbDsKLQogCXR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHApOwogCWggPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikoKHU4ICopICh0eGggKyAxKSArIEQxMV9QSFlfSERSX0xFTik7CiAKIAlpZiAodHhfaW5mby0+Y29udHJvbC5zdGEpCiAJCXNjYiA9IChzdHJ1Y3Qgc2NiICopdHhfaW5mby0+Y29udHJvbC5zdGEtPmRydl9wcml2OwogCi0JaWYgKE5fRU5BQih3bGMtPnB1YikpIHsKLQkJdTggKnBsY3AgPSAodTggKikgKHR4aCArIDEpOwotCQlpZiAoUExDUDNfSVNTR0kocGxjcFszXSkpCi0JCQl3bGMtPnB1Yi0+X2NudC0+dHhtcGR1X3NnaSsrOwotCQlpZiAoUExDUDNfSVNTVEJDKHBsY3BbM10pKQotCQkJd2xjLT5wdWItPl9jbnQtPnR4bXBkdV9zdGJjKys7Ci0JfQotCiAJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkgewotCQlBU1NFUlQoKG1jbCAmIFRYQ19BTVBEVV9NQVNLKSAhPSBUWENfQU1QRFVfTk9ORSk7CiAJCXdsY19hbXBkdV9kb3R4c3RhdHVzKHdsYy0+YW1wZHUsIHNjYiwgcCwgdHhzKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAogCXN1cHJfc3RhdHVzID0gdHhzLT5zdGF0dXMgJiBUWF9TVEFUVVNfU1VQUl9NQVNLOwogCWlmIChzdXByX3N0YXR1cyA9PSBUWF9TVEFUVVNfU1VQUl9CQURDSCkKLQkJV0xfTk9ORSgiJXM6IFBrdCB0eCBzdXBwcmVzc2VkLCBwb3NzaWJseSBjaGFubmVsICVkXG4iLAotCQkJX19mdW5jX18sIENIU1BFQ19DSEFOTkVMKHdsYy0+ZGVmYXVsdF9ic3MtPmNoYW5zcGVjKSk7CisJCUJDTU1TRyh3bGMtPndpcGh5LAorCQkgICAgICAgIiVzOiBQa3QgdHggc3VwcHJlc3NlZCwgcG9zc2libHkgY2hhbm5lbCAlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBDSFNQRUNfQ0hBTk5FTCh3bGMtPmRlZmF1bHRfYnNzLT5jaGFuc3BlYykpOwogCiAJdHhfcnRzID0gY3B1X3RvX2xlMTYodHhoLT5NYWNUeENvbnRyb2xMb3cpICYgVFhDX1NFTkRSVFM7CiAJdHhfZnJhbWVfY291bnQgPQpAQCAtNjY0Myw3ICs1ODkwLDcgQEAKIAlsYXN0ZnJhbWUgPSAhaWVlZTgwMjExX2hhc19tb3JlZnJhZ3MoaC0+ZnJhbWVfY29udHJvbCk7CiAKIAlpZiAoIWxhc3RmcmFtZSkgewotCQlXTF9FUlJPUigiTm90IGxhc3QgZnJhbWUhXG4iKTsKKwkJd2lwaHlfZXJyKHdsYy0+d2lwaHksICJOb3QgbGFzdCBmcmFtZSFcbiIpOwogCX0gZWxzZSB7CiAJCXUxNiBzZmJsLCBsZmJsOwogCQlpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXModHhfaW5mbyk7CkBAIC02Njc5LDcgKzU5MjYsNyBAQAogCQkJdHhfaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOwogCX0KIAotCXRvdGxlbiA9IHBrdHRvdGxlbihwKTsKKwl0b3RsZW4gPSBiY21fcGt0dG90bGVuKHApOwogCWZyZWVfcGR1ID0gdHJ1ZTsKIAogCXdsY190eGZpZm9fY29tcGxldGUod2xjLCBxdWV1ZSwgMSk7CkBAIC02NjkyLDMzICs1OTM5LDMwIEBACiAJCXNrYl9wdWxsKHAsIEQxMV9QSFlfSERSX0xFTik7CiAJCXNrYl9wdWxsKHAsIEQxMV9UWEhfTEVOKTsKIAkJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKHdsYy0+cHViLT5pZWVlX2h3LCBwKTsKLQkJd2xjLT5wdWItPl9jbnQtPmllZWVfdHhfc3RhdHVzKys7CiAJfSBlbHNlIHsKLQkJV0xfRVJST1IoIiVzOiBOb3QgbGFzdCBmcmFtZSA9PiBub3QgY2FsbGluZyB0eF9zdGF0dXNcbiIsCi0JCQkgX19mdW5jX18pOworCQl3aXBoeV9lcnIod2xjLT53aXBoeSwgIiVzOiBOb3QgbGFzdCBmcmFtZSA9PiBub3QgY2FsbGluZyAiCisJCQkgICJ0eF9zdGF0dXNcbiIsIF9fZnVuY19fKTsKIAl9CiAKIAlyZXR1cm4gZmFsc2U7CiAKICBmYXRhbDoKLQlBU1NFUlQoMCk7CiAJaWYgKHApCi0JCXBrdF9idWZfZnJlZV9za2IocCk7CisJCWJjbV9wa3RfYnVmX2ZyZWVfc2tiKHApOwogCiAJcmV0dXJuIHRydWU7CiAKIH0KIAotdm9pZCBCQ01GQVNUUEFUSAordm9pZAogd2xjX3R4Zmlmb19jb21wbGV0ZShzdHJ1Y3Qgd2xjX2luZm8gKndsYywgdWludCBmaWZvLCBzOCB0eHBrdHBlbmQpCiB7CiAJVFhQS1RQRU5EREVDKHdsYywgZmlmbywgdHhwa3RwZW5kKTsKLQlXTF9UUkFDRSgid2xjX3R4Zmlmb19jb21wbGV0ZSwgcGt0cGVuZCBkZWMgJWQgdG8gJWRcbiIsCi0JCSB0eHBrdHBlbmQsIFRYUEtUUEVOREdFVCh3bGMsIGZpZm8pKTsKKwlCQ01NU0cod2xjLT53aXBoeSwgInBrdHBlbmQgZGVjICVkIHRvICVkXG4iLCB0eHBrdHBlbmQsCisJCVRYUEtUUEVOREdFVCh3bGMsIGZpZm8pKTsKIAogCS8qIFRoZXJlIGlzIG1vcmUgcm9vbTsgbWFyayBwcmVjZWRlbmNlcyByZWxhdGVkIHRvIHRoaXMgRklGTyBzZW5kYWJsZSAqLwogCVdMQ19UWF9GSUZPX0VOQUIod2xjLCBmaWZvKTsKLQlBU1NFUlQoVFhQS1RQRU5ER0VUKHdsYywgZmlmbykgPj0gMCk7CiAKIAlpZiAoIVRYUEtUUEVORFRPVCh3bGMpKSB7CiAJCWlmICh3bGMtPmJsb2NrX2RhdGFmaWZvICYgREFUQV9CTE9DS19UWF9TVVBSKQpAQCAtNjczNSw4NCArNTk3OSw2IEBACiAJLyogZmlndXJlIG91dCB3aGljaCBic3NjZmcgaXMgYmVpbmcgd29ya2VkIG9uLi4uICovCiB9CiAKLS8qIEdpdmVuIHRoZSBiZWFjb24gaW50ZXJ2YWwgaW4ga3VzLCBhbmQgYSA2NCBiaXQgVFNGIGluIHVzLAotICogcmV0dXJuIHRoZSBvZmZzZXQgKGluIHVzKSBvZiB0aGUgVFNGIGZyb20gdGhlIGxhc3QgVEJUVAotICovCi11MzIgd2xjX2NhbGNfdGJ0dF9vZmZzZXQodTMyIGJwLCB1MzIgdHNmX2gsIHUzMiB0c2ZfbCkKLXsKLQl1MzIgaywgYnRrbG8sIGJ0a2hpLCBvZmZzZXQ7Ci0KLQkvKiBUQlRUIGlzIGFsd2F5cyBhbiBldmVuIG11bHRpcGxlIG9mIHRoZSBiZWFjb25faW50ZXJ2YWwsCi0JICogc28gdGhlIFRCVFQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBiZWFjb24gdGltZXN0YW1wIGlzCi0JICogdGhlIGJlYWNvbiB0aW1lc3RhbXAgbWludXMgdGhlIGJlYWNvbiB0aW1lc3RhbXAgbW9kdWxvCi0JICogdGhlIGJlYWNvbiBpbnRlcnZhbC4KLQkgKgotCSAqIFRCVFQgPSBCVCAtIChCVCAlIEJJdSkKLQkgKiAgICAgID0gKEJUayAtIChCVGsgJSBCUCkpICogMl4xMAotCSAqCi0JICogQlQgPSBiZWFjb24gdGltZXN0YW1wICh1c2VjLCA2NGJpdHMpCi0JICogQlRrID0gYmVhY29uIHRpbWVzdGFtcCAoS3VzZWMsIDU0Yml0cykKLQkgKiBCUCA9IGJlYWNvbiBpbnRlcnZhbCAoS3VzZWMsIDE2Yml0cykKLQkgKiBCSXUgPSBCUCAqIDJeMTAgPSBiZWFjb24gaW50ZXJ2YWwgKHVzZWMsIDI2Yml0cykKLQkgKgotCSAqIFRvIGtlZXAgdGhlIGNhbGN1bGF0aW9ucyBpbiB1MzJzLCB0aGUgbW9kdWxvIG9wZXJhdGlvbgotCSAqIG9uIHRoZSBoaWdoIHBhcnQgb2YgQlQgbmVlZHMgdG8gYmUgZG9uZSBpbiBwYXJ0cyB1c2luZyB0aGUKLQkgKiByZWxhdGlvbnM6Ci0JICogWCpZIG1vZCBaID0gKChYIG1vZCBaKSAqIChZIG1vZCBaKSkgbW9kIFoKLQkgKiBhbmQKLQkgKiAoWCArIFkpIG1vZCBaID0gKChYIG1vZCBaKSArIChZIG1vZCBaKSkgbW9kIFoKLQkgKgotCSAqIFNvLCBpZiBCVGtbbl0gPSB1MTYgbiBbMCwzXSBvZiBCVGsuCi0JICogQlRrICUgQlAgPSBTVU0oKEJUa1tuXSAqIDJeMTZuKSAlIEJQICwgMDw9bjw0KSAlIEJQCi0JICogYW5kIHRoZSBTVU0gdGVybSBjYW4gYmUgYnJva2VuIGRvd246Ci0JICogKEJUa1tuXSAqICAgICAyXjE2bikgICAgJSBCUAotCSAqIChCVGtbbl0gKiAoMl4xNm4gJSBCUCkpICUgQlAKLQkgKgotCSAqIENyZWF0ZSBhIHNldCBvZiBwb3dlciBvZiAyIG1vZCBCUCBjb25zdGFudHM6Ci0JICogS1tuXSA9IDJeKDE2bikgJSBCUAotCSAqICAgICAgPSAoS1tuLTFdICogMl4xNikgJSBCUAotCSAqIEtbMl0gPSAyXjMyICUgQlAgPSAoKDJeMTYgJSBCUCkgKiAyXjE2KSAlIEJQCi0JICoKLQkgKiBCVGsgJSBCUCA9IEJUa1swLTFdICUgQlAgKwotCSAqICAgICAgICAgICAgKEJUa1syXSAqIEtbMl0pICUgQlAgKwotCSAqICAgICAgICAgICAgKEJUa1szXSAqIEtbM10pICUgQlAKLQkgKgotCSAqIFNpbmNlIEtbbl0gPCAyXjE2IGFuZCBCVGtbbl0gaXMgPCAyXjE2LCB0aGVuIEJUa1tuXSAqIEtbbl0gPCAyXjMyCi0JICovCi0KLQkvKiBCVGsgPSBCVCA+PiAxMCwgYnRrbG8gPSBCVGtbMC0zXSwgYmt0aGkgPSBCVGtbNC02XSAqLwotCWJ0a2xvID0gKHRzZl9oIDw8IDIyKSB8ICh0c2ZfbCA+PiAxMCk7Ci0JYnRraGkgPSB0c2ZfaCA+PiAxMDsKLQotCS8qIG9mZnNldCA9IEJUayAlIEJQICovCi0Jb2Zmc2V0ID0gYnRrbG8gJSBicDsKLQotCS8qIEtbMl0gPSAoKDJeMTYgJSBCUCkgKiAyXjE2KSAlIEJQICovCi0JayA9ICh1MzIpICgxIDw8IDE2KSAlIGJwOwotCWsgPSAodTMyKSAoayAqIDEgPDwgMTYpICUgKHUzMikgYnA7Ci0KLQkvKiBvZmZzZXQgKz0gKEJUa1syXSAqIEtbMl0pICUgQlAgKi8KLQlvZmZzZXQgKz0gKChidGtoaSAmIDB4ZmZmZikgKiBrKSAlIGJwOwotCi0JLyogQlRrWzNdICovCi0JYnRraGkgPSBidGtoaSA+PiAxNjsKLQotCS8qIGtbM10gPSAoS1syXSAqIDJeMTYpICUgQlAgKi8KLQlrID0gKGsgPDwgMTYpICUgYnA7Ci0KLQkvKiBvZmZzZXQgKz0gKEJUa1szXSAqIEtbM10pICUgQlAgKi8KLQlvZmZzZXQgKz0gKChidGtoaSAmIDB4ZmZmZikgKiBrKSAlIGJwOwotCi0Jb2Zmc2V0ID0gb2Zmc2V0ICUgYnA7Ci0KLQkvKiBjb252ZXJ0IG9mZnNldCBmcm9tIGt1cyB0byB1cyBieSBzaGlmdGluZyB1cCAxMCBiaXRzIGFuZAotCSAqIGFkZCBpbiB0aGUgbG93IDEwIGJpdHMgb2YgdHNmIHRoYXQgd2UgaWdub3JlZAotCSAqLwotCW9mZnNldCA9IChvZmZzZXQgPDwgMTApICsgKHRzZl9sICYgMHgzRkYpOwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQogLyogVXBkYXRlIGJlYWNvbiBsaXN0ZW4gaW50ZXJ2YWwgaW4gc2hhcmVkIG1lbW9yeSAqLwogdm9pZCB3bGNfYmNuX2xpX3VwZChzdHJ1Y3Qgd2xjX2luZm8gKndsYykKIHsKQEAgLTY4MjcsMjUgKzU5OTMsNTYgQEAKIAkJCSAgICAgICh3bGMtPmJjbl9saV9kdGltIDw8IDgpIHwgd2xjLT5iY25fbGlfYmNuKTsKIH0KIAorLyoKKyAqIHJlY292ZXIgNjRiaXQgVFNGIHZhbHVlIGZyb20gdGhlIDE2Yml0IFRTRiB2YWx1ZSBpbiB0aGUgcnggaGVhZGVyCisgKiBnaXZlbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBUU0YgcGFzc2VkIGluIGhlYWRlciBpcyB3aXRoaW4gNjVtcworICogb2YgdGhlIGN1cnJlbnQgdHNmLgorICoKKyAqIDYgICAgICAgNSAgICAgICA0ICAgICAgIDQgICAgICAgMyAgICAgICAyICAgICAgIDEKKyAqIDMuLi4uLi4uNi4uLi4uLi44Li4uLi4uLjAuLi4uLi4uMi4uLi4uLi40Li4uLi4uLjYuLi4uLi4uOC4uLi4uLjAKKyAqIHw8LS0tLS0tLS0tLSB0c2ZfaCAtLS0tLS0tLS0tLT58fDwtLS0gdHNmX2wgLS0+fHw8LVJ4VFNGVGltZSAtPnwKKyAqCisgKiBUaGUgUnhUU0ZUaW1lIGFyZSB0aGUgbG93ZXN0IDE2IGJpdHMgYW5kIHByb3ZpZGVkIGJ5IHRoZSB1Y29kZS4gVGhlCisgKiB0c2ZfbCBpcyBmaWxsZWQgaW4gYnkgd2xjX2JtYWNfcmVjdiwgd2hpY2ggaXMgZG9uZSBlYXJsaWVyIGluIHRoZQorICogcmVjZWl2ZSBjYWxsIHNlcXVlbmNlIGFmdGVyIHJ4IGludGVycnVwdC4gT25seSB0aGUgaGlnaGVyIDE2IGJpdHMKKyAqIGFyZSB1c2VkLiBGaW5hbGx5LCB0aGUgdHNmX2ggaXMgcmVhZCBmcm9tIHRoZSB0c2YgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyB1NjQgd2xjX3JlY292ZXJfdHNmNjQoc3RydWN0IHdsY19pbmZvICp3bGMsIHN0cnVjdCB3bGNfZDExcnhoZHIgKnJ4aCkKK3sKKwl1MzIgdHNmX2gsIHRzZl9sOworCXUxNiByeF90c2ZfMF8xNSwgcnhfdHNmXzE2XzMxOworCisJd2xjX2JtYWNfcmVhZF90c2Yod2xjLT5odywgJnRzZl9sLCAmdHNmX2gpOworCisJcnhfdHNmXzE2XzMxID0gKHUxNikodHNmX2wgPj4gMTYpOworCXJ4X3RzZl8wXzE1ID0gcnhoLT5yeGhkci5SeFRTRlRpbWU7CisKKwkvKgorCSAqIGEgZ3JlYXRlciB0c2YgdGltZSBpbmRpY2F0ZXMgdGhlIGxvdyAxNiBiaXRzIG9mCisJICogdHNmX2wgd3JhcHBlZCwgc28gZGVjcmVtZW50IHRoZSBoaWdoIDE2IGJpdHMuCisJICovCisJaWYgKCh1MTYpdHNmX2wgPCByeF90c2ZfMF8xNSkgeworCQlyeF90c2ZfMTZfMzEgLT0gMTsKKwkJaWYgKHJ4X3RzZl8xNl8zMSA9PSAweGZmZmYpCisJCQl0c2ZfaCAtPSAxOworCX0KKworCXJldHVybiAoKHU2NCl0c2ZfaCA8PCAzMikgfCAoKCh1MzIpcnhfdHNmXzE2XzMxIDw8IDE2KSArIHJ4X3RzZl8wXzE1KTsKK30KKwogc3RhdGljIHZvaWQKIHByZXBfbWFjODAyMTFfc3RhdHVzKHN0cnVjdCB3bGNfaW5mbyAqd2xjLCBkMTFyeGhkcl90ICpyeGgsIHN0cnVjdCBza19idWZmICpwLAogCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCiB7Ci0JdTMyIHRzZl9sLCB0c2ZfaDsKIAl3bGNfZDExcnhoZHJfdCAqd2xjX3J4aCA9ICh3bGNfZDExcnhoZHJfdCAqKSByeGg7CiAJaW50IHByZWFtYmxlOwogCWludCBjaGFubmVsOwogCXJhdGVzcGVjX3QgcnNwZWM7CiAJdW5zaWduZWQgY2hhciAqcGxjcDsKIAotI2lmIDAKLQkvKiBDbGVhcmx5LCB0aGlzIGlzIGJvZ3VzIC0tIHJlYWRpbmcgdGhlIFRTRiBub3cgaXMgd3JvbmcgKi8KLQl3bGNfcmVhZF90c2Yod2xjLCAmdHNmX2wsICZ0c2ZfaCk7CS8qIG1hY3RpbWUgKi8KLQlyeF9zdGF0dXMtPm1hY3RpbWUgPSB0c2ZfaDsKLQlyeF9zdGF0dXMtPm1hY3RpbWUgPDw9IDMyOwotCXJ4X3N0YXR1cy0+bWFjdGltZSB8PSB0c2ZfbDsKLQlyeF9zdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19NQUNUSU1FX01QRFU7IC8qIGNsZWFybHkgd3JvbmcgKi8KLSNlbmRpZgorCS8qIGZpbGwgaW4gVFNGIGFuZCBmbGFnIGl0cyBwcmVzZW5jZSAqLworCXJ4X3N0YXR1cy0+bWFjdGltZSA9IHdsY19yZWNvdmVyX3RzZjY0KHdsYywgd2xjX3J4aCk7CisJcnhfc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfTUFDVElNRV9NUERVOwogCiAJY2hhbm5lbCA9IFdMQ19DSEFOX0NIQU5ORUwocnhoLT5SeENoYW4pOwogCkBAIC02OTEyLDcgKzYxMDksNyBAQAogCQkJcnhfc3RhdHVzLT5yYXRlX2lkeCA9IDExOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlXTF9FUlJPUigiJXM6IFVua25vd24gcmF0ZVxuIiwgX19mdW5jX18pOworCQkJd2lwaHlfZXJyKHdsYy0+d2lwaHksICIlczogVW5rbm93biByYXRlXG4iLCBfX2Z1bmNfXyk7CiAJCX0KIAogCQkvKiBEZXRlcm1pbmUgc2hvcnQgcHJlYW1ibGUgYW5kIHJhdGVfaWR4ICovCkBAIC02OTIzLDcgKzYxMjAsOCBAQAogCQl9IGVsc2UgaWYgKElTX09GRE0ocnNwZWMpKSB7CiAJCQlyeF9zdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19TSE9SVFBSRTsKIAkJfSBlbHNlIHsKLQkJCVdMX0VSUk9SKCIlczogVW5rbm93biBtb2R1bGF0aW9uXG4iLCBfX2Z1bmNfXyk7CisJCQl3aXBoeV9lcnIod2xjLT53aXBoeSwgIiVzOiBVbmtub3duIG1vZHVsYXRpb25cbiIsCisJCQkJICBfX2Z1bmNfXyk7CiAJCX0KIAl9CiAKQEAgLTY5MzIsMTEgKzYxMzAsMTMgQEAKIAogCWlmIChyeGgtPlJ4U3RhdHVzMSAmIFJYU19ERUNFUlIpIHsKIAkJcnhfc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfRkFJTEVEX1BMQ1BfQ1JDOwotCQlXTF9FUlJPUigiJXM6ICBSWF9GTEFHX0ZBSUxFRF9QTENQX0NSQ1xuIiwgX19mdW5jX18pOworCQl3aXBoeV9lcnIod2xjLT53aXBoeSwgIiVzOiAgUlhfRkxBR19GQUlMRURfUExDUF9DUkNcbiIsCisJCQkgIF9fZnVuY19fKTsKIAl9CiAJaWYgKHJ4aC0+UnhTdGF0dXMxICYgUlhTX0ZDU0VSUikgewogCQlyeF9zdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19GQUlMRURfRkNTX0NSQzsKLQkJV0xfRVJST1IoIiVzOiAgUlhfRkxBR19GQUlMRURfRkNTX0NSQ1xuIiwgX19mdW5jX18pOworCQl3aXBoeV9lcnIod2xjLT53aXBoeSwgIiVzOiAgUlhfRkxBR19GQUlMRURfRkNTX0NSQ1xuIiwKKwkJCSAgX19mdW5jX18pOwogCX0KIH0KIApAQCAtNjk0NSwxNCArNjE0NSw2IEBACiB7CiAJaW50IGxlbl9tcGR1OwogCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHJ4X3N0YXR1czsKLSNpZiBkZWZpbmVkKEJDTURCRykKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcDsKLSNlbmRpZgkJCQkvKiBCQ01EQkcgKi8KLQkvKiBUb2RvOgotCSAqIENhY2hlIHBsY3AgZm9yIGZpcnN0IE1QRFUgb2YgQU1QRCBhbmQgdXNlIGNoYWNjaGVkIHZlcnNpb24gZm9yIElOVEVSTUVESUFURS4KLQkgKiBUZXN0IGZvciBJTlRFUk1FRElBVEUgIGxpa2Ugc286Ci0JICogaWYgKCEocGxjcFswXSB8IHBsY3BbMV0gfCBwbGNwWzJdKSkKLQkgKi8KIAogCW1lbXNldCgmcnhfc3RhdHVzLCAwLCBzaXplb2Yocnhfc3RhdHVzKSk7CiAJcHJlcF9tYWM4MDIxMV9zdGF0dXMod2xjLCByeGgsIHAsICZyeF9zdGF0dXMpOwpAQCAtNjk2Miw0OCArNjE1NCwyNSBAQAogCXNrYl9wdWxsKHAsIEQxMV9QSFlfSERSX0xFTik7CiAJX19za2JfdHJpbShwLCBsZW5fbXBkdSk7CiAKLQlBU1NFUlQoIShwLT5uZXh0KSk7Ci0JQVNTRVJUKCEocC0+cHJldikpOwotCi0JQVNTRVJUKElTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpc2tiLT5kYXRhLCAyKSk7Ci0KIAltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHApLCAmcnhfc3RhdHVzLCBzaXplb2Yocnhfc3RhdHVzKSk7CiAJaWVlZTgwMjExX3J4X2lycXNhZmUod2xjLT5wdWItPmllZWVfaHcsIHApOwotCi0Jd2xjLT5wdWItPl9jbnQtPmllZWVfcngrKzsKIAlyZXR1cm47CiB9CiAKLXZvaWQgd2xjX2Jzc19saXN0X2ZyZWUoc3RydWN0IHdsY19pbmZvICp3bGMsIHN0cnVjdCB3bGNfYnNzX2xpc3QgKmJzc19saXN0KQotewotCXVpbnQgaW5kZXg7Ci0KLQlpZiAoIWJzc19saXN0KSB7Ci0JCVdMX0VSUk9SKCIlczogQXR0ZW1wdGluZyB0byBmcmVlIE5VTEwgbGlzdFxuIiwgX19mdW5jX18pOwotCQlyZXR1cm47Ci0JfQotCS8qIGluc3BlY3QgYWxsIEJTUyBkZXNjcmlwdG9yICovCi0JZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYnNzX2xpc3QtPmNvdW50OyBpbmRleCsrKSB7Ci0JCWtmcmVlKGJzc19saXN0LT5wdHJzW2luZGV4XSk7Ci0JCWJzc19saXN0LT5wdHJzW2luZGV4XSA9IE5VTEw7Ci0JfQotCWJzc19saXN0LT5jb3VudCA9IDA7Ci19Ci0KIC8qIFByb2Nlc3MgcmVjZWl2ZWQgZnJhbWVzICovCiAvKgogICogUmV0dXJuIHRydWUgaWYgbW9yZSBmcmFtZXMgbmVlZCB0byBiZSBwcm9jZXNzZWQuIGZhbHNlIG90aGVyd2lzZS4KICAqIFBhcmFtICdib3VuZCcgaW5kaWNhdGVzIG1heC4gIyBmcmFtZXMgdG8gcHJvY2VzcyBiZWZvcmUgYnJlYWsgb3V0LgogICovCiAvKiBXTENfSElHSF9BUEkgKi8KLXZvaWQgQkNNRkFTVFBBVEggd2xjX3JlY3Yoc3RydWN0IHdsY19pbmZvICp3bGMsIHN0cnVjdCBza19idWZmICpwKQordm9pZCB3bGNfcmVjdihzdHJ1Y3Qgd2xjX2luZm8gKndsYywgc3RydWN0IHNrX2J1ZmYgKnApCiB7CiAJZDExcnhoZHJfdCAqcnhoOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoOwogCXVpbnQgbGVuOwogCWJvb2wgaXNfYW1zZHU7CiAKLQlXTF9UUkFDRSgid2wlZDogd2xjX3JlY3ZcbiIsIHdsYy0+cHViLT51bml0KTsKKwlCQ01NU0cod2xjLT53aXBoeSwgIndsJWRcbiIsIHdsYy0+cHViLT51bml0KTsKIAogCS8qIGZyYW1lIHN0YXJ0cyB3aXRoIHJ4aGRyICovCiAJcnhoID0gKGQxMXJ4aGRyX3QgKikgKHAtPmRhdGEpOwpAQCAtNzAyNyw5ICs2MTk2LDggQEAKIAkvKiBNQUMgaW5zZXJ0cyAyIHBhZCBieXRlcyBmb3IgYTQgaGVhZGVycyBvciBRb1Mgb3IgQS1NU0RVIHN1YmZyYW1lcyAqLwogCWlmIChyeGgtPlJ4U3RhdHVzMSAmIFJYU19QQlBSRVMpIHsKIAkJaWYgKHAtPmxlbiA8IDIpIHsKLQkJCXdsYy0+cHViLT5fY250LT5yeHJ1bnQrKzsKLQkJCVdMX0VSUk9SKCJ3bCVkOiB3bGNfcmVjdjogcmN2ZCBydW50IG9mIGxlbiAlZFxuIiwKLQkJCQkgd2xjLT5wdWItPnVuaXQsIHAtPmxlbik7CisJCQl3aXBoeV9lcnIod2xjLT53aXBoeSwgIndsJWQ6IHdsY19yZWN2OiByY3ZkIHJ1bnQgb2YgIgorCQkJCSAgImxlbiAlZFxuIiwgd2xjLT5wdWItPnVuaXQsIHAtPmxlbik7CiAJCQlnb3RvIHRvc3M7CiAJCX0KIAkJc2tiX3B1bGwocCwgMik7CkBAIC03MDQwLDE3ICs2MjA4LDE3IEBACiAKIAlpZiAocnhoLT5SeFN0YXR1czEgJiBSWFNfRkNTRVJSKSB7CiAJCWlmICh3bGMtPnB1Yi0+bWFjODAyMTFfc3RhdGUgJiBNQUM4MDIxMV9QUk9NSVNDX0JDTlMpIHsKLQkJCVdMX0VSUk9SKCJGQ1NFUlIgd2hpbGUgc2Nhbm5pbmcqKioqKioqIC0gdG9zc2luZ1xuIik7CisJCQl3aXBoeV9lcnIod2xjLT53aXBoeSwgIkZDU0VSUiB3aGlsZSBzY2FubmluZyoqKioqKiogLSIKKwkJCQkgICIgdG9zc2luZ1xuIik7CiAJCQlnb3RvIHRvc3M7CiAJCX0gZWxzZSB7Ci0JCQlXTF9FUlJPUigiUkNTRVJSISEhXG4iKTsKKwkJCXdpcGh5X2Vycih3bGMtPndpcGh5LCAiUkNTRVJSISEhXG4iKTsKIAkJCWdvdG8gdG9zczsKIAkJfQogCX0KIAogCS8qIGNoZWNrIHJlY2VpdmVkIHBrdCBoYXMgYXQgbGVhc3QgZnJhbWUgY29udHJvbCBmaWVsZCAqLwogCWlmIChsZW4gPCBEMTFfUEhZX0hEUl9MRU4gKyBzaXplb2YoaC0+ZnJhbWVfY29udHJvbCkpIHsKLQkJd2xjLT5wdWItPl9jbnQtPnJ4cnVudCsrOwogCQlnb3RvIHRvc3M7CiAJfQogCkBAIC03MDY0LDEzICs2MjMyLDEyIEBACiAJCSAgICBpZWVlODAyMTFfaXNfbWdtdChoLT5mcmFtZV9jb250cm9sKSkgewogCQkJaWYgKChpc196ZXJvX2V0aGVyX2FkZHIoaC0+YWRkcjIpIHx8CiAJCQkgICAgIGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGgtPmFkZHIyKSkpIHsKLQkJCQlXTF9FUlJPUigid2wlZDogJXM6IGRyb3BwaW5nIGEgZnJhbWUgd2l0aCAiCi0JCQkJCSAiaW52YWxpZCBzcmMgbWFjIGFkZHJlc3MsIGEyOiAlcE1cbiIsCisJCQkJd2lwaHlfZXJyKHdsYy0+d2lwaHksICJ3bCVkOiAlczogZHJvcHBpbmcgYSAiCisJCQkJCSAgImZyYW1lIHdpdGggaW52YWxpZCBzcmMgbWFjIGFkZHJlc3MsIgorCQkJCQkgICIgYTI6ICVwTVxuIiwKIAkJCQkJIHdsYy0+cHViLT51bml0LCBfX2Z1bmNfXywgaC0+YWRkcjIpOwotCQkJCXdsYy0+cHViLT5fY250LT5yeGJhZHNyY21hYysrOwogCQkJCWdvdG8gdG9zczsKIAkJCX0KLQkJCXdsYy0+cHViLT5fY250LT5yeGZyYWcrKzsKIAkJfQogCX0KIApAQCAtNzA4NSw3ICs2MjUyLDcgQEAKIAlyZXR1cm47CiAKICB0b3NzOgotCXBrdF9idWZfZnJlZV9za2IocCk7CisJYmNtX3BrdF9idWZfZnJlZV9za2IocCk7CiB9CiAKIC8qIGNhbGN1bGF0ZSBmcmFtZSBkdXJhdGlvbiBmb3IgTWl4ZWQtbW9kZSBMLVNJRyBzcG9vZmluZywgcmV0dXJuCkBAIC03MDk0LDEyICs2MjYxLDEyIEBACiAgKiBGb3JtdWxhIGdpdmVuIGJ5IEhUIFBIWSBTcGVjIHYgMS4xMwogICogICBsZW4gPSAzKG5zeW1zICsgbnN0cmVhbSArIDMpIC0gMwogICovCi11MTYgQkNNRkFTVFBBVEgKK3UxNgogd2xjX2NhbGNfbHNpZ19sZW4oc3RydWN0IHdsY19pbmZvICp3bGMsIHJhdGVzcGVjX3QgcmF0ZXNwZWMsIHVpbnQgbWFjX2xlbikKIHsKIAl1aW50IG5zeW1zLCBsZW4gPSAwLCBrTmRwczsKIAotCVdMX1RSQUNFKCJ3bCVkOiB3bGNfY2FsY19sc2lnX2xlbjogcmF0ZSAlZCwgbGVuJWRcbiIsCisJQkNNTVNHKHdsYy0+d2lwaHksICJ3bCVkOiByYXRlICVkLCBsZW4lZFxuIiwKIAkJIHdsYy0+cHViLT51bml0LCBSU1BFQzJSQVRFKHJhdGVzcGVjKSwgbWFjX2xlbik7CiAKIAlpZiAoSVNfTUNTKHJhdGVzcGVjKSkgewpAQCAtNzEwNyw3ICs2Mjc0LDYgQEAKIAkJLyogTUNTX1RYUyhtY3MpIHJldHVybnMgbnVtIHR4IHN0cmVhbXMgLSAxICovCiAJCWludCB0b3Rfc3RyZWFtcyA9IChNQ1NfVFhTKG1jcykgKyAxKSArIFJTUEVDX1NUQyhyYXRlc3BlYyk7CiAKLQkJQVNTRVJUKFdMQ19QSFlfMTFOX0NBUCh3bGMtPmJhbmQpKTsKIAkJLyogdGhlIHBheWxvYWQgZHVyYXRpb24gY2FsY3VsYXRpb24gbWF0Y2hlcyB0aGF0IG9mIHJlZ3VsYXIgb2ZkbSAqLwogCQkvKiAxMDAwTmRicHMgPSBrYnBzICogNCAqLwogCQlrTmRwcyA9CkBAIC03MTM1LDcgKzYzMDEsNyBAQAogfQogCiAvKiBjYWxjdWxhdGUgZnJhbWUgZHVyYXRpb24gb2YgYSBnaXZlbiByYXRlIGFuZCBsZW5ndGgsIHJldHVybiB0aW1lIGluIHVzZWMgdW5pdCAqLwotdWludCBCQ01GQVNUUEFUSAordWludAogd2xjX2NhbGNfZnJhbWVfdGltZShzdHJ1Y3Qgd2xjX2luZm8gKndsYywgcmF0ZXNwZWNfdCByYXRlc3BlYywgdTggcHJlYW1ibGVfdHlwZSwKIAkJICAgIHVpbnQgbWFjX2xlbikKIHsKQEAgLTcxNDMsMTkgKzYzMDksMTcgQEAKIAl1aW50IHJhdGUgPSBSU1BFQzJSQVRFKHJhdGVzcGVjKTsKIAogCWlmIChyYXRlID09IDApIHsKLQkJQVNTRVJUKDApOwotCQlXTF9FUlJPUigid2wlZDogV0FSOiB1c2luZyByYXRlIG9mIDEgbWJwc1xuIiwgd2xjLT5wdWItPnVuaXQpOworCQl3aXBoeV9lcnIod2xjLT53aXBoeSwgIndsJWQ6IFdBUjogdXNpbmcgcmF0ZSBvZiAxIG1icHNcbiIsCisJCQkgIHdsYy0+cHViLT51bml0KTsKIAkJcmF0ZSA9IFdMQ19SQVRFXzFNOwogCX0KIAotCVdMX1RSQUNFKCJ3bCVkOiB3bGNfY2FsY19mcmFtZV90aW1lOiByc3BlYyAweCV4LCBwcmVhbWJsZV90eXBlICVkLCBsZW4lZFxuIiwKKwlCQ01NU0cod2xjLT53aXBoeSwgIndsJWQ6IHJzcGVjIDB4JXgsIHByZWFtYmxlX3R5cGUgJWQsIGxlbiVkXG4iLAogCQkgd2xjLT5wdWItPnVuaXQsIHJhdGVzcGVjLCBwcmVhbWJsZV90eXBlLCBtYWNfbGVuKTsKIAogCWlmIChJU19NQ1MocmF0ZXNwZWMpKSB7CiAJCXVpbnQgbWNzID0gcmF0ZXNwZWMgJiBSU1BFQ19SQVRFX01BU0s7CiAJCWludCB0b3Rfc3RyZWFtcyA9IE1DU19UWFMobWNzKSArIFJTUEVDX1NUQyhyYXRlc3BlYyk7Ci0JCUFTU0VSVChXTENfUEhZXzExTl9DQVAod2xjLT5iYW5kKSk7Ci0JCUFTU0VSVChXTENfSVNfTUlNT19QUkVBTUJMRShwcmVhbWJsZV90eXBlKSk7CiAKIAkJZHVyID0gUFJFTl9QUkVBTUJMRSArICh0b3Rfc3RyZWFtcyAqIFBSRU5fUFJFQU1CTEVfRVhUKTsKIAkJaWYgKHByZWFtYmxlX3R5cGUgPT0gV0xDX01NX1BSRUFNQkxFKQpAQCAtNzIxMywxMyArNjM3NywxMiBAQAogCXVpbnQgbnN5bXMsIG1hY19sZW4sIE5kcHMsIGtOZHBzOwogCXVpbnQgcmF0ZSA9IFJTUEVDMlJBVEUocmF0ZXNwZWMpOwogCi0JV0xfVFJBQ0UoIndsJWQ6IHdsY19jYWxjX2ZyYW1lX2xlbjogcnNwZWMgMHgleCwgcHJlYW1ibGVfdHlwZSAlZCwgZHVyICVkXG4iLAorCUJDTU1TRyh3bGMtPndpcGh5LCAid2wlZDogcnNwZWMgMHgleCwgcHJlYW1ibGVfdHlwZSAlZCwgZHVyICVkXG4iLAogCQkgd2xjLT5wdWItPnVuaXQsIHJhdGVzcGVjLCBwcmVhbWJsZV90eXBlLCBkdXIpOwogCiAJaWYgKElTX01DUyhyYXRlc3BlYykpIHsKIAkJdWludCBtY3MgPSByYXRlc3BlYyAmIFJTUEVDX1JBVEVfTUFTSzsKIAkJaW50IHRvdF9zdHJlYW1zID0gTUNTX1RYUyhtY3MpICsgUlNQRUNfU1RDKHJhdGVzcGVjKTsKLQkJQVNTRVJUKFdMQ19QSFlfMTFOX0NBUCh3bGMtPmJhbmQpKTsKIAkJZHVyIC09IFBSRU5fUFJFQU1CTEUgKyAodG90X3N0cmVhbXMgKiBQUkVOX1BSRUFNQkxFX0VYVCk7CiAJCS8qIHBheWxvYWQgY2FsY3VsYXRpb24gbWF0Y2hlcyB0aGF0IG9mIHJlZ3VsYXIgb2ZkbSAqLwogCQlpZiAoQkFORF8yRyh3bGMtPmJhbmQtPmJhbmR0eXBlKSkKQEAgLTcyNTYsMzMgKzY0MTksMjkgQEAKIHN0YXRpYyB1aW50CiB3bGNfY2FsY19iYV90aW1lKHN0cnVjdCB3bGNfaW5mbyAqd2xjLCByYXRlc3BlY190IHJzcGVjLCB1OCBwcmVhbWJsZV90eXBlKQogewotCVdMX1RSQUNFKCJ3bCVkOiB3bGNfY2FsY19iYV90aW1lOiByc3BlYyAweCV4LCBwcmVhbWJsZV90eXBlICVkXG4iLAotCQkgd2xjLT5wdWItPnVuaXQsIHJzcGVjLCBwcmVhbWJsZV90eXBlKTsKKwlCQ01NU0cod2xjLT53aXBoeSwgIndsJWQ6IHJzcGVjIDB4JXgsICIKKwkJICJwcmVhbWJsZV90eXBlICVkXG4iLCB3bGMtPnB1Yi0+dW5pdCwgcnNwZWMsIHByZWFtYmxlX3R5cGUpOwogCS8qIFNwZWMgOS42OiBhY2sgcmF0ZSBpcyB0aGUgaGlnaGVzdCByYXRlIGluIEJTU0Jhc2ljUmF0ZVNldCB0aGF0IGlzIGxlc3MgdGhhbgogCSAqIG9yIGVxdWFsIHRvIHRoZSByYXRlIG9mIHRoZSBpbW1lZGlhdGVseSBwcmV2aW91cyBmcmFtZSBpbiB0aGUgRkVTCiAJICovCiAJcnNwZWMgPSBXTENfQkFTSUNfUkFURSh3bGMsIHJzcGVjKTsKLQlBU1NFUlQoVkFMSURfUkFURV9EQkcod2xjLCByc3BlYykpOwotCiAJLyogQkEgbGVuID09IDMyID09IDE2KGN0bCBoZHIpICsgNChiYSBsZW4pICsgOChiaXRtYXApICsgNChmY3MpICovCiAJcmV0dXJuIHdsY19jYWxjX2ZyYW1lX3RpbWUod2xjLCByc3BlYywgcHJlYW1ibGVfdHlwZSwKIAkJCQkgICAoRE9UMTFfQkFfTEVOICsgRE9UMTFfQkFfQklUTUFQX0xFTiArCiAJCQkJICAgIEZDU19MRU4pKTsKIH0KIAotc3RhdGljIHVpbnQgQkNNRkFTVFBBVEgKK3N0YXRpYyB1aW50CiB3bGNfY2FsY19hY2tfdGltZShzdHJ1Y3Qgd2xjX2luZm8gKndsYywgcmF0ZXNwZWNfdCByc3BlYywgdTggcHJlYW1ibGVfdHlwZSkKIHsKIAl1aW50IGR1ciA9IDA7CiAKLQlXTF9UUkFDRSgid2wlZDogd2xjX2NhbGNfYWNrX3RpbWU6IHJzcGVjIDB4JXgsIHByZWFtYmxlX3R5cGUgJWRcbiIsCi0JCSB3bGMtPnB1Yi0+dW5pdCwgcnNwZWMsIHByZWFtYmxlX3R5cGUpOworCUJDTU1TRyh3bGMtPndpcGh5LCAid2wlZDogcnNwZWMgMHgleCwgcHJlYW1ibGVfdHlwZSAlZFxuIiwKKwkJd2xjLT5wdWItPnVuaXQsIHJzcGVjLCBwcmVhbWJsZV90eXBlKTsKIAkvKiBTcGVjIDkuNjogYWNrIHJhdGUgaXMgdGhlIGhpZ2hlc3QgcmF0ZSBpbiBCU1NCYXNpY1JhdGVTZXQgdGhhdCBpcyBsZXNzIHRoYW4KIAkgKiBvciBlcXVhbCB0byB0aGUgcmF0ZSBvZiB0aGUgaW1tZWRpYXRlbHkgcHJldmlvdXMgZnJhbWUgaW4gdGhlIEZFUwogCSAqLwogCXJzcGVjID0gV0xDX0JBU0lDX1JBVEUod2xjLCByc3BlYyk7Ci0JQVNTRVJUKFZBTElEX1JBVEVfREJHKHdsYywgcnNwZWMpKTsKLQogCS8qIEFDSyBmcmFtZSBsZW4gPT0gMTQgPT0gMihmYykgKyAyKGR1cikgKyA2KHJhKSArIDQoZmNzKSAqLwogCWR1ciA9CiAJICAgIHdsY19jYWxjX2ZyYW1lX3RpbWUod2xjLCByc3BlYywgcHJlYW1ibGVfdHlwZSwKQEAgLTcyOTMsOCArNjQ1Miw4IEBACiBzdGF0aWMgdWludAogd2xjX2NhbGNfY3RzX3RpbWUoc3RydWN0IHdsY19pbmZvICp3bGMsIHJhdGVzcGVjX3QgcnNwZWMsIHU4IHByZWFtYmxlX3R5cGUpCiB7Ci0JV0xfVFJBQ0UoIndsJWQ6IHdsY19jYWxjX2N0c190aW1lOiByYXRlc3BlYyAweCV4LCBwcmVhbWJsZV90eXBlICVkXG4iLAotCQkgd2xjLT5wdWItPnVuaXQsIHJzcGVjLCBwcmVhbWJsZV90eXBlKTsKKwlCQ01NU0cod2xjLT53aXBoeSwgIndsJWQ6IHJhdGVzcGVjIDB4JXgsIHByZWFtYmxlX3R5cGUgJWRcbiIsCisJCXdsYy0+cHViLT51bml0LCByc3BlYywgcHJlYW1ibGVfdHlwZSk7CiAJcmV0dXJuIHdsY19jYWxjX2Fja190aW1lKHdsYywgcnNwZWMsIHByZWFtYmxlX3R5cGUpOwogfQogCkBAIC03MzIwLDExICs2NDc5LDEyIEBACiAJCQljb250aW51ZTsKIAogCQkvKiBtYXNrIG9mZiBiYXNpYyBiaXQgKi8KLQkJcmF0ZSA9IChyYXRlc2V0LT5yYXRlc1tpXSAmIFJBVEVfTUFTSyk7CisJCXJhdGUgPSAocmF0ZXNldC0+cmF0ZXNbaV0gJiBXTENfUkFURV9NQVNLKTsKIAogCQlpZiAocmF0ZSA+IFdMQ19NQVhSQVRFKSB7Ci0JCQlXTF9FUlJPUigid2xjX3JhdGVfbG9va3VwX2luaXQ6IGludmFsaWQgcmF0ZSAweCVYIGluIHJhdGUgc2V0XG4iLAotCQkJCSByYXRlc2V0LT5yYXRlc1tpXSk7CisJCQl3aXBoeV9lcnIod2xjLT53aXBoeSwgIndsY19yYXRlX2xvb2t1cF9pbml0OiBpbnZhbGlkICIKKwkJCQkgICJyYXRlIDB4JVggaW4gcmF0ZSBzZXRcbiIsCisJCQkJICByYXRlc2V0LT5yYXRlc1tpXSk7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC03MzQ3LDcgKzY1MDcsNiBAQAogCiAJZm9yIChpID0gMDsgaSA8IHdsYy0+YmFuZC0+aHdfcmF0ZXNldC5jb3VudDsgaSsrKSB7CiAJCXJhdGUgPSB3bGMtPmJhbmQtPmh3X3JhdGVzZXQucmF0ZXNbaV07Ci0JCUFTU0VSVChyYXRlIDw9IFdMQ19NQVhSQVRFKTsKIAogCQlpZiAoYnJbcmF0ZV0gIT0gMCkgewogCQkJLyogVGhpcyByYXRlIGlzIGEgYmFzaWMgcmF0ZS4KQEAgLTc0MDYsOCArNjU2NSw4IEBACiAJICogZm9yIGEgZ2l2ZW4gcmF0ZSwgdGhlIExTLW5pYmJsZSBvZiB0aGUgUExDUCBTSUdOQUwgZmllbGQgaXMKIAkgKiB0aGUgaW5kZXggaW50byB0aGUgcmF0ZSB0YWJsZS4KIAkgKi8KLQlwaHlfcmF0ZSA9IHJhdGVfaW5mb1tyYXRlXSAmIFJBVEVfTUFTSzsKLQliYXNpY19waHlfcmF0ZSA9IHJhdGVfaW5mb1tiYXNpY19yYXRlXSAmIFJBVEVfTUFTSzsKKwlwaHlfcmF0ZSA9IHJhdGVfaW5mb1tyYXRlXSAmIFdMQ19SQVRFX01BU0s7CisJYmFzaWNfcGh5X3JhdGUgPSByYXRlX2luZm9bYmFzaWNfcmF0ZV0gJiBXTENfUkFURV9NQVNLOwogCWluZGV4ID0gcGh5X3JhdGUgJiAweGY7CiAJYmFzaWNfaW5kZXggPSBiYXNpY19waHlfcmF0ZSAmIDB4ZjsKIApAQCAtNzQ0NywxNCArNjYwNiwxMyBAQAogCXVpbnQgaTsKIAogCXJzX2RmbHQgPSB3bGNfcmF0ZXNldF9nZXRfaHdycyh3bGMpOwotCUFTU0VSVChyc19kZmx0ICE9IE5VTEwpOwogCiAJd2xjX3JhdGVzZXRfY29weShyc19kZmx0LCAmcnMpOwogCXdsY19yYXRlc2V0X21jc191cGQoJnJzLCB3bGMtPnN0Zi0+dHhzdHJlYW1zKTsKIAogCS8qIHdhbGsgdGhlIHBoeSByYXRlIHRhYmxlIGFuZCB1cGRhdGUgU0hNIGJhc2ljIHJhdGUgbG9va3VwIHRhYmxlICovCiAJZm9yIChpID0gMDsgaSA8IHJzLmNvdW50OyBpKyspIHsKLQkJcmF0ZSA9IHJzLnJhdGVzW2ldICYgUkFURV9NQVNLOworCQlyYXRlID0gcnMucmF0ZXNbaV0gJiBXTENfUkFURV9NQVNLOwogCiAJCS8qIGZvciBhIGdpdmVuIHJhdGUgV0xDX0JBU0lDX1JBVEUgcmV0dXJucyB0aGUgcmF0ZSBhdAogCQkgKiB3aGljaCBhIHJlc3BvbnNlIEFDSy9DVFMgc2hvdWxkIGJlIHNlbnQuCkBAIC03NDY0LDcgKzY2MjIsNyBAQAogCQkJLyogVGhpcyBzaG91bGQgb25seSBoYXBwZW4gaWYgd2UgYXJlIHVzaW5nIGEKIAkJCSAqIHJlc3RyaWN0ZWQgcmF0ZXNldC4KIAkJCSAqLwotCQkJYmFzaWNfcmF0ZSA9IHJzLnJhdGVzWzBdICYgUkFURV9NQVNLOworCQkJYmFzaWNfcmF0ZSA9IHJzLnJhdGVzWzBdICYgV0xDX1JBVEVfTUFTSzsKIAkJfQogCiAJCXdsY193cml0ZV9yYXRlX3NobSh3bGMsIHJhdGUsIGJhc2ljX3JhdGUpOwpAQCAtNzUwMyw4ICs2NjYxLDggQEAKIAkJCXJldHVybiB0cnVlOwogIGVycm9yOgogCWlmICh2ZXJib3NlKSB7Ci0JCVdMX0VSUk9SKCJ3bCVkOiB3bGNfdmFsaWRfcmF0ZTogcmF0ZSBzcGVjIDB4JXggbm90IGluIGh3X3JhdGVzZXRcbiIsCi0JCQkgd2xjLT5wdWItPnVuaXQsIHJzcGVjKTsKKwkJd2lwaHlfZXJyKHdsYy0+d2lwaHksICJ3bCVkOiB3bGNfdmFsaWRfcmF0ZTogcmF0ZSBzcGVjIDB4JXggIgorCQkJICAibm90IGluIGh3X3JhdGVzZXRcbiIsIHdsYy0+cHViLT51bml0LCByc3BlYyk7CiAJfQogCiAJcmV0dXJuIGZhbHNlOwpAQCAtNzUyNiw3ICs2Njg0LDYgQEAKIAkJCWVsc2UKIAkJCQliYW5kLT5taW1vX2NhcF80MCA9IGZhbHNlOwogCQl9IGVsc2UgewotCQkJQVNTRVJUKGJhbmQtPmJhbmR0eXBlID09IFdMQ19CQU5EXzJHKTsKIAkJCWlmIChid2NhcCA9PSBXTENfTl9CV180MEFMTCkKIAkJCQliYW5kLT5taW1vX2NhcF80MCA9IHRydWU7CiAJCQllbHNlCkBAIC03NTUwLDE0ICs2NzA3LDEzIEBACiAJc2lmcyA9IFNJRlMod2xjLT5iYW5kKTsKIAogCXJzX2RmbHQgPSB3bGNfcmF0ZXNldF9nZXRfaHdycyh3bGMpOwotCUFTU0VSVChyc19kZmx0ICE9IE5VTEwpOwogCiAJd2xjX3JhdGVzZXRfY29weShyc19kZmx0LCAmcnMpOwogCXdsY19yYXRlc2V0X21jc191cGQoJnJzLCB3bGMtPnN0Zi0+dHhzdHJlYW1zKTsKIAogCS8qIHdhbGsgdGhlIHBoeSByYXRlIHRhYmxlIGFuZCB1cGRhdGUgTUFDIGNvcmUgU0hNIGJhc2ljIHJhdGUgdGFibGUgZW50cmllcyAqLwogCWZvciAoaSA9IDA7IGkgPCBycy5jb3VudDsgaSsrKSB7Ci0JCXJhdGUgPSBycy5yYXRlc1tpXSAmIFJBVEVfTUFTSzsKKwkJcmF0ZSA9IHJzLnJhdGVzW2ldICYgV0xDX1JBVEVfTUFTSzsKIAogCQllbnRyeV9wdHIgPSB3bGNfcmF0ZV9zaG1fb2Zmc2V0KHdsYywgcmF0ZSk7CiAKQEAgLTc1NzksNDEgKzY3MzUsNiBAQAogCX0KIH0KIAotdTE2Ci13bGNfY29tcHV0ZV9iY250c2ZvZmYoc3RydWN0IHdsY19pbmZvICp3bGMsIHJhdGVzcGVjX3QgcnNwZWMsCi0JCSAgICAgIGJvb2wgc2hvcnRfcHJlYW1ibGUsIGJvb2wgcGh5ZGVsYXkpCi17Ci0JdWludCBiY250c2ZvZmYgPSAwOwotCi0JaWYgKElTX01DUyhyc3BlYykpIHsKLQkJV0xfRVJST1IoIndsJWQ6IHJlY2QgYmVhY29uIHdpdGggbWNzIHJhdGU7IHJzcGVjIDB4JXhcbiIsCi0JCQkgd2xjLT5wdWItPnVuaXQsIHJzcGVjKTsKLQl9IGVsc2UgaWYgKElTX09GRE0ocnNwZWMpKSB7Ci0JCS8qIHR4IGRlbGF5IGZyb20gTUFDIHRocm91Z2ggcGh5IHRvIGFpciAoMi4xIHVzZWMpICsKLQkJICogcGh5IGhlYWRlciB0aW1lIChwcmVhbWJsZSArIFBMQ1AgU0lHTkFMID09IDIwIHVzZWMpICsKLQkJICogUExDUCBTRVJWSUNFICsgTUFDIGhlYWRlciB0aW1lIChTRVJWSUNFICsgRkMgKyBEVVIgKyBBMSArIEEyICsgQTMgKyBTRVEgPT0gMjYKLQkJICogYnl0ZXMgYXQgYmVhY29uIHJhdGUpCi0JCSAqLwotCQliY250c2ZvZmYgKz0gcGh5ZGVsYXkgPyBEMTFBX1BIWV9UWF9ERUxBWSA6IDA7Ci0JCWJjbnRzZm9mZiArPSBBUEhZX1BSRUFNQkxFX1RJTUUgKyBBUEhZX1NJR05BTF9USU1FOwotCQliY250c2ZvZmYgKz0KLQkJICAgIHdsY19jb21wdXRlX2FpcnRpbWUod2xjLCByc3BlYywKLQkJCQkJQVBIWV9TRVJWSUNFX05CSVRTIC8gOCArCi0JCQkJCURPVDExX01BQ19IRFJfTEVOKTsKLQl9IGVsc2UgewotCQkvKiB0eCBkZWxheSBmcm9tIE1BQyB0aHJvdWdoIHBoeSB0byBhaXIgKDMuNCB1c2VjKSArCi0JCSAqIHBoeSBoZWFkZXIgdGltZSAobG9uZyBwcmVhbWJsZSArIFBMQ1AgPT0gMTkyIHVzZWMpICsKLQkJICogTUFDIGhlYWRlciB0aW1lIChGQyArIERVUiArIEExICsgQTIgKyBBMyArIFNFUSA9PSAyNCBieXRlcyBhdCBiZWFjb24gcmF0ZSkKLQkJICovCi0JCWJjbnRzZm9mZiArPSBwaHlkZWxheSA/IEQxMUJfUEhZX1RYX0RFTEFZIDogMDsKLQkJYmNudHNmb2ZmICs9Ci0JCSAgICBzaG9ydF9wcmVhbWJsZSA/IEQxMUJfUEhZX1NQUkVIRFJfVElNRSA6Ci0JCSAgICBEMTFCX1BIWV9MUFJFSERSX1RJTUU7Ci0JCWJjbnRzZm9mZiArPSB3bGNfY29tcHV0ZV9haXJ0aW1lKHdsYywgcnNwZWMsIERPVDExX01BQ19IRFJfTEVOKTsKLQl9Ci0JcmV0dXJuICh1MTYpIChiY250c2ZvZmYpOwotfQotCiAvKglNYXggYnVmZmVyaW5nIG5lZWRlZCBmb3IgYmVhY29uIHRlbXBsYXRlL3ByYiByZXNwIHRlbXBsYXRlIGlzIDE0MiBieXRlcy4KICAqCiAgKglQTENQIGhlYWRlciBpcyA2IGJ5dGVzLgpAQCAtNzYzNSwxMCArNjc1Niw2IEBACiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICpoOwogCWludCBoZHJfbGVuLCBib2R5X2xlbjsKIAotCUFTU0VSVCgqbGVuID49IDE0Mik7Ci0JQVNTRVJUKHR5cGUgPT0gSUVFRTgwMjExX1NUWVBFX0JFQUNPTiB8fAotCSAgICAgICB0eXBlID09IElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQKTsKLQogCWlmIChNQlNTX0JDTl9FTkFCKGNmZykgJiYgdHlwZSA9PSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OKQogCQloZHJfbGVuID0gRE9UMTFfTUFDX0hEUl9MRU47CiAJZWxzZQpAQCAtNzczMCwxMiArNjg0Nyw2IEBACiAKIAkJd2xjLT5iY25fcnNwZWMgPQogCQkgICAgd2xjX2xvd2VzdF9iYXNpY19yc3BlYyh3bGMsICZjZmctPmN1cnJlbnRfYnNzLT5yYXRlc2V0KTsKLQkJQVNTRVJUKHdsY192YWxpZF9yYXRlCi0JCSAgICAgICAod2xjLCB3bGMtPmJjbl9yc3BlYywKLQkJCUNIU1BFQ19JUzJHKGNmZy0+Y3VycmVudF9ic3MtPgotCQkJCSAgICBjaGFuc3BlYykgPyBXTENfQkFORF8yRyA6IFdMQ19CQU5EXzVHLAotCQkJdHJ1ZSkpOwotCiAJCS8qIHVwZGF0ZSB0aGUgdGVtcGxhdGUgYW5kIHVjb2RlIHNobSAqLwogCQl3bGNfYmNuX3ByYl90ZW1wbGF0ZSh3bGMsIElFRUU4MDIxMV9TVFlQRV9CRUFDT04sCiAJCQkJICAgICB3bGMtPmJjbl9yc3BlYywgY2ZnLCBiY24sICZsZW4pOwpAQCAtNzgyNSw3ICs2OTM2LDcgQEAKIAkJaWYgKHN1c3BlbmQpCiAJCQl3bGNfZW5hYmxlX21hYyh3bGMpOwogCX0gZWxzZSB7CQkvKiBHZW5lcmF0aW5nIHByb2JlIHJlc3AgaW4gc3c7IHVwZGF0ZSBsb2NhbCB0ZW1wbGF0ZSAqLwotCQlBU1NFUlQoMCAmJiAiTm8gc29mdHdhcmUgcHJvYmUgcmVzcG9uc2Ugc3VwcG9ydCB3aXRob3V0IE1CU1MiKTsKKwkJLyogZXJyb3I6IE5vIHNvZnR3YXJlIHByb2JlIHJlc3BvbnNlIHN1cHBvcnQgd2l0aG91dCBNQlNTICovCiAJfQogfQogCkBAIC03ODM3LDExICs2OTQ4LDggQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaDsKIAlzdHJ1Y3Qgc2NiICpzY2I7CiAKLQlBU1NFUlQocGR1KTsKIAl0eGggPSAoZDExdHhoX3QgKikgKHBkdS0+ZGF0YSk7Ci0JQVNTRVJUKHR4aCk7CiAJaCA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSgodTggKikgKHR4aCArIDEpICsgRDExX1BIWV9IRFJfTEVOKTsKLQlBU1NFUlQoaCk7CiAKIAkvKiBnZXQgdGhlIHBrdCBxdWV1ZSBpbmZvLiBUaGlzIHdhcyBwdXQgYXQgd2xjX3NlbmRjdGwgb3Igd2xjX3NlbmQgZm9yIFBEVSAqLwogCWZpZm8gPSBsZTE2X3RvX2NwdSh0eGgtPlR4RnJhbWVJRCkgJiBUWEZJRF9RVUVVRV9NQVNLOwpAQCAtNzg1NCwxMiArNjk2Miw4IEBACiAJaWYgKFRYQVZBSUwod2xjLCBmaWZvKSA8IE1BWF9ETUFfU0VHUykgewogCQkvKiBNYXJrIHByZWNlZGVuY2VzIHJlbGF0ZWQgdG8gdGhpcyBGSUZPLCB1bnNlbmRhYmxlICovCiAJCVdMQ19UWF9GSUZPX0NMRUFSKHdsYywgZmlmbyk7Ci0JCXJldHVybiBCQ01FX0JVU1k7CisJCXJldHVybiAtRUJVU1k7CiAJfQotCi0JaWYgKCFpZWVlODAyMTFfaXNfZGF0YSh0eGgtPk1hY0ZyYW1lQ29udHJvbCkpCi0JCXdsYy0+cHViLT5fY250LT50eGN0bCsrOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc4ODksNyArNjk5Myw3IEBACiAJd2xjX3Jldl9pbmZvX3QgKnJpbmZvID0gKHdsY19yZXZfaW5mb190ICopIGJ1ZjsKIAogCWlmIChsZW4gPCBXTF9SRVZfSU5GT19MRUdBQ1lfTEVOR1RIKQotCQlyZXR1cm4gQkNNRV9CVUZUT09TSE9SVDsKKwkJcmV0dXJuIC1FT1ZFUkZMT1c7CiAKIAlyaW5mby0+dmVuZG9yaWQgPSB3bGMtPnZlbmRvcmlkOwogCXJpbmZvLT5kZXZpY2VpZCA9IHdsYy0+ZGV2aWNlaWQ7CkBAIC03OTE1LDEzICs3MDE5LDEzIEBACiAJCXJpbmZvLT5jaGlwcGtnID0gd2xjLT5wdWItPnNpaC0+Y2hpcHBrZzsKIAl9CiAKLQlyZXR1cm4gQkNNRV9PSzsKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCB3bGNfZGVmYXVsdF9yYXRlc2V0KHN0cnVjdCB3bGNfaW5mbyAqd2xjLCB3bGNfcmF0ZXNldF90ICpycykKIHsKIAl3bGNfcmF0ZXNldF9kZWZhdWx0KHJzLCBOVUxMLCB3bGMtPmJhbmQtPnBoeXR5cGUsIHdsYy0+YmFuZC0+YmFuZHR5cGUsCi0JCQkgICAgZmFsc2UsIFJBVEVfTUFTS19GVUxMLCAoYm9vbCkgTl9FTkFCKHdsYy0+cHViKSwKKwkJCSAgICBmYWxzZSwgV0xDX1JBVEVfTUFTS19GVUxMLCAoYm9vbCkgTl9FTkFCKHdsYy0+cHViKSwKIAkJCSAgICBDSFNQRUNfV0xDX0JXKHdsYy0+ZGVmYXVsdF9ic3MtPmNoYW5zcGVjKSwKIAkJCSAgICB3bGMtPnN0Zi0+dHhzdHJlYW1zKTsKIH0KQEAgLTc5NDMsOCArNzA0Nyw2IEBACiAJICogc3RhcnRpbmcgZnJvbSB0aGUgMkcgY2hhbm5lbHMKIAkgKi8KIAljaGFuc3BlYyA9IENIMjBNSFpfQ0hTUEVDKDEpOwotCUFTU0VSVChjaGFuc3BlYyAhPSBJTlZDSEFOU1BFQyk7Ci0KIAl3bGMtPmhvbWVfY2hhbnNwZWMgPSBiaS0+Y2hhbnNwZWMgPSBjaGFuc3BlYzsKIAogCS8qIGZpbmQgdGhlIGJhbmQgb2Ygb3VyIGRlZmF1bHQgY2hhbm5lbCAqLwpAQCAtNzk1NCwyNCArNzA1NiwxMyBAQAogCiAJLyogaW5pdCBic3MgcmF0ZXMgdG8gdGhlIGJhbmQgc3BlY2lmaWMgZGVmYXVsdCByYXRlIHNldCAqLwogCXdsY19yYXRlc2V0X2RlZmF1bHQoJmJpLT5yYXRlc2V0LCBOVUxMLCBiYW5kLT5waHl0eXBlLCBiYW5kLT5iYW5kdHlwZSwKLQkJCSAgICBmYWxzZSwgUkFURV9NQVNLX0ZVTEwsIChib29sKSBOX0VOQUIod2xjLT5wdWIpLAorCQkJICAgIGZhbHNlLCBXTENfUkFURV9NQVNLX0ZVTEwsIChib29sKSBOX0VOQUIod2xjLT5wdWIpLAogCQkJICAgIENIU1BFQ19XTENfQlcoY2hhbnNwZWMpLCB3bGMtPnN0Zi0+dHhzdHJlYW1zKTsKIAogCWlmIChOX0VOQUIod2xjLT5wdWIpKQogCQliaS0+ZmxhZ3MgfD0gV0xDX0JTU19IVDsKIH0KIAotdm9pZAotd2xjX3VpbnQ2NF9zdWIodTMyICphX2hpZ2gsIHUzMiAqYV9sb3csIHUzMiBiX2hpZ2gsIHUzMiBiX2xvdykKLXsKLQlpZiAoYl9sb3cgPiAqYV9sb3cpIHsKLQkJLyogbG93IGhhbGYgbmVlZHMgYSBjYXJyeSAqLwotCQliX2hpZ2ggKz0gMTsKLQl9Ci0JKmFfbG93IC09IGJfbG93OwotCSphX2hpZ2ggLT0gYl9oaWdoOwotfQotCiBzdGF0aWMgcmF0ZXNwZWNfdAogbWFjODAyMTFfd2xjX3NldF9ucmF0ZShzdHJ1Y3Qgd2xjX2luZm8gKndsYywgc3RydWN0IHdsY2JhbmQgKmN1cl9iYW5kLAogCQkgICAgICAgdTMyIGludF92YWwpCkBAIC03OTkzLDkgKzcwODQsOSBAQAogCWlmIChOX0VOQUIod2xjLT5wdWIpICYmIGlzbWNzKSB7CiAJCS8qIG1jcyBvbmx5IGFsbG93ZWQgd2hlbiBubW9kZSAqLwogCQlpZiAoc3RmID4gUEhZX1RYQzFfTU9ERV9TRE0pIHsKLQkJCVdMX0VSUk9SKCJ3bCVkOiAlczogSW52YWxpZCBzdGZcbiIsCisJCQl3aXBoeV9lcnIod2xjLT53aXBoeSwgIndsJWQ6ICVzOiBJbnZhbGlkIHN0ZlxuIiwKIAkJCQkgV0xDV0xVTklUKHdsYyksIF9fZnVuY19fKTsKLQkJCWJjbWVycm9yID0gQkNNRV9SQU5HRTsKKwkJCWJjbWVycm9yID0gLUVJTlZBTDsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCkBAIC04MDA0LDE3ICs3MDk1LDE4IEBACiAJCQlpZiAoIUNIU1BFQ19JUzQwKHdsYy0+aG9tZV9jaGFuc3BlYykgfHwKIAkJCSAgICAoKHN0ZiAhPSBQSFlfVFhDMV9NT0RFX1NJU08pCiAJCQkgICAgICYmIChzdGYgIT0gUEhZX1RYQzFfTU9ERV9DREQpKSkgewotCQkJCVdMX0VSUk9SKCJ3bCVkOiAlczogSW52YWxpZCBtY3MgMzJcbiIsCi0JCQkJCSBXTENXTFVOSVQod2xjKSwgX19mdW5jX18pOwotCQkJCWJjbWVycm9yID0gQkNNRV9SQU5HRTsKKwkJCQl3aXBoeV9lcnIod2xjLT53aXBoeSwgIndsJWQ6ICVzOiBJbnZhbGlkIG1jcyAiCisJCQkJCSAgIjMyXG4iLCBXTENXTFVOSVQod2xjKSwgX19mdW5jX18pOworCQkJCWJjbWVycm9yID0gLUVJTlZBTDsKIAkJCQlnb3RvIGRvbmU7CiAJCQl9CiAJCQkvKiBtY3MgPiA3IG11c3QgdXNlIHN0ZiBTRE0gKi8KIAkJfSBlbHNlIGlmIChyYXRlID4gSElHSEVTVF9TSU5HTEVfU1RSRUFNX01DUykgewogCQkJLyogbWNzID4gNyBtdXN0IHVzZSBzdGYgU0RNICovCiAJCQlpZiAoc3RmICE9IFBIWV9UWEMxX01PREVfU0RNKSB7Ci0JCQkJV0xfVFJBQ0UoIndsJWQ6ICVzOiBlbmFibGluZyBTRE0gbW9kZSBmb3IgbWNzICVkXG4iLAotCQkJCQkgV0xDV0xVTklUKHdsYyksIF9fZnVuY19fLCByYXRlKTsKKwkJCQlCQ01NU0cod2xjLT53aXBoeSwgIndsJWQ6IGVuYWJsaW5nICIKKwkJCQkJICJTRE0gbW9kZSBmb3IgbWNzICVkXG4iLAorCQkJCQkgV0xDV0xVTklUKHdsYyksIHJhdGUpOwogCQkJCXN0ZiA9IFBIWV9UWEMxX01PREVfU0RNOwogCQkJfQogCQl9IGVsc2UgewpAQCAtODAyMiwzOCArNzExNCwzOCBAQAogCQkJaWYgKChzdGYgPiBQSFlfVFhDMV9NT0RFX1NUQkMpIHx8CiAJCQkgICAgKCFXTENfU1RCQ19DQVBfUEhZKHdsYykKIAkJCSAgICAgJiYgKHN0ZiA9PSBQSFlfVFhDMV9NT0RFX1NUQkMpKSkgewotCQkJCVdMX0VSUk9SKCJ3bCVkOiAlczogSW52YWxpZCBTVEJDXG4iLAotCQkJCQkgV0xDV0xVTklUKHdsYyksIF9fZnVuY19fKTsKLQkJCQliY21lcnJvciA9IEJDTUVfUkFOR0U7CisJCQkJd2lwaHlfZXJyKHdsYy0+d2lwaHksICJ3bCVkOiAlczogSW52YWxpZCBTVEJDIgorCQkJCQkgICJcbiIsIFdMQ1dMVU5JVCh3bGMpLCBfX2Z1bmNfXyk7CisJCQkJYmNtZXJyb3IgPSAtRUlOVkFMOwogCQkJCWdvdG8gZG9uZTsKIAkJCX0KIAkJfQogCX0gZWxzZSBpZiAoSVNfT0ZETShyYXRlKSkgewogCQlpZiAoKHN0ZiAhPSBQSFlfVFhDMV9NT0RFX0NERCkgJiYgKHN0ZiAhPSBQSFlfVFhDMV9NT0RFX1NJU08pKSB7Ci0JCQlXTF9FUlJPUigid2wlZDogJXM6IEludmFsaWQgT0ZETVxuIiwKLQkJCQkgV0xDV0xVTklUKHdsYyksIF9fZnVuY19fKTsKLQkJCWJjbWVycm9yID0gQkNNRV9SQU5HRTsKKwkJCXdpcGh5X2Vycih3bGMtPndpcGh5LCAid2wlZDogJXM6IEludmFsaWQgT0ZETVxuIiwKKwkJCQkgIFdMQ1dMVU5JVCh3bGMpLCBfX2Z1bmNfXyk7CisJCQliY21lcnJvciA9IC1FSU5WQUw7CiAJCQlnb3RvIGRvbmU7CiAJCX0KIAl9IGVsc2UgaWYgKElTX0NDSyhyYXRlKSkgewogCQlpZiAoKGN1cl9iYW5kLT5iYW5kdHlwZSAhPSBXTENfQkFORF8yRykKIAkJICAgIHx8IChzdGYgIT0gUEhZX1RYQzFfTU9ERV9TSVNPKSkgewotCQkJV0xfRVJST1IoIndsJWQ6ICVzOiBJbnZhbGlkIENDS1xuIiwKLQkJCQkgV0xDV0xVTklUKHdsYyksIF9fZnVuY19fKTsKLQkJCWJjbWVycm9yID0gQkNNRV9SQU5HRTsKKwkJCXdpcGh5X2Vycih3bGMtPndpcGh5LCAid2wlZDogJXM6IEludmFsaWQgQ0NLXG4iLAorCQkJCSAgV0xDV0xVTklUKHdsYyksIF9fZnVuY19fKTsKKwkJCWJjbWVycm9yID0gLUVJTlZBTDsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCX0gZWxzZSB7Ci0JCVdMX0VSUk9SKCJ3bCVkOiAlczogVW5rbm93biByYXRlIHR5cGVcbiIsCi0JCQkgV0xDV0xVTklUKHdsYyksIF9fZnVuY19fKTsKLQkJYmNtZXJyb3IgPSBCQ01FX1JBTkdFOworCQl3aXBoeV9lcnIod2xjLT53aXBoeSwgIndsJWQ6ICVzOiBVbmtub3duIHJhdGUgdHlwZVxuIiwKKwkJCSAgV0xDV0xVTklUKHdsYyksIF9fZnVuY19fKTsKKwkJYmNtZXJyb3IgPSAtRUlOVkFMOwogCQlnb3RvIGRvbmU7CiAJfQogCS8qIG1ha2Ugc3VyZSBtdWx0aXBsZSBhbnRlbm5hZSBhcmUgYXZhaWxhYmxlIGZvciBub24tc2lzbyByYXRlcyAqLwogCWlmICgoc3RmICE9IFBIWV9UWEMxX01PREVfU0lTTykgJiYgKHdsYy0+c3RmLT50eHN0cmVhbXMgPT0gMSkpIHsKLQkJV0xfRVJST1IoIndsJWQ6ICVzOiBTSVNPIGFudGVubmEgYnV0ICFTSVNPIHJlcXVlc3RcbiIsCi0JCQkgV0xDV0xVTklUKHdsYyksIF9fZnVuY19fKTsKLQkJYmNtZXJyb3IgPSBCQ01FX1JBTkdFOworCQl3aXBoeV9lcnIod2xjLT53aXBoeSwgIndsJWQ6ICVzOiBTSVNPIGFudGVubmEgYnV0ICFTSVNPICIKKwkJCSAgInJlcXVlc3RcbiIsIFdMQ1dMVU5JVCh3bGMpLCBfX2Z1bmNfXyk7CisJCWJjbWVycm9yID0gLUVJTlZBTDsKIAkJZ290byBkb25lOwogCX0KIApAQCAtODA4Miw4ICs3MTc0LDcgQEAKIAl9CiAKIAlyZXR1cm4gcnNwZWM7Ci0gZG9uZToKLQlXTF9FUlJPUigiSG9hcmtcbiIpOworZG9uZToKIAlyZXR1cm4gcmF0ZTsKIH0KIApAQCAtODA5Nyw4ICs3MTg4LDkgQEAKIAkgICAgaXNPRkRNID8gTV9UWF9JRExFX0JVU1lfUkFUSU9fWF8xNl9PRkRNIDoKIAkgICAgTV9UWF9JRExFX0JVU1lfUkFUSU9fWF8xNl9DQ0s7CiAJaWYgKGR1dHlfY3ljbGUgPiAxMDAgfHwgZHV0eV9jeWNsZSA8IDApIHsKLQkJV0xfRVJST1IoIndsJWQ6ICBkdXR5IGN5Y2xlIHZhbHVlIG9mZiBsaW1pdFxuIiwgd2xjLT5wdWItPnVuaXQpOwotCQlyZXR1cm4gQkNNRV9SQU5HRTsKKwkJd2lwaHlfZXJyKHdsYy0+d2lwaHksICJ3bCVkOiAgZHV0eSBjeWNsZSB2YWx1ZSBvZmYgbGltaXRcbiIsCisJCQkgIHdsYy0+cHViLT51bml0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChkdXR5X2N5Y2xlKQogCQlpZGxlX2J1c3lfcmF0aW9feF8xNiA9ICgxMDAgLSBkdXR5X2N5Y2xlKSAqIDE2IC8gZHV0eV9jeWNsZTsKQEAgLTgxMTEsNyArNzIwMyw3IEBACiAJZWxzZQogCQl3bGMtPnR4X2R1dHlfY3ljbGVfY2NrID0gKHUxNikgZHV0eV9jeWNsZTsKIAotCXJldHVybiBCQ01FX09LOworCXJldHVybiAwOwogfQogCiAvKiBSZWFkIGEgc2luZ2xlIHUxNiBmcm9tIHNoYXJlZCBtZW1vcnkuCkBAIC04MTMwLDIyICs3MjIyLDYgQEAKIAl3bGNfYm1hY193cml0ZV9zaG0od2xjLT5odywgb2Zmc2V0LCB2KTsKIH0KIAotLyogU2V0IGEgcmFuZ2Ugb2Ygc2hhcmVkIG1lbW9yeSB0byBhIHZhbHVlLgotICogU0hNICdvZmZzZXQnIG5lZWRzIHRvIGJlIGFuIGV2ZW4gYWRkcmVzcyBhbmQKLSAqIFJhbmdlIGxlbmd0aCAnbGVuJyBtdXN0IGJlIGFuIGV2ZW4gbnVtYmVyIG9mIGJ5dGVzCi0gKi8KLXZvaWQgd2xjX3NldF9zaG0oc3RydWN0IHdsY19pbmZvICp3bGMsIHVpbnQgb2Zmc2V0LCB1MTYgdiwgaW50IGxlbikKLXsKLQkvKiBvZmZzZXQgYW5kIGxlbiBuZWVkIHRvIGJlIGV2ZW4gKi8KLQlBU1NFUlQoKG9mZnNldCAmIDEpID09IDApOwotCUFTU0VSVCgobGVuICYgMSkgPT0gMCk7Ci0KLQlpZiAobGVuIDw9IDApCi0JCXJldHVybjsKLQotCXdsY19ibWFjX3NldF9zaG0od2xjLT5odywgb2Zmc2V0LCB2LCBsZW4pOwotfQotCiAvKiBDb3B5IGEgYnVmZmVyIHRvIHNoYXJlZCBtZW1vcnkuCiAgKiBTSE0gJ29mZnNldCcgbmVlZHMgdG8gYmUgYW4gZXZlbiBhZGRyZXNzIGFuZAogICogQnVmZmVyIGxlbmd0aCAnbGVuJyBtdXN0IGJlIGFuIGV2ZW4gbnVtYmVyIG9mIGJ5dGVzCkBAIC04MTUzLDUyICs3MjI5LDI0IEBACiB2b2lkIHdsY19jb3B5dG9fc2htKHN0cnVjdCB3bGNfaW5mbyAqd2xjLCB1aW50IG9mZnNldCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbGVuKQogewogCS8qIG9mZnNldCBhbmQgbGVuIG5lZWQgdG8gYmUgZXZlbiAqLwotCUFTU0VSVCgob2Zmc2V0ICYgMSkgPT0gMCk7Ci0JQVNTRVJUKChsZW4gJiAxKSA9PSAwKTsKLQotCWlmIChsZW4gPD0gMCkKKwlpZiAobGVuIDw9IDAgfHwgKG9mZnNldCAmIDEpIHx8IChsZW4gJiAxKSkKIAkJcmV0dXJuOworCiAJd2xjX2JtYWNfY29weXRvX29iam1lbSh3bGMtPmh3LCBvZmZzZXQsIGJ1ZiwgbGVuLCBPQkpBRERSX1NITV9TRUwpOwogCiB9CiAKLS8qIENvcHkgZnJvbSBzaGFyZWQgbWVtb3J5IHRvIGEgYnVmZmVyLgotICogU0hNICdvZmZzZXQnIG5lZWRzIHRvIGJlIGFuIGV2ZW4gYWRkcmVzcyBhbmQKLSAqIEJ1ZmZlciBsZW5ndGggJ2xlbicgbXVzdCBiZSBhbiBldmVuIG51bWJlciBvZiBieXRlcwotICovCi12b2lkIHdsY19jb3B5ZnJvbV9zaG0oc3RydWN0IHdsY19pbmZvICp3bGMsIHVpbnQgb2Zmc2V0LCB2b2lkICpidWYsIGludCBsZW4pCi17Ci0JLyogb2Zmc2V0IGFuZCBsZW4gbmVlZCB0byBiZSBldmVuICovCi0JQVNTRVJUKChvZmZzZXQgJiAxKSA9PSAwKTsKLQlBU1NFUlQoKGxlbiAmIDEpID09IDApOwotCi0JaWYgKGxlbiA8PSAwKQotCQlyZXR1cm47Ci0KLQl3bGNfYm1hY19jb3B5ZnJvbV9vYmptZW0od2xjLT5odywgb2Zmc2V0LCBidWYsIGxlbiwgT0JKQUREUl9TSE1fU0VMKTsKLX0KLQogLyogd3JhcHBlciBCTUFDIGZ1bmN0aW9ucyB0byBmb3IgSElHSCBkcml2ZXIgYWNjZXNzICovCiB2b2lkIHdsY19tY3RybChzdHJ1Y3Qgd2xjX2luZm8gKndsYywgdTMyIG1hc2ssIHUzMiB2YWwpCiB7CiAJd2xjX2JtYWNfbWN0cmwod2xjLT5odywgbWFzaywgdmFsKTsKIH0KIAotdm9pZCB3bGNfY29yZXJlc2V0KHN0cnVjdCB3bGNfaW5mbyAqd2xjLCB1MzIgZmxhZ3MpCi17Ci0Jd2xjX2JtYWNfY29yZXJlc2V0KHdsYy0+aHcsIGZsYWdzKTsKLX0KLQogdm9pZCB3bGNfbWhmKHN0cnVjdCB3bGNfaW5mbyAqd2xjLCB1OCBpZHgsIHUxNiBtYXNrLCB1MTYgdmFsLCBpbnQgYmFuZHMpCiB7CiAJd2xjX2JtYWNfbWhmKHdsYy0+aHcsIGlkeCwgbWFzaywgdmFsLCBiYW5kcyk7CiB9CiAKLXUxNiB3bGNfbWhmX2dldChzdHJ1Y3Qgd2xjX2luZm8gKndsYywgdTggaWR4LCBpbnQgYmFuZHMpCi17Ci0JcmV0dXJuIHdsY19ibWFjX21oZl9nZXQod2xjLT5odywgaWR4LCBiYW5kcyk7Ci19Ci0KIGludCB3bGNfeG10Zmlmb19zel9nZXQoc3RydWN0IHdsY19pbmZvICp3bGMsIHVpbnQgZmlmbywgdWludCAqYmxvY2tzKQogewogCXJldHVybiB3bGNfYm1hY194bXRmaWZvX3N6X2dldCh3bGMtPmh3LCBmaWZvLCBibG9ja3MpOwpAQCAtODIyNSwxNiArNzI3Myw2IEBACiAJCW1lbWNweSh3bGMtPmNmZy0+QlNTSUQsIGFkZHIsIEVUSF9BTEVOKTsKIH0KIAotdm9pZCB3bGNfc2V0X3JjbXRhKHN0cnVjdCB3bGNfaW5mbyAqd2xjLCBpbnQgaWR4LCBjb25zdCB1OCAqYWRkcikKLXsKLQl3bGNfYm1hY19zZXRfcmNtdGEod2xjLT5odywgaWR4LCBhZGRyKTsKLX0KLQotdm9pZCB3bGNfcmVhZF90c2Yoc3RydWN0IHdsY19pbmZvICp3bGMsIHUzMiAqdHNmX2xfcHRyLCB1MzIgKnRzZl9oX3B0cikKLXsKLQl3bGNfYm1hY19yZWFkX3RzZih3bGMtPmh3LCB0c2ZfbF9wdHIsIHRzZl9oX3B0cik7Ci19Ci0KIHZvaWQgd2xjX3NldF9jd21pbihzdHJ1Y3Qgd2xjX2luZm8gKndsYywgdTE2IG5ld21pbikKIHsKIAl3bGMtPmJhbmQtPkNXbWluID0gbmV3bWluOwpAQCAtODI0NywxMiArNzI4NSw2IEBACiAJd2xjX2JtYWNfc2V0X2N3bWF4KHdsYy0+aHcsIG5ld21heCk7CiB9CiAKLXZvaWQgd2xjX2ZpZm9lcnJvcnMoc3RydWN0IHdsY19pbmZvICp3bGMpCi17Ci0KLQl3bGNfYm1hY19maWZvZXJyb3JzKHdsYy0+aHcpOwotfQotCiAvKiBTZWFyY2ggbWVtIHJ3IHV0aWxpdGllcyAqLwogCiB2b2lkIHdsY19wbGxyZXEoc3RydWN0IHdsY19pbmZvICp3bGMsIGJvb2wgc2V0LCBtYm9vbCByZXFfYml0KQpAQCAtODI2NCwxNyArNzI5Niw2IEBACiB7CiB9CiAKLXZvaWQgd2xjX2h0X21pbW9wc19jYXBfdXBkYXRlKHN0cnVjdCB3bGNfaW5mbyAqd2xjLCB1OCBtaW1vcHNfbW9kZSkKLXsKLQl3bGMtPmh0X2NhcC5jYXBfaW5mbyAmPSB+SUVFRTgwMjExX0hUX0NBUF9TTV9QUzsKLQl3bGMtPmh0X2NhcC5jYXBfaW5mbyB8PSAobWltb3BzX21vZGUgPDwgSUVFRTgwMjExX0hUX0NBUF9TTV9QU19TSElGVCk7Ci0KLQlpZiAoQVBfRU5BQih3bGMtPnB1YikgJiYgd2xjLT5jbGspIHsKLQkJd2xjX3VwZGF0ZV9iZWFjb24od2xjKTsKLQkJd2xjX3VwZGF0ZV9wcm9iZV9yZXNwKHdsYywgdHJ1ZSk7Ci0JfQotfQotCiAvKiBjaGVjayBmb3IgdGhlIHBhcnRpY3VsYXIgcHJpb3JpdHkgZmxvdyBjb250cm9sIGJpdCBiZWluZyBzZXQgKi8KIGJvb2wKIHdsY190eGZsb3djb250cm9sX3ByaW9faXNzZXQoc3RydWN0IHdsY19pbmZvICp3bGMsIHN0cnVjdCB3bGNfdHhxX2luZm8gKnEsCkBAIC04Mjg1LDcgKzczMDYsNiBAQAogCWlmIChwcmlvID09IEFMTFBSSU8pIHsKIAkJcHJpb19tYXNrID0gVFhRX1NUT1BfRk9SX1BSSU9GQ19NQVNLOwogCX0gZWxzZSB7Ci0JCUFTU0VSVChwcmlvID49IDAgJiYgcHJpbyA8PSBNQVhQUklPKTsKIAkJcHJpb19tYXNrID0gTkJJVFZBTChwcmlvKTsKIAl9CiAKQEAgLTgyOTksMTIgKzczMTksMTEgQEAKIAl1aW50IHByaW9fYml0czsKIAl1aW50IGN1cl9iaXRzOwogCi0JV0xfVFJBQ0UoIiVzOiBmbG93IGNvbnRyb2wga2lja3MgaW5cbiIsIF9fZnVuY19fKTsKKwlCQ01NU0cod2xjLT53aXBoeSwgImZsb3cgY29udHJvbCBraWNrcyBpblxuIik7CiAKIAlpZiAocHJpbyA9PSBBTExQUklPKSB7CiAJCXByaW9fYml0cyA9IFRYUV9TVE9QX0ZPUl9QUklPRkNfTUFTSzsKIAl9IGVsc2UgewotCQlBU1NFUlQocHJpbyA+PSAwICYmIHByaW8gPD0gTUFYUFJJTyk7CiAJCXByaW9fYml0cyA9IE5CSVRWQUwocHJpbyk7CiAJfQogCkBAIC04MzQxLDkgKzczNjAsNiBAQAogewogCXVpbnQgcHJldl9vdmVycmlkZTsKIAotCUFTU0VSVChvdmVycmlkZSAhPSAwKTsKLQlBU1NFUlQoKG92ZXJyaWRlICYgVFhRX1NUT1BfRk9SX1BSSU9GQ19NQVNLKSA9PSAwKTsKLQogCXByZXZfb3ZlcnJpZGUgPSAocWktPnN0b3BwZWQgJiB+VFhRX1NUT1BfRk9SX1BSSU9GQ19NQVNLKTsKIAogCS8qIFVwZGF0ZSB0aGUgZmxvdyBjb250cm9sIGJpdHMgYW5kIGRvIGFuIGVhcmx5IHJldHVybiBpZiB0aGVyZSBpcwpAQCAtODQxMSw3ICs3NDI3LDcgQEAKIHsKIAlzdHJ1Y3Qgd2xjX3R4cV9pbmZvICpxaSwgKnA7CiAKLQlxaSA9IHdsY19jYWxsb2Mod2xjLT5wdWItPnVuaXQsIHNpemVvZihzdHJ1Y3Qgd2xjX3R4cV9pbmZvKSk7CisJcWkgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd2xjX3R4cV9pbmZvKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHFpICE9IE5VTEwpIHsKIAkJLyoKIAkJICogSGF2ZSBlbm91Z2ggcm9vbSBmb3IgY29udHJvbCBwYWNrZXRzIGFsb25nIHdpdGggSEkgd2F0ZXJtYXJrCkBAIC04NDE5LDcgKzc0MzUsNyBAQAogCQkgKiBsZWF2ZSBQUyBtb2RlLiBUaGUgd2F0ZXJtYXJrIGZvciBmbG93Y29udHJvbCB0byBPUyBwYWNrZXRzCiAJCSAqIHdpbGwgcmVtYWluIHRoZSBzYW1lCiAJCSAqLwotCQlwa3RxX2luaXQoJnFpLT5xLCBXTENfUFJFQ19DT1VOVCwKKwkJYmNtX3BrdHFfaW5pdCgmcWktPnEsIFdMQ19QUkVDX0NPVU5ULAogCQkJICAoMiAqIHdsYy0+cHViLT50dW5hYmxlcy0+ZGF0YWhpd2F0KSArIFBLVFFfTEVOX0RFRkFVTFQKIAkJCSAgKyB3bGMtPnB1Yi0+cHNxX3BrdHNfdG90YWwpOwogCkBAIC04NDUwLDcgKzc0NjYsNiBAQAogCWVsc2UgewogCQl3aGlsZSAocCAhPSBOVUxMICYmIHAtPm5leHQgIT0gcWkpCiAJCQlwID0gcC0+bmV4dDsKLQkJQVNTRVJUKHAtPm5leHQgPT0gcWkpOwogCQlpZiAocCAhPSBOVUxMKQogCQkJcC0+bmV4dCA9IHAtPm5leHQtPm5leHQ7CiAJfQpAQCAtODQ5NCwzICs3NTA5LDIxIEBACiAJCQlkbWFfd2Fsa19wYWNrZXRzKGRtYWgsIGRtYV9jYWxsYmFja19mbiwgc3RhKTsKIAl9CiB9CisKK2ludCB3bGNfZ2V0X2N1cmJhbmQoc3RydWN0IHdsY19pbmZvICp3bGMpCit7CisJcmV0dXJuIHdsYy0+YmFuZC0+YmFuZHVuaXQ7Cit9CisKK3ZvaWQgd2xjX3dhaXRfZm9yX3R4X2NvbXBsZXRpb24oc3RydWN0IHdsY19pbmZvICp3bGMsIGJvb2wgZHJvcCkKK3sKKwkvKiBmbHVzaCBwYWNrZXQgcXVldWUgd2hlbiByZXF1ZXN0ZWQgKi8KKwlpZiAoZHJvcCkKKwkJYmNtX3BrdHFfZmx1c2goJndsYy0+cGt0X3F1ZXVlLT5xLCBmYWxzZSwgTlVMTCwgTlVMTCk7CisKKwkvKiB3YWl0IGZvciBxdWV1ZSBhbmQgRE1BIGZpZm9zIHRvIHJ1biBkcnkgKi8KKwl3aGlsZSAoIXBrdHFfZW1wdHkoJndsYy0+cGt0X3F1ZXVlLT5xKSB8fAorCSAgICAgICBUWFBLVFBFTkRUT1Qod2xjKSA+IDApIHsKKwkJd2xfbXNsZWVwKHdsYy0+d2wsIDEpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX21haW4uaCBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX21haW4uaAppbmRleCA5NjBmODJjLi5mYjQ4ZGZjYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX21haW4uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19tYWluLmgKQEAgLTk4LDcgKzk4LDYgQEAKIAkoY2ZnKS0+d3NlY19wb3J0b3BlbiA6IHRydWUpCiAKICNkZWZpbmUgUFNfQUxMT1dFRCh3bGMpCXdsY19wc19hbGxvd2VkKHdsYykKLSNkZWZpbmUgU1RBWV9BV0FLRSh3bGMpIHdsY19zdGF5X2F3YWtlKHdsYykKIAogI2RlZmluZSBEQVRBX0JMT0NLX1RYX1NVUFIJKDEgPDwgNCkKIApAQCAtMTY2LDkgKzE2NSw2IEBACiAjZGVmaW5lIFdMQ19QTExSRVFfUkFESU9fTU9OCTB4MgkvKiBob2xkIHBsbCBmb3IgcmFkaW8gbW9uaXRvciByZWdpc3RlciBjaGVja2luZyAqLwogI2RlZmluZSBXTENfUExMUkVRX0ZMSVAJCTB4NAkvKiBob2xkL3JlbGVhc2UgcGxsIGZvciBzb21lIHNob3J0IG9wZXJhdGlvbiAqLwogCi0vKiBEbyB3ZSBzdXBwb3J0IHRoaXMgcmF0ZT8gKi8KLSNkZWZpbmUgVkFMSURfUkFURV9EQkcod2xjLCByc3BlYykgd2xjX3ZhbGlkX3JhdGUod2xjLCByc3BlYywgV0xDX0JBTkRfQVVUTywgdHJ1ZSkKLQogLyoKICAqIE1hY3JvcyB0byBjaGVjayBpZiBBUCBvciBTVEEgaXMgYWN0aXZlLgogICogQVAgQWN0aXZlIG1lYW5zIG1vcmUgdGhhbiBqdXN0IGNvbmZpZ3VyZWQ6IGRyaXZlciBhbmQgQlNTIGFyZSAidXAiOwpAQCAtMTk2LDcgKzE5Miw3IEBACiAJKCh3bGMtPmh3LT5jbGspID8gICBcCiAJKChSX1JFRygmd2xjLT5ody0+cmVncy0+bWFjY29udHJvbCkgJiBcCiAJKE1DVExfUFNNX0pNUF8wIHwgTUNUTF9JSFJfRU4pKSAhPSBNQ1RMX0lIUl9FTikgOiBcCi0JKHNpX2RldmljZXJlbW92ZWQod2xjLT5ody0+c2loKSkpCisJKGFpX2RldmljZXJlbW92ZWQod2xjLT5ody0+c2loKSkpCiAKICNkZWZpbmUgV0xDV0xVTklUKHdsYykJCSgod2xjKS0+cHViLT51bml0KQogCkBAIC03NDYsOSArNzQyLDcgQEAKIAl1MTYgbmV4dF9ic3NjZmdfSUQ7CiAKIAlzdHJ1Y3Qgd2xjX2lmICp3bGNpZl9saXN0OwkvKiBsaW5rZWQgbGlzdCBvZiB3bGNfaWYgc3RydWN0cyAqLwotCXN0cnVjdCB3bGNfdHhxX2luZm8gKmFjdGl2ZV9xdWV1ZTsgLyogdHhxIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZQotCQkJCQkgICAgKiB0cmFuc21pdCBjb250ZXh0Ci0JCQkJCSAgICAqLworCXN0cnVjdCB3bGNfdHhxX2luZm8gKnBrdF9xdWV1ZTsgLyogdHhxIGZvciB0cmFuc21pdCBwYWNrZXRzICovCiAJdTMyIG1wY19kdXI7CQkvKiB0b3RhbCB0aW1lIChtcykgaW4gbXBjIG1vZGUgZXhjZXB0IGZvciB0aGUKIAkJCQkgKiBwb3J0aW9uIHNpbmNlIHJhZGlvIGlzIHR1cm5lZCBvZmYgbGFzdCB0aW1lCiAJCQkJICovCkBAIC03NTcsNiArNzUxLDcgQEAKIAkJCQkgKi8KIAlib29sIHByODA4Mzhfd2FyOwogCXVpbnQgaHdyeG9mZjsKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5OwogfTsKIAogLyogYW50c2VsIG1vZHVsZSBzcGVjaWZpYyBzdGF0ZSAqLwpAQCAtNzk0LDcgKzc4OSw2IEBACiAjZGVmaW5lIFdMQ19JU19NQVRDSF9TU0lEKHdsYywgc3NpZDEsIHNzaWQyLCBsZW4xLCBsZW4yKSBcCiAJKChsZW4xID09IGxlbjIpICYmICFtZW1jbXAoc3NpZDEsIHNzaWQyLCBsZW4xKSkKIAotZXh0ZXJuIHZvaWQgd2xjX2hpZ2hfZHBjKHN0cnVjdCB3bGNfaW5mbyAqd2xjLCB1MzIgbWFjaW50c3RhdHVzKTsKIGV4dGVybiB2b2lkIHdsY19mYXRhbF9lcnJvcihzdHJ1Y3Qgd2xjX2luZm8gKndsYyk7CiBleHRlcm4gdm9pZCB3bGNfYm1hY19ycGNfd2F0Y2hkb2coc3RydWN0IHdsY19pbmZvICp3bGMpOwogZXh0ZXJuIHZvaWQgd2xjX3JlY3Yoc3RydWN0IHdsY19pbmZvICp3bGMsIHN0cnVjdCBza19idWZmICpwKTsKQEAgLTgxMSwyMSArODA1LDEwIEBACiAJCQkJICAgdm9pZCAqYnVmKTsKIGV4dGVybiB2b2lkIHdsY193cml0ZV9od19iY250ZW1wbGF0ZXMoc3RydWN0IHdsY19pbmZvICp3bGMsIHZvaWQgKmJjbiwgaW50IGxlbiwKIAkJCQkgICAgICBib29sIGJvdGgpOwotI2lmIGRlZmluZWQoQkNNREJHKQotZXh0ZXJuIHZvaWQgd2xjX2dldF9yY210YShzdHJ1Y3Qgd2xjX2luZm8gKndsYywgaW50IGlkeCwKLQkJCSAgdTggKmFkZHIpOwotI2VuZGlmCi1leHRlcm4gdm9pZCB3bGNfc2V0X3JjbXRhKHN0cnVjdCB3bGNfaW5mbyAqd2xjLCBpbnQgaWR4LAotCQkJICBjb25zdCB1OCAqYWRkcik7Ci1leHRlcm4gdm9pZCB3bGNfcmVhZF90c2Yoc3RydWN0IHdsY19pbmZvICp3bGMsIHUzMiAqdHNmX2xfcHRyLAotCQkJIHUzMiAqdHNmX2hfcHRyKTsKIGV4dGVybiB2b2lkIHdsY19zZXRfY3dtaW4oc3RydWN0IHdsY19pbmZvICp3bGMsIHUxNiBuZXdtaW4pOwogZXh0ZXJuIHZvaWQgd2xjX3NldF9jd21heChzdHJ1Y3Qgd2xjX2luZm8gKndsYywgdTE2IG5ld21heCk7Ci1leHRlcm4gdm9pZCB3bGNfZmlmb2Vycm9ycyhzdHJ1Y3Qgd2xjX2luZm8gKndsYyk7CiBleHRlcm4gdm9pZCB3bGNfcGxscmVxKHN0cnVjdCB3bGNfaW5mbyAqd2xjLCBib29sIHNldCwgbWJvb2wgcmVxX2JpdCk7CiBleHRlcm4gdm9pZCB3bGNfcmVzZXRfYm1hY19kb25lKHN0cnVjdCB3bGNfaW5mbyAqd2xjKTsKLWV4dGVybiB2b2lkIHdsY19od3RpbWVyX2dwdGltZXJfc2V0KHN0cnVjdCB3bGNfaW5mbyAqd2xjLCB1aW50IHVzKTsKLWV4dGVybiB2b2lkIHdsY19od3RpbWVyX2dwdGltZXJfYWJvcnQoc3RydWN0IHdsY19pbmZvICp3bGMpOwogCiAjaWYgZGVmaW5lZChCQ01EQkcpCiBleHRlcm4gdm9pZCB3bGNfcHJpbnRfcnhoKGQxMXJ4aGRyX3QgKnJ4aCk7CkBAIC04NjAsNyArODQzLDcgQEAKIAkJCQkgICAgICAgYm9vbCBvbiwgdWludCBvdmVycmlkZSk7CiBleHRlcm4gYm9vbCB3bGNfdHhmbG93Y29udHJvbF9wcmlvX2lzc2V0KHN0cnVjdCB3bGNfaW5mbyAqd2xjLAogCQkJCQkgc3RydWN0IHdsY190eHFfaW5mbyAqcWksIGludCBwcmlvKTsKLWV4dGVybiB2b2lkIHdsY19zZW5kX3Eoc3RydWN0IHdsY19pbmZvICp3bGMsIHN0cnVjdCB3bGNfdHhxX2luZm8gKnFpKTsKK2V4dGVybiB2b2lkIHdsY19zZW5kX3Eoc3RydWN0IHdsY19pbmZvICp3bGMpOwogZXh0ZXJuIGludCB3bGNfcHJlcF9wZHUoc3RydWN0IHdsY19pbmZvICp3bGMsIHN0cnVjdCBza19idWZmICpwZHUsIHVpbnQgKmZpZm8pOwogCiBleHRlcm4gdTE2IHdsY19jYWxjX2xzaWdfbGVuKHN0cnVjdCB3bGNfaW5mbyAqd2xjLCByYXRlc3BlY190IHJhdGVzcGVjLApAQCAtODgzLDIxICs4NjYsMTQgQEAKIAkJCXN0cnVjdCBiY21zdHJidWYgKmIpOwogI2VuZGlmCiAKLWV4dGVybiBib29sIHdsY19wc19jaGVjayhzdHJ1Y3Qgd2xjX2luZm8gKndsYyk7CiBleHRlcm4gdm9pZCB3bGNfcmVwcmF0ZV9pbml0KHN0cnVjdCB3bGNfaW5mbyAqd2xjKTsKIGV4dGVybiB2b2lkIHdsY19ic3NjZmdfcmVwcmF0ZV9pbml0KHN0cnVjdCB3bGNfYnNzY2ZnICpic3NjZmcpOwotZXh0ZXJuIHZvaWQgd2xjX3VpbnQ2NF9zdWIodTMyICphX2hpZ2gsIHUzMiAqYV9sb3csIHUzMiBiX2hpZ2gsCi0JCQkgICB1MzIgYl9sb3cpOwotZXh0ZXJuIHUzMiB3bGNfY2FsY190YnR0X29mZnNldCh1MzIgYmksIHUzMiB0c2ZfaCwgdTMyIHRzZl9sKTsKIAogLyogU2hhcmVkIG1lbW9yeSBhY2Nlc3MgKi8KIGV4dGVybiB2b2lkIHdsY193cml0ZV9zaG0oc3RydWN0IHdsY19pbmZvICp3bGMsIHVpbnQgb2Zmc2V0LCB1MTYgdik7CiBleHRlcm4gdTE2IHdsY19yZWFkX3NobShzdHJ1Y3Qgd2xjX2luZm8gKndsYywgdWludCBvZmZzZXQpOwotZXh0ZXJuIHZvaWQgd2xjX3NldF9zaG0oc3RydWN0IHdsY19pbmZvICp3bGMsIHVpbnQgb2Zmc2V0LCB1MTYgdiwgaW50IGxlbik7CiBleHRlcm4gdm9pZCB3bGNfY29weXRvX3NobShzdHJ1Y3Qgd2xjX2luZm8gKndsYywgdWludCBvZmZzZXQsIGNvbnN0IHZvaWQgKmJ1ZiwKIAkJCSAgIGludCBsZW4pOwotZXh0ZXJuIHZvaWQgd2xjX2NvcHlmcm9tX3NobShzdHJ1Y3Qgd2xjX2luZm8gKndsYywgdWludCBvZmZzZXQsIHZvaWQgKmJ1ZiwKLQkJCSAgICAgaW50IGxlbik7CiAKIGV4dGVybiB2b2lkIHdsY191cGRhdGVfYmVhY29uKHN0cnVjdCB3bGNfaW5mbyAqd2xjKTsKIGV4dGVybiB2b2lkIHdsY19ic3NfdXBkYXRlX2JlYWNvbihzdHJ1Y3Qgd2xjX2luZm8gKndsYywKQEAgLTkzNSwxNCArOTExLDEzIEBACiAjZW5kaWYKIAogZXh0ZXJuIGludCB3bGNfc2V0X25tb2RlKHN0cnVjdCB3bGNfaW5mbyAqd2xjLCBzMzIgbm1vZGUpOwotZXh0ZXJuIHZvaWQgd2xjX2h0X21pbW9wc19jYXBfdXBkYXRlKHN0cnVjdCB3bGNfaW5mbyAqd2xjLCB1OCBtaW1vcHNfbW9kZSk7CiBleHRlcm4gdm9pZCB3bGNfbWltb3BzX2FjdGlvbl9odF9zZW5kKHN0cnVjdCB3bGNfaW5mbyAqd2xjLAogCQkJCSAgICAgIHN0cnVjdCB3bGNfYnNzY2ZnICpic3NjZmcsCiAJCQkJICAgICAgdTggbWltb3BzX21vZGUpOwogCiBleHRlcm4gdm9pZCB3bGNfc3dpdGNoX3Nob3J0c2xvdChzdHJ1Y3Qgd2xjX2luZm8gKndsYywgYm9vbCBzaG9ydHNsb3QpOwogZXh0ZXJuIHZvaWQgd2xjX3NldF9ic3NpZChzdHJ1Y3Qgd2xjX2Jzc2NmZyAqY2ZnKTsKLWV4dGVybiB2b2lkIHdsY19lZGNmX3NldHBhcmFtcyhzdHJ1Y3Qgd2xjX2Jzc2NmZyAqY2ZnLCBib29sIHN1c3BlbmQpOworZXh0ZXJuIHZvaWQgd2xjX2VkY2Zfc2V0cGFyYW1zKHN0cnVjdCB3bGNfaW5mbyAqd2xjLCBib29sIHN1c3BlbmQpOwogCiBleHRlcm4gdm9pZCB3bGNfc2V0X3JhdGV0YWJsZShzdHJ1Y3Qgd2xjX2luZm8gKndsYyk7CiBleHRlcm4gaW50IHdsY19zZXRfbWFjKHN0cnVjdCB3bGNfYnNzY2ZnICpjZmcpOwpAQCAtOTUxLDIwICs5MjYsMTQgQEAKIGV4dGVybiB2b2lkIHdsY19tb2RfcHJiX3JzcF9yYXRlX3RhYmxlKHN0cnVjdCB3bGNfaW5mbyAqd2xjLCB1aW50IGZyYW1lX2xlbik7CiBleHRlcm4gcmF0ZXNwZWNfdCB3bGNfbG93ZXN0X2Jhc2ljX3JzcGVjKHN0cnVjdCB3bGNfaW5mbyAqd2xjLAogCQkJCQkgd2xjX3JhdGVzZXRfdCAqcnMpOwotZXh0ZXJuIHUxNiB3bGNfY29tcHV0ZV9iY250c2ZvZmYoc3RydWN0IHdsY19pbmZvICp3bGMsIHJhdGVzcGVjX3QgcnNwZWMsCi0JCQkJICAgIGJvb2wgc2hvcnRfcHJlYW1ibGUsIGJvb2wgcGh5ZGVsYXkpOwogZXh0ZXJuIHZvaWQgd2xjX3JhZGlvX2Rpc2FibGUoc3RydWN0IHdsY19pbmZvICp3bGMpOwogZXh0ZXJuIHZvaWQgd2xjX2Jjbl9saV91cGQoc3RydWN0IHdsY19pbmZvICp3bGMpOwogCiBleHRlcm4gaW50IHdsY19nZXRfcmV2aXNpb25faW5mbyhzdHJ1Y3Qgd2xjX2luZm8gKndsYywgdm9pZCAqYnVmLCB1aW50IGxlbik7Ci1leHRlcm4gdm9pZCB3bGNfb3V0KHN0cnVjdCB3bGNfaW5mbyAqd2xjKTsKIGV4dGVybiB2b2lkIHdsY19zZXRfaG9tZV9jaGFuc3BlYyhzdHJ1Y3Qgd2xjX2luZm8gKndsYywgY2hhbnNwZWNfdCBjaGFuc3BlYyk7CiBleHRlcm4gdm9pZCB3bGNfd2F0Y2hkb2dfdXBkKHN0cnVjdCB3bGNfaW5mbyAqd2xjLCBib29sIHRidHQpOwogZXh0ZXJuIGJvb2wgd2xjX3BzX2FsbG93ZWQoc3RydWN0IHdsY19pbmZvICp3bGMpOwogZXh0ZXJuIGJvb2wgd2xjX3N0YXlfYXdha2Uoc3RydWN0IHdsY19pbmZvICp3bGMpOwogZXh0ZXJuIHZvaWQgd2xjX3dtZV9pbml0cGFyYW1zX3N0YShzdHJ1Y3Qgd2xjX2luZm8gKndsYywgd21lX3BhcmFtX2llX3QgKnBlKTsKIAotZXh0ZXJuIHZvaWQgd2xjX2Jzc19saXN0X2ZyZWUoc3RydWN0IHdsY19pbmZvICp3bGMsCi0JCQkgICAgICBzdHJ1Y3Qgd2xjX2Jzc19saXN0ICpic3NfbGlzdCk7Ci1leHRlcm4gdm9pZCB3bGNfaHRfbWltb3BzX2NhcF91cGRhdGUoc3RydWN0IHdsY19pbmZvICp3bGMsIHU4IG1pbW9wc19tb2RlKTsKICNlbmRpZgkJCQkvKiBfd2xjX2hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19waHlfc2hpbS5jIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfcGh5X3NoaW0uYwppbmRleCA5NmQzNjAwLi4xNmZlYTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19waHlfc2hpbS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX3BoeV9zaGltLmMKQEAgLTI5LDE0ICsyOSwxNCBAQAogI2luY2x1ZGUgPGJjbWRlZnMuaD4KICNpbmNsdWRlIDxiY211dGlscy5oPgogI2luY2x1ZGUgPGJjbXdpZmkuaD4KLSNpbmNsdWRlIDxzaXV0aWxzLmg+CisjaW5jbHVkZSA8YWl1dGlscy5oPgogI2luY2x1ZGUgPHdsaW9jdGwuaD4KICNpbmNsdWRlIDxzYmNvbmZpZy5oPgogI2luY2x1ZGUgPHNiY2hpcGMuaD4KICNpbmNsdWRlIDxwY2ljZmcuaD4KICNpbmNsdWRlIDxzYmhuZGRtYS5oPgogI2luY2x1ZGUgPGhuZGRtYS5oPgotI2luY2x1ZGUgPGhuZHBtdS5oPgorI2luY2x1ZGUgPHdsY19wbXUuaD4KIAogI2luY2x1ZGUgIndsY190eXBlcy5oIgogI2luY2x1ZGUgIndsX2RiZy5oIgpAQCAtNjgsOCArNjgsOSBAQAogCiAJcGh5c2hpbSA9IGt6YWxsb2Moc2l6ZW9mKHdsY19waHlfc2hpbV9pbmZvX3QpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXBoeXNoaW0pIHsKLQkJV0xfRVJST1IoIndsJWQ6IHdsY19waHlfc2hpbV9hdHRhY2g6IG91dCBvZiBtZW1cbiIsCi0JCQkgd2xjX2h3LT51bml0KTsKKwkJd2lwaHlfZXJyKHdsY19ody0+d2xjLT53aXBoeSwKKwkJCSAgIndsJWQ6IHdsY19waHlfc2hpbV9hdHRhY2g6IG91dCBvZiBtZW1cbiIsCisJCQkgIHdsY19ody0+dW5pdCk7CiAJCXJldHVybiBOVUxMOwogCX0KIAlwaHlzaGltLT53bGNfaHcgPSB3bGNfaHc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvaG5kcG11LmMgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19wbXUuYwpzaW1pbGFyaXR5IGluZGV4IDY3JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvaG5kcG11LmMKcmVuYW1lIHRvIGRyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX3BtdS5jCmluZGV4IDU5ZTNlZGUuLjgyOTg2YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9obmRwbXUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19wbXUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAxMSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpAQCAtMTMsMjgwICsxMywxMjQgQEAKICAqIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4KICAqIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGJjbWRlZnMuaD4KLSNpbmNsdWRlIDxiY211dGlscy5oPgotI2luY2x1ZGUgPHNpdXRpbHMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKwogI2luY2x1ZGUgPGJjbWRldnMuaD4KLSNpbmNsdWRlIDxobmRzb2MuaD4KICNpbmNsdWRlIDxzYmNoaXBjLmg+Ci0jaW5jbHVkZSA8aG5kcG11Lmg+Ci0jaW5jbHVkZSAic2l1dGlsc19wcml2LmgiCisjaW5jbHVkZSA8YmNtdXRpbHMuaD4KKyNpbmNsdWRlIDxiY21udnJhbS5oPgorI2luY2x1ZGUgIndsY19wbXUuaCIKIAotI2RlZmluZQlQTVVfRVJST1IoYXJncykKLQotI2lmZGVmIEJDTURCRwotI2RlZmluZQlQTVVfTVNHKGFyZ3MpCXByaW50ayBhcmdzCi0KLS8qIGRlYnVnLW9ubHkgZGVmaW5pdGlvbnMgKi8KLS8qICNkZWZpbmUgQkNNREJHX0ZPUkNFSFQgKi8KLS8qICNkZWZpbmUgQ0hJUENfVUFSVF9BTFdBWVNfT04gKi8KLSNlbHNlCi0jZGVmaW5lCVBNVV9NU0coYXJncykKLSNlbmRpZgkJCQkvKiBCQ01EQkcgKi8KLQotLyogVG8gY2hlY2sgaW4gdmVyYm9zZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgbm90IGludGVuZGVkCi0gKiB0byBiZSBvbiBleGNlcHQgb24gcHJpdmF0ZSBidWlsZHMuCisvKgorICogZDExIHNsb3cgdG8gZmFzdCBjbG9jayB0cmFuc2l0aW9uIHRpbWUgaW4gc2xvdyBjbG9jayBjeWNsZXMKICAqLwotI2RlZmluZQlQTVVfTk9ORShhcmdzKQorI2RlZmluZSBEMTFTQ0NfU0xPVzJGQVNUX1RSQU5TSVRJT04JMgogCi0vKiBQTEwgY29udHJvbHMvY2xvY2tzICovCi1zdGF0aWMgdm9pZCBzaV9wbXUxX3BsbGluaXQwKHNpX3QgKnNpaCwgY2hpcGNyZWdzX3QgKmNjLCB1MzIgeHRhbCk7Ci1zdGF0aWMgdTMyIHNpX3BtdTFfY3B1Y2xrMChzaV90ICpzaWgsIGNoaXBjcmVnc190ICpjYyk7Ci1zdGF0aWMgdTMyIHNpX3BtdTFfYWxwY2xrMChzaV90ICpzaWgsIGNoaXBjcmVnc190ICpjYyk7CisvKgorICogZXh0ZXJuYWwgTFBPIGNyeXN0YWwgZnJlcXVlbmN5CisgKi8KKyNkZWZpbmUgRVhUX0lMUF9IWiAzMjc2OAogCi0vKiBQTVUgcmVzb3VyY2VzICovCi1zdGF0aWMgYm9vbCBzaV9wbXVfcmVzX2RlcGZsdHJfYmIoc2lfdCAqc2loKTsKLXN0YXRpYyBib29sIHNpX3BtdV9yZXNfZGVwZmx0cl9uY2Ioc2lfdCAqc2loKTsKLXN0YXRpYyBib29sIHNpX3BtdV9yZXNfZGVwZmx0cl9wYWxkbyhzaV90ICpzaWgpOwotc3RhdGljIGJvb2wgc2lfcG11X3Jlc19kZXBmbHRyX25wYWxkbyhzaV90ICpzaWgpOwotc3RhdGljIHUzMiBzaV9wbXVfcmVzX2RlcHMoc2lfdCAqc2loLCBjaGlwY3JlZ3NfdCAqY2MsIHUzMiByc3JjcywgYm9vbCBhbGwpOwotc3RhdGljIHVpbnQgc2lfcG11X3Jlc191cHRpbWUoc2lfdCAqc2loLCBjaGlwY3JlZ3NfdCAqY2MsIHU4IHJzcmMpOwotc3RhdGljIHZvaWQgc2lfcG11X3Jlc19tYXNrcyhzaV90ICpzaWgsIHUzMiAqIHBtaW4sIHUzMiAqIHBtYXgpOwotc3RhdGljIHZvaWQgc2lfcG11X3NwdXJhdm9pZF9wbGx1cGRhdGUoc2lfdCAqc2loLCBjaGlwY3JlZ3NfdCAqY2MsCi0JCQkJICAgICAgIHU4IHNwdXJhdm9pZCk7CisvKgorICogRHVyYXRpb24gZm9yIElMUCBjbG9jayBmcmVxdWVuY3kgbWVhc3VybWVudCBpbiBtaWxsaXNlY29uZHMKKyAqCisgKiByZW1hcms6IDEwMDAgbXVzdCBiZSBhbiBpbnRlZ2VyIG11bHRpcGxlIG9mIHRoaXMgZHVyYXRpb24KKyAqLworI2RlZmluZSBJTFBfQ0FMQ19EVVIJMTAKIAotc3RhdGljIHZvaWQgc2lfcG11X3NldF80MzMwX3BsbGRpdnMoc2lfdCAqc2loKTsKLQotLyogRlZDTyBmcmVxdWVuY3kgKi8KKy8qCisgKiBGVkNPIGZyZXF1ZW5jeQorICovCiAjZGVmaW5lIEZWQ09fODgwCTg4MDAwMAkvKiA4ODBNSHogKi8KICNkZWZpbmUgRlZDT18xNzYwCTE3NjAwMDAJLyogMTc2ME1IeiAqLwogI2RlZmluZSBGVkNPXzE0NDAJMTQ0MDAwMAkvKiAxNDQwTUh6ICovCiAjZGVmaW5lIEZWQ09fOTYwCTk2MDAwMAkvKiA5NjBNSHogKi8KIAotLyogUmVhZC93cml0ZSBhIGNoaXBjb250cm9sIHJlZyAqLwotdTMyIHNpX3BtdV9jaGlwY29udHJvbChzaV90ICpzaWgsIHVpbnQgcmVnLCB1MzIgbWFzaywgdTMyIHZhbCkKLXsKLQlzaV9jb3JlcmVnKHNpaCwgU0lfQ0NfSURYLCBvZmZzZXRvZihjaGlwY3JlZ3NfdCwgY2hpcGNvbnRyb2xfYWRkciksIH4wLAotCQkgICByZWcpOwotCXJldHVybiBzaV9jb3JlcmVnKHNpaCwgU0lfQ0NfSURYLAotCQkJICBvZmZzZXRvZihjaGlwY3JlZ3NfdCwgY2hpcGNvbnRyb2xfZGF0YSksIG1hc2ssIHZhbCk7Ci19CisvKgorICogUE1VIGNyeXN0YWwgdGFibGUgaW5kaWNlcyBmb3IgMTQ0ME1IeiBmdmNvCisgKi8KKyNkZWZpbmUgUE1VMV9YVEFMVEFCMF8xNDQwXzEyMDAwSwkwCisjZGVmaW5lIFBNVTFfWFRBTFRBQjBfMTQ0MF8xMzAwMEsJMQorI2RlZmluZSBQTVUxX1hUQUxUQUIwXzE0NDBfMTQ0MDBLCTIKKyNkZWZpbmUgUE1VMV9YVEFMVEFCMF8xNDQwXzE1MzYwSwkzCisjZGVmaW5lIFBNVTFfWFRBTFRBQjBfMTQ0MF8xNjIwMEsJNAorI2RlZmluZSBQTVUxX1hUQUxUQUIwXzE0NDBfMTY4MDBLCTUKKyNkZWZpbmUgUE1VMV9YVEFMVEFCMF8xNDQwXzE5MjAwSwk2CisjZGVmaW5lIFBNVTFfWFRBTFRBQjBfMTQ0MF8xOTgwMEsJNworI2RlZmluZSBQTVUxX1hUQUxUQUIwXzE0NDBfMjAwMDBLCTgKKyNkZWZpbmUgUE1VMV9YVEFMVEFCMF8xNDQwXzI1MDAwSwk5CisjZGVmaW5lIFBNVTFfWFRBTFRBQjBfMTQ0MF8yNjAwMEsJMTAKKyNkZWZpbmUgUE1VMV9YVEFMVEFCMF8xNDQwXzMwMDAwSwkxMQorI2RlZmluZSBQTVUxX1hUQUxUQUIwXzE0NDBfMzc0MDBLCTEyCisjZGVmaW5lIFBNVTFfWFRBTFRBQjBfMTQ0MF8zODQwMEsJMTMKKyNkZWZpbmUgUE1VMV9YVEFMVEFCMF8xNDQwXzQwMDAwSwkxNAorI2RlZmluZSBQTVUxX1hUQUxUQUIwXzE0NDBfNDgwMDBLCTE1CiAKLS8qIFJlYWQvd3JpdGUgYSByZWdjb250cm9sIHJlZyAqLwotdTMyIHNpX3BtdV9yZWdjb250cm9sKHNpX3QgKnNpaCwgdWludCByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKQotewotCXNpX2NvcmVyZWcoc2loLCBTSV9DQ19JRFgsIG9mZnNldG9mKGNoaXBjcmVnc190LCByZWdjb250cm9sX2FkZHIpLCB+MCwKLQkJICAgcmVnKTsKLQlyZXR1cm4gc2lfY29yZXJlZyhzaWgsIFNJX0NDX0lEWCwKLQkJCSAgb2Zmc2V0b2YoY2hpcGNyZWdzX3QsIHJlZ2NvbnRyb2xfZGF0YSksIG1hc2ssIHZhbCk7Ci19CisvKgorICogUE1VIGNyeXN0YWwgdGFibGUgaW5kaWNlcyBmb3IgOTYwTUh6IGZ2Y28KKyAqLworI2RlZmluZSBQTVUxX1hUQUxUQUIwXzk2MF8xMjAwMEsJMAorI2RlZmluZSBQTVUxX1hUQUxUQUIwXzk2MF8xMzAwMEsJMQorI2RlZmluZSBQTVUxX1hUQUxUQUIwXzk2MF8xNDQwMEsJMgorI2RlZmluZSBQTVUxX1hUQUxUQUIwXzk2MF8xNTM2MEsJMworI2RlZmluZSBQTVUxX1hUQUxUQUIwXzk2MF8xNjIwMEsJNAorI2RlZmluZSBQTVUxX1hUQUxUQUIwXzk2MF8xNjgwMEsJNQorI2RlZmluZSBQTVUxX1hUQUxUQUIwXzk2MF8xOTIwMEsJNgorI2RlZmluZSBQTVUxX1hUQUxUQUIwXzk2MF8xOTgwMEsJNworI2RlZmluZSBQTVUxX1hUQUxUQUIwXzk2MF8yMDAwMEsJOAorI2RlZmluZSBQTVUxX1hUQUxUQUIwXzk2MF8yNTAwMEsJOQorI2RlZmluZSBQTVUxX1hUQUxUQUIwXzk2MF8yNjAwMEsJMTAKKyNkZWZpbmUgUE1VMV9YVEFMVEFCMF85NjBfMzAwMDBLCTExCisjZGVmaW5lIFBNVTFfWFRBTFRBQjBfOTYwXzM3NDAwSwkxMgorI2RlZmluZSBQTVUxX1hUQUxUQUIwXzk2MF8zODQwMEsJMTMKKyNkZWZpbmUgUE1VMV9YVEFMVEFCMF85NjBfNDAwMDBLCTE0CisjZGVmaW5lIFBNVTFfWFRBTFRBQjBfOTYwXzQ4MDAwSwkxNQogCi0vKiBSZWFkL3dyaXRlIGEgcGxsY29udHJvbCByZWcgKi8KLXUzMiBzaV9wbXVfcGxsY29udHJvbChzaV90ICpzaWgsIHVpbnQgcmVnLCB1MzIgbWFzaywgdTMyIHZhbCkKLXsKLQlzaV9jb3JlcmVnKHNpaCwgU0lfQ0NfSURYLCBvZmZzZXRvZihjaGlwY3JlZ3NfdCwgcGxsY29udHJvbF9hZGRyKSwgfjAsCi0JCSAgIHJlZyk7Ci0JcmV0dXJuIHNpX2NvcmVyZWcoc2loLCBTSV9DQ19JRFgsCi0JCQkgIG9mZnNldG9mKGNoaXBjcmVnc190LCBwbGxjb250cm9sX2RhdGEpLCBtYXNrLCB2YWwpOwotfQorLyoKKyAqIFBNVSBjcnlzdGFsIHRhYmxlIGluZGljZXMgZm9yIDg4ME1IeiBmdmNvCisgKi8KKyNkZWZpbmUgUE1VMV9YVEFMVEFCMF84ODBfMTIwMDBLCTAKKyNkZWZpbmUgUE1VMV9YVEFMVEFCMF84ODBfMTMwMDBLCTEKKyNkZWZpbmUgUE1VMV9YVEFMVEFCMF84ODBfMTQ0MDBLCTIKKyNkZWZpbmUgUE1VMV9YVEFMVEFCMF84ODBfMTUzNjBLCTMKKyNkZWZpbmUgUE1VMV9YVEFMVEFCMF84ODBfMTYyMDBLCTQKKyNkZWZpbmUgUE1VMV9YVEFMVEFCMF84ODBfMTY4MDBLCTUKKyNkZWZpbmUgUE1VMV9YVEFMVEFCMF84ODBfMTkyMDBLCTYKKyNkZWZpbmUgUE1VMV9YVEFMVEFCMF84ODBfMTk4MDBLCTcKKyNkZWZpbmUgUE1VMV9YVEFMVEFCMF84ODBfMjAwMDBLCTgKKyNkZWZpbmUgUE1VMV9YVEFMVEFCMF84ODBfMjQwMDBLCTkKKyNkZWZpbmUgUE1VMV9YVEFMVEFCMF84ODBfMjUwMDBLCTEwCisjZGVmaW5lIFBNVTFfWFRBTFRBQjBfODgwXzI2MDAwSwkxMQorI2RlZmluZSBQTVUxX1hUQUxUQUIwXzg4MF8zMDAwMEsJMTIKKyNkZWZpbmUgUE1VMV9YVEFMVEFCMF84ODBfMzc0MDBLCTEzCisjZGVmaW5lIFBNVTFfWFRBTFRBQjBfODgwXzM4NDAwSwkxNAorI2RlZmluZSBQTVUxX1hUQUxUQUIwXzg4MF80MDAwMEsJMTUKIAotLyogUE1VIFBMTCB1cGRhdGUgKi8KLXZvaWQgc2lfcG11X3BsbHVwZChzaV90ICpzaWgpCi17Ci0Jc2lfY29yZXJlZyhzaWgsIFNJX0NDX0lEWCwgb2Zmc2V0b2YoY2hpcGNyZWdzX3QsIHBtdWNvbnRyb2wpLAotCQkgICBQQ1RMX1BMTF9QTExDVExfVVBELCBQQ1RMX1BMTF9QTExDVExfVVBEKTsKLX0KKy8qCisgKiBjcnlzdGFsIGZyZXF1ZW5jeSB2YWx1ZXMKKyAqLworI2RlZmluZSBYVEFMX0ZSRVFfMjQwMDBNSFoJCTI0MDAwCisjZGVmaW5lIFhUQUxfRlJFUV8zMDAwME1IWgkJMzAwMDAKKyNkZWZpbmUgWFRBTF9GUkVRXzM3NDAwTUhaCQkzNzQwMAorI2RlZmluZSBYVEFMX0ZSRVFfNDgwMDBNSFoJCTQ4MDAwCiAKLS8qIFNldHVwIHN3aXRjaGVyIHZvbHRhZ2UgKi8KLXZvaWQgc2lfcG11X3NldF9zd2l0Y2hlcl92b2x0YWdlKHNpX3QgKnNpaCwgdTggYmJfdm9sdGFnZSwgdTggcmZfdm9sdGFnZSkKLXsKLQljaGlwY3JlZ3NfdCAqY2M7Ci0JdWludCBvcmlnaWR4OwotCi0JQVNTRVJUKHNpaC0+Y2NjYXBzICYgQ0NfQ0FQX1BNVSk7Ci0KLQkvKiBSZW1lbWJlciBvcmlnaW5hbCBjb3JlIGJlZm9yZSBzd2l0Y2ggdG8gY2hpcGMgKi8KLQlvcmlnaWR4ID0gc2lfY29yZWlkeChzaWgpOwotCWNjID0gc2lfc2V0Y29yZWlkeChzaWgsIFNJX0NDX0lEWCk7Ci0JQVNTRVJUKGNjICE9IE5VTEwpOwotCi0JV19SRUcoJmNjLT5yZWdjb250cm9sX2FkZHIsIDB4MDEpOwotCVdfUkVHKCZjYy0+cmVnY29udHJvbF9kYXRhLCAodTMyKSAoYmJfdm9sdGFnZSAmIDB4MWYpIDw8IDIyKTsKLQotCVdfUkVHKCZjYy0+cmVnY29udHJvbF9hZGRyLCAweDAwKTsKLQlXX1JFRygmY2MtPnJlZ2NvbnRyb2xfZGF0YSwgKHUzMikgKHJmX3ZvbHRhZ2UgJiAweDFmKSA8PCAxNCk7Ci0KLQkvKiBSZXR1cm4gdG8gb3JpZ2luYWwgY29yZSAqLwotCXNpX3NldGNvcmVpZHgoc2loLCBvcmlnaWR4KTsKLX0KLQotdm9pZCBzaV9wbXVfc2V0X2xkb192b2x0YWdlKHNpX3QgKnNpaCwgdTggbGRvLCB1OCB2b2x0YWdlKQotewotCXU4IHNyX2NudGxfc2hpZnQgPSAwLCByY19zaGlmdCA9IDAsIHNoaWZ0ID0gMCwgbWFzayA9IDA7Ci0JdTggYWRkciA9IDA7Ci0KLQlBU1NFUlQoc2loLT5jY2NhcHMgJiBDQ19DQVBfUE1VKTsKLQotCXN3aXRjaCAoc2loLT5jaGlwKSB7Ci0JY2FzZSBCQ000MzM2X0NISVBfSUQ6Ci0JCXN3aXRjaCAobGRvKSB7Ci0JCWNhc2UgU0VUX0xET19WT0xUQUdFX0NMRE9fUFdNOgotCQkJYWRkciA9IDQ7Ci0JCQlyY19zaGlmdCA9IDE7Ci0JCQltYXNrID0gMHhmOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0VUX0xET19WT0xUQUdFX0NMRE9fQlVSU1Q6Ci0JCQlhZGRyID0gNDsKLQkJCXJjX3NoaWZ0ID0gNTsKLQkJCW1hc2sgPSAweGY7Ci0JCQlicmVhazsKLQkJY2FzZSBTRVRfTERPX1ZPTFRBR0VfTE5MRE8xOgotCQkJYWRkciA9IDQ7Ci0JCQlyY19zaGlmdCA9IDE3OwotCQkJbWFzayA9IDB4ZjsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJQVNTRVJUKGZhbHNlKTsKLQkJCXJldHVybjsKLQkJfQotCQlicmVhazsKLQljYXNlIEJDTTQzMzBfQ0hJUF9JRDoKLQkJc3dpdGNoIChsZG8pIHsKLQkJY2FzZSBTRVRfTERPX1ZPTFRBR0VfQ0JVQ0tfUFdNOgotCQkJYWRkciA9IDM7Ci0JCQlyY19zaGlmdCA9IDA7Ci0JCQltYXNrID0gMHgxZjsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJQVNTRVJUKGZhbHNlKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUFTU0VSVChmYWxzZSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlzaGlmdCA9IHNyX2NudGxfc2hpZnQgKyByY19zaGlmdDsKLQotCXNpX2NvcmVyZWcoc2loLCBTSV9DQ19JRFgsIG9mZnNldG9mKGNoaXBjcmVnc190LCByZWdjb250cm9sX2FkZHIpLAotCQkgICB+MCwgYWRkcik7Ci0Jc2lfY29yZXJlZyhzaWgsIFNJX0NDX0lEWCwgb2Zmc2V0b2YoY2hpcGNyZWdzX3QsIHJlZ2NvbnRyb2xfZGF0YSksCi0JCSAgIG1hc2sgPDwgc2hpZnQsICh2b2x0YWdlICYgbWFzaykgPDwgc2hpZnQpOwotfQorLyoKKyAqIFJlc291cmNlIGRlcGVuZGFuY2llcyBtYXNrIGNoYW5nZSBhY3Rpb24KKyAqCisgKiBAUkVTX0RFUEVORF9TRVQ6IE92ZXJyaWRlIHRoZSBkZXBlbmRhbmNpZXMgbWFzaworICogQFJFU19ERVBFTkRfQUREOiBBZGQgdG8gdGhlICBkZXBlbmRhbmNpZXMgbWFzaworICogQFJFU19ERVBFTkRfUkVNT1ZFOiBSZW1vdmUgZnJvbSB0aGUgZGVwZW5kYW5jaWVzIG1hc2sKKyAqLworI2RlZmluZSBSRVNfREVQRU5EX1NFVAkJMAorI2RlZmluZSBSRVNfREVQRU5EX0FERAkJMQorI2RlZmluZSBSRVNfREVQRU5EX1JFTU9WRQktMQogCiAvKiBkMTEgc2xvdyB0byBmYXN0IGNsb2NrIHRyYW5zaXRpb24gdGltZSBpbiBzbG93IGNsb2NrIGN5Y2xlcyAqLwogI2RlZmluZSBEMTFTQ0NfU0xPVzJGQVNUX1RSQU5TSVRJT04JMgogCi11MTYgc2lfcG11X2Zhc3RfcHdydXBfZGVsYXkoc2lfdCAqc2loKQotewotCXVpbnQgZGVsYXkgPSBQTVVfTUFYX1RSQU5TSVRJT05fRExZOwotCWNoaXBjcmVnc190ICpjYzsKLQl1aW50IG9yaWdpZHg7Ci0jaWZkZWYgQkNNREJHCi0JY2hhciBjaG5bOF07Ci0JY2huWzBdID0gMDsJCS8qIHRvIHN1cHByZXNzIGNvbXBpbGUgZXJyb3IgKi8KLSNlbmRpZgotCi0JQVNTRVJUKHNpaC0+Y2NjYXBzICYgQ0NfQ0FQX1BNVSk7Ci0KLQkvKiBSZW1lbWJlciBvcmlnaW5hbCBjb3JlIGJlZm9yZSBzd2l0Y2ggdG8gY2hpcGMgKi8KLQlvcmlnaWR4ID0gc2lfY29yZWlkeChzaWgpOwotCWNjID0gc2lfc2V0Y29yZWlkeChzaWgsIFNJX0NDX0lEWCk7Ci0JQVNTRVJUKGNjICE9IE5VTEwpOwotCi0Jc3dpdGNoIChzaWgtPmNoaXApIHsKLQljYXNlIEJDTTQzMjI0X0NISVBfSUQ6Ci0JY2FzZSBCQ000MzIyNV9DSElQX0lEOgotCWNhc2UgQkNNNDM0MjFfQ0hJUF9JRDoKLQljYXNlIEJDTTQzMjM1X0NISVBfSUQ6Ci0JY2FzZSBCQ000MzIzNl9DSElQX0lEOgotCWNhc2UgQkNNNDMyMzhfQ0hJUF9JRDoKLQljYXNlIEJDTTQzMzFfQ0hJUF9JRDoKLQljYXNlIEJDTTYzNjJfQ0hJUF9JRDoKLQljYXNlIEJDTTQzMTNfQ0hJUF9JRDoKLQkJZGVsYXkgPSBJU1NJTV9FTkFCKHNpaCkgPyA3MCA6IDM3MDA7Ci0JCWJyZWFrOwotCWNhc2UgQkNNNDMyOV9DSElQX0lEOgotCQlpZiAoSVNTSU1fRU5BQihzaWgpKQotCQkJZGVsYXkgPSA3MDsKLQkJZWxzZSB7Ci0JCQl1MzIgaWxwID0gc2lfaWxwX2Nsb2NrKHNpaCk7Ci0JCQlkZWxheSA9Ci0JCQkgICAgKHNpX3BtdV9yZXNfdXB0aW1lKHNpaCwgY2MsIFJFUzQzMjlfSFRfQVZBSUwpICsKLQkJCSAgICAgRDExU0NDX1NMT1cyRkFTVF9UUkFOU0lUSU9OKSAqICgoMTAwMDAwMCArIGlscCAtCi0JCQkJCQkJICAgICAgMSkgLyBpbHApOwotCQkJZGVsYXkgPSAoMTEgKiBkZWxheSkgLyAxMDsKLQkJfQotCQlicmVhazsKLQljYXNlIEJDTTQzMTlfQ0hJUF9JRDoKLQkJZGVsYXkgPSBJU1NJTV9FTkFCKHNpaCkgPyA3MCA6IDM3MDA7Ci0JCWJyZWFrOwotCWNhc2UgQkNNNDMzNl9DSElQX0lEOgotCQlpZiAoSVNTSU1fRU5BQihzaWgpKQotCQkJZGVsYXkgPSA3MDsKLQkJZWxzZSB7Ci0JCQl1MzIgaWxwID0gc2lfaWxwX2Nsb2NrKHNpaCk7Ci0JCQlkZWxheSA9Ci0JCQkgICAgKHNpX3BtdV9yZXNfdXB0aW1lKHNpaCwgY2MsIFJFUzQzMzZfSFRfQVZBSUwpICsKLQkJCSAgICAgRDExU0NDX1NMT1cyRkFTVF9UUkFOU0lUSU9OKSAqICgoMTAwMDAwMCArIGlscCAtCi0JCQkJCQkJICAgICAgMSkgLyBpbHApOwotCQkJZGVsYXkgPSAoMTEgKiBkZWxheSkgLyAxMDsKLQkJfQotCQlicmVhazsKLQljYXNlIEJDTTQzMzBfQ0hJUF9JRDoKLQkJaWYgKElTU0lNX0VOQUIoc2loKSkKLQkJCWRlbGF5ID0gNzA7Ci0JCWVsc2UgewotCQkJdTMyIGlscCA9IHNpX2lscF9jbG9jayhzaWgpOwotCQkJZGVsYXkgPQotCQkJICAgIChzaV9wbXVfcmVzX3VwdGltZShzaWgsIGNjLCBSRVM0MzMwX0hUX0FWQUlMKSArCi0JCQkgICAgIEQxMVNDQ19TTE9XMkZBU1RfVFJBTlNJVElPTikgKiAoKDEwMDAwMDAgKyBpbHAgLQotCQkJCQkJCSAgICAgIDEpIC8gaWxwKTsKLQkJCWRlbGF5ID0gKDExICogZGVsYXkpIC8gMTA7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCS8qIFJldHVybiB0byBvcmlnaW5hbCBjb3JlICovCi0Jc2lfc2V0Y29yZWlkeChzaWgsIG9yaWdpZHgpOwotCi0JcmV0dXJuICh1MTYpIGRlbGF5OwotfQotCi11MzIgc2lfcG11X2ZvcmNlX2lscChzaV90ICpzaWgsIGJvb2wgZm9yY2UpCi17Ci0JY2hpcGNyZWdzX3QgKmNjOwotCXVpbnQgb3JpZ2lkeDsKLQl1MzIgb2xkcG11Y29udHJvbDsKLQotCUFTU0VSVChzaWgtPmNjY2FwcyAmIENDX0NBUF9QTVUpOwotCi0JLyogUmVtZW1iZXIgb3JpZ2luYWwgY29yZSBiZWZvcmUgc3dpdGNoIHRvIGNoaXBjICovCi0Jb3JpZ2lkeCA9IHNpX2NvcmVpZHgoc2loKTsKLQljYyA9IHNpX3NldGNvcmVpZHgoc2loLCBTSV9DQ19JRFgpOwotCUFTU0VSVChjYyAhPSBOVUxMKTsKLQotCW9sZHBtdWNvbnRyb2wgPSBSX1JFRygmY2MtPnBtdWNvbnRyb2wpOwotCWlmIChmb3JjZSkKLQkJV19SRUcoJmNjLT5wbXVjb250cm9sLCBvbGRwbXVjb250cm9sICYKLQkJICAgICAgfihQQ1RMX0hUX1JFUV9FTiB8IFBDVExfQUxQX1JFUV9FTikpOwotCWVsc2UKLQkJV19SRUcoJmNjLT5wbXVjb250cm9sLCBvbGRwbXVjb250cm9sIHwKLQkJICAgICAgKFBDVExfSFRfUkVRX0VOIHwgUENUTF9BTFBfUkVRX0VOKSk7Ci0KLQkvKiBSZXR1cm4gdG8gb3JpZ2luYWwgY29yZSAqLwotCXNpX3NldGNvcmVpZHgoc2loLCBvcmlnaWR4KTsKLQotCXJldHVybiBvbGRwbXVjb250cm9sOwotfQotCiAvKiBTZXR1cCByZXNvdXJjZSB1cC9kb3duIHRpbWVycyAqLwogdHlwZWRlZiBzdHJ1Y3QgewogCXU4IHJlc251bTsKQEAgLTMwMSwxMCArMTQ1LDIzIEBACiAJIGJvb2woKmZpbHRlcikgKHNpX3QgKnNpaCk7CS8qIGFjdGlvbiBpcyB0YWtlbiB3aGVuIGZpbHRlciBpcyBOVUxMIG9yIHJldHVybiB0cnVlICovCiB9IHBtdV9yZXNfZGVwZW5kX3Q7CiAKLS8qIFJlc291cmNlIGRlcGVuZGFuY2llcyBtYXNrIGNoYW5nZSBhY3Rpb24gKi8KLSNkZWZpbmUgUkVTX0RFUEVORF9TRVQJCTAJLyogT3ZlcnJpZGUgdGhlIGRlcGVuZGFuY2llcyBtYXNrICovCi0jZGVmaW5lIFJFU19ERVBFTkRfQURECQkxCS8qIEFkZCB0byB0aGUgIGRlcGVuZGFuY2llcyBtYXNrICovCi0jZGVmaW5lIFJFU19ERVBFTkRfUkVNT1ZFCS0xCS8qIFJlbW92ZSBmcm9tIHRoZSBkZXBlbmRhbmNpZXMgbWFzayAqLworLyogc2V0dXAgcGxsIGFuZCBxdWVyeSBjbG9jayBzcGVlZCAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXUxNiBmcmVmOworCXU4IHhmOworCXU4IHAxZGl2OworCXU4IHAyZGl2OworCXU4IG5kaXZfaW50OworCXUzMiBuZGl2X2ZyYWM7Cit9IHBtdTFfeHRhbHRhYjBfdDsKKworLyoKKyAqIHByb3RvdHlwZXMgdXNlZCBpbiByZXNvdXJjZSB0YWJsZXMKKyAqLworc3RhdGljIGJvb2wgc2lfcG11X3Jlc19kZXBmbHRyX2JiKHNpX3QgKnNpaCk7CitzdGF0aWMgYm9vbCBzaV9wbXVfcmVzX2RlcGZsdHJfbmNiKHNpX3QgKnNpaCk7CitzdGF0aWMgYm9vbCBzaV9wbXVfcmVzX2RlcGZsdHJfcGFsZG8oc2lfdCAqc2loKTsKK3N0YXRpYyBib29sIHNpX3BtdV9yZXNfZGVwZmx0cl9ucGFsZG8oc2lfdCAqc2loKTsKIAogc3RhdGljIGNvbnN0IHBtdV9yZXNfdXBkb3duX3QgYmNtNDMyOGEwX3Jlc191cGRvd25bXSA9IHsKIAl7CkBAIC01NjEsNiArNDE4LDkyIEBACiAJUE1VUkVTX0JJVChSRVM0MzMwX0hUX0FWQUlMKSwgUkVTX0RFUEVORF9BREQsIDAsIE5VTEx9CiB9OwogCisvKiB0aGUgZm9sbG93aW5nIHRhYmxlIGlzIGJhc2VkIG9uIDE0NDBNaHogZnZjbyAqLworc3RhdGljIGNvbnN0IHBtdTFfeHRhbHRhYjBfdCBwbXUxX3h0YWx0YWIwXzE0NDBbXSA9IHsKKwl7CisJMTIwMDAsIDEsIDEsIDEsIDB4NzgsIDB4MH0sIHsKKwkxMzAwMCwgMiwgMSwgMSwgMHg2RSwgMHhDNEVDNEV9LCB7CisJMTQ0MDAsIDMsIDEsIDEsIDB4NjQsIDB4MH0sIHsKKwkxNTM2MCwgNCwgMSwgMSwgMHg1RCwgMHhDMDAwMDB9LCB7CisJMTYyMDAsIDUsIDEsIDEsIDB4NTgsIDB4RTM4RTM4fSwgeworCTE2ODAwLCA2LCAxLCAxLCAweDU1LCAweEI2REI2RH0sIHsKKwkxOTIwMCwgNywgMSwgMSwgMHg0QiwgMH0sIHsKKwkxOTgwMCwgOCwgMSwgMSwgMHg0OCwgMHhCQTJFOEJ9LCB7CisJMjAwMDAsIDksIDEsIDEsIDB4NDgsIDB4MH0sIHsKKwkyNTAwMCwgMTAsIDEsIDEsIDB4MzksIDB4OTk5OTk5fSwgeworCTI2MDAwLCAxMSwgMSwgMSwgMHgzNywgMHg2Mjc2Mjd9LCB7CisJMzAwMDAsIDEyLCAxLCAxLCAweDMwLCAweDB9LCB7CisJMzc0MDAsIDEzLCAyLCAxLCAweDRELCAweDE1RTc2fSwgeworCTM4NDAwLCAxMywgMiwgMSwgMHg0QiwgMHgwfSwgeworCTQwMDAwLCAxNCwgMiwgMSwgMHg0OCwgMHgwfSwgeworCTQ4MDAwLCAxNSwgMiwgMSwgMHgzYywgMHgwfSwgeworCTAsIDAsIDAsIDAsIDAsIDB9Cit9OworCitzdGF0aWMgY29uc3QgcG11MV94dGFsdGFiMF90IHBtdTFfeHRhbHRhYjBfOTYwW10gPSB7CisJeworCTEyMDAwLCAxLCAxLCAxLCAweDUwLCAweDB9LCB7CisJMTMwMDAsIDIsIDEsIDEsIDB4NDksIDB4RDg5RDg5fSwgeworCTE0NDAwLCAzLCAxLCAxLCAweDQyLCAweEFBQUFBQX0sIHsKKwkxNTM2MCwgNCwgMSwgMSwgMHgzRSwgMHg4MDAwMDB9LCB7CisJMTYyMDAsIDUsIDEsIDEsIDB4MzksIDB4NDI1RUQwfSwgeworCTE2ODAwLCA2LCAxLCAxLCAweDM5LCAweDI0OTI0OX0sIHsKKwkxOTIwMCwgNywgMSwgMSwgMHgzMiwgMHgwfSwgeworCTE5ODAwLCA4LCAxLCAxLCAweDMwLCAweDdDMUYwN30sIHsKKwkyMDAwMCwgOSwgMSwgMSwgMHgzMCwgMHgwfSwgeworCTI1MDAwLCAxMCwgMSwgMSwgMHgyNiwgMHg2NjY2NjZ9LCB7CisJMjYwMDAsIDExLCAxLCAxLCAweDI0LCAweEVDNEVDNH0sIHsKKwkzMDAwMCwgMTIsIDEsIDEsIDB4MjAsIDB4MH0sIHsKKwkzNzQwMCwgMTMsIDIsIDEsIDB4MzMsIDB4NTYzRUY5fSwgeworCTM4NDAwLCAxNCwgMiwgMSwgMHgzMiwgMHgwfSwgeworCTQwMDAwLCAxNSwgMiwgMSwgMHgzMCwgMHgwfSwgeworCTQ4MDAwLCAxNiwgMiwgMSwgMHgyOCwgMHgwfSwgeworCTAsIDAsIDAsIDAsIDAsIDB9Cit9OworCitzdGF0aWMgY29uc3QgcG11MV94dGFsdGFiMF90IHBtdTFfeHRhbHRhYjBfODgwXzQzMjlbXSA9IHsKKwl7CisJMTIwMDAsIDEsIDMsIDIyLCAweDksIDB4RkZGRkVGfSwgeworCTEzMDAwLCAyLCAxLCA2LCAweGIsIDB4NDgzNDgzfSwgeworCTE0NDAwLCAzLCAxLCAxMCwgMHhhLCAweDFDNzFDN30sIHsKKwkxNTM2MCwgNCwgMSwgNSwgMHhiLCAweDc1NTU1NX0sIHsKKwkxNjIwMCwgNSwgMSwgMTAsIDB4NSwgMHg2RTlFMDZ9LCB7CisJMTY4MDAsIDYsIDEsIDEwLCAweDUsIDB4M0NmM0NmfSwgeworCTE5MjAwLCA3LCAxLCA0LCAweGIsIDB4NzU1NTU1fSwgeworCTE5ODAwLCA4LCAxLCAxMSwgMHg0LCAweEE1N0VCfSwgeworCTIwMDAwLCA5LCAxLCAxMSwgMHg0LCAweDB9LCB7CisJMjQwMDAsIDEwLCAzLCAxMSwgMHhhLCAweDB9LCB7CisJMjUwMDAsIDExLCA1LCAxNiwgMHhiLCAweDB9LCB7CisJMjYwMDAsIDEyLCAxLCAxLCAweDIxLCAweEQ4OUQ4OX0sIHsKKwkzMDAwMCwgMTMsIDMsIDgsIDB4YiwgMHgwfSwgeworCTM3NDAwLCAxNCwgMywgMSwgMHg0NiwgMHg5Njk2OTZ9LCB7CisJMzg0MDAsIDE1LCAxLCAxLCAweDE2LCAweEVBQUFBQX0sIHsKKwk0MDAwMCwgMTYsIDEsIDIsIDB4YiwgMH0sIHsKKwkwLCAwLCAwLCAwLCAwLCAwfQorfTsKKworLyogdGhlIGZvbGxvd2luZyB0YWJsZSBpcyBiYXNlZCBvbiA4ODBNaHogZnZjbyAqLworc3RhdGljIGNvbnN0IHBtdTFfeHRhbHRhYjBfdCBwbXUxX3h0YWx0YWIwXzg4MFtdID0geworCXsKKwkxMjAwMCwgMSwgMywgMjIsIDB4OSwgMHhGRkZGRUZ9LCB7CisJMTMwMDAsIDIsIDEsIDYsIDB4YiwgMHg0ODM0ODN9LCB7CisJMTQ0MDAsIDMsIDEsIDEwLCAweGEsIDB4MUM3MUM3fSwgeworCTE1MzYwLCA0LCAxLCA1LCAweGIsIDB4NzU1NTU1fSwgeworCTE2MjAwLCA1LCAxLCAxMCwgMHg1LCAweDZFOUUwNn0sIHsKKwkxNjgwMCwgNiwgMSwgMTAsIDB4NSwgMHgzQ2YzQ2Z9LCB7CisJMTkyMDAsIDcsIDEsIDQsIDB4YiwgMHg3NTU1NTV9LCB7CisJMTk4MDAsIDgsIDEsIDExLCAweDQsIDB4QTU3RUJ9LCB7CisJMjAwMDAsIDksIDEsIDExLCAweDQsIDB4MH0sIHsKKwkyNDAwMCwgMTAsIDMsIDExLCAweGEsIDB4MH0sIHsKKwkyNTAwMCwgMTEsIDUsIDE2LCAweGIsIDB4MH0sIHsKKwkyNjAwMCwgMTIsIDEsIDIsIDB4MTAsIDB4RUM0RUM0fSwgeworCTMwMDAwLCAxMywgMywgOCwgMHhiLCAweDB9LCB7CisJMzM2MDAsIDE0LCAxLCAyLCAweGQsIDB4MTg2MTg2fSwgeworCTM4NDAwLCAxNSwgMSwgMiwgMHhiLCAweDc1NTU1NX0sIHsKKwk0MDAwMCwgMTYsIDEsIDIsIDB4YiwgMH0sIHsKKwkwLCAwLCAwLCAwLCAwLCAwfQorfTsKKwogLyogdHJ1ZSBpZiB0aGUgcG93ZXIgdG9wb2xvZ3kgdXNlcyB0aGUgYnVjayBib29zdCB0byBwcm92aWRlIDMuM1YgdG8gVkRESU9fUkYgYW5kIFdMQU4gUEEgKi8KIHN0YXRpYyBib29sIHNpX3BtdV9yZXNfZGVwZmx0cl9iYihzaV90ICpzaWgpCiB7CkBAIC01ODYsOCArNTI5LDI2IEBACiAJcmV0dXJuIChzaWgtPmJvYXJkZmxhZ3MgJiBCRkxfUEFMRE8pID09IDA7CiB9CiAKLSNkZWZpbmUgQkNNOTQzMjVfQkJWRERJT1NEX0JPQVJEUyhzaWgpIChzaWgtPmJvYXJkdHlwZSA9PSBCQ005NDMyNURFVkJVX0JPQVJEIHx8IFwKLQkJCQkJc2loLT5ib2FyZHR5cGUgPT0gQkNNOTQzMjVCR0FCVV9CT0FSRCkKKy8qIFJldHVybiBkZXBlbmRhbmNpZXMgKGRpcmVjdCBvciBhbGwvaW5kaXJlY3QpIGZvciB0aGUgZ2l2ZW4gcmVzb3VyY2VzICovCitzdGF0aWMgdTMyCitzaV9wbXVfcmVzX2RlcHMoc2lfdCAqc2loLCBjaGlwY3JlZ3NfdCAqY2MsIHUzMiByc3JjcywKKwkJYm9vbCBhbGwpCit7CisJdTMyIGRlcHMgPSAwOworCXUzMiBpOworCisJZm9yIChpID0gMDsgaSA8PSBQTVVSRVNfTUFYX1JFU05VTTsgaSsrKSB7CisJCWlmICghKHJzcmNzICYgUE1VUkVTX0JJVChpKSkpCisJCQljb250aW51ZTsKKwkJV19SRUcoJmNjLT5yZXNfdGFibGVfc2VsLCBpKTsKKwkJZGVwcyB8PSBSX1JFRygmY2MtPnJlc19kZXBfbWFzayk7CisJfQorCisJcmV0dXJuICFhbGwgPyBkZXBzIDogKGRlcHMKKwkJCSAgICAgID8gKGRlcHMgfAorCQkJCSBzaV9wbXVfcmVzX2RlcHMoc2loLCBjYywgZGVwcywKKwkJCQkJCSB0cnVlKSkgOiAwKTsKK30KIAogLyogRGV0ZXJtaW5lIG1pbi9tYXggcnNyYyBtYXNrcy4gVmFsdWUgMCBsZWF2ZXMgaGFyZHdhcmUgYXQgZGVmYXVsdC4gKi8KIHN0YXRpYyB2b2lkIHNpX3BtdV9yZXNfbWFza3Moc2lfdCAqc2loLCB1MzIgKiBwbWluLCB1MzIgKiBwbWF4KQpAQCAtNjYzLDEzICs2MjQsMTEgQEAKIAkvKiBBcHBseSBudnJhbSBvdmVycmlkZSB0byBtaW4gbWFzayAqLwogCXZhbCA9IGdldHZhcihOVUxMLCAicm1pbiIpOwogCWlmICh2YWwgIT0gTlVMTCkgewotCQlQTVVfTVNHKCgiQXBwbHlpbmcgcm1pbj0lcyB0byBtaW5fbWFza1xuIiwgdmFsKSk7CiAJCW1pbl9tYXNrID0gKHUzMikgc2ltcGxlX3N0cnRvdWwodmFsLCBOVUxMLCAwKTsKIAl9CiAJLyogQXBwbHkgbnZyYW0gb3ZlcnJpZGUgdG8gbWF4IG1hc2sgKi8KIAl2YWwgPSBnZXR2YXIoTlVMTCwgInJtYXgiKTsKIAlpZiAodmFsICE9IE5VTEwpIHsKLQkJUE1VX01TRygoIkFwcGx5aW5nIHJtYXg9JXMgdG8gbWF4X21hc2tcbiIsIHZhbCkpOwogCQltYXhfbWFzayA9ICh1MzIpIHNpbXBsZV9zdHJ0b3VsKHZhbCwgTlVMTCwgMCk7CiAJfQogCkBAIC02NzcsMTMzMCArNjM2LDYgQEAKIAkqcG1heCA9IG1heF9tYXNrOwogfQogCi0vKiBpbml0aWFsaXplIFBNVSByZXNvdXJjZXMgKi8KLXZvaWQgc2lfcG11X3Jlc19pbml0KHNpX3QgKnNpaCkKLXsKLQljaGlwY3JlZ3NfdCAqY2M7Ci0JdWludCBvcmlnaWR4OwotCWNvbnN0IHBtdV9yZXNfdXBkb3duX3QgKnBtdV9yZXNfdXBkb3duX3RhYmxlID0gTlVMTDsKLQl1aW50IHBtdV9yZXNfdXBkb3duX3RhYmxlX3N6ID0gMDsKLQljb25zdCBwbXVfcmVzX2RlcGVuZF90ICpwbXVfcmVzX2RlcGVuZF90YWJsZSA9IE5VTEw7Ci0JdWludCBwbXVfcmVzX2RlcGVuZF90YWJsZV9zeiA9IDA7Ci0JdTMyIG1pbl9tYXNrID0gMCwgbWF4X21hc2sgPSAwOwotCWNoYXIgbmFtZVs4XSwgKnZhbDsKLQl1aW50IGksIHJzcmNzOwotCi0JQVNTRVJUKHNpaC0+Y2NjYXBzICYgQ0NfQ0FQX1BNVSk7Ci0KLQkvKiBSZW1lbWJlciBvcmlnaW5hbCBjb3JlIGJlZm9yZSBzd2l0Y2ggdG8gY2hpcGMgKi8KLQlvcmlnaWR4ID0gc2lfY29yZWlkeChzaWgpOwotCWNjID0gc2lfc2V0Y29yZWlkeChzaWgsIFNJX0NDX0lEWCk7Ci0JQVNTRVJUKGNjICE9IE5VTEwpOwotCi0Jc3dpdGNoIChzaWgtPmNoaXApIHsKLQljYXNlIEJDTTQzMjlfQ0hJUF9JRDoKLQkJLyogT3B0aW1pemUgcmVzb3VyY2VzIHVwL2Rvd24gdGltZXJzICovCi0JCWlmIChJU1NJTV9FTkFCKHNpaCkpIHsKLQkJCXBtdV9yZXNfdXBkb3duX3RhYmxlID0gTlVMTDsKLQkJCXBtdV9yZXNfdXBkb3duX3RhYmxlX3N6ID0gMDsKLQkJfSBlbHNlIHsKLQkJCXBtdV9yZXNfdXBkb3duX3RhYmxlID0gYmNtNDMyOV9yZXNfdXBkb3duOwotCQkJcG11X3Jlc191cGRvd25fdGFibGVfc3ogPSBBUlJBWV9TSVpFKGJjbTQzMjlfcmVzX3VwZG93bik7Ci0JCX0KLQkJLyogT3B0aW1pemUgcmVzb3VyY2VzIGRlcGVuZGVuY2llcyAqLwotCQlwbXVfcmVzX2RlcGVuZF90YWJsZSA9IGJjbTQzMjlfcmVzX2RlcGVuZDsKLQkJcG11X3Jlc19kZXBlbmRfdGFibGVfc3ogPSBBUlJBWV9TSVpFKGJjbTQzMjlfcmVzX2RlcGVuZCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBCQ000MzE5X0NISVBfSUQ6Ci0JCS8qIE9wdGltaXplIHJlc291cmNlcyB1cC9kb3duIHRpbWVycyAqLwotCQlpZiAoSVNTSU1fRU5BQihzaWgpKSB7Ci0JCQlwbXVfcmVzX3VwZG93bl90YWJsZSA9IGJjbTQzMTlhMF9yZXNfdXBkb3duX3F0OwotCQkJcG11X3Jlc191cGRvd25fdGFibGVfc3ogPQotCQkJICAgIEFSUkFZX1NJWkUoYmNtNDMxOWEwX3Jlc191cGRvd25fcXQpOwotCQl9IGVsc2UgewotCQkJcG11X3Jlc191cGRvd25fdGFibGUgPSBiY200MzE5YTBfcmVzX3VwZG93bjsKLQkJCXBtdV9yZXNfdXBkb3duX3RhYmxlX3N6ID0KLQkJCSAgICBBUlJBWV9TSVpFKGJjbTQzMTlhMF9yZXNfdXBkb3duKTsKLQkJfQotCQkvKiBPcHRpbWl6ZSByZXNvdXJjZXMgZGVwZW5kYW5jaWVzIG1hc2tzICovCi0JCXBtdV9yZXNfZGVwZW5kX3RhYmxlID0gYmNtNDMxOWEwX3Jlc19kZXBlbmQ7Ci0JCXBtdV9yZXNfZGVwZW5kX3RhYmxlX3N6ID0gQVJSQVlfU0laRShiY200MzE5YTBfcmVzX2RlcGVuZCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBCQ000MzM2X0NISVBfSUQ6Ci0JCS8qIE9wdGltaXplIHJlc291cmNlcyB1cC9kb3duIHRpbWVycyAqLwotCQlpZiAoSVNTSU1fRU5BQihzaWgpKSB7Ci0JCQlwbXVfcmVzX3VwZG93bl90YWJsZSA9IGJjbTQzMzZhMF9yZXNfdXBkb3duX3F0OwotCQkJcG11X3Jlc191cGRvd25fdGFibGVfc3ogPQotCQkJICAgIEFSUkFZX1NJWkUoYmNtNDMzNmEwX3Jlc191cGRvd25fcXQpOwotCQl9IGVsc2UgewotCQkJcG11X3Jlc191cGRvd25fdGFibGUgPSBiY200MzM2YTBfcmVzX3VwZG93bjsKLQkJCXBtdV9yZXNfdXBkb3duX3RhYmxlX3N6ID0KLQkJCSAgICBBUlJBWV9TSVpFKGJjbTQzMzZhMF9yZXNfdXBkb3duKTsKLQkJfQotCQkvKiBPcHRpbWl6ZSByZXNvdXJjZXMgZGVwZW5kYW5jaWVzIG1hc2tzICovCi0JCXBtdV9yZXNfZGVwZW5kX3RhYmxlID0gYmNtNDMzNmEwX3Jlc19kZXBlbmQ7Ci0JCXBtdV9yZXNfZGVwZW5kX3RhYmxlX3N6ID0gQVJSQVlfU0laRShiY200MzM2YTBfcmVzX2RlcGVuZCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBCQ000MzMwX0NISVBfSUQ6Ci0JCS8qIE9wdGltaXplIHJlc291cmNlcyB1cC9kb3duIHRpbWVycyAqLwotCQlpZiAoSVNTSU1fRU5BQihzaWgpKSB7Ci0JCQlwbXVfcmVzX3VwZG93bl90YWJsZSA9IGJjbTQzMzBhMF9yZXNfdXBkb3duX3F0OwotCQkJcG11X3Jlc191cGRvd25fdGFibGVfc3ogPQotCQkJICAgIEFSUkFZX1NJWkUoYmNtNDMzMGEwX3Jlc191cGRvd25fcXQpOwotCQl9IGVsc2UgewotCQkJcG11X3Jlc191cGRvd25fdGFibGUgPSBiY200MzMwYTBfcmVzX3VwZG93bjsKLQkJCXBtdV9yZXNfdXBkb3duX3RhYmxlX3N6ID0KLQkJCSAgICBBUlJBWV9TSVpFKGJjbTQzMzBhMF9yZXNfdXBkb3duKTsKLQkJfQotCQkvKiBPcHRpbWl6ZSByZXNvdXJjZXMgZGVwZW5kYW5jaWVzIG1hc2tzICovCi0JCXBtdV9yZXNfZGVwZW5kX3RhYmxlID0gYmNtNDMzMGEwX3Jlc19kZXBlbmQ7Ci0JCXBtdV9yZXNfZGVwZW5kX3RhYmxlX3N6ID0gQVJSQVlfU0laRShiY200MzMwYTBfcmVzX2RlcGVuZCk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JLyogIyByZXNvdXJjZXMgKi8KLQlyc3JjcyA9IChzaWgtPnBtdWNhcHMgJiBQQ0FQX1JDX01BU0spID4+IFBDQVBfUkNfU0hJRlQ7Ci0KLQkvKiBQcm9ncmFtIHVwL2Rvd24gdGltZXJzICovCi0Jd2hpbGUgKHBtdV9yZXNfdXBkb3duX3RhYmxlX3N6LS0pIHsKLQkJQVNTRVJUKHBtdV9yZXNfdXBkb3duX3RhYmxlICE9IE5VTEwpOwotCQlQTVVfTVNHKCgiQ2hhbmdpbmcgcnNyYyAlZCByZXNfdXBkbl90aW1lciB0byAweCV4XG4iLAotCQkJIHBtdV9yZXNfdXBkb3duX3RhYmxlW3BtdV9yZXNfdXBkb3duX3RhYmxlX3N6XS5yZXNudW0sCi0JCQkgcG11X3Jlc191cGRvd25fdGFibGVbcG11X3Jlc191cGRvd25fdGFibGVfc3pdLnVwZG93bikpOwotCQlXX1JFRygmY2MtPnJlc190YWJsZV9zZWwsCi0JCSAgICAgIHBtdV9yZXNfdXBkb3duX3RhYmxlW3BtdV9yZXNfdXBkb3duX3RhYmxlX3N6XS5yZXNudW0pOwotCQlXX1JFRygmY2MtPnJlc191cGRuX3RpbWVyLAotCQkgICAgICBwbXVfcmVzX3VwZG93bl90YWJsZVtwbXVfcmVzX3VwZG93bl90YWJsZV9zel0udXBkb3duKTsKLQl9Ci0JLyogQXBwbHkgbnZyYW0gb3ZlcnJpZGVzIHRvIHVwL2Rvd24gdGltZXJzICovCi0JZm9yIChpID0gMDsgaSA8IHJzcmNzOyBpKyspIHsKLQkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiciVkdCIsIGkpOwotCQl2YWwgPSBnZXR2YXIoTlVMTCwgbmFtZSk7Ci0JCWlmICh2YWwgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCQlQTVVfTVNHKCgiQXBwbHlpbmcgJXM9JXMgdG8gcnNyYyAlZCByZXNfdXBkbl90aW1lclxuIiwgbmFtZSwKLQkJCSB2YWwsIGkpKTsKLQkJV19SRUcoJmNjLT5yZXNfdGFibGVfc2VsLCAodTMyKSBpKTsKLQkJV19SRUcoJmNjLT5yZXNfdXBkbl90aW1lciwKLQkJICAgICAgKHUzMikgc2ltcGxlX3N0cnRvdWwodmFsLCBOVUxMLCAwKSk7Ci0JfQotCi0JLyogUHJvZ3JhbSByZXNvdXJjZSBkZXBlbmRlbmNpZXMgdGFibGUgKi8KLQl3aGlsZSAocG11X3Jlc19kZXBlbmRfdGFibGVfc3otLSkgewotCQlBU1NFUlQocG11X3Jlc19kZXBlbmRfdGFibGUgIT0gTlVMTCk7Ci0JCWlmIChwbXVfcmVzX2RlcGVuZF90YWJsZVtwbXVfcmVzX2RlcGVuZF90YWJsZV9zel0uZmlsdGVyICE9IE5VTEwKLQkJICAgICYmICEocG11X3Jlc19kZXBlbmRfdGFibGVbcG11X3Jlc19kZXBlbmRfdGFibGVfc3pdLgotCQkJIGZpbHRlcikgKHNpaCkpCi0JCQljb250aW51ZTsKLQkJZm9yIChpID0gMDsgaSA8IHJzcmNzOyBpKyspIHsKLQkJCWlmICgocG11X3Jlc19kZXBlbmRfdGFibGVbcG11X3Jlc19kZXBlbmRfdGFibGVfc3pdLgotCQkJICAgICByZXNfbWFzayAmIFBNVVJFU19CSVQoaSkpID09IDApCi0JCQkJY29udGludWU7Ci0JCQlXX1JFRygmY2MtPnJlc190YWJsZV9zZWwsIGkpOwotCQkJc3dpdGNoIChwbXVfcmVzX2RlcGVuZF90YWJsZVtwbXVfcmVzX2RlcGVuZF90YWJsZV9zel0uCi0JCQkJYWN0aW9uKSB7Ci0JCQljYXNlIFJFU19ERVBFTkRfU0VUOgotCQkJCVBNVV9NU0coKCJDaGFuZ2luZyByc3JjICVkIHJlc19kZXBfbWFzayB0byAweCV4XG4iLCBpLCBwbXVfcmVzX2RlcGVuZF90YWJsZVtwbXVfcmVzX2RlcGVuZF90YWJsZV9zel0uZGVwZW5kX21hc2spKTsKLQkJCQlXX1JFRygmY2MtPnJlc19kZXBfbWFzaywKLQkJCQkgICAgICBwbXVfcmVzX2RlcGVuZF90YWJsZQotCQkJCSAgICAgIFtwbXVfcmVzX2RlcGVuZF90YWJsZV9zel0uZGVwZW5kX21hc2spOwotCQkJCWJyZWFrOwotCQkJY2FzZSBSRVNfREVQRU5EX0FERDoKLQkJCQlQTVVfTVNHKCgiQWRkaW5nIDB4JXggdG8gcnNyYyAlZCByZXNfZGVwX21hc2tcbiIsIHBtdV9yZXNfZGVwZW5kX3RhYmxlW3BtdV9yZXNfZGVwZW5kX3RhYmxlX3N6XS5kZXBlbmRfbWFzaywgaSkpOwotCQkJCU9SX1JFRygmY2MtPnJlc19kZXBfbWFzaywKLQkJCQkgICAgICAgcG11X3Jlc19kZXBlbmRfdGFibGUKLQkJCQkgICAgICAgW3BtdV9yZXNfZGVwZW5kX3RhYmxlX3N6XS5kZXBlbmRfbWFzayk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFJFU19ERVBFTkRfUkVNT1ZFOgotCQkJCVBNVV9NU0coKCJSZW1vdmluZyAweCV4IGZyb20gcnNyYyAlZCByZXNfZGVwX21hc2tcbiIsIHBtdV9yZXNfZGVwZW5kX3RhYmxlW3BtdV9yZXNfZGVwZW5kX3RhYmxlX3N6XS5kZXBlbmRfbWFzaywgaSkpOwotCQkJCUFORF9SRUcoJmNjLT5yZXNfZGVwX21hc2ssCi0JCQkJCX5wbXVfcmVzX2RlcGVuZF90YWJsZQotCQkJCQlbcG11X3Jlc19kZXBlbmRfdGFibGVfc3pdLmRlcGVuZF9tYXNrKTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJQVNTRVJUKDApOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCS8qIEFwcGx5IG52cmFtIG92ZXJyaWRlcyB0byBkZXBlbmRhbmNpZXMgbWFza3MgKi8KLQlmb3IgKGkgPSAwOyBpIDwgcnNyY3M7IGkrKykgewotCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJyJWRkIiwgaSk7Ci0JCXZhbCA9IGdldHZhcihOVUxMLCBuYW1lKTsKLQkJaWYgKHZhbCA9PSBOVUxMKQotCQkJY29udGludWU7Ci0JCVBNVV9NU0coKCJBcHBseWluZyAlcz0lcyB0byByc3JjICVkIHJlc19kZXBfbWFza1xuIiwgbmFtZSwgdmFsLAotCQkJIGkpKTsKLQkJV19SRUcoJmNjLT5yZXNfdGFibGVfc2VsLCAodTMyKSBpKTsKLQkJV19SRUcoJmNjLT5yZXNfZGVwX21hc2ssCi0JCSAgICAgICh1MzIpIHNpbXBsZV9zdHJ0b3VsKHZhbCwgTlVMTCwgMCkpOwotCX0KLQotCS8qIERldGVybWluZSBtaW4vbWF4IHJzcmMgbWFza3MgKi8KLQlzaV9wbXVfcmVzX21hc2tzKHNpaCwgJm1pbl9tYXNrLCAmbWF4X21hc2spOwotCi0JLyogSXQgaXMgcmVxdWlyZWQgdG8gcHJvZ3JhbSBtYXhfbWFzayBmaXJzdCBhbmQgdGhlbiBtaW5fbWFzayAqLwotCi0JLyogUHJvZ3JhbSBtYXggcmVzb3VyY2UgbWFzayAqLwotCi0JaWYgKG1heF9tYXNrKSB7Ci0JCVBNVV9NU0coKCJDaGFuZ2luZyBtYXhfcmVzX21hc2sgdG8gMHgleFxuIiwgbWF4X21hc2spKTsKLQkJV19SRUcoJmNjLT5tYXhfcmVzX21hc2ssIG1heF9tYXNrKTsKLQl9Ci0KLQkvKiBQcm9ncmFtIG1pbiByZXNvdXJjZSBtYXNrICovCi0KLQlpZiAobWluX21hc2spIHsKLQkJUE1VX01TRygoIkNoYW5naW5nIG1pbl9yZXNfbWFzayB0byAweCV4XG4iLCBtaW5fbWFzaykpOwotCQlXX1JFRygmY2MtPm1pbl9yZXNfbWFzaywgbWluX21hc2spOwotCX0KLQotCS8qIEFkZCBzb21lIGRlbGF5OyBhbGxvdyByZXNvdXJjZXMgdG8gY29tZSB1cCBhbmQgc2V0dGxlLiAqLwotCW1kZWxheSgyKTsKLQotCS8qIFJldHVybiB0byBvcmlnaW5hbCBjb3JlICovCi0Jc2lfc2V0Y29yZWlkeChzaWgsIG9yaWdpZHgpOwotfQotCi0vKiBzZXR1cCBwbGwgYW5kIHF1ZXJ5IGNsb2NrIHNwZWVkICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JdTE2IGZyZXE7Ci0JdTggeGY7Ci0JdTggd2JpbnQ7Ci0JdTMyIHdiZnJhYzsKLX0gcG11MF94dGFsdGFiMF90OwotCi0vKiB0aGUgZm9sbG93aW5nIHRhYmxlIGlzIGJhc2VkIG9uIDg4ME1oeiBmdmNvICovCi1zdGF0aWMgY29uc3QgcG11MF94dGFsdGFiMF90IHBtdTBfeHRhbHRhYjBbXSA9IHsKLQl7Ci0JMTIwMDAsIDEsIDczLCAzNDk1MjV9LCB7Ci0JMTMwMDAsIDIsIDY3LCA3MjU5Mzd9LCB7Ci0JMTQ0MDAsIDMsIDYxLCAxMTY1MDh9LCB7Ci0JMTUzNjAsIDQsIDU3LCAzMDU4MzR9LCB7Ci0JMTYyMDAsIDUsIDU0LCAzMzY1Nzl9LCB7Ci0JMTY4MDAsIDYsIDUyLCAzOTk0NTd9LCB7Ci0JMTkyMDAsIDcsIDQ1LCA4NzM4MTN9LCB7Ci0JMTk4MDAsIDgsIDQ0LCA0NjYwMzN9LCB7Ci0JMjAwMDAsIDksIDQ0LCAwfSwgewotCTI1MDAwLCAxMCwgNzAsIDQxOTQzMH0sIHsKLQkyNjAwMCwgMTEsIDY3LCA3MjU5Mzd9LCB7Ci0JMzAwMDAsIDEyLCA1OCwgNjk5MDUwfSwgewotCTM4NDAwLCAxMywgNDUsIDg3MzgxM30sIHsKLQk0MDAwMCwgMTQsIDQ1LCAwfSwgewotCTAsIDAsIDAsIDB9Ci19OwotCi0jZGVmaW5lIFBNVTBfWFRBTDBfREVGQVVMVAk4Ci0KLS8qIHNldHVwIHBsbCBhbmQgcXVlcnkgY2xvY2sgc3BlZWQgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1MTYgZnJlZjsKLQl1OCB4ZjsKLQl1OCBwMWRpdjsKLQl1OCBwMmRpdjsKLQl1OCBuZGl2X2ludDsKLQl1MzIgbmRpdl9mcmFjOwotfSBwbXUxX3h0YWx0YWIwX3Q7Ci0KLXN0YXRpYyBjb25zdCBwbXUxX3h0YWx0YWIwX3QgcG11MV94dGFsdGFiMF84ODBfNDMyOVtdID0gewotCXsKLQkxMjAwMCwgMSwgMywgMjIsIDB4OSwgMHhGRkZGRUZ9LCB7Ci0JMTMwMDAsIDIsIDEsIDYsIDB4YiwgMHg0ODM0ODN9LCB7Ci0JMTQ0MDAsIDMsIDEsIDEwLCAweGEsIDB4MUM3MUM3fSwgewotCTE1MzYwLCA0LCAxLCA1LCAweGIsIDB4NzU1NTU1fSwgewotCTE2MjAwLCA1LCAxLCAxMCwgMHg1LCAweDZFOUUwNn0sIHsKLQkxNjgwMCwgNiwgMSwgMTAsIDB4NSwgMHgzQ2YzQ2Z9LCB7Ci0JMTkyMDAsIDcsIDEsIDQsIDB4YiwgMHg3NTU1NTV9LCB7Ci0JMTk4MDAsIDgsIDEsIDExLCAweDQsIDB4QTU3RUJ9LCB7Ci0JMjAwMDAsIDksIDEsIDExLCAweDQsIDB4MH0sIHsKLQkyNDAwMCwgMTAsIDMsIDExLCAweGEsIDB4MH0sIHsKLQkyNTAwMCwgMTEsIDUsIDE2LCAweGIsIDB4MH0sIHsKLQkyNjAwMCwgMTIsIDEsIDEsIDB4MjEsIDB4RDg5RDg5fSwgewotCTMwMDAwLCAxMywgMywgOCwgMHhiLCAweDB9LCB7Ci0JMzc0MDAsIDE0LCAzLCAxLCAweDQ2LCAweDk2OTY5Nn0sIHsKLQkzODQwMCwgMTUsIDEsIDEsIDB4MTYsIDB4RUFBQUFBfSwgewotCTQwMDAwLCAxNiwgMSwgMiwgMHhiLCAwfSwgewotCTAsIDAsIDAsIDAsIDAsIDB9Ci19OwotCi0vKiB0aGUgZm9sbG93aW5nIHRhYmxlIGlzIGJhc2VkIG9uIDg4ME1oeiBmdmNvICovCi1zdGF0aWMgY29uc3QgcG11MV94dGFsdGFiMF90IHBtdTFfeHRhbHRhYjBfODgwW10gPSB7Ci0JewotCTEyMDAwLCAxLCAzLCAyMiwgMHg5LCAweEZGRkZFRn0sIHsKLQkxMzAwMCwgMiwgMSwgNiwgMHhiLCAweDQ4MzQ4M30sIHsKLQkxNDQwMCwgMywgMSwgMTAsIDB4YSwgMHgxQzcxQzd9LCB7Ci0JMTUzNjAsIDQsIDEsIDUsIDB4YiwgMHg3NTU1NTV9LCB7Ci0JMTYyMDAsIDUsIDEsIDEwLCAweDUsIDB4NkU5RTA2fSwgewotCTE2ODAwLCA2LCAxLCAxMCwgMHg1LCAweDNDZjNDZn0sIHsKLQkxOTIwMCwgNywgMSwgNCwgMHhiLCAweDc1NTU1NX0sIHsKLQkxOTgwMCwgOCwgMSwgMTEsIDB4NCwgMHhBNTdFQn0sIHsKLQkyMDAwMCwgOSwgMSwgMTEsIDB4NCwgMHgwfSwgewotCTI0MDAwLCAxMCwgMywgMTEsIDB4YSwgMHgwfSwgewotCTI1MDAwLCAxMSwgNSwgMTYsIDB4YiwgMHgwfSwgewotCTI2MDAwLCAxMiwgMSwgMiwgMHgxMCwgMHhFQzRFQzR9LCB7Ci0JMzAwMDAsIDEzLCAzLCA4LCAweGIsIDB4MH0sIHsKLQkzMzYwMCwgMTQsIDEsIDIsIDB4ZCwgMHgxODYxODZ9LCB7Ci0JMzg0MDAsIDE1LCAxLCAyLCAweGIsIDB4NzU1NTU1fSwgewotCTQwMDAwLCAxNiwgMSwgMiwgMHhiLCAwfSwgewotCTAsIDAsIDAsIDAsIDAsIDB9Ci19OwotCi0jZGVmaW5lIFBNVTFfWFRBTFRBQjBfODgwXzEyMDAwSwkwCi0jZGVmaW5lIFBNVTFfWFRBTFRBQjBfODgwXzEzMDAwSwkxCi0jZGVmaW5lIFBNVTFfWFRBTFRBQjBfODgwXzE0NDAwSwkyCi0jZGVmaW5lIFBNVTFfWFRBTFRBQjBfODgwXzE1MzYwSwkzCi0jZGVmaW5lIFBNVTFfWFRBTFRBQjBfODgwXzE2MjAwSwk0Ci0jZGVmaW5lIFBNVTFfWFRBTFRBQjBfODgwXzE2ODAwSwk1Ci0jZGVmaW5lIFBNVTFfWFRBTFRBQjBfODgwXzE5MjAwSwk2Ci0jZGVmaW5lIFBNVTFfWFRBTFRBQjBfODgwXzE5ODAwSwk3Ci0jZGVmaW5lIFBNVTFfWFRBTFRBQjBfODgwXzIwMDAwSwk4Ci0jZGVmaW5lIFBNVTFfWFRBTFRBQjBfODgwXzI0MDAwSwk5Ci0jZGVmaW5lIFBNVTFfWFRBTFRBQjBfODgwXzI1MDAwSwkxMAotI2RlZmluZSBQTVUxX1hUQUxUQUIwXzg4MF8yNjAwMEsJMTEKLSNkZWZpbmUgUE1VMV9YVEFMVEFCMF84ODBfMzAwMDBLCTEyCi0jZGVmaW5lIFBNVTFfWFRBTFRBQjBfODgwXzM3NDAwSwkxMwotI2RlZmluZSBQTVUxX1hUQUxUQUIwXzg4MF8zODQwMEsJMTQKLSNkZWZpbmUgUE1VMV9YVEFMVEFCMF84ODBfNDAwMDBLCTE1Ci0KLS8qIHRoZSBmb2xsb3dpbmcgdGFibGUgaXMgYmFzZWQgb24gMTc2ME1oeiBmdmNvICovCi1zdGF0aWMgY29uc3QgcG11MV94dGFsdGFiMF90IHBtdTFfeHRhbHRhYjBfMTc2MFtdID0gewotCXsKLQkxMjAwMCwgMSwgMywgNDQsIDB4OSwgMHhGRkZGRUZ9LCB7Ci0JMTMwMDAsIDIsIDEsIDEyLCAweGIsIDB4NDgzNDgzfSwgewotCTE0NDAwLCAzLCAxLCAyMCwgMHhhLCAweDFDNzFDN30sIHsKLQkxNTM2MCwgNCwgMSwgMTAsIDB4YiwgMHg3NTU1NTV9LCB7Ci0JMTYyMDAsIDUsIDEsIDIwLCAweDUsIDB4NkU5RTA2fSwgewotCTE2ODAwLCA2LCAxLCAyMCwgMHg1LCAweDNDZjNDZn0sIHsKLQkxOTIwMCwgNywgMSwgMTgsIDB4NSwgMHgxN0I0MjV9LCB7Ci0JMTk4MDAsIDgsIDEsIDIyLCAweDQsIDB4QTU3RUJ9LCB7Ci0JMjAwMDAsIDksIDEsIDIyLCAweDQsIDB4MH0sIHsKLQkyNDAwMCwgMTAsIDMsIDIyLCAweGEsIDB4MH0sIHsKLQkyNTAwMCwgMTEsIDUsIDMyLCAweGIsIDB4MH0sIHsKLQkyNjAwMCwgMTIsIDEsIDQsIDB4MTAsIDB4RUM0RUM0fSwgewotCTMwMDAwLCAxMywgMywgMTYsIDB4YiwgMHgwfSwgewotCTM4NDAwLCAxNCwgMSwgMTAsIDB4NCwgMHg5NTU1NTV9LCB7Ci0JNDAwMDAsIDE1LCAxLCA0LCAweGIsIDB9LCB7Ci0JMCwgMCwgMCwgMCwgMCwgMH0KLX07Ci0KLS8qIHRhYmxlIGluZGV4ICovCi0jZGVmaW5lIFBNVTFfWFRBTFRBQjBfMTc2MF8xMjAwMEsJMAotI2RlZmluZSBQTVUxX1hUQUxUQUIwXzE3NjBfMTMwMDBLCTEKLSNkZWZpbmUgUE1VMV9YVEFMVEFCMF8xNzYwXzE0NDAwSwkyCi0jZGVmaW5lIFBNVTFfWFRBTFRBQjBfMTc2MF8xNTM2MEsJMwotI2RlZmluZSBQTVUxX1hUQUxUQUIwXzE3NjBfMTYyMDBLCTQKLSNkZWZpbmUgUE1VMV9YVEFMVEFCMF8xNzYwXzE2ODAwSwk1Ci0jZGVmaW5lIFBNVTFfWFRBTFRBQjBfMTc2MF8xOTIwMEsJNgotI2RlZmluZSBQTVUxX1hUQUxUQUIwXzE3NjBfMTk4MDBLCTcKLSNkZWZpbmUgUE1VMV9YVEFMVEFCMF8xNzYwXzIwMDAwSwk4Ci0jZGVmaW5lIFBNVTFfWFRBTFRBQjBfMTc2MF8yNDAwMEsJOQotI2RlZmluZSBQTVUxX1hUQUxUQUIwXzE3NjBfMjUwMDBLCTEwCi0jZGVmaW5lIFBNVTFfWFRBTFRBQjBfMTc2MF8yNjAwMEsJMTEKLSNkZWZpbmUgUE1VMV9YVEFMVEFCMF8xNzYwXzMwMDAwSwkxMgotI2RlZmluZSBQTVUxX1hUQUxUQUIwXzE3NjBfMzg0MDBLCTEzCi0jZGVmaW5lIFBNVTFfWFRBTFRBQjBfMTc2MF80MDAwMEsJMTQKLQotLyogdGhlIGZvbGxvd2luZyB0YWJsZSBpcyBiYXNlZCBvbiAxNDQwTWh6IGZ2Y28gKi8KLXN0YXRpYyBjb25zdCBwbXUxX3h0YWx0YWIwX3QgcG11MV94dGFsdGFiMF8xNDQwW10gPSB7Ci0JewotCTEyMDAwLCAxLCAxLCAxLCAweDc4LCAweDB9LCB7Ci0JMTMwMDAsIDIsIDEsIDEsIDB4NkUsIDB4QzRFQzRFfSwgewotCTE0NDAwLCAzLCAxLCAxLCAweDY0LCAweDB9LCB7Ci0JMTUzNjAsIDQsIDEsIDEsIDB4NUQsIDB4QzAwMDAwfSwgewotCTE2MjAwLCA1LCAxLCAxLCAweDU4LCAweEUzOEUzOH0sIHsKLQkxNjgwMCwgNiwgMSwgMSwgMHg1NSwgMHhCNkRCNkR9LCB7Ci0JMTkyMDAsIDcsIDEsIDEsIDB4NEIsIDB9LCB7Ci0JMTk4MDAsIDgsIDEsIDEsIDB4NDgsIDB4QkEyRThCfSwgewotCTIwMDAwLCA5LCAxLCAxLCAweDQ4LCAweDB9LCB7Ci0JMjUwMDAsIDEwLCAxLCAxLCAweDM5LCAweDk5OTk5OX0sIHsKLQkyNjAwMCwgMTEsIDEsIDEsIDB4MzcsIDB4NjI3NjI3fSwgewotCTMwMDAwLCAxMiwgMSwgMSwgMHgzMCwgMHgwfSwgewotCTM3NDAwLCAxMywgMiwgMSwgMHg0RCwgMHgxNUU3Nn0sIHsKLQkzODQwMCwgMTMsIDIsIDEsIDB4NEIsIDB4MH0sIHsKLQk0MDAwMCwgMTQsIDIsIDEsIDB4NDgsIDB4MH0sIHsKLQk0ODAwMCwgMTUsIDIsIDEsIDB4M2MsIDB4MH0sIHsKLQkwLCAwLCAwLCAwLCAwLCAwfQotfTsKLQotLyogdGFibGUgaW5kZXggKi8KLSNkZWZpbmUgUE1VMV9YVEFMVEFCMF8xNDQwXzEyMDAwSwkwCi0jZGVmaW5lIFBNVTFfWFRBTFRBQjBfMTQ0MF8xMzAwMEsJMQotI2RlZmluZSBQTVUxX1hUQUxUQUIwXzE0NDBfMTQ0MDBLCTIKLSNkZWZpbmUgUE1VMV9YVEFMVEFCMF8xNDQwXzE1MzYwSwkzCi0jZGVmaW5lIFBNVTFfWFRBTFRBQjBfMTQ0MF8xNjIwMEsJNAotI2RlZmluZSBQTVUxX1hUQUxUQUIwXzE0NDBfMTY4MDBLCTUKLSNkZWZpbmUgUE1VMV9YVEFMVEFCMF8xNDQwXzE5MjAwSwk2Ci0jZGVmaW5lIFBNVTFfWFRBTFRBQjBfMTQ0MF8xOTgwMEsJNwotI2RlZmluZSBQTVUxX1hUQUxUQUIwXzE0NDBfMjAwMDBLCTgKLSNkZWZpbmUgUE1VMV9YVEFMVEFCMF8xNDQwXzI1MDAwSwk5Ci0jZGVmaW5lIFBNVTFfWFRBTFRBQjBfMTQ0MF8yNjAwMEsJMTAKLSNkZWZpbmUgUE1VMV9YVEFMVEFCMF8xNDQwXzMwMDAwSwkxMQotI2RlZmluZSBQTVUxX1hUQUxUQUIwXzE0NDBfMzc0MDBLCTEyCi0jZGVmaW5lIFBNVTFfWFRBTFRBQjBfMTQ0MF8zODQwMEsJMTMKLSNkZWZpbmUgUE1VMV9YVEFMVEFCMF8xNDQwXzQwMDAwSwkxNAotI2RlZmluZSBQTVUxX1hUQUxUQUIwXzE0NDBfNDgwMDBLCTE1Ci0KLSNkZWZpbmUgWFRBTF9GUkVRXzI0MDAwTUhaCQkyNDAwMAotI2RlZmluZSBYVEFMX0ZSRVFfMzAwMDBNSFoJCTMwMDAwCi0jZGVmaW5lIFhUQUxfRlJFUV8zNzQwME1IWgkJMzc0MDAKLSNkZWZpbmUgWFRBTF9GUkVRXzQ4MDAwTUhaCQk0ODAwMAotCi1zdGF0aWMgY29uc3QgcG11MV94dGFsdGFiMF90IHBtdTFfeHRhbHRhYjBfOTYwW10gPSB7Ci0JewotCTEyMDAwLCAxLCAxLCAxLCAweDUwLCAweDB9LCB7Ci0JMTMwMDAsIDIsIDEsIDEsIDB4NDksIDB4RDg5RDg5fSwgewotCTE0NDAwLCAzLCAxLCAxLCAweDQyLCAweEFBQUFBQX0sIHsKLQkxNTM2MCwgNCwgMSwgMSwgMHgzRSwgMHg4MDAwMDB9LCB7Ci0JMTYyMDAsIDUsIDEsIDEsIDB4MzksIDB4NDI1RUQwfSwgewotCTE2ODAwLCA2LCAxLCAxLCAweDM5LCAweDI0OTI0OX0sIHsKLQkxOTIwMCwgNywgMSwgMSwgMHgzMiwgMHgwfSwgewotCTE5ODAwLCA4LCAxLCAxLCAweDMwLCAweDdDMUYwN30sIHsKLQkyMDAwMCwgOSwgMSwgMSwgMHgzMCwgMHgwfSwgewotCTI1MDAwLCAxMCwgMSwgMSwgMHgyNiwgMHg2NjY2NjZ9LCB7Ci0JMjYwMDAsIDExLCAxLCAxLCAweDI0LCAweEVDNEVDNH0sIHsKLQkzMDAwMCwgMTIsIDEsIDEsIDB4MjAsIDB4MH0sIHsKLQkzNzQwMCwgMTMsIDIsIDEsIDB4MzMsIDB4NTYzRUY5fSwgewotCTM4NDAwLCAxNCwgMiwgMSwgMHgzMiwgMHgwfSwgewotCTQwMDAwLCAxNSwgMiwgMSwgMHgzMCwgMHgwfSwgewotCTQ4MDAwLCAxNiwgMiwgMSwgMHgyOCwgMHgwfSwgewotCTAsIDAsIDAsIDAsIDAsIDB9Ci19OwotCi0vKiB0YWJsZSBpbmRleCAqLwotI2RlZmluZSBQTVUxX1hUQUxUQUIwXzk2MF8xMjAwMEsJMAotI2RlZmluZSBQTVUxX1hUQUxUQUIwXzk2MF8xMzAwMEsJMQotI2RlZmluZSBQTVUxX1hUQUxUQUIwXzk2MF8xNDQwMEsJMgotI2RlZmluZSBQTVUxX1hUQUxUQUIwXzk2MF8xNTM2MEsJMwotI2RlZmluZSBQTVUxX1hUQUxUQUIwXzk2MF8xNjIwMEsJNAotI2RlZmluZSBQTVUxX1hUQUxUQUIwXzk2MF8xNjgwMEsJNQotI2RlZmluZSBQTVUxX1hUQUxUQUIwXzk2MF8xOTIwMEsJNgotI2RlZmluZSBQTVUxX1hUQUxUQUIwXzk2MF8xOTgwMEsJNwotI2RlZmluZSBQTVUxX1hUQUxUQUIwXzk2MF8yMDAwMEsJOAotI2RlZmluZSBQTVUxX1hUQUxUQUIwXzk2MF8yNTAwMEsJOQotI2RlZmluZSBQTVUxX1hUQUxUQUIwXzk2MF8yNjAwMEsJMTAKLSNkZWZpbmUgUE1VMV9YVEFMVEFCMF85NjBfMzAwMDBLCTExCi0jZGVmaW5lIFBNVTFfWFRBTFRBQjBfOTYwXzM3NDAwSwkxMgotI2RlZmluZSBQTVUxX1hUQUxUQUIwXzk2MF8zODQwMEsJMTMKLSNkZWZpbmUgUE1VMV9YVEFMVEFCMF85NjBfNDAwMDBLCTE0Ci0jZGVmaW5lIFBNVTFfWFRBTFRBQjBfOTYwXzQ4MDAwSwkxNQotCi0vKiBzZWxlY3QgeHRhbCB0YWJsZSBmb3IgZWFjaCBjaGlwICovCi1zdGF0aWMgY29uc3QgcG11MV94dGFsdGFiMF90ICpzaV9wbXUxX3h0YWx0YWIwKHNpX3QgKnNpaCkKLXsKLSNpZmRlZiBCQ01EQkcKLQljaGFyIGNobls4XTsKLSNlbmRpZgotCXN3aXRjaCAoc2loLT5jaGlwKSB7Ci0JY2FzZSBCQ000MzI5X0NISVBfSUQ6Ci0JCXJldHVybiBwbXUxX3h0YWx0YWIwXzg4MF80MzI5OwotCWNhc2UgQkNNNDMxOV9DSElQX0lEOgotCQlyZXR1cm4gcG11MV94dGFsdGFiMF8xNDQwOwotCWNhc2UgQkNNNDMzNl9DSElQX0lEOgotCQlyZXR1cm4gcG11MV94dGFsdGFiMF85NjA7Ci0JY2FzZSBCQ000MzMwX0NISVBfSUQ6Ci0JCWlmIChDU1Q0MzMwX0NISVBNT0RFX1NESU9EKHNpaC0+Y2hpcHN0KSkKLQkJCXJldHVybiBwbXUxX3h0YWx0YWIwXzk2MDsKLQkJZWxzZQotCQkJcmV0dXJuIHBtdTFfeHRhbHRhYjBfMTQ0MDsKLQlkZWZhdWx0OgotCQlQTVVfTVNHKCgic2lfcG11MV94dGFsdGFiMDogVW5rbm93biBjaGlwaWQgJXNcbiIsCi0JCQkgYmNtX2NoaXBuYW1lKHNpaC0+Y2hpcCwgY2huLCA4KSkpOwotCQlicmVhazsKLQl9Ci0JQVNTRVJUKDApOwotCXJldHVybiBOVUxMOwotfQotCi0vKiBzZWxlY3QgZGVmYXVsdCB4dGFsIGZyZXF1ZW5jeSBmb3IgZWFjaCBjaGlwICovCi1zdGF0aWMgY29uc3QgcG11MV94dGFsdGFiMF90ICpzaV9wbXUxX3h0YWxkZWYwKHNpX3QgKnNpaCkKLXsKLSNpZmRlZiBCQ01EQkcKLQljaGFyIGNobls4XTsKLSNlbmRpZgotCi0Jc3dpdGNoIChzaWgtPmNoaXApIHsKLQljYXNlIEJDTTQzMjlfQ0hJUF9JRDoKLQkJLyogRGVmYXVsdCB0byAzODQwMEtoeiAqLwotCQlyZXR1cm4gJnBtdTFfeHRhbHRhYjBfODgwXzQzMjlbUE1VMV9YVEFMVEFCMF84ODBfMzg0MDBLXTsKLQljYXNlIEJDTTQzMTlfQ0hJUF9JRDoKLQkJLyogRGVmYXVsdCB0byAzMDAwMEtoeiAqLwotCQlyZXR1cm4gJnBtdTFfeHRhbHRhYjBfMTQ0MFtQTVUxX1hUQUxUQUIwXzE0NDBfMzAwMDBLXTsKLQljYXNlIEJDTTQzMzZfQ0hJUF9JRDoKLQkJLyogRGVmYXVsdCB0byAyNjAwMEtoeiAqLwotCQlyZXR1cm4gJnBtdTFfeHRhbHRhYjBfOTYwW1BNVTFfWFRBTFRBQjBfOTYwXzI2MDAwS107Ci0JY2FzZSBCQ000MzMwX0NISVBfSUQ6Ci0JCS8qIERlZmF1bHQgdG8gMzc0MDBLaHogKi8KLQkJaWYgKENTVDQzMzBfQ0hJUE1PREVfU0RJT0Qoc2loLT5jaGlwc3QpKQotCQkJcmV0dXJuICZwbXUxX3h0YWx0YWIwXzk2MFtQTVUxX1hUQUxUQUIwXzk2MF8zNzQwMEtdOwotCQllbHNlCi0JCQlyZXR1cm4gJnBtdTFfeHRhbHRhYjBfMTQ0MFtQTVUxX1hUQUxUQUIwXzE0NDBfMzc0MDBLXTsKLQlkZWZhdWx0OgotCQlQTVVfTVNHKCgic2lfcG11MV94dGFsZGVmMDogVW5rbm93biBjaGlwaWQgJXNcbiIsCi0JCQkgYmNtX2NoaXBuYW1lKHNpaC0+Y2hpcCwgY2huLCA4KSkpOwotCQlicmVhazsKLQl9Ci0JQVNTRVJUKDApOwotCXJldHVybiBOVUxMOwotfQotCi0vKiBzZWxlY3QgZGVmYXVsdCBwbGwgZnZjbyBmb3IgZWFjaCBjaGlwICovCi1zdGF0aWMgdTMyIHNpX3BtdTFfcGxsZnZjbzAoc2lfdCAqc2loKQotewotI2lmZGVmIEJDTURCRwotCWNoYXIgY2huWzhdOwotI2VuZGlmCi0KLQlzd2l0Y2ggKHNpaC0+Y2hpcCkgewotCWNhc2UgQkNNNDMyOV9DSElQX0lEOgotCQlyZXR1cm4gRlZDT184ODA7Ci0JY2FzZSBCQ000MzE5X0NISVBfSUQ6Ci0JCXJldHVybiBGVkNPXzE0NDA7Ci0JY2FzZSBCQ000MzM2X0NISVBfSUQ6Ci0JCXJldHVybiBGVkNPXzk2MDsKLQljYXNlIEJDTTQzMzBfQ0hJUF9JRDoKLQkJaWYgKENTVDQzMzBfQ0hJUE1PREVfU0RJT0Qoc2loLT5jaGlwc3QpKQotCQkJcmV0dXJuIEZWQ09fOTYwOwotCQllbHNlCi0JCQlyZXR1cm4gRlZDT18xNDQwOwotCWRlZmF1bHQ6Ci0JCVBNVV9NU0coKCJzaV9wbXUxX3BsbGZ2Y28wOiBVbmtub3duIGNoaXBpZCAlc1xuIiwKLQkJCSBiY21fY2hpcG5hbWUoc2loLT5jaGlwLCBjaG4sIDgpKSk7Ci0JCWJyZWFrOwotCX0KLQlBU1NFUlQoMCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIHF1ZXJ5IGFscC94dGFsIGNsb2NrIGZyZXF1ZW5jeSAqLwotc3RhdGljIHUzMgotc2lfcG11MV9hbHBjbGswKHNpX3QgKnNpaCwgY2hpcGNyZWdzX3QgKmNjKQotewotCWNvbnN0IHBtdTFfeHRhbHRhYjBfdCAqeHQ7Ci0JdTMyIHhmOwotCi0JLyogRmluZCB0aGUgZnJlcXVlbmN5IGluIHRoZSB0YWJsZSAqLwotCXhmID0gKFJfUkVHKCZjYy0+cG11Y29udHJvbCkgJiBQQ1RMX1hUQUxGUkVRX01BU0spID4+Ci0JICAgIFBDVExfWFRBTEZSRVFfU0hJRlQ7Ci0JZm9yICh4dCA9IHNpX3BtdTFfeHRhbHRhYjAoc2loKTsgeHQgIT0gTlVMTCAmJiB4dC0+ZnJlZiAhPSAwOyB4dCsrKQotCQlpZiAoeHQtPnhmID09IHhmKQotCQkJYnJlYWs7Ci0JLyogQ291bGQgbm90IGZpbmQgaXQgc28gYXNzaWduIGEgZGVmYXVsdCB2YWx1ZSAqLwotCWlmICh4dCA9PSBOVUxMIHx8IHh0LT5mcmVmID09IDApCi0JCXh0ID0gc2lfcG11MV94dGFsZGVmMChzaWgpOwotCUFTU0VSVCh4dCAhPSBOVUxMICYmIHh0LT5mcmVmICE9IDApOwotCi0JcmV0dXJuIHh0LT5mcmVmICogMTAwMDsKLX0KLQotLyogU2V0IHVwIFBMTCByZWdpc3RlcnMgaW4gdGhlIFBNVSBhcyBwZXIgdGhlIGNyeXN0YWwgc3BlZWQuCi0gKiBYdGFsRnJlcSBmaWVsZCBpbiBwbXVjb250cm9sIHJlZ2lzdGVyIGJlaW5nIDAgaW5kaWNhdGVzIHRoZSBQTEwKLSAqIGlzIG5vdCBwcm9ncmFtbWVkIGFuZCB0aGUgaC93IGRlZmF1bHQgaXMgYXNzdW1lZCB0byB3b3JrLCBpbiB3aGljaAotICogY2FzZSB0aGUgeHRhbCBmcmVxdWVuY3kgaXMgdW5rbm93biB0byB0aGUgcy93IHNvIHdlIG5lZWQgdG8gY2FsbAotICogc2lfcG11MV94dGFsZGVmMCgpIHdoZXJldmVyIGl0IGlzIG5lZWRlZCB0byByZXR1cm4gYSBkZWZhdWx0IHZhbHVlLgotICovCi1zdGF0aWMgdm9pZCBzaV9wbXUxX3BsbGluaXQwKHNpX3QgKnNpaCwgY2hpcGNyZWdzX3QgKmNjLCB1MzIgeHRhbCkKLXsKLQljb25zdCBwbXUxX3h0YWx0YWIwX3QgKnh0OwotCXUzMiB0bXA7Ci0JdTMyIGJ1Zl9zdHJlbmd0aCA9IDA7Ci0JdTggbmRpdl9tb2RlID0gMTsKLQotCS8qIFVzZSBoL3cgZGVmYXVsdCBQTEwgY29uZmlnICovCi0JaWYgKHh0YWwgPT0gMCkgewotCQlQTVVfTVNHKCgiVW5zcGVjaWZpZWQgeHRhbCBmcmVxdWVuY3ksIHNraXAgUExMIGNvbmZpZ3VyYXRpb25cbiIpKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIEZpbmQgdGhlIGZyZXF1ZW5jeSBpbiB0aGUgdGFibGUgKi8KLQlmb3IgKHh0ID0gc2lfcG11MV94dGFsdGFiMChzaWgpOyB4dCAhPSBOVUxMICYmIHh0LT5mcmVmICE9IDA7IHh0KyspCi0JCWlmICh4dC0+ZnJlZiA9PSB4dGFsKQotCQkJYnJlYWs7Ci0KLQkvKiBDaGVjayBjdXJyZW50IFBMTCBzdGF0ZSwgYmFpbCBvdXQgaWYgaXQgaGFzIGJlZW4gcHJvZ3JhbW1lZCBvcgotCSAqIHdlIGRvbid0IGtub3cgaG93IHRvIHByb2dyYW0gaXQuCi0JICovCi0JaWYgKHh0ID09IE5VTEwgfHwgeHQtPmZyZWYgPT0gMCkgewotCQlQTVVfTVNHKCgiVW5zdXBwb3J0ZWQgeHRhbCBmcmVxdWVuY3kgJWQuJWQgTUh6LCBza2lwIFBMTCBjb25maWd1cmF0aW9uXG4iLCB4dGFsIC8gMTAwMCwgeHRhbCAlIDEwMDApKTsKLQkJcmV0dXJuOwotCX0KLQkvKiAgZm9yIDQzMTkgYm9vdGxvYWRlciBhbHJlYWR5IHByb2dyYW1zIHRoZSBQTEwgYnV0IGJvb3Rsb2FkZXIgZG9lcyBub3QgcHJvZ3JhbSB0aGUKLQkgICBQTEw0IGFuZCBQTEw1LiBTbyBTa2lwIHRoaXMgY2hlY2sgZm9yIDQzMTkKLQkgKi8KLQlpZiAoKCgoUl9SRUcoJmNjLT5wbXVjb250cm9sKSAmIFBDVExfWFRBTEZSRVFfTUFTSykgPj4KLQkgICAgICBQQ1RMX1hUQUxGUkVRX1NISUZUKSA9PSB4dC0+eGYpICYmCi0JICAgICEoKHNpaC0+Y2hpcCA9PSBCQ000MzE5X0NISVBfSUQpCi0JICAgICAgfHwgKHNpaC0+Y2hpcCA9PSBCQ000MzMwX0NISVBfSUQpKSkgewotCQlQTVVfTVNHKCgiUExMIGFscmVhZHkgcHJvZ3JhbW1lZCBmb3IgJWQuJWQgTUh6XG4iLAotCQkJIHh0LT5mcmVmIC8gMTAwMCwgeHQtPmZyZWYgJSAxMDAwKSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlQTVVfTVNHKCgiWFRBTCAlZC4lZCBNSHogKCVkKVxuIiwgeHRhbCAvIDEwMDAsIHh0YWwgJSAxMDAwLCB4dC0+eGYpKTsKLQlQTVVfTVNHKCgiUHJvZ3JhbW1pbmcgUExMIGZvciAlZC4lZCBNSHpcbiIsIHh0LT5mcmVmIC8gMTAwMCwKLQkJIHh0LT5mcmVmICUgMTAwMCkpOwotCi0Jc3dpdGNoIChzaWgtPmNoaXApIHsKLQljYXNlIEJDTTQzMjlfQ0hJUF9JRDoKLQkJLyogQ2hhbmdlIHRoZSBCQlBMTCBkcml2ZSBzdHJlbmd0aCB0byA4IGZvciBhbGwgY2hhbm5lbHMgKi8KLQkJYnVmX3N0cmVuZ3RoID0gMHg4ODg4ODg7Ci0JCUFORF9SRUcoJmNjLT5taW5fcmVzX21hc2ssCi0JCQl+KFBNVVJFU19CSVQoUkVTNDMyOV9CQlBMTF9QV1JTV19QVSkgfAotCQkJICBQTVVSRVNfQklUKFJFUzQzMjlfSFRfQVZBSUwpKSk7Ci0JCUFORF9SRUcoJmNjLT5tYXhfcmVzX21hc2ssCi0JCQl+KFBNVVJFU19CSVQoUkVTNDMyOV9CQlBMTF9QV1JTV19QVSkgfAotCQkJICBQTVVSRVNfQklUKFJFUzQzMjlfSFRfQVZBSUwpKSk7Ci0JCVNQSU5XQUlUKFJfUkVHKCZjYy0+Y2xrX2N0bF9zdCkgJiBDQ1NfSFRBVkFJTCwKLQkJCSBQTVVfTUFYX1RSQU5TSVRJT05fRExZKTsKLQkJQVNTRVJUKCEoUl9SRUcoJmNjLT5jbGtfY3RsX3N0KSAmIENDU19IVEFWQUlMKSk7Ci0JCVdfUkVHKCZjYy0+cGxsY29udHJvbF9hZGRyLCBQTVUxX1BMTDBfUExMQ1RMNCk7Ci0JCWlmICh4dC0+ZnJlZiA9PSAzODQwMCkKLQkJCXRtcCA9IDB4MjAwMDI0QzA7Ci0JCWVsc2UgaWYgKHh0LT5mcmVmID09IDM3NDAwKQotCQkJdG1wID0gMHgyMDAwNDUwMDsKLQkJZWxzZSBpZiAoeHQtPmZyZWYgPT0gMjYwMDApCi0JCQl0bXAgPSAweDIwMDAyNEMwOwotCQllbHNlCi0JCQl0bXAgPSAweDIwMDAwNUMwOwkvKiBDaGlwIERmbHQgU2V0dGluZ3MgKi8KLQkJV19SRUcoJmNjLT5wbGxjb250cm9sX2RhdGEsIHRtcCk7Ci0JCVdfUkVHKCZjYy0+cGxsY29udHJvbF9hZGRyLCBQTVUxX1BMTDBfUExMQ1RMNSk7Ci0JCXRtcCA9Ci0JCSAgICBSX1JFRygmY2MtPnBsbGNvbnRyb2xfZGF0YSkgJiBQTVUxX1BMTDBfUEM1X0NMS19EUlZfTUFTSzsKLQkJaWYgKCh4dC0+ZnJlZiA9PSAzODQwMCkgfHwgKHh0LT5mcmVmID09IDM3NDAwKQotCQkgICAgfHwgKHh0LT5mcmVmID09IDI2MDAwKSkKLQkJCXRtcCB8PSAweDE1OwotCQllbHNlCi0JCQl0bXAgfD0gMHgyNTsJLyogQ2hpcCBEZmx0IFNldHRpbmdzICovCi0JCVdfUkVHKCZjYy0+cGxsY29udHJvbF9kYXRhLCB0bXApOwotCQlicmVhazsKLQotCWNhc2UgQkNNNDMxOV9DSElQX0lEOgotCQkvKiBDaGFuZ2UgdGhlIEJCUExMIGRyaXZlIHN0cmVuZ3RoIHRvIDIgZm9yIGFsbCBjaGFubmVscyAqLwotCQlidWZfc3RyZW5ndGggPSAweDIyMjIyMjsKLQotCQkvKiBNYWtlIHN1cmUgdGhlIFBMTCBpcyBvZmYgKi8KLQkJLyogV0FSNjUxMDQ6IERpc2FibGUgdGhlIEhUX0FWQUlMIHJlc291cmNlIGZpcnN0IGFuZCB0aGVuCi0JCSAqIGFmdGVyIGEgZGVsYXkgKG1vcmUgdGhhbiBkb3dudGltZSBmb3IgSFRfQVZBSUwpIHJlbW92ZSB0aGUKLQkJICogQkJQTEwgcmVzb3VyY2U7IGJhY2twbGFuZSBjbG9jayBtb3ZlcyB0byBBTFAgZnJvbSBIVC4KLQkJICovCi0JCUFORF9SRUcoJmNjLT5taW5fcmVzX21hc2ssCi0JCQl+KFBNVVJFU19CSVQoUkVTNDMxOV9IVF9BVkFJTCkpKTsKLQkJQU5EX1JFRygmY2MtPm1heF9yZXNfbWFzaywKLQkJCX4oUE1VUkVTX0JJVChSRVM0MzE5X0hUX0FWQUlMKSkpOwotCi0JCXVkZWxheSgxMDApOwotCQlBTkRfUkVHKCZjYy0+bWluX3Jlc19tYXNrLAotCQkJfihQTVVSRVNfQklUKFJFUzQzMTlfQkJQTExfUFdSU1dfUFUpKSk7Ci0JCUFORF9SRUcoJmNjLT5tYXhfcmVzX21hc2ssCi0JCQl+KFBNVVJFU19CSVQoUkVTNDMxOV9CQlBMTF9QV1JTV19QVSkpKTsKLQotCQl1ZGVsYXkoMTAwKTsKLQkJU1BJTldBSVQoUl9SRUcoJmNjLT5jbGtfY3RsX3N0KSAmIENDU19IVEFWQUlMLAotCQkJIFBNVV9NQVhfVFJBTlNJVElPTl9ETFkpOwotCQlBU1NFUlQoIShSX1JFRygmY2MtPmNsa19jdGxfc3QpICYgQ0NTX0hUQVZBSUwpKTsKLQkJV19SRUcoJmNjLT5wbGxjb250cm9sX2FkZHIsIFBNVTFfUExMMF9QTExDVEw0KTsKLQkJdG1wID0gMHgyMDAwMDVjMDsKLQkJV19SRUcoJmNjLT5wbGxjb250cm9sX2RhdGEsIHRtcCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBCQ000MzM2X0NISVBfSUQ6Ci0JCUFORF9SRUcoJmNjLT5taW5fcmVzX21hc2ssCi0JCQl+KFBNVVJFU19CSVQoUkVTNDMzNl9IVF9BVkFJTCkgfAotCQkJICBQTVVSRVNfQklUKFJFUzQzMzZfTUFDUEhZX0NMS0FWQUlMKSkpOwotCQlBTkRfUkVHKCZjYy0+bWF4X3Jlc19tYXNrLAotCQkJfihQTVVSRVNfQklUKFJFUzQzMzZfSFRfQVZBSUwpIHwKLQkJCSAgUE1VUkVTX0JJVChSRVM0MzM2X01BQ1BIWV9DTEtBVkFJTCkpKTsKLQkJdWRlbGF5KDEwMCk7Ci0JCVNQSU5XQUlUKFJfUkVHKCZjYy0+Y2xrX2N0bF9zdCkgJiBDQ1NfSFRBVkFJTCwKLQkJCSBQTVVfTUFYX1RSQU5TSVRJT05fRExZKTsKLQkJQVNTRVJUKCEoUl9SRUcoJmNjLT5jbGtfY3RsX3N0KSAmIENDU19IVEFWQUlMKSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBCQ000MzMwX0NISVBfSUQ6Ci0JCUFORF9SRUcoJmNjLT5taW5fcmVzX21hc2ssCi0JCQl+KFBNVVJFU19CSVQoUkVTNDMzMF9IVF9BVkFJTCkgfAotCQkJICBQTVVSRVNfQklUKFJFUzQzMzBfTUFDUEhZX0NMS0FWQUlMKSkpOwotCQlBTkRfUkVHKCZjYy0+bWF4X3Jlc19tYXNrLAotCQkJfihQTVVSRVNfQklUKFJFUzQzMzBfSFRfQVZBSUwpIHwKLQkJCSAgUE1VUkVTX0JJVChSRVM0MzMwX01BQ1BIWV9DTEtBVkFJTCkpKTsKLQkJdWRlbGF5KDEwMCk7Ci0JCVNQSU5XQUlUKFJfUkVHKCZjYy0+Y2xrX2N0bF9zdCkgJiBDQ1NfSFRBVkFJTCwKLQkJCSBQTVVfTUFYX1RSQU5TSVRJT05fRExZKTsKLQkJQVNTRVJUKCEoUl9SRUcoJmNjLT5jbGtfY3RsX3N0KSAmIENDU19IVEFWQUlMKSk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJQVNTRVJUKDApOwotCX0KLQotCVBNVV9NU0coKCJEb25lIG1hc2tpbmdcbiIpKTsKLQotCS8qIFdyaXRlIHAxZGl2IGFuZCBwMmRpdiB0byBwbGxjb250cm9sWzBdICovCi0JV19SRUcoJmNjLT5wbGxjb250cm9sX2FkZHIsIFBNVTFfUExMMF9QTExDVEwwKTsKLQl0bXAgPSBSX1JFRygmY2MtPnBsbGNvbnRyb2xfZGF0YSkgJgotCSAgICB+KFBNVTFfUExMMF9QQzBfUDFESVZfTUFTSyB8IFBNVTFfUExMMF9QQzBfUDJESVZfTUFTSyk7Ci0JdG1wIHw9Ci0JICAgICgoeHQtPgotCSAgICAgIHAxZGl2IDw8IFBNVTFfUExMMF9QQzBfUDFESVZfU0hJRlQpICYgUE1VMV9QTEwwX1BDMF9QMURJVl9NQVNLKSB8Ci0JICAgICgoeHQtPgotCSAgICAgIHAyZGl2IDw8IFBNVTFfUExMMF9QQzBfUDJESVZfU0hJRlQpICYgUE1VMV9QTEwwX1BDMF9QMkRJVl9NQVNLKTsKLQlXX1JFRygmY2MtPnBsbGNvbnRyb2xfZGF0YSwgdG1wKTsKLQotCWlmICgoc2loLT5jaGlwID09IEJDTTQzMzBfQ0hJUF9JRCkpCi0JCXNpX3BtdV9zZXRfNDMzMF9wbGxkaXZzKHNpaCk7Ci0KLQlpZiAoKHNpaC0+Y2hpcCA9PSBCQ000MzI5X0NISVBfSUQpCi0JICAgICYmIChzaWgtPmNoaXByZXYgPT0gMCkpIHsKLQotCQlXX1JFRygmY2MtPnBsbGNvbnRyb2xfYWRkciwgUE1VMV9QTEwwX1BMTENUTDEpOwotCQl0bXAgPSBSX1JFRygmY2MtPnBsbGNvbnRyb2xfZGF0YSk7Ci0JCXRtcCA9IHRtcCAmICh+RE9UMTFNQUNfODgwTUhaX0NMS19ESVZJU09SX01BU0spOwotCQl0bXAgPSB0bXAgfCBET1QxMU1BQ184ODBNSFpfQ0xLX0RJVklTT1JfVkFMOwotCQlXX1JFRygmY2MtPnBsbGNvbnRyb2xfZGF0YSwgdG1wKTsKLQl9Ci0JaWYgKChzaWgtPmNoaXAgPT0gQkNNNDMxOV9DSElQX0lEKSB8fAotCSAgICAoc2loLT5jaGlwID09IEJDTTQzMzZfQ0hJUF9JRCkgfHwKLQkgICAgKHNpaC0+Y2hpcCA9PSBCQ000MzMwX0NISVBfSUQpKQotCQluZGl2X21vZGUgPSBQTVUxX1BMTDBfUEMyX05ESVZfTU9ERV9NRkI7Ci0JZWxzZQotCQluZGl2X21vZGUgPSBQTVUxX1BMTDBfUEMyX05ESVZfTU9ERV9NQVNIOwotCi0JLyogV3JpdGUgbmRpdl9pbnQgYW5kIG5kaXZfbW9kZSB0byBwbGxjb250cm9sWzJdICovCi0JV19SRUcoJmNjLT5wbGxjb250cm9sX2FkZHIsIFBNVTFfUExMMF9QTExDVEwyKTsKLQl0bXAgPSBSX1JFRygmY2MtPnBsbGNvbnRyb2xfZGF0YSkgJgotCSAgICB+KFBNVTFfUExMMF9QQzJfTkRJVl9JTlRfTUFTSyB8IFBNVTFfUExMMF9QQzJfTkRJVl9NT0RFX01BU0spOwotCXRtcCB8PQotCSAgICAoKHh0LT4KLQkgICAgICBuZGl2X2ludCA8PCBQTVUxX1BMTDBfUEMyX05ESVZfSU5UX1NISUZUKSAmCi0JICAgICBQTVUxX1BMTDBfUEMyX05ESVZfSU5UX01BU0spIHwgKChuZGl2X21vZGUgPDwKLQkJCQkJICAgICAgUE1VMV9QTEwwX1BDMl9ORElWX01PREVfU0hJRlQpICYKLQkJCQkJICAgICBQTVUxX1BMTDBfUEMyX05ESVZfTU9ERV9NQVNLKTsKLQlXX1JFRygmY2MtPnBsbGNvbnRyb2xfZGF0YSwgdG1wKTsKLQotCS8qIFdyaXRlIG5kaXZfZnJhYyB0byBwbGxjb250cm9sWzNdICovCi0JV19SRUcoJmNjLT5wbGxjb250cm9sX2FkZHIsIFBNVTFfUExMMF9QTExDVEwzKTsKLQl0bXAgPSBSX1JFRygmY2MtPnBsbGNvbnRyb2xfZGF0YSkgJiB+UE1VMV9QTEwwX1BDM19ORElWX0ZSQUNfTUFTSzsKLQl0bXAgfD0gKCh4dC0+bmRpdl9mcmFjIDw8IFBNVTFfUExMMF9QQzNfTkRJVl9GUkFDX1NISUZUKSAmCi0JCVBNVTFfUExMMF9QQzNfTkRJVl9GUkFDX01BU0spOwotCVdfUkVHKCZjYy0+cGxsY29udHJvbF9kYXRhLCB0bXApOwotCi0JLyogV3JpdGUgY2xvY2sgZHJpdmluZyBzdHJlbmd0aCB0byBwbGxjb250cm9sWzVdICovCi0JaWYgKGJ1Zl9zdHJlbmd0aCkgewotCQlQTVVfTVNHKCgiQWRqdXN0aW5nIFBMTCBidWZmZXIgZHJpdmUgc3RyZW5ndGg6ICV4XG4iLAotCQkJIGJ1Zl9zdHJlbmd0aCkpOwotCi0JCVdfUkVHKCZjYy0+cGxsY29udHJvbF9hZGRyLCBQTVUxX1BMTDBfUExMQ1RMNSk7Ci0JCXRtcCA9Ci0JCSAgICBSX1JFRygmY2MtPnBsbGNvbnRyb2xfZGF0YSkgJiB+UE1VMV9QTEwwX1BDNV9DTEtfRFJWX01BU0s7Ci0JCXRtcCB8PSAoYnVmX3N0cmVuZ3RoIDw8IFBNVTFfUExMMF9QQzVfQ0xLX0RSVl9TSElGVCk7Ci0JCVdfUkVHKCZjYy0+cGxsY29udHJvbF9kYXRhLCB0bXApOwotCX0KLQotCVBNVV9NU0coKCJEb25lIHBsbFxuIikpOwotCi0JLyogdG8gb3BlcmF0ZSB0aGUgNDMxOSB1c2IgaW4gMjRNSHovNDhNSHo7IGNoaXBjb250cm9sWzJdWzg0OjgzXSBuZWVkcwotCSAqIHRvIGJlIHVwZGF0ZWQuCi0JICovCi0JaWYgKChzaWgtPmNoaXAgPT0gQkNNNDMxOV9DSElQX0lEKQotCSAgICAmJiAoeHQtPmZyZWYgIT0gWFRBTF9GUkVRXzMwMDAwTUhaKSkgewotCQlXX1JFRygmY2MtPmNoaXBjb250cm9sX2FkZHIsIFBNVTFfUExMMF9DSElQQ1RMMik7Ci0JCXRtcCA9Ci0JCSAgICBSX1JFRygmY2MtPmNoaXBjb250cm9sX2RhdGEpICYgfkNDVExfNDMxOVVTQl9YVEFMX1NFTF9NQVNLOwotCQlpZiAoeHQtPmZyZWYgPT0gWFRBTF9GUkVRXzI0MDAwTUhaKSB7Ci0JCQl0bXAgfD0KLQkJCSAgICAoQ0NUTF80MzE5VVNCXzI0TUhaX1BMTF9TRUwgPDwKLQkJCSAgICAgQ0NUTF80MzE5VVNCX1hUQUxfU0VMX1NISUZUKTsKLQkJfSBlbHNlIGlmICh4dC0+ZnJlZiA9PSBYVEFMX0ZSRVFfNDgwMDBNSFopIHsKLQkJCXRtcCB8PQotCQkJICAgIChDQ1RMXzQzMTlVU0JfNDhNSFpfUExMX1NFTCA8PAotCQkJICAgICBDQ1RMXzQzMTlVU0JfWFRBTF9TRUxfU0hJRlQpOwotCQl9Ci0JCVdfUkVHKCZjYy0+Y2hpcGNvbnRyb2xfZGF0YSwgdG1wKTsKLQl9Ci0KLQkvKiBGbHVzaCBkZWZlcnJlZCBwbGwgY29udHJvbCByZWdpc3RlcnMgd3JpdGVzICovCi0JaWYgKHNpaC0+cG11cmV2ID49IDIpCi0JCU9SX1JFRygmY2MtPnBtdWNvbnRyb2wsIFBDVExfUExMX1BMTENUTF9VUEQpOwotCi0JLyogV3JpdGUgWHRhbEZyZXEuIFNldCB0aGUgZGl2aXNvciBhbHNvLiAqLwotCXRtcCA9IFJfUkVHKCZjYy0+cG11Y29udHJvbCkgJgotCSAgICB+KFBDVExfSUxQX0RJVl9NQVNLIHwgUENUTF9YVEFMRlJFUV9NQVNLKTsKLQl0bXAgfD0gKCgoKCh4dC0+ZnJlZiArIDEyNykgLyAxMjgpIC0gMSkgPDwgUENUTF9JTFBfRElWX1NISUZUKSAmCi0JCVBDVExfSUxQX0RJVl9NQVNLKSB8Ci0JICAgICgoeHQtPnhmIDw8IFBDVExfWFRBTEZSRVFfU0hJRlQpICYgUENUTF9YVEFMRlJFUV9NQVNLKTsKLQotCWlmICgoc2loLT5jaGlwID09IEJDTTQzMjlfQ0hJUF9JRCkKLQkgICAgJiYgc2loLT5jaGlwcmV2ID09IDApIHsKLQkJLyogY2xlYXIgdGhlIGh0c3RyZXRjaCBiZWZvcmUgY2xlYXJpbmcgSFRSZXFFbiAqLwotCQlBTkRfUkVHKCZjYy0+Y2xrc3RyZXRjaCwgfkNTVFJFVENIX0hUKTsKLQkJdG1wICY9IH5QQ1RMX0hUX1JFUV9FTjsKLQl9Ci0KLQlXX1JFRygmY2MtPnBtdWNvbnRyb2wsIHRtcCk7Ci19Ci0KLS8qIHF1ZXJ5IHRoZSBDUFUgY2xvY2sgZnJlcXVlbmN5ICovCi1zdGF0aWMgdTMyCi1zaV9wbXUxX2NwdWNsazAoc2lfdCAqc2loLCBjaGlwY3JlZ3NfdCAqY2MpCi17Ci0JdTMyIHRtcCwgbTFkaXY7Ci0jaWZkZWYgQkNNREJHCi0JdTMyIG5kaXZfaW50LCBuZGl2X2ZyYWMsIHAyZGl2LCBwMWRpdiwgZnZjbzsKLQl1MzIgZnJlZjsKLSNlbmRpZgotCXUzMiBGVkNPID0gc2lfcG11MV9wbGxmdmNvMChzaWgpOwotCi0JLyogUmVhZCBtMWRpdiBmcm9tIHBsbGNvbnRyb2xbMV0gKi8KLQlXX1JFRygmY2MtPnBsbGNvbnRyb2xfYWRkciwgUE1VMV9QTEwwX1BMTENUTDEpOwotCXRtcCA9IFJfUkVHKCZjYy0+cGxsY29udHJvbF9kYXRhKTsKLQltMWRpdiA9ICh0bXAgJiBQTVUxX1BMTDBfUEMxX00xRElWX01BU0spID4+IFBNVTFfUExMMF9QQzFfTTFESVZfU0hJRlQ7Ci0KLSNpZmRlZiBCQ01EQkcKLQkvKiBSZWFkIHAyZGl2L3AxZGl2IGZyb20gcGxsY29udHJvbFswXSAqLwotCVdfUkVHKCZjYy0+cGxsY29udHJvbF9hZGRyLCBQTVUxX1BMTDBfUExMQ1RMMCk7Ci0JdG1wID0gUl9SRUcoJmNjLT5wbGxjb250cm9sX2RhdGEpOwotCXAyZGl2ID0gKHRtcCAmIFBNVTFfUExMMF9QQzBfUDJESVZfTUFTSykgPj4gUE1VMV9QTEwwX1BDMF9QMkRJVl9TSElGVDsKLQlwMWRpdiA9ICh0bXAgJiBQTVUxX1BMTDBfUEMwX1AxRElWX01BU0spID4+IFBNVTFfUExMMF9QQzBfUDFESVZfU0hJRlQ7Ci0KLQkvKiBDYWxjdWxhdGUgZnZjbyBiYXNlZCBvbiB4dGFsIGZyZXEgYW5kIG5kaXYgYW5kIHBkaXYgKi8KLQlXX1JFRygmY2MtPnBsbGNvbnRyb2xfYWRkciwgUE1VMV9QTEwwX1BMTENUTDIpOwotCXRtcCA9IFJfUkVHKCZjYy0+cGxsY29udHJvbF9kYXRhKTsKLQluZGl2X2ludCA9Ci0JICAgICh0bXAgJiBQTVUxX1BMTDBfUEMyX05ESVZfSU5UX01BU0spID4+IFBNVTFfUExMMF9QQzJfTkRJVl9JTlRfU0hJRlQ7Ci0KLQlXX1JFRygmY2MtPnBsbGNvbnRyb2xfYWRkciwgUE1VMV9QTEwwX1BMTENUTDMpOwotCXRtcCA9IFJfUkVHKCZjYy0+cGxsY29udHJvbF9kYXRhKTsKLQluZGl2X2ZyYWMgPQotCSAgICAodG1wICYgUE1VMV9QTEwwX1BDM19ORElWX0ZSQUNfTUFTSykgPj4KLQkgICAgUE1VMV9QTEwwX1BDM19ORElWX0ZSQUNfU0hJRlQ7Ci0KLQlmcmVmID0gc2lfcG11MV9hbHBjbGswKHNpaCwgY2MpIC8gMTAwMDsKLQotCWZ2Y28gPSAoZnJlZiAqIG5kaXZfaW50KSA8PCA4OwotCWZ2Y28gKz0gKGZyZWYgKiAobmRpdl9mcmFjID4+IDEyKSkgPj4gNDsKLQlmdmNvICs9IChmcmVmICogKG5kaXZfZnJhYyAmIDB4ZmZmKSkgPj4gMTI7Ci0JZnZjbyA+Pj0gODsKLQlmdmNvICo9IHAyZGl2OwotCWZ2Y28gLz0gcDFkaXY7Ci0JZnZjbyAvPSAxMDAwOwotCWZ2Y28gKj0gMTAwMDsKLQotCVBNVV9NU0coKCJzaV9wbXUxX2NwdWNsazA6IG5kaXZfaW50ICV1IG5kaXZfZnJhYyAldSBwMmRpdiAldSBwMWRpdiAldSBmdmNvICV1XG4iLCBuZGl2X2ludCwgbmRpdl9mcmFjLCBwMmRpdiwgcDFkaXYsIGZ2Y28pKTsKLQotCUZWQ08gPSBmdmNvOwotI2VuZGlmCQkJCS8qIEJDTURCRyAqLwotCi0JLyogUmV0dXJuIEFSTS9TQiBjbG9jayAqLwotCXJldHVybiBGVkNPIC8gbTFkaXYgKiAxMDAwOwotfQotCi0vKiBpbml0aWFsaXplIFBMTCAqLwotdm9pZCBzaV9wbXVfcGxsX2luaXQoc2lfdCAqc2loLCB1aW50IHh0YWxmcmVxKQotewotCWNoaXBjcmVnc190ICpjYzsKLQl1aW50IG9yaWdpZHg7Ci0jaWZkZWYgQkNNREJHCi0JY2hhciBjaG5bOF07Ci0jZW5kaWYKLQotCUFTU0VSVChzaWgtPmNjY2FwcyAmIENDX0NBUF9QTVUpOwotCi0JLyogUmVtZW1iZXIgb3JpZ2luYWwgY29yZSBiZWZvcmUgc3dpdGNoIHRvIGNoaXBjICovCi0Jb3JpZ2lkeCA9IHNpX2NvcmVpZHgoc2loKTsKLQljYyA9IHNpX3NldGNvcmVpZHgoc2loLCBTSV9DQ19JRFgpOwotCUFTU0VSVChjYyAhPSBOVUxMKTsKLQotCXN3aXRjaCAoc2loLT5jaGlwKSB7Ci0JY2FzZSBCQ000MzI5X0NISVBfSUQ6Ci0JCWlmICh4dGFsZnJlcSA9PSAwKQotCQkJeHRhbGZyZXEgPSAzODQwMDsKLQkJc2lfcG11MV9wbGxpbml0MChzaWgsIGNjLCB4dGFsZnJlcSk7Ci0JCWJyZWFrOwotCWNhc2UgQkNNNDMxM19DSElQX0lEOgotCWNhc2UgQkNNNDMyMjRfQ0hJUF9JRDoKLQljYXNlIEJDTTQzMjI1X0NISVBfSUQ6Ci0JY2FzZSBCQ000MzQyMV9DSElQX0lEOgotCWNhc2UgQkNNNDMyMzVfQ0hJUF9JRDoKLQljYXNlIEJDTTQzMjM2X0NISVBfSUQ6Ci0JY2FzZSBCQ000MzIzOF9DSElQX0lEOgotCWNhc2UgQkNNNDMzMV9DSElQX0lEOgotCWNhc2UgQkNNNjM2Ml9DSElQX0lEOgotCQkvKiA/Pz8gKi8KLQkJYnJlYWs7Ci0JY2FzZSBCQ000MzE5X0NISVBfSUQ6Ci0JY2FzZSBCQ000MzM2X0NISVBfSUQ6Ci0JY2FzZSBCQ000MzMwX0NISVBfSUQ6Ci0JCXNpX3BtdTFfcGxsaW5pdDAoc2loLCBjYywgeHRhbGZyZXEpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlQTVVfTVNHKCgiTm8gUExMIGluaXQgZG9uZSBmb3IgY2hpcCAlcyByZXYgJWQgcG11cmV2ICVkXG4iLAotCQkJIGJjbV9jaGlwbmFtZShzaWgtPmNoaXAsIGNobiwgOCksIHNpaC0+Y2hpcHJldiwKLQkJCSBzaWgtPnBtdXJldikpOwotCQlicmVhazsKLQl9Ci0KLSNpZmRlZiBCQ01EQkdfRk9SQ0VIVAotCU9SX1JFRygmY2MtPmNsa19jdGxfc3QsIENDU19GT1JDRUhUKTsKLSNlbmRpZgotCi0JLyogUmV0dXJuIHRvIG9yaWdpbmFsIGNvcmUgKi8KLQlzaV9zZXRjb3JlaWR4KHNpaCwgb3JpZ2lkeCk7Ci19Ci0KLS8qIHF1ZXJ5IGFscC94dGFsIGNsb2NrIGZyZXF1ZW5jeSAqLwotdTMyIHNpX3BtdV9hbHBfY2xvY2soc2lfdCAqc2loKQotewotCWNoaXBjcmVnc190ICpjYzsKLQl1aW50IG9yaWdpZHg7Ci0JdTMyIGNsb2NrID0gQUxQX0NMT0NLOwotI2lmZGVmIEJDTURCRwotCWNoYXIgY2huWzhdOwotI2VuZGlmCi0KLQlBU1NFUlQoc2loLT5jY2NhcHMgJiBDQ19DQVBfUE1VKTsKLQotCS8qIFJlbWVtYmVyIG9yaWdpbmFsIGNvcmUgYmVmb3JlIHN3aXRjaCB0byBjaGlwYyAqLwotCW9yaWdpZHggPSBzaV9jb3JlaWR4KHNpaCk7Ci0JY2MgPSBzaV9zZXRjb3JlaWR4KHNpaCwgU0lfQ0NfSURYKTsKLQlBU1NFUlQoY2MgIT0gTlVMTCk7Ci0KLQlzd2l0Y2ggKHNpaC0+Y2hpcCkgewotCWNhc2UgQkNNNDMyMjRfQ0hJUF9JRDoKLQljYXNlIEJDTTQzMjI1X0NISVBfSUQ6Ci0JY2FzZSBCQ000MzQyMV9DSElQX0lEOgotCWNhc2UgQkNNNDMyMzVfQ0hJUF9JRDoKLQljYXNlIEJDTTQzMjM2X0NISVBfSUQ6Ci0JY2FzZSBCQ000MzIzOF9DSElQX0lEOgotCWNhc2UgQkNNNDMzMV9DSElQX0lEOgotCWNhc2UgQkNNNjM2Ml9DSElQX0lEOgotCWNhc2UgQkNNNDcxNl9DSElQX0lEOgotCWNhc2UgQkNNNDc0OF9DSElQX0lEOgotCWNhc2UgQkNNNDcxNjJfQ0hJUF9JRDoKLQljYXNlIEJDTTQzMTNfQ0hJUF9JRDoKLQljYXNlIEJDTTUzNTdfQ0hJUF9JRDoKLQkJLyogYWx3YXlzIDIwTWh6ICovCi0JCWNsb2NrID0gMjAwMDAgKiAxMDAwOwotCQlicmVhazsKLQljYXNlIEJDTTQzMjlfQ0hJUF9JRDoKLQljYXNlIEJDTTQzMTlfQ0hJUF9JRDoKLQljYXNlIEJDTTQzMzZfQ0hJUF9JRDoKLQljYXNlIEJDTTQzMzBfQ0hJUF9JRDoKLQotCQljbG9jayA9IHNpX3BtdTFfYWxwY2xrMChzaWgsIGNjKTsKLQkJYnJlYWs7Ci0JY2FzZSBCQ001MzU2X0NISVBfSUQ6Ci0JCS8qIGFsd2F5cyAyNU1oeiAqLwotCQljbG9jayA9IDI1MDAwICogMTAwMDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJUE1VX01TRygoIk5vIEFMUCBjbG9jayBzcGVjaWZpZWQgIgotCQkJICJmb3IgY2hpcCAlcyByZXYgJWQgcG11cmV2ICVkLCB1c2luZyBkZWZhdWx0ICVkIEh6XG4iLAotCQkJIGJjbV9jaGlwbmFtZShzaWgtPmNoaXAsIGNobiwgOCksIHNpaC0+Y2hpcHJldiwKLQkJCSBzaWgtPnBtdXJldiwgY2xvY2spKTsKLQkJYnJlYWs7Ci0JfQotCi0JLyogUmV0dXJuIHRvIG9yaWdpbmFsIGNvcmUgKi8KLQlzaV9zZXRjb3JlaWR4KHNpaCwgb3JpZ2lkeCk7Ci0JcmV0dXJuIGNsb2NrOwotfQotCi0vKiBGaW5kIHRoZSBvdXRwdXQgb2YgdGhlICJtIiBwbGwgZGl2aWRlciBnaXZlbiBwbGwgY29udHJvbHMgdGhhdCBzdGFydCB3aXRoCi0gKiBwbGxyZWcgInBsbDAiIGkuZS4gMTIgZm9yIG1haW4gNiBmb3IgcGh5LCAwIGZvciBtaXNjLgotICovCi1zdGF0aWMgdTMyCi1zaV9wbXU1X2Nsb2NrKHNpX3QgKnNpaCwgY2hpcGNyZWdzX3QgKmNjLCB1aW50IHBsbDAsIHVpbnQgbSkgewotCXUzMiB0bXAsIGRpdiwgbmRpdiwgcDEsIHAyLCBmYzsKLQotCWlmICgocGxsMCAmIDMpIHx8IChwbGwwID4gUE1VNDcxNl9NQUlOUExMX1BMTDApKSB7Ci0JCVBNVV9FUlJPUigoIiVzOiBCYWQgcGxsMDogJWRcbiIsIF9fZnVuY19fLCBwbGwwKSk7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIFN0cmljdGx5IHRoZXJlIGlzIGFuIG01IGRpdmlkZXIsIGJ1dCBJJ20gbm90IHN1cmUgd2UgdXNlIGl0ICovCi0JaWYgKChtID09IDApIHx8IChtID4gNCkpIHsKLQkJUE1VX0VSUk9SKCgiJXM6IEJhZCBtIGRpdmlkZXI6ICVkXG4iLCBfX2Z1bmNfXywgbSkpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoc2loLT5jaGlwID09IEJDTTUzNTdfQ0hJUF9JRCkgewotCQkvKiBEZXRlY3QgZmFpbHVyZSBpbiBjbG9jayBzZXR0aW5nICovCi0JCWlmICgoUl9SRUcoJmNjLT5jaGlwc3RhdHVzKSAmIDB4NDAwMDApICE9IDApCi0JCQlyZXR1cm4gMTMzICogMTAwMDAwMDsKLQl9Ci0KLQlXX1JFRygmY2MtPnBsbGNvbnRyb2xfYWRkciwgcGxsMCArIFBNVTVfUExMX1AxUDJfT0ZGKTsKLQkodm9pZClSX1JFRygmY2MtPnBsbGNvbnRyb2xfYWRkcik7Ci0JdG1wID0gUl9SRUcoJmNjLT5wbGxjb250cm9sX2RhdGEpOwotCXAxID0gKHRtcCAmIFBNVTVfUExMX1AxX01BU0spID4+IFBNVTVfUExMX1AxX1NISUZUOwotCXAyID0gKHRtcCAmIFBNVTVfUExMX1AyX01BU0spID4+IFBNVTVfUExMX1AyX1NISUZUOwotCi0JV19SRUcoJmNjLT5wbGxjb250cm9sX2FkZHIsIHBsbDAgKyBQTVU1X1BMTF9NMTRfT0ZGKTsKLQkodm9pZClSX1JFRygmY2MtPnBsbGNvbnRyb2xfYWRkcik7Ci0JdG1wID0gUl9SRUcoJmNjLT5wbGxjb250cm9sX2RhdGEpOwotCWRpdiA9ICh0bXAgPj4gKChtIC0gMSkgKiBQTVU1X1BMTF9NRElWX1dJRFRIKSkgJiBQTVU1X1BMTF9NRElWX01BU0s7Ci0KLQlXX1JFRygmY2MtPnBsbGNvbnRyb2xfYWRkciwgcGxsMCArIFBNVTVfUExMX05NNV9PRkYpOwotCSh2b2lkKVJfUkVHKCZjYy0+cGxsY29udHJvbF9hZGRyKTsKLQl0bXAgPSBSX1JFRygmY2MtPnBsbGNvbnRyb2xfZGF0YSk7Ci0JbmRpdiA9ICh0bXAgJiBQTVU1X1BMTF9ORElWX01BU0spID4+IFBNVTVfUExMX05ESVZfU0hJRlQ7Ci0KLQkvKiBEbyBjYWxjdWxhdGlvbiBpbiBNaHogKi8KLQlmYyA9IHNpX3BtdV9hbHBfY2xvY2soc2loKSAvIDEwMDAwMDA7Ci0JZmMgPSAocDEgKiBuZGl2ICogZmMpIC8gcDI7Ci0KLQlQTVVfTk9ORSgoIiVzOiBwMT0lZCwgcDI9JWQsIG5kaXY9JWQoMHgleCksIG0lZD0lZDsgZmM9JWQsIGNsb2NrPSVkXG4iLAotCQkgIF9fZnVuY19fLCBwMSwgcDIsIG5kaXYsIG5kaXYsIG0sIGRpdiwgZmMsIGZjIC8gZGl2KSk7Ci0KLQkvKiBSZXR1cm4gY2xvY2sgaW4gSGVydHogKi8KLQlyZXR1cm4gKGZjIC8gZGl2KSAqIDEwMDAwMDA7Ci19Ci0KLS8qIHF1ZXJ5IGJhY2twbGFuZSBjbG9jayBmcmVxdWVuY3kgKi8KLS8qIEZvciBkZXNpZ25zIHRoYXQgZmVlZCB0aGUgc2FtZSBjbG9jayB0byBib3RoIGJhY2twbGFuZQotICogYW5kIENQVSBqdXN0IHJldHVybiB0aGUgQ1BVIGNsb2NrIHNwZWVkLgotICovCi11MzIgc2lfcG11X3NpX2Nsb2NrKHNpX3QgKnNpaCkKLXsKLQljaGlwY3JlZ3NfdCAqY2M7Ci0JdWludCBvcmlnaWR4OwotCXUzMiBjbG9jayA9IEhUX0NMT0NLOwotI2lmZGVmIEJDTURCRwotCWNoYXIgY2huWzhdOwotI2VuZGlmCi0KLQlBU1NFUlQoc2loLT5jY2NhcHMgJiBDQ19DQVBfUE1VKTsKLQotCS8qIFJlbWVtYmVyIG9yaWdpbmFsIGNvcmUgYmVmb3JlIHN3aXRjaCB0byBjaGlwYyAqLwotCW9yaWdpZHggPSBzaV9jb3JlaWR4KHNpaCk7Ci0JY2MgPSBzaV9zZXRjb3JlaWR4KHNpaCwgU0lfQ0NfSURYKTsKLQlBU1NFUlQoY2MgIT0gTlVMTCk7Ci0KLQlzd2l0Y2ggKHNpaC0+Y2hpcCkgewotCWNhc2UgQkNNNDMyMjRfQ0hJUF9JRDoKLQljYXNlIEJDTTQzMjI1X0NISVBfSUQ6Ci0JY2FzZSBCQ000MzQyMV9DSElQX0lEOgotCWNhc2UgQkNNNDMzMV9DSElQX0lEOgotCWNhc2UgQkNNNjM2Ml9DSElQX0lEOgotCQkvKiA5Nk1IeiBiYWNrcGxhbmUgY2xvY2sgKi8KLQkJY2xvY2sgPSA5NjAwMCAqIDEwMDA7Ci0JCWJyZWFrOwotCWNhc2UgQkNNNDcxNl9DSElQX0lEOgotCWNhc2UgQkNNNDc0OF9DSElQX0lEOgotCWNhc2UgQkNNNDcxNjJfQ0hJUF9JRDoKLQkJY2xvY2sgPQotCQkgICAgc2lfcG11NV9jbG9jayhzaWgsIGNjLCBQTVU0NzE2X01BSU5QTExfUExMMCwKLQkJCQkgIFBNVTVfTUFJTlBMTF9TSSk7Ci0JCWJyZWFrOwotCWNhc2UgQkNNNDMyOV9DSElQX0lEOgotCQlpZiAoc2loLT5jaGlwcmV2ID09IDApCi0JCQljbG9jayA9IDM4NDAwICogMTAwMDsKLQkJZWxzZQotCQkJY2xvY2sgPSBzaV9wbXUxX2NwdWNsazAoc2loLCBjYyk7Ci0JCWJyZWFrOwotCWNhc2UgQkNNNDMxOV9DSElQX0lEOgotCWNhc2UgQkNNNDMzNl9DSElQX0lEOgotCWNhc2UgQkNNNDMzMF9DSElQX0lEOgotCQljbG9jayA9IHNpX3BtdTFfY3B1Y2xrMChzaWgsIGNjKTsKLQkJYnJlYWs7Ci0JY2FzZSBCQ000MzEzX0NISVBfSUQ6Ci0JCS8qIDgwTUh6IGJhY2twbGFuZSBjbG9jayAqLwotCQljbG9jayA9IDgwMDAwICogMTAwMDsKLQkJYnJlYWs7Ci0JY2FzZSBCQ000MzIzNV9DSElQX0lEOgotCWNhc2UgQkNNNDMyMzZfQ0hJUF9JRDoKLQljYXNlIEJDTTQzMjM4X0NISVBfSUQ6Ci0JCWNsb2NrID0KLQkJICAgIChjYy0+Y2hpcHN0YXR1cyAmIENTVDQzMjM2X0JQX0NMSykgPyAoMTIwMDAwICoKLQkJCQkJCQkgIDEwMDApIDogKDk2MDAwICoKLQkJCQkJCQkJICAgMTAwMCk7Ci0JCWJyZWFrOwotCWNhc2UgQkNNNTM1Nl9DSElQX0lEOgotCQljbG9jayA9Ci0JCSAgICBzaV9wbXU1X2Nsb2NrKHNpaCwgY2MsIFBNVTUzNTZfTUFJTlBMTF9QTEwwLAotCQkJCSAgUE1VNV9NQUlOUExMX1NJKTsKLQkJYnJlYWs7Ci0JY2FzZSBCQ001MzU3X0NISVBfSUQ6Ci0JCWNsb2NrID0KLQkJICAgIHNpX3BtdTVfY2xvY2soc2loLCBjYywgUE1VNTM1N19NQUlOUExMX1BMTDAsCi0JCQkJICBQTVU1X01BSU5QTExfU0kpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlQTVVfTVNHKCgiTm8gYmFja3BsYW5lIGNsb2NrIHNwZWNpZmllZCAiCi0JCQkgImZvciBjaGlwICVzIHJldiAlZCBwbXVyZXYgJWQsIHVzaW5nIGRlZmF1bHQgJWQgSHpcbiIsCi0JCQkgYmNtX2NoaXBuYW1lKHNpaC0+Y2hpcCwgY2huLCA4KSwgc2loLT5jaGlwcmV2LAotCQkJIHNpaC0+cG11cmV2LCBjbG9jaykpOwotCQlicmVhazsKLQl9Ci0KLQkvKiBSZXR1cm4gdG8gb3JpZ2luYWwgY29yZSAqLwotCXNpX3NldGNvcmVpZHgoc2loLCBvcmlnaWR4KTsKLQlyZXR1cm4gY2xvY2s7Ci19Ci0KLS8qIHF1ZXJ5IENQVSBjbG9jayBmcmVxdWVuY3kgKi8KLXUzMiBzaV9wbXVfY3B1X2Nsb2NrKHNpX3QgKnNpaCkKLXsKLQljaGlwY3JlZ3NfdCAqY2M7Ci0JdWludCBvcmlnaWR4OwotCXUzMiBjbG9jazsKLQotCUFTU0VSVChzaWgtPmNjY2FwcyAmIENDX0NBUF9QTVUpOwotCi0JaWYgKChzaWgtPnBtdXJldiA+PSA1KSAmJgotCSAgICAhKChzaWgtPmNoaXAgPT0gQkNNNDMyOV9DSElQX0lEKSB8fAotCSAgICAgIChzaWgtPmNoaXAgPT0gQkNNNDMxOV9DSElQX0lEKSB8fAotCSAgICAgIChzaWgtPmNoaXAgPT0gQkNNNDMyMzZfQ0hJUF9JRCkgfHwKLQkgICAgICAoc2loLT5jaGlwID09IEJDTTQzMzZfQ0hJUF9JRCkgfHwKLQkgICAgICAoc2loLT5jaGlwID09IEJDTTQzMzBfQ0hJUF9JRCkpKSB7Ci0JCXVpbnQgcGxsOwotCi0JCXN3aXRjaCAoc2loLT5jaGlwKSB7Ci0JCWNhc2UgQkNNNTM1Nl9DSElQX0lEOgotCQkJcGxsID0gUE1VNTM1Nl9NQUlOUExMX1BMTDA7Ci0JCQlicmVhazsKLQkJY2FzZSBCQ001MzU3X0NISVBfSUQ6Ci0JCQlwbGwgPSBQTVU1MzU3X01BSU5QTExfUExMMDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcGxsID0gUE1VNDcxNl9NQUlOUExMX1BMTDA7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIFJlbWVtYmVyIG9yaWdpbmFsIGNvcmUgYmVmb3JlIHN3aXRjaCB0byBjaGlwYyAqLwotCQlvcmlnaWR4ID0gc2lfY29yZWlkeChzaWgpOwotCQljYyA9IHNpX3NldGNvcmVpZHgoc2loLCBTSV9DQ19JRFgpOwotCQlBU1NFUlQoY2MgIT0gTlVMTCk7Ci0KLQkJY2xvY2sgPSBzaV9wbXU1X2Nsb2NrKHNpaCwgY2MsIHBsbCwgUE1VNV9NQUlOUExMX0NQVSk7Ci0KLQkJLyogUmV0dXJuIHRvIG9yaWdpbmFsIGNvcmUgKi8KLQkJc2lfc2V0Y29yZWlkeChzaWgsIG9yaWdpZHgpOwotCX0gZWxzZQotCQljbG9jayA9IHNpX3BtdV9zaV9jbG9jayhzaWgpOwotCi0JcmV0dXJuIGNsb2NrOwotfQotCi0vKiBxdWVyeSBtZW1vcnkgY2xvY2sgZnJlcXVlbmN5ICovCi11MzIgc2lfcG11X21lbV9jbG9jayhzaV90ICpzaWgpCi17Ci0JY2hpcGNyZWdzX3QgKmNjOwotCXVpbnQgb3JpZ2lkeDsKLQl1MzIgY2xvY2s7Ci0KLQlBU1NFUlQoc2loLT5jY2NhcHMgJiBDQ19DQVBfUE1VKTsKLQotCWlmICgoc2loLT5wbXVyZXYgPj0gNSkgJiYKLQkgICAgISgoc2loLT5jaGlwID09IEJDTTQzMjlfQ0hJUF9JRCkgfHwKLQkgICAgICAoc2loLT5jaGlwID09IEJDTTQzMTlfQ0hJUF9JRCkgfHwKLQkgICAgICAoc2loLT5jaGlwID09IEJDTTQzMzBfQ0hJUF9JRCkgfHwKLQkgICAgICAoc2loLT5jaGlwID09IEJDTTQzMzZfQ0hJUF9JRCkgfHwKLQkgICAgICAoc2loLT5jaGlwID09IEJDTTQzMjM2X0NISVBfSUQpKSkgewotCQl1aW50IHBsbDsKLQotCQlzd2l0Y2ggKHNpaC0+Y2hpcCkgewotCQljYXNlIEJDTTUzNTZfQ0hJUF9JRDoKLQkJCXBsbCA9IFBNVTUzNTZfTUFJTlBMTF9QTEwwOwotCQkJYnJlYWs7Ci0JCWNhc2UgQkNNNTM1N19DSElQX0lEOgotCQkJcGxsID0gUE1VNTM1N19NQUlOUExMX1BMTDA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXBsbCA9IFBNVTQ3MTZfTUFJTlBMTF9QTEwwOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBSZW1lbWJlciBvcmlnaW5hbCBjb3JlIGJlZm9yZSBzd2l0Y2ggdG8gY2hpcGMgKi8KLQkJb3JpZ2lkeCA9IHNpX2NvcmVpZHgoc2loKTsKLQkJY2MgPSBzaV9zZXRjb3JlaWR4KHNpaCwgU0lfQ0NfSURYKTsKLQkJQVNTRVJUKGNjICE9IE5VTEwpOwotCi0JCWNsb2NrID0gc2lfcG11NV9jbG9jayhzaWgsIGNjLCBwbGwsIFBNVTVfTUFJTlBMTF9NRU0pOwotCi0JCS8qIFJldHVybiB0byBvcmlnaW5hbCBjb3JlICovCi0JCXNpX3NldGNvcmVpZHgoc2loLCBvcmlnaWR4KTsKLQl9IGVsc2UgewotCQljbG9jayA9IHNpX3BtdV9zaV9jbG9jayhzaWgpOwotCX0KLQotCXJldHVybiBjbG9jazsKLX0KLQotLyogTWVhc3VyZSBJTFAgY2xvY2sgZnJlcXVlbmN5ICovCi0jZGVmaW5lIElMUF9DQUxDX0RVUgkxMAkvKiBtcywgbWFrZSBzdXJlIDEwMDAgY2FuIGJlIGRpdmlkZWQgYnkgaXQuICovCi0KLXN0YXRpYyB1MzIgaWxwY3ljbGVzX3Blcl9zZWM7Ci0KLXUzMiBzaV9wbXVfaWxwX2Nsb2NrKHNpX3QgKnNpaCkKLXsKLQlpZiAoSVNTSU1fRU5BQihzaWgpKQotCQlyZXR1cm4gSUxQX0NMT0NLOwotCi0JaWYgKGlscGN5Y2xlc19wZXJfc2VjID09IDApIHsKLQkJdTMyIHN0YXJ0LCBlbmQsIGRlbHRhOwotCQl1MzIgb3JpZ2lkeCA9IHNpX2NvcmVpZHgoc2loKTsKLQkJY2hpcGNyZWdzX3QgKmNjID0gc2lfc2V0Y29yZWlkeChzaWgsIFNJX0NDX0lEWCk7Ci0JCUFTU0VSVChjYyAhPSBOVUxMKTsKLQkJc3RhcnQgPSBSX1JFRygmY2MtPnBtdXRpbWVyKTsKLQkJbWRlbGF5KElMUF9DQUxDX0RVUik7Ci0JCWVuZCA9IFJfUkVHKCZjYy0+cG11dGltZXIpOwotCQlkZWx0YSA9IGVuZCAtIHN0YXJ0OwotCQlpbHBjeWNsZXNfcGVyX3NlYyA9IGRlbHRhICogKDEwMDAgLyBJTFBfQ0FMQ19EVVIpOwotCQlzaV9zZXRjb3JlaWR4KHNpaCwgb3JpZ2lkeCk7Ci0JfQotCi0JcmV0dXJuIGlscGN5Y2xlc19wZXJfc2VjOwotfQotCi0vKiBTRElPIFBhZCBkcml2ZSBzdHJlbmd0aCB0byBzZWxlY3QgdmFsdWUgbWFwcGluZ3MgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1OCBzdHJlbmd0aDsJCS8qIFBhZCBEcml2ZSBTdHJlbmd0aCBpbiBtQSAqLwotCXU4IHNlbDsJCS8qIENoaXAtc3BlY2lmaWMgc2VsZWN0IHZhbHVlICovCi19IHNkaW9kX2RyaXZlX3N0cl90OwotCi0vKiBTRElPIERyaXZlIFN0cmVuZ3RoIHRvIHNlbCB2YWx1ZSB0YWJsZSBmb3IgUE1VIFJldiAxICovCi1zdGF0aWMgY29uc3Qgc2Rpb2RfZHJpdmVfc3RyX3Qgc2Rpb2RfZHJpdmVfc3RyZW5ndGhfdGFiMVtdID0gewotCXsKLQk0LCAweDJ9LCB7Ci0JMiwgMHgzfSwgewotCTEsIDB4MH0sIHsKLQkwLCAweDB9Ci0JfTsKLQotLyogU0RJTyBEcml2ZSBTdHJlbmd0aCB0byBzZWwgdmFsdWUgdGFibGUgZm9yIFBNVSBSZXYgMiwgMyAqLwotc3RhdGljIGNvbnN0IHNkaW9kX2RyaXZlX3N0cl90IHNkaW9kX2RyaXZlX3N0cmVuZ3RoX3RhYjJbXSA9IHsKLQl7Ci0JMTIsIDB4N30sIHsKLQkxMCwgMHg2fSwgewotCTgsIDB4NX0sIHsKLQk2LCAweDR9LCB7Ci0JNCwgMHgyfSwgewotCTIsIDB4MX0sIHsKLQkwLCAweDB9Ci0JfTsKLQotLyogU0RJTyBEcml2ZSBTdHJlbmd0aCB0byBzZWwgdmFsdWUgdGFibGUgZm9yIFBNVSBSZXYgOCAoMS44VikgKi8KLXN0YXRpYyBjb25zdCBzZGlvZF9kcml2ZV9zdHJfdCBzZGlvZF9kcml2ZV9zdHJlbmd0aF90YWIzW10gPSB7Ci0JewotCTMyLCAweDd9LCB7Ci0JMjYsIDB4Nn0sIHsKLQkyMiwgMHg1fSwgewotCTE2LCAweDR9LCB7Ci0JMTIsIDB4M30sIHsKLQk4LCAweDJ9LCB7Ci0JNCwgMHgxfSwgewotCTAsIDB4MH0KLQl9OwotCi0jZGVmaW5lIFNESU9EX0RSVlNUUl9LRVkoY2hpcCwgcG11KQkoKChjaGlwKSA8PCAxNikgfCAocG11KSkKLQotdm9pZAotc2lfc2Rpb2RfZHJpdmVfc3RyZW5ndGhfaW5pdChzaV90ICpzaWgsIHUzMiBkcml2ZXN0cmVuZ3RoKSB7Ci0JY2hpcGNyZWdzX3QgKmNjOwotCXVpbnQgb3JpZ2lkeCwgaW50cl92YWwgPSAwOwotCXNkaW9kX2RyaXZlX3N0cl90ICpzdHJfdGFiID0gTlVMTDsKLQl1MzIgc3RyX21hc2sgPSAwOwotCXUzMiBzdHJfc2hpZnQgPSAwOwotI2lmZGVmIEJDTURCRwotCWNoYXIgY2huWzhdOwotI2VuZGlmCi0KLQlpZiAoIShzaWgtPmNjY2FwcyAmIENDX0NBUF9QTVUpKSB7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBSZW1lbWJlciBvcmlnaW5hbCBjb3JlIGJlZm9yZSBzd2l0Y2ggdG8gY2hpcGMgKi8KLQljYyA9IChjaGlwY3JlZ3NfdCAqKSBzaV9zd2l0Y2hfY29yZShzaWgsIENDX0NPUkVfSUQsICZvcmlnaWR4LAotCQkJCQkgICAgJmludHJfdmFsKTsKLQotCXN3aXRjaCAoU0RJT0RfRFJWU1RSX0tFWShzaWgtPmNoaXAsIHNpaC0+cG11cmV2KSkgewotCWNhc2UgU0RJT0RfRFJWU1RSX0tFWShCQ000MzI1X0NISVBfSUQsIDEpOgotCQlzdHJfdGFiID0gKHNkaW9kX2RyaXZlX3N0cl90ICopJnNkaW9kX2RyaXZlX3N0cmVuZ3RoX3RhYjE7Ci0JCXN0cl9tYXNrID0gMHgzMDAwMDAwMDsKLQkJc3RyX3NoaWZ0ID0gMjg7Ci0JCWJyZWFrOwotCWNhc2UgU0RJT0RfRFJWU1RSX0tFWShCQ000MzI1X0NISVBfSUQsIDIpOgotCWNhc2UgU0RJT0RfRFJWU1RSX0tFWShCQ000MzI1X0NISVBfSUQsIDMpOgotCQlzdHJfdGFiID0gKHNkaW9kX2RyaXZlX3N0cl90ICopJnNkaW9kX2RyaXZlX3N0cmVuZ3RoX3RhYjI7Ci0JCXN0cl9tYXNrID0gMHgwMDAwMzgwMDsKLQkJc3RyX3NoaWZ0ID0gMTE7Ci0JCWJyZWFrOwotCWNhc2UgU0RJT0RfRFJWU1RSX0tFWShCQ000MzM2X0NISVBfSUQsIDgpOgotCQlzdHJfdGFiID0gKHNkaW9kX2RyaXZlX3N0cl90ICopICZzZGlvZF9kcml2ZV9zdHJlbmd0aF90YWIzOwotCQlzdHJfbWFzayA9IDB4MDAwMDM4MDA7Ci0JCXN0cl9zaGlmdCA9IDExOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCVBNVV9NU0coKCJObyBTRElPIERyaXZlIHN0cmVuZ3RoIGluaXQgZG9uZSBmb3IgY2hpcCAlcyByZXYgJWQgcG11cmV2ICVkXG4iLCBiY21fY2hpcG5hbWUoc2loLT5jaGlwLCBjaG4sIDgpLCBzaWgtPmNoaXByZXYsIHNpaC0+cG11cmV2KSk7Ci0KLQkJYnJlYWs7Ci0JfQotCi0JaWYgKHN0cl90YWIgIT0gTlVMTCkgewotCQl1MzIgZHJpdmVzdHJlbmd0aF9zZWwgPSAwOwotCQl1MzIgY2NfZGF0YV90ZW1wOwotCQlpbnQgaTsKLQotCQlmb3IgKGkgPSAwOyBzdHJfdGFiW2ldLnN0cmVuZ3RoICE9IDA7IGkrKykgewotCQkJaWYgKGRyaXZlc3RyZW5ndGggPj0gc3RyX3RhYltpXS5zdHJlbmd0aCkgewotCQkJCWRyaXZlc3RyZW5ndGhfc2VsID0gc3RyX3RhYltpXS5zZWw7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlXX1JFRygmY2MtPmNoaXBjb250cm9sX2FkZHIsIDEpOwotCQljY19kYXRhX3RlbXAgPSBSX1JFRygmY2MtPmNoaXBjb250cm9sX2RhdGEpOwotCQljY19kYXRhX3RlbXAgJj0gfnN0cl9tYXNrOwotCQlkcml2ZXN0cmVuZ3RoX3NlbCA8PD0gc3RyX3NoaWZ0OwotCQljY19kYXRhX3RlbXAgfD0gZHJpdmVzdHJlbmd0aF9zZWw7Ci0JCVdfUkVHKCZjYy0+Y2hpcGNvbnRyb2xfZGF0YSwgY2NfZGF0YV90ZW1wKTsKLQotCQlQTVVfTVNHKCgiU0RJTzogJWRtQSBkcml2ZSBzdHJlbmd0aCBzZWxlY3RlZCwgc2V0IHRvIDB4JTA4eFxuIiwKLQkJCSBkcml2ZXN0cmVuZ3RoLCBjY19kYXRhX3RlbXApKTsKLQl9Ci0KLQkvKiBSZXR1cm4gdG8gb3JpZ2luYWwgY29yZSAqLwotCXNpX3Jlc3RvcmVfY29yZShzaWgsIG9yaWdpZHgsIGludHJfdmFsKTsKLX0KLQotLyogaW5pdGlhbGl6ZSBQTVUgKi8KLXZvaWQgc2lfcG11X2luaXQoc2lfdCAqc2loKQotewotCWNoaXBjcmVnc190ICpjYzsKLQl1aW50IG9yaWdpZHg7Ci0KLQlBU1NFUlQoc2loLT5jY2NhcHMgJiBDQ19DQVBfUE1VKTsKLQotCS8qIFJlbWVtYmVyIG9yaWdpbmFsIGNvcmUgYmVmb3JlIHN3aXRjaCB0byBjaGlwYyAqLwotCW9yaWdpZHggPSBzaV9jb3JlaWR4KHNpaCk7Ci0JY2MgPSBzaV9zZXRjb3JlaWR4KHNpaCwgU0lfQ0NfSURYKTsKLQlBU1NFUlQoY2MgIT0gTlVMTCk7Ci0KLQlpZiAoc2loLT5wbXVyZXYgPT0gMSkKLQkJQU5EX1JFRygmY2MtPnBtdWNvbnRyb2wsIH5QQ1RMX05PSUxQX09OX1dBSVQpOwotCWVsc2UgaWYgKHNpaC0+cG11cmV2ID49IDIpCi0JCU9SX1JFRygmY2MtPnBtdWNvbnRyb2wsIFBDVExfTk9JTFBfT05fV0FJVCk7Ci0KLQlpZiAoKHNpaC0+Y2hpcCA9PSBCQ000MzI5X0NISVBfSUQpICYmIChzaWgtPmNoaXByZXYgPT0gMikpIHsKLQkJLyogRml4IGZvciA0MzI5YjAgYmFkIExQT00gc3RhdGUuICovCi0JCVdfUkVHKCZjYy0+cmVnY29udHJvbF9hZGRyLCAyKTsKLQkJT1JfUkVHKCZjYy0+cmVnY29udHJvbF9kYXRhLCAweDEwMCk7Ci0KLQkJV19SRUcoJmNjLT5yZWdjb250cm9sX2FkZHIsIDMpOwotCQlPUl9SRUcoJmNjLT5yZWdjb250cm9sX2RhdGEsIDB4NCk7Ci0JfQotCi0JLyogUmV0dXJuIHRvIG9yaWdpbmFsIGNvcmUgKi8KLQlzaV9zZXRjb3JlaWR4KHNpaCwgb3JpZ2lkeCk7Ci19Ci0KIC8qIFJldHVybiB1cCB0aW1lIGluIElMUCBjeWNsZXMgZm9yIHRoZSBnaXZlbiByZXNvdXJjZS4gKi8KIHN0YXRpYyB1aW50CiBzaV9wbXVfcmVzX3VwdGltZShzaV90ICpzaWgsIGNoaXBjcmVnc190ICpjYywgdTggcnNyYykgewpAQCAtMjAzMiwyMTggKzY2Nyw5IEBACiAJCQlkbWF4ID0gZHVwOwogCX0KIAotCVBNVV9NU0coKCJzaV9wbXVfcmVzX3VwdGltZTogcnNyYyAldSB1cHRpbWUgJXUoZGVwcyAweCUwOHggdXB0aW1lICV1KVxuIiwgcnNyYywgdXAsIGRlcHMsIGRtYXgpKTsKLQogCXJldHVybiB1cCArIGRtYXggKyBQTVVSRVNfVVBfVFJBTlNJVElPTjsKIH0KIAotLyogUmV0dXJuIGRlcGVuZGFuY2llcyAoZGlyZWN0IG9yIGFsbC9pbmRpcmVjdCkgZm9yIHRoZSBnaXZlbiByZXNvdXJjZXMgKi8KLXN0YXRpYyB1MzIKLXNpX3BtdV9yZXNfZGVwcyhzaV90ICpzaWgsIGNoaXBjcmVnc190ICpjYywgdTMyIHJzcmNzLAotCQlib29sIGFsbCkKLXsKLQl1MzIgZGVwcyA9IDA7Ci0JdTMyIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDw9IFBNVVJFU19NQVhfUkVTTlVNOyBpKyspIHsKLQkJaWYgKCEocnNyY3MgJiBQTVVSRVNfQklUKGkpKSkKLQkJCWNvbnRpbnVlOwotCQlXX1JFRygmY2MtPnJlc190YWJsZV9zZWwsIGkpOwotCQlkZXBzIHw9IFJfUkVHKCZjYy0+cmVzX2RlcF9tYXNrKTsKLQl9Ci0KLQlyZXR1cm4gIWFsbCA/IGRlcHMgOiAoZGVwcwotCQkJICAgICAgPyAoZGVwcyB8Ci0JCQkJIHNpX3BtdV9yZXNfZGVwcyhzaWgsIGNjLCBkZXBzLAotCQkJCQkJIHRydWUpKSA6IDApOwotfQotCi0vKiBwb3dlciB1cC9kb3duIE9UUCB0aHJvdWdoIFBNVSByZXNvdXJjZXMgKi8KLXZvaWQgc2lfcG11X290cF9wb3dlcihzaV90ICpzaWgsIGJvb2wgb24pCi17Ci0JY2hpcGNyZWdzX3QgKmNjOwotCXVpbnQgb3JpZ2lkeDsKLQl1MzIgcnNyY3MgPSAwOwkvKiByc3JjcyB0byB0dXJuIG9uL29mZiBPVFAgcG93ZXIgKi8KLQotCUFTU0VSVChzaWgtPmNjY2FwcyAmIENDX0NBUF9QTVUpOwotCi0JLyogRG9uJ3QgZG8gYW55dGhpbmcgaWYgT1RQIGlzIGRpc2FibGVkICovCi0JaWYgKHNpX2lzX290cF9kaXNhYmxlZChzaWgpKSB7Ci0JCVBNVV9NU0coKCJzaV9wbXVfb3RwX3Bvd2VyOiBPVFAgaXMgZGlzYWJsZWRcbiIpKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIFJlbWVtYmVyIG9yaWdpbmFsIGNvcmUgYmVmb3JlIHN3aXRjaCB0byBjaGlwYyAqLwotCW9yaWdpZHggPSBzaV9jb3JlaWR4KHNpaCk7Ci0JY2MgPSBzaV9zZXRjb3JlaWR4KHNpaCwgU0lfQ0NfSURYKTsKLQlBU1NFUlQoY2MgIT0gTlVMTCk7Ci0KLQlzd2l0Y2ggKHNpaC0+Y2hpcCkgewotCWNhc2UgQkNNNDMyOV9DSElQX0lEOgotCQlyc3JjcyA9IFBNVVJFU19CSVQoUkVTNDMyOV9PVFBfUFUpOwotCQlicmVhazsKLQljYXNlIEJDTTQzMTlfQ0hJUF9JRDoKLQkJcnNyY3MgPSBQTVVSRVNfQklUKFJFUzQzMTlfT1RQX1BVKTsKLQkJYnJlYWs7Ci0JY2FzZSBCQ000MzM2X0NISVBfSUQ6Ci0JCXJzcmNzID0gUE1VUkVTX0JJVChSRVM0MzM2X09UUF9QVSk7Ci0JCWJyZWFrOwotCWNhc2UgQkNNNDMzMF9DSElQX0lEOgotCQlyc3JjcyA9IFBNVVJFU19CSVQoUkVTNDMzMF9PVFBfUFUpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlpZiAocnNyY3MgIT0gMCkgewotCQl1MzIgb3RwczsKLQotCQkvKiBGaWd1cmUgb3V0IHRoZSBkZXBlbmRhbmNpZXMgKGV4Y2x1ZGUgbWluX3Jlc19tYXNrKSAqLwotCQl1MzIgZGVwcyA9IHNpX3BtdV9yZXNfZGVwcyhzaWgsIGNjLCByc3JjcywgdHJ1ZSk7Ci0JCXUzMiBtaW5fbWFzayA9IDAsIG1heF9tYXNrID0gMDsKLQkJc2lfcG11X3Jlc19tYXNrcyhzaWgsICZtaW5fbWFzaywgJm1heF9tYXNrKTsKLQkJZGVwcyAmPSB+bWluX21hc2s7Ci0JCS8qIFR1cm4gb24vb2ZmIHRoZSBwb3dlciAqLwotCQlpZiAob24pIHsKLQkJCVBNVV9NU0coKCJBZGRpbmcgcnNyYyAweCV4IHRvIG1pbl9yZXNfbWFza1xuIiwKLQkJCQkgcnNyY3MgfCBkZXBzKSk7Ci0JCQlPUl9SRUcoJmNjLT5taW5fcmVzX21hc2ssIChyc3JjcyB8IGRlcHMpKTsKLQkJCVNQSU5XQUlUKCEoUl9SRUcoJmNjLT5yZXNfc3RhdGUpICYgcnNyY3MpLAotCQkJCSBQTVVfTUFYX1RSQU5TSVRJT05fRExZKTsKLQkJCUFTU0VSVChSX1JFRygmY2MtPnJlc19zdGF0ZSkgJiByc3Jjcyk7Ci0JCX0gZWxzZSB7Ci0JCQlQTVVfTVNHKCgiUmVtb3ZpbmcgcnNyYyAweCV4IGZyb20gbWluX3Jlc19tYXNrXG4iLAotCQkJCSByc3JjcyB8IGRlcHMpKTsKLQkJCUFORF9SRUcoJmNjLT5taW5fcmVzX21hc2ssIH4ocnNyY3MgfCBkZXBzKSk7Ci0JCX0KLQotCQlTUElOV0FJVCgoKChvdHBzID0gUl9SRUcoJmNjLT5vdHBzdGF0dXMpKSAmIE9UUFNfUkVBRFkpICE9Ci0JCQkgIChvbiA/IE9UUFNfUkVBRFkgOiAwKSksIDEwMCk7Ci0JCUFTU0VSVCgob3RwcyAmIE9UUFNfUkVBRFkpID09IChvbiA/IE9UUFNfUkVBRFkgOiAwKSk7Ci0JCWlmICgob3RwcyAmIE9UUFNfUkVBRFkpICE9IChvbiA/IE9UUFNfUkVBRFkgOiAwKSkKLQkJCVBNVV9NU0coKCJPVFAgcmVhZHkgYml0IG5vdCAlcyBhZnRlciB3YWl0XG4iLAotCQkJCSAob24gPyAiT04iIDogIk9GRiIpKSk7Ci0JfQotCi0JLyogUmV0dXJuIHRvIG9yaWdpbmFsIGNvcmUgKi8KLQlzaV9zZXRjb3JlaWR4KHNpaCwgb3JpZ2lkeCk7Ci19Ci0KLXZvaWQgc2lfcG11X3JjYWwoc2lfdCAqc2loKQotewotCWNoaXBjcmVnc190ICpjYzsKLQl1aW50IG9yaWdpZHg7Ci0KLQlBU1NFUlQoc2loLT5jY2NhcHMgJiBDQ19DQVBfUE1VKTsKLQotCS8qIFJlbWVtYmVyIG9yaWdpbmFsIGNvcmUgYmVmb3JlIHN3aXRjaCB0byBjaGlwYyAqLwotCW9yaWdpZHggPSBzaV9jb3JlaWR4KHNpaCk7Ci0JY2MgPSBzaV9zZXRjb3JlaWR4KHNpaCwgU0lfQ0NfSURYKTsKLQlBU1NFUlQoY2MgIT0gTlVMTCk7Ci0KLQlzd2l0Y2ggKHNpaC0+Y2hpcCkgewotCWNhc2UgQkNNNDMyOV9DSElQX0lEOnsKLQkJCXU4IHJjYWxfY29kZTsKLQkJCXUzMiB2YWw7Ci0KLQkJCS8qIEtpY2sgUkNhbCAqLwotCQkJV19SRUcoJmNjLT5jaGlwY29udHJvbF9hZGRyLCAxKTsKLQotCQkJLyogUG93ZXIgRG93biBSQ0FMIEJsb2NrICovCi0JCQlBTkRfUkVHKCZjYy0+Y2hpcGNvbnRyb2xfZGF0YSwgfjB4MDQpOwotCi0JCQkvKiBQb3dlciBVcCBSQ0FMIGJsb2NrICovCi0JCQlPUl9SRUcoJmNjLT5jaGlwY29udHJvbF9kYXRhLCAweDA0KTsKLQotCQkJLyogV2FpdCBmb3IgY29tcGxldGlvbiAqLwotCQkJU1BJTldBSVQoMCA9PSAoUl9SRUcoJmNjLT5jaGlwc3RhdHVzKSAmIDB4MDgpLAotCQkJCSAxMCAqIDEwMDAgKiAxMDAwKTsKLQkJCUFTU0VSVChSX1JFRygmY2MtPmNoaXBzdGF0dXMpICYgMHgwOCk7Ci0KLQkJCS8qIERyb3AgdGhlIExTQiB0byBjb252ZXJ0IGZyb20gNSBiaXQgY29kZSB0byA0IGJpdCBjb2RlICovCi0JCQlyY2FsX2NvZGUgPQotCQkJICAgICh1OCkgKFJfUkVHKCZjYy0+Y2hpcHN0YXR1cykgPj4gNSkgJiAweDBmOwotCi0JCQlQTVVfTVNHKCgiUkNhbCBjb21wbGV0ZWQsIHN0YXR1cyAweCV4LCBjb2RlIDB4JXhcbiIsCi0JCQkJIFJfUkVHKCZjYy0+Y2hpcHN0YXR1cyksIHJjYWxfY29kZSkpOwotCi0JCQkvKiBXcml0ZSBSQ2FsIGNvZGUgaW50byBwbXVfdnJlZ19jdHJsWzMyOjI5XSAqLwotCQkJV19SRUcoJmNjLT5yZWdjb250cm9sX2FkZHIsIDApOwotCQkJdmFsID0KLQkJCSAgICBSX1JFRygmY2MtPnJlZ2NvbnRyb2xfZGF0YSkgJiB+KCh1MzIpIDB4MDcgPDwgMjkpOwotCQkJdmFsIHw9ICh1MzIpIChyY2FsX2NvZGUgJiAweDA3KSA8PCAyOTsKLQkJCVdfUkVHKCZjYy0+cmVnY29udHJvbF9kYXRhLCB2YWwpOwotCQkJV19SRUcoJmNjLT5yZWdjb250cm9sX2FkZHIsIDEpOwotCQkJdmFsID0gUl9SRUcoJmNjLT5yZWdjb250cm9sX2RhdGEpICYgfih1MzIpIDB4MDE7Ci0JCQl2YWwgfD0gKHUzMikgKChyY2FsX2NvZGUgPj4gMykgJiAweDAxKTsKLQkJCVdfUkVHKCZjYy0+cmVnY29udHJvbF9kYXRhLCB2YWwpOwotCi0JCQkvKiBXcml0ZSBSQ2FsIGNvZGUgaW50byBwbXVfY2hpcF9jdHJsWzMzOjMwXSAqLwotCQkJV19SRUcoJmNjLT5jaGlwY29udHJvbF9hZGRyLCAwKTsKLQkJCXZhbCA9Ci0JCQkgICAgUl9SRUcoJmNjLT5jaGlwY29udHJvbF9kYXRhKSAmIH4oKHUzMikgMHgwMyA8PCAzMCk7Ci0JCQl2YWwgfD0gKHUzMikgKHJjYWxfY29kZSAmIDB4MDMpIDw8IDMwOwotCQkJV19SRUcoJmNjLT5jaGlwY29udHJvbF9kYXRhLCB2YWwpOwotCQkJV19SRUcoJmNjLT5jaGlwY29udHJvbF9hZGRyLCAxKTsKLQkJCXZhbCA9Ci0JCQkgICAgUl9SRUcoJmNjLT5jaGlwY29udHJvbF9kYXRhKSAmIH4odTMyKSAweDAzOwotCQkJdmFsIHw9ICh1MzIpICgocmNhbF9jb2RlID4+IDIpICYgMHgwMyk7Ci0JCQlXX1JFRygmY2MtPmNoaXBjb250cm9sX2RhdGEsIHZhbCk7Ci0KLQkJCS8qIFNldCBvdmVycmlkZSBpbiBwbXVfY2hpcF9jdHJsWzI5XSAqLwotCQkJV19SRUcoJmNjLT5jaGlwY29udHJvbF9hZGRyLCAwKTsKLQkJCU9SX1JFRygmY2MtPmNoaXBjb250cm9sX2RhdGEsICgweDAxIDw8IDI5KSk7Ci0KLQkJCS8qIFBvd2VyIG9mZiBSQ2FsIGJsb2NrICovCi0JCQlXX1JFRygmY2MtPmNoaXBjb250cm9sX2FkZHIsIDEpOwotCQkJQU5EX1JFRygmY2MtPmNoaXBjb250cm9sX2RhdGEsIH4weDA0KTsKLQotCQkJYnJlYWs7Ci0JCX0KLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQkvKiBSZXR1cm4gdG8gb3JpZ2luYWwgY29yZSAqLwotCXNpX3NldGNvcmVpZHgoc2loLCBvcmlnaWR4KTsKLX0KLQotdm9pZCBzaV9wbXVfc3B1cmF2b2lkKHNpX3QgKnNpaCwgdTggc3B1cmF2b2lkKQotewotCWNoaXBjcmVnc190ICpjYzsKLQl1aW50IG9yaWdpZHgsIGludHJfdmFsOwotCXUzMiB0bXAgPSAwOwotCi0JLyogUmVtZW1iZXIgb3JpZ2luYWwgY29yZSBiZWZvcmUgc3dpdGNoIHRvIGNoaXBjICovCi0JY2MgPSAoY2hpcGNyZWdzX3QgKikgc2lfc3dpdGNoX2NvcmUoc2loLCBDQ19DT1JFX0lELCAmb3JpZ2lkeCwKLQkJCQkJICAgICZpbnRyX3ZhbCk7Ci0JQVNTRVJUKGNjICE9IE5VTEwpOwotCi0JLyogZm9yY2UgdGhlIEhUIG9mZiAgKi8KLQlpZiAoc2loLT5jaGlwID09IEJDTTQzMzZfQ0hJUF9JRCkgewotCQl0bXAgPSBSX1JFRygmY2MtPm1heF9yZXNfbWFzayk7Ci0JCXRtcCAmPSB+UkVTNDMzNl9IVF9BVkFJTDsKLQkJV19SRUcoJmNjLT5tYXhfcmVzX21hc2ssIHRtcCk7Ci0JCS8qIHdhaXQgZm9yIHRoZSBodCB0byByZWFsbHkgZ28gYXdheSAqLwotCQlTUElOV0FJVCgoKFJfUkVHKCZjYy0+Y2xrX2N0bF9zdCkgJiBDQ1NfSFRBVkFJTCkgPT0gMCksCi0JCQkgMTAwMDApOwotCQlBU1NFUlQoKFJfUkVHKCZjYy0+Y2xrX2N0bF9zdCkgJiBDQ1NfSFRBVkFJTCkgPT0gMCk7Ci0JfQotCi0JLyogdXBkYXRlIHRoZSBwbGwgY2hhbmdlcyAqLwotCXNpX3BtdV9zcHVyYXZvaWRfcGxsdXBkYXRlKHNpaCwgY2MsIHNwdXJhdm9pZCk7Ci0KLQkvKiBlbmFibGUgSFQgYmFjayBvbiAgKi8KLQlpZiAoc2loLT5jaGlwID09IEJDTTQzMzZfQ0hJUF9JRCkgewotCQl0bXAgPSBSX1JFRygmY2MtPm1heF9yZXNfbWFzayk7Ci0JCXRtcCB8PSBSRVM0MzM2X0hUX0FWQUlMOwotCQlXX1JFRygmY2MtPm1heF9yZXNfbWFzaywgdG1wKTsKLQl9Ci0KLQkvKiBSZXR1cm4gdG8gb3JpZ2luYWwgY29yZSAqLwotCXNpX3Jlc3RvcmVfY29yZShzaWgsIG9yaWdpZHgsIGludHJfdmFsKTsKLX0KLQogc3RhdGljIHZvaWQKIHNpX3BtdV9zcHVyYXZvaWRfcGxsdXBkYXRlKHNpX3QgKnNpaCwgY2hpcGNyZWdzX3QgKmNjLCB1OCBzcHVyYXZvaWQpCiB7CkBAIC0yMjU4LDcgKzY4NCwxMCBAQAogCWNhc2UgQkNNNDMyMzZfQ0hJUF9JRDoKIAljYXNlIEJDTTQzMjM4X0NISVBfSUQ6CiAKLQkJLyogQkNNNTM1NyBuZWVkcyB0byB0b3VjaCBQTEwxX1BMTENUTFswMl0sIHNvIG9mZnNldCBQTEwwX1BMTENUTFswMl0gYnkgNiAqLworCQkvKgorCQkgKiBCQ001MzU3IG5lZWRzIHRvIHRvdWNoIFBMTDFfUExMQ1RMWzAyXSwKKwkJICogc28gb2Zmc2V0IFBMTDBfUExMQ1RMWzAyXSBieSA2CisJCSAqLwogCQlwaHlwbGxfb2Zmc2V0ID0gKHNpaC0+Y2hpcCA9PSBCQ001MzU3X0NISVBfSUQpID8gNiA6IDA7CiAKIAkJLyogUk1XIG9ubHkgdGhlIFAxIGRpdmlkZXIgKi8KQEAgLTIzOTYsMTAgKzgyNSwxMiBAQAogCQlXX1JFRygmY2MtPnBsbGNvbnRyb2xfYWRkciwgUE1VMV9QTEwwX1BMTENUTDUpOwogCQlXX1JFRygmY2MtPnBsbGNvbnRyb2xfZGF0YSwgMHg4ODg4ODg1NCk7CiAKLQkJaWYgKHNwdXJhdm9pZCA9PSAxKSB7CS8qIHNwdXJfYXZvaWQgT04sIGVuYWJsZSA0MS84Mi8xNjRNaHogY2xvY2sgbW9kZSAqLworCQlpZiAoc3B1cmF2b2lkID09IDEpIHsKKwkJCS8qIHNwdXJfYXZvaWQgT04sIHNvIGVuYWJsZSA0MS84Mi8xNjRNaHogY2xvY2sgbW9kZSAqLwogCQkJV19SRUcoJmNjLT5wbGxjb250cm9sX2FkZHIsIFBNVTFfUExMMF9QTExDVEwyKTsKIAkJCVdfUkVHKCZjYy0+cGxsY29udHJvbF9kYXRhLCAweDA1MjAxODI4KTsKLQkJfSBlbHNlIHsJLyogZW5hYmxlIDQwLzgwLzE2ME1oeiBjbG9jayBtb2RlICovCisJCX0gZWxzZSB7CisJCQkvKiBlbmFibGUgNDAvODAvMTYwTWh6IGNsb2NrIG1vZGUgKi8KIAkJCVdfUkVHKCZjYy0+cGxsY29udHJvbF9hZGRyLCBQTVUxX1BMTDBfUExMQ1RMMik7CiAJCQlXX1JFRygmY2MtPnBsbGNvbnRyb2xfZGF0YSwgMHgwNTAwMTgyOCk7CiAJCX0KQEAgLTI0MjIsMjQgKzg1Myw5NzUgQEAKIAkJV19SRUcoJmNjLT5wbGxjb250cm9sX2RhdGEsIDB4ODg4ODg4MjUpOwogCiAJCVdfUkVHKCZjYy0+cGxsY29udHJvbF9hZGRyLCBQTVUxX1BMTDBfUExMQ1RMMyk7Ci0JCWlmIChzcHVyYXZvaWQgPT0gMSkgeworCQlpZiAoc3B1cmF2b2lkID09IDEpCiAJCQlXX1JFRygmY2MtPnBsbGNvbnRyb2xfZGF0YSwgMHgwMEVDNEVDNCk7Ci0JCX0gZWxzZSB7CisJCWVsc2UKIAkJCVdfUkVHKCZjYy0+cGxsY29udHJvbF9kYXRhLCAweDAwNzYyNzYyKTsKLQkJfQogCiAJCXRtcCA9IFBDVExfUExMX1BMTENUTF9VUEQ7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJUE1VX0VSUk9SKCgiJXM6IHVua25vd24gc3B1cmF2b2lkYW5jZSBzZXR0aW5ncyBmb3IgY2hpcCAlcywgbm90IGNoYW5naW5nIFBMTFxuIiwgX19mdW5jX18sIGJjbV9jaGlwbmFtZShzaWgtPmNoaXAsIGNobiwgOCkpKTsKLQkJYnJlYWs7CisJCS8qIGJhaWwgb3V0ICovCisJCXJldHVybjsKIAl9CiAKIAl0bXAgfD0gUl9SRUcoJmNjLT5wbXVjb250cm9sKTsKIAlXX1JFRygmY2MtPnBtdWNvbnRyb2wsIHRtcCk7CiB9CiAKKy8qIHNlbGVjdCBkZWZhdWx0IHh0YWwgZnJlcXVlbmN5IGZvciBlYWNoIGNoaXAgKi8KK3N0YXRpYyBjb25zdCBwbXUxX3h0YWx0YWIwX3QgKnNpX3BtdTFfeHRhbGRlZjAoc2lfdCAqc2loKQoreworCXN3aXRjaCAoc2loLT5jaGlwKSB7CisJY2FzZSBCQ000MzI5X0NISVBfSUQ6CisJCS8qIERlZmF1bHQgdG8gMzg0MDBLaHogKi8KKwkJcmV0dXJuICZwbXUxX3h0YWx0YWIwXzg4MF80MzI5W1BNVTFfWFRBTFRBQjBfODgwXzM4NDAwS107CisJY2FzZSBCQ000MzE5X0NISVBfSUQ6CisJCS8qIERlZmF1bHQgdG8gMzAwMDBLaHogKi8KKwkJcmV0dXJuICZwbXUxX3h0YWx0YWIwXzE0NDBbUE1VMV9YVEFMVEFCMF8xNDQwXzMwMDAwS107CisJY2FzZSBCQ000MzM2X0NISVBfSUQ6CisJCS8qIERlZmF1bHQgdG8gMjYwMDBLaHogKi8KKwkJcmV0dXJuICZwbXUxX3h0YWx0YWIwXzk2MFtQTVUxX1hUQUxUQUIwXzk2MF8yNjAwMEtdOworCWNhc2UgQkNNNDMzMF9DSElQX0lEOgorCQkvKiBEZWZhdWx0IHRvIDM3NDAwS2h6ICovCisJCWlmIChDU1Q0MzMwX0NISVBNT0RFX1NESU9EKHNpaC0+Y2hpcHN0KSkKKwkJCXJldHVybiAmcG11MV94dGFsdGFiMF85NjBbUE1VMV9YVEFMVEFCMF85NjBfMzc0MDBLXTsKKwkJZWxzZQorCQkJcmV0dXJuICZwbXUxX3h0YWx0YWIwXzE0NDBbUE1VMV9YVEFMVEFCMF8xNDQwXzM3NDAwS107CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKiBzZWxlY3QgeHRhbCB0YWJsZSBmb3IgZWFjaCBjaGlwICovCitzdGF0aWMgY29uc3QgcG11MV94dGFsdGFiMF90ICpzaV9wbXUxX3h0YWx0YWIwKHNpX3QgKnNpaCkKK3sKKwlzd2l0Y2ggKHNpaC0+Y2hpcCkgeworCWNhc2UgQkNNNDMyOV9DSElQX0lEOgorCQlyZXR1cm4gcG11MV94dGFsdGFiMF84ODBfNDMyOTsKKwljYXNlIEJDTTQzMTlfQ0hJUF9JRDoKKwkJcmV0dXJuIHBtdTFfeHRhbHRhYjBfMTQ0MDsKKwljYXNlIEJDTTQzMzZfQ0hJUF9JRDoKKwkJcmV0dXJuIHBtdTFfeHRhbHRhYjBfOTYwOworCWNhc2UgQkNNNDMzMF9DSElQX0lEOgorCQlpZiAoQ1NUNDMzMF9DSElQTU9ERV9TRElPRChzaWgtPmNoaXBzdCkpCisJCQlyZXR1cm4gcG11MV94dGFsdGFiMF85NjA7CisJCWVsc2UKKwkJCXJldHVybiBwbXUxX3h0YWx0YWIwXzE0NDA7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKiBxdWVyeSBhbHAveHRhbCBjbG9jayBmcmVxdWVuY3kgKi8KK3N0YXRpYyB1MzIKK3NpX3BtdTFfYWxwY2xrMChzaV90ICpzaWgsIGNoaXBjcmVnc190ICpjYykKK3sKKwljb25zdCBwbXUxX3h0YWx0YWIwX3QgKnh0OworCXUzMiB4ZjsKKworCS8qIEZpbmQgdGhlIGZyZXF1ZW5jeSBpbiB0aGUgdGFibGUgKi8KKwl4ZiA9IChSX1JFRygmY2MtPnBtdWNvbnRyb2wpICYgUENUTF9YVEFMRlJFUV9NQVNLKSA+PgorCSAgICBQQ1RMX1hUQUxGUkVRX1NISUZUOworCWZvciAoeHQgPSBzaV9wbXUxX3h0YWx0YWIwKHNpaCk7IHh0ICE9IE5VTEwgJiYgeHQtPmZyZWYgIT0gMDsgeHQrKykKKwkJaWYgKHh0LT54ZiA9PSB4ZikKKwkJCWJyZWFrOworCS8qIENvdWxkIG5vdCBmaW5kIGl0IHNvIGFzc2lnbiBhIGRlZmF1bHQgdmFsdWUgKi8KKwlpZiAoeHQgPT0gTlVMTCB8fCB4dC0+ZnJlZiA9PSAwKQorCQl4dCA9IHNpX3BtdTFfeHRhbGRlZjAoc2loKTsKKwlyZXR1cm4geHQtPmZyZWYgKiAxMDAwOworfQorCisvKiBzZWxlY3QgZGVmYXVsdCBwbGwgZnZjbyBmb3IgZWFjaCBjaGlwICovCitzdGF0aWMgdTMyIHNpX3BtdTFfcGxsZnZjbzAoc2lfdCAqc2loKQoreworCXN3aXRjaCAoc2loLT5jaGlwKSB7CisJY2FzZSBCQ000MzI5X0NISVBfSUQ6CisJCXJldHVybiBGVkNPXzg4MDsKKwljYXNlIEJDTTQzMTlfQ0hJUF9JRDoKKwkJcmV0dXJuIEZWQ09fMTQ0MDsKKwljYXNlIEJDTTQzMzZfQ0hJUF9JRDoKKwkJcmV0dXJuIEZWQ09fOTYwOworCWNhc2UgQkNNNDMzMF9DSElQX0lEOgorCQlpZiAoQ1NUNDMzMF9DSElQTU9ERV9TRElPRChzaWgtPmNoaXBzdCkpCisJCQlyZXR1cm4gRlZDT185NjA7CisJCWVsc2UKKwkJCXJldHVybiBGVkNPXzE0NDA7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaV9wbXVfc2V0XzQzMzBfcGxsZGl2cyhzaV90ICpzaWgpCit7CisJdTMyIEZWQ08gPSBzaV9wbXUxX3BsbGZ2Y28wKHNpaCkgLyAxMDAwOworCXUzMiBtMWRpdiwgbTJkaXYsIG0zZGl2LCBtNGRpdiwgbTVkaXYsIG02ZGl2OworCXUzMiBwbGxjMSwgcGxsYzI7CisKKwltMmRpdiA9IG0zZGl2ID0gbTRkaXYgPSBtNmRpdiA9IEZWQ08gLyA4MDsKKwltNWRpdiA9IEZWQ08gLyAxNjA7CisKKwlpZiAoQ1NUNDMzMF9DSElQTU9ERV9TRElPRChzaWgtPmNoaXBzdCkpCisJCW0xZGl2ID0gRlZDTyAvIDgwOworCWVsc2UKKwkJbTFkaXYgPSBGVkNPIC8gOTA7CisJcGxsYzEgPQorCSAgICAobTFkaXYgPDwgUE1VMV9QTEwwX1BDMV9NMURJVl9TSElGVCkgfCAobTJkaXYgPDwKKwkJCQkJCSAgICBQTVUxX1BMTDBfUEMxX00yRElWX1NISUZUKSB8CisJICAgIChtM2RpdiA8PCBQTVUxX1BMTDBfUEMxX00zRElWX1NISUZUKSB8IChtNGRpdiA8PAorCQkJCQkJICAgIFBNVTFfUExMMF9QQzFfTTRESVZfU0hJRlQpOworCXNpX3BtdV9wbGxjb250cm9sKHNpaCwgUE1VMV9QTEwwX1BMTENUTDEsIH4wLCBwbGxjMSk7CisKKwlwbGxjMiA9IHNpX3BtdV9wbGxjb250cm9sKHNpaCwgUE1VMV9QTEwwX1BMTENUTDEsIDAsIDApOworCXBsbGMyICY9IH4oUE1VMV9QTEwwX1BDMl9NNURJVl9NQVNLIHwgUE1VMV9QTEwwX1BDMl9NNkRJVl9NQVNLKTsKKwlwbGxjMiB8PQorCSAgICAoKG01ZGl2IDw8IFBNVTFfUExMMF9QQzJfTTVESVZfU0hJRlQpIHwKKwkgICAgIChtNmRpdiA8PCBQTVUxX1BMTDBfUEMyX002RElWX1NISUZUKSk7CisJc2lfcG11X3BsbGNvbnRyb2woc2loLCBQTVUxX1BMTDBfUExMQ1RMMiwgfjAsIHBsbGMyKTsKK30KKworLyogU2V0IHVwIFBMTCByZWdpc3RlcnMgaW4gdGhlIFBNVSBhcyBwZXIgdGhlIGNyeXN0YWwgc3BlZWQuCisgKiBYdGFsRnJlcSBmaWVsZCBpbiBwbXVjb250cm9sIHJlZ2lzdGVyIGJlaW5nIDAgaW5kaWNhdGVzIHRoZSBQTEwKKyAqIGlzIG5vdCBwcm9ncmFtbWVkIGFuZCB0aGUgaC93IGRlZmF1bHQgaXMgYXNzdW1lZCB0byB3b3JrLCBpbiB3aGljaAorICogY2FzZSB0aGUgeHRhbCBmcmVxdWVuY3kgaXMgdW5rbm93biB0byB0aGUgcy93IHNvIHdlIG5lZWQgdG8gY2FsbAorICogc2lfcG11MV94dGFsZGVmMCgpIHdoZXJldmVyIGl0IGlzIG5lZWRlZCB0byByZXR1cm4gYSBkZWZhdWx0IHZhbHVlLgorICovCitzdGF0aWMgdm9pZCBzaV9wbXUxX3BsbGluaXQwKHNpX3QgKnNpaCwgY2hpcGNyZWdzX3QgKmNjLCB1MzIgeHRhbCkKK3sKKwljb25zdCBwbXUxX3h0YWx0YWIwX3QgKnh0OworCXUzMiB0bXA7CisJdTMyIGJ1Zl9zdHJlbmd0aCA9IDA7CisJdTggbmRpdl9tb2RlID0gMTsKKworCS8qIFVzZSBoL3cgZGVmYXVsdCBQTEwgY29uZmlnICovCisJaWYgKHh0YWwgPT0gMCkgeworCQlyZXR1cm47CisJfQorCisJLyogRmluZCB0aGUgZnJlcXVlbmN5IGluIHRoZSB0YWJsZSAqLworCWZvciAoeHQgPSBzaV9wbXUxX3h0YWx0YWIwKHNpaCk7IHh0ICE9IE5VTEwgJiYgeHQtPmZyZWYgIT0gMDsgeHQrKykKKwkJaWYgKHh0LT5mcmVmID09IHh0YWwpCisJCQlicmVhazsKKworCS8qIENoZWNrIGN1cnJlbnQgUExMIHN0YXRlLCBiYWlsIG91dCBpZiBpdCBoYXMgYmVlbiBwcm9ncmFtbWVkIG9yCisJICogd2UgZG9uJ3Qga25vdyBob3cgdG8gcHJvZ3JhbSBpdC4KKwkgKi8KKwlpZiAoeHQgPT0gTlVMTCB8fCB4dC0+ZnJlZiA9PSAwKSB7CisJCXJldHVybjsKKwl9CisJLyogZm9yIDQzMTkgYm9vdGxvYWRlciBhbHJlYWR5IHByb2dyYW1zIHRoZSBQTEwgYnV0IGJvb3Rsb2FkZXIgZG9lcyBub3QKKwkgKiBwcm9ncmFtIHRoZSBQTEw0IGFuZCBQTEw1LiBTbyBTa2lwIHRoaXMgY2hlY2sgZm9yIDQzMTkKKwkgKi8KKwlpZiAoKCgoUl9SRUcoJmNjLT5wbXVjb250cm9sKSAmIFBDVExfWFRBTEZSRVFfTUFTSykgPj4KKwkgICAgICBQQ1RMX1hUQUxGUkVRX1NISUZUKSA9PSB4dC0+eGYpICYmCisJICAgICEoKHNpaC0+Y2hpcCA9PSBCQ000MzE5X0NISVBfSUQpCisJICAgICAgfHwgKHNpaC0+Y2hpcCA9PSBCQ000MzMwX0NISVBfSUQpKSkKKwkJcmV0dXJuOworCisJc3dpdGNoIChzaWgtPmNoaXApIHsKKwljYXNlIEJDTTQzMjlfQ0hJUF9JRDoKKwkJLyogQ2hhbmdlIHRoZSBCQlBMTCBkcml2ZSBzdHJlbmd0aCB0byA4IGZvciBhbGwgY2hhbm5lbHMgKi8KKwkJYnVmX3N0cmVuZ3RoID0gMHg4ODg4ODg7CisJCUFORF9SRUcoJmNjLT5taW5fcmVzX21hc2ssCisJCQl+KFBNVVJFU19CSVQoUkVTNDMyOV9CQlBMTF9QV1JTV19QVSkgfAorCQkJICBQTVVSRVNfQklUKFJFUzQzMjlfSFRfQVZBSUwpKSk7CisJCUFORF9SRUcoJmNjLT5tYXhfcmVzX21hc2ssCisJCQl+KFBNVVJFU19CSVQoUkVTNDMyOV9CQlBMTF9QV1JTV19QVSkgfAorCQkJICBQTVVSRVNfQklUKFJFUzQzMjlfSFRfQVZBSUwpKSk7CisJCVNQSU5XQUlUKFJfUkVHKCZjYy0+Y2xrX2N0bF9zdCkgJiBDQ1NfSFRBVkFJTCwKKwkJCSBQTVVfTUFYX1RSQU5TSVRJT05fRExZKTsKKwkJV19SRUcoJmNjLT5wbGxjb250cm9sX2FkZHIsIFBNVTFfUExMMF9QTExDVEw0KTsKKwkJaWYgKHh0LT5mcmVmID09IDM4NDAwKQorCQkJdG1wID0gMHgyMDAwMjRDMDsKKwkJZWxzZSBpZiAoeHQtPmZyZWYgPT0gMzc0MDApCisJCQl0bXAgPSAweDIwMDA0NTAwOworCQllbHNlIGlmICh4dC0+ZnJlZiA9PSAyNjAwMCkKKwkJCXRtcCA9IDB4MjAwMDI0QzA7CisJCWVsc2UKKwkJCXRtcCA9IDB4MjAwMDA1QzA7CS8qIENoaXAgRGZsdCBTZXR0aW5ncyAqLworCQlXX1JFRygmY2MtPnBsbGNvbnRyb2xfZGF0YSwgdG1wKTsKKwkJV19SRUcoJmNjLT5wbGxjb250cm9sX2FkZHIsIFBNVTFfUExMMF9QTExDVEw1KTsKKwkJdG1wID0KKwkJICAgIFJfUkVHKCZjYy0+cGxsY29udHJvbF9kYXRhKSAmIFBNVTFfUExMMF9QQzVfQ0xLX0RSVl9NQVNLOworCQlpZiAoKHh0LT5mcmVmID09IDM4NDAwKSB8fCAoeHQtPmZyZWYgPT0gMzc0MDApCisJCSAgICB8fCAoeHQtPmZyZWYgPT0gMjYwMDApKQorCQkJdG1wIHw9IDB4MTU7CisJCWVsc2UKKwkJCXRtcCB8PSAweDI1OwkvKiBDaGlwIERmbHQgU2V0dGluZ3MgKi8KKwkJV19SRUcoJmNjLT5wbGxjb250cm9sX2RhdGEsIHRtcCk7CisJCWJyZWFrOworCisJY2FzZSBCQ000MzE5X0NISVBfSUQ6CisJCS8qIENoYW5nZSB0aGUgQkJQTEwgZHJpdmUgc3RyZW5ndGggdG8gMiBmb3IgYWxsIGNoYW5uZWxzICovCisJCWJ1Zl9zdHJlbmd0aCA9IDB4MjIyMjIyOworCisJCS8qIE1ha2Ugc3VyZSB0aGUgUExMIGlzIG9mZiAqLworCQkvKiBXQVI2NTEwNDogRGlzYWJsZSB0aGUgSFRfQVZBSUwgcmVzb3VyY2UgZmlyc3QgYW5kIHRoZW4KKwkJICogYWZ0ZXIgYSBkZWxheSAobW9yZSB0aGFuIGRvd250aW1lIGZvciBIVF9BVkFJTCkgcmVtb3ZlIHRoZQorCQkgKiBCQlBMTCByZXNvdXJjZTsgYmFja3BsYW5lIGNsb2NrIG1vdmVzIHRvIEFMUCBmcm9tIEhULgorCQkgKi8KKwkJQU5EX1JFRygmY2MtPm1pbl9yZXNfbWFzaywKKwkJCX4oUE1VUkVTX0JJVChSRVM0MzE5X0hUX0FWQUlMKSkpOworCQlBTkRfUkVHKCZjYy0+bWF4X3Jlc19tYXNrLAorCQkJfihQTVVSRVNfQklUKFJFUzQzMTlfSFRfQVZBSUwpKSk7CisKKwkJdWRlbGF5KDEwMCk7CisJCUFORF9SRUcoJmNjLT5taW5fcmVzX21hc2ssCisJCQl+KFBNVVJFU19CSVQoUkVTNDMxOV9CQlBMTF9QV1JTV19QVSkpKTsKKwkJQU5EX1JFRygmY2MtPm1heF9yZXNfbWFzaywKKwkJCX4oUE1VUkVTX0JJVChSRVM0MzE5X0JCUExMX1BXUlNXX1BVKSkpOworCisJCXVkZWxheSgxMDApOworCQlTUElOV0FJVChSX1JFRygmY2MtPmNsa19jdGxfc3QpICYgQ0NTX0hUQVZBSUwsCisJCQkgUE1VX01BWF9UUkFOU0lUSU9OX0RMWSk7CisJCVdfUkVHKCZjYy0+cGxsY29udHJvbF9hZGRyLCBQTVUxX1BMTDBfUExMQ1RMNCk7CisJCXRtcCA9IDB4MjAwMDA1YzA7CisJCVdfUkVHKCZjYy0+cGxsY29udHJvbF9kYXRhLCB0bXApOworCQlicmVhazsKKworCWNhc2UgQkNNNDMzNl9DSElQX0lEOgorCQlBTkRfUkVHKCZjYy0+bWluX3Jlc19tYXNrLAorCQkJfihQTVVSRVNfQklUKFJFUzQzMzZfSFRfQVZBSUwpIHwKKwkJCSAgUE1VUkVTX0JJVChSRVM0MzM2X01BQ1BIWV9DTEtBVkFJTCkpKTsKKwkJQU5EX1JFRygmY2MtPm1heF9yZXNfbWFzaywKKwkJCX4oUE1VUkVTX0JJVChSRVM0MzM2X0hUX0FWQUlMKSB8CisJCQkgIFBNVVJFU19CSVQoUkVTNDMzNl9NQUNQSFlfQ0xLQVZBSUwpKSk7CisJCXVkZWxheSgxMDApOworCQlTUElOV0FJVChSX1JFRygmY2MtPmNsa19jdGxfc3QpICYgQ0NTX0hUQVZBSUwsCisJCQkgUE1VX01BWF9UUkFOU0lUSU9OX0RMWSk7CisJCWJyZWFrOworCisJY2FzZSBCQ000MzMwX0NISVBfSUQ6CisJCUFORF9SRUcoJmNjLT5taW5fcmVzX21hc2ssCisJCQl+KFBNVVJFU19CSVQoUkVTNDMzMF9IVF9BVkFJTCkgfAorCQkJICBQTVVSRVNfQklUKFJFUzQzMzBfTUFDUEhZX0NMS0FWQUlMKSkpOworCQlBTkRfUkVHKCZjYy0+bWF4X3Jlc19tYXNrLAorCQkJfihQTVVSRVNfQklUKFJFUzQzMzBfSFRfQVZBSUwpIHwKKwkJCSAgUE1VUkVTX0JJVChSRVM0MzMwX01BQ1BIWV9DTEtBVkFJTCkpKTsKKwkJdWRlbGF5KDEwMCk7CisJCVNQSU5XQUlUKFJfUkVHKCZjYy0+Y2xrX2N0bF9zdCkgJiBDQ1NfSFRBVkFJTCwKKwkJCSBQTVVfTUFYX1RSQU5TSVRJT05fRExZKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwkvKiBXcml0ZSBwMWRpdiBhbmQgcDJkaXYgdG8gcGxsY29udHJvbFswXSAqLworCVdfUkVHKCZjYy0+cGxsY29udHJvbF9hZGRyLCBQTVUxX1BMTDBfUExMQ1RMMCk7CisJdG1wID0gUl9SRUcoJmNjLT5wbGxjb250cm9sX2RhdGEpICYKKwkgICAgfihQTVUxX1BMTDBfUEMwX1AxRElWX01BU0sgfCBQTVUxX1BMTDBfUEMwX1AyRElWX01BU0spOworCXRtcCB8PQorCSAgICAoKHh0LT4KKwkgICAgICBwMWRpdiA8PCBQTVUxX1BMTDBfUEMwX1AxRElWX1NISUZUKSAmIFBNVTFfUExMMF9QQzBfUDFESVZfTUFTSykgfAorCSAgICAoKHh0LT4KKwkgICAgICBwMmRpdiA8PCBQTVUxX1BMTDBfUEMwX1AyRElWX1NISUZUKSAmIFBNVTFfUExMMF9QQzBfUDJESVZfTUFTSyk7CisJV19SRUcoJmNjLT5wbGxjb250cm9sX2RhdGEsIHRtcCk7CisKKwlpZiAoKHNpaC0+Y2hpcCA9PSBCQ000MzMwX0NISVBfSUQpKQorCQlzaV9wbXVfc2V0XzQzMzBfcGxsZGl2cyhzaWgpOworCisJaWYgKChzaWgtPmNoaXAgPT0gQkNNNDMyOV9DSElQX0lEKQorCSAgICAmJiAoc2loLT5jaGlwcmV2ID09IDApKSB7CisKKwkJV19SRUcoJmNjLT5wbGxjb250cm9sX2FkZHIsIFBNVTFfUExMMF9QTExDVEwxKTsKKwkJdG1wID0gUl9SRUcoJmNjLT5wbGxjb250cm9sX2RhdGEpOworCQl0bXAgPSB0bXAgJiAofkRPVDExTUFDXzg4ME1IWl9DTEtfRElWSVNPUl9NQVNLKTsKKwkJdG1wID0gdG1wIHwgRE9UMTFNQUNfODgwTUhaX0NMS19ESVZJU09SX1ZBTDsKKwkJV19SRUcoJmNjLT5wbGxjb250cm9sX2RhdGEsIHRtcCk7CisJfQorCWlmICgoc2loLT5jaGlwID09IEJDTTQzMTlfQ0hJUF9JRCkgfHwKKwkgICAgKHNpaC0+Y2hpcCA9PSBCQ000MzM2X0NISVBfSUQpIHx8CisJICAgIChzaWgtPmNoaXAgPT0gQkNNNDMzMF9DSElQX0lEKSkKKwkJbmRpdl9tb2RlID0gUE1VMV9QTEwwX1BDMl9ORElWX01PREVfTUZCOworCWVsc2UKKwkJbmRpdl9tb2RlID0gUE1VMV9QTEwwX1BDMl9ORElWX01PREVfTUFTSDsKKworCS8qIFdyaXRlIG5kaXZfaW50IGFuZCBuZGl2X21vZGUgdG8gcGxsY29udHJvbFsyXSAqLworCVdfUkVHKCZjYy0+cGxsY29udHJvbF9hZGRyLCBQTVUxX1BMTDBfUExMQ1RMMik7CisJdG1wID0gUl9SRUcoJmNjLT5wbGxjb250cm9sX2RhdGEpICYKKwkgICAgfihQTVUxX1BMTDBfUEMyX05ESVZfSU5UX01BU0sgfCBQTVUxX1BMTDBfUEMyX05ESVZfTU9ERV9NQVNLKTsKKwl0bXAgfD0KKwkgICAgKCh4dC0+CisJICAgICAgbmRpdl9pbnQgPDwgUE1VMV9QTEwwX1BDMl9ORElWX0lOVF9TSElGVCkgJgorCSAgICAgUE1VMV9QTEwwX1BDMl9ORElWX0lOVF9NQVNLKSB8ICgobmRpdl9tb2RlIDw8CisJCQkJCSAgICAgIFBNVTFfUExMMF9QQzJfTkRJVl9NT0RFX1NISUZUKSAmCisJCQkJCSAgICAgUE1VMV9QTEwwX1BDMl9ORElWX01PREVfTUFTSyk7CisJV19SRUcoJmNjLT5wbGxjb250cm9sX2RhdGEsIHRtcCk7CisKKwkvKiBXcml0ZSBuZGl2X2ZyYWMgdG8gcGxsY29udHJvbFszXSAqLworCVdfUkVHKCZjYy0+cGxsY29udHJvbF9hZGRyLCBQTVUxX1BMTDBfUExMQ1RMMyk7CisJdG1wID0gUl9SRUcoJmNjLT5wbGxjb250cm9sX2RhdGEpICYgflBNVTFfUExMMF9QQzNfTkRJVl9GUkFDX01BU0s7CisJdG1wIHw9ICgoeHQtPm5kaXZfZnJhYyA8PCBQTVUxX1BMTDBfUEMzX05ESVZfRlJBQ19TSElGVCkgJgorCQlQTVUxX1BMTDBfUEMzX05ESVZfRlJBQ19NQVNLKTsKKwlXX1JFRygmY2MtPnBsbGNvbnRyb2xfZGF0YSwgdG1wKTsKKworCS8qIFdyaXRlIGNsb2NrIGRyaXZpbmcgc3RyZW5ndGggdG8gcGxsY29udHJvbFs1XSAqLworCWlmIChidWZfc3RyZW5ndGgpIHsKKwkJV19SRUcoJmNjLT5wbGxjb250cm9sX2FkZHIsIFBNVTFfUExMMF9QTExDVEw1KTsKKwkJdG1wID0KKwkJICAgIFJfUkVHKCZjYy0+cGxsY29udHJvbF9kYXRhKSAmIH5QTVUxX1BMTDBfUEM1X0NMS19EUlZfTUFTSzsKKwkJdG1wIHw9IChidWZfc3RyZW5ndGggPDwgUE1VMV9QTEwwX1BDNV9DTEtfRFJWX1NISUZUKTsKKwkJV19SRUcoJmNjLT5wbGxjb250cm9sX2RhdGEsIHRtcCk7CisJfQorCisJLyogdG8gb3BlcmF0ZSB0aGUgNDMxOSB1c2IgaW4gMjRNSHovNDhNSHo7IGNoaXBjb250cm9sWzJdWzg0OjgzXSBuZWVkcworCSAqIHRvIGJlIHVwZGF0ZWQuCisJICovCisJaWYgKChzaWgtPmNoaXAgPT0gQkNNNDMxOV9DSElQX0lEKQorCSAgICAmJiAoeHQtPmZyZWYgIT0gWFRBTF9GUkVRXzMwMDAwTUhaKSkgeworCQlXX1JFRygmY2MtPmNoaXBjb250cm9sX2FkZHIsIFBNVTFfUExMMF9DSElQQ1RMMik7CisJCXRtcCA9CisJCSAgICBSX1JFRygmY2MtPmNoaXBjb250cm9sX2RhdGEpICYgfkNDVExfNDMxOVVTQl9YVEFMX1NFTF9NQVNLOworCQlpZiAoeHQtPmZyZWYgPT0gWFRBTF9GUkVRXzI0MDAwTUhaKSB7CisJCQl0bXAgfD0KKwkJCSAgICAoQ0NUTF80MzE5VVNCXzI0TUhaX1BMTF9TRUwgPDwKKwkJCSAgICAgQ0NUTF80MzE5VVNCX1hUQUxfU0VMX1NISUZUKTsKKwkJfSBlbHNlIGlmICh4dC0+ZnJlZiA9PSBYVEFMX0ZSRVFfNDgwMDBNSFopIHsKKwkJCXRtcCB8PQorCQkJICAgIChDQ1RMXzQzMTlVU0JfNDhNSFpfUExMX1NFTCA8PAorCQkJICAgICBDQ1RMXzQzMTlVU0JfWFRBTF9TRUxfU0hJRlQpOworCQl9CisJCVdfUkVHKCZjYy0+Y2hpcGNvbnRyb2xfZGF0YSwgdG1wKTsKKwl9CisKKwkvKiBGbHVzaCBkZWZlcnJlZCBwbGwgY29udHJvbCByZWdpc3RlcnMgd3JpdGVzICovCisJaWYgKHNpaC0+cG11cmV2ID49IDIpCisJCU9SX1JFRygmY2MtPnBtdWNvbnRyb2wsIFBDVExfUExMX1BMTENUTF9VUEQpOworCisJLyogV3JpdGUgWHRhbEZyZXEuIFNldCB0aGUgZGl2aXNvciBhbHNvLiAqLworCXRtcCA9IFJfUkVHKCZjYy0+cG11Y29udHJvbCkgJgorCSAgICB+KFBDVExfSUxQX0RJVl9NQVNLIHwgUENUTF9YVEFMRlJFUV9NQVNLKTsKKwl0bXAgfD0gKCgoKCh4dC0+ZnJlZiArIDEyNykgLyAxMjgpIC0gMSkgPDwgUENUTF9JTFBfRElWX1NISUZUKSAmCisJCVBDVExfSUxQX0RJVl9NQVNLKSB8CisJICAgICgoeHQtPnhmIDw8IFBDVExfWFRBTEZSRVFfU0hJRlQpICYgUENUTF9YVEFMRlJFUV9NQVNLKTsKKworCWlmICgoc2loLT5jaGlwID09IEJDTTQzMjlfQ0hJUF9JRCkKKwkgICAgJiYgc2loLT5jaGlwcmV2ID09IDApIHsKKwkJLyogY2xlYXIgdGhlIGh0c3RyZXRjaCBiZWZvcmUgY2xlYXJpbmcgSFRSZXFFbiAqLworCQlBTkRfUkVHKCZjYy0+Y2xrc3RyZXRjaCwgfkNTVFJFVENIX0hUKTsKKwkJdG1wICY9IH5QQ1RMX0hUX1JFUV9FTjsKKwl9CisKKwlXX1JFRygmY2MtPnBtdWNvbnRyb2wsIHRtcCk7Cit9CisKK3UzMiBzaV9wbXVfaWxwX2Nsb2NrKHNpX3QgKnNpaCkKK3sKKwlzdGF0aWMgdTMyIGlscGN5Y2xlc19wZXJfc2VjOworCisJaWYgKElTU0lNX0VOQUIoc2loKSB8fCAhUE1VQ1RMX0VOQUIoc2loKSkKKwkJcmV0dXJuIElMUF9DTE9DSzsKKworCWlmIChpbHBjeWNsZXNfcGVyX3NlYyA9PSAwKSB7CisJCXUzMiBzdGFydCwgZW5kLCBkZWx0YTsKKwkJdTMyIG9yaWdpZHggPSBhaV9jb3JlaWR4KHNpaCk7CisJCWNoaXBjcmVnc190ICpjYyA9IGFpX3NldGNvcmVpZHgoc2loLCBTSV9DQ19JRFgpOworCQlzdGFydCA9IFJfUkVHKCZjYy0+cG11dGltZXIpOworCQltZGVsYXkoSUxQX0NBTENfRFVSKTsKKwkJZW5kID0gUl9SRUcoJmNjLT5wbXV0aW1lcik7CisJCWRlbHRhID0gZW5kIC0gc3RhcnQ7CisJCWlscGN5Y2xlc19wZXJfc2VjID0gZGVsdGEgKiAoMTAwMCAvIElMUF9DQUxDX0RVUik7CisJCWFpX3NldGNvcmVpZHgoc2loLCBvcmlnaWR4KTsKKwl9CisKKwlyZXR1cm4gaWxwY3ljbGVzX3Blcl9zZWM7Cit9CisKK3ZvaWQgc2lfcG11X3NldF9sZG9fdm9sdGFnZShzaV90ICpzaWgsIHU4IGxkbywgdTggdm9sdGFnZSkKK3sKKwl1OCBzcl9jbnRsX3NoaWZ0ID0gMCwgcmNfc2hpZnQgPSAwLCBzaGlmdCA9IDAsIG1hc2sgPSAwOworCXU4IGFkZHIgPSAwOworCisJc3dpdGNoIChzaWgtPmNoaXApIHsKKwljYXNlIEJDTTQzMzZfQ0hJUF9JRDoKKwkJc3dpdGNoIChsZG8pIHsKKwkJY2FzZSBTRVRfTERPX1ZPTFRBR0VfQ0xET19QV006CisJCQlhZGRyID0gNDsKKwkJCXJjX3NoaWZ0ID0gMTsKKwkJCW1hc2sgPSAweGY7CisJCQlicmVhazsKKwkJY2FzZSBTRVRfTERPX1ZPTFRBR0VfQ0xET19CVVJTVDoKKwkJCWFkZHIgPSA0OworCQkJcmNfc2hpZnQgPSA1OworCQkJbWFzayA9IDB4ZjsKKwkJCWJyZWFrOworCQljYXNlIFNFVF9MRE9fVk9MVEFHRV9MTkxETzE6CisJCQlhZGRyID0gNDsKKwkJCXJjX3NoaWZ0ID0gMTc7CisJCQltYXNrID0gMHhmOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm47CisJCX0KKwkJYnJlYWs7CisJY2FzZSBCQ000MzMwX0NISVBfSUQ6CisJCXN3aXRjaCAobGRvKSB7CisJCWNhc2UgU0VUX0xET19WT0xUQUdFX0NCVUNLX1BXTToKKwkJCWFkZHIgPSAzOworCQkJcmNfc2hpZnQgPSAwOworCQkJbWFzayA9IDB4MWY7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCisJc2hpZnQgPSBzcl9jbnRsX3NoaWZ0ICsgcmNfc2hpZnQ7CisKKwlhaV9jb3JlcmVnKHNpaCwgU0lfQ0NfSURYLCBvZmZzZXRvZihjaGlwY3JlZ3NfdCwgcmVnY29udHJvbF9hZGRyKSwKKwkJICAgfjAsIGFkZHIpOworCWFpX2NvcmVyZWcoc2loLCBTSV9DQ19JRFgsIG9mZnNldG9mKGNoaXBjcmVnc190LCByZWdjb250cm9sX2RhdGEpLAorCQkgICBtYXNrIDw8IHNoaWZ0LCAodm9sdGFnZSAmIG1hc2spIDw8IHNoaWZ0KTsKK30KKwordTE2IHNpX3BtdV9mYXN0X3B3cnVwX2RlbGF5KHNpX3QgKnNpaCkKK3sKKwl1aW50IGRlbGF5ID0gUE1VX01BWF9UUkFOU0lUSU9OX0RMWTsKKwljaGlwY3JlZ3NfdCAqY2M7CisJdWludCBvcmlnaWR4OworI2lmZGVmIEJDTURCRworCWNoYXIgY2huWzhdOworCWNoblswXSA9IDA7CQkvKiB0byBzdXBwcmVzcyBjb21waWxlIGVycm9yICovCisjZW5kaWYKKworCS8qIFJlbWVtYmVyIG9yaWdpbmFsIGNvcmUgYmVmb3JlIHN3aXRjaCB0byBjaGlwYyAqLworCW9yaWdpZHggPSBhaV9jb3JlaWR4KHNpaCk7CisJY2MgPSBhaV9zZXRjb3JlaWR4KHNpaCwgU0lfQ0NfSURYKTsKKworCXN3aXRjaCAoc2loLT5jaGlwKSB7CisJY2FzZSBCQ000MzIyNF9DSElQX0lEOgorCWNhc2UgQkNNNDMyMjVfQ0hJUF9JRDoKKwljYXNlIEJDTTQzNDIxX0NISVBfSUQ6CisJY2FzZSBCQ000MzIzNV9DSElQX0lEOgorCWNhc2UgQkNNNDMyMzZfQ0hJUF9JRDoKKwljYXNlIEJDTTQzMjM4X0NISVBfSUQ6CisJY2FzZSBCQ000MzMxX0NISVBfSUQ6CisJY2FzZSBCQ002MzYyX0NISVBfSUQ6CisJY2FzZSBCQ000MzEzX0NISVBfSUQ6CisJCWRlbGF5ID0gSVNTSU1fRU5BQihzaWgpID8gNzAgOiAzNzAwOworCQlicmVhazsKKwljYXNlIEJDTTQzMjlfQ0hJUF9JRDoKKwkJaWYgKElTU0lNX0VOQUIoc2loKSkKKwkJCWRlbGF5ID0gNzA7CisJCWVsc2UgeworCQkJdTMyIGlscCA9IHNpX3BtdV9pbHBfY2xvY2soc2loKTsKKwkJCWRlbGF5ID0KKwkJCSAgICAoc2lfcG11X3Jlc191cHRpbWUoc2loLCBjYywgUkVTNDMyOV9IVF9BVkFJTCkgKworCQkJICAgICBEMTFTQ0NfU0xPVzJGQVNUX1RSQU5TSVRJT04pICogKCgxMDAwMDAwICsgaWxwIC0KKwkJCQkJCQkgICAgICAxKSAvIGlscCk7CisJCQlkZWxheSA9ICgxMSAqIGRlbGF5KSAvIDEwOworCQl9CisJCWJyZWFrOworCWNhc2UgQkNNNDMxOV9DSElQX0lEOgorCQlkZWxheSA9IElTU0lNX0VOQUIoc2loKSA/IDcwIDogMzcwMDsKKwkJYnJlYWs7CisJY2FzZSBCQ000MzM2X0NISVBfSUQ6CisJCWlmIChJU1NJTV9FTkFCKHNpaCkpCisJCQlkZWxheSA9IDcwOworCQllbHNlIHsKKwkJCXUzMiBpbHAgPSBzaV9wbXVfaWxwX2Nsb2NrKHNpaCk7CisJCQlkZWxheSA9CisJCQkgICAgKHNpX3BtdV9yZXNfdXB0aW1lKHNpaCwgY2MsIFJFUzQzMzZfSFRfQVZBSUwpICsKKwkJCSAgICAgRDExU0NDX1NMT1cyRkFTVF9UUkFOU0lUSU9OKSAqICgoMTAwMDAwMCArIGlscCAtCisJCQkJCQkJICAgICAgMSkgLyBpbHApOworCQkJZGVsYXkgPSAoMTEgKiBkZWxheSkgLyAxMDsKKwkJfQorCQlicmVhazsKKwljYXNlIEJDTTQzMzBfQ0hJUF9JRDoKKwkJaWYgKElTU0lNX0VOQUIoc2loKSkKKwkJCWRlbGF5ID0gNzA7CisJCWVsc2UgeworCQkJdTMyIGlscCA9IHNpX3BtdV9pbHBfY2xvY2soc2loKTsKKwkJCWRlbGF5ID0KKwkJCSAgICAoc2lfcG11X3Jlc191cHRpbWUoc2loLCBjYywgUkVTNDMzMF9IVF9BVkFJTCkgKworCQkJICAgICBEMTFTQ0NfU0xPVzJGQVNUX1RSQU5TSVRJT04pICogKCgxMDAwMDAwICsgaWxwIC0KKwkJCQkJCQkgICAgICAxKSAvIGlscCk7CisJCQlkZWxheSA9ICgxMSAqIGRlbGF5KSAvIDEwOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwkvKiBSZXR1cm4gdG8gb3JpZ2luYWwgY29yZSAqLworCWFpX3NldGNvcmVpZHgoc2loLCBvcmlnaWR4KTsKKworCXJldHVybiAodTE2KSBkZWxheTsKK30KKwordm9pZCBzaV9wbXVfc3Byb21fZW5hYmxlKHNpX3QgKnNpaCwgYm9vbCBlbmFibGUpCit7CisJY2hpcGNyZWdzX3QgKmNjOworCXVpbnQgb3JpZ2lkeDsKKworCS8qIFJlbWVtYmVyIG9yaWdpbmFsIGNvcmUgYmVmb3JlIHN3aXRjaCB0byBjaGlwYyAqLworCW9yaWdpZHggPSBhaV9jb3JlaWR4KHNpaCk7CisJY2MgPSBhaV9zZXRjb3JlaWR4KHNpaCwgU0lfQ0NfSURYKTsKKworCS8qIFJldHVybiB0byBvcmlnaW5hbCBjb3JlICovCisJYWlfc2V0Y29yZWlkeChzaWgsIG9yaWdpZHgpOworfQorCisvKiBSZWFkL3dyaXRlIGEgY2hpcGNvbnRyb2wgcmVnICovCit1MzIgc2lfcG11X2NoaXBjb250cm9sKHNpX3QgKnNpaCwgdWludCByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKQoreworCWFpX2NvcmVyZWcoc2loLCBTSV9DQ19JRFgsIG9mZnNldG9mKGNoaXBjcmVnc190LCBjaGlwY29udHJvbF9hZGRyKSwgfjAsCisJCSAgIHJlZyk7CisJcmV0dXJuIGFpX2NvcmVyZWcoc2loLCBTSV9DQ19JRFgsCisJCQkgIG9mZnNldG9mKGNoaXBjcmVnc190LCBjaGlwY29udHJvbF9kYXRhKSwgbWFzaywgdmFsKTsKK30KKworLyogUmVhZC93cml0ZSBhIHJlZ2NvbnRyb2wgcmVnICovCit1MzIgc2lfcG11X3JlZ2NvbnRyb2woc2lfdCAqc2loLCB1aW50IHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpCit7CisJYWlfY29yZXJlZyhzaWgsIFNJX0NDX0lEWCwgb2Zmc2V0b2YoY2hpcGNyZWdzX3QsIHJlZ2NvbnRyb2xfYWRkciksIH4wLAorCQkgICByZWcpOworCXJldHVybiBhaV9jb3JlcmVnKHNpaCwgU0lfQ0NfSURYLAorCQkJICBvZmZzZXRvZihjaGlwY3JlZ3NfdCwgcmVnY29udHJvbF9kYXRhKSwgbWFzaywgdmFsKTsKK30KKworLyogUmVhZC93cml0ZSBhIHBsbGNvbnRyb2wgcmVnICovCit1MzIgc2lfcG11X3BsbGNvbnRyb2woc2lfdCAqc2loLCB1aW50IHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpCit7CisJYWlfY29yZXJlZyhzaWgsIFNJX0NDX0lEWCwgb2Zmc2V0b2YoY2hpcGNyZWdzX3QsIHBsbGNvbnRyb2xfYWRkciksIH4wLAorCQkgICByZWcpOworCXJldHVybiBhaV9jb3JlcmVnKHNpaCwgU0lfQ0NfSURYLAorCQkJICBvZmZzZXRvZihjaGlwY3JlZ3NfdCwgcGxsY29udHJvbF9kYXRhKSwgbWFzaywgdmFsKTsKK30KKworLyogUE1VIFBMTCB1cGRhdGUgKi8KK3ZvaWQgc2lfcG11X3BsbHVwZChzaV90ICpzaWgpCit7CisJYWlfY29yZXJlZyhzaWgsIFNJX0NDX0lEWCwgb2Zmc2V0b2YoY2hpcGNyZWdzX3QsIHBtdWNvbnRyb2wpLAorCQkgICBQQ1RMX1BMTF9QTExDVExfVVBELCBQQ1RMX1BMTF9QTExDVExfVVBEKTsKK30KKworLyogcXVlcnkgYWxwL3h0YWwgY2xvY2sgZnJlcXVlbmN5ICovCit1MzIgc2lfcG11X2FscF9jbG9jayhzaV90ICpzaWgpCit7CisJY2hpcGNyZWdzX3QgKmNjOworCXVpbnQgb3JpZ2lkeDsKKwl1MzIgY2xvY2sgPSBBTFBfQ0xPQ0s7CisKKwkvKiBiYWlsIG91dCB3aXRoIGRlZmF1bHQgKi8KKwlpZiAoIVBNVUNUTF9FTkFCKHNpaCkpCisJCXJldHVybiBjbG9jazsKKworCS8qIFJlbWVtYmVyIG9yaWdpbmFsIGNvcmUgYmVmb3JlIHN3aXRjaCB0byBjaGlwYyAqLworCW9yaWdpZHggPSBhaV9jb3JlaWR4KHNpaCk7CisJY2MgPSBhaV9zZXRjb3JlaWR4KHNpaCwgU0lfQ0NfSURYKTsKKworCXN3aXRjaCAoc2loLT5jaGlwKSB7CisJY2FzZSBCQ000MzIyNF9DSElQX0lEOgorCWNhc2UgQkNNNDMyMjVfQ0hJUF9JRDoKKwljYXNlIEJDTTQzNDIxX0NISVBfSUQ6CisJY2FzZSBCQ000MzIzNV9DSElQX0lEOgorCWNhc2UgQkNNNDMyMzZfQ0hJUF9JRDoKKwljYXNlIEJDTTQzMjM4X0NISVBfSUQ6CisJY2FzZSBCQ000MzMxX0NISVBfSUQ6CisJY2FzZSBCQ002MzYyX0NISVBfSUQ6CisJY2FzZSBCQ000NzE2X0NISVBfSUQ6CisJY2FzZSBCQ000NzQ4X0NISVBfSUQ6CisJY2FzZSBCQ000NzE2Ml9DSElQX0lEOgorCWNhc2UgQkNNNDMxM19DSElQX0lEOgorCWNhc2UgQkNNNTM1N19DSElQX0lEOgorCQkvKiBhbHdheXMgMjBNaHogKi8KKwkJY2xvY2sgPSAyMDAwMCAqIDEwMDA7CisJCWJyZWFrOworCWNhc2UgQkNNNDMyOV9DSElQX0lEOgorCWNhc2UgQkNNNDMxOV9DSElQX0lEOgorCWNhc2UgQkNNNDMzNl9DSElQX0lEOgorCWNhc2UgQkNNNDMzMF9DSElQX0lEOgorCisJCWNsb2NrID0gc2lfcG11MV9hbHBjbGswKHNpaCwgY2MpOworCQlicmVhazsKKwljYXNlIEJDTTUzNTZfQ0hJUF9JRDoKKwkJLyogYWx3YXlzIDI1TWh6ICovCisJCWNsb2NrID0gMjUwMDAgKiAxMDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwkvKiBSZXR1cm4gdG8gb3JpZ2luYWwgY29yZSAqLworCWFpX3NldGNvcmVpZHgoc2loLCBvcmlnaWR4KTsKKwlyZXR1cm4gY2xvY2s7Cit9CisKK3ZvaWQgc2lfcG11X3NwdXJhdm9pZChzaV90ICpzaWgsIHU4IHNwdXJhdm9pZCkKK3sKKwljaGlwY3JlZ3NfdCAqY2M7CisJdWludCBvcmlnaWR4LCBpbnRyX3ZhbDsKKwl1MzIgdG1wID0gMDsKKworCS8qIFJlbWVtYmVyIG9yaWdpbmFsIGNvcmUgYmVmb3JlIHN3aXRjaCB0byBjaGlwYyAqLworCWNjID0gKGNoaXBjcmVnc190ICopIGFpX3N3aXRjaF9jb3JlKHNpaCwgQ0NfQ09SRV9JRCwgJm9yaWdpZHgsCisJCQkJCSAgICAmaW50cl92YWwpOworCisJLyogZm9yY2UgdGhlIEhUIG9mZiAgKi8KKwlpZiAoc2loLT5jaGlwID09IEJDTTQzMzZfQ0hJUF9JRCkgeworCQl0bXAgPSBSX1JFRygmY2MtPm1heF9yZXNfbWFzayk7CisJCXRtcCAmPSB+UkVTNDMzNl9IVF9BVkFJTDsKKwkJV19SRUcoJmNjLT5tYXhfcmVzX21hc2ssIHRtcCk7CisJCS8qIHdhaXQgZm9yIHRoZSBodCB0byByZWFsbHkgZ28gYXdheSAqLworCQlTUElOV0FJVCgoKFJfUkVHKCZjYy0+Y2xrX2N0bF9zdCkgJiBDQ1NfSFRBVkFJTCkgPT0gMCksCisJCQkgMTAwMDApOworCX0KKworCS8qIHVwZGF0ZSB0aGUgcGxsIGNoYW5nZXMgKi8KKwlzaV9wbXVfc3B1cmF2b2lkX3BsbHVwZGF0ZShzaWgsIGNjLCBzcHVyYXZvaWQpOworCisJLyogZW5hYmxlIEhUIGJhY2sgb24gICovCisJaWYgKHNpaC0+Y2hpcCA9PSBCQ000MzM2X0NISVBfSUQpIHsKKwkJdG1wID0gUl9SRUcoJmNjLT5tYXhfcmVzX21hc2spOworCQl0bXAgfD0gUkVTNDMzNl9IVF9BVkFJTDsKKwkJV19SRUcoJmNjLT5tYXhfcmVzX21hc2ssIHRtcCk7CisJfQorCisJLyogUmV0dXJuIHRvIG9yaWdpbmFsIGNvcmUgKi8KKwlhaV9yZXN0b3JlX2NvcmUoc2loLCBvcmlnaWR4LCBpbnRyX3ZhbCk7Cit9CisKKy8qIGluaXRpYWxpemUgUE1VICovCit2b2lkIHNpX3BtdV9pbml0KHNpX3QgKnNpaCkKK3sKKwljaGlwY3JlZ3NfdCAqY2M7CisJdWludCBvcmlnaWR4OworCisJLyogUmVtZW1iZXIgb3JpZ2luYWwgY29yZSBiZWZvcmUgc3dpdGNoIHRvIGNoaXBjICovCisJb3JpZ2lkeCA9IGFpX2NvcmVpZHgoc2loKTsKKwljYyA9IGFpX3NldGNvcmVpZHgoc2loLCBTSV9DQ19JRFgpOworCisJaWYgKHNpaC0+cG11cmV2ID09IDEpCisJCUFORF9SRUcoJmNjLT5wbXVjb250cm9sLCB+UENUTF9OT0lMUF9PTl9XQUlUKTsKKwllbHNlIGlmIChzaWgtPnBtdXJldiA+PSAyKQorCQlPUl9SRUcoJmNjLT5wbXVjb250cm9sLCBQQ1RMX05PSUxQX09OX1dBSVQpOworCisJaWYgKChzaWgtPmNoaXAgPT0gQkNNNDMyOV9DSElQX0lEKSAmJiAoc2loLT5jaGlwcmV2ID09IDIpKSB7CisJCS8qIEZpeCBmb3IgNDMyOWIwIGJhZCBMUE9NIHN0YXRlLiAqLworCQlXX1JFRygmY2MtPnJlZ2NvbnRyb2xfYWRkciwgMik7CisJCU9SX1JFRygmY2MtPnJlZ2NvbnRyb2xfZGF0YSwgMHgxMDApOworCisJCVdfUkVHKCZjYy0+cmVnY29udHJvbF9hZGRyLCAzKTsKKwkJT1JfUkVHKCZjYy0+cmVnY29udHJvbF9kYXRhLCAweDQpOworCX0KKworCS8qIFJldHVybiB0byBvcmlnaW5hbCBjb3JlICovCisJYWlfc2V0Y29yZWlkeChzaWgsIG9yaWdpZHgpOworfQorCisvKiBpbml0aWFsaXplIFBNVSBjaGlwIGNvbnRyb2xzIGFuZCBvdGhlciBjaGlwIGxldmVsIHN0dWZmICovCit2b2lkIHNpX3BtdV9jaGlwX2luaXQoc2lfdCAqc2loKQoreworCXVpbnQgb3JpZ2lkeDsKKworCS8qIEdhdGUgb2ZmIFNQUk9NIGNsb2NrIGFuZCBjaGlwIHNlbGVjdCBzaWduYWxzICovCisJc2lfcG11X3Nwcm9tX2VuYWJsZShzaWgsIGZhbHNlKTsKKworCS8qIFJlbWVtYmVyIG9yaWdpbmFsIGNvcmUgKi8KKwlvcmlnaWR4ID0gYWlfY29yZWlkeChzaWgpOworCisJLyogUmV0dXJuIHRvIG9yaWdpbmFsIGNvcmUgKi8KKwlhaV9zZXRjb3JlaWR4KHNpaCwgb3JpZ2lkeCk7Cit9CisKKy8qIGluaXRpYWxpemUgUE1VIHN3aXRjaC9yZWd1bGF0b3JzICovCit2b2lkIHNpX3BtdV9zd3JlZ19pbml0KHNpX3QgKnNpaCkKK3sKKwlzd2l0Y2ggKHNpaC0+Y2hpcCkgeworCWNhc2UgQkNNNDMzNl9DSElQX0lEOgorCQkvKiBSZWR1Y2UgQ0xETyBQV00gb3V0cHV0IHZvbHRhZ2UgdG8gMS4yViAqLworCQlzaV9wbXVfc2V0X2xkb192b2x0YWdlKHNpaCwgU0VUX0xET19WT0xUQUdFX0NMRE9fUFdNLCAweGUpOworCQkvKiBSZWR1Y2UgQ0xETyBCVVJTVCBvdXRwdXQgdm9sdGFnZSB0byAxLjJWICovCisJCXNpX3BtdV9zZXRfbGRvX3ZvbHRhZ2Uoc2loLCBTRVRfTERPX1ZPTFRBR0VfQ0xET19CVVJTVCwKKwkJCQkgICAgICAgMHhlKTsKKwkJLyogUmVkdWNlIExOTERPMSBvdXRwdXQgdm9sdGFnZSB0byAxLjJWICovCisJCXNpX3BtdV9zZXRfbGRvX3ZvbHRhZ2Uoc2loLCBTRVRfTERPX1ZPTFRBR0VfTE5MRE8xLCAweGUpOworCQlpZiAoc2loLT5jaGlwcmV2ID09IDApCisJCQlzaV9wbXVfcmVnY29udHJvbChzaWgsIDIsIDB4NDAwMDAwLCAweDQwMDAwMCk7CisJCWJyZWFrOworCisJY2FzZSBCQ000MzMwX0NISVBfSUQ6CisJCS8qIENCVUNLIFZvbHRhZ2UgaXMgMS44IGJ5IGRlZmF1bHQgYW5kIHNldCB0aGF0IHRvIDEuNSAqLworCQlzaV9wbXVfc2V0X2xkb192b2x0YWdlKHNpaCwgU0VUX0xET19WT0xUQUdFX0NCVUNLX1BXTSwgMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworLyogaW5pdGlhbGl6ZSBQTEwgKi8KK3ZvaWQgc2lfcG11X3BsbF9pbml0KHNpX3QgKnNpaCwgdWludCB4dGFsZnJlcSkKK3sKKwljaGlwY3JlZ3NfdCAqY2M7CisJdWludCBvcmlnaWR4OworCisJLyogUmVtZW1iZXIgb3JpZ2luYWwgY29yZSBiZWZvcmUgc3dpdGNoIHRvIGNoaXBjICovCisJb3JpZ2lkeCA9IGFpX2NvcmVpZHgoc2loKTsKKwljYyA9IGFpX3NldGNvcmVpZHgoc2loLCBTSV9DQ19JRFgpOworCisJc3dpdGNoIChzaWgtPmNoaXApIHsKKwljYXNlIEJDTTQzMjlfQ0hJUF9JRDoKKwkJaWYgKHh0YWxmcmVxID09IDApCisJCQl4dGFsZnJlcSA9IDM4NDAwOworCQlzaV9wbXUxX3BsbGluaXQwKHNpaCwgY2MsIHh0YWxmcmVxKTsKKwkJYnJlYWs7CisJY2FzZSBCQ000MzEzX0NISVBfSUQ6CisJY2FzZSBCQ000MzIyNF9DSElQX0lEOgorCWNhc2UgQkNNNDMyMjVfQ0hJUF9JRDoKKwljYXNlIEJDTTQzNDIxX0NISVBfSUQ6CisJY2FzZSBCQ000MzIzNV9DSElQX0lEOgorCWNhc2UgQkNNNDMyMzZfQ0hJUF9JRDoKKwljYXNlIEJDTTQzMjM4X0NISVBfSUQ6CisJY2FzZSBCQ000MzMxX0NISVBfSUQ6CisJY2FzZSBCQ002MzYyX0NISVBfSUQ6CisJCS8qID8/PyAqLworCQlicmVhazsKKwljYXNlIEJDTTQzMTlfQ0hJUF9JRDoKKwljYXNlIEJDTTQzMzZfQ0hJUF9JRDoKKwljYXNlIEJDTTQzMzBfQ0hJUF9JRDoKKwkJc2lfcG11MV9wbGxpbml0MChzaWgsIGNjLCB4dGFsZnJlcSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCS8qIFJldHVybiB0byBvcmlnaW5hbCBjb3JlICovCisJYWlfc2V0Y29yZWlkeChzaWgsIG9yaWdpZHgpOworfQorCisvKiBpbml0aWFsaXplIFBNVSByZXNvdXJjZXMgKi8KK3ZvaWQgc2lfcG11X3Jlc19pbml0KHNpX3QgKnNpaCkKK3sKKwljaGlwY3JlZ3NfdCAqY2M7CisJdWludCBvcmlnaWR4OworCWNvbnN0IHBtdV9yZXNfdXBkb3duX3QgKnBtdV9yZXNfdXBkb3duX3RhYmxlID0gTlVMTDsKKwl1aW50IHBtdV9yZXNfdXBkb3duX3RhYmxlX3N6ID0gMDsKKwljb25zdCBwbXVfcmVzX2RlcGVuZF90ICpwbXVfcmVzX2RlcGVuZF90YWJsZSA9IE5VTEw7CisJdWludCBwbXVfcmVzX2RlcGVuZF90YWJsZV9zeiA9IDA7CisJdTMyIG1pbl9tYXNrID0gMCwgbWF4X21hc2sgPSAwOworCWNoYXIgbmFtZVs4XSwgKnZhbDsKKwl1aW50IGksIHJzcmNzOworCisJLyogUmVtZW1iZXIgb3JpZ2luYWwgY29yZSBiZWZvcmUgc3dpdGNoIHRvIGNoaXBjICovCisJb3JpZ2lkeCA9IGFpX2NvcmVpZHgoc2loKTsKKwljYyA9IGFpX3NldGNvcmVpZHgoc2loLCBTSV9DQ19JRFgpOworCisJc3dpdGNoIChzaWgtPmNoaXApIHsKKwljYXNlIEJDTTQzMjlfQ0hJUF9JRDoKKwkJLyogT3B0aW1pemUgcmVzb3VyY2VzIHVwL2Rvd24gdGltZXJzICovCisJCWlmIChJU1NJTV9FTkFCKHNpaCkpIHsKKwkJCXBtdV9yZXNfdXBkb3duX3RhYmxlID0gTlVMTDsKKwkJCXBtdV9yZXNfdXBkb3duX3RhYmxlX3N6ID0gMDsKKwkJfSBlbHNlIHsKKwkJCXBtdV9yZXNfdXBkb3duX3RhYmxlID0gYmNtNDMyOV9yZXNfdXBkb3duOworCQkJcG11X3Jlc191cGRvd25fdGFibGVfc3ogPQorCQkJCUFSUkFZX1NJWkUoYmNtNDMyOV9yZXNfdXBkb3duKTsKKwkJfQorCQkvKiBPcHRpbWl6ZSByZXNvdXJjZXMgZGVwZW5kZW5jaWVzICovCisJCXBtdV9yZXNfZGVwZW5kX3RhYmxlID0gYmNtNDMyOV9yZXNfZGVwZW5kOworCQlwbXVfcmVzX2RlcGVuZF90YWJsZV9zeiA9IEFSUkFZX1NJWkUoYmNtNDMyOV9yZXNfZGVwZW5kKTsKKwkJYnJlYWs7CisKKwljYXNlIEJDTTQzMTlfQ0hJUF9JRDoKKwkJLyogT3B0aW1pemUgcmVzb3VyY2VzIHVwL2Rvd24gdGltZXJzICovCisJCWlmIChJU1NJTV9FTkFCKHNpaCkpIHsKKwkJCXBtdV9yZXNfdXBkb3duX3RhYmxlID0gYmNtNDMxOWEwX3Jlc191cGRvd25fcXQ7CisJCQlwbXVfcmVzX3VwZG93bl90YWJsZV9zeiA9CisJCQkgICAgQVJSQVlfU0laRShiY200MzE5YTBfcmVzX3VwZG93bl9xdCk7CisJCX0gZWxzZSB7CisJCQlwbXVfcmVzX3VwZG93bl90YWJsZSA9IGJjbTQzMTlhMF9yZXNfdXBkb3duOworCQkJcG11X3Jlc191cGRvd25fdGFibGVfc3ogPQorCQkJICAgIEFSUkFZX1NJWkUoYmNtNDMxOWEwX3Jlc191cGRvd24pOworCQl9CisJCS8qIE9wdGltaXplIHJlc291cmNlcyBkZXBlbmRhbmNpZXMgbWFza3MgKi8KKwkJcG11X3Jlc19kZXBlbmRfdGFibGUgPSBiY200MzE5YTBfcmVzX2RlcGVuZDsKKwkJcG11X3Jlc19kZXBlbmRfdGFibGVfc3ogPSBBUlJBWV9TSVpFKGJjbTQzMTlhMF9yZXNfZGVwZW5kKTsKKwkJYnJlYWs7CisKKwljYXNlIEJDTTQzMzZfQ0hJUF9JRDoKKwkJLyogT3B0aW1pemUgcmVzb3VyY2VzIHVwL2Rvd24gdGltZXJzICovCisJCWlmIChJU1NJTV9FTkFCKHNpaCkpIHsKKwkJCXBtdV9yZXNfdXBkb3duX3RhYmxlID0gYmNtNDMzNmEwX3Jlc191cGRvd25fcXQ7CisJCQlwbXVfcmVzX3VwZG93bl90YWJsZV9zeiA9CisJCQkgICAgQVJSQVlfU0laRShiY200MzM2YTBfcmVzX3VwZG93bl9xdCk7CisJCX0gZWxzZSB7CisJCQlwbXVfcmVzX3VwZG93bl90YWJsZSA9IGJjbTQzMzZhMF9yZXNfdXBkb3duOworCQkJcG11X3Jlc191cGRvd25fdGFibGVfc3ogPQorCQkJICAgIEFSUkFZX1NJWkUoYmNtNDMzNmEwX3Jlc191cGRvd24pOworCQl9CisJCS8qIE9wdGltaXplIHJlc291cmNlcyBkZXBlbmRhbmNpZXMgbWFza3MgKi8KKwkJcG11X3Jlc19kZXBlbmRfdGFibGUgPSBiY200MzM2YTBfcmVzX2RlcGVuZDsKKwkJcG11X3Jlc19kZXBlbmRfdGFibGVfc3ogPSBBUlJBWV9TSVpFKGJjbTQzMzZhMF9yZXNfZGVwZW5kKTsKKwkJYnJlYWs7CisKKwljYXNlIEJDTTQzMzBfQ0hJUF9JRDoKKwkJLyogT3B0aW1pemUgcmVzb3VyY2VzIHVwL2Rvd24gdGltZXJzICovCisJCWlmIChJU1NJTV9FTkFCKHNpaCkpIHsKKwkJCXBtdV9yZXNfdXBkb3duX3RhYmxlID0gYmNtNDMzMGEwX3Jlc191cGRvd25fcXQ7CisJCQlwbXVfcmVzX3VwZG93bl90YWJsZV9zeiA9CisJCQkgICAgQVJSQVlfU0laRShiY200MzMwYTBfcmVzX3VwZG93bl9xdCk7CisJCX0gZWxzZSB7CisJCQlwbXVfcmVzX3VwZG93bl90YWJsZSA9IGJjbTQzMzBhMF9yZXNfdXBkb3duOworCQkJcG11X3Jlc191cGRvd25fdGFibGVfc3ogPQorCQkJICAgIEFSUkFZX1NJWkUoYmNtNDMzMGEwX3Jlc191cGRvd24pOworCQl9CisJCS8qIE9wdGltaXplIHJlc291cmNlcyBkZXBlbmRhbmNpZXMgbWFza3MgKi8KKwkJcG11X3Jlc19kZXBlbmRfdGFibGUgPSBiY200MzMwYTBfcmVzX2RlcGVuZDsKKwkJcG11X3Jlc19kZXBlbmRfdGFibGVfc3ogPSBBUlJBWV9TSVpFKGJjbTQzMzBhMF9yZXNfZGVwZW5kKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwkvKiAjIHJlc291cmNlcyAqLworCXJzcmNzID0gKHNpaC0+cG11Y2FwcyAmIFBDQVBfUkNfTUFTSykgPj4gUENBUF9SQ19TSElGVDsKKworCS8qIFByb2dyYW0gdXAvZG93biB0aW1lcnMgKi8KKwl3aGlsZSAocG11X3Jlc191cGRvd25fdGFibGVfc3otLSkgeworCQlXX1JFRygmY2MtPnJlc190YWJsZV9zZWwsCisJCSAgICAgIHBtdV9yZXNfdXBkb3duX3RhYmxlW3BtdV9yZXNfdXBkb3duX3RhYmxlX3N6XS5yZXNudW0pOworCQlXX1JFRygmY2MtPnJlc191cGRuX3RpbWVyLAorCQkgICAgICBwbXVfcmVzX3VwZG93bl90YWJsZVtwbXVfcmVzX3VwZG93bl90YWJsZV9zel0udXBkb3duKTsKKwl9CisJLyogQXBwbHkgbnZyYW0gb3ZlcnJpZGVzIHRvIHVwL2Rvd24gdGltZXJzICovCisJZm9yIChpID0gMDsgaSA8IHJzcmNzOyBpKyspIHsKKwkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiciVkdCIsIGkpOworCQl2YWwgPSBnZXR2YXIoTlVMTCwgbmFtZSk7CisJCWlmICh2YWwgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQlXX1JFRygmY2MtPnJlc190YWJsZV9zZWwsICh1MzIpIGkpOworCQlXX1JFRygmY2MtPnJlc191cGRuX3RpbWVyLAorCQkgICAgICAodTMyKSBzaW1wbGVfc3RydG91bCh2YWwsIE5VTEwsIDApKTsKKwl9CisKKwkvKiBQcm9ncmFtIHJlc291cmNlIGRlcGVuZGVuY2llcyB0YWJsZSAqLworCXdoaWxlIChwbXVfcmVzX2RlcGVuZF90YWJsZV9zei0tKSB7CisJCWlmIChwbXVfcmVzX2RlcGVuZF90YWJsZVtwbXVfcmVzX2RlcGVuZF90YWJsZV9zel0uZmlsdGVyICE9IE5VTEwKKwkJICAgICYmICEocG11X3Jlc19kZXBlbmRfdGFibGVbcG11X3Jlc19kZXBlbmRfdGFibGVfc3pdLgorCQkJIGZpbHRlcikgKHNpaCkpCisJCQljb250aW51ZTsKKwkJZm9yIChpID0gMDsgaSA8IHJzcmNzOyBpKyspIHsKKwkJCWlmICgocG11X3Jlc19kZXBlbmRfdGFibGVbcG11X3Jlc19kZXBlbmRfdGFibGVfc3pdLgorCQkJICAgICByZXNfbWFzayAmIFBNVVJFU19CSVQoaSkpID09IDApCisJCQkJY29udGludWU7CisJCQlXX1JFRygmY2MtPnJlc190YWJsZV9zZWwsIGkpOworCQkJc3dpdGNoIChwbXVfcmVzX2RlcGVuZF90YWJsZVtwbXVfcmVzX2RlcGVuZF90YWJsZV9zel0uCisJCQkJYWN0aW9uKSB7CisJCQljYXNlIFJFU19ERVBFTkRfU0VUOgorCQkJCVdfUkVHKCZjYy0+cmVzX2RlcF9tYXNrLAorCQkJCSAgICAgIHBtdV9yZXNfZGVwZW5kX3RhYmxlCisJCQkJICAgICAgW3BtdV9yZXNfZGVwZW5kX3RhYmxlX3N6XS5kZXBlbmRfbWFzayk7CisJCQkJYnJlYWs7CisJCQljYXNlIFJFU19ERVBFTkRfQUREOgorCQkJCU9SX1JFRygmY2MtPnJlc19kZXBfbWFzaywKKwkJCQkgICAgICAgcG11X3Jlc19kZXBlbmRfdGFibGUKKwkJCQkgICAgICAgW3BtdV9yZXNfZGVwZW5kX3RhYmxlX3N6XS5kZXBlbmRfbWFzayk7CisJCQkJYnJlYWs7CisJCQljYXNlIFJFU19ERVBFTkRfUkVNT1ZFOgorCQkJCUFORF9SRUcoJmNjLT5yZXNfZGVwX21hc2ssCisJCQkJCX5wbXVfcmVzX2RlcGVuZF90YWJsZQorCQkJCQlbcG11X3Jlc19kZXBlbmRfdGFibGVfc3pdLmRlcGVuZF9tYXNrKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJLyogQXBwbHkgbnZyYW0gb3ZlcnJpZGVzIHRvIGRlcGVuZGFuY2llcyBtYXNrcyAqLworCWZvciAoaSA9IDA7IGkgPCByc3JjczsgaSsrKSB7CisJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgInIlZGQiLCBpKTsKKwkJdmFsID0gZ2V0dmFyKE5VTEwsIG5hbWUpOworCQlpZiAodmFsID09IE5VTEwpCisJCQljb250aW51ZTsKKwkJV19SRUcoJmNjLT5yZXNfdGFibGVfc2VsLCAodTMyKSBpKTsKKwkJV19SRUcoJmNjLT5yZXNfZGVwX21hc2ssCisJCSAgICAgICh1MzIpIHNpbXBsZV9zdHJ0b3VsKHZhbCwgTlVMTCwgMCkpOworCX0KKworCS8qIERldGVybWluZSBtaW4vbWF4IHJzcmMgbWFza3MgKi8KKwlzaV9wbXVfcmVzX21hc2tzKHNpaCwgJm1pbl9tYXNrLCAmbWF4X21hc2spOworCisJLyogSXQgaXMgcmVxdWlyZWQgdG8gcHJvZ3JhbSBtYXhfbWFzayBmaXJzdCBhbmQgdGhlbiBtaW5fbWFzayAqLworCisJLyogUHJvZ3JhbSBtYXggcmVzb3VyY2UgbWFzayAqLworCisJaWYgKG1heF9tYXNrKQorCQlXX1JFRygmY2MtPm1heF9yZXNfbWFzaywgbWF4X21hc2spOworCisJLyogUHJvZ3JhbSBtaW4gcmVzb3VyY2UgbWFzayAqLworCisJaWYgKG1pbl9tYXNrKQorCQlXX1JFRygmY2MtPm1pbl9yZXNfbWFzaywgbWluX21hc2spOworCisJLyogQWRkIHNvbWUgZGVsYXk7IGFsbG93IHJlc291cmNlcyB0byBjb21lIHVwIGFuZCBzZXR0bGUuICovCisJbWRlbGF5KDIpOworCisJLyogUmV0dXJuIHRvIG9yaWdpbmFsIGNvcmUgKi8KKwlhaV9zZXRjb3JlaWR4KHNpaCwgb3JpZ2lkeCk7Cit9CisKK3UzMiBzaV9wbXVfbWVhc3VyZV9hbHBjbGsoc2lfdCAqc2loKQoreworCWNoaXBjcmVnc190ICpjYzsKKwl1aW50IG9yaWdpZHg7CisJdTMyIGFscF9raHo7CisKKwlpZiAoc2loLT5wbXVyZXYgPCAxMCkKKwkJcmV0dXJuIDA7CisKKwkvKiBSZW1lbWJlciBvcmlnaW5hbCBjb3JlIGJlZm9yZSBzd2l0Y2ggdG8gY2hpcGMgKi8KKwlvcmlnaWR4ID0gYWlfY29yZWlkeChzaWgpOworCWNjID0gYWlfc2V0Y29yZWlkeChzaWgsIFNJX0NDX0lEWCk7CisKKwlpZiAoUl9SRUcoJmNjLT5wbXVzdGF0dXMpICYgUFNUX0VYVExQT0FWQUlMKSB7CisJCXUzMiBpbHBfY3RyLCBhbHBfaHo7CisKKwkJLyoKKwkJICogRW5hYmxlIHRoZSByZWcgdG8gbWVhc3VyZSB0aGUgZnJlcSwKKwkJICogaW4gY2FzZSBpdCB3YXMgZGlzYWJsZWQgYmVmb3JlCisJCSAqLworCQlXX1JFRygmY2MtPnBtdV94dGFsZnJlcSwKKwkJICAgICAgMVUgPDwgUE1VX1hUQUxGUkVRX1JFR19NRUFTVVJFX1NISUZUKTsKKworCQkvKiBEZWxheSBmb3Igd2VsbCBvdmVyIDQgSUxQIGNsb2NrcyAqLworCQl1ZGVsYXkoMTAwMCk7CisKKwkJLyogUmVhZCB0aGUgbGF0Y2hlZCBudW1iZXIgb2YgQUxQIHRpY2tzIHBlciA0IElMUCB0aWNrcyAqLworCQlpbHBfY3RyID0KKwkJICAgIFJfUkVHKCZjYy0+cG11X3h0YWxmcmVxKSAmIFBNVV9YVEFMRlJFUV9SRUdfSUxQQ1RSX01BU0s7CisKKwkJLyoKKwkJICogVHVybiBvZmYgdGhlIFBNVV9YVEFMRlJFUV9SRUdfTUVBU1VSRV9TSElGVAorCQkgKiBiaXQgdG8gc2F2ZSBwb3dlcgorCQkgKi8KKwkJV19SRUcoJmNjLT5wbXVfeHRhbGZyZXEsIDApOworCisJCS8qIENhbGN1bGF0ZSBBTFAgZnJlcXVlbmN5ICovCisJCWFscF9oeiA9IChpbHBfY3RyICogRVhUX0lMUF9IWikgLyA0OworCisJCS8qCisJCSAqIFJvdW5kIHRvIG5lYXJlc3QgMTAwS0h6LCBhbmQgYXQKKwkJICogdGhlIHNhbWUgdGltZSBjb252ZXJ0IHRvIEtIegorCQkgKi8KKwkJYWxwX2toeiA9IChhbHBfaHogKyA1MDAwMCkgLyAxMDAwMDAgKiAxMDA7CisJfSBlbHNlCisJCWFscF9raHogPSAwOworCisJLyogUmV0dXJuIHRvIG9yaWdpbmFsIGNvcmUgKi8KKwlhaV9zZXRjb3JlaWR4KHNpaCwgb3JpZ2lkeCk7CisKKwlyZXR1cm4gYWxwX2toejsKK30KKwogYm9vbCBzaV9wbXVfaXNfb3RwX3Bvd2VyZWQoc2lfdCAqc2loKQogewogCXVpbnQgaWR4OwpAQCAtMjQ0Nyw5ICsxODI5LDggQEAKIAlib29sIHN0OwogCiAJLyogUmVtZW1iZXIgb3JpZ2luYWwgY29yZSBiZWZvcmUgc3dpdGNoIHRvIGNoaXBjICovCi0JaWR4ID0gc2lfY29yZWlkeChzaWgpOwotCWNjID0gc2lfc2V0Y29yZWlkeChzaWgsIFNJX0NDX0lEWCk7Ci0JQVNTRVJUKGNjICE9IE5VTEwpOworCWlkeCA9IGFpX2NvcmVpZHgoc2loKTsKKwljYyA9IGFpX3NldGNvcmVpZHgoc2loLCBTSV9DQ19JRFgpOwogCiAJc3dpdGNoIChzaWgtPmNoaXApIHsKIAljYXNlIEJDTTQzMjlfQ0hJUF9JRDoKQEAgLTI0ODYsMTkwICsxODY3LDYzIEBACiAJfQogCiAJLyogUmV0dXJuIHRvIG9yaWdpbmFsIGNvcmUgKi8KLQlzaV9zZXRjb3JlaWR4KHNpaCwgaWR4KTsKKwlhaV9zZXRjb3JlaWR4KHNpaCwgaWR4KTsKIAlyZXR1cm4gc3Q7CiB9CiAKLXZvaWQgc2lfcG11X3Nwcm9tX2VuYWJsZShzaV90ICpzaWgsIGJvb2wgZW5hYmxlKQorLyogcG93ZXIgdXAvZG93biBPVFAgdGhyb3VnaCBQTVUgcmVzb3VyY2VzICovCit2b2lkIHNpX3BtdV9vdHBfcG93ZXIoc2lfdCAqc2loLCBib29sIG9uKQogewogCWNoaXBjcmVnc190ICpjYzsKIAl1aW50IG9yaWdpZHg7CisJdTMyIHJzcmNzID0gMDsJLyogcnNyY3MgdG8gdHVybiBvbi9vZmYgT1RQIHBvd2VyICovCisKKwkvKiBEb24ndCBkbyBhbnl0aGluZyBpZiBPVFAgaXMgZGlzYWJsZWQgKi8KKwlpZiAoYWlfaXNfb3RwX2Rpc2FibGVkKHNpaCkpCisJCXJldHVybjsKIAogCS8qIFJlbWVtYmVyIG9yaWdpbmFsIGNvcmUgYmVmb3JlIHN3aXRjaCB0byBjaGlwYyAqLwotCW9yaWdpZHggPSBzaV9jb3JlaWR4KHNpaCk7Ci0JY2MgPSBzaV9zZXRjb3JlaWR4KHNpaCwgU0lfQ0NfSURYKTsKLQlBU1NFUlQoY2MgIT0gTlVMTCk7Ci0KLQkvKiBSZXR1cm4gdG8gb3JpZ2luYWwgY29yZSAqLwotCXNpX3NldGNvcmVpZHgoc2loLCBvcmlnaWR4KTsKLX0KLQotLyogaW5pdGlhbGl6ZSBQTVUgY2hpcCBjb250cm9scyBhbmQgb3RoZXIgY2hpcCBsZXZlbCBzdHVmZiAqLwotdm9pZCBzaV9wbXVfY2hpcF9pbml0KHNpX3QgKnNpaCkKLXsKLQl1aW50IG9yaWdpZHg7Ci0KLQlBU1NFUlQoc2loLT5jY2NhcHMgJiBDQ19DQVBfUE1VKTsKLQotI2lmZGVmIENISVBDX1VBUlRfQUxXQVlTX09OCi0Jc2lfY29yZXJlZyhzaWgsIFNJX0NDX0lEWCwgb2Zmc2V0b2YoY2hpcGNyZWdzX3QsIGNsa19jdGxfc3QpLAotCQkgICBDQ1NfRk9SQ0VBTFAsIENDU19GT1JDRUFMUCk7Ci0jZW5kaWYJCQkJLyogQ0hJUENfVUFSVF9BTFdBWVNfT04gKi8KLQotCS8qIEdhdGUgb2ZmIFNQUk9NIGNsb2NrIGFuZCBjaGlwIHNlbGVjdCBzaWduYWxzICovCi0Jc2lfcG11X3Nwcm9tX2VuYWJsZShzaWgsIGZhbHNlKTsKLQotCS8qIFJlbWVtYmVyIG9yaWdpbmFsIGNvcmUgKi8KLQlvcmlnaWR4ID0gc2lfY29yZWlkeChzaWgpOwotCi0JLyogUmV0dXJuIHRvIG9yaWdpbmFsIGNvcmUgKi8KLQlzaV9zZXRjb3JlaWR4KHNpaCwgb3JpZ2lkeCk7Ci19Ci0KLS8qIGluaXRpYWxpemUgUE1VIHN3aXRjaC9yZWd1bGF0b3JzICovCi12b2lkIHNpX3BtdV9zd3JlZ19pbml0KHNpX3QgKnNpaCkKLXsKLQlBU1NFUlQoc2loLT5jY2NhcHMgJiBDQ19DQVBfUE1VKTsKKwlvcmlnaWR4ID0gYWlfY29yZWlkeChzaWgpOworCWNjID0gYWlfc2V0Y29yZWlkeChzaWgsIFNJX0NDX0lEWCk7CiAKIAlzd2l0Y2ggKHNpaC0+Y2hpcCkgewotCWNhc2UgQkNNNDMzNl9DSElQX0lEOgotCQkvKiBSZWR1Y2UgQ0xETyBQV00gb3V0cHV0IHZvbHRhZ2UgdG8gMS4yViAqLwotCQlzaV9wbXVfc2V0X2xkb192b2x0YWdlKHNpaCwgU0VUX0xET19WT0xUQUdFX0NMRE9fUFdNLCAweGUpOwotCQkvKiBSZWR1Y2UgQ0xETyBCVVJTVCBvdXRwdXQgdm9sdGFnZSB0byAxLjJWICovCi0JCXNpX3BtdV9zZXRfbGRvX3ZvbHRhZ2Uoc2loLCBTRVRfTERPX1ZPTFRBR0VfQ0xET19CVVJTVCwKLQkJCQkgICAgICAgMHhlKTsKLQkJLyogUmVkdWNlIExOTERPMSBvdXRwdXQgdm9sdGFnZSB0byAxLjJWICovCi0JCXNpX3BtdV9zZXRfbGRvX3ZvbHRhZ2Uoc2loLCBTRVRfTERPX1ZPTFRBR0VfTE5MRE8xLCAweGUpOwotCQlpZiAoc2loLT5jaGlwcmV2ID09IDApCi0JCQlzaV9wbXVfcmVnY29udHJvbChzaWgsIDIsIDB4NDAwMDAwLCAweDQwMDAwMCk7CisJY2FzZSBCQ000MzI5X0NISVBfSUQ6CisJCXJzcmNzID0gUE1VUkVTX0JJVChSRVM0MzI5X09UUF9QVSk7CiAJCWJyZWFrOwotCisJY2FzZSBCQ000MzE5X0NISVBfSUQ6CisJCXJzcmNzID0gUE1VUkVTX0JJVChSRVM0MzE5X09UUF9QVSk7CisJCWJyZWFrOworCWNhc2UgQkNNNDMzNl9DSElQX0lEOgorCQlyc3JjcyA9IFBNVVJFU19CSVQoUkVTNDMzNl9PVFBfUFUpOworCQlicmVhazsKIAljYXNlIEJDTTQzMzBfQ0hJUF9JRDoKLQkJLyogQ0JVQ0sgVm9sdGFnZSBpcyAxLjggYnkgZGVmYXVsdCBhbmQgc2V0IHRoYXQgdG8gMS41ICovCi0JCXNpX3BtdV9zZXRfbGRvX3ZvbHRhZ2Uoc2loLCBTRVRfTERPX1ZPTFRBR0VfQ0JVQ0tfUFdNLCAwKTsKKwkJcnNyY3MgPSBQTVVSRVNfQklUKFJFUzQzMzBfT1RQX1BVKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQotfQogCi12b2lkIHNpX3BtdV9yYWRpb19lbmFibGUoc2lfdCAqc2loLCBib29sIGVuYWJsZSkKLXsKLQlBU1NFUlQoc2loLT5jY2NhcHMgJiBDQ19DQVBfUE1VKTsKKwlpZiAocnNyY3MgIT0gMCkgeworCQl1MzIgb3RwczsKIAotCXN3aXRjaCAoc2loLT5jaGlwKSB7Ci0JY2FzZSBCQ000MzE5X0NISVBfSUQ6Ci0JCWlmIChlbmFibGUpCi0JCQlzaV93cml0ZV93cmFwcGVycmVnKHNpaCwgQUlfT09CU0VMT1VUQjc0LAotCQkJCQkgICAgKHUzMikgMHg4Njg1ODQpOwotCQllbHNlCi0JCQlzaV93cml0ZV93cmFwcGVycmVnKHNpaCwgQUlfT09CU0VMT1VUQjc0LAotCQkJCQkgICAgKHUzMikgMHgwNjA1ODQpOwotCQlicmVhazsKKwkJLyogRmlndXJlIG91dCB0aGUgZGVwZW5kYW5jaWVzIChleGNsdWRlIG1pbl9yZXNfbWFzaykgKi8KKwkJdTMyIGRlcHMgPSBzaV9wbXVfcmVzX2RlcHMoc2loLCBjYywgcnNyY3MsIHRydWUpOworCQl1MzIgbWluX21hc2sgPSAwLCBtYXhfbWFzayA9IDA7CisJCXNpX3BtdV9yZXNfbWFza3Moc2loLCAmbWluX21hc2ssICZtYXhfbWFzayk7CisJCWRlcHMgJj0gfm1pbl9tYXNrOworCQkvKiBUdXJuIG9uL29mZiB0aGUgcG93ZXIgKi8KKwkJaWYgKG9uKSB7CisJCQlPUl9SRUcoJmNjLT5taW5fcmVzX21hc2ssIChyc3JjcyB8IGRlcHMpKTsKKwkJCVNQSU5XQUlUKCEoUl9SRUcoJmNjLT5yZXNfc3RhdGUpICYgcnNyY3MpLAorCQkJCSBQTVVfTUFYX1RSQU5TSVRJT05fRExZKTsKKwkJfSBlbHNlIHsKKwkJCUFORF9SRUcoJmNjLT5taW5fcmVzX21hc2ssIH4ocnNyY3MgfCBkZXBzKSk7CisJCX0KKworCQlTUElOV0FJVCgoKChvdHBzID0gUl9SRUcoJmNjLT5vdHBzdGF0dXMpKSAmIE9UUFNfUkVBRFkpICE9CisJCQkgIChvbiA/IE9UUFNfUkVBRFkgOiAwKSksIDEwMCk7CiAJfQotfQotCi0vKiBXYWl0IGZvciBhIHBhcnRpY3VsYXIgY2xvY2sgbGV2ZWwgdG8gYmUgb24gdGhlIGJhY2twbGFuZSAqLwotdTMyCi1zaV9wbXVfd2FpdGZvcmNsa19vbl9iYWNrcGxhbmUoc2lfdCAqc2loLCB1MzIgY2xrLCB1MzIgZGVsYXkpCi17Ci0JY2hpcGNyZWdzX3QgKmNjOwotCXVpbnQgb3JpZ2lkeDsKLQotCUFTU0VSVChzaWgtPmNjY2FwcyAmIENDX0NBUF9QTVUpOwotCi0JLyogUmVtZW1iZXIgb3JpZ2luYWwgY29yZSBiZWZvcmUgc3dpdGNoIHRvIGNoaXBjICovCi0Jb3JpZ2lkeCA9IHNpX2NvcmVpZHgoc2loKTsKLQljYyA9IHNpX3NldGNvcmVpZHgoc2loLCBTSV9DQ19JRFgpOwotCUFTU0VSVChjYyAhPSBOVUxMKTsKLQotCWlmIChkZWxheSkKLQkJU1BJTldBSVQoKChSX1JFRygmY2MtPnBtdXN0YXR1cykgJiBjbGspICE9IGNsayksIGRlbGF5KTsKIAogCS8qIFJldHVybiB0byBvcmlnaW5hbCBjb3JlICovCi0Jc2lfc2V0Y29yZWlkeChzaWgsIG9yaWdpZHgpOwotCi0JcmV0dXJuIFJfUkVHKCZjYy0+cG11c3RhdHVzKSAmIGNsazsKLX0KLQotLyoKLSAqIE1lYXN1cmVzIHRoZSBBTFAgY2xvY2sgZnJlcXVlbmN5IGluIEtIei4gIFJldHVybnMgMCBpZiBub3QgcG9zc2libGUuCi0gKiBQb3NzaWJsZSBvbmx5IGlmIFBNVSByZXYgPj0gMTAgYW5kIHRoZXJlIGlzIGFuIGV4dGVybmFsIExQTyAzMjc2OEh6IGNyeXN0YWwuCi0gKi8KLQotI2RlZmluZSBFWFRfSUxQX0haIDMyNzY4Ci0KLXUzMiBzaV9wbXVfbWVhc3VyZV9hbHBjbGsoc2lfdCAqc2loKQotewotCWNoaXBjcmVnc190ICpjYzsKLQl1aW50IG9yaWdpZHg7Ci0JdTMyIGFscF9raHo7Ci0KLQlpZiAoc2loLT5wbXVyZXYgPCAxMCkKLQkJcmV0dXJuIDA7Ci0KLQlBU1NFUlQoc2loLT5jY2NhcHMgJiBDQ19DQVBfUE1VKTsKLQotCS8qIFJlbWVtYmVyIG9yaWdpbmFsIGNvcmUgYmVmb3JlIHN3aXRjaCB0byBjaGlwYyAqLwotCW9yaWdpZHggPSBzaV9jb3JlaWR4KHNpaCk7Ci0JY2MgPSBzaV9zZXRjb3JlaWR4KHNpaCwgU0lfQ0NfSURYKTsKLQlBU1NFUlQoY2MgIT0gTlVMTCk7Ci0KLQlpZiAoUl9SRUcoJmNjLT5wbXVzdGF0dXMpICYgUFNUX0VYVExQT0FWQUlMKSB7Ci0JCXUzMiBpbHBfY3RyLCBhbHBfaHo7Ci0KLQkJLyogRW5hYmxlIHRoZSByZWcgdG8gbWVhc3VyZSB0aGUgZnJlcSwgaW4gY2FzZSBkaXNhYmxlZCBiZWZvcmUgKi8KLQkJV19SRUcoJmNjLT5wbXVfeHRhbGZyZXEsCi0JCSAgICAgIDFVIDw8IFBNVV9YVEFMRlJFUV9SRUdfTUVBU1VSRV9TSElGVCk7Ci0KLQkJLyogRGVsYXkgZm9yIHdlbGwgb3ZlciA0IElMUCBjbG9ja3MgKi8KLQkJdWRlbGF5KDEwMDApOwotCi0JCS8qIFJlYWQgdGhlIGxhdGNoZWQgbnVtYmVyIG9mIEFMUCB0aWNrcyBwZXIgNCBJTFAgdGlja3MgKi8KLQkJaWxwX2N0ciA9Ci0JCSAgICBSX1JFRygmY2MtPnBtdV94dGFsZnJlcSkgJiBQTVVfWFRBTEZSRVFfUkVHX0lMUENUUl9NQVNLOwotCi0JCS8qIFR1cm4gb2ZmIHRoZSBQTVVfWFRBTEZSRVFfUkVHX01FQVNVUkVfU0hJRlQgYml0IHRvIHNhdmUgcG93ZXIgKi8KLQkJV19SRUcoJmNjLT5wbXVfeHRhbGZyZXEsIDApOwotCi0JCS8qIENhbGN1bGF0ZSBBTFAgZnJlcXVlbmN5ICovCi0JCWFscF9oeiA9IChpbHBfY3RyICogRVhUX0lMUF9IWikgLyA0OwotCi0JCS8qIFJvdW5kIHRvIG5lYXJlc3QgMTAwS0h6LCBhbmQgYXQgdGhlIHNhbWUgdGltZSBjb252ZXJ0IHRvIEtIeiAqLwotCQlhbHBfa2h6ID0gKGFscF9oeiArIDUwMDAwKSAvIDEwMDAwMCAqIDEwMDsKLQl9IGVsc2UKLQkJYWxwX2toeiA9IDA7Ci0KLQkvKiBSZXR1cm4gdG8gb3JpZ2luYWwgY29yZSAqLwotCXNpX3NldGNvcmVpZHgoc2loLCBvcmlnaWR4KTsKLQotCXJldHVybiBhbHBfa2h6OwotfQotCi1zdGF0aWMgdm9pZCBzaV9wbXVfc2V0XzQzMzBfcGxsZGl2cyhzaV90ICpzaWgpCi17Ci0JdTMyIEZWQ08gPSBzaV9wbXUxX3BsbGZ2Y28wKHNpaCkgLyAxMDAwOwotCXUzMiBtMWRpdiwgbTJkaXYsIG0zZGl2LCBtNGRpdiwgbTVkaXYsIG02ZGl2OwotCXUzMiBwbGxjMSwgcGxsYzI7Ci0KLQltMmRpdiA9IG0zZGl2ID0gbTRkaXYgPSBtNmRpdiA9IEZWQ08gLyA4MDsKLQltNWRpdiA9IEZWQ08gLyAxNjA7Ci0KLQlpZiAoQ1NUNDMzMF9DSElQTU9ERV9TRElPRChzaWgtPmNoaXBzdCkpCi0JCW0xZGl2ID0gRlZDTyAvIDgwOwotCWVsc2UKLQkJbTFkaXYgPSBGVkNPIC8gOTA7Ci0JcGxsYzEgPQotCSAgICAobTFkaXYgPDwgUE1VMV9QTEwwX1BDMV9NMURJVl9TSElGVCkgfCAobTJkaXYgPDwKLQkJCQkJCSAgICBQTVUxX1BMTDBfUEMxX00yRElWX1NISUZUKSB8Ci0JICAgIChtM2RpdiA8PCBQTVUxX1BMTDBfUEMxX00zRElWX1NISUZUKSB8IChtNGRpdiA8PAotCQkJCQkJICAgIFBNVTFfUExMMF9QQzFfTTRESVZfU0hJRlQpOwotCXNpX3BtdV9wbGxjb250cm9sKHNpaCwgUE1VMV9QTEwwX1BMTENUTDEsIH4wLCBwbGxjMSk7Ci0KLQlwbGxjMiA9IHNpX3BtdV9wbGxjb250cm9sKHNpaCwgUE1VMV9QTEwwX1BMTENUTDEsIDAsIDApOwotCXBsbGMyICY9IH4oUE1VMV9QTEwwX1BDMl9NNURJVl9NQVNLIHwgUE1VMV9QTEwwX1BDMl9NNkRJVl9NQVNLKTsKLQlwbGxjMiB8PQotCSAgICAoKG01ZGl2IDw8IFBNVTFfUExMMF9QQzJfTTVESVZfU0hJRlQpIHwKLQkgICAgIChtNmRpdiA8PCBQTVUxX1BMTDBfUEMyX002RElWX1NISUZUKSk7Ci0Jc2lfcG11X3BsbGNvbnRyb2woc2loLCBQTVUxX1BMTDBfUExMQ1RMMiwgfjAsIHBsbGMyKTsKKwlhaV9zZXRjb3JlaWR4KHNpaCwgb3JpZ2lkeCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2luY2x1ZGUvaG5kcG11LmggYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19wbXUuaApzaW1pbGFyaXR5IGluZGV4IDc2JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2luY2x1ZGUvaG5kcG11LmgKcmVuYW1lIHRvIGRyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX3BtdS5oCmluZGV4IDNlZWExZjkuLmJkNWI4MDliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2luY2x1ZGUvaG5kcG11LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfcG11LmgKQEAgLTE0LDkgKzE0LDE3IEBACiAgKiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICovCiAKLSNpZm5kZWYgX2huZHBtdV9oXwotI2RlZmluZSBfaG5kcG11X2hfCiAKKyNpZm5kZWYgV0xDX1BNVV9IXworI2RlZmluZSBXTENfUE1VX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8YWl1dGlscy5oPgorCisvKgorICogTERPIHNlbGVjdGlvbnMgdXNlZCBpbiBzaV9wbXVfc2V0X2xkb192b2x0YWdlCisgKi8KICNkZWZpbmUgU0VUX0xET19WT0xUQUdFX0xETzEJMQogI2RlZmluZSBTRVRfTERPX1ZPTFRBR0VfTERPMgkyCiAjZGVmaW5lIFNFVF9MRE9fVk9MVEFHRV9MRE8zCTMKQEAgLTI4LDQxICszNiwyMyBAQAogI2RlZmluZSBTRVRfTERPX1ZPTFRBR0VfTE5MRE8xCTkKICNkZWZpbmUgU0VUX0xET19WT0xUQUdFX0xOTERPMl9TRUwJMTAKIAorZXh0ZXJuIHZvaWQgc2lfcG11X3NldF9sZG9fdm9sdGFnZShzaV90ICpzaWgsIHU4IGxkbywgdTggdm9sdGFnZSk7CitleHRlcm4gdTE2IHNpX3BtdV9mYXN0X3B3cnVwX2RlbGF5KHNpX3QgKnNpaCk7CitleHRlcm4gdm9pZCBzaV9wbXVfc3Byb21fZW5hYmxlKHNpX3QgKnNpaCwgYm9vbCBlbmFibGUpOworZXh0ZXJuIHUzMiBzaV9wbXVfY2hpcGNvbnRyb2woc2lfdCAqc2loLCB1aW50IHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpOworZXh0ZXJuIHUzMiBzaV9wbXVfcmVnY29udHJvbChzaV90ICpzaWgsIHVpbnQgcmVnLCB1MzIgbWFzaywgdTMyIHZhbCk7CitleHRlcm4gdTMyIHNpX3BtdV9pbHBfY2xvY2soc2lfdCAqc2loKTsKK2V4dGVybiB1MzIgc2lfcG11X2FscF9jbG9jayhzaV90ICpzaWgpOworZXh0ZXJuIHZvaWQgc2lfcG11X3BsbHVwZChzaV90ICpzaWgpOworZXh0ZXJuIHZvaWQgc2lfcG11X3NwdXJhdm9pZChzaV90ICpzaWgsIHU4IHNwdXJhdm9pZCk7CitleHRlcm4gdTMyIHNpX3BtdV9wbGxjb250cm9sKHNpX3QgKnNpaCwgdWludCByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKTsKIGV4dGVybiB2b2lkIHNpX3BtdV9pbml0KHNpX3QgKnNpaCk7CiBleHRlcm4gdm9pZCBzaV9wbXVfY2hpcF9pbml0KHNpX3QgKnNpaCk7CiBleHRlcm4gdm9pZCBzaV9wbXVfcGxsX2luaXQoc2lfdCAqc2loLCB1MzIgeHRhbGZyZXEpOwogZXh0ZXJuIHZvaWQgc2lfcG11X3Jlc19pbml0KHNpX3QgKnNpaCk7CiBleHRlcm4gdm9pZCBzaV9wbXVfc3dyZWdfaW5pdChzaV90ICpzaWgpOwotCi1leHRlcm4gdTMyIHNpX3BtdV9mb3JjZV9pbHAoc2lfdCAqc2loLCBib29sIGZvcmNlKTsKLQotZXh0ZXJuIHUzMiBzaV9wbXVfc2lfY2xvY2soc2lfdCAqc2loKTsKLWV4dGVybiB1MzIgc2lfcG11X2NwdV9jbG9jayhzaV90ICpzaWgpOwotZXh0ZXJuIHUzMiBzaV9wbXVfbWVtX2Nsb2NrKHNpX3QgKnNpaCk7Ci1leHRlcm4gdTMyIHNpX3BtdV9hbHBfY2xvY2soc2lfdCAqc2loKTsKLWV4dGVybiB1MzIgc2lfcG11X2lscF9jbG9jayhzaV90ICpzaWgpOwotCi1leHRlcm4gdm9pZCBzaV9wbXVfc2V0X3N3aXRjaGVyX3ZvbHRhZ2Uoc2lfdCAqc2loLAotCQkJCQl1OCBiYl92b2x0YWdlLCB1OCByZl92b2x0YWdlKTsKLWV4dGVybiB2b2lkIHNpX3BtdV9zZXRfbGRvX3ZvbHRhZ2Uoc2lfdCAqc2loLCB1OCBsZG8sIHU4IHZvbHRhZ2UpOwotZXh0ZXJuIHUxNiBzaV9wbXVfZmFzdF9wd3J1cF9kZWxheShzaV90ICpzaWgpOwotZXh0ZXJuIHZvaWQgc2lfcG11X3JjYWwoc2lfdCAqc2loKTsKLWV4dGVybiB2b2lkIHNpX3BtdV9wbGx1cGQoc2lfdCAqc2loKTsKLWV4dGVybiB2b2lkIHNpX3BtdV9zcHVyYXZvaWQoc2lfdCAqc2loLCB1OCBzcHVyYXZvaWQpOwotCi1leHRlcm4gYm9vbCBzaV9wbXVfaXNfb3RwX3Bvd2VyZWQoc2lfdCAqc2loKTsKIGV4dGVybiB1MzIgc2lfcG11X21lYXN1cmVfYWxwY2xrKHNpX3QgKnNpaCk7Ci0KLWV4dGVybiB1MzIgc2lfcG11X2NoaXBjb250cm9sKHNpX3QgKnNpaCwgdWludCByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKTsKLWV4dGVybiB1MzIgc2lfcG11X3JlZ2NvbnRyb2woc2lfdCAqc2loLCB1aW50IHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpOwotZXh0ZXJuIHUzMiBzaV9wbXVfcGxsY29udHJvbChzaV90ICpzaWgsIHVpbnQgcmVnLCB1MzIgbWFzaywgdTMyIHZhbCk7Ci1leHRlcm4gdm9pZCBzaV9wbXVfcGxsdXBkKHNpX3QgKnNpaCk7Ci1leHRlcm4gdm9pZCBzaV9wbXVfc3Byb21fZW5hYmxlKHNpX3QgKnNpaCwgYm9vbCBlbmFibGUpOwotCi1leHRlcm4gdm9pZCBzaV9wbXVfcmFkaW9fZW5hYmxlKHNpX3QgKnNpaCwgYm9vbCBlbmFibGUpOwotZXh0ZXJuIHUzMiBzaV9wbXVfd2FpdGZvcmNsa19vbl9iYWNrcGxhbmUoc2lfdCAqc2loLCB1MzIgY2xrLCB1MzIgZGVsYXkpOwotCitleHRlcm4gYm9vbCBzaV9wbXVfaXNfb3RwX3Bvd2VyZWQoc2lfdCAqc2loKTsKIGV4dGVybiB2b2lkIHNpX3BtdV9vdHBfcG93ZXIoc2lfdCAqc2loLCBib29sIG9uKTsKLWV4dGVybiB2b2lkIHNpX3NkaW9kX2RyaXZlX3N0cmVuZ3RoX2luaXQoc2lfdCAqc2loLCB1MzIgZHJpdmVzdHJlbmd0aCk7CiAKLSNlbmRpZgkJCQkvKiBfaG5kcG11X2hfICovCisjZW5kaWYgLyogV0xDX1BNVV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfcHViLmggYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19wdWIuaAppbmRleCBiOTU2YzIzLi45MzM0ZGVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19wdWIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19wdWIuaApAQCAtNTksNiArNTksMTAgQEAKICAqLwogI2RlZmluZSBXTENfVFhQV1JfTUFYCQkoMTI3KQkvKiB+MzIgZEJtID0gMSw1MDAgbVcgKi8KIAorLyogcmF0ZSByZWxhdGVkIGRlZmluaXRpb25zICovCisjZGVmaW5lCVdMQ19SQVRFX0ZMQUcJMHg4MAkvKiBGbGFnIHRvIGluZGljYXRlIGl0IGlzIGEgYmFzaWMgcmF0ZSAqLworI2RlZmluZQlXTENfUkFURV9NQVNLCTB4N2YJLyogUmF0ZSB2YWx1ZSBtYXNrIHcvbyBiYXNpYyByYXRlIGZsYWcgKi8KKwogLyogbGVnYWN5IHJ4IEFudGVubmEgZGl2ZXJzaXR5IGZvciBTSVNPIHJhdGVzICovCiAjZGVmaW5lCUFOVF9SWF9ESVZfRk9SQ0VfMAkJMAkvKiBVc2UgYW50ZW5uYSAwICovCiAjZGVmaW5lCUFOVF9SWF9ESVZfRk9SQ0VfMQkJMQkvKiBVc2UgYW50ZW5uYSAxICovCkBAIC05Miw2ICs5Niw4IEBACiAjZGVmaW5lIEFJRE1BUFNaCShyb3VuZHVwKE1BWFNDQiwgTkJCWSkvTkJCWSkJLyogYWlkIGJpdG1hcCBzaXplIGluIGJ5dGVzICovCiAjZW5kaWYJCQkJLyogQUlETUFQU1ogKi8KIAorc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXM7CisKIHR5cGVkZWYgc3RydWN0IHdsY190dW5hYmxlcyB7CiAJaW50IG50eGQ7CQkvKiBzaXplIG9mIHR4IGRlc2NyaXB0b3IgdGFibGUgKi8KIAlpbnQgbnJ4ZDsJCS8qIHNpemUgb2YgcnggZGVzY3JpcHRvciB0YWJsZSAqLwpAQCAtNDc4LDcgKzQ4NCw3IEBACiAjZGVmaW5lCVdMQ19QUk9UX05fT0JTUwkJMTYJLyogbm9uLUhUIE9CU1MgcHJlc2VudCAqLwogCiAvKiBjb21tb24gZnVuY3Rpb25zIGZvciBldmVyeSBwb3J0ICovCi1leHRlcm4gdm9pZCAqd2xjX2F0dGFjaCh2b2lkICp3bCwgdTE2IHZlbmRvciwgdTE2IGRldmljZSwgdWludCB1bml0LAorZXh0ZXJuIHZvaWQgKndsY19hdHRhY2goc3RydWN0IHdsX2luZm8gKndsLCB1MTYgdmVuZG9yLCB1MTYgZGV2aWNlLCB1aW50IHVuaXQsCiAJCQlib29sIHBpb21vZGUsIHZvaWQgKnJlZ3N2YSwgdWludCBidXN0eXBlLCB2b2lkICpidHBhcmFtLAogCQkJdWludCAqcGVycik7CiBleHRlcm4gdWludCB3bGNfZGV0YWNoKHN0cnVjdCB3bGNfaW5mbyAqd2xjKTsKQEAgLTQ5OSw4ICs1MDUsNiBAQAogZXh0ZXJuIGJvb2wgd2xjX2ludHJzdXBkKHN0cnVjdCB3bGNfaW5mbyAqd2xjKTsKIGV4dGVybiBib29sIHdsY19pc3Ioc3RydWN0IHdsY19pbmZvICp3bGMsIGJvb2wgKndhbnRkcGMpOwogZXh0ZXJuIGJvb2wgd2xjX2RwYyhzdHJ1Y3Qgd2xjX2luZm8gKndsYywgYm9vbCBib3VuZGVkKTsKLWV4dGVybiBib29sIHdsY19zZW5kODAyMTFfcmF3KHN0cnVjdCB3bGNfaW5mbyAqd2xjLCBzdHJ1Y3Qgd2xjX2lmICp3bGNpZiwKLQkJCSAgICAgIHZvaWQgKnAsIHVpbnQgYWMpOwogZXh0ZXJuIGJvb2wgd2xjX3NlbmRwa3RfbWFjODAyMTEoc3RydWN0IHdsY19pbmZvICp3bGMsIHN0cnVjdCBza19idWZmICpzZHUsCiAJCQkJIHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIGV4dGVybiBpbnQgd2xjX2lvdmFyX29wKHN0cnVjdCB3bGNfaW5mbyAqd2xjLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpwYXJhbXMsCkBAIC01MDgsNiArNTEyLDggQEAKIAkJCXN0cnVjdCB3bGNfaWYgKndsY2lmKTsKIGV4dGVybiBpbnQgd2xjX2lvY3RsKHN0cnVjdCB3bGNfaW5mbyAqd2xjLCBpbnQgY21kLCB2b2lkICphcmcsIGludCBsZW4sCiAJCSAgICAgc3RydWN0IHdsY19pZiAqd2xjaWYpOworZXh0ZXJuIGJvb2wgd2xjX2FnZ3JlZ2F0YWJsZShzdHJ1Y3Qgd2xjX2luZm8gKndsYywgdTggdGlkKTsKKwogLyogaGVscGVyIGZ1bmN0aW9ucyAqLwogZXh0ZXJuIHZvaWQgd2xjX3N0YXRzdXBkKHN0cnVjdCB3bGNfaW5mbyAqd2xjKTsKIGV4dGVybiB2b2lkIHdsY19wcm90ZWN0aW9uX3VwZChzdHJ1Y3Qgd2xjX2luZm8gKndsYywgdWludCBpZHgsIGludCB2YWwpOwpAQCAtNTE1LDI0ICs1MjEsMTQgQEAKIGV4dGVybiB2b2lkIHdsY19tYWNfYmNuX3Byb21pc2NfY2hhbmdlKHN0cnVjdCB3bGNfaW5mbyAqd2xjLCBib29sIHByb21pc2MpOwogZXh0ZXJuIHZvaWQgd2xjX3NldF9hZGRybWF0Y2goc3RydWN0IHdsY19pbmZvICp3bGMsIGludCBtYXRjaF9yZWdfb2Zmc2V0LAogCQkJICAgICAgY29uc3QgdTggKmFkZHIpOwotZXh0ZXJuIHZvaWQgd2xjX3dtZV9zZXRwYXJhbXMoc3RydWN0IHdsY19pbmZvICp3bGMsIHUxNiBhY2ksIHZvaWQgKmFyZywKK2V4dGVybiB2b2lkIHdsY193bWVfc2V0cGFyYW1zKHN0cnVjdCB3bGNfaW5mbyAqd2xjLCB1MTYgYWNpLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKmFyZywKIAkJCSAgICAgIGJvb2wgc3VzcGVuZCk7Ci0KIGV4dGVybiBzdHJ1Y3Qgd2xjX3B1YiAqd2xjX3B1Yih2b2lkICp3bGMpOwogCiAvKiBjb21tb24gZnVuY3Rpb25zIGZvciBldmVyeSBwb3J0ICovCi1leHRlcm4gaW50IHdsY19ibWFjX3VwX3ByZXAoc3RydWN0IHdsY19od19pbmZvICp3bGNfaHcpOwotZXh0ZXJuIGludCB3bGNfYm1hY191cF9maW5pc2goc3RydWN0IHdsY19od19pbmZvICp3bGNfaHcpOwotZXh0ZXJuIGludCB3bGNfYm1hY19kb3duX3ByZXAoc3RydWN0IHdsY19od19pbmZvICp3bGNfaHcpOwotZXh0ZXJuIGludCB3bGNfYm1hY19kb3duX2ZpbmlzaChzdHJ1Y3Qgd2xjX2h3X2luZm8gKndsY19odyk7Ci0KLWV4dGVybiB1MzIgd2xjX3JlZ19yZWFkKHN0cnVjdCB3bGNfaW5mbyAqd2xjLCB2b2lkICpyLCB1aW50IHNpemUpOwotZXh0ZXJuIHZvaWQgd2xjX3JlZ193cml0ZShzdHJ1Y3Qgd2xjX2luZm8gKndsYywgdm9pZCAqciwgdTMyIHYsIHVpbnQgc2l6ZSk7Ci1leHRlcm4gdm9pZCB3bGNfY29yZXJlc2V0KHN0cnVjdCB3bGNfaW5mbyAqd2xjLCB1MzIgZmxhZ3MpOwogZXh0ZXJuIHZvaWQgd2xjX21oZihzdHJ1Y3Qgd2xjX2luZm8gKndsYywgdTggaWR4LCB1MTYgbWFzaywgdTE2IHZhbCwKIAkJICAgIGludCBiYW5kcyk7Ci1leHRlcm4gdTE2IHdsY19taGZfZ2V0KHN0cnVjdCB3bGNfaW5mbyAqd2xjLCB1OCBpZHgsIGludCBiYW5kcyk7Ci1leHRlcm4gdTMyIHdsY19kZWx0YV90eGZ1bmZsKHN0cnVjdCB3bGNfaW5mbyAqd2xjLCBpbnQgZmlmbyk7CiBleHRlcm4gdm9pZCB3bGNfcmF0ZV9sb29rdXBfaW5pdChzdHJ1Y3Qgd2xjX2luZm8gKndsYywgd2xjX3JhdGVzZXRfdCAqcmF0ZXNldCk7CiBleHRlcm4gdm9pZCB3bGNfZGVmYXVsdF9yYXRlc2V0KHN0cnVjdCB3bGNfaW5mbyAqd2xjLCB3bGNfcmF0ZXNldF90ICpycyk7CiAKQEAgLTU0MywxMSArNTM5LDggQEAKIC8qIHdsY19waHkuYyBoZWxwZXIgZnVuY3Rpb25zICovCiBleHRlcm4gdm9pZCB3bGNfc2V0X3BzX2N0cmwoc3RydWN0IHdsY19pbmZvICp3bGMpOwogZXh0ZXJuIHZvaWQgd2xjX21jdHJsKHN0cnVjdCB3bGNfaW5mbyAqd2xjLCB1MzIgbWFzaywgdTMyIHZhbCk7Ci1leHRlcm4gdm9pZCB3bGNfc2NiX3JhdGVzZWxfaW5pdF9hbGwoc3RydWN0IHdsY19pbmZvICp3bGMpOwogCiAvKiBpb2N0bCAqLwotZXh0ZXJuIGludCB3bGNfaW92YXJfZ2V0czgoc3RydWN0IHdsY19pbmZvICp3bGMsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkgICAgIHM4ICphcmcpOwogZXh0ZXJuIGludCB3bGNfaW92YXJfY2hlY2soc3RydWN0IHdsY19wdWIgKnB1YiwgY29uc3QgYmNtX2lvdmFyX3QgKnZpLAogCQkJICAgdm9pZCAqYXJnLAogCQkJICAgaW50IGxlbiwgYm9vbCBzZXQpOwpAQCAtNTYyLDMxICs1NTUsMTIgQEAKIGV4dGVybiB2b2lkIHdsY19hc3NvY2lhdGVfdXBkKHN0cnVjdCB3bGNfaW5mbyAqd2xjLCBib29sIHN0YXRlKTsKIGV4dGVybiB2b2lkIHdsY19zY2FuX3N0YXJ0KHN0cnVjdCB3bGNfaW5mbyAqd2xjKTsKIGV4dGVybiB2b2lkIHdsY19zY2FuX3N0b3Aoc3RydWN0IHdsY19pbmZvICp3bGMpOwotCi1zdGF0aWMgaW5saW5lIGludCB3bGNfaW92YXJfZ2V0dWludChzdHJ1Y3Qgd2xjX2luZm8gKndsYywgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkgICAgdWludCAqYXJnKQotewotCXJldHVybiB3bGNfaW92YXJfZ2V0aW50KHdsYywgbmFtZSwgKGludCAqKWFyZyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHdsY19pb3Zhcl9nZXR1OChzdHJ1Y3Qgd2xjX2luZm8gKndsYywgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkgICAgIHU4ICphcmcpCi17Ci0JcmV0dXJuIHdsY19pb3Zhcl9nZXRzOCh3bGMsIG5hbWUsIChzOCAqKSBhcmcpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCB3bGNfaW92YXJfc2V0dWludChzdHJ1Y3Qgd2xjX2luZm8gKndsYywgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkgICAgdWludCBhcmcpCi17Ci0JcmV0dXJuIHdsY19pb3Zhcl9zZXRpbnQod2xjLCBuYW1lLCAoaW50KWFyZyk7Ci19CitleHRlcm4gaW50IHdsY19nZXRfY3VyYmFuZChzdHJ1Y3Qgd2xjX2luZm8gKndsYyk7CitleHRlcm4gdm9pZCB3bGNfd2FpdF9mb3JfdHhfY29tcGxldGlvbihzdHJ1Y3Qgd2xjX2luZm8gKndsYywgYm9vbCBkcm9wKTsKIAogI2lmIGRlZmluZWQoQkNNREJHKQogZXh0ZXJuIGludCB3bGNfaW9jcmVnY2hrKHN0cnVjdCB3bGNfaW5mbyAqd2xjLCB1aW50IGJhbmQpOwogI2VuZGlmCi0jaWYgZGVmaW5lZChCQ01EQkcpCi1leHRlcm4gaW50IHdsY19pb2NwaWNoayhzdHJ1Y3Qgd2xjX2luZm8gKndsYywgdWludCBwaHl0eXBlKTsKLSNlbmRpZgogCiAvKiBoZWxwZXIgZnVuY3Rpb25zICovCiBleHRlcm4gYm9vbCB3bGNfY2hlY2tfcmFkaW9fZGlzYWJsZWQoc3RydWN0IHdsY19pbmZvICp3bGMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfcmF0ZS5jIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfcmF0ZS5jCmluZGV4IGQyODRmMWEuLjg3YjI1MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX3JhdGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19yYXRlLmMKQEAgLTE5LDcgKzE5LDcgQEAKICNpbmNsdWRlIDxwcm90by84MDIuMTEuaD4KICNpbmNsdWRlIDxiY21kZWZzLmg+CiAjaW5jbHVkZSA8YmNtdXRpbHMuaD4KLSNpbmNsdWRlIDxzaXV0aWxzLmg+CisjaW5jbHVkZSA8YWl1dGlscy5oPgogI2luY2x1ZGUgPHdsaW9jdGwuaD4KICNpbmNsdWRlIDxzYmhuZGRtYS5oPgogCkBAIC0zMDQsNyArMzA0LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAJCS8qIG1hc2sgb2ZmICJiYXNpYyByYXRlIiBiaXQsIFdMQ19SQVRFX0ZMQUcgKi8KLQkJciA9IChpbnQpcnMtPnJhdGVzW2ldICYgUkFURV9NQVNLOworCQlyID0gKGludClycy0+cmF0ZXNbaV0gJiBXTENfUkFURV9NQVNLOwogCQlpZiAoKHIgPiBXTENfTUFYUkFURSkgfHwgKHJhdGVfaW5mb1tyXSA9PSAwKSkgewogCQkJY29udGludWU7CiAJCX0KQEAgLTMxNCw4ICszMTQsNyBAQAogCS8qIGZpbGwgb3V0IHRoZSByYXRlcyBpbiBvcmRlciwgbG9va2luZyBhdCBvbmx5IHN1cHBvcnRlZCByYXRlcyAqLwogCWNvdW50ID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgaHdfcnMtPmNvdW50OyBpKyspIHsKLQkJciA9IGh3X3JzLT5yYXRlc1tpXSAmIFJBVEVfTUFTSzsKLQkJQVNTRVJUKHIgPD0gV0xDX01BWFJBVEUpOworCQlyID0gaHdfcnMtPnJhdGVzW2ldICYgV0xDX1JBVEVfTUFTSzsKIAkJaWYgKHJhdGVzZXRbcl0pCiAJCQlycy0+cmF0ZXNbY291bnQrK10gPSByYXRlc2V0W3JdOwogCX0KQEAgLTMzMyw3ICszMzIsNyBAQAogfQogCiAvKiBjYWxjdWxhdGUgdGhlIHJhdGUgb2YgYSByeCdkIGZyYW1lIGFuZCByZXR1cm4gaXQgYXMgYSByYXRlc3BlYyAqLwotcmF0ZXNwZWNfdCBCQ01GQVNUUEFUSCB3bGNfY29tcHV0ZV9yc3BlYyhkMTFyeGhkcl90ICpyeGgsIHU4ICpwbGNwKQorcmF0ZXNwZWNfdCB3bGNfY29tcHV0ZV9yc3BlYyhkMTFyeGhkcl90ICpyeGgsIHU4ICpwbGNwKQogewogCWludCBwaHlfdHlwZTsKIAlyYXRlc3BlY190IHJzcGVjID0gUEhZX1RYQzFfQldfMjBNSFogPDwgUlNQRUNfQldfU0hJRlQ7CkBAIC0zNjQsOCArMzYzLDcgQEAKIAkJY2FzZSBQUlhTMF9TVEROOgogCQkJLyogZmFsbHRocnUgKi8KIAkJZGVmYXVsdDoKLQkJCS8qIG5vdCBzdXBwb3J0ZWQgKi8KLQkJCUFTU0VSVCgwKTsKKwkJCS8qIG5vdCBzdXBwb3J0ZWQsIGVycm9yIGNvbmRpdGlvbiAqLwogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKFBMQ1AzX0lTU0dJKHBsY3BbM10pKQpAQCAtNDA3LDkgKzQwNSw5IEBACiAJCXIgPSBzcmMtPnJhdGVzW2ldOwogCQlpZiAoYmFzaWNfb25seSAmJiAhKHIgJiBXTENfUkFURV9GTEFHKSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoKHJhdGVzID09IFdMQ19SQVRFU19DQ0spICYmIElTX09GRE0oKHIgJiBSQVRFX01BU0spKSkKKwkJaWYgKChyYXRlcyA9PSBXTENfUkFURVNfQ0NLKSAmJiBJU19PRkRNKChyICYgV0xDX1JBVEVfTUFTSykpKQogCQkJY29udGludWU7Ci0JCWlmICgocmF0ZXMgPT0gV0xDX1JBVEVTX09GRE0pICYmIElTX0NDSygociAmIFJBVEVfTUFTSykpKQorCQlpZiAoKHJhdGVzID09IFdMQ19SQVRFU19PRkRNKSAmJiBJU19DQ0soKHIgJiBXTENfUkFURV9NQVNLKSkpCiAJCQljb250aW51ZTsKIAkJZHN0LT5yYXRlc1tjb3VudCsrXSA9IHIgJiB4bWFzazsKIAl9CkBAIC00NTEsNyArNDQ5LDcgQEAKIAl9IGVsc2UgaWYgKFBIWVRZUEVfSVMocGh5X3R5cGUsIFBIWV9UWVBFX0cpKSB7CiAJCXJzX2RmbHQgPSAmY2NrX29mZG1fcmF0ZXM7CiAJfSBlbHNlIHsKLQkJQVNTRVJUKDApOwkvKiBzaG91bGQgbm90IGhhcHBlbiAqLworCQkvKiBzaG91bGQgbm90IGhhcHBlbiwgZXJyb3IgY29uZGl0aW9uICovCiAJCXJzX2RmbHQgPSAmY2NrX3JhdGVzOwkvKiBmb3JjZSBjY2sgKi8KIAl9CiAKQEAgLTQ2OCw3ICs0NjYsNyBAQAogCQkJCQkgICBtY3NhbGxvdyA/IHR4c3RyZWFtcyA6IDEpOwogfQogCi1zMTYgQkNNRkFTVFBBVEggd2xjX3JhdGVfbGVnYWN5X3BoeWN0bCh1aW50IHJhdGUpCitzMTYgd2xjX3JhdGVfbGVnYWN5X3BoeWN0bCh1aW50IHJhdGUpCiB7CiAJdWludCBpOwogCWZvciAoaSA9IDA7IGkgPCBMRUdBQ1lfUEhZQ0ZHX1RBQkxFX1NJWkU7IGkrKykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX3JhdGUuaCBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX3JhdGUuaAppbmRleCAyNWJhMmE0Li41NTc1ZTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19yYXRlLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfcmF0ZS5oCkBAIC01NCwxMSArNTQsOCBAQAogCShfaXM0MCA/IG1jc190YWJsZVtfbWNzXS5waHlfcmF0ZV80MCA6IG1jc190YWJsZVtfbWNzXS5waHlfcmF0ZV8yMCkpCiAjZGVmaW5lIFZBTElEX01DUyhfbWNzKQkoKF9tY3MgPCBNQ1NfVEFCTEVfU0laRSkpCiAKLSNkZWZpbmUJV0xDX1JBVEVfRkxBRwkweDgwCS8qIFJhdGUgZmxhZzogYmFzaWMgb3Igb2ZkbSAqLwotCi0vKiBNYWNyb3MgdG8gdXNlIHRoZSByYXRlX2luZm8gdGFibGUgKi8KLSNkZWZpbmUJUkFURV9NQVNLCTB4N2YJLyogUmF0ZSB2YWx1ZSBtYXNrIHcvbyBiYXNpYyByYXRlIGZsYWcgKi8KLSNkZWZpbmUJUkFURV9NQVNLX0ZVTEwJMHhmZgkvKiBSYXRlIHZhbHVlIG1hc2sgd2l0aCBiYXNpYyByYXRlIGZsYWcgKi8KKy8qIE1hY3JvIHRvIHVzZSB0aGUgcmF0ZV9pbmZvIHRhYmxlICovCisjZGVmaW5lCVdMQ19SQVRFX01BU0tfRlVMTCAweGZmCS8qIFJhdGUgdmFsdWUgbWFzayB3aXRoIGJhc2ljIHJhdGUgZmxhZyAqLwogCiAjZGVmaW5lIFdMQ19SQVRFXzUwMEtfVE9fQlBTKHJhdGUpCSgocmF0ZSkgKiA1MDAwMDApCS8qIGNvbnZlcnQgNTAwa2JwcyB0byBicHMgKi8KIApAQCAtMTE1LDkgKzExMiwxMSBAQAogLyogUmF0ZSBpbmZvIHRhYmxlOyB0YWtlcyBhIGxlZ2FjeSByYXRlIG9yIHJhdGVzcGVjX3QgKi8KICNkZWZpbmUJSVNfTUNTKHIpICAgICAJKHIgJiBSU1BFQ19NSU1PUkFURSkKICNkZWZpbmUJSVNfT0ZETShyKSAgICAgCSghSVNfTUNTKHIpICYmIChyYXRlX2luZm9bKHIpICYgUlNQRUNfUkFURV9NQVNLXSAmIFdMQ19SQVRFX0ZMQUcpKQotI2RlZmluZQlJU19DQ0socikJKCFJU19NQ1MocikgJiYgKCgocikgJiBSQVRFX01BU0spID09IFdMQ19SQVRFXzFNIHx8IFwKLQkJCSAoKHIpICYgUkFURV9NQVNLKSA9PSBXTENfUkFURV8yTSB8fCBcCi0JCQkgKChyKSAmIFJBVEVfTUFTSykgPT0gV0xDX1JBVEVfNU01IHx8ICgocikgJiBSQVRFX01BU0spID09IFdMQ19SQVRFXzExTSkpCisjZGVmaW5lCUlTX0NDSyhyKQkoIUlTX01DUyhyKSAmJiAoIFwKKwkJCSAoKHIpICYgV0xDX1JBVEVfTUFTSykgPT0gV0xDX1JBVEVfMU0gfHwgXAorCQkJICgocikgJiBXTENfUkFURV9NQVNLKSA9PSBXTENfUkFURV8yTSB8fCBcCisJCQkgKChyKSAmIFdMQ19SQVRFX01BU0spID09IFdMQ19SQVRFXzVNNSB8fCBcCisJCQkgKChyKSAmIFdMQ19SQVRFX01BU0spID09IFdMQ19SQVRFXzExTSkpCiAjZGVmaW5lIElTX1NJTkdMRV9TVFJFQU0obWNzKQkoKChtY3MpIDw9IEhJR0hFU1RfU0lOR0xFX1NUUkVBTV9NQ1MpIHx8ICgobWNzKSA9PSAzMikpCiAjZGVmaW5lIENDS19SU1BFQyhjY2spCQkoKGNjaykgJiBSU1BFQ19SQVRFX01BU0spCiAjZGVmaW5lIE9GRE1fUlNQRUMob2ZkbSkJKCgob2ZkbSkgJiBSU1BFQ19SQVRFX01BU0spIHxcCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19zY2IuaCBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX3NjYi5oCmluZGV4IDczMjYwMDYuLmYwN2E4OTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX3NjYi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX3NjYi5oCkBAIC0xNyw4ICsxNyw2IEBACiAjaWZuZGVmIF93bGNfc2NiX2hfCiAjZGVmaW5lIF93bGNfc2NiX2hfCiAKLWV4dGVybiBib29sIHdsY19hZ2dyZWdhdGFibGUoc3RydWN0IHdsY19pbmZvICp3bGMsIHU4IHRpZCk7Ci0KICNkZWZpbmUgQU1QRFVfVFhfQkFfTUFYX1dTSVpFCTY0CS8qIG1heCBUeCBiYSB3aW5kb3cgc2l6ZSAoaW4gcGR1KSAqLwogLyogc3RydWN0dXJlIHRvIHN0b3JlIHBlci10aWQgc3RhdGUgZm9yIHRoZSBhbXBkdSBpbml0aWF0b3IgKi8KIHR5cGVkZWYgc3RydWN0IHNjYl9hbXBkdV90aWRfaW5pIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX3N0Zi5jIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfc3RmLmMKaW5kZXggMDk4ZmQ1OS4uYzRmNTgxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfc3RmLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfc3RmLmMKQEAgLTIxLDkgKzIxLDEwIEBACiAKICNpbmNsdWRlIDxiY21kZWZzLmg+CiAjaW5jbHVkZSA8YmNtdXRpbHMuaD4KLSNpbmNsdWRlIDxzaXV0aWxzLmg+CisjaW5jbHVkZSA8YWl1dGlscy5oPgogI2luY2x1ZGUgPHdsaW9jdGwuaD4KICNpbmNsdWRlIDxiY213aWZpLmg+CisjaW5jbHVkZSA8YmNtbnZyYW0uaD4KICNpbmNsdWRlIDxzYmhuZGRtYS5oPgogCiAjaW5jbHVkZSAid2xjX3R5cGVzLmgiCkBAIC02OSw5ICs3MCw2IEBACiAKIHN0YXRpYyB2b2lkIHdsY19zdGZfc3RiY19yeF9odF91cGRhdGUoc3RydWN0IHdsY19pbmZvICp3bGMsIGludCB2YWwpCiB7Ci0JQVNTRVJUKCh2YWwgPT0gSFRfQ0FQX1JYX1NUQkNfTk8pCi0JICAgICAgIHx8ICh2YWwgPT0gSFRfQ0FQX1JYX1NUQkNfT05FX1NUUkVBTSkpOwotCiAJLyogTUlNT1BIWXMgcmV2My02IGNhbm5vdCByZWNlaXZlIFNUQkMgd2l0aCBvbmx5IG9uZSByeCBjb3JlIGFjdGl2ZSAqLwogCWlmIChXTENfU1RGX1NTX1NUQkNfUlgod2xjKSkgewogCQlpZiAoKHdsYy0+c3RmLT5yeHN0cmVhbXMgPT0gMSkgJiYgKHZhbCAhPSBIVF9DQVBfUlhfU1RCQ19OTykpCkBAIC0xOTMsMTAgKzE5MSw4IEBACiAKIHN0YXRpYyBpbnQgd2xjX3N0Zl90eGNvcmVfc2V0KHN0cnVjdCB3bGNfaW5mbyAqd2xjLCB1OCBOc3RzLCB1OCBjb3JlX21hc2spCiB7Ci0JV0xfVFJBQ0UoIndsJWQ6ICVzOiBOc3RzICVkIGNvcmVfbWFzayAleFxuIiwKLQkJIHdsYy0+cHViLT51bml0LCBfX2Z1bmNfXywgTnN0cywgY29yZV9tYXNrKTsKLQotCUFTU0VSVCgoTnN0cyA+IDApICYmIChOc3RzIDw9IE1BWF9TVFJFQU1TX1NVUFBPUlRFRCkpOworCUJDTU1TRyh3bGMtPndpcGh5LCAid2wlZDogTnN0cyAlZCBjb3JlX21hc2sgJXhcbiIsCisJCSB3bGMtPnB1Yi0+dW5pdCwgTnN0cywgY29yZV9tYXNrKTsKIAogCWlmIChXTENfQklUU0NOVChjb3JlX21hc2spID4gd2xjLT5zdGYtPnR4c3RyZWFtcykgewogCQljb3JlX21hc2sgPSAwOwpAQCAtMjA4LDggKzIwNCw2IEBACiAJCWNvcmVfbWFzayA9IHdsYy0+c3RmLT50eGNoYWluOwogCX0KIAotCUFTU0VSVCghY29yZV9tYXNrIHx8IE5zdHMgPD0gV0xDX0JJVFNDTlQoY29yZV9tYXNrKSk7Ci0KIAl3bGMtPnN0Zi0+dHhjb3JlW05zdHNdID0gY29yZV9tYXNrOwogCS8qIE5zdHMgPSAxLi40LCB0eGNvcmUgaW5kZXggPSAxLi40ICovCiAJaWYgKE5zdHMgPT0gMSkgewpAQCAtMjI1LDcgKzIxOSw3IEBACiAJCX0KIAl9CiAKLQlyZXR1cm4gQkNNRV9PSzsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB3bGNfc3RmX3NwYXRpYWxfcG9saWN5X3NldChzdHJ1Y3Qgd2xjX2luZm8gKndsYywgaW50IHZhbCkKQEAgLTIzMyw3ICsyMjcsNyBAQAogCWludCBpOwogCXU4IGNvcmVfbWFzayA9IDA7CiAKLQlXTF9UUkFDRSgid2wlZDogJXM6IHZhbCAleFxuIiwgd2xjLT5wdWItPnVuaXQsIF9fZnVuY19fLCB2YWwpOworCUJDTU1TRyh3bGMtPndpcGh5LCAid2wlZDogdmFsICV4XG4iLCB3bGMtPnB1Yi0+dW5pdCwgdmFsKTsKIAogCXdsYy0+c3RmLT5zcGF0aWFsX3BvbGljeSA9IChzOCkgdmFsOwogCWZvciAoaSA9IDE7IGkgPD0gTUFYX1NUUkVBTVNfU1VQUE9SVEVEOyBpKyspIHsKQEAgLTI0MSw3ICsyMzUsNyBAQAogCQkgICAgd2xjLT5zdGYtPnR4Y2hhaW4gOiB0eGNvcmVfZGVmYXVsdFtpXTsKIAkJd2xjX3N0Zl90eGNvcmVfc2V0KHdsYywgKHU4KSBpLCBjb3JlX21hc2spOwogCX0KLQlyZXR1cm4gQkNNRV9PSzsKKwlyZXR1cm4gMDsKIH0KIAogaW50IHdsY19zdGZfdHhjaGFpbl9zZXQoc3RydWN0IHdsY19pbmZvICp3bGMsIHMzMiBpbnRfdmFsLCBib29sIGZvcmNlKQpAQCAtMjUxLDE2ICsyNDUsMTYgQEAKIAl1aW50IGk7CiAKIAlpZiAod2xjLT5zdGYtPnR4Y2hhaW4gPT0gdHhjaGFpbikKLQkJcmV0dXJuIEJDTUVfT0s7CisJCXJldHVybiAwOwogCiAJaWYgKCh0eGNoYWluICYgfndsYy0+c3RmLT5od190eGNoYWluKQogCSAgICB8fCAhKHR4Y2hhaW4gJiB3bGMtPnN0Zi0+aHdfdHhjaGFpbikpCi0JCXJldHVybiBCQ01FX1JBTkdFOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIGlmIG5yYXRlIG92ZXJyaWRlIGlzIGNvbmZpZ3VyZWQgdG8gYmUgbm9uLVNJU08gU1RGIG1vZGUsIHJlamVjdCByZWR1Y2luZyB0eGNoYWluIHRvIDEgKi8KIAl0eHN0cmVhbXMgPSAodTgpIFdMQ19CSVRTQ05UKHR4Y2hhaW4pOwogCWlmICh0eHN0cmVhbXMgPiBNQVhfU1RSRUFNU19TVVBQT1JURUQpCi0JCXJldHVybiBCQ01FX1JBTkdFOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICh0eHN0cmVhbXMgPT0gMSkgewogCQlmb3IgKGkgPSAwOyBpIDwgTkJBTkRTKHdsYyk7IGkrKykKQEAgLTI2OSwyMSArMjYzLDI1IEBACiAJCQkgICAgfHwgKFJTUEVDX1NURih3bGMtPmJhbmRzdGF0ZVtpXS0+bXJzcGVjX292ZXJyaWRlKSAhPQogCQkJCVBIWV9UWEMxX01PREVfU0lTTykpIHsKIAkJCQlpZiAoIWZvcmNlKQotCQkJCQlyZXR1cm4gQkNNRV9FUlJPUjsKKwkJCQkJcmV0dXJuIC1FQkFERTsKIAogCQkJCS8qIG92ZXItd3JpdGUgdGhlIG92ZXJyaWRlIHJzcGVjICovCiAJCQkJaWYgKFJTUEVDX1NURih3bGMtPmJhbmRzdGF0ZVtpXS0+cnNwZWNfb3ZlcnJpZGUpCiAJCQkJICAgICE9IFBIWV9UWEMxX01PREVfU0lTTykgewogCQkJCQl3bGMtPmJhbmRzdGF0ZVtpXS0+cnNwZWNfb3ZlcnJpZGUgPSAwOwotCQkJCQlXTF9FUlJPUigiJXMoKTogdGVtcCBzZW5zZSBvdmVycmlkZSBub24tU0lTTyByc3BlY19vdmVycmlkZVxuIiwKLQkJCQkJCSBfX2Z1bmNfXyk7CisJCQkJCXdpcGh5X2Vycih3bGMtPndpcGh5LCAiJXMoKTogdGVtcCAiCisJCQkJCQkgICJzZW5zZSBvdmVycmlkZSBub24tU0lTTyAiCisJCQkJCQkgICJyc3BlY19vdmVycmlkZVxuIiwKKwkJCQkJCSAgX19mdW5jX18pOwogCQkJCX0KIAkJCQlpZiAoUlNQRUNfU1RGCiAJCQkJICAgICh3bGMtPmJhbmRzdGF0ZVtpXS0+bXJzcGVjX292ZXJyaWRlKSAhPQogCQkJCSAgICBQSFlfVFhDMV9NT0RFX1NJU08pIHsKIAkJCQkJd2xjLT5iYW5kc3RhdGVbaV0tPm1yc3BlY19vdmVycmlkZSA9IDA7Ci0JCQkJCVdMX0VSUk9SKCIlcygpOiB0ZW1wIHNlbnNlIG92ZXJyaWRlIG5vbi1TSVNPIG1yc3BlY19vdmVycmlkZVxuIiwKLQkJCQkJCSBfX2Z1bmNfXyk7CisJCQkJCXdpcGh5X2Vycih3bGMtPndpcGh5LCAiJXMoKTogdGVtcCAiCisJCQkJCQkgICJzZW5zZSBvdmVycmlkZSBub24tU0lTTyAiCisJCQkJCQkgICJtcnNwZWNfb3ZlcnJpZGVcbiIsCisJCQkJCQkgIF9fZnVuY19fKTsKIAkJCQl9CiAJCQl9CiAJfQpAQCAtMzAzLDcgKzMwMSw3IEBACiAJZm9yIChpID0gMTsgaSA8PSBNQVhfU1RSRUFNU19TVVBQT1JURUQ7IGkrKykKIAkJd2xjX3N0Zl90eGNvcmVfc2V0KHdsYywgKHU4KSBpLCB0eGNvcmVfZGVmYXVsdFtpXSk7CiAKLQlyZXR1cm4gQkNNRV9PSzsKKwlyZXR1cm4gMDsKIH0KIAogLyogdXBkYXRlIHdsYy0+c3RmLT5zc19vcG1vZGUgd2hpY2ggcmVwcmVzZW50cyB0aGUgb3BlcmF0aW9uYWwgc3RmX3NzIG1vZGUgd2UncmUgdXNpbmcgKi8KQEAgLTMxOSw5ICszMTcsNiBAQAogCWlmIChXTENfU1RCQ19DQVBfUEhZKHdsYykgJiYKIAkgICAgd2xjLT5zdGYtPnNzX2FsZ29zZWxfYXV0bwogCSAgICAmJiAod2xjLT5zdGYtPnNzX2FsZ29fY2hhbm5lbCAhPSAodTE2KSAtMSkpIHsKLQkJQVNTRVJUKGlzc2V0KCZ3bGMtPnN0Zi0+c3NfYWxnb19jaGFubmVsLCBQSFlfVFhDMV9NT0RFX0NERCkKLQkJICAgICAgIHx8IGlzc2V0KCZ3bGMtPnN0Zi0+c3NfYWxnb19jaGFubmVsLAotCQkJCVBIWV9UWEMxX01PREVfU0lTTykpOwogCQl1cGRfc3RmX3NzID0gKHdsYy0+c3RmLT5ub19jZGRzdGJjIHx8ICh3bGMtPnN0Zi0+dHhzdHJlYW1zID09IDEpCiAJCQkgICAgICB8fCBpc3NldCgmd2xjLT5zdGYtPnNzX2FsZ29fY2hhbm5lbCwKIAkJCQkgICAgICAgUEhZX1RYQzFfTU9ERV9TSVNPKSkgPyBQSFlfVFhDMV9NT0RFX1NJU08KQEAgLTM3MSwxMSArMzY2LDExIEBACiAKIGludCB3bGNfc3RmX2FudF90eGFudF92YWxpZGF0ZShzdHJ1Y3Qgd2xjX2luZm8gKndsYywgczggdmFsKQogewotCWludCBiY21lcnJvciA9IEJDTUVfT0s7CisJaW50IGJjbWVycm9yID0gMDsKIAogCS8qIHdoZW4gdGhlcmUgaXMgb25seSAxIHR4X3N0cmVhbXMsIGRvbid0IGFsbG93IHRvIGNoYW5nZSB0aGUgdHhhbnQgKi8KIAlpZiAoV0xDSVNOUEhZKHdsYy0+YmFuZCkgJiYgKHdsYy0+c3RmLT50eHN0cmVhbXMgPT0gMSkpCi0JCXJldHVybiAoKHZhbCA9PSB3bGMtPnN0Zi0+dHhhbnQpID8gYmNtZXJyb3IgOiBCQ01FX1JBTkdFKTsKKwkJcmV0dXJuICgodmFsID09IHdsYy0+c3RmLT50eGFudCkgPyBiY21lcnJvciA6IC1FSU5WQUwpOwogCiAJc3dpdGNoICh2YWwpIHsKIAljYXNlIC0xOgpAQCAtMzkxLDExICszODYsMTEgQEAKIAkJdmFsID0gQU5UX1RYX0xBU1RfUlg7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWJjbWVycm9yID0gQkNNRV9SQU5HRTsKKwkJYmNtZXJyb3IgPSAtRUlOVkFMOwogCQlicmVhazsKIAl9CiAKLQlpZiAoYmNtZXJyb3IgPT0gQkNNRV9PSykKKwlpZiAoYmNtZXJyb3IgPT0gMCkKIAkJd2xjLT5zdGYtPnR4YW50ID0gKHM4KSB2YWw7CiAKIAlyZXR1cm4gYmNtZXJyb3I7CkBAIC00MjEsOSArNDE2LDYgQEAKIAlzOCB0eGFudDsKIAogCXR4YW50ID0gKHM4KSB3bGMtPnN0Zi0+dHhhbnQ7Ci0JQVNTRVJUKHR4YW50ID09IEFOVF9UWF9GT1JDRV8wIHx8IHR4YW50ID09IEFOVF9UWF9GT1JDRV8xCi0JICAgICAgIHx8IHR4YW50ID09IEFOVF9UWF9MQVNUX1JYKTsKLQogCWlmIChXTENfUEhZXzExTl9DQVAod2xjLT5iYW5kKSkgewogCQlpZiAodHhhbnQgPT0gQU5UX1RYX0ZPUkNFXzApIHsKIAkJCXdsYy0+c3RmLT5waHl0eGFudCA9IFBIWV9UWENfQU5UXzA7CkBAIC00MzksOCArNDMxLDggQEAKIAkJCWlmIChXTENJU0xDTlBIWSh3bGMtPmJhbmQpIHx8IFdMQ0lTU1NMUE5QSFkod2xjLT5iYW5kKSkKIAkJCQl3bGMtPnN0Zi0+cGh5dHhhbnQgPSBQSFlfVFhDX0xDTlBIWV9BTlRfTEFTVDsKIAkJCWVsc2UgewotCQkJCS8qIGtlZXAgdGhpcyBhc3NlcnQgdG8gY2F0Y2ggb3V0IG9mIHN5bmMgd2xjLT5zdGYtPnR4Y29yZSAqLwotCQkJCUFTU0VSVCh3bGMtPnN0Zi0+dHhjaGFpbiA+IDApOworCQkJCS8qIGNhdGNoIG91dCBvZiBzeW5jIHdsYy0+c3RmLT50eGNvcmUgKi8KKwkJCQlXQVJOX09OKHdsYy0+c3RmLT50eGNoYWluIDw9IDApOwogCQkJCXdsYy0+c3RmLT5waHl0eGFudCA9CiAJCQkJICAgIHdsYy0+c3RmLT50eGNoYWluIDw8IFBIWV9UWENfQU5UX1NISUZUOwogCQkJfQpAQCAtNTA0LDcgKzQ5Niw2IEBACiAJdTE2IHBoeXR4YW50ID0gd2xjLT5zdGYtPnBoeXR4YW50OwogCiAJaWYgKFJTUEVDX1NURihyc3BlYykgIT0gUEhZX1RYQzFfTU9ERV9TSVNPKSB7Ci0JCUFTU0VSVCh3bGMtPnN0Zi0+dHhzdHJlYW1zID4gMSk7CiAJCXBoeXR4YW50ID0gd2xjLT5zdGYtPnR4Y2hhaW4gPDwgUEhZX1RYQ19BTlRfU0hJRlQ7CiAJfSBlbHNlIGlmICh3bGMtPnN0Zi0+dHhhbnQgPT0gQU5UX1RYX0RFRikKIAkJcGh5dHhhbnQgPSB3bGMtPnN0Zi0+dHhjaGFpbiA8PCBQSFlfVFhDX0FOVF9TSElGVDsKQEAgLTUyNCw3ICs1MTUsNiBAQAogCiAJLyogZm9yIG5vbi1zaXNvIHJhdGVzIG9yIGRlZmF1bHQgc2V0dGluZywgdXNlIHRoZSBhdmFpbGFibGUgY2hhaW5zICovCiAJaWYgKFdMQ0lTTlBIWSh3bGMtPmJhbmQpKSB7Ci0JCUFTU0VSVCh3bGMtPnN0Zi0+dHhjaGFpbiAhPSAwKTsKIAkJcGh5dHhhbnQgPSBfd2xjX3N0Zl9waHl0eGNoYWluX3NlbCh3bGMsIHJzcGVjKTsKIAkJbWFzayA9IFBIWV9UWENfSFRBTlRfTUFTSzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2luY2x1ZGUvYWlkbXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvaW5jbHVkZS9haWRtcC5oCmluZGV4IGQzM2YwMjAuLjdlMGNlOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvaW5jbHVkZS9haWRtcC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvaW5jbHVkZS9haWRtcC5oCkBAIC0yOTIsNyArMjkyLDcgQEAKICNkZWZpbmUJQUlfT09CRElOV0lEVEgJCTB4MzY0CiAjZGVmaW5lCUFJX09PQkRPVVRXSURUSAkJMHgzNjgKIAotI2lmCWRlZmluZWQoSUxfQklHRU5ESUFOKSAmJiBkZWZpbmVkKEJDTUhORDc0SykKKyNpZglkZWZpbmVkKF9fQklHX0VORElBTikgJiYgZGVmaW5lZChCQ01ITkQ3NEspCiAvKiBTZWxlY3RpdmUgc3dhcHBlZCBkZWZpbmVzIGZvciB0aG9zZSByZWdpc3RlcnMgd2UgbmVlZCBpbgogICogYmlnLWVuZGlhbiBjb2RlLgogICovCkBAIC0zMDMsNyArMzAzLDcgQEAKICNkZWZpbmUJQUlfUkVTRVRDVFJMCQkweDgwNAogI2RlZmluZQlBSV9SRVNFVFNUQVRVUwkJMHg4MDAKIAotI2Vsc2UJCQkJLyogIUlMX0JJR0VORElBTiB8fCAhQkNNSE5ENzRLICovCisjZWxzZQkJCQkvKiAhX19CSUdfRU5ESUFOIHx8ICFCQ01ITkQ3NEsgKi8KIAogI2RlZmluZQlBSV9JT0NUUkxTRVQJCTB4NDAwCiAjZGVmaW5lCUFJX0lPQ1RSTENMRUFSCQkweDQwNApAQCAtMzEyLDcgKzMxMiw3IEBACiAjZGVmaW5lCUFJX1JFU0VUQ1RSTAkJMHg4MDAKICNkZWZpbmUJQUlfUkVTRVRTVEFUVVMJCTB4ODA0CiAKLSNlbmRpZgkJCQkvKiBJTF9CSUdFTkRJQU4gJiYgQkNNSE5ENzRLICovCisjZW5kaWYJCQkJLyogX19CSUdfRU5ESUFOICYmIEJDTUhORDc0SyAqLwogCiAjZGVmaW5lCUFJX0lPQ1RSTFdJRFRICQkweDcwMAogI2RlZmluZQlBSV9JT1NUQVRVU1dJRFRICTB4NzA0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2luY2x1ZGUvYmNtZGVmcy5oIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9pbmNsdWRlL2JjbWRlZnMuaAppbmRleCAyMmEzODllLi41NTYzMWYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2luY2x1ZGUvYmNtZGVmcy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvaW5jbHVkZS9iY21kZWZzLmgKQEAgLTM2LDEyICszNiw2IEBACiAKICNkZWZpbmUJQVVUTwkoLTEpCQkvKiBBdXRvID0gLTEgKi8KIAotI2lmZGVmIG1pcHMKLSNkZWZpbmUgQkNNRkFTVFBBVEgJCV9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXygiLnRleHQuZmFzdHBhdGgiKSkpCi0jZWxzZQotI2RlZmluZSBCQ01GQVNUUEFUSAotI2VuZGlmCi0KIC8qIEJ1cyB0eXBlcyAqLwogI2RlZmluZQlTSV9CVVMJCQkwCS8qIFNPQyBJbnRlcmNvbm5lY3QgKi8KICNkZWZpbmUJUENJX0JVUwkJCTEJLyogUENJIHRhcmdldCAqLwpAQCAtMTE0LDEyICsxMDgsNiBAQAogCiAjZGVmaW5lIEJDTUVYVFJBSERST09NIDE3MgogCi0jaWZkZWYgQkNNREJHCi0jaWZuZGVmIEJDTURCR19BU1NFUlQKLSNkZWZpbmUgQkNNREJHX0FTU0VSVAotI2VuZGlmCS8qIEJDTURCR19BU1NFUlQgKi8KLSNlbmRpZgkvKiBCQ01EQkcgKi8KLQogLyogTWFjcm9zIGZvciBkb2luZyBkZWZpbml0aW9uIGFuZCBnZXQvc2V0IG9mIGJpdGZpZWxkcwogICogVXNhZ2UgZXhhbXBsZSwgZS5nLiBhIHRocmVlLWJpdCBmaWVsZCAoYml0cyA0LTYpOgogICogICAgI2RlZmluZSA8TkFNRT5fTQlCSVRGSUVMRF9NQVNLKDMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2luY2x1ZGUvYmNtZGV2cy5oIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9pbmNsdWRlL2JjbWRldnMuaAppbmRleCAwNzU4ODNhLi4yNjk0N2VmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2luY2x1ZGUvYmNtZGV2cy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvaW5jbHVkZS9iY21kZXZzLmgKQEAgLTE3LDE3ICsxNywxMCBAQAogI2lmbmRlZglfQkNNREVWU19ICiAjZGVmaW5lCV9CQ01ERVZTX0gKIAotLyogUENJIHZlbmRvciBJRHMgKi8KLSNkZWZpbmUJVkVORE9SX0JST0FEQ09NCQkweDE0ZTQKLQotLyogRE9OR0xFIFZJRC9QSURzICovCi0jZGVmaW5lIEJDTV9ETkdMX1ZJRAkJMHgwYTVjCi0jZGVmaW5lIEJDTV9ETkdMX0JEQ19QSUQJMHgwYmRjCi0KICNkZWZpbmUJQkNNNDMyNV9EMTFEVUFMX0lECTB4NDMxYgogI2RlZmluZQlCQ000MzI1X0QxMUdfSUQJCTB4NDMxYwogI2RlZmluZQlCQ000MzI1X0QxMUFfSUQJCTB4NDMxZAotI2RlZmluZSBCQ000MzI5X0QxMU5fSUQJCTB4NDMyZQkvKiA0MzI5IDgwMi4xMW4gZHVhbGJhbmQgZGV2aWNlICovCisKICNkZWZpbmUgQkNNNDMyOV9EMTFOMkdfSUQJMHg0MzJmCS8qIDQzMjkgODAyLjExbiAyLjRHIGRldmljZSAqLwogI2RlZmluZSBCQ000MzI5X0QxMU41R19JRAkweDQzMzAJLyogNDMyOSA4MDIuMTFuIDVHIGRldmljZSAqLwogI2RlZmluZSBCQ000MzI5X0QxMU5EVUFMX0lECTB4NDMyZQpAQCAtMzcsMjIgKzMwLDEzIEBACiAjZGVmaW5lIEJDTTQzMTlfRDExTjVHX0lECTB4NDMzOQkvKiA0MzE5IDgwMi4xMW4gNUcgZGV2aWNlICovCiAKICNkZWZpbmUgQkNNNDMyMjRfRDExTl9JRAkweDQzNTMJLyogNDMyMjQgODAyLjExbiBkdWFsYmFuZCBkZXZpY2UgKi8KKwogI2RlZmluZSBCQ000MzIyNV9EMTFOMkdfSUQJMHg0MzU3CS8qIDQzMjI1IDgwMi4xMW4gMi40R0h6IGRldmljZSAqLwogCiAjZGVmaW5lIEJDTTQzMjM2X0QxMU5fSUQJMHg0MzQ2CS8qIDQzMjM2IDgwMi4xMW4gZHVhbGJhbmQgZGV2aWNlICovCiAjZGVmaW5lIEJDTTQzMjM2X0QxMU4yR19JRAkweDQzNDcJLyogNDMyMzYgODAyLjExbiAyLjRHSHogZGV2aWNlICovCi0jZGVmaW5lIEJDTTQzMjM2X0QxMU41R19JRAkweDQzNDgJLyogNDMyMzYgODAyLjExbiA1R0h6IGRldmljZSAqLwogCi0jZGVmaW5lIEJDTTQzNDIxX0QxMU5fSUQJMHhBOTlECS8qIDQzNDIxIDgwMi4xMW4gZHVhbGJhbmQgZGV2aWNlICovCiAjZGVmaW5lIEJDTTQzMTNfRDExTjJHX0lECTB4NDcyNwkvKiA0MzEzIDgwMi4xMW4gMi40RyBkZXZpY2UgKi8KLSNkZWZpbmUgQkNNNDMzMF9EMTFOX0lEICAgICAgICAgMHg0MzYwCS8qIDQzMzAgODAyLjExbiBkdWFsYmFuZCBkZXZpY2UgKi8KLSNkZWZpbmUgQkNNNDMzMF9EMTFOMkdfSUQgICAgICAgMHg0MzYxCS8qIDQzMzAgODAyLjExbiAyLjRHIGRldmljZSAqLwotI2RlZmluZSBCQ000MzMwX0QxMU41R19JRCAgICAgICAweDQzNjIJLyogNDMzMCA4MDIuMTFuIDVHIGRldmljZSAqLwotI2RlZmluZSBCQ000MzM2X0QxMU5fSUQJCTB4NDM0MwkvKiA0MzM2IDgwMi4xMW4gMi40R0h6IGRldmljZSAqLwotI2RlZmluZSBCQ002MzYyX0QxMU5fSUQJCTB4NDM1ZgkvKiA2MzYyIDgwMi4xMW4gZHVhbGJhbmQgZGV2aWNlICovCi0jZGVmaW5lIEJDTTQzMzFfRDExTl9JRAkJMHg0MzMxCS8qIDQzMzEgODAyLjExbiBkdWFsYmFuZCBpZCAqLwotI2RlZmluZSBCQ000MzMxX0QxMU4yR19JRAkweDQzMzIJLyogNDMzMSA4MDIuMTFuIDIuNEdoeiBiYW5kIGlkICovCi0jZGVmaW5lIEJDTTQzMzFfRDExTjVHX0lECTB4NDMzMwkvKiA0MzMxIDgwMi4xMW4gNUdoeiBiYW5kIGlkICovCiAKIC8qIENoaXAgSURzICovCiAjZGVmaW5lIEJDTTQzMTNfQ0hJUF9JRAkJMHg0MzEzCS8qIDQzMTMgY2hpcCBpZCAqLwpAQCAtNjAsNyArNDQsNiBAQAogCiAjZGVmaW5lCUJDTTQzMjI0X0NISVBfSUQJNDMyMjQJLyogNDMyMjQgY2hpcGNvbW1vbiBjaGlwaWQgKi8KICNkZWZpbmUJQkNNNDMyMjVfQ0hJUF9JRAk0MzIyNQkvKiA0MzIyNSBjaGlwY29tbW9uIGNoaXBpZCAqLwotI2RlZmluZQlCQ000MzIyOF9DSElQX0lECTQzMjI4CS8qIDQzMjI4IGNoaXBjb21tb24gY2hpcGlkICovCiAjZGVmaW5lCUJDTTQzNDIxX0NISVBfSUQJNDM0MjEJLyogNDM0MjEgY2hpcGNvbW1vbiBjaGlwaWQgKi8KICNkZWZpbmUJQkNNNDMyMzVfQ0hJUF9JRAk0MzIzNQkvKiA0MzIzNSBjaGlwY29tbW9uIGNoaXBpZCAqLwogI2RlZmluZQlCQ000MzIzNl9DSElQX0lECTQzMjM2CS8qIDQzMjM2IGNoaXBjb21tb24gY2hpcGlkICovCkBAIC04Miw1NyArNjUsMjMgQEAKIC8qIFBhY2thZ2UgSURzICovCiAjZGVmaW5lIEJDTTQzMjlfMjg5UElOX1BLR19JRAkwCS8qIDQzMjkgMjg5LXBpbiBwYWNrYWdlIGlkICovCiAjZGVmaW5lIEJDTTQzMjlfMTgyUElOX1BLR19JRAkxCS8qIDQzMjlOIDE4Mi1waW4gcGFja2FnZSBpZCAqLwotI2RlZmluZQlCQ000NzE2X1BLR19JRAkJOAkvKiA0NzE2IHBhY2thZ2UgaWQgKi8KICNkZWZpbmUJQkNNNDcxN19QS0dfSUQJCTkJLyogNDcxNyBwYWNrYWdlIGlkICovCiAjZGVmaW5lCUJDTTQ3MThfUEtHX0lECQkxMAkvKiA0NzE4IHBhY2thZ2UgaWQgKi8KLSNkZWZpbmUgQkNNNTM1Nl9QS0dfTk9OTU9ERQkxCS8qIDUzNTYgcGFja2FnZSB3aXRob3V0IG5tb2RlIHN1cHBwb3J0ICovCi0jZGVmaW5lIEJDTTUzNThVX1BLR19JRAkJOAkvKiA1MzU4VSBwYWNrYWdlIGlkICovCi0jZGVmaW5lIEJDTTUzNThfUEtHX0lECQk5CS8qIDUzNTggcGFja2FnZSBpZCAqLwotI2RlZmluZSBCQ000NzE4Nl9QS0dfSUQJCTEwCS8qIDQ3MTg2IHBhY2thZ2UgaWQgKi8KLSNkZWZpbmUgQkNNNTM1N19QS0dfSUQJCTExCS8qIDUzNTcgcGFja2FnZSBpZCAqLwotI2RlZmluZSBCQ001MzU2VV9QS0dfSUQJCTEyCS8qIDUzNTZVIHBhY2thZ2UgaWQgKi8KLSNkZWZpbmUgSERMU0lNNTM1MF9QS0dfSUQJMQkvKiBIREwgc2ltdWxhdG9yIHBhY2thZ2UgaWQgZm9yIGEgNTM1MCAqLwogI2RlZmluZSBIRExTSU1fUEtHX0lECQkxNAkvKiBIREwgc2ltdWxhdG9yIHBhY2thZ2UgaWQgKi8KICNkZWZpbmUgSFdTSU1fUEtHX0lECQkxNQkvKiBIYXJkd2FyZSBzaW11bGF0b3IgcGFja2FnZSBpZCAqLwotI2RlZmluZSBCQ000MzIyNF9GQUJfQ1NNCTB4OAkvKiB0aGUgY2hpcCBpcyBtYW51ZmFjdHVyZWQgYnkgQ1NNICovCiAjZGVmaW5lIEJDTTQzMjI0X0ZBQl9TTUlDCTB4YQkvKiB0aGUgY2hpcCBpcyBtYW51ZmFjdHVyZWQgYnkgU01JQyAqLwotI2RlZmluZSBCQ000MzM2X1dMQkdBX1BLR19JRCAweDgKIAogLyogYm9hcmRmbGFncyAqLwotI2RlZmluZQlCRkxfUkVTRVJWRUQxCQkweDAwMDAwMDAxCiAjZGVmaW5lCUJGTF9QQUNUUkwJCTB4MDAwMDAwMDIJLyogQm9hcmQgaGFzIGdwaW8gOSBjb250cm9sbGluZyB0aGUgUEEgKi8KLSNkZWZpbmUJQkZMX0FJUkxJTkVNT0RFCQkweDAwMDAwMDA0CS8qIEJvYXJkIGltcGxlbWVudHMgZ3BpbyAxMyByYWRpbyBkaXNhYmxlIGluZGljYXRpb24gKi8KLSNkZWZpbmUJQkZMX0FEQ0RJVgkJMHgwMDAwMDAwOAkvKiBCb2FyZCBoYXMgdGhlIHJzc2kgQURDIGRpdmlkZXIgKi8KLSNkZWZpbmUJQkZMX0VORVRST0JPCQkweDAwMDAwMDEwCS8qIEJvYXJkIGhhcyByb2JvIHN3aXRjaCBvciBjb3JlICovCiAjZGVmaW5lCUJGTF9OT1BMTERPV04JCTB4MDAwMDAwMjAJLyogTm90IG9rIHRvIHBvd2VyIGRvd24gdGhlIGNoaXAgcGxsIGFuZCBvc2NpbGxhdG9yICovCi0jZGVmaW5lCUJGTF9DQ0tISVBXUgkJMHgwMDAwMDA0MAkvKiBDYW4gZG8gaGlnaC1wb3dlciBDQ0sgdHJhbnNtaXNzaW9uICovCi0jZGVmaW5lCUJGTF9FTkVUQURNCQkweDAwMDAwMDgwCS8qIEJvYXJkIGhhcyBBRE10ZWsgc3dpdGNoICovCi0jZGVmaW5lCUJGTF9FTkVUVkxBTgkJMHgwMDAwMDEwMAkvKiBCb2FyZCBoYXMgVkxBTiBjYXBhYmlsaXR5ICovCi0jZGVmaW5lIEJGTF9OT1BDSQkJMHgwMDAwMDQwMAkvKiBCb2FyZCBsZWF2ZXMgUENJIGZsb2F0aW5nICovCiAjZGVmaW5lIEJGTF9GRU0JCQkweDAwMDAwODAwCS8qIEJvYXJkIHN1cHBvcnRzIHRoZSBGcm9udCBFbmQgTW9kdWxlICovCiAjZGVmaW5lIEJGTF9FWFRMTkEJCTB4MDAwMDEwMDAJLyogQm9hcmQgaGFzIGFuIGV4dGVybmFsIExOQSBpbiAyLjRHSHogYmFuZCAqLwotI2RlZmluZSBCRkxfSEdQQQkJMHgwMDAwMjAwMAkvKiBCb2FyZCBoYXMgYSBoaWdoIGdhaW4gUEEgKi8KLSNkZWZpbmUJQkZMX1JFU0VSVkVEMgkJMHgwMDAwNDAwMAotI2RlZmluZQlCRkxfQUxUSVEJCTB4MDAwMDgwMDAJLyogQWx0ZXJuYXRlIEkvUSBzZXR0aW5ncyAqLwogI2RlZmluZSBCRkxfTk9QQQkJMHgwMDAxMDAwMAkvKiBCb2FyZCBoYXMgbm8gUEEgKi8KLSNkZWZpbmUgQkZMX1JTU0lJTlYJCTB4MDAwMjAwMDAJLyogQm9hcmQncyBSU1NJIHVzZXMgcG9zaXRpdmUgc2xvcGUobm90IFRTU0kpICovCi0jZGVmaW5lIEJGTF9QQVJFRgkJMHgwMDA0MDAwMAkvKiBCb2FyZCB1c2VzIHRoZSBQQVJlZiBMRE8gKi8KLSNkZWZpbmUgQkZMXzNUU1dJVENICQkweDAwMDgwMDAwCS8qIEJvYXJkIHVzZXMgYSB0cmlwbGUgdGhyb3cgc3dpdGNoIHNoYXJlZCB3aXRoIEJUICovCi0jZGVmaW5lIEJGTF9QSEFTRVNISUZUCQkweDAwMTAwMDAwCS8qIEJvYXJkIGNhbiBzdXBwb3J0IHBoYXNlIHNoaWZ0ZXIgKi8KICNkZWZpbmUgQkZMX0JVQ0tCT09TVAkJMHgwMDIwMDAwMAkvKiBQb3dlciB0b3BvbG9neSB1c2VzIEJVQ0tCT09TVCAqLwogI2RlZmluZSBCRkxfRkVNX0JUCQkweDAwNDAwMDAwCS8qIEJvYXJkIGhhcyBGRU0gYW5kIHN3aXRjaCB0byBzaGFyZSBhbnRlbm5hIHcvIEJUICovCiAjZGVmaW5lIEJGTF9OT0NCVUNLCQkweDAwODAwMDAwCS8qIFBvd2VyIHRvcG9sb2d5IGRvZXNuJ3QgdXNlIENCVUNLICovCi0jZGVmaW5lIEJGTF9DQ0tGQVZPUkVWTQkJMHgwMTAwMDAwMAkvKiBGYXZvciBDQ0sgRVZNIG92ZXIgc3BlY3RyYWwgbWFzayAqLwogI2RlZmluZSBCRkxfUEFMRE8JCTB4MDIwMDAwMDAJLyogUG93ZXIgdG9wb2xvZ3kgdXNlcyBQQUxETyAqLwotI2RlZmluZSBCRkxfTE5MRE8yXzJQNQkJMHgwNDAwMDAwMAkvKiBTZWxlY3QgMi41ViBhcyBMTkxETzIgb3V0cHV0IHZvbHRhZ2UgKi8KLSNkZWZpbmUgQkZMX0ZBU1RQV1IJCTB4MDgwMDAwMDAKLSNkZWZpbmUgQkZMX1VDUFdSQ1RMX01JTklORFgJMHgwODAwMDAwMAkvKiBFbmZvcmNlIG1pbiBwb3dlciBpbmRleCB0byBhdm9pZCBGRU0gZGFtYWdlICovCiAjZGVmaW5lIEJGTF9FWFRMTkFfNUdIegkJMHgxMDAwMDAwMAkvKiBCb2FyZCBoYXMgYW4gZXh0ZXJuYWwgTE5BIGluIDVHSHogYmFuZCAqLwotI2RlZmluZSBCRkxfVFJTV18xYnkyCQkweDIwMDAwMDAwCS8qIEJvYXJkIGhhcyAyIFRSU1cncyBpbiAxYnkyIGRlc2lnbnMgKi8KLSNkZWZpbmUgQkZMX0xPX1RSU1dfUl81R0h6CTB4NDAwMDAwMDAJLyogSW4gNUcgZG8gbm90IHRocm93IFRSU1cgdG8gVCBmb3IgY2xpcExPIGdhaW4gKi8KLSNkZWZpbmUgQkZMX0VMTkFfR0FJTkRFRgkweDgwMDAwMDAwCS8qIEJhY2tvZmYgSW5pdEdhaW4gYmFzZWQgb24gZWxuYV8yZy81ZyBmaWVsZAotCQkJCQkJICogd2hlbiB0aGlzIGZsYWcgaXMgc2V0Ci0JCQkJCQkgKi8KIAogLyogYm9hcmRmbGFnczIgKi8KICNkZWZpbmUgQkZMMl9SWEJCX0lOVF9SRUdfRElTCTB4MDAwMDAwMDEJLyogQm9hcmQgaGFzIGFuIGV4dGVybmFsIHJ4YmIgcmVndWxhdG9yICovCkBAIC0xNDEsMTYgKzkwLDEyIEBACiAjZGVmaW5lIEJGTDJfMlg0X0RJVgkJMHgwMDAwMDAwOAkvKiBCb2FyZCBzdXBwb3J0cyB0aGUgMlg0IGRpdmVyc2l0eSBzd2l0Y2ggKi8KICNkZWZpbmUgQkZMMl81R19QV1JHQUlOCQkweDAwMDAwMDEwCS8qIEJvYXJkIHN1cHBvcnRzIDVHIGJhbmQgcG93ZXIgZ2FpbiAqLwogI2RlZmluZSBCRkwyX1BDSUVXQVJfT1ZSCTB4MDAwMDAwMjAJLyogQm9hcmQgb3ZlcnJpZGVzIEFTUE0gYW5kIENsa3JlcSBzZXR0aW5ncyAqLwotI2RlZmluZSBCRkwyX0NBRVNFUlNfQlJECTB4MDAwMDAwNDAJLyogQm9hcmQgaXMgQ2Flc2VycyBicmQgKHVudXNlZCBieSBzdykgKi8KICNkZWZpbmUgQkZMMl9MRUdBQ1kJCTB4MDAwMDAwODAKICNkZWZpbmUgQkZMMl9TS1dSS0ZFTV9CUkQJMHgwMDAwMDEwMAkvKiA0MzIxbWNtOTMgYm9hcmQgdXNlcyBTa3l3b3JrcyBGRU0gKi8KICNkZWZpbmUgQkZMMl9TUFVSX1dBUgkJMHgwMDAwMDIwMAkvKiBCb2FyZCBoYXMgYSBXQVIgZm9yIGNsb2NrLWhhcm1vbmljIHNwdXJzICovCiAjZGVmaW5lIEJGTDJfR1BMTF9XQVIJCTB4MDAwMDA0MDAJLyogRmxhZyB0byBuYXJyb3cgRy1iYW5kIFBMTCBsb29wIGIvdyAqLwotI2RlZmluZSBCRkwyX1RSSVNUQVRFX0xFRAkweDAwMDAwODAwCS8qIFRyaS1zdGF0ZSB0aGUgTEVEICovCiAjZGVmaW5lIEJGTDJfU0lOR0xFQU5UX0NDSwkweDAwMDAxMDAwCS8qIFR4IENDSyBwa3RzIG9uIEFudCAwIG9ubHkgKi8KICNkZWZpbmUgQkZMMl8yR19TUFVSX1dBUgkweDAwMDAyMDAwCS8qIFdBUiB0byByZWR1Y2UgYW5kIGF2b2lkIGNsb2NrLWhhcm1vbmljIHNwdXJzIGluIDJHICovCi0jZGVmaW5lIEJGTDJfQlBIWV9BTExfVFhDT1JFUwkweDAwMDA0MDAwCS8qIFRyYW5zbWl0IGJwaHkgZnJhbWVzIHVzaW5nIGFsbCB0eCBjb3JlcyAqLwotI2RlZmluZSBCRkwyX0ZDQ19CQU5ERURHRV9XQVIJMHgwMDAwODAwMAkvKiB1c2luZyA0ME1oeiBMUEYgZm9yIDIwTWh6IGJhbmRlZGdlIGNoYW5uZWxzICovCiAjZGVmaW5lIEJGTDJfR1BMTF9XQVIyCSAgICAgICAgMHgwMDAxMDAwMAkvKiBGbGFnIHRvIHdpZGVuIEctYmFuZCBQTEwgbG9vcCBiL3cgKi8KICNkZWZpbmUgQkZMMl9JUEFMVkxTSElGVF8zUDMgICAgMHgwMDAyMDAwMAogI2RlZmluZSBCRkwyX0lOVEVSTkRFVF9UWElRQ0FMICAweDAwMDQwMDAwCS8qIFVzZSBpbnRlcm5hbCBlbnZlbG9wZSBkZXRlY3RvciBmb3IgVFggSVFDQUwgKi8KQEAgLTE2MCwzMiArMTA1LDE5IEBACiAJCQkJCQkgKi8KIAogLyogYm9hcmQgc3BlY2lmaWMgR1BJTyBhc3NpZ25tZW50LCBncGlvIDAtMyBhcmUgYWxzbyBjdXN0b21lci1jb25maWd1cmFibGUgbGVkICovCi0jZGVmaW5lCUJPQVJEX0dQSU9fUkVTRVJWRUQxCTB4MDEwCi0jZGVmaW5lCUJPQVJEX0dQSU9fUkVTRVJWRUQyCTB4MDIwCi0jZGVmaW5lCUJPQVJEX0dQSU9fUkVTRVJWRUQzCTB4MDgwCi0jZGVmaW5lCUJPQVJEX0dQSU9fUkVTRVJWRUQ0CTB4MTAwCiAjZGVmaW5lCUJPQVJEX0dQSU9fUEFDVFJMCTB4MjAwCS8qIGJpdCA5IGNvbnRyb2xzIHRoZSBQQSBvbiBuZXcgNDMwNiBib2FyZHMgKi8KICNkZWZpbmUgQk9BUkRfR1BJT18xMgkJMHgxMDAwCS8qIGdwaW8gMTIgKi8KICNkZWZpbmUgQk9BUkRfR1BJT18xMwkJMHgyMDAwCS8qIGdwaW8gMTMgKi8KLSNkZWZpbmUgQk9BUkRfR1BJT19SRVNFUlZFRDUJMHgwODAwCi0jZGVmaW5lIEJPQVJEX0dQSU9fUkVTRVJWRUQ2CTB4MjAwMAotI2RlZmluZSBCT0FSRF9HUElPX1JFU0VSVkVENwkweDQwMDAKLSNkZWZpbmUgQk9BUkRfR1BJT19SRVNFUlZFRDgJMHg4MDAwCiAKICNkZWZpbmUJUENJX0NGR19HUElPX1NDUwkweDEwCS8qIFBDSSBjb25maWcgc3BhY2UgYml0IDQgZm9yIDQzMDZjMCBzbG93IGNsb2NrIHNvdXJjZSAqLwotI2RlZmluZSBQQ0lfQ0ZHX0dQSU9fSFdSQUQJMHgyMAkvKiBQQ0kgY29uZmlnIHNwYWNlIEdQSU8gMTMgZm9yIGh3IHJhZGlvIGRpc2FibGUgKi8KICNkZWZpbmUgUENJX0NGR19HUElPX1hUQUwJMHg0MAkvKiBQQ0kgY29uZmlnIHNwYWNlIEdQSU8gMTQgZm9yIFh0YWwgcG93ZXItdXAgKi8KICNkZWZpbmUgUENJX0NGR19HUElPX1BMTAkweDgwCS8qIFBDSSBjb25maWcgc3BhY2UgR1BJTyAxNSBmb3IgUExMIHBvd2VyLWRvd24gKi8KIAogLyogcG93ZXIgY29udHJvbCBkZWZpbmVzICovCiAjZGVmaW5lIFBMTF9ERUxBWQkJMTUwCS8qIHVzIHBsbCBvbiBkZWxheSAqLwogI2RlZmluZSBGUkVGX0RFTEFZCQkyMDAJLyogdXMgZnJlZiBjaGFuZ2UgZGVsYXkgKi8KLSNkZWZpbmUgTUlOX1NMT1dfQ0xLCQkzMgkvKiB1cyBTbG93IGNsb2NrIHBlcmlvZCAqLwogI2RlZmluZQlYVEFMX09OX0RFTEFZCQkxMDAwCS8qIHVzIGNyeXN0YWwgcG93ZXItb24gZGVsYXkgKi8KIAotLyogIyBvZiBHUElPIHBpbnMgKi8KLSNkZWZpbmUgR1BJT19OVU1QSU5TCQkxNgotCiAvKiBSZWZlcmVuY2UgYm9hcmQgdHlwZXMgKi8KICNkZWZpbmUJU1BJX0JPQVJECQkweDA0MDIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9pbmNsdWRlL2JjbW52cmFtLmggYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2luY2x1ZGUvYmNtbnZyYW0uaAppbmRleCBlMTk0MTMxLi4xMjY0NWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2luY2x1ZGUvYmNtbnZyYW0uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2luY2x1ZGUvYmNtbnZyYW0uaApAQCAtMzAsMzEgKzMwLDI2IEBACiB9OwogCiAvKgotICogR2V0IGRlZmF1bHQgdmFsdWUgZm9yIGFuIE5WUkFNIHZhcmlhYmxlCi0gKi8KLWV4dGVybiBjaGFyICpudnJhbV9kZWZhdWx0X2dldChjb25zdCBjaGFyICpuYW1lKTsKLQotLyoKICAqIEluaXRpYWxpemUgTlZSQU0gYWNjZXNzLiBNYXkgYmUgdW5uZWNlc3Nhcnkgb3IgdW5kZWZpbmVkIG9uIGNlcnRhaW4KICAqIHBsYXRmb3Jtcy4KICAqLwotZXh0ZXJuIGludCBudnJhbV9pbml0KHZvaWQgKnNpaCk7CitleHRlcm4gaW50IG52cmFtX2luaXQodm9pZCk7CiAKIC8qCiAgKiBBcHBlbmQgYSBjaHVuayBvZiBudnJhbSB2YXJpYWJsZXMgdG8gdGhlIGdsb2JhbCBsaXN0CiAgKi8KLWV4dGVybiBpbnQgbnZyYW1fYXBwZW5kKHZvaWQgKnNpLCBjaGFyICp2YXJzLCB1aW50IHZhcnN6KTsKK2V4dGVybiBpbnQgbnZyYW1fYXBwZW5kKGNoYXIgKnZhcnMsIHVpbnQgdmFyc3opOwogCiAvKgogICogQ2hlY2sgZm9yIHJlc2V0IGJ1dHRvbiBwcmVzcyBmb3IgcmVzdG9yaW5nIGZhY3RvcnkgZGVmYXVsdHMuCiAgKi8KLWV4dGVybiBpbnQgbnZyYW1fcmVzZXQodm9pZCAqc2loKTsKK2V4dGVybiBpbnQgbnZyYW1fcmVzZXQodm9pZCk7CiAKIC8qCiAgKiBEaXNhYmxlIE5WUkFNIGFjY2Vzcy4gTWF5IGJlIHVubmVjZXNzYXJ5IG9yIHVuZGVmaW5lZCBvbiBjZXJ0YWluCiAgKiBwbGF0Zm9ybXMuCiAgKi8KLWV4dGVybiB2b2lkIG52cmFtX2V4aXQodm9pZCAqc2loKTsKK2V4dGVybiB2b2lkIG52cmFtX2V4aXQodm9pZCk7CiAKIC8qCiAgKiBHZXQgdGhlIHZhbHVlIG9mIGFuIE5WUkFNIHZhcmlhYmxlLiBUaGUgcG9pbnRlciByZXR1cm5lZCBtYXkgYmUKQEAgLTY1LDEyICs2MCw2IEBACiBleHRlcm4gY2hhciAqbnZyYW1fZ2V0KGNvbnN0IGNoYXIgKm5hbWUpOwogCiAvKgotICogUmVhZCB0aGUgcmVzZXQgR1BJTyB2YWx1ZSBmcm9tIHRoZSBudnJhbSBhbmQgc2V0IHRoZSBHUElPCi0gKiBhcyBpbnB1dAotICovCi1leHRlcm4gaW50IG52cmFtX3Jlc2V0Z3Bpb19pbml0KHZvaWQgKnNpaCk7Ci0KLS8qCiAgKiBHZXQgdGhlIHZhbHVlIG9mIGFuIE5WUkFNIHZhcmlhYmxlLgogICogQHBhcmFtCW5hbWUJbmFtZSBvZiB2YXJpYWJsZSB0byBnZXQKICAqIEByZXR1cm4JdmFsdWUgb2YgdmFyaWFibGUgb3IgTlVMIGlmIHVuZGVmaW5lZApAQCAtMTM5LDE0ICsxMjgsMTIgQEAKICAqLwogZXh0ZXJuIGludCBudnJhbV9nZXRhbGwoY2hhciAqbnZyYW1fYnVmLCBpbnQgY291bnQpOwogCi0vKgotICogcmV0dXJucyB0aGUgY3JjIHZhbHVlIG9mIHRoZSBudnJhbQotICogQHBhcmFtCW52aAludnJhbSBoZWFkZXIgcG9pbnRlcgotICovCi11OCBudnJhbV9jYWxjX2NyYyhzdHJ1Y3QgbnZyYW1faGVhZGVyICpudmgpOwotCiAjZW5kaWYJCQkJLyogX0xBTkdVQUdFX0FTU0VNQkxZICovCiAKKy8qIHZhcmlhYmxlIGFjY2VzcyAqLworZXh0ZXJuIGNoYXIgKmdldHZhcihjaGFyICp2YXJzLCBjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiBpbnQgZ2V0aW50dmFyKGNoYXIgKnZhcnMsIGNvbnN0IGNoYXIgKm5hbWUpOworCiAvKiBUaGUgTlZSQU0gdmVyc2lvbiBudW1iZXIgc3RvcmVkIGFzIGFuIE5WUkFNIHZhcmlhYmxlICovCiAjZGVmaW5lIE5WUkFNX1NPRlRXQVJFX1ZFUlNJT04JIjEiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvaW5jbHVkZS9iY21zZHBjbS5oIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9pbmNsdWRlL2JjbXNkcGNtLmgKaW5kZXggNDg2OTk0Ny4uNTE3NWU2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9pbmNsdWRlL2JjbXNkcGNtLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9pbmNsdWRlL2JjbXNkcGNtLmgKQEAgLTE4Niw3ICsxODYsNyBAQAogICogU2hhcmVkIHN0cnVjdHVyZSBiZXR3ZWVuIGRvbmdsZSBhbmQgdGhlIGhvc3QuCiAgKiBUaGUgc3RydWN0dXJlIGNvbnRhaW5zIHBvaW50ZXJzIHRvIHRyYXAgb3IgYXNzZXJ0IGluZm9ybWF0aW9uLgogICovCi0jZGVmaW5lIFNEUENNX1NIQVJFRF9WRVJTSU9OICAgICAgIDB4MDAwMQorI2RlZmluZSBTRFBDTV9TSEFSRURfVkVSU0lPTiAgICAgICAweDAwMDIKICNkZWZpbmUgU0RQQ01fU0hBUkVEX1ZFUlNJT05fTUFTSyAgMHgwMEZGCiAjZGVmaW5lIFNEUENNX1NIQVJFRF9BU1NFUlRfQlVJTFQgIDB4MDEwMAogI2RlZmluZSBTRFBDTV9TSEFSRURfQVNTRVJUICAgICAgICAweDAyMDAKQEAgLTIwMCw2ICsyMDAsNyBAQAogCXUzMiBhc3NlcnRfbGluZTsKIAl1MzIgY29uc29sZV9hZGRyOwkvKiBBZGRyZXNzIG9mIGhuZHJ0ZV9jb25zX3QgKi8KIAl1MzIgbXNndHJhY2VfYWRkcjsKKwl1OCB0YWdbMzJdOwogfSBzZHBjbV9zaGFyZWRfdDsKIAogZXh0ZXJuIHNkcGNtX3NoYXJlZF90IHNkcGNtX3NoYXJlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvaW5jbHVkZS9iY21zcm9tX2ZtdC5oIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9pbmNsdWRlL2JjbXNyb21fZm10LmgKaW5kZXggNDc2ODk2OC4uNDY2NmFmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9pbmNsdWRlL2JjbXNyb21fZm10LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9pbmNsdWRlL2JjbXNyb21fZm10LmgKQEAgLTEwNSw3ICsxMDUsNyBAQAogCiAvKiBTUk9NIFJldiA0OiBSZWFsbG9jYXRlIHRoZSBzb2Z0d2FyZSBwYXJ0IG9mIHRoZSBzcm9tIHRvIGFjY29tbW9kYXRlCiAgKiBNSU1PIGZlYXR1cmVzLiBJdCBhc3N1bWVzIHVwIHRvIHR3byBQQ0lFIGZ1bmN0aW9ucyBhbmQgNDQwIGJ5dGVzCi0gKiBvZiB1c2VhYmxlIHNyb20gaS5lLiB0aGUgdXNlYWJsZSBzdG9yYWdlIGluIGNoaXBzIHdpdGggT1RQIHRoYXQKKyAqIG9mIHVzYWJsZSBzcm9tIGkuZS4gdGhlIHVzYWJsZSBzdG9yYWdlIGluIGNoaXBzIHdpdGggT1RQIHRoYXQKICAqIGltcGxlbWVudHMgaGFyZHdhcmUgcmVkdW5kYW5jeS4KICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2luY2x1ZGUvYmNtdXRpbHMuaCBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvaW5jbHVkZS9iY211dGlscy5oCmluZGV4IGZjMmEyYTkuLjE3NjgzZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvaW5jbHVkZS9iY211dGlscy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvaW5jbHVkZS9iY211dGlscy5oCkBAIC03NCw3ICs3NCw3IEBACiAjZGVmaW5lIFBLVFFfUFJFQ19JVEVSKHBxLCBwcmVjKSAgICAgICAgZm9yIChwcmVjID0gKHBxKS0+bnVtX3ByZWMgLSAxOyBwcmVjID49IDA7IHByZWMtLSkKIAogLyogZm4ocGt0LCBhcmcpLiAgcmV0dXJuIHRydWUgaWYgcGt0IGJlbG9uZ3MgdG8gaWYgKi8KLQl0eXBlZGVmIGJvb2woKmlmcGt0X2NiX3QpICh2b2lkICosIGludCk7Cit0eXBlZGVmIGJvb2woKmlmcGt0X2NiX3QpIChzdHJ1Y3Qgc2tfYnVmZiAqLCB2b2lkICopOwogCiAvKiBvcGVyYXRpb25zIG9uIGEgc3BlY2lmaWMgcHJlY2VkZW5jZSBpbiBwYWNrZXQgcXVldWUgKi8KIApAQCAtODcsMzAgKzg3LDI2IEBACiAjZGVmaW5lIHBrdHFfcHBlZWsocHEsIHByZWMpICAgICAgICAgICAgKChwcSktPnFbcHJlY10uaGVhZCkKICNkZWZpbmUgcGt0cV9wcGVla190YWlsKHBxLCBwcmVjKSAgICAgICAoKHBxKS0+cVtwcmVjXS50YWlsKQogCi1leHRlcm4gc3RydWN0IHNrX2J1ZmYgKnBrdHFfcGVucShzdHJ1Y3QgcGt0cSAqcHEsIGludCBwcmVjLAorZXh0ZXJuIHN0cnVjdCBza19idWZmICpiY21fcGt0cV9wZW5xKHN0cnVjdCBwa3RxICpwcSwgaW50IHByZWMsCiAJCQkJIHN0cnVjdCBza19idWZmICpwKTsKLWV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqcGt0cV9wZW5xX2hlYWQoc3RydWN0IHBrdHEgKnBxLCBpbnQgcHJlYywKK2V4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqYmNtX3BrdHFfcGVucV9oZWFkKHN0cnVjdCBwa3RxICpwcSwgaW50IHByZWMsCiAJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnApOwotZXh0ZXJuIHN0cnVjdCBza19idWZmICpwa3RxX3BkZXEoc3RydWN0IHBrdHEgKnBxLCBpbnQgcHJlYyk7Ci1leHRlcm4gc3RydWN0IHNrX2J1ZmYgKnBrdHFfcGRlcV90YWlsKHN0cnVjdCBwa3RxICpwcSwgaW50IHByZWMpOworZXh0ZXJuIHN0cnVjdCBza19idWZmICpiY21fcGt0cV9wZGVxKHN0cnVjdCBwa3RxICpwcSwgaW50IHByZWMpOworZXh0ZXJuIHN0cnVjdCBza19idWZmICpiY21fcGt0cV9wZGVxX3RhaWwoc3RydWN0IHBrdHEgKnBxLCBpbnQgcHJlYyk7CiAKIC8qIHBhY2tldCBwcmltaXRpdmVzICovCi1leHRlcm4gc3RydWN0IHNrX2J1ZmYgKnBrdF9idWZfZ2V0X3NrYih1aW50IGxlbik7Ci1leHRlcm4gdm9pZCBwa3RfYnVmX2ZyZWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIHN0cnVjdCBza19idWZmICpiY21fcGt0X2J1Zl9nZXRfc2tiKHVpbnQgbGVuKTsKK2V4dGVybiB2b2lkIGJjbV9wa3RfYnVmX2ZyZWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpOwogCiAvKiBFbXB0eSB0aGUgcXVldWUgYXQgcGFydGljdWxhciBwcmVjZWRlbmNlIGxldmVsICovCi0jaWZkZWYgQlJDTV9GVUxMTUFDCi0JZXh0ZXJuIHZvaWQgcGt0cV9wZmx1c2goc3RydWN0IHBrdHEgKnBxLCBpbnQgcHJlYywKLQkJYm9vbCBkaXIpOwotI2Vsc2UKLQlleHRlcm4gdm9pZCBwa3RxX3BmbHVzaChzdHJ1Y3QgcGt0cSAqcHEsIGludCBwcmVjLAotCQlib29sIGRpciwgaWZwa3RfY2JfdCBmbiwgaW50IGFyZyk7Ci0jZW5kaWYgLyogQlJDTV9GVUxMTUFDICovCitleHRlcm4gdm9pZCBiY21fcGt0cV9wZmx1c2goc3RydWN0IHBrdHEgKnBxLCBpbnQgcHJlYywKKwlib29sIGRpciwgaWZwa3RfY2JfdCBmbiwgdm9pZCAqYXJnKTsKIAogLyogb3BlcmF0aW9ucyBvbiBhIHNldCBvZiBwcmVjZWRlbmNlcyBpbiBwYWNrZXQgcXVldWUgKi8KIAotZXh0ZXJuIGludCBwa3RxX21sZW4oc3RydWN0IHBrdHEgKnBxLCB1aW50IHByZWNfYm1wKTsKLWV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqcGt0cV9tZGVxKHN0cnVjdCBwa3RxICpwcSwgdWludCBwcmVjX2JtcCwgaW50ICpwcmVjX291dCk7CitleHRlcm4gaW50IGJjbV9wa3RxX21sZW4oc3RydWN0IHBrdHEgKnBxLCB1aW50IHByZWNfYm1wKTsKK2V4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqYmNtX3BrdHFfbWRlcShzdHJ1Y3QgcGt0cSAqcHEsIHVpbnQgcHJlY19ibXAsCisJaW50ICpwcmVjX291dCk7CiAKIC8qIG9wZXJhdGlvbnMgb24gcGFja2V0IHF1ZXVlIGFzIGEgd2hvbGUgKi8KIApAQCAtMTIxLDQ2ICsxMTcsMzggQEAKICNkZWZpbmUgcGt0cV9lbXB0eShwcSkgICAgICAgICAgICAgICAgICAoKHBxKS0+bGVuID09IDApCiAKIC8qIG9wZXJhdGlvbnMgZm9yIHNpbmdsZSBwcmVjZWRlbmNlIHF1ZXVlcyAqLwotI2RlZmluZSBwa3RlbnEocHEsIHApCQlwa3RxX3BlbnEoKChzdHJ1Y3QgcGt0cSAqKXBxKSwgMCwgKHApKQotI2RlZmluZSBwa3RlbnFfaGVhZChwcSwgcCkJcGt0cV9wZW5xX2hlYWQoKChzdHJ1Y3QgcGt0cSAqKXBxKSwgMCwgKHApKQotI2RlZmluZSBwa3RkZXEocHEpCQlwa3RxX3BkZXEoKChzdHJ1Y3QgcGt0cSAqKXBxKSwgMCkKLSNkZWZpbmUgcGt0ZGVxX3RhaWwocHEpCQlwa3RxX3BkZXFfdGFpbCgoKHN0cnVjdCBwa3RxICopcHEpLCAwKQotI2RlZmluZSBwa3RxaW5pdChwcSwgbGVuKSBwa3RxX2luaXQoKChzdHJ1Y3QgcGt0cSAqKXBxKSwgMSwgbGVuKQorI2RlZmluZSBwa3RlbnEocHEsIHApCQliY21fcGt0cV9wZW5xKCgoc3RydWN0IHBrdHEgKilwcSksIDAsIChwKSkKKyNkZWZpbmUgcGt0ZW5xX2hlYWQocHEsIHApCWJjbV9wa3RxX3BlbnFfaGVhZCgoKHN0cnVjdCBwa3RxICopcHEpLCAwLCAocCkpCisjZGVmaW5lIHBrdGRlcShwcSkJCWJjbV9wa3RxX3BkZXEoKChzdHJ1Y3QgcGt0cSAqKXBxKSwgMCkKKyNkZWZpbmUgcGt0ZGVxX3RhaWwocHEpCQliY21fcGt0cV9wZGVxX3RhaWwoKChzdHJ1Y3QgcGt0cSAqKXBxKSwgMCkKKyNkZWZpbmUgcGt0cWluaXQocHEsIGxlbikJYmNtX3BrdHFfaW5pdCgoKHN0cnVjdCBwa3RxICopcHEpLCAxLCBsZW4pCiAKLQlleHRlcm4gdm9pZCBwa3RxX2luaXQoc3RydWN0IHBrdHEgKnBxLCBpbnQgbnVtX3ByZWMsIGludCBtYXhfbGVuKTsKK2V4dGVybiB2b2lkIGJjbV9wa3RxX2luaXQoc3RydWN0IHBrdHEgKnBxLCBpbnQgbnVtX3ByZWMsIGludCBtYXhfbGVuKTsKIC8qIHByZWNfb3V0IG1heSBiZSBOVUxMIGlmIGNhbGxlciBpcyBub3QgaW50ZXJlc3RlZCBpbiByZXR1cm4gdmFsdWUgKi8KLQlleHRlcm4gc3RydWN0IHNrX2J1ZmYgKnBrdHFfcGVla190YWlsKHN0cnVjdCBwa3RxICpwcSwgaW50ICpwcmVjX291dCk7Ci0jaWZkZWYgQlJDTV9GVUxMTUFDCi0JZXh0ZXJuIHZvaWQgcGt0cV9mbHVzaChzdHJ1Y3QgcGt0cSAqcHEsIGJvb2wgZGlyKTsKLSNlbHNlCi0JZXh0ZXJuIHZvaWQgcGt0cV9mbHVzaChzdHJ1Y3QgcGt0cSAqcHEsIGJvb2wgZGlyLAotCQlpZnBrdF9jYl90IGZuLCBpbnQgYXJnKTsKLSNlbmRpZgorZXh0ZXJuIHN0cnVjdCBza19idWZmICpiY21fcGt0cV9wZWVrX3RhaWwoc3RydWN0IHBrdHEgKnBxLCBpbnQgKnByZWNfb3V0KTsKK2V4dGVybiB2b2lkIGJjbV9wa3RxX2ZsdXNoKHN0cnVjdCBwa3RxICpwcSwgYm9vbCBkaXIsCisJaWZwa3RfY2JfdCBmbiwgdm9pZCAqYXJnKTsKIAogLyogZXh0ZXJucyAqLwogLyogcGFja2V0ICovCi0JZXh0ZXJuIHVpbnQgcGt0ZnJvbWJ1ZihzdHJ1Y3Qgc2tfYnVmZiAqcCwKLQkJCSAgICAgICB1aW50IG9mZnNldCwgaW50IGxlbiwgdW5zaWduZWQgY2hhciAqYnVmKTsKLQlleHRlcm4gdWludCBwa3R0b3RsZW4oc3RydWN0IHNrX2J1ZmYgKnApOworZXh0ZXJuIHVpbnQgYmNtX3BrdGZyb21idWYoc3RydWN0IHNrX2J1ZmYgKnAsCisJdWludCBvZmZzZXQsIGludCBsZW4sIHVuc2lnbmVkIGNoYXIgKmJ1Zik7CitleHRlcm4gdWludCBiY21fcGt0dG90bGVuKHN0cnVjdCBza19idWZmICpwKTsKIAogLyogZXRoZXJuZXQgYWRkcmVzcyAqLwotCWV4dGVybiBpbnQgYmNtX2V0aGVyX2F0b2UoY2hhciAqcCwgdTggKmVhKTsKK2V4dGVybiBpbnQgYmNtX2V0aGVyX2F0b2UoY2hhciAqcCwgdTggKmVhKTsKIAogLyogaXAgYWRkcmVzcyAqLwogCXN0cnVjdCBpcHY0X2FkZHI7CiAJZXh0ZXJuIGNoYXIgKmJjbV9pcF9udG9hKHN0cnVjdCBpcHY0X2FkZHIgKmlhLCBjaGFyICpidWYpOwogCi0vKiB2YXJpYWJsZSBhY2Nlc3MgKi8KLQlleHRlcm4gY2hhciAqZ2V0dmFyKGNoYXIgKnZhcnMsIGNvbnN0IGNoYXIgKm5hbWUpOwotCWV4dGVybiBpbnQgZ2V0aW50dmFyKGNoYXIgKnZhcnMsIGNvbnN0IGNoYXIgKm5hbWUpOwogI2lmZGVmIEJDTURCRwotCWV4dGVybiB2b2lkIHBycGt0KGNvbnN0IGNoYXIgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnAwKTsKK2V4dGVybiB2b2lkIGJjbV9wcnBrdChjb25zdCBjaGFyICptc2csIHN0cnVjdCBza19idWZmICpwMCk7CiAjZWxzZQotI2RlZmluZSBwcnBrdChhLCBiKQorI2RlZmluZSBiY21fcHJwa3QoYSwgYikKICNlbmRpZgkJCQkvKiBCQ01EQkcgKi8KIAogI2RlZmluZSBiY21fcGVyZl9lbmFibGUoKQotI2RlZmluZSBiY21zdGF0cyhmbXQpCiAjZGVmaW5lCWJjbWxvZyhmbXQsIGExLCBhMikKICNkZWZpbmUJYmNtZHVtcGxvZyhidWYsIHNpemUpCSgqYnVmID0gJ1wwJykKICNkZWZpbmUJYmNtZHVtcGxvZ2VudChidWYsIGlkeCkJLTEKQEAgLTI0MSwxMDcgKzIyOSw2IEBACiAvKiAqKiBkcml2ZXIvYXBwcy1zaGFyZWQgc2VjdGlvbiAqKiAqLwogCiAjZGVmaW5lIEJDTUVfU1RSTEVOIAkJNjQJLyogTWF4IHN0cmluZyBsZW5ndGggZm9yIEJDTSBlcnJvcnMgKi8KLSNkZWZpbmUgVkFMSURfQkNNRVJST1IoZSkgICgoZSA8PSAwKSAmJiAoZSA+PSBCQ01FX0xBU1QpKQotCi0vKgotICogZXJyb3IgY29kZXMgY291bGQgYmUgYWRkZWQgYnV0IHRoZSBkZWZpbmVkIG9uZXMgc2hvdWxkbid0IGJlIGNoYW5nZWQvZGVsZXRlZAotICogdGhlc2UgZXJyb3IgY29kZXMgYXJlIGV4cG9zZWQgdG8gdGhlIHVzZXIgY29kZQotICogd2hlbiBldmVyIGEgbmV3IGVycm9yIGNvZGUgaXMgYWRkZWQgdG8gdGhpcyBsaXN0Ci0gKiBwbGVhc2UgdXBkYXRlIGVycm9yc3RyaW5nIHRhYmxlIHdpdGggdGhlIHJlbGF0ZWQgZXJyb3Igc3RyaW5nIGFuZAotICogdXBkYXRlIG9zbCBmaWxlcyB3aXRoIG9zIHNwZWNpZmljIGVycm9yY29kZSBtYXAKLSovCi0KLSNkZWZpbmUgQkNNRV9PSwkJCQkwCS8qIFN1Y2Nlc3MgKi8KLSNkZWZpbmUgQkNNRV9FUlJPUgkJCS0xCS8qIEVycm9yIGdlbmVyaWMgKi8KLSNkZWZpbmUgQkNNRV9CQURBUkcJCQktMgkvKiBCYWQgQXJndW1lbnQgKi8KLSNkZWZpbmUgQkNNRV9CQURPUFRJT04JCQktMwkvKiBCYWQgb3B0aW9uICovCi0jZGVmaW5lIEJDTUVfTk9UVVAJCQktNAkvKiBOb3QgdXAgKi8KLSNkZWZpbmUgQkNNRV9OT1RET1dOCQkJLTUJLyogTm90IGRvd24gKi8KLSNkZWZpbmUgQkNNRV9OT1RBUAkJCS02CS8qIE5vdCBBUCAqLwotI2RlZmluZSBCQ01FX05PVFNUQQkJCS03CS8qIE5vdCBTVEEgICovCi0jZGVmaW5lIEJDTUVfQkFES0VZSURYCQkJLTgJLyogQkFEIEtleSBJbmRleCAqLwotI2RlZmluZSBCQ01FX1JBRElPT0ZGIAkJCS05CS8qIFJhZGlvIE9mZiAqLwotI2RlZmluZSBCQ01FX05PVEJBTkRMT0NLRUQJCS0xMAkvKiBOb3QgIGJhbmQgbG9ja2VkICovCi0jZGVmaW5lIEJDTUVfTk9DTEsJCQktMTEJLyogTm8gQ2xvY2sgKi8KLSNkZWZpbmUgQkNNRV9CQURSQVRFU0VUCQkJLTEyCS8qIEJBRCBSYXRlIHZhbHVlc2V0ICovCi0jZGVmaW5lIEJDTUVfQkFEQkFORAkJCS0xMwkvKiBCQUQgQmFuZCAqLwotI2RlZmluZSBCQ01FX0JVRlRPT1NIT1JUCQktMTQJLyogQnVmZmVyIHRvbyBzaG9ydCAqLwotI2RlZmluZSBCQ01FX0JVRlRPT0xPTkcJCQktMTUJLyogQnVmZmVyIHRvbyBsb25nICovCi0jZGVmaW5lIEJDTUVfQlVTWQkJCS0xNgkvKiBCdXN5ICovCi0jZGVmaW5lIEJDTUVfTk9UQVNTT0NJQVRFRAkJLTE3CS8qIE5vdCBBc3NvY2lhdGVkICovCi0jZGVmaW5lIEJDTUVfQkFEU1NJRExFTgkJCS0xOAkvKiBCYWQgU1NJRCBsZW4gKi8KLSNkZWZpbmUgQkNNRV9PVVRPRlJBTkdFQ0hBTgkJLTE5CS8qIE91dCBvZiBSYW5nZSBDaGFubmVsICovCi0jZGVmaW5lIEJDTUVfQkFEQ0hBTgkJCS0yMAkvKiBCYWQgQ2hhbm5lbCAqLwotI2RlZmluZSBCQ01FX0JBREFERFIJCQktMjEJLyogQmFkIEFkZHJlc3MgKi8KLSNkZWZpbmUgQkNNRV9OT1JFU09VUkNFCQkJLTIyCS8qIE5vdCBFbm91Z2ggUmVzb3VyY2VzICovCi0jZGVmaW5lIEJDTUVfVU5TVVBQT1JURUQJCS0yMwkvKiBVbnN1cHBvcnRlZCAqLwotI2RlZmluZSBCQ01FX0JBRExFTgkJCS0yNAkvKiBCYWQgbGVuZ3RoICovCi0jZGVmaW5lIEJDTUVfTk9UUkVBRFkJCQktMjUJLyogTm90IFJlYWR5ICovCi0jZGVmaW5lIEJDTUVfRVBFUk0JCQktMjYJLyogTm90IFBlcm1pdHRlZCAqLwotI2RlZmluZSBCQ01FX05PTUVNCQkJLTI3CS8qIE5vIE1lbW9yeSAqLwotI2RlZmluZSBCQ01FX0FTU09DSUFURUQJCQktMjgJLyogQXNzb2NpYXRlZCAqLwotI2RlZmluZSBCQ01FX1JBTkdFCQkJLTI5CS8qIE5vdCBJbiBSYW5nZSAqLwotI2RlZmluZSBCQ01FX05PVEZPVU5ECQkJLTMwCS8qIE5vdCBGb3VuZCAqLwotI2RlZmluZSBCQ01FX1dNRV9OT1RfRU5BQkxFRAkJLTMxCS8qIFdNRSBOb3QgRW5hYmxlZCAqLwotI2RlZmluZSBCQ01FX1RTUEVDX05PVEZPVU5ECQktMzIJLyogVFNQRUMgTm90IEZvdW5kICovCi0jZGVmaW5lIEJDTUVfQUNNX05PVFNVUFBPUlRFRAkJLTMzCS8qIEFDTSBOb3QgU3VwcG9ydGVkICovCi0jZGVmaW5lIEJDTUVfTk9UX1dNRV9BU1NPQ0lBVElPTgktMzQJLyogTm90IFdNRSBBc3NvY2lhdGlvbiAqLwotI2RlZmluZSBCQ01FX1NESU9fRVJST1IJCQktMzUJLyogU0RJTyBCdXMgRXJyb3IgKi8KLSNkZWZpbmUgQkNNRV9ET05HTEVfRE9XTgkJLTM2CS8qIERvbmdsZSBOb3QgQWNjZXNzaWJsZSAqLwotI2RlZmluZSBCQ01FX1ZFUlNJT04JCQktMzcJLyogSW5jb3JyZWN0IHZlcnNpb24gKi8KLSNkZWZpbmUgQkNNRV9UWEZBSUwJCQktMzgJLyogVFggZmFpbHVyZSAqLwotI2RlZmluZSBCQ01FX1JYRkFJTAkJCS0zOQkvKiBSWCBmYWlsdXJlICovCi0jZGVmaW5lIEJDTUVfTk9ERVZJQ0UJCQktNDAJLyogRGV2aWNlIG5vdCBwcmVzZW50ICovCi0jZGVmaW5lIEJDTUVfTk1PREVfRElTQUJMRUQJCS00MQkvKiBOTU9ERSBkaXNhYmxlZCAqLwotI2RlZmluZSBCQ01FX05PTlJFU0lERU5UCQktNDIJLyogYWNjZXNzIHRvIG5vbnJlc2lkZW50IG92ZXJsYXkgKi8KLSNkZWZpbmUgQkNNRV9MQVNUCQkJQkNNRV9OT05SRVNJREVOVAotCi0vKiBUaGVzZSBhcmUgY29sbGVjdGlvbiBvZiBCQ01FIEVycm9yIHN0cmluZ3MgKi8KLSNkZWZpbmUgQkNNRVJSU1RSSU5HVEFCTEUgewkJXAotCSJPSyIsCQkJCVwKLQkiVW5kZWZpbmVkIGVycm9yIiwJCVwKLQkiQmFkIEFyZ3VtZW50IiwJCQlcCi0JIkJhZCBPcHRpb24iLAkJCVwKLQkiTm90IHVwIiwJCQlcCi0JIk5vdCBkb3duIiwJCQlcCi0JIk5vdCBBUCIsCQkJXAotCSJOb3QgU1RBIiwJCQlcCi0JIkJhZCBLZXkgSW5kZXgiLAkJXAotCSJSYWRpbyBPZmYiLAkJCVwKLQkiTm90IGJhbmQgbG9ja2VkIiwJCVwKLQkiTm8gY2xvY2siLAkJCVwKLQkiQmFkIFJhdGUgdmFsdWVzZXQiLAkJXAotCSJCYWQgQmFuZCIsCQkJXAotCSJCdWZmZXIgdG9vIHNob3J0IiwJCVwKLQkiQnVmZmVyIHRvbyBsb25nIiwJCVwKLQkiQnVzeSIsCQkJCVwKLQkiTm90IEFzc29jaWF0ZWQiLAkJXAotCSJCYWQgU1NJRCBsZW4iLAkJCVwKLQkiT3V0IG9mIFJhbmdlIENoYW5uZWwiLAkJXAotCSJCYWQgQ2hhbm5lbCIsCQkJXAotCSJCYWQgQWRkcmVzcyIsCQkJXAotCSJOb3QgRW5vdWdoIFJlc291cmNlcyIsCQlcCi0JIlVuc3VwcG9ydGVkIiwJCQlcCi0JIkJhZCBsZW5ndGgiLAkJCVwKLQkiTm90IFJlYWR5IiwJCQlcCi0JIk5vdCBQZXJtaXR0ZWQiLAkJXAotCSJObyBNZW1vcnkiLAkJCVwKLQkiQXNzb2NpYXRlZCIsCQkJXAotCSJOb3QgSW4gUmFuZ2UiLAkJCVwKLQkiTm90IEZvdW5kIiwJCQlcCi0JIldNRSBOb3QgRW5hYmxlZCIsCQlcCi0JIlRTUEVDIE5vdCBGb3VuZCIsCQlcCi0JIkFDTSBOb3QgU3VwcG9ydGVkIiwJCVwKLQkiTm90IFdNRSBBc3NvY2lhdGlvbiIsCQlcCi0JIlNESU8gQnVzIEVycm9yIiwJCVwKLQkiRG9uZ2xlIE5vdCBBY2Nlc3NpYmxlIiwJXAotCSJJbmNvcnJlY3QgdmVyc2lvbiIsCQlcCi0JIlRYIEZhaWx1cmUiLAkJCVwKLQkiUlggRmFpbHVyZSIsCQkJXAotCSJEZXZpY2UgTm90IFByZXNlbnQiLAkJXAotCSJOTU9ERSBEaXNhYmxlZCIsCQlcCi0JIk5vbnJlc2lkZW50IG92ZXJsYXkgYWNjZXNzIiwgXAotfQogCiAjaWZuZGVmIEFCUwogI2RlZmluZQlBQlMoYSkJCQkoKChhKSA8IDApID8gLShhKSA6IChhKSkKQEAgLTM1OCwxNiArMjQ1LDYgQEAKICNkZWZpbmUgUkVHX01BUChwYSwgc2l6ZSkgICAgICAgKHZvaWQgKikoMCkKICNlbmRpZgogCi1leHRlcm4gdTMyIGdfYXNzZXJ0X3R5cGU7Ci0KLSNpZiBkZWZpbmVkKEJDTURCR19BU1NFUlQpCi0jZGVmaW5lIEFTU0VSVChleHApIFwKLQkgIGRvIHsgaWYgKCEoZXhwKSkgb3NsX2Fzc2VydCgjZXhwLCBfX0ZJTEVfXywgX19MSU5FX18pOyB9IHdoaWxlICgwKQotZXh0ZXJuIHZvaWQgb3NsX2Fzc2VydChjaGFyICpleHAsIGNoYXIgKmZpbGUsIGludCBsaW5lKTsKLSNlbHNlCi0jZGVmaW5lIEFTU0VSVChleHApCWRvIHt9IHdoaWxlICgwKQotI2VuZGlmICAvKiBkZWZpbmVkKEJDTURCR19BU1NFUlQpICovCi0KIC8qIHJlZ2lzdGVyIGFjY2VzcyBtYWNyb3MgKi8KICNpZiBkZWZpbmVkKEJDTVNESU8pCiAjaWZkZWYgQlJDTV9GVUxMTUFDCkBAIC0zOTksNyArMjc2LDcgQEAKICNkZWZpbmUJYmNvcHkoc3JjLCBkc3QsIGxlbikJbWVtY3B5KChkc3QpLCAoc3JjKSwgKGxlbikpCiAKIC8qIHJlZ2lzdGVyIGFjY2VzcyBtYWNyb3MgKi8KLSNpZm5kZWYgSUxfQklHRU5ESUFOCisjaWZuZGVmIF9fQklHX0VORElBTgogI2lmbmRlZiBfX21pcHNfXwogI2RlZmluZSBSX1JFRyhyKSAoXAogCVNFTEVDVF9CVVNfUkVBRChzaXplb2YoKihyKSkgPT0gc2l6ZW9mKHU4KSA/IFwKQEAgLTQ1MCw3ICszMjcsNyBAQAogCQl9LCBcCiAJCShPU0xfV1JJVEVfUkVHKHIsIHYpKSk7IFwKIAl9IHdoaWxlICgwKQotI2Vsc2UJCQkJLyogSUxfQklHRU5ESUFOICovCisjZWxzZQkJCQkvKiBfX0JJR19FTkRJQU4gKi8KICNkZWZpbmUgUl9SRUcocikgKFwKIAlTRUxFQ1RfQlVTX1JFQUQoIFwKIAkJKHsgXApAQCAtNDg3LDcgKzM2NCw3IEBACiAJCX0sIFwKIAkJKE9TTF9XUklURV9SRUcociwgdikpKTsgXAogCX0gd2hpbGUgKDApCi0jZW5kaWYJCQkJLyogSUxfQklHRU5ESUFOICovCisjZW5kaWYJCQkJLyogX19CSUdfRU5ESUFOICovCiAKICNkZWZpbmUgQU5EX1JFRyhyLCB2KQlXX1JFRygociksIFJfUkVHKHIpICYgKHYpKQogI2RlZmluZSBPUl9SRUcociwgdikJV19SRUcoKHIpLCBSX1JFRyhyKSB8ICh2KSkKQEAgLTU5MCw4ICs0NjcsNyBAQAogCiAvKiBleHRlcm5zICovCiAvKiBjcmMgKi8KLQlleHRlcm4gdTggaG5kY3JjOCh1OCAqcCwgdWludCBuYnl0ZXMsIHU4IGNyYyk7Ci0JZXh0ZXJuIHUxNiBobmRjcmMxNih1OCAqcCwgdWludCBuYnl0ZXMsIHUxNiBjcmMpOworZXh0ZXJuIHU4IGJjbV9jcmM4KHU4ICpwLCB1aW50IG5ieXRlcywgdTggY3JjKTsKIC8qIGZvcm1hdC9wcmludCAqLwogI2lmIGRlZmluZWQoQkNNREJHKQogCWV4dGVybiBpbnQgYmNtX2Zvcm1hdF9mbGFncyhjb25zdCBiY21fYml0X2Rlc2NfdCAqYmQsIHUzMiBmbGFncywKQEAgLTU5OSwxMiArNDc1LDkgQEAKIAlleHRlcm4gaW50IGJjbV9mb3JtYXRfaGV4KGNoYXIgKnN0ciwgY29uc3Qgdm9pZCAqYnl0ZXMsIGludCBsZW4pOwogI2VuZGlmCiAJZXh0ZXJuIGNoYXIgKmJjbV9jaGlwbmFtZSh1aW50IGNoaXBpZCwgY2hhciAqYnVmLCB1aW50IGxlbik7Ci0JZXh0ZXJuIHZvaWQgcHJoZXgoY29uc3QgY2hhciAqbXNnLCB1bnNpZ25lZCBjaGFyICpidWYsIHVpbnQgbGVuKTsKIAogCWV4dGVybiBiY21fdGx2X3QgKmJjbV9wYXJzZV90bHZzKHZvaWQgKmJ1ZiwgaW50IGJ1ZmxlbiwKIAkJCQkJCSAgICB1aW50IGtleSk7Ci0vKiBiY21lcnJvciAqLwotCWV4dGVybiBjb25zdCBjaGFyICpiY21lcnJvcnN0cihpbnQgYmNtZXJyb3IpOwogCiAvKiBtdWx0aS1ib29sIGRhdGEgdHlwZTogc2V0IG9mIGJvb2xzLCBtYm9vbCBpcyB0cnVlIGlmIGFueSBpcyBzZXQgKi8KIAl0eXBlZGVmIHUzMiBtYm9vbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvaW5jbHVkZS9iY213aWZpLmggYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2luY2x1ZGUvYmNtd2lmaS5oCmluZGV4IDRhMGY5NzYuLmE1NzNlYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvaW5jbHVkZS9iY213aWZpLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9pbmNsdWRlL2JjbXdpZmkuaApAQCAtMTM0LDE0ICsxMzQsMTQgQEAKICAqIGNvbWJpbmF0aW9uIGNvdWxkIGJlIGxlZ2FsIGdpdmVuIGFueSBzZXQgb2YgY2lyY3Vtc3RhbmNlcy4KICAqIFJFVFVSTlM6IHRydWUgaXMgdGhlIGNoYW5zcGVjIGlzIG1hbGZvcm1lZCwgZmFsc2UgaWYgaXQgbG9va3MgZ29vZC4KICAqLwotZXh0ZXJuIGJvb2wgd2ZfY2hzcGVjX21hbGZvcm1lZChjaGFuc3BlY190IGNoYW5zcGVjKTsKK2V4dGVybiBib29sIGJjbV9jaHNwZWNfbWFsZm9ybWVkKGNoYW5zcGVjX3QgY2hhbnNwZWMpOwogCiAvKgogICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjaGFubmVsIG51bWJlciB0aGF0IGNvbnRyb2wgdHJhZmZpYyBpcyBiZWluZyBzZW50IG9uLCBmb3IgbGVnYWN5CiAgKiBjaGFubmVscyB0aGlzIGlzIGp1c3QgdGhlIGNoYW5uZWwgbnVtYmVyLCBmb3IgNDBNSFogY2hhbm5lbHMgaXQgaXMgdGhlIHVwcGVyIG9yIGxvd3JlIDIwTUhaCiAgKiBzaWRlYmFuZCBkZXBlbmRpbmcgb24gdGhlIGNoYW5zcGVjIHNlbGVjdGVkCiAgKi8KLWV4dGVybiB1OCB3Zl9jaHNwZWNfY3RsY2hhbihjaGFuc3BlY190IGNoc3BlYyk7CitleHRlcm4gdTggYmNtX2Noc3BlY19jdGxjaGFuKGNoYW5zcGVjX3QgY2hzcGVjKTsKIAogLyoKICAqIFJldHVybiB0aGUgY2hhbm5lbCBudW1iZXIgZm9yIGEgZ2l2ZW4gZnJlcXVlbmN5IGFuZCBiYXNlIGZyZXF1ZW5jeS4KQEAgLTE2Miw2ICsxNjIsNiBAQAogICoKICAqIFJlZmVyZW5jZSA4MDIuMTEgUkVWbWEsIHNlY3Rpb24gMTcuMy44LjMsIGFuZCA4MDIuMTFCIHNlY3Rpb24gMTguNC42LjIKICAqLwotZXh0ZXJuIGludCB3Zl9taHoyY2hhbm5lbCh1aW50IGZyZXEsIHVpbnQgc3RhcnRfZmFjdG9yKTsKK2V4dGVybiBpbnQgYmNtX21oejJjaGFubmVsKHVpbnQgZnJlcSwgdWludCBzdGFydF9mYWN0b3IpOwogCiAjZW5kaWYJCQkJLyogX2JjbXdpZmlfaF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvaW5jbHVkZS9obmRkbWEuaCBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvaW5jbHVkZS9obmRkbWEuaAppbmRleCA1ZDA3OWU3Li5mYmJjYjliNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9pbmNsdWRlL2huZGRtYS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvaW5jbHVkZS9obmRkbWEuaApAQCAtMjA0LDQgKzIwNCwyMyBAQAogZXh0ZXJuIHVpbnQgZG1hX2FkZHJ3aWR0aChzaV90ICpzaWgsIHZvaWQgKmRtYXJlZ3MpOwogdm9pZCBkbWFfd2Fsa19wYWNrZXRzKHN0cnVjdCBobmRkbWFfcHViICpkbWFoLCB2b2lkICgqY2FsbGJhY2tfZm5jKQogCQkgICAgICAodm9pZCAqcGt0LCB2b2lkICphcmdfYSksIHZvaWQgKmFyZ19hKTsKKworLyoKKyAqIERNQShCdWcpIG9uIHNvbWUgY2hpcHMgc2VlbXMgdG8gZGVjbGFyZSB0aGF0IHRoZSBwYWNrZXQgaXMgcmVhZHksIGJ1dCB0aGUKKyAqIHBhY2tldCBsZW5ndGggaXMgbm90IHVwZGF0ZWQgeWV0IChieSBETUEpIG9uIHRoZSBleHBlY3RlZCB0aW1lLgorICogV29ya2Fyb3VuZCBpcyB0byBob2xkIHByb2Nlc3NvciB0aWxsIERNQSB1cGRhdGVzIHRoZSBsZW5ndGgsIGFuZCBzdGF5IG9mZgorICogdGhlIGJ1cyB0byBhbGxvdyBETUEgdXBkYXRlIHRoZSBsZW5ndGggaW4gYnVmZmVyCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3Bpbl9mb3JfbGVuKHVpbnQgbGVuLCBzdHJ1Y3Qgc2tfYnVmZiAqaGVhZCkKK3sKKyNpZiBkZWZpbmVkKF9fbWlwc19fKQorCWlmICghbGVuKSB7CisJCXdoaWxlICghKGxlbiA9ICoodTE2ICopIEtTRUcxQUREUihoZWFkLT5kYXRhKSkpCisJCQl1ZGVsYXkoMSk7CisKKwkJKih1MTYgKikgKGhlYWQtPmRhdGEpID0gY3B1X3RvX2xlMTYoKHUxNikgbGVuKTsKKwl9CisjZW5kaWYJCQkJLyogZGVmaW5lZChfX21pcHNfXykgKi8KK30KKwogI2VuZGlmCQkJCS8qIF9obmRkbWFfaF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9wY2lfY29yZS5oIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9pbmNsdWRlL3BjaV9jb3JlLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9wY2lfY29yZS5oCnJlbmFtZSB0byBkcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2luY2x1ZGUvcGNpX2NvcmUuaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9pbmNsdWRlL3BjaWNmZy5oIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9pbmNsdWRlL3BjaWNmZy5oCmluZGV4IDY3NTU1NGEuLmQwYzYxN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvaW5jbHVkZS9wY2ljZmcuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2luY2x1ZGUvcGNpY2ZnLmgKQEAgLTE3LDUwOCArMTcsMzQgQEAKICNpZm5kZWYJX2hfcGNpY2ZnXwogI2RlZmluZQlfaF9wY2ljZmdfCiAKLS8qIFRoZSBmb2xsb3dpbmcgaW5zaWRlIGlmbmRlZidzIHNvIHdlIGRvbid0IGNvbGxpZGUgd2l0aCBOVERESy5IICovCi0jaWZuZGVmIFBDSV9NQVhfQlVTCi0jZGVmaW5lIFBDSV9NQVhfQlVTCQkweDEwMAotI2VuZGlmCi0jaWZuZGVmIFBDSV9NQVhfREVWSUNFUwotI2RlZmluZSBQQ0lfTUFYX0RFVklDRVMJCTB4MjAKLSNlbmRpZgotI2lmbmRlZiBQQ0lfTUFYX0ZVTkNUSU9OCi0jZGVmaW5lIFBDSV9NQVhfRlVOQ1RJT04JMHg4Ci0jZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9wY2lfcmVncy5oPgogCi0jaWZuZGVmIFBDSV9JTlZBTElEX1ZFTkRPUklECi0jZGVmaW5lIFBDSV9JTlZBTElEX1ZFTkRPUklECTB4ZmZmZgotI2VuZGlmCi0jaWZuZGVmIFBDSV9JTlZBTElEX0RFVklDRUlECi0jZGVmaW5lIFBDSV9JTlZBTElEX0RFVklDRUlECTB4ZmZmZgotI2VuZGlmCi0KLS8qIENvbnZlcnQgYmV0d2VlbiBidXMtc2xvdC1mdW5jdGlvbi1yZWdpc3RlciBhbmQgY29uZmlnIGFkZHJlc3NlcyAqLwotCi0jZGVmaW5lCVBDSUNGR19CVVNfU0hJRlQJMTYJLyogQnVzIHNoaWZ0ICovCi0jZGVmaW5lCVBDSUNGR19TTE9UX1NISUZUCTExCS8qIFNsb3Qgc2hpZnQgKi8KLSNkZWZpbmUJUENJQ0ZHX0ZVTl9TSElGVAk4CS8qIEZ1bmN0aW9uIHNoaWZ0ICovCi0jZGVmaW5lCVBDSUNGR19PRkZfU0hJRlQJMAkvKiBSZWdpc3RlciBzaGlmdCAqLwotCi0jZGVmaW5lCVBDSUNGR19CVVNfTUFTSwkJMHhmZgkvKiBCdXMgbWFzayAqLwotI2RlZmluZQlQQ0lDRkdfU0xPVF9NQVNLCTB4MWYJLyogU2xvdCBtYXNrICovCi0jZGVmaW5lCVBDSUNGR19GVU5fTUFTSwkJNwkvKiBGdW5jdGlvbiBtYXNrICovCi0jZGVmaW5lCVBDSUNGR19PRkZfTUFTSwkJMHhmZgkvKiBCdXMgbWFzayAqLwotCi0jZGVmaW5lCVBDSV9DT05GSUdfQUREUihiLCBzLCBmLCBvKQkJCQkJXAotCQkoKCgoYikgJiBQQ0lDRkdfQlVTX01BU0spIDw8IFBDSUNGR19CVVNfU0hJRlQpCQlcCi0JCSB8ICgoKHMpICYgUENJQ0ZHX1NMT1RfTUFTSykgPDwgUENJQ0ZHX1NMT1RfU0hJRlQpCVwKLQkJIHwgKCgoZikgJiBQQ0lDRkdfRlVOX01BU0spIDw8IFBDSUNGR19GVU5fU0hJRlQpCVwKLQkJIHwgKCgobykgJiBQQ0lDRkdfT0ZGX01BU0spIDw8IFBDSUNGR19PRkZfU0hJRlQpKQotCi0jZGVmaW5lCVBDSV9DT05GSUdfQlVTKGEpCSgoKGEpID4+IFBDSUNGR19CVVNfU0hJRlQpICYgUENJQ0ZHX0JVU19NQVNLKQotI2RlZmluZQlQQ0lfQ09ORklHX1NMT1QoYSkJKCgoYSkgPj4gUENJQ0ZHX1NMT1RfU0hJRlQpICYgUENJQ0ZHX1NMT1RfTUFTSykKLSNkZWZpbmUJUENJX0NPTkZJR19GVU4oYSkJKCgoYSkgPj4gUENJQ0ZHX0ZVTl9TSElGVCkgJiBQQ0lDRkdfRlVOX01BU0spCi0jZGVmaW5lCVBDSV9DT05GSUdfT0ZGKGEpCSgoKGEpID4+IFBDSUNGR19PRkZfU0hJRlQpICYgUENJQ0ZHX09GRl9NQVNLKQotCi0vKiBQQ0lFIENvbmZpZyBzcGFjZSBhY2Nlc3NpbmcgTUFDUk9TICovCi0KLSNkZWZpbmUJUENJRUNGR19CVVNfU0hJRlQJMjQJLyogQnVzIHNoaWZ0ICovCi0jZGVmaW5lCVBDSUVDRkdfU0xPVF9TSElGVAkxOQkvKiBTbG90L0RldmljZSBzaGlmdCAqLwotI2RlZmluZQlQQ0lFQ0ZHX0ZVTl9TSElGVAkxNgkvKiBGdW5jdGlvbiBzaGlmdCAqLwotI2RlZmluZQlQQ0lFQ0ZHX09GRl9TSElGVAkwCS8qIFJlZ2lzdGVyIHNoaWZ0ICovCi0KLSNkZWZpbmUJUENJRUNGR19CVVNfTUFTSwkweGZmCS8qIEJ1cyBtYXNrICovCi0jZGVmaW5lCVBDSUVDRkdfU0xPVF9NQVNLCTB4MWYJLyogU2xvdC9EZXZpY2UgbWFzayAqLwotI2RlZmluZQlQQ0lFQ0ZHX0ZVTl9NQVNLCTcJLyogRnVuY3Rpb24gbWFzayAqLwotI2RlZmluZQlQQ0lFQ0ZHX09GRl9NQVNLCTB4ZmZmCS8qIFJlZ2lzdGVyIG1hc2sgKi8KLQotI2RlZmluZQlQQ0lFX0NPTkZJR19BRERSKGIsIHMsIGYsIG8pCQkJCQlcCi0JCSgoKChiKSAmIFBDSUVDRkdfQlVTX01BU0spIDw8IFBDSUVDRkdfQlVTX1NISUZUKQkJXAotCQkgfCAoKChzKSAmIFBDSUVDRkdfU0xPVF9NQVNLKSA8PCBQQ0lFQ0ZHX1NMT1RfU0hJRlQpCVwKLQkJIHwgKCgoZikgJiBQQ0lFQ0ZHX0ZVTl9NQVNLKSA8PCBQQ0lFQ0ZHX0ZVTl9TSElGVCkJXAotCQkgfCAoKChvKSAmIFBDSUVDRkdfT0ZGX01BU0spIDw8IFBDSUVDRkdfT0ZGX1NISUZUKSkKLQotI2RlZmluZQlQQ0lFX0NPTkZJR19CVVMoYSkJKCgoYSkgPj4gUENJRUNGR19CVVNfU0hJRlQpICYgUENJRUNGR19CVVNfTUFTSykKLSNkZWZpbmUJUENJRV9DT05GSUdfU0xPVChhKQkoKChhKSA+PiBQQ0lFQ0ZHX1NMT1RfU0hJRlQpICYgUENJRUNGR19TTE9UX01BU0spCi0jZGVmaW5lCVBDSUVfQ09ORklHX0ZVTihhKQkoKChhKSA+PiBQQ0lFQ0ZHX0ZVTl9TSElGVCkgJiBQQ0lFQ0ZHX0ZVTl9NQVNLKQotI2RlZmluZQlQQ0lFX0NPTkZJR19PRkYoYSkJKCgoYSkgPj4gUENJRUNGR19PRkZfU0hJRlQpICYgUENJRUNGR19PRkZfTUFTSykKLQotLyogVGhlIGFjdHVhbCBjb25maWcgc3BhY2UgKi8KLQotI2RlZmluZQlQQ0lfQkFSX01BWAkJNgotCi0jZGVmaW5lCVBDSV9ST01fQkFSCQk4Ci0KLSNkZWZpbmUJUENSX1JTVkRBX01BWAkJMgotCi0vKiBCaXRzIGluIFBDSSBiYXJzJyBmbGFncyAqLwotCi0jZGVmaW5lCVBDSUJBUl9GTEFHUwkJMHhmCi0jZGVmaW5lCVBDSUJBUl9JTwkJMHgxCi0jZGVmaW5lCVBDSUJBUl9NRU0xTQkJMHgyCi0jZGVmaW5lCVBDSUJBUl9NRU02NAkJMHg0Ci0jZGVmaW5lCVBDSUJBUl9QUkVGRVRDSAkJMHg4Ci0jZGVmaW5lCVBDSUJBUl9NRU0zMl9NQVNLCTB4RkZGRkZGODAKLQotLyogcGNpIGNvbmZpZyBzdGF0dXMgcmVnIGhhcyBhIGJpdCB0byBpbmRpY2F0ZSB0aGF0IGNhcGFiaWxpdHkgcHRyIGlzIHByZXNlbnQgKi8KLQotI2RlZmluZSBQQ0lfQ0FQUFRSX1BSRVNFTlQJMHgwMDEwCi0KLXR5cGVkZWYgc3RydWN0IF9wY2lfY29uZmlnX3JlZ3MgewotCXUxNiB2ZW5kb3I7Ci0JdTE2IGRldmljZTsKLQl1MTYgY29tbWFuZDsKLQl1MTYgc3RhdHVzOwotCXU4IHJldl9pZDsKLQl1OCBwcm9nX2lmOwotCXU4IHN1Yl9jbGFzczsKLQl1OCBiYXNlX2NsYXNzOwotCXU4IGNhY2hlX2xpbmVfc2l6ZTsKLQl1OCBsYXRlbmN5X3RpbWVyOwotCXU4IGhlYWRlcl90eXBlOwotCXU4IGJpc3Q7Ci0JdTMyIGJhc2VbUENJX0JBUl9NQVhdOwotCXUzMiBjYXJkYnVzX2NpczsKLQl1MTYgc3Vic3lzX3ZlbmRvcjsKLQl1MTYgc3Vic3lzX2lkOwotCXUzMiBiYXNlcm9tOwotCXUzMiByc3ZkX2FbUENSX1JTVkRBX01BWF07Ci0JdTggaW50X2xpbmU7Ci0JdTggaW50X3BpbjsKLQl1OCBtaW5fZ250OwotCXU4IG1heF9sYXQ7Ci0JdTggZGV2X2RlcFsxOTJdOwotfSBwY2lfY29uZmlnX3JlZ3M7Ci0KLSNkZWZpbmUJU1pQQ1IJCShzaXplb2YgKHBjaV9jb25maWdfcmVncykpCi0jZGVmaW5lCU1JTlNaUENSCTY0CS8qIG9mZnNldG9mIChkZXZfZGVwWzBdICovCi0KLS8qIEEgc3RydWN0dXJlIGZvciB0aGUgY29uZmlnIHJlZ2lzdGVycyBpcyBuaWNlLCBidXQgaW4gbW9zdAotICogc3lzdGVtcyB0aGUgY29uZmlnIHNwYWNlIGlzIG5vdCBtZW1vcnkgbWFwcGVkLCBzbyB3ZSBuZWVkCi0gKiBmaWVsZCBvZmZzZXR0cy4gOi0oCi0gKi8KLSNkZWZpbmUJUENJX0NGR19WSUQJCTAKLSNkZWZpbmUJUENJX0NGR19ESUQJCTIKLSNkZWZpbmUJUENJX0NGR19DTUQJCTQKLSNkZWZpbmUJUENJX0NGR19TVEFUCQk2Ci0jZGVmaW5lCVBDSV9DRkdfUkVWCQk4Ci0jZGVmaW5lCVBDSV9DRkdfUFJPR0lGCQk5Ci0jZGVmaW5lCVBDSV9DRkdfU1VCQ0wJCTB4YQotI2RlZmluZQlQQ0lfQ0ZHX0JBU0VDTAkJMHhiCi0jZGVmaW5lCVBDSV9DRkdfQ0xTWgkJMHhjCi0jZGVmaW5lCVBDSV9DRkdfTEFUVElNCQkweGQKLSNkZWZpbmUJUENJX0NGR19IRFIJCTB4ZQotI2RlZmluZQlQQ0lfQ0ZHX0JJU1QJCTB4ZgotI2RlZmluZQlQQ0lfQ0ZHX0JBUjAJCTB4MTAKLSNkZWZpbmUJUENJX0NGR19CQVIxCQkweDE0Ci0jZGVmaW5lCVBDSV9DRkdfQkFSMgkJMHgxOAotI2RlZmluZQlQQ0lfQ0ZHX0JBUjMJCTB4MWMKLSNkZWZpbmUJUENJX0NGR19CQVI0CQkweDIwCi0jZGVmaW5lCVBDSV9DRkdfQkFSNQkJMHgyNAotI2RlZmluZQlQQ0lfQ0ZHX0NJUwkJMHgyOAotI2RlZmluZQlQQ0lfQ0ZHX1NWSUQJCTB4MmMKLSNkZWZpbmUJUENJX0NGR19TU0lECQkweDJlCi0jZGVmaW5lCVBDSV9DRkdfUk9NQkFSCQkweDMwCi0jZGVmaW5lIFBDSV9DRkdfQ0FQUFRSCQkweDM0Ci0jZGVmaW5lCVBDSV9DRkdfSU5UCQkweDNjCi0jZGVmaW5lCVBDSV9DRkdfUElOCQkweDNkCi0jZGVmaW5lCVBDSV9DRkdfTUlOR05UCQkweDNlCi0jZGVmaW5lCVBDSV9DRkdfTUFYTEFUCQkweDNmCi0KLS8qIENsYXNzZXMgYW5kIHN1YmNsYXNzZXMgKi8KLQotdHlwZWRlZiBlbnVtIHsKLQlQQ0lfQ0xBU1NfT0xEID0gMCwKLQlQQ0lfQ0xBU1NfREFTREksCi0JUENJX0NMQVNTX05FVCwKLQlQQ0lfQ0xBU1NfRElTUExBWSwKLQlQQ0lfQ0xBU1NfTU1FRElBLAotCVBDSV9DTEFTU19NRU1PUlksCi0JUENJX0NMQVNTX0JSSURHRSwKLQlQQ0lfQ0xBU1NfQ09NTSwKLQlQQ0lfQ0xBU1NfQkFTRSwKLQlQQ0lfQ0xBU1NfSU5QVVQsCi0JUENJX0NMQVNTX0RPQ0ssCi0JUENJX0NMQVNTX0NQVSwKLQlQQ0lfQ0xBU1NfU0VSSUFMLAotCVBDSV9DTEFTU19JTlRFTExJR0VOVCA9IDB4ZSwKLQlQQ0lfQ0xBU1NfU0FURUxMSVRFLAotCVBDSV9DTEFTU19DUllQVCwKLQlQQ0lfQ0xBU1NfRFNQLAotCVBDSV9DTEFTU19YT1IgPSAweGZlCi19IHBjaV9jbGFzc2VzOwotCi10eXBlZGVmIGVudW0gewotCVBDSV9EQVNESV9TQ1NJLAotCVBDSV9EQVNESV9JREUsCi0JUENJX0RBU0RJX0ZMT1BQWSwKLQlQQ0lfREFTRElfSVBJLAotCVBDSV9EQVNESV9SQUlELAotCVBDSV9EQVNESV9PVEhFUiA9IDB4ODAKLX0gcGNpX2Rhc2RpX3N1YmNsYXNzZXM7Ci0KLXR5cGVkZWYgZW51bSB7Ci0JUENJX05FVF9FVEhFUiwKLQlQQ0lfTkVUX1RPS0VOLAotCVBDSV9ORVRfRkRESSwKLQlQQ0lfTkVUX0FUTSwKLQlQQ0lfTkVUX09USEVSID0gMHg4MAotfSBwY2lfbmV0X3N1YmNsYXNzZXM7Ci0KLXR5cGVkZWYgZW51bSB7Ci0JUENJX0RJU1BMQVlfVkdBLAotCVBDSV9ESVNQTEFZX1hHQSwKLQlQQ0lfRElTUExBWV8zRCwKLQlQQ0lfRElTUExBWV9PVEhFUiA9IDB4ODAKLX0gcGNpX2Rpc3BsYXlfc3ViY2xhc3NlczsKLQotdHlwZWRlZiBlbnVtIHsKLQlQQ0lfTU1FRElBX1ZJREVPLAotCVBDSV9NTUVESUFfQVVESU8sCi0JUENJX01NRURJQV9QSE9ORSwKLQlQQ0lfTUVESUFfT1RIRVIgPSAweDgwCi19IHBjaV9tbWVkaWFfc3ViY2xhc3NlczsKLQotdHlwZWRlZiBlbnVtIHsKLQlQQ0lfTUVNT1JZX1JBTSwKLQlQQ0lfTUVNT1JZX0ZMQVNILAotCVBDSV9NRU1PUllfT1RIRVIgPSAweDgwCi19IHBjaV9tZW1vcnlfc3ViY2xhc3NlczsKLQotdHlwZWRlZiBlbnVtIHsKLQlQQ0lfQlJJREdFX0hPU1QsCi0JUENJX0JSSURHRV9JU0EsCi0JUENJX0JSSURHRV9FSVNBLAotCVBDSV9CUklER0VfTUMsCi0JUENJX0JSSURHRV9QQ0ksCi0JUENJX0JSSURHRV9QQ01DSUEsCi0JUENJX0JSSURHRV9OVUJVUywKLQlQQ0lfQlJJREdFX0NBUkRCVVMsCi0JUENJX0JSSURHRV9SQUNFV0FZLAotCVBDSV9CUklER0VfT1RIRVIgPSAweDgwCi19IHBjaV9icmlkZ2Vfc3ViY2xhc3NlczsKLQotdHlwZWRlZiBlbnVtIHsKLQlQQ0lfQ09NTV9VQVJULAotCVBDSV9DT01NX1BBUkFMTEVMLAotCVBDSV9DT01NX01VTFRJVUFSVCwKLQlQQ0lfQ09NTV9NT0RFTSwKLQlQQ0lfQ09NTV9PVEhFUiA9IDB4ODAKLX0gcGNpX2NvbW1fc3ViY2xhc3NlczsKLQotdHlwZWRlZiBlbnVtIHsKLQlQQ0lfQkFTRV9QSUMsCi0JUENJX0JBU0VfRE1BLAotCVBDSV9CQVNFX1RJTUVSLAotCVBDSV9CQVNFX1JUQywKLQlQQ0lfQkFTRV9QQ0lfSE9UUExVRywKLQlQQ0lfQkFTRV9PVEhFUiA9IDB4ODAKLX0gcGNpX2Jhc2Vfc3ViY2xhc3NlczsKLQotdHlwZWRlZiBlbnVtIHsKLQlQQ0lfSU5QVVRfS0JELAotCVBDSV9JTlBVVF9QRU4sCi0JUENJX0lOUFVUX01PVVNFLAotCVBDSV9JTlBVVF9TQ0FOTkVSLAotCVBDSV9JTlBVVF9HQU1FUE9SVCwKLQlQQ0lfSU5QVVRfT1RIRVIgPSAweDgwCi19IHBjaV9pbnB1dF9zdWJjbGFzc2VzOwotCi10eXBlZGVmIGVudW0gewotCVBDSV9ET0NLX0dFTkVSSUMsCi0JUENJX0RPQ0tfT1RIRVIgPSAweDgwCi19IHBjaV9kb2NrX3N1YmNsYXNzZXM7Ci0KLXR5cGVkZWYgZW51bSB7Ci0JUENJX0NQVV8zODYsCi0JUENJX0NQVV80ODYsCi0JUENJX0NQVV9QRU5USVVNLAotCVBDSV9DUFVfQUxQSEEgPSAweDEwLAotCVBDSV9DUFVfUE9XRVJQQyA9IDB4MjAsCi0JUENJX0NQVV9NSVBTID0gMHgzMCwKLQlQQ0lfQ1BVX0NPUFJPQyA9IDB4NDAsCi0JUENJX0NQVV9PVEhFUiA9IDB4ODAKLX0gcGNpX2NwdV9zdWJjbGFzc2VzOwotCi10eXBlZGVmIGVudW0gewotCVBDSV9TRVJJQUxfSUVFRTEzOTQsCi0JUENJX1NFUklBTF9BQ0NFU1MsCi0JUENJX1NFUklBTF9TU0EsCi0JUENJX1NFUklBTF9VU0IsCi0JUENJX1NFUklBTF9GSUJFUiwKLQlQQ0lfU0VSSUFMX1NNQlVTLAotCVBDSV9TRVJJQUxfT1RIRVIgPSAweDgwCi19IHBjaV9zZXJpYWxfc3ViY2xhc3NlczsKLQotdHlwZWRlZiBlbnVtIHsKLQlQQ0lfSU5URUxMSUdFTlRfSTJPCi19IHBjaV9pbnRlbGxpZ2VudF9zdWJjbGFzc2VzOwotCi10eXBlZGVmIGVudW0gewotCVBDSV9TQVRFTExJVEVfVFYsCi0JUENJX1NBVEVMTElURV9BVURJTywKLQlQQ0lfU0FURUxMSVRFX1ZPSUNFLAotCVBDSV9TQVRFTExJVEVfREFUQSwKLQlQQ0lfU0FURUxMSVRFX09USEVSID0gMHg4MAotfSBwY2lfc2F0ZWxsaXRlX3N1YmNsYXNzZXM7Ci0KLXR5cGVkZWYgZW51bSB7Ci0JUENJX0NSWVBUX05FVFdPUkssCi0JUENJX0NSWVBUX0VOVEVSVEFJTk1FTlQsCi0JUENJX0NSWVBUX09USEVSID0gMHg4MAotfSBwY2lfY3J5cHRfc3ViY2xhc3NlczsKLQotdHlwZWRlZiBlbnVtIHsKLQlQQ0lfRFNQX0RQSU8sCi0JUENJX0RTUF9PVEhFUiA9IDB4ODAKLX0gcGNpX2RzcF9zdWJjbGFzc2VzOwotCi10eXBlZGVmIGVudW0gewotCVBDSV9YT1JfUURNQSwKLQlQQ0lfWE9SX09USEVSID0gMHg4MAotfSBwY2lfeG9yX3N1YmNsYXNzZXM7Ci0KLS8qIEhlYWRlciB0eXBlcyAqLwotI2RlZmluZQlQQ0lfSEVBREVSX01VTFRJCTB4ODAKLSNkZWZpbmUJUENJX0hFQURFUl9NQVNLCQkweDdmCi10eXBlZGVmIGVudW0gewotCVBDSV9IRUFERVJfTk9STUFMLAotCVBDSV9IRUFERVJfQlJJREdFLAotCVBDSV9IRUFERVJfQ0FSREJVUwotfSBwY2lfaGVhZGVyX3R5cGVzOwotCi0vKiBPdmVybGF5IGZvciBhIFBDSS10by1QQ0kgYnJpZGdlICovCi0KLSNkZWZpbmUJUFBCX1JTVkRBX01BWAkJMgotI2RlZmluZQlQUEJfUlNWRERfTUFYCQk4Ci0KLXR5cGVkZWYgc3RydWN0IF9wcGJfY29uZmlnX3JlZ3MgewotCXUxNiB2ZW5kb3I7Ci0JdTE2IGRldmljZTsKLQl1MTYgY29tbWFuZDsKLQl1MTYgc3RhdHVzOwotCXU4IHJldl9pZDsKLQl1OCBwcm9nX2lmOwotCXU4IHN1Yl9jbGFzczsKLQl1OCBiYXNlX2NsYXNzOwotCXU4IGNhY2hlX2xpbmVfc2l6ZTsKLQl1OCBsYXRlbmN5X3RpbWVyOwotCXU4IGhlYWRlcl90eXBlOwotCXU4IGJpc3Q7Ci0JdTMyIHJzdmRfYVtQUEJfUlNWREFfTUFYXTsKLQl1OCBwcmltX2J1czsKLQl1OCBzZWNfYnVzOwotCXU4IHN1Yl9idXM7Ci0JdTggc2VjX2xhdDsKLQl1OCBpb19iYXNlOwotCXU4IGlvX2xpbTsKLQl1MTYgc2VjX3N0YXR1czsKLQl1MTYgbWVtX2Jhc2U7Ci0JdTE2IG1lbV9saW07Ci0JdTE2IHBmX21lbV9iYXNlOwotCXUxNiBwZl9tZW1fbGltOwotCXUzMiBwZl9tZW1fYmFzZV9oaTsKLQl1MzIgcGZfbWVtX2xpbV9oaTsKLQl1MTYgaW9fYmFzZV9oaTsKLQl1MTYgaW9fbGltX2hpOwotCXUxNiBzdWJzeXNfdmVuZG9yOwotCXUxNiBzdWJzeXNfaWQ7Ci0JdTMyIHJzdmRfYjsKLQl1OCByc3ZkX2M7Ci0JdTggaW50X3BpbjsKLQl1MTYgYnJpZGdlX2N0cmw7Ci0JdTggY2hpcF9jdHJsOwotCXU4IGRpYWdfY3RybDsKLQl1MTYgYXJiX2N0cmw7Ci0JdTMyIHJzdmRfZFtQUEJfUlNWRERfTUFYXTsKLQl1OCBkZXZfZGVwWzE5Ml07Ci19IHBwYl9jb25maWdfcmVnczsKLQotLyogUENJIENBUEFCSUxJVFkgREVGSU5FUyAqLwotI2RlZmluZSBQQ0lfQ0FQX1BPV0VSTUdNVENBUF9JRAkJMHgwMQotI2RlZmluZSBQQ0lfQ0FQX01TSUNBUF9JRAkJMHgwNQotI2RlZmluZSBQQ0lfQ0FQX1ZFTkRTUEVDX0lECQkweDA5Ci0jZGVmaW5lIFBDSV9DQVBfUENJRUNBUF9JRAkJMHgxMAotCi0vKiBEYXRhIHN0cnVjdHVyZSB0byBkZWZpbmUgdGhlIE1lc3NhZ2UgU2lnbmFsbGVkIEludGVycnVwdCBmYWNpbGl0eQotICogVmFsaWQgZm9yIFBDSSBhbmQgUENJRSBjb25maWd1cmF0aW9ucwotICovCi10eXBlZGVmIHN0cnVjdCBfcGNpY29uZmlnX2NhcF9tc2kgewotCXU4IGNhcElEOwotCXU4IG5leHRwdHI7Ci0JdTE2IG1zZ2N0cmw7Ci0JdTMyIG1zZ2FkZHI7Ci19IHBjaWNvbmZpZ19jYXBfbXNpOwotCi0vKiBEYXRhIHN0cnVjdHVyZSB0byBkZWZpbmUgdGhlIFBvd2VyIG1hbmFnZW1lbnQgZmFjaWxpdHkKLSAqIFZhbGlkIGZvciBQQ0kgYW5kIFBDSUUgY29uZmlndXJhdGlvbnMKLSAqLwotdHlwZWRlZiBzdHJ1Y3QgX3BjaWNvbmZpZ19jYXBfcHdybWdtdCB7Ci0JdTggY2FwSUQ7Ci0JdTggbmV4dHB0cjsKLQl1MTYgcG1lX2NhcDsKLQl1MTYgcG1lX3N0c19jdHJsOwotCXU4IHBtZV9icmlkZ2VfZXh0OwotCXU4IGRhdGE7Ci19IHBjaWNvbmZpZ19jYXBfcHdybWdtdDsKLQotI2RlZmluZSBQTUVfQ0FQX1BNX1NUQVRFUyAoMHgxZiA8PCAyNykJLyogQml0cyAzMToyNyBzdGF0ZXMgdGhhdCBjYW4gZ2VuZXJhdGUgUE1FICovCi0jZGVmaW5lIFBNRV9DU1JfT0ZGU0VUCSAgICAweDQJLyogNC1ieXRlcyBvZmZzZXQgKi8KLSNkZWZpbmUgUE1FX0NTUl9QTUVfRU4JICAoMSA8PCA4KQkvKiBCaXQgOCBFbmFibGUgZ2VuZXJhdGluZyBvZiBQTUUgKi8KLSNkZWZpbmUgUE1FX0NTUl9QTUVfU1RBVCAgKDEgPDwgMTUpCS8qIEJpdCAxNSBQTUUgZ290IGFzc2VydGVkICovCi0KLS8qIERhdGEgc3RydWN0dXJlIHRvIGRlZmluZSB0aGUgUENJRSBjYXBhYmlsaXR5ICovCi10eXBlZGVmIHN0cnVjdCBfcGNpY29uZmlnX2NhcF9wY2llIHsKLQl1OCBjYXBJRDsKLQl1OCBuZXh0cHRyOwotCXUxNiBwY2llX2NhcDsKLQl1MzIgZGV2X2NhcDsKLQl1MTYgZGV2X2N0cmw7Ci0JdTE2IGRldl9zdGF0dXM7Ci0JdTMyIGxpbmtfY2FwOwotCXUxNiBsaW5rX2N0cmw7Ci0JdTE2IGxpbmtfc3RhdHVzOwotCXUzMiBzbG90X2NhcDsKLQl1MTYgc2xvdF9jdHJsOwotCXUxNiBzbG90X3N0YXR1czsKLQl1MTYgcm9vdF9jdHJsOwotCXUxNiByb290X2NhcDsKLQl1MzIgcm9vdF9zdGF0dXM7Ci19IHBjaWNvbmZpZ19jYXBfcGNpZTsKLQotLyogUENJRSBFbmhhbmNlZCBDQVBBQklMSVRZIERFRklORVMgKi8KLSNkZWZpbmUgUENJRV9FWFRDRkdfT0ZGU0VUCTB4MTAwCi0jZGVmaW5lIFBDSUVfQURWRVJSUkVQX0NBUElECTB4MDAwMQotI2RlZmluZSBQQ0lFX1ZDX0NBUElECQkweDAwMDIKLSNkZWZpbmUgUENJRV9ERVZTTlVNX0NBUElECTB4MDAwMwotI2RlZmluZSBQQ0lFX1BXUkJVREdFVF9DQVBJRAkweDAwMDQKLQotLyogUENJRSBFeHRlbmRlZCBjb25maWd1cmF0aW9uICovCi0jZGVmaW5lIFBDSUVfQURWX0NPUlJfRVJSX01BU0sJMHgxMTQKLSNkZWZpbmUgQ09SUl9FUlJfUkUJKDEgPDwgMCkJLyogUmVjZWl2ZXIgICovCi0jZGVmaW5lIENPUlJfRVJSX0JUIAkoMSA8PCA2KQkvKiBCYWQgVExQICAqLwotI2RlZmluZSBDT1JSX0VSUl9CRAkoMSA8PCA3KQkvKiBCYWQgRExMUCAqLwotI2RlZmluZSBDT1JSX0VSUl9SUgkoMSA8PCA4KQkvKiBSRVBMQVlfTlVNIHJvbGxvdmVyICovCi0jZGVmaW5lIENPUlJfRVJSX1JUCSgxIDw8IDEyKQkvKiBSZXBseSB0aW1lciB0aW1lb3V0ICovCi0jZGVmaW5lIEFMTF9DT1JSX0VSUk9SUyAoQ09SUl9FUlJfUkUgfCBDT1JSX0VSUl9CVCB8IENPUlJfRVJSX0JEIHwgXAotCQkJIENPUlJfRVJSX1JSIHwgQ09SUl9FUlJfUlQpCi0KLS8qIFBDSUUgUm9vdCBDb250cm9sIFJlZ2lzdGVyIGJpdHMgKEhvc3QgbW9kZSBvbmx5KSAqLwotI2RlZmluZQlQQ0lFX1JDX0NPUlJfU0VSUl9FTgkJMHgwMDAxCi0jZGVmaW5lCVBDSUVfUkNfTk9ORkFUQUxfU0VSUl9FTgkweDAwMDIKLSNkZWZpbmUJUENJRV9SQ19GQVRBTF9TRVJSX0VOCQkweDAwMDQKLSNkZWZpbmUJUENJRV9SQ19QTUVfSU5UX0VOCQkweDAwMDgKLSNkZWZpbmUJUENJRV9SQ19DUlNfRU4JCQkweDAwMTAKLQotLyogUENJRSBSb290IENhcGFiaWxpdHkgUmVnaXN0ZXIgYml0cyAoSG9zdCBtb2RlIG9ubHkpICovCi0jZGVmaW5lCVBDSUVfUkNfQ1JTX1ZJU0lCSUxJVFkJCTB4MDAwMQotCi0vKiBIZWFkZXIgdG8gZGVmaW5lIHRoZSBQQ0lFIHNwZWNpZmljIGNhcGFiaWxpdGllcyBpbiB0aGUgZXh0ZW5kZWQgY29uZmlnIHNwYWNlICovCi10eXBlZGVmIHN0cnVjdCBfcGNpZV9lbmhhbmNlZF9jYXBoZHIgewotCXUxNiBjYXBJRDsKLQl1MTYgY2FwX3Zlcjo0OwotCXUxNiBuZXh0X3B0cjoxMjsKLX0gcGNpZV9lbmhhbmNlZF9jYXBoZHI7CisvKiBQQ0kgY29uZmlndXJhdGlvbiBhZGRyZXNzIHNwYWNlIHNpemUgKi8KKyNkZWZpbmUgUENJX1NaUENSCQkyNTYKIAogLyogRXZlcnl0aGluZyBiZWxvdyBpcyBCUkNNIEhORCBwcm9wcmlldGFyeSAqLwogCiAvKiBCcmNtIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAqLwotI2RlZmluZSBjYXBfbGlzdAlyc3ZkX2FbMF0KLSNkZWZpbmUgYmFyMF93aW5kb3cJZGV2X2RlcFsweDgwIC0gMHg0MF0KLSNkZWZpbmUgYmFyMV93aW5kb3cJZGV2X2RlcFsweDg0IC0gMHg0MF0KLSNkZWZpbmUgc3Byb21fY29udHJvbAlkZXZfZGVwWzB4ODggLSAweDQwXQotI2RlZmluZQlQQ0lfQkFSMF9XSU4JCTB4ODAJLyogYmFja3BsYW5lIGFkZHJlc3Mgc3BhY2UgYWNjZXNzZWQgYnkgQkFSMCAqLwotI2RlZmluZQlQQ0lfQkFSMV9XSU4JCTB4ODQJLyogYmFja3BsYW5lIGFkZHJlc3Mgc3BhY2UgYWNjZXNzZWQgYnkgQkFSMSAqLwotI2RlZmluZQlQQ0lfU1BST01fQ09OVFJPTAkweDg4CS8qIHNwcm9tIHByb3BlcnR5IGNvbnRyb2wgKi8KLSNkZWZpbmUJUENJX0JBUjFfQ09OVFJPTAkweDhjCS8qIEJBUjEgcmVnaW9uIGJ1cnN0IGNvbnRyb2wgKi8KLSNkZWZpbmUJUENJX0lOVF9TVEFUVVMJCTB4OTAJLyogUENJIGFuZCBvdGhlciBjb3JlcyBpbnRlcnJ1cHRzICovCi0jZGVmaW5lCVBDSV9JTlRfTUFTSwkJMHg5NAkvKiBtYXNrIG9mIFBDSSBhbmQgb3RoZXIgY29yZXMgaW50ZXJydXB0cyAqLwotI2RlZmluZSBQQ0lfVE9fU0JfTUIJCTB4OTgJLyogc2lnbmFsIGJhY2twbGFuZSBpbnRlcnJ1cHRzICovCi0jZGVmaW5lIFBDSV9CQUNLUExBTkVfQUREUgkweGEwCS8qIGFkZHJlc3MgYW4gYXJiaXRyYXJ5IGxvY2F0aW9uIG9uIHRoZSBzeXN0ZW0gYmFja3BsYW5lICovCi0jZGVmaW5lIFBDSV9CQUNLUExBTkVfREFUQQkweGE0CS8qIGRhdGEgYXQgdGhlIGxvY2F0aW9uIHNwZWNpZmllZCBieSBhYm92ZSBhZGRyZXNzICovCi0jZGVmaW5lCVBDSV9DTEtfQ1RMX1NUCQkweGE4CS8qIHBjaSBjb25maWcgc3BhY2UgY2xvY2sgY29udHJvbC9zdGF0dXMgKD49cmV2MTQpICovCi0jZGVmaW5lCVBDSV9CQVIwX1dJTjIJCTB4YWMJLyogYmFja3BsYW5lIGFkZHJlc3Mgc3BhY2UgYWNjZXNzZWQgYnkgc2Vjb25kIDRLQiBvZiBCQVIwICovCi0jZGVmaW5lCVBDSV9HUElPX0lOCQkweGIwCS8qIHBjaSBjb25maWcgc3BhY2UgZ3BpbyBpbnB1dCAoPj1yZXYzKSAqLwotI2RlZmluZQlQQ0lfR1BJT19PVVQJCTB4YjQJLyogcGNpIGNvbmZpZyBzcGFjZSBncGlvIG91dHB1dCAoPj1yZXYzKSAqLwotI2RlZmluZQlQQ0lfR1BJT19PVVRFTgkJMHhiOAkvKiBwY2kgY29uZmlnIHNwYWNlIGdwaW8gb3V0cHV0IGVuYWJsZSAoPj1yZXYzKSAqLworI2RlZmluZSBQQ0lfQkFSMF9XSU4JCTB4ODAJLyogYmFja3BsYW5lIGFkZHJlc3Mgc3BhY2UgYWNjZXNzZWQgYnkgQkFSMCAqLworI2RlZmluZSBQQ0lfU1BST01fQ09OVFJPTAkweDg4CS8qIHNwcm9tIHByb3BlcnR5IGNvbnRyb2wgKi8KKyNkZWZpbmUgUENJX0lOVF9NQVNLCQkweDk0CS8qIG1hc2sgb2YgUENJIGFuZCBvdGhlciBjb3JlcyBpbnRlcnJ1cHRzICovCisjZGVmaW5lICBQQ0lfU0JJTV9TSElGVAkJOAkvKiBiYWNrcGxhbmUgY29yZSBpbnRlcnJ1cHQgbWFzayBiaXRzIG9mZnNldCAqLworI2RlZmluZSBQQ0lfQkFSMF9XSU4yCQkweGFjCS8qIGJhY2twbGFuZSBhZGRyZXNzIHNwYWNlIGFjY2Vzc2VkIGJ5IHNlY29uZCA0S0Igb2YgQkFSMCAqLworI2RlZmluZSBQQ0lfR1BJT19JTgkJMHhiMAkvKiBwY2kgY29uZmlnIHNwYWNlIGdwaW8gaW5wdXQgKD49cmV2MykgKi8KKyNkZWZpbmUgUENJX0dQSU9fT1VUCQkweGI0CS8qIHBjaSBjb25maWcgc3BhY2UgZ3BpbyBvdXRwdXQgKD49cmV2MykgKi8KKyNkZWZpbmUgUENJX0dQSU9fT1VURU4JCTB4YjgJLyogcGNpIGNvbmZpZyBzcGFjZSBncGlvIG91dHB1dCBlbmFibGUgKD49cmV2MykgKi8KIAotI2RlZmluZQlQQ0lfQkFSMF9TSEFET1dfT0ZGU0VUCSgyICogMTAyNCkJLyogYmFyMCArIDJLIGFjY2Vzc2VzIHNwcm9tIHNoYWRvdyAoaW4gcGNpIGNvcmUpICovCi0jZGVmaW5lCVBDSV9CQVIwX1NQUk9NX09GRlNFVAkoNCAqIDEwMjQpCS8qIGJhcjAgKyA0SyBhY2Nlc3NlcyBleHRlcm5hbCBzcHJvbSAqLwotI2RlZmluZQlQQ0lfQkFSMF9QQ0lSRUdTX09GRlNFVAkoNiAqIDEwMjQpCS8qIGJhcjAgKyA2SyBhY2Nlc3NlcyBwY2kgY29yZSByZWdpc3RlcnMgKi8KLSNkZWZpbmUJUENJX0JBUjBfUENJU0JSX09GRlNFVAkoNCAqIDEwMjQpCS8qIHBjaSBjb3JlIFNCIHJlZ2lzdGVycyBhcmUgYXQgdGhlIGVuZCBvZiB0aGUKKyNkZWZpbmUgUENJX0JBUjBfU1BST01fT0ZGU0VUCSg0ICogMTAyNCkJLyogYmFyMCArIDRLIGFjY2Vzc2VzIGV4dGVybmFsIHNwcm9tICovCisjZGVmaW5lIFBDSV9CQVIwX1BDSVJFR1NfT0ZGU0VUCSg2ICogMTAyNCkJLyogYmFyMCArIDZLIGFjY2Vzc2VzIHBjaSBjb3JlIHJlZ2lzdGVycyAqLworI2RlZmluZSBQQ0lfQkFSMF9QQ0lTQlJfT0ZGU0VUCSg0ICogMTAyNCkJLyogcGNpIGNvcmUgU0IgcmVnaXN0ZXJzIGFyZSBhdCB0aGUgZW5kIG9mIHRoZQogCQkJCQkJICogOEtCIHdpbmRvdywgc28gdGhlaXIgYWRkcmVzcyBpcyB0aGUgInJlZ3VsYXIiCiAJCQkJCQkgKiBhZGRyZXNzIHBsdXMgNEsKIAkJCQkJCSAqLwogI2RlZmluZSBQQ0lfQkFSMF9XSU5TWgkJKDE2ICogMTAyNCkJLyogYmFyMCB3aW5kb3cgc2l6ZSBNYXRjaCB3aXRoIGNvcmVyZXYgMTMgKi8KIC8qIE9uIHBjaSBjb3JlcmV2ID49IDEzIGFuZCBhbGwgcGNpZSwgdGhlIGJhcjAgaXMgbm93IDE2S0IgYW5kIGl0IG1hcHM6ICovCi0jZGVmaW5lCVBDSV8xNktCMF9QQ0lSRUdTX09GRlNFVCAoOCAqIDEwMjQpCS8qIGJhcjAgKyA4SyBhY2Nlc3NlcyBwY2kvcGNpZSBjb3JlIHJlZ2lzdGVycyAqLwotI2RlZmluZQlQQ0lfMTZLQjBfQ0NSRUdTX09GRlNFVAkoMTIgKiAxMDI0KQkvKiBiYXIwICsgMTJLIGFjY2Vzc2VzIGNoaXBjIGNvcmUgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFBDSV8xNktCQjBfV0lOU1oJKDE2ICogMTAyNCkJLyogYmFyMCB3aW5kb3cgc2l6ZSAqLworI2RlZmluZSBQQ0lfMTZLQjBfUENJUkVHU19PRkZTRVQgKDggKiAxMDI0KQkvKiBiYXIwICsgOEsgYWNjZXNzZXMgcGNpL3BjaWUgY29yZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUENJXzE2S0IwX0NDUkVHU19PRkZTRVQJKDEyICogMTAyNCkJLyogYmFyMCArIDEySyBhY2Nlc3NlcyBjaGlwYyBjb3JlIHJlZ2lzdGVycyAqLwogCi0vKiBPbiBBSSBjaGlwcyB3ZSBoYXZlIGEgc2Vjb25kIHdpbmRvdyB0byBtYXAgRE1QIHJlZ3MgYXJlIG1hcHBlZDogKi8KLSNkZWZpbmUJUENJXzE2S0IwX1dJTjJfT0ZGU0VUCSg0ICogMTAyNCkJLyogYmFyMCArIDRLIGlzICJXaW5kb3cgMiIgKi8KKyNkZWZpbmUgUENJX1NCSU1fU1RBVFVTX1NFUlIJMHg0CS8qIGJhY2twbGFuZSBTQkVyciBpbnRlcnJ1cHQgc3RhdHVzICovCiAKLS8qIFBDSV9JTlRfU1RBVFVTICovCi0jZGVmaW5lCVBDSV9TQklNX1NUQVRVU19TRVJSCTB4NAkvKiBiYWNrcGxhbmUgU0JFcnIgaW50ZXJydXB0IHN0YXR1cyAqLwotCi0vKiBQQ0lfSU5UX01BU0sgKi8KLSNkZWZpbmUJUENJX1NCSU1fU0hJRlQJCTgJLyogYmFja3BsYW5lIGNvcmUgaW50ZXJydXB0IG1hc2sgYml0cyBvZmZzZXQgKi8KLSNkZWZpbmUJUENJX1NCSU1fTUFTSwkJMHhmZjAwCS8qIGJhY2twbGFuZSBjb3JlIGludGVycnVwdCBtYXNrICovCi0jZGVmaW5lCVBDSV9TQklNX01BU0tfU0VSUgkweDQJLyogYmFja3BsYW5lIFNCRXJyIGludGVycnVwdCBtYXNrICovCi0KLS8qIFBDSV9TUFJPTV9DT05UUk9MICovCi0jZGVmaW5lIFNQUk9NX1NaX01TSwkJMHgwMgkvKiBTUFJPTSBTaXplIE1hc2sgKi8KLSNkZWZpbmUgU1BST01fTE9DS0VECQkweDA4CS8qIFNQUk9NIExvY2tlZCAqLwotI2RlZmluZQlTUFJPTV9CTEFOSwkJMHgwNAkvKiBpbmRpY2F0aW5nIGEgYmxhbmsgU1BST00gKi8KLSNkZWZpbmUgU1BST01fV1JJVEVFTgkJMHgxMAkvKiBTUFJPTSB3cml0ZSBlbmFibGUgKi8KLSNkZWZpbmUgU1BST01fQk9PVFJPTV9XRQkweDIwCS8qIGV4dGVybmFsIGJvb3Ryb20gd3JpdGUgZW5hYmxlICovCi0jZGVmaW5lIFNQUk9NX0JBQ0tQTEFORV9FTgkweDQwCS8qIEVuYWJsZSBpbmRpcmVjdCBiYWNrcGxhbmUgYWNjZXNzICovCi0jZGVmaW5lIFNQUk9NX09UUElOX1VTRQkJMHg4MAkvKiBkZXZpY2UgT1RQIEluIHVzZSAqLwotCi0vKiBCaXRzIGluIFBDSSBjb21tYW5kIGFuZCBzdGF0dXMgcmVncyAqLwotI2RlZmluZSBQQ0lfQ01EX0lPCQkweDAwMDAwMDAxCS8qIEkvTyBlbmFibGUgKi8KLSNkZWZpbmUgUENJX0NNRF9NRU1PUlkJCTB4MDAwMDAwMDIJLyogTWVtb3J5IGVuYWJsZSAqLwotI2RlZmluZSBQQ0lfQ01EX01BU1RFUgkJMHgwMDAwMDAwNAkvKiBNYXN0ZXIgZW5hYmxlICovCi0jZGVmaW5lIFBDSV9DTURfU1BFQ0lBTAkJMHgwMDAwMDAwOAkvKiBTcGVjaWFsIGN5Y2xlcyBlbmFibGUgKi8KLSNkZWZpbmUgUENJX0NNRF9JTlZBTElEQVRFCTB4MDAwMDAwMTAJLyogSW52YWxpZGF0ZT8gKi8KLSNkZWZpbmUgUENJX0NNRF9WR0FfUEFMCQkweDAwMDAwMDQwCS8qIFZHQSBQYWxhdGUgKi8KLSNkZWZpbmUgUENJX1NUQVRfVEEJCTB4MDgwMDAwMDAJLyogdGFyZ2V0IGFib3J0IHN0YXR1cyAqLwogI2VuZGlmCQkJCS8qIF9oX3BjaWNmZ18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvaW5jbHVkZS9zYmNoaXBjLmggYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2luY2x1ZGUvc2JjaGlwYy5oCmluZGV4IGY2MDg4OTQuLjhjMDFjNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvaW5jbHVkZS9zYmNoaXBjLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9pbmNsdWRlL3NiY2hpcGMuaApAQCAtMjI1LDcgKzIyNSw3IEBACiAKICNlbmRpZgkJCQkvKiBfTEFOR1VBR0VfQVNTRU1CTFkgKi8KIAotI2lmCWRlZmluZWQoSUxfQklHRU5ESUFOKSAmJiBkZWZpbmVkKEJDTUhORDc0SykKKyNpZglkZWZpbmVkKF9fQklHX0VORElBTikgJiYgZGVmaW5lZChCQ01ITkQ3NEspCiAvKiBTZWxlY3RpdmUgc3dhcHBlZCBkZWZpbmVzIGZvciB0aG9zZSByZWdpc3RlcnMgd2UgbmVlZCBpbgogICogYmlnLWVuZGlhbiBjb2RlLgogICovCkBAIC0yMzQsMTQgKzIzNCwxNCBAQAogI2RlZmluZQlDQ19DSElQU1QJCTB4MjgKICNkZWZpbmUJQ0NfRVJPTVBUUgkJMHhmOAogCi0jZWxzZQkJCQkvKiAhSUxfQklHRU5ESUFOIHx8ICFCQ01ITkQ3NEsgKi8KKyNlbHNlCQkJCS8qICFfX0JJR19FTkRJQU4gfHwgIUJDTUhORDc0SyAqLwogCiAjZGVmaW5lCUNDX0NISVBJRAkJMAogI2RlZmluZQlDQ19DQVBBQklMSVRJRVMJCTQKICNkZWZpbmUJQ0NfQ0hJUFNUCQkweDJjCiAjZGVmaW5lCUNDX0VST01QVFIJCTB4ZmMKIAotI2VuZGlmCQkJCS8qIElMX0JJR0VORElBTiAmJiBCQ01ITkQ3NEsgKi8KKyNlbmRpZgkJCQkvKiBfX0JJR19FTkRJQU4gJiYgQkNNSE5ENzRLICovCiAKICNkZWZpbmUgQ0NfT1RQU1QJCTB4MTAKICNkZWZpbmUJQ0NfSlRBR0NNRAkJMHgzMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9pbmNsdWRlL3NpdXRpbHMuaCBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvaW5jbHVkZS9zaXV0aWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwMWU5YTQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9pbmNsdWRlL3NpdXRpbHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDM2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEwIEJyb2FkY29tIENvcnBvcmF0aW9uCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04KLSAqIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4KLSAqIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLQotI2lmbmRlZglfc2l1dGlsc19oXwotI2RlZmluZQlfc2l1dGlsc19oXwotCi0jaW5jbHVkZSA8aG5kc29jLmg+Ci0KLS8qCi0gKiBEYXRhIHN0cnVjdHVyZSB0byBleHBvcnQgYWxsIGNoaXAgc3BlY2lmaWMgY29tbW9uIHZhcmlhYmxlcwotICogICBwdWJsaWMgKHJlYWQtb25seSkgcG9ydGlvbiBvZiBzaXV0aWxzIGhhbmRsZSByZXR1cm5lZCBieSBzaV9hdHRhY2goKQotICovCi1zdHJ1Y3Qgc2lfcHViIHsKLQl1aW50IHNvY2l0eXBlOwkJLyogU09DSV9TQiwgU09DSV9BSSAqLwotCi0JdWludCBidXN0eXBlOwkJLyogU0lfQlVTLCBQQ0lfQlVTICovCi0JdWludCBidXNjb3JldHlwZTsJLyogUENJX0NPUkVfSUQsIFBDSUVfQ09SRV9JRCwgUENNQ0lBX0NPUkVfSUQgKi8KLQl1aW50IGJ1c2NvcmVyZXY7CS8qIGJ1c2NvcmUgcmV2ICovCi0JdWludCBidXNjb3JlaWR4OwkvKiBidXNjb3JlIGluZGV4ICovCi0JaW50IGNjcmV2OwkJLyogY2hpcCBjb21tb24gY29yZSByZXYgKi8KLQl1MzIgY2NjYXBzOwkJLyogY2hpcCBjb21tb24gY2FwYWJpbGl0aWVzICovCi0JdTMyIGNjY2Fwc19leHQ7CS8qIGNoaXAgY29tbW9uIGNhcGFiaWxpdGllcyBleHRlbnNpb24gKi8KLQlpbnQgcG11cmV2OwkJLyogcG11IGNvcmUgcmV2ICovCi0JdTMyIHBtdWNhcHM7CQkvKiBwbXUgY2FwYWJpbGl0aWVzICovCi0JdWludCBib2FyZHR5cGU7CQkvKiBib2FyZCB0eXBlICovCi0JdWludCBib2FyZHZlbmRvcjsJLyogYm9hcmQgdmVuZG9yICovCi0JdWludCBib2FyZGZsYWdzOwkvKiBib2FyZCBmbGFncyAqLwotCXVpbnQgYm9hcmRmbGFnczI7CS8qIGJvYXJkIGZsYWdzMiAqLwotCXVpbnQgY2hpcDsJCS8qIGNoaXAgbnVtYmVyICovCi0JdWludCBjaGlwcmV2OwkJLyogY2hpcCByZXZpc2lvbiAqLwotCXVpbnQgY2hpcHBrZzsJCS8qIGNoaXAgcGFja2FnZSBvcHRpb24gKi8KLQl1MzIgY2hpcHN0OwkJLyogY2hpcCBzdGF0dXMgKi8KLQlib29sIGlzc2ltOwkJLyogY2hpcCBpcyBpbiBzaW11bGF0aW9uIG9yIGVtdWxhdGlvbiAqLwotCXVpbnQgc29jaXJldjsJCS8qIFNPQyBpbnRlcmNvbm5lY3QgcmV2ICovCi0JYm9vbCBwY2lfcHIzMjQxNDsKLQotfTsKLQotLyogZm9yIEhJR0hfT05MWSBkcml2ZXIsIHRoZSBzaV90IG11c3QgYmUgd3JpdGFibGUgdG8gYWxsb3cgc3RhdGVzIHN5bmMgZnJvbSBCTUFDIHRvIEhJR0ggZHJpdmVyCi0gKiBmb3IgbW9ub2xpdGhpYyBkcml2ZXIsIGl0IGlzIHJlYWRvbmx5IHRvIHByZXZlbnQgYWNjaWRlbnQgY2hhbmdlCi0gKi8KLXR5cGVkZWYgY29uc3Qgc3RydWN0IHNpX3B1YiBzaV90OwotCi0vKgotICogTWFueSBvZiB0aGUgcm91dGluZXMgYmVsb3cgdGFrZSBhbiAnc2loJyBoYW5kbGUgYXMgdGhlaXIgZmlyc3QgYXJnLgotICogQWxsb2NhdGUgdGhpcyBieSBjYWxsaW5nIHNpX2F0dGFjaCgpLiAgRnJlZSBpdCBieSBjYWxsaW5nIHNpX2RldGFjaCgpLgotICogQXQgYW55IG9uZSB0aW1lLCB0aGUgc2loIGlzIGxvZ2ljYWxseSBmb2N1c2VkIG9uIG9uZSBwYXJ0aWN1bGFyIHNpIGNvcmUKLSAqICh0aGUgImN1cnJlbnQgY29yZSIpLgotICogVXNlIHNpX3NldGNvcmUoKSBvciBzaV9zZXRjb3JlaWR4KCkgdG8gY2hhbmdlIHRoZSBhc3NvY2lhdGlvbiB0byBhbm90aGVyIGNvcmUuCi0gKi8KLQotI2RlZmluZQlCQURJRFgJCShTSV9NQVhDT1JFUyArIDEpCi0KLS8qIGNsa2N0bCB4dGFsIHdoYXQgZmxhZ3MgKi8KLSNkZWZpbmUJWFRBTAkJCTB4MQkvKiBwcmltYXJ5IGNyeXN0YWwgb3NjaWxsYXRvciAoMjA1MCkgKi8KLSNkZWZpbmUJUExMCQkJMHgyCS8qIG1haW4gY2hpcCBwbGwgKi8KLQotLyogY2xrY3RsIGNsayBtb2RlICovCi0jZGVmaW5lCUNMS19GQVNUCQkwCS8qIGZvcmNlIGZhc3QgKHBsbCkgY2xvY2sgKi8KLSNkZWZpbmUJQ0xLX0RZTkFNSUMJCTIJLyogZW5hYmxlIGR5bmFtaWMgY2xvY2sgY29udHJvbCAqLwotCi0vKiBHUElPIHVzYWdlIHByaW9yaXRpZXMgKi8KLSNkZWZpbmUgR1BJT19EUlZfUFJJT1JJVFkJMAkvKiBEcml2ZXIgKi8KLSNkZWZpbmUgR1BJT19BUFBfUFJJT1JJVFkJMQkvKiBBcHBsaWNhdGlvbiAqLwotI2RlZmluZSBHUElPX0hJX1BSSU9SSVRZCTIJLyogSGlnaGVzdCBwcmlvcml0eS4gSWdub3JlIEdQSU8gcmVzZXJ2YXRpb24gKi8KLQotLyogR1BJTyBwdWxsIHVwL2Rvd24gKi8KLSNkZWZpbmUgR1BJT19QVUxMVVAJCTAKLSNkZWZpbmUgR1BJT19QVUxMRE4JCTEKLQotLyogR1BJTyBldmVudCByZWd0eXBlICovCi0jZGVmaW5lIEdQSU9fUkVHRVZUCQkwCS8qIEdQSU8gcmVnaXN0ZXIgZXZlbnQgKi8KLSNkZWZpbmUgR1BJT19SRUdFVlRfSU5UTVNLCTEJLyogR1BJTyByZWdpc3RlciBldmVudCBpbnQgbWFzayAqLwotI2RlZmluZSBHUElPX1JFR0VWVF9JTlRQT0wJMgkvKiBHUElPIHJlZ2lzdGVyIGV2ZW50IGludCBwb2xhcml0eSAqLwotCi0vKiBkZXZpY2UgcGF0aCAqLwotI2RlZmluZSBTSV9ERVZQQVRIX0JVRlNaCTE2CS8qIG1pbiBidWZmZXIgc2l6ZSBpbiBieXRlcyAqLwotCi0vKiBTSSByb3V0aW5lIGVudW1lcmF0aW9uOiB0byBiZSB1c2VkIGJ5IHVwZGF0ZSBmdW5jdGlvbiB3aXRoIG11bHRpcGxlIGhvb2tzICovCi0jZGVmaW5lCVNJX0RPQVRUQUNICTEKLSNkZWZpbmUgU0lfUENJRE9XTgkyCi0jZGVmaW5lIFNJX1BDSVVQCTMKLQotI2RlZmluZQlJU1NJTV9FTkFCKHNpaCkJMAotCi0vKiBQTVUgY2xvY2svcG93ZXIgY29udHJvbCAqLwotI2lmIGRlZmluZWQoQkNNUE1VQ1RMKQotI2RlZmluZSBQTVVDVExfRU5BQihzaWgpCShCQ01QTVVDVEwpCi0jZWxzZQotI2RlZmluZSBQTVVDVExfRU5BQihzaWgpCSgoc2loKS0+Y2NjYXBzICYgQ0NfQ0FQX1BNVSkKLSNlbmRpZgotCi0vKiBjaGlwY29tbW9uIGNsb2NrL3Bvd2VyIGNvbnRyb2wgKGV4Y2x1c2l2ZSB3aXRoIFBNVSdzKSAqLwotI2lmIGRlZmluZWQoQkNNUE1VQ1RMKSAmJiBCQ01QTVVDVEwKLSNkZWZpbmUgQ0NDVExfRU5BQihzaWgpCQkoMCkKLSNkZWZpbmUgQ0NQTExfRU5BQihzaWgpCQkoMCkKLSNlbHNlCi0jZGVmaW5lIENDQ1RMX0VOQUIoc2loKQkJKChzaWgpLT5jY2NhcHMgJiBDQ19DQVBfUFdSX0NUTCkKLSNkZWZpbmUgQ0NQTExfRU5BQihzaWgpCQkoKHNpaCktPmNjY2FwcyAmIENDX0NBUF9QTExfTUFTSykKLSNlbmRpZgotCi10eXBlZGVmIHZvaWQgKCpncGlvX2hhbmRsZXJfdCkgKHUzMiBzdGF0LCB2b2lkICphcmcpOwotCi0vKiBFeHRlcm5hbCBQQSBlbmFibGUgbWFzayAqLwotI2RlZmluZSBHUElPX0NUUkxfRVBBX0VOX01BU0sgMHg0MAotCi0vKiA9PT0gZXhwb3J0ZWQgZnVuY3Rpb25zID09PSAqLwotZXh0ZXJuIHNpX3QgKnNpX2F0dGFjaCh1aW50IHBjaWRldiwgdm9pZCAqcmVncywgdWludCBidXN0eXBlLAotCQkgICAgICAgdm9pZCAqc2RoLCBjaGFyICoqdmFycywgdWludCAqdmFyc3opOwotCi1leHRlcm4gdm9pZCBzaV9kZXRhY2goc2lfdCAqc2loKTsKLWV4dGVybiBib29sIHNpX3BjaV93YXIxNjE2NShzaV90ICpzaWgpOwotCi1leHRlcm4gdWludCBzaV9jb3JlaWQoc2lfdCAqc2loKTsKLWV4dGVybiB1aW50IHNpX2ZsYWcoc2lfdCAqc2loKTsKLWV4dGVybiB1aW50IHNpX2NvcmVpZHgoc2lfdCAqc2loKTsKLWV4dGVybiB1aW50IHNpX2NvcmVyZXYoc2lfdCAqc2loKTsKLWV4dGVybiB1aW50IHNpX2NvcmVyZWcoc2lfdCAqc2loLCB1aW50IGNvcmVpZHgsIHVpbnQgcmVnb2ZmLCB1aW50IG1hc2ssCi0JCXVpbnQgdmFsKTsKLWV4dGVybiB2b2lkIHNpX3dyaXRlX3dyYXBwZXJyZWcoc2lfdCAqc2loLCB1MzIgb2Zmc2V0LCB1MzIgdmFsKTsKLWV4dGVybiB1MzIgc2lfY29yZV9jZmxhZ3Moc2lfdCAqc2loLCB1MzIgbWFzaywgdTMyIHZhbCk7Ci1leHRlcm4gdTMyIHNpX2NvcmVfc2ZsYWdzKHNpX3QgKnNpaCwgdTMyIG1hc2ssIHUzMiB2YWwpOwotZXh0ZXJuIGJvb2wgc2lfaXNjb3JldXAoc2lfdCAqc2loKTsKLWV4dGVybiB1aW50IHNpX2ZpbmRjb3JlaWR4KHNpX3QgKnNpaCwgdWludCBjb3JlaWQsIHVpbnQgY29yZXVuaXQpOwotI2lmbmRlZiBCQ01TRElPCi1leHRlcm4gdm9pZCAqc2lfc2V0Y29yZWlkeChzaV90ICpzaWgsIHVpbnQgY29yZWlkeCk7Ci0jZW5kaWYKLWV4dGVybiB2b2lkICpzaV9zZXRjb3JlKHNpX3QgKnNpaCwgdWludCBjb3JlaWQsIHVpbnQgY29yZXVuaXQpOwotZXh0ZXJuIHZvaWQgKnNpX3N3aXRjaF9jb3JlKHNpX3QgKnNpaCwgdWludCBjb3JlaWQsIHVpbnQgKm9yaWdpZHgsCi0JCQkgICAgdWludCAqaW50cl92YWwpOwotZXh0ZXJuIHZvaWQgc2lfcmVzdG9yZV9jb3JlKHNpX3QgKnNpaCwgdWludCBjb3JlaWQsIHVpbnQgaW50cl92YWwpOwotZXh0ZXJuIHZvaWQgc2lfY29yZV9yZXNldChzaV90ICpzaWgsIHUzMiBiaXRzLCB1MzIgcmVzZXRiaXRzKTsKLWV4dGVybiB2b2lkIHNpX2NvcmVfZGlzYWJsZShzaV90ICpzaWgsIHUzMiBiaXRzKTsKLWV4dGVybiB1MzIgc2lfYWxwX2Nsb2NrKHNpX3QgKnNpaCk7Ci1leHRlcm4gdTMyIHNpX2lscF9jbG9jayhzaV90ICpzaWgpOwotZXh0ZXJuIHZvaWQgc2lfcGNpX3NldHVwKHNpX3QgKnNpaCwgdWludCBjb3JlbWFzayk7Ci1leHRlcm4gdm9pZCBzaV9zZXRpbnQoc2lfdCAqc2loLCBpbnQgc2lmbGFnKTsKLWV4dGVybiBib29sIHNpX2JhY2twbGFuZTY0KHNpX3QgKnNpaCk7Ci1leHRlcm4gdm9pZCBzaV9yZWdpc3Rlcl9pbnRyX2NhbGxiYWNrKHNpX3QgKnNpaCwgdm9pZCAqaW50cnNvZmZfZm4sCi0JCQkJICAgICAgdm9pZCAqaW50cnNyZXN0b3JlX2ZuLAotCQkJCSAgICAgIHZvaWQgKmludHJzZW5hYmxlZF9mbiwgdm9pZCAqaW50cl9hcmcpOwotZXh0ZXJuIHZvaWQgc2lfZGVyZWdpc3Rlcl9pbnRyX2NhbGxiYWNrKHNpX3QgKnNpaCk7Ci1leHRlcm4gdm9pZCBzaV9jbGtjdGxfaW5pdChzaV90ICpzaWgpOwotZXh0ZXJuIHUxNiBzaV9jbGtjdGxfZmFzdF9wd3J1cF9kZWxheShzaV90ICpzaWgpOwotZXh0ZXJuIGJvb2wgc2lfY2xrY3RsX2NjKHNpX3QgKnNpaCwgdWludCBtb2RlKTsKLWV4dGVybiBpbnQgc2lfY2xrY3RsX3h0YWwoc2lfdCAqc2loLCB1aW50IHdoYXQsIGJvb2wgb24pOwotZXh0ZXJuIGJvb2wgc2lfZGV2aWNlcmVtb3ZlZChzaV90ICpzaWgpOwotZXh0ZXJuIHUzMiBzaV9zb2NyYW1fc2l6ZShzaV90ICpzaWgpOwotCi1leHRlcm4gdm9pZCBzaV93YXRjaGRvZyhzaV90ICpzaWgsIHVpbnQgdGlja3MpOwotZXh0ZXJuIHUzMiBzaV9ncGlvY29udHJvbChzaV90ICpzaWgsIHUzMiBtYXNrLCB1MzIgdmFsLAotCQkJICAgICB1OCBwcmlvcml0eSk7Ci0KLSNpZmRlZiBCQ01TRElPCi1leHRlcm4gdm9pZCBzaV9zZGlvX2luaXQoc2lfdCAqc2loKTsKLSNlbmRpZgotCi0jZGVmaW5lIHNpX2VjaShzaWgpIDAKLSNkZWZpbmUgc2lfZWNpX2luaXQoc2loKSAoMCkKLSNkZWZpbmUgc2lfZWNpX25vdGlmeV9idChzaWgsIHR5cGUsIHZhbCkgICgwKQotI2RlZmluZSBzaV9zZWNpKHNpaCkgMAotCi0vKiBPVFAgc3RhdHVzICovCi1leHRlcm4gYm9vbCBzaV9pc19vdHBfZGlzYWJsZWQoc2lfdCAqc2loKTsKLWV4dGVybiBib29sIHNpX2lzX290cF9wb3dlcmVkKHNpX3QgKnNpaCk7Ci1leHRlcm4gdm9pZCBzaV9vdHBfcG93ZXIoc2lfdCAqc2loLCBib29sIG9uKTsKLQotLyogU1BST00gYXZhaWxhYmlsaXR5ICovCi1leHRlcm4gYm9vbCBzaV9pc19zcHJvbV9hdmFpbGFibGUoc2lfdCAqc2loKTsKLSNpZmRlZiBTSV9TUFJPTV9QUk9CRQotZXh0ZXJuIHZvaWQgc2lfc3Byb21faW5pdChzaV90ICpzaWgpOwotI2VuZGlmCQkJCS8qIFNJX1NQUk9NX1BST0JFICovCi0KLSNkZWZpbmUJU0lfRVJST1IoYXJncykKLQotI2lmZGVmIEJDTURCRwotI2RlZmluZQlTSV9NU0coYXJncykJcHJpbnRrIGFyZ3MKLSNlbHNlCi0jZGVmaW5lCVNJX01TRyhhcmdzKQotI2VuZGlmCQkJCS8qIEJDTURCRyAqLwotCi0vKiBEZWZpbmUgU0lfVk1TRyB0byBwcmludGYgZm9yIHZlcmJvc2UgZGVidWdnaW5nLCBidXQgZG9uJ3QgY2hlY2sgaXQgaW4gKi8KLSNkZWZpbmUJU0lfVk1TRyhhcmdzKQotCi0jZGVmaW5lCUlTX1NJTShjaGlwcGtnKQkoKGNoaXBwa2cgPT0gSERMU0lNX1BLR19JRCkgfHwgKGNoaXBwa2cgPT0gSFdTSU1fUEtHX0lEKSkKLQotdHlwZWRlZiB1MzIoKnNpX2ludHJzb2ZmX3QpICh2b2lkICppbnRyX2FyZyk7Ci10eXBlZGVmIHZvaWQgKCpzaV9pbnRyc3Jlc3RvcmVfdCkgKHZvaWQgKmludHJfYXJnLCB1MzIgYXJnKTsKLXR5cGVkZWYgYm9vbCgqc2lfaW50cnNlbmFibGVkX3QpICh2b2lkICppbnRyX2FyZyk7Ci0KLXR5cGVkZWYgc3RydWN0IGdwaW9oX2l0ZW0gewotCXZvaWQgKmFyZzsKLQlib29sIGxldmVsOwotCWdwaW9faGFuZGxlcl90IGhhbmRsZXI7Ci0JdTMyIGV2ZW50OwotCXN0cnVjdCBncGlvaF9pdGVtICpuZXh0OwotfSBncGlvaF9pdGVtX3Q7Ci0KLS8qIG1pc2Mgc2kgaW5mbyBuZWVkZWQgYnkgc29tZSBvZiB0aGUgcm91dGluZXMgKi8KLXR5cGVkZWYgc3RydWN0IHNpX2luZm8gewotCXN0cnVjdCBzaV9wdWIgcHViOwkvKiBiYWNrIHBsYW5lIHB1YmxpYyBzdGF0ZSAobXVzdCBiZSBmaXJzdCkgKi8KLQl2b2lkICpwYnVzOwkJLyogaGFuZGxlIHRvIGJ1cyAocGNpL3NkaW8vLi4pICovCi0JdWludCBkZXZfY29yZWlkOwkvKiB0aGUgY29yZSBwcm92aWRlcyBkcml2ZXIgZnVuY3Rpb25zICovCi0Jdm9pZCAqaW50cl9hcmc7CQkvKiBpbnRlcnJ1cHQgY2FsbGJhY2sgZnVuY3Rpb24gYXJnICovCi0Jc2lfaW50cnNvZmZfdCBpbnRyc29mZl9mbjsJLyogdHVybnMgY2hpcCBpbnRlcnJ1cHRzIG9mZiAqLwotCXNpX2ludHJzcmVzdG9yZV90IGludHJzcmVzdG9yZV9mbjsJLyogcmVzdG9yZSBjaGlwIGludGVycnVwdHMgKi8KLQlzaV9pbnRyc2VuYWJsZWRfdCBpbnRyc2VuYWJsZWRfZm47CS8qIGNoZWNrIGlmIGludGVycnVwdHMgYXJlIGVuYWJsZWQgKi8KLQotCXZvaWQgKnBjaDsJCS8qIFBDSS9FIGNvcmUgaGFuZGxlICovCi0KLQlncGlvaF9pdGVtX3QgKmdwaW9oX2hlYWQ7CS8qIEdQSU8gZXZlbnQgaGFuZGxlcnMgbGlzdCAqLwotCi0JYm9vbCBtZW1zZWc7CQkvKiBmbGFnIHRvIHRvZ2dsZSBNRU1fU0VHIHJlZ2lzdGVyICovCi0KLQljaGFyICp2YXJzOwotCXVpbnQgdmFyc3o7Ci0KLQl2b2lkICpjdXJtYXA7CQkvKiBjdXJyZW50IHJlZ3MgdmEgKi8KLQl2b2lkICpyZWdzW1NJX01BWENPUkVTXTsJLyogb3RoZXIgcmVncyB2YSAqLwotCi0JdWludCBjdXJpZHg7CQkvKiBjdXJyZW50IGNvcmUgaW5kZXggKi8KLQl1aW50IG51bWNvcmVzOwkJLyogIyBkaXNjb3ZlcmVkIGNvcmVzICovCi0JdWludCBjb3JlaWRbU0lfTUFYQ09SRVNdOwkvKiBpZCBvZiBlYWNoIGNvcmUgKi8KLQl1MzIgY29yZXNiYVtTSV9NQVhDT1JFU107CS8qIGJhY2twbGFuZSBhZGRyZXNzIG9mIGVhY2ggY29yZSAqLwotCXZvaWQgKnJlZ3MyW1NJX01BWENPUkVTXTsJLyogdmEgb2YgZWFjaCBjb3JlIHNlY29uZCByZWdpc3RlciBzZXQgKHVzYmgyMCkgKi8KLQl1MzIgY29yZXNiYTJbU0lfTUFYQ09SRVNdOwkvKiBhZGRyZXNzIG9mIGVhY2ggY29yZSBzZWNvbmQgcmVnaXN0ZXIgc2V0ICh1c2JoMjApICovCi0JdTMyIGNvcmVzYmFfc2l6ZVtTSV9NQVhDT1JFU107CS8qIGJhY2twbGFuZSBhZGRyZXNzIHNwYWNlIHNpemUgKi8KLQl1MzIgY29yZXNiYTJfc2l6ZVtTSV9NQVhDT1JFU107CS8qIHNlY29uZCBhZGRyZXNzIHNwYWNlIHNpemUgKi8KLQotCXZvaWQgKmN1cndyYXA7CQkvKiBjdXJyZW50IHdyYXBwZXIgdmEgKi8KLQl2b2lkICp3cmFwcGVyc1tTSV9NQVhDT1JFU107CS8qIG90aGVyIGNvcmVzIHdyYXBwZXIgdmEgKi8KLQl1MzIgd3JhcGJhW1NJX01BWENPUkVTXTsJLyogYWRkcmVzcyBvZiBjb250cm9sbGluZyB3cmFwcGVyICovCi0KLQl1MzIgY2lhW1NJX01BWENPUkVTXTsJLyogZXJvbSBjaWEgZW50cnkgZm9yIGVhY2ggY29yZSAqLwotCXUzMiBjaWJbU0lfTUFYQ09SRVNdOwkvKiBlcm9tIGNpYSBlbnRyeSBmb3IgZWFjaCBjb3JlICovCi0JdTMyIG9vYl9yb3V0ZXI7CS8qIG9vYiByb3V0ZXIgcmVnaXN0ZXJzIGZvciBheGkgKi8KLX0gc2lfaW5mb190OwotCi0jZGVmaW5lCVNJX0lORk8oc2loKQkoKHNpX2luZm9fdCAqKShzaWgpKQotCi0jZGVmaW5lCUdPT0RDT1JFQUREUih4LCBiKSAoKCh4KSA+PSAoYikpICYmICgoeCkgPCAoKGIpICsgU0lfTUFYQ09SRVMgKiBTSV9DT1JFX1NJWkUpKSAmJiBcCi0JCUlTX0FMSUdORUQoKHgpLCBTSV9DT1JFX1NJWkUpKQotI2RlZmluZQlHT09EUkVHUyhyZWdzKQkoKHJlZ3MpICE9IE5VTEwgJiYgSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZykocmVncyksIFNJX0NPUkVfU0laRSkpCi0jZGVmaW5lIEJBRENPUkVBRERSCTAKLSNkZWZpbmUJR09PRElEWChpZHgpCSgoKHVpbnQpaWR4KSA8IFNJX01BWENPUkVTKQotI2RlZmluZQlOT1JFVgkJLTEJLyogSW52YWxpZCByZXYgKi8KLQotLyogTmV3ZXIgY2hpcHMgY2FuIGFjY2VzcyBQQ0kvUENJRSBhbmQgQ0MgY29yZSB3aXRob3V0IHJlcXVpcmluZyB0byBjaGFuZ2UKLSAqIFBDSSBCQVIwIFdJTgotICovCi0jZGVmaW5lIFNJX0ZBU1Qoc2kpICgoKHNpKS0+cHViLmJ1c2NvcmV0eXBlID09IFBDSUVfQ09SRV9JRCkgfHwJXAotCQkgICAgICgoKHNpKS0+cHViLmJ1c2NvcmV0eXBlID09IFBDSV9DT1JFX0lEKSAmJiAoc2kpLT5wdWIuYnVzY29yZXJldiA+PSAxMykpCi0KLSNkZWZpbmUgUENJRVJFR1Moc2kpICgoKGNoYXIgKikoKHNpKS0+Y3VybWFwKSArIFBDSV8xNktCMF9QQ0lSRUdTX09GRlNFVCkpCi0jZGVmaW5lIENDUkVHU19GQVNUKHNpKSAoKChjaGFyICopKChzaSktPmN1cm1hcCkgKyBQQ0lfMTZLQjBfQ0NSRUdTX09GRlNFVCkpCi0KLS8qCi0gKiBNYWNyb3MgdG8gZGlzYWJsZS9yZXN0b3JlIGZ1bmN0aW9uIGNvcmUoRDExLCBFTkVULCBJTElORTIwLCBldGMpIGludGVycnVwdHMKLSAqIGJlZm9yZSBhZnRlciBjb3JlIHN3aXRjaGluZyB0byBhdm9pZCBpbnZhbGlkIHJlZ2lzdGVyIGFjY2VzcyBpbnNpZGUgSVNSLgotICovCi0jZGVmaW5lIElOVFJfT0ZGKHNpLCBpbnRyX3ZhbCkgXAotCWlmICgoc2kpLT5pbnRyc29mZl9mbiAmJiAoc2kpLT5jb3JlaWRbKHNpKS0+Y3VyaWR4XSA9PSAoc2kpLT5kZXZfY29yZWlkKSB7CVwKLQkJaW50cl92YWwgPSAoKihzaSktPmludHJzb2ZmX2ZuKSgoc2kpLT5pbnRyX2FyZyk7IH0KLSNkZWZpbmUgSU5UUl9SRVNUT1JFKHNpLCBpbnRyX3ZhbCkgXAotCWlmICgoc2kpLT5pbnRyc3Jlc3RvcmVfZm4gJiYgKHNpKS0+Y29yZWlkWyhzaSktPmN1cmlkeF0gPT0gKHNpKS0+ZGV2X2NvcmVpZCkgewlcCi0JCSgqKHNpKS0+aW50cnNyZXN0b3JlX2ZuKSgoc2kpLT5pbnRyX2FyZywgaW50cl92YWwpOyB9Ci0KLS8qIGR5bmFtaWMgY2xvY2sgY29udHJvbCBkZWZpbmVzICovCi0jZGVmaW5lCUxQT01JTkZSRVEJCTI1MDAwCS8qIGxvdyBwb3dlciBvc2NpbGxhdG9yIG1pbiAqLwotI2RlZmluZQlMUE9NQVhGUkVRCQk0MzAwMAkvKiBsb3cgcG93ZXIgb3NjaWxsYXRvciBtYXggKi8KLSNkZWZpbmUJWFRBTE1JTkZSRVEJCTE5ODAwMDAwCS8qIDIwIE1IeiAtIDElICovCi0jZGVmaW5lCVhUQUxNQVhGUkVRCQkyMDIwMDAwMAkvKiAyMCBNSHogKyAxJSAqLwotI2RlZmluZQlQQ0lNSU5GUkVRCQkyNTAwMDAwMAkvKiAyNSBNSHogKi8KLSNkZWZpbmUJUENJTUFYRlJFUQkJMzQwMDAwMDAJLyogMzMgTUh6ICsgZnVkZ2UgKi8KLQotI2RlZmluZQlJTFBfRElWXzVNSFoJCTAJLyogSUxQID0gNSBNSHogKi8KLSNkZWZpbmUJSUxQX0RJVl8xTUhaCQk0CS8qIElMUCA9IDEgTUh6ICovCi0KLSNkZWZpbmUgUENJKHNpKQkJKCgoc2kpLT5wdWIuYnVzdHlwZSA9PSBQQ0lfQlVTKSAmJglcCi0JCQkgKChzaSktPnB1Yi5idXNjb3JldHlwZSA9PSBQQ0lfQ09SRV9JRCkpCi0jZGVmaW5lIFBDSUUoc2kpCSgoKHNpKS0+cHViLmJ1c3R5cGUgPT0gUENJX0JVUykgJiYJXAotCQkJICgoc2kpLT5wdWIuYnVzY29yZXR5cGUgPT0gUENJRV9DT1JFX0lEKSkKLSNkZWZpbmUgUENJX0ZPUkNFSFQoc2kpCVwKLQkoUENJRShzaSkgJiYgKHNpLT5wdWIuY2hpcCA9PSBCQ000NzE2X0NISVBfSUQpKQotCi0vKiBHUElPIEJhc2VkIExFRCBwb3dlcnNhdmUgZGVmaW5lcyAqLwotI2RlZmluZSBERUZBVUxUX0dQSU9fT05USU1FCTEwCS8qIERlZmF1bHQ6IDEwJSBvbiAqLwotI2RlZmluZSBERUZBVUxUX0dQSU9fT0ZGVElNRQk5MAkvKiBEZWZhdWx0OiAxMCUgb24gKi8KLQotI2lmbmRlZiBERUZBVUxUX0dQSU9USU1FUlZBTAotI2RlZmluZSBERUZBVUxUX0dQSU9USU1FUlZBTCAgKChERUZBVUxUX0dQSU9fT05USU1FIDw8IEdQSU9fT05USU1FX1NISUZUKSB8IERFRkFVTFRfR1BJT19PRkZUSU1FKQotI2VuZGlmCi0KLS8qCi0gKiBCdWlsZCBkZXZpY2UgcGF0aC4gUGF0aCBzaXplIG11c3QgYmUgPj0gU0lfREVWUEFUSF9CVUZTWi4KLSAqIFRoZSByZXR1cm5lZCBwYXRoIGlzIE5VTEwgdGVybWluYXRlZCBhbmQgaGFzIHRyYWlsaW5nICcvJy4KLSAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG5vbnplcm8gb3RoZXJ3aXNlLgotICovCi1leHRlcm4gaW50IHNpX2RldnBhdGgoc2lfdCAqc2loLCBjaGFyICpwYXRoLCBpbnQgc2l6ZSk7Ci0vKiBSZWFkIHZhcmlhYmxlIHdpdGggcHJlcGVuZGluZyB0aGUgZGV2cGF0aCB0byB0aGUgbmFtZSAqLwotZXh0ZXJuIGNoYXIgKnNpX2dldGRldnBhdGh2YXIoc2lfdCAqc2loLCBjb25zdCBjaGFyICpuYW1lKTsKLWV4dGVybiBpbnQgc2lfZ2V0ZGV2cGF0aGludHZhcihzaV90ICpzaWgsIGNvbnN0IGNoYXIgKm5hbWUpOwotCi1leHRlcm4gdm9pZCBzaV93YXI0Mjc4MF9jbGtyZXEoc2lfdCAqc2loLCBib29sIGNsa3JlcSk7Ci1leHRlcm4gdm9pZCBzaV9wY2lfc2xlZXAoc2lfdCAqc2loKTsKLWV4dGVybiB2b2lkIHNpX3BjaV9kb3duKHNpX3QgKnNpaCk7Ci1leHRlcm4gdm9pZCBzaV9wY2lfdXAoc2lfdCAqc2loKTsKLWV4dGVybiB2b2lkIHNpX3BjaWVfZXh0ZW5kTDF0aW1lcihzaV90ICpzaWgsIGJvb2wgZXh0ZW5kKTsKLWV4dGVybiBpbnQgc2lfcGNpX2ZpeGNmZyhzaV90ICpzaWgpOwotCi1leHRlcm4gdm9pZCBzaV9jaGlwY29udHJsX2VwYTQzMzEoc2lfdCAqc2loLCBib29sIG9uKTsKLS8qIEVuYWJsZSBFeC1QQSBmb3IgNDMxMyAqLwotZXh0ZXJuIHZvaWQgc2lfZXBhXzQzMTN3YXIoc2lfdCAqc2loKTsKLQotY2hhciAqc2lfZ2V0bnZyYW1mbHZhcihzaV90ICpzaWgsIGNvbnN0IGNoYXIgKm5hbWUpOwotCi0vKiBBTUJBIEludGVyY29ubmVjdCBleHBvcnRlZCBleHRlcm5zICovCi1leHRlcm4gc2lfdCAqYWlfYXR0YWNoKHVpbnQgcGNpZGV2LCB2b2lkICpyZWdzLCB1aW50IGJ1c3R5cGUsCi0JCSAgICAgICB2b2lkICpzZGgsIGNoYXIgKip2YXJzLCB1aW50ICp2YXJzeik7Ci1leHRlcm4gc2lfdCAqYWlfa2F0dGFjaCh2b2lkKTsKLWV4dGVybiB2b2lkIGFpX3NjYW4oc2lfdCAqc2loLCB2b2lkICpyZWdzLCB1aW50IGRldmlkKTsKLQotZXh0ZXJuIHVpbnQgYWlfZmxhZyhzaV90ICpzaWgpOwotZXh0ZXJuIHZvaWQgYWlfc2V0aW50KHNpX3QgKnNpaCwgaW50IHNpZmxhZyk7Ci1leHRlcm4gdWludCBhaV9jb3JlaWR4KHNpX3QgKnNpaCk7Ci1leHRlcm4gdWludCBhaV9jb3JldmVuZG9yKHNpX3QgKnNpaCk7Ci1leHRlcm4gdWludCBhaV9jb3JlcmV2KHNpX3QgKnNpaCk7Ci1leHRlcm4gYm9vbCBhaV9pc2NvcmV1cChzaV90ICpzaWgpOwotZXh0ZXJuIHZvaWQgKmFpX3NldGNvcmVpZHgoc2lfdCAqc2loLCB1aW50IGNvcmVpZHgpOwotZXh0ZXJuIHUzMiBhaV9jb3JlX2NmbGFncyhzaV90ICpzaWgsIHUzMiBtYXNrLCB1MzIgdmFsKTsKLWV4dGVybiB2b2lkIGFpX2NvcmVfY2ZsYWdzX3dvKHNpX3QgKnNpaCwgdTMyIG1hc2ssIHUzMiB2YWwpOwotZXh0ZXJuIHUzMiBhaV9jb3JlX3NmbGFncyhzaV90ICpzaWgsIHUzMiBtYXNrLCB1MzIgdmFsKTsKLWV4dGVybiB1aW50IGFpX2NvcmVyZWcoc2lfdCAqc2loLCB1aW50IGNvcmVpZHgsIHVpbnQgcmVnb2ZmLCB1aW50IG1hc2ssCi0JCSAgICAgICB1aW50IHZhbCk7Ci1leHRlcm4gdm9pZCBhaV9jb3JlX3Jlc2V0KHNpX3QgKnNpaCwgdTMyIGJpdHMsIHUzMiByZXNldGJpdHMpOwotZXh0ZXJuIHZvaWQgYWlfY29yZV9kaXNhYmxlKHNpX3QgKnNpaCwgdTMyIGJpdHMpOwotZXh0ZXJuIGludCBhaV9udW1hZGRyc3BhY2VzKHNpX3QgKnNpaCk7Ci1leHRlcm4gdTMyIGFpX2FkZHJzcGFjZShzaV90ICpzaWgsIHVpbnQgYXNpZHgpOwotZXh0ZXJuIHUzMiBhaV9hZGRyc3BhY2VzaXplKHNpX3QgKnNpaCwgdWludCBhc2lkeCk7Ci1leHRlcm4gdm9pZCBhaV93cml0ZV93cmFwX3JlZyhzaV90ICpzaWgsIHUzMiBvZmZzZXQsIHUzMiB2YWwpOwotCi0jaWZkZWYgQkNNU0RJTwotI2RlZmluZSBzaV9zZXRjb3JlaWR4KHNpaCwgaWR4KSBzYl9zZXRjb3JlaWR4KHNpaCwgaWR4KQotI2RlZmluZSBzaV9jb3JlaWQoc2loKSBzYl9jb3JlaWQoc2loKQotI2RlZmluZSBzaV9jb3JlcmV2KHNpaCkgc2JfY29yZXJldihzaWgpCi0jZW5kaWYKLQotI2VuZGlmCQkJCS8qIF9zaXV0aWxzX2hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2luY2x1ZGUvd2xpb2N0bC5oIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9pbmNsdWRlL3dsaW9jdGwuaAppbmRleCA1ZTJiMTFiLi4yODc2YmQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2luY2x1ZGUvd2xpb2N0bC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvaW5jbHVkZS93bGlvY3RsLmgKQEAgLTI1OSw2ICsyNTksNyBAQAogLyogdXNlZCBmb3IgYXNzb2NpYXRpb24gd2l0aCBhIHNwZWNpZmljIEJTU0lEIGFuZCBjaGFuc3BlYyBsaXN0ICovCiB0eXBlZGVmIHN0cnVjdCB3bF9hc3NvY19wYXJhbXMgewogCXU4IGJzc2lkW0VUSF9BTEVOXTsJLyogMDA6MDA6MDA6MDA6MDA6MDA6IGJyb2FkY2FzdCBzY2FuICovCisJdTE2IGJzc2lkX2NudDsKIAlzMzIgY2hhbnNwZWNfbnVtOwkvKiAwOiBhbGwgYXZhaWxhYmxlIGNoYW5uZWxzLAogCQkJCSAqIG90aGVyd2lzZSBjb3VudCBvZiBjaGFuc3BlY3MgaW4gY2hhbnNwZWNfbGlzdAogCQkJCSAqLwpAQCAtNTg1LDE1ICs1ODYsNiBAQAogCXU4IGVhWzFdW0VUSF9BTEVOXTsJLyogdmFyaWFibGUgbGVuZ3RoIGFycmF5IG9mIE1BQyBhZGRyZXNzZXMgKi8KIH07CiAKLS8qIGdldCBwa3QgY291bnQgc3RydWN0IHBhc3NlZCB0aHJvdWdoIGlvY3RsICovCi10eXBlZGVmIHN0cnVjdCBnZXRfcGt0Y250IHsKLQl1aW50IHJ4X2dvb2RfcGt0OwotCXVpbnQgcnhfYmFkX3BrdDsKLQl1aW50IHR4X2dvb2RfcGt0OwotCXVpbnQgdHhfYmFkX3BrdDsKLQl1aW50IHJ4X29jYXN0X2dvb2RfcGt0OwkvKiB1bmljYXN0IHBhY2tldHMgZGVzdGluZWQgZm9yIG90aGVycyAqLwotfSBnZXRfcGt0Y250X3Q7Ci0KICNpZmRlZiBCUkNNX0ZVTExNQUMKIC8qIExpbnV4IG5ldHdvcmsgZHJpdmVyIGlvY3RsIGVuY29kaW5nICovCiB0eXBlZGVmIHN0cnVjdCB3bF9pb2N0bCB7CkBAIC0xMjQ3LDggKzEyMzksNiBAQAogLyogTWVzc2FnZSBsZXZlbHMgKi8KICNkZWZpbmUgV0xfRVJST1JfVkFMCQkweDAwMDAwMDAxCiAjZGVmaW5lIFdMX1RSQUNFX1ZBTAkJMHgwMDAwMDAwMgotI2RlZmluZSBXTF9BTVBEVV9WQUwJCTB4MjAwMDAwMDAKLSNkZWZpbmUgV0xfRkZQTERfVkFMCQkweDQwMDAwMDAwCiAKIC8qIG1heGltdW0gY2hhbm5lbHMgcmV0dXJuZWQgYnkgdGhlIGdldCB2YWxpZCBjaGFubmVscyBpb3ZhciAqLwogI2RlZmluZSBXTF9OVU1DSEFOTkVMUwkJNjQKQEAgLTEyNjAsMzQ4ICsxMjUwLDExIEBACiAKICNkZWZpbmUJTkZJRk8JCQk2CS8qICMgdHgvcnggZmlmb3BhaXJzICovCiAKLSNkZWZpbmUJV0xfQ05UX1RfVkVSU0lPTgk3CS8qIGN1cnJlbnQgdmVyc2lvbiBvZiB3bF9jbnRfdCBzdHJ1Y3QgKi8KLQotc3RydWN0IHdsX2NudCB7Ci0JdTE2IHZlcnNpb247CQkvKiBzZWUgZGVmaW5pdGlvbiBvZiBXTF9DTlRfVF9WRVJTSU9OICovCi0JdTE2IGxlbmd0aDsJCS8qIGxlbmd0aCBvZiBlbnRpcmUgc3RydWN0dXJlICovCi0KLQkvKiB0cmFuc21pdCBzdGF0IGNvdW50ZXJzICovCi0JdTMyIHR4ZnJhbWU7CQkvKiB0eCBkYXRhIGZyYW1lcyAqLwotCXUzMiB0eGJ5dGU7CQkvKiB0eCBkYXRhIGJ5dGVzICovCi0JdTMyIHR4cmV0cmFuczsJLyogdHggbWFjIHJldHJhbnNtaXRzICovCi0JdTMyIHR4ZXJyb3I7CQkvKiB0eCBkYXRhIGVycm9ycyAoZGVyaXZlZDogc3VtIG9mIG90aGVycykgKi8KLQl1MzIgdHhjdGw7CQkvKiB0eCBtYW5hZ2VtZW50IGZyYW1lcyAqLwotCXUzMiB0eHByc2hvcnQ7CS8qIHR4IHNob3J0IHByZWFtYmxlIGZyYW1lcyAqLwotCXUzMiB0eHNlcnI7CQkvKiB0eCBzdGF0dXMgZXJyb3JzICovCi0JdTMyIHR4bm9idWY7CQkvKiB0eCBvdXQgb2YgYnVmZmVycyBlcnJvcnMgKi8KLQl1MzIgdHhub2Fzc29jOwkvKiB0eCBkaXNjYXJkIGJlY2F1c2Ugd2UncmUgbm90IGFzc29jaWF0ZWQgKi8KLQl1MzIgdHhydW50OwkJLyogdHggcnVudCBmcmFtZXMgKi8KLQl1MzIgdHhjaGl0OwkJLyogdHggaGVhZGVyIGNhY2hlIGhpdCAoZmFzdHBhdGgpICovCi0JdTMyIHR4Y21pc3M7CQkvKiB0eCBoZWFkZXIgY2FjaGUgbWlzcyAoc2xvd3BhdGgpICovCi0JdTMyIGllZWVfdHhfc3RhdHVzOwkvKiBjYWxscyB0byBpZWVlODAyMTFfdHhfc3RhdHVzICovCi0JdTMyIGllZWVfdHg7CQkvKiB0eCBjYWxscyBmcm0gbWFjMDIxMSAqLwotCXUzMiBpZWVlX3J4OwkJLyogY2FsbHMgdG8gaWVlZV9yeCAqLwotCi0JLyogdHJhbnNtaXQgY2hpcCBlcnJvciBjb3VudGVycyAqLwotCXUzMiB0eHVmbG87CQkvKiB0eCBmaWZvIHVuZGVyZmxvd3MgKi8KLQl1MzIgdHhwaHllcnI7CS8qIHR4IHBoeSBlcnJvcnMgKGluZGljYXRlZCBpbiB0eCBzdGF0dXMpICovCi0JdTMyIHR4cGh5Y3JzOwotCi0JLyogcmVjZWl2ZSBzdGF0IGNvdW50ZXJzICovCi0JdTMyIHJ4ZnJhbWU7CQkvKiByeCBkYXRhIGZyYW1lcyAqLwotCXUzMiByeGJ5dGU7CQkvKiByeCBkYXRhIGJ5dGVzICovCi0JdTMyIHJ4ZXJyb3I7CQkvKiByeCBkYXRhIGVycm9ycyAoZGVyaXZlZDogc3VtIG9mIG90aGVycykgKi8KLQl1MzIgcnhjdGw7CQkvKiByeCBtYW5hZ2VtZW50IGZyYW1lcyAqLwotCXUzMiByeG5vYnVmOwkJLyogcnggb3V0IG9mIGJ1ZmZlcnMgZXJyb3JzICovCi0JdTMyIHJ4bm9uZGF0YTsJLyogcnggbm9uIGRhdGEgZnJhbWVzIGluIHRoZSBkYXRhIGNoYW5uZWwgZXJyb3JzICovCi0JdTMyIHJ4YmFkZHM7CQkvKiByeCBiYWQgRFMgZXJyb3JzICovCi0JdTMyIHJ4YmFkY207CQkvKiByeCBiYWQgY29udHJvbCBvciBtYW5hZ2VtZW50IGZyYW1lcyAqLwotCXUzMiByeGZyYWdlcnI7CS8qIHJ4IGZyYWdtZW50YXRpb24gZXJyb3JzICovCi0JdTMyIHJ4cnVudDsJCS8qIHJ4IHJ1bnQgZnJhbWVzICovCi0JdTMyIHJ4Z2lhbnQ7CQkvKiByeCBnaWFudCBmcmFtZXMgKi8KLQl1MzIgcnhub3NjYjsJCS8qIHJ4IG5vIHNjYiBlcnJvciAqLwotCXUzMiByeGJhZHByb3RvOwkvKiByeCBpbnZhbGlkIGZyYW1lcyAqLwotCXUzMiByeGJhZHNyY21hYzsJLyogcnggZnJhbWVzIHdpdGggSW52YWxpZCBTcmMgTWFjICovCi0JdTMyIHJ4YmFkZGE7CQkvKiByeCBmcmFtZXMgdG9zc2VkIGZvciBpbnZhbGlkIGRhICovCi0JdTMyIHJ4ZmlsdGVyOwkvKiByeCBmcmFtZXMgZmlsdGVyZWQgb3V0ICovCi0KLQkvKiByZWNlaXZlIGNoaXAgZXJyb3IgY291bnRlcnMgKi8KLQl1MzIgcnhvZmxvOwkJLyogcnggZmlmbyBvdmVyZmxvdyBlcnJvcnMgKi8KLQl1MzIgcnh1ZmxvW05GSUZPXTsJLyogcnggZG1hIGRlc2NyaXB0b3IgdW5kZXJmbG93IGVycm9ycyAqLwotCi0JdTMyIGQxMWNudF90eHJ0c19vZmY7CS8qIGQxMWNudCB0eHJ0cyB2YWx1ZSB3aGVuIHJlc2V0IGQxMWNudCAqLwotCXUzMiBkMTFjbnRfcnhjcmNfb2ZmOwkvKiBkMTFjbnQgcnhjcmMgdmFsdWUgd2hlbiByZXNldCBkMTFjbnQgKi8KLQl1MzIgZDExY250X3R4bm9jdHNfb2ZmOwkvKiBkMTFjbnQgdHhub2N0cyB2YWx1ZSB3aGVuIHJlc2V0IGQxMWNudCAqLwotCi0JLyogbWlzYyBjb3VudGVycyAqLwotCXUzMiBkbWFkZTsJCS8qIHR4L3J4IGRtYSBkZXNjcmlwdG9yIGVycm9ycyAqLwotCXUzMiBkbWFkYTsJCS8qIHR4L3J4IGRtYSBkYXRhIGVycm9ycyAqLwotCXUzMiBkbWFwZTsJCS8qIHR4L3J4IGRtYSBkZXNjcmlwdG9yIHByb3RvY29sIGVycm9ycyAqLwotCXUzMiByZXNldDsJCS8qIHJlc2V0IGNvdW50ICovCi0JdTMyIHRidHQ7CQkvKiBjbnRzIHRoZSBUQlRUIGludCdzICovCi0JdTMyIHR4ZG1hd2FyOwotCXUzMiBwa3RfY2FsbGJhY2tfcmVnX2ZhaWw7CS8qIGNhbGxiYWNrcyByZWdpc3RlciBmYWlsdXJlICovCi0KLQkvKiBNQUMgY291bnRlcnM6IDMyLWJpdCB2ZXJzaW9uIG9mIGQxMS5oJ3MgbWFjc3RhdF90ICovCi0JdTMyIHR4YWxsZnJtOwkvKiB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIHNlbnQsIGluY2wuIERhdGEsIEFDSywgUlRTLCBDVFMsCi0JCQkJICogQ29udHJvbCBNYW5hZ2VtZW50IChpbmNsdWRlcyByZXRyYW5zbWlzc2lvbnMpCi0JCQkJICovCi0JdTMyIHR4cnRzZnJtOwkvKiBudW1iZXIgb2YgUlRTIHNlbnQgb3V0IGJ5IHRoZSBNQUMgKi8KLQl1MzIgdHhjdHNmcm07CS8qIG51bWJlciBvZiBDVFMgc2VudCBvdXQgYnkgdGhlIE1BQyAqLwotCXUzMiB0eGFja2ZybTsJLyogbnVtYmVyIG9mIEFDSyBmcmFtZXMgc2VudCBvdXQgKi8KLQl1MzIgdHhkbmxmcm07CS8qIE5vdCB1c2VkICovCi0JdTMyIHR4YmNuZnJtOwkvKiBiZWFjb25zIHRyYW5zbWl0dGVkICovCi0JdTMyIHR4ZnVuZmxbOF07CS8qIHBlci1maWZvIHR4IHVuZGVyZmxvd3MgKi8KLQl1MzIgdHh0cGx1bmZsOwkvKiBUZW1wbGF0ZSB1bmRlcmZsb3dzIChtYWMgd2FzIHRvbyBzbG93IHRvIHRyYW5zbWl0IEFDSy9DVFMKLQkJCQkgKiBvciBCQ04pCi0JCQkJICovCi0JdTMyIHR4cGh5ZXJyb3I7CS8qIFRyYW5zbWl0IHBoeSBlcnJvciwgdHlwZSBvZiBlcnJvciBpcyByZXBvcnRlZCBpbiB0eC1zdGF0dXMgZm9yCi0JCQkJICogZHJpdmVyIGVucXVldWVkIGZyYW1lcwotCQkJCSAqLwotCXUzMiByeGZybXRvb2xvbmc7CS8qIFJlY2VpdmVkIGZyYW1lIGxvbmdlciB0aGFuIGxlZ2FsIGxpbWl0ICgyMzQ2IGJ5dGVzKSAqLwotCXUzMiByeGZybXRvb3NocnQ7CS8qIFJlY2VpdmVkIGZyYW1lIGRpZCBub3QgY29udGFpbiBlbm91Z2ggYnl0ZXMgZm9yIGl0cyBmcmFtZSB0eXBlICovCi0JdTMyIHJ4aW52bWFjaGRyOwkvKiBFaXRoZXIgdGhlIHByb3RvY29sIHZlcnNpb24gIT0gMCBvciBmcmFtZSB0eXBlIG5vdAotCQkJCSAqIGRhdGEvY29udHJvbC9tYW5hZ2VtZW50Ci0JCQkJICovCi0JdTMyIHJ4YmFkZmNzOwkvKiBudW1iZXIgb2YgZnJhbWVzIGZvciB3aGljaCB0aGUgQ1JDIGNoZWNrIGZhaWxlZCBpbiB0aGUgTUFDICovCi0JdTMyIHJ4YmFkcGxjcDsJLyogcGFyaXR5IGNoZWNrIG9mIHRoZSBQTENQIGhlYWRlciBmYWlsZWQgKi8KLQl1MzIgcnhjcnNnbGl0Y2g7CS8qIFBIWSB3YXMgYWJsZSB0byBjb3JyZWxhdGUgdGhlIHByZWFtYmxlIGJ1dCBub3QgdGhlIGhlYWRlciAqLwotCXUzMiByeHN0cnQ7CQkvKiBOdW1iZXIgb2YgcmVjZWl2ZWQgZnJhbWVzIHdpdGggYSBnb29kIFBMQ1AKLQkJCQkgKiAoaS5lLiBwYXNzaW5nIHBhcml0eSBjaGVjaykKLQkJCQkgKi8KLQl1MzIgcnhkZnJtdWNhc3RtYnNzOwkvKiBOdW1iZXIgb2YgcmVjZWl2ZWQgREFUQSBmcmFtZXMgd2l0aCBnb29kIEZDUyBhbmQgbWF0Y2hpbmcgUkEgKi8KLQl1MzIgcnhtZnJtdWNhc3RtYnNzOwkvKiBudW1iZXIgb2YgcmVjZWl2ZWQgbWdtdCBmcmFtZXMgd2l0aCBnb29kIEZDUyBhbmQgbWF0Y2hpbmcgUkEgKi8KLQl1MzIgcnhjZnJtdWNhc3Q7CS8qIG51bWJlciBvZiByZWNlaXZlZCBDTlRSTCBmcmFtZXMgd2l0aCBnb29kIEZDUyBhbmQgbWF0Y2hpbmcgUkEgKi8KLQl1MzIgcnhydHN1Y2FzdDsJLyogbnVtYmVyIG9mIHVuaWNhc3QgUlRTIGFkZHJlc3NlZCB0byB0aGUgTUFDIChnb29kIEZDUykgKi8KLQl1MzIgcnhjdHN1Y2FzdDsJLyogbnVtYmVyIG9mIHVuaWNhc3QgQ1RTIGFkZHJlc3NlZCB0byB0aGUgTUFDIChnb29kIEZDUykgKi8KLQl1MzIgcnhhY2t1Y2FzdDsJLyogbnVtYmVyIG9mIHVjYXN0IEFDS1MgcmVjZWl2ZWQgKGdvb2QgRkNTKSAqLwotCXUzMiByeGRmcm1vY2FzdDsJLyogbnVtYmVyIG9mIHJlY2VpdmVkIERBVEEgZnJhbWVzIChnb29kIEZDUyBhbmQgbm90IG1hdGNoaW5nIFJBKSAqLwotCXUzMiByeG1mcm1vY2FzdDsJLyogbnVtYmVyIG9mIHJlY2VpdmVkIE1HTVQgZnJhbWVzIChnb29kIEZDUyBhbmQgbm90IG1hdGNoaW5nIFJBKSAqLwotCXUzMiByeGNmcm1vY2FzdDsJLyogbnVtYmVyIG9mIHJlY2VpdmVkIENOVFJMIGZyYW1lIChnb29kIEZDUyBhbmQgbm90IG1hdGNoaW5nIFJBKSAqLwotCXUzMiByeHJ0c29jYXN0OwkvKiBudW1iZXIgb2YgcmVjZWl2ZWQgUlRTIG5vdCBhZGRyZXNzZWQgdG8gdGhlIE1BQyAqLwotCXUzMiByeGN0c29jYXN0OwkvKiBudW1iZXIgb2YgcmVjZWl2ZWQgQ1RTIG5vdCBhZGRyZXNzZWQgdG8gdGhlIE1BQyAqLwotCXUzMiByeGRmcm1tY2FzdDsJLyogbnVtYmVyIG9mIFJYIERhdGEgbXVsdGljYXN0IGZyYW1lcyByZWNlaXZlZCBieSB0aGUgTUFDICovCi0JdTMyIHJ4bWZybW1jYXN0OwkvKiBudW1iZXIgb2YgUlggTWFuYWdlbWVudCBtdWx0aWNhc3QgZnJhbWVzIHJlY2VpdmVkIGJ5IHRoZSBNQUMgKi8KLQl1MzIgcnhjZnJtbWNhc3Q7CS8qIG51bWJlciBvZiBSWCBDb250cm9sIG11bHRpY2FzdCBmcmFtZXMgcmVjZWl2ZWQgYnkgdGhlIE1BQwotCQkJCSAqICh1bmxpa2VseSB0byBzZWUgdGhlc2UpCi0JCQkJICovCi0JdTMyIHJ4YmVhY29ubWJzczsJLyogYmVhY29ucyByZWNlaXZlZCBmcm9tIG1lbWJlciBvZiBCU1MgKi8KLQl1MzIgcnhkZnJtdWNhc3RvYnNzOwkvKiBudW1iZXIgb2YgdW5pY2FzdCBmcmFtZXMgYWRkcmVzc2VkIHRvIHRoZSBNQUMgZnJvbQotCQkJCSAqIG90aGVyIEJTUyAoV0RTIEZSQU1FKQotCQkJCSAqLwotCXUzMiByeGJlYWNvbm9ic3M7CS8qIGJlYWNvbnMgcmVjZWl2ZWQgZnJvbSBvdGhlciBCU1MgKi8KLQl1MzIgcnhyc3B0bW91dDsJLyogTnVtYmVyIG9mIHJlc3BvbnNlIHRpbWVvdXRzIGZvciB0cmFuc21pdHRlZCBmcmFtZXMKLQkJCQkgKiBleHBlY3RpbmcgYSByZXNwb25zZQotCQkJCSAqLwotCXUzMiBiY250eGNhbmNsOwkvKiB0cmFuc21pdCBiZWFjb25zIGNhbmNlbGVkIGR1ZSB0byByZWNlaXB0IG9mIGJlYWNvbiAoSUJTUykgKi8KLQl1MzIgcnhmMG92Zmw7CS8qIE51bWJlciBvZiByZWNlaXZlIGZpZm8gMCBvdmVyZmxvd3MgKi8KLQl1MzIgcnhmMW92Zmw7CS8qIE51bWJlciBvZiByZWNlaXZlIGZpZm8gMSBvdmVyZmxvd3MgKG9ic29sZXRlKSAqLwotCXUzMiByeGYyb3ZmbDsJLyogTnVtYmVyIG9mIHJlY2VpdmUgZmlmbyAyIG92ZXJmbG93cyAob2Jzb2xldGUpICovCi0JdTMyIHR4c2ZvdmZsOwkvKiBOdW1iZXIgb2YgdHJhbnNtaXQgc3RhdHVzIGZpZm8gb3ZlcmZsb3dzIChvYnNvbGV0ZSkgKi8KLQl1MzIgcG1xb3ZmbDsJCS8qIE51bWJlciBvZiBQTVEgb3ZlcmZsb3dzICovCi0JdTMyIHJ4Y2dwcnFmcm07CS8qIE51bWJlciBvZiByZWNlaXZlZCBQcm9iZSByZXF1ZXN0cyB0aGF0IG1hZGUgaXQgaW50bwotCQkJCSAqIHRoZSBQUlEgZmlmbwotCQkJCSAqLwotCXUzMiByeGNncHJzcW92Zmw7CS8qIFJ4IFByb2JlIFJlcXVlc3QgUXVlIG92ZXJmbG93IGluIHRoZSBBUCAqLwotCXUzMiB0eGNncHJzZmFpbDsJLyogVHggUHJvYmUgUmVzcG9uc2UgRmFpbC4gQVAgc2VudCBwcm9iZSByZXNwb25zZSBidXQgZGlkCi0JCQkJICogbm90IGdldCBBQ0sKLQkJCQkgKi8KLQl1MzIgdHhjZ3Byc3N1YzsJLyogVHggUHJvYmUgUmVzcG9uc2UgU3VjY2VzcyAoQUNLIHdhcyByZWNlaXZlZCkgKi8KLQl1MzIgcHJzX3RpbWVvdXQ7CS8qIE51bWJlciBvZiBwcm9iZSByZXF1ZXN0cyB0aGF0IHdlcmUgZHJvcHBlZCBmcm9tIHRoZSBQUlEKLQkJCQkgKiBmaWZvIGJlY2F1c2UgYSBwcm9iZSByZXNwb25zZSBjb3VsZCBub3QgYmUgc2VudCBvdXQgd2l0aGluCi0JCQkJICogdGhlIHRpbWUgbGltaXQgZGVmaW5lZCBpbiBNX1BSU19NQVhUSU1FCi0JCQkJICovCi0JdTMyIHJ4bmFjazsKLQl1MzIgZnJtc2NvbnM7Ci0JdTMyIHR4bmFjazsKLQl1MzIgdHhnbGl0Y2hfbmFjazsJLyogb2Jzb2xldGUgKi8KLQl1MzIgdHhidXJzdDsJCS8qIG9ic29sZXRlICovCi0KLQkvKiA4MDIuMTEgTUlCIGNvdW50ZXJzLCBwcC4gNjE0IG9mIDgwMi4xMSByZWFmZiBkb2MuICovCi0JdTMyIHR4ZnJhZzsJCS8qIGRvdDExVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50ICovCi0JdTMyIHR4bXVsdGk7CQkvKiBkb3QxMU11bHRpY2FzdFRyYW5zbWl0dGVkRnJhbWVDb3VudCAqLwotCXUzMiB0eGZhaWw7CQkvKiBkb3QxMUZhaWxlZENvdW50ICovCi0JdTMyIHR4cmV0cnk7CQkvKiBkb3QxMVJldHJ5Q291bnQgKi8KLQl1MzIgdHhyZXRyaWU7CS8qIGRvdDExTXVsdGlwbGVSZXRyeUNvdW50ICovCi0JdTMyIHJ4ZHVwOwkJLyogZG90MTFGcmFtZWR1cGxpY2F0ZUNvdW50ICovCi0JdTMyIHR4cnRzOwkJLyogZG90MTFSVFNTdWNjZXNzQ291bnQgKi8KLQl1MzIgdHhub2N0czsJCS8qIGRvdDExUlRTRmFpbHVyZUNvdW50ICovCi0JdTMyIHR4bm9hY2s7CQkvKiBkb3QxMUFDS0ZhaWx1cmVDb3VudCAqLwotCXUzMiByeGZyYWc7CQkvKiBkb3QxMVJlY2VpdmVkRnJhZ21lbnRDb3VudCAqLwotCXUzMiByeG11bHRpOwkJLyogZG90MTFNdWx0aWNhc3RSZWNlaXZlZEZyYW1lQ291bnQgKi8KLQl1MzIgcnhjcmM7CQkvKiBkb3QxMUZDU0Vycm9yQ291bnQgKi8KLQl1MzIgdHhmcm1zbnQ7CS8qIGRvdDExVHJhbnNtaXR0ZWRGcmFtZUNvdW50IChib2d1cyBNSUI/KSAqLwotCXUzMiByeHVuZGVjOwkJLyogZG90MTFXRVBVbmRlY3J5cHRhYmxlQ291bnQgKi8KLQotCS8qIFdQQTIgY291bnRlcnMgKHNlZSByeHVuZGVjIGZvciBEZWNyeXB0RmFpbHVyZUNvdW50KSAqLwotCXUzMiB0a2lwbWljZmFpbGw7CS8qIFRLSVBMb2NhbE1JQ0ZhaWx1cmVzICovCi0JdTMyIHRraXBjbnRybXNyOwkvKiBUS0lQQ291bnRlck1lYXN1cmVzSW52b2tlZCAqLwotCXUzMiB0a2lwcmVwbGF5OwkvKiBUS0lQUmVwbGF5cyAqLwotCXUzMiBjY21wZm10ZXJyOwkvKiBDQ01QRm9ybWF0RXJyb3JzICovCi0JdTMyIGNjbXByZXBsYXk7CS8qIENDTVBSZXBsYXlzICovCi0JdTMyIGNjbXB1bmRlYzsJLyogQ0NNUERlY3J5cHRFcnJvcnMgKi8KLQl1MzIgZm91cndheWZhaWw7CS8qIEZvdXJXYXlIYW5kc2hha2VGYWlsdXJlcyAqLwotCXUzMiB3ZXB1bmRlYzsJLyogZG90MTFXRVBVbmRlY3J5cHRhYmxlQ291bnQgKi8KLQl1MzIgd2VwaWN2ZXJyOwkvKiBkb3QxMVdFUElDVkVycm9yQ291bnQgKi8KLQl1MzIgZGVjc3VjY2VzczsJLyogRGVjcnlwdFN1Y2Nlc3NDb3VudCAqLwotCXUzMiB0a2lwaWN2ZXJyOwkvKiBUS0lQSUNWRXJyb3JDb3VudCAqLwotCXUzMiB3ZXBleGNsdWRlZDsJLyogZG90MTFXRVBFeGNsdWRlZENvdW50ICovCi0KLQl1MzIgcnh1bmRlY19tY3N0OwkvKiBkb3QxMVdFUFVuZGVjcnlwdGFibGVDb3VudCAqLwotCi0JLyogV1BBMiBjb3VudGVycyAoc2VlIHJ4dW5kZWMgZm9yIERlY3J5cHRGYWlsdXJlQ291bnQpICovCi0JdTMyIHRraXBtaWNmYWlsbF9tY3N0OwkvKiBUS0lQTG9jYWxNSUNGYWlsdXJlcyAqLwotCXUzMiB0a2lwY250cm1zcl9tY3N0OwkvKiBUS0lQQ291bnRlck1lYXN1cmVzSW52b2tlZCAqLwotCXUzMiB0a2lwcmVwbGF5X21jc3Q7CS8qIFRLSVBSZXBsYXlzICovCi0JdTMyIGNjbXBmbXRlcnJfbWNzdDsJLyogQ0NNUEZvcm1hdEVycm9ycyAqLwotCXUzMiBjY21wcmVwbGF5X21jc3Q7CS8qIENDTVBSZXBsYXlzICovCi0JdTMyIGNjbXB1bmRlY19tY3N0OwkvKiBDQ01QRGVjcnlwdEVycm9ycyAqLwotCXUzMiBmb3Vyd2F5ZmFpbF9tY3N0OwkvKiBGb3VyV2F5SGFuZHNoYWtlRmFpbHVyZXMgKi8KLQl1MzIgd2VwdW5kZWNfbWNzdDsJLyogZG90MTFXRVBVbmRlY3J5cHRhYmxlQ291bnQgKi8KLQl1MzIgd2VwaWN2ZXJyX21jc3Q7CS8qIGRvdDExV0VQSUNWRXJyb3JDb3VudCAqLwotCXUzMiBkZWNzdWNjZXNzX21jc3Q7CS8qIERlY3J5cHRTdWNjZXNzQ291bnQgKi8KLQl1MzIgdGtpcGljdmVycl9tY3N0OwkvKiBUS0lQSUNWRXJyb3JDb3VudCAqLwotCXUzMiB3ZXBleGNsdWRlZF9tY3N0OwkvKiBkb3QxMVdFUEV4Y2x1ZGVkQ291bnQgKi8KLQotCXUzMiB0eGNoYW5yZWo7CS8qIFR4IGZyYW1lcyBzdXBwcmVzc2VkIGR1ZSB0byBjaGFubmVsIHJlamVjdGlvbiAqLwotCXUzMiB0eGV4cHRpbWU7CS8qIFR4IGZyYW1lcyBzdXBwcmVzc2VkIGR1ZSB0byB0aW1lciBleHBpcmF0aW9uICovCi0JdTMyIHBzbXdkczsJCS8qIENvdW50IFBTTSB3YXRjaGRvZ3MgKi8KLQl1MzIgcGh5d2F0Y2hkb2c7CS8qIENvdW50IFBoeSB3YXRjaGRvZ3MgKHRyaWdnZXJlZCBieSB1Y29kZSkgKi8KLQotCS8qIE1CU1MgY291bnRlcnMsIEFQIG9ubHkgKi8KLQl1MzIgcHJxX2VudHJpZXNfaGFuZGxlZDsJLyogUFJRIGVudHJpZXMgcmVhZCBpbiAqLwotCXUzMiBwcnFfdW5kaXJlY3RlZF9lbnRyaWVzOwkvKiAgICB3aGljaCB3ZXJlIGJjYXN0IGJzcyAmIHNzaWQgKi8KLQl1MzIgcHJxX2JhZF9lbnRyaWVzOwkvKiAgICB3aGljaCBjb3VsZCBub3QgYmUgdHJhbnNsYXRlZCB0byBpbmZvICovCi0JdTMyIGF0aW1fc3VwcHJlc3NfY291bnQ7CS8qIFRYIHN1cHByZXNzaW9ucyBvbiBBVElNIGZpZm8gKi8KLQl1MzIgYmNuX3RlbXBsYXRlX25vdF9yZWFkeTsJLyogVGVtcGxhdGUgbWFya2VkIGluIHVzZSBvbiBzZW5kIGJjbiAuLi4gKi8KLQl1MzIgYmNuX3RlbXBsYXRlX25vdF9yZWFkeV9kb25lOwkvKiAuLi5idXQgIkRNQSBkb25lIiBpbnRlcnJ1cHQgcmN2ZCAqLwotCXUzMiBsYXRlX3RidHRfZHBjOwkvKiBUQlRUIERQQyBkaWQgbm90IGhhcHBlbiBpbiB0aW1lICovCi0KLQkvKiBwZXItcmF0ZSByZWNlaXZlIHN0YXQgY291bnRlcnMgKi8KLQl1MzIgcngxbWJwczsJCS8qIHBhY2tldHMgcnggYXQgMU1icHMgKi8KLQl1MzIgcngybWJwczsJCS8qIHBhY2tldHMgcnggYXQgMk1icHMgKi8KLQl1MzIgcng1bWJwczU7CS8qIHBhY2tldHMgcnggYXQgNS41TWJwcyAqLwotCXUzMiByeDZtYnBzOwkJLyogcGFja2V0cyByeCBhdCA2TWJwcyAqLwotCXUzMiByeDltYnBzOwkJLyogcGFja2V0cyByeCBhdCA5TWJwcyAqLwotCXUzMiByeDExbWJwczsJLyogcGFja2V0cyByeCBhdCAxMU1icHMgKi8KLQl1MzIgcngxMm1icHM7CS8qIHBhY2tldHMgcnggYXQgMTJNYnBzICovCi0JdTMyIHJ4MThtYnBzOwkvKiBwYWNrZXRzIHJ4IGF0IDE4TWJwcyAqLwotCXUzMiByeDI0bWJwczsJLyogcGFja2V0cyByeCBhdCAyNE1icHMgKi8KLQl1MzIgcngzNm1icHM7CS8qIHBhY2tldHMgcnggYXQgMzZNYnBzICovCi0JdTMyIHJ4NDhtYnBzOwkvKiBwYWNrZXRzIHJ4IGF0IDQ4TWJwcyAqLwotCXUzMiByeDU0bWJwczsJLyogcGFja2V0cyByeCBhdCA1NE1icHMgKi8KLQl1MzIgcngxMDhtYnBzOwkvKiBwYWNrZXRzIHJ4IGF0IDEwOG1icHMgKi8KLQl1MzIgcngxNjJtYnBzOwkvKiBwYWNrZXRzIHJ4IGF0IDE2Mm1icHMgKi8KLQl1MzIgcngyMTZtYnBzOwkvKiBwYWNrZXRzIHJ4IGF0IDIxNiBtYnBzICovCi0JdTMyIHJ4MjcwbWJwczsJLyogcGFja2V0cyByeCBhdCAyNzAgbWJwcyAqLwotCXUzMiByeDMyNG1icHM7CS8qIHBhY2tldHMgcnggYXQgMzI0IG1icHMgKi8KLQl1MzIgcngzNzhtYnBzOwkvKiBwYWNrZXRzIHJ4IGF0IDM3OCBtYnBzICovCi0JdTMyIHJ4NDMybWJwczsJLyogcGFja2V0cyByeCBhdCA0MzIgbWJwcyAqLwotCXUzMiByeDQ4Nm1icHM7CS8qIHBhY2tldHMgcnggYXQgNDg2IG1icHMgKi8KLQl1MzIgcng1NDBtYnBzOwkvKiBwYWNrZXRzIHJ4IGF0IDU0MCBtYnBzICovCi0KLQkvKiBwa3RlbmcgcnggZnJhbWUgc3RhdHMgKi8KLQl1MzIgcGt0ZW5ncnhkdWNhc3Q7CS8qIHVuaWNhc3QgZnJhbWVzIHJ4ZWQgYnkgdGhlIHBrdGVuZyBjb2RlICovCi0JdTMyIHBrdGVuZ3J4ZG1jYXN0OwkvKiBtdWx0aWNhc3QgZnJhbWVzIHJ4ZWQgYnkgdGhlIHBrdGVuZyBjb2RlICovCi0KLQl1MzIgcmZkaXNhYmxlOwkvKiBjb3VudCBvZiByYWRpbyBkaXNhYmxlcyAqLwotCXUzMiBicGh5X3J4Y3JzZ2xpdGNoOwkvKiBQSFkgY291bnQgb2YgYnBoeSBnbGl0Y2hlcyAqLwotCi0JdTMyIHR4bXBkdV9zZ2k7CS8qIGNvdW50IGZvciBzZ2kgdHJhbnNtaXQgKi8KLQl1MzIgcnhtcGR1X3NnaTsJLyogY291bnQgZm9yIHNnaSByZWNlaXZlZCAqLwotCXUzMiB0eG1wZHVfc3RiYzsJLyogY291bnQgZm9yIHN0YmMgdHJhbnNtaXQgKi8KLQl1MzIgcnhtcGR1X3N0YmM7CS8qIGNvdW50IGZvciBzdGJjIHJlY2VpdmVkICovCi19OwotCi0jZGVmaW5lCVdMX0RFTFRBX1NUQVRTX1RfVkVSU0lPTgkxCS8qIGN1cnJlbnQgdmVyc2lvbiBvZiB3bF9kZWx0YV9zdGF0c190IHN0cnVjdCAqLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdTE2IHZlcnNpb247CQkvKiBzZWUgZGVmaW5pdGlvbiBvZiBXTF9ERUxUQV9TVEFUU19UX1ZFUlNJT04gKi8KLQl1MTYgbGVuZ3RoOwkJLyogbGVuZ3RoIG9mIGVudGlyZSBzdHJ1Y3R1cmUgKi8KLQotCS8qIHRyYW5zbWl0IHN0YXQgY291bnRlcnMgKi8KLQl1MzIgdHhmcmFtZTsJCS8qIHR4IGRhdGEgZnJhbWVzICovCi0JdTMyIHR4Ynl0ZTsJCS8qIHR4IGRhdGEgYnl0ZXMgKi8KLQl1MzIgdHhyZXRyYW5zOwkvKiB0eCBtYWMgcmV0cmFuc21pdHMgKi8KLQl1MzIgdHhmYWlsOwkJLyogdHggZmFpbHVyZXMgKi8KLQotCS8qIHJlY2VpdmUgc3RhdCBjb3VudGVycyAqLwotCXUzMiByeGZyYW1lOwkJLyogcnggZGF0YSBmcmFtZXMgKi8KLQl1MzIgcnhieXRlOwkJLyogcnggZGF0YSBieXRlcyAqLwotCi0JLyogcGVyLXJhdGUgcmVjZWl2ZSBzdGF0IGNvdW50ZXJzICovCi0JdTMyIHJ4MW1icHM7CQkvKiBwYWNrZXRzIHJ4IGF0IDFNYnBzICovCi0JdTMyIHJ4Mm1icHM7CQkvKiBwYWNrZXRzIHJ4IGF0IDJNYnBzICovCi0JdTMyIHJ4NW1icHM1OwkvKiBwYWNrZXRzIHJ4IGF0IDUuNU1icHMgKi8KLQl1MzIgcng2bWJwczsJCS8qIHBhY2tldHMgcnggYXQgNk1icHMgKi8KLQl1MzIgcng5bWJwczsJCS8qIHBhY2tldHMgcnggYXQgOU1icHMgKi8KLQl1MzIgcngxMW1icHM7CS8qIHBhY2tldHMgcnggYXQgMTFNYnBzICovCi0JdTMyIHJ4MTJtYnBzOwkvKiBwYWNrZXRzIHJ4IGF0IDEyTWJwcyAqLwotCXUzMiByeDE4bWJwczsJLyogcGFja2V0cyByeCBhdCAxOE1icHMgKi8KLQl1MzIgcngyNG1icHM7CS8qIHBhY2tldHMgcnggYXQgMjRNYnBzICovCi0JdTMyIHJ4MzZtYnBzOwkvKiBwYWNrZXRzIHJ4IGF0IDM2TWJwcyAqLwotCXUzMiByeDQ4bWJwczsJLyogcGFja2V0cyByeCBhdCA0OE1icHMgKi8KLQl1MzIgcng1NG1icHM7CS8qIHBhY2tldHMgcnggYXQgNTRNYnBzICovCi0JdTMyIHJ4MTA4bWJwczsJLyogcGFja2V0cyByeCBhdCAxMDhtYnBzICovCi0JdTMyIHJ4MTYybWJwczsJLyogcGFja2V0cyByeCBhdCAxNjJtYnBzICovCi0JdTMyIHJ4MjE2bWJwczsJLyogcGFja2V0cyByeCBhdCAyMTYgbWJwcyAqLwotCXUzMiByeDI3MG1icHM7CS8qIHBhY2tldHMgcnggYXQgMjcwIG1icHMgKi8KLQl1MzIgcngzMjRtYnBzOwkvKiBwYWNrZXRzIHJ4IGF0IDMyNCBtYnBzICovCi0JdTMyIHJ4Mzc4bWJwczsJLyogcGFja2V0cyByeCBhdCAzNzggbWJwcyAqLwotCXUzMiByeDQzMm1icHM7CS8qIHBhY2tldHMgcnggYXQgNDMyIG1icHMgKi8KLQl1MzIgcng0ODZtYnBzOwkvKiBwYWNrZXRzIHJ4IGF0IDQ4NiBtYnBzICovCi0JdTMyIHJ4NTQwbWJwczsJLyogcGFja2V0cyByeCBhdCA1NDAgbWJwcyAqLwotfSB3bF9kZWx0YV9zdGF0c190OwotCi0jZGVmaW5lIFdMX1dNRV9DTlRfVkVSU0lPTgkxCS8qIGN1cnJlbnQgdmVyc2lvbiBvZiB3bF93bWVfY250X3QgKi8KLQotdHlwZWRlZiBzdHJ1Y3QgewotCXUzMiBwYWNrZXRzOwotCXUzMiBieXRlczsKLX0gd2xfdHJhZmZpY19zdGF0c190OwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdTE2IHZlcnNpb247CQkvKiBzZWUgZGVmaW5pdGlvbiBvZiBXTF9XTUVfQ05UX1ZFUlNJT04gKi8KLQl1MTYgbGVuZ3RoOwkJLyogbGVuZ3RoIG9mIGVudGlyZSBzdHJ1Y3R1cmUgKi8KLQotCXdsX3RyYWZmaWNfc3RhdHNfdCB0eFtBQ19DT1VOVF07CS8qIFBhY2tldHMgdHJhbnNtaXR0ZWQgKi8KLQl3bF90cmFmZmljX3N0YXRzX3QgdHhfZmFpbGVkW0FDX0NPVU5UXTsJLyogUGFja2V0cyBkcm9wcGVkIG9yIGZhaWxlZCB0byB0cmFuc21pdCAqLwotCXdsX3RyYWZmaWNfc3RhdHNfdCByeFtBQ19DT1VOVF07CS8qIFBhY2tldHMgcmVjZWl2ZWQgKi8KLQl3bF90cmFmZmljX3N0YXRzX3QgcnhfZmFpbGVkW0FDX0NPVU5UXTsJLyogUGFja2V0cyBmYWlsZWQgdG8gcmVjZWl2ZSAqLwotCi0Jd2xfdHJhZmZpY19zdGF0c190IGZvcndhcmRbQUNfQ09VTlRdOwkvKiBQYWNrZXRzIGZvcndhcmRlZCBieSBBUCAqLwotCi0Jd2xfdHJhZmZpY19zdGF0c190IHR4X2V4cGlyZWRbQUNfQ09VTlRdOwkvKiBwYWNrZXRzIGRyb3BwZWQgZHVlIHRvIGxpZmV0aW1lIGV4cGlyeSAqLwotCi19IHdsX3dtZV9jbnRfdDsKLQogc3RydWN0IHdsX21zZ2xldmVsMiB7CiAJdTMyIGxvdzsKIAl1MzIgaGlnaDsKIH07CiAKLSNpZmRlZiBXTEJBCi0KLSNkZWZpbmUJV0xDX0JBX0NOVF9WRVJTSU9OCTEJLyogY3VycmVudCB2ZXJzaW9uIG9mIHdsY19iYV9jbnRfdCAqLwotCi0vKiBibG9jayBhY2sgcmVsYXRlZCBzdGF0cyAqLwotdHlwZWRlZiBzdHJ1Y3Qgd2xjX2JhX2NudCB7Ci0JdTE2IHZlcnNpb247CQkvKiBXTENfQkFfQ05UX1ZFUlNJT04gKi8KLQl1MTYgbGVuZ3RoOwkJLyogbGVuZ3RoIG9mIGVudGlyZSBzdHJ1Y3R1cmUgKi8KLQotCS8qIHRyYW5zbWl0IHN0YXQgY291bnRlcnMgKi8KLQl1MzIgdHhwZHU7CQkvKiBwZHVzIHNlbnQgKi8KLQl1MzIgdHhzZHU7CQkvKiBzZHVzIHNlbnQgKi8KLQl1MzIgdHhmYzsJCS8qIHR4IHNpZGUgZmxvdyBjb250cm9sbGVkIHBhY2tldHMgKi8KLQl1MzIgdHhmY2k7CQkvKiB0eCBzaWRlIGZsb3cgY29udHJvbCBpbml0aWF0ZWQgKi8KLQl1MzIgdHhyZXRyYW5zOwkvKiByZXRyYW5zbWl0dGVkIHBkdXMgKi8KLQl1MzIgdHhiYXRpbWVyOwkvKiBiYSByZXNlbmQgZHVlIHRvIHRpbWVyICovCi0JdTMyIHR4ZHJvcDsJCS8qIGRyb3BwZWQgcGFja2V0cyAqLwotCXUzMiB0eGFkZGJhcmVxOwkvKiBhZGRiYSByZXEgc2VudCAqLwotCXUzMiB0eGFkZGJhcmVzcDsJLyogYWRkYmEgcmVzcCBzZW50ICovCi0JdTMyIHR4ZGVsYmE7CQkvKiBkZWxiYSBzZW50ICovCi0JdTMyIHR4YmE7CQkvKiBiYSBzZW50ICovCi0JdTMyIHR4YmFyOwkJLyogYmFyIHNlbnQgKi8KLQl1MzIgdHhwYWRbNF07CS8qIGZ1dHVyZSAqLwotCi0JLyogcmVjZWl2ZSBzaWRlIGNvdW50ZXJzICovCi0JdTMyIHJ4cGR1OwkJLyogcGR1cyByZWNkICovCi0JdTMyIHJ4cWVkOwkJLyogcGR1cyBidWZmZXJlZCBiZWZvcmUgc2VuZGluZyB1cCAqLwotCXUzMiByeGR1cDsJCS8qIGR1cGxpY2F0ZSBwZHVzICovCi0JdTMyIHJ4bm9idWY7CQkvKiBwZHVzIGRpc2NhcmRlZCBkdWUgdG8gbm8gYnVmICovCi0JdTMyIHJ4YWRkYmFyZXE7CS8qIGFkZGJhIHJlcSByZWNkICovCi0JdTMyIHJ4YWRkYmFyZXNwOwkvKiBhZGRiYSByZXNwIHJlY2QgKi8KLQl1MzIgcnhkZWxiYTsJCS8qIGRlbGJhIHJlY2QgKi8KLQl1MzIgcnhiYTsJCS8qIGJhIHJlY2QgKi8KLQl1MzIgcnhiYXI7CQkvKiBiYXIgcmVjZCAqLwotCXUzMiByeGludmJhOwkJLyogaW52YWxpZCBiYSByZWNkICovCi0JdTMyIHJ4YmFob2xlczsJLyogYmEgcmVjZCB3aXRoIGhvbGVzICovCi0JdTMyIHJ4dW5leHA7CQkvKiB1bmV4cGVjdGVkIHBhY2tldHMgKi8KLQl1MzIgcnhwYWRbNF07CS8qIGZ1dHVyZSAqLwotfSB3bGNfYmFfY250X3Q7Ci0jZW5kaWYJCQkJLyogV0xCQSAqLwotCiAvKiBzdHJ1Y3R1cmUgZm9yIHBlci10aWQgYW1wZHUgY29udHJvbCAqLwogc3RydWN0IGFtcGR1X3RpZF9jb250cm9sIHsKIAl1OCB0aWQ7CQkvKiB0aWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWIzNmNhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS91dGlsL01ha2VmaWxlCkBAIC0wLDAgKzEsMjkgQEAKKyMKKyMgTWFrZWZpbGUgZnJhZ21lbnQgZm9yIEJyb2FkY29tIDgwMi4xMW4gTmV0d29ya2luZyBEZXZpY2UgRHJpdmVyIFV0aWxpdGllcworIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgQnJvYWRjb20gQ29ycG9yYXRpb24KKyMKKyMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisjIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisjIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZCisjIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworIyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisjIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4KKyMgQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworY2NmbGFncy15IDo9CQkJCVwKKwktSWRyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbCBcCisJLUlkcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2luY2x1ZGUKKworQlJDTVVUSUxfT0ZJTEVTIDo9IFwKKwliY211dGlscy5vIFwKKwliY213aWZpLm8KKworTU9EVUxFUEZYIDo9IGJyY211dGlsCisKK29iai0kKENPTkZJR19CUkNNVVRJTCkJKz0gJChNT0RVTEVQRlgpLm8KKyQoTU9EVUxFUEZYKS1vYmpzCT0gJChCUkNNVVRJTF9PRklMRVMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvYWl1dGlscy5jIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS91dGlsL2FpdXRpbHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTcwODY5MC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvYWl1dGlscy5jCisrKyAvZGV2L251bGwKQEAgLTEsNzA1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgQnJvYWRjb20gQ29ycG9yYXRpb24KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkKLSAqIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTgotICogT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTgotICogQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxiY21kZWZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8YmNtdXRpbHMuaD4KLSNpbmNsdWRlIDxzaXV0aWxzLmg+Ci0jaW5jbHVkZSA8aG5kc29jLmg+Ci0jaW5jbHVkZSA8c2JjaGlwYy5oPgotI2luY2x1ZGUgPHBjaWNmZy5oPgotI2luY2x1ZGUgPGJjbWRldnMuaD4KLQotI2RlZmluZSBCQ000NzE2Ml9ETVAoKSAoKHNpaC0+Y2hpcCA9PSBCQ000NzE2Ml9DSElQX0lEKSAmJiBcCi0JCShzaWgtPmNoaXByZXYgPT0gMCkgJiYgXAotCQkoc2lpLT5jb3JlaWRbc2lpLT5jdXJpZHhdID09IE1JUFM3NEtfQ09SRV9JRCkpCi0KLS8qIEVST00gcGFyc2luZyAqLwotCi1zdGF0aWMgdTMyCi1nZXRfZXJvbV9lbnQoc2lfdCAqc2loLCB1MzIgKiplcm9tcHRyLCB1MzIgbWFzaywgdTMyIG1hdGNoKQotewotCXUzMiBlbnQ7Ci0JdWludCBpbnYgPSAwLCBub20gPSAwOwotCi0Jd2hpbGUgKHRydWUpIHsKLQkJZW50ID0gUl9SRUcoKmVyb21wdHIpOwotCQkoKmVyb21wdHIpKys7Ci0KLQkJaWYgKG1hc2sgPT0gMCkKLQkJCWJyZWFrOwotCi0JCWlmICgoZW50ICYgRVJfVkFMSUQpID09IDApIHsKLQkJCWludisrOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoZW50ID09IChFUl9FTkQgfCBFUl9WQUxJRCkpCi0JCQlicmVhazsKLQotCQlpZiAoKGVudCAmIG1hc2spID09IG1hdGNoKQotCQkJYnJlYWs7Ci0KLQkJbm9tKys7Ci0JfQotCi0JU0lfVk1TRygoIiVzOiBSZXR1cm5pbmcgZW50IDB4JTA4eFxuIiwgX19mdW5jX18sIGVudCkpOwotCWlmIChpbnYgKyBub20pIHsKLQkJU0lfVk1TRygoIiAgYWZ0ZXIgJWQgaW52YWxpZCBhbmQgJWQgbm9uLW1hdGNoaW5nIGVudHJpZXNcbiIsCi0JCQkgaW52LCBub20pKTsKLQl9Ci0JcmV0dXJuIGVudDsKLX0KLQotc3RhdGljIHUzMgotZ2V0X2FzZChzaV90ICpzaWgsIHUzMiAqKmVyb21wdHIsIHVpbnQgc3AsIHVpbnQgYWQsIHVpbnQgc3QsCi0JdTMyICphZGRybCwgdTMyICphZGRyaCwgdTMyICpzaXplbCwgdTMyICpzaXplaCkKLXsKLQl1MzIgYXNkLCBzeiwgc3pkOwotCi0JYXNkID0gZ2V0X2Vyb21fZW50KHNpaCwgZXJvbXB0ciwgRVJfVkFMSUQsIEVSX1ZBTElEKTsKLQlpZiAoKChhc2QgJiBFUl9UQUcxKSAhPSBFUl9BREQpIHx8Ci0JICAgICgoKGFzZCAmIEFEX1NQX01BU0spID4+IEFEX1NQX1NISUZUKSAhPSBzcCkgfHwKLQkgICAgKChhc2QgJiBBRF9TVF9NQVNLKSAhPSBzdCkpIHsKLQkJLyogVGhpcyBpcyBub3Qgd2hhdCB3ZSB3YW50LCAicHVzaCIgaXQgYmFjayAqLwotCQkoKmVyb21wdHIpLS07Ci0JCXJldHVybiAwOwotCX0KLQkqYWRkcmwgPSBhc2QgJiBBRF9BRERSX01BU0s7Ci0JaWYgKGFzZCAmIEFEX0FHMzIpCi0JCSphZGRyaCA9IGdldF9lcm9tX2VudChzaWgsIGVyb21wdHIsIDAsIDApOwotCWVsc2UKLQkJKmFkZHJoID0gMDsKLQkqc2l6ZWggPSAwOwotCXN6ID0gYXNkICYgQURfU1pfTUFTSzsKLQlpZiAoc3ogPT0gQURfU1pfU1pEKSB7Ci0JCXN6ZCA9IGdldF9lcm9tX2VudChzaWgsIGVyb21wdHIsIDAsIDApOwotCQkqc2l6ZWwgPSBzemQgJiBTRF9TWl9NQVNLOwotCQlpZiAoc3pkICYgU0RfU0czMikKLQkJCSpzaXplaCA9IGdldF9lcm9tX2VudChzaWgsIGVyb21wdHIsIDAsIDApOwotCX0gZWxzZQotCQkqc2l6ZWwgPSBBRF9TWl9CQVNFIDw8IChzeiA+PiBBRF9TWl9TSElGVCk7Ci0KLQlTSV9WTVNHKCgiICBTUCAlZCwgYWQgJWQ6IHN0ID0gJWQsIDB4JTA4eF8weCUwOHggQCAweCUwOHhfMHglMDh4XG4iLAotCQkgc3AsIGFkLCBzdCwgKnNpemVoLCAqc2l6ZWwsICphZGRyaCwgKmFkZHJsKSk7Ci0KLQlyZXR1cm4gYXNkOwotfQotCi1zdGF0aWMgdm9pZCBhaV9od2ZpeHVwKHNpX2luZm9fdCAqc2lpKQotewotfQotCi0vKiBwYXJzZSB0aGUgZW51bWVyYXRpb24gcm9tIHRvIGlkZW50aWZ5IGFsbCBjb3JlcyAqLwotdm9pZCBhaV9zY2FuKHNpX3QgKnNpaCwgdm9pZCAqcmVncywgdWludCBkZXZpZCkKLXsKLQlzaV9pbmZvX3QgKnNpaSA9IFNJX0lORk8oc2loKTsKLQljaGlwY3JlZ3NfdCAqY2MgPSAoY2hpcGNyZWdzX3QgKikgcmVnczsKLQl1MzIgZXJvbWJhc2UsICplcm9tcHRyLCAqZXJvbWxpbTsKLQotCWVyb21iYXNlID0gUl9SRUcoJmNjLT5lcm9tcHRyKTsKLQotCXN3aXRjaCAoc2loLT5idXN0eXBlKSB7Ci0JY2FzZSBTSV9CVVM6Ci0JCWVyb21wdHIgPSAodTMyICopIFJFR19NQVAoZXJvbWJhc2UsIFNJX0NPUkVfU0laRSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBQQ0lfQlVTOgotCQkvKiBTZXQgd3JhcHBlcnMgYWRkcmVzcyAqLwotCQlzaWktPmN1cndyYXAgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZylyZWdzICsgU0lfQ09SRV9TSVpFKTsKLQotCQkvKiBOb3cgcG9pbnQgdGhlIHdpbmRvdyBhdCB0aGUgZXJvbSAqLwotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHNpaS0+cGJ1cywgUENJX0JBUjBfV0lOLCBlcm9tYmFzZSk7Ci0JCWVyb21wdHIgPSByZWdzOwotCQlicmVhazsKLQotCWNhc2UgU1BJX0JVUzoKLQljYXNlIFNESU9fQlVTOgotCQllcm9tcHRyID0gKHUzMiAqKSh1bnNpZ25lZCBsb25nKWVyb21iYXNlOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCVNJX0VSUk9SKCgiRG9uJ3Qga25vdyBob3cgdG8gZG8gQVhJIGVudW1lcnRpb24gb24gYnVzICVkXG4iLAotCQkJICBzaWgtPmJ1c3R5cGUpKTsKLQkJQVNTRVJUKDApOwotCQlyZXR1cm47Ci0JfQotCWVyb21saW0gPSBlcm9tcHRyICsgKEVSX1JFTUFQQ09OVFJPTCAvIHNpemVvZih1MzIpKTsKLQotCVNJX1ZNU0coKCJhaV9zY2FuOiByZWdzID0gMHglcCwgZXJvbWJhc2UgPSAweCUwOHgsIGVyb21wdHIgPSAweCVwLCBlcm9tbGltID0gMHglcFxuIiwgcmVncywgZXJvbWJhc2UsIGVyb21wdHIsIGVyb21saW0pKTsKLQl3aGlsZSAoZXJvbXB0ciA8IGVyb21saW0pIHsKLQkJdTMyIGNpYSwgY2liLCBjaWQsIG1mZywgY3Jldiwgbm13LCBuc3csIG5tcCwgbnNwOwotCQl1MzIgbXBkLCBhc2QsIGFkZHJsLCBhZGRyaCwgc2l6ZWwsIHNpemVoOwotCQl1MzIgKmJhc2U7Ci0JCXVpbnQgaSwgaiwgaWR4OwotCQlib29sIGJyOwotCi0JCWJyID0gZmFsc2U7Ci0KLQkJLyogR3JvayBhIGNvbXBvbmVudCAqLwotCQljaWEgPSBnZXRfZXJvbV9lbnQoc2loLCAmZXJvbXB0ciwgRVJfVEFHLCBFUl9DSSk7Ci0JCWlmIChjaWEgPT0gKEVSX0VORCB8IEVSX1ZBTElEKSkgewotCQkJU0lfVk1TRygoIkZvdW5kIEVORCBvZiBlcm9tIGFmdGVyICVkIGNvcmVzXG4iLAotCQkJCSBzaWktPm51bWNvcmVzKSk7Ci0JCQlhaV9od2ZpeHVwKHNpaSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJYmFzZSA9IGVyb21wdHIgLSAxOwotCQljaWIgPSBnZXRfZXJvbV9lbnQoc2loLCAmZXJvbXB0ciwgMCwgMCk7Ci0KLQkJaWYgKChjaWIgJiBFUl9UQUcpICE9IEVSX0NJKSB7Ci0JCQlTSV9FUlJPUigoIkNJQSBub3QgZm9sbG93ZWQgYnkgQ0lCXG4iKSk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0KLQkJY2lkID0gKGNpYSAmIENJQV9DSURfTUFTSykgPj4gQ0lBX0NJRF9TSElGVDsKLQkJbWZnID0gKGNpYSAmIENJQV9NRkdfTUFTSykgPj4gQ0lBX01GR19TSElGVDsKLQkJY3JldiA9IChjaWIgJiBDSUJfUkVWX01BU0spID4+IENJQl9SRVZfU0hJRlQ7Ci0JCW5tdyA9IChjaWIgJiBDSUJfTk1XX01BU0spID4+IENJQl9OTVdfU0hJRlQ7Ci0JCW5zdyA9IChjaWIgJiBDSUJfTlNXX01BU0spID4+IENJQl9OU1dfU0hJRlQ7Ci0JCW5tcCA9IChjaWIgJiBDSUJfTk1QX01BU0spID4+IENJQl9OTVBfU0hJRlQ7Ci0JCW5zcCA9IChjaWIgJiBDSUJfTlNQX01BU0spID4+IENJQl9OU1BfU0hJRlQ7Ci0KLQkJU0lfVk1TRygoIkZvdW5kIGNvbXBvbmVudCAweCUwNHgvMHglMDR4IHJldiAlZCBhdCBlcm9tIGFkZHIgMHglcCwgd2l0aCBubXcgPSAlZCwgIiAibnN3ID0gJWQsIG5tcCA9ICVkICYgbnNwID0gJWRcbiIsIG1mZywgY2lkLCBjcmV2LCBiYXNlLCBubXcsIG5zdywgbm1wLCBuc3ApKTsKLQotCQlpZiAoKChtZmcgPT0gTUZHSURfQVJNKSAmJiAoY2lkID09IERFRl9BSV9DT01QKSkgfHwgKG5zcCA9PSAwKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoKG5tdyArIG5zdyA9PSAwKSkgewotCQkJLyogQSBjb21wb25lbnQgd2hpY2ggaXMgbm90IGEgY29yZSAqLwotCQkJaWYgKGNpZCA9PSBPT0JfUk9VVEVSX0NPUkVfSUQpIHsKLQkJCQlhc2QgPSBnZXRfYXNkKHNpaCwgJmVyb21wdHIsIDAsIDAsIEFEX1NUX1NMQVZFLAotCQkJCQkgICAgICAmYWRkcmwsICZhZGRyaCwgJnNpemVsLCAmc2l6ZWgpOwotCQkJCWlmIChhc2QgIT0gMCkgewotCQkJCQlzaWktPm9vYl9yb3V0ZXIgPSBhZGRybDsKLQkJCQl9Ci0JCQl9Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlkeCA9IHNpaS0+bnVtY29yZXM7Ci0vKgkJc2lpLT5lcm9tcHRyW2lkeF0gPSBiYXNlOyAqLwotCQlzaWktPmNpYVtpZHhdID0gY2lhOwotCQlzaWktPmNpYltpZHhdID0gY2liOwotCQlzaWktPmNvcmVpZFtpZHhdID0gY2lkOwotCi0JCWZvciAoaSA9IDA7IGkgPCBubXA7IGkrKykgewotCQkJbXBkID0gZ2V0X2Vyb21fZW50KHNpaCwgJmVyb21wdHIsIEVSX1ZBTElELCBFUl9WQUxJRCk7Ci0JCQlpZiAoKG1wZCAmIEVSX1RBRykgIT0gRVJfTVApIHsKLQkJCQlTSV9FUlJPUigoIk5vdCBlbm91Z2ggTVAgZW50cmllcyBmb3IgY29tcG9uZW50IDB4JXhcbiIsIGNpZCkpOwotCQkJCWdvdG8gZXJyb3I7Ci0JCQl9Ci0JCQlTSV9WTVNHKCgiICBNYXN0ZXIgcG9ydCAlZCwgbXA6ICVkIGlkOiAlZFxuIiwgaSwKLQkJCQkgKG1wZCAmIE1QRF9NUF9NQVNLKSA+PiBNUERfTVBfU0hJRlQsCi0JCQkJIChtcGQgJiBNUERfTVVJX01BU0spID4+IE1QRF9NVUlfU0hJRlQpKTsKLQkJfQotCi0JCS8qIEZpcnN0IFNsYXZlIEFkZHJlc3MgRGVzY3JpcHRvciBzaG91bGQgYmUgcG9ydCAwOgotCQkgKiB0aGUgbWFpbiByZWdpc3RlciBzcGFjZSBmb3IgdGhlIGNvcmUKLQkJICovCi0JCWFzZCA9Ci0JCSAgICBnZXRfYXNkKHNpaCwgJmVyb21wdHIsIDAsIDAsIEFEX1NUX1NMQVZFLCAmYWRkcmwsICZhZGRyaCwKLQkJCSAgICAmc2l6ZWwsICZzaXplaCk7Ci0JCWlmIChhc2QgPT0gMCkgewotCQkJLyogVHJ5IGFnYWluIHRvIHNlZSBpZiBpdCBpcyBhIGJyaWRnZSAqLwotCQkJYXNkID0KLQkJCSAgICBnZXRfYXNkKHNpaCwgJmVyb21wdHIsIDAsIDAsIEFEX1NUX0JSSURHRSwgJmFkZHJsLAotCQkJCSAgICAmYWRkcmgsICZzaXplbCwgJnNpemVoKTsKLQkJCWlmIChhc2QgIT0gMCkKLQkJCQliciA9IHRydWU7Ci0JCQllbHNlIGlmICgoYWRkcmggIT0gMCkgfHwgKHNpemVoICE9IDApCi0JCQkJIHx8IChzaXplbCAhPSBTSV9DT1JFX1NJWkUpKSB7Ci0JCQkJU0lfRVJST1IoKCJGaXJzdCBTbGF2ZSBBU0QgZm9yIGNvcmUgMHglMDR4IG1hbGZvcm1lZCAiICIoMHglMDh4KVxuIiwgY2lkLCBhc2QpKTsKLQkJCQlnb3RvIGVycm9yOwotCQkJfQotCQl9Ci0JCXNpaS0+Y29yZXNiYVtpZHhdID0gYWRkcmw7Ci0JCXNpaS0+Y29yZXNiYV9zaXplW2lkeF0gPSBzaXplbDsKLQkJLyogR2V0IGFueSBtb3JlIEFTRHMgaW4gcG9ydCAwICovCi0JCWogPSAxOwotCQlkbyB7Ci0JCQlhc2QgPQotCQkJICAgIGdldF9hc2Qoc2loLCAmZXJvbXB0ciwgMCwgaiwgQURfU1RfU0xBVkUsICZhZGRybCwKLQkJCQkgICAgJmFkZHJoLCAmc2l6ZWwsICZzaXplaCk7Ci0JCQlpZiAoKGFzZCAhPSAwKSAmJiAoaiA9PSAxKSAmJiAoc2l6ZWwgPT0gU0lfQ09SRV9TSVpFKSkgewotCQkJCXNpaS0+Y29yZXNiYTJbaWR4XSA9IGFkZHJsOwotCQkJCXNpaS0+Y29yZXNiYTJfc2l6ZVtpZHhdID0gc2l6ZWw7Ci0JCQl9Ci0JCQlqKys7Ci0JCX0gd2hpbGUgKGFzZCAhPSAwKTsKLQotCQkvKiBHbyB0aHJvdWdoIHRoZSBBU0RzIGZvciBvdGhlciBzbGF2ZSBwb3J0cyAqLwotCQlmb3IgKGkgPSAxOyBpIDwgbnNwOyBpKyspIHsKLQkJCWogPSAwOwotCQkJZG8gewotCQkJCWFzZCA9Ci0JCQkJICAgIGdldF9hc2Qoc2loLCAmZXJvbXB0ciwgaSwgaisrLCBBRF9TVF9TTEFWRSwKLQkJCQkJICAgICZhZGRybCwgJmFkZHJoLCAmc2l6ZWwsICZzaXplaCk7Ci0JCQl9IHdoaWxlIChhc2QgIT0gMCk7Ci0JCQlpZiAoaiA9PSAwKSB7Ci0JCQkJU0lfRVJST1IoKCIgU1AgJWQgaGFzIG5vIGFkZHJlc3MgZGVzY3JpcHRvcnNcbiIsCi0JCQkJCSAgaSkpOwotCQkJCWdvdG8gZXJyb3I7Ci0JCQl9Ci0JCX0KLQotCQkvKiBOb3cgZ2V0IG1hc3RlciB3cmFwcGVycyAqLwotCQlmb3IgKGkgPSAwOyBpIDwgbm13OyBpKyspIHsKLQkJCWFzZCA9Ci0JCQkgICAgZ2V0X2FzZChzaWgsICZlcm9tcHRyLCBpLCAwLCBBRF9TVF9NV1JBUCwgJmFkZHJsLAotCQkJCSAgICAmYWRkcmgsICZzaXplbCwgJnNpemVoKTsKLQkJCWlmIChhc2QgPT0gMCkgewotCQkJCVNJX0VSUk9SKCgiTWlzc2luZyBkZXNjcmlwdG9yIGZvciBNVyAlZFxuIiwgaSkpOwotCQkJCWdvdG8gZXJyb3I7Ci0JCQl9Ci0JCQlpZiAoKHNpemVoICE9IDApIHx8IChzaXplbCAhPSBTSV9DT1JFX1NJWkUpKSB7Ci0JCQkJU0lfRVJST1IoKCJNYXN0ZXIgd3JhcHBlciAlZCBpcyBub3QgNEtCXG4iLCBpKSk7Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0KLQkJCWlmIChpID09IDApCi0JCQkJc2lpLT53cmFwYmFbaWR4XSA9IGFkZHJsOwotCQl9Ci0KLQkJLyogQW5kIGZpbmFsbHkgc2xhdmUgd3JhcHBlcnMgKi8KLQkJZm9yIChpID0gMDsgaSA8IG5zdzsgaSsrKSB7Ci0JCQl1aW50IGZ3cCA9IChuc3AgPT0gMSkgPyAwIDogMTsKLQkJCWFzZCA9Ci0JCQkgICAgZ2V0X2FzZChzaWgsICZlcm9tcHRyLCBmd3AgKyBpLCAwLCBBRF9TVF9TV1JBUCwKLQkJCQkgICAgJmFkZHJsLCAmYWRkcmgsICZzaXplbCwgJnNpemVoKTsKLQkJCWlmIChhc2QgPT0gMCkgewotCQkJCVNJX0VSUk9SKCgiTWlzc2luZyBkZXNjcmlwdG9yIGZvciBTVyAlZFxuIiwgaSkpOwotCQkJCWdvdG8gZXJyb3I7Ci0JCQl9Ci0JCQlpZiAoKHNpemVoICE9IDApIHx8IChzaXplbCAhPSBTSV9DT1JFX1NJWkUpKSB7Ci0JCQkJU0lfRVJST1IoKCJTbGF2ZSB3cmFwcGVyICVkIGlzIG5vdCA0S0JcbiIsIGkpKTsKLQkJCQlnb3RvIGVycm9yOwotCQkJfQotCQkJaWYgKChubXcgPT0gMCkgJiYgKGkgPT0gMCkpCi0JCQkJc2lpLT53cmFwYmFbaWR4XSA9IGFkZHJsOwotCQl9Ci0KLQkJLyogRG9uJ3QgcmVjb3JkIGJyaWRnZXMgKi8KLQkJaWYgKGJyKQotCQkJY29udGludWU7Ci0KLQkJLyogRG9uZSB3aXRoIGNvcmUgKi8KLQkJc2lpLT5udW1jb3JlcysrOwotCX0KLQotCVNJX0VSUk9SKCgiUmVhY2hlZCBlbmQgb2YgZXJvbSB3aXRob3V0IGZpbmRpbmcgRU5EIikpOwotCi0gZXJyb3I6Ci0Jc2lpLT5udW1jb3JlcyA9IDA7Ci0JcmV0dXJuOwotfQotCi0vKiBUaGlzIGZ1bmN0aW9uIGNoYW5nZXMgdGhlIGxvZ2ljYWwgImZvY3VzIiB0byB0aGUgaW5kaWNhdGVkIGNvcmUuCi0gKiBSZXR1cm4gdGhlIGN1cnJlbnQgY29yZSdzIHZpcnR1YWwgYWRkcmVzcy4KLSAqLwotdm9pZCAqYWlfc2V0Y29yZWlkeChzaV90ICpzaWgsIHVpbnQgY29yZWlkeCkKLXsKLQlzaV9pbmZvX3QgKnNpaSA9IFNJX0lORk8oc2loKTsKLQl1MzIgYWRkciA9IHNpaS0+Y29yZXNiYVtjb3JlaWR4XTsKLQl1MzIgd3JhcCA9IHNpaS0+d3JhcGJhW2NvcmVpZHhdOwotCXZvaWQgKnJlZ3M7Ci0KLQlpZiAoY29yZWlkeCA+PSBzaWktPm51bWNvcmVzKQotCQlyZXR1cm4gTlVMTDsKLQotCS8qCi0JICogSWYgdGhlIHVzZXIgaGFzIHByb3ZpZGVkIGFuIGludGVycnVwdCBtYXNrIGVuYWJsZWQgZnVuY3Rpb24sCi0JICogdGhlbiBhc3NlcnQgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgYmVmb3JlIHN3aXRjaGluZyB0aGUgY29yZS4KLQkgKi8KLQlBU1NFUlQoKHNpaS0+aW50cnNlbmFibGVkX2ZuID09IE5VTEwpCi0JICAgICAgIHx8ICEoKihzaWkpLT5pbnRyc2VuYWJsZWRfZm4pICgoc2lpKS0+aW50cl9hcmcpKTsKLQotCXN3aXRjaCAoc2loLT5idXN0eXBlKSB7Ci0JY2FzZSBTSV9CVVM6Ci0JCS8qIG1hcCBuZXcgb25lICovCi0JCWlmICghc2lpLT5yZWdzW2NvcmVpZHhdKSB7Ci0JCQlzaWktPnJlZ3NbY29yZWlkeF0gPSBSRUdfTUFQKGFkZHIsIFNJX0NPUkVfU0laRSk7Ci0JCQlBU1NFUlQoR09PRFJFR1Moc2lpLT5yZWdzW2NvcmVpZHhdKSk7Ci0JCX0KLQkJc2lpLT5jdXJtYXAgPSByZWdzID0gc2lpLT5yZWdzW2NvcmVpZHhdOwotCQlpZiAoIXNpaS0+d3JhcHBlcnNbY29yZWlkeF0pIHsKLQkJCXNpaS0+d3JhcHBlcnNbY29yZWlkeF0gPSBSRUdfTUFQKHdyYXAsIFNJX0NPUkVfU0laRSk7Ci0JCQlBU1NFUlQoR09PRFJFR1Moc2lpLT53cmFwcGVyc1tjb3JlaWR4XSkpOwotCQl9Ci0JCXNpaS0+Y3Vyd3JhcCA9IHNpaS0+d3JhcHBlcnNbY29yZWlkeF07Ci0JCWJyZWFrOwotCi0JY2FzZSBQQ0lfQlVTOgotCQkvKiBwb2ludCBiYXIwIHdpbmRvdyAqLwotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHNpaS0+cGJ1cywgUENJX0JBUjBfV0lOLCBhZGRyKTsKLQkJcmVncyA9IHNpaS0+Y3VybWFwOwotCQkvKiBwb2ludCBiYXIwIDJuZCA0S0Igd2luZG93ICovCi0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoc2lpLT5wYnVzLCBQQ0lfQkFSMF9XSU4yLCB3cmFwKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNQSV9CVVM6Ci0JY2FzZSBTRElPX0JVUzoKLQkJc2lpLT5jdXJtYXAgPSByZWdzID0gKHZvaWQgKikodW5zaWduZWQgbG9uZylhZGRyOwotCQlzaWktPmN1cndyYXAgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKXdyYXA7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJQVNTRVJUKDApOwotCQlyZWdzID0gTlVMTDsKLQkJYnJlYWs7Ci0JfQotCi0Jc2lpLT5jdXJtYXAgPSByZWdzOwotCXNpaS0+Y3VyaWR4ID0gY29yZWlkeDsKLQotCXJldHVybiByZWdzOwotfQotCi0vKiBSZXR1cm4gdGhlIG51bWJlciBvZiBhZGRyZXNzIHNwYWNlcyBpbiBjdXJyZW50IGNvcmUgKi8KLWludCBhaV9udW1hZGRyc3BhY2VzKHNpX3QgKnNpaCkKLXsKLQlyZXR1cm4gMjsKLX0KLQotLyogUmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBudGggYWRkcmVzcyBzcGFjZSBpbiB0aGUgY3VycmVudCBjb3JlICovCi11MzIgYWlfYWRkcnNwYWNlKHNpX3QgKnNpaCwgdWludCBhc2lkeCkKLXsKLQlzaV9pbmZvX3QgKnNpaTsKLQl1aW50IGNpZHg7Ci0KLQlzaWkgPSBTSV9JTkZPKHNpaCk7Ci0JY2lkeCA9IHNpaS0+Y3VyaWR4OwotCi0JaWYgKGFzaWR4ID09IDApCi0JCXJldHVybiBzaWktPmNvcmVzYmFbY2lkeF07Ci0JZWxzZSBpZiAoYXNpZHggPT0gMSkKLQkJcmV0dXJuIHNpaS0+Y29yZXNiYTJbY2lkeF07Ci0JZWxzZSB7Ci0JCVNJX0VSUk9SKCgiJXM6IE5lZWQgdG8gcGFyc2UgdGhlIGVyb20gYWdhaW4gdG8gZmluZCBhZGRyIHNwYWNlICVkXG4iLCBfX2Z1bmNfXywgYXNpZHgpKTsKLQkJcmV0dXJuIDA7Ci0JfQotfQotCi0vKiBSZXR1cm4gdGhlIHNpemUgb2YgdGhlIG50aCBhZGRyZXNzIHNwYWNlIGluIHRoZSBjdXJyZW50IGNvcmUgKi8KLXUzMiBhaV9hZGRyc3BhY2VzaXplKHNpX3QgKnNpaCwgdWludCBhc2lkeCkKLXsKLQlzaV9pbmZvX3QgKnNpaTsKLQl1aW50IGNpZHg7Ci0KLQlzaWkgPSBTSV9JTkZPKHNpaCk7Ci0JY2lkeCA9IHNpaS0+Y3VyaWR4OwotCi0JaWYgKGFzaWR4ID09IDApCi0JCXJldHVybiBzaWktPmNvcmVzYmFfc2l6ZVtjaWR4XTsKLQllbHNlIGlmIChhc2lkeCA9PSAxKQotCQlyZXR1cm4gc2lpLT5jb3Jlc2JhMl9zaXplW2NpZHhdOwotCWVsc2UgewotCQlTSV9FUlJPUigoIiVzOiBOZWVkIHRvIHBhcnNlIHRoZSBlcm9tIGFnYWluIHRvIGZpbmQgYWRkciBzcGFjZSAlZFxuIiwgX19mdW5jX18sIGFzaWR4KSk7Ci0JCXJldHVybiAwOwotCX0KLX0KLQotdWludCBhaV9mbGFnKHNpX3QgKnNpaCkKLXsKLQlzaV9pbmZvX3QgKnNpaTsKLQlhaWRtcF90ICphaTsKLQotCXNpaSA9IFNJX0lORk8oc2loKTsKLQlpZiAoQkNNNDcxNjJfRE1QKCkpIHsKLQkJU0lfRVJST1IoKCIlczogQXR0ZW1wdGluZyB0byByZWFkIE1JUFMgRE1QIHJlZ2lzdGVycyBvbiA0NzE2MmEwIiwgX19mdW5jX18pKTsKLQkJcmV0dXJuIHNpaS0+Y3VyaWR4OwotCX0KLQlhaSA9IHNpaS0+Y3Vyd3JhcDsKLQotCXJldHVybiBSX1JFRygmYWktPm9vYnNlbG91dGEzMCkgJiAweDFmOwotfQotCi12b2lkIGFpX3NldGludChzaV90ICpzaWgsIGludCBzaWZsYWcpCi17Ci19Ci0KLXZvaWQgYWlfd3JpdGVfd3JhcF9yZWcoc2lfdCAqc2loLCB1MzIgb2Zmc2V0LCB1MzIgdmFsKQotewotCXNpX2luZm9fdCAqc2lpID0gU0lfSU5GTyhzaWgpOwotCXUzMiAqdyA9ICh1MzIgKikgc2lpLT5jdXJ3cmFwOwotCVdfUkVHKHcgKyAob2Zmc2V0IC8gNCksIHZhbCk7Ci0JcmV0dXJuOwotfQotCi11aW50IGFpX2NvcmV2ZW5kb3Ioc2lfdCAqc2loKQotewotCXNpX2luZm9fdCAqc2lpOwotCXUzMiBjaWE7Ci0KLQlzaWkgPSBTSV9JTkZPKHNpaCk7Ci0JY2lhID0gc2lpLT5jaWFbc2lpLT5jdXJpZHhdOwotCXJldHVybiAoY2lhICYgQ0lBX01GR19NQVNLKSA+PiBDSUFfTUZHX1NISUZUOwotfQotCi11aW50IGFpX2NvcmVyZXYoc2lfdCAqc2loKQotewotCXNpX2luZm9fdCAqc2lpOwotCXUzMiBjaWI7Ci0KLQlzaWkgPSBTSV9JTkZPKHNpaCk7Ci0JY2liID0gc2lpLT5jaWJbc2lpLT5jdXJpZHhdOwotCXJldHVybiAoY2liICYgQ0lCX1JFVl9NQVNLKSA+PiBDSUJfUkVWX1NISUZUOwotfQotCi1ib29sIGFpX2lzY29yZXVwKHNpX3QgKnNpaCkKLXsKLQlzaV9pbmZvX3QgKnNpaTsKLQlhaWRtcF90ICphaTsKLQotCXNpaSA9IFNJX0lORk8oc2loKTsKLQlhaSA9IHNpaS0+Y3Vyd3JhcDsKLQotCXJldHVybiAoKChSX1JFRygmYWktPmlvY3RybCkgJiAoU0lDRl9GR0MgfCBTSUNGX0NMT0NLX0VOKSkgPT0KLQkJIFNJQ0ZfQ0xPQ0tfRU4pCi0JCSYmICgoUl9SRUcoJmFpLT5yZXNldGN0cmwpICYgQUlSQ19SRVNFVCkgPT0gMCkpOwotfQotCi0vKgotICogU3dpdGNoIHRvICdjb3JlaWR4JywgaXNzdWUgYSBzaW5nbGUgYXJiaXRyYXJ5IDMyYml0IHJlZ2lzdGVyIG1hc2smc2V0IG9wZXJhdGlvbiwKLSAqIHN3aXRjaCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBjb3JlLCBhbmQgcmV0dXJuIHRoZSBuZXcgdmFsdWUuCi0gKgotICogV2hlbiB1c2luZyB0aGUgc2lsaWNvbiBiYWNrcGxhbmUsIG5vIGZpZGRsaW5nIHdpdGggaW50ZXJydXB0cyBvciBjb3JlIHN3aXRjaGVzIGlzIG5lZWRlZC4KLSAqCi0gKiBBbHNvLCB3aGVuIHVzaW5nIHBjaS9wY2llLCB3ZSBjYW4gb3B0aW1pemUgYXdheSB0aGUgY29yZSBzd2l0Y2hpbmcgZm9yIHBjaSByZWdpc3RlcnMKLSAqIGFuZCAob24gbmV3ZXIgcGNpIGNvcmVzKSBjaGlwY29tbW9uIHJlZ2lzdGVycy4KLSAqLwotdWludCBhaV9jb3JlcmVnKHNpX3QgKnNpaCwgdWludCBjb3JlaWR4LCB1aW50IHJlZ29mZiwgdWludCBtYXNrLCB1aW50IHZhbCkKLXsKLQl1aW50IG9yaWdpZHggPSAwOwotCXUzMiAqciA9IE5VTEw7Ci0JdWludCB3OwotCXVpbnQgaW50cl92YWwgPSAwOwotCWJvb2wgZmFzdCA9IGZhbHNlOwotCXNpX2luZm9fdCAqc2lpOwotCi0Jc2lpID0gU0lfSU5GTyhzaWgpOwotCi0JQVNTRVJUKEdPT0RJRFgoY29yZWlkeCkpOwotCUFTU0VSVChyZWdvZmYgPCBTSV9DT1JFX1NJWkUpOwotCUFTU0VSVCgodmFsICYgfm1hc2spID09IDApOwotCi0JaWYgKGNvcmVpZHggPj0gU0lfTUFYQ09SRVMpCi0JCXJldHVybiAwOwotCi0JaWYgKHNpaC0+YnVzdHlwZSA9PSBTSV9CVVMpIHsKLQkJLyogSWYgaW50ZXJuYWwgYnVzLCB3ZSBjYW4gYWx3YXlzIGdldCBhdCBldmVyeXRoaW5nICovCi0JCWZhc3QgPSB0cnVlOwotCQkvKiBtYXAgaWYgZG9lcyBub3QgZXhpc3QgKi8KLQkJaWYgKCFzaWktPnJlZ3NbY29yZWlkeF0pIHsKLQkJCXNpaS0+cmVnc1tjb3JlaWR4XSA9IFJFR19NQVAoc2lpLT5jb3Jlc2JhW2NvcmVpZHhdLAotCQkJCQkJICAgICBTSV9DT1JFX1NJWkUpOwotCQkJQVNTRVJUKEdPT0RSRUdTKHNpaS0+cmVnc1tjb3JlaWR4XSkpOwotCQl9Ci0JCXIgPSAodTMyICopICgodW5zaWduZWQgY2hhciAqKSBzaWktPnJlZ3NbY29yZWlkeF0gKyByZWdvZmYpOwotCX0gZWxzZSBpZiAoc2loLT5idXN0eXBlID09IFBDSV9CVVMpIHsKLQkJLyogSWYgcGNpL3BjaWUsIHdlIGNhbiBnZXQgYXQgcGNpL3BjaWUgcmVncyBhbmQgb24gbmV3ZXIgY29yZXMgdG8gY2hpcGMgKi8KLQotCQlpZiAoKHNpaS0+Y29yZWlkW2NvcmVpZHhdID09IENDX0NPUkVfSUQpICYmIFNJX0ZBU1Qoc2lpKSkgewotCQkJLyogQ2hpcGMgcmVnaXN0ZXJzIGFyZSBtYXBwZWQgYXQgMTJLQiAqLwotCi0JCQlmYXN0ID0gdHJ1ZTsKLQkJCXIgPSAodTMyICopICgoY2hhciAqKXNpaS0+Y3VybWFwICsKLQkJCQkJUENJXzE2S0IwX0NDUkVHU19PRkZTRVQgKyByZWdvZmYpOwotCQl9IGVsc2UgaWYgKHNpaS0+cHViLmJ1c2NvcmVpZHggPT0gY29yZWlkeCkgewotCQkJLyogcGNpIHJlZ2lzdGVycyBhcmUgYXQgZWl0aGVyIGluIHRoZSBsYXN0IDJLQiBvZiBhbiA4S0Igd2luZG93Ci0JCQkgKiBvciwgaW4gcGNpZSBhbmQgcGNpIHJldiAxMyBhdCA4S0IKLQkJCSAqLwotCQkJZmFzdCA9IHRydWU7Ci0JCQlpZiAoU0lfRkFTVChzaWkpKQotCQkJCXIgPSAodTMyICopICgoY2hhciAqKXNpaS0+Y3VybWFwICsKLQkJCQkJCVBDSV8xNktCMF9QQ0lSRUdTX09GRlNFVCArCi0JCQkJCQlyZWdvZmYpOwotCQkJZWxzZQotCQkJCXIgPSAodTMyICopICgoY2hhciAqKXNpaS0+Y3VybWFwICsKLQkJCQkJCSgocmVnb2ZmID49IFNCQ09ORklHT0ZGKSA/Ci0JCQkJCQkgUENJX0JBUjBfUENJU0JSX09GRlNFVCA6Ci0JCQkJCQkgUENJX0JBUjBfUENJUkVHU19PRkZTRVQpICsKLQkJCQkJCXJlZ29mZik7Ci0JCX0KLQl9Ci0KLQlpZiAoIWZhc3QpIHsKLQkJSU5UUl9PRkYoc2lpLCBpbnRyX3ZhbCk7Ci0KLQkJLyogc2F2ZSBjdXJyZW50IGNvcmUgaW5kZXggKi8KLQkJb3JpZ2lkeCA9IHNpX2NvcmVpZHgoJnNpaS0+cHViKTsKLQotCQkvKiBzd2l0Y2ggY29yZSAqLwotCQlyID0gKHUzMiAqKSAoKHVuc2lnbmVkIGNoYXIgKikgYWlfc2V0Y29yZWlkeCgmc2lpLT5wdWIsIGNvcmVpZHgpICsKLQkJCQlyZWdvZmYpOwotCX0KLQlBU1NFUlQociAhPSBOVUxMKTsKLQotCS8qIG1hc2sgYW5kIHNldCAqLwotCWlmIChtYXNrIHx8IHZhbCkgewotCQl3ID0gKFJfUkVHKHIpICYgfm1hc2spIHwgdmFsOwotCQlXX1JFRyhyLCB3KTsKLQl9Ci0KLQkvKiByZWFkYmFjayAqLwotCXcgPSBSX1JFRyhyKTsKLQotCWlmICghZmFzdCkgewotCQkvKiByZXN0b3JlIGNvcmUgaW5kZXggKi8KLQkJaWYgKG9yaWdpZHggIT0gY29yZWlkeCkKLQkJCWFpX3NldGNvcmVpZHgoJnNpaS0+cHViLCBvcmlnaWR4KTsKLQotCQlJTlRSX1JFU1RPUkUoc2lpLCBpbnRyX3ZhbCk7Ci0JfQotCi0JcmV0dXJuIHc7Ci19Ci0KLXZvaWQgYWlfY29yZV9kaXNhYmxlKHNpX3QgKnNpaCwgdTMyIGJpdHMpCi17Ci0Jc2lfaW5mb190ICpzaWk7Ci0Jdm9sYXRpbGUgdTMyIGR1bW15OwotCWFpZG1wX3QgKmFpOwotCi0Jc2lpID0gU0lfSU5GTyhzaWgpOwotCi0JQVNTRVJUKEdPT0RSRUdTKHNpaS0+Y3Vyd3JhcCkpOwotCWFpID0gc2lpLT5jdXJ3cmFwOwotCi0JLyogaWYgY29yZSBpcyBhbHJlYWR5IGluIHJlc2V0LCBqdXN0IHJldHVybiAqLwotCWlmIChSX1JFRygmYWktPnJlc2V0Y3RybCkgJiBBSVJDX1JFU0VUKQotCQlyZXR1cm47Ci0KLQlXX1JFRygmYWktPmlvY3RybCwgYml0cyk7Ci0JZHVtbXkgPSBSX1JFRygmYWktPmlvY3RybCk7Ci0JdWRlbGF5KDEwKTsKLQotCVdfUkVHKCZhaS0+cmVzZXRjdHJsLCBBSVJDX1JFU0VUKTsKLQl1ZGVsYXkoMSk7Ci19Ci0KLS8qIHJlc2V0IGFuZCByZS1lbmFibGUgYSBjb3JlCi0gKiBpbnB1dHM6Ci0gKiBiaXRzIC0gY29yZSBzcGVjaWZpYyBiaXRzIHRoYXQgYXJlIHNldCBkdXJpbmcgYW5kIGFmdGVyIHJlc2V0IHNlcXVlbmNlCi0gKiByZXNldGJpdHMgLSBjb3JlIHNwZWNpZmljIGJpdHMgdGhhdCBhcmUgc2V0IG9ubHkgZHVyaW5nIHJlc2V0IHNlcXVlbmNlCi0gKi8KLXZvaWQgYWlfY29yZV9yZXNldChzaV90ICpzaWgsIHUzMiBiaXRzLCB1MzIgcmVzZXRiaXRzKQotewotCXNpX2luZm9fdCAqc2lpOwotCWFpZG1wX3QgKmFpOwotCXZvbGF0aWxlIHUzMiBkdW1teTsKLQotCXNpaSA9IFNJX0lORk8oc2loKTsKLQlBU1NFUlQoR09PRFJFR1Moc2lpLT5jdXJ3cmFwKSk7Ci0JYWkgPSBzaWktPmN1cndyYXA7Ci0KLQkvKgotCSAqIE11c3QgZG8gdGhlIGRpc2FibGUgc2VxdWVuY2UgZmlyc3QgdG8gd29yayBmb3IgYXJiaXRyYXJ5IGN1cnJlbnQgY29yZSBzdGF0ZS4KLQkgKi8KLQlhaV9jb3JlX2Rpc2FibGUoc2loLCAoYml0cyB8IHJlc2V0Yml0cykpOwotCi0JLyoKLQkgKiBOb3cgZG8gdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLgotCSAqLwotCVdfUkVHKCZhaS0+aW9jdHJsLCAoYml0cyB8IFNJQ0ZfRkdDIHwgU0lDRl9DTE9DS19FTikpOwotCWR1bW15ID0gUl9SRUcoJmFpLT5pb2N0cmwpOwotCVdfUkVHKCZhaS0+cmVzZXRjdHJsLCAwKTsKLQl1ZGVsYXkoMSk7Ci0KLQlXX1JFRygmYWktPmlvY3RybCwgKGJpdHMgfCBTSUNGX0NMT0NLX0VOKSk7Ci0JZHVtbXkgPSBSX1JFRygmYWktPmlvY3RybCk7Ci0JdWRlbGF5KDEpOwotfQotCi12b2lkIGFpX2NvcmVfY2ZsYWdzX3dvKHNpX3QgKnNpaCwgdTMyIG1hc2ssIHUzMiB2YWwpCi17Ci0Jc2lfaW5mb190ICpzaWk7Ci0JYWlkbXBfdCAqYWk7Ci0JdTMyIHc7Ci0KLQlzaWkgPSBTSV9JTkZPKHNpaCk7Ci0KLQlpZiAoQkNNNDcxNjJfRE1QKCkpIHsKLQkJU0lfRVJST1IoKCIlczogQWNjZXNzaW5nIE1JUFMgRE1QIHJlZ2lzdGVyIChpb2N0cmwpIG9uIDQ3MTYyYTAiLAotCQkJICBfX2Z1bmNfXykpOwotCQlyZXR1cm47Ci0JfQotCi0JQVNTRVJUKEdPT0RSRUdTKHNpaS0+Y3Vyd3JhcCkpOwotCWFpID0gc2lpLT5jdXJ3cmFwOwotCi0JQVNTRVJUKCh2YWwgJiB+bWFzaykgPT0gMCk7Ci0KLQlpZiAobWFzayB8fCB2YWwpIHsKLQkJdyA9ICgoUl9SRUcoJmFpLT5pb2N0cmwpICYgfm1hc2spIHwgdmFsKTsKLQkJV19SRUcoJmFpLT5pb2N0cmwsIHcpOwotCX0KLX0KLQotdTMyIGFpX2NvcmVfY2ZsYWdzKHNpX3QgKnNpaCwgdTMyIG1hc2ssIHUzMiB2YWwpCi17Ci0Jc2lfaW5mb190ICpzaWk7Ci0JYWlkbXBfdCAqYWk7Ci0JdTMyIHc7Ci0KLQlzaWkgPSBTSV9JTkZPKHNpaCk7Ci0JaWYgKEJDTTQ3MTYyX0RNUCgpKSB7Ci0JCVNJX0VSUk9SKCgiJXM6IEFjY2Vzc2luZyBNSVBTIERNUCByZWdpc3RlciAoaW9jdHJsKSBvbiA0NzE2MmEwIiwKLQkJCSAgX19mdW5jX18pKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JQVNTRVJUKEdPT0RSRUdTKHNpaS0+Y3Vyd3JhcCkpOwotCWFpID0gc2lpLT5jdXJ3cmFwOwotCi0JQVNTRVJUKCh2YWwgJiB+bWFzaykgPT0gMCk7Ci0KLQlpZiAobWFzayB8fCB2YWwpIHsKLQkJdyA9ICgoUl9SRUcoJmFpLT5pb2N0cmwpICYgfm1hc2spIHwgdmFsKTsKLQkJV19SRUcoJmFpLT5pb2N0cmwsIHcpOwotCX0KLQotCXJldHVybiBSX1JFRygmYWktPmlvY3RybCk7Ci19Ci0KLXUzMiBhaV9jb3JlX3NmbGFncyhzaV90ICpzaWgsIHUzMiBtYXNrLCB1MzIgdmFsKQotewotCXNpX2luZm9fdCAqc2lpOwotCWFpZG1wX3QgKmFpOwotCXUzMiB3OwotCi0Jc2lpID0gU0lfSU5GTyhzaWgpOwotCWlmIChCQ000NzE2Ml9ETVAoKSkgewotCQlTSV9FUlJPUigoIiVzOiBBY2Nlc3NpbmcgTUlQUyBETVAgcmVnaXN0ZXIgKGlvc3RhdHVzKSBvbiA0NzE2MmEwIiwgX19mdW5jX18pKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JQVNTRVJUKEdPT0RSRUdTKHNpaS0+Y3Vyd3JhcCkpOwotCWFpID0gc2lpLT5jdXJ3cmFwOwotCi0JQVNTRVJUKCh2YWwgJiB+bWFzaykgPT0gMCk7Ci0JQVNTRVJUKChtYXNrICYgflNJU0ZfQ09SRV9CSVRTKSA9PSAwKTsKLQotCWlmIChtYXNrIHx8IHZhbCkgewotCQl3ID0gKChSX1JFRygmYWktPmlvc3RhdHVzKSAmIH5tYXNrKSB8IHZhbCk7Ci0JCVdfUkVHKCZhaS0+aW9zdGF0dXMsIHcpOwotCX0KLQotCXJldHVybiBSX1JFRygmYWktPmlvc3RhdHVzKTsKLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS91dGlsL2JjbXNyb20uYyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9iY21zcm9tLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1MGJmYTYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS91dGlsL2JjbXNyb20uYworKysgL2Rldi9udWxsCkBAIC0xLDIwODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWQotICogU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0gKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OCi0gKiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOCi0gKiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotICovCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxiY21kZWZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8YmNtdXRpbHMuaD4KLSNpbmNsdWRlIDxobmRzb2MuaD4KLSNpbmNsdWRlIDxzYmNoaXBjLmg+Ci0jaW5jbHVkZSA8YmNtZGV2cy5oPgotI2luY2x1ZGUgPHBjaWNmZy5oPgotI2luY2x1ZGUgPHNpdXRpbHMuaD4KLSNpbmNsdWRlIDxiY21zcm9tLmg+Ci0jaW5jbHVkZSA8YmNtc3JvbV90YmwuaD4KLSNpZmRlZiBCQ01TRElPCi0jaW5jbHVkZSA8YmNtc2RoLmg+Ci0jaW5jbHVkZSA8c2Rpby5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxiY21udnJhbS5oPgotI2luY2x1ZGUgPGJjbW90cC5oPgotCi0jaWYgZGVmaW5lZChCQ01TRElPKQotI2luY2x1ZGUgPHNic2Rpby5oPgotI2luY2x1ZGUgPHNiaG5kZG1hLmg+Ci0jaW5jbHVkZSA8c2JzZHBjbWRldi5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgotCi0jZGVmaW5lCUJTX0VSUk9SKGFyZ3MpCi0KLSNkZWZpbmUgU1JPTV9PRkZTRVQoc2loKSAoKHNpaC0+Y2NyZXYgPiAzMSkgPyBcCi0JKCgoc2loLT5jY2NhcHMgJiBDQ19DQVBfU1JPTSkgPT0gMCkgPyBOVUxMIDogXAotCSAoKHU4ICopY3VybWFwICsgUENJXzE2S0IwX0NDUkVHU19PRkZTRVQgKyBDQ19TUk9NX09UUCkpIDogXAotCSgodTggKiljdXJtYXAgKyBQQ0lfQkFSMF9TUFJPTV9PRkZTRVQpKQotCi0jaWYgZGVmaW5lZChCQ01EQkcpCi0jZGVmaW5lIFdSSVRFX0VOQUJMRV9ERUxBWQk1MDAJLyogNTAwIG1zIGFmdGVyIHdyaXRlIGVuYWJsZS9kaXNhYmxlIHRvZ2dsZSAqLwotI2RlZmluZSBXUklURV9XT1JEX0RFTEFZCTIwCS8qIDIwIG1zIGJldHdlZW4gZWFjaCB3b3JkIHdyaXRlICovCi0jZW5kaWYKLQotdHlwZWRlZiBzdHJ1Y3QgdmFyYnVmIHsKLQljaGFyICpiYXNlOwkJLyogcG9pbnRlciB0byBidWZmZXIgYmFzZSAqLwotCWNoYXIgKmJ1ZjsJCS8qIHBvaW50ZXIgdG8gY3VycmVudCBwb3NpdGlvbiAqLwotCXVuc2lnbmVkIGludCBzaXplOwkvKiBjdXJyZW50IChyZXNpZHVhbCkgc2l6ZSBpbiBieXRlcyAqLwotfSB2YXJidWZfdDsKLWV4dGVybiBjaGFyICpfdmFyczsKLWV4dGVybiB1aW50IF92YXJzejsKLQotI2RlZmluZSBTUk9NX0NJU19TSU5HTEUJMQotCi1zdGF0aWMgaW50IGluaXR2YXJzX3Nyb21fc2koc2lfdCAqc2loLCB2b2lkICpjdXJtYXAsIGNoYXIgKip2YXJzLCB1aW50ICpjb3VudCk7Ci1zdGF0aWMgdm9pZCBfaW5pdHZhcnNfc3JvbV9wY2kodTggc3JvbXJldiwgdTE2ICpzcm9tLCB1aW50IG9mZiwgdmFyYnVmX3QgKmIpOwotc3RhdGljIGludCBpbml0dmFyc19zcm9tX3BjaShzaV90ICpzaWgsIHZvaWQgKmN1cm1hcCwgY2hhciAqKnZhcnMsIHVpbnQgKmNvdW50KTsKLXN0YXRpYyBpbnQgaW5pdHZhcnNfZmxhc2hfc2koc2lfdCAqc2loLCBjaGFyICoqdmFycywgdWludCAqY291bnQpOwotI2lmZGVmIEJDTVNESU8KLXN0YXRpYyBpbnQgaW5pdHZhcnNfY2lzX3NkaW8oY2hhciAqKnZhcnMsIHVpbnQgKmNvdW50KTsKLXN0YXRpYyBpbnQgc3Byb21fY21kX3NkaW8odTggY21kKTsKLXN0YXRpYyBpbnQgc3Byb21fcmVhZF9zZGlvKHUxNiBhZGRyLCB1MTYgKmRhdGEpOwotI2VuZGlmCQkJCS8qIEJDTVNESU8gKi8KLXN0YXRpYyBpbnQgc3Byb21fcmVhZF9wY2koc2lfdCAqc2loLCB1MTYgKnNwcm9tLAotCQkJICB1aW50IHdvcmRvZmYsIHUxNiAqYnVmLCB1aW50IG53b3JkcywgYm9vbCBjaGVja19jcmMpOwotI2lmIGRlZmluZWQoQkNNTlZSQU1SKQotc3RhdGljIGludCBvdHBfcmVhZF9wY2koc2lfdCAqc2loLCB1MTYgKmJ1ZiwgdWludCBidWZzeik7Ci0jZW5kaWYKLXN0YXRpYyB1MTYgc3JvbV9jY19jbWQoc2lfdCAqc2loLCB2b2lkICpjY3JlZ3MsIHUzMiBjbWQsCi0JCQkgIHVpbnQgd29yZG9mZiwgdTE2IGRhdGEpOwotCi1zdGF0aWMgaW50IGluaXR2YXJzX3RhYmxlKGNoYXIgKnN0YXJ0LCBjaGFyICplbmQsCi0JCQkgIGNoYXIgKip2YXJzLCB1aW50ICpjb3VudCk7Ci1zdGF0aWMgaW50IGluaXR2YXJzX2ZsYXNoKHNpX3QgKnNpaCwgY2hhciAqKnZwLAotCQkJICB1aW50IGxlbik7Ci0KLS8qIEluaXRpYWxpemF0aW9uIG9mIHZhcmJ1ZiBzdHJ1Y3R1cmUgKi8KLXN0YXRpYyB2b2lkIHZhcmJ1Zl9pbml0KHZhcmJ1Zl90ICpiLCBjaGFyICpidWYsIHVpbnQgc2l6ZSkKLXsKLQliLT5zaXplID0gc2l6ZTsKLQliLT5iYXNlID0gYi0+YnVmID0gYnVmOwotfQotCi0vKiBhcHBlbmQgYSBudWxsIHRlcm1pbmF0ZWQgdmFyPXZhbHVlIHN0cmluZyAqLwotc3RhdGljIGludCB2YXJidWZfYXBwZW5kKHZhcmJ1Zl90ICpiLCBjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLQl2YV9saXN0IGFwOwotCWludCByOwotCXNpemVfdCBsZW47Ci0JY2hhciAqczsKLQotCWlmIChiLT5zaXplIDwgMikKLQkJcmV0dXJuIDA7Ci0KLQl2YV9zdGFydChhcCwgZm10KTsKLQlyID0gdnNucHJpbnRmKGItPmJ1ZiwgYi0+c2l6ZSwgZm10LCBhcCk7Ci0JdmFfZW5kKGFwKTsKLQotCS8qIEM5OSBzbnByaW50ZiBiZWhhdmlvciByZXR1cm5zIHIgPj0gc2l6ZSBvbiBvdmVyZmxvdywKLQkgKiBvdGhlcnMgcmV0dXJuIC0xIG9uIG92ZXJmbG93LgotCSAqIEFsbCByZXR1cm4gLTEgb24gZm9ybWF0IGVycm9yLgotCSAqIFdlIG5lZWQgdG8gbGVhdmUgcm9vbSBmb3IgMiBudWxsIHRlcm1pbmF0aW9ucywgb25lIGZvciB0aGUgY3VycmVudCB2YXIKLQkgKiBzdHJpbmcsIGFuZCBvbmUgZm9yIGZpbmFsIG51bGwgb2YgdGhlIHZhciB0YWJsZS4gU28gY2hlY2sgdGhhdCB0aGUKLQkgKiBzdHJsZW4gd3JpdHRlbiwgciwgbGVhdmVzIHJvb20gZm9yIDIgY2hhcnMuCi0JICovCi0JaWYgKChyID09IC0xKSB8fCAociA+IChpbnQpKGItPnNpemUgLSAyKSkpIHsKLQkJYi0+c2l6ZSA9IDA7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIFJlbW92ZSBhbnkgZWFybGllciBvY2N1cnJlbmNlIG9mIHRoZSBzYW1lIHZhcmlhYmxlICovCi0JcyA9IHN0cmNocihiLT5idWYsICc9Jyk7Ci0JaWYgKHMgIT0gTlVMTCkgewotCQlsZW4gPSAoc2l6ZV90KSAocyAtIGItPmJ1Zik7Ci0JCWZvciAocyA9IGItPmJhc2U7IHMgPCBiLT5idWY7KSB7Ci0JCQlpZiAoKG1lbWNtcChzLCBiLT5idWYsIGxlbikgPT0gMCkgJiYgc1tsZW5dID09ICc9JykgewotCQkJCWxlbiA9IHN0cmxlbihzKSArIDE7Ci0JCQkJbWVtbW92ZShzLCAocyArIGxlbiksCi0JCQkJCSgoYi0+YnVmICsgciArIDEpIC0gKHMgKyBsZW4pKSk7Ci0JCQkJYi0+YnVmIC09IGxlbjsKLQkJCQliLT5zaXplICs9ICh1bnNpZ25lZCBpbnQpbGVuOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQl3aGlsZSAoKnMrKykKLQkJCQk7Ci0JCX0KLQl9Ci0KLQkvKiBza2lwIG92ZXIgdGhpcyBzdHJpbmcncyBudWxsIHRlcm1pbmF0aW9uICovCi0JcisrOwotCWItPnNpemUgLT0gcjsKLQliLT5idWYgKz0gcjsKLQotCXJldHVybiByOwotfQotCi0vKgotICogSW5pdGlhbGl6ZSBsb2NhbCB2YXJzIGZyb20gdGhlIHJpZ2h0IHNvdXJjZSBmb3IgdGhpcyBwbGF0Zm9ybS4KLSAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG5vbnplcm8gb24gZXJyb3IuCi0gKi8KLWludCBzcm9tX3Zhcl9pbml0KHNpX3QgKnNpaCwgdWludCBidXN0eXBlLCB2b2lkICpjdXJtYXAsCi0JCSAgY2hhciAqKnZhcnMsIHVpbnQgKmNvdW50KQotewotCXVpbnQgbGVuOwotCi0JbGVuID0gMDsKLQotCUFTU0VSVChidXN0eXBlID09IGJ1c3R5cGUpOwotCWlmICh2YXJzID09IE5VTEwgfHwgY291bnQgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0KLQkqdmFycyA9IE5VTEw7Ci0JKmNvdW50ID0gMDsKLQotCXN3aXRjaCAoYnVzdHlwZSkgewotCWNhc2UgU0lfQlVTOgotCWNhc2UgSlRBR19CVVM6Ci0JCXJldHVybiBpbml0dmFyc19zcm9tX3NpKHNpaCwgY3VybWFwLCB2YXJzLCBjb3VudCk7Ci0KLQljYXNlIFBDSV9CVVM6Ci0JCUFTU0VSVChjdXJtYXAgIT0gTlVMTCk7Ci0JCWlmIChjdXJtYXAgPT0gTlVMTCkKLQkJCXJldHVybiAtMTsKLQotCQlyZXR1cm4gaW5pdHZhcnNfc3JvbV9wY2koc2loLCBjdXJtYXAsIHZhcnMsIGNvdW50KTsKLQotI2lmZGVmIEJDTVNESU8KLQljYXNlIFNESU9fQlVTOgotCQlyZXR1cm4gaW5pdHZhcnNfY2lzX3NkaW8odmFycywgY291bnQpOwotI2VuZGlmCQkJCS8qIEJDTVNESU8gKi8KLQotCWRlZmF1bHQ6Ci0JCUFTU0VSVCgwKTsKLQl9Ci0JcmV0dXJuIC0xOwotfQotCi0vKiBzdXBwb3J0IG9ubHkgMTYtYml0IHdvcmQgcmVhZCBmcm9tIHNyb20gKi8KLWludAotc3JvbV9yZWFkKHNpX3QgKnNpaCwgdWludCBidXN0eXBlLCB2b2lkICpjdXJtYXAsCi0JICB1aW50IGJ5dGVvZmYsIHVpbnQgbmJ5dGVzLCB1MTYgKmJ1ZiwgYm9vbCBjaGVja19jcmMpCi17Ci0JdWludCBvZmYsIG53OwotI2lmZGVmIEJDTVNESU8KLQl1aW50IGk7Ci0jZW5kaWYJCQkJLyogQkNNU0RJTyAqLwotCi0JQVNTRVJUKGJ1c3R5cGUgPT0gYnVzdHlwZSk7Ci0KLQkvKiBjaGVjayBpbnB1dCAtIDE2LWJpdCBhY2Nlc3Mgb25seSAqLwotCWlmIChieXRlb2ZmICYgMSB8fCBuYnl0ZXMgJiAxIHx8IChieXRlb2ZmICsgbmJ5dGVzKSA+IFNST01fTUFYKQotCQlyZXR1cm4gMTsKLQotCW9mZiA9IGJ5dGVvZmYgLyAyOwotCW53ID0gbmJ5dGVzIC8gMjsKLQotCWlmIChidXN0eXBlID09IFBDSV9CVVMpIHsKLQkJaWYgKCFjdXJtYXApCi0JCQlyZXR1cm4gMTsKLQotCQlpZiAoc2lfaXNfc3Byb21fYXZhaWxhYmxlKHNpaCkpIHsKLQkJCXUxNiAqc3JvbTsKLQotCQkJc3JvbSA9ICh1MTYgKikgU1JPTV9PRkZTRVQoc2loKTsKLQkJCWlmIChzcm9tID09IE5VTEwpCi0JCQkJcmV0dXJuIDE7Ci0KLQkJCWlmIChzcHJvbV9yZWFkX3BjaQotCQkJICAgIChzaWgsIHNyb20sIG9mZiwgYnVmLCBudywgY2hlY2tfY3JjKSkKLQkJCQlyZXR1cm4gMTsKLQkJfQotI2lmIGRlZmluZWQoQkNNTlZSQU1SKQotCQllbHNlIHsKLQkJCWlmIChvdHBfcmVhZF9wY2koc2loLCBidWYsIFNST01fTUFYKSkKLQkJCQlyZXR1cm4gMTsKLQkJfQotI2VuZGlmCi0jaWZkZWYgQkNNU0RJTwotCX0gZWxzZSBpZiAoYnVzdHlwZSA9PSBTRElPX0JVUykgewotCQlvZmYgPSBieXRlb2ZmIC8gMjsKLQkJbncgPSBuYnl0ZXMgLyAyOwotCQlmb3IgKGkgPSAwOyBpIDwgbnc7IGkrKykgewotCQkJaWYgKHNwcm9tX3JlYWRfc2RpbwotCQkJICAgICgodTE2KSAob2ZmICsgaSksICh1MTYgKikgKGJ1ZiArIGkpKSkKLQkJCQlyZXR1cm4gMTsKLQkJfQotI2VuZGlmCQkJCS8qIEJDTVNESU8gKi8KLQl9IGVsc2UgaWYgKGJ1c3R5cGUgPT0gU0lfQlVTKSB7Ci0JCXJldHVybiAxOwotCX0gZWxzZSB7Ci0JCXJldHVybiAxOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciB2c3RyX21hbmZbXSA9ICJtYW5mPSVzIjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfcHJvZHVjdG5hbWVbXSA9ICJwcm9kdWN0bmFtZT0lcyI7Ci1zdGF0aWMgY29uc3QgY2hhciB2c3RyX21hbmZpZFtdID0gIm1hbmZpZD0weCV4IjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfcHJvZGlkW10gPSAicHJvZGlkPTB4JXgiOwotI2lmZGVmIEJDTVNESU8KLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfc2RtYXhzcGVlZFtdID0gInNkbWF4c3BlZWQ9JWQiOwotc3RhdGljIGNvbnN0IGNoYXIgdnN0cl9zZG1heGJsa1tdWzEzXSA9IHsKLSJzZG1heGJsazA9JWQiLCAic2RtYXhibGsxPSVkIiwgInNkbWF4YmxrMj0lZCJ9OwotI2VuZGlmCi1zdGF0aWMgY29uc3QgY2hhciB2c3RyX3JlZ3dpbmRvd3N6W10gPSAicmVnd2luZG93c3o9JWQiOwotc3RhdGljIGNvbnN0IGNoYXIgdnN0cl9zcm9tcmV2W10gPSAic3JvbXJldj0lZCI7Ci1zdGF0aWMgY29uc3QgY2hhciB2c3RyX2NoaXByZXZbXSA9ICJjaGlwcmV2PSVkIjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfc3VidmVuZGlkW10gPSAic3VidmVuZGlkPTB4JXgiOwotc3RhdGljIGNvbnN0IGNoYXIgdnN0cl9zdWJkZXZpZFtdID0gInN1YmRldmlkPTB4JXgiOwotc3RhdGljIGNvbnN0IGNoYXIgdnN0cl9ib2FyZHJldltdID0gImJvYXJkcmV2PTB4JXgiOwotc3RhdGljIGNvbnN0IGNoYXIgdnN0cl9hYTJnW10gPSAiYWEyZz0weCV4IjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfYWE1Z1tdID0gImFhNWc9MHgleCI7Ci1zdGF0aWMgY29uc3QgY2hhciB2c3RyX2FnW10gPSAiYWclZD0weCV4IjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfY2NbXSA9ICJjYz0lZCI7Ci1zdGF0aWMgY29uc3QgY2hhciB2c3RyX29wb1tdID0gIm9wbz0lZCI7Ci1zdGF0aWMgY29uc3QgY2hhciB2c3RyX3BhMGJbXVs5XSA9IHsKLSJwYTBiMD0lZCIsICJwYTBiMT0lZCIsICJwYTBiMj0lZCJ9OwotCi1zdGF0aWMgY29uc3QgY2hhciB2c3RyX3BhMGl0c3NpdFtdID0gInBhMGl0c3NpdD0lZCI7Ci1zdGF0aWMgY29uc3QgY2hhciB2c3RyX3BhMG1heHB3cltdID0gInBhMG1heHB3cj0lZCI7Ci1zdGF0aWMgY29uc3QgY2hhciB2c3RyX3BhMWJbXVs5XSA9IHsKLSJwYTFiMD0lZCIsICJwYTFiMT0lZCIsICJwYTFiMj0lZCJ9OwotCi1zdGF0aWMgY29uc3QgY2hhciB2c3RyX3BhMWxvYltdWzExXSA9IHsKLSJwYTFsb2IwPSVkIiwgInBhMWxvYjE9JWQiLCAicGExbG9iMj0lZCJ9OwotCi1zdGF0aWMgY29uc3QgY2hhciB2c3RyX3BhMWhpYltdWzExXSA9IHsKLSJwYTFoaWIwPSVkIiwgInBhMWhpYjE9JWQiLCAicGExaGliMj0lZCJ9OwotCi1zdGF0aWMgY29uc3QgY2hhciB2c3RyX3BhMWl0c3NpdFtdID0gInBhMWl0c3NpdD0lZCI7Ci1zdGF0aWMgY29uc3QgY2hhciB2c3RyX3BhMW1heHB3cltdID0gInBhMW1heHB3cj0lZCI7Ci1zdGF0aWMgY29uc3QgY2hhciB2c3RyX3BhMWxvbWF4cHdyW10gPSAicGExbG9tYXhwd3I9JWQiOwotc3RhdGljIGNvbnN0IGNoYXIgdnN0cl9wYTFoaW1heHB3cltdID0gInBhMWhpbWF4cHdyPSVkIjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfb2VtW10gPQotICAgICJvZW09JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMngiOwotc3RhdGljIGNvbnN0IGNoYXIgdnN0cl9ib2FyZGZsYWdzW10gPSAiYm9hcmRmbGFncz0weCV4IjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfYm9hcmRmbGFnczJbXSA9ICJib2FyZGZsYWdzMj0weCV4IjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfbGVkYmhbXSA9ICJsZWRiaCVkPTB4JXgiOwotc3RhdGljIGNvbnN0IGNoYXIgdnN0cl9ub2Njb2RlW10gPSAiY2NvZGU9MHgwIjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfY2NvZGVbXSA9ICJjY29kZT0lYyVjIjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfY2N0bFtdID0gImNjdGw9MHgleCI7Ci1zdGF0aWMgY29uc3QgY2hhciB2c3RyX2Nja3BvW10gPSAiY2NrcG89MHgleCI7Ci1zdGF0aWMgY29uc3QgY2hhciB2c3RyX29mZG1wb1tdID0gIm9mZG1wbz0weCV4IjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfcmRsaWRbXSA9ICJyZGxpZD0weCV4IjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfcmRscm5kaXNbXSA9ICJyZGxybmRpcz0lZCI7Ci1zdGF0aWMgY29uc3QgY2hhciB2c3RyX3JkbHJ3dVtdID0gInJkbHJ3dT0lZCI7Ci1zdGF0aWMgY29uc3QgY2hhciB2c3RyX3VzYmZzW10gPSAidXNiZnM9JWQiOwotc3RhdGljIGNvbnN0IGNoYXIgdnN0cl93cHNncGlvW10gPSAid3BzZ3Bpbz0lZCI7Ci1zdGF0aWMgY29uc3QgY2hhciB2c3RyX3dwc2xlZFtdID0gIndwc2xlZD0lZCI7Ci1zdGF0aWMgY29uc3QgY2hhciB2c3RyX3JkbHNuW10gPSAicmRsc249JWQiOwotc3RhdGljIGNvbnN0IGNoYXIgdnN0cl9yc3Npc21mMmdbXSA9ICJyc3Npc21mMmc9JWQiOwotc3RhdGljIGNvbnN0IGNoYXIgdnN0cl9yc3Npc21jMmdbXSA9ICJyc3Npc21jMmc9JWQiOwotc3RhdGljIGNvbnN0IGNoYXIgdnN0cl9yc3Npc2F2MmdbXSA9ICJyc3Npc2F2Mmc9JWQiOwotc3RhdGljIGNvbnN0IGNoYXIgdnN0cl9ieGEyZ1tdID0gImJ4YTJnPSVkIjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfcnNzaXNtZjVnW10gPSAicnNzaXNtZjVnPSVkIjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfcnNzaXNtYzVnW10gPSAicnNzaXNtYzVnPSVkIjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfcnNzaXNhdjVnW10gPSAicnNzaXNhdjVnPSVkIjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfYnhhNWdbXSA9ICJieGE1Zz0lZCI7Ci1zdGF0aWMgY29uc3QgY2hhciB2c3RyX3RyaTJnW10gPSAidHJpMmc9JWQiOwotc3RhdGljIGNvbnN0IGNoYXIgdnN0cl90cmk1Z2xbXSA9ICJ0cmk1Z2w9JWQiOwotc3RhdGljIGNvbnN0IGNoYXIgdnN0cl90cmk1Z1tdID0gInRyaTVnPSVkIjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfdHJpNWdoW10gPSAidHJpNWdoPSVkIjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfcnhwbzJnW10gPSAicnhwbzJnPSVkIjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfcnhwbzVnW10gPSAicnhwbzVnPSVkIjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfYm9hcmR0eXBlW10gPSAiYm9hcmR0eXBlPTB4JXgiOwotc3RhdGljIGNvbnN0IGNoYXIgdnN0cl9sZWRkY1tdID0gImxlZGRjPTB4JTA0eCI7Ci1zdGF0aWMgY29uc3QgY2hhciB2c3RyX3ZlbmRpZFtdID0gInZlbmRpZD0weCV4IjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfZGV2aWRbXSA9ICJkZXZpZD0weCV4IjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfeHRhbGZyZXFbXSA9ICJ4dGFsZnJlcT0lZCI7Ci1zdGF0aWMgY29uc3QgY2hhciB2c3RyX3R4Y2hhaW5bXSA9ICJ0eGNoYWluPTB4JXgiOwotc3RhdGljIGNvbnN0IGNoYXIgdnN0cl9yeGNoYWluW10gPSAicnhjaGFpbj0weCV4IjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfYW50c3dpdGNoW10gPSAiYW50c3dpdGNoPTB4JXgiOwotc3RhdGljIGNvbnN0IGNoYXIgdnN0cl9yZWdyZXZbXSA9ICJyZWdyZXY9MHgleCI7Ci1zdGF0aWMgY29uc3QgY2hhciB2c3RyX2FudHN3Y3RsMmdbXSA9ICJhbnRzd2N0bDJnPTB4JXgiOwotc3RhdGljIGNvbnN0IGNoYXIgdnN0cl90cmlzbzJnW10gPSAidHJpc28yZz0weCV4IjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfcGRldHJhbmdlMmdbXSA9ICJwZGV0cmFuZ2UyZz0weCV4IjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfZXh0cGFnYWluMmdbXSA9ICJleHRwYWdhaW4yZz0weCV4IjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfdHNzaXBvczJnW10gPSAidHNzaXBvczJnPTB4JXgiOwotc3RhdGljIGNvbnN0IGNoYXIgdnN0cl9hbnRzd2N0bDVnW10gPSAiYW50c3djdGw1Zz0weCV4IjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfdHJpc281Z1tdID0gInRyaXNvNWc9MHgleCI7Ci1zdGF0aWMgY29uc3QgY2hhciB2c3RyX3BkZXRyYW5nZTVnW10gPSAicGRldHJhbmdlNWc9MHgleCI7Ci1zdGF0aWMgY29uc3QgY2hhciB2c3RyX2V4dHBhZ2FpbjVnW10gPSAiZXh0cGFnYWluNWc9MHgleCI7Ci1zdGF0aWMgY29uc3QgY2hhciB2c3RyX3Rzc2lwb3M1Z1tdID0gInRzc2lwb3M1Zz0weCV4IjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfbWF4cDJnYTBbXSA9ICJtYXhwMmdhMD0weCV4IjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfaXR0MmdhMFtdID0gIml0dDJnYTA9MHgleCI7Ci1zdGF0aWMgY29uc3QgY2hhciB2c3RyX3BhW10gPSAicGElZGd3JWRhJWQ9MHgleCI7Ci1zdGF0aWMgY29uc3QgY2hhciB2c3RyX3BhaGxbXSA9ICJwYSVkZyVjdyVkYSVkPTB4JXgiOwotc3RhdGljIGNvbnN0IGNoYXIgdnN0cl9tYXhwNWdhMFtdID0gIm1heHA1Z2EwPTB4JXgiOwotc3RhdGljIGNvbnN0IGNoYXIgdnN0cl9pdHQ1Z2EwW10gPSAiaXR0NWdhMD0weCV4IjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfbWF4cDVnaGEwW10gPSAibWF4cDVnaGEwPTB4JXgiOwotc3RhdGljIGNvbnN0IGNoYXIgdnN0cl9tYXhwNWdsYTBbXSA9ICJtYXhwNWdsYTA9MHgleCI7Ci1zdGF0aWMgY29uc3QgY2hhciB2c3RyX21heHAyZ2ExW10gPSAibWF4cDJnYTE9MHgleCI7Ci1zdGF0aWMgY29uc3QgY2hhciB2c3RyX2l0dDJnYTFbXSA9ICJpdHQyZ2ExPTB4JXgiOwotc3RhdGljIGNvbnN0IGNoYXIgdnN0cl9tYXhwNWdhMVtdID0gIm1heHA1Z2ExPTB4JXgiOwotc3RhdGljIGNvbnN0IGNoYXIgdnN0cl9pdHQ1Z2ExW10gPSAiaXR0NWdhMT0weCV4IjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfbWF4cDVnaGExW10gPSAibWF4cDVnaGExPTB4JXgiOwotc3RhdGljIGNvbnN0IGNoYXIgdnN0cl9tYXhwNWdsYTFbXSA9ICJtYXhwNWdsYTE9MHgleCI7Ci1zdGF0aWMgY29uc3QgY2hhciB2c3RyX2NjazJncG9bXSA9ICJjY2syZ3BvPTB4JXgiOwotc3RhdGljIGNvbnN0IGNoYXIgdnN0cl9vZmRtMmdwb1tdID0gIm9mZG0yZ3BvPTB4JXgiOwotc3RhdGljIGNvbnN0IGNoYXIgdnN0cl9vZmRtNWdwb1tdID0gIm9mZG01Z3BvPTB4JXgiOwotc3RhdGljIGNvbnN0IGNoYXIgdnN0cl9vZmRtNWdscG9bXSA9ICJvZmRtNWdscG89MHgleCI7Ci1zdGF0aWMgY29uc3QgY2hhciB2c3RyX29mZG01Z2hwb1tdID0gIm9mZG01Z2hwbz0weCV4IjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfY2RkcG9bXSA9ICJjZGRwbz0weCV4IjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfc3RiY3BvW10gPSAic3RiY3BvPTB4JXgiOwotc3RhdGljIGNvbnN0IGNoYXIgdnN0cl9idzQwcG9bXSA9ICJidzQwcG89MHgleCI7Ci1zdGF0aWMgY29uc3QgY2hhciB2c3RyX2J3ZHVwcG9bXSA9ICJid2R1cHBvPTB4JXgiOwotc3RhdGljIGNvbnN0IGNoYXIgdnN0cl9tY3Nwb1tdID0gIm1jcyVkZ3BvJWQ9MHgleCI7Ci1zdGF0aWMgY29uc3QgY2hhciB2c3RyX21jc3BvaGxbXSA9ICJtY3MlZGclY3BvJWQ9MHgleCI7Ci1zdGF0aWMgY29uc3QgY2hhciB2c3RyX2N1c3RvbVtdID0gImN1c3RvbXZhciVkPTB4JXgiOwotc3RhdGljIGNvbnN0IGNoYXIgdnN0cl9jY2tkaWdmaWx0dHlwZVtdID0gImNja2RpZ2ZpbHR0eXBlPSVkIjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfYm9hcmRudW1bXSA9ICJib2FyZG51bT0lZCI7Ci1zdGF0aWMgY29uc3QgY2hhciB2c3RyX21hY2FkZHJbXSA9ICJtYWNhZGRyPSVzIjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfdXNiZXBudW1bXSA9ICJ1c2JlcG51bT0weCV4IjsKLXN0YXRpYyBjb25zdCBjaGFyIHZzdHJfZW5kW10gPSAiRU5EXDAiOwotCi11OCBwYXRjaF9wYWlyOwotCi0vKiBGb3IgZG9uZ2xlIEhXLCBhY2NlcHQgcGFydGlhbCBjYWxpYnJhdGlvbiBwYXJhbWV0ZXJzICovCi0jZGVmaW5lIEJDTURPTkdMRUNBU0UobikKLQotaW50IHNyb21fcGFyc2VjaXModTggKnBjaXNbXSwgdWludCBjaXNjbnQsIGNoYXIgKip2YXJzLAotCQkgIHVpbnQgKmNvdW50KQotewotCWNoYXIgZWFidWZbMzJdOwotCWNoYXIgKmJhc2U7Ci0JdmFyYnVmX3QgYjsKLQl1OCAqY2lzLCB0dXAsIHRsZW4sIHNyb21yZXYgPSAxOwotCWludCBpLCBqOwotCWJvb2wgYWdfaW5pdCA9IGZhbHNlOwotCXUzMiB3MzI7Ci0JdWludCBmdW5jaWQ7Ci0JdWludCBjaXNudW07Ci0JczMyIGJvYXJkbnVtOwotCWludCBlcnI7Ci0JYm9vbCBzdGFuZGFyZF9jaXM7Ci0KLQlBU1NFUlQodmFycyAhPSBOVUxMKTsKLQlBU1NFUlQoY291bnQgIT0gTlVMTCk7Ci0KLQlib2FyZG51bSA9IC0xOwotCi0JYmFzZSA9IGttYWxsb2MoTUFYU1pfTlZSQU1fVkFSUywgR0ZQX0FUT01JQyk7Ci0JQVNTRVJUKGJhc2UgIT0gTlVMTCk7Ci0JaWYgKCFiYXNlKQotCQlyZXR1cm4gLTI7Ci0KLQl2YXJidWZfaW5pdCgmYiwgYmFzZSwgTUFYU1pfTlZSQU1fVkFSUyk7Ci0JbWVtc2V0KGJhc2UsIDAsIE1BWFNaX05WUkFNX1ZBUlMpOwotCWVhYnVmWzBdID0gJ1wwJzsKLQlmb3IgKGNpc251bSA9IDA7IGNpc251bSA8IGNpc2NudDsgY2lzbnVtKyspIHsKLQkJY2lzID0gKnBjaXMrKzsKLQkJaSA9IDA7Ci0JCWZ1bmNpZCA9IDA7Ci0JCXN0YW5kYXJkX2NpcyA9IHRydWU7Ci0JCWRvIHsKLQkJCWlmIChzdGFuZGFyZF9jaXMpIHsKLQkJCQl0dXAgPSBjaXNbaSsrXTsKLQkJCQlpZiAodHVwID09IENJU1RQTF9OVUxMIHx8IHR1cCA9PSBDSVNUUExfRU5EKQotCQkJCQl0bGVuID0gMDsKLQkJCQllbHNlCi0JCQkJCXRsZW4gPSBjaXNbaSsrXTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKGNpc1tpXSA9PSBDSVNUUExfTlVMTAotCQkJCSAgICB8fCBjaXNbaV0gPT0gQ0lTVFBMX0VORCkgewotCQkJCQl0bGVuID0gMDsKLQkJCQkJdHVwID0gY2lzW2ldOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXRsZW4gPSBjaXNbaV07Ci0JCQkJCXR1cCA9IENJU1RQTF9CUkNNX0hOQlU7Ci0JCQkJfQotCQkJCSsraTsKLQkJCX0KLQkJCWlmICgoaSArIHRsZW4pID49IENJU19TSVpFKQotCQkJCWJyZWFrOwotCi0JCQlzd2l0Y2ggKHR1cCkgewotCQkJY2FzZSBDSVNUUExfVkVSU18xOgotCQkJCS8qIGFzc3VtZSB0aGUgc3RyaW5ncyBhcmUgZ29vZCBpZiB0aGUgdmVyc2lvbiBmaWVsZCBjaGVja3Mgb3V0ICovCi0JCQkJaWYgKCgoY2lzW2kgKyAxXSA8PCA4KSArIGNpc1tpXSkgPj0gMHgwMDA4KSB7Ci0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfbWFuZiwKLQkJCQkJCSAgICAgICZjaXNbaSArIDJdKTsKLQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl9wcm9kdWN0bmFtZSwKLQkJCQkJCSAgICAgICZjaXNbaSArIDMgKwotCQkJCQkJCSAgIHN0cmxlbigoY2hhciAqKQotCQkJCQkJCQkgICZjaXNbaSArCi0JCQkJCQkJCSAgICAgICAyXSldKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQljYXNlIENJU1RQTF9NQU5GSUQ6Ci0JCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl9tYW5maWQsCi0JCQkJCSAgICAgIChjaXNbaSArIDFdIDw8IDgpICsgY2lzW2ldKTsKLQkJCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX3Byb2RpZCwKLQkJCQkJICAgICAgKGNpc1tpICsgM10gPDwgOCkgKyBjaXNbaSArIDJdKTsKLQkJCQlicmVhazsKLQotCQkJY2FzZSBDSVNUUExfRlVOQ0lEOgotCQkJCWZ1bmNpZCA9IGNpc1tpXTsKLQkJCQlicmVhazsKLQotCQkJY2FzZSBDSVNUUExfRlVOQ0U6Ci0JCQkJc3dpdGNoIChmdW5jaWQpIHsKLQkJCQljYXNlIENJU1RQTF9GSURfU0RJTzoKLSNpZmRlZiBCQ01TRElPCi0JCQkJCWlmIChjaXNbaV0gPT0gMCkgewotCQkJCQkJdTggc3BkID0gY2lzW2kgKyAzXTsKLQkJCQkJCXN0YXRpYyBpbnQgYmFzZVtdID0gewotCQkJCQkJCS0xLCAxMCwgMTIsIDEzLCAxNSwgMjAsCi0JCQkJCQkJICAgIDI1LCAzMCwKLQkJCQkJCQkzNSwgNDAsIDQ1LCA1MCwgNTUsIDYwLAotCQkJCQkJCSAgICA3MCwgODAKLQkJCQkJCX07Ci0JCQkJCQlzdGF0aWMgaW50IG11bHRbXSA9IHsKLQkJCQkJCQkxMCwgMTAwLCAxMDAwLCAxMDAwMCwKLQkJCQkJCQktMSwgLTEsIC0xLCAtMQotCQkJCQkJfTsKLQkJCQkJCUFTU0VSVCgobXVsdFtzcGQgJiAweDddICE9IC0xKQotCQkJCQkJICAgICAgICYmCi0JCQkJCQkgICAgICAgKGJhc2UKLQkJCQkJCQlbKHNwZCA+PiAzKSAmIDB4MGZdKSk7Ci0JCQkJCQl2YXJidWZfYXBwZW5kKCZiLAotCQkJCQkJCSAgICAgIHZzdHJfc2RtYXhibGtbMF0sCi0JCQkJCQkJICAgICAgKGNpc1tpICsgMl0gPDwgOCkKLQkJCQkJCQkgICAgICArIGNpc1tpICsgMV0pOwotCQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwKLQkJCQkJCQkgICAgICB2c3RyX3NkbWF4c3BlZWQsCi0JCQkJCQkJICAgICAgKG11bHRbc3BkICYgMHg3XSAqCi0JCQkJCQkJICAgICAgIGJhc2VbKHNwZCA+PiAzKSAmCi0JCQkJCQkJCSAgICAweDBmXSkpOwotCQkJCQl9IGVsc2UgaWYgKGNpc1tpXSA9PSAxKSB7Ci0JCQkJCQl2YXJidWZfYXBwZW5kKCZiLAotCQkJCQkJCSAgICAgIHZzdHJfc2RtYXhibGsKLQkJCQkJCQkgICAgICBbY2lzbnVtXSwKLQkJCQkJCQkgICAgICAoY2lzW2kgKyAxM10gPDwgOCkKLQkJCQkJCQkgICAgICB8IGNpc1tpICsgMTJdKTsKLQkJCQkJfQotI2VuZGlmCQkJCS8qIEJDTVNESU8gKi8KLQkJCQkJZnVuY2lkID0gMDsKLQkJCQkJYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJLyogc2V0IG1hY2FkZHIgaWYgSE5CVV9NQUNBRERSIG5vdCBzZWVuIHlldCAqLwotCQkJCQlpZiAoZWFidWZbMF0gPT0gJ1wwJyAmJgotCQkJCQkgICAgY2lzW2ldID09IExBTl9OSUQgJiYKLQkJCQkJICAgICFpc196ZXJvX2V0aGVyX2FkZHIoJmNpc1tpICsgMl0pICYmCi0JCQkJCSAgICAhaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoJmNpc1tpICsgMl0pKSB7Ci0JCQkJCQlBU1NFUlQoY2lzW2kgKyAxXSA9PQotCQkJCQkJICAgICAgIEVUSF9BTEVOKTsKLQkJCQkJCXNucHJpbnRmKGVhYnVmLCBzaXplb2YoZWFidWYpLAotCQkJCQkJCSIlcE0iLCAmY2lzW2kgKyAyXSk7Ci0KLQkJCQkJCS8qIHNldCBib2FyZG51bSBpZiBITkJVX0JPQVJETlVNIG5vdCBzZWVuIHlldCAqLwotCQkJCQkJaWYgKGJvYXJkbnVtID09IC0xKQotCQkJCQkJCWJvYXJkbnVtID0KLQkJCQkJCQkgICAgKGNpc1tpICsgNl0gPDwgOCkgKwotCQkJCQkJCSAgICBjaXNbaSArIDddOwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlicmVhazsKLQotCQkJY2FzZSBDSVNUUExfQ0ZUQUJMRToKLQkJCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX3JlZ3dpbmRvd3N6LAotCQkJCQkgICAgICAoY2lzW2kgKyA3XSA8PCA4KSB8IGNpc1tpICsgNl0pOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIENJU1RQTF9CUkNNX0hOQlU6Ci0JCQkJc3dpdGNoIChjaXNbaV0pIHsKLQkJCQljYXNlIEhOQlVfU1JPTVJFVjoKLQkJCQkJc3JvbXJldiA9IGNpc1tpICsgMV07Ci0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfc3JvbXJldiwKLQkJCQkJCSAgICAgIHNyb21yZXYpOwotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgSE5CVV9YVEFMRlJFUToKLQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl94dGFsZnJlcSwKLQkJCQkJCSAgICAgIChjaXNbaSArIDRdIDw8IDI0KSB8Ci0JCQkJCQkgICAgICAoY2lzW2kgKyAzXSA8PCAxNikgfAotCQkJCQkJICAgICAgKGNpc1tpICsgMl0gPDwgOCkgfAotCQkJCQkJICAgICAgY2lzW2kgKyAxXSk7Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSBITkJVX0NISVBJRDoKLQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl92ZW5kaWQsCi0JCQkJCQkgICAgICAoY2lzW2kgKyAyXSA8PCA4KSArCi0JCQkJCQkgICAgICBjaXNbaSArIDFdKTsKLQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl9kZXZpZCwKLQkJCQkJCSAgICAgIChjaXNbaSArIDRdIDw8IDgpICsKLQkJCQkJCSAgICAgIGNpc1tpICsgM10pOwotCQkJCQlpZiAodGxlbiA+PSA3KSB7Ci0JCQkJCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX2NoaXByZXYsCi0JCQkJCQkJICAgICAgKGNpc1tpICsgNl0gPDwgOCkKLQkJCQkJCQkgICAgICArIGNpc1tpICsgNV0pOwotCQkJCQl9Ci0JCQkJCWlmICh0bGVuID49IDkpIHsKLQkJCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsCi0JCQkJCQkJICAgICAgdnN0cl9zdWJ2ZW5kaWQsCi0JCQkJCQkJICAgICAgKGNpc1tpICsgOF0gPDwgOCkKLQkJCQkJCQkgICAgICArIGNpc1tpICsgN10pOwotCQkJCQl9Ci0JCQkJCWlmICh0bGVuID49IDExKSB7Ci0JCQkJCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX3N1YmRldmlkLAotCQkJCQkJCSAgICAgIChjaXNbaSArIDEwXSA8PCA4KQotCQkJCQkJCSAgICAgICsgY2lzW2kgKyA5XSk7Ci0JCQkJCQkvKiBzdWJkZXZpZCBkb3VibGVzIGZvciBib2FyZHR5cGUgKi8KLQkJCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsCi0JCQkJCQkJICAgICAgdnN0cl9ib2FyZHR5cGUsCi0JCQkJCQkJICAgICAgKGNpc1tpICsgMTBdIDw8IDgpCi0JCQkJCQkJICAgICAgKyBjaXNbaSArIDldKTsKLQkJCQkJfQotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgSE5CVV9CT0FSRE5VTToKLQkJCQkJYm9hcmRudW0gPQotCQkJCQkgICAgKGNpc1tpICsgMl0gPDwgOCkgKyBjaXNbaSArIDFdOwotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgSE5CVV9QQVRDSDoKLQkJCQkJewotCQkJCQkJY2hhciB2c3RyX3BhZGRyWzE2XTsKLQkJCQkJCWNoYXIgdnN0cl9wZGF0YVsxNl07Ci0KLQkJCQkJCS8qIHJldHJpZXZlIHRoZSBwYXRjaCBwYWlycwotCQkJCQkJICogZnJvbSB0bGVuLzY7IHdoZXJlIDYgaXMKLQkJCQkJCSAqIHNpemVvZihwYXRjaCBhZGRyKDIpKSArCi0JCQkJCQkgKiBzaXplb2YocGF0Y2ggZGF0YSg0KSkuCi0JCQkJCQkgKi8KLQkJCQkJCXBhdGNoX3BhaXIgPSB0bGVuIC8gNjsKLQotCQkJCQkJZm9yIChqID0gMDsgaiA8IHBhdGNoX3BhaXI7IGorKykgewotCQkJCQkJCXNucHJpbnRmKHZzdHJfcGFkZHIsCi0JCQkJCQkJCSBzaXplb2YKLQkJCQkJCQkJICh2c3RyX3BhZGRyKSwKLQkJCQkJCQkJICJwYSVkPTB4JSV4IiwKLQkJCQkJCQkJIGopOwotCQkJCQkJCXNucHJpbnRmKHZzdHJfcGRhdGEsCi0JCQkJCQkJCSBzaXplb2YKLQkJCQkJCQkJICh2c3RyX3BkYXRhKSwKLQkJCQkJCQkJICJwZCVkPTB4JSV4IiwKLQkJCQkJCQkJIGopOwotCi0JCQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwKLQkJCQkJCQkJICAgICAgdnN0cl9wYWRkciwKLQkJCQkJCQkJICAgICAgKGNpcwotCQkJCQkJCQkgICAgICAgW2kgKwotCQkJCQkJCQkJKGogKgotCQkJCQkJCQkJIDYpICsKLQkJCQkJCQkJCTJdIDw8IDgpCi0JCQkJCQkJCSAgICAgIHwgY2lzW2kgKwotCQkJCQkJCQkJICAgIChqICoKLQkJCQkJCQkJCSAgICAgNikKLQkJCQkJCQkJCSAgICArCi0JCQkJCQkJCQkgICAgMV0pOwotCi0JCQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwKLQkJCQkJCQkJICAgICAgdnN0cl9wZGF0YSwKLQkJCQkJCQkJICAgICAgKGNpcwotCQkJCQkJCQkgICAgICAgW2kgKwotCQkJCQkJCQkJKGogKgotCQkJCQkJCQkJIDYpICsKLQkJCQkJCQkJCTZdIDw8Ci0JCQkJCQkJCSAgICAgICAyNCkgfAotCQkJCQkJCQkgICAgICAoY2lzCi0JCQkJCQkJCSAgICAgICBbaSArCi0JCQkJCQkJCQkoaiAqCi0JCQkJCQkJCQkgNikgKwotCQkJCQkJCQkJNV0gPDwKLQkJCQkJCQkJICAgICAgIDE2KSB8Ci0JCQkJCQkJCSAgICAgIChjaXMKLQkJCQkJCQkJICAgICAgIFtpICsKLQkJCQkJCQkJCShqICoKLQkJCQkJCQkJCSA2KSArCi0JCQkJCQkJCQk0XSA8PCA4KQotCQkJCQkJCQkgICAgICB8IGNpc1tpICsKLQkJCQkJCQkJCSAgICAoaiAqCi0JCQkJCQkJCQkgICAgIDYpCi0JCQkJCQkJCQkgICAgKwotCQkJCQkJCQkJICAgIDNdKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgSE5CVV9CT0FSRFJFVjoKLQkJCQkJaWYgKHRsZW4gPT0gMikKLQkJCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfYm9hcmRyZXYsCi0JCQkJCQkJICAgICAgY2lzW2kgKyAxXSk7Ci0JCQkJCWVsc2UKLQkJCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfYm9hcmRyZXYsCi0JCQkJCQkJICAgICAgKGNpc1tpICsgMl0gPDwgOCkKLQkJCQkJCQkgICAgICArIGNpc1tpICsgMV0pOwotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgSE5CVV9CT0FSREZMQUdTOgotCQkJCQl3MzIgPSAoY2lzW2kgKyAyXSA8PCA4KSArIGNpc1tpICsgMV07Ci0JCQkJCWlmICh0bGVuID49IDUpCi0JCQkJCQl3MzIgfD0KLQkJCQkJCSAgICAoKGNpc1tpICsgNF0gPDwgMjQpICsKLQkJCQkJCSAgICAgKGNpc1tpICsgM10gPDwgMTYpKTsKLQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl9ib2FyZGZsYWdzLCB3MzIpOwotCi0JCQkJCWlmICh0bGVuID49IDcpIHsKLQkJCQkJCXczMiA9Ci0JCQkJCQkgICAgKGNpc1tpICsgNl0gPDwgOCkgKyBjaXNbaSArCi0JCQkJCQkJCQkgICAgNV07Ci0JCQkJCQlpZiAodGxlbiA+PSA5KQotCQkJCQkJCXczMiB8PQotCQkJCQkJCSAgICAoKGNpc1tpICsgOF0gPDwgMjQpCi0JCQkJCQkJICAgICArCi0JCQkJCQkJICAgICAoY2lzW2kgKyA3XSA8PAotCQkJCQkJCSAgICAgIDE2KSk7Ci0JCQkJCQl2YXJidWZfYXBwZW5kKCZiLAotCQkJCQkJCSAgICAgIHZzdHJfYm9hcmRmbGFnczIsCi0JCQkJCQkJICAgICAgdzMyKTsKLQkJCQkJfQotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgSE5CVV9VU0JGUzoKLQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl91c2JmcywKLQkJCQkJCSAgICAgIGNpc1tpICsgMV0pOwotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgSE5CVV9CT0FSRFRZUEU6Ci0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfYm9hcmR0eXBlLAotCQkJCQkJICAgICAgKGNpc1tpICsgMl0gPDwgOCkgKwotCQkJCQkJICAgICAgY2lzW2kgKyAxXSk7Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSBITkJVX0hOQlVDSVM6Ci0JCQkJCS8qCi0JCQkJCSAqIHdoYXQgZm9sbG93cyBpcyBhIG5vbnN0YW5kYXJkIEhOQlUgQ0lTCi0JCQkJCSAqIHRoYXQgbGFja3MgQ0lTVFBMX0JSQ01fSE5CVSB0YWdzCi0JCQkJCSAqCi0JCQkJCSAqIHNraXAgMHhmZiAoZW5kIG9mIHN0YW5kYXJkIENJUykKLQkJCQkJICogYWZ0ZXIgdGhpcyB0dXBsZQotCQkJCQkgKi8KLQkJCQkJdGxlbisrOwotCQkJCQlzdGFuZGFyZF9jaXMgPSBmYWxzZTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQljYXNlIEhOQlVfVVNCRVBOVU06Ci0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfdXNiZXBudW0sCi0JCQkJCQkgICAgICAoY2lzW2kgKyAyXSA8PCA4KSB8IGNpc1tpCi0JCQkJCQkJCQkgICAgICArCi0JCQkJCQkJCQkgICAgICAxXSk7Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSBITkJVX0FBOgotCQkJCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX2FhMmcsCi0JCQkJCQkgICAgICBjaXNbaSArIDFdKTsKLQkJCQkJaWYgKHRsZW4gPj0gMykKLQkJCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfYWE1ZywKLQkJCQkJCQkgICAgICBjaXNbaSArIDJdKTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQljYXNlIEhOQlVfQUc6Ci0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfYWcsIDAsCi0JCQkJCQkgICAgICBjaXNbaSArIDFdKTsKLQkJCQkJaWYgKHRsZW4gPj0gMykKLQkJCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfYWcsIDEsCi0JCQkJCQkJICAgICAgY2lzW2kgKyAyXSk7Ci0JCQkJCWlmICh0bGVuID49IDQpCi0JCQkJCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX2FnLCAyLAotCQkJCQkJCSAgICAgIGNpc1tpICsgM10pOwotCQkJCQlpZiAodGxlbiA+PSA1KQotCQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl9hZywgMywKLQkJCQkJCQkgICAgICBjaXNbaSArIDRdKTsKLQkJCQkJYWdfaW5pdCA9IHRydWU7Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSBITkJVX0FOVDVHOgotCQkJCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX2FhNWcsCi0JCQkJCQkgICAgICBjaXNbaSArIDFdKTsKLQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl9hZywgMSwKLQkJCQkJCSAgICAgIGNpc1tpICsgMl0pOwotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgSE5CVV9DQzoKLQkJCQkJQVNTRVJUKHNyb21yZXYgPT0gMSk7Ci0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfY2MsIGNpc1tpICsgMV0pOwotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgSE5CVV9QQVBBUk1TOgotCQkJCQlzd2l0Y2ggKHRsZW4pIHsKLQkJCQkJY2FzZSAyOgotCQkJCQkJQVNTRVJUKHNyb21yZXYgPT0gMSk7Ci0JCQkJCQl2YXJidWZfYXBwZW5kKCZiLAotCQkJCQkJCSAgICAgIHZzdHJfcGEwbWF4cHdyLAotCQkJCQkJCSAgICAgIGNpc1tpICsgMV0pOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgMTA6Ci0JCQkJCQlBU1NFUlQoc3JvbXJldiA+PSAyKTsKLQkJCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfb3BvLAotCQkJCQkJCSAgICAgIGNpc1tpICsgOV0pOwotCQkJCQkJLyogRkFMTFRIUk9VR0ggKi8KLQkJCQkJY2FzZSA5OgotCQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwKLQkJCQkJCQkgICAgICB2c3RyX3BhMG1heHB3ciwKLQkJCQkJCQkgICAgICBjaXNbaSArIDhdKTsKLQkJCQkJCS8qIEZBTExUSFJPVUdIICovCi0JCQkJCQlCQ01ET05HTEVDQVNFKDgpCi0JCQkJCQkgICAgdmFyYnVmX2FwcGVuZCgmYiwKLQkJCQkJCQkJICB2c3RyX3BhMGl0c3NpdCwKLQkJCQkJCQkJICBjaXNbaSArIDddKTsKLQkJCQkJCS8qIEZBTExUSFJPVUdIICovCi0JCQkJCQlCQ01ET05HTEVDQVNFKDcpCi0JCQkJCQkgICAgZm9yIChqID0gMDsgaiA8IDM7IGorKykgewotCQkJCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsCi0JCQkJCQkJCSAgICAgIHZzdHJfcGEwYgotCQkJCQkJCQkgICAgICBbal0sCi0JCQkJCQkJCSAgICAgIChjaXMKLQkJCQkJCQkJICAgICAgIFtpICsKLQkJCQkJCQkJCShqICoKLQkJCQkJCQkJCSAyKSArCi0JCQkJCQkJCQkyXSA8PCA4KQotCQkJCQkJCQkgICAgICArIGNpc1tpICsKLQkJCQkJCQkJCSAgICAoaiAqCi0JCQkJCQkJCQkgICAgIDIpCi0JCQkJCQkJCQkgICAgKwotCQkJCQkJCQkJICAgIDFdKTsKLQkJCQkJCX0KLQkJCQkJCWJyZWFrOwotCQkJCQlkZWZhdWx0OgotCQkJCQkJQVNTRVJUKCh0bGVuID09IDIpCi0JCQkJCQkgICAgICAgfHwgKHRsZW4gPT0gOSkKLQkJCQkJCSAgICAgICB8fCAodGxlbiA9PSAxMCkpOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0KLQkJCQljYXNlIEhOQlVfUEFQQVJNUzVHOgotCQkJCQlBU1NFUlQoKHNyb21yZXYgPT0gMikKLQkJCQkJICAgICAgIHx8IChzcm9tcmV2ID09IDMpKTsKLQkJCQkJc3dpdGNoICh0bGVuKSB7Ci0JCQkJCWNhc2UgMjM6Ci0JCQkJCQl2YXJidWZfYXBwZW5kKCZiLAotCQkJCQkJCSAgICAgIHZzdHJfcGExaGltYXhwd3IsCi0JCQkJCQkJICAgICAgY2lzW2kgKyAyMl0pOwotCQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwKLQkJCQkJCQkgICAgICB2c3RyX3BhMWxvbWF4cHdyLAotCQkJCQkJCSAgICAgIGNpc1tpICsgMjFdKTsKLQkJCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsCi0JCQkJCQkJICAgICAgdnN0cl9wYTFtYXhwd3IsCi0JCQkJCQkJICAgICAgY2lzW2kgKyAyMF0pOwotCQkJCQkJLyogRkFMTFRIUk9VR0ggKi8KLQkJCQkJY2FzZSAyMDoKLQkJCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsCi0JCQkJCQkJICAgICAgdnN0cl9wYTFpdHNzaXQsCi0JCQkJCQkJICAgICAgY2lzW2kgKyAxOV0pOwotCQkJCQkJLyogRkFMTFRIUk9VR0ggKi8KLQkJCQkJY2FzZSAxOToKLQkJCQkJCWZvciAoaiA9IDA7IGogPCAzOyBqKyspIHsKLQkJCQkJCQl2YXJidWZfYXBwZW5kKCZiLAotCQkJCQkJCQkgICAgICB2c3RyX3BhMWIKLQkJCQkJCQkJICAgICAgW2pdLAotCQkJCQkJCQkgICAgICAoY2lzCi0JCQkJCQkJCSAgICAgICBbaSArCi0JCQkJCQkJCQkoaiAqCi0JCQkJCQkJCQkgMikgKwotCQkJCQkJCQkJMl0gPDwgOCkKLQkJCQkJCQkJICAgICAgKyBjaXNbaSArCi0JCQkJCQkJCQkgICAgKGogKgotCQkJCQkJCQkJICAgICAyKQotCQkJCQkJCQkJICAgICsKLQkJCQkJCQkJCSAgICAxXSk7Ci0JCQkJCQl9Ci0JCQkJCQlmb3IgKGogPSAzOyBqIDwgNjsgaisrKSB7Ci0JCQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwKLQkJCQkJCQkJICAgICAgdnN0cl9wYTFsb2IKLQkJCQkJCQkJICAgICAgW2ogLSAzXSwKLQkJCQkJCQkJICAgICAgKGNpcwotCQkJCQkJCQkgICAgICAgW2kgKwotCQkJCQkJCQkJKGogKgotCQkJCQkJCQkJIDIpICsKLQkJCQkJCQkJCTJdIDw8IDgpCi0JCQkJCQkJCSAgICAgICsgY2lzW2kgKwotCQkJCQkJCQkJICAgIChqICoKLQkJCQkJCQkJCSAgICAgMikKLQkJCQkJCQkJCSAgICArCi0JCQkJCQkJCQkgICAgMV0pOwotCQkJCQkJfQotCQkJCQkJZm9yIChqID0gNjsgaiA8IDk7IGorKykgewotCQkJCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsCi0JCQkJCQkJCSAgICAgIHZzdHJfcGExaGliCi0JCQkJCQkJCSAgICAgIFtqIC0gNl0sCi0JCQkJCQkJCSAgICAgIChjaXMKLQkJCQkJCQkJICAgICAgIFtpICsKLQkJCQkJCQkJCShqICoKLQkJCQkJCQkJCSAyKSArCi0JCQkJCQkJCQkyXSA8PCA4KQotCQkJCQkJCQkgICAgICArIGNpc1tpICsKLQkJCQkJCQkJCSAgICAoaiAqCi0JCQkJCQkJCQkgICAgIDIpCi0JCQkJCQkJCQkgICAgKwotCQkJCQkJCQkJICAgIDFdKTsKLQkJCQkJCX0KLQkJCQkJCWJyZWFrOwotCQkJCQlkZWZhdWx0OgotCQkJCQkJQVNTRVJUKCh0bGVuID09IDE5KSB8fAotCQkJCQkJICAgICAgICh0bGVuID09IDIwKQotCQkJCQkJICAgICAgIHx8ICh0bGVuID09IDIzKSk7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgSE5CVV9PRU06Ci0JCQkJCUFTU0VSVChzcm9tcmV2ID09IDEpOwotCQkJCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX29lbSwKLQkJCQkJCSAgICAgIGNpc1tpICsgMV0sIGNpc1tpICsgMl0sCi0JCQkJCQkgICAgICBjaXNbaSArIDNdLCBjaXNbaSArIDRdLAotCQkJCQkJICAgICAgY2lzW2kgKyA1XSwgY2lzW2kgKyA2XSwKLQkJCQkJCSAgICAgIGNpc1tpICsgN10sIGNpc1tpICsgOF0pOwotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgSE5CVV9MRURTOgotCQkJCQlmb3IgKGogPSAxOyBqIDw9IDQ7IGorKykgewotCQkJCQkJaWYgKGNpc1tpICsgal0gIT0gMHhmZikgewotCQkJCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsCi0JCQkJCQkJCSAgICAgIHZzdHJfbGVkYmgsCi0JCQkJCQkJCSAgICAgIGogLSAxLAotCQkJCQkJCQkgICAgICBjaXNbaSArCi0JCQkJCQkJCQkgIGpdKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgSE5CVV9DQ09ERToKLQkJCQkJQVNTRVJUKHNyb21yZXYgPiAxKTsKLQkJCQkJaWYgKChjaXNbaSArIDFdID09IDApCi0JCQkJCSAgICB8fCAoY2lzW2kgKyAyXSA9PSAwKSkKLQkJCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfbm9jY29kZSk7Ci0JCQkJCWVsc2UKLQkJCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfY2NvZGUsCi0JCQkJCQkJICAgICAgY2lzW2kgKyAxXSwKLQkJCQkJCQkgICAgICBjaXNbaSArIDJdKTsKLQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl9jY3RsLAotCQkJCQkJICAgICAgY2lzW2kgKyAzXSk7Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSBITkJVX0NDS1BPOgotCQkJCQlBU1NFUlQoc3JvbXJldiA+IDIpOwotCQkJCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX2Nja3BvLAotCQkJCQkJICAgICAgKGNpc1tpICsgMl0gPDwgOCkgfCBjaXNbaQotCQkJCQkJCQkJICAgICAgKwotCQkJCQkJCQkJICAgICAgMV0pOwotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgSE5CVV9PRkRNUE86Ci0JCQkJCUFTU0VSVChzcm9tcmV2ID4gMik7Ci0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfb2ZkbXBvLAotCQkJCQkJICAgICAgKGNpc1tpICsgNF0gPDwgMjQpIHwKLQkJCQkJCSAgICAgIChjaXNbaSArIDNdIDw8IDE2KSB8Ci0JCQkJCQkgICAgICAoY2lzW2kgKyAyXSA8PCA4KSB8Ci0JCQkJCQkgICAgICBjaXNbaSArIDFdKTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQljYXNlIEhOQlVfV1BTOgotCQkJCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX3dwc2dwaW8sCi0JCQkJCQkgICAgICBjaXNbaSArIDFdKTsKLQkJCQkJaWYgKHRsZW4gPj0gMykKLQkJCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfd3BzbGVkLAotCQkJCQkJCSAgICAgIGNpc1tpICsgMl0pOwotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgSE5CVV9SU1NJU01CWEEyRzoKLQkJCQkJQVNTRVJUKHNyb21yZXYgPT0gMyk7Ci0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfcnNzaXNtZjJnLAotCQkJCQkJICAgICAgY2lzW2kgKyAxXSAmIDB4Zik7Ci0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfcnNzaXNtYzJnLAotCQkJCQkJICAgICAgKGNpc1tpICsgMV0gPj4gNCkgJiAweGYpOwotCQkJCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX3Jzc2lzYXYyZywKLQkJCQkJCSAgICAgIGNpc1tpICsgMl0gJiAweDcpOwotCQkJCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX2J4YTJnLAotCQkJCQkJICAgICAgKGNpc1tpICsgMl0gPj4gMykgJiAweDMpOwotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgSE5CVV9SU1NJU01CWEE1RzoKLQkJCQkJQVNTRVJUKHNyb21yZXYgPT0gMyk7Ci0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfcnNzaXNtZjVnLAotCQkJCQkJICAgICAgY2lzW2kgKyAxXSAmIDB4Zik7Ci0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfcnNzaXNtYzVnLAotCQkJCQkJICAgICAgKGNpc1tpICsgMV0gPj4gNCkgJiAweGYpOwotCQkJCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX3Jzc2lzYXY1ZywKLQkJCQkJCSAgICAgIGNpc1tpICsgMl0gJiAweDcpOwotCQkJCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX2J4YTVnLAotCQkJCQkJICAgICAgKGNpc1tpICsgMl0gPj4gMykgJiAweDMpOwotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgSE5CVV9UUkkyRzoKLQkJCQkJQVNTRVJUKHNyb21yZXYgPT0gMyk7Ci0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfdHJpMmcsCi0JCQkJCQkgICAgICBjaXNbaSArIDFdKTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQljYXNlIEhOQlVfVFJJNUc6Ci0JCQkJCUFTU0VSVChzcm9tcmV2ID09IDMpOwotCQkJCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX3RyaTVnbCwKLQkJCQkJCSAgICAgIGNpc1tpICsgMV0pOwotCQkJCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX3RyaTVnLAotCQkJCQkJICAgICAgY2lzW2kgKyAyXSk7Ci0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfdHJpNWdoLAotCQkJCQkJICAgICAgY2lzW2kgKyAzXSk7Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSBITkJVX1JYUE8yRzoKLQkJCQkJQVNTRVJUKHNyb21yZXYgPT0gMyk7Ci0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfcnhwbzJnLAotCQkJCQkJICAgICAgY2lzW2kgKyAxXSk7Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSBITkJVX1JYUE81RzoKLQkJCQkJQVNTRVJUKHNyb21yZXYgPT0gMyk7Ci0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfcnhwbzVnLAotCQkJCQkJICAgICAgY2lzW2kgKyAxXSk7Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSBITkJVX01BQ0FERFI6Ci0JCQkJCWlmICghaXNfemVyb19ldGhlcl9hZGRyKCZjaXNbaSArIDFdKSAmJgotCQkJCQkgICAgIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKCZjaXNbaSArIDFdKSkgewotCQkJCQkJc25wcmludGYoZWFidWYsIHNpemVvZihlYWJ1ZiksCi0JCQkJCQkJIiVwTSIsICZjaXNbaSArIDFdKTsKLQotCQkJCQkJLyogc2V0IGJvYXJkbnVtIGlmIEhOQlVfQk9BUkROVU0gbm90IHNlZW4geWV0ICovCi0JCQkJCQlpZiAoYm9hcmRudW0gPT0gLTEpCi0JCQkJCQkJYm9hcmRudW0gPQotCQkJCQkJCSAgICAoY2lzW2kgKyA1XSA8PCA4KSArCi0JCQkJCQkJICAgIGNpc1tpICsgNl07Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0KLQkJCQljYXNlIEhOQlVfTEVEREM6Ci0JCQkJCS8qIENJUyBsZWRkYyBvbmx5IGhhcyAxNmJpdHMsIGNvbnZlcnQgaXQgdG8gMzJiaXRzICovCi0JCQkJCXczMiA9ICgoY2lzW2kgKyAyXSA8PCAyNCkgfAkvKiBvbmNvdW50ICovCi0JCQkJCSAgICAgICAoY2lzW2kgKyAxXSA8PCA4KSk7CS8qIG9mZmNvdW50ICovCi0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfbGVkZGMsIHczMik7Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSBITkJVX0NIQUlOU1dJVENIOgotCQkJCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX3R4Y2hhaW4sCi0JCQkJCQkgICAgICBjaXNbaSArIDFdKTsKLQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl9yeGNoYWluLAotCQkJCQkJICAgICAgY2lzW2kgKyAyXSk7Ci0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfYW50c3dpdGNoLAotCQkJCQkJICAgICAgKGNpc1tpICsgNF0gPDwgOCkgKwotCQkJCQkJICAgICAgY2lzW2kgKyAzXSk7Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSBITkJVX1JFR1JFVjoKLQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl9yZWdyZXYsCi0JCQkJCQkgICAgICBjaXNbaSArIDFdKTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQljYXNlIEhOQlVfRkVNOnsKLQkJCQkJCXUxNiBmZW0gPQotCQkJCQkJICAgIChjaXNbaSArIDJdIDw8IDgpICsgY2lzW2kgKwotCQkJCQkJCQkJICAgIDFdOwotCQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwKLQkJCQkJCQkgICAgICB2c3RyX2FudHN3Y3RsMmcsCi0JCQkJCQkJICAgICAgKGZlbSAmCi0JCQkJCQkJICAgICAgIFNST004X0ZFTV9BTlRTV0xVVF9NQVNLKQotCQkJCQkJCSAgICAgID4+Ci0JCQkJCQkJICAgICAgU1JPTThfRkVNX0FOVFNXTFVUX1NISUZUKTsKLQkJCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfdHJpc28yZywKLQkJCQkJCQkgICAgICAoZmVtICYKLQkJCQkJCQkgICAgICAgU1JPTThfRkVNX1RSX0lTT19NQVNLKQotCQkJCQkJCSAgICAgID4+Ci0JCQkJCQkJICAgICAgU1JPTThfRkVNX1RSX0lTT19TSElGVCk7Ci0JCQkJCQl2YXJidWZfYXBwZW5kKCZiLAotCQkJCQkJCSAgICAgIHZzdHJfcGRldHJhbmdlMmcsCi0JCQkJCQkJICAgICAgKGZlbSAmCi0JCQkJCQkJICAgICAgIFNST004X0ZFTV9QREVUX1JBTkdFX01BU0spCi0JCQkJCQkJICAgICAgPj4KLQkJCQkJCQkgICAgICBTUk9NOF9GRU1fUERFVF9SQU5HRV9TSElGVCk7Ci0JCQkJCQl2YXJidWZfYXBwZW5kKCZiLAotCQkJCQkJCSAgICAgIHZzdHJfZXh0cGFnYWluMmcsCi0JCQkJCQkJICAgICAgKGZlbSAmCi0JCQkJCQkJICAgICAgIFNST004X0ZFTV9FWFRQQV9HQUlOX01BU0spCi0JCQkJCQkJICAgICAgPj4KLQkJCQkJCQkgICAgICBTUk9NOF9GRU1fRVhUUEFfR0FJTl9TSElGVCk7Ci0JCQkJCQl2YXJidWZfYXBwZW5kKCZiLAotCQkJCQkJCSAgICAgIHZzdHJfdHNzaXBvczJnLAotCQkJCQkJCSAgICAgIChmZW0gJgotCQkJCQkJCSAgICAgICBTUk9NOF9GRU1fVFNTSVBPU19NQVNLKQotCQkJCQkJCSAgICAgID4+Ci0JCQkJCQkJICAgICAgU1JPTThfRkVNX1RTU0lQT1NfU0hJRlQpOwotCQkJCQkJaWYgKHRsZW4gPCA1KQotCQkJCQkJCWJyZWFrOwotCi0JCQkJCQlmZW0gPQotCQkJCQkJICAgIChjaXNbaSArIDRdIDw8IDgpICsgY2lzW2kgKwotCQkJCQkJCQkJICAgIDNdOwotCQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwKLQkJCQkJCQkgICAgICB2c3RyX2FudHN3Y3RsNWcsCi0JCQkJCQkJICAgICAgKGZlbSAmCi0JCQkJCQkJICAgICAgIFNST004X0ZFTV9BTlRTV0xVVF9NQVNLKQotCQkJCQkJCSAgICAgID4+Ci0JCQkJCQkJICAgICAgU1JPTThfRkVNX0FOVFNXTFVUX1NISUZUKTsKLQkJCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfdHJpc281ZywKLQkJCQkJCQkgICAgICAoZmVtICYKLQkJCQkJCQkgICAgICAgU1JPTThfRkVNX1RSX0lTT19NQVNLKQotCQkJCQkJCSAgICAgID4+Ci0JCQkJCQkJICAgICAgU1JPTThfRkVNX1RSX0lTT19TSElGVCk7Ci0JCQkJCQl2YXJidWZfYXBwZW5kKCZiLAotCQkJCQkJCSAgICAgIHZzdHJfcGRldHJhbmdlNWcsCi0JCQkJCQkJICAgICAgKGZlbSAmCi0JCQkJCQkJICAgICAgIFNST004X0ZFTV9QREVUX1JBTkdFX01BU0spCi0JCQkJCQkJICAgICAgPj4KLQkJCQkJCQkgICAgICBTUk9NOF9GRU1fUERFVF9SQU5HRV9TSElGVCk7Ci0JCQkJCQl2YXJidWZfYXBwZW5kKCZiLAotCQkJCQkJCSAgICAgIHZzdHJfZXh0cGFnYWluNWcsCi0JCQkJCQkJICAgICAgKGZlbSAmCi0JCQkJCQkJICAgICAgIFNST004X0ZFTV9FWFRQQV9HQUlOX01BU0spCi0JCQkJCQkJICAgICAgPj4KLQkJCQkJCQkgICAgICBTUk9NOF9GRU1fRVhUUEFfR0FJTl9TSElGVCk7Ci0JCQkJCQl2YXJidWZfYXBwZW5kKCZiLAotCQkJCQkJCSAgICAgIHZzdHJfdHNzaXBvczVnLAotCQkJCQkJCSAgICAgIChmZW0gJgotCQkJCQkJCSAgICAgICBTUk9NOF9GRU1fVFNTSVBPU19NQVNLKQotCQkJCQkJCSAgICAgID4+Ci0JCQkJCQkJICAgICAgU1JPTThfRkVNX1RTU0lQT1NfU0hJRlQpOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQotCQkJCWNhc2UgSE5CVV9QQVBBUk1TX0MwOgotCQkJCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX21heHAyZ2EwLAotCQkJCQkJICAgICAgY2lzW2kgKyAxXSk7Ci0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfaXR0MmdhMCwKLQkJCQkJCSAgICAgIGNpc1tpICsgMl0pOwotCQkJCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX3BhLCAyLCAwLCAwLAotCQkJCQkJICAgICAgKGNpc1tpICsgNF0gPDwgOCkgKwotCQkJCQkJICAgICAgY2lzW2kgKyAzXSk7Ci0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfcGEsIDIsIDEsIDAsCi0JCQkJCQkgICAgICAoY2lzW2kgKyA2XSA8PCA4KSArCi0JCQkJCQkgICAgICBjaXNbaSArIDVdKTsKLQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl9wYSwgMiwgMiwgMCwKLQkJCQkJCSAgICAgIChjaXNbaSArIDhdIDw8IDgpICsKLQkJCQkJCSAgICAgIGNpc1tpICsgN10pOwotCQkJCQlpZiAodGxlbiA8IDMxKQotCQkJCQkJYnJlYWs7Ci0KLQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl9tYXhwNWdhMCwKLQkJCQkJCSAgICAgIGNpc1tpICsgOV0pOwotCQkJCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX2l0dDVnYTAsCi0JCQkJCQkgICAgICBjaXNbaSArIDEwXSk7Ci0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfbWF4cDVnaGEwLAotCQkJCQkJICAgICAgY2lzW2kgKyAxMV0pOwotCQkJCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX21heHA1Z2xhMCwKLQkJCQkJCSAgICAgIGNpc1tpICsgMTJdKTsKLQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl9wYSwgNSwgMCwgMCwKLQkJCQkJCSAgICAgIChjaXNbaSArIDE0XSA8PCA4KSArCi0JCQkJCQkgICAgICBjaXNbaSArIDEzXSk7Ci0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfcGEsIDUsIDEsIDAsCi0JCQkJCQkgICAgICAoY2lzW2kgKyAxNl0gPDwgOCkgKwotCQkJCQkJICAgICAgY2lzW2kgKyAxNV0pOwotCQkJCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX3BhLCA1LCAyLCAwLAotCQkJCQkJICAgICAgKGNpc1tpICsgMThdIDw8IDgpICsKLQkJCQkJCSAgICAgIGNpc1tpICsgMTddKTsKLQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl9wYWhsLCA1LCAnbCcsIDAsCi0JCQkJCQkgICAgICAwLAotCQkJCQkJICAgICAgKGNpc1tpICsgMjBdIDw8IDgpICsKLQkJCQkJCSAgICAgIGNpc1tpICsgMTldKTsKLQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl9wYWhsLCA1LCAnbCcsIDEsCi0JCQkJCQkgICAgICAwLAotCQkJCQkJICAgICAgKGNpc1tpICsgMjJdIDw8IDgpICsKLQkJCQkJCSAgICAgIGNpc1tpICsgMjFdKTsKLQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl9wYWhsLCA1LCAnbCcsIDIsCi0JCQkJCQkgICAgICAwLAotCQkJCQkJICAgICAgKGNpc1tpICsgMjRdIDw8IDgpICsKLQkJCQkJCSAgICAgIGNpc1tpICsgMjNdKTsKLQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl9wYWhsLCA1LCAnaCcsIDAsCi0JCQkJCQkgICAgICAwLAotCQkJCQkJICAgICAgKGNpc1tpICsgMjZdIDw8IDgpICsKLQkJCQkJCSAgICAgIGNpc1tpICsgMjVdKTsKLQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl9wYWhsLCA1LCAnaCcsIDEsCi0JCQkJCQkgICAgICAwLAotCQkJCQkJICAgICAgKGNpc1tpICsgMjhdIDw8IDgpICsKLQkJCQkJCSAgICAgIGNpc1tpICsgMjddKTsKLQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl9wYWhsLCA1LCAnaCcsIDIsCi0JCQkJCQkgICAgICAwLAotCQkJCQkJICAgICAgKGNpc1tpICsgMzBdIDw8IDgpICsKLQkJCQkJCSAgICAgIGNpc1tpICsgMjldKTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQljYXNlIEhOQlVfUEFQQVJNU19DMToKLQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl9tYXhwMmdhMSwKLQkJCQkJCSAgICAgIGNpc1tpICsgMV0pOwotCQkJCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX2l0dDJnYTEsCi0JCQkJCQkgICAgICBjaXNbaSArIDJdKTsKLQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl9wYSwgMiwgMCwgMSwKLQkJCQkJCSAgICAgIChjaXNbaSArIDRdIDw8IDgpICsKLQkJCQkJCSAgICAgIGNpc1tpICsgM10pOwotCQkJCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX3BhLCAyLCAxLCAxLAotCQkJCQkJICAgICAgKGNpc1tpICsgNl0gPDwgOCkgKwotCQkJCQkJICAgICAgY2lzW2kgKyA1XSk7Ci0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfcGEsIDIsIDIsIDEsCi0JCQkJCQkgICAgICAoY2lzW2kgKyA4XSA8PCA4KSArCi0JCQkJCQkgICAgICBjaXNbaSArIDddKTsKLQkJCQkJaWYgKHRsZW4gPCAzMSkKLQkJCQkJCWJyZWFrOwotCi0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfbWF4cDVnYTEsCi0JCQkJCQkgICAgICBjaXNbaSArIDldKTsKLQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl9pdHQ1Z2ExLAotCQkJCQkJICAgICAgY2lzW2kgKyAxMF0pOwotCQkJCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX21heHA1Z2hhMSwKLQkJCQkJCSAgICAgIGNpc1tpICsgMTFdKTsKLQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl9tYXhwNWdsYTEsCi0JCQkJCQkgICAgICBjaXNbaSArIDEyXSk7Ci0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfcGEsIDUsIDAsIDEsCi0JCQkJCQkgICAgICAoY2lzW2kgKyAxNF0gPDwgOCkgKwotCQkJCQkJICAgICAgY2lzW2kgKyAxM10pOwotCQkJCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX3BhLCA1LCAxLCAxLAotCQkJCQkJICAgICAgKGNpc1tpICsgMTZdIDw8IDgpICsKLQkJCQkJCSAgICAgIGNpc1tpICsgMTVdKTsKLQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl9wYSwgNSwgMiwgMSwKLQkJCQkJCSAgICAgIChjaXNbaSArIDE4XSA8PCA4KSArCi0JCQkJCQkgICAgICBjaXNbaSArIDE3XSk7Ci0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfcGFobCwgNSwgJ2wnLCAwLAotCQkJCQkJICAgICAgMSwKLQkJCQkJCSAgICAgIChjaXNbaSArIDIwXSA8PCA4KSArCi0JCQkJCQkgICAgICBjaXNbaSArIDE5XSk7Ci0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfcGFobCwgNSwgJ2wnLCAxLAotCQkJCQkJICAgICAgMSwKLQkJCQkJCSAgICAgIChjaXNbaSArIDIyXSA8PCA4KSArCi0JCQkJCQkgICAgICBjaXNbaSArIDIxXSk7Ci0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfcGFobCwgNSwgJ2wnLCAyLAotCQkJCQkJICAgICAgMSwKLQkJCQkJCSAgICAgIChjaXNbaSArIDI0XSA8PCA4KSArCi0JCQkJCQkgICAgICBjaXNbaSArIDIzXSk7Ci0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfcGFobCwgNSwgJ2gnLCAwLAotCQkJCQkJICAgICAgMSwKLQkJCQkJCSAgICAgIChjaXNbaSArIDI2XSA8PCA4KSArCi0JCQkJCQkgICAgICBjaXNbaSArIDI1XSk7Ci0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfcGFobCwgNSwgJ2gnLCAxLAotCQkJCQkJICAgICAgMSwKLQkJCQkJCSAgICAgIChjaXNbaSArIDI4XSA8PCA4KSArCi0JCQkJCQkgICAgICBjaXNbaSArIDI3XSk7Ci0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfcGFobCwgNSwgJ2gnLCAyLAotCQkJCQkJICAgICAgMSwKLQkJCQkJCSAgICAgIChjaXNbaSArIDMwXSA8PCA4KSArCi0JCQkJCQkgICAgICBjaXNbaSArIDI5XSk7Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSBITkJVX1BPX0NDS09GRE06Ci0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfY2NrMmdwbywKLQkJCQkJCSAgICAgIChjaXNbaSArIDJdIDw8IDgpICsKLQkJCQkJCSAgICAgIGNpc1tpICsgMV0pOwotCQkJCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX29mZG0yZ3BvLAotCQkJCQkJICAgICAgKGNpc1tpICsgNl0gPDwgMjQpICsKLQkJCQkJCSAgICAgIChjaXNbaSArIDVdIDw8IDE2KSArCi0JCQkJCQkgICAgICAoY2lzW2kgKyA0XSA8PCA4KSArCi0JCQkJCQkgICAgICBjaXNbaSArIDNdKTsKLQkJCQkJaWYgKHRsZW4gPCAxOSkKLQkJCQkJCWJyZWFrOwotCi0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfb2ZkbTVncG8sCi0JCQkJCQkgICAgICAoY2lzW2kgKyAxMF0gPDwgMjQpICsKLQkJCQkJCSAgICAgIChjaXNbaSArIDldIDw8IDE2KSArCi0JCQkJCQkgICAgICAoY2lzW2kgKyA4XSA8PCA4KSArCi0JCQkJCQkgICAgICBjaXNbaSArIDddKTsKLQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl9vZmRtNWdscG8sCi0JCQkJCQkgICAgICAoY2lzW2kgKyAxNF0gPDwgMjQpICsKLQkJCQkJCSAgICAgIChjaXNbaSArIDEzXSA8PCAxNikgKwotCQkJCQkJICAgICAgKGNpc1tpICsgMTJdIDw8IDgpICsKLQkJCQkJCSAgICAgIGNpc1tpICsgMTFdKTsKLQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl9vZmRtNWdocG8sCi0JCQkJCQkgICAgICAoY2lzW2kgKyAxOF0gPDwgMjQpICsKLQkJCQkJCSAgICAgIChjaXNbaSArIDE3XSA8PCAxNikgKwotCQkJCQkJICAgICAgKGNpc1tpICsgMTZdIDw8IDgpICsKLQkJCQkJCSAgICAgIGNpc1tpICsgMTVdKTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQljYXNlIEhOQlVfUE9fTUNTMkc6Ci0JCQkJCWZvciAoaiA9IDA7IGogPD0gKHRsZW4gLyAyKTsgaisrKSB7Ci0JCQkJCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX21jc3BvLCAyLAotCQkJCQkJCSAgICAgIGosCi0JCQkJCQkJICAgICAgKGNpcwotCQkJCQkJCSAgICAgICBbaSArIDIgKwotCQkJCQkJCQkyICogal0gPDwgOCkgKwotCQkJCQkJCSAgICAgIGNpc1tpICsgMSArCi0JCQkJCQkJCSAgMiAqIGpdKTsKLQkJCQkJfQotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgSE5CVV9QT19NQ1M1R006Ci0JCQkJCWZvciAoaiA9IDA7IGogPD0gKHRsZW4gLyAyKTsgaisrKSB7Ci0JCQkJCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX21jc3BvLCA1LAotCQkJCQkJCSAgICAgIGosCi0JCQkJCQkJICAgICAgKGNpcwotCQkJCQkJCSAgICAgICBbaSArIDIgKwotCQkJCQkJCQkyICogal0gPDwgOCkgKwotCQkJCQkJCSAgICAgIGNpc1tpICsgMSArCi0JCQkJCQkJCSAgMiAqIGpdKTsKLQkJCQkJfQotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgSE5CVV9QT19NQ1M1R0xIOgotCQkJCQlmb3IgKGogPSAwOyBqIDw9ICh0bGVuIC8gNCk7IGorKykgewotCQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl9tY3Nwb2hsLAotCQkJCQkJCSAgICAgIDUsICdsJywgaiwKLQkJCQkJCQkgICAgICAoY2lzCi0JCQkJCQkJICAgICAgIFtpICsgMiArCi0JCQkJCQkJCTIgKiBqXSA8PCA4KSArCi0JCQkJCQkJICAgICAgY2lzW2kgKyAxICsKLQkJCQkJCQkJICAyICogal0pOwotCQkJCQl9Ci0KLQkJCQkJZm9yIChqID0gMDsgaiA8PSAodGxlbiAvIDQpOyBqKyspIHsKLQkJCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfbWNzcG9obCwKLQkJCQkJCQkgICAgICA1LCAnaCcsIGosCi0JCQkJCQkJICAgICAgKGNpcwotCQkJCQkJCSAgICAgICBbaSArCi0JCQkJCQkJCSgodGxlbiAvIDIpICsKLQkJCQkJCQkJIDIpICsKLQkJCQkJCQkJMiAqIGpdIDw8IDgpICsKLQkJCQkJCQkgICAgICBjaXNbaSArCi0JCQkJCQkJCSAgKCh0bGVuIC8gMikgKwotCQkJCQkJCQkgICAxKSArIDIgKiBqXSk7Ci0JCQkJCX0KLQotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgSE5CVV9QT19DREQ6Ci0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfY2RkcG8sCi0JCQkJCQkgICAgICAoY2lzW2kgKyAyXSA8PCA4KSArCi0JCQkJCQkgICAgICBjaXNbaSArIDFdKTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQljYXNlIEhOQlVfUE9fU1RCQzoKLQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl9zdGJjcG8sCi0JCQkJCQkgICAgICAoY2lzW2kgKyAyXSA8PCA4KSArCi0JCQkJCQkgICAgICBjaXNbaSArIDFdKTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQljYXNlIEhOQlVfUE9fNDBNOgotCQkJCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX2J3NDBwbywKLQkJCQkJCSAgICAgIChjaXNbaSArIDJdIDw8IDgpICsKLQkJCQkJCSAgICAgIGNpc1tpICsgMV0pOwotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgSE5CVV9QT180ME1EVVA6Ci0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfYndkdXBwbywKLQkJCQkJCSAgICAgIChjaXNbaSArIDJdIDw8IDgpICsKLQkJCQkJCSAgICAgIGNpc1tpICsgMV0pOwotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgSE5CVV9PRkRNUE81RzoKLQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl9vZmRtNWdwbywKLQkJCQkJCSAgICAgIChjaXNbaSArIDRdIDw8IDI0KSArCi0JCQkJCQkgICAgICAoY2lzW2kgKyAzXSA8PCAxNikgKwotCQkJCQkJICAgICAgKGNpc1tpICsgMl0gPDwgOCkgKwotCQkJCQkJICAgICAgY2lzW2kgKyAxXSk7Ci0JCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfb2ZkbTVnbHBvLAotCQkJCQkJICAgICAgKGNpc1tpICsgOF0gPDwgMjQpICsKLQkJCQkJCSAgICAgIChjaXNbaSArIDddIDw8IDE2KSArCi0JCQkJCQkgICAgICAoY2lzW2kgKyA2XSA8PCA4KSArCi0JCQkJCQkgICAgICBjaXNbaSArIDVdKTsKLQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl9vZmRtNWdocG8sCi0JCQkJCQkgICAgICAoY2lzW2kgKyAxMl0gPDwgMjQpICsKLQkJCQkJCSAgICAgIChjaXNbaSArIDExXSA8PCAxNikgKwotCQkJCQkJICAgICAgKGNpc1tpICsgMTBdIDw8IDgpICsKLQkJCQkJCSAgICAgIGNpc1tpICsgOV0pOwotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgSE5CVV9DVVNUT00xOgotCQkJCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX2N1c3RvbSwgMSwKLQkJCQkJCSAgICAgICgoY2lzW2kgKyA0XSA8PCAyNCkgKwotCQkJCQkJICAgICAgIChjaXNbaSArIDNdIDw8IDE2KSArCi0JCQkJCQkgICAgICAgKGNpc1tpICsgMl0gPDwgOCkgKwotCQkJCQkJICAgICAgIGNpc1tpICsgMV0pKTsKLQkJCQkJYnJlYWs7Ci0KLSNpZiBkZWZpbmVkKEJDTVNESU8pCi0JCQkJY2FzZSBITkJVX1NST00zU1dSR046Ci0JCQkJCWlmICh0bGVuID49IDczKSB7Ci0JCQkJCQl1MTYgc3JvbVszNV07Ci0JCQkJCQl1OCBzcmV2ID0gY2lzW2kgKyAxICsgNzBdOwotCQkJCQkJQVNTRVJUKHNyZXYgPT0gMyk7Ci0JCQkJCQkvKiBtYWtlIHR1cGxlIHZhbHVlIDE2LWJpdCBhbGlnbmVkIGFuZCBwYXJzZSBpdCAqLwotCQkJCQkJbWVtY3B5KHNyb20sICZjaXNbaSArIDFdLAotCQkJCQkJICAgICAgIHNpemVvZihzcm9tKSk7Ci0JCQkJCQlfaW5pdHZhcnNfc3JvbV9wY2koc3Jldiwgc3JvbSwKLQkJCQkJCQkJICAgU1JPTTNfU1dSR05fT0ZGLAotCQkJCQkJCQkgICAmYik7Ci0JCQkJCQkvKiAyLjRHIGFudGVubmEgZ2FpbiBpcyBpbmNsdWRlZCBpbiBTUk9NICovCi0JCQkJCQlhZ19pbml0ID0gdHJ1ZTsKLQkJCQkJCS8qIEV0aGVybmV0IE1BQyBhZGRyZXNzIGlzIGluY2x1ZGVkIGluIFNST00gKi8KLQkJCQkJCWVhYnVmWzBdID0gMDsKLQkJCQkJCWJvYXJkbnVtID0gLTE7Ci0JCQkJCX0KLQkJCQkJLyogY3JlYXRlIGV4dHJhIHZhcmlhYmxlcyAqLwotCQkJCQlpZiAodGxlbiA+PSA3NSkKLQkJCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfdmVuZGlkLAotCQkJCQkJCSAgICAgIChjaXNbaSArIDEgKyA3M10KLQkJCQkJCQkgICAgICAgPDwgOCkgKyBjaXNbaSArCi0JCQkJCQkJCQkgICAxICsKLQkJCQkJCQkJCSAgIDcyXSk7Ci0JCQkJCWlmICh0bGVuID49IDc3KQotCQkJCQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl9kZXZpZCwKLQkJCQkJCQkgICAgICAoY2lzW2kgKyAxICsgNzVdCi0JCQkJCQkJICAgICAgIDw8IDgpICsgY2lzW2kgKwotCQkJCQkJCQkJICAgMSArCi0JCQkJCQkJCQkgICA3NF0pOwotCQkJCQlpZiAodGxlbiA+PSA3OSkKLQkJCQkJCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfeHRhbGZyZXEsCi0JCQkJCQkJICAgICAgKGNpc1tpICsgMSArIDc3XQotCQkJCQkJCSAgICAgICA8PCA4KSArIGNpc1tpICsKLQkJCQkJCQkJCSAgIDEgKwotCQkJCQkJCQkJICAgNzZdKTsKLQkJCQkJYnJlYWs7Ci0jZW5kaWYJCQkJLyogZGVmaW5lZChCQ01TRElPKSAqLwotCi0JCQkJY2FzZSBITkJVX0NDS0ZJTFRUWVBFOgotCQkJCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX2Nja2RpZ2ZpbHR0eXBlLAotCQkJCQkJICAgICAgKGNpc1tpICsgMV0pKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpICs9IHRsZW47Ci0JCX0gd2hpbGUgKHR1cCAhPSBDSVNUUExfRU5EKTsKLQl9Ci0KLQlpZiAoYm9hcmRudW0gIT0gLTEpIHsKLQkJdmFyYnVmX2FwcGVuZCgmYiwgdnN0cl9ib2FyZG51bSwgYm9hcmRudW0pOwotCX0KLQotCWlmIChlYWJ1ZlswXSkgewotCQl2YXJidWZfYXBwZW5kKCZiLCB2c3RyX21hY2FkZHIsIGVhYnVmKTsKLQl9Ci0KLQkvKiBpZiB0aGVyZSBpcyBubyBhbnRlbm5hIGdhaW4gZmllbGQsIHNldCBkZWZhdWx0ICovCi0JaWYgKGdldHZhcihOVUxMLCAiYWcwIikgPT0gTlVMTCAmJiBhZ19pbml0ID09IGZhbHNlKSB7Ci0JCXZhcmJ1Zl9hcHBlbmQoJmIsIHZzdHJfYWcsIDAsIDB4ZmYpOwotCX0KLQotCS8qIGZpbmFsIG51bGxieXRlIHRlcm1pbmF0b3IgKi8KLQlBU1NFUlQoYi5zaXplID49IDEpOwotCSpiLmJ1ZisrID0gJ1wwJzsKLQotCUFTU0VSVChiLmJ1ZiAtIGJhc2UgPD0gTUFYU1pfTlZSQU1fVkFSUyk7Ci0JZXJyID0gaW5pdHZhcnNfdGFibGUoYmFzZSwgYi5idWYsIHZhcnMsIGNvdW50KTsKLQotCWtmcmVlKGJhc2UpOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qIEluIGNoaXBzIHdpdGggY2hpcGNvbW1vbiByZXYgMzIgYW5kIGxhdGVyLCB0aGUgc3JvbSBpcyBpbiBjaGlwY29tbW9uLAotICogbm90IGluIHRoZSBidXMgY29yZXMuCi0gKi8KLXN0YXRpYyB1MTYKLXNyb21fY2NfY21kKHNpX3QgKnNpaCwgdm9pZCAqY2NyZWdzLCB1MzIgY21kLAotCSAgICB1aW50IHdvcmRvZmYsIHUxNiBkYXRhKQotewotCWNoaXBjcmVnc190ICpjYyA9IChjaGlwY3JlZ3NfdCAqKSBjY3JlZ3M7Ci0JdWludCB3YWl0X2NudCA9IDEwMDA7Ci0KLQlpZiAoKGNtZCA9PSBTUkNfT1BfUkVBRCkgfHwgKGNtZCA9PSBTUkNfT1BfV1JJVEUpKSB7Ci0JCVdfUkVHKCZjYy0+c3JvbWFkZHJlc3MsIHdvcmRvZmYgKiAyKTsKLQkJaWYgKGNtZCA9PSBTUkNfT1BfV1JJVEUpCi0JCQlXX1JFRygmY2MtPnNyb21kYXRhLCBkYXRhKTsKLQl9Ci0KLQlXX1JFRygmY2MtPnNyb21jb250cm9sLCBTUkNfU1RBUlQgfCBjbWQpOwotCi0Jd2hpbGUgKHdhaXRfY250LS0pIHsKLQkJaWYgKChSX1JFRygmY2MtPnNyb21jb250cm9sKSAmIFNSQ19CVVNZKSA9PSAwKQotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKCF3YWl0X2NudCkgewotCQlCU19FUlJPUigoIiVzOiBDb21tYW5kIDB4JXggdGltZWQgb3V0XG4iLCBfX2Z1bmNfXywgY21kKSk7Ci0JCXJldHVybiAweGZmZmY7Ci0JfQotCWlmIChjbWQgPT0gU1JDX09QX1JFQUQpCi0JCXJldHVybiAodTE2KSBSX1JFRygmY2MtPnNyb21kYXRhKTsKLQllbHNlCi0JCXJldHVybiAweGZmZmY7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBsdG9oMTZfYnVmKHUxNiAqYnVmLCB1bnNpZ25lZCBpbnQgc2l6ZSkKLXsKLQlmb3IgKHNpemUgLz0gMjsgc2l6ZTsgc2l6ZS0tKQotCQkqKGJ1ZiArIHNpemUpID0gbGUxNl90b19jcHUoKihidWYgKyBzaXplKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBodG9sMTZfYnVmKHUxNiAqYnVmLCB1bnNpZ25lZCBpbnQgc2l6ZSkKLXsKLQlmb3IgKHNpemUgLz0gMjsgc2l6ZTsgc2l6ZS0tKQotCQkqKGJ1ZiArIHNpemUpID0gY3B1X3RvX2xlMTYoKihidWYgKyBzaXplKSk7Ci19Ci0KLS8qCi0gKiBSZWFkIGluIGFuZCB2YWxpZGF0ZSBzcHJvbS4KLSAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG5vbnplcm8gb24gZXJyb3IuCi0gKi8KLXN0YXRpYyBpbnQKLXNwcm9tX3JlYWRfcGNpKHNpX3QgKnNpaCwgdTE2ICpzcHJvbSwgdWludCB3b3Jkb2ZmLAotCSAgICAgICB1MTYgKmJ1ZiwgdWludCBud29yZHMsIGJvb2wgY2hlY2tfY3JjKQotewotCWludCBlcnIgPSAwOwotCXVpbnQgaTsKLQl2b2lkICpjY3JlZ3MgPSBOVUxMOwotCi0JLyogcmVhZCB0aGUgc3Byb20gKi8KLQlmb3IgKGkgPSAwOyBpIDwgbndvcmRzOyBpKyspIHsKLQotCQlpZiAoc2loLT5jY3JldiA+IDMxICYmIElTU0lNX0VOQUIoc2loKSkgewotCQkJLyogdXNlIGluZGlyZWN0IHNpbmNlIGRpcmVjdCBpcyB0b28gc2xvdyBvbiBRVCAqLwotCQkJaWYgKChzaWgtPmNjY2FwcyAmIENDX0NBUF9TUk9NKSA9PSAwKQotCQkJCXJldHVybiAxOwotCi0JCQljY3JlZ3MgPSAodm9pZCAqKSgodTggKikgc3Byb20gLSBDQ19TUk9NX09UUCk7Ci0JCQlidWZbaV0gPQotCQkJICAgIHNyb21fY2NfY21kKHNpaCwgY2NyZWdzLCBTUkNfT1BfUkVBRCwKLQkJCQkJd29yZG9mZiArIGksIDApOwotCi0JCX0gZWxzZSB7Ci0JCQlpZiAoSVNTSU1fRU5BQihzaWgpKQotCQkJCWJ1ZltpXSA9IFJfUkVHKCZzcHJvbVt3b3Jkb2ZmICsgaV0pOwotCi0JCQlidWZbaV0gPSBSX1JFRygmc3Byb21bd29yZG9mZiArIGldKTsKLQkJfQotCi0JfQotCi0JLyogYnlwYXNzIGNyYyBjaGVja2luZyBmb3Igc2ltdWxhdGlvbiB0byBhbGxvdyBzcm9tIGhhY2sgKi8KLQlpZiAoSVNTSU1fRU5BQihzaWgpKQotCQlyZXR1cm4gZXJyOwotCi0JaWYgKGNoZWNrX2NyYykgewotCi0JCWlmIChidWZbMF0gPT0gMHhmZmZmKSB7Ci0JCQkvKiBUaGUgaGFyZHdhcmUgdGhpbmtzIHRoYXQgYW4gc3JvbSB0aGF0IHN0YXJ0cyB3aXRoIDB4ZmZmZgotCQkJICogaXMgYmxhbmssIHJlZ2FyZGxlc3Mgb2YgdGhlIHJlc3Qgb2YgdGhlIGNvbnRlbnQsIHNvIGRlY2xhcmUKLQkJCSAqIGl0IGJhZC4KLQkJCSAqLwotCQkJQlNfRVJST1IoKCIlczogYnVmWzBdID0gMHgleCwgcmV0dXJuaW5nIGJhZC1jcmNcbiIsCi0JCQkJICBfX2Z1bmNfXywgYnVmWzBdKSk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCi0JCS8qIGZpeHVwIHRoZSBlbmRpYW5uZXNzIHNvIGNyYzggd2lsbCBwYXNzICovCi0JCWh0b2wxNl9idWYoYnVmLCBud29yZHMgKiAyKTsKLQkJaWYgKGhuZGNyYzgoKHU4ICopIGJ1ZiwgbndvcmRzICogMiwgQ1JDOF9JTklUX1ZBTFVFKSAhPQotCQkgICAgQ1JDOF9HT09EX1ZBTFVFKSB7Ci0JCQkvKiBEQkcgb25seSBwY2kgYWx3YXlzIHJlYWQgc3JvbTQgZmlyc3QsIHRoZW4gc3JvbTgvOSAqLwotCQkJLyogQlNfRVJST1IoKCIlczogYmFkIGNyY1xuIiwgX19mdW5jX18pKTsgKi8KLQkJCWVyciA9IDE7Ci0JCX0KLQkJLyogbm93IGNvcnJlY3QgdGhlIGVuZGlhbm5lc3Mgb2YgdGhlIGJ5dGUgYXJyYXkgKi8KLQkJbHRvaDE2X2J1ZihidWYsIG53b3JkcyAqIDIpOwotCX0KLQlyZXR1cm4gZXJyOwotfQotCi0jaWYgZGVmaW5lZChCQ01OVlJBTVIpCi1zdGF0aWMgaW50IG90cF9yZWFkX3BjaShzaV90ICpzaWgsIHUxNiAqYnVmLCB1aW50IGJ1ZnN6KQotewotCXU4ICpvdHA7Ci0JdWludCBzeiA9IE9UUF9TWl9NQVggLyAyOwkvKiBzaXplIGluIHdvcmRzICovCi0JaW50IGVyciA9IDA7Ci0KLQlBU1NFUlQoYnVmc3ogPD0gT1RQX1NaX01BWCk7Ci0KLQlvdHAgPSBremFsbG9jKE9UUF9TWl9NQVgsIEdGUF9BVE9NSUMpOwotCWlmIChvdHAgPT0gTlVMTCkgewotCQlyZXR1cm4gQkNNRV9FUlJPUjsKLQl9Ci0KLQllcnIgPSBvdHBfcmVhZF9yZWdpb24oc2loLCBPVFBfSFdfUkdOLCAodTE2ICopIG90cCwgJnN6KTsKLQotCW1lbWNweShidWYsIG90cCwgYnVmc3opOwotCi0Ja2ZyZWUob3RwKTsKLQotCS8qIENoZWNrIENSQyAqLwotCWlmIChidWZbMF0gPT0gMHhmZmZmKSB7Ci0JCS8qIFRoZSBoYXJkd2FyZSB0aGlua3MgdGhhdCBhbiBzcm9tIHRoYXQgc3RhcnRzIHdpdGggMHhmZmZmCi0JCSAqIGlzIGJsYW5rLCByZWdhcmRsZXNzIG9mIHRoZSByZXN0IG9mIHRoZSBjb250ZW50LCBzbyBkZWNsYXJlCi0JCSAqIGl0IGJhZC4KLQkJICovCi0JCUJTX0VSUk9SKCgiJXM6IGJ1ZlswXSA9IDB4JXgsIHJldHVybmluZyBiYWQtY3JjXG4iLCBfX2Z1bmNfXywKLQkJCSAgYnVmWzBdKSk7Ci0JCXJldHVybiAxOwotCX0KLQotCS8qIGZpeHVwIHRoZSBlbmRpYW5uZXNzIHNvIGNyYzggd2lsbCBwYXNzICovCi0JaHRvbDE2X2J1ZihidWYsIGJ1ZnN6KTsKLQlpZiAoaG5kY3JjOCgodTggKikgYnVmLCBTUk9NNF9XT1JEUyAqIDIsIENSQzhfSU5JVF9WQUxVRSkgIT0KLQkgICAgQ1JDOF9HT09EX1ZBTFVFKSB7Ci0JCUJTX0VSUk9SKCgiJXM6IGJhZCBjcmNcbiIsIF9fZnVuY19fKSk7Ci0JCWVyciA9IDE7Ci0JfQotCS8qIG5vdyBjb3JyZWN0IHRoZSBlbmRpYW5uZXNzIG9mIHRoZSBieXRlIGFycmF5ICovCi0JbHRvaDE2X2J1ZihidWYsIGJ1ZnN6KTsKLQotCXJldHVybiBlcnI7Ci19Ci0jZW5kaWYJCQkJLyogZGVmaW5lZChCQ01OVlJBTVIpICovCi0vKgotKiBDcmVhdGUgdmFyaWFibGUgdGFibGUgZnJvbSBtZW1vcnkuCi0qIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG5vbnplcm8gb24gZXJyb3IuCi0qLwotc3RhdGljIGludCBpbml0dmFyc190YWJsZShjaGFyICpzdGFydCwgY2hhciAqZW5kLAotCQkJICBjaGFyICoqdmFycywgdWludCAqY291bnQpCi17Ci0JaW50IGMgPSAoaW50KShlbmQgLSBzdGFydCk7Ci0KLQkvKiBkbyBpdCBvbmx5IHdoZW4gdGhlcmUgaXMgbW9yZSB0aGFuIGp1c3QgdGhlIG51bGwgc3RyaW5nICovCi0JaWYgKGMgPiAxKSB7Ci0JCWNoYXIgKnZwID0ga21hbGxvYyhjLCBHRlBfQVRPTUlDKTsKLQkJQVNTRVJUKHZwICE9IE5VTEwpOwotCQlpZiAoIXZwKQotCQkJcmV0dXJuIEJDTUVfTk9NRU07Ci0JCW1lbWNweSh2cCwgc3RhcnQsIGMpOwotCQkqdmFycyA9IHZwOwotCQkqY291bnQgPSBjOwotCX0gZWxzZSB7Ci0JCSp2YXJzID0gTlVMTDsKLQkJKmNvdW50ID0gMDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEZpbmQgdmFyaWFibGVzIHdpdGggPGRldnBhdGg+IGZyb20gZmxhc2guICdiYXNlJyBwb2ludHMgdG8gdGhlIGJlZ2lubmluZwotICogb2YgdGhlIHRhYmxlIHVwb24gZW50ZXIgYW5kIHRvIHRoZSBlbmQgb2YgdGhlIHRhYmxlIHVwb24gZXhpdCB3aGVuIHN1Y2Nlc3MuCi0gKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBub256ZXJvIG9uIGVycm9yLgotICovCi1zdGF0aWMgaW50IGluaXR2YXJzX2ZsYXNoKHNpX3QgKnNpaCwgY2hhciAqKmJhc2UsIHVpbnQgbGVuKQotewotCWNoYXIgKnZwID0gKmJhc2U7Ci0JY2hhciAqZmxhc2g7Ci0JaW50IGVycjsKLQljaGFyICpzOwotCXVpbnQgbCwgZGwsIGNvcHlfbGVuOwotCWNoYXIgZGV2cGF0aFtTSV9ERVZQQVRIX0JVRlNaXTsKLQotCS8qIGFsbG9jYXRlIG1lbW9yeSBhbmQgcmVhZCBpbiBmbGFzaCAqLwotCWZsYXNoID0ga21hbGxvYyhOVlJBTV9TUEFDRSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFmbGFzaCkKLQkJcmV0dXJuIEJDTUVfTk9NRU07Ci0JZXJyID0gbnZyYW1fZ2V0YWxsKGZsYXNoLCBOVlJBTV9TUEFDRSk7Ci0JaWYgKGVycikKLQkJZ290byBleGl0OwotCi0Jc2lfZGV2cGF0aChzaWgsIGRldnBhdGgsIHNpemVvZihkZXZwYXRoKSk7Ci0KLQkvKiBncmFiIHZhcnMgd2l0aCB0aGUgPGRldnBhdGg+IHByZWZpeCBpbiBuYW1lICovCi0JZGwgPSBzdHJsZW4oZGV2cGF0aCk7Ci0JZm9yIChzID0gZmxhc2g7IHMgJiYgKnM7IHMgKz0gbCArIDEpIHsKLQkJbCA9IHN0cmxlbihzKTsKLQotCQkvKiBza2lwIG5vbi1tYXRjaGluZyB2YXJpYWJsZSAqLwotCQlpZiAoc3RybmNtcChzLCBkZXZwYXRoLCBkbCkpCi0JCQljb250aW51ZTsKLQotCQkvKiBpcyB0aGVyZSBlbm91Z2ggcm9vbSB0byBjb3B5PyAqLwotCQljb3B5X2xlbiA9IGwgLSBkbCArIDE7Ci0JCWlmIChsZW4gPCBjb3B5X2xlbikgewotCQkJZXJyID0gQkNNRV9CVUZUT09TSE9SVDsKLQkJCWdvdG8gZXhpdDsKLQkJfQotCi0JCS8qIG5vIHByZWZpeCwganVzdCB0aGUgbmFtZT12YWx1ZSAqLwotCQlzdHJuY3B5KHZwLCAmc1tkbF0sIGNvcHlfbGVuKTsKLQkJdnAgKz0gY29weV9sZW47Ci0JCWxlbiAtPSBjb3B5X2xlbjsKLQl9Ci0KLQkvKiBhZGQgbnVsbCBzdHJpbmcgYXMgdGVybWluYXRvciAqLwotCWlmIChsZW4gPCAxKSB7Ci0JCWVyciA9IEJDTUVfQlVGVE9PU0hPUlQ7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0JKnZwKysgPSAnXDAnOwotCi0JKmJhc2UgPSB2cDsKLQotIGV4aXQ6CWtmcmVlKGZsYXNoKTsKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogSW5pdGlhbGl6ZSBub252b2xhdGlsZSB2YXJpYWJsZSB0YWJsZSBmcm9tIGZsYXNoLgotICogUmV0dXJuIDAgb24gc3VjY2Vzcywgbm9uemVybyBvbiBlcnJvci4KLSAqLwotc3RhdGljIGludCBpbml0dmFyc19mbGFzaF9zaShzaV90ICpzaWgsIGNoYXIgKip2YXJzLCB1aW50ICpjb3VudCkKLXsKLQljaGFyICp2cCwgKmJhc2U7Ci0JaW50IGVycjsKLQotCUFTU0VSVCh2YXJzICE9IE5VTEwpOwotCUFTU0VSVChjb3VudCAhPSBOVUxMKTsKLQotCWJhc2UgPSB2cCA9IGttYWxsb2MoTUFYU1pfTlZSQU1fVkFSUywgR0ZQX0FUT01JQyk7Ci0JQVNTRVJUKHZwICE9IE5VTEwpOwotCWlmICghdnApCi0JCXJldHVybiBCQ01FX05PTUVNOwotCi0JZXJyID0gaW5pdHZhcnNfZmxhc2goc2loLCAmdnAsIE1BWFNaX05WUkFNX1ZBUlMpOwotCWlmIChlcnIgPT0gMCkKLQkJZXJyID0gaW5pdHZhcnNfdGFibGUoYmFzZSwgdnAsIHZhcnMsIGNvdW50KTsKLQotCWtmcmVlKGJhc2UpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotLyogUGFyc2UgU1JPTSBhbmQgY3JlYXRlIG5hbWU9dmFsdWUgcGFpcnMuICdzcm9tJyBwb2ludHMgdG8KLSAqIHRoZSBTUk9NIHdvcmQgYXJyYXkuICdvZmYnIHNwZWNpZmllcyB0aGUgb2Zmc2V0IG9mIHRoZQotICogZmlyc3Qgd29yZCAnc3JvbScgcG9pbnRzIHRvLCB3aGljaCBzaG91bGQgYmUgZWl0aGVyIDAgb3IKLSAqIFNST00zX1NXUkdfT0ZGIChmdWxsIFNST00gb3Igc29mdHdhcmUgcmVnaW9uKS4KLSAqLwotCi1zdGF0aWMgdWludCBtYXNrX3NoaWZ0KHUxNiBtYXNrKQotewotCXVpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgKHNpemVvZihtYXNrKSA8PCAzKTsgaSsrKSB7Ci0JCWlmIChtYXNrICYgKDEgPDwgaSkpCi0JCQlyZXR1cm4gaTsKLQl9Ci0JQVNTRVJUKG1hc2spOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdWludCBtYXNrX3dpZHRoKHUxNiBtYXNrKQotewotCWludCBpOwotCWZvciAoaSA9IChzaXplb2YobWFzaykgPDwgMykgLSAxOyBpID49IDA7IGktLSkgewotCQlpZiAobWFzayAmICgxIDw8IGkpKQotCQkJcmV0dXJuICh1aW50KSAoaSAtIG1hc2tfc2hpZnQobWFzaykgKyAxKTsKLQl9Ci0JQVNTRVJUKG1hc2spOwotCXJldHVybiAwOwotfQotCi0jaWYgZGVmaW5lZChCQ01EQkcpCi1zdGF0aWMgYm9vbCBtYXNrX3ZhbGlkKHUxNiBtYXNrKQotewotCXVpbnQgc2hpZnQgPSBtYXNrX3NoaWZ0KG1hc2spOwotCXVpbnQgd2lkdGggPSBtYXNrX3dpZHRoKG1hc2spOwotCXJldHVybiBtYXNrID09ICgofjAgPDwgc2hpZnQpICYgfih+MCA8PCAoc2hpZnQgKyB3aWR0aCkpKTsKLX0KLSNlbmRpZgkJCQkvKiBCQ01EQkcgKi8KLQotc3RhdGljIHZvaWQgX2luaXR2YXJzX3Nyb21fcGNpKHU4IHNyb21yZXYsIHUxNiAqc3JvbSwgdWludCBvZmYsIHZhcmJ1Zl90ICpiKQotewotCXUxNiB3OwotCXUzMiB2YWw7Ci0JY29uc3Qgc3JvbXZhcl90ICpzcnY7Ci0JdWludCB3aWR0aDsKLQl1aW50IGZsYWdzOwotCXUzMiBzciA9ICgxIDw8IHNyb21yZXYpOwotCi0JdmFyYnVmX2FwcGVuZChiLCAic3JvbXJldj0lZCIsIHNyb21yZXYpOwotCi0JZm9yIChzcnYgPSBwY2lfc3JvbXZhcnM7IHNydi0+bmFtZSAhPSBOVUxMOyBzcnYrKykgewotCQljb25zdCBjaGFyICpuYW1lOwotCi0JCWlmICgoc3J2LT5yZXZtYXNrICYgc3IpID09IDApCi0JCQljb250aW51ZTsKLQotCQlpZiAoc3J2LT5vZmYgPCBvZmYpCi0JCQljb250aW51ZTsKLQotCQlmbGFncyA9IHNydi0+ZmxhZ3M7Ci0JCW5hbWUgPSBzcnYtPm5hbWU7Ci0KLQkJLyogVGhpcyBlbnRyeSBpcyBmb3IgbWZnYyBvbmx5LiBEb24ndCBnZW5lcmF0ZSBwYXJhbSBmb3IgaXQsICovCi0JCWlmIChmbGFncyAmIFNSRkxfTk9WQVIpCi0JCQljb250aW51ZTsKLQotCQlpZiAoZmxhZ3MgJiBTUkZMX0VUSEFERFIpIHsKLQkJCXU4IGVhW0VUSF9BTEVOXTsKLQotCQkJZWFbMF0gPSAoc3JvbVtzcnYtPm9mZiAtIG9mZl0gPj4gOCkgJiAweGZmOwotCQkJZWFbMV0gPSBzcm9tW3Nydi0+b2ZmIC0gb2ZmXSAmIDB4ZmY7Ci0JCQllYVsyXSA9IChzcm9tW3Nydi0+b2ZmICsgMSAtIG9mZl0gPj4gOCkgJiAweGZmOwotCQkJZWFbM10gPSBzcm9tW3Nydi0+b2ZmICsgMSAtIG9mZl0gJiAweGZmOwotCQkJZWFbNF0gPSAoc3JvbVtzcnYtPm9mZiArIDIgLSBvZmZdID4+IDgpICYgMHhmZjsKLQkJCWVhWzVdID0gc3JvbVtzcnYtPm9mZiArIDIgLSBvZmZdICYgMHhmZjsKLQotCQkJdmFyYnVmX2FwcGVuZChiLCAiJXM9JXBNIiwgbmFtZSwgZWEpOwotCQl9IGVsc2UgewotCQkJQVNTRVJUKG1hc2tfdmFsaWQoc3J2LT5tYXNrKSk7Ci0JCQlBU1NFUlQobWFza193aWR0aChzcnYtPm1hc2spKTsKLQotCQkJdyA9IHNyb21bc3J2LT5vZmYgLSBvZmZdOwotCQkJdmFsID0gKHcgJiBzcnYtPm1hc2spID4+IG1hc2tfc2hpZnQoc3J2LT5tYXNrKTsKLQkJCXdpZHRoID0gbWFza193aWR0aChzcnYtPm1hc2spOwotCi0JCQl3aGlsZSAoc3J2LT5mbGFncyAmIFNSRkxfTU9SRSkgewotCQkJCXNydisrOwotCQkJCUFTU0VSVChzcnYtPm5hbWUgIT0gTlVMTCk7Ci0KLQkJCQlpZiAoc3J2LT5vZmYgPT0gMCB8fCBzcnYtPm9mZiA8IG9mZikKLQkJCQkJY29udGludWU7Ci0KLQkJCQlBU1NFUlQobWFza192YWxpZChzcnYtPm1hc2spKTsKLQkJCQlBU1NFUlQobWFza193aWR0aChzcnYtPm1hc2spKTsKLQotCQkJCXcgPSBzcm9tW3Nydi0+b2ZmIC0gb2ZmXTsKLQkJCQl2YWwgKz0KLQkJCQkgICAgKCh3ICYgc3J2LT5tYXNrKSA+PiBtYXNrX3NoaWZ0KHNydi0+Ci0JCQkJCQkJCSAgIG1hc2spKSA8PAotCQkJCSAgICB3aWR0aDsKLQkJCQl3aWR0aCArPSBtYXNrX3dpZHRoKHNydi0+bWFzayk7Ci0JCQl9Ci0KLQkJCWlmICgoZmxhZ3MgJiBTUkZMX05PRkZTKQotCQkJICAgICYmICgoaW50KXZhbCA9PSAoMSA8PCB3aWR0aCkgLSAxKSkKLQkJCQljb250aW51ZTsKLQotCQkJaWYgKGZsYWdzICYgU1JGTF9DQ09ERSkgewotCQkJCWlmICh2YWwgPT0gMCkKLQkJCQkJdmFyYnVmX2FwcGVuZChiLCAiY2NvZGU9Iik7Ci0JCQkJZWxzZQotCQkJCQl2YXJidWZfYXBwZW5kKGIsICJjY29kZT0lYyVjIiwKLQkJCQkJCSAgICAgICh2YWwgPj4gOCksICh2YWwgJiAweGZmKSk7Ci0JCQl9Ci0JCQkvKiBMRUQgUG93ZXJzYXZlIGR1dHkgY3ljbGUgaGFzIHRvIGJlIHNjYWxlZDoKLQkJCSAqKG9uY291bnQgPj4gMjQpIChvZmZjb3VudCA+PiA4KQotCQkJICovCi0JCQllbHNlIGlmIChmbGFncyAmIFNSRkxfTEVEREMpIHsKLQkJCQl1MzIgdzMyID0gKCgodmFsID4+IDgpICYgMHhmZikgPDwgMjQpIHwJLyogb25jb3VudCAqLwotCQkJCSAgICAoKCh2YWwgJiAweGZmKSkgPDwgOCk7CS8qIG9mZmNvdW50ICovCi0JCQkJdmFyYnVmX2FwcGVuZChiLCAibGVkZGM9JWQiLCB3MzIpOwotCQkJfSBlbHNlIGlmIChmbGFncyAmIFNSRkxfUFJIRVgpCi0JCQkJdmFyYnVmX2FwcGVuZChiLCAiJXM9MHgleCIsIG5hbWUsIHZhbCk7Ci0JCQllbHNlIGlmICgoZmxhZ3MgJiBTUkZMX1BSU0lHTikKLQkJCQkgJiYgKHZhbCAmICgxIDw8ICh3aWR0aCAtIDEpKSkpCi0JCQkJdmFyYnVmX2FwcGVuZChiLCAiJXM9JWQiLCBuYW1lLAotCQkJCQkgICAgICAoaW50KSh2YWwgfCAofjAgPDwgd2lkdGgpKSk7Ci0JCQllbHNlCi0JCQkJdmFyYnVmX2FwcGVuZChiLCAiJXM9JXUiLCBuYW1lLCB2YWwpOwotCQl9Ci0JfQotCi0JaWYgKHNyb21yZXYgPj0gNCkgewotCQkvKiBEbyBwZXItcGF0aCB2YXJpYWJsZXMgKi8KLQkJdWludCBwLCBwYiwgcHN6OwotCi0JCWlmIChzcm9tcmV2ID49IDgpIHsKLQkJCXBiID0gU1JPTThfUEFUSDA7Ci0JCQlwc3ogPSBTUk9NOF9QQVRIMSAtIFNST004X1BBVEgwOwotCQl9IGVsc2UgewotCQkJcGIgPSBTUk9NNF9QQVRIMDsKLQkJCXBzeiA9IFNST000X1BBVEgxIC0gU1JPTTRfUEFUSDA7Ci0JCX0KLQotCQlmb3IgKHAgPSAwOyBwIDwgTUFYX1BBVEhfU1JPTTsgcCsrKSB7Ci0JCQlmb3IgKHNydiA9IHBlcnBhdGhfcGNpX3Nyb212YXJzOyBzcnYtPm5hbWUgIT0gTlVMTDsKLQkJCSAgICAgc3J2KyspIHsKLQkJCQlpZiAoKHNydi0+cmV2bWFzayAmIHNyKSA9PSAwKQotCQkJCQljb250aW51ZTsKLQotCQkJCWlmIChwYiArIHNydi0+b2ZmIDwgb2ZmKQotCQkJCQljb250aW51ZTsKLQotCQkJCS8qIFRoaXMgZW50cnkgaXMgZm9yIG1mZ2Mgb25seS4gRG9uJ3QgZ2VuZXJhdGUgcGFyYW0gZm9yIGl0LCAqLwotCQkJCWlmIChzcnYtPmZsYWdzICYgU1JGTF9OT1ZBUikKLQkJCQkJY29udGludWU7Ci0KLQkJCQl3ID0gc3JvbVtwYiArIHNydi0+b2ZmIC0gb2ZmXTsKLQotCQkJCUFTU0VSVChtYXNrX3ZhbGlkKHNydi0+bWFzaykpOwotCQkJCXZhbCA9ICh3ICYgc3J2LT5tYXNrKSA+PiBtYXNrX3NoaWZ0KHNydi0+bWFzayk7Ci0JCQkJd2lkdGggPSBtYXNrX3dpZHRoKHNydi0+bWFzayk7Ci0KLQkJCQkvKiBDaGVhdGluZzogbm8gcGVyLXBhdGggdmFyIGlzIG1vcmUgdGhhbiAxIHdvcmQgKi8KLQotCQkJCWlmICgoc3J2LT5mbGFncyAmIFNSRkxfTk9GRlMpCi0JCQkJICAgICYmICgoaW50KXZhbCA9PSAoMSA8PCB3aWR0aCkgLSAxKSkKLQkJCQkJY29udGludWU7Ci0KLQkJCQlpZiAoc3J2LT5mbGFncyAmIFNSRkxfUFJIRVgpCi0JCQkJCXZhcmJ1Zl9hcHBlbmQoYiwgIiVzJWQ9MHgleCIsIHNydi0+bmFtZSwKLQkJCQkJCSAgICAgIHAsIHZhbCk7Ci0JCQkJZWxzZQotCQkJCQl2YXJidWZfYXBwZW5kKGIsICIlcyVkPSVkIiwgc3J2LT5uYW1lLAotCQkJCQkJICAgICAgcCwgdmFsKTsKLQkJCX0KLQkJCXBiICs9IHBzejsKLQkJfQotCX0KLX0KLQotLyoKLSAqIEluaXRpYWxpemUgbm9udm9sYXRpbGUgdmFyaWFibGUgdGFibGUgZnJvbSBzcHJvbS4KLSAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG5vbnplcm8gb24gZXJyb3IuCi0gKi8KLXN0YXRpYyBpbnQgaW5pdHZhcnNfc3JvbV9wY2koc2lfdCAqc2loLCB2b2lkICpjdXJtYXAsIGNoYXIgKip2YXJzLCB1aW50ICpjb3VudCkKLXsKLQl1MTYgKnNyb20sICpzcm9td2luZG93OwotCXU4IHNyb21yZXYgPSAwOwotCXUzMiBzcjsKLQl2YXJidWZfdCBiOwotCWNoYXIgKnZwLCAqYmFzZSA9IE5VTEw7Ci0JYm9vbCBmbGFzaCA9IGZhbHNlOwotCWludCBlcnIgPSAwOwotCi0JLyoKLQkgKiBBcHBseSBDUkMgb3ZlciBTUk9NIGNvbnRlbnQgcmVnYXJkbGVzcyBTUk9NIGlzIHByZXNlbnQgb3Igbm90LAotCSAqIGFuZCB1c2UgdmFyaWFibGUgPGRldnBhdGg+c3JvbXJldidzIGV4aXN0ZW5jZSBpbiBmbGFzaCB0byBkZWNpZGUKLQkgKiBpZiB3ZSBzaG91bGQgcmV0dXJuIGFuIGVycm9yIHdoZW4gQ1JDIGZhaWxzIG9yIHJlYWQgU1JPTSB2YXJpYWJsZXMKLQkgKiBmcm9tIGZsYXNoLgotCSAqLwotCXNyb20gPSBrbWFsbG9jKFNST01fTUFYLCBHRlBfQVRPTUlDKTsKLQlBU1NFUlQoc3JvbSAhPSBOVUxMKTsKLQlpZiAoIXNyb20pCi0JCXJldHVybiAtMjsKLQotCXNyb213aW5kb3cgPSAodTE2ICopIFNST01fT0ZGU0VUKHNpaCk7Ci0JaWYgKHNpX2lzX3Nwcm9tX2F2YWlsYWJsZShzaWgpKSB7Ci0JCWVyciA9Ci0JCSAgICBzcHJvbV9yZWFkX3BjaShzaWgsIHNyb213aW5kb3csIDAsIHNyb20sIFNST01fV09SRFMsCi0JCQkJICAgdHJ1ZSk7Ci0KLQkJaWYgKChzcm9tW1NST000X1NJR05dID09IFNST000X1NJR05BVFVSRSkgfHwKLQkJICAgICgoKHNpaC0+YnVzY29yZXR5cGUgPT0gUENJRV9DT1JFX0lEKQotCQkgICAgICAmJiAoc2loLT5idXNjb3JlcmV2ID49IDYpKQotCQkgICAgIHx8ICgoc2loLT5idXNjb3JldHlwZSA9PSBQQ0lfQ09SRV9JRCkKLQkJCSAmJiAoc2loLT5idXNjb3JlcmV2ID49IDB4ZSkpKSkgewotCQkJLyogc3JvbXJldiA+PSA0LCByZWFkIG1vcmUgKi8KLQkJCWVyciA9Ci0JCQkgICAgc3Byb21fcmVhZF9wY2koc2loLCBzcm9td2luZG93LCAwLCBzcm9tLAotCQkJCQkgICBTUk9NNF9XT1JEUywgdHJ1ZSk7Ci0JCQlzcm9tcmV2ID0gc3JvbVtTUk9NNF9DUkNSRVZdICYgMHhmZjsKLQkJCWlmIChlcnIpCi0JCQkJQlNfRVJST1IoKCIlczogc3JvbSAlZCwgYmFkIGNyY1xuIiwgX19mdW5jX18sCi0JCQkJCSAgc3JvbXJldikpOwotCi0JCX0gZWxzZSBpZiAoZXJyID09IDApIHsKLQkJCS8qIHNyb20gaXMgZ29vZCBhbmQgaXMgcmV2IDwgNCAqLwotCQkJLyogdG9wIHdvcmQgb2Ygc3Byb20gY29udGFpbnMgdmVyc2lvbiBhbmQgY3JjOCAqLwotCQkJc3JvbXJldiA9IHNyb21bU1JPTV9DUkNSRVZdICYgMHhmZjsKLQkJCS8qIGJjbTQ0MDEgc3JvbXMgbWlzcHJvZ3JhbW1lZCAqLwotCQkJaWYgKHNyb21yZXYgPT0gMHgxMCkKLQkJCQlzcm9tcmV2ID0gMTsKLQkJfQotCX0KLSNpZiBkZWZpbmVkKEJDTU5WUkFNUikKLQkvKiBVc2UgT1RQIGlmIFNQUk9NIG5vdCBhdmFpbGFibGUgKi8KLQllbHNlIHsKLQkJZXJyID0gb3RwX3JlYWRfcGNpKHNpaCwgc3JvbSwgU1JPTV9NQVgpOwotCQlpZiAoZXJyID09IDApCi0JCQkvKiBPVFAgb25seSBjb250YWluIFNST00gcmV2OC9yZXY5IGZvciBub3cgKi8KLQkJCXNyb21yZXYgPSBzcm9tW1NST000X0NSQ1JFVl0gJiAweGZmOwotCQllbHNlCi0JCQllcnIgPSAxOwotCX0KLSNlbHNlCi0JZWxzZQotCQllcnIgPSAxOwotI2VuZGlmCi0KLQkvKgotCSAqIFdlIHdhbnQgaW50ZXJuYWwvd2x0ZXN0IGRyaXZlciB0byBjb21lIHVwIHdpdGggZGVmYXVsdAotCSAqIHNyb212YXJzIHNvIHdlIGNhbiBwcm9ncmFtIGEgYmxhbmsgU1BST00vT1RQLgotCSAqLwotCWlmIChlcnIpIHsKLQkJY2hhciAqdmFsdWU7Ci0JCXUzMiB2YWw7Ci0JCXZhbCA9IDA7Ci0KLQkJQlNfRVJST1IoKCJOZWl0aGVyIFNQUk9NIG5vciBPVFAgaGFzIHZhbGlkIGltYWdlXG4iKSk7Ci0JCXZhbHVlID0gc2lfZ2V0ZGV2cGF0aHZhcihzaWgsICJzcm9tcmV2Iik7Ci0JCWlmICh2YWx1ZSkgewotCQkJc3JvbXJldiA9ICh1OCkgc2ltcGxlX3N0cnRvdWwodmFsdWUsIE5VTEwsIDApOwotCQkJZmxhc2ggPSB0cnVlOwotCQkJZ290byB2YXJzY29udDsKLQkJfQotCi0JCUJTX0VSUk9SKCgiJXMsIFNST00gQ1JDIEVycm9yXG4iLCBfX2Z1bmNfXykpOwotCi0JCXZhbHVlID0gc2lfZ2V0bnZyYW1mbHZhcihzaWgsICJzcm9tcmV2Iik7Ci0JCWlmICh2YWx1ZSkgewotCQkJZXJyID0gMDsKLQkJCWdvdG8gZXJyb3V0OwotCQl9Ci0KLQkJewotCQkJZXJyID0gLTE7Ci0JCQlnb3RvIGVycm91dDsKLQkJfQotCX0KLQotIHZhcnNjb250OgotCS8qIEJpdG1hc2sgZm9yIHRoZSBzcm9tcmV2ICovCi0Jc3IgPSAxIDw8IHNyb21yZXY7Ci0KLQkvKiBzcm9tIHZlcnNpb24gY2hlY2s6IEN1cnJlbnQgdmFsaWQgdmVyc2lvbnM6IDEsIDIsIDMsIDQsIDUsIDgsIDkgKi8KLQlpZiAoKHNyICYgMHgzM2UpID09IDApIHsKLQkJZXJyID0gLTI7Ci0JCWdvdG8gZXJyb3V0OwotCX0KLQotCUFTU0VSVCh2YXJzICE9IE5VTEwpOwotCUFTU0VSVChjb3VudCAhPSBOVUxMKTsKLQotCWJhc2UgPSB2cCA9IGttYWxsb2MoTUFYU1pfTlZSQU1fVkFSUywgR0ZQX0FUT01JQyk7Ci0JQVNTRVJUKHZwICE9IE5VTEwpOwotCWlmICghdnApIHsKLQkJZXJyID0gLTI7Ci0JCWdvdG8gZXJyb3V0OwotCX0KLQotCS8qIHJlYWQgdmFyaWFibGVzIGZyb20gZmxhc2ggKi8KLQlpZiAoZmxhc2gpIHsKLQkJZXJyID0gaW5pdHZhcnNfZmxhc2goc2loLCAmdnAsIE1BWFNaX05WUkFNX1ZBUlMpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJvdXQ7Ci0JCWdvdG8gdmFyc2RvbmU7Ci0JfQotCi0JdmFyYnVmX2luaXQoJmIsIGJhc2UsIE1BWFNaX05WUkFNX1ZBUlMpOwotCi0JLyogcGFyc2UgU1JPTSBpbnRvIG5hbWU9dmFsdWUgcGFpcnMuICovCi0JX2luaXR2YXJzX3Nyb21fcGNpKHNyb21yZXYsIHNyb20sIDAsICZiKTsKLQotCS8qIGZpbmFsIG51bGxieXRlIHRlcm1pbmF0b3IgKi8KLQlBU1NFUlQoYi5zaXplID49IDEpOwotCXZwID0gYi5idWY7Ci0JKnZwKysgPSAnXDAnOwotCi0JQVNTRVJUKCh2cCAtIGJhc2UpIDw9IE1BWFNaX05WUkFNX1ZBUlMpOwotCi0gdmFyc2RvbmU6Ci0JZXJyID0gaW5pdHZhcnNfdGFibGUoYmFzZSwgdnAsIHZhcnMsIGNvdW50KTsKLQotIGVycm91dDoKLQlpZiAoYmFzZSkKLQkJa2ZyZWUoYmFzZSk7Ci0KLQlrZnJlZShzcm9tKTsKLQlyZXR1cm4gZXJyOwotfQotCi0jaWZkZWYgQkNNU0RJTwotLyoKLSAqIFJlYWQgdGhlIFNESU8gY2lzIGFuZCBjYWxsIHBhcnNlY2lzIHRvIGluaXRpYWxpemUgdGhlIHZhcnMuCi0gKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBub256ZXJvIG9uIGVycm9yLgotICovCi1zdGF0aWMgaW50IGluaXR2YXJzX2Npc19zZGlvKGNoYXIgKip2YXJzLCB1aW50ICpjb3VudCkKLXsKLQl1OCAqY2lzW1NCU0RJT19OVU1fRlVOQ1RJT04gKyAxXTsKLQl1aW50IGZuLCBudW1mbjsKLQlpbnQgcmMgPSAwOwotCi0JbnVtZm4gPSBiY21zZGhfcXVlcnlfaW9mbnVtKE5VTEwpOwotCUFTU0VSVChudW1mbiA8PSBTRElPRF9NQVhfSU9GVU5DUyk7Ci0KLQlmb3IgKGZuID0gMDsgZm4gPD0gbnVtZm47IGZuKyspIHsKLQkJY2lzW2ZuXSA9IGt6YWxsb2MoU0JTRElPX0NJU19TSVpFX0xJTUlULCBHRlBfQVRPTUlDKTsKLQkJaWYgKGNpc1tmbl0gPT0gTlVMTCkgewotCQkJcmMgPSAtMTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKGJjbXNkaF9jaXNfcmVhZChOVUxMLCBmbiwgY2lzW2ZuXSwgU0JTRElPX0NJU19TSVpFX0xJTUlUKSAhPQotCQkgICAgMCkgewotCQkJa2ZyZWUoY2lzW2ZuXSk7Ci0JCQlyYyA9IC0yOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAoIXJjKQotCQlyYyA9IHNyb21fcGFyc2VjaXMoY2lzLCBmbiwgdmFycywgY291bnQpOwotCi0Jd2hpbGUgKGZuLS0gPiAwKQotCQlrZnJlZShjaXNbZm5dKTsKLQotCXJldHVybiByYzsKLX0KLQotLyogc2V0IFNESU8gc3Byb20gY29tbWFuZCByZWdpc3RlciAqLwotc3RhdGljIGludCBzcHJvbV9jbWRfc2Rpbyh1OCBjbWQpCi17Ci0JdTggc3RhdHVzID0gMDsKLQl1aW50IHdhaXRfY250ID0gMTAwMDsKLQotCS8qIHdyaXRlIHNwcm9tIGNvbW1hbmQgcmVnaXN0ZXIgKi8KLQliY21zZGhfY2ZnX3dyaXRlKE5VTEwsIFNESU9fRlVOQ18xLCBTQlNESU9fU1BST01fQ1MsIGNtZCwgTlVMTCk7Ci0KLQkvKiB3YWl0IHN0YXR1cyAqLwotCXdoaWxlICh3YWl0X2NudC0tKSB7Ci0JCXN0YXR1cyA9Ci0JCSAgICBiY21zZGhfY2ZnX3JlYWQoTlVMTCwgU0RJT19GVU5DXzEsIFNCU0RJT19TUFJPTV9DUywgTlVMTCk7Ci0JCWlmIChzdGF0dXMgJiBTQlNESU9fU1BST01fRE9ORSkKLQkJCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwotfQotCi0vKiByZWFkIGEgd29yZCBmcm9tIHRoZSBTRElPIHNyb20gKi8KLXN0YXRpYyBpbnQgc3Byb21fcmVhZF9zZGlvKHUxNiBhZGRyLCB1MTYgKmRhdGEpCi17Ci0JdTggYWRkcl9sLCBhZGRyX2gsIGRhdGFfbCwgZGF0YV9oOwotCi0JYWRkcl9sID0gKHU4KSAoKGFkZHIgKiAyKSAmIDB4ZmYpOwotCWFkZHJfaCA9ICh1OCkgKCgoYWRkciAqIDIpID4+IDgpICYgMHhmZik7Ci0KLQkvKiBzZXQgYWRkcmVzcyAqLwotCWJjbXNkaF9jZmdfd3JpdGUoTlVMTCwgU0RJT19GVU5DXzEsIFNCU0RJT19TUFJPTV9BRERSX0hJR0gsIGFkZHJfaCwKLQkJCSBOVUxMKTsKLQliY21zZGhfY2ZnX3dyaXRlKE5VTEwsIFNESU9fRlVOQ18xLCBTQlNESU9fU1BST01fQUREUl9MT1csIGFkZHJfbCwKLQkJCSBOVUxMKTsKLQotCS8qIGRvIHJlYWQgKi8KLQlpZiAoc3Byb21fY21kX3NkaW8oU0JTRElPX1NQUk9NX1JFQUQpKQotCQlyZXR1cm4gMTsKLQotCS8qIHJlYWQgZGF0YSAqLwotCWRhdGFfaCA9Ci0JICAgIGJjbXNkaF9jZmdfcmVhZChOVUxMLCBTRElPX0ZVTkNfMSwgU0JTRElPX1NQUk9NX0RBVEFfSElHSCwgTlVMTCk7Ci0JZGF0YV9sID0KLQkgICAgYmNtc2RoX2NmZ19yZWFkKE5VTEwsIFNESU9fRlVOQ18xLCBTQlNESU9fU1BST01fREFUQV9MT1csIE5VTEwpOwotCi0JKmRhdGEgPSAoZGF0YV9oIDw8IDgpIHwgZGF0YV9sOwotCXJldHVybiAwOwotfQotI2VuZGlmCQkJCS8qIEJDTVNESU8gKi8KLQotc3RhdGljIGludCBpbml0dmFyc19zcm9tX3NpKHNpX3QgKnNpaCwgdm9pZCAqY3VybWFwLCBjaGFyICoqdmFycywgdWludCAqdmFyc3opCi17Ci0JLyogU2VhcmNoIGZsYXNoIG52cmFtIHNlY3Rpb24gZm9yIHNyb20gdmFyaWFibGVzICovCi0JcmV0dXJuIGluaXR2YXJzX2ZsYXNoX3NpKHNpaCwgdmFycywgdmFyc3opOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS91dGlsL2JjbXV0aWxzLmMgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvYmNtdXRpbHMuYwppbmRleCBmYjBiY2NjLi40M2U1YmIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvYmNtdXRpbHMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvYmNtdXRpbHMuYwpAQCAtMjEsMTggKzIxLDIwIEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmludGsuaD4KICNpbmNsdWRlIDxiY21kZWZzLmg+CiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSA8YmNtdXRpbHMuaD4KLSNpbmNsdWRlIDxzaXV0aWxzLmg+CiAjaW5jbHVkZSA8YmNtbnZyYW0uaD4KICNpbmNsdWRlIDxiY21kZXZzLmg+CiAjaW5jbHVkZSA8cHJvdG8vODAyLjExLmg+CiAKLS8qIEdsb2JhbCBBU1NFUlQgdHlwZSBmbGFnICovCi11MzIgZ19hc3NlcnRfdHlwZTsKK01PRFVMRV9BVVRIT1IoIkJyb2FkY29tIENvcnBvcmF0aW9uIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkJyb2FkY29tIDgwMi4xMW4gd2lyZWxlc3MgTEFOIGRyaXZlciB1dGlsaXRpZXMuIik7CitNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiQnJvYWRjb20gODAyLjExbiBXTEFOIGNhcmRzIik7CitNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CiAKLXN0cnVjdCBza19idWZmICpCQ01GQVNUUEFUSCBwa3RfYnVmX2dldF9za2IodWludCBsZW4pCitzdHJ1Y3Qgc2tfYnVmZiAqYmNtX3BrdF9idWZfZ2V0X3NrYih1aW50IGxlbikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCkBAIC00NCwxNSArNDYsMTQgQEAKIAogCXJldHVybiBza2I7CiB9CitFWFBPUlRfU1lNQk9MKGJjbV9wa3RfYnVmX2dldF9za2IpOwogCiAvKiBGcmVlIHRoZSBkcml2ZXIgcGFja2V0LiBGcmVlIHRoZSB0YWcgaWYgcHJlc2VudCAqLwotdm9pZCBCQ01GQVNUUEFUSCBwa3RfYnVmX2ZyZWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpCit2b2lkIGJjbV9wa3RfYnVmX2ZyZWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKm5za2I7CiAJaW50IG5lc3QgPSAwOwogCi0JQVNTRVJUKHNrYik7Ci0KIAkvKiBwZXJ2ZXJzaW9uOiB3ZSB1c2Ugc2tiLT5uZXh0IHRvIGNoYWluIG11bHRpLXNrYiBwYWNrZXRzICovCiAJd2hpbGUgKHNrYikgewogCQluc2tiID0gc2tiLT5uZXh0OwpAQCAtNzMsOSArNzQsMTEgQEAKIAkJc2tiID0gbnNrYjsKIAl9CiB9CitFWFBPUlRfU1lNQk9MKGJjbV9wa3RfYnVmX2ZyZWVfc2tiKTsKKwogCiAvKiBjb3B5IGEgYnVmZmVyIGludG8gYSBwa3QgYnVmZmVyIGNoYWluICovCi11aW50IHBrdGZyb21idWYoc3RydWN0IHNrX2J1ZmYgKnAsIHVpbnQgb2Zmc2V0LCBpbnQgbGVuLAordWludCBiY21fcGt0ZnJvbWJ1ZihzdHJ1Y3Qgc2tfYnVmZiAqcCwgdWludCBvZmZzZXQsIGludCBsZW4sCiAJCXVuc2lnbmVkIGNoYXIgKmJ1ZikKIHsKIAl1aW50IG4sIHJldCA9IDA7CkBAIC0xMDIsOCArMTA1LDEwIEBACiAKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTChiY21fcGt0ZnJvbWJ1Zik7CisKIC8qIHJldHVybiB0b3RhbCBsZW5ndGggb2YgYnVmZmVyIGNoYWluICovCi11aW50IEJDTUZBU1RQQVRIIHBrdHRvdGxlbihzdHJ1Y3Qgc2tfYnVmZiAqcCkKK3VpbnQgYmNtX3BrdHRvdGxlbihzdHJ1Y3Qgc2tfYnVmZiAqcCkKIHsKIAl1aW50IHRvdGFsOwogCkBAIC0xMTIsMjEgKzExNywxOSBAQAogCQl0b3RhbCArPSBwLT5sZW47CiAJcmV0dXJuIHRvdGFsOwogfQorRVhQT1JUX1NZTUJPTChiY21fcGt0dG90bGVuKTsKIAogLyoKICAqIG9zbCBtdWx0aXBsZS1wcmVjZWRlbmNlIHBhY2tldCBxdWV1ZQogICogaGlfcHJlYyBpcyBhbHdheXMgPj0gdGhlIG51bWJlciBvZiB0aGUgaGlnaGVzdCBub24tZW1wdHkgcHJlY2VkZW5jZQogICovCi1zdHJ1Y3Qgc2tfYnVmZiAqQkNNRkFTVFBBVEggcGt0cV9wZW5xKHN0cnVjdCBwa3RxICpwcSwgaW50IHByZWMsCitzdHJ1Y3Qgc2tfYnVmZiAqYmNtX3BrdHFfcGVucShzdHJ1Y3QgcGt0cSAqcHEsIGludCBwcmVjLAogCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpwKQogewogCXN0cnVjdCBwa3RxX3ByZWMgKnE7CiAKLQlBU1NFUlQocHJlYyA+PSAwICYmIHByZWMgPCBwcS0+bnVtX3ByZWMpOwotCUFTU0VSVChwLT5wcmV2ID09IE5VTEwpOwkvKiBxdWV1ZWluZyBjaGFpbnMgbm90IGFsbG93ZWQgKi8KLQotCUFTU0VSVCghcGt0cV9mdWxsKHBxKSk7Ci0JQVNTRVJUKCFwa3RxX3BmdWxsKHBxLCBwcmVjKSk7CisJaWYgKHBrdHFfZnVsbChwcSkgfHwgcGt0cV9wZnVsbChwcSwgcHJlYykpCisJCXJldHVybiBOVUxMOwogCiAJcSA9ICZwcS0+cVtwcmVjXTsKIApAQCAtMTQ1LDE3ICsxNDgsMTUgQEAKIAogCXJldHVybiBwOwogfQorRVhQT1JUX1NZTUJPTChiY21fcGt0cV9wZW5xKTsKIAotc3RydWN0IHNrX2J1ZmYgKkJDTUZBU1RQQVRIIHBrdHFfcGVucV9oZWFkKHN0cnVjdCBwa3RxICpwcSwgaW50IHByZWMsCitzdHJ1Y3Qgc2tfYnVmZiAqYmNtX3BrdHFfcGVucV9oZWFkKHN0cnVjdCBwa3RxICpwcSwgaW50IHByZWMsCiAJCQkJCSAgIHN0cnVjdCBza19idWZmICpwKQogewogCXN0cnVjdCBwa3RxX3ByZWMgKnE7CiAKLQlBU1NFUlQocHJlYyA+PSAwICYmIHByZWMgPCBwcS0+bnVtX3ByZWMpOwotCUFTU0VSVChwLT5wcmV2ID09IE5VTEwpOwkvKiBxdWV1ZWluZyBjaGFpbnMgbm90IGFsbG93ZWQgKi8KLQotCUFTU0VSVCghcGt0cV9mdWxsKHBxKSk7Ci0JQVNTRVJUKCFwa3RxX3BmdWxsKHBxLCBwcmVjKSk7CisJaWYgKHBrdHFfZnVsbChwcSkgfHwgcGt0cV9wZnVsbChwcSwgcHJlYykpCisJCXJldHVybiBOVUxMOwogCiAJcSA9ICZwcS0+cVtwcmVjXTsKIApAQCAtMTczLDE0ICsxNzQsMTMgQEAKIAogCXJldHVybiBwOwogfQorRVhQT1JUX1NZTUJPTChiY21fcGt0cV9wZW5xX2hlYWQpOwogCi1zdHJ1Y3Qgc2tfYnVmZiAqQkNNRkFTVFBBVEggcGt0cV9wZGVxKHN0cnVjdCBwa3RxICpwcSwgaW50IHByZWMpCitzdHJ1Y3Qgc2tfYnVmZiAqYmNtX3BrdHFfcGRlcShzdHJ1Y3QgcGt0cSAqcHEsIGludCBwcmVjKQogewogCXN0cnVjdCBwa3RxX3ByZWMgKnE7CiAJc3RydWN0IHNrX2J1ZmYgKnA7CiAKLQlBU1NFUlQocHJlYyA+PSAwICYmIHByZWMgPCBwcS0+bnVtX3ByZWMpOwotCiAJcSA9ICZwcS0+cVtwcmVjXTsKIAogCXAgPSBxLT5oZWFkOwpAQCAtMTk5LDE0ICsxOTksMTMgQEAKIAogCXJldHVybiBwOwogfQorRVhQT1JUX1NZTUJPTChiY21fcGt0cV9wZGVxKTsKIAotc3RydWN0IHNrX2J1ZmYgKkJDTUZBU1RQQVRIIHBrdHFfcGRlcV90YWlsKHN0cnVjdCBwa3RxICpwcSwgaW50IHByZWMpCitzdHJ1Y3Qgc2tfYnVmZiAqYmNtX3BrdHFfcGRlcV90YWlsKHN0cnVjdCBwa3RxICpwcSwgaW50IHByZWMpCiB7CiAJc3RydWN0IHBrdHFfcHJlYyAqcTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqcCwgKnByZXY7CiAKLQlBU1NFUlQocHJlYyA+PSAwICYmIHByZWMgPCBwcS0+bnVtX3ByZWMpOwotCiAJcSA9ICZwcS0+cVtwcmVjXTsKIAogCXAgPSBxLT5oZWFkOwpAQCAtMjI4LDM4ICsyMjcsMTEgQEAKIAogCXJldHVybiBwOwogfQorRVhQT1JUX1NZTUJPTChiY21fcGt0cV9wZGVxX3RhaWwpOwogCi0jaWZkZWYgQlJDTV9GVUxMTUFDCi12b2lkIHBrdHFfcGZsdXNoKHN0cnVjdCBwa3RxICpwcSwgaW50IHByZWMsIGJvb2wgZGlyKQotewotCXN0cnVjdCBwa3RxX3ByZWMgKnE7Ci0Jc3RydWN0IHNrX2J1ZmYgKnA7Ci0KLQlxID0gJnBxLT5xW3ByZWNdOwotCXAgPSBxLT5oZWFkOwotCXdoaWxlIChwKSB7Ci0JCXEtPmhlYWQgPSBwLT5wcmV2OwotCQlwLT5wcmV2ID0gTlVMTDsKLQkJcGt0X2J1Zl9mcmVlX3NrYihwKTsKLQkJcS0+bGVuLS07Ci0JCXBxLT5sZW4tLTsKLQkJcCA9IHEtPmhlYWQ7Ci0JfQotCUFTU0VSVChxLT5sZW4gPT0gMCk7Ci0JcS0+dGFpbCA9IE5VTEw7Ci19Ci0KLXZvaWQgcGt0cV9mbHVzaChzdHJ1Y3QgcGt0cSAqcHEsIGJvb2wgZGlyKQotewotCWludCBwcmVjOwotCWZvciAocHJlYyA9IDA7IHByZWMgPCBwcS0+bnVtX3ByZWM7IHByZWMrKykKLQkJcGt0cV9wZmx1c2gocHEsIHByZWMsIGRpcik7Ci0JQVNTRVJUKHBxLT5sZW4gPT0gMCk7Ci19Ci0jZWxzZSAvKiAhQlJDTV9GVUxMTUFDICovCiB2b2lkCi1wa3RxX3BmbHVzaChzdHJ1Y3QgcGt0cSAqcHEsIGludCBwcmVjLCBib29sIGRpciwKLQkgICAgaWZwa3RfY2JfdCBmbiwgaW50IGFyZykKK2JjbV9wa3RxX3BmbHVzaChzdHJ1Y3QgcGt0cSAqcHEsIGludCBwcmVjLCBib29sIGRpciwKKwkgICAgaWZwa3RfY2JfdCBmbiwgdm9pZCAqYXJnKQogewogCXN0cnVjdCBwa3RxX3ByZWMgKnE7CiAJc3RydWN0IHNrX2J1ZmYgKnAsICpwcmV2ID0gTlVMTDsKQEAgLTI3NCw3ICsyNDYsNyBAQAogCQkJZWxzZQogCQkJCXByZXYtPnByZXYgPSBwLT5wcmV2OwogCQkJcC0+cHJldiA9IE5VTEw7Ci0JCQlwa3RfYnVmX2ZyZWVfc2tiKHApOworCQkJYmNtX3BrdF9idWZfZnJlZV9za2IocCk7CiAJCQlxLT5sZW4tLTsKIAkJCXBxLT5sZW4tLTsKIAkJCXAgPSAoaGVhZCA/IHEtPmhlYWQgOiBwcmV2LT5wcmV2KTsKQEAgLTI4NSwyOCArMjU3LDI0IEBACiAJfQogCiAJaWYgKHEtPmhlYWQgPT0gTlVMTCkgewotCQlBU1NFUlQocS0+bGVuID09IDApOwogCQlxLT50YWlsID0gTlVMTDsKIAl9CiB9CitFWFBPUlRfU1lNQk9MKGJjbV9wa3RxX3BmbHVzaCk7CiAKLXZvaWQgcGt0cV9mbHVzaChzdHJ1Y3QgcGt0cSAqcHEsIGJvb2wgZGlyLAotCQlpZnBrdF9jYl90IGZuLCBpbnQgYXJnKQordm9pZCBiY21fcGt0cV9mbHVzaChzdHJ1Y3QgcGt0cSAqcHEsIGJvb2wgZGlyLAorCQlpZnBrdF9jYl90IGZuLCB2b2lkICphcmcpCiB7CiAJaW50IHByZWM7CiAJZm9yIChwcmVjID0gMDsgcHJlYyA8IHBxLT5udW1fcHJlYzsgcHJlYysrKQotCQlwa3RxX3BmbHVzaChwcSwgcHJlYywgZGlyLCBmbiwgYXJnKTsKLQlpZiAoZm4gPT0gTlVMTCkKLQkJQVNTRVJUKHBxLT5sZW4gPT0gMCk7CisJCWJjbV9wa3RxX3BmbHVzaChwcSwgcHJlYywgZGlyLCBmbiwgYXJnKTsKIH0KLSNlbmRpZiAvKiBCUkNNX0ZVTExNQUMgKi8KK0VYUE9SVF9TWU1CT0woYmNtX3BrdHFfZmx1c2gpOwogCi12b2lkIHBrdHFfaW5pdChzdHJ1Y3QgcGt0cSAqcHEsIGludCBudW1fcHJlYywgaW50IG1heF9sZW4pCit2b2lkIGJjbV9wa3RxX2luaXQoc3RydWN0IHBrdHEgKnBxLCBpbnQgbnVtX3ByZWMsIGludCBtYXhfbGVuKQogewogCWludCBwcmVjOwogCi0JQVNTRVJUKG51bV9wcmVjID4gMCAmJiBudW1fcHJlYyA8PSBQS1RRX01BWF9QUkVDKTsKLQogCS8qIHBxIGlzIHZhcmlhYmxlIHNpemU7IG9ubHkgemVybyBvdXQgd2hhdCdzIHJlcXVlc3RlZCAqLwogCW1lbXNldChwcSwgMCwKIAkgICAgICBvZmZzZXRvZihzdHJ1Y3QgcGt0cSwgcSkgKyAoc2l6ZW9mKHN0cnVjdCBwa3RxX3ByZWMpICogbnVtX3ByZWMpKTsKQEAgLTMxOCw4ICsyODYsOSBAQAogCWZvciAocHJlYyA9IDA7IHByZWMgPCBudW1fcHJlYzsgcHJlYysrKQogCQlwcS0+cVtwcmVjXS5tYXggPSBwcS0+bWF4OwogfQorRVhQT1JUX1NZTUJPTChiY21fcGt0cV9pbml0KTsKIAotc3RydWN0IHNrX2J1ZmYgKnBrdHFfcGVla190YWlsKHN0cnVjdCBwa3RxICpwcSwgaW50ICpwcmVjX291dCkKK3N0cnVjdCBza19idWZmICpiY21fcGt0cV9wZWVrX3RhaWwoc3RydWN0IHBrdHEgKnBxLCBpbnQgKnByZWNfb3V0KQogewogCWludCBwcmVjOwogCkBAIC0zMzUsOSArMzA0LDEwIEBACiAKIAlyZXR1cm4gcHEtPnFbcHJlY10udGFpbDsKIH0KK0VYUE9SVF9TWU1CT0woYmNtX3BrdHFfcGVla190YWlsKTsKIAogLyogUmV0dXJuIHN1bSBvZiBsZW5ndGhzIG9mIGEgc3BlY2lmaWMgc2V0IG9mIHByZWNlZGVuY2VzICovCi1pbnQgcGt0cV9tbGVuKHN0cnVjdCBwa3RxICpwcSwgdWludCBwcmVjX2JtcCkKK2ludCBiY21fcGt0cV9tbGVuKHN0cnVjdCBwa3RxICpwcSwgdWludCBwcmVjX2JtcCkKIHsKIAlpbnQgcHJlYywgbGVuOwogCkBAIC0zNDksOCArMzE5LDEwIEBACiAKIAlyZXR1cm4gbGVuOwogfQorRVhQT1JUX1NZTUJPTChiY21fcGt0cV9tbGVuKTsKKwogLyogUHJpb3JpdHkgZGVxdWV1ZSBmcm9tIGEgc3BlY2lmaWMgc2V0IG9mIHByZWNlZGVuY2VzICovCi1zdHJ1Y3Qgc2tfYnVmZiAqQkNNRkFTVFBBVEggcGt0cV9tZGVxKHN0cnVjdCBwa3RxICpwcSwgdWludCBwcmVjX2JtcCwKK3N0cnVjdCBza19idWZmICpiY21fcGt0cV9tZGVxKHN0cnVjdCBwa3RxICpwcSwgdWludCBwcmVjX2JtcCwKIAkJCQkgICAgICBpbnQgKnByZWNfb3V0KQogewogCXN0cnVjdCBwa3RxX3ByZWMgKnE7CkBAIC0zODgsNiArMzYwLDcgQEAKIAogCXJldHVybiBwOwogfQorRVhQT1JUX1NZTUJPTChiY21fcGt0cV9tZGVxKTsKIAogLyogcGFyc2UgYSB4eDp4eDp4eDp4eDp4eDp4eCBmb3JtYXQgZXRoZXJuZXQgYWRkcmVzcyAqLwogaW50IGJjbV9ldGhlcl9hdG9lKGNoYXIgKnAsIHU4ICplYSkKQEAgLTQwMiw1NyArMzc1LDExIEBACiAKIAlyZXR1cm4gaSA9PSA2OwogfQotCi0vKgotICogU2VhcmNoIHRoZSBuYW1lPXZhbHVlIHZhcnMgZm9yIGEgc3BlY2lmaWMgb25lIGFuZCByZXR1cm4gaXRzIHZhbHVlLgotICogUmV0dXJucyBOVUxMIGlmIG5vdCBmb3VuZC4KLSAqLwotY2hhciAqZ2V0dmFyKGNoYXIgKnZhcnMsIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JY2hhciAqczsKLQlpbnQgbGVuOwotCi0JaWYgKCFuYW1lKQotCQlyZXR1cm4gTlVMTDsKLQotCWxlbiA9IHN0cmxlbihuYW1lKTsKLQlpZiAobGVuID09IDApCi0JCXJldHVybiBOVUxMOwotCi0JLyogZmlyc3QgbG9vayBpbiB2YXJzW10gKi8KLQlmb3IgKHMgPSB2YXJzOyBzICYmICpzOykgewotCQlpZiAoKG1lbWNtcChzLCBuYW1lLCBsZW4pID09IDApICYmIChzW2xlbl0gPT0gJz0nKSkKLQkJCXJldHVybiAmc1tsZW4gKyAxXTsKLQotCQl3aGlsZSAoKnMrKykKLQkJCTsKLQl9Ci0jaWZkZWYgQlJDTV9GVUxMTUFDCi0JcmV0dXJuIE5VTEw7Ci0jZWxzZQotCS8qIHRoZW4gcXVlcnkgbnZyYW0gKi8KLQlyZXR1cm4gbnZyYW1fZ2V0KG5hbWUpOwotI2VuZGlmCi19Ci0KLS8qCi0gKiBTZWFyY2ggdGhlIHZhcnMgZm9yIGEgc3BlY2lmaWMgb25lIGFuZCByZXR1cm4gaXRzIHZhbHVlIGFzCi0gKiBhbiBpbnRlZ2VyLiBSZXR1cm5zIDAgaWYgbm90IGZvdW5kLgotICovCi1pbnQgZ2V0aW50dmFyKGNoYXIgKnZhcnMsIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JY2hhciAqdmFsOwotCi0JdmFsID0gZ2V0dmFyKHZhcnMsIG5hbWUpOwotCWlmICh2YWwgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gc2ltcGxlX3N0cnRvdWwodmFsLCBOVUxMLCAwKTsKLX0KK0VYUE9SVF9TWU1CT0woYmNtX2V0aGVyX2F0b2UpOwogCiAjaWYgZGVmaW5lZChCQ01EQkcpCiAvKiBwcmV0dHkgaGV4IHByaW50IGEgcGt0IGJ1ZmZlciBjaGFpbiAqLwotdm9pZCBwcnBrdChjb25zdCBjaGFyICptc2csIHN0cnVjdCBza19idWZmICpwMCkKK3ZvaWQgYmNtX3BycGt0KGNvbnN0IGNoYXIgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnAwKQogewogCXN0cnVjdCBza19idWZmICpwOwogCkBAIC00NjAsMzIgKzM4NywxMSBAQAogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6XG4iLCBtc2cpOwogCiAJZm9yIChwID0gcDA7IHA7IHAgPSBwLT5uZXh0KQotCQlwcmhleChOVUxMLCBwLT5kYXRhLCBwLT5sZW4pOworCQlwcmludF9oZXhfZHVtcF9ieXRlcygiIiwgRFVNUF9QUkVGSVhfT0ZGU0VULCBwLT5kYXRhLCBwLT5sZW4pOwogfQorRVhQT1JUX1NZTUJPTChiY21fcHJwa3QpOwogI2VuZGlmCQkJCS8qIGRlZmluZWQoQkNNREJHKSAqLwogCi1zdGF0aWMgY2hhciBiY21fdW5kZWZlcnJzdHJbQkNNRV9TVFJMRU5dOwotCi1zdGF0aWMgY29uc3QgY2hhciAqYmNtZXJyb3JzdHJ0YWJsZVtdID0gQkNNRVJSU1RSSU5HVEFCTEU7Ci0KLS8qIENvbnZlcnQgdGhlIGVycm9yIGNvZGVzIGludG8gcmVsYXRlZCBlcnJvciBzdHJpbmdzICAqLwotY29uc3QgY2hhciAqYmNtZXJyb3JzdHIoaW50IGJjbWVycm9yKQotewotCS8qIGNoZWNrIGlmIHNvbWVvbmUgYWRkZWQgYSBiY21lcnJvciBjb2RlIGJ1dAotCQkgZm9yZ290IHRvIGFkZCBlcnJvcnN0cmluZyAqLwotCUFTU0VSVChBQlMoQkNNRV9MQVNUKSA9PSAoQVJSQVlfU0laRShiY21lcnJvcnN0cnRhYmxlKSAtIDEpKTsKLQotCWlmIChiY21lcnJvciA+IDAgfHwgYmNtZXJyb3IgPCBCQ01FX0xBU1QpIHsKLQkJc25wcmludGYoYmNtX3VuZGVmZXJyc3RyLCBCQ01FX1NUUkxFTiwgIlVuZGVmaW5lZCBlcnJvciAlZCIsCi0JCQkgYmNtZXJyb3IpOwotCQlyZXR1cm4gYmNtX3VuZGVmZXJyc3RyOwotCX0KLQotCUFTU0VSVChzdHJsZW4oYmNtZXJyb3JzdHJ0YWJsZVstYmNtZXJyb3JdKSA8IEJDTUVfU1RSTEVOKTsKLQotCXJldHVybiBiY21lcnJvcnN0cnRhYmxlWy1iY21lcnJvcl07Ci19Ci0KIC8qIGlvdmFyIHRhYmxlIGxvb2t1cCAqLwogY29uc3QgYmNtX2lvdmFyX3QgKmJjbV9pb3Zhcl9sb29rdXAoY29uc3QgYmNtX2lvdmFyX3QgKnRhYmxlLCBjb25zdCBjaGFyICpuYW1lKQogewpAQCAtNDk5LDggKzQwNSw2IEBACiAJZWxzZQogCQlsb29rdXBfbmFtZSA9IG5hbWU7CiAKLQlBU1NFUlQodGFibGUgIT0gTlVMTCk7Ci0KIAlmb3IgKHZpID0gdGFibGU7IHZpLT5uYW1lOyB2aSsrKSB7CiAJCWlmICghc3RyY21wKHZpLT5uYW1lLCBsb29rdXBfbmFtZSkpCiAJCQlyZXR1cm4gdmk7CkBAIC01MDksNiArNDEzLDcgQEAKIAogCXJldHVybiBOVUxMOwkJLyogdmFyIG5hbWUgbm90IGZvdW5kICovCiB9CitFWFBPUlRfU1lNQk9MKGJjbV9pb3Zhcl9sb29rdXApOwogCiBpbnQgYmNtX2lvdmFyX2xlbmNoZWNrKGNvbnN0IGJjbV9pb3Zhcl90ICp2aSwgdm9pZCAqYXJnLCBpbnQgbGVuLCBib29sIHNldCkKIHsKQEAgLTUyNSwzNSArNDMwLDM1IEBACiAJY2FzZSBJT1ZUX1VJTlQzMjoKIAkJLyogYWxsIGludGVnZXJzIGFyZSBzMzIgc2l6ZWQgYXJncyBhdCB0aGUgaW9jdGwgaW50ZXJmYWNlICovCiAJCWlmIChsZW4gPCAoaW50KXNpemVvZihpbnQpKSB7Ci0JCQliY21lcnJvciA9IEJDTUVfQlVGVE9PU0hPUlQ7CisJCQliY21lcnJvciA9IC1FT1ZFUkZMT1c7CiAJCX0KIAkJYnJlYWs7CiAKIAljYXNlIElPVlRfQlVGRkVSOgogCQkvKiBidWZmZXIgbXVzdCBtZWV0IG1pbmltdW0gbGVuZ3RoIHJlcXVpcmVtZW50ICovCiAJCWlmIChsZW4gPCB2aS0+bWlubGVuKSB7Ci0JCQliY21lcnJvciA9IEJDTUVfQlVGVE9PU0hPUlQ7CisJCQliY21lcnJvciA9IC1FT1ZFUkZMT1c7CiAJCX0KIAkJYnJlYWs7CiAKIAljYXNlIElPVlRfVk9JRDoKIAkJaWYgKCFzZXQpIHsKIAkJCS8qIENhbm5vdCByZXR1cm4gbmlsLi4uICovCi0JCQliY21lcnJvciA9IEJDTUVfVU5TVVBQT1JURUQ7CisJCQliY21lcnJvciA9IC1FTk9UU1VQUDsKIAkJfSBlbHNlIGlmIChsZW4pIHsKIAkJCS8qIFNldCBpcyBhbiBhY3Rpb24gdy9vIHBhcmFtZXRlcnMgKi8KLQkJCWJjbWVycm9yID0gQkNNRV9CVUZUT09MT05HOworCQkJYmNtZXJyb3IgPSAtRU5PQlVGUzsKIAkJfQogCQlicmVhazsKIAogCWRlZmF1bHQ6CiAJCS8qIHVua25vd24gdHlwZSBmb3IgbGVuZ3RoIGNoZWNrIGluIGlvdmFyIGluZm8gKi8KLQkJQVNTRVJUKDApOwotCQliY21lcnJvciA9IEJDTUVfVU5TVVBQT1JURUQ7CisJCWJjbWVycm9yID0gLUVOT1RTVVBQOwogCX0KIAogCXJldHVybiBiY21lcnJvcjsKIH0KK0VYUE9SVF9TWU1CT0woYmNtX2lvdmFyX2xlbmNoZWNrKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIGNyYzgKQEAgLTYxMiwxOTUgKzUxNywxOCBAQAogCTB4RjQsIDB4MDMsIDB4NEQsIDB4QkEsIDB4RDEsIDB4MjYsIDB4NjgsIDB4OUYKIH07CiAKLSNkZWZpbmUgQ1JDX0lOTkVSX0xPT1AobiwgYywgeCkgXAotCSgoYykgPSAoKGMpID4+IDgpIF4gY3JjIyNuIyNfdGFibGVbKChjKSBeICh4KSkgJiAweGZmXSkKLQotdTggaG5kY3JjOCh1OCAqcGRhdGEsCS8qIHBvaW50ZXIgdG8gYXJyYXkgb2YgZGF0YSB0byBwcm9jZXNzICovCit1OCBiY21fY3JjOCh1OCAqcGRhdGEsCS8qIHBvaW50ZXIgdG8gYXJyYXkgb2YgZGF0YSB0byBwcm9jZXNzICovCiAJCQkgdWludCBuYnl0ZXMsCS8qIG51bWJlciBvZiBpbnB1dCBkYXRhIGJ5dGVzIHRvIHByb2Nlc3MgKi8KIAkJCSB1OCBjcmMJLyogZWl0aGVyIENSQzhfSU5JVF9WQUxVRSBvciBwcmV2aW91cyByZXR1cm4gdmFsdWUgKi8KICAgICApIHsKLQkvKiBoYXJkIGNvZGUgdGhlIGNyYyBsb29wIGluc3RlYWQgb2YgdXNpbmcgQ1JDX0lOTkVSX0xPT1AgbWFjcm8KLQkgKiB0byBhdm9pZCB0aGUgdW5kZWZpbmVkIGFuZCB1bm5lY2Vzc2FyeSAodTggPj4gOCkgb3BlcmF0aW9uLgotCSAqLworCS8qIGxvb3Agb3ZlciB0aGUgYnVmZmVyIGRhdGEgKi8KIAl3aGlsZSAobmJ5dGVzLS0gPiAwKQogCQljcmMgPSBjcmM4X3RhYmxlWyhjcmMgXiAqcGRhdGErKykgJiAweGZmXTsKIAogCXJldHVybiBjcmM7CiB9CitFWFBPUlRfU1lNQk9MKGJjbV9jcmM4KTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGNyYzE2Ci0gKgotICogQ29tcHV0ZXMgYSBjcmMxNiBvdmVyIHRoZSBpbnB1dCBkYXRhIHVzaW5nIHRoZSBwb2x5bm9taWFsOgotICoKLSAqICAgICAgIHheMTYgKyB4XjEyICt4XjUgKyAxCi0gKgotICogVGhlIGNhbGxlciBwcm92aWRlcyB0aGUgaW5pdGlhbCB2YWx1ZSAoZWl0aGVyIENSQzE2X0lOSVRfVkFMVUUKLSAqIG9yIHRoZSBwcmV2aW91cyByZXR1cm5lZCB2YWx1ZSkgdG8gYWxsb3cgZm9yIHByb2Nlc3Npbmcgb2YKLSAqIGRpc2NvbnRpZ3VvdXMgYmxvY2tzIG9mIGRhdGEuICBXaGVuIGdlbmVyYXRpbmcgdGhlIENSQyB0aGUKLSAqIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgY29tcGxlbWVudGluZyB0aGUgZmluYWwgcmV0dXJuIHZhbHVlCi0gKiBhbmQgaW5zZXJ0aW5nIGl0IGludG8gdGhlIGJ5dGUgc3RyZWFtLiAgV2hlbiBjaGVja2luZywgYSBmaW5hbAotICogcmV0dXJuIHZhbHVlIG9mIENSQzE2X0dPT0RfVkFMVUUgaW5kaWNhdGVzIGEgdmFsaWQgQ1JDLgotICoKLSAqIFJlZmVyZW5jZTogRGFsbGFzIFNlbWljb25kdWN0b3IgQXBwbGljYXRpb24gTm90ZSAyNwotICogICBXaWxsaWFtcywgUm9zcyBOLiwgIkEgUGFpbmxlc3MgR3VpZGUgdG8gQ1JDIEVycm9yIERldGVjdGlvbiBBbGdvcml0aG1zIiwKLSAqICAgICB2ZXIgMywgQXVnIDE5OTMsIHJvc3NAZ3Vlc3QuYWRlbGFpZGUuZWR1LmF1LCBSb2Nrc29mdCBQdHkgTHRkLiwKLSAqICAgICBmdHA6Ly9mdHAucm9ja3NvZnQuY29tL2NsaWVudHMvcm9ja3NvZnQvcGFwZXJzL2NyY192My50eHQKLSAqCi0gKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKi8KLQotc3RhdGljIGNvbnN0IHUxNiBjcmMxNl90YWJsZVsyNTZdID0gewotCTB4MDAwMCwgMHgxMTg5LCAweDIzMTIsIDB4MzI5QiwgMHg0NjI0LCAweDU3QUQsIDB4NjUzNiwgMHg3NEJGLAotCTB4OEM0OCwgMHg5REMxLCAweEFGNUEsIDB4QkVEMywgMHhDQTZDLCAweERCRTUsIDB4RTk3RSwgMHhGOEY3LAotCTB4MTA4MSwgMHgwMTA4LCAweDMzOTMsIDB4MjIxQSwgMHg1NkE1LCAweDQ3MkMsIDB4NzVCNywgMHg2NDNFLAotCTB4OUNDOSwgMHg4RDQwLCAweEJGREIsIDB4QUU1MiwgMHhEQUVELCAweENCNjQsIDB4RjlGRiwgMHhFODc2LAotCTB4MjEwMiwgMHgzMDhCLCAweDAyMTAsIDB4MTM5OSwgMHg2NzI2LCAweDc2QUYsIDB4NDQzNCwgMHg1NUJELAotCTB4QUQ0QSwgMHhCQ0MzLCAweDhFNTgsIDB4OUZEMSwgMHhFQjZFLCAweEZBRTcsIDB4Qzg3QywgMHhEOUY1LAotCTB4MzE4MywgMHgyMDBBLCAweDEyOTEsIDB4MDMxOCwgMHg3N0E3LCAweDY2MkUsIDB4NTRCNSwgMHg0NTNDLAotCTB4QkRDQiwgMHhBQzQyLCAweDlFRDksIDB4OEY1MCwgMHhGQkVGLCAweEVBNjYsIDB4RDhGRCwgMHhDOTc0LAotCTB4NDIwNCwgMHg1MzhELCAweDYxMTYsIDB4NzA5RiwgMHgwNDIwLCAweDE1QTksIDB4MjczMiwgMHgzNkJCLAotCTB4Q0U0QywgMHhERkM1LCAweEVENUUsIDB4RkNENywgMHg4ODY4LCAweDk5RTEsIDB4QUI3QSwgMHhCQUYzLAotCTB4NTI4NSwgMHg0MzBDLCAweDcxOTcsIDB4NjAxRSwgMHgxNEExLCAweDA1MjgsIDB4MzdCMywgMHgyNjNBLAotCTB4REVDRCwgMHhDRjQ0LCAweEZEREYsIDB4RUM1NiwgMHg5OEU5LCAweDg5NjAsIDB4QkJGQiwgMHhBQTcyLAotCTB4NjMwNiwgMHg3MjhGLCAweDQwMTQsIDB4NTE5RCwgMHgyNTIyLCAweDM0QUIsIDB4MDYzMCwgMHgxN0I5LAotCTB4RUY0RSwgMHhGRUM3LCAweENDNUMsIDB4RERENSwgMHhBOTZBLCAweEI4RTMsIDB4OEE3OCwgMHg5QkYxLAotCTB4NzM4NywgMHg2MjBFLCAweDUwOTUsIDB4NDExQywgMHgzNUEzLCAweDI0MkEsIDB4MTZCMSwgMHgwNzM4LAotCTB4RkZDRiwgMHhFRTQ2LCAweERDREQsIDB4Q0Q1NCwgMHhCOUVCLCAweEE4NjIsIDB4OUFGOSwgMHg4QjcwLAotCTB4ODQwOCwgMHg5NTgxLCAweEE3MUEsIDB4QjY5MywgMHhDMjJDLCAweEQzQTUsIDB4RTEzRSwgMHhGMEI3LAotCTB4MDg0MCwgMHgxOUM5LCAweDJCNTIsIDB4M0FEQiwgMHg0RTY0LCAweDVGRUQsIDB4NkQ3NiwgMHg3Q0ZGLAotCTB4OTQ4OSwgMHg4NTAwLCAweEI3OUIsIDB4QTYxMiwgMHhEMkFELCAweEMzMjQsIDB4RjFCRiwgMHhFMDM2LAotCTB4MThDMSwgMHgwOTQ4LCAweDNCRDMsIDB4MkE1QSwgMHg1RUU1LCAweDRGNkMsIDB4N0RGNywgMHg2QzdFLAotCTB4QTUwQSwgMHhCNDgzLCAweDg2MTgsIDB4OTc5MSwgMHhFMzJFLCAweEYyQTcsIDB4QzAzQywgMHhEMUI1LAotCTB4Mjk0MiwgMHgzOENCLCAweDBBNTAsIDB4MUJEOSwgMHg2RjY2LCAweDdFRUYsIDB4NEM3NCwgMHg1REZELAotCTB4QjU4QiwgMHhBNDAyLCAweDk2OTksIDB4ODcxMCwgMHhGM0FGLCAweEUyMjYsIDB4RDBCRCwgMHhDMTM0LAotCTB4MzlDMywgMHgyODRBLCAweDFBRDEsIDB4MEI1OCwgMHg3RkU3LCAweDZFNkUsIDB4NUNGNSwgMHg0RDdDLAotCTB4QzYwQywgMHhENzg1LCAweEU1MUUsIDB4RjQ5NywgMHg4MDI4LCAweDkxQTEsIDB4QTMzQSwgMHhCMkIzLAotCTB4NEE0NCwgMHg1QkNELCAweDY5NTYsIDB4NzhERiwgMHgwQzYwLCAweDFERTksIDB4MkY3MiwgMHgzRUZCLAotCTB4RDY4RCwgMHhDNzA0LCAweEY1OUYsIDB4RTQxNiwgMHg5MEE5LCAweDgxMjAsIDB4QjNCQiwgMHhBMjMyLAotCTB4NUFDNSwgMHg0QjRDLCAweDc5RDcsIDB4Njg1RSwgMHgxQ0UxLCAweDBENjgsIDB4M0ZGMywgMHgyRTdBLAotCTB4RTcwRSwgMHhGNjg3LCAweEM0MUMsIDB4RDU5NSwgMHhBMTJBLCAweEIwQTMsIDB4ODIzOCwgMHg5M0IxLAotCTB4NkI0NiwgMHg3QUNGLCAweDQ4NTQsIDB4NTlERCwgMHgyRDYyLCAweDNDRUIsIDB4MEU3MCwgMHgxRkY5LAotCTB4Rjc4RiwgMHhFNjA2LCAweEQ0OUQsIDB4QzUxNCwgMHhCMUFCLCAweEEwMjIsIDB4OTJCOSwgMHg4MzMwLAotCTB4N0JDNywgMHg2QTRFLCAweDU4RDUsIDB4NDk1QywgMHgzREUzLCAweDJDNkEsIDB4MUVGMSwgMHgwRjc4Ci19OwotCi11MTYgaG5kY3JjMTYodTggKnBkYXRhLAkvKiBwb2ludGVyIHRvIGFycmF5IG9mIGRhdGEgdG8gcHJvY2VzcyAqLwotCXVpbnQgbmJ5dGVzLAkvKiBudW1iZXIgb2YgaW5wdXQgZGF0YSBieXRlcyB0byBwcm9jZXNzICovCi0JdTE2IGNyYwkvKiBlaXRoZXIgQ1JDMTZfSU5JVF9WQUxVRSBvciBwcmV2aW91cyByZXR1cm4gdmFsdWUgKi8KLSAgICApIHsKLQl3aGlsZSAobmJ5dGVzLS0gPiAwKQotCQlDUkNfSU5ORVJfTE9PUCgxNiwgY3JjLCAqcGRhdGErKyk7Ci0JcmV0dXJuIGNyYzsKLX0KLQotc3RhdGljIGNvbnN0IHUzMiBjcmMzMl90YWJsZVsyNTZdID0gewotCTB4MDAwMDAwMDAsIDB4NzcwNzMwOTYsIDB4RUUwRTYxMkMsIDB4OTkwOTUxQkEsCi0JMHgwNzZEQzQxOSwgMHg3MDZBRjQ4RiwgMHhFOTYzQTUzNSwgMHg5RTY0OTVBMywKLQkweDBFREI4ODMyLCAweDc5RENCOEE0LCAweEUwRDVFOTFFLCAweDk3RDJEOTg4LAotCTB4MDlCNjRDMkIsIDB4N0VCMTdDQkQsIDB4RTdCODJEMDcsIDB4OTBCRjFEOTEsCi0JMHgxREI3MTA2NCwgMHg2QUIwMjBGMiwgMHhGM0I5NzE0OCwgMHg4NEJFNDFERSwKLQkweDFBREFENDdELCAweDZERERFNEVCLCAweEY0RDRCNTUxLCAweDgzRDM4NUM3LAotCTB4MTM2Qzk4NTYsIDB4NjQ2QkE4QzAsIDB4RkQ2MkY5N0EsIDB4OEE2NUM5RUMsCi0JMHgxNDAxNUM0RiwgMHg2MzA2NkNEOSwgMHhGQTBGM0Q2MywgMHg4RDA4MERGNSwKLQkweDNCNkUyMEM4LCAweDRDNjkxMDVFLCAweEQ1NjA0MUU0LCAweEEyNjc3MTcyLAotCTB4M0MwM0U0RDEsIDB4NEIwNEQ0NDcsIDB4RDIwRDg1RkQsIDB4QTUwQUI1NkIsCi0JMHgzNUI1QThGQSwgMHg0MkIyOTg2QywgMHhEQkJCQzlENiwgMHhBQ0JDRjk0MCwKLQkweDMyRDg2Q0UzLCAweDQ1REY1Qzc1LCAweERDRDYwRENGLCAweEFCRDEzRDU5LAotCTB4MjZEOTMwQUMsIDB4NTFERTAwM0EsIDB4QzhENzUxODAsIDB4QkZEMDYxMTYsCi0JMHgyMUI0RjRCNSwgMHg1NkIzQzQyMywgMHhDRkJBOTU5OSwgMHhCOEJEQTUwRiwKLQkweDI4MDJCODlFLCAweDVGMDU4ODA4LCAweEM2MENEOUIyLCAweEIxMEJFOTI0LAotCTB4MkY2RjdDODcsIDB4NTg2ODRDMTEsIDB4QzE2MTFEQUIsIDB4QjY2NjJEM0QsCi0JMHg3NkRDNDE5MCwgMHgwMURCNzEwNiwgMHg5OEQyMjBCQywgMHhFRkQ1MTAyQSwKLQkweDcxQjE4NTg5LCAweDA2QjZCNTFGLCAweDlGQkZFNEE1LCAweEU4QjhENDMzLAotCTB4NzgwN0M5QTIsIDB4MEYwMEY5MzQsIDB4OTYwOUE4OEUsIDB4RTEwRTk4MTgsCi0JMHg3RjZBMERCQiwgMHgwODZEM0QyRCwgMHg5MTY0NkM5NywgMHhFNjYzNUMwMSwKLQkweDZCNkI1MUY0LCAweDFDNkM2MTYyLCAweDg1NjUzMEQ4LCAweEYyNjIwMDRFLAotCTB4NkMwNjk1RUQsIDB4MUIwMUE1N0IsIDB4ODIwOEY0QzEsIDB4RjUwRkM0NTcsCi0JMHg2NUIwRDlDNiwgMHgxMkI3RTk1MCwgMHg4QkJFQjhFQSwgMHhGQ0I5ODg3QywKLQkweDYyREQxRERGLCAweDE1REEyRDQ5LCAweDhDRDM3Q0YzLCAweEZCRDQ0QzY1LAotCTB4NERCMjYxNTgsIDB4M0FCNTUxQ0UsIDB4QTNCQzAwNzQsIDB4RDRCQjMwRTIsCi0JMHg0QURGQTU0MSwgMHgzREQ4OTVENywgMHhBNEQxQzQ2RCwgMHhEM0Q2RjRGQiwKLQkweDQzNjlFOTZBLCAweDM0NkVEOUZDLCAweEFENjc4ODQ2LCAweERBNjBCOEQwLAotCTB4NDQwNDJENzMsIDB4MzMwMzFERTUsIDB4QUEwQTRDNUYsIDB4REQwRDdDQzksCi0JMHg1MDA1NzEzQywgMHgyNzAyNDFBQSwgMHhCRTBCMTAxMCwgMHhDOTBDMjA4NiwKLQkweDU3NjhCNTI1LCAweDIwNkY4NUIzLCAweEI5NjZENDA5LCAweENFNjFFNDlGLAotCTB4NUVERUY5MEUsIDB4MjlEOUM5OTgsIDB4QjBEMDk4MjIsIDB4QzdEN0E4QjQsCi0JMHg1OUIzM0QxNywgMHgyRUI0MEQ4MSwgMHhCN0JENUMzQiwgMHhDMEJBNkNBRCwKLQkweEVEQjg4MzIwLCAweDlBQkZCM0I2LCAweDAzQjZFMjBDLCAweDc0QjFEMjlBLAotCTB4RUFENTQ3MzksIDB4OUREMjc3QUYsIDB4MDREQjI2MTUsIDB4NzNEQzE2ODMsCi0JMHhFMzYzMEIxMiwgMHg5NDY0M0I4NCwgMHgwRDZENkEzRSwgMHg3QTZBNUFBOCwKLQkweEU0MEVDRjBCLCAweDkzMDlGRjlELCAweDBBMDBBRTI3LCAweDdEMDc5RUIxLAotCTB4RjAwRjkzNDQsIDB4ODcwOEEzRDIsIDB4MUUwMUYyNjgsIDB4NjkwNkMyRkUsCi0JMHhGNzYyNTc1RCwgMHg4MDY1NjdDQiwgMHgxOTZDMzY3MSwgMHg2RTZCMDZFNywKLQkweEZFRDQxQjc2LCAweDg5RDMyQkUwLCAweDEwREE3QTVBLCAweDY3REQ0QUNDLAotCTB4RjlCOURGNkYsIDB4OEVCRUVGRjksIDB4MTdCN0JFNDMsIDB4NjBCMDhFRDUsCi0JMHhENkQ2QTNFOCwgMHhBMUQxOTM3RSwgMHgzOEQ4QzJDNCwgMHg0RkRGRjI1MiwKLQkweEQxQkI2N0YxLCAweEE2QkM1NzY3LCAweDNGQjUwNkRELCAweDQ4QjIzNjRCLAotCTB4RDgwRDJCREEsIDB4QUYwQTFCNEMsIDB4MzYwMzRBRjYsIDB4NDEwNDdBNjAsCi0JMHhERjYwRUZDMywgMHhBODY3REY1NSwgMHgzMTZFOEVFRiwgMHg0NjY5QkU3OSwKLQkweENCNjFCMzhDLCAweEJDNjY4MzFBLCAweDI1NkZEMkEwLCAweDUyNjhFMjM2LAotCTB4Q0MwQzc3OTUsIDB4QkIwQjQ3MDMsIDB4MjIwMjE2QjksIDB4NTUwNTI2MkYsCi0JMHhDNUJBM0JCRSwgMHhCMkJEMEIyOCwgMHgyQkI0NUE5MiwgMHg1Q0IzNkEwNCwKLQkweEMyRDdGRkE3LCAweEI1RDBDRjMxLCAweDJDRDk5RThCLCAweDVCREVBRTFELAotCTB4OUI2NEMyQjAsIDB4RUM2M0YyMjYsIDB4NzU2QUEzOUMsIDB4MDI2RDkzMEEsCi0JMHg5QzA5MDZBOSwgMHhFQjBFMzYzRiwgMHg3MjA3Njc4NSwgMHgwNTAwNTcxMywKLQkweDk1QkY0QTgyLCAweEUyQjg3QTE0LCAweDdCQjEyQkFFLCAweDBDQjYxQjM4LAotCTB4OTJEMjhFOUIsIDB4RTVENUJFMEQsIDB4N0NEQ0VGQjcsIDB4MEJEQkRGMjEsCi0JMHg4NkQzRDJENCwgMHhGMUQ0RTI0MiwgMHg2OEREQjNGOCwgMHgxRkRBODM2RSwKLQkweDgxQkUxNkNELCAweEY2QjkyNjVCLCAweDZGQjA3N0UxLCAweDE4Qjc0Nzc3LAotCTB4ODgwODVBRTYsIDB4RkYwRjZBNzAsIDB4NjYwNjNCQ0EsIDB4MTEwMTBCNUMsCi0JMHg4RjY1OUVGRiwgMHhGODYyQUU2OSwgMHg2MTZCRkZEMywgMHgxNjZDQ0Y0NSwKLQkweEEwMEFFMjc4LCAweEQ3MEREMkVFLCAweDRFMDQ4MzU0LCAweDM5MDNCM0MyLAotCTB4QTc2NzI2NjEsIDB4RDA2MDE2RjcsIDB4NDk2OTQ3NEQsIDB4M0U2RTc3REIsCi0JMHhBRUQxNkE0QSwgMHhEOUQ2NUFEQywgMHg0MERGMEI2NiwgMHgzN0Q4M0JGMCwKLQkweEE5QkNBRTUzLCAweERFQkI5RUM1LCAweDQ3QjJDRjdGLCAweDMwQjVGRkU5LAotCTB4QkRCREYyMUMsIDB4Q0FCQUMyOEEsIDB4NTNCMzkzMzAsIDB4MjRCNEEzQTYsCi0JMHhCQUQwMzYwNSwgMHhDREQ3MDY5MywgMHg1NERFNTcyOSwgMHgyM0Q5NjdCRiwKLQkweEIzNjY3QTJFLCAweEM0NjE0QUI4LCAweDVENjgxQjAyLCAweDJBNkYyQjk0LAotCTB4QjQwQkJFMzcsIDB4QzMwQzhFQTEsIDB4NUEwNURGMUIsIDB4MkQwMkVGOEQKLX07Ci0KLXUzMiBobmRjcmMzMih1OCAqcGRhdGEsCS8qIHBvaW50ZXIgdG8gYXJyYXkgb2YgZGF0YSB0byBwcm9jZXNzICovCi0JCXVpbnQgbmJ5dGVzLAkvKiBudW1iZXIgb2YgaW5wdXQgZGF0YSBieXRlcyB0byBwcm9jZXNzICovCi0JCXUzMiBjcmMJLyogZWl0aGVyIENSQzMyX0lOSVRfVkFMVUUgb3IgcHJldmlvdXMKLQkJCQkJIHJldHVybiB2YWx1ZSAqLwotKQotewotCXU4ICpwZW5kOwotI2lmZGVmIF9fbWlwc19fCi0JdTggdG1wWzRdOwotCXVuc2lnbmVkIGxvbmcgKnRwdHIgPSAodW5zaWduZWQgbG9uZyAqKSB0bXA7Ci0KLQkvKiBpbiBjYXNlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciBpc24ndCBhbGlnbmVkICovCi0JcGVuZCA9ICh1OCAqKSAoKHVpbnQpIChwZGF0YSArIDMpICYgMHhmZmZmZmZmYyk7Ci0JbmJ5dGVzIC09IChwZW5kIC0gcGRhdGEpOwotCXdoaWxlIChwZGF0YSA8IHBlbmQpCi0JCUNSQ19JTk5FUl9MT09QKDMyLCBjcmMsICpwZGF0YSsrKTsKLQotCS8qIGhhbmRsZSBidWxrIG9mIGRhdGEgYXMgMzItYml0IHdvcmRzICovCi0JcGVuZCA9IHBkYXRhICsgKG5ieXRlcyAmIDB4ZmZmZmZmZmMpOwotCXdoaWxlIChwZGF0YSA8IHBlbmQpIHsKLQkJKnRwdHIgPSAqKHVuc2lnbmVkIGxvbmcgKikgcGRhdGE7Ci0JCXBkYXRhICs9IHNpemVvZih1bnNpZ25lZCBsb25nICopOwotCQlDUkNfSU5ORVJfTE9PUCgzMiwgY3JjLCB0bXBbMF0pOwotCQlDUkNfSU5ORVJfTE9PUCgzMiwgY3JjLCB0bXBbMV0pOwotCQlDUkNfSU5ORVJfTE9PUCgzMiwgY3JjLCB0bXBbMl0pOwotCQlDUkNfSU5ORVJfTE9PUCgzMiwgY3JjLCB0bXBbM10pOwotCX0KLQotCS8qIDEtMyBieXRlcyBhdCBlbmQgb2YgYnVmZmVyICovCi0JcGVuZCA9IHBkYXRhICsgKG5ieXRlcyAmIDB4MDMpOwotCXdoaWxlIChwZGF0YSA8IHBlbmQpCi0JCUNSQ19JTk5FUl9MT09QKDMyLCBjcmMsICpwZGF0YSsrKTsKLSNlbHNlCi0JcGVuZCA9IHBkYXRhICsgbmJ5dGVzOwotCXdoaWxlIChwZGF0YSA8IHBlbmQpCi0JCUNSQ19JTk5FUl9MT09QKDMyLCBjcmMsICpwZGF0YSsrKTsKLSNlbmRpZgkJCQkvKiBfX21pcHNfXyAqLwotCi0JcmV0dXJuIGNyYzsKLX0KIC8qCiAgKiBUcmF2ZXJzZSBhIHN0cmluZyBvZiAxLWJ5dGUgdGFnLzEtYnl0ZSBsZW5ndGgvdmFyaWFibGUtbGVuZ3RoIHZhbHVlCiAgKiB0cmlwbGVzLCByZXR1cm5pbmcgYSBwb2ludGVyIHRvIHRoZSBzdWJzdHJpbmcgd2hvc2UgZmlyc3QgZWxlbWVudApAQCAtODI4LDYgKzU1Niw3IEBACiAKIAlyZXR1cm4gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0woYmNtX3BhcnNlX3RsdnMpOwogCiAKICNpZiBkZWZpbmVkKEJDTURCRykKQEAgLTg4Myw2ICs2MTIsNyBAQAogCiAJcmV0dXJuIChpbnQpKHAgLSBidWYpOwogfQorRVhQT1JUX1NZTUJPTChiY21fZm9ybWF0X2ZsYWdzKTsKIAogLyogcHJpbnQgYnl0ZXMgZm9ybWF0dGVkIGFzIGhleCB0byBhIHN0cmluZy4gcmV0dXJuIHRoZSByZXN1bHRpbmcgc3RyaW5nIGxlbmd0aCAqLwogaW50IGJjbV9mb3JtYXRfaGV4KGNoYXIgKnN0ciwgY29uc3Qgdm9pZCAqYnl0ZXMsIGludCBsZW4pCkBAIC04OTcsNDQgKzYyNyw5IEBACiAJfQogCXJldHVybiAoaW50KShwIC0gc3RyKTsKIH0KK0VYUE9SVF9TWU1CT0woYmNtX2Zvcm1hdF9oZXgpOwogI2VuZGlmCQkJCS8qIGRlZmluZWQoQkNNREJHKSAqLwogCi0vKiBwcmV0dHkgaGV4IHByaW50IGEgY29udGlndW91cyBidWZmZXIgKi8KLXZvaWQgcHJoZXgoY29uc3QgY2hhciAqbXNnLCB1bnNpZ25lZCBjaGFyICpidWYsIHVpbnQgbmJ5dGVzKQotewotCWNoYXIgbGluZVsxMjhdLCAqcDsKLQlpbnQgbGVuID0gc2l6ZW9mKGxpbmUpOwotCWludCBuY2hhcjsKLQl1aW50IGk7Ci0KLQlpZiAobXNnICYmIChtc2dbMF0gIT0gJ1wwJykpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczpcbiIsIG1zZyk7Ci0KLQlwID0gbGluZTsKLQlmb3IgKGkgPSAwOyBpIDwgbmJ5dGVzOyBpKyspIHsKLQkJaWYgKGkgJSAxNiA9PSAwKSB7Ci0JCQluY2hhciA9IHNucHJpbnRmKHAsIGxlbiwgIiAgJTA0ZDogIiwgaSk7CS8qIGxpbmUgcHJlZml4ICovCi0JCQlwICs9IG5jaGFyOwotCQkJbGVuIC09IG5jaGFyOwotCQl9Ci0JCWlmIChsZW4gPiAwKSB7Ci0JCQluY2hhciA9IHNucHJpbnRmKHAsIGxlbiwgIiUwMnggIiwgYnVmW2ldKTsKLQkJCXAgKz0gbmNoYXI7Ci0JCQlsZW4gLT0gbmNoYXI7Ci0JCX0KLQotCQlpZiAoaSAlIDE2ID09IDE1KSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXNcbiIsIGxpbmUpOwkvKiBmbHVzaCBsaW5lICovCi0JCQlwID0gbGluZTsKLQkJCWxlbiA9IHNpemVvZihsaW5lKTsKLQkJfQotCX0KLQotCS8qIGZsdXNoIGxhc3QgcGFydGlhbCBsaW5lICovCi0JaWYgKHAgIT0gbGluZSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzXG4iLCBsaW5lKTsKLX0KLQogY2hhciAqYmNtX2NoaXBuYW1lKHVpbnQgY2hpcGlkLCBjaGFyICpidWYsIHVpbnQgbGVuKQogewogCWNvbnN0IGNoYXIgKmZtdDsKQEAgLTk0Myw2ICs2MzgsNyBAQAogCXNucHJpbnRmKGJ1ZiwgbGVuLCBmbXQsIGNoaXBpZCk7CiAJcmV0dXJuIGJ1ZjsKIH0KK0VYUE9SVF9TWU1CT0woYmNtX2NoaXBuYW1lKTsKIAogdWludCBiY21fbWtpb3ZhcihjaGFyICpuYW1lLCBjaGFyICpkYXRhLCB1aW50IGRhdGFsZW4sIGNoYXIgKmJ1ZiwgdWludCBidWZsZW4pCiB7CkBAIC05NjEsNiArNjU3LDcgQEAKIAogCXJldHVybiBsZW47CiB9CitFWFBPUlRfU1lNQk9MKGJjbV9ta2lvdmFyKTsKIAogLyogUXVhcnRlciBkQm0gdW5pdHMgdG8gbVcKICAqIFRhYmxlIHN0YXJ0cyBhdCBRREJNX09GRlNFVCwgc28gdGhlIGZpcnN0IGVudHJ5IGlzIG1XIGZvciBxZEJtPTE1MwpAQCAtMTAxNSw2ICs3MTIsOCBAQAogCSAqLwogCXJldHVybiAobnFkQm1fdG9fbVdfbWFwW2lkeF0gKyBmYWN0b3IgLyAyKSAvIGZhY3RvcjsKIH0KK0VYUE9SVF9TWU1CT0woYmNtX3FkYm1fdG9fbXcpOworCiB1OCBiY21fbXdfdG9fcWRibSh1MTYgbXcpCiB7CiAJdTggcWRibTsKQEAgLTEwNDUsNiArNzQ0LDggQEAKIAogCXJldHVybiBxZGJtOwogfQorRVhQT1JUX1NZTUJPTChiY21fbXdfdG9fcWRibSk7CisKIHVpbnQgYmNtX2JpdGNvdW50KHU4ICpiaXRtYXAsIHVpbnQgbGVuZ3RoKQogewogCXVpbnQgYml0Y291bnQgPSAwLCBpOwpAQCAtMTA1OCwxMiArNzU5LDE1IEBACiAJfQogCXJldHVybiBiaXRjb3VudDsKIH0KK0VYUE9SVF9TWU1CT0woYmNtX2JpdGNvdW50KTsKKwogLyogSW5pdGlhbGl6YXRpb24gb2YgYmNtc3RyYnVmIHN0cnVjdHVyZSAqLwogdm9pZCBiY21fYmluaXQoc3RydWN0IGJjbXN0cmJ1ZiAqYiwgY2hhciAqYnVmLCB1aW50IHNpemUpCiB7CiAJYi0+b3JpZ3NpemUgPSBiLT5zaXplID0gc2l6ZTsKIAliLT5vcmlnYnVmID0gYi0+YnVmID0gYnVmOwogfQorRVhQT1JUX1NZTUJPTChiY21fYmluaXQpOwogCiAvKiBCdWZmZXIgc3ByaW50ZiB3cmFwcGVyIHRvIGd1YXJkIGFnYWluc3QgYnVmZmVyIG92ZXJmbG93ICovCiBpbnQgYmNtX2JwcmludGYoc3RydWN0IGJjbXN0cmJ1ZiAqYiwgY29uc3QgY2hhciAqZm10LCAuLi4pCkBAIC0xMDg5LDUwICs3OTMsNCBAQAogCiAJcmV0dXJuIHI7CiB9Ci0KLSNpZiBkZWZpbmVkKEJDTURCR19BU1NFUlQpCi12b2lkIG9zbF9hc3NlcnQoY2hhciAqZXhwLCBjaGFyICpmaWxlLCBpbnQgbGluZSkKLXsKLQljaGFyIHRlbXBidWZbMjU2XTsKLQljaGFyICpiYXNlbmFtZTsKLQotCWJhc2VuYW1lID0gc3RycmNocihmaWxlLCAnLycpOwotCS8qIHNraXAgdGhlICcvJyAqLwotCWlmIChiYXNlbmFtZSkKLQkJYmFzZW5hbWUrKzsKLQotCWlmICghYmFzZW5hbWUpCi0JCWJhc2VuYW1lID0gZmlsZTsKLQotCXNucHJpbnRmKHRlbXBidWYsIDI1NiwKLQkJICJhc3NlcnRpb24gXCIlc1wiIGZhaWxlZDogZmlsZSBcIiVzXCIsIGxpbmUgJWRcbiIsIGV4cCwKLQkJIGJhc2VuYW1lLCBsaW5lKTsKLQotCS8qCi0JICogUHJpbnQgYXNzZXJ0IG1lc3NhZ2UgYW5kIGdpdmUgaXQgdGltZSB0bwotCSAqIGJlIHdyaXR0ZW4gdG8gL3Zhci9sb2cvbWVzc2FnZXMKLQkgKi8KLQlpZiAoIWluX2ludGVycnVwdCgpKSB7Ci0JCWNvbnN0IGludCBkZWxheSA9IDM7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMiLCB0ZW1wYnVmKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJwYW5pYyBpbiAlZCBzZWNvbmRzXG4iLCBkZWxheSk7Ci0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCXNjaGVkdWxlX3RpbWVvdXQoZGVsYXkgKiBIWik7Ci0JfQotCi0Jc3dpdGNoIChnX2Fzc2VydF90eXBlKSB7Ci0JY2FzZSAwOgotCQlwYW5pYyhLRVJOX0VSUiAiJXMiLCB0ZW1wYnVmKTsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlwcmludGsoS0VSTl9FUlIgIiVzIiwgdGVtcGJ1Zik7Ci0JCUJVRygpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMiLCB0ZW1wYnVmKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotfQotI2VuZGlmCQkJCS8qIGRlZmluZWQoQkNNREJHX0FTU0VSVCkgKi8KK0VYUE9SVF9TWU1CT0woYmNtX2JwcmludGYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS91dGlsL2JjbXdpZmkuYyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9iY213aWZpLmMKaW5kZXggZDgyYzJiMi4uOTU1YTNhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS91dGlsL2JjbXdpZmkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvYmNtd2lmaS5jCkBAIC0xNSw2ICsxNSw3IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGJjbWRlZnMuaD4KICNpbmNsdWRlIDxiY211dGlscy5oPgogI2luY2x1ZGUgPGJjbXdpZmkuaD4KQEAgLTI1LDcgKzI2LDcgQEAKICAqIGNvbWJpbmF0aW9uIGNvdWxkIGJlIGxlZ2FsIGdpdmVuIGFueSBzZXQgb2YgY2lyY3Vtc3RhbmNlcy4KICAqIFJFVFVSTlM6IHRydWUgaXMgdGhlIGNoYW5zcGVjIGlzIG1hbGZvcm1lZCwgZmFsc2UgaWYgaXQgbG9va3MgZ29vZC4KICAqLwotYm9vbCB3Zl9jaHNwZWNfbWFsZm9ybWVkKGNoYW5zcGVjX3QgY2hhbnNwZWMpCitib29sIGJjbV9jaHNwZWNfbWFsZm9ybWVkKGNoYW5zcGVjX3QgY2hhbnNwZWMpCiB7CiAJLyogbXVzdCBiZSAyRyBvciA1RyBiYW5kICovCiAJaWYgKCFDSFNQRUNfSVM1RyhjaGFuc3BlYykgJiYgIUNIU1BFQ19JUzJHKGNoYW5zcGVjKSkKQEAgLTQ1LDEzICs0NiwxNCBAQAogCiAJcmV0dXJuIGZhbHNlOwogfQorRVhQT1JUX1NZTUJPTChiY21fY2hzcGVjX21hbGZvcm1lZCk7CiAKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNoYW5uZWwgbnVtYmVyIHRoYXQgY29udHJvbCB0cmFmZmljIGlzIGJlaW5nIHNlbnQgb24sIGZvciBsZWdhY3kKICAqIGNoYW5uZWxzIHRoaXMgaXMganVzdCB0aGUgY2hhbm5lbCBudW1iZXIsIGZvciA0ME1IWiBjaGFubmVscyBpdCBpcyB0aGUgdXBwZXIgb3IgbG93cmUgMjBNSFoKICAqIHNpZGViYW5kIGRlcGVuZGluZyBvbiB0aGUgY2hhbnNwZWMgc2VsZWN0ZWQKICAqLwotdTggd2ZfY2hzcGVjX2N0bGNoYW4oY2hhbnNwZWNfdCBjaHNwZWMpCit1OCBiY21fY2hzcGVjX2N0bGNoYW4oY2hhbnNwZWNfdCBjaHNwZWMpCiB7CiAJdTggY3RsX2NoYW47CiAKQEAgLTYwLDcgKzYyLDYgQEAKIAkJcmV0dXJuIENIU1BFQ19DSEFOTkVMKGNoc3BlYyk7CiAJfSBlbHNlIHsKIAkJLyogd2Ugb25seSBzdXBwb3J0IDQwTUhaIHdpdGggc2lkZWJhbmRzICovCi0JCUFTU0VSVChDSFNQRUNfQlcoY2hzcGVjKSA9PSBXTF9DSEFOU1BFQ19CV180MCk7CiAJCS8qIGNoYW5zcGVjIGNoYW5uZWwgaG9sZHMgdGhlIGNlbnRyZSBmcmVxdWVuY3ksIHVzZSB0aGF0IGFuZCB0aGUKIAkJICogc2lkZSBiYW5kIGluZm9ybWF0aW9uIHRvIHJlY29uc3RydWN0IHRoZSBjb250cm9sIGNoYW5uZWwgbnVtYmVyCiAJCSAqLwpAQCAtNjgsOCArNjksNiBAQAogCQkJLyogY29udHJvbCBjaGFuIGlzIHRoZSB1cHBlciAyMCBNSFogU0Igb2YgdGhlIDQwTUhaIGNoYW5uZWwgKi8KIAkJCWN0bF9jaGFuID0gVVBQRVJfMjBfU0IoQ0hTUEVDX0NIQU5ORUwoY2hzcGVjKSk7CiAJCX0gZWxzZSB7Ci0JCQlBU1NFUlQoQ0hTUEVDX0NUTF9TQihjaHNwZWMpID09Ci0JCQkgICAgICAgV0xfQ0hBTlNQRUNfQ1RMX1NCX0xPV0VSKTsKIAkJCS8qIGNvbnRyb2wgY2hhbiBpcyB0aGUgbG93ZXIgMjAgTUhaIFNCIG9mIHRoZSA0ME1IWiBjaGFubmVsICovCiAJCQljdGxfY2hhbiA9IExPV0VSXzIwX1NCKENIU1BFQ19DSEFOTkVMKGNoc3BlYykpOwogCQl9CkBAIC03Nyw2ICs3Niw3IEBACiAKIAlyZXR1cm4gY3RsX2NoYW47CiB9CitFWFBPUlRfU1lNQk9MKGJjbV9jaHNwZWNfY3RsY2hhbik7CiAKIC8qCiAgKiBSZXR1cm4gdGhlIGNoYW5uZWwgbnVtYmVyIGZvciBhIGdpdmVuIGZyZXF1ZW5jeSBhbmQgYmFzZSBmcmVxdWVuY3kuCkBAIC05Nyw3ICs5Nyw3IEBACiAgKgogICogUmVmZXJlbmNlIDgwMi4xMSBSRVZtYSwgc2VjdGlvbiAxNy4zLjguMywgYW5kIDgwMi4xMUIgc2VjdGlvbiAxOC40LjYuMgogICovCi1pbnQgd2ZfbWh6MmNoYW5uZWwodWludCBmcmVxLCB1aW50IHN0YXJ0X2ZhY3RvcikKK2ludCBiY21fbWh6MmNoYW5uZWwodWludCBmcmVxLCB1aW50IHN0YXJ0X2ZhY3RvcikKIHsKIAlpbnQgY2ggPSAtMTsKIAl1aW50IGJhc2U7CkBAIC0xMzMsNCArMTMzLDUgQEAKIAogCXJldHVybiBjaDsKIH0KK0VYUE9SVF9TWU1CT0woYmNtX21oejJjaGFubmVsKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS91dGlsL3FtYXRoLmMgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvcW1hdGguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBjOTkyOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvcW1hdGguYworKysgL2Rldi9udWxsCkBAIC0xLDY4MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEwIEJyb2FkY29tIENvcnBvcmF0aW9uCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04KLSAqIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4KLSAqIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSAicW1hdGguaCIKLQotLyoKLURlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIHNhdHVyYXRlIGlucHV0IDMyIGJpdCBudW1iZXIgaW50byBhIDE2IGJpdCBudW1iZXIuCi1JZiBpbnB1dCBudW1iZXIgaXMgZ3JlYXRlciB0aGFuIDB4N2ZmZiB0aGVuIG91dHB1dCBpcyBzYXR1cmF0ZWQgdG8gMHg3ZmZmLgotZWxzZSBpZiBpbnB1dCBudW1iZXIgaXMgbGVzcyB0aGFuIDB4ZmZmZjgwMDAgdGhlbiBvdXRwdXQgaXMgc2F0dXJhdGVkIHRvIDB4ZmZmZjgwMDAKLWVsc2Ugb3V0cHV0IGlzIHNhbWUgYXMgaW5wdXQuCi0qLwotczE2IHFtX3NhdDMyKHMzMiBvcCkKLXsKLQlzMTYgcmVzdWx0OwotCWlmIChvcCA+IChzMzIpIDB4N2ZmZikgewotCQlyZXN1bHQgPSAweDdmZmY7Ci0JfSBlbHNlIGlmIChvcCA8IChzMzIpIDB4ZmZmZjgwMDApIHsKLQkJcmVzdWx0ID0gKHMxNikgKDB4ODAwMCk7Ci0JfSBlbHNlIHsKLQkJcmVzdWx0ID0gKHMxNikgb3A7Ci0JfQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLS8qCi1EZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiBtdWx0aXBseSB0d28gaW5wdXQgMTYgYml0IG51bWJlcnMgYW5kIHJldHVybiB0aGUgMzIgYml0IHJlc3VsdC4KLVRoaXMgbXVsdGlwbGljYXRpb24gaXMgc2ltaWxhciB0byBjb21waWxlciBtdWx0aXBsaWNhdGlvbi4gVGhpcyBvcGVyYXRpb24gaXMgZGVmaW5lZCBpZgotMTYgYml0IG11bHRpcGxpY2F0aW9uIG9uIHRoZSBwcm9jZXNzb3IgcGxhdGZvcm0gaXMgY2hlYXBlciB0aGFuIDMyIGJpdCBtdWx0aXBsaWNhdGlvbiAoYXMKLXRoZSBtb3N0IG9mIHFtYXRoIGZ1bmN0aW9ucyBjYW4gYmUgcmVwbGFjZWQgd2l0aCBwcm9jZXNzb3IgaW50cmluc2ljIGluc3RydWN0aW9ucykuCi0qLwotczMyIHFtX211bDMyMTYxNihzMTYgb3AxLCBzMTYgb3AyKQotewotCXJldHVybiAoczMyKSAob3AxKSAqIChzMzIpIChvcDIpOwotfQotCi0vKgotRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gbWFrZSAxNiBiaXQgbXVsdGlwbGljYXRpb24gYW5kIHJldHVybiB0aGUgcmVzdWx0IGluIDE2IGJpdHMuCi1UbyBmaXQgdGhlIHJlc3VsdCBpbnRvIDE2IGJpdHMgdGhlIDMyIGJpdCBtdWx0aXBsaWNhdGlvbiByZXN1bHQgaXMgcmlnaHQKLXNoaWZ0ZWQgYnkgMTYgYml0cy4KLSovCi1zMTYgcW1fbXVsMTYoczE2IG9wMSwgczE2IG9wMikKLXsKLQlzMzIgcmVzdWx0OwotCXJlc3VsdCA9ICgoczMyKSAob3AxKSAqIChzMzIpIChvcDIpKTsKLQlyZXR1cm4gKHMxNikgKHJlc3VsdCA+PiAxNik7Ci19Ci0KLS8qCi1EZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiBtdWx0aXBseSB0d28gMTYgYml0IG51bWJlcnMgYW5kIHJldHVybiB0aGUgcmVzdWx0IGluIDMyIGJpdHMuCi1UaGlzIGZ1bmN0aW9uIHJlbW92ZSB0aGUgZXh0cmEgc2lnbiBiaXQgY3JlYXRlZCBieSB0aGUgbXVsdGlwbGljYXRpb24gYnkgbGVmdHNoaWZ0aW5nIHRoZQotMzIgYml0IG11bHRpcGxpY2F0aW9uIHJlc3VsdCBieSAxIGJpdCBiZWZvcmUgcmV0dXJuaW5nIHRoZSByZXN1bHQuIFNvIHRoZSBvdXRwdXQgaXMKLXR3aWNlIHRoYXQgb2YgY29tcGlsZXIgbXVsdGlwbGljYXRpb24uIChpLmUuIHFtX211bHMzMjE2MTYoMiwzKT0xMikuCi1XaGVuIGJvdGggaW5wdXQgMTYgYml0IG51bWJlcnMgYXJlIDB4ODAwMCwgdGhlbiB0aGUgcmVzdWx0IGlzIHNhdHVyYXRlZCB0byAweDdmZmZmZmZmLgotKi8KLXMzMiBxbV9tdWxzMzIxNjE2KHMxNiBvcDEsIHMxNiBvcDIpCi17Ci0JczMyIHJlc3VsdDsKLQlpZiAob3AxID09IChzMTYpICgweDgwMDApICYmIG9wMiA9PSAoczE2KSAoMHg4MDAwKSkgewotCQlyZXN1bHQgPSAweDdmZmZmZmZmOwotCX0gZWxzZSB7Ci0JCXJlc3VsdCA9ICgoczMyKSAob3AxKSAqIChzMzIpIChvcDIpKTsKLQkJcmVzdWx0ID0gcmVzdWx0IDw8IDE7Ci0JfQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLS8qCi1EZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiBtYWtlIDE2IGJpdCB1bnNpZ25lZCBtdWx0aXBsaWNhdGlvbi4gVG8gZml0IHRoZSBvdXRwdXQgaW50bwotMTYgYml0cyB0aGUgMzIgYml0IG11bHRpcGxpY2F0aW9uIHJlc3VsdCBpcyByaWdodCBzaGlmdGVkIGJ5IDE2IGJpdHMuCi0qLwotdTE2IHFtX211bHUxNih1MTYgb3AxLCB1MTYgb3AyKQotewotCXJldHVybiAodTE2KSAoKCh1MzIpIG9wMSAqICh1MzIpIG9wMikgPj4gMTYpOwotfQotCi0vKgotRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gbWFrZSAxNiBiaXQgbXVsdGlwbGljYXRpb24gYW5kIHJldHVybiB0aGUgcmVzdWx0IGluIDE2IGJpdHMuCi1UbyBmaXQgdGhlIG11bHRpcGxpY2F0aW9uIHJlc3VsdCBpbnRvIDE2IGJpdHMgdGhlIG11bHRpcGxpY2F0aW9uIHJlc3VsdCBpcyByaWdodCBzaGlmdGVkIGJ5Ci0xNSBiaXRzLiBSaWdodCBzaGlmdGluZyAxNSBiaXRzIGluc3RlYWQgb2YgMTYgYml0cyBpcyBkb25lIHRvIHJlbW92ZSB0aGUgZXh0cmEgc2lnbiBiaXQgZm9ybWVkCi1kdWUgdG8gdGhlIG11bHRpcGxpY2F0aW9uLgotV2hlbiBib3RoIHRoZSAxNmJpdCBpbnB1dHMgYXJlIDB4ODAwMCB0aGVuIHRoZSBvdXRwdXQgaXMgc2F0dXJhdGVkIHRvIDB4N2ZmZmZmZmYuCi0qLwotczE2IHFtX211bHMxNihzMTYgb3AxLCBzMTYgb3AyKQotewotCXMzMiByZXN1bHQ7Ci0JaWYgKG9wMSA9PSAoczE2KSAweDgwMDAgJiYgb3AyID09IChzMTYpIDB4ODAwMCkgewotCQlyZXN1bHQgPSAweDdmZmZmZmZmOwotCX0gZWxzZSB7Ci0JCXJlc3VsdCA9ICgoczMyKSAob3AxKSAqIChzMzIpIChvcDIpKTsKLQl9Ci0JcmV0dXJuIChzMTYpIChyZXN1bHQgPj4gMTUpOwotfQotCi0vKgotRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gYWRkIHR3byAzMiBiaXQgbnVtYmVycyBhbmQgcmV0dXJuIHRoZSAzMmJpdCByZXN1bHQuCi1JZiB0aGUgcmVzdWx0IG92ZXJmbG93IDMyIGJpdHMsIHRoZSBvdXRwdXQgd2lsbCBiZSBzYXR1cmF0ZWQgdG8gMzJiaXRzLgotKi8KLXMzMiBxbV9hZGQzMihzMzIgb3AxLCBzMzIgb3AyKQotewotCXMzMiByZXN1bHQ7Ci0JcmVzdWx0ID0gb3AxICsgb3AyOwotCWlmIChvcDEgPCAwICYmIG9wMiA8IDAgJiYgcmVzdWx0ID4gMCkgewotCQlyZXN1bHQgPSAweDgwMDAwMDAwOwotCX0gZWxzZSBpZiAob3AxID4gMCAmJiBvcDIgPiAwICYmIHJlc3VsdCA8IDApIHsKLQkJcmVzdWx0ID0gMHg3ZmZmZmZmZjsKLQl9Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoKLURlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIGFkZCB0d28gMTYgYml0IG51bWJlcnMgYW5kIHJldHVybiB0aGUgMTZiaXQgcmVzdWx0LgotSWYgdGhlIHJlc3VsdCBvdmVyZmxvdyAxNiBiaXRzLCB0aGUgb3V0cHV0IHdpbGwgYmUgc2F0dXJhdGVkIHRvIDE2Yml0cy4KLSovCi1zMTYgcW1fYWRkMTYoczE2IG9wMSwgczE2IG9wMikKLXsKLQlzMTYgcmVzdWx0OwotCXMzMiB0ZW1wID0gKHMzMikgb3AxICsgKHMzMikgb3AyOwotCWlmICh0ZW1wID4gKHMzMikgMHg3ZmZmKSB7Ci0JCXJlc3VsdCA9IChzMTYpIDB4N2ZmZjsKLQl9IGVsc2UgaWYgKHRlbXAgPCAoczMyKSAweGZmZmY4MDAwKSB7Ci0JCXJlc3VsdCA9IChzMTYpIDB4ZmZmZjgwMDA7Ci0JfSBlbHNlIHsKLQkJcmVzdWx0ID0gKHMxNikgdGVtcDsKLQl9Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoKLURlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIG1ha2UgMTYgYml0IHN1YnRyYWN0aW9uIGFuZCByZXR1cm4gdGhlIDE2Yml0IHJlc3VsdC4KLUlmIHRoZSByZXN1bHQgb3ZlcmZsb3cgMTYgYml0cywgdGhlIG91dHB1dCB3aWxsIGJlIHNhdHVyYXRlZCB0byAxNmJpdHMuCi0qLwotczE2IHFtX3N1YjE2KHMxNiBvcDEsIHMxNiBvcDIpCi17Ci0JczE2IHJlc3VsdDsKLQlzMzIgdGVtcCA9IChzMzIpIG9wMSAtIChzMzIpIG9wMjsKLQlpZiAodGVtcCA+IChzMzIpIDB4N2ZmZikgewotCQlyZXN1bHQgPSAoczE2KSAweDdmZmY7Ci0JfSBlbHNlIGlmICh0ZW1wIDwgKHMzMikgMHhmZmZmODAwMCkgewotCQlyZXN1bHQgPSAoczE2KSAweGZmZmY4MDAwOwotCX0gZWxzZSB7Ci0JCXJlc3VsdCA9IChzMTYpIHRlbXA7Ci0JfQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLS8qCi1EZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiBtYWtlIDMyIGJpdCBzdWJ0cmFjdGlvbiBhbmQgcmV0dXJuIHRoZSAzMmJpdCByZXN1bHQuCi1JZiB0aGUgcmVzdWx0IG92ZXJmbG93IDMyIGJpdHMsIHRoZSBvdXRwdXQgd2lsbCBiZSBzYXR1cmF0ZWQgdG8gMzJiaXRzLgotKi8KLXMzMiBxbV9zdWIzMihzMzIgb3AxLCBzMzIgb3AyKQotewotCXMzMiByZXN1bHQ7Ci0JcmVzdWx0ID0gb3AxIC0gb3AyOwotCWlmIChvcDEgPj0gMCAmJiBvcDIgPCAwICYmIHJlc3VsdCA8IDApIHsKLQkJcmVzdWx0ID0gMHg3ZmZmZmZmZjsKLQl9IGVsc2UgaWYgKG9wMSA8IDAgJiYgb3AyID4gMCAmJiByZXN1bHQgPiAwKSB7Ci0JCXJlc3VsdCA9IDB4ODAwMDAwMDA7Ci0JfQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLS8qCi1EZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiBtdWx0aXBseSBpbnB1dCAxNiBiaXQgbnVtYmVycyBhbmQgYWNjdW11bGF0ZSB0aGUgcmVzdWx0Ci1pbnRvIHRoZSBpbnB1dCAzMiBiaXQgbnVtYmVyIGFuZCByZXR1cm4gdGhlIDMyIGJpdCBhY2N1bXVsYXRlZCByZXN1bHQuCi1JZiB0aGUgYWNjdW11bGF0aW9uIHJlc3VsdCBpbiBvdmVyZmxvdywgdGhlbiB0aGUgb3V0cHV0IHdpbGwgYmUgc2F0dXJhdGVkLgotKi8KLXMzMiBxbV9tYWMzMjE2MTYoczMyIGFjYywgczE2IG9wMSwgczE2IG9wMikKLXsKLQlzMzIgcmVzdWx0OwotCXJlc3VsdCA9IHFtX2FkZDMyKGFjYywgcW1fbXVsMzIxNjE2KG9wMSwgb3AyKSk7Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoKLURlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIG1ha2UgYSAzMiBiaXQgc2F0dXJhdGVkIGxlZnQgc2hpZnQgd2hlbiB0aGUgc3BlY2lmaWVkIHNoaWZ0Ci1pcyArdmUuIFRoaXMgZnVuY3Rpb24gd2lsbCBtYWtlIGEgMzIgYml0IHJpZ2h0IHNoaWZ0IHdoZW4gdGhlIHNwZWNpZmllZCBzaGlmdCBpcyAtdmUuCi1UaGlzIGZ1bmN0aW9uIHJldHVybiB0aGUgcmVzdWx0IGFmdGVyIHNoaWZ0aW5nIG9wZXJhdGlvbi4KLSovCi1zMzIgcW1fc2hsMzIoczMyIG9wLCBpbnQgc2hpZnQpCi17Ci0JaW50IGk7Ci0JczMyIHJlc3VsdDsKLQlyZXN1bHQgPSBvcDsKLQlpZiAoc2hpZnQgPiAzMSkKLQkJc2hpZnQgPSAzMTsKLQllbHNlIGlmIChzaGlmdCA8IC0zMSkKLQkJc2hpZnQgPSAtMzE7Ci0JaWYgKHNoaWZ0ID49IDApIHsKLQkJZm9yIChpID0gMDsgaSA8IHNoaWZ0OyBpKyspIHsKLQkJCXJlc3VsdCA9IHFtX2FkZDMyKHJlc3VsdCwgcmVzdWx0KTsKLQkJfQotCX0gZWxzZSB7Ci0JCXJlc3VsdCA9IHJlc3VsdCA+PiAoLXNoaWZ0KTsKLQl9Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoKLURlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIG1ha2UgYSAzMiBiaXQgcmlnaHQgc2hpZnQgd2hlbiBzaGlmdCBpcyArdmUuCi1UaGlzIGZ1bmN0aW9uIG1ha2UgYSAzMiBiaXQgc2F0dXJhdGVkIGxlZnQgc2hpZnQgd2hlbiBzaGlmdCBpcyAtdmUuIFRoaXMgZnVuY3Rpb24KLXJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBzaGlmdCBvcGVyYXRpb24uCi0qLwotczMyIHFtX3NocjMyKHMzMiBvcCwgaW50IHNoaWZ0KQotewotCXJldHVybiBxbV9zaGwzMihvcCwgLXNoaWZ0KTsKLX0KLQotLyoKLURlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIG1ha2UgYSAxNiBiaXQgc2F0dXJhdGVkIGxlZnQgc2hpZnQgd2hlbiB0aGUgc3BlY2lmaWVkIHNoaWZ0Ci1pcyArdmUuIFRoaXMgZnVuY3Rpb24gd2lsbCBtYWtlIGEgMTYgYml0IHJpZ2h0IHNoaWZ0IHdoZW4gdGhlIHNwZWNpZmllZCBzaGlmdCBpcyAtdmUuCi1UaGlzIGZ1bmN0aW9uIHJldHVybiB0aGUgcmVzdWx0IGFmdGVyIHNoaWZ0aW5nIG9wZXJhdGlvbi4KLSovCi1zMTYgcW1fc2hsMTYoczE2IG9wLCBpbnQgc2hpZnQpCi17Ci0JaW50IGk7Ci0JczE2IHJlc3VsdDsKLQlyZXN1bHQgPSBvcDsKLQlpZiAoc2hpZnQgPiAxNSkKLQkJc2hpZnQgPSAxNTsKLQllbHNlIGlmIChzaGlmdCA8IC0xNSkKLQkJc2hpZnQgPSAtMTU7Ci0JaWYgKHNoaWZ0ID4gMCkgewotCQlmb3IgKGkgPSAwOyBpIDwgc2hpZnQ7IGkrKykgewotCQkJcmVzdWx0ID0gcW1fYWRkMTYocmVzdWx0LCByZXN1bHQpOwotCQl9Ci0JfSBlbHNlIHsKLQkJcmVzdWx0ID0gcmVzdWx0ID4+ICgtc2hpZnQpOwotCX0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi0vKgotRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gbWFrZSBhIDE2IGJpdCByaWdodCBzaGlmdCB3aGVuIHNoaWZ0IGlzICt2ZS4KLVRoaXMgZnVuY3Rpb24gbWFrZSBhIDE2IGJpdCBzYXR1cmF0ZWQgbGVmdCBzaGlmdCB3aGVuIHNoaWZ0IGlzIC12ZS4gVGhpcyBmdW5jdGlvbgotcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIHNoaWZ0IG9wZXJhdGlvbi4KLSovCi1zMTYgcW1fc2hyMTYoczE2IG9wLCBpbnQgc2hpZnQpCi17Ci0JcmV0dXJuIHFtX3NobDE2KG9wLCAtc2hpZnQpOwotfQotCi0vKgotRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gcmV0dXJuIHRoZSBudW1iZXIgb2YgcmVkdW5kYW50IHNpZ24gYml0cyBpbiBhIDE2IGJpdCBudW1iZXIuCi1FeGFtcGxlOiBxbV9ub3JtMTYoMHgwMDgwKSA9IDcuCi0qLwotczE2IHFtX25vcm0xNihzMTYgb3ApCi17Ci0JdTE2IHUxNmV4dHJhU2lnbkJpdHM7Ci0JaWYgKG9wID09IDApIHsKLQkJcmV0dXJuIDE1OwotCX0gZWxzZSB7Ci0JCXUxNmV4dHJhU2lnbkJpdHMgPSAwOwotCQl3aGlsZSAoKG9wID4+IDE1KSA9PSAob3AgPj4gMTQpKSB7Ci0JCQl1MTZleHRyYVNpZ25CaXRzKys7Ci0JCQlvcCA9IG9wIDw8IDE7Ci0JCX0KLQl9Ci0JcmV0dXJuIHUxNmV4dHJhU2lnbkJpdHM7Ci19Ci0KLS8qCi1EZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiByZXR1cm4gdGhlIG51bWJlciBvZiByZWR1bmRhbnQgc2lnbiBiaXRzIGluIGEgMzIgYml0IG51bWJlci4KLUV4YW1wbGU6IHFtX25vcm0zMigweDAwMDAwMDgwKSA9IDIzCi0qLwotczE2IHFtX25vcm0zMihzMzIgb3ApCi17Ci0JdTE2IHUxNmV4dHJhU2lnbkJpdHM7Ci0JaWYgKG9wID09IDApIHsKLQkJcmV0dXJuIDMxOwotCX0gZWxzZSB7Ci0JCXUxNmV4dHJhU2lnbkJpdHMgPSAwOwotCQl3aGlsZSAoKG9wID4+IDMxKSA9PSAob3AgPj4gMzApKSB7Ci0JCQl1MTZleHRyYVNpZ25CaXRzKys7Ci0JCQlvcCA9IG9wIDw8IDE7Ci0JCX0KLQl9Ci0JcmV0dXJuIHUxNmV4dHJhU2lnbkJpdHM7Ci19Ci0KLS8qCi1EZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiBkaXZpZGUgdHdvIDE2IGJpdCB1bnNpZ25lZCBudW1iZXJzLgotVGhlIG51bWVyYXRvciBzaG91bGQgYmUgbGVzcyB0aGFuIGRlbm9taW5hdG9yLiBTbyB0aGUgcXVvdGllbnQgaXMgYWx3YXlzIGxlc3MgdGhhbiAxLgotVGhpcyBmdW5jdGlvbiByZXR1cm4gdGhlIHF1b3RpZW50IGluIHEuMTUgZm9ybWF0LgotKi8KLXMxNiBxbV9kaXZfcyhzMTYgbnVtLCBzMTYgZGVub20pCi17Ci0JczE2IHZhcl9vdXQ7Ci0JczE2IGl0ZXJhdGlvbjsKLQlzMzIgTF9udW07Ci0JczMyIExfZGVub207Ci0JTF9udW0gPSAobnVtKSA8PCAxNTsKLQlMX2Rlbm9tID0gKGRlbm9tKSA8PCAxNTsKLQlmb3IgKGl0ZXJhdGlvbiA9IDA7IGl0ZXJhdGlvbiA8IDE1OyBpdGVyYXRpb24rKykgewotCQlMX251bSA8PD0gMTsKLQkJaWYgKExfbnVtID49IExfZGVub20pIHsKLQkJCUxfbnVtID0gcW1fc3ViMzIoTF9udW0sIExfZGVub20pOwotCQkJTF9udW0gPSBxbV9hZGQzMihMX251bSwgMSk7Ci0JCX0KLQl9Ci0JdmFyX291dCA9IChzMTYpIChMX251bSAmIDB4N2ZmZik7Ci0JcmV0dXJuIHZhcl9vdXQ7Ci19Ci0KLS8qCi1EZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiBjb21wdXRlIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBhIDE2IGJpdCBudW1iZXIuCi0qLwotczE2IHFtX2FiczE2KHMxNiBvcCkKLXsKLQlpZiAob3AgPCAwKSB7Ci0JCWlmIChvcCA9PSAoczE2KSAweGZmZmY4MDAwKSB7Ci0JCQlyZXR1cm4gMHg3ZmZmOwotCQl9IGVsc2UgewotCQkJcmV0dXJuIC1vcDsKLQkJfQotCX0gZWxzZSB7Ci0JCXJldHVybiBvcDsKLQl9Ci19Ci0KLS8qCi1EZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiBkaXZpZGUgdHdvIDE2IGJpdCBudW1iZXJzLgotVGhlIHF1b3RpZW50IGlzIHJldHVybmVkIHRocm91Z2ggcmV0dXJuIHZhbHVlLgotVGhlIHFmb3JtYXQgb2YgdGhlIHF1b3RpZW50IGlzIHJldHVybmVkIHRocm91Z2ggdGhlIHBvaW50ZXIgKHFRdW90aWVudCkgcGFzc2VkCi10byB0aGlzIGZ1bmN0aW9uLiBUaGUgcWZvcm1hdCBvZiBxdW90aWVudCBpcyBhZGp1c3RlZCBhcHByb3ByaWF0ZWx5IHN1Y2ggdGhhdAotdGhlIHF1b3RpZW50IG9jY3VwaWVzIGFsbCAxNiBiaXRzLgotKi8KLXMxNiBxbV9kaXYxNihzMTYgbnVtLCBzMTYgZGVub20sIHMxNiAqcVF1b3RpZW50KQotewotCXMxNiBzaWduOwotCXMxNiBuTnVtLCBuRGVub207Ci0Jc2lnbiA9IG51bSBeIGRlbm9tOwotCW51bSA9IHFtX2FiczE2KG51bSk7Ci0JZGVub20gPSBxbV9hYnMxNihkZW5vbSk7Ci0Jbk51bSA9IHFtX25vcm0xNihudW0pOwotCW5EZW5vbSA9IHFtX25vcm0xNihkZW5vbSk7Ci0JbnVtID0gcW1fc2hsMTYobnVtLCBuTnVtIC0gMSk7Ci0JZGVub20gPSBxbV9zaGwxNihkZW5vbSwgbkRlbm9tKTsKLQkqcVF1b3RpZW50ID0gbk51bSAtIDEgLSBuRGVub20gKyAxNTsKLQlpZiAoc2lnbiA+PSAwKSB7Ci0JCXJldHVybiBxbV9kaXZfcyhudW0sIGRlbm9tKTsKLQl9IGVsc2UgewotCQlyZXR1cm4gLXFtX2Rpdl9zKG51bSwgZGVub20pOwotCX0KLX0KLQotLyoKLURlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIGNvbXB1dGUgYWJzb2x1dGUgdmFsdWUgb2YgYSAzMiBiaXQgbnVtYmVyLgotKi8KLXMzMiBxbV9hYnMzMihzMzIgb3ApCi17Ci0JaWYgKG9wIDwgMCkgewotCQlpZiAob3AgPT0gKHMzMikgMHg4MDAwMDAwMCkgewotCQkJcmV0dXJuIDB4N2ZmZmZmZmY7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gLW9wOwotCQl9Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIG9wOwotCX0KLX0KLQotLyoKLURlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIGRpdmlkZSB0d28gMzIgYml0IG51bWJlcnMuIFRoZSBkaXZpc2lvbiBpcyBwZXJmb3JtZWQKLWJ5IGNvbnNpZGVyaW5nIG9ubHkgaW1wb3J0YW50IDE2IGJpdHMgaW4gMzIgYml0IG51bWJlcnMuCi1UaGUgcXVvdGllbnQgaXMgcmV0dXJuZWQgdGhyb3VnaCByZXR1cm4gdmFsdWUuCi1UaGUgcWZvcm1hdCBvZiB0aGUgcXVvdGllbnQgaXMgcmV0dXJuZWQgdGhyb3VnaCB0aGUgcG9pbnRlciAocXF1b3RpZW50KSBwYXNzZWQKLXRvIHRoaXMgZnVuY3Rpb24uIFRoZSBxZm9ybWF0IG9mIHF1b3RpZW50IGlzIGFkanVzdGVkIGFwcHJvcHJpYXRlbHkgc3VjaCB0aGF0Ci10aGUgcXVvdGllbnQgb2NjdXBpZXMgYWxsIDE2IGJpdHMuCi0qLwotczE2IHFtX2RpdjE2MzIzMihzMzIgbnVtLCBzMzIgZGVub20sIHMxNiAqcXF1b3RpZW50KQotewotCXMzMiBzaWduOwotCXMxNiBuTnVtLCBuRGVub207Ci0Jc2lnbiA9IG51bSBeIGRlbm9tOwotCW51bSA9IHFtX2FiczMyKG51bSk7Ci0JZGVub20gPSBxbV9hYnMzMihkZW5vbSk7Ci0Jbk51bSA9IHFtX25vcm0zMihudW0pOwotCW5EZW5vbSA9IHFtX25vcm0zMihkZW5vbSk7Ci0JbnVtID0gcW1fc2hsMzIobnVtLCBuTnVtIC0gMSk7Ci0JZGVub20gPSBxbV9zaGwzMihkZW5vbSwgbkRlbm9tKTsKLQkqcXF1b3RpZW50ID0gbk51bSAtIDEgLSBuRGVub20gKyAxNTsKLQlpZiAoc2lnbiA+PSAwKSB7Ci0JCXJldHVybiBxbV9kaXZfcygoczE2KSAobnVtID4+IDE2KSwgKHMxNikgKGRlbm9tID4+IDE2KSk7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIC1xbV9kaXZfcygoczE2KSAobnVtID4+IDE2KSwgKHMxNikgKGRlbm9tID4+IDE2KSk7Ci0JfQotfQotCi0vKgotRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gbXVsdGlwbHkgYSAzMiBiaXQgbnVtYmVyIHdpdGggYSAxNiBiaXQgbnVtYmVyLgotVGhlIG11bHRpcGxpY2F0b24gcmVzdWx0IGlzIHJpZ2h0IHNoaWZ0ZWQgYnkgMTYgYml0cyB0byBmaXQgdGhlIHJlc3VsdAotaW50byAzMiBiaXQgb3V0cHV0LgotKi8KLXMzMiBxbV9tdWwzMjMyMTYoczMyIG9wMSwgczE2IG9wMikKLXsKLQlzMTYgaGk7Ci0JdTE2IGxvOwotCXMzMiByZXN1bHQ7Ci0JaGkgPSBvcDEgPj4gMTY7Ci0JbG8gPSAoczE2KSAob3AxICYgMHhmZmZmKTsKLQlyZXN1bHQgPSBxbV9tdWwzMjE2MTYoaGksIG9wMik7Ci0JcmVzdWx0ID0gcmVzdWx0ICsgKHFtX211bHN1MzIxNjE2KG9wMiwgbG8pID4+IDE2KTsKLQlyZXR1cm4gcmVzdWx0OwotfQotCi0vKgotRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gbXVsdGlwbHkgc2lnbmVkIDE2IGJpdCBudW1iZXIgd2l0aCB1bnNpZ25lZCAxNiBiaXQgbnVtYmVyIGFuZCByZXR1cm4KLXRoZSByZXN1bHQgaW4gMzIgYml0cy4KLSovCi1zMzIgcW1fbXVsc3UzMjE2MTYoczE2IG9wMSwgdTE2IG9wMikKLXsKLQlyZXR1cm4gKHMzMikgKG9wMSkgKiBvcDI7Ci19Ci0KLS8qCi1EZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiBtdWx0aXBseSAzMiBiaXQgbnVtYmVyIHdpdGggMTYgYml0IG51bWJlci4gVGhlIG11bHRpcGxpY2F0aW9uIHJlc3VsdCBpcwotcmlnaHQgc2hpZnRlZCBieSAxNSBiaXRzIHRvIGZpdCB0aGUgcmVzdWx0IGludG8gMzIgYml0cy4gUmlnaHQgc2hpZnRpbmcgYnkgb25seSAxNSBiaXRzIGluc3RlYWQgb2YKLTE2IGJpdHMgaXMgZG9uZSB0byByZW1vdmUgdGhlIGV4dHJhIHNpZ24gYml0IGZvcm1lZCBieSBtdWx0aXBsaWNhdGlvbiBmcm9tIHRoZSByZXR1cm4gdmFsdWUuCi1XaGVuIHRoZSBpbnB1dCBudW1iZXJzIGFyZSAweDgwMDAwMDAwLCAweDgwMDAgdGhlIHJldHVybiB2YWx1ZSBpcyBzYXR1cmF0ZWQgdG8gMHg3ZmZmZmZmZi4KLSovCi1zMzIgcW1fbXVsczMyMzIxNihzMzIgb3AxLCBzMTYgb3AyKQotewotCXMxNiBoaTsKLQl1MTYgbG87Ci0JczMyIHJlc3VsdDsKLQloaSA9IG9wMSA+PiAxNjsKLQlsbyA9IChzMTYpIChvcDEgJiAweGZmZmYpOwotCXJlc3VsdCA9IHFtX211bHMzMjE2MTYoaGksIG9wMik7Ci0JcmVzdWx0ID0gcW1fYWRkMzIocmVzdWx0LCAocW1fbXVsc3UzMjE2MTYob3AyLCBsbykgPj4gMTUpKTsKLQlyZXR1cm4gcmVzdWx0OwotfQotCi0vKgotRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gbXVsdGlwbHkgdHdvIDMyIGJpdCBudW1iZXJzLiBUaGUgbXVsdGlwbGljYXRpb24gcmVzdWx0IGlzIHJpZ2h0Ci1zaGlmdGVkIGJ5IDMyIGJpdHMgdG8gZml0IHRoZSBtdWx0aXBsaWNhdGlvbiByZXN1bHQgaW50byAzMiBiaXRzLiBUaGUgcmlnaHQgc2hpZnRlZAotbXVsdGlwbGljYXRpb24gcmVzdWx0IGlzIHJldHVybmVkIGFzIG91dHB1dC4KLSovCi1zMzIgcW1fbXVsMzIoczMyIGEsIHMzMiBiKQotewotCXMxNiBoaTEsIGhpMjsKLQl1MTYgbG8xLCBsbzI7Ci0JczMyIHJlc3VsdDsKLQloaTEgPSBhID4+IDE2OwotCWhpMiA9IGIgPj4gMTY7Ci0JbG8xID0gKHUxNikgKGEgJiAweGZmZmYpOwotCWxvMiA9ICh1MTYpIChiICYgMHhmZmZmKTsKLQlyZXN1bHQgPSBxbV9tdWwzMjE2MTYoaGkxLCBoaTIpOwotCXJlc3VsdCA9IHJlc3VsdCArIChxbV9tdWxzdTMyMTYxNihoaTEsIGxvMikgPj4gMTYpOwotCXJlc3VsdCA9IHJlc3VsdCArIChxbV9tdWxzdTMyMTYxNihoaTIsIGxvMSkgPj4gMTYpOwotCXJldHVybiByZXN1bHQ7Ci19Ci0KLS8qCi1EZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiBtdWx0aXBseSB0d28gMzIgYml0IG51bWJlcnMuIFRoZSBtdWx0aXBsaWNhdGlvbiByZXN1bHQgaXMKLXJpZ2h0IHNoaWZ0ZWQgYnkgMzEgYml0cyB0byBmaXQgdGhlIG11bHRpcGxpY2F0aW9uIHJlc3VsdCBpbnRvIDMyIGJpdHMuIFRoZSByaWdodAotc2hpZnRlZCBtdWx0aXBsaWNhdGlvbiByZXN1bHQgaXMgcmV0dXJuZWQgYXMgb3V0cHV0LiBSaWdodCBzaGlmdGluZyBieSBvbmx5IDMxIGJpdHMKLWluc3RlYWQgb2YgMzIgYml0cyBpcyBkb25lIHRvIHJlbW92ZSB0aGUgZXh0cmEgc2lnbiBiaXQgZm9ybWVkIGJ5IG11bHRpcGxpY2F0aW9uLgotV2hlbiB0aGUgaW5wdXQgbnVtYmVycyBhcmUgMHg4MDAwMDAwMCwgMHg4MDAwMDAwMCB0aGUgcmV0dXJuIHZhbHVlIGlzIHNhdHVyYXRlZCB0bwotMHg3ZmZmZmZmZi4KLSovCi1zMzIgcW1fbXVsczMyKHMzMiBhLCBzMzIgYikKLXsKLQlzMTYgaGkxLCBoaTI7Ci0JdTE2IGxvMSwgbG8yOwotCXMzMiByZXN1bHQ7Ci0JaGkxID0gYSA+PiAxNjsKLQloaTIgPSBiID4+IDE2OwotCWxvMSA9ICh1MTYpIChhICYgMHhmZmZmKTsKLQlsbzIgPSAodTE2KSAoYiAmIDB4ZmZmZik7Ci0JcmVzdWx0ID0gcW1fbXVsczMyMTYxNihoaTEsIGhpMik7Ci0JcmVzdWx0ID0gcW1fYWRkMzIocmVzdWx0LCAocW1fbXVsc3UzMjE2MTYoaGkxLCBsbzIpID4+IDE1KSk7Ci0JcmVzdWx0ID0gcW1fYWRkMzIocmVzdWx0LCAocW1fbXVsc3UzMjE2MTYoaGkyLCBsbzEpID4+IDE1KSk7Ci0JcmVzdWx0ID0gcW1fYWRkMzIocmVzdWx0LCAocW1fbXVsdTE2KGxvMSwgbG8yKSA+PiAxNSkpOwotCXJldHVybiByZXN1bHQ7Ci19Ci0KLS8qIFRoaXMgdGFibGUgaXMgbG9nMigxKyhpLzMyKSkgd2hlcmUgaT1bMDoxOjMxXSwgaW4gcS4xNSBmb3JtYXQgKi8KLXN0YXRpYyBjb25zdCBzMTYgbG9nX3RhYmxlW10gPSB7Ci0JMCwKLQkxNDU1LAotCTI4NjYsCi0JNDIzNiwKLQk1NTY4LAotCTY4NjMsCi0JODEyNCwKLQk5MzUyLAotCTEwNTQ5LAotCTExNzE2LAotCTEyODU1LAotCTEzOTY4LAotCTE1MDU1LAotCTE2MTE3LAotCTE3MTU2LAotCTE4MTczLAotCTE5MTY4LAotCTIwMTQzLAotCTIxMDk4LAotCTIyMDM0LAotCTIyOTUyLAotCTIzODUyLAotCTI0NzM2LAotCTI1NjA0LAotCTI2NDU1LAotCTI3MjkyLAotCTI4MTE0LAotCTI4OTIyLAotCTI5NzE3LAotCTMwNDk4LAotCTMxMjY3LAotCTMyMDI0Ci19OwotCi0jZGVmaW5lIExPR19UQUJMRV9TSVpFIDMyCS8qIGxvZ190YWJsZSBzaXplICovCi0jZGVmaW5lIExPRzJfTE9HX1RBQkxFX1NJWkUgNQkvKiBsb2cyKGxvZ190YWJsZSBzaXplKSAqLwotI2RlZmluZSBRX0xPR19UQUJMRSAxNQkJLyogcWZvcm1hdCBvZiBsb2dfdGFibGUgKi8KLSNkZWZpbmUgTE9HMTBfMgkJMTk3MjgJLyogbG9nMTAoMikgaW4gcS4xNiAqLwotCi0vKgotRGVzY3JpcHRpb246Ci1UaGlzIHJvdXRpbmUgdGFrZXMgdGhlIGlucHV0IG51bWJlciBOIGFuZCBpdHMgcSBmb3JtYXQgcU4gYW5kIGNvbXB1dGUKLXRoZSBsb2cxMChOKS4gVGhpcyByb3V0aW5lIGZpcnN0IG5vcm1hbGl6ZXMgdGhlIGlucHV0IG5vIE4uCVRoZW4gTiBpcyBpbiBtYWcqKDJeeCkgZm9ybWF0LgotbWFnIGlzIGFueSBudW1iZXIgaW4gdGhlIHJhbmdlIDJeMzAtKDJeMzEgLSAxKS4gVGhlbiBsb2cyKG1hZyAqIDJeeCkgPSBsb2cyKG1hZykgKyB4IGlzIGNvbXB1dGVkLgotRnJvbSB0aGF0IGxvZzEwKG1hZyAqIDJeeCkgPSBsb2cyKG1hZyAqIDJeeCkgKiBsb2cxMCgyKSBpcyBjb21wdXRlZC4KLVRoaXMgcm91dGluZSBsb29rcyB0aGUgbG9nMiB2YWx1ZSBpbiB0aGUgdGFibGUgY29uc2lkZXJpbmcgTE9HMl9MT0dfVEFCTEVfU0laRSsxIE1TQnMuCi1BcyB0aGUgTVNCIGlzIGFsd2F5cyAxLCBvbmx5IG5leHQgTE9HMl9PRl9MT0dfVEFCTEVfU0laRSBNU0JzIGFyZSB1c2VkIGZvciB0YWJsZSBsb29rdXAuCi1OZXh0IDE2IE1TQnMgYXJlIHVzZWQgZm9yIGludGVycG9sYXRpb24uCi1JbnB1dHM6Ci1OIC0gbnVtYmVyIHRvIHdoaWNoIGxvZzEwIGhhcyB0byBiZSBmb3VuZC4KLXFOIC0gcSBmb3JtYXQgb2YgTgotbG9nMTBOIC0gYWRkcmVzcyB3aGVyZSBsb2cxMChOKSB3aWxsIGJlIHdyaXR0ZW4uCi1xTG9nMTBOIC0gYWRkcmVzcyB3aGVyZSBsb2cxME4gcWZvcm1hdCB3aWxsIGJlIHdyaXR0ZW4uCi1Ob3RlL1Byb2JsZW06Ci1Gb3IgYWNjdXJhdGUgcmVzdWx0cyBpbnB1dCBzaG91bGQgYmUgaW4gbm9ybWFsaXplZCBvciBuZWFyIG5vcm1hbGl6ZWQgZm9ybS4KLSovCi12b2lkIHFtX2xvZzEwKHMzMiBOLCBzMTYgcU4sIHMxNiAqbG9nMTBOLCBzMTYgKnFMb2cxME4pCi17Ci0JczE2IHMxNm5vcm0sIHMxNnRhYmxlSW5kZXgsIHMxNmVycm9yQXBwcm94aW1hdGlvbjsKLQl1MTYgdTE2b2Zmc2V0OwotCXMzMiBzMzJsb2c7Ci0KLQkvKiBMb2dlcml0aG0gb2YgbmVnYXRpdmUgdmFsdWVzIGlzIHVuZGVmaW5lZC4KLQkgKiBhc3NlcnQgTiBpcyBncmVhdGVyIHRoYW4gMC4KLQkgKi8KLQkvKiBBU1NFUlQoTiA+IDApOyAqLwotCi0JLyogbm9ybWFsaXplIHRoZSBOLiAqLwotCXMxNm5vcm0gPSBxbV9ub3JtMzIoTik7Ci0JTiA9IE4gPDwgczE2bm9ybTsKLQotCS8qIFRoZSBxZm9ybWF0IG9mIE4gYWZ0ZXIgbm9ybWFsaXphdGlvbi4KLQkgKiAtMzAgaXMgYWRkZWQgdG8gdHJlYXQgdGhlIG5vIGFzIGJldHdlZW4gMS4wIHRvIDIuMAotCSAqIGkuZS4gYWZ0ZXIgYWRkaW5nIHRoZSAtMzAgdG8gdGhlIHFmb3JtYXQgdGhlIGRlY2ltYWwgcG9pbnQgd2lsbCBiZQotCSAqIGp1c3QgcmlndGh0IG9mIHRoZSBNU0IuIChpLmUuIGFmdGVyIHNpZ24gYml0IGFuZCAxc3QgTVNCKS4gaS5lLgotCSAqIGF0IHRoZSByaWdodCBzaWRlIG9mIDMwdGggYml0LgotCSAqLwotCXFOID0gcU4gKyBzMTZub3JtIC0gMzA7Ci0KLQkvKiB0YWtlIHRoZSB0YWJsZSBpbmRleCBhcyB0aGUgTE9HMl9PRl9MT0dfVEFCTEVfU0laRSBiaXRzIHJpZ2h0IG9mIHRoZSBNU0IgKi8KLQlzMTZ0YWJsZUluZGV4ID0gKHMxNikgKE4gPj4gKDMyIC0gKDIgKyBMT0cyX0xPR19UQUJMRV9TSVpFKSkpOwotCi0JLyogcmVtb3ZlIHRoZSBNU0IuIHRoZSBNU0IgaXMgYWx3YXlzIDEgYWZ0ZXIgbm9ybWFsaXphdGlvbi4gKi8KLQlzMTZ0YWJsZUluZGV4ID0KLQkgICAgczE2dGFibGVJbmRleCAmIChzMTYpICgoMSA8PCBMT0cyX0xPR19UQUJMRV9TSVpFKSAtIDEpOwotCi0JLyogcmVtb3ZlIHRoZSAoMStMT0cyX09GX0xPR19UQUJMRV9TSVpFKSBNU0JzIGluIHRoZSBOLiAqLwotCU4gPSBOICYgKCgxIDw8ICgzMiAtICgyICsgTE9HMl9MT0dfVEFCTEVfU0laRSkpKSAtIDEpOwotCi0JLyogdGFrZSB0aGUgb2Zmc2V0IGFzIHRoZSAxNiBNU0JTIGFmdGVyIHRhYmxlIGluZGV4LgotCSAqLwotCXUxNm9mZnNldCA9ICh1MTYpIChOID4+ICgzMiAtICgyICsgTE9HMl9MT0dfVEFCTEVfU0laRSArIDE2KSkpOwotCi0JLyogbG9vayB0aGUgbG9nIHZhbHVlIGluIHRoZSB0YWJsZS4gKi8KLQlzMzJsb2cgPSBsb2dfdGFibGVbczE2dGFibGVJbmRleF07CS8qIHEuMTUgZm9ybWF0ICovCi0KLQkvKiBpbnRlcnBvbGF0ZSB1c2luZyB0aGUgb2Zmc2V0LiAqLwotCXMxNmVycm9yQXBwcm94aW1hdGlvbiA9IChzMTYpIHFtX211bHUxNih1MTZvZmZzZXQsICh1MTYpIChsb2dfdGFibGVbczE2dGFibGVJbmRleCArIDFdIC0gbG9nX3RhYmxlW3MxNnRhYmxlSW5kZXhdKSk7CS8qIHEuMTUgKi8KLQotCXMzMmxvZyA9IHFtX2FkZDE2KChzMTYpIHMzMmxvZywgczE2ZXJyb3JBcHByb3hpbWF0aW9uKTsJLyogcS4xNSBmb3JtYXQgKi8KLQotCS8qIGFkanVzdCBmb3IgdGhlIHFmb3JtYXQgb2YgdGhlIE4gYXMKLQkgKiBsb2cyKG1hZyAqIDJeeCkgPSBsb2cyKG1hZykgKyB4Ci0JICovCi0JczMybG9nID0gcW1fYWRkMzIoczMybG9nLCAoKHMzMikgLXFOKSA8PCAxNSk7CS8qIHEuMTUgZm9ybWF0ICovCi0KLQkvKiBub3JtYWxpemUgdGhlIHJlc3VsdC4gKi8KLQlzMTZub3JtID0gcW1fbm9ybTMyKHMzMmxvZyk7Ci0KLQkvKiBicmluZyBhbGwgdGhlIGltcG9ydGFudCBiaXRzIGludG8gbG93ZXIgMTYgYml0cyAqLwotCXMzMmxvZyA9IHFtX3NobDMyKHMzMmxvZywgczE2bm9ybSAtIDE2KTsJLyogcS4xNStzMTZub3JtLTE2IGZvcm1hdCAqLwotCi0JLyogY29tcHV0ZSB0aGUgbG9nMTAoTikgYnkgbXVsdGlwbHlpbmcgbG9nMihOKSB3aXRoIGxvZzEwKDIpLgotCSAqIGFzIGxvZzEwKG1hZyAqIDJeeCkgPSBsb2cyKG1hZyAqIDJeeCkgKiBsb2cxMCgyKQotCSAqIGxvZzEwTiBpbiBxLjE1K3MxNm5vcm0tMTYrMSAoTE9HMTBfMiBpcyBpbiBxLjE2KQotCSAqLwotCSpsb2cxME4gPSBxbV9tdWxzMTYoKHMxNikgczMybG9nLCAoczE2KSBMT0cxMF8yKTsKLQotCS8qIHdyaXRlIHRoZSBxIGZvcm1hdCBvZiB0aGUgcmVzdWx0LiAqLwotCSpxTG9nMTBOID0gMTUgKyBzMTZub3JtIC0gMTYgKyAxOwotCi0JcmV0dXJuOwotfQotCi0vKgotRGVzY3JpcHRpb246Ci1UaGlzIHJvdXRpbmUgY29tcHV0ZSAxL04uCi1UaGlzIHJvdXRpbmUgcmVmb3JtYXRlcyB0aGUgZ2l2ZW4gbm8gTiBhcyBOICogMl5xTiB3aGVyZSBOIGlzIGluIGJldHdlZW4gMC41IGFuZCAxLjAKLWluIHEuMTUgZm9ybWF0IGluIDE2IGJpdHMuIFNvIHRoZSBwcm9ibGVtIG5vdyBib2lscyBkb3duIHRvIGZpbmRpbmcgdGhlIGludmVyc2Ugb2YgYQotcS4xNSBubyBpbiAxNiBiaXRzIHdoaWNoIGlzIGluIHRoZSByYW5nZSBvZiAwLjUgdG8gMS4wLiBUaGUgb3V0cHV0IGlzIGFsd2F5cyBiZXR3ZWVuCi0yLjAgdG8gMS4gU28gdGhlIG91dHB1dCBpcyAyLjAgdG8gMS4wIGluIHEuMzAgZm9ybWF0LiBPbmNlIHRoZSBmaW5hbCBvdXRwdXQgZm9ybWF0IGlzIGZvdW5kCi1ieSB0YWtpbmcgdGhlIHFOIGludG8gYWNjb3VudC4gSW52ZXJzZSBpcyBmb3VuZCB3aXRoIG5ld3RvbiByYXBzb24gbWV0aG9kLiBJbml0aWFsbHkKLWludmVyc2UgKHgpIGlzIGd1ZXNzZWQgYXMgMS8wLjc1ICh3aXRoIGFwcHJvcHJpYXRlIHNpZ24pLiBUaGUgbmV3IGd1ZXNzIGlzIGNhbGN1bGF0ZWQKLXVzaW5nIHRoZSBmb3JtdWxhIHgnID0gMip4IC0gTip4KnguIEFmdGVyIDQgb3IgNSBpdGVyYXRpb25zIHRoZSBpbnZlcnNlIGlzIHZlcnkgY2xvc2UgdG8KLWludmVyc2Ugb2YgTi4KLUlucHV0czoKLU4gLSBudW1iZXIgdG8gd2hpY2ggMS9OIGhhcyB0byBiZSBmb3VuZC4KLXFuIC0gcSBmb3JtYXQgb2YgTi4KLXNxcnROIC0gYWRkcmVzcyB3aGVyZSAxL04gaGFzIHRvIGJlIHdyaXR0ZW4uCi1xc3FydE4gLSBhZGRyZXNzIHdoZXJlIHEgZm9ybWF0IG9mIDEvTiBoYXMgdG8gYmUgd3JpdHRlbi4KLSovCi0jZGVmaW5lIHF4IDI5Ci12b2lkIHFtXzFieU4oczMyIE4sIHMxNiBxTiwgczMyICpyZXN1bHQsIHMxNiAqcVJlc3VsdCkKLXsKLQlzMTYgbm9ybU47Ci0JczMyIHMzMmZpcnN0VGVybSwgczMyc2Vjb25kVGVybSwgeDsKLQlpbnQgaTsKLQotCW5vcm1OID0gcW1fbm9ybTMyKE4pOwotCi0JLyogbGltaXQgTiB0byBsZWFzdCBzaWduaWZpY2FudCAxNiBiaXRzLiAxNXRoIGJpdCBpcyB0aGUgc2lnbiBiaXQuICovCi0JTiA9IHFtX3NobDMyKE4sIG5vcm1OIC0gMTYpOwotCXFOID0gcU4gKyBub3JtTiAtIDE2IC0gMTU7Ci0JLyogLTE1IGlzIGFkZGVkIHRvIHRyZWF0IE4gYXMgMTYgYml0IHEuMTUgbnVtYmVyIGluIHRoZSByYW5nZSBmcm9tIDAuNSB0byAxICovCi0KLQkvKiBUYWtlIHRoZSBpbml0aWFsIGd1ZXNzIGFzIDEvMC43NSBpbiBxeCBmb3JtYXQgd2l0aCBhcHByb3ByaWF0ZSBzaWduLiAqLwotCWlmIChOID49IDApIHsKLQkJeCA9IChzMzIpICgoMSAvIDAuNzUpICogKDEgPDwgcXgpKTsKLQkJLyogaW5wdXQgbm8gaXMgaW4gdGhlIHJhbmdlIDAuNSB0byAxLiBTbyAxLzAuNzUgaXMgdGFrZW4gYXMgaW5pdGlhbCBndWVzcy4gKi8KLQl9IGVsc2UgewotCQl4ID0gKHMzMikgKCgxIC8gLTAuNzUpICogKDEgPDwgcXgpKTsKLQkJLyogaW5wdXQgbm8gaXMgaW4gdGhlIHJhbmdlIC0wLjUgdG8gLTEuIFNvIDEvLTAuNzUgaXMgdGFrZW4gYXMgaW5pdGlhbCBndWVzcy4gKi8KLQl9Ci0KLQkvKiBpdGVyYXRlIHRoZSBlcXVhdGlvbiB4ID0gMip4IC0gTip4KnggZm9yIDQgdGltZXMuICovCi0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlzMzJmaXJzdFRlcm0gPSBxbV9zaGwzMih4LCAxKTsJLyogczMyZmlyc3RUZXJtID0gMip4IGluIHEuMjkgKi8KLQkJczMyc2Vjb25kVGVybSA9Ci0JCSAgICBxbV9tdWxzMzIxNjE2KChzMTYpIChzMzJmaXJzdFRlcm0gPj4gMTYpLAotCQkJCSAgKHMxNikgKHMzMmZpcnN0VGVybSA+PiAxNikpOwotCQkvKiBzMzJzZWNvbmRUZXJtID0geCp4IGluIHEuKDI5KzEtMTYpKjIrMSAqLwotCQlzMzJzZWNvbmRUZXJtID0KLQkJICAgIHFtX211bHMzMjE2MTYoKHMxNikgKHMzMnNlY29uZFRlcm0gPj4gMTYpLCAoczE2KSBOKTsKLQkJLyogczMyc2Vjb25kVGVybSA9IE4qeCp4IGluIHEuKCgyOSsxLTE2KSoyKzEpLTE2KzE1KzEgaS5lLiBpbiBxLjI5ICovCi0JCXggPSBxbV9zdWIzMihzMzJmaXJzdFRlcm0sIHMzMnNlY29uZFRlcm0pOwotCQkvKiBjYW4gYmUgYWRkZWQgZGlyZWN0bHkgYXMgYm90aCBhcmUgaW4gcS4yOSAqLwotCX0KLQotCS8qIEJyaW5nIHRoZSB4IHRvIHEuMzAgZm9ybWF0LiAqLwotCSpyZXN1bHQgPSBxbV9zaGwzMih4LCAxKTsKLQkvKiBnaXZpbmcgdGhlIG91dHB1dCBpbiBxLjMwIGZvcm1hdCBmb3IgcS4xNSBpbnB1dCBpbiAxNiBiaXRzLiAqLwotCi0JLyogY29tcHV0ZSB0aGUgZmluYWwgcSBmb3JtYXQgb2YgdGhlIHJlc3VsdC4gKi8KLQkqcVJlc3VsdCA9IC1xTiArIDMwOwkvKiBhZGp1c3RpbmcgdGhlIHEgZm9ybWF0IG9mIGFjdHVhbCBvdXRwdXQgKi8KLQotCXJldHVybjsKLX0KLQotI3VuZGVmIHF4CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvc2JwY21jaWEuaCBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9zYnBjbWNpYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGMxNTY1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9zYnBjbWNpYS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjE3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgQnJvYWRjb20gQ29ycG9yYXRpb24KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkKLSAqIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTgotICogT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTgotICogQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0jaWZuZGVmCV9TQlBDTUNJQV9ICi0jZGVmaW5lCV9TQlBDTUNJQV9ICi0KLS8qIEFsbCB0aGUgYWRkcmVzc2VzIHRoYXQgYXJlIG9mZnNldHMgaW4gYXR0cmlidXRlIHNwYWNlIGFyZSBkaXZpZGVkCi0gKiBieSB0d28gdG8gYWNjb3VudCBmb3IgdGhlIGZhY3QgdGhhdCBvZGQgYnl0ZXMgYXJlIGludmFsaWQgaW4KLSAqIGF0dHJpYnV0ZSBzcGFjZSBhbmQgb3VyIHJlYWQvd3JpdGUgcm91dGluZXMgbWFrZSB0aGUgc3BhY2UgYXBwZWFyCi0gKiBhcyBpZiB0aGV5IGRpZG4ndCBleGlzdC4gU3RpbGwgd2Ugd2FudCB0byBzaG93IHRoZSBvcmlnaW5hbCBudW1iZXJzCi0gKiBhcyBkb2N1bWVudGVkIGluIHRoZSBobmRfcGNtY2lhIGNvcmUgbWFudWFsLgotICovCi0KLS8qIFBDTUNJQSBGdW5jdGlvbiBDb25maWd1cmF0aW9uIFJlZ2lzdGVycyAqLwotI2RlZmluZQlQQ01DSUFfRkNSCQkoMHg3MDAgLyAyKQotCi0jZGVmaW5lCUZDUjBfT0ZGCQkwCi0jZGVmaW5lCUZDUjFfT0ZGCQkoMHg0MCAvIDIpCi0jZGVmaW5lCUZDUjJfT0ZGCQkoMHg4MCAvIDIpCi0jZGVmaW5lCUZDUjNfT0ZGCQkoMHhjMCAvIDIpCi0KLSNkZWZpbmUJUENNQ0lBX0ZDUjAJCSgweDcwMCAvIDIpCi0jZGVmaW5lCVBDTUNJQV9GQ1IxCQkoMHg3NDAgLyAyKQotI2RlZmluZQlQQ01DSUFfRkNSMgkJKDB4NzgwIC8gMikKLSNkZWZpbmUJUENNQ0lBX0ZDUjMJCSgweDdjMCAvIDIpCi0KLS8qIFN0YW5kYXJkIFBDTUNJQSBGQ1IgcmVnaXN0ZXJzICovCi0KLSNkZWZpbmUJUENNQ0lBX0NPUgkJMAotCi0jZGVmaW5lCUNPUl9SU1QJCQkweDgwCi0jZGVmaW5lCUNPUl9MRVYJCQkweDQwCi0jZGVmaW5lCUNPUl9JUlFFTgkJMHgwNAotI2RlZmluZQlDT1JfQkxSRU4JCTB4MDEKLSNkZWZpbmUJQ09SX0ZVTkVOCQkweDAxCi0KLSNkZWZpbmUJUENJQ0lBX0ZDU1IJCSgyIC8gMikKLSNkZWZpbmUJUENJQ0lBX1BSUgkJKDQgLyAyKQotI2RlZmluZQlQQ0lDSUFfU0NSCQkoNiAvIDIpCi0jZGVmaW5lCVBDSUNJQV9FU1IJCSg4IC8gMikKLQotI2RlZmluZSBQQ01fTUVNT0ZGCQkweDAwMDAKLSNkZWZpbmUgRjBfTUVNT0ZGCQkweDEwMDAKLSNkZWZpbmUgRjFfTUVNT0ZGCQkweDIwMDAKLSNkZWZpbmUgRjJfTUVNT0ZGCQkweDMwMDAKLSNkZWZpbmUgRjNfTUVNT0ZGCQkweDQwMDAKLQotLyogTWVtb3J5IGJhc2UgaW4gdGhlIGZ1bmN0aW9uIGZjcidzICovCi0jZGVmaW5lIE1FTV9BRERSMAkJKDB4NzI4IC8gMikKLSNkZWZpbmUgTUVNX0FERFIxCQkoMHg3MmEgLyAyKQotI2RlZmluZSBNRU1fQUREUjIJCSgweDcyYyAvIDIpCi0KLS8qIFBDTUNJQSBiYXNlIHBsdXMgU3JvbSBhY2Nlc3MgaW4gZmNyMDogKi8KLSNkZWZpbmUgUENNQ0lBX0FERFIwCQkoMHgwNzJlIC8gMikKLSNkZWZpbmUgUENNQ0lBX0FERFIxCQkoMHgwNzMwIC8gMikKLSNkZWZpbmUgUENNQ0lBX0FERFIyCQkoMHgwNzMyIC8gMikKLQotI2RlZmluZSBNRU1fU0VHCQkJKDB4MDczNCAvIDIpCi0jZGVmaW5lIFNST01fQ1MJCQkoMHgwNzM2IC8gMikKLSNkZWZpbmUgU1JPTV9EQVRBTAkJKDB4MDczOCAvIDIpCi0jZGVmaW5lIFNST01fREFUQUgJCSgweDA3M2EgLyAyKQotI2RlZmluZSBTUk9NX0FERFJMCQkoMHgwNzNjIC8gMikKLSNkZWZpbmUgU1JPTV9BRERSSAkJKDB4MDczZSAvIDIpCi0jZGVmaW5lCVNST01fSU5GTzIJCSgweDA3NzIgLyAyKQkvKiBDb3JlcmV2ID49IDIgJiYgPD0gNSAqLwotI2RlZmluZQlTUk9NX0lORk8JCSgweDA3YmUgLyAyKQkvKiBDb3JlcmV2ID49IDYgKi8KLQotLyogIFZhbHVlcyBmb3Igc3JvbV9jczogKi8KLSNkZWZpbmUgU1JPTV9JRExFCQkwCi0jZGVmaW5lIFNST01fV1JJVEUJCTEKLSNkZWZpbmUgU1JPTV9SRUFECQkyCi0jZGVmaW5lIFNST01fV0VOCQk0Ci0jZGVmaW5lIFNST01fV0RTCQk3Ci0jZGVmaW5lIFNST01fRE9ORQkJOAotCi0vKiBGaWVsZHMgaW4gc3JvbV9pbmZvOiAqLwotI2RlZmluZQlTUklfU1pfTUFTSwkJMHgwMwotI2RlZmluZQlTUklfQkxBTksJCTB4MDQKLSNkZWZpbmUJU1JJX09UUAkJCTB4ODAKLQotI2lmICFkZWZpbmVkKEVTVEFfUE9TVE1PR1JJRllfUkVNT1ZBTCkKLS8qIENJUyBzdHVmZiAqLwotCi0vKiBUaGUgQ0lTIHN0b3BzIHdoZXJlIHRoZSBGQ1JzIHN0YXJ0ICovCi0jZGVmaW5lCUNJU19TSVpFCQlQQ01DSUFfRkNSCi0KLS8qIENJUyB0dXBsZSBsZW5ndGggZmllbGQgbWF4ICovCi0jZGVmaW5lIENJU19UVVBMRV9MRU5fTUFYCTB4ZmYKLQotLyogU3RhbmRhcmQgdHVwbGVzIHdlIGtub3cgYWJvdXQgKi8KLQotI2RlZmluZSBDSVNUUExfTlVMTAkJCTB4MDAKLSNkZWZpbmUJQ0lTVFBMX1ZFUlNfMQkJMHgxNQkvKiBDSVMgdmVyLCBtYW5mLCBkZXYgJiB2ZXIgc3RyaW5ncyAqLwotI2RlZmluZQlDSVNUUExfTUFORklECQkweDIwCS8qIE1hbnVmYWN0dXJlciBhbmQgZGV2aWNlIGlkICovCi0jZGVmaW5lIENJU1RQTF9GVU5DSUQJCTB4MjEJLyogRnVuY3Rpb24gaWRlbnRpZmljYXRpb24gKi8KLSNkZWZpbmUJQ0lTVFBMX0ZVTkNFCQkweDIyCS8qIEZ1bmN0aW9uIGV4dGVuc2lvbnMgKi8KLSNkZWZpbmUJQ0lTVFBMX0NGVEFCTEUJCTB4MWIJLyogQ29uZmlnIHRhYmxlIGVudHJ5ICovCi0jZGVmaW5lCUNJU1RQTF9FTkQJCTB4ZmYJLyogRW5kIG9mIHRoZSBDSVMgdHVwbGUgY2hhaW4gKi8KLQotLyogRnVuY3Rpb24gaWRlbnRpZmllciBwcm92aWRlcyBjb250ZXh0IGZvciB0aGUgZnVuY3Rpb24gZXh0ZW5zaW9ucyB0dXBsZSAqLwotI2RlZmluZSBDSVNUUExfRklEX1NESU8JCTB4MGMJLyogRXh0ZW5zaW9ucyBkZWZpbmVkIGJ5IFNESU8gc3BlYyAqLwotCi0vKiBGdW5jdGlvbiBleHRlbnNpb25zIGZvciBMQU5zIChhc3N1bWVkIGZvciBleHRlbnNpb25zIG90aGVyIHRoYW4gU0RJTykgKi8KLSNkZWZpbmUJTEFOX1RFQ0gJCTEJLyogVGVjaG5vbG9neSB0eXBlICovCi0jZGVmaW5lCUxBTl9TUEVFRAkJMgkvKiBSYXcgYml0IHJhdGUgKi8KLSNkZWZpbmUJTEFOX01FRElBCQkzCS8qIFRyYW5zbWlzc2lvbiBtZWRpYSAqLwotI2RlZmluZQlMQU5fTklECQkJNAkvKiBOb2RlIGlkZW50aWZpY2F0aW9uIChha2EgTUFDIGFkZHIpICovCi0jZGVmaW5lCUxBTl9DT05OCQk1CS8qIENvbm5lY3RvciBzdGFuZGFyZCAqLwotCi0vKiBDRlRhYmxlICovCi0jZGVmaW5lIENGVEFCTEVfUkVHV0lOXzJLCTB4MDgJLyogMmsgcmVnIHdpbmRvd3Mgc2l6ZSAqLwotI2RlZmluZSBDRlRBQkxFX1JFR1dJTl80SwkweDEwCS8qIDRrIHJlZyB3aW5kb3dzIHNpemUgKi8KLSNkZWZpbmUgQ0ZUQUJMRV9SRUdXSU5fOEsJMHgyMAkvKiA4ayByZWcgd2luZG93cyBzaXplICovCi0KLS8qIFZlbmRvciB1bmlxdWUgdHVwbGVzIGFyZSAweDgwLTB4OGYuIFdpdGhpbiBCcm9hZGNvbSB3ZSdsbAotICogdGFrZSBvbmUgZm9yIEhOQlUsIGFuZCB1c2UgImV4dGVuc2lvbnMiIChhIGxhIEZVTkNFKSB3aXRoaW4gaXQuCi0gKi8KLQotI2RlZmluZQlDSVNUUExfQlJDTV9ITkJVCTB4ODAKLQotLyogU3VidHlwZXMgb2YgQlJDTV9ITkJVOiAqLwotCi0jZGVmaW5lIEhOQlVfU1JPTVJFVgkJMHgwMAkvKiBBIGJ5dGUgd2l0aCBzcm9tcmV2LCAxIGlmIG5vdCBwcmVzZW50ICovCi0jZGVmaW5lIEhOQlVfQ0hJUElECQkweDAxCS8qIFR3byAxNmJpdCB2YWx1ZXM6IFBDSSB2ZW5kb3IgJiBkZXZpY2UgaWQgKi8KLSNkZWZpbmUgSE5CVV9CT0FSRFJFVgkJMHgwMgkvKiBPbmUgYnl0ZSBib2FyZCByZXZpc2lvbiAqLwotI2RlZmluZSBITkJVX1BBUEFSTVMJCTB4MDMJLyogUEEgcGFyYW1ldGVyczogOCAoc3JvbXJldiA9PSAxKQotCQkJCQkgKiBvciA5IChzcm9tcmV2ID4gMSkgYnl0ZXMKLQkJCQkJICovCi0jZGVmaW5lIEhOQlVfT0VNCQkweDA0CS8qIEVpZ2h0IGJ5dGVzIE9FTSBkYXRhIChzcm9tcmV2ID09IDEpICovCi0jZGVmaW5lIEhOQlVfQ0MJCQkweDA1CS8qIERlZmF1bHQgY291bnRyeSBjb2RlIChzcm9tcmV2ID09IDEpICovCi0jZGVmaW5lCUhOQlVfQUEJCQkweDA2CS8qIEFudGVubmFzIGF2YWlsYWJsZSAqLwotI2RlZmluZQlITkJVX0FHCQkJMHgwNwkvKiBBbnRlbm5hIGdhaW4gKi8KLSNkZWZpbmUgSE5CVV9CT0FSREZMQUdTCQkweDA4CS8qIGJvYXJkIGZsYWdzICgyIG9yIDQgYnl0ZXMpICovCi0jZGVmaW5lIEhOQlVfTEVEUwkJMHgwOQkvKiBMRUQgc2V0ICovCi0jZGVmaW5lIEhOQlVfQ0NPREUJCTB4MGEJLyogQ291bnRyeSBjb2RlICgyIGJ5dGVzIGFzY2lpICsgMSBieXRlIGNjdGwpCi0JCQkJCSAqIGluIHJldiAyCi0JCQkJCSAqLwotI2RlZmluZSBITkJVX0NDS1BPCQkweDBiCS8qIDIgYnl0ZSBjY2sgcG93ZXIgb2Zmc2V0cyBpbiByZXYgMyAqLwotI2RlZmluZSBITkJVX09GRE1QTwkJMHgwYwkvKiA0IGJ5dGUgMTFnIG9mZG0gcG93ZXIgb2Zmc2V0cyBpbiByZXYgMyAqLwotI2RlZmluZSBITkJVX0dQSU9USU1FUgkJMHgwZAkvKiAyIGJ5dGVzIHdpdGggb24vb2ZmIHZhbHVlcyBpbiByZXYgMyAqLwotI2RlZmluZSBITkJVX1BBUEFSTVM1RwkJMHgwZQkvKiA1RyBQQSBwYXJhbXMgKi8KLSNkZWZpbmUgSE5CVV9BTlQ1RwkJMHgwZgkvKiA0MzI4IDVHIGFudGVubmFzIGF2YWlsYWJsZS9nYWluICovCi0jZGVmaW5lIEhOQlVfUkRMSUQJCTB4MTAJLyogMiBieXRlIFVTQiByZW1vdGUgZG93bmxvYWRlciAoUkRMKSBwcm9kdWN0IElkICovCi0jZGVmaW5lIEhOQlVfUlNTSVNNQlhBMkcJMHgxMQkvKiA0MzI4IDJHIFJTU0kgbWlkIHB0IHNlbCAmIGJvYXJkIHN3aXRjaCBhcmNoLAotCQkJCQkgKiAyIGJ5dGVzLCByZXYgMy4KLQkJCQkJICovCi0jZGVmaW5lIEhOQlVfUlNTSVNNQlhBNUcJMHgxMgkvKiA0MzI4IDVHIFJTU0kgbWlkIHB0IHNlbCAmIGJvYXJkIHN3aXRjaCBhcmNoLAotCQkJCQkgKiAyIGJ5dGVzLCByZXYgMy4KLQkJCQkJICovCi0jZGVmaW5lIEhOQlVfWFRBTEZSRVEJCTB4MTMJLyogNCBieXRlIENyeXN0YWwgZnJlcXVlbmN5IGluIGtpbG9oZXJ0eiAqLwotI2RlZmluZSBITkJVX1RSSTJHCQkweDE0CS8qIDQzMjggMkcgVFIgaXNvbGF0aW9uLCAxIGJ5dGUgKi8KLSNkZWZpbmUgSE5CVV9UUkk1RwkJMHgxNQkvKiA0MzI4IDVHIFRSIGlzb2xhdGlvbiwgMyBieXRlcyAqLwotI2RlZmluZSBITkJVX1JYUE8yRwkJMHgxNgkvKiA0MzI4IDJHIFJYIHBvd2VyIG9mZnNldCwgMSBieXRlICovCi0jZGVmaW5lIEhOQlVfUlhQTzVHCQkweDE3CS8qIDQzMjggNUcgUlggcG93ZXIgb2Zmc2V0LCAxIGJ5dGUgKi8KLSNkZWZpbmUgSE5CVV9CT0FSRE5VTQkJMHgxOAkvKiBib2FyZCBzZXJpYWwgbnVtYmVyLCBpbmRlcGVuZGVudCBvZiBtYWMgYWRkciAqLwotI2RlZmluZSBITkJVX01BQ0FERFIJCTB4MTkJLyogbWFjIGFkZHIgb3ZlcnJpZGUgZm9yIHRoZSBzdGFuZGFyZCBDSVMgTEFOX05JRCAqLwotI2RlZmluZSBITkJVX1JETFNOCQkweDFhCS8qIDIgYnl0ZXM7IHNlcmlhbCAjIGFkdmVydGlzZWQgaW4gVVNCIGRlc2NyaXB0b3IgKi8KLSNkZWZpbmUgSE5CVV9CT0FSRFRZUEUJCTB4MWIJLyogMiBieXRlczsgYm9hcmR0eXBlICovCi0jZGVmaW5lIEhOQlVfTEVEREMJCTB4MWMJLyogMiBieXRlczsgTEVEIGR1dHkgY3ljbGUgKi8KLSNkZWZpbmUgSE5CVV9ITkJVQ0lTCQkweDFkCS8qIHdoYXQgZm9sbG93cyBpcyBwcm9wcmlldGFyeSBITkJVIENJUyBmb3JtYXQgKi8KLSNkZWZpbmUgSE5CVV9QQVBBUk1TX1NTTFBOUEhZCTB4MWUJLyogU1NMUE5QSFkgUEEgcGFyYW1zICovCi0jZGVmaW5lIEhOQlVfUlNTSVNNQlhBMkdfU1NMUE5QSFkgMHgxZgkvKiBTU0xQTlBIWSBSU1NJIG1pZCBwdCBzZWwgJiBib2FyZCBzd2l0Y2ggYXJjaCAqLwotI2RlZmluZSBITkJVX1JETFJORElTCQkweDIwCS8qIDEgYnl0ZTsgMSA9IFJETCBhZHZlcnRpc2VzIFJORElTIGNvbmZpZyAqLwotI2RlZmluZSBITkJVX0NIQUlOU1dJVENICTB4MjEJLyogMiBieXRlOyB0eGNoYWluLCByeGNoYWluICovCi0jZGVmaW5lIEhOQlVfUkVHUkVWCQkweDIyCS8qIDEgYnl0ZTsgKi8KLSNkZWZpbmUgSE5CVV9GRU0JCTB4MjMJLyogMiBvciA0IGJ5dGU6IDExbiBmcm9udGVuZCBzcGVjaWZpY2F0aW9uICovCi0jZGVmaW5lIEhOQlVfUEFQQVJNU19DMAkJMHgyNAkvKiA4IG9yIDMwIGJ5dGVzOiAxMW4gcGEgcGFyYW1hdGVyIGZvciBjaGFpbiAwICovCi0jZGVmaW5lIEhOQlVfUEFQQVJNU19DMQkJMHgyNQkvKiA4IG9yIDMwIGJ5dGVzOiAxMW4gcGEgcGFyYW1hdGVyIGZvciBjaGFpbiAxICovCi0jZGVmaW5lIEhOQlVfUEFQQVJNU19DMgkJMHgyNgkvKiA4IG9yIDMwIGJ5dGVzOiAxMW4gcGEgcGFyYW1hdGVyIGZvciBjaGFpbiAyICovCi0jZGVmaW5lIEhOQlVfUEFQQVJNU19DMwkJMHgyNwkvKiA4IG9yIDMwIGJ5dGVzOiAxMW4gcGEgcGFyYW1hdGVyIGZvciBjaGFpbiAzICovCi0jZGVmaW5lIEhOQlVfUE9fQ0NLT0ZETQkJMHgyOAkvKiA2IG9yIDE4IGJ5dGVzOiBjY2syZy9vZmRtMmcvb2ZkbTVnIHBvd2VyIG9mZnNldCAqLwotI2RlZmluZSBITkJVX1BPX01DUzJHCQkweDI5CS8qIDggYnl0ZXM6IG1jczJnIHBvd2VyIG9mZnNldCAqLwotI2RlZmluZSBITkJVX1BPX01DUzVHTQkJMHgyYQkvKiA4IGJ5dGVzOiBtY3M1ZyBtaWQgYmFuZCBwb3dlciBvZmZzZXQgKi8KLSNkZWZpbmUgSE5CVV9QT19NQ1M1R0xICQkweDJiCS8qIDE2IGJ5dGVzOiBtY3M1ZyBsb3ctaGlnaCBiYW5kIHBvd2VyIG9mZnNldCAqLwotI2RlZmluZSBITkJVX1BPX0NERAkJMHgyYwkvKiAyIGJ5dGVzOiBjZGQyZy81ZyBwb3dlciBvZmZzZXQgKi8KLSNkZWZpbmUgSE5CVV9QT19TVEJDCQkweDJkCS8qIDIgYnl0ZXM6IHN0YmMyZy81ZyBwb3dlciBvZmZzZXQgKi8KLSNkZWZpbmUgSE5CVV9QT180ME0JCTB4MmUJLyogMiBieXRlczogNDBNaHogY2hhbm5lbCAyZy81ZyBwb3dlciBvZmZzZXQgKi8KLSNkZWZpbmUgSE5CVV9QT180ME1EVVAJCTB4MmYJLyogMiBieXRlczogNDBNaHogY2hhbm5lbCBkdXAgMmcvNWcgcG93ZXIgb2Zmc2V0ICovCi0KLSNkZWZpbmUgSE5CVV9SRExSV1UJCTB4MzAJLyogMSBieXRlOyAxID0gUkRMIGFkdmVydGlzZXMgUmVtb3RlIFdha2UtdXAgKi8KLSNkZWZpbmUgSE5CVV9XUFMJCTB4MzEJLyogMSBieXRlOyBHUElPIHBpbiBmb3IgV1BTIGJ1dHRvbiAqLwotI2RlZmluZSBITkJVX1VTQkZTCQkweDMyCS8qIDEgYnl0ZTsgMSA9IFVTQiBhZHZlcnRpc2VzIEZTIG1vZGUgb25seSAqLwotI2RlZmluZSBITkJVX0JSTUlOCQkweDMzCS8qIDQgYnl0ZSBib290bG9hZGVyIG1pbiByZXNvdXJjZSBtYXNrICovCi0jZGVmaW5lIEhOQlVfQlJNQVgJCTB4MzQJLyogNCBieXRlIGJvb3Rsb2FkZXIgbWF4IHJlc291cmNlIG1hc2sgKi8KLSNkZWZpbmUgSE5CVV9QQVRDSAkJMHgzNQkvKiBib290bG9hZGVyIHBhdGNoIGFkZHIoMmIpICYgZGF0YSg0YikgcGFpciAqLwotI2RlZmluZSBITkJVX0NDS0ZJTFRUWVBFCTB4MzYJLyogQ0NLIGRpZ2l0YWwgZmlsdGVyIHNlbGVjdGlvbiBvcHRpb25zICovCi0jZGVmaW5lIEhOQlVfT0ZETVBPNUcJCTB4MzcJLyogNCAqIDMgPSAxMiBieXRlIDExYSBvZmRtIHBvd2VyIG9mZnNldHMgaW4gcmV2IDMgKi8KLQotI2RlZmluZSBITkJVX1VTQkVQTlVNCQkweDQwCS8qIFVTQiBlbmRwb2ludCBudW1iZXJzICovCi0jZGVmaW5lIEhOQlVfU1JPTTNTV1JHTgkJMHg4MAkvKiA3OCBieXRlczsgc3JvbSByZXYgMyBzL3cgcmVnaW9uIHdpdGhvdXQgY3JjOAotCQkJCQkgKiBwbHVzIGV4dHJhIGluZm8gYXBwZW5kZWQuCi0JCQkJCSAqLwotI2RlZmluZSBITkJVX1JFU0VSVkVECQkweDgxCS8qIFJlc2VydmVkIGZvciBub24tQlJDTSBwb3N0LW1mZyBhZGRpdGlvbnMgKi8KLSNkZWZpbmUgSE5CVV9DVVNUT00xCQkweDgyCS8qIDQgYnl0ZTsgRm9yIG5vbi1CUkNNIHBvc3QtbWZnIGFkZGl0aW9ucyAqLwotI2RlZmluZSBITkJVX0NVU1RPTTIJCTB4ODMJLyogUmVzZXJ2ZWQ7IEZvciBub24tQlJDTSBwb3N0LW1mZyBhZGRpdGlvbnMgKi8KLSNlbmRpZgkJCQkvKiAhZGVmaW5lZChFU1RBX1BPU1RNT0dSSUZZX1JFTU9WQUwpICovCi0KLS8qIHNidG1zdGF0ZWxvdyAqLwotI2RlZmluZSBTQlRNTF9JTlRfQUNLCQkweDQwMDAwCS8qIGFjayB0aGUgc2IgaW50ZXJydXB0ICovCi0jZGVmaW5lIFNCVE1MX0lOVF9FTgkJMHgyMDAwMAkvKiBlbmFibGUgc2IgaW50ZXJydXB0ICovCi0KLS8qIHNidG1zdGF0ZWhpZ2ggKi8KLSNkZWZpbmUgU0JUTUhfSU5UX1NUQVRVUwkweDQwMDAwCS8qIHNiIGludGVycnVwdCBzdGF0dXMgKi8KLQotI2VuZGlmCQkJCS8qIF9TQlBDTUNJQV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvc2Jzb2NyYW0uaCBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9zYnNvY3JhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2ZlOTg1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9zYnNvY3JhbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgQnJvYWRjb20gQ29ycG9yYXRpb24KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkKLSAqIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTgotICogT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTgotICogQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0jaWZuZGVmCV9TQlNPQ1JBTV9ICi0jZGVmaW5lCV9TQlNPQ1JBTV9ICi0KLSNpZm5kZWYgX0xBTkdVQUdFX0FTU0VNQkxZCi0KLS8qIGNwcCBjb250b3J0aW9ucyB0byBjb25jYXRlbmF0ZSB3L2FyZyBwcmVzY2FuICovCi0jaWZuZGVmIFBBRAotI2RlZmluZQlfUEFETElORShsaW5lKQlwYWQgIyMgbGluZQotI2RlZmluZQlfWFNUUihsaW5lKQlfUEFETElORShsaW5lKQotI2RlZmluZQlQQUQJCV9YU1RSKF9fTElORV9fKQotI2VuZGlmCQkJCS8qIFBBRCAqLwotCi0vKiBNZW1jc29jcmFtIGNvcmUgcmVnaXN0ZXJzICovCi10eXBlZGVmIHZvbGF0aWxlIHN0cnVjdCBzYnNvY3JhbXJlZ3MgewotCXUzMiBjb3JlaW5mbzsKLQl1MzIgYndhbGxvYzsKLQl1MzIgZXh0cmFjb3JlaW5mbzsKLQl1MzIgYmlzdHN0YXQ7Ci0JdTMyIGJhbmtpZHg7Ci0JdTMyIHN0YW5kYnljdHJsOwotCi0JdTMyIGVycmxvZ3N0YXR1czsJLyogcmV2IDYgKi8KLQl1MzIgZXJybG9nYWRkcjsJLyogcmV2IDYgKi8KLQkvKiB1c2VkIGZvciBwYXRjaGluZyByZXYgMyAmIDUgKi8KLQl1MzIgY2FtYmFua2lkeDsKLQl1MzIgY2FtYmFua3N0YW5kYnljdHJsOwotCXUzMiBjYW1iYW5rcGF0Y2hjdHJsOwotCXUzMiBjYW1iYW5rcGF0Y2h0YmxiYXNlYWRkcjsKLQl1MzIgY2FtYmFua2NtZHJlZzsKLQl1MzIgY2FtYmFua2RhdGFyZWc7Ci0JdTMyIGNhbWJhbmttYXNrcmVnOwotCXUzMiBQQURbMV07Ci0JdTMyIGJhbmtpbmZvOwkvKiBjb3JldiA4ICovCi0JdTMyIFBBRFsxNV07Ci0JdTMyIGV4dG1lbWNvbmZpZzsKLQl1MzIgZXh0bWVtcGFyaXR5Y3NyOwotCXUzMiBleHRtZW1wYXJpdHllcnJkYXRhOwotCXUzMiBleHRtZW1wYXJpdHllcnJjbnQ7Ci0JdTMyIGV4dG1lbXdyY3RybGFuZHNpemU7Ci0JdTMyIFBBRFs4NF07Ci0JdTMyIHdvcmthcm91bmQ7Ci0JdTMyIHB3cmN0bDsJCS8qIGNvcmVyZXYgPj0gMiAqLwotfSBzYnNvY3JhbXJlZ3NfdDsKLQotI2VuZGlmCQkJCS8qIF9MQU5HVUFHRV9BU1NFTUJMWSAqLwotCi0vKiBSZWdpc3RlciBvZmZzZXRzICovCi0jZGVmaW5lCVNSX0NPUkVJTkZPCQkweDAwCi0jZGVmaW5lCVNSX0JXQUxMT0MJCTB4MDQKLSNkZWZpbmUJU1JfQklTVFNUQVQJCTB4MGMKLSNkZWZpbmUJU1JfQkFOS0lOREVYCQkweDEwCi0jZGVmaW5lCVNSX0JBTktTVEJZQ1RMCQkweDE0Ci0jZGVmaW5lIFNSX1BXUkNUTAkJMHgxZTgKLQotLyogQ29yZWluZm8gcmVnaXN0ZXIgKi8KLSNkZWZpbmUJU1JDSV9QVF9NQVNLCQkweDAwMDcwMDAwCS8qIGNvcmVyZXYgPj0gNjsgcG9ydCB0eXBlWzE4OjE2XSAqLwotI2RlZmluZQlTUkNJX1BUX1NISUZUCQkxNgotLyogcG9ydCB0eXBlcyA6IFNSQ0lfUFRfPHByb2Nlc3NvclBUPl88YmFja3BsYW5lUFQ+ICovCi0jZGVmaW5lIFNSQ0lfUFRfT0NQX09DUAkJMAotI2RlZmluZSBTUkNJX1BUX0FYSV9PQ1AJCTEKLSNkZWZpbmUgU1JDSV9QVF9BUk03QUhCX09DUAkyCi0jZGVmaW5lIFNSQ0lfUFRfQ00zQUhCX09DUAkzCi0jZGVmaW5lIFNSQ0lfUFRfQVhJX0FYSQkJNAotI2RlZmluZSBTUkNJX1BUX0FIQl9BWEkJCTUKLS8qIGNvcmVyZXYgPj0gMyAqLwotI2RlZmluZSBTUkNJX0xTU19NQVNLCQkweDAwZjAwMDAwCi0jZGVmaW5lIFNSQ0lfTFNTX1NISUZUCQkyMAotI2RlZmluZSBTUkNJX0xSU19NQVNLCQkweDBmMDAwMDAwCi0jZGVmaW5lIFNSQ0lfTFJTX1NISUZUCQkyNAotCi0vKiBJbiBjb3JlcmV2IDAsIHRoZSBtZW1vcnkgc2l6ZSBpcyAyIHRvIHRoZSBwb3dlciBvZiB0aGUKLSAqIGJhc2UgcGx1cyAxNiBwbHVzIHRvIHRoZSBjb250ZW50cyBvZiB0aGUgbWVtc2l6ZSBmaWVsZCBwbHVzIDEuCi0gKi8KLSNkZWZpbmUJU1JDSV9NUzBfTUFTSwkJMHhmCi0jZGVmaW5lIFNSX01TMF9CQVNFCQkxNgotCi0vKgotICogSW4gY29yZXJldiAxIHRoZSBiYW5rIHNpemUgaXMgMiBeIHRoZSBiYW5rIHNpemUgZmllbGQgcGx1cyAxNCwKLSAqIHRoZSBtZW1vcnkgc2l6ZSBpcyBudW1iZXIgb2YgYmFua3MgdGltZXMgYmFuayBzaXplLgotICogVGhlIHNhbWUgYXBwbGllcyB0byByb20gc2l6ZS4KLSAqLwotI2RlZmluZQlTUkNJX1JPTU5CX01BU0sJCTB4ZjAwMAotI2RlZmluZQlTUkNJX1JPTU5CX1NISUZUCTEyCi0jZGVmaW5lCVNSQ0lfUk9NQlNaX01BU0sJMHhmMDAKLSNkZWZpbmUJU1JDSV9ST01CU1pfU0hJRlQJOAotI2RlZmluZQlTUkNJX1NSTkJfTUFTSwkJMHhmMAotI2RlZmluZQlTUkNJX1NSTkJfU0hJRlQJCTQKLSNkZWZpbmUJU1JDSV9TUkJTWl9NQVNLCQkweGYKLSNkZWZpbmUJU1JDSV9TUkJTWl9TSElGVAkwCi0KLSNkZWZpbmUgU1JfQlNaX0JBU0UJCTE0Ci0KLS8qIFN0YW5kYnkgY29udHJvbCByZWdpc3RlciAqLwotI2RlZmluZQlTUlNDX1NCWU9WUl9NQVNLCTB4ODAwMDAwMDAKLSNkZWZpbmUJU1JTQ19TQllPVlJfU0hJRlQJMzEKLSNkZWZpbmUJU1JTQ19TQllPVlJWQUxfTUFTSwkweDYwMDAwMDAwCi0jZGVmaW5lCVNSU0NfU0JZT1ZSVkFMX1NISUZUCTI5Ci0jZGVmaW5lCVNSU0NfU0JZRU5fTUFTSwkJMHgwMTAwMDAwMAkvKiByZXYgPj0gMyAqLwotI2RlZmluZQlTUlNDX1NCWUVOX1NISUZUCTI0Ci0KLS8qIFBvd2VyIGNvbnRyb2wgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgU1JQQ19QTVVfU1RCWURJU19NQVNLCTB4MDAwMDAwMTAJLyogcmV2ID49IDMgKi8KLSNkZWZpbmUgU1JQQ19QTVVfU1RCWURJU19TSElGVAk0Ci0jZGVmaW5lIFNSUENfU1RCWU9WUlZBTF9NQVNLCTB4MDAwMDAwMDgKLSNkZWZpbmUgU1JQQ19TVEJZT1ZSVkFMX1NISUZUCTMKLSNkZWZpbmUgU1JQQ19TVEJZT1ZSX01BU0sJMHgwMDAwMDAwNwotI2RlZmluZSBTUlBDX1NUQllPVlJfU0hJRlQJMAotCi0vKiBFeHRyYSBjb3JlIGNhcGFiaWxpdHkgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgU1JFQ0NfTlVNX0JBTktTX01BU0sgICAweDAwMDAwMEYwCi0jZGVmaW5lIFNSRUNDX05VTV9CQU5LU19TSElGVCAgNAotI2RlZmluZSBTUkVDQ19CQU5LU0laRV9NQVNLICAgIDB4MDAwMDAwMEYKLSNkZWZpbmUgU1JFQ0NfQkFOS1NJWkVfU0hJRlQgICAwCi0KLSNkZWZpbmUgU1JFQ0NfQkFOS1NJWkUodmFsdWUpCSAoMSA8PCAodmFsdWUpKQotCi0vKiBDQU0gYmFuayBwYXRjaCBjb250cm9sICovCi0jZGVmaW5lIFNSQ0JQQ19QQVRDSEVOQUJMRSAweDgwMDAwMDAwCi0KLSNkZWZpbmUgU1JQX0FERFJFU1MgICAweDAwMDFGRkZDCi0jZGVmaW5lIFNSUF9WQUxJRCAgICAgMHg4MDAwCi0KLS8qIENBTSBiYW5rIGNvbW1hbmQgcmVnICovCi0jZGVmaW5lIFNSQ01EX1dSSVRFICAweDAwMDIwMDAwCi0jZGVmaW5lIFNSQ01EX1JFQUQgICAweDAwMDEwMDAwCi0jZGVmaW5lIFNSQ01EX0RPTkUgICAweDgwMDAwMDAwCi0KLSNkZWZpbmUgU1JDTURfRE9ORV9ETFkJMTAwMAotCi0vKiBiYW5raWR4IGFuZCBiYW5raW5mbyByZWcgZGVmaW5lcyBjb3JlcmV2ID49IDggKi8KLSNkZWZpbmUgU09DUkFNX0JBTktJTkZPX1NaTUFTSwkJMHgzZgotI2RlZmluZSBTT0NSQU1fQkFOS0lEWF9ST01fTUFTSwkJMHgxMDAKLQotI2RlZmluZSBTT0NSQU1fQkFOS0lEWF9NRU1UWVBFX1NISUZUCTgKLS8qIHNvY3JhbSBiYW5raW5mbyBtZW10eXBlICovCi0jZGVmaW5lIFNPQ1JBTV9NRU1UWVBFX1JBTQkJMAotI2RlZmluZSBTT0NSQU1fTUVNVFlQRV9SME0JCTEKLSNkZWZpbmUgU09DUkFNX01FTVRZUEVfREVWUkFNCQkyCi0KLSNkZWZpbmUJU09DUkFNX0JBTktJTkZPX1JFRwkJMHg0MAotI2RlZmluZQlTT0NSQU1fQkFOS0lEWF9SRUcJCTB4MTAKLSNkZWZpbmUJU09DUkFNX0JBTktJTkZPX1NUREJZX01BU0sJMHg0MDAKLSNkZWZpbmUJU09DUkFNX0JBTktJTkZPX1NUREJZX1RJTUVSCTB4ODAwCi0KLS8qIGJhbmtpbmZvIHJldiA+PSAxMCAqLwotI2RlZmluZSBTT0NSQU1fQkFOS0lORk9fREVWUkFNU0VMX1NISUZUCTEzCi0jZGVmaW5lIFNPQ1JBTV9CQU5LSU5GT19ERVZSQU1TRUxfTUFTSwkweDIwMDAKLSNkZWZpbmUgU09DUkFNX0JBTktJTkZPX0RFVlJBTVBST19TSElGVAkxNAotI2RlZmluZSBTT0NSQU1fQkFOS0lORk9fREVWUkFNUFJPX01BU0sJMHg0MDAwCi0KLS8qIGV4dHJhY29yZWluZm8gcmVnaXN0ZXIgKi8KLSNkZWZpbmUgU09DUkFNX0RFVlJBTUJBTktfTUFTSwkJMHhGMDAwCi0jZGVmaW5lIFNPQ1JBTV9ERVZSQU1CQU5LX1NISUZUCQkxMgotCi0vKiBiYW5rIGluZm8gdG8gY2FsY3VsYXRlIGJhbmsgc2l6ZSAqLwotI2RlZmluZQlTT0NSQU1fQkFOS0lORk9fU1pCQVNFCQk4MTkyCi0jZGVmaW5lIFNPQ1JBTV9CQU5LU0laRV9TSElGVAkJMTMJLyogU09DUkFNX0JBTktJTkZPX1NaQkFTRSAqLwotCi0jZW5kaWYJCQkJLyogX1NCU09DUkFNX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9zYnV0aWxzLmMgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvc2J1dGlscy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWRkZThlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9zYnV0aWxzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWQotICogU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0gKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OCi0gKiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOCi0gKiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGJjbWRlZnMuaD4KLSNpZmRlZiBCUkNNX0ZVTExNQUMKLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNlbmRpZgotI2luY2x1ZGUgPGJjbXV0aWxzLmg+Ci0jaW5jbHVkZSA8c2l1dGlscy5oPgotI2luY2x1ZGUgPGJjbWRldnMuaD4KLSNpbmNsdWRlIDxobmRzb2MuaD4KLSNpbmNsdWRlIDxzYmNoaXBjLmg+Ci0jaW5jbHVkZSA8cGNpX2NvcmUuaD4KLSNpbmNsdWRlIDxwY2ljZmcuaD4KLSNpbmNsdWRlIDxzYnBjbWNpYS5oPgotI2luY2x1ZGUgInNpdXRpbHNfcHJpdi5oIgotCi0vKiBsb2NhbCBwcm90b3R5cGVzICovCi1zdGF0aWMgdWludCBfc2JfY29yZWlkeChzaV9pbmZvX3QgKnNpaSwgdTMyIHNiYSk7Ci1zdGF0aWMgdWludCBfc2Jfc2NhbihzaV9pbmZvX3QgKnNpaSwgdTMyIHNiYSwgdm9pZCAqcmVncywgdWludCBidXMsCi0JCSAgICAgdTMyIHNiYmEsIHVpbnQgbmNvcmVzKTsKLXN0YXRpYyB1MzIgX3NiX2NvcmVzYmEoc2lfaW5mb190ICpzaWkpOwotc3RhdGljIHZvaWQgKl9zYl9zZXRjb3JlaWR4KHNpX2luZm9fdCAqc2lpLCB1aW50IGNvcmVpZHgpOwotCi0jZGVmaW5lCVNFVF9TQlJFRyhzaWksIHIsIG1hc2ssIHZhbCkJXAotCQlXX1NCUkVHKChzaWkpLCAociksICgoUl9TQlJFRygoc2lpKSwgKHIpKSAmIH4obWFzaykpIHwgKHZhbCkpKQotI2RlZmluZQlSRUdTMlNCKHZhKQkoc2Jjb25maWdfdCAqKSAoKHM4ICopKHZhKSArIFNCQ09ORklHT0ZGKQotCi0vKiBzb25pY3NyZXYgKi8KLSNkZWZpbmUJU09OSUNTXzJfMgkoU0JJRExfUlZfMl8yID4+IFNCSURMX1JWX1NISUZUKQotI2RlZmluZQlTT05JQ1NfMl8zCShTQklETF9SVl8yXzMgPj4gU0JJRExfUlZfU0hJRlQpCi0KLSNkZWZpbmUJUl9TQlJFRyhzaWksIHNicikJc2JfcmVhZF9zYnJlZygoc2lpKSwgKHNicikpCi0jZGVmaW5lCVdfU0JSRUcoc2lpLCBzYnIsIHYpCXNiX3dyaXRlX3NicmVnKChzaWkpLCAoc2JyKSwgKHYpKQotI2RlZmluZQlBTkRfU0JSRUcoc2lpLCBzYnIsIHYpCVwKLQlXX1NCUkVHKChzaWkpLCAoc2JyKSwgKFJfU0JSRUcoKHNpaSksIChzYnIpKSAmICh2KSkpCi0jZGVmaW5lCU9SX1NCUkVHKHNpaSwgc2JyLCB2KQlcCi0JV19TQlJFRygoc2lpKSwgKHNiciksIChSX1NCUkVHKChzaWkpLCAoc2JyKSkgfCAodikpKQotCi1zdGF0aWMgdTMyIHNiX3JlYWRfc2JyZWcoc2lfaW5mb190ICpzaWksIHZvbGF0aWxlIHUzMiAqc2JyKQotewotCXJldHVybiBSX1JFRyhzYnIpOwotfQotCi1zdGF0aWMgdm9pZCBzYl93cml0ZV9zYnJlZyhzaV9pbmZvX3QgKnNpaSwgdm9sYXRpbGUgdTMyICpzYnIsIHUzMiB2KQotewotCVdfUkVHKHNiciwgdik7Ci19Ci0KLXVpbnQgc2JfY29yZWlkKHNpX3QgKnNpaCkKLXsKLQlzaV9pbmZvX3QgKnNpaTsKLQlzYmNvbmZpZ190ICpzYjsKLQotCXNpaSA9IFNJX0lORk8oc2loKTsKLQlzYiA9IFJFR1MyU0Ioc2lpLT5jdXJtYXApOwotCi0JcmV0dXJuIChSX1NCUkVHKHNpaSwgJnNiLT5zYmlkaGlnaCkgJiBTQklESF9DQ19NQVNLKSA+PgotCQlTQklESF9DQ19TSElGVDsKLX0KLQotLyogcmV0dXJuIGNvcmUgaW5kZXggb2YgdGhlIGNvcmUgd2l0aCBhZGRyZXNzICdzYmEnICovCi1zdGF0aWMgdWludCBfc2JfY29yZWlkeChzaV9pbmZvX3QgKnNpaSwgdTMyIHNiYSkKLXsKLQl1aW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2lpLT5udW1jb3JlczsgaSsrKQotCQlpZiAoc2JhID09IHNpaS0+Y29yZXNiYVtpXSkKLQkJCXJldHVybiBpOwotCXJldHVybiBCQURJRFg7Ci19Ci0KLS8qIHJldHVybiBjb3JlIGFkZHJlc3Mgb2YgdGhlIGN1cnJlbnQgY29yZSAqLwotc3RhdGljIHUzMiBfc2JfY29yZXNiYShzaV9pbmZvX3QgKnNpaSkKLXsKLQl1MzIgc2JhZGRyID0gMDsKLQotCXN3aXRjaCAoc2lpLT5wdWIuYnVzdHlwZSkgewotCWNhc2UgU1BJX0JVUzoKLQljYXNlIFNESU9fQlVTOgotCQlzYmFkZHIgPSAodTMyKSh1bnNpZ25lZCBsb25nKXNpaS0+Y3VybWFwOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlBU1NFUlQoMCk7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiBzYmFkZHI7Ci19Ci0KLXVpbnQgc2JfY29yZXJldihzaV90ICpzaWgpCi17Ci0Jc2lfaW5mb190ICpzaWk7Ci0Jc2Jjb25maWdfdCAqc2I7Ci0JdWludCBzYmlkaDsKLQotCXNpaSA9IFNJX0lORk8oc2loKTsKLQlzYiA9IFJFR1MyU0Ioc2lpLT5jdXJtYXApOwotCXNiaWRoID0gUl9TQlJFRyhzaWksICZzYi0+c2JpZGhpZ2gpOwotCi0JcmV0dXJuIFNCQ09SRVJFVihzYmlkaCk7Ci19Ci0KLWJvb2wgc2JfaXNjb3JldXAoc2lfdCAqc2loKQotewotCXNpX2luZm9fdCAqc2lpOwotCXNiY29uZmlnX3QgKnNiOwotCi0Jc2lpID0gU0lfSU5GTyhzaWgpOwotCXNiID0gUkVHUzJTQihzaWktPmN1cm1hcCk7Ci0KLQlyZXR1cm4gKFJfU0JSRUcoc2lpLCAmc2ItPnNidG1zdGF0ZWxvdykgJgotCQkgKFNCVE1MX1JFU0VUIHwgU0JUTUxfUkVKX01BU0sgfAotCQkgIChTSUNGX0NMT0NLX0VOIDw8IFNCVE1MX1NJQ0ZfU0hJRlQpKSkgPT0KLQkJKFNJQ0ZfQ0xPQ0tfRU4gPDwgU0JUTUxfU0lDRl9TSElGVCk7Ci19Ci0KLS8qCi0gKiBTd2l0Y2ggdG8gJ2NvcmVpZHgnLCBpc3N1ZSBhIHNpbmdsZSBhcmJpdHJhcnkgMzJiaXQKLSAqIHJlZ2lzdGVyIG1hc2smc2V0IG9wZXJhdGlvbiwKLSAqIHN3aXRjaCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBjb3JlLCBhbmQgcmV0dXJuIHRoZSBuZXcgdmFsdWUuCi0gKgotICogV2hlbiB1c2luZyB0aGUgc2lsaWNvbiBiYWNrcGxhbmUsIG5vIGZpZGxlaW5nIHdpdGggaW50ZXJydXB0cwotICogb3IgY29yZSBzd2l0Y2hlcyBhcmUgbmVlZGVkLgotICoKLSAqIEFsc28sIHdoZW4gdXNpbmcgcGNpL3BjaWUsIHdlIGNhbiBvcHRpbWl6ZSBhd2F5IHRoZSBjb3JlIHN3aXRjaGluZwotICogZm9yIHBjaSByZWdpc3RlcnMKLSAqIGFuZCAob24gbmV3ZXIgcGNpIGNvcmVzKSBjaGlwY29tbW9uIHJlZ2lzdGVycy4KLSAqLwotdWludCBzYl9jb3JlcmVnKHNpX3QgKnNpaCwgdWludCBjb3JlaWR4LCB1aW50IHJlZ29mZiwgdWludCBtYXNrLCB1aW50IHZhbCkKLXsKLQl1aW50IG9yaWdpZHggPSAwOwotCXUzMiAqciA9IE5VTEw7Ci0JdWludCB3OwotCXVpbnQgaW50cl92YWwgPSAwOwotCWJvb2wgZmFzdCA9IGZhbHNlOwotCXNpX2luZm9fdCAqc2lpOwotCi0Jc2lpID0gU0lfSU5GTyhzaWgpOwotCi0JQVNTRVJUKEdPT0RJRFgoY29yZWlkeCkpOwotCUFTU0VSVChyZWdvZmYgPCBTSV9DT1JFX1NJWkUpOwotCUFTU0VSVCgodmFsICYgfm1hc2spID09IDApOwotCi0JaWYgKGNvcmVpZHggPj0gU0lfTUFYQ09SRVMpCi0JCXJldHVybiAwOwotCi0JaWYgKCFmYXN0KSB7Ci0JCUlOVFJfT0ZGKHNpaSwgaW50cl92YWwpOwotCi0JCS8qIHNhdmUgY3VycmVudCBjb3JlIGluZGV4ICovCi0JCW9yaWdpZHggPSBzaV9jb3JlaWR4KCZzaWktPnB1Yik7Ci0KLQkJLyogc3dpdGNoIGNvcmUgKi8KLQkJciA9ICh1MzIgKikgKCh1bnNpZ25lZCBjaGFyICopIHNiX3NldGNvcmVpZHgoJnNpaS0+cHViLCBjb3JlaWR4KSArCi0JCQkJcmVnb2ZmKTsKLQl9Ci0JQVNTRVJUKHIgIT0gTlVMTCk7Ci0KLQkvKiBtYXNrIGFuZCBzZXQgKi8KLQlpZiAobWFzayB8fCB2YWwpIHsKLQkJaWYgKHJlZ29mZiA+PSBTQkNPTkZJR09GRikgewotCQkJdyA9IChSX1NCUkVHKHNpaSwgcikgJiB+bWFzaykgfCB2YWw7Ci0JCQlXX1NCUkVHKHNpaSwgciwgdyk7Ci0JCX0gZWxzZSB7Ci0JCQl3ID0gKFJfUkVHKHIpICYgfm1hc2spIHwgdmFsOwotCQkJV19SRUcociwgdyk7Ci0JCX0KLQl9Ci0KLQkvKiByZWFkYmFjayAqLwotCWlmIChyZWdvZmYgPj0gU0JDT05GSUdPRkYpCi0JCXcgPSBSX1NCUkVHKHNpaSwgcik7Ci0JZWxzZQotCQl3ID0gUl9SRUcocik7Ci0KLQlpZiAoIWZhc3QpIHsKLQkJLyogcmVzdG9yZSBjb3JlIGluZGV4ICovCi0JCWlmIChvcmlnaWR4ICE9IGNvcmVpZHgpCi0JCQlzYl9zZXRjb3JlaWR4KCZzaWktPnB1Yiwgb3JpZ2lkeCk7Ci0KLQkJSU5UUl9SRVNUT1JFKHNpaSwgaW50cl92YWwpOwotCX0KLQotCXJldHVybiB3OwotfQotCi0vKiBTY2FuIHRoZSBlbnVtZXJhdGlvbiBzcGFjZSB0byBmaW5kIGFsbCBjb3JlcyBzdGFydGluZyBmcm9tIHRoZSBnaXZlbgotICogYnVzICdzYmJhJy4gQXBwZW5kIGNvcmVpZCBhbmQgb3RoZXIgaW5mbyB0byB0aGUgbGlzdHMgaW4gJ3NpJy4gJ3NiYScKLSAqIGlzIHRoZSBkZWZhdWx0IGNvcmUgYWRkcmVzcyBhdCBjaGlwIFBPUiB0aW1lIGFuZCAncmVncycgaXMgdGhlIHZpcnR1YWwKLSAqIGFkZHJlc3MgdGhhdCB0aGUgZGVmYXVsdCBjb3JlIGlzIG1hcHBlZCBhdC4gJ25jb3JlcycgaXMgdGhlIG51bWJlciBvZgotICogY29yZXMgZXhwZWN0ZWQgb24gYnVzICdzYmJhJy4gSXQgcmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGNvcmVzCi0gKiBzdGFydGluZyBmcm9tIGJ1cyAnc2JiYScsIGluY2x1c2l2ZS4KLSAqLwotI2RlZmluZSBTQl9NQVhCVVNFUwkyCi1zdGF0aWMgdWludCBfc2Jfc2NhbihzaV9pbmZvX3QgKnNpaSwgdTMyIHNiYSwgdm9pZCAqcmVncywgdWludCBidXMsIHUzMiBzYmJhLAotCQkgICAgIHVpbnQgbnVtY29yZXMpCi17Ci0JdWludCBuZXh0OwotCXVpbnQgbmNjID0gMDsKLQl1aW50IGk7Ci0KLQlpZiAoYnVzID49IFNCX01BWEJVU0VTKSB7Ci0JCVNJX0VSUk9SKCgiX3NiX3NjYW46IGJ1cyAweCUwOHggYXQgbGV2ZWwgJWQgaXMgdG9vIGRlZXAgdG8gIgotCQkJInNjYW5cbiIsIHNiYmEsIGJ1cykpOwotCQlyZXR1cm4gMDsKLQl9Ci0JU0lfTVNHKCgiX3NiX3NjYW46IHNjYW4gYnVzIDB4JTA4eCBhc3N1bWUgJXUgY29yZXNcbiIsCi0JCXNiYmEsIG51bWNvcmVzKSk7Ci0KLQkvKiBTY2FuIGFsbCBjb3JlcyBvbiB0aGUgYnVzIHN0YXJ0aW5nIGZyb20gY29yZSAwLgotCSAqIENvcmUgYWRkcmVzc2VzIG11c3QgYmUgY29udGlndW91cyBvbiBlYWNoIGJ1cy4KLQkgKi8KLQlmb3IgKGkgPSAwLCBuZXh0ID0gc2lpLT5udW1jb3JlczsKLQkgICAgIGkgPCBudW1jb3JlcyAmJiBuZXh0IDwgU0JfQlVTX01BWENPUkVTOyBpKyssIG5leHQrKykgewotCQlzaWktPmNvcmVzYmFbbmV4dF0gPSBzYmJhICsgKGkgKiBTSV9DT1JFX1NJWkUpOwotCi0JCS8qIGNoYW5nZSBjb3JlIHRvICduZXh0JyBhbmQgcmVhZCBpdHMgY29yZWlkICovCi0JCXNpaS0+Y3VybWFwID0gX3NiX3NldGNvcmVpZHgoc2lpLCBuZXh0KTsKLQkJc2lpLT5jdXJpZHggPSBuZXh0OwotCi0JCXNpaS0+Y29yZWlkW25leHRdID0gc2JfY29yZWlkKCZzaWktPnB1Yik7Ci0KLQkJLyogY29yZSBzcGVjaWZpYyBwcm9jZXNzaW5nLi4uICovCi0JCS8qIGNoaXBjIHByb3ZpZGVzICMgY29yZXMgKi8KLQkJaWYgKHNpaS0+Y29yZWlkW25leHRdID09IENDX0NPUkVfSUQpIHsKLQkJCWNoaXBjcmVnc190ICpjYyA9IChjaGlwY3JlZ3NfdCAqKSBzaWktPmN1cm1hcDsKLQkJCXUzMiBjY3JldiA9IHNiX2NvcmVyZXYoJnNpaS0+cHViKTsKLQotCQkJLyogZGV0ZXJtaW5lIG51bWNvcmVzIC0gdGhpcyBpcyB0aGUKLQkJCQkgdG90YWwgIyBjb3JlcyBpbiB0aGUgY2hpcCAqLwotCQkJaWYgKCgoY2NyZXYgPT0gNCkgfHwgKGNjcmV2ID49IDYpKSkKLQkJCQludW1jb3JlcyA9Ci0JCQkJICAgIChSX1JFRygmY2MtPmNoaXBpZCkgJiBDSURfQ0NfTUFTSykKLQkJCQkgICAgPj4gQ0lEX0NDX1NISUZUOwotCQkJZWxzZSB7Ci0JCQkJLyogT2xkZXIgY2hpcHMgKi8KLQkJCQlTSV9FUlJPUigoInNiX2NoaXAybnVtY29yZXM6IHVuc3VwcG9ydGVkIGNoaXAgIgotCQkJCQkJICAiMHgleFxuIiwgc2lpLT5wdWIuY2hpcCkpOwotCQkJCUFTU0VSVCgwKTsKLQkJCQludW1jb3JlcyA9IDE7Ci0JCQl9Ci0KLQkJCVNJX1ZNU0coKCJfc2Jfc2NhbjogJXUgY29yZXMgaW4gdGhlIGNoaXAgJXNcbiIsCi0JCQludW1jb3Jlcywgc2lpLT5wdWIuaXNzaW0gPyAiUVQiIDogIiIpKTsKLQkJfQotCQkvKiBzY2FuIGJyaWRnZWQgU0IocykgYW5kIGFkZCByZXN1bHRzIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QgKi8KLQkJZWxzZSBpZiAoc2lpLT5jb3JlaWRbbmV4dF0gPT0gT0NQX0NPUkVfSUQpIHsKLQkJCXNiY29uZmlnX3QgKnNiID0gUkVHUzJTQihzaWktPmN1cm1hcCk7Ci0JCQl1MzIgbnNiYmEgPSBSX1NCUkVHKHNpaSwgJnNiLT5zYmFkbWF0Y2gxKTsKLQkJCXVpbnQgbnNiY2M7Ci0KLQkJCXNpaS0+bnVtY29yZXMgPSBuZXh0ICsgMTsKLQotCQkJaWYgKChuc2JiYSAmIDB4ZmZmMDAwMDApICE9IFNJX0VOVU1fQkFTRSkKLQkJCQljb250aW51ZTsKLQkJCW5zYmJhICY9IDB4ZmZmZmYwMDA7Ci0JCQlpZiAoX3NiX2NvcmVpZHgoc2lpLCBuc2JiYSkgIT0gQkFESURYKQotCQkJCWNvbnRpbnVlOwotCi0JCQluc2JjYyA9Ci0JCQkgICAgKFJfU0JSRUcoc2lpLCAmc2ItPnNidG1zdGF0ZWhpZ2gpICYgMHgwMDBmMDAwMCkgPj4KLQkJCSAgICAxNjsKLQkJCW5zYmNjID0gX3NiX3NjYW4oc2lpLCBzYmEsIHJlZ3MsIGJ1cyArIDEsIG5zYmJhLCBuc2JjYyk7Ci0JCQlpZiAoc2JiYSA9PSBTSV9FTlVNX0JBU0UpCi0JCQkJbnVtY29yZXMgLT0gbnNiY2M7Ci0JCQluY2MgKz0gbnNiY2M7Ci0JCX0KLQl9Ci0KLQlTSV9NU0coKCJfc2Jfc2NhbjogZm91bmQgJXUgY29yZXMgb24gYnVzIDB4JTA4eFxuIiwgaSwgc2JiYSkpOwotCi0Jc2lpLT5udW1jb3JlcyA9IGkgKyBuY2M7Ci0JcmV0dXJuIHNpaS0+bnVtY29yZXM7Ci19Ci0KLS8qIHNjYW4gdGhlIHNiIGVudW1lcmF0ZWQgc3BhY2UgdG8gaWRlbnRpZnkgYWxsIGNvcmVzICovCi12b2lkIHNiX3NjYW4oc2lfdCAqc2loLCB2b2lkICpyZWdzLCB1aW50IGRldmlkKQotewotCXNpX2luZm9fdCAqc2lpOwotCXUzMiBvcmlnc2JhOwotCXNiY29uZmlnX3QgKnNiOwotCi0Jc2lpID0gU0lfSU5GTyhzaWgpOwotCXNiID0gUkVHUzJTQihzaWktPmN1cm1hcCk7Ci0KLQlzaWktPnB1Yi5zb2NpcmV2ID0KLQkgICAgKFJfU0JSRUcoc2lpLCAmc2ItPnNiaWRsb3cpICYgU0JJRExfUlZfTUFTSykgPj4gU0JJRExfUlZfU0hJRlQ7Ci0KLQkvKiBTYXZlIHRoZSBjdXJyZW50IGNvcmUgaW5mbyBhbmQgdmFsaWRhdGUgaXQgbGF0ZXIgdGlsbCB3ZSBrbm93Ci0JICogZm9yIHN1cmUgd2hhdCBpcyBnb29kIGFuZCB3aGF0IGlzIGJhZC4KLQkgKi8KLQlvcmlnc2JhID0gX3NiX2NvcmVzYmEoc2lpKTsKLQotCS8qIHNjYW4gYWxsIFNCKHMpIHN0YXJ0aW5nIGZyb20gU0lfRU5VTV9CQVNFICovCi0Jc2lpLT5udW1jb3JlcyA9IF9zYl9zY2FuKHNpaSwgb3JpZ3NiYSwgcmVncywgMCwgU0lfRU5VTV9CQVNFLCAxKTsKLX0KLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gY2hhbmdlcyBsb2dpY2FsICJmb2N1cyIgdG8gdGhlIGluZGljYXRlZCBjb3JlOwotICogbXVzdCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIG9mZi4KLSAqIE1vcmVvdmVyLCBjYWxsZXJzIHNob3VsZCBrZWVwIGludGVycnVwdHMgb2ZmIGR1cmluZyBzd2l0Y2hpbmcgb3V0IG9mCi0gKiBhbmQgYmFjayB0byBkMTEgY29yZQotICovCi12b2lkICpzYl9zZXRjb3JlaWR4KHNpX3QgKnNpaCwgdWludCBjb3JlaWR4KQotewotCXNpX2luZm9fdCAqc2lpOwotCi0Jc2lpID0gU0lfSU5GTyhzaWgpOwotCi0JaWYgKGNvcmVpZHggPj0gc2lpLT5udW1jb3JlcykKLQkJcmV0dXJuIE5VTEw7Ci0KLQkvKgotCSAqIElmIHRoZSB1c2VyIGhhcyBwcm92aWRlZCBhbiBpbnRlcnJ1cHQgbWFzayBlbmFibGVkIGZ1bmN0aW9uLAotCSAqIHRoZW4gYXNzZXJ0IGludGVycnVwdHMgYXJlIGRpc2FibGVkIGJlZm9yZSBzd2l0Y2hpbmcgdGhlIGNvcmUuCi0JICovCi0JQVNTRVJUKChzaWktPmludHJzZW5hYmxlZF9mbiA9PSBOVUxMKQotCSAgICAgICB8fCAhKCooc2lpKS0+aW50cnNlbmFibGVkX2ZuKSAoKHNpaSktPmludHJfYXJnKSk7Ci0KLQlzaWktPmN1cm1hcCA9IF9zYl9zZXRjb3JlaWR4KHNpaSwgY29yZWlkeCk7Ci0Jc2lpLT5jdXJpZHggPSBjb3JlaWR4OwotCi0JcmV0dXJuIHNpaS0+Y3VybWFwOwotfQotCi0vKiBUaGlzIGZ1bmN0aW9uIGNoYW5nZXMgdGhlIGxvZ2ljYWwgImZvY3VzIiB0byB0aGUgaW5kaWNhdGVkIGNvcmUuCi0gKiBSZXR1cm4gdGhlIGN1cnJlbnQgY29yZSdzIHZpcnR1YWwgYWRkcmVzcy4KLSAqLwotc3RhdGljIHZvaWQgKl9zYl9zZXRjb3JlaWR4KHNpX2luZm9fdCAqc2lpLCB1aW50IGNvcmVpZHgpCi17Ci0JdTMyIHNiYWRkciA9IHNpaS0+Y29yZXNiYVtjb3JlaWR4XTsKLQl2b2lkICpyZWdzOwotCi0Jc3dpdGNoIChzaWktPnB1Yi5idXN0eXBlKSB7Ci0jaWZkZWYgQkNNU0RJTwotCWNhc2UgU1BJX0JVUzoKLQljYXNlIFNESU9fQlVTOgotCQkvKiBtYXAgbmV3IG9uZSAqLwotCQlpZiAoIXNpaS0+cmVnc1tjb3JlaWR4XSkgewotCQkJc2lpLT5yZWdzW2NvcmVpZHhdID0gKHZvaWQgKilzYmFkZHI7Ci0JCQlBU1NFUlQoR09PRFJFR1Moc2lpLT5yZWdzW2NvcmVpZHhdKSk7Ci0JCX0KLQkJcmVncyA9IHNpaS0+cmVnc1tjb3JlaWR4XTsKLQkJYnJlYWs7Ci0jZW5kaWYJCQkJLyogQkNNU0RJTyAqLwotCWRlZmF1bHQ6Ci0JCUFTU0VSVCgwKTsKLQkJcmVncyA9IE5VTEw7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiByZWdzOwotfQotCi12b2lkIHNiX2NvcmVfZGlzYWJsZShzaV90ICpzaWgsIHUzMiBiaXRzKQotewotCXNpX2luZm9fdCAqc2lpOwotCXZvbGF0aWxlIHUzMiBkdW1teTsKLQlzYmNvbmZpZ190ICpzYjsKLQotCXNpaSA9IFNJX0lORk8oc2loKTsKLQotCUFTU0VSVChHT09EUkVHUyhzaWktPmN1cm1hcCkpOwotCXNiID0gUkVHUzJTQihzaWktPmN1cm1hcCk7Ci0KLQkvKiBpZiBjb3JlIGlzIGFscmVhZHkgaW4gcmVzZXQsIGp1c3QgcmV0dXJuICovCi0JaWYgKFJfU0JSRUcoc2lpLCAmc2ItPnNidG1zdGF0ZWxvdykgJiBTQlRNTF9SRVNFVCkKLQkJcmV0dXJuOwotCi0JLyogaWYgY2xvY2tzIGFyZSBub3QgZW5hYmxlZCwgcHV0IGludG8gcmVzZXQgYW5kIHJldHVybiAqLwotCWlmICgoUl9TQlJFRyhzaWksICZzYi0+c2J0bXN0YXRlbG93KSAmCi0JICAgICAoU0lDRl9DTE9DS19FTiA8PCBTQlRNTF9TSUNGX1NISUZUKSkgPT0gMCkKLQkJZ290byBkaXNhYmxlOwotCi0JLyogc2V0IHRhcmdldCByZWplY3QgYW5kIHNwaW4gdW50aWwgYnVzeSBpcyBjbGVhcgotCSAgIChwcmVzZXJ2ZSBjb3JlLXNwZWNpZmljIGJpdHMpICovCi0JT1JfU0JSRUcoc2lpLCAmc2ItPnNidG1zdGF0ZWxvdywgU0JUTUxfUkVKKTsKLQlkdW1teSA9IFJfU0JSRUcoc2lpLCAmc2ItPnNidG1zdGF0ZWxvdyk7Ci0JdWRlbGF5KDEpOwotCVNQSU5XQUlUKChSX1NCUkVHKHNpaSwgJnNiLT5zYnRtc3RhdGVoaWdoKSAmIFNCVE1IX0JVU1kpLCAxMDAwMDApOwotCWlmIChSX1NCUkVHKHNpaSwgJnNiLT5zYnRtc3RhdGVoaWdoKSAmIFNCVE1IX0JVU1kpCi0JCVNJX0VSUk9SKCgiJXM6IHRhcmdldCBzdGF0ZSBzdGlsbCBidXN5XG4iLCBfX2Z1bmNfXykpOwotCi0JaWYgKFJfU0JSRUcoc2lpLCAmc2ItPnNiaWRsb3cpICYgU0JJRExfSU5JVCkgewotCQlPUl9TQlJFRyhzaWksICZzYi0+c2JpbXN0YXRlLCBTQklNX1JKKTsKLQkJZHVtbXkgPSBSX1NCUkVHKHNpaSwgJnNiLT5zYmltc3RhdGUpOwotCQl1ZGVsYXkoMSk7Ci0JCVNQSU5XQUlUKChSX1NCUkVHKHNpaSwgJnNiLT5zYmltc3RhdGUpICYgU0JJTV9CWSksIDEwMDAwMCk7Ci0JfQotCi0JLyogc2V0IHJlc2V0IGFuZCByZWplY3Qgd2hpbGUgZW5hYmxpbmcgdGhlIGNsb2NrcyAqLwotCVdfU0JSRUcoc2lpLCAmc2ItPnNidG1zdGF0ZWxvdywKLQkJKCgoYml0cyB8IFNJQ0ZfRkdDIHwgU0lDRl9DTE9DS19FTikgPDwgU0JUTUxfU0lDRl9TSElGVCkgfAotCQkgU0JUTUxfUkVKIHwgU0JUTUxfUkVTRVQpKTsKLQlkdW1teSA9IFJfU0JSRUcoc2lpLCAmc2ItPnNidG1zdGF0ZWxvdyk7Ci0JdWRlbGF5KDEwKTsKLQotCS8qIGRvbid0IGZvcmdldCB0byBjbGVhciB0aGUgaW5pdGlhdG9yIHJlamVjdCBiaXQgKi8KLQlpZiAoUl9TQlJFRyhzaWksICZzYi0+c2JpZGxvdykgJiBTQklETF9JTklUKQotCQlBTkRfU0JSRUcoc2lpLCAmc2ItPnNiaW1zdGF0ZSwgflNCSU1fUkopOwotCi1kaXNhYmxlOgotCS8qIGxlYXZlIHJlc2V0IGFuZCByZWplY3QgYXNzZXJ0ZWQgKi8KLQlXX1NCUkVHKHNpaSwgJnNiLT5zYnRtc3RhdGVsb3csCi0JCSgoYml0cyA8PCBTQlRNTF9TSUNGX1NISUZUKSB8IFNCVE1MX1JFSiB8IFNCVE1MX1JFU0VUKSk7Ci0JdWRlbGF5KDEpOwotfQotCi0vKiByZXNldCBhbmQgcmUtZW5hYmxlIGEgY29yZQotICogaW5wdXRzOgotICogYml0cyAtIGNvcmUgc3BlY2lmaWMgYml0cyB0aGF0IGFyZSBzZXQgZHVyaW5nIGFuZCBhZnRlciByZXNldCBzZXF1ZW5jZQotICogcmVzZXRiaXRzIC0gY29yZSBzcGVjaWZpYyBiaXRzIHRoYXQgYXJlIHNldCBvbmx5IGR1cmluZyByZXNldCBzZXF1ZW5jZQotICovCi12b2lkIHNiX2NvcmVfcmVzZXQoc2lfdCAqc2loLCB1MzIgYml0cywgdTMyIHJlc2V0Yml0cykKLXsKLQlzaV9pbmZvX3QgKnNpaTsKLQlzYmNvbmZpZ190ICpzYjsKLQl2b2xhdGlsZSB1MzIgZHVtbXk7Ci0KLQlzaWkgPSBTSV9JTkZPKHNpaCk7Ci0JQVNTRVJUKEdPT0RSRUdTKHNpaS0+Y3VybWFwKSk7Ci0Jc2IgPSBSRUdTMlNCKHNpaS0+Y3VybWFwKTsKLQotCS8qCi0JICogTXVzdCBkbyB0aGUgZGlzYWJsZSBzZXF1ZW5jZSBmaXJzdCB0byB3b3JrIGZvcgotCSAqIGFyYml0cmFyeSBjdXJyZW50IGNvcmUgc3RhdGUuCi0JICovCi0Jc2JfY29yZV9kaXNhYmxlKHNpaCwgKGJpdHMgfCByZXNldGJpdHMpKTsKLQotCS8qCi0JICogTm93IGRvIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4KLQkgKi8KLQotCS8qIHNldCByZXNldCB3aGlsZSBlbmFibGluZyB0aGUgY2xvY2sgYW5kCi0JCSBmb3JjaW5nIHRoZW0gb24gdGhyb3VnaG91dCB0aGUgY29yZSAqLwotCVdfU0JSRUcoc2lpLCAmc2ItPnNidG1zdGF0ZWxvdywKLQkJKCgoYml0cyB8IHJlc2V0Yml0cyB8IFNJQ0ZfRkdDIHwgU0lDRl9DTE9DS19FTikgPDwKLQkJICBTQlRNTF9TSUNGX1NISUZUKSB8IFNCVE1MX1JFU0VUKSk7Ci0JZHVtbXkgPSBSX1NCUkVHKHNpaSwgJnNiLT5zYnRtc3RhdGVsb3cpOwotCXVkZWxheSgxKTsKLQotCWlmIChSX1NCUkVHKHNpaSwgJnNiLT5zYnRtc3RhdGVoaWdoKSAmIFNCVE1IX1NFUlIpCi0JCVdfU0JSRUcoc2lpLCAmc2ItPnNidG1zdGF0ZWhpZ2gsIDApOwotCi0JZHVtbXkgPSBSX1NCUkVHKHNpaSwgJnNiLT5zYmltc3RhdGUpOwotCWlmIChkdW1teSAmIChTQklNX0lCRSB8IFNCSU1fVE8pKQotCQlBTkRfU0JSRUcoc2lpLCAmc2ItPnNiaW1zdGF0ZSwgfihTQklNX0lCRSB8IFNCSU1fVE8pKTsKLQotCS8qIGNsZWFyIHJlc2V0IGFuZCBhbGxvdyBpdCB0byBwcm9wYWdhdGUgdGhyb3VnaG91dCB0aGUgY29yZSAqLwotCVdfU0JSRUcoc2lpLCAmc2ItPnNidG1zdGF0ZWxvdywKLQkJKChiaXRzIHwgcmVzZXRiaXRzIHwgU0lDRl9GR0MgfCBTSUNGX0NMT0NLX0VOKSA8PAotCQkgU0JUTUxfU0lDRl9TSElGVCkpOwotCWR1bW15ID0gUl9TQlJFRyhzaWksICZzYi0+c2J0bXN0YXRlbG93KTsKLQl1ZGVsYXkoMSk7Ci0KLQkvKiBsZWF2ZSBjbG9jayBlbmFibGVkICovCi0JV19TQlJFRyhzaWksICZzYi0+c2J0bXN0YXRlbG93LAotCQkoKGJpdHMgfCBTSUNGX0NMT0NLX0VOKSA8PCBTQlRNTF9TSUNGX1NISUZUKSk7Ci0JZHVtbXkgPSBSX1NCUkVHKHNpaSwgJnNiLT5zYnRtc3RhdGVsb3cpOwotCXVkZWxheSgxKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9zaXV0aWxzLmMgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvc2l1dGlscy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZWJkN2Y1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9zaXV0aWxzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDA2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgQnJvYWRjb20gQ29ycG9yYXRpb24KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkKLSAqIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTgotICogT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTgotICogQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxiY21kZWZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8YmNtdXRpbHMuaD4KLSNpbmNsdWRlIDxzaXV0aWxzLmg+Ci0jaW5jbHVkZSA8YmNtZGV2cy5oPgotI2luY2x1ZGUgPGhuZHNvYy5oPgotI2luY2x1ZGUgPHNiY2hpcGMuaD4KLSNpbmNsdWRlIDxwY2lfY29yZS5oPgotI2luY2x1ZGUgPHBjaWVfY29yZS5oPgotI2luY2x1ZGUgPG5pY3BjaS5oPgotI2luY2x1ZGUgPGJjbW52cmFtLmg+Ci0jaW5jbHVkZSA8YmNtc3JvbS5oPgotI2luY2x1ZGUgPHBjaWNmZy5oPgotI2luY2x1ZGUgPHNic29jcmFtLmg+Ci0jaWZkZWYgQkNNU0RJTwotI2luY2x1ZGUgPGJjbXNkaC5oPgotI2luY2x1ZGUgPHNkaW8uaD4KLSNpbmNsdWRlIDxzYnNkaW8uaD4KLSNpbmNsdWRlIDxzYmhuZGRtYS5oPgotI2luY2x1ZGUgPHNic2RwY21kZXYuaD4KLSNpbmNsdWRlIDxiY21zZHBjbS5oPgotI2VuZGlmCQkJCS8qIEJDTVNESU8gKi8KLSNpbmNsdWRlIDxobmRwbXUuaD4KLQotLyogdGhpcyBmaWxlIG5vdyBjb250YWlucyBvbmx5IGRlZmluaXRpb25zIGZvciBzYiBmdW5jdGlvbnMsIG9ubHkgbmVjZXNzYXJ5Ci0qZm9yIGRldmljZXMgdXNpbmcgU29uaWNzIGJhY2twbGFuZXMgKGJjbTQzMjkpCi0qLwotCi0vKiBpZiBhbiBhbWJhIFNESU8gZGV2aWNlIGlzIHN1cHBvcnRlZCwgcGxlYXNlIGZ1cnRoZXIgcmVzdHJpY3QgdGhlIGluY2x1c2lvbgotICogb2YgdGhpcyBmaWxlCi0gKi8KLSNpZmRlZiBCQ01TRElPCi0jaW5jbHVkZSAic2l1dGlsc19wcml2LmgiCi0jZW5kaWYKLQotLyogbG9jYWwgcHJvdG90eXBlcyAqLwotc3RhdGljIHNpX2luZm9fdCAqc2lfZG9hdHRhY2goc2lfaW5mb190ICpzaWksIHVpbnQgZGV2aWQsIHZvaWQgKnJlZ3MsCi0JCQkgICAgICB1aW50IGJ1c3R5cGUsIHZvaWQgKnNkaCwgY2hhciAqKnZhcnMsCi0JCQkgICAgICB1aW50ICp2YXJzeik7Ci1zdGF0aWMgYm9vbCBzaV9idXNjb3JlX3ByZXAoc2lfaW5mb190ICpzaWksIHVpbnQgYnVzdHlwZSwgdWludCBkZXZpZCwKLQkJCSAgICB2b2lkICpzZGgpOwotc3RhdGljIGJvb2wgc2lfYnVzY29yZV9zZXR1cChzaV9pbmZvX3QgKnNpaSwgY2hpcGNyZWdzX3QgKmNjLCB1aW50IGJ1c3R5cGUsCi0JCQkgICAgIHUzMiBzYXZld2luLCB1aW50ICpvcmlnaWR4LCB2b2lkICpyZWdzKTsKLXN0YXRpYyB2b2lkIHNpX252cmFtX3Byb2Nlc3Moc2lfaW5mb190ICpzaWksIGNoYXIgKnB2YXJzKTsKLQotLyogZGV2IHBhdGggY29uY2F0ZW5hdGlvbiB1dGlsICovCi1zdGF0aWMgY2hhciAqc2lfZGV2cGF0aHZhcihzaV90ICpzaWgsIGNoYXIgKnZhciwgaW50IGxlbiwgY29uc3QgY2hhciAqbmFtZSk7Ci1zdGF0aWMgYm9vbCBfc2lfY2xrY3RsX2NjKHNpX2luZm9fdCAqc2lpLCB1aW50IG1vZGUpOwotc3RhdGljIGJvb2wgc2lfaXNwY2llKHNpX2luZm9fdCAqc2lpKTsKLXN0YXRpYyB1aW50IHNvY3JhbV9iYW5rc2l6ZShzaV9pbmZvX3QgKnNpaSwgc2Jzb2NyYW1yZWdzX3QgKnIsCi0JCQkJCXU4IGlkeCwgdTggbXR5cGUpOwotCi0vKiBnbG9iYWwgdmFyaWFibGUgdG8gaW5kaWNhdGUgcmVzZXJ2YXRpb24vcmVsZWFzZSBvZiBncGlvJ3MgKi8KLXN0YXRpYyB1MzIgc2lfZ3Bpb3Jlc2VydmF0aW9uOwotCi0vKgotICogQWxsb2NhdGUgYSBzaSBoYW5kbGUuCi0gKiBkZXZpZCAtIHBjaSBkZXZpY2UgaWQgKHVzZWQgdG8gZGV0ZXJtaW5lIGNoaXAjKQotICogb3NoIC0gb3BhcXVlIE9TIGhhbmRsZQotICogcmVncyAtIHZpcnR1YWwgYWRkcmVzcyBvZiBpbml0aWFsIGNvcmUgcmVnaXN0ZXJzCi0gKiBidXN0eXBlIC0gcGNpL3NiL3NkaW8vZXRjCi0gKiB2YXJzIC0gcG9pbnRlciB0byBhIHBvaW50ZXIgYXJlYSBmb3IgImVudmlyb25tZW50IiB2YXJpYWJsZXMKLSAqIHZhcnN6IC0gcG9pbnRlciB0byBpbnQgdG8gcmV0dXJuIHRoZSBzaXplIG9mIHRoZSB2YXJzCi0gKi8KLXNpX3QgKnNpX2F0dGFjaCh1aW50IGRldmlkLCB2b2lkICpyZWdzLCB1aW50IGJ1c3R5cGUsCi0JCXZvaWQgKnNkaCwgY2hhciAqKnZhcnMsIHVpbnQgKnZhcnN6KQotewotCXNpX2luZm9fdCAqc2lpOwotCi0JLyogYWxsb2Mgc2lfaW5mb190ICovCi0Jc2lpID0ga21hbGxvYyhzaXplb2Yoc2lfaW5mb190KSwgR0ZQX0FUT01JQyk7Ci0JaWYgKHNpaSA9PSBOVUxMKSB7Ci0JCVNJX0VSUk9SKCgic2lfYXR0YWNoOiBtYWxsb2MgZmFpbGVkIVxuIikpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlpZiAoc2lfZG9hdHRhY2goc2lpLCBkZXZpZCwgcmVncywgYnVzdHlwZSwgc2RoLCB2YXJzLCB2YXJzeikgPT0KLQkgICAgTlVMTCkgewotCQlrZnJlZShzaWkpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0Jc2lpLT52YXJzID0gdmFycyA/ICp2YXJzIDogTlVMTDsKLQlzaWktPnZhcnN6ID0gdmFyc3ogPyAqdmFyc3ogOiAwOwotCi0JcmV0dXJuIChzaV90ICopIHNpaTsKLX0KLQotLyogZ2xvYmFsIGtlcm5lbCByZXNvdXJjZSAqLwotc3RhdGljIHNpX2luZm9fdCBrc2lpOwotCi1zdGF0aWMgYm9vbCBzaV9idXNjb3JlX3ByZXAoc2lfaW5mb190ICpzaWksIHVpbnQgYnVzdHlwZSwgdWludCBkZXZpZCwKLQkJCSAgICB2b2lkICpzZGgpCi17Ci0KLSNpZm5kZWYgQlJDTV9GVUxMTUFDCi0JLyoga2x1ZGdlIHRvIGVuYWJsZSB0aGUgY2xvY2sgb24gdGhlIDQzMDYgd2hpY2ggbGFja3MgYSBzbG93Y2xvY2sgKi8KLQlpZiAoYnVzdHlwZSA9PSBQQ0lfQlVTICYmICFzaV9pc3BjaWUoc2lpKSkKLQkJc2lfY2xrY3RsX3h0YWwoJnNpaS0+cHViLCBYVEFMIHwgUExMLCBPTik7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQkNNU0RJTykKLQlpZiAoYnVzdHlwZSA9PSBTRElPX0JVUykgewotCQlpbnQgZXJyOwotCQl1OCBjbGtzZXQ7Ci0KLQkJLyogVHJ5IGZvcmNpbmcgU0RJTyBjb3JlIHRvIGRvIEFMUEF2YWlsIHJlcXVlc3Qgb25seSAqLwotCQljbGtzZXQgPSBTQlNESU9fRk9SQ0VfSFdfQ0xLUkVRX09GRiB8IFNCU0RJT19BTFBfQVZBSUxfUkVROwotCQliY21zZGhfY2ZnX3dyaXRlKHNkaCwgU0RJT19GVU5DXzEsIFNCU0RJT19GVU5DMV9DSElQQ0xLQ1NSLAotCQkJCSBjbGtzZXQsICZlcnIpOwotCQlpZiAoIWVycikgewotCQkJdTggY2xrdmFsOwotCi0JCQkvKiBJZiByZWdpc3RlciBzdXBwb3J0ZWQsIHdhaXQgZm9yIEFMUEF2YWlsIGFuZCB0aGVuIGZvcmNlIEFMUCAqLwotCQkJY2xrdmFsID0KLQkJCSAgICBiY21zZGhfY2ZnX3JlYWQoc2RoLCBTRElPX0ZVTkNfMSwKLQkJCQkJICAgIFNCU0RJT19GVU5DMV9DSElQQ0xLQ1NSLCBOVUxMKTsKLQkJCWlmICgoY2xrdmFsICYgflNCU0RJT19BVkJJVFMpID09IGNsa3NldCkgewotCQkJCVNQSU5XQUlUKCgoY2xrdmFsID0KLQkJCQkJICAgYmNtc2RoX2NmZ19yZWFkKHNkaCwgU0RJT19GVU5DXzEsCi0JCQkJCQkJICAgU0JTRElPX0ZVTkMxX0NISVBDTEtDU1IsCi0JCQkJCQkJICAgTlVMTCkpLAotCQkJCQkgICFTQlNESU9fQUxQQVYoY2xrdmFsKSksCi0JCQkJCSBQTVVfTUFYX1RSQU5TSVRJT05fRExZKTsKLQkJCQlpZiAoIVNCU0RJT19BTFBBVihjbGt2YWwpKSB7Ci0JCQkJCVNJX0VSUk9SKCgidGltZW91dCBvbiBBTFBBViB3YWl0LCBjbGt2YWwgMHglMDJ4XG4iLCBjbGt2YWwpKTsKLQkJCQkJcmV0dXJuIGZhbHNlOwotCQkJCX0KLQkJCQljbGtzZXQgPQotCQkJCSAgICBTQlNESU9fRk9SQ0VfSFdfQ0xLUkVRX09GRiB8Ci0JCQkJICAgIFNCU0RJT19GT1JDRV9BTFA7Ci0JCQkJYmNtc2RoX2NmZ193cml0ZShzZGgsIFNESU9fRlVOQ18xLAotCQkJCQkJIFNCU0RJT19GVU5DMV9DSElQQ0xLQ1NSLAotCQkJCQkJIGNsa3NldCwgJmVycik7Ci0JCQkJdWRlbGF5KDY1KTsKLQkJCX0KLQkJfQotCi0JCS8qIEFsc28sIGRpc2FibGUgdGhlIGV4dHJhIFNESU8gcHVsbC11cHMgKi8KLQkJYmNtc2RoX2NmZ193cml0ZShzZGgsIFNESU9fRlVOQ18xLCBTQlNESU9fRlVOQzFfU0RJT1BVTExVUCwgMCwKLQkJCQkgTlVMTCk7Ci0JfQotI2VuZGlmCQkJCS8qIGRlZmluZWQoQkNNU0RJTykgKi8KLQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBzaV9idXNjb3JlX3NldHVwKHNpX2luZm9fdCAqc2lpLCBjaGlwY3JlZ3NfdCAqY2MsIHVpbnQgYnVzdHlwZSwKLQkJCSAgICAgdTMyIHNhdmV3aW4sIHVpbnQgKm9yaWdpZHgsIHZvaWQgKnJlZ3MpCi17Ci0JYm9vbCBwY2ksIHBjaWU7Ci0JdWludCBpOwotCXVpbnQgcGNpaWR4LCBwY2llaWR4LCBwY2lyZXYsIHBjaWVyZXY7Ci0KLQljYyA9IHNpX3NldGNvcmVpZHgoJnNpaS0+cHViLCBTSV9DQ19JRFgpOwotCUFTU0VSVChjYyk7Ci0KLQkvKiBnZXQgY2hpcGNvbW1vbiByZXYgKi8KLQlzaWktPnB1Yi5jY3JldiA9IChpbnQpc2lfY29yZXJldigmc2lpLT5wdWIpOwotCi0JLyogZ2V0IGNoaXBjb21tb24gY2hpcHN0YXR1cyAqLwotCWlmIChzaWktPnB1Yi5jY3JldiA+PSAxMSkKLQkJc2lpLT5wdWIuY2hpcHN0ID0gUl9SRUcoJmNjLT5jaGlwc3RhdHVzKTsKLQotCS8qIGdldCBjaGlwY29tbW9uIGNhcGFiaWxpdGVzICovCi0Jc2lpLT5wdWIuY2NjYXBzID0gUl9SRUcoJmNjLT5jYXBhYmlsaXRpZXMpOwotCS8qIGdldCBjaGlwY29tbW9uIGV4dGVuZGVkIGNhcGFiaWxpdGllcyAqLwotCi0jaWZuZGVmIEJSQ01fRlVMTE1BQwotCWlmIChzaWktPnB1Yi5jY3JldiA+PSAzNSkKLQkJc2lpLT5wdWIuY2NjYXBzX2V4dCA9IFJfUkVHKCZjYy0+Y2FwYWJpbGl0aWVzX2V4dCk7Ci0jZW5kaWYKLQkvKiBnZXQgcG11IHJldiBhbmQgY2FwcyAqLwotCWlmIChzaWktPnB1Yi5jY2NhcHMgJiBDQ19DQVBfUE1VKSB7Ci0JCXNpaS0+cHViLnBtdWNhcHMgPSBSX1JFRygmY2MtPnBtdWNhcGFiaWxpdGllcyk7Ci0JCXNpaS0+cHViLnBtdXJldiA9IHNpaS0+cHViLnBtdWNhcHMgJiBQQ0FQX1JFVl9NQVNLOwotCX0KLQotCS8qCi0JICAgU0lfTVNHKCgiQ2hpcGM6IHJldiAlZCwgY2FwcyAweCV4LCBjaGlwc3QgMHgleCBwbXVyZXYgJWQsIHBtdWNhcHMgMHgleFxuIiwKLQkgICBzaWktPnB1Yi5jY3Jldiwgc2lpLT5wdWIuY2NjYXBzLCBzaWktPnB1Yi5jaGlwc3QsIHNpaS0+cHViLnBtdXJldiwKLQkgICBzaWktPnB1Yi5wbXVjYXBzKSk7Ci0JICovCi0KLQkvKiBmaWd1cmUgb3V0IGJ1cy9vcmlnbmFsIGNvcmUgaWR4ICovCi0Jc2lpLT5wdWIuYnVzY29yZXR5cGUgPSBOT0RFVl9DT1JFX0lEOwotCXNpaS0+cHViLmJ1c2NvcmVyZXYgPSBOT1JFVjsKLQlzaWktPnB1Yi5idXNjb3JlaWR4ID0gQkFESURYOwotCi0JcGNpID0gcGNpZSA9IGZhbHNlOwotCXBjaXJldiA9IHBjaWVyZXYgPSBOT1JFVjsKLQlwY2lpZHggPSBwY2llaWR4ID0gQkFESURYOwotCi0JZm9yIChpID0gMDsgaSA8IHNpaS0+bnVtY29yZXM7IGkrKykgewotCQl1aW50IGNpZCwgY3JldjsKLQotCQlzaV9zZXRjb3JlaWR4KCZzaWktPnB1YiwgaSk7Ci0JCWNpZCA9IHNpX2NvcmVpZCgmc2lpLT5wdWIpOwotCQljcmV2ID0gc2lfY29yZXJldigmc2lpLT5wdWIpOwotCi0JCS8qIERpc3BsYXkgY29yZXMgZm91bmQgKi8KLQkJU0lfVk1TRygoIkNPUkVbJWRdOiBpZCAweCV4IHJldiAlZCBiYXNlIDB4JXggcmVncyAweCVwXG4iLAotCQkJIGksIGNpZCwgY3Jldiwgc2lpLT5jb3Jlc2JhW2ldLCBzaWktPnJlZ3NbaV0pKTsKLQotCQlpZiAoYnVzdHlwZSA9PSBQQ0lfQlVTKSB7Ci0JCQlpZiAoY2lkID09IFBDSV9DT1JFX0lEKSB7Ci0JCQkJcGNpaWR4ID0gaTsKLQkJCQlwY2lyZXYgPSBjcmV2OwotCQkJCXBjaSA9IHRydWU7Ci0JCQl9IGVsc2UgaWYgKGNpZCA9PSBQQ0lFX0NPUkVfSUQpIHsKLQkJCQlwY2llaWR4ID0gaTsKLQkJCQlwY2llcmV2ID0gY3JldjsKLQkJCQlwY2llID0gdHJ1ZTsKLQkJCX0KLQkJfQotI2lmZGVmIEJDTVNESU8KLQkJZWxzZSBpZiAoKChidXN0eXBlID09IFNESU9fQlVTKSB8fAotCQkJICAoYnVzdHlwZSA9PSBTUElfQlVTKSkgJiYKLQkJCSAoKGNpZCA9PSBQQ01DSUFfQ09SRV9JRCkgfHwgKGNpZCA9PSBTRElPRF9DT1JFX0lEKSkpIHsKLQkJCXNpaS0+cHViLmJ1c2NvcmVyZXYgPSBjcmV2OwotCQkJc2lpLT5wdWIuYnVzY29yZXR5cGUgPSBjaWQ7Ci0JCQlzaWktPnB1Yi5idXNjb3JlaWR4ID0gaTsKLQkJfQotI2VuZGlmCQkJCS8qIEJDTVNESU8gKi8KLQotCQkvKiBmaW5kIHRoZSBjb3JlIGlkeCBiZWZvcmUgZW50ZXJpbmcgdGhpcyBmdW5jLiAqLwotCQlpZiAoKHNhdmV3aW4gJiYgKHNhdmV3aW4gPT0gc2lpLT5jb3Jlc2JhW2ldKSkgfHwKLQkJICAgIChyZWdzID09IHNpaS0+cmVnc1tpXSkpCi0JCQkqb3JpZ2lkeCA9IGk7Ci0JfQotCi0jaWZkZWYgQlJDTV9GVUxMTUFDCi0JU0lfTVNHKCgiQnVzY29yZSBpZC90eXBlL3JldiAlZC8weCV4LyVkXG4iLCBzaWktPnB1Yi5idXNjb3JlaWR4LAotCQlzaWktPnB1Yi5idXNjb3JldHlwZSwgc2lpLT5wdWIuYnVzY29yZXJldikpOwotCi0JLyogTWFrZSBzdXJlIGFueSBvbi1jaGlwIEFSTSBpcyBvZmYgKGluIGNhc2Ugc3RyYXBwaW5nIGlzIHdyb25nKSwKLQkqIG9yIGRvd25sb2FkZWQgY29kZSB3YXMKLQkqIGFscmVhZHkgcnVubmluZy4KLQkqLwotCWlmICgoYnVzdHlwZSA9PSBTRElPX0JVUykgfHwgKGJ1c3R5cGUgPT0gU1BJX0JVUykpIHsKLQkJaWYgKHNpX3NldGNvcmUoJnNpaS0+cHViLCBBUk03U19DT1JFX0lELCAwKSB8fAotCQkJc2lfc2V0Y29yZSgmc2lpLT5wdWIsIEFSTUNNM19DT1JFX0lELCAwKSkKLQkJCXNpX2NvcmVfZGlzYWJsZSgmc2lpLT5wdWIsIDApOwotCX0KLSNlbHNlCi0JaWYgKHBjaSAmJiBwY2llKSB7Ci0JCWlmIChzaV9pc3BjaWUoc2lpKSkKLQkJCXBjaSA9IGZhbHNlOwotCQllbHNlCi0JCQlwY2llID0gZmFsc2U7Ci0JfQotCWlmIChwY2kpIHsKLQkJc2lpLT5wdWIuYnVzY29yZXR5cGUgPSBQQ0lfQ09SRV9JRDsKLQkJc2lpLT5wdWIuYnVzY29yZXJldiA9IHBjaXJldjsKLQkJc2lpLT5wdWIuYnVzY29yZWlkeCA9IHBjaWlkeDsKLQl9IGVsc2UgaWYgKHBjaWUpIHsKLQkJc2lpLT5wdWIuYnVzY29yZXR5cGUgPSBQQ0lFX0NPUkVfSUQ7Ci0JCXNpaS0+cHViLmJ1c2NvcmVyZXYgPSBwY2llcmV2OwotCQlzaWktPnB1Yi5idXNjb3JlaWR4ID0gcGNpZWlkeDsKLQl9Ci0KLQlTSV9WTVNHKCgiQnVzY29yZSBpZC90eXBlL3JldiAlZC8weCV4LyVkXG4iLCBzaWktPnB1Yi5idXNjb3JlaWR4LAotCQkgc2lpLT5wdWIuYnVzY29yZXR5cGUsIHNpaS0+cHViLmJ1c2NvcmVyZXYpKTsKLQotCS8qIGZpeHVwIG5lY2Vzc2FyeSBjaGlwL2NvcmUgY29uZmlndXJhdGlvbnMgKi8KLQlpZiAoc2lpLT5wdWIuYnVzdHlwZSA9PSBQQ0lfQlVTKSB7Ci0JCWlmIChTSV9GQVNUKHNpaSkpIHsKLQkJCWlmICghc2lpLT5wY2gpIHsKLQkJCQlzaWktPnBjaCA9ICh2b2lkICopcGNpY29yZV9pbml0KAotCQkJCQkmc2lpLT5wdWIsIHNpaS0+cGJ1cywKLQkJCQkJKHZvaWQgKilQQ0lFUkVHUyhzaWkpKTsKLQkJCQlpZiAoc2lpLT5wY2ggPT0gTlVMTCkKLQkJCQkJcmV0dXJuIGZhbHNlOwotCQkJfQotCQl9Ci0JCWlmIChzaV9wY2lfZml4Y2ZnKCZzaWktPnB1YikpIHsKLQkJCVNJX0VSUk9SKCgic2lfZG9hdHRhY2g6IHNiX3BjaV9maXhjZmcgZmFpbGVkXG4iKSk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0jZW5kaWYKLQkvKiByZXR1cm4gdG8gdGhlIG9yaWdpbmFsIGNvcmUgKi8KLQlzaV9zZXRjb3JlaWR4KCZzaWktPnB1YiwgKm9yaWdpZHgpOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBfX3VzZWQgdm9pZCBzaV9udnJhbV9wcm9jZXNzKHNpX2luZm9fdCAqc2lpLCBjaGFyICpwdmFycykKLXsKLQl1aW50IHcgPSAwOwotCi0JLyogZ2V0IGJvYXJkdHlwZSBhbmQgYm9hcmRyZXYgKi8KLQlzd2l0Y2ggKHNpaS0+cHViLmJ1c3R5cGUpIHsKLQljYXNlIFBDSV9CVVM6Ci0JCS8qIGRvIGEgcGNpIGNvbmZpZyByZWFkIHRvIGdldCBzdWJzeXN0ZW0gaWQgYW5kIHN1YnZlbmRvciBpZCAqLwotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoc2lpLT5wYnVzLCBQQ0lfQ0ZHX1NWSUQsICZ3KTsKLQkJLyogTGV0IG52cmFtIHZhcmlhYmxlcyBvdmVycmlkZSBzdWJzeXN0ZW0gVmVuZC9JRCAqLwotCQlzaWktPnB1Yi5ib2FyZHZlbmRvciA9ICh1MTYpc2lfZ2V0ZGV2cGF0aGludHZhcigmc2lpLT5wdWIsCi0JCQkiYm9hcmR2ZW5kb3IiKTsKLQkJaWYgKHNpaS0+cHViLmJvYXJkdmVuZG9yID09IDApCi0JCQlzaWktPnB1Yi5ib2FyZHZlbmRvciA9IHcgJiAweGZmZmY7Ci0JCWVsc2UKLQkJCVNJX0VSUk9SKCgiT3ZlcnJpZGluZyBib2FyZHZlbmRvcjogMHgleCBpbnN0ZWFkIG9mIDB4JXhcbiIsIHNpaS0+cHViLmJvYXJkdmVuZG9yLCB3ICYgMHhmZmZmKSk7Ci0JCXNpaS0+cHViLmJvYXJkdHlwZSA9ICh1MTYpc2lfZ2V0ZGV2cGF0aGludHZhcigmc2lpLT5wdWIsCi0JCQkiYm9hcmR0eXBlIik7Ci0JCWlmIChzaWktPnB1Yi5ib2FyZHR5cGUgPT0gMCkKLQkJCXNpaS0+cHViLmJvYXJkdHlwZSA9ICh3ID4+IDE2KSAmIDB4ZmZmZjsKLQkJZWxzZQotCQkJU0lfRVJST1IoKCJPdmVycmlkaW5nIGJvYXJkdHlwZTogMHgleCBpbnN0ZWFkIG9mIDB4JXhcbiIsIHNpaS0+cHViLmJvYXJkdHlwZSwgKHcgPj4gMTYpICYgMHhmZmZmKSk7Ci0JCWJyZWFrOwotCi0jaWZkZWYgQkNNU0RJTwotCWNhc2UgU0RJT19CVVM6Ci0jZW5kaWYKLQkJc2lpLT5wdWIuYm9hcmR2ZW5kb3IgPSBnZXRpbnR2YXIocHZhcnMsICJtYW5maWQiKTsKLQkJc2lpLT5wdWIuYm9hcmR0eXBlID0gZ2V0aW50dmFyKHB2YXJzLCAicHJvZGlkIik7Ci0JCWJyZWFrOwotCi0jaWZkZWYgQkNNU0RJTwotCWNhc2UgU1BJX0JVUzoKLQkJc2lpLT5wdWIuYm9hcmR2ZW5kb3IgPSBWRU5ET1JfQlJPQURDT007Ci0JCXNpaS0+cHViLmJvYXJkdHlwZSA9IFNQSV9CT0FSRDsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotCWNhc2UgU0lfQlVTOgotCWNhc2UgSlRBR19CVVM6Ci0JCXNpaS0+cHViLmJvYXJkdmVuZG9yID0gVkVORE9SX0JST0FEQ09NOwotCQlzaWktPnB1Yi5ib2FyZHR5cGUgPSBnZXRpbnR2YXIocHZhcnMsICJwcm9kaWQiKTsKLQkJaWYgKHB2YXJzID09IE5VTEwgfHwgKHNpaS0+cHViLmJvYXJkdHlwZSA9PSAwKSkgewotCQkJc2lpLT5wdWIuYm9hcmR0eXBlID0gZ2V0aW50dmFyKE5VTEwsICJib2FyZHR5cGUiKTsKLQkJCWlmIChzaWktPnB1Yi5ib2FyZHR5cGUgPT0gMCkKLQkJCQlzaWktPnB1Yi5ib2FyZHR5cGUgPSAweGZmZmY7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JaWYgKHNpaS0+cHViLmJvYXJkdHlwZSA9PSAwKSB7Ci0JCVNJX0VSUk9SKCgic2lfZG9hdHRhY2g6IHVua25vd24gYm9hcmQgdHlwZVxuIikpOwotCQlBU1NFUlQoc2lpLT5wdWIuYm9hcmR0eXBlKTsKLQl9Ci0KLQlzaWktPnB1Yi5ib2FyZGZsYWdzID0gZ2V0aW50dmFyKHB2YXJzLCAiYm9hcmRmbGFncyIpOwotfQotCi0vKiB0aGlzIGlzIHdpbGwgbWFrZSBTb25pY3MgY2FsbHMgZGlyZWN0bHksIHNpbmNlIFNvbmljcyBpcyBubyBsb25nZXIgc3VwcG9ydGVkIGluIHRoZSBTaSBhYnN0cmFjdGlvbiAqLwotLyogdGhpcyBoYXMgYmVlbiBjdXN0b21pemVkIGZvciB0aGUgYmNtIDQzMjkgT05MWSAqLwotI2lmZGVmIEJDTVNESU8KLXN0YXRpYyBzaV9pbmZvX3QgKnNpX2RvYXR0YWNoKHNpX2luZm9fdCAqc2lpLCB1aW50IGRldmlkLAotCQkJICAgICAgdm9pZCAqcmVncywgdWludCBidXN0eXBlLCB2b2lkICpwYnVzLAotCQkJICAgICAgY2hhciAqKnZhcnMsIHVpbnQgKnZhcnN6KQotewotCXN0cnVjdCBzaV9wdWIgKnNpaCA9ICZzaWktPnB1YjsKLQl1MzIgdywgc2F2ZXdpbjsKLQljaGlwY3JlZ3NfdCAqY2M7Ci0JY2hhciAqcHZhcnMgPSBOVUxMOwotCXVpbnQgb3JpZ2lkeDsKLQotCUFTU0VSVChHT09EUkVHUyhyZWdzKSk7Ci0KLQltZW1zZXQoKHVuc2lnbmVkIGNoYXIgKikgc2lpLCAwLCBzaXplb2Yoc2lfaW5mb190KSk7Ci0KLQlzYXZld2luID0gMDsKLQotCXNpaC0+YnVzY29yZWlkeCA9IEJBRElEWDsKLQotCXNpaS0+Y3VybWFwID0gcmVnczsKLQlzaWktPnBidXMgPSBwYnVzOwotCi0JLyogZmluZCBDaGlwY29tbW9uIGFkZHJlc3MgKi8KLQljYyA9IChjaGlwY3JlZ3NfdCAqKSBzaWktPmN1cm1hcDsKLQlzaWgtPmJ1c3R5cGUgPSBidXN0eXBlOwotCi0JLyogYnVzL2NvcmUvY2xrIHNldHVwIGZvciByZWdpc3RlciBhY2Nlc3MgKi8KLQlpZiAoIXNpX2J1c2NvcmVfcHJlcChzaWksIGJ1c3R5cGUsIGRldmlkLCBwYnVzKSkgewotCQlTSV9FUlJPUigoInNpX2RvYXR0YWNoOiBzaV9jb3JlX2Nsa19wcmVwIGZhaWxlZCAlZFxuIiwKLQkJCSAgYnVzdHlwZSkpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQkvKiBDaGlwSUQgcmVjb2duaXRpb24uCi0JICogICBXZSBhc3N1bWUgd2UgY2FuIHJlYWQgY2hpcGlkIGF0IG9mZnNldCAwIGZyb20gdGhlIHJlZ3MgYXJnLgotCSAqICAgSWYgd2UgYWRkIG90aGVyIGNoaXB0eXBlcyAob3IgaWYgd2UgbmVlZCB0byBzdXBwb3J0IG9sZCBzZGlvIGhvc3RzIHcvbyBjaGlwY29tbW9uKSwKLQkgKiAgIHNvbWUgd2F5IG9mIHJlY29nbml6aW5nIHRoZW0gbmVlZHMgdG8gYmUgYWRkZWQgaGVyZS4KLQkgKi8KLQl3ID0gUl9SRUcoJmNjLT5jaGlwaWQpOwotCXNpaC0+c29jaXR5cGUgPSAodyAmIENJRF9UWVBFX01BU0spID4+IENJRF9UWVBFX1NISUZUOwotCS8qIE1pZ2h0IGFzIHdsbCBmaWxsIGluIGNoaXAgaWQgcmV2ICYgcGtnICovCi0Jc2loLT5jaGlwID0gdyAmIENJRF9JRF9NQVNLOwotCXNpaC0+Y2hpcHJldiA9ICh3ICYgQ0lEX1JFVl9NQVNLKSA+PiBDSURfUkVWX1NISUZUOwotCXNpaC0+Y2hpcHBrZyA9ICh3ICYgQ0lEX1BLR19NQVNLKSA+PiBDSURfUEtHX1NISUZUOwotCi0JaWYgKChzaWgtPmNoaXAgPT0gQkNNNDMyOV9DSElQX0lEKSAmJgotCQkoc2loLT5jaGlwcGtnICE9IEJDTTQzMjlfMjg5UElOX1BLR19JRCkpCi0JCQlzaWgtPmNoaXBwa2cgPSBCQ000MzI5XzE4MlBJTl9QS0dfSUQ7Ci0KLQlzaWgtPmlzc2ltID0gSVNfU0lNKHNpaC0+Y2hpcHBrZyk7Ci0KLQkvKiBzY2FuIGZvciBjb3JlcyAqLwotCS8qIFNJX01TRygoIkZvdW5kIGNoaXAgdHlwZSBTQiAoMHglMDh4KVxuIiwgdykpOyAqLwotCXNiX3NjYW4oJnNpaS0+cHViLCByZWdzLCBkZXZpZCk7Ci0KLQkvKiBubyBjb3JlcyBmb3VuZCwgYmFpbCBvdXQgKi8KLQlpZiAoc2lpLT5udW1jb3JlcyA9PSAwKSB7Ci0JCVNJX0VSUk9SKCgic2lfZG9hdHRhY2g6IGNvdWxkIG5vdCBmaW5kIGFueSBjb3Jlc1xuIikpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JLyogYnVzL2NvcmUvY2xrIHNldHVwICovCi0Jb3JpZ2lkeCA9IFNJX0NDX0lEWDsKLQlpZiAoIXNpX2J1c2NvcmVfc2V0dXAoc2lpLCBjYywgYnVzdHlwZSwgc2F2ZXdpbiwgJm9yaWdpZHgsIHJlZ3MpKSB7Ci0JCVNJX0VSUk9SKCgic2lfZG9hdHRhY2g6IHNpX2J1c2NvcmVfc2V0dXAgZmFpbGVkXG4iKSk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLSNpZmRlZiBCUkNNX0ZVTExNQUMKLQlwdmFycyA9IE5VTEw7Ci0jZWxzZQotCS8qIEluaXQgbnZyYW0gZnJvbSBmbGFzaCBpZiBpdCBleGlzdHMgKi8KLQludnJhbV9pbml0KCh2b2lkICopJihzaWktPnB1YikpOwotCi0JLyogSW5pdCBudnJhbSBmcm9tIHNwcm9tL290cCBpZiB0aGV5IGV4aXN0ICovCi0JaWYgKHNyb21fdmFyX2luaXQKLQkgICAgKCZzaWktPnB1YiwgYnVzdHlwZSwgcmVncywgc2lpLT5vc2gsIHZhcnMsIHZhcnN6KSkgewotCQlTSV9FUlJPUigoInNpX2RvYXR0YWNoOiBzcm9tX3Zhcl9pbml0IGZhaWxlZDogYmFkIHNyb21cbiIpKTsKLQkJZ290byBleGl0OwotCX0KLQlwdmFycyA9IHZhcnMgPyAqdmFycyA6IE5VTEw7Ci0Jc2lfbnZyYW1fcHJvY2VzcyhzaWksIHB2YXJzKTsKLSNlbmRpZgotCi0JLyogPT09IE5WUkFNLCBjbG9jayBpcyByZWFkeSA9PT0gKi8KLQotI2lmZGVmIEJSQ01fRlVMTE1BQwotCWlmIChzaWktPnB1Yi5jY3JldiA+PSAyMCkgewotI2VuZGlmCi0JY2MgPSAoY2hpcGNyZWdzX3QgKikgc2lfc2V0Y29yZShzaWgsIENDX0NPUkVfSUQsIDApOwotCVdfUkVHKCZjYy0+Z3Bpb3B1bGx1cCwgMCk7Ci0JV19SRUcoJmNjLT5ncGlvcHVsbGRvd24sIDApOwotCXNiX3NldGNvcmVpZHgoc2loLCBvcmlnaWR4KTsKLSNpZmRlZiBCUkNNX0ZVTExNQUMKLQl9Ci0jZW5kaWYKLQotI2lmbmRlZiBCUkNNX0ZVTExNQUMKLQkvKiBQTVUgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb25zICovCi0JaWYgKFBNVUNUTF9FTkFCKHNpaCkpIHsKLQkJdTMyIHh0YWxmcmVxOwotCQlzaV9wbXVfaW5pdChzaWgpOwotCQlzaV9wbXVfY2hpcF9pbml0KHNpaCk7Ci0JCXh0YWxmcmVxID0gZ2V0aW50dmFyKHB2YXJzLCAieHRhbGZyZXEiKTsKLQkJLyogSWYgeHRhbGZyZXEgdmFyIG5vdCBhdmFpbGFibGUsIHRyeSB0byBtZWFzdXJlIGl0ICovCi0JCWlmICh4dGFsZnJlcSA9PSAwKQotCQkJeHRhbGZyZXEgPSBzaV9wbXVfbWVhc3VyZV9hbHBjbGsoc2loKTsKLQkJc2lfcG11X3BsbF9pbml0KHNpaCwgeHRhbGZyZXEpOwotCQlzaV9wbXVfcmVzX2luaXQoc2loKTsKLQkJc2lfcG11X3N3cmVnX2luaXQoc2loKTsKLQl9Ci0KLQkvKiBzZXR1cCB0aGUgR1BJTyBiYXNlZCBMRUQgcG93ZXJzYXZlIHJlZ2lzdGVyICovCi0JdyA9IGdldGludHZhcihwdmFycywgImxlZGRjIik7Ci0JaWYgKHcgPT0gMCkKLQkJdyA9IERFRkFVTFRfR1BJT1RJTUVSVkFMOwotCXNiX2NvcmVyZWcoc2loLCBTSV9DQ19JRFgsIG9mZnNldG9mKGNoaXBjcmVnc190LCBncGlvdGltZXJ2YWwpLCB+MCwgdyk7Ci0KLSNpZmRlZiBCQ01EQkcKLQkvKiBjbGVhciBhbnkgcHJldmlvdXMgZXBpZGlhZy1pbmR1Y2VkIHRhcmdldCBhYm9ydCAqLwotCXNiX3RhY2xlYXIoc2loLCBmYWxzZSk7Ci0jZW5kaWYJCQkJLyogQkNNREJHICovCi0jZW5kaWYKLQotCXJldHVybiBzaWk7Ci0KLSBleGl0OgotCXJldHVybiBOVUxMOwotfQotCi0jZWxzZQkJCQkvKiBCQ01TRElPICovCi1zdGF0aWMgc2lfaW5mb190ICpzaV9kb2F0dGFjaChzaV9pbmZvX3QgKnNpaSwgdWludCBkZXZpZCwKLQkJCSAgICAgIHZvaWQgKnJlZ3MsIHVpbnQgYnVzdHlwZSwgdm9pZCAqcGJ1cywKLQkJCSAgICAgIGNoYXIgKip2YXJzLCB1aW50ICp2YXJzeikKLXsKLQlzdHJ1Y3Qgc2lfcHViICpzaWggPSAmc2lpLT5wdWI7Ci0JdTMyIHcsIHNhdmV3aW47Ci0JY2hpcGNyZWdzX3QgKmNjOwotCWNoYXIgKnB2YXJzID0gTlVMTDsKLQl1aW50IG9yaWdpZHg7Ci0KLQlBU1NFUlQoR09PRFJFR1MocmVncykpOwotCi0JbWVtc2V0KCh1bnNpZ25lZCBjaGFyICopIHNpaSwgMCwgc2l6ZW9mKHNpX2luZm9fdCkpOwotCi0Jc2F2ZXdpbiA9IDA7Ci0KLQlzaWgtPmJ1c2NvcmVpZHggPSBCQURJRFg7Ci0KLQlzaWktPmN1cm1hcCA9IHJlZ3M7Ci0Jc2lpLT5wYnVzID0gcGJ1czsKLQotCS8qIGNoZWNrIHRvIHNlZSBpZiB3ZSBhcmUgYSBzaSBjb3JlIG1pbWljJ2luZyBhIHBjaSBjb3JlICovCi0JaWYgKGJ1c3R5cGUgPT0gUENJX0JVUykgewotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoc2lpLT5wYnVzLCBQQ0lfU1BST01fQ09OVFJPTCwgICZ3KTsKLQkJaWYgKHcgPT0gMHhmZmZmZmZmZikgewotCQkJU0lfRVJST1IoKCIlczogaW5jb21pbmcgYnVzIGlzIFBDSSBidXQgaXQncyBhIGxpZSwgIgotCQkJCSIgc3dpdGNoaW5nIHRvIFNJIGRldmlkOjB4JXhcbiIsCi0JCQkJX19mdW5jX18sIGRldmlkKSk7Ci0JCQlidXN0eXBlID0gU0lfQlVTOwotCQl9Ci0JfQotCi0JLyogZmluZCBDaGlwY29tbW9uIGFkZHJlc3MgKi8KLQlpZiAoYnVzdHlwZSA9PSBQQ0lfQlVTKSB7Ci0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChzaWktPnBidXMsIFBDSV9CQVIwX1dJTiwgJnNhdmV3aW4pOwotCQlpZiAoIUdPT0RDT1JFQUREUihzYXZld2luLCBTSV9FTlVNX0JBU0UpKQotCQkJc2F2ZXdpbiA9IFNJX0VOVU1fQkFTRTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChzaWktPnBidXMsIFBDSV9CQVIwX1dJTiwKLQkJCQkgICAgICAgU0lfRU5VTV9CQVNFKTsKLQkJY2MgPSAoY2hpcGNyZWdzX3QgKikgcmVnczsKLQl9IGVsc2UgewotCQljYyA9IChjaGlwY3JlZ3NfdCAqKSBSRUdfTUFQKFNJX0VOVU1fQkFTRSwgU0lfQ09SRV9TSVpFKTsKLQl9Ci0KLQlzaWgtPmJ1c3R5cGUgPSBidXN0eXBlOwotCi0JLyogYnVzL2NvcmUvY2xrIHNldHVwIGZvciByZWdpc3RlciBhY2Nlc3MgKi8KLQlpZiAoIXNpX2J1c2NvcmVfcHJlcChzaWksIGJ1c3R5cGUsIGRldmlkLCBwYnVzKSkgewotCQlTSV9FUlJPUigoInNpX2RvYXR0YWNoOiBzaV9jb3JlX2Nsa19wcmVwIGZhaWxlZCAlZFxuIiwKLQkJCSAgYnVzdHlwZSkpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQkvKiBDaGlwSUQgcmVjb2duaXRpb24uCi0JICogICBXZSBhc3N1bWUgd2UgY2FuIHJlYWQgY2hpcGlkIGF0IG9mZnNldCAwIGZyb20gdGhlIHJlZ3MgYXJnLgotCSAqICAgSWYgd2UgYWRkIG90aGVyIGNoaXB0eXBlcyAob3IgaWYgd2UgbmVlZCB0byBzdXBwb3J0IG9sZCBzZGlvIGhvc3RzIHcvbyBjaGlwY29tbW9uKSwKLQkgKiAgIHNvbWUgd2F5IG9mIHJlY29nbml6aW5nIHRoZW0gbmVlZHMgdG8gYmUgYWRkZWQgaGVyZS4KLQkgKi8KLQl3ID0gUl9SRUcoJmNjLT5jaGlwaWQpOwotCXNpaC0+c29jaXR5cGUgPSAodyAmIENJRF9UWVBFX01BU0spID4+IENJRF9UWVBFX1NISUZUOwotCS8qIE1pZ2h0IGFzIHdsbCBmaWxsIGluIGNoaXAgaWQgcmV2ICYgcGtnICovCi0Jc2loLT5jaGlwID0gdyAmIENJRF9JRF9NQVNLOwotCXNpaC0+Y2hpcHJldiA9ICh3ICYgQ0lEX1JFVl9NQVNLKSA+PiBDSURfUkVWX1NISUZUOwotCXNpaC0+Y2hpcHBrZyA9ICh3ICYgQ0lEX1BLR19NQVNLKSA+PiBDSURfUEtHX1NISUZUOwotCi0Jc2loLT5pc3NpbSA9IElTX1NJTShzaWgtPmNoaXBwa2cpOwotCi0JLyogc2NhbiBmb3IgY29yZXMgKi8KLQlpZiAoc2lpLT5wdWIuc29jaXR5cGUgPT0gU09DSV9BSSkgewotCQlTSV9NU0coKCJGb3VuZCBjaGlwIHR5cGUgQUkgKDB4JTA4eClcbiIsIHcpKTsKLQkJLyogcGFzcyBjaGlwYyBhZGRyZXNzIGluc3RlYWQgb2Ygb3JpZ2luYWwgY29yZSBiYXNlICovCi0JCWFpX3NjYW4oJnNpaS0+cHViLCAodm9pZCAqKWNjLCBkZXZpZCk7Ci0JfSBlbHNlIHsKLQkJU0lfRVJST1IoKCJGb3VuZCBjaGlwIG9mIHVua25vd24gdHlwZSAoMHglMDh4KVxuIiwgdykpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JLyogbm8gY29yZXMgZm91bmQsIGJhaWwgb3V0ICovCi0JaWYgKHNpaS0+bnVtY29yZXMgPT0gMCkgewotCQlTSV9FUlJPUigoInNpX2RvYXR0YWNoOiBjb3VsZCBub3QgZmluZCBhbnkgY29yZXNcbiIpKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCS8qIGJ1cy9jb3JlL2NsayBzZXR1cCAqLwotCW9yaWdpZHggPSBTSV9DQ19JRFg7Ci0JaWYgKCFzaV9idXNjb3JlX3NldHVwKHNpaSwgY2MsIGJ1c3R5cGUsIHNhdmV3aW4sICZvcmlnaWR4LCByZWdzKSkgewotCQlTSV9FUlJPUigoInNpX2RvYXR0YWNoOiBzaV9idXNjb3JlX3NldHVwIGZhaWxlZFxuIikpOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JLyogYXNzdW1lIGN1cnJlbnQgY29yZSBpcyBDQyAqLwotCWlmICgoc2lpLT5wdWIuY2NyZXYgPT0gMHgyNSkKLQkgICAgJiYKLQkgICAgKChzaWgtPmNoaXAgPT0gQkNNNDMyMzZfQ0hJUF9JRAotCSAgICAgIHx8IHNpaC0+Y2hpcCA9PSBCQ000MzIzNV9DSElQX0lECi0JICAgICAgfHwgc2loLT5jaGlwID09IEJDTTQzMjM4X0NISVBfSUQpCi0JICAgICAmJiAoc2lpLT5wdWIuY2hpcHJldiA8PSAyKSkpIHsKLQotCQlpZiAoKGNjLT5jaGlwc3RhdHVzICYgQ1NUNDMyMzZfQlBfQ0xLKSAhPSAwKSB7Ci0JCQl1aW50IGNsa2RpdjsKLQkJCWNsa2RpdiA9IFJfUkVHKCZjYy0+Y2xrZGl2KTsKLQkJCS8qIG90cF9jbGtfZGl2IGlzIGV2ZW4gbnVtYmVyLCAxMjAvMTQgPCA5bWh6ICovCi0JCQljbGtkaXYgPSAoY2xrZGl2ICYgfkNMS0RfT1RQKSB8ICgxNCA8PCBDTEtEX09UUF9TSElGVCk7Ci0JCQlXX1JFRygmY2MtPmNsa2RpdiwgY2xrZGl2KTsKLQkJCVNJX0VSUk9SKCgiJXM6IHNldCBjbGtkaXYgdG8gJXhcbiIsIF9fZnVuY19fLCBjbGtkaXYpKTsKLQkJfQotCQl1ZGVsYXkoMTApOwotCX0KLQotCS8qIEluaXQgbnZyYW0gZnJvbSBmbGFzaCBpZiBpdCBleGlzdHMgKi8KLQludnJhbV9pbml0KCh2b2lkICopJihzaWktPnB1YikpOwotCi0JLyogSW5pdCBudnJhbSBmcm9tIHNwcm9tL290cCBpZiB0aGV5IGV4aXN0ICovCi0JaWYgKHNyb21fdmFyX2luaXQKLQkgICAgKCZzaWktPnB1YiwgYnVzdHlwZSwgcmVncywgdmFycywgdmFyc3opKSB7Ci0JCVNJX0VSUk9SKCgic2lfZG9hdHRhY2g6IHNyb21fdmFyX2luaXQgZmFpbGVkOiBiYWQgc3JvbVxuIikpOwotCQlnb3RvIGV4aXQ7Ci0JfQotCXB2YXJzID0gdmFycyA/ICp2YXJzIDogTlVMTDsKLQlzaV9udnJhbV9wcm9jZXNzKHNpaSwgcHZhcnMpOwotCi0JLyogPT09IE5WUkFNLCBjbG9jayBpcyByZWFkeSA9PT0gKi8KLQljYyA9IChjaGlwY3JlZ3NfdCAqKSBzaV9zZXRjb3JlKHNpaCwgQ0NfQ09SRV9JRCwgMCk7Ci0JV19SRUcoJmNjLT5ncGlvcHVsbHVwLCAwKTsKLQlXX1JFRygmY2MtPmdwaW9wdWxsZG93biwgMCk7Ci0Jc2lfc2V0Y29yZWlkeChzaWgsIG9yaWdpZHgpOwotCi0JLyogUE1VIHNwZWNpZmljIGluaXRpYWxpemF0aW9ucyAqLwotCWlmIChQTVVDVExfRU5BQihzaWgpKSB7Ci0JCXUzMiB4dGFsZnJlcTsKLQkJc2lfcG11X2luaXQoc2loKTsKLQkJc2lfcG11X2NoaXBfaW5pdChzaWgpOwotCQl4dGFsZnJlcSA9IGdldGludHZhcihwdmFycywgInh0YWxmcmVxIik7Ci0JCS8qIElmIHh0YWxmcmVxIHZhciBub3QgYXZhaWxhYmxlLCB0cnkgdG8gbWVhc3VyZSBpdCAqLwotCQlpZiAoeHRhbGZyZXEgPT0gMCkKLQkJCXh0YWxmcmVxID0gc2lfcG11X21lYXN1cmVfYWxwY2xrKHNpaCk7Ci0JCXNpX3BtdV9wbGxfaW5pdChzaWgsIHh0YWxmcmVxKTsKLQkJc2lfcG11X3Jlc19pbml0KHNpaCk7Ci0JCXNpX3BtdV9zd3JlZ19pbml0KHNpaCk7Ci0JfQotCi0JLyogc2V0dXAgdGhlIEdQSU8gYmFzZWQgTEVEIHBvd2Vyc2F2ZSByZWdpc3RlciAqLwotCXcgPSBnZXRpbnR2YXIocHZhcnMsICJsZWRkYyIpOwotCWlmICh3ID09IDApCi0JCXcgPSBERUZBVUxUX0dQSU9USU1FUlZBTDsKLQlzaV9jb3JlcmVnKHNpaCwgU0lfQ0NfSURYLCBvZmZzZXRvZihjaGlwY3JlZ3NfdCwgZ3Bpb3RpbWVydmFsKSwgfjAsIHcpOwotCi0JaWYgKFBDSUUoc2lpKSkgewotCQlBU1NFUlQoc2lpLT5wY2ggIT0gTlVMTCk7Ci0JCXBjaWNvcmVfYXR0YWNoKHNpaS0+cGNoLCBwdmFycywgU0lfRE9BVFRBQ0gpOwotCX0KLQotCWlmICgoc2loLT5jaGlwID09IEJDTTQzMjI0X0NISVBfSUQpIHx8Ci0JICAgIChzaWgtPmNoaXAgPT0gQkNNNDM0MjFfQ0hJUF9JRCkpIHsKLQkJLyogZW5hYmxlIDEyIG1BIGRyaXZlIHN0cmVudGggZm9yIDQzMjI0IGFuZCBzZXQgY2hpcENvbnRyb2wgcmVnaXN0ZXIgYml0IDE1ICovCi0JCWlmIChzaWgtPmNoaXByZXYgPT0gMCkgewotCQkJU0lfTVNHKCgiQXBwbHlpbmcgNDMyMjRBMCBXQVJzXG4iKSk7Ci0JCQlzaV9jb3JlcmVnKHNpaCwgU0lfQ0NfSURYLAotCQkJCSAgIG9mZnNldG9mKGNoaXBjcmVnc190LCBjaGlwY29udHJvbCksCi0JCQkJICAgQ0NUUkw0MzIyNF9HUElPX1RPR0dMRSwKLQkJCQkgICBDQ1RSTDQzMjI0X0dQSU9fVE9HR0xFKTsKLQkJCXNpX3BtdV9jaGlwY29udHJvbChzaWgsIDAsIENDVFJMXzQzMjI0QTBfMTJNQV9MRURfRFJJVkUsCi0JCQkJCSAgIENDVFJMXzQzMjI0QTBfMTJNQV9MRURfRFJJVkUpOwotCQl9Ci0JCWlmIChzaWgtPmNoaXByZXYgPj0gMSkgewotCQkJU0lfTVNHKCgiQXBwbHlpbmcgNDMyMjRCMCsgV0FSc1xuIikpOwotCQkJc2lfcG11X2NoaXBjb250cm9sKHNpaCwgMCwgQ0NUUkxfNDMyMjRCMF8xMk1BX0xFRF9EUklWRSwKLQkJCQkJICAgQ0NUUkxfNDMyMjRCMF8xMk1BX0xFRF9EUklWRSk7Ci0JCX0KLQl9Ci0KLQlpZiAoc2loLT5jaGlwID09IEJDTTQzMTNfQ0hJUF9JRCkgewotCQkvKiBlbmFibGUgMTIgbUEgZHJpdmUgc3RyZW50aCBmb3IgNDMxMyBhbmQgc2V0IGNoaXBDb250cm9sIHJlZ2lzdGVyIGJpdCAxICovCi0JCVNJX01TRygoIkFwcGx5aW5nIDQzMTMgV0FSc1xuIikpOwotCQlzaV9wbXVfY2hpcGNvbnRyb2woc2loLCAwLCBDQ1RSTF80MzEzXzEyTUFfTEVEX0RSSVZFLAotCQkJCSAgIENDVFJMXzQzMTNfMTJNQV9MRURfRFJJVkUpOwotCX0KLQotCWlmIChzaWgtPmNoaXAgPT0gQkNNNDMzMV9DSElQX0lEKSB7Ci0JCS8qIEVuYWJsZSBFeHQgUEEgbGluZXMgZGVwZW5kaW5nIG9uIGNoaXAgcGFja2FnZSBvcHRpb24gKi8KLQkJc2lfY2hpcGNvbnRybF9lcGE0MzMxKHNpaCwgdHJ1ZSk7Ci0JfQotCi0JcmV0dXJuIHNpaTsKLSBleGl0OgotCWlmIChzaWgtPmJ1c3R5cGUgPT0gUENJX0JVUykgewotCQlpZiAoc2lpLT5wY2gpCi0JCQlwY2ljb3JlX2RlaW5pdChzaWktPnBjaCk7Ci0JCXNpaS0+cGNoID0gTlVMTDsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLSNlbmRpZgkJCQkvKiBCQ01TRElPICovCi0KLS8qIG1heSBiZSBjYWxsZWQgd2l0aCBjb3JlIGluIHJlc2V0ICovCi12b2lkIHNpX2RldGFjaChzaV90ICpzaWgpCi17Ci0Jc2lfaW5mb190ICpzaWk7Ci0JdWludCBpZHg7Ci0KLQlzdHJ1Y3Qgc2lfcHViICpzaV9sb2NhbCA9IE5VTEw7Ci0JbWVtY3B5KCZzaV9sb2NhbCwgJnNpaCwgc2l6ZW9mKHNpX3QgKiopKTsKLQotCXNpaSA9IFNJX0lORk8oc2loKTsKLQotCWlmIChzaWkgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JaWYgKHNpaC0+YnVzdHlwZSA9PSBTSV9CVVMpCi0JCWZvciAoaWR4ID0gMDsgaWR4IDwgU0lfTUFYQ09SRVM7IGlkeCsrKQotCQkJaWYgKHNpaS0+cmVnc1tpZHhdKSB7Ci0JCQkJaW91bm1hcChzaWktPnJlZ3NbaWR4XSk7Ci0JCQkJc2lpLT5yZWdzW2lkeF0gPSBOVUxMOwotCQkJfQotCi0jaWZuZGVmIEJSQ01fRlVMTE1BQwotCW52cmFtX2V4aXQoKHZvaWQgKilzaV9sb2NhbCk7CS8qIGZyZWUgdXAgbnZyYW0gYnVmZmVycyAqLwotCi0JaWYgKHNpaC0+YnVzdHlwZSA9PSBQQ0lfQlVTKSB7Ci0JCWlmIChzaWktPnBjaCkKLQkJCXBjaWNvcmVfZGVpbml0KHNpaS0+cGNoKTsKLQkJc2lpLT5wY2ggPSBOVUxMOwotCX0KLSNlbmRpZgotI2lmICFkZWZpbmVkKEJDTUJVU1RZUEUpIHx8IChCQ01CVVNUWVBFID09IFNJX0JVUykKLQlpZiAoc2lpICE9ICZrc2lpKQotI2VuZGlmCQkJCS8qICFCQ01CVVNUWVBFIHx8IChCQ01CVVNUWVBFID09IFNJX0JVUykgKi8KLQkJa2ZyZWUoc2lpKTsKLX0KLQotLyogcmVnaXN0ZXIgZHJpdmVyIGludGVycnVwdCBkaXNhYmxpbmcgYW5kIHJlc3RvcmluZyBjYWxsYmFjayBmdW5jdGlvbnMgKi8KLXZvaWQKLXNpX3JlZ2lzdGVyX2ludHJfY2FsbGJhY2soc2lfdCAqc2loLCB2b2lkICppbnRyc29mZl9mbiwgdm9pZCAqaW50cnNyZXN0b3JlX2ZuLAotCQkJICB2b2lkICppbnRyc2VuYWJsZWRfZm4sIHZvaWQgKmludHJfYXJnKQotewotCXNpX2luZm9fdCAqc2lpOwotCi0Jc2lpID0gU0lfSU5GTyhzaWgpOwotCXNpaS0+aW50cl9hcmcgPSBpbnRyX2FyZzsKLQlzaWktPmludHJzb2ZmX2ZuID0gKHNpX2ludHJzb2ZmX3QpIGludHJzb2ZmX2ZuOwotCXNpaS0+aW50cnNyZXN0b3JlX2ZuID0gKHNpX2ludHJzcmVzdG9yZV90KSBpbnRyc3Jlc3RvcmVfZm47Ci0Jc2lpLT5pbnRyc2VuYWJsZWRfZm4gPSAoc2lfaW50cnNlbmFibGVkX3QpIGludHJzZW5hYmxlZF9mbjsKLQkvKiBzYXZlIGN1cnJlbnQgY29yZSBpZC4gIHdoZW4gdGhpcyBmdW5jdGlvbiBjYWxsZWQsIHRoZSBjdXJyZW50IGNvcmUKLQkgKiBtdXN0IGJlIHRoZSBjb3JlIHdoaWNoIHByb3ZpZGVzIGRyaXZlciBmdW5jdGlvbnMoaWwsIGV0LCB3bCwgZXRjLikKLQkgKi8KLQlzaWktPmRldl9jb3JlaWQgPSBzaWktPmNvcmVpZFtzaWktPmN1cmlkeF07Ci19Ci0KLXZvaWQgc2lfZGVyZWdpc3Rlcl9pbnRyX2NhbGxiYWNrKHNpX3QgKnNpaCkKLXsKLQlzaV9pbmZvX3QgKnNpaTsKLQotCXNpaSA9IFNJX0lORk8oc2loKTsKLQlzaWktPmludHJzb2ZmX2ZuID0gTlVMTDsKLX0KLQotdWludCBzaV9mbGFnKHNpX3QgKnNpaCkKLXsKLQlpZiAoc2loLT5zb2NpdHlwZSA9PSBTT0NJX0FJKQotCQlyZXR1cm4gYWlfZmxhZyhzaWgpOwotCWVsc2UgewotCQlBU1NFUlQoMCk7Ci0JCXJldHVybiAwOwotCX0KLX0KLQotdm9pZCBzaV9zZXRpbnQoc2lfdCAqc2loLCBpbnQgc2lmbGFnKQotewotCWlmIChzaWgtPnNvY2l0eXBlID09IFNPQ0lfQUkpCi0JCWFpX3NldGludChzaWgsIHNpZmxhZyk7Ci0JZWxzZQotCQlBU1NFUlQoMCk7Ci19Ci0KLSNpZm5kZWYgQkNNU0RJTwotdWludCBzaV9jb3JlaWQoc2lfdCAqc2loKQotewotCXNpX2luZm9fdCAqc2lpOwotCi0Jc2lpID0gU0lfSU5GTyhzaWgpOwotCXJldHVybiBzaWktPmNvcmVpZFtzaWktPmN1cmlkeF07Ci19Ci0jZW5kaWYKLQotdWludCBzaV9jb3JlaWR4KHNpX3QgKnNpaCkKLXsKLQlzaV9pbmZvX3QgKnNpaTsKLQotCXNpaSA9IFNJX0lORk8oc2loKTsKLQlyZXR1cm4gc2lpLT5jdXJpZHg7Ci19Ci0KLWJvb2wgc2lfYmFja3BsYW5lNjQoc2lfdCAqc2loKQotewotCXJldHVybiAoc2loLT5jY2NhcHMgJiBDQ19DQVBfQktQTE42NCkgIT0gMDsKLX0KLQotI2lmbmRlZiBCQ01TRElPCi11aW50IHNpX2NvcmVyZXYoc2lfdCAqc2loKQotewotCWlmIChzaWgtPnNvY2l0eXBlID09IFNPQ0lfQUkpCi0JCXJldHVybiBhaV9jb3JlcmV2KHNpaCk7Ci0JZWxzZSB7Ci0JCUFTU0VSVCgwKTsKLQkJcmV0dXJuIDA7Ci0JfQotfQotI2VuZGlmCi0KLS8qIHJldHVybiBpbmRleCBvZiBjb3JlaWQgb3IgQkFESURYIGlmIG5vdCBmb3VuZCAqLwotdWludCBzaV9maW5kY29yZWlkeChzaV90ICpzaWgsIHVpbnQgY29yZWlkLCB1aW50IGNvcmV1bml0KQotewotCXNpX2luZm9fdCAqc2lpOwotCXVpbnQgZm91bmQ7Ci0JdWludCBpOwotCi0Jc2lpID0gU0lfSU5GTyhzaWgpOwotCi0JZm91bmQgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IHNpaS0+bnVtY29yZXM7IGkrKykKLQkJaWYgKHNpaS0+Y29yZWlkW2ldID09IGNvcmVpZCkgewotCQkJaWYgKGZvdW5kID09IGNvcmV1bml0KQotCQkJCXJldHVybiBpOwotCQkJZm91bmQrKzsKLQkJfQotCi0JcmV0dXJuIEJBRElEWDsKLX0KLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gY2hhbmdlcyBsb2dpY2FsICJmb2N1cyIgdG8gdGhlIGluZGljYXRlZCBjb3JlOwotICogbXVzdCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIG9mZi4KLSAqIE1vcmVvdmVyLCBjYWxsZXJzIHNob3VsZCBrZWVwIGludGVycnVwdHMgb2ZmIGR1cmluZyBzd2l0Y2hpbmcgb3V0IG9mIGFuZCBiYWNrIHRvIGQxMSBjb3JlCi0gKi8KLXZvaWQgKnNpX3NldGNvcmUoc2lfdCAqc2loLCB1aW50IGNvcmVpZCwgdWludCBjb3JldW5pdCkKLXsKLQl1aW50IGlkeDsKLQotCWlkeCA9IHNpX2ZpbmRjb3JlaWR4KHNpaCwgY29yZWlkLCBjb3JldW5pdCk7Ci0JaWYgKCFHT09ESURYKGlkeCkpCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKHNpaC0+c29jaXR5cGUgPT0gU09DSV9BSSkKLQkJcmV0dXJuIGFpX3NldGNvcmVpZHgoc2loLCBpZHgpOwotCWVsc2UgewotI2lmZGVmIEJDTVNESU8KLQkJcmV0dXJuIHNiX3NldGNvcmVpZHgoc2loLCBpZHgpOwotI2Vsc2UKLQkJQVNTRVJUKDApOwotCQlyZXR1cm4gTlVMTDsKLSNlbmRpZgotCX0KLX0KLQotI2lmbmRlZiBCQ01TRElPCi12b2lkICpzaV9zZXRjb3JlaWR4KHNpX3QgKnNpaCwgdWludCBjb3JlaWR4KQotewotCWlmIChzaWgtPnNvY2l0eXBlID09IFNPQ0lfQUkpCi0JCXJldHVybiBhaV9zZXRjb3JlaWR4KHNpaCwgY29yZWlkeCk7Ci0JZWxzZSB7Ci0JCUFTU0VSVCgwKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotfQotI2VuZGlmCi0KLS8qIFR1cm4gb2ZmIGludGVycnVwdCBhcyByZXF1aXJlZCBieSBzYl9zZXRjb3JlLCBiZWZvcmUgc3dpdGNoIGNvcmUgKi8KLXZvaWQgKnNpX3N3aXRjaF9jb3JlKHNpX3QgKnNpaCwgdWludCBjb3JlaWQsIHVpbnQgKm9yaWdpZHgsIHVpbnQgKmludHJfdmFsKQotewotCXZvaWQgKmNjOwotCXNpX2luZm9fdCAqc2lpOwotCi0Jc2lpID0gU0lfSU5GTyhzaWgpOwotCi0JaWYgKFNJX0ZBU1Qoc2lpKSkgewotCQkvKiBPdmVybG9hZGluZyB0aGUgb3JpZ2lkeCB2YXJpYWJsZSB0byByZW1lbWJlciB0aGUgY29yZWlkLAotCQkgKiB0aGlzIHdvcmtzIGJlY2F1c2UgdGhlIGNvcmUgaWRzIGNhbm5vdCBiZSBjb25mdXNlZCB3aXRoCi0JCSAqIGNvcmUgaW5kaWNlcy4KLQkJICovCi0JCSpvcmlnaWR4ID0gY29yZWlkOwotCQlpZiAoY29yZWlkID09IENDX0NPUkVfSUQpCi0JCQlyZXR1cm4gKHZvaWQgKilDQ1JFR1NfRkFTVChzaWkpOwotCQllbHNlIGlmIChjb3JlaWQgPT0gc2loLT5idXNjb3JldHlwZSkKLQkJCXJldHVybiAodm9pZCAqKVBDSUVSRUdTKHNpaSk7Ci0JfQotCUlOVFJfT0ZGKHNpaSwgKmludHJfdmFsKTsKLQkqb3JpZ2lkeCA9IHNpaS0+Y3VyaWR4OwotCWNjID0gc2lfc2V0Y29yZShzaWgsIGNvcmVpZCwgMCk7Ci0JQVNTRVJUKGNjICE9IE5VTEwpOwotCi0JcmV0dXJuIGNjOwotfQotCi0vKiByZXN0b3JlIGNvcmVpZHggYW5kIHJlc3RvcmUgaW50ZXJydXB0ICovCi12b2lkIHNpX3Jlc3RvcmVfY29yZShzaV90ICpzaWgsIHVpbnQgY29yZWlkLCB1aW50IGludHJfdmFsKQotewotCXNpX2luZm9fdCAqc2lpOwotCi0Jc2lpID0gU0lfSU5GTyhzaWgpOwotCWlmIChTSV9GQVNUKHNpaSkKLQkgICAgJiYgKChjb3JlaWQgPT0gQ0NfQ09SRV9JRCkgfHwgKGNvcmVpZCA9PSBzaWgtPmJ1c2NvcmV0eXBlKSkpCi0JCXJldHVybjsKLQotCXNpX3NldGNvcmVpZHgoc2loLCBjb3JlaWQpOwotCUlOVFJfUkVTVE9SRShzaWksIGludHJfdmFsKTsKLX0KLQotdTMyIHNpX2NvcmVfY2ZsYWdzKHNpX3QgKnNpaCwgdTMyIG1hc2ssIHUzMiB2YWwpCi17Ci0JaWYgKHNpaC0+c29jaXR5cGUgPT0gU09DSV9BSSkKLQkJcmV0dXJuIGFpX2NvcmVfY2ZsYWdzKHNpaCwgbWFzaywgdmFsKTsKLQllbHNlIHsKLQkJQVNTRVJUKDApOwotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KLXUzMiBzaV9jb3JlX3NmbGFncyhzaV90ICpzaWgsIHUzMiBtYXNrLCB1MzIgdmFsKQotewotCWlmIChzaWgtPnNvY2l0eXBlID09IFNPQ0lfQUkpCi0JCXJldHVybiBhaV9jb3JlX3NmbGFncyhzaWgsIG1hc2ssIHZhbCk7Ci0JZWxzZSB7Ci0JCUFTU0VSVCgwKTsKLQkJcmV0dXJuIDA7Ci0JfQotfQotCi1ib29sIHNpX2lzY29yZXVwKHNpX3QgKnNpaCkKLXsKLQlpZiAoc2loLT5zb2NpdHlwZSA9PSBTT0NJX0FJKQotCQlyZXR1cm4gYWlfaXNjb3JldXAoc2loKTsKLQllbHNlIHsKLSNpZmRlZiBCQ01TRElPCi0JCXJldHVybiBzYl9pc2NvcmV1cChzaWgpOwotI2Vsc2UKLQkJQVNTRVJUKDApOwotCQlyZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLQl9Ci19Ci0KLXZvaWQgc2lfd3JpdGVfd3JhcHBlcnJlZyhzaV90ICpzaWgsIHUzMiBvZmZzZXQsIHUzMiB2YWwpCi17Ci0JLyogb25seSBmb3IgNDMxOSwgbm8gcmVxdWlyZW1lbnQgZm9yIFNPQ0lfU0IgKi8KLQlpZiAoc2loLT5zb2NpdHlwZSA9PSBTT0NJX0FJKSB7Ci0JCWFpX3dyaXRlX3dyYXBfcmVnKHNpaCwgb2Zmc2V0LCB2YWwpOwotCX0KLX0KLQotdWludCBzaV9jb3JlcmVnKHNpX3QgKnNpaCwgdWludCBjb3JlaWR4LCB1aW50IHJlZ29mZiwgdWludCBtYXNrLCB1aW50IHZhbCkKLXsKLQotCWlmIChzaWgtPnNvY2l0eXBlID09IFNPQ0lfQUkpCi0JCXJldHVybiBhaV9jb3JlcmVnKHNpaCwgY29yZWlkeCwgcmVnb2ZmLCBtYXNrLCB2YWwpOwotCWVsc2UgewotI2lmZGVmIEJDTVNESU8KLQkJcmV0dXJuIHNiX2NvcmVyZWcoc2loLCBjb3JlaWR4LCByZWdvZmYsIG1hc2ssIHZhbCk7Ci0jZWxzZQotCQlBU1NFUlQoMCk7Ci0JCXJldHVybiAwOwotI2VuZGlmCi0JfQotfQotCi12b2lkIHNpX2NvcmVfZGlzYWJsZShzaV90ICpzaWgsIHUzMiBiaXRzKQotewotCi0JaWYgKHNpaC0+c29jaXR5cGUgPT0gU09DSV9BSSkKLQkJYWlfY29yZV9kaXNhYmxlKHNpaCwgYml0cyk7Ci0jaWZkZWYgQkNNU0RJTwotCWVsc2UKLQkJc2JfY29yZV9kaXNhYmxlKHNpaCwgYml0cyk7Ci0jZW5kaWYKLX0KLQotdm9pZCBzaV9jb3JlX3Jlc2V0KHNpX3QgKnNpaCwgdTMyIGJpdHMsIHUzMiByZXNldGJpdHMpCi17Ci0JaWYgKHNpaC0+c29jaXR5cGUgPT0gU09DSV9BSSkKLQkJYWlfY29yZV9yZXNldChzaWgsIGJpdHMsIHJlc2V0Yml0cyk7Ci0jaWZkZWYgQkNNU0RJTwotCWVsc2UKLQkJc2JfY29yZV9yZXNldChzaWgsIGJpdHMsIHJlc2V0Yml0cyk7Ci0jZW5kaWYKLX0KLQotdTMyIHNpX2FscF9jbG9jayhzaV90ICpzaWgpCi17Ci0JaWYgKFBNVUNUTF9FTkFCKHNpaCkpCi0JCXJldHVybiBzaV9wbXVfYWxwX2Nsb2NrKHNpaCk7Ci0KLQlyZXR1cm4gQUxQX0NMT0NLOwotfQotCi11MzIgc2lfaWxwX2Nsb2NrKHNpX3QgKnNpaCkKLXsKLQlpZiAoUE1VQ1RMX0VOQUIoc2loKSkKLQkJcmV0dXJuIHNpX3BtdV9pbHBfY2xvY2soc2loKTsKLQotCXJldHVybiBJTFBfQ0xPQ0s7Ci19Ci0KLS8qIHNldCBjaGlwIHdhdGNoZG9nIHJlc2V0IHRpbWVyIHRvIGZpcmUgaW4gJ3RpY2tzJyAqLwotI2lmZGVmIEJSQ01fRlVMTE1BQwotdm9pZAotc2lfd2F0Y2hkb2coc2lfdCAqc2loLCB1aW50IHRpY2tzKQotewotCWlmIChQTVVDVExfRU5BQihzaWgpKSB7Ci0KLQkJaWYgKChzaWgtPmNoaXAgPT0gQkNNNDMxOV9DSElQX0lEKSAmJiAoc2loLT5jaGlwcmV2ID09IDApICYmCi0JCQkodGlja3MgIT0gMCkpIHsKLQkJCXNpX2NvcmVyZWcoc2loLCBTSV9DQ19JRFgsIG9mZnNldG9mKGNoaXBjcmVnc190LAotCQkJY2xrX2N0bF9zdCksIH4wLCAweDIpOwotCQkJc2lfc2V0Y29yZShzaWgsIFVTQjIwRF9DT1JFX0lELCAwKTsKLQkJCXNpX2NvcmVfZGlzYWJsZShzaWgsIDEpOwotCQkJc2lfc2V0Y29yZShzaWgsIENDX0NPUkVfSUQsIDApOwotCQl9Ci0KLQkJaWYgKHRpY2tzID09IDEpCi0JCQl0aWNrcyA9IDI7Ci0JCXNpX2NvcmVyZWcoc2loLCBTSV9DQ19JRFgsIG9mZnNldG9mKGNoaXBjcmVnc190LCBwbXV3YXRjaGRvZyksCi0JCQl+MCwgdGlja3MpOwotCX0gZWxzZSB7Ci0JCS8qIGluc3RhbnQgTk1JICovCi0JCXNpX2NvcmVyZWcoc2loLCBTSV9DQ19JRFgsIG9mZnNldG9mKGNoaXBjcmVnc190LCB3YXRjaGRvZyksCi0JCQl+MCwgdGlja3MpOwotCX0KLX0KLSNlbHNlCi12b2lkIHNpX3dhdGNoZG9nKHNpX3QgKnNpaCwgdWludCB0aWNrcykKLXsKLQl1aW50IG5iLCBtYXh0OwotCi0JaWYgKFBNVUNUTF9FTkFCKHNpaCkpIHsKLQotCQlpZiAoKHNpaC0+Y2hpcCA9PSBCQ000MzE5X0NISVBfSUQpICYmCi0JCSAgICAoc2loLT5jaGlwcmV2ID09IDApICYmICh0aWNrcyAhPSAwKSkgewotCQkJc2lfY29yZXJlZyhzaWgsIFNJX0NDX0lEWCwKLQkJCQkgICBvZmZzZXRvZihjaGlwY3JlZ3NfdCwgY2xrX2N0bF9zdCksIH4wLCAweDIpOwotCQkJc2lfc2V0Y29yZShzaWgsIFVTQjIwRF9DT1JFX0lELCAwKTsKLQkJCXNpX2NvcmVfZGlzYWJsZShzaWgsIDEpOwotCQkJc2lfc2V0Y29yZShzaWgsIENDX0NPUkVfSUQsIDApOwotCQl9Ci0KLQkJbmIgPSAoc2loLT5jY3JldiA8IDI2KSA/IDE2IDogKChzaWgtPmNjcmV2ID49IDM3KSA/IDMyIDogMjQpOwotCQkvKiBUaGUgbWlwcyBjb21waWxlciB1c2VzIHRoZSBzbGx2IGluc3RydWN0aW9uLAotCQkgKiBzbyB3ZSBzcGVjaWFsbHkgaGFuZGxlIHRoZSAzMi1iaXQgY2FzZS4KLQkJICovCi0JCWlmIChuYiA9PSAzMikKLQkJCW1heHQgPSAweGZmZmZmZmZmOwotCQllbHNlCi0JCQltYXh0ID0gKCgxIDw8IG5iKSAtIDEpOwotCi0JCWlmICh0aWNrcyA9PSAxKQotCQkJdGlja3MgPSAyOwotCQllbHNlIGlmICh0aWNrcyA+IG1heHQpCi0JCQl0aWNrcyA9IG1heHQ7Ci0KLQkJc2lfY29yZXJlZyhzaWgsIFNJX0NDX0lEWCwgb2Zmc2V0b2YoY2hpcGNyZWdzX3QsIHBtdXdhdGNoZG9nKSwKLQkJCSAgIH4wLCB0aWNrcyk7Ci0JfSBlbHNlIHsKLQkJLyogbWFrZSBzdXJlIHdlIGNvbWUgdXAgaW4gZmFzdCBjbG9jayBtb2RlOyBvciBpZiBjbGVhcmluZywgY2xlYXIgY2xvY2sgKi8KLQkJc2lfY2xrY3RsX2NjKHNpaCwgdGlja3MgPyBDTEtfRkFTVCA6IENMS19EWU5BTUlDKTsKLQkJbWF4dCA9ICgxIDw8IDI4KSAtIDE7Ci0JCWlmICh0aWNrcyA+IG1heHQpCi0JCQl0aWNrcyA9IG1heHQ7Ci0KLQkJc2lfY29yZXJlZyhzaWgsIFNJX0NDX0lEWCwgb2Zmc2V0b2YoY2hpcGNyZWdzX3QsIHdhdGNoZG9nKSwgfjAsCi0JCQkgICB0aWNrcyk7Ci0JfQotfQotI2VuZGlmCi0KLS8qIHJldHVybiB0aGUgc2xvdyBjbG9jayBzb3VyY2UgLSBMUE8sIFhUQUwsIG9yIFBDSSAqLwotc3RhdGljIHVpbnQgc2lfc2xvd2Nsa19zcmMoc2lfaW5mb190ICpzaWkpCi17Ci0JY2hpcGNyZWdzX3QgKmNjOwotCXUzMiB2YWw7Ci0KLQlBU1NFUlQoU0lfRkFTVChzaWkpIHx8IHNpX2NvcmVpZCgmc2lpLT5wdWIpID09IENDX0NPUkVfSUQpOwotCi0JaWYgKHNpaS0+cHViLmNjcmV2IDwgNikgewotCQlpZiAoc2lpLT5wdWIuYnVzdHlwZSA9PSBQQ0lfQlVTKSB7Ci0JCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoc2lpLT5wYnVzLCBQQ0lfR1BJT19PVVQsCi0JCQkJCSAgICAgICZ2YWwpOwotCQkJaWYgKHZhbCAmIFBDSV9DRkdfR1BJT19TQ1MpCi0JCQkJcmV0dXJuIFNDQ19TU19QQ0k7Ci0JCX0KLQkJcmV0dXJuIFNDQ19TU19YVEFMOwotCX0gZWxzZSBpZiAoc2lpLT5wdWIuY2NyZXYgPCAxMCkgewotCQljYyA9IChjaGlwY3JlZ3NfdCAqKSBzaV9zZXRjb3JlaWR4KCZzaWktPnB1Yiwgc2lpLT5jdXJpZHgpOwotCQlyZXR1cm4gUl9SRUcoJmNjLT5zbG93X2Nsa19jdGwpICYgU0NDX1NTX01BU0s7Ci0JfSBlbHNlCQkJLyogSW5zdGEtY2xvY2sgKi8KLQkJcmV0dXJuIFNDQ19TU19YVEFMOwotfQotCi0vKiByZXR1cm4gdGhlIElMUCAoc2xvd2Nsb2NrKSBtaW4gb3IgbWF4IGZyZXF1ZW5jeSAqLwotc3RhdGljIHVpbnQgc2lfc2xvd2Nsa19mcmVxKHNpX2luZm9fdCAqc2lpLCBib29sIG1heF9mcmVxLCBjaGlwY3JlZ3NfdCAqY2MpCi17Ci0JdTMyIHNsb3djbGs7Ci0JdWludCBkaXY7Ci0KLQlBU1NFUlQoU0lfRkFTVChzaWkpIHx8IHNpX2NvcmVpZCgmc2lpLT5wdWIpID09IENDX0NPUkVfSUQpOwotCi0JLyogc2hvdWxkbid0IGJlIGhlcmUgdW5sZXNzIHdlJ3ZlIGVzdGFibGlzaGVkIHRoZSBjaGlwIGhhcyBkeW5hbWljIGNsayBjb250cm9sICovCi0JQVNTRVJUKFJfUkVHKCZjYy0+Y2FwYWJpbGl0aWVzKSAmIENDX0NBUF9QV1JfQ1RMKTsKLQotCXNsb3djbGsgPSBzaV9zbG93Y2xrX3NyYyhzaWkpOwotCWlmIChzaWktPnB1Yi5jY3JldiA8IDYpIHsKLQkJaWYgKHNsb3djbGsgPT0gU0NDX1NTX1BDSSkKLQkJCXJldHVybiBtYXhfZnJlcSA/IChQQ0lNQVhGUkVRIC8gNjQpCi0JCQkJOiAoUENJTUlORlJFUSAvIDY0KTsKLQkJZWxzZQotCQkJcmV0dXJuIG1heF9mcmVxID8gKFhUQUxNQVhGUkVRIC8gMzIpCi0JCQkJOiAoWFRBTE1JTkZSRVEgLyAzMik7Ci0JfSBlbHNlIGlmIChzaWktPnB1Yi5jY3JldiA8IDEwKSB7Ci0JCWRpdiA9IDQgKgotCQkgICAgKCgoUl9SRUcoJmNjLT5zbG93X2Nsa19jdGwpICYgU0NDX0NEX01BU0spID4+Ci0JCSAgICAgIFNDQ19DRF9TSElGVCkgKyAxKTsKLQkJaWYgKHNsb3djbGsgPT0gU0NDX1NTX0xQTykKLQkJCXJldHVybiBtYXhfZnJlcSA/IExQT01BWEZSRVEgOiBMUE9NSU5GUkVROwotCQllbHNlIGlmIChzbG93Y2xrID09IFNDQ19TU19YVEFMKQotCQkJcmV0dXJuIG1heF9mcmVxID8gKFhUQUxNQVhGUkVRIC8gZGl2KQotCQkJCTogKFhUQUxNSU5GUkVRIC8gZGl2KTsKLQkJZWxzZSBpZiAoc2xvd2NsayA9PSBTQ0NfU1NfUENJKQotCQkJcmV0dXJuIG1heF9mcmVxID8gKFBDSU1BWEZSRVEgLyBkaXYpCi0JCQkJOiAoUENJTUlORlJFUSAvIGRpdik7Ci0JCWVsc2UKLQkJCUFTU0VSVCgwKTsKLQl9IGVsc2UgewotCQkvKiBDaGlwYyByZXYgMTAgaXMgSW5zdGFDbG9jayAqLwotCQlkaXYgPSBSX1JFRygmY2MtPnN5c3RlbV9jbGtfY3RsKSA+PiBTWUNDX0NEX1NISUZUOwotCQlkaXYgPSA0ICogKGRpdiArIDEpOwotCQlyZXR1cm4gbWF4X2ZyZXEgPyBYVEFMTUFYRlJFUSA6IChYVEFMTUlORlJFUSAvIGRpdik7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzaV9jbGtjdGxfc2V0ZGVsYXkoc2lfaW5mb190ICpzaWksIHZvaWQgKmNoaXBjcmVncykKLXsKLQljaGlwY3JlZ3NfdCAqY2MgPSAoY2hpcGNyZWdzX3QgKikgY2hpcGNyZWdzOwotCXVpbnQgc2xvd21heGZyZXEsIHBsbF9kZWxheSwgc2xvd2NsazsKLQl1aW50IHBsbF9vbl9kZWxheSwgZnJlZl9zZWxfZGVsYXk7Ci0KLQlwbGxfZGVsYXkgPSBQTExfREVMQVk7Ci0KLQkvKiBJZiB0aGUgc2xvdyBjbG9jayBpcyBub3Qgc291cmNlZCBieSB0aGUgeHRhbCB0aGVuIGFkZCB0aGUgeHRhbF9vbl9kZWxheQotCSAqIHNpbmNlIHRoZSB4dGFsIHdpbGwgYWxzbyBiZSBwb3dlcmVkIGRvd24gYnkgZHluYW1pYyBjbGsgY29udHJvbCBsb2dpYy4KLQkgKi8KLQotCXNsb3djbGsgPSBzaV9zbG93Y2xrX3NyYyhzaWkpOwotCWlmIChzbG93Y2xrICE9IFNDQ19TU19YVEFMKQotCQlwbGxfZGVsYXkgKz0gWFRBTF9PTl9ERUxBWTsKLQotCS8qIFN0YXJ0aW5nIHdpdGggNDMxOCBpdCBpcyBJTFAgdGhhdCBpcyB1c2VkIGZvciB0aGUgZGVsYXlzICovCi0Jc2xvd21heGZyZXEgPQotCSAgICBzaV9zbG93Y2xrX2ZyZXEoc2lpLCAoc2lpLT5wdWIuY2NyZXYgPj0gMTApID8gZmFsc2UgOiB0cnVlLCBjYyk7Ci0KLQlwbGxfb25fZGVsYXkgPSAoKHNsb3dtYXhmcmVxICogcGxsX2RlbGF5KSArIDk5OTk5OSkgLyAxMDAwMDAwOwotCWZyZWZfc2VsX2RlbGF5ID0gKChzbG93bWF4ZnJlcSAqIEZSRUZfREVMQVkpICsgOTk5OTk5KSAvIDEwMDAwMDA7Ci0KLQlXX1JFRygmY2MtPnBsbF9vbl9kZWxheSwgcGxsX29uX2RlbGF5KTsKLQlXX1JFRygmY2MtPmZyZWZfc2VsX2RlbGF5LCBmcmVmX3NlbF9kZWxheSk7Ci19Ci0KLS8qIGluaXRpYWxpemUgcG93ZXIgY29udHJvbCBkZWxheSByZWdpc3RlcnMgKi8KLXZvaWQgc2lfY2xrY3RsX2luaXQoc2lfdCAqc2loKQotewotCXNpX2luZm9fdCAqc2lpOwotCXVpbnQgb3JpZ2lkeCA9IDA7Ci0JY2hpcGNyZWdzX3QgKmNjOwotCWJvb2wgZmFzdDsKLQotCWlmICghQ0NDVExfRU5BQihzaWgpKQotCQlyZXR1cm47Ci0KLQlzaWkgPSBTSV9JTkZPKHNpaCk7Ci0JZmFzdCA9IFNJX0ZBU1Qoc2lpKTsKLQlpZiAoIWZhc3QpIHsKLQkJb3JpZ2lkeCA9IHNpaS0+Y3VyaWR4OwotCQljYyA9IChjaGlwY3JlZ3NfdCAqKSBzaV9zZXRjb3JlKHNpaCwgQ0NfQ09SRV9JRCwgMCk7Ci0JCWlmIChjYyA9PSBOVUxMKQotCQkJcmV0dXJuOwotCX0gZWxzZSB7Ci0JCWNjID0gKGNoaXBjcmVnc190ICopIENDUkVHU19GQVNUKHNpaSk7Ci0JCWlmIChjYyA9PSBOVUxMKQotCQkJcmV0dXJuOwotCX0KLQlBU1NFUlQoY2MgIT0gTlVMTCk7Ci0KLQkvKiBzZXQgYWxsIEluc3RhY2xrIGNoaXAgSUxQIHRvIDEgTUh6ICovCi0JaWYgKHNpaC0+Y2NyZXYgPj0gMTApCi0JCVNFVF9SRUcoJmNjLT5zeXN0ZW1fY2xrX2N0bCwgU1lDQ19DRF9NQVNLLAotCQkJKElMUF9ESVZfMU1IWiA8PCBTWUNDX0NEX1NISUZUKSk7Ci0KLQlzaV9jbGtjdGxfc2V0ZGVsYXkoc2lpLCAodm9pZCAqKWNjKTsKLQotCWlmICghZmFzdCkKLQkJc2lfc2V0Y29yZWlkeChzaWgsIG9yaWdpZHgpOwotfQotCi0vKiByZXR1cm4gdGhlIHZhbHVlIHN1aXRhYmxlIGZvciB3cml0aW5nIHRvIHRoZSBkb3QxMSBjb3JlIEZBU1RfUFdSVVBfREVMQVkgcmVnaXN0ZXIgKi8KLXUxNiBzaV9jbGtjdGxfZmFzdF9wd3J1cF9kZWxheShzaV90ICpzaWgpCi17Ci0Jc2lfaW5mb190ICpzaWk7Ci0JdWludCBvcmlnaWR4ID0gMDsKLQljaGlwY3JlZ3NfdCAqY2M7Ci0JdWludCBzbG93bWluZnJlcTsKLQl1MTYgZnBkZWxheTsKLQl1aW50IGludHJfdmFsID0gMDsKLQlib29sIGZhc3Q7Ci0KLQlzaWkgPSBTSV9JTkZPKHNpaCk7Ci0JaWYgKFBNVUNUTF9FTkFCKHNpaCkpIHsKLQkJSU5UUl9PRkYoc2lpLCBpbnRyX3ZhbCk7Ci0JCWZwZGVsYXkgPSBzaV9wbXVfZmFzdF9wd3J1cF9kZWxheShzaWgpOwotCQlJTlRSX1JFU1RPUkUoc2lpLCBpbnRyX3ZhbCk7Ci0JCXJldHVybiBmcGRlbGF5OwotCX0KLQotCWlmICghQ0NDVExfRU5BQihzaWgpKQotCQlyZXR1cm4gMDsKLQotCWZhc3QgPSBTSV9GQVNUKHNpaSk7Ci0JZnBkZWxheSA9IDA7Ci0JaWYgKCFmYXN0KSB7Ci0JCW9yaWdpZHggPSBzaWktPmN1cmlkeDsKLQkJSU5UUl9PRkYoc2lpLCBpbnRyX3ZhbCk7Ci0JCWNjID0gKGNoaXBjcmVnc190ICopIHNpX3NldGNvcmUoc2loLCBDQ19DT1JFX0lELCAwKTsKLQkJaWYgKGNjID09IE5VTEwpCi0JCQlnb3RvIGRvbmU7Ci0JfSBlbHNlIHsKLQkJY2MgPSAoY2hpcGNyZWdzX3QgKikgQ0NSRUdTX0ZBU1Qoc2lpKTsKLQkJaWYgKGNjID09IE5VTEwpCi0JCQlnb3RvIGRvbmU7Ci0JfQotCUFTU0VSVChjYyAhPSBOVUxMKTsKLQotCXNsb3dtaW5mcmVxID0gc2lfc2xvd2Nsa19mcmVxKHNpaSwgZmFsc2UsIGNjKTsKLQlmcGRlbGF5ID0gKCgoUl9SRUcoJmNjLT5wbGxfb25fZGVsYXkpICsgMikgKiAxMDAwMDAwKSArCi0JCSAgIChzbG93bWluZnJlcSAtIDEpKSAvIHNsb3dtaW5mcmVxOwotCi0gZG9uZToKLQlpZiAoIWZhc3QpIHsKLQkJc2lfc2V0Y29yZWlkeChzaWgsIG9yaWdpZHgpOwotCQlJTlRSX1JFU1RPUkUoc2lpLCBpbnRyX3ZhbCk7Ci0JfQotCXJldHVybiBmcGRlbGF5OwotfQotCi0vKiB0dXJuIHByaW1hcnkgeHRhbCBhbmQvb3IgcGxsIG9mZi9vbiAqLwotaW50IHNpX2Nsa2N0bF94dGFsKHNpX3QgKnNpaCwgdWludCB3aGF0LCBib29sIG9uKQotewotCXNpX2luZm9fdCAqc2lpOwotCXUzMiBpbiwgb3V0LCBvdXRlbjsKLQotCXNpaSA9IFNJX0lORk8oc2loKTsKLQotCXN3aXRjaCAoc2loLT5idXN0eXBlKSB7Ci0KLSNpZmRlZiBCQ01TRElPCi0JY2FzZSBTRElPX0JVUzoKLQkJcmV0dXJuIC0xOwotI2VuZGlmCQkJCS8qIEJDTVNESU8gKi8KLQotCWNhc2UgUENJX0JVUzoKLQkJLyogcGNpZSBjb3JlIGRvZXNuJ3QgaGF2ZSBhbnkgbWFwcGluZyB0byBjb250cm9sIHRoZSB4dGFsIHB1ICovCi0JCWlmIChQQ0lFKHNpaSkpCi0JCQlyZXR1cm4gLTE7Ci0KLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHNpaS0+cGJ1cywgUENJX0dQSU9fSU4sICZpbik7Ci0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChzaWktPnBidXMsIFBDSV9HUElPX09VVCwgJm91dCk7Ci0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChzaWktPnBidXMsIFBDSV9HUElPX09VVEVOLCAmb3V0ZW4pOwotCi0JCS8qCi0JCSAqIEF2b2lkIGdsaXRjaGluZyB0aGUgY2xvY2sgaWYgR1BSUyBpcyBhbHJlYWR5IHVzaW5nIGl0LgotCQkgKiBXZSBjYW4ndCBhY3R1YWxseSByZWFkIHRoZSBzdGF0ZSBvZiB0aGUgUExMUEQgc28gd2UgaW5mZXIgaXQKLQkJICogYnkgdGhlIHZhbHVlIG9mIFhUQUxfUFUgd2hpY2ggKmlzKiByZWFkYWJsZSB2aWEgZ3Bpb2luLgotCQkgKi8KLQkJaWYgKG9uICYmIChpbiAmIFBDSV9DRkdfR1BJT19YVEFMKSkKLQkJCXJldHVybiAwOwotCi0JCWlmICh3aGF0ICYgWFRBTCkKLQkJCW91dGVuIHw9IFBDSV9DRkdfR1BJT19YVEFMOwotCQlpZiAod2hhdCAmIFBMTCkKLQkJCW91dGVuIHw9IFBDSV9DRkdfR1BJT19QTEw7Ci0KLQkJaWYgKG9uKSB7Ci0JCQkvKiB0dXJuIHByaW1hcnkgeHRhbCBvbiAqLwotCQkJaWYgKHdoYXQgJiBYVEFMKSB7Ci0JCQkJb3V0IHw9IFBDSV9DRkdfR1BJT19YVEFMOwotCQkJCWlmICh3aGF0ICYgUExMKQotCQkJCQlvdXQgfD0gUENJX0NGR19HUElPX1BMTDsKLQkJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHNpaS0+cGJ1cywKLQkJCQkJCSAgICAgICBQQ0lfR1BJT19PVVQsIG91dCk7Ci0JCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChzaWktPnBidXMsCi0JCQkJCQkgICAgICAgUENJX0dQSU9fT1VURU4sIG91dGVuKTsKLQkJCQl1ZGVsYXkoWFRBTF9PTl9ERUxBWSk7Ci0JCQl9Ci0KLQkJCS8qIHR1cm4gcGxsIG9uICovCi0JCQlpZiAod2hhdCAmIFBMTCkgewotCQkJCW91dCAmPSB+UENJX0NGR19HUElPX1BMTDsKLQkJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHNpaS0+cGJ1cywKLQkJCQkJCSAgICAgICBQQ0lfR1BJT19PVVQsIG91dCk7Ci0JCQkJbWRlbGF5KDIpOwotCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKHdoYXQgJiBYVEFMKQotCQkJCW91dCAmPSB+UENJX0NGR19HUElPX1hUQUw7Ci0JCQlpZiAod2hhdCAmIFBMTCkKLQkJCQlvdXQgfD0gUENJX0NGR19HUElPX1BMTDsKLQkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoc2lpLT5wYnVzLAotCQkJCQkgICAgICAgUENJX0dQSU9fT1VULCBvdXQpOwotCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChzaWktPnBidXMsCi0JCQkJCSAgICAgICBQQ0lfR1BJT19PVVRFTiwgb3V0ZW4pOwotCQl9Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiAgY2xvY2sgY29udHJvbCBwb2xpY3kgZnVuY3Rpb24gdGhyb3VnaCBjaGlwY29tbW9uCi0gKgotICogICAgc2V0IGR5bmFtaWMgY2xrIGNvbnRyb2wgbW9kZSAoZm9yY2VzbG93LCBmb3JjZWZhc3QsIGR5bmFtaWMpCi0gKiAgICByZXR1cm5zIHRydWUgaWYgd2UgYXJlIGZvcmNpbmcgZmFzdCBjbG9jawotICogICAgdGhpcyBpcyBhIHdyYXBwZXIgb3ZlciB0aGUgbmV4dCBpbnRlcm5hbCBmdW5jdGlvbgotICogICAgICB0byBhbGxvdyBmbGV4aWJsZSBwb2xpY3kgc2V0dGluZ3MgZm9yIG91dHNpZGUgY2FsbGVyCi0gKi8KLWJvb2wgc2lfY2xrY3RsX2NjKHNpX3QgKnNpaCwgdWludCBtb2RlKQotewotCXNpX2luZm9fdCAqc2lpOwotCi0Jc2lpID0gU0lfSU5GTyhzaWgpOwotCi0JLyogY2hpcGNvbW1vbiBjb3JlcyBwcmlvciB0byByZXY2IGRvbid0IHN1cHBvcnQgZHluYW1pYyBjbG9jayBjb250cm9sICovCi0JaWYgKHNpaC0+Y2NyZXYgPCA2KQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAoUENJX0ZPUkNFSFQoc2lpKSkKLQkJcmV0dXJuIG1vZGUgPT0gQ0xLX0ZBU1Q7Ci0KLQlyZXR1cm4gX3NpX2Nsa2N0bF9jYyhzaWksIG1vZGUpOwotfQotCi0vKiBjbGsgY29udHJvbCBtZWNoYW5pc20gdGhyb3VnaCBjaGlwY29tbW9uLCBubyBwb2xpY3kgY2hlY2tpbmcgKi8KLXN0YXRpYyBib29sIF9zaV9jbGtjdGxfY2Moc2lfaW5mb190ICpzaWksIHVpbnQgbW9kZSkKLXsKLQl1aW50IG9yaWdpZHggPSAwOwotCWNoaXBjcmVnc190ICpjYzsKLQl1MzIgc2NjOwotCXVpbnQgaW50cl92YWwgPSAwOwotCWJvb2wgZmFzdCA9IFNJX0ZBU1Qoc2lpKTsKLQotCS8qIGNoaXBjb21tb24gY29yZXMgcHJpb3IgdG8gcmV2NiBkb24ndCBzdXBwb3J0IGR5bmFtaWMgY2xvY2sgY29udHJvbCAqLwotCWlmIChzaWktPnB1Yi5jY3JldiA8IDYpCi0JCXJldHVybiBmYWxzZTsKLQotCS8qIENoaXBzIHdpdGggY2NyZXYgMTAgYXJlIEVPTCBhbmQgdGhleSBkb24ndCBoYXZlIFNZQ0NfSFIgd2hpY2ggd2UgdXNlIGJlbG93ICovCi0JQVNTRVJUKHNpaS0+cHViLmNjcmV2ICE9IDEwKTsKLQotCWlmICghZmFzdCkgewotCQlJTlRSX09GRihzaWksIGludHJfdmFsKTsKLQkJb3JpZ2lkeCA9IHNpaS0+Y3VyaWR4OwotCi0JCWlmICgoc2lpLT5wdWIuYnVzdHlwZSA9PSBTSV9CVVMpICYmCi0JCSAgICBzaV9zZXRjb3JlKCZzaWktPnB1YiwgTUlQUzMzX0NPUkVfSUQsIDApICYmCi0JCSAgICAoc2lfY29yZXJldigmc2lpLT5wdWIpIDw9IDcpICYmIChzaWktPnB1Yi5jY3JldiA+PSAxMCkpCi0JCQlnb3RvIGRvbmU7Ci0KLQkJY2MgPSAoY2hpcGNyZWdzX3QgKikgc2lfc2V0Y29yZSgmc2lpLT5wdWIsIENDX0NPUkVfSUQsIDApOwotCX0gZWxzZSB7Ci0JCWNjID0gKGNoaXBjcmVnc190ICopIENDUkVHU19GQVNUKHNpaSk7Ci0JCWlmIChjYyA9PSBOVUxMKQotCQkJZ290byBkb25lOwotCX0KLQlBU1NFUlQoY2MgIT0gTlVMTCk7Ci0KLQlpZiAoIUNDQ1RMX0VOQUIoJnNpaS0+cHViKSAmJiAoc2lpLT5wdWIuY2NyZXYgPCAyMCkpCi0JCWdvdG8gZG9uZTsKLQotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgQ0xLX0ZBU1Q6CQkvKiBGT1JDRUhULCBmYXN0IChwbGwpIGNsb2NrICovCi0JCWlmIChzaWktPnB1Yi5jY3JldiA8IDEwKSB7Ci0JCQkvKiBkb24ndCBmb3JnZXQgdG8gZm9yY2UgeHRhbCBiYWNrIG9uIGJlZm9yZSB3ZSBjbGVhciBTQ0NfRFlOX1hUQUwuLiAqLwotCQkJc2lfY2xrY3RsX3h0YWwoJnNpaS0+cHViLCBYVEFMLCBPTik7Ci0JCQlTRVRfUkVHKCZjYy0+c2xvd19jbGtfY3RsLAotCQkJCShTQ0NfWEMgfCBTQ0NfRlMgfCBTQ0NfSVApLCBTQ0NfSVApOwotCQl9IGVsc2UgaWYgKHNpaS0+cHViLmNjcmV2IDwgMjApIHsKLQkJCU9SX1JFRygmY2MtPnN5c3RlbV9jbGtfY3RsLCBTWUNDX0hSKTsKLQkJfSBlbHNlIHsKLQkJCU9SX1JFRygmY2MtPmNsa19jdGxfc3QsIENDU19GT1JDRUhUKTsKLQkJfQotCi0JCS8qIHdhaXQgZm9yIHRoZSBQTEwgKi8KLQkJaWYgKFBNVUNUTF9FTkFCKCZzaWktPnB1YikpIHsKLQkJCXUzMiBodGF2YWlsID0gQ0NTX0hUQVZBSUw7Ci0JCQlTUElOV0FJVCgoKFJfUkVHKCZjYy0+Y2xrX2N0bF9zdCkgJiBodGF2YWlsKQotCQkJCSAgPT0gMCksIFBNVV9NQVhfVFJBTlNJVElPTl9ETFkpOwotCQkJQVNTRVJUKFJfUkVHKCZjYy0+Y2xrX2N0bF9zdCkgJiBodGF2YWlsKTsKLQkJfSBlbHNlIHsKLQkJCXVkZWxheShQTExfREVMQVkpOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBDTEtfRFlOQU1JQzoJLyogZW5hYmxlIGR5bmFtaWMgY2xvY2sgY29udHJvbCAqLwotCQlpZiAoc2lpLT5wdWIuY2NyZXYgPCAxMCkgewotCQkJc2NjID0gUl9SRUcoJmNjLT5zbG93X2Nsa19jdGwpOwotCQkJc2NjICY9IH4oU0NDX0ZTIHwgU0NDX0lQIHwgU0NDX1hDKTsKLQkJCWlmICgoc2NjICYgU0NDX1NTX01BU0spICE9IFNDQ19TU19YVEFMKQotCQkJCXNjYyB8PSBTQ0NfWEM7Ci0JCQlXX1JFRygmY2MtPnNsb3dfY2xrX2N0bCwgc2NjKTsKLQotCQkJLyogZm9yIGR5bmFtaWMgY29udHJvbCwgd2UgaGF2ZSB0byByZWxlYXNlIG91ciB4dGFsX3B1ICJmb3JjZSBvbiIgKi8KLQkJCWlmIChzY2MgJiBTQ0NfWEMpCi0JCQkJc2lfY2xrY3RsX3h0YWwoJnNpaS0+cHViLCBYVEFMLCBPRkYpOwotCQl9IGVsc2UgaWYgKHNpaS0+cHViLmNjcmV2IDwgMjApIHsKLQkJCS8qIEluc3RhY2xvY2sgKi8KLQkJCUFORF9SRUcoJmNjLT5zeXN0ZW1fY2xrX2N0bCwgflNZQ0NfSFIpOwotCQl9IGVsc2UgewotCQkJQU5EX1JFRygmY2MtPmNsa19jdGxfc3QsIH5DQ1NfRk9SQ0VIVCk7Ci0JCX0KLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlBU1NFUlQoMCk7Ci0JfQotCi0gZG9uZToKLQlpZiAoIWZhc3QpIHsKLQkJc2lfc2V0Y29yZWlkeCgmc2lpLT5wdWIsIG9yaWdpZHgpOwotCQlJTlRSX1JFU1RPUkUoc2lpLCBpbnRyX3ZhbCk7Ci0JfQotCXJldHVybiBtb2RlID09IENMS19GQVNUOwotfQotCi0vKiBCdWlsZCBkZXZpY2UgcGF0aC4gU3VwcG9ydCBTSSwgUENJLCBhbmQgSlRBRyBmb3Igbm93LiAqLwotaW50IHNpX2RldnBhdGgoc2lfdCAqc2loLCBjaGFyICpwYXRoLCBpbnQgc2l6ZSkKLXsKLQlpbnQgc2xlbjsKLQotCUFTU0VSVChwYXRoICE9IE5VTEwpOwotCUFTU0VSVChzaXplID49IFNJX0RFVlBBVEhfQlVGU1opOwotCi0JaWYgKCFwYXRoIHx8IHNpemUgPD0gMCkKLQkJcmV0dXJuIC0xOwotCi0Jc3dpdGNoIChzaWgtPmJ1c3R5cGUpIHsKLQljYXNlIFNJX0JVUzoKLQljYXNlIEpUQUdfQlVTOgotCQlzbGVuID0gc25wcmludGYocGF0aCwgKHNpemVfdCkgc2l6ZSwgInNiLyV1LyIsIHNpX2NvcmVpZHgoc2loKSk7Ci0JCWJyZWFrOwotCWNhc2UgUENJX0JVUzoKLQkJQVNTRVJUKChTSV9JTkZPKHNpaCkpLT5wYnVzICE9IE5VTEwpOwotCQlzbGVuID0gc25wcmludGYocGF0aCwgKHNpemVfdCkgc2l6ZSwgInBjaS8ldS8ldS8iLAotCQkJKChzdHJ1Y3QgcGNpX2RldiAqKSgoU0lfSU5GTyhzaWgpKS0+cGJ1cykpLT5idXMtPm51bWJlciwKLQkJCVBDSV9TTE9UKAotCQkJICAgICgoc3RydWN0IHBjaV9kZXYgKikoKFNJX0lORk8oc2loKSktPnBidXMpKS0+ZGV2Zm4pKTsKLQkJYnJlYWs7Ci0KLSNpZmRlZiBCQ01TRElPCi0JY2FzZSBTRElPX0JVUzoKLQkJU0lfRVJST1IoKCJzaV9kZXZwYXRoOiBkZXZpY2UgMCBhc3N1bWVkXG4iKSk7Ci0JCXNsZW4gPSBzbnByaW50ZihwYXRoLCAoc2l6ZV90KSBzaXplLCAic2QvJXUvIiwgc2lfY29yZWlkeChzaWgpKTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQlzbGVuID0gLTE7Ci0JCUFTU0VSVCgwKTsKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKHNsZW4gPCAwIHx8IHNsZW4gPj0gc2l6ZSkgewotCQlwYXRoWzBdID0gJ1wwJzsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKiBHZXQgYSB2YXJpYWJsZSwgYnV0IG9ubHkgaWYgaXQgaGFzIGEgZGV2cGF0aCBwcmVmaXggKi8KLWNoYXIgKnNpX2dldGRldnBhdGh2YXIoc2lfdCAqc2loLCBjb25zdCBjaGFyICpuYW1lKQotewotCWNoYXIgdmFybmFtZVtTSV9ERVZQQVRIX0JVRlNaICsgMzJdOwotCi0Jc2lfZGV2cGF0aHZhcihzaWgsIHZhcm5hbWUsIHNpemVvZih2YXJuYW1lKSwgbmFtZSk7Ci0KLQlyZXR1cm4gZ2V0dmFyKE5VTEwsIHZhcm5hbWUpOwotfQotCi0vKiBHZXQgYSB2YXJpYWJsZSwgYnV0IG9ubHkgaWYgaXQgaGFzIGEgZGV2cGF0aCBwcmVmaXggKi8KLWludCBzaV9nZXRkZXZwYXRoaW50dmFyKHNpX3QgKnNpaCwgY29uc3QgY2hhciAqbmFtZSkKLXsKLSNpZiBkZWZpbmVkKEJDTUJVU1RZUEUpICYmIChCQ01CVVNUWVBFID09IFNJX0JVUykKLQlyZXR1cm4gZ2V0aW50dmFyKE5VTEwsIG5hbWUpOwotI2Vsc2UKLQljaGFyIHZhcm5hbWVbU0lfREVWUEFUSF9CVUZTWiArIDMyXTsKLQotCXNpX2RldnBhdGh2YXIoc2loLCB2YXJuYW1lLCBzaXplb2YodmFybmFtZSksIG5hbWUpOwotCi0JcmV0dXJuIGdldGludHZhcihOVUxMLCB2YXJuYW1lKTsKLSNlbmRpZgotfQotCi1jaGFyICpzaV9nZXRudnJhbWZsdmFyKHNpX3QgKnNpaCwgY29uc3QgY2hhciAqbmFtZSkKLXsKLQlyZXR1cm4gZ2V0dmFyKE5VTEwsIG5hbWUpOwotfQotCi0vKiBDb25jYXRlbmF0ZSB0aGUgZGV2IHBhdGggd2l0aCBhIHZhcm5hbWUgaW50byB0aGUgZ2l2ZW4gJ3ZhcicgYnVmZmVyCi0gKiBhbmQgcmV0dXJuIHRoZSAndmFyJyBwb2ludGVyLgotICogTm90aGluZyBpcyBkb25lIHRvIHRoZSBhcmd1bWVudHMgaWYgbGVuID09IDAgb3IgdmFyIGlzIE5VTEwsIHZhciBpcyBzdGlsbCByZXR1cm5lZC4KLSAqIE9uIG92ZXJmbG93LCB0aGUgZmlyc3QgY2hhciB3aWxsIGJlIHNldCB0byAnXDAnLgotICovCi1zdGF0aWMgY2hhciAqc2lfZGV2cGF0aHZhcihzaV90ICpzaWgsIGNoYXIgKnZhciwgaW50IGxlbiwgY29uc3QgY2hhciAqbmFtZSkKLXsKLQl1aW50IHBhdGhfbGVuOwotCi0JaWYgKCF2YXIgfHwgbGVuIDw9IDApCi0JCXJldHVybiB2YXI7Ci0KLQlpZiAoc2lfZGV2cGF0aChzaWgsIHZhciwgbGVuKSA9PSAwKSB7Ci0JCXBhdGhfbGVuID0gc3RybGVuKHZhcik7Ci0KLQkJaWYgKHN0cmxlbihuYW1lKSArIDEgPiAodWludCkgKGxlbiAtIHBhdGhfbGVuKSkKLQkJCXZhclswXSA9ICdcMCc7Ci0JCWVsc2UKLQkJCXN0cm5jcHkodmFyICsgcGF0aF9sZW4sIG5hbWUsIGxlbiAtIHBhdGhfbGVuIC0gMSk7Ci0JfQotCi0JcmV0dXJuIHZhcjsKLX0KLQotLyogcmV0dXJuIHRydWUgaWYgUENJRSBjYXBhYmlsaXR5IGV4aXN0cyBpbiB0aGUgcGNpIGNvbmZpZyBzcGFjZSAqLwotc3RhdGljIF9fdXNlZCBib29sIHNpX2lzcGNpZShzaV9pbmZvX3QgKnNpaSkKLXsKLQl1OCBjYXBfcHRyOwotCi0JaWYgKHNpaS0+cHViLmJ1c3R5cGUgIT0gUENJX0JVUykKLQkJcmV0dXJuIGZhbHNlOwotCi0JY2FwX3B0ciA9Ci0JICAgIHBjaWNvcmVfZmluZF9wY2lfY2FwYWJpbGl0eShzaWktPnBidXMsIFBDSV9DQVBfUENJRUNBUF9JRCwgTlVMTCwKLQkJCQkJTlVMTCk7Ci0JaWYgKCFjYXBfcHRyKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotI2lmZGVmIEJDTVNESU8KLS8qIGluaXRpYWxpemUgdGhlIHNkaW8gY29yZSAqLwotdm9pZCBzaV9zZGlvX2luaXQoc2lfdCAqc2loKQotewotCXNpX2luZm9fdCAqc2lpID0gU0lfSU5GTyhzaWgpOwotCi0JaWYgKCgoc2loLT5idXNjb3JldHlwZSA9PSBQQ01DSUFfQ09SRV9JRCkgJiYgKHNpaC0+YnVzY29yZXJldiA+PSA4KSkgfHwKLQkgICAgKHNpaC0+YnVzY29yZXR5cGUgPT0gU0RJT0RfQ09SRV9JRCkpIHsKLQkJdWludCBpZHg7Ci0JCXNkcGNtZF9yZWdzX3QgKnNkcHJlZ3M7Ci0KLQkJLyogZ2V0IHRoZSBjdXJyZW50IGNvcmUgaW5kZXggKi8KLQkJaWR4ID0gc2lpLT5jdXJpZHg7Ci0JCUFTU0VSVChpZHggPT0gc2lfZmluZGNvcmVpZHgoc2loLCBEMTFfQ09SRV9JRCwgMCkpOwotCi0JCS8qIHN3aXRjaCB0byBzZGlvIGNvcmUgKi8KLQkJc2RwcmVncyA9IChzZHBjbWRfcmVnc190ICopIHNpX3NldGNvcmUoc2loLCBQQ01DSUFfQ09SRV9JRCwgMCk7Ci0JCWlmICghc2RwcmVncykKLQkJCXNkcHJlZ3MgPQotCQkJICAgIChzZHBjbWRfcmVnc190ICopIHNpX3NldGNvcmUoc2loLCBTRElPRF9DT1JFX0lELCAwKTsKLQkJQVNTRVJUKHNkcHJlZ3MpOwotCi0JCVNJX01TRygoInNpX3NkaW9faW5pdDogRm9yIFBDTUNJQS9TRElPIENvcmVyZXYgJWQsIGVuYWJsZSBpbnRzIGZyb20gY29yZSAlZCAiICJ0aHJvdWdoIFNEIGNvcmUgJWQgKCVwKVxuIiwgc2loLT5idXNjb3JlcmV2LCBpZHgsIHNpaS0+Y3VyaWR4LCBzZHByZWdzKSk7Ci0KLQkJLyogZW5hYmxlIGJhY2twbGFuZSBlcnJvciBhbmQgY29yZSBpbnRlcnJ1cHRzICovCi0JCVdfUkVHKCZzZHByZWdzLT5ob3N0aW50bWFzaywgSV9TQklOVCk7Ci0JCVdfUkVHKCZzZHByZWdzLT5zYmludG1hc2ssCi0JCSAgICAgIChJX1NCX1NFUlIgfCBJX1NCX1JFU1BFUlIgfCAoMSA8PCBpZHgpKSk7Ci0KLQkJLyogc3dpdGNoIGJhY2sgdG8gcHJldmlvdXMgY29yZSAqLwotCQlzaV9zZXRjb3JlaWR4KHNpaCwgaWR4KTsKLQl9Ci0KLQkvKiBlbmFibGUgaW50ZXJydXB0cyAqLwotCWJjbXNkaF9pbnRyX2VuYWJsZShzaWktPnBidXMpOwotCi19Ci0jZW5kaWYJCQkJLyogQkNNU0RJTyAqLwotCi1ib29sIHNpX3BjaV93YXIxNjE2NShzaV90ICpzaWgpCi17Ci0Jc2lfaW5mb190ICpzaWk7Ci0KLQlzaWkgPSBTSV9JTkZPKHNpaCk7Ci0KLQlyZXR1cm4gUENJKHNpaSkgJiYgKHNpaC0+YnVzY29yZXJldiA8PSAxMCk7Ci19Ci0KLXZvaWQgc2lfcGNpX3VwKHNpX3QgKnNpaCkKLXsKLQlzaV9pbmZvX3QgKnNpaTsKLQotCXNpaSA9IFNJX0lORk8oc2loKTsKLQotCS8qIGlmIG5vdCBwY2kgYnVzLCB3ZSdyZSBkb25lICovCi0JaWYgKHNpaC0+YnVzdHlwZSAhPSBQQ0lfQlVTKQotCQlyZXR1cm47Ci0KLQlpZiAoUENJX0ZPUkNFSFQoc2lpKSkKLQkJX3NpX2Nsa2N0bF9jYyhzaWksIENMS19GQVNUKTsKLQotCWlmIChQQ0lFKHNpaSkpCi0JCXBjaWNvcmVfdXAoc2lpLT5wY2gsIFNJX1BDSVVQKTsKLQotfQotCi0vKiBVbmNvbmZpZ3VyZSBhbmQvb3IgYXBwbHkgdmFyaW91cyBXQVJzIHdoZW4gc3lzdGVtIGlzIGdvaW5nIHRvIHNsZWVwIG1vZGUgKi8KLXZvaWQgc2lfcGNpX3NsZWVwKHNpX3QgKnNpaCkKLXsKLQlzaV9pbmZvX3QgKnNpaTsKLQotCXNpaSA9IFNJX0lORk8oc2loKTsKLQotCXBjaWNvcmVfc2xlZXAoc2lpLT5wY2gpOwotfQotCi0vKiBVbmNvbmZpZ3VyZSBhbmQvb3IgYXBwbHkgdmFyaW91cyBXQVJzIHdoZW4gZ29pbmcgZG93biAqLwotdm9pZCBzaV9wY2lfZG93bihzaV90ICpzaWgpCi17Ci0Jc2lfaW5mb190ICpzaWk7Ci0KLQlzaWkgPSBTSV9JTkZPKHNpaCk7Ci0KLQkvKiBpZiBub3QgcGNpIGJ1cywgd2UncmUgZG9uZSAqLwotCWlmIChzaWgtPmJ1c3R5cGUgIT0gUENJX0JVUykKLQkJcmV0dXJuOwotCi0JLyogcmVsZWFzZSBGT1JDRUhUIHNpbmNlIGNoaXAgaXMgZ29pbmcgdG8gImRvd24iIHN0YXRlICovCi0JaWYgKFBDSV9GT1JDRUhUKHNpaSkpCi0JCV9zaV9jbGtjdGxfY2Moc2lpLCBDTEtfRFlOQU1JQyk7Ci0KLQlwY2ljb3JlX2Rvd24oc2lpLT5wY2gsIFNJX1BDSURPV04pOwotfQotCi0vKgotICogQ29uZmlndXJlIHRoZSBwY2kgY29yZSBmb3IgcGNpIGNsaWVudCAoTklDKSBhY3Rpb24KLSAqIGNvcmVtYXNrIGlzIHRoZSBiaXR2ZWMgb2YgY29yZXMgYnkgaW5kZXggdG8gYmUgZW5hYmxlZC4KLSAqLwotdm9pZCBzaV9wY2lfc2V0dXAoc2lfdCAqc2loLCB1aW50IGNvcmVtYXNrKQotewotCXNpX2luZm9fdCAqc2lpOwotCXN0cnVjdCBzYnBjaXJlZ3MgKnBjaXJlZ3MgPSBOVUxMOwotCXUzMiBzaWZsYWcgPSAwLCB3OwotCXVpbnQgaWR4ID0gMDsKLQotCXNpaSA9IFNJX0lORk8oc2loKTsKLQotCWlmIChzaWktPnB1Yi5idXN0eXBlICE9IFBDSV9CVVMpCi0JCXJldHVybjsKLQotCUFTU0VSVChQQ0koc2lpKSB8fCBQQ0lFKHNpaSkpOwotCUFTU0VSVChzaWktPnB1Yi5idXNjb3JlaWR4ICE9IEJBRElEWCk7Ci0KLQlpZiAoUENJKHNpaSkpIHsKLQkJLyogZ2V0IGN1cnJlbnQgY29yZSBpbmRleCAqLwotCQlpZHggPSBzaWktPmN1cmlkeDsKLQotCQkvKiB3ZSBpbnRlcnJ1cHQgb24gdGhpcyBiYWNrcGxhbmUgZmxhZyBudW1iZXIgKi8KLQkJc2lmbGFnID0gc2lfZmxhZyhzaWgpOwotCi0JCS8qIHN3aXRjaCBvdmVyIHRvIHBjaSBjb3JlICovCi0JCXBjaXJlZ3MgPSAoc3RydWN0IHNicGNpcmVncyAqKXNpX3NldGNvcmVpZHgoc2loLCBzaWktPnB1Yi5idXNjb3JlaWR4KTsKLQl9Ci0KLQkvKgotCSAqIEVuYWJsZSBzYi0+cGNpIGludGVycnVwdHMuICBBc3N1bWUKLQkgKiBQQ0kgcmV2IDIuMyBzdXBwb3J0IHdhcyBhZGRlZCBpbiBwY2kgY29yZSByZXYgNiBhbmQgdGhpbmdzIGNoYW5nZWQuLgotCSAqLwotCWlmIChQQ0lFKHNpaSkgfHwgKFBDSShzaWkpICYmICgoc2lpLT5wdWIuYnVzY29yZXJldikgPj0gNikpKSB7Ci0JCS8qIHBjaSBjb25maWcgd3JpdGUgdG8gc2V0IHRoaXMgY29yZSBiaXQgaW4gUENJSW50TWFzayAqLwotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoc2lpLT5wYnVzLCBQQ0lfSU5UX01BU0ssICZ3KTsKLQkJdyB8PSAoY29yZW1hc2sgPDwgUENJX1NCSU1fU0hJRlQpOwotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHNpaS0+cGJ1cywgUENJX0lOVF9NQVNLLCB3KTsKLQl9IGVsc2UgewotCQkvKiBzZXQgc2JpbnR2ZWMgYml0IGZvciBvdXIgZmxhZyBudW1iZXIgKi8KLQkJc2lfc2V0aW50KHNpaCwgc2lmbGFnKTsKLQl9Ci0KLQlpZiAoUENJKHNpaSkpIHsKLQkJT1JfUkVHKCZwY2lyZWdzLT5zYnRvcGNpMiwKLQkJICAgICAgIChTQlRPUENJX1BSRUYgfCBTQlRPUENJX0JVUlNUKSk7Ci0JCWlmIChzaWktPnB1Yi5idXNjb3JlcmV2ID49IDExKSB7Ci0JCQlPUl9SRUcoJnBjaXJlZ3MtPnNidG9wY2kyLAotCQkJICAgICAgIFNCVE9QQ0lfUkNfUkVBRE1VTFRJKTsKLQkJCXcgPSBSX1JFRygmcGNpcmVncy0+Y2xrcnVuKTsKLQkJCVdfUkVHKCZwY2lyZWdzLT5jbGtydW4sCi0JCQkgICAgICAodyB8IFBDSV9DTEtSVU5fRFNCTCkpOwotCQkJdyA9IFJfUkVHKCZwY2lyZWdzLT5jbGtydW4pOwotCQl9Ci0KLQkJLyogc3dpdGNoIGJhY2sgdG8gcHJldmlvdXMgY29yZSAqLwotCQlzaV9zZXRjb3JlaWR4KHNpaCwgaWR4KTsKLQl9Ci19Ci0KLS8qCi0gKiBGaXh1cCBTUk9NbGVzcyBQQ0kgZGV2aWNlJ3MgY29uZmlndXJhdGlvbi4KLSAqIFRoZSBjdXJyZW50IGNvcmUgbWF5IGJlIGNoYW5nZWQgdXBvbiByZXR1cm4uCi0gKi8KLWludCBzaV9wY2lfZml4Y2ZnKHNpX3QgKnNpaCkKLXsKLQl1aW50IG9yaWdpZHgsIHBjaWlkeDsKLQlzdHJ1Y3Qgc2JwY2lyZWdzICpwY2lyZWdzID0gTlVMTDsKLQlzYnBjaWVyZWdzX3QgKnBjaWVyZWdzID0gTlVMTDsKLQl2b2lkICpyZWdzID0gTlVMTDsKLQl1MTYgdmFsMTYsICpyZWcxNiA9IE5VTEw7Ci0KLQlzaV9pbmZvX3QgKnNpaSA9IFNJX0lORk8oc2loKTsKLQotCUFTU0VSVChzaWktPnB1Yi5idXN0eXBlID09IFBDSV9CVVMpOwotCi0JLyogRml4dXAgUEkgaW4gU1JPTSBzaGFkb3cgYXJlYSB0byBlbmFibGUgdGhlIGNvcnJlY3QgUENJIGNvcmUgYWNjZXNzICovCi0JLyogc2F2ZSB0aGUgY3VycmVudCBpbmRleCAqLwotCW9yaWdpZHggPSBzaV9jb3JlaWR4KCZzaWktPnB1Yik7Ci0KLQkvKiBjaGVjayAncGknIGlzIGNvcnJlY3QgYW5kIGZpeCBpdCBpZiBub3QgKi8KLQlpZiAoc2lpLT5wdWIuYnVzY29yZXR5cGUgPT0gUENJRV9DT1JFX0lEKSB7Ci0JCXBjaWVyZWdzID0KLQkJICAgIChzYnBjaWVyZWdzX3QgKikgc2lfc2V0Y29yZSgmc2lpLT5wdWIsIFBDSUVfQ09SRV9JRCwgMCk7Ci0JCXJlZ3MgPSBwY2llcmVnczsKLQkJQVNTRVJUKHBjaWVyZWdzICE9IE5VTEwpOwotCQlyZWcxNiA9ICZwY2llcmVncy0+c3Byb21bU1JTSF9QSV9PRkZTRVRdOwotCX0gZWxzZSBpZiAoc2lpLT5wdWIuYnVzY29yZXR5cGUgPT0gUENJX0NPUkVfSUQpIHsKLQkJcGNpcmVncyA9IChzdHJ1Y3Qgc2JwY2lyZWdzICopc2lfc2V0Y29yZSgmc2lpLT5wdWIsIFBDSV9DT1JFX0lELCAwKTsKLQkJcmVncyA9IHBjaXJlZ3M7Ci0JCUFTU0VSVChwY2lyZWdzICE9IE5VTEwpOwotCQlyZWcxNiA9ICZwY2lyZWdzLT5zcHJvbVtTUlNIX1BJX09GRlNFVF07Ci0JfQotCXBjaWlkeCA9IHNpX2NvcmVpZHgoJnNpaS0+cHViKTsKLQl2YWwxNiA9IFJfUkVHKHJlZzE2KTsKLQlpZiAoKCh2YWwxNiAmIFNSU0hfUElfTUFTSykgPj4gU1JTSF9QSV9TSElGVCkgIT0gKHUxNikgcGNpaWR4KSB7Ci0JCXZhbDE2ID0KLQkJICAgICh1MTYpIChwY2lpZHggPDwgU1JTSF9QSV9TSElGVCkgfCAodmFsMTYgJgotCQkJCQkJCSAgflNSU0hfUElfTUFTSyk7Ci0JCVdfUkVHKHJlZzE2LCB2YWwxNik7Ci0JfQotCi0JLyogcmVzdG9yZSB0aGUgb3JpZ2luYWwgaW5kZXggKi8KLQlzaV9zZXRjb3JlaWR4KCZzaWktPnB1Yiwgb3JpZ2lkeCk7Ci0KLQlwY2ljb3JlX2h3dXAoc2lpLT5wY2gpOwotCXJldHVybiAwOwotfQotCi0vKiBtYXNrJnNldCBncGlvY29udHJvbCBiaXRzICovCi11MzIgc2lfZ3Bpb2NvbnRyb2woc2lfdCAqc2loLCB1MzIgbWFzaywgdTMyIHZhbCwgdTggcHJpb3JpdHkpCi17Ci0JdWludCByZWdvZmY7Ci0KLQlyZWdvZmYgPSAwOwotCi0JLyogZ3Bpb3MgY291bGQgYmUgc2hhcmVkIG9uIHJvdXRlciBwbGF0Zm9ybXMKLQkgKiBpZ25vcmUgcmVzZXJ2YXRpb24gaWYgaXQncyBoaWdoIHByaW9yaXR5IChlLmcuLCB0ZXN0IGFwcHMpCi0JICovCi0JaWYgKChwcmlvcml0eSAhPSBHUElPX0hJX1BSSU9SSVRZKSAmJgotCSAgICAoc2loLT5idXN0eXBlID09IFNJX0JVUykgJiYgKHZhbCB8fCBtYXNrKSkgewotCQltYXNrID0gcHJpb3JpdHkgPyAoc2lfZ3Bpb3Jlc2VydmF0aW9uICYgbWFzaykgOgotCQkgICAgKChzaV9ncGlvcmVzZXJ2YXRpb24gfCBtYXNrKSAmIH4oc2lfZ3Bpb3Jlc2VydmF0aW9uKSk7Ci0JCXZhbCAmPSBtYXNrOwotCX0KLQotCXJlZ29mZiA9IG9mZnNldG9mKGNoaXBjcmVnc190LCBncGlvY29udHJvbCk7Ci0JcmV0dXJuIHNpX2NvcmVyZWcoc2loLCBTSV9DQ19JRFgsIHJlZ29mZiwgbWFzaywgdmFsKTsKLX0KLQotLyogUmV0dXJuIHRoZSBzaXplIG9mIHRoZSBzcGVjaWZpZWQgU09DUkFNIGJhbmsgKi8KLXN0YXRpYyB1aW50Ci1zb2NyYW1fYmFua3NpemUoc2lfaW5mb190ICpzaWksIHNic29jcmFtcmVnc190ICpyZWdzLCB1OCBpbmRleCwKLQkJdTggbWVtX3R5cGUpCi17Ci0JdWludCBiYW5rc2l6ZSwgYmFua2luZm87Ci0JdWludCBiYW5raWR4ID0gaW5kZXggfCAobWVtX3R5cGUgPDwgU09DUkFNX0JBTktJRFhfTUVNVFlQRV9TSElGVCk7Ci0KLQlBU1NFUlQobWVtX3R5cGUgPD0gU09DUkFNX01FTVRZUEVfREVWUkFNKTsKLQotCVdfUkVHKCZyZWdzLT5iYW5raWR4LCBiYW5raWR4KTsKLQliYW5raW5mbyA9IFJfUkVHKCZyZWdzLT5iYW5raW5mbyk7Ci0JYmFua3NpemUgPQotCSAgICBTT0NSQU1fQkFOS0lORk9fU1pCQVNFICogKChiYW5raW5mbyAmIFNPQ1JBTV9CQU5LSU5GT19TWk1BU0spICsgMSk7Ci0JcmV0dXJuIGJhbmtzaXplOwotfQotCi0vKiBSZXR1cm4gdGhlIFJBTSBzaXplIG9mIHRoZSBTT0NSQU0gY29yZSAqLwotdTMyIHNpX3NvY3JhbV9zaXplKHNpX3QgKnNpaCkKLXsKLQlzaV9pbmZvX3QgKnNpaTsKLQl1aW50IG9yaWdpZHg7Ci0JdWludCBpbnRyX3ZhbCA9IDA7Ci0KLQlzYnNvY3JhbXJlZ3NfdCAqcmVnczsKLQlib29sIHdhc3VwOwotCXVpbnQgY29yZXJldjsKLQl1MzIgY29yZWluZm87Ci0JdWludCBtZW1zaXplID0gMDsKLQotCXNpaSA9IFNJX0lORk8oc2loKTsKLQotCS8qIEJsb2NrIGludHMgYW5kIHNhdmUgY3VycmVudCBjb3JlICovCi0JSU5UUl9PRkYoc2lpLCBpbnRyX3ZhbCk7Ci0Jb3JpZ2lkeCA9IHNpX2NvcmVpZHgoc2loKTsKLQotCS8qIFN3aXRjaCB0byBTT0NSQU0gY29yZSAqLwotCXJlZ3MgPSBzaV9zZXRjb3JlKHNpaCwgU09DUkFNX0NPUkVfSUQsIDApOwotCWlmICghcmVncykKLQkJZ290byBkb25lOwotCi0JLyogR2V0IGluZm8gZm9yIGRldGVybWluaW5nIHNpemUgKi8KLQl3YXN1cCA9IHNpX2lzY29yZXVwKHNpaCk7Ci0JaWYgKCF3YXN1cCkKLQkJc2lfY29yZV9yZXNldChzaWgsIDAsIDApOwotCWNvcmVyZXYgPSBzaV9jb3JlcmV2KHNpaCk7Ci0JY29yZWluZm8gPSBSX1JFRygmcmVncy0+Y29yZWluZm8pOwotCi0JLyogQ2FsY3VsYXRlIHNpemUgZnJvbSBjb3JlaW5mbyBiYXNlZCBvbiByZXYgKi8KLQlpZiAoY29yZXJldiA9PSAwKQotCQltZW1zaXplID0gMSA8PCAoMTYgKyAoY29yZWluZm8gJiBTUkNJX01TMF9NQVNLKSk7Ci0JZWxzZSBpZiAoY29yZXJldiA8IDMpIHsKLQkJbWVtc2l6ZSA9IDEgPDwgKFNSX0JTWl9CQVNFICsgKGNvcmVpbmZvICYgU1JDSV9TUkJTWl9NQVNLKSk7Ci0JCW1lbXNpemUgKj0gKGNvcmVpbmZvICYgU1JDSV9TUk5CX01BU0spID4+IFNSQ0lfU1JOQl9TSElGVDsKLQl9IGVsc2UgaWYgKChjb3JlcmV2IDw9IDcpIHx8IChjb3JlcmV2ID09IDEyKSkgewotCQl1aW50IG5iID0gKGNvcmVpbmZvICYgU1JDSV9TUk5CX01BU0spID4+IFNSQ0lfU1JOQl9TSElGVDsKLQkJdWludCBic3ogPSAoY29yZWluZm8gJiBTUkNJX1NSQlNaX01BU0spOwotCQl1aW50IGxzcyA9IChjb3JlaW5mbyAmIFNSQ0lfTFNTX01BU0spID4+IFNSQ0lfTFNTX1NISUZUOwotCQlpZiAobHNzICE9IDApCi0JCQluYi0tOwotCQltZW1zaXplID0gbmIgKiAoMSA8PCAoYnN6ICsgU1JfQlNaX0JBU0UpKTsKLQkJaWYgKGxzcyAhPSAwKQotCQkJbWVtc2l6ZSArPSAoMSA8PCAoKGxzcyAtIDEpICsgU1JfQlNaX0JBU0UpKTsKLQl9IGVsc2UgewotCQl1OCBpOwotCQl1aW50IG5iID0gKGNvcmVpbmZvICYgU1JDSV9TUk5CX01BU0spID4+IFNSQ0lfU1JOQl9TSElGVDsKLQkJZm9yIChpID0gMDsgaSA8IG5iOyBpKyspCi0JCQltZW1zaXplICs9Ci0JCQkgICAgc29jcmFtX2JhbmtzaXplKHNpaSwgcmVncywgaSwgU09DUkFNX01FTVRZUEVfUkFNKTsKLQl9Ci0KLQkvKiBSZXR1cm4gdG8gcHJldmlvdXMgc3RhdGUgYW5kIGNvcmUgKi8KLQlpZiAoIXdhc3VwKQotCQlzaV9jb3JlX2Rpc2FibGUoc2loLCAwKTsKLQlzaV9zZXRjb3JlaWR4KHNpaCwgb3JpZ2lkeCk7Ci0KLSBkb25lOgotCUlOVFJfUkVTVE9SRShzaWksIGludHJfdmFsKTsKLQotCXJldHVybiBtZW1zaXplOwotfQotCi12b2lkIHNpX2NoaXBjb250cmxfZXBhNDMzMShzaV90ICpzaWgsIGJvb2wgb24pCi17Ci0Jc2lfaW5mb190ICpzaWk7Ci0JY2hpcGNyZWdzX3QgKmNjOwotCXVpbnQgb3JpZ2lkeDsKLQl1MzIgdmFsOwotCi0Jc2lpID0gU0lfSU5GTyhzaWgpOwotCW9yaWdpZHggPSBzaV9jb3JlaWR4KHNpaCk7Ci0KLQljYyA9IChjaGlwY3JlZ3NfdCAqKSBzaV9zZXRjb3JlKHNpaCwgQ0NfQ09SRV9JRCwgMCk7Ci0KLQl2YWwgPSBSX1JFRygmY2MtPmNoaXBjb250cm9sKTsKLQotCWlmIChvbikgewotCQlpZiAoc2loLT5jaGlwcGtnID09IDkgfHwgc2loLT5jaGlwcGtnID09IDB4YikgewotCQkJLyogRXh0IFBBIENvbnRyb2xzIGZvciA0MzMxIDEyeDkgUGFja2FnZSAqLwotCQkJV19SRUcoJmNjLT5jaGlwY29udHJvbCwgdmFsIHwKLQkJCSAgICAgIChDQ1RSTDQzMzFfRVhUUEFfRU4gfAotCQkJICAgICAgIENDVFJMNDMzMV9FWFRQQV9PTl9HUElPMl81KSk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBFeHQgUEEgQ29udHJvbHMgZm9yIDQzMzEgMTJ4MTIgUGFja2FnZSAqLwotCQkJV19SRUcoJmNjLT5jaGlwY29udHJvbCwKLQkJCSAgICAgIHZhbCB8IChDQ1RSTDQzMzFfRVhUUEFfRU4pKTsKLQkJfQotCX0gZWxzZSB7Ci0JCXZhbCAmPSB+KENDVFJMNDMzMV9FWFRQQV9FTiB8IENDVFJMNDMzMV9FWFRQQV9PTl9HUElPMl81KTsKLQkJV19SRUcoJmNjLT5jaGlwY29udHJvbCwgdmFsKTsKLQl9Ci0KLQlzaV9zZXRjb3JlaWR4KHNpaCwgb3JpZ2lkeCk7Ci19Ci0KLS8qIEVuYWJsZSBCVC1DT0VYICYgRXgtUEEgZm9yIDQzMTMgKi8KLXZvaWQgc2lfZXBhXzQzMTN3YXIoc2lfdCAqc2loKQotewotCXNpX2luZm9fdCAqc2lpOwotCWNoaXBjcmVnc190ICpjYzsKLQl1aW50IG9yaWdpZHg7Ci0KLQlzaWkgPSBTSV9JTkZPKHNpaCk7Ci0Jb3JpZ2lkeCA9IHNpX2NvcmVpZHgoc2loKTsKLQotCWNjID0gKGNoaXBjcmVnc190ICopIHNpX3NldGNvcmUoc2loLCBDQ19DT1JFX0lELCAwKTsKLQotCS8qIEVQQSBGaXggKi8KLQlXX1JFRygmY2MtPmdwaW9jb250cm9sLAotCSAgICAgIFJfUkVHKCZjYy0+Z3Bpb2NvbnRyb2wpIHwgR1BJT19DVFJMX0VQQV9FTl9NQVNLKTsKLQotCXNpX3NldGNvcmVpZHgoc2loLCBvcmlnaWR4KTsKLX0KLQotLyogY2hlY2sgaWYgdGhlIGRldmljZSBpcyByZW1vdmVkICovCi1ib29sIHNpX2RldmljZXJlbW92ZWQoc2lfdCAqc2loKQotewotCXUzMiB3OwotCXNpX2luZm9fdCAqc2lpOwotCi0Jc2lpID0gU0lfSU5GTyhzaWgpOwotCi0Jc3dpdGNoIChzaWgtPmJ1c3R5cGUpIHsKLQljYXNlIFBDSV9CVVM6Ci0JCUFTU0VSVChzaWktPnBidXMgIT0gTlVMTCk7Ci0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChzaWktPnBidXMsIFBDSV9DRkdfVklELCAmdyk7Ci0JCWlmICgodyAmIDB4RkZGRikgIT0gVkVORE9SX0JST0FEQ09NKQotCQkJcmV0dXJuIHRydWU7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgc2lfaXNfc3Byb21fYXZhaWxhYmxlKHNpX3QgKnNpaCkKLXsKLQlpZiAoc2loLT5jY3JldiA+PSAzMSkgewotCQlzaV9pbmZvX3QgKnNpaTsKLQkJdWludCBvcmlnaWR4OwotCQljaGlwY3JlZ3NfdCAqY2M7Ci0JCXUzMiBzcm9tY3RybDsKLQotCQlpZiAoKHNpaC0+Y2NjYXBzICYgQ0NfQ0FQX1NST00pID09IDApCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJc2lpID0gU0lfSU5GTyhzaWgpOwotCQlvcmlnaWR4ID0gc2lpLT5jdXJpZHg7Ci0JCWNjID0gc2lfc2V0Y29yZWlkeChzaWgsIFNJX0NDX0lEWCk7Ci0JCXNyb21jdHJsID0gUl9SRUcoJmNjLT5zcm9tY29udHJvbCk7Ci0JCXNpX3NldGNvcmVpZHgoc2loLCBvcmlnaWR4KTsKLQkJcmV0dXJuIHNyb21jdHJsICYgU1JDX1BSRVNFTlQ7Ci0JfQotCi0Jc3dpdGNoIChzaWgtPmNoaXApIHsKLQljYXNlIEJDTTQzMjlfQ0hJUF9JRDoKLQkJcmV0dXJuIChzaWgtPmNoaXBzdCAmIENTVDQzMjlfU1BST01fU0VMKSAhPSAwOwotCWNhc2UgQkNNNDMxOV9DSElQX0lEOgotCQlyZXR1cm4gKHNpaC0+Y2hpcHN0ICYgQ1NUNDMxOV9TUFJPTV9TRUwpICE9IDA7Ci0JY2FzZSBCQ000MzM2X0NISVBfSUQ6Ci0JCXJldHVybiAoc2loLT5jaGlwc3QgJiBDU1Q0MzM2X1NQUk9NX1BSRVNFTlQpICE9IDA7Ci0JY2FzZSBCQ000MzMwX0NISVBfSUQ6Ci0JCXJldHVybiAoc2loLT5jaGlwc3QgJiBDU1Q0MzMwX1NQUk9NX1BSRVNFTlQpICE9IDA7Ci0JY2FzZSBCQ000MzEzX0NISVBfSUQ6Ci0JCXJldHVybiAoc2loLT5jaGlwc3QgJiBDU1Q0MzEzX1NQUk9NX1BSRVNFTlQpICE9IDA7Ci0JY2FzZSBCQ000MzMxX0NISVBfSUQ6Ci0JCXJldHVybiAoc2loLT5jaGlwc3QgJiBDU1Q0MzMxX1NQUk9NX1BSRVNFTlQpICE9IDA7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIHRydWU7Ci0JfQotfQotCi1ib29sIHNpX2lzX290cF9kaXNhYmxlZChzaV90ICpzaWgpCi17Ci0Jc3dpdGNoIChzaWgtPmNoaXApIHsKLQljYXNlIEJDTTQzMjlfQ0hJUF9JRDoKLQkJcmV0dXJuIChzaWgtPmNoaXBzdCAmIENTVDQzMjlfU1BST01fT1RQX1NFTF9NQVNLKSA9PQotCQkgICAgQ1NUNDMyOV9PVFBfUFdSRE47Ci0JY2FzZSBCQ000MzE5X0NISVBfSUQ6Ci0JCXJldHVybiAoc2loLT5jaGlwc3QgJiBDU1Q0MzE5X1NQUk9NX09UUF9TRUxfTUFTSykgPT0KLQkJICAgIENTVDQzMTlfT1RQX1BXUkROOwotCWNhc2UgQkNNNDMzNl9DSElQX0lEOgotCQlyZXR1cm4gKHNpaC0+Y2hpcHN0ICYgQ1NUNDMzNl9PVFBfUFJFU0VOVCkgPT0gMDsKLQljYXNlIEJDTTQzMzBfQ0hJUF9JRDoKLQkJcmV0dXJuIChzaWgtPmNoaXBzdCAmIENTVDQzMzBfT1RQX1BSRVNFTlQpID09IDA7Ci0JY2FzZSBCQ000MzEzX0NISVBfSUQ6Ci0JCXJldHVybiAoc2loLT5jaGlwc3QgJiBDU1Q0MzEzX09UUF9QUkVTRU5UKSA9PSAwOwotCQkvKiBUaGVzZSBjaGlwcyBhbHdheXMgaGF2ZSB0aGVpciBPVFAgb24gKi8KLQljYXNlIEJDTTQzMjI0X0NISVBfSUQ6Ci0JY2FzZSBCQ000MzIyNV9DSElQX0lEOgotCWNhc2UgQkNNNDM0MjFfQ0hJUF9JRDoKLQljYXNlIEJDTTQzMjM1X0NISVBfSUQ6Ci0JY2FzZSBCQ000MzIzNl9DSElQX0lEOgotCWNhc2UgQkNNNDMyMzhfQ0hJUF9JRDoKLQljYXNlIEJDTTQzMzFfQ0hJUF9JRDoKLQlkZWZhdWx0OgotCQlyZXR1cm4gZmFsc2U7Ci0JfQotfQotCi1ib29sIHNpX2lzX290cF9wb3dlcmVkKHNpX3QgKnNpaCkKLXsKLQlpZiAoUE1VQ1RMX0VOQUIoc2loKSkKLQkJcmV0dXJuIHNpX3BtdV9pc19vdHBfcG93ZXJlZChzaWgpOwotCXJldHVybiB0cnVlOwotfQotCi12b2lkIHNpX290cF9wb3dlcihzaV90ICpzaWgsIGJvb2wgb24pCi17Ci0JaWYgKFBNVUNUTF9FTkFCKHNpaCkpCi0JCXNpX3BtdV9vdHBfcG93ZXIoc2loLCBvbik7Ci0JdWRlbGF5KDEwMDApOwotfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvc2l1dGlsc19wcml2LmggYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvc2l1dGlsc19wcml2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwM2ZmNjEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS91dGlsL3NpdXRpbHNfcHJpdi5oCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWQotICogU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0gKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OCi0gKiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOCi0gKiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotICovCi0KLSNpZm5kZWYJX3NpdXRpbHNfcHJpdl9oXwotI2RlZmluZQlfc2l1dGlsc19wcml2X2hfCi0KLS8qIFNpbGljb24gQmFja3BsYW5lIGV4dGVybnMgKi8KLWV4dGVybiB2b2lkIHNiX3NjYW4oc2lfdCAqc2loLCB2b2lkICpyZWdzLCB1aW50IGRldmlkKTsKLXVpbnQgc2JfY29yZWlkKHNpX3QgKnNpaCk7Ci11aW50IHNiX2NvcmVyZXYoc2lfdCAqc2loKTsKLWV4dGVybiB1aW50IHNiX2NvcmVyZWcoc2lfdCAqc2loLCB1aW50IGNvcmVpZHgsIHVpbnQgcmVnb2ZmLCB1aW50IG1hc2ssCi0JCSAgICAgICB1aW50IHZhbCk7Ci1leHRlcm4gYm9vbCBzYl9pc2NvcmV1cChzaV90ICpzaWgpOwotdm9pZCAqc2Jfc2V0Y29yZWlkeChzaV90ICpzaWgsIHVpbnQgY29yZWlkeCk7Ci1leHRlcm4gdm9pZCBzYl9jb3JlX3Jlc2V0KHNpX3QgKnNpaCwgdTMyIGJpdHMsIHUzMiByZXNldGJpdHMpOwotZXh0ZXJuIHZvaWQgc2JfY29yZV9kaXNhYmxlKHNpX3QgKnNpaCwgdTMyIGJpdHMpOwotI2VuZGlmCQkJCS8qIF9zaXV0aWxzX3ByaXZfaF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfU3NpLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1NzaS5jCmluZGV4IDBjODkwYTkuLmMxM2IwMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfU3NpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9Tc2kuYwpAQCAtMzUsMjIgKzM1LDggQEAKICAgfCBQcm9qZWN0IG1hbmFnZXI6IEVyaWMgU3RvbHogICB8IERhdGUgICAgIDogIDAyLzEyLzIwMDIgICAgICAgICAgICAgICAgfAogICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgIHwgRGVzY3JpcHRpb24gOiAgIEFQQ0ktMTcxMCBTU0kgY291bnRlciBtb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKLSAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICB8IDEzLzA1Lzk4IHwgUy4gV2ViZXIgIHwgU1NJIGRpZ2l0YWwgaW5wdXQgLyBvdXRwdXQgaW1wbGVtZW50YXRpb24gICAgICB8Ci0gIHwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKLSAgfCAyMi8wMy8wMCB8IEMuR3Vpbm90ICB8IDAxMDAvMDIyNiAtPiAwMjAwLzAyMjcgICAgICAgICAgICAgICAgICAgICAgICAgfAotICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgw4RuZGVydW5nIGluIEluaXRTU0kgRnVua3Rpb24gICAgICAgICAgICAgICAgICAgfAotICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgYl9TU0lQcm9maWxlID49IDIgYW5zdGF0dCBiX1NTSVByb2ZpbGUgPiAyICAgICB8Ci0gIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICB8IDA4LzA1LzAwIHwgR3Vpbm90IEMgIHwgLSAwNDAwLzAyMjggQWxsIEZ1bmN0aW9uIGluIFJJTkcgMCAgICAgICAgICAgICB8Ci0gIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgIGF2YWlsYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCBzZXZlcmFsIGNoYW5nZXMgZG9uZSBieSBTLiBXZWJlciBpbiAxOTk4IGFuZCBDLiBHdWlub3QgaW4gMjAwMCAgICAgICAgfAogICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMKaW5kZXggNzZmMjQ4My4uNmNmMTllZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9jb21tb24uYwpAQCAtNzcsNyArNzcsNyBAQAogLyogVXBkYXRlLTAuNy41Ny0+MC43LjY4TU9EVUxFX0xJQ0VOU0UoIkdQTCIpOyAqLwogCiAjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgYWRkaV9wcml2YXRlICopZGV2LT5wcml2YXRlKQotI2RlZmluZSB0aGlzX2JvYXJkICgoc3RydWN0IGFkZGlfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKyNkZWZpbmUgdGhpc19ib2FyZCAoKGNvbnN0IHN0cnVjdCBhZGRpX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCiAKICNpZiBkZWZpbmVkKENPTkZJR19BUENJXzE3MTApIHx8IGRlZmluZWQoQ09ORklHX0FQQ0lfMzIwMCkgfHwgZGVmaW5lZChDT05GSUdfQVBDSV8zMzAwKQogLyogQllURSBiX1NhdmVGUFVSZWcgWzk0XTsgKi8KQEAgLTI2NjYsMTMgKzI2NjYsMTEgQEAKIAkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjID0gKGludCkgaW9iYXNlX2E7CS8qIEFNQ0MgYmFzZSBhZGRyZXNzLi4uICovCiAJCWRldnByaXYtPmlfSW9iYXNlQWRkb24gPSAoaW50KSBpb2Jhc2VfYWRkb247CS8qIEFERCBPTiBiYXNlIGFkZHJlc3MuLi4uICovCiAJCWRldnByaXYtPmlfSW9iYXNlUmVzZXJ2ZWQgPSAoaW50KSBpb2Jhc2VfcmVzZXJ2ZWQ7Ci0JCWRldnByaXYtPnBzX0JvYXJkSW5mbyA9IHRoaXNfYm9hcmQ7CiAJfSBlbHNlIHsKIAkJZGV2LT5ib2FyZF9uYW1lID0gdGhpc19ib2FyZC0+cGNfRHJpdmVyTmFtZTsKIAkJZGV2LT5pb2Jhc2UgPSAodW5zaWduZWQgbG9uZylpb19hZGRyWzJdOwogCQlkZXZwcml2LT5hbWNjID0gY2FyZDsKIAkJZGV2cHJpdi0+aW9iYXNlID0gKGludCkgaW9fYWRkclsyXTsKLQkJZGV2cHJpdi0+cHNfQm9hcmRJbmZvID0gdGhpc19ib2FyZDsKIAkJZGV2cHJpdi0+aV9Jb2Jhc2VSZXNlcnZlZCA9IChpbnQpIGlvX2FkZHJbM107CiAJCXByaW50aygiXG5pb3JlbWFwIGJlZ2luIik7CiAJCWRldnByaXYtPmR3X0FpQmFzZSA9IGlvcmVtYXAoaW9fYWRkclszXSwKQEAgLTI2ODAsNiArMjY3OCwyMSBAQAogCQlwcmludGsoIlxuaW9yZW1hcCBlbmQiKTsKIAl9CiAKKwkvKiBJbml0aWFsaXplIHBhcmFtZXRlcnMgdGhhdCBjYW4gYmUgb3ZlcnJpZGRlbiBpbiBFRVBST00gKi8KKwlkZXZwcml2LT5zX0VlUGFyYW1ldGVycy5pX05ickFpQ2hhbm5lbCA9IHRoaXNfYm9hcmQtPmlfTmJyQWlDaGFubmVsOworCWRldnByaXYtPnNfRWVQYXJhbWV0ZXJzLmlfTmJyQW9DaGFubmVsID0gdGhpc19ib2FyZC0+aV9OYnJBb0NoYW5uZWw7CisJZGV2cHJpdi0+c19FZVBhcmFtZXRlcnMuaV9BaU1heGRhdGEgPSB0aGlzX2JvYXJkLT5pX0FpTWF4ZGF0YTsKKwlkZXZwcml2LT5zX0VlUGFyYW1ldGVycy5pX0FvTWF4ZGF0YSA9IHRoaXNfYm9hcmQtPmlfQW9NYXhkYXRhOworCWRldnByaXYtPnNfRWVQYXJhbWV0ZXJzLmlfTmJyRGlDaGFubmVsID0gdGhpc19ib2FyZC0+aV9OYnJEaUNoYW5uZWw7CisJZGV2cHJpdi0+c19FZVBhcmFtZXRlcnMuaV9OYnJEb0NoYW5uZWwgPSB0aGlzX2JvYXJkLT5pX05ickRvQ2hhbm5lbDsKKwlkZXZwcml2LT5zX0VlUGFyYW1ldGVycy5pX0RvTWF4ZGF0YSA9IHRoaXNfYm9hcmQtPmlfRG9NYXhkYXRhOworCWRldnByaXYtPnNfRWVQYXJhbWV0ZXJzLmlfRG1hID0gdGhpc19ib2FyZC0+aV9EbWE7CisJZGV2cHJpdi0+c19FZVBhcmFtZXRlcnMuaV9UaW1lciA9IHRoaXNfYm9hcmQtPmlfVGltZXI7CisJZGV2cHJpdi0+c19FZVBhcmFtZXRlcnMudWlfTWluQWNxdWlzaXRpb250aW1lTnMgPQorCQl0aGlzX2JvYXJkLT51aV9NaW5BY3F1aXNpdGlvbnRpbWVOczsKKwlkZXZwcml2LT5zX0VlUGFyYW1ldGVycy51aV9NaW5EZWxheXRpbWVOcyA9CisJCXRoaXNfYm9hcmQtPnVpX01pbkRlbGF5dGltZU5zOworCiAJLyogIyMgKi8KIAogCWlmIChpcnEgPiAwKSB7CkBAIC0yNzI4LDcgKzI3NDEsNyBAQAogCQlkZXZwcml2LT51c19Vc2VEbWEgPSBBRERJX0VOQUJMRTsKIAl9CiAKLQlpZiAodGhpc19ib2FyZC0+aV9EbWEpIHsKKwlpZiAoZGV2cHJpdi0+c19FZVBhcmFtZXRlcnMuaV9EbWEpIHsKIAkJcHJpbnRrKCJcbkRNQSB1c2VkIik7CiAJCWlmIChkZXZwcml2LT51c19Vc2VEbWEgPT0gQURESV9FTkFCTEUpIHsKIAkJCS8qICBhbGxvYyBETUEgYnVmZmVycyAqLwpAQCAtMjc4NywyMSArMjgwMCwyMiBAQAogCiAJCS8qICBBbGxvY2F0ZSBhbmQgSW5pdGlhbGlzZSBBSSBTdWJkZXZpY2UgU3RydWN0dXJlcyAqLwogCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKLQkJaWYgKCh0aGlzX2JvYXJkLT5pX05ickFpQ2hhbm5lbCkKKwkJaWYgKChkZXZwcml2LT5zX0VlUGFyYW1ldGVycy5pX05ickFpQ2hhbm5lbCkKIAkJCXx8ICh0aGlzX2JvYXJkLT5pX05ickFpQ2hhbm5lbERpZmYpKSB7CiAJCQlkZXYtPnJlYWRfc3ViZGV2ID0gczsKIAkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKIAkJCXMtPnN1YmRldl9mbGFncyA9CiAJCQkJU0RGX1JFQURBQkxFIHwgU0RGX0NPTU1PTiB8IFNERl9HUk9VTkQKIAkJCQl8IFNERl9ESUZGOwotCQkJaWYgKHRoaXNfYm9hcmQtPmlfTmJyQWlDaGFubmVsKSB7Ci0JCQkJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+aV9OYnJBaUNoYW5uZWw7CisJCQlpZiAoZGV2cHJpdi0+c19FZVBhcmFtZXRlcnMuaV9OYnJBaUNoYW5uZWwpIHsKKwkJCQlzLT5uX2NoYW4gPQorCQkJCQlkZXZwcml2LT5zX0VlUGFyYW1ldGVycy5pX05ickFpQ2hhbm5lbDsKIAkJCQlkZXZwcml2LT5iX1NpbmdlbERpZmYgPSAwOwogCQkJfSBlbHNlIHsKIAkJCQlzLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5pX05ickFpQ2hhbm5lbERpZmY7CiAJCQkJZGV2cHJpdi0+Yl9TaW5nZWxEaWZmID0gMTsKIAkJCX0KLQkJCXMtPm1heGRhdGEgPSB0aGlzX2JvYXJkLT5pX0FpTWF4ZGF0YTsKKwkJCXMtPm1heGRhdGEgPSBkZXZwcml2LT5zX0VlUGFyYW1ldGVycy5pX0FpTWF4ZGF0YTsKIAkJCXMtPmxlbl9jaGFubGlzdCA9IHRoaXNfYm9hcmQtPmlfQWlDaGFubmVsTGlzdDsKIAkJCXMtPnJhbmdlX3RhYmxlID0gdGhpc19ib2FyZC0+cHJfQWlSYW5nZWxpc3Q7CiAKQEAgLTI4MjUsMTIgKzI4MzksMTMgQEAKIAogCQkvKiAgQWxsb2NhdGUgYW5kIEluaXRpYWxpc2UgQU8gU3ViZGV2aWNlIFN0cnVjdHVyZXMgKi8KIAkJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7Ci0JCWlmICh0aGlzX2JvYXJkLT5pX05ickFvQ2hhbm5lbCkgeworCQlpZiAoZGV2cHJpdi0+c19FZVBhcmFtZXRlcnMuaV9OYnJBb0NoYW5uZWwpIHsKIAkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKIAkJCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklURUFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0NPTU1PTjsKLQkJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPmlfTmJyQW9DaGFubmVsOwotCQkJcy0+bWF4ZGF0YSA9IHRoaXNfYm9hcmQtPmlfQW9NYXhkYXRhOwotCQkJcy0+bGVuX2NoYW5saXN0ID0gdGhpc19ib2FyZC0+aV9OYnJBb0NoYW5uZWw7CisJCQlzLT5uX2NoYW4gPSBkZXZwcml2LT5zX0VlUGFyYW1ldGVycy5pX05ickFvQ2hhbm5lbDsKKwkJCXMtPm1heGRhdGEgPSBkZXZwcml2LT5zX0VlUGFyYW1ldGVycy5pX0FvTWF4ZGF0YTsKKwkJCXMtPmxlbl9jaGFubGlzdCA9CisJCQkJZGV2cHJpdi0+c19FZVBhcmFtZXRlcnMuaV9OYnJBb0NoYW5uZWw7CiAJCQlzLT5yYW5nZV90YWJsZSA9IHRoaXNfYm9hcmQtPnByX0FvUmFuZ2VsaXN0OwogCQkJcy0+aW5zbl9jb25maWcgPQogCQkJCXRoaXNfYm9hcmQtPmlfaHdkcnZfSW5zbkNvbmZpZ0FuYWxvZ091dHB1dDsKQEAgLTI4NDEsMTIgKzI4NTYsMTMgQEAKIAkJfQogCQkvKiAgQWxsb2NhdGUgYW5kIEluaXRpYWxpc2UgREkgU3ViZGV2aWNlIFN0cnVjdHVyZXMgKi8KIAkJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7Ci0JCWlmICh0aGlzX2JvYXJkLT5pX05ickRpQ2hhbm5lbCkgeworCQlpZiAoZGV2cHJpdi0+c19FZVBhcmFtZXRlcnMuaV9OYnJEaUNoYW5uZWwpIHsKIAkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKIAkJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQgfCBTREZfQ09NTU9OOwotCQkJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+aV9OYnJEaUNoYW5uZWw7CisJCQlzLT5uX2NoYW4gPSBkZXZwcml2LT5zX0VlUGFyYW1ldGVycy5pX05ickRpQ2hhbm5lbDsKIAkJCXMtPm1heGRhdGEgPSAxOwotCQkJcy0+bGVuX2NoYW5saXN0ID0gdGhpc19ib2FyZC0+aV9OYnJEaUNoYW5uZWw7CisJCQlzLT5sZW5fY2hhbmxpc3QgPQorCQkJCWRldnByaXYtPnNfRWVQYXJhbWV0ZXJzLmlfTmJyRGlDaGFubmVsOwogCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKIAkJCXMtPmlvX2JpdHMgPSAwOwkvKiBhbGwgYml0cyBpbnB1dCAqLwogCQkJcy0+aW5zbl9jb25maWcgPQpAQCAtMjg2MCwxMyArMjg3NiwxNCBAQAogCQl9CiAJCS8qICBBbGxvY2F0ZSBhbmQgSW5pdGlhbGlzZSBETyBTdWJkZXZpY2UgU3RydWN0dXJlcyAqLwogCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgMzsKLQkJaWYgKHRoaXNfYm9hcmQtPmlfTmJyRG9DaGFubmVsKSB7CisJCWlmIChkZXZwcml2LT5zX0VlUGFyYW1ldGVycy5pX05ickRvQ2hhbm5lbCkgewogCQkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOwogCQkJcy0+c3ViZGV2X2ZsYWdzID0KIAkJCQlTREZfUkVBREFCTEUgfCBTREZfV1JJVEVBQkxFIHwgU0RGX0dST1VORCB8IFNERl9DT01NT047Ci0JCQlzLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5pX05ickRvQ2hhbm5lbDsKLQkJCXMtPm1heGRhdGEgPSB0aGlzX2JvYXJkLT5pX0RvTWF4ZGF0YTsKLQkJCXMtPmxlbl9jaGFubGlzdCA9IHRoaXNfYm9hcmQtPmlfTmJyRG9DaGFubmVsOworCQkJcy0+bl9jaGFuID0gZGV2cHJpdi0+c19FZVBhcmFtZXRlcnMuaV9OYnJEb0NoYW5uZWw7CisJCQlzLT5tYXhkYXRhID0gZGV2cHJpdi0+c19FZVBhcmFtZXRlcnMuaV9Eb01heGRhdGE7CisJCQlzLT5sZW5fY2hhbmxpc3QgPQorCQkJCWRldnByaXYtPnNfRWVQYXJhbWV0ZXJzLmlfTmJyRG9DaGFubmVsOwogCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKIAkJCXMtPmlvX2JpdHMgPSAweGY7CS8qIGFsbCBiaXRzIG91dHB1dCAqLwogCkBAIC0yODgzLDcgKzI5MDAsNyBAQAogCiAJCS8qICBBbGxvY2F0ZSBhbmQgSW5pdGlhbGlzZSBUaW1lciBTdWJkZXZpY2UgU3RydWN0dXJlcyAqLwogCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgNDsKLQkJaWYgKHRoaXNfYm9hcmQtPmlfVGltZXIpIHsKKwkJaWYgKGRldnByaXYtPnNfRWVQYXJhbWV0ZXJzLmlfVGltZXIpIHsKIAkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9USU1FUjsKIAkJCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklURUFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0NPTU1PTjsKIAkJCXMtPm5fY2hhbiA9IDE7CkBAIC0yOTY4LDggKzI5ODUsOCBAQAogCQkJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CiAJCX0KIAotCQlpZiAoKGRldnByaXYtPnBzX0JvYXJkSW5mby0+cGNfRWVwcm9tQ2hpcCA9PSBOVUxMKQotCQkJfHwgKHN0cmNtcChkZXZwcml2LT5wc19Cb2FyZEluZm8tPnBjX0VlcHJvbUNoaXAsCisJCWlmICgodGhpc19ib2FyZC0+cGNfRWVwcm9tQ2hpcCA9PSBOVUxMKQorCQkJfHwgKHN0cmNtcCh0aGlzX2JvYXJkLT5wY19FZXByb21DaGlwLAogCQkJCQlBRERJREFUQV85MDU0KSAhPSAwKSkgewogCQkJaWYgKGRldnByaXYtPmFsbG9jYXRlZCkgewogCQkJCWlfcGNpX2NhcmRfZnJlZShkZXZwcml2LT5hbWNjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9jb21tb24uaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9jb21tb24uaAppbmRleCAxMzYyMWQ0Li5jNjk4MGI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfY29tbW9uLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2NvbW1vbi5oCkBAIC00MDYsNyArNDA2LDYgQEAKIAogCS8qIFBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgcHJvY2VzcyAqLwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrX0N1cnJlbnQ7Ci0Jc3RydWN0IGFkZGlfYm9hcmQgKnBzX0JvYXJkSW5mbzsKIAogCS8qIEhhcmR3YXJlIGJvYXJkIGluZm9zIGZvciAxNzEwICovCiAJc3RydWN0IHsKQEAgLTQzNCw2ICs0MzMsMjIgQEAKIAl1bmlvbiBzdHJfTW9kdWxlSW5mbyBzX01vZHVsZUluZm9bNF07CiAJdW5zaWduZWQgaW50IHVsX1RUTFBvcnRDb25maWd1cmF0aW9uWzEwXTsKIAorCS8qIFBhcmFtZXRlcnMgcmVhZCBmcm9tIEVFUFJPTSBvdmVycmlkaW5nIHN0YXRpYyBib2FyZCBpbmZvICovCisJc3RydWN0IHsKKwkJaW50IGlfTmJyQWlDaGFubmVsOwkvKiAgbnVtIG9mIEEvRCBjaGFucyAqLworCQlpbnQgaV9OYnJBb0NoYW5uZWw7CS8qICBudW0gb2YgRC9BIGNoYW5zICovCisJCWludCBpX0FpTWF4ZGF0YTsJLyogIHJlc29sdXRpb24gb2YgQS9EICovCisJCWludCBpX0FvTWF4ZGF0YTsJLyogIHJlc29sdXRpb24gb2YgRC9BICovCisJCWludCBpX05ickRpQ2hhbm5lbDsJLyogIE51bWJlciBvZiBESSBjaGFubmVscyAqLworCQlpbnQgaV9OYnJEb0NoYW5uZWw7CS8qICBOdW1iZXIgb2YgRE8gY2hhbm5lbHMgKi8KKwkJaW50IGlfRG9NYXhkYXRhOwkvKiAgZGF0YSB0byBzZXQgYWxsIGNoYW5uZWxzIGhpZ2ggKi8KKwkJaW50IGlfRG1hOwkJLyogIGRtYSBwcmVzZW50IG9yIG5vdCAqLworCQlpbnQgaV9UaW1lcjsJCS8qICB0aW1lciBzdWJkZXZpY2UgcHJlc2VudCBvciBub3QgKi8KKwkJdW5zaWduZWQgaW50IHVpX01pbkFjcXVpc2l0aW9udGltZU5zOworCQkJCQkvKiAgTWluaW11bSBBY3F1aXNpdGlvbiBpbiBOYW5vIHNlY3MgKi8KKwkJdW5zaWduZWQgaW50IHVpX01pbkRlbGF5dGltZU5zOworCQkJCQkvKiAgTWluaW11bSBEZWxheSBpbiBOYW5vIHNlY3MgKi8KKwl9IHNfRWVQYXJhbWV0ZXJzOwogfTsKIAogc3RhdGljIHVuc2lnbmVkIHNob3J0IHBjaV9saXN0X2J1aWxkZWQ7CS8qIHNldCB0byAxIHdoZW4gbGlzdCBvZiBjYXJkIGlzIGtub3duICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfZWVwcm9tLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfZWVwcm9tLmMKaW5kZXggMGFhMTFhMC4uM2E5MzM5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2VlcHJvbS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9lZXByb20uYwpAQCAtODQ3LDcgKzg0Nyw3IEBACiAJCQkJcGNfUENJQ2hpcEluZm9ybWF0aW9uLAogCQkJCXNfTWFpbkhlYWRlci5zX0Z1bmN0aW9uc1tpXS53X0FkZHJlc3MsCiAJCQkJJnNfRGlnaXRhbElucHV0SGVhZGVyKTsKLQkJCXRoaXNfYm9hcmQtPmlfTmJyRGlDaGFubmVsID0KKwkJCWRldnByaXYtPnNfRWVQYXJhbWV0ZXJzLmlfTmJyRGlDaGFubmVsID0KIAkJCQlzX0RpZ2l0YWxJbnB1dEhlYWRlci53X05jaGFubmVsOwogCQkJYnJlYWs7CiAKQEAgLTg1NiwxMSArODU2LDEyIEBACiAJCQkJcGNfUENJQ2hpcEluZm9ybWF0aW9uLAogCQkJCXNfTWFpbkhlYWRlci5zX0Z1bmN0aW9uc1tpXS53X0FkZHJlc3MsCiAJCQkJJnNfRGlnaXRhbE91dHB1dEhlYWRlcik7Ci0JCQl0aGlzX2JvYXJkLT5pX05ickRvQ2hhbm5lbCA9CisJCQlkZXZwcml2LT5zX0VlUGFyYW1ldGVycy5pX05ickRvQ2hhbm5lbCA9CiAJCQkJc19EaWdpdGFsT3V0cHV0SGVhZGVyLndfTmNoYW5uZWw7CiAJCQl1aV9UZW1wID0gMHhmZmZmZmZmZjsKLQkJCXRoaXNfYm9hcmQtPmlfRG9NYXhkYXRhID0KLQkJCQl1aV9UZW1wID4+ICgzMiAtIHRoaXNfYm9hcmQtPmlfTmJyRG9DaGFubmVsKTsKKwkJCWRldnByaXYtPnNfRWVQYXJhbWV0ZXJzLmlfRG9NYXhkYXRhID0KKwkJCQl1aV9UZW1wID4+ICgzMiAtCisJCQkJCWRldnByaXYtPnNfRWVQYXJhbWV0ZXJzLmlfTmJyRG9DaGFubmVsKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgRUVQUk9NX0FOQUxPR0lOUFVUOgpAQCAtODY5LDIwICs4NzAsMjEgQEAKIAkJCQlzX01haW5IZWFkZXIuc19GdW5jdGlvbnNbaV0ud19BZGRyZXNzLAogCQkJCSZzX0FuYWxvZ0lucHV0SGVhZGVyKTsKIAkJCWlmICghKHN0cmNtcCh0aGlzX2JvYXJkLT5wY19Ecml2ZXJOYW1lLCAiYXBjaTMyMDAiKSkpCi0JCQkJdGhpc19ib2FyZC0+aV9OYnJBaUNoYW5uZWwgPQorCQkJCWRldnByaXYtPnNfRWVQYXJhbWV0ZXJzLmlfTmJyQWlDaGFubmVsID0KIAkJCQkJc19BbmFsb2dJbnB1dEhlYWRlci53X05jaGFubmVsICogNDsKIAkJCWVsc2UKLQkJCQl0aGlzX2JvYXJkLT5pX05ickFpQ2hhbm5lbCA9CisJCQkJZGV2cHJpdi0+c19FZVBhcmFtZXRlcnMuaV9OYnJBaUNoYW5uZWwgPQogCQkJCQlzX0FuYWxvZ0lucHV0SGVhZGVyLndfTmNoYW5uZWw7Ci0JCQl0aGlzX2JvYXJkLT5pX0RtYSA9IHNfQW5hbG9nSW5wdXRIZWFkZXIuYl9IYXNEbWE7Ci0JCQl0aGlzX2JvYXJkLT51aV9NaW5BY3F1aXNpdGlvbnRpbWVOcyA9CisJCQlkZXZwcml2LT5zX0VlUGFyYW1ldGVycy5pX0RtYSA9CisJCQkJc19BbmFsb2dJbnB1dEhlYWRlci5iX0hhc0RtYTsKKwkJCWRldnByaXYtPnNfRWVQYXJhbWV0ZXJzLnVpX01pbkFjcXVpc2l0aW9udGltZU5zID0KIAkJCQkodW5zaWduZWQgaW50KSBzX0FuYWxvZ0lucHV0SGVhZGVyLndfTWluQ29udmVydFRpbWluZyAqCiAJCQkJMTAwMDsKLQkJCXRoaXNfYm9hcmQtPnVpX01pbkRlbGF5dGltZU5zID0KKwkJCWRldnByaXYtPnNfRWVQYXJhbWV0ZXJzLnVpX01pbkRlbGF5dGltZU5zID0KIAkJCQkodW5zaWduZWQgaW50KSBzX0FuYWxvZ0lucHV0SGVhZGVyLndfTWluRGVsYXlUaW1pbmcgKgogCQkJCTEwMDA7CiAJCQl1aV9UZW1wID0gMHhmZmZmOwotCQkJdGhpc19ib2FyZC0+aV9BaU1heGRhdGEgPQorCQkJZGV2cHJpdi0+c19FZVBhcmFtZXRlcnMuaV9BaU1heGRhdGEgPQogCQkJCXVpX1RlbXAgPj4gKDE2IC0KIAkJCQlzX0FuYWxvZ0lucHV0SGVhZGVyLmJfUmVzb2x1dGlvbik7CiAJCQlicmVhazsKQEAgLTg5MiwyNCArODk0LDI4IEBACiAJCQkJcGNfUENJQ2hpcEluZm9ybWF0aW9uLAogCQkJCXNfTWFpbkhlYWRlci5zX0Z1bmN0aW9uc1tpXS53X0FkZHJlc3MsCiAJCQkJJnNfQW5hbG9nT3V0cHV0SGVhZGVyKTsKLQkJCXRoaXNfYm9hcmQtPmlfTmJyQW9DaGFubmVsID0KKwkJCWRldnByaXYtPnNfRWVQYXJhbWV0ZXJzLmlfTmJyQW9DaGFubmVsID0KIAkJCQlzX0FuYWxvZ091dHB1dEhlYWRlci53X05jaGFubmVsOwogCQkJdWlfVGVtcCA9IDB4ZmZmZjsKLQkJCXRoaXNfYm9hcmQtPmlfQW9NYXhkYXRhID0KKwkJCWRldnByaXYtPnNfRWVQYXJhbWV0ZXJzLmlfQW9NYXhkYXRhID0KIAkJCQl1aV9UZW1wID4+ICgxNiAtCiAJCQkJc19BbmFsb2dPdXRwdXRIZWFkZXIuYl9SZXNvbHV0aW9uKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgRUVQUk9NX1RJTUVSOgotCQkJdGhpc19ib2FyZC0+aV9UaW1lciA9IDE7CS8qIFRpbWVyIHN1YmRldmljZSBwcmVzZW50ICovCisJCQkvKiBUaW1lciBzdWJkZXZpY2UgcHJlc2VudCAqLworCQkJZGV2cHJpdi0+c19FZVBhcmFtZXRlcnMuaV9UaW1lciA9IDE7CiAJCQlicmVhazsKIAogCQljYXNlIEVFUFJPTV9XQVRDSERPRzoKLQkJCXRoaXNfYm9hcmQtPmlfVGltZXIgPSAxOwkvKiBUaW1lciBzdWJkZXZpY2UgcHJlc2VudCAqLworCQkJLyogVGltZXIgc3ViZGV2aWNlIHByZXNlbnQgKi8KKwkJCWRldnByaXYtPnNfRWVQYXJhbWV0ZXJzLmlfVGltZXIgPSAxOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBFRVBST01fVElNRVJfV0FUQ0hET0dfQ09VTlRFUjoKLQkJCXRoaXNfYm9hcmQtPmlfVGltZXIgPSAxOwkvKiBUaW1lciBzdWJkZXZpY2UgcHJlc2VudCAqLworCQkJLyogVGltZXIgc3ViZGV2aWNlIHByZXNlbnQgKi8KKwkJCWRldnByaXYtPnNfRWVQYXJhbWV0ZXJzLmlfVGltZXIgPSAxOworCQkJYnJlYWs7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE2eHguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE2eHguYwppbmRleCA4ZWJiMjU0Li4wMGEwODhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNnh4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTZ4eC5jCkBAIC05Nyw3ICs5Nyw3IEBACiAJdW5zaWduZWQgY2hhciBiX0NvbW1hbmQgPSAwOwogCXVuc2lnbmVkIGNoYXIgYl9DcHQgPSAwOwogCXVuc2lnbmVkIGNoYXIgYl9OdW1iZXJPZlBvcnQgPQotCQkodW5zaWduZWQgY2hhcikgKGRldnByaXYtPnBzX0JvYXJkSW5mby0+aV9OYnJUVExDaGFubmVsIC8gOCk7CisJCSh1bnNpZ25lZCBjaGFyKSAodGhpc19ib2FyZC0+aV9OYnJUVExDaGFubmVsIC8gOCk7CiAKIAkvKioqKioqKioqKioqKioqKioqKioqKioqLwogCS8qIFRlc3QgdGhlIGJ1ZmZlciBzaXplICovCkBAIC0yODksNyArMjg5LDcgQEAKIAlpbnQgaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CiAJdW5zaWduZWQgY2hhciBiX0NvbW1hbmQgPSAwOwogCXVuc2lnbmVkIGNoYXIgYl9OdW1iZXJPZlBvcnQgPQotCQkodW5zaWduZWQgY2hhcikgKGRldnByaXYtPnBzX0JvYXJkSW5mby0+aV9OYnJUVExDaGFubmVsIC8gOCk7CisJCSh1bnNpZ25lZCBjaGFyKSAodGhpc19ib2FyZC0+aV9OYnJUVExDaGFubmVsIC8gOCk7CiAJdW5zaWduZWQgY2hhciBiX1NlbGVjdGVkUG9ydCA9IENSX1JBTkdFKGluc24tPmNoYW5zcGVjKTsKIAl1bnNpZ25lZCBjaGFyIGJfSW5wdXRDaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CiAJdW5zaWduZWQgY2hhciAqcGJfU3RhdHVzOwpAQCAtNDUwLDkgKzQ1MCw5IEBACiAJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAkJYl9OdW1iZXJPZlBvcnQgPQotCQkJKHVuc2lnbmVkIGNoYXIpIChkZXZwcml2LT5wc19Cb2FyZEluZm8tPmlfTmJyVFRMQ2hhbm5lbCAvIDMyKTsKKwkJCSh1bnNpZ25lZCBjaGFyKSAodGhpc19ib2FyZC0+aV9OYnJUVExDaGFubmVsIC8gMzIpOwogCQlpZiAoKGJfTnVtYmVyT2ZQb3J0ICogMzIpIDwKLQkJCWRldnByaXYtPnBzX0JvYXJkSW5mby0+aV9OYnJUVExDaGFubmVsKSB7CisJCQl0aGlzX2JvYXJkLT5pX05iclRUTENoYW5uZWwpIHsKIAkJCWJfTnVtYmVyT2ZQb3J0ID0gYl9OdW1iZXJPZlBvcnQgKyAxOwogCQl9CiAKQEAgLTU3Niw3ICs1NzYsNyBAQAogCWludCBpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKIAl1bnNpZ25lZCBjaGFyIGJfQ29tbWFuZCA9IDA7CiAJdW5zaWduZWQgY2hhciBiX051bWJlck9mUG9ydCA9Ci0JCSh1bnNpZ25lZCBjaGFyKSAoZGV2cHJpdi0+cHNfQm9hcmRJbmZvLT5pX05iclRUTENoYW5uZWwgLyA4KTsKKwkJKHVuc2lnbmVkIGNoYXIpICh0aGlzX2JvYXJkLT5pX05iclRUTENoYW5uZWwgLyA4KTsKIAl1bnNpZ25lZCBjaGFyIGJfU2VsZWN0ZWRQb3J0ID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOwogCXVuc2lnbmVkIGNoYXIgYl9PdXRwdXRDaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CiAJdW5zaWduZWQgaW50IGR3X1N0YXR1cyA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMTIwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMTIwLmMKaW5kZXggZmM2MTIxNC4uZTg4NmNlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzEyMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTMxMjAuYwpAQCAtOTAsNyArOTAsOCBAQAogCQkvKiBUZXN0IHRoZSBudW1iZXIgb2YgdGhlIGNoYW5uZWwgKi8KIAkJZm9yIChpID0gMDsgaSA8IGRhdGFbM107IGkrKykgewogCi0JCQlpZiAoQ1JfQ0hBTihkYXRhWzQgKyBpXSkgPj0gdGhpc19ib2FyZC0+aV9OYnJBaUNoYW5uZWwpIHsKKwkJCWlmIChDUl9DSEFOKGRhdGFbNCArIGldKSA+PQorCQkJCWRldnByaXYtPnNfRWVQYXJhbWV0ZXJzLmlfTmJyQWlDaGFubmVsKSB7CiAJCQkJcHJpbnRrKCJiYWQgY2hhbm5lbCBsaXN0XG4iKTsKIAkJCQlyZXR1cm4gLTI7CiAJCQl9CkBAIC01NDEsOCArNTQyLDEwIEBACiAJfQogCiAJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgewkvKiAgVGVzdCBEZWxheSB0aW1pbmcgKi8KLQkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCB0aGlzX2JvYXJkLT51aV9NaW5EZWxheXRpbWVOcykgewotCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IHRoaXNfYm9hcmQtPnVpX01pbkRlbGF5dGltZU5zOworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA8CisJCQkJZGV2cHJpdi0+c19FZVBhcmFtZXRlcnMudWlfTWluRGVsYXl0aW1lTnMpIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPQorCQkJCWRldnByaXYtPnNfRWVQYXJhbWV0ZXJzLnVpX01pbkRlbGF5dGltZU5zOwogCQkJZXJyKys7CiAJCX0KIAl9CkBAIC01NTEsMTYgKzU1NCwxOCBAQAogCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CiAJCQlpZiAoKGNtZC0+Y29udmVydF9hcmcpCiAJCQkJJiYgKGNtZC0+Y29udmVydF9hcmcgPAotCQkJCQl0aGlzX2JvYXJkLT51aV9NaW5BY3F1aXNpdGlvbnRpbWVOcykpIHsKLQkJCQljbWQtPmNvbnZlcnRfYXJnID0KLQkJCQkJdGhpc19ib2FyZC0+dWlfTWluQWNxdWlzaXRpb250aW1lTnM7CisJCQkJCWRldnByaXYtPnNfRWVQYXJhbWV0ZXJzLgorCQkJCQkJdWlfTWluQWNxdWlzaXRpb250aW1lTnMpKSB7CisJCQkJY21kLT5jb252ZXJ0X2FyZyA9IGRldnByaXYtPnNfRWVQYXJhbWV0ZXJzLgorCQkJCQl1aV9NaW5BY3F1aXNpdGlvbnRpbWVOczsKIAkJCQllcnIrKzsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwKLQkJCQl0aGlzX2JvYXJkLT51aV9NaW5BY3F1aXNpdGlvbnRpbWVOcykgewotCQkJCWNtZC0+Y29udmVydF9hcmcgPQotCQkJCQl0aGlzX2JvYXJkLT51aV9NaW5BY3F1aXNpdGlvbnRpbWVOczsKKwkJCQlkZXZwcml2LT5zX0VlUGFyYW1ldGVycy51aV9NaW5BY3F1aXNpdGlvbnRpbWVOcworCQkJCSkgeworCQkJCWNtZC0+Y29udmVydF9hcmcgPSBkZXZwcml2LT5zX0VlUGFyYW1ldGVycy4KKwkJCQkJdWlfTWluQWNxdWlzaXRpb250aW1lTnM7CiAJCQkJZXJyKys7CiAKIAkJCX0KQEAgLTI0NTIsNyArMjQ1Nyw3IEBACiAJCQkJICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCiAJCQkJICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7Ci0JaWYgKChkYXRhWzBdID4gdGhpc19ib2FyZC0+aV9Eb01heGRhdGEpIHx8IChkYXRhWzBdIDwgMCkpIHsKKwlpZiAoKGRhdGFbMF0gPiBkZXZwcml2LT5zX0VlUGFyYW1ldGVycy5pX0RvTWF4ZGF0YSkgfHwgKGRhdGFbMF0gPCAwKSkgewogCiAJCWNvbWVkaV9lcnJvcihkZXYsICJEYXRhIGlzIG5vdCB2YWxpZCAhISEgXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yNTE1LDcgKzI1MjAsNyBAQAogCQkJIk5vdCBhIHZhbGlkIERhdGEgISEhICxEYXRhIHNob3VsZCBiZSAxIG9yIDBcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JaWYgKHVpX05vT2ZDaGFubmVsID4gdGhpc19ib2FyZC0+aV9OYnJEb0NoYW5uZWwgLSAxKSB7CisJaWYgKHVpX05vT2ZDaGFubmVsID4gZGV2cHJpdi0+c19FZVBhcmFtZXRlcnMuaV9OYnJEb0NoYW5uZWwgLSAxKSB7CiAJCWNvbWVkaV9lcnJvcihkZXYsCiAJCQkiVGhpcyBib2FyZCBkb2Vzbid0IGhhdmUgc3BlY2lmaWVkIGNoYW5uZWwgISEhIFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpM3h4eC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpM3h4eC5jCmluZGV4IGQzYzU5NjMuLmZmZjk5ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTN4eHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzeHh4LmMKQEAgLTE0MSw4ICsxNDEsNyBAQAogCQkvKiBUZXN0IHRoZSB0aW1lIGJhc2UgKi8KIAkgICAvKioqKioqKioqKioqKioqKioqKioqKi8KIAotCQlpZiAoKGRldnByaXYtPnBzX0JvYXJkSW5mby0+Ci0JCQkJYl9BdmFpbGFibGVDb252ZXJ0VW5pdCAmICgxIDw8IGJfVGltZUJhc2UpKSAhPQorCQlpZiAoKHRoaXNfYm9hcmQtPmJfQXZhaWxhYmxlQ29udmVydFVuaXQgJiAoMSA8PCBiX1RpbWVCYXNlKSkgIT0KIAkJCTApIHsKIAkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAkJCS8qIFRlc3QgdGhlIGNvbnZlcnQgdGltZSB2YWx1ZSAqLwpAQCAtMTY1LDEyICsxNjQsMTYgQEAKIAkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAJCQkJaWYgKGR3X1Rlc3RSZWxvYWRWYWx1ZSA+PQotCQkJCQlkZXZwcml2LT5wc19Cb2FyZEluZm8tPgorCQkJCQlkZXZwcml2LT5zX0VlUGFyYW1ldGVycy4KIAkJCQkJdWlfTWluQWNxdWlzaXRpb250aW1lTnMpIHsKIAkJCQkJaWYgKChiX1NpbmdsZURpZmYgPT0gQVBDSTNYWFhfU0lOR0xFKQogCQkJCQkJfHwgKGJfU2luZ2xlRGlmZiA9PQogCQkJCQkJCUFQQ0kzWFhYX0RJRkYpKSB7Ci0JCQkJCQlpZiAoKChiX1NpbmdsZURpZmYgPT0gQVBDSTNYWFhfU0lOR0xFKSAmJiAoZGV2cHJpdi0+cHNfQm9hcmRJbmZvLT5pX05ickFpQ2hhbm5lbCA9PSAwKSkgfHwgKChiX1NpbmdsZURpZmYgPT0gQVBDSTNYWFhfRElGRikgJiYgKGRldnByaXYtPnBzX0JvYXJkSW5mby0+aV9OYnJBaUNoYW5uZWxEaWZmID09IDApKSkgeworCQkJCQkJaWYgKCgoYl9TaW5nbGVEaWZmID09IEFQQ0kzWFhYX1NJTkdMRSkKKwkJCQkJCSAgICAgICAgJiYgKGRldnByaXYtPnNfRWVQYXJhbWV0ZXJzLmlfTmJyQWlDaGFubmVsID09IDApKQorCQkJCQkJICAgIHx8ICgoYl9TaW5nbGVEaWZmID09IEFQQ0kzWFhYX0RJRkYpCisJCQkJCQkJJiYgKHRoaXNfYm9hcmQtPmlfTmJyQWlDaGFubmVsRGlmZiA9PSAwKSkKKwkJCQkJCSAgICApIHsKIAkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCQkJCQkJCS8qIFNpbmdsZS9EaWZmIHNlbGVjdGlvbiBlcnJvciAqLwogCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zNzIsMTAgKzM3NSw5IEBACiAJCS8qIFRlc3QgdGhlIGNoYW5uZWwgbnVtYmVyICovCiAJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotCQlpZiAoKChiX0NoYW5uZWwgPCBkZXZwcml2LT5wc19Cb2FyZEluZm8tPmlfTmJyQWlDaGFubmVsKQorCQlpZiAoKChiX0NoYW5uZWwgPCBkZXZwcml2LT5zX0VlUGFyYW1ldGVycy5pX05ickFpQ2hhbm5lbCkKIAkJCQkmJiAoZGV2cHJpdi0+Yl9TaW5nZWxEaWZmID09IEFQQ0kzWFhYX1NJTkdMRSkpCi0JCQl8fCAoKGJfQ2hhbm5lbCA8IGRldnByaXYtPnBzX0JvYXJkSW5mby0+Ci0JCQkJCWlfTmJyQWlDaGFubmVsRGlmZikKKwkJCXx8ICgoYl9DaGFubmVsIDwgdGhpc19ib2FyZC0+aV9OYnJBaUNoYW5uZWxEaWZmKQogCQkJCSYmIChkZXZwcml2LT5iX1NpbmdlbERpZmYgPT0gQVBDSTNYWFhfRElGRikpKSB7CiAJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAJCQkvKiBUZXN0IHRoZSBjaGFubmVsIGNvbmZpZ3VyYXRpb24gKi8KQEAgLTY2Myw3ICs2NjUsNyBAQAogCQkvKiBUZXN0IHRoZSBjaGFubmVsIG51bWJlciAqLwogCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLQkJaWYgKGJfQ2hhbm5lbCA8IGRldnByaXYtPnBzX0JvYXJkSW5mby0+aV9OYnJBb0NoYW5uZWwpIHsKKwkJaWYgKGJfQ2hhbm5lbCA8IGRldnByaXYtPnNfRWVQYXJhbWV0ZXJzLmlfTmJyQW9DaGFubmVsKSB7CiAJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAJCQkvKiBUZXN0IHRoZSBjaGFubmVsIGNvbmZpZ3VyYXRpb24gKi8KIAkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTEyNzMsNyArMTI3NSw3IEBACiAJLyogVGVzdCB0aGUgY2hhbm5lbCBudW1iZXIgKi8KIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0JaWYgKGJfQ2hhbm5lbCA8PSBkZXZwcml2LT5wc19Cb2FyZEluZm8tPmlfTmJyRGlDaGFubmVsKSB7CisJaWYgKGJfQ2hhbm5lbCA8PSBkZXZwcml2LT5zX0VlUGFyYW1ldGVycy5pX05ickRpQ2hhbm5lbCkgewogCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCiAJCS8qIFRlc3QgdGhlIGJ1ZmZlciBzaXplICovCiAJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE0OTIsNyArMTQ5NCw3IEBACiAJCS8qIFRlc3QgdGhlIGNoYW5uZWwgbnVtYmVyICovCiAJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotCQlpZiAoYl9DaGFubmVsIDwgZGV2cHJpdi0+cHNfQm9hcmRJbmZvLT5pX05ickRvQ2hhbm5lbCkgeworCQlpZiAoYl9DaGFubmVsIDwgZGV2cHJpdi0+c19FZVBhcmFtZXRlcnMuaV9OYnJEb0NoYW5uZWwpIHsKIAkgICAgICAvKioqKioqKioqKioqKioqKioqKi8KIAkJCS8qIEdldCB0aGUgY29tbWFuZCAqLwogCSAgICAgIC8qKioqKioqKioqKioqKioqKioqLwpAQCAtMTU2OCw3ICsxNTcwLDcgQEAKIAkJLyogVGVzdCB0aGUgY2hhbm5lbCBudW1iZXIgKi8KIAkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0JCWlmIChiX0NoYW5uZWwgPCBkZXZwcml2LT5wc19Cb2FyZEluZm8tPmlfTmJyRG9DaGFubmVsKSB7CisJCWlmIChiX0NoYW5uZWwgPCBkZXZwcml2LT5zX0VlUGFyYW1ldGVycy5pX05ickRvQ2hhbm5lbCkgewogCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAkJCS8qIFJlYWQgdGhlIGRpZ2l0YWwgb3V0cHV0IHBvcnQgKi8KIAkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTkxMTguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpOTExOC5jCmluZGV4IDYzMmQ1ZDAuLjA4YjcxZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpOTExOC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpOTExOC5jCkBAIC0xNDE3LDcgKzE0MTcsNyBAQAogCQljb21lZGlfZXJyb3IoZGV2LAogCQkJICAgICAicGNpOTExOF9haV9kb2NtZF9zYW1wbCgpIG1vZGUgbnVtYmVyIGJ1ZyFcbiIpOwogCQlyZXR1cm4gLUVJTzsKLQl9OworCX0KIAogCWRldnByaXYtPmludF9haV9mdW5jID0gaW50ZXJydXB0X3BjaTkxMThfYWlfb25lc2FtcGxlOwogCQkJCQkJLyogdHJhbnNmZXIgZnVuY3Rpb24gKi8KQEAgLTE0OTYsNyArMTQ5Niw3IEBACiAJZGVmYXVsdDoKIAkJY29tZWRpX2Vycm9yKGRldiwgInBjaTkxMThfYWlfZG9jbWRfZG1hKCkgbW9kZSBudW1iZXIgYnVnIVxuIik7CiAJCXJldHVybiAtRUlPOwotCX07CisJfQogCiAJaWYgKGRldnByaXYtPmFpMTJfc3RhcnRzdG9wKSB7CiAJCXBjaTkxMThfZXh0dHJnX2FkZChkZXYsIEVYVFRSR19BSSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWR2X3BjaV9kaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpX2Rpby5jCmluZGV4IDkxMDI2NjcuLmQyMzc5OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpX2Rpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpX2Rpby5jCkBAIC0xMTcsNiArMTE3LDcgQEAKIAogLyogIEFkdmFudGVjaCBQQ0ktMTc1MS8zLzNFICovCiAjZGVmaW5lIFBDSTE3NTFfRElPCSAgIDAJLyogUi9XOiBiZWdpbiBvZiA4MjU1IHJlZ2lzdGVycyBibG9jayAqLworI2RlZmluZSBQQ0kxNzUxX0NOVAkgIDI0CS8qIFIvVzogYmVnaW4gb2YgODI1NCByZWdpc3RlcnMgYmxvY2sgKi8KICNkZWZpbmUgUENJMTc1MV9JQ1IJICAzMgkvKiBXOiAgIEludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyICovCiAjZGVmaW5lIFBDSTE3NTFfSVNSCSAgMzIJLyogUjogICBJbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovCiAjZGVmaW5lIFBDSTE3NTNfRElPCSAgIDAJLyogUi9XOiBiZWdpbiBvZiA4MjU1IHJlZ2lzdGVycyBibG9jayAqLwpAQCAtMzI5LDcgKzMzMCw3IEBACiAJIHsgezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH0gfSwKIAkgeyB7NDgsIFBDSTE3NTFfRElPLCAyLCAwfSwgezAsIDAsIDAsIDB9IH0sCiAJIHswLCAwLCAwLCAwfSwKLQkgeyB7MCwgMCwgMCwgMH0gfSwKKwkgeyB7MywgUENJMTc1MV9DTlQsIDEsIDB9IH0sCiAJIElPXzhifSwKIAl7InBjaTE3NTIiLCBQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzUyLCBQQ0lESU9fTUFJTlJFRywKIAkgVFlQRV9QQ0kxNzUyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRkYS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRkYS5jCmluZGV4IDYzODNmYzkuLjQ5MTAyYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkZGEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGRhLmMKQEAgLTY1MCw3ICs2NTAsNyBAQAogCWNhc2UgNToKIAkJY29tbWFuZCB8PSBVTklQIHwgUkFOR0UyVjU7CiAJCWJyZWFrOwotCX07CisJfQogCiAJLyogb3V0cHV0IGNoYW5uZWwgc3BlY2lmaWNhdGlvbiAqLwogCWNvbW1hbmQgfD0gY2hhbm5lbCA8PCAyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaW1kYXMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2ltZGFzLmMKaW5kZXggM2Q1M2RmMC4uYjFiODMyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaW1kYXMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpbWRhcy5jCkBAIC0yNjQsNyArMjY0LDcgQEAKIAlkZWZhdWx0OgogCQlwcmludGsoIlRISVMgQ0FSRCBJUyBVTlNVUFBPUlRFRC5cbiIKIAkJICAgICAgICJQTEVBU0UgUkVQT1JUIFVTQUdFIFRPIDxtb2NlbGV0QHN1Y3Mub3JnPlxuIik7Ci0JfTsKKwl9CiAKIAlpZiAoY29tZWRpX3BjaV9lbmFibGUocGNpZGV2LCAiY2JfcGNpbWRhcyIpKSB7CiAJCXByaW50aygiIEZhaWxlZCB0byBlbmFibGUgUENJIGRldmljZSBhbmQgcmVxdWVzdCByZWdpb25zXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9qcjNfcGNpLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvanIzX3BjaS5jCmluZGV4IDVjNmM3MjcuLjhkOThjZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9qcjNfcGNpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2pyM19wY2kuYwpAQCAtMTkzLDkgKzE5Myw4IEBACiAJCXNldF9zMTYoJmNoYW5uZWwtPnRyYW5zZm9ybXNbbnVtXS5saW5rW2ldLmxpbmtfYW1vdW50LAogCQkJdHJhbnNmLmxpbmtbaV0ubGlua19hbW91bnQpOwogCQl1ZGVsYXkoMSk7Ci0JCWlmICh0cmFuc2YubGlua1tpXS5saW5rX3R5cGUgPT0gZW5kX3hfZm9ybSkgeworCQlpZiAodHJhbnNmLmxpbmtbaV0ubGlua190eXBlID09IGVuZF94X2Zvcm0pCiAJCQlicmVhazsKLQkJfQogCX0KIH0KIApAQCAtNDYwLDkgKzQ1OSw4IEBACiAJCQkJdW5zaWduZWQgaW50IGNvdW50LCBhZGRyOwogCQkJCW1vcmUgPSBtb3JlCiAJCQkJICAgICYmIHJlYWRfaWRtX3dvcmQoZGF0YSwgc2l6ZSwgJnBvcywgJmNvdW50KTsKLQkJCQlpZiAobW9yZSAmJiBjb3VudCA9PSAweGZmZmYpIHsKKwkJCQlpZiAobW9yZSAmJiBjb3VudCA9PSAweGZmZmYpCiAJCQkJCWJyZWFrOwotCQkJCX0KIAkJCQltb3JlID0gbW9yZQogCQkJCSAgICAmJiByZWFkX2lkbV93b3JkKGRhdGEsIHNpemUsICZwb3MsICZhZGRyKTsKIAkJCQlwcmludGsoIkxvYWRpbmcjJWQgJTQuNHggYnl0ZXMgYXQgJTQuNHhcbiIsIGksCkBAIC03OTMsOSArNzkxLDggQEAKIAl9CiAKIAlyZXN1bHQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBqcjNfcGNpX2Rldl9wcml2YXRlKSk7Ci0JaWYgKHJlc3VsdCA8IDApIHsKKwlpZiAocmVzdWx0IDwgMCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCWNhcmQgPSBOVUxMOwogCWRldnByaXYgPSBkZXYtPnByaXZhdGU7CiAJaW5pdF90aW1lcigmZGV2cHJpdi0+dGltZXIpOwpAQCAtODUxLDkgKzg0OCw4IEBACiAJfQogCiAJcmVzdWx0ID0gY29tZWRpX3BjaV9lbmFibGUoY2FyZCwgImpyM19wY2kiKTsKLQlpZiAocmVzdWx0IDwgMCkgeworCWlmIChyZXN1bHQgPCAwKQogCQlyZXR1cm4gLUVJTzsKLQl9CiAKIAlkZXZwcml2LT5wY2lfZW5hYmxlZCA9IDE7CiAJZGV2cHJpdi0+aW9iYXNlID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoY2FyZCwgMCksCkBAIC05MjIsOSArOTE4LDggQEAKIAlyZXN1bHQgPSBjb21lZGlfbG9hZF9maXJtd2FyZShkZXYsICJqcjNwY2kuaWRtIiwganIzX2Rvd25sb2FkX2Zpcm13YXJlKTsKIAlwcmludGsoIkZpcm1hcmUgbG9hZCAlZFxuIiwgcmVzdWx0KTsKIAotCWlmIChyZXN1bHQgPCAwKSB7CisJaWYgKHJlc3VsdCA8IDApCiAJCWdvdG8gb3V0OwotCX0KIC8qCiAgKiBUT0RPOiB1c2UgZmlybXdhcmUgdG8gbG9hZCBwcmVmZXJyZWQgb2Zmc2V0IHRhYmxlcy4gU3VnZ2VzdGVkCiAgKiBmb3JtYXQ6CkBAIC05NzMsMjEgKzk2OCwxNyBAQAogCQlkZWxfdGltZXJfc3luYygmZGV2cHJpdi0+dGltZXIpOwogCiAJCWlmIChkZXYtPnN1YmRldmljZXMpIHsKLQkJCWZvciAoaSA9IDA7IGkgPCBkZXZwcml2LT5uX2NoYW5uZWxzOyBpKyspIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBkZXZwcml2LT5uX2NoYW5uZWxzOyBpKyspCiAJCQkJa2ZyZWUoZGV2LT5zdWJkZXZpY2VzW2ldLnByaXZhdGUpOwotCQkJfQogCQl9CiAKLQkJaWYgKGRldnByaXYtPmlvYmFzZSkgeworCQlpZiAoZGV2cHJpdi0+aW9iYXNlKQogCQkJaW91bm1hcCgodm9pZCAqKWRldnByaXYtPmlvYmFzZSk7Ci0JCX0KLQkJaWYgKGRldnByaXYtPnBjaV9lbmFibGVkKSB7CisJCWlmIChkZXZwcml2LT5wY2lfZW5hYmxlZCkKIAkJCWNvbWVkaV9wY2lfZGlzYWJsZShkZXZwcml2LT5wY2lfZGV2KTsKLQkJfQogCi0JCWlmIChkZXZwcml2LT5wY2lfZGV2KSB7CisJCWlmIChkZXZwcml2LT5wY2lfZGV2KQogCQkJcGNpX2Rldl9wdXQoZGV2cHJpdi0+cGNpX2Rldik7Ci0JCX0KIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjYweC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY2MHguYwppbmRleCBjYTJhZWFhLi4zNWYzYTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjYweC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NjB4LmMKQEAgLTE0MTgsNyArMTQxOCw3IEBACiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJCWJyZWFrOwotCX07CisJfQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NvbW1vbi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jb21tb24uYwppbmRleCA5ODZlZjY3Li5mZDIzMmJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY29tbW9uLmMKQEAgLTE2MjcsNyArMTYyNyw3IEBACiAJZGVmYXVsdDoKIAkJbWl0ZV9wcmVwX2RtYShkZXZwcml2LT5haV9taXRlX2NoYW4sIDE2LCAxNik7CiAJCWJyZWFrOwotCX07CisJfQogCS8qc3RhcnQgdGhlIE1JVEUgKi8KIAltaXRlX2RtYV9hcm0oZGV2cHJpdi0+YWlfbWl0ZV9jaGFuKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOwpAQCAtMjE1Niw3ICsyMTU2LDcgQEAKIAlkZWZhdWx0OgogCQkvKiAgbXVsdGlwbGV4ZWQgaW5wdXRzICovCiAJCWJyZWFrOwotCX07CisJfQogCXJldHVybiBib2FyZHR5cGUuYWlfc3BlZWQgKiBudW1fY2hhbm5lbHM7CiB9CiAKQEAgLTUxNzMsNyArNTE3Myw3IEBACiAJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5hbl90cmlnX2V0Y19yZWcsCiAJCQkJICAgIEFuYWxvZ19UcmlnZ2VyX0V0Y19SZWdpc3Rlcik7CiAJCWJyZWFrOwotCX07CisJfQogCiAJZGV2cHJpdi0+Z3BjdF9tb2RlW2NoYW5dID0gMDsKIAlkZXZwcml2LT5ncGN0X2lucHV0X3NlbGVjdFtjaGFuXSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfdGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfdGlvLmMKaW5kZXggYTliYjZiMS4uOThmODc4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3Rpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV90aW8uYwpAQCAtMTE4MSw3ICsxMTgxLDcgQEAKIAkJCWJyZWFrOwogCQlyZXR1cm4gLUVJTlZBTDsKIAkJYnJlYWs7Ci0JfTsKKwl9CiAJY291bnRlcl9kZXYtPnJlZ3Nbc2Vjb25kX2dhdGVfcmVnXSB8PSBHaV9TZWNvbmRfR2F0ZV9Nb2RlX0JpdDsKIAljb3VudGVyX2Rldi0+cmVnc1tzZWNvbmRfZ2F0ZV9yZWddICY9IH5HaV9TZWNvbmRfR2F0ZV9TZWxlY3RfTWFzazsKIAljb3VudGVyX2Rldi0+cmVnc1tzZWNvbmRfZ2F0ZV9yZWddIHw9CkBAIC0xMjA5LDcgKzEyMDksNyBAQAogCQluaV9tX3Nlcmllc19zZWNvbmRfZ2F0ZV9zZWxlY3QgPQogCQkgICAgc2VsZWN0ZWRfc2Vjb25kX2dhdGUgJiBzZWxlY3RlZF9zZWNvbmRfZ2F0ZV9tYXNrOwogCQlicmVhazsKLQl9OworCX0KIAljb3VudGVyX2Rldi0+cmVnc1tzZWNvbmRfZ2F0ZV9yZWddIHw9IEdpX1NlY29uZF9HYXRlX01vZGVfQml0OwogCWNvdW50ZXJfZGV2LT5yZWdzW3NlY29uZF9nYXRlX3JlZ10gJj0gfkdpX1NlY29uZF9HYXRlX1NlbGVjdF9NYXNrOwogCWNvdW50ZXJfZGV2LT5yZWdzW3NlY29uZF9nYXRlX3JlZ10gfD0KQEAgLTE2NzQsNyArMTY3NCw3IEBACiAJCSAgICBjb3VudGVyX2Rldi0+CiAJCSAgICByZWdzW05JVElPX0dpX0xvYWRCX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KV07CiAJCWJyZWFrOwotCX07CisJfQogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobmlfdGlvX3JpbnNuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MjQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MjQuYwppbmRleCAzOTZhMDU4Li42MWIwNzVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzI0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcyNC5jCkBAIC0yMDksNyArMjA5LDcgQEAKIAkJCQkJIHN1YmRldl84MjU1X2NiLAogCQkJCQkgKHVuc2lnbmVkIGxvbmcpKGRldi0+aW9iYXNlICsKIAkJCQkJCQkgU0laRV84MjU1ICogaSkpOwotCX07CisJfQogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODE4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODE4LmMKaW5kZXggZTNlZWEwOS4uODkzM2U1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxOC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTguYwpAQCAtMTY2Miw3ICsxNjYyLDcgQEAKIAkJdG1wID0gKENNT1NfUkVBRChSVENfSU5UUl9GTEFHUykgJiAweEYwKTsJLyogcmVzdGFydCAqLwogCQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKIAkJYnJlYWs7Ci0JfTsKKwl9CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtMzcyNC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbTM3MjQuYwppbmRleCA3ZmIzYzI3Li5mNWMwYmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtMzcyNC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY20zNzI0LmMKQEAgLTMwMSw3ICszMDEsNyBAQAogCQlzdWJkZXZfODI1NV9pbml0KGRldiwgZGV2LT5zdWJkZXZpY2VzICsgaSwgc3ViZGV2XzgyNTVfY2IsCiAJCQkJICh1bnNpZ25lZCBsb25nKShkZXYtPmlvYmFzZSArIFNJWkVfODI1NSAqIGkpKTsKIAkJKChkZXYtPnN1YmRldmljZXMpICsgaSktPmluc25fY29uZmlnID0gc3ViZGV2XzM3MjRfaW5zbl9jb25maWc7Ci0JfTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXguYwppbmRleCBlNTQzZTZjLi4xZDA5YmZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eC5jCkBAIC0xNTMwLDcgKzE1MzAsNyBAQAogCS8qIHdlIGFsd2F5cyBvdXRwdXQgYXQgMWtIeiBqdXN0IG5vdyBhbGwgY2hhbm5lbHMgYXQgb25jZSAqLwogCWlmICgwKSB7CQkvKiAodGhpc191c2JkdXhzdWItPmhpZ2hfc3BlZWQpICovCiAJCS8qCi0JCSAqIGluIHVzYi0yLjAgb25seSBvbmUgY29udmVyc2lvbiBpdCB0cmFubWl0dGVkIGJ1dCB3aXRoIDhrSHovbgorCQkgKiBpbiB1c2ItMi4wIG9ubHkgb25lIGNvbnZlcnNpb24gaXQgdHJhbnNtaXR0ZWQgYnV0IHdpdGggOGtIei9uCiAJCSAqLwogCQljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfVElNRVI7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy92bWs4MHh4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdm1rODB4eC5jCmluZGV4IDY0NzljMzguLjNkMTNjYTZlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3ZtazgweHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdm1rODB4eC5jCkBAIC02NCw2ICs2NCw4IEBACiAKICNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKIAorI2RlZmluZSBCT0FSRE5BTUUgInZtazgweHgiCisKIE1PRFVMRV9BVVRIT1IoIk1hbnVlbCBHZWJlbGUgPGZvcmVuc2l4c0BnbXguZGU+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlZlbGxlbWFuIFVTQiBCb2FyZCBMb3ctTGV2ZWwgRHJpdmVyIik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiSzgwNTUvSzgwNjEgYWthIFZNMTEwL1ZNMTQwIik7CkBAIC0zMDUsOCArMzA3LDEwIEBACiAKIHN0YXRpYyBpbnQgdm1rODB4eF9jaGVja19kYXRhX2xpbmsoc3RydWN0IHZtazgweHhfdXNiICpkZXYpCiB7Ci0JdW5zaWduZWQgaW50IHR4X3BpcGUsIHJ4X3BpcGU7Ci0JdW5zaWduZWQgY2hhciB0eFsxXSwgcnhbMl07CisJdW5zaWduZWQgaW50IHR4X3BpcGU7CisJdW5zaWduZWQgaW50IHJ4X3BpcGU7CisJdW5zaWduZWQgY2hhciB0eFsxXTsKKwl1bnNpZ25lZCBjaGFyIHJ4WzJdOwogCiAJZGJndm0oInZtazgweHg6ICVzXG4iLCBfX2Z1bmNfXyk7CiAKQEAgLTMxNSw5ICszMTksMTEgQEAKIAogCXR4WzBdID0gVk1LODA2MV9DTURfUkRfUFdSX1NUQVQ7CiAKLQkvKiBDaGVjayB0aGF0IElDNiAoUElDMTZGODcxKSBpcyBwb3dlcmVkIGFuZAorCS8qCisJICogQ2hlY2sgdGhhdCBJQzYgKFBJQzE2Rjg3MSkgaXMgcG93ZXJlZCBhbmQKIAkgKiBydW5uaW5nIGFuZCB0aGUgZGF0YSBsaW5rIGJldHdlZW4gSUMzIGFuZAotCSAqIElDNiBpcyB3b3JraW5nIHByb3Blcmx5ICovCisJICogSUM2IGlzIHdvcmtpbmcgcHJvcGVybHkKKwkgKi8KIAl1c2JfYnVsa19tc2coZGV2LT51ZGV2LCB0eF9waXBlLCB0eCwgMSwgTlVMTCwgZGV2LT5lcF90eC0+YkludGVydmFsKTsKIAl1c2JfYnVsa19tc2coZGV2LT51ZGV2LCByeF9waXBlLCByeCwgMiwgTlVMTCwgSFogKiAxMCk7CiAKQEAgLTMyNiw4ICszMzIsMTAgQEAKIAogc3RhdGljIHZvaWQgdm1rODB4eF9yZWFkX2VlcHJvbShzdHJ1Y3Qgdm1rODB4eF91c2IgKmRldiwgaW50IGZsYWcpCiB7Ci0JdW5zaWduZWQgaW50IHR4X3BpcGUsIHJ4X3BpcGU7Ci0JdW5zaWduZWQgY2hhciB0eFsxXSwgcnhbNjRdOworCXVuc2lnbmVkIGludCB0eF9waXBlOworCXVuc2lnbmVkIGludCByeF9waXBlOworCXVuc2lnbmVkIGNoYXIgdHhbMV07CisJdW5zaWduZWQgY2hhciByeFs2NF07CiAJaW50IGNudDsKIAogCWRiZ3ZtKCJ2bWs4MHh4OiAlc1xuIiwgX19mdW5jX18pOwpAQCAtMzM3LDggKzM0NSwxMCBAQAogCiAJdHhbMF0gPSBWTUs4MDYxX0NNRF9SRF9WRVJTSU9OOwogCi0JLyogUmVhZCB0aGUgZmlybXdhcmUgdmVyc2lvbiBpbmZvIG9mIElDMyBhbmQKLQkgKiBJQzYgZnJvbSB0aGUgaW50ZXJuYWwgRUVQUk9NIG9mIHRoZSBJQyAqLworCS8qCisJICogUmVhZCB0aGUgZmlybXdhcmUgdmVyc2lvbiBpbmZvIG9mIElDMyBhbmQKKwkgKiBJQzYgZnJvbSB0aGUgaW50ZXJuYWwgRUVQUk9NIG9mIHRoZSBJQworCSAqLwogCXVzYl9idWxrX21zZyhkZXYtPnVkZXYsIHR4X3BpcGUsIHR4LCAxLCBOVUxMLCBkZXYtPmVwX3R4LT5iSW50ZXJ2YWwpOwogCXVzYl9idWxrX21zZyhkZXYtPnVkZXYsIHJ4X3BpcGUsIHJ4LCA2NCwgJmNudCwgSFogKiAxMCk7CiAKQEAgLTM4OCw3ICszOTgsOCBAQAogc3RhdGljIHZvaWQgdm1rODB4eF9idWlsZF9pbnRfdXJiKHN0cnVjdCB1cmIgKnVyYiwgaW50IGZsYWcpCiB7CiAJc3RydWN0IHZtazgweHhfdXNiICpkZXYgPSB1cmItPmNvbnRleHQ7Ci0JX191OCByeF9hZGRyLCB0eF9hZGRyOworCV9fdTggcnhfYWRkcjsKKwlfX3U4IHR4X2FkZHI7CiAJdW5zaWduZWQgaW50IHBpcGU7CiAJdW5zaWduZWQgY2hhciAqYnVmOwogCXNpemVfdCBzaXplOwpAQCAtNDE4LDggKzQyOSwxMCBAQAogCiBzdGF0aWMgdm9pZCB2bWs4MHh4X2RvX2J1bGtfbXNnKHN0cnVjdCB2bWs4MHh4X3VzYiAqZGV2KQogewotCV9fdTggdHhfYWRkciwgcnhfYWRkcjsKLQl1bnNpZ25lZCBpbnQgdHhfcGlwZSwgcnhfcGlwZTsKKwlfX3U4IHR4X2FkZHI7CisJX191OCByeF9hZGRyOworCXVuc2lnbmVkIGludCB0eF9waXBlOworCXVuc2lnbmVkIGludCByeF9waXBlOwogCXNpemVfdCBzaXplOwogCiAJZGJndm0oInZtazgweHg6ICVzXG4iLCBfX2Z1bmNfXyk7CkBAIC00MzIsOCArNDQ1LDEwIEBACiAJdHhfcGlwZSA9IHVzYl9zbmRidWxrcGlwZShkZXYtPnVkZXYsIHR4X2FkZHIpOwogCXJ4X3BpcGUgPSB1c2JfcmN2YnVsa3BpcGUoZGV2LT51ZGV2LCByeF9hZGRyKTsKIAotCS8qIFRoZSBtYXggcGFja2V0IHNpemUgYXR0cmlidXRlcyBvZiB0aGUgSzgwNjEKLQkgKiBpbnB1dC9vdXRwdXQgZW5kcG9pbnRzIGFyZSBpZGVudGljYWwgKi8KKwkvKgorCSAqIFRoZSBtYXggcGFja2V0IHNpemUgYXR0cmlidXRlcyBvZiB0aGUgSzgwNjEKKwkgKiBpbnB1dC9vdXRwdXQgZW5kcG9pbnRzIGFyZSBpZGVudGljYWwKKwkgKi8KIAlzaXplID0gbGUxNl90b19jcHUoZGV2LT5lcF90eC0+d01heFBhY2tldFNpemUpOwogCiAJdXNiX2J1bGtfbXNnKGRldi0+dWRldiwgdHhfcGlwZSwgZGV2LT51c2JfdHhfYnVmLApAQCAtNTQ0LDM0ICs1NTksNDAgQEAKICNkZWZpbmUgRElSX0lOICAxCiAjZGVmaW5lIERJUl9PVVQgMgogCi0jZGVmaW5lIHJ1ZGltZW50YXJ5X2NoZWNrKGRpcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWlmICghZGV2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJcmV0dXJuIC1FRkFVTFQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlpZiAoIWRldi0+cHJvYmVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCXJldHVybiAtRU5PREVWOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JaWYgKCFkZXYtPmF0dGFjaGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQlyZXR1cm4gLUVOT0RFVjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWlmICgoZGlyKSAmIERJUl9JTikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJaWYgKHRlc3RfYml0KFRSQU5TX0lOX0JVU1ksICZkZXYtPmZsYWdzKSkgIFwKLQkJCXJldHVybiAtRUJVU1k7ICAgICAgICAgICAgICAgICAgICAgXAotCX0gZWxzZSB7ICAvKiBESVJfT1VUICovICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJaWYgKHRlc3RfYml0KFRSQU5TX09VVF9CVVNZLCAmZGV2LT5mbGFncykpIFwKLQkJCXJldHVybiAtRUJVU1k7ICAgICAgICAgICAgICAgICAgICAgXAotCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gd2hpbGUgKDApCitzdGF0aWMgaW50IHJ1ZGltZW50YXJ5X2NoZWNrKHN0cnVjdCB2bWs4MHh4X3VzYiAqZGV2LCBpbnQgZGlyKQoreworCWlmICghZGV2KQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoIWRldi0+cHJvYmVkKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoIWRldi0+YXR0YWNoZWQpCisJCXJldHVybiAtRU5PREVWOworCWlmIChkaXIgJiBESVJfSU4pIHsKKwkJaWYgKHRlc3RfYml0KFRSQU5TX0lOX0JVU1ksICZkZXYtPmZsYWdzKSkKKwkJCXJldHVybiAtRUJVU1k7CisJfQorCWlmIChkaXIgJiBESVJfT1VUKSB7CisJCWlmICh0ZXN0X2JpdChUUkFOU19PVVRfQlVTWSwgJmRldi0+ZmxhZ3MpKQorCQkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlyZXR1cm4gMDsKK30KIAogc3RhdGljIGludCB2bWs4MHh4X2FpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpjZGV2LAogCQkJICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAogCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCXN0cnVjdCB2bWs4MHh4X3VzYiAqZGV2ID0gY2Rldi0+cHJpdmF0ZTsKLQlpbnQgY2hhbiwgcmVnWzJdOworCWludCBjaGFuOworCWludCByZWdbMl07CiAJaW50IG47CiAKIAlkYmd2bSgidm1rODB4eDogJXNcbiIsIF9fZnVuY19fKTsKIAotCXJ1ZGltZW50YXJ5X2NoZWNrKERJUl9JTik7CisJbiA9IHJ1ZGltZW50YXJ5X2NoZWNrKGRldiwgRElSX0lOKTsKKwlpZiAobikKKwkJcmV0dXJuIG47CiAKIAlkb3duKCZkZXYtPmxpbWl0X3NlbSk7CiAJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwpAQCAtNjE1LDEyICs2MzYsMTYgQEAKIAkJCSAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlzdHJ1Y3Qgdm1rODB4eF91c2IgKmRldiA9IGNkZXYtPnByaXZhdGU7Ci0JaW50IGNoYW4sIGNtZCwgcmVnOworCWludCBjaGFuOworCWludCBjbWQ7CisJaW50IHJlZzsKIAlpbnQgbjsKIAogCWRiZ3ZtKCJ2bWs4MHh4OiAlc1xuIiwgX19mdW5jX18pOwogCi0JcnVkaW1lbnRhcnlfY2hlY2soRElSX09VVCk7CisJbiA9IHJ1ZGltZW50YXJ5X2NoZWNrKGRldiwgRElSX09VVCk7CisJaWYgKG4pCisJCXJldHVybiBuOwogCiAJZG93bigmZGV2LT5saW1pdF9zZW0pOwogCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKQEAgLTY1NywxMiArNjgyLDE1IEBACiAJCQkgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJc3RydWN0IHZtazgweHhfdXNiICpkZXYgPSBjZGV2LT5wcml2YXRlOwotCWludCBjaGFuLCByZWc7CisJaW50IGNoYW47CisJaW50IHJlZzsKIAlpbnQgbjsKIAogCWRiZ3ZtKCJ2bWs4MHh4OiAlc1xuIiwgX19mdW5jX18pOwogCi0JcnVkaW1lbnRhcnlfY2hlY2soRElSX0lOKTsKKwluID0gcnVkaW1lbnRhcnlfY2hlY2soZGV2LCBESVJfSU4pOworCWlmIChuKQorCQlyZXR1cm4gbjsKIAogCWRvd24oJmRldi0+bGltaXRfc2VtKTsKIAljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CkBAIC02ODMsNiArNzExLDUwIEBACiAJcmV0dXJuIG47CiB9CiAKK3N0YXRpYyBpbnQgdm1rODB4eF9kaV9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpjZGV2LAorCQkJICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgdm1rODB4eF91c2IgKmRldiA9IGNkZXYtPnByaXZhdGU7CisJdW5zaWduZWQgY2hhciAqcnhfYnVmOworCWludCByZWc7CisJaW50IHJldHZhbDsKKworCWRiZ3ZtKCJ2bWs4MHh4OiAlc1xuIiwgX19mdW5jX18pOworCisJcmV0dmFsID0gcnVkaW1lbnRhcnlfY2hlY2soZGV2LCBESVJfSU4pOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlkb3duKCZkZXYtPmxpbWl0X3NlbSk7CisKKwlyeF9idWYgPSBkZXYtPnVzYl9yeF9idWY7CisKKwlpZiAoZGV2LT5ib2FyZC5tb2RlbCA9PSBWTUs4MDYxX01PREVMKSB7CisJCXJlZyA9IFZNSzgwNjFfRElfUkVHOworCQlkZXYtPnVzYl90eF9idWZbMF0gPSBWTUs4MDYxX0NNRF9SRF9ESTsKKwl9IGVsc2UgeworCQlyZWcgPSBWTUs4MDU1X0RJX1JFRzsKKwl9CisKKwlyZXR2YWwgPSB2bWs4MHh4X3JlYWRfcGFja2V0KGRldik7CisKKwlpZiAoIXJldHZhbCkgeworCQlpZiAoZGV2LT5ib2FyZC5tb2RlbCA9PSBWTUs4MDU1X01PREVMKQorCQkJZGF0YVsxXSA9ICgoKHJ4X2J1ZltyZWddID4+IDQpICYgMHgwMykgfAorCQkJCSAgKChyeF9idWZbcmVnXSA8PCAyKSAmIDB4MDQpIHwKKwkJCQkgICgocnhfYnVmW3JlZ10gPj4gMykgJiAweDE4KSk7CisJCWVsc2UKKwkJCWRhdGFbMV0gPSByeF9idWZbcmVnXTsKKworCQlyZXR2YWwgPSAyOworCX0KKworCXVwKCZkZXYtPmxpbWl0X3NlbSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCiBzdGF0aWMgaW50IHZtazgweHhfZGlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmNkZXYsCiAJCQkgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCiAJCQkgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCkBAIC02OTAsMTIgKzc2MiwxNSBAQAogCXN0cnVjdCB2bWs4MHh4X3VzYiAqZGV2ID0gY2Rldi0+cHJpdmF0ZTsKIAlpbnQgY2hhbjsKIAl1bnNpZ25lZCBjaGFyICpyeF9idWY7Ci0JaW50IHJlZywgaW5wOworCWludCByZWc7CisJaW50IGlucDsKIAlpbnQgbjsKIAogCWRiZ3ZtKCJ2bWs4MHh4OiAlc1xuIiwgX19mdW5jX18pOwogCi0JcnVkaW1lbnRhcnlfY2hlY2soRElSX0lOKTsKKwluID0gcnVkaW1lbnRhcnlfY2hlY2soZGV2LCBESVJfSU4pOworCWlmIChuKQorCQlyZXR1cm4gbjsKIAogCWRvd24oJmRldi0+bGltaXRfc2VtKTsKIAljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CkBAIC03MDUsOSArNzgwLDkgQEAKIAlpZiAoZGV2LT5ib2FyZC5tb2RlbCA9PSBWTUs4MDYxX01PREVMKSB7CiAJCXJlZyA9IFZNSzgwNjFfRElfUkVHOwogCQlkZXYtPnVzYl90eF9idWZbMF0gPSBWTUs4MDYxX0NNRF9SRF9ESTsKLQl9IGVsc2UKKwl9IGVsc2UgewogCQlyZWcgPSBWTUs4MDU1X0RJX1JFRzsKLQorCX0KIAlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CiAJCWlmICh2bWs4MHh4X3JlYWRfcGFja2V0KGRldikpCiAJCQlicmVhazsKQEAgLTcxOSw3ICs3OTQsNyBAQAogCQllbHNlCiAJCQlpbnAgPSByeF9idWZbcmVnXTsKIAotCQlkYXRhW25dID0gKChpbnAgJiAoMSA8PCBjaGFuKSkgPiAwKTsKKwkJZGF0YVtuXSA9IChpbnAgPj4gY2hhbikgJiAxOwogCX0KIAogCXVwKCZkZXYtPmxpbWl0X3NlbSk7CkBAIC03MzEsMTYgKzgwNiwxOCBAQAogCQkJICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAogCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewotCiAJc3RydWN0IHZtazgweHhfdXNiICpkZXYgPSBjZGV2LT5wcml2YXRlOwogCWludCBjaGFuOwogCXVuc2lnbmVkIGNoYXIgKnR4X2J1ZjsKLQlpbnQgcmVnLCBjbWQ7CisJaW50IHJlZzsKKwlpbnQgY21kOwogCWludCBuOwogCiAJZGJndm0oInZtazgweHg6ICVzXG4iLCBfX2Z1bmNfXyk7CiAKLQlydWRpbWVudGFyeV9jaGVjayhESVJfT1VUKTsKKwluID0gcnVkaW1lbnRhcnlfY2hlY2soZGV2LCBESVJfT1VUKTsKKwlpZiAobikKKwkJcmV0dXJuIG47CiAKIAlkb3duKCZkZXYtPmxpbWl0X3NlbSk7CiAJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwpAQCAtNzU1LDIxICs4MzIsMTcgQEAKIAkJCQl0eF9idWZbcmVnXSB8PSAoMSA8PCBjaGFuKTsKIAkJCWVsc2UKIAkJCQl0eF9idWZbcmVnXSBePSAoMSA8PCBjaGFuKTsKLQotCQkJZ290byB3cml0ZV9wYWNrZXQ7CisJCX0gZWxzZSB7IC8qIFZNSzgwNjFfTU9ERUwgKi8KKwkJCXJlZyA9IFZNSzgwNjFfRE9fUkVHOworCQkJaWYgKGRhdGFbbl0gPT0gMSkgeworCQkJCWNtZCA9IFZNSzgwNjFfQ01EX1NFVF9ETzsKKwkJCQl0eF9idWZbcmVnXSA9IDEgPDwgY2hhbjsKKwkJCX0gZWxzZSB7CisJCQkJY21kID0gVk1LODA2MV9DTURfQ0xSX0RPOworCQkJCXR4X2J1ZltyZWddID0gMHhmZiAtICgxIDw8IGNoYW4pOworCQkJfQogCQl9CiAKLQkJLyogVk1LODA2MV9NT0RFTCAqLwotCQlyZWcgPSBWTUs4MDYxX0RPX1JFRzsKLQkJaWYgKGRhdGFbbl0gPT0gMSkgewotCQkJY21kID0gVk1LODA2MV9DTURfU0VUX0RPOwotCQkJdHhfYnVmW3JlZ10gPSAxIDw8IGNoYW47Ci0JCX0gZWxzZSB7Ci0JCQljbWQgPSBWTUs4MDYxX0NNRF9DTFJfRE87Ci0JCQl0eF9idWZbcmVnXSA9IDB4ZmYgLSAoMSA8PCBjaGFuKTsKLQkJfQotCi13cml0ZV9wYWNrZXQ6CiAJCWlmICh2bWs4MHh4X3dyaXRlX3BhY2tldChkZXYsIGNtZCkpCiAJCQlicmVhazsKIAl9CkBAIC03ODQsMTggKzg1NywyMCBAQAogCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCXN0cnVjdCB2bWs4MHh4X3VzYiAqZGV2ID0gY2Rldi0+cHJpdmF0ZTsKLQlpbnQgY2hhbiwgcmVnLCBtYXNrOworCWludCBjaGFuOworCWludCByZWc7CiAJaW50IG47CiAKIAlkYmd2bSgidm1rODB4eDogJXNcbiIsIF9fZnVuY19fKTsKIAotCXJ1ZGltZW50YXJ5X2NoZWNrKERJUl9JTik7CisJbiA9IHJ1ZGltZW50YXJ5X2NoZWNrKGRldiwgRElSX0lOKTsKKwlpZiAobikKKwkJcmV0dXJuIG47CiAKIAlkb3duKCZkZXYtPmxpbWl0X3NlbSk7CiAJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwogCiAJcmVnID0gVk1LODA2MV9ET19SRUc7Ci0JbWFzayA9IDEgPDwgY2hhbjsKIAogCWRldi0+dXNiX3R4X2J1ZlswXSA9IFZNSzgwNjFfQ01EX1JEX0RPOwogCkBAIC04MDMsNyArODc4LDcgQEAKIAkJaWYgKHZtazgweHhfcmVhZF9wYWNrZXQoZGV2KSkKIAkJCWJyZWFrOwogCi0JCWRhdGFbbl0gPSAoZGV2LT51c2JfcnhfYnVmW3JlZ10gJiBtYXNrKSA+PiBjaGFuOworCQlkYXRhW25dID0gKGRldi0+dXNiX3J4X2J1ZltyZWddID4+IGNoYW4pICYgMTsKIAl9CiAKIAl1cCgmZGV2LT5saW1pdF9zZW0pOwpAQCAtODExLDE3ICs4ODYsODcgQEAKIAlyZXR1cm4gbjsKIH0KIAorc3RhdGljIGludCB2bWs4MHh4X2RvX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmNkZXYsCisJCQkgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQoreworCXN0cnVjdCB2bWs4MHh4X3VzYiAqZGV2ID0gY2Rldi0+cHJpdmF0ZTsKKwl1bnNpZ25lZCBjaGFyICpyeF9idWYsICp0eF9idWY7CisJaW50IGRpciwgcmVnLCBjbWQ7CisJaW50IHJldHZhbDsKKworCWRiZ3ZtKCJ2bWs4MHh4OiAlc1xuIiwgX19mdW5jX18pOworCisJZGlyID0gMDsKKworCWlmIChkYXRhWzBdKQorCQlkaXIgfD0gRElSX09VVDsKKworCWlmIChkZXYtPmJvYXJkLm1vZGVsID09IFZNSzgwNjFfTU9ERUwpCisJCWRpciB8PSBESVJfSU47CisKKwlyZXR2YWwgPSBydWRpbWVudGFyeV9jaGVjayhkZXYsIGRpcik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRvd24oJmRldi0+bGltaXRfc2VtKTsKKworCXJ4X2J1ZiA9IGRldi0+dXNiX3J4X2J1ZjsKKwl0eF9idWYgPSBkZXYtPnVzYl90eF9idWY7CisKKwlpZiAoZGF0YVswXSkgeworCQlpZiAoZGV2LT5ib2FyZC5tb2RlbCA9PSBWTUs4MDU1X01PREVMKSB7CisJCQlyZWcgPSBWTUs4MDU1X0RPX1JFRzsKKwkJCWNtZCA9IFZNSzgwNTVfQ01EX1dSVF9BRDsKKwkJfSBlbHNlIHsgLyogVk1LODA2MV9NT0RFTCAqLworCQkJcmVnID0gVk1LODA2MV9ET19SRUc7CisJCQljbWQgPSBWTUs4MDYxX0NNRF9ETzsKKwkJfQorCisJCXR4X2J1ZltyZWddICY9IH5kYXRhWzBdOworCQl0eF9idWZbcmVnXSB8PSAoZGF0YVswXSAmIGRhdGFbMV0pOworCisJCXJldHZhbCA9IHZtazgweHhfd3JpdGVfcGFja2V0KGRldiwgY21kKTsKKworCQlpZiAocmV0dmFsKQorCQkJZ290byBvdXQ7CisJfQorCisJaWYgKGRldi0+Ym9hcmQubW9kZWwgPT0gVk1LODA2MV9NT0RFTCkgeworCQlyZWcgPSBWTUs4MDYxX0RPX1JFRzsKKwkJdHhfYnVmWzBdID0gVk1LODA2MV9DTURfUkRfRE87CisKKwkJcmV0dmFsID0gdm1rODB4eF9yZWFkX3BhY2tldChkZXYpOworCisJCWlmICghcmV0dmFsKSB7CisJCQlkYXRhWzFdID0gcnhfYnVmW3JlZ107CisJCQlyZXR2YWwgPSAyOworCQl9CisJfSBlbHNlIHsKKwkJZGF0YVsxXSA9IHR4X2J1ZltyZWddOworCQlyZXR2YWwgPSAyOworCX0KKworb3V0OgorCXVwKCZkZXYtPmxpbWl0X3NlbSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCiBzdGF0aWMgaW50IHZtazgweHhfY250X3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpjZGV2LAogCQkJICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKIAkJCSAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJc3RydWN0IHZtazgweHhfdXNiICpkZXYgPSBjZGV2LT5wcml2YXRlOwotCWludCBjaGFuLCByZWdbMl07CisJaW50IGNoYW47CisJaW50IHJlZ1syXTsKIAlpbnQgbjsKIAogCWRiZ3ZtKCJ2bWs4MHh4OiAlc1xuIiwgX19mdW5jX18pOwogCi0JcnVkaW1lbnRhcnlfY2hlY2soRElSX0lOKTsKKwluID0gcnVkaW1lbnRhcnlfY2hlY2soZGV2LCBESVJfSU4pOworCWlmIChuKQorCQlyZXR1cm4gbjsKIAogCWRvd24oJmRldi0+bGltaXRfc2VtKTsKIAljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CkBAIC04NDQsMTQgKzk4OSwxMSBAQAogCQlpZiAodm1rODB4eF9yZWFkX3BhY2tldChkZXYpKQogCQkJYnJlYWs7CiAKLQkJaWYgKGRldi0+Ym9hcmQubW9kZWwgPT0gVk1LODA1NV9NT0RFTCkgeworCQlpZiAoZGV2LT5ib2FyZC5tb2RlbCA9PSBWTUs4MDU1X01PREVMKQogCQkJZGF0YVtuXSA9IGRldi0+dXNiX3J4X2J1ZltyZWdbMF1dOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiBWTUs4MDYxX01PREVMICovCi0JCWRhdGFbbl0gPSBkZXYtPnVzYl9yeF9idWZbcmVnWzBdICogKGNoYW4gKyAxKSArIDFdCi0JCSAgICArIDI1NiAqIGRldi0+dXNiX3J4X2J1ZltyZWdbMV0gKiAyICsgMl07CisJCWVsc2UgLyogVk1LODA2MV9NT0RFTCAqLworCQkJZGF0YVtuXSA9IGRldi0+dXNiX3J4X2J1ZltyZWdbMF0gKiAoY2hhbiArIDEpICsgMV0KKwkJCSAgICArIDI1NiAqIGRldi0+dXNiX3J4X2J1ZltyZWdbMV0gKiAyICsgMl07CiAJfQogCiAJdXAoJmRldi0+bGltaXRfc2VtKTsKQEAgLTg2NSwxMiArMTAwNywxNiBAQAogewogCXN0cnVjdCB2bWs4MHh4X3VzYiAqZGV2ID0gY2Rldi0+cHJpdmF0ZTsKIAl1bnNpZ25lZCBpbnQgaW5zbl9jbWQ7Ci0JaW50IGNoYW4sIGNtZCwgcmVnOworCWludCBjaGFuOworCWludCBjbWQ7CisJaW50IHJlZzsKIAlpbnQgbjsKIAogCWRiZ3ZtKCJ2bWs4MHh4OiAlc1xuIiwgX19mdW5jX18pOwogCi0JcnVkaW1lbnRhcnlfY2hlY2soRElSX09VVCk7CisJbiA9IHJ1ZGltZW50YXJ5X2NoZWNrKGRldiwgRElSX09VVCk7CisJaWYgKG4pCisJCXJldHVybiBuOwogCiAJZG93bigmZGV2LT5saW1pdF9zZW0pOwogCkBAIC04OTAsOCArMTAzNiw5IEBACiAJCX0KIAogCQlkZXYtPnVzYl90eF9idWZbcmVnXSA9IDB4MDA7Ci0JfSBlbHNlCisJfSBlbHNlIHsKIAkJY21kID0gVk1LODA2MV9DTURfUlNUX0NOVDsKKwl9CiAKIAlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKQogCQlpZiAodm1rODB4eF93cml0ZV9wYWNrZXQoZGV2LCBjbWQpKQpAQCAtOTA3LDEzICsxMDU0LDE3IEBACiAJCQkgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCXN0cnVjdCB2bWs4MHh4X3VzYiAqZGV2ID0gY2Rldi0+cHJpdmF0ZTsKLQl1bnNpZ25lZCBsb25nIGRlYnRpbWUsIHZhbDsKLQlpbnQgY2hhbiwgY21kOworCXVuc2lnbmVkIGxvbmcgZGVidGltZTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgY2hhbjsKKwlpbnQgY21kOwogCWludCBuOwogCiAJZGJndm0oInZtazgweHg6ICVzXG4iLCBfX2Z1bmNfXyk7CiAKLQlydWRpbWVudGFyeV9jaGVjayhESVJfT1VUKTsKKwluID0gcnVkaW1lbnRhcnlfY2hlY2soZGV2LCBESVJfT1VUKTsKKwlpZiAobikKKwkJcmV0dXJuIG47CiAKIAlkb3duKCZkZXYtPmxpbWl0X3NlbSk7CiAJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwpAQCAtOTU3LDcgKzExMDgsOSBAQAogCiAJZGJndm0oInZtazgweHg6ICVzXG4iLCBfX2Z1bmNfXyk7CiAKLQlydWRpbWVudGFyeV9jaGVjayhESVJfSU4pOworCW4gPSBydWRpbWVudGFyeV9jaGVjayhkZXYsIERJUl9JTik7CisJaWYgKG4pCisJCXJldHVybiBuOwogCiAJZG93bigmZGV2LT5saW1pdF9zZW0pOwogCkBAIC05ODQsMTIgKzExMzcsMTUgQEAKIHsKIAlzdHJ1Y3Qgdm1rODB4eF91c2IgKmRldiA9IGNkZXYtPnByaXZhdGU7CiAJdW5zaWduZWQgY2hhciAqdHhfYnVmOwotCWludCByZWdbMl0sIGNtZDsKKwlpbnQgcmVnWzJdOworCWludCBjbWQ7CiAJaW50IG47CiAKIAlkYmd2bSgidm1rODB4eDogJXNcbiIsIF9fZnVuY19fKTsKIAotCXJ1ZGltZW50YXJ5X2NoZWNrKERJUl9PVVQpOworCW4gPSBydWRpbWVudGFyeV9jaGVjayhkZXYsIERJUl9PVVQpOworCWlmIChuKQorCQlyZXR1cm4gbjsKIAogCWRvd24oJmRldi0+bGltaXRfc2VtKTsKIApAQCAtMTAyNiw4ICsxMTgyLDggQEAKIAlyZXR1cm4gbjsKIH0KIAotc3RhdGljIGludAotdm1rODB4eF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmNkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCkKK3N0YXRpYyBpbnQgdm1rODB4eF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmNkZXYsCisJCQkgIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3Qgdm1rODB4eF91c2IgKmRldjsKQEAgLTEwOTQsMTYgKzEyNTAsMTggQEAKIAlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CiAJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORDsKIAlzLT5uX2NoYW4gPSBkZXYtPmJvYXJkLmRpX2NoYW5zOwotCXMtPm1heGRhdGEgPSAoMSA8PCBkZXYtPmJvYXJkLmRpX2JpdHMpIC0gMTsKKwlzLT5tYXhkYXRhID0gMTsKIAlzLT5pbnNuX3JlYWQgPSB2bWs4MHh4X2RpX3JpbnNuOworCXMtPmluc25fYml0cyA9IHZtazgweHhfZGlfYml0czsKIAogCS8qIERpZ2l0YWwgb3V0cHV0IHN1YmRldmljZSAqLwogCXMgPSBjZGV2LT5zdWJkZXZpY2VzICsgVk1LODBYWF9TVUJEX0RPOwogCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKIAlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEVBQkxFIHwgU0RGX0dST1VORDsKIAlzLT5uX2NoYW4gPSBkZXYtPmJvYXJkLmRvX2NoYW5zOwotCXMtPm1heGRhdGEgPSAoMSA8PCBkZXYtPmJvYXJkLmRvX2JpdHMpIC0gMTsKKwlzLT5tYXhkYXRhID0gMTsKIAlzLT5pbnNuX3dyaXRlID0gdm1rODB4eF9kb193aW5zbjsKKwlzLT5pbnNuX2JpdHMgPSB2bWs4MHh4X2RvX2JpdHM7CiAKIAlpZiAoZGV2LT5ib2FyZC5tb2RlbCA9PSBWTUs4MDYxX01PREVMKSB7CiAJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfUkVBREFCTEU7CkBAIC0xMTc5LDggKzEzMzcsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci12bWs4MHh4X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCitzdGF0aWMgaW50IHZtazgweHhfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCWludCBpOwogCXN0cnVjdCB2bWs4MHh4X3VzYiAqZGV2OwpAQCAtMTMwOSw4ICsxNDY3LDkgQEAKIAkJCXZtazgweHhfcmVhZF9lZXByb20oZGV2LCBJQzZfVkVSU0lPTik7CiAJCQlwcmludGsoS0VSTl9JTkZPICJjb21lZGkjOiB2bWs4MHh4OiAlc1xuIiwKIAkJCSAgICAgICBkZXYtPmZ3LmljNl92ZXJzKTsKLQkJfSBlbHNlCisJCX0gZWxzZSB7CiAJCQlkYmdjbSgiY29tZWRpIzogdm1rODB4eDogbm8gY29ubi4gdG8gQ1BVXG4iKTsKKwkJfQogCX0KIAogCWlmIChkZXYtPmJvYXJkLm1vZGVsID09IFZNSzgwNTVfTU9ERUwpCkBAIC0xMzIzLDYgKzE0ODIsOCBAQAogCiAJbXV0ZXhfdW5sb2NrKCZnbGJfbXV0ZXgpOwogCisJY29tZWRpX3VzYl9hdXRvX2NvbmZpZyhkZXYtPnVkZXYsIEJPQVJETkFNRSk7CisKIAlyZXR1cm4gMDsKIGVycm9yOgogCW11dGV4X3VubG9jaygmZ2xiX211dGV4KTsKQEAgLTEzMzksNiArMTUwMCw4IEBACiAJaWYgKCFkZXYpCiAJCXJldHVybjsKIAorCWNvbWVkaV91c2JfYXV0b191bmNvbmZpZyhkZXYtPnVkZXYpOworCiAJbXV0ZXhfbG9jaygmZ2xiX211dGV4KTsKIAlkb3duKCZkZXYtPmxpbWl0X3NlbSk7CiAKQEAgLTEzNzYsMTAgKzE1MzksMTYgQEAKIAogc3RhdGljIGludCBfX2luaXQgdm1rODB4eF9pbml0KHZvaWQpCiB7CisJaW50IHJldHZhbDsKKwogCXByaW50ayhLRVJOX0lORk8gInZtazgweHg6IHZlcnNpb24gMC44LjAxICIKIAkgICAgICAgIk1hbnVlbCBHZWJlbGUgPGZvcmVuc2l4c0BnbXguZGU+XG4iKTsKLQl1c2JfcmVnaXN0ZXIoJnZtazgweHhfZHJpdmVyKTsKLQlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX3ZtazgweHgpOworCisJcmV0dmFsID0gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX3ZtazgweHgpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dXJuIHVzYl9yZWdpc3Rlcigmdm1rODB4eF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgdm1rODB4eF9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3B0bTEyMTcvY2xlYXJwYWRfdG0xMjE3LmMgYi9kcml2ZXJzL3N0YWdpbmcvY3B0bTEyMTcvY2xlYXJwYWRfdG0xMjE3LmMKaW5kZXggMGZlNzEzZS4uNTQ1NmY4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NwdG0xMjE3L2NsZWFycGFkX3RtMTIxNy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jcHRtMTIxNy9jbGVhcnBhZF90bTEyMTcuYwpAQCAtNDYyLDggKzQ2Miw4IEBACiAJCWlmIChpbnB1dF9kZXYgPT0gTlVMTCkgewogCQkJZGV2X2Vycih0cy0+ZGV2LAogCQkJCSJjcF90bTEyMTc6SW5wdXQgRGV2aWNlIFN0cnVjdCBhbGxvYyBmYWlsZWRcbiIpOwotCQkJa2ZyZWUodHMpOwotCQkJcmV0dXJuIC1FTk9NRU07CisJCQlyZXR2YWwgPSAtRU5PTUVNOworCQkJZ290byBmYWlsOwogCQl9CiAJCWlucHV0X2luZm8gPSAmdHMtPmNwX2lucHV0X2luZm9baV07CiAJCXNucHJpbnRmKGlucHV0X2luZm8tPm5hbWUsIHNpemVvZihpbnB1dF9pbmZvLT5uYW1lKSwKQEAgLTQ4Niw2ICs0ODYsNyBAQAogCQkJZGV2X2Vycih0cy0+ZGV2LAogCQkJCSJJbnB1dCBkZXYgcmVnaXN0cmF0aW9uIGZhaWxlZCBmb3IgJXNcbiIsCiAJCQkJCWlucHV0X2Rldi0+bmFtZSk7CisJCQlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOwogCQkJZ290byBmYWlsOwogCQl9CiAJCWlucHV0X2luZm8tPmlucHV0ID0gaW5wdXRfZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9iY19kdHNfdHlwZXMuaCBiL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvYmNfZHRzX3R5cGVzLmgKaW5kZXggNmZkODA4OS4uZDIxMzFlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9iY19kdHNfdHlwZXMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2JjX2R0c190eXBlcy5oCkBAIC02NSw3ICs2NSw2IEBACiAjZWxzZQogCiAvKiBGb3IgS2VybmVsIHVzYWdlLi4gKi8KLXR5cGVkZWYgYm9vbAliY19ib29sX3Q7CiAjZW5kaWYKIAogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvY3J5c3RhbGhkX21pc2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvY3J5c3RhbGhkX21pc2MuYwppbmRleCAyYzUxMzhlLi41ZmEwYzZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2NyeXN0YWxoZF9taXNjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9jcnlzdGFsaGRfbWlzYy5jCkBAIC0zMTEsNyArMzExLDcgQEAKIAkJcmMgPSAtRUlOVkFMOwogCQlzdHMgPSBCQ19TVFNfSU5WX0FSRzsKIAkJQkNNTE9HX0VSUigiSW52YWxpZCBsZW46JWRcbiIsIGxlbik7Ci0JfTsKKwl9CiAKIAlpZiAocmMgJiYgKHN0cyA9PSBCQ19TVFNfU1VDQ0VTUykpCiAJCXN0cyA9IEJDX1NUU19FUlJPUjsKQEAgLTM1Niw3ICszNTYsNyBAQAogCQlyYyA9IC1FSU5WQUw7CiAJCXN0cyA9IEJDX1NUU19JTlZfQVJHOwogCQlCQ01MT0dfRVJSKCJJbnZhbGlkIGxlbjolZFxuIiwgbGVuKTsKLQl9OworCX0KIAogCWlmIChyYyAmJiAoc3RzID09IEJDX1NUU19TVUNDRVNTKSkKIAkJc3RzID0gQkNfU1RTX0VSUk9SOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlby5jIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlby5jCmluZGV4IGFiMDUzOTIuLjdhMDMwNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvLmMKQEAgLTgzMiw2ICs4MzIsNyBAQAogCiAgICAgICAgaWYgKE5VTEwgPT0gZGV2KSB7CiAJCW11dGV4X3VubG9jaygmY3gyNTgyMV9kZXZsaXN0X211dGV4KTsKKwkJa2ZyZWUoZmgpOwogCQlyZXR1cm4gLUVOT0RFVjsKICAgICAgICB9CiAKQEAgLTE1NzMsNyArMTU3NCw3IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIG5vdGhpbmcgKi8gOwotCX07CisJfQogCiAJc3dpdGNoIChjdGwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvZWFzeWNhcF9tYWluLmMgYi9kcml2ZXJzL3N0YWdpbmcvZWFzeWNhcC9lYXN5Y2FwX21haW4uYwppbmRleCBjZWUzMjUyLi42MmUwN2Y2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZWFzeWNhcC9lYXN5Y2FwX21haW4uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZWFzeWNhcC9lYXN5Y2FwX21haW4uYwpAQCAtMjAxLDkgKzIwMSw5IEBACiBzdGF0aWMgaW50IHJlc2V0KHN0cnVjdCBlYXN5Y2FwICpwZWFzeWNhcCkKIHsKIAlzdHJ1Y3QgZWFzeWNhcF9zdGFuZGFyZCBjb25zdCAqcGVhc3ljYXBfc3RhbmRhcmQ7Ci0JaW50IGksIHJjLCBpbnB1dCwgcmF0ZTsKKwlpbnQgZm10aWR4LCBpbnB1dCwgcmF0ZTsKIAlib29sIG50c2MsIG90aGVyOwotCWludCBmbXRpZHg7CisJaW50IHJjOwogCiAJaWYgKCFwZWFzeWNhcCkgewogCQlTQVkoIkVSUk9SOiBwZWFzeWNhcCBpcyBOVUxMXG4iKTsKQEAgLTIyNiwzMyArMjI2LDI3IEBACiAJSk9NKDgsICJwZWFzeWNhcC0+bnRzYz0lZFxuIiwgcGVhc3ljYXAtPm50c2MpOwogCiAJcmF0ZSA9IHJlYWR5X3NhYShwZWFzeWNhcC0+cHVzYl9kZXZpY2UpOwotCWlmICgwID4gcmF0ZSkgeworCWlmIChyYXRlIDwgMCkgewogCQlKT00oOCwgIm5vdCByZWFkeSB0byBjYXB0dXJlIGFmdGVyICVpIG1zIC4uLlxuIiwgUEFUSUVOQ0UpOwotCQlpZiAocGVhc3ljYXAtPm50c2MpIHsKLQkJCUpPTSg4LCAiLi4uIHRyeWluZyBQQUwgLi4uXG4iKTsgIG50c2MgPSBmYWxzZTsKLQkJfSBlbHNlIHsKLQkJCUpPTSg4LCAiLi4uIHRyeWluZyBOVFNDIC4uLlxuIik7IG50c2MgPSB0cnVlOwotCX0KLQlyYyA9IHNldHVwX3N0ayhwZWFzeWNhcC0+cHVzYl9kZXZpY2UsIG50c2MpOwotCWlmICgwID09IHJjKQotCQlKT00oNCwgInNldHVwX3N0aygpIE9LXG4iKTsKLQllbHNlIHsKLQkJU0FNKCJFUlJPUjogc2V0dXBfc3RrKCkgcmMgPSAlaVxuIiwgcmMpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JcmMgPSBzZXR1cF9zYWEocGVhc3ljYXAtPnB1c2JfZGV2aWNlLCBudHNjKTsKLQlpZiAoMCA9PSByYykKLQkJSk9NKDQsICJzZXR1cF9zYWEoKSBPS1xuIik7Ci0JZWxzZSB7Ci0JCVNBTSgiRVJST1I6IHNldHVwX3NhYSgpIHJjID0gJWlcbiIsIHJjKTsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCXJhdGUgPSByZWFkeV9zYWEocGVhc3ljYXAtPnB1c2JfZGV2aWNlKTsKLQlpZiAoMCA+IHJhdGUpIHsKLQkJSk9NKDgsICJub3QgcmVhZHkgdG8gY2FwdHVyZSBhZnRlciAlaSBtcyAuLi5cbiIsIFBBVElFTkNFKTsKLQkJSk9NKDgsICIuLi4gc2FhIHJlZ2lzdGVyIDB4MUYgaGFzIDB4JTAyWFxuIiwKKwkJbnRzYyA9ICFwZWFzeWNhcC0+bnRzYzsKKwkJSk9NKDgsICIuLi4gdHJ5aW5nICAlcyAuLlxuIiwgbnRzYyA/ICJOVFNDIiA6ICJQQUwiKTsKKwkJcmMgPSBzZXR1cF9zdGsocGVhc3ljYXAtPnB1c2JfZGV2aWNlLCBudHNjKTsKKwkJaWYgKHJjKSB7CisJCQlTQU0oIkVSUk9SOiBzZXR1cF9zdGsoKSByYyA9ICVpXG4iLCByYyk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQlyYyA9IHNldHVwX3NhYShwZWFzeWNhcC0+cHVzYl9kZXZpY2UsIG50c2MpOworCQlpZiAocmMpIHsKKwkJCVNBTSgiRVJST1I6IHNldHVwX3NhYSgpIHJjID0gJWlcbiIsIHJjKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisKKwkJcmF0ZSA9IHJlYWR5X3NhYShwZWFzeWNhcC0+cHVzYl9kZXZpY2UpOworCQlpZiAocmF0ZSA8IDApIHsKKwkJCUpPTSg4LCAibm90IHJlYWR5IHRvIGNhcHR1cmUgYWZ0ZXIgJWkgbXNcbiIsIFBBVElFTkNFKTsKKwkJCUpPTSg4LCAiLi4uIHNhYSByZWdpc3RlciAweDFGIGhhcyAweCUwMlhcbiIsCiAJCQkJCXJlYWRfc2FhKHBlYXN5Y2FwLT5wdXNiX2RldmljZSwgMHgxRikpOwotCQludHNjID0gcGVhc3ljYXAtPm50c2M7CisJCQludHNjID0gcGVhc3ljYXAtPm50c2M7CiAJCX0gZWxzZSB7CiAJCQlKT00oOCwgIi4uLiBzdWNjZXNzIGF0IHNlY29uZCB0cnk6ICAlaT1yYXRlXG4iLCByYXRlKTsKIAkJCW50c2MgPSAoMCA8IChyYXRlLzIpKSA/IHRydWUgOiBmYWxzZSA7CkBAIC0yNjYsMjIgKzI2MCwxNyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAJcmMgPSBzZXR1cF9zdGsocGVhc3ljYXAtPnB1c2JfZGV2aWNlLCBudHNjKTsKLQlpZiAoMCA9PSByYykKLQkJSk9NKDQsICJzZXR1cF9zdGsoKSBPS1xuIik7Ci0JZWxzZSB7CisJaWYgKHJjKSB7CiAJCVNBTSgiRVJST1I6IHNldHVwX3N0aygpIHJjID0gJWlcbiIsIHJjKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCXJjID0gc2V0dXBfc2FhKHBlYXN5Y2FwLT5wdXNiX2RldmljZSwgbnRzYyk7Ci0JaWYgKDAgPT0gcmMpCi0JCUpPTSg0LCAic2V0dXBfc2FhKCkgT0tcbiIpOwotCWVsc2UgeworCWlmIChyYykgewogCQlTQU0oIkVSUk9SOiBzZXR1cF9zYWEoKSByYyA9ICVpXG4iLCByYyk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCAxODA7IGkrKykKLQkJcGVhc3ljYXAtPm1lcml0W2ldID0gMDsKKwltZW1zZXQocGVhc3ljYXAtPm1lcml0LCAwLCBzaXplb2YocGVhc3ljYXAtPm1lcml0KSk7CiAKIAlwZWFzeWNhcC0+dmlkZW9fZW9mID0gMDsKIAlwZWFzeWNhcC0+YXVkaW9fZW9mID0gMDsKQEAgLTI5ODYsMjYgKzI5NzUsMTggQEAKICAqICBUSU1FUywgT05DRSBGT1IgRUFDSCBPRiBUSEUgVEhSRUUgSU5URVJGQUNFUy4gIEJFV0FSRS4KICAqLwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludCBlYXN5Y2FwX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqcHVzYl9pbnRlcmZhY2UsCi0JCQkgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKnB1c2JfZGV2aWNlX2lkKQorc3RhdGljIGludCBlYXN5Y2FwX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnB1c2JfZGV2aWNlOwotCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKnB1c2JfaG9zdF9pbnRlcmZhY2U7Ci0Jc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpwZXBkOwotCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgKnB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3I7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHQ7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcDsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICppbnRlcmZhY2U7CiAJc3RydWN0IHVyYiAqcHVyYjsKIAlzdHJ1Y3QgZWFzeWNhcCAqcGVhc3ljYXA7CiAJaW50IG5kb25nOwogCXN0cnVjdCBkYXRhX3VyYiAqcGRhdGFfdXJiOwotCXNpemVfdCB3TWF4UGFja2V0U2l6ZTsKLQlpbnQgSVNPQ3dNYXhQYWNrZXRTaXplOwotCWludCBCVUxLd01heFBhY2tldFNpemU7Ci0JaW50IElOVHdNYXhQYWNrZXRTaXplOwotCWludCBDVFJMd01heFBhY2tldFNpemU7Ci0JdTggYkVuZHBvaW50QWRkcmVzczsKLQl1OCBJU09DYkVuZHBvaW50QWRkcmVzczsKLQl1OCBJTlRiRW5kcG9pbnRBZGRyZXNzOwotCWludCBpc2luLCBpLCBqLCBrLCBtLCByYzsKKwlpbnQgaSwgaiwgaywgbSwgcmM7CiAJdTggYkludGVyZmFjZU51bWJlcjsKIAl1OCBiSW50ZXJmYWNlQ2xhc3M7CiAJdTggYkludGVyZmFjZVN1YkNsYXNzOwpAQCAtMzAyMSwyMyArMzAwMiwxNyBAQAogCXN0cnVjdCBpbnB1dHNldCAqaW5wdXRzZXQ7CiAJc3RydWN0IHY0bDJfZGV2aWNlICpwdjRsMl9kZXZpY2U7CiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qCi0gKiAgR0VUIFBPSU5URVIgVE8gU1RSVUNUVVJFIHVzYl9kZXZpY2UKLSAqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCXB1c2JfZGV2aWNlID0gaW50ZXJmYWNlX3RvX3VzYmRldihwdXNiX2ludGVyZmFjZSk7CisJdXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKIAotCUpPVCg0LCAiYk51bUNvbmZpZ3VyYXRpb25zPSVpXG4iLCBwdXNiX2RldmljZS0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMpOwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCXB1c2JfaG9zdF9pbnRlcmZhY2UgPSBwdXNiX2ludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmc7Ci0JaWYgKCFwdXNiX2hvc3RfaW50ZXJmYWNlKSB7Ci0JCVNBWSgiRVJST1I6IHB1c2JfaG9zdF9pbnRlcmZhY2UgaXMgTlVMTFxuIik7CisJYWx0ID0gdXNiX2FsdG51bV90b19hbHRzZXR0aW5nKGludGYsIDApOworCWlmICghYWx0KSB7CisJCVNBWSgiRVJST1I6IHVzYl9ob3N0X2ludGVyZmFjZSBub3QgZm91bmRcbiIpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9Ci0JcHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciA9ICYocHVzYl9ob3N0X2ludGVyZmFjZS0+ZGVzYyk7Ci0JaWYgKCFwdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yKSB7Ci0JCVNBWSgiRVJST1I6IHB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgaXMgTlVMTFxuIik7CisJaW50ZXJmYWNlID0gJmFsdC0+ZGVzYzsKKwlpZiAoIWludGVyZmFjZSkgeworCQlTQVkoIkVSUk9SOiBpbnRmX2Rlc2NyaXB0b3IgaXMgTlVMTFxuIik7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTMwNDUsMTYgKzMwMjAsMTUgQEAKICAqICBHRVQgUFJPUEVSVElFUyBPRiBQUk9CRUQgSU5URVJGQUNFCiAgKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQliSW50ZXJmYWNlTnVtYmVyID0gcHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvci0+YkludGVyZmFjZU51bWJlcjsKLQliSW50ZXJmYWNlQ2xhc3MgPSBwdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yLT5iSW50ZXJmYWNlQ2xhc3M7Ci0JYkludGVyZmFjZVN1YkNsYXNzID0gcHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvci0+YkludGVyZmFjZVN1YkNsYXNzOworCWJJbnRlcmZhY2VOdW1iZXIgPSBpbnRlcmZhY2UtPmJJbnRlcmZhY2VOdW1iZXI7CisJYkludGVyZmFjZUNsYXNzID0gaW50ZXJmYWNlLT5iSW50ZXJmYWNlQ2xhc3M7CisJYkludGVyZmFjZVN1YkNsYXNzID0gaW50ZXJmYWNlLT5iSW50ZXJmYWNlU3ViQ2xhc3M7CiAKIAlKT1QoNCwgImludGZbJWldOiBudW1fYWx0c2V0dGluZz0laVxuIiwKLQkJCWJJbnRlcmZhY2VOdW1iZXIsIHB1c2JfaW50ZXJmYWNlLT5udW1fYWx0c2V0dGluZyk7CisJCQliSW50ZXJmYWNlTnVtYmVyLCBpbnRmLT5udW1fYWx0c2V0dGluZyk7CiAJSk9UKDQsICJpbnRmWyVpXTogY3VyX2FsdHNldHRpbmcgLSBhbHRzZXR0aW5nPSVsaVxuIiwKIAkJYkludGVyZmFjZU51bWJlciwKLQkJKGxvbmcgaW50KShwdXNiX2ludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmcgLQotCQkJCXB1c2JfaW50ZXJmYWNlLT5hbHRzZXR0aW5nKSk7CisJCShsb25nIGludCkoaW50Zi0+Y3VyX2FsdHNldHRpbmcgLSBpbnRmLT5hbHRzZXR0aW5nKSk7CiAJSk9UKDQsICJpbnRmWyVpXTogYkludGVyZmFjZUNsYXNzPTB4JTAyWCBiSW50ZXJmYWNlU3ViQ2xhc3M9MHglMDJYXG4iLAogCQkJYkludGVyZmFjZU51bWJlciwgYkludGVyZmFjZUNsYXNzLCBiSW50ZXJmYWNlU3ViQ2xhc3MpOwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMzE0MCw4ICszMTE0LDggQEAKICAqICAuLi4gQU5EIEZVUlRIRVIgSU5JVElBTElaRSBUSEUgU1RSVUNUVVJFCiAqLwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCQlwZWFzeWNhcC0+cHVzYl9kZXZpY2UgPSBwdXNiX2RldmljZTsKLQkJcGVhc3ljYXAtPnB1c2JfaW50ZXJmYWNlID0gcHVzYl9pbnRlcmZhY2U7CisJCXBlYXN5Y2FwLT5wdXNiX2RldmljZSA9IHVzYmRldjsKKwkJcGVhc3ljYXAtPnB1c2JfaW50ZXJmYWNlID0gaW50ZjsKIAogCQlwZWFzeWNhcC0+aWxrID0gMDsKIAkJcGVhc3ljYXAtPm1pY3JvcGhvbmUgPSBmYWxzZTsKQEAgLTMyNzUsNyArMzI0OSw3IEBACiAgKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAkJZm9yIChuZG9uZyA9IDA7IG5kb25nIDwgRE9OR0xFX01BTlk7IG5kb25nKyspIHsKLQkJCWlmIChwdXNiX2RldmljZSA9PSBlYXN5Y2FwZGM2MF9kb25nbGVbbmRvbmddLnBlYXN5Y2FwLT4KKwkJCWlmICh1c2JkZXYgPT0gZWFzeWNhcGRjNjBfZG9uZ2xlW25kb25nXS5wZWFzeWNhcC0+CiAJCQkJCQkJCQlwdXNiX2RldmljZSkgewogCQkJCXBlYXN5Y2FwID0gZWFzeWNhcGRjNjBfZG9uZ2xlW25kb25nXS5wZWFzeWNhcDsKIAkJCQlKT1QoOCwgImludGZbJWldOiBkb25nbGVbJWldLnBlYXN5Y2FwXG4iLApAQCAtMzMwMiw3ICszMjc2LDcgQEAKICovCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAJCWlmIChtZW1jbXAoJnBlYXN5Y2FwLT50ZWxsdGFsZVswXSwgVEVMTFRBTEUsIHN0cmxlbihURUxMVEFMRSkpKSB7Ci0JCQlwdjRsMl9kZXZpY2UgPSB1c2JfZ2V0X2ludGZkYXRhKHB1c2JfaW50ZXJmYWNlKTsKKwkJCXB2NGwyX2RldmljZSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CiAJCQlpZiAoIXB2NGwyX2RldmljZSkgewogCQkJCVNBWSgiRVJST1I6IHB2NGwyX2RldmljZSBpcyBOVUxMXG4iKTsKIAkJCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTMzNTEsMjIwICszMzI1LDE1NSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCWlzb2thbHQgPSAwOwogCi0JZm9yIChpID0gMDsgaSA8IHB1c2JfaW50ZXJmYWNlLT5udW1fYWx0c2V0dGluZzsgaSsrKSB7Ci0JCXB1c2JfaG9zdF9pbnRlcmZhY2UgPSAmKHB1c2JfaW50ZXJmYWNlLT5hbHRzZXR0aW5nW2ldKTsKLQkJaWYgKCFwdXNiX2hvc3RfaW50ZXJmYWNlKSB7Ci0JCQlTQU0oIkVSUk9SOiBwdXNiX2hvc3RfaW50ZXJmYWNlIGlzIE5VTExcbiIpOworCWZvciAoaSA9IDA7IGkgPCBpbnRmLT5udW1fYWx0c2V0dGluZzsgaSsrKSB7CisJCWFsdCA9IHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyhpbnRmLCBpKTsKKwkJaWYgKCFhbHQpIHsKKwkJCVNBTSgiRVJST1I6IGFsdCBpcyBOVUxMXG4iKTsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9Ci0JCXB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgPSAmKHB1c2JfaG9zdF9pbnRlcmZhY2UtPmRlc2MpOwotCQlpZiAoIXB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IpIHsKLQkJCVNBTSgiRVJST1I6IHB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgaXMgTlVMTFxuIik7CisJCWludGVyZmFjZSA9ICZhbHQtPmRlc2M7CisJCWlmICghaW50ZXJmYWNlKSB7CisJCQlTQU0oIkVSUk9SOiBpbnRmX2Rlc2NyaXB0b3IgaXMgTlVMTFxuIik7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCi0JCUpPTSg0LCAiaW50ZlslaV1hbHRbJWldOiBkZXNjLmJEZXNjcmlwdG9yVHlwZT0weCUwMlhcbiIsCi0JCWJJbnRlcmZhY2VOdW1iZXIsIGksIHB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3ItPmJEZXNjcmlwdG9yVHlwZSk7Ci0JCUpPTSg0LCAiaW50ZlslaV1hbHRbJWldOiBkZXNjLmJJbnRlcmZhY2VOdW1iZXI9MHglMDJYXG4iLAotCQliSW50ZXJmYWNlTnVtYmVyLCBpLCBwdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yLT5iSW50ZXJmYWNlTnVtYmVyKTsKLQkJSk9NKDQsICJpbnRmWyVpXWFsdFslaV06IGRlc2MuYkFsdGVybmF0ZVNldHRpbmc9MHglMDJYXG4iLAotCQliSW50ZXJmYWNlTnVtYmVyLCBpLCBwdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yLT5iQWx0ZXJuYXRlU2V0dGluZyk7Ci0JCUpPTSg0LCAiaW50ZlslaV1hbHRbJWldOiBkZXNjLmJOdW1FbmRwb2ludHM9MHglMDJYXG4iLAotCQliSW50ZXJmYWNlTnVtYmVyLCBpLCBwdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yLT5iTnVtRW5kcG9pbnRzKTsKLQkJSk9NKDQsICJpbnRmWyVpXWFsdFslaV06IGRlc2MuYkludGVyZmFjZUNsYXNzPTB4JTAyWFxuIiwKLQkJYkludGVyZmFjZU51bWJlciwgaSwgcHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvci0+YkludGVyZmFjZUNsYXNzKTsKLQkJSk9NKDQsICJpbnRmWyVpXWFsdFslaV06IGRlc2MuYkludGVyZmFjZVN1YkNsYXNzPTB4JTAyWFxuIiwKLQkJYkludGVyZmFjZU51bWJlciwgaSwgcHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvci0+YkludGVyZmFjZVN1YkNsYXNzKTsKLQkJSk9NKDQsICJpbnRmWyVpXWFsdFslaV06IGRlc2MuYkludGVyZmFjZVByb3RvY29sPTB4JTAyWFxuIiwKLQkJYkludGVyZmFjZU51bWJlciwgaSwgcHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvci0+YkludGVyZmFjZVByb3RvY29sKTsKLQkJSk9NKDQsICJpbnRmWyVpXWFsdFslaV06IGRlc2MuaUludGVyZmFjZT0weCUwMlhcbiIsCi0JCWJJbnRlcmZhY2VOdW1iZXIsIGksIHB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3ItPmlJbnRlcmZhY2UpOwotCi0JCUlTT0N3TWF4UGFja2V0U2l6ZSA9IC0xOwotCQlCVUxLd01heFBhY2tldFNpemUgPSAtMTsKLQkJSU5Ud01heFBhY2tldFNpemUgPSAtMTsKLQkJQ1RSTHdNYXhQYWNrZXRTaXplID0gLTE7Ci0JCUlTT0NiRW5kcG9pbnRBZGRyZXNzID0gMDsKLQkJSU5UYkVuZHBvaW50QWRkcmVzcyA9IDA7Ci0KLQkJaWYgKDAgPT0gcHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvci0+Yk51bUVuZHBvaW50cykKKwkJaWYgKDAgPT0gaW50ZXJmYWNlLT5iTnVtRW5kcG9pbnRzKQogCQkJSk9NKDQsICJpbnRmWyVpXWFsdFslaV0gaGFzIG5vIGVuZHBvaW50c1xuIiwKIAkJCQkJCWJJbnRlcmZhY2VOdW1iZXIsIGkpOwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCQlmb3IgKGogPSAwOyBqIDwgcHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvci0+Yk51bUVuZHBvaW50czsgaisrKSB7Ci0JCQlwZXBkID0gJihwdXNiX2hvc3RfaW50ZXJmYWNlLT5lbmRwb2ludFtqXS5kZXNjKTsKLQkJCWlmICghcGVwZCkgewotCQkJCVNBTSgiRVJST1I6ICBwZXBkIGlzIE5VTEwuXG4iKTsKKwkJZm9yIChqID0gMDsgaiA8IGludGVyZmFjZS0+Yk51bUVuZHBvaW50czsgaisrKSB7CisJCQllcCA9ICZhbHQtPmVuZHBvaW50W2pdLmRlc2M7CisJCQlpZiAoIWVwKSB7CisJCQkJU0FNKCJFUlJPUjogIGVwIGlzIE5VTEwuXG4iKTsKIAkJCQlTQU0oIi4uLi4uLiBza2lwcGluZ1xuIik7CiAJCQkJY29udGludWU7CiAJCQl9Ci0JCQl3TWF4UGFja2V0U2l6ZSA9IGxlMTZfdG9fY3B1KHBlcGQtPndNYXhQYWNrZXRTaXplKTsKLQkJCWJFbmRwb2ludEFkZHJlc3MgPSBwZXBkLT5iRW5kcG9pbnRBZGRyZXNzOwogCi0JCQlKT00oNCwgImludGZbJWldYWx0WyVpXWVuZFslaV06IGJFbmRwb2ludEFkZHJlc3M9MHglWFxuIiwKLQkJCQkJYkludGVyZmFjZU51bWJlciwgaSwgaiwKLQkJCQkJcGVwZC0+YkVuZHBvaW50QWRkcmVzcyk7Ci0JCQlKT00oNCwgImludGZbJWldYWx0WyVpXWVuZFslaV06IGJtQXR0cmlidXRlcz0weCVYXG4iLAotCQkJCQliSW50ZXJmYWNlTnVtYmVyLCBpLCBqLAotCQkJCQlwZXBkLT5ibUF0dHJpYnV0ZXMpOwotCQkJSk9NKDQsICJpbnRmWyVpXWFsdFslaV1lbmRbJWldOiB3TWF4UGFja2V0U2l6ZT0laVxuIiwKLQkJCQkJYkludGVyZmFjZU51bWJlciwgaSwgaiwKLQkJCQkJcGVwZC0+d01heFBhY2tldFNpemUpOwotCQkJSk9NKDQsICJpbnRmWyVpXWFsdFslaV1lbmRbJWldOiBiSW50ZXJ2YWw9JWlcbiIsCi0JCQkJCWJJbnRlcmZhY2VOdW1iZXIsIGksIGosCi0JCQkJCXBlcGQtPmJJbnRlcnZhbCk7Ci0KLQkJCWlmIChwZXBkLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgewotCQkJCUpPTSg0LCAiaW50ZlslaV1hbHRbJWldZW5kWyVpXSBpcyBhbiAgSU4gIGVuZHBvaW50XG4iLAotCQkJCQkJCWJJbnRlcmZhY2VOdW1iZXIsIGksIGopOwotCQkJCWlzaW4gPSAxOwotCQkJfSBlbHNlIHsKLQkJCQlKT00oNCwgImludGZbJWldYWx0WyVpXWVuZFslaV0gaXMgYW4gIE9VVCBlbmRwb2ludFxuIiwKLQkJCQkJCQliSW50ZXJmYWNlTnVtYmVyLCBpLCBqKTsKLQkJCQlTQU0oIkVSUk9SOiBPVVQgZW5kcG9pbnQgdW5leHBlY3RlZFxuIik7Ci0JCQkJU0FNKCIuLi4uLi4gY29udGludWluZ1xuIik7Ci0JCQkJaXNpbiA9IDA7CisJCQlpZiAoIXVzYl9lbmRwb2ludF9pc19pc29jX2luKGVwKSkgeworCQkJCUpPTSg0LCAiaW50ZlslaV1hbHRbJWldZW5kWyVpXSBpcyBhICVkIGVuZHBvaW50XG4iLAorCQkJCQkJYkludGVyZmFjZU51bWJlciwKKwkJCQkJCWksIGosIGVwLT5ibUF0dHJpYnV0ZXMpOworCQkJCWlmICh1c2JfZW5kcG9pbnRfZGlyX291dChlcCkpIHsKKwkJCQkJU0FNKCJFUlJPUjogT1VUIGVuZHBvaW50IHVuZXhwZWN0ZWRcbiIpOworCQkJCQlTQU0oIi4uLi4uLiBjb250aW51aW5nXG4iKTsKKwkJCQl9CisJCQkJY29udGludWU7CiAJCQl9Ci0JCQlpZiAoKHBlcGQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PQotCQkJCQkJVVNCX0VORFBPSU5UX1hGRVJfSVNPQykgewotCQkJCUpPTSg0LCAiaW50ZlslaV1hbHRbJWldZW5kWyVpXSBpcyBhbiBJU09DIGVuZHBvaW50XG4iLAotCQkJCQkJCWJJbnRlcmZhY2VOdW1iZXIsIGksIGopOwotCQkJCWlmIChpc2luKSB7Ci0JCQkJCXN3aXRjaCAoYkludGVyZmFjZUNsYXNzKSB7Ci0JCQkJCWNhc2UgVVNCX0NMQVNTX1ZJREVPOgotCQkJCQljYXNlIFVTQl9DTEFTU19WRU5ET1JfU1BFQzogewotCQkJCQkJaWYgKCFwZWFzeWNhcCkgewotCQkJCQkJCVNBTSgiTUlTVEFLRTogIgotCQkJCQkJCQkicGVhc3ljYXAgaXMgTlVMTFxuIik7Ci0JCQkJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQkJCQl9Ci0JCQkJCQlpZiAocGVwZC0+d01heFBhY2tldFNpemUpIHsKLQkJCQkJCQlpZiAoOCA+IGlzb2thbHQpIHsKLQkJCQkJCQkJb2thbHRbaXNva2FsdF0gPSBpOwotCQkJCQkJCQlKT00oNCwKLQkJCQkJCQkJIiVpPW9rYWx0WyVpXVxuIiwKLQkJCQkJCQkJb2thbHRbaXNva2FsdF0sCi0JCQkJCQkJCWlzb2thbHQpOwotCQkJCQkJCQlva2Vwbltpc29rYWx0XSA9Ci0JCQkJCQkJCXBlcGQtPgotCQkJCQkJCQliRW5kcG9pbnRBZGRyZXNzICYKLQkJCQkJCQkJMHgwRjsKLQkJCQkJCQkJSk9NKDQsCi0JCQkJCQkJCSIlaT1va2VwblslaV1cbiIsCi0JCQkJCQkJCW9rZXBuW2lzb2thbHRdLAotCQkJCQkJCQlpc29rYWx0KTsKLQkJCQkJCQkJb2ttcHNbaXNva2FsdF0gPQotCQkJCQkJCQlsZTE2X3RvX2NwdShwZXBkLT4KLQkJCQkJCQkJd01heFBhY2tldFNpemUpOwotCQkJCQkJCQlKT00oNCwKLQkJCQkJCQkJIiVpPW9rbXBzWyVpXVxuIiwKLQkJCQkJCQkJb2ttcHNbaXNva2FsdF0sCi0JCQkJCQkJCWlzb2thbHQpOwotCQkJCQkJCQlpc29rYWx0Kys7Ci0JCQkJCQkJfQotCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQlpZiAoLTEgPT0gcGVhc3ljYXAtPgotCQkJCQkJCQl2aWRlb19hbHRzZXR0aW5nX29mZikgewotCQkJCQkJCQlwZWFzeWNhcC0+Ci0JCQkJCQkJCXZpZGVvX2FsdHNldHRpbmdfb2ZmID0KLQkJCQkJCQkJCQkgaTsKLQkJCQkJCQkJSk9NKDQsICIlaT12aWRlb18iCi0JCQkJCQkJCSJhbHRzZXR0aW5nX29mZiAiCi0JCQkJCQkJCQkiPD09PT1cbiIsCi0JCQkJCQkJCXBlYXN5Y2FwLT4KLQkJCQkJCQkJdmlkZW9fYWx0c2V0dGluZ19vZmYpOwotCQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJCVNBTSgiRVJST1I6IHBlYXN5Y2FwIgotCQkJCQkJCQkiLT52aWRlb19hbHRzZXR0aW5nXyIKLQkJCQkJCQkJIm9mZiBhbHJlYWR5IHNldFxuIik7Ci0JCQkJCQkJCVNBTSgiLi4uLi4uICIKLQkJCQkJCQkJImNvbnRpbnVpbmcgd2l0aCAiCi0JCQkJCQkJCSIlaT1wZWFzeWNhcC0+dmlkZW9fIgotCQkJCQkJCQkiYWx0c2V0dGluZ19vZmZcbiIsCi0JCQkJCQkJCXBlYXN5Y2FwLT4KLQkJCQkJCQkJdmlkZW9fYWx0c2V0dGluZ19vZmYpOwotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJCWJyZWFrOworCQkJc3dpdGNoIChiSW50ZXJmYWNlQ2xhc3MpIHsKKwkJCWNhc2UgVVNCX0NMQVNTX1ZJREVPOgorCQkJY2FzZSBVU0JfQ0xBU1NfVkVORE9SX1NQRUM6IHsKKwkJCQlpZiAoZXAtPndNYXhQYWNrZXRTaXplKSB7CisJCQkJCWlmICg4ID4gaXNva2FsdCkgeworCQkJCQkJb2thbHRbaXNva2FsdF0gPSBpOworCQkJCQkJSk9NKDQsCisJCQkJCQkiJWk9b2thbHRbJWldXG4iLAorCQkJCQkJb2thbHRbaXNva2FsdF0sCisJCQkJCQlpc29rYWx0KTsKKwkJCQkJCW9rZXBuW2lzb2thbHRdID0KKwkJCQkJCWVwLT4KKwkJCQkJCWJFbmRwb2ludEFkZHJlc3MgJgorCQkJCQkJMHgwRjsKKwkJCQkJCUpPTSg0LAorCQkJCQkJIiVpPW9rZXBuWyVpXVxuIiwKKwkJCQkJCW9rZXBuW2lzb2thbHRdLAorCQkJCQkJaXNva2FsdCk7CisJCQkJCQlva21wc1tpc29rYWx0XSA9CisJCQkJCQlsZTE2X3RvX2NwdShlcC0+CisJCQkJCQl3TWF4UGFja2V0U2l6ZSk7CisJCQkJCQlKT00oNCwKKwkJCQkJCSIlaT1va21wc1slaV1cbiIsCisJCQkJCQlva21wc1tpc29rYWx0XSwKKwkJCQkJCWlzb2thbHQpOworCQkJCQkJaXNva2FsdCsrOwogCQkJCQl9Ci0JCQkJCWNhc2UgVVNCX0NMQVNTX0FVRElPOiB7Ci0JCQkJCQlpZiAoYkludGVyZmFjZVN1YkNsYXNzICE9Ci0JCQkJCQkgICAgVVNCX1NVQkNMQVNTX0FVRElPU1RSRUFNSU5HKQotCQkJCQkJCWJyZWFrOwotCQkJCQkJaWYgKCFwZWFzeWNhcCkgewotCQkJCQkJCVNBTSgiTUlTVEFLRTogIgotCQkJCQkJCSJwZWFzeWNhcCBpcyBOVUxMXG4iKTsKLQkJCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCQkJCX0KLQkJCQkJCWlmIChwZXBkLT53TWF4UGFja2V0U2l6ZSkgewotCQkJCQkJCWlmICg4ID4gaXNva2FsdCkgewotCQkJCQkJCQlva2FsdFtpc29rYWx0XSA9IGkgOwotCQkJCQkJCQlKT00oNCwKLQkJCQkJCQkJIiVpPW9rYWx0WyVpXVxuIiwKLQkJCQkJCQkJb2thbHRbaXNva2FsdF0sCi0JCQkJCQkJCWlzb2thbHQpOwotCQkJCQkJCQlva2Vwbltpc29rYWx0XSA9Ci0JCQkJCQkJCXBlcGQtPgotCQkJCQkJCQliRW5kcG9pbnRBZGRyZXNzICYKLQkJCQkJCQkJMHgwRjsKLQkJCQkJCQkJSk9NKDQsCi0JCQkJCQkJCSIlaT1va2VwblslaV1cbiIsCi0JCQkJCQkJCW9rZXBuW2lzb2thbHRdLAotCQkJCQkJCQlpc29rYWx0KTsKLQkJCQkJCQkJb2ttcHNbaXNva2FsdF0gPQotCQkJCQkJCQlsZTE2X3RvX2NwdShwZXBkLT4KLQkJCQkJCQkJd01heFBhY2tldFNpemUpOwotCQkJCQkJCQlKT00oNCwKLQkJCQkJCQkJIiVpPW9rbXBzWyVpXVxuIiwKLQkJCQkJCQkJb2ttcHNbaXNva2FsdF0sCi0JCQkJCQkJCWlzb2thbHQpOwotCQkJCQkJCQlpc29rYWx0Kys7Ci0JCQkJCQkJfQotCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQlpZiAoLTEgPT0gcGVhc3ljYXAtPgotCQkJCQkJCQlhdWRpb19hbHRzZXR0aW5nX29mZikgewotCQkJCQkJCQlwZWFzeWNhcC0+Ci0JCQkJCQkJCWF1ZGlvX2FsdHNldHRpbmdfb2ZmID0KLQkJCQkJCQkJCQkgaTsKLQkJCQkJCQkJSk9NKDQsICIlaT1hdWRpb18iCi0JCQkJCQkJCSJhbHRzZXR0aW5nX29mZiAiCi0JCQkJCQkJCSI8PT09PVxuIiwKLQkJCQkJCQkJcGVhc3ljYXAtPgotCQkJCQkJCQlhdWRpb19hbHRzZXR0aW5nX29mZik7Ci0JCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQkJU0FNKCJFUlJPUjogcGVhc3ljYXAiCi0JCQkJCQkJCSItPmF1ZGlvX2FsdHNldHRpbmdfIgotCQkJCQkJCQkib2ZmIGFscmVhZHkgc2V0XG4iKTsKLQkJCQkJCQkJU0FNKCIuLi4uLi4gIgotCQkJCQkJCQkiY29udGludWluZyB3aXRoICIKLQkJCQkJCQkJIiVpPXBlYXN5Y2FwLT4iCi0JCQkJCQkJCSJhdWRpb19hbHRzZXR0aW5nXyIKLQkJCQkJCQkJIm9mZlxuIiwKLQkJCQkJCQkJcGVhc3ljYXAtPgotCQkJCQkJCQlhdWRpb19hbHRzZXR0aW5nX29mZik7Ci0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCQlkZWZhdWx0OgotCQkJCQkJYnJlYWs7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKC0xID09IHBlYXN5Y2FwLT4KKwkJCQkJCXZpZGVvX2FsdHNldHRpbmdfb2ZmKSB7CisJCQkJCQlwZWFzeWNhcC0+CisJCQkJCQl2aWRlb19hbHRzZXR0aW5nX29mZiA9CisJCQkJCQkJCSBpOworCQkJCQkJSk9NKDQsICIlaT12aWRlb18iCisJCQkJCQkiYWx0c2V0dGluZ19vZmYgIgorCQkJCQkJCSI8PT09PVxuIiwKKwkJCQkJCXBlYXN5Y2FwLT4KKwkJCQkJCXZpZGVvX2FsdHNldHRpbmdfb2ZmKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCVNBTSgiRVJST1I6IHBlYXN5Y2FwIgorCQkJCQkJIi0+dmlkZW9fYWx0c2V0dGluZ18iCisJCQkJCQkib2ZmIGFscmVhZHkgc2V0XG4iKTsKKwkJCQkJCVNBTSgiLi4uLi4uICIKKwkJCQkJCSJjb250aW51aW5nIHdpdGggIgorCQkJCQkJIiVpPXBlYXN5Y2FwLT52aWRlb18iCisJCQkJCQkiYWx0c2V0dGluZ19vZmZcbiIsCisJCQkJCQlwZWFzeWNhcC0+CisJCQkJCQl2aWRlb19hbHRzZXR0aW5nX29mZik7CiAJCQkJCX0KIAkJCQl9Ci0JCQl9IGVsc2UgaWYgKChwZXBkLT5ibUF0dHJpYnV0ZXMgJgotCQkJCQkJCVVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PQotCQkJCQkJCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEspIHsKLQkJCQlKT00oNCwgImludGZbJWldYWx0WyVpXWVuZFslaV0gaXMgYSAgQlVMSyBlbmRwb2ludFxuIiwKLQkJCQkJCQliSW50ZXJmYWNlTnVtYmVyLCBpLCBqKTsKLQkJCX0gZWxzZSBpZiAoKHBlcGQtPmJtQXR0cmlidXRlcyAmCi0JCQkJCQkJVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09Ci0JCQkJCQkJVVNCX0VORFBPSU5UX1hGRVJfSU5UKSB7Ci0JCQkJSk9NKDQsICJpbnRmWyVpXWFsdFslaV1lbmRbJWldIGlzIGFuICBJTlQgZW5kcG9pbnRcbiIsCi0JCQkJCQkJYkludGVyZmFjZU51bWJlciwgaSwgaik7Ci0JCQl9IGVsc2UgewotCQkJCUpPTSg0LCAiaW50ZlslaV1hbHRbJWldZW5kWyVpXSBpcyBhICBDVFJMIGVuZHBvaW50XG4iLAotCQkJCQkJCWJJbnRlcmZhY2VOdW1iZXIsIGksIGopOworCQkJCWJyZWFrOwogCQkJfQotCQkJaWYgKDAgPT0gcGVwZC0+d01heFBhY2tldFNpemUpIHsKKwkJCWNhc2UgVVNCX0NMQVNTX0FVRElPOiB7CisJCQkJaWYgKGJJbnRlcmZhY2VTdWJDbGFzcyAhPQorCQkJCSAgICBVU0JfU1VCQ0xBU1NfQVVESU9TVFJFQU1JTkcpCisJCQkJCWJyZWFrOworCQkJCWlmICghcGVhc3ljYXApIHsKKwkJCQkJU0FNKCJNSVNUQUtFOiAiCisJCQkJCSJwZWFzeWNhcCBpcyBOVUxMXG4iKTsKKwkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJfQorCQkJCWlmIChlcC0+d01heFBhY2tldFNpemUpIHsKKwkJCQkJaWYgKDggPiBpc29rYWx0KSB7CisJCQkJCQlva2FsdFtpc29rYWx0XSA9IGkgOworCQkJCQkJSk9NKDQsCisJCQkJCQkiJWk9b2thbHRbJWldXG4iLAorCQkJCQkJb2thbHRbaXNva2FsdF0sCisJCQkJCQlpc29rYWx0KTsKKwkJCQkJCW9rZXBuW2lzb2thbHRdID0KKwkJCQkJCWVwLT4KKwkJCQkJCWJFbmRwb2ludEFkZHJlc3MgJgorCQkJCQkJMHgwRjsKKwkJCQkJCUpPTSg0LAorCQkJCQkJIiVpPW9rZXBuWyVpXVxuIiwKKwkJCQkJCW9rZXBuW2lzb2thbHRdLAorCQkJCQkJaXNva2FsdCk7CisJCQkJCQlva21wc1tpc29rYWx0XSA9CisJCQkJCQlsZTE2X3RvX2NwdShlcC0+CisJCQkJCQl3TWF4UGFja2V0U2l6ZSk7CisJCQkJCQlKT00oNCwKKwkJCQkJCSIlaT1va21wc1slaV1cbiIsCisJCQkJCQlva21wc1tpc29rYWx0XSwKKwkJCQkJCWlzb2thbHQpOworCQkJCQkJaXNva2FsdCsrOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKC0xID09IHBlYXN5Y2FwLT4KKwkJCQkJCWF1ZGlvX2FsdHNldHRpbmdfb2ZmKSB7CisJCQkJCQlwZWFzeWNhcC0+CisJCQkJCQlhdWRpb19hbHRzZXR0aW5nX29mZiA9CisJCQkJCQkJCSBpOworCQkJCQkJSk9NKDQsICIlaT1hdWRpb18iCisJCQkJCQkiYWx0c2V0dGluZ19vZmYgIgorCQkJCQkJIjw9PT09XG4iLAorCQkJCQkJcGVhc3ljYXAtPgorCQkJCQkJYXVkaW9fYWx0c2V0dGluZ19vZmYpOworCQkJCQl9IGVsc2UgeworCQkJCQkJU0FNKCJFUlJPUjogcGVhc3ljYXAiCisJCQkJCQkiLT5hdWRpb19hbHRzZXR0aW5nXyIKKwkJCQkJCSJvZmYgYWxyZWFkeSBzZXRcbiIpOworCQkJCQkJU0FNKCIuLi4uLi4gIgorCQkJCQkJImNvbnRpbnVpbmcgd2l0aCAiCisJCQkJCQkiJWk9cGVhc3ljYXAtPiIKKwkJCQkJCSJhdWRpb19hbHRzZXR0aW5nXyIKKwkJCQkJCSJvZmZcbiIsCisJCQkJCQlwZWFzeWNhcC0+CisJCQkJCQlhdWRpb19hbHRzZXR0aW5nX29mZik7CisJCQkJCX0KKwkJCQl9CisJCQlicmVhazsKKwkJCX0KKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoMCA9PSBlcC0+d01heFBhY2tldFNpemUpIHsKIAkJCQlKT00oNCwgImludGZbJWldYWx0WyVpXWVuZFslaV0gIgogCQkJCQkJCSJoYXMgemVybyBwYWNrZXQgc2l6ZVxuIiwKIAkJCQkJCQliSW50ZXJmYWNlTnVtYmVyLCBpLCBqKTsKQEAgLTM1NzcsNyArMzQ4Niw3IEBACiAgKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAlKT00oNCwgImluaXRpYWxpemF0aW9uIGJlZ2lucyBmb3IgaW50ZXJmYWNlICVpXG4iLAotCQlwdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yLT5iSW50ZXJmYWNlTnVtYmVyKTsKKwkJaW50ZXJmYWNlLT5iSW50ZXJmYWNlTnVtYmVyKTsKIAlzd2l0Y2ggKGJJbnRlcmZhY2VOdW1iZXIpIHsKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCkBAIC0zODQ0LDcgKzM3NTMsNyBAQAogICogIFNBVkUgUE9JTlRFUiBwZWFzeWNhcCBJTiBUSElTIElOVEVSRkFDRS4KICAqLwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JCXVzYl9zZXRfaW50ZmRhdGEocHVzYl9pbnRlcmZhY2UsIHBlYXN5Y2FwKTsKKwkJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBwZWFzeWNhcCk7CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKgogICogIElUIElTIEVTU0VOVElBTCBUTyBJTklUSUFMSVpFIFRIRSBIQVJEV0FSRSBCRUZPUkUsIFJBVEhFUiBUSEFOIEFGVEVSLApAQCAtMzg2Niw3ICszNzc1LDcgQEAKICAqICBUSEUgVklERU8gREVWSUNFIENBTiBCRSBSRUdJU1RFUkVEIE5PVywgQVMgSVQgSVMgUkVBRFkuCiAgKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCQlpZiAoMCAhPSAodjRsMl9kZXZpY2VfcmVnaXN0ZXIoJihwdXNiX2ludGVyZmFjZS0+ZGV2KSwKKwkJaWYgKDAgIT0gKHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCYoaW50Zi0+ZGV2KSwKIAkJCQkJCQkmKHBlYXN5Y2FwLT52NGwyX2RldmljZSkpKSkgewogCQkJU0FNKCJ2NGwyX2RldmljZV9yZWdpc3RlcigpIGZhaWxlZFxuIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTM5MjQsOSArMzgzMyw5IEBACiAgKiAgU0FWRSBQT0lOVEVSIHBlYXN5Y2FwIElOIElOVEVSRkFDRSAxCiAgKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCQl1c2Jfc2V0X2ludGZkYXRhKHB1c2JfaW50ZXJmYWNlLCBwZWFzeWNhcCk7CisJCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgcGVhc3ljYXApOwogCQlKT00oNCwgIm5vIGluaXRpYWxpemF0aW9uIHJlcXVpcmVkIGZvciBpbnRlcmZhY2UgJWlcbiIsCi0JCQkJCXB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3ItPmJJbnRlcmZhY2VOdW1iZXIpOworCQkJCQlpbnRlcmZhY2UtPmJJbnRlcmZhY2VOdW1iZXIpOwogCQlicmVhazsKIAl9CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTQxODgsNyArNDA5Nyw3IEBACiAgKiAgU0FWRSBQT0lOVEVSIHBlYXN5Y2FwIElOIFRISVMgSU5URVJGQUNFLgogICovCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JCXVzYl9zZXRfaW50ZmRhdGEocHVzYl9pbnRlcmZhY2UsIHBlYXN5Y2FwKTsKKwkJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBwZWFzeWNhcCk7CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKgogICogIFRIRSBBVURJTyBERVZJQ0UgQ0FOIEJFIFJFR0lTVEVSRUQgTk9XLCBBUyBJVCBJUyBSRUFEWS4KQEAgLTQyMDEsMjggKzQxMTAsMjIgQEAKIAkJaWYgKHJjKSB7CiAJCQllcnIoImVhc3ljYXBfYWxzYV9wcm9iZSgpIHJjID0gJWlcbiIsIHJjKTsKIAkJCXJldHVybiAtRU5PREVWOwotCQl9IGVsc2UgewotCQkJSk9NKDgsICJrcmVmX2dldCgpIHdpdGggJWk9a3JlZi5yZWZjb3VudC5jb3VudGVyXG4iLAotCQkJCQlwZWFzeWNhcC0+a3JlZi5yZWZjb3VudC5jb3VudGVyKTsKLQkJCWtyZWZfZ2V0KCZwZWFzeWNhcC0+a3JlZik7Ci0JCQlwZWFzeWNhcC0+cmVnaXN0ZXJlZF9hdWRpbysrOwogCQl9CiAKICNlbHNlIC8qIENPTkZJR19FQVNZQ0FQX09TUyAqLwotCQlyYyA9IHVzYl9yZWdpc3Rlcl9kZXYocHVzYl9pbnRlcmZhY2UsICZlYXN5b3NzX2NsYXNzKTsKKwkJcmMgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsICZlYXN5b3NzX2NsYXNzKTsKIAkJaWYgKHJjKSB7CiAJCQlTQVkoIkVSUk9SOiB1c2JfcmVnaXN0ZXJfZGV2KCkgZmFpbGVkXG4iKTsKLQkJCXVzYl9zZXRfaW50ZmRhdGEocHVzYl9pbnRlcmZhY2UsIE5VTEwpOworCQkJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKIAkJCXJldHVybiAtRU5PREVWOwotCQl9IGVsc2UgewotCQkJSk9NKDgsICJrcmVmX2dldCgpIHdpdGggJWk9a3JlZi5yZWZjb3VudC5jb3VudGVyXG4iLAotCQkJCQlwZWFzeWNhcC0+a3JlZi5yZWZjb3VudC5jb3VudGVyKTsKLQkJCWtyZWZfZ2V0KCZwZWFzeWNhcC0+a3JlZik7Ci0JCQlwZWFzeWNhcC0+cmVnaXN0ZXJlZF9hdWRpbysrOwogCQl9Ci0JCVNBTSgiZWFzeW9zcyBhdHRhY2hlZCB0byBtaW5vciAjJWRcbiIsIHB1c2JfaW50ZXJmYWNlLT5taW5vcik7CisJCVNBTSgiZWFzeW9zcyBhdHRhY2hlZCB0byBtaW5vciAjJWRcbiIsIGludGYtPm1pbm9yKTsKICNlbmRpZiAvKiBDT05GSUdfRUFTWUNBUF9PU1MgKi8KIAorCQlKT00oOCwgImtyZWZfZ2V0KCkgd2l0aCAlaT1rcmVmLnJlZmNvdW50LmNvdW50ZXJcbiIsCisJCQkJcGVhc3ljYXAtPmtyZWYucmVmY291bnQuY291bnRlcik7CisJCWtyZWZfZ2V0KCZwZWFzeWNhcC0+a3JlZik7CisJCXBlYXN5Y2FwLT5yZWdpc3RlcmVkX2F1ZGlvKys7CiAJCWJyZWFrOwogCX0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2VjaG8uYyBiL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2VjaG8uYwppbmRleCAzYzE4OGQ1Li5jMGFkYWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZWNoby9lY2hvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VjaG8vZWNoby5jCkBAIC0xMTMsMTIgKzExMywxMCBAQAogI2RlZmluZSBEVERfSEFOR09WRVIJCQk2MDAJLyogNjAwIHNhbXBsZXMsIG9yIDc1bXMgICAgICovCiAjZGVmaW5lIERDX0xPRzJCRVRBCQkJMwkvKiBsb2cyKCkgb2YgREMgZmlsdGVyIEJldGEgKi8KIAotCiAvKiBhZGFwdGluZyBjb2VmZnMgdXNpbmcgdGhlIHRyYWRpdGlvbmFsIHN0b2NoYXN0aWMgZGVzY2VudCAoTilMTVMgYWxnb3JpdGhtICovCiAKICNpZmRlZiBfX2JmaW5fXwotc3RhdGljIGlubGluZSB2b2lkIGxtc19hZGFwdF9iZyhzdHJ1Y3Qgb3NsZWNfc3RhdGUgKmVjLCBpbnQgY2xlYW4sCi0JCQkJICAgIGludCBzaGlmdCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBsbXNfYWRhcHRfYmcoc3RydWN0IG9zbGVjX3N0YXRlICplYywgaW50IGNsZWFuLCBpbnQgc2hpZnQpCiB7CiAJaW50IGksIGo7CiAJaW50IG9mZnNldDE7CkBAIC0xODksOCArMTg3LDcgQEAKICovCiAKICNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgbG1zX2FkYXB0X2JnKHN0cnVjdCBvc2xlY19zdGF0ZSAqZWMsIGludCBjbGVhbiwKLQkJCQkgICAgaW50IHNoaWZ0KQorc3RhdGljIGlubGluZSB2b2lkIGxtc19hZGFwdF9iZyhzdHJ1Y3Qgb3NsZWNfc3RhdGUgKmVjLCBpbnQgY2xlYW4sIGludCBzaGlmdCkKIHsKIAlpbnQgaTsKIApAQCAtMjI1LDcgKzIyMiw3IEBACiAJaWYgKGJpdHMgPT0gMCkKIAkJcmV0dXJuIC0xOwogCWVsc2UKLQkJcmV0dXJuIChpbnQpZmxzKChpbnQzMl90KWJpdHMpLTE7CisJCXJldHVybiAoaW50KWZscygoaW50MzJfdCkgYml0cykgLSAxOwogfQogCiBzdHJ1Y3Qgb3NsZWNfc3RhdGUgKm9zbGVjX2NyZWF0ZShpbnQgbGVuLCBpbnQgYWRhcHRpb25fbW9kZSkKQEAgLTI3OSw2ICsyNzYsNyBAQAogCWtmcmVlKGVjKTsKIAlyZXR1cm4gTlVMTDsKIH0KKwogRVhQT1JUX1NZTUJPTF9HUEwob3NsZWNfY3JlYXRlKTsKIAogdm9pZCBvc2xlY19mcmVlKHN0cnVjdCBvc2xlY19zdGF0ZSAqZWMpCkBAIC0yOTIsMTIgKzI5MCwxNCBAQAogCWtmcmVlKGVjLT5zbmFwc2hvdCk7CiAJa2ZyZWUoZWMpOwogfQorCiBFWFBPUlRfU1lNQk9MX0dQTChvc2xlY19mcmVlKTsKIAogdm9pZCBvc2xlY19hZGFwdGlvbl9tb2RlKHN0cnVjdCBvc2xlY19zdGF0ZSAqZWMsIGludCBhZGFwdGlvbl9tb2RlKQogewogCWVjLT5hZGFwdGlvbl9tb2RlID0gYWRhcHRpb25fbW9kZTsKIH0KKwogRVhQT1JUX1NZTUJPTF9HUEwob3NsZWNfYWRhcHRpb25fbW9kZSk7CiAKIHZvaWQgb3NsZWNfZmx1c2goc3RydWN0IG9zbGVjX3N0YXRlICplYykKQEAgLTMyNCwxMiArMzI0LDE0IEBACiAJZWMtPmN1cnJfcG9zID0gZWMtPnRhcHMgLSAxOwogCWVjLT5Qc3RhdGVzID0gMDsKIH0KKwogRVhQT1JUX1NZTUJPTF9HUEwob3NsZWNfZmx1c2gpOwogCiB2b2lkIG9zbGVjX3NuYXBzaG90KHN0cnVjdCBvc2xlY19zdGF0ZSAqZWMpCiB7CiAJbWVtY3B5KGVjLT5zbmFwc2hvdCwgZWMtPmZpcl90YXBzMTZbMF0sIGVjLT50YXBzICogc2l6ZW9mKGludDE2X3QpKTsKIH0KKwogRVhQT1JUX1NZTUJPTF9HUEwob3NsZWNfc25hcHNob3QpOwogCiAvKiBEdWFsIFBhdGggRWNobyBDYW5jZWxsZXIgKi8KQEAgLTQwNCwxMSArNDA2LDExIEBACiAJCS8qIGVmZmljaWVudCAib3V0IHdpdGggdGhlIG9sZCBhbmQgaW4gd2l0aCB0aGUgbmV3IiBhbGdvcml0aG0gc28KIAkJICAgd2UgZG9uJ3QgaGF2ZSB0byByZWNhbGN1bGF0ZSBvdmVyIHRoZSB3aG9sZSBibG9jayBvZgogCQkgICBzYW1wbGVzLiAqLwotCQluZXcgPSAoaW50KXR4ICogKGludCl0eDsKKwkJbmV3ID0gKGludCl0eCAqKGludCl0eDsKIAkJb2xkID0gKGludCllYy0+ZmlyX3N0YXRlLmhpc3RvcnlbZWMtPmZpcl9zdGF0ZS5jdXJyX3Bvc10gKgogCQkgICAgKGludCllYy0+ZmlyX3N0YXRlLmhpc3RvcnlbZWMtPmZpcl9zdGF0ZS5jdXJyX3Bvc107CiAJCWVjLT5Qc3RhdGVzICs9Ci0JCSAgICAoKG5ldyAtIG9sZCkgKyAoMSA8PCAoZWMtPmxvZzJ0YXBzLTEpKSkgPj4gZWMtPmxvZzJ0YXBzOworCQkgICAgKChuZXcgLSBvbGQpICsgKDEgPDwgKGVjLT5sb2cydGFwcyAtIDEpKSkgPj4gZWMtPmxvZzJ0YXBzOwogCQlpZiAoZWMtPlBzdGF0ZXMgPCAwKQogCQkJZWMtPlBzdGF0ZXMgPSAwOwogCX0KQEAgLTQ2Niw3ICs0NjgsNyBAQAogCiAJCSAgIGZhY3RvciAgICAgID0gKDJeMzApICogKDJeLTIpICogY2xlYW5fYmdfcngvUAogCi0JCQkJCQkoMzAgLSAyIC0gbG9nMihQKSkKKwkJICAgKDMwIC0gMiAtIGxvZzIoUCkpCiAJCSAgIGZhY3RvciAgICAgID0gY2xlYW5fYmdfcnggMiAgICAgICAgICAgICAgICAgICAgIC0tLS0tICgzKQogCiAJCSAgIFRvIGF2b2lkIGEgZGl2aWRlIHdlIGFwcHJveGltYXRlIGxvZzIoUCkgYXMgdG9wX2JpdChQKSwKQEAgLTUxNCw3ICs1MTYsNyBAQAogCQkJICovCiAJCQllYy0+YWRhcHQgPSAxOwogCQkJbWVtY3B5KGVjLT5maXJfdGFwczE2WzBdLCBlYy0+ZmlyX3RhcHMxNlsxXSwKLQkJCQllYy0+dGFwcyAqIHNpemVvZihpbnQxNl90KSk7CisJCQkgICAgICAgZWMtPnRhcHMgKiBzaXplb2YoaW50MTZfdCkpOwogCQl9IGVsc2UKIAkJCWVjLT5jb25kX21ldCsrOwogCX0gZWxzZQpAQCAtNjAxLDYgKzYwMyw3IEBACiAKIAlyZXR1cm4gKGludDE2X3QpIGVjLT5jbGVhbl9ubHAgPDwgMTsKIH0KKwogRVhQT1JUX1NZTUJPTF9HUEwob3NsZWNfdXBkYXRlKTsKIAogLyogVGhpcyBmdW5jdGlvbiBpcyBzZXBhcmF0ZWQgZnJvbSB0aGUgZWNobyBjYW5jZWxsZXIgaXMgaXQgaXMgdXN1YWxseSBjYWxsZWQKQEAgLTYyNSw3ICs2MjgsNyBAQAogICAgZ2l2aW5nIHZlcnkgY2xlYW4gREMgcmVtb3ZhbC4KICovCiAKLWludDE2X3Qgb3NsZWNfaHBmX3R4KHN0cnVjdCBvc2xlY19zdGF0ZSAqZWMsIGludDE2X3QgdHgpCitpbnQxNl90IG9zbGVjX2hwZl90eChzdHJ1Y3Qgb3NsZWNfc3RhdGUgKiBlYywgaW50MTZfdCB0eCkKIHsKIAlpbnQgdG1wLCB0bXAxOwogCkBAIC02NTQsNiArNjU3LDcgQEAKIAogCXJldHVybiB0eDsKIH0KKwogRVhQT1JUX1NZTUJPTF9HUEwob3NsZWNfaHBmX3R4KTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtdXNiL2Z0MTAwMF9ody5jIGIvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtdXNiL2Z0MTAwMF9ody5jCmluZGV4IDY4NGU2OWUuLmIwYTQyMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXVzYi9mdDEwMDBfaHcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZnQxMDAwL2Z0MTAwMC11c2IvZnQxMDAwX2h3LmMKQEAgLTYsOCArNiw2IEBACiAvLwogLy8gJElkOgogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyAyMDA5MDkyNjsgYWVsaWFzOyByZW1vdmVkIGNvbXBpbGVyIHdhcm5pbmdzICYgZXJyb3JzOyB1YnVudHUgOS4wNDsgMi42LjI4LTE1LWdlbmVyaWMKLQogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTM4LDggKzM2LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZnQxMDAwX25ldGRldl9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgZnQxMDAwX2Noa2NhcmQgKHN0cnVjdCBmdDEwMDBfZGV2aWNlICpkZXYpOwogCi0vL0ppbQotCiBzdGF0aWMgdTggdGVtcGJ1ZmZlclsxNjAwXTsKIAogI2RlZmluZSBNQVhfUkNWX0xPT1AgICAxMDAKQEAgLTQ5Miw4ICs0ODgsNiBAQAogCWNvbW1hbmRidWYgPSAodW5zaWduZWQgY2hhciAqKWttYWxsb2Moc2l6ZSArIDIsIEdGUF9LRVJORUwpOwogCW1lbWNweSgodm9pZCAqKWNvbW1hbmRidWYgKyAyLCAodm9pZCAqKXB0ZW1wYnVmZmVyLCBzaXplKTsKIAotCS8vREVCVUcoImNhcmRfc2VuZF9jb21tYW5kOiBDb21tYW5kIFNlbmRcbiIpOwotCiAJZnQxMDAwX3JlYWRfcmVnaXN0ZXIoZnQxMDAwZGV2LCAmdGVtcCwgRlQxMDAwX1JFR19ET09SQkVMTCk7CiAKIAlpZiAodGVtcCAmIDB4MDEwMCkKQEAgLTUwNiwxNiArNTAwLDE0IEBACiAJaWYgKHNpemUgJSA0KQogCQlzaXplICs9IDQgLSAoc2l6ZSAlIDQpOwogCi0JLy9ERUJVRygiY2FyZF9zZW5kX2NvbW1hbmQ6IHdyaXRlIGRwcmFtIC4uLiBzaXplPSVkXG4iLCBzaXplKTsKIAlmdDEwMDBfd3JpdGVfZHByYW0zMihmdDEwMDBkZXYsIDAsIGNvbW1hbmRidWYsIHNpemUpOwogCW1zbGVlcCgxKTsKLQkvL0RFQlVHKCJjYXJkX3NlbmRfY29tbWFuZDogd3JpdGUgaW50byBkb29yYmVsbCAuLi5cbiIpOwogCWZ0MTAwMF93cml0ZV9yZWdpc3RlcihmdDEwMDBkZXYsIEZUMTAwMF9EQl9EUFJBTV9UWCwKIAkJCSAgICAgIEZUMTAwMF9SRUdfRE9PUkJFTEwpOwogCW1zbGVlcCgxKTsKIAogCWZ0MTAwMF9yZWFkX3JlZ2lzdGVyKGZ0MTAwMGRldiwgJnRlbXAsIEZUMTAwMF9SRUdfRE9PUkJFTEwpOwotCS8vREVCVUcoImNhcmRfc2VuZF9jb21tYW5kOiByZWFkIGRvb3JiZWxsIC4uLnRlbXA9JXhcbiIsIHRlbXApOworCiAJaWYgKCh0ZW1wICYgMHgwMTAwKSA9PSAwKSB7CiAJCS8vREVCVUcoImNhcmRfc2VuZF9jb21tYW5kOiBNZXNzYWdlIHNlbnRcbiIpOwogCX0KQEAgLTYwMSw4ICs1OTMsNiBAQAogCiAJREVCVUcoImZ0MTAwMF9odzpmdDEwMDBfcmVzZXRfYXNpYyBjYWxsZWRcbiIpOwogCi0JaW5mby0+QVNJQ1Jlc2V0TnVtKys7Ci0KIAkvKiBMZXQncyB1c2UgdGhlIHJlZ2lzdGVyIHByb3ZpZGVkIGJ5IHRoZSBNYWduZW1pdGUgQVNJQyB0byByZXNldCB0aGUKIAkgKiBBU0lDIGFuZCBEU1AuCiAJICovCkBAIC02NjAsOCArNjUwLDYgQEAKIAlERUJVRygiZnQxMDAwX2h3OmZ0MTAwMF9yZXNldF9jYXJkOiByZXNldCBhc2ljXG4iKTsKIAlmdDEwMDBfcmVzZXRfYXNpYyhkZXYpOwogCi0JaW5mby0+RFNQUmVzZXROdW0rKzsKLQogCURFQlVHKCJmdDEwMDBfaHc6ZnQxMDAwX3Jlc2V0X2NhcmQ6IGNhbGwgZHNwX3JlbG9hZFxuIik7CiAJZHNwX3JlbG9hZChmdDEwMDBkZXYpOwogCkBAIC02ODMsOCArNjcxLDYgQEAKIAlyZXR1cm4gVFJVRTsKIH0KIAotCi0vL21iZWxpYW4KICNpZmRlZiBIQVZFX05FVF9ERVZJQ0VfT1BTCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGZ0bmV0X29wcyA9CiB7CkBAIC03NTgsMTQgKzc0NCwxMSBAQAogCXNwaW5fbG9ja19pbml0KCZwSW5mby0+ZHByYW1fbG9jayk7CiAJcEluZm8tPnBGdDEwMDBEZXYgPSBmdDEwMDBkZXY7CiAJcEluZm8tPkRydkVyck51bSA9IDA7Ci0JcEluZm8tPkFTSUNSZXNldE51bSA9IDA7CiAJcEluZm8tPnJlZ2lzdGVyZWQgPSAxOwogCXBJbmZvLT5mdDEwMDBfcmVzZXQgPSBmdDEwMDBfcmVzZXQ7CiAJcEluZm8tPm1lZGlhc3RhdGUgPSAwOwogCXBJbmZvLT5maWZvX2NudCA9IDA7CiAJcEluZm8tPkRldmljZUNyZWF0ZWQgPSBGQUxTRTsKLQlwSW5mby0+Q3VycmVudEludGVycnVwdEVuYWJsZU1hc2sgPSBJU1JfREVGQVVMVF9NQVNLOwotCXBJbmZvLT5JbnRlcnJ1cHRzRW5hYmxlZCA9IEZBTFNFOwogCXBJbmZvLT5DYXJkUmVhZHkgPSAwOwogCXBJbmZvLT5EU1BfVElNRVswXSA9IDA7CiAJcEluZm8tPkRTUF9USU1FWzFdID0gMDsKQEAgLTkwNCwxNCArODg3LDEwIEBACiAKIAlzdHJ1Y3QgZnQxMDAwX2RldmljZSAqZnQxMDAwZGV2ID0gdXJiLT5jb250ZXh0OwogCi0gICAgLy9ERUJVRygiZnQxMDAwX3VzYl90cmFuc21pdF9jb21wbGV0ZSBlbnRlcmVkXG4iKTsKLQogCWlmICh1cmItPnN0YXR1cykKIAkJcHJfZXJyKCIlczogVFggc3RhdHVzICVkXG4iLCBmdDEwMDBkZXYtPm5ldC0+bmFtZSwgdXJiLT5zdGF0dXMpOwogCiAJbmV0aWZfd2FrZV9xdWV1ZShmdDEwMDBkZXYtPm5ldCk7Ci0KLSAgICAvL0RFQlVHKCJSZXR1cm4gZnJvbSBmdDEwMDBfdXNiX3RyYW5zbWl0X2NvbXBsZXRlXG4iKTsKIH0KIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTk0Myw4ICs5MjIsNiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQkvL0RFQlVHKCJmdDEwMDBfY29weV9kb3duX3BrdCgpIGVudGVyZWQsIGxlbiA9ICVkXG4iLCBsZW4pOwotCiAJY291bnQgPSBzaXplb2Yoc3RydWN0IHBzZXVkb19oZHIpICsgbGVuOwogCWlmIChjb3VudCA+IE1BWF9CVUZfU0laRSkgewogCQlERUJVRygiRXJyb3I6ZnQxMDAwX2NvcHlfZG93bl9wa3Q6TWVzc2FnZSBTaXplIE92ZXJmbG93IVxuIik7CkBAIC05NzMsOCArOTUwLDYgQEAKIAogCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKIAotCS8vREVCVUcgKCJmdDEwMDBfY29weV9kb3duX3BrdDogY291bnQgPSAlZFxuIiwgY291bnQpOwotCiAJdXNiX2ZpbGxfYnVsa191cmIocEZ0MTAwMERldi0+dHhfdXJiLAogCQkJICBwRnQxMDAwRGV2LT5kZXYsCiAJCQkgIHVzYl9zbmRidWxrcGlwZShwRnQxMDAwRGV2LT5kZXYsCkBAIC05ODMsMTEgKzk1OCw2IEBACiAJCQkgIGZ0MTAwMF91c2JfdHJhbnNtaXRfY29tcGxldGUsICh2b2lkICopcEZ0MTAwMERldik7CiAKIAl0ID0gKHU4ICopIHBGdDEwMDBEZXYtPnR4X3VyYi0+dHJhbnNmZXJfYnVmZmVyOwotCS8vREVCVUcoInRyYW5zZmVyX2xlbmd0aD0lZFxuIiwgcEZ0MTAwMERldi0+dHhfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKLQkvKmZvciAoaT0wOyBpPGNvdW50OyBpKysgKQotCSAgIHsKLQkgICBERUJVRygiJXggICAgIiwgKnQrKyApOwotCSAgIH0gKi8KIAogCXJldCA9IHVzYl9zdWJtaXRfdXJiKHBGdDEwMDBEZXYtPnR4X3VyYiwgR0ZQX0FUT01JQyk7CiAKQEAgLTk5OSw4ICs5NjksNiBAQAogCQlwSW5mby0+c3RhdHMudHhfYnl0ZXMgKz0gKGxlbiArIDE0KTsKIAl9CiAKLQkvL0RFQlVHKCJmdDEwMDBfY29weV9kb3duX3BrdCgpIGV4aXRcbiIpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwMjYsOCArOTk0LDYgQEAKIAl1OCAqcGRhdGE7CiAJaW50IG1heGxlbiwgcGlwZTsKIAotCS8vREVCVUcoIiBmdDEwMDBfc3RhcnRfeG1pdCgpIGVudGVyZWRcbiIpOwotCiAJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCURFQlVHKCJmdDEwMDBfaHc6IGZ0MTAwMF9zdGFydF94bWl0OnNrYiA9PSBOVUxMISEhXG4iKTsKIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKQEAgLTEwMzcsMTcgKzEwMDMsMTIgQEAKIAkJREVCVUcoIm5ldHdvcmsgZHJpdmVyIGlzIGNsb3NlZCwgcmV0dXJuXG4iKTsKIAkJZ290byBlcnI7CiAJfQotCS8vREVCVUcoImZ0MTAwMF9zdGFydF94bWl0IDE6bGVuZ3RoIG9mIHBhY2tldCA9ICVkXG4iLCBza2ItPmxlbik7CisKIAlwaXBlID0KIAkgICAgdXNiX3NuZGJ1bGtwaXBlKHBGdDEwMDBEZXYtPmRldiwgcEZ0MTAwMERldi0+YnVsa19vdXRfZW5kcG9pbnRBZGRyKTsKIAltYXhsZW4gPSB1c2JfbWF4cGFja2V0KHBGdDEwMDBEZXYtPmRldiwgcGlwZSwgdXNiX3BpcGVvdXQocGlwZSkpOwotCS8vREVCVUcoImZ0MTAwMF9zdGFydF94bWl0IDI6IHBpcGU9JWQgZGV2LT5tYXhwYWNrZXQgID0gJWRcbiIsIHBpcGUsIG1heGxlbik7CiAKIAlwZGF0YSA9ICh1OCAqKSBza2ItPmRhdGE7Ci0JLypmb3IgKGk9MDsgaTxza2ItPmxlbjsgaSsrKQotCSAgIERFQlVHKCJza2ItPmRhdGFbJWRdPSV4ICAgICIsIGksICooc2tiLT5kYXRhK2kpKTsKLQotCSAgIERFQlVHKCJcbiIpOyAqLwogCiAJaWYgKHBJbmZvLT5tZWRpYXN0YXRlID09IDApIHsKIAkJLyogRHJvcCBwYWNrZXQgaXMgbWVkaWFzdGF0ZSBpcyBkb3duICovCkBAIC0xMDYwLDEzICsxMDIxLDEyIEBACiAJCURFQlVHKCJmdDEwMDBfaHc6ZnQxMDAwX3N0YXJ0X3htaXQ6aW52YWxpZCBldGhlcm5ldCBsZW5ndGhcbiIpOwogCQlnb3RvIGVycjsKIAl9Ci0vL21iZWxpYW4KKwogCWZ0MTAwMF9jb3B5X2Rvd25fcGt0KGRldiwgKHBkYXRhICsgRU5FVF9IRUFERVJfU0laRSAtIDIpLAogCQkJICAgICBza2ItPmxlbiAtIEVORVRfSEVBREVSX1NJWkUgKyAyKTsKIAogZXJyOgogCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkvL0RFQlVHKCIgZnQxMDAwX3N0YXJ0X3htaXQoKSBleGl0XG4iKTsKIAogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CkBAIC0xMDkzLDI0ICsxMDUzLDIwIEBACiAKIAl1MTYgdGVtcHdvcmQ7CiAJdTE2IGxlbjsKLQl1MTYgbGVuYTsJCS8vbWJlbGlhbgorCXUxNiBsZW5hOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJdTE2IGk7CiAJdTggKnBidWZmZXIgPSBOVUxMOwogCXU4ICpwdGVtcCA9IE5VTEw7CiAJdTE2ICpjaGtzdW07CiAKLQkvL0RFQlVHKCJmdDEwMDBfY29weV91cF9wa3QgZW50ZXJlZFxuIik7Ci0KIAlpZiAoZnQxMDAwZGV2LT5zdGF0dXMgJiBGVDEwMDBfU1RBVFVTX0NMT1NJTkcpIHsKIAkJREVCVUcoIm5ldHdvcmsgZHJpdmVyIGlzIGNsb3NlZCwgcmV0dXJuXG4iKTsKIAkJcmV0dXJuIFNUQVRVU19TVUNDRVNTOwogCX0KIAkvLyBSZWFkIGxlbmd0aAogCWxlbiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKLQlsZW5hID0gdXJiLT5hY3R1YWxfbGVuZ3RoOwkvL21iZWxpYW4KLQkvL0RFQlVHKCJmdDEwMDBfY29weV91cF9wa3Q6IHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg9JWQsIGFjdHVhbF9idWZmZXJfbGVuPSVkXG4iLAotCS8vICAgICAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwlsZW5hID0gdXJiLT5hY3R1YWxfbGVuZ3RoOwogCiAJY2hrc3VtID0gKHUxNiAqKSBmdDEwMDBkZXYtPnJ4X2J1ZjsKIApAQCAtMTEyNCw4ICsxMDgwLDYgQEAKIAkJcmV0dXJuIFNUQVRVU19GQUlMVVJFOwogCX0KIAotCS8vREVCVUcoImZ0MTAwMF9jb3B5X3VwX3BrdDogY2hlY2tzdW0gaXMgY29ycmVjdCAleFxuIiwgKmNoa3N1bSk7Ci0KIAlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbiArIDEyICsgMik7CiAKIAlpZiAoc2tiID09IE5VTEwpIHsKQEAgLTExNTcsMTIgKzExMTEsNiBAQAogCW1lbWNweShwYnVmZmVyLCBmdDEwMDBkZXYtPnJ4X2J1ZiArIHNpemVvZihzdHJ1Y3QgcHNldWRvX2hkciksCiAJICAgICAgIGxlbiAtIHNpemVvZihzdHJ1Y3QgcHNldWRvX2hkcikpOwogCi0JLy9ERUJVRygiZnQxMDAwX2NvcHlfdXBfcGt0OiBEYXRhIHBhc3NlZCB0byBQcm90b2NvbCBsYXllclxuIik7Ci0JLypmb3IgKGk9MDsgaTxsZW4rMTI7IGkrKykKLQkgICB7Ci0JICAgREVCVUcoImZ0MTAwMF9jb3B5X3VwX3BrdDogUHJvdG9jb2wgRGF0YTogMHgleFxuICIsICpwdGVtcCsrKTsKLQkgICB9ICovCi0KIAlza2ItPmRldiA9IG5ldDsKIAogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5ldCk7CkBAIC0xMTcxLDEwICsxMTE5LDEwIEBACiAKIAlpbmZvLT5zdGF0cy5yeF9wYWNrZXRzKys7CiAJLyogQWRkIG9uIDEyIGJ5dGVzIGZvciBNQUMgYWRkcmVzcyB3aGljaCB3YXMgcmVtb3ZlZCAqLwotCWluZm8tPnN0YXRzLnJ4X2J5dGVzICs9IChsZW5hICsgMTIpOwkvL21iZWxpYW4KKwlpbmZvLT5zdGF0cy5yeF9ieXRlcyArPSAobGVuYSArIDEyKTsKIAogCWZ0MTAwMF9zdWJtaXRfcnhfdXJiKGluZm8pOwotCS8vREVCVUcoImZ0MTAwMF9jb3B5X3VwX3BrdCBleGl0ZWRcbiIpOworCiAJcmV0dXJuIFNVQ0NFU1M7CiB9CiAKQEAgLTExOTcsMTAgKzExNDUsOCBAQAogCWludCByZXN1bHQ7CiAJc3RydWN0IGZ0MTAwMF9kZXZpY2UgKnBGdDEwMDBEZXYgPSBpbmZvLT5wRnQxMDAwRGV2OwogCi0JLy9ERUJVRyAoImZ0MTAwMF9zdWJtaXRfcnhfdXJiIGVudGVyZWQ6IHNpemVvZiByeF91cmIgaXMgJWRcbiIsIHNpemVvZigqcEZ0MTAwMERldi0+cnhfdXJiKSk7CiAJaWYgKHBGdDEwMDBEZXYtPnN0YXR1cyAmIEZUMTAwMF9TVEFUVVNfQ0xPU0lORykgewogCQlERUJVRygibmV0d29yayBkcml2ZXIgaXMgY2xvc2VkLCByZXR1cm5cbiIpOwotCQkvL3VzYl9raWxsX3VyYihwRnQxMDAwRGV2LT5yeF91cmIpOyAvL21iZWxpYW4KIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC0xMjE4LDcgKzExNjQsNiBAQAogCQkgICAgICAgcmVzdWx0KTsKIAkJcmV0dXJuIHJlc3VsdDsKIAl9Ci0JLy9ERUJVRygiZnQxMDAwX3N1Ym1pdF9yeF91cmIgZXhpdDogcmVzdWx0PSVkXG4iLCByZXN1bHQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjQxLDIzICsxMTg2LDIyIEBACiBzdGF0aWMgaW50IGZ0MTAwMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZ0MTAwMF9pbmZvICpwSW5mbyA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IHRpbWV2YWwgdHY7CS8vbWJlbGlhbgorCXN0cnVjdCB0aW1ldmFsIHR2OwogCWludCByZXQ7CiAKIAlERUJVRygiZnQxMDAwX29wZW4gaXMgY2FsbGVkIGZvciBjYXJkICVkXG4iLCBwSW5mby0+Q2FyZE51bWJlcik7Ci0JLy9ERUJVRygiZnQxMDAwX29wZW46IGRldi0+YWRkcj0leCwgZGV2LT5hZGRyX2xlbj0lZFxuIiwgZGV2LT5hZGRyLCBkZXYtPmFkZHJfbGVuKTsKIAotCXBJbmZvLT5zdGF0cy5yeF9ieXRlcyA9IDA7CS8vbWJlbGlhbgotCXBJbmZvLT5zdGF0cy50eF9ieXRlcyA9IDA7CS8vbWJlbGlhbgotCXBJbmZvLT5zdGF0cy5yeF9wYWNrZXRzID0gMDsJLy9tYmVsaWFuCi0JcEluZm8tPnN0YXRzLnR4X3BhY2tldHMgPSAwOwkvL21iZWxpYW4KKwlwSW5mby0+c3RhdHMucnhfYnl0ZXMgPSAwOworCXBJbmZvLT5zdGF0cy50eF9ieXRlcyA9IDA7CisJcEluZm8tPnN0YXRzLnJ4X3BhY2tldHMgPSAwOworCXBJbmZvLT5zdGF0cy50eF9wYWNrZXRzID0gMDsKIAlkb19nZXR0aW1lb2ZkYXkoJnR2KTsKIAlwSW5mby0+Q29uVG0gPSB0di50dl9zZWM7Ci0JcEluZm8tPlByb2dDb25TdGF0ID0gMDsJLy9tYmVsaWFuCisJcEluZm8tPlByb2dDb25TdGF0ID0gMDsKIAogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAKLQluZXRpZl9jYXJyaWVyX29uKGRldik7CS8vbWJlbGlhbgorCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKIAogCXJldCA9IGZ0MTAwMF9zdWJtaXRfcnhfdXJiKHBJbmZvKTsKIApAQCAtMTI4MywxOSArMTIyNywxNCBAQAogCXN0cnVjdCBmdDEwMDBfaW5mbyAqcEluZm8gPSBuZXRkZXZfcHJpdihuZXQpOwogCXN0cnVjdCBmdDEwMDBfZGV2aWNlICpmdDEwMDBkZXYgPSBwSW5mby0+cEZ0MTAwMERldjsKIAotCS8vREVCVUcgKCJmdDEwMDBfY2xvc2U6IG5ldGRldi0+cmVmY250PSVkXG4iLCBuZXQtPnJlZmNudCk7Ci0KIAlmdDEwMDBkZXYtPnN0YXR1cyB8PSBGVDEwMDBfU1RBVFVTX0NMT1NJTkc7CiAKLQkvL0RFQlVHKCJmdDEwMDBfY2xvc2U6IGNhbGxpbmcgdXNiX2tpbGxfdXJiIFxuIik7Ci0KIAlERUJVRygiZnQxMDAwX2Nsb3NlOiBwSW5mbz0lcCwgZnQxMDAwZGV2PSVwXG4iLCBwSW5mbywgZnQxMDAwZGV2KTsKLQluZXRpZl9jYXJyaWVyX29mZihuZXQpOwkvL21iZWxpYW4KKwluZXRpZl9jYXJyaWVyX29mZihuZXQpOwogCW5ldGlmX3N0b3BfcXVldWUobmV0KTsKLQkvL0RFQlVHKCJmdDEwMDBfY2xvc2U6IG5ldGlmX3N0b3BfcXVldWUgY2FsbGVkXG4iKTsKIAlmdDEwMDBkZXYtPnN0YXR1cyAmPSB+RlQxMDAwX1NUQVRVU19DTE9TSU5HOwogCi0JcEluZm8tPlByb2dDb25TdGF0ID0gMHhmZjsJLy9tYmVsaWFuCisJcEluZm8tPlByb2dDb25TdGF0ID0gMHhmZjsKIAogCXJldHVybiAwOwogfQpAQCAtMTMwNCwxNSArMTI0MywxMCBAQAogewogCXN0cnVjdCBmdDEwMDBfaW5mbyAqaW5mbyA9IG5ldGRldl9wcml2KGRldik7CiAKLQlyZXR1cm4gJihpbmZvLT5zdGF0cyk7IC8vbWJlbGlhbgorCXJldHVybiAmKGluZm8tPnN0YXRzKTsKIH0KIAogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi1KaW0KLSovCi0KLQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCiAvLyBGdW5jdGlvbjogICBmdDEwMDBfY2hrY2FyZApAQCAtMTM0MCw3ICsxMjc0LDYgQEAKIAkgKiBzZXQgdG8gemVyby4KIAkgKi8KIAlzdGF0dXMgPSBmdDEwMDBfcmVhZF9yZWdpc3RlcihkZXYsICZ0ZW1wd29yZCwgRlQxMDAwX1JFR19TVVBfSU1BU0spOwotCS8vREVCVUcoImZ0MTAwMF9odzpmdDEwMDBfY2hrY2FyZDogcmVhZCBGVDEwMDBfUkVHX1NVUF9JTUFTSyA9ICV4XG4iLCB0ZW1wd29yZCk7CiAJaWYgKHRlbXB3b3JkID09IDApIHsKIAkJREVCVUcKIAkJICAgICgiZnQxMDAwX2h3OmZ0MTAwMF9jaGtjYXJkOiBJTUFTSyA9IDAgQ2FyZCBub3QgZGV0ZWN0ZWRcbiIpOwpAQCAtMTM1MCw5ICsxMjgzLDggQEAKIAkgKiBpZiB0aGUgZGV2aWNlIGlzIG5vdCBwcmVzZW50LgogCSAqLwogCXN0YXR1cyA9IGZ0MTAwMF9yZWFkX3JlZ2lzdGVyKGRldiwgJnRlbXB3b3JkLCBGVDEwMDBfUkVHX0FTSUNfSUQpOwotCS8vREVCVUcoImZ0MTAwMF9odzpmdDEwMDBfY2hrY2FyZDogcmVhZCBGVDEwMDBfUkVHX0FTSUNfSUQgPSAleFxuIiwgdGVtcHdvcmQpOwogCWlmICh0ZW1wd29yZCAhPSAweDFiMDEpIHsKLQkJZGV2LT5zdGF0dXMgfD0gRlQxMDAwX1NUQVRVU19DTE9TSU5HOwkvL21iZWxpYW4KKwkJZGV2LT5zdGF0dXMgfD0gRlQxMDAwX1NUQVRVU19DTE9TSU5HOwogCQlERUJVRwogCQkgICAgKCJmdDEwMDBfaHc6ZnQxMDAwX2Noa2NhcmQ6IFZlcnNpb24gPSAweGZmZmYgQ2FyZCBub3QgZGV0ZWN0ZWRcbiIpOwogCQlyZXR1cm4gRkFMU0U7CkBAIC0xMzk1LDcgKzEzMjcsNiBAQAogCQkJCSAgICAgIEZUMTAwMF9SRUdfRFBSQU1fQUREUik7CiAJCXJldCA9CiAJCSAgICBmdDEwMDBfcmVhZF9yZWdpc3RlcihkZXYsIHBidWZmZXIsIEZUMTAwMF9SRUdfTUFHX0RQREFUQUgpOwotCQkvL0RFQlVHKCJmdDEwMDBfaHc6cmVjZWl2ZWQgZGF0YSA9IDB4JXhcbiIsICpwYnVmZmVyKTsKIAkJcGJ1ZmZlcisrOwogCQlmdDEwMDBfd3JpdGVfcmVnaXN0ZXIoZGV2LCBGVDEwMDBfRFBSQU1fTUFHX1JYX0JBU0UgKyAxLAogCQkJCSAgICAgIEZUMTAwMF9SRUdfRFBSQU1fQUREUik7CkBAIC0xNDEyLDExICsxMzQzLDExIEBACiAJCS8qIGNvcHkgb2RkIGFsaWduZWQgd29yZCAqLwogCQlyZXQgPQogCQkgICAgZnQxMDAwX3JlYWRfcmVnaXN0ZXIoZGV2LCBwYnVmZmVyLCBGVDEwMDBfUkVHX01BR19EUERBVEFMKTsKLQkJLy9ERUJVRygiZnQxMDAwX2h3OnJlY2VpdmVkIGRhdGEgPSAweCV4XG4iLCAqcGJ1ZmZlcik7CisKIAkJcGJ1ZmZlcisrOwogCQlyZXQgPQogCQkgICAgZnQxMDAwX3JlYWRfcmVnaXN0ZXIoZGV2LCBwYnVmZmVyLCBGVDEwMDBfUkVHX01BR19EUERBVEFIKTsKLQkJLy9ERUJVRygiZnQxMDAwX2h3OnJlY2VpdmVkIGRhdGEgPSAweCV4XG4iLCAqcGJ1ZmZlcik7CisKIAkJcGJ1ZmZlcisrOwogCQlpZiAoc2l6ZSAmIDB4MDAwMSkgewogCQkJLyogY29weSBvZGQgYnl0ZSBmcm9tIGZpZm8gKi8KQEAgLTE0OTUsMTAgKzE0MjYsOCBAQAogCQkJcHBzZXVkb19oZHItPnBvcnRzcmMgPSAwOwogCQkJLyogQ2FsY3VsYXRlIG5ldyBjaGVja3N1bSAqLwogCQkJcHBzZXVkb19oZHItPmNoZWNrc3VtID0gKnBtc2crKzsKLQkJCS8vREVCVUcoImNoZWNrc3VtID0gMHgleFxuIiwgcHBzZXVkb19oZHItPmNoZWNrc3VtKTsKIAkJCWZvciAoaSA9IDE7IGkgPCA3OyBpKyspIHsKIAkJCQlwcHNldWRvX2hkci0+Y2hlY2tzdW0gXj0gKnBtc2crKzsKLQkJCQkvL0RFQlVHKCJjaGVja3N1bSA9IDB4JXhcbiIsIHBwc2V1ZG9faGRyLT5jaGVja3N1bSk7CiAJCQl9CiAKIAkJCVRlbXBTaG9ydEJ1ZlswXSA9IDA7CkBAIC0xNTgyLDIxICsxNTExLDE2IEBACiAJCQkJCURFQlVHKCJNZWRpYSBpcyB1cFxuIik7CiAJCQkJCWlmIChpbmZvLT5tZWRpYXN0YXRlID09IDApIHsKIAkJCQkJCWlmIChpbmZvLT5OZXREZXZSZWdEb25lKSB7Ci0JCQkJCQkJLy9uZXRpZl9jYXJyaWVyX29uKGRldi0+bmV0KTsvL21iZWxpYW4KIAkJCQkJCQluZXRpZl93YWtlX3F1ZXVlKGRldi0+CiAJCQkJCQkJCQkgbmV0KTsKIAkJCQkJCX0KIAkJCQkJCWluZm8tPm1lZGlhc3RhdGUgPSAxOwotCQkJCQkJLypkb19nZXR0aW1lb2ZkYXkoJnR2KTsKLQkJCQkJCSAgIGluZm8tPkNvblRtID0gdHYudHZfc2VjOyAqLy8vbWJlbGlhbgogCQkJCQl9CiAJCQkJfSBlbHNlIHsKIAkJCQkJREVCVUcoIk1lZGlhIGlzIGRvd25cbiIpOwogCQkJCQlpZiAoaW5mby0+bWVkaWFzdGF0ZSA9PSAxKSB7CiAJCQkJCQlpbmZvLT5tZWRpYXN0YXRlID0gMDsKIAkJCQkJCWlmIChpbmZvLT5OZXREZXZSZWdEb25lKSB7Ci0JCQkJCQkJLy9uZXRpZl9jYXJyaWVyX29mZihkZXYtPm5ldCk7IG1iZWxpYW4KLQkJCQkJCQkvL25ldGlmX3N0b3BfcXVldWUoZGV2LT5uZXQpOwogCQkJCQkJfQogCQkJCQkJaW5mby0+Q29uVG0gPSAwOwogCQkJCQl9CkBAIC0xNjA1LDEwICsxNTI5LDYgQEAKIAkJCQlERUJVRygiTWVkaWEgaXMgZG93blxuIik7CiAJCQkJaWYgKGluZm8tPm1lZGlhc3RhdGUgPT0gMSkgewogCQkJCQlpbmZvLT5tZWRpYXN0YXRlID0gMDsKLQkJCQkJaWYgKGluZm8tPk5ldERldlJlZ0RvbmUpIHsKLQkJCQkJCS8vbmV0aWZfY2Fycmllcl9vZmYoZGV2LT5uZXQpOyAvL21iZWxpYW4KLQkJCQkJCS8vbmV0aWZfc3RvcF9xdWV1ZShkZXYtPm5ldCk7Ci0JCQkJCX0KIAkJCQkJaW5mby0+Q29uVG0gPSAwOwogCQkJCX0KIAkJCX0KQEAgLTE4NjAsMzEgKzE3ODAsMjYgQEAKIAlzdHJ1Y3QgcHNldWRvX2hkciAqcHBzZXVkb19oZHI7CiAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKIAotICAgIC8vREVCVUcoIkVudGVyIGZ0MTAwMF9wb2xsLi4uXG4iKTsKICAgICBpZiAoZnQxMDAwX2Noa2NhcmQoZGV2KSA9PSBGQUxTRSkgewogICAgICAgICBERUJVRygiZnQxMDAwX3BvbGw6OmZ0MTAwMF9jaGtjYXJkOiBmYWlsZWRcbiIpOwogICAgICAgICByZXR1cm4gU1RBVFVTX0ZBSUxVUkU7CiAgICAgfQogCiAgICAgc3RhdHVzID0gZnQxMDAwX3JlYWRfcmVnaXN0ZXIgKGRldiwgJnRlbXB3b3JkLCBGVDEwMDBfUkVHX0RPT1JCRUxMKTsKLSAgIC8vIERFQlVHKCJmdDEwMDBfcG9sbDogcmVhZCBGVDEwMDBfUkVHX0RPT1JCRUxMIG1lc3NhZ2UgMHgleFxuIiwgdGVtcHdvcmQpOwogCiAgICAgaWYgKCAhc3RhdHVzICkKICAgICB7CiAKICAgICAgICAgaWYgKHRlbXB3b3JkICYgRlQxMDAwX0RCX0RQUkFNX1JYKSB7Ci0gICAgICAgICAgICAvL0RFQlVHKCJmdDEwMDBfcG9sbDogRlQxMDAwX1JFR19ET09SQkVMTCBtZXNzYWdlIHR5cGU6ICBGVDEwMDBfREJfRFBSQU1fUlhcbiIpOwogCiAgICAgICAgICAgICBzdGF0dXMgPSBmdDEwMDBfcmVhZF9kcHJhbTE2KGRldiwgMHgyMDAsICh1OCAqKSZkYXRhLCAwKTsKLSAgICAgICAgICAgIC8vREVCVUcoImZ0MTAwMF9wb2xsOkZUMTAwMF9EQl9EUFJBTV9SWDpmdDEwMDBfcmVhZF9kcHJhbTE2OnNpemUgPSAweCV4XG4iLCBkYXRhKTsKLSAgICAgICAgICAgIHNpemUgPSBudG9ocyhkYXRhKSArIDE2ICsgMjsgLy93YWkKKyAgICAgICAgICAgIHNpemUgPSBudG9ocyhkYXRhKSArIDE2ICsgMjsKICAgICAgICAgICAgIGlmIChzaXplICUgNCkgewogICAgICAgICAgICAgICAgIG1vZHVsbyA9IDQgLSAoc2l6ZSAlIDQpOwogICAgICAgICAgICAgICAgIHNpemUgPSBzaXplICsgbW9kdWxvOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc3RhdHVzID0gZnQxMDAwX3JlYWRfZHByYW0xNihkZXYsIDB4MjAxLCAodTggKikmcG9ydGlkLCAxKTsKICAgICAgICAgICAgIHBvcnRpZCAmPSAweGZmOwotICAgICAgICAgICAgLy9ERUJVRygiZnQxMDAwX3BvbGw6IEZUMTAwMF9SRUdfRE9PUkJFTEwgbWVzc2FnZSB0eXBlOiBGVDEwMDBfREJfRFBSQU1fUlggOiBwb3J0aWQgMHgleFxuIiwgcG9ydGlkKTsKIAogICAgICAgICAgICAgaWYgKHNpemUgPCBNQVhfQ01EX1NRU0laRSkgewogICAgICAgICAgICAgICAgIHN3aXRjaCAocG9ydGlkKQpAQCAtMTg5OSwxMyArMTgxNCwxMSBAQAogICAgICAgICAgICAgICAgICAgICBjYXNlIERTUEJDTVNHSUQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgZHNwIGJyb2FkY2FzdCBtZXNzYWdlCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayB3aGljaCBhcHBsaWNhdGlvbiBoYXMgcmVnaXN0ZXJlZCBmb3IgZHNwIGJyb2FkY2FzdCBtZXNzYWdlcwotICAgICAgICAgICAgICAgICAgICAgICAgLy9ERUJVRygiZnQxMDAwX3BvbGw6IEZUMTAwMF9SRUdfRE9PUkJFTEwgbWVzc2FnZSB0eXBlOiBGVDEwMDBfREJfRFBSQU1fUlggOiBwb3J0aWQgRFNQQkNNU0dJRFxuIik7CiAKICAgICAJICAgIAkgICAgICAgIGZvciAoaT0wOyBpPE1BWF9OVU1fQVBQOyBpKyspIHsKICAgICAgICAgCSAgICAgICAgICAgaWYgKCAoaW5mby0+YXBwX2luZm9baV0uRHNwQkNNc2dGbGFnKSAmJiAoaW5mby0+YXBwX2luZm9baV0uZmlsZW9iamVjdCkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGluZm8tPmFwcF9pbmZvW2ldLk51bU9mTXNnIDwgTUFYX01TR19MSU1JVCkgICkKIAkJCSAgIHsKLQkJCSAgICAgICAvL0RFQlVHKCJEc3AgYnJvYWRjYXN0IG1lc3NhZ2UgZGV0ZWN0ZWQgZm9yIGFwcCBpZCAlZFxuIiwgaSk7CiAJCQkgICAgICAgbnh0cGggPSBGVDEwMDBfRFBSQU1fUlhfQkFTRSArIDI7CiAJCQkgICAgICAgcGRwcmFtX2JsayA9IGZ0MTAwMF9nZXRfYnVmZmVyICgmZnJlZXJjdnBvb2wpOwogCQkJICAgICAgIGlmIChwZHByYW1fYmxrICE9IE5VTEwpIHsKQEAgLTE5MjksMTUgKzE4NDIsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVCVUcoIk91dCBvZiBtZW1vcnkgaW4gZnJlZSByZWNlaXZlIGNvbW1hbmQgcG9vbFxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPmFwcF9pbmZvW2ldLm5SeE1zZ01pc3MrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ly9lbmRvZiBpZiAocGRwcmFtX2JsayAhPSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgfS8vZW5kb2YgaWYKLSAgICAJCSAgICAgICAgICAgLy9lbHNlCi0gICAgCQkgICAgICAgICAgIC8vICAgIERFQlVHKCJhcHBfaW5mbyBtaXNtYXRjaFxuIik7Ci0JICAgICAgICAgICAgICAgIH0vLyBlbmRvZiBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgcGRwcmFtX2JsayA9IGZ0MTAwMF9nZXRfYnVmZmVyICgmZnJlZXJjdnBvb2wpOwotICAgICAgICAgICAgICAgICAgICAgICAgLy9ERUJVRygiTWVtb3J5IGFsbG9jYXRlZCA9IDB4JTh4XG4iLCAodTMyKXBkcHJhbV9ibGspOworCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGRwcmFtX2JsayAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGZ0MTAwMF9yZWNlaXZlX2NtZChkZXYsIHBkcHJhbV9ibGstPnBidWZmZXIsIE1BWF9DTURfU1FTSVpFLCAmbnh0cGgpICkgewogCQkJCXBwc2V1ZG9faGRyID0gKHN0cnVjdCBwc2V1ZG9faGRyICopcGRwcmFtX2Jsay0+cGJ1ZmZlcjsKQEAgLTE5NjEsMTEgKzE4NzIsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPmFwcF9pbmZvW2ldLm5SeE1zZysrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHV0IG1lc3NhZ2UgaW50byB0aGUgYXBwcm9wcmlhdGUgYXBwbGljYXRpb24gYmxvY2sKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcHh1IHNwaW5fbG9ja19pcnFzYXZlKCZmcmVlX2J1ZmZfbG9jaywgZmxhZ3MpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdF9hZGRfdGFpbCgmcGRwcmFtX2Jsay0+bGlzdCwgJmluZm8tPmFwcF9pbmZvW2ldLmFwcF9zcWxpc3QpOwogICAgICAgICAgICAgCQkJICAgICAgIGluZm8tPmFwcF9pbmZvW2ldLk51bU9mTXNnKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3B4dSBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmcmVlX2J1ZmZfbG9jaywgZmxhZ3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9weHUgd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5hcHBfaW5mb1tpXS53YWl0X2RwcmFtX21zZyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0xOTc4LDE1ICsxODg2LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVCVUcoIk91dCBvZiBtZW1vcnkgaW4gZnJlZSByZWNlaXZlIGNvbW1hbmQgcG9vbFxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9IC8vZW5kIG9mIHN3aXRjaAotICAgICAgICAgICAgfSAvL2VuZG9mIGlmIChzaXplIDwgTUFYX0NNRF9TUVNJWkUpCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgREVCVUcoIkZUMTAwMDpkcGM6SW52YWxpZCB0b3RhbCBsZW5ndGggZm9yIFNsb3dRID0gJWRcbiIsIHNpemUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc3RhdHVzID0gZnQxMDAwX3dyaXRlX3JlZ2lzdGVyIChkZXYsIEZUMTAwMF9EQl9EUFJBTV9SWCwgRlQxMDAwX1JFR19ET09SQkVMTCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAodGVtcHdvcmQgJiBGVDEwMDBfRFNQX0FTSUNfUkVTRVQpIHsKLSAgICAgICAgICAgIC8vREVCVUcoImZ0MTAwMF9wb2xsOiBGVDEwMDBfUkVHX0RPT1JCRUxMIG1lc3NhZ2UgdHlwZTogIEZUMTAwMF9EU1BfQVNJQ19SRVNFVFxuIik7CiAKICAgICAgICAgICAgIC8vIExldCdzIHJlc2V0IHRoZSBBU0lDIGZyb20gdGhlIEhvc3Qgc2lkZSBhcyB3ZWxsCiAgICAgICAgICAgICBzdGF0dXMgPSBmdDEwMDBfd3JpdGVfcmVnaXN0ZXIgKGRldiwgQVNJQ19SRVNFVF9CSVQsIEZUMTAwMF9SRUdfUkVTRVQpOwpAQCAtMjAyNSwxMCArMTkzMiw4IEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAodGVtcHdvcmQgJiBGVDEwMDBfREJfQ09ORF9SRVNFVCkgewogICAgICAgICAgICAgREVCVUcoImZ0MTAwMF9wb2xsOiBGVDEwMDBfUkVHX0RPT1JCRUxMIG1lc3NhZ2UgdHlwZTogIEZUMTAwMF9EQl9DT05EX1JFU0VUXG4iKTsKLS8vQnkgSmltCi0vLyBSZXNldCBBU0lDIGFuZCBEU1AKLS8vTUFHCi0gICAgICAgICAgICBpZiAoaW5mby0+ZkFwcE1zZ1BlbmQgPT0gMCkgeworCisJICAgIGlmIChpbmZvLT5mQXBwTXNnUGVuZCA9PSAwKSB7CiAgICAgICAgICAgICAgICAvLyBSZXNldCBBU0lDIGFuZCBEU1AKIAogICAgICAgICAgICAgICAgIHN0YXR1cyAgICA9IGZ0MTAwMF9yZWFkX2RwcmFtMTYoZGV2LCBGVDEwMDBfTUFHX0RTUF9USU1FUjAsICh1OCAqKSYoaW5mby0+RFNQX1RJTUVbMF0pLCBGVDEwMDBfTUFHX0RTUF9USU1FUjBfSU5EWCk7CkBAIC0yMDQ4LDExICsxOTUzLDggQEAKICAgICAgICAgICAgIGZ0MTAwMF93cml0ZV9yZWdpc3RlcihkZXYsIEZUMTAwMF9EQl9DT05EX1JFU0VULCBGVDEwMDBfUkVHX0RPT1JCRUxMKTsKICAgICAgICAgfQogCi0gICAgfS8vZW5kb2YgaWYgKCAhc3RhdHVzICkKKyAgICB9CiAKLSAgICAvL0RFQlVHKCJyZXR1cm4gZnJvbSBmdDEwMDBfcG9sbC5cbiIpOwogICAgIHJldHVybiBTVEFUVVNfU1VDQ0VTUzsKIAogfQotCi0vKmVuZCBvZiBKaW0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtdXNiL2Z0MTAwMF91c2IuaCBiL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXVzYi9mdDEwMDBfdXNiLmgKaW5kZXggZjJlY2IzZS4uMGIzMDAyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtdXNiL2Z0MTAwMF91c2IuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZnQxMDAwL2Z0MTAwMC11c2IvZnQxMDAwX3VzYi5oCkBAIC00OTQsMjEgKzQ5NCw5IEBACiAgICAgYm9vbCBmUHJvdkNvbXBsZXRlOwogICAgIGJvb2wgZkNvbmRSZXNldFBlbmQ7CiAgICAgYm9vbCBmQXBwTXNnUGVuZDsKLSAgICBjaGFyICpwZndpbWc7Ci0gICAgaW50IGZ3aW1nc3o7CiAgICAgdTE2IERydkVyck51bTsKLSAgICB1OCAgKnBUZXN0SW1hZ2U7CiAgICAgdTE2IEFzaWNJRDsKLSAgICB1bnNpZ25lZCBsb25nIFRlc3RJbWFnZUluZHg7Ci0gICAgdW5zaWduZWQgbG9uZyBUZXN0SW1hZ2VTejsKLSAgICB1OCAgVGVzdEltYWdlRW5hYmxlOwotICAgIHU4ICBUZXN0SW1hZ2VSZWFkeTsKLSAgICBpbnQgQVNJQ1Jlc2V0TnVtOwogICAgIGludCBEc3BBc2ljUmVzZXQ7Ci0gICAgaW50IFBrdEludGZFcnI7Ci0gICAgaW50IERTUFJlc2V0TnVtOwotICAgIGludCBOdW1JT0NUTEJ1ZnM7Ci0gICAgaW50IElPQ1RMQnVmTHZsOwogICAgIGludCBEZXZpY2VDcmVhdGVkOwogICAgIGludCBDYXJkUmVhZHk7CiAgICAgaW50IE5ldERldlJlZ0RvbmU7CkBAIC01MTcsMTMgKzUwNSw5IEBACiAgICAgc3RydWN0IGZ0MTAwMF9kZWJ1Z19kaXJzIG5vZGVzOwogICAgIGludCByZWdpc3RlcmVkOwogICAgIGludCBtZWRpYXN0YXRlOwotICAgIGludCBkaGNwZmxnOwotICAgIHUxNiBwYWNrZXRzZXFudW07CiAgICAgdTggc3F1ZXNlcW51bTsgICAgICAgICAgICAgICAgIC8vIHNlcXVlbmNlIG51bWJlciBvbiBzbG93IHF1ZXVlCiAgICAgc3BpbmxvY2tfdCBkcHJhbV9sb2NrOwogICAgIHNwaW5sb2NrX3QgZmlmb19sb2NrOwotICAgIHUxNiBDdXJyZW50SW50ZXJydXB0RW5hYmxlTWFzazsKLSAgICBpbnQgSW50ZXJydXB0c0VuYWJsZWQ7CiAgICAgdTE2IGZpZm9fY250OwogICAgIHU4IERzcFZlcltEU1BWRVJTWl07ICAgICAgICAvLyBEU1AgdmVyc2lvbiBudW1iZXIKICAgICB1OCBId1Nlck51bVtIV1NFUk5VTVNaXTsgICAgLy8gSGFyZHdhcmUgU2VyaWFsIE51bWJlcgpAQCAtNTM0LDcgKzUxOCw2IEBACiAgICAgdTggUmZDYWxWZXJbQ0FMVkVSU1pdOwogICAgIHU4IFJmQ2FsRGF0ZVtDQUxEQVRFU1pdOwogICAgIHUxNiBEU1BfVElNRVs0XTsKLSAgICB1MTYgUHJvZ1NucjsKICAgICB1MTYgTGVkU3RhdDsJLy9tYmVsaWFuCiAgICAgdTE2IENvblN0YXQ7CS8vbWJlbGlhbgogICAgIHUxNiBQcm9nQ29uU3RhdDsKQEAgLTU4Niw4ICs1NjksNiBAQAogc3RydWN0IGRwcmFtX2JsayAqZnQxMDAwX2dldF9idWZmZXIoc3RydWN0IGxpc3RfaGVhZCAqYnVmZmxpc3QpOwogdm9pZCBmdDEwMDBfZnJlZV9idWZmZXIoc3RydWN0IGRwcmFtX2JsayAqcGRwcmFtX2Jsaywgc3RydWN0IGxpc3RfaGVhZCAqcGxpc3QpOwogCi1jaGFyICpnZXRmdyAoY2hhciAqZm4sIHNpemVfdCAqcGltZ3N6KTsKLQogaW50IGRzcF9yZWxvYWQoc3RydWN0IGZ0MTAwMF9kZXZpY2UgKmZ0MTAwMGRldik7CiBpbnQgaW5pdF9mdDEwMDBfbmV0ZGV2KHN0cnVjdCBmdDEwMDBfZGV2aWNlICpmdDEwMDBkZXYpOwogc3RydWN0IHVzYl9pbnRlcmZhY2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9NYWtlZmlsZQppbmRleCBhNTJiYTQ4Li5kYjczZWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvTWFrZWZpbGUKQEAgLTUsNiArNSw3IEBACiAKIHBzYl9nZngteSArPSBwc2JfYmwubyBcCiAJICBwc2JfZHJ2Lm8gXAorCSAgcHNiX2dlbS5vIFwKIAkgIHBzYl9mYi5vIFwKIAkgIHBzYl8yZC5vIFwKIAkgIHBzYl9ndHQubyBcCkBAIC0xNSwxNyArMTYsMTEgQEAKIAkgIHBzYl9pbnRlbF9sdmRzLm8gXAogCSAgcHNiX2ludGVsX21vZGVzLm8gXAogCSAgcHNiX2ludGVsX3Nkdm8ubyBcCi0JICBwc2JfcmVzZXQubyBcCi0JICBwc2Jfc2d4Lm8gXAotCSAgcHNiX3B2cl9nbHVlLm8gXAotCSAgcHNiX2J1ZmZlci5vIFwKLQkgIHBzYl9mZW5jZS5vIFwKKwkgIHBzYl9saWQubyBcCiAJICBwc2JfbW11Lm8gXAotCSAgcHNiX3R0bV9nbHVlLm8gXAotCSAgcHNiX3R0bV9mZW5jZS5vIFwKLQkgIHBzYl90dG1fZmVuY2VfdXNlci5vIFwKLQkgIHBzYl90dG1fcGxhY2VtZW50X3VzZXIubyBcCiAJICBwc2JfcG93ZXJtZ210Lm8gXAotCSAgcHNiX2lycS5vCisJICBwc2JfaXJxLm8gXAorCSAgbXJzdF9jcnRjLm8gXAorCSAgbXJzdF9sdmRzLm8KIAogb2JqLSQoQ09ORklHX0RSTV9QU0IpICs9IHBzYl9nZngubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9tcnN0LmggYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL21yc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTRhYWViCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9tcnN0LmgKQEAgLTAsMCArMSwyMTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTEsIEludGVsIENvcnBvcmF0aW9uLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogTUlEIGRldmljZSBzcGVjaWZpYyBkZXNjcmlwdG9ycyAqLworCitzdHJ1Y3QgbXJzdF92YnQgeworCXM4IHNpZ25hdHVyZVs0XTsJLyo0IGJ5dGVzLCIkR0NUIiAqLworCXU4IHJldmlzaW9uOworCXU4IHNpemU7CisJdTggY2hlY2tzdW07CisJdm9pZCAqbXJzdF9nY3Q7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IG1yc3RfdGltaW5nX2luZm8geworCXUxNiBwaXhlbF9jbG9jazsKKwl1OCBoYWN0aXZlX2xvOworCXU4IGhibGFua19sbzsKKwl1OCBoYmxhbmtfaGk6NDsKKwl1OCBoYWN0aXZlX2hpOjQ7CisJdTggdmFjdGl2ZV9sbzsKKwl1OCB2YmxhbmtfbG87CisJdTggdmJsYW5rX2hpOjQ7CisJdTggdmFjdGl2ZV9oaTo0OworCXU4IGhzeW5jX29mZnNldF9sbzsKKwl1OCBoc3luY19wdWxzZV93aWR0aF9sbzsKKwl1OCB2c3luY19wdWxzZV93aWR0aF9sbzo0OworCXU4IHZzeW5jX29mZnNldF9sbzo0OworCXU4IHZzeW5jX3B1bHNlX3dpZHRoX2hpOjI7CisJdTggdnN5bmNfb2Zmc2V0X2hpOjI7CisJdTggaHN5bmNfcHVsc2Vfd2lkdGhfaGk6MjsKKwl1OCBoc3luY19vZmZzZXRfaGk6MjsKKwl1OCB3aWR0aF9tbV9sbzsKKwl1OCBoZWlnaHRfbW1fbG87CisJdTggaGVpZ2h0X21tX2hpOjQ7CisJdTggd2lkdGhfbW1faGk6NDsKKwl1OCBoYm9yZGVyOworCXU4IHZib3JkZXI7CisJdTggdW5rbm93bjA6MTsKKwl1OCBoc3luY19wb3NpdGl2ZToxOworCXU4IHZzeW5jX3Bvc2l0aXZlOjE7CisJdTggc2VwYXJhdGVfc3luYzoyOworCXU4IHN0ZXJlbzoxOworCXU4IHVua25vd242OjE7CisJdTggaW50ZXJsYWNlZDoxOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGdjdF9yMTBfdGltaW5nX2luZm8geworCXUxNiBwaXhlbF9jbG9jazsKKwl1MzIgaGFjdGl2ZV9sbzo4OworCXUzMiBoYWN0aXZlX2hpOjQ7CisJdTMyIGhibGFua19sbzo4OworCXUzMiBoYmxhbmtfaGk6NDsKKwl1MzIgaHN5bmNfb2Zmc2V0X2xvOjg7CisJdTE2IGhzeW5jX29mZnNldF9oaToyOworCXUxNiBoc3luY19wdWxzZV93aWR0aF9sbzo4OworCXUxNiBoc3luY19wdWxzZV93aWR0aF9oaToyOworCXUxNiBoc3luY19wb3NpdGl2ZToxOworCXUxNiByc3ZkXzE6MzsKKwl1OCAgdmFjdGl2ZV9sbzo4OworCXUxNiB2YWN0aXZlX2hpOjQ7CisJdTE2IHZibGFua19sbzo4OworCXUxNiB2YmxhbmtfaGk6NDsKKwl1MTYgdnN5bmNfb2Zmc2V0X2xvOjQ7CisJdTE2IHZzeW5jX29mZnNldF9oaToyOworCXUxNiB2c3luY19wdWxzZV93aWR0aF9sbzo0OworCXUxNiB2c3luY19wdWxzZV93aWR0aF9oaToyOworCXUxNiB2c3luY19wb3NpdGl2ZToxOworCXUxNiByc3ZkXzI6MzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBtcnN0X3BhbmVsX2Rlc2NyaXB0b3JfdjEgeworCXUzMiBQYW5lbF9Qb3J0X0NvbnRyb2w7IC8qIDEgZHdvcmQsIFJlZ2lzdGVyIDB4NjExODAgaWYgTFZEUyAqLworCQkJCS8qIDB4NjExOTAgaWYgTUlQSSAqLworCXUzMiBQYW5lbF9Qb3dlcl9Pbl9TZXF1ZW5jaW5nOy8qMSBkd29yZCxSZWdpc3RlciAweDYxMjA4LCovCisJdTMyIFBhbmVsX1Bvd2VyX09mZl9TZXF1ZW5jaW5nOy8qMSBkd29yZCxSZWdpc3RlciAweDYxMjBDLCovCisJdTMyIFBhbmVsX1Bvd2VyX0N5Y2xlX0RlbGF5X2FuZF9SZWZlcmVuY2VfRGl2aXNvcjsvKiAxIGR3b3JkICovCisJCQkJCQkvKiBSZWdpc3RlciAweDYxMjEwICovCisJc3RydWN0IG1yc3RfdGltaW5nX2luZm8gRFREOy8qMTggYnl0ZXMsIFN0YW5kYXJkIGRlZmluaXRpb24gKi8KKwl1MTYgUGFuZWxfQmFja2xpZ2h0X0ludmVydGVyX0Rlc2NyaXB0b3I7LyogMTYgYml0cywgYXMgZm9sbG93cyAqLworCQkJCS8qIEJpdCAwLCBGcmVxdWVuY3ksIDE1IGJpdHMsMCAtIDMyNzY3SHogKi8KKwkJCS8qIEJpdCAxNSwgUG9sYXJpdHksIDEgYml0LCAwOiBOb3JtYWwsIDE6IEludmVydGVkICovCisJdTE2IFBhbmVsX01JUElfRGlzcGxheV9EZXNjcmlwdG9yOworCQkJLyoxNiBiaXRzLCBEZWZpbmVkIGFzIGZvbGxvd3M6ICovCisJCQkvKiBpZiBNSVBJLCAweDAwMDAgaWYgTFZEUyAqLworCQkJLyogQml0IDAsIFR5cGUsIDIgYml0cywgKi8KKwkJCS8qIDA6IFR5cGUtMSwgKi8KKwkJCS8qIDE6IFR5cGUtMiwgKi8KKwkJCS8qIDI6IFR5cGUtMywgKi8KKwkJCS8qIDM6IFR5cGUtNCAqLworCQkJLyogQml0IDIsIFBpeGVsIEZvcm1hdCwgNCBiaXRzICovCisJCQkvKiBCaXQwOiAxNmJwcCAobm90IHN1cHBvcnRlZCBpbiBMTkMpLCAqLworCQkJLyogQml0MTogMThicHAgbG9vc2VseSBwYWNrZWQsICovCisJCQkvKiBCaXQyOiAxOGJwcCBwYWNrZWQsICovCisJCQkvKiBCaXQzOiAyNGJwcCAqLworCQkJLyogQml0IDYsIFJlc2VydmVkLCAyIGJpdHMsIDAwYiAqLworCQkJLyogQml0IDgsIE1pbmltdW0gU3VwcG9ydGVkIEZyYW1lIFJhdGUsIDYgYml0cywgMCAtIDYzSHogKi8KKwkJCS8qIEJpdCAxNCwgUmVzZXJ2ZWQsIDIgYml0cywgMDBiICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IG1yc3RfcGFuZWxfZGVzY3JpcHRvcl92MiB7CisJdTMyIFBhbmVsX1BvcnRfQ29udHJvbDsgLyogMSBkd29yZCwgUmVnaXN0ZXIgMHg2MTE4MCBpZiBMVkRTICovCisJCQkJLyogMHg2MTE5MCBpZiBNSVBJICovCisJdTMyIFBhbmVsX1Bvd2VyX09uX1NlcXVlbmNpbmc7LyoxIGR3b3JkLFJlZ2lzdGVyIDB4NjEyMDgsKi8KKwl1MzIgUGFuZWxfUG93ZXJfT2ZmX1NlcXVlbmNpbmc7LyoxIGR3b3JkLFJlZ2lzdGVyIDB4NjEyMEMsKi8KKwl1OCBQYW5lbF9Qb3dlcl9DeWNsZV9EZWxheV9hbmRfUmVmZXJlbmNlX0Rpdmlzb3I7LyogMSBieXRlICovCisJCQkJCQkvKiBSZWdpc3RlciAweDYxMjEwICovCisJc3RydWN0IG1yc3RfdGltaW5nX2luZm8gRFREOy8qMTggYnl0ZXMsIFN0YW5kYXJkIGRlZmluaXRpb24gKi8KKwl1MTYgUGFuZWxfQmFja2xpZ2h0X0ludmVydGVyX0Rlc2NyaXB0b3I7LyoxNiBiaXRzLCBhcyBmb2xsb3dzKi8KKwkJCQkvKkJpdCAwLCBGcmVxdWVuY3ksIDE2IGJpdHMsIDAgLSAzMjc2N0h6Ki8KKwl1OCBQYW5lbF9Jbml0aWFsX0JyaWdodG5lc3M7LyogWzc6MF0gMCAtIDEwMCUgKi8KKwkJCS8qQml0IDcsIFBvbGFyaXR5LCAxIGJpdCwwOiBOb3JtYWwsIDE6IEludmVydGVkKi8KKwl1MTYgUGFuZWxfTUlQSV9EaXNwbGF5X0Rlc2NyaXB0b3I7CisJCQkvKjE2IGJpdHMsIERlZmluZWQgYXMgZm9sbG93czogKi8KKwkJCS8qIGlmIE1JUEksIDB4MDAwMCBpZiBMVkRTICovCisJCQkvKiBCaXQgMCwgVHlwZSwgMiBiaXRzLCAqLworCQkJLyogMDogVHlwZS0xLCAqLworCQkJLyogMTogVHlwZS0yLCAqLworCQkJLyogMjogVHlwZS0zLCAqLworCQkJLyogMzogVHlwZS00ICovCisJCQkvKiBCaXQgMiwgUGl4ZWwgRm9ybWF0LCA0IGJpdHMgKi8KKwkJCS8qIEJpdDA6IDE2YnBwIChub3Qgc3VwcG9ydGVkIGluIExOQyksICovCisJCQkvKiBCaXQxOiAxOGJwcCBsb29zZWx5IHBhY2tlZCwgKi8KKwkJCS8qIEJpdDI6IDE4YnBwIHBhY2tlZCwgKi8KKwkJCS8qIEJpdDM6IDI0YnBwICovCisJCQkvKiBCaXQgNiwgUmVzZXJ2ZWQsIDIgYml0cywgMDBiICovCisJCQkvKiBCaXQgOCwgTWluaW11bSBTdXBwb3J0ZWQgRnJhbWUgUmF0ZSwgNiBiaXRzLCAwIC0gNjNIeiAqLworCQkJLyogQml0IDE0LCBSZXNlcnZlZCwgMiBiaXRzLCAwMGIgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCit1bmlvbiBtcnN0X3BhbmVsX3J4IHsKKwlzdHJ1Y3R7CisJCXUxNiBOdW1iZXJPZkxhbmVzOjI7IC8qTnVtIG9mIExhbmVzLCAyIGJpdHMsMCA9IDEgbGFuZSwqLworCQkJLyogMSA9IDIgbGFuZXMsIDIgPSAzIGxhbmVzLCAzID0gNCBsYW5lcy4gKi8KKwkJdTE2IE1heExhbmVGcmVxOjM7IC8qIDA6IDEwME1IeiwgMTogMjAwTUh6LCAyOiAzMDBNSHosICovCisJCS8qMzogNDAwTUh6LCA0OiA1MDBNSHosIDU6IDYwME1IeiwgNjogNzAwTUh6LCA3OiA4MDBNSHouKi8KKwkJdTE2IFN1cHBvcnRlZFZpZGVvVHJhbnNmZXJNb2RlOjI7IC8qMDogTm9uLWJ1cnN0IG9ubHkgKi8KKwkJCQkJLyogMTogQnVyc3QgYW5kIG5vbi1idXJzdCAqLworCQkJCQkvKiAyLzM6IFJlc2VydmVkICovCisJCXUxNiBIU0Nsa0JlaGF2aW9yOjE7IC8qMDogQ29udGludW91cywgMTogTm9uLWNvbnRpbnVvdXMqLworCQl1MTYgRHVvRGlzcGxheVN1cHBvcnQ6MTsgLyoxIGJpdCwwOiBObywgMTogWWVzKi8KKwkJdTE2IEVDQ19DaGVja3N1bUNhcGFiaWxpdGllczoxOy8qMSBiaXQsMDogTm8sIDE6IFllcyovCisJCXUxNiBCaWRpcmVjdGlvbmFsQ29tbXVuaWNhdGlvbjoxOy8qMSBiaXQsMDogTm8sIDE6IFllcyAqLworCQl1MTYgUnN2ZDo1Oy8qNSBiaXRzLDAwMDAwYiAqLworCX0gcGFuZWxyeDsKKwl1MTYgcGFuZWxfcmVjZWl2ZXI7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IG1yc3RfZ2N0X3YxIHsKKwl1bmlvbnsgLyo4IGJpdHMsRGVmaW5lZCBhcyBmb2xsb3dzOiAqLworCQlzdHJ1Y3QgeworCQkJdTggUGFuZWxUeXBlOjQ7IC8qNCBiaXRzLCBCaXQgZmllbGQgZm9yIHBhbmVscyovCisJCQkJCS8qIDAgLSAzOiAwID0gTFZEUywgMSA9IE1JUEkqLworCQkJCQkvKjIgYml0cyxTcGVjaWZpZXMgd2hpY2ggb2YgdGhlKi8KKwkJCXU4IEJvb3RQYW5lbEluZGV4OjI7CisJCQkJCS8qIDQgcGFuZWxzIHRvIHVzZSBieSBkZWZhdWx0Ki8KKwkJCXU4IEJvb3RNSVBJX0RTSV9SeEluZGV4OjI7LypTcGVjaWZpZXMgd2hpY2ggb2YqLworCQkJCQkvKiB0aGUgNCBNSVBJIERTSSByZWNlaXZlcnMgdG8gdXNlKi8KKwkJfSBQRDsKKwkJdTggUGFuZWxEZXNjcmlwdG9yOworCX07CisJc3RydWN0IG1yc3RfcGFuZWxfZGVzY3JpcHRvcl92MSBwYW5lbFs0XTsvKnBhbmVsIGRlc2NycywzOCBieXRlcyBlYWNoKi8KKwl1bmlvbiBtcnN0X3BhbmVsX3J4IHBhbmVscnhbNF07IC8qIHBhbmVsIHJlY2VpdmVycyovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IG1yc3RfZ2N0X3YyIHsKKwl1bmlvbnsgLyo4IGJpdHMsRGVmaW5lZCBhcyBmb2xsb3dzOiAqLworCQlzdHJ1Y3QgeworCQkJdTggUGFuZWxUeXBlOjQ7IC8qNCBiaXRzLCBCaXQgZmllbGQgZm9yIHBhbmVscyovCisJCQkJCS8qIDAgLSAzOiAwID0gTFZEUywgMSA9IE1JUEkqLworCQkJCQkvKjIgYml0cyxTcGVjaWZpZXMgd2hpY2ggb2YgdGhlKi8KKwkJCXU4IEJvb3RQYW5lbEluZGV4OjI7CisJCQkJCS8qIDQgcGFuZWxzIHRvIHVzZSBieSBkZWZhdWx0Ki8KKwkJCXU4IEJvb3RNSVBJX0RTSV9SeEluZGV4OjI7LypTcGVjaWZpZXMgd2hpY2ggb2YqLworCQkJCQkvKiB0aGUgNCBNSVBJIERTSSByZWNlaXZlcnMgdG8gdXNlKi8KKwkJfSBQRDsKKwkJdTggUGFuZWxEZXNjcmlwdG9yOworCX07CisJc3RydWN0IG1yc3RfcGFuZWxfZGVzY3JpcHRvcl92MiBwYW5lbFs0XTsvKnBhbmVsIGRlc2NycywzOCBieXRlcyBlYWNoKi8KKwl1bmlvbiBtcnN0X3BhbmVsX3J4IHBhbmVscnhbNF07IC8qIHBhbmVsIHJlY2VpdmVycyovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IG1yc3RfZ2N0X2RhdGEgeworCXU4IGJwaTsgLyogYm9vdCBwYW5lbCBpbmRleCwgbnVtYmVyIG9mIHBhbmVsIHVzZWQgZHVyaW5nIGJvb3QgKi8KKwl1OCBwdDsgLyogcGFuZWwgdHlwZSwgNCBiaXQgZmllbGQsIDA9bHZkcywgMT1taXBpICovCisJc3RydWN0IG1yc3RfdGltaW5nX2luZm8gRFREOyAvKiB0aW1pbmcgaW5mbyBmb3IgdGhlIHNlbGVjdGVkIHBhbmVsICovCisJdTMyIFBhbmVsX1BvcnRfQ29udHJvbDsKKwl1MzIgUFBfT25fU2VxdWVuY2luZzsvKjEgZHdvcmQsUmVnaXN0ZXIgMHg2MTIwOCwqLworCXUzMiBQUF9PZmZfU2VxdWVuY2luZzsvKjEgZHdvcmQsUmVnaXN0ZXIgMHg2MTIwQywqLworCXUzMiBQUF9DeWNsZV9EZWxheTsKKwl1MTYgUGFuZWxfQmFja2xpZ2h0X0ludmVydGVyX0Rlc2NyaXB0b3I7CisJdTE2IFBhbmVsX01JUElfRGlzcGxheV9EZXNjcmlwdG9yOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgTU9ERV9TRVRUSU5HX0lOX0NSVEMgCTB4MQorI2RlZmluZSBNT0RFX1NFVFRJTkdfSU5fRU5DT0RFUiAweDIKKyNkZWZpbmUgTU9ERV9TRVRUSU5HX09OX0dPSU5HIAkweDMKKyNkZWZpbmUgTU9ERV9TRVRUSU5HX0lOX0RTUiAJMHg0CisjZGVmaW5lIE1PREVfU0VUVElOR19FTkNPREVSX0RPTkUgMHg4CisjZGVmaW5lIEdDVF9SMTBfSEVBREVSX1NJWkUJMTYKKyNkZWZpbmUgR0NUX1IxMF9ESVNQTEFZX0RFU0NfU0laRQkyOAorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL21yc3RfY3J0Yy5jIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9tcnN0X2NydGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGEwYzAzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9tcnN0X2NydGMuYwpAQCAtMCwwICsxLDYxOSBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDA5IEludGVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlICJwc2JfZmIuaCIKKyNpbmNsdWRlICJwc2JfZHJ2LmgiCisjaW5jbHVkZSAicHNiX2ludGVsX2Rydi5oIgorI2luY2x1ZGUgInBzYl9pbnRlbF9yZWcuaCIKKyNpbmNsdWRlICJwc2JfaW50ZWxfZGlzcGxheS5oIgorI2luY2x1ZGUgInBzYl9wb3dlcm1nbXQuaCIKKworc3RydWN0IHBzYl9pbnRlbF9yYW5nZV90IHsKKwlpbnQgbWluLCBtYXg7Cit9OworCitzdHJ1Y3QgbXJzdF9saW1pdF90IHsKKwlzdHJ1Y3QgcHNiX2ludGVsX3JhbmdlX3QgZG90LCBtLCBwMTsKK307CisKK3N0cnVjdCBtcnN0X2Nsb2NrX3QgeworCS8qIGRlcml2ZWQgdmFsdWVzICovCisJaW50IGRvdDsKKwlpbnQgbTsKKwlpbnQgcDE7Cit9OworCisjZGVmaW5lIE1SU1RfTElNSVRfTFZEU18xMDBMCSAgICAwCisjZGVmaW5lIE1SU1RfTElNSVRfTFZEU184MwkgICAgMQorI2RlZmluZSBNUlNUX0xJTUlUX0xWRFNfMTAwCSAgICAyCisKKyNkZWZpbmUgTVJTVF9ET1RfTUlOCQkgIDE5NzUwCisjZGVmaW5lIE1SU1RfRE9UX01BWAkJICAxMjAwMDAKKyNkZWZpbmUgTVJTVF9NX01JTl8xMDBMCQkgICAgMjAKKyNkZWZpbmUgTVJTVF9NX01JTl8xMDAJCSAgICAxMAorI2RlZmluZSBNUlNUX01fTUlOXzgzCQkgICAgMTIKKyNkZWZpbmUgTVJTVF9NX01BWF8xMDBMCQkgICAgMzQKKyNkZWZpbmUgTVJTVF9NX01BWF8xMDAJCSAgICAxNworI2RlZmluZSBNUlNUX01fTUFYXzgzCQkgICAgMjAKKyNkZWZpbmUgTVJTVF9QMV9NSU4JCSAgICAyCisjZGVmaW5lIE1SU1RfUDFfTUFYXzAJCSAgICA3CisjZGVmaW5lIE1SU1RfUDFfTUFYXzEJCSAgICA4CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXJzdF9saW1pdF90IG1yc3RfbGltaXRzW10gPSB7CisJewkJCS8qIE1SU1RfTElNSVRfTFZEU18xMDBMICovCisJIC5kb3QgPSB7Lm1pbiA9IE1SU1RfRE9UX01JTiwgLm1heCA9IE1SU1RfRE9UX01BWH0sCisJIC5tID0gey5taW4gPSBNUlNUX01fTUlOXzEwMEwsIC5tYXggPSBNUlNUX01fTUFYXzEwMEx9LAorCSAucDEgPSB7Lm1pbiA9IE1SU1RfUDFfTUlOLCAubWF4ID0gTVJTVF9QMV9NQVhfMX0sCisJIH0sCisJewkJCS8qIE1SU1RfTElNSVRfTFZEU184M0wgKi8KKwkgLmRvdCA9IHsubWluID0gTVJTVF9ET1RfTUlOLCAubWF4ID0gTVJTVF9ET1RfTUFYfSwKKwkgLm0gPSB7Lm1pbiA9IE1SU1RfTV9NSU5fODMsIC5tYXggPSBNUlNUX01fTUFYXzgzfSwKKwkgLnAxID0gey5taW4gPSBNUlNUX1AxX01JTiwgLm1heCA9IE1SU1RfUDFfTUFYXzB9LAorCSB9LAorCXsJCQkvKiBNUlNUX0xJTUlUX0xWRFNfMTAwICovCisJIC5kb3QgPSB7Lm1pbiA9IE1SU1RfRE9UX01JTiwgLm1heCA9IE1SU1RfRE9UX01BWH0sCisJIC5tID0gey5taW4gPSBNUlNUX01fTUlOXzEwMCwgLm1heCA9IE1SU1RfTV9NQVhfMTAwfSwKKwkgLnAxID0gey5taW4gPSBNUlNUX1AxX01JTiwgLm1heCA9IE1SU1RfUDFfTUFYXzF9LAorCSB9LAorfTsKKworI2RlZmluZSBNUlNUX01fTUlOCSAgICAxMAorc3RhdGljIGNvbnN0IHUzMiBtcnN0X21fY29udmVydHNbXSA9IHsKKwkweDJCLCAweDE1LCAweDJBLCAweDM1LCAweDFBLCAweDBELCAweDI2LCAweDMzLCAweDE5LCAweDJDLAorCTB4MzYsIDB4M0IsIDB4MUQsIDB4MkUsIDB4MzcsIDB4MUIsIDB4MkQsIDB4MTYsIDB4MEIsIDB4MjUsCisJMHgxMiwgMHgwOSwgMHgyNCwgMHgzMiwgMHgzOSwgMHgxYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXJzdF9saW1pdF90ICptcnN0X2xpbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwljb25zdCBzdHJ1Y3QgbXJzdF9saW1pdF90ICpsaW1pdCA9IE5VTEw7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlEUk1fRFJJVkVSX1BSSVZBVEVfVCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKHBzYl9pbnRlbF9waXBlX2hhc190eXBlKGNydGMsIElOVEVMX09VVFBVVF9MVkRTKQorCSAgICB8fCBwc2JfaW50ZWxfcGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfTUlQSSkpIHsKKwkJc3dpdGNoIChkZXZfcHJpdi0+Y29yZV9mcmVxKSB7CisJCWNhc2UgMTAwOgorCQkJbGltaXQgPSAmbXJzdF9saW1pdHNbTVJTVF9MSU1JVF9MVkRTXzEwMExdOworCQkJYnJlYWs7CisJCWNhc2UgMTY2OgorCQkJbGltaXQgPSAmbXJzdF9saW1pdHNbTVJTVF9MSU1JVF9MVkRTXzgzXTsKKwkJCWJyZWFrOworCQljYXNlIDIwMDoKKwkJCWxpbWl0ID0gJm1yc3RfbGltaXRzW01SU1RfTElNSVRfTFZEU18xMDBdOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlsaW1pdCA9IE5VTEw7CisJCVBTQl9ERUJVR19FTlRSWSgibXJzdF9saW1pdCBXcm9uZyBkaXNwbGF5IHR5cGUuXG4iKTsKKwl9CisKKwlyZXR1cm4gbGltaXQ7Cit9CisKKy8qKiBEZXJpdmUgdGhlIHBpeGVsIGNsb2NrIGZvciB0aGUgZ2l2ZW4gcmVmY2xrIGFuZCBkaXZpc29ycyBmb3IgOHh4IGNoaXBzLiAqLworc3RhdGljIHZvaWQgbXJzdF9jbG9jayhpbnQgcmVmY2xrLCBzdHJ1Y3QgbXJzdF9jbG9ja190ICpjbG9jaykKK3sKKwljbG9jay0+ZG90ID0gKHJlZmNsayAqIGNsb2NrLT5tKSAvICgxNCAqIGNsb2NrLT5wMSk7Cit9CisKK3ZvaWQgbXJzdFByaW50UGxsKGNoYXIgKnByZWZpeCwgc3RydWN0IG1yc3RfY2xvY2tfdCAqY2xvY2spCit7CisJUFNCX0RFQlVHX0VOVFJZKCIlczogZG90Y2xvY2sgPSAlZCwgIG0gPSAlZCwgcDEgPSAlZC5cbiIsCisJICAgICBwcmVmaXgsIGNsb2NrLT5kb3QsIGNsb2NrLT5tLCBjbG9jay0+cDEpOworfQorCisvKioKKyAqIFJldHVybnMgYSBzZXQgb2YgZGl2aXNvcnMgZm9yIHRoZSBkZXNpcmVkIHRhcmdldCBjbG9jayB3aXRoIHRoZSBnaXZlbiByZWZjbGssCisgKiBvciBGQUxTRS4gIERpdmlzb3IgdmFsdWVzIGFyZSB0aGUgYWN0dWFsIGRpdmlzb3JzIGZvcgorICovCitzdGF0aWMgYm9vbAorbXJzdEZpbmRCZXN0UExMKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgaW50IHRhcmdldCwgaW50IHJlZmNsaywKKwkJc3RydWN0IG1yc3RfY2xvY2tfdCAqYmVzdF9jbG9jaykKK3sKKwlzdHJ1Y3QgbXJzdF9jbG9ja190IGNsb2NrOworCWNvbnN0IHN0cnVjdCBtcnN0X2xpbWl0X3QgKmxpbWl0ID0gbXJzdF9saW1pdChjcnRjKTsKKwlpbnQgZXJyID0gdGFyZ2V0OworCisJbWVtc2V0KGJlc3RfY2xvY2ssIDAsIHNpemVvZigqYmVzdF9jbG9jaykpOworCisJZm9yIChjbG9jay5tID0gbGltaXQtPm0ubWluOyBjbG9jay5tIDw9IGxpbWl0LT5tLm1heDsgY2xvY2subSsrKSB7CisJCWZvciAoY2xvY2sucDEgPSBsaW1pdC0+cDEubWluOyBjbG9jay5wMSA8PSBsaW1pdC0+cDEubWF4OworCQkgICAgIGNsb2NrLnAxKyspIHsKKwkJCWludCB0aGlzX2VycjsKKworCQkJbXJzdF9jbG9jayhyZWZjbGssICZjbG9jayk7CisKKwkJCXRoaXNfZXJyID0gYWJzKGNsb2NrLmRvdCAtIHRhcmdldCk7CisJCQlpZiAodGhpc19lcnIgPCBlcnIpIHsKKwkJCQkqYmVzdF9jbG9jayA9IGNsb2NrOworCQkJCWVyciA9IHRoaXNfZXJyOworCQkJfQorCQl9CisJfQorCURSTV9ERUJVRygibXJzdEZpbmRCZXN0UExMIGVyciA9ICVkLlxuIiwgZXJyKTsKKworCXJldHVybiBlcnIgIT0gdGFyZ2V0OworfQorCisvKioKKyAqIFNldHMgdGhlIHBvd2VyIG1hbmFnZW1lbnQgbW9kZSBvZiB0aGUgcGlwZSBhbmQgcGxhbmUuCisgKgorICogVGhpcyBjb2RlIHNob3VsZCBwcm9iYWJseSBncm93IHN1cHBvcnQgZm9yIHR1cm5pbmcgdGhlIGN1cnNvciBvZmYgYW5kIGJhY2sKKyAqIG9uIGFwcHJvcHJpYXRlbHkgYXQgdGhlIHNhbWUgdGltZSBhcyB3ZSdyZSB0dXJuaW5nIHRoZSBwaXBlIG9mZi9vbi4KKyAqLworc3RhdGljIHZvaWQgbXJzdF9jcnRjX2RwbXMoc3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVjdCBwc2JfaW50ZWxfY3J0YyAqcHNiX2ludGVsX2NydGMgPSB0b19wc2JfaW50ZWxfY3J0YyhjcnRjKTsKKwlpbnQgcGlwZSA9IHBzYl9pbnRlbF9jcnRjLT5waXBlOworCWludCBkcGxsX3JlZyA9IChwaXBlID09IDApID8gTVJTVF9EUExMX0EgOiBEUExMX0I7CisJaW50IGRzcGNudHJfcmVnID0gKHBpcGUgPT0gMCkgPyBEU1BBQ05UUiA6IERTUEJDTlRSOworCWludCBkc3BiYXNlX3JlZyA9IChwaXBlID09IDApID8gTVJTVF9EU1BBQkFTRSA6IERTUEJCQVNFOworCWludCBwaXBlY29uZl9yZWcgPSAocGlwZSA9PSAwKSA/IFBJUEVBQ09ORiA6IFBJUEVCQ09ORjsKKwl1MzIgdGVtcDsKKwlib29sIGVuYWJsZWQ7CisKKwlQU0JfREVCVUdfRU5UUlkoIm1vZGUgPSAlZCwgcGlwZSA9ICVkXG4iLCBtb2RlLCBwaXBlKTsKKworCWlmICghZ21hX3Bvd2VyX2JlZ2luKGRldiwgdHJ1ZSkpCisJCXJldHVybjsKKworCS8qIFhYWDogV2hlbiBvdXIgb3V0cHV0cyBhcmUgYWxsIHVuYXdhcmUgb2YgRFBNUyBtb2RlcyBvdGhlciB0aGFuIG9mZgorCSAqIGFuZCBvbiwgd2Ugc2hvdWxkIG1hcCB0aG9zZSBtb2RlcyB0byBEUk1fTU9ERV9EUE1TX09GRiBpbiB0aGUgQ1JUQy4KKwkgKi8KKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIERSTV9NT0RFX0RQTVNfT046CisJY2FzZSBEUk1fTU9ERV9EUE1TX1NUQU5EQlk6CisJY2FzZSBEUk1fTU9ERV9EUE1TX1NVU1BFTkQ6CisJCS8qIEVuYWJsZSB0aGUgRFBMTCAqLworCQl0ZW1wID0gUkVHX1JFQUQoZHBsbF9yZWcpOworCQlpZiAoKHRlbXAgJiBEUExMX1ZDT19FTkFCTEUpID09IDApIHsKKwkJCVJFR19XUklURShkcGxsX3JlZywgdGVtcCk7CisJCQlSRUdfUkVBRChkcGxsX3JlZyk7CisJCQkvKiBXYWl0IGZvciB0aGUgY2xvY2tzIHRvIHN0YWJpbGl6ZS4gKi8KKwkJCXVkZWxheSgxNTApOworCQkJUkVHX1dSSVRFKGRwbGxfcmVnLCB0ZW1wIHwgRFBMTF9WQ09fRU5BQkxFKTsKKwkJCVJFR19SRUFEKGRwbGxfcmVnKTsKKwkJCS8qIFdhaXQgZm9yIHRoZSBjbG9ja3MgdG8gc3RhYmlsaXplLiAqLworCQkJdWRlbGF5KDE1MCk7CisJCQlSRUdfV1JJVEUoZHBsbF9yZWcsIHRlbXAgfCBEUExMX1ZDT19FTkFCTEUpOworCQkJUkVHX1JFQUQoZHBsbF9yZWcpOworCQkJLyogV2FpdCBmb3IgdGhlIGNsb2NrcyB0byBzdGFiaWxpemUuICovCisJCQl1ZGVsYXkoMTUwKTsKKwkJfQorCQkvKiBFbmFibGUgdGhlIHBpcGUgKi8KKwkJdGVtcCA9IFJFR19SRUFEKHBpcGVjb25mX3JlZyk7CisJCWlmICgodGVtcCAmIFBJUEVBQ09ORl9FTkFCTEUpID09IDApCisJCQlSRUdfV1JJVEUocGlwZWNvbmZfcmVnLCB0ZW1wIHwgUElQRUFDT05GX0VOQUJMRSk7CisJCS8qIEVuYWJsZSB0aGUgcGxhbmUgKi8KKwkJdGVtcCA9IFJFR19SRUFEKGRzcGNudHJfcmVnKTsKKwkJaWYgKCh0ZW1wICYgRElTUExBWV9QTEFORV9FTkFCTEUpID09IDApIHsKKwkJCVJFR19XUklURShkc3BjbnRyX3JlZywKKwkJCQkgIHRlbXAgfCBESVNQTEFZX1BMQU5FX0VOQUJMRSk7CisJCQkvKiBGbHVzaCB0aGUgcGxhbmUgY2hhbmdlcyAqLworCQkJUkVHX1dSSVRFKGRzcGJhc2VfcmVnLCBSRUdfUkVBRChkc3BiYXNlX3JlZykpOworCQl9CisKKwkJcHNiX2ludGVsX2NydGNfbG9hZF9sdXQoY3J0Yyk7CisKKwkJLyogR2l2ZSB0aGUgb3ZlcmxheSBzY2FsZXIgYSBjaGFuY2UgdG8gZW5hYmxlCisJCSAgIGlmIGl0J3Mgb24gdGhpcyBwaXBlICovCisJCS8qIHBzYl9pbnRlbF9jcnRjX2RwbXNfdmlkZW8oY3J0YywgdHJ1ZSk7IFRPRE8gKi8KKwkJYnJlYWs7CisJY2FzZSBEUk1fTU9ERV9EUE1TX09GRjoKKwkJLyogR2l2ZSB0aGUgb3ZlcmxheSBzY2FsZXIgYSBjaGFuY2UgdG8gZGlzYWJsZQorCQkgKiBpZiBpdCdzIG9uIHRoaXMgcGlwZSAqLworCQkvKiBwc2JfaW50ZWxfY3J0Y19kcG1zX3ZpZGVvKGNydGMsIEZBTFNFKTsgVE9ETyAqLworCisJCS8qIERpc2FibGUgdGhlIFZHQSBwbGFuZSB0aGF0IHdlIG5ldmVyIHVzZSAqLworCQlSRUdfV1JJVEUoVkdBQ05UUkwsIFZHQV9ESVNQX0RJU0FCTEUpOworCQkvKiBEaXNhYmxlIGRpc3BsYXkgcGxhbmUgKi8KKwkJdGVtcCA9IFJFR19SRUFEKGRzcGNudHJfcmVnKTsKKwkJaWYgKCh0ZW1wICYgRElTUExBWV9QTEFORV9FTkFCTEUpICE9IDApIHsKKwkJCVJFR19XUklURShkc3BjbnRyX3JlZywKKwkJCQkgIHRlbXAgJiB+RElTUExBWV9QTEFORV9FTkFCTEUpOworCQkJLyogRmx1c2ggdGhlIHBsYW5lIGNoYW5nZXMgKi8KKwkJCVJFR19XUklURShkc3BiYXNlX3JlZywgUkVHX1JFQUQoZHNwYmFzZV9yZWcpKTsKKwkJCVJFR19SRUFEKGRzcGJhc2VfcmVnKTsKKwkJfQorCisJCS8qIE5leHQsIGRpc2FibGUgZGlzcGxheSBwaXBlcyAqLworCQl0ZW1wID0gUkVHX1JFQUQocGlwZWNvbmZfcmVnKTsKKwkJaWYgKCh0ZW1wICYgUElQRUFDT05GX0VOQUJMRSkgIT0gMCkgeworCQkJUkVHX1dSSVRFKHBpcGVjb25mX3JlZywgdGVtcCAmIH5QSVBFQUNPTkZfRU5BQkxFKTsKKwkJCVJFR19SRUFEKHBpcGVjb25mX3JlZyk7CisJCX0KKwkJLyogV2FpdCBmb3IgZm9yIHRoZSBwaXBlIGRpc2FibGUgdG8gdGFrZSBlZmZlY3QuICovCisJCXBzYl9pbnRlbF93YWl0X2Zvcl92YmxhbmsoZGV2KTsKKworCQl0ZW1wID0gUkVHX1JFQUQoZHBsbF9yZWcpOworCQlpZiAoKHRlbXAgJiBEUExMX1ZDT19FTkFCTEUpICE9IDApIHsKKwkJCVJFR19XUklURShkcGxsX3JlZywgdGVtcCAmIH5EUExMX1ZDT19FTkFCTEUpOworCQkJUkVHX1JFQUQoZHBsbF9yZWcpOworCQl9CisKKwkJLyogV2FpdCBmb3IgdGhlIGNsb2NrcyB0byB0dXJuIG9mZi4gKi8KKwkJdWRlbGF5KDE1MCk7CisJCWJyZWFrOworCX0KKworCWVuYWJsZWQgPSBjcnRjLT5lbmFibGVkICYmIG1vZGUgIT0gRFJNX01PREVfRFBNU19PRkY7CisKKwkvKlNldCBGSUZPIFdhdGVybWFya3MqLworCVJFR19XUklURShEU1BBUkIsIDB4M0ZGRik7CisJUkVHX1dSSVRFKERTUEZXMSwgMHgzRjg4MDgwQSk7CisJUkVHX1dSSVRFKERTUEZXMiwgMHgwYjA2MDgwOCk7CisJUkVHX1dSSVRFKERTUEZXMywgMHgwKTsKKwlSRUdfV1JJVEUoRFNQRlc0LCAweDA4MDMwNDA0KTsKKwlSRUdfV1JJVEUoRFNQRlc1LCAweDA0MDQwNDA0KTsKKwlSRUdfV1JJVEUoRFNQRlc2LCAweDc4KTsKKwlSRUdfV1JJVEUoMHg3MDQwMCwgUkVHX1JFQUQoMHg3MDQwMCkgfCAweDQwMDApOworCS8qIE11c3Qgd3JpdGUgQml0IDE0IG9mIHRoZSBDaGlja2VuIEJpdCBSZWdpc3RlciAqLworCisJZ21hX3Bvd2VyX2VuZChkZXYpOworfQorCisvKioKKyAqIFJldHVybiB0aGUgcGlwZSBjdXJyZW50bHkgY29ubmVjdGVkIHRvIHRoZSBwYW5lbCBmaXR0ZXIsCisgKiBvciAtMSBpZiB0aGUgcGFuZWwgZml0dGVyIGlzIG5vdCBwcmVzZW50IG9yIG5vdCBpbiB1c2UKKyAqLworc3RhdGljIGludCBtcnN0X3BhbmVsX2ZpdHRlcl9waXBlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJdTMyIHBmaXRfY29udHJvbDsKKworCXBmaXRfY29udHJvbCA9IFJFR19SRUFEKFBGSVRfQ09OVFJPTCk7CisKKwkvKiBTZWUgaWYgdGhlIHBhbmVsIGZpdHRlciBpcyBpbiB1c2UgKi8KKwlpZiAoKHBmaXRfY29udHJvbCAmIFBGSVRfRU5BQkxFKSA9PSAwKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIChwZml0X2NvbnRyb2wgPj4gMjkpICYgMzsKK30KKworc3RhdGljIGludCBtcnN0X2NydGNfbW9kZV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSwKKwkJCSAgICAgIGludCB4LCBpbnQgeSwKKwkJCSAgICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm9sZF9mYikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVjdCBwc2JfaW50ZWxfY3J0YyAqcHNiX2ludGVsX2NydGMgPSB0b19wc2JfaW50ZWxfY3J0YyhjcnRjKTsKKwlEUk1fRFJJVkVSX1BSSVZBVEVfVCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBwaXBlID0gcHNiX2ludGVsX2NydGMtPnBpcGU7CisJaW50IGZwX3JlZyA9IChwaXBlID09IDApID8gTVJTVF9GUEEwIDogRlBCMDsKKwlpbnQgZHBsbF9yZWcgPSAocGlwZSA9PSAwKSA/IE1SU1RfRFBMTF9BIDogRFBMTF9COworCWludCBkc3BjbnRyX3JlZyA9IChwaXBlID09IDApID8gRFNQQUNOVFIgOiBEU1BCQ05UUjsKKwlpbnQgcGlwZWNvbmZfcmVnID0gKHBpcGUgPT0gMCkgPyBQSVBFQUNPTkYgOiBQSVBFQkNPTkY7CisJaW50IGh0b3RfcmVnID0gKHBpcGUgPT0gMCkgPyBIVE9UQUxfQSA6IEhUT1RBTF9COworCWludCBoYmxhbmtfcmVnID0gKHBpcGUgPT0gMCkgPyBIQkxBTktfQSA6IEhCTEFOS19COworCWludCBoc3luY19yZWcgPSAocGlwZSA9PSAwKSA/IEhTWU5DX0EgOiBIU1lOQ19COworCWludCB2dG90X3JlZyA9IChwaXBlID09IDApID8gVlRPVEFMX0EgOiBWVE9UQUxfQjsKKwlpbnQgdmJsYW5rX3JlZyA9IChwaXBlID09IDApID8gVkJMQU5LX0EgOiBWQkxBTktfQjsKKwlpbnQgdnN5bmNfcmVnID0gKHBpcGUgPT0gMCkgPyBWU1lOQ19BIDogVlNZTkNfQjsKKwlpbnQgcGlwZXNyY19yZWcgPSAocGlwZSA9PSAwKSA/IFBJUEVBU1JDIDogUElQRUJTUkM7CisJaW50IHJlZmNsayA9IDA7CisJc3RydWN0IG1yc3RfY2xvY2tfdCBjbG9jazsKKwl1MzIgZHBsbCA9IDAsIGZwID0gMCwgZHNwY250ciwgcGlwZWNvbmY7CisJYm9vbCBvaywgaXNfc2R2byA9IGZhbHNlOworCWJvb2wgaXNfY3J0ID0gZmFsc2UsIGlzX2x2ZHMgPSBmYWxzZSwgaXNfdHYgPSBmYWxzZTsKKwlib29sIGlzX21pcGkgPSBmYWxzZTsKKwlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICptb2RlX2NvbmZpZyA9ICZkZXYtPm1vZGVfY29uZmlnOworCXN0cnVjdCBwc2JfaW50ZWxfb3V0cHV0ICpwc2JfaW50ZWxfb3V0cHV0ID0gTlVMTDsKKwl1aW50NjRfdCBzY2FsaW5nVHlwZSA9IERSTV9NT0RFX1NDQUxFX0ZVTExTQ1JFRU47CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCisJUFNCX0RFQlVHX0VOVFJZKCJwaXBlID0gMHgleFxuIiwgcGlwZSk7CisKKwlpZiAoIWdtYV9wb3dlcl9iZWdpbihkZXYsIHRydWUpKQorCQlyZXR1cm4gMDsKKworCW1lbWNweSgmcHNiX2ludGVsX2NydGMtPnNhdmVkX21vZGUsCisJCW1vZGUsCisJCXNpemVvZihzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSkpOworCW1lbWNweSgmcHNiX2ludGVsX2NydGMtPnNhdmVkX2FkanVzdGVkX21vZGUsCisJCWFkanVzdGVkX21vZGUsCisJCXNpemVvZihzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSkpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmbW9kZV9jb25maWctPmVuY29kZXJfbGlzdCwgaGVhZCkgeworCisJCWlmIChlbmNvZGVyLT5jcnRjICE9IGNydGMpCisJCQljb250aW51ZTsKKworCQlwc2JfaW50ZWxfb3V0cHV0ID0gZW5jX3RvX3BzYl9pbnRlbF9vdXRwdXQoZW5jb2Rlcik7CisJCXN3aXRjaCAocHNiX2ludGVsX291dHB1dC0+dHlwZSkgeworCQljYXNlIElOVEVMX09VVFBVVF9MVkRTOgorCQkJaXNfbHZkcyA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSBJTlRFTF9PVVRQVVRfU0RWTzoKKwkJCWlzX3Nkdm8gPSB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgSU5URUxfT1VUUFVUX1RWT1VUOgorCQkJaXNfdHYgPSB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgSU5URUxfT1VUUFVUX0FOQUxPRzoKKwkJCWlzX2NydCA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSBJTlRFTF9PVVRQVVRfTUlQSToKKwkJCWlzX21pcGkgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBEaXNhYmxlIHRoZSBWR0EgcGxhbmUgdGhhdCB3ZSBuZXZlciB1c2UgKi8KKwlSRUdfV1JJVEUoVkdBQ05UUkwsIFZHQV9ESVNQX0RJU0FCTEUpOworCisJLyogRGlzYWJsZSB0aGUgcGFuZWwgZml0dGVyIGlmIGl0IHdhcyBvbiBvdXIgcGlwZSAqLworCWlmIChtcnN0X3BhbmVsX2ZpdHRlcl9waXBlKGRldikgPT0gcGlwZSkKKwkJUkVHX1dSSVRFKFBGSVRfQ09OVFJPTCwgMCk7CisKKwlSRUdfV1JJVEUocGlwZXNyY19yZWcsCisJCSAgKChtb2RlLT5jcnRjX2hkaXNwbGF5IC0gMSkgPDwgMTYpIHwKKwkJICAobW9kZS0+Y3J0Y192ZGlzcGxheSAtIDEpKTsKKworCWlmIChwc2JfaW50ZWxfb3V0cHV0KQorCQlkcm1fY29ubmVjdG9yX3Byb3BlcnR5X2dldF92YWx1ZSgmcHNiX2ludGVsX291dHB1dC0+YmFzZSwKKwkJCWRldi0+bW9kZV9jb25maWcuc2NhbGluZ19tb2RlX3Byb3BlcnR5LCAmc2NhbGluZ1R5cGUpOworCisJaWYgKHNjYWxpbmdUeXBlID09IERSTV9NT0RFX1NDQUxFX05PX1NDQUxFKSB7CisJCS8qIE1vb3Jlc3Rvd24gZG9lc24ndCBoYXZlIHJlZ2lzdGVyIHN1cHBvcnQgZm9yIGNlbnRlcmluZyBzbworCQkgKiB3ZSBuZWVkIHRvIG1lc3Mgd2l0aCB0aGUgaC92YmxhbmsgYW5kIGgvdnN5bmMgc3RhcnQgYW5kCisJCSAqIGVuZHMgdG8gZ2V0IGNlbnRlcmluZyAqLworCQlpbnQgb2Zmc2V0WCA9IDAsIG9mZnNldFkgPSAwOworCisJCW9mZnNldFggPSAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSAtCisJCQkgICBtb2RlLT5jcnRjX2hkaXNwbGF5KSAvIDI7CisJCW9mZnNldFkgPSAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAtCisJCQkgICBtb2RlLT5jcnRjX3ZkaXNwbGF5KSAvIDI7CisKKwkJUkVHX1dSSVRFKGh0b3RfcmVnLCAobW9kZS0+Y3J0Y19oZGlzcGxheSAtIDEpIHwKKwkJCSgoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19odG90YWwgLSAxKSA8PCAxNikpOworCQlSRUdfV1JJVEUodnRvdF9yZWcsIChtb2RlLT5jcnRjX3ZkaXNwbGF5IC0gMSkgfAorCQkJKChhZGp1c3RlZF9tb2RlLT5jcnRjX3Z0b3RhbCAtIDEpIDw8IDE2KSk7CisJCVJFR19XUklURShoYmxhbmtfcmVnLAorCQkJKGFkanVzdGVkX21vZGUtPmNydGNfaGJsYW5rX3N0YXJ0IC0gb2Zmc2V0WCAtIDEpIHwKKwkJCSgoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oYmxhbmtfZW5kIC0gb2Zmc2V0WCAtIDEpIDw8IDE2KSk7CisJCVJFR19XUklURShoc3luY19yZWcsCisJCQkoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19zdGFydCAtIG9mZnNldFggLSAxKSB8CisJCQkoKGFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfZW5kIC0gb2Zmc2V0WCAtIDEpIDw8IDE2KSk7CisJCVJFR19XUklURSh2YmxhbmtfcmVnLAorCQkJKGFkanVzdGVkX21vZGUtPmNydGNfdmJsYW5rX3N0YXJ0IC0gb2Zmc2V0WSAtIDEpIHwKKwkJCSgoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192YmxhbmtfZW5kIC0gb2Zmc2V0WSAtIDEpIDw8IDE2KSk7CisJCVJFR19XUklURSh2c3luY19yZWcsCisJCQkoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19zdGFydCAtIG9mZnNldFkgLSAxKSB8CisJCQkoKGFkanVzdGVkX21vZGUtPmNydGNfdnN5bmNfZW5kIC0gb2Zmc2V0WSAtIDEpIDw8IDE2KSk7CisJfSBlbHNlIHsKKwkJUkVHX1dSSVRFKGh0b3RfcmVnLCAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSAtIDEpIHwKKwkJCSgoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19odG90YWwgLSAxKSA8PCAxNikpOworCQlSRUdfV1JJVEUodnRvdF9yZWcsIChhZGp1c3RlZF9tb2RlLT5jcnRjX3ZkaXNwbGF5IC0gMSkgfAorCQkJKChhZGp1c3RlZF9tb2RlLT5jcnRjX3Z0b3RhbCAtIDEpIDw8IDE2KSk7CisJCVJFR19XUklURShoYmxhbmtfcmVnLCAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oYmxhbmtfc3RhcnQgLSAxKSB8CisJCQkoKGFkanVzdGVkX21vZGUtPmNydGNfaGJsYW5rX2VuZCAtIDEpIDw8IDE2KSk7CisJCVJFR19XUklURShoc3luY19yZWcsIChhZGp1c3RlZF9tb2RlLT5jcnRjX2hzeW5jX3N0YXJ0IC0gMSkgfAorCQkJKChhZGp1c3RlZF9tb2RlLT5jcnRjX2hzeW5jX2VuZCAtIDEpIDw8IDE2KSk7CisJCVJFR19XUklURSh2YmxhbmtfcmVnLCAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192Ymxhbmtfc3RhcnQgLSAxKSB8CisJCQkoKGFkanVzdGVkX21vZGUtPmNydGNfdmJsYW5rX2VuZCAtIDEpIDw8IDE2KSk7CisJCVJFR19XUklURSh2c3luY19yZWcsIChhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0IC0gMSkgfAorCQkJKChhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX2VuZCAtIDEpIDw8IDE2KSk7CisJfQorCisJLyogRmx1c2ggdGhlIHBsYW5lIGNoYW5nZXMgKi8KKwl7CisJCXN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgKmNydGNfZnVuY3MgPQorCQkgICAgY3J0Yy0+aGVscGVyX3ByaXZhdGU7CisJCWNydGNfZnVuY3MtPm1vZGVfc2V0X2Jhc2UoY3J0YywgeCwgeSwgb2xkX2ZiKTsKKwl9CisKKwkvKiBzZXR1cCBwaXBlY29uZiAqLworCXBpcGVjb25mID0gUkVHX1JFQUQocGlwZWNvbmZfcmVnKTsKKworCS8qIFNldCB1cCB0aGUgZGlzcGxheSBwbGFuZSByZWdpc3RlciAqLworCWRzcGNudHIgPSBSRUdfUkVBRChkc3BjbnRyX3JlZyk7CisJZHNwY250ciB8PSBESVNQUExBTkVfR0FNTUFfRU5BQkxFOworCisJaWYgKHBpcGUgPT0gMCkKKwkJZHNwY250ciB8PSBESVNQUExBTkVfU0VMX1BJUEVfQTsKKwllbHNlCisJCWRzcGNudHIgfD0gRElTUFBMQU5FX1NFTF9QSVBFX0I7CisKKwlkZXZfcHJpdi0+ZHNwY250ciA9IGRzcGNudHIgfD0gRElTUExBWV9QTEFORV9FTkFCTEU7CisJZGV2X3ByaXYtPnBpcGVjb25mID0gcGlwZWNvbmYgfD0gUElQRUFDT05GX0VOQUJMRTsKKworCWlmIChpc19taXBpKQorCQlnb3RvIG1yc3RfY3J0Y19tb2RlX3NldF9leGl0OworCisJcmVmY2xrID0gZGV2X3ByaXYtPmNvcmVfZnJlcSAqIDEwMDA7CisKKwlkcGxsID0gMDsJCS8qQklUMTYgPSAwIGZvciAxMDBNSHogcmVmZXJlbmNlICovCisKKwlvayA9IG1yc3RGaW5kQmVzdFBMTChjcnRjLCBhZGp1c3RlZF9tb2RlLT5jbG9jaywgcmVmY2xrLCAmY2xvY2spOworCisJaWYgKCFvaykgeworCQlQU0JfREVCVUdfRU5UUlkoCisJCQkibXJzdEZpbmRCZXN0UExMIGZhaWwgaW4gbXJzdF9jcnRjX21vZGVfc2V0LlxuIik7CisJfSBlbHNlIHsKKwkJUFNCX0RFQlVHX0VOVFJZKCJtcnN0X2NydGNfbW9kZV9zZXQgcGl4ZWwgY2xvY2sgPSAlZCwiCisJCQkgIm0gPSAleCwgcDEgPSAleC5cbiIsIGNsb2NrLmRvdCwgY2xvY2subSwKKwkJCSBjbG9jay5wMSk7CisJfQorCisJZnAgPSBtcnN0X21fY29udmVydHNbKGNsb2NrLm0gLSBNUlNUX01fTUlOKV0gPDwgODsKKworCWRwbGwgfD0gRFBMTF9WR0FfTU9ERV9ESVM7CisKKworCWRwbGwgfD0gRFBMTF9WQ09fRU5BQkxFOworCisJaWYgKGlzX2x2ZHMpCisJCWRwbGwgfD0gRFBMTEFfTU9ERV9MVkRTOworCWVsc2UKKwkJZHBsbCB8PSBEUExMQl9NT0RFX0RBQ19TRVJJQUw7CisKKwlpZiAoaXNfc2R2bykgeworCQlpbnQgc2R2b19waXhlbF9tdWx0aXBseSA9CisJCSAgICBhZGp1c3RlZF9tb2RlLT5jbG9jayAvIG1vZGUtPmNsb2NrOworCisJCWRwbGwgfD0gRFBMTF9EVk9fSElHSF9TUEVFRDsKKwkJZHBsbCB8PQorCQkgICAgKHNkdm9fcGl4ZWxfbXVsdGlwbHkgLQorCQkgICAgIDEpIDw8IFNEVk9fTVVMVElQTElFUl9TSElGVF9ISVJFUzsKKwl9CisKKworCS8qIGNvbXB1dGUgYml0bWFzayBmcm9tIHAxIHZhbHVlICovCisJZHBsbCB8PSAoMSA8PCAoY2xvY2sucDEgLSAyKSkgPDwgMTc7CisKKwlkcGxsIHw9IERQTExfVkNPX0VOQUJMRTsKKworCW1yc3RQcmludFBsbCgiY2hvc2VuIiwgJmNsb2NrKTsKKworCWlmIChkcGxsICYgRFBMTF9WQ09fRU5BQkxFKSB7CisJCVJFR19XUklURShmcF9yZWcsIGZwKTsKKwkJUkVHX1dSSVRFKGRwbGxfcmVnLCBkcGxsICYgfkRQTExfVkNPX0VOQUJMRSk7CisJCVJFR19SRUFEKGRwbGxfcmVnKTsKKwkJLyogQ2hlY2sgdGhlIERQTExBIGxvY2sgYml0IFBJUEVBQ09ORlsyOV0gKi8KKwkJdWRlbGF5KDE1MCk7CisJfQorCisJUkVHX1dSSVRFKGZwX3JlZywgZnApOworCVJFR19XUklURShkcGxsX3JlZywgZHBsbCk7CisJUkVHX1JFQUQoZHBsbF9yZWcpOworCS8qIFdhaXQgZm9yIHRoZSBjbG9ja3MgdG8gc3RhYmlsaXplLiAqLworCXVkZWxheSgxNTApOworCisJLyogd3JpdGUgaXQgYWdhaW4gLS0gdGhlIEJJT1MgZG9lcywgYWZ0ZXIgYWxsICovCisJUkVHX1dSSVRFKGRwbGxfcmVnLCBkcGxsKTsKKwlSRUdfUkVBRChkcGxsX3JlZyk7CisJLyogV2FpdCBmb3IgdGhlIGNsb2NrcyB0byBzdGFiaWxpemUuICovCisJdWRlbGF5KDE1MCk7CisKKwlSRUdfV1JJVEUocGlwZWNvbmZfcmVnLCBwaXBlY29uZik7CisJUkVHX1JFQUQocGlwZWNvbmZfcmVnKTsKKwlwc2JfaW50ZWxfd2FpdF9mb3JfdmJsYW5rKGRldik7CisKKwlSRUdfV1JJVEUoZHNwY250cl9yZWcsIGRzcGNudHIpOworCXBzYl9pbnRlbF93YWl0X2Zvcl92YmxhbmsoZGV2KTsKKworbXJzdF9jcnRjX21vZGVfc2V0X2V4aXQ6CisJZ21hX3Bvd2VyX2VuZChkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbCBtcnN0X2NydGNfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworCXJldHVybiB0cnVlOworfQorCitpbnQgbXJzdF9waXBlX3NldF9iYXNlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCSAgICBpbnQgeCwgaW50IHksIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm9sZF9mYikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCS8qIHN0cnVjdCBkcm1faTkxNV9tYXN0ZXJfcHJpdmF0ZSAqbWFzdGVyX3ByaXY7ICovCisJc3RydWN0IHBzYl9pbnRlbF9jcnRjICpwc2JfaW50ZWxfY3J0YyA9IHRvX3BzYl9pbnRlbF9jcnRjKGNydGMpOworCXN0cnVjdCBwc2JfZnJhbWVidWZmZXIgKnBzYmZiID0gdG9fcHNiX2ZiKGNydGMtPmZiKTsKKwlpbnQgcGlwZSA9IHBzYl9pbnRlbF9jcnRjLT5waXBlOworCXVuc2lnbmVkIGxvbmcgc3RhcnQsIG9mZnNldDsKKwkvKiBGSVhNRTogY2hlY2sgaWYgd2UgbmVlZCB0aGlzIHN1cmVseSBNUlNUIGlzIHBpcGUgMCBvbmx5ICovCisJaW50IGRzcGJhc2UgPSAocGlwZSA9PSAwID8gRFNQQUxJTk9GRiA6IERTUEJCQVNFKTsKKwlpbnQgZHNwc3VyZiA9IChwaXBlID09IDAgPyBEU1BBU1VSRiA6IERTUEJTVVJGKTsKKwlpbnQgZHNwc3RyaWRlID0gKHBpcGUgPT0gMCkgPyBEU1BBU1RSSURFIDogRFNQQlNUUklERTsKKwlpbnQgZHNwY250cl9yZWcgPSAocGlwZSA9PSAwKSA/IERTUEFDTlRSIDogRFNQQkNOVFI7CisJdTMyIGRzcGNudHI7CisJaW50IHJldCA9IDA7CisKKwlQU0JfREVCVUdfRU5UUlkoIlxuIik7CisKKwkvKiBubyBmYiBib3VuZCAqLworCWlmICghY3J0Yy0+ZmIpIHsKKwkJRFJNX0RFQlVHKCJObyBGQiBib3VuZFxuIik7CisJCXJldHVybiAwOworCX0KKworCWlmICghZ21hX3Bvd2VyX2JlZ2luKGRldiwgdHJ1ZSkpCisJCXJldHVybiAwOworCisJc3RhcnQgPSBwc2JmYi0+Z3R0LT5vZmZzZXQ7CisJb2Zmc2V0ID0geSAqIGNydGMtPmZiLT5waXRjaCArIHggKiAoY3J0Yy0+ZmItPmJpdHNfcGVyX3BpeGVsIC8gOCk7CisKKwlSRUdfV1JJVEUoZHNwc3RyaWRlLCBjcnRjLT5mYi0+cGl0Y2gpOworCisJZHNwY250ciA9IFJFR19SRUFEKGRzcGNudHJfcmVnKTsKKwlkc3BjbnRyICY9IH5ESVNQUExBTkVfUElYRk9STUFUX01BU0s7CisKKwlzd2l0Y2ggKGNydGMtPmZiLT5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgODoKKwkJZHNwY250ciB8PSBESVNQUExBTkVfOEJQUDsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJaWYgKGNydGMtPmZiLT5kZXB0aCA9PSAxNSkKKwkJCWRzcGNudHIgfD0gRElTUFBMQU5FXzE1XzE2QlBQOworCQllbHNlCisJCQlkc3BjbnRyIHw9IERJU1BQTEFORV8xNkJQUDsKKwkJYnJlYWs7CisJY2FzZSAyNDoKKwljYXNlIDMyOgorCQlkc3BjbnRyIHw9IERJU1BQTEFORV8zMkJQUF9OT19BTFBIQTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFJNX0VSUk9SKCJVbmtub3duIGNvbG9yIGRlcHRoXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBwaXBlX3NldF9iYXNlX2V4aXQ7CisJfQorCVJFR19XUklURShkc3BjbnRyX3JlZywgZHNwY250cik7CisKKwlEUk1fREVCVUcoIldyaXRpbmcgYmFzZSAlMDhsWCAlMDhsWCAlZCAlZFxuIiwgc3RhcnQsIG9mZnNldCwgeCwgeSk7CisJaWYgKDAgLyogRklYTUVBQyAtIGNoZWNrIHdoYXQgUFNCIG5lZWRzICovKSB7CisJCVJFR19XUklURShkc3BiYXNlLCBvZmZzZXQpOworCQlSRUdfUkVBRChkc3BiYXNlKTsKKwkJUkVHX1dSSVRFKGRzcHN1cmYsIHN0YXJ0KTsKKwkJUkVHX1JFQUQoZHNwc3VyZik7CisJfSBlbHNlIHsKKwkJUkVHX1dSSVRFKGRzcGJhc2UsIHN0YXJ0ICsgb2Zmc2V0KTsKKwkJUkVHX1JFQUQoZHNwYmFzZSk7CisJfQorCitwaXBlX3NldF9iYXNlX2V4aXQ6CisJZ21hX3Bvd2VyX2VuZChkZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG1yc3RfY3J0Y19wcmVwYXJlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzICpjcnRjX2Z1bmNzID0gY3J0Yy0+aGVscGVyX3ByaXZhdGU7CisJY3J0Y19mdW5jcy0+ZHBtcyhjcnRjLCBEUk1fTU9ERV9EUE1TX09GRik7Cit9CisKK3N0YXRpYyB2b2lkIG1yc3RfY3J0Y19jb21taXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgKmNydGNfZnVuY3MgPSBjcnRjLT5oZWxwZXJfcHJpdmF0ZTsKKwljcnRjX2Z1bmNzLT5kcG1zKGNydGMsIERSTV9NT0RFX0RQTVNfT04pOworfQorCitjb25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIG1yc3RfaGVscGVyX2Z1bmNzID0geworCS5kcG1zID0gbXJzdF9jcnRjX2RwbXMsCisJLm1vZGVfZml4dXAgPSBtcnN0X2NydGNfbW9kZV9maXh1cCwKKwkubW9kZV9zZXQgPSBtcnN0X2NydGNfbW9kZV9zZXQsCisJLm1vZGVfc2V0X2Jhc2UgPSBtcnN0X3BpcGVfc2V0X2Jhc2UsCisJLnByZXBhcmUgPSBtcnN0X2NydGNfcHJlcGFyZSwKKwkuY29tbWl0ID0gbXJzdF9jcnRjX2NvbW1pdCwKK307CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvbXJzdF9sdmRzLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL21yc3RfbHZkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMDhiNzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL21yc3RfbHZkcy5jCkBAIC0wLDAgKzEsMzcxIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMDYtMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogQXV0aG9yczoKKyAqCUVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+CisgKglEYXZlIEFpcmxpZSA8YWlybGllZEBsaW51eC5pZT4KKyAqCUplc3NlIEJhcm5lcyA8amVzc2UuYmFybmVzQGludGVsLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxhc20vbXJzdC5oPgorCisjaW5jbHVkZSAicHNiX2ludGVsX2Jpb3MuaCIKKyNpbmNsdWRlICJwc2JfZHJ2LmgiCisjaW5jbHVkZSAicHNiX2ludGVsX2Rydi5oIgorI2luY2x1ZGUgInBzYl9pbnRlbF9yZWcuaCIKKyNpbmNsdWRlICJwc2JfcG93ZXJtZ210LmgiCisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorCisvKiBUaGUgbWF4L21pbiBQV00gZnJlcXVlbmN5IGluIEJQQ1JbMzE6MTddIC0gKi8KKy8qIFRoZSBzbWFsbGVzdCBudW1iZXIgaXMgMSAobm90IDApIHRoYXQgY2FuIGZpdCBpbiB0aGUKKyAqIDE1LWJpdCBmaWVsZCBvZiB0aGUgYW5kIHRoZW4qLworLyogc2hpZnRzIHRvIHRoZSBsZWZ0IGJ5IG9uZSBiaXQgdG8gZ2V0IHRoZSBhY3R1YWwgMTYtYml0CisgKiB2YWx1ZSB0aGF0IHRoZSAxNS1iaXRzIGNvcnJlc3BvbmQgdG8uKi8KKyNkZWZpbmUgTVJTVF9CTENfTUFYX1BXTV9SRUdfRlJFUQkgICAgMHhGRkZGCisjZGVmaW5lIEJSSUdIVE5FU1NfTUFYX0xFVkVMIDEwMAorCisvKioKKyAqIFNldHMgdGhlIHBvd2VyIHN0YXRlIGZvciB0aGUgcGFuZWwuCisgKi8KK3N0YXRpYyB2b2lkIG1yc3RfbHZkc19zZXRfcG93ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgcHNiX2ludGVsX291dHB1dCAqb3V0cHV0LCBib29sIG9uKQoreworCXUzMiBwcF9zdGF0dXM7CisJRFJNX0RSSVZFUl9QUklWQVRFX1QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlQU0JfREVCVUdfRU5UUlkoIlxuIik7CisKKwlpZiAoIWdtYV9wb3dlcl9iZWdpbihkZXYsIHRydWUpKQorCQlyZXR1cm47CisKKwlpZiAob24pIHsKKwkJUkVHX1dSSVRFKFBQX0NPTlRST0wsIFJFR19SRUFEKFBQX0NPTlRST0wpIHwKKwkJCSAgUE9XRVJfVEFSR0VUX09OKTsKKwkJZG8geworCQkJcHBfc3RhdHVzID0gUkVHX1JFQUQoUFBfU1RBVFVTKTsKKwkJfSB3aGlsZSAoKHBwX3N0YXR1cyAmIChQUF9PTiB8IFBQX1JFQURZKSkgPT0gUFBfUkVBRFkpOworCQlkZXZfcHJpdi0+aXNfbHZkc19vbiA9IHRydWU7CisJfSBlbHNlIHsKKwkJUkVHX1dSSVRFKFBQX0NPTlRST0wsIFJFR19SRUFEKFBQX0NPTlRST0wpICYKKwkJCSAgflBPV0VSX1RBUkdFVF9PTik7CisJCWRvIHsKKwkJCXBwX3N0YXR1cyA9IFJFR19SRUFEKFBQX1NUQVRVUyk7CisJCX0gd2hpbGUgKHBwX3N0YXR1cyAmIFBQX09OKTsKKwkJZGV2X3ByaXYtPmlzX2x2ZHNfb24gPSBmYWxzZTsKKwkJcG1fcmVxdWVzdF9pZGxlKCZkZXYtPnBkZXYtPmRldik7CisJfQorCisJZ21hX3Bvd2VyX2VuZChkZXYpOworfQorCitzdGF0aWMgdm9pZCBtcnN0X2x2ZHNfZHBtcyhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIGludCBtb2RlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CisJc3RydWN0IHBzYl9pbnRlbF9vdXRwdXQgKm91dHB1dCA9IGVuY190b19wc2JfaW50ZWxfb3V0cHV0KGVuY29kZXIpOworCisJUFNCX0RFQlVHX0VOVFJZKCJcbiIpOworCisJaWYgKG1vZGUgPT0gRFJNX01PREVfRFBNU19PTikKKwkJbXJzdF9sdmRzX3NldF9wb3dlcihkZXYsIG91dHB1dCwgdHJ1ZSk7CisJZWxzZQorCQltcnN0X2x2ZHNfc2V0X3Bvd2VyKGRldiwgb3V0cHV0LCBmYWxzZSk7CisKKwkvKiBYWFg6IFdlIG5ldmVyIHBvd2VyIGRvd24gdGhlIExWRFMgcGFpcnMuICovCit9CisKK3N0YXRpYyB2b2lkIG1yc3RfbHZkc19tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCit7CisJc3RydWN0IHBzYl9pbnRlbF9tb2RlX2RldmljZSAqbW9kZV9kZXYgPQorCQkJCWVuY190b19wc2JfaW50ZWxfb3V0cHV0KGVuY29kZXIpLT5tb2RlX2RldjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXUzMiBsdmRzX3BvcnQ7CisJdWludDY0X3QgdiA9IERSTV9NT0RFX1NDQUxFX0ZVTExTQ1JFRU47CisKKwlQU0JfREVCVUdfRU5UUlkoIlxuIik7CisKKwlpZiAoIWdtYV9wb3dlcl9iZWdpbihkZXYsIHRydWUpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFRoZSBMVkRTIHBpbiBwYWlyIHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gdHVybmVkIG9uIGluIHRoZQorCSAqIHBzYl9pbnRlbF9jcnRjX21vZGVfc2V0IHNpbmNlIGl0IGhhcyBhIGxhcmdlIGltcGFjdCBvbiB0aGUgRFBMTAorCSAqIHNldHRpbmdzLgorCSAqLworCWx2ZHNfcG9ydCA9IChSRUdfUkVBRChMVkRTKSAmCisJCSAgICAofkxWRFNfUElQRUJfU0VMRUNUKSkgfAorCQkgICAgTFZEU19QT1JUX0VOIHwKKwkJICAgIExWRFNfQk9SREVSX0VOOworCisJaWYgKG1vZGVfZGV2LT5wYW5lbF93YW50c19kaXRoZXIpCisJCWx2ZHNfcG9ydCB8PSBNUlNUX1BBTkVMXzhUTzZfRElUSEVSX0VOQUJMRTsKKworCVJFR19XUklURShMVkRTLCBsdmRzX3BvcnQpOworCisJZHJtX2Nvbm5lY3Rvcl9wcm9wZXJ0eV9nZXRfdmFsdWUoCisJCSZlbmNfdG9fcHNiX2ludGVsX291dHB1dChlbmNvZGVyKS0+YmFzZSwKKwkJZGV2LT5tb2RlX2NvbmZpZy5zY2FsaW5nX21vZGVfcHJvcGVydHksCisJCSZ2KTsKKworCWlmICh2ID09IERSTV9NT0RFX1NDQUxFX05PX1NDQUxFKQorCQlSRUdfV1JJVEUoUEZJVF9DT05UUk9MLCAwKTsKKwllbHNlIGlmICh2ID09IERSTV9NT0RFX1NDQUxFX0FTUEVDVCkgeworCQlpZiAoKG1vZGUtPnZkaXNwbGF5ICE9IGFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXkpIHx8CisJCSAgICAobW9kZS0+aGRpc3BsYXkgIT0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSkpIHsKKwkJCWlmICgoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSAqIG1vZGUtPnZkaXNwbGF5KSA9PQorCQkJICAgIChtb2RlLT5oZGlzcGxheSAqIGFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXkpKQorCQkJCVJFR19XUklURShQRklUX0NPTlRST0wsIFBGSVRfRU5BQkxFKTsKKwkJCWVsc2UgaWYgKChhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5ICoKKwkJCQltb2RlLT52ZGlzcGxheSkgPiAobW9kZS0+aGRpc3BsYXkgKgorCQkJCWFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXkpKQorCQkJCVJFR19XUklURShQRklUX0NPTlRST0wsIFBGSVRfRU5BQkxFIHwKKwkJCQkJICBQRklUX1NDQUxJTkdfTU9ERV9QSUxMQVJCT1gpOworCQkJZWxzZQorCQkJCVJFR19XUklURShQRklUX0NPTlRST0wsIFBGSVRfRU5BQkxFIHwKKwkJCQkJICBQRklUX1NDQUxJTkdfTU9ERV9MRVRURVJCT1gpOworCQl9IGVsc2UKKwkJCVJFR19XUklURShQRklUX0NPTlRST0wsIFBGSVRfRU5BQkxFKTsKKwl9IGVsc2UgLyoodiA9PSBEUk1fTU9ERV9TQ0FMRV9GVUxMU0NSRUVOKSovCisJCVJFR19XUklURShQRklUX0NPTlRST0wsIFBGSVRfRU5BQkxFKTsKKworCWdtYV9wb3dlcl9lbmQoZGV2KTsKK30KKworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyBtcnN0X2x2ZHNfaGVscGVyX2Z1bmNzID0geworCS5kcG1zID0gbXJzdF9sdmRzX2RwbXMsCisJLm1vZGVfZml4dXAgPSBwc2JfaW50ZWxfbHZkc19tb2RlX2ZpeHVwLAorCS5wcmVwYXJlID0gcHNiX2ludGVsX2x2ZHNfcHJlcGFyZSwKKwkubW9kZV9zZXQgPSBtcnN0X2x2ZHNfbW9kZV9zZXQsCisJLmNvbW1pdCA9IHBzYl9pbnRlbF9sdmRzX2NvbW1pdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBsdmRzX2NvbmZpZ3VyYXRpb25fbW9kZXNbXSA9IHsKKwkvKiBoYXJkIGNvZGVkIGZpeGVkIG1vZGUgZm9yIFRQTyBMVFBTIExQSjA0MEswMDFBICovCisJeyBEUk1fTU9ERSgiODAweDQ4MCIsICBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMzMyNjQsIDgwMCwgODM2LAorCQkgICA4NDYsIDEwNTYsIDAsIDQ4MCwgNDg5LCA0OTEsIDUyNSwgMCwgMCkgfSwKKwkvKiBoYXJkIGNvZGVkIGZpeGVkIG1vZGUgZm9yIExWRFMgODAweDQ4MCAqLworCXsgRFJNX01PREUoIjgwMHg0ODAiLCAgRFJNX01PREVfVFlQRV9EUklWRVIsIDMwOTk0LCA4MDAsIDgwMSwKKwkJICAgODAyLCAxMDI0LCAwLCA0ODAsIDQ4MSwgNDgyLCA1MjUsIDAsIDApIH0sCisJLyogaGFyZCBjb2RlZCBmaXhlZCBtb2RlIGZvciBTYW1zdW5nIDQ4MHdzdmdhIExWRFMgMTAyNHg2MDBANzUgKi8KKwl7IERSTV9NT0RFKCIxMDI0eDYwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCA1Mzk5MCwgMTAyNCwgMTA3MiwKKwkJICAgMTEwNCwgMTE4NCwgMCwgNjAwLCA2MDMsIDYwNCwgNjA4LCAwLCAwKSB9LAorCS8qIGhhcmQgY29kZWQgZml4ZWQgbW9kZSBmb3IgU2Ftc3VuZyA0ODB3c3ZnYSBMVkRTIDEwMjR4NjAwQDc1ICovCisJeyBEUk1fTU9ERSgiMTAyNHg2MDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgNTM5OTAsIDEwMjQsIDExMDQsCisJCSAgIDExMzYsIDExODQsIDAsIDYwMCwgNjAzLCA2MDQsIDYwOCwgMCwgMCkgfSwKKwkvKiBoYXJkIGNvZGVkIGZpeGVkIG1vZGUgZm9yIFNoYXJwIHdzdmdhIExWRFMgMTAyNHg2MDAgKi8KKwl7IERSTV9NT0RFKCIxMDI0eDYwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCA0ODg4NSwgMTAyNCwgMTEyNCwKKwkJICAgMTIwNCwgMTMxMiwgMCwgNjAwLCA2MDcsIDYxMCwgNjIxLCAwLCAwKSB9LAorCS8qIGhhcmQgY29kZWQgZml4ZWQgbW9kZSBmb3IgTFZEUyAxMDI0eDc2OCAqLworCXsgRFJNX01PREUoIjEwMjR4NzY4IiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDY1MDAwLCAxMDI0LCAxMDQ4LAorCQkgICAxMTg0LCAxMzQ0LCAwLCA3NjgsIDc3MSwgNzc3LCA4MDYsIDAsIDApIH0sCisJLyogaGFyZCBjb2RlZCBmaXhlZCBtb2RlIGZvciBMVkRTIDEzNjZ4NzY4ICovCisJeyBEUk1fTU9ERSgiMTM2Nng3NjgiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgNzc1MDAsIDEzNjYsIDE0MzAsCisJCSAgIDE1NTgsIDE2NjQsIDAsIDc2OCwgNzY5LCA3NzAsIDc3NiwgMCwgMCkgfSwKK307CisKKy8qIFJldHVybnMgdGhlIHBhbmVsIGZpeGVkIG1vZGUgZnJvbSBjb25maWd1cmF0aW9uLiAqLworCitzdGF0aWMgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKgorbXJzdF9sdmRzX2dldF9jb25maWd1cmF0aW9uX21vZGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9IE5VTEw7CisJc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBtcnN0X3RpbWluZ19pbmZvICp0aSA9ICZkZXZfcHJpdi0+Z2N0X2RhdGEuRFREOworCisJaWYgKGRldl9wcml2LT52YnRfZGF0YS5zaXplICE9IDB4MDApIHsgLyppZiBub24temVybywgdGhlbiB1c2UgdmJ0Ki8KKwkJbW9kZSA9IGt6YWxsb2Moc2l6ZW9mKCptb2RlKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghbW9kZSkKKwkJCXJldHVybiBOVUxMOworCisJCW1vZGUtPmhkaXNwbGF5ID0gKHRpLT5oYWN0aXZlX2hpIDw8IDgpIHwgdGktPmhhY3RpdmVfbG87CisJCW1vZGUtPnZkaXNwbGF5ID0gKHRpLT52YWN0aXZlX2hpIDw8IDgpIHwgdGktPnZhY3RpdmVfbG87CisJCW1vZGUtPmhzeW5jX3N0YXJ0ID0gbW9kZS0+aGRpc3BsYXkgKyBcCisJCQkJKCh0aS0+aHN5bmNfb2Zmc2V0X2hpIDw8IDgpIHwgXAorCQkJCXRpLT5oc3luY19vZmZzZXRfbG8pOworCQltb2RlLT5oc3luY19lbmQgPSBtb2RlLT5oc3luY19zdGFydCArIFwKKwkJCQkoKHRpLT5oc3luY19wdWxzZV93aWR0aF9oaSA8PCA4KSB8IFwKKwkJCQl0aS0+aHN5bmNfcHVsc2Vfd2lkdGhfbG8pOworCQltb2RlLT5odG90YWwgPSBtb2RlLT5oZGlzcGxheSArICgodGktPmhibGFua19oaSA8PCA4KSB8IFwKKwkJCQkJCQl0aS0+aGJsYW5rX2xvKTsKKwkJbW9kZS0+dnN5bmNfc3RhcnQgPSBcCisJCQltb2RlLT52ZGlzcGxheSArICgodGktPnZzeW5jX29mZnNldF9oaSA8PCA0KSB8IFwKKwkJCQkJCXRpLT52c3luY19vZmZzZXRfbG8pOworCQltb2RlLT52c3luY19lbmQgPSBcCisJCQltb2RlLT52c3luY19zdGFydCArICgodGktPnZzeW5jX3B1bHNlX3dpZHRoX2hpIDw8IDQpIHwgXAorCQkJCQkJdGktPnZzeW5jX3B1bHNlX3dpZHRoX2xvKTsKKwkJbW9kZS0+dnRvdGFsID0gbW9kZS0+dmRpc3BsYXkgKyBcCisJCQkJKCh0aS0+dmJsYW5rX2hpIDw8IDgpIHwgdGktPnZibGFua19sbyk7CisJCW1vZGUtPmNsb2NrID0gdGktPnBpeGVsX2Nsb2NrICogMTA7CisjaWYgMAorCQlwcmludGsoS0VSTl9JTkZPICJoZGlzcGxheSBpcyAlZFxuIiwgbW9kZS0+aGRpc3BsYXkpOworCQlwcmludGsoS0VSTl9JTkZPICJ2ZGlzcGxheSBpcyAlZFxuIiwgbW9kZS0+dmRpc3BsYXkpOworCQlwcmludGsoS0VSTl9JTkZPICJIU1MgaXMgJWRcbiIsIG1vZGUtPmhzeW5jX3N0YXJ0KTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiSFNFIGlzICVkXG4iLCBtb2RlLT5oc3luY19lbmQpOworCQlwcmludGsoS0VSTl9JTkZPICJodG90YWwgaXMgJWRcbiIsIG1vZGUtPmh0b3RhbCk7CisJCXByaW50ayhLRVJOX0lORk8gIlZTUyBpcyAlZFxuIiwgbW9kZS0+dnN5bmNfc3RhcnQpOworCQlwcmludGsoS0VSTl9JTkZPICJWU0UgaXMgJWRcbiIsIG1vZGUtPnZzeW5jX2VuZCk7CisJCXByaW50ayhLRVJOX0lORk8gInZ0b3RhbCBpcyAlZFxuIiwgbW9kZS0+dnRvdGFsKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiY2xvY2sgaXMgJWRcbiIsIG1vZGUtPmNsb2NrKTsKKyNlbmRpZgorCX0gZWxzZQorCQltb2RlID0gZHJtX21vZGVfZHVwbGljYXRlKGRldiwgJmx2ZHNfY29uZmlndXJhdGlvbl9tb2Rlc1syXSk7CisKKwlkcm1fbW9kZV9zZXRfbmFtZShtb2RlKTsKKwlkcm1fbW9kZV9zZXRfY3J0Y2luZm8obW9kZSwgMCk7CisKKwlyZXR1cm4gbW9kZTsKK30KKworLyoqCisgKiBtcnN0X2x2ZHNfaW5pdCAtIHNldHVwIExWRFMgY29ubmVjdG9ycyBvbiB0aGlzIGRldmljZQorICogQGRldjogZHJtIGRldmljZQorICoKKyAqIENyZWF0ZSB0aGUgY29ubmVjdG9yLCByZWdpc3RlciB0aGUgTFZEUyBEREMgYnVzLCBhbmQgdHJ5IHRvIGZpZ3VyZSBvdXQgd2hhdAorICogbW9kZXMgd2UgY2FuIGRpc3BsYXkgb24gdGhlIExWRFMgcGFuZWwgKGlmIHByZXNlbnQpLgorICovCit2b2lkIG1yc3RfbHZkc19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCSAgICBzdHJ1Y3QgcHNiX2ludGVsX21vZGVfZGV2aWNlICptb2RlX2RldikKK3sKKwlzdHJ1Y3QgcHNiX2ludGVsX291dHB1dCAqcHNiX2ludGVsX291dHB1dDsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9CisJCQkJKHN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKikgZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZWRpZCAqZWRpZDsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpzY2FuOwkvKiAqbW9kZXMsICpiaW9zX21vZGU7ICovCisKKwlQU0JfREVCVUdfRU5UUlkoIlxuIik7CisKKwlwc2JfaW50ZWxfb3V0cHV0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBzYl9pbnRlbF9vdXRwdXQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBzYl9pbnRlbF9vdXRwdXQpCisJCXJldHVybjsKKworCXBzYl9pbnRlbF9vdXRwdXQtPm1vZGVfZGV2ID0gbW9kZV9kZXY7CisJY29ubmVjdG9yID0gJnBzYl9pbnRlbF9vdXRwdXQtPmJhc2U7CisJZW5jb2RlciA9ICZwc2JfaW50ZWxfb3V0cHV0LT5lbmM7CisJZGV2X3ByaXYtPmlzX2x2ZHNfb24gPSB0cnVlOworCWRybV9jb25uZWN0b3JfaW5pdChkZXYsICZwc2JfaW50ZWxfb3V0cHV0LT5iYXNlLAorCQkJICAgJnBzYl9pbnRlbF9sdmRzX2Nvbm5lY3Rvcl9mdW5jcywKKwkJCSAgIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTKTsKKworCWRybV9lbmNvZGVyX2luaXQoZGV2LCAmcHNiX2ludGVsX291dHB1dC0+ZW5jLCAmcHNiX2ludGVsX2x2ZHNfZW5jX2Z1bmNzLAorCQkJIERSTV9NT0RFX0VOQ09ERVJfTFZEUyk7CisKKwlkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoJnBzYl9pbnRlbF9vdXRwdXQtPmJhc2UsCisJCQkJCSAgJnBzYl9pbnRlbF9vdXRwdXQtPmVuYyk7CisJcHNiX2ludGVsX291dHB1dC0+dHlwZSA9IElOVEVMX09VVFBVVF9MVkRTOworCisJZHJtX2VuY29kZXJfaGVscGVyX2FkZChlbmNvZGVyLCAmbXJzdF9sdmRzX2hlbHBlcl9mdW5jcyk7CisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3RvciwKKwkJCQkgJnBzYl9pbnRlbF9sdmRzX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLnN1YnBpeGVsX29yZGVyID0gU3ViUGl4ZWxIb3Jpem9udGFsUkdCOworCWNvbm5lY3Rvci0+aW50ZXJsYWNlX2FsbG93ZWQgPSBmYWxzZTsKKwljb25uZWN0b3ItPmRvdWJsZXNjYW5fYWxsb3dlZCA9IGZhbHNlOworCisJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoY29ubmVjdG9yLAorCQkJCQlkZXYtPm1vZGVfY29uZmlnLnNjYWxpbmdfbW9kZV9wcm9wZXJ0eSwKKwkJCQkJRFJNX01PREVfU0NBTEVfRlVMTFNDUkVFTik7CisJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoY29ubmVjdG9yLAorCQkJCQlkZXZfcHJpdi0+YmFja2xpZ2h0X3Byb3BlcnR5LAorCQkJCQlCUklHSFRORVNTX01BWF9MRVZFTCk7CisKKwltb2RlX2Rldi0+cGFuZWxfd2FudHNfZGl0aGVyID0gZmFsc2U7CisJaWYgKGRldl9wcml2LT52YnRfZGF0YS5zaXplICE9IDB4MDApCisJCW1vZGVfZGV2LT5wYW5lbF93YW50c19kaXRoZXIgPSAoZGV2X3ByaXYtPmdjdF9kYXRhLgorCQkJUGFuZWxfUG9ydF9Db250cm9sICYgTVJTVF9QQU5FTF84VE82X0RJVEhFUl9FTkFCTEUpOworCisJLyoKKwkgKiBMVkRTIGRpc2NvdmVyeToKKwkgKiAxKSBjaGVjayBmb3IgRURJRCBvbiBEREMKKwkgKiAyKSBjaGVjayBmb3IgVkJUIGRhdGEKKwkgKiAzKSBjaGVjayB0byBzZWUgaWYgTFZEUyBpcyBhbHJlYWR5IG9uCisJICogICAgaWYgbm9uZSBvZiB0aGUgYWJvdmUsIG5vIHBhbmVsCisJICogNCkgbWFrZSBzdXJlIGxpZCBpcyBvcGVuCisJICogICAgaWYgY2xvc2VkLCBhY3QgbGlrZSBpdCdzIG5vdCB0aGVyZSBmb3Igbm93CisJICovCisKKwkgLyogVGhpcyBpZmRlZiBjYW4gZ28gb25jZSB0aGUgY3B1IGlkZW50IHN0dWZmIGlzIGNsZWFuZWQgdXAgaW4gYXJjaCAqLworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9NUlNUKQorCWlmIChtcnN0X2lkZW50aWZ5X2NwdSgpKQorICAgICAgICAJaTJjX2FkYXAgPSBpMmNfZ2V0X2FkYXB0ZXIoMik7CisgICAgICAgIGVsc2UJLyogT2FrdHJhaWwgdXNlcyBJMkMgMSAqLworI2VuZGlmICAgICAgICAKKyAgICAgICAgCWkyY19hZGFwID0gaTJjX2dldF9hZGFwdGVyKDEpOworCisJaWYgKGkyY19hZGFwID09IE5VTEwpCisJCXByaW50ayhLRVJOX0FMRVJUICJObyBkZGMgYWRhcHRlciBhdmFpbGFibGUhXG4iKTsKKwkvKgorCSAqIEF0dGVtcHQgdG8gZ2V0IHRoZSBmaXhlZCBwYW5lbCBtb2RlIGZyb20gRERDLiAgQXNzdW1lIHRoYXQgdGhlCisJICogcHJlZmVycmVkIG1vZGUgaXMgdGhlIHJpZ2h0IG9uZS4KKwkgKi8KKwlpZiAoaTJjX2FkYXApIHsKKwkJZWRpZCA9IGRybV9nZXRfZWRpZChjb25uZWN0b3IsIGkyY19hZGFwKTsKKwkJaWYgKGVkaWQpIHsKKwkJCWRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uZWN0b3IsCisJCQkJCQkJCQllZGlkKTsKKwkJCXJldCA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3IsIGVkaWQpOworCQkJa2ZyZWUoZWRpZCk7CisJCX0KKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNjYW4sICZjb25uZWN0b3ItPnByb2JlZF9tb2RlcywgaGVhZCkgeworCQkJaWYgKHNjYW4tPnR5cGUgJiBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRCkgeworCQkJCW1vZGVfZGV2LT5wYW5lbF9maXhlZF9tb2RlID0KKwkJCQkgICAgZHJtX21vZGVfZHVwbGljYXRlKGRldiwgc2Nhbik7CisJCQkJZ290byBvdXQ7CS8qIEZJWE1FOiBjaGVjayBmb3IgcXVpcmtzICovCisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIElmIHdlIGRpZG4ndCBnZXQgRURJRCwgdHJ5IGdldGluZyBwYW5lbCB0aW1pbmcKKwkgKiBmcm9tIGNvbmZpZ3VyYXRpb24gZGF0YQorCSAqLworCW1vZGVfZGV2LT5wYW5lbF9maXhlZF9tb2RlID0gbXJzdF9sdmRzX2dldF9jb25maWd1cmF0aW9uX21vZGUoZGV2KTsKKworCWlmIChtb2RlX2Rldi0+cGFuZWxfZml4ZWRfbW9kZSkgeworCQltb2RlX2Rldi0+cGFuZWxfZml4ZWRfbW9kZS0+dHlwZSB8PQorCQkgICAgRFJNX01PREVfVFlQRV9QUkVGRVJSRUQ7CisJCWdvdG8gb3V0OwkvKiBGSVhNRTogY2hlY2sgZm9yIHF1aXJrcyAqLworCX0KKworCS8qIElmIHdlIHN0aWxsIGRvbid0IGhhdmUgYSBtb2RlIGFmdGVyIGFsbCB0aGF0LCBnaXZlIHVwLiAqLworCWlmICghbW9kZV9kZXYtPnBhbmVsX2ZpeGVkX21vZGUpIHsKKwkJRFJNX0RFQlVHCisJCSAgICAoIkZvdW5kIG5vIG1vZGVzIG9uIHRoZSBsdmRzLCBpZ25vcmluZyB0aGUgTFZEU1xuIik7CisJCWdvdG8gZmFpbGVkX2ZpbmQ7CisJfQorCitvdXQ6CisJZHJtX3N5c2ZzX2Nvbm5lY3Rvcl9hZGQoY29ubmVjdG9yKTsKKwlyZXR1cm47CisKK2ZhaWxlZF9maW5kOgorCURSTV9ERUJVRygiTm8gTFZEUyBtb2RlcyBmb3VuZCwgZGlzYWJsaW5nLlxuIik7CisJaWYgKHBzYl9pbnRlbF9vdXRwdXQtPmRkY19idXMpCisJCXBzYl9pbnRlbF9pMmNfZGVzdHJveShwc2JfaW50ZWxfb3V0cHV0LT5kZGNfYnVzKTsKKworLyogZmFpbGVkX2RkYzogKi8KKworCWRybV9lbmNvZGVyX2NsZWFudXAoZW5jb2Rlcik7CisJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7CisJa2ZyZWUoY29ubmVjdG9yKTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfMmQuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiXzJkLmMKaW5kZXggZTRjYWU1ZC4uMGJkODM0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfMmQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl8yZC5jCkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVkZSAicHNiX3JlZy5oIgogI2luY2x1ZGUgInBzYl9kcnYuaCIKICNpbmNsdWRlICJwc2JfZmIuaCIKLSNpbmNsdWRlICJwc2Jfc2d4LmgiCiAKIHZvaWQgcHNiX3NwYW5rKHN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2KQogewpAQCAtODUsNyArODQsNyBAQAogLyogRklYTUU6IFJlbWVtYmVyIGlmIHdlIGV4cG9zZSB0aGUgMkQgZW5naW5lIHRvIHRoZSBEUk0gd2UgbmVlZCB0byBzZXJpYWxpemUKICAgIGl0IHdpdGggY29uc29sZSB1c2UgKi8KIAotc3RhdGljIGludCBwc2JmYl8yZF9zdWJtaXQoc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYsIHVpbnQzMl90ICpjbWRidWYsCitpbnQgcHNiZmJfMmRfc3VibWl0KHN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2LCB1aW50MzJfdCAqY21kYnVmLAogCSAJICAJICAgdW5zaWduZWQgc2l6ZSkKIHsKIAlpbnQgcmV0ID0gMDsKQEAgLTE2MSw3ICsxNjAsNyBAQAogCWlmICghZmIpCiAJCXJldHVybjsKIAotCW9mZnNldCA9IHBzYmZiLT5vZmZzZXQ7CisJb2Zmc2V0ID0gcHNiZmItPmd0dC0+b2Zmc2V0OwogCXN0cmlkZSA9IGZiLT5waXRjaDsKIAogCXN3aXRjaCAoZmItPmRlcHRoKSB7CkBAIC0zMDQsNyArMzAzLDcgQEAKIAlpZiAoIWZiKQogCQlyZXR1cm47CiAKLQlvZmZzZXQgPSBwc2JmYi0+b2Zmc2V0OworCW9mZnNldCA9IHBzYmZiLT5ndHQtPm9mZnNldDsKIAlzdHJpZGUgPSBmYi0+cGl0Y2g7CiAKIAlzd2l0Y2ggKGZiLT5kZXB0aCkgewpAQCAtMzQ0LDcgKzM0Myw3IEBACiAJaWYgKHVubGlrZWx5KGluZm8tPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HKSkKIAkJcmV0dXJuOwogCi0JaWYgKDEgfHwgKGluZm8tPmZsYWdzICYgRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQpKQorCWlmIChpbmZvLT5mbGFncyAmIEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEKQogCQlyZXR1cm4gY2ZiX2NvcHlhcmVhKGluZm8sIHJlZ2lvbik7CiAKIAkvKiBwc2JfY2hlY2tfcG93ZXJfc3RhdGUoZGV2LCBQU0JfREVWSUNFX1NHWCk7ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9ibC5jIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfYmwuYwppbmRleCA3MGMxN2IzLi41ZGZmYzcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9ibC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2JsLmMKQEAgLTMzLDcgKzMzLDYgQEAKICNkZWZpbmUgQkxDX1BXTV9GUkVRX0NBTENfQ09OU1RBTlQgMzIKICNkZWZpbmUgTUh6IDEwMDAwMDAKICNkZWZpbmUgQlJJR0hUTkVTU19NSU5fTEVWRUwgMQotI2RlZmluZSBCUklHSFRORVNTX01BWF9MRVZFTCAxMDAKICNkZWZpbmUgQlJJR0hUTkVTU19NQVNLCTB4RkYKICNkZWZpbmUgQkxDX1BPTEFSSVRZX05PUk1BTCAwCiAjZGVmaW5lIEJMQ19QT0xBUklUWV9JTlZFUlNFIDEKQEAgLTU5LDE1ICs1OCw1NyBAQAogCiAJRFJNX0RFQlVHX0RSSVZFUigiYmFja2xpZ2h0IGxldmVsIHNldCB0byAlZFxuIiwgbGV2ZWwpOwogCi0JLyogUGVyZm9ybSB2YWx1ZSBib3VuZHMgY2hlY2tpbmcgKi8KLQlpZiAobGV2ZWwgPCBCUklHSFRORVNTX01JTl9MRVZFTCkKLQkJbGV2ZWwgPSBCUklHSFRORVNTX01JTl9MRVZFTDsKKwkvKiBQZXJjZW50YWdlIDEtMTAwJSBiZWluZyB2YWxpZCAqLworCWlmIChsZXZlbCA8IDEpCisJCWxldmVsID0gMTsKIAogCXBzYl9pbnRlbF9sdmRzX3NldF9icmlnaHRuZXNzKGRldiwgbGV2ZWwpOwogCXBzYl9icmlnaHRuZXNzID0gbGV2ZWw7CiAJcmV0dXJuIDA7CiB9CiAKK2ludCBtcnN0X3NldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gYmxfZ2V0X2RhdGEocHNiX2JhY2tsaWdodF9kZXZpY2UpOworCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgbGV2ZWwgPSBiZC0+cHJvcHMuYnJpZ2h0bmVzczsKKwl1MzIgYmxjX3B3bV9jdGw7CisJdTMyIG1heF9wd21fYmxjOworCisJRFJNX0RFQlVHX0RSSVZFUigiYmFja2xpZ2h0IGxldmVsIHNldCB0byAlZFxuIiwgbGV2ZWwpOworCisJLyogUGVyY2VudGFnZSAxLTEwMCUgYmVpbmcgdmFsaWQgKi8KKwlpZiAobGV2ZWwgPCAxKQorCQlsZXZlbCA9IDE7CisKKwlpZiAoZ21hX3Bvd2VyX2JlZ2luKGRldiwgMCkpIHsKKwkJLyogQ2FsY3VsYXRlIGFuZCBzZXQgdGhlIGJyaWdodG5lc3MgdmFsdWUgKi8KKwkJbWF4X3B3bV9ibGMgPSBSRUdfUkVBRChCTENfUFdNX0NUTCkgPj4gMTY7CisJCWJsY19wd21fY3RsID0gbGV2ZWwgKiBtYXhfcHdtX2JsYyAvIDEwMDsKKworCQkvKiBBZGp1c3QgdGhlIGJhY2tsaWdodCBsZXZlbCB3aXRoIHRoZSBwZXJjZW50IGluCisJCSAqIGRldl9wcml2LT5ibGNfYWRqMTsKKwkJICovCisJCWJsY19wd21fY3RsID0gYmxjX3B3bV9jdGwgKiBkZXZfcHJpdi0+YmxjX2FkajE7CisJCWJsY19wd21fY3RsID0gYmxjX3B3bV9jdGwgLyAxMDA7CisKKwkJLyogQWRqdXN0IHRoZSBiYWNrbGlnaHQgbGV2ZWwgd2l0aCB0aGUgcGVyY2VudCBpbgorCQkgKiBkZXZfcHJpdi0+YmxjX2FkajI7CisJCSAqLworCQlibGNfcHdtX2N0bCA9IGJsY19wd21fY3RsICogZGV2X3ByaXYtPmJsY19hZGoyOworCQlibGNfcHdtX2N0bCA9IGJsY19wd21fY3RsIC8gMTAwOworCisJCWlmIChibGNfcG9sID09IEJMQ19QT0xBUklUWV9JTlZFUlNFKQorCQkJYmxjX3B3bV9jdGwgPSBtYXhfcHdtX2JsYyAtIGJsY19wd21fY3RsOworCQkvKiBmb3JjZSBQV00gYml0IG9uICovCisJCVJFR19XUklURShCTENfUFdNX0NUTDIsICgweDgwMDAwMDAwIHwgUkVHX1JFQUQoQkxDX1BXTV9DVEwyKSkpOworCQlSRUdfV1JJVEUoQkxDX1BXTV9DVEwsIChtYXhfcHdtX2JsYyA8PCAxNikgfCBibGNfcHdtX2N0bCk7CisJCWdtYV9wb3dlcl9lbmQoZGV2KTsKKwl9CisJcHNiX2JyaWdodG5lc3MgPSBsZXZlbDsKKwlyZXR1cm4gMDsKK30KKwogaW50IHBzYl9nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCiB7CiAJRFJNX0RFQlVHX0RSSVZFUigiYnJpZ2h0bmVzcyA9IDB4JXhcbiIsIHBzYl9icmlnaHRuZXNzKTsKQEAgLTg1LDI0ICsxMjYsMzMgQEAKIAogc3RhdGljIGludCBkZXZpY2VfYmFja2xpZ2h0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJdW5zaWduZWQgbG9uZyBjb3JlX2Nsb2NrOwogCS8qIHUzMiBibF9tYXhfZnJlcTsgKi8KIAkvKiB1bnNpZ25lZCBsb25nIHZhbHVlOyAqLwogCXUxNiBibF9tYXhfZnJlcTsKIAl1aW50MzJfdCB2YWx1ZTsKIAl1aW50MzJfdCBibGNfcHdtX3ByZWNpc2lvbl9mYWN0b3I7Ci0Jc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCi0JLyogZ2V0IGJsX21heF9mcmVxIGFuZCBwb2wgZnJvbSBkZXZfcHJpdiovCi0JaWYgKCFkZXZfcHJpdi0+bHZkc19ibCkgewotCQlEUk1fRVJST1IoIkhhcyBubyB2YWxpZCBMVkRTIGJhY2tsaWdodCBpbmZvXG4iKTsKLQkJcmV0dXJuIDE7CisJaWYgKElTX01SU1QoZGV2KSkgeworCQlkZXZfcHJpdi0+YmxjX2FkajEgPSBCTENfQURKVVNUTUVOVF9NQVg7CisJCWRldl9wcml2LT5ibGNfYWRqMiA9IEJMQ19BREpVU1RNRU5UX01BWDsKKwkJYmxfbWF4X2ZyZXEgPSAyNTY7CisJCS8qIHRoaXMgbmVlZHMgdG8gYmUgc2V0IGVsc2V3aGVyZSAqLworCQlibGNfcG9sID0gQkxDX1BPTEFSSVRZX05PUk1BTDsKKwkJYmxjX3B3bV9wcmVjaXNpb25fZmFjdG9yID0gQkxDX1BXTV9QUkVDSVNJT05fRkFDVE9SOworCX0gZWxzZSB7CisJCS8qIGdldCBibF9tYXhfZnJlcSBhbmQgcG9sIGZyb20gZGV2X3ByaXYqLworCQlpZiAoIWRldl9wcml2LT5sdmRzX2JsKSB7CisJCQlEUk1fRVJST1IoIkhhcyBubyB2YWxpZCBMVkRTIGJhY2tsaWdodCBpbmZvXG4iKTsKKwkJCXJldHVybiAxOworCQl9CisJCWJsX21heF9mcmVxID0gZGV2X3ByaXYtPmx2ZHNfYmwtPmZyZXE7CisJCWJsY19wb2wgPSBkZXZfcHJpdi0+bHZkc19ibC0+cG9sOworCQlibGNfcHdtX3ByZWNpc2lvbl9mYWN0b3IgPSBQU0JfQkxDX1BXTV9QUkVDSVNJT05fRkFDVE9SOworCQlibGNfYnJpZ2h0bmVzc2NtZCA9IGRldl9wcml2LT5sdmRzX2JsLT5icmlnaHRuZXNzY21kOworCQlibGNfdHlwZSA9IGRldl9wcml2LT5sdmRzX2JsLT50eXBlOwogCX0KLQlibF9tYXhfZnJlcSA9IGRldl9wcml2LT5sdmRzX2JsLT5mcmVxOwotCWJsY19wb2wgPSBkZXZfcHJpdi0+bHZkc19ibC0+cG9sOwotCWJsY19wd21fcHJlY2lzaW9uX2ZhY3RvciA9IFBTQl9CTENfUFdNX1BSRUNJU0lPTl9GQUNUT1I7Ci0JYmxjX2JyaWdodG5lc3NjbWQgPSBkZXZfcHJpdi0+bHZkc19ibC0+YnJpZ2h0bmVzc2NtZDsKLQlibGNfdHlwZSA9IGRldl9wcml2LT5sdmRzX2JsLT50eXBlOwogCiAJY29yZV9jbG9jayA9IGRldl9wcml2LT5jb3JlX2ZyZXE7CiAKQEAgLTExMSwyMCArMTYxLDI3IEBACiAJdmFsdWUgLz0gYmxfbWF4X2ZyZXE7CiAJdmFsdWUgLz0gYmxjX3B3bV9wcmVjaXNpb25fZmFjdG9yOwogCi0JaWYgKG9zcG1fcG93ZXJfdXNpbmdfaHdfYmVnaW4oT1NQTV9ESVNQTEFZX0lTTEFORCwKLQkJCQkJCU9TUE1fVUhCX09OTFlfSUZfT04pKSB7Ci0JCS8qIENoZWNrOiBtYXkgYmUgTUZMRCBvbmx5ICovCi0JCWlmICgKLQkJIHZhbHVlID4gKHVuc2lnbmVkIGxvbmcgbG9uZylQU0JfQkxDX01BWF9QV01fUkVHX0ZSRVEgfHwKLQkJIHZhbHVlIDwgKHVuc2lnbmVkIGxvbmcgbG9uZylQU0JfQkxDX01JTl9QV01fUkVHX0ZSRVEpCi0JCQlyZXR1cm4gMjsKLQkJZWxzZSB7Ci0JCQl2YWx1ZSAmPSBQU0JfQkFDS0xJR0hUX1BXTV9QT0xBUklUWV9CSVRfQ0xFQVI7Ci0JCQlSRUdfV1JJVEUoQkxDX1BXTV9DVEwsCi0JCQkJKHZhbHVlIDw8IFBTQl9CQUNLTElHSFRfUFdNX0NUTF9TSElGVCkgfAotCQkJCSh2YWx1ZSkpOworCWlmIChnbWFfcG93ZXJfYmVnaW4oZGV2LCBmYWxzZSkpIHsKKwkJaWYgKElTX01SU1QoZGV2KSkgeworCQkJaWYgKHZhbHVlID4gKHVuc2lnbmVkIGxvbmcgbG9uZylNUlNUX0JMQ19NQVhfUFdNX1JFR19GUkVRKQorCQkJCXJldHVybiAyOworCQkJZWxzZSB7CisJCQkJUkVHX1dSSVRFKEJMQ19QV01fQ1RMMiwKKwkJCQkJKDB4ODAwMDAwMDAgfCBSRUdfUkVBRChCTENfUFdNX0NUTDIpKSk7CisJCQkJUkVHX1dSSVRFKEJMQ19QV01fQ1RMLCB2YWx1ZSB8ICh2YWx1ZSA8PCAxNikpOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKHZhbHVlID4gKHVuc2lnbmVkIGxvbmcgbG9uZylQU0JfQkxDX01BWF9QV01fUkVHX0ZSRVEgfHwKKwkJCSB2YWx1ZSA8ICh1bnNpZ25lZCBsb25nIGxvbmcpUFNCX0JMQ19NSU5fUFdNX1JFR19GUkVRKQorCQkJCXJldHVybiAyOworCQkJZWxzZSB7CisJCQkJdmFsdWUgJj0gUFNCX0JBQ0tMSUdIVF9QV01fUE9MQVJJVFlfQklUX0NMRUFSOworCQkJCVJFR19XUklURShCTENfUFdNX0NUTCwKKwkJCQkJKHZhbHVlIDw8IFBTQl9CQUNLTElHSFRfUFdNX0NUTF9TSElGVCkgfAorCQkJCQkodmFsdWUpKTsKKwkJCX0KIAkJfQotCQlvc3BtX3Bvd2VyX3VzaW5nX2h3X2VuZChPU1BNX0RJU1BMQVlfSVNMQU5EKTsKKwkJZ21hX3Bvd2VyX2VuZChkZXYpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTEzNiw3ICsxOTMsOCBAQAogCiAJc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIHByb3BzOwogCW1lbXNldCgmcHJvcHMsIDAsIHNpemVvZihzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMpKTsKLQlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfTUFYX0xFVkVMOworCXByb3BzLm1heF9icmlnaHRuZXNzID0gMTAwOworCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUExBVEZPUk07CiAKIAlwc2JfYmFja2xpZ2h0X2RldmljZSA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoInBzYi1ibCIsIE5VTEwsCiAJCQkJCQkodm9pZCAqKWRldiwgJnBzYl9vcHMsICZwcm9wcyk7CkBAIC0xNDcsOCArMjA1LDggQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCXBzYl9iYWNrbGlnaHRfZGV2aWNlLT5wcm9wcy5icmlnaHRuZXNzID0gQlJJR0hUTkVTU19NQVhfTEVWRUw7Ci0JcHNiX2JhY2tsaWdodF9kZXZpY2UtPnByb3BzLm1heF9icmlnaHRuZXNzID0gQlJJR0hUTkVTU19NQVhfTEVWRUw7CisJcHNiX2JhY2tsaWdodF9kZXZpY2UtPnByb3BzLmJyaWdodG5lc3MgPSAxMDA7CisJcHNiX2JhY2tsaWdodF9kZXZpY2UtPnByb3BzLm1heF9icmlnaHRuZXNzID0gMTAwOwogCWJhY2tsaWdodF91cGRhdGVfc3RhdHVzKHBzYl9iYWNrbGlnaHRfZGV2aWNlKTsKICNlbmRpZgogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfYnVmZmVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9idWZmZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA3N2Y2YS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9idWZmZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDQ1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgSW50ZWwgQ29ycG9yYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCi0gKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKLSAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogQXV0aG9yczogVGhvbWFzIEhlbGxzdHJvbSA8dGhvbWFzLWF0LXR1bmdzdGVuZ3JhcGhpY3MuY29tPgotICovCi0jaW5jbHVkZSAidHRtL3R0bV9wbGFjZW1lbnQuaCIKLSNpbmNsdWRlICJ0dG0vdHRtX2V4ZWNidWZfdXRpbC5oIgotI2luY2x1ZGUgInBzYl90dG1fZmVuY2VfYXBpLmgiCi0jaW5jbHVkZSA8ZHJtL2RybVAuaD4KLSNpbmNsdWRlICJwc2JfZHJ2LmgiCi0KLSNkZWZpbmUgRFJNX01FTV9UVE0gICAgICAgMjYKLQotc3RydWN0IGRybV9wc2JfdHRtX2JhY2tlbmQgewotCXN0cnVjdCB0dG1fYmFja2VuZCBiYXNlOwotCXN0cnVjdCBwYWdlICoqcGFnZXM7Ci0JdW5zaWduZWQgaW50IGRlc2lyZWRfdGlsZV9zdHJpZGU7Ci0JdW5zaWduZWQgaW50IGh3X3RpbGVfc3RyaWRlOwotCWludCBtZW1fdHlwZTsKLQl1bnNpZ25lZCBsb25nIG9mZnNldDsKLQl1bnNpZ25lZCBsb25nIG51bV9wYWdlczsKLX07Ci0KLS8qCi0gKiBNU1ZEWC9UT1BBWiBHUFUgdmlydHVhbCBzcGFjZSBsb29rcyBsaWtlIHRoaXMKLSAqIChXZSBjdXJyZW50bHkgdXNlIG9ubHkgb25lIE1NVSBjb250ZXh0KS4KLSAqIFBTQl9NRU1fTU1VX1NUQVJUOiBmcm9tIDB4MDAwMDAwMDB+MHhlMDAwMDAwLCBmb3IgZ2VuZXJpYyBidWZmZXJzCi0gKiBUVE1fUExfQ0k6IGZyb20gMHhlMDAwMDAwMCtoYWxmIEdUVCBzcGFjZSwgZm9yIGNhbWVhci92aWRlbyBidWZmZXIgc2hhcmluZwotICogVFRNX1BMX1JBUjogZnJvbSBUVE1fUExfQ0krQ0kgc2l6ZSwgZm9yIFJBUi92aWRlbyBidWZmZXIgc2hhcmluZwotICogVFRNX1BMX1RUOiBmcm9tIFRUTV9QTF9SQVIrUkFSIHNpemUsIGZvciBidWZmZXJzIG5lZWQgdG8gbWFwcGluZyBpbnRvIEdUVAotICovCi1zdGF0aWMgaW50IHBzYl9pbml0X21lbV90eXBlKHN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2LCB1aW50MzJfdCB0eXBlLAotCQkJICAgICBzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbikKLXsKLQotCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0KLQkgICAgY29udGFpbmVyX29mKGJkZXYsIHN0cnVjdCBkcm1fcHNiX3ByaXZhdGUsIGJkZXYpOwotCXN0cnVjdCBwc2JfZ3R0ICpwZyA9IGRldl9wcml2LT5wZzsKLQotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgVFRNX1BMX1NZU1RFTToKLQkJbWFuLT5mbGFncyA9IFRUTV9NRU1UWVBFX0ZMQUdfTUFQUEFCTEU7Ci0JCW1hbi0+YXZhaWxhYmxlX2NhY2hpbmcgPSBUVE1fUExfRkxBR19DQUNIRUQgfAotCQkgICAgVFRNX1BMX0ZMQUdfVU5DQUNIRUQgfCBUVE1fUExfRkxBR19XQzsKLQkJbWFuLT5kZWZhdWx0X2NhY2hpbmcgPSBUVE1fUExfRkxBR19DQUNIRUQ7Ci0JCWJyZWFrOwotCWNhc2UgRFJNX1BTQl9NRU1fTU1VOgotCQltYW4tPmZ1bmMgPSAmdHRtX2JvX21hbmFnZXJfZnVuYzsKLQkJbWFuLT5mbGFncyA9IFRUTV9NRU1UWVBFX0ZMQUdfTUFQUEFCTEUgfAotCQkgICAgVFRNX01FTVRZUEVfRkxBR19DTUE7Ci0JCW1hbi0+Z3B1X29mZnNldCA9IFBTQl9NRU1fTU1VX1NUQVJUOwotCQltYW4tPmF2YWlsYWJsZV9jYWNoaW5nID0gVFRNX1BMX0ZMQUdfQ0FDSEVEIHwKLQkJICAgIFRUTV9QTF9GTEFHX1VOQ0FDSEVEIHwgVFRNX1BMX0ZMQUdfV0M7Ci0JCW1hbi0+ZGVmYXVsdF9jYWNoaW5nID0gVFRNX1BMX0ZMQUdfV0M7Ci0JCWJyZWFrOwotCWNhc2UgVFRNX1BMX0NJOgotCQltYW4tPmZ1bmMgPSAmdHRtX2JvX21hbmFnZXJfZnVuYzsKLQkJbWFuLT5mbGFncyA9IFRUTV9NRU1UWVBFX0ZMQUdfTUFQUEFCTEUgfAotCQkJVFRNX01FTVRZUEVfRkxBR19GSVhFRDsKLQkJbWFuLT5ncHVfb2Zmc2V0ID0gcGctPm1tdV9nYXR0X3N0YXJ0ICsgKHBnLT5jaV9zdGFydCk7Ci0JCW1hbi0+YXZhaWxhYmxlX2NhY2hpbmcgPSBUVE1fUExfRkxBR19VTkNBQ0hFRDsKLQkJbWFuLT5kZWZhdWx0X2NhY2hpbmcgPSBUVE1fUExfRkxBR19VTkNBQ0hFRDsKLQkJYnJlYWs7Ci0JY2FzZSBUVE1fUExfUkFSOgkvKiBVbm1hcHBhYmxlIFJBUiBtZW1vcnkgKi8KLQkJbWFuLT5mdW5jID0gJnR0bV9ib19tYW5hZ2VyX2Z1bmM7Ci0JCW1hbi0+ZmxhZ3MgPSBUVE1fTUVNVFlQRV9GTEFHX01BUFBBQkxFIHwKLQkJCVRUTV9NRU1UWVBFX0ZMQUdfRklYRUQ7Ci0JCW1hbi0+YXZhaWxhYmxlX2NhY2hpbmcgPSBUVE1fUExfRkxBR19VTkNBQ0hFRDsKLQkJbWFuLT5kZWZhdWx0X2NhY2hpbmcgPSBUVE1fUExfRkxBR19VTkNBQ0hFRDsKLQkJbWFuLT5ncHVfb2Zmc2V0ID0gcGctPm1tdV9nYXR0X3N0YXJ0ICsgKHBnLT5yYXJfc3RhcnQpOwotCQlicmVhazsKLQljYXNlIFRUTV9QTF9UVDoJLyogTWFwcGFibGUgR0FUVCBtZW1vcnkgKi8KLQkJbWFuLT5mdW5jID0gJnR0bV9ib19tYW5hZ2VyX2Z1bmM7Ci0jaWZkZWYgUFNCX1dPUktJTkdfSE9TVF9NTVVfQUNDRVNTCi0JCW1hbi0+ZmxhZ3MgPSBUVE1fTUVNVFlQRV9GTEFHX01BUFBBQkxFOwotI2Vsc2UKLQkJbWFuLT5mbGFncyA9IFRUTV9NRU1UWVBFX0ZMQUdfTUFQUEFCTEUgfAotCQkgICAgVFRNX01FTVRZUEVfRkxBR19DTUE7Ci0jZW5kaWYKLQkJbWFuLT5hdmFpbGFibGVfY2FjaGluZyA9IFRUTV9QTF9GTEFHX0NBQ0hFRCB8Ci0JCSAgICBUVE1fUExfRkxBR19VTkNBQ0hFRCB8IFRUTV9QTF9GTEFHX1dDOwotCQltYW4tPmRlZmF1bHRfY2FjaGluZyA9IFRUTV9QTF9GTEFHX1dDOwotCQltYW4tPmdwdV9vZmZzZXQgPSBwZy0+bW11X2dhdHRfc3RhcnQgKwotCQkJCShwZy0+cmFyX3N0YXJ0ICsgZGV2X3ByaXYtPnJhcl9yZWdpb25fc2l6ZSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURSTV9FUlJPUigiVW5zdXBwb3J0ZWQgbWVtb3J5IHR5cGUgJXVcbiIsICh1bnNpZ25lZCkgdHlwZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgdm9pZCBwc2JfZXZpY3RfbWFzayhzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAotCQkJCQlzdHJ1Y3QgdHRtX3BsYWNlbWVudCAqcGxhY2VtZW50KQotewotCXN0YXRpYyB1aW50MzJfdCBjdXJfcGxhY2VtZW50OwotCi0JY3VyX3BsYWNlbWVudCA9IGJvLT5tZW0ucGxhY2VtZW50ICYgflRUTV9QTF9NQVNLX01FTTsKLQljdXJfcGxhY2VtZW50IHw9IFRUTV9QTF9GTEFHX1NZU1RFTTsKLQotCXBsYWNlbWVudC0+ZnBmbiA9IDA7Ci0JcGxhY2VtZW50LT5scGZuID0gMDsKLQlwbGFjZW1lbnQtPm51bV9wbGFjZW1lbnQgPSAxOwotCXBsYWNlbWVudC0+cGxhY2VtZW50ID0gJmN1cl9wbGFjZW1lbnQ7Ci0JcGxhY2VtZW50LT5udW1fYnVzeV9wbGFjZW1lbnQgPSAwOwotCXBsYWNlbWVudC0+YnVzeV9wbGFjZW1lbnQgPSBOVUxMOwotCi0JLyogYWxsIGJ1ZmZlcnMgZXZpY3RlZCB0byBzeXN0ZW0gbWVtb3J5ICovCi0JLyogcmV0dXJuIGN1cl9wbGFjZW1lbnQgfCBUVE1fUExfRkxBR19TWVNURU07ICovCi19Ci0KLXN0YXRpYyBpbnQgcHNiX2ludmFsaWRhdGVfY2FjaGVzKHN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2LAotCQkJCSB1aW50MzJfdCBwbGFjZW1lbnQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcHNiX21vdmVfYmxpdChzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAotCQkJIGJvb2wgZXZpY3QsIGJvb2wgbm9fd2FpdCwKLQkJCSBzdHJ1Y3QgdHRtX21lbV9yZWcgKm5ld19tZW0pCi17Ci0JQlVHKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBGbGlwIGRlc3RpbmF0aW9uIHR0bSBpbnRvIEdBVFQsCi0gKiB0aGVuIGJsaXQgYW5kIHN1YnNlcXVlbnRseSBtb3ZlIG91dCBhZ2Fpbi4KLSAqLwotCi1zdGF0aWMgaW50IHBzYl9tb3ZlX2ZsaXAoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKLQkJCSBib29sIGV2aWN0LCBib29sIGludGVycnVwdGlibGUsIGJvb2wgbm9fd2FpdCwKLQkJCSBzdHJ1Y3QgdHRtX21lbV9yZWcgKm5ld19tZW0pCi17Ci0JLypzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiA9IGJvLT5iZGV2OyovCi0Jc3RydWN0IHR0bV9tZW1fcmVnIHRtcF9tZW07Ci0JaW50IHJldDsKLQlzdHJ1Y3QgdHRtX3BsYWNlbWVudCBwbGFjZW1lbnQ7Ci0JdWludDMyX3QgZmxhZ3MgPSBUVE1fUExfRkxBR19UVDsKLQotCXRtcF9tZW0gPSAqbmV3X21lbTsKLQl0bXBfbWVtLm1tX25vZGUgPSBOVUxMOwotCi0JcGxhY2VtZW50LmZwZm4gPSAwOwotCXBsYWNlbWVudC5scGZuID0gMDsKLQlwbGFjZW1lbnQubnVtX3BsYWNlbWVudCA9IDE7Ci0JcGxhY2VtZW50LnBsYWNlbWVudCA9ICZmbGFnczsKLQlwbGFjZW1lbnQubnVtX2J1c3lfcGxhY2VtZW50ID0gMDsgLyogRklYTUUgKi8KLQlwbGFjZW1lbnQuYnVzeV9wbGFjZW1lbnQgPSBOVUxMOwotCi0JcmV0ID0gdHRtX2JvX21lbV9zcGFjZShibywgJnBsYWNlbWVudCwgJnRtcF9tZW0sIGludGVycnVwdGlibGUsCi0JCQkJCQkJZmFsc2UsIG5vX3dhaXQpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0JcmV0ID0gdHRtX3R0X2JpbmQoYm8tPnR0bSwgJnRtcF9tZW0pOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X2NsZWFudXA7Ci0JcmV0ID0gcHNiX21vdmVfYmxpdChibywgdHJ1ZSwgbm9fd2FpdCwgJnRtcF9tZW0pOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X2NsZWFudXA7Ci0KLQlyZXQgPSB0dG1fYm9fbW92ZV90dG0oYm8sIGV2aWN0LCBmYWxzZSwgbm9fd2FpdCwgbmV3X21lbSk7Ci1vdXRfY2xlYW51cDoKLQlpZiAodG1wX21lbS5tbV9ub2RlKSB7Ci0JCWRybV9tbV9wdXRfYmxvY2sodG1wX21lbS5tbV9ub2RlKTsKLQkJdG1wX21lbS5tbV9ub2RlID0gTlVMTDsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBwc2JfbW92ZShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAotCQkgICAgYm9vbCBldmljdCwgYm9vbCBpbnRlcnJ1cHRpYmxlLCBib29sIG5vX3dhaXRfcmVzZXJ2ZSwKLQkJICAgIGJvb2wgbm9fd2FpdCwgc3RydWN0IHR0bV9tZW1fcmVnICpuZXdfbWVtKQotewotCXN0cnVjdCB0dG1fbWVtX3JlZyAqb2xkX21lbSA9ICZiby0+bWVtOwotCi0JaWYgKChvbGRfbWVtLT5tZW1fdHlwZSA9PSBUVE1fUExfUkFSKSB8fAotCSAgICAobmV3X21lbS0+bWVtX3R5cGUgPT0gVFRNX1BMX1JBUikpIHsKLQkJaWYgKG9sZF9tZW0tPm1tX25vZGUpIHsKLQkJCXNwaW5fbG9jaygmYm8tPmdsb2ItPmxydV9sb2NrKTsKLQkJCWRybV9tbV9wdXRfYmxvY2sob2xkX21lbS0+bW1fbm9kZSk7Ci0JCQlzcGluX3VubG9jaygmYm8tPmdsb2ItPmxydV9sb2NrKTsKLQkJfQotCQlvbGRfbWVtLT5tbV9ub2RlID0gTlVMTDsKLQkJKm9sZF9tZW0gPSAqbmV3X21lbTsKLQl9IGVsc2UgaWYgKG9sZF9tZW0tPm1lbV90eXBlID09IFRUTV9QTF9TWVNURU0pIHsKLQkJcmV0dXJuIHR0bV9ib19tb3ZlX21lbWNweShibywgZXZpY3QsIGZhbHNlLCBub193YWl0LCBuZXdfbWVtKTsKLQl9IGVsc2UgaWYgKG5ld19tZW0tPm1lbV90eXBlID09IFRUTV9QTF9TWVNURU0pIHsKLQkJaW50IHJldCA9IHBzYl9tb3ZlX2ZsaXAoYm8sIGV2aWN0LCBpbnRlcnJ1cHRpYmxlLAotCQkJCQlub193YWl0LCBuZXdfbWVtKTsKLQkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgewotCQkJaWYgKHJldCA9PSAtRVJFU1RBUlQpCi0JCQkJcmV0dXJuIHJldDsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gdHRtX2JvX21vdmVfbWVtY3B5KGJvLCBldmljdCwgZmFsc2UsCi0JCQkJCQlub193YWl0LCBuZXdfbWVtKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChwc2JfbW92ZV9ibGl0KGJvLCBldmljdCwgbm9fd2FpdCwgbmV3X21lbSkpCi0JCQlyZXR1cm4gdHRtX2JvX21vdmVfbWVtY3B5KGJvLCBldmljdCwgZmFsc2UsIG5vX3dhaXQsCi0JCQkJCQkgIG5ld19tZW0pOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkcm1fcHNiX3RiZV9wb3B1bGF0ZShzdHJ1Y3QgdHRtX2JhY2tlbmQgKmJhY2tlbmQsCi0JCQkJdW5zaWduZWQgbG9uZyBudW1fcGFnZXMsCi0JCQkJc3RydWN0IHBhZ2UgKipwYWdlcywKLQkJCQlzdHJ1Y3QgcGFnZSAqZHVtbXlfcmVhZF9wYWdlLAotCQkJCWRtYV9hZGRyX3QgKmRtYV9hZGRycykKLXsKLQlzdHJ1Y3QgZHJtX3BzYl90dG1fYmFja2VuZCAqcHNiX2JlID0KLQkgICAgY29udGFpbmVyX29mKGJhY2tlbmQsIHN0cnVjdCBkcm1fcHNiX3R0bV9iYWNrZW5kLCBiYXNlKTsKLQotCXBzYl9iZS0+cGFnZXMgPSBwYWdlczsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkcm1fcHNiX3RiZV91bmJpbmQoc3RydWN0IHR0bV9iYWNrZW5kICpiYWNrZW5kKQotewotCXN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2ID0gYmFja2VuZC0+YmRldjsKLQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9Ci0JICAgIGNvbnRhaW5lcl9vZihiZGV2LCBzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlLCBiZGV2KTsKLQlzdHJ1Y3QgZHJtX3BzYl90dG1fYmFja2VuZCAqcHNiX2JlID0KLQkgICAgY29udGFpbmVyX29mKGJhY2tlbmQsIHN0cnVjdCBkcm1fcHNiX3R0bV9iYWNrZW5kLCBiYXNlKTsKLQlzdHJ1Y3QgcHNiX21tdV9wZCAqcGQgPSBwc2JfbW11X2dldF9kZWZhdWx0X3BkKGRldl9wcml2LT5tbXUpOwotCS8qIHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFuID0gJmJkZXYtPm1hbltwc2JfYmUtPm1lbV90eXBlXTsgKi8KLQotCWlmIChwc2JfYmUtPm1lbV90eXBlID09IFRUTV9QTF9UVCkgewotCQl1aW50MzJfdCBnYXR0X3Bfb2Zmc2V0ID0KLQkJCShwc2JfYmUtPm9mZnNldCAtIGRldl9wcml2LT5wZy0+bW11X2dhdHRfc3RhcnQpCi0JCQkJCQkJCT4+IFBBR0VfU0hJRlQ7Ci0KLQkJKHZvaWQpIHBzYl9ndHRfcmVtb3ZlX3BhZ2VzKGRldl9wcml2LT5wZywgZ2F0dF9wX29mZnNldCwKLQkJCQkJICAgIHBzYl9iZS0+bnVtX3BhZ2VzLAotCQkJCQkgICAgcHNiX2JlLT5kZXNpcmVkX3RpbGVfc3RyaWRlLAotCQkJCQkgICAgcHNiX2JlLT5od190aWxlX3N0cmlkZSwgMCk7Ci0JfQotCi0JcHNiX21tdV9yZW1vdmVfcGFnZXMocGQsIHBzYl9iZS0+b2Zmc2V0LAotCQkJICAgICBwc2JfYmUtPm51bV9wYWdlcywKLQkJCSAgICAgcHNiX2JlLT5kZXNpcmVkX3RpbGVfc3RyaWRlLAotCQkJICAgICBwc2JfYmUtPmh3X3RpbGVfc3RyaWRlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRybV9wc2JfdGJlX2JpbmQoc3RydWN0IHR0bV9iYWNrZW5kICpiYWNrZW5kLAotCQkJICAgIHN0cnVjdCB0dG1fbWVtX3JlZyAqYm9fbWVtKQotewotCXN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2ID0gYmFja2VuZC0+YmRldjsKLQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9Ci0JICAgIGNvbnRhaW5lcl9vZihiZGV2LCBzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlLCBiZGV2KTsKLQlzdHJ1Y3QgZHJtX3BzYl90dG1fYmFja2VuZCAqcHNiX2JlID0KLQkgICAgY29udGFpbmVyX29mKGJhY2tlbmQsIHN0cnVjdCBkcm1fcHNiX3R0bV9iYWNrZW5kLCBiYXNlKTsKLQlzdHJ1Y3QgcHNiX21tdV9wZCAqcGQgPSBwc2JfbW11X2dldF9kZWZhdWx0X3BkKGRldl9wcml2LT5tbXUpOwotCXN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFuID0gJmJkZXYtPm1hbltib19tZW0tPm1lbV90eXBlXTsKLQlzdHJ1Y3QgZHJtX21tX25vZGUgKm1tX25vZGUgPSBib19tZW0tPm1tX25vZGU7Ci0JaW50IHR5cGU7Ci0JaW50IHJldCA9IDA7Ci0KLQlwc2JfYmUtPm1lbV90eXBlID0gYm9fbWVtLT5tZW1fdHlwZTsKLQlwc2JfYmUtPm51bV9wYWdlcyA9IGJvX21lbS0+bnVtX3BhZ2VzOwotCXBzYl9iZS0+ZGVzaXJlZF90aWxlX3N0cmlkZSA9IDA7Ci0JcHNiX2JlLT5od190aWxlX3N0cmlkZSA9IDA7Ci0JcHNiX2JlLT5vZmZzZXQgPSAobW1fbm9kZS0+c3RhcnQgPDwgUEFHRV9TSElGVCkgKwotCSAgICBtYW4tPmdwdV9vZmZzZXQ7Ci0KLQl0eXBlID0KLQkgICAgKGJvX21lbS0+Ci0JICAgICBwbGFjZW1lbnQgJiBUVE1fUExfRkxBR19DQUNIRUQpID8gUFNCX01NVV9DQUNIRURfTUVNT1JZIDogMDsKLQotCWlmIChwc2JfYmUtPm1lbV90eXBlID09IFRUTV9QTF9UVCkgewotCQl1aW50MzJfdCBnYXR0X3Bfb2Zmc2V0ID0KLQkJCQkocHNiX2JlLT5vZmZzZXQgLSBkZXZfcHJpdi0+cGctPm1tdV9nYXR0X3N0YXJ0KQotCQkJCQkJCQk+PiBQQUdFX1NISUZUOwotCi0JCXJldCA9IHBzYl9ndHRfaW5zZXJ0X3BhZ2VzKGRldl9wcml2LT5wZywgcHNiX2JlLT5wYWdlcywKLQkJCQkJICAgZ2F0dF9wX29mZnNldCwKLQkJCQkJICAgcHNiX2JlLT5udW1fcGFnZXMsCi0JCQkJCSAgIHBzYl9iZS0+ZGVzaXJlZF90aWxlX3N0cmlkZSwKLQkJCQkJICAgcHNiX2JlLT5od190aWxlX3N0cmlkZSwgdHlwZSk7Ci0JfQotCi0JcmV0ID0gcHNiX21tdV9pbnNlcnRfcGFnZXMocGQsIHBzYl9iZS0+cGFnZXMsCi0JCQkJICAgcHNiX2JlLT5vZmZzZXQsIHBzYl9iZS0+bnVtX3BhZ2VzLAotCQkJCSAgIHBzYl9iZS0+ZGVzaXJlZF90aWxlX3N0cmlkZSwKLQkJCQkgICBwc2JfYmUtPmh3X3RpbGVfc3RyaWRlLCB0eXBlKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dF9lcnI7Ci0KLQlyZXR1cm4gMDsKLW91dF9lcnI6Ci0JZHJtX3BzYl90YmVfdW5iaW5kKGJhY2tlbmQpOwotCXJldHVybiByZXQ7Ci0KLX0KLQotc3RhdGljIHZvaWQgZHJtX3BzYl90YmVfY2xlYXIoc3RydWN0IHR0bV9iYWNrZW5kICpiYWNrZW5kKQotewotCXN0cnVjdCBkcm1fcHNiX3R0bV9iYWNrZW5kICpwc2JfYmUgPQotCSAgICBjb250YWluZXJfb2YoYmFja2VuZCwgc3RydWN0IGRybV9wc2JfdHRtX2JhY2tlbmQsIGJhc2UpOwotCi0JcHNiX2JlLT5wYWdlcyA9IE5VTEw7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBkcm1fcHNiX3RiZV9kZXN0cm95KHN0cnVjdCB0dG1fYmFja2VuZCAqYmFja2VuZCkKLXsKLQlzdHJ1Y3QgZHJtX3BzYl90dG1fYmFja2VuZCAqcHNiX2JlID0KLQkgICAgY29udGFpbmVyX29mKGJhY2tlbmQsIHN0cnVjdCBkcm1fcHNiX3R0bV9iYWNrZW5kLCBiYXNlKTsKLQotCWlmIChiYWNrZW5kKQotCQlrZnJlZShwc2JfYmUpOwotfQotCi1zdGF0aWMgc3RydWN0IHR0bV9iYWNrZW5kX2Z1bmMgcHNiX3R0bV9iYWNrZW5kID0gewotCS5wb3B1bGF0ZSA9IGRybV9wc2JfdGJlX3BvcHVsYXRlLAotCS5jbGVhciA9IGRybV9wc2JfdGJlX2NsZWFyLAotCS5iaW5kID0gZHJtX3BzYl90YmVfYmluZCwKLQkudW5iaW5kID0gZHJtX3BzYl90YmVfdW5iaW5kLAotCS5kZXN0cm95ID0gZHJtX3BzYl90YmVfZGVzdHJveSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdHRtX2JhY2tlbmQgKmRybV9wc2JfdGJlX2luaXQoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYpCi17Ci0Jc3RydWN0IGRybV9wc2JfdHRtX2JhY2tlbmQgKnBzYl9iZTsKLQotCXBzYl9iZSA9IGt6YWxsb2Moc2l6ZW9mKCpwc2JfYmUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXBzYl9iZSkKLQkJcmV0dXJuIE5VTEw7Ci0JcHNiX2JlLT5wYWdlcyA9IE5VTEw7Ci0JcHNiX2JlLT5iYXNlLmZ1bmMgPSAmcHNiX3R0bV9iYWNrZW5kOwotCXBzYl9iZS0+YmFzZS5iZGV2ID0gYmRldjsKLQlyZXR1cm4gJnBzYl9iZS0+YmFzZTsKLX0KLQotc3RhdGljIGludCBwc2JfdHRtX2lvX21lbV9yZXNlcnZlKHN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2LAotCQkJCQkJc3RydWN0IHR0bV9tZW1fcmVnICptZW0pCi17Ci0Jc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4gPSAmYmRldi0+bWFuW21lbS0+bWVtX3R5cGVdOwotCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0KLQkgICAgY29udGFpbmVyX29mKGJkZXYsIHN0cnVjdCBkcm1fcHNiX3ByaXZhdGUsIGJkZXYpOwotCXN0cnVjdCBwc2JfZ3R0ICpwZyA9IGRldl9wcml2LT5wZzsKLQlzdHJ1Y3QgZHJtX21tX25vZGUgKm1tX25vZGUgPSBtZW0tPm1tX25vZGU7Ci0KLQltZW0tPmJ1cy5hZGRyID0gTlVMTDsKLQltZW0tPmJ1cy5vZmZzZXQgPSAwOwotCW1lbS0+YnVzLnNpemUgPSBtZW0tPm51bV9wYWdlcyA8PCBQQUdFX1NISUZUOwotCW1lbS0+YnVzLmJhc2UgPSAwOwotCW1lbS0+YnVzLmlzX2lvbWVtID0gZmFsc2U7Ci0JaWYgKCEobWFuLT5mbGFncyAmIFRUTV9NRU1UWVBFX0ZMQUdfTUFQUEFCTEUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlzd2l0Y2ggKG1lbS0+bWVtX3R5cGUpIHsKLQljYXNlIFRUTV9QTF9TWVNURU06Ci0JCS8qIHN5c3RlbSBtZW1vcnkgKi8KLQkJcmV0dXJuIDA7Ci0JY2FzZSBUVE1fUExfVFQ6Ci0JCW1lbS0+YnVzLm9mZnNldCA9IG1tX25vZGUtPnN0YXJ0IDw8IFBBR0VfU0hJRlQ7Ci0JCW1lbS0+YnVzLmJhc2UgPSBwZy0+Z2F0dF9zdGFydDsKLQkJbWVtLT5idXMuaXNfaW9tZW0gPSBmYWxzZTsKLQkJLyogRG9uJ3Qga25vdyB3aGV0aGVyIGl0IGlzIElPX01FTSwgdGhpcyBmbGFnCi0JCQkJCQl1c2VkIGluIHZtX2ZhdWx0IGhhbmRsZSAqLwotCQlicmVhazsKLQljYXNlIERSTV9QU0JfTUVNX01NVToKLQkJbWVtLT5idXMub2Zmc2V0ID0gbW1fbm9kZS0+c3RhcnQgPDwgUEFHRV9TSElGVDsKLQkJbWVtLT5idXMuYmFzZSA9IDB4MDAwMDAwMDA7Ci0JCWJyZWFrOwotCWNhc2UgVFRNX1BMX0NJOgotCQltZW0tPmJ1cy5vZmZzZXQgPSBtbV9ub2RlLT5zdGFydCA8PCBQQUdFX1NISUZUOwotCQltZW0tPmJ1cy5iYXNlID0gZGV2X3ByaXYtPmNpX3JlZ2lvbl9zdGFydDs7Ci0JCW1lbS0+YnVzLmlzX2lvbWVtID0gdHJ1ZTsKLQkJYnJlYWs7Ci0JY2FzZSBUVE1fUExfUkFSOgotCQltZW0tPmJ1cy5vZmZzZXQgPSBtbV9ub2RlLT5zdGFydCA8PCBQQUdFX1NISUZUOwotCQltZW0tPmJ1cy5iYXNlID0gZGV2X3ByaXYtPnJhcl9yZWdpb25fc3RhcnQ7OwotCQltZW0tPmJ1cy5pc19pb21lbSA9IHRydWU7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcHNiX3R0bV9pb19tZW1fZnJlZShzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiwKLQkJCQkJCXN0cnVjdCB0dG1fbWVtX3JlZyAqbWVtKQotewotfQotCi0vKgotICogVXNlIHRoaXMgbWVtb3J5IHR5cGUgcHJpb3JpdHkgaWYgbm8gZXZpY3Rpb24gaXMgbmVlZGVkLgotICovCi0vKgotc3RhdGljIHVpbnQzMl90IHBzYl9tZW1fcHJpb3NbXSA9IHsKLQlUVE1fUExfQ0ksCi0JVFRNX1BMX1JBUiwKLQlUVE1fUExfVFQsCi0JRFJNX1BTQl9NRU1fTU1VLAotCVRUTV9QTF9TWVNURU0KLX07Ci0qLwotLyoKLSAqIFVzZSB0aGlzIG1lbW9yeSB0eXBlIHByaW9yaXR5IGlmIG5lZWQgdG8gZXZpY3QuCi0gKi8KLS8qCi1zdGF0aWMgdWludDMyX3QgcHNiX2J1c3lfcHJpb3NbXSA9IHsKLQlUVE1fUExfVFQsCi0JVFRNX1BMX0NJLAotCVRUTV9QTF9SQVIsCi0JRFJNX1BTQl9NRU1fTU1VLAotCVRUTV9QTF9TWVNURU0KLX07Ci0qLwotc3RydWN0IHR0bV9ib19kcml2ZXIgcHNiX3R0bV9ib19kcml2ZXIgPSB7Ci0vKgotCS5tZW1fdHlwZV9wcmlvID0gcHNiX21lbV9wcmlvcywKLQkubWVtX2J1c3lfcHJpbyA9IHBzYl9idXN5X3ByaW9zLAotCS5udW1fbWVtX3R5cGVfcHJpbyA9IEFSUkFZX1NJWkUocHNiX21lbV9wcmlvcyksCi0JLm51bV9tZW1fYnVzeV9wcmlvID0gQVJSQVlfU0laRShwc2JfYnVzeV9wcmlvcyksCi0qLwotCS5jcmVhdGVfdHRtX2JhY2tlbmRfZW50cnkgPSAmZHJtX3BzYl90YmVfaW5pdCwKLQkuaW52YWxpZGF0ZV9jYWNoZXMgPSAmcHNiX2ludmFsaWRhdGVfY2FjaGVzLAotCS5pbml0X21lbV90eXBlID0gJnBzYl9pbml0X21lbV90eXBlLAotCS5ldmljdF9mbGFncyA9ICZwc2JfZXZpY3RfbWFzaywKLQkubW92ZSA9ICZwc2JfbW92ZSwKLQkudmVyaWZ5X2FjY2VzcyA9ICZwc2JfdmVyaWZ5X2FjY2VzcywKLQkuc3luY19vYmpfc2lnbmFsZWQgPSAmdHRtX2ZlbmNlX3N5bmNfb2JqX3NpZ25hbGVkLAotCS5zeW5jX29ial93YWl0ID0gJnR0bV9mZW5jZV9zeW5jX29ial93YWl0LAotCS5zeW5jX29ial9mbHVzaCA9ICZ0dG1fZmVuY2Vfc3luY19vYmpfZmx1c2gsCi0JLnN5bmNfb2JqX3VucmVmID0gJnR0bV9mZW5jZV9zeW5jX29ial91bnJlZiwKLQkuc3luY19vYmpfcmVmID0gJnR0bV9mZW5jZV9zeW5jX29ial9yZWYsCi0JLmlvX21lbV9yZXNlcnZlID0gJnBzYl90dG1faW9fbWVtX3Jlc2VydmUsCi0JLmlvX21lbV9mcmVlID0gJnBzYl90dG1faW9fbWVtX2ZyZWUKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9kcm0uaCBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2RybS5oCmluZGV4IGEzMzk0MDYuLjQ5ZmZkZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2RybS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2RybS5oCkBAIC0yOCw5ICsyOCw2IEBACiAjaW5jbHVkZSAiZHJtX21vZGUuaCIKICNlbmRpZgogCi0jaW5jbHVkZSAicHNiX3R0bV9mZW5jZV91c2VyLmgiCi0jaW5jbHVkZSAicHNiX3R0bV9wbGFjZW1lbnRfdXNlci5oIgotCiAjZGVmaW5lIERSTV9QU0JfU0FSRUFfTUFKT1IgMAogI2RlZmluZSBEUk1fUFNCX1NBUkVBX01JTk9SIDIKICNkZWZpbmUgUFNCX0ZJWEVEX1NISUZUIDE2CkBAIC00MSwxNSArMzgsNiBAQAogICogUHVibGljIG1lbW9yeSB0eXBlcy4KICAqLwogCi0jZGVmaW5lIERSTV9QU0JfTUVNX01NVSAJVFRNX1BMX1BSSVYxCi0jZGVmaW5lIERSTV9QU0JfRkxBR19NRU1fTU1VCVRUTV9QTF9GTEFHX1BSSVYxCi0KLSNkZWZpbmUgVFRNX1BMX0NJICAgICAgICAgICAgICAgVFRNX1BMX1BSSVYwCi0jZGVmaW5lIFRUTV9QTF9GTEFHX0NJICAgICAgICAgIFRUTV9QTF9GTEFHX1BSSVYwCi0KLSNkZWZpbmUgVFRNX1BMX1JBUiAgICAgICAgICAgICAgVFRNX1BMX1BSSVYyCi0jZGVmaW5lIFRUTV9QTF9GTEFHX1JBUiAgICAgICAgIFRUTV9QTF9GTEFHX1BSSVYyCi0KIHR5cGVkZWYgczMyIHBzYl9maXhlZDsKIHR5cGVkZWYgdTMyIHBzYl91Zml4ZWQ7CiAKQEAgLTExMiwxMTEgKzEwMCwxMiBAQAogCXUzMiBudW1fYWN0aXZlX3NjYW5vdXRzOwogfTsKIAotI2RlZmluZSBQU0JfUkVMT0NfTUFHSUMgICAgICAgICAweDY3Njc2NzY3Ci0jZGVmaW5lIFBTQl9SRUxPQ19TSElGVF9NQVNLICAgIDB4MDAwMEZGRkYKLSNkZWZpbmUgUFNCX1JFTE9DX1NISUZUX1NISUZUICAgMAotI2RlZmluZSBQU0JfUkVMT0NfQUxTSElGVF9NQVNLICAweEZGRkYwMDAwCi0jZGVmaW5lIFBTQl9SRUxPQ19BTFNISUZUX1NISUZUIDE2Ci0KLSNkZWZpbmUgUFNCX1JFTE9DX09QX09GRlNFVCAgICAgMAkvKiBPZmZzZXQgb2YgdGhlIGluZGljYXRlZAotCQkJCQkgKiBidWZmZXIKLQkJCQkJICovCi0KLXN0cnVjdCBkcm1fcHNiX3JlbG9jIHsKLQl1MzIgcmVsb2Nfb3A7Ci0JdTMyIHdoZXJlOwkJLyogb2Zmc2V0IGluIGRlc3RpbmF0aW9uIGJ1ZmZlciAqLwotCXUzMiBidWZmZXI7CS8qIEJ1ZmZlciByZWxvYyBhcHBsaWVzIHRvICovCi0JdTMyIG1hc2s7CQkvKiBEZXN0aW5hdGlvbiBmb3JtYXQ6ICovCi0JdTMyIHNoaWZ0OwkJLyogRGVzdGluYXRpb24gZm9ybWF0OiAqLwotCXUzMiBwcmVfYWRkOwkvKiBEZXN0aW5hdGlvbiBmb3JtYXQ6ICovCi0JdTMyIGJhY2tncm91bmQ7CS8qIERlc3RpbmF0aW9uIGFkZCAqLwotCXUzMiBkc3RfYnVmZmVyOwkvKiBEZXN0aW5hdGlvbiBidWZmZXIuIEluZGV4IGludG8gYnVmZmVyX2xpc3QgKi8KLQl1MzIgYXJnMDsJCS8qIFJlbG9jLW9wIGRlcGVuZGVudCAqLwotCXUzMiBhcmcxOwotfTsKLQotCiAjZGVmaW5lIFBTQl9HUFVfQUNDRVNTX1JFQUQgICAgICAgICAoMVVMTCA8PCAzMikKICNkZWZpbmUgUFNCX0dQVV9BQ0NFU1NfV1JJVEUgICAgICAgICgxVUxMIDw8IDMzKQogI2RlZmluZSBQU0JfR1BVX0FDQ0VTU19NQVNLICAgICAgICAgKFBTQl9HUFVfQUNDRVNTX1JFQUQgfCBQU0JfR1BVX0FDQ0VTU19XUklURSkKIAogI2RlZmluZSBQU0JfQk9fRkxBR19DT01NQU5EICAgICAgICAgKDFVTEwgPDwgNTIpCiAKLSNkZWZpbmUgUFNCX0VOR0lORV8yRCAwCi0jZGVmaW5lIFBTQl9FTkdJTkVfVklERU8gMQotI2RlZmluZSBMTkNfRU5HSU5FX0VOQ09ERSA1Ci0KLS8qCi0gKiBGb3IgdGhpcyBmZW5jZSBjbGFzcyB3ZSBoYXZlIGEgY291cGxlIG9mCi0gKiBmZW5jZSB0eXBlcy4KLSAqLwotCi0jZGVmaW5lIF9QU0JfRkVOQ0VfRVhFX1NISUZUICAgICAgICAgICAwCi0jZGVmaW5lIF9QU0JfRkVOQ0VfRkVFREJBQ0tfU0hJRlQgICAgICA0Ci0KLSNkZWZpbmUgX1BTQl9GRU5DRV9UWVBFX0VYRSAgICAgICAgICgxIDw8IF9QU0JfRkVOQ0VfRVhFX1NISUZUKQotI2RlZmluZSBfUFNCX0ZFTkNFX1RZUEVfRkVFREJBQ0sgICAgKDEgPDwgX1BTQl9GRU5DRV9GRUVEQkFDS19TSElGVCkKLQotI2RlZmluZSBQU0JfTlVNX0VOR0lORVMgNgotCi0KLSNkZWZpbmUgUFNCX0ZFRURCQUNLX09QX1ZJU1RFU1QgKDEgPDwgMCkKLQotc3RydWN0IGRybV9wc2JfZXh0ZW5zaW9uX3JlcCB7Ci0JczMyIGV4aXN0czsKLQl1MzIgZHJpdmVyX2lvY3RsX29mZnNldDsKLQl1MzIgc2FyZWFfb2Zmc2V0OwotCXUzMiBtYWpvcjsKLQl1MzIgbWlub3I7Ci0JdTMyIHBsOwotfTsKLQotI2RlZmluZSBEUk1fUFNCX0VYVF9OQU1FX0xFTiAxMjgKLQotdW5pb24gZHJtX3BzYl9leHRlbnNpb25fYXJnIHsKLQljaGFyIGV4dGVuc2lvbltEUk1fUFNCX0VYVF9OQU1FX0xFTl07Ci0Jc3RydWN0IGRybV9wc2JfZXh0ZW5zaW9uX3JlcCByZXA7Ci19OwotCi1zdHJ1Y3QgcHNiX3ZhbGlkYXRlX3JlcSB7Ci0JdTY0IHNldF9mbGFnczsKLQl1NjQgY2xlYXJfZmxhZ3M7Ci0JdTY0IG5leHQ7Ci0JdTY0IHByZXN1bWVkX2dwdV9vZmZzZXQ7Ci0JdTMyIGJ1ZmZlcl9oYW5kbGU7Ci0JdTMyIHByZXN1bWVkX2ZsYWdzOwotCXUzMiBncm91cDsKLQl1MzIgcGFkNjQ7Ci19OwotCi1zdHJ1Y3QgcHNiX3ZhbGlkYXRlX3JlcCB7Ci0JdTY0IGdwdV9vZmZzZXQ7Ci0JdTMyIHBsYWNlbWVudDsKLQl1MzIgZmVuY2VfdHlwZV9tYXNrOwotfTsKLQotI2RlZmluZSBQU0JfVVNFX1BSRVNVTUVEICAgICAoMSA8PCAwKQotCi1zdHJ1Y3QgcHNiX3ZhbGlkYXRlX2FyZyB7Ci0JaW50IGhhbmRsZWQ7Ci0JaW50IHJldDsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBwc2JfdmFsaWRhdGVfcmVxIHJlcTsKLQkJc3RydWN0IHBzYl92YWxpZGF0ZV9yZXAgcmVwOwotCX0gZDsKLX07Ci0KLQotI2RlZmluZSBEUk1fUFNCX0ZFTkNFX05PX1VTRVIgICAgICAgICgxIDw8IDApCi0KLXN0cnVjdCBwc2JfdHRtX2ZlbmNlX3JlcCB7Ci0JdTMyIGhhbmRsZTsKLQl1MzIgZmVuY2VfY2xhc3M7Ci0JdTMyIGZlbmNlX3R5cGU7Ci0JdTMyIHNpZ25hbGVkX3R5cGVzOwotCXUzMiBlcnJvcjsKLX07Ci0KIC8qCiAgKiBGZWVkYmFjayBjb21wb25lbnRzOgogICovCkBAIC0zMzAsMTcgKzIxOSw2IEBACiAJdTMyIHN1YnBpY3R1cmVfZGlzYWJsZV9tYXNrOwogfTsKIAotc3RydWN0IHBzYl9ndHRfbWFwcGluZ19hcmcgewotCXZvaWQgKmhLZXJuZWxNZW1JbmZvOwotCXUzMiBvZmZzZXRfcGFnZXM7Ci19OwotCi1zdHJ1Y3QgZHJtX3BzYl9nZXRwYWdlYWRkcnNfYXJnIHsKLQl1MzIgaGFuZGxlOwotCXVuc2lnbmVkIGxvbmcgKnBhZ2VfYWRkcnM7Ci0JdW5zaWduZWQgbG9uZyBndHRfb2Zmc2V0OwotfTsKLQogLyogQ29udHJvbGxpbmcgdGhlIGtlcm5lbCBtb2Rlc2V0dGluZyBidWZmZXJzICovCiAKICNkZWZpbmUgRFJNX1BTQl9LTVNfT0ZGCQkweDAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2Rydi5jCmluZGV4IGQwMWQ0NWUuLjFjNDVjMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2Rydi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2Rydi5jCkBAIC0zOCwzMCArMzgsMjkgQEAKIGludCBkcm1fcHNiX2RlYnVnOwogc3RhdGljIGludCBkcm1fcHNiX3RyYXBfcGFnZWZhdWx0czsKIAotaW50IGRybV9wc2JfZGlzYWJsZV92c3luYyA9IDE7CiBpbnQgZHJtX3BzYl9ub19mYjsKLWludCBnZnhydGRlbGF5ID0gMiAqIDEwMDA7CiAKIHN0YXRpYyBpbnQgcHNiX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KTsKIAogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkVuYWJsZSBkZWJ1ZyBvdXRwdXQiKTsKIE1PRFVMRV9QQVJNX0RFU0Mobm9fZmIsICJEaXNhYmxlIEZCZGV2Iik7CiBNT0RVTEVfUEFSTV9ERVNDKHRyYXBfcGFnZWZhdWx0cywgIkVycm9yIGFuZCByZXNldCBvbiBNTVUgcGFnZWZhdWx0cyIpOwotTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX3ZzeW5jLCAiRGlzYWJsZSB2c3luYyBpbnRlcnJ1cHRzIik7Ci1NT0RVTEVfUEFSTV9ERVNDKGZvcmNlX3BpcGViLCAiRm9yY2VzIFBJUEVCIHRvIGJlY29tZSBwcmltYXJ5IGZiIik7Ci1NT0RVTEVfUEFSTV9ERVNDKHRhX21lbV9zaXplLCAiVEEgbWVtb3J5IHNpemUgaW4ga2lCIik7Ci1NT0RVTEVfUEFSTV9ERVNDKG9zcG0sICJzd2l0Y2ggZm9yIG9zcG0gc3VwcG9ydCIpOwotTU9EVUxFX1BBUk1fREVTQyhydHBtLCAiU3BlY2lmaWVzIFJ1bnRpbWUgUE0gZGVsYXkgZm9yIEdGWCIpOwotTU9EVUxFX1BBUk1fREVTQyhoZG1pX2VkaWQsICJFRElEIGluZm8gZm9yIEhETUkgbW9uaXRvciIpOwogbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBkcm1fcHNiX2RlYnVnLCBpbnQsIDA2MDApOwogbW9kdWxlX3BhcmFtX25hbWVkKG5vX2ZiLCBkcm1fcHNiX25vX2ZiLCBpbnQsIDA2MDApOwogbW9kdWxlX3BhcmFtX25hbWVkKHRyYXBfcGFnZWZhdWx0cywgZHJtX3BzYl90cmFwX3BhZ2VmYXVsdHMsIGludCwgMDYwMCk7Ci1tb2R1bGVfcGFyYW1fbmFtZWQocnRwbSwgZ2Z4cnRkZWxheSwgaW50LCAwNjAwKTsKIAogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpaWRsaXN0W10gPSB7CiAJeyAweDgwODYsIDB4ODEwOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9QU0JfODEwOCB9LAogCXsgMHg4MDg2LCAweDgxMDksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUFNCXzgxMDkgfSwKKwl7IDB4ODA4NiwgMHg0MTAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX01SU1RfNDEwMH0sCisJeyAweDgwODYsIDB4NDEwMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9NUlNUXzQxMDB9LAorCXsgMHg4MDg2LCAweDQxMDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfTVJTVF80MTAwfSwKKwl7IDB4ODA4NiwgMHg0MTAzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX01SU1RfNDEwMH0sCisJeyAweDgwODYsIDB4NDEwNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9NUlNUXzQxMDB9LAorCXsgMHg4MDg2LCAweDQxMDUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfTVJTVF80MTAwfSwKKwl7IDB4ODA4NiwgMHg0MTA2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX01SU1RfNDEwMH0sCisJeyAweDgwODYsIDB4NDEwNywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9NUlNUXzQxMDB9LAogCXsgMCwgMCwgMH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGNpaWRsaXN0KTsKQEAgLTc0LDEwICs3Myw2IEBACiAJCURSTV9JTyhEUk1fUFNCX0tNU19PRkYgKyBEUk1fQ09NTUFORF9CQVNFKQogI2RlZmluZSBEUk1fSU9DVExfUFNCX0tNU19PTglcCiAJCURSTV9JTyhEUk1fUFNCX0tNU19PTiArIERSTV9DT01NQU5EX0JBU0UpCi0jZGVmaW5lIERSTV9JT0NUTF9QU0JfVlRfTEVBVkUJXAotCQlEUk1fSU8oRFJNX1BTQl9WVF9MRUFWRSArIERSTV9DT01NQU5EX0JBU0UpCi0jZGVmaW5lIERSTV9JT0NUTF9QU0JfVlRfRU5URVIJXAotCQlEUk1fSU8oRFJNX1BTQl9WVF9FTlRFUiArIERSTV9DT01NQU5EX0JBU0UpCiAjZGVmaW5lIERSTV9JT0NUTF9QU0JfU0laRVMJXAogCQlEUk1fSU9SKERSTV9QU0JfU0laRVMgKyBEUk1fQ09NTUFORF9CQVNFLCBcCiAJCQlzdHJ1Y3QgZHJtX3BzYl9zaXplc19hcmcpCkBAIC05NywxOCArOTIsNiBAQAogI2RlZmluZSBEUk1fSU9DVExfUFNCX1JFR0lTVEVSX1JXCVwKIAkJRFJNX0lPV1IoRFJNX1BTQl9SRUdJU1RFUl9SVyArIERSTV9DT01NQU5EX0JBU0UsIFwKIAkJCSBzdHJ1Y3QgZHJtX3BzYl9yZWdpc3Rlcl9yd19hcmcpCi0jZGVmaW5lIERSTV9JT0NUTF9QU0JfR1RUX01BUAlcCi0JCURSTV9JT1dSKERSTV9QU0JfR1RUX01BUCArIERSTV9DT01NQU5EX0JBU0UsIFwKLQkJCSBzdHJ1Y3QgcHNiX2d0dF9tYXBwaW5nX2FyZykKLSNkZWZpbmUgRFJNX0lPQ1RMX1BTQl9HVFRfVU5NQVAJXAotCQlEUk1fSU9XKERSTV9QU0JfR1RUX1VOTUFQICsgRFJNX0NPTU1BTkRfQkFTRSwgXAotCQkJc3RydWN0IHBzYl9ndHRfbWFwcGluZ19hcmcpCi0jZGVmaW5lIERSTV9JT0NUTF9QU0JfR0VUUEFHRUFERFJTCVwKLQkJRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9QU0JfR0VUUEFHRUFERFJTLFwKLQkJCSBzdHJ1Y3QgZHJtX3BzYl9nZXRwYWdlYWRkcnNfYXJnKQotI2RlZmluZSBEUk1fSU9DVExfUFNCX1VQREFURV9HVUFSRAlcCi0JCURSTV9JT1dSKERSTV9QU0JfVVBEQVRFX0dVQVJEICsgRFJNX0NPTU1BTkRfQkFTRSwgXAotCQkJIHVpbnQzMl90KQogI2RlZmluZSBEUk1fSU9DVExfUFNCX0RQU1QJXAogCQlEUk1fSU9XUihEUk1fUFNCX0RQU1QgKyBEUk1fQ09NTUFORF9CQVNFLCBcCiAJCQkgdWludDMyX3QpCkBAIC0xMjIsNzQgKzEwNSw2IEBACiAJCURSTV9JT1dSKERSTV9QU0JfR0VUX1BJUEVfRlJPTV9DUlRDX0lEICsgRFJNX0NPTU1BTkRfQkFTRSwgXAogCQkJIHN0cnVjdCBkcm1fcHNiX2dldF9waXBlX2Zyb21fY3J0Y19pZF9hcmcpCiAKLS8qCi0gKiBUVE0gZXhlY2J1ZiBleHRlbnNpb24uCi0gKi8KLQotI2RlZmluZSBEUk1fUFNCX0NNREJVRgkJICAweDIzCi0jZGVmaW5lIERSTV9QU0JfU0NFTkVfVU5SRUYJICAweDI0Ci0jZGVmaW5lIERSTV9JT0NUTF9QU0JfS01TX09GRgkgIERSTV9JTyhEUk1fUFNCX0tNU19PRkYgKyBEUk1fQ09NTUFORF9CQVNFKQotI2RlZmluZSBEUk1fSU9DVExfUFNCX0tNU19PTgkgIERSTV9JTyhEUk1fUFNCX0tNU19PTiArIERSTV9DT01NQU5EX0JBU0UpCi0vKgotICogVFRNIHBsYWNlbWVudCB1c2VyIGV4dGVuc2lvbi4KLSAqLwotCi0jZGVmaW5lIERSTV9QU0JfUExBQ0VNRU5UX09GRlNFVCAgIChEUk1fUFNCX1NDRU5FX1VOUkVGICsgMSkKLQotI2RlZmluZSBEUk1fUFNCX1RUTV9QTF9DUkVBVEUJIChUVE1fUExfQ1JFQVRFICsgRFJNX1BTQl9QTEFDRU1FTlRfT0ZGU0VUKQotI2RlZmluZSBEUk1fUFNCX1RUTV9QTF9SRUZFUkVOQ0UgKFRUTV9QTF9SRUZFUkVOQ0UgKyBEUk1fUFNCX1BMQUNFTUVOVF9PRkZTRVQpCi0jZGVmaW5lIERSTV9QU0JfVFRNX1BMX1VOUkVGCSAoVFRNX1BMX1VOUkVGICsgRFJNX1BTQl9QTEFDRU1FTlRfT0ZGU0VUKQotI2RlZmluZSBEUk1fUFNCX1RUTV9QTF9TWU5DQ1BVCSAoVFRNX1BMX1NZTkNDUFUgKyBEUk1fUFNCX1BMQUNFTUVOVF9PRkZTRVQpCi0jZGVmaW5lIERSTV9QU0JfVFRNX1BMX1dBSVRJRExFICAoVFRNX1BMX1dBSVRJRExFICsgRFJNX1BTQl9QTEFDRU1FTlRfT0ZGU0VUKQotI2RlZmluZSBEUk1fUFNCX1RUTV9QTF9TRVRTVEFUVVMgKFRUTV9QTF9TRVRTVEFUVVMgKyBEUk1fUFNCX1BMQUNFTUVOVF9PRkZTRVQpCi0jZGVmaW5lIERSTV9QU0JfVFRNX1BMX0NSRUFURV9VQiAoVFRNX1BMX0NSRUFURV9VQiArIERSTV9QU0JfUExBQ0VNRU5UX09GRlNFVCkKLQotLyoKLSAqIFRUTSBmZW5jZSBleHRlbnNpb24uCi0gKi8KLQotI2RlZmluZSBEUk1fUFNCX0ZFTkNFX09GRlNFVAkgICAoRFJNX1BTQl9UVE1fUExfQ1JFQVRFX1VCICsgMSkKLSNkZWZpbmUgRFJNX1BTQl9UVE1fRkVOQ0VfU0lHTkFMRUQgKFRUTV9GRU5DRV9TSUdOQUxFRCArIERSTV9QU0JfRkVOQ0VfT0ZGU0VUKQotI2RlZmluZSBEUk1fUFNCX1RUTV9GRU5DRV9GSU5JU0ggICAoVFRNX0ZFTkNFX0ZJTklTSCArIERSTV9QU0JfRkVOQ0VfT0ZGU0VUKQotI2RlZmluZSBEUk1fUFNCX1RUTV9GRU5DRV9VTlJFRiAgICAoVFRNX0ZFTkNFX1VOUkVGICsgRFJNX1BTQl9GRU5DRV9PRkZTRVQpCi0KLSNkZWZpbmUgRFJNX1BTQl9GTElQCSAgIChEUk1fUFNCX1RUTV9GRU5DRV9VTlJFRiArIDEpCS8qMjAqLwotCi0jZGVmaW5lIERSTV9JT0NUTF9QU0JfVFRNX1BMX0NSRUFURSAgICBcCi0JRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9QU0JfVFRNX1BMX0NSRUFURSxcCi0JCSB1bmlvbiB0dG1fcGxfY3JlYXRlX2FyZykKLSNkZWZpbmUgRFJNX0lPQ1RMX1BTQl9UVE1fUExfUkVGRVJFTkNFIFwKLQlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1BTQl9UVE1fUExfUkVGRVJFTkNFLFwKLQkJIHVuaW9uIHR0bV9wbF9yZWZlcmVuY2VfYXJnKQotI2RlZmluZSBEUk1fSU9DVExfUFNCX1RUTV9QTF9VTlJFRiAgICBcCi0JRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgRFJNX1BTQl9UVE1fUExfVU5SRUYsXAotCQlzdHJ1Y3QgdHRtX3BsX3JlZmVyZW5jZV9yZXEpCi0jZGVmaW5lIERSTV9JT0NUTF9QU0JfVFRNX1BMX1NZTkNDUFUJXAotCURSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIERSTV9QU0JfVFRNX1BMX1NZTkNDUFUsXAotCQlzdHJ1Y3QgdHRtX3BsX3N5bmNjcHVfYXJnKQotI2RlZmluZSBEUk1fSU9DVExfUFNCX1RUTV9QTF9XQUlUSURMRQkgXAotCURSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIERSTV9QU0JfVFRNX1BMX1dBSVRJRExFLFwKLQkJc3RydWN0IHR0bV9wbF93YWl0aWRsZV9hcmcpCi0jZGVmaW5lIERSTV9JT0NUTF9QU0JfVFRNX1BMX1NFVFNUQVRVUyBcCi0JRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9QU0JfVFRNX1BMX1NFVFNUQVRVUyxcCi0JCSB1bmlvbiB0dG1fcGxfc2V0c3RhdHVzX2FyZykKLSNkZWZpbmUgRFJNX0lPQ1RMX1BTQl9UVE1fUExfQ1JFQVRFX1VCICAgIFwKLQlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1BTQl9UVE1fUExfQ1JFQVRFX1VCLFwKLQkJIHVuaW9uIHR0bV9wbF9jcmVhdGVfdWJfYXJnKQotI2RlZmluZSBEUk1fSU9DVExfUFNCX1RUTV9GRU5DRV9TSUdOQUxFRCBcCi0JRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9QU0JfVFRNX0ZFTkNFX1NJR05BTEVELAlcCi0JCSAgdW5pb24gdHRtX2ZlbmNlX3NpZ25hbGVkX2FyZykKLSNkZWZpbmUgRFJNX0lPQ1RMX1BTQl9UVE1fRkVOQ0VfRklOSVNIIFwKLQlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1BTQl9UVE1fRkVOQ0VfRklOSVNILAlcCi0JCSB1bmlvbiB0dG1fZmVuY2VfZmluaXNoX2FyZykKLSNkZWZpbmUgRFJNX0lPQ1RMX1BTQl9UVE1fRkVOQ0VfVU5SRUYgXAotCURSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIERSTV9QU0JfVFRNX0ZFTkNFX1VOUkVGLAlcCi0JCSBzdHJ1Y3QgdHRtX2ZlbmNlX3VucmVmX2FyZykKLQotc3RhdGljIGludCBwc2JfdnRfbGVhdmVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKLQkJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKLXN0YXRpYyBpbnQgcHNiX3Z0X2VudGVyX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCi0JCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBzdGF0aWMgaW50IHBzYl9zaXplc19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogc3RhdGljIGludCBwc2JfZGNfc3RhdGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqIGRhdGEsCkBAIC0yMTgsMTEgKzEzMyw2IEBACiAJUFNCX0lPQ1RMX0RFRihEUk1fSU9DVExfUFNCX0tNU19PTiwKIAkJCXBzYmZiX2ttc19vbl9pb2N0bCwKIAkJCURSTV9ST09UX09OTFkpLAotCVBTQl9JT0NUTF9ERUYoRFJNX0lPQ1RMX1BTQl9WVF9MRUFWRSwgcHNiX3Z0X2xlYXZlX2lvY3RsLAotCQkgICAgICBEUk1fUk9PVF9PTkxZKSwKLQlQU0JfSU9DVExfREVGKERSTV9JT0NUTF9QU0JfVlRfRU5URVIsCi0JCQlwc2JfdnRfZW50ZXJfaW9jdGwsCi0JCQlEUk1fUk9PVF9PTkxZKSwKIAlQU0JfSU9DVExfREVGKERSTV9JT0NUTF9QU0JfU0laRVMsIHBzYl9zaXplc19pb2N0bCwgRFJNX0FVVEgpLAogCVBTQl9JT0NUTF9ERUYoRFJNX0lPQ1RMX1BTQl9EQ19TVEFURSwgcHNiX2RjX3N0YXRlX2lvY3RsLCBEUk1fQVVUSCksCiAJUFNCX0lPQ1RMX0RFRihEUk1fSU9DVExfUFNCX0FEQiwgcHNiX2FkYl9pb2N0bCwgRFJNX0FVVEgpLApAQCAtMjMyLDkyICsxNDIsMjI2IEBACiAJCSAgICAgIERSTV9BVVRIKSwKIAlQU0JfSU9DVExfREVGKERSTV9JT0NUTF9QU0JfUkVHSVNURVJfUlcsIHBzYl9yZWdpc3Rlcl9yd19pb2N0bCwKIAkJICAgICAgRFJNX0FVVEgpLAotCVBTQl9JT0NUTF9ERUYoRFJNX0lPQ1RMX1BTQl9HVFRfTUFQLAotCQkJcHNiX2d0dF9tYXBfbWVtaW5mb19pb2N0bCwKLQkJCURSTV9BVVRIKSwKLQlQU0JfSU9DVExfREVGKERSTV9JT0NUTF9QU0JfR1RUX1VOTUFQLAotCQkJcHNiX2d0dF91bm1hcF9tZW1pbmZvX2lvY3RsLAotCQkJRFJNX0FVVEgpLAotCVBTQl9JT0NUTF9ERUYoRFJNX0lPQ1RMX1BTQl9HRVRQQUdFQUREUlMsCi0JCQlwc2JfZ2V0cGFnZWFkZHJzX2lvY3RsLAotCQkJRFJNX0FVVEgpLAogCVBTQl9JT0NUTF9ERUYoRFJNX0lPQ1RMX1BTQl9EUFNULCBwc2JfZHBzdF9pb2N0bCwgRFJNX0FVVEgpLAogCVBTQl9JT0NUTF9ERUYoRFJNX0lPQ1RMX1BTQl9HQU1NQSwgcHNiX2dhbW1hX2lvY3RsLCBEUk1fQVVUSCksCiAJUFNCX0lPQ1RMX0RFRihEUk1fSU9DVExfUFNCX0RQU1RfQkwsIHBzYl9kcHN0X2JsX2lvY3RsLCBEUk1fQVVUSCksCiAJUFNCX0lPQ1RMX0RFRihEUk1fSU9DVExfUFNCX0dFVF9QSVBFX0ZST01fQ1JUQ19JRCwKIAkJCQkJcHNiX2ludGVsX2dldF9waXBlX2Zyb21fY3J0Y19pZCwgMCksCiAKLQlQU0JfSU9DVExfREVGKERSTV9JT0NUTF9QU0JfVFRNX1BMX0NSRUFURSwgcHNiX3BsX2NyZWF0ZV9pb2N0bCwKLQkJICAgICAgRFJNX0FVVEgpLAotCVBTQl9JT0NUTF9ERUYoRFJNX0lPQ1RMX1BTQl9UVE1fUExfUkVGRVJFTkNFLCBwc2JfcGxfcmVmZXJlbmNlX2lvY3RsLAotCQkgICAgICBEUk1fQVVUSCksCi0JUFNCX0lPQ1RMX0RFRihEUk1fSU9DVExfUFNCX1RUTV9QTF9VTlJFRiwgcHNiX3BsX3VucmVmX2lvY3RsLAotCQkgICAgICBEUk1fQVVUSCksCi0JUFNCX0lPQ1RMX0RFRihEUk1fSU9DVExfUFNCX1RUTV9QTF9TWU5DQ1BVLCBwc2JfcGxfc3luY2NwdV9pb2N0bCwKLQkJICAgICAgRFJNX0FVVEgpLAotCVBTQl9JT0NUTF9ERUYoRFJNX0lPQ1RMX1BTQl9UVE1fUExfV0FJVElETEUsIHBzYl9wbF93YWl0aWRsZV9pb2N0bCwKLQkJICAgICAgRFJNX0FVVEgpLAotCVBTQl9JT0NUTF9ERUYoRFJNX0lPQ1RMX1BTQl9UVE1fUExfU0VUU1RBVFVTLCBwc2JfcGxfc2V0c3RhdHVzX2lvY3RsLAotCQkgICAgICBEUk1fQVVUSCksCi0JUFNCX0lPQ1RMX0RFRihEUk1fSU9DVExfUFNCX1RUTV9QTF9DUkVBVEVfVUIsIHBzYl9wbF91Yl9jcmVhdGVfaW9jdGwsCi0JCSAgICAgIERSTV9BVVRIKSwKLQlQU0JfSU9DVExfREVGKERSTV9JT0NUTF9QU0JfVFRNX0ZFTkNFX1NJR05BTEVELAotCQkgICAgICBwc2JfZmVuY2Vfc2lnbmFsZWRfaW9jdGwsIERSTV9BVVRIKSwKLQlQU0JfSU9DVExfREVGKERSTV9JT0NUTF9QU0JfVFRNX0ZFTkNFX0ZJTklTSCwgcHNiX2ZlbmNlX2ZpbmlzaF9pb2N0bCwKLQkJICAgICAgRFJNX0FVVEgpLAotCVBTQl9JT0NUTF9ERUYoRFJNX0lPQ1RMX1BTQl9UVE1fRkVOQ0VfVU5SRUYsIHBzYl9mZW5jZV91bnJlZl9pb2N0bCwKLQkJICAgICAgRFJNX0FVVEgpLAogfTsKIAotc3RhdGljIHZvaWQgcHNiX3NldF91b3B0KHN0cnVjdCBkcm1fcHNiX3VvcHQgKnVvcHQpCi17Ci0JcmV0dXJuOwotfQotCiBzdGF0aWMgdm9pZCBwc2JfbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPQotCSAgICAoc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqKSBkZXYtPmRldl9wcml2YXRlOwotCiAJcmV0dXJuOwotCi0JaWYgKCFkZXYtPmRldl9wcml2YXRlKQotCQlyZXR1cm47Ci0KLQltdXRleF9sb2NrKCZkZXZfcHJpdi0+Y21kYnVmX211dGV4KTsKLQlpZiAoZGV2X3ByaXYtPmNvbnRleHQuYnVmZmVycykgewotCQl2ZnJlZShkZXZfcHJpdi0+Y29udGV4dC5idWZmZXJzKTsKLQkJZGV2X3ByaXYtPmNvbnRleHQuYnVmZmVycyA9IE5VTEw7Ci0JfQotCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmNtZGJ1Zl9tdXRleCk7CiB9CiAKIHN0YXRpYyB2b2lkIHBzYl9kb190YWtlZG93bihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0KLQkgICAgKHN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKikgZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiA9ICZkZXZfcHJpdi0+YmRldjsKKwkvKiBGSVhNRTogZG8gd2UgbmVlZCB0byBjbGVhbiB1cCB0aGUgZ3R0IGhlcmUgPyAqLworfQogCit2b2lkIG1yc3RfZ2V0X2Z1c2Vfc2V0dGluZ3Moc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9yb290ID0gcGNpX2dldF9idXNfYW5kX3Nsb3QoMCwgMCk7CisJdWludDMyX3QgZnVzZV92YWx1ZSA9IDA7CisJdWludDMyX3QgZnVzZV92YWx1ZV90bXAgPSAwOwogCi0JaWYgKGRldl9wcml2LT5oYXZlX21lbV9tbXUpIHsKLQkJdHRtX2JvX2NsZWFuX21tKGJkZXYsIERSTV9QU0JfTUVNX01NVSk7Ci0JCWRldl9wcml2LT5oYXZlX21lbV9tbXUgPSAwOworI2RlZmluZSBGQl9SRUcwNiAweEQwODEwNjAwCisjZGVmaW5lIEZCX01JUElfRElTQUJMRSAgKDEgPDwgMTEpCisjZGVmaW5lIEZCX1JFRzA5IDB4RDA4MTA5MDAKKyNkZWZpbmUgRkJfUkVHMDkgMHhEMDgxMDkwMAorI2RlZmluZSBGQl9TS1VfTUFTSyAgMHg3MDAwCisjZGVmaW5lIEZCX1NLVV9TSElGVCAxMgorI2RlZmluZSBGQl9TS1VfMTAwIDAKKyNkZWZpbmUgRkJfU0tVXzEwMEwgMQorI2RlZmluZSBGQl9TS1VfODMgMgorCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGNpX3Jvb3QsIDB4RDAsIEZCX1JFRzA2KTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGNpX3Jvb3QsIDB4RDQsICZmdXNlX3ZhbHVlKTsKKworCWRldl9wcml2LT5pTFZEU19lbmFibGUgPSBmdXNlX3ZhbHVlICYgRkJfTUlQSV9ESVNBQkxFOworCisJRFJNX0lORk8oImludGVybmFsIGRpc3BsYXkgaXMgJXNcbiIsCisJCSBkZXZfcHJpdi0+aUxWRFNfZW5hYmxlID8gIkxWRFMgZGlzcGxheSIgOiAiTUlQSSBkaXNwbGF5Iik7CisKKwkgLypwcmV2ZW50IFJ1bnRpbWUgc3VzcGVuZCBhdCBzdGFydCovCisJIGlmIChkZXZfcHJpdi0+aUxWRFNfZW5hYmxlKSB7CisJCWRldl9wcml2LT5pc19sdmRzX29uID0gdHJ1ZTsKKwkJZGV2X3ByaXYtPmlzX21pcGlfb24gPSBmYWxzZTsKKwl9CisJZWxzZSB7CisJCWRldl9wcml2LT5pc19taXBpX29uID0gdHJ1ZTsKKwkJZGV2X3ByaXYtPmlzX2x2ZHNfb24gPSBmYWxzZTsKIAl9CiAKLQlpZiAoZGV2X3ByaXYtPmhhdmVfdHQpIHsKLQkJdHRtX2JvX2NsZWFuX21tKGJkZXYsIFRUTV9QTF9UVCk7Ci0JCWRldl9wcml2LT5oYXZlX3R0ID0gMDsKKwlkZXZfcHJpdi0+dmlkZW9fZGV2aWNlX2Z1c2UgPSBmdXNlX3ZhbHVlOworCisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwY2lfcm9vdCwgMHhEMCwgRkJfUkVHMDkpOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwY2lfcm9vdCwgMHhENCwgJmZ1c2VfdmFsdWUpOworCisJRFJNX0lORk8oIlNLVSB2YWx1ZXMgaXMgMHgleC4gXG4iLCBmdXNlX3ZhbHVlKTsKKwlmdXNlX3ZhbHVlX3RtcCA9IChmdXNlX3ZhbHVlICYgRkJfU0tVX01BU0spID4+IEZCX1NLVV9TSElGVDsKKworCWRldl9wcml2LT5mdXNlX3JlZ192YWx1ZSA9IGZ1c2VfdmFsdWU7CisKKwlzd2l0Y2ggKGZ1c2VfdmFsdWVfdG1wKSB7CisJY2FzZSBGQl9TS1VfMTAwOgorCQlkZXZfcHJpdi0+Y29yZV9mcmVxID0gMjAwOworCQlicmVhazsKKwljYXNlIEZCX1NLVV8xMDBMOgorCQlkZXZfcHJpdi0+Y29yZV9mcmVxID0gMTAwOworCQlicmVhazsKKwljYXNlIEZCX1NLVV84MzoKKwkJZGV2X3ByaXYtPmNvcmVfZnJlcSA9IDE2NjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFJNX0VSUk9SKCJJbnZhbGlkIFNLVSB2YWx1ZXMsIFNLVSB2YWx1ZSA9IDB4JTA4eFxuIiwgZnVzZV92YWx1ZV90bXApOworCQlkZXZfcHJpdi0+Y29yZV9mcmVxID0gMDsKKwl9CisJRFJNX0lORk8oIkxOQyBjb3JlIGNsayBpcyAlZE1Iei5cbiIsIGRldl9wcml2LT5jb3JlX2ZyZXEpOworCXBjaV9kZXZfcHV0KHBjaV9yb290KTsKK30KKwordm9pZCBtaWRfZ2V0X3BjaV9yZXZJRCAoc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJdWludDMyX3QgcGxhdGZvcm1fcmV2X2lkID0gMDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2dmeF9yb290ID0gcGNpX2dldF9idXNfYW5kX3Nsb3QoMCwgUENJX0RFVkZOKDIsIDApKTsKKworCS8qZ2V0IHRoZSByZXZpc29uIElELCBCMDpEMjpGMDsweDA4ICovCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9nZnhfcm9vdCwgMHgwOCwgJnBsYXRmb3JtX3Jldl9pZCk7CisJZGV2X3ByaXYtPnBsYXRmb3JtX3Jldl9pZCA9ICh1aW50OF90KSBwbGF0Zm9ybV9yZXZfaWQ7CisJcGNpX2Rldl9wdXQocGNpX2dmeF9yb290KTsKKwlQU0JfREVCVUdfRU5UUlkoInBsYXRmb3JtX3Jldl9pZCBpcyAleFxuIiwJZGV2X3ByaXYtPnBsYXRmb3JtX3Jldl9pZCk7Cit9CisKK3ZvaWQgbXJzdF9nZXRfdmJ0X2RhdGEoc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJc3RydWN0IG1yc3RfdmJ0ICp2YnQgPSAmZGV2X3ByaXYtPnZidF9kYXRhOworCXUzMiBwbGF0Zm9ybV9jb25maWdfYWRkcmVzczsKKwl1MTYgbmV3X3NpemU7CisJdTggKnZidF92aXJ0dWFsOworCXU4IGJwaTsKKwl1OCBudW1iZXJfZGVzYyA9IDA7CisJc3RydWN0IG1yc3RfdGltaW5nX2luZm8gKmRwX3RpID0gJmRldl9wcml2LT5nY3RfZGF0YS5EVEQ7CisJc3RydWN0IGdjdF9yMTBfdGltaW5nX2luZm8gdGk7CisJdm9pZCAqcEdDVDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2dmeF9yb290ID0gcGNpX2dldF9idXNfYW5kX3Nsb3QoMCwgUENJX0RFVkZOKDIsIDApKTsKKworCS8qZ2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBwbGF0Zm9ybSBjb25maWcgdmJ0LCBCMDpEMjpGMDsweEZDICovCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9nZnhfcm9vdCwgMHhGQywgJnBsYXRmb3JtX2NvbmZpZ19hZGRyZXNzKTsKKwlwY2lfZGV2X3B1dChwY2lfZ2Z4X3Jvb3QpOworCURSTV9JTkZPKCJkcm0gcGxhdGZvcm0gY29uZmlnIGFkZHJlc3MgaXMgJXhcbiIsCisJCQlwbGF0Zm9ybV9jb25maWdfYWRkcmVzcyk7CisKKwkvKiBjaGVjayBmb3IgcGxhdGZvcm0gY29uZmlnIGFkZHJlc3MgPT0gMC4gKi8KKwkvKiB0aGlzIG1lYW5zIGZ3IGRvZXNuJ3Qgc3VwcG9ydCB2YnQgKi8KKworCWlmIChwbGF0Zm9ybV9jb25maWdfYWRkcmVzcyA9PSAwKSB7CisJCXZidC0+c2l6ZSA9IDA7CisJCXJldHVybjsKIAl9CiAKLQlpZiAoZGV2X3ByaXYtPmhhdmVfY2FtZXJhKSB7Ci0JCXR0bV9ib19jbGVhbl9tbShiZGV2LCBUVE1fUExfQ0kpOwotCQlkZXZfcHJpdi0+aGF2ZV9jYW1lcmEgPSAwOwotCX0KLQlpZiAoZGV2X3ByaXYtPmhhdmVfcmFyKSB7Ci0JCXR0bV9ib19jbGVhbl9tbShiZGV2LCBUVE1fUExfUkFSKTsKLQkJZGV2X3ByaXYtPmhhdmVfcmFyID0gMDsKLQl9CisJLyogZ2V0IHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIHZidCAqLworCXZidF92aXJ0dWFsID0gaW9yZW1hcChwbGF0Zm9ybV9jb25maWdfYWRkcmVzcywgc2l6ZW9mKCp2YnQpKTsKIAorCW1lbWNweSh2YnQsIHZidF92aXJ0dWFsLCBzaXplb2YoKnZidCkpOworCWlvdW5tYXAodmJ0X3ZpcnR1YWwpOyAvKiBGcmVlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSAqLworCisJcHJpbnRrKEtFUk5fQUxFUlQgIkdDVCByZXZpc2lvbiBpcyAleFxuIiwgdmJ0LT5yZXZpc2lvbik7CisKKwlzd2l0Y2ggKHZidC0+cmV2aXNpb24pIHsKKwljYXNlIDA6CisJCXZidC0+bXJzdF9nY3QgPSBOVUxMOworCQl2YnQtPm1yc3RfZ2N0ID0gXAorCQkJaW9yZW1hcChwbGF0Zm9ybV9jb25maWdfYWRkcmVzcyArIHNpemVvZigqdmJ0KSAtIDQsCisJCQkJCXZidC0+c2l6ZSAtIHNpemVvZigqdmJ0KSArIDQpOworCQlwR0NUID0gdmJ0LT5tcnN0X2djdDsKKwkJYnBpID0gKChzdHJ1Y3QgbXJzdF9nY3RfdjEgKilwR0NUKS0+UEQuQm9vdFBhbmVsSW5kZXg7CisJCWRldl9wcml2LT5nY3RfZGF0YS5icGkgPSBicGk7CisJCWRldl9wcml2LT5nY3RfZGF0YS5wdCA9CisJCQkoKHN0cnVjdCBtcnN0X2djdF92MSAqKXBHQ1QpLT5QRC5QYW5lbFR5cGU7CisJCW1lbWNweSgmZGV2X3ByaXYtPmdjdF9kYXRhLkRURCwKKwkJCSYoKHN0cnVjdCBtcnN0X2djdF92MSAqKXBHQ1QpLT5wYW5lbFticGldLkRURCwKKwkJCQlzaXplb2Yoc3RydWN0IG1yc3RfdGltaW5nX2luZm8pKTsKKwkJZGV2X3ByaXYtPmdjdF9kYXRhLlBhbmVsX1BvcnRfQ29udHJvbCA9CisJCSAgKChzdHJ1Y3QgbXJzdF9nY3RfdjEgKilwR0NUKS0+cGFuZWxbYnBpXS5QYW5lbF9Qb3J0X0NvbnRyb2w7CisJCWRldl9wcml2LT5nY3RfZGF0YS5QYW5lbF9NSVBJX0Rpc3BsYXlfRGVzY3JpcHRvciA9CisJCSAgKChzdHJ1Y3QgbXJzdF9nY3RfdjEgKilwR0NUKS0+cGFuZWxbYnBpXS5QYW5lbF9NSVBJX0Rpc3BsYXlfRGVzY3JpcHRvcjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQl2YnQtPm1yc3RfZ2N0ID0gTlVMTDsKKwkJdmJ0LT5tcnN0X2djdCA9IFwKKwkJCWlvcmVtYXAocGxhdGZvcm1fY29uZmlnX2FkZHJlc3MgKyBzaXplb2YoKnZidCkgLSA0LAorCQkJCQl2YnQtPnNpemUgLSBzaXplb2YoKnZidCkgKyA0KTsKKwkJcEdDVCA9IHZidC0+bXJzdF9nY3Q7CisJCWJwaSA9ICgoc3RydWN0IG1yc3RfZ2N0X3YyICopcEdDVCktPlBELkJvb3RQYW5lbEluZGV4OworCQlkZXZfcHJpdi0+Z2N0X2RhdGEuYnBpID0gYnBpOworCQlkZXZfcHJpdi0+Z2N0X2RhdGEucHQgPQorCQkJKChzdHJ1Y3QgbXJzdF9nY3RfdjIgKilwR0NUKS0+UEQuUGFuZWxUeXBlOworCQltZW1jcHkoJmRldl9wcml2LT5nY3RfZGF0YS5EVEQsCisJCQkmKChzdHJ1Y3QgbXJzdF9nY3RfdjIgKilwR0NUKS0+cGFuZWxbYnBpXS5EVEQsCisJCQkJc2l6ZW9mKHN0cnVjdCBtcnN0X3RpbWluZ19pbmZvKSk7CisJCWRldl9wcml2LT5nY3RfZGF0YS5QYW5lbF9Qb3J0X0NvbnRyb2wgPQorCQkgICgoc3RydWN0IG1yc3RfZ2N0X3YyICopcEdDVCktPnBhbmVsW2JwaV0uUGFuZWxfUG9ydF9Db250cm9sOworCQlkZXZfcHJpdi0+Z2N0X2RhdGEuUGFuZWxfTUlQSV9EaXNwbGF5X0Rlc2NyaXB0b3IgPQorCQkgICgoc3RydWN0IG1yc3RfZ2N0X3YyICopcEdDVCktPnBhbmVsW2JwaV0uUGFuZWxfTUlQSV9EaXNwbGF5X0Rlc2NyaXB0b3I7CisJCWJyZWFrOworCWNhc2UgMHgxMDoKKwkJLypoZWFkZXIgZGVmaW5pdGlvbiBjaGFuZ2VkIGZyb20gcmV2IDAxICh2MikgdG8gcmV2IDEwaC4gKi8KKwkJLypzbywgc29tZSB2YWx1ZXMgaGF2ZSBjaGFuZ2VkIGxvY2F0aW9uKi8KKwkJbmV3X3NpemUgPSB2YnQtPmNoZWNrc3VtOyAvKmNoZWNrc3VtIGNvbnRhaW5zIGxvIHNpemUgYnl0ZSovCisJCS8qTFNCIG9mIG1yc3RfZ2N0IGNvbnRhaW5zIGhpIHNpemUgYnl0ZSovCisJCW5ld19zaXplIHw9ICgoMHhmZiAmICh1bnNpZ25lZCBpbnQpdmJ0LT5tcnN0X2djdCkpIDw8IDg7CisKKwkJdmJ0LT5jaGVja3N1bSA9IHZidC0+c2l6ZTsgLypzaXplIGNvbnRhaW5zIHRoZSBjaGVja3N1bSovCisJCWlmIChuZXdfc2l6ZSA+IDB4ZmYpCisJCQl2YnQtPnNpemUgPSAweGZmOyAvKnJlc3RyaWN0IHNpemUgdG8gMjU1Ki8KKwkJZWxzZQorCQkJdmJ0LT5zaXplID0gbmV3X3NpemU7CisKKwkJLyogbnVtYmVyIG9mIGRlc2NyaXB0b3JzIGRlZmluZWQgaW4gdGhlIEdDVCAqLworCQludW1iZXJfZGVzYyA9ICgoMHhmZjAwICYgKHVuc2lnbmVkIGludCl2YnQtPm1yc3RfZ2N0KSkgPj4gODsKKwkJYnBpID0gKCgweGZmMDAwMCAmICh1bnNpZ25lZCBpbnQpdmJ0LT5tcnN0X2djdCkpID4+IDE2OworCQl2YnQtPm1yc3RfZ2N0ID0gTlVMTDsKKwkJdmJ0LT5tcnN0X2djdCA9IFwKKwkJCWlvcmVtYXAocGxhdGZvcm1fY29uZmlnX2FkZHJlc3MgKyBHQ1RfUjEwX0hFQURFUl9TSVpFLAorCQkJCUdDVF9SMTBfRElTUExBWV9ERVNDX1NJWkUgKiBudW1iZXJfZGVzYyk7CisJCXBHQ1QgPSB2YnQtPm1yc3RfZ2N0OworCQlwR0NUID0gKHU4ICopcEdDVCArIChicGkqR0NUX1IxMF9ESVNQTEFZX0RFU0NfU0laRSk7CisJCWRldl9wcml2LT5nY3RfZGF0YS5icGkgPSBicGk7IC8qc2F2ZSBib290IHBhbmVsIGlkKi8KKworCQkvKmNvcHkgdGhlIEdDVCBkaXNwbGF5IHRpbWluZ3MgaW50byBhIHRlbXAgc3RydWN0dXJlKi8KKwkJbWVtY3B5KCZ0aSwgcEdDVCwgc2l6ZW9mKHN0cnVjdCBnY3RfcjEwX3RpbWluZ19pbmZvKSk7CisKKwkJLypub3cgY29weSB0aGUgdGVtcCBzdHJ1Y3QgaW50byB0aGUgZGV2X3ByaXYtPmdjdF9kYXRhKi8KKwkJZHBfdGktPnBpeGVsX2Nsb2NrID0gdGkucGl4ZWxfY2xvY2s7CisJCWRwX3RpLT5oYWN0aXZlX2hpID0gdGkuaGFjdGl2ZV9oaTsKKwkJZHBfdGktPmhhY3RpdmVfbG8gPSB0aS5oYWN0aXZlX2xvOworCQlkcF90aS0+aGJsYW5rX2hpID0gdGkuaGJsYW5rX2hpOworCQlkcF90aS0+aGJsYW5rX2xvID0gdGkuaGJsYW5rX2xvOworCQlkcF90aS0+aHN5bmNfb2Zmc2V0X2hpID0gdGkuaHN5bmNfb2Zmc2V0X2hpOworCQlkcF90aS0+aHN5bmNfb2Zmc2V0X2xvID0gdGkuaHN5bmNfb2Zmc2V0X2xvOworCQlkcF90aS0+aHN5bmNfcHVsc2Vfd2lkdGhfaGkgPSB0aS5oc3luY19wdWxzZV93aWR0aF9oaTsKKwkJZHBfdGktPmhzeW5jX3B1bHNlX3dpZHRoX2xvID0gdGkuaHN5bmNfcHVsc2Vfd2lkdGhfbG87CisJCWRwX3RpLT52YWN0aXZlX2hpID0gdGkudmFjdGl2ZV9oaTsKKwkJZHBfdGktPnZhY3RpdmVfbG8gPSB0aS52YWN0aXZlX2xvOworCQlkcF90aS0+dmJsYW5rX2hpID0gdGkudmJsYW5rX2hpOworCQlkcF90aS0+dmJsYW5rX2xvID0gdGkudmJsYW5rX2xvOworCQlkcF90aS0+dnN5bmNfb2Zmc2V0X2hpID0gdGkudnN5bmNfb2Zmc2V0X2hpOworCQlkcF90aS0+dnN5bmNfb2Zmc2V0X2xvID0gdGkudnN5bmNfb2Zmc2V0X2xvOworCQlkcF90aS0+dnN5bmNfcHVsc2Vfd2lkdGhfaGkgPSB0aS52c3luY19wdWxzZV93aWR0aF9oaTsKKwkJZHBfdGktPnZzeW5jX3B1bHNlX3dpZHRoX2xvID0gdGkudnN5bmNfcHVsc2Vfd2lkdGhfbG87CisKKwkJLyptb3YgdGhlIE1JUElfRGlzcGxheV9EZXNjcmlwdG9yIGRhdGEgZnJvbSBHQ1QgdG8gZGV2IHByaXYqLworCQlkZXZfcHJpdi0+Z2N0X2RhdGEuUGFuZWxfTUlQSV9EaXNwbGF5X0Rlc2NyaXB0b3IgPQorCQkJCQkJCSooKHU4ICopcEdDVCArIDB4MGQpOworCQlkZXZfcHJpdi0+Z2N0X2RhdGEuUGFuZWxfTUlQSV9EaXNwbGF5X0Rlc2NyaXB0b3IgfD0KKwkJCQkJCSgqKCh1OCAqKXBHQ1QgKyAweDBlKSkgPDwgODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmtub3duIHJldmlzaW9uIG9mIEdDVCFcbiIpOworCQl2YnQtPnNpemUgPSAwOworCX0KIH0KIAogc3RhdGljIHZvaWQgcHNiX2dldF9jb3JlX2ZyZXEoc3RydWN0IGRybV9kZXZpY2UgKmRldikKQEAgLTM1OCwzNiArNDAyLDEwIEBACiAJfQogfQogCi0jZGVmaW5lIEZCX1JFRzA2IDB4RDA4MTA2MDAKLSNkZWZpbmUgRkJfVE9QQVpfRElTQUJMRSBCSVQwCi0jZGVmaW5lIEZCX01JUElfRElTQUJMRSAgQklUMTEKLSNkZWZpbmUgRkJfUkVHMDkgMHhEMDgxMDkwMAotI2RlZmluZSBGQl9TS1VfTUFTSyAgKEJJVDEyfEJJVDEzfEJJVDE0KQotI2RlZmluZSBGQl9TS1VfU0hJRlQgMTIKLSNkZWZpbmUgRkJfU0tVXzEwMCAwCi0jZGVmaW5lIEZCX1NLVV8xMDBMIDEKLSNkZWZpbmUgRkJfU0tVXzgzIDIKLQotYm9vbCBtaWRfZ2V0X3BjaV9yZXZJRChzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdikKLXsKLQl1aW50MzJfdCBwbGF0Zm9ybV9yZXZfaWQgPSAwOwotCXN0cnVjdCBwY2lfZGV2ICpwY2lfZ2Z4X3Jvb3QgPSBwY2lfZ2V0X2J1c19hbmRfc2xvdCgwLCBQQ0lfREVWRk4oMiwgMCkpOwotCi0JLypnZXQgdGhlIHJldmlzb24gSUQsIEIwOkQyOkYwOzB4MDggKi8KLQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGNpX2dmeF9yb290LCAweDA4LCAmcGxhdGZvcm1fcmV2X2lkKTsKLQlkZXZfcHJpdi0+cGxhdGZvcm1fcmV2X2lkID0gKHVpbnQ4X3QpIHBsYXRmb3JtX3Jldl9pZDsKLQlwY2lfZGV2X3B1dChwY2lfZ2Z4X3Jvb3QpOwotCVBTQl9ERUJVR19FTlRSWSgicGxhdGZvcm1fcmV2X2lkIGlzICV4XG4iLAotCQkJCQlkZXZfcHJpdi0+cGxhdGZvcm1fcmV2X2lkKTsKLQotCXJldHVybiB0cnVlOwotfQotCiBzdGF0aWMgaW50IHBzYl9kb19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPQogCSAgICAoc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqKSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2ID0gJmRldl9wcml2LT5iZGV2OwogCXN0cnVjdCBwc2JfZ3R0ICpwZyA9IGRldl9wcml2LT5wZzsKIAogCXVpbnQzMl90IHN0b2xlbl9ndHQ7CkBAIC0zOTYsMTYgKzQxNCw2IEBACiAKIAlpbnQgcmV0ID0gLUVOT01FTTsKIAotCi0JLyoKLQkgKiBJbml0aWFsaXplIHNlcXVlbmNlIG51bWJlcnMgZm9yIHRoZSBkaWZmZXJlbnQgY29tbWFuZAotCSAqIHN1Ym1pc3Npb24gbWVjaGFuaXNtcy4KLQkgKi8KLQotCWRldl9wcml2LT5zZXF1ZW5jZVtQU0JfRU5HSU5FXzJEXSA9IDA7Ci0JZGV2X3ByaXYtPnNlcXVlbmNlW1BTQl9FTkdJTkVfVklERU9dID0gMDsKLQlkZXZfcHJpdi0+c2VxdWVuY2VbTE5DX0VOR0lORV9FTkNPREVdID0gMDsKLQogCWlmIChwZy0+bW11X2dhdHRfc3RhcnQgJiAweDBGRkZGRkZGKSB7CiAJCURSTV9FUlJPUigiR2F0dCBtdXN0IGJlIDI1Nk0gYWxpZ25lZC4gVGhpcyBpcyBhIGJ1Zy5cbiIpOwogCQlyZXQgPSAtRUlOVkFMOwpAQCAtNDQ1LDYgKzQ1Myw3IEBACiAJICAgIHBnLT5nYXR0X3BhZ2VzIDogUFNCX1RUX1BSSVYwX1BMSU1JVDsKIAl0dF9zdGFydCA9IGRldl9wcml2LT5nYXR0X2ZyZWVfb2Zmc2V0IC0gcGctPm1tdV9nYXR0X3N0YXJ0OwogCXR0X3BhZ2VzIC09IHR0X3N0YXJ0ID4+IFBBR0VfU0hJRlQ7CisJLyogRklYTUU6IGNhbiB3ZSBraWxsIHRhX21lbV9zaXplID8gKi8KIAlkZXZfcHJpdi0+c2l6ZXMudGFfbWVtX3NpemUgPSAwOwogCiAJUFNCX1dTR1gzMigweDAwMDAwMDAwLCBQU0JfQ1JfQklGX0JBTkswKTsKQEAgLTQ1MywzMCArNDYyLDEwIEBACiAgICAgICAgIFBTQl9XU0dYMzIoUFNCX1JTR1gzMihQU0JfQ1JfQklGX0NUUkwpIHwgX1BTQl9NTVVfRVJfTUFTSywKIAkJCQkJCQlQU0JfQ1JfQklGX0NUUkwpOwogCXBzYl9zcGFuayhkZXZfcHJpdik7Ci0gICAgICAgCi0gICAgICAJUFNCX1dTR1gzMihwZy0+bW11X2dhdHRfc3RhcnQsIFBTQl9DUl9CSUZfVFdPRF9SRVFfQkFTRSk7CiAKLQkvKiBUVCByZWdpb24gbWFuYWdlZCBieSBUVE0uICovCi0JaWYgKCF0dG1fYm9faW5pdF9tbShiZGV2LCBUVE1fUExfVFQsCi0JCQlwZy0+Z2F0dF9wYWdlcyAtCi0JCQkocGctPmNpX3N0YXJ0ID4+IFBBR0VfU0hJRlQpIC0KLQkJCSgoZGV2X3ByaXYtPmNpX3JlZ2lvbl9zaXplICsgZGV2X3ByaXYtPnJhcl9yZWdpb25fc2l6ZSkKLQkJCSA+PiBQQUdFX1NISUZUKSkpIHsKKwkvKiBtbXVfZ2F0dCA/PyAqLworICAgICAgCVBTQl9XU0dYMzIocGctPmdhdHRfc3RhcnQsIFBTQl9DUl9CSUZfVFdPRF9SRVFfQkFTRSk7CiAKLQkJZGV2X3ByaXYtPmhhdmVfdHQgPSAxOwotCQlkZXZfcHJpdi0+c2l6ZXMudHRfc2l6ZSA9Ci0JCQkodHRfcGFnZXMgPDwgUEFHRV9TSElGVCkgLyAoMTAyNCAqIDEwMjQpIC8gMjsKLQl9Ci0KLQlpZiAoIXR0bV9ib19pbml0X21tKGJkZXYsCi0JCQlEUk1fUFNCX01FTV9NTVUsCi0JCQlQU0JfTUVNX1RUX1NUQVJUID4+IFBBR0VfU0hJRlQpKSB7Ci0JCWRldl9wcml2LT5oYXZlX21lbV9tbXUgPSAxOwotCQlkZXZfcHJpdi0+c2l6ZXMubW11X3NpemUgPQotCQkJUFNCX01FTV9UVF9TVEFSVCAvICgxMDI0KjEwMjQpOwotCX0KLQotCVBTQl9ERUJVR19JTklUKCJJbml0IE1TVkRYXG4iKTsKIAlyZXR1cm4gMDsKIG91dF9lcnI6CiAJcHNiX2RvX3Rha2Vkb3duKGRldik7CkBAIC01MTAsMzkgKzQ5OSwxOSBAQAogCiAJCQlkb3duX3JlYWQoJnBnLT5zZW0pOwogCQkJcHNiX21tdV9yZW1vdmVfcGZuX3NlcXVlbmNlKAotCQkJCQlwc2JfbW11X2dldF9kZWZhdWx0X3BkCi0JCQkJCShkZXZfcHJpdi0+bW11KSwKLQkJCQkJcGctPm1tdV9nYXR0X3N0YXJ0LAotCQkJCQlwZy0+dnJhbV9zdG9sZW5fc2l6ZSA+PiBQQUdFX1NISUZUKTsKLQkJCWlmIChwZy0+Y2lfc3RvbGVuX3NpemUgIT0gMCkKLQkJCQlwc2JfbW11X3JlbW92ZV9wZm5fc2VxdWVuY2UoCi0JCQkJCXBzYl9tbXVfZ2V0X2RlZmF1bHRfcGQKLQkJCQkJKGRldl9wcml2LT5tbXUpLAotCQkJCQlwZy0+Y2lfc3RhcnQsCi0JCQkJCXBnLT5jaV9zdG9sZW5fc2l6ZSA+PiBQQUdFX1NISUZUKTsKLQkJCWlmIChwZy0+cmFyX3N0b2xlbl9zaXplICE9IDApCi0JCQkJcHNiX21tdV9yZW1vdmVfcGZuX3NlcXVlbmNlKAotCQkJCQlwc2JfbW11X2dldF9kZWZhdWx0X3BkCi0JCQkJCShkZXZfcHJpdi0+bW11KSwKLQkJCQkJcGctPnJhcl9zdGFydCwKLQkJCQkJcGctPnJhcl9zdG9sZW5fc2l6ZSA+PiBQQUdFX1NISUZUKTsKKwkJCQlwc2JfbW11X2dldF9kZWZhdWx0X3BkCisJCQkJKGRldl9wcml2LT5tbXUpLAorCQkJCXBnLT5tbXVfZ2F0dF9zdGFydCwKKwkJCQlkZXZfcHJpdi0+dnJhbV9zdG9sZW5fc2l6ZSA+PiBQQUdFX1NISUZUKTsKIAkJCXVwX3JlYWQoJnBnLT5zZW0pOwogCQkJcHNiX21tdV9kcml2ZXJfdGFrZWRvd24oZGV2X3ByaXYtPm1tdSk7CiAJCQlkZXZfcHJpdi0+bW11ID0gTlVMTDsKIAkJfQotCQlwc2JfZ3R0X3Rha2Vkb3duKGRldl9wcml2LT5wZywgMSk7CisJCXBzYl9ndHRfdGFrZWRvd24oZGV2KTsKIAkJaWYgKGRldl9wcml2LT5zY3JhdGNoX3BhZ2UpIHsKIAkJCV9fZnJlZV9wYWdlKGRldl9wcml2LT5zY3JhdGNoX3BhZ2UpOwogCQkJZGV2X3ByaXYtPnNjcmF0Y2hfcGFnZSA9IE5VTEw7CiAJCX0KLQkJaWYgKGRldl9wcml2LT5oYXNfYm9fZGV2aWNlKSB7Ci0JCQl0dG1fYm9fZGV2aWNlX3JlbGVhc2UoJmRldl9wcml2LT5iZGV2KTsKLQkJCWRldl9wcml2LT5oYXNfYm9fZGV2aWNlID0gMDsKLQkJfQotCQlpZiAoZGV2X3ByaXYtPmhhc19mZW5jZV9kZXZpY2UpIHsKLQkJCXR0bV9mZW5jZV9kZXZpY2VfcmVsZWFzZSgmZGV2X3ByaXYtPmZkZXYpOwotCQkJZGV2X3ByaXYtPmhhc19mZW5jZV9kZXZpY2UgPSAwOwotCQl9CiAJCWlmIChkZXZfcHJpdi0+dmRjX3JlZykgewogCQkJaW91bm1hcChkZXZfcHJpdi0+dmRjX3JlZyk7CiAJCQlkZXZfcHJpdi0+dmRjX3JlZyA9IE5VTEw7CkBAIC01NTIsMTIgKzUyMSw2IEBACiAJCQlkZXZfcHJpdi0+c2d4X3JlZyA9IE5VTEw7CiAJCX0KIAotCQlpZiAoZGV2X3ByaXYtPnRkZXYpCi0JCQl0dG1fb2JqZWN0X2RldmljZV9yZWxlYXNlKCZkZXZfcHJpdi0+dGRldik7Ci0KLQkJaWYgKGRldl9wcml2LT5oYXNfZ2xvYmFsKQotCQkJcHNiX3R0bV9nbG9iYWxfcmVsZWFzZShkZXZfcHJpdik7Ci0KIAkJa2ZyZWUoZGV2X3ByaXYpOwogCQlkZXYtPmRldl9wcml2YXRlID0gTlVMTDsKIApAQCAtNTY1LDcgKzUyOCw3IEBACiAJCXBzYl9pbnRlbF9kZXN0cm95X2Jpb3MoZGV2KTsKIAl9CiAKLQlvc3BtX3Bvd2VyX3VuaW5pdCgpOworCWdtYV9wb3dlcl91bmluaXQoZGV2KTsKIAogCXJldHVybiAwOwogfQpAQCAtNTc0LDcgKzUzNyw2IEBACiBzdGF0aWMgaW50IHBzYl9kcml2ZXJfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGNoaXBzZXQpCiB7CiAJc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXY7Ci0Jc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXY7CiAJdW5zaWduZWQgbG9uZyByZXNvdXJjZV9zdGFydDsKIAlzdHJ1Y3QgcHNiX2d0dCAqcGc7CiAJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKQEAgLTU4NCwzOSArNTQ2LDE2IEBACiAJZGV2X3ByaXYgPSBremFsbG9jKHNpemVvZigqZGV2X3ByaXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGV2X3ByaXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT52aWRlb19jdHgpOwogCi0JZGV2X3ByaXYtPm51bV9waXBlID0gMjsKLQorCWlmIChJU19NUlNUKGRldikpCisJCWRldl9wcml2LT5udW1fcGlwZSA9IDE7CisJZWxzZQorCQlkZXZfcHJpdi0+bnVtX3BpcGUgPSAyOwogCiAJZGV2X3ByaXYtPmRldiA9IGRldjsKLQliZGV2ID0gJmRldl9wcml2LT5iZGV2OwotCi0JcmV0ID0gcHNiX3R0bV9nbG9iYWxfaW5pdChkZXZfcHJpdik7Ci0JaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKLQkJZ290byBvdXRfZXJyOwotCWRldl9wcml2LT5oYXNfZ2xvYmFsID0gMTsKLQotCWRldl9wcml2LT50ZGV2ID0gdHRtX29iamVjdF9kZXZpY2VfaW5pdAotCQkoZGV2X3ByaXYtPm1lbV9nbG9iYWxfcmVmLm9iamVjdCwgUFNCX09CSkVDVF9IQVNIX09SREVSKTsKLQlpZiAodW5saWtlbHkoZGV2X3ByaXYtPnRkZXYgPT0gTlVMTCkpCi0JCWdvdG8gb3V0X2VycjsKLQotCW11dGV4X2luaXQoJmRldl9wcml2LT50ZW1wX21lbSk7Ci0JbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPmNtZGJ1Zl9tdXRleCk7Ci0JbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPnJlc2V0X211dGV4KTsKLQlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPmNvbnRleHQudmFsaWRhdGVfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT5jb250ZXh0Lmtlcm5fdmFsaWRhdGVfbGlzdCk7Ci0KLS8qCW11dGV4X2luaXQoJmRldl9wcml2LT5kc3JfbXV0ZXgpOyAqLwotCi0Jc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT5yZWxvY19sb2NrKTsKLQotCURSTV9JTklUX1dBSVRRVUVVRSgmZGV2X3ByaXYtPnJlbF9tYXBwZWRfcXVldWUpOwogCiAJZGV2LT5kZXZfcHJpdmF0ZSA9ICh2b2lkICopIGRldl9wcml2OwogCWRldl9wcml2LT5jaGlwc2V0ID0gY2hpcHNldDsKLQlwc2Jfc2V0X3VvcHQoJmRldl9wcml2LT51b3B0KTsKIAogCVBTQl9ERUJVR19JTklUKCJNYXBwaW5nIE1NSU9cbiIpOwogCXJlc291cmNlX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgUFNCX01NSU9fUkVTT1VSQ0UpOwpAQCAtNjI2LDM0ICs1NjUsMjggQEAKIAlpZiAoIWRldl9wcml2LT52ZGNfcmVnKQogCQlnb3RvIG91dF9lcnI7CiAKLQlkZXZfcHJpdi0+c2d4X3JlZyA9IGlvcmVtYXAocmVzb3VyY2Vfc3RhcnQgKyBQU0JfU0dYX09GRlNFVCwKKwlpZiAoSVNfTVJTVChkZXYpKQorCQlkZXZfcHJpdi0+c2d4X3JlZyA9IGlvcmVtYXAocmVzb3VyY2Vfc3RhcnQgKyBNUlNUX1NHWF9PRkZTRVQsCisJCQkJCQkJUFNCX1NHWF9TSVpFKTsKKwllbHNlCisJCWRldl9wcml2LT5zZ3hfcmVnID0gaW9yZW1hcChyZXNvdXJjZV9zdGFydCArIFBTQl9TR1hfT0ZGU0VULAogCQkJCQkJCVBTQl9TR1hfU0laRSk7CiAKIAlpZiAoIWRldl9wcml2LT5zZ3hfcmVnKQogCQlnb3RvIG91dF9lcnI7CiAKLQlwc2JfZ2V0X2NvcmVfZnJlcShkZXYpOwotCXBzYl9pbnRlbF9vcHJlZ2lvbl9pbml0KGRldik7Ci0JcHNiX2ludGVsX2luaXRfYmlvcyhkZXYpOwotCi0JUFNCX0RFQlVHX0lOSVQoIkluaXQgVFRNIGZlbmNlIGFuZCBCTyBkcml2ZXJcbiIpOworCWlmIChJU19NUlNUKGRldikpIHsKKwkJbXJzdF9nZXRfZnVzZV9zZXR0aW5ncyhkZXYpOworCQltcnN0X2dldF92YnRfZGF0YShkZXZfcHJpdik7CisJCW1pZF9nZXRfcGNpX3JldklEKGRldl9wcml2KTsKKwl9IGVsc2UgeworCQlwc2JfZ2V0X2NvcmVfZnJlcShkZXYpOworCQlwc2JfaW50ZWxfb3ByZWdpb25faW5pdChkZXYpOworCQlwc2JfaW50ZWxfaW5pdF9iaW9zKGRldik7CisJfQogCiAJLyogSW5pdCBPU1BNIHN1cHBvcnQgKi8KLQlvc3BtX3Bvd2VyX2luaXQoZGV2KTsKLQotCXJldCA9IHBzYl90dG1fZmVuY2VfZGV2aWNlX2luaXQoJmRldl9wcml2LT5mZGV2KTsKLQlpZiAodW5saWtlbHkocmV0ICE9IDApKQotCQlnb3RvIG91dF9lcnI7Ci0KLQlkZXZfcHJpdi0+aGFzX2ZlbmNlX2RldmljZSA9IDE7Ci0JcmV0ID0gdHRtX2JvX2RldmljZV9pbml0KGJkZXYsCi0JCQkJIGRldl9wcml2LT5ib19nbG9iYWxfcmVmLnJlZi5vYmplY3QsCi0JCQkJICZwc2JfdHRtX2JvX2RyaXZlciwKLQkJCQkgRFJNX1BTQl9GSUxFX1BBR0VfT0ZGU0VULCBmYWxzZSk7Ci0JaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKLQkJZ290byBvdXRfZXJyOwotCWRldl9wcml2LT5oYXNfYm9fZGV2aWNlID0gMTsKLQl0dG1fbG9ja19pbml0KCZkZXZfcHJpdi0+dHRtX2xvY2spOworCWdtYV9wb3dlcl9pbml0KGRldik7CiAKIAlyZXQgPSAtRU5PTUVNOwogCkBAIC02NjMsMTUgKzU5Niw3IEBACiAKIAlzZXRfcGFnZXNfdWMoZGV2X3ByaXYtPnNjcmF0Y2hfcGFnZSwgMSk7CiAKLQlkZXZfcHJpdi0+cGcgPSBwc2JfZ3R0X2FsbG9jKGRldik7Ci0JaWYgKCFkZXZfcHJpdi0+cGcpCi0JCWdvdG8gb3V0X2VycjsKLQotCXJldCA9IHBzYl9ndHRfaW5pdChkZXZfcHJpdi0+cGcsIDApOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X2VycjsKLQotCXJldCA9IHBzYl9ndHRfbW1faW5pdChkZXZfcHJpdi0+cGcpOworCXJldCA9IHBzYl9ndHRfaW5pdChkZXYsIDApOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2VycjsKIApAQCAtNjg2LDQwICs2MTEsNiBAQAogCXR0X3BhZ2VzID0gKHBnLT5nYXR0X3BhZ2VzIDwgUFNCX1RUX1BSSVYwX1BMSU1JVCkgPwogCQkocGctPmdhdHRfcGFnZXMpIDogUFNCX1RUX1BSSVYwX1BMSU1JVDsKIAotCS8qIENJL1JBUiB1c2UgdGhlIGxvd2VyIGhhbGYgb2YgVFQuICovCi0JcGctPmNpX3N0YXJ0ID0gKHR0X3BhZ2VzIC8gMikgPDwgUEFHRV9TSElGVDsKLQlwZy0+cmFyX3N0YXJ0ID0gcGctPmNpX3N0YXJ0ICsgcGctPmNpX3N0b2xlbl9zaXplOwotCi0KLQkvKgotCSAqIE1ha2UgTVNWRFgvVE9QQVogTU1VIGF3YXJlIG9mIHRoZSBDSSBzdG9sZW4gbWVtb3J5IGFyZWEuCi0JICovCi0JaWYgKGRldl9wcml2LT5wZy0+Y2lfc3RvbGVuX3NpemUgIT0gMCkgewotCQlkb3duX3JlYWQoJnBnLT5zZW0pOwotCQlyZXQgPSBwc2JfbW11X2luc2VydF9wZm5fc2VxdWVuY2UocHNiX21tdV9nZXRfZGVmYXVsdF9wZAotCQkJCShkZXZfcHJpdi0+bW11KSwKLQkJCQlkZXZfcHJpdi0+Y2lfcmVnaW9uX3N0YXJ0ID4+IFBBR0VfU0hJRlQsCi0JCQkJcGctPm1tdV9nYXR0X3N0YXJ0ICsgcGctPmNpX3N0YXJ0LAotCQkJCXBnLT5jaV9zdG9sZW5fc2l6ZSA+PiBQQUdFX1NISUZULCAwKTsKLQkJdXBfcmVhZCgmcGctPnNlbSk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIG91dF9lcnI7Ci0JfQotCi0JLyoKLQkgKiBNYWtlIE1TVkRYL1RPUEFaIE1NVSBhd2FyZSBvZiB0aGUgcmFyIHN0b2xlbiBtZW1vcnkgYXJlYS4KLQkgKi8KLQlpZiAoZGV2X3ByaXYtPnBnLT5yYXJfc3RvbGVuX3NpemUgIT0gMCkgewotCQlkb3duX3JlYWQoJnBnLT5zZW0pOwotCQlyZXQgPSBwc2JfbW11X2luc2VydF9wZm5fc2VxdWVuY2UoCi0JCQkJcHNiX21tdV9nZXRfZGVmYXVsdF9wZChkZXZfcHJpdi0+bW11KSwKLQkJCQlkZXZfcHJpdi0+cmFyX3JlZ2lvbl9zdGFydCA+PiBQQUdFX1NISUZULAotCQkJCXBnLT5tbXVfZ2F0dF9zdGFydCArIHBnLT5yYXJfc3RhcnQsCi0JCQkJcGctPnJhcl9zdG9sZW5fc2l6ZSA+PiBQQUdFX1NISUZULCAwKTsKLQkJdXBfcmVhZCgmcGctPnNlbSk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIG91dF9lcnI7Ci0JfQogCiAJZGV2X3ByaXYtPnBmX3BkID0gcHNiX21tdV9hbGxvY19wZChkZXZfcHJpdi0+bW11LCAxLCAwKTsKIAlpZiAoIWRldl9wcml2LT5wZl9wZCkKQEAgLTcyOCwxNCArNjE5LDEzIEBACiAJcHNiX21tdV9zZXRfcGRfY29udGV4dChwc2JfbW11X2dldF9kZWZhdWx0X3BkKGRldl9wcml2LT5tbXUpLCAwKTsKIAlwc2JfbW11X3NldF9wZF9jb250ZXh0KGRldl9wcml2LT5wZl9wZCwgMSk7CiAKLQlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYtPnNlcXVlbmNlX2xvY2spOwotCi0JUFNCX0RFQlVHX0lOSVQoIkJlZ2luIHRvIGluaXQgTVNWRFgvVG9wYXpcbiIpOwotCiAJcmV0ID0gcHNiX2RvX2luaXQoZGV2KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCisJUFNCX1dTR1gzMigweDIwMDAwMDAwLCBQU0JfQ1JfUERTX0VYRUNfQkFTRSk7CisJUFNCX1dTR1gzMigweDMwMDAwMDAwLCBQU0JfQ1JfQklGXzNEX1JFUV9CQVNFKTsKKwogLyoJaWdkX29wcmVnaW9uX2luaXQoJmRldl9wcml2LT5vcHJlZ2lvbl9kZXYpOyAqLwogCWFjcGlfdmlkZW9fcmVnaXN0ZXIoKTsKIAlpZiAoZGV2X3ByaXYtPmxpZF9zdGF0ZSkKQEAgLTc4MywxMSArNjczLDYgQEAKICNlbmRpZgogCS8qSW50ZWwgZHJtIGRyaXZlciBsb2FkIGlzIGRvbmUsIGNvbnRpbnVlIGRvaW5nIHB2ciBsb2FkKi8KIAlEUk1fREVCVUcoIlB2ciBkcml2ZXIgbG9hZFxuIik7Ci0KLS8qCWlmIChQVlJDb3JlX0luaXQoKSA8IDApCi0JCWdvdG8gb3V0X2VycjsgKi8KLS8qCWlmIChNUlNUTEZCSW5pdChkZXYpIDwgMCkKLQkJZ290byBvdXRfZXJyOyovCiAJcmV0dXJuIDA7CiBvdXRfZXJyOgogCXBzYl9kcml2ZXJfdW5sb2FkKGRldik7CkBAIC04MDAsNDUgKzY4NSw2IEBACiB9CiAKIAotc3RhdGljIGludCBwc2JfdnRfbGVhdmVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKLQkJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQotewotCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gcHNiX3ByaXYoZGV2KTsKLQlzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiA9ICZkZXZfcHJpdi0+YmRldjsKLQlzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbjsKLQlpbnQgcmV0OwotCi0JcmV0ID0gdHRtX3Z0X2xvY2soJmRldl9wcml2LT50dG1fbG9jaywgMSwKLQkJCSAgICAgcHNiX2Zwcml2KGZpbGVfcHJpdiktPnRmaWxlKTsKLQlpZiAodW5saWtlbHkocmV0ICE9IDApKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gdHRtX2JvX2V2aWN0X21tKCZkZXZfcHJpdi0+YmRldiwgVFRNX1BMX1RUKTsKLQlpZiAodW5saWtlbHkocmV0ICE9IDApKQotCQlnb3RvIG91dF91bmxvY2s7Ci0KLQltYW4gPSAmYmRldi0+bWFuW1RUTV9QTF9UVF07Ci0KLSNpZiAwCQkvKiBXaGF0IHRvIGRvIHdpdGggdGhpcyA/ICovCi0JaWYgKHVubGlrZWx5KCFkcm1fbW1fY2xlYW4oJm1hbi0+bWFuYWdlcikpKQotCQlEUk1fSU5GTygiV2FybmluZzogR0FUVCB3YXMgbm90IGNsZWFuIGFmdGVyIFZUIHN3aXRjaC5cbiIpOwotI2VuZGlmCi0KLQl0dG1fYm9fc3dhcG91dF9hbGwoJmRldl9wcml2LT5iZGV2KTsKLQotCXJldHVybiAwOwotb3V0X3VubG9jazoKLQkodm9pZCkgdHRtX3Z0X3VubG9jaygmZGV2X3ByaXYtPnR0bV9sb2NrKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHBzYl92dF9lbnRlcl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAotCQkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCi17Ci0Jc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBwc2JfcHJpdihkZXYpOwotCXJldHVybiB0dG1fdnRfdW5sb2NrKCZkZXZfcHJpdi0+dHRtX2xvY2spOwotfQotCiBzdGF0aWMgaW50IHBzYl9zaXplc19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CkBAIC05NDUsMTMgKzc5MSwxMiBAQAogCXVpbnQzMl90IHk7CiAJdWludDMyX3QgcmVnOwogCi0JaWYgKCFvc3BtX3Bvd2VyX3VzaW5nX2h3X2JlZ2luKE9TUE1fRElTUExBWV9JU0xBTkQsCi0JCQkJCQkJT1NQTV9VSEJfT05MWV9JRl9PTikpCi0JCXJldHVybiAwOworCWlmICghZ21hX3Bvd2VyX2JlZ2luKGRldiwgMCkpCisJCXJldHVybiAtRUlPOwogCiAJcmVnID0gUFNCX1JWREMzMihQSVBFQVNSQyk7CiAKLQlvc3BtX3Bvd2VyX3VzaW5nX2h3X2VuZChPU1BNX0RJU1BMQVlfSVNMQU5EKTsKKwlnbWFfcG93ZXJfZW5kKGRldik7CiAKIAkvKiBob3Jpem9udGFsIGlzIHRoZSBsZWZ0IDE2IGJpdHMgKi8KIAl4ID0gcmVnID4+IDE2OwpAQCAtMTAyOCwxMyArODczLDEyIEBACiAJCWRybV9mYiA9IG9ial90b19mYihvYmopOwogCQlwc2JfZmIgPSB0b19wc2JfZmIoZHJtX2ZiKTsKIAotCQlpZiAob3NwbV9wb3dlcl91c2luZ19od19iZWdpbihPU1BNX0RJU1BMQVlfSVNMQU5ELAotCQkJCQkgICAgICBPU1BNX1VIQl9PTkxZX0lGX09OKSkgewotCQkJUkVHX1dSSVRFKERTUEFTVVJGLCBwc2JfZmItPm9mZnNldCk7CisJCWlmIChnbWFfcG93ZXJfYmVnaW4oZGV2LCAwKSkgeworCQkJUkVHX1dSSVRFKERTUEFTVVJGLCBwc2JfZmItPmd0dC0+b2Zmc2V0KTsKIAkJCVJFR19SRUFEKERTUEFTVVJGKTsKLQkJCW9zcG1fcG93ZXJfdXNpbmdfaHdfZW5kKE9TUE1fRElTUExBWV9JU0xBTkQpOworCQkJZ21hX3Bvd2VyX2VuZChkZXYpOwogCQl9IGVsc2UgewotCQkJZGV2X3ByaXYtPnNhdmVEU1BBU1VSRiA9IHBzYl9mYi0+b2Zmc2V0OworCQkJZGV2X3ByaXYtPnNhdmVEU1BBU1VSRiA9IHBzYl9mYi0+Z3R0LT5vZmZzZXQ7CiAJCX0KIAogCQlyZXR1cm4gMDsKQEAgLTExMDcsOCArOTUxLDggQEAKIAlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IHBzYl9wcml2KGRldik7CiAJc3RydWN0IGRybV9wc2Jfc3RvbGVuX21lbW9yeV9hcmcgKmFyZyA9IGRhdGE7CiAKLQlhcmctPmJhc2UgPSBkZXZfcHJpdi0+cGctPnN0b2xlbl9iYXNlOwotCWFyZy0+c2l6ZSA9IGRldl9wcml2LT5wZy0+dnJhbV9zdG9sZW5fc2l6ZTsKKwlhcmctPmJhc2UgPSBkZXZfcHJpdi0+c3RvbGVuX2Jhc2U7CisJYXJnLT5zaXplID0gZGV2X3ByaXYtPnZyYW1fc3RvbGVuX3NpemU7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExMTgsMTEgKzk2MiwxMCBAQAogewogCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gcHNiX3ByaXYoZGV2KTsKIAlzdHJ1Y3QgZHJtX3BzYl9yZWdpc3Rlcl9yd19hcmcgKmFyZyA9IGRhdGE7Ci0JVUhCVXNhZ2UgdXNhZ2UgPQotCSAgYXJnLT5iX2ZvcmNlX2h3X29uID8gT1NQTV9VSEJfRk9SQ0VfUE9XRVJfT04gOiBPU1BNX1VIQl9PTkxZX0lGX09OOworCWJvb2wgdXNhZ2UgPSBhcmctPmJfZm9yY2VfaHdfb24gPyB0cnVlIDogZmFsc2U7CiAKIAlpZiAoYXJnLT5kaXNwbGF5X3dyaXRlX21hc2sgIT0gMCkgewotCQlpZiAob3NwbV9wb3dlcl91c2luZ19od19iZWdpbihPU1BNX0RJU1BMQVlfSVNMQU5ELCB1c2FnZSkpIHsKKwkJaWYgKGdtYV9wb3dlcl9iZWdpbihkZXYsIHVzYWdlKSkgewogCQkJaWYgKGFyZy0+ZGlzcGxheV93cml0ZV9tYXNrICYgUkVHUldCSVRTX1BGSVRfQ09OVFJPTFMpCiAJCQkJUFNCX1dWREMzMihhcmctPmRpc3BsYXkucGZpdF9jb250cm9scywKIAkJCQkJICAgUEZJVF9DT05UUk9MKTsKQEAgLTExNDcsNyArOTkwLDcgQEAKIAkJCWlmIChhcmctPmRpc3BsYXlfd3JpdGVfbWFzayAmIFJFR1JXQklUU19WVE9UQUxfQikKIAkJCQlQU0JfV1ZEQzMyKGFyZy0+ZGlzcGxheS52dG90YWxfYiwKIAkJCQkJICAgVlRPVEFMX0IpOwotCQkJb3NwbV9wb3dlcl91c2luZ19od19lbmQoT1NQTV9ESVNQTEFZX0lTTEFORCk7CisJCQlnbWFfcG93ZXJfZW5kKGRldik7CiAJCX0gZWxzZSB7CiAJCQlpZiAoYXJnLT5kaXNwbGF5X3dyaXRlX21hc2sgJiBSRUdSV0JJVFNfUEZJVF9DT05UUk9MUykKIAkJCQlkZXZfcHJpdi0+c2F2ZVBGSVRfQ09OVFJPTCA9CkBAIC0xMTcyLDcgKzEwMTUsNyBAQAogCX0KIAogCWlmIChhcmctPmRpc3BsYXlfcmVhZF9tYXNrICE9IDApIHsKLQkJaWYgKG9zcG1fcG93ZXJfdXNpbmdfaHdfYmVnaW4oT1NQTV9ESVNQTEFZX0lTTEFORCwgdXNhZ2UpKSB7CisJCWlmIChnbWFfcG93ZXJfYmVnaW4oZGV2LCB1c2FnZSkpIHsKIAkJCWlmIChhcmctPmRpc3BsYXlfcmVhZF9tYXNrICYKIAkJCSAgICBSRUdSV0JJVFNfUEZJVF9DT05UUk9MUykKIAkJCQlhcmctPmRpc3BsYXkucGZpdF9jb250cm9scyA9CkBAIC0xMTkzLDcgKzEwMzYsNyBAQAogCQkJCWFyZy0+ZGlzcGxheS52dG90YWxfYSA9IFBTQl9SVkRDMzIoVlRPVEFMX0EpOwogCQkJaWYgKGFyZy0+ZGlzcGxheV9yZWFkX21hc2sgJiBSRUdSV0JJVFNfVlRPVEFMX0IpCiAJCQkJYXJnLT5kaXNwbGF5LnZ0b3RhbF9iID0gUFNCX1JWREMzMihWVE9UQUxfQik7Ci0JCQlvc3BtX3Bvd2VyX3VzaW5nX2h3X2VuZChPU1BNX0RJU1BMQVlfSVNMQU5EKTsKKwkJCWdtYV9wb3dlcl9lbmQoZGV2KTsKIAkJfSBlbHNlIHsKIAkJCWlmIChhcmctPmRpc3BsYXlfcmVhZF9tYXNrICYKIAkJCSAgICBSRUdSV0JJVFNfUEZJVF9DT05UUk9MUykKQEAgLTEyMTksNyArMTA2Miw3IEBACiAJfQogCiAJaWYgKGFyZy0+b3ZlcmxheV93cml0ZV9tYXNrICE9IDApIHsKLQkJaWYgKG9zcG1fcG93ZXJfdXNpbmdfaHdfYmVnaW4oT1NQTV9ESVNQTEFZX0lTTEFORCwgdXNhZ2UpKSB7CisJCWlmIChnbWFfcG93ZXJfYmVnaW4oZGV2LCB1c2FnZSkpIHsKIAkJCWlmIChhcmctPm92ZXJsYXlfd3JpdGVfbWFzayAmIE9WX1JFR1JXQklUU19PR0FNX0FMTCkgewogCQkJCVBTQl9XVkRDMzIoYXJnLT5vdmVybGF5Lk9HQU1DNSwgT1ZfT0dBTUM1KTsKIAkJCQlQU0JfV1ZEQzMyKGFyZy0+b3ZlcmxheS5PR0FNQzQsIE9WX09HQU1DNCk7CkBAIC0xMjcwLDcgKzExMTMsNyBAQAogCQkJCQl9CiAJCQkJfQogCQkJfQotCQkJb3NwbV9wb3dlcl91c2luZ19od19lbmQoT1NQTV9ESVNQTEFZX0lTTEFORCk7CisJCQlnbWFfcG93ZXJfZW5kKGRldik7CiAJCX0gZWxzZSB7CiAJCQlpZiAoYXJnLT5vdmVybGF5X3dyaXRlX21hc2sgJiBPVl9SRUdSV0JJVFNfT0dBTV9BTEwpIHsKIAkJCQlkZXZfcHJpdi0+c2F2ZU9WX09HQU1DNSA9IGFyZy0+b3ZlcmxheS5PR0FNQzU7CkBAIC0xMjk2LDcgKzExMzksNyBAQAogCX0KIAogCWlmIChhcmctPm92ZXJsYXlfcmVhZF9tYXNrICE9IDApIHsKLQkJaWYgKG9zcG1fcG93ZXJfdXNpbmdfaHdfYmVnaW4oT1NQTV9ESVNQTEFZX0lTTEFORCwgdXNhZ2UpKSB7CisJCWlmIChnbWFfcG93ZXJfYmVnaW4oZGV2LCB1c2FnZSkpIHsKIAkJCWlmIChhcmctPm92ZXJsYXlfcmVhZF9tYXNrICYgT1ZfUkVHUldCSVRTX09HQU1fQUxMKSB7CiAJCQkJYXJnLT5vdmVybGF5Lk9HQU1DNSA9IFBTQl9SVkRDMzIoT1ZfT0dBTUM1KTsKIAkJCQlhcmctPm92ZXJsYXkuT0dBTUM0ID0gUFNCX1JWREMzMihPVl9PR0FNQzQpOwpAQCAtMTMxNyw3ICsxMTYwLDcgQEAKIAkJCQlhcmctPm92ZXJsYXkuT1ZBREQgPSBQU0JfUlZEQzMyKE9WX09WQUREKTsKIAkJCWlmIChhcmctPm92ZXJsYXlfcmVhZF9tYXNrICYgT1ZDX1JFR1JXQklUU19PVkFERCkKIAkJCQlhcmctPm92ZXJsYXkuT1ZBREQgPSBQU0JfUlZEQzMyKE9WQ19PVkFERCk7Ci0JCQlvc3BtX3Bvd2VyX3VzaW5nX2h3X2VuZChPU1BNX0RJU1BMQVlfSVNMQU5EKTsKKwkJCWdtYV9wb3dlcl9lbmQoZGV2KTsKIAkJfSBlbHNlIHsKIAkJCWlmIChhcmctPm92ZXJsYXlfcmVhZF9tYXNrICYgT1ZfUkVHUldCSVRTX09HQU1fQUxMKSB7CiAJCQkJYXJnLT5vdmVybGF5Lk9HQU1DNSA9IGRldl9wcml2LT5zYXZlT1ZfT0dBTUM1OwpAQCAtMTM0Myw3ICsxMTg2LDcgQEAKIAl9CiAKIAlpZiAoYXJnLT5zcHJpdGVfZW5hYmxlX21hc2sgIT0gMCkgewotCQlpZiAob3NwbV9wb3dlcl91c2luZ19od19iZWdpbihPU1BNX0RJU1BMQVlfSVNMQU5ELCB1c2FnZSkpIHsKKwkJaWYgKGdtYV9wb3dlcl9iZWdpbihkZXYsIHVzYWdlKSkgewogCQkJUFNCX1dWREMzMigweDFGM0UsIERTUEFSQik7CiAJCQlQU0JfV1ZEQzMyKGFyZy0+c3ByaXRlLmRzcGFfY29udHJvbAogCQkJCQl8IFBTQl9SVkRDMzIoRFNQQUNOVFIpLCBEU1BBQ05UUik7CkBAIC0xMzU4LDIyICsxMjAxLDIyIEBACiAJCQlQU0JfV1ZEQzMyKGFyZy0+c3ByaXRlLmRzcGNfc2l6ZSwgRFNQQ1NJWkUpOwogCQkJUFNCX1dWREMzMihhcmctPnNwcml0ZS5kc3BjX3N1cmZhY2UsIERTUENTVVJGKTsKIAkJCVBTQl9SVkRDMzIoRFNQQ1NVUkYpOwotCQkJb3NwbV9wb3dlcl91c2luZ19od19lbmQoT1NQTV9ESVNQTEFZX0lTTEFORCk7CisJCQlnbWFfcG93ZXJfZW5kKGRldik7CiAJCX0KIAl9CiAKIAlpZiAoYXJnLT5zcHJpdGVfZGlzYWJsZV9tYXNrICE9IDApIHsKLQkJaWYgKG9zcG1fcG93ZXJfdXNpbmdfaHdfYmVnaW4oT1NQTV9ESVNQTEFZX0lTTEFORCwgdXNhZ2UpKSB7CisJCWlmIChnbWFfcG93ZXJfYmVnaW4oZGV2LCB1c2FnZSkpIHsKIAkJCVBTQl9XVkRDMzIoMHgzRjNFLCBEU1BBUkIpOwogCQkJUFNCX1dWREMzMigweDAsIERTUENDTlRSKTsKIAkJCVBTQl9XVkRDMzIoYXJnLT5zcHJpdGUuZHNwY19zdXJmYWNlLCBEU1BDU1VSRik7CiAJCQlQU0JfUlZEQzMyKERTUENTVVJGKTsKLQkJCW9zcG1fcG93ZXJfdXNpbmdfaHdfZW5kKE9TUE1fRElTUExBWV9JU0xBTkQpOworCQkJZ21hX3Bvd2VyX2VuZChkZXYpOwogCQl9CiAJfQogCiAJaWYgKGFyZy0+c3VicGljdHVyZV9lbmFibGVfbWFzayAhPSAwKSB7Ci0JCWlmIChvc3BtX3Bvd2VyX3VzaW5nX2h3X2JlZ2luKE9TUE1fRElTUExBWV9JU0xBTkQsIHVzYWdlKSkgeworCQlpZiAoZ21hX3Bvd2VyX2JlZ2luKGRldiwgdXNhZ2UpKSB7CiAJCQl1aW50MzJfdCB0ZW1wOwogCQkJaWYgKGFyZy0+c3VicGljdHVyZV9lbmFibGVfbWFzayAmIFJFR1JXQklUU19EU1BBQ05UUikgewogCQkJCXRlbXAgPSAgUFNCX1JWREMzMihEU1BBQ05UUik7CkBAIC0xNDE3LDEyICsxMjYwLDEyIEBACiAJCQkJUFNCX1dWREMzMih0ZW1wLCBEU1BDU1VSRik7CiAJCQkJUFNCX1JWREMzMihEU1BDU1VSRik7CiAJCQl9Ci0JCQlvc3BtX3Bvd2VyX3VzaW5nX2h3X2VuZChPU1BNX0RJU1BMQVlfSVNMQU5EKTsKKwkJCWdtYV9wb3dlcl9lbmQoZGV2KTsKIAkJfQogCX0KIAogCWlmIChhcmctPnN1YnBpY3R1cmVfZGlzYWJsZV9tYXNrICE9IDApIHsKLQkJaWYgKG9zcG1fcG93ZXJfdXNpbmdfaHdfYmVnaW4oT1NQTV9ESVNQTEFZX0lTTEFORCwgdXNhZ2UpKSB7CisJCWlmIChnbWFfcG93ZXJfYmVnaW4oZGV2LCB1c2FnZSkpIHsKIAkJCXVpbnQzMl90IHRlbXA7CiAJCQlpZiAoYXJnLT5zdWJwaWN0dXJlX2Rpc2FibGVfbWFzayAmIFJFR1JXQklUU19EU1BBQ05UUikgewogCQkJCXRlbXAgPSAgUFNCX1JWREMzMihEU1BBQ05UUik7CkBAIC0xNDYzLDQyICsxMzA2LDIwIEBACiAJCQkJUFNCX1dWREMzMih0ZW1wLCBEU1BDU1VSRik7CiAJCQkJUFNCX1JWREMzMihEU1BDU1VSRik7CiAJCQl9Ci0JCQlvc3BtX3Bvd2VyX3VzaW5nX2h3X2VuZChPU1BNX0RJU1BMQVlfSVNMQU5EKTsKKwkJCWdtYV9wb3dlcl9lbmQoZGV2KTsKIAkJfQogCX0KIAogCXJldHVybiAwOwogfQogCi0vKiBhbHdheXMgYXZhaWxhYmxlIGFzIHdlIGFyZSBTSUdJTydkICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHBzYl9wb2xsKHN0cnVjdCBmaWxlICpmaWxwLAotCQkJICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCi17Ci0JcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07Ci19Ci0KLS8qIE5vdCBzdXJlIHdoYXQgd2Ugd2lsbCBuZWVkIHlldCAtIGluIHRoZSBQVlIgZHJpdmVyIHRoaXMgZGlzYXBwZWFycyBpbnRvCi0gICBhIHRhbmdsZSBvZiBhYnN0cmFjdGVkIGhhbmRsZXJzIGFuZCBwZXIgcHJvY2VzcyBjcmFwICovCi0KLXN0cnVjdCBwc2JfcHJpdiB7Ci0JaW50IGR1bW15OwotfTsKLQogc3RhdGljIGludCBwc2JfZHJpdmVyX29wZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpwcml2KQogewotCXN0cnVjdCBwc2JfcHJpdiAqcHNiID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBzYl9wcml2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHBzYiA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQlwcml2LT5kcml2ZXJfcHJpdiA9IHBzYjsKLQlEUk1fREVCVUcoIlxuIik7Ci0JLypyZXR1cm4gUFZSU1JWT3BlbihkZXYsIHByaXYpOyovCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHBzYl9kcml2ZXJfY2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpwcml2KQogewotCWtmcmVlKHByaXYtPmRyaXZlcl9wcml2KTsKLQlwcml2LT5kcml2ZXJfcHJpdiA9IE5VTEw7CiB9CiAKIHN0YXRpYyBsb25nIHBzYl91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKQEAgLTE1MTcsMzAgKzEzMzgsOSBAQAogCQlwbV9ydW50aW1lX2FsbG93KCZkZXYtPnBkZXYtPmRldik7CiAJCWRldl9wcml2LT5ycG1fZW5hYmxlZCA9IDE7CiAJfQotCS8qCi0JICogVGhlIGRyaXZlciBwcml2YXRlIGlvY3RscyBhbmQgVFRNIGlvY3RscyBzaG91bGQgYmUKLQkgKiB0aHJlYWQtc2FmZS4KLQkgKi8KLQotCWlmICgobnIgPj0gRFJNX0NPTU1BTkRfQkFTRSkgJiYgKG5yIDwgRFJNX0NPTU1BTkRfRU5EKQotCSAgICAgJiYgKG5yIDwgRFJNX0NPTU1BTkRfQkFTRSArIGRldi0+ZHJpdmVyLT5udW1faW9jdGxzKSkgewotCQlzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2MgKmlvY3RsID0KLQkJCQkJJnBzYl9pb2N0bHNbbnIgLSBEUk1fQ09NTUFORF9CQVNFXTsKLQotCQlpZiAodW5saWtlbHkoaW9jdGwtPmNtZCAhPSBjbWQpKSB7Ci0JCQlEUk1fRVJST1IoCi0JCQkJIkludmFsaWQgZHJtIGNtbmQgJWQgaW9jdGwtPmNtZCAleCwgY21kICV4XG4iLAotCQkJCW5yIC0gRFJNX0NPTU1BTkRfQkFTRSwgaW9jdGwtPmNtZCwgY21kKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJcmV0dXJuIGRybV9pb2N0bChmaWxwLCBjbWQsIGFyZyk7Ci0JfQotCS8qCi0JICogTm90IGFsbCBvbGQgZHJtIGlvY3RscyBhcmUgdGhyZWFkLXNhZmUuCi0JICovCi0KIAlyZXR1cm4gZHJtX2lvY3RsKGZpbHAsIGNtZCwgYXJnKTsKKwkKKwkvKiBGSVhNRTogZG8gd2UgbmVlZCB0byB3cmFwIHRoZSBvdGhlciBzaWRlIG9mIHRoaXMgKi8KIH0KIAogCkBAIC0xNTU3LDE2ICsxMzU3LDIxIEBACiAJZHJtX3B1dF9kZXYoZGV2KTsKIH0KIAotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgcHNiX3BtX29wcyA9IHsKIAkucnVudGltZV9zdXNwZW5kID0gcHNiX3J1bnRpbWVfc3VzcGVuZCwKIAkucnVudGltZV9yZXN1bWUgPSBwc2JfcnVudGltZV9yZXN1bWUsCiAJLnJ1bnRpbWVfaWRsZSA9IHBzYl9ydW50aW1lX2lkbGUsCiB9OwogCitzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHBzYl9nZW1fdm1fb3BzID0geworCS5mYXVsdCA9IHBzYl9nZW1fZmF1bHQsCisJLm9wZW4gPSBkcm1fZ2VtX3ZtX29wZW4sCisJLmNsb3NlID0gZHJtX2dlbV92bV9jbG9zZSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBkcml2ZXIgPSB7CiAJLmRyaXZlcl9mZWF0dXJlcyA9IERSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9JUlFfU0hBUkVEIHwgXAotCQkJICAgRFJJVkVSX0lSUV9WQkwgfCBEUklWRVJfTU9ERVNFVCwKKwkJCSAgIERSSVZFUl9JUlFfVkJMIHwgRFJJVkVSX01PREVTRVR8IERSSVZFUl9HRU0gLAogCS5sb2FkID0gcHNiX2RyaXZlcl9sb2FkLAogCS51bmxvYWQgPSBwc2JfZHJpdmVyX3VubG9hZCwKIApAQCAtMTU4MCwyNyArMTM4NSwyOSBAQAogCS5lbmFibGVfdmJsYW5rID0gcHNiX2VuYWJsZV92YmxhbmssCiAJLmRpc2FibGVfdmJsYW5rID0gcHNiX2Rpc2FibGVfdmJsYW5rLAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSBwc2JfZ2V0X3ZibGFua19jb3VudGVyLAotCS5maXJzdG9wZW4gPSBOVUxMLAogCS5sYXN0Y2xvc2UgPSBwc2JfbGFzdGNsb3NlLAogCS5vcGVuID0gcHNiX2RyaXZlcl9vcGVuLAotCS5wb3N0Y2xvc2UgPSBwc2JfZHJpdmVyX2Nsb3NlLAotI2lmIDAJLyogQUNGSVhNRSAqLwotCS5nZXRfbWFwX29mcyA9IGRybV9jb3JlX2dldF9tYXBfb2ZzLAotCS5nZXRfcmVnX29mcyA9IGRybV9jb3JlX2dldF9yZWdfb2ZzLAotCS5wcm9jX2luaXQgPSBwc2JfcHJvY19pbml0LAotCS5wcm9jX2NsZWFudXAgPSBwc2JfcHJvY19jbGVhbnVwLAotI2VuZGlmCiAJLnByZWNsb3NlID0gcHNiX2RyaXZlcl9wcmVjbG9zZSwKKwkucG9zdGNsb3NlID0gcHNiX2RyaXZlcl9jbG9zZSwKKwkucmVjbGFpbV9idWZmZXJzID0gZHJtX2NvcmVfcmVjbGFpbV9idWZmZXJzLAorCisJLmdlbV9pbml0X29iamVjdCA9IHBzYl9nZW1faW5pdF9vYmplY3QsCisJLmdlbV9mcmVlX29iamVjdCA9IHBzYl9nZW1fZnJlZV9vYmplY3QsCisJLmdlbV92bV9vcHMgPSAmcHNiX2dlbV92bV9vcHMsCisJLmR1bWJfY3JlYXRlID0gcHNiX2dlbV9kdW1iX2NyZWF0ZSwKKwkuZHVtYl9tYXBfb2Zmc2V0ID0gcHNiX2dlbV9kdW1iX21hcF9ndHQsCisJLmR1bWJfZGVzdHJveSA9IHBzYl9nZW1fZHVtYl9kZXN0cm95LAorCiAJLmZvcHMgPSB7CiAJCSAub3duZXIgPSBUSElTX01PRFVMRSwKLQkJIC5vcGVuID0gcHNiX29wZW4sCi0JCSAucmVsZWFzZSA9IHBzYl9yZWxlYXNlLAorCQkgLm9wZW4gPSBkcm1fb3BlbiwKKwkJIC5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCiAJCSAudW5sb2NrZWRfaW9jdGwgPSBwc2JfdW5sb2NrZWRfaW9jdGwsCi0JCSAubW1hcCA9IHBzYl9tbWFwLAotCQkgLnBvbGwgPSBwc2JfcG9sbCwKKwkJIC5tbWFwID0gZHJtX2dlbV9tbWFwLAorCQkgLnBvbGwgPSBkcm1fcG9sbCwKIAkJIC5mYXN5bmMgPSBkcm1fZmFzeW5jLAogCQkgLnJlYWQgPSBkcm1fcmVhZCwKLQkJIH0sCisJIH0sCiAJLm5hbWUgPSBEUklWRVJfTkFNRSwKIAkuZGVzYyA9IERSSVZFUl9ERVNDLAogCS5kYXRlID0gUFNCX0RSTV9EUklWRVJfREFURSwKQEAgLTE2MTIsOCArMTQxOSw4IEBACiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcHNiX3BjaV9kcml2ZXIgPSB7CiAJLm5hbWUgPSBEUklWRVJfTkFNRSwKIAkuaWRfdGFibGUgPSBwY2lpZGxpc3QsCi0JLnJlc3VtZSA9IG9zcG1fcG93ZXJfcmVzdW1lLAotCS5zdXNwZW5kID0gb3NwbV9wb3dlcl9zdXNwZW5kLAorCS5yZXN1bWUgPSBnbWFfcG93ZXJfcmVzdW1lLAorCS5zdXNwZW5kID0gZ21hX3Bvd2VyX3N1c3BlbmQsCiAJLnByb2JlID0gcHNiX3Byb2JlLAogCS5yZW1vdmUgPSBwc2JfcmVtb3ZlLAogI2lmZGVmIENPTkZJR19QTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfZHJ2LmggYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9kcnYuaAppbmRleCAyOWEzNjA1Li5lMTlhNDU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9kcnYuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9kcnYuaApAQCAtMjEsNiArMjEsNyBAQAogI2RlZmluZSBfUFNCX0RSVl9IXwogCiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KIAogI2luY2x1ZGUgPGRybS9kcm1QLmg+CiAjaW5jbHVkZSAiZHJtX2dsb2JhbC5oIgpAQCAtMjksMjIgKzMwLDE5IEBACiAjaW5jbHVkZSAicHNiX2ludGVsX2Rydi5oIgogI2luY2x1ZGUgInBzYl9ndHQuaCIKICNpbmNsdWRlICJwc2JfcG93ZXJtZ210LmgiCi0jaW5jbHVkZSAidHRtL3R0bV9vYmplY3QuaCIKLSNpbmNsdWRlICJwc2JfdHRtX2ZlbmNlX2RyaXZlci5oIgotI2luY2x1ZGUgInBzYl90dG1fdXNlcm9ial9hcGkuaCIKLSNpbmNsdWRlICJ0dG0vdHRtX2JvX2RyaXZlci5oIgotI2luY2x1ZGUgInR0bS90dG1fbG9jay5oIgorI2luY2x1ZGUgIm1yc3QuaCIKIAogLypBcHBlbmQgbmV3IGRybSBtb2RlIGRlZmluaXRpb24gaGVyZSwgYWxpZ24gd2l0aCBsaWJkcm0gZGVmaW5pdGlvbiovCiAjZGVmaW5lIERSTV9NT0RFX1NDQUxFX05PX1NDQUxFICAgMgogCi1leHRlcm4gc3RydWN0IHR0bV9ib19kcml2ZXIgcHNiX3R0bV9ib19kcml2ZXI7Ci0KIGVudW0gewogCUNISVBfUFNCXzgxMDggPSAwLAogCUNISVBfUFNCXzgxMDkgPSAxLAorCUNISVBfTVJTVF80MTAwID0gMiwKIH07CiAKKyNkZWZpbmUgSVNfTVJTVChkZXYpICgoKGRldiktPnBjaV9kZXZpY2UgJiAweGZmZmMpID09IDB4NDEwMCkKKwogLyoKICAqSGFyZHdhcmUgYnVnZml4ZXMKICAqLwpAQCAtNTIsMTAgKzUwLDYgQEAKICNkZWZpbmUgRFJJVkVSX05BTUUgInB2cnNydmttIgogI2RlZmluZSBEUklWRVJfREVTQyAiZHJtIGRyaXZlciBmb3IgdGhlIEludGVsIEdNQTUwMCIKICNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiSW50ZWwgQ29ycG9yYXRpb24iCi0jZGVmaW5lIE9TUE1fUFJPQ19FTlRSWSAib3NwbSIKLSNkZWZpbmUgUlRQTV9QUk9DX0VOVFJZICJydHBtIgotI2RlZmluZSBCTENfUFJPQ19FTlRSWSAibXJzdF9ibGMiCi0jZGVmaW5lIERJU1BMQVlfUFJPQ19FTlRSWSAiZGlzcGxheV9zdGF0dXMiCiAKICNkZWZpbmUgUFNCX0RSTV9EUklWRVJfREFURSAiMjAwOS0wMy0xMCIKICNkZWZpbmUgUFNCX0RSTV9EUklWRVJfTUFKT1IgOApAQCAtOTIsMjYgKzg2LDEwIEBACiAjZGVmaW5lIFBTQl9UVF9QUklWMF9QTElNSVQJIChQU0JfVFRfUFJJVjBfTElNSVQgPj4gUEFHRV9TSElGVCkKICNkZWZpbmUgUFNCX05VTV9WQUxJREFURV9CVUZGRVJTIDIwNDgKIAotI2RlZmluZSBQU0JfTUVNX01NVV9TVEFSVCAgICAgICAweDAwMDAwMDAwCi0jZGVmaW5lIFBTQl9NRU1fVFRfU1RBUlQgICAgICAgIDB4RTAwMDAwMDAKLQotI2RlZmluZSBQU0JfR0wzX0NBQ0hFX0NUTAkweDIxMDAKLSNkZWZpbmUgUFNCX0dMM19DQUNIRV9TVEFUCTB4MjEwOAotCiAvKgogICpGbGFncyBmb3IgZXh0ZXJuYWwgbWVtb3J5IHR5cGUgZmllbGQuCiAgKi8KIAotI2RlZmluZSBNUlNUX01TVkRYX09GRlNFVAkweDkwMDAwCS8qTVNWRFggQmFzZSBvZmZzZXQgKi8KLSNkZWZpbmUgUFNCX01TVkRYX09GRlNFVAkweDUwMDAwCS8qTVNWRFggQmFzZSBvZmZzZXQgKi8KLS8qIE1TVkRYIE1NSU8gcmVnaW9uIGlzIDB4NTAwMDAgLSAweDU3ZmZmID09PiAzMktCICovCi0jZGVmaW5lIFBTQl9NU1ZEWF9TSVpFCQkweDEwMDAwCi0KLSNkZWZpbmUgTE5DX1RPUEFaX09GRlNFVAkweEEwMDAwCi0jZGVmaW5lIFBOV19UT1BBWl9PRkZTRVQJMHhDMDAwMAotI2RlZmluZSBQTldfR0wzX09GRlNFVAkJMHhCMDAwMAotI2RlZmluZSBMTkNfVE9QQVpfU0laRQkJMHgxMDAwMAotI2RlZmluZSBQTldfVE9QQVpfU0laRQkJMHgzMDAwMCAvKiBQTlcgVlhFMjg1IGhhcyB0d28gY29yZXMgKi8KICNkZWZpbmUgUFNCX01NVV9DQUNIRURfTUVNT1JZCSAgMHgwMDAxCS8qIEJpbmQgdG8gTU1VIG9ubHkgKi8KICNkZWZpbmUgUFNCX01NVV9ST19NRU1PUlkJICAweDAwMDIJLyogTU1VIFJPIG1lbW9yeSAqLwogI2RlZmluZSBQU0JfTU1VX1dPX01FTU9SWQkgIDB4MDAwNAkvKiBNTVUgV08gbWVtb3J5ICovCkBAIC0yMjMsMjAgKzIwMSw2IEBACiAjZGVmaW5lIE1ERkxEX1BOV19CMCAweDA0CiAjZGVmaW5lIE1ERkxEX1BOV19DMCAweDA4CiAKLSNkZWZpbmUgTURGTERfRFNSXzJEXzNEXzAgQklUMAotI2RlZmluZSBNREZMRF9EU1JfMkRfM0RfMiBCSVQxCi0jZGVmaW5lIE1ERkxEX0RTUl9DVVJTT1JfMCBCSVQyCi0jZGVmaW5lIE1ERkxEX0RTUl9DVVJTT1JfMiBCSVQzCi0jZGVmaW5lIE1ERkxEX0RTUl9PVkVSTEFZXzAgQklUNAotI2RlZmluZSBNREZMRF9EU1JfT1ZFUkxBWV8yIEJJVDUKLSNkZWZpbmUgTURGTERfRFNSX01JUElfQ09OVFJPTAlCSVQ2Ci0jZGVmaW5lIE1ERkxEX0RTUl8yRF8zRCAJKE1ERkxEX0RTUl8yRF8zRF8wIHwgTURGTERfRFNSXzJEXzNEXzIpCi0KLSNkZWZpbmUgTURGTERfRFNSX1JSIDQ1Ci0jZGVmaW5lIE1ERkxEX0RQVV9FTkFCTEUgQklUMzEKLSNkZWZpbmUgTURGTERfRFNSX0ZVTExTQ1JFRU4gQklUMzAKLSNkZWZpbmUgTURGTERfRFNSX0RFTEFZIChEUk1fSFogLyBNREZMRF9EU1JfUlIpCi0KICNkZWZpbmUgUFNCX1BXUl9TVEFURV9PTgkJMQogI2RlZmluZSBQU0JfUFdSX1NUQVRFX09GRgkJMgogCkBAIC0yNTAsOSArMjE0LDYgQEAKICNkZWZpbmUgUFNCX1BDSXhfTVNJX0FERFJfTE9DCQkweDk0CiAjZGVmaW5lIFBTQl9QQ0l4X01TSV9EQVRBX0xPQwkJMHg5OAogCi0jZGVmaW5lIE1ERkxEX1BMQU5FX01BWF9XSURUSAkJMjA0OAotI2RlZmluZSBNREZMRF9QTEFORV9NQVhfSEVJR0hUCQkyMDQ4Ci0KIHN0cnVjdCBvcHJlZ2lvbl9oZWFkZXI7CiBzdHJ1Y3Qgb3ByZWdpb25fYWNwaTsKIHN0cnVjdCBvcHJlZ2lvbl9zd3NjaTsKQEAgLTI2NiwxNDIgKzIyNyw1NSBAQAogCWludCBlbmFibGVkOwogfTsKIAotLyoKLSAqVXNlciBvcHRpb25zLgotICovCi0KLXN0cnVjdCBkcm1fcHNiX3VvcHQgewotCWludCBwYWQ7IC8qa2VlcCBpdCBoZXJlIGluIGNhc2Ugd2UgdXNlIGl0IGluIGZ1dHVyZSovCi19OwotCi0vKioKLSAqc3RydWN0IHBzYl9jb250ZXh0Ci0gKgotICpAYnVmZmVyczoJIGFycmF5IG9mIHByZS1hbGxvY2F0ZWQgdmFsaWRhdGUgYnVmZmVycy4KLSAqQHVzZWRfYnVmZmVyczogbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gQGJ1ZmZlcnMgYXJyYXkgY3VycmVudGx5IGluIHVzZS4KLSAqQHZhbGlkYXRlX2J1ZmZlcjogYnVmZmVycyB2YWxpZGF0ZWQgZnJvbSB1c2VyLXNwYWNlLgotICpAa2Vybl92YWxpZGF0ZV9idWZmZXJzIDogYnVmZmVycyB2YWxpZGF0ZWQgZnJvbSBrZXJuZWwtc3BhY2UuCi0gKkBmZW5jZV9mbGFncyA6IEZlbmNlIGZsYWdzIHRvIGJlIHVzZWQgZm9yIGZlbmNlIGNyZWF0aW9uLgotICoKLSAqVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBkdXJpbmcgZXhlY2J1ZiB2YWxpZGF0aW9uLgotICovCi0KLXN0cnVjdCBwc2JfY29udGV4dCB7Ci0Jc3RydWN0IHBzYl92YWxpZGF0ZV9idWZmZXIgKmJ1ZmZlcnM7Ci0JdWludDMyX3QgdXNlZF9idWZmZXJzOwotCXN0cnVjdCBsaXN0X2hlYWQgdmFsaWRhdGVfbGlzdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGtlcm5fdmFsaWRhdGVfbGlzdDsKLQl1aW50MzJfdCBmZW5jZV90eXBlczsKLQl1aW50MzJfdCB2YWxfc2VxOwotfTsKLQotc3RydWN0IHBzYl92YWxpZGF0ZV9idWZmZXI7Ci0KLS8qIEN1cnJlbnRseSBkZWZpbmVkIHByb2ZpbGVzICovCi1lbnVtIFZBUHJvZmlsZSB7Ci0JVkFQcm9maWxlTVBFRzJTaW1wbGUJCT0gMCwKLQlWQVByb2ZpbGVNUEVHMk1haW4JCT0gMSwKLQlWQVByb2ZpbGVNUEVHNFNpbXBsZQkJPSAyLAotCVZBUHJvZmlsZU1QRUc0QWR2YW5jZWRTaW1wbGUJPSAzLAotCVZBUHJvZmlsZU1QRUc0TWFpbgkJPSA0LAotCVZBUHJvZmlsZUgyNjRCYXNlbGluZQkJPSA1LAotCVZBUHJvZmlsZUgyNjRNYWluCQk9IDYsCi0JVkFQcm9maWxlSDI2NEhpZ2gJCT0gNywKLQlWQVByb2ZpbGVWQzFTaW1wbGUJCT0gOCwKLQlWQVByb2ZpbGVWQzFNYWluCQk9IDksCi0JVkFQcm9maWxlVkMxQWR2YW5jZWQJCT0gMTAsCi0JVkFQcm9maWxlSDI2M0Jhc2VsaW5lCQk9IDExLAotCVZBUHJvZmlsZUpQRUdCYXNlbGluZSAgICAgICAgICAgPSAxMiwKLQlWQVByb2ZpbGVIMjY0Q29uc3RyYWluZWRCYXNlbGluZSA9IDEzCi19OwotCi0vKiBDdXJyZW50bHkgZGVmaW5lZCBlbnRyeXBvaW50cyAqLwotZW51bSBWQUVudHJ5cG9pbnQgewotCVZBRW50cnlwb2ludFZMRAkJPSAxLAotCVZBRW50cnlwb2ludElaWgkJPSAyLAotCVZBRW50cnlwb2ludElEQ1QJPSAzLAotCVZBRW50cnlwb2ludE1vQ29tcAk9IDQsCi0JVkFFbnRyeXBvaW50RGVibG9ja2luZwk9IDUsCi0JVkFFbnRyeXBvaW50RW5jU2xpY2UJPSA2LAkvKiBzbGljZSBsZXZlbCBlbmNvZGUgKi8KLQlWQUVudHJ5cG9pbnRFbmNQaWN0dXJlIAk9IDcJLyogcGljdHVlciBlbmNvZGUsIEpQRUcsIGV0YyAqLwotfTsKLQotCi1zdHJ1Y3QgcHNiX3ZpZGVvX2N0eCB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBoZWFkOwotCXN0cnVjdCBmaWxlICpmaWxwOyAvKiBEUk0gZGV2aWNlIGZpbGUgcG9pbnRlciAqLwotCWludCBjdHhfdHlwZTsgLyogcHJvZmlsZTw8OHxlbnRyeXBvaW50ICovCi0JLyogdG9kbzogbW9yZSBjb250ZXh0IHNwZWNpZmljIGRhdGEgZm9yIG11bHRpLWNvbnRleHQgc3VwcG9ydCAqLwotfTsKLQotI2RlZmluZSBNT0RFX1NFVFRJTkdfSU5fQ1JUQyAJMHgxCi0jZGVmaW5lIE1PREVfU0VUVElOR19JTl9FTkNPREVSIDB4MgotI2RlZmluZSBNT0RFX1NFVFRJTkdfT05fR09JTkcgCTB4MwotI2RlZmluZSBNT0RFX1NFVFRJTkdfSU5fRFNSIAkweDQKLSNkZWZpbmUgTU9ERV9TRVRUSU5HX0VOQ09ERVJfRE9ORSAweDgKLSNkZWZpbmUgR0NUX1IxMF9IRUFERVJfU0laRQkxNgotI2RlZmluZSBHQ1RfUjEwX0RJU1BMQVlfREVTQ19TSVpFCTI4CiAKIHN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgewotCS8qCi0JICogRFNJIGluZm8uCi0JICovCi0Jdm9pZCAqIGRiaV9kc3JfaW5mbzsKLQl2b2lkICogZHNpX2NvbmZpZ3NbMl07Ci0KLQkvKgotCSAqVFRNIEdsdWUuCi0JICovCi0KLQlzdHJ1Y3QgZHJtX2dsb2JhbF9yZWZlcmVuY2UgbWVtX2dsb2JhbF9yZWY7Ci0Jc3RydWN0IHR0bV9ib19nbG9iYWxfcmVmIGJvX2dsb2JhbF9yZWY7Ci0JaW50IGhhc19nbG9iYWw7Ci0KIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OwotCXN0cnVjdCB0dG1fb2JqZWN0X2RldmljZSAqdGRldjsKLQlzdHJ1Y3QgdHRtX2ZlbmNlX2RldmljZSBmZGV2OwotCXN0cnVjdCB0dG1fYm9fZGV2aWNlIGJkZXY7Ci0Jc3RydWN0IHR0bV9sb2NrIHR0bV9sb2NrOwotCXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAqdHRtX3ZtX29wczsKLQlpbnQgaGFzX2ZlbmNlX2RldmljZTsKLQlpbnQgaGFzX2JvX2RldmljZTsKIAogCXVuc2lnbmVkIGxvbmcgY2hpcHNldDsKIAotCXN0cnVjdCBkcm1fcHNiX3VvcHQgdW9wdDsKLQogCXN0cnVjdCBwc2JfZ3R0ICpwZzsKIAotCS8qR1RUIE1lbW9yeSBtYW5hZ2VyKi8KKwkvKiBHVFQgTWVtb3J5IG1hbmFnZXIgKi8KIAlzdHJ1Y3QgcHNiX2d0dF9tbSAqZ3R0X21tOwotCiAJc3RydWN0IHBhZ2UgKnNjcmF0Y2hfcGFnZTsKLQl1aW50MzJfdCBzZXF1ZW5jZVtQU0JfTlVNX0VOR0lORVNdOwotCXVpbnQzMl90IGxhc3Rfc2VxdWVuY2VbUFNCX05VTV9FTkdJTkVTXTsKLQl1aW50MzJfdCBsYXN0X3N1Ym1pdHRlZF9zZXFbUFNCX05VTV9FTkdJTkVTXTsKKwl1MzIgKmd0dF9tYXA7CisJdWludDMyX3Qgc3RvbGVuX2Jhc2U7CisJdm9pZCAqdnJhbV9hZGRyOworCXVuc2lnbmVkIGxvbmcgdnJhbV9zdG9sZW5fc2l6ZTsKKwlpbnQgZ3R0X2luaXRpYWxpemVkOworCXUxNiBnbWNoX2N0cmw7CQkvKiBTYXZlZCBHVFQgc2V0dXAgKi8KKwl1MzIgcGdlX2N0bDsKKworCXN0cnVjdCBtdXRleCBndHRfbXV0ZXg7CisJc3RydWN0IHJlc291cmNlICpndHRfbWVtOwkvKiBPdXIgUENJIHJlc291cmNlICovCiAKIAlzdHJ1Y3QgcHNiX21tdV9kcml2ZXIgKm1tdTsKIAlzdHJ1Y3QgcHNiX21tdV9wZCAqcGZfcGQ7CiAKKwkvKgorCSAqIFJlZ2lzdGVyIGJhc2UKKwkgKi8KKwogCXVpbnQ4X3QgKnNneF9yZWc7CiAJdWludDhfdCAqdmRjX3JlZzsKIAl1aW50MzJfdCBnYXR0X2ZyZWVfb2Zmc2V0OwogCi0JLyogSU1HIHZpZGVvIGNvbnRleHQgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHZpZGVvX2N0eDsKLQotCi0KIAkvKgotCSAqRmVuY2luZyAvIGlycS4KKwkgKiBGZW5jaW5nIC8gaXJxLgogCSAqLwogCiAJdWludDMyX3QgdmRjX2lycV9tYXNrOwogCXVpbnQzMl90IHBpcGVzdGF0W1BTQl9OVU1fUElQRV07Ci0JYm9vbCB2YmxhbmtzRW5hYmxlZEZvckZsaXBzOwogCiAJc3BpbmxvY2tfdCBpcnFtYXNrX2xvY2s7Ci0Jc3BpbmxvY2tfdCBzZXF1ZW5jZV9sb2NrOworCisJLyoKKwkgKiBQb3dlcgorICAgICAgICAgKi8KKworCWJvb2wgc3VzcGVuZGVkOworCWJvb2wgZGlzcGxheV9wb3dlcjsKKwlpbnQgZGlzcGxheV9jb3VudDsKIAogCS8qCiAJICpNb2Rlc2V0dGluZwpAQCAtNDEzLDQwICsyODcsOSBAQAogCXVpbnQzMl90IG51bV9waXBlOwogCiAJLyoKLQkgKiBDSSBzaGFyZSBidWZmZXIKLQkgKi8KLQl1bnNpZ25lZCBpbnQgY2lfcmVnaW9uX3N0YXJ0OwotCXVuc2lnbmVkIGludCBjaV9yZWdpb25fc2l6ZTsKLQotCS8qCi0JICogUkFSIHNoYXJlIGJ1ZmZlcjsKLQkgKi8KLQl1bnNpZ25lZCBpbnQgcmFyX3JlZ2lvbl9zdGFydDsKLQl1bnNpZ25lZCBpbnQgcmFyX3JlZ2lvbl9zaXplOwotCi0JLyoKIAkgKk1lbW9yeSBtYW5hZ2VycwogCSAqLwogCi0JaW50IGhhdmVfY2FtZXJhOwotCWludCBoYXZlX3JhcjsKLQlpbnQgaGF2ZV90dDsKLQlpbnQgaGF2ZV9tZW1fbW11OwotCXN0cnVjdCBtdXRleCB0ZW1wX21lbTsKLQotCS8qCi0JICpSZWxvY2F0aW9uIGJ1ZmZlciBtYXBwaW5nLgotCSAqLwotCi0Jc3BpbmxvY2tfdCByZWxvY19sb2NrOwotCXVuc2lnbmVkIGludCByZWxfbWFwcGVkX3BhZ2VzOwotCXdhaXRfcXVldWVfaGVhZF90IHJlbF9tYXBwZWRfcXVldWU7Ci0KLQkvKgotCSAqU0FSRUEKLQkgKi8KLQlzdHJ1Y3QgZHJtX3BzYl9zYXJlYSAqc2FyZWFfcHJpdjsKLQogCS8qCiAJKk9TUE0gaW5mbwogCSovCkBAIC00NTgsNyArMzAxLDggQEAKIAogCXN0cnVjdCBkcm1fcHNiX3NpemVzX2FyZyBzaXplczsKIAotCXVpbnQzMl90IGZ1c2VfcmVnX3ZhbHVlOworCXUzMiBmdXNlX3JlZ192YWx1ZTsKKwl1MzIgdmlkZW9fZGV2aWNlX2Z1c2U7CiAKIAkvKiBwY2kgcmV2aXNpb24gaWQgZm9yIEIwOkQyOkYwICovCiAJdWludDhfdCBwbGF0Zm9ybV9yZXZfaWQ7CkBAIC00ODMsNiArMzI3LDcgQEAKIAl1bnNpZ25lZCBpbnQgbHZkc191c2Vfc3NjOjE7CiAJaW50IGx2ZHNfc3NjX2ZyZXE7CiAJYm9vbCBpc19sdmRzX29uOworCWJvb2wgaXNfbWlwaV9vbjsKIAogCXVuc2lnbmVkIGludCBjb3JlX2ZyZXE7CiAJdWludDMyX3QgaUxWRFNfZW5hYmxlOwpAQCAtNDkwLDYgKzMzNSwyMCBAQAogCS8qcnVudGltZSBQTSBzdGF0ZSovCiAJaW50IHJwbV9lbmFibGVkOwogCisJLyogTW9vcmVzdG93biBzcGVjaWZpYyAqLworCXN0cnVjdCBtcnN0X3ZidCB2YnRfZGF0YTsKKwlzdHJ1Y3QgbXJzdF9nY3RfZGF0YSBnY3RfZGF0YTsKKworCS8qIE1vb3Jlc3Rvd24gcGlwZSBjb25maWcgcmVnaXN0ZXIgdmFsdWUgY2FjaGUgKi8KKwl1aW50MzJfdCBwaXBlY29uZjsKKwl1aW50MzJfdCBwaXBlY29uZjE7CisJdWludDMyX3QgcGlwZWNvbmYyOworCisJLyogTW9vcmVzdG93biBwbGFuZSBjb250cm9sIHJlZ2lzdGVyIHZhbHVlIGNhY2hlICovCisJdWludDMyX3QgZHNwY250cjsKKwl1aW50MzJfdCBkc3BjbnRyMTsKKwl1aW50MzJfdCBkc3BjbnRyMjsKKwogCS8qCiAJICpSZWdpc3RlciBzdGF0ZQogCSAqLwpAQCAtNTk1LDk4ICs0NTQsMTEgQEAKIAl1aW50MzJfdCBzYXZlT1ZDX09HQU1DNDsKIAl1aW50MzJfdCBzYXZlT1ZDX09HQU1DNTsKIAotCS8qCi0JICogZXh0cmEgTURGTEQgUmVnaXN0ZXIgc3RhdGUKLQkgKi8KLQl1aW50MzJfdCBzYXZlSERNSVBIWU1JU0NDVEw7Ci0JdWludDMyX3Qgc2F2ZUhETUlCX0NPTlRST0w7Ci0JdWludDMyX3Qgc2F2ZURTUENDTlRSOwotCXVpbnQzMl90IHNhdmVQSVBFQ0NPTkY7Ci0JdWludDMyX3Qgc2F2ZVBJUEVDU1JDOwotCXVpbnQzMl90IHNhdmVIVE9UQUxfQzsKLQl1aW50MzJfdCBzYXZlSEJMQU5LX0M7Ci0JdWludDMyX3Qgc2F2ZUhTWU5DX0M7Ci0JdWludDMyX3Qgc2F2ZVZUT1RBTF9DOwotCXVpbnQzMl90IHNhdmVWQkxBTktfQzsKLQl1aW50MzJfdCBzYXZlVlNZTkNfQzsKLQl1aW50MzJfdCBzYXZlRFNQQ1NUUklERTsKLQl1aW50MzJfdCBzYXZlRFNQQ1NJWkU7Ci0JdWludDMyX3Qgc2F2ZURTUENQT1M7Ci0JdWludDMyX3Qgc2F2ZURTUENTVVJGOwotCXVpbnQzMl90IHNhdmVEU1BDTElOT0ZGOwotCXVpbnQzMl90IHNhdmVEU1BDVElMRU9GRjsKLQl1aW50MzJfdCBzYXZlRFNQQ0NVUlNPUl9DVFJMOwotCXVpbnQzMl90IHNhdmVEU1BDQ1VSU09SX0JBU0U7Ci0JdWludDMyX3Qgc2F2ZURTUENDVVJTT1JfUE9TOwotCXVpbnQzMl90IHNhdmVfcGFsZXR0ZV9jWzI1Nl07Ci0JdWludDMyX3Qgc2F2ZU9WX09WQUREX0M7Ci0JdWludDMyX3Qgc2F2ZU9WX09HQU1DMF9DOwotCXVpbnQzMl90IHNhdmVPVl9PR0FNQzFfQzsKLQl1aW50MzJfdCBzYXZlT1ZfT0dBTUMyX0M7Ci0JdWludDMyX3Qgc2F2ZU9WX09HQU1DM19DOwotCXVpbnQzMl90IHNhdmVPVl9PR0FNQzRfQzsKLQl1aW50MzJfdCBzYXZlT1ZfT0dBTUM1X0M7Ci0KLQkvKiBEU0kgcmVnIHNhdmUgKi8KLQl1aW50MzJfdCBzYXZlREVWSUNFX1JFQURZX1JFRzsKLQl1aW50MzJfdCBzYXZlSU5UUl9FTl9SRUc7Ci0JdWludDMyX3Qgc2F2ZURTSV9GVU5DX1BSR19SRUc7Ci0JdWludDMyX3Qgc2F2ZUhTX1RYX1RJTUVPVVRfUkVHOwotCXVpbnQzMl90IHNhdmVMUF9SWF9USU1FT1VUX1JFRzsKLQl1aW50MzJfdCBzYXZlVFVSTl9BUk9VTkRfVElNRU9VVF9SRUc7Ci0JdWludDMyX3Qgc2F2ZURFVklDRV9SRVNFVF9SRUc7Ci0JdWludDMyX3Qgc2F2ZURQSV9SRVNPTFVUSU9OX1JFRzsKLQl1aW50MzJfdCBzYXZlSE9SSVpfU1lOQ19QQURfQ09VTlRfUkVHOwotCXVpbnQzMl90IHNhdmVIT1JJWl9CQUNLX1BPUkNIX0NPVU5UX1JFRzsKLQl1aW50MzJfdCBzYXZlSE9SSVpfRlJPTlRfUE9SQ0hfQ09VTlRfUkVHOwotCXVpbnQzMl90IHNhdmVIT1JJWl9BQ1RJVkVfQVJFQV9DT1VOVF9SRUc7Ci0JdWludDMyX3Qgc2F2ZVZFUlRfU1lOQ19QQURfQ09VTlRfUkVHOwotCXVpbnQzMl90IHNhdmVWRVJUX0JBQ0tfUE9SQ0hfQ09VTlRfUkVHOwotCXVpbnQzMl90IHNhdmVWRVJUX0ZST05UX1BPUkNIX0NPVU5UX1JFRzsKLQl1aW50MzJfdCBzYXZlSElHSF9MT1dfU1dJVENIX0NPVU5UX1JFRzsKLQl1aW50MzJfdCBzYXZlSU5JVF9DT1VOVF9SRUc7Ci0JdWludDMyX3Qgc2F2ZU1BWF9SRVRfUEFLX1JFRzsKLQl1aW50MzJfdCBzYXZlVklERU9fRk1UX1JFRzsKLQl1aW50MzJfdCBzYXZlRU9UX0RJU0FCTEVfUkVHOwotCXVpbnQzMl90IHNhdmVMUF9CWVRFQ0xLX1JFRzsKLQl1aW50MzJfdCBzYXZlSFNfTFNfREJJX0VOQUJMRV9SRUc7Ci0JdWludDMyX3Qgc2F2ZVRYQ0xLRVNDX1JFRzsKLQl1aW50MzJfdCBzYXZlRFBIWV9QQVJBTV9SRUc7Ci0JdWludDMyX3Qgc2F2ZU1JUElfQ09OVFJPTF9SRUc7Ci0JdWludDMyX3Qgc2F2ZU1JUEk7Ci0JdWludDMyX3Qgc2F2ZU1JUElfQzsKLQl2b2lkICgqaW5pdF9kcnZJQykoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Ci0Jdm9pZCAoKmRzaV9wcmVQb3dlclN0YXRlKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKLQl2b2lkICgqZHNpX3Bvc3RQb3dlclN0YXRlKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKLQotCS8qIERQU1QgUmVnaXN0ZXIgU2F2ZSAqLwotCXVpbnQzMl90IHNhdmVISVNUT0dSQU1fSU5UX0NPTlRST0xfUkVHOwotCXVpbnQzMl90IHNhdmVISVNUT0dSQU1fTE9HSUNfQ09OVFJPTF9SRUc7Ci0JdWludDMyX3Qgc2F2ZVBXTV9DT05UUk9MX0xPR0lDOwotCiAJLyogTVNJIHJlZyBzYXZlICovCi0KIAl1aW50MzJfdCBtc2lfYWRkcjsKIAl1aW50MzJfdCBtc2lfZGF0YTsKIAogCS8qCi0JICpTY2hlZHVsaW5nLgotCSAqLwotCi0Jc3RydWN0IG11dGV4IHJlc2V0X211dGV4OwotCXN0cnVjdCBtdXRleCBjbWRidWZfbXV0ZXg7Ci0JLyp1aW50MzJfdCB0YV9tZW1fcGFnZXM7Ci0Jc3RydWN0IHBzYl90YV9tZW0gKnRhX21lbTsKLQlpbnQgZm9yY2VfdGFfbWVtX2xvYWQ7Ki8KLQlhdG9taWNfdCB2YWxfc2VxOwotCi0JLyoKLQkgKlRPRE86IGNoYW5nZSB0aGlzIHRvIGJlIHBlciBkcm0tY29udGV4dC4KLQkgKi8KLQotCXN0cnVjdCBwc2JfY29udGV4dCBjb250ZXh0OwotCi0JLyoKIAkgKiBMSUQtU3dpdGNoCiAJICovCiAJc3BpbmxvY2tfdCBsaWRfbG9jazsKQEAgLTY5OSw4ICs0NzEsNiBAQAogCSAqV2F0Y2hkb2cKIAkgKi8KIAotCWludCB0aW1lcl9hdmFpbGFibGU7Ci0KIAl1aW50MzJfdCBhcG1fcmVnOwogCXVpbnQxNl90IGFwbV9iYXNlOwogCkBAIC03MTYsNzMgKzQ4NiwxNyBAQAogfTsKIAogCi1zdHJ1Y3QgcHNiX2ZpbGVfZGF0YSB7CS8qIFRPRE86IEF1ZGl0IHRoaXMsIHJlbW92ZSB0aGUgaW5kaXJlY3Rpb24gYW5kIHNldAotCQkJICAgaXQgdXAgcHJvcGVybHkgaW4gb3Blbi9wb3N0Y2xvc2UgIEFDRklYTUUgKi8KLQl2b2lkICpwcml2OwotfTsKLQotc3RydWN0IHBzYl9mcHJpdiB7Ci0Jc3RydWN0IHR0bV9vYmplY3RfZmlsZSAqdGZpbGU7Ci19OwotCiBzdHJ1Y3QgcHNiX21tdV9kcml2ZXI7CiAKIGV4dGVybiBpbnQgZHJtX2NydGNfcHJvYmVfb3V0cHV0X21vZGVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCwgaW50KTsKIGV4dGVybiBpbnQgZHJtX3BpY2tfY3J0Y3Moc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBzYl9mcHJpdiAqcHNiX2Zwcml2KHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQotewotCXN0cnVjdCBwc2JfZmlsZV9kYXRhICpwdnJfZmlsZV9wcml2Ci0JCQk9IChzdHJ1Y3QgcHNiX2ZpbGVfZGF0YSAqKWZpbGVfcHJpdi0+ZHJpdmVyX3ByaXY7Ci0JcmV0dXJuIChzdHJ1Y3QgcHNiX2Zwcml2ICopIHB2cl9maWxlX3ByaXYtPnByaXY7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqcHNiX3ByaXYoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gKHN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIH0KIAogLyoKLSAqVFRNIGdsdWUuIHBzYl90dG1fZ2x1ZS5jCi0gKi8KLQotZXh0ZXJuIGludCBwc2Jfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCk7Ci1leHRlcm4gaW50IHBzYl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKTsKLWV4dGVybiBpbnQgcHNiX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKLQotZXh0ZXJuIGludCBwc2JfZmVuY2Vfc2lnbmFsZWRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKLQkJCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwotZXh0ZXJuIGludCBwc2JfdmVyaWZ5X2FjY2VzcyhzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAotCQkJICAgICBzdHJ1Y3QgZmlsZSAqZmlscCk7Ci1leHRlcm4gc3NpemVfdCBwc2JfdHRtX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsCi0JCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmZfcG9zKTsKLWV4dGVybiBzc2l6ZV90IHBzYl90dG1fd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCi0JCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmZfcG9zKTsKLWV4dGVybiBpbnQgcHNiX2ZlbmNlX2ZpbmlzaF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAotCQkJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwotZXh0ZXJuIGludCBwc2JfZmVuY2VfdW5yZWZfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKLQkJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwotZXh0ZXJuIGludCBwc2JfcGxfd2FpdGlkbGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKLQkJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwotZXh0ZXJuIGludCBwc2JfcGxfc2V0c3RhdHVzX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCi0JCQkJICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7Ci1leHRlcm4gaW50IHBzYl9wbF9zeW5jY3B1X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCi0JCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwotZXh0ZXJuIGludCBwc2JfcGxfdW5yZWZfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKLQkJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKLWV4dGVybiBpbnQgcHNiX3BsX3JlZmVyZW5jZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAotCQkJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwotZXh0ZXJuIGludCBwc2JfcGxfY3JlYXRlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCi0JCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwotZXh0ZXJuIGludCBwc2JfcGxfdWJfY3JlYXRlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCi0JCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwotZXh0ZXJuIGludCBwc2JfZXh0ZW5zaW9uX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCi0JCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwotZXh0ZXJuIGludCBwc2JfdHRtX2dsb2JhbF9pbml0KHN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2KTsKLWV4dGVybiB2b2lkIHBzYl90dG1fZ2xvYmFsX3JlbGVhc2Uoc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYpOwotZXh0ZXJuIGludCBwc2JfZ2V0cGFnZWFkZHJzX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCi0JCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwotLyoKICAqTU1VIHN0dWZmLgogICovCiAKQEAgLTgyNSwzMSArNTM5LDYgQEAKIAkJCQkgdWludDMyX3QgZGVzaXJlZF90aWxlX3N0cmlkZSwKIAkJCQkgdWludDMyX3QgaHdfdGlsZV9zdHJpZGUpOwogLyoKLSAqcHNiX3NneC5jCi0gKi8KLQotCi0KLWV4dGVybiBpbnQgcHNiX2NtZGJ1Zl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAotCQkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKLWV4dGVybiBpbnQgcHNiX3JlZ19zdWJtaXQoc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkgIHVpbnQzMl90ICpyZWdzLCB1bnNpZ25lZCBpbnQgY21kcyk7Ci0KLQotZXh0ZXJuIHZvaWQgcHNiX2ZlbmNlX29yX3N5bmMoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCi0JCQkgICAgICB1aW50MzJfdCBlbmdpbmUsCi0JCQkgICAgICB1aW50MzJfdCBmZW5jZV90eXBlcywKLQkJCSAgICAgIHVpbnQzMl90IGZlbmNlX2ZsYWdzLAotCQkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKLQkJCSAgICAgIHN0cnVjdCBwc2JfdHRtX2ZlbmNlX3JlcCAqZmVuY2VfYXJnLAotCQkJICAgICAgc3RydWN0IHR0bV9mZW5jZV9vYmplY3QgKipmZW5jZV9wKTsKLWV4dGVybiBpbnQgcHNiX3ZhbGlkYXRlX2tlcm5lbF9idWZmZXIoc3RydWN0IHBzYl9jb250ZXh0ICpjb250ZXh0LAotCQkJCSAgICAgIHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sCi0JCQkJICAgICAgdWludDMyX3QgZmVuY2VfY2xhc3MsCi0JCQkJICAgICAgdWludDY0X3Qgc2V0X2ZsYWdzLAotCQkJCSAgICAgIHVpbnQ2NF90IGNscl9mbGFncyk7Ci0KLS8qCiAgKnBzYl9pcnEuYwogICovCiAKQEAgLTg1OSw4ICs1NDgsNiBAQAogZXh0ZXJuIHZvaWQgcHNiX2lycV9wcmVpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCBwc2JfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgcHNiX2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Ci1leHRlcm4gdm9pZCBwc2JfaXJxX3ByZWluc3RhbGxfaXNsYW5kcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaHdfaXNsYW5kcyk7Ci1leHRlcm4gaW50IHBzYl9pcnFfcG9zdGluc3RhbGxfaXNsYW5kcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaHdfaXNsYW5kcyk7CiBleHRlcm4gdm9pZCBwc2JfaXJxX3R1cm5fb25fZHBzdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIHBzYl9pcnFfdHVybl9vZmZfZHBzdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIApAQCAtODc4LDI5ICs1NjUsNiBAQAogZXh0ZXJuIHUzMiBwc2JfZ2V0X3ZibGFua19jb3VudGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKIAogLyoKLSAqcHNiX2ZlbmNlLmMKLSAqLwotCi1leHRlcm4gdm9pZCBwc2JfZmVuY2VfaGFuZGxlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50MzJfdCBjbGFzcyk7Ci0KLWV4dGVybiBpbnQgcHNiX2ZlbmNlX2VtaXRfc2VxdWVuY2Uoc3RydWN0IHR0bV9mZW5jZV9kZXZpY2UgKmZkZXYsCi0JCQkJICAgdWludDMyX3QgZmVuY2VfY2xhc3MsCi0JCQkJICAgdWludDMyX3QgZmxhZ3MsIHVpbnQzMl90ICpzZXF1ZW5jZSwKLQkJCQkgICB1bnNpZ25lZCBsb25nICp0aW1lb3V0X2ppZmZpZXMpOwotZXh0ZXJuIHZvaWQgcHNiX2ZlbmNlX2Vycm9yKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkgICAgdWludDMyX3QgY2xhc3MsCi0JCQkgICAgdWludDMyX3Qgc2VxdWVuY2UsIHVpbnQzMl90IHR5cGUsIGludCBlcnJvcik7Ci1leHRlcm4gaW50IHBzYl90dG1fZmVuY2VfZGV2aWNlX2luaXQoc3RydWN0IHR0bV9mZW5jZV9kZXZpY2UgKmZkZXYpOwotCi0vKiBNU1ZEWC9Ub3BheiBzdHVmZiAqLwotZXh0ZXJuIGludCBwc2JfcmVtb3ZlX3ZpZGVvY3R4KHN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2LCBzdHJ1Y3QgZmlsZSAqZmlscCk7Ci0KLWV4dGVybiBpbnQgbG5jX3ZpZGVvX2ZyYW1lc2tpcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJICAgICAgIHVpbnQ2NF90IHVzZXJfcG9pbnRlcik7Ci1leHRlcm4gaW50IGxuY192aWRlb19nZXRwYXJhbShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAotCQkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwotCi0vKgogICogcHNiX29wcmVnaW9uLmMKICAqLwogZXh0ZXJuIGludCBwc2JfaW50ZWxfb3ByZWdpb25faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKQEAgLTkzMCw2ICs1OTQsOSBAQAogCiBleHRlcm4gdm9pZCBwc2Jfc3Bhbmsoc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYpOwogCitleHRlcm4gaW50IHBzYmZiXzJkX3N1Ym1pdChzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiwgdWludDMyX3QgKmNtZGJ1ZiwKKwkgCSAgCSAgIHVuc2lnbmVkIHNpemUpOworCiAvKgogICpwc2JfcmVzZXQuYwogICovCkBAIC05NTAsOCArNjE3LDM2IEBACiBpbnQgcHNiX2dldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCk7CiBzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqIHBzYl9nZXRfYmFja2xpZ2h0X2RldmljZSh2b2lkKTsKIAorLyogbXJzdF9jcnRjLmMgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIG1yc3RfaGVscGVyX2Z1bmNzOworCisvKiBtcnN0X2x2ZHMuYyAqLworZXh0ZXJuIHZvaWQgbXJzdF9sdmRzX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJICAgIHN0cnVjdCBwc2JfaW50ZWxfbW9kZV9kZXZpY2UgKm1vZGVfZGV2KTsKKworLyogcHNiX2ludGVsX2x2ZHMuYyAqLworZXh0ZXJuIHZvaWQgcHNiX2ludGVsX2x2ZHNfcHJlcGFyZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOworZXh0ZXJuIHZvaWQgcHNiX2ludGVsX2x2ZHNfY29tbWl0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7CitleHRlcm4gY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzCisJCQkJCXBzYl9pbnRlbF9sdmRzX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3M7CitleHRlcm4gY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgcHNiX2ludGVsX2x2ZHNfY29ubmVjdG9yX2Z1bmNzOworCisvKiBwc2JfZ2VtLmMgKi8KK2V4dGVybiBpbnQgcHNiX2dlbV9pbml0X29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CitleHRlcm4gdm9pZCBwc2JfZ2VtX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKK2V4dGVybiBpbnQgcHNiX2dlbV9nZXRfYXBlcnR1cmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOworZXh0ZXJuIGludCBwc2JfZ2VtX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJncyk7CitleHRlcm4gaW50IHBzYl9nZW1fZHVtYl9kZXN0cm95KHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCXVpbnQzMl90IGhhbmRsZSk7CitleHRlcm4gaW50IHBzYl9nZW1fZHVtYl9tYXBfZ3R0KHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90ICpvZmZzZXQpOworZXh0ZXJuIGludCBwc2JfZ2VtX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7CisKKwogLyoKLSAqRGVidWcgcHJpbnQgYml0cyBzZXR0aW5nCisgKiBEZWJ1ZyBwcmludCBiaXRzIHNldHRpbmcKICAqLwogI2RlZmluZSBQU0JfRF9HRU5FUkFMICgxIDw8IDApCiAjZGVmaW5lIFBTQl9EX0lOSVQgICAgKDEgPDwgMSkKQEAgLTk3NSw3ICs2NzAsNiBAQAogCiBleHRlcm4gaW50IGRybV9wc2JfZGVidWc7CiBleHRlcm4gaW50IGRybV9wc2Jfbm9fZmI7Ci1leHRlcm4gaW50IGRybV9wc2JfZGlzYWJsZV92c3luYzsKIGV4dGVybiBpbnQgZHJtX2lkbGVfY2hlY2tfaW50ZXJ2YWw7CiAKICNkZWZpbmUgUFNCX0RFQlVHX0dFTkVSQUwoX2ZtdCwgX2FyZy4uLikgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfZmIuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2ZiLmMKaW5kZXggZjY3ZjUzYi4uOTljMDNhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfZmIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9mYi5jCkBAIC0zNiwxMCArMzYsNyBAQAogI2luY2x1ZGUgInBzYl9kcnYuaCIKICNpbmNsdWRlICJwc2JfaW50ZWxfcmVnLmgiCiAjaW5jbHVkZSAicHNiX2ludGVsX2Rydi5oIgotI2luY2x1ZGUgInBzYl90dG1fdXNlcm9ial9hcGkuaCIKICNpbmNsdWRlICJwc2JfZmIuaCIKLSNpbmNsdWRlICJwc2Jfc2d4LmgiCi0jaW5jbHVkZSAicHNiX3B2cl9nbHVlLmgiCiAKIHN0YXRpYyB2b2lkIHBzYl91c2VyX2ZyYW1lYnVmZmVyX2Rlc3Ryb3koc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpOwogc3RhdGljIGludCBwc2JfdXNlcl9mcmFtZWJ1ZmZlcl9jcmVhdGVfaGFuZGxlKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLApAQCAtMTkzLDggKzE5MCw3IEBACiAJc3RydWN0IHBzYl9mcmFtZWJ1ZmZlciAqcHNiZmIgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcHNiZmItPmJhc2UuZGV2OwogCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgcHNiX2d0dCAqcGcgPSBkZXZfcHJpdi0+cGc7Ci0JdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIgPSAodW5zaWduZWQgbG9uZylwZy0+c3RvbGVuX2Jhc2U7OworCXVuc2lnbmVkIGxvbmcgcGh5c19hZGRyID0gKHVuc2lnbmVkIGxvbmcpZGV2X3ByaXYtPnN0b2xlbl9iYXNlOwogCiAJcGFnZV9udW0gPSAodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KSA+PiBQQUdFX1NISUZUOwogCkBAIC0yNDMsNyArMjM5LDYgQEAKIAljaGFyICpmYl9zY3JlZW5fYmFzZSA9IE5VTEw7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBzYmZiLT5iYXNlLmRldjsKIAlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IHBzYl9ndHQgKnBnID0gZGV2X3ByaXYtPnBnOwogCiAJaWYgKHZtYS0+dm1fcGdvZmYgIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yNTYsMjIgKzI1MSw0OCBAQAogCWZiX3NjcmVlbl9iYXNlID0gKGNoYXIgKilpbmZvLT5zY3JlZW5fYmFzZTsKIAogCURSTV9ERUJVRygidm1fcGdvZmYgMHglbHgsIHNjcmVlbiBiYXNlICVwIHZyYW1fYWRkciAlcFxuIiwKLQkJCQl2bWEtPnZtX3Bnb2ZmLCBmYl9zY3JlZW5fYmFzZSwgcGctPnZyYW1fYWRkcik7CisJCQkJdm1hLT52bV9wZ29mZiwgZmJfc2NyZWVuX2Jhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9wcml2LT52cmFtX2FkZHIpOwogCi0JLyppZiB1c2luZyBzdG9sZW4gbWVtb3J5LCAqLwotCWlmIChmYl9zY3JlZW5fYmFzZSA9PSBwZy0+dnJhbV9hZGRyKSB7CisgICAgICAgIC8qIEZJWE1FOiB1bHRpbWF0ZWx5IHRoaXMgbmVlZHMgdG8gYmVjb21lICdpZiBlbnRpcmVseSBzdG9sZW4gbWVtb3J5JyAqLworCWlmICgxIHx8IGZiX3NjcmVlbl9iYXNlID09IGRldl9wcml2LT52cmFtX2FkZHIpIHsKIAkJdm1hLT52bV9vcHMgPSAmcHNiZmJfdm1fb3BzOwogCQl2bWEtPnZtX3ByaXZhdGVfZGF0YSA9ICh2b2lkICopcHNiZmI7CiAJCXZtYS0+dm1fZmxhZ3MgfD0gVk1fUkVTRVJWRUQgfCBWTV9JTyB8CiAJCQkJCQlWTV9NSVhFRE1BUCB8IFZNX0RPTlRFWFBBTkQ7CiAJfSBlbHNlIHsKLQkvKnVzaW5nIElNRyBtZW1pbmZvLCBjYW4gSSB1c2UgcHZybW1hcCB0byBtYXAgaXQ/Ki8KLQorCSAgICAgICAgLyogR1RUIG1lbW9yeSBiYWNrZWQgYnkga2VybmVsL3VzZXIgcGFnZXMsIG5lZWRzIGEgZGlmZmVyZW50CisJICAgICAgICAgICBhcHByb2FjaCA/IC0gR0VNID8gKi8KIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBwc2JmYl9pb2N0bChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHBzYl9mYmRldiAqZmJkZXYgPSBpbmZvLT5wYXI7CisJc3RydWN0IHBzYl9mcmFtZWJ1ZmZlciAqcHNiZmIgPSBmYmRldi0+cGZiOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwc2JmYi0+YmFzZS5kZXY7CisJc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXUzMiBfX3VzZXIgKnAgPSAodTMyIF9fdXNlciAqKWFyZzsKKwl1MzIgbDsKKwl1MzIgYnVmWzMyXTsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgMHgxMjM0NTY3ODoKKwkJaWYgKCFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKQorCQkJcmV0dXJuIC1FUEVSTTsKKwkJaWYgKGdldF91c2VyKGwsIHApKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChsID4gMzIpCisJCQlyZXR1cm4gLUVNU0dTSVpFOworCQlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCBwICsgMSwgbCAqIHNpemVvZih1MzIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlwc2JmYl8yZF9zdWJtaXQoZGV2X3ByaXYsIGJ1ZiwgbCk7CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PVFRZOworCX0KK30KIAogc3RhdGljIHN0cnVjdCBmYl9vcHMgcHNiZmJfb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLApAQCAtMjg0LDExICszMDUsMTIgQEAKIAkuZmJfaW1hZ2VibGl0ID0gcHNiZmJfaW1hZ2VibGl0LAogCS5mYl9tbWFwID0gcHNiZmJfbW1hcCwKIAkuZmJfc3luYyA9IHBzYmZiX3N5bmMsCisJLmZiX2lvY3RsID0gcHNiZmJfaW9jdGwsCiB9OwogCiBzdGF0aWMgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqcHNiX2ZyYW1lYnVmZmVyX2NyZWF0ZQogCQkJKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQgKnIsCi0JCQkgdm9pZCAqbW1fcHJpdmF0ZSkKKwkJCSBzdHJ1Y3QgZ3R0X3JhbmdlICpndCkKIHsKIAlzdHJ1Y3QgcHNiX2ZyYW1lYnVmZmVyICpmYjsKIAlpbnQgcmV0OwpAQCAtMzA0LDcgKzMyNiw3IEBACiAKIAlkcm1faGVscGVyX21vZGVfZmlsbF9mYl9zdHJ1Y3QoJmZiLT5iYXNlLCByKTsKIAotCWZiLT5ibyA9IG1tX3ByaXZhdGU7CisJZmItPmd0dCA9IGd0OwogCiAJcmV0dXJuICZmYi0+YmFzZTsKIApAQCAtMzEzLDEzNiArMzM1LDU4IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpwc2JfdXNlcl9mcmFtZWJ1ZmZlcl9jcmVhdGUKLQkJCShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHAsCi0JCQkgc3RydWN0IGRybV9tb2RlX2ZiX2NtZCAqcikKKy8qKgorICoJcHNiZmJfYWxsb2MJCS0JYWxsb2NhdGUgZnJhbWUgYnVmZmVyIG1lbW9yeQorICoJQGRldjogdGhlIERSTSBkZXZpY2UKKyAqCUBhbGlnbmVkX3NpemU6IHNwYWNlIG5lZWRlZAorICoKKyAqCUFsbG9jYXRlIHRoZSBmcmFtZSBidWZmZXIuIEluIHRoZSB1c3VhbCBjYXNlIHdlIGdldCBhIEdUVCByYW5nZSB0aGF0CisgKglpcyBzdG9sZW4gbWVtb3J5IGJhY2tlZCBhbmQgbGlmZSBpcyBzaW1wbGUuIElmIHRoZXJlIGlzbid0IHN1ZmZpY2llbnQKKyAqCXN0b2xlbiBtZW1vcnkgb3IgdGhlIHN5c3RlbSBoYXMgbm8gc3RvbGVuIG1lbW9yeSB3ZSBhbGxvY2F0ZSBhIHJhbmdlCisgKglhbmQgYmFjayBpdCB3aXRoIGEgR0VNIG9iamVjdC4KKyAqCisgKglJbiB0aGlzIGNhc2UgdGhlIEdFTSBvYmplY3QgaGFzIG5vIGhhbmRsZS4gCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZ3R0X3JhbmdlICpwc2JmYl9hbGxvYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgYWxpZ25lZF9zaXplKQogewotCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8gPSBOVUxMOwotCXVpbnQ2NF90IHNpemU7Ci0KLQlibyA9IHR0bV9idWZmZXJfb2JqZWN0X2xvb2t1cChwc2JfZnByaXYoZmlscCktPnRmaWxlLCByLT5oYW5kbGUpOwotCWlmICghYm8pCisJc3RydWN0IGd0dF9yYW5nZSAqYmFja2luZzsKKwkvKiBCZWdpbiBieSB0cnlpbmcgdG8gdXNlIHN0b2xlbiBtZW1vcnkgYmFja2luZyAqLworCWJhY2tpbmcgPSBwc2JfZ3R0X2FsbG9jX3JhbmdlKGRldiwgYWxpZ25lZF9zaXplLCAiZmIiLCAxKTsKKwlpZiAoYmFja2luZykKKwkJcmV0dXJuIGJhY2tpbmc7CisJLyogTmV4dCB0cnkgdXNpbmcgR0VNIGhvc3QgbWVtb3J5ICovCisJYmFja2luZyA9IHBzYl9ndHRfYWxsb2NfcmFuZ2UoZGV2LCBhbGlnbmVkX3NpemUsICJmYihnZW0pIiwgMCk7CisJaWYgKGJhY2tpbmcgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKLQkvKiBKQjogVE9ETyBub3QgZHJvcCwgbWFrZSBzbWFydGVyICovCi0Jc2l6ZSA9ICgodWludDY0X3QpIGJvLT5udW1fcGFnZXMpIDw8IFBBR0VfU0hJRlQ7Ci0JaWYgKHNpemUgPCByLT53aWR0aCAqIHItPmhlaWdodCAqIDQpCi0JCXJldHVybiBOVUxMOwotCi0JLyogSkI6IFRPRE8gbm90IGRyb3AsIHJlZmNvdW50IGJ1ZmZlciAqLwotCXJldHVybiBwc2JfZnJhbWVidWZmZXJfY3JlYXRlKGRldiwgciwgYm8pOwotCi0jaWYgMAotCXN0cnVjdCBwc2JfZnJhbWVidWZmZXIgKnBzYmZiOwotCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOwotCXN0cnVjdCBmYl9pbmZvICppbmZvOwotCXZvaWQgKnBzS2VybmVsTWVtSW5mbyA9IE5VTEw7Ci0Jdm9pZCAqIGhLZXJuZWxNZW1JbmZvID0gKHZvaWQgKilyLT5oYW5kbGU7Ci0Jc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYKLQkJPSAoc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqKWRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IHBzYl9mYmRldiAqZmJkZXYgPSBkZXZfcHJpdi0+ZmJkZXY7Ci0Jc3RydWN0IHBzYl9ndHQgKnBnID0gZGV2X3ByaXYtPnBnOwotCWludCByZXQ7Ci0JdWludDMyX3Qgb2Zmc2V0OwotCXVpbnQ2NF90IHNpemU7Ci0KLQlyZXQgPSBwc2JfZ2V0X21lbWluZm9fYnlfaGFuZGxlKGhLZXJuZWxNZW1JbmZvLCAmcHNLZXJuZWxNZW1JbmZvKTsKLQlpZiAocmV0KSB7Ci0JCURSTV9FUlJPUigiQ2Fubm90IGdldCBtZW1pbmZvIGZvciBoYW5kbGUgMHgleFxuIiwKLQkJCQkJCSh1MzIpaEtlcm5lbE1lbUluZm8pOworCS8qIE5vdyBiYWNrIGl0IHdpdGggYW4gb2JqZWN0ICovCisJaWYgKGRybV9nZW1fb2JqZWN0X2luaXQoZGV2LCAmYmFja2luZy0+Z2VtLCBhbGlnbmVkX3NpemUpICE9IDApIHsKKwkJcHNiX2d0dF9mcmVlX3JhbmdlKGRldiwgYmFja2luZyk7CiAJCXJldHVybiBOVUxMOwogCX0KLQotCURSTV9ERUJVRygiR290IEtlcm5lbCBNZW1JbmZvIGZvciBoYW5kbGUgJWx4XG4iLAotCQkgICh1MzIpaEtlcm5lbE1lbUluZm8pOwotCi0JLyogSkI6IFRPRE8gbm90IGRyb3AsIG1ha2Ugc21hcnRlciAqLwotCXNpemUgPSBwc0tlcm5lbE1lbUluZm8tPnVpMzJBbGxvY1NpemU7Ci0JaWYgKHNpemUgPCByLT5oZWlnaHQgKiByLT5waXRjaCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQkvKiBKQjogVE9ETyBub3QgZHJvcCwgcmVmY291bnQgYnVmZmVyICovCi0JLyogcmV0dXJuIHBzYl9mcmFtZWJ1ZmZlcl9jcmVhdGUoZGV2LCByLCBibyk7ICovCi0KLQlmYiA9IHBzYl9mcmFtZWJ1ZmZlcl9jcmVhdGUoZGV2LCByLCAodm9pZCAqKXBzS2VybmVsTWVtSW5mbyk7Ci0JaWYgKCFmYikgewotCQlEUk1fRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSBmYi5cbiIpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlwc2JmYiA9IHRvX3BzYl9mYihmYik7Ci0JcHNiZmItPnNpemUgPSBzaXplOwotCXBzYmZiLT5oS2VybmVsTWVtSW5mbyA9IGhLZXJuZWxNZW1JbmZvOwotCi0JRFJNX0RFQlVHKCJNYXBwaW5nIHRvIGd0dC4uLiwgS2VybmVsTWVtSW5mbyAlcFxuIiwgcHNLZXJuZWxNZW1JbmZvKTsKLQotCS8qaWYgbm90IFZSQU0sIG1hcCBpdCBpbnRvIHR0IGFwZXJ0dXJlKi8KLQlpZiAocHNLZXJuZWxNZW1JbmZvLT5wdkxpbkFkZHJLTSAhPSBwZy0+dnJhbV9hZGRyKSB7Ci0JCXJldCA9IHBzYl9ndHRfbWFwX21lbWluZm8oZGV2LCBoS2VybmVsTWVtSW5mbywgJm9mZnNldCk7Ci0JCWlmIChyZXQpIHsKLQkJCURSTV9FUlJPUigibWFwIG1lbWluZm8gZm9yIDB4JXggZmFpbGVkXG4iLAotCQkJCSAgKHUzMiloS2VybmVsTWVtSW5mbyk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQlwc2JmYi0+b2Zmc2V0ID0gKG9mZnNldCA8PCBQQUdFX1NISUZUKTsKLQl9IGVsc2UgewotCQlwc2JmYi0+b2Zmc2V0ID0gMDsKLQl9Ci0JaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKDAsICZkZXYtPnBkZXYtPmRldik7Ci0JaWYgKCFpbmZvKQotCQlyZXR1cm4gTlVMTDsKLQotCXN0cmNweShpbmZvLT5maXguaWQsICJwc2JmYiIpOwotCi0JaW5mby0+ZmxhZ3MgPSBGQklORk9fREVGQVVMVDsKLQlpbmZvLT5maXguYWNjZWwgPSBGQl9BQ0NFTF9JODMwOwkvKkZJWE1FQUMqLwotCWluZm8tPmZib3BzID0gJnBzYmZiX29wczsKLQotCWluZm8tPmZpeC5zbWVtX3N0YXJ0ID0gZGV2LT5tb2RlX2NvbmZpZy5mYl9iYXNlOwotCWluZm8tPmZpeC5zbWVtX2xlbiA9IHNpemU7Ci0KLQlpbmZvLT5zY3JlZW5fYmFzZSA9IHBzS2VybmVsTWVtSW5mby0+cHZMaW5BZGRyS007Ci0JaW5mby0+c2NyZWVuX3NpemUgPSBzaXplOwotCi0JZHJtX2ZiX2hlbHBlcl9maWxsX2ZpeChpbmZvLCBmYi0+cGl0Y2gsIGZiLT5kZXB0aCk7Ci0JZHJtX2ZiX2hlbHBlcl9maWxsX3ZhcihpbmZvLCAmZmJkZXYtPnBzYl9mYl9oZWxwZXIsCi0JCQkJCQkJZmItPndpZHRoLCBmYi0+aGVpZ2h0KTsKLQotCWluZm8tPmZpeC5tbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgMCk7Ci0JaW5mby0+Zml4Lm1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihkZXYtPnBkZXYsIDApOwotCi0JaW5mby0+cGl4bWFwLnNpemUgPSA2NCAqIDEwMjQ7Ci0JaW5mby0+cGl4bWFwLmJ1Zl9hbGlnbiA9IDg7Ci0JaW5mby0+cGl4bWFwLmFjY2Vzc19hbGlnbiA9IDMyOwotCWluZm8tPnBpeG1hcC5mbGFncyA9IEZCX1BJWE1BUF9TWVNURU07Ci0JaW5mby0+cGl4bWFwLnNjYW5fYWxpZ24gPSAxOwotCi0JcHNiZmItPmZiZGV2ID0gaW5mbzsKLQlmYmRldi0+cGZiID0gcHNiZmI7Ci0KLQlmYmRldi0+cHNiX2ZiX2hlbHBlci5mYiA9IGZiOwotCWZiZGV2LT5wc2JfZmJfaGVscGVyLmZiZGV2ID0gaW5mbzsKLQlNUlNUTEZCSGFuZGxlQ2hhbmdlRkIoZGV2LCBwc2JmYik7Ci0KLQlyZXR1cm4gZmI7Ci0jZW5kaWYKKwlyZXR1cm4gYmFja2luZzsKIH0KLQorCQorLyoqCisgKglwc2JmYl9jcmVhdGUJCS0JY3JlYXRlIGEgZnJhbWVidWZmZXIKKyAqCUBmYmRldjogdGhlIGZyYW1lYnVmZmVyIGRldmljZQorICoJQHNpemVzOiBzcGVjaWZpY2F0aW9uIG9mIHRoZSBsYXlvdXQKKyAqCisgKglDcmVhdGUgYSBmcmFtZWJ1ZmZlciB0byB0aGUgc3BlY2lmaWNhdGlvbnMgcHJvdmlkZWQKKyAqLwogc3RhdGljIGludCBwc2JmYl9jcmVhdGUoc3RydWN0IHBzYl9mYmRldiAqZmJkZXYsCiAJCQkJc3RydWN0IGRybV9mYl9oZWxwZXJfc3VyZmFjZV9zaXplICpzaXplcykKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZmJkZXYtPnBzYl9mYl9oZWxwZXIuZGV2OwogCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgcHNiX2d0dCAqcGcgPSBkZXZfcHJpdi0+cGc7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CiAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7CiAJc3RydWN0IHBzYl9mcmFtZWJ1ZmZlciAqcHNiZmI7CiAJc3RydWN0IGRybV9tb2RlX2ZiX2NtZCBtb2RlX2NtZDsKIAlzdHJ1Y3QgZGV2aWNlICpkZXZpY2UgPSAmZGV2LT5wZGV2LT5kZXY7Ci0KLQlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmZibyA9IE5VTEw7CiAJaW50IHNpemUsIGFsaWduZWRfc2l6ZTsKIAlpbnQgcmV0OworCXN0cnVjdCBndHRfcmFuZ2UgKmJhY2tpbmc7CiAKIAltb2RlX2NtZC53aWR0aCA9IHNpemVzLT5zdXJmYWNlX3dpZHRoOwogCW1vZGVfY21kLmhlaWdodCA9IHNpemVzLT5zdXJmYWNlX2hlaWdodDsKQEAgLTQ1NSwxNSArMzk5LDE5IEBACiAJc2l6ZSA9IG1vZGVfY21kLnBpdGNoICogbW9kZV9jbWQuaGVpZ2h0OwogCWFsaWduZWRfc2l6ZSA9IEFMSUdOKHNpemUsIFBBR0VfU0laRSk7CiAKKwkvKiBBbGxvY2F0ZSB0aGUgZnJhbWVidWZmZXIgaW4gdGhlIEdUVCB3aXRoIHN0b2xlbiBwYWdlIGJhY2tpbmcgKi8KKwliYWNraW5nID0gcHNiZmJfYWxsb2MoZGV2LCBhbGlnbmVkX3NpemUpOworCWlmIChiYWNraW5nID09IE5VTEwpCisJICAgICAgICByZXR1cm4gLUVOT01FTTsKKwogCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlmYiA9IHBzYl9mcmFtZWJ1ZmZlcl9jcmVhdGUoZGV2LCAmbW9kZV9jbWQsIGZibyk7CisJZmIgPSBwc2JfZnJhbWVidWZmZXJfY3JlYXRlKGRldiwgJm1vZGVfY21kLCBiYWNraW5nKTsKIAlpZiAoIWZiKSB7CiAJCURSTV9FUlJPUigiZmFpbGVkIHRvIGFsbG9jYXRlIGZiLlxuIik7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X2VycjE7CiAJfQogCXBzYmZiID0gdG9fcHNiX2ZiKGZiKTsKLQlwc2JmYi0+c2l6ZSA9IHNpemU7CiAKIAlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBwc2JfZmJkZXYpLCBkZXZpY2UpOwogCWlmICghaW5mbykgewpAQCAtNDg1LDcgKzQzMywxMSBAQAogCWluZm8tPmZib3BzID0gJnBzYmZiX29wczsKIAlpbmZvLT5maXguc21lbV9zdGFydCA9IGRldi0+bW9kZV9jb25maWcuZmJfYmFzZTsKIAlpbmZvLT5maXguc21lbV9sZW4gPSBzaXplOwotCWluZm8tPnNjcmVlbl9iYXNlID0gKGNoYXIgKilwZy0+dnJhbV9hZGRyOworCisJLyogQWNjZXNzZWQgdmlhIHN0b2xlbiBtZW1vcnkgZGlyZWN0bHksIFRoaXMgb25seSB3b3JrcyBmb3Igc3RvbGVtCisJICAgbWVtb3J5IGhvd2V2ZXIuIE5lZWQgdG8gYWRkcmVzcyB0aGlzIG9uY2Ugd2Ugc3RhcnQgdXNpbmcgZ3R0CisJICAgcGFnZXMgd2UgYWxsb2NhdGUgKi8KKwlpbmZvLT5zY3JlZW5fYmFzZSA9IChjaGFyICopZGV2X3ByaXYtPnZyYW1fYWRkciArIGJhY2tpbmctPm9mZnNldDsKIAlpbmZvLT5zY3JlZW5fc2l6ZSA9IHNpemU7CiAJbWVtc2V0KGluZm8tPnNjcmVlbl9iYXNlLCAwLCBzaXplKTsKIApAQCAtNTE1LDkgKzQ2Nyw1MSBAQAogCWZiLT5mdW5jcy0+ZGVzdHJveShmYik7CiBvdXRfZXJyMToKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlwc2JfZ3R0X2ZyZWVfcmFuZ2UoZGV2LCBiYWNraW5nKTsKIAlyZXR1cm4gcmV0OwogfQogCisvKioKKyAqCXBzYl91c2VyX2ZyYW1lYnVmZmVyX2NyZWF0ZQktCWNyZWF0ZSBmcmFtZWJ1ZmZlcgorICoJQGRldjogb3VyIERSTSBkZXZpY2UKKyAqCUBmaWxwOiBjbGllbnQgZmlsZQorICoJQGNtZDogbW9kZSByZXF1ZXN0CisgKgorICoJQ3JlYXRlIGEgbmV3IGZyYW1lYnVmZmVyIGJhY2tlZCBieSBhIHVzZXJzcGFjZSBHRU0gb2JqZWN0CisgKi8KK3N0YXRpYyBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpwc2JfdXNlcl9mcmFtZWJ1ZmZlcl9jcmVhdGUKKwkJCShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHAsCisJCQkgc3RydWN0IGRybV9tb2RlX2ZiX2NtZCAqY21kKQoreworICAgICAgICBzdHJ1Y3QgZ3R0X3JhbmdlICpyOworICAgICAgICBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKyAgICAgICAgc3RydWN0IHBzYl9mcmFtZWJ1ZmZlciAqcHNiZmI7CisKKyAgICAgICAgLyogRmluZCB0aGUgR0VNIG9iamVjdCBhbmQgdGh1cyB0aGUgZ3R0IHJhbmdlIG9iamVjdCB0aGF0IGlzCisgICAgICAgICAgIHRvIGJhY2sgdGhpcyBzcGFjZSAqLworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbHAsIGNtZC0+aGFuZGxlKTsKKwlpZiAob2JqID09IE5VTEwpCisJICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKKworICAgICAgICAvKiBBbGxvY2F0ZSBhIGZyYW1lYnVmZmVyICovCisgICAgICAgIHBzYmZiID0ga3phbGxvYyhzaXplb2YoKnBzYmZiKSwgR0ZQX0tFUk5FTCk7CisgICAgICAgIGlmIChwc2JmYiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQob2JqKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLyogTGV0IHRoZSBjb3JlIGNvZGUgZG8gYWxsIHRoZSB3b3JrICovCisgICAgICAgIHIgPSBjb250YWluZXJfb2Yob2JqLCBzdHJ1Y3QgZ3R0X3JhbmdlLCBnZW0pOworCWlmIChwc2JfZnJhbWVidWZmZXJfY3JlYXRlKGRldiwgY21kLCByKSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQob2JqKTsKKyAgICAgICAgICAgICAgICBrZnJlZShwc2JmYik7CisgICAgICAgICAgICAgICAgcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisgICAgICAgIH0KKyAgICAgICAgLyogUmV0dXJuIHRoZSBkcm1fZnJhbWVidWZmZXIgY29udGFpbmVkIHdpdGhpbiB0aGUgcHNiIGZiZGV2IHdoaWNoCisgICAgICAgICAgIGhhcyBiZWVuIGluaXRpYWxpemVkIGJ5IHRoZSBmcmFtZWJ1ZmZlciBjcmVhdGlvbiAqLworICAgICAgICByZXR1cm4gJnBzYmZiLT5iYXNlOworfQorCiBzdGF0aWMgdm9pZCBwc2JmYl9nYW1tYV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MTYgcmVkLCB1MTYgZ3JlZW4sCiAJCQkJCQkJdTE2IGJsdWUsIGludCByZWdubykKIHsKQEAgLTU2MSwxNSArNTU1LDIwIEBACiAKIAlpZiAoZmJkZXYtPnBzYl9mYl9oZWxwZXIuZmJkZXYpIHsKIAkJaW5mbyA9IGZiZGV2LT5wc2JfZmJfaGVscGVyLmZiZGV2OworCQkvKiBGSVhNRTogdGhpcyBpcyBhIGJpdCBtb3JlIGluc2lkZSBrbm93bGVkZ2UgdGhhbiBJJ2QgbGlrZQorCQkgICBidXQgSSBkb24ndCBzZWUgaG93IHRvIG1ha2UgYSBmYWtlIEdFTSBvYmplY3Qgb2YgdGhlCisJCSAgIHN0b2xlbiBzcGFjZSBuaWNlbHkgKi8KKwkJaWYgKHBzYmZiLT5ndHQtPnN0b2xlbikKKwkJCXBzYl9ndHRfZnJlZV9yYW5nZShkZXYsIHBzYmZiLT5ndHQpOworCQllbHNlCisJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmcHNiZmItPmd0dC0+Z2VtKTsKIAkJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKIAkJaW91bm1hcChpbmZvLT5zY3JlZW5fYmFzZSk7CiAJCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CiAJfQogCiAJZHJtX2ZiX2hlbHBlcl9maW5pKCZmYmRldi0+cHNiX2ZiX2hlbHBlcik7Ci0KIAlkcm1fZnJhbWVidWZmZXJfY2xlYW51cCgmcHNiZmItPmJhc2UpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYxMCw3ICs2MDksNiBAQAogCWRldl9wcml2LT5mYmRldiA9IE5VTEw7CiB9CiAKLQogc3RhdGljIHZvaWQgcHNiZmJfb3V0cHV0X3BvbGxfY2hhbmdlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTYyNyw3ICs2MjUsNiBAQAogCQlyZXR1cm4gMDsKIAogCWluZm8gPSBwc2JmYi0+ZmJkZXY7Ci0JcHNiZmItPnB2ckJPID0gTlVMTDsKIAogCWlmIChpbmZvKQogCQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwpAQCAtNjM1LDI4ICs2MzIsNDggQEAKIH0KIC8qRVhQT1JUX1NZTUJPTChwc2JmYl9yZW1vdmUpOyAqLwogCisvKioKKyAqCXBzYl91c2VyX2ZyYW1lYnVmZmVyX2NyZWF0ZV9oYW5kbGUgLSBhZGQgaGFtZGxlIHRvIGEgZnJhbWVidWZmZXIKKyAqCUBmYjogZnJhbWVidWZmZXIKKyAqCUBmaWxlX3ByaXY6IG91ciBEUk0gZmlsZQorICoJQGhhbmRsZTogcmV0dXJuZWQgaGFuZGxlCisgKgorICoJT3VyIGZyYW1lYnVmZmVyIG9iamVjdCBpcyBhIEdUVCByYW5nZSB3aGljaCBhbHNvIGNvbnRhaW5zIGEgR0VNCisgKglvYmplY3QuIFdlIG5lZWQgdG8gdHVybiBpdCBpbnRvIGEgaGFuZGxlIGZvciB1c2Vyc3BhY2UuIEdFTSB3aWxsIGRvCisgKgl0aGUgd29yayBmb3IgdXMKKyAqLwogc3RhdGljIGludCBwc2JfdXNlcl9mcmFtZWJ1ZmZlcl9jcmVhdGVfaGFuZGxlKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAogCQkJCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKIAkJCQkJICAgICAgdW5zaWduZWQgaW50ICpoYW5kbGUpCiB7Ci0JLyogSkI6IFRPRE8gY3VycmVudGx5IHdlIGNhbid0IGdvIGZyb20gYSBibyB0byBhIGhhbmRsZSB3aXRoIHR0bSAqLwotCSh2b2lkKSBmaWxlX3ByaXY7Ci0JKmhhbmRsZSA9IDA7Ci0JcmV0dXJuIDA7CisgICAgICAgIHN0cnVjdCBwc2JfZnJhbWVidWZmZXIgKnBzYmZiID0gdG9fcHNiX2ZiKGZiKTsKKyAgICAgICAgc3RydWN0IGd0dF9yYW5nZSAqciA9IHBzYmZiLT5ndHQ7CisgICAgICAgIGlmIChyLT5zdG9sZW4pCisgICAgICAgICAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOworICAgICAgICByZXR1cm4gZHJtX2dlbV9oYW5kbGVfY3JlYXRlKGZpbGVfcHJpdiwgJnItPmdlbSwgaGFuZGxlKTsKIH0KIAorLyoqCisgKglwc2JfdXNlcl9mcmFtZWJ1ZmZlcl9kZXN0cm95CS0JZGVzdHJ1Y3QgdXNlciBjcmVhdGVkIGZiCisgKglAZmI6IGZyYW1lYnVmZmVyCisgKgorICoJVXNlciBmcmFtZWJ1ZmZlcnMgYXJlIGJhY2tlZCBieSBHRU0gb2JqZWN0cyBzbyBhbGwgd2UgaGF2ZSB0byBkbyBpcworICoJY2xlYW4gdXAgYSBiaXQgYW5kIGRyb3AgdGhlIHJlZmVyZW5jZSwgR0VNIHdpbGwgaGFuZGxlIHRoZSBmYWxsb3V0CisgKi8KIHN0YXRpYyB2b2lkIHBzYl91c2VyX2ZyYW1lYnVmZmVyX2Rlc3Ryb3koc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGZiLT5kZXY7CiAJc3RydWN0IHBzYl9mcmFtZWJ1ZmZlciAqcHNiZmIgPSB0b19wc2JfZmIoZmIpOworCXN0cnVjdCBndHRfcmFuZ2UgKnIgPSBwc2JmYi0+Z3R0OwogCi0JLyp1bW1hcCBndHQgcGFnZXMqLwotCXBzYl9ndHRfdW5tYXBfbWVtaW5mbyhkZXYsIHBzYmZiLT5oS2VybmVsTWVtSW5mbyk7CiAJaWYgKHBzYmZiLT5mYmRldikKIAkJcHNiZmJfcmVtb3ZlKGRldiwgZmIpOwogCi0JLyogSkI6IFRPRE8gbm90IGRyb3AsIHJlZmNvdW50IGJ1ZmZlciAqLworICAgICAgICAvKiBMZXQgRFJNIGRvIGl0cyBjbGVhbiB1cCAqLwogCWRybV9mcmFtZWJ1ZmZlcl9jbGVhbnVwKGZiKTsKKwkvKiAgV2UgYXJlIG5vIGxvbmdlciB1c2luZyB0aGUgcmVzb3VyY2UgaW4gR0VNICovCisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJnItPmdlbSk7CisKIAlrZnJlZShmYik7CiB9CiAKQEAgLTY5OCw4ICs3MTUsMTUgQEAKIAogCXBzYl9jcmVhdGVfYmFja2xpZ2h0X3Byb3BlcnR5KGRldik7CiAKLQlwc2JfaW50ZWxfbHZkc19pbml0KGRldiwgJmRldl9wcml2LT5tb2RlX2Rldik7Ci0JLyogcHNiX2ludGVsX3Nkdm9faW5pdChkZXYsIFNEVk9CKTsgKi8KKwlpZiAoSVNfTVJTVChkZXYpKSB7CisJCWlmIChkZXZfcHJpdi0+aUxWRFNfZW5hYmxlKQorCQkJbXJzdF9sdmRzX2luaXQoZGV2LCAmZGV2X3ByaXYtPm1vZGVfZGV2KTsKKwkJZWxzZQorCQkJRFJNX0VSUk9SKCJEU0kgaXMgbm90IHN1cHBvcnRlZFxuIik7CisJfSBlbHNlIHsKKwkJcHNiX2ludGVsX2x2ZHNfaW5pdChkZXYsICZkZXZfcHJpdi0+bW9kZV9kZXYpOworCQlwc2JfaW50ZWxfc2R2b19pbml0KGRldiwgU0RWT0IpOworCX0KIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubmVjdG9yLCAmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwKIAkJCSAgICBoZWFkKSB7CkBAIC03MTYsNyArNzQwLDEwIEBACiAJCQlicmVhazsKIAkJY2FzZSBJTlRFTF9PVVRQVVRfTFZEUzoKIAkJCVBTQl9ERUJVR19FTlRSWSgiTFZEUy5cbiIpOwotCQkJY3J0Y19tYXNrID0gKDEgPDwgMSk7CisJCQlpZiAoSVNfTVJTVChkZXYpKQorCQkJCWNydGNfbWFzayA9ICgxIDw8IDApOworCQkJZWxzZQorCQkJCWNydGNfbWFzayA9ICgxIDw8IDEpOwogCQkJY2xvbmVfbWFzayA9ICgxIDw8IElOVEVMX09VVFBVVF9MVkRTKTsKIAkJCWJyZWFrOwogCQljYXNlIElOVEVMX09VVFBVVF9NSVBJOgpAQCAtNzQzLDUyICs3NzAsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgKnBzYl9ib19mcm9tX2hhbmRsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAotCQkJCXVuc2lnbmVkIGludCBoYW5kbGUpCi17Ci0Jdm9pZCAqcHNLZXJuZWxNZW1JbmZvID0gTlVMTDsKLQl2b2lkICogaEtlcm5lbE1lbUluZm8gPSAodm9pZCAqKWhhbmRsZTsKLQlpbnQgcmV0OwotCi0JcmV0ID0gcHNiX2dldF9tZW1pbmZvX2J5X2hhbmRsZShoS2VybmVsTWVtSW5mbywgJnBzS2VybmVsTWVtSW5mbyk7Ci0JaWYgKHJldCkgewotCQlEUk1fRVJST1IoIkNhbm5vdCBnZXQgbWVtaW5mbyBmb3IgaGFuZGxlIDB4JXhcbiIsCi0JCQkgICh1MzIpaEtlcm5lbE1lbUluZm8pOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlyZXR1cm4gKHZvaWQgKilwc0tlcm5lbE1lbUluZm87Ci19Ci0KLXN0YXRpYyBzaXplX3QgcHNiX2JvX3NpemUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqYm9mKQotewotI2lmIDAKLQl2b2lkICpwc0tlcm5lbE1lbUluZm8JPSAodm9pZCAqKWJvZjsKLQlyZXR1cm4gKHNpemVfdClwc0tlcm5lbE1lbUluZm8tPnVpMzJBbGxvY1NpemU7Ci0jZWxzZQotCXJldHVybiAwOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBzaXplX3QgcHNiX2JvX29mZnNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpib2YpCi17Ci0Jc3RydWN0IHBzYl9mcmFtZWJ1ZmZlciAqcHNiZmIKLQkJPSAoc3RydWN0IHBzYl9mcmFtZWJ1ZmZlciAqKWJvZjsKLQotCXJldHVybiAoc2l6ZV90KXBzYmZiLT5vZmZzZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgcHNiX2JvX3Bpbl9mb3Jfc2Nhbm91dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpibykKLXsKLQkgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcHNiX2JvX3VucGluX2Zvcl9zY2Fub3V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmJvKQotewotCXJldHVybiAwOwotfQotCiB2b2lkIHBzYl9tb2Rlc2V0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9CkBAIC03OTcsMTIgKzc3OCw2IEBACiAJaW50IGk7CiAKIAlQU0JfREVCVUdfRU5UUlkoIlxuIik7Ci0JLyogSW5pdCBtbSBmdW5jdGlvbnMgKi8KLQltb2RlX2Rldi0+Ym9fZnJvbV9oYW5kbGUgPSBwc2JfYm9fZnJvbV9oYW5kbGU7Ci0JbW9kZV9kZXYtPmJvX3NpemUgPSBwc2JfYm9fc2l6ZTsKLQltb2RlX2Rldi0+Ym9fb2Zmc2V0ID0gcHNiX2JvX29mZnNldDsKLQltb2RlX2Rldi0+Ym9fcGluX2Zvcl9zY2Fub3V0ID0gcHNiX2JvX3Bpbl9mb3Jfc2Nhbm91dDsKLQltb2RlX2Rldi0+Ym9fdW5waW5fZm9yX3NjYW5vdXQgPSBwc2JfYm9fdW5waW5fZm9yX3NjYW5vdXQ7CiAKIAlkcm1fbW9kZV9jb25maWdfaW5pdChkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9mYi5oIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfZmIuaAppbmRleCBiNGZhYjkyLi5jOGVjMGQ2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfZmIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9mYi5oCkBAIC0yOCwzMiArMjgsMjIgQEAKIAogI2luY2x1ZGUgInBzYl9kcnYuaCIKIAotLypJTUcgSGVhZGVycyovCi0vKiNpbmNsdWRlICJzZXJ2aWNlc2ludC5oIiovCi0KIHN0cnVjdCBwc2JfZnJhbWVidWZmZXIgewogCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgYmFzZTsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqYWRkcl9zcGFjZTsKLQlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvOwotCXN0cnVjdCBmYl9pbmZvICogZmJkZXY7Ci0JLyogc3RydWN0IHR0bV9ib19rbWFwX29iaiBrbWFwOyAqLwotCXZvaWQgKnB2ckJPOwkvKiBGSVhNRTogc29ydCB0aGlzIG91dCAqLwotCXZvaWQgKiBoS2VybmVsTWVtSW5mbzsKLQl1aW50MzJfdCBzaXplOwotCXVpbnQzMl90IG9mZnNldDsKKwlzdHJ1Y3QgZmJfaW5mbyAqZmJkZXY7CisJc3RydWN0IGd0dF9yYW5nZSAqZ3R0OwogfTsKIAogc3RydWN0IHBzYl9mYmRldiB7CiAJc3RydWN0IGRybV9mYl9oZWxwZXIgcHNiX2ZiX2hlbHBlcjsKLQlzdHJ1Y3QgcHNiX2ZyYW1lYnVmZmVyICogcGZiOworCXN0cnVjdCBwc2JfZnJhbWVidWZmZXIgKnBmYjsKIH07CiAKIAogI2RlZmluZSB0b19wc2JfZmIoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBwc2JfZnJhbWVidWZmZXIsIGJhc2UpCiAKLQogZXh0ZXJuIGludCBwc2JfaW50ZWxfY29ubmVjdG9yX2Nsb25lcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgdHlwZV9tYXNrKTsKIAotCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfZmVuY2UuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2ZlbmNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MGFhNjQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfZmVuY2UuYworKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCBJbnRlbCBDb3Jwb3JhdGlvbi4KLSAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCi0gKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKLSAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KLSAqCi0gKgotICogQXV0aG9yczogVGhvbWFzIEhlbGxzdHJvbSA8dGhvbWFzLWF0LXR1bmdzdGVuZ3JhcGhpY3MtZG90LWNvbT4KLSAqLwotCi0jaW5jbHVkZSA8ZHJtL2RybVAuaD4KLSNpbmNsdWRlICJwc2JfZHJ2LmgiCi0KLQotc3RhdGljIHZvaWQgcHNiX2ZlbmNlX3BvbGwoc3RydWN0IHR0bV9mZW5jZV9kZXZpY2UgKmZkZXYsCi0JCQkgICB1aW50MzJfdCBmZW5jZV9jbGFzcywgdWludDMyX3Qgd2FpdGluZ190eXBlcykKLXsKLQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9Ci0JICAgIGNvbnRhaW5lcl9vZihmZGV2LCBzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlLCBmZGV2KTsKLQotCi0JaWYgKHVubGlrZWx5KCFkZXZfcHJpdikpCi0JCXJldHVybjsKLQotCWlmICh3YWl0aW5nX3R5cGVzID09IDApCi0JCXJldHVybjsKLQotCS8qIERSTV9FUlJPUigiUG9sbGluZyBmZW5jZSBzZXF1ZW5jZSwgZ290IDB4JTA4eFxuIiwgc2VxdWVuY2UpOyAqLwotCXR0bV9mZW5jZV9oYW5kbGVyKGZkZXYsIGZlbmNlX2NsYXNzLCAwIC8qIFNlcXVlbmNlICovLAotCQkJX1BTQl9GRU5DRV9UWVBFX0VYRSwgMCk7Ci19Ci0KLXZvaWQgcHNiX2ZlbmNlX2Vycm9yKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCSAgICAgdWludDMyX3QgZmVuY2VfY2xhc3MsCi0JCSAgICAgdWludDMyX3Qgc2VxdWVuY2UsIHVpbnQzMl90IHR5cGUsIGludCBlcnJvcikKLXsKLQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IHBzYl9wcml2KGRldik7Ci0Jc3RydWN0IHR0bV9mZW5jZV9kZXZpY2UgKmZkZXYgPSAmZGV2X3ByaXYtPmZkZXY7Ci0JdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7Ci0Jc3RydWN0IHR0bV9mZW5jZV9jbGFzc19tYW5hZ2VyICpmYyA9Ci0JICAgICZmZGV2LT5mZW5jZV9jbGFzc1tmZW5jZV9jbGFzc107Ci0KLQlCVUdfT04oZmVuY2VfY2xhc3MgPj0gUFNCX05VTV9FTkdJTkVTKTsKLQl3cml0ZV9sb2NrX2lycXNhdmUoJmZjLT5sb2NrLCBpcnFfZmxhZ3MpOwotCXR0bV9mZW5jZV9oYW5kbGVyKGZkZXYsIGZlbmNlX2NsYXNzLCBzZXF1ZW5jZSwgdHlwZSwgZXJyb3IpOwotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZmYy0+bG9jaywgaXJxX2ZsYWdzKTsKLX0KLQotaW50IHBzYl9mZW5jZV9lbWl0X3NlcXVlbmNlKHN0cnVjdCB0dG1fZmVuY2VfZGV2aWNlICpmZGV2LAotCQkJICAgIHVpbnQzMl90IGZlbmNlX2NsYXNzLAotCQkJICAgIHVpbnQzMl90IGZsYWdzLCB1aW50MzJfdCAqc2VxdWVuY2UsCi0JCQkgICAgdW5zaWduZWQgbG9uZyAqdGltZW91dF9qaWZmaWVzKQotewotCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0KLQkgICAgY29udGFpbmVyX29mKGZkZXYsIHN0cnVjdCBkcm1fcHNiX3ByaXZhdGUsIGZkZXYpOwotCi0JaWYgKCFkZXZfcHJpdikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoZmVuY2VfY2xhc3MgPj0gUFNCX05VTV9FTkdJTkVTKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCURSTV9FUlJPUigiVW5leHBlY3RlZCBmZW5jZSBjbGFzc1xuIik7Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyB2b2lkIHBzYl9mZW5jZV9sb2NrdXAoc3RydWN0IHR0bV9mZW5jZV9vYmplY3QgKmZlbmNlLAotCQkJICAgICB1aW50MzJfdCBmZW5jZV90eXBlcykKLXsKLQlEUk1fRVJST1IoIlVuc3VwcG9ydGVkIGZlbmNlIGNsYXNzXG4iKTsKLX0KLQotdm9pZCBwc2JfZmVuY2VfaGFuZGxlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50MzJfdCBmZW5jZV9jbGFzcykKLXsKLQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IHBzYl9wcml2KGRldik7Ci0Jc3RydWN0IHR0bV9mZW5jZV9kZXZpY2UgKmZkZXYgPSAmZGV2X3ByaXYtPmZkZXY7Ci0Jc3RydWN0IHR0bV9mZW5jZV9jbGFzc19tYW5hZ2VyICpmYyA9Ci0JICAgICZmZGV2LT5mZW5jZV9jbGFzc1tmZW5jZV9jbGFzc107Ci0JdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7Ci0KLQl3cml0ZV9sb2NrX2lycXNhdmUoJmZjLT5sb2NrLCBpcnFfZmxhZ3MpOwotCXBzYl9mZW5jZV9wb2xsKGZkZXYsIGZlbmNlX2NsYXNzLCBmYy0+d2FpdGluZ190eXBlcyk7Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmZjLT5sb2NrLCBpcnFfZmxhZ3MpOwotfQotCi0KLXN0YXRpYyBzdHJ1Y3QgdHRtX2ZlbmNlX2RyaXZlciBwc2JfdHRtX2ZlbmNlX2RyaXZlciA9IHsKLQkuaGFzX2lycSA9IE5VTEwsCi0JLmVtaXQgPSBwc2JfZmVuY2VfZW1pdF9zZXF1ZW5jZSwKLQkuZmx1c2ggPSBOVUxMLAotCS5wb2xsID0gcHNiX2ZlbmNlX3BvbGwsCi0JLm5lZWRlZF9mbHVzaCA9IE5VTEwsCi0JLndhaXQgPSBOVUxMLAotCS5zaWduYWxlZCA9IE5VTEwsCi0JLmxvY2t1cCA9IHBzYl9mZW5jZV9sb2NrdXAsCi19OwotCi1pbnQgcHNiX3R0bV9mZW5jZV9kZXZpY2VfaW5pdChzdHJ1Y3QgdHRtX2ZlbmNlX2RldmljZSAqZmRldikKLXsKLQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9Ci0JCWNvbnRhaW5lcl9vZihmZGV2LCBzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlLCBmZGV2KTsKLQlzdHJ1Y3QgdHRtX2ZlbmNlX2NsYXNzX2luaXQgZmNpID0gey53cmFwX2RpZmYgPSAoMSA8PCAzMCksCi0JCS5mbHVzaF9kaWZmID0gKDEgPDwgMjkpLAotCQkuc2VxdWVuY2VfbWFzayA9IDB4RkZGRkZGRkYKLQl9OwotCi0JcmV0dXJuIHR0bV9mZW5jZV9kZXZpY2VfaW5pdChQU0JfTlVNX0VOR0lORVMsCi0JCQkJICAgICBkZXZfcHJpdi0+bWVtX2dsb2JhbF9yZWYub2JqZWN0LAotCQkJCSAgICAgZmRldiwgJmZjaSwgMSwKLQkJCQkgICAgICZwc2JfdHRtX2ZlbmNlX2RyaXZlcik7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9nZW0uYyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2dlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZmY3YmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9nZW0uYwpAQCAtMCwwICsxLDMyMCBAQAorLyoKKyAqICBwc2IgR0VNIGludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKiBBdXRob3JzOiBBbGFuIENveAorICoKKyAqIFRPRE86CisgKgktCXdlIGRvbid0IGFjdHVhbGx5IHB1dCBHRU0gb2JqZWN0cyBpbnRvIHRoZSBHQVJUIHlldAorICoJLQl3ZSBuZWVkIHRvIHdvcmsgb3V0IGlmIHRoZSBNTVUgaXMgcmVsZXZhbnQgYXMgd2VsbCAoZWcgZm9yCisgKgkJYWNjZWxlcmF0ZWQgb3BlcmF0aW9ucyBvbiBhIEdFTSBvYmplY3QpCisgKgktCWNhY2hlIGNvaGVyZW5jeQorICoKKyAqIGllIHRoaXMgaXMganVzdCBhbiBpbml0aWFsIGZyYW1ld29yayB0byBnZXQgdXMgZ29pbmcuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybS5oPgorI2luY2x1ZGUgInBzYl9kcm0uaCIKKyNpbmNsdWRlICJwc2JfZHJ2LmgiCisKK2ludCBwc2JfZ2VtX2luaXRfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXJldHVybiAtRUlOVkFMOworfQorCit2b2lkIHBzYl9nZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IGd0dF9yYW5nZSAqZ3R0ID0gY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGd0dF9yYW5nZSwgZ2VtKTsKKwlwc2JfZ3R0X2ZyZWVfcmFuZ2Uob2JqLT5kZXYsIGd0dCk7CisJaWYgKG9iai0+bWFwX2xpc3QubWFwKSB7CisJCS8qIERvIHRoaW5ncyBHRU0gc2hvdWxkIGRvIGZvciB1cyAqLworCQlzdHJ1Y3QgZHJtX2dlbV9tbSAqbW0gPSBvYmotPmRldi0+bW1fcHJpdmF0ZTsKKwkJc3RydWN0IGRybV9tYXBfbGlzdCAqbGlzdCA9ICZvYmotPm1hcF9saXN0OworCQlkcm1faHRfcmVtb3ZlX2l0ZW0oJm1tLT5vZmZzZXRfaGFzaCwgJmxpc3QtPmhhc2gpOworCQlkcm1fbW1fcHV0X2Jsb2NrKGxpc3QtPmZpbGVfb2Zmc2V0X25vZGUpOworCQlrZnJlZShsaXN0LT5tYXApOworCQlsaXN0LT5tYXAgPSBOVUxMOworCX0KKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKG9iaik7Cit9CisKK2ludCBwc2JfZ2VtX2dldF9hcGVydHVyZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoqCisgKglwc2JfZ2VtX2NyZWF0ZV9tbWFwX29mZnNldAktCWludmVudCBhbiBtbWFwIG9mZnNldAorICoJQG9iajogb3VyIG9iamVjdAorICoKKyAqCVRoaXMgaXMgYmFzaWNhbGx5IGRvaW5nIGJ5IGhhbmQgYSBwaWxlIG9mIHVnbHkgY3JhcCB3aGljaCBzaG91bGQKKyAqCWJlIGRvbmUgYXV0b21hdGljYWxseSBieSB0aGUgR0VNIGxpYnJhcnkgY29kZSBidXQgaXNuJ3QKKyAqLworc3RhdGljIGludCBwc2JfZ2VtX2NyZWF0ZV9tbWFwX29mZnNldChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CisJc3RydWN0IGRybV9nZW1fbW0gKm1tID0gZGV2LT5tbV9wcml2YXRlOworCXN0cnVjdCBkcm1fbWFwX2xpc3QgKmxpc3Q7CisJc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcDsKKwlpbnQgcmV0OworCisJbGlzdCA9ICZvYmotPm1hcF9saXN0OworCWxpc3QtPm1hcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcm1fbWFwX2xpc3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAobGlzdC0+bWFwID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW1hcCA9IGxpc3QtPm1hcDsKKwltYXAtPnR5cGUgPSBfRFJNX0dFTTsKKwltYXAtPnNpemUgPSBvYmotPnNpemU7CisJbWFwLT5oYW5kbGUgPW9iajsKKworCWxpc3QtPmZpbGVfb2Zmc2V0X25vZGUgPSBkcm1fbW1fc2VhcmNoX2ZyZWUoJm1tLT5vZmZzZXRfbWFuYWdlciwKKwkJCQkJb2JqLT5zaXplIC8gUEFHRV9TSVpFLCAwLCAwKTsKKwlpZiAoIWxpc3QtPmZpbGVfb2Zmc2V0X25vZGUpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2NhdGUgb2Zmc2V0IGZvciBibyAlZFxuIiwgb2JqLT5uYW1lKTsKKwkJcmV0ID0gLUVOT1NQQzsKKwkJZ290byBmcmVlX2l0OworCX0KKwlsaXN0LT5maWxlX29mZnNldF9ub2RlID0gZHJtX21tX2dldF9ibG9jayhsaXN0LT5maWxlX29mZnNldF9ub2RlLAorCQkJCQlvYmotPnNpemUgLyBQQUdFX1NJWkUsIDApOworCWlmICghbGlzdC0+ZmlsZV9vZmZzZXRfbm9kZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfaXQ7CisJfQorCWxpc3QtPmhhc2gua2V5ID0gbGlzdC0+ZmlsZV9vZmZzZXRfbm9kZS0+c3RhcnQ7CisJcmV0ID0gZHJtX2h0X2luc2VydF9pdGVtKCZtbS0+b2Zmc2V0X2hhc2gsICZsaXN0LT5oYXNoKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGFkZCB0byBtYXAgaGFzaFxuIik7CisJCWdvdG8gZnJlZV9tbTsKKwl9CisJcmV0dXJuIDA7CisKK2ZyZWVfbW06CisJZHJtX21tX3B1dF9ibG9jayhsaXN0LT5maWxlX29mZnNldF9ub2RlKTsKK2ZyZWVfaXQ6CisJa2ZyZWUobGlzdC0+bWFwKTsKKwlsaXN0LT5tYXAgPSBOVUxMOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICoJcHNiX2dlbV9kdW1iX21hcF9ndHQJLQlidWZmZXIgbWFwcGluZyBmb3IgZHVtYiBpbnRlcmZhY2UKKyAqCUBmaWxlOiBvdXIgZHJtIGNsaWVudCBmaWxlCisgKglAZGV2OiBkcm0gZGV2aWNlCisgKglAaGFuZGxlOiBHRU0gaGFuZGxlIHRvIHRoZSBvYmplY3QgKGZyb20gZHVtYl9jcmVhdGUpCisgKgorICoJRG8gdGhlIG5lY2Vzc2FyeSBzZXR1cCB0byBhbGxvdyB0aGUgbWFwcGluZyBvZiB0aGUgZnJhbWUgYnVmZmVyCisgKglpbnRvIHVzZXIgbWVtb3J5LiBXZSBkb24ndCBoYXZlIHRvIGRvIG11Y2ggaGVyZSBhdCB0aGUgbW9tZW50LgorICovCitpbnQgcHNiX2dlbV9kdW1iX21hcF9ndHQoc3RydWN0IGRybV9maWxlICpmaWxlLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJIHVpbnQzMl90IGhhbmRsZSwgdWludDY0X3QgKm9mZnNldCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKworCWlmICghKGRldi0+ZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBEUklWRVJfR0VNKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJCQorCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCS8qIEdFTSBkb2VzIGFsbCBvdXIgaGFuZGxlIHRvIG9iamVjdCBtYXBwaW5nICovCisJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZSwgaGFuZGxlKTsKKwlpZiAob2JqID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byB1bmxvY2s7CisJfQorCS8qIFdoYXQgdmFsaWRhdGlvbiBpcyBuZWVkZWQgaGVyZSA/ICovCisJCisJLyogTWFrZSBpdCBtbWFwYWJsZSAqLworCWlmICghb2JqLT5tYXBfbGlzdC5tYXApIHsKKwkJcmV0ID0gcHNiX2dlbV9jcmVhdGVfbW1hcF9vZmZzZXQob2JqKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCX0KKwkvKiBHRU0gc2hvdWxkIHJlYWxseSB3b3JrIG91dCB0aGUgaGFzaCBvZmZzZXRzIGZvciB1cyAqLworCSpvZmZzZXQgPSAodTY0KW9iai0+bWFwX2xpc3QuaGFzaC5rZXkgPDwgUEFHRV9TSElGVDsKK291dDoKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOwordW5sb2NrOgorCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICoJcHNiX2dlbV9jcmVhdGUJCS0JY3JlYXRlIGEgbWFwcGFibGUgb2JqZWN0CisgKglAZmlsZTogdGhlIERSTSBmaWxlIG9mIHRoZSBjbGllbnQKKyAqCUBkZXY6IG91ciBkZXZpY2UKKyAqCUBzaXplOiB0aGUgc2l6ZSByZXF1ZXN0ZWQKKyAqCUBoYW5kbGVwOiByZXR1cm5lZCBoYW5kbGUgKG9wYXF1ZSBudW1iZXIpCisgKgorICoJQ3JlYXRlIGEgR0VNIG9iamVjdCwgZmlsbCBpbiB0aGUgYm9pbGVycGxhdGUgYW5kIGF0dGFjaCBhIGhhbmRsZSB0bworICoJaXQgc28gdGhhdCB1c2Vyc3BhY2UgY2FuIHNwZWFrIGFib3V0IGl0LiBUaGlzIGRvZXMgdGhlIGNvcmUgd29yaworICoJZm9yIHRoZSB2YXJpb3VzIG1ldGhvZHMgdGhhdCBkby93aWxsIGNyZWF0ZSBHRU0gb2JqZWN0cyBmb3IgdGhpbmdzCisgKi8KK3N0YXRpYyBpbnQgcHNiX2dlbV9jcmVhdGUoc3RydWN0IGRybV9maWxlICpmaWxlLAorCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQ2NF90IHNpemUsIHVpbnQzMl90ICpoYW5kbGVwKQoreworCXN0cnVjdCBndHRfcmFuZ2UgKnI7CisJaW50IHJldDsKKwl1MzIgaGFuZGxlOworCisJc2l6ZSA9IHJvdW5kdXAoc2l6ZSwgUEFHRV9TSVpFKTsKKworCS8qIEFsbG9jYXRlIG91ciBvYmplY3QgLSBmb3Igbm93IGEgZGlyZWN0IGd0dCByYW5nZSB3aGljaCBpcyBub3QgCisJICAgc3RvbGVuIG1lbW9yeSBiYWNrZWQgKi8KKwlyID0gcHNiX2d0dF9hbGxvY19yYW5nZShkZXYsIHNpemUsICJnZW0iLCAwKTsKKwlpZiAociA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT1NQQzsKKwkvKiBJbml0aWFsaXplIHRoZSBleHRyYSBnb29kaWVzIEdFTSBuZWVkcyB0byBkbyBhbGwgdGhlIGhhcmQgd29yayAqLworCWlmIChkcm1fZ2VtX29iamVjdF9pbml0KGRldiwgJnItPmdlbSwgc2l6ZSkgIT0gMCkgeworCQlwc2JfZ3R0X2ZyZWVfcmFuZ2UoZGV2LCByKTsKKwkJLyogR0VNIGRvZXNuJ3QgZ2l2ZSBhbiBlcnJvciBjb2RlIGFuZCB3ZSBkb24ndCBoYXZlIGFuCisJCSAgIEVHRU1TVUNLUyBzbyBtYWtlIHNvbWV0aGluZyB1cCBmb3Igbm93IC0gRklYTUUgKi8KKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCS8qIEdpdmUgdGhlIG9iamVjdCBhIGhhbmRsZSBzbyB3ZSBjYW4gY2FycnkgaXQgbW9yZSBlYXNpbHkgKi8KKwlyZXQgPSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmlsZSwgJnItPmdlbSwgJmhhbmRsZSk7CisJaWYgKHJldCkgeworCQlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKCZyLT5nZW0pOworCQlwc2JfZ3R0X2ZyZWVfcmFuZ2UoZGV2LCByKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJLyogV2UgaGF2ZSB0aGUgaW5pdGlhbCBhbmQgaGFuZGxlIHJlZmVyZW5jZSBidXQgbmVlZCBvbmx5IG9uZSBub3cgKi8KKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmci0+Z2VtKTsKKwkqaGFuZGxlcCA9IGhhbmRsZTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKglwc2JfZ2VtX2R1bWJfY3JlYXRlCS0JY3JlYXRlIGEgZHVtYiBidWZmZXIKKyAqCUBkcm1fZmlsZTogb3VyIGNsaWVudCBmaWxlCisgKglAZGV2OiBvdXIgZGV2aWNlCisgKglAYXJnczogdGhlIHJlcXVlc3RlZCBhcmd1bWVudHMgY29waWVkIGZyb20gdXNlcnNwYWNlCisgKgorICoJQWxsb2NhdGUgYSBidWZmZXIgc3VpdGFibGUgZm9yIHVzZSBmb3IgYSBmcmFtZSBidWZmZXIgb2YgdGhlCisgKglmb3JtIGRlc2NyaWJlZCBieSB1c2VyIHNwYWNlLiBHaXZlIHVzZXJzcGFjZSBhIGhhbmRsZSBieSB3aGljaAorICoJdG8gcmVmZXJlbmNlIGl0LgorICovCitpbnQgcHNiX2dlbV9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFyZ3MpCit7CisJYXJncy0+cGl0Y2ggPSBBTElHTihhcmdzLT53aWR0aCAqICgoYXJncy0+YnBwICsgNykgLyA4KSwgNjQpOworCWFyZ3MtPnNpemUgPSBhcmdzLT5waXRjaCAqIGFyZ3MtPmhlaWdodDsKKwlyZXR1cm4gcHNiX2dlbV9jcmVhdGUoZmlsZSwgZGV2LCBhcmdzLT5zaXplLCAmYXJncy0+aGFuZGxlKTsKK30KKworLyoqCisgKglwc2JfZ2VtX2R1bWJfZGVzdHJveQktCWRlc3Ryb3kgYSBkdW1iIGJ1ZmZlcgorICoJQGZpbGU6IGNsaWVudCBmaWxlCisgKglAZGV2OiBvdXIgRFJNIGRldmljZQorICoJQGhhbmRsZTogdGhlIG9iamVjdCBoYW5kbGUKKyAqCisgKglEZXN0cm95IGEgaGFuZGxlIHRoYXQgd2FzIGNyZWF0ZWQgdmlhIHBzYl9nZW1fZHVtYl9jcmVhdGUsIGF0IGxlYXN0CisgKgl3ZSBob3BlIGl0IHdhcyBjcmVhdGVkIHRoYXQgd2F5LiBpOTE1IHNlZW1zIHRvIGFzc3VtZSB0aGUgY2FsbGVyCisgKglkb2VzIHRoZSBjaGVja2luZyBidXQgdGhhdCBtaWdodCBiZSB3b3J0aCByZXZpZXcgISBGSVhNRQorICovCitpbnQgcHNiX2dlbV9kdW1iX2Rlc3Ryb3koc3RydWN0IGRybV9maWxlICpmaWxlLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJdWludDMyX3QgaGFuZGxlKQoreworCS8qIE5vIHNwZWNpYWwgd29yayBuZWVkZWQsIGRyb3AgdGhlIHJlZmVyZW5jZSBhbmQgc2VlIHdoYXQgZmFsbHMgb3V0ICovCisJcmV0dXJuIGRybV9nZW1faGFuZGxlX2RlbGV0ZShmaWxlLCBoYW5kbGUpOworfQorCisvKioKKyAqCXBzYl9nZW1fZmF1bHQJCS0JcGFnZWZhdWx0IGhhbmRsZXIgZm9yIEdFTSBvYmplY3RzCisgKglAdm1hOiB0aGUgVk1BIG9mIHRoZSBHRU0gb2JqZWN0CisgKglAdm1mOiBmYXVsdCBkZXRhaWwKKyAqCisgKglJbnZva2VkIHdoZW4gYSBmYXVsdCBvY2N1cnMgb24gYW4gbW1hcCBvZiBhIEdFTSBtYW5hZ2VkIGFyZWEuIEdFTQorICoJZG9lcyBtb3N0IG9mIHRoZSB3b3JrIGZvciB1cyBpbmNsdWRpbmcgdGhlIGFjdHVhbCBtYXAvdW5tYXAgY2FsbHMKKyAqCWJ1dCB3ZSBuZWVkIHRvIGRvIHRoZSBhY3R1YWwgcGFnZSB3b3JrLgorICoKKyAqCVRoaXMgY29kZSBldmVudHVhbGx5IG5lZWRzIHRvIGhhbmRsZSBmYXVsdGluZyBvYmplY3RzIGluIGFuZCBvdXQKKyAqCW9mIHRoZSBHQVJUIGFuZCByZXBhY2tpbmcgaXQgd2hlbiB3ZSBydW4gb3V0IG9mIHNwYWNlLiBXZSBjYW4gcHV0CisgKgl0aGF0IG9mZiBmb3Igbm93IGFuZCBmb3Igb3VyIHNpbXBsZSB1c2VzCisgKgorICoJVGhlIFZNQSB3YXMgc2V0IHVwIGJ5IEdFTS4gSW4gZG9pbmcgc28gaXQgYWxzbyBlbnN1cmVkIHRoYXQgdGhlCisgKgl2bWEtPnZtX3ByaXZhdGVfZGF0YSBwb2ludHMgdG8gdGhlIEdFTSBvYmplY3QgdGhhdCBpcyBiYWNraW5nIHRoaXMKKyAqCW1hcHBpbmcuCisgKgorICoJVG8gYXZvaWQgYWxpYXNpbmcgYW5kIGNhY2hlIGZ1bm5pZXMgd2Ugd2FudCB0byBtYXAgdGhlIG9iamVjdAorICoJdGhyb3VnaCB0aGUgR0FSVC4gRm9yIHRoZSBtb21lbnQgdGhpcyBpcyBzbGlnaHRseSBoYWNraXNoLiBJdCB3b3VsZAorICoJYmUgbmljZXIgaWYgR0VNIHByb3ZpZGVkIG1tYXAgb3BlbmVkL2Nsb3NlZCBob29rcyBmb3IgdXMgZ2l2aW5nCisgKgl0aGUgb2JqZWN0IHNvIHRoYXQgd2UgY291bGQgdHJhY2sgdGhpbmdzIG5pY2VseS4gVGhhdCBuZWVkcyBjaGFuZ2VzCisgKgl0byB0aGUgY29yZSBHRU0gY29kZSBzbyBtdXN0IGJlIHRhY2tsZWQgcG9zdCBzdGFnaW5nCisgKgorICoJRklYTUUKKyAqLworaW50IHBzYl9nZW1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBndHRfcmFuZ2UgKnI7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIHBmbjsKKwlwZ29mZl90IHBhZ2Vfb2Zmc2V0OworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CisKKwlvYmogPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsJLyogR0VNIG9iamVjdCAqLworCWRldiA9IG9iai0+ZGV2OworCisJciA9IGNvbnRhaW5lcl9vZihvYmosIHN0cnVjdCBndHRfcmFuZ2UsIGdlbSk7CS8qIEdldCB0aGUgZ3R0IHJhbmdlICovCisKKwkvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgcGFyYWxsZWwgdXBkYXRlIG9uIGEgZmF1bHQsIG5vciBtb3ZlIG9yIHJlbW92ZQorCSAgIHNvbWV0aGluZyBmcm9tIGJlbmVhdGggb3VyIGZlZXQgKi8KKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwkvKiBGb3Igbm93IHRoZSBtbWFwIHBpbnMgdGhlIG9iamVjdCBhbmQgaXQgc3RheXMgcGlubmVkLiBBcyB0aGluZ3MKKwkgICBzdGFuZCB0aGF0IHdpbGwgZG8gdXMgbm8gaGFybSAqLworCWlmIChyLT5tbWFwcGluZyA9PSAwKSB7CisJCXJldCA9IHBzYl9ndHRfcGluKHIpOworCQlpZiAocmV0IDwgMCkgeworCQkgICAgICAgIERSTV9FUlJPUigiZ21hNTAwOiBwaW4gZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICAgICAgfQorCQlyLT5tbWFwcGluZyA9IDE7CisJfQorCisJLyogRklYTUU6IExvY2tpbmcuIFdlIG1heSBhbHNvIG5lZWQgdG8gcmVwYWNrIHRoZSBHQVJUIHNvbWV0aW1lcyAqLworCisJLyogUGFnZSByZWxhdGl2ZSB0byB0aGUgVk1BIHN0YXJ0ICovCisJcGFnZV9vZmZzZXQgPSAoKHVuc2lnbmVkIGxvbmcpIHZtZi0+dmlydHVhbF9hZGRyZXNzIC0gdm1hLT52bV9zdGFydCkKKwkJCQk+PiBQQUdFX1NISUZUOworCisJLyogQnVzIGFkZHJlc3Mgb2YgdGhlIHBhZ2UgaXMgZ2FydCArIG9iamVjdCBvZmZzZXQgKyBwYWdlIG9mZnNldCAqLworCS8qIEFzc3VtZXMgZ3R0IGFsbG9jYXRpb25zIGFyZSBwYWdlIGFsaWduZWQgKi8KKwlwZm4gPSAoci0+cmVzb3VyY2Uuc3RhcnQgPj4gUEFHRV9TSElGVCkgKyBwYWdlX29mZnNldDsKKworCXByX2RlYnVnKCJPYmplY3QgR1RUIGJhc2UgYXQgJXBcbiIsICh2b2lkICopKHItPnJlc291cmNlLnN0YXJ0KSk7CisJcHJfZGVidWcoIkluc2VydGluZyAlcCBwZm4gJWx4LCBwYSAlbHhcbiIsIHZtZi0+dmlydHVhbF9hZGRyZXNzLAorCSAgICAgICAgcGZuLCBwZm4gPDwgUEFHRV9TSElGVCk7CisKKwlyZXQgPSB2bV9pbnNlcnRfcGZuKHZtYSwgKHVuc2lnbmVkIGxvbmcpdm1mLT52aXJ0dWFsX2FkZHJlc3MsIHBmbik7CisKK2ZhaWw6CisgICAgICAgIG11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXN3aXRjaCAocmV0KSB7CisJY2FzZSAwOgorCWNhc2UgLUVSRVNUQVJUU1lTOgorCWNhc2UgLUVJTlRSOgorCQlyZXR1cm4gVk1fRkFVTFRfTk9QQUdFOworCWNhc2UgLUVOT01FTToKKwkJcmV0dXJuIFZNX0ZBVUxUX09PTTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2d0dC5jIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfZ3R0LmMKaW5kZXggNTNjMWUxZS4uNzRjNWE2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfZ3R0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfZ3R0LmMKQEAgLTE2LDEyICsxNiwyNCBAQAogICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KICAqCiAgKiBBdXRob3JzOiBUaG9tYXMgSGVsbHN0cm9tIDx0aG9tYXMtYXQtdHVuZ3N0ZW5ncmFwaGljcy5jb20+CisgKgkgICAgQWxhbiBDb3ggPGFsYW5AbGludXguaW50ZWwuY29tPgogICovCiAKICNpbmNsdWRlIDxkcm0vZHJtUC5oPgogI2luY2x1ZGUgInBzYl9kcnYuaCIKLSNpbmNsdWRlICJwc2JfcHZyX2dsdWUuaCIKIAorCisvKgorICoJR1RUIHJlc291cmNlIGFsbG9jYXRvciAtIG1hbmFnZSBwYWdlIG1hcHBpbmdzIGluIEdUVCBzcGFjZQorICovCisKKy8qKgorICoJcHNiX2d0dF9tYXNrX3B0ZQktCWdlbmVyYXRlIEdBUlQgcHRlIGVudHJ5CisgKglAcGZuOiBwYWdlIG51bWJlciB0byBlbmNvZGUKKyAqCUB0eXBlOiB0eXBlIG9mIG1lbW9yeSBpbiB0aGUgR0FSVAorICoKKyAqCVNldCB0aGUgR0FSVCBlbnRyeSBmb3IgdGhlIGFwcHJvcHJpYXRlIG1lbW9yeSB0eXBlLgorICovCiBzdGF0aWMgaW5saW5lIHVpbnQzMl90IHBzYl9ndHRfbWFza19wdGUodWludDMyX3QgcGZuLCBpbnQgdHlwZSkKIHsKIAl1aW50MzJfdCBtYXNrID0gUFNCX1BURV9WQUxJRDsKQEAgLTM2LDYgKzQ4LDMyNyBAQAogCXJldHVybiAocGZuIDw8IFBBR0VfU0hJRlQpIHwgbWFzazsKIH0KIAorLyoqCisgKglwc2JfZ3R0X2VudHJ5CQktCWZpbmQgdGhlIEdBUlQgZW50cmllcyBmb3IgYSBndHRfcmFuZ2UKKyAqCUBkZXY6IG91ciBEUk0gZGV2aWNlCisgKglAcjogb3VyIEdUVCByYW5nZQorICogCisgKglHaXZlbiBhIGd0dF9yYW5nZSBvYmplY3QgcmV0dXJuIHRoZSBHQVJUIG9mZnNldCBvZiB0aGUgcGFnZSB0YWJsZQorICoJZW50cmllcyBmb3IgdGhpcyBndHRfcmFuZ2UKKyAqLwordTMyICpwc2JfZ3R0X2VudHJ5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBndHRfcmFuZ2UgKnIpCit7CisgICAgICAgIHN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKKworCW9mZnNldCA9IHItPnJlc291cmNlLnN0YXJ0IC0gZGV2X3ByaXYtPmd0dF9tZW0tPnN0YXJ0OworCisJcmV0dXJuIGRldl9wcml2LT5ndHRfbWFwICsgKG9mZnNldCA+PiBQQUdFX1NISUZUKTsKK30KKworLyoqCisgKglwc2JfZ3R0X2luc2VydAktCXB1dCBhbiBvYmplY3QgaW50byB0aGUgR0FSVAorICoJQGRldjogb3VyIERSTSBkZXZpY2UKKyAqCUByOiBvdXIgR1RUIHJhbmdlCisgKgorICoJVGFrZSBvdXIgcHJlYWxsb2NhdGVkIEdUVCByYW5nZSBhbmQgaW5zZXJ0IHRoZSBHRU0gb2JqZWN0IGludG8KKyAqCXRoZSBHQVJULgorICoKKyAqCUZJWE1FOiBndHQgbG9jayA/CisgKi8KK3N0YXRpYyBpbnQgcHNiX2d0dF9pbnNlcnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGd0dF9yYW5nZSAqcikKK3sKKyAgICAgICAgc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXUzMiAqZ3R0X3Nsb3QsIHB0ZTsKKwlpbnQgbnVtcGFnZXMgPSAoci0+cmVzb3VyY2UuZW5kICsgMSAtIHItPnJlc291cmNlLnN0YXJ0KSA+PiBQQUdFX1NISUZUOworCXN0cnVjdCBwYWdlICoqcGFnZXM7CisJaW50IGk7CisKKwlpZiAoci0+cGFnZXMgPT0gTlVMTCkgeworCQlXQVJOX09OKDEpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlXQVJOX09OKHItPnN0b2xlbik7CS8qIHJlZmNvdW50IHRoZXNlIG1heWJlID8gKi8KKworCWd0dF9zbG90ID0gcHNiX2d0dF9lbnRyeShkZXYsIHIpOworCXBhZ2VzID0gci0+cGFnZXM7CisKKwkvKiBNYWtlIHN1cmUgd2UgaGF2ZSBubyBhbGlhcyBwcmVzZW50ICovCisJd2JpbnZkKCk7CisKKwkvKiBXcml0ZSBvdXIgcGFnZSBlbnRyaWVzIGludG8gdGhlIEdBUlQgaXRzZWxmICovCisJZm9yIChpID0gMDsgaSA8IG51bXBhZ2VzOyBpKyspIHsKKwkJcHRlID0gcHNiX2d0dF9tYXNrX3B0ZShwYWdlX3RvX3BmbigqcGFnZXMrKyksIDAvKnR5cGUqLyk7CisJCWlvd3JpdGUzMihwdGUsIGd0dF9zbG90KyspOworCX0KKwkvKiBNYWtlIHN1cmUgYWxsIHRoZSBlbnRyaWVzIGFyZSBzZXQgYmVmb3JlIHdlIHJldHVybiAqLworCWlvcmVhZDMyKGd0dF9zbG90IC0gMSk7CisJCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJcHNiX2d0dF9yZW1vdmUJLQlyZW1vdmUgYW4gb2JqZWN0IGZyb20gdGhlIEdBUlQKKyAqCUBkZXY6IG91ciBEUk0gZGV2aWNlCisgKglAcjogb3VyIEdUVCByYW5nZQorICoKKyAqCVJlbW92ZSBhIHByZWFsbG9jYXRlZCBHVFQgcmFuZ2UgZnJvbSB0aGUgR0FSVC4gT3ZlcndyaXRlIGFsbCB0aGUKKyAqCXBhZ2UgdGFibGUgZW50cmllcyB3aXRoIHRoZSBkdW1teSBwYWdlCisgKi8KKworc3RhdGljIHZvaWQgcHNiX2d0dF9yZW1vdmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGd0dF9yYW5nZSAqcikKK3sKKwlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdTMyICpndHRfc2xvdCwgcHRlOworCWludCBudW1wYWdlcyA9IChyLT5yZXNvdXJjZS5lbmQgKyAxIC0gci0+cmVzb3VyY2Uuc3RhcnQpID4+IFBBR0VfU0hJRlQ7CisJaW50IGk7CisKKwlXQVJOX09OKHItPnN0b2xlbik7CisKKwlndHRfc2xvdCA9IHBzYl9ndHRfZW50cnkoZGV2LCByKTsKKwlwdGUgPSBwc2JfZ3R0X21hc2tfcHRlKHBhZ2VfdG9fcGZuKGRldl9wcml2LT5zY3JhdGNoX3BhZ2UpLCAwKTs7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtcGFnZXM7IGkrKykKKwkJaW93cml0ZTMyKHB0ZSwgZ3R0X3Nsb3QrKyk7CisJaW9yZWFkMzIoZ3R0X3Nsb3QgLSAxKTsKK30KKworLyoqCisgKglwc2JfZ3R0X2F0dGFjaF9wYWdlcwktCWF0dGFjaCBhbmQgcGluIEdFTSBwYWdlcworICoJQGd0OiB0aGUgZ3R0IHJhbmdlCisgKgorICoJUGluIGFuZCBidWlsZCBhbiBpbiBrZXJuZWwgbGlzdCBvZiB0aGUgcGFnZXMgdGhhdCBiYWNrIG91ciBHRU0gb2JqZWN0LgorICoJV2hpbGUgd2UgaG9sZCB0aGlzIHRoZSBwYWdlcyBjYW5ub3QgYmUgc3dhcHBlZCBvdXQKKyAqCisgKglGSVhNRTogRG8gd2UgbmVlZCB0byBjYWNoZSBmbHVzaCB3aGVuIHdlIHVwZGF0ZSB0aGUgR1RUCisgKi8KK3N0YXRpYyBpbnQgcHNiX2d0dF9hdHRhY2hfcGFnZXMoc3RydWN0IGd0dF9yYW5nZSAqZ3QpCit7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKKwlpbnQgaTsKKwlzdHJ1Y3QgcGFnZSAqcDsKKwlpbnQgcGFnZXMgPSAoZ3QtPnJlc291cmNlLmVuZCArIDEgLSBndC0+cmVzb3VyY2Uuc3RhcnQpID4+IFBBR0VfU0hJRlQ7CisKKwlXQVJOX09OKGd0LT5wYWdlcyk7CisKKwkvKiBUaGlzIGlzIHRoZSBzaGFyZWQgbWVtb3J5IG9iamVjdCB0aGF0IGJhY2tzIHRoZSBHRU0gcmVzb3VyY2UgKi8KKwlpbm9kZSA9IGd0LT5nZW0uZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwltYXBwaW5nID0gaW5vZGUtPmlfbWFwcGluZzsKKworCWd0LT5wYWdlcyA9IGttYWxsb2MocGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9LRVJORUwpOworCWlmIChndC0+cGFnZXMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJZm9yIChpID0gMDsgaSA8IHBhZ2VzOyBpKyspIHsKKwkJLyogRklYTUU6IHJldmlldyBmbGFncyBsYXRlciAqLworCQlwID0gcmVhZF9jYWNoZV9wYWdlX2dmcChtYXBwaW5nLCBpLAorCQkJCQlfX0dGUF9DT0xEIHwgR0ZQX0tFUk5FTCk7CisJCWlmIChJU19FUlIocCkpCisJCQlnb3RvIGVycjsKKwkJZ3QtPnBhZ2VzW2ldID0gcDsKKwl9CisJcmV0dXJuIDA7CisKK2VycjoKKwl3aGlsZSAoaS0tKQorCQlwYWdlX2NhY2hlX3JlbGVhc2UoZ3QtPnBhZ2VzW2ldKTsKKwlrZnJlZShndC0+cGFnZXMpOworCWd0LT5wYWdlcyA9IE5VTEw7CisJcmV0dXJuIFBUUl9FUlIocCk7Cit9CisKKy8qKgorICoJcHNiX2d0dF9kZXRhY2hfcGFnZXMJLQlhdHRhY2ggYW5kIHBpbiBHRU0gcGFnZXMKKyAqCUBndDogdGhlIGd0dCByYW5nZQorICoKKyAqCVVuZG8gdGhlIGVmZmVjdCBvZiBwc2JfZ3R0X2F0dGFjaF9wYWdlcy4gQXQgdGhpcyBwb2ludCB0aGUgcGFnZXMKKyAqCW11c3QgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgR0FSVCBhcyB0aGV5IGNvdWxkIG5vdyBiZSBwYWdlZCBvdXQKKyAqCWFuZCBtb3ZlIGJ1cyBhZGRyZXNzLgorICoKKyAqCUZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNhY2hlIGZsdXNoIHdoZW4gd2UgdXBkYXRlIHRoZSBHVFQKKyAqLworc3RhdGljIHZvaWQgcHNiX2d0dF9kZXRhY2hfcGFnZXMoc3RydWN0IGd0dF9yYW5nZSAqZ3QpCit7CisJaW50IGk7CisJaW50IHBhZ2VzID0gKGd0LT5yZXNvdXJjZS5lbmQgKyAxIC0gZ3QtPnJlc291cmNlLnN0YXJ0KSA+PiBQQUdFX1NISUZUOworCisJZm9yIChpID0gMDsgaSA8IHBhZ2VzOyBpKyspIHsKKwkJLyogRklYTUU6IGRvIHdlIG5lZWQgdG8gZm9yY2UgZGlydHkgKi8KKwkJc2V0X3BhZ2VfZGlydHkoZ3QtPnBhZ2VzW2ldKTsKKwkJLyogVW5kbyB0aGUgcmVmZXJlbmNlIHdlIHRvb2sgd2hlbiBwb3B1bGF0aW5nIHRoZSB0YWJsZSAqLworCQlwYWdlX2NhY2hlX3JlbGVhc2UoZ3QtPnBhZ2VzW2ldKTsKKwl9CisJa2ZyZWUoZ3QtPnBhZ2VzKTsKKwlndC0+cGFnZXMgPSBOVUxMOworfQorCisvKioKKyAqCXBzYl9ndHRfcGluCQktCXBpbiBwYWdlcyBpbnRvIHRoZSBHVFQKKyAqCUBndDogcmFuZ2UgdG8gcGluCisgKgorICoJUGluIGEgc2V0IG9mIHBhZ2VzIGludG8gdGhlIEdUVC4gVGhlIHBpbnMgYXJlIHJlZmNvdW50ZWQgc28gdGhhdAorICoJbXVsdGlwbGUgcGlucyBuZWVkIG11bHRpcGxlIHVucGlucyB0byB1bmRvLgorICoKKyAqCU5vbiBHRU0gYmFja2VkIG9iamVjdHMgdHJlYXQgdGhpcyBhcyBhIG5vLW9wIGFzIHRoZXkgYXJlIGFsd2F5cyBHVFQKKyAqCWJhY2tlZCBvYmplY3RzLgorICovCitpbnQgcHNiX2d0dF9waW4oc3RydWN0IGd0dF9yYW5nZSAqZ3QpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZ3QtPmdlbS5kZXY7CisJc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmd0dF9tdXRleCk7CisKKwlpZiAoZ3QtPmluX2dhcnQgPT0gMCAmJiBndC0+c3RvbGVuID09IDApIHsKKwkJcmV0ID0gcHNiX2d0dF9hdHRhY2hfcGFnZXMoZ3QpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCQlyZXQgPSBwc2JfZ3R0X2luc2VydChkZXYsIGd0KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXBzYl9ndHRfZGV0YWNoX3BhZ2VzKGd0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCWd0LT5pbl9nYXJ0Kys7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+Z3R0X211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqCXBzYl9ndHRfdW5waW4JCS0JRHJvcCBhIEdUVCBwaW4gcmVxdWlyZW1lbnQKKyAqCUBndDogcmFuZ2UgdG8gcGluCisgKgorICoJVW5kb2VzIHRoZSBlZmZlY3Qgb2YgcHNiX2d0dF9waW4uIE9uIHRoZSBsYXN0IGRyb3AgdGhlIEdFTSBvYmplY3QKKyAqCXdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBHVFQgd2hpY2ggd2lsbCBhbHNvIGRyb3AgdGhlIHBhZ2UgcmVmZXJlbmNlcworICoJYW5kIGFsbG93IHRoZSBWTSB0byBjbGVhbiB1cCBvciBwYWdlIHN0dWZmLgorICoKKyAqCU5vbiBHRU0gYmFja2VkIG9iamVjdHMgdHJlYXQgdGhpcyBhcyBhIG5vLW9wIGFzIHRoZXkgYXJlIGFsd2F5cyBHVFQKKyAqCWJhY2tlZCBvYmplY3RzLgorICovCit2b2lkIHBzYl9ndHRfdW5waW4oc3RydWN0IGd0dF9yYW5nZSAqZ3QpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGd0LT5nZW0uZGV2OworCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCW11dGV4X2xvY2soJmRldl9wcml2LT5ndHRfbXV0ZXgpOworCisJV0FSTl9PTighZ3QtPmluX2dhcnQpOworCisJZ3QtPmluX2dhcnQtLTsKKwlpZiAoZ3QtPmluX2dhcnQgPT0gMCAmJiBndC0+c3RvbGVuID09IDApIHsKKwkJcHNiX2d0dF9yZW1vdmUoZGV2LCBndCk7CisJCXBzYl9ndHRfZGV0YWNoX3BhZ2VzKGd0KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+Z3R0X211dGV4KTsKK30KKwkKKy8qCisgKglHVFQgcmVzb3VyY2UgYWxsb2NhdG9yIC0gYWxsb2NhdGUgYW5kIG1hbmFnZSBHVFQgYWRkcmVzcyBzcGFjZQorICovCisKKy8qKgorICoJcHNiX2d0dF9hbGxvY19yYW5nZQktCWFsbG9jYXRlIEdUVCBhZGRyZXNzIHNwYWNlCisgKglAZGV2OiBPdXIgRFJNIGRldmljZQorICoJQGxlbjogbGVuZ3RoIChieXRlcykgb2YgYWRkcmVzcyBzcGFjZSByZXF1aXJlZAorICoJQG5hbWU6IHJlc291cmNlIG5hbWUKKyAqCUBiYWNrZWQ6IHJlc291cmNlIHNob3VsZCBiZSBiYWNrZWQgYnkgc3RvbGVuIHBhZ2VzCisgKgorICoJQXNrIHRoZSBrZXJuZWwgY29yZSB0byBmaW5kIHVzIGEgc3VpdGFibGUgcmFuZ2Ugb2YgYWRkcmVzc2VzCisgKgl0byB1c2UgZm9yIGEgR1RUIG1hcHBpbmcuCisgKgorICoJUmV0dXJucyBhIGd0dF9yYW5nZSBzdHJ1Y3R1cmUgZGVzY3JpYmluZyB0aGUgb2JqZWN0LCBvciBOVUxMIG9uCisgKgllcnJvci4gT24gc3VjY2Vzc2Z1bCByZXR1cm4gdGhlIHJlc291cmNlIGlzIGJvdGggYWxsb2NhdGVkIGFuZCBtYXJrZWQKKyAqCWFzIGluIHVzZS4KKyAqLworc3RydWN0IGd0dF9yYW5nZSAqcHNiX2d0dF9hbGxvY19yYW5nZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgbGVuLAorCQkJCQkJY29uc3QgY2hhciAqbmFtZSwgaW50IGJhY2tlZCkKK3sKKwlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGd0dF9yYW5nZSAqZ3Q7CisJc3RydWN0IHJlc291cmNlICpyID0gZGV2X3ByaXYtPmd0dF9tZW07CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CisJCisJaWYgKGJhY2tlZCkgeworCSAgICAgICAgLyogVGhlIHN0YXJ0IG9mIHRoZSBHVFQgaXMgdGhlIHN0b2xlbiBwYWdlcyAqLworCSAgICAgICAgc3RhcnQgPSByLT5zdGFydDsKKwkgICAgICAgIGVuZCA9IHItPnN0YXJ0ICsgZGV2X3ByaXYtPnBnLT5zdG9sZW5fc2l6ZSAtIDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyogVGhlIHJlc3Qgd2Ugd2lsbCB1c2UgZm9yIEdFTSBiYWNrZWQgb2JqZWN0cyAqLworICAgICAgICAgICAgICAgIHN0YXJ0ID0gci0+c3RhcnQgKyBkZXZfcHJpdi0+cGctPnN0b2xlbl9zaXplOworICAgICAgICAgICAgICAgIGVuZCA9IHItPmVuZDsKKyAgICAgICAgfQorCisJZ3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZ3R0X3JhbmdlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGd0ID09IE5VTEwpCisJCXJldHVybiBOVUxMOworICAgICAgICBndC0+cmVzb3VyY2UubmFtZSA9IG5hbWU7CisgICAgICAgIGd0LT5zdG9sZW4gPSBiYWNrZWQ7CisgICAgICAgIGd0LT5pbl9nYXJ0ID0gYmFja2VkOworICAgICAgICAvKiBFbnN1cmUgdGhpcyBpcyBzZXQgZm9yIG5vbiBHRU0gb2JqZWN0cyAqLworICAgICAgICBndC0+Z2VtLmRldiA9IGRldjsKKwlrcmVmX2luaXQoJmd0LT5rcmVmKTsKKworCXJldCA9IGFsbG9jYXRlX3Jlc291cmNlKGRldl9wcml2LT5ndHRfbWVtLCAmZ3QtPnJlc291cmNlLAorCQkJCWxlbiwgc3RhcnQsIGVuZCwgUEFHRV9TSVpFLCBOVUxMLCBOVUxMKTsKKwlpZiAocmV0ID09IDApIHsKKwkgICAgICAgIGd0LT5vZmZzZXQgPSBndC0+cmVzb3VyY2Uuc3RhcnQgLSByLT5zdGFydDsKKwkJcmV0dXJuIGd0OworICAgICAgICB9CisJa2ZyZWUoZ3QpOworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqCXBzYl9ndHRfZGVzdHJveQkJLQlmaW5hbCBmcmVlIHVwIG9mIGEgZ3R0CisgKglAa3JlZjogdGhlIGtyZWYgb2YgdGhlIGd0dAorICoKKyAqCUNhbGxlZCBmcm9tIHRoZSBrZXJuZWwga3JlZiBwdXQgd2hlbiB0aGUgZmluYWwgcmVmZXJlbmNlIHRvIG91cgorICoJR1RUIG9iamVjdCBpcyBkcm9wcGVkLiBBdCB0aGF0IHBvaW50IHdlIGNhbiBmcmVlIHVwIHRoZSByZXNvdXJjZXMuCisgKgorICoJRm9yIG5vdyB3ZSBoYW5kbGUgbW1hcCBjbGVhbiB1cCBoZXJlIHRvIHdvcmsgYXJvdW5kIGxpbWl0cyBpbiBHRU0KKyAqLworc3RhdGljIHZvaWQgcHNiX2d0dF9kZXN0cm95KHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBndHRfcmFuZ2UgKmd0ID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBndHRfcmFuZ2UsIGtyZWYpOworCisJLyogVW5kbyB0aGUgbW1hcCBwaW4gaWYgd2UgYXJlIGRlc3Ryb3lpbmcgdGhlIG9iamVjdCAqLworCWlmIChndC0+bW1hcHBpbmcpIHsKKwkJcHNiX2d0dF91bnBpbihndCk7CisJCWd0LT5tbWFwcGluZyA9IDA7CisJfQorCVdBUk5fT04oZ3QtPmluX2dhcnQgJiYgIWd0LT5zdG9sZW4pOworCXJlbGVhc2VfcmVzb3VyY2UoJmd0LT5yZXNvdXJjZSk7CisJa2ZyZWUoZ3QpOworfQorCisvKioKKyAqCXBzYl9ndHRfa3JlZl9wdXQJLQlkcm9wIHJlZmVyZW5jZSB0byBhIEdUVCBvYmplY3QKKyAqCUBndDogdGhlIEdUIGJlaW5nIGRyb3BwZWQKKyAqCisgKglEcm9wIGEgcmVmZXJlbmNlIHRvIGEgcHNiIGd0dAorICovCit2b2lkIHBzYl9ndHRfa3JlZl9wdXQoc3RydWN0IGd0dF9yYW5nZSAqZ3QpCit7CisJa3JlZl9wdXQoJmd0LT5rcmVmLCBwc2JfZ3R0X2Rlc3Ryb3kpOworfQorCisvKioKKyAqCXBzYl9ndHRfZnJlZV9yYW5nZQktCXJlbGVhc2UgR1RUIGFkZHJlc3Mgc3BhY2UKKyAqCUBkZXY6IG91ciBEUk0gZGV2aWNlCisgKglAZ3Q6IGEgbWFwcGluZyBjcmVhdGVkIHdpdGggcHNiX2d0dF9hbGxvY19yYW5nZQorICoKKyAqCVJlbGVhc2UgYSByZXNvdXJjZSB0aGF0IHdhcyBhbGxvY2F0ZWQgd2l0aCBwc2JfZ3R0X2FsbG9jX3JhbmdlCisgKi8KK3ZvaWQgcHNiX2d0dF9mcmVlX3JhbmdlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBndHRfcmFuZ2UgKmd0KQoreworCXBzYl9ndHRfa3JlZl9wdXQoZ3QpOworfQorCisKIHN0cnVjdCBwc2JfZ3R0ICpwc2JfZ3R0X2FsbG9jKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHBzYl9ndHQgKnRtcCA9IGt6YWxsb2Moc2l6ZW9mKCp0bXApLCBHRlBfS0VSTkVMKTsKQEAgLTQ5LDk4ICszODIsODkgQEAKIAlyZXR1cm4gdG1wOwogfQogCi12b2lkIHBzYl9ndHRfdGFrZWRvd24oc3RydWN0IHBzYl9ndHQgKnBnLCBpbnQgZnJlZSkKK3ZvaWQgcHNiX2d0dF90YWtlZG93bihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gcGctPmRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCi0JaWYgKCFwZykKLQkJcmV0dXJuOwotCi0JaWYgKHBnLT5ndHRfbWFwKSB7Ci0JCWlvdW5tYXAocGctPmd0dF9tYXApOwotCQlwZy0+Z3R0X21hcCA9IE5VTEw7CisJLyogRklYTUU6IGlvdW5tYXAgZGV2X3ByaXYtPnZyYW1fYWRkciBldGMgKi8KKwlpZiAoZGV2X3ByaXYtPmd0dF9tYXApIHsKKwkJaW91bm1hcChkZXZfcHJpdi0+Z3R0X21hcCk7CisJCWRldl9wcml2LT5ndHRfbWFwID0gTlVMTDsKIAl9Ci0JaWYgKHBnLT5pbml0aWFsaXplZCkgewotCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGctPmRldi0+cGRldiwgUFNCX0dNQ0hfQ1RSTCwKLQkJCQkgICAgICBwZy0+Z21jaF9jdHJsKTsKLQkJUFNCX1dWREMzMihwZy0+cGdlX2N0bCwgUFNCX1BHRVRCTF9DVEwpOworCWlmIChkZXZfcHJpdi0+Z3R0X2luaXRpYWxpemVkKSB7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYtPnBkZXYsIFBTQl9HTUNIX0NUUkwsCisJCQkJICAgICAgZGV2X3ByaXYtPmdtY2hfY3RybCk7CisJCVBTQl9XVkRDMzIoZGV2X3ByaXYtPnBnZV9jdGwsIFBTQl9QR0VUQkxfQ1RMKTsKIAkJKHZvaWQpIFBTQl9SVkRDMzIoUFNCX1BHRVRCTF9DVEwpOwogCX0KLQlpZiAoZnJlZSkKLQkJa2ZyZWUocGcpOworCWtmcmVlKGRldl9wcml2LT5wZyk7CisJZGV2X3ByaXYtPnBnID0gTlVMTDsKIH0KIAotaW50IHBzYl9ndHRfaW5pdChzdHJ1Y3QgcHNiX2d0dCAqcGcsIGludCByZXN1bWUpCitpbnQgcHNiX2d0dF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCByZXN1bWUpCiB7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBnLT5kZXY7CiAJc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXVuc2lnbmVkIGd0dF9wYWdlczsKLQl1bnNpZ25lZCBsb25nIHN0b2xlbl9zaXplLCB2cmFtX3N0b2xlbl9zaXplLCBjaV9zdG9sZW5fc2l6ZTsKLQl1bnNpZ25lZCBsb25nIHJhcl9zdG9sZW5fc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHN0b2xlbl9zaXplLCB2cmFtX3N0b2xlbl9zaXplOwogCXVuc2lnbmVkIGksIG51bV9wYWdlczsKIAl1bnNpZ25lZCBwZm5fYmFzZTsKLQl1aW50MzJfdCBjaV9wYWdlcywgdnJhbV9wYWdlczsKKwl1aW50MzJfdCB2cmFtX3BhZ2VzOwogCXVpbnQzMl90IHR0X3BhZ2VzOwogCXVpbnQzMl90ICp0dG1fZ3R0X21hcDsKIAl1aW50MzJfdCBkdm10X21vZGUgPSAwOworCXN0cnVjdCBwc2JfZ3R0ICpwZzsKIAogCWludCByZXQgPSAwOwogCXVpbnQzMl90IHB0ZTsKIAotCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldi0+cGRldiwgUFNCX0dNQ0hfQ1RSTCwgJnBnLT5nbWNoX2N0cmwpOwotCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYtPnBkZXYsIFBTQl9HTUNIX0NUUkwsCi0JCQkgICAgICBwZy0+Z21jaF9jdHJsIHwgX1BTQl9HTUNIX0VOQUJMRUQpOworCW11dGV4X2luaXQoJmRldl9wcml2LT5ndHRfbXV0ZXgpOwogCi0JcGctPnBnZV9jdGwgPSBQU0JfUlZEQzMyKFBTQl9QR0VUQkxfQ1RMKTsKLQlQU0JfV1ZEQzMyKHBnLT5wZ2VfY3RsIHwgX1BTQl9QR0VUQkxfRU5BQkxFRCwgUFNCX1BHRVRCTF9DVEwpOworCWRldl9wcml2LT5wZyA9IHBnID0gcHNiX2d0dF9hbGxvYyhkZXYpOworCWlmIChwZyA9PSBOVUxMKQorCSAgICAgICAgcmV0dXJuIC1FTk9NRU07CisKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYtPnBkZXYsIFBTQl9HTUNIX0NUUkwsICZkZXZfcHJpdi0+Z21jaF9jdHJsKTsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LT5wZGV2LCBQU0JfR01DSF9DVFJMLAorCQkJICAgICAgZGV2X3ByaXYtPmdtY2hfY3RybCB8IF9QU0JfR01DSF9FTkFCTEVEKTsKKworCWRldl9wcml2LT5wZ2VfY3RsID0gUFNCX1JWREMzMihQU0JfUEdFVEJMX0NUTCk7CisJUFNCX1dWREMzMihkZXZfcHJpdi0+cGdlX2N0bCB8IF9QU0JfUEdFVEJMX0VOQUJMRUQsIFBTQl9QR0VUQkxfQ1RMKTsKIAkodm9pZCkgUFNCX1JWREMzMihQU0JfUEdFVEJMX0NUTCk7CiAKLQlwZy0+aW5pdGlhbGl6ZWQgPSAxOworCS8qIFRoZSByb290IHJlc291cmNlIHdlIGFsbG9jYXRlIGFkZHJlc3Mgc3BhY2UgZnJvbSAqLworCWRldl9wcml2LT5ndHRfbWVtID0gJmRldi0+cGRldi0+cmVzb3VyY2VbUFNCX0dBVFRfUkVTT1VSQ0VdOwogCi0JcGctPmd0dF9waHlzX3N0YXJ0ID0gcGctPnBnZV9jdGwgJiBQQUdFX01BU0s7CisJZGV2X3ByaXYtPmd0dF9pbml0aWFsaXplZCA9IDE7CisKKwlwZy0+Z3R0X3BoeXNfc3RhcnQgPSBkZXZfcHJpdi0+cGdlX2N0bCAmIFBBR0VfTUFTSzsKIAogCXBnLT5nYXR0X3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgUFNCX0dBVFRfUkVTT1VSQ0UpOwogCS8qIGZpeCBtZTogdmlkZW8gbW11IGhhcyBodyBidWcgdG8gYWNjZXNzIDB4MEQwMDAwMDAwLAogCSAqIHRoZW4gbWFrZSBnYXR0IHN0YXJ0IGF0IDB4MGUwMDAsMDAwMCAqLwotCXBnLT5tbXVfZ2F0dF9zdGFydCA9IFBTQl9NRU1fVFRfU1RBUlQ7CisJcGctPm1tdV9nYXR0X3N0YXJ0ID0gMHhFMDAwMDAwMDsKIAlwZy0+Z3R0X3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgUFNCX0dUVF9SRVNPVVJDRSk7CiAJZ3R0X3BhZ2VzID0KIAkgICAgcGNpX3Jlc291cmNlX2xlbihkZXYtPnBkZXYsIFBTQl9HVFRfUkVTT1VSQ0UpID4+IFBBR0VfU0hJRlQ7CiAJcGctPmdhdHRfcGFnZXMgPSBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGRldiwgUFNCX0dBVFRfUkVTT1VSQ0UpCiAJICAgID4+IFBBR0VfU0hJRlQ7CiAKLQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LT5wZGV2LCBQU0JfQlNNLCAmcGctPnN0b2xlbl9iYXNlKTsKLQl2cmFtX3N0b2xlbl9zaXplID0gcGctPmd0dF9waHlzX3N0YXJ0IC0gcGctPnN0b2xlbl9iYXNlIC0gUEFHRV9TSVpFOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYtPnBkZXYsIFBTQl9CU00sICZkZXZfcHJpdi0+c3RvbGVuX2Jhc2UpOworCXZyYW1fc3RvbGVuX3NpemUgPSBwZy0+Z3R0X3BoeXNfc3RhcnQgLSBkZXZfcHJpdi0+c3RvbGVuX2Jhc2UgLSBQQUdFX1NJWkU7CiAKLQkvKiBDSSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIHN0b2xlbiBzaXplIHNpbmNlIHRoZSBUT1BBWiBNTVUgYnVnICovCi0JY2lfc3RvbGVuX3NpemUgPSBkZXZfcHJpdi0+Y2lfcmVnaW9uX3NpemU7Ci0JLyogRG9uJ3QgYWRkIENJICYgUkFSIHNoYXJlIGJ1ZmZlciBzcGFjZQotCSAqIG1hbmFnZWQgYnkgVFRNIHRvIHN0b2xlbl9zaXplICovCiAJc3RvbGVuX3NpemUgPSB2cmFtX3N0b2xlbl9zaXplOwogCi0JcmFyX3N0b2xlbl9zaXplID0gZGV2X3ByaXYtPnJhcl9yZWdpb25fc2l6ZTsKLQogCXByaW50ayhLRVJOX0lORk8iR01NQURSKHJlZ2lvbiAwKSBzdGFydDogMHglMDh4ICglZE0pLlxuIiwKIAkJcGctPmdhdHRfc3RhcnQsIHBnLT5nYXR0X3BhZ2VzLzI1Nik7CiAJcHJpbnRrKEtFUk5fSU5GTyJHVFRBRFIocmVnaW9uIDMpIHN0YXJ0OiAweCUwOHggKGNhbiBtYXAgJWRNIFJBTSksIGFuZCBhY3R1YWwgUkFNIGJhc2UgMHglMDh4LlxuIiwKIAkJcGctPmd0dF9zdGFydCwgZ3R0X3BhZ2VzICogNCwgcGctPmd0dF9waHlzX3N0YXJ0KTsKLQlwcmludGsoS0VSTl9JTkZPICJTdG9sZSBtZW1vcnkgaW5mb3JtYXRpb25cbiIpOwotCXByaW50ayhLRVJOX0lORk8gIiAgICAgIGJhc2UgaW4gUkFNOiAweCV4XG4iLCBwZy0+c3RvbGVuX2Jhc2UpOwotCXByaW50ayhLRVJOX0lORk8gIiAgICAgIHNpemU6ICVsdUssIGNhbGN1bGF0ZWQgYnkgKEdUVCBSQU0gYmFzZSkgLSAoU3RvbGVuIGJhc2UpLCBzZWVtcyB3cm9uZ1xuIiwKKwlwcmludGsoS0VSTl9JTkZPICJTdG9sZW4gbWVtb3J5IGluZm9ybWF0aW9uXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICIgICAgICAgYmFzZSBpbiBSQU06IDB4JXhcbiIsIGRldl9wcml2LT5zdG9sZW5fYmFzZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiICAgICAgIHNpemU6ICVsdUssIGNhbGN1bGF0ZWQgYnkgKEdUVCBSQU0gYmFzZSkgLSAoU3RvbGVuIGJhc2UpLCBzZWVtcyB3cm9uZ1xuIiwKIAkJdnJhbV9zdG9sZW5fc2l6ZS8xMDI0KTsKLQlkdm10X21vZGUgPSAocGctPmdtY2hfY3RybCA+PiA0KSAmIDB4NzsKKwlkdm10X21vZGUgPSAoZGV2X3ByaXYtPmdtY2hfY3RybCA+PiA0KSAmIDB4NzsKIAlwcmludGsoS0VSTl9JTkZPICIgICAgICB0aGUgY29ycmVjdCBzaXplIHNob3VsZCBiZTogJWRNKGR2bXQgbW9kZT0lZClcbiIsCiAJCShkdm10X21vZGUgPT0gMSkgPyAxIDogKDIgPDwgKGR2bXRfbW9kZSAtIDEpKSwgZHZtdF9tb2RlKTsKIAotCWlmIChjaV9zdG9sZW5fc2l6ZSA+IDApCi0JCXByaW50ayhLRVJOX0lORk8iQ0kgU3RvbGUgbWVtb3J5OiBSQU0gYmFzZSA9IDB4JTA4eCwgc2l6ZSA9ICVsdSBNXG4iLAotCQkJCWRldl9wcml2LT5jaV9yZWdpb25fc3RhcnQsCi0JCQkJY2lfc3RvbGVuX3NpemUgLyAxMDI0IC8gMTAyNCk7Ci0JaWYgKHJhcl9zdG9sZW5fc2l6ZSA+IDApCi0JCXByaW50ayhLRVJOX0lORk8gIlJBUiBTdG9sZSBtZW1vcnk6IFJBTSBiYXNlID0gMHglMDh4LCBzaXplID0gJWx1IE1cbiIsCi0JCQlkZXZfcHJpdi0+cmFyX3JlZ2lvbl9zdGFydCwKLQkJCXJhcl9zdG9sZW5fc2l6ZSAvIDEwMjQgLyAxMDI0KTsKLQogCWlmIChyZXN1bWUgJiYgKGd0dF9wYWdlcyAhPSBwZy0+Z3R0X3BhZ2VzKSAmJgogCSAgICAoc3RvbGVuX3NpemUgIT0gcGctPnN0b2xlbl9zaXplKSkgewogCQlEUk1fRVJST1IoIkdUVCByZXN1bWUgZXJyb3IuXG4iKTsKQEAgLTE1MCw0MiArNDc0LDQwIEBACiAKIAlwZy0+Z3R0X3BhZ2VzID0gZ3R0X3BhZ2VzOwogCXBnLT5zdG9sZW5fc2l6ZSA9IHN0b2xlbl9zaXplOwotCXBnLT52cmFtX3N0b2xlbl9zaXplID0gdnJhbV9zdG9sZW5fc2l6ZTsKLQlwZy0+Y2lfc3RvbGVuX3NpemUgPSBjaV9zdG9sZW5fc2l6ZTsKLQlwZy0+cmFyX3N0b2xlbl9zaXplID0gcmFyX3N0b2xlbl9zaXplOwotCXBnLT5ndHRfbWFwID0KKwlkZXZfcHJpdi0+dnJhbV9zdG9sZW5fc2l6ZSA9IHZyYW1fc3RvbGVuX3NpemU7CisJZGV2X3ByaXYtPmd0dF9tYXAgPQogCSAgICBpb3JlbWFwX25vY2FjaGUocGctPmd0dF9waHlzX3N0YXJ0LCBndHRfcGFnZXMgPDwgUEFHRV9TSElGVCk7Ci0JaWYgKCFwZy0+Z3R0X21hcCkgeworCWlmICghZGV2X3ByaXYtPmd0dF9tYXApIHsKIAkJRFJNX0VSUk9SKCJGYWlsdXJlIHRvIG1hcCBndHQuXG4iKTsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXRfZXJyOwogCX0KIAotCXBnLT52cmFtX2FkZHIgPSBpb3JlbWFwX3djKHBnLT5zdG9sZW5fYmFzZSwgc3RvbGVuX3NpemUpOwotCWlmICghcGctPnZyYW1fYWRkcikgeworCWRldl9wcml2LT52cmFtX2FkZHIgPSBpb3JlbWFwX3djKGRldl9wcml2LT5zdG9sZW5fYmFzZSwgc3RvbGVuX3NpemUpOworCWlmICghZGV2X3ByaXYtPnZyYW1fYWRkcikgewogCQlEUk1fRVJST1IoIkZhaWx1cmUgdG8gbWFwIHN0b2xlbiBiYXNlLlxuIik7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X2VycjsKIAl9CiAKLQlEUk1fREVCVUcoIiVzOiB2cmFtIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MgJXBcbiIsIHBnLT52cmFtX2FkZHIpOworCURSTV9ERUJVRygiJXM6IHZyYW0ga2VybmVsIHZpcnR1YWwgYWRkcmVzcyAlcFxuIiwgZGV2X3ByaXYtPnZyYW1fYWRkcik7CiAKIAl0dF9wYWdlcyA9IChwZy0+Z2F0dF9wYWdlcyA8IFBTQl9UVF9QUklWMF9QTElNSVQpID8KIAkJKHBnLT5nYXR0X3BhZ2VzKSA6IFBTQl9UVF9QUklWMF9QTElNSVQ7CiAKLQl0dG1fZ3R0X21hcCA9IHBnLT5ndHRfbWFwICsgdHRfcGFnZXMgLyAyOworCXR0bV9ndHRfbWFwID0gZGV2X3ByaXYtPmd0dF9tYXAgKyB0dF9wYWdlcyAvIDI7CiAKIAkvKgogCSAqIGluc2VydCB2cmFtIHN0b2xlbiBwYWdlcy4KIAkgKi8KIAotCXBmbl9iYXNlID0gcGctPnN0b2xlbl9iYXNlID4+IFBBR0VfU0hJRlQ7CisJcGZuX2Jhc2UgPSBkZXZfcHJpdi0+c3RvbGVuX2Jhc2UgPj4gUEFHRV9TSElGVDsKIAl2cmFtX3BhZ2VzID0gbnVtX3BhZ2VzID0gdnJhbV9zdG9sZW5fc2l6ZSA+PiBQQUdFX1NISUZUOwogCXByaW50ayhLRVJOX0lORk8iU2V0IHVwICVkIHN0b2xlbiBwYWdlcyBzdGFydGluZyBhdCAweCUwOHgsIEdUVCBvZmZzZXQgJWRLXG4iLAogCQludW1fcGFnZXMsIHBmbl9iYXNlLCAwKTsKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyArK2kpIHsKIAkJcHRlID0gcHNiX2d0dF9tYXNrX3B0ZShwZm5fYmFzZSArIGksIDApOwotCQlpb3dyaXRlMzIocHRlLCBwZy0+Z3R0X21hcCArIGkpOworCQlpb3dyaXRlMzIocHRlLCBkZXZfcHJpdi0+Z3R0X21hcCArIGkpOwogCX0KIAogCS8qCkBAIC0xOTQsMzYgKzUxNiw5IEBACiAJcGZuX2Jhc2UgPSBwYWdlX3RvX3BmbihkZXZfcHJpdi0+c2NyYXRjaF9wYWdlKTsKIAlwdGUgPSBwc2JfZ3R0X21hc2tfcHRlKHBmbl9iYXNlLCAwKTsKIAlmb3IgKDsgaSA8IHR0X3BhZ2VzIC8gMiAtIDE7ICsraSkKLQkJaW93cml0ZTMyKHB0ZSwgcGctPmd0dF9tYXAgKyBpKTsKKwkJaW93cml0ZTMyKHB0ZSwgZGV2X3ByaXYtPmd0dF9tYXAgKyBpKTsKIAogCS8qCi0JICogaW5zZXJ0IENJIHN0b2xlbiBwYWdlcwotCSAqLwotCi0JcGZuX2Jhc2UgPSBkZXZfcHJpdi0+Y2lfcmVnaW9uX3N0YXJ0ID4+IFBBR0VfU0hJRlQ7Ci0JY2lfcGFnZXMgPSBudW1fcGFnZXMgPSBjaV9zdG9sZW5fc2l6ZSA+PiBQQUdFX1NISUZUOwotCXByaW50ayhLRVJOX0lORk8iU2V0IHVwICVkIENJIHN0b2xlbiBwYWdlcyBzdGFydGluZyBhdCAweCUwOHgsIEdUVCBvZmZzZXQgJWRLXG4iLAotCSAgICAgICBudW1fcGFnZXMsIHBmbl9iYXNlLCAodHRtX2d0dF9tYXAgLSBwZy0+Z3R0X21hcCkgKiA0KTsKLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyArK2kpIHsKLQkJcHRlID0gcHNiX2d0dF9tYXNrX3B0ZShwZm5fYmFzZSArIGksIDApOwotCQlpb3dyaXRlMzIocHRlLCB0dG1fZ3R0X21hcCArIGkpOwotCX0KLQotCS8qCi0JICogaW5zZXJ0IFJBUiBzdG9sZW4gcGFnZXMKLQkgKi8KLQlpZiAocmFyX3N0b2xlbl9zaXplICE9IDApIHsKLQkJcGZuX2Jhc2UgPSBkZXZfcHJpdi0+cmFyX3JlZ2lvbl9zdGFydCA+PiBQQUdFX1NISUZUOwotCQludW1fcGFnZXMgPSByYXJfc3RvbGVuX3NpemUgPj4gUEFHRV9TSElGVDsKLQkJcHJpbnRrKEtFUk5fSU5GTyJTZXQgdXAgJWQgUkFSIHN0b2xlbiBwYWdlcyBzdGFydGluZyBhdCAweCUwOHgsIEdUVCBvZmZzZXQgJWRLXG4iLAotCQkJbnVtX3BhZ2VzLCBwZm5fYmFzZSwKLQkJCSh0dG1fZ3R0X21hcCAtIHBnLT5ndHRfbWFwICsgaSkgKiA0KTsKLQkJZm9yICg7IGkgPCBudW1fcGFnZXMgKyBjaV9wYWdlczsgKytpKSB7Ci0JCQlwdGUgPSBwc2JfZ3R0X21hc2tfcHRlKHBmbl9iYXNlICsgaSAtIGNpX3BhZ2VzLCAwKTsKLQkJCWlvd3JpdGUzMihwdGUsIHR0bV9ndHRfbWFwICsgaSk7Ci0JCX0KLQl9Ci0JLyoKIAkgKiBJbml0IHJlc3Qgb2YgZ3R0IG1hbmFnZWQgYnkgVFRNLgogCSAqLwogCkBAIC0yMzQsODAxICs1MjksMTEgQEAKIAogCWZvciAoOyBpIDwgcGctPmdhdHRfcGFnZXMgLSB0dF9wYWdlcyAvIDI7ICsraSkKIAkJaW93cml0ZTMyKHB0ZSwgdHRtX2d0dF9tYXAgKyBpKTsKLQkodm9pZCkgaW9yZWFkMzIocGctPmd0dF9tYXAgKyBpIC0gMSk7CisJKHZvaWQpIGlvcmVhZDMyKGRldl9wcml2LT5ndHRfbWFwICsgaSAtIDEpOwogCiAJcmV0dXJuIDA7CiAKIG91dF9lcnI6Ci0JcHNiX2d0dF90YWtlZG93bihwZywgMCk7CisJcHNiX2d0dF90YWtlZG93bihkZXYpOwogCXJldHVybiByZXQ7CiB9Ci0KLWludCBwc2JfZ3R0X2luc2VydF9wYWdlcyhzdHJ1Y3QgcHNiX2d0dCAqcGcsIHN0cnVjdCBwYWdlICoqcGFnZXMsCi0JCQkgdW5zaWduZWQgb2Zmc2V0X3BhZ2VzLCB1bnNpZ25lZCBudW1fcGFnZXMsCi0JCQkgdW5zaWduZWQgZGVzaXJlZF90aWxlX3N0cmlkZSwKLQkJCSB1bnNpZ25lZCBod190aWxlX3N0cmlkZSwgaW50IHR5cGUpCi17Ci0JdW5zaWduZWQgcm93cyA9IDE7Ci0JdW5zaWduZWQgYWRkOwotCXVuc2lnbmVkIHJvd19hZGQ7Ci0JdW5zaWduZWQgaTsKLQl1bnNpZ25lZCBqOwotCXVpbnQzMl90ICpjdXJfcGFnZSA9IE5VTEw7Ci0JdWludDMyX3QgcHRlOwotCi0JaWYgKGh3X3RpbGVfc3RyaWRlKQotCQlyb3dzID0gbnVtX3BhZ2VzIC8gZGVzaXJlZF90aWxlX3N0cmlkZTsKLQllbHNlCi0JCWRlc2lyZWRfdGlsZV9zdHJpZGUgPSBudW1fcGFnZXM7Ci0KLQlhZGQgPSBkZXNpcmVkX3RpbGVfc3RyaWRlOwotCXJvd19hZGQgPSBod190aWxlX3N0cmlkZTsKLQotCWRvd25fcmVhZCgmcGctPnNlbSk7Ci0JZm9yIChpID0gMDsgaSA8IHJvd3M7ICsraSkgewotCQljdXJfcGFnZSA9IHBnLT5ndHRfbWFwICsgb2Zmc2V0X3BhZ2VzOwotCQlmb3IgKGogPSAwOyBqIDwgZGVzaXJlZF90aWxlX3N0cmlkZTsgKytqKSB7Ci0JCQlwdGUgPQotCQkJICAgIHBzYl9ndHRfbWFza19wdGUocGFnZV90b19wZm4oKnBhZ2VzKyspLCB0eXBlKTsKLQkJCWlvd3JpdGUzMihwdGUsIGN1cl9wYWdlKyspOwotCQl9Ci0JCW9mZnNldF9wYWdlcyArPSBhZGQ7Ci0JfQotCSh2b2lkKSBpb3JlYWQzMihjdXJfcGFnZSAtIDEpOwotCXVwX3JlYWQoJnBnLT5zZW0pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBwc2JfZ3R0X2luc2VydF9waHlzX2FkZHJlc3NlcyhzdHJ1Y3QgcHNiX2d0dCAqcGcsIGRtYV9hZGRyX3QgKnBQaHlzRnJhbWVzLAotCQkJdW5zaWduZWQgb2Zmc2V0X3BhZ2VzLCB1bnNpZ25lZCBudW1fcGFnZXMsIGludCB0eXBlKQotewotCXVuc2lnbmVkIGo7Ci0JdWludDMyX3QgKmN1cl9wYWdlID0gTlVMTDsKLQl1aW50MzJfdCBwdGU7Ci0JdTMyIGJhOwotCi0JZG93bl9yZWFkKCZwZy0+c2VtKTsKLQljdXJfcGFnZSA9IHBnLT5ndHRfbWFwICsgb2Zmc2V0X3BhZ2VzOwotCWZvciAoaiA9IDA7IGogPCBudW1fcGFnZXM7ICsraikgewotCQliYSA9ICpwUGh5c0ZyYW1lcysrOwotCQlwdGUgPSAgcHNiX2d0dF9tYXNrX3B0ZShiYSA+PiBQQUdFX1NISUZULCB0eXBlKTsKLQkJaW93cml0ZTMyKHB0ZSwgY3VyX3BhZ2UrKyk7Ci0JfQotCSh2b2lkKSBpb3JlYWQzMihjdXJfcGFnZSAtIDEpOwotCXVwX3JlYWQoJnBnLT5zZW0pOwotCXJldHVybiAwOwotfQotCi1pbnQgcHNiX2d0dF9yZW1vdmVfcGFnZXMoc3RydWN0IHBzYl9ndHQgKnBnLCB1bnNpZ25lZCBvZmZzZXRfcGFnZXMsCi0JCQkgdW5zaWduZWQgbnVtX3BhZ2VzLCB1bnNpZ25lZCBkZXNpcmVkX3RpbGVfc3RyaWRlLAotCQkJIHVuc2lnbmVkIGh3X3RpbGVfc3RyaWRlLCBpbnQgcmNfcHJvdCkKLXsKLQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IHBnLT5kZXYtPmRldl9wcml2YXRlOwotCXVuc2lnbmVkIHJvd3MgPSAxOwotCXVuc2lnbmVkIGFkZDsKLQl1bnNpZ25lZCByb3dfYWRkOwotCXVuc2lnbmVkIGk7Ci0JdW5zaWduZWQgajsKLQl1aW50MzJfdCAqY3VyX3BhZ2UgPSBOVUxMOwotCXVuc2lnbmVkIHBmbl9iYXNlID0gcGFnZV90b19wZm4oZGV2X3ByaXYtPnNjcmF0Y2hfcGFnZSk7Ci0JdWludDMyX3QgcHRlID0gcHNiX2d0dF9tYXNrX3B0ZShwZm5fYmFzZSwgMCk7Ci0KLQlpZiAoaHdfdGlsZV9zdHJpZGUpCi0JCXJvd3MgPSBudW1fcGFnZXMgLyBkZXNpcmVkX3RpbGVfc3RyaWRlOwotCWVsc2UKLQkJZGVzaXJlZF90aWxlX3N0cmlkZSA9IG51bV9wYWdlczsKLQotCWFkZCA9IGRlc2lyZWRfdGlsZV9zdHJpZGU7Ci0Jcm93X2FkZCA9IGh3X3RpbGVfc3RyaWRlOwotCi0JaWYgKHJjX3Byb3QpCi0JCWRvd25fcmVhZCgmcGctPnNlbSk7Ci0JZm9yIChpID0gMDsgaSA8IHJvd3M7ICsraSkgewotCQljdXJfcGFnZSA9IHBnLT5ndHRfbWFwICsgb2Zmc2V0X3BhZ2VzOwotCQlmb3IgKGogPSAwOyBqIDwgZGVzaXJlZF90aWxlX3N0cmlkZTsgKytqKQotCQkJaW93cml0ZTMyKHB0ZSwgY3VyX3BhZ2UrKyk7Ci0KLQkJb2Zmc2V0X3BhZ2VzICs9IGFkZDsKLQl9Ci0JKHZvaWQpIGlvcmVhZDMyKGN1cl9wYWdlIC0gMSk7Ci0JaWYgKHJjX3Byb3QpCi0JCXVwX3JlYWQoJnBnLT5zZW0pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBwc2JfZ3R0X21tX2luaXQoc3RydWN0IHBzYl9ndHQgKnBnKQotewotCXN0cnVjdCBwc2JfZ3R0X21tICpndHRfbW07Ci0Jc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBwZy0+ZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX29wZW5faGFzaCAqaHQ7Ci0Jc3RydWN0IGRybV9tbSAqbW07Ci0JaW50IHJldDsKLQl1aW50MzJfdCB0dF9zdGFydDsKLQl1aW50MzJfdCB0dF9zaXplOwotCi0JaWYgKCFwZyB8fCAhcGctPmluaXRpYWxpemVkKSB7Ci0JCURSTV9ERUJVRygiSW52YWxpZCBndHQgc3RydWN0XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZ3R0X21tID0gIGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwc2JfZ3R0X21tKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFndHRfbW0pCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jc3Bpbl9sb2NrX2luaXQoJmd0dF9tbS0+bG9jayk7Ci0KLQlodCA9ICZndHRfbW0tPmhhc2g7Ci0JcmV0ID0gZHJtX2h0X2NyZWF0ZShodCwgMjApOwotCWlmIChyZXQpIHsKLQkJRFJNX0RFQlVHKCJDcmVhdGUgaGFzaCB0YWJsZSBmYWlsZWQoJWQpXG4iLCByZXQpOwotCQlnb3RvIGVycl9mcmVlOwotCX0KLQotCXR0X3N0YXJ0ID0gKHBnLT5zdG9sZW5fc2l6ZSArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7Ci0JdHRfc3RhcnQgPSAodHRfc3RhcnQgPCBwZy0+Z2F0dF9wYWdlcykgPyB0dF9zdGFydCA6IHBnLT5nYXR0X3BhZ2VzOwotCXR0X3NpemUgPSAocGctPmdhdHRfcGFnZXMgPCBQU0JfVFRfUFJJVjBfUExJTUlUKSA/Ci0JCQkocGctPmdhdHRfcGFnZXMpIDogUFNCX1RUX1BSSVYwX1BMSU1JVDsKLQotCW1tID0gJmd0dF9tbS0+YmFzZTsKLQotCS8qd2lsbCB1c2UgdHRfc3RhcnQgfiAxMjhNIGZvciBJTUcgVFQgYnVmZmVycyovCi0JcmV0ID0gZHJtX21tX2luaXQobW0sIHR0X3N0YXJ0LCAoKHR0X3NpemUgLyAyKSAtIHR0X3N0YXJ0KSk7Ci0JaWYgKHJldCkgewotCQlEUk1fREVCVUcoImRybV9tbV9pbnQgZXJyb3IoJWQpXG4iLCByZXQpOwotCQlnb3RvIGVycl9tbV9pbml0OwotCX0KLQotCWd0dF9tbS0+Y291bnQgPSAwOwotCi0JZGV2X3ByaXYtPmd0dF9tbSA9IGd0dF9tbTsKLQotCURSTV9JTkZPKCJQU0IgR1RUIG1lbSBtYW5hZ2VyIHJlYWR5LCB0dF9zdGFydCAlbGQsIHR0X3NpemUgJWxkIHBhZ2VzXG4iLAotCQkodW5zaWduZWQgbG9uZyl0dF9zdGFydCwKLQkJKHVuc2lnbmVkIGxvbmcpKCh0dF9zaXplIC8gMikgLSB0dF9zdGFydCkpOwotCXJldHVybiAwOwotZXJyX21tX2luaXQ6Ci0JZHJtX2h0X3JlbW92ZShodCk7Ci0KLWVycl9mcmVlOgotCWtmcmVlKGd0dF9tbSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBEZWxldGUgYWxsIGhhc2ggZW50cmllczsKLSAqLwotdm9pZCBwc2JfZ3R0X21tX3Rha2Vkb3duKHZvaWQpCi17Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW50IHBzYl9ndHRfbW1fZ2V0X2h0X2J5X3BpZF9sb2NrZWQoc3RydWN0IHBzYl9ndHRfbW0gKm1tLAotCQkJCSAgICB1MzIgdGdpZCwKLQkJCQkgICAgc3RydWN0IHBzYl9ndHRfaGFzaF9lbnRyeSAqKmhlbnRyeSkKLXsKLQlzdHJ1Y3QgZHJtX2hhc2hfaXRlbSAqZW50cnk7Ci0Jc3RydWN0IHBzYl9ndHRfaGFzaF9lbnRyeSAqcHNiX2VudHJ5OwotCWludCByZXQ7Ci0KLQlyZXQgPSBkcm1faHRfZmluZF9pdGVtKCZtbS0+aGFzaCwgdGdpZCwgJmVudHJ5KTsKLQlpZiAocmV0KSB7Ci0JCURSTV9ERUJVRygiQ2Fubm90IGZpbmQgZW50cnkgcGlkPSVsZFxuIiwgdGdpZCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcHNiX2VudHJ5ID0gY29udGFpbmVyX29mKGVudHJ5LCBzdHJ1Y3QgcHNiX2d0dF9oYXNoX2VudHJ5LCBpdGVtKTsKLQlpZiAoIXBzYl9lbnRyeSkgewotCQlEUk1fREVCVUcoIkludmFsaWQgZW50cnkiKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JKmhlbnRyeSA9IHBzYl9lbnRyeTsKLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IHBzYl9ndHRfbW1faW5zZXJ0X2h0X2xvY2tlZChzdHJ1Y3QgcHNiX2d0dF9tbSAqbW0sCi0JCQkJICAgICAgIHUzMiB0Z2lkLAotCQkJCSAgICAgICBzdHJ1Y3QgcHNiX2d0dF9oYXNoX2VudHJ5ICpoZW50cnkpCi17Ci0Jc3RydWN0IGRybV9oYXNoX2l0ZW0gKml0ZW07Ci0JaW50IHJldDsKLQotCWlmICghaGVudHJ5KSB7Ci0JCURSTV9ERUJVRygiSW52YWxpZCBwYXJhbWV0ZXJzXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaXRlbSA9ICZoZW50cnktPml0ZW07Ci0JaXRlbS0+a2V5ID0gdGdpZDsKLQotCS8qKgotCSAqIE5PVEU6IGRybV9odF9pbnNlcnRfaXRlbSB3aWxsIHBlcmZvcm0gc3VjaCBhIGNoZWNrCi0JcmV0ID0gcHNiX2d0dF9tbV9nZXRfaHRfYnlfcGlkKG1tLCB0Z2lkLCAmdG1wKTsKLQlpZiAoIXJldCkgewotCQlEUk1fREVCVUcoIkVudHJ5IGFscmVhZHkgZXhpc3RzIGZvciBwaWQgJWxkXG4iLCB0Z2lkKTsKLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCSovCi0KLQkvKkluc2VydCB0aGUgZ2l2ZW4gZW50cnkqLwotCXJldCA9IGRybV9odF9pbnNlcnRfaXRlbSgmbW0tPmhhc2gsIGl0ZW0pOwotCWlmIChyZXQpIHsKLQkJRFJNX0RFQlVHKCJJbnNlcnQgZmFpbHVyZVxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JbW0tPmNvdW50Kys7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwc2JfZ3R0X21tX2FsbG9jX2luc2VydF9odChzdHJ1Y3QgcHNiX2d0dF9tbSAqbW0sCi0JCQkJICAgICAgdTMyIHRnaWQsCi0JCQkJICAgICAgc3RydWN0IHBzYl9ndHRfaGFzaF9lbnRyeSAqKmVudHJ5KQotewotCXN0cnVjdCBwc2JfZ3R0X2hhc2hfZW50cnkgKmhlbnRyeTsKLQlpbnQgcmV0OwotCi0JLyppZiB0aGUgaGVudHJ5IGZvciB0aGlzIHRnaWQgZXhpc3RzLCBqdXN0IGdldCBpdCBhbmQgcmV0dXJuKi8KLQlzcGluX2xvY2soJm1tLT5sb2NrKTsKLQlyZXQgPSBwc2JfZ3R0X21tX2dldF9odF9ieV9waWRfbG9ja2VkKG1tLCB0Z2lkLCAmaGVudHJ5KTsKLQlpZiAoIXJldCkgewotCQlEUk1fREVCVUcoIkVudHJ5IGZvciB0Z2lkICVsZCBleGlzdCwgaGVudHJ5ICVwXG4iLAotCQkJICB0Z2lkLCBoZW50cnkpOwotCQkqZW50cnkgPSBoZW50cnk7Ci0JCXNwaW5fdW5sb2NrKCZtbS0+bG9jayk7Ci0JCXJldHVybiAwOwotCX0KLQlzcGluX3VubG9jaygmbW0tPmxvY2spOwotCi0JRFJNX0RFQlVHKCJFbnRyeSBmb3IgdGdpZCAlbGQgZG9lc24ndCBleGlzdCwgd2lsbCBjcmVhdGUgaXRcbiIsIHRnaWQpOwotCi0JaGVudHJ5ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBzYl9ndHRfaGFzaF9lbnRyeSksIEdGUF9LRVJORUwpOwotCWlmICghaGVudHJ5KSB7Ci0JCURSTV9ERUJVRygiS21hbGxvYyBmYWlsbGVkXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JcmV0ID0gZHJtX2h0X2NyZWF0ZSgmaGVudHJ5LT5odCwgMjApOwotCWlmIChyZXQpIHsKLQkJRFJNX0RFQlVHKCJDcmVhdGUgaGFzaCB0YWJsZSBmYWlsZWRcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXNwaW5fbG9jaygmbW0tPmxvY2spOwotCXJldCA9IHBzYl9ndHRfbW1faW5zZXJ0X2h0X2xvY2tlZChtbSwgdGdpZCwgaGVudHJ5KTsKLQlzcGluX3VubG9jaygmbW0tPmxvY2spOwotCi0JaWYgKCFyZXQpCi0JCSplbnRyeSA9IGhlbnRyeTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcHNiX2d0dF9oYXNoX2VudHJ5ICoKLXBzYl9ndHRfbW1fcmVtb3ZlX2h0X2xvY2tlZChzdHJ1Y3QgcHNiX2d0dF9tbSAqbW0sIHUzMiB0Z2lkKQotewotCXN0cnVjdCBwc2JfZ3R0X2hhc2hfZW50cnkgKnRtcDsKLQlpbnQgcmV0OwotCi0JcmV0ID0gcHNiX2d0dF9tbV9nZXRfaHRfYnlfcGlkX2xvY2tlZChtbSwgdGdpZCwgJnRtcCk7Ci0JaWYgKHJldCkgewotCQlEUk1fREVCVUcoIkNhbm5vdCBmaW5kIGVudHJ5IHBpZCAlbGRcbiIsIHRnaWQpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQkvKnJlbW92ZSBpdCBmcm9tIGh0Ki8KLQlkcm1faHRfcmVtb3ZlX2l0ZW0oJm1tLT5oYXNoLCAmdG1wLT5pdGVtKTsKLQotCW1tLT5jb3VudC0tOwotCi0JcmV0dXJuIHRtcDsKLX0KLQotc3RhdGljIGludCBwc2JfZ3R0X21tX3JlbW92ZV9mcmVlX2h0X2xvY2tlZChzdHJ1Y3QgcHNiX2d0dF9tbSAqbW0sIHUzMiB0Z2lkKQotewotCXN0cnVjdCBwc2JfZ3R0X2hhc2hfZW50cnkgKmVudHJ5OwotCi0JZW50cnkgPSBwc2JfZ3R0X21tX3JlbW92ZV9odF9sb2NrZWQobW0sIHRnaWQpOwotCi0JaWYgKCFlbnRyeSkgewotCQlEUk1fREVCVUcoIkludmFsaWQgZW50cnkiKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLypkZWxldGUgaHQqLwotCWRybV9odF9yZW1vdmUoJmVudHJ5LT5odCk7Ci0KLQkvKmZyZWUgdGhpcyBlbnRyeSovCi0Ja2ZyZWUoZW50cnkpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1wc2JfZ3R0X21tX2dldF9tZW1fbWFwcGluZ19sb2NrZWQoc3RydWN0IGRybV9vcGVuX2hhc2ggKmh0LAotCQkJICAgdTMyIGtleSwKLQkJCSAgIHN0cnVjdCBwc2JfZ3R0X21lbV9tYXBwaW5nICoqaGVudHJ5KQotewotCXN0cnVjdCBkcm1faGFzaF9pdGVtICplbnRyeTsKLQlzdHJ1Y3QgcHNiX2d0dF9tZW1fbWFwcGluZyAqbWFwcGluZzsKLQlpbnQgcmV0OwotCi0JcmV0ID0gZHJtX2h0X2ZpbmRfaXRlbShodCwga2V5LCAmZW50cnkpOwotCWlmIChyZXQpIHsKLQkJRFJNX0RFQlVHKCJDYW5ub3QgZmluZCBrZXkgJWxkXG4iLCBrZXkpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCW1hcHBpbmcgPSAgY29udGFpbmVyX29mKGVudHJ5LCBzdHJ1Y3QgcHNiX2d0dF9tZW1fbWFwcGluZywgaXRlbSk7Ci0JaWYgKCFtYXBwaW5nKSB7Ci0JCURSTV9ERUJVRygiSW52YWxpZCBlbnRyeVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCSpoZW50cnkgPSBtYXBwaW5nOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1wc2JfZ3R0X21tX2luc2VydF9tZW1fbWFwcGluZ19sb2NrZWQoc3RydWN0IGRybV9vcGVuX2hhc2ggKmh0LAotCQkJICAgICAgdTMyIGtleSwKLQkJCSAgICAgIHN0cnVjdCBwc2JfZ3R0X21lbV9tYXBwaW5nICpoZW50cnkpCi17Ci0Jc3RydWN0IGRybV9oYXNoX2l0ZW0gKml0ZW07Ci0Jc3RydWN0IHBzYl9ndHRfaGFzaF9lbnRyeSAqZW50cnk7Ci0JaW50IHJldDsKLQotCWlmICghaGVudHJ5KSB7Ci0JCURSTV9ERUJVRygiaGVudHJ5IGlzIE5VTExcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpdGVtID0gJmhlbnRyeS0+aXRlbTsKLQlpdGVtLT5rZXkgPSBrZXk7Ci0KLQlyZXQgPSBkcm1faHRfaW5zZXJ0X2l0ZW0oaHQsIGl0ZW0pOwotCWlmIChyZXQpIHsKLQkJRFJNX0RFQlVHKCJpbnNlcnRfaXRlbSBmYWlsZWRcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCWVudHJ5ID0gY29udGFpbmVyX29mKGh0LCBzdHJ1Y3QgcHNiX2d0dF9oYXNoX2VudHJ5LCBodCk7Ci0JaWYgKGVudHJ5KQotCQllbnRyeS0+Y291bnQrKzsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1wc2JfZ3R0X21tX2FsbG9jX2luc2VydF9tZW1fbWFwcGluZyhzdHJ1Y3QgcHNiX2d0dF9tbSAqbW0sCi0JCQkJICAgIHN0cnVjdCBkcm1fb3Blbl9oYXNoICpodCwKLQkJCQkgICAgdTMyIGtleSwKLQkJCQkgICAgc3RydWN0IGRybV9tbV9ub2RlICpub2RlLAotCQkJCSAgICBzdHJ1Y3QgcHNiX2d0dF9tZW1fbWFwcGluZyAqKmVudHJ5KQotewotCXN0cnVjdCBwc2JfZ3R0X21lbV9tYXBwaW5nICptYXBwaW5nOwotCWludCByZXQ7Ci0KLQlpZiAoIW5vZGUgfHwgIWh0KSB7Ci0JCURSTV9ERUJVRygicGFyYW1ldGVyIGVycm9yXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyp0cnkgdG8gZ2V0IHRoaXMgbWVtX21hcCAqLwotCXNwaW5fbG9jaygmbW0tPmxvY2spOwotCXJldCA9IHBzYl9ndHRfbW1fZ2V0X21lbV9tYXBwaW5nX2xvY2tlZChodCwga2V5LCAmbWFwcGluZyk7Ci0JaWYgKCFyZXQpIHsKLQkJRFJNX0RFQlVHKCJtYXBwaW5nIGVudHJ5IGZvciBrZXkgJWxkIGV4aXN0cywgZW50cnkgJXBcbiIsCi0JCQkgIGtleSwgbWFwcGluZyk7Ci0JCSplbnRyeSA9IG1hcHBpbmc7Ci0JCXNwaW5fdW5sb2NrKCZtbS0+bG9jayk7Ci0JCXJldHVybiAwOwotCX0KLQlzcGluX3VubG9jaygmbW0tPmxvY2spOwotCi0JRFJNX0RFQlVHKCJNYXBwaW5nIGVudHJ5IGZvciBrZXkgJWxkIGRvZXNuJ3QgZXhpc3QsIHdpbGwgY3JlYXRlIGl0XG4iLAotCQkgIGtleSk7Ci0KLQltYXBwaW5nID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBzYl9ndHRfbWVtX21hcHBpbmcpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW1hcHBpbmcpIHsKLQkJRFJNX0RFQlVHKCJrbWFsbG9jIGZhaWxlZFxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCW1hcHBpbmctPm5vZGUgPSBub2RlOwotCi0Jc3Bpbl9sb2NrKCZtbS0+bG9jayk7Ci0JcmV0ID0gcHNiX2d0dF9tbV9pbnNlcnRfbWVtX21hcHBpbmdfbG9ja2VkKGh0LCBrZXksIG1hcHBpbmcpOwotCXNwaW5fdW5sb2NrKCZtbS0+bG9jayk7Ci0KLQlpZiAoIXJldCkKLQkJKmVudHJ5ID0gbWFwcGluZzsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcHNiX2d0dF9tZW1fbWFwcGluZyAqCi1wc2JfZ3R0X21tX3JlbW92ZV9tZW1fbWFwcGluZ19sb2NrZWQoc3RydWN0IGRybV9vcGVuX2hhc2ggKmh0LCB1MzIga2V5KQotewotCXN0cnVjdCBwc2JfZ3R0X21lbV9tYXBwaW5nICp0bXA7Ci0Jc3RydWN0IHBzYl9ndHRfaGFzaF9lbnRyeSAqZW50cnk7Ci0JaW50IHJldDsKLQotCXJldCA9IHBzYl9ndHRfbW1fZ2V0X21lbV9tYXBwaW5nX2xvY2tlZChodCwga2V5LCAmdG1wKTsKLQlpZiAocmV0KSB7Ci0JCURSTV9ERUJVRygiQ2Fubm90IGZpbmQga2V5ICVsZFxuIiwga2V5KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JZHJtX2h0X3JlbW92ZV9pdGVtKGh0LCAmdG1wLT5pdGVtKTsKLQotCWVudHJ5ID0gY29udGFpbmVyX29mKGh0LCBzdHJ1Y3QgcHNiX2d0dF9oYXNoX2VudHJ5LCBodCk7Ci0JaWYgKGVudHJ5KQotCQllbnRyeS0+Y291bnQtLTsKLQotCXJldHVybiB0bXA7Ci19Ci0KLXN0YXRpYyBpbnQgcHNiX2d0dF9tbV9yZW1vdmVfZnJlZV9tZW1fbWFwcGluZ19sb2NrZWQoc3RydWN0IGRybV9vcGVuX2hhc2ggKmh0LAotCQkJCQkgICAgICB1MzIga2V5LAotCQkJCQkgICAgICBzdHJ1Y3QgZHJtX21tX25vZGUgKipub2RlKQotewotCXN0cnVjdCBwc2JfZ3R0X21lbV9tYXBwaW5nICplbnRyeTsKLQotCWVudHJ5ID0gcHNiX2d0dF9tbV9yZW1vdmVfbWVtX21hcHBpbmdfbG9ja2VkKGh0LCBrZXkpOwotCWlmICghZW50cnkpIHsKLQkJRFJNX0RFQlVHKCJlbnRyeSBpcyBOVUxMXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JKm5vZGUgPSBlbnRyeS0+bm9kZTsKLQotCWtmcmVlKGVudHJ5KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwc2JfZ3R0X2FkZF9ub2RlKHN0cnVjdCBwc2JfZ3R0X21tICptbSwKLQkJCSAgICB1MzIgdGdpZCwKLQkJCSAgICB1MzIga2V5LAotCQkJICAgIHN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSwKLQkJCSAgICBzdHJ1Y3QgcHNiX2d0dF9tZW1fbWFwcGluZyAqKmVudHJ5KQotewotCXN0cnVjdCBwc2JfZ3R0X2hhc2hfZW50cnkgKmhlbnRyeTsKLQlzdHJ1Y3QgcHNiX2d0dF9tZW1fbWFwcGluZyAqbWFwcGluZzsKLQlpbnQgcmV0OwotCi0JcmV0ID0gcHNiX2d0dF9tbV9hbGxvY19pbnNlcnRfaHQobW0sIHRnaWQsICZoZW50cnkpOwotCWlmIChyZXQpIHsKLQkJRFJNX0RFQlVHKCJhbGxvY19pbnNlcnQgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXQgPSBwc2JfZ3R0X21tX2FsbG9jX2luc2VydF9tZW1fbWFwcGluZyhtbSwKLQkJCQkJCSAgJmhlbnRyeS0+aHQsCi0JCQkJCQkgIGtleSwKLQkJCQkJCSAgbm9kZSwKLQkJCQkJCSAgJm1hcHBpbmcpOwotCWlmIChyZXQpIHsKLQkJRFJNX0RFQlVHKCJtYXBwaW5nIGFsbG9jX2luc2VydCBmYWlsZWRcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCSplbnRyeSA9IG1hcHBpbmc7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwc2JfZ3R0X3JlbW92ZV9ub2RlKHN0cnVjdCBwc2JfZ3R0X21tICptbSwKLQkJCSAgICAgICB1MzIgdGdpZCwKLQkJCSAgICAgICB1MzIga2V5LAotCQkJICAgICAgIHN0cnVjdCBkcm1fbW1fbm9kZSAqKm5vZGUpCi17Ci0Jc3RydWN0IHBzYl9ndHRfaGFzaF9lbnRyeSAqaGVudHJ5OwotCXN0cnVjdCBkcm1fbW1fbm9kZSAqdG1wOwotCWludCByZXQ7Ci0KLQlzcGluX2xvY2soJm1tLT5sb2NrKTsKLQlyZXQgPSBwc2JfZ3R0X21tX2dldF9odF9ieV9waWRfbG9ja2VkKG1tLCB0Z2lkLCAmaGVudHJ5KTsKLQlpZiAocmV0KSB7Ci0JCURSTV9ERUJVRygiQ2Fubm90IGZpbmQgZW50cnkgZm9yIHBpZCAlbGRcbiIsIHRnaWQpOwotCQlzcGluX3VubG9jaygmbW0tPmxvY2spOwotCQlyZXR1cm4gcmV0OwotCX0KLQlzcGluX3VubG9jaygmbW0tPmxvY2spOwotCi0JLypyZW1vdmUgbWFwcGluZyBlbnRyeSovCi0Jc3Bpbl9sb2NrKCZtbS0+bG9jayk7Ci0JcmV0ID0gcHNiX2d0dF9tbV9yZW1vdmVfZnJlZV9tZW1fbWFwcGluZ19sb2NrZWQoJmhlbnRyeS0+aHQsCi0JCQkJCQkJa2V5LAotCQkJCQkJCSZ0bXApOwotCWlmIChyZXQpIHsKLQkJRFJNX0RFQlVHKCJyZW1vdmVfZnJlZSBmYWlsZWRcbiIpOwotCQlzcGluX3VubG9jaygmbW0tPmxvY2spOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCSpub2RlID0gdG1wOwotCi0JLypjaGVjayB0aGUgY291bnQgb2YgbWFwcGluZyBlbnRyeSovCi0JaWYgKCFoZW50cnktPmNvdW50KSB7Ci0JCURSTV9ERUJVRygiY291bnQgb2YgbWFwcGluZyBlbnRyeSBpcyB6ZXJvLCB0Z2lkPSVsZFxuIiwgdGdpZCk7Ci0JCXBzYl9ndHRfbW1fcmVtb3ZlX2ZyZWVfaHRfbG9ja2VkKG1tLCB0Z2lkKTsKLQl9Ci0KLQlzcGluX3VubG9jaygmbW0tPmxvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcHNiX2d0dF9tbV9hbGxvY19tZW0oc3RydWN0IHBzYl9ndHRfbW0gKm1tLAotCQkJCXVpbnQzMl90IHBhZ2VzLAotCQkJCXVpbnQzMl90IGFsaWduLAotCQkJCXN0cnVjdCBkcm1fbW1fbm9kZSAqKm5vZGUpCi17Ci0Jc3RydWN0IGRybV9tbV9ub2RlICp0bXBfbm9kZTsKLQlpbnQgcmV0OwotCi0JZG8gewotCQlyZXQgPSBkcm1fbW1fcHJlX2dldCgmbW0tPmJhc2UpOwotCQlpZiAodW5saWtlbHkocmV0KSkgewotCQkJRFJNX0RFQlVHKCJkcm1fbW1fcHJlX2dldCBlcnJvclxuIik7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0KLQkJc3Bpbl9sb2NrKCZtbS0+bG9jayk7Ci0JCXRtcF9ub2RlID0gZHJtX21tX3NlYXJjaF9mcmVlKCZtbS0+YmFzZSwgcGFnZXMsIGFsaWduLCAxKTsKLQkJaWYgKHVubGlrZWx5KCF0bXBfbm9kZSkpIHsKLQkJCURSTV9ERUJVRygiTm8gZnJlZSBub2RlIGZvdW5kXG4iKTsKLQkJCXNwaW5fdW5sb2NrKCZtbS0+bG9jayk7Ci0JCQlicmVhazsKLQkJfQotCi0JCXRtcF9ub2RlID0gZHJtX21tX2dldF9ibG9ja19hdG9taWModG1wX25vZGUsIHBhZ2VzLCBhbGlnbik7Ci0JCXNwaW5fdW5sb2NrKCZtbS0+bG9jayk7Ci0JfSB3aGlsZSAoIXRtcF9ub2RlKTsKLQotCWlmICghdG1wX25vZGUpIHsKLQkJRFJNX0RFQlVHKCJOb2RlIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JKm5vZGUgPSB0bXBfbm9kZTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcHNiX2d0dF9tbV9mcmVlX21lbShzdHJ1Y3QgcHNiX2d0dF9tbSAqbW0sIHN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSkKLXsKLQlzcGluX2xvY2soJm1tLT5sb2NrKTsKLQlkcm1fbW1fcHV0X2Jsb2NrKG5vZGUpOwotCXNwaW5fdW5sb2NrKCZtbS0+bG9jayk7Ci19Ci0KLWludCBwc2JfZ3R0X21hcF9tZW1pbmZvKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQl2b2lkICpoS2VybmVsTWVtSW5mbywKLQkJCXVpbnQzMl90ICpvZmZzZXQpCi17Ci0JcmV0dXJuIC1FSU5WQUw7Ci0JLyogRklYTUVBQyAqLwotI2lmIDAKLQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdgotCSAgICAgICA9IChzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICopZGV2LT5kZXZfcHJpdmF0ZTsKLQl2b2lkICpwc0tlcm5lbE1lbUluZm87Ci0Jc3RydWN0IHBzYl9ndHRfbW0gKm1tID0gZGV2X3ByaXYtPmd0dF9tbTsKLQlzdHJ1Y3QgcHNiX2d0dCAqcGcgPSBkZXZfcHJpdi0+cGc7Ci0JdWludDMyX3Qgc2l6ZSwgcGFnZXMsIG9mZnNldF9wYWdlczsKLQl2b2lkICprbWVtOwotCXN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZTsKLQlzdHJ1Y3QgcGFnZSAqKnBhZ2VfbGlzdDsKLQlzdHJ1Y3QgcHNiX2d0dF9tZW1fbWFwcGluZyAqbWFwcGluZyA9IE5VTEw7Ci0JaW50IHJldDsKLQotCXJldCA9IHBzYl9nZXRfbWVtaW5mb19ieV9oYW5kbGUoaEtlcm5lbE1lbUluZm8sICZwc0tlcm5lbE1lbUluZm8pOwotCWlmIChyZXQpIHsKLQkJRFJNX0RFQlVHKCJDYW5ub3QgZmluZCBrZXJuZWxNZW1JbmZvIGhhbmRsZSAlbGRcbiIsCi0JCQkgIGhLZXJuZWxNZW1JbmZvKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JRFJNX0RFQlVHKCJHb3QgcHNLZXJuZWxNZW1JbmZvICVwIGZvciBoYW5kbGUgJWx4XG4iLAotCQkgIHBzS2VybmVsTWVtSW5mbywgKHUzMiloS2VybmVsTWVtSW5mbyk7Ci0Jc2l6ZSA9IHBzS2VybmVsTWVtSW5mby0+dWkzMkFsbG9jU2l6ZTsKLQlrbWVtID0gcHNLZXJuZWxNZW1JbmZvLT5wdkxpbkFkZHJLTTsKLQlwYWdlcyA9IChzaXplICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKLQotCURSTV9ERUJVRygiS2VyTWVtSW5mbyBzaXplICVsZCwgY3B1VmFkciAlbHgsIHBhZ2VzICVsZCwgb3NNZW1IZGwgJWx4XG4iLAotCQkgIHNpemUsIGttZW0sIHBhZ2VzLCBwc0tlcm5lbE1lbUluZm8tPnNNZW1CbGsuaE9TTWVtSGFuZGxlKTsKLQotCWlmICgha21lbSkKLQkJRFJNX0RFQlVHKCJrbWVtIGlzIE5VTEwiKTsKLQotCS8qZ2V0IHBhZ2VzKi8KLQlyZXQgPSBwc2JfZ2V0X3BhZ2VzX2J5X21lbV9oYW5kbGUocHNLZXJuZWxNZW1JbmZvLT5zTWVtQmxrLmhPU01lbUhhbmRsZSwKLQkJCQkJICAmcGFnZV9saXN0KTsKLQlpZiAocmV0KSB7Ci0JCURSTV9ERUJVRygiZ2V0IHBhZ2VzIGVycm9yXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlEUk1fREVCVUcoImdldCAlbGQgcGFnZXNcbiIsIHBhZ2VzKTsKLQotCS8qYWxsb2MgbWVtb3J5IGluIFRUIGFwZXR1cmUqLwotCXJldCA9IHBzYl9ndHRfbW1fYWxsb2NfbWVtKG1tLCBwYWdlcywgMCwgJm5vZGUpOwotCWlmIChyZXQpIHsKLQkJRFJNX0RFQlVHKCJhbGxvYyBUVCBtZW1vcnkgZXJyb3JcbiIpOwotCQlnb3RvIGZhaWxlZF9wYWdlc19hbGxvYzsKLQl9Ci0KLQkvKnVwZGF0ZSBwc2JfZ3R0X21tKi8KLQlyZXQgPSBwc2JfZ3R0X2FkZF9ub2RlKG1tLAotCQkJICAgICAgIHRhc2tfdGdpZF9ucihjdXJyZW50KSwKLQkJCSAgICAgICAodTMyKWhLZXJuZWxNZW1JbmZvLAotCQkJICAgICAgIG5vZGUsCi0JCQkgICAgICAgJm1hcHBpbmcpOwotCWlmIChyZXQpIHsKLQkJRFJNX0RFQlVHKCJhZGRfbm9kZSBmYWlsZWQiKTsKLQkJZ290byBmYWlsZWRfYWRkX25vZGU7Ci0JfQotCi0Jbm9kZSA9IG1hcHBpbmctPm5vZGU7Ci0Jb2Zmc2V0X3BhZ2VzID0gbm9kZS0+c3RhcnQ7Ci0KLQlEUk1fREVCVUcoImdldCBmcmVlIG5vZGUgZm9yICVsZCBwYWdlcywgb2Zmc2V0ICVsZCBwYWdlcyIsCi0JCSAgcGFnZXMsIG9mZnNldF9wYWdlcyk7Ci0KLQkvKnVwZGF0ZSBndHQqLwotCXBzYl9ndHRfaW5zZXJ0X3BhZ2VzKHBnLCBwYWdlX2xpc3QsCi0JCQkgICAgICh1bnNpZ25lZClvZmZzZXRfcGFnZXMsCi0JCQkgICAgICh1bnNpZ25lZClwYWdlcywKLQkJCSAgICAgMCwKLQkJCSAgICAgMCwKLQkJCSAgICAgMCk7Ci0KLQkqb2Zmc2V0ID0gb2Zmc2V0X3BhZ2VzOwotCXJldHVybiAwOwotCi1mYWlsZWRfYWRkX25vZGU6Ci0JcHNiX2d0dF9tbV9mcmVlX21lbShtbSwgbm9kZSk7Ci1mYWlsZWRfcGFnZXNfYWxsb2M6Ci0Ja2ZyZWUocGFnZV9saXN0KTsKLQlyZXR1cm4gcmV0OwotI2VuZGlmCi19Ci0KLWludCBwc2JfZ3R0X3VubWFwX21lbWluZm8oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqIGhLZXJuZWxNZW1JbmZvKQotewotCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2Ci0JICAgICAgID0gKHN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKilkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBwc2JfZ3R0X21tICptbSA9IGRldl9wcml2LT5ndHRfbW07Ci0Jc3RydWN0IHBzYl9ndHQgKnBnID0gZGV2X3ByaXYtPnBnOwotCXVpbnQzMl90IHBhZ2VzLCBvZmZzZXRfcGFnZXM7Ci0Jc3RydWN0IGRybV9tbV9ub2RlICpub2RlOwotCWludCByZXQ7Ci0KLQlyZXQgPSBwc2JfZ3R0X3JlbW92ZV9ub2RlKG1tLAotCQkJdGFza190Z2lkX25yKGN1cnJlbnQpLAotCQkJKHUzMiloS2VybmVsTWVtSW5mbywKLQkJCSZub2RlKTsKLQlpZiAocmV0KSB7Ci0JCURSTV9ERUJVRygicmVtb3ZlIG5vZGUgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKnJlbW92ZSBndHQgZW50cmllcyovCi0Jb2Zmc2V0X3BhZ2VzID0gbm9kZS0+c3RhcnQ7Ci0JcGFnZXMgPSBub2RlLT5zaXplOwotCi0JcHNiX2d0dF9yZW1vdmVfcGFnZXMocGcsIG9mZnNldF9wYWdlcywgcGFnZXMsIDAsIDAsIDEpOwotCi0KLQkvKmZyZWUgdHQgbm9kZSovCi0KLQlwc2JfZ3R0X21tX2ZyZWVfbWVtKG1tLCBub2RlKTsKLQlyZXR1cm4gMDsKLX0KLQotaW50IHBzYl9ndHRfbWFwX21lbWluZm9faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKLQkJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKLXsKLQlzdHJ1Y3QgcHNiX2d0dF9tYXBwaW5nX2FyZyAqYXJnCi0JICAgICAgID0gKHN0cnVjdCBwc2JfZ3R0X21hcHBpbmdfYXJnICopZGF0YTsKLQl1aW50MzJfdCAqb2Zmc2V0X3BhZ2VzID0gJmFyZy0+b2Zmc2V0X3BhZ2VzOwotCi0JRFJNX0RFQlVHKCJcbiIpOwotCi0JcmV0dXJuIHBzYl9ndHRfbWFwX21lbWluZm8oZGV2LCBhcmctPmhLZXJuZWxNZW1JbmZvLCBvZmZzZXRfcGFnZXMpOwotfQotCi1pbnQgcHNiX2d0dF91bm1hcF9tZW1pbmZvX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCi0JCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCi17Ci0KLQlzdHJ1Y3QgcHNiX2d0dF9tYXBwaW5nX2FyZyAqYXJnCi0JICAgICAgID0gKHN0cnVjdCBwc2JfZ3R0X21hcHBpbmdfYXJnICopZGF0YTsKLQotCURSTV9ERUJVRygiXG4iKTsKLQotCXJldHVybiBwc2JfZ3R0X3VubWFwX21lbWluZm8oZGV2LCBhcmctPmhLZXJuZWxNZW1JbmZvKTsKLX0KLQotaW50IHBzYl9ndHRfbWFwX3B2cl9tZW1vcnkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgIHVuc2lnbmVkIGludCBoSGFuZGxlLAotCQkJdW5zaWduZWQgaW50IHVpMzJUYXNrSWQsIGRtYV9hZGRyX3QgKnBQYWdlcywKLQkJCXVuc2lnbmVkIGludCB1aTMyUGFnZXNOdW0sIHVuc2lnbmVkIGludCAqdWkzMk9mZnNldCkKLXsKLQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IHBzYl9ndHRfbW0gKm1tID0gZGV2X3ByaXYtPmd0dF9tbTsKLQlzdHJ1Y3QgcHNiX2d0dCAqcGcgPSBkZXZfcHJpdi0+cGc7Ci0JdWludDMyX3Qgc2l6ZSwgcGFnZXMsIG9mZnNldF9wYWdlczsKLQlzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGUgPSBOVUxMOwotCXN0cnVjdCBwc2JfZ3R0X21lbV9tYXBwaW5nICptYXBwaW5nID0gTlVMTDsKLQlpbnQgcmV0OwotCi0Jc2l6ZSA9IHVpMzJQYWdlc051bSAqIFBBR0VfU0laRTsKLQlwYWdlcyA9IDA7Ci0KLQkvKmFsbG9jIG1lbW9yeSBpbiBUVCBhcGV0dXJlKi8KLQlyZXQgPSBwc2JfZ3R0X21tX2FsbG9jX21lbShtbSwgdWkzMlBhZ2VzTnVtLCAwLCAmbm9kZSk7Ci0JaWYgKHJldCkgewotCQlEUk1fREVCVUcoImFsbG9jIFRUIG1lbW9yeSBlcnJvclxuIik7Ci0JCWdvdG8gZmFpbGVkX3BhZ2VzX2FsbG9jOwotCX0KLQotICAgLyp1cGRhdGUgcHNiX2d0dF9tbSovCi0JcmV0ID0gcHNiX2d0dF9hZGRfbm9kZShtbSwKLQkJCQkJCSAgICh1MzIpdWkzMlRhc2tJZCwKLQkJCQkJCSAgICh1MzIpaEhhbmRsZSwKLQkJCQkJCSAgIG5vZGUsCi0JCQkJCQkgICAmbWFwcGluZyk7Ci0JaWYgKHJldCkgewotCQlEUk1fREVCVUcoImFkZF9ub2RlIGZhaWxlZCIpOwotCQlnb3RvIGZhaWxlZF9hZGRfbm9kZTsKLQl9Ci0KLQlub2RlID0gbWFwcGluZy0+bm9kZTsKLQlvZmZzZXRfcGFnZXMgPSBub2RlLT5zdGFydDsKLQotCURSTV9ERUJVRygiZ2V0IGZyZWUgbm9kZSBmb3IgJWxkIHBhZ2VzLCBvZmZzZXQgJWxkIHBhZ2VzIiwKLQkJCQkJCQlwYWdlcywgb2Zmc2V0X3BhZ2VzKTsKLQotCS8qdXBkYXRlIGd0dCovCi0JcHNiX2d0dF9pbnNlcnRfcGh5c19hZGRyZXNzZXMocGcsIHBQYWdlcywgKHVuc2lnbmVkKW9mZnNldF9wYWdlcywKLQkJCQkJCSh1bnNpZ25lZCl1aTMyUGFnZXNOdW0sIDApOwotCi0JKnVpMzJPZmZzZXQgPSBvZmZzZXRfcGFnZXM7Ci0JcmV0dXJuIDA7Ci0KLWZhaWxlZF9hZGRfbm9kZToKLQlwc2JfZ3R0X21tX2ZyZWVfbWVtKG1tLCBub2RlKTsKLWZhaWxlZF9wYWdlc19hbGxvYzoKLQlyZXR1cm4gcmV0OwotfQotCi0KLWludCBwc2JfZ3R0X3VubWFwX3B2cl9tZW1vcnkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGhIYW5kbGUsCi0JCQkJCQl1bnNpZ25lZCBpbnQgdWkzMlRhc2tJZCkKLXsKLQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IHBzYl9ndHRfbW0gKm1tID0gZGV2X3ByaXYtPmd0dF9tbTsKLQlzdHJ1Y3QgcHNiX2d0dCAqcGcgPSBkZXZfcHJpdi0+cGc7Ci0JdWludDMyX3QgcGFnZXMsIG9mZnNldF9wYWdlczsKLQlzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGU7Ci0JaW50IHJldDsKLQotCXJldCA9IHBzYl9ndHRfcmVtb3ZlX25vZGUobW0sICh1MzIpdWkzMlRhc2tJZCwgKHUzMiloSGFuZGxlLCAmbm9kZSk7Ci0JaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIgInJlbW92ZSBub2RlIGZhaWxlZFxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JLypyZW1vdmUgZ3R0IGVudHJpZXMqLwotCW9mZnNldF9wYWdlcyA9IG5vZGUtPnN0YXJ0OwotCXBhZ2VzID0gbm9kZS0+c2l6ZTsKLQotCXBzYl9ndHRfcmVtb3ZlX3BhZ2VzKHBnLCBvZmZzZXRfcGFnZXMsIHBhZ2VzLCAwLCAwLCAxKTsKLQotCS8qZnJlZSB0dCBub2RlKi8KLQlwc2JfZ3R0X21tX2ZyZWVfbWVtKG1tLCBub2RlKTsKLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2d0dC5oIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfZ3R0LmgKaW5kZXggMDI3MmY4My4uNTM1YWUwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfZ3R0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfZ3R0LmgKQEAgLTIyLDg0ICsyMiw0MCBAQAogCiAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KIAotLyojaW5jbHVkZSAiaW1nX3R5cGVzLmgiKi8KLQogc3RydWN0IHBzYl9ndHQgewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Ci0JaW50IGluaXRpYWxpemVkOwogCXVpbnQzMl90IGdhdHRfc3RhcnQ7CiAJdWludDMyX3QgbW11X2dhdHRfc3RhcnQ7Ci0JdWludDMyX3QgY2lfc3RhcnQ7Ci0JdWludDMyX3QgcmFyX3N0YXJ0OwogCXVpbnQzMl90IGd0dF9zdGFydDsKIAl1aW50MzJfdCBndHRfcGh5c19zdGFydDsKIAl1bnNpZ25lZCBndHRfcGFnZXM7CiAJdW5zaWduZWQgZ2F0dF9wYWdlczsKLQl1aW50MzJfdCBzdG9sZW5fYmFzZTsKLQl2b2lkICp2cmFtX2FkZHI7Ci0JdWludDMyX3QgcGdlX2N0bDsKLQl1MTYgZ21jaF9jdHJsOwogCXVuc2lnbmVkIGxvbmcgc3RvbGVuX3NpemU7CiAJdW5zaWduZWQgbG9uZyB2cmFtX3N0b2xlbl9zaXplOwotCXVuc2lnbmVkIGxvbmcgY2lfc3RvbGVuX3NpemU7Ci0JdW5zaWduZWQgbG9uZyByYXJfc3RvbGVuX3NpemU7Ci0JdWludDMyX3QgKmd0dF9tYXA7CiAJc3RydWN0IHJ3X3NlbWFwaG9yZSBzZW07CiB9OwogCi1zdHJ1Y3QgcHNiX2d0dF9tbSB7Ci0Jc3RydWN0IGRybV9tbSBiYXNlOwotCXN0cnVjdCBkcm1fb3Blbl9oYXNoIGhhc2g7Ci0JdWludDMyX3QgY291bnQ7Ci0Jc3BpbmxvY2tfdCBsb2NrOwotfTsKLQotc3RydWN0IHBzYl9ndHRfaGFzaF9lbnRyeSB7Ci0Jc3RydWN0IGRybV9vcGVuX2hhc2ggaHQ7Ci0JdWludDMyX3QgY291bnQ7Ci0Jc3RydWN0IGRybV9oYXNoX2l0ZW0gaXRlbTsKLX07Ci0KLXN0cnVjdCBwc2JfZ3R0X21lbV9tYXBwaW5nIHsKLQlzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGU7Ci0Jc3RydWN0IGRybV9oYXNoX2l0ZW0gaXRlbTsKLX07Ci0KIC8qRXhwb3J0ZWQgZnVuY3Rpb25zKi8KLWV4dGVybiBpbnQgcHNiX2d0dF9pbml0KHN0cnVjdCBwc2JfZ3R0ICpwZywgaW50IHJlc3VtZSk7Ci1leHRlcm4gaW50IHBzYl9ndHRfaW5zZXJ0X3BhZ2VzKHN0cnVjdCBwc2JfZ3R0ICpwZywgc3RydWN0IHBhZ2UgKipwYWdlcywKLQkJCQl1bnNpZ25lZCBvZmZzZXRfcGFnZXMsIHVuc2lnbmVkIG51bV9wYWdlcywKLQkJCQl1bnNpZ25lZCBkZXNpcmVkX3RpbGVfc3RyaWRlLAotCQkJCXVuc2lnbmVkIGh3X3RpbGVfc3RyaWRlLCBpbnQgdHlwZSk7Ci1leHRlcm4gaW50IHBzYl9ndHRfcmVtb3ZlX3BhZ2VzKHN0cnVjdCBwc2JfZ3R0ICpwZywgdW5zaWduZWQgb2Zmc2V0X3BhZ2VzLAotCQkJCXVuc2lnbmVkIG51bV9wYWdlcywKLQkJCQl1bnNpZ25lZCBkZXNpcmVkX3RpbGVfc3RyaWRlLAotCQkJCXVuc2lnbmVkIGh3X3RpbGVfc3RyaWRlLAotCQkJCWludCByY19wcm90KTsKK2V4dGVybiBpbnQgcHNiX2d0dF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCByZXN1bWUpOworZXh0ZXJuIHZvaWQgcHNiX2d0dF90YWtlZG93bihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIAotZXh0ZXJuIHN0cnVjdCBwc2JfZ3R0ICpwc2JfZ3R0X2FsbG9jKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwotZXh0ZXJuIHZvaWQgcHNiX2d0dF90YWtlZG93bihzdHJ1Y3QgcHNiX2d0dCAqcGcsIGludCBmcmVlKTsKLWV4dGVybiBpbnQgcHNiX2d0dF9tYXBfbWVtaW5mbyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJCXZvaWQgKiBoS2VybmVsTWVtSW5mbywKLQkJCQl1aW50MzJfdCAqb2Zmc2V0KTsKLWV4dGVybiBpbnQgcHNiX2d0dF91bm1hcF9tZW1pbmZvKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkJIHZvaWQgKiBoS2VybmVsTWVtSW5mbyk7Ci1leHRlcm4gaW50IHBzYl9ndHRfbWFwX21lbWluZm9faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKLQkJCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKLWV4dGVybiBpbnQgcHNiX2d0dF91bm1hcF9tZW1pbmZvX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCi0JCQkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKLWV4dGVybiBpbnQgcHNiX2d0dF9tbV9pbml0KHN0cnVjdCBwc2JfZ3R0ICpwZyk7Ci1leHRlcm4gdm9pZCBwc2JfZ3R0X21tX3Rha2Vkb3duKHZvaWQpOworLyogRWFjaCBndHRfcmFuZ2UgZGVzY3JpYmVzIGFuIGFsbG9jYXRpb24gaW4gdGhlIEdUVCBhcmVhICovCitzdHJ1Y3QgZ3R0X3JhbmdlIHsKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzb3VyY2U7CisJdTMyIG9mZnNldDsKKwlzdHJ1Y3Qga3JlZiBrcmVmOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCBnZW07CS8qIEdFTSBoaWdoIGxldmVsIHN0dWZmICovCisJaW50IGluX2dhcnQ7CQkJLyogQ3VycmVudGx5IGluIHRoZSBHQVJUIChyZWYgY3QpICovCisgICAgICAgIGJvb2wgc3RvbGVuOwkJCS8qIEJhY2tlZCBmcm9tIHN0b2xlbiBSQU0gKi8KKyAgICAgICAgYm9vbCBtbWFwcGluZzsJCQkvKiBJcyBtbWFwcGFibGUgKi8KKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOwkJLyogQmFja2luZyBwYWdlcyBpZiBwcmVzZW50ICovCit9OwogCi1leHRlcm4gaW50IHBzYl9ndHRfbWFwX3B2cl9tZW1vcnkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoSGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHVpMzJUYXNrSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWFfYWRkcl90ICpwUGFnZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdWkzMlBhZ2VzTnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICp1aTMyT2Zmc2V0KTsKLQotZXh0ZXJuIGludCBwc2JfZ3R0X3VubWFwX3B2cl9tZW1vcnkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoSGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHVpMzJUYXNrSWQpOworZXh0ZXJuIHN0cnVjdCBndHRfcmFuZ2UgKnBzYl9ndHRfYWxsb2NfcmFuZ2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGxlbiwKKwkJCQkJCWNvbnN0IGNoYXIgKm5hbWUsIGludCBiYWNrZWQpOworZXh0ZXJuIHZvaWQgcHNiX2d0dF9rcmVmX3B1dChzdHJ1Y3QgZ3R0X3JhbmdlICpndCk7CitleHRlcm4gdm9pZCBwc2JfZ3R0X2ZyZWVfcmFuZ2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGd0dF9yYW5nZSAqZ3QpOworZXh0ZXJuIGludCBwc2JfZ3R0X3BpbihzdHJ1Y3QgZ3R0X3JhbmdlICpndCk7CitleHRlcm4gdm9pZCBwc2JfZ3R0X3VucGluKHN0cnVjdCBndHRfcmFuZ2UgKmd0KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9pbnRlbF9kaXNwbGF5LmMKaW5kZXggODBiMzdmNC4uNGY0N2QwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfaW50ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2ludGVsX2Rpc3BsYXkuYwpAQCAtMzQxLDkgKzM0MSw4IEBACiAJLyogc3RydWN0IGRybV9pOTE1X21hc3Rlcl9wcml2YXRlICptYXN0ZXJfcHJpdjsgKi8KIAlzdHJ1Y3QgcHNiX2ludGVsX2NydGMgKnBzYl9pbnRlbF9jcnRjID0gdG9fcHNiX2ludGVsX2NydGMoY3J0Yyk7CiAJc3RydWN0IHBzYl9mcmFtZWJ1ZmZlciAqcHNiZmIgPSB0b19wc2JfZmIoY3J0Yy0+ZmIpOwotCXN0cnVjdCBwc2JfaW50ZWxfbW9kZV9kZXZpY2UgKm1vZGVfZGV2ID0gcHNiX2ludGVsX2NydGMtPm1vZGVfZGV2OwogCWludCBwaXBlID0gcHNiX2ludGVsX2NydGMtPnBpcGU7Ci0JdW5zaWduZWQgbG9uZyBTdGFydCwgT2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgc3RhcnQsIG9mZnNldDsKIAlpbnQgZHNwYmFzZSA9IChwaXBlID09IDAgPyBEU1BBQkFTRSA6IERTUEJCQVNFKTsKIAlpbnQgZHNwc3VyZiA9IChwaXBlID09IDAgPyBEU1BBU1VSRiA6IERTUEJTVVJGKTsKIAlpbnQgZHNwc3RyaWRlID0gKHBpcGUgPT0gMCkgPyBEU1BBU1RSSURFIDogRFNQQlNUUklERTsKQEAgLTM1OSwxMiArMzU4LDE3IEBACiAJCXJldHVybiAwOwogCX0KIAotCWlmICghb3NwbV9wb3dlcl91c2luZ19od19iZWdpbihPU1BNX0RJU1BMQVlfSVNMQU5ELAotCQkJCSAgICAgICBPU1BNX1VIQl9GT1JDRV9QT1dFUl9PTikpCisJaWYgKCFnbWFfcG93ZXJfYmVnaW4oZGV2LCB0cnVlKSkKIAkJcmV0dXJuIDA7CiAKLQlTdGFydCA9IG1vZGVfZGV2LT5ib19vZmZzZXQoZGV2LCBwc2JmYik7Ci0JT2Zmc2V0ID0geSAqIGNydGMtPmZiLT5waXRjaCArIHggKiAoY3J0Yy0+ZmItPmJpdHNfcGVyX3BpeGVsIC8gOCk7CisJLyogV2UgYXJlIGRpc3BsYXlpbmcgdGhpcyBidWZmZXIsIG1ha2Ugc3VyZSBpdCBpcyBhY3R1YWxseSBsb2FkZWQKKwkgICBpbnRvIHRoZSBHVFQgKi8KKwlyZXQgPSBwc2JfZ3R0X3Bpbihwc2JmYi0+Z3R0KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBwc2JfaW50ZWxfcGlwZV9zZXRfYmFzZV9leGl0OworCXN0YXJ0ID0gcHNiZmItPmd0dC0+b2Zmc2V0OworCisJb2Zmc2V0ID0geSAqIGNydGMtPmZiLT5waXRjaCArIHggKiAoY3J0Yy0+ZmItPmJpdHNfcGVyX3BpeGVsIC8gOCk7CiAKIAlSRUdfV1JJVEUoZHNwc3RyaWRlLCBjcnRjLT5mYi0+cGl0Y2gpOwogCkBAIC0zODgsMjUgKzM5MiwyOSBAQAogCWRlZmF1bHQ6CiAJCURSTV9FUlJPUigiVW5rbm93biBjb2xvciBkZXB0aFxuIik7CiAJCXJldCA9IC1FSU5WQUw7CisJCXBzYl9ndHRfdW5waW4ocHNiZmItPmd0dCk7CiAJCWdvdG8gcHNiX2ludGVsX3BpcGVfc2V0X2Jhc2VfZXhpdDsKIAl9CiAJUkVHX1dSSVRFKGRzcGNudHJfcmVnLCBkc3BjbnRyKTsKIAotCURSTV9ERUJVRygiV3JpdGluZyBiYXNlICUwOGxYICUwOGxYICVkICVkXG4iLCBTdGFydCwgT2Zmc2V0LCB4LCB5KTsKKworCURSTV9ERUJVRygiV3JpdGluZyBiYXNlICUwOGxYICUwOGxYICVkICVkXG4iLCBzdGFydCwgb2Zmc2V0LCB4LCB5KTsKIAlpZiAoMCAvKiBGSVhNRUFDIC0gY2hlY2sgd2hhdCBQU0IgbmVlZHMgKi8pIHsKLQkJUkVHX1dSSVRFKGRzcGJhc2UsIE9mZnNldCk7CisJCVJFR19XUklURShkc3BiYXNlLCBvZmZzZXQpOwogCQlSRUdfUkVBRChkc3BiYXNlKTsKLQkJUkVHX1dSSVRFKGRzcHN1cmYsIFN0YXJ0KTsKKwkJUkVHX1dSSVRFKGRzcHN1cmYsIHN0YXJ0KTsKIAkJUkVHX1JFQUQoZHNwc3VyZik7CiAJfSBlbHNlIHsKLQkJUkVHX1dSSVRFKGRzcGJhc2UsIFN0YXJ0ICsgT2Zmc2V0KTsKKwkJUkVHX1dSSVRFKGRzcGJhc2UsIHN0YXJ0ICsgb2Zmc2V0KTsKIAkJUkVHX1JFQUQoZHNwYmFzZSk7CiAJfQogCisJLyogSWYgdGhlcmUgd2FzIGEgcHJldmlvdXMgZGlzcGxheSB3ZSBjYW4gbm93IHVucGluIGl0ICovCisJaWYgKG9sZF9mYikKKwkJcHNiX2d0dF91bnBpbih0b19wc2JfZmIob2xkX2ZiKS0+Z3R0KTsKKwogcHNiX2ludGVsX3BpcGVfc2V0X2Jhc2VfZXhpdDoKLQotCW9zcG1fcG93ZXJfdXNpbmdfaHdfZW5kKE9TUE1fRElTUExBWV9JU0xBTkQpOwotCisJZ21hX3Bvd2VyX2VuZChkZXYpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTgxNiw4ICs4MjQsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKG9zcG1fcG93ZXJfdXNpbmdfaHdfYmVnaW4oT1NQTV9ESVNQTEFZX0lTTEFORCwKLQkJCQkgICAgICBPU1BNX1VIQl9PTkxZX0lGX09OKSkgeworCWlmIChnbWFfcG93ZXJfYmVnaW4oZGV2LCBmYWxzZSkpIHsKIAkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CiAJCQlSRUdfV1JJVEUocGFscmVnICsgNCAqIGksCiAJCQkJICAoKHBzYl9pbnRlbF9jcnRjLT5sdXRfcltpXSArCkBAIC04MjcsNyArODM0LDcgQEAKIAkJCQkgIChwc2JfaW50ZWxfY3J0Yy0+bHV0X2JbaV0gKwogCQkJCSAgcHNiX2ludGVsX2NydGMtPmx1dF9hZGpbaV0pKTsKIAkJfQotCQlvc3BtX3Bvd2VyX3VzaW5nX2h3X2VuZChPU1BNX0RJU1BMQVlfSVNMQU5EKTsKKwkJZ21hX3Bvd2VyX2VuZChkZXYpOwogCX0gZWxzZSB7CiAJCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewogCQkJZGV2X3ByaXYtPnNhdmVfcGFsZXR0ZV9hW2ldID0KQEAgLTEwMjIsMTkgKzEwMjksMTQgQEAKIAkJCQkgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCkKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwotCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0KLQkJCQkoc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqKWRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IHBzYl9ndHQgKnBnID0gZGV2X3ByaXYtPnBnOwogCXN0cnVjdCBwc2JfaW50ZWxfY3J0YyAqcHNiX2ludGVsX2NydGMgPSB0b19wc2JfaW50ZWxfY3J0YyhjcnRjKTsKLQlzdHJ1Y3QgcHNiX2ludGVsX21vZGVfZGV2aWNlICptb2RlX2RldiA9IHBzYl9pbnRlbF9jcnRjLT5tb2RlX2RldjsKIAlpbnQgcGlwZSA9IHBzYl9pbnRlbF9jcnRjLT5waXBlOwogCXVpbnQzMl90IGNvbnRyb2wgPSAocGlwZSA9PSAwKSA/IENVUkFDTlRSIDogQ1VSQkNOVFI7CiAJdWludDMyX3QgYmFzZSA9IChwaXBlID09IDApID8gQ1VSQUJBU0UgOiBDVVJCQkFTRTsKIAl1aW50MzJfdCB0ZW1wOwogCXNpemVfdCBhZGRyID0gMDsKLQl1aW50MzJfdCBwYWdlX29mZnNldDsKLQlzaXplX3Qgc2l6ZTsKLQl2b2lkICpibzsKKwlzdHJ1Y3QgZ3R0X3JhbmdlICpndDsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKIAlpbnQgcmV0OwogCiAJRFJNX0RFQlVHKCJcbiIpOwpAQCAtMTA0MywyMiArMTA0NSwyMSBAQAogCWlmICghaGFuZGxlKSB7CiAJCURSTV9ERUJVRygiY3Vyc29yIG9mZlxuIik7CiAJCS8qIHR1cm4gb2ZmIHRoZSBjdXJzb3IgKi8KLQkJdGVtcCA9IDA7Ci0JCXRlbXAgfD0gQ1VSU09SX01PREVfRElTQUJMRTsKKwkJdGVtcCA9IENVUlNPUl9NT0RFX0RJU0FCTEU7CiAKLQkJaWYgKG9zcG1fcG93ZXJfdXNpbmdfaHdfYmVnaW4oT1NQTV9ESVNQTEFZX0lTTEFORCwKLQkJCQkJICAgICAgT1NQTV9VSEJfT05MWV9JRl9PTikpIHsKKwkJaWYgKGdtYV9wb3dlcl9iZWdpbihkZXYsIGZhbHNlKSkgewogCQkJUkVHX1dSSVRFKGNvbnRyb2wsIHRlbXApOwogCQkJUkVHX1dSSVRFKGJhc2UsIDApOwotCQkJb3NwbV9wb3dlcl91c2luZ19od19lbmQoT1NQTV9ESVNQTEFZX0lTTEFORCk7CisJCQlnbWFfcG93ZXJfZW5kKGRldik7CiAJCX0KIAotCQkvKiB1bnBpbiB0aGUgb2xkIGJvICovCi0JCWlmIChwc2JfaW50ZWxfY3J0Yy0+Y3Vyc29yX2JvKSB7Ci0JCQltb2RlX2Rldi0+Ym9fdW5waW5fZm9yX3NjYW5vdXQoZGV2LAotCQkJCQkJICAgICAgIHBzYl9pbnRlbF9jcnRjLT4KLQkJCQkJCSAgICAgICBjdXJzb3JfYm8pOwotCQkJcHNiX2ludGVsX2NydGMtPmN1cnNvcl9ibyA9IE5VTEw7CisJCS8qIFVucGluIHRoZSBvbGQgR0VNIG9iamVjdCAqLworCQlpZiAocHNiX2ludGVsX2NydGMtPmN1cnNvcl9vYmopIHsKKwkJCWd0ID0gY29udGFpbmVyX29mKHBzYl9pbnRlbF9jcnRjLT5jdXJzb3Jfb2JqLAorCQkJCQkJCXN0cnVjdCBndHRfcmFuZ2UsIGdlbSk7CisJCQlwc2JfZ3R0X3VucGluKGd0KTsKKwkJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKHBzYl9pbnRlbF9jcnRjLT5jdXJzb3Jfb2JqKTsKKwkJCXBzYl9pbnRlbF9jcnRjLT5jdXJzb3Jfb2JqID0gTlVMTDsKIAkJfQogCiAJCXJldHVybiAwOwpAQCAtMTA3MCwzMiArMTA3MSwyNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlibyA9IG1vZGVfZGV2LT5ib19mcm9tX2hhbmRsZShkZXYsIGZpbGVfcHJpdiwgaGFuZGxlKTsKLQlpZiAoIWJvKQorCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgaGFuZGxlKTsKKwlpZiAoIW9iaikKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKLQlyZXQgPSBtb2RlX2Rldi0+Ym9fcGluX2Zvcl9zY2Fub3V0KGRldiwgYm8pOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0Jc2l6ZSA9IG1vZGVfZGV2LT5ib19zaXplKGRldiwgYm8pOwotCWlmIChzaXplIDwgd2lkdGggKiBoZWlnaHQgKiA0KSB7CisJaWYgKG9iai0+c2l6ZSA8IHdpZHRoICogaGVpZ2h0ICogNCkgewogCQlEUk1fRVJST1IoImJ1ZmZlciBpcyB0byBzbWFsbFxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCS8qaW5zZXJ0IHRoaXMgYm8gaW50byBndHQqLwotCURSTV9ERUJVRygiJXM6IG1hcCBtZW1pbmZvIGZvciBodyBjdXJzb3IuIGhhbmRsZSAleFxuIiwKLQkJCQkJCV9fZnVuY19fLCBoYW5kbGUpOworCWd0ID0gY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGd0dF9yYW5nZSwgZ2VtKTsKIAotCXJldCA9IHBzYl9ndHRfbWFwX21lbWluZm8oZGV2LCAodm9pZCAqKWhhbmRsZSwgJnBhZ2Vfb2Zmc2V0KTsKKwkvKiBQaW4gdGhlIG1lbW9yeSBpbnRvIHRoZSBHVFQgKi8KKwlyZXQgPSBwc2JfZ3R0X3BpbihndCk7CiAJaWYgKHJldCkgewotCQlEUk1fRVJST1IoIkNhbiBub3QgbWFwIG1lbWluZm8gdG8gR1RULiBoYW5kbGUgMHgleFxuIiwgaGFuZGxlKTsKKwkJRFJNX0VSUk9SKCJDYW4gbm90IHBpbiBkb3duIGhhbmRsZSAweCV4XG4iLCBoYW5kbGUpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCWFkZHIgPSBwYWdlX29mZnNldCA8PCBQQUdFX1NISUZUOwogCi0JYWRkciArPSBwZy0+c3RvbGVuX2Jhc2U7CisJYWRkciA9IGd0LT5vZmZzZXQ7CS8qIE9yIHJlc291cmNlLnN0YXJ0ID8/PyAqLwogCiAJcHNiX2ludGVsX2NydGMtPmN1cnNvcl9hZGRyID0gYWRkcjsKIApAQCAtMTEwNCwxNyArMTA5OSwxOSBAQAogCXRlbXAgfD0gKHBpcGUgPDwgMjgpOwogCXRlbXAgfD0gQ1VSU09SX01PREVfNjRfQVJHQl9BWCB8IE1DVVJTT1JfR0FNTUFfRU5BQkxFOwogCi0JaWYgKG9zcG1fcG93ZXJfdXNpbmdfaHdfYmVnaW4oT1NQTV9ESVNQTEFZX0lTTEFORCwKLQkJCQkgICAgICBPU1BNX1VIQl9PTkxZX0lGX09OKSkgeworCWlmIChnbWFfcG93ZXJfYmVnaW4oZGV2LCBmYWxzZSkpIHsKIAkJUkVHX1dSSVRFKGNvbnRyb2wsIHRlbXApOwogCQlSRUdfV1JJVEUoYmFzZSwgYWRkcik7Ci0JCW9zcG1fcG93ZXJfdXNpbmdfaHdfZW5kKE9TUE1fRElTUExBWV9JU0xBTkQpOworCQlnbWFfcG93ZXJfZW5kKGRldik7CiAJfQogCiAJLyogdW5waW4gdGhlIG9sZCBibyAqLwotCWlmIChwc2JfaW50ZWxfY3J0Yy0+Y3Vyc29yX2JvICYmIHBzYl9pbnRlbF9jcnRjLT5jdXJzb3JfYm8gIT0gYm8pIHsKLQkJbW9kZV9kZXYtPmJvX3VucGluX2Zvcl9zY2Fub3V0KGRldiwgcHNiX2ludGVsX2NydGMtPmN1cnNvcl9ibyk7Ci0JCXBzYl9pbnRlbF9jcnRjLT5jdXJzb3JfYm8gPSBibzsKKwlpZiAocHNiX2ludGVsX2NydGMtPmN1cnNvcl9vYmogJiYgcHNiX2ludGVsX2NydGMtPmN1cnNvcl9vYmogIT0gb2JqKSB7CisJCWd0ID0gY29udGFpbmVyX29mKHBzYl9pbnRlbF9jcnRjLT5jdXJzb3Jfb2JqLAorCQkJCQkJCXN0cnVjdCBndHRfcmFuZ2UsIGdlbSk7CisJCXBzYl9ndHRfdW5waW4oZ3QpOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShwc2JfaW50ZWxfY3J0Yy0+Y3Vyc29yX29iaik7CisJCXBzYl9pbnRlbF9jcnRjLT5jdXJzb3Jfb2JqID0gb2JqOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTEyNiw3ICsxMTIzLDcgQEAKIAlzdHJ1Y3QgcHNiX2ludGVsX2NydGMgKnBzYl9pbnRlbF9jcnRjID0gdG9fcHNiX2ludGVsX2NydGMoY3J0Yyk7CiAJaW50IHBpcGUgPSBwc2JfaW50ZWxfY3J0Yy0+cGlwZTsKIAl1aW50MzJfdCB0ZW1wID0gMDsKLQl1aW50MzJfdCBhZGRlcjsKKwl1aW50MzJfdCBhZGRyOwogCiAKIAlpZiAoeCA8IDApIHsKQEAgLTExNDEsMTMgKzExMzgsMTIgQEAKIAl0ZW1wIHw9ICgoeCAmIENVUlNPUl9QT1NfTUFTSykgPDwgQ1VSU09SX1hfU0hJRlQpOwogCXRlbXAgfD0gKCh5ICYgQ1VSU09SX1BPU19NQVNLKSA8PCBDVVJTT1JfWV9TSElGVCk7CiAKLQlhZGRlciA9IHBzYl9pbnRlbF9jcnRjLT5jdXJzb3JfYWRkcjsKKwlhZGRyID0gcHNiX2ludGVsX2NydGMtPmN1cnNvcl9hZGRyOwogCi0JaWYgKG9zcG1fcG93ZXJfdXNpbmdfaHdfYmVnaW4oT1NQTV9ESVNQTEFZX0lTTEFORCwKLQkJCQkgICAgICBPU1BNX1VIQl9PTkxZX0lGX09OKSkgeworCWlmIChnbWFfcG93ZXJfYmVnaW4oZGV2LCBmYWxzZSkpIHsKIAkJUkVHX1dSSVRFKChwaXBlID09IDApID8gQ1VSQVBPUyA6IENVUkJQT1MsIHRlbXApOwotCQlSRUdfV1JJVEUoKHBpcGUgPT0gMCkgPyBDVVJBQkFTRSA6IENVUkJCQVNFLCBhZGRlcik7Ci0JCW9zcG1fcG93ZXJfdXNpbmdfaHdfZW5kKE9TUE1fRElTUExBWV9JU0xBTkQpOworCQlSRUdfV1JJVEUoKHBpcGUgPT0gMCkgPyBDVVJBQkFTRSA6IENVUkJCQVNFLCBhZGRyKTsKKwkJZ21hX3Bvd2VyX2VuZChkZXYpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTExOTcsMTUgKzExOTMsMTQgQEAKIAlib29sIGlzX2x2ZHM7CiAJc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCi0JaWYgKG9zcG1fcG93ZXJfdXNpbmdfaHdfYmVnaW4oT1NQTV9ESVNQTEFZX0lTTEFORCwKLQkJCQkgICAgICBPU1BNX1VIQl9PTkxZX0lGX09OKSkgeworCWlmIChnbWFfcG93ZXJfYmVnaW4oZGV2LCBmYWxzZSkpIHsKIAkJZHBsbCA9IFJFR19SRUFEKChwaXBlID09IDApID8gRFBMTF9BIDogRFBMTF9CKTsKIAkJaWYgKChkcGxsICYgRElTUExBWV9SQVRFX1NFTEVDVF9GUEExKSA9PSAwKQogCQkJZnAgPSBSRUdfUkVBRCgocGlwZSA9PSAwKSA/IEZQQTAgOiBGUEIwKTsKIAkJZWxzZQogCQkJZnAgPSBSRUdfUkVBRCgocGlwZSA9PSAwKSA/IEZQQTEgOiBGUEIxKTsKIAkJaXNfbHZkcyA9IChwaXBlID09IDEpICYmIChSRUdfUkVBRChMVkRTKSAmIExWRFNfUE9SVF9FTik7Ci0JCW9zcG1fcG93ZXJfdXNpbmdfaHdfZW5kKE9TUE1fRElTUExBWV9JU0xBTkQpOworCQlnbWFfcG93ZXJfZW5kKGRldik7CiAJfSBlbHNlIHsKIAkJZHBsbCA9IChwaXBlID09IDApID8KIAkJCWRldl9wcml2LT5zYXZlRFBMTF9BIDogZGV2X3ByaXYtPnNhdmVEUExMX0I7CkBAIC0xMjc3LDEzICsxMjcyLDEyIEBACiAJaW50IHZzeW5jOwogCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAotCWlmIChvc3BtX3Bvd2VyX3VzaW5nX2h3X2JlZ2luKE9TUE1fRElTUExBWV9JU0xBTkQsCi0JCQkJICAgICAgT1NQTV9VSEJfT05MWV9JRl9PTikpIHsKKwlpZiAoZ21hX3Bvd2VyX2JlZ2luKGRldiwgZmFsc2UpKSB7CiAJCWh0b3QgPSBSRUdfUkVBRCgocGlwZSA9PSAwKSA/IEhUT1RBTF9BIDogSFRPVEFMX0IpOwogCQloc3luYyA9IFJFR19SRUFEKChwaXBlID09IDApID8gSFNZTkNfQSA6IEhTWU5DX0IpOwogCQl2dG90ID0gUkVHX1JFQUQoKHBpcGUgPT0gMCkgPyBWVE9UQUxfQSA6IFZUT1RBTF9CKTsKIAkJdnN5bmMgPSBSRUdfUkVBRCgocGlwZSA9PSAwKSA/IFZTWU5DX0EgOiBWU1lOQ19CKTsKLQkJb3NwbV9wb3dlcl91c2luZ19od19lbmQoT1NQTV9ESVNQTEFZX0lTTEFORCk7CisJCWdtYV9wb3dlcl9lbmQoZGV2KTsKIAl9IGVsc2UgewogCQlodG90ID0gKHBpcGUgPT0gMCkgPwogCQkJZGV2X3ByaXYtPnNhdmVIVE9UQUxfQSA6IGRldl9wcml2LT5zYXZlSFRPVEFMX0I7CkBAIC0xMzE4LDcgKzEzMTIsMTYgQEAKIHN0YXRpYyB2b2lkIHBzYl9pbnRlbF9jcnRjX2Rlc3Ryb3koc3RydWN0IGRybV9jcnRjICpjcnRjKQogewogCXN0cnVjdCBwc2JfaW50ZWxfY3J0YyAqcHNiX2ludGVsX2NydGMgPSB0b19wc2JfaW50ZWxfY3J0YyhjcnRjKTsKKwlzdHJ1Y3QgZ3R0X3JhbmdlICpndDsKIAorCS8qIFVucGluIHRoZSBvbGQgR0VNIG9iamVjdCAqLworCWlmIChwc2JfaW50ZWxfY3J0Yy0+Y3Vyc29yX29iaikgeworCQlndCA9IGNvbnRhaW5lcl9vZihwc2JfaW50ZWxfY3J0Yy0+Y3Vyc29yX29iaiwKKwkJCQkJCXN0cnVjdCBndHRfcmFuZ2UsIGdlbSk7CisJCXBzYl9ndHRfdW5waW4oZ3QpOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShwc2JfaW50ZWxfY3J0Yy0+Y3Vyc29yX29iaik7CisJCXBzYl9pbnRlbF9jcnRjLT5jdXJzb3Jfb2JqID0gTlVMTDsKKwl9CiAJa2ZyZWUocHNiX2ludGVsX2NydGMtPmNydGNfc3RhdGUpOwogCWRybV9jcnRjX2NsZWFudXAoY3J0Yyk7CiAJa2ZyZWUocHNiX2ludGVsX2NydGMpOwpAQCAtMTMzMywxMCArMTMzNiw2IEBACiAJLmNvbW1pdCA9IHBzYl9pbnRlbF9jcnRjX2NvbW1pdCwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIG1yc3RfaGVscGVyX2Z1bmNzOwotc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgbWRmbGRfaGVscGVyX2Z1bmNzOwotY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIG1kZmxkX2ludGVsX2NydGNfZnVuY3M7Ci0KIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBwc2JfaW50ZWxfY3J0Y19mdW5jcyA9IHsKIAkuc2F2ZSA9IHBzYl9pbnRlbF9jcnRjX3NhdmUsCiAJLnJlc3RvcmUgPSBwc2JfaW50ZWxfY3J0Y19yZXN0b3JlLApAQCAtMTM5Nyw3ICsxMzk2LDExIEBACiAJcHNiX2ludGVsX2NydGMtPm1vZGVfZGV2ID0gbW9kZV9kZXY7CiAJcHNiX2ludGVsX2NydGMtPmN1cnNvcl9hZGRyID0gMDsKIAotCWRybV9jcnRjX2hlbHBlcl9hZGQoJnBzYl9pbnRlbF9jcnRjLT5iYXNlLAorCWlmIChJU19NUlNUKGRldikpCisJCWRybV9jcnRjX2hlbHBlcl9hZGQoJnBzYl9pbnRlbF9jcnRjLT5iYXNlLAorCQkJCSAgICAmbXJzdF9oZWxwZXJfZnVuY3MpOworCWVsc2UKKwkJZHJtX2NydGNfaGVscGVyX2FkZCgmcHNiX2ludGVsX2NydGMtPmJhc2UsCiAJCQkJICAgICZwc2JfaW50ZWxfaGVscGVyX2Z1bmNzKTsKIAogCS8qIFNldHVwIHRoZSBhcnJheSBvZiBkcm1fY29ubmVjdG9yIHBvaW50ZXIgYXJyYXkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2ludGVsX2Rydi5oIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfaW50ZWxfZHJ2LmgKaW5kZXggZjYyMjljNS4uNjAwNmRkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfaW50ZWxfZHJ2LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfaW50ZWxfZHJ2LmgKQEAgLTc2LDEzICs3Niw3IEBACiAJLyoKIAkgKiBBYnN0cmFjdGVkIG1lbW9yeSBtYW5hZ2VyIG9wZXJhdGlvbnMKIAkgKi8KLQl2b2lkICooKmJvX2Zyb21faGFuZGxlKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCi0JCQkJIHVuc2lnbmVkIGludCBoYW5kbGUpOwotCSBzaXplX3QoKmJvX3NpemUpIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpibyk7CiAJIHNpemVfdCgqYm9fb2Zmc2V0KSAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqYm8pOwotCWludCAoKmJvX3Bpbl9mb3Jfc2Nhbm91dCkgKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmJvKTsKLQlpbnQgKCpib191bnBpbl9mb3Jfc2Nhbm91dCkgKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmJvKTsKIAogCS8qCiAJICogQ3Vyc29yCkBAIC0xNTYsMTEgKzE1MCw4IEBACiAJLyogYSBtb2RlX3NldCBmb3IgZmJkZXYgdXNlcnMgb24gdGhpcyBjcnRjICovCiAJc3RydWN0IGRybV9tb2RlX3NldCBtb2RlX3NldDsKIAotCS8qIGN1cnJlbnQgYm8gd2Ugc2Nhbm91dCBmcm9tICovCi0Jdm9pZCAqc2Nhbm91dF9ibzsKLQotCS8qIGN1cnJlbnQgYm8gd2UgY3Vyc29yIGZyb20gKi8KLQl2b2lkICpjdXJzb3JfYm87CisJLyogR0VNIG9iamVjdCB0aGF0IGhvbGRzIG91ciBjdXJzb3IgKi8KKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmN1cnNvcl9vYmo7CiAKIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBzYXZlZF9tb2RlOwogCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIHNhdmVkX2FkanVzdGVkX21vZGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9pbnRlbF9sdmRzLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9pbnRlbF9sdmRzLmMKaW5kZXggZDNkMjEwYS4uYjBhMjI1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfaW50ZWxfbHZkcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2ludGVsX2x2ZHMuYwpAQCAtMzIsMTMgKzMyLDYgQEAKICNpbmNsdWRlICJwc2JfcG93ZXJtZ210LmgiCiAjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogCi0vKiBNUlNUIGRlZmluZXMgc3RhcnQgKi8KLXVpbnQ4X3QgYmxjX2ZyZXE7Ci11aW50OF90IGJsY19taW5icmlnaHRuZXNzOwotdWludDhfdCBibGNfaTJjYWRkcjsKLXVpbnQ4X3QgYmxjX2JyaWdodG5lc3NjbWQ7Ci1pbnQgbHZkc19iYWNrbGlnaHQ7CQkvKiByZXN0b3JlIGJhY2tsaWdodCB0byB0aGlzIHZhbHVlICovCi0KIHUzMiBDb3JlQ2xvY2s7CiB1MzIgUFdNQ29udHJvbFJlZ0ZyZXE7CiAKQEAgLTgzLDEzICs3NiwxMiBAQAogCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAl1MzIgcmV0VmFsOwogCi0JaWYgKG9zcG1fcG93ZXJfdXNpbmdfaHdfYmVnaW4oT1NQTV9ESVNQTEFZX0lTTEFORCwKLQkJCQkJT1NQTV9VSEJfT05MWV9JRl9PTikpIHsKKwlpZiAoZ21hX3Bvd2VyX2JlZ2luKGRldiwgZmFsc2UpKSB7CiAJCXJldFZhbCA9ICgoUkVHX1JFQUQoQkxDX1BXTV9DVEwpICYKIAkJCSAgQkFDS0xJR0hUX01PRFVMQVRJT05fRlJFUV9NQVNLKSA+PgogCQkJICBCQUNLTElHSFRfTU9EVUxBVElPTl9GUkVRX1NISUZUKSAqIDI7CiAKLQkJb3NwbV9wb3dlcl91c2luZ19od19lbmQoT1NQTV9ESVNQTEFZX0lTTEFORCk7CisJCWdtYV9wb3dlcl9lbmQoZGV2KTsKIAl9IGVsc2UKIAkJcmV0VmFsID0gKChkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMICYKIAkJCSAgQkFDS0xJR0hUX01PRFVMQVRJT05fRlJFUV9NQVNLKSA+PgpAQCAtOTgsOCArOTAsMTEgQEAKIAlyZXR1cm4gcmV0VmFsOwogfQogCi0vKioKKy8qCiAgKiBTZXQgTFZEUyBiYWNrbGlnaHQgbGV2ZWwgYnkgSTJDIGNvbW1hbmQKKyAqCisgKiBGSVhNRTogYXQgc29tZSBwb2ludCB3ZSBuZWVkIHRvIGJvdGggdHJhY2sgdGhpcyBmb3IgUE0gYW5kIGFsc28KKyAqIGRpc2FibGUgcnVudGltZSBwbSBvbiBNUlNUIGlmIHRoZSBicmlnaHRuZXNzIGlzIG5pbCAoaWUgYmxhbmtlZCkKICAqLwogc3RhdGljIGludCBwc2JfbHZkc19pMmNfc2V0X2JyaWdodG5lc3Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkJdW5zaWduZWQgaW50IGxldmVsKQpAQCAtMTMyLDcgKzEyNyw3IEBACiAKIAlpZiAoaTJjX3RyYW5zZmVyKCZsdmRzX2kyY19idXMtPmFkYXB0ZXIsIG1zZ3MsIDEpID09IDEpIHsKIAkJRFJNX0RFQlVHKCJJMkMgc2V0IGJyaWdodG5lc3MuKGNvbW1hbmQsIHZhbHVlKSAoJWQsICVkKVxuIiwKLQkJCWJsY19icmlnaHRuZXNzY21kLAorCQkJZGV2X3ByaXYtPmx2ZHNfYmwtPmJyaWdodG5lc3NjbWQsCiAJCQlibGNfaTJjX2JyaWdodG5lc3MpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0yMDAsMTQgKzE5NSwxMyBAQAogCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAl1MzIgYmxjX3B3bV9jdGw7CiAKLQlpZiAob3NwbV9wb3dlcl91c2luZ19od19iZWdpbihPU1BNX0RJU1BMQVlfSVNMQU5ELAotCQkJCQlPU1BNX1VIQl9PTkxZX0lGX09OKSkgeworCWlmIChnbWFfcG93ZXJfYmVnaW4oZGV2LCBmYWxzZSkpIHsKIAkJYmxjX3B3bV9jdGwgPQogCQkJUkVHX1JFQUQoQkxDX1BXTV9DVEwpICYgfkJBQ0tMSUdIVF9EVVRZX0NZQ0xFX01BU0s7CiAJCVJFR19XUklURShCTENfUFdNX0NUTCwKIAkJCQkoYmxjX3B3bV9jdGwgfAogCQkJCShsZXZlbCA8PCBCQUNLTElHSFRfRFVUWV9DWUNMRV9TSElGVCkpKTsKLQkJb3NwbV9wb3dlcl91c2luZ19od19lbmQoT1NQTV9ESVNQTEFZX0lTTEFORCk7CisJCWdtYV9wb3dlcl9lbmQoZGV2KTsKIAl9IGVsc2UgewogCQlibGNfcHdtX2N0bCA9IGRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwgJgogCQkJCX5CQUNLTElHSFRfRFVUWV9DWUNMRV9NQVNLOwpAQCAtMjI0LDggKzIxOCw3IEBACiB7CiAJdTMyIHBwX3N0YXR1czsKIAotCWlmICghb3NwbV9wb3dlcl91c2luZ19od19iZWdpbihPU1BNX0RJU1BMQVlfSVNMQU5ELAotCQkJCQlPU1BNX1VIQl9GT1JDRV9QT1dFUl9PTikpCisJaWYgKCFnbWFfcG93ZXJfYmVnaW4oZGV2LCB0cnVlKSkKIAkJcmV0dXJuOwogCiAJaWYgKG9uKSB7CkBAIC0yNDgsNyArMjQxLDcgQEAKIAkJfSB3aGlsZSAocHBfc3RhdHVzICYgUFBfT04pOwogCX0KIAotCW9zcG1fcG93ZXJfdXNpbmdfaHdfZW5kKE9TUE1fRElTUExBWV9JU0xBTkQpOworCWdtYV9wb3dlcl9lbmQoZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgcHNiX2ludGVsX2x2ZHNfZW5jb2Rlcl9kcG1zKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwgaW50IG1vZGUpCkBAIC00MDAsMTEgKzM5MywxNSBAQAogCWlmIChwc2JfaW50ZWxfb3V0cHV0LT50eXBlID09IElOVEVMX09VVFBVVF9NSVBJMikKIAkJcGFuZWxfZml4ZWRfbW9kZSA9IG1vZGVfZGV2LT5wYW5lbF9maXhlZF9tb2RlMjsKIAotCS8qIFBTQiBkb2Vzbid0IGFwcGVhciB0byBiZSBHRU40ICovCi0JaWYgKHBzYl9pbnRlbF9jcnRjLT5waXBlID09IDApIHsKKwkvKiBQU0IgcmVxdWlyZXMgdGhlIExWRFMgaXMgb24gcGlwZSBCLCBNUlNUIGhhcyBvbmx5IG9uZSBwaXBlIGFueXdheSAqLworCWlmICghSVNfTVJTVChkZXYpICYmIHBzYl9pbnRlbF9jcnRjLT5waXBlID09IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBzdXBwb3J0IExWRFMgb24gcGlwZSBBXG4iKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KKwlpZiAoSVNfTVJTVChkZXYpICYmIHBzYl9pbnRlbF9jcnRjLT5waXBlICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJNdXN0IHVzZSBQSVBFIEFcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQogCS8qIFNob3VsZCBuZXZlciBoYXBwZW4hISAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wX2VuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwKIAkJCSAgICBoZWFkKSB7CkBAIC00NDUsNyArNDQyLDcgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgcHNiX2ludGVsX2x2ZHNfcHJlcGFyZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit2b2lkIHBzYl9pbnRlbF9sdmRzX3ByZXBhcmUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CiAJc3RydWN0IHBzYl9pbnRlbF9vdXRwdXQgKm91dHB1dCA9IGVuY190b19wc2JfaW50ZWxfb3V0cHV0KGVuY29kZXIpOwpAQCAtNDUzLDggKzQ1MCw3IEBACiAKIAlQU0JfREVCVUdfRU5UUlkoIlxuIik7CiAKLQlpZiAoIW9zcG1fcG93ZXJfdXNpbmdfaHdfYmVnaW4oT1NQTV9ESVNQTEFZX0lTTEFORCwKLQkJCQkJT1NQTV9VSEJfRk9SQ0VfUE9XRVJfT04pKQorCWlmICghZ21hX3Bvd2VyX2JlZ2luKGRldiwgdHJ1ZSkpCiAJCXJldHVybjsKIAogCW1vZGVfZGV2LT5zYXZlQkxDX1BXTV9DVEwgPSBSRUdfUkVBRChCTENfUFdNX0NUTCk7CkBAIC00NjMsMTAgKzQ1OSwxMCBAQAogCiAJcHNiX2ludGVsX2x2ZHNfc2V0X3Bvd2VyKGRldiwgb3V0cHV0LCBmYWxzZSk7CiAKLQlvc3BtX3Bvd2VyX3VzaW5nX2h3X2VuZChPU1BNX0RJU1BMQVlfSVNMQU5EKTsKKwlnbWFfcG93ZXJfZW5kKGRldik7CiB9CiAKLXN0YXRpYyB2b2lkIHBzYl9pbnRlbF9sdmRzX2NvbW1pdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit2b2lkIHBzYl9pbnRlbF9sdmRzX2NvbW1pdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKIAlzdHJ1Y3QgcHNiX2ludGVsX291dHB1dCAqb3V0cHV0ID0gZW5jX3RvX3BzYl9pbnRlbF9vdXRwdXQoZW5jb2Rlcik7CkBAIC02NjksMTQgKzY2NSwxNCBAQAogCS5jb21taXQgPSBwc2JfaW50ZWxfbHZkc19jb21taXQsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzCitjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MKIAkJCQlwc2JfaW50ZWxfbHZkc19jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0gewogCS5nZXRfbW9kZXMgPSBwc2JfaW50ZWxfbHZkc19nZXRfbW9kZXMsCiAJLm1vZGVfdmFsaWQgPSBwc2JfaW50ZWxfbHZkc19tb2RlX3ZhbGlkLAogCS5iZXN0X2VuY29kZXIgPSBwc2JfaW50ZWxfYmVzdF9lbmNvZGVyLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIHBzYl9pbnRlbF9sdmRzX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKK2NvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIHBzYl9pbnRlbF9sdmRzX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKIAkuZHBtcyA9IGRybV9oZWxwZXJfY29ubmVjdG9yX2RwbXMsCiAJLnNhdmUgPSBwc2JfaW50ZWxfbHZkc19zYXZlLAogCS5yZXN0b3JlID0gcHNiX2ludGVsX2x2ZHNfcmVzdG9yZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2ludGVsX3Nkdm8uYyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2ludGVsX3Nkdm8uYwppbmRleCAxZDJiYjAyLi5kZjFjMDA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9pbnRlbF9zZHZvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfaW50ZWxfc2R2by5jCkBAIC0yMDQsNyArMjA0LDcgQEAKIAlzdHJ1Y3QgcHNiX2ludGVsX3Nkdm9fcHJpdiAqc2R2b19wcml2ID0gcHNiX2ludGVsX291dHB1dC0+ZGV2X3ByaXY7CiAJaW50IGk7CiAKLQlpZiAoMSkgeworCWlmICgwKSB7CiAJCURSTV9ERUJVRygiJXM6IFc6ICUwMlggIiwgU0RWT19OQU1FKHNkdm9fcHJpdiksIGNtZCk7CiAJCWZvciAoaSA9IDA7IGkgPCBhcmdzX2xlbjsgaSsrKQogCQkJcHJpbnRrKEtFUk5fSU5GTyIlMDJYICIsICgodTggKikgYXJncylbaV0pOwpAQCAtMjY2LDcgKzI2Niw3IEBACiAJCQkJCSBTRFZPX0kyQ19DTURfU1RBVFVTLAogCQkJCQkgJnN0YXR1cyk7CiAKLQkJaWYgKDEpIHsKKwkJaWYgKDApIHsKIAkJCURSTV9ERUJVRygiJXM6IFI6ICIsIFNEVk9fTkFNRShzZHZvX3ByaXYpKTsKIAkJCWZvciAoaSA9IDA7IGkgPCByZXNwb25zZV9sZW47IGkrKykKIAkJCQlwcmludGsoS0VSTl9JTkZPIiUwMlggIiwgKCh1OCAqKSByZXNwb25zZSlbaV0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfaXJxLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9pcnEuYwppbmRleCA0NTk3Yzg4Li45ZWEzN2U1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9pcnEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9pcnEuYwpAQCAtODgsMTMgKzg4LDEyIEBACiAJCXUzMiByZWcgPSBwc2JfcGlwZXN0YXQocGlwZSk7CiAJCWRldl9wcml2LT5waXBlc3RhdFtwaXBlXSB8PSBtYXNrOwogCQkvKiBFbmFibGUgdGhlIGludGVycnVwdCwgY2xlYXIgYW55IHBlbmRpbmcgc3RhdHVzICovCi0JCWlmIChvc3BtX3Bvd2VyX3VzaW5nX2h3X2JlZ2luKE9TUE1fRElTUExBWV9JU0xBTkQsCi0JCQkJCQkJT1NQTV9VSEJfT05MWV9JRl9PTikpIHsKKwkJaWYgKGdtYV9wb3dlcl9iZWdpbihkZXZfcHJpdi0+ZGV2LCBmYWxzZSkpIHsKIAkJCXUzMiB3cml0ZVZhbCA9IFBTQl9SVkRDMzIocmVnKTsKIAkJCXdyaXRlVmFsIHw9IChtYXNrIHwgKG1hc2sgPj4gMTYpKTsKIAkJCVBTQl9XVkRDMzIod3JpdGVWYWwsIHJlZyk7CiAJCQkodm9pZCkgUFNCX1JWREMzMihyZWcpOwotCQkJb3NwbV9wb3dlcl91c2luZ19od19lbmQoT1NQTV9ESVNQTEFZX0lTTEFORCk7CisJCQlnbWFfcG93ZXJfZW5kKGRldl9wcml2LT5kZXYpOwogCQl9CiAJfQogfQpAQCAtMTA1LDM5ICsxMDQsMzYgQEAKIAlpZiAoKGRldl9wcml2LT5waXBlc3RhdFtwaXBlXSAmIG1hc2spICE9IDApIHsKIAkJdTMyIHJlZyA9IHBzYl9waXBlc3RhdChwaXBlKTsKIAkJZGV2X3ByaXYtPnBpcGVzdGF0W3BpcGVdICY9IH5tYXNrOwotCQlpZiAob3NwbV9wb3dlcl91c2luZ19od19iZWdpbihPU1BNX0RJU1BMQVlfSVNMQU5ELAotCQkJCQkJCU9TUE1fVUhCX09OTFlfSUZfT04pKSB7CisJCWlmIChnbWFfcG93ZXJfYmVnaW4oZGV2X3ByaXYtPmRldiwgZmFsc2UpKSB7CiAJCQl1MzIgd3JpdGVWYWwgPSBQU0JfUlZEQzMyKHJlZyk7CiAJCQl3cml0ZVZhbCAmPSB+bWFzazsKIAkJCVBTQl9XVkRDMzIod3JpdGVWYWwsIHJlZyk7CiAJCQkodm9pZCkgUFNCX1JWREMzMihyZWcpOwotCQkJb3NwbV9wb3dlcl91c2luZ19od19lbmQoT1NQTV9ESVNQTEFZX0lTTEFORCk7CisJCQlnbWFfcG93ZXJfZW5kKGRldl9wcml2LT5kZXYpOwogCQl9CiAJfQogfQogCiB2b2lkIG1pZF9lbmFibGVfcGlwZV9ldmVudChzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiwgaW50IHBpcGUpCiB7Ci0JaWYgKG9zcG1fcG93ZXJfdXNpbmdfaHdfYmVnaW4oT1NQTV9ESVNQTEFZX0lTTEFORCwKLQkJCQkJCQlPU1BNX1VIQl9PTkxZX0lGX09OKSkgeworCWlmIChnbWFfcG93ZXJfYmVnaW4oZGV2X3ByaXYtPmRldiwgZmFsc2UpKSB7CiAJCXUzMiBwaXBlX2V2ZW50ID0gbWlkX3BpcGVfZXZlbnQocGlwZSk7CiAJCWRldl9wcml2LT52ZGNfaXJxX21hc2sgfD0gcGlwZV9ldmVudDsKIAkJUFNCX1dWREMzMih+ZGV2X3ByaXYtPnZkY19pcnFfbWFzaywgUFNCX0lOVF9NQVNLX1IpOwogCQlQU0JfV1ZEQzMyKGRldl9wcml2LT52ZGNfaXJxX21hc2ssIFBTQl9JTlRfRU5BQkxFX1IpOwotCQlvc3BtX3Bvd2VyX3VzaW5nX2h3X2VuZChPU1BNX0RJU1BMQVlfSVNMQU5EKTsKKwkJZ21hX3Bvd2VyX2VuZChkZXZfcHJpdi0+ZGV2KTsKIAl9CiB9CiAKIHZvaWQgbWlkX2Rpc2FibGVfcGlwZV9ldmVudChzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiwgaW50IHBpcGUpCiB7CiAJaWYgKGRldl9wcml2LT5waXBlc3RhdFtwaXBlXSA9PSAwKSB7Ci0JCWlmIChvc3BtX3Bvd2VyX3VzaW5nX2h3X2JlZ2luKE9TUE1fRElTUExBWV9JU0xBTkQsCi0JCQkJCQkJT1NQTV9VSEJfT05MWV9JRl9PTikpIHsKKwkJaWYgKGdtYV9wb3dlcl9iZWdpbihkZXZfcHJpdi0+ZGV2LCBmYWxzZSkpIHsKIAkJCXUzMiBwaXBlX2V2ZW50ID0gbWlkX3BpcGVfZXZlbnQocGlwZSk7CiAJCQlkZXZfcHJpdi0+dmRjX2lycV9tYXNrICY9IH5waXBlX2V2ZW50OwogCQkJUFNCX1dWREMzMih+ZGV2X3ByaXYtPnZkY19pcnFfbWFzaywgUFNCX0lOVF9NQVNLX1IpOwogCQkJUFNCX1dWREMzMihkZXZfcHJpdi0+dmRjX2lycV9tYXNrLCBQU0JfSU5UX0VOQUJMRV9SKTsKLQkJCW9zcG1fcG93ZXJfdXNpbmdfaHdfZW5kKE9TUE1fRElTUExBWV9JU0xBTkQpOworCQkJZ21hX3Bvd2VyX2VuZChkZXZfcHJpdi0+ZGV2KTsKIAkJfQogCX0KIH0KQEAgLTI0Miw3ICsyMzgsNyBAQAogCXZkY19zdGF0ICY9IGRldl9wcml2LT52ZGNfaXJxX21hc2s7CiAJc3Bpbl91bmxvY2soJmRldl9wcml2LT5pcnFtYXNrX2xvY2spOwogCi0JaWYgKGRzcF9pbnQgJiYgb3NwbV9wb3dlcl9pc19od19vbihPU1BNX0RJU1BMQVlfSVNMQU5EKSkgeworCWlmIChkc3BfaW50ICYmIGdtYV9wb3dlcl9pc19vbihkZXYpKSB7CiAJCXBzYl92ZGNfaW50ZXJydXB0KGRldiwgdmRjX3N0YXQpOwogCQloYW5kbGVkID0gMTsKIAl9CkBAIC0yNzEsNTQgKzI2NywyOCBAQAogCiB2b2lkIHBzYl9pcnFfcHJlaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewotCXBzYl9pcnFfcHJlaW5zdGFsbF9pc2xhbmRzKGRldiwgT1NQTV9BTExfSVNMQU5EUyk7Ci19Ci0KLS8qKgotICogRklYTUU6IHNob3VsZCBJIHJlbW92ZSBkaXNwbGF5IGlycSBlbmFibGUgaGVyZT8/Ci0gKi8KLXZvaWQgcHNiX2lycV9wcmVpbnN0YWxsX2lzbGFuZHMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGh3X2lzbGFuZHMpCi17CiAJc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPQogCSAgICAoc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqKSBkZXYtPmRldl9wcml2YXRlOwogCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CiAKLQlQU0JfREVCVUdfRU5UUlkoIlxuIik7Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmlycW1hc2tfbG9jaywgaXJxZmxhZ3MpOwogCi0JaWYgKGh3X2lzbGFuZHMgJiBPU1BNX0RJU1BMQVlfSVNMQU5EKSB7Ci0JCWlmIChvc3BtX3Bvd2VyX2lzX2h3X29uKE9TUE1fRElTUExBWV9JU0xBTkQpKSB7Ci0JCQlQU0JfV1ZEQzMyKDB4RkZGRkZGRkYsIFBTQl9IV1NUQU0pOwotCQkJaWYgKGRldi0+dmJsYW5rX2VuYWJsZWRbMF0pCi0JCQkJZGV2X3ByaXYtPnZkY19pcnFfbWFzayB8PQotCQkJCQkJX1BTQl9QSVBFQV9FVkVOVF9GTEFHOwotCQkJaWYgKGRldi0+dmJsYW5rX2VuYWJsZWRbMV0pCi0JCQkJZGV2X3ByaXYtPnZkY19pcnFfbWFzayB8PQotCQkJCQkJX01ERkxEX1BJUEVCX0VWRU5UX0ZMQUc7Ci0JCQlpZiAoZGV2LT52YmxhbmtfZW5hYmxlZFsyXSkKLQkJCQlkZXZfcHJpdi0+dmRjX2lycV9tYXNrIHw9Ci0JCQkJCQlfTURGTERfUElQRUNfRVZFTlRfRkxBRzsKLQkJfQotCX0KLS8qIE5PIEkgRE9OVCBXQU5UIEFOWSBJUlFTIEdSUlIgRklYTUVBQyAqLwotCWlmIChod19pc2xhbmRzICYgT1NQTV9HUkFQSElDU19JU0xBTkQpCi0JCWRldl9wcml2LT52ZGNfaXJxX21hc2sgfD0gX1BTQl9JUlFfU0dYX0ZMQUc7Ci0vKiAqLworCWlmIChnbWFfcG93ZXJfaXNfb24oZGV2KSkKKwkJUFNCX1dWREMzMigweEZGRkZGRkZGLCBQU0JfSFdTVEFNKTsKKwlpZiAoZGV2LT52YmxhbmtfZW5hYmxlZFswXSkKKwkJZGV2X3ByaXYtPnZkY19pcnFfbWFzayB8PSBfUFNCX1BJUEVBX0VWRU5UX0ZMQUc7CisJaWYgKGRldi0+dmJsYW5rX2VuYWJsZWRbMV0pCisJCWRldl9wcml2LT52ZGNfaXJxX21hc2sgfD0gX01ERkxEX1BJUEVCX0VWRU5UX0ZMQUc7CisJaWYgKGRldi0+dmJsYW5rX2VuYWJsZWRbMl0pCisJCWRldl9wcml2LT52ZGNfaXJxX21hc2sgfD0gX01ERkxEX1BJUEVDX0VWRU5UX0ZMQUc7CisKIAkvKlRoaXMgcmVnaXN0ZXIgaXMgc2FmZSBldmVuIGlmIGRpc3BsYXkgaXNsYW5kIGlzIG9mZiovCiAJUFNCX1dWREMzMih+ZGV2X3ByaXYtPnZkY19pcnFfbWFzaywgUFNCX0lOVF9NQVNLX1IpOwotCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmlycW1hc2tfbG9jaywgaXJxZmxhZ3MpOwogfQogCiBpbnQgcHNiX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewotCXJldHVybiBwc2JfaXJxX3Bvc3RpbnN0YWxsX2lzbGFuZHMoZGV2LCBPU1BNX0FMTF9JU0xBTkRTKTsKLX0KLQotaW50IHBzYl9pcnFfcG9zdGluc3RhbGxfaXNsYW5kcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaHdfaXNsYW5kcykKLXsKLQogCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0KIAkgICAgKHN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwpAQCAtMzI3LDQ4ICsyOTcsMzEgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+aXJxbWFza19sb2NrLCBpcnFmbGFncyk7CiAKLQkvKlRoaXMgcmVnaXN0ZXIgaXMgc2FmZSBldmVuIGlmIGRpc3BsYXkgaXNsYW5kIGlzIG9mZiovCisJLyogVGhpcyByZWdpc3RlciBpcyBzYWZlIGV2ZW4gaWYgZGlzcGxheSBpc2xhbmQgaXMgb2ZmICovCiAJUFNCX1dWREMzMihkZXZfcHJpdi0+dmRjX2lycV9tYXNrLCBQU0JfSU5UX0VOQUJMRV9SKTsKKwlQU0JfV1ZEQzMyKDB4RkZGRkZGRkYsIFBTQl9IV1NUQU0pOwogCi0JaWYgKGh3X2lzbGFuZHMgJiBPU1BNX0RJU1BMQVlfSVNMQU5EKSB7Ci0JCWlmICh0cnVlLypwb3dlcm1nbXRfaXNfaHdfb24oZGV2LT5wZGV2LCBQU0JfRElTUExBWV9JU0xBTkQpKi8pIHsKLQkJCVBTQl9XVkRDMzIoMHhGRkZGRkZGRiwgUFNCX0hXU1RBTSk7CisJaWYgKGRldi0+dmJsYW5rX2VuYWJsZWRbMF0pCisJCXBzYl9lbmFibGVfcGlwZXN0YXQoZGV2X3ByaXYsIDAsIFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUpOworCWVsc2UKKwkJcHNiX2Rpc2FibGVfcGlwZXN0YXQoZGV2X3ByaXYsIDAsIFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUpOwogCi0JCQlpZiAoZGV2LT52YmxhbmtfZW5hYmxlZFswXSkKLQkJCQlwc2JfZW5hYmxlX3BpcGVzdGF0KGRldl9wcml2LCAwLAotCQkJCSAgICBQSVBFX1ZCTEFOS19JTlRFUlJVUFRfRU5BQkxFKTsKLQkJCWVsc2UKLQkJCQlwc2JfZGlzYWJsZV9waXBlc3RhdChkZXZfcHJpdiwgMCwKLQkJCQkgICAgUElQRV9WQkxBTktfSU5URVJSVVBUX0VOQUJMRSk7CisJaWYgKGRldi0+dmJsYW5rX2VuYWJsZWRbMV0pCisJCXBzYl9lbmFibGVfcGlwZXN0YXQoZGV2X3ByaXYsIDEsIFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUpOworCWVsc2UKKwkJcHNiX2Rpc2FibGVfcGlwZXN0YXQoZGV2X3ByaXYsIDEsIFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUpOwogCi0JCQlpZiAoZGV2LT52YmxhbmtfZW5hYmxlZFsxXSkKLQkJCQkJcHNiX2VuYWJsZV9waXBlc3RhdChkZXZfcHJpdiwgMSwKLQkJCQkJICAgIFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUpOwotCQkJZWxzZQotCQkJCXBzYl9kaXNhYmxlX3BpcGVzdGF0KGRldl9wcml2LCAxLAotCQkJCSAgICBQSVBFX1ZCTEFOS19JTlRFUlJVUFRfRU5BQkxFKTsKLQotCQkJaWYgKGRldi0+dmJsYW5rX2VuYWJsZWRbMl0pCi0JCQkJcHNiX2VuYWJsZV9waXBlc3RhdChkZXZfcHJpdiwgMiwKLQkJCQkgICAgUElQRV9WQkxBTktfSU5URVJSVVBUX0VOQUJMRSk7Ci0JCQllbHNlCi0JCQkJcHNiX2Rpc2FibGVfcGlwZXN0YXQoZGV2X3ByaXYsIDIsCi0JCQkJICAgIFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUpOwotCQl9Ci0JfQorCWlmIChkZXYtPnZibGFua19lbmFibGVkWzJdKQorCQlwc2JfZW5hYmxlX3BpcGVzdGF0KGRldl9wcml2LCAyLCBQSVBFX1ZCTEFOS19JTlRFUlJVUFRfRU5BQkxFKTsKKwllbHNlCisJCXBzYl9kaXNhYmxlX3BpcGVzdGF0KGRldl9wcml2LCAyLCBQSVBFX1ZCTEFOS19JTlRFUlJVUFRfRU5BQkxFKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5pcnFtYXNrX2xvY2ssIGlycWZsYWdzKTsKLQogCXJldHVybiAwOwogfQogCiB2b2lkIHBzYl9pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7Ci0JcHNiX2lycV91bmluc3RhbGxfaXNsYW5kcyhkZXYsIE9TUE1fQUxMX0lTTEFORFMpOwotfQotCi12b2lkIHBzYl9pcnFfdW5pbnN0YWxsX2lzbGFuZHMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGh3X2lzbGFuZHMpCi17CiAJc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPQogCSAgICAoc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqKSBkZXYtPmRldl9wcml2YXRlOwogCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CkBAIC0zNzcsMzkgKzMzMCwyOSBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5pcnFtYXNrX2xvY2ssIGlycWZsYWdzKTsKIAotCWlmIChod19pc2xhbmRzICYgT1NQTV9ESVNQTEFZX0lTTEFORCkgewotCQlpZiAodHJ1ZS8qcG93ZXJtZ210X2lzX2h3X29uKGRldi0+cGRldiwgUFNCX0RJU1BMQVlfSVNMQU5EKSovKSB7Ci0JCQlQU0JfV1ZEQzMyKDB4RkZGRkZGRkYsIFBTQl9IV1NUQU0pOworCVBTQl9XVkRDMzIoMHhGRkZGRkZGRiwgUFNCX0hXU1RBTSk7CiAKLQkJCWlmIChkZXYtPnZibGFua19lbmFibGVkWzBdKQotCQkJCXBzYl9kaXNhYmxlX3BpcGVzdGF0KGRldl9wcml2LCAwLAotCQkJCSAgICBQSVBFX1ZCTEFOS19JTlRFUlJVUFRfRU5BQkxFKTsKKwlpZiAoZGV2LT52YmxhbmtfZW5hYmxlZFswXSkKKwkJcHNiX2Rpc2FibGVfcGlwZXN0YXQoZGV2X3ByaXYsIDAsIFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUpOwogCi0JCQlpZiAoZGV2LT52YmxhbmtfZW5hYmxlZFsxXSkKLQkJCQlwc2JfZGlzYWJsZV9waXBlc3RhdChkZXZfcHJpdiwgMSwKLQkJCQkgICAgUElQRV9WQkxBTktfSU5URVJSVVBUX0VOQUJMRSk7CisJaWYgKGRldi0+dmJsYW5rX2VuYWJsZWRbMV0pCisJCXBzYl9kaXNhYmxlX3BpcGVzdGF0KGRldl9wcml2LCAxLCBQSVBFX1ZCTEFOS19JTlRFUlJVUFRfRU5BQkxFKTsKIAotCQkJaWYgKGRldi0+dmJsYW5rX2VuYWJsZWRbMl0pCi0JCQkJcHNiX2Rpc2FibGVfcGlwZXN0YXQoZGV2X3ByaXYsIDIsCi0JCQkJICAgIFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUpOwotCQl9Ci0JCWRldl9wcml2LT52ZGNfaXJxX21hc2sgJj0gX1BTQl9JUlFfU0dYX0ZMQUcgfAotCQkJCQkgIF9QU0JfSVJRX01TVkRYX0ZMQUcgfAotCQkJCQkgIF9MTkNfSVJRX1RPUEFaX0ZMQUc7Ci0JfQotCS8qVE9ETzogcmVtb3ZlIGZvbGxvd2luZyBjb2RlKi8KLQlpZiAoaHdfaXNsYW5kcyAmIE9TUE1fR1JBUEhJQ1NfSVNMQU5EKQotCQlkZXZfcHJpdi0+dmRjX2lycV9tYXNrICY9IH5fUFNCX0lSUV9TR1hfRkxBRzsKKwlpZiAoZGV2LT52YmxhbmtfZW5hYmxlZFsyXSkKKwkJcHNiX2Rpc2FibGVfcGlwZXN0YXQoZGV2X3ByaXYsIDIsIFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUpOwogCi0JLypUaGVzZSB0d28gcmVnaXN0ZXJzIGFyZSBzYWZlIGV2ZW4gaWYgZGlzcGxheSBpc2xhbmQgaXMgb2ZmKi8KKwlkZXZfcHJpdi0+dmRjX2lycV9tYXNrICY9IF9QU0JfSVJRX1NHWF9GTEFHIHwKKwkJCQkgIF9QU0JfSVJRX01TVkRYX0ZMQUcgfAorCQkJCSAgX0xOQ19JUlFfVE9QQVpfRkxBRzsKKworCS8qIFRoZXNlIHR3byByZWdpc3RlcnMgYXJlIHNhZmUgZXZlbiBpZiBkaXNwbGF5IGlzbGFuZCBpcyBvZmYgKi8KIAlQU0JfV1ZEQzMyKH5kZXZfcHJpdi0+dmRjX2lycV9tYXNrLCBQU0JfSU5UX01BU0tfUik7CiAJUFNCX1dWREMzMihkZXZfcHJpdi0+dmRjX2lycV9tYXNrLCBQU0JfSU5UX0VOQUJMRV9SKTsKIAogCXdtYigpOwogCi0JLypUaGlzIHJlZ2lzdGVyIGlzIHNhZmUgZXZlbiBpZiBkaXNwbGF5IGlzbGFuZCBpcyBvZmYqLworCS8qIFRoaXMgcmVnaXN0ZXIgaXMgc2FmZSBldmVuIGlmIGRpc3BsYXkgaXNsYW5kIGlzIG9mZiAqLwogCVBTQl9XVkRDMzIoUFNCX1JWREMzMihQU0JfSU5UX0lERU5USVRZX1IpLCBQU0JfSU5UX0lERU5USVRZX1IpOwotCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmlycW1hc2tfbG9jaywgaXJxZmxhZ3MpOwogfQogCkBAIC00MjAsOCArMzYzLDcgQEAKIAl1MzIgaGlzdF9yZWc7CiAJdTMyIHB3bV9yZWc7CiAKLQlpZiAob3NwbV9wb3dlcl91c2luZ19od19iZWdpbihPU1BNX0RJU1BMQVlfSVNMQU5ELAotCQkJCQkJCU9TUE1fVUhCX09OTFlfSUZfT04pKSB7CisJaWYgKGdtYV9wb3dlcl9iZWdpbihkZXYsIGZhbHNlKSkgewogCQlQU0JfV1ZEQzMyKDEgPDwgMzEsIEhJU1RPR1JBTV9MT0dJQ19DT05UUk9MKTsKIAkJaGlzdF9yZWcgPSBQU0JfUlZEQzMyKEhJU1RPR1JBTV9MT0dJQ19DT05UUk9MKTsKIAkJUFNCX1dWREMzMigxIDw8IDMxLCBISVNUT0dSQU1fSU5UX0NPTlRST0wpOwpAQCAtNDQzLDcgKzM4NSw3IEBACiAJCVBTQl9XVkRDMzIocHdtX3JlZyB8IDB4ODAwMTAxMDAgfCBQV01fUEhBU0VJTl9FTkFCTEUsCiAJCQkJCQkJUFdNX0NPTlRST0xfTE9HSUMpOwogCi0JCW9zcG1fcG93ZXJfdXNpbmdfaHdfZW5kKE9TUE1fRElTUExBWV9JU0xBTkQpOworCQlnbWFfcG93ZXJfZW5kKGRldik7CiAJfQogfQogCkBAIC00NzIsOCArNDE0LDcgQEAKIAl1MzIgaGlzdF9yZWc7CiAJdTMyIHB3bV9yZWc7CiAKLQlpZiAob3NwbV9wb3dlcl91c2luZ19od19iZWdpbihPU1BNX0RJU1BMQVlfSVNMQU5ELAotCQkJCQkJCU9TUE1fVUhCX09OTFlfSUZfT04pKSB7CisJaWYgKGdtYV9wb3dlcl9iZWdpbihkZXYsIGZhbHNlKSkgewogCQlQU0JfV1ZEQzMyKDB4MDAwMDAwMDAsIEhJU1RPR1JBTV9JTlRfQ09OVFJPTCk7CiAJCWhpc3RfcmVnID0gUFNCX1JWREMzMihISVNUT0dSQU1fSU5UX0NPTlRST0wpOwogCkBAIC00ODQsNyArNDI1LDcgQEAKIAkJCQkJCQlQV01fQ09OVFJPTF9MT0dJQyk7CiAJCXB3bV9yZWcgPSBQU0JfUlZEQzMyKFBXTV9DT05UUk9MX0xPR0lDKTsKIAotCQlvc3BtX3Bvd2VyX3VzaW5nX2h3X2VuZChPU1BNX0RJU1BMQVlfSVNMQU5EKTsKKwkJZ21hX3Bvd2VyX2VuZChkZXYpOwogCX0KIH0KIApAQCAtNTI2LDE4ICs0NjcsMTYgQEAKICAqLwogaW50IHBzYl9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwaXBlKQogewotCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0KLQkgICAgKHN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKikgZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKIAl1aW50MzJfdCByZWdfdmFsID0gMDsKIAl1aW50MzJfdCBwaXBlY29uZl9yZWcgPSBtaWRfcGlwZWNvbmYocGlwZSk7CiAKIAlQU0JfREVCVUdfRU5UUlkoIlxuIik7CiAKLQlpZiAob3NwbV9wb3dlcl91c2luZ19od19iZWdpbihPU1BNX0RJU1BMQVlfSVNMQU5ELAotCQkJCQkJCU9TUE1fVUhCX09OTFlfSUZfT04pKSB7CisJaWYgKGdtYV9wb3dlcl9iZWdpbihkZXYsIGZhbHNlKSkgewogCQlyZWdfdmFsID0gUkVHX1JFQUQocGlwZWNvbmZfcmVnKTsKLQkJb3NwbV9wb3dlcl91c2luZ19od19lbmQoT1NQTV9ESVNQTEFZX0lTTEFORCk7CisJCWdtYV9wb3dlcl9lbmQoZGV2KTsKIAl9CiAKIAlpZiAoIShyZWdfdmFsICYgUElQRUFDT05GX0VOQUJMRSkpCkBAIC01NDUsNyArNDg0LDYgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+aXJxbWFza19sb2NrLCBpcnFmbGFncyk7CiAKLQlkcm1fcHNiX2Rpc2FibGVfdnN5bmMgPSAwOwogCW1pZF9lbmFibGVfcGlwZV9ldmVudChkZXZfcHJpdiwgcGlwZSk7CiAJcHNiX2VuYWJsZV9waXBlc3RhdChkZXZfcHJpdiwgcGlwZSwgUElQRV9WQkxBTktfSU5URVJSVVBUX0VOQUJMRSk7CiAKQEAgLTU1OSwxNSArNDk3LDEzIEBACiAgKi8KIHZvaWQgcHNiX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwaXBlKQogewotCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0KLQkgICAgKHN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKikgZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKIAogCVBTQl9ERUJVR19FTlRSWSgiXG4iKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+aXJxbWFza19sb2NrLCBpcnFmbGFncyk7CiAKLQlkcm1fcHNiX2Rpc2FibGVfdnN5bmMgPSAxOwogCW1pZF9kaXNhYmxlX3BpcGVfZXZlbnQoZGV2X3ByaXYsIHBpcGUpOwogCXBzYl9kaXNhYmxlX3BpcGVzdGF0KGRldl9wcml2LCBwaXBlLCBQSVBFX1ZCTEFOS19JTlRFUlJVUFRfRU5BQkxFKTsKIApAQCAtNjAzLDcgKzUzOSw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCWlmICghb3NwbV9wb3dlcl91c2luZ19od19iZWdpbihPU1BNX0RJU1BMQVlfSVNMQU5ELCBmYWxzZSkpCisJaWYgKCFnbWFfcG93ZXJfYmVnaW4oZGV2LCBmYWxzZSkpCiAJCXJldHVybiAwOwogCiAJcmVnX3ZhbCA9IFJFR19SRUFEKHBpcGVjb25mX3JlZyk7CkBAIC02MzIsNyArNTY4LDcgQEAKIAogcHNiX2dldF92YmxhbmtfY291bnRlcl9leGl0OgogCi0Jb3NwbV9wb3dlcl91c2luZ19od19lbmQoT1NQTV9ESVNQTEFZX0lTTEFORCk7CisJZ21hX3Bvd2VyX2VuZChkZXYpOwogCiAJcmV0dXJuIGNvdW50OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfcmVzZXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2xpZC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9yZXNldC5jCnJlbmFtZSB0byBkcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9saWQuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfbW11LmMgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9tbXUuYwppbmRleCBlZGQwZDQ5Li5jOTA0ZDczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9tbXUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9tbXUuYwpAQCAtNDQ0LDY3ICs0NDQsNiBAQAogCXB0LT52W3BzYl9tbXVfcHRfaW5kZXgoYWRkcildID0gcHQtPnBkLT5pbnZhbGlkX3B0ZTsKIH0KIAotI2lmIDAKLXN0YXRpYyB1aW50MzJfdCBwc2JfbW11X2NoZWNrX3B0ZV9sb2NrZWQoc3RydWN0IHBzYl9tbXVfcGQgKnBkLAotCQkJCQkgdWludDMyX3QgbW11X29mZnNldCkKLXsKLQl1aW50MzJfdCAqdjsKLQl1aW50MzJfdCBwZm47Ci0KLQl2ID0ga21hcF9hdG9taWMocGQtPnAsIEtNX1VTRVIwKTsKLQlpZiAoIXYpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQ291bGQgbm90IGttYXAgcGRlIHBhZ2UuXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCXBmbiA9IHZbcHNiX21tdV9wZF9pbmRleChtbXVfb2Zmc2V0KV07Ci0JLyogICAgICBwcmludGsoS0VSTl9JTkZPICJwZGUgaXMgMHglMDh4XG4iLHBmbik7ICovCi0Ja3VubWFwX2F0b21pYyh2LCBLTV9VU0VSMCk7Ci0JaWYgKCgocGZuICYgMHgwRikgIT0gUFNCX1BURV9WQUxJRCkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiU3RyYW5nZSBwZGUgYXQgMHglMDh4OiAweCUwOHguXG4iLAotCQkgICAgICAgbW11X29mZnNldCwgcGZuKTsKLQl9Ci0JdiA9IGlvcmVtYXAocGZuICYgMHhGRkZGRjAwMCwgNDA5Nik7Ci0JaWYgKCF2KSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIkNvdWxkIG5vdCBrbWFwIHB0ZSBwYWdlLlxuIik7Ci0JCXJldHVybiAwOwotCX0KLQlwZm4gPSB2W3BzYl9tbXVfcHRfaW5kZXgobW11X29mZnNldCldOwotCS8qIHByaW50ayhLRVJOX0lORk8gInB0ZSBpcyAweCUwOHhcbiIscGZuKTsgKi8KLQlpb3VubWFwKHYpOwotCWlmICgoKHBmbiAmIDB4MEYpICE9IFBTQl9QVEVfVkFMSUQpKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIlN0cmFuZ2UgcHRlIGF0IDB4JTA4eDogMHglMDh4LlxuIiwKLQkJICAgICAgIG1tdV9vZmZzZXQsIHBmbik7Ci0JfQotCXJldHVybiBwZm4gPj4gUEFHRV9TSElGVDsKLX0KLQotc3RhdGljIHZvaWQgcHNiX21tdV9jaGVja19taXJyb3JlZF9ndHQoc3RydWN0IHBzYl9tbXVfcGQgKnBkLAotCQkJCSAgICAgICB1aW50MzJfdCBtbXVfb2Zmc2V0LAotCQkJCSAgICAgICB1aW50MzJfdCBndHRfcGFnZXMpCi17Ci0JdWludDMyX3Qgc3RhcnQ7Ci0JdWludDMyX3QgbmV4dDsKLQotCXByaW50ayhLRVJOX0lORk8gIkNoZWNraW5nIG1pcnJvcmVkIGd0dCAweCUwOHggJWRcbiIsCi0JICAgICAgIG1tdV9vZmZzZXQsIGd0dF9wYWdlcyk7Ci0JZG93bl9yZWFkKCZwZC0+ZHJpdmVyLT5zZW0pOwotCXN0YXJ0ID0gcHNiX21tdV9jaGVja19wdGVfbG9ja2VkKHBkLCBtbXVfb2Zmc2V0KTsKLQltbXVfb2Zmc2V0ICs9IFBBR0VfU0laRTsKLQlndHRfcGFnZXMgLT0gMTsKLQl3aGlsZSAoZ3R0X3BhZ2VzLS0pIHsKLQkJbmV4dCA9IHBzYl9tbXVfY2hlY2tfcHRlX2xvY2tlZChwZCwgbW11X29mZnNldCk7Ci0JCWlmIChuZXh0ICE9IHN0YXJ0ICsgMSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJICAgICAgICJQdGVzIG91dCBvZiBvcmRlcjogMHglMDh4LCAweCUwOHguXG4iLAotCQkJICAgICAgIHN0YXJ0LCBuZXh0KTsKLQkJfQotCQlzdGFydCA9IG5leHQ7Ci0JCW1tdV9vZmZzZXQgKz0gUEFHRV9TSVpFOwotCX0KLQl1cF9yZWFkKCZwZC0+ZHJpdmVyLT5zZW0pOwotfQotCi0jZW5kaWYKIAogdm9pZCBwc2JfbW11X21pcnJvcl9ndHQoc3RydWN0IHBzYl9tbXVfcGQgKnBkLAogCQkJdWludDMyX3QgbW11X29mZnNldCwgdWludDMyX3QgZ3R0X3N0YXJ0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfcG93ZXJtZ210LmMgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9wb3dlcm1nbXQuYwppbmRleCA3ZGViMWJhLi4xNDk1NDE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9wb3dlcm1nbXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9wb3dlcm1nbXQuYwpAQCAtMjQsODMgKzI0LDczIEBACiAgKiBBdXRob3JzOgogICogICAgQmVuamFtaW4gRGVmbmV0IDxiZW5qYW1pbi5yLmRlZm5ldEBpbnRlbC5jb20+CiAgKiAgICBSYWplc2ggUG9vcm5hY2hhbmRyYW4gPHJhamVzaC5wb29ybmFjaGFuZHJhbkBpbnRlbC5jb20+Ci0gKgorICogTWFzc2l2ZWx5IHJld29ya2VkCisgKiAgICBBbGFuIENveCA8YWxhbkBsaW51eC5pbnRlbC5jb20+CiAgKi8KICNpbmNsdWRlICJwc2JfcG93ZXJtZ210LmgiCiAjaW5jbHVkZSAicHNiX2Rydi5oIgorI2luY2x1ZGUgInBzYl9yZWcuaCIKICNpbmNsdWRlICJwc2JfaW50ZWxfcmVnLmgiCiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAKLSN1bmRlZiBPU1BNX0dGWF9EUEsKLQotZXh0ZXJuIHUzMiBndWkzMlNHWERldmljZUlEOwotZXh0ZXJuIHUzMiBndWkzMk1SU1REaXNwbGF5RGV2aWNlSUQ7Ci1leHRlcm4gdTMyIGd1aTMyTVJTVE1TVkRYRGV2aWNlSUQ7Ci1leHRlcm4gdTMyIGd1aTMyTVJTVFRPUEFaRGV2aWNlSUQ7Ci0KLXN0cnVjdCBkcm1fZGV2aWNlICpncERybURldmljZSA9IE5VTEw7CiBzdGF0aWMgc3RydWN0IG11dGV4IHBvd2VyX211dGV4Owotc3RhdGljIGJvb2wgZ2JTdXNwZW5kSW5Qcm9ncmVzcyA9IGZhbHNlOwotc3RhdGljIGJvb2wgZ2JSZXN1bWVJblByb2dyZXNzID0gZmFsc2U7Ci1zdGF0aWMgaW50IGdfaHdfcG93ZXJfc3RhdHVzX21hc2s7Ci1zdGF0aWMgYXRvbWljX3QgZ19kaXNwbGF5X2FjY2Vzc19jb3VudDsKLXN0YXRpYyBhdG9taWNfdCBnX2dyYXBoaWNzX2FjY2Vzc19jb3VudDsKLXN0YXRpYyBhdG9taWNfdCBnX3ZpZGVvZW5jX2FjY2Vzc19jb3VudDsKLXN0YXRpYyBhdG9taWNfdCBnX3ZpZGVvZGVjX2FjY2Vzc19jb3VudDsKLWludCBhbGxvd19ydW50aW1lX3BtID0gMDsKIAotdm9pZCBvc3BtX3Bvd2VyX2lzbGFuZF91cChpbnQgaHdfaXNsYW5kcyk7Ci12b2lkIG9zcG1fcG93ZXJfaXNsYW5kX2Rvd24oaW50IGh3X2lzbGFuZHMpOwotc3RhdGljIGJvb2wgZ2JTdXNwZW5kZWQgPSBmYWxzZTsKLWJvb2wgZ2JnZnhzdXNwZW5kZWQgPSBmYWxzZTsKLQotLyoKLSAqIG9zcG1fcG93ZXJfaW5pdAorLyoqCisgKglnbWFfcG93ZXJfaW5pdAkJLQlpbml0aWFsaXNlIHBvd2VyIG1hbmFnZXIKKyAqCUBkZXY6IG91ciBkZXZpY2UKICAqCi0gKiBEZXNjcmlwdGlvbjogSW5pdGlhbGl6ZSB0aGlzIG9zcG0gcG93ZXIgbWFuYWdlbWVudCBtb2R1bGUKKyAqCVNldCB1cCBmb3IgcG93ZXIgbWFuYWdlbWVudCB0cmFja2luZyBvZiBvdXIgaGFyZHdhcmUuCiAgKi8KLXZvaWQgb3NwbV9wb3dlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit2b2lkIGdtYV9wb3dlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSAoc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqKWRldi0+ZGV2X3ByaXZhdGU7Ci0KLQlncERybURldmljZSA9IGRldjsKKwlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKIAlkZXZfcHJpdi0+YXBtX2Jhc2UgPSBkZXZfcHJpdi0+YXBtX3JlZyAmIDB4ZmZmZjsKIAlkZXZfcHJpdi0+b3NwbV9iYXNlICY9IDB4ZmZmZjsKIAorCWRldl9wcml2LT5kaXNwbGF5X3Bvd2VyID0gdHJ1ZTsJLyogV2Ugc3RhcnQgYWN0aXZlICovCisJZGV2X3ByaXYtPmRpc3BsYXlfY291bnQgPSAwOwkvKiBDdXJyZW50bHkgbm8gdXNlcnMgKi8KKwlkZXZfcHJpdi0+c3VzcGVuZGVkID0gZmFsc2U7CS8qIEFuZCBub3Qgc3VzcGVuZGVkICovCiAJbXV0ZXhfaW5pdCgmcG93ZXJfbXV0ZXgpOwotCWdfaHdfcG93ZXJfc3RhdHVzX21hc2sgPSBPU1BNX0FMTF9JU0xBTkRTOwotCWF0b21pY19zZXQoJmdfZGlzcGxheV9hY2Nlc3NfY291bnQsIDApOwotCWF0b21pY19zZXQoJmdfZ3JhcGhpY3NfYWNjZXNzX2NvdW50LCAwKTsKLQlhdG9taWNfc2V0KCZnX3ZpZGVvZW5jX2FjY2Vzc19jb3VudCwgMCk7Ci0JYXRvbWljX3NldCgmZ192aWRlb2RlY19hY2Nlc3NfY291bnQsIDApOworCisJaWYgKCFJU19NUlNUKGRldikpIHsKKwkJLyogRklYTUU6IHdhbnRzIGZ1cnRoZXIgcmV2aWV3ICovCisJCXUzMiBnYXRpbmcgPSBQU0JfUlNHWDMyKFBTQl9DUl9DTEtHQVRFQ1RMKTsKKwkJLyogRGlzYWJsZSAyRCBjbG9jayBnYXRpbmcgKi8KKwkJZ2F0aW5nICY9IH4zOworCQlnYXRpbmcgfD0gMTsKKwkJUFNCX1dTR1gzMihnYXRpbmcsIFBTQl9DUl9DTEtHQVRFQ1RMKTsKKwkJUFNCX1JTR1gzMihQU0JfQ1JfQ0xLR0FURUNUTCk7CisJfQogfQogCi0vKgotICogb3NwbV9wb3dlcl91bmluaXQKKy8qKgorICoJZ21hX3Bvd2VyX3VuaW5pdAktCWVuZCBwb3dlciBtYW5hZ2VyCisgKglAZGV2OiBkZXZpY2UgdG8gZW5kIGZvcgogICoKLSAqIERlc2NyaXB0aW9uOiBVbmluaXRpYWxpemUgdGhpcyBvc3BtIHBvd2VyIG1hbmFnZW1lbnQgbW9kdWxlCisgKglVbmRvIHRoZSBlZmZlY3RzIG9mIGdtYV9wb3dlcl9pbml0CiAgKi8KLXZvaWQgb3NwbV9wb3dlcl91bmluaXQodm9pZCkKK3ZvaWQgZ21hX3Bvd2VyX3VuaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCW11dGV4X2Rlc3Ryb3koJnBvd2VyX211dGV4KTsKLSAgICAJcG1fcnVudGltZV9kaXNhYmxlKCZncERybURldmljZS0+cGRldi0+ZGV2KTsKLQlwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoJmdwRHJtRGV2aWNlLT5wZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfZGlzYWJsZSgmZGV2LT5wZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfc2V0X3N1c3BlbmRlZCgmZGV2LT5wZGV2LT5kZXYpOwogfQogCiAKLS8qCi0gKiBzYXZlX2Rpc3BsYXlfcmVnaXN0ZXJzCisvKioKKyAqCXNhdmVfZGlzcGxheV9yZWdpc3RlcnMJLQlzYXZlIHJlZ2lzdGVycyBsb3N0IG9uIHN1c3BlbmQKKyAqCUBkZXY6IG91ciBEUk0gZGV2aWNlCiAgKgotICogRGVzY3JpcHRpb246IFdlIGFyZSBnb2luZyB0byBzdXNwZW5kIHNvIHNhdmUgY3VycmVudCBkaXNwbGF5Ci0gKiByZWdpc3RlciBzdGF0ZS4KKyAqCVNhdmUgdGhlIHN0YXRlIHdlIG5lZWQgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byByZXN0b3JlIHRoZSBpbnRlcmZhY2UKKyAqCXVwb24gcmVzdW1lIGZyb20gc3VzcGVuZAogICovCiBzdGF0aWMgaW50IHNhdmVfZGlzcGxheV9yZWdpc3RlcnMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9jcnRjICogY3J0YzsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqIGNvbm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKIAogCS8qIERpc3BsYXkgYXJiaXRyYXRpb24gY29udHJvbCArIHdhdGVybWFya3MgKi8KIAlkZXZfcHJpdi0+c2F2ZURTUEFSQiA9IFBTQl9SVkRDMzIoRFNQQVJCKTsKQEAgLTExMiwzNyArMTAyLDMxIEBACiAJZGV2X3ByaXYtPnNhdmVEU1BGVzYgPSBQU0JfUlZEQzMyKERTUEZXNik7CiAJZGV2X3ByaXYtPnNhdmVDSElDS0VOQklUID0gUFNCX1JWREMzMihEU1BDSElDS0VOQklUKTsKIAotCS8qc2F2ZSBjcnRjIGFuZCBvdXRwdXQgc3RhdGUqLworCS8qIFNhdmUgY3J0YyBhbmQgb3V0cHV0IHN0YXRlICovCiAJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKLQkJaWYoZHJtX2hlbHBlcl9jcnRjX2luX3VzZShjcnRjKSkgeworCQlpZiAoZHJtX2hlbHBlcl9jcnRjX2luX3VzZShjcnRjKSkKIAkJCWNydGMtPmZ1bmNzLT5zYXZlKGNydGMpOwotCQl9CiAJfQogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKQogCQljb25uZWN0b3ItPmZ1bmNzLT5zYXZlKGNvbm5lY3Rvcik7Ci0JfQorCiAJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKLQotCS8qIEludGVycnVwdCBzdGF0ZSAqLwotCS8qCi0JICogSGFuZGxlZCBpbiBwc2JfaXJxLmMKLQkgKi8KLQogCXJldHVybiAwOwogfQogCi0vKgotICogcmVzdG9yZV9kaXNwbGF5X3JlZ2lzdGVycworLyoqCisgKglyZXN0b3JlX2Rpc3BsYXlfcmVnaXN0ZXJzCS0JcmVzdG9yZSBsb3N0IHJlZ2lzdGVyIHN0YXRlCisgKglAZGV2OiBvdXIgRFJNIGRldmljZQogICoKLSAqIERlc2NyaXB0aW9uOiBXZSBhcmUgZ29pbmcgdG8gcmVzdW1lIHNvIHJlc3RvcmUgZGlzcGxheSByZWdpc3RlciBzdGF0ZS4KKyAqCVJlc3RvcmUgcmVnaXN0ZXIgc3RhdGUgdGhhdCB3YXMgbG9zdCBkdXJpbmcgc3VzcGVuZCBhbmQgcmVzdW1lLgogICovCiBzdGF0aWMgaW50IHJlc3RvcmVfZGlzcGxheV9yZWdpc3RlcnMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9jcnRjICogY3J0YzsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqIGNvbm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKIAogCS8qIERpc3BsYXkgYXJiaXRyYXRpb24gKyB3YXRlcm1hcmtzICovCiAJUFNCX1dWREMzMihkZXZfcHJpdi0+c2F2ZURTUEFSQiwgRFNQQVJCKTsKQEAgLTE1OCwzOSArMTQyLDU3IEBACiAJUFNCX1dWREMzMigweDgwMDAwMDAwLCBWR0FDTlRSTCk7CiAKIAltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewotCQlpZihkcm1faGVscGVyX2NydGNfaW5fdXNlKGNydGMpKQorCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKQorCQlpZiAoZHJtX2hlbHBlcl9jcnRjX2luX3VzZShjcnRjKSkKIAkJCWNydGMtPmZ1bmNzLT5yZXN0b3JlKGNydGMpOwotCX0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubmVjdG9yLCAmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkKIAkJY29ubmVjdG9yLT5mdW5jcy0+cmVzdG9yZShjb25uZWN0b3IpOwotCX0KKwogCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Ci0KLQkvKkludGVycnVwdCBzdGF0ZSovCi0JLyoKLQkgKiBIYW5kbGVkIGluIHBzYl9pcnEuYwotCSAqLwotCiAJcmV0dXJuIDA7CiB9Ci0vKgotICogcG93ZXJtZ210X3N1c3BlbmRfZGlzcGxheQorCisvKioKKyAqCXBvd2VyX2Rvd24JLQlwb3dlciBkb3duIHRoZSBkaXNwbGF5IGlzbGFuZAorICoJQGRldjogb3VyIERSTSBkZXZpY2UKICAqCi0gKiBEZXNjcmlwdGlvbjogU3VzcGVuZCB0aGUgZGlzcGxheSBoYXJkd2FyZSBzYXZpbmcgc3RhdGUgYW5kIGRpc2FibGluZwotICogYXMgbmVjZXNzYXJ5LgorICoJUG93ZXIgZG93biB0aGUgZGlzcGxheSBpbnRlcmZhY2Ugb2Ygb3VyIGRldmljZQogICovCi12b2lkIG9zcG1fc3VzcGVuZF9kaXNwbGF5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBwb3dlcl9kb3duKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWludCBwcF9zdGF0LCByZXQ9MDsKKwl1MzIgcHdyX21hc2sgOworCXUzMiBwd3Jfc3RzOwogCi0JcHJpbnRrKEtFUk5fQUxFUlQgIiVzIFxuIiwgX19mdW5jX18pOworCWlmIChJU19NUlNUKGRldikpIHsKKwkJcHdyX21hc2sgPSBQU0JfUFdSR1RfRElTUExBWV9NQVNLOworCQlvdXRsKHB3cl9tYXNrLCBkZXZfcHJpdi0+b3NwbV9iYXNlICsgUFNCX1BNX1NTQyk7CiAKLSNpZmRlZiBPU1BNX0dGWF9EUEsKLQlwcmludGsoS0VSTl9BTEVSVCAiJXMgXG4iLCBfX2Z1bmNfXyk7Ci0jZW5kaWYKLQlpZiAoIShnX2h3X3Bvd2VyX3N0YXR1c19tYXNrICYgT1NQTV9ESVNQTEFZX0lTTEFORCkpCisJCXdoaWxlICh0cnVlKSB7CisJCQlwd3Jfc3RzID0gaW5sKGRldl9wcml2LT5vc3BtX2Jhc2UgKyBQU0JfUE1fU1NTKTsKKwkJCWlmICgocHdyX3N0cyAmIHB3cl9tYXNrKSA9PSBwd3JfbWFzaykKKwkJCQlicmVhazsKKwkJCWVsc2UKKwkJCQl1ZGVsYXkoMTApOworCQl9CisJCWRldl9wcml2LT5kaXNwbGF5X3Bvd2VyID0gZmFsc2U7CisJfQorfQorCisKKy8qKgorICoJZ21hX3N1c3BlbmRfZGlzcGxheQktCXN1c3BlbmQgdGhlIGRpc3BsYXkgbG9naWMKKyAqCUBkZXY6IG91ciBEUk0gZGV2aWNlCisgKgorICoJU3VzcGVuZCB0aGUgZGlzcGxheSBsb2dpYyBvZiB0aGUgZ3JhcGhpY3MgaW50ZXJmYWNlCisgKi8KK3N0YXRpYyB2b2lkIGdtYV9zdXNwZW5kX2Rpc3BsYXkoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IHBwX3N0YXQ7CisKKwlpZiAoZGV2X3ByaXYtPnN1c3BlbmRlZCkKIAkJcmV0dXJuOwogCiAJc2F2ZV9kaXNwbGF5X3JlZ2lzdGVycyhkZXYpOwpAQCAtMjI1LDE5MyArMjI3LDIyIEBACiAJCQkhPSBEUElfRklGT19FTVBUWSk7CiAJCVBTQl9XVkRDMzIoMCwgREVWSUNFX1JFQURZX1JFRyk7CiAJCQkvKiB0dXJuIG9mZiBwYW5lbCBwb3dlciAqLwotCQlyZXQgPSAwOwogCX0KLQlvc3BtX3Bvd2VyX2lzbGFuZF9kb3duKE9TUE1fRElTUExBWV9JU0xBTkQpOworCXBvd2VyX2Rvd24oZGV2KTsKIH0KIAogLyoKLSAqIG9zcG1fcmVzdW1lX2Rpc3BsYXkKLSAqCi0gKiBEZXNjcmlwdGlvbjogUmVzdW1lIHRoZSBkaXNwbGF5IGhhcmR3YXJlIHJlc3RvcmluZyBzdGF0ZSBhbmQgZW5hYmxpbmcKLSAqIGFzIG5lY2Vzc2FyeS4KLSAqLwotdm9pZCBvc3BtX3Jlc3VtZV9kaXNwbGF5KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBwc2JfZ3R0ICpwZyA9IGRldl9wcml2LT5wZzsKLQotCXByaW50ayhLRVJOX0FMRVJUICIlcyBcbiIsIF9fZnVuY19fKTsKLQotI2lmZGVmIE9TUE1fR0ZYX0RQSwotCXByaW50ayhLRVJOX0FMRVJUICIlcyBcbiIsIF9fZnVuY19fKTsKLSNlbmRpZgotCWlmIChnX2h3X3Bvd2VyX3N0YXR1c19tYXNrICYgT1NQTV9ESVNQTEFZX0lTTEFORCkKLQkJcmV0dXJuOwotCi0JLyogdHVybiBvbiB0aGUgZGlzcGxheSBwb3dlciBpc2xhbmQgKi8KLQlvc3BtX3Bvd2VyX2lzbGFuZF91cChPU1BNX0RJU1BMQVlfSVNMQU5EKTsKLQotCVBTQl9XVkRDMzIocGctPnBnZV9jdGwgfCBfUFNCX1BHRVRCTF9FTkFCTEVELCBQU0JfUEdFVEJMX0NUTCk7Ci0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIFBTQl9HTUNIX0NUUkwsCi0JCQlwZy0+Z21jaF9jdHJsIHwgX1BTQl9HTUNIX0VOQUJMRUQpOwotCi0JLyogRG9uJ3QgcmVpbml0aWFsaXplIHRoZSBHVFQgYXMgaXQgaXMgdW5uZWNlc3NhcnkuICBUaGUgZ3R0IGlzCi0JICogc3RvcmVkIGluIG1lbW9yeSBzbyBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgcmVzdG9yZWQuICBBbGwKLQkgKiB3ZSBuZWVkIHRvIGRvIGlzIHJlc3RvcmUgdGhlIFBHRVRCTF9DVEwgd2hpY2ggd2UgYWxyZWFkeSBkbwotCSAqIGFib3ZlLgotCSAqLwotCS8qcHNiX2d0dF9pbml0KGRldl9wcml2LT5wZywgMSk7Ki8KLQotCXJlc3RvcmVfZGlzcGxheV9yZWdpc3RlcnMoZGV2KTsKLX0KLQotI2lmIDEKLS8qCi0gKiBvc3BtX3N1c3BlbmRfcGNpCi0gKgotICogRGVzY3JpcHRpb246IFN1c3BlbmQgdGhlIHBjaSBkZXZpY2Ugc2F2aW5nIHN0YXRlIGFuZCBkaXNhYmxpbmcKLSAqIGFzIG5lY2Vzc2FyeS4KLSAqLwotc3RhdGljIHZvaWQgb3NwbV9zdXNwZW5kX3BjaShzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnQgYnNtLCB2YnQ7Ci0KLQlpZiAoZ2JTdXNwZW5kZWQpCi0JCXJldHVybjsKLQotI2lmZGVmIE9TUE1fR0ZYX0RQSwotCXByaW50ayhLRVJOX0FMRVJUICJvc3BtX3N1c3BlbmRfcGNpXG4iKTsKLSNlbmRpZgotCi0JcGNpX3NhdmVfc3RhdGUocGRldik7Ci0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIDB4NUMsICZic20pOwotCWRldl9wcml2LT5zYXZlQlNNID0gYnNtOwotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCAweEZDLCAmdmJ0KTsKLQlkZXZfcHJpdi0+c2F2ZVZCVCA9IHZidDsKLQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgUFNCX1BDSXhfTVNJX0FERFJfTE9DLCAmZGV2X3ByaXYtPm1zaV9hZGRyKTsKLQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgUFNCX1BDSXhfTVNJX0RBVEFfTE9DLCAmZGV2X3ByaXYtPm1zaV9kYXRhKTsKLQotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7Ci0KLQlnYlN1c3BlbmRlZCA9IHRydWU7Ci0JZ2JnZnhzdXNwZW5kZWQgPSB0cnVlOwotfQotCi0vKgotICogb3NwbV9yZXN1bWVfcGNpCi0gKgotICogRGVzY3JpcHRpb246IFJlc3VtZSB0aGUgcGNpIGRldmljZSByZXN0b3Jpbmcgc3RhdGUgYW5kIGVuYWJsaW5nCi0gKiBhcyBuZWNlc3NhcnkuCi0gKi8KLXN0YXRpYyBib29sIG9zcG1fcmVzdW1lX3BjaShzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnQgcmV0ID0gMDsKLQotCWlmICghZ2JTdXNwZW5kZWQpCi0JCXJldHVybiB0cnVlOwotCi0jaWZkZWYgT1NQTV9HRlhfRFBLCi0JcHJpbnRrKEtFUk5fQUxFUlQgIm9zcG1fcmVzdW1lX3BjaVxuIik7Ci0jZW5kaWYKLQotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKLQlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIDB4NWMsIGRldl9wcml2LT5zYXZlQlNNKTsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIDB4RkMsIGRldl9wcml2LT5zYXZlVkJUKTsKLQkvKiByZXRvcmluZyBNU0kgYWRkcmVzcyBhbmQgZGF0YSBpbiBQQ0l4IHNwYWNlICovCi0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBQU0JfUENJeF9NU0lfQUREUl9MT0MsIGRldl9wcml2LT5tc2lfYWRkcik7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBQU0JfUENJeF9NU0lfREFUQV9MT0MsIGRldl9wcml2LT5tc2lfZGF0YSk7Ci0JcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7Ci0KLQlpZiAocmV0ICE9IDApCi0JCXByaW50ayhLRVJOX0FMRVJUICJvc3BtX3Jlc3VtZV9wY2k6IHBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZDogJWRcbiIsIHJldCk7Ci0JZWxzZQotCQlnYlN1c3BlbmRlZCA9IGZhbHNlOwotCi0JcmV0dXJuICFnYlN1c3BlbmRlZDsKLX0KLSNlbmRpZgotLyoKLSAqIG9zcG1fcG93ZXJfc3VzcGVuZAotICoKLSAqIERlc2NyaXB0aW9uOiBPU1BNIGlzIHRlbGxpbmcgb3VyIGRyaXZlciB0byBzdXNwZW5kIHNvIHNhdmUgc3RhdGUKLSAqIGFuZCBwb3dlciBkb3duIGFsbCBoYXJkd2FyZS4KLSAqLwotaW50IG9zcG1fcG93ZXJfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotICAgICAgICBpbnQgcmV0ID0gMDsKLSAgICAgICAgaW50IGdyYXBoaWNzX2FjY2Vzc19jb3VudDsKLSAgICAgICAgaW50IHZpZGVvZW5jX2FjY2Vzc19jb3VudDsKLSAgICAgICAgaW50IHZpZGVvZGVjX2FjY2Vzc19jb3VudDsKLSAgICAgICAgaW50IGRpc3BsYXlfYWNjZXNzX2NvdW50OwotICAgIAlib29sIHN1c3BlbmRfcGNpID0gdHJ1ZTsKLQotCWlmKGdiU3VzcGVuZEluUHJvZ3Jlc3MgfHwgZ2JSZXN1bWVJblByb2dyZXNzKQotICAgICAgICB7Ci0jaWZkZWYgT1NQTV9HRlhfRFBLCi0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fQUxFUlQgIk9TUE1fR0ZYX0RQSzogJXMgc3lzdGVtIEJVU1kgXG4iLCBfX2Z1bmNfXyk7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICByZXR1cm4gIC1FQlVTWTsKLSAgICAgICAgfQotCi0gICAgICAgIG11dGV4X2xvY2soJnBvd2VyX211dGV4KTsKLQotICAgICAgICBpZiAoIWdiU3VzcGVuZGVkKSB7Ci0gICAgICAgICAgICAgICAgZ3JhcGhpY3NfYWNjZXNzX2NvdW50ID0gYXRvbWljX3JlYWQoJmdfZ3JhcGhpY3NfYWNjZXNzX2NvdW50KTsKLSAgICAgICAgICAgICAgICB2aWRlb2VuY19hY2Nlc3NfY291bnQgPSBhdG9taWNfcmVhZCgmZ192aWRlb2VuY19hY2Nlc3NfY291bnQpOwotICAgICAgICAgICAgICAgIHZpZGVvZGVjX2FjY2Vzc19jb3VudCA9IGF0b21pY19yZWFkKCZnX3ZpZGVvZGVjX2FjY2Vzc19jb3VudCk7Ci0gICAgICAgICAgICAgICAgZGlzcGxheV9hY2Nlc3NfY291bnQgPSBhdG9taWNfcmVhZCgmZ19kaXNwbGF5X2FjY2Vzc19jb3VudCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoZ3JhcGhpY3NfYWNjZXNzX2NvdW50IHx8Ci0JCQl2aWRlb2VuY19hY2Nlc3NfY291bnQgfHwKLQkJCXZpZGVvZGVjX2FjY2Vzc19jb3VudCB8fAotCQkJZGlzcGxheV9hY2Nlc3NfY291bnQpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUJVU1k7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXJldCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZ2JTdXNwZW5kSW5Qcm9ncmVzcyA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBzYl9pcnFfdW5pbnN0YWxsX2lzbGFuZHMoZ3BEcm1EZXZpY2UsIE9TUE1fRElTUExBWV9JU0xBTkQpOwotICAgICAgICAgICAgICAgICAgICAgICAgb3NwbV9zdXNwZW5kX2Rpc3BsYXkoZ3BEcm1EZXZpY2UpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1c3BlbmRfcGNpID09IHRydWUpIHsKLQkJCQlvc3BtX3N1c3BlbmRfcGNpKHBkZXYpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZ2JTdXNwZW5kSW5Qcm9ncmVzcyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9BTEVSVCAib3NwbV9wb3dlcl9zdXNwZW5kOiBkZXZpY2UgYnVzeTogZ3JhcGhpY3MgJWQgdmlkZW9lbmMgJWQgdmlkZW9kZWMgJWQgZGlzcGxheSAlZFxuIiwgZ3JhcGhpY3NfYWNjZXNzX2NvdW50LCB2aWRlb2VuY19hY2Nlc3NfY291bnQsIHZpZGVvZGVjX2FjY2Vzc19jb3VudCwgZGlzcGxheV9hY2Nlc3NfY291bnQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0KLSAgICAgICAgbXV0ZXhfdW5sb2NrKCZwb3dlcl9tdXRleCk7Ci0gICAgICAgIHJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBvc3BtX3Bvd2VyX2lzbGFuZF91cAorICogcG93ZXJfdXAKICAqCiAgKiBEZXNjcmlwdGlvbjogUmVzdG9yZSBwb3dlciB0byB0aGUgc3BlY2lmaWVkIGlzbGFuZChzKSAocG93ZXJnYXRpbmcpCiAgKi8KLXZvaWQgb3NwbV9wb3dlcl9pc2xhbmRfdXAoaW50IGh3X2lzbGFuZHMpCitzdGF0aWMgdm9pZCBwb3dlcl91cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewotCXUzMiBwd3JfY250ID0gMDsKLQl1MzIgcHdyX3N0cyA9IDA7Ci0JdTMyIHB3cl9tYXNrID0gMDsKKwlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdTMyIHB3cl9tYXNrID0gUFNCX1BXUkdUX0RJU1BMQVlfTUFTSzsKKwl1MzIgcHdyX3N0cywgcHdyX2NudDsKIAotCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0KLQkJKHN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKikgZ3BEcm1EZXZpY2UtPmRldl9wcml2YXRlOwotCi0KLQlpZiAoaHdfaXNsYW5kcyAmIE9TUE1fRElTUExBWV9JU0xBTkQpIHsKLQkJcHdyX21hc2sgPSBQU0JfUFdSR1RfRElTUExBWV9NQVNLOwotCisJaWYgKElTX01SU1QoZGV2KSkgewogCQlwd3JfY250ID0gaW5sKGRldl9wcml2LT5vc3BtX2Jhc2UgKyBQU0JfUE1fU1NDKTsKIAkJcHdyX2NudCAmPSB+cHdyX21hc2s7CiAJCW91dGwocHdyX2NudCwgKGRldl9wcml2LT5vc3BtX2Jhc2UgKyBQU0JfUE1fU1NDKSk7CkBAIC00MjQsMzU1ICsyNTUsMjIxIEBACiAJCQkJdWRlbGF5KDEwKTsKIAkJfQogCX0KLQotCWdfaHdfcG93ZXJfc3RhdHVzX21hc2sgfD0gaHdfaXNsYW5kczsKKwlkZXZfcHJpdi0+c3VzcGVuZGVkID0gZmFsc2U7CisJZGV2X3ByaXYtPmRpc3BsYXlfcG93ZXIgPSB0cnVlOwogfQogCi0vKgotICogb3NwbV9wb3dlcl9yZXN1bWUKKy8qKgorICoJZ21hX3Jlc3VtZV9kaXNwbGF5CS0JcmVzdW1lIGRpc3BsYXkgc2lkZSBsb2dpYworICoKKyAqCVJlc3VtZSB0aGUgZGlzcGxheSBoYXJkd2FyZSByZXN0b3Jpbmcgc3RhdGUgYW5kIGVuYWJsaW5nCisgKglhcyBuZWNlc3NhcnkuCiAgKi8KLWludCBvc3BtX3Bvd2VyX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3N0YXRpYyB2b2lkIGdtYV9yZXN1bWVfZGlzcGxheShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlpZihnYlN1c3BlbmRJblByb2dyZXNzIHx8IGdiUmVzdW1lSW5Qcm9ncmVzcykKLSAgICAgICAgewotI2lmZGVmIE9TUE1fR0ZYX0RQSwotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0FMRVJUICJPU1BNX0dGWF9EUEs6ICVzIGh3X2lzbGFuZDogU3VzcGVuZCB8fCBnYlJlc3VtZUluUHJvZ3Jlc3MhISEhIFxuIiwgX19mdW5jX18pOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAotICAgICAgICBtdXRleF9sb2NrKCZwb3dlcl9tdXRleCk7CisJaWYgKGRldl9wcml2LT5zdXNwZW5kZWQgPT0gZmFsc2UpCisJCXJldHVybjsKIAotI2lmZGVmIE9TUE1fR0ZYX0RQSwotCXByaW50ayhLRVJOX0FMRVJUICJPU1BNX0dGWF9EUEs6IG9zcG1fcG93ZXJfcmVzdW1lIFxuIik7Ci0jZW5kaWYKKwkvKiB0dXJuIG9uIHRoZSBkaXNwbGF5IHBvd2VyIGlzbGFuZCAqLworCXBvd2VyX3VwKGRldik7CiAKLSAgCWdiUmVzdW1lSW5Qcm9ncmVzcyA9IHRydWU7CisJUFNCX1dWREMzMihkZXZfcHJpdi0+cGdlX2N0bCB8IF9QU0JfUEdFVEJMX0VOQUJMRUQsIFBTQl9QR0VUQkxfQ1RMKTsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgUFNCX0dNQ0hfQ1RSTCwKKwkJCWRldl9wcml2LT5nbWNoX2N0cmwgfCBfUFNCX0dNQ0hfRU5BQkxFRCk7CiAKLSAgICAgICAgb3NwbV9yZXN1bWVfcGNpKHBkZXYpOworCS8qIERvbid0IHJlaW5pdGlhbGl6ZSB0aGUgR1RUIGFzIGl0IGlzIHVubmVjZXNzYXJ5LiAgVGhlIGd0dCBpcworCSAqIHN0b3JlZCBpbiBtZW1vcnkgc28gaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHJlc3RvcmVkLiAgQWxsCisJICogd2UgbmVlZCB0byBkbyBpcyByZXN0b3JlIHRoZSBQR0VUQkxfQ1RMIHdoaWNoIHdlIGFscmVhZHkgZG8KKwkgKiBhYm92ZS4KKwkgKi8KKwkvKnBzYl9ndHRfaW5pdChkZXZfcHJpdi0+cGcsIDEpOyovCiAKLQlvc3BtX3Jlc3VtZV9kaXNwbGF5KGdwRHJtRGV2aWNlLT5wZGV2KTsKLSAgICAgICAgcHNiX2lycV9wcmVpbnN0YWxsX2lzbGFuZHMoZ3BEcm1EZXZpY2UsIE9TUE1fRElTUExBWV9JU0xBTkQpOwotICAgICAgICBwc2JfaXJxX3Bvc3RpbnN0YWxsX2lzbGFuZHMoZ3BEcm1EZXZpY2UsIE9TUE1fRElTUExBWV9JU0xBTkQpOworCXJlc3RvcmVfZGlzcGxheV9yZWdpc3RlcnMoZGV2KTsKK30KIAotCWdiUmVzdW1lSW5Qcm9ncmVzcyA9IGZhbHNlOworLyoqCisgKglnbWFfc3VzcGVuZF9wY2kJCS0Jc3VzcGVuZCBQQ0kgc2lkZQorICoJQHBkZXY6IFBDSSBkZXZpY2UKKyAqCisgKglQZXJmb3JtIHRoZSBzdXNwZW5kIHByb2Nlc3Npbmcgb24gb3VyIFBDSSBkZXZpY2Ugc3RhdGUKKyAqLworc3RhdGljIHZvaWQgZ21hX3N1c3BlbmRfcGNpKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBic20sIHZidDsKIAotICAgICAgICBtdXRleF91bmxvY2soJnBvd2VyX211dGV4KTsKKwlpZiAoZGV2X3ByaXYtPnN1c3BlbmRlZCkKKwkJcmV0dXJuOwogCisJcGNpX3NhdmVfc3RhdGUocGRldik7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIDB4NUMsICZic20pOworCWRldl9wcml2LT5zYXZlQlNNID0gYnNtOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCAweEZDLCAmdmJ0KTsKKwlkZXZfcHJpdi0+c2F2ZVZCVCA9IHZidDsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgUFNCX1BDSXhfTVNJX0FERFJfTE9DLCAmZGV2X3ByaXYtPm1zaV9hZGRyKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgUFNCX1BDSXhfTVNJX0RBVEFfTE9DLCAmZGV2X3ByaXYtPm1zaV9kYXRhKTsKKworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7CisKKwlkZXZfcHJpdi0+c3VzcGVuZGVkID0gdHJ1ZTsKK30KKworLyoqCisgKglnbWFfcmVzdW1lX3BjaQkJLQlyZXN1bWUgaGVscGVyCisgKglAZGV2OiBvdXIgUENJIGRldmljZQorICoKKyAqCVBlcmZvcm0gdGhlIHJlc3VtZSBwcm9jZXNzaW5nIG9uIG91ciBQQ0kgZGV2aWNlIHN0YXRlIC0gcmV3cml0ZQorICoJcmVnaXN0ZXIgc3RhdGUgYW5kIHJlLWVuYWJsZSB0aGUgUENJIGRldmljZQorICovCitzdGF0aWMgYm9vbCBnbWFfcmVzdW1lX3BjaShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0OworCisJaWYgKCFkZXZfcHJpdi0+c3VzcGVuZGVkKQorCQlyZXR1cm4gdHJ1ZTsKKworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIDB4NWMsIGRldl9wcml2LT5zYXZlQlNNKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIDB4RkMsIGRldl9wcml2LT5zYXZlVkJUKTsKKwkvKiByZXRvcmluZyBNU0kgYWRkcmVzcyBhbmQgZGF0YSBpbiBQQ0l4IHNwYWNlICovCisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBQU0JfUENJeF9NU0lfQUREUl9MT0MsIGRldl9wcml2LT5tc2lfYWRkcik7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBQU0JfUENJeF9NU0lfREFUQV9MT0MsIGRldl9wcml2LT5tc2lfZGF0YSk7CisJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisKKwlpZiAocmV0ICE9IDApCisJCWRldl9lcnIoJnBkZXYtPmRldiwgInBjaV9lbmFibGUgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwllbHNlCisJCWRldl9wcml2LT5zdXNwZW5kZWQgPSBmYWxzZTsKKwlyZXR1cm4gIWRldl9wcml2LT5zdXNwZW5kZWQ7Cit9CisKKy8qKgorICoJZ21hX3Bvd2VyX3N1c3BlbmQJCS0JYnVzIGNhbGxiYWNrIGZvciBzdXNwZW5kCisgKglAcGRldjogb3VyIFBDSSBkZXZpY2UKKyAqCUBzdGF0ZTogc3VzcGVuZCB0eXBlCisgKgorICoJQ2FsbGVkIGJhY2sgYnkgdGhlIFBDSSBsYXllciBkdXJpbmcgYSBzdXNwZW5kIG9mIHRoZSBzeXN0ZW0uIFdlCisgKglwZXJmb3JtIHRoZSBuZWNlc3Nhcnkgc2h1dCBkb3duIHN0ZXBzIGFuZCBzYXZlIGVub3VnaCBzdGF0ZSB0aGF0CisgKgl3ZSBjYW4gdW5kbyB0aGlzIHdoZW4gcmVzdW1lIGlzIGNhbGxlZC4KKyAqLworaW50IGdtYV9wb3dlcl9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwltdXRleF9sb2NrKCZwb3dlcl9tdXRleCk7CisJaWYgKCFkZXZfcHJpdi0+c3VzcGVuZGVkKSB7CisJCWlmIChkZXZfcHJpdi0+ZGlzcGxheV9jb3VudCkgeworCQkJbXV0ZXhfdW5sb2NrKCZwb3dlcl9tdXRleCk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJCXBzYl9pcnFfdW5pbnN0YWxsKGRldik7CisJCWdtYV9zdXNwZW5kX2Rpc3BsYXkoZGV2KTsKKwkJZ21hX3N1c3BlbmRfcGNpKHBkZXYpOworCX0KKwltdXRleF91bmxvY2soJnBvd2VyX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIAogCi0vKgotICogb3NwbV9wb3dlcl9pc2xhbmRfZG93bgorLyoqCisgKglnbWFfcG93ZXJfcmVzdW1lCQktCXJlc3VtZSBwb3dlcgorICoJQHBkZXY6IFBDSSBkZXZpY2UKICAqCi0gKiBEZXNjcmlwdGlvbjogQ3V0IHBvd2VyIHRvIHRoZSBzcGVjaWZpZWQgaXNsYW5kKHMpIChwb3dlcmdhdGluZykKKyAqCVJlc3VtZSB0aGUgUENJIHNpZGUgb2YgdGhlIGdyYXBoaWNzIGFuZCB0aGVuIHRoZSBkaXNwbGF5cwogICovCi12b2lkIG9zcG1fcG93ZXJfaXNsYW5kX2Rvd24oaW50IGlzbGFuZHMpCitpbnQgZ21hX3Bvd2VyX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLSNpZiAwCi0JdTMyIHB3cl9jbnQgPSAwOwotCXUzMiBwd3JfbWFzayA9IDA7Ci0JdTMyIHB3cl9zdHMgPSAwOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAKLQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9Ci0JCShzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICopIGdwRHJtRGV2aWNlLT5kZXZfcHJpdmF0ZTsKLQotCWdfaHdfcG93ZXJfc3RhdHVzX21hc2sgJj0gfmlzbGFuZHM7Ci0KLQlpZiAoaXNsYW5kcyAmIE9TUE1fR1JBUEhJQ1NfSVNMQU5EKSB7Ci0JCXB3cl9jbnQgfD0gUFNCX1BXUkdUX0dGWF9NQVNLOwotCQlwd3JfbWFzayB8PSBQU0JfUFdSR1RfR0ZYX01BU0s7Ci0JCWlmIChkZXZfcHJpdi0+Z3JhcGhpY3Nfc3RhdGUgPT0gUFNCX1BXUl9TVEFURV9PTikgewotCQkJZGV2X3ByaXYtPmdmeF9vbl90aW1lICs9IChqaWZmaWVzIC0gZGV2X3ByaXYtPmdmeF9sYXN0X21vZGVfY2hhbmdlKSAqIDEwMDAgLyBIWjsKLQkJCWRldl9wcml2LT5nZnhfbGFzdF9tb2RlX2NoYW5nZSA9IGppZmZpZXM7Ci0JCQlkZXZfcHJpdi0+Z3JhcGhpY3Nfc3RhdGUgPSBQU0JfUFdSX1NUQVRFX09GRjsKLQkJCWRldl9wcml2LT5nZnhfb2ZmX2NudCsrOwotCQl9Ci0JfQotCWlmIChpc2xhbmRzICYgT1NQTV9WSURFT19FTkNfSVNMQU5EKSB7Ci0JCXB3cl9jbnQgfD0gUFNCX1BXUkdUX1ZJRF9FTkNfTUFTSzsKLQkJcHdyX21hc2sgfD0gUFNCX1BXUkdUX1ZJRF9FTkNfTUFTSzsKLQl9Ci0JaWYgKGlzbGFuZHMgJiBPU1BNX1ZJREVPX0RFQ19JU0xBTkQpIHsKLQkJcHdyX2NudCB8PSBQU0JfUFdSR1RfVklEX0RFQ19NQVNLOwotCQlwd3JfbWFzayB8PSBQU0JfUFdSR1RfVklEX0RFQ19NQVNLOwotCX0KLQlpZiAocHdyX2NudCkgewotCQlwd3JfY250IHw9IGlubChkZXZfcHJpdi0+YXBtX2Jhc2UpOwotCQlvdXRsKHB3cl9jbnQsIGRldl9wcml2LT5hcG1fYmFzZSAgKyBQU0JfQVBNX0NNRCk7Ci0JCXdoaWxlICh0cnVlKSB7Ci0JCQlwd3Jfc3RzID0gaW5sKGRldl9wcml2LT5hcG1fYmFzZSArIFBTQl9BUE1fU1RTKTsKLQotCQkJaWYgKChwd3Jfc3RzICYgcHdyX21hc2spID09IHB3cl9tYXNrKQotCQkJCWJyZWFrOwotCQkJZWxzZQotCQkJCXVkZWxheSgxMCk7Ci0JCX0KLQl9Ci0KLQlpZiAoaXNsYW5kcyAmIE9TUE1fRElTUExBWV9JU0xBTkQpIHsKLQkJcHdyX21hc2sgPSBQU0JfUFdSR1RfRElTUExBWV9NQVNLOwotCi0JCW91dGwocHdyX21hc2ssIChkZXZfcHJpdi0+b3NwbV9iYXNlICsgUFNCX1BNX1NTQykpOwotCi0JCXdoaWxlICh0cnVlKSB7Ci0JCQlwd3Jfc3RzID0gaW5sKGRldl9wcml2LT5vc3BtX2Jhc2UgKyBQU0JfUE1fU1NTKTsKLQkJCWlmICgocHdyX3N0cyAmIHB3cl9tYXNrKSA9PSBwd3JfbWFzaykKLQkJCQlicmVhazsKLQkJCWVsc2UKLQkJCQl1ZGVsYXkoMTApOwotCQl9Ci0JfQotI2VuZGlmCi19Ci0KLQotLyoKLSAqIG9zcG1fcG93ZXJfaXNfaHdfb24KLSAqCi0gKiBEZXNjcmlwdGlvbjogZG8gYW4gaW5zdGFudGFuZW91cyBjaGVjayBmb3IgaWYgdGhlIHNwZWNpZmllZCBpc2xhbmRzCi0gKiBhcmUgb24uICBPbmx5IHVzZSB0aGlzIGluIGNhc2VzIHdoZXJlIHlvdSBrbm93IHRoZSBnX3N0YXRlX2NoYW5nZV9tdXRleAotICogaXMgYWxyZWFkeSBoZWxkIHN1Y2ggYXMgaW4gaXJxIGluc3RhbGwvdW5pbnN0YWxsLiAgT3RoZXJ3aXNlLCB1c2UKLSAqIG9zcG1fcG93ZXJfdXNpbmdfaHdfYmVnaW4oKS4KLSAqLwotYm9vbCBvc3BtX3Bvd2VyX2lzX2h3X29uKGludCBod19pc2xhbmRzKQotewotCXJldHVybiAoKGdfaHdfcG93ZXJfc3RhdHVzX21hc2sgJiBod19pc2xhbmRzKSA9PSBod19pc2xhbmRzKSA/IHRydWU6ZmFsc2U7Ci19Ci0KLS8qCi0gKiBvc3BtX3Bvd2VyX3VzaW5nX2h3X2JlZ2luCi0gKgotICogRGVzY3JpcHRpb246IE5vdGlmeSBQb3dlck1nbXQgbW9kdWxlIHRoYXQgeW91IHdpbGwgYmUgYWNjZXNzaW5nIHRoZQotICogc3BlY2lmaWVkIGlzbGFuZCdzIGh3IHNvIGRvbid0IHBvd2VyIGl0IG9mZi4gIElmIGZvcmNlX29uIGlzIHRydWUsCi0gKiB0aGlzIHdpbGwgcG93ZXIgb24gdGhlIHNwZWNpZmllZCBpc2xhbmQgaWYgaXQgaXMgb2ZmLgotICogT3RoZXJ3aXNlLCB0aGlzIHdpbGwgcmV0dXJuIGZhbHNlIGFuZCB0aGUgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIG5vdAotICogYWNjZXNzIHRoZSBody4KLSAqCi0gKiBOT1RFICoqKiBJZiB0aGlzIGlzIGNhbGxlZCBmcm9tIGFuZCBpbnRlcnJ1cHQgaGFuZGxlciBvciBvdGhlciBhdG9taWMKLSAqIGNvbnRleHQsIHRoZW4gaXQgd2lsbCByZXR1cm4gZmFsc2UgaWYgd2UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYQotICogcG93ZXIgc3RhdGUgdHJhbnNpdGlvbiBhbmQgdGhlIGNhbGxlciB3aWxsIGJlIGV4cGVjdGVkIHRvIGhhbmRsZSB0aGF0Ci0gKiBldmVuIGlmIGZvcmNlX29uIGlzIHNldCB0byB0cnVlLgotICovCi1ib29sIG9zcG1fcG93ZXJfdXNpbmdfaHdfYmVnaW4oaW50IGh3X2lzbGFuZCwgVUhCVXNhZ2UgdXNhZ2UpCi17Ci0gICAgICAgIHJldHVybiAxOwkvKkZJWE1FQUMgKi8KLSNpZiAwCi0JYm9vbCByZXQgPSB0cnVlOwotCWJvb2wgaXNsYW5kX2lzX29mZiA9IGZhbHNlOwotCWJvb2wgYl9hdG9taWMgPSAoaW5faW50ZXJydXB0KCkgfHwgaW5fYXRvbWljKCkpOwotCWJvb2wgbG9ja2VkID0gdHJ1ZTsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGdwRHJtRGV2aWNlLT5wZGV2OwotCXUzMiBkZXZpY2VJRCA9IDA7Ci0JYm9vbCBmb3JjZV9vbiA9IHVzYWdlID8gdHJ1ZTogZmFsc2U7Ci0JLypxdWljayBwYXRoLCBub3QgMTAwJSByYWNlIHNhZmUsIGJ1dCBzaG91bGQgYmUgZW5vdWdoIGNvbWFwcmUgdG8gY3VycmVudCBvdGhlciBjb2RlIGluIHRoaXMgZmlsZSAqLwotCWlmICghZm9yY2Vfb24pIHsKLQkJaWYgKGh3X2lzbGFuZCAmIChPU1BNX0FMTF9JU0xBTkRTICYgfmdfaHdfcG93ZXJfc3RhdHVzX21hc2spKQotCQkJcmV0dXJuIGZhbHNlOwotCQllbHNlIHsKLQkJCWxvY2tlZCA9IGZhbHNlOwotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCi0JCQkvKiBpbmNyZW1lbnQgcG1fcnVudGltZV9yZWZjb3VudCAqLwotCQkJcG1fcnVudGltZV9nZXQoJnBkZXYtPmRldik7Ci0jZW5kaWYKLQkJCWdvdG8gaW5jcmVhc2VfY291bnQ7Ci0JCX0KLQl9Ci0KLQotCWlmICghYl9hdG9taWMpCi0JCW11dGV4X2xvY2soJnBvd2VyX211dGV4KTsKLQotCWlzbGFuZF9pc19vZmYgPSBod19pc2xhbmQgJiAoT1NQTV9BTExfSVNMQU5EUyAmIH5nX2h3X3Bvd2VyX3N0YXR1c19tYXNrKTsKLQotCWlmIChiX2F0b21pYyAmJiAoZ2JTdXNwZW5kSW5Qcm9ncmVzcyB8fCBnYlJlc3VtZUluUHJvZ3Jlc3MgfHwgZ2JTdXNwZW5kZWQpICYmIGZvcmNlX29uICYmIGlzbGFuZF9pc19vZmYpCi0JCXJldCA9IGZhbHNlOwotCi0JaWYgKHJldCAmJiBpc2xhbmRfaXNfb2ZmICYmICFmb3JjZV9vbikKLQkJcmV0ID0gZmFsc2U7Ci0KLQlpZiAocmV0ICYmIGlzbGFuZF9pc19vZmYgJiYgZm9yY2Vfb24pIHsKLQkJZ2JSZXN1bWVJblByb2dyZXNzID0gdHJ1ZTsKLQotCQlyZXQgPSBvc3BtX3Jlc3VtZV9wY2kocGRldik7Ci0KLQkJaWYgKHJldCkgewotCQkJc3dpdGNoKGh3X2lzbGFuZCkKLQkJCXsKLQkJCWNhc2UgT1NQTV9ESVNQTEFZX0lTTEFORDoKLQkJCQlkZXZpY2VJRCA9IGd1aTMyTVJTVERpc3BsYXlEZXZpY2VJRDsKLQkJCQlvc3BtX3Jlc3VtZV9kaXNwbGF5KHBkZXYpOwotCQkJCXBzYl9pcnFfcHJlaW5zdGFsbF9pc2xhbmRzKGdwRHJtRGV2aWNlLCBPU1BNX0RJU1BMQVlfSVNMQU5EKTsKLQkJCQlwc2JfaXJxX3Bvc3RpbnN0YWxsX2lzbGFuZHMoZ3BEcm1EZXZpY2UsIE9TUE1fRElTUExBWV9JU0xBTkQpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBPU1BNX0dSQVBISUNTX0lTTEFORDoKLQkJCQlkZXZpY2VJRCA9IGd1aTMyU0dYRGV2aWNlSUQ7Ci0JCQkJb3NwbV9wb3dlcl9pc2xhbmRfdXAoT1NQTV9HUkFQSElDU19JU0xBTkQpOwotCQkJCXBzYl9pcnFfcHJlaW5zdGFsbF9pc2xhbmRzKGdwRHJtRGV2aWNlLCBPU1BNX0dSQVBISUNTX0lTTEFORCk7Ci0JCQkJcHNiX2lycV9wb3N0aW5zdGFsbF9pc2xhbmRzKGdwRHJtRGV2aWNlLCBPU1BNX0dSQVBISUNTX0lTTEFORCk7Ci0JCQkJYnJlYWs7Ci0jaWYgMQotCQkJY2FzZSBPU1BNX1ZJREVPX0RFQ19JU0xBTkQ6Ci0JCQkJaWYoIW9zcG1fcG93ZXJfaXNfaHdfb24oT1NQTV9ESVNQTEFZX0lTTEFORCkpIHsKLQkJCQkJLy9wcmludGsoS0VSTl9BTEVSVCAiJXMgcG93ZXIgb24gZGlzcGxheSBmb3IgdmlkZW8gZGVjb2RlIHVzZVxuIiwgX19mdW5jX18pOwotCQkJCQlkZXZpY2VJRCA9IGd1aTMyTVJTVERpc3BsYXlEZXZpY2VJRDsKLQkJCQkJb3NwbV9yZXN1bWVfZGlzcGxheShwZGV2KTsKLQkJCQkJcHNiX2lycV9wcmVpbnN0YWxsX2lzbGFuZHMoZ3BEcm1EZXZpY2UsIE9TUE1fRElTUExBWV9JU0xBTkQpOwotCQkJCQlwc2JfaXJxX3Bvc3RpbnN0YWxsX2lzbGFuZHMoZ3BEcm1EZXZpY2UsIE9TUE1fRElTUExBWV9JU0xBTkQpOwotCQkJCX0KLQkJCQllbHNlewotCQkJCQkvL3ByaW50ayhLRVJOX0FMRVJUICIlcyBkaXNwbGF5IGlzIGFscmVhZHkgb24gZm9yIHZpZGVvIGRlY29kZSB1c2VcbiIsIF9fZnVuY19fKTsKLQkJCQl9Ci0KLQkJCQlpZighb3NwbV9wb3dlcl9pc19od19vbihPU1BNX1ZJREVPX0RFQ19JU0xBTkQpKSB7Ci0JCQkJCS8vcHJpbnRrKEtFUk5fQUxFUlQgIiVzIHBvd2VyIG9uIHZpZGVvIGRlY29kZVxuIiwgX19mdW5jX18pOwotCQkJCQlkZXZpY2VJRCA9IGd1aTMyTVJTVE1TVkRYRGV2aWNlSUQ7Ci0JCQkJCW9zcG1fcG93ZXJfaXNsYW5kX3VwKE9TUE1fVklERU9fREVDX0lTTEFORCk7Ci0JCQkJCXBzYl9pcnFfcHJlaW5zdGFsbF9pc2xhbmRzKGdwRHJtRGV2aWNlLCBPU1BNX1ZJREVPX0RFQ19JU0xBTkQpOwotCQkJCQlwc2JfaXJxX3Bvc3RpbnN0YWxsX2lzbGFuZHMoZ3BEcm1EZXZpY2UsIE9TUE1fVklERU9fREVDX0lTTEFORCk7Ci0JCQkJfQotCQkJCWVsc2V7Ci0JCQkJCS8vcHJpbnRrKEtFUk5fQUxFUlQgIiVzIHZpZGVvIGRlY29kZSBpcyBhbHJlYWR5IG9uXG4iLCBfX2Z1bmNfXyk7Ci0JCQkJfQotCi0JCQkJYnJlYWs7Ci0JCQljYXNlIE9TUE1fVklERU9fRU5DX0lTTEFORDoKLQkJCQlpZighb3NwbV9wb3dlcl9pc19od19vbihPU1BNX0RJU1BMQVlfSVNMQU5EKSkgewotCQkJCQkvL3ByaW50ayhLRVJOX0FMRVJUICIlcyBwb3dlciBvbiBkaXNwbGF5IGZvciB2aWRlbyBlbmNvZGVcbiIsIF9fZnVuY19fKTsKLQkJCQkJZGV2aWNlSUQgPSBndWkzMk1SU1REaXNwbGF5RGV2aWNlSUQ7Ci0JCQkJCW9zcG1fcmVzdW1lX2Rpc3BsYXkocGRldik7Ci0JCQkJCXBzYl9pcnFfcHJlaW5zdGFsbF9pc2xhbmRzKGdwRHJtRGV2aWNlLCBPU1BNX0RJU1BMQVlfSVNMQU5EKTsKLQkJCQkJcHNiX2lycV9wb3N0aW5zdGFsbF9pc2xhbmRzKGdwRHJtRGV2aWNlLCBPU1BNX0RJU1BMQVlfSVNMQU5EKTsKLQkJCQl9Ci0JCQkJZWxzZXsKLQkJCQkJLy9wcmludGsoS0VSTl9BTEVSVCAiJXMgZGlzcGxheSBpcyBhbHJlYWR5IG9uIGZvciB2aWRlbyBlbmNvZGUgdXNlXG4iLCBfX2Z1bmNfXyk7Ci0JCQkJfQotCi0JCQkJaWYoIW9zcG1fcG93ZXJfaXNfaHdfb24oT1NQTV9WSURFT19FTkNfSVNMQU5EKSkgewotCQkJCQkvL3ByaW50ayhLRVJOX0FMRVJUICIlcyBwb3dlciBvbiB2aWRlbyBlbmNvZGVcbiIsIF9fZnVuY19fKTsKLQkJCQkJZGV2aWNlSUQgPSBndWkzMk1SU1RUT1BBWkRldmljZUlEOwotCQkJCQlvc3BtX3Bvd2VyX2lzbGFuZF91cChPU1BNX1ZJREVPX0VOQ19JU0xBTkQpOwotCQkJCQlwc2JfaXJxX3ByZWluc3RhbGxfaXNsYW5kcyhncERybURldmljZSwgT1NQTV9WSURFT19FTkNfSVNMQU5EKTsKLQkJCQkJcHNiX2lycV9wb3N0aW5zdGFsbF9pc2xhbmRzKGdwRHJtRGV2aWNlLCBPU1BNX1ZJREVPX0VOQ19JU0xBTkQpOwotCQkJCX0KLQkJCQllbHNlewotCQkJCQkvL3ByaW50ayhLRVJOX0FMRVJUICIlcyB2aWRlbyBkZWNvZGUgaXMgYWxyZWFkeSBvblxuIiwgX19mdW5jX18pOwotCQkJCX0KLSNlbmRpZgotCQkJCWJyZWFrOwotCi0JCQlkZWZhdWx0OgotCQkJCXByaW50ayhLRVJOX0FMRVJUICIlcyB1bmtub3duIGlzbGFuZCAhISEhIFxuIiwgX19mdW5jX18pOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCX0KLQotCQlpZiAoIXJldCkKLQkJCXByaW50ayhLRVJOX0FMRVJUICJvc3BtX3Bvd2VyX3VzaW5nX2h3X2JlZ2luOiBmb3JjaW5nIG9uICVkIGZhaWxlZFxuIiwgaHdfaXNsYW5kKTsKLQotCQlnYlJlc3VtZUluUHJvZ3Jlc3MgPSBmYWxzZTsKLQl9Ci1pbmNyZWFzZV9jb3VudDoKLQlpZiAocmV0KSB7Ci0JCXN3aXRjaChod19pc2xhbmQpCi0JCXsKLQkJY2FzZSBPU1BNX0dSQVBISUNTX0lTTEFORDoKLQkJCWF0b21pY19pbmMoJmdfZ3JhcGhpY3NfYWNjZXNzX2NvdW50KTsKLQkJCWJyZWFrOwotCQljYXNlIE9TUE1fVklERU9fRU5DX0lTTEFORDoKLQkJCWF0b21pY19pbmMoJmdfdmlkZW9lbmNfYWNjZXNzX2NvdW50KTsKLQkJCWJyZWFrOwotCQljYXNlIE9TUE1fVklERU9fREVDX0lTTEFORDoKLQkJCWF0b21pY19pbmMoJmdfdmlkZW9kZWNfYWNjZXNzX2NvdW50KTsKLQkJCWJyZWFrOwotCQljYXNlIE9TUE1fRElTUExBWV9JU0xBTkQ6Ci0JCQlhdG9taWNfaW5jKCZnX2Rpc3BsYXlfYWNjZXNzX2NvdW50KTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKCFiX2F0b21pYyAmJiBsb2NrZWQpCi0JCW11dGV4X3VubG9jaygmcG93ZXJfbXV0ZXgpOwotCi0JcmV0dXJuIHJldDsKLSNlbmRpZgotfQotCi0KLS8qCi0gKiBvc3BtX3Bvd2VyX3VzaW5nX2h3X2VuZAotICoKLSAqIERlc2NyaXB0aW9uOiBOb3RpZnkgUG93ZXJNZ210IG1vZHVsZSB0aGF0IHlvdSBhcmUgZG9uZSBhY2Nlc3NpbmcgdGhlCi0gKiBzcGVjaWZpZWQgaXNsYW5kJ3MgaHcgc28gZmVlbCBmcmVlIHRvIHBvd2VyIGl0IG9mZi4gIE5vdGUgdGhhdCB0aGlzCi0gKiBmdW5jdGlvbiBkb2Vzbid0IGFjdHVhbGx5IHBvd2VyIG9mZiB0aGUgaXNsYW5kcy4KLSAqLwotdm9pZCBvc3BtX3Bvd2VyX3VzaW5nX2h3X2VuZChpbnQgaHdfaXNsYW5kKQotewotI2lmIDAgLyogRklYTUVBQyAqLwotCXN3aXRjaChod19pc2xhbmQpCi0JewotCWNhc2UgT1NQTV9HUkFQSElDU19JU0xBTkQ6Ci0JCWF0b21pY19kZWMoJmdfZ3JhcGhpY3NfYWNjZXNzX2NvdW50KTsKLQkJYnJlYWs7Ci0JY2FzZSBPU1BNX1ZJREVPX0VOQ19JU0xBTkQ6Ci0JCWF0b21pY19kZWMoJmdfdmlkZW9lbmNfYWNjZXNzX2NvdW50KTsKLQkJYnJlYWs7Ci0JY2FzZSBPU1BNX1ZJREVPX0RFQ19JU0xBTkQ6Ci0JCWF0b21pY19kZWMoJmdfdmlkZW9kZWNfYWNjZXNzX2NvdW50KTsKLQkJYnJlYWs7Ci0JY2FzZSBPU1BNX0RJU1BMQVlfSVNMQU5EOgotCQlhdG9taWNfZGVjKCZnX2Rpc3BsYXlfYWNjZXNzX2NvdW50KTsKLQkJYnJlYWs7Ci0JfQotCi0JLy9kZWNyZW1lbnQgcnVudGltZSBwbSByZWYgY291bnQKLQlwbV9ydW50aW1lX3B1dCgmZ3BEcm1EZXZpY2UtPnBkZXYtPmRldik7Ci0KLQlXQVJOX09OKGF0b21pY19yZWFkKCZnX2dyYXBoaWNzX2FjY2Vzc19jb3VudCkgPCAwKTsKLQlXQVJOX09OKGF0b21pY19yZWFkKCZnX3ZpZGVvZW5jX2FjY2Vzc19jb3VudCkgPCAwKTsKLQlXQVJOX09OKGF0b21pY19yZWFkKCZnX3ZpZGVvZGVjX2FjY2Vzc19jb3VudCkgPCAwKTsKLQlXQVJOX09OKGF0b21pY19yZWFkKCZnX2Rpc3BsYXlfYWNjZXNzX2NvdW50KSA8IDApOwotI2VuZGlmCi19Ci0KLWludCBvc3BtX3J1bnRpbWVfcG1fYWxsb3coc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCi17CisJbXV0ZXhfbG9jaygmcG93ZXJfbXV0ZXgpOworCWdtYV9yZXN1bWVfcGNpKHBkZXYpOworCWdtYV9yZXN1bWVfZGlzcGxheShwZGV2KTsKKwlwc2JfaXJxX3ByZWluc3RhbGwoZGV2KTsKKwlwc2JfaXJxX3Bvc3RpbnN0YWxsKGRldik7CisJbXV0ZXhfdW5sb2NrKCZwb3dlcl9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgb3NwbV9ydW50aW1lX3BtX2ZvcmJpZChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKKworCisvKioKKyAqCWdtYV9wb3dlcl9pc19vbgkJLQlyZXR1cm5lIHRydWUgaWYgcG93ZXIgaXMgb24KKyAqCUBkZXY6IG91ciBEUk0gZGV2aWNlCisgKgorICoJUmV0dXJucyB0cnVlIGlmIHRoZSBkaXNwbGF5IGlzbGFuZCBwb3dlciBpcyBvbiBhdCB0aGlzIG1vbWVudAorICovCitib29sIGdtYV9wb3dlcl9pc19vbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKiBkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXJldHVybiBkZXZfcHJpdi0+ZGlzcGxheV9wb3dlcjsKK30KIAotCURSTV9JTkZPKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKIAotCXBtX3J1bnRpbWVfZm9yYmlkKCZkZXYtPnBkZXYtPmRldik7Ci0JZGV2X3ByaXYtPnJwbV9lbmFibGVkID0gMDsKKy8qKgorICoJZ21hX3Bvd2VyX2JlZ2luCQktCWJlZ2luIHJlcXVpcmluZyBwb3dlcgorICoJQGRldjogb3VyIERSTSBkZXZpY2UKKyAqCUBmb3JjZV9vbjogdHJ1ZSB0byBmb3JjZSBwb3dlciBvbgorICoKKyAqCUJlZ2luIGFuIGFjdGlvbiB0aGF0IHJlcXVpcmVzIHRoZSBkaXNwbGF5IHBvd2VyIGlzbGFuZCBpcyBlbmFibGVkLgorICoJV2UgcmVmY291bnQgdGhlIGlzbGFuZHMuCisgKgorICoJRklYTUU6IGxvY2tpbmcKKyAqLworYm9vbCBnbWFfcG93ZXJfYmVnaW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgYm9vbCBmb3JjZV9vbikKK3sKKwlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IHJldDsKKworCS8qIFBvd2VyIGFscmVhZHkgb24gPyAqLworCWlmIChkZXZfcHJpdi0+ZGlzcGxheV9wb3dlcikgeworCQlkZXZfcHJpdi0+ZGlzcGxheV9jb3VudCsrOworCQlwbV9ydW50aW1lX2dldCgmZGV2LT5wZGV2LT5kZXYpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJaWYgKGZvcmNlX29uID09IGZhbHNlKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBPayBwb3dlciB1cCBuZWVkZWQgKi8KKwlyZXQgPSBnbWFfcmVzdW1lX3BjaShkZXYtPnBkZXYpOworCWlmIChyZXQgPT0gMCkgeworCQlwc2JfaXJxX3ByZWluc3RhbGwoZGV2KTsKKwkJcHNiX2lycV9wb3N0aW5zdGFsbChkZXYpOworCQlwbV9ydW50aW1lX2dldCgmZGV2LT5wZGV2LT5kZXYpOworCQlkZXZfcHJpdi0+ZGlzcGxheV9jb3VudCsrOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCisKKy8qKgorICoJZ21hX3Bvd2VyX2VuZAkJLQllbmQgdXNlIG9mIHBvd2VyCisgKglAZGV2OiBPdXIgRFJNIGRldmljZQorICoKKyAqCUluZGljYXRlIHRoYXQgb25lIG9mIG91ciBnbWFfcG93ZXJfYmVnaW4oKSByZXF1ZXN0ZWQgcGVyaW9kcyB3aGVuCisgKgl0aGUgZGlwbGF5IGlzbGFuZCBwb3dlciBpcyBuZWVkZWQgaGFzIGNvbXBsZXRlZC4KKyAqLwordm9pZCBnbWFfcG93ZXJfZW5kKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWRldl9wcml2LT5kaXNwbGF5X2NvdW50LS07CisJV0FSTl9PTihkZXZfcHJpdi0+ZGlzcGxheV9jb3VudCA8IDApOworCXBtX3J1bnRpbWVfcHV0KCZkZXYtPnBkZXYtPmRldik7CiB9CiAKIGludCBwc2JfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlwbV9tZXNzYWdlX3Qgc3RhdGU7Ci0JaW50IHJldCA9IDA7Ci0Jc3RhdGUuZXZlbnQgPSAwOwotCi0jaWZkZWYgT1NQTV9HRlhfRFBLCi0JcHJpbnRrKEtFUk5fQUxFUlQgIk9TUE1fR0ZYX0RQSzogJXMgXG4iLCBfX2Z1bmNfXyk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGF0b21pY19yZWFkKCZnX2dyYXBoaWNzX2FjY2Vzc19jb3VudCkgfHwgYXRvbWljX3JlYWQoJmdfdmlkZW9lbmNfYWNjZXNzX2NvdW50KQotCQl8fCBhdG9taWNfcmVhZCgmZ192aWRlb2RlY19hY2Nlc3NfY291bnQpIHx8IGF0b21pY19yZWFkKCZnX2Rpc3BsYXlfYWNjZXNzX2NvdW50KSl7Ci0jaWZkZWYgT1NQTV9HRlhfRFBLCi0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fQUxFUlQgIk9TUE1fR0ZYX0RQSzogR0ZYOiAlZCBWRUM6ICVkIFZFRDogJWQgREM6ICVkIERTUjogJWQgXG4iLCBhdG9taWNfcmVhZCgmZ19ncmFwaGljc19hY2Nlc3NfY291bnQpLAotCQkJYXRvbWljX3JlYWQoJmdfdmlkZW9lbmNfYWNjZXNzX2NvdW50KSwgYXRvbWljX3JlYWQoJmdfdmlkZW9kZWNfYWNjZXNzX2NvdW50KSwgYXRvbWljX3JlYWQoJmdfZGlzcGxheV9hY2Nlc3NfY291bnQpKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotCQlyZXQgPSBvc3BtX3Bvd2VyX3N1c3BlbmQoZ3BEcm1EZXZpY2UtPnBkZXYsIHN0YXRlKTsKLQotCXJldHVybiByZXQ7CisJc3RhdGljIHBtX21lc3NhZ2VfdCBkdW1teTsKKwlyZXR1cm4gZ21hX3Bvd2VyX3N1c3BlbmQodG9fcGNpX2RldihkZXYpLCBkdW1teSk7CiB9CiAKIGludCBwc2JfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtNzgyLDExICs0NzksMTEgQEAKIAogaW50IHBzYl9ydW50aW1lX2lkbGUoc3RydWN0IGRldmljZSAqZGV2KQogewotCS8qcHJpbnRrIChLRVJOX0FMRVJUICJsdmRzOiVkLG1pcGk6JWRcbiIsIGRldl9wcml2LT5pc19sdmRzX29uLCBkZXZfcHJpdi0+aXNfbWlwaV9vbik7Ki8KLQlpZiAoYXRvbWljX3JlYWQoJmdfZ3JhcGhpY3NfYWNjZXNzX2NvdW50KSB8fCBhdG9taWNfcmVhZCgmZ192aWRlb2VuY19hY2Nlc3NfY291bnQpCi0JCXx8IGF0b21pY19yZWFkKCZnX3ZpZGVvZGVjX2FjY2Vzc19jb3VudCkgfHwgYXRvbWljX3JlYWQoJmdfZGlzcGxheV9hY2Nlc3NfY291bnQpKQotCQlyZXR1cm4gMTsKLQllbHNlCisJc3RydWN0IGRybV9kZXZpY2UgKmRybWRldiA9IHBjaV9nZXRfZHJ2ZGF0YSh0b19wY2lfZGV2KGRldikpOworCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZHJtZGV2LT5kZXZfcHJpdmF0ZTsKKwlpZiAoZGV2X3ByaXYtPmRpc3BsYXlfY291bnQpCiAJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIDE7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX3Bvd2VybWdtdC5oIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfcG93ZXJtZ210LmgKaW5kZXggYmY2ZjI3YS4uZTAwNTIyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfcG93ZXJtZ210LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfcG93ZXJtZ210LmgKQEAgLTI0LDcgKzI0LDggQEAKICAqIEF1dGhvcnM6CiAgKiAgICBCZW5qYW1pbiBEZWZuZXQgPGJlbmphbWluLnIuZGVmbmV0QGludGVsLmNvbT4KICAqICAgIFJhamVzaCBQb29ybmFjaGFuZHJhbiA8cmFqZXNoLnBvb3JuYWNoYW5kcmFuQGludGVsLmNvbT4KLSAqCisgKiBNYXNzaXZlbHkgcmV3b3JrZWQKKyAqICAgIEFsYW4gQ294IDxhbGFuQGxpbnV4LmludGVsLmNvbT4KICAqLwogI2lmbmRlZiBfUFNCX1BPV0VSTUdNVF9IXwogI2RlZmluZSBfUFNCX1BPV0VSTUdNVF9IXwpAQCAtMzIsNjUgKzMzLDM1IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KIAotI2RlZmluZSBPU1BNX0dSQVBISUNTX0lTTEFORAkweDEKLSNkZWZpbmUgT1NQTV9WSURFT19FTkNfSVNMQU5ECTB4MgotI2RlZmluZSBPU1BNX1ZJREVPX0RFQ19JU0xBTkQJMHg0Ci0jZGVmaW5lIE9TUE1fRElTUExBWV9JU0xBTkQJMHg4Ci0jZGVmaW5lIE9TUE1fR0wzX0NBQ0hFX0lTTEFORAkweDEwCi0jZGVmaW5lIE9TUE1fQUxMX0lTTEFORFMJMHgxZgotCi0vKiBJUEMgbWVzc2FnZSBhbmQgY29tbWFuZCBkZWZpbmVzIHVzZWQgdG8gZW5hYmxlL2Rpc2FibGUgbWlwaSBwYW5lbCB2b2x0YWdlcyAqLwotI2RlZmluZSBJUENfTVNHX1BBTkVMX09OX09GRiAgICAweEU5Ci0jZGVmaW5lIElQQ19DTURfUEFORUxfT04gICAgICAgIDEKLSNkZWZpbmUgSVBDX0NNRF9QQU5FTF9PRkYgICAgICAgMAotCi10eXBlZGVmIGVudW0gX1VIQlVzYWdlCi17Ci0gICAgT1NQTV9VSEJfT05MWV9JRl9PTiA9IDAsCi0gICAgT1NQTV9VSEJfRk9SQ0VfUE9XRVJfT04sCi19IFVIQlVzYWdlOwotCi0vKiBVc2UgdGhlc2UgZnVuY3Rpb25zIHRvIHBvd2VyIGRvd24gdmlkZW8gSFcgZm9yIEQwaTMgcHVycG9zZSAgKi8KLQotdm9pZCBvc3BtX3Bvd2VyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Ci12b2lkIG9zcG1fcG93ZXJfdW5pbml0KHZvaWQpOwotCit2b2lkIGdtYV9wb3dlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwordm9pZCBnbWFfcG93ZXJfdW5pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCiAvKgotICogT1NQTSB3aWxsIGNhbGwgdGhlc2UgZnVuY3Rpb25zCisgKiBUaGUga2VybmVsIGJ1cyBwb3dlciBtYW5hZ2VtZW50ICB3aWxsIGNhbGwgdGhlc2UgZnVuY3Rpb25zCiAgKi8KLWludCBvc3BtX3Bvd2VyX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7Ci1pbnQgb3NwbV9wb3dlcl9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOworaW50IGdtYV9wb3dlcl9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOworaW50IGdtYV9wb3dlcl9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogCiAvKgogICogVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhlIGRyaXZlciBzaG91bGQgdXNlIHRvIHdyYXAgYWxsIGh3IGFjY2VzcwogICogKGkuZS4gcmVnaXN0ZXIgcmVhZHMgYW5kIHdyaXRlcykKICAqLwotYm9vbCBvc3BtX3Bvd2VyX3VzaW5nX2h3X2JlZ2luKGludCBod19pc2xhbmQsIFVIQlVzYWdlIHVzYWdlKTsKLXZvaWQgb3NwbV9wb3dlcl91c2luZ19od19lbmQoaW50IGh3X2lzbGFuZCk7Citib29sIGdtYV9wb3dlcl9iZWdpbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBib29sIGZvcmNlKTsKK3ZvaWQgZ21hX3Bvd2VyX2VuZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIAogLyoKICAqIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGRvIGFuIGluc3RhbnRhbmVvdXMgY2hlY2sgZm9yIGlmIHRoZSBodyBpcyBvbi4KLSAqIE9ubHkgdXNlIHRoaXMgaW4gY2FzZXMgd2hlcmUgeW91IGtub3cgdGhlIGdfc3RhdGVfY2hhbmdlX211dGV4Ci0gKiBpcyBhbHJlYWR5IGhlbGQgc3VjaCBhcyBpbiBpcnEgaW5zdGFsbC91bmluc3RhbGwgYW5kIHlvdSBuZWVkIHRvCi0gKiBwcmV2ZW50IGEgZGVhZGxvY2sgc2l0dWF0aW9uLiAgT3RoZXJ3aXNlIHVzZSBvc3BtX3Bvd2VyX3VzaW5nX2h3X2JlZ2luKCkuCisgKiBPbmx5IHVzZSB0aGlzIGluIGNhc2VzIHdoZXJlIHlvdSBrbm93IHRoZSBtdXRleCBpcyBhbHJlYWR5IGhlbGQgc3VjaAorICogYXMgaW4gaXJxIGluc3RhbGwvdW5pbnN0YWxsIGFuZCB5b3UgbmVlZCB0bworICogcHJldmVudCBhIGRlYWRsb2NrIHNpdHVhdGlvbi4gIE90aGVyd2lzZSB1c2UgZ21hX3Bvd2VyX2JlZ2luKCkuCiAgKi8KLWJvb2wgb3NwbV9wb3dlcl9pc19od19vbihpbnQgaHdfaXNsYW5kcyk7Citib29sIGdtYV9wb3dlcl9pc19vbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIAogLyoKLSAqIFBvd2VyIHVwL2Rvd24gZGlmZmVyZW50IGh3IGNvbXBvbmVudCByYWlscy9pc2xhbmRzCi0gKi8KLXZvaWQgb3NwbV9wb3dlcl9pc2xhbmRfZG93bihpbnQgaHdfaXNsYW5kcyk7Ci12b2lkIG9zcG1fcG93ZXJfaXNsYW5kX3VwKGludCBod19pc2xhbmRzKTsKLXZvaWQgb3NwbV9zdXNwZW5kX2dyYXBoaWNzKHZvaWQpOwotLyoKICAqIEdGWC1SdW50aW1lIFBNIGNhbGxiYWNrcwogICovCiBpbnQgcHNiX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpOwogaW50IHBzYl9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogaW50IHBzYl9ydW50aW1lX2lkbGUoc3RydWN0IGRldmljZSAqZGV2KTsKLWludCBvc3BtX3J1bnRpbWVfcG1fYWxsb3coc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwotdm9pZCBvc3BtX3J1bnRpbWVfcG1fZm9yYmlkKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKLQogCiAjZW5kaWYgLypfUFNCX1BPV0VSTUdNVF9IXyovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9wdnJfZ2x1ZS5jIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfcHZyX2dsdWUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE3ODk0Ni4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9wdnJfZ2x1ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOSwgSW50ZWwgQ29ycG9yYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCi0gKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKLSAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgInBzYl9wdnJfZ2x1ZS5oIgotCi0vKioKLSAqIEZJWE1FOiBzaG91bGQgTk9UIHVzZSB0aGVzZSBmaWxlIHVuZGVyIGVudi9saW51eCBkaXJlY3RseQotICovCi0KLWludCBwc2JfZ2V0X21lbWluZm9fYnlfaGFuZGxlKHZvaWQgKmhLZXJuZWxNZW1JbmZvLAotCQkJCXZvaWQgKipwcHNLZXJuZWxNZW1JbmZvKQotewotCXJldHVybiAtRUlOVkFMOwotI2lmIDAKLQl2b2lkICpwc0tlcm5lbE1lbUluZm8gPSBJTUdfTlVMTDsKLQlQVlJTUlZfUEVSX1BST0NFU1NfREFUQSAqcHNQZXJQcm9jID0gSU1HX05VTEw7Ci0JUFZSU1JWX0VSUk9SIGVFcnJvcjsKLQotCXBzUGVyUHJvYyA9IFBWUlNSVlBlclByb2Nlc3NEYXRhKHRhc2tfdGdpZF9ucihjdXJyZW50KSk7Ci0JZUVycm9yID0gUFZSU1JWTG9va3VwSGFuZGxlKHBzUGVyUHJvYy0+cHNIYW5kbGVCYXNlLAotCQkJCSAgICAoSU1HX1ZPSUQgKikmcHNLZXJuZWxNZW1JbmZvLAotCQkJCSAgICBoS2VybmVsTWVtSW5mbywKLQkJCQkgICAgUFZSU1JWX0hBTkRMRV9UWVBFX01FTV9JTkZPKTsKLQlpZiAoZUVycm9yICE9IFBWUlNSVl9PSykgewotCQlEUk1fRVJST1IoIkNhbm5vdCBmaW5kIGtlcm5lbCBtZW1pbmZvIGZvciBoYW5kbGUgMHgleFxuIiwKLQkJCSAgKHUzMiloS2VybmVsTWVtSW5mbyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCSpwcHNLZXJuZWxNZW1JbmZvID0gcHNLZXJuZWxNZW1JbmZvOwotCi0JRFJNX0RFQlVHKCJHb3QgS2VybmVsIE1lbUluZm8gZm9yIGhhbmRsZSAlbHhcbiIsCi0JCSAgKHUzMiloS2VybmVsTWVtSW5mbyk7Ci0JcmV0dXJuIDA7Ci0jZW5kaWYKLX0KLQotaW50IHBzYl9nZXRfcGFnZXNfYnlfbWVtX2hhbmRsZSh2b2lkICpoT1NNZW1IYW5kbGUsIHN0cnVjdCBwYWdlICoqKnBhZ2VzKQotewotCXJldHVybiAtRUlOVkFMOwotI2lmIDAKLQlMaW51eE1lbUFyZWEgKnBzTGludXhNZW1BcmVhID0gKExpbnV4TWVtQXJlYSAqKWhPU01lbUhhbmRsZTsKLQlzdHJ1Y3QgcGFnZSAqKnBhZ2VfbGlzdDsKLQlpZiAocHNMaW51eE1lbUFyZWEtPmVBcmVhVHlwZSAhPSBMSU5VWF9NRU1fQVJFQV9BTExPQ19QQUdFUykgewotCQlEUk1fRVJST1IoIk1lbUFyZWEgdHlwZSBpcyBub3QgTElOVVhfTUVNX0FSRUFfQUxMT0NfUEFHRVNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlwYWdlX2xpc3QgPSBwc0xpbnV4TWVtQXJlYS0+dURhdGEuc1BhZ2VMaXN0LnB2UGFnZUxpc3Q7Ci0JaWYgKCFwYWdlX2xpc3QpIHsKLQkJRFJNX0RFQlVHKCJQYWdlIExpc3QgaXMgTlVMTFxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCSpwYWdlcyA9IHBhZ2VfbGlzdDsKLQlyZXR1cm4gMDsKLSNlbmRpZgotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfcHZyX2dsdWUuaCBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX3B2cl9nbHVlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlZThjYjIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfcHZyX2dsdWUuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDksIEludGVsIENvcnBvcmF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAotICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi0gKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJwc2JfZHJ2LmgiCi0KLWV4dGVybiBpbnQgcHNiX2dldF9tZW1pbmZvX2J5X2hhbmRsZSh2b2lkICogaEtlcm5lbE1lbUluZm8sCi0JCQkJdm9pZCAqKnBwc0tlcm5lbE1lbUluZm8pOwotZXh0ZXJuIHUzMiBwc2JfZ2V0X3RnaWQodm9pZCk7Ci1leHRlcm4gaW50IHBzYl9nZXRfcGFnZXNfYnlfbWVtX2hhbmRsZSh2b2lkICogaE9TTWVtSGFuZGxlLAotCQkJCQlzdHJ1Y3QgcGFnZSAqKipwYWdlcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9zZ3guYyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX3NneC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzMxMzRiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX3NneC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCBJbnRlbCBDb3Jwb3JhdGlvbi4KLSAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsIFR1bmdzdGVuIEdyYXBoaWNzLCBJbmMuIENlZGFyIFBhcmssIFRYLiBVU0EuCi0gKiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAotICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi0gKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSA8ZHJtL2RybVAuaD4KLSNpbmNsdWRlICJwc2JfZHJ2LmgiCi0jaW5jbHVkZSAicHNiX2RybS5oIgotI2luY2x1ZGUgInBzYl9yZWcuaCIKLSNpbmNsdWRlICJ0dG0vdHRtX2JvX2FwaS5oIgotI2luY2x1ZGUgInR0bS90dG1fZXhlY2J1Zl91dGlsLmgiCi0jaW5jbHVkZSAicHNiX3R0bV91c2Vyb2JqX2FwaS5oIgotI2luY2x1ZGUgInR0bS90dG1fcGxhY2VtZW50LmgiCi0jaW5jbHVkZSAicHNiX3NneC5oIgotI2luY2x1ZGUgInBzYl9pbnRlbF9yZWcuaCIKLSNpbmNsdWRlICJwc2JfcG93ZXJtZ210LmgiCi0KLQotc3RhdGljIGlubGluZSBpbnQgcHNiX3NhbWVfcGFnZSh1bnNpZ25lZCBsb25nIG9mZnNldCwKLQkJCQl1bnNpZ25lZCBsb25nIG9mZnNldDIpCi17Ci0JcmV0dXJuIChvZmZzZXQgJiBQQUdFX01BU0spID09IChvZmZzZXQyICYgUEFHRV9NQVNLKTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBzYl9vZmZzZXRfZW5kKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQlvZmZzZXQgPSAob2Zmc2V0ICsgUEFHRV9TSVpFKSAmIFBBR0VfTUFTSzsKLQlyZXR1cm4gKGVuZCA8IG9mZnNldCkgPyBlbmQgOiBvZmZzZXQ7Ci19Ci0KLXN0cnVjdCBwc2JfZHN0YnVmX2NhY2hlIHsKLQl1bnNpZ25lZCBpbnQgZHN0OwotCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqZHN0X2J1ZjsKLQl1bnNpZ25lZCBsb25nIGRzdF9vZmZzZXQ7Ci0JdWludDMyX3QgKmRzdF9wYWdlOwotCXVuc2lnbmVkIGludCBkc3RfcGFnZV9vZmZzZXQ7Ci0Jc3RydWN0IHR0bV9ib19rbWFwX29iaiBkc3Rfa21hcDsKLQlib29sIGRzdF9pc19pb21lbTsKLX07Ci0KLXN0cnVjdCBwc2JfdmFsaWRhdGVfYnVmZmVyIHsKLQlzdHJ1Y3QgdHRtX3ZhbGlkYXRlX2J1ZmZlciBiYXNlOwotCXN0cnVjdCBwc2JfdmFsaWRhdGVfcmVxIHJlcTsKLQlpbnQgcmV0OwotCXN0cnVjdCBwc2JfdmFsaWRhdGVfYXJnIF9fdXNlciAqdXNlcl92YWxfYXJnOwotCXVpbnQzMl90IGZsYWdzOwotCXVpbnQzMl90IG9mZnNldDsKLQlpbnQgcG9fY29ycmVjdDsKLX07Ci1zdGF0aWMgaW50Ci1wc2JfcGxhY2VtZW50X2ZlbmNlX3R5cGUoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKLQkJCSB1aW50NjRfdCBzZXRfdmFsX2ZsYWdzLAotCQkJIHVpbnQ2NF90IGNscl92YWxfZmxhZ3MsCi0JCQkgdWludDMyX3QgbmV3X2ZlbmNlX2NsYXNzLAotCQkJIHVpbnQzMl90ICpuZXdfZmVuY2VfdHlwZSkKLXsKLQlpbnQgcmV0OwotCXVpbnQzMl90IG5fZmVuY2VfdHlwZTsKLQkvKgotCXVpbnQzMl90IHNldF9mbGFncyA9IHNldF92YWxfZmxhZ3MgJiAweEZGRkZGRkZGOwotCXVpbnQzMl90IGNscl9mbGFncyA9IGNscl92YWxfZmxhZ3MgJiAweEZGRkZGRkZGOwotCSovCi0Jc3RydWN0IHR0bV9mZW5jZV9vYmplY3QgKm9sZF9mZW5jZTsKLQl1aW50MzJfdCBvbGRfZmVuY2VfdHlwZTsKLQlzdHJ1Y3QgdHRtX3BsYWNlbWVudCBwbGFjZW1lbnQ7Ci0KLQlpZiAodW5saWtlbHkKLQkgICAgKCEoc2V0X3ZhbF9mbGFncyAmCi0JICAgICAgIChQU0JfR1BVX0FDQ0VTU19SRUFEIHwgUFNCX0dQVV9BQ0NFU1NfV1JJVEUpKSkpIHsKLQkJRFJNX0VSUk9SCi0JCSAgICAoIkdQVSBhY2Nlc3MgdHlwZSAocmVhZCAvIHdyaXRlKSBpcyBub3QgaW5kaWNhdGVkLlxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIFVzZXIgc3BhY2UgZHJpdmVyIGRvZXNuJ3Qgc2V0IGFueSBUVE0gcGxhY2VtZW50IGZsYWdzIGluCi0JCQkJCXNldF92YWxfZmxhZ3Mgb3IgY2xyX3ZhbF9mbGFncyAqLwotCXBsYWNlbWVudC5udW1fcGxhY2VtZW50ID0gMDsvKiBGSVhNRSAgKi8KLQlwbGFjZW1lbnQubnVtX2J1c3lfcGxhY2VtZW50ID0gMDsKLQlwbGFjZW1lbnQuZnBmbiA9IDA7Ci0JcGxhY2VtZW50LmxwZm4gPSAwOwotCXJldCA9IHBzYl90dG1fYm9fY2hlY2tfcGxhY2VtZW50KGJvLCAmcGxhY2VtZW50KTsKLQlpZiAodW5saWtlbHkocmV0ICE9IDApKQotCQlyZXR1cm4gcmV0OwotCi0Jc3dpdGNoIChuZXdfZmVuY2VfY2xhc3MpIHsKLQlkZWZhdWx0OgotCQluX2ZlbmNlX3R5cGUgPSBfUFNCX0ZFTkNFX1RZUEVfRVhFOwotCX0KLQotCSpuZXdfZmVuY2VfdHlwZSA9IG5fZmVuY2VfdHlwZTsKLQlvbGRfZmVuY2UgPSAoc3RydWN0IHR0bV9mZW5jZV9vYmplY3QgKikgYm8tPnN5bmNfb2JqOwotCW9sZF9mZW5jZV90eXBlID0gKHVpbnQzMl90KSAodW5zaWduZWQgbG9uZykgYm8tPnN5bmNfb2JqX2FyZzsKLQotCWlmIChvbGRfZmVuY2UgJiYgKChuZXdfZmVuY2VfY2xhc3MgIT0gb2xkX2ZlbmNlLT5mZW5jZV9jbGFzcykgfHwKLQkJCSAgKChuX2ZlbmNlX3R5cGUgXiBvbGRfZmVuY2VfdHlwZSkgJgotCQkJICAgb2xkX2ZlbmNlX3R5cGUpKSkgewotCQlyZXQgPSB0dG1fYm9fd2FpdChibywgMCwgMSwgMCk7Ci0JCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCi0JCQlyZXR1cm4gcmV0OwotCX0KLQkvKgotCWJvLT5wcm9wb3NlZF9mbGFncyA9IChiby0+cHJvcG9zZWRfZmxhZ3MgfCBzZXRfZmxhZ3MpCi0JCSYgfmNscl9mbGFncyAmIFRUTV9QTF9NQVNLX01FTVRZUEU7Ci0JKi8KLQlyZXR1cm4gMDsKLX0KLQotaW50IHBzYl92YWxpZGF0ZV9rZXJuZWxfYnVmZmVyKHN0cnVjdCBwc2JfY29udGV4dCAqY29udGV4dCwKLQkJCSAgICAgICBzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAotCQkJICAgICAgIHVpbnQzMl90IGZlbmNlX2NsYXNzLAotCQkJICAgICAgIHVpbnQ2NF90IHNldF9mbGFncywgdWludDY0X3QgY2xyX2ZsYWdzKQotewotCXN0cnVjdCBwc2JfdmFsaWRhdGVfYnVmZmVyICppdGVtOwotCXVpbnQzMl90IGN1cl9mZW5jZV90eXBlOwotCWludCByZXQ7Ci0KLQlpZiAodW5saWtlbHkoY29udGV4dC0+dXNlZF9idWZmZXJzID49IFBTQl9OVU1fVkFMSURBVEVfQlVGRkVSUykpIHsKLQkJRFJNX0VSUk9SKCJPdXQgb2YgZnJlZSB2YWxpZGF0aW9uIGJ1ZmZlciBlbnRyaWVzIGZvciAiCi0JCQkgICJrZXJuZWwgYnVmZmVyIHZhbGlkYXRpb24uXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JaXRlbSA9ICZjb250ZXh0LT5idWZmZXJzW2NvbnRleHQtPnVzZWRfYnVmZmVyc107Ci0JaXRlbS0+dXNlcl92YWxfYXJnID0gTlVMTDsKLQlpdGVtLT5iYXNlLnJlc2VydmVkID0gMDsKLQotCXJldCA9IHR0bV9ib19yZXNlcnZlKGJvLCAxLCAwLCAxLCBjb250ZXh0LT52YWxfc2VxKTsKLQlpZiAodW5saWtlbHkocmV0ICE9IDApKQotCSAgICAgICAgcmV0dXJuIHJldDsKLQotCXJldCA9IHBzYl9wbGFjZW1lbnRfZmVuY2VfdHlwZShibywgc2V0X2ZsYWdzLCBjbHJfZmxhZ3MsIGZlbmNlX2NsYXNzLAotCQkJCSAgICAgICAmY3VyX2ZlbmNlX3R5cGUpOwotCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKLQkJdHRtX2JvX3VucmVzZXJ2ZShibyk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JaXRlbS0+YmFzZS5ibyA9IHR0bV9ib19yZWZlcmVuY2UoYm8pOwotCWl0ZW0tPmJhc2UubmV3X3N5bmNfb2JqX2FyZyA9ICh2b2lkICopICh1bnNpZ25lZCBsb25nKSBjdXJfZmVuY2VfdHlwZTsKLQlpdGVtLT5iYXNlLnJlc2VydmVkID0gMTsKLQotCS8qIEludGVybmFsIGxvY2tpbmcgPz8/IEZJWE1FQUMgKi8KLQlsaXN0X2FkZF90YWlsKCZpdGVtLT5iYXNlLmhlYWQsICZjb250ZXh0LT5rZXJuX3ZhbGlkYXRlX2xpc3QpOwotCWNvbnRleHQtPnVzZWRfYnVmZmVycysrOwotCS8qCi0JcmV0ID0gdHRtX2JvX3ZhbGlkYXRlKGJvLCAxLCAwLCAwKTsKLQlpZiAodW5saWtlbHkocmV0ICE9IDApKQotCQlnb3RvIG91dF91bmxvY2s7Ci0JKi8KLQlpdGVtLT5vZmZzZXQgPSBiby0+b2Zmc2V0OwotCWl0ZW0tPmZsYWdzID0gYm8tPm1lbS5wbGFjZW1lbnQ7Ci0JY29udGV4dC0+ZmVuY2VfdHlwZXMgfD0gY3VyX2ZlbmNlX3R5cGU7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi12b2lkIHBzYl9mZW5jZV9vcl9zeW5jKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAotCQkgICAgICAgdWludDMyX3QgZW5naW5lLAotCQkgICAgICAgdWludDMyX3QgZmVuY2VfdHlwZXMsCi0JCSAgICAgICB1aW50MzJfdCBmZW5jZV9mbGFncywKLQkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCi0JCSAgICAgICBzdHJ1Y3QgcHNiX3R0bV9mZW5jZV9yZXAgKmZlbmNlX2FyZywKLQkJICAgICAgIHN0cnVjdCB0dG1fZmVuY2Vfb2JqZWN0ICoqZmVuY2VfcCkKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZmlsZV9wcml2LT5taW5vci0+ZGV2OwotCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gcHNiX3ByaXYoZGV2KTsKLQlzdHJ1Y3QgdHRtX2ZlbmNlX2RldmljZSAqZmRldiA9ICZkZXZfcHJpdi0+ZmRldjsKLQlpbnQgcmV0OwotCXN0cnVjdCB0dG1fZmVuY2Vfb2JqZWN0ICpmZW5jZTsKLQlzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSA9IHBzYl9mcHJpdihmaWxlX3ByaXYpLT50ZmlsZTsKLQl1aW50MzJfdCBoYW5kbGU7Ci0KLQlyZXQgPSB0dG1fZmVuY2VfdXNlcl9jcmVhdGUoZmRldiwgdGZpbGUsCi0JCQkJICAgIGVuZ2luZSwgZmVuY2VfdHlwZXMsCi0JCQkJICAgIFRUTV9GRU5DRV9GTEFHX0VNSVQsICZmZW5jZSwgJmhhbmRsZSk7Ci0JaWYgKHJldCkgewotCi0JCS8qCi0JCSAqIEZlbmNlIGNyZWF0aW9uIGZhaWxlZC4KLQkJICogRmFsbCBiYWNrIHRvIHN5bmNocm9ub3VzIG9wZXJhdGlvbiBhbmQgaWRsZSB0aGUgZW5naW5lLgotCQkgKi8KLQotCQlpZiAoIShmZW5jZV9mbGFncyAmIERSTV9QU0JfRkVOQ0VfTk9fVVNFUikpIHsKLQotCQkJLyoKLQkJCSAqIENvbW11bmljYXRlIHRvIHVzZXItc3BhY2UgdGhhdAotCQkJICogZmVuY2UgY3JlYXRpb24gaGFzIGZhaWxlZCBhbmQgdGhhdAotCQkJICogdGhlIGVuZ2luZSBpcyBpZGxlLgotCQkJICovCi0KLQkJCWZlbmNlX2FyZy0+aGFuZGxlID0gfjA7Ci0JCQlmZW5jZV9hcmctPmVycm9yID0gcmV0OwotCQl9Ci0KLQkJdHRtX2V1X2JhY2tvZmZfcmVzZXJ2YXRpb24obGlzdCk7Ci0JCWlmIChmZW5jZV9wKQotCQkJKmZlbmNlX3AgPSBOVUxMOwotCQlyZXR1cm47Ci0JfQotCi0JdHRtX2V1X2ZlbmNlX2J1ZmZlcl9vYmplY3RzKGxpc3QsIGZlbmNlKTsKLQlpZiAoIShmZW5jZV9mbGFncyAmIERSTV9QU0JfRkVOQ0VfTk9fVVNFUikpIHsKLQkJc3RydWN0IHR0bV9mZW5jZV9pbmZvIGluZm8gPSB0dG1fZmVuY2VfZ2V0X2luZm8oZmVuY2UpOwotCQlmZW5jZV9hcmctPmhhbmRsZSA9IGhhbmRsZTsKLQkJZmVuY2VfYXJnLT5mZW5jZV9jbGFzcyA9IHR0bV9mZW5jZV9jbGFzcyhmZW5jZSk7Ci0JCWZlbmNlX2FyZy0+ZmVuY2VfdHlwZSA9IHR0bV9mZW5jZV90eXBlcyhmZW5jZSk7Ci0JCWZlbmNlX2FyZy0+c2lnbmFsZWRfdHlwZXMgPSBpbmZvLnNpZ25hbGVkX3R5cGVzOwotCQlmZW5jZV9hcmctPmVycm9yID0gMDsKLQl9IGVsc2UgewotCQlyZXQgPQotCQkgICAgdHRtX3JlZl9vYmplY3RfYmFzZV91bnJlZih0ZmlsZSwgaGFuZGxlLAotCQkJCQkgICAgICB0dG1fZmVuY2VfdHlwZSk7Ci0JCUJVR19PTihyZXQpOwotCX0KLQotCWlmIChmZW5jZV9wKQotCQkqZmVuY2VfcCA9IGZlbmNlOwotCWVsc2UgaWYgKGZlbmNlKQotCQl0dG1fZmVuY2Vfb2JqZWN0X3VucmVmKCZmZW5jZSk7Ci19Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX3NneC5oIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2Jfc2d4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzMDBlMmQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2Jfc2d4LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA4LCBJbnRlbCBDb3Jwb3JhdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAotICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi0gKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0gKgotICogQXV0aG9yczoKLSAqICAgIEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+Ci0gKgotICoqLwotI2lmbmRlZiBfUFNCX1NHWF9IXwotI2RlZmluZSBfUFNCX1NHWF9IXwotCi1leHRlcm4gaW50IHBzYl9zdWJtaXRfdmlkZW9fY21kYnVmKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkgICAgICAgc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpjbWRfYnVmZmVyLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgY21kX29mZnNldCwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGNtZF9zaXplLAotCQkJICAgICAgIHN0cnVjdCB0dG1fZmVuY2Vfb2JqZWN0ICpmZW5jZSk7Ci0KLWV4dGVybiBpbnQgZHJtX2lkbGVfY2hlY2tfaW50ZXJ2YWw7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfdHRtX2ZlbmNlLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl90dG1fZmVuY2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFjMzU5MC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl90dG1fZmVuY2UuYworKysgL2Rldi9udWxsCkBAIC0xLDYwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCBUdW5nc3RlbiBHcmFwaGljcywgSW5jLiwgQ2VkYXIgUGFyaywgVFguLCBVU0EKLSAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgVk13YXJlLCBJbmMuLCBQYWxvIEFsdG8sIENBLiwgVVNBCi0gKiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAotICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi0gKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIEF1dGhvcnM6IFRob21hcyBIZWxsc3Ryb20gPHRob21hcy1hdC10dW5nc3RlbmdyYXBoaWNzLWRvdC1jb20+Ci0gKi8KLQotI2luY2x1ZGUgInBzYl90dG1fZmVuY2VfYXBpLmgiCi0jaW5jbHVkZSAicHNiX3R0bV9mZW5jZV9kcml2ZXIuaCIKLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLQotI2luY2x1ZGUgPGRybS9kcm1QLmg+Ci0KLS8qCi0gKiBTaW1wbGUgaW1wbGVtZW50YXRpb24gZm9yIG5vdy4KLSAqLwotCi1zdGF0aWMgdm9pZCB0dG1fZmVuY2VfbG9ja3VwKHN0cnVjdCB0dG1fZmVuY2Vfb2JqZWN0ICpmZW5jZSwgdWludDMyX3QgbWFzaykKLXsKLQlzdHJ1Y3QgdHRtX2ZlbmNlX2NsYXNzX21hbmFnZXIgKmZjID0gdHRtX2ZlbmNlX2ZjKGZlbmNlKTsKLQotCXByaW50ayhLRVJOX0VSUiAiR1BVIGxvY2t1cCBkZWN0ZWN0ZWQgb24gZW5naW5lICV1ICIKLQkgICAgICAgImZlbmNlIHR5cGUgMHglMDh4XG4iLAotCSAgICAgICAodW5zaWduZWQgaW50KWZlbmNlLT5mZW5jZV9jbGFzcywgKHVuc2lnbmVkIGludCltYXNrKTsKLQkvKgotCSAqIEdpdmUgZW5naW5lcyBzb21lIHRpbWUgdG8gaWRsZT8KLQkgKi8KLQotCXdyaXRlX2xvY2soJmZjLT5sb2NrKTsKLQl0dG1fZmVuY2VfaGFuZGxlcihmZW5jZS0+ZmRldiwgZmVuY2UtPmZlbmNlX2NsYXNzLAotCQkJICBmZW5jZS0+c2VxdWVuY2UsIG1hc2ssIC1FQlVTWSk7Ci0Jd3JpdGVfdW5sb2NrKCZmYy0+bG9jayk7Ci19Ci0KLS8qCi0gKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYnkgZmVuY2U6OndhaXQgbWV0aG9kcyB0aGF0Ci0gKiBuZWVkIHBvbGxpbmcuCi0gKi8KLQotaW50IHR0bV9mZW5jZV93YWl0X3BvbGxpbmcoc3RydWN0IHR0bV9mZW5jZV9vYmplY3QgKmZlbmNlLCBib29sIGxhenksCi0JCQkgICBib29sIGludGVycnVwdGlibGUsIHVpbnQzMl90IG1hc2spCi17Ci0Jc3RydWN0IHR0bV9mZW5jZV9jbGFzc19tYW5hZ2VyICpmYyA9IHR0bV9mZW5jZV9mYyhmZW5jZSk7Ci0JY29uc3Qgc3RydWN0IHR0bV9mZW5jZV9kcml2ZXIgKmRyaXZlciA9IHR0bV9mZW5jZV9kcml2ZXIoZmVuY2UpOwotCXVpbnQzMl90IGNvdW50ID0gMDsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGxvbmcgZW5kX2ppZmZpZXMgPSBmZW5jZS0+dGltZW91dF9qaWZmaWVzOwotCi0JREVDTEFSRV9XQUlUUVVFVUUoZW50cnksIGN1cnJlbnQpOwotCWFkZF93YWl0X3F1ZXVlKCZmYy0+ZmVuY2VfcXVldWUsICZlbnRyeSk7Ci0KLQlyZXQgPSAwOwotCi0JZm9yICg7OykgewotCQlfX3NldF9jdXJyZW50X3N0YXRlKChpbnRlcnJ1cHRpYmxlKSA/Ci0JCQkJICAgIFRBU0tfSU5URVJSVVBUSUJMRSA6IFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJaWYgKHR0bV9mZW5jZV9vYmplY3Rfc2lnbmFsZWQoZmVuY2UsIG1hc2spKQotCQkJYnJlYWs7Ci0JCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIGVuZF9qaWZmaWVzKSkgewotCQkJaWYgKGRyaXZlci0+bG9ja3VwKQotCQkJCWRyaXZlci0+bG9ja3VwKGZlbmNlLCBtYXNrKTsKLQkJCWVsc2UKLQkJCQl0dG1fZmVuY2VfbG9ja3VwKGZlbmNlLCBtYXNrKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChsYXp5KQotCQkJc2NoZWR1bGVfdGltZW91dCgxKTsKLQkJZWxzZSBpZiAoKCsrY291bnQgJiAweDBGKSA9PSAwKSB7Ci0JCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JCQlzY2hlZHVsZSgpOwotCQkJX19zZXRfY3VycmVudF9zdGF0ZSgoaW50ZXJydXB0aWJsZSkgPwotCQkJCQkgICAgVEFTS19JTlRFUlJVUFRJQkxFIDoKLQkJCQkJICAgIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJfQotCQlpZiAoaW50ZXJydXB0aWJsZSAmJiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJcmV0ID0gLUVSRVNUQVJUOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCXJlbW92ZV93YWl0X3F1ZXVlKCZmYy0+ZmVuY2VfcXVldWUsICZlbnRyeSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIFR5cGljYWxseSBjYWxsZWQgYnkgdGhlIElSUSBoYW5kbGVyLgotICovCi0KLXZvaWQgdHRtX2ZlbmNlX2hhbmRsZXIoc3RydWN0IHR0bV9mZW5jZV9kZXZpY2UgKmZkZXYsIHVpbnQzMl90IGZlbmNlX2NsYXNzLAotCQkgICAgICAgdWludDMyX3Qgc2VxdWVuY2UsIHVpbnQzMl90IHR5cGUsIHVpbnQzMl90IGVycm9yKQotewotCWludCB3YWtlID0gMDsKLQl1aW50MzJfdCBkaWZmOwotCXVpbnQzMl90IHJlbGV2YW50X3R5cGU7Ci0JdWludDMyX3QgbmV3X3R5cGU7Ci0Jc3RydWN0IHR0bV9mZW5jZV9jbGFzc19tYW5hZ2VyICpmYyA9ICZmZGV2LT5mZW5jZV9jbGFzc1tmZW5jZV9jbGFzc107Ci0JY29uc3Qgc3RydWN0IHR0bV9mZW5jZV9kcml2ZXIgKmRyaXZlciA9IHR0bV9mZW5jZV9kcml2ZXJfZnJvbV9kZXYoZmRldik7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKLQlzdHJ1Y3QgdHRtX2ZlbmNlX29iamVjdCAqZmVuY2UsICpuZXh0OwotCWJvb2wgZm91bmQgPSBmYWxzZTsKLQotCWlmIChsaXN0X2VtcHR5KCZmYy0+cmluZykpCi0JCXJldHVybjsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoZmVuY2UsICZmYy0+cmluZywgcmluZykgewotCQlkaWZmID0gKHNlcXVlbmNlIC0gZmVuY2UtPnNlcXVlbmNlKSAmIGZjLT5zZXF1ZW5jZV9tYXNrOwotCQlpZiAoZGlmZiA+IGZjLT53cmFwX2RpZmYpIHsKLQkJCWZvdW5kID0gdHJ1ZTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JZmMtPndhaXRpbmdfdHlwZXMgJj0gfnR5cGU7Ci0JaGVhZCA9IChmb3VuZCkgPyAmZmVuY2UtPnJpbmcgOiAmZmMtPnJpbmc7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShmZW5jZSwgbmV4dCwgaGVhZCwgcmluZykgewotCQlpZiAoJmZlbmNlLT5yaW5nID09ICZmYy0+cmluZykKLQkJCWJyZWFrOwotCi0JCURSTV9ERUJVRygiRmVuY2UgMHglMDhseCwgc2VxdWVuY2UgMHglMDh4LCB0eXBlIDB4JTA4eFxuIiwKLQkJCSAgKHVuc2lnbmVkIGxvbmcpZmVuY2UsIGZlbmNlLT5zZXF1ZW5jZSwKLQkJCSAgZmVuY2UtPmZlbmNlX3R5cGUpOwotCi0JCWlmIChlcnJvcikgewotCQkJZmVuY2UtPmluZm8uZXJyb3IgPSBlcnJvcjsKLQkJCWZlbmNlLT5pbmZvLnNpZ25hbGVkX3R5cGVzID0gZmVuY2UtPmZlbmNlX3R5cGU7Ci0JCQlsaXN0X2RlbF9pbml0KCZmZW5jZS0+cmluZyk7Ci0JCQl3YWtlID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJcmVsZXZhbnRfdHlwZSA9IHR5cGUgJiBmZW5jZS0+ZmVuY2VfdHlwZTsKLQkJbmV3X3R5cGUgPSAoZmVuY2UtPmluZm8uc2lnbmFsZWRfdHlwZXMgfCByZWxldmFudF90eXBlKSBeCi0JCSAgICBmZW5jZS0+aW5mby5zaWduYWxlZF90eXBlczsKLQotCQlpZiAobmV3X3R5cGUpIHsKLQkJCWZlbmNlLT5pbmZvLnNpZ25hbGVkX3R5cGVzIHw9IG5ld190eXBlOwotCQkJRFJNX0RFQlVHKCJGZW5jZSAweCUwOGx4IHNpZ25hbGVkIDB4JTA4eFxuIiwKLQkJCQkgICh1bnNpZ25lZCBsb25nKWZlbmNlLAotCQkJCSAgZmVuY2UtPmluZm8uc2lnbmFsZWRfdHlwZXMpOwotCi0JCQlpZiAodW5saWtlbHkoZHJpdmVyLT5zaWduYWxlZCkpCi0JCQkJZHJpdmVyLT5zaWduYWxlZChmZW5jZSk7Ci0KLQkJCWlmIChkcml2ZXItPm5lZWRlZF9mbHVzaCkKLQkJCQlmYy0+cGVuZGluZ19mbHVzaCB8PQotCQkJCSAgICBkcml2ZXItPm5lZWRlZF9mbHVzaChmZW5jZSk7Ci0KLQkJCWlmIChuZXdfdHlwZSAmIGZlbmNlLT53YWl0aW5nX3R5cGVzKQotCQkJCXdha2UgPSAxOwotCQl9Ci0KLQkJZmMtPndhaXRpbmdfdHlwZXMgfD0KLQkJICAgIGZlbmNlLT53YWl0aW5nX3R5cGVzICYgfmZlbmNlLT5pbmZvLnNpZ25hbGVkX3R5cGVzOwotCi0JCWlmICghKGZlbmNlLT5mZW5jZV90eXBlICYgfmZlbmNlLT5pbmZvLnNpZ25hbGVkX3R5cGVzKSkgewotCQkJRFJNX0RFQlVHKCJGZW5jZSBjb21wbGV0ZWx5IHNpZ25hbGVkIDB4JTA4bHhcbiIsCi0JCQkJICAodW5zaWduZWQgbG9uZylmZW5jZSk7Ci0JCQlsaXN0X2RlbF9pbml0KCZmZW5jZS0+cmluZyk7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIFJlaW5zdGF0ZSBsb3N0IHdhaXRpbmcgdHlwZXMuCi0JICovCi0KLQlpZiAoKGZjLT53YWl0aW5nX3R5cGVzICYgdHlwZSkgIT0gdHlwZSkgewotCQloZWFkID0gaGVhZC0+cHJldjsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShmZW5jZSwgaGVhZCwgcmluZykgewotCQkJaWYgKCZmZW5jZS0+cmluZyA9PSAmZmMtPnJpbmcpCi0JCQkJYnJlYWs7Ci0JCQlkaWZmID0KLQkJCSAgICAoZmMtPmhpZ2hlc3Rfd2FpdGluZ19zZXF1ZW5jZSAtCi0JCQkgICAgIGZlbmNlLT5zZXF1ZW5jZSkgJiBmYy0+c2VxdWVuY2VfbWFzazsKLQkJCWlmIChkaWZmID4gZmMtPndyYXBfZGlmZikKLQkJCQlicmVhazsKLQotCQkJZmMtPndhaXRpbmdfdHlwZXMgfD0KLQkJCSAgICBmZW5jZS0+d2FpdGluZ190eXBlcyAmIH5mZW5jZS0+aW5mby5zaWduYWxlZF90eXBlczsKLQkJfQotCX0KLQotCWlmICh3YWtlKQotCQl3YWtlX3VwX2FsbCgmZmMtPmZlbmNlX3F1ZXVlKTsKLX0KLQotc3RhdGljIHZvaWQgdHRtX2ZlbmNlX3VucmluZyhzdHJ1Y3QgdHRtX2ZlbmNlX29iamVjdCAqZmVuY2UpCi17Ci0Jc3RydWN0IHR0bV9mZW5jZV9jbGFzc19tYW5hZ2VyICpmYyA9IHR0bV9mZW5jZV9mYyhmZW5jZSk7Ci0JdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7Ci0KLQl3cml0ZV9sb2NrX2lycXNhdmUoJmZjLT5sb2NrLCBpcnFfZmxhZ3MpOwotCWxpc3RfZGVsX2luaXQoJmZlbmNlLT5yaW5nKTsKLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZmMtPmxvY2ssIGlycV9mbGFncyk7Ci19Ci0KLWJvb2wgdHRtX2ZlbmNlX29iamVjdF9zaWduYWxlZChzdHJ1Y3QgdHRtX2ZlbmNlX29iamVjdCAqZmVuY2UsIHVpbnQzMl90IG1hc2spCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlib29sIHNpZ25hbGVkOwotCWNvbnN0IHN0cnVjdCB0dG1fZmVuY2VfZHJpdmVyICpkcml2ZXIgPSB0dG1fZmVuY2VfZHJpdmVyKGZlbmNlKTsKLQlzdHJ1Y3QgdHRtX2ZlbmNlX2NsYXNzX21hbmFnZXIgKmZjID0gdHRtX2ZlbmNlX2ZjKGZlbmNlKTsKLQotCW1hc2sgJj0gZmVuY2UtPmZlbmNlX3R5cGU7Ci0JcmVhZF9sb2NrX2lycXNhdmUoJmZjLT5sb2NrLCBmbGFncyk7Ci0Jc2lnbmFsZWQgPSAobWFzayAmIGZlbmNlLT5pbmZvLnNpZ25hbGVkX3R5cGVzKSA9PSBtYXNrOwotCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJmZjLT5sb2NrLCBmbGFncyk7Ci0JaWYgKCFzaWduYWxlZCAmJiBkcml2ZXItPnBvbGwpIHsKLQkJd3JpdGVfbG9ja19pcnFzYXZlKCZmYy0+bG9jaywgZmxhZ3MpOwotCQlkcml2ZXItPnBvbGwoZmVuY2UtPmZkZXYsIGZlbmNlLT5mZW5jZV9jbGFzcywgbWFzayk7Ci0JCXNpZ25hbGVkID0gKG1hc2sgJiBmZW5jZS0+aW5mby5zaWduYWxlZF90eXBlcykgPT0gbWFzazsKLQkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmZjLT5sb2NrLCBmbGFncyk7Ci0JfQotCXJldHVybiBzaWduYWxlZDsKLX0KLQotaW50IHR0bV9mZW5jZV9vYmplY3RfZmx1c2goc3RydWN0IHR0bV9mZW5jZV9vYmplY3QgKmZlbmNlLCB1aW50MzJfdCB0eXBlKQotewotCWNvbnN0IHN0cnVjdCB0dG1fZmVuY2VfZHJpdmVyICpkcml2ZXIgPSB0dG1fZmVuY2VfZHJpdmVyKGZlbmNlKTsKLQlzdHJ1Y3QgdHRtX2ZlbmNlX2NsYXNzX21hbmFnZXIgKmZjID0gdHRtX2ZlbmNlX2ZjKGZlbmNlKTsKLQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKLQl1aW50MzJfdCBzYXZlZF9wZW5kaW5nX2ZsdXNoOwotCXVpbnQzMl90IGRpZmY7Ci0JYm9vbCBjYWxsX2ZsdXNoOwotCi0JaWYgKHR5cGUgJiB+ZmVuY2UtPmZlbmNlX3R5cGUpIHsKLQkJRFJNX0VSUk9SKCJGbHVzaCB0cnlpbmcgdG8gZXh0ZW5kIGZlbmNlIHR5cGUsICIKLQkJCSAgIjB4JXgsIDB4JXhcbiIsIHR5cGUsIGZlbmNlLT5mZW5jZV90eXBlKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZmYy0+bG9jaywgaXJxX2ZsYWdzKTsKLQlmZW5jZS0+d2FpdGluZ190eXBlcyB8PSB0eXBlOwotCWZjLT53YWl0aW5nX3R5cGVzIHw9IGZlbmNlLT53YWl0aW5nX3R5cGVzOwotCWRpZmYgPSAoZmVuY2UtPnNlcXVlbmNlIC0gZmMtPmhpZ2hlc3Rfd2FpdGluZ19zZXF1ZW5jZSkgJgotCSAgICBmYy0+c2VxdWVuY2VfbWFzazsKLQotCWlmIChkaWZmIDwgZmMtPndyYXBfZGlmZikKLQkJZmMtPmhpZ2hlc3Rfd2FpdGluZ19zZXF1ZW5jZSA9IGZlbmNlLT5zZXF1ZW5jZTsKLQotCS8qCi0JICogZmVuY2UtPndhaXRpbmdfdHlwZXMgaGFzIGNoYW5nZWQuIERldGVybWluZSB3aGV0aGVyCi0JICogd2UgbmVlZCB0byBpbml0aWF0ZSBzb21lIGtpbmQgb2YgZmx1c2ggYXMgYSByZXN1bHQgb2YgdGhpcy4KLQkgKi8KLQotCXNhdmVkX3BlbmRpbmdfZmx1c2ggPSBmYy0+cGVuZGluZ19mbHVzaDsKLQlpZiAoZHJpdmVyLT5uZWVkZWRfZmx1c2gpCi0JCWZjLT5wZW5kaW5nX2ZsdXNoIHw9IGRyaXZlci0+bmVlZGVkX2ZsdXNoKGZlbmNlKTsKLQotCWlmIChkcml2ZXItPnBvbGwpCi0JCWRyaXZlci0+cG9sbChmZW5jZS0+ZmRldiwgZmVuY2UtPmZlbmNlX2NsYXNzLAotCQkJICAgICBmZW5jZS0+d2FpdGluZ190eXBlcyk7Ci0KLQljYWxsX2ZsdXNoID0gKGZjLT5wZW5kaW5nX2ZsdXNoICE9IDApOwotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZmYy0+bG9jaywgaXJxX2ZsYWdzKTsKLQotCWlmIChjYWxsX2ZsdXNoICYmIGRyaXZlci0+Zmx1c2gpCi0JCWRyaXZlci0+Zmx1c2goZmVuY2UtPmZkZXYsIGZlbmNlLT5mZW5jZV9jbGFzcyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIE1ha2Ugc3VyZSBvbGQgZmVuY2Ugb2JqZWN0cyBhcmUgc2lnbmFsZWQgYmVmb3JlIHRoZWlyIGZlbmNlIHNlcXVlbmNlcyBhcmUKLSAqIHdyYXBwZWQgYXJvdW5kIGFuZCByZXVzZWQuCi0gKi8KLQotdm9pZCB0dG1fZmVuY2VfZmx1c2hfb2xkKHN0cnVjdCB0dG1fZmVuY2VfZGV2aWNlICpmZGV2LAotCQkJIHVpbnQzMl90IGZlbmNlX2NsYXNzLCB1aW50MzJfdCBzZXF1ZW5jZSkKLXsKLQlzdHJ1Y3QgdHRtX2ZlbmNlX2NsYXNzX21hbmFnZXIgKmZjID0gJmZkZXYtPmZlbmNlX2NsYXNzW2ZlbmNlX2NsYXNzXTsKLQlzdHJ1Y3QgdHRtX2ZlbmNlX29iamVjdCAqZmVuY2U7Ci0JdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7Ci0JY29uc3Qgc3RydWN0IHR0bV9mZW5jZV9kcml2ZXIgKmRyaXZlciA9IGZkZXYtPmRyaXZlcjsKLQlib29sIGNhbGxfZmx1c2g7Ci0KLQl1aW50MzJfdCBkaWZmOwotCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZmYy0+bG9jaywgaXJxX2ZsYWdzKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShmZW5jZSwgJmZjLT5yaW5nLCByaW5nKSB7Ci0JCWRpZmYgPSAoc2VxdWVuY2UgLSBmZW5jZS0+c2VxdWVuY2UpICYgZmMtPnNlcXVlbmNlX21hc2s7Ci0JCWlmIChkaWZmIDw9IGZjLT5mbHVzaF9kaWZmKQotCQkJYnJlYWs7Ci0KLQkJZmVuY2UtPndhaXRpbmdfdHlwZXMgPSBmZW5jZS0+ZmVuY2VfdHlwZTsKLQkJZmMtPndhaXRpbmdfdHlwZXMgfD0gZmVuY2UtPmZlbmNlX3R5cGU7Ci0KLQkJaWYgKGRyaXZlci0+bmVlZGVkX2ZsdXNoKQotCQkJZmMtPnBlbmRpbmdfZmx1c2ggfD0gZHJpdmVyLT5uZWVkZWRfZmx1c2goZmVuY2UpOwotCX0KLQotCWlmIChkcml2ZXItPnBvbGwpCi0JCWRyaXZlci0+cG9sbChmZGV2LCBmZW5jZV9jbGFzcywgZmMtPndhaXRpbmdfdHlwZXMpOwotCi0JY2FsbF9mbHVzaCA9IChmYy0+cGVuZGluZ19mbHVzaCAhPSAwKTsKLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZmMtPmxvY2ssIGlycV9mbGFncyk7Ci0KLQlpZiAoY2FsbF9mbHVzaCAmJiBkcml2ZXItPmZsdXNoKQotCQlkcml2ZXItPmZsdXNoKGZkZXYsIGZlbmNlLT5mZW5jZV9jbGFzcyk7Ci0KLQkvKgotCSAqIEZJWE1FOiBTaG9sZCB3ZSBpbXBsZW1lbnQgYSB3YWl0IGhlcmUgZm9yIHJlYWxseSBvbGQgZmVuY2VzPwotCSAqLwotCi19Ci0KLWludCB0dG1fZmVuY2Vfb2JqZWN0X3dhaXQoc3RydWN0IHR0bV9mZW5jZV9vYmplY3QgKmZlbmNlLAotCQkJICBib29sIGxhenksIGJvb2wgaW50ZXJydXB0aWJsZSwgdWludDMyX3QgbWFzaykKLXsKLQljb25zdCBzdHJ1Y3QgdHRtX2ZlbmNlX2RyaXZlciAqZHJpdmVyID0gdHRtX2ZlbmNlX2RyaXZlcihmZW5jZSk7Ci0Jc3RydWN0IHR0bV9mZW5jZV9jbGFzc19tYW5hZ2VyICpmYyA9IHR0bV9mZW5jZV9mYyhmZW5jZSk7Ci0JaW50IHJldCA9IDA7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0OwotCXVuc2lnbmVkIGxvbmcgY3VyX2ppZmZpZXM7Ci0JdW5zaWduZWQgbG9uZyB0b19qaWZmaWVzOwotCi0JaWYgKG1hc2sgJiB+ZmVuY2UtPmZlbmNlX3R5cGUpIHsKLQkJRFJNX0VSUk9SKCJXYWl0IHRyeWluZyB0byBleHRlbmQgZmVuY2UgdHlwZSIKLQkJCSAgIiAweCUwOHggMHglMDh4XG4iLCBtYXNrLCBmZW5jZS0+ZmVuY2VfdHlwZSk7Ci0JCUJVRygpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoZHJpdmVyLT53YWl0KQotCQlyZXR1cm4gZHJpdmVyLT53YWl0KGZlbmNlLCBsYXp5LCBpbnRlcnJ1cHRpYmxlLCBtYXNrKTsKLQotCXR0bV9mZW5jZV9vYmplY3RfZmx1c2goZmVuY2UsIG1hc2spOwotcmV0cnk6Ci0JaWYgKCFkcml2ZXItPmhhc19pcnEgfHwKLQkgICAgZHJpdmVyLT5oYXNfaXJxKGZlbmNlLT5mZGV2LCBmZW5jZS0+ZmVuY2VfY2xhc3MsIG1hc2spKSB7Ci0KLQkJY3VyX2ppZmZpZXMgPSBqaWZmaWVzOwotCQl0b19qaWZmaWVzID0gZmVuY2UtPnRpbWVvdXRfamlmZmllczsKLQotCQl0aW1lb3V0ID0gKHRpbWVfYWZ0ZXIodG9famlmZmllcywgY3VyX2ppZmZpZXMpKSA/Ci0JCSAgICB0b19qaWZmaWVzIC0gY3VyX2ppZmZpZXMgOiAxOwotCi0JCWlmIChpbnRlcnJ1cHRpYmxlKQotCQkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQKLQkJCSAgICAoZmMtPmZlbmNlX3F1ZXVlLAotCQkJICAgICB0dG1fZmVuY2Vfb2JqZWN0X3NpZ25hbGVkKGZlbmNlLCBtYXNrKSwgdGltZW91dCk7Ci0JCWVsc2UKLQkJCXJldCA9IHdhaXRfZXZlbnRfdGltZW91dAotCQkJICAgIChmYy0+ZmVuY2VfcXVldWUsCi0JCQkgICAgIHR0bV9mZW5jZV9vYmplY3Rfc2lnbmFsZWQoZmVuY2UsIG1hc2spLCB0aW1lb3V0KTsKLQotCQlpZiAodW5saWtlbHkocmV0ID09IC1FUkVTVEFSVFNZUykpCi0JCQlyZXR1cm4gLUVSRVNUQVJUOwotCi0JCWlmICh1bmxpa2VseShyZXQgPT0gMCkpIHsKLQkJCWlmIChkcml2ZXItPmxvY2t1cCkKLQkJCQlkcml2ZXItPmxvY2t1cChmZW5jZSwgbWFzayk7Ci0JCQllbHNlCi0JCQkJdHRtX2ZlbmNlX2xvY2t1cChmZW5jZSwgbWFzayk7Ci0JCQlnb3RvIHJldHJ5OwotCQl9Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIHR0bV9mZW5jZV93YWl0X3BvbGxpbmcoZmVuY2UsIGxhenksIGludGVycnVwdGlibGUsIG1hc2spOwotfQotCi1pbnQgdHRtX2ZlbmNlX29iamVjdF9lbWl0KHN0cnVjdCB0dG1fZmVuY2Vfb2JqZWN0ICpmZW5jZSwgdWludDMyX3QgZmVuY2VfZmxhZ3MsCi0JCQkgIHVpbnQzMl90IGZlbmNlX2NsYXNzLCB1aW50MzJfdCB0eXBlKQotewotCWNvbnN0IHN0cnVjdCB0dG1fZmVuY2VfZHJpdmVyICpkcml2ZXIgPSB0dG1fZmVuY2VfZHJpdmVyKGZlbmNlKTsKLQlzdHJ1Y3QgdHRtX2ZlbmNlX2NsYXNzX21hbmFnZXIgKmZjID0gdHRtX2ZlbmNlX2ZjKGZlbmNlKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVpbnQzMl90IHNlcXVlbmNlOwotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKLQlpbnQgcmV0OwotCi0JdHRtX2ZlbmNlX3VucmluZyhmZW5jZSk7Ci0JcmV0ID0gZHJpdmVyLT5lbWl0KGZlbmNlLT5mZGV2LAotCQkJICAgZmVuY2VfY2xhc3MsIGZlbmNlX2ZsYWdzLCAmc2VxdWVuY2UsICZ0aW1lb3V0KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZmYy0+bG9jaywgZmxhZ3MpOwotCWZlbmNlLT5mZW5jZV9jbGFzcyA9IGZlbmNlX2NsYXNzOwotCWZlbmNlLT5mZW5jZV90eXBlID0gdHlwZTsKLQlmZW5jZS0+d2FpdGluZ190eXBlcyA9IDA7Ci0JZmVuY2UtPmluZm8uc2lnbmFsZWRfdHlwZXMgPSAwOwotCWZlbmNlLT5pbmZvLmVycm9yID0gMDsKLQlmZW5jZS0+c2VxdWVuY2UgPSBzZXF1ZW5jZTsKLQlmZW5jZS0+dGltZW91dF9qaWZmaWVzID0gdGltZW91dDsKLQlpZiAobGlzdF9lbXB0eSgmZmMtPnJpbmcpKQotCQlmYy0+aGlnaGVzdF93YWl0aW5nX3NlcXVlbmNlID0gc2VxdWVuY2UgLSAxOwotCWxpc3RfYWRkX3RhaWwoJmZlbmNlLT5yaW5nLCAmZmMtPnJpbmcpOwotCWZjLT5sYXRlc3RfcXVldWVkX3NlcXVlbmNlID0gc2VxdWVuY2U7Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmZjLT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCB0dG1fZmVuY2Vfb2JqZWN0X2luaXQoc3RydWN0IHR0bV9mZW5jZV9kZXZpY2UgKmZkZXYsCi0JCQkgIHVpbnQzMl90IGZlbmNlX2NsYXNzLAotCQkJICB1aW50MzJfdCB0eXBlLAotCQkJICB1aW50MzJfdCBjcmVhdGVfZmxhZ3MsCi0JCQkgIHZvaWQgKCpkZXN0cm95KSAoc3RydWN0IHR0bV9mZW5jZV9vYmplY3QgKiksCi0JCQkgIHN0cnVjdCB0dG1fZmVuY2Vfb2JqZWN0ICpmZW5jZSkKLXsKLQlpbnQgcmV0ID0gMDsKLQotCWtyZWZfaW5pdCgmZmVuY2UtPmtyZWYpOwotCWZlbmNlLT5mZW5jZV9jbGFzcyA9IGZlbmNlX2NsYXNzOwotCWZlbmNlLT5mZW5jZV90eXBlID0gdHlwZTsKLQlmZW5jZS0+aW5mby5zaWduYWxlZF90eXBlcyA9IDA7Ci0JZmVuY2UtPndhaXRpbmdfdHlwZXMgPSAwOwotCWZlbmNlLT5zZXF1ZW5jZSA9IDA7Ci0JZmVuY2UtPmluZm8uZXJyb3IgPSAwOwotCWZlbmNlLT5mZGV2ID0gZmRldjsKLQlmZW5jZS0+ZGVzdHJveSA9IGRlc3Ryb3k7Ci0JSU5JVF9MSVNUX0hFQUQoJmZlbmNlLT5yaW5nKTsKLQlhdG9taWNfaW5jKCZmZGV2LT5jb3VudCk7Ci0KLQlpZiAoY3JlYXRlX2ZsYWdzICYgVFRNX0ZFTkNFX0ZMQUdfRU1JVCkgewotCQlyZXQgPSB0dG1fZmVuY2Vfb2JqZWN0X2VtaXQoZmVuY2UsIGNyZWF0ZV9mbGFncywKLQkJCQkJICAgIGZlbmNlLT5mZW5jZV9jbGFzcywgdHlwZSk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotaW50IHR0bV9mZW5jZV9vYmplY3RfY3JlYXRlKHN0cnVjdCB0dG1fZmVuY2VfZGV2aWNlICpmZGV2LAotCQkJICAgIHVpbnQzMl90IGZlbmNlX2NsYXNzLAotCQkJICAgIHVpbnQzMl90IHR5cGUsCi0JCQkgICAgdWludDMyX3QgY3JlYXRlX2ZsYWdzLAotCQkJICAgIHN0cnVjdCB0dG1fZmVuY2Vfb2JqZWN0ICoqY19mZW5jZSkKLXsKLQlzdHJ1Y3QgdHRtX2ZlbmNlX29iamVjdCAqZmVuY2U7Ci0JaW50IHJldDsKLQotCXJldCA9IHR0bV9tZW1fZ2xvYmFsX2FsbG9jKGZkZXYtPm1lbV9nbG9iLAotCQkJCSAgIHNpemVvZigqZmVuY2UpLAotCQkJCSAgIGZhbHNlLAotCQkJCSAgIGZhbHNlKTsKLQlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiT3V0IG9mIG1lbW9yeSBjcmVhdGluZyBmZW5jZSBvYmplY3RcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCWZlbmNlID0ga21hbGxvYyhzaXplb2YoKmZlbmNlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFmZW5jZSkgewotCQlwcmludGsoS0VSTl9FUlIgIk91dCBvZiBtZW1vcnkgY3JlYXRpbmcgZmVuY2Ugb2JqZWN0XG4iKTsKLQkJdHRtX21lbV9nbG9iYWxfZnJlZShmZGV2LT5tZW1fZ2xvYiwgc2l6ZW9mKCpmZW5jZSkpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlyZXQgPSB0dG1fZmVuY2Vfb2JqZWN0X2luaXQoZmRldiwgZmVuY2VfY2xhc3MsIHR5cGUsCi0JCQkJICAgIGNyZWF0ZV9mbGFncywgTlVMTCwgZmVuY2UpOwotCWlmIChyZXQpIHsKLQkJdHRtX2ZlbmNlX29iamVjdF91bnJlZigmZmVuY2UpOwotCQlyZXR1cm4gcmV0OwotCX0KLQkqY19mZW5jZSA9IGZlbmNlOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHR0bV9mZW5jZV9vYmplY3RfZGVzdHJveShzdHJ1Y3Qga3JlZiAqa3JlZikKLXsKLQlzdHJ1Y3QgdHRtX2ZlbmNlX29iamVjdCAqZmVuY2UgPQotCSAgICBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHR0bV9mZW5jZV9vYmplY3QsIGtyZWYpOwotCXN0cnVjdCB0dG1fZmVuY2VfY2xhc3NfbWFuYWdlciAqZmMgPSB0dG1fZmVuY2VfZmMoZmVuY2UpOwotCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwotCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZmYy0+bG9jaywgaXJxX2ZsYWdzKTsKLQlsaXN0X2RlbF9pbml0KCZmZW5jZS0+cmluZyk7Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmZjLT5sb2NrLCBpcnFfZmxhZ3MpOwotCi0JYXRvbWljX2RlYygmZmVuY2UtPmZkZXYtPmNvdW50KTsKLQlpZiAoZmVuY2UtPmRlc3Ryb3kpCi0JCWZlbmNlLT5kZXN0cm95KGZlbmNlKTsKLQllbHNlIHsKLQkJdHRtX21lbV9nbG9iYWxfZnJlZShmZW5jZS0+ZmRldi0+bWVtX2dsb2IsCi0JCQkJICAgIHNpemVvZigqZmVuY2UpKTsKLQkJa2ZyZWUoZmVuY2UpOwotCX0KLX0KLQotdm9pZCB0dG1fZmVuY2VfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IHR0bV9mZW5jZV9kZXZpY2UgKmZkZXYpCi17Ci0Ja2ZyZWUoZmRldi0+ZmVuY2VfY2xhc3MpOwotfQotCi1pbnQKLXR0bV9mZW5jZV9kZXZpY2VfaW5pdChpbnQgbnVtX2NsYXNzZXMsCi0JCSAgICAgIHN0cnVjdCB0dG1fbWVtX2dsb2JhbCAqbWVtX2dsb2IsCi0JCSAgICAgIHN0cnVjdCB0dG1fZmVuY2VfZGV2aWNlICpmZGV2LAotCQkgICAgICBjb25zdCBzdHJ1Y3QgdHRtX2ZlbmNlX2NsYXNzX2luaXQgKmluaXQsCi0JCSAgICAgIGJvb2wgcmVwbGljYXRlX2luaXQsCi0JCSAgICAgIGNvbnN0IHN0cnVjdCB0dG1fZmVuY2VfZHJpdmVyICpkcml2ZXIpCi17Ci0Jc3RydWN0IHR0bV9mZW5jZV9jbGFzc19tYW5hZ2VyICpmYzsKLQljb25zdCBzdHJ1Y3QgdHRtX2ZlbmNlX2NsYXNzX2luaXQgKmZjaTsKLQlpbnQgaTsKLQotCWZkZXYtPm1lbV9nbG9iID0gbWVtX2dsb2I7Ci0JZmRldi0+ZmVuY2VfY2xhc3MgPSBremFsbG9jKG51bV9jbGFzc2VzICoKLQkJCQkgICAgc2l6ZW9mKCpmZGV2LT5mZW5jZV9jbGFzcyksIEdGUF9LRVJORUwpOwotCi0JaWYgKHVubGlrZWx5KCFmZGV2LT5mZW5jZV9jbGFzcykpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZmRldi0+bnVtX2NsYXNzZXMgPSBudW1fY2xhc3NlczsKLQlhdG9taWNfc2V0KCZmZGV2LT5jb3VudCwgMCk7Ci0JZmRldi0+ZHJpdmVyID0gZHJpdmVyOwotCi0JZm9yIChpID0gMDsgaSA8IGZkZXYtPm51bV9jbGFzc2VzOyArK2kpIHsKLQkJZmMgPSAmZmRldi0+ZmVuY2VfY2xhc3NbaV07Ci0JCWZjaSA9ICZpbml0WyhyZXBsaWNhdGVfaW5pdCkgPyAwIDogaV07Ci0KLQkJZmMtPndyYXBfZGlmZiA9IGZjaS0+d3JhcF9kaWZmOwotCQlmYy0+Zmx1c2hfZGlmZiA9IGZjaS0+Zmx1c2hfZGlmZjsKLQkJZmMtPnNlcXVlbmNlX21hc2sgPSBmY2ktPnNlcXVlbmNlX21hc2s7Ci0KLQkJcndsb2NrX2luaXQoJmZjLT5sb2NrKTsKLQkJSU5JVF9MSVNUX0hFQUQoJmZjLT5yaW5nKTsKLQkJaW5pdF93YWl0cXVldWVfaGVhZCgmZmMtPmZlbmNlX3F1ZXVlKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RydWN0IHR0bV9mZW5jZV9pbmZvIHR0bV9mZW5jZV9nZXRfaW5mbyhzdHJ1Y3QgdHRtX2ZlbmNlX29iamVjdCAqZmVuY2UpCi17Ci0Jc3RydWN0IHR0bV9mZW5jZV9jbGFzc19tYW5hZ2VyICpmYyA9IHR0bV9mZW5jZV9mYyhmZW5jZSk7Ci0Jc3RydWN0IHR0bV9mZW5jZV9pbmZvIHRtcDsKLQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKLQotCXJlYWRfbG9ja19pcnFzYXZlKCZmYy0+bG9jaywgaXJxX2ZsYWdzKTsKLQl0bXAgPSBmZW5jZS0+aW5mbzsKLQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZmYy0+bG9jaywgaXJxX2ZsYWdzKTsKLQotCXJldHVybiB0bXA7Ci19Ci0KLXZvaWQgdHRtX2ZlbmNlX29iamVjdF91bnJlZihzdHJ1Y3QgdHRtX2ZlbmNlX29iamVjdCAqKnBfZmVuY2UpCi17Ci0Jc3RydWN0IHR0bV9mZW5jZV9vYmplY3QgKmZlbmNlID0gKnBfZmVuY2U7Ci0KLQkqcF9mZW5jZSA9IE5VTEw7Ci0JKHZvaWQpa3JlZl9wdXQoJmZlbmNlLT5rcmVmLCAmdHRtX2ZlbmNlX29iamVjdF9kZXN0cm95KTsKLX0KLQotLyoKLSAqIFBsYWNlbWVudCAvIEJPIHN5bmMgb2JqZWN0IGdsdWUuCi0gKi8KLQotYm9vbCB0dG1fZmVuY2Vfc3luY19vYmpfc2lnbmFsZWQodm9pZCAqc3luY19vYmosIHZvaWQgKnN5bmNfYXJnKQotewotCXN0cnVjdCB0dG1fZmVuY2Vfb2JqZWN0ICpmZW5jZSA9IChzdHJ1Y3QgdHRtX2ZlbmNlX29iamVjdCAqKXN5bmNfb2JqOwotCXVpbnQzMl90IGZlbmNlX3R5cGVzID0gKHVpbnQzMl90KSAodW5zaWduZWQgbG9uZylzeW5jX2FyZzsKLQotCXJldHVybiB0dG1fZmVuY2Vfb2JqZWN0X3NpZ25hbGVkKGZlbmNlLCBmZW5jZV90eXBlcyk7Ci19Ci0KLWludCB0dG1fZmVuY2Vfc3luY19vYmpfd2FpdCh2b2lkICpzeW5jX29iaiwgdm9pZCAqc3luY19hcmcsCi0JCQkgICAgYm9vbCBsYXp5LCBib29sIGludGVycnVwdGlibGUpCi17Ci0Jc3RydWN0IHR0bV9mZW5jZV9vYmplY3QgKmZlbmNlID0gKHN0cnVjdCB0dG1fZmVuY2Vfb2JqZWN0ICopc3luY19vYmo7Ci0JdWludDMyX3QgZmVuY2VfdHlwZXMgPSAodWludDMyX3QpICh1bnNpZ25lZCBsb25nKXN5bmNfYXJnOwotCi0JcmV0dXJuIHR0bV9mZW5jZV9vYmplY3Rfd2FpdChmZW5jZSwgbGF6eSwgaW50ZXJydXB0aWJsZSwgZmVuY2VfdHlwZXMpOwotfQotCi1pbnQgdHRtX2ZlbmNlX3N5bmNfb2JqX2ZsdXNoKHZvaWQgKnN5bmNfb2JqLCB2b2lkICpzeW5jX2FyZykKLXsKLQlzdHJ1Y3QgdHRtX2ZlbmNlX29iamVjdCAqZmVuY2UgPSAoc3RydWN0IHR0bV9mZW5jZV9vYmplY3QgKilzeW5jX29iajsKLQl1aW50MzJfdCBmZW5jZV90eXBlcyA9ICh1aW50MzJfdCkgKHVuc2lnbmVkIGxvbmcpc3luY19hcmc7Ci0KLQlyZXR1cm4gdHRtX2ZlbmNlX29iamVjdF9mbHVzaChmZW5jZSwgZmVuY2VfdHlwZXMpOwotfQotCi12b2lkIHR0bV9mZW5jZV9zeW5jX29ial91bnJlZih2b2lkICoqc3luY19vYmopCi17Ci0JdHRtX2ZlbmNlX29iamVjdF91bnJlZigoc3RydWN0IHR0bV9mZW5jZV9vYmplY3QgKiopc3luY19vYmopOwotfQotCi12b2lkICp0dG1fZmVuY2Vfc3luY19vYmpfcmVmKHZvaWQgKnN5bmNfb2JqKQotewotCXJldHVybiAodm9pZCAqKQotCSAgICB0dG1fZmVuY2Vfb2JqZWN0X3JlZigoc3RydWN0IHR0bV9mZW5jZV9vYmplY3QgKilzeW5jX29iaik7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl90dG1fZmVuY2VfYXBpLmggYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl90dG1fZmVuY2VfYXBpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxNGE0MjcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfdHRtX2ZlbmNlX2FwaS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA4IFR1bmdzdGVuIEdyYXBoaWNzLCBJbmMuLCBDZWRhciBQYXJrLCBUWC4sIFVTQQotICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOSBWTXdhcmUsIEluYy4sIFBhbG8gQWx0bywgQ0EuLCBVU0EKLSAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCi0gKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKLSAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogQXV0aG9yczogVGhvbWFzIEhlbGxzdHJvbSA8dGhvbWFzLWF0LXR1bmdzdGVuZ3JhcGhpY3MtZG90LWNvbT4KLSAqLwotI2lmbmRlZiBfVFRNX0ZFTkNFX0FQSV9IXwotI2RlZmluZSBfVFRNX0ZFTkNFX0FQSV9IXwotCi0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KLQotI2RlZmluZSBUVE1fRkVOQ0VfRkxBR19FTUlUICgxIDw8IDApCi0jZGVmaW5lIFRUTV9GRU5DRV9UWVBFX0VYRSAgKDEgPDwgMCkKLQotc3RydWN0IHR0bV9mZW5jZV9kZXZpY2U7Ci0KLS8qKgotICogc3RydWN0IHR0bV9mZW5jZV9pbmZvCi0gKgotICogQGZlbmNlX2NsYXNzOiAgICBUaGUgZmVuY2UgY2xhc3MuCi0gKiBAZmVuY2VfdHlwZTogICAgIEJpdGZpZWxkIGluZGljYXRpbmcgdHlwZXMgZm9yIHRoaXMgZmVuY2UuCi0gKiBAc2lnbmFsZWRfdHlwZXM6IEJpdGZpZWxkIGluZGljYXRpbmcgd2hpY2ggdHlwZXMgYXJlIHNpZ25hbGVkLgotICogQGVycm9yOiAgICAgICAgICBMYXN0IGVycm9yIHJlcG9ydGVkIGZyb20gdGhlIGRldmljZS4KLSAqCi0gKiBVc2VkIGFzIG91dHB1dCBmcm9tIHRoZSB0dG1fZmVuY2VfZ2V0X2luZm8KLSAqLwotCi1zdHJ1Y3QgdHRtX2ZlbmNlX2luZm8gewotCXVpbnQzMl90IHNpZ25hbGVkX3R5cGVzOwotCXVpbnQzMl90IGVycm9yOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgdHRtX2ZlbmNlX29iamVjdAotICoKLSAqIEBmZGV2OiAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGZlbmNlIGRldmljZSBzdHJ1Y3QuCi0gKiBAa3JlZjogICAgICAgICAgICBIb2xkcyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoaXMgZmVuY2Ugb2JqZWN0LgotICogQHJpbmc6ICAgICAgICAgICAgTGlzdCBoZWFkIHVzZWQgZm9yIHRoZSBjaXJjdWxhciBsaXN0IG9mIG5vdC1jb21wbGV0ZWx5Ci0gKiAgICAgICAgICAgICAgICAgICBzaWduYWxlZCBmZW5jZXMuCi0gKiBAaW5mbzogICAgICAgICAgICBEYXRhIGZvciBmYXN0IHJldHJpZXZhbCB1c2luZyB0aGUgdHRtX2ZlbmNlX2dldF9pbmZvKCkKLSAqIGZ1bmN0aW9uLgotICogQHRpbWVvdXRfamlmZmllczogQWJzb2x1dGUgamlmZmllcyB2YWx1ZSBpbmRpY2F0aW5nIHdoZW4gdGhpcyBmZW5jZQotICogICAgICAgICAgICAgICAgICAgb2JqZWN0IHRpbWVzIG91dCBhbmQsIGlmIHdhaXRlZCBvbiwgY2FsbHMgdHRtX2ZlbmNlX2xvY2t1cAotICogICAgICAgICAgICAgICAgICAgdG8gY2hlY2sgZm9yIGFuZCByZXNvbHZlIGEgR1BVIGxvY2t1cC4KLSAqIEBzZXF1ZW5jZTogICAgICAgIEZlbmNlIHNlcXVlbmNlIG51bWJlci4KLSAqIEB3YWl0aW5nX3R5cGVzOiAgIFR5cGVzIGN1cnJlbnRseSB3YWl0ZWQgb24uCi0gKiBAZGVzdHJveTogICAgICAgICBDYWxsZWQgdG8gZnJlZSB0aGUgZmVuY2Ugb2JqZWN0LCB3aGVuIGl0cyByZWZjb3VudCBoYXMKLSAqICAgICAgICAgICAgICAgICAgIHJlYWNoZWQgemVyby4gSWYgTlVMTCwga2ZyZWUgaXMgdXNlZC4KLSAqCi0gKiBUaGlzIHN0cnVjdCBpcyBwcm92aWRlZCBpbiB0aGUgZHJpdmVyIGludGVyZmFjZSBzbyB0aGF0IGRyaXZlcnMgY2FuCi0gKiBkZXJpdmUgZnJvbSBpdCBhbmQgY3JlYXRlIHRoZWlyIG93biBmZW5jZSBpbXBsZW1lbnRhdGlvbi4gQWxsIG1lbWJlcnMKLSAqIGFyZSBwcml2YXRlIHRvIHRoZSBmZW5jZSBpbXBsZW1lbnRhdGlvbiBhbmQgdGhlIGZlbmNlIGRyaXZlciBjYWxsYmFja3MuCi0gKiBPdGhlcndpc2UgYSBkcml2ZXIgbWF5IGFjY2VzcyB0aGUgZGVyaXZlZCBvYmplY3QgdXNpbmcgY29udGFpbmVyX29mKCkuCi0gKi8KLQotc3RydWN0IHR0bV9mZW5jZV9vYmplY3QgewotCXN0cnVjdCB0dG1fZmVuY2VfZGV2aWNlICpmZGV2OwotCXN0cnVjdCBrcmVmIGtyZWY7Ci0JdWludDMyX3QgZmVuY2VfY2xhc3M7Ci0JdWludDMyX3QgZmVuY2VfdHlwZTsKLQotCS8qCi0JICogVGhlIGJlbG93IGZpZWxkcyBhcmUgcHJvdGVjdGVkIGJ5IHRoZSBmZW5jZSBjbGFzcwotCSAqIG1hbmFnZXIgc3BpbmxvY2suCi0JICovCi0KLQlzdHJ1Y3QgbGlzdF9oZWFkIHJpbmc7Ci0Jc3RydWN0IHR0bV9mZW5jZV9pbmZvIGluZm87Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0X2ppZmZpZXM7Ci0JdWludDMyX3Qgc2VxdWVuY2U7Ci0JdWludDMyX3Qgd2FpdGluZ190eXBlczsKLQl2b2lkICgqZGVzdHJveSkgKHN0cnVjdCB0dG1fZmVuY2Vfb2JqZWN0ICopOwotfTsKLQotLyoqCi0gKiB0dG1fZmVuY2Vfb2JqZWN0X2luaXQKLSAqCi0gKiBAZmRldjogUG9pbnRlciB0byBhIHN0cnVjdCB0dG1fZmVuY2VfZGV2aWNlLgotICogQGZlbmNlX2NsYXNzOiBGZW5jZSBjbGFzcyBmb3IgdGhpcyBmZW5jZS4KLSAqIEB0eXBlOiBGZW5jZSB0eXBlIGZvciB0aGlzIGZlbmNlLgotICogQGNyZWF0ZV9mbGFnczogRmxhZ3MgaW5kaWNhdGluZyB2YXJpb3MgYWN0aW9ucyBhdCBpbml0IHRpbWUuIEF0IHRoaXMgcG9pbnQKLSAqIHRoZXJlJ3Mgb25seSBUVE1fRkVOQ0VfRkxBR19FTUlULCB3aGljaCB0cmlnZ2VycyBhIHNlcXVlbmNlIGVtaXNzaW9uIHRvCi0gKiB0aGUgY29tbWFuZCBzdHJlYW0uCi0gKiBAZGVzdHJveTogRGVzdHJveSBmdW5jdGlvbi4gSWYgTlVMTCwga2ZyZWUoKSBpcyB1c2VkLgotICogQGZlbmNlOiBUaGUgc3RydWN0IHR0bV9mZW5jZV9vYmplY3QgdG8gaW5pdGlhbGl6ZS4KLSAqCi0gKiBJbml0aWFsaXplIGEgcHJlLWFsbG9jYXRlZCBmZW5jZSBvYmplY3QuIFRoaXMgZnVuY3Rpb24sIHRvZ2V0aGVyIHdpdGggdGhlCi0gKiBkZXN0cm95IGZ1bmN0aW9uIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGRlcml2ZSBkcml2ZXItc3BlY2lmaWMgZmVuY2Ugb2JqZWN0cy4KLSAqLwotCi1leHRlcm4gaW50Ci10dG1fZmVuY2Vfb2JqZWN0X2luaXQoc3RydWN0IHR0bV9mZW5jZV9kZXZpY2UgKmZkZXYsCi0JCSAgICAgIHVpbnQzMl90IGZlbmNlX2NsYXNzLAotCQkgICAgICB1aW50MzJfdCB0eXBlLAotCQkgICAgICB1aW50MzJfdCBjcmVhdGVfZmxhZ3MsCi0JCSAgICAgIHZvaWQgKCpkZXN0cm95KSAoc3RydWN0IHR0bV9mZW5jZV9vYmplY3QgKmZlbmNlKSwKLQkJICAgICAgc3RydWN0IHR0bV9mZW5jZV9vYmplY3QgKmZlbmNlKTsKLQotLyoqCi0gKiB0dG1fZmVuY2Vfb2JqZWN0X2NyZWF0ZQotICoKLSAqIEBmZGV2OiBQb2ludGVyIHRvIGEgc3RydWN0IHR0bV9mZW5jZV9kZXZpY2UuCi0gKiBAZmVuY2VfY2xhc3M6IEZlbmNlIGNsYXNzIGZvciB0aGlzIGZlbmNlLgotICogQHR5cGU6IEZlbmNlIHR5cGUgZm9yIHRoaXMgZmVuY2UuCi0gKiBAY3JlYXRlX2ZsYWdzOiBGbGFncyBpbmRpY2F0aW5nIHZhcmlvcyBhY3Rpb25zIGF0IGluaXQgdGltZS4gQXQgdGhpcyBwb2ludAotICogdGhlcmUncyBvbmx5IFRUTV9GRU5DRV9GTEFHX0VNSVQsIHdoaWNoIHRyaWdnZXJzIGEgc2VxdWVuY2UgZW1pc3Npb24gdG8KLSAqIHRoZSBjb21tYW5kIHN0cmVhbS4KLSAqIEBjX2ZlbmNlOiBPbiBzdWNjZXNzZnVsIHRlcm1pbmF0aW9uLCAqKEBjX2ZlbmNlKSB3aWxsIHBvaW50IHRvIHRoZSBjcmVhdGVkCi0gKiBmZW5jZSBvYmplY3QuCi0gKgotICogQ3JlYXRlIGFuZCBpbml0aWFsaXplIGEgc3RydWN0IHR0bV9mZW5jZV9vYmplY3QuIFRoZSBkZXN0cm95IGZ1bmN0aW9uIHdpbGwKLSAqIGJlIHNldCB0byBrZnJlZSgpLgotICovCi0KLWV4dGVybiBpbnQKLXR0bV9mZW5jZV9vYmplY3RfY3JlYXRlKHN0cnVjdCB0dG1fZmVuY2VfZGV2aWNlICpmZGV2LAotCQkJdWludDMyX3QgZmVuY2VfY2xhc3MsCi0JCQl1aW50MzJfdCB0eXBlLAotCQkJdWludDMyX3QgY3JlYXRlX2ZsYWdzLAotCQkJc3RydWN0IHR0bV9mZW5jZV9vYmplY3QgKipjX2ZlbmNlKTsKLQotLyoqCi0gKiB0dG1fZmVuY2Vfb2JqZWN0X3dhaXQKLSAqCi0gKiBAZmVuY2U6IFRoZSBmZW5jZSBvYmplY3QgdG8gd2FpdCBvbi4KLSAqIEBsYXp5OiBBbGxvdyBzbGVlcHMgdG8gcmVkdWNlIHRoZSBjcHUtdXNhZ2UgaWYgcG9sbGluZy4KLSAqIEBpbnRlcnJ1cHRpYmxlOiBTbGVlcCBpbnRlcnJ1cHRpYmxlIHdoZW4gd2FpdGluZy4KLSAqIEB0eXBlX21hc2s6IFdhaXQgZm9yIHRoZSBnaXZlbiB0eXBlX21hc2sgdG8gc2lnbmFsLgotICoKLSAqIFdhaXQgZm9yIGEgZmVuY2UgdG8gc2lnbmFsIHRoZSBnaXZlbiB0eXBlX21hc2suIFRoZSBmdW5jdGlvbiB3aWxsCi0gKiBwZXJmb3JtIGEgZmVuY2VfZmx1c2ggdXNpbmcgdHlwZV9tYXNrLiAoU2VlIHR0bV9mZW5jZV9vYmplY3RfZmx1c2gpLgotICoKLSAqIFJldHVybnMKLSAqIC1FUkVTVEFSVCBpZiBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbC4KLSAqIE1heSByZXR1cm4gZHJpdmVyLXNwZWNpZmljIGVycm9yIGNvZGVzIGlmIHRpbWVkLW91dC4KLSAqLwotCi1leHRlcm4gaW50Ci10dG1fZmVuY2Vfb2JqZWN0X3dhaXQoc3RydWN0IHR0bV9mZW5jZV9vYmplY3QgKmZlbmNlLAotCQkgICAgICBib29sIGxhenksIGJvb2wgaW50ZXJydXB0aWJsZSwgdWludDMyX3QgdHlwZV9tYXNrKTsKLQotLyoqCi0gKiB0dG1fZmVuY2Vfb2JqZWN0X2ZsdXNoCi0gKgotICogQGZlbmNlOiBUaGUgZmVuY2Ugb2JqZWN0IHRvIGZsdXNoLgotICogQGZsdXNoX21hc2s6IEZlbmNlIHR5cGVzIHRvIGZsdXNoLgotICoKLSAqIE1ha2Ugc3VyZSB0aGF0IHRoZSBnaXZlbiBmZW5jZSBldmVudHVhbGx5IHNpZ25hbHMgdGhlCi0gKiB0eXBlcyBpbmRpY2F0ZWQgYnkgQGZsdXNoX21hc2suIE5vdGUgdGhhdCB0aGlzIG1heSBvciBtYXkgbm90Ci0gKiBtYXAgdG8gYSBDUFUgb3IgR1BVIGZsdXNoLgotICovCi0KLWV4dGVybiBpbnQKLXR0bV9mZW5jZV9vYmplY3RfZmx1c2goc3RydWN0IHR0bV9mZW5jZV9vYmplY3QgKmZlbmNlLCB1aW50MzJfdCBmbHVzaF9tYXNrKTsKLQotLyoqCi0gKiB0dG1fZmVuY2VfZ2V0X2luZm8KLSAqCi0gKiBAZmVuY2U6IFRoZSBmZW5jZSBvYmplY3QuCi0gKgotICogQ29weSB0aGUgaW5mbyBibG9jayBmcm9tIHRoZSBmZW5jZSB3aGlsZSBob2xkaW5nIHJlbGV2YW50IGxvY2tzLgotICovCi0KLXN0cnVjdCB0dG1fZmVuY2VfaW5mbyB0dG1fZmVuY2VfZ2V0X2luZm8oc3RydWN0IHR0bV9mZW5jZV9vYmplY3QgKmZlbmNlKTsKLQotLyoqCi0gKiB0dG1fZmVuY2Vfb2JqZWN0X3JlZgotICoKLSAqIEBmZW5jZTogVGhlIGZlbmNlIG9iamVjdC4KLSAqCi0gKiBSZXR1cm4gYSByZWYtY291bnRlZCBwb2ludGVyIHRvIHRoZSBmZW5jZSBvYmplY3QgaW5kaWNhdGVkIGJ5IEBmZW5jZS4KLSAqLwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB0dG1fZmVuY2Vfb2JqZWN0ICp0dG1fZmVuY2Vfb2JqZWN0X3JlZihzdHJ1Y3QKLQkJCQkJCQkgICAgdHRtX2ZlbmNlX29iamVjdAotCQkJCQkJCSAgICAqZmVuY2UpCi17Ci0Ja3JlZl9nZXQoJmZlbmNlLT5rcmVmKTsKLQlyZXR1cm4gZmVuY2U7Ci19Ci0KLS8qKgotICogdHRtX2ZlbmNlX29iamVjdF91bnJlZgotICoKLSAqIEBwX2ZlbmNlOiBQb2ludGVyIHRvIGEgcmVmLWNvdW50ZWQgcGludGVyIHRvIGEgc3RydWN0IHR0bV9mZW5jZV9vYmplY3QuCi0gKgotICogVW5yZWZlcmVuY2UgdGhlIGZlbmNlIG9iamVjdCBwb2ludGVkIHRvIGJ5ICooQHBfZmVuY2UpLCBjbGVhcmluZwotICogKihwX2ZlbmNlKS4KLSAqLwotCi1leHRlcm4gdm9pZCB0dG1fZmVuY2Vfb2JqZWN0X3VucmVmKHN0cnVjdCB0dG1fZmVuY2Vfb2JqZWN0ICoqcF9mZW5jZSk7Ci0KLS8qKgotICogdHRtX2ZlbmNlX29iamVjdF9zaWduYWxlZAotICoKLSAqIEBmZW5jZTogUG9pbnRlciB0byB0aGUgc3RydWN0IHR0bV9mZW5jZV9vYmplY3QuCi0gKiBAbWFzazogVHlwZSBtYXNrIHRvIGNoZWNrIHdoZXRoZXIgc2lnbmFsZWQuCi0gKgotICogVGhpcyBmdW5jdGlvbiBjaGVja3MgKHdpdGhvdXQgd2FpdGluZykgd2hldGhlciB0aGUgZmVuY2Ugb2JqZWN0Ci0gKiBwb2ludGVkIHRvIGJ5IEBmZW5jZSBoYXMgc2lnbmFsZWQgdGhlIHR5cGVzIGluZGljYXRlZCBieSBAbWFzaywKLSAqIGFuZCByZXR1cm5zIDEgaWYgdHJ1ZSwgMCBpZiBmYWxzZS4gVGhpcyBmdW5jdGlvbiBkb2VzIE5PVCBwZXJmb3JtCi0gKiBhbiBpbXBsaWNpdCBmZW5jZSBmbHVzaC4KLSAqLwotCi1leHRlcm4gYm9vbAotdHRtX2ZlbmNlX29iamVjdF9zaWduYWxlZChzdHJ1Y3QgdHRtX2ZlbmNlX29iamVjdCAqZmVuY2UsIHVpbnQzMl90IG1hc2spOwotCi0vKioKLSAqIHR0bV9mZW5jZV9jbGFzcwotICoKLSAqIEBmZW5jZTogUG9pbnRlciB0byB0aGUgc3RydWN0IHR0bV9mZW5jZV9vYmplY3QuCi0gKgotICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBmZW5jZSBjbGFzcyBvZiBhCi0gKiBzdHJ1Y3QgdHRtX2ZlbmNlX29iamVjdC4KLSAqLwotCi1zdGF0aWMgaW5saW5lIHVpbnQzMl90IHR0bV9mZW5jZV9jbGFzcyhjb25zdCBzdHJ1Y3QgdHRtX2ZlbmNlX29iamVjdCAqZmVuY2UpCi17Ci0JcmV0dXJuIGZlbmNlLT5mZW5jZV9jbGFzczsKLX0KLQotLyoqCi0gKiB0dG1fZmVuY2VfdHlwZXMKLSAqCi0gKiBAZmVuY2U6IFBvaW50ZXIgdG8gdGhlIHN0cnVjdCB0dG1fZmVuY2Vfb2JqZWN0LgotICoKLSAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgZmVuY2UgdHlwZXMgb2YgYQotICogc3RydWN0IHR0bV9mZW5jZV9vYmplY3QuCi0gKi8KLQotc3RhdGljIGlubGluZSB1aW50MzJfdCB0dG1fZmVuY2VfdHlwZXMoY29uc3Qgc3RydWN0IHR0bV9mZW5jZV9vYmplY3QgKmZlbmNlKQotewotCXJldHVybiBmZW5jZS0+ZmVuY2VfdHlwZTsKLX0KLQotLyoKLSAqIFRoZSBmdW5jdGlvbnMgYmVsb3cgYXJlIHdyYXBwZXJzIHRvIHRoZSBhYm92ZSBmdW5jdGlvbnMsIHdpdGgKLSAqIHNpbWlsYXIgbmFtZXMgYnV0IHdpdGggc3luY19vYmogb21pdHRlZC4gVGhlc2Ugd3JhcHBlcnMgYXJlIGludGVuZGVkCi0gKiB0byBiZSBwbHVnZ2VkIGRpcmVjdGx5IGludG8gdGhlIGJ1ZmZlciBvYmplY3QgZHJpdmVyJ3Mgc3luYyBvYmplY3QKLSAqIEFQSSwgaWYgdGhlIGRyaXZlciBjaG9vc2VzIHRvIHVzZSB0dG1fZmVuY2Vfb2JqZWN0cyBhcyBidWZmZXIgb2JqZWN0Ci0gKiBzeW5jIG9iamVjdHMuIEluIHRoZSBwcm90b3R5cGVzIGJlbG93LCBhIHN5bmNfb2JqIGlzIGNhc3QgdG8gYQotICogc3RydWN0IHR0bV9mZW5jZV9vYmplY3QsIHdoZXJlYXMgYSBzeW5jX2FyZyBpcyBjYXN0IHRvIGFuCi0gKiB1aW50MzJfdCByZXByZXNlbnRpbmcgYSBmZW5jZV90eXBlIGFyZ3VtZW50LgotICovCi0KLWV4dGVybiBib29sIHR0bV9mZW5jZV9zeW5jX29ial9zaWduYWxlZCh2b2lkICpzeW5jX29iaiwgdm9pZCAqc3luY19hcmcpOwotZXh0ZXJuIGludCB0dG1fZmVuY2Vfc3luY19vYmpfd2FpdCh2b2lkICpzeW5jX29iaiwgdm9pZCAqc3luY19hcmcsCi0JCQkJICAgYm9vbCBsYXp5LCBib29sIGludGVycnVwdGlibGUpOwotZXh0ZXJuIGludCB0dG1fZmVuY2Vfc3luY19vYmpfZmx1c2godm9pZCAqc3luY19vYmosIHZvaWQgKnN5bmNfYXJnKTsKLWV4dGVybiB2b2lkIHR0bV9mZW5jZV9zeW5jX29ial91bnJlZih2b2lkICoqc3luY19vYmopOwotZXh0ZXJuIHZvaWQgKnR0bV9mZW5jZV9zeW5jX29ial9yZWYodm9pZCAqc3luY19vYmopOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX3R0bV9mZW5jZV9kcml2ZXIuaCBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX3R0bV9mZW5jZV9kcml2ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM1YzU2OS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl90dG1fZmVuY2VfZHJpdmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDggVHVuZ3N0ZW4gR3JhcGhpY3MsIEluYy4sIENlZGFyIFBhcmssIFRYLiwgVVNBCi0gKiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA5IFZNd2FyZSwgSW5jLiwgUGFsbyBBbHRvLCBDQS4sIFVTQQotICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKLSAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAotICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBBdXRob3JzOiBUaG9tYXMgSGVsbHN0cm9tIDx0aG9tYXMtYXQtdHVuZ3N0ZW5ncmFwaGljcy1kb3QtY29tPgotICovCi0jaWZuZGVmIF9UVE1fRkVOQ0VfRFJJVkVSX0hfCi0jZGVmaW5lIF9UVE1fRkVOQ0VfRFJJVkVSX0hfCi0KLSNpbmNsdWRlIDxsaW51eC9rcmVmLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSAicHNiX3R0bV9mZW5jZV9hcGkuaCIKLSNpbmNsdWRlICJ0dG0vdHRtX21lbW9yeS5oIgotCi0vKiogQGZpbGUgdHRtX2ZlbmNlX2RyaXZlci5oCi0gKgotICogRGVmaW5pdGlvbnMgbmVlZGVkIGZvciBhIGRyaXZlciBpbXBsZW1lbnRpbmcgdGhlCi0gKiB0dG1fZmVuY2Ugc3Vic3lzdGVtLgotICovCi0KLS8qKgotICogc3RydWN0IHR0bV9mZW5jZV9jbGFzc19tYW5hZ2VyOgotICoKLSAqIEB3cmFwX2RpZmY6IFNlcXVlbmNlIGRpZmZlcmVuY2UgdG8gY2F0Y2ggMzItYml0IHdyYXBwaW5nLgotICogaWYgKHNlcWEgLSBzZXFiKSA+IEB3cmFwX2RpZmYsIHRoZW4gc2VxYSA8IHNlcWIuCi0gKiBAZmx1c2hfZGlmZjogU2VxdWVuY2UgZGlmZmVyZW5jZSB0byB0cmlnZ2VyIGZlbmNlIGZsdXNoLgotICogaWYgKGN1cl9zZXEgLSBzZXFhKSA+IEBmbHVzaF9kaWZmLCB0aGVuIGNvbnNpZGVyIGZlbmNlIG9iamVjdCB3aXRoCi0gKiBzZXFhIGFzIG9sZCBhbiBuZWVkaW5nIGEgZmx1c2guCi0gKiBAc2VxdWVuY2VfbWFzazogTWFzayBvZiB2YWxpZCBiaXRzIGluIGEgZmVuY2Ugc2VxdWVuY2UuCi0gKiBAbG9jazogTG9jayBwcm90ZWN0aW5nIHRoaXMgc3RydWN0IGFzIHdlbGwgYXMgZmVuY2Ugb2JqZWN0cwotICogYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3RydWN0LgotICogQHJpbmc6IENpcmN1bGFyIHNlcXVlbmNlLW9yZGVyZWQgbGlzdCBvZiBmZW5jZSBvYmplY3RzLgotICogQHBlbmRpbmdfZmx1c2g6IEZlbmNlIHR5cGVzIGN1cnJlbnRseSBuZWVkaW5nIGEgZmx1c2guCi0gKiBAd2FpdGluZ190eXBlczogRmVuY2UgdHlwZXMgdGhhdCBhcmUgY3VycmVudGx5IHdhaXRlZCBmb3IuCi0gKiBAZmVuY2VfcXVldWU6IFF1ZXVlIG9mIHdhaXRlcnMgb24gZmVuY2VzIGJlbG9uZ2luZyB0byB0aGlzIGZlbmNlIGNsYXNzLgotICogQGhpZ2hlc3Rfd2FpdGluZ19zZXF1ZW5jZTogU2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBmZW5jZSB3aXRoIGhpZ2hlc3QKLSAqIHNlcXVlbmNlIG51bWJlciBhbmQgdGhhdCBpcyB3YWl0ZWQgZm9yLgotICogQGxhdGVzdF9xdWV1ZWRfc2VxdWVuY2U6IFNlcXVlbmNlIG51bWJlciBvZiB0aGUgZmVuY2UgbGF0ZXN0IHF1ZXVlZAotICogb24gdGhlIHJpbmcuCi0gKi8KLQotc3RydWN0IHR0bV9mZW5jZV9jbGFzc19tYW5hZ2VyIHsKLQotCS8qCi0JICogVW5wcm90ZWN0ZWQgY29uc3RhbnQgbWVtYmVycy4KLQkgKi8KLQotCXVpbnQzMl90IHdyYXBfZGlmZjsKLQl1aW50MzJfdCBmbHVzaF9kaWZmOwotCXVpbnQzMl90IHNlcXVlbmNlX21hc2s7Ci0KLQkvKgotCSAqIFRoZSByd2xvY2sgcHJvdGVjdHMgdGhpcyBzdHJ1Y3R1cmUgYXMgd2VsbCBhcwotCSAqIHRoZSBkYXRhIGluIGFsbCBmZW5jZSBvYmplY3RzIGJlbG9uZ2luZyB0byB0aGlzCi0JICogY2xhc3MuIFRoaXMgc2hvdWxkIGJlIE9LIGFzIG1vc3QgZmVuY2Ugb2JqZWN0cyBhcmUKLQkgKiBvbmx5IHJlYWQgZnJvbSBvbmNlIHRoZXkncmUgY3JlYXRlZC4KLQkgKi8KLQotCXJ3bG9ja190IGxvY2s7Ci0Jc3RydWN0IGxpc3RfaGVhZCByaW5nOwotCXVpbnQzMl90IHBlbmRpbmdfZmx1c2g7Ci0JdWludDMyX3Qgd2FpdGluZ190eXBlczsKLQl3YWl0X3F1ZXVlX2hlYWRfdCBmZW5jZV9xdWV1ZTsKLQl1aW50MzJfdCBoaWdoZXN0X3dhaXRpbmdfc2VxdWVuY2U7Ci0JdWludDMyX3QgbGF0ZXN0X3F1ZXVlZF9zZXF1ZW5jZTsKLX07Ci0KLS8qKgotICogc3RydWN0IHR0bV9mZW5jZV9kZXZpY2UKLSAqCi0gKiBAZmVuY2VfY2xhc3M6ICBBcnJheSBvZiBmZW5jZSBjbGFzcyBtYW5hZ2Vycy4KLSAqIEBudW1fY2xhc3NlczogIEFycmF5IGRpbWVuc2lvbiBvZiBAZmVuY2VfY2xhc3MuCi0gKiBAY291bnQ6ICAgICAgICBDdXJyZW50IG51bWJlciBvZiBmZW5jZSBvYmplY3RzIGZvciBzdGF0aXN0aWNzLgotICogQGRyaXZlcjogICAgICAgRHJpdmVyIHN0cnVjdC4KLSAqCi0gKiBQcm92aWRlZCBpbiB0aGUgZHJpdmVyIGludGVyZmFjZSBzbyB0aGF0IHRoZSBkcml2ZXIgY2FuIGRlcml2ZQotICogZnJvbSB0aGlzIHN0cnVjdCBmb3IgaXRzIGRyaXZlcl9wcml2YXRlLCBhbmQgYWNjb3JkaW5nbHkKLSAqIGFjY2VzcyB0aGUgZHJpdmVyX3ByaXZhdGUgZnJvbSB0aGUgZmVuY2UgZHJpdmVyIGNhbGxiYWNrcy4KLSAqCi0gKiBBbGwgbWVtYmVycyBleGNlcHQgImNvdW50IiBhcmUgaW5pdGlhbGl6ZWQgYXQgY3JlYXRpb24gYW5kCi0gKiBuZXZlciB0b3VjaGVkIGFmdGVyIHRoYXQuIE5vIHByb3RlY3Rpb24gbmVlZGVkLgotICoKLSAqIFRoaXMgc3RydWN0IGlzIHByaXZhdGUgdG8gdGhlIGZlbmNlIGltcGxlbWVudGF0aW9uIGFuZCB0byB0aGUgZmVuY2UKLSAqIGRyaXZlciBjYWxsYmFja3MsIGFuZCBtYXkgb3RoZXJ3aXNlIGJlIHVzZWQgYnkgZHJpdmVycyBvbmx5IHRvCi0gKiBvYnRhaW4gdGhlIGRlcml2ZWQgZGV2aWNlX3ByaXZhdGUgb2JqZWN0IHVzaW5nIGNvbnRhaW5lcl9vZigpLgotICovCi0KLXN0cnVjdCB0dG1fZmVuY2VfZGV2aWNlIHsKLQlzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgKm1lbV9nbG9iOwotCXN0cnVjdCB0dG1fZmVuY2VfY2xhc3NfbWFuYWdlciAqZmVuY2VfY2xhc3M7Ci0JdWludDMyX3QgbnVtX2NsYXNzZXM7Ci0JYXRvbWljX3QgY291bnQ7Ci0JY29uc3Qgc3RydWN0IHR0bV9mZW5jZV9kcml2ZXIgKmRyaXZlcjsKLX07Ci0KLS8qKgotICogc3RydWN0IHR0bV9mZW5jZV9jbGFzc19pbml0Ci0gKgotICogQHdyYXBfZGlmZjogICAgRmVuY2Ugc2VxdWVuY2UgbnVtYmVyIHdyYXAgaW5kaWNhdG9yLiBJZgotICogKHNlcXVlbmNlMSAtIHNlcXVlbmNlMikgPiBAd3JhcF9kaWZmLCB0aGVuIHNlcXVlbmNlMSBpcwotICogY29uc2lkZXJlZCB0byBiZSBvbGRlciB0aGFuIHNlcXVlbmNlMi4KLSAqIEBmbHVzaF9kaWZmOiAgIEZlbmNlIHNlcXVlbmNlIG51bWJlciBmbHVzaCBpbmRpY2F0b3IuCi0gKiBJZiBhIG5vbi1jb21wbGV0ZWx5LXNpZ25hbGVkIGZlbmNlIGhhcyBhIGZlbmNlIHNlcXVlbmNlIG51bWJlcgotICogc2VxdWVuY2UxIGFuZCAoc2VxdWVuY2UxIC0gY3VycmVudF9lbWl0X3NlcXVlbmNlKSA+IEBmbHVzaF9kaWZmLAotICogdGhlIGZlbmNlIGlzIGNvbnNpZGVyZWQgdG9vIG9sZCBhbmQgaXQgd2lsbCBiZSBmbHVzaGVkIHVwb24gdGhlCi0gKiBuZXh0IGNhbGwgb2YgdHRtX2ZlbmNlX2ZsdXNoX29sZCgpLCB0byBtYWtlIHN1cmUgbm8gZmVuY2VzIHdpdGgKLSAqIHN0YWxlIHNlcXVlbmNlIG51bWJlcnMgcmVtYWlucyB1bnNpZ25hbGVkLiBAZmx1c2hfZGlmZiBzaG91bGQKLSAqIGJlIHN1ZmZpY2llbnRseSBsZXNzIHRoYW4gQHdyYXBfZGlmZi4KLSAqIEBzZXF1ZW5jZV9tYXNrOiBNYXNrIHdpdGggdmFsaWQgYml0cyBvZiB0aGUgZmVuY2Ugc2VxdWVuY2UKLSAqIG51bWJlciBzZXQgdG8gMS4KLSAqCi0gKiBUaGlzIHN0cnVjdCBpcyB1c2VkIGFzIGlucHV0IHRvIHR0bV9mZW5jZV9kZXZpY2VfaW5pdC4KLSAqLwotCi1zdHJ1Y3QgdHRtX2ZlbmNlX2NsYXNzX2luaXQgewotCXVpbnQzMl90IHdyYXBfZGlmZjsKLQl1aW50MzJfdCBmbHVzaF9kaWZmOwotCXVpbnQzMl90IHNlcXVlbmNlX21hc2s7Ci19OwotCi0vKioKLSAqIHN0cnVjdCB0dG1fZmVuY2VfZHJpdmVyCi0gKgotICogQGhhc19pcnE6IENhbGxlZCBieSBhIHBvdGVudGlhbCB3YWl0ZXIuIFNob3VsZCByZXR1cm4gMSBpZiBhCi0gKiBmZW5jZSBvYmplY3Qgd2l0aCBpbmRpY2F0ZWQgcGFyYW1ldGVycyBpcyBleHBlY3RlZCB0byBzaWduYWwKLSAqIGF1dG9tYXRpY2FsbHksIGFuZCAwIGlmIHRoZSBmZW5jZSBpbXBsZW1lbnRhdGlvbiBuZWVkcyB0bwotICogcmVwZWF0ZWRseSBjYWxsIEBwb2xsIHRvIG1ha2UgaXQgc2lnbmFsLgotICogQGVtaXQ6ICAgIE1ha2Ugc3VyZSBhIGZlbmNlIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMgaXMKLSAqIHByZXNlbnQgaW4gdGhlIGluZGljYXRlZCBjb21tYW5kIHN0cmVhbS4gUmV0dXJuIGl0cyBzZXF1ZW5jZSBudW1iZXIKLSAqIGluICJicmVhZGNydW1iIi4KLSAqIEBwb2xsOiAgICBDaGVjayBhbmQgcmVwb3J0IHNlcXVlbmNlcyBvZiB0aGUgZ2l2ZW4gImZlbmNlX2NsYXNzIgotICogICAgICAgICAgIHRoYXQgaGF2ZSBzaWduYWxlZCAidHlwZXMiCi0gKiBAZmx1c2g6ICAgTWFrZSBzdXJlIHRoYXQgdGhlIHR5cGVzIGluZGljYXRlZCBieSB0aGUgYml0ZmllbGQKLSAqICAgICAgICAgICB0dG1fZmVuY2VfY2xhc3NfbWFuYWdlcjo6cGVuZGluZ19mbHVzaCB3aWxsIGV2ZW50dWFsbHkKLSAqICAgICAgICAgICBzaWduYWwuIFRoZXNlIGJpdHMgaGF2ZSBiZWVuIHB1dCB0b2dldGhlciB1c2luZyB0aGUKLSAqICAgICAgICAgICByZXN1bHQgZnJvbSB0aGUgbmVlZGVkX2ZsdXNoIGZ1bmN0aW9uIGRlc2NyaWJlZCBiZWxvdy4KLSAqIEBuZWVkZWRfZmx1c2g6IEdpdmVuIHRoZSBmZW5jZV9jbGFzcyBhbmQgZmVuY2VfdHlwZXMgaW5kaWNhdGVkIGJ5Ci0gKiAgICAgICAgICAgImZlbmNlIiwgYW5kIHRoZSBsYXN0IHJlY2VpdmVkIGZlbmNlIHNlcXVlbmNlIG9mIHRoaXMKLSAqICAgICAgICAgICBmZW5jZSBjbGFzcywgaW5kaWNhdGUgd2hhdCB0eXBlcyBuZWVkIGEgZmVuY2UgZmx1c2ggdG8KLSAqICAgICAgICAgICBzaWduYWwuIFJldHVybiBhcyBhIGJpdGZpZWxkLgotICogQHdhaXQ6ICAgIFNldCB0byBub24tTlVMTCBpZiB0aGUgZHJpdmVyIHdhbnRzIHRvIG92ZXJyaWRlIHRoZSBmZW5jZQotICogICAgICAgICAgIHdhaXQgaW1wbGVtZW50YXRpb24uIFJldHVybiAwIG9uIHN1Y2Nlc3MsIC1FQlVTWSBvbiBmYWlsdXJlLAotICogICAgICAgICAgIGFuZCAtRVJFU1RBUlQgaWYgaW50ZXJydXB0aWJsZSBhbmQgYSBzaWduYWwgaXMgcGVuZGluZy4KLSAqIEBzaWduYWxlZDogIERyaXZlciBjYWxsYmFjayB0aGF0IGlzIGNhbGxlZCB3aGVuZXZlciBhCi0gKiAgICAgICAgICAgdHRtX2ZlbmNlX29iamVjdDo6c2lnbmFsZWRfdHlwZXMgaGFzIGNoYW5nZWQgc3RhdHVzLgotICogICAgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYXRvbWljIGNvbnRleHQsCi0gKiAgICAgICAgICAgd2l0aCB0aGUgdHRtX2ZlbmNlX2NsYXNzX21hbmFnZXI6OmxvY2sgaGVsZCBpbiB3cml0ZSBtb2RlLgotICogQGxvY2t1cDogIERyaXZlciBjYWxsYmFjayB0aGF0IGlzIGNhbGxlZCB3aGVuZXZlciBhIHdhaXQgaGFzIGV4Y2VlZGVkCi0gKiAgICAgICAgICAgdGhlIGxpZmV0aW1lIG9mIGEgZmVuY2Ugb2JqZWN0LgotICogICAgICAgICAgIElmIHRoZXJlIGlzIGEgR1BVIGxvY2t1cCwKLSAqICAgICAgICAgICB0aGlzIGZ1bmN0aW9uIHNob3VsZCwgaWYgcG9zc2libGUsIHJlc2V0IHRoZSBHUFUsCi0gKiAgICAgICAgICAgY2FsbCB0aGUgdHRtX2ZlbmNlX2hhbmRsZXIgd2l0aCBhbiBlcnJvciBzdGF0dXMsIGFuZAotICogICAgICAgICAgIHJldHVybi4gSWYgbm8gbG9ja3VwIHdhcyBkZXRlY3RlZCwgc2ltcGx5IGV4dGVuZCB0aGUKLSAqICAgICAgICAgICBmZW5jZSB0aW1lb3V0X2ppZmZpZXMgYW5kIHJldHVybi4gVGhlIGRyaXZlciBtaWdodAotICogICAgICAgICAgIHdhbnQgdG8gcHJvdGVjdCB0aGUgbG9ja3VwIGNoZWNrIHdpdGggYSBtdXRleCBhbmQgY2FjaGUgYQotICogICAgICAgICAgIG5vbi1sb2NrZWQtdXAgc3RhdHVzIGZvciBhIHdoaWxlIHRvIGF2b2lkIGFuIGV4Y2Vzc2l2ZQotICogICAgICAgICAgIGFtb3VudCBvZiBsb2NrdXAgY2hlY2tzIGZyb20gZXZlcnkgd2FpdGluZyB0aHJlYWQuCi0gKi8KLQotc3RydWN0IHR0bV9mZW5jZV9kcml2ZXIgewotCWJvb2wgKCpoYXNfaXJxKSAoc3RydWN0IHR0bV9mZW5jZV9kZXZpY2UgKmZkZXYsCi0JCQl1aW50MzJfdCBmZW5jZV9jbGFzcywgdWludDMyX3QgZmxhZ3MpOwotCWludCAoKmVtaXQpIChzdHJ1Y3QgdHRtX2ZlbmNlX2RldmljZSAqZmRldiwKLQkJICAgICB1aW50MzJfdCBmZW5jZV9jbGFzcywKLQkJICAgICB1aW50MzJfdCBmbGFncywKLQkJICAgICB1aW50MzJfdCAqYnJlYWRjcnVtYiwgdW5zaWduZWQgbG9uZyAqdGltZW91dF9qaWZmaWVzKTsKLQl2b2lkICgqZmx1c2gpIChzdHJ1Y3QgdHRtX2ZlbmNlX2RldmljZSAqZmRldiwgdWludDMyX3QgZmVuY2VfY2xhc3MpOwotCXZvaWQgKCpwb2xsKSAoc3RydWN0IHR0bV9mZW5jZV9kZXZpY2UgKmZkZXYsCi0JCSAgICAgIHVpbnQzMl90IGZlbmNlX2NsYXNzLCB1aW50MzJfdCB0eXBlcyk7Ci0JIHVpbnQzMl90KCpuZWVkZWRfZmx1c2gpCi0JIChzdHJ1Y3QgdHRtX2ZlbmNlX29iamVjdCAqZmVuY2UpOwotCWludCAoKndhaXQpIChzdHJ1Y3QgdHRtX2ZlbmNlX29iamVjdCAqZmVuY2UsIGJvb2wgbGF6eSwKLQkJICAgICBib29sIGludGVycnVwdGlibGUsIHVpbnQzMl90IG1hc2spOwotCXZvaWQgKCpzaWduYWxlZCkgKHN0cnVjdCB0dG1fZmVuY2Vfb2JqZWN0ICpmZW5jZSk7Ci0Jdm9pZCAoKmxvY2t1cCkgKHN0cnVjdCB0dG1fZmVuY2Vfb2JqZWN0ICpmZW5jZSwgdWludDMyX3QgZmVuY2VfdHlwZXMpOwotfTsKLQotLyoqCi0gKiBmdW5jdGlvbiB0dG1fZmVuY2VfZGV2aWNlX2luaXQKLSAqCi0gKiBAbnVtX2NsYXNzZXM6ICAgICAgTnVtYmVyIG9mIGZlbmNlIGNsYXNzZXMgZm9yIHRoaXMgZmVuY2UgaW1wbGVtZW50YXRpb24uCi0gKiBAbWVtX2dsb2JhbDogICAgICAgUG9pbnRlciB0byB0aGUgZ2xvYmFsIG1lbW9yeSBhY2NvdW50aW5nIGluZm8uCi0gKiBAZmRldjogICAgICAgICAgICAgUG9pbnRlciB0byBhbiB1bmluaXRpYWxpc2VkIHN0cnVjdCB0dG1fZmVuY2VfZGV2aWNlLgotICogQGluaXQ6ICAgICAgICAgICAgIEFycmF5IG9mIGluaXRpYWxpemF0aW9uIGluZm8gZm9yIGVhY2ggZmVuY2UgY2xhc3MuCi0gKiBAcmVwbGljYXRlX2luaXQ6ICAgVXNlIHRoZSBmaXJzdCBAaW5pdCBpbml0aWFsaXphdGlvbiBpbmZvIGZvciBhbGwgY2xhc3Nlcy4KLSAqIEBkcml2ZXI6ICAgICAgICAgICBEcml2ZXIgY2FsbGJhY2tzLgotICoKLSAqIEluaXRpYWxpemUgYSBzdHJ1Y3QgdHRtX2ZlbmNlX2RyaXZlciBzdHJ1Y3R1cmUuIFJldHVybnMgLUVOT01FTSBpZgotICogb3V0LW9mLW1lbW9yeS4gT3RoZXJ3aXNlIHJldHVybnMgMC4KLSAqLwotZXh0ZXJuIGludAotdHRtX2ZlbmNlX2RldmljZV9pbml0KGludCBudW1fY2xhc3NlcywKLQkJICAgICAgc3RydWN0IHR0bV9tZW1fZ2xvYmFsICptZW1fZ2xvYiwKLQkJICAgICAgc3RydWN0IHR0bV9mZW5jZV9kZXZpY2UgKmZkZXYsCi0JCSAgICAgIGNvbnN0IHN0cnVjdCB0dG1fZmVuY2VfY2xhc3NfaW5pdCAqaW5pdCwKLQkJICAgICAgYm9vbCByZXBsaWNhdGVfaW5pdCwKLQkJICAgICAgY29uc3Qgc3RydWN0IHR0bV9mZW5jZV9kcml2ZXIgKmRyaXZlcik7Ci0KLS8qKgotICogZnVuY3Rpb24gdHRtX2ZlbmNlX2RldmljZV9yZWxlYXNlCi0gKgotICogQGZkZXY6ICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGZlbmNlIGRldmljZS4KLSAqCi0gKiBSZWxlYXNlIGFsbCByZXNvdXJjZXMgaGVsZCBieSBhIGZlbmNlIGRldmljZS4gTm90ZSB0aGF0IGJlZm9yZQotICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSBjYWxsZXIgbXVzdCBoYXZlIG1hZGUgc3VyZSBhbGwgZmVuY2UKLSAqIG9iamVjdHMgYmVsb25naW5nIHRvIHRoaXMgZmVuY2UgZGV2aWNlIGFyZSBjb21wbGV0ZWx5IHNpZ25hbGVkLgotICovCi0KLWV4dGVybiB2b2lkIHR0bV9mZW5jZV9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgdHRtX2ZlbmNlX2RldmljZSAqZmRldik7Ci0KLS8qKgotICogdHRtX2ZlbmNlX2hhbmRsZXIgLSB0aGUgZmVuY2UgaGFuZGxlci4KLSAqCi0gKiBAZmRldjogICAgICAgIFBvaW50ZXIgdG8gdGhlIGZlbmNlIGRldmljZS4KLSAqIEBmZW5jZV9jbGFzczogRmVuY2UgY2xhc3MgdGhhdCBzaWduYWxzLgotICogQHNlcXVlbmNlOiAgICBTaWduYWxlZCBzZXF1ZW5jZS4KLSAqIEB0eXBlOiAgICAgICAgVHlwZXMgdGhhdCBzaWduYWwuCi0gKiBAZXJyb3I6ICAgICAgIEVycm9yIGZyb20gdGhlIGVuZ2luZS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHNpZ25hbHMgYWxsIGZlbmNlcyB3aXRoIGEgc2VxdWVuY2UgcHJldmlvdXMgdG8gdGhlCi0gKiBAc2VxdWVuY2UgYXJndW1lbnQsIGFuZCBiZWxvbmdpbmcgdG8gQGZlbmNlX2NsYXNzLiBUaGUgc2lnbmFsZWQgZmVuY2UKLSAqIHR5cGVzIGFyZSBwcm92aWRlZCBpbiBAdHlwZS4gSWYgZXJyb3IgaXMgbm9uLXplcm8sIHRoZSBlcnJvciBtZW1iZXIKLSAqIG9mIHRoZSBmZW5jZSB3aXRoIHNlcXVlbmNlID0gQHNlcXVlbmNlIGlzIHNldCB0byBAZXJyb3IuIFRoaXMgdmFsdWUKLSAqIG1heSBiZSByZXBvcnRlZCBiYWNrIHRvIHVzZXItc3BhY2UsIGluZGljYXRpbmcsIGZvciBleGFtcGxlIGFuIGlsbGVnYWwKLSAqIDNEIGNvbW1hbmQgb3IgaWxsZWdhbCBtcGVnIGRhdGEuCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgY2FsbGVkIGZyb20gdGhlIGRyaXZlcjo6cG9sbCBtZXRob2Qgd2hlbiB0aGUKLSAqIGNvbW1hbmQgc2VxdWVuY2UgcHJlY2VkaW5nIHRoZSBmZW5jZSBtYXJrZXIgaGFzIGV4ZWN1dGVkLiBJdCBzaG91bGQgYmUKLSAqIGNhbGxlZCB3aXRoIHRoZSB0dG1fZmVuY2VfY2xhc3NfbWFuYWdlcjo6bG9jayBoZWxkIGluIHdyaXRlIG1vZGUgYW5kCi0gKiBtYXkgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQuCi0gKi8KLQotZXh0ZXJuIHZvaWQKLXR0bV9mZW5jZV9oYW5kbGVyKHN0cnVjdCB0dG1fZmVuY2VfZGV2aWNlICpmZGV2LAotCQkgIHVpbnQzMl90IGZlbmNlX2NsYXNzLAotCQkgIHVpbnQzMl90IHNlcXVlbmNlLCB1aW50MzJfdCB0eXBlLCB1aW50MzJfdCBlcnJvcik7Ci0KLS8qKgotICogdHRtX2ZlbmNlX2RyaXZlcl9mcm9tX2RldgotICoKLSAqIEBmZGV2OiAgICAgICAgVGhlIHR0bSBmZW5jZSBkZXZpY2UuCi0gKgotICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGZlbmNlIGRyaXZlciBzdHJ1Y3QuCi0gKi8KLQotc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgdHRtX2ZlbmNlX2RyaXZlciAqdHRtX2ZlbmNlX2RyaXZlcl9mcm9tX2RldigKLQkJCQkJCXN0cnVjdCB0dG1fZmVuY2VfZGV2aWNlICpmZGV2KQotewotCXJldHVybiBmZGV2LT5kcml2ZXI7Ci19Ci0KLS8qKgotICogdHRtX2ZlbmNlX2RyaXZlcgotICoKLSAqIEBmZW5jZTogICAgICAgIFBvaW50ZXIgdG8gYSB0dG0gZmVuY2Ugb2JqZWN0LgotICoKLSAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBmZW5jZSBkcml2ZXIgc3RydWN0LgotICovCi0KLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IHR0bV9mZW5jZV9kcml2ZXIgKnR0bV9mZW5jZV9kcml2ZXIoc3RydWN0Ci0JCQkJCQkJICAgICAgdHRtX2ZlbmNlX29iamVjdAotCQkJCQkJCSAgICAgICpmZW5jZSkKLXsKLQlyZXR1cm4gdHRtX2ZlbmNlX2RyaXZlcl9mcm9tX2RldihmZW5jZS0+ZmRldik7Ci19Ci0KLS8qKgotICogdHRtX2ZlbmNlX2ZjCi0gKgotICogQGZlbmNlOiAgICAgICAgUG9pbnRlciB0byBhIHR0bSBmZW5jZSBvYmplY3QuCi0gKgotICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHN0cnVjdCB0dG1fZmVuY2VfY2xhc3NfbWFuYWdlciBmb3IgdGhlCi0gKiBmZW5jZSBjbGFzcyBvZiBAZmVuY2UuCi0gKi8KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgdHRtX2ZlbmNlX2NsYXNzX21hbmFnZXIgKnR0bV9mZW5jZV9mYyhzdHJ1Y3QKLQkJCQkJCQkgICB0dG1fZmVuY2Vfb2JqZWN0Ci0JCQkJCQkJICAgKmZlbmNlKQotewotCXJldHVybiAmZmVuY2UtPmZkZXYtPmZlbmNlX2NsYXNzW2ZlbmNlLT5mZW5jZV9jbGFzc107Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfdHRtX2ZlbmNlX3VzZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX3R0bV9mZW5jZV91c2VyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2Zjk3NGYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfdHRtX2ZlbmNlX3VzZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDIzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCBUdW5nc3RlbiBHcmFwaGljcywgSW5jLiwgQ2VkYXIgUGFyaywgVFguLCBVU0EKLSAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgVk13YXJlLCBJbmMuLCBQYWxvIEFsdG8sIENBLiwgVVNBCi0gKiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAotICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi0gKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIEF1dGhvcnM6IFRob21hcyBIZWxsc3Ryb20gPHRob21hcy1hdC10dW5nc3RlbmdyYXBoaWNzLWRvdC1jb20+Ci0gKi8KLQotI2luY2x1ZGUgPGRybS9kcm1QLmg+Ci0jaW5jbHVkZSAicHNiX3R0bV9mZW5jZV91c2VyLmgiCi0jaW5jbHVkZSAidHRtL3R0bV9vYmplY3QuaCIKLSNpbmNsdWRlICJwc2JfdHRtX2ZlbmNlX2RyaXZlci5oIgotI2luY2x1ZGUgInBzYl90dG1fdXNlcm9ial9hcGkuaCIKLQotLyoqCi0gKiBzdHJ1Y3QgdHRtX2ZlbmNlX3VzZXJfb2JqZWN0Ci0gKgotICogQGJhc2U6ICAgIFRoZSBiYXNlIG9iamVjdCB1c2VkIGZvciB1c2VyLXNwYWNlIHZpc2liaWxpdHkgYW5kIHJlZmNvdW50aW5nLgotICoKLSAqIEBmZW5jZTogICBUaGUgZmVuY2Ugb2JqZWN0IGl0c2VsZi4KLSAqCi0gKi8KLQotc3RydWN0IHR0bV9mZW5jZV91c2VyX29iamVjdCB7Ci0Jc3RydWN0IHR0bV9iYXNlX29iamVjdCBiYXNlOwotCXN0cnVjdCB0dG1fZmVuY2Vfb2JqZWN0IGZlbmNlOwotfTsKLQotc3RhdGljIHN0cnVjdCB0dG1fZmVuY2VfdXNlcl9vYmplY3QgKnR0bV9mZW5jZV91c2VyX29iamVjdF9sb29rdXAoCi0JCQkJCXN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlLAotCQkJCQl1aW50MzJfdCBoYW5kbGUpCi17Ci0Jc3RydWN0IHR0bV9iYXNlX29iamVjdCAqYmFzZTsKLQotCWJhc2UgPSB0dG1fYmFzZV9vYmplY3RfbG9va3VwKHRmaWxlLCBoYW5kbGUpOwotCWlmICh1bmxpa2VseShiYXNlID09IE5VTEwpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBmZW5jZSBoYW5kbGUgMHglMDhseFxuIiwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nKWhhbmRsZSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWlmICh1bmxpa2VseShiYXNlLT5vYmplY3RfdHlwZSAhPSB0dG1fZmVuY2VfdHlwZSkpIHsKLQkJdHRtX2Jhc2Vfb2JqZWN0X3VucmVmKCZiYXNlKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIGZlbmNlIGhhbmRsZSAweCUwOGx4XG4iLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpaGFuZGxlKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JcmV0dXJuIGNvbnRhaW5lcl9vZihiYXNlLCBzdHJ1Y3QgdHRtX2ZlbmNlX3VzZXJfb2JqZWN0LCBiYXNlKTsKLX0KLQotLyoKLSAqIFRoZSBmZW5jZSBvYmplY3QgZGVzdHJ1Y3Rvci4KLSAqLwotCi1zdGF0aWMgdm9pZCB0dG1fZmVuY2VfdXNlcl9kZXN0cm95KHN0cnVjdCB0dG1fZmVuY2Vfb2JqZWN0ICpmZW5jZSkKLXsKLQlzdHJ1Y3QgdHRtX2ZlbmNlX3VzZXJfb2JqZWN0ICp1ZmVuY2UgPQotCSAgICBjb250YWluZXJfb2YoZmVuY2UsIHN0cnVjdCB0dG1fZmVuY2VfdXNlcl9vYmplY3QsIGZlbmNlKTsKLQotCXR0bV9tZW1fZ2xvYmFsX2ZyZWUoZmVuY2UtPmZkZXYtPm1lbV9nbG9iLCBzaXplb2YoKnVmZW5jZSkpOwotCWtmcmVlKHVmZW5jZSk7Ci19Ci0KLS8qCi0gKiBUaGUgYmFzZSBvYmplY3QgZGVzdHJ1Y3Rvci4gV2UgYmFzaWNhbGx5IHVubHkgdW5yZWZlcmVuY2UgdGhlCi0gKiBhdHRhY2hlZCBmZW5jZSBvYmplY3QuCi0gKi8KLQotc3RhdGljIHZvaWQgdHRtX2ZlbmNlX3VzZXJfcmVsZWFzZShzdHJ1Y3QgdHRtX2Jhc2Vfb2JqZWN0ICoqcF9iYXNlKQotewotCXN0cnVjdCB0dG1fZmVuY2VfdXNlcl9vYmplY3QgKnVmZW5jZTsKLQlzdHJ1Y3QgdHRtX2Jhc2Vfb2JqZWN0ICpiYXNlID0gKnBfYmFzZTsKLQlzdHJ1Y3QgdHRtX2ZlbmNlX29iamVjdCAqZmVuY2U7Ci0KLQkqcF9iYXNlID0gTlVMTDsKLQotCWlmICh1bmxpa2VseShiYXNlID09IE5VTEwpKQotCQlyZXR1cm47Ci0KLQl1ZmVuY2UgPSBjb250YWluZXJfb2YoYmFzZSwgc3RydWN0IHR0bV9mZW5jZV91c2VyX29iamVjdCwgYmFzZSk7Ci0JZmVuY2UgPSAmdWZlbmNlLT5mZW5jZTsKLQl0dG1fZmVuY2Vfb2JqZWN0X3VucmVmKCZmZW5jZSk7Ci19Ci0KLWludAotdHRtX2ZlbmNlX3VzZXJfY3JlYXRlKHN0cnVjdCB0dG1fZmVuY2VfZGV2aWNlICpmZGV2LAotCQkgICAgICBzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSwKLQkJICAgICAgdWludDMyX3QgZmVuY2VfY2xhc3MsCi0JCSAgICAgIHVpbnQzMl90IGZlbmNlX3R5cGVzLAotCQkgICAgICB1aW50MzJfdCBjcmVhdGVfZmxhZ3MsCi0JCSAgICAgIHN0cnVjdCB0dG1fZmVuY2Vfb2JqZWN0ICoqZmVuY2UsCi0JCSAgICAgIHVpbnQzMl90ICp1c2VyX2hhbmRsZSkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCB0dG1fZmVuY2Vfb2JqZWN0ICp0bXA7Ci0Jc3RydWN0IHR0bV9mZW5jZV91c2VyX29iamVjdCAqdWZlbmNlOwotCi0JcmV0ID0gdHRtX21lbV9nbG9iYWxfYWxsb2MoZmRldi0+bWVtX2dsb2IsCi0JCQkJICAgc2l6ZW9mKCp1ZmVuY2UpLAotCQkJCSAgIGZhbHNlLAotCQkJCSAgIGZhbHNlKTsKLQlpZiAodW5saWtlbHkocmV0ICE9IDApKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXVmZW5jZSA9IGttYWxsb2Moc2l6ZW9mKCp1ZmVuY2UpLCBHRlBfS0VSTkVMKTsKLQlpZiAodW5saWtlbHkodWZlbmNlID09IE5VTEwpKSB7Ci0JCXR0bV9tZW1fZ2xvYmFsX2ZyZWUoZmRldi0+bWVtX2dsb2IsIHNpemVvZigqdWZlbmNlKSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXJldCA9IHR0bV9mZW5jZV9vYmplY3RfaW5pdChmZGV2LAotCQkJCSAgICBmZW5jZV9jbGFzcywKLQkJCQkgICAgZmVuY2VfdHlwZXMsIGNyZWF0ZV9mbGFncywKLQkJCQkgICAgJnR0bV9mZW5jZV91c2VyX2Rlc3Ryb3ksICZ1ZmVuY2UtPmZlbmNlKTsKLQotCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCi0JCWdvdG8gb3V0X2VycjA7Ci0KLQkvKgotCSAqIE9uZSBmZW5jZSByZWYgaXMgaGVsZCBieSB0aGUgZmVuY2UgcHRyIHdlIHJldHVybi4KLQkgKiBUaGUgb3RoZXIgb25lIGJ5IHRoZSBiYXNlIG9iamVjdC4gTmVlZCB0byB1cCB0aGUKLQkgKiBmZW5jZSByZWZjb3VudCBiZWZvcmUgd2UgcHVibGlzaCB0aGlzIG9iamVjdCB0bwotCSAqIHVzZXItc3BhY2UuCi0JICovCi0KLQl0bXAgPSB0dG1fZmVuY2Vfb2JqZWN0X3JlZigmdWZlbmNlLT5mZW5jZSk7Ci0JcmV0ID0gdHRtX2Jhc2Vfb2JqZWN0X2luaXQodGZpbGUsICZ1ZmVuY2UtPmJhc2UsCi0JCQkJICAgZmFsc2UsIHR0bV9mZW5jZV90eXBlLAotCQkJCSAgICZ0dG1fZmVuY2VfdXNlcl9yZWxlYXNlLCBOVUxMKTsKLQotCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCi0JCWdvdG8gb3V0X2VycjE7Ci0KLQkqZmVuY2UgPSAmdWZlbmNlLT5mZW5jZTsKLQkqdXNlcl9oYW5kbGUgPSB1ZmVuY2UtPmJhc2UuaGFzaC5rZXk7Ci0KLQlyZXR1cm4gMDsKLW91dF9lcnIxOgotCXR0bV9mZW5jZV9vYmplY3RfdW5yZWYoJnRtcCk7Ci0JdG1wID0gJnVmZW5jZS0+ZmVuY2U7Ci0JdHRtX2ZlbmNlX29iamVjdF91bnJlZigmdG1wKTsKLQlyZXR1cm4gcmV0Owotb3V0X2VycjA6Ci0JdHRtX21lbV9nbG9iYWxfZnJlZShmZGV2LT5tZW1fZ2xvYiwgc2l6ZW9mKCp1ZmVuY2UpKTsKLQlrZnJlZSh1ZmVuY2UpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCB0dG1fZmVuY2Vfc2lnbmFsZWRfaW9jdGwoc3RydWN0IHR0bV9vYmplY3RfZmlsZSAqdGZpbGUsIHZvaWQgKmRhdGEpCi17Ci0JaW50IHJldDsKLQl1bmlvbiB0dG1fZmVuY2Vfc2lnbmFsZWRfYXJnICphcmcgPSBkYXRhOwotCXN0cnVjdCB0dG1fZmVuY2Vfb2JqZWN0ICpmZW5jZTsKLQlzdHJ1Y3QgdHRtX2ZlbmNlX2luZm8gaW5mbzsKLQlzdHJ1Y3QgdHRtX2ZlbmNlX3VzZXJfb2JqZWN0ICp1ZmVuY2U7Ci0Jc3RydWN0IHR0bV9iYXNlX29iamVjdCAqYmFzZTsKLQlyZXQgPSAwOwotCi0JdWZlbmNlID0gdHRtX2ZlbmNlX3VzZXJfb2JqZWN0X2xvb2t1cCh0ZmlsZSwgYXJnLT5yZXEuaGFuZGxlKTsKLQlpZiAodW5saWtlbHkodWZlbmNlID09IE5VTEwpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWZlbmNlID0gJnVmZW5jZS0+ZmVuY2U7Ci0KLQlpZiAoYXJnLT5yZXEuZmx1c2gpIHsKLQkJcmV0ID0gdHRtX2ZlbmNlX29iamVjdF9mbHVzaChmZW5jZSwgYXJnLT5yZXEuZmVuY2VfdHlwZSk7Ci0JCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCi0JCQlnb3RvIG91dDsKLQl9Ci0KLQlpbmZvID0gdHRtX2ZlbmNlX2dldF9pbmZvKGZlbmNlKTsKLQlhcmctPnJlcC5zaWduYWxlZF90eXBlcyA9IGluZm8uc2lnbmFsZWRfdHlwZXM7Ci0JYXJnLT5yZXAuZmVuY2VfZXJyb3IgPSBpbmZvLmVycm9yOwotCi1vdXQ6Ci0JYmFzZSA9ICZ1ZmVuY2UtPmJhc2U7Ci0JdHRtX2Jhc2Vfb2JqZWN0X3VucmVmKCZiYXNlKTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgdHRtX2ZlbmNlX2ZpbmlzaF9pb2N0bChzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSwgdm9pZCAqZGF0YSkKLXsKLQlpbnQgcmV0OwotCXVuaW9uIHR0bV9mZW5jZV9maW5pc2hfYXJnICphcmcgPSBkYXRhOwotCXN0cnVjdCB0dG1fZmVuY2VfdXNlcl9vYmplY3QgKnVmZW5jZTsKLQlzdHJ1Y3QgdHRtX2Jhc2Vfb2JqZWN0ICpiYXNlOwotCXN0cnVjdCB0dG1fZmVuY2Vfb2JqZWN0ICpmZW5jZTsKLQlyZXQgPSAwOwotCi0JdWZlbmNlID0gdHRtX2ZlbmNlX3VzZXJfb2JqZWN0X2xvb2t1cCh0ZmlsZSwgYXJnLT5yZXEuaGFuZGxlKTsKLQlpZiAodW5saWtlbHkodWZlbmNlID09IE5VTEwpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWZlbmNlID0gJnVmZW5jZS0+ZmVuY2U7Ci0KLQlyZXQgPSB0dG1fZmVuY2Vfb2JqZWN0X3dhaXQoZmVuY2UsCi0JCQkJICAgIGFyZy0+cmVxLm1vZGUgJiBUVE1fRkVOQ0VfRklOSVNIX01PREVfTEFaWSwKLQkJCQkgICAgdHJ1ZSwgYXJnLT5yZXEuZmVuY2VfdHlwZSk7Ci0JaWYgKGxpa2VseShyZXQgPT0gMCkpIHsKLQkJc3RydWN0IHR0bV9mZW5jZV9pbmZvIGluZm8gPSB0dG1fZmVuY2VfZ2V0X2luZm8oZmVuY2UpOwotCi0JCWFyZy0+cmVwLnNpZ25hbGVkX3R5cGVzID0gaW5mby5zaWduYWxlZF90eXBlczsKLQkJYXJnLT5yZXAuZmVuY2VfZXJyb3IgPSBpbmZvLmVycm9yOwotCX0KLQotCWJhc2UgPSAmdWZlbmNlLT5iYXNlOwotCXR0bV9iYXNlX29iamVjdF91bnJlZigmYmFzZSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgdHRtX2ZlbmNlX3VucmVmX2lvY3RsKHN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCB0dG1fZmVuY2VfdW5yZWZfYXJnICphcmcgPSBkYXRhOwotCWludCByZXQgPSAwOwotCi0JcmV0ID0gdHRtX3JlZl9vYmplY3RfYmFzZV91bnJlZih0ZmlsZSwgYXJnLT5oYW5kbGUsIHR0bV9mZW5jZV90eXBlKTsKLQlyZXR1cm4gcmV0OwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfdHRtX2ZlbmNlX3VzZXIuaCBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX3R0bV9mZW5jZV91c2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2MmEwNTcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfdHRtX2ZlbmNlX3VzZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBDb3B5cmlnaHQgMjAwNi0yMDA4IFR1bmdzdGVuIEdyYXBoaWNzLCBJbmMuLCBDZWRhciBQYXJrLCBUWC4sIFVTQQotICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOSBWTXdhcmUsIEluYy4sIFBhbG8gQWx0bywgQ0EuLCBVU0EKLSAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCi0gKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKLSAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogQXV0aG9ycwotICogVGhvbWFzIEhlbGxzdHLDtm0gPHRob21hcy1hdC10dW5nc3RlbmdyYXBoaWNzLWRvdC1jb20+Ci0gKi8KLQotI2lmbmRlZiBUVE1fRkVOQ0VfVVNFUl9ICi0jZGVmaW5lIFRUTV9GRU5DRV9VU0VSX0gKLQotI2lmICFkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKF9LRVJORUwpCi0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jZW5kaWYKLQotI2RlZmluZSBUVE1fRkVOQ0VfTUFKT1IgMAotI2RlZmluZSBUVE1fRkVOQ0VfTUlOT1IgMQotI2RlZmluZSBUVE1fRkVOQ0VfUEwgICAgMAotI2RlZmluZSBUVE1fRkVOQ0VfREFURSAgIjA4MDgxOSIKLQotLyoqCi0gKiBzdHJ1Y3QgdHRtX2ZlbmNlX3NpZ25hbGVkX3JlcQotICoKLSAqIEBoYW5kbGU6IEhhbmRsZSB0byB0aGUgZmVuY2Ugb2JqZWN0LiBJbnB1dC4KLSAqCi0gKiBAZmVuY2VfdHlwZTogRmVuY2UgdHlwZXMgd2Ugd2FudCB0byBmbHVzaC4gSW5wdXQuCi0gKgotICogQGZsdXNoOiBCb29sZWFuLiBGbHVzaCB0aGUgaW5kaWNhdGVkIGZlbmNlX3R5cGVzLiBJbnB1dC4KLSAqCi0gKiBBcmd1bWVudCB0byB0aGUgVFRNX0ZFTkNFX1NJR05BTEVEIGlvY3RsLgotICovCi0KLXN0cnVjdCB0dG1fZmVuY2Vfc2lnbmFsZWRfcmVxIHsKLQl1aW50MzJfdCBoYW5kbGU7Ci0JdWludDMyX3QgZmVuY2VfdHlwZTsKLQlpbnQzMl90IGZsdXNoOwotCXVpbnQzMl90IHBhZDY0OwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgdHRtX2ZlbmNlX3JlcAotICoKLSAqIEBzaWduYWxlZF90eXBlczogRmVuY2UgdHlwZSB0aGF0IGhhcyBzaWduYWxlZC4KLSAqCi0gKiBAZmVuY2VfZXJyb3I6IENvbW1hbmQgZXhlY3V0aW9uIGVycm9yLgotICogSGFyZHdhcmUgZXJyb3JzIHRoYXQgYXJlIGNvbnNlcXVlbmNlcyBvZiB0aGUgZXhlY3V0aW9uCi0gKiBvZiB0aGUgY29tbWFuZCBzdHJlYW0gcHJlY2VkaW5nIHRoZSBmZW5jZSBhcmUgcmVwb3J0ZWQKLSAqIGhlcmUuCi0gKgotICogT3V0cHV0IGFyZ3VtZW50IHRvIHRoZSBUVE1fRkVOQ0VfU0lHTkFMRUQgYW5kCi0gKiBUVE1fRkVOQ0VfRklOSVNIIGlvY3Rscy4KLSAqLwotCi1zdHJ1Y3QgdHRtX2ZlbmNlX3JlcCB7Ci0JdWludDMyX3Qgc2lnbmFsZWRfdHlwZXM7Ci0JdWludDMyX3QgZmVuY2VfZXJyb3I7Ci19OwotCi11bmlvbiB0dG1fZmVuY2Vfc2lnbmFsZWRfYXJnIHsKLQlzdHJ1Y3QgdHRtX2ZlbmNlX3NpZ25hbGVkX3JlcSByZXE7Ci0Jc3RydWN0IHR0bV9mZW5jZV9yZXAgcmVwOwotfTsKLQotLyoKLSAqIFdhaXRpbmcgbW9kZSBmbGFncyBmb3IgdGhlIFRUTV9GRU5DRV9GSU5JU0ggaW9jdGwuCi0gKgotICogVFRNX0ZFTkNFX0ZJTklTSF9NT0RFX0xBWlk6IEFsbG93IGZvciBzbGVlcHMgZHVyaW5nIHBvbGxpbmcKLSAqIHdhaXQuCi0gKgotICogVFRNX0ZFTkNFX0ZJTklTSF9NT0RFX05PX0JMT0NLOiBEb24ndCBibG9jayB3YWl0aW5nIGZvciBHUFUsCi0gKiBidXQgcmV0dXJuIC1FQlVTWSBpZiB0aGUgYnVmZmVyIGlzIGJ1c3kuCi0gKi8KLQotI2RlZmluZSBUVE1fRkVOQ0VfRklOSVNIX01PREVfTEFaWSAgICAgKDEgPDwgMCkKLSNkZWZpbmUgVFRNX0ZFTkNFX0ZJTklTSF9NT0RFX05PX0JMT0NLICgxIDw8IDEpCi0KLS8qKgotICogc3RydWN0IHR0bV9mZW5jZV9maW5pc2hfcmVxCi0gKgotICogQGhhbmRsZTogSGFuZGxlIHRvIHRoZSBmZW5jZSBvYmplY3QuIElucHV0LgotICoKLSAqIEBmZW5jZV90eXBlOiBGZW5jZSB0eXBlcyB3ZSB3YW50IHRvIGZpbmlzaC4KLSAqCi0gKiBAbW9kZTogV2FpdCBtb2RlLgotICoKLSAqIElucHV0IHRvIHRoZSBUVE1fRkVOQ0VfRklOSVNIIGlvY3RsLgotICovCi0KLXN0cnVjdCB0dG1fZmVuY2VfZmluaXNoX3JlcSB7Ci0JdWludDMyX3QgaGFuZGxlOwotCXVpbnQzMl90IGZlbmNlX3R5cGU7Ci0JdWludDMyX3QgbW9kZTsKLQl1aW50MzJfdCBwYWQ2NDsKLX07Ci0KLXVuaW9uIHR0bV9mZW5jZV9maW5pc2hfYXJnIHsKLQlzdHJ1Y3QgdHRtX2ZlbmNlX2ZpbmlzaF9yZXEgcmVxOwotCXN0cnVjdCB0dG1fZmVuY2VfcmVwIHJlcDsKLX07Ci0KLS8qKgotICogc3RydWN0IHR0bV9mZW5jZV91bnJlZl9hcmcKLSAqCi0gKiBAaGFuZGxlOiBIYW5kbGUgdG8gdGhlIGZlbmNlIG9iamVjdC4KLSAqCi0gKiBBcmd1bWVudCB0byB0aGUgVFRNX0ZFTkNFX1VOUkVGIGlvY3RsLgotICovCi0KLXN0cnVjdCB0dG1fZmVuY2VfdW5yZWZfYXJnIHsKLQl1aW50MzJfdCBoYW5kbGU7Ci0JdWludDMyX3QgcGFkNjQ7Ci19OwotCi0vKgotICogSW9jdGwgb2Zmc2V0cyBmcm9tIGV4dGVuc3Rpb24gc3RhcnQuCi0gKi8KLQotI2RlZmluZSBUVE1fRkVOQ0VfU0lHTkFMRUQgMHgwMQotI2RlZmluZSBUVE1fRkVOQ0VfRklOSVNIICAgMHgwMgotI2RlZmluZSBUVE1fRkVOQ0VfVU5SRUYgICAgMHgwMwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX3R0bV9nbHVlLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl90dG1fZ2x1ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWQ5NjVlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX3R0bV9nbHVlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsIEludGVsIENvcnBvcmF0aW9uLgotICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOCwgVHVuZ3N0ZW4gR3JhcGhpY3MgSW5jLiAgQ2VkYXIgUGFyaywgVFguLCBVU0EuCi0gKiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAotICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi0gKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLSNpbmNsdWRlIDxkcm0vZHJtUC5oPgotI2luY2x1ZGUgInBzYl9kcnYuaCIKLSNpbmNsdWRlICJwc2JfdHRtX3VzZXJvYmpfYXBpLmgiCi0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHBzYl90dG1fdm1fb3BzOwotCi0vKioKLSAqIE5PVEU6IGRyaXZlcl9wcml2YXRlIG9mIGRybV9maWxlIGlzIG5vdyBhIHN0cnVjdCBwc2JfZmlsZV9kYXRhIHN0cnVjdAotICogcFByaXYgaW4gc3RydWN0IHBzYl9maWxlX2RhdGEgY29udGFpbnMgdGhlIG9yaWdpbmFsIHBzYl9mcHJpdjsKLSAqLwotaW50IHBzYl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQotewotCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2OwotCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2OwotCXN0cnVjdCBwc2JfZnByaXYgKnBzYl9mcDsKLQlzdHJ1Y3QgcHNiX2ZpbGVfZGF0YSAqcHZyX2ZpbGVfcHJpdjsKLQlpbnQgcmV0OwotCi0JRFJNX0RFQlVHKCJcbiIpOwotCi0JcmV0ID0gZHJtX29wZW4oaW5vZGUsIGZpbHApOwotCWlmICh1bmxpa2VseShyZXQpKQotCQlyZXR1cm4gcmV0OwotCi0JcHNiX2ZwID0ga3phbGxvYyhzaXplb2YoKnBzYl9mcCksIEdGUF9LRVJORUwpOwotCi0JaWYgKHVubGlrZWx5KHBzYl9mcCA9PSBOVUxMKSkKLQkJZ290byBvdXRfZXJyMDsKLQotCWZpbGVfcHJpdiA9IChzdHJ1Y3QgZHJtX2ZpbGUgKikgZmlscC0+cHJpdmF0ZV9kYXRhOwotCWRldl9wcml2ID0gcHNiX3ByaXYoZmlsZV9wcml2LT5taW5vci0+ZGV2KTsKLQotCURSTV9ERUJVRygiaXNfbWFzdGVyICVkXG4iLCBmaWxlX3ByaXYtPmlzX21hc3RlciA/IDEgOiAwKTsKLQotCXBzYl9mcC0+dGZpbGUgPSB0dG1fb2JqZWN0X2ZpbGVfaW5pdChkZXZfcHJpdi0+dGRldiwKLQkJCQkJICAgICBQU0JfRklMRV9PQkpFQ1RfSEFTSF9PUkRFUik7Ci0JaWYgKHVubGlrZWx5KHBzYl9mcC0+dGZpbGUgPT0gTlVMTCkpCi0JCWdvdG8gb3V0X2VycjE7Ci0KLQlwdnJfZmlsZV9wcml2ID0gKHN0cnVjdCBwc2JfZmlsZV9kYXRhICopZmlsZV9wcml2LT5kcml2ZXJfcHJpdjsKLQlpZiAoIXB2cl9maWxlX3ByaXYpIHsKLQkJRFJNX0VSUk9SKCJkcm0gZmlsZSBwcml2YXRlIGlzIE5VTExcbiIpOwotCQlnb3RvIG91dF9lcnIxOwotCX0KLQotCXB2cl9maWxlX3ByaXYtPnByaXYgPSBwc2JfZnA7Ci0JaWYgKHVubGlrZWx5KGRldl9wcml2LT5iZGV2LmRldl9tYXBwaW5nID09IE5VTEwpKQotCQlkZXZfcHJpdi0+YmRldi5kZXZfbWFwcGluZyA9IGRldl9wcml2LT5kZXYtPmRldl9tYXBwaW5nOwotCi0JcmV0dXJuIDA7Ci0KLW91dF9lcnIxOgotCWtmcmVlKHBzYl9mcCk7Ci1vdXRfZXJyMDoKLQkodm9pZCkgZHJtX3JlbGVhc2UoaW5vZGUsIGZpbHApOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCBwc2JfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdjsKLQlzdHJ1Y3QgcHNiX2Zwcml2ICpwc2JfZnA7Ci0Jc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXY7Ci0JaW50IHJldDsKLQlmaWxlX3ByaXYgPSAoc3RydWN0IGRybV9maWxlICopIGZpbHAtPnByaXZhdGVfZGF0YTsKLQlwc2JfZnAgPSBwc2JfZnByaXYoZmlsZV9wcml2KTsKLQlkZXZfcHJpdiA9IHBzYl9wcml2KGZpbGVfcHJpdi0+bWlub3ItPmRldik7Ci0KLQl0dG1fb2JqZWN0X2ZpbGVfcmVsZWFzZSgmcHNiX2ZwLT50ZmlsZSk7Ci0Ja2ZyZWUocHNiX2ZwKTsKLQotCXJldCA9IGRybV9yZWxlYXNlKGlub2RlLCBmaWxwKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLWludCBwc2JfZmVuY2Vfc2lnbmFsZWRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKLQkJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCi17Ci0KLQlyZXR1cm4gdHRtX2ZlbmNlX3NpZ25hbGVkX2lvY3RsKHBzYl9mcHJpdihmaWxlX3ByaXYpLT50ZmlsZSwgZGF0YSk7Ci19Ci0KLWludCBwc2JfZmVuY2VfZmluaXNoX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCi0JCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKLXsKLQlyZXR1cm4gdHRtX2ZlbmNlX2ZpbmlzaF9pb2N0bChwc2JfZnByaXYoZmlsZV9wcml2KS0+dGZpbGUsIGRhdGEpOwotfQotCi1pbnQgcHNiX2ZlbmNlX3VucmVmX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCi0JCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQotewotCXJldHVybiB0dG1fZmVuY2VfdW5yZWZfaW9jdGwocHNiX2Zwcml2KGZpbGVfcHJpdiktPnRmaWxlLCBkYXRhKTsKLX0KLQotaW50IHBzYl9wbF93YWl0aWRsZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAotCQkJICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKLXsKLQlyZXR1cm4gdHRtX3BsX3dhaXRpZGxlX2lvY3RsKHBzYl9mcHJpdihmaWxlX3ByaXYpLT50ZmlsZSwgZGF0YSk7Ci19Ci0KLWludCBwc2JfcGxfc2V0c3RhdHVzX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCi0JCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKLXsKLQlyZXR1cm4gdHRtX3BsX3NldHN0YXR1c19pb2N0bChwc2JfZnByaXYoZmlsZV9wcml2KS0+dGZpbGUsCi0JCQkJICAgICAgJnBzYl9wcml2KGRldiktPnR0bV9sb2NrLCBkYXRhKTsKLQotfQotCi1pbnQgcHNiX3BsX3N5bmNjcHVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKLQkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKLXsKLQlyZXR1cm4gdHRtX3BsX3N5bmNjcHVfaW9jdGwocHNiX2Zwcml2KGZpbGVfcHJpdiktPnRmaWxlLCBkYXRhKTsKLX0KLQotaW50IHBzYl9wbF91bnJlZl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAotCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCi17Ci0JcmV0dXJuIHR0bV9wbF91bnJlZl9pb2N0bChwc2JfZnByaXYoZmlsZV9wcml2KS0+dGZpbGUsIGRhdGEpOwotCi19Ci0KLWludCBwc2JfcGxfcmVmZXJlbmNlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCi0JCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKLXsKLQlyZXR1cm4gIHR0bV9wbF9yZWZlcmVuY2VfaW9jdGwocHNiX2Zwcml2KGZpbGVfcHJpdiktPnRmaWxlLCBkYXRhKTsKLQotfQotCi1pbnQgcHNiX3BsX2NyZWF0ZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAotCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCi17Ci0Jc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBwc2JfcHJpdihkZXYpOwotCi0JcmV0dXJuIHR0bV9wbF9jcmVhdGVfaW9jdGwocHNiX2Zwcml2KGZpbGVfcHJpdiktPnRmaWxlLAotCQkJCSAgICZkZXZfcHJpdi0+YmRldiwgJmRldl9wcml2LT50dG1fbG9jaywgZGF0YSk7Ci0KLX0KLQotaW50IHBzYl9wbF91Yl9jcmVhdGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKLQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQotewotCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gcHNiX3ByaXYoZGV2KTsKLQotCXJldHVybiB0dG1fcGxfdWJfY3JlYXRlX2lvY3RsKHBzYl9mcHJpdihmaWxlX3ByaXYpLT50ZmlsZSwKLQkJCQkgICAmZGV2X3ByaXYtPmJkZXYsICZkZXZfcHJpdi0+dHRtX2xvY2ssIGRhdGEpOwotCi19Ci0vKioKLSAqIHBzYl90dG1fZmF1bHQgLSBXcmFwcGVyIGFyb3VuZCB0aGUgdHRtIGZhdWx0IG1ldGhvZC4KLSAqCi0gKiBAdm1hOiBUaGUgc3RydWN0IHZtX2FyZWFfc3RydWN0IGFzIGluIHRoZSB2bSBmYXVsdCgpIG1ldGhvZC4KLSAqIEB2bWY6IFRoZSBzdHJ1Y3Qgdm1fZmF1bHQgYXMgaW4gdGhlIHZtIGZhdWx0KCkgbWV0aG9kLgotICoKLSAqIFNpbmNlIHR0bV9mYXVsdCgpIHdpbGwgcmVzZXJ2ZSBidWZmZXJzIHdoaWxlIGZhdWx0aW5nLAotICogd2UgbmVlZCB0byB0YWtlIHRoZSB0dG0gcmVhZCBsb2NrIGFyb3VuZCBpdCwgYXMgdGhpcyBkcml2ZXIKLSAqIHJlbGllcyBvbiB0aGUgdHRtX2xvY2sgaW4gd3JpdGUgbW9kZSB0byBleGNsdWRlIGFsbCB0aHJlYWRzIGZyb20KLSAqIHJlc2VydmluZyBhbmQgdGh1cyB2YWxpZGF0aW5nIGJ1ZmZlcnMgaW4gYXBlcnR1cmUtIGFuZCBtZW1vcnkgc2hvcnRhZ2UKLSAqIHNpdHVhdGlvbnMuCi0gKi8KLQotc3RhdGljIGludCBwc2JfdHRtX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQotewotCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8gPSAoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICopCi0JCXZtYS0+dm1fcHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0KLQkJY29udGFpbmVyX29mKGJvLT5iZGV2LCBzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlLCBiZGV2KTsKLQlpbnQgcmV0OwotCi0JcmV0ID0gdHRtX3JlYWRfbG9jaygmZGV2X3ByaXYtPnR0bV9sb2NrLCB0cnVlKTsKLQlpZiAodW5saWtlbHkocmV0ICE9IDApKQotCQlyZXR1cm4gVk1fRkFVTFRfTk9QQUdFOwotCi0JcmV0ID0gZGV2X3ByaXYtPnR0bV92bV9vcHMtPmZhdWx0KHZtYSwgdm1mKTsKLQotCXR0bV9yZWFkX3VubG9jaygmZGV2X3ByaXYtPnR0bV9sb2NrKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGlmIHZtX3Bnb2ZmIDwgRFJNX1BTQl9GSUxFX1BBR0VfT0ZGU0VUIGNhbGwgZGlyZWN0bHkgdG8KLSAqIFBWUk1NYXAKLSAqLwotaW50IHBzYl9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdjsKLQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdjsKLQlpbnQgcmV0OwotCi0JaWYgKHZtYS0+dm1fcGdvZmYgPCBEUk1fUFNCX0ZJTEVfUEFHRV9PRkZTRVQgfHwKLQkgICAgdm1hLT52bV9wZ29mZiA+IDIgKiBEUk1fUFNCX0ZJTEVfUEFHRV9PRkZTRVQpCi0jaWYgMAkJLyogRklYTUVBQyAqLwotCQlyZXR1cm4gUFZSTU1hcChmaWxwLCB2bWEpOwotI2Vsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci0jZW5kaWYKLQotCWZpbGVfcHJpdiA9IChzdHJ1Y3QgZHJtX2ZpbGUgKikgZmlscC0+cHJpdmF0ZV9kYXRhOwotCWRldl9wcml2ID0gcHNiX3ByaXYoZmlsZV9wcml2LT5taW5vci0+ZGV2KTsKLQotCXJldCA9IHR0bV9ib19tbWFwKGZpbHAsIHZtYSwgJmRldl9wcml2LT5iZGV2KTsKLQlpZiAodW5saWtlbHkocmV0ICE9IDApKQotCQlyZXR1cm4gcmV0OwotCi0JaWYgKHVubGlrZWx5KGRldl9wcml2LT50dG1fdm1fb3BzID09IE5VTEwpKSB7Ci0JCWRldl9wcml2LT50dG1fdm1fb3BzID0gKHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAqKQotCQkJCQkJCQl2bWEtPnZtX29wczsKLQkJcHNiX3R0bV92bV9vcHMgPSAqdm1hLT52bV9vcHM7Ci0JCXBzYl90dG1fdm1fb3BzLmZhdWx0ID0gJnBzYl90dG1fZmF1bHQ7Ci0JfQotCi0Jdm1hLT52bV9vcHMgPSAmcHNiX3R0bV92bV9vcHM7Ci0KLQlyZXR1cm4gMDsKLX0KLS8qCi1zc2l6ZV90IHBzYl90dG1fd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCi0JCSAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpmX3BvcykKLXsKLQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiA9IChzdHJ1Y3QgZHJtX2ZpbGUgKilmaWxwLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBwc2JfcHJpdihmaWxlX3ByaXYtPm1pbm9yLT5kZXYpOwotCi0JcmV0dXJuIHR0bV9ib19pbygmZGV2X3ByaXYtPmJkZXYsIGZpbHAsIGJ1ZiwgTlVMTCwgY291bnQsIGZfcG9zLCAxKTsKLX0KLQotc3NpemVfdCBwc2JfdHRtX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsCi0JCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmZfcG9zKQotewotCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2ID0gKHN0cnVjdCBkcm1fZmlsZSAqKWZpbHAtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IHBzYl9wcml2KGZpbGVfcHJpdi0+bWlub3ItPmRldik7Ci0KLQlyZXR1cm4gdHRtX2JvX2lvKCZkZXZfcHJpdi0+YmRldiwgZmlscCwgTlVMTCwgYnVmLCBjb3VudCwgZl9wb3MsIDEpOwotfQotKi8KLWludCBwc2JfdmVyaWZ5X2FjY2VzcyhzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAotCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiA9IChzdHJ1Y3QgZHJtX2ZpbGUgKilmaWxwLT5wcml2YXRlX2RhdGE7Ci0KLQlpZiAoY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAodW5saWtlbHkoIWZpbGVfcHJpdi0+YXV0aGVudGljYXRlZCkpCi0JCXJldHVybiAtRVBFUk07Ci0KLQlyZXR1cm4gdHRtX3BsX3ZlcmlmeV9hY2Nlc3MoYm8sIHBzYl9mcHJpdihmaWxlX3ByaXYpLT50ZmlsZSk7Ci19Ci0KLXN0YXRpYyBpbnQgcHNiX3R0bV9tZW1fZ2xvYmFsX2luaXQoc3RydWN0IGRybV9nbG9iYWxfcmVmZXJlbmNlICpyZWYpCi17Ci0JcmV0dXJuIHR0bV9tZW1fZ2xvYmFsX2luaXQocmVmLT5vYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZCBwc2JfdHRtX21lbV9nbG9iYWxfcmVsZWFzZShzdHJ1Y3QgZHJtX2dsb2JhbF9yZWZlcmVuY2UgKnJlZikKLXsKLQl0dG1fbWVtX2dsb2JhbF9yZWxlYXNlKHJlZi0+b2JqZWN0KTsKLX0KLQotaW50IHBzYl90dG1fZ2xvYmFsX2luaXQoc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0Jc3RydWN0IGRybV9nbG9iYWxfcmVmZXJlbmNlICpnbG9iYWxfcmVmOwotCWludCByZXQ7Ci0KLQlnbG9iYWxfcmVmID0gJmRldl9wcml2LT5tZW1fZ2xvYmFsX3JlZjsKLQlnbG9iYWxfcmVmLT5nbG9iYWxfdHlwZSA9IERSTV9HTE9CQUxfVFRNX01FTTsKLQlnbG9iYWxfcmVmLT5zaXplID0gc2l6ZW9mKHN0cnVjdCB0dG1fbWVtX2dsb2JhbCk7Ci0JZ2xvYmFsX3JlZi0+aW5pdCA9ICZwc2JfdHRtX21lbV9nbG9iYWxfaW5pdDsKLQlnbG9iYWxfcmVmLT5yZWxlYXNlID0gJnBzYl90dG1fbWVtX2dsb2JhbF9yZWxlYXNlOwotCi0JcmV0ID0gZHJtX2dsb2JhbF9pdGVtX3JlZihnbG9iYWxfcmVmKTsKLQlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHJlZmVyZW5jaW5nIGEgZ2xvYmFsIFRUTSBtZW1vcnkgb2JqZWN0LlxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JZGV2X3ByaXYtPmJvX2dsb2JhbF9yZWYubWVtX2dsb2IgPSBkZXZfcHJpdi0+bWVtX2dsb2JhbF9yZWYub2JqZWN0OwotCWdsb2JhbF9yZWYgPSAmZGV2X3ByaXYtPmJvX2dsb2JhbF9yZWYucmVmOwotCWdsb2JhbF9yZWYtPmdsb2JhbF90eXBlID0gRFJNX0dMT0JBTF9UVE1fQk87Ci0JZ2xvYmFsX3JlZi0+c2l6ZSA9IHNpemVvZihzdHJ1Y3QgdHRtX2JvX2dsb2JhbCk7Ci0JZ2xvYmFsX3JlZi0+aW5pdCA9ICZ0dG1fYm9fZ2xvYmFsX2luaXQ7Ci0JZ2xvYmFsX3JlZi0+cmVsZWFzZSA9ICZ0dG1fYm9fZ2xvYmFsX3JlbGVhc2U7Ci0JcmV0ID0gZHJtX2dsb2JhbF9pdGVtX3JlZihnbG9iYWxfcmVmKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJRFJNX0VSUk9SKCJGYWlsZWQgc2V0dGluZyB1cCBUVE0gQk8gc3Vic3lzdGVtLlxuIik7Ci0JCWRybV9nbG9iYWxfaXRlbV91bnJlZihnbG9iYWxfcmVmKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgcHNiX3R0bV9nbG9iYWxfcmVsZWFzZShzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlkcm1fZ2xvYmFsX2l0ZW1fdW5yZWYoJmRldl9wcml2LT5tZW1fZ2xvYmFsX3JlZik7Ci19Ci0KLWludCBwc2JfZ2V0cGFnZWFkZHJzX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCi0JCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQotewotCXN0cnVjdCBkcm1fcHNiX2dldHBhZ2VhZGRyc19hcmcgKmFyZyA9IGRhdGE7Ci0Jc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibzsKLQlzdHJ1Y3QgdHRtX3R0ICp0dG07Ci0Jc3RydWN0IHBhZ2UgKip0dF9wYWdlczsKLQl1bnNpZ25lZCBsb25nIGksIG51bV9wYWdlczsKLQl1bnNpZ25lZCBsb25nICpwID0gYXJnLT5wYWdlX2FkZHJzOwotCWludCByZXQgPSAwOwotCi0JYm8gPSB0dG1fYnVmZmVyX29iamVjdF9sb29rdXAocHNiX2Zwcml2KGZpbGVfcHJpdiktPnRmaWxlLAotCQkJCQlhcmctPmhhbmRsZSk7Ci0JaWYgKHVubGlrZWx5KGJvID09IE5VTEwpKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkJIkNvdWxkIG5vdCBmaW5kIGJ1ZmZlciBvYmplY3QgZm9yIGdldHBhZ2VhZGRycy5cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlhcmctPmd0dF9vZmZzZXQgPSBiby0+b2Zmc2V0OwotCXR0bSA9IGJvLT50dG07Ci0JbnVtX3BhZ2VzID0gdHRtLT5udW1fcGFnZXM7Ci0JdHRfcGFnZXMgPSB0dG0tPnBhZ2VzOwotCi0JZm9yIChpID0gMDsgaSA8IG51bV9wYWdlczsgaSsrKQotCQlwW2ldID0gKHVuc2lnbmVkIGxvbmcpcGFnZV90b19waHlzKHR0X3BhZ2VzW2ldKTsKLQotCXJldHVybiByZXQ7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl90dG1fcGxhY2VtZW50X3VzZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX3R0bV9wbGFjZW1lbnRfdXNlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzJiMzk3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX3R0bV9wbGFjZW1lbnRfdXNlci5jCisrKyAvZGV2L251bGwKQEAgLTEsNjI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA4IFR1bmdzdGVuIEdyYXBoaWNzLCBJbmMuLCBDZWRhciBQYXJrLCBUWC4sIFVTQQotICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKLSAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAotICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBBdXRob3JzOiBUaG9tYXMgSGVsbHN0cm9tIDx0aG9tYXMtYXQtdHVuZ3N0ZW5ncmFwaGljcy1kb3QtY29tPgotICovCi0KLSNpbmNsdWRlICJwc2JfdHRtX3BsYWNlbWVudF91c2VyLmgiCi0jaW5jbHVkZSAidHRtL3R0bV9ib19kcml2ZXIuaCIKLSNpbmNsdWRlICJ0dG0vdHRtX29iamVjdC5oIgotI2luY2x1ZGUgInBzYl90dG1fdXNlcm9ial9hcGkuaCIKLSNpbmNsdWRlICJ0dG0vdHRtX2xvY2suaCIKLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLQotc3RydWN0IHR0bV9ib191c2VyX29iamVjdCB7Ci0Jc3RydWN0IHR0bV9iYXNlX29iamVjdCBiYXNlOwotCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCBibzsKLX07Ci0KLXN0YXRpYyBzaXplX3QgcGxfYm9fc2l6ZTsKLQotc3RhdGljIHVpbnQzMl90IHBzYl9idXN5X3ByaW9zW10gPSB7Ci0JVFRNX1BMX1RULAotCVRUTV9QTF9QUklWMCwgLyogQ0kgKi8KLQlUVE1fUExfUFJJVjIsIC8qIFJBUiAqLwotCVRUTV9QTF9QUklWMSwgLyogRFJNX1BTQl9NRU1fTU1VICovCi0JVFRNX1BMX1NZU1RFTQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB0dG1fcGxhY2VtZW50IGRlZmF1bHRfcGxhY2VtZW50ID0gewotCQkJCTAsIDAsIDAsIE5VTEwsIDUsIHBzYl9idXN5X3ByaW9zCi19OwotCi1zdGF0aWMgc2l6ZV90IHR0bV9wbF9zaXplKHN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2LCB1bnNpZ25lZCBsb25nIG51bV9wYWdlcykKLXsKLQlzaXplX3QgcGFnZV9hcnJheV9zaXplID0KLQkgICAgKG51bV9wYWdlcyAqIHNpemVvZih2b2lkICopICsgUEFHRV9TSVpFIC0gMSkgJiBQQUdFX01BU0s7Ci0KLQlpZiAodW5saWtlbHkocGxfYm9fc2l6ZSA9PSAwKSkgewotCQlwbF9ib19zaXplID0gYmRldi0+Z2xvYi0+dHRtX2JvX2V4dHJhX3NpemUgKwotCQkgICAgdHRtX3JvdW5kX3BvdChzaXplb2Yoc3RydWN0IHR0bV9ib191c2VyX29iamVjdCkpOwotCX0KLQotCXJldHVybiBiZGV2LT5nbG9iLT50dG1fYm9fc2l6ZSArIDIgKiBwYWdlX2FycmF5X3NpemU7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdHRtX2JvX3VzZXJfb2JqZWN0ICp0dG1fYm9fdXNlcl9sb29rdXAoc3RydWN0IHR0bV9vYmplY3RfZmlsZQotCQkJCQkJICAgICAqdGZpbGUsIHVpbnQzMl90IGhhbmRsZSkKLXsKLQlzdHJ1Y3QgdHRtX2Jhc2Vfb2JqZWN0ICpiYXNlOwotCi0JYmFzZSA9IHR0bV9iYXNlX29iamVjdF9sb29rdXAodGZpbGUsIGhhbmRsZSk7Ci0JaWYgKHVubGlrZWx5KGJhc2UgPT0gTlVMTCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIGJ1ZmZlciBvYmplY3QgaGFuZGxlIDB4JTA4bHguXG4iLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpaGFuZGxlKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JaWYgKHVubGlrZWx5KGJhc2UtPm9iamVjdF90eXBlICE9IHR0bV9idWZmZXJfdHlwZSkpIHsKLQkJdHRtX2Jhc2Vfb2JqZWN0X3VucmVmKCZiYXNlKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIGJ1ZmZlciBvYmplY3QgaGFuZGxlIDB4JTA4bHguXG4iLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpaGFuZGxlKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JcmV0dXJuIGNvbnRhaW5lcl9vZihiYXNlLCBzdHJ1Y3QgdHRtX2JvX3VzZXJfb2JqZWN0LCBiYXNlKTsKLX0KLQotc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICp0dG1fYnVmZmVyX29iamVjdF9sb29rdXAoc3RydWN0IHR0bV9vYmplY3RfZmlsZQotCQkJCQkJICAgKnRmaWxlLCB1aW50MzJfdCBoYW5kbGUpCi17Ci0Jc3RydWN0IHR0bV9ib191c2VyX29iamVjdCAqdXNlcl9ibzsKLQlzdHJ1Y3QgdHRtX2Jhc2Vfb2JqZWN0ICpiYXNlOwotCi0JdXNlcl9ibyA9IHR0bV9ib191c2VyX2xvb2t1cCh0ZmlsZSwgaGFuZGxlKTsKLQlpZiAodW5saWtlbHkodXNlcl9ibyA9PSBOVUxMKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQkodm9pZCl0dG1fYm9fcmVmZXJlbmNlKCZ1c2VyX2JvLT5ibyk7Ci0JYmFzZSA9ICZ1c2VyX2JvLT5iYXNlOwotCXR0bV9iYXNlX29iamVjdF91bnJlZigmYmFzZSk7Ci0JcmV0dXJuICZ1c2VyX2JvLT5ibzsKLX0KLQotc3RhdGljIHZvaWQgdHRtX2JvX3VzZXJfZGVzdHJveShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvKQotewotCXN0cnVjdCB0dG1fYm9fdXNlcl9vYmplY3QgKnVzZXJfYm8gPQotCSAgICBjb250YWluZXJfb2YoYm8sIHN0cnVjdCB0dG1fYm9fdXNlcl9vYmplY3QsIGJvKTsKLQotCXR0bV9tZW1fZ2xvYmFsX2ZyZWUoYm8tPmdsb2ItPm1lbV9nbG9iLCBiby0+YWNjX3NpemUpOwotCWtmcmVlKHVzZXJfYm8pOwotfQotCi1zdGF0aWMgdm9pZCB0dG1fYm9fdXNlcl9yZWxlYXNlKHN0cnVjdCB0dG1fYmFzZV9vYmplY3QgKipwX2Jhc2UpCi17Ci0Jc3RydWN0IHR0bV9ib191c2VyX29iamVjdCAqdXNlcl9ibzsKLQlzdHJ1Y3QgdHRtX2Jhc2Vfb2JqZWN0ICpiYXNlID0gKnBfYmFzZTsKLQlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvOwotCi0JKnBfYmFzZSA9IE5VTEw7Ci0KLQlpZiAodW5saWtlbHkoYmFzZSA9PSBOVUxMKSkKLQkJcmV0dXJuOwotCi0JdXNlcl9ibyA9IGNvbnRhaW5lcl9vZihiYXNlLCBzdHJ1Y3QgdHRtX2JvX3VzZXJfb2JqZWN0LCBiYXNlKTsKLQlibyA9ICZ1c2VyX2JvLT5ibzsKLQl0dG1fYm9fdW5yZWYoJmJvKTsKLX0KLQotc3RhdGljIHZvaWQgdHRtX2JvX3VzZXJfcmVmX3JlbGVhc2Uoc3RydWN0IHR0bV9iYXNlX29iamVjdCAqYmFzZSwKLQkJCQkgICAgZW51bSB0dG1fcmVmX3R5cGUgcmVmX3R5cGUpCi17Ci0Jc3RydWN0IHR0bV9ib191c2VyX29iamVjdCAqdXNlcl9ibyA9Ci0JICAgIGNvbnRhaW5lcl9vZihiYXNlLCBzdHJ1Y3QgdHRtX2JvX3VzZXJfb2JqZWN0LCBiYXNlKTsKLQlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvID0gJnVzZXJfYm8tPmJvOwotCi0Jc3dpdGNoIChyZWZfdHlwZSkgewotCWNhc2UgVFRNX1JFRl9TWU5DQ1BVX1dSSVRFOgotCQl0dG1fYm9fc3luY2NwdV93cml0ZV9yZWxlYXNlKGJvKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCB0dG1fcGxfZmlsbF9yZXAoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKLQkJCSAgICBzdHJ1Y3QgdHRtX3BsX3JlcCAqcmVwKQotewotCXN0cnVjdCB0dG1fYm9fdXNlcl9vYmplY3QgKnVzZXJfYm8gPQotCSAgICBjb250YWluZXJfb2YoYm8sIHN0cnVjdCB0dG1fYm9fdXNlcl9vYmplY3QsIGJvKTsKLQotCXJlcC0+Z3B1X29mZnNldCA9IGJvLT5vZmZzZXQ7Ci0JcmVwLT5ib19zaXplID0gYm8tPm51bV9wYWdlcyA8PCBQQUdFX1NISUZUOwotCXJlcC0+bWFwX2hhbmRsZSA9IGJvLT5hZGRyX3NwYWNlX29mZnNldDsKLQlyZXAtPnBsYWNlbWVudCA9IGJvLT5tZW0ucGxhY2VtZW50OwotCXJlcC0+aGFuZGxlID0gdXNlcl9iby0+YmFzZS5oYXNoLmtleTsKLQlyZXAtPnN5bmNfb2JqZWN0X2FyZyA9ICh1aW50MzJfdCkgKHVuc2lnbmVkIGxvbmcpYm8tPnN5bmNfb2JqX2FyZzsKLX0KLQotLyogRklYTUUgQ29weSBmcm9tIHVwc3RyZWFtIFRUTSAqLwotc3RhdGljIGlubGluZSBzaXplX3QgdHRtX2JvX3NpemUoc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2IsCi0JCQkJIHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzKQotewotCXNpemVfdCBwYWdlX2FycmF5X3NpemUgPSAobnVtX3BhZ2VzICogc2l6ZW9mKHZvaWQgKikgKyBQQUdFX1NJWkUgLSAxKSAmCi0JICAgIFBBR0VfTUFTSzsKLQotCXJldHVybiBnbG9iLT50dG1fYm9fc2l6ZSArIDIgKiBwYWdlX2FycmF5X3NpemU7Ci19Ci0KLS8qIEZJWE1FIENvcHkgZnJvbSB1cHN0cmVhbSBUVE0gInR0bV9ib19jcmVhdGUiLCB1cHN0cmVhbSBUVE0gZG9lcyBub3QKLSAgIGV4cG9ydCB0aGlzLCBzbyBjb3B5IGl0IGhlcmUgKi8KLXN0YXRpYyBpbnQgdHRtX2JvX2NyZWF0ZV9wcml2YXRlKHN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2LAotCQkJdW5zaWduZWQgbG9uZyBzaXplLAotCQkJZW51bSB0dG1fYm9fdHlwZSB0eXBlLAotCQkJc3RydWN0IHR0bV9wbGFjZW1lbnQgKnBsYWNlbWVudCwKLQkJCXVpbnQzMl90IHBhZ2VfYWxpZ25tZW50LAotCQkJdW5zaWduZWQgbG9uZyBidWZmZXJfc3RhcnQsCi0JCQlib29sIGludGVycnVwdGlibGUsCi0JCQlzdHJ1Y3QgZmlsZSAqcGVyc2lzdGFudF9zd2FwX3N0b3JhZ2UsCi0JCQlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKipwX2JvKQotewotCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm87Ci0Jc3RydWN0IHR0bV9tZW1fZ2xvYmFsICptZW1fZ2xvYiA9IGJkZXYtPmdsb2ItPm1lbV9nbG9iOwotCWludCByZXQ7Ci0KLQlzaXplX3QgYWNjX3NpemUgPQotCSAgICB0dG1fYm9fc2l6ZShiZGV2LT5nbG9iLCAoc2l6ZSArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQpOwotCXJldCA9IHR0bV9tZW1fZ2xvYmFsX2FsbG9jKG1lbV9nbG9iLCBhY2Nfc2l6ZSwgZmFsc2UsIGZhbHNlKTsKLQlpZiAodW5saWtlbHkocmV0ICE9IDApKQotCQlyZXR1cm4gcmV0OwotCi0JYm8gPSBremFsbG9jKHNpemVvZigqYm8pLCBHRlBfS0VSTkVMKTsKLQotCWlmICh1bmxpa2VseShibyA9PSBOVUxMKSkgewotCQl0dG1fbWVtX2dsb2JhbF9mcmVlKG1lbV9nbG9iLCBhY2Nfc2l6ZSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXJldCA9IHR0bV9ib19pbml0KGJkZXYsIGJvLCBzaXplLCB0eXBlLCBwbGFjZW1lbnQsIHBhZ2VfYWxpZ25tZW50LAotCQkJCWJ1ZmZlcl9zdGFydCwgaW50ZXJydXB0aWJsZSwKLQkJCQlwZXJzaXN0YW50X3N3YXBfc3RvcmFnZSwgYWNjX3NpemUsIE5VTEwpOwotCWlmIChsaWtlbHkocmV0ID09IDApKQotCQkqcF9ibyA9IGJvOwotCi0JcmV0dXJuIHJldDsKLX0KLQotaW50IHBzYl90dG1fYm9fY2hlY2tfcGxhY2VtZW50KHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sCi0JCQkJc3RydWN0IHR0bV9wbGFjZW1lbnQgKnBsYWNlbWVudCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBwbGFjZW1lbnQtPm51bV9wbGFjZW1lbnQ7IGkrKykgewotCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKLQkJCWlmIChwbGFjZW1lbnQtPnBsYWNlbWVudFtpXSAmIFRUTV9QTF9GTEFHX05PX0VWSUNUKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSIFRUTV9QRlggIk5lZWQgdG8gYmUgcm9vdCB0byAiCi0JCQkJCSJtb2RpZnkgTk9fRVZJQ1Qgc3RhdHVzLlxuIik7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCX0KLQl9Ci0JZm9yIChpID0gMDsgaSA8IHBsYWNlbWVudC0+bnVtX2J1c3lfcGxhY2VtZW50OyBpKyspIHsKLQkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKSB7Ci0JCQlpZiAocGxhY2VtZW50LT5idXN5X3BsYWNlbWVudFtpXQotCQkJCQkJJiBUVE1fUExfRkxBR19OT19FVklDVCkgewotCQkJCXByaW50ayhLRVJOX0VSUiBUVE1fUEZYICJOZWVkIHRvIGJlIHJvb3QgdG8gbW9kaWZ5IE5PX0VWSUNUIHN0YXR1cy5cbiIpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi1pbnQgdHRtX2J1ZmZlcl9vYmplY3RfY3JlYXRlKHN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2LAotCQkJdW5zaWduZWQgbG9uZyBzaXplLAotCQkJZW51bSB0dG1fYm9fdHlwZSB0eXBlLAotCQkJdWludDMyX3QgZmxhZ3MsCi0JCQl1aW50MzJfdCBwYWdlX2FsaWdubWVudCwKLQkJCXVuc2lnbmVkIGxvbmcgYnVmZmVyX3N0YXJ0LAotCQkJYm9vbCBpbnRlcnJ1cHRpYmxlLAotCQkJc3RydWN0IGZpbGUgKnBlcnNpc3RhbnRfc3dhcF9zdG9yYWdlLAotCQkJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICoqcF9ibykKLXsKLQlzdHJ1Y3QgdHRtX3BsYWNlbWVudCBwbGFjZW1lbnQgPSBkZWZhdWx0X3BsYWNlbWVudDsKLQlpbnQgcmV0OwotCi0JaWYgKChmbGFncyAmIFRUTV9QTF9NQVNLX0NBQ0hJTkcpID09IDApCi0JCWZsYWdzIHw9IFRUTV9QTF9GTEFHX1dDIHwgVFRNX1BMX0ZMQUdfVU5DQUNIRUQ7Ci0KLQlwbGFjZW1lbnQubnVtX3BsYWNlbWVudCA9IDE7Ci0JcGxhY2VtZW50LnBsYWNlbWVudCA9ICZmbGFnczsKLQotCXJldCA9IHR0bV9ib19jcmVhdGVfcHJpdmF0ZShiZGV2LAotCQkJc2l6ZSwKLQkJCXR5cGUsCi0JCQkmcGxhY2VtZW50LAotCQkJcGFnZV9hbGlnbm1lbnQsCi0JCQlidWZmZXJfc3RhcnQsCi0JCQlpbnRlcnJ1cHRpYmxlLAotCQkJcGVyc2lzdGFudF9zd2FwX3N0b3JhZ2UsCi0JCQlwX2JvKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLQotaW50IHR0bV9wbF9jcmVhdGVfaW9jdGwoc3RydWN0IHR0bV9vYmplY3RfZmlsZSAqdGZpbGUsCi0JCQlzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiwKLQkJCXN0cnVjdCB0dG1fbG9jayAqbG9jaywgdm9pZCAqZGF0YSkKLXsKLQl1bmlvbiB0dG1fcGxfY3JlYXRlX2FyZyAqYXJnID0gZGF0YTsKLQlzdHJ1Y3QgdHRtX3BsX2NyZWF0ZV9yZXEgKnJlcSA9ICZhcmctPnJlcTsKLQlzdHJ1Y3QgdHRtX3BsX3JlcCAqcmVwID0gJmFyZy0+cmVwOwotCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm87Ci0Jc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICp0bXA7Ci0Jc3RydWN0IHR0bV9ib191c2VyX29iamVjdCAqdXNlcl9ibzsKLQl1aW50MzJfdCBmbGFnczsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgKm1lbV9nbG9iID0gYmRldi0+Z2xvYi0+bWVtX2dsb2I7Ci0Jc3RydWN0IHR0bV9wbGFjZW1lbnQgcGxhY2VtZW50ID0gZGVmYXVsdF9wbGFjZW1lbnQ7Ci0Jc2l6ZV90IGFjY19zaXplID0KLQkgICAgdHRtX3BsX3NpemUoYmRldiwgKHJlcS0+c2l6ZSArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQpOwotCXJldCA9IHR0bV9tZW1fZ2xvYmFsX2FsbG9jKG1lbV9nbG9iLCBhY2Nfc2l6ZSwgZmFsc2UsIGZhbHNlKTsKLQlpZiAodW5saWtlbHkocmV0ICE9IDApKQotCQlyZXR1cm4gcmV0OwotCi0JZmxhZ3MgPSByZXEtPnBsYWNlbWVudDsKLQl1c2VyX2JvID0ga3phbGxvYyhzaXplb2YoKnVzZXJfYm8pLCBHRlBfS0VSTkVMKTsKLQlpZiAodW5saWtlbHkodXNlcl9ibyA9PSBOVUxMKSkgewotCQl0dG1fbWVtX2dsb2JhbF9mcmVlKG1lbV9nbG9iLCBhY2Nfc2l6ZSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWJvID0gJnVzZXJfYm8tPmJvOwotCXJldCA9IHR0bV9yZWFkX2xvY2sobG9jaywgdHJ1ZSk7Ci0JaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgewotCQl0dG1fbWVtX2dsb2JhbF9mcmVlKG1lbV9nbG9iLCBhY2Nfc2l6ZSk7Ci0JCWtmcmVlKHVzZXJfYm8pOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXBsYWNlbWVudC5udW1fcGxhY2VtZW50ID0gMTsKLQlwbGFjZW1lbnQucGxhY2VtZW50ID0gJmZsYWdzOwotCi0JaWYgKChmbGFncyAmIFRUTV9QTF9NQVNLX0NBQ0hJTkcpID09IDApCi0JCWZsYWdzIHw9ICBUVE1fUExfRkxBR19XQyB8IFRUTV9QTF9GTEFHX1VOQ0FDSEVEOwotCi0JcmV0ID0gdHRtX2JvX2luaXQoYmRldiwgYm8sIHJlcS0+c2l6ZSwKLQkJCQkgICAgIHR0bV9ib190eXBlX2RldmljZSwgJnBsYWNlbWVudCwKLQkJCQkgICAgIHJlcS0+cGFnZV9hbGlnbm1lbnQsIDAsIHRydWUsCi0JCQkJICAgICBOVUxMLCBhY2Nfc2l6ZSwgJnR0bV9ib191c2VyX2Rlc3Ryb3kpOwotCXR0bV9yZWFkX3VubG9jayhsb2NrKTsKLQotCS8qCi0JICogTm90ZSB0aGF0IHRoZSB0dG1fYnVmZmVyX29iamVjdF9pbml0IGZ1bmN0aW9uCi0JICogd291bGQndmUgY2FsbGVkIHRoZSBkZXN0cm95IGZ1bmN0aW9uIG9uIGZhaWx1cmUhIQotCSAqLwotCi0JaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKLQkJZ290byBvdXQ7Ci0KLQl0bXAgPSB0dG1fYm9fcmVmZXJlbmNlKGJvKTsKLQlyZXQgPSB0dG1fYmFzZV9vYmplY3RfaW5pdCh0ZmlsZSwgJnVzZXJfYm8tPmJhc2UsCi0JCQkJICAgZmxhZ3MgJiBUVE1fUExfRkxBR19TSEFSRUQsCi0JCQkJICAgdHRtX2J1ZmZlcl90eXBlLAotCQkJCSAgICZ0dG1fYm9fdXNlcl9yZWxlYXNlLAotCQkJCSAgICZ0dG1fYm9fdXNlcl9yZWZfcmVsZWFzZSk7Ci0JaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKLQkJZ290byBvdXRfZXJyOwotCi0JdHRtX3BsX2ZpbGxfcmVwKGJvLCByZXApOwotCXR0bV9ib191bnJlZigmYm8pOwotb3V0OgotCXJldHVybiAwOwotb3V0X2VycjoKLQl0dG1fYm9fdW5yZWYoJnRtcCk7Ci0JdHRtX2JvX3VucmVmKCZibyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IHR0bV9wbF91Yl9jcmVhdGVfaW9jdGwoc3RydWN0IHR0bV9vYmplY3RfZmlsZSAqdGZpbGUsCi0JCQkgICBzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiwKLQkJCSAgIHN0cnVjdCB0dG1fbG9jayAqbG9jaywgdm9pZCAqZGF0YSkKLXsKLQl1bmlvbiB0dG1fcGxfY3JlYXRlX3ViX2FyZyAqYXJnID0gZGF0YTsKLQlzdHJ1Y3QgdHRtX3BsX2NyZWF0ZV91Yl9yZXEgKnJlcSA9ICZhcmctPnJlcTsKLQlzdHJ1Y3QgdHRtX3BsX3JlcCAqcmVwID0gJmFyZy0+cmVwOwotCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm87Ci0Jc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICp0bXA7Ci0Jc3RydWN0IHR0bV9ib191c2VyX29iamVjdCAqdXNlcl9ibzsKLQl1aW50MzJfdCBmbGFnczsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgKm1lbV9nbG9iID0gYmRldi0+Z2xvYi0+bWVtX2dsb2I7Ci0Jc3RydWN0IHR0bV9wbGFjZW1lbnQgcGxhY2VtZW50ID0gZGVmYXVsdF9wbGFjZW1lbnQ7Ci0Jc2l6ZV90IGFjY19zaXplID0KLQkgICAgdHRtX3BsX3NpemUoYmRldiwgKHJlcS0+c2l6ZSArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQpOwotCXJldCA9IHR0bV9tZW1fZ2xvYmFsX2FsbG9jKG1lbV9nbG9iLCBhY2Nfc2l6ZSwgZmFsc2UsIGZhbHNlKTsKLQlpZiAodW5saWtlbHkocmV0ICE9IDApKQotCQlyZXR1cm4gcmV0OwotCi0JZmxhZ3MgPSByZXEtPnBsYWNlbWVudDsKLQl1c2VyX2JvID0ga3phbGxvYyhzaXplb2YoKnVzZXJfYm8pLCBHRlBfS0VSTkVMKTsKLQlpZiAodW5saWtlbHkodXNlcl9ibyA9PSBOVUxMKSkgewotCQl0dG1fbWVtX2dsb2JhbF9mcmVlKG1lbV9nbG9iLCBhY2Nfc2l6ZSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlyZXQgPSB0dG1fcmVhZF9sb2NrKGxvY2ssIHRydWUpOwotCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKLQkJdHRtX21lbV9nbG9iYWxfZnJlZShtZW1fZ2xvYiwgYWNjX3NpemUpOwotCQlrZnJlZSh1c2VyX2JvKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JYm8gPSAmdXNlcl9iby0+Ym87Ci0KLQlwbGFjZW1lbnQubnVtX3BsYWNlbWVudCA9IDE7Ci0JcGxhY2VtZW50LnBsYWNlbWVudCA9ICZmbGFnczsKLQotCXJldCA9IHR0bV9ib19pbml0KGJkZXYsCi0JCQkJCWJvLAotCQkJCQlyZXEtPnNpemUsCi0JCQkJCXR0bV9ib190eXBlX3VzZXIsCi0JCQkJCSZwbGFjZW1lbnQsCi0JCQkJCXJlcS0+cGFnZV9hbGlnbm1lbnQsCi0JCQkJCXJlcS0+dXNlcl9hZGRyZXNzLAotCQkJCQl0cnVlLAotCQkJCQlOVUxMLAotCQkJCQlhY2Nfc2l6ZSwKLQkJCQkJJnR0bV9ib191c2VyX2Rlc3Ryb3kpOwotCi0JLyoKLQkgKiBOb3RlIHRoYXQgdGhlIHR0bV9idWZmZXJfb2JqZWN0X2luaXQgZnVuY3Rpb24KLQkgKiB3b3VsZCd2ZSBjYWxsZWQgdGhlIGRlc3Ryb3kgZnVuY3Rpb24gb24gZmFpbHVyZSEhCi0JICovCi0JdHRtX3JlYWRfdW5sb2NrKGxvY2spOwotCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCi0JCWdvdG8gb3V0OwotCi0JdG1wID0gdHRtX2JvX3JlZmVyZW5jZShibyk7Ci0JcmV0ID0gdHRtX2Jhc2Vfb2JqZWN0X2luaXQodGZpbGUsICZ1c2VyX2JvLT5iYXNlLAotCQkJCSAgIGZsYWdzICYgVFRNX1BMX0ZMQUdfU0hBUkVELAotCQkJCSAgIHR0bV9idWZmZXJfdHlwZSwKLQkJCQkgICAmdHRtX2JvX3VzZXJfcmVsZWFzZSwKLQkJCQkgICAmdHRtX2JvX3VzZXJfcmVmX3JlbGVhc2UpOwotCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCi0JCWdvdG8gb3V0X2VycjsKLQotCXR0bV9wbF9maWxsX3JlcChibywgcmVwKTsKLQl0dG1fYm9fdW5yZWYoJmJvKTsKLW91dDoKLQlyZXR1cm4gMDsKLW91dF9lcnI6Ci0JdHRtX2JvX3VucmVmKCZ0bXApOwotCXR0bV9ib191bnJlZigmYm8pOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCB0dG1fcGxfcmVmZXJlbmNlX2lvY3RsKHN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlLCB2b2lkICpkYXRhKQotewotCXVuaW9uIHR0bV9wbF9yZWZlcmVuY2VfYXJnICphcmcgPSBkYXRhOwotCXN0cnVjdCB0dG1fcGxfcmVwICpyZXAgPSAmYXJnLT5yZXA7Ci0Jc3RydWN0IHR0bV9ib191c2VyX29iamVjdCAqdXNlcl9ibzsKLQlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvOwotCXN0cnVjdCB0dG1fYmFzZV9vYmplY3QgKmJhc2U7Ci0JaW50IHJldDsKLQotCXVzZXJfYm8gPSB0dG1fYm9fdXNlcl9sb29rdXAodGZpbGUsIGFyZy0+cmVxLmhhbmRsZSk7Ci0JaWYgKHVubGlrZWx5KHVzZXJfYm8gPT0gTlVMTCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgcmVmZXJlbmNlIGJ1ZmZlciBvYmplY3QuXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JYm8gPSAmdXNlcl9iby0+Ym87Ci0JcmV0ID0gdHRtX3JlZl9vYmplY3RfYWRkKHRmaWxlLCAmdXNlcl9iby0+YmFzZSwgVFRNX1JFRl9VU0FHRSwgTlVMTCk7Ci0JaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJDb3VsZCBub3QgYWRkIGEgcmVmZXJlbmNlIHRvIGJ1ZmZlciBvYmplY3QuXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JdHRtX3BsX2ZpbGxfcmVwKGJvLCByZXApOwotCi1vdXQ6Ci0JYmFzZSA9ICZ1c2VyX2JvLT5iYXNlOwotCXR0bV9iYXNlX29iamVjdF91bnJlZigmYmFzZSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IHR0bV9wbF91bnJlZl9pb2N0bChzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgdHRtX3BsX3JlZmVyZW5jZV9yZXEgKmFyZyA9IGRhdGE7Ci0KLQlyZXR1cm4gdHRtX3JlZl9vYmplY3RfYmFzZV91bnJlZih0ZmlsZSwgYXJnLT5oYW5kbGUsIFRUTV9SRUZfVVNBR0UpOwotfQotCi1pbnQgdHRtX3BsX3N5bmNjcHVfaW9jdGwoc3RydWN0IHR0bV9vYmplY3RfZmlsZSAqdGZpbGUsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IHR0bV9wbF9zeW5jY3B1X2FyZyAqYXJnID0gZGF0YTsKLQlzdHJ1Y3QgdHRtX2JvX3VzZXJfb2JqZWN0ICp1c2VyX2JvOwotCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm87Ci0Jc3RydWN0IHR0bV9iYXNlX29iamVjdCAqYmFzZTsKLQlib29sIGV4aXN0ZWQ7Ci0JaW50IHJldDsKLQotCXN3aXRjaCAoYXJnLT5vcCkgewotCWNhc2UgVFRNX1BMX1NZTkNDUFVfT1BfR1JBQjoKLQkJdXNlcl9ibyA9IHR0bV9ib191c2VyX2xvb2t1cCh0ZmlsZSwgYXJnLT5oYW5kbGUpOwotCQlpZiAodW5saWtlbHkodXNlcl9ibyA9PSBOVUxMKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIkNvdWxkIG5vdCBmaW5kIGJ1ZmZlciBvYmplY3QgZm9yIHN5bmNjcHUuXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWJvID0gJnVzZXJfYm8tPmJvOwotCQliYXNlID0gJnVzZXJfYm8tPmJhc2U7Ci0JCXJldCA9IHR0bV9ib19zeW5jY3B1X3dyaXRlX2dyYWIoYm8sCi0JCQkJCQlhcmctPmFjY2Vzc19tb2RlICYKLQkJCQkJCVRUTV9QTF9TWU5DQ1BVX01PREVfTk9fQkxPQ0spOwotCQlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7Ci0JCQl0dG1fYmFzZV9vYmplY3RfdW5yZWYoJmJhc2UpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJcmV0ID0gdHRtX3JlZl9vYmplY3RfYWRkKHRmaWxlLCAmdXNlcl9iby0+YmFzZSwKLQkJCQkJIFRUTV9SRUZfU1lOQ0NQVV9XUklURSwgJmV4aXN0ZWQpOwotCQlpZiAoZXhpc3RlZCB8fCByZXQgIT0gMCkKLQkJCXR0bV9ib19zeW5jY3B1X3dyaXRlX3JlbGVhc2UoYm8pOwotCQl0dG1fYmFzZV9vYmplY3RfdW5yZWYoJmJhc2UpOwotCQlicmVhazsKLQljYXNlIFRUTV9QTF9TWU5DQ1BVX09QX1JFTEVBU0U6Ci0JCXJldCA9IHR0bV9yZWZfb2JqZWN0X2Jhc2VfdW5yZWYodGZpbGUsIGFyZy0+aGFuZGxlLAotCQkJCQkJVFRNX1JFRl9TWU5DQ1BVX1dSSVRFKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfQotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLWludCB0dG1fcGxfc2V0c3RhdHVzX2lvY3RsKHN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlLAotCQkJICAgc3RydWN0IHR0bV9sb2NrICpsb2NrLCB2b2lkICpkYXRhKQotewotCXVuaW9uIHR0bV9wbF9zZXRzdGF0dXNfYXJnICphcmcgPSBkYXRhOwotCXN0cnVjdCB0dG1fcGxfc2V0c3RhdHVzX3JlcSAqcmVxID0gJmFyZy0+cmVxOwotCXN0cnVjdCB0dG1fcGxfcmVwICpyZXAgPSAmYXJnLT5yZXA7Ci0Jc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibzsKLQlzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldjsKLQlzdHJ1Y3QgdHRtX3BsYWNlbWVudCBwbGFjZW1lbnQgPSBkZWZhdWx0X3BsYWNlbWVudDsKLQl1aW50MzJfdCBmbGFnc1syXTsKLQlpbnQgcmV0OwotCi0JYm8gPSB0dG1fYnVmZmVyX29iamVjdF9sb29rdXAodGZpbGUsIHJlcS0+aGFuZGxlKTsKLQlpZiAodW5saWtlbHkoYm8gPT0gTlVMTCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiQ291bGQgbm90IGZpbmQgYnVmZmVyIG9iamVjdCBmb3Igc2V0c3RhdHVzLlxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWJkZXYgPSBiby0+YmRldjsKLQotCXJldCA9IHR0bV9yZWFkX2xvY2sobG9jaywgdHJ1ZSk7Ci0JaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKLQkJZ290byBvdXRfZXJyMDsKLQotCXJldCA9IHR0bV9ib19yZXNlcnZlKGJvLCB0cnVlLCBmYWxzZSwgZmFsc2UsIDApOwotCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCi0JCWdvdG8gb3V0X2VycjE7Ci0KLQlyZXQgPSB0dG1fYm9fd2FpdF9jcHUoYm8sIGZhbHNlKTsKLQlpZiAodW5saWtlbHkocmV0ICE9IDApKQotCQlnb3RvIG91dF9lcnIyOwotCi0JZmxhZ3NbMF0gPSByZXEtPnNldF9wbGFjZW1lbnQ7Ci0JZmxhZ3NbMV0gPSByZXEtPmNscl9wbGFjZW1lbnQ7Ci0KLQlwbGFjZW1lbnQubnVtX3BsYWNlbWVudCA9IDI7Ci0JcGxhY2VtZW50LnBsYWNlbWVudCA9IGZsYWdzOwotCi0JLyogUmV2aWV3IGludGVybmFsIGxvY2tpbmcgPyBGSVhNRUFDICovCi0JcmV0ID0gcHNiX3R0bV9ib19jaGVja19wbGFjZW1lbnQoYm8sICZwbGFjZW1lbnQpOwotCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCi0JCWdvdG8gb3V0X2VycjI7Ci0KLQlwbGFjZW1lbnQubnVtX3BsYWNlbWVudCA9IDE7Ci0JZmxhZ3NbMF0gPSAocmVxLT5zZXRfcGxhY2VtZW50IHwgYm8tPm1lbS5wbGFjZW1lbnQpCi0JCQkJCQkmIH5yZXEtPmNscl9wbGFjZW1lbnQ7Ci0KLQlyZXQgPSB0dG1fYm9fdmFsaWRhdGUoYm8sICZwbGFjZW1lbnQsIHRydWUsIGZhbHNlLCBmYWxzZSk7Ci0JaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKLQkJZ290byBvdXRfZXJyMjsKLQotCXR0bV9wbF9maWxsX3JlcChibywgcmVwKTsKLW91dF9lcnIyOgotCXR0bV9ib191bnJlc2VydmUoYm8pOwotb3V0X2VycjE6Ci0JdHRtX3JlYWRfdW5sb2NrKGxvY2spOwotb3V0X2VycjA6Ci0JdHRtX2JvX3VucmVmKCZibyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBwc2JfdHRtX2JvX2Jsb2NrX3Jlc2VydmF0aW9uKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sCi0JCQkJYm9vbCBpbnRlcnJ1cHRpYmxlLCBib29sIG5vX3dhaXQpCi17Ci0JaW50IHJldDsKLQotCXdoaWxlICh1bmxpa2VseShhdG9taWNfY21weGNoZygmYm8tPnJlc2VydmVkLCAwLCAxKSAhPSAwKSkgewotCQlpZiAobm9fd2FpdCkKLQkJCXJldHVybiAtRUJVU1k7Ci0JCWVsc2UgaWYgKGludGVycnVwdGlibGUpIHsKLQkJCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShiby0+ZXZlbnRfcXVldWUsCi0JCQkJCWF0b21pY19yZWFkKCZiby0+cmVzZXJ2ZWQpID09IDApOwotCQkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKLQkJCQlyZXR1cm4gLUVSRVNUQVJUOwotCQl9IGVsc2UgewotCQkJd2FpdF9ldmVudChiby0+ZXZlbnRfcXVldWUsCi0JCQkJYXRvbWljX3JlYWQoJmJvLT5yZXNlcnZlZCkgPT0gMCk7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHBzYl90dG1fYm9fdW5ibG9ja19yZXNlcnZhdGlvbihzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvKQotewotCWF0b21pY19zZXQoJmJvLT5yZXNlcnZlZCwgMCk7Ci0Jd2FrZV91cF9hbGwoJmJvLT5ldmVudF9xdWV1ZSk7Ci19Ci0KLWludCB0dG1fcGxfd2FpdGlkbGVfaW9jdGwoc3RydWN0IHR0bV9vYmplY3RfZmlsZSAqdGZpbGUsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IHR0bV9wbF93YWl0aWRsZV9hcmcgKmFyZyA9IGRhdGE7Ci0Jc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibzsKLQlpbnQgcmV0OwotCi0JYm8gPSB0dG1fYnVmZmVyX29iamVjdF9sb29rdXAodGZpbGUsIGFyZy0+aGFuZGxlKTsKLQlpZiAodW5saWtlbHkoYm8gPT0gTlVMTCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZmluZCBidWZmZXIgb2JqZWN0IGZvciB3YWl0aWRsZS5cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXQgPQotCSAgICBwc2JfdHRtX2JvX2Jsb2NrX3Jlc2VydmF0aW9uKGJvLCB0cnVlLAotCQkJCSAgICAgYXJnLT5tb2RlICYgVFRNX1BMX1dBSVRJRExFX01PREVfTk9fQkxPQ0spOwotCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCi0JCWdvdG8gb3V0OwotCXJldCA9IHR0bV9ib193YWl0KGJvLAotCQkJICBhcmctPm1vZGUgJiBUVE1fUExfV0FJVElETEVfTU9ERV9MQVpZLAotCQkJICB0cnVlLCBhcmctPm1vZGUgJiBUVE1fUExfV0FJVElETEVfTU9ERV9OT19CTE9DSyk7Ci0JcHNiX3R0bV9ib191bmJsb2NrX3Jlc2VydmF0aW9uKGJvKTsKLW91dDoKLQl0dG1fYm9fdW5yZWYoJmJvKTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgdHRtX3BsX3ZlcmlmeV9hY2Nlc3Moc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKLQkJCSBzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSkKLXsKLQlzdHJ1Y3QgdHRtX2JvX3VzZXJfb2JqZWN0ICp1Ym87Ci0KLQkvKgotCSAqIENoZWNrIGJvIHN1YmNsYXNzLgotCSAqLwotCi0JaWYgKHVubGlrZWx5KGJvLT5kZXN0cm95ICE9ICZ0dG1fYm9fdXNlcl9kZXN0cm95KSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCXVibyA9IGNvbnRhaW5lcl9vZihibywgc3RydWN0IHR0bV9ib191c2VyX29iamVjdCwgYm8pOwotCWlmIChsaWtlbHkodWJvLT5iYXNlLnNoYXJlYWJsZSB8fCB1Ym8tPmJhc2UudGZpbGUgPT0gdGZpbGUpKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAtRVBFUk07Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl90dG1fcGxhY2VtZW50X3VzZXIuaCBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX3R0bV9wbGFjZW1lbnRfdXNlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjcwNjhiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX3R0bV9wbGFjZW1lbnRfdXNlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMjUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodCAyMDA2LTIwMDggVHVuZ3N0ZW4gR3JhcGhpY3MsIEluYy4sIENlZGFyIFBhcmssIFRYLiwgVVNBCi0gKiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA5IFZNd2FyZSwgSW5jLiwgUGFsbyBBbHRvLCBDQS4sIFVTQQotICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKLSAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAotICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBBdXRob3JzCi0gKiBUaG9tYXMgSGVsbHN0csO2bSA8dGhvbWFzLWF0LXR1bmdzdGVuZ3JhcGhpY3MtZG90LWNvbT4KLSAqLwotCi0jaWZuZGVmIF9UVE1fUExBQ0VNRU5UX1VTRVJfSF8KLSNkZWZpbmUgX1RUTV9QTEFDRU1FTlRfVVNFUl9IXwotCi0jaWYgIWRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoX0tFUk5FTCkKLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNlbHNlCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgInR0bS90dG1fcGxhY2VtZW50LmgiCi0KLSNkZWZpbmUgVFRNX1BMQUNFTUVOVF9NQUpPUiAwCi0jZGVmaW5lIFRUTV9QTEFDRU1FTlRfTUlOT1IgMQotI2RlZmluZSBUVE1fUExBQ0VNRU5UX1BMICAgIDAKLSNkZWZpbmUgVFRNX1BMQUNFTUVOVF9EQVRFICAiMDgwODE5IgotCi0vKioKLSAqIHN0cnVjdCB0dG1fcGxfY3JlYXRlX3JlcQotICoKLSAqIEBzaXplOiBUaGUgYnVmZmVyIG9iamVjdCBzaXplLgotICogQHBsYWNlbWVudDogRmxhZ3MgdGhhdCBpbmRpY2F0ZSBpbml0aWFsIGFjY2VwdGFibGUKLSAqICBwbGFjZW1lbnQuCi0gKiBAcGFnZV9hbGlnbm1lbnQ6IFJlcXVpcmVkIGFsaWdubWVudCBpbiBwYWdlcy4KLSAqCi0gKiBJbnB1dCB0byB0aGUgVFRNX0JPX0NSRUFURSBpb2N0bC4KLSAqLwotCi1zdHJ1Y3QgdHRtX3BsX2NyZWF0ZV9yZXEgewotCXVpbnQ2NF90IHNpemU7Ci0JdWludDMyX3QgcGxhY2VtZW50OwotCXVpbnQzMl90IHBhZ2VfYWxpZ25tZW50OwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgdHRtX3BsX2NyZWF0ZV91Yl9yZXEKLSAqCi0gKiBAc2l6ZTogVGhlIGJ1ZmZlciBvYmplY3Qgc2l6ZS4KLSAqIEB1c2VyX2FkZHJlc3M6IFVzZXItc3BhY2UgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IGFyZWEgdGhhdAotICogc2hvdWxkIGJlIHVzZWQgdG8gYmFjayB0aGUgYnVmZmVyIG9iamVjdCBjYXN0IHRvIDY0LWJpdC4KLSAqIEBwbGFjZW1lbnQ6IEZsYWdzIHRoYXQgaW5kaWNhdGUgaW5pdGlhbCBhY2NlcHRhYmxlCi0gKiAgcGxhY2VtZW50LgotICogQHBhZ2VfYWxpZ25tZW50OiBSZXF1aXJlZCBhbGlnbm1lbnQgaW4gcGFnZXMuCi0gKgotICogSW5wdXQgdG8gdGhlIFRUTV9CT19DUkVBVEVfVUIgaW9jdGwuCi0gKi8KLQotc3RydWN0IHR0bV9wbF9jcmVhdGVfdWJfcmVxIHsKLQl1aW50NjRfdCBzaXplOwotCXVpbnQ2NF90IHVzZXJfYWRkcmVzczsKLQl1aW50MzJfdCBwbGFjZW1lbnQ7Ci0JdWludDMyX3QgcGFnZV9hbGlnbm1lbnQ7Ci19OwotCi0vKioKLSAqIHN0cnVjdCB0dG1fcGxfcmVwCi0gKgotICogQGdwdV9vZmZzZXQ6IFRoZSBjdXJyZW50IG9mZnNldCBpbnRvIHRoZSBtZW1vcnkgcmVnaW9uIHVzZWQuCi0gKiBUaGlzIGNhbiBiZSB1c2VkIGRpcmVjdGx5IGJ5IHRoZSBHUFUgaWYgdGhlcmUgYXJlIG5vCi0gKiBhZGRpdGlvbmFsIEdQVSBtYXBwaW5nIHByb2NlZHVyZXMgdXNlZCBieSB0aGUgZHJpdmVyLgotICoKLSAqIEBib19zaXplOiBBY3R1YWwgYnVmZmVyIG9iamVjdCBzaXplLgotICoKLSAqIEBtYXBfaGFuZGxlOiBPZmZzZXQgaW50byB0aGUgZGV2aWNlIGFkZHJlc3Mgc3BhY2UuCi0gKiBVc2VkIGZvciBtYXAsIHNlZWssIHJlYWQsIHdyaXRlLiBUaGlzIHdpbGwgbmV2ZXIgY2hhbmdlCi0gKiBkdXJpbmcgdGhlIGxpZmV0aW1lIG9mIGFuIG9iamVjdC4KLSAqCi0gKiBAcGxhY2VtZW50OiBGbGFnIGluZGljYXRpbmcgdGhlIHBsYWNlbWVudCBzdGF0dXMgb2YKLSAqIHRoZSBidWZmZXIgb2JqZWN0IHVzaW5nIHRoZSBUVE1fUEwgZmxhZ3MgYWJvdmUuCi0gKgotICogQHN5bmNfb2JqZWN0X2FyZzogVXNlZCBmb3IgdXNlci1zcGFjZSBzeW5jaHJvbml6YXRpb24gYW5kCi0gKiBkZXBlbmRzIG9uIHRoZSBzeW5jaHJvbml6YXRpb24gbW9kZWwgdXNlZC4gSWYgZmVuY2VzIGFyZQotICogdXNlZCwgdGhpcyBpcyB0aGUgYnVmZmVyX29iamVjdDo6ZmVuY2VfdHlwZV9tYXNrCi0gKgotICogT3V0cHV0IGZyb20gdGhlIFRUTV9QTF9DUkVBVEUgYW5kIFRUTV9QTF9SRUZFUkVOQ0UsIGFuZAotICogVFRNX1BMX1NFVFNUQVRVUyBpb2N0bHMuCi0gKi8KLQotc3RydWN0IHR0bV9wbF9yZXAgewotCXVpbnQ2NF90IGdwdV9vZmZzZXQ7Ci0JdWludDY0X3QgYm9fc2l6ZTsKLQl1aW50NjRfdCBtYXBfaGFuZGxlOwotCXVpbnQzMl90IHBsYWNlbWVudDsKLQl1aW50MzJfdCBoYW5kbGU7Ci0JdWludDMyX3Qgc3luY19vYmplY3RfYXJnOwotCXVpbnQzMl90IHBhZDY0OwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgdHRtX3BsX3NldHN0YXR1c19yZXEKLSAqCi0gKiBAc2V0X3BsYWNlbWVudDogUGxhY2VtZW50IGZsYWdzIHRvIHNldC4KLSAqCi0gKiBAY2xyX3BsYWNlbWVudDogUGxhY2VtZW50IGZsYWdzIHRvIGNsZWFyLgotICoKLSAqIEBoYW5kbGU6IFRoZSBvYmplY3QgaGFuZGxlCi0gKgotICogSW5wdXQgdG8gdGhlIFRUTV9QTF9TRVRTVEFUVVMgaW9jdGwuCi0gKi8KLQotc3RydWN0IHR0bV9wbF9zZXRzdGF0dXNfcmVxIHsKLQl1aW50MzJfdCBzZXRfcGxhY2VtZW50OwotCXVpbnQzMl90IGNscl9wbGFjZW1lbnQ7Ci0JdWludDMyX3QgaGFuZGxlOwotCXVpbnQzMl90IHBhZDY0OwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgdHRtX3BsX3JlZmVyZW5jZV9yZXEKLSAqCi0gKiBAaGFuZGxlOiBUaGUgb2JqZWN0IHRvIHB1dCBhIHJlZmVyZW5jZSBvbi4KLSAqCi0gKiBJbnB1dCB0byB0aGUgVFRNX1BMX1JFRkVSRU5DRSBhbmQgdGhlIFRUTV9QTF9VTlJFRkVSRU5DRSBpb2N0bHMuCi0gKi8KLQotc3RydWN0IHR0bV9wbF9yZWZlcmVuY2VfcmVxIHsKLQl1aW50MzJfdCBoYW5kbGU7Ci0JdWludDMyX3QgcGFkNjQ7Ci19OwotCi0vKgotICogQUNDRVNTIG1vZGUgZmxhZ3MgZm9yIFNZTkNDUFUuCi0gKgotICogVFRNX1NZTkNDUFVfTU9ERV9SRUFEIHdpbGwgZ3VhcmFudGVlIHRoYXQgdGhlIEdQVSBpcyBub3QKLSAqIHdyaXRpbmcgdG8gdGhlIGJ1ZmZlci4KLSAqCi0gKiBUVE1fU1lOQ0NQVV9NT0RFX1dSSVRFIHdpbGwgZ3VhcmFudGVlIHRoYXQgdGhlIEdQVSBpcyBub3QKLSAqIGFjY2Vzc2luZyB0aGUgYnVmZmVyLgotICoKLSAqIFRUTV9TWU5DQ1BVX01PREVfTk9fQkxPQ0sgbWFrZXMgc3VyZSB0aGUgY2FsbCBkb2VzIG5vdCB3YWl0Ci0gKiBmb3IgR1BVIGFjY2Vzc2VzIHRvIGZpbmlzaCBidXQgcmV0dXJuIC1FQlVTWS4KLSAqCi0gKiBUVE1fU1lOQ0NQVV9NT0RFX1RSWUNBQ0hFRCBUcnkgdG8gcGxhY2UgdGhlIGJ1ZmZlciBpbiBjYWNoZWFibGUKLSAqIG1lbW9yeSB3aGlsZSBzeW5jaHJvbml6ZWQgZm9yIENQVS4KLSAqLwotCi0jZGVmaW5lIFRUTV9QTF9TWU5DQ1BVX01PREVfUkVBRCAgICAgIFRUTV9BQ0NFU1NfUkVBRAotI2RlZmluZSBUVE1fUExfU1lOQ0NQVV9NT0RFX1dSSVRFICAgICBUVE1fQUNDRVNTX1dSSVRFCi0jZGVmaW5lIFRUTV9QTF9TWU5DQ1BVX01PREVfTk9fQkxPQ0sgICgxIDw8IDIpCi0jZGVmaW5lIFRUTV9QTF9TWU5DQ1BVX01PREVfVFJZQ0FDSEVEICgxIDw8IDMpCi0KLS8qKgotICogc3RydWN0IHR0bV9wbF9zeW5jY3B1X2FyZwotICoKLSAqIEBoYW5kbGU6IFRoZSBvYmplY3QgdG8gc3luY2hyb25pemUuCi0gKgotICogQGFjY2Vzc19tb2RlOiBhY2Nlc3MgbW9kZSBpbmRpY2F0ZWQgYnkgdGhlCi0gKiBUVE1fU1lOQ0NQVV9NT0RFIGZsYWdzLgotICoKLSAqIEBvcDogaW5kaWNhdGVzIHdoZXRoZXIgdG8gZ3JhYiBvciByZWxlYXNlIHRoZQotICogYnVmZmVyIGZvciBjcHUgdXNhZ2UuCi0gKgotICogSW5wdXQgdG8gdGhlIFRUTV9QTF9TWU5DQ1BVIGlvY3RsLgotICovCi0KLXN0cnVjdCB0dG1fcGxfc3luY2NwdV9hcmcgewotCXVpbnQzMl90IGhhbmRsZTsKLQl1aW50MzJfdCBhY2Nlc3NfbW9kZTsKLQllbnVtIHsKLQkJVFRNX1BMX1NZTkNDUFVfT1BfR1JBQiwKLQkJVFRNX1BMX1NZTkNDUFVfT1BfUkVMRUFTRQotCX0gb3A7Ci0JdWludDMyX3QgcGFkNjQ7Ci19OwotCi0vKgotICogV2FpdGluZyBtb2RlIGZsYWdzIGZvciB0aGUgVFRNX0JPX1dBSVRJRExFIGlvY3RsLgotICoKLSAqIFRUTV9XQUlUSURMRV9NT0RFX0xBWlk6IEFsbG93IGZvciBzbGVlcHMgZHVyaW5nIHBvbGxpbmcKLSAqIHdhaXQuCi0gKgotICogVFRNX1dBSVRJRExFX01PREVfTk9fQkxPQ0s6IERvbid0IGJsb2NrIHdhaXRpbmcgZm9yIEdQVSwKLSAqIGJ1dCByZXR1cm4gLUVCVVNZIGlmIHRoZSBidWZmZXIgaXMgYnVzeS4KLSAqLwotCi0jZGVmaW5lIFRUTV9QTF9XQUlUSURMRV9NT0RFX0xBWlkgICAgICgxIDw8IDApCi0jZGVmaW5lIFRUTV9QTF9XQUlUSURMRV9NT0RFX05PX0JMT0NLICgxIDw8IDEpCi0KLS8qKgotICogc3RydWN0IHR0bV93YWl0aWRsZV9hcmcKLSAqCi0gKiBAaGFuZGxlOiBUaGUgb2JqZWN0IHRvIHN5bmNocm9uaXplLgotICoKLSAqIEBtb2RlOiB3YWl0IG1vZGUgaW5kaWNhdGVkIGJ5IHRoZQotICogVFRNX1NZTkNDUFVfTU9ERSBmbGFncy4KLSAqCi0gKiBBcmd1bWVudCB0byB0aGUgVFRNX0JPX1dBSVRJRExFIGlvY3RsLgotICovCi0KLXN0cnVjdCB0dG1fcGxfd2FpdGlkbGVfYXJnIHsKLQl1aW50MzJfdCBoYW5kbGU7Ci0JdWludDMyX3QgbW9kZTsKLX07Ci0KLXVuaW9uIHR0bV9wbF9jcmVhdGVfYXJnIHsKLQlzdHJ1Y3QgdHRtX3BsX2NyZWF0ZV9yZXEgcmVxOwotCXN0cnVjdCB0dG1fcGxfcmVwIHJlcDsKLX07Ci0KLXVuaW9uIHR0bV9wbF9yZWZlcmVuY2VfYXJnIHsKLQlzdHJ1Y3QgdHRtX3BsX3JlZmVyZW5jZV9yZXEgcmVxOwotCXN0cnVjdCB0dG1fcGxfcmVwIHJlcDsKLX07Ci0KLXVuaW9uIHR0bV9wbF9zZXRzdGF0dXNfYXJnIHsKLQlzdHJ1Y3QgdHRtX3BsX3NldHN0YXR1c19yZXEgcmVxOwotCXN0cnVjdCB0dG1fcGxfcmVwIHJlcDsKLX07Ci0KLXVuaW9uIHR0bV9wbF9jcmVhdGVfdWJfYXJnIHsKLQlzdHJ1Y3QgdHRtX3BsX2NyZWF0ZV91Yl9yZXEgcmVxOwotCXN0cnVjdCB0dG1fcGxfcmVwIHJlcDsKLX07Ci0KLS8qCi0gKiBJb2N0bCBvZmZzZXRzLgotICovCi0KLSNkZWZpbmUgVFRNX1BMX0NSRUFURSAgICAgIDB4MDAKLSNkZWZpbmUgVFRNX1BMX1JFRkVSRU5DRSAgIDB4MDEKLSNkZWZpbmUgVFRNX1BMX1VOUkVGICAgICAgIDB4MDIKLSNkZWZpbmUgVFRNX1BMX1NZTkNDUFUgICAgIDB4MDMKLSNkZWZpbmUgVFRNX1BMX1dBSVRJRExFICAgIDB4MDQKLSNkZWZpbmUgVFRNX1BMX1NFVFNUQVRVUyAgIDB4MDUKLSNkZWZpbmUgVFRNX1BMX0NSRUFURV9VQiAgIDB4MDYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl90dG1fdXNlcm9ial9hcGkuaCBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX3R0bV91c2Vyb2JqX2FwaS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YThmN2M0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX3R0bV91c2Vyb2JqX2FwaS5oCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDggVHVuZ3N0ZW4gR3JhcGhpY3MsIEluYy4sIENlZGFyIFBhcmssIFRYLiwgVVNBCi0gKiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA5IFZNd2FyZSwgSW5jLiwgUGFsbyBBbHRvLCBDQS4sIFVTQQotICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKLSAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAotICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBBdXRob3JzOiBUaG9tYXMgSGVsbHN0cm9tIDx0aG9tYXMtYXQtdHVuZ3N0ZW5ncmFwaGljcy1kb3QtY29tPgotICovCi0KLSNpZm5kZWYgX1RUTV9VU0VST0JKX0FQSV9IXwotI2RlZmluZSBfVFRNX1VTRVJPQkpfQVBJX0hfCi0KLSNpbmNsdWRlICJwc2JfdHRtX3BsYWNlbWVudF91c2VyLmgiCi0jaW5jbHVkZSAicHNiX3R0bV9mZW5jZV91c2VyLmgiCi0jaW5jbHVkZSAidHRtL3R0bV9vYmplY3QuaCIKLSNpbmNsdWRlICJwc2JfdHRtX2ZlbmNlX2FwaS5oIgotI2luY2x1ZGUgInR0bS90dG1fYm9fYXBpLmgiCi0KLXN0cnVjdCB0dG1fbG9jazsKLQotLyoKLSAqIFVzZXIgaW9jdGxzLgotICovCi0KLWV4dGVybiBpbnQgdHRtX3BsX2NyZWF0ZV9pb2N0bChzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSwKLQkJCSAgICAgICBzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiwKLQkJCSAgICAgICBzdHJ1Y3QgdHRtX2xvY2sgKmxvY2ssIHZvaWQgKmRhdGEpOwotZXh0ZXJuIGludCB0dG1fcGxfdWJfY3JlYXRlX2lvY3RsKHN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlLAotCQkJCSAgc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYsCi0JCQkJICBzdHJ1Y3QgdHRtX2xvY2sgKmxvY2ssIHZvaWQgKmRhdGEpOwotZXh0ZXJuIGludCB0dG1fcGxfcmVmZXJlbmNlX2lvY3RsKHN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlLCB2b2lkICpkYXRhKTsKLWV4dGVybiBpbnQgdHRtX3BsX3VucmVmX2lvY3RsKHN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlLCB2b2lkICpkYXRhKTsKLWV4dGVybiBpbnQgdHRtX3BsX3N5bmNjcHVfaW9jdGwoc3RydWN0IHR0bV9vYmplY3RfZmlsZSAqdGZpbGUsIHZvaWQgKmRhdGEpOwotZXh0ZXJuIGludCB0dG1fcGxfc2V0c3RhdHVzX2lvY3RsKHN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlLAotCQkJCSAgc3RydWN0IHR0bV9sb2NrICpsb2NrLCB2b2lkICpkYXRhKTsKLWV4dGVybiBpbnQgdHRtX3BsX3dhaXRpZGxlX2lvY3RsKHN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlLCB2b2lkICpkYXRhKTsKLWV4dGVybiBpbnQgdHRtX2ZlbmNlX3NpZ25hbGVkX2lvY3RsKHN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlLCB2b2lkICpkYXRhKTsKLWV4dGVybiBpbnQgdHRtX2ZlbmNlX2ZpbmlzaF9pb2N0bChzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSwgdm9pZCAqZGF0YSk7Ci1leHRlcm4gaW50IHR0bV9mZW5jZV91bnJlZl9pb2N0bChzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSwgdm9pZCAqZGF0YSk7Ci0KLWV4dGVybiBpbnQKLXR0bV9mZW5jZV91c2VyX2NyZWF0ZShzdHJ1Y3QgdHRtX2ZlbmNlX2RldmljZSAqZmRldiwKLQkJICAgICAgc3RydWN0IHR0bV9vYmplY3RfZmlsZSAqdGZpbGUsCi0JCSAgICAgIHVpbnQzMl90IGZlbmNlX2NsYXNzLAotCQkgICAgICB1aW50MzJfdCBmZW5jZV90eXBlcywKLQkJICAgICAgdWludDMyX3QgY3JlYXRlX2ZsYWdzLAotCQkgICAgICBzdHJ1Y3QgdHRtX2ZlbmNlX29iamVjdCAqKmZlbmNlLCB1aW50MzJfdCAqIHVzZXJfaGFuZGxlKTsKLQotZXh0ZXJuIHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqdHRtX2J1ZmZlcl9vYmplY3RfbG9va3VwKHN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUKLQkJCQkJCQkgICp0ZmlsZSwKLQkJCQkJCQkgIHVpbnQzMl90IGhhbmRsZSk7Ci0KLWV4dGVybiBpbnQKLXR0bV9wbF92ZXJpZnlfYWNjZXNzKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sCi0JCSAgICAgc3RydWN0IHR0bV9vYmplY3RfZmlsZSAqdGZpbGUpOwotCi1leHRlcm4gaW50IHR0bV9idWZmZXJfb2JqZWN0X2NyZWF0ZShzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiwKLQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCWVudW0gdHRtX2JvX3R5cGUgdHlwZSwKLQkJCXVpbnQzMl90IGZsYWdzLAotCQkJdWludDMyX3QgcGFnZV9hbGlnbm1lbnQsCi0JCQl1bnNpZ25lZCBsb25nIGJ1ZmZlcl9zdGFydCwKLQkJCWJvb2wgaW50ZXJydXB0aWJsZSwKLQkJCXN0cnVjdCBmaWxlICpwZXJzaXN0YW50X3N3YXBfc3RvcmFnZSwKLQkJCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqKnBfYm8pOwotCi1leHRlcm4gaW50IHBzYl90dG1fYm9fY2hlY2tfcGxhY2VtZW50KHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sCi0JCQkJc3RydWN0IHR0bV9wbGFjZW1lbnQgKnBsYWNlbWVudCk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2h2L0tjb25maWcKaW5kZXggZDQxZjM4MC4uNWUwYzlmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgSFlQRVJWCiAJdHJpc3RhdGUgIk1pY3Jvc29mdCBIeXBlci1WIGNsaWVudCBkcml2ZXJzIgotCWRlcGVuZHMgb24gWDg2ICYmIG0KKwlkZXBlbmRzIG9uIFg4NiAmJiBBQ1BJICYmIFBDSSAmJiBtCiAJZGVmYXVsdCBuCiAJaGVscAogCSAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIHJ1biBMaW51eCBhcyBhIEh5cGVyLVYgY2xpZW50IG9wZXJhdGluZwpAQCAtMzEsNyArMzEsNyBAQAogCiBjb25maWcgSFlQRVJWX1VUSUxTCiAJdHJpc3RhdGUgIk1pY3Jvc29mdCBIeXBlci1WIFV0aWxpdGllcyBkcml2ZXIiCi0JZGVwZW5kcyBvbiBDT05ORUNUT1IKKwlkZXBlbmRzIG9uIENPTk5FQ1RPUiAmJiBOTFMKIAlkZWZhdWx0IEhZUEVSVgogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBlbmFibGUgdGhlIEh5cGVyLVYgVXRpbGl0aWVzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2h2L01ha2VmaWxlCmluZGV4IGFiZWIyZjcuLjMwMDQ2NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvTWFrZWZpbGUKQEAgLTksNiArOSw2IEBACiAJCSBodi5vIGNvbm5lY3Rpb24ubyBjaGFubmVsLm8gXAogCQkgY2hhbm5lbF9tZ210Lm8gcmluZ19idWZmZXIubwogaHZfc3RvcnZzYy15IDo9IHN0b3J2c2NfZHJ2Lm8gc3RvcnZzYy5vCi1odl9ibGt2c2MteSA6PSBibGt2c2NfZHJ2Lm8gYmxrdnNjLm8KK2h2X2Jsa3ZzYy15IDo9IGJsa3ZzY19kcnYubyAgc3RvcnZzYy5vCiBodl9uZXR2c2MteSA6PSBuZXR2c2NfZHJ2Lm8gbmV0dnNjLm8gcm5kaXNfZmlsdGVyLm8KIGh2X3V0aWxzLXkgOj0gaHZfdXRpbC5vIGh2X2t2cC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvYmxrdnNjLmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvYmxrdnNjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjODcyOWIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L2Jsa3ZzYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA5LCBNaWNyb3NvZnQgQ29ycG9yYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCi0gKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKLSAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUKLSAqIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBLgotICoKLSAqIEF1dGhvcnM6Ci0gKiAgIEhhaXlhbmcgWmhhbmcgPGhhaXlhbmd6QG1pY3Jvc29mdC5jb20+Ci0gKiAgIEhhbmsgSmFuc3NlbiAgPGhqYW5zc2VuQG1pY3Jvc29mdC5jb20+Ci0gKgotICovCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlICJodl9hcGkuaCIKLSNpbmNsdWRlICJzdG9ydnNjLmMiCi0KLXN0YXRpYyBjb25zdCBjaGFyICpnX2Jsa19kcml2ZXJfbmFtZSA9ICJibGt2c2MiOwotCi0vKiB7MzI0MTI2MzItODZjYi00NGEyLTliNWMtNTBkMTQxNzM1NGY1fSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBodl9ndWlkIGdfYmxrX2RldmljZV90eXBlID0gewotCS5kYXRhID0gewotCQkweDMyLCAweDI2LCAweDQxLCAweDMyLCAweGNiLCAweDg2LCAweGEyLCAweDQ0LAotCQkweDliLCAweDVjLCAweDUwLCAweGQxLCAweDQxLCAweDczLCAweDU0LCAweGY1Ci0JfQotfTsKLQotc3RhdGljIGludCBibGtfdnNjX29uX2RldmljZV9hZGQoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLCB2b2lkICphZGRpdGlvbmFsX2luZm8pCi17Ci0Jc3RydWN0IHN0b3J2c2NfZGV2aWNlX2luZm8gKmRldmljZV9pbmZvOwotCWludCByZXQgPSAwOwotCi0JZGV2aWNlX2luZm8gPSAoc3RydWN0IHN0b3J2c2NfZGV2aWNlX2luZm8gKilhZGRpdGlvbmFsX2luZm87Ci0KLQlyZXQgPSBzdG9yX3ZzY19vbl9kZXZpY2VfYWRkKGRldmljZSwgYWRkaXRpb25hbF9pbmZvKTsKLQlpZiAocmV0ICE9IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKgotCSAqIFdlIG5lZWQgdG8gdXNlIHRoZSBkZXZpY2UgaW5zdGFuY2UgZ3VpZCB0byBzZXQgdGhlIHBhdGggYW5kIHRhcmdldAotCSAqIGlkLiBGb3IgSURFIGRldmljZXMsIHRoZSBkZXZpY2UgaW5zdGFuY2UgaWQgaXMgZm9ybWF0dGVkIGFzCi0JICogPGJ1cyBpZD4gKiAtIDxkZXZpY2UgaWQ+IC0gODg5OSAtIDAwMDAwMDAwMDAwMC4KLQkgKi8KLQlkZXZpY2VfaW5mby0+cGF0aF9pZCA9IGRldmljZS0+ZGV2X2luc3RhbmNlLmRhdGFbM10gPDwgMjQgfAotCQkJICAgICBkZXZpY2UtPmRldl9pbnN0YW5jZS5kYXRhWzJdIDw8IDE2IHwKLQkJCSAgICAgZGV2aWNlLT5kZXZfaW5zdGFuY2UuZGF0YVsxXSA8PCA4ICB8Ci0JCQkgICAgIGRldmljZS0+ZGV2X2luc3RhbmNlLmRhdGFbMF07Ci0KLQlkZXZpY2VfaW5mby0+dGFyZ2V0X2lkID0gZGV2aWNlLT5kZXZfaW5zdGFuY2UuZGF0YVs1XSA8PCA4IHwKLQkJCSAgICAgICBkZXZpY2UtPmRldl9pbnN0YW5jZS5kYXRhWzRdOwotCi0JcmV0dXJuIHJldDsKLX0KLQotaW50IGJsa192c2NfaW5pdGlhbGl6ZShzdHJ1Y3QgaHZfZHJpdmVyICpkcml2ZXIpCi17Ci0Jc3RydWN0IHN0b3J2c2NfZHJpdmVyX29iamVjdCAqc3Rvcl9kcml2ZXI7Ci0JaW50IHJldCA9IDA7Ci0KLQlzdG9yX2RyaXZlciA9IChzdHJ1Y3Qgc3RvcnZzY19kcml2ZXJfb2JqZWN0ICopZHJpdmVyOwotCi0JLyogTWFrZSBzdXJlIHdlIGFyZSBhdCBsZWFzdCAyIHBhZ2VzIHNpbmNlIDEgcGFnZSBpcyB1c2VkIGZvciBjb250cm9sICovCi0JLyogQVNTRVJUKHN0b3JfZHJpdmVyLT5SaW5nQnVmZmVyU2l6ZSA+PSAoUEFHRV9TSVpFIDw8IDEpKTsgKi8KLQotCWRyaXZlci0+bmFtZSA9IGdfYmxrX2RyaXZlcl9uYW1lOwotCW1lbWNweSgmZHJpdmVyLT5kZXZfdHlwZSwgJmdfYmxrX2RldmljZV90eXBlLCBzaXplb2Yoc3RydWN0IGh2X2d1aWQpKTsKLQotCXN0b3JfZHJpdmVyLT5yZXF1ZXN0X2V4dF9zaXplID0gc2l6ZW9mKHN0cnVjdCBzdG9ydnNjX3JlcXVlc3RfZXh0ZW5zaW9uKTsKLQotCS8qCi0JICogRGl2aWRlIHRoZSByaW5nIGJ1ZmZlciBkYXRhIHNpemUgKHdoaWNoIGlzIDEgcGFnZSBsZXNzIHRoYW4gdGhlIHJpbmcKLQkgKiBidWZmZXIgc2l6ZSBzaW5jZSB0aGF0IHBhZ2UgaXMgcmVzZXJ2ZWQgZm9yIHRoZSByaW5nIGJ1ZmZlciBpbmRpY2VzKQotCSAqIGJ5IHRoZSBtYXggcmVxdWVzdCBzaXplICh3aGljaCBpcwotCSAqIHZtYnVzX2NoYW5uZWxfcGFja2V0X211bHRpcGFnZV9idWZmZXIgKyBzdHJ1Y3QgdnN0b3JfcGFja2V0ICsgdTY0KQotCSAqLwotCXN0b3JfZHJpdmVyLT5tYXhfb3V0c3RhbmRpbmdfcmVxX3Blcl9jaGFubmVsID0KLQkJKChzdG9yX2RyaXZlci0+cmluZ19idWZmZXJfc2l6ZSAtIFBBR0VfU0laRSkgLwotCQkgIEFMSUdOKE1BWF9NVUxUSVBBR0VfQlVGRkVSX1BBQ0tFVCArCi0JCQkgICBzaXplb2Yoc3RydWN0IHZzdG9yX3BhY2tldCkgKyBzaXplb2YodTY0KSwKLQkJCSAgIHNpemVvZih1NjQpKSk7Ci0KLQlEUFJJTlRfSU5GTyhCTEtWU0MsICJtYXggaW8gb3V0c3RkICV1IiwKLQkJICAgIHN0b3JfZHJpdmVyLT5tYXhfb3V0c3RhbmRpbmdfcmVxX3Blcl9jaGFubmVsKTsKLQotCS8qIFNldHVwIHRoZSBkaXNwYXRjaCB0YWJsZSAqLwotCXN0b3JfZHJpdmVyLT5iYXNlLmRldl9hZGQgPSBibGtfdnNjX29uX2RldmljZV9hZGQ7Ci0Jc3Rvcl9kcml2ZXItPmJhc2UuZGV2X3JtID0gc3Rvcl92c2Nfb25fZGV2aWNlX3JlbW92ZTsKLQlzdG9yX2RyaXZlci0+YmFzZS5jbGVhbnVwID0gc3Rvcl92c2Nfb25fY2xlYW51cDsKLQlzdG9yX2RyaXZlci0+b25faW9fcmVxdWVzdCA9IHN0b3JfdnNjX29uX2lvX3JlcXVlc3Q7Ci0KLQlyZXR1cm4gcmV0OwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L2Jsa3ZzY19kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9ibGt2c2NfZHJ2LmMKaW5kZXggNjhhZDE3ZC4uNDZkYWFkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L2Jsa3ZzY19kcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvYmxrdnNjX2Rydi5jCkBAIC0xNyw2ICsxNyw3IEBACiAgKiBBdXRob3JzOgogICogICBIYWl5YW5nIFpoYW5nIDxoYWl5YW5nekBtaWNyb3NvZnQuY29tPgogICogICBIYW5rIEphbnNzZW4gIDxoamFuc3NlbkBtaWNyb3NvZnQuY29tPgorICogICBLLiBZLiBTcmluaXZhc2FuIDxreXNAbWljcm9zb2Z0LmNvbT4KICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTI1LDE3ICsyNiwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2VoLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2RiZy5oPgotI2luY2x1ZGUgImh2X2FwaS5oIgotI2luY2x1ZGUgImxvZ2dpbmcuaCIKLSNpbmNsdWRlICJ2ZXJzaW9uX2luZm8uaCIKLSNpbmNsdWRlICJ2bWJ1cy5oIgotI2luY2x1ZGUgInN0b3J2c2NfYXBpLmgiCisKKyNpbmNsdWRlICJoeXBlcnYuaCIKKyNpbmNsdWRlICJoeXBlcnZfc3RvcmFnZS5oIgogCiAKICNkZWZpbmUgQkxLVlNDX01JTk9SUwk2NApAQCAtNDYsNiArNDQsMTIgQEAKIAlEVkRfVFlQRSwKIH07CiAKK2VudW0gYmxrdnNjX29wX3R5cGUgeworCURPX0lOUVVJUlksCisJRE9fQ0FQQUNJVFksCisJRE9fRkxVU0gsCit9OworCiAvKgogICogVGhpcyByZXF1ZXN0IHRpZXMgdGhlIHN0cnVjdCByZXF1ZXN0IGFuZCBzdHJ1Y3QKICAqIGJsa3ZzY19yZXF1ZXN0L2h2X3N0b3J2c2NfcmVxdWVzdCB0b2dldGhlciBBIHN0cnVjdCByZXF1ZXN0IG1heSBiZQpAQCAtNzIsOSArNzYsNiBAQAogCS8qIFRoZSBncm91cCB0aGlzIHJlcXVlc3QgaXMgcGFydCBvZi4gTWF5YmUgbnVsbCAqLwogCXN0cnVjdCBibGt2c2NfcmVxdWVzdF9ncm91cCAqZ3JvdXA7CiAKLQl3YWl0X3F1ZXVlX2hlYWRfdCB3ZXZlbnQ7Ci0JaW50IGNvbmQ7Ci0KIAlpbnQgd3JpdGU7CiAJc2VjdG9yX3Qgc2VjdG9yX3N0YXJ0OwogCXVuc2lnbmVkIGxvbmcgc2VjdG9yX2NvdW50OwpAQCAtODQsMTIgKzg1LDYgQEAKIAl1bnNpZ25lZCBjaGFyIGNtbmRbTUFYX0NPTU1BTkRfU0laRV07CiAKIAlzdHJ1Y3QgaHZfc3RvcnZzY19yZXF1ZXN0IHJlcXVlc3Q7Ci0JLyoKLQkgKiAhISFETyBOT1QgQUREIEFOWVRISU5HIEJFTE9XIEhFUkUhISEgT3RoZXJ3aXNlLCBtZW1vcnkgY2FuIG92ZXJsYXAsCi0JICogYmVjYXVzZSAtIFRoZSBleHRlbnNpb24gYnVmZmVyIGZhbGxzIHJpZ2h0IGhlcmUgYW5kIGlzIHBvaW50ZWQgdG8gYnkKLQkgKiByZXF1ZXN0LkV4dGVuc2lvbjsKLQkgKiBXaGljaCBzb3VuZHMgbGlrZSBhIGhvcnJpYmxlIGlkZWEsIHdobyBkZXNpZ25lZCB0aGlzPwotCSAqLwogfTsKIAogLyogUGVyIGRldmljZSBzdHJ1Y3R1cmUgKi8KQEAgLTEwNiw3ICsxMDEsNiBAQAogCXVuc2lnbmVkIGludCBkZXZpY2VfaWRfbGVuOwogCWludCBudW1fb3V0c3RhbmRpbmdfcmVxczsKIAlpbnQgc2h1dHRpbmdfZG93bjsKLQlpbnQgbWVkaWFfbm90X3ByZXNlbnQ7CiAJdW5zaWduZWQgaW50IHNlY3Rvcl9zaXplOwogCXNlY3Rvcl90IGNhcGFjaXR5OwogCXVuc2lnbmVkIGludCBwb3J0OwpAQCAtMTE1LDUxNSArMTA5LDMxNCBAQAogCWludCB1c2VyczsKIH07CiAKK3N0YXRpYyBjb25zdCBjaGFyICpkcnZfbmFtZSA9ICJibGt2c2MiOwogCi0vKiBTdGF0aWMgZGVjbCAqLwotc3RhdGljIERFRklORV9NVVRFWChibGt2c2NfbXV0ZXgpOwotc3RhdGljIGludCBibGt2c2NfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgYmxrdnNjX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpOwotc3RhdGljIHZvaWQgYmxrdnNjX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldmljZSk7Ci0KLXN0YXRpYyBpbnQgYmxrdnNjX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgIGZtb2RlX3QgbW9kZSk7Ci1zdGF0aWMgaW50IGJsa3ZzY19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpOwotc3RhdGljIHVuc2lnbmVkIGludCBibGt2c2NfY2hlY2tfZXZlbnRzKHN0cnVjdCBnZW5kaXNrICpnZCwKLQkJCQkJdW5zaWduZWQgaW50IGNsZWFyaW5nKTsKLXN0YXRpYyBpbnQgYmxrdnNjX3JldmFsaWRhdGVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZ2QpOwotc3RhdGljIGludCBibGt2c2NfZ2V0Z2VvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkLCBzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmhnKTsKLXN0YXRpYyBpbnQgYmxrdnNjX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkLCBmbW9kZV90IG1vZGUsCi0JCQl1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJndW1lbnQpOwotc3RhdGljIHZvaWQgYmxrdnNjX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnF1ZXVlKTsKLXN0YXRpYyB2b2lkIGJsa3ZzY19yZXF1ZXN0X2NvbXBsZXRpb24oc3RydWN0IGh2X3N0b3J2c2NfcmVxdWVzdCAqcmVxdWVzdCk7Ci1zdGF0aWMgaW50IGJsa3ZzY19kb19yZXF1ZXN0KHN0cnVjdCBibG9ja19kZXZpY2VfY29udGV4dCAqYmxrZGV2LAotCQkJICAgICBzdHJ1Y3QgcmVxdWVzdCAqcmVxKTsKLXN0YXRpYyBpbnQgYmxrdnNjX3N1Ym1pdF9yZXF1ZXN0KHN0cnVjdCBibGt2c2NfcmVxdWVzdCAqYmxrdnNjX3JlcSwKLQkJdm9pZCAoKnJlcXVlc3RfY29tcGxldGlvbikoc3RydWN0IGh2X3N0b3J2c2NfcmVxdWVzdCAqKSk7Ci1zdGF0aWMgdm9pZCBibGt2c2NfaW5pdF9ydyhzdHJ1Y3QgYmxrdnNjX3JlcXVlc3QgKmJsa3ZzY19yZXEpOwotc3RhdGljIHZvaWQgYmxrdnNjX2NtZF9jb21wbGV0aW9uKHN0cnVjdCBodl9zdG9ydnNjX3JlcXVlc3QgKnJlcXVlc3QpOwotc3RhdGljIGludCBibGt2c2NfZG9faW5xdWlyeShzdHJ1Y3QgYmxvY2tfZGV2aWNlX2NvbnRleHQgKmJsa2Rldik7Ci1zdGF0aWMgaW50IGJsa3ZzY19kb19yZWFkX2NhcGFjaXR5KHN0cnVjdCBibG9ja19kZXZpY2VfY29udGV4dCAqYmxrZGV2KTsKLXN0YXRpYyBpbnQgYmxrdnNjX2RvX3JlYWRfY2FwYWNpdHkxNihzdHJ1Y3QgYmxvY2tfZGV2aWNlX2NvbnRleHQgKmJsa2Rldik7Ci1zdGF0aWMgaW50IGJsa3ZzY19kb19mbHVzaChzdHJ1Y3QgYmxvY2tfZGV2aWNlX2NvbnRleHQgKmJsa2Rldik7Ci1zdGF0aWMgaW50IGJsa3ZzY19jYW5jZWxfcGVuZGluZ19yZXFzKHN0cnVjdCBibG9ja19kZXZpY2VfY29udGV4dCAqYmxrZGV2KTsKLXN0YXRpYyBpbnQgYmxrdnNjX2RvX3BlbmRpbmdfcmVxcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlX2NvbnRleHQgKmJsa2Rldik7Ci0KLXN0YXRpYyBpbnQgYmxrdnNjX3JpbmdidWZmZXJfc2l6ZSA9IEJMS1ZTQ19SSU5HX0JVRkZFUl9TSVpFOwotbW9kdWxlX3BhcmFtKGJsa3ZzY19yaW5nYnVmZmVyX3NpemUsIGludCwgU19JUlVHTyk7Ci1NT0RVTEVfUEFSTV9ERVNDKHJpbmdfc2l6ZSwgIlJpbmcgYnVmZmVyIHNpemUgKGluIGJ5dGVzKSIpOwotCi0vKiBUaGUgb25lIGFuZCBvbmx5IG9uZSAqLwotc3RhdGljICBzdHJ1Y3Qgc3RvcnZzY19kcml2ZXJfb2JqZWN0IGdfYmxrdnNjX2RydjsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBibG9ja19vcHMgPSB7Ci0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLm9wZW4gPSBibGt2c2Nfb3BlbiwKLQkucmVsZWFzZSA9IGJsa3ZzY19yZWxlYXNlLAotCS5jaGVja19ldmVudHMgPSBibGt2c2NfY2hlY2tfZXZlbnRzLAotCS5yZXZhbGlkYXRlX2Rpc2sgPSBibGt2c2NfcmV2YWxpZGF0ZV9kaXNrLAotCS5nZXRnZW8gPSBibGt2c2NfZ2V0Z2VvLAotCS5pb2N0bCAgPSBibGt2c2NfaW9jdGwsCisvKiB7MzI0MTI2MzItODZjYi00NGEyLTliNWMtNTBkMTQxNzM1NGY1fSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBodl9ndWlkIGRldl90eXBlID0geworCS5kYXRhID0geworCQkweDMyLCAweDI2LCAweDQxLCAweDMyLCAweGNiLCAweDg2LCAweGEyLCAweDQ0LAorCQkweDliLCAweDVjLCAweDUwLCAweGQxLCAweDQxLCAweDczLCAweDU0LCAweGY1CisJfQogfTsKIAogLyoKLSAqIGJsa3ZzY19kcnZfaW5pdCAtICBCbGtWc2MgZHJpdmVyIGluaXRpYWxpemF0aW9uLgorICogVGhlcmUgaXMgYSBjaXJjdWxhciBkZXBlbmRlbmN5IGludm9sdmluZyBibGt2c2NfcmVxdWVzdF9jb21wbGV0aW9uKCkKKyAqIGFuZCBibGt2c2NfZG9fcmVxdWVzdCgpLgogICovCi1zdGF0aWMgaW50IGJsa3ZzY19kcnZfaW5pdChpbnQgKCpkcnZfaW5pdCkoc3RydWN0IGh2X2RyaXZlciAqZHJ2KSkKLXsKLQlzdHJ1Y3Qgc3RvcnZzY19kcml2ZXJfb2JqZWN0ICpzdG9ydnNjX2Rydl9vYmogPSAmZ19ibGt2c2NfZHJ2OwotCXN0cnVjdCBodl9kcml2ZXIgKmRydiA9ICZnX2Jsa3ZzY19kcnYuYmFzZTsKLQlpbnQgcmV0Oworc3RhdGljIHZvaWQgYmxrdnNjX3JlcXVlc3RfY29tcGxldGlvbihzdHJ1Y3QgaHZfc3RvcnZzY19yZXF1ZXN0ICpyZXF1ZXN0KTsKIAotCXN0b3J2c2NfZHJ2X29iai0+cmluZ19idWZmZXJfc2l6ZSA9IGJsa3ZzY19yaW5nYnVmZmVyX3NpemU7CitzdGF0aWMgaW50IGJsa3ZzY19yaW5nYnVmZmVyX3NpemUgPSBCTEtWU0NfUklOR19CVUZGRVJfU0laRTsKIAotCWRydi0+cHJpdiA9IHN0b3J2c2NfZHJ2X29iajsKLQotCS8qIENhbGxiYWNrIHRvIGNsaWVudCBkcml2ZXIgdG8gY29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uICovCi0JZHJ2X2luaXQoJnN0b3J2c2NfZHJ2X29iai0+YmFzZSk7Ci0KLQlkcnYtPmRyaXZlci5uYW1lID0gc3RvcnZzY19kcnZfb2JqLT5iYXNlLm5hbWU7Ci0KLQlkcnYtPmRyaXZlci5wcm9iZSA9IGJsa3ZzY19wcm9iZTsKLQlkcnYtPmRyaXZlci5yZW1vdmUgPSBibGt2c2NfcmVtb3ZlOwotCWRydi0+ZHJpdmVyLnNodXRkb3duID0gYmxrdnNjX3NodXRkb3duOwotCi0JLyogVGhlIGRyaXZlciBiZWxvbmdzIHRvIHZtYnVzICovCi0JcmV0ID0gdm1idXNfY2hpbGRfZHJpdmVyX3JlZ2lzdGVyKCZkcnYtPmRyaXZlcik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGJsa3ZzY19kcnZfZXhpdF9jYihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRldmljZSAqKmN1cnIgPSAoc3RydWN0IGRldmljZSAqKilkYXRhOwotCSpjdXJyID0gZGV2OwotCXJldHVybiAxOyAvKiBzdG9wIGl0ZXJhdGluZyAqLwotfQotCi1zdGF0aWMgdm9pZCBibGt2c2NfZHJ2X2V4aXQodm9pZCkKLXsKLQlzdHJ1Y3Qgc3RvcnZzY19kcml2ZXJfb2JqZWN0ICpzdG9ydnNjX2Rydl9vYmogPSAmZ19ibGt2c2NfZHJ2OwotCXN0cnVjdCBodl9kcml2ZXIgKmRydiA9ICZnX2Jsa3ZzY19kcnYuYmFzZTsKLQlzdHJ1Y3QgZGV2aWNlICpjdXJyZW50X2RldjsKLQlpbnQgcmV0OwotCi0Jd2hpbGUgKDEpIHsKLQkJY3VycmVudF9kZXYgPSBOVUxMOwotCi0JCS8qIEdldCB0aGUgZGV2aWNlICovCi0JCXJldCA9IGRyaXZlcl9mb3JfZWFjaF9kZXZpY2UoJmRydi0+ZHJpdmVyLCBOVUxMLAotCQkJCQkgICAgICh2b2lkICopICZjdXJyZW50X2RldiwKLQkJCQkJICAgICBibGt2c2NfZHJ2X2V4aXRfY2IpOwotCi0JCWlmIChyZXQpCi0JCQlEUFJJTlRfV0FSTihCTEtWU0NfRFJWLAotCQkJCSAgICAiZHJpdmVyX2Zvcl9lYWNoX2RldmljZSByZXR1cm5lZCAlZCIsIHJldCk7Ci0KLQotCQlpZiAoY3VycmVudF9kZXYgPT0gTlVMTCkKLQkJCWJyZWFrOwotCi0JCS8qIEluaXRpYXRlIHJlbW92YWwgZnJvbSB0aGUgdG9wLWRvd24gKi8KLQkJZGV2aWNlX3VucmVnaXN0ZXIoY3VycmVudF9kZXYpOwotCX0KLQotCWlmIChzdG9ydnNjX2Rydl9vYmotPmJhc2UuY2xlYW51cCkKLQkJc3RvcnZzY19kcnZfb2JqLT5iYXNlLmNsZWFudXAoJnN0b3J2c2NfZHJ2X29iai0+YmFzZSk7Ci0KLQl2bWJ1c19jaGlsZF9kcml2ZXJfdW5yZWdpc3RlcigmZHJ2LT5kcml2ZXIpOwotCi0JcmV0dXJuOwotfQorbW9kdWxlX3BhcmFtKGJsa3ZzY19yaW5nYnVmZmVyX3NpemUsIGludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHJpbmdfc2l6ZSwgIlJpbmcgYnVmZmVyIHNpemUgKGluIGJ5dGVzKSIpOwogCiAvKgotICogYmxrdnNjX3Byb2JlIC0gQWRkIGEgbmV3IGRldmljZSBmb3IgdGhpcyBkcml2ZXIKKyAqIFRoZXJlIGlzIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBpbnZvbHZpbmcgYmxrdnNjX3Byb2JlKCkKKyAqIGFuZCBibG9ja19vcHMuCiAgKi8KLXN0YXRpYyBpbnQgYmxrdnNjX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKLXsKLQlzdHJ1Y3QgaHZfZHJpdmVyICpkcnYgPQotCQkJCWRydl90b19odl9kcnYoZGV2aWNlLT5kcml2ZXIpOwotCXN0cnVjdCBzdG9ydnNjX2RyaXZlcl9vYmplY3QgKnN0b3J2c2NfZHJ2X29iaiA9Ci0JCQkJZHJ2LT5wcml2OwotCXN0cnVjdCBodl9kZXZpY2UgKmRldmljZV9vYmogPSBkZXZpY2VfdG9faHZfZGV2aWNlKGRldmljZSk7CitzdGF0aWMgaW50IGJsa3ZzY19wcm9iZShzdHJ1Y3QgaHZfZGV2aWNlICpkZXYpOwogCi0Jc3RydWN0IGJsb2NrX2RldmljZV9jb250ZXh0ICpibGtkZXYgPSBOVUxMOwotCXN0cnVjdCBzdG9ydnNjX2RldmljZV9pbmZvIGRldmljZV9pbmZvOwotCWludCBtYWpvciA9IDA7Ci0JaW50IGRldm51bSA9IDA7CitzdGF0aWMgaW50IGJsa3ZzY19kZXZpY2VfYWRkKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSwKKwkJCQl2b2lkICphZGRpdGlvbmFsX2luZm8pCit7CisJc3RydWN0IHN0b3J2c2NfZGV2aWNlX2luZm8gKmRldmljZV9pbmZvOwogCWludCByZXQgPSAwOwotCXN0YXRpYyBpbnQgaWRlMF9yZWdpc3RlcmVkOwotCXN0YXRpYyBpbnQgaWRlMV9yZWdpc3RlcmVkOwogCi0JRFBSSU5UX0RCRyhCTEtWU0NfRFJWLCAiYmxrdnNjX3Byb2JlIC0gZW50ZXIiKTsKKwlkZXZpY2VfaW5mbyA9IChzdHJ1Y3Qgc3RvcnZzY19kZXZpY2VfaW5mbyAqKWFkZGl0aW9uYWxfaW5mbzsKIAotCWlmICghc3RvcnZzY19kcnZfb2JqLT5iYXNlLmRldl9hZGQpIHsKLQkJRFBSSU5UX0VSUihCTEtWU0NfRFJWLCAiT25EZXZpY2VBZGQoKSBub3Qgc2V0Iik7Ci0JCXJldCA9IC0xOwotCQlnb3RvIENsZWFudXA7Ci0JfQorCWRldmljZV9pbmZvLT5yaW5nX2J1ZmZlcl9zaXplID0gYmxrdnNjX3JpbmdidWZmZXJfc2l6ZTsKIAotCWJsa2RldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBibG9ja19kZXZpY2VfY29udGV4dCksIEdGUF9LRVJORUwpOwotCWlmICghYmxrZGV2KSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gQ2xlYW51cDsKLQl9Ci0KLQlJTklUX0xJU1RfSEVBRCgmYmxrZGV2LT5wZW5kaW5nX2xpc3QpOwotCi0JLyogSW5pdGlhbGl6ZSB3aGF0IHdlIGNhbiBoZXJlICovCi0Jc3Bpbl9sb2NrX2luaXQoJmJsa2Rldi0+bG9jayk7Ci0KLQkvKiBBU1NFUlQoc2l6ZW9mKHN0cnVjdCBibGt2c2NfcmVxdWVzdF9ncm91cCkgPD0gKi8KLQkvKiAJc2l6ZW9mKHN0cnVjdCBibGt2c2NfcmVxdWVzdCkpOyAqLwotCi0JYmxrZGV2LT5yZXF1ZXN0X3Bvb2wgPSBrbWVtX2NhY2hlX2NyZWF0ZShkZXZfbmFtZSgmZGV2aWNlX29iai0+ZGV2aWNlKSwKLQkJCQkJc2l6ZW9mKHN0cnVjdCBibGt2c2NfcmVxdWVzdCkgKwotCQkJCQlzdG9ydnNjX2Rydl9vYmotPnJlcXVlc3RfZXh0X3NpemUsIDAsCi0JCQkJCVNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7Ci0JaWYgKCFibGtkZXYtPnJlcXVlc3RfcG9vbCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIENsZWFudXA7Ci0JfQotCi0KLQkvKiBDYWxsIHRvIHRoZSB2c2MgZHJpdmVyIHRvIGFkZCB0aGUgZGV2aWNlICovCi0JcmV0ID0gc3RvcnZzY19kcnZfb2JqLT5iYXNlLmRldl9hZGQoZGV2aWNlX29iaiwgJmRldmljZV9pbmZvKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJRFBSSU5UX0VSUihCTEtWU0NfRFJWLCAidW5hYmxlIHRvIGFkZCBibGt2c2MgZGV2aWNlIik7Ci0JCWdvdG8gQ2xlYW51cDsKLQl9Ci0KLQlibGtkZXYtPmRldmljZV9jdHggPSBkZXZpY2Vfb2JqOwotCS8qIHRoaXMgaWRlbnRpZmllZCB0aGUgZGV2aWNlIDAgb3IgMSAqLwotCWJsa2Rldi0+dGFyZ2V0ID0gZGV2aWNlX2luZm8udGFyZ2V0X2lkOwotCS8qIHRoaXMgaWRlbnRpZmllZCB0aGUgaWRlIGN0cmwgMCBvciAxICovCi0JYmxrZGV2LT5wYXRoID0gZGV2aWNlX2luZm8ucGF0aF9pZDsKLQotCWRldl9zZXRfZHJ2ZGF0YShkZXZpY2UsIGJsa2Rldik7Ci0KLQkvKiBDYWxjdWxhdGUgdGhlIG1ham9yIGFuZCBkZXZpY2UgbnVtICovCi0JaWYgKGJsa2Rldi0+cGF0aCA9PSAwKSB7Ci0JCW1ham9yID0gSURFMF9NQUpPUjsKLQkJZGV2bnVtID0gYmxrZGV2LT5wYXRoICsgYmxrZGV2LT50YXJnZXQ7CQkvKiAwIG9yIDEgKi8KLQotCQlpZiAoIWlkZTBfcmVnaXN0ZXJlZCkgewotCQkJcmV0ID0gcmVnaXN0ZXJfYmxrZGV2KG1ham9yLCAiaWRlIik7Ci0JCQlpZiAocmV0ICE9IDApIHsKLQkJCQlEUFJJTlRfRVJSKEJMS1ZTQ19EUlYsCi0JCQkJCSAgICJyZWdpc3Rlcl9ibGtkZXYoKSBmYWlsZWQhIHJldCAlZCIsCi0JCQkJCSAgIHJldCk7Ci0JCQkJZ290byBSZW1vdmU7Ci0JCQl9Ci0KLQkJCWlkZTBfcmVnaXN0ZXJlZCA9IDE7Ci0JCX0KLQl9IGVsc2UgaWYgKGJsa2Rldi0+cGF0aCA9PSAxKSB7Ci0JCW1ham9yID0gSURFMV9NQUpPUjsKLQkJZGV2bnVtID0gYmxrZGV2LT5wYXRoICsgYmxrZGV2LT50YXJnZXQgKyAxOyAvKiAyIG9yIDMgKi8KLQotCQlpZiAoIWlkZTFfcmVnaXN0ZXJlZCkgewotCQkJcmV0ID0gcmVnaXN0ZXJfYmxrZGV2KG1ham9yLCAiaWRlIik7Ci0JCQlpZiAocmV0ICE9IDApIHsKLQkJCQlEUFJJTlRfRVJSKEJMS1ZTQ19EUlYsCi0JCQkJCSAgICJyZWdpc3Rlcl9ibGtkZXYoKSBmYWlsZWQhIHJldCAlZCIsCi0JCQkJCSAgIHJldCk7Ci0JCQkJZ290byBSZW1vdmU7Ci0JCQl9Ci0KLQkJCWlkZTFfcmVnaXN0ZXJlZCA9IDE7Ci0JCX0KLQl9IGVsc2UgewotCQlEUFJJTlRfRVJSKEJMS1ZTQ19EUlYsICJpbnZhbGlkIHBhdGhpZCIpOwotCQlyZXQgPSAtMTsKLQkJZ290byBDbGVhbnVwOwotCX0KLQotCURQUklOVF9JTkZPKEJMS1ZTQ19EUlYsICJibGt2c2MgcmVnaXN0ZXJlZCBmb3IgbWFqb3IgJWQhISIsIG1ham9yKTsKLQotCWJsa2Rldi0+Z2QgPSBhbGxvY19kaXNrKEJMS1ZTQ19NSU5PUlMpOwotCWlmICghYmxrZGV2LT5nZCkgewotCQlEUFJJTlRfRVJSKEJMS1ZTQ19EUlYsICJyZWdpc3Rlcl9ibGtkZXYoKSBmYWlsZWQhIHJldCAlZCIsIHJldCk7Ci0JCXJldCA9IC0xOwotCQlnb3RvIENsZWFudXA7Ci0JfQotCi0JYmxrZGV2LT5nZC0+cXVldWUgPSBibGtfaW5pdF9xdWV1ZShibGt2c2NfcmVxdWVzdCwgJmJsa2Rldi0+bG9jayk7Ci0KLQlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShibGtkZXYtPmdkLT5xdWV1ZSwgUEFHRV9TSVpFKTsKLQlibGtfcXVldWVfbWF4X3NlZ21lbnRzKGJsa2Rldi0+Z2QtPnF1ZXVlLCBNQVhfTVVMVElQQUdFX0JVRkZFUl9DT1VOVCk7Ci0JYmxrX3F1ZXVlX3NlZ21lbnRfYm91bmRhcnkoYmxrZGV2LT5nZC0+cXVldWUsIFBBR0VfU0laRS0xKTsKLQlibGtfcXVldWVfYm91bmNlX2xpbWl0KGJsa2Rldi0+Z2QtPnF1ZXVlLCBCTEtfQk9VTkNFX0FOWSk7Ci0JYmxrX3F1ZXVlX2RtYV9hbGlnbm1lbnQoYmxrZGV2LT5nZC0+cXVldWUsIDUxMSk7Ci0KLQlibGtkZXYtPmdkLT5tYWpvciA9IG1ham9yOwotCWlmIChkZXZudW0gPT0gMSB8fCBkZXZudW0gPT0gMykKLQkJYmxrZGV2LT5nZC0+Zmlyc3RfbWlub3IgPSBCTEtWU0NfTUlOT1JTOwotCWVsc2UKLQkJYmxrZGV2LT5nZC0+Zmlyc3RfbWlub3IgPSAwOwotCWJsa2Rldi0+Z2QtPmZvcHMgPSAmYmxvY2tfb3BzOwotCWJsa2Rldi0+Z2QtPmV2ZW50cyA9IERJU0tfRVZFTlRfTUVESUFfQ0hBTkdFOwotCWJsa2Rldi0+Z2QtPnByaXZhdGVfZGF0YSA9IGJsa2RldjsKLQlibGtkZXYtPmdkLT5kcml2ZXJmc19kZXYgPSAmKGJsa2Rldi0+ZGV2aWNlX2N0eC0+ZGV2aWNlKTsKLQlzcHJpbnRmKGJsa2Rldi0+Z2QtPmRpc2tfbmFtZSwgImhkJWMiLCAnYScgKyBkZXZudW0pOwotCi0JYmxrdnNjX2RvX2lucXVpcnkoYmxrZGV2KTsKLQlpZiAoYmxrZGV2LT5kZXZpY2VfdHlwZSA9PSBEVkRfVFlQRSkgewotCQlzZXRfZGlza19ybyhibGtkZXYtPmdkLCAxKTsKLQkJYmxrZGV2LT5nZC0+ZmxhZ3MgfD0gR0VOSERfRkxfUkVNT1ZBQkxFOwotCQlibGt2c2NfZG9fcmVhZF9jYXBhY2l0eShibGtkZXYpOwotCX0gZWxzZSB7Ci0JCWJsa3ZzY19kb19yZWFkX2NhcGFjaXR5MTYoYmxrZGV2KTsKLQl9Ci0KLQlzZXRfY2FwYWNpdHkoYmxrZGV2LT5nZCwgYmxrZGV2LT5jYXBhY2l0eSAqIChibGtkZXYtPnNlY3Rvcl9zaXplLzUxMikpOwotCWJsa19xdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUoYmxrZGV2LT5nZC0+cXVldWUsIGJsa2Rldi0+c2VjdG9yX3NpemUpOwotCS8qIGdvISAqLwotCWFkZF9kaXNrKGJsa2Rldi0+Z2QpOwotCi0JRFBSSU5UX0lORk8oQkxLVlNDX0RSViwgIiVzIGFkZGVkISEgY2FwYWNpdHkgJWx1IHNlY3Rvcl9zaXplICVkIiwKLQkJICAgIGJsa2Rldi0+Z2QtPmRpc2tfbmFtZSwgKHVuc2lnbmVkIGxvbmcpYmxrZGV2LT5jYXBhY2l0eSwKLQkJICAgIGJsa2Rldi0+c2VjdG9yX3NpemUpOwotCi0JcmV0dXJuIHJldDsKLQotUmVtb3ZlOgotCXN0b3J2c2NfZHJ2X29iai0+YmFzZS5kZXZfcm0oZGV2aWNlX29iaik7Ci0KLUNsZWFudXA6Ci0JaWYgKGJsa2RldikgewotCQlpZiAoYmxrZGV2LT5yZXF1ZXN0X3Bvb2wpIHsKLQkJCWttZW1fY2FjaGVfZGVzdHJveShibGtkZXYtPnJlcXVlc3RfcG9vbCk7Ci0JCQlibGtkZXYtPnJlcXVlc3RfcG9vbCA9IE5VTEw7Ci0JCX0KLQkJa2ZyZWUoYmxrZGV2KTsKLQkJYmxrZGV2ID0gTlVMTDsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBibGt2c2Nfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2aWNlKQotewotCXN0cnVjdCBibG9ja19kZXZpY2VfY29udGV4dCAqYmxrZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldmljZSk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghYmxrZGV2KQotCQlyZXR1cm47Ci0KLQlEUFJJTlRfREJHKEJMS1ZTQ19EUlYsICJibGt2c2Nfc2h1dGRvd24gLSB1c2VycyAlZCBkaXNrICVzXG4iLAotCQkgICBibGtkZXYtPnVzZXJzLCBibGtkZXYtPmdkLT5kaXNrX25hbWUpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJsa2Rldi0+bG9jaywgZmxhZ3MpOwotCi0JYmxrZGV2LT5zaHV0dGluZ19kb3duID0gMTsKLQotCWJsa19zdG9wX3F1ZXVlKGJsa2Rldi0+Z2QtPnF1ZXVlKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJsa2Rldi0+bG9jaywgZmxhZ3MpOwotCi0Jd2hpbGUgKGJsa2Rldi0+bnVtX291dHN0YW5kaW5nX3JlcXMpIHsKLQkJRFBSSU5UX0lORk8oU1RPUlZTQywgIndhaXRpbmcgZm9yICVkIHJlcXVlc3RzIHRvIGNvbXBsZXRlLi4uIiwKLQkJCSAgICBibGtkZXYtPm51bV9vdXRzdGFuZGluZ19yZXFzKTsKLQkJdWRlbGF5KDEwMCk7Ci0JfQotCi0JYmxrdnNjX2RvX2ZsdXNoKGJsa2Rldik7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYmxrZGV2LT5sb2NrLCBmbGFncyk7Ci0KLQlibGt2c2NfY2FuY2VsX3BlbmRpbmdfcmVxcyhibGtkZXYpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmxrZGV2LT5sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyBpbnQgYmxrdnNjX2RvX2ZsdXNoKHN0cnVjdCBibG9ja19kZXZpY2VfY29udGV4dCAqYmxrZGV2KQotewotCXN0cnVjdCBibGt2c2NfcmVxdWVzdCAqYmxrdnNjX3JlcTsKLQotCURQUklOVF9EQkcoQkxLVlNDX0RSViwgImJsa3ZzY19kb19mbHVzaCgpXG4iKTsKLQotCWlmIChibGtkZXYtPmRldmljZV90eXBlICE9IEhBUkRESVNLX1RZUEUpCi0JCXJldHVybiAwOwotCi0JYmxrdnNjX3JlcSA9IGttZW1fY2FjaGVfYWxsb2MoYmxrZGV2LT5yZXF1ZXN0X3Bvb2wsIEdGUF9LRVJORUwpOwotCWlmICghYmxrdnNjX3JlcSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltZW1zZXQoYmxrdnNjX3JlcSwgMCwgc2l6ZW9mKHN0cnVjdCBibGt2c2NfcmVxdWVzdCkpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmJsa3ZzY19yZXEtPndldmVudCk7Ci0JYmxrdnNjX3JlcS0+ZGV2ID0gYmxrZGV2OwotCWJsa3ZzY19yZXEtPnJlcSA9IE5VTEw7Ci0JYmxrdnNjX3JlcS0+d3JpdGUgPSAwOwotCi0JYmxrdnNjX3JlcS0+cmVxdWVzdC5kYXRhX2J1ZmZlci5wZm5fYXJyYXlbMF0gPSAwOwotCWJsa3ZzY19yZXEtPnJlcXVlc3QuZGF0YV9idWZmZXIub2Zmc2V0ID0gMDsKLQlibGt2c2NfcmVxLT5yZXF1ZXN0LmRhdGFfYnVmZmVyLmxlbiA9IDA7Ci0KLQlibGt2c2NfcmVxLT5jbW5kWzBdID0gU1lOQ0hST05JWkVfQ0FDSEU7Ci0JYmxrdnNjX3JlcS0+Y21kX2xlbiA9IDEwOworCXJldCA9IHN0b3J2c2NfZGV2X2FkZChkZXZpY2UsIGFkZGl0aW9uYWxfaW5mbyk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OwogCiAJLyoKLQkgKiBTZXQgdGhpcyBoZXJlIHNpbmNlIHRoZSBjb21wbGV0aW9uIHJvdXRpbmUgbWF5IGJlIGludm9rZWQgYW5kCi0JICogY29tcGxldGVkIGJlZm9yZSB3ZSByZXR1cm4KKwkgKiBXZSBuZWVkIHRvIHVzZSB0aGUgZGV2aWNlIGluc3RhbmNlIGd1aWQgdG8gc2V0IHRoZSBwYXRoIGFuZCB0YXJnZXQKKwkgKiBpZC4gRm9yIElERSBkZXZpY2VzLCB0aGUgZGV2aWNlIGluc3RhbmNlIGlkIGlzIGZvcm1hdHRlZCBhcworCSAqIDxidXMgaWQ+ICogLSA8ZGV2aWNlIGlkPiAtIDg4OTkgLSAwMDAwMDAwMDAwMDAuCiAJICovCi0JYmxrdnNjX3JlcS0+Y29uZCA9IDA7Ci0JYmxrdnNjX3N1Ym1pdF9yZXF1ZXN0KGJsa3ZzY19yZXEsIGJsa3ZzY19jbWRfY29tcGxldGlvbik7CisJZGV2aWNlX2luZm8tPnBhdGhfaWQgPSBkZXZpY2UtPmRldl9pbnN0YW5jZS5kYXRhWzNdIDw8IDI0IHwKKwkJCSAgICAgZGV2aWNlLT5kZXZfaW5zdGFuY2UuZGF0YVsyXSA8PCAxNiB8CisJCQkgICAgIGRldmljZS0+ZGV2X2luc3RhbmNlLmRhdGFbMV0gPDwgOCAgfAorCQkJICAgICBkZXZpY2UtPmRldl9pbnN0YW5jZS5kYXRhWzBdOwogCi0Jd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGJsa3ZzY19yZXEtPndldmVudCwgYmxrdnNjX3JlcS0+Y29uZCk7CisJZGV2aWNlX2luZm8tPnRhcmdldF9pZCA9IGRldmljZS0+ZGV2X2luc3RhbmNlLmRhdGFbNV0gPDwgOCB8CisJCQkgICAgICAgZGV2aWNlLT5kZXZfaW5zdGFuY2UuZGF0YVs0XTsKIAotCWttZW1fY2FjaGVfZnJlZShibGt2c2NfcmVxLT5kZXYtPnJlcXVlc3RfcG9vbCwgYmxrdnNjX3JlcSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBibGt2c2Nfc3VibWl0X3JlcXVlc3Qoc3RydWN0IGJsa3ZzY19yZXF1ZXN0ICpibGt2c2NfcmVxLAorCQkJdm9pZCAoKnJlcXVlc3RfY29tcGxldGlvbikoc3RydWN0IGh2X3N0b3J2c2NfcmVxdWVzdCAqKSkKK3sKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlX2NvbnRleHQgKmJsa2RldiA9IGJsa3ZzY19yZXEtPmRldjsKKwlzdHJ1Y3QgaHZfc3RvcnZzY19yZXF1ZXN0ICpzdG9ydnNjX3JlcTsKKwlzdHJ1Y3Qgdm1zY3NpX3JlcXVlc3QgKnZtX3NyYjsKKwlpbnQgcmV0OworCisKKwlzdG9ydnNjX3JlcSA9ICZibGt2c2NfcmVxLT5yZXF1ZXN0OworCXZtX3NyYiA9ICZzdG9ydnNjX3JlcS0+dnN0b3JfcGFja2V0LnZtX3NyYjsKKworCXZtX3NyYi0+ZGF0YV9pbiA9IGJsa3ZzY19yZXEtPndyaXRlID8gV1JJVEVfVFlQRSA6IFJFQURfVFlQRTsKKworCXN0b3J2c2NfcmVxLT5vbl9pb19jb21wbGV0aW9uID0gcmVxdWVzdF9jb21wbGV0aW9uOworCXN0b3J2c2NfcmVxLT5jb250ZXh0ID0gYmxrdnNjX3JlcTsKKworCXZtX3NyYi0+cG9ydF9udW1iZXIgPSBibGtkZXYtPnBvcnQ7CisJdm1fc3JiLT5wYXRoX2lkID0gYmxrZGV2LT5wYXRoOworCXZtX3NyYi0+dGFyZ2V0X2lkID0gYmxrZGV2LT50YXJnZXQ7CisJdm1fc3JiLT5sdW4gPSAwOwkgLyogdGhpcyBpcyBub3QgcmVhbGx5IHVzZWQgYXQgYWxsICovCisKKwl2bV9zcmItPmNkYl9sZW5ndGggPSBibGt2c2NfcmVxLT5jbWRfbGVuOworCisJbWVtY3B5KHZtX3NyYi0+Y2RiLCBibGt2c2NfcmVxLT5jbW5kLCB2bV9zcmItPmNkYl9sZW5ndGgpOworCisJc3RvcnZzY19yZXEtPnNlbnNlX2J1ZmZlciA9IGJsa3ZzY19yZXEtPnNlbnNlX2J1ZmZlcjsKKworCXJldCA9ICBzdG9ydnNjX2RvX2lvKGJsa2Rldi0+ZGV2aWNlX2N0eCwKKwkJCQkJICAgJmJsa3ZzY19yZXEtPnJlcXVlc3QpOworCWlmIChyZXQgPT0gMCkKKwkJYmxrZGV2LT5udW1fb3V0c3RhbmRpbmdfcmVxcysrOworCisJcmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgaW50IGJsa3ZzY19vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSkKK3sKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlX2NvbnRleHQgKmJsa2RldiA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJsa2Rldi0+bG9jaywgZmxhZ3MpOworCisJYmxrZGV2LT51c2VycysrOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmxrZGV2LT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotLyogRG8gYSBzY3NpIElOUVVJUlkgY21kIGhlcmUgdG8gZ2V0IHRoZSBkZXZpY2UgdHlwZSAoaWUgZGlzayBvciBkdmQpICovCi1zdGF0aWMgaW50IGJsa3ZzY19kb19pbnF1aXJ5KHN0cnVjdCBibG9ja19kZXZpY2VfY29udGV4dCAqYmxrZGV2KQorCitzdGF0aWMgaW50IGJsa3ZzY19nZXRnZW8oc3RydWN0IGJsb2NrX2RldmljZSAqYmQsIHN0cnVjdCBoZF9nZW9tZXRyeSAqaGcpCit7CisJc2VjdG9yX3QgbnNlY3QgPSBnZXRfY2FwYWNpdHkoYmQtPmJkX2Rpc2spOworCXNlY3Rvcl90IGN5bGluZGVycyA9IG5zZWN0OworCisJLyoKKwkgKiBXZSBhcmUgbWFraW5nIHVwIHRoZXNlIHZhbHVlczsgbGV0IHVzIGtlZXAgaXQgc2ltcGxlLgorCSAqLworCWhnLT5oZWFkcyA9IDB4ZmY7CisJaGctPnNlY3RvcnMgPSAweDNmOworCXNlY3Rvcl9kaXYoY3lsaW5kZXJzLCBoZy0+aGVhZHMgKiBoZy0+c2VjdG9ycyk7CisJaGctPmN5bGluZGVycyA9IGN5bGluZGVyczsKKwlpZiAoKHNlY3Rvcl90KShoZy0+Y3lsaW5kZXJzICsgMSkgKiBoZy0+aGVhZHMgKiBoZy0+c2VjdG9ycyA8IG5zZWN0KQorCQloZy0+Y3lsaW5kZXJzID0gMHhmZmZmOworCXJldHVybiAwOworCit9CisKKworc3RhdGljIHZvaWQgYmxrdnNjX2luaXRfcncoc3RydWN0IGJsa3ZzY19yZXF1ZXN0ICpibGt2c2NfcmVxKQoreworCisJYmxrdnNjX3JlcS0+Y21kX2xlbiA9IDE2OworCisJaWYgKHJxX2RhdGFfZGlyKGJsa3ZzY19yZXEtPnJlcSkpIHsKKwkJYmxrdnNjX3JlcS0+d3JpdGUgPSAxOworCQlibGt2c2NfcmVxLT5jbW5kWzBdID0gV1JJVEVfMTY7CisJfSBlbHNlIHsKKwkJYmxrdnNjX3JlcS0+d3JpdGUgPSAwOworCQlibGt2c2NfcmVxLT5jbW5kWzBdID0gUkVBRF8xNjsKKwl9CisKKwlibGt2c2NfcmVxLT5jbW5kWzFdIHw9CisJKGJsa3ZzY19yZXEtPnJlcS0+Y21kX2ZsYWdzICYgUkVRX0ZVQSkgPyAweDggOiAwOworCisJKih1bnNpZ25lZCBsb25nIGxvbmcgKikmYmxrdnNjX3JlcS0+Y21uZFsyXSA9CisJY3B1X3RvX2JlNjQoYmxrdnNjX3JlcS0+c2VjdG9yX3N0YXJ0KTsKKwkqKHVuc2lnbmVkIGludCAqKSZibGt2c2NfcmVxLT5jbW5kWzEwXSA9CisJY3B1X3RvX2JlMzIoYmxrdnNjX3JlcS0+c2VjdG9yX2NvdW50KTsKK30KKworCitzdGF0aWMgaW50IGJsa3ZzY19pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZCwgZm1vZGVfdCBtb2RlLAorCQkJdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlX2NvbnRleHQgKmJsa2RldiA9IGJkLT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgSERJT19HRVRfSURFTlRJVFk6CisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCBibGtkZXYtPmRldmljZV9pZCwKKwkJCQkgYmxrZGV2LT5kZXZpY2VfaWRfbGVuKSkKKwkJCXJldCA9IC1FRkFVTFQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGJsa3ZzY19jbWRfY29tcGxldGlvbihzdHJ1Y3QgaHZfc3RvcnZzY19yZXF1ZXN0ICpyZXF1ZXN0KQoreworCXN0cnVjdCBibGt2c2NfcmVxdWVzdCAqYmxrdnNjX3JlcSA9CisJCQkoc3RydWN0IGJsa3ZzY19yZXF1ZXN0ICopcmVxdWVzdC0+Y29udGV4dDsKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlX2NvbnRleHQgKmJsa2RldiA9CisJCQkoc3RydWN0IGJsb2NrX2RldmljZV9jb250ZXh0ICopYmxrdnNjX3JlcS0+ZGV2OworCXN0cnVjdCBzY3NpX3NlbnNlX2hkciBzZW5zZV9oZHI7CisJc3RydWN0IHZtc2NzaV9yZXF1ZXN0ICp2bV9zcmI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCisJdm1fc3JiID0gJmJsa3ZzY19yZXEtPnJlcXVlc3QudnN0b3JfcGFja2V0LnZtX3NyYjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZibGtkZXYtPmxvY2ssIGZsYWdzKTsKKwlibGtkZXYtPm51bV9vdXRzdGFuZGluZ19yZXFzLS07CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmxrZGV2LT5sb2NrLCBmbGFncyk7CisKKwlpZiAodm1fc3JiLT5zY3NpX3N0YXR1cykKKwkJaWYgKHNjc2lfbm9ybWFsaXplX3NlbnNlKGJsa3ZzY19yZXEtPnNlbnNlX2J1ZmZlciwKKwkJCQkJIFNDU0lfU0VOU0VfQlVGRkVSU0laRSwgJnNlbnNlX2hkcikpCisJCQlzY3NpX3ByaW50X3NlbnNlX2hkcigiYmxrdnNjIiwgJnNlbnNlX2hkcik7CisKKwljb21wbGV0ZSgmYmxrdnNjX3JlcS0+cmVxdWVzdC53YWl0X2V2ZW50KTsKK30KKworCitzdGF0aWMgaW50IGJsa3ZzY19kb19vcGVyYXRpb24oc3RydWN0IGJsb2NrX2RldmljZV9jb250ZXh0ICpibGtkZXYsCisJCQkJZW51bSBibGt2c2Nfb3BfdHlwZSBvcCkKIHsKIAlzdHJ1Y3QgYmxrdnNjX3JlcXVlc3QgKmJsa3ZzY19yZXE7CiAJc3RydWN0IHBhZ2UgKnBhZ2VfYnVmOwogCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKIAl1bnNpZ25lZCBjaGFyIGRldmljZV90eXBlOwotCi0JRFBSSU5UX0RCRyhCTEtWU0NfRFJWLCAiYmxrdnNjX2RvX2lucXVpcnkoKVxuIik7Ci0KLQlibGt2c2NfcmVxID0ga21lbV9jYWNoZV9hbGxvYyhibGtkZXYtPnJlcXVlc3RfcG9vbCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFibGt2c2NfcmVxKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbXNldChibGt2c2NfcmVxLCAwLCBzaXplb2Yoc3RydWN0IGJsa3ZzY19yZXF1ZXN0KSk7Ci0JcGFnZV9idWYgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOwotCWlmICghcGFnZV9idWYpIHsKLQkJa21lbV9jYWNoZV9mcmVlKGJsa3ZzY19yZXEtPmRldi0+cmVxdWVzdF9wb29sLCBibGt2c2NfcmVxKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JaW5pdF93YWl0cXVldWVfaGVhZCgmYmxrdnNjX3JlcS0+d2V2ZW50KTsKLQlibGt2c2NfcmVxLT5kZXYgPSBibGtkZXY7Ci0JYmxrdnNjX3JlcS0+cmVxID0gTlVMTDsKLQlibGt2c2NfcmVxLT53cml0ZSA9IDA7Ci0KLQlibGt2c2NfcmVxLT5yZXF1ZXN0LmRhdGFfYnVmZmVyLnBmbl9hcnJheVswXSA9IHBhZ2VfdG9fcGZuKHBhZ2VfYnVmKTsKLQlibGt2c2NfcmVxLT5yZXF1ZXN0LmRhdGFfYnVmZmVyLm9mZnNldCA9IDA7Ci0JYmxrdnNjX3JlcS0+cmVxdWVzdC5kYXRhX2J1ZmZlci5sZW4gPSA2NDsKLQotCWJsa3ZzY19yZXEtPmNtbmRbMF0gPSBJTlFVSVJZOwotCWJsa3ZzY19yZXEtPmNtbmRbMV0gPSAweDE7CQkvKiBHZXQgcHJvZHVjdCBkYXRhICovCi0JYmxrdnNjX3JlcS0+Y21uZFsyXSA9IDB4ODM7CQkvKiBtb2RlIHBhZ2UgODMgKi8KLQlibGt2c2NfcmVxLT5jbW5kWzRdID0gNjQ7Ci0JYmxrdnNjX3JlcS0+Y21kX2xlbiA9IDY7Ci0KLQkvKgotCSAqIFNldCB0aGlzIGhlcmUgc2luY2UgdGhlIGNvbXBsZXRpb24gcm91dGluZSBtYXkgYmUgaW52b2tlZCBhbmQKLQkgKiBjb21wbGV0ZWQgYmVmb3JlIHdlIHJldHVybgotCSAqLwotCWJsa3ZzY19yZXEtPmNvbmQgPSAwOwotCi0JYmxrdnNjX3N1Ym1pdF9yZXF1ZXN0KGJsa3ZzY19yZXEsIGJsa3ZzY19jbWRfY29tcGxldGlvbik7Ci0KLQlEUFJJTlRfREJHKEJMS1ZTQ19EUlYsICJ3YWl0aW5nICVwIHRvIGNvbXBsZXRlIC0gY29uZCAlZFxuIiwKLQkJICAgYmxrdnNjX3JlcSwgYmxrdnNjX3JlcS0+Y29uZCk7Ci0KLQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoYmxrdnNjX3JlcS0+d2V2ZW50LCBibGt2c2NfcmVxLT5jb25kKTsKLQotCWJ1ZiA9IGttYXAocGFnZV9idWYpOwotCi0JLyogcHJpbnRfaGV4X2R1bXBfYnl0ZXMoIiIsIERVTVBfUFJFRklYX05PTkUsIGJ1ZiwgNjQpOyAqLwotCS8qIGJlIHRvIGxlICovCi0JZGV2aWNlX3R5cGUgPSBidWZbMF0gJiAweDFGOwotCi0JaWYgKGRldmljZV90eXBlID09IDB4MCkgewotCQlibGtkZXYtPmRldmljZV90eXBlID0gSEFSRERJU0tfVFlQRTsKLQl9IGVsc2UgaWYgKGRldmljZV90eXBlID09IDB4NSkgewotCQlibGtkZXYtPmRldmljZV90eXBlID0gRFZEX1RZUEU7Ci0JfSBlbHNlIHsKLQkJLyogVE9ETzogdGhpcyBpcyBjdXJyZW50bHkgdW5zdXBwb3J0ZWQgZGV2aWNlIHR5cGUgKi8KLQkJYmxrZGV2LT5kZXZpY2VfdHlwZSA9IFVOS05PV05fREVWX1RZUEU7Ci0JfQotCi0JRFBSSU5UX0RCRyhCTEtWU0NfRFJWLCAiZGV2aWNlIHR5cGUgJWRcbiIsIGRldmljZV90eXBlKTsKLQotCWJsa2Rldi0+ZGV2aWNlX2lkX2xlbiA9IGJ1Zls3XTsKLQlpZiAoYmxrZGV2LT5kZXZpY2VfaWRfbGVuID4gNjQpCi0JCWJsa2Rldi0+ZGV2aWNlX2lkX2xlbiA9IDY0OwotCi0JbWVtY3B5KGJsa2Rldi0+ZGV2aWNlX2lkLCAmYnVmWzhdLCBibGtkZXYtPmRldmljZV9pZF9sZW4pOwotCS8qIHByaW50a19oZXhfZHVtcF9ieXRlcygiIiwgRFVNUF9QUkVGSVhfTk9ORSwgYmxrZGV2LT5kZXZpY2VfaWQsCi0JICogYmxrZGV2LT5kZXZpY2VfaWRfbGVuKTsgKi8KLQotCWt1bm1hcChwYWdlX2J1Zik7Ci0KLQlfX2ZyZWVfcGFnZShwYWdlX2J1Zik7Ci0KLQlrbWVtX2NhY2hlX2ZyZWUoYmxrdnNjX3JlcS0+ZGV2LT5yZXF1ZXN0X3Bvb2wsIGJsa3ZzY19yZXEpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIERvIGEgc2NzaSBSRUFEX0NBUEFDSVRZIGNtZCBoZXJlIHRvIGdldCB0aGUgc2l6ZSBvZiB0aGUgZGlzayAqLwotc3RhdGljIGludCBibGt2c2NfZG9fcmVhZF9jYXBhY2l0eShzdHJ1Y3QgYmxvY2tfZGV2aWNlX2NvbnRleHQgKmJsa2RldikKLXsKLQlzdHJ1Y3QgYmxrdnNjX3JlcXVlc3QgKmJsa3ZzY19yZXE7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2VfYnVmOwotCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKIAlzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgc2Vuc2VfaGRyOworCXN0cnVjdCB2bXNjc2lfcmVxdWVzdCAqdm1fc3JiOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlEUFJJTlRfREJHKEJMS1ZTQ19EUlYsICJibGt2c2NfZG9fcmVhZF9jYXBhY2l0eSgpXG4iKTsKKwlpbnQgcmV0ID0gMDsKIAotCWJsa2Rldi0+c2VjdG9yX3NpemUgPSAwOwotCWJsa2Rldi0+Y2FwYWNpdHkgPSAwOwotCWJsa2Rldi0+bWVkaWFfbm90X3ByZXNlbnQgPSAwOyAvKiBhc3N1bWUgYSBkaXNrIGlzIHByZXNlbnQgKi8KLQotCWJsa3ZzY19yZXEgPSBrbWVtX2NhY2hlX2FsbG9jKGJsa2Rldi0+cmVxdWVzdF9wb29sLCBHRlBfS0VSTkVMKTsKKwlibGt2c2NfcmVxID0ga21lbV9jYWNoZV96YWxsb2MoYmxrZGV2LT5yZXF1ZXN0X3Bvb2wsIEdGUF9LRVJORUwpOwogCWlmICghYmxrdnNjX3JlcSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW1zZXQoYmxrdnNjX3JlcSwgMCwgc2l6ZW9mKHN0cnVjdCBibGt2c2NfcmVxdWVzdCkpOwogCXBhZ2VfYnVmID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIXBhZ2VfYnVmKSB7CiAJCWttZW1fY2FjaGVfZnJlZShibGt2c2NfcmVxLT5kZXYtPnJlcXVlc3RfcG9vbCwgYmxrdnNjX3JlcSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmJsa3ZzY19yZXEtPndldmVudCk7CisJdm1fc3JiID0gJmJsa3ZzY19yZXEtPnJlcXVlc3QudnN0b3JfcGFja2V0LnZtX3NyYjsKKwlpbml0X2NvbXBsZXRpb24oJmJsa3ZzY19yZXEtPnJlcXVlc3Qud2FpdF9ldmVudCk7CiAJYmxrdnNjX3JlcS0+ZGV2ID0gYmxrZGV2OwogCWJsa3ZzY19yZXEtPnJlcSA9IE5VTEw7CiAJYmxrdnNjX3JlcS0+d3JpdGUgPSAwOwogCi0JYmxrdnNjX3JlcS0+cmVxdWVzdC5kYXRhX2J1ZmZlci5wZm5fYXJyYXlbMF0gPSBwYWdlX3RvX3BmbihwYWdlX2J1Zik7CisJYmxrdnNjX3JlcS0+cmVxdWVzdC5kYXRhX2J1ZmZlci5wZm5fYXJyYXlbMF0gPQorCXBhZ2VfdG9fcGZuKHBhZ2VfYnVmKTsKIAlibGt2c2NfcmVxLT5yZXF1ZXN0LmRhdGFfYnVmZmVyLm9mZnNldCA9IDA7Ci0JYmxrdnNjX3JlcS0+cmVxdWVzdC5kYXRhX2J1ZmZlci5sZW4gPSA4OwogCi0JYmxrdnNjX3JlcS0+Y21uZFswXSA9IFJFQURfQ0FQQUNJVFk7Ci0JYmxrdnNjX3JlcS0+Y21kX2xlbiA9IDE2OworCXN3aXRjaCAob3ApIHsKKwljYXNlIERPX0lOUVVJUlk6CisJCWJsa3ZzY19yZXEtPmNtbmRbMF0gPSBJTlFVSVJZOworCQlibGt2c2NfcmVxLT5jbW5kWzFdID0gMHgxOwkJLyogR2V0IHByb2R1Y3QgZGF0YSAqLworCQlibGt2c2NfcmVxLT5jbW5kWzJdID0gMHg4MzsJCS8qIG1vZGUgcGFnZSA4MyAqLworCQlibGt2c2NfcmVxLT5jbW5kWzRdID0gNjQ7CisJCWJsa3ZzY19yZXEtPmNtZF9sZW4gPSA2OworCQlibGt2c2NfcmVxLT5yZXF1ZXN0LmRhdGFfYnVmZmVyLmxlbiA9IDY0OworCQlicmVhazsKIAotCS8qCi0JICogU2V0IHRoaXMgaGVyZSBzaW5jZSB0aGUgY29tcGxldGlvbiByb3V0aW5lIG1heSBiZSBpbnZva2VkCi0JICogYW5kIGNvbXBsZXRlZCBiZWZvcmUgd2UgcmV0dXJuCi0JICovCi0JYmxrdnNjX3JlcS0+Y29uZCA9IDA7CisJY2FzZSBET19DQVBBQ0lUWToKKwkJYmxrZGV2LT5zZWN0b3Jfc2l6ZSA9IDA7CisJCWJsa2Rldi0+Y2FwYWNpdHkgPSAwOwogCisJCWJsa3ZzY19yZXEtPmNtbmRbMF0gPSBSRUFEX0NBUEFDSVRZOworCQlibGt2c2NfcmVxLT5jbWRfbGVuID0gMTY7CisJCWJsa3ZzY19yZXEtPnJlcXVlc3QuZGF0YV9idWZmZXIubGVuID0gODsKKwkJYnJlYWs7CisKKwljYXNlIERPX0ZMVVNIOgorCQlibGt2c2NfcmVxLT5jbW5kWzBdID0gU1lOQ0hST05JWkVfQ0FDSEU7CisJCWJsa3ZzY19yZXEtPmNtZF9sZW4gPSAxMDsKKwkJYmxrdnNjX3JlcS0+cmVxdWVzdC5kYXRhX2J1ZmZlci5wZm5fYXJyYXlbMF0gPSAwOworCQlibGt2c2NfcmVxLT5yZXF1ZXN0LmRhdGFfYnVmZmVyLmxlbiA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmxrZGV2LT5sb2NrLCBmbGFncyk7CiAJYmxrdnNjX3N1Ym1pdF9yZXF1ZXN0KGJsa3ZzY19yZXEsIGJsa3ZzY19jbWRfY29tcGxldGlvbik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmxrZGV2LT5sb2NrLCBmbGFncyk7CiAKLQlEUFJJTlRfREJHKEJMS1ZTQ19EUlYsICJ3YWl0aW5nICVwIHRvIGNvbXBsZXRlIC0gY29uZCAlZFxuIiwKLQkJICAgYmxrdnNjX3JlcSwgYmxrdnNjX3JlcS0+Y29uZCk7Ci0KLQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoYmxrdnNjX3JlcS0+d2V2ZW50LCBibGt2c2NfcmVxLT5jb25kKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJmJsa3ZzY19yZXEtPnJlcXVlc3Qud2FpdF9ldmVudCk7CiAKIAkvKiBjaGVjayBlcnJvciAqLwotCWlmIChibGt2c2NfcmVxLT5yZXF1ZXN0LnN0YXR1cykgeworCWlmICh2bV9zcmItPnNjc2lfc3RhdHVzKSB7CiAJCXNjc2lfbm9ybWFsaXplX3NlbnNlKGJsa3ZzY19yZXEtPnNlbnNlX2J1ZmZlciwKIAkJCQkgICAgIFNDU0lfU0VOU0VfQlVGRkVSU0laRSwgJnNlbnNlX2hkcik7CiAKLQkJaWYgKHNlbnNlX2hkci5hc2MgPT0gMHgzQSkgewotCQkJLyogTWVkaXVtIG5vdCBwcmVzZW50ICovCi0JCQlibGtkZXYtPm1lZGlhX25vdF9wcmVzZW50ID0gMTsKLQkJfQogCQlyZXR1cm4gMDsKIAl9CisKIAlidWYgPSBrbWFwKHBhZ2VfYnVmKTsKIAotCS8qIGJlIHRvIGxlICovCi0JYmxrZGV2LT5jYXBhY2l0eSA9ICgoYnVmWzBdIDw8IDI0KSB8IChidWZbMV0gPDwgMTYpIHwKLQkJCSAgICAoYnVmWzJdIDw8IDgpIHwgYnVmWzNdKSArIDE7Ci0JYmxrZGV2LT5zZWN0b3Jfc2l6ZSA9IChidWZbNF0gPDwgMjQpIHwgKGJ1Zls1XSA8PCAxNikgfAotCQkJICAgICAgKGJ1Zls2XSA8PCA4KSB8IGJ1Zls3XTsKKwlzd2l0Y2ggKG9wKSB7CisJY2FzZSBET19JTlFVSVJZOgorCQlkZXZpY2VfdHlwZSA9IGJ1ZlswXSAmIDB4MUY7CisKKwkJaWYgKGRldmljZV90eXBlID09IDB4MCkKKwkJCWJsa2Rldi0+ZGV2aWNlX3R5cGUgPSBIQVJERElTS19UWVBFOworCQkgZWxzZQorCQkJYmxrZGV2LT5kZXZpY2VfdHlwZSA9IFVOS05PV05fREVWX1RZUEU7CisKKwkJYmxrZGV2LT5kZXZpY2VfaWRfbGVuID0gYnVmWzddOworCQlpZiAoYmxrZGV2LT5kZXZpY2VfaWRfbGVuID4gNjQpCisJCQlibGtkZXYtPmRldmljZV9pZF9sZW4gPSA2NDsKKworCQltZW1jcHkoYmxrZGV2LT5kZXZpY2VfaWQsICZidWZbOF0sIGJsa2Rldi0+ZGV2aWNlX2lkX2xlbik7CisJCWJyZWFrOworCisJY2FzZSBET19DQVBBQ0lUWToKKwkJLyogYmUgdG8gbGUgKi8KKwkJYmxrZGV2LT5jYXBhY2l0eSA9CisJCSgoYnVmWzBdIDw8IDI0KSB8IChidWZbMV0gPDwgMTYpIHwKKwkJKGJ1ZlsyXSA8PCA4KSB8IGJ1ZlszXSkgKyAxOworCisJCWJsa2Rldi0+c2VjdG9yX3NpemUgPQorCQkoYnVmWzRdIDw8IDI0KSB8IChidWZbNV0gPDwgMTYpIHwKKwkJKGJ1Zls2XSA8PCA4KSB8IGJ1Zls3XTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisKKwl9CisKK2NsZWFudXA6CiAKIAlrdW5tYXAocGFnZV9idWYpOwogCkBAIC02MzEsMTE5ICs0MjQsODYgQEAKIAogCWttZW1fY2FjaGVfZnJlZShibGt2c2NfcmVxLT5kZXYtPnJlcXVlc3RfcG9vbCwgYmxrdnNjX3JlcSk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGJsa3ZzY19kb19yZWFkX2NhcGFjaXR5MTYoc3RydWN0IGJsb2NrX2RldmljZV9jb250ZXh0ICpibGtkZXYpCisKK3N0YXRpYyBpbnQgYmxrdnNjX2NhbmNlbF9wZW5kaW5nX3JlcXMoc3RydWN0IGJsb2NrX2RldmljZV9jb250ZXh0ICpibGtkZXYpCiB7Ci0Jc3RydWN0IGJsa3ZzY19yZXF1ZXN0ICpibGt2c2NfcmVxOwotCXN0cnVjdCBwYWdlICpwYWdlX2J1ZjsKLQl1bnNpZ25lZCBjaGFyICpidWY7Ci0Jc3RydWN0IHNjc2lfc2Vuc2VfaGRyIHNlbnNlX2hkcjsKKwlzdHJ1Y3QgYmxrdnNjX3JlcXVlc3QgKnBlbmRfcmVxLCAqdG1wOworCXN0cnVjdCBibGt2c2NfcmVxdWVzdCAqY29tcF9yZXEsICp0bXAyOworCXN0cnVjdCB2bXNjc2lfcmVxdWVzdCAqdm1fc3JiOwogCi0JRFBSSU5UX0RCRyhCTEtWU0NfRFJWLCAiYmxrdnNjX2RvX3JlYWRfY2FwYWNpdHkxNigpXG4iKTsKKwlpbnQgcmV0ID0gMDsKIAotCWJsa2Rldi0+c2VjdG9yX3NpemUgPSAwOwotCWJsa2Rldi0+Y2FwYWNpdHkgPSAwOwotCWJsa2Rldi0+bWVkaWFfbm90X3ByZXNlbnQgPSAwOyAvKiBhc3N1bWUgYSBkaXNrIGlzIHByZXNlbnQgKi8KIAotCWJsa3ZzY19yZXEgPSBrbWVtX2NhY2hlX2FsbG9jKGJsa2Rldi0+cmVxdWVzdF9wb29sLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJsa3ZzY19yZXEpCi0JCXJldHVybiAtRU5PTUVNOworCS8qIEZsdXNoIHRoZSBwZW5kaW5nIGxpc3QgZmlyc3QgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGVuZF9yZXEsIHRtcCwgJmJsa2Rldi0+cGVuZGluZ19saXN0LAorCQkJCSBwZW5kX2VudHJ5KSB7CisJCS8qCisJCSAqIFRoZSBwZW5kX3JlcSBjb3VsZCBiZSBwYXJ0IG9mIGEgcGFydGlhbGx5IGNvbXBsZXRlZAorCQkgKiByZXF1ZXN0LiBJZiBzbywgY29tcGxldGUgdGhvc2UgcmVxIGZpcnN0IHVudGlsIHdlCisJCSAqIGhpdCB0aGUgcGVuZF9yZXEKKwkJICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb21wX3JlcSwgdG1wMiwKKwkJCQkJICZwZW5kX3JlcS0+Z3JvdXAtPmJsa3ZzY19yZXFfbGlzdCwKKwkJCQkJIHJlcV9lbnRyeSkgewogCi0JbWVtc2V0KGJsa3ZzY19yZXEsIDAsIHNpemVvZihzdHJ1Y3QgYmxrdnNjX3JlcXVlc3QpKTsKLQlwYWdlX2J1ZiA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwYWdlX2J1ZikgewotCQlrbWVtX2NhY2hlX2ZyZWUoYmxrdnNjX3JlcS0+ZGV2LT5yZXF1ZXN0X3Bvb2wsIGJsa3ZzY19yZXEpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CisJCQlpZiAoY29tcF9yZXEgPT0gcGVuZF9yZXEpCisJCQkJYnJlYWs7CiAKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZibGt2c2NfcmVxLT53ZXZlbnQpOwotCWJsa3ZzY19yZXEtPmRldiA9IGJsa2RldjsKLQlibGt2c2NfcmVxLT5yZXEgPSBOVUxMOwotCWJsa3ZzY19yZXEtPndyaXRlID0gMDsKKwkJCWxpc3RfZGVsKCZjb21wX3JlcS0+cmVxX2VudHJ5KTsKIAotCWJsa3ZzY19yZXEtPnJlcXVlc3QuZGF0YV9idWZmZXIucGZuX2FycmF5WzBdID0gcGFnZV90b19wZm4ocGFnZV9idWYpOwotCWJsa3ZzY19yZXEtPnJlcXVlc3QuZGF0YV9idWZmZXIub2Zmc2V0ID0gMDsKLQlibGt2c2NfcmVxLT5yZXF1ZXN0LmRhdGFfYnVmZmVyLmxlbiA9IDEyOworCQkJaWYgKGNvbXBfcmVxLT5yZXEpIHsKKwkJCQl2bV9zcmIgPQorCQkJCSZjb21wX3JlcS0+cmVxdWVzdC52c3Rvcl9wYWNrZXQuCisJCQkJdm1fc3JiOworCQkJCXJldCA9IF9fYmxrX2VuZF9yZXF1ZXN0KGNvbXBfcmVxLT5yZXEsCisJCQkJCSghdm1fc3JiLT5zY3NpX3N0YXR1cyA/IDAgOiAtRUlPKSwKKwkJCQkJY29tcF9yZXEtPnNlY3Rvcl9jb3VudCAqCisJCQkJCWJsa2Rldi0+c2VjdG9yX3NpemUpOwogCi0JYmxrdnNjX3JlcS0+Y21uZFswXSA9IDB4OUU7IC8qIFJFQURfQ0FQQUNJVFkxNjsgKi8KLQlibGt2c2NfcmVxLT5jbWRfbGVuID0gMTY7CisJCQkJLyogRklYTUU6IHNob3VsZG4ndCB0aGlzIGRvIG1vcmUgdGhhbiByZXR1cm4/ICovCisJCQkJaWYgKHJldCkKKwkJCQkJZ290byBvdXQ7CisJCQl9CiAKLQkvKgotCSAqIFNldCB0aGlzIGhlcmUgc2luY2UgdGhlIGNvbXBsZXRpb24gcm91dGluZSBtYXkgYmUgaW52b2tlZAotCSAqIGFuZCBjb21wbGV0ZWQgYmVmb3JlIHdlIHJldHVybgotCSAqLwotCWJsa3ZzY19yZXEtPmNvbmQgPSAwOwotCi0JYmxrdnNjX3N1Ym1pdF9yZXF1ZXN0KGJsa3ZzY19yZXEsIGJsa3ZzY19jbWRfY29tcGxldGlvbik7Ci0KLQlEUFJJTlRfREJHKEJMS1ZTQ19EUlYsICJ3YWl0aW5nICVwIHRvIGNvbXBsZXRlIC0gY29uZCAlZFxuIiwKLQkJICAgYmxrdnNjX3JlcSwgYmxrdnNjX3JlcS0+Y29uZCk7Ci0KLQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoYmxrdnNjX3JlcS0+d2V2ZW50LCBibGt2c2NfcmVxLT5jb25kKTsKLQotCS8qIGNoZWNrIGVycm9yICovCi0JaWYgKGJsa3ZzY19yZXEtPnJlcXVlc3Quc3RhdHVzKSB7Ci0JCXNjc2lfbm9ybWFsaXplX3NlbnNlKGJsa3ZzY19yZXEtPnNlbnNlX2J1ZmZlciwKLQkJCQkgICAgIFNDU0lfU0VOU0VfQlVGRkVSU0laRSwgJnNlbnNlX2hkcik7Ci0JCWlmIChzZW5zZV9oZHIuYXNjID09IDB4M0EpIHsKLQkJCS8qIE1lZGl1bSBub3QgcHJlc2VudCAqLwotCQkJYmxrZGV2LT5tZWRpYV9ub3RfcHJlc2VudCA9IDE7CisJCQlrbWVtX2NhY2hlX2ZyZWUoYmxrZGV2LT5yZXF1ZXN0X3Bvb2wsIGNvbXBfcmVxKTsKIAkJfQotCQlyZXR1cm4gMDsKKworCQlsaXN0X2RlbCgmcGVuZF9yZXEtPnBlbmRfZW50cnkpOworCisJCWxpc3RfZGVsKCZwZW5kX3JlcS0+cmVxX2VudHJ5KTsKKworCQlpZiAoY29tcF9yZXEtPnJlcSkgeworCQkJaWYgKCFfX2Jsa19lbmRfcmVxdWVzdChwZW5kX3JlcS0+cmVxLCAtRUlPLAorCQkJCQkgICAgICAgcGVuZF9yZXEtPnNlY3Rvcl9jb3VudCAqCisJCQkJCSAgICAgICBibGtkZXYtPnNlY3Rvcl9zaXplKSkgeworCQkJCS8qCisJCQkJICogQWxsIHRoZSBzZWN0b3JzIGhhdmUgYmVlbiB4ZmVycmVkIGllIHRoZQorCQkJCSAqIHJlcXVlc3QgaXMgZG9uZQorCQkJCSAqLworCQkJCWttZW1fY2FjaGVfZnJlZShibGtkZXYtPnJlcXVlc3RfcG9vbCwKKwkJCQkJCXBlbmRfcmVxLT5ncm91cCk7CisJCQl9CisJCX0KKworCQlrbWVtX2NhY2hlX2ZyZWUoYmxrZGV2LT5yZXF1ZXN0X3Bvb2wsIHBlbmRfcmVxKTsKIAl9Ci0JYnVmID0ga21hcChwYWdlX2J1Zik7CiAKLQkvKiBiZSB0byBsZSAqLwotCWJsa2Rldi0+Y2FwYWNpdHkgPSBiZTY0X3RvX2NwdSgqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKSAmYnVmWzBdKSArIDE7Ci0JYmxrZGV2LT5zZWN0b3Jfc2l6ZSA9IGJlMzJfdG9fY3B1KCoodW5zaWduZWQgaW50ICopJmJ1Zls4XSk7Ci0KLSNpZiAwCi0JYmxrZGV2LT5jYXBhY2l0eSA9ICgoYnVmWzBdIDw8IDI0KSB8IChidWZbMV0gPDwgMTYpIHwKLQkJCSAgICAoYnVmWzJdIDw8IDgpIHwgYnVmWzNdKSArIDE7Ci0JYmxrZGV2LT5zZWN0b3Jfc2l6ZSA9IChidWZbNF0gPDwgMjQpIHwgKGJ1Zls1XSA8PCAxNikgfAotCQkJICAgICAgKGJ1Zls2XSA8PCA4KSB8IGJ1Zls3XTsKLSNlbmRpZgotCi0Ja3VubWFwKHBhZ2VfYnVmKTsKLQotCV9fZnJlZV9wYWdlKHBhZ2VfYnVmKTsKLQotCWttZW1fY2FjaGVfZnJlZShibGt2c2NfcmVxLT5kZXYtPnJlcXVlc3RfcG9vbCwgYmxrdnNjX3JlcSk7Ci0KLQlyZXR1cm4gMDsKK291dDoKKwlyZXR1cm4gcmV0OwogfQogCisKIC8qCiAgKiBibGt2c2NfcmVtb3ZlKCkgLSBDYWxsYmFjayB3aGVuIG91ciBkZXZpY2UgaXMgcmVtb3ZlZAogICovCi1zdGF0aWMgaW50IGJsa3ZzY19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBibGt2c2NfcmVtb3ZlKHN0cnVjdCBodl9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaHZfZHJpdmVyICpkcnYgPQotCQkJCWRydl90b19odl9kcnYoZGV2aWNlLT5kcml2ZXIpOwotCXN0cnVjdCBzdG9ydnNjX2RyaXZlcl9vYmplY3QgKnN0b3J2c2NfZHJ2X29iaiA9Ci0JCQkJZHJ2LT5wcml2OwotCXN0cnVjdCBodl9kZXZpY2UgKmRldmljZV9vYmogPSBkZXZpY2VfdG9faHZfZGV2aWNlKGRldmljZSk7Ci0Jc3RydWN0IGJsb2NrX2RldmljZV9jb250ZXh0ICpibGtkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2aWNlKTsKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlX2NvbnRleHQgKmJsa2RldiA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2LT5kZXZpY2UpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldDsKIAotCURQUklOVF9EQkcoQkxLVlNDX0RSViwgImJsa3ZzY19yZW1vdmUoKVxuIik7Ci0KLQlpZiAoIXN0b3J2c2NfZHJ2X29iai0+YmFzZS5kZXZfcm0pCi0JCXJldHVybiAtMTsKLQotCS8qCi0JICogQ2FsbCB0byB0aGUgdnNjIGRyaXZlciB0byBsZXQgaXQga25vdyB0aGF0IHRoZSBkZXZpY2UgaXMgYmVpbmcKLQkgKiByZW1vdmVkCi0JICovCi0JcmV0ID0gc3RvcnZzY19kcnZfb2JqLT5iYXNlLmRldl9ybShkZXZpY2Vfb2JqKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJLyogVE9ETzogKi8KLQkJRFBSSU5UX0VSUihCTEtWU0NfRFJWLAotCQkJICAgInVuYWJsZSB0byByZW1vdmUgYmxrdnNjIGRldmljZSAocmV0ICVkKSIsIHJldCk7Ci0JfQogCiAJLyogR2V0IHRvIGEga25vd24gc3RhdGUgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmYmxrZGV2LT5sb2NrLCBmbGFncyk7CkBAIC03NTIsMTQ5ICs1MTIsNzcgQEAKIAogCWJsa19zdG9wX3F1ZXVlKGJsa2Rldi0+Z2QtPnF1ZXVlKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJsa2Rldi0+bG9jaywgZmxhZ3MpOwotCi0Jd2hpbGUgKGJsa2Rldi0+bnVtX291dHN0YW5kaW5nX3JlcXMpIHsKLQkJRFBSSU5UX0lORk8oU1RPUlZTQywgIndhaXRpbmcgZm9yICVkIHJlcXVlc3RzIHRvIGNvbXBsZXRlLi4uIiwKLQkJCSAgICBibGtkZXYtPm51bV9vdXRzdGFuZGluZ19yZXFzKTsKLQkJdWRlbGF5KDEwMCk7Ci0JfQotCi0JYmxrdnNjX2RvX2ZsdXNoKGJsa2Rldik7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYmxrZGV2LT5sb2NrLCBmbGFncyk7Ci0KIAlibGt2c2NfY2FuY2VsX3BlbmRpbmdfcmVxcyhibGtkZXYpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmxrZGV2LT5sb2NrLCBmbGFncyk7CiAKKwlibGt2c2NfZG9fb3BlcmF0aW9uKGJsa2RldiwgRE9fRkxVU0gpOworCiAJYmxrX2NsZWFudXBfcXVldWUoYmxrZGV2LT5nZC0+cXVldWUpOwogCisJLyoKKwkgKiBDYWxsIHRvIHRoZSB2c2MgZHJpdmVyIHRvIGxldCBpdCBrbm93IHRoYXQgdGhlIGRldmljZSBpcyBiZWluZworCSAqIHJlbW92ZWQKKwkgKi8KKwlzdG9ydnNjX2Rldl9yZW1vdmUoZGV2KTsKKwogCWRlbF9nZW5kaXNrKGJsa2Rldi0+Z2QpOwogCiAJa21lbV9jYWNoZV9kZXN0cm95KGJsa2Rldi0+cmVxdWVzdF9wb29sKTsKIAogCWtmcmVlKGJsa2Rldik7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOworCiB9CiAKLXN0YXRpYyB2b2lkIGJsa3ZzY19pbml0X3J3KHN0cnVjdCBibGt2c2NfcmVxdWVzdCAqYmxrdnNjX3JlcSkKK3N0YXRpYyB2b2lkIGJsa3ZzY19zaHV0ZG93bihzdHJ1Y3QgaHZfZGV2aWNlICpkZXYpCiB7Ci0JLyogQVNTRVJUKGJsa3ZzY19yZXEtPnJlcSk7ICovCi0JLyogQVNTRVJUKGJsa3ZzY19yZXEtPnNlY3Rvcl9jb3VudCA8PSAoTUFYX01VTFRJUEFHRV9CVUZGRVJfQ09VTlQqOCkpOyAqLworCXN0cnVjdCBibG9ja19kZXZpY2VfY29udGV4dCAqYmxrZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZkZXYtPmRldmljZSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWJsa3ZzY19yZXEtPmNtZF9sZW4gPSAxNjsKKwlpZiAoIWJsa2RldikKKwkJcmV0dXJuOwogCi0JaWYgKGJsa3ZzY19yZXEtPnNlY3Rvcl9zdGFydCA+IDB4ZmZmZmZmZmYpIHsKLQkJaWYgKHJxX2RhdGFfZGlyKGJsa3ZzY19yZXEtPnJlcSkpIHsKLQkJCWJsa3ZzY19yZXEtPndyaXRlID0gMTsKLQkJCWJsa3ZzY19yZXEtPmNtbmRbMF0gPSBXUklURV8xNjsKLQkJfSBlbHNlIHsKLQkJCWJsa3ZzY19yZXEtPndyaXRlID0gMDsKLQkJCWJsa3ZzY19yZXEtPmNtbmRbMF0gPSBSRUFEXzE2OwotCQl9CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJsa2Rldi0+bG9jaywgZmxhZ3MpOwogCi0JCWJsa3ZzY19yZXEtPmNtbmRbMV0gfD0KLQkJCShibGt2c2NfcmVxLT5yZXEtPmNtZF9mbGFncyAmIFJFUV9GVUEpID8gMHg4IDogMDsKKwlibGtkZXYtPnNodXR0aW5nX2Rvd24gPSAxOwogCi0JCSoodW5zaWduZWQgbG9uZyBsb25nICopJmJsa3ZzY19yZXEtPmNtbmRbMl0gPQotCQkJCWNwdV90b19iZTY0KGJsa3ZzY19yZXEtPnNlY3Rvcl9zdGFydCk7Ci0JCSoodW5zaWduZWQgaW50ICopJmJsa3ZzY19yZXEtPmNtbmRbMTBdID0KLQkJCQljcHVfdG9fYmUzMihibGt2c2NfcmVxLT5zZWN0b3JfY291bnQpOwotCX0gZWxzZSBpZiAoKGJsa3ZzY19yZXEtPnNlY3Rvcl9jb3VudCA+IDB4ZmYpIHx8Ci0JCSAgIChibGt2c2NfcmVxLT5zZWN0b3Jfc3RhcnQgPiAweDFmZmZmZikpIHsKLQkJaWYgKHJxX2RhdGFfZGlyKGJsa3ZzY19yZXEtPnJlcSkpIHsKLQkJCWJsa3ZzY19yZXEtPndyaXRlID0gMTsKLQkJCWJsa3ZzY19yZXEtPmNtbmRbMF0gPSBXUklURV8xMDsKLQkJfSBlbHNlIHsKLQkJCWJsa3ZzY19yZXEtPndyaXRlID0gMDsKLQkJCWJsa3ZzY19yZXEtPmNtbmRbMF0gPSBSRUFEXzEwOwotCQl9CisJYmxrX3N0b3BfcXVldWUoYmxrZGV2LT5nZC0+cXVldWUpOwogCi0JCWJsa3ZzY19yZXEtPmNtbmRbMV0gfD0KLQkJCShibGt2c2NfcmVxLT5yZXEtPmNtZF9mbGFncyAmIFJFUV9GVUEpID8gMHg4IDogMDsKKwlibGt2c2NfY2FuY2VsX3BlbmRpbmdfcmVxcyhibGtkZXYpOwogCi0JCSoodW5zaWduZWQgaW50ICopJmJsa3ZzY19yZXEtPmNtbmRbMl0gPQotCQkJCWNwdV90b19iZTMyKGJsa3ZzY19yZXEtPnNlY3Rvcl9zdGFydCk7Ci0JCSoodW5zaWduZWQgc2hvcnQgKikmYmxrdnNjX3JlcS0+Y21uZFs3XSA9Ci0JCQkJY3B1X3RvX2JlMTYoYmxrdnNjX3JlcS0+c2VjdG9yX2NvdW50KTsKLQl9IGVsc2UgewotCQlpZiAocnFfZGF0YV9kaXIoYmxrdnNjX3JlcS0+cmVxKSkgewotCQkJYmxrdnNjX3JlcS0+d3JpdGUgPSAxOwotCQkJYmxrdnNjX3JlcS0+Y21uZFswXSA9IFdSSVRFXzY7Ci0JCX0gZWxzZSB7Ci0JCQlibGt2c2NfcmVxLT53cml0ZSA9IDA7Ci0JCQlibGt2c2NfcmVxLT5jbW5kWzBdID0gUkVBRF82OwotCQl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmxrZGV2LT5sb2NrLCBmbGFncyk7CiAKLQkJKih1bnNpZ25lZCBpbnQgKikmYmxrdnNjX3JlcS0+Y21uZFsxXSA9Ci0JCQkJY3B1X3RvX2JlMzIoYmxrdnNjX3JlcS0+c2VjdG9yX3N0YXJ0KSA+PiA4OwotCQlibGt2c2NfcmVxLT5jbW5kWzFdICY9IDB4MWY7Ci0JCWJsa3ZzY19yZXEtPmNtbmRbNF0gPSAodW5zaWduZWQgY2hhcilibGt2c2NfcmVxLT5zZWN0b3JfY291bnQ7Ci0JfQorCWJsa3ZzY19kb19vcGVyYXRpb24oYmxrZGV2LCBET19GTFVTSCk7CisKKwkvKgorCSAqIE5vdyB3YWl0IGZvciBhbGwgb3V0Z29pbmcgSS9PIHRvIGJlIGRyYWluZWQuCisJICovCisJc3RvcnZzY193YWl0X3RvX2RyYWluKChzdHJ1Y3Qgc3RvcnZzY19kZXZpY2UgKilkZXYtPmV4dCk7CisKIH0KIAotc3RhdGljIGludCBibGt2c2Nfc3VibWl0X3JlcXVlc3Qoc3RydWN0IGJsa3ZzY19yZXF1ZXN0ICpibGt2c2NfcmVxLAotCQkJdm9pZCAoKnJlcXVlc3RfY29tcGxldGlvbikoc3RydWN0IGh2X3N0b3J2c2NfcmVxdWVzdCAqKSkKK3N0YXRpYyBpbnQgYmxrdnNjX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGZtb2RlX3QgbW9kZSkKIHsKLQlzdHJ1Y3QgYmxvY2tfZGV2aWNlX2NvbnRleHQgKmJsa2RldiA9IGJsa3ZzY19yZXEtPmRldjsKLQlzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2VfY3R4ID0gYmxrZGV2LT5kZXZpY2VfY3R4OwotCXN0cnVjdCBodl9kcml2ZXIgKmRydiA9Ci0JCQlkcnZfdG9faHZfZHJ2KGRldmljZV9jdHgtPmRldmljZS5kcml2ZXIpOwotCXN0cnVjdCBzdG9ydnNjX2RyaXZlcl9vYmplY3QgKnN0b3J2c2NfZHJ2X29iaiA9Ci0JCQlkcnYtPnByaXY7Ci0Jc3RydWN0IGh2X3N0b3J2c2NfcmVxdWVzdCAqc3RvcnZzY19yZXE7Ci0JaW50IHJldDsKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlX2NvbnRleHQgKmJsa2RldiA9IGRpc2stPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JRFBSSU5UX0RCRyhCTEtWU0NfRFJWLCAiYmxrdnNjX3N1Ym1pdF9yZXF1ZXN0KCkgLSAiCi0JCSAgICJyZXEgJXAgdHlwZSAlcyBzdGFydF9zZWN0b3IgJWx1IGNvdW50ICVsZCBvZmZzZXQgJWQgIgotCQkgICAibGVuICVkXG4iLCBibGt2c2NfcmVxLAotCQkgICAoYmxrdnNjX3JlcS0+d3JpdGUpID8gIldSSVRFIiA6ICJSRUFEIiwKLQkJICAgKHVuc2lnbmVkIGxvbmcpIGJsa3ZzY19yZXEtPnNlY3Rvcl9zdGFydCwKLQkJICAgYmxrdnNjX3JlcS0+c2VjdG9yX2NvdW50LAotCQkgICBibGt2c2NfcmVxLT5yZXF1ZXN0LmRhdGFfYnVmZmVyLm9mZnNldCwKLQkJICAgYmxrdnNjX3JlcS0+cmVxdWVzdC5kYXRhX2J1ZmZlci5sZW4pOwotI2lmIDAKLQlmb3IgKGkgPSAwOyBpIDwgKGJsa3ZzY19yZXEtPnJlcXVlc3QuZGF0YV9idWZmZXIubGVuID4+IDEyKTsgaSsrKSB7Ci0JCURQUklOVF9EQkcoQkxLVlNDX0RSViwgImJsa3ZzY19zdWJtaXRfcmVxdWVzdCgpIC0gIgotCQkJICAgInJlcSAlcCBwZm5bJWRdICVsbHhcbiIsCi0JCQkgICBibGt2c2NfcmVxLCBpLAotCQkJICAgYmxrdnNjX3JlcS0+cmVxdWVzdC5kYXRhX2J1ZmZlci5wZm5fYXJyYXlbaV0pOworCWlmIChibGtkZXYtPnVzZXJzID09IDEpIHsKKwkJYmxrdnNjX2RvX29wZXJhdGlvbihibGtkZXYsIERPX0ZMVVNIKTsKIAl9Ci0jZW5kaWYKIAotCXN0b3J2c2NfcmVxID0gJmJsa3ZzY19yZXEtPnJlcXVlc3Q7Ci0Jc3RvcnZzY19yZXEtPmV4dGVuc2lvbiA9ICh2b2lkICopKCh1bnNpZ25lZCBsb25nKWJsa3ZzY19yZXEgKwotCQkJCQkgIHNpemVvZihzdHJ1Y3QgYmxrdnNjX3JlcXVlc3QpKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmxrZGV2LT5sb2NrLCBmbGFncyk7CisJYmxrZGV2LT51c2Vycy0tOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJsa2Rldi0+bG9jaywgZmxhZ3MpOwogCi0Jc3RvcnZzY19yZXEtPnR5cGUgPSBibGt2c2NfcmVxLT53cml0ZSA/IFdSSVRFX1RZUEUgOiBSRUFEX1RZUEU7Ci0KLQlzdG9ydnNjX3JlcS0+b25faW9fY29tcGxldGlvbiA9IHJlcXVlc3RfY29tcGxldGlvbjsKLQlzdG9ydnNjX3JlcS0+Y29udGV4dCA9IGJsa3ZzY19yZXE7Ci0KLQlzdG9ydnNjX3JlcS0+aG9zdCA9IGJsa2Rldi0+cG9ydDsKLQlzdG9ydnNjX3JlcS0+YnVzID0gYmxrZGV2LT5wYXRoOwotCXN0b3J2c2NfcmVxLT50YXJnZXRfaWQgPSBibGtkZXYtPnRhcmdldDsKLQlzdG9ydnNjX3JlcS0+bHVuX2lkID0gMDsJIC8qIHRoaXMgaXMgbm90IHJlYWxseSB1c2VkIGF0IGFsbCAqLwotCi0Jc3RvcnZzY19yZXEtPmNkYl9sZW4gPSBibGt2c2NfcmVxLT5jbWRfbGVuOwotCXN0b3J2c2NfcmVxLT5jZGIgPSBibGt2c2NfcmVxLT5jbW5kOwotCi0Jc3RvcnZzY19yZXEtPnNlbnNlX2J1ZmZlciA9IGJsa3ZzY19yZXEtPnNlbnNlX2J1ZmZlcjsKLQlzdG9ydnNjX3JlcS0+c2Vuc2VfYnVmZmVyX3NpemUgPSBTQ1NJX1NFTlNFX0JVRkZFUlNJWkU7Ci0KLQlyZXQgPSBzdG9ydnNjX2Rydl9vYmotPm9uX2lvX3JlcXVlc3QoYmxrZGV2LT5kZXZpY2VfY3R4LAotCQkJCQkgICAmYmxrdnNjX3JlcS0+cmVxdWVzdCk7Ci0JaWYgKHJldCA9PSAwKQotCQlibGtkZXYtPm51bV9vdXRzdGFuZGluZ19yZXFzKys7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCisKIC8qCiAgKiBXZSBicmVhayB0aGUgcmVxdWVzdCBpbnRvIDEgb3IgbW9yZSBibGt2c2NfcmVxdWVzdHMgYW5kIHN1Ym1pdAotICogdGhlbS4gIElmIHdlIGNhbid0IHN1Ym1pdCB0aGVtIGFsbCwgd2UgcHV0IHRoZW0gb24gdGhlCisgKiB0aGVtLiAgSWYgd2UgY2FudCBzdWJtaXQgdGhlbSBhbGwsIHdlIHB1dCB0aGVtIG9uIHRoZQogICogcGVuZGluZ19saXN0LiBUaGUgYmxrdnNjX3JlcXVlc3QoKSB3aWxsIHdvcmsgb24gdGhlIHBlbmRpbmdfbGlzdC4KICAqLwogc3RhdGljIGludCBibGt2c2NfZG9fcmVxdWVzdChzdHJ1Y3QgYmxvY2tfZGV2aWNlX2NvbnRleHQgKmJsa2RldiwKQEAgLTkxMywxMSArNjAxLDggQEAKIAlpbnQgcGVuZGluZyA9IDA7CiAJc3RydWN0IGJsa3ZzY19yZXF1ZXN0X2dyb3VwICpncm91cCA9IE5VTEw7CiAKLQlEUFJJTlRfREJHKEJMS1ZTQ19EUlYsICJibGtkZXYgJXAgcmVxICVwIHNlY3QgJWx1XG4iLCBibGtkZXYsIHJlcSwKLQkJICAodW5zaWduZWQgbG9uZylibGtfcnFfcG9zKHJlcSkpOwotCiAJLyogQ3JlYXRlIGEgZ3JvdXAgdG8gdGllIHJlcSB0byBsaXN0IG9mIGJsa3ZzY19yZXFzICovCi0JZ3JvdXAgPSBrbWVtX2NhY2hlX2FsbG9jKGJsa2Rldi0+cmVxdWVzdF9wb29sLCBHRlBfQVRPTUlDKTsKKwlncm91cCA9IGttZW1fY2FjaGVfemFsbG9jKGJsa2Rldi0+cmVxdWVzdF9wb29sLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWdyb3VwKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtOTMzLDExICs2MTgsNiBAQAogCQkJICogTWFwIHRoaXMgYmlvIGludG8gYW4gZXhpc3Rpbmcgb3IgbmV3IHN0b3J2c2MgcmVxdWVzdAogCQkJICovCiAJCQliaW9fZm9yX2VhY2hfc2VnbWVudChidmVjLCBiaW8sIHNlZ19pZHgpIHsKLQkJCQlEUFJJTlRfREJHKEJMS1ZTQ19EUlYsICJiaW9fZm9yX2VhY2hfc2VnbWVudCgpICIKLQkJCQkJICAgIi0gcmVxICVwIGJpbyAlcCBidmVjICVwIHNlZ19pZHggJWQgIgotCQkJCQkgICAiZGF0YWJ1Zl9pZHggJWRcbiIsIHJlcSwgYmlvLCBidmVjLAotCQkJCQkgICBzZWdfaWR4LCBkYXRhYnVmX2lkeCk7Ci0KIAkJCQkvKiBHZXQgYSBuZXcgc3RvcnZzYyByZXF1ZXN0ICovCiAJCQkJLyogMXN0LXRpbWUgKi8KIAkJCQlpZiAoKCFibGt2c2NfcmVxKSB8fApAQCAtOTQ5LDEwICs2MjksMTUgQEAKIAkJCQkgICAgIChwcmV2X2J2ZWMtPmJ2X2xlbiAhPSBQQUdFX1NJWkUpKSkgewogCQkJCQkvKiBzdWJtaXQgdGhlIHByZXYgb25lICovCiAJCQkJCWlmIChibGt2c2NfcmVxKSB7Ci0JCQkJCQlibGt2c2NfcmVxLT5zZWN0b3Jfc3RhcnQgPSBzdGFydF9zZWN0b3I7Ci0JCQkJCQlzZWN0b3JfZGl2KGJsa3ZzY19yZXEtPnNlY3Rvcl9zdGFydCwgKGJsa2Rldi0+c2VjdG9yX3NpemUgPj4gOSkpOworCQkJCQkJYmxrdnNjX3JlcS0+c2VjdG9yX3N0YXJ0ID0KKwkJCQkJCXN0YXJ0X3NlY3RvcjsKKwkJCQkJCXNlY3Rvcl9kaXYoCisJCQkJCQlibGt2c2NfcmVxLT5zZWN0b3Jfc3RhcnQsCisJCQkJCQkoYmxrZGV2LT5zZWN0b3Jfc2l6ZSA+PiA5KSk7CiAKLQkJCQkJCWJsa3ZzY19yZXEtPnNlY3Rvcl9jb3VudCA9IG51bV9zZWN0b3JzIC8gKGJsa2Rldi0+c2VjdG9yX3NpemUgPj4gOSk7CisJCQkJCQlibGt2c2NfcmVxLT5zZWN0b3JfY291bnQgPQorCQkJCQkJbnVtX3NlY3RvcnMgLworCQkJCQkJKGJsa2Rldi0+c2VjdG9yX3NpemUgPj4gOSk7CiAJCQkJCQlibGt2c2NfaW5pdF9ydyhibGt2c2NfcmVxKTsKIAkJCQkJfQogCkBAIC05NjAsMTggKzY0NSwyNCBAQAogCQkJCQkgKiBDcmVhdGUgbmV3IGJsa3ZzY19yZXEgdG8gcmVwcmVzZW50CiAJCQkJCSAqIHRoZSBjdXJyZW50IGJ2ZWMKIAkJCQkJICovCi0JCQkJCWJsa3ZzY19yZXEgPSBrbWVtX2NhY2hlX2FsbG9jKGJsa2Rldi0+cmVxdWVzdF9wb29sLCBHRlBfQVRPTUlDKTsKKwkJCQkJYmxrdnNjX3JlcSA9CisJCQkJCWttZW1fY2FjaGVfemFsbG9jKAorCQkJCQlibGtkZXYtPnJlcXVlc3RfcG9vbCwgR0ZQX0FUT01JQyk7CiAJCQkJCWlmICghYmxrdnNjX3JlcSkgewogCQkJCQkJLyogZnJlZSB1cCBldmVyeXRoaW5nICovCiAJCQkJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoCiAJCQkJCQkJYmxrdnNjX3JlcSwgdG1wLAogCQkJCQkJCSZncm91cC0+YmxrdnNjX3JlcV9saXN0LAogCQkJCQkJCXJlcV9lbnRyeSkgewotCQkJCQkJCWxpc3RfZGVsKCZibGt2c2NfcmVxLT5yZXFfZW50cnkpOwotCQkJCQkJCWttZW1fY2FjaGVfZnJlZShibGtkZXYtPnJlcXVlc3RfcG9vbCwgYmxrdnNjX3JlcSk7CisJCQkJCQkJbGlzdF9kZWwoCisJCQkJCQkJJmJsa3ZzY19yZXEtPnJlcV9lbnRyeSk7CisJCQkJCQkJa21lbV9jYWNoZV9mcmVlKAorCQkJCQkJCWJsa2Rldi0+cmVxdWVzdF9wb29sLAorCQkJCQkJCWJsa3ZzY19yZXEpOwogCQkJCQkJfQogCi0JCQkJCQlrbWVtX2NhY2hlX2ZyZWUoYmxrZGV2LT5yZXF1ZXN0X3Bvb2wsIGdyb3VwKTsKKwkJCQkJCWttZW1fY2FjaGVfZnJlZSgKKwkJCQkJCWJsa2Rldi0+cmVxdWVzdF9wb29sLCBncm91cCk7CiAJCQkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCQkJfQogCkBAIC05ODAsMjMgKzY3MSwyNyBAQAogCiAJCQkJCWJsa3ZzY19yZXEtPmRldiA9IGJsa2RldjsKIAkJCQkJYmxrdnNjX3JlcS0+cmVxID0gcmVxOwotCQkJCQlibGt2c2NfcmVxLT5yZXF1ZXN0LmRhdGFfYnVmZmVyLm9mZnNldAotCQkJCQkJPSBidmVjLT5idl9vZmZzZXQ7Ci0JCQkJCWJsa3ZzY19yZXEtPnJlcXVlc3QuZGF0YV9idWZmZXIubGVuCi0JCQkJCQk9IDA7CisJCQkJCWJsa3ZzY19yZXEtPnJlcXVlc3QuCisJCQkJCWRhdGFfYnVmZmVyLm9mZnNldAorCQkJCQk9IGJ2ZWMtPmJ2X29mZnNldDsKKwkJCQkJYmxrdnNjX3JlcS0+cmVxdWVzdC4KKwkJCQkJZGF0YV9idWZmZXIubGVuID0gMDsKIAogCQkJCQkvKiBBZGQgdG8gdGhlIGdyb3VwICovCiAJCQkJCWJsa3ZzY19yZXEtPmdyb3VwID0gZ3JvdXA7CiAJCQkJCWJsa3ZzY19yZXEtPmdyb3VwLT5vdXRzdGFuZGluZysrOwogCQkJCQlsaXN0X2FkZF90YWlsKCZibGt2c2NfcmVxLT5yZXFfZW50cnksCi0JCQkJCQkmYmxrdnNjX3JlcS0+Z3JvdXAtPmJsa3ZzY19yZXFfbGlzdCk7CisJCQkJCSZibGt2c2NfcmVxLT5ncm91cC0+YmxrdnNjX3JlcV9saXN0KTsKIAogCQkJCQlzdGFydF9zZWN0b3IgKz0gbnVtX3NlY3RvcnM7CiAJCQkJCW51bV9zZWN0b3JzID0gMDsKIAkJCQkJZGF0YWJ1Zl9pZHggPSAwOwogCQkJCX0KIAotCQkJCS8qIEFkZCB0aGUgY3VyciBidmVjL3NlZ21lbnQgdG8gdGhlIGN1cnIgYmxrdnNjX3JlcSAqLworCQkJCS8qCisJCQkJICogQWRkIHRoZSBjdXJyIGJ2ZWMvc2VnbWVudCB0byB0aGUgY3VycgorCQkJCSAqIGJsa3ZzY19yZXEKKwkJCQkgKi8KIAkJCQlibGt2c2NfcmVxLT5yZXF1ZXN0LmRhdGFfYnVmZmVyLgogCQkJCQlwZm5fYXJyYXlbZGF0YWJ1Zl9pZHhdCiAJCQkJCQk9IHBhZ2VfdG9fcGZuKGJ2ZWMtPmJ2X3BhZ2UpOwpAQCAtMTAxNSwxMCArNzEwLDYgQEAKIAogCS8qIEhhbmRsZSB0aGUgbGFzdCBvbmUgKi8KIAlpZiAoYmxrdnNjX3JlcSkgewotCQlEUFJJTlRfREJHKEJMS1ZTQ19EUlYsICJibGtkZXYgJXAgcmVxICVwIGdyb3VwICVwIGNvdW50ICVkXG4iLAotCQkJICAgYmxrZGV2LCByZXEsIGJsa3ZzY19yZXEtPmdyb3VwLAotCQkJICAgYmxrdnNjX3JlcS0+Z3JvdXAtPm91dHN0YW5kaW5nKTsKLQogCQlibGt2c2NfcmVxLT5zZWN0b3Jfc3RhcnQgPSBzdGFydF9zZWN0b3I7CiAJCXNlY3Rvcl9kaXYoYmxrdnNjX3JlcS0+c2VjdG9yX3N0YXJ0LAogCQkJICAgKGJsa2Rldi0+c2VjdG9yX3NpemUgPj4gOSkpOwpAQCAtMTAzMSwxMyArNzIyLDYgQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoYmxrdnNjX3JlcSwgJmdyb3VwLT5ibGt2c2NfcmVxX2xpc3QsIHJlcV9lbnRyeSkgewogCQlpZiAocGVuZGluZykgewotCQkJRFBSSU5UX0RCRyhCTEtWU0NfRFJWLCAiYWRkaW5nIGJsa3ZzY19yZXEgdG8gIgotCQkJCSAgICJwZW5kaW5nX2xpc3QgLSBibGt2c2NfcmVxICVwIHN0YXJ0X3NlY3QgJWx1IgotCQkJCSAgICIgc2VjdF9jb3VudCAlbGQgKCVsdSAlbGQpXG4iLCBibGt2c2NfcmVxLAotCQkJCSAgICh1bnNpZ25lZCBsb25nKWJsa3ZzY19yZXEtPnNlY3Rvcl9zdGFydCwKLQkJCQkgICBibGt2c2NfcmVxLT5zZWN0b3JfY291bnQsCi0JCQkJICAgKHVuc2lnbmVkIGxvbmcpc3RhcnRfc2VjdG9yLAotCQkJCSAgICh1bnNpZ25lZCBsb25nKW51bV9zZWN0b3JzKTsKIAogCQkJbGlzdF9hZGRfdGFpbCgmYmxrdnNjX3JlcS0+cGVuZF9lbnRyeSwKIAkJCQkgICAgICAmYmxrZGV2LT5wZW5kaW5nX2xpc3QpOwpAQCAtMTA1MCwzOSArNzM0LDIyNiBAQAogCQkJCQkgICAgICAmYmxrZGV2LT5wZW5kaW5nX2xpc3QpOwogCQkJfQogCi0JCQlEUFJJTlRfREJHKEJMS1ZTQ19EUlYsICJzdWJtaXR0ZWQgYmxrdnNjX3JlcSAlcCAiCi0JCQkJICAgInN0YXJ0X3NlY3QgJWx1IHNlY3RfY291bnQgJWxkICglbHUgJWxkKSAiCi0JCQkJICAgInJldCAlZFxuIiwgYmxrdnNjX3JlcSwKLQkJCQkgICAodW5zaWduZWQgbG9uZylibGt2c2NfcmVxLT5zZWN0b3Jfc3RhcnQsCi0JCQkJICAgYmxrdnNjX3JlcS0+c2VjdG9yX2NvdW50LAotCQkJCSAgICh1bnNpZ25lZCBsb25nKXN0YXJ0X3NlY3RvciwKLQkJCQkgICBudW1fc2VjdG9ycywgcmV0KTsKIAkJfQogCX0KIAogCXJldHVybiBwZW5kaW5nOwogfQogCi1zdGF0aWMgdm9pZCBibGt2c2NfY21kX2NvbXBsZXRpb24oc3RydWN0IGh2X3N0b3J2c2NfcmVxdWVzdCAqcmVxdWVzdCkKK3N0YXRpYyBpbnQgYmxrdnNjX2RvX3BlbmRpbmdfcmVxcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlX2NvbnRleHQgKmJsa2RldikKIHsKLQlzdHJ1Y3QgYmxrdnNjX3JlcXVlc3QgKmJsa3ZzY19yZXEgPQotCQkJKHN0cnVjdCBibGt2c2NfcmVxdWVzdCAqKXJlcXVlc3QtPmNvbnRleHQ7Ci0Jc3RydWN0IGJsb2NrX2RldmljZV9jb250ZXh0ICpibGtkZXYgPQotCQkJKHN0cnVjdCBibG9ja19kZXZpY2VfY29udGV4dCAqKWJsa3ZzY19yZXEtPmRldjsKLQlzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgc2Vuc2VfaGRyOworCXN0cnVjdCBibGt2c2NfcmVxdWVzdCAqcGVuZF9yZXEsICp0bXA7CisJaW50IHJldCA9IDA7CiAKLQlEUFJJTlRfREJHKEJMS1ZTQ19EUlYsICJibGt2c2NfY21kX2NvbXBsZXRpb24oKSAtIHJlcSAlcFxuIiwKLQkJICAgYmxrdnNjX3JlcSk7CisJLyogRmx1c2ggdGhlIHBlbmRpbmcgbGlzdCBmaXJzdCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwZW5kX3JlcSwgdG1wLCAmYmxrZGV2LT5wZW5kaW5nX2xpc3QsCisJCQkJIHBlbmRfZW50cnkpIHsKIAotCWJsa2Rldi0+bnVtX291dHN0YW5kaW5nX3JlcXMtLTsKKwkJcmV0ID0gYmxrdnNjX3N1Ym1pdF9yZXF1ZXN0KHBlbmRfcmVxLAorCQkJCQkgICAgYmxrdnNjX3JlcXVlc3RfY29tcGxldGlvbik7CisJCWlmIChyZXQgIT0gMCkKKwkJCWJyZWFrOworCQllbHNlCisJCQlsaXN0X2RlbCgmcGVuZF9yZXEtPnBlbmRfZW50cnkpOworCX0KIAotCWlmIChibGt2c2NfcmVxLT5yZXF1ZXN0LnN0YXR1cykKLQkJaWYgKHNjc2lfbm9ybWFsaXplX3NlbnNlKGJsa3ZzY19yZXEtPnNlbnNlX2J1ZmZlciwKLQkJCQkJIFNDU0lfU0VOU0VfQlVGRkVSU0laRSwgJnNlbnNlX2hkcikpCi0JCQlzY3NpX3ByaW50X3NlbnNlX2hkcigiYmxrdnNjIiwgJnNlbnNlX2hkcik7CisJcmV0dXJuIHJldDsKK30KIAotCWJsa3ZzY19yZXEtPmNvbmQgPSAxOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYmxrdnNjX3JlcS0+d2V2ZW50KTsKKworc3RhdGljIHZvaWQgYmxrdnNjX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnF1ZXVlKQoreworCXN0cnVjdCBibG9ja19kZXZpY2VfY29udGV4dCAqYmxrZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgcmVxdWVzdCAqcmVxOworCWludCByZXQgPSAwOworCisJd2hpbGUgKChyZXEgPSBibGtfcGVla19yZXF1ZXN0KHF1ZXVlKSkgIT0gTlVMTCkgeworCisJCWJsa2RldiA9IHJlcS0+cnFfZGlzay0+cHJpdmF0ZV9kYXRhOworCQlpZiAoYmxrZGV2LT5zaHV0dGluZ19kb3duIHx8IHJlcS0+Y21kX3R5cGUgIT0gUkVRX1RZUEVfRlMpIHsKKwkJCV9fYmxrX2VuZF9yZXF1ZXN0X2N1cihyZXEsIDApOworCQkJY29udGludWU7CisJCX0KKworCQlyZXQgPSBibGt2c2NfZG9fcGVuZGluZ19yZXFzKGJsa2Rldik7CisKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlibGtfc3RvcF9xdWV1ZShxdWV1ZSk7CisJCQlicmVhazsKKwkJfQorCisJCWJsa19zdGFydF9yZXF1ZXN0KHJlcSk7CisKKwkJcmV0ID0gYmxrdnNjX2RvX3JlcXVlc3QoYmxrZGV2LCByZXEpOworCQlpZiAocmV0ID4gMCkgeworCQkJYmxrX3N0b3BfcXVldWUocXVldWUpOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAocmV0IDwgMCkgeworCQkJYmxrX3JlcXVldWVfcmVxdWVzdChxdWV1ZSwgcmVxKTsKKwkJCWJsa19zdG9wX3F1ZXVlKHF1ZXVlKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCisKKworLyogVGhlIG9uZSBhbmQgb25seSBvbmUgKi8KK3N0YXRpYyAgc3RydWN0IGh2X2RyaXZlciBibGt2c2NfZHJ2ID0geworCS5wcm9iZSA9ICBibGt2c2NfcHJvYmUsCisJLnJlbW92ZSA9ICBibGt2c2NfcmVtb3ZlLAorCS5zaHV0ZG93biA9IGJsa3ZzY19zaHV0ZG93biwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgYmxvY2tfb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gYmxrdnNjX29wZW4sCisJLnJlbGVhc2UgPSBibGt2c2NfcmVsZWFzZSwKKwkuZ2V0Z2VvID0gYmxrdnNjX2dldGdlbywKKwkuaW9jdGwgID0gYmxrdnNjX2lvY3RsLAorfTsKKworLyoKKyAqIGJsa3ZzY19kcnZfaW5pdCAtICBCbGtWc2MgZHJpdmVyIGluaXRpYWxpemF0aW9uLgorICovCitzdGF0aWMgaW50IGJsa3ZzY19kcnZfaW5pdCh2b2lkKQoreworCXN0cnVjdCBodl9kcml2ZXIgKmRydiA9ICZibGt2c2NfZHJ2OworCWludCByZXQ7CisKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHNlY3Rvcl90KSAhPSA4KTsKKworCW1lbWNweSgmZHJ2LT5kZXZfdHlwZSwgJmRldl90eXBlLCBzaXplb2Yoc3RydWN0IGh2X2d1aWQpKTsKKwlkcnYtPm5hbWUgPSBkcnZfbmFtZTsKKwlkcnYtPmRyaXZlci5uYW1lID0gZHJ2X25hbWU7CisKKwkvKiBUaGUgZHJpdmVyIGJlbG9uZ3MgdG8gdm1idXMgKi8KKwlyZXQgPSB2bWJ1c19jaGlsZF9kcml2ZXJfcmVnaXN0ZXIoJmRydi0+ZHJpdmVyKTsKKworCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIHZvaWQgYmxrdnNjX2Rydl9leGl0KHZvaWQpCit7CisKKwl2bWJ1c19jaGlsZF9kcml2ZXJfdW5yZWdpc3RlcigmYmxrdnNjX2Rydi5kcml2ZXIpOworfQorCisvKgorICogYmxrdnNjX3Byb2JlIC0gQWRkIGEgbmV3IGRldmljZSBmb3IgdGhpcyBkcml2ZXIKKyAqLworc3RhdGljIGludCBibGt2c2NfcHJvYmUoc3RydWN0IGh2X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBibG9ja19kZXZpY2VfY29udGV4dCAqYmxrZGV2ID0gTlVMTDsKKwlzdHJ1Y3Qgc3RvcnZzY19kZXZpY2VfaW5mbyBkZXZpY2VfaW5mbzsKKwlzdHJ1Y3Qgc3RvcnZzY19tYWpvcl9pbmZvIG1ham9yX2luZm87CisJaW50IHJldCA9IDA7CisKKwlibGtkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYmxvY2tfZGV2aWNlX2NvbnRleHQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJsa2RldikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJmJsa2Rldi0+cGVuZGluZ19saXN0KTsKKworCS8qIEluaXRpYWxpemUgd2hhdCB3ZSBjYW4gaGVyZSAqLworCXNwaW5fbG9ja19pbml0KCZibGtkZXYtPmxvY2spOworCisKKwlibGtkZXYtPnJlcXVlc3RfcG9vbCA9IGttZW1fY2FjaGVfY3JlYXRlKGRldl9uYW1lKCZkZXYtPmRldmljZSksCisJCQkJCXNpemVvZihzdHJ1Y3QgYmxrdnNjX3JlcXVlc3QpLCAwLAorCQkJCQlTTEFCX0hXQ0FDSEVfQUxJR04sIE5VTEwpOworCWlmICghYmxrZGV2LT5yZXF1ZXN0X3Bvb2wpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCisJcmV0ID0gYmxrdnNjX2RldmljZV9hZGQoZGV2LCAmZGV2aWNlX2luZm8pOworCWlmIChyZXQgIT0gMCkKKwkJZ290byBjbGVhbnVwOworCisJYmxrZGV2LT5kZXZpY2VfY3R4ID0gZGV2OworCS8qIHRoaXMgaWRlbnRpZmllZCB0aGUgZGV2aWNlIDAgb3IgMSAqLworCWJsa2Rldi0+dGFyZ2V0ID0gZGV2aWNlX2luZm8udGFyZ2V0X2lkOworCS8qIHRoaXMgaWRlbnRpZmllZCB0aGUgaWRlIGN0cmwgMCBvciAxICovCisJYmxrZGV2LT5wYXRoID0gZGV2aWNlX2luZm8ucGF0aF9pZDsKKworCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXZpY2UsIGJsa2Rldik7CisKKwlyZXQgPSBzdG9ydnNjX2dldF9tYWpvcl9pbmZvKCZkZXZpY2VfaW5mbywgJm1ham9yX2luZm8pOworCisJaWYgKHJldCkKKwkJZ290byBjbGVhbnVwOworCisJaWYgKG1ham9yX2luZm8uZG9fcmVnaXN0ZXIpIHsKKwkJcmV0ID0gcmVnaXN0ZXJfYmxrZGV2KG1ham9yX2luZm8ubWFqb3IsIG1ham9yX2luZm8uZGV2bmFtZSk7CisKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlEUFJJTlRfRVJSKEJMS1ZTQ19EUlYsCisJCQkJICAgInJlZ2lzdGVyX2Jsa2RldigpIGZhaWxlZCEgcmV0ICVkIiwgcmV0KTsKKwkJCWdvdG8gcmVtb3ZlOworCQl9CisJfQorCisJRFBSSU5UX0lORk8oQkxLVlNDX0RSViwgImJsa3ZzYyByZWdpc3RlcmVkIGZvciBtYWpvciAlZCEhIiwKKwkJCW1ham9yX2luZm8ubWFqb3IpOworCisJYmxrZGV2LT5nZCA9IGFsbG9jX2Rpc2soQkxLVlNDX01JTk9SUyk7CisJaWYgKCFibGtkZXYtPmdkKSB7CisJCXJldCA9IC0xOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJYmxrZGV2LT5nZC0+cXVldWUgPSBibGtfaW5pdF9xdWV1ZShibGt2c2NfcmVxdWVzdCwgJmJsa2Rldi0+bG9jayk7CisKKwlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShibGtkZXYtPmdkLT5xdWV1ZSwgUEFHRV9TSVpFKTsKKwlibGtfcXVldWVfbWF4X3NlZ21lbnRzKGJsa2Rldi0+Z2QtPnF1ZXVlLCBNQVhfTVVMVElQQUdFX0JVRkZFUl9DT1VOVCk7CisJYmxrX3F1ZXVlX3NlZ21lbnRfYm91bmRhcnkoYmxrZGV2LT5nZC0+cXVldWUsIFBBR0VfU0laRS0xKTsKKwlibGtfcXVldWVfYm91bmNlX2xpbWl0KGJsa2Rldi0+Z2QtPnF1ZXVlLCBCTEtfQk9VTkNFX0FOWSk7CisJYmxrX3F1ZXVlX2RtYV9hbGlnbm1lbnQoYmxrZGV2LT5nZC0+cXVldWUsIDUxMSk7CisKKwlibGtkZXYtPmdkLT5tYWpvciA9IG1ham9yX2luZm8ubWFqb3I7CisJaWYgKG1ham9yX2luZm8uaW5kZXggPT0gMSB8fCBtYWpvcl9pbmZvLmluZGV4ID09IDMpCisJCWJsa2Rldi0+Z2QtPmZpcnN0X21pbm9yID0gQkxLVlNDX01JTk9SUzsKKwllbHNlCisJCWJsa2Rldi0+Z2QtPmZpcnN0X21pbm9yID0gMDsKKwlibGtkZXYtPmdkLT5mb3BzID0gJmJsb2NrX29wczsKKwlibGtkZXYtPmdkLT5ldmVudHMgPSBESVNLX0VWRU5UX01FRElBX0NIQU5HRTsKKwlibGtkZXYtPmdkLT5wcml2YXRlX2RhdGEgPSBibGtkZXY7CisJYmxrZGV2LT5nZC0+ZHJpdmVyZnNfZGV2ID0gJihibGtkZXYtPmRldmljZV9jdHgtPmRldmljZSk7CisJc3ByaW50ZihibGtkZXYtPmdkLT5kaXNrX25hbWUsICJoZCVjIiwgJ2EnICsgbWFqb3JfaW5mby5pbmRleCk7CisKKwlibGt2c2NfZG9fb3BlcmF0aW9uKGJsa2RldiwgRE9fSU5RVUlSWSk7CisJYmxrdnNjX2RvX29wZXJhdGlvbihibGtkZXYsIERPX0NBUEFDSVRZKTsKKworCXNldF9jYXBhY2l0eShibGtkZXYtPmdkLCBibGtkZXYtPmNhcGFjaXR5ICogKGJsa2Rldi0+c2VjdG9yX3NpemUvNTEyKSk7CisJYmxrX3F1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShibGtkZXYtPmdkLT5xdWV1ZSwgYmxrZGV2LT5zZWN0b3Jfc2l6ZSk7CisJLyogZ28hICovCisJYWRkX2Rpc2soYmxrZGV2LT5nZCk7CisKKwlEUFJJTlRfSU5GTyhCTEtWU0NfRFJWLCAiJXMgYWRkZWQhISBjYXBhY2l0eSAlbHUgc2VjdG9yX3NpemUgJWQiLAorCQkgICAgYmxrZGV2LT5nZC0+ZGlza19uYW1lLCAodW5zaWduZWQgbG9uZylibGtkZXYtPmNhcGFjaXR5LAorCQkgICAgYmxrZGV2LT5zZWN0b3Jfc2l6ZSk7CisKKwlyZXR1cm4gcmV0OworCityZW1vdmU6CisJc3RvcnZzY19kZXZfcmVtb3ZlKGRldik7CisKK2NsZWFudXA6CisJaWYgKGJsa2RldikgeworCQlpZiAoYmxrZGV2LT5yZXF1ZXN0X3Bvb2wpIHsKKwkJCWttZW1fY2FjaGVfZGVzdHJveShibGtkZXYtPnJlcXVlc3RfcG9vbCk7CisJCQlibGtkZXYtPnJlcXVlc3RfcG9vbCA9IE5VTEw7CisJCX0KKwkJa2ZyZWUoYmxrZGV2KTsKKwkJYmxrZGV2ID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBibGt2c2NfcmVxdWVzdF9jb21wbGV0aW9uKHN0cnVjdCBodl9zdG9ydnNjX3JlcXVlc3QgKnJlcXVlc3QpCkBAIC0xMDkzLDE5ICs5NjQsOCBAQAogCQkJKHN0cnVjdCBibG9ja19kZXZpY2VfY29udGV4dCAqKWJsa3ZzY19yZXEtPmRldjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBibGt2c2NfcmVxdWVzdCAqY29tcF9yZXEsICp0bXA7CisJc3RydWN0IHZtc2NzaV9yZXF1ZXN0ICp2bV9zcmI7CiAKLQkvKiBBU1NFUlQoYmxrdnNjX3JlcS0+Z3JvdXApOyAqLwotCi0JRFBSSU5UX0RCRyhCTEtWU0NfRFJWLCAiYmxrZGV2ICVwIGJsa3ZzY19yZXEgJXAgZ3JvdXAgJXAgdHlwZSAlcyAiCi0JCSAgICJzZWN0X3N0YXJ0ICVsdSBzZWN0X2NvdW50ICVsZCBsZW4gJWQgZ3JvdXAgb3V0c3RkICVkICIKLQkJICAgInRvdGFsIG91dHN0ZCAlZFxuIiwKLQkJICAgYmxrZGV2LCBibGt2c2NfcmVxLCBibGt2c2NfcmVxLT5ncm91cCwKLQkJICAgKGJsa3ZzY19yZXEtPndyaXRlKSA/ICJXUklURSIgOiAiUkVBRCIsCi0JCSAgICh1bnNpZ25lZCBsb25nKWJsa3ZzY19yZXEtPnNlY3Rvcl9zdGFydCwKLQkJICAgYmxrdnNjX3JlcS0+c2VjdG9yX2NvdW50LAotCQkgICBibGt2c2NfcmVxLT5yZXF1ZXN0LmRhdGFfYnVmZmVyLmxlbiwKLQkJICAgYmxrdnNjX3JlcS0+Z3JvdXAtPm91dHN0YW5kaW5nLAotCQkgICBibGtkZXYtPm51bV9vdXRzdGFuZGluZ19yZXFzKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZibGtkZXYtPmxvY2ssIGZsYWdzKTsKIApAQCAtMTEyMSwyMyArOTgxLDE4IEBACiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb21wX3JlcSwgdG1wLAogCQkJCQkgJmJsa3ZzY19yZXEtPmdyb3VwLT5ibGt2c2NfcmVxX2xpc3QsCiAJCQkJCSByZXFfZW50cnkpIHsKLQkJCURQUklOVF9EQkcoQkxLVlNDX0RSViwgImNvbXBsZXRpbmcgYmxrdnNjX3JlcSAlcCAiCi0JCQkJICAgInNlY3Rfc3RhcnQgJWx1IHNlY3RfY291bnQgJWxkXG4iLAotCQkJCSAgIGNvbXBfcmVxLAotCQkJCSAgICh1bnNpZ25lZCBsb25nKWNvbXBfcmVxLT5zZWN0b3Jfc3RhcnQsCi0JCQkJICAgY29tcF9yZXEtPnNlY3Rvcl9jb3VudCk7CiAKIAkJCWxpc3RfZGVsKCZjb21wX3JlcS0+cmVxX2VudHJ5KTsKIAorCQkJdm1fc3JiID0KKwkJCSZjb21wX3JlcS0+cmVxdWVzdC52c3Rvcl9wYWNrZXQudm1fc3JiOwogCQkJaWYgKCFfX2Jsa19lbmRfcmVxdWVzdChjb21wX3JlcS0+cmVxLAotCQkJCSghY29tcF9yZXEtPnJlcXVlc3Quc3RhdHVzID8gMCA6IC1FSU8pLAorCQkJCSghdm1fc3JiLT5zY3NpX3N0YXR1cyA/IDAgOiAtRUlPKSwKIAkJCQljb21wX3JlcS0+c2VjdG9yX2NvdW50ICogYmxrZGV2LT5zZWN0b3Jfc2l6ZSkpIHsKIAkJCQkvKgogCQkJCSAqIEFsbCB0aGUgc2VjdG9ycyBoYXZlIGJlZW4geGZlcnJlZCBpZSB0aGUKIAkJCQkgKiByZXF1ZXN0IGlzIGRvbmUKIAkJCQkgKi8KLQkJCQlEUFJJTlRfREJHKEJMS1ZTQ19EUlYsICJyZXEgJXAgQ09NUExFVEVEXG4iLAotCQkJCQkgICBjb21wX3JlcS0+cmVxKTsKIAkJCQlrbWVtX2NhY2hlX2ZyZWUoYmxrZGV2LT5yZXF1ZXN0X3Bvb2wsCiAJCQkJCQljb21wX3JlcS0+Z3JvdXApOwogCQkJfQpAQCAtMTE1NSwzMzIgKzEwMTAsNiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJsa2Rldi0+bG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IGJsa3ZzY19jYW5jZWxfcGVuZGluZ19yZXFzKHN0cnVjdCBibG9ja19kZXZpY2VfY29udGV4dCAqYmxrZGV2KQotewotCXN0cnVjdCBibGt2c2NfcmVxdWVzdCAqcGVuZF9yZXEsICp0bXA7Ci0Jc3RydWN0IGJsa3ZzY19yZXF1ZXN0ICpjb21wX3JlcSwgKnRtcDI7Ci0KLQlpbnQgcmV0ID0gMDsKLQotCURQUklOVF9EQkcoQkxLVlNDX0RSViwgImJsa3ZzY19jYW5jZWxfcGVuZGluZ19yZXFzKCkiKTsKLQotCS8qIEZsdXNoIHRoZSBwZW5kaW5nIGxpc3QgZmlyc3QgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGVuZF9yZXEsIHRtcCwgJmJsa2Rldi0+cGVuZGluZ19saXN0LAotCQkJCSBwZW5kX2VudHJ5KSB7Ci0JCS8qCi0JCSAqIFRoZSBwZW5kX3JlcSBjb3VsZCBiZSBwYXJ0IG9mIGEgcGFydGlhbGx5IGNvbXBsZXRlZAotCQkgKiByZXF1ZXN0LiBJZiBzbywgY29tcGxldGUgdGhvc2UgcmVxIGZpcnN0IHVudGlsIHdlCi0JCSAqIGhpdCB0aGUgcGVuZF9yZXEKLQkJICovCi0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb21wX3JlcSwgdG1wMiwKLQkJCQkJICZwZW5kX3JlcS0+Z3JvdXAtPmJsa3ZzY19yZXFfbGlzdCwKLQkJCQkJIHJlcV9lbnRyeSkgewotCQkJRFBSSU5UX0RCRyhCTEtWU0NfRFJWLCAiY29tcGxldGluZyBibGt2c2NfcmVxICVwICIKLQkJCQkgICAic2VjdF9zdGFydCAlbHUgc2VjdF9jb3VudCAlbGRcbiIsCi0JCQkJICAgY29tcF9yZXEsCi0JCQkJICAgKHVuc2lnbmVkIGxvbmcpIGNvbXBfcmVxLT5zZWN0b3Jfc3RhcnQsCi0JCQkJICAgY29tcF9yZXEtPnNlY3Rvcl9jb3VudCk7Ci0KLQkJCWlmIChjb21wX3JlcSA9PSBwZW5kX3JlcSkKLQkJCQlicmVhazsKLQotCQkJbGlzdF9kZWwoJmNvbXBfcmVxLT5yZXFfZW50cnkpOwotCi0JCQlpZiAoY29tcF9yZXEtPnJlcSkgewotCQkJCXJldCA9IF9fYmxrX2VuZF9yZXF1ZXN0KGNvbXBfcmVxLT5yZXEsCi0JCQkJCSghY29tcF9yZXEtPnJlcXVlc3Quc3RhdHVzID8gMCA6IC1FSU8pLAotCQkJCQljb21wX3JlcS0+c2VjdG9yX2NvdW50ICoKLQkJCQkJYmxrZGV2LT5zZWN0b3Jfc2l6ZSk7Ci0KLQkJCQkvKiBGSVhNRTogc2hvdWxkbid0IHRoaXMgZG8gbW9yZSB0aGFuIHJldHVybj8gKi8KLQkJCQlpZiAocmV0KQotCQkJCQlnb3RvIG91dDsKLQkJCX0KLQotCQkJa21lbV9jYWNoZV9mcmVlKGJsa2Rldi0+cmVxdWVzdF9wb29sLCBjb21wX3JlcSk7Ci0JCX0KLQotCQlEUFJJTlRfREJHKEJMS1ZTQ19EUlYsICJjYW5jZWxsaW5nIHBlbmRpbmcgcmVxdWVzdCAtICVwXG4iLAotCQkJICAgcGVuZF9yZXEpOwotCi0JCWxpc3RfZGVsKCZwZW5kX3JlcS0+cGVuZF9lbnRyeSk7Ci0KLQkJbGlzdF9kZWwoJnBlbmRfcmVxLT5yZXFfZW50cnkpOwotCi0JCWlmIChjb21wX3JlcS0+cmVxKSB7Ci0JCQlpZiAoIV9fYmxrX2VuZF9yZXF1ZXN0KHBlbmRfcmVxLT5yZXEsIC1FSU8sCi0JCQkJCSAgICAgICBwZW5kX3JlcS0+c2VjdG9yX2NvdW50ICoKLQkJCQkJICAgICAgIGJsa2Rldi0+c2VjdG9yX3NpemUpKSB7Ci0JCQkJLyoKLQkJCQkgKiBBbGwgdGhlIHNlY3RvcnMgaGF2ZSBiZWVuIHhmZXJyZWQgaWUgdGhlCi0JCQkJICogcmVxdWVzdCBpcyBkb25lCi0JCQkJICovCi0JCQkJRFBSSU5UX0RCRyhCTEtWU0NfRFJWLAotCQkJCQkgICAiYmxrdnNjX2NhbmNlbF9wZW5kaW5nX3JlcXMoKSAtICIKLQkJCQkJICAgInJlcSAlcCBDT01QTEVURURcbiIsIHBlbmRfcmVxLT5yZXEpOwotCQkJCWttZW1fY2FjaGVfZnJlZShibGtkZXYtPnJlcXVlc3RfcG9vbCwKLQkJCQkJCXBlbmRfcmVxLT5ncm91cCk7Ci0JCQl9Ci0JCX0KLQotCQlrbWVtX2NhY2hlX2ZyZWUoYmxrZGV2LT5yZXF1ZXN0X3Bvb2wsIHBlbmRfcmVxKTsKLQl9Ci0KLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGJsa3ZzY19kb19wZW5kaW5nX3JlcXMoc3RydWN0IGJsb2NrX2RldmljZV9jb250ZXh0ICpibGtkZXYpCi17Ci0Jc3RydWN0IGJsa3ZzY19yZXF1ZXN0ICpwZW5kX3JlcSwgKnRtcDsKLQlpbnQgcmV0ID0gMDsKLQotCS8qIEZsdXNoIHRoZSBwZW5kaW5nIGxpc3QgZmlyc3QgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGVuZF9yZXEsIHRtcCwgJmJsa2Rldi0+cGVuZGluZ19saXN0LAotCQkJCSBwZW5kX2VudHJ5KSB7Ci0JCURQUklOVF9EQkcoQkxLVlNDX0RSViwgIndvcmtpbmcgb2ZmIHBlbmRpbmdfbGlzdCAtICVwXG4iLAotCQkJICAgcGVuZF9yZXEpOwotCi0JCXJldCA9IGJsa3ZzY19zdWJtaXRfcmVxdWVzdChwZW5kX3JlcSwKLQkJCQkJICAgIGJsa3ZzY19yZXF1ZXN0X2NvbXBsZXRpb24pOwotCQlpZiAocmV0ICE9IDApCi0JCQlicmVhazsKLQkJZWxzZQotCQkJbGlzdF9kZWwoJnBlbmRfcmVxLT5wZW5kX2VudHJ5KTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBibGt2c2NfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcXVldWUpCi17Ci0Jc3RydWN0IGJsb2NrX2RldmljZV9jb250ZXh0ICpibGtkZXYgPSBOVUxMOwotCXN0cnVjdCByZXF1ZXN0ICpyZXE7Ci0JaW50IHJldCA9IDA7Ci0KLQlEUFJJTlRfREJHKEJMS1ZTQ19EUlYsICItIGVudGVyXG4iKTsKLQl3aGlsZSAoKHJlcSA9IGJsa19wZWVrX3JlcXVlc3QocXVldWUpKSAhPSBOVUxMKSB7Ci0JCURQUklOVF9EQkcoQkxLVlNDX0RSViwgIi0gcmVxICVwXG4iLCByZXEpOwotCi0JCWJsa2RldiA9IHJlcS0+cnFfZGlzay0+cHJpdmF0ZV9kYXRhOwotCQlpZiAoYmxrZGV2LT5zaHV0dGluZ19kb3duIHx8IHJlcS0+Y21kX3R5cGUgIT0gUkVRX1RZUEVfRlMgfHwKLQkJICAgIGJsa2Rldi0+bWVkaWFfbm90X3ByZXNlbnQpIHsKLQkJCV9fYmxrX2VuZF9yZXF1ZXN0X2N1cihyZXEsIDApOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlyZXQgPSBibGt2c2NfZG9fcGVuZGluZ19yZXFzKGJsa2Rldik7Ci0KLQkJaWYgKHJldCAhPSAwKSB7Ci0JCQlEUFJJTlRfREJHKEJMS1ZTQ19EUlYsCi0JCQkJICAgIi0gc3RvcCBxdWV1ZSAtIHBlbmRpbmdfbGlzdCBub3QgZW1wdHlcbiIpOwotCQkJYmxrX3N0b3BfcXVldWUocXVldWUpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlibGtfc3RhcnRfcmVxdWVzdChyZXEpOwotCi0JCXJldCA9IGJsa3ZzY19kb19yZXF1ZXN0KGJsa2RldiwgcmVxKTsKLQkJaWYgKHJldCA+IDApIHsKLQkJCURQUklOVF9EQkcoQkxLVlNDX0RSViwgIi0gc3RvcCBxdWV1ZSAtIG5vIHJvb21cbiIpOwotCQkJYmxrX3N0b3BfcXVldWUocXVldWUpOwotCQkJYnJlYWs7Ci0JCX0gZWxzZSBpZiAocmV0IDwgMCkgewotCQkJRFBSSU5UX0RCRyhCTEtWU0NfRFJWLCAiLSBzdG9wIHF1ZXVlIC0gbm8gbWVtXG4iKTsKLQkJCWJsa19yZXF1ZXVlX3JlcXVlc3QocXVldWUsIHJlcSk7Ci0JCQlibGtfc3RvcF9xdWV1ZShxdWV1ZSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLX0KLQotc3RhdGljIGludCBibGt2c2Nfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCi17Ci0Jc3RydWN0IGJsb2NrX2RldmljZV9jb250ZXh0ICpibGtkZXYgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7Ci0KLQlEUFJJTlRfREJHKEJMS1ZTQ19EUlYsICItIHVzZXJzICVkIGRpc2sgJXNcbiIsIGJsa2Rldi0+dXNlcnMsCi0JCSAgIGJsa2Rldi0+Z2QtPmRpc2tfbmFtZSk7Ci0KLQltdXRleF9sb2NrKCZibGt2c2NfbXV0ZXgpOwotCXNwaW5fbG9jaygmYmxrZGV2LT5sb2NrKTsKLQotCWlmICghYmxrZGV2LT51c2VycyAmJiBibGtkZXYtPmRldmljZV90eXBlID09IERWRF9UWVBFKSB7Ci0JCXNwaW5fdW5sb2NrKCZibGtkZXYtPmxvY2spOwotCQljaGVja19kaXNrX2NoYW5nZShiZGV2KTsKLQkJc3Bpbl9sb2NrKCZibGtkZXYtPmxvY2spOwotCX0KLQotCWJsa2Rldi0+dXNlcnMrKzsKLQotCXNwaW5fdW5sb2NrKCZibGtkZXYtPmxvY2spOwotCW11dGV4X3VubG9jaygmYmxrdnNjX211dGV4KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBibGt2c2NfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgZm1vZGVfdCBtb2RlKQotewotCXN0cnVjdCBibG9ja19kZXZpY2VfY29udGV4dCAqYmxrZGV2ID0gZGlzay0+cHJpdmF0ZV9kYXRhOwotCi0JRFBSSU5UX0RCRyhCTEtWU0NfRFJWLCAiLSB1c2VycyAlZCBkaXNrICVzXG4iLCBibGtkZXYtPnVzZXJzLAotCQkgICBibGtkZXYtPmdkLT5kaXNrX25hbWUpOwotCi0JbXV0ZXhfbG9jaygmYmxrdnNjX211dGV4KTsKLQlzcGluX2xvY2soJmJsa2Rldi0+bG9jayk7Ci0JaWYgKGJsa2Rldi0+dXNlcnMgPT0gMSkgewotCQlzcGluX3VubG9jaygmYmxrZGV2LT5sb2NrKTsKLQkJYmxrdnNjX2RvX2ZsdXNoKGJsa2Rldik7Ci0JCXNwaW5fbG9jaygmYmxrZGV2LT5sb2NrKTsKLQl9Ci0KLQlibGtkZXYtPnVzZXJzLS07Ci0KLQlzcGluX3VubG9jaygmYmxrZGV2LT5sb2NrKTsKLQltdXRleF91bmxvY2soJmJsa3ZzY19tdXRleCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYmxrdnNjX2NoZWNrX2V2ZW50cyhzdHJ1Y3QgZ2VuZGlzayAqZ2QsCi0JCQkJCXVuc2lnbmVkIGludCBjbGVhcmluZykKLXsKLQlEUFJJTlRfREJHKEJMS1ZTQ19EUlYsICItIGVudGVyXG4iKTsKLQlyZXR1cm4gRElTS19FVkVOVF9NRURJQV9DSEFOR0U7Ci19Ci0KLXN0YXRpYyBpbnQgYmxrdnNjX3JldmFsaWRhdGVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZ2QpCi17Ci0Jc3RydWN0IGJsb2NrX2RldmljZV9jb250ZXh0ICpibGtkZXYgPSBnZC0+cHJpdmF0ZV9kYXRhOwotCi0JRFBSSU5UX0RCRyhCTEtWU0NfRFJWLCAiLSBlbnRlclxuIik7Ci0KLQlpZiAoYmxrZGV2LT5kZXZpY2VfdHlwZSA9PSBEVkRfVFlQRSkgewotCQlibGt2c2NfZG9fcmVhZF9jYXBhY2l0eShibGtkZXYpOwotCQlzZXRfY2FwYWNpdHkoYmxrZGV2LT5nZCwgYmxrZGV2LT5jYXBhY2l0eSAqCi0JCQkgICAgKGJsa2Rldi0+c2VjdG9yX3NpemUvNTEyKSk7Ci0JCWJsa19xdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUoZ2QtPnF1ZXVlLCBibGtkZXYtPnNlY3Rvcl9zaXplKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYmxrdnNjX2dldGdlbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZCwgc3RydWN0IGhkX2dlb21ldHJ5ICpoZykKLXsKLQlzZWN0b3JfdCB0b3RhbF9zZWN0b3JzID0gZ2V0X2NhcGFjaXR5KGJkLT5iZF9kaXNrKTsKLQlzZWN0b3JfdCBjeWxpbmRlcl90aW1lc19oZWFkcyA9IDA7Ci0Jc2VjdG9yX3QgdGVtcCA9IDA7Ci0KLQlpbnQgc2VjdG9yc19wZXJfdHJhY2sgPSAwOwotCWludCBoZWFkcyA9IDA7Ci0JaW50IGN5bGluZGVycyA9IDA7Ci0JaW50IHJlbSA9IDA7Ci0KLQlpZiAodG90YWxfc2VjdG9ycyA+ICg2NTUzNSAqIDE2ICogMjU1KSkKLQkJdG90YWxfc2VjdG9ycyA9ICg2NTUzNSAqIDE2ICogMjU1KTsKLQotCWlmICh0b3RhbF9zZWN0b3JzID49ICg2NTUzNSAqIDE2ICogNjMpKSB7Ci0JCXNlY3RvcnNfcGVyX3RyYWNrID0gMjU1OwotCQloZWFkcyA9IDE2OwotCi0JCWN5bGluZGVyX3RpbWVzX2hlYWRzID0gdG90YWxfc2VjdG9yczsKLQkJLyogc2VjdG9yX2RpdiBzdG9yZXMgdGhlIHF1b3RpZW50IGluIGN5bGluZGVyX3RpbWVzX2hlYWRzICovCi0JCXJlbSA9IHNlY3Rvcl9kaXYoY3lsaW5kZXJfdGltZXNfaGVhZHMsIHNlY3RvcnNfcGVyX3RyYWNrKTsKLQl9IGVsc2UgewotCQlzZWN0b3JzX3Blcl90cmFjayA9IDE3OwotCi0JCWN5bGluZGVyX3RpbWVzX2hlYWRzID0gdG90YWxfc2VjdG9yczsKLQkJLyogc2VjdG9yX2RpdiBzdG9yZXMgdGhlIHF1b3RpZW50IGluIGN5bGluZGVyX3RpbWVzX2hlYWRzICovCi0JCXJlbSA9IHNlY3Rvcl9kaXYoY3lsaW5kZXJfdGltZXNfaGVhZHMsIHNlY3RvcnNfcGVyX3RyYWNrKTsKLQotCQl0ZW1wID0gY3lsaW5kZXJfdGltZXNfaGVhZHMgKyAxMDIzOwotCQkvKiBzZWN0b3JfZGl2IHN0b3JlcyB0aGUgcXVvdGllbnQgaW4gdGVtcCAqLwotCQlyZW0gPSBzZWN0b3JfZGl2KHRlbXAsIDEwMjQpOwotCi0JCWhlYWRzID0gdGVtcDsKLQotCQlpZiAoaGVhZHMgPCA0KQotCQkJaGVhZHMgPSA0OwotCi0KLQkJaWYgKGN5bGluZGVyX3RpbWVzX2hlYWRzID49IChoZWFkcyAqIDEwMjQpIHx8IChoZWFkcyA+IDE2KSkgewotCQkJc2VjdG9yc19wZXJfdHJhY2sgPSAzMTsKLQkJCWhlYWRzID0gMTY7Ci0KLQkJCWN5bGluZGVyX3RpbWVzX2hlYWRzID0gdG90YWxfc2VjdG9yczsKLQkJCS8qCi0JCQkgKiBzZWN0b3JfZGl2IHN0b3JlcyB0aGUgcXVvdGllbnQgaW4KLQkJCSAqIGN5bGluZGVyX3RpbWVzX2hlYWRzCi0JCQkgKi8KLQkJCXJlbSA9IHNlY3Rvcl9kaXYoY3lsaW5kZXJfdGltZXNfaGVhZHMsCi0JCQkJCSBzZWN0b3JzX3Blcl90cmFjayk7Ci0JCX0KLQotCQlpZiAoY3lsaW5kZXJfdGltZXNfaGVhZHMgPj0gKGhlYWRzICogMTAyNCkpIHsKLQkJCXNlY3RvcnNfcGVyX3RyYWNrID0gNjM7Ci0JCQloZWFkcyA9IDE2OwotCi0JCQljeWxpbmRlcl90aW1lc19oZWFkcyA9IHRvdGFsX3NlY3RvcnM7Ci0JCQkvKgotCQkJICogc2VjdG9yX2RpdiBzdG9yZXMgdGhlIHF1b3RpZW50IGluCi0JCQkgKiBjeWxpbmRlcl90aW1lc19oZWFkcwotCQkJICovCi0JCQlyZW0gPSBzZWN0b3JfZGl2KGN5bGluZGVyX3RpbWVzX2hlYWRzLAotCQkJCQkgc2VjdG9yc19wZXJfdHJhY2spOwotCQl9Ci0JfQotCi0JdGVtcCA9IGN5bGluZGVyX3RpbWVzX2hlYWRzOwotCS8qIHNlY3Rvcl9kaXYgc3RvcmVzIHRoZSBxdW90aWVudCBpbiB0ZW1wICovCi0JcmVtID0gc2VjdG9yX2Rpdih0ZW1wLCBoZWFkcyk7Ci0JY3lsaW5kZXJzID0gdGVtcDsKLQotCWhnLT5oZWFkcyA9IGhlYWRzOwotCWhnLT5zZWN0b3JzID0gc2VjdG9yc19wZXJfdHJhY2s7Ci0JaGctPmN5bGluZGVycyA9IGN5bGluZGVyczsKLQotCURQUklOVF9JTkZPKEJMS1ZTQ19EUlYsICJDSFMgKCVkLCAlZCwgJWQpIiwgY3lsaW5kZXJzLCBoZWFkcywKLQkJICAgIHNlY3RvcnNfcGVyX3RyYWNrKTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJsa3ZzY19pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZCwgZm1vZGVfdCBtb2RlLAotCQkJdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZ3VtZW50KQotewotLyoJc3RydWN0IGJsb2NrX2RldmljZV9jb250ZXh0ICpibGtkZXYgPSBiZC0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOyAqLwotCWludCByZXQ7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCS8qCi0JICogVE9ETzogSSB0aGluayB0aGVyZSBpcyBjZXJ0YWluIGZvcm1hdCBmb3IgSERJT19HRVRfSURFTlRJVFkgcmF0aGVyCi0JICogdGhhbiBqdXN0IGEgR1VJRC4gQ29tbWVudGVkIGl0IG91dCBmb3Igbm93LgotCSAqLwotI2lmIDAKLQljYXNlIEhESU9fR0VUX0lERU5USVRZOgotCQlEUFJJTlRfSU5GTyhCTEtWU0NfRFJWLCAiSERJT19HRVRfSURFTlRJVFlcbiIpOwotCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgYmxrZGV2LT5kZXZpY2VfaWQsCi0JCQkJIGJsa2Rldi0+ZGV2aWNlX2lkX2xlbikpCi0JCQlyZXQgPSAtRUZBVUxUOwotCQlicmVhazsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGJsa3ZzY19pbml0KHZvaWQpCi17Ci0JaW50IHJldDsKLQotCUJVSUxEX0JVR19PTihzaXplb2Yoc2VjdG9yX3QpICE9IDgpOwotCi0JRFBSSU5UX0lORk8oQkxLVlNDX0RSViwgIkJsa3ZzYyBpbml0aWFsaXppbmcuLi4uIik7Ci0KLQlyZXQgPSBibGt2c2NfZHJ2X2luaXQoYmxrX3ZzY19pbml0aWFsaXplKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyB2b2lkIF9fZXhpdCBibGt2c2NfZXhpdCh2b2lkKQogewogCWJsa3ZzY19kcnZfZXhpdCgpOwpAQCAtMTQ4OSw1ICsxMDE4LDUgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9WRVJTSU9OKEhWX0RSVl9WRVJTSU9OKTsKIE1PRFVMRV9ERVNDUklQVElPTigiTWljcm9zb2Z0IEh5cGVyLVYgdmlydHVhbCBibG9jayBkcml2ZXIiKTsKLW1vZHVsZV9pbml0KGJsa3ZzY19pbml0KTsKK21vZHVsZV9pbml0KGJsa3ZzY19kcnZfaW5pdCk7CiBtb2R1bGVfZXhpdChibGt2c2NfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvY2hhbm5lbC5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L2NoYW5uZWwuYwppbmRleCBmN2NlN2QyLi5mNjU1ZTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvY2hhbm5lbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9jaGFubmVsLmMKQEAgLTE4LDE1ICsxOCwxNyBAQAogICogICBIYWl5YW5nIFpoYW5nIDxoYWl5YW5nekBtaWNyb3NvZnQuY29tPgogICogICBIYW5rIEphbnNzZW4gIDxoamFuc3NlbkBtaWNyb3NvZnQuY29tPgogICovCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlICJodl9hcGkuaCIKLSNpbmNsdWRlICJsb2dnaW5nLmgiCi0jaW5jbHVkZSAidm1idXNfcHJpdmF0ZS5oIgorCisjaW5jbHVkZSAiaHlwZXJ2LmgiCisjaW5jbHVkZSAiaHlwZXJ2X3ZtYnVzLmgiCiAKICNkZWZpbmUgTlVNX1BBR0VTX1NQQU5ORUQoYWRkciwgbGVuKSBcCiAoKFBBR0VfQUxJR04oYWRkciArIGxlbikgPj4gUEFHRV9TSElGVCkgLSAoYWRkciA+PiBQQUdFX1NISUZUKSkKQEAgLTQwLDM3ICs0Miw2IEBACiBzdGF0aWMgdm9pZCBkdW1wX3ZtYnVzX2NoYW5uZWwoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwpOwogc3RhdGljIHZvaWQgdm1idXNfc2V0ZXZlbnQoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwpOwogCi0KLSNpZiAwCi1zdGF0aWMgdm9pZCBEdW1wTW9uaXRvclBhZ2Uoc3RydWN0IGh2X21vbml0b3JfcGFnZSAqTW9uaXRvclBhZ2UpCi17Ci0JaW50IGkgPSAwOwotCWludCBqID0gMDsKLQotCURQUklOVF9EQkcoVk1CVVMsICJtb25pdG9yUGFnZSAtICVwLCB0cmlnZ2VyIHN0YXRlIC0gJWQiLAotCQkgICBNb25pdG9yUGFnZSwgTW9uaXRvclBhZ2UtPnRyaWdnZXJfc3RhdGUpOwotCi0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLQkJRFBSSU5UX0RCRyhWTUJVUywgInRyaWdnZXIgZ3JvdXAgKCVkKSAtICVsbHgiLCBpLAotCQkJICAgTW9uaXRvclBhZ2UtPnRyaWdnZXJfZ3JvdXBbaV0uYXNfdWludDY0KTsKLQotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJZm9yIChqID0gMDsgaiA8IDMyOyBqKyspIHsKLQkJCURQUklOVF9EQkcoVk1CVVMsICJsYXRlbmN5ICglZCkoJWQpIC0gJWxseCIsIGksIGosCi0JCQkJICAgTW9uaXRvclBhZ2UtPmxhdGVuY3lbaV1bal0pOwotCQl9Ci0JfQotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJZm9yIChqID0gMDsgaiA8IDMyOyBqKyspIHsKLQkJCURQUklOVF9EQkcoVk1CVVMsICJwYXJhbS1jb25uIGlkICglZCkoJWQpIC0gJWQiLCBpLCBqLAotCQkJICAgICAgIE1vbml0b3JQYWdlLT5wYXJhbWV0ZXJbaV1bal0uY29ubmVjdGlvbmlkLmFzdTMyKTsKLQkJCURQUklOVF9EQkcoVk1CVVMsICJwYXJhbS1mbGFnICglZCkoJWQpIC0gJWQiLCBpLCBqLAotCQkJCU1vbml0b3JQYWdlLT5wYXJhbWV0ZXJbaV1bal0uZmxhZ19udW1iZXIpOwotCQl9Ci0JfQotfQotI2VuZGlmCi0KIC8qCiAgKiB2bWJ1c19zZXRldmVudC0gVHJpZ2dlciBhbiBldmVudCBub3RpZmljYXRpb24gb24gdGhlIHNwZWNpZmllZAogICogY2hhbm5lbC4KQEAgLTk3LDI4ICs2OCw2IEBACiAJfQogfQogCi0jaWYgMAotc3RhdGljIHZvaWQgVm1idXNDaGFubmVsQ2xlYXJFdmVudChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCkKLXsKLQlzdHJ1Y3QgaHZfbW9uaXRvcl9wYWdlICptb25pdG9yUGFnZTsKLQotCWlmIChDaGFubmVsLT5vZmZlcm1zZy5tb25pdG9yX2FsbG9jYXRlZCkgewotCQkvKiBFYWNoIHUzMiByZXByZXNlbnRzIDMyIGNoYW5uZWxzICovCi0JCXN5bmNfY2xlYXJfYml0KENoYW5uZWwtPm9mZmVybXNnLmNoaWxkX3JlbGlkICYgMzEsCi0JCQkgICh1bnNpZ25lZCBsb25nICopdm1idXNfY29ubmVjdGlvbi5zZW5kX2ludF9wYWdlICsKLQkJCSAgKENoYW5uZWwtPm9mZmVybXNnLmNoaWxkX3JlbGlkID4+IDUpKTsKLQotCQltb25pdG9yUGFnZSA9IChzdHJ1Y3QgaHZfbW9uaXRvcl9wYWdlICopCi0JCQl2bWJ1c19jb25uZWN0aW9uLm1vbml0b3JfcGFnZXM7Ci0JCW1vbml0b3JQYWdlKys7IC8qIEdldCB0aGUgY2hpbGQgdG8gcGFyZW50IG1vbml0b3IgcGFnZSAqLwotCi0JCXN5bmNfY2xlYXJfYml0KENoYW5uZWwtPm1vbml0b3JfYml0LAotCQkJICAodW5zaWduZWQgbG9uZyAqKSZtb25pdG9yUGFnZS0+dHJpZ2dlcl9ncm91cAotCQkJCQlbQ2hhbm5lbC0+bW9uaXRvcl9ncnBdLlBlbmRpbmcpOwotCX0KLX0KLQotI2VuZGlmCiAvKgogICogdm1idXNfZ2V0X2RlYnVnX2luZm8gLVJldHJpZXZlIHZhcmlvdXMgY2hhbm5lbCBkZWJ1ZyBpbmZvCiAgKi8KQEAgLTE2MCw4ICsxMDksOCBAQAogCQkJbW9uaXRvcnBhZ2UtPnBhcmFtZXRlclttb25pdG9yX2dyb3VwXQogCQkJCQlbbW9uaXRvcl9vZmZzZXRdLmNvbm5lY3Rpb25pZC51LmlkOwogCi0JcmluZ2J1ZmZlcl9nZXRfZGVidWdpbmZvKCZjaGFubmVsLT5pbmJvdW5kLCAmZGVidWdpbmZvLT5pbmJvdW5kKTsKLQlyaW5nYnVmZmVyX2dldF9kZWJ1Z2luZm8oJmNoYW5uZWwtPm91dGJvdW5kLCAmZGVidWdpbmZvLT5vdXRib3VuZCk7CisJaHZfcmluZ2J1ZmZlcl9nZXRfZGVidWdpbmZvKCZjaGFubmVsLT5pbmJvdW5kLCAmZGVidWdpbmZvLT5pbmJvdW5kKTsKKwlodl9yaW5nYnVmZmVyX2dldF9kZWJ1Z2luZm8oJmNoYW5uZWwtPm91dGJvdW5kLCAmZGVidWdpbmZvLT5vdXRib3VuZCk7CiB9CiAKIC8qCkBAIC0xNzUsMTEgKzEyNCw3IEBACiAJc3RydWN0IHZtYnVzX2NoYW5uZWxfbXNnaW5mbyAqb3BlbkluZm8gPSBOVUxMOwogCXZvaWQgKmluLCAqb3V0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCwgZXJyID0gMDsKLQotCS8qIEFsaWduZWQgdG8gcGFnZSBzaXplICovCi0JLyogQVNTRVJUKCEoU2VuZFJpbmdCdWZmZXJTaXplICYgKFBBR0VfU0laRSAtIDEpKSk7ICovCi0JLyogQVNTRVJUKCEoUmVjdlJpbmdCdWZmZXJTaXplICYgKFBBR0VfU0laRSAtIDEpKSk7ICovCisJaW50IHJldCwgdCwgZXJyID0gMDsKIAogCW5ld2NoYW5uZWwtPm9uY2hhbm5lbF9jYWxsYmFjayA9IG9uY2hhbm5lbGNhbGxiYWNrOwogCW5ld2NoYW5uZWwtPmNoYW5uZWxfY2FsbGJhY2tfY29udGV4dCA9IGNvbnRleHQ7CkBAIC0xOTEsNyArMTM2LDYgQEAKIAlpZiAoIW91dCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQkvKiBBU1NFUlQoKCh1bnNpZ25lZCBsb25nKW91dCAmIChQQUdFX1NJWkUtMSkpID09IDApOyAqLwogCiAJaW4gPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZylvdXQgKyBzZW5kX3JpbmdidWZmZXJfc2l6ZSk7CiAKQEAgLTE5OSwxMyArMTQzLDE2IEBACiAJbmV3Y2hhbm5lbC0+cmluZ2J1ZmZlcl9wYWdlY291bnQgPSAoc2VuZF9yaW5nYnVmZmVyX3NpemUgKwogCQkJCQkgICByZWN2X3JpbmdidWZmZXJfc2l6ZSkgPj4gUEFHRV9TSElGVDsKIAotCXJldCA9IHJpbmdidWZmZXJfaW5pdCgmbmV3Y2hhbm5lbC0+b3V0Ym91bmQsIG91dCwgc2VuZF9yaW5nYnVmZmVyX3NpemUpOworCXJldCA9IGh2X3JpbmdidWZmZXJfaW5pdCgKKwkJJm5ld2NoYW5uZWwtPm91dGJvdW5kLCBvdXQsIHNlbmRfcmluZ2J1ZmZlcl9zaXplKTsKKwogCWlmIChyZXQgIT0gMCkgewogCQllcnIgPSByZXQ7CiAJCWdvdG8gZXJyb3JvdXQ7CiAJfQogCi0JcmV0ID0gcmluZ2J1ZmZlcl9pbml0KCZuZXdjaGFubmVsLT5pbmJvdW5kLCBpbiwgcmVjdl9yaW5nYnVmZmVyX3NpemUpOworCXJldCA9IGh2X3JpbmdidWZmZXJfaW5pdCgKKwkJJm5ld2NoYW5uZWwtPmluYm91bmQsIGluLCByZWN2X3JpbmdidWZmZXJfc2l6ZSk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCWVyciA9IHJldDsKIAkJZ290byBlcnJvcm91dDsKQEAgLTIxMyw5ICsxNjAsNiBAQAogCiAKIAkvKiBFc3RhYmxpc2ggdGhlIGdwYWRsIGZvciB0aGUgcmluZyBidWZmZXIgKi8KLQlEUFJJTlRfREJHKFZNQlVTLCAiRXN0YWJsaXNoaW5nIHJpbmcgYnVmZmVyJ3MgZ3BhZGwgZm9yIGNoYW5uZWwgJXAuLi4iLAotCQkgICBuZXdjaGFubmVsKTsKLQogCW5ld2NoYW5uZWwtPnJpbmdidWZmZXJfZ3BhZGxoYW5kbGUgPSAwOwogCiAJcmV0ID0gdm1idXNfZXN0YWJsaXNoX2dwYWRsKG5ld2NoYW5uZWwsCkBAIC0yMjksMTYgKzE3Myw2IEBACiAJCWdvdG8gZXJyb3JvdXQ7CiAJfQogCi0JRFBSSU5UX0RCRyhWTUJVUywgImNoYW5uZWwgJXAgPHJlbGlkICVkIGdwYWRsIDB4JXggc2VuZCByaW5nICVwICIKLQkJICAgInNpemUgJWQgcmVjdiByaW5nICVwIHNpemUgJWQsIGRvd25zdHJlYW1vZmZzZXQgJWQ+IiwKLQkJICAgbmV3Y2hhbm5lbCwgbmV3Y2hhbm5lbC0+b2ZmZXJtc2cuY2hpbGRfcmVsaWQsCi0JCSAgIG5ld2NoYW5uZWwtPnJpbmdidWZmZXJfZ3BhZGxoYW5kbGUsCi0JCSAgIG5ld2NoYW5uZWwtPm91dGJvdW5kLnJpbmdfYnVmZmVyLAotCQkgICBuZXdjaGFubmVsLT5vdXRib3VuZC5yaW5nX3NpemUsCi0JCSAgIG5ld2NoYW5uZWwtPmluYm91bmQucmluZ19idWZmZXIsCi0JCSAgIG5ld2NoYW5uZWwtPmluYm91bmQucmluZ19zaXplLAotCQkgICBzZW5kX3JpbmdidWZmZXJfc2l6ZSk7Ci0KIAkvKiBDcmVhdGUgYW5kIGluaXQgdGhlIGNoYW5uZWwgb3BlbiBtZXNzYWdlICovCiAJb3BlbkluZm8gPSBrbWFsbG9jKHNpemVvZigqb3BlbkluZm8pICsKIAkJCSAgIHNpemVvZihzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9vcGVuX2NoYW5uZWwpLApAQCAtMjQ4LDcgKzE4Miw3IEBACiAJCWdvdG8gZXJyb3JvdXQ7CiAJfQogCi0JaW5pdF93YWl0cXVldWVfaGVhZCgmb3BlbkluZm8tPndhaXRldmVudCk7CisJaW5pdF9jb21wbGV0aW9uKCZvcGVuSW5mby0+d2FpdGV2ZW50KTsKIAogCW9wZW5Nc2cgPSAoc3RydWN0IHZtYnVzX2NoYW5uZWxfb3Blbl9jaGFubmVsICopb3BlbkluZm8tPm1zZzsKIAlvcGVuTXNnLT5oZWFkZXIubXNndHlwZSA9IENIQU5ORUxNU0dfT1BFTkNIQU5ORUw7CkBAIC0yNzIsMzAgKzIwNiwyMSBAQAogCQkgICAgICAmdm1idXNfY29ubmVjdGlvbi5jaG5fbXNnX2xpc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZtYnVzX2Nvbm5lY3Rpb24uY2hhbm5lbG1zZ19sb2NrLCBmbGFncyk7CiAKLQlEUFJJTlRfREJHKFZNQlVTLCAiU2VuZGluZyBjaGFubmVsIG9wZW4gbXNnLi4uIik7Ci0KIAlyZXQgPSB2bWJ1c19wb3N0X21zZyhvcGVuTXNnLAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9vcGVuX2NoYW5uZWwpKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJRFBSSU5UX0VSUihWTUJVUywgInVuYWJsZSB0byBvcGVuIGNoYW5uZWwgLSAlZCIsIHJldCk7Ci0JCWdvdG8gQ2xlYW51cDsKLQl9CiAKLQlvcGVuSW5mby0+d2FpdF9jb25kaXRpb24gPSAwOwotCXdhaXRfZXZlbnRfdGltZW91dChvcGVuSW5mby0+d2FpdGV2ZW50LAotCQkJb3BlbkluZm8tPndhaXRfY29uZGl0aW9uLAotCQkJbXNlY3NfdG9famlmZmllcygxMDAwKSk7Ci0JaWYgKG9wZW5JbmZvLT53YWl0X2NvbmRpdGlvbiA9PSAwKSB7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIENsZWFudXA7CisKKwl0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZvcGVuSW5mby0+d2FpdGV2ZW50LCBIWik7CisJaWYgKHQgPT0gMCkgewogCQllcnIgPSAtRVRJTUVET1VUOwogCQlnb3RvIGVycm9yb3V0OwogCX0KIAogCi0JaWYgKG9wZW5JbmZvLT5yZXNwb25zZS5vcGVuX3Jlc3VsdC5zdGF0dXMgPT0gMCkKLQkJRFBSSU5UX0lORk8oVk1CVVMsICJjaGFubmVsIDwlcD4gb3BlbiBzdWNjZXNzISEiLCBuZXdjaGFubmVsKTsKLQllbHNlCi0JCURQUklOVF9JTkZPKFZNQlVTLCAiY2hhbm5lbCA8JXA+IG9wZW4gZmFpbGVkIC0gJWQhISIsCi0JCQkgICAgbmV3Y2hhbm5lbCwgb3BlbkluZm8tPnJlc3BvbnNlLm9wZW5fcmVzdWx0LnN0YXR1cyk7CisJaWYgKG9wZW5JbmZvLT5yZXNwb25zZS5vcGVuX3Jlc3VsdC5zdGF0dXMpCisJCWVyciA9IG9wZW5JbmZvLT5yZXNwb25zZS5vcGVuX3Jlc3VsdC5zdGF0dXM7CiAKIENsZWFudXA6CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnZtYnVzX2Nvbm5lY3Rpb24uY2hhbm5lbG1zZ19sb2NrLCBmbGFncyk7CkBAIC0zMDMsMTEgKzIyOCwxMSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZtYnVzX2Nvbm5lY3Rpb24uY2hhbm5lbG1zZ19sb2NrLCBmbGFncyk7CiAKIAlrZnJlZShvcGVuSW5mbyk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGVycjsKIAogZXJyb3JvdXQ6Ci0JcmluZ2J1ZmZlcl9jbGVhbnVwKCZuZXdjaGFubmVsLT5vdXRib3VuZCk7Ci0JcmluZ2J1ZmZlcl9jbGVhbnVwKCZuZXdjaGFubmVsLT5pbmJvdW5kKTsKKwlodl9yaW5nYnVmZmVyX2NsZWFudXAoJm5ld2NoYW5uZWwtPm91dGJvdW5kKTsKKwlodl9yaW5nYnVmZmVyX2NsZWFudXAoJm5ld2NoYW5uZWwtPmluYm91bmQpOwogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpb3V0LAogCQlnZXRfb3JkZXIoc2VuZF9yaW5nYnVmZmVyX3NpemUgKyByZWN2X3JpbmdidWZmZXJfc2l6ZSkpOwogCWtmcmVlKG9wZW5JbmZvKTsKQEAgLTMyNiw2ICsyNTEsNyBAQAogCiAJcGZuY291bnQgPSAobGVuIC0gc2l6ZW9mKHN0cnVjdCB2bWJ1c19jaGFubmVsX2dwYWRsX2JvZHkpKSAvCiAJCSAgIHNpemVvZih1NjQpOworCiAJRFBSSU5UX0RCRyhWTUJVUywgImdwYWRsIGJvZHkgLSBsZW4gJWQgcGZuIGNvdW50ICVkIiwgbGVuLCBwZm5jb3VudCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcGZuY291bnQ7IGkrKykKQEAgLTM3Nyw5ICszMDMsNiBAQAogCiAJaW50IHBmbnN1bSwgcGZuY291bnQsIHBmbmxlZnQsIHBmbmN1cnIsIHBmbnNpemU7CiAKLQkvKiBBU1NFUlQoKGtidWZmZXIgJiAoUEFHRV9TSVpFLTEpKSA9PSAwKTsgKi8KLQkvKiBBU1NFUlQoKFNpemUgJiAoUEFHRV9TSVpFLTEpKSA9PSAwKTsgKi8KLQogCXBhZ2Vjb3VudCA9IHNpemUgPj4gUEFHRV9TSElGVDsKIAlwZm4gPSB2aXJ0X3RvX3BoeXMoa2J1ZmZlcikgPj4gUEFHRV9TSElGVDsKIApAQCAtNTA4LDYgKzQzMSw3IEBACiAJdTMyIG5leHRfZ3BhZGxfaGFuZGxlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDA7CisJaW50IHQ7CiAKIAluZXh0X2dwYWRsX2hhbmRsZSA9IGF0b21pY19yZWFkKCZ2bWJ1c19jb25uZWN0aW9uLm5leHRfZ3BhZGxfaGFuZGxlKTsKIAlhdG9taWNfaW5jKCZ2bWJ1c19jb25uZWN0aW9uLm5leHRfZ3BhZGxfaGFuZGxlKTsKQEAgLTUxNiw3ICs0NDAsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtc2dpbmZvLT53YWl0ZXZlbnQpOworCWluaXRfY29tcGxldGlvbigmbXNnaW5mby0+d2FpdGV2ZW50KTsKIAogCWdwYWRsbXNnID0gKHN0cnVjdCB2bWJ1c19jaGFubmVsX2dwYWRsX2hlYWRlciAqKW1zZ2luZm8tPm1zZzsKIAlncGFkbG1zZy0+aGVhZGVyLm1zZ3R5cGUgPSBDSEFOTkVMTVNHX0dQQURMX0hFQURFUjsKQEAgLTUzMCwxOSArNDU0LDExIEBACiAJCSAgICAgICZ2bWJ1c19jb25uZWN0aW9uLmNobl9tc2dfbGlzdCk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2bWJ1c19jb25uZWN0aW9uLmNoYW5uZWxtc2dfbG9jaywgZmxhZ3MpOwotCURQUklOVF9EQkcoVk1CVVMsICJidWZmZXIgJXAsIHNpemUgJWQgbXNnIGNudCAlZCIsCi0JCSAgIGtidWZmZXIsIHNpemUsIG1zZ2NvdW50KTsKIAotCURQUklOVF9EQkcoVk1CVVMsICJTZW5kaW5nIEdQQURMIEhlYWRlciAtIGxlbiAlemQiLAotCQkgICBtc2dpbmZvLT5tc2dzaXplIC0gc2l6ZW9mKCptc2dpbmZvKSk7Ci0KLQltc2dpbmZvLT53YWl0X2NvbmRpdGlvbiA9IDA7CiAJcmV0ID0gdm1idXNfcG9zdF9tc2coZ3BhZGxtc2csIG1zZ2luZm8tPm1zZ3NpemUgLQogCQkJICAgICAgIHNpemVvZigqbXNnaW5mbykpOwotCWlmIChyZXQgIT0gMCkgewotCQlEUFJJTlRfRVJSKFZNQlVTLCAiVW5hYmxlIHRvIG9wZW4gY2hhbm5lbCAtICVkIiwgcmV0KTsKKwlpZiAocmV0ICE9IDApCiAJCWdvdG8gQ2xlYW51cDsKLQl9CiAKIAlpZiAobXNnY291bnQgPiAxKSB7CiAJCWxpc3RfZm9yX2VhY2goY3VyciwgJm1zZ2luZm8tPnN1Ym1zZ2xpc3QpIHsKQEAgLTU1NiwxMCArNDcyLDYgQEAKIAkJCQlDSEFOTkVMTVNHX0dQQURMX0JPRFk7CiAJCQlncGFkbF9ib2R5LT5ncGFkbCA9IG5leHRfZ3BhZGxfaGFuZGxlOwogCi0JCQlEUFJJTlRfREJHKFZNQlVTLCAiU2VuZGluZyBHUEFETCBCb2R5IC0gbGVuICV6ZCIsCi0JCQkJICAgc3VibXNnaW5mby0+bXNnc2l6ZSAtCi0JCQkJICAgc2l6ZW9mKCpzdWJtc2dpbmZvKSk7Ci0KIAkJCWR1bXBfZ3BhZGxfYm9keShncGFkbF9ib2R5LCBzdWJtc2dpbmZvLT5tc2dzaXplIC0KIAkJCQkgICAgICBzaXplb2YoKnN1Ym1zZ2luZm8pKTsKIAkJCXJldCA9IHZtYnVzX3Bvc3RfbXNnKGdwYWRsX2JvZHksCkBAIC01NzAsMTkgKzQ4MiwxMSBAQAogCiAJCX0KIAl9Ci0Jd2FpdF9ldmVudF90aW1lb3V0KG1zZ2luZm8tPndhaXRldmVudCwKLQkJCQltc2dpbmZvLT53YWl0X2NvbmRpdGlvbiwKLQkJCQltc2Vjc190b19qaWZmaWVzKDEwMDApKTsKLQlCVUdfT04obXNnaW5mby0+d2FpdF9jb25kaXRpb24gPT0gMCk7CisJdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmbXNnaW5mby0+d2FpdGV2ZW50LCBIWik7CisJQlVHX09OKHQgPT0gMCk7CiAKIAogCS8qIEF0IHRoaXMgcG9pbnQsIHdlIHJlY2VpdmVkIHRoZSBncGFkbCBjcmVhdGVkIG1zZyAqLwotCURQUklOVF9EQkcoVk1CVVMsICJSZWNlaXZlZCBHUEFETCBjcmVhdGVkICIKLQkJICAgIihyZWxpZCAlZCwgc3RhdHVzICVkIGhhbmRsZSAleCkiLAotCQkgICBjaGFubmVsLT5vZmZlcm1zZy5jaGlsZF9yZWxpZCwKLQkJICAgbXNnaW5mby0+cmVzcG9uc2UuZ3BhZGxfY3JlYXRlZC5jcmVhdGlvbl9zdGF0dXMsCi0JCSAgIGdwYWRsbXNnLT5ncGFkbCk7Ci0KIAkqZ3BhZGxfaGFuZGxlID0gZ3BhZGxtc2ctPmdwYWRsOwogCiBDbGVhbnVwOgpAQCAtNjAzLDcgKzUwNyw3IEBACiAJc3RydWN0IHZtYnVzX2NoYW5uZWxfZ3BhZGxfdGVhcmRvd24gKm1zZzsKIAlzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9tc2dpbmZvICppbmZvOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCB0OwogCiAJLyogQVNTRVJUKGdwYWRsX2hhbmRsZSAhPSAwKTsgKi8KIApAQCAtNjEyLDcgKzUxNiw3IEBACiAJaWYgKCFpbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmluZm8tPndhaXRldmVudCk7CisJaW5pdF9jb21wbGV0aW9uKCZpbmZvLT53YWl0ZXZlbnQpOwogCiAJbXNnID0gKHN0cnVjdCB2bWJ1c19jaGFubmVsX2dwYWRsX3RlYXJkb3duICopaW5mby0+bXNnOwogCkBAIC02MjQsMTQgKzUyOCwxMiBAQAogCWxpc3RfYWRkX3RhaWwoJmluZm8tPm1zZ2xpc3RlbnRyeSwKIAkJICAgICAgJnZtYnVzX2Nvbm5lY3Rpb24uY2huX21zZ19saXN0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2bWJ1c19jb25uZWN0aW9uLmNoYW5uZWxtc2dfbG9jaywgZmxhZ3MpOwotCWluZm8tPndhaXRfY29uZGl0aW9uID0gMDsKIAlyZXQgPSB2bWJ1c19wb3N0X21zZyhtc2csCiAJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB2bWJ1c19jaGFubmVsX2dwYWRsX3RlYXJkb3duKSk7CiAKIAlCVUdfT04ocmV0ICE9IDApOwotCXdhaXRfZXZlbnRfdGltZW91dChpbmZvLT53YWl0ZXZlbnQsCi0JCQlpbmZvLT53YWl0X2NvbmRpdGlvbiwgbXNlY3NfdG9famlmZmllcygxMDAwKSk7Ci0JQlVHX09OKGluZm8tPndhaXRfY29uZGl0aW9uID09IDApOworCXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmluZm8tPndhaXRldmVudCwgSFopOworCUJVR19PTih0ID09IDApOwogCiAJLyogUmVjZWl2ZWQgYSB0b3JuZG93biByZXNwb25zZSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZ2bWJ1c19jb25uZWN0aW9uLmNoYW5uZWxtc2dfbG9jaywgZmxhZ3MpOwpAQCAtNjgxLDggKzU4Myw4IEBACiAJLyogVE9ETzogU2VuZCBhIG1zZyB0byByZWxlYXNlIHRoZSBjaGlsZFJlbElkICovCiAKIAkvKiBDbGVhbnVwIHRoZSByaW5nIGJ1ZmZlcnMgZm9yIHRoaXMgY2hhbm5lbCAqLwotCXJpbmdidWZmZXJfY2xlYW51cCgmY2hhbm5lbC0+b3V0Ym91bmQpOwotCXJpbmdidWZmZXJfY2xlYW51cCgmY2hhbm5lbC0+aW5ib3VuZCk7CisJaHZfcmluZ2J1ZmZlcl9jbGVhbnVwKCZjaGFubmVsLT5vdXRib3VuZCk7CisJaHZfcmluZ2J1ZmZlcl9jbGVhbnVwKCZjaGFubmVsLT5pbmJvdW5kKTsKIAogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpY2hhbm5lbC0+cmluZ2J1ZmZlcl9wYWdlcywKIAkJZ2V0X29yZGVyKGNoYW5uZWwtPnJpbmdidWZmZXJfcGFnZWNvdW50ICogUEFHRV9TSVpFKSk7CkBAIC03MzAsMTMgKzYzMiw4IEBACiAJdTY0IGFsaWduZWRfZGF0YSA9IDA7CiAJaW50IHJldDsKIAotCURQUklOVF9EQkcoVk1CVVMsICJjaGFubmVsICVwIGJ1ZmZlciAlcCBsZW4gJWQiLAotCQkgICBjaGFubmVsLCBidWZmZXIsIGJ1ZmZlcmxlbik7Ci0KIAlkdW1wX3ZtYnVzX2NoYW5uZWwoY2hhbm5lbCk7CiAKLQkvKiBBU1NFUlQoKHBhY2tldExlbkFsaWduZWQgLSBwYWNrZXRMZW4pIDwgc2l6ZW9mKHU2NCkpOyAqLwotCiAJLyogU2V0dXAgdGhlIGRlc2NyaXB0b3IgKi8KIAlkZXNjLnR5cGUgPSB0eXBlOyAvKiBWbWJ1c1BhY2tldFR5cGVEYXRhSW5CYW5kOyAqLwogCWRlc2MuZmxhZ3MgPSBmbGFnczsgLyogVk1CVVNfREFUQV9QQUNLRVRfRkxBR19DT01QTEVUSU9OX1JFUVVFU1RFRDsgKi8KQEAgLTc1MSwxMCArNjQ4LDEwIEBACiAJc2dfc2V0X2J1ZigmYnVmZmVybGlzdFsyXSwgJmFsaWduZWRfZGF0YSwKIAkJICAgcGFja2V0bGVuX2FsaWduZWQgLSBwYWNrZXRsZW4pOwogCi0JcmV0ID0gcmluZ2J1ZmZlcl93cml0ZSgmY2hhbm5lbC0+b3V0Ym91bmQsIGJ1ZmZlcmxpc3QsIDMpOworCXJldCA9IGh2X3JpbmdidWZmZXJfd3JpdGUoJmNoYW5uZWwtPm91dGJvdW5kLCBidWZmZXJsaXN0LCAzKTsKIAogCS8qIFRPRE86IFdlIHNob3VsZCBkZXRlcm1pbmUgaWYgdGhpcyBpcyBvcHRpb25hbCAqLwotCWlmIChyZXQgPT0gMCAmJiAhZ2V0X3JpbmdidWZmZXJfaW50ZXJydXB0X21hc2soJmNoYW5uZWwtPm91dGJvdW5kKSkKKwlpZiAocmV0ID09IDAgJiYgIWh2X2dldF9yaW5nYnVmZmVyX2ludGVycnVwdF9tYXNrKCZjaGFubmVsLT5vdXRib3VuZCkpCiAJCXZtYnVzX3NldGV2ZW50KGNoYW5uZWwpOwogCiAJcmV0dXJuIHJldDsKQEAgLTc5NCw4ICs2OTEsNiBAQAogCXBhY2tldGxlbiA9IGRlc2NzaXplICsgYnVmZmVybGVuOwogCXBhY2tldGxlbl9hbGlnbmVkID0gQUxJR04ocGFja2V0bGVuLCBzaXplb2YodTY0KSk7CiAKLQkvKiBBU1NFUlQoKHBhY2tldExlbkFsaWduZWQgLSBwYWNrZXRMZW4pIDwgc2l6ZW9mKHU2NCkpOyAqLwotCiAJLyogU2V0dXAgdGhlIGRlc2NyaXB0b3IgKi8KIAlkZXNjLnR5cGUgPSBWTV9QS1RfREFUQV9VU0lOR19HUEFfRElSRUNUOwogCWRlc2MuZmxhZ3MgPSBWTUJVU19EQVRBX1BBQ0tFVF9GTEFHX0NPTVBMRVRJT05fUkVRVUVTVEVEOwpAQCAtODE2LDEwICs3MTEsMTAgQEAKIAlzZ19zZXRfYnVmKCZidWZmZXJsaXN0WzJdLCAmYWxpZ25lZF9kYXRhLAogCQlwYWNrZXRsZW5fYWxpZ25lZCAtIHBhY2tldGxlbik7CiAKLQlyZXQgPSByaW5nYnVmZmVyX3dyaXRlKCZjaGFubmVsLT5vdXRib3VuZCwgYnVmZmVybGlzdCwgMyk7CisJcmV0ID0gaHZfcmluZ2J1ZmZlcl93cml0ZSgmY2hhbm5lbC0+b3V0Ym91bmQsIGJ1ZmZlcmxpc3QsIDMpOwogCiAJLyogVE9ETzogV2Ugc2hvdWxkIGRldGVybWluZSBpZiB0aGlzIGlzIG9wdGlvbmFsICovCi0JaWYgKHJldCA9PSAwICYmICFnZXRfcmluZ2J1ZmZlcl9pbnRlcnJ1cHRfbWFzaygmY2hhbm5lbC0+b3V0Ym91bmQpKQorCWlmIChyZXQgPT0gMCAmJiAhaHZfZ2V0X3JpbmdidWZmZXJfaW50ZXJydXB0X21hc2soJmNoYW5uZWwtPm91dGJvdW5kKSkKIAkJdm1idXNfc2V0ZXZlbnQoY2hhbm5lbCk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtODQ2LDEwICs3NDEsNiBAQAogCiAJZHVtcF92bWJ1c19jaGFubmVsKGNoYW5uZWwpOwogCi0JRFBSSU5UX0RCRyhWTUJVUywgImRhdGEgYnVmZmVyIC0gb2Zmc2V0ICV1IGxlbiAldSBwZm4gY291bnQgJXUiLAotCQltdWx0aV9wYWdlYnVmZmVyLT5vZmZzZXQsCi0JCW11bHRpX3BhZ2VidWZmZXItPmxlbiwgcGZuY291bnQpOwotCiAJaWYgKChwZm5jb3VudCA8IDApIHx8IChwZm5jb3VudCA+IE1BWF9NVUxUSVBBR0VfQlVGRkVSX0NPVU5UKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTg2Myw3ICs3NTQsNiBAQAogCXBhY2tldGxlbiA9IGRlc2NzaXplICsgYnVmZmVybGVuOwogCXBhY2tldGxlbl9hbGlnbmVkID0gQUxJR04ocGFja2V0bGVuLCBzaXplb2YodTY0KSk7CiAKLQkvKiBBU1NFUlQoKHBhY2tldExlbkFsaWduZWQgLSBwYWNrZXRMZW4pIDwgc2l6ZW9mKHU2NCkpOyAqLwogCiAJLyogU2V0dXAgdGhlIGRlc2NyaXB0b3IgKi8KIAlkZXNjLnR5cGUgPSBWTV9QS1RfREFUQV9VU0lOR19HUEFfRElSRUNUOwpAQCAtODg1LDEwICs3NzUsMTAgQEAKIAlzZ19zZXRfYnVmKCZidWZmZXJsaXN0WzJdLCAmYWxpZ25lZF9kYXRhLAogCQlwYWNrZXRsZW5fYWxpZ25lZCAtIHBhY2tldGxlbik7CiAKLQlyZXQgPSByaW5nYnVmZmVyX3dyaXRlKCZjaGFubmVsLT5vdXRib3VuZCwgYnVmZmVybGlzdCwgMyk7CisJcmV0ID0gaHZfcmluZ2J1ZmZlcl93cml0ZSgmY2hhbm5lbC0+b3V0Ym91bmQsIGJ1ZmZlcmxpc3QsIDMpOwogCiAJLyogVE9ETzogV2Ugc2hvdWxkIGRldGVybWluZSBpZiB0aGlzIGlzIG9wdGlvbmFsICovCi0JaWYgKHJldCA9PSAwICYmICFnZXRfcmluZ2J1ZmZlcl9pbnRlcnJ1cHRfbWFzaygmY2hhbm5lbC0+b3V0Ym91bmQpKQorCWlmIChyZXQgPT0gMCAmJiAhaHZfZ2V0X3JpbmdidWZmZXJfaW50ZXJydXB0X21hc2soJmNoYW5uZWwtPm91dGJvdW5kKSkKIAkJdm1idXNfc2V0ZXZlbnQoY2hhbm5lbCk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtOTIyLDMyICs4MTIsMjIgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGFubmVsLT5pbmJvdW5kX2xvY2ssIGZsYWdzKTsKIAotCXJldCA9IHJpbmdidWZmZXJfcGVlaygmY2hhbm5lbC0+aW5ib3VuZCwgJmRlc2MsCisJcmV0ID0gaHZfcmluZ2J1ZmZlcl9wZWVrKCZjaGFubmVsLT5pbmJvdW5kLCAmZGVzYywKIAkJCSAgICAgc2l6ZW9mKHN0cnVjdCB2bXBhY2tldF9kZXNjcmlwdG9yKSk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW5uZWwtPmluYm91bmRfbG9jaywgZmxhZ3MpOwotCi0JCS8qIERQUklOVF9EQkcoVk1CVVMsICJub3RoaW5nIHRvIHJlYWQhISIpOyAqLwogCQlyZXR1cm4gMDsKIAl9CiAKLQkvKiBWbWJ1c0NoYW5uZWxDbGVhckV2ZW50KENoYW5uZWwpOyAqLwotCiAJcGFja2V0bGVuID0gZGVzYy5sZW44IDw8IDM7CiAJdXNlcmxlbiA9IHBhY2tldGxlbiAtIChkZXNjLm9mZnNldDggPDwgMyk7Ci0JLyogQVNTRVJUKHVzZXJMZW4gPiAwKTsgKi8KLQotCURQUklOVF9EQkcoVk1CVVMsICJwYWNrZXQgcmVjZWl2ZWQgb24gY2hhbm5lbCAlcCByZWxpZCAlZCA8dHlwZSAlZCAiCi0JCSAgICJmbGFnICVkIHRpZCAlbGx4IHBrdGxlbiAlZCBkYXRhbGVuICVkPiAiLAotCQkgICBjaGFubmVsLCBjaGFubmVsLT5vZmZlcm1zZy5jaGlsZF9yZWxpZCwgZGVzYy50eXBlLAotCQkgICBkZXNjLmZsYWdzLCBkZXNjLnRyYW5zX2lkLCBwYWNrZXRsZW4sIHVzZXJsZW4pOwogCiAJKmJ1ZmZlcl9hY3R1YWxfbGVuID0gdXNlcmxlbjsKIAogCWlmICh1c2VybGVuID4gYnVmZmVybGVuKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW5uZWwtPmluYm91bmRfbG9jaywgZmxhZ3MpOwogCi0JCURQUklOVF9FUlIoVk1CVVMsICJidWZmZXIgdG9vIHNtYWxsIC0gZ290ICVkIG5lZWRzICVkIiwKKwkJcHJfZXJyKCJCdWZmZXIgdG9vIHNtYWxsIC0gZ290ICVkIG5lZWRzICVkXG4iLAogCQkJICAgYnVmZmVybGVuLCB1c2VybGVuKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTk1NSw3ICs4MzUsNyBAQAogCSpyZXF1ZXN0aWQgPSBkZXNjLnRyYW5zX2lkOwogCiAJLyogQ29weSBvdmVyIHRoZSBwYWNrZXQgdG8gdGhlIHVzZXIgYnVmZmVyICovCi0JcmV0ID0gcmluZ2J1ZmZlcl9yZWFkKCZjaGFubmVsLT5pbmJvdW5kLCBidWZmZXIsIHVzZXJsZW4sCisJcmV0ID0gaHZfcmluZ2J1ZmZlcl9yZWFkKCZjaGFubmVsLT5pbmJvdW5kLCBidWZmZXIsIHVzZXJsZW4sCiAJCQkgICAgIChkZXNjLm9mZnNldDggPDwgMykpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hhbm5lbC0+aW5ib3VuZF9sb2NrLCBmbGFncyk7CkBAIC05ODIsMzkgKzg2MiwzMiBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW5uZWwtPmluYm91bmRfbG9jaywgZmxhZ3MpOwogCi0JcmV0ID0gcmluZ2J1ZmZlcl9wZWVrKCZjaGFubmVsLT5pbmJvdW5kLCAmZGVzYywKKwlyZXQgPSBodl9yaW5nYnVmZmVyX3BlZWsoJmNoYW5uZWwtPmluYm91bmQsICZkZXNjLAogCQkJICAgICBzaXplb2Yoc3RydWN0IHZtcGFja2V0X2Rlc2NyaXB0b3IpKTsKIAlpZiAocmV0ICE9IDApIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hhbm5lbC0+aW5ib3VuZF9sb2NrLCBmbGFncyk7Ci0KLQkJLyogRFBSSU5UX0RCRyhWTUJVUywgIm5vdGhpbmcgdG8gcmVhZCEhIik7ICovCiAJCXJldHVybiAwOwogCX0KIAotCS8qIFZtYnVzQ2hhbm5lbENsZWFyRXZlbnQoQ2hhbm5lbCk7ICovCiAKIAlwYWNrZXRsZW4gPSBkZXNjLmxlbjggPDwgMzsKIAl1c2VybGVuID0gcGFja2V0bGVuIC0gKGRlc2Mub2Zmc2V0OCA8PCAzKTsKIAotCURQUklOVF9EQkcoVk1CVVMsICJwYWNrZXQgcmVjZWl2ZWQgb24gY2hhbm5lbCAlcCByZWxpZCAlZCA8dHlwZSAlZCAiCi0JCSAgICJmbGFnICVkIHRpZCAlbGx4IHBrdGxlbiAlZCBkYXRhbGVuICVkPiAiLAotCQkgICBjaGFubmVsLCBjaGFubmVsLT5vZmZlcm1zZy5jaGlsZF9yZWxpZCwgZGVzYy50eXBlLAotCQkgICBkZXNjLmZsYWdzLCBkZXNjLnRyYW5zX2lkLCBwYWNrZXRsZW4sIHVzZXJsZW4pOwotCiAJKmJ1ZmZlcl9hY3R1YWxfbGVuID0gcGFja2V0bGVuOwogCiAJaWYgKHBhY2tldGxlbiA+IGJ1ZmZlcmxlbikgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFubmVsLT5pbmJvdW5kX2xvY2ssIGZsYWdzKTsKIAotCQlEUFJJTlRfRVJSKFZNQlVTLCAiYnVmZmVyIHRvbyBzbWFsbCAtIG5lZWRlZCAlZCBieXRlcyBidXQgIgotCQkJICAgImdvdCBzcGFjZSBmb3Igb25seSAlZCBieXRlcyIsIHBhY2tldGxlbiwgYnVmZmVybGVuKTsKKwkJcHJfZXJyKCJCdWZmZXIgdG9vIHNtYWxsIC0gbmVlZGVkICVkIGJ5dGVzIGJ1dCAiCisJCQkiZ290IHNwYWNlIGZvciBvbmx5ICVkIGJ5dGVzXG4iLAorCQkJcGFja2V0bGVuLCBidWZmZXJsZW4pOwogCQlyZXR1cm4gLTI7CiAJfQogCiAJKnJlcXVlc3RpZCA9IGRlc2MudHJhbnNfaWQ7CiAKIAkvKiBDb3B5IG92ZXIgdGhlIGVudGlyZSBwYWNrZXQgdG8gdGhlIHVzZXIgYnVmZmVyICovCi0JcmV0ID0gcmluZ2J1ZmZlcl9yZWFkKCZjaGFubmVsLT5pbmJvdW5kLCBidWZmZXIsIHBhY2tldGxlbiwgMCk7CisJcmV0ID0gaHZfcmluZ2J1ZmZlcl9yZWFkKCZjaGFubmVsLT5pbmJvdW5kLCBidWZmZXIsIHBhY2tldGxlbiwgMCk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFubmVsLT5pbmJvdW5kX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKQEAgLTEwMjcsNyArOTAwLDYgQEAKIHZvaWQgdm1idXNfb25jaGFubmVsX2V2ZW50KHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsKQogewogCWR1bXBfdm1idXNfY2hhbm5lbChjaGFubmVsKTsKLQkvKiBBU1NFUlQoQ2hhbm5lbC0+T25DaGFubmVsQ2FsbGJhY2spOyAqLwogCiAJY2hhbm5lbC0+b25jaGFubmVsX2NhbGxiYWNrKGNoYW5uZWwtPmNoYW5uZWxfY2FsbGJhY2tfY29udGV4dCk7CiAKQEAgLTEwNTEsNiArOTIzLDYgQEAKIHN0YXRpYyB2b2lkIGR1bXBfdm1idXNfY2hhbm5lbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCkKIHsKIAlEUFJJTlRfREJHKFZNQlVTLCAiQ2hhbm5lbCAoJWQpIiwgY2hhbm5lbC0+b2ZmZXJtc2cuY2hpbGRfcmVsaWQpOwotCWR1bXBfcmluZ19pbmZvKCZjaGFubmVsLT5vdXRib3VuZCwgIk91dGJvdW5kICIpOwotCWR1bXBfcmluZ19pbmZvKCZjaGFubmVsLT5pbmJvdW5kLCAiSW5ib3VuZCAiKTsKKwlodl9kdW1wX3JpbmdfaW5mbygmY2hhbm5lbC0+b3V0Ym91bmQsICJPdXRib3VuZCAiKTsKKwlodl9kdW1wX3JpbmdfaW5mbygmY2hhbm5lbC0+aW5ib3VuZCwgIkluYm91bmQgIik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvY2hhbm5lbC5oIGIvZHJpdmVycy9zdGFnaW5nL2h2L2NoYW5uZWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU0Zjg2Ny4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvY2hhbm5lbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA5LCBNaWNyb3NvZnQgQ29ycG9yYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCi0gKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKLSAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUKLSAqIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBLgotICoKLSAqIEF1dGhvcnM6Ci0gKiAgIEhhaXlhbmcgWmhhbmcgPGhhaXlhbmd6QG1pY3Jvc29mdC5jb20+Ci0gKiAgIEhhbmsgSmFuc3NlbiAgPGhqYW5zc2VuQG1pY3Jvc29mdC5jb20+Ci0gKgotICovCi0KLQotI2lmbmRlZiBfQ0hBTk5FTF9IXwotI2RlZmluZSBfQ0hBTk5FTF9IXwotCi0jaW5jbHVkZSAiY2hhbm5lbF9tZ210LmgiCi0KLS8qIFRoZSBmb3JtYXQgbXVzdCBiZSB0aGUgc2FtZSBhcyBzdHJ1Y3Qgdm1kYXRhX2dwYV9kaXJlY3QgKi8KLXN0cnVjdCB2bWJ1c19jaGFubmVsX3BhY2tldF9wYWdlX2J1ZmZlciB7Ci0JdTE2IHR5cGU7Ci0JdTE2IGRhdGFvZmZzZXQ4OwotCXUxNiBsZW5ndGg4OwotCXUxNiBmbGFnczsKLQl1NjQgdHJhbnNhY3Rpb25pZDsKLQl1MzIgcmVzZXJ2ZWQ7Ci0JdTMyIHJhbmdlY291bnQ7Ci0Jc3RydWN0IGh2X3BhZ2VfYnVmZmVyIHJhbmdlW01BWF9QQUdFX0JVRkZFUl9DT1VOVF07Ci19IF9fcGFja2VkOwotCi0vKiBUaGUgZm9ybWF0IG11c3QgYmUgdGhlIHNhbWUgYXMgc3RydWN0IHZtZGF0YV9ncGFfZGlyZWN0ICovCi1zdHJ1Y3Qgdm1idXNfY2hhbm5lbF9wYWNrZXRfbXVsdGlwYWdlX2J1ZmZlciB7Ci0JdTE2IHR5cGU7Ci0JdTE2IGRhdGFvZmZzZXQ4OwotCXUxNiBsZW5ndGg4OwotCXUxNiBmbGFnczsKLQl1NjQgdHJhbnNhY3Rpb25pZDsKLQl1MzIgcmVzZXJ2ZWQ7Ci0JdTMyIHJhbmdlY291bnQ7CQkvKiBBbHdheXMgMSBpbiB0aGlzIGNhc2UgKi8KLQlzdHJ1Y3QgaHZfbXVsdGlwYWdlX2J1ZmZlciByYW5nZTsKLX0gX19wYWNrZWQ7Ci0KLQotZXh0ZXJuIGludCB2bWJ1c19vcGVuKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLAotCQkJICAgIHUzMiBzZW5kX3JpbmdidWZmZXJzaXplLAotCQkJICAgIHUzMiByZWN2X3JpbmdidWZmZXJzaXplLAotCQkJICAgIHZvaWQgKnVzZXJkYXRhLAotCQkJICAgIHUzMiB1c2VyZGF0YWxlbiwKLQkJCSAgICB2b2lkKCpvbmNoYW5uZWxfY2FsbGJhY2spKHZvaWQgKmNvbnRleHQpLAotCQkJICAgIHZvaWQgKmNvbnRleHQpOwotCi1leHRlcm4gdm9pZCB2bWJ1c19jbG9zZShzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCk7Ci0KLWV4dGVybiBpbnQgdm1idXNfc2VuZHBhY2tldChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCwKLQkJCQkgIGNvbnN0IHZvaWQgKmJ1ZmZlciwKLQkJCQkgIHUzMiBidWZmZXJMZW4sCi0JCQkJICB1NjQgcmVxdWVzdGlkLAotCQkJCSAgZW51bSB2bWJ1c19wYWNrZXRfdHlwZSB0eXBlLAotCQkJCSAgdTMyIGZsYWdzKTsKLQotZXh0ZXJuIGludCB2bWJ1c19zZW5kcGFja2V0X3BhZ2VidWZmZXIoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsCi0JCQkJCSAgICBzdHJ1Y3QgaHZfcGFnZV9idWZmZXIgcGFnZWJ1ZmZlcnNbXSwKLQkJCQkJICAgIHUzMiBwYWdlY291bnQsCi0JCQkJCSAgICB2b2lkICpidWZmZXIsCi0JCQkJCSAgICB1MzIgYnVmZmVybGVuLAotCQkJCQkgICAgdTY0IHJlcXVlc3RpZCk7Ci0KLWV4dGVybiBpbnQgdm1idXNfc2VuZHBhY2tldF9tdWx0aXBhZ2VidWZmZXIoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsCi0JCQkJCXN0cnVjdCBodl9tdWx0aXBhZ2VfYnVmZmVyICptcGIsCi0JCQkJCXZvaWQgKmJ1ZmZlciwKLQkJCQkJdTMyIGJ1ZmZlcmxlbiwKLQkJCQkJdTY0IHJlcXVlc3RpZCk7Ci0KLWV4dGVybiBpbnQgdm1idXNfZXN0YWJsaXNoX2dwYWRsKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLAotCQkJCSAgICAgIHZvaWQgKmtidWZmZXIsCi0JCQkJICAgICAgdTMyIHNpemUsCi0JCQkJICAgICAgdTMyICpncGFkbF9oYW5kbGUpOwotCi1leHRlcm4gaW50IHZtYnVzX3RlYXJkb3duX2dwYWRsKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLAotCQkJCSAgICAgdTMyIGdwYWRsX2hhbmRsZSk7Ci0KLWV4dGVybiBpbnQgdm1idXNfcmVjdnBhY2tldChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCwKLQkJCQkgIHZvaWQgKmJ1ZmZlciwKLQkJCQkgIHUzMiBidWZmZXJsZW4sCi0JCQkJICB1MzIgKmJ1ZmZlcl9hY3R1YWxfbGVuLAotCQkJCSAgdTY0ICpyZXF1ZXN0aWQpOwotCi1leHRlcm4gaW50IHZtYnVzX3JlY3ZwYWNrZXRfcmF3KHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLAotCQkJCSAgICAgdm9pZCAqYnVmZmVyLAotCQkJCSAgICAgdTMyIGJ1ZmZlcmxlbiwKLQkJCQkgICAgIHUzMiAqYnVmZmVyX2FjdHVhbF9sZW4sCi0JCQkJICAgICB1NjQgKnJlcXVlc3RpZCk7Ci0KLWV4dGVybiB2b2lkIHZtYnVzX29uY2hhbm5lbF9ldmVudChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCk7Ci0KLWV4dGVybiB2b2lkIHZtYnVzX2dldF9kZWJ1Z19pbmZvKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLAotCQkJCSAgICAgc3RydWN0IHZtYnVzX2NoYW5uZWxfZGVidWdfaW5mbyAqZGVidWcpOwotCi1leHRlcm4gdm9pZCB2bWJ1c19vbnRpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci0KLSNlbmRpZiAvKiBfQ0hBTk5FTF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L2NoYW5uZWxfbWdtdC5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L2NoYW5uZWxfbWdtdC5jCmluZGV4IDA2YjU3MzIuLjk1N2Q2MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9jaGFubmVsX21nbXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvY2hhbm5lbF9tZ210LmMKQEAgLTE4LDYgKzE4LDggQEAKICAqICAgSGFpeWFuZyBaaGFuZyA8aGFpeWFuZ3pAbWljcm9zb2Z0LmNvbT4KICAqICAgSGFuayBKYW5zc2VuICA8aGphbnNzZW5AbWljcm9zb2Z0LmNvbT4KICAqLworI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CkBAIC0yNiwyMSArMjgsMjAgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgotI2luY2x1ZGUgImh2X2FwaS5oIgotI2luY2x1ZGUgImxvZ2dpbmcuaCIKLSNpbmNsdWRlICJ2bWJ1c19wcml2YXRlLmgiCi0jaW5jbHVkZSAidXRpbHMuaCIKKworI2luY2x1ZGUgImh5cGVydi5oIgorI2luY2x1ZGUgImh5cGVydl92bWJ1cy5oIgogCiBzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9tZXNzYWdlX3RhYmxlX2VudHJ5IHsKLQllbnVtIHZtYnVzX2NoYW5uZWxfbWVzc2FnZV90eXBlIG1lc3NhZ2VUeXBlOwotCXZvaWQgKCptZXNzYWdlSGFuZGxlcikoc3RydWN0IHZtYnVzX2NoYW5uZWxfbWVzc2FnZV9oZWFkZXIgKm1zZyk7CisJZW51bSB2bWJ1c19jaGFubmVsX21lc3NhZ2VfdHlwZSBtZXNzYWdlX3R5cGU7CisJdm9pZCAoKm1lc3NhZ2VfaGFuZGxlcikoc3RydWN0IHZtYnVzX2NoYW5uZWxfbWVzc2FnZV9oZWFkZXIgKm1zZyk7CiB9OwogCiAjZGVmaW5lIE1BWF9NU0dfVFlQRVMgICAgICAgICAgICAgICAgICAgIDQKICNkZWZpbmUgTUFYX05VTV9ERVZJQ0VfQ0xBU1NFU19TVVBQT1JURUQgOAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGh2X2d1aWQKLQlnU3VwcG9ydGVkRGV2aWNlQ2xhc3Nlc1tNQVhfTlVNX0RFVklDRV9DTEFTU0VTX1NVUFBPUlRFRF0gPSB7CisJc3VwcG9ydGVkX2RldmljZV9jbGFzc2VzW01BWF9OVU1fREVWSUNFX0NMQVNTRVNfU1VQUE9SVEVEXSA9IHsKIAkvKiB7YmE2MTYzZDktMDRhMS00ZDI5LWI2MDUtNzJlMmZmYjFkYzdmfSAqLwogCS8qIFN0b3JhZ2UgLSBTQ1NJICovCiAJewpAQCAtMTgwLDYgKzE4MSwyNCBAQAogCXN0cnVjdCBpY21zZ19oZHIgKmljbXNnaGRycDsKIAlzdHJ1Y3QgaWNtc2dfbmVnb3RpYXRlICpuZWdvcCA9IE5VTEw7CiAKKwlpZiAoY2hhbm5lbC0+dXRpbF9pbmRleCA+PSAwKSB7CisJCS8qCisJCSAqIFRoaXMgaXMgYSBwcm9wZXJseSBpbml0aWFsaXplZCB1dGlsIGNoYW5uZWwuCisJCSAqIFJvdXRlIHRoaXMgY2FsbGJhY2sgYXBwcm9wcmlhdGVseSBhbmQgc2V0dXAgc3RhdGUKKwkJICogc28gdGhhdCB3ZSBkb24ndCBuZWVkIHRvIHJlcm91dGUgYWdhaW4uCisJCSAqLworCQlpZiAoaHZfY2JfdXRpbHNbY2hhbm5lbC0+dXRpbF9pbmRleF0uY2FsbGJhY2sgIT0gTlVMTCkgeworCQkJLyoKKwkJCSAqIFRoZSB1dGlsIGRyaXZlciBoYXMgZXN0YWJsaXNoZWQgYSBoYW5kbGVyIGZvcgorCQkJICogdGhpcyBzZXJ2aWNlOyBkbyB0aGUgbWFnaWMuCisJCQkgKi8KKwkJCWNoYW5uZWwtPm9uY2hhbm5lbF9jYWxsYmFjayA9CisJCQlodl9jYl91dGlsc1tjaGFubmVsLT51dGlsX2luZGV4XS5jYWxsYmFjazsKKwkJCShodl9jYl91dGlsc1tjaGFubmVsLT51dGlsX2luZGV4XS5jYWxsYmFjaykoY2hhbm5lbCk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKIAlidWZsZW4gPSBQQUdFX1NJWkU7CiAJYnVmID0ga21hbGxvYyhidWZsZW4sIEdGUF9BVE9NSUMpOwogCkBAIC0yMTYsNyArMjM1LDYgQEAKIAkJCTB4MzEsIDB4NjAsIDB4MEIsIDBYMEUsIDB4MTMsIDB4NTIsIDB4MzQsIDB4NDksCiAJCQkweDgxLCAweDhCLCAweDM4LCAwWEQ5LCAweDBDLCAweEVELCAweDM5LCAweERCCiAJCX0sCi0JCS5jYWxsYmFjayA9IGNobl9jYl9uZWdvdGlhdGUsCiAJCS5sb2dfbXNnID0gIlNodXRkb3duIGNoYW5uZWwgZnVuY3Rpb25hbGl0eSBpbml0aWFsaXplZCIKIAl9LAogCkBAIC0yMjgsNyArMjQ2LDYgQEAKIAkJCTB4MzAsIDB4ZTYsIDB4MjcsIDB4OTUsIDB4YWUsIDB4ZDAsIDB4N2IsIDB4NDksCiAJCQkweGFkLCAweGNlLCAweGU4LCAweDBhLCAweGIwLCAweDE3LCAweDVjLCAweGFmCiAJCX0sCi0JCS5jYWxsYmFjayA9IGNobl9jYl9uZWdvdGlhdGUsCiAJCS5sb2dfbXNnID0gIlRpbWVzeW5jIGNoYW5uZWwgZnVuY3Rpb25hbGl0eSBpbml0aWFsaXplZCIKIAl9LAogCS8qIHs1NzE2NGYzOS05MTE1LTRlNzgtYWI1NS0zODJmM2JkNTQyMmR9ICovCkBAIC0yMzksNyArMjU2LDYgQEAKIAkJCTB4MzksIDB4NGYsIDB4MTYsIDB4NTcsIDB4MTUsIDB4OTEsIDB4NzgsIDB4NGUsCiAJCQkweGFiLCAweDU1LCAweDM4LCAweDJmLCAweDNiLCAweGQ1LCAweDQyLCAweDJkCiAJCX0sCi0JCS5jYWxsYmFjayA9IGNobl9jYl9uZWdvdGlhdGUsCiAJCS5sb2dfbXNnID0gIkhlYXJ0YmVhdCBjaGFubmVsIGZ1bmN0aW9uYWxpdHkgaW5pdGlhbGl6ZWQiCiAJfSwKIAkvKiB7QTlBMEY0RTctNUE0NS00ZDk2LUI4MjctOEE4NDFFOEMwM0U2fSAqLwpAQCAtMjQ5LDcgKzI2NSw2IEBACiAJCQkweGU3LCAweGY0LCAweGEwLCAweGE5LCAweDQ1LCAweDVhLCAweDk2LCAweDRkLAogCQkJMHhiOCwgMHgyNywgMHg4YSwgMHg4NCwgMHgxZSwgMHg4YywgMHgzLCAgMHhlNgogCQl9LAotCQkuY2FsbGJhY2sgPSBjaG5fY2JfbmVnb3RpYXRlLAogCQkubG9nX21zZyA9ICJLVlAgY2hhbm5lbCBmdW5jdGlvbmFsaXR5IGluaXRpYWxpemVkIgogCX0sCiB9OwpAQCAtMjkwLDkgKzMwNSw3IEBACiAJCQkJCQkgICAgIHN0cnVjdCB2bWJ1c19jaGFubmVsLAogCQkJCQkJICAgICB3b3JrKTsKIAotCURQUklOVF9EQkcoVk1CVVMsICJyZWxlYXNpbmcgY2hhbm5lbCAoJXApIiwgY2hhbm5lbCk7CiAJZGVzdHJveV93b3JrcXVldWUoY2hhbm5lbC0+Y29udHJvbHdxKTsKLQlEUFJJTlRfREJHKFZNQlVTLCAiY2hhbm5lbCByZWxlYXNlZCAoJXApIiwgY2hhbm5lbCk7CiAKIAlrZnJlZShjaGFubmVsKTsKIH0KQEAgLTMxNCwyMiArMzI3LDYgQEAKIH0KIAogCi1ERUNMQVJFX0NPTVBMRVRJT04oaHZfY2hhbm5lbF9yZWFkeSk7Ci0KLS8qCi0gKiBDb3VudCBpbml0aWFsaXplZCBjaGFubmVscywgYW5kIGVuc3VyZSBhbGwgY2hhbm5lbHMgYXJlIHJlYWR5IHdoZW4gaHZfdm1idXMKLSAqIG1vZHVsZSBsb2FkaW5nIGNvbXBsZXRlcy4KLSAqLwotc3RhdGljIHZvaWQgY291bnRfaHZfY2hhbm5lbCh2b2lkKQotewotCXN0YXRpYyBpbnQgY291bnRlcjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnZtYnVzX2Nvbm5lY3Rpb24uY2hhbm5lbF9sb2NrLCBmbGFncyk7Ci0JaWYgKCsrY291bnRlciA9PSBNQVhfTVNHX1RZUEVTKQotCQljb21wbGV0ZSgmaHZfY2hhbm5lbF9yZWFkeSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdm1idXNfY29ubmVjdGlvbi5jaGFubmVsX2xvY2ssIGZsYWdzKTsKLX0KIAogLyoKICAqIHZtYnVzX3Byb2Nlc3NfcmVzY2luZF9vZmZlciAtCkBAIC0zODQsOCArMzgxLDYgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2bWJ1c19jb25uZWN0aW9uLmNoYW5uZWxfbG9jaywgZmxhZ3MpOwogCiAJaWYgKCFmbmV3KSB7Ci0JCURQUklOVF9EQkcoVk1CVVMsICJJZ25vcmluZyBkdXBsaWNhdGUgb2ZmZXIgZm9yIHJlbGlkICglZCkiLAotCQkJICAgbmV3Y2hhbm5lbC0+b2ZmZXJtc2cuY2hpbGRfcmVsaWQpOwogCQlmcmVlX2NoYW5uZWwobmV3Y2hhbm5lbCk7CiAJCXJldHVybjsKIAl9CkBAIC00MDAsOSArMzk1LDYgQEAKIAkJJm5ld2NoYW5uZWwtPm9mZmVybXNnLm9mZmVyLmlmX2luc3RhbmNlLAogCQluZXdjaGFubmVsKTsKIAotCURQUklOVF9EQkcoVk1CVVMsICJjaGlsZCBkZXZpY2Ugb2JqZWN0IGFsbG9jYXRlZCAtICVwIiwKLQkJICAgbmV3Y2hhbm5lbC0+ZGV2aWNlX29iaik7Ci0KIAkvKgogCSAqIEFkZCB0aGUgbmV3IGRldmljZSB0byB0aGUgYnVzLiBUaGlzIHdpbGwga2ljayBvZmYgZGV2aWNlLWRyaXZlcgogCSAqIGJpbmRpbmcgd2hpY2ggZXZlbnR1YWxseSBpbnZva2VzIHRoZSBkZXZpY2UgZHJpdmVyJ3MgQWRkRGV2aWNlKCkKQEAgLTQxMCw4ICs0MDIsNyBAQAogCSAqLwogCXJldCA9IHZtYnVzX2NoaWxkX2RldmljZV9yZWdpc3RlcihuZXdjaGFubmVsLT5kZXZpY2Vfb2JqKTsKIAlpZiAocmV0ICE9IDApIHsKLQkJRFBSSU5UX0VSUihWTUJVUywKLQkJCSAgICJ1bmFibGUgdG8gYWRkIGNoaWxkIGRldmljZSBvYmplY3QgKHJlbGlkICVkKSIsCisJCXByX2VycigidW5hYmxlIHRvIGFkZCBjaGlsZCBkZXZpY2Ugb2JqZWN0IChyZWxpZCAlZClcbiIsCiAJCQkgICBuZXdjaGFubmVsLT5vZmZlcm1zZy5jaGlsZF9yZWxpZCk7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnZtYnVzX2Nvbm5lY3Rpb24uY2hhbm5lbF9sb2NrLCBmbGFncyk7CkBAIC00MjYsNiArNDE3LDcgQEAKIAkJICogY2FuIGNsZWFudXAgcHJvcGVybHkKIAkJICovCiAJCW5ld2NoYW5uZWwtPnN0YXRlID0gQ0hBTk5FTF9PUEVOX1NUQVRFOworCQluZXdjaGFubmVsLT51dGlsX2luZGV4ID0gLTE7IC8qIEludmFsaWQgaW5kZXggKi8KIAogCQkvKiBPcGVuIElDIGNoYW5uZWxzICovCiAJCWZvciAoY250ID0gMDsgY250IDwgTUFYX01TR19UWVBFUzsgY250KyspIHsKQEAgLTQzNCwxMiArNDI2LDEzIEBACiAJCQkJICAgc2l6ZW9mKHN0cnVjdCBodl9ndWlkKSkgPT0gMCAmJgogCQkJCXZtYnVzX29wZW4obmV3Y2hhbm5lbCwgMiAqIFBBR0VfU0laRSwKIAkJCQkJCSAyICogUEFHRV9TSVpFLCBOVUxMLCAwLAotCQkJCQkJIGh2X2NiX3V0aWxzW2NudF0uY2FsbGJhY2ssCisJCQkJCQkgY2huX2NiX25lZ290aWF0ZSwKIAkJCQkJCSBuZXdjaGFubmVsKSA9PSAwKSB7CiAJCQkJaHZfY2JfdXRpbHNbY250XS5jaGFubmVsID0gbmV3Y2hhbm5lbDsKLQkJCQlEUFJJTlRfSU5GTyhWTUJVUywgIiVzIiwKLQkJCQkJCWh2X2NiX3V0aWxzW2NudF0ubG9nX21zZyk7Ci0JCQkJY291bnRfaHZfY2hhbm5lbCgpOworCQkJCW5ld2NoYW5uZWwtPnV0aWxfaW5kZXggPSBjbnQ7CisKKwkJCQlwcl9pbmZvKCIlc1xuIiwgaHZfY2JfdXRpbHNbY250XS5sb2dfbXNnKTsKKwogCQkJfQogCQl9CiAJfQpAQCAtNDY0LDU1ICs0NTcsMjYgQEAKIAlvZmZlciA9IChzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9vZmZlcl9jaGFubmVsICopaGRyOwogCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVNX0RFVklDRV9DTEFTU0VTX1NVUFBPUlRFRDsgaSsrKSB7CiAJCWlmIChtZW1jbXAoJm9mZmVyLT5vZmZlci5pZl90eXBlLAotCQkgICAgJmdTdXBwb3J0ZWREZXZpY2VDbGFzc2VzW2ldLCBzaXplb2Yoc3RydWN0IGh2X2d1aWQpKSA9PSAwKSB7CisJCQkmc3VwcG9ydGVkX2RldmljZV9jbGFzc2VzW2ldLAorCQkJc2l6ZW9mKHN0cnVjdCBodl9ndWlkKSkgPT0gMCkgewogCQkJZnN1cHBvcnRlZCA9IDE7CiAJCQlicmVhazsKIAkJfQogCX0KIAotCWlmICghZnN1cHBvcnRlZCkgewotCQlEUFJJTlRfREJHKFZNQlVTLCAiSWdub3JpbmcgY2hhbm5lbCBvZmZlciBub3RpZmljYXRpb24gZm9yICIKLQkJCSAgICJjaGlsZCByZWxpZCAlZCIsIG9mZmVyLT5jaGlsZF9yZWxpZCk7CisJaWYgKCFmc3VwcG9ydGVkKQogCQlyZXR1cm47Ci0JfQogCiAJZ3VpZHR5cGUgPSAmb2ZmZXItPm9mZmVyLmlmX3R5cGU7CiAJZ3VpZGluc3RhbmNlID0gJm9mZmVyLT5vZmZlci5pZl9pbnN0YW5jZTsKIAotCURQUklOVF9JTkZPKFZNQlVTLCAiQ2hhbm5lbCBvZmZlciBub3RpZmljYXRpb24gLSAiCi0JCSAgICAiY2hpbGQgcmVsaWQgJWQgbW9uaXRvciBpZCAlZCBhbGxvY2F0ZWQgJWQsICIKLQkJICAgICJ0eXBlIHslMDJ4JTAyeCUwMnglMDJ4LSUwMnglMDJ4LSUwMnglMDJ4LSIKLQkJICAgICIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeH0gIgotCQkgICAgImluc3RhbmNlIHslMDJ4JTAyeCUwMnglMDJ4LSUwMnglMDJ4LSUwMnglMDJ4LSIKLQkJICAgICIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeH0iLAotCQkgICAgb2ZmZXItPmNoaWxkX3JlbGlkLCBvZmZlci0+bW9uaXRvcmlkLAotCQkgICAgb2ZmZXItPm1vbml0b3JfYWxsb2NhdGVkLAotCQkgICAgZ3VpZHR5cGUtPmRhdGFbM10sIGd1aWR0eXBlLT5kYXRhWzJdLAotCQkgICAgZ3VpZHR5cGUtPmRhdGFbMV0sIGd1aWR0eXBlLT5kYXRhWzBdLAotCQkgICAgZ3VpZHR5cGUtPmRhdGFbNV0sIGd1aWR0eXBlLT5kYXRhWzRdLAotCQkgICAgZ3VpZHR5cGUtPmRhdGFbN10sIGd1aWR0eXBlLT5kYXRhWzZdLAotCQkgICAgZ3VpZHR5cGUtPmRhdGFbOF0sIGd1aWR0eXBlLT5kYXRhWzldLAotCQkgICAgZ3VpZHR5cGUtPmRhdGFbMTBdLCBndWlkdHlwZS0+ZGF0YVsxMV0sCi0JCSAgICBndWlkdHlwZS0+ZGF0YVsxMl0sIGd1aWR0eXBlLT5kYXRhWzEzXSwKLQkJICAgIGd1aWR0eXBlLT5kYXRhWzE0XSwgZ3VpZHR5cGUtPmRhdGFbMTVdLAotCQkgICAgZ3VpZGluc3RhbmNlLT5kYXRhWzNdLCBndWlkaW5zdGFuY2UtPmRhdGFbMl0sCi0JCSAgICBndWlkaW5zdGFuY2UtPmRhdGFbMV0sIGd1aWRpbnN0YW5jZS0+ZGF0YVswXSwKLQkJICAgIGd1aWRpbnN0YW5jZS0+ZGF0YVs1XSwgZ3VpZGluc3RhbmNlLT5kYXRhWzRdLAotCQkgICAgZ3VpZGluc3RhbmNlLT5kYXRhWzddLCBndWlkaW5zdGFuY2UtPmRhdGFbNl0sCi0JCSAgICBndWlkaW5zdGFuY2UtPmRhdGFbOF0sIGd1aWRpbnN0YW5jZS0+ZGF0YVs5XSwKLQkJICAgIGd1aWRpbnN0YW5jZS0+ZGF0YVsxMF0sIGd1aWRpbnN0YW5jZS0+ZGF0YVsxMV0sCi0JCSAgICBndWlkaW5zdGFuY2UtPmRhdGFbMTJdLCBndWlkaW5zdGFuY2UtPmRhdGFbMTNdLAotCQkgICAgZ3VpZGluc3RhbmNlLT5kYXRhWzE0XSwgZ3VpZGluc3RhbmNlLT5kYXRhWzE1XSk7Ci0KIAkvKiBBbGxvY2F0ZSB0aGUgY2hhbm5lbCBvYmplY3QgYW5kIHNhdmUgdGhpcyBvZmZlci4gKi8KIAluZXdjaGFubmVsID0gYWxsb2NfY2hhbm5lbCgpOwogCWlmICghbmV3Y2hhbm5lbCkgewotCQlEUFJJTlRfRVJSKFZNQlVTLCAidW5hYmxlIHRvIGFsbG9jYXRlIGNoYW5uZWwgb2JqZWN0Iik7CisJCXByX2VycigiVW5hYmxlIHRvIGFsbG9jYXRlIGNoYW5uZWwgb2JqZWN0XG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCURQUklOVF9EQkcoVk1CVVMsICJjaGFubmVsIG9iamVjdCBhbGxvY2F0ZWQgLSAlcCIsIG5ld2NoYW5uZWwpOwotCiAJbWVtY3B5KCZuZXdjaGFubmVsLT5vZmZlcm1zZywgb2ZmZXIsCiAJICAgICAgIHNpemVvZihzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9vZmZlcl9jaGFubmVsKSk7CiAJbmV3Y2hhbm5lbC0+bW9uaXRvcl9ncnAgPSAodTgpb2ZmZXItPm1vbml0b3JpZCAvIDMyOwpAQCAtNTM1LDExICs0OTksMTAgQEAKIAogCXJlc2NpbmQgPSAoc3RydWN0IHZtYnVzX2NoYW5uZWxfcmVzY2luZF9vZmZlciAqKWhkcjsKIAljaGFubmVsID0gcmVsaWQyY2hhbm5lbChyZXNjaW5kLT5jaGlsZF9yZWxpZCk7Ci0JaWYgKGNoYW5uZWwgPT0gTlVMTCkgewotCQlEUFJJTlRfREJHKFZNQlVTLCAiY2hhbm5lbCBub3QgZm91bmQgZm9yIHJlbElkICVkIiwKLQkJCSAgIHJlc2NpbmQtPmNoaWxkX3JlbGlkKTsKKworCWlmIChjaGFubmVsID09IE5VTEwpCisJCS8qIEp1c3QgcmV0dXJuIGhlcmUsIG5vIGNoYW5uZWwgZm91bmQgKi8KIAkJcmV0dXJuOwotCX0KIAogCS8qIHdvcmsgaXMgaW5pdGlhbGl6ZWQgZm9yIHZtYnVzX3Byb2Nlc3NfcmVzY2luZF9vZmZlcigpIGZyb20KIAkgKiB2bWJ1c19wcm9jZXNzX29mZmVyKCkgd2hlcmUgdGhlIGNoYW5uZWwgZ290IGNyZWF0ZWQgKi8KQEAgLTU3Myw3ICs1MzYsNiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlyZXN1bHQgPSAoc3RydWN0IHZtYnVzX2NoYW5uZWxfb3Blbl9yZXN1bHQgKiloZHI7Ci0JRFBSSU5UX0RCRyhWTUJVUywgInZtYnVzIG9wZW4gcmVzdWx0IC0gJWQiLCByZXN1bHQtPnN0YXR1cyk7CiAKIAkvKgogCSAqIEZpbmQgdGhlIG9wZW4gbXNnLCBjb3B5IHRoZSByZXN1bHQgYW5kIHNpZ25hbC91bmJsb2NrIHRoZSB3YWl0IGV2ZW50CkBAIC01OTIsOSArNTU0LDkgQEAKIAkJCSAgICBvcGVubXNnLT5vcGVuaWQgPT0gcmVzdWx0LT5vcGVuaWQpIHsKIAkJCQltZW1jcHkoJm1zZ2luZm8tPnJlc3BvbnNlLm9wZW5fcmVzdWx0LAogCQkJCSAgICAgICByZXN1bHQsCi0JCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9vcGVuX3Jlc3VsdCkpOwotCQkJCW1zZ2luZm8tPndhaXRfY29uZGl0aW9uID0gMTsKLQkJCQl3YWtlX3VwKCZtc2dpbmZvLT53YWl0ZXZlbnQpOworCQkJCSAgICAgICBzaXplb2YoCisJCQkJCXN0cnVjdCB2bWJ1c19jaGFubmVsX29wZW5fcmVzdWx0KSk7CisJCQkJY29tcGxldGUoJm1zZ2luZm8tPndhaXRldmVudCk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KQEAgLTYxOCw4ICs1ODAsNiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlncGFkbGNyZWF0ZWQgPSAoc3RydWN0IHZtYnVzX2NoYW5uZWxfZ3BhZGxfY3JlYXRlZCAqKWhkcjsKLQlEUFJJTlRfREJHKFZNQlVTLCAidm1idXMgZ3BhZGwgY3JlYXRlZCByZXN1bHQgLSAlZCIsCi0JCSAgIGdwYWRsY3JlYXRlZC0+Y3JlYXRpb25fc3RhdHVzKTsKIAogCS8qCiAJICogRmluZCB0aGUgZXN0YWJsaXNoIG1zZywgY29weSB0aGUgcmVzdWx0IGFuZCBzaWduYWwvdW5ibG9jayB0aGUgd2FpdApAQCAtNjQxLDkgKzYwMSw5IEBACiAJCQkgICAgKGdwYWRsY3JlYXRlZC0+Z3BhZGwgPT0gZ3BhZGxoZWFkZXItPmdwYWRsKSkgewogCQkJCW1lbWNweSgmbXNnaW5mby0+cmVzcG9uc2UuZ3BhZGxfY3JlYXRlZCwKIAkJCQkgICAgICAgZ3BhZGxjcmVhdGVkLAotCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHZtYnVzX2NoYW5uZWxfZ3BhZGxfY3JlYXRlZCkpOwotCQkJCW1zZ2luZm8tPndhaXRfY29uZGl0aW9uID0gMTsKLQkJCQl3YWtlX3VwKCZtc2dpbmZvLT53YWl0ZXZlbnQpOworCQkJCSAgICAgICBzaXplb2YoCisJCQkJCXN0cnVjdCB2bWJ1c19jaGFubmVsX2dwYWRsX2NyZWF0ZWQpKTsKKwkJCQljb21wbGV0ZSgmbXNnaW5mby0+d2FpdGV2ZW50KTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpAQCAtNjg2LDkgKzY0Niw5IEBACiAJCQlpZiAoZ3BhZGxfdG9ybmRvd24tPmdwYWRsID09IGdwYWRsX3RlYXJkb3duLT5ncGFkbCkgewogCQkJCW1lbWNweSgmbXNnaW5mby0+cmVzcG9uc2UuZ3BhZGxfdG9ybmRvd24sCiAJCQkJICAgICAgIGdwYWRsX3Rvcm5kb3duLAotCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHZtYnVzX2NoYW5uZWxfZ3BhZGxfdG9ybmRvd24pKTsKLQkJCQltc2dpbmZvLT53YWl0X2NvbmRpdGlvbiA9IDE7Ci0JCQkJd2FrZV91cCgmbXNnaW5mby0+d2FpdGV2ZW50KTsKKwkJCQkgICAgICAgc2l6ZW9mKAorCQkJCQlzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9ncGFkbF90b3JuZG93bikpOworCQkJCWNvbXBsZXRlKCZtc2dpbmZvLT53YWl0ZXZlbnQpOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CkBAIC03MjcsOCArNjg3LDcgQEAKIAkJCW1lbWNweSgmbXNnaW5mby0+cmVzcG9uc2UudmVyc2lvbl9yZXNwb25zZSwKIAkJCSAgICAgIHZlcnNpb25fcmVzcG9uc2UsCiAJCQkgICAgICBzaXplb2Yoc3RydWN0IHZtYnVzX2NoYW5uZWxfdmVyc2lvbl9yZXNwb25zZSkpOwotCQkJbXNnaW5mby0+d2FpdF9jb25kaXRpb24gPSAxOwotCQkJd2FrZV91cCgmbXNnaW5mby0+d2FpdGV2ZW50KTsKKwkJCWNvbXBsZXRlKCZtc2dpbmZvLT53YWl0ZXZlbnQpOwogCQl9CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZtYnVzX2Nvbm5lY3Rpb24uY2hhbm5lbG1zZ19sb2NrLCBmbGFncyk7CkBAIC03MzYsNyArNjk1LDcgQEAKIAogLyogQ2hhbm5lbCBtZXNzYWdlIGRpc3BhdGNoIHRhYmxlICovCiBzdGF0aWMgc3RydWN0IHZtYnVzX2NoYW5uZWxfbWVzc2FnZV90YWJsZV9lbnRyeQotCWdDaGFubmVsTWVzc2FnZVRhYmxlW0NIQU5ORUxNU0dfQ09VTlRdID0geworCWNoYW5uZWxfbWVzc2FnZV90YWJsZVtDSEFOTkVMTVNHX0NPVU5UXSA9IHsKIAl7Q0hBTk5FTE1TR19JTlZBTElELAkJCU5VTEx9LAogCXtDSEFOTkVMTVNHX09GRkVSQ0hBTk5FTCwJCXZtYnVzX29ub2ZmZXJ9LAogCXtDSEFOTkVMTVNHX1JFU0NJTkRfQ0hBTk5FTE9GRkVSLAl2bWJ1c19vbm9mZmVyX3Jlc2NpbmR9LApAQCAtNzcwLDIyICs3MjksMTggQEAKIAloZHIgPSAoc3RydWN0IHZtYnVzX2NoYW5uZWxfbWVzc2FnZV9oZWFkZXIgKiltc2ctPnUucGF5bG9hZDsKIAlzaXplID0gbXNnLT5oZWFkZXIucGF5bG9hZF9zaXplOwogCi0JRFBSSU5UX0RCRyhWTUJVUywgIm1lc3NhZ2UgdHlwZSAlZCBzaXplICVkIiwgaGRyLT5tc2d0eXBlLCBzaXplKTsKLQogCWlmIChoZHItPm1zZ3R5cGUgPj0gQ0hBTk5FTE1TR19DT1VOVCkgewotCQlEUFJJTlRfRVJSKFZNQlVTLAotCQkJICAgIlJlY2VpdmVkIGludmFsaWQgY2hhbm5lbCBtZXNzYWdlIHR5cGUgJWQgc2l6ZSAlZCIsCisJCXByX2VycigiUmVjZWl2ZWQgaW52YWxpZCBjaGFubmVsIG1lc3NhZ2UgdHlwZSAlZCBzaXplICVkXG4iLAogCQkJICAgaGRyLT5tc2d0eXBlLCBzaXplKTsKIAkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoIiIsIERVTVBfUFJFRklYX05PTkUsCiAJCQkJICAgICAodW5zaWduZWQgY2hhciAqKW1zZy0+dS5wYXlsb2FkLCBzaXplKTsKIAkJcmV0dXJuOwogCX0KIAotCWlmIChnQ2hhbm5lbE1lc3NhZ2VUYWJsZVtoZHItPm1zZ3R5cGVdLm1lc3NhZ2VIYW5kbGVyKQotCQlnQ2hhbm5lbE1lc3NhZ2VUYWJsZVtoZHItPm1zZ3R5cGVdLm1lc3NhZ2VIYW5kbGVyKGhkcik7CisJaWYgKGNoYW5uZWxfbWVzc2FnZV90YWJsZVtoZHItPm1zZ3R5cGVdLm1lc3NhZ2VfaGFuZGxlcikKKwkJY2hhbm5lbF9tZXNzYWdlX3RhYmxlW2hkci0+bXNndHlwZV0ubWVzc2FnZV9oYW5kbGVyKGhkcik7CiAJZWxzZQotCQlEUFJJTlRfRVJSKFZNQlVTLCAiVW5oYW5kbGVkIGNoYW5uZWwgbWVzc2FnZSB0eXBlICVkIiwKLQkJCSAgIGhkci0+bXNndHlwZSk7CisJCXByX2VycigiVW5oYW5kbGVkIGNoYW5uZWwgbWVzc2FnZSB0eXBlICVkXG4iLCBoZHItPm1zZ3R5cGUpOwogfQogCiAvKgpAQCAtNzk1LDcgKzc1MCw3IEBACiB7CiAJc3RydWN0IHZtYnVzX2NoYW5uZWxfbWVzc2FnZV9oZWFkZXIgKm1zZzsKIAlzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9tc2dpbmZvICptc2dpbmZvOwotCWludCByZXQ7CisJaW50IHJldCwgdDsKIAogCW1zZ2luZm8gPSBrbWFsbG9jKHNpemVvZigqbXNnaW5mbykgKwogCQkJICBzaXplb2Yoc3RydWN0IHZtYnVzX2NoYW5uZWxfbWVzc2FnZV9oZWFkZXIpLApAQCAtODAzLDcgKzc1OCw3IEBACiAJaWYgKCFtc2dpbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm1zZ2luZm8tPndhaXRldmVudCk7CisJaW5pdF9jb21wbGV0aW9uKCZtc2dpbmZvLT53YWl0ZXZlbnQpOwogCiAJbXNnID0gKHN0cnVjdCB2bWJ1c19jaGFubmVsX21lc3NhZ2VfaGVhZGVyICopbXNnaW5mby0+bXNnOwogCkBAIC04MTMsMTUgKzc2OCwxMyBAQAogCXJldCA9IHZtYnVzX3Bvc3RfbXNnKG1zZywKIAkJCSAgICAgICBzaXplb2Yoc3RydWN0IHZtYnVzX2NoYW5uZWxfbWVzc2FnZV9oZWFkZXIpKTsKIAlpZiAocmV0ICE9IDApIHsKLQkJRFBSSU5UX0VSUihWTUJVUywgIlVuYWJsZSB0byByZXF1ZXN0IG9mZmVycyAtICVkIiwgcmV0KTsKKwkJcHJfZXJyKCJVbmFibGUgdG8gcmVxdWVzdCBvZmZlcnMgLSAlZFxuIiwgcmV0KTsKIAogCQlnb3RvIGNsZWFudXA7CiAJfQogCi0JbXNnaW5mby0+d2FpdF9jb25kaXRpb24gPSAwOwotCXdhaXRfZXZlbnRfdGltZW91dChtc2dpbmZvLT53YWl0ZXZlbnQsIG1zZ2luZm8tPndhaXRfY29uZGl0aW9uLAotCQkJbXNlY3NfdG9famlmZmllcygxMDAwKSk7Ci0JaWYgKG1zZ2luZm8tPndhaXRfY29uZGl0aW9uID09IDApIHsKKwl0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZtc2dpbmZvLT53YWl0ZXZlbnQsIEhaKTsKKwlpZiAodCA9PSAwKSB7CiAJCXJldCA9IC1FVElNRURPVVQ7CiAJCWdvdG8gY2xlYW51cDsKIAl9CkBAIC04MzQsMzggKzc4Nyw0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIHZtYnVzX3JlbGVhc2VfdW5hdHRhY2hlZF9jaGFubmVscyAtIFJlbGVhc2UgY2hhbm5lbHMgdGhhdCBhcmUKLSAqIHVuYXR0YWNoZWQvdW5jb25uZWN0ZWQgaWUgKG5vIGRyaXZlcnMgYXNzb2NpYXRlZCkKLSAqLwotdm9pZCB2bWJ1c19yZWxlYXNlX3VuYXR0YWNoZWRfY2hhbm5lbHModm9pZCkKLXsKLQlzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCwgKnBvczsKLQlzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqc3RhcnQgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdm1idXNfY29ubmVjdGlvbi5jaGFubmVsX2xvY2ssIGZsYWdzKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaGFubmVsLCBwb3MsICZ2bWJ1c19jb25uZWN0aW9uLmNobl9saXN0LAotCQkJCSBsaXN0ZW50cnkpIHsKLQkJaWYgKGNoYW5uZWwgPT0gc3RhcnQpCi0JCQlicmVhazsKLQotCQlpZiAoIWNoYW5uZWwtPmRldmljZV9vYmotPmRydikgewotCQkJbGlzdF9kZWwoJmNoYW5uZWwtPmxpc3RlbnRyeSk7Ci0JCQlEUFJJTlRfSU5GTyhWTUJVUywKLQkJCQkgICAgIlJlbGVhc2luZyB1bmF0dGFjaGVkIGRldmljZSBvYmplY3QgJXAiLAotCQkJCSAgICBjaGFubmVsLT5kZXZpY2Vfb2JqKTsKLQotCQkJdm1idXNfY2hpbGRfZGV2aWNlX3VucmVnaXN0ZXIoY2hhbm5lbC0+ZGV2aWNlX29iaik7Ci0JCQlmcmVlX2NoYW5uZWwoY2hhbm5lbCk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoIXN0YXJ0KQotCQkJCXN0YXJ0ID0gY2hhbm5lbDsKLQkJfQotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZtYnVzX2Nvbm5lY3Rpb24uY2hhbm5lbF9sb2NrLCBmbGFncyk7Ci19Ci0KIC8qIGVvZiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L2NoYW5uZWxfbWdtdC5oIGIvZHJpdmVycy9zdGFnaW5nL2h2L2NoYW5uZWxfbWdtdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmY3NGUyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9jaGFubmVsX21nbXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDMyMCArMCwwIEBACi0vKgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwOSwgTWljcm9zb2Z0IENvcnBvcmF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAotICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi0gKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlCi0gKiBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KLSAqCi0gKiBBdXRob3JzOgotICogICBIYWl5YW5nIFpoYW5nIDxoYWl5YW5nekBtaWNyb3NvZnQuY29tPgotICogICBIYW5rIEphbnNzZW4gIDxoamFuc3NlbkBtaWNyb3NvZnQuY29tPgotICoKLSAqLwotCi0KLSNpZm5kZWYgX0NIQU5ORUxfTUdNVF9IXwotI2RlZmluZSBfQ0hBTk5FTF9NR01UX0hfCi0KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlICJyaW5nX2J1ZmZlci5oIgotI2luY2x1ZGUgInZtYnVzX2NoYW5uZWxfaW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAidm1idXNfcGFja2V0X2Zvcm1hdC5oIgotCi0vKiBWZXJzaW9uIDEgbWVzc2FnZXMgKi8KLWVudW0gdm1idXNfY2hhbm5lbF9tZXNzYWdlX3R5cGUgewotCUNIQU5ORUxNU0dfSU5WQUxJRAkJCT0gIDAsCi0JQ0hBTk5FTE1TR19PRkZFUkNIQU5ORUwJCT0gIDEsCi0JQ0hBTk5FTE1TR19SRVNDSU5EX0NIQU5ORUxPRkZFUgk9ICAyLAotCUNIQU5ORUxNU0dfUkVRVUVTVE9GRkVSUwkJPSAgMywKLQlDSEFOTkVMTVNHX0FMTE9GRkVSU19ERUxJVkVSRUQJPSAgNCwKLQlDSEFOTkVMTVNHX09QRU5DSEFOTkVMCQk9ICA1LAotCUNIQU5ORUxNU0dfT1BFTkNIQU5ORUxfUkVTVUxUCQk9ICA2LAotCUNIQU5ORUxNU0dfQ0xPU0VDSEFOTkVMCQk9ICA3LAotCUNIQU5ORUxNU0dfR1BBRExfSEVBREVSCQk9ICA4LAotCUNIQU5ORUxNU0dfR1BBRExfQk9EWQkJCT0gIDksCi0JQ0hBTk5FTE1TR19HUEFETF9DUkVBVEVECQk9IDEwLAotCUNIQU5ORUxNU0dfR1BBRExfVEVBUkRPV04JCT0gMTEsCi0JQ0hBTk5FTE1TR19HUEFETF9UT1JORE9XTgkJPSAxMiwKLQlDSEFOTkVMTVNHX1JFTElEX1JFTEVBU0VECQk9IDEzLAotCUNIQU5ORUxNU0dfSU5JVElBVEVfQ09OVEFDVAkJPSAxNCwKLQlDSEFOTkVMTVNHX1ZFUlNJT05fUkVTUE9OU0UJCT0gMTUsCi0JQ0hBTk5FTE1TR19VTkxPQUQJCQk9IDE2LAotI2lmZGVmIFZNQlVTX0ZFQVRVUkVfUEFSRU5UX09SX1BFRVJfTUVNT1JZX01BUFBFRF9JTlRPX0FfQ0hJTEQKLQlDSEFOTkVMTVNHX1ZJRVdSQU5HRV9BREQJCT0gMTcsCi0JQ0hBTk5FTE1TR19WSUVXUkFOR0VfUkVNT1ZFCQk9IDE4LAotI2VuZGlmCi0JQ0hBTk5FTE1TR19DT1VOVAotfTsKLQotc3RydWN0IHZtYnVzX2NoYW5uZWxfbWVzc2FnZV9oZWFkZXIgewotCWVudW0gdm1idXNfY2hhbm5lbF9tZXNzYWdlX3R5cGUgbXNndHlwZTsKLQl1MzIgcGFkZGluZzsKLX0gX19wYWNrZWQ7Ci0KLS8qIFF1ZXJ5IFZNQnVzIFZlcnNpb24gcGFyYW1ldGVycyAqLwotc3RydWN0IHZtYnVzX2NoYW5uZWxfcXVlcnlfdm1idXNfdmVyc2lvbiB7Ci0Jc3RydWN0IHZtYnVzX2NoYW5uZWxfbWVzc2FnZV9oZWFkZXIgaGVhZGVyOwotCXUzMiB2ZXJzaW9uOwotfSBfX3BhY2tlZDsKLQotLyogVk1CdXMgVmVyc2lvbiBTdXBwb3J0ZWQgcGFyYW1ldGVycyAqLwotc3RydWN0IHZtYnVzX2NoYW5uZWxfdmVyc2lvbl9zdXBwb3J0ZWQgewotCXN0cnVjdCB2bWJ1c19jaGFubmVsX21lc3NhZ2VfaGVhZGVyIGhlYWRlcjsKLQlib29sIHZlcnNpb25fc3VwcG9ydGVkOwotfSBfX3BhY2tlZDsKLQotLyogT2ZmZXIgQ2hhbm5lbCBwYXJhbWV0ZXJzICovCi1zdHJ1Y3Qgdm1idXNfY2hhbm5lbF9vZmZlcl9jaGFubmVsIHsKLQlzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9tZXNzYWdlX2hlYWRlciBoZWFkZXI7Ci0Jc3RydWN0IHZtYnVzX2NoYW5uZWxfb2ZmZXIgb2ZmZXI7Ci0JdTMyIGNoaWxkX3JlbGlkOwotCXU4IG1vbml0b3JpZDsKLQlib29sIG1vbml0b3JfYWxsb2NhdGVkOwotfSBfX3BhY2tlZDsKLQotLyogUmVzY2luZCBPZmZlciBwYXJhbWV0ZXJzICovCi1zdHJ1Y3Qgdm1idXNfY2hhbm5lbF9yZXNjaW5kX29mZmVyIHsKLQlzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9tZXNzYWdlX2hlYWRlciBoZWFkZXI7Ci0JdTMyIGNoaWxkX3JlbGlkOwotfSBfX3BhY2tlZDsKLQotLyoKLSAqIFJlcXVlc3QgT2ZmZXIgLS0gbm8gcGFyYW1ldGVycywgU3luSUMgbWVzc2FnZSBjb250YWlucyB0aGUgcGFydGl0aW9uIElECi0gKiBTZXQgU25vb3AgLS0gbm8gcGFyYW1ldGVycywgU3luSUMgbWVzc2FnZSBjb250YWlucyB0aGUgcGFydGl0aW9uIElECi0gKiBDbGVhciBTbm9vcCAtLSBubyBwYXJhbWV0ZXJzLCBTeW5JQyBtZXNzYWdlIGNvbnRhaW5zIHRoZSBwYXJ0aXRpb24gSUQKLSAqIEFsbCBPZmZlcnMgRGVsaXZlcmVkIC0tIG5vIHBhcmFtZXRlcnMsIFN5bklDIG1lc3NhZ2UgY29udGFpbnMgdGhlIHBhcnRpdGlvbgotICoJCSAgICAgICAgICAgSUQKLSAqIEZsdXNoIENsaWVudCAtLSBubyBwYXJhbWV0ZXJzLCBTeW5JQyBtZXNzYWdlIGNvbnRhaW5zIHRoZSBwYXJ0aXRpb24gSUQKLSAqLwotCi0vKiBPcGVuIENoYW5uZWwgcGFyYW1ldGVycyAqLwotc3RydWN0IHZtYnVzX2NoYW5uZWxfb3Blbl9jaGFubmVsIHsKLQlzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9tZXNzYWdlX2hlYWRlciBoZWFkZXI7Ci0KLQkvKiBJZGVudGlmaWVzIHRoZSBzcGVjaWZpYyBWTUJ1cyBjaGFubmVsIHRoYXQgaXMgYmVpbmcgb3BlbmVkLiAqLwotCXUzMiBjaGlsZF9yZWxpZDsKLQotCS8qIElEIG1ha2luZyBhIHBhcnRpY3VsYXIgb3BlbiByZXF1ZXN0IGF0IGEgY2hhbm5lbCBvZmZlciB1bmlxdWUuICovCi0JdTMyIG9wZW5pZDsKLQotCS8qIEdQQURMIGZvciB0aGUgY2hhbm5lbCdzIHJpbmcgYnVmZmVyLiAqLwotCXUzMiByaW5nYnVmZmVyX2dwYWRsaGFuZGxlOwotCi0JLyogR1BBREwgZm9yIHRoZSBjaGFubmVsJ3Mgc2VydmVyIGNvbnRleHQgc2F2ZSBhcmVhLiAqLwotCXUzMiBzZXJ2ZXJfY29udGV4dGFyZWFfZ3BhZGxoYW5kbGU7Ci0KLQkvKgotCSogVGhlIHVwc3RyZWFtIHJpbmcgYnVmZmVyIGJlZ2lucyBhdCBvZmZzZXQgemVybyBpbiB0aGUgbWVtb3J5Ci0JKiBkZXNjcmliZWQgYnkgUmluZ0J1ZmZlckdwYWRsSGFuZGxlLiBUaGUgZG93bnN0cmVhbSByaW5nIGJ1ZmZlcgotCSogZm9sbG93cyBpdCBhdCB0aGlzIG9mZnNldCAoaW4gcGFnZXMpLgotCSovCi0JdTMyIGRvd25zdHJlYW1fcmluZ2J1ZmZlcl9wYWdlb2Zmc2V0OwotCi0JLyogVXNlci1zcGVjaWZpYyBkYXRhIHRvIGJlIHBhc3NlZCBhbG9uZyB0byB0aGUgc2VydmVyIGVuZHBvaW50LiAqLwotCXVuc2lnbmVkIGNoYXIgdXNlcmRhdGFbTUFYX1VTRVJfREVGSU5FRF9CWVRFU107Ci19IF9fcGFja2VkOwotCi0vKiBPcGVuIENoYW5uZWwgUmVzdWx0IHBhcmFtZXRlcnMgKi8KLXN0cnVjdCB2bWJ1c19jaGFubmVsX29wZW5fcmVzdWx0IHsKLQlzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9tZXNzYWdlX2hlYWRlciBoZWFkZXI7Ci0JdTMyIGNoaWxkX3JlbGlkOwotCXUzMiBvcGVuaWQ7Ci0JdTMyIHN0YXR1czsKLX0gX19wYWNrZWQ7Ci0KLS8qIENsb3NlIGNoYW5uZWwgcGFyYW1ldGVyczsgKi8KLXN0cnVjdCB2bWJ1c19jaGFubmVsX2Nsb3NlX2NoYW5uZWwgewotCXN0cnVjdCB2bWJ1c19jaGFubmVsX21lc3NhZ2VfaGVhZGVyIGhlYWRlcjsKLQl1MzIgY2hpbGRfcmVsaWQ7Ci19IF9fcGFja2VkOwotCi0vKiBDaGFubmVsIE1lc3NhZ2UgR1BBREwgKi8KLSNkZWZpbmUgR1BBRExfVFlQRV9SSU5HX0JVRkZFUgkJMQotI2RlZmluZSBHUEFETF9UWVBFX1NFUlZFUl9TQVZFX0FSRUEJMgotI2RlZmluZSBHUEFETF9UWVBFX1RSQU5TQUNUSU9OCQk4Ci0KLS8qCi0gKiBUaGUgbnVtYmVyIG9mIFBGTnMgaW4gYSBHUEFETCBtZXNzYWdlIGlzIGRlZmluZWQgYnkgdGhlIG51bWJlciBvZgotICogcGFnZXMgdGhhdCB3b3VsZCBiZSBzcGFubmVkIGJ5IEJ5dGVDb3VudCBhbmQgQnl0ZU9mZnNldC4gIElmIHRoZQotICogaW1wbGllZCBudW1iZXIgb2YgUEZOcyB3b24ndCBmaXQgaW4gdGhpcyBwYWNrZXQsIHRoZXJlIHdpbGwgYmUgYQotICogZm9sbG93LXVwIHBhY2tldCB0aGF0IGNvbnRhaW5zIG1vcmUuCi0gKi8KLXN0cnVjdCB2bWJ1c19jaGFubmVsX2dwYWRsX2hlYWRlciB7Ci0Jc3RydWN0IHZtYnVzX2NoYW5uZWxfbWVzc2FnZV9oZWFkZXIgaGVhZGVyOwotCXUzMiBjaGlsZF9yZWxpZDsKLQl1MzIgZ3BhZGw7Ci0JdTE2IHJhbmdlX2J1ZmxlbjsKLQl1MTYgcmFuZ2Vjb3VudDsKLQlzdHJ1Y3QgZ3BhX3JhbmdlIHJhbmdlWzBdOwotfSBfX3BhY2tlZDsKLQotLyogVGhpcyBpcyB0aGUgZm9sbG93dXAgcGFja2V0IHRoYXQgY29udGFpbnMgbW9yZSBQRk5zLiAqLwotc3RydWN0IHZtYnVzX2NoYW5uZWxfZ3BhZGxfYm9keSB7Ci0Jc3RydWN0IHZtYnVzX2NoYW5uZWxfbWVzc2FnZV9oZWFkZXIgaGVhZGVyOwotCXUzMiBtc2dudW1iZXI7Ci0JdTMyIGdwYWRsOwotCXU2NCBwZm5bMF07Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3Qgdm1idXNfY2hhbm5lbF9ncGFkbF9jcmVhdGVkIHsKLQlzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9tZXNzYWdlX2hlYWRlciBoZWFkZXI7Ci0JdTMyIGNoaWxkX3JlbGlkOwotCXUzMiBncGFkbDsKLQl1MzIgY3JlYXRpb25fc3RhdHVzOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IHZtYnVzX2NoYW5uZWxfZ3BhZGxfdGVhcmRvd24gewotCXN0cnVjdCB2bWJ1c19jaGFubmVsX21lc3NhZ2VfaGVhZGVyIGhlYWRlcjsKLQl1MzIgY2hpbGRfcmVsaWQ7Ci0JdTMyIGdwYWRsOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IHZtYnVzX2NoYW5uZWxfZ3BhZGxfdG9ybmRvd24gewotCXN0cnVjdCB2bWJ1c19jaGFubmVsX21lc3NhZ2VfaGVhZGVyIGhlYWRlcjsKLQl1MzIgZ3BhZGw7Ci19IF9fcGFja2VkOwotCi0jaWZkZWYgVk1CVVNfRkVBVFVSRV9QQVJFTlRfT1JfUEVFUl9NRU1PUllfTUFQUEVEX0lOVE9fQV9DSElMRAotc3RydWN0IHZtYnVzX2NoYW5uZWxfdmlld19yYW5nZV9hZGQgewotCXN0cnVjdCB2bWJ1c19jaGFubmVsX21lc3NhZ2VfaGVhZGVyIGhlYWRlcjsKLQlQSFlTSUNBTF9BRERSRVNTIHZpZXdyYW5nZV9iYXNlOwotCXU2NCB2aWV3cmFuZ2VfbGVuZ3RoOwotCXUzMiBjaGlsZF9yZWxpZDsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCB2bWJ1c19jaGFubmVsX3ZpZXdfcmFuZ2VfcmVtb3ZlIHsKLQlzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9tZXNzYWdlX2hlYWRlciBoZWFkZXI7Ci0JUEhZU0lDQUxfQUREUkVTUyB2aWV3cmFuZ2VfYmFzZTsKLQl1MzIgY2hpbGRfcmVsaWQ7Ci19IF9fcGFja2VkOwotI2VuZGlmCi0KLXN0cnVjdCB2bWJ1c19jaGFubmVsX3JlbGlkX3JlbGVhc2VkIHsKLQlzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9tZXNzYWdlX2hlYWRlciBoZWFkZXI7Ci0JdTMyIGNoaWxkX3JlbGlkOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IHZtYnVzX2NoYW5uZWxfaW5pdGlhdGVfY29udGFjdCB7Ci0Jc3RydWN0IHZtYnVzX2NoYW5uZWxfbWVzc2FnZV9oZWFkZXIgaGVhZGVyOwotCXUzMiB2bWJ1c192ZXJzaW9uX3JlcXVlc3RlZDsKLQl1MzIgcGFkZGluZzI7Ci0JdTY0IGludGVycnVwdF9wYWdlOwotCXU2NCBtb25pdG9yX3BhZ2UxOwotCXU2NCBtb25pdG9yX3BhZ2UyOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IHZtYnVzX2NoYW5uZWxfdmVyc2lvbl9yZXNwb25zZSB7Ci0Jc3RydWN0IHZtYnVzX2NoYW5uZWxfbWVzc2FnZV9oZWFkZXIgaGVhZGVyOwotCWJvb2wgdmVyc2lvbl9zdXBwb3J0ZWQ7Ci19IF9fcGFja2VkOwotCi1lbnVtIHZtYnVzX2NoYW5uZWxfc3RhdGUgewotCUNIQU5ORUxfT0ZGRVJfU1RBVEUsCi0JQ0hBTk5FTF9PUEVOSU5HX1NUQVRFLAotCUNIQU5ORUxfT1BFTl9TVEFURSwKLX07Ci0KLXN0cnVjdCB2bWJ1c19jaGFubmVsIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RlbnRyeTsKLQotCXN0cnVjdCBodl9kZXZpY2UgKmRldmljZV9vYmo7Ci0KLQlzdHJ1Y3QgdGltZXJfbGlzdCBwb2xsX3RpbWVyOyAvKiBTQS0xMTEgd29ya2Fyb3VuZCAqLwotCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwotCi0JZW51bSB2bWJ1c19jaGFubmVsX3N0YXRlIHN0YXRlOwotCi0Jc3RydWN0IHZtYnVzX2NoYW5uZWxfb2ZmZXJfY2hhbm5lbCBvZmZlcm1zZzsKLQkvKgotCSAqIFRoZXNlIGFyZSBiYXNlZCBvbiB0aGUgT2ZmZXJNc2cuTW9uaXRvcklkLgotCSAqIFNhdmUgaXQgaGVyZSBmb3IgZWFzeSBhY2Nlc3MuCi0JICovCi0JdTggbW9uaXRvcl9ncnA7Ci0JdTggbW9uaXRvcl9iaXQ7Ci0KLQl1MzIgcmluZ2J1ZmZlcl9ncGFkbGhhbmRsZTsKLQotCS8qIEFsbG9jYXRlZCBtZW1vcnkgZm9yIHJpbmcgYnVmZmVyICovCi0Jdm9pZCAqcmluZ2J1ZmZlcl9wYWdlczsKLQl1MzIgcmluZ2J1ZmZlcl9wYWdlY291bnQ7Ci0Jc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gb3V0Ym91bmQ7CS8qIHNlbmQgdG8gcGFyZW50ICovCi0Jc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gaW5ib3VuZDsJLyogcmVjZWl2ZSBmcm9tIHBhcmVudCAqLwotCXNwaW5sb2NrX3QgaW5ib3VuZF9sb2NrOwotCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpjb250cm9sd3E7Ci0KLQkvKiBDaGFubmVsIGNhbGxiYWNrIGFyZSBpbnZva2VkIGluIHRoaXMgd29ya3F1ZXVlIGNvbnRleHQgKi8KLQkvKiBIQU5ETEUgZGF0YVdvcmtRdWV1ZTsgKi8KLQotCXZvaWQgKCpvbmNoYW5uZWxfY2FsbGJhY2spKHZvaWQgKmNvbnRleHQpOwotCXZvaWQgKmNoYW5uZWxfY2FsbGJhY2tfY29udGV4dDsKLX07Ci0KLXN0cnVjdCB2bWJ1c19jaGFubmVsX2RlYnVnX2luZm8gewotCXUzMiByZWxpZDsKLQllbnVtIHZtYnVzX2NoYW5uZWxfc3RhdGUgc3RhdGU7Ci0Jc3RydWN0IGh2X2d1aWQgaW50ZXJmYWNldHlwZTsKLQlzdHJ1Y3QgaHZfZ3VpZCBpbnRlcmZhY2VfaW5zdGFuY2U7Ci0JdTMyIG1vbml0b3JpZDsKLQl1MzIgc2VydmVybW9uaXRvcl9wZW5kaW5nOwotCXUzMiBzZXJ2ZXJtb25pdG9yX2xhdGVuY3k7Ci0JdTMyIHNlcnZlcm1vbml0b3JfY29ubmVjdGlvbmlkOwotCXUzMiBjbGllbnRtb25pdG9yX3BlbmRpbmc7Ci0JdTMyIGNsaWVudG1vbml0b3JfbGF0ZW5jeTsKLQl1MzIgY2xpZW50bW9uaXRvcl9jb25uZWN0aW9uaWQ7Ci0KLQlzdHJ1Y3QgaHZfcmluZ19idWZmZXJfZGVidWdfaW5mbyBpbmJvdW5kOwotCXN0cnVjdCBodl9yaW5nX2J1ZmZlcl9kZWJ1Z19pbmZvIG91dGJvdW5kOwotfTsKLQotLyoKLSAqIFJlcHJlc2VudHMgZWFjaCBjaGFubmVsIG1zZyBvbiB0aGUgdm1idXMgY29ubmVjdGlvbiBUaGlzIGlzIGEKLSAqIHZhcmlhYmxlLXNpemUgZGF0YSBzdHJ1Y3R1cmUgZGVwZW5kaW5nIG9uIHRoZSBtc2cgdHlwZSBpdHNlbGYKLSAqLwotc3RydWN0IHZtYnVzX2NoYW5uZWxfbXNnaW5mbyB7Ci0JLyogQm9va2tlZXBpbmcgc3R1ZmYgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIG1zZ2xpc3RlbnRyeTsKLQotCS8qIFNvIGZhciwgdGhpcyBpcyBvbmx5IHVzZWQgdG8gaGFuZGxlIGdwYWRsIGJvZHkgbWVzc2FnZSAqLwotCXN0cnVjdCBsaXN0X2hlYWQgc3VibXNnbGlzdDsKLQotCS8qIFN5bmNocm9uaXplIHRoZSByZXF1ZXN0L3Jlc3BvbnNlIGlmIG5lZWRlZCAqLwotCWludCB3YWl0X2NvbmRpdGlvbjsKLQl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0ZXZlbnQ7Ci0JdW5pb24gewotCQlzdHJ1Y3Qgdm1idXNfY2hhbm5lbF92ZXJzaW9uX3N1cHBvcnRlZCB2ZXJzaW9uX3N1cHBvcnRlZDsKLQkJc3RydWN0IHZtYnVzX2NoYW5uZWxfb3Blbl9yZXN1bHQgb3Blbl9yZXN1bHQ7Ci0JCXN0cnVjdCB2bWJ1c19jaGFubmVsX2dwYWRsX3Rvcm5kb3duIGdwYWRsX3Rvcm5kb3duOwotCQlzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9ncGFkbF9jcmVhdGVkIGdwYWRsX2NyZWF0ZWQ7Ci0JCXN0cnVjdCB2bWJ1c19jaGFubmVsX3ZlcnNpb25fcmVzcG9uc2UgdmVyc2lvbl9yZXNwb25zZTsKLQl9IHJlc3BvbnNlOwotCi0JdTMyIG1zZ3NpemU7Ci0JLyoKLQkgKiBUaGUgY2hhbm5lbCBtZXNzYWdlIHRoYXQgZ29lcyBvdXQgb24gdGhlICJ3aXJlIi4KLQkgKiBJdCB3aWxsIGNvbnRhaW4gYXQgbWluaW11bSB0aGUgVk1CVVNfQ0hBTk5FTF9NRVNTQUdFX0hFQURFUiBoZWFkZXIKLQkgKi8KLQl1bnNpZ25lZCBjaGFyIG1zZ1swXTsKLX07Ci0KLQotdm9pZCBmcmVlX2NoYW5uZWwoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwpOwotCi12b2lkIHZtYnVzX29ubWVzc2FnZSh2b2lkICpjb250ZXh0KTsKLQotaW50IHZtYnVzX3JlcXVlc3Rfb2ZmZXJzKHZvaWQpOwotCi12b2lkIHZtYnVzX3JlbGVhc2VfdW5hdHRhY2hlZF9jaGFubmVscyh2b2lkKTsKLQotI2VuZGlmIC8qIF9DSEFOTkVMX01HTVRfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9jb25uZWN0aW9uLmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvY29ubmVjdGlvbi5jCmluZGV4IGFmYzgxMTYuLjM3YmJmNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9jb25uZWN0aW9uLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L2Nvbm5lY3Rpb24uYwpAQCAtMjAsMTUgKzIwLDE3IEBACiAgKiAgIEhhbmsgSmFuc3NlbiAgPGhqYW5zc2VuQG1pY3Jvc29mdC5jb20+CiAgKgogICovCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0jaW5jbHVkZSAiaHZfYXBpLmgiCi0jaW5jbHVkZSAibG9nZ2luZy5oIgotI2luY2x1ZGUgInZtYnVzX3ByaXZhdGUuaCIKKworI2luY2x1ZGUgImh5cGVydi5oIgorI2luY2x1ZGUgImh5cGVydl92bWJ1cy5oIgogCiAKIHN0cnVjdCB2bWJ1c19jb25uZWN0aW9uIHZtYnVzX2Nvbm5lY3Rpb24gPSB7CkBAIC00Miw2ICs0NCw3IEBACiBpbnQgdm1idXNfY29ubmVjdCh2b2lkKQogewogCWludCByZXQgPSAwOworCWludCB0OwogCXN0cnVjdCB2bWJ1c19jaGFubmVsX21zZ2luZm8gKm1zZ2luZm8gPSBOVUxMOwogCXN0cnVjdCB2bWJ1c19jaGFubmVsX2luaXRpYXRlX2NvbnRhY3QgKm1zZzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNTUsNyArNTgsNyBAQAogCXZtYnVzX2Nvbm5lY3Rpb24ud29ya19xdWV1ZSA9IGNyZWF0ZV93b3JrcXVldWUoImh2X3ZtYnVzX2NvbiIpOwogCWlmICghdm1idXNfY29ubmVjdGlvbi53b3JrX3F1ZXVlKSB7CiAJCXJldCA9IC0xOwotCQlnb3RvIENsZWFudXA7CisJCWdvdG8gY2xlYW51cDsKIAl9CiAKIAlJTklUX0xJU1RfSEVBRCgmdm1idXNfY29ubmVjdGlvbi5jaG5fbXNnX2xpc3QpOwpAQCAtNzIsNyArNzUsNyBAQAogCSh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMfF9fR0ZQX1pFUk8sIDApOwogCWlmICh2bWJ1c19jb25uZWN0aW9uLmludF9wYWdlID09IE5VTEwpIHsKIAkJcmV0ID0gLTE7Ci0JCWdvdG8gQ2xlYW51cDsKKwkJZ290byBjbGVhbnVwOwogCX0KIAogCXZtYnVzX2Nvbm5lY3Rpb24ucmVjdl9pbnRfcGFnZSA9IHZtYnVzX2Nvbm5lY3Rpb24uaW50X3BhZ2U7CkBAIC04OCw3ICs5MSw3IEBACiAJKHZvaWQgKilfX2dldF9mcmVlX3BhZ2VzKChHRlBfS0VSTkVMfF9fR0ZQX1pFUk8pLCAxKTsKIAlpZiAodm1idXNfY29ubmVjdGlvbi5tb25pdG9yX3BhZ2VzID09IE5VTEwpIHsKIAkJcmV0ID0gLTE7Ci0JCWdvdG8gQ2xlYW51cDsKKwkJZ290byBjbGVhbnVwOwogCX0KIAogCW1zZ2luZm8gPSBremFsbG9jKHNpemVvZigqbXNnaW5mbykgKwpAQCAtOTYsMTAgKzk5LDEwIEBACiAJCQkgIEdGUF9LRVJORUwpOwogCWlmIChtc2dpbmZvID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBDbGVhbnVwOworCQlnb3RvIGNsZWFudXA7CiAJfQogCi0JaW5pdF93YWl0cXVldWVfaGVhZCgmbXNnaW5mby0+d2FpdGV2ZW50KTsKKwlpbml0X2NvbXBsZXRpb24oJm1zZ2luZm8tPndhaXRldmVudCk7CiAKIAltc2cgPSAoc3RydWN0IHZtYnVzX2NoYW5uZWxfaW5pdGlhdGVfY29udGFjdCAqKW1zZ2luZm8tPm1zZzsKIApAQCAtMTIxLDExICsxMjQsNiBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdm1idXNfY29ubmVjdGlvbi5jaGFubmVsbXNnX2xvY2ssIGZsYWdzKTsKIAotCURQUklOVF9EQkcoVk1CVVMsICJWbWJ1cyBjb25uZWN0aW9uIC0gaW50ZXJydXB0IHBmbiAlbGx4LCAiCi0JCSAgICJtb25pdG9yMSBwZm4gJWxseCwsIG1vbml0b3IyIHBmbiAlbGx4IiwKLQkJICAgbXNnLT5pbnRlcnJ1cHRfcGFnZSwgbXNnLT5tb25pdG9yX3BhZ2UxLCBtc2ctPm1vbml0b3JfcGFnZTIpOwotCi0JRFBSSU5UX0RCRyhWTUJVUywgIlNlbmRpbmcgY2hhbm5lbCBpbml0aWF0ZSBtc2cuLi4iKTsKIAlyZXQgPSB2bWJ1c19wb3N0X21zZyhtc2csCiAJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB2bWJ1c19jaGFubmVsX2luaXRpYXRlX2NvbnRhY3QpKTsKIAlpZiAocmV0ICE9IDApIHsKQEAgLTEzMywyMSArMTMxLDE5IEBACiAJCWxpc3RfZGVsKCZtc2dpbmZvLT5tc2dsaXN0ZW50cnkpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2bWJ1c19jb25uZWN0aW9uLmNoYW5uZWxtc2dfbG9jaywKIAkJCQkJZmxhZ3MpOwotCQlnb3RvIENsZWFudXA7CisJCWdvdG8gY2xlYW51cDsKIAl9CiAKIAkvKiBXYWl0IGZvciB0aGUgY29ubmVjdGlvbiByZXNwb25zZSAqLwotCW1zZ2luZm8tPndhaXRfY29uZGl0aW9uID0gMDsKLQl3YWl0X2V2ZW50X3RpbWVvdXQobXNnaW5mby0+d2FpdGV2ZW50LCBtc2dpbmZvLT53YWl0X2NvbmRpdGlvbiwKLQkJCW1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpOwotCWlmIChtc2dpbmZvLT53YWl0X2NvbmRpdGlvbiA9PSAwKSB7CisJdCA9ICB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJm1zZ2luZm8tPndhaXRldmVudCwgSFopOworCWlmICh0ID09IDApIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnZtYnVzX2Nvbm5lY3Rpb24uY2hhbm5lbG1zZ19sb2NrLAogCQkJCWZsYWdzKTsKIAkJbGlzdF9kZWwoJm1zZ2luZm8tPm1zZ2xpc3RlbnRyeSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZtYnVzX2Nvbm5lY3Rpb24uY2hhbm5lbG1zZ19sb2NrLAogCQkJCQlmbGFncyk7CiAJCXJldCA9IC1FVElNRURPVVQ7Ci0JCWdvdG8gQ2xlYW51cDsKKwkJZ290byBjbGVhbnVwOwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ2bWJ1c19jb25uZWN0aW9uLmNoYW5uZWxtc2dfbG9jaywgZmxhZ3MpOwpAQCAtMTU2LDIxICsxNTIsMTkgQEAKIAogCS8qIENoZWNrIGlmIHN1Y2Nlc3NmdWwgKi8KIAlpZiAobXNnaW5mby0+cmVzcG9uc2UudmVyc2lvbl9yZXNwb25zZS52ZXJzaW9uX3N1cHBvcnRlZCkgewotCQlEUFJJTlRfSU5GTyhWTUJVUywgIlZtYnVzIGNvbm5lY3RlZCEhIik7CiAJCXZtYnVzX2Nvbm5lY3Rpb24uY29ubl9zdGF0ZSA9IENPTk5FQ1RFRDsKLQogCX0gZWxzZSB7Ci0JCURQUklOVF9FUlIoVk1CVVMsICJWbWJ1cyBjb25uZWN0aW9uIGZhaWxlZCEhLi4uIgotCQkJICAgImN1cnJlbnQgdmVyc2lvbiAoJWQpIG5vdCBzdXBwb3J0ZWQiLAotCQkJICAgVk1CVVNfUkVWSVNJT05fTlVNQkVSKTsKKwkJcHJfZXJyKCJVbmFibGUgdG8gY29ubmVjdCwgIgorCQkJIlZlcnNpb24gJWQgbm90IHN1cHBvcnRlZCBieSBIeXBlci1WXG4iLAorCQkJVk1CVVNfUkVWSVNJT05fTlVNQkVSKTsKIAkJcmV0ID0gLTE7Ci0JCWdvdG8gQ2xlYW51cDsKKwkJZ290byBjbGVhbnVwOwogCX0KIAogCWtmcmVlKG1zZ2luZm8pOwogCXJldHVybiAwOwogCi1DbGVhbnVwOgorY2xlYW51cDoKIAl2bWJ1c19jb25uZWN0aW9uLmNvbm5fc3RhdGUgPSBESVNDT05ORUNURUQ7CiAKIAlpZiAodm1idXNfY29ubmVjdGlvbi53b3JrX3F1ZXVlKQpAQCAtMjEzLDcgKzIwNyw3IEBACiAJcmV0ID0gdm1idXNfcG9zdF9tc2cobXNnLAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9tZXNzYWdlX2hlYWRlcikpOwogCWlmIChyZXQgIT0gMCkKLQkJZ290byBDbGVhbnVwOworCQlnb3RvIGNsZWFudXA7CiAKIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXZtYnVzX2Nvbm5lY3Rpb24uaW50X3BhZ2UsIDApOwogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpdm1idXNfY29ubmVjdGlvbi5tb25pdG9yX3BhZ2VzLCAxKTsKQEAgLTIyMyw5ICsyMTcsOSBAQAogCiAJdm1idXNfY29ubmVjdGlvbi5jb25uX3N0YXRlID0gRElTQ09OTkVDVEVEOwogCi0JRFBSSU5UX0lORk8oVk1CVVMsICJWbWJ1cyBkaXNjb25uZWN0ZWQhISIpOworCXByX2luZm8oImh2X3ZtYnVzIGRpc2Nvbm5lY3RlZFxuIik7CiAKLUNsZWFudXA6CitjbGVhbnVwOgogCWtmcmVlKG1zZyk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTI1NSwxMCArMjQ5LDkgQEAKIC8qCiAgKiBwcm9jZXNzX2Nobl9ldmVudCAtIFByb2Nlc3MgYSBjaGFubmVsIGV2ZW50IG5vdGlmaWNhdGlvbgogICovCi1zdGF0aWMgdm9pZCBwcm9jZXNzX2Nobl9ldmVudCh2b2lkICpjb250ZXh0KQorc3RhdGljIHZvaWQgcHJvY2Vzc19jaG5fZXZlbnQodTMyIHJlbGlkKQogewogCXN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsOwotCXUzMiByZWxpZCA9ICh1MzIpKHVuc2lnbmVkIGxvbmcpY29udGV4dDsKIAogCS8qIEFTU0VSVChyZWxJZCA+IDApOyAqLwogCkBAIC0yNzAsMTMgKzI2Myw4IEBACiAKIAlpZiAoY2hhbm5lbCkgewogCQl2bWJ1c19vbmNoYW5uZWxfZXZlbnQoY2hhbm5lbCk7Ci0JCS8qCi0JCSAqIFdvcmtRdWV1ZVF1ZXVlV29ya0l0ZW0oY2hhbm5lbC0+ZGF0YVdvcmtRdWV1ZSwKLQkJICoJCQkgIHZtYnVzX29uY2hhbm5lbF9ldmVudCwKLQkJICoJCQkgICh2b2lkKiljaGFubmVsKTsKLQkJICovCiAJfSBlbHNlIHsKLQkJRFBSSU5UX0VSUihWTUJVUywgImNoYW5uZWwgbm90IGZvdW5kIGZvciByZWxpZCAtICVkLiIsIHJlbGlkKTsKKwkJcHJfZXJyKCJjaGFubmVsIG5vdCBmb3VuZCBmb3IgcmVsaWQgLSAldVxuIiwgcmVsaWQpOwogCX0KIH0KIApAQCAtMjg1LDM5ICsyNzMsMzMgQEAKICAqLwogdm9pZCB2bWJ1c19vbl9ldmVudCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0JaW50IGR3b3JkOwotCWludCBtYXhkd29yZCA9IE1BWF9OVU1fQ0hBTk5FTFNfU1VQUE9SVEVEID4+IDU7CisJdTMyIGR3b3JkOworCXUzMiBtYXhkd29yZCA9IE1BWF9OVU1fQ0hBTk5FTFNfU1VQUE9SVEVEID4+IDU7CiAJaW50IGJpdDsKLQlpbnQgcmVsaWQ7CisJdTMyIHJlbGlkOwogCXUzMiAqcmVjdl9pbnRfcGFnZSA9IHZtYnVzX2Nvbm5lY3Rpb24ucmVjdl9pbnRfcGFnZTsKIAogCS8qIENoZWNrIGV2ZW50cyAqLwotCWlmIChyZWN2X2ludF9wYWdlKSB7Ci0JCWZvciAoZHdvcmQgPSAwOyBkd29yZCA8IG1heGR3b3JkOyBkd29yZCsrKSB7Ci0JCQlpZiAocmVjdl9pbnRfcGFnZVtkd29yZF0pIHsKLQkJCQlmb3IgKGJpdCA9IDA7IGJpdCA8IDMyOyBiaXQrKykgewotCQkJCQlpZiAoc3luY190ZXN0X2FuZF9jbGVhcl9iaXQoYml0LAotCQkJCQkJKHVuc2lnbmVkIGxvbmcgKikKLQkJCQkJCSZyZWN2X2ludF9wYWdlW2R3b3JkXSkpIHsKLQkJCQkJCXJlbGlkID0gKGR3b3JkIDw8IDUpICsgYml0OwotCQkJCQkJRFBSSU5UX0RCRyhWTUJVUywgImV2ZW50IGRldGVjdGVkIGZvciByZWxpZCAtICVkIiwgcmVsaWQpOworCWlmICghcmVjdl9pbnRfcGFnZSkKKwkJcmV0dXJuOworCWZvciAoZHdvcmQgPSAwOyBkd29yZCA8IG1heGR3b3JkOyBkd29yZCsrKSB7CisJCWlmICghcmVjdl9pbnRfcGFnZVtkd29yZF0pCisJCQljb250aW51ZTsKKwkJZm9yIChiaXQgPSAwOyBiaXQgPCAzMjsgYml0KyspIHsKKwkJCWlmIChzeW5jX3Rlc3RfYW5kX2NsZWFyX2JpdChiaXQsICh1bnNpZ25lZCBsb25nICopJnJlY3ZfaW50X3BhZ2VbZHdvcmRdKSkgeworCQkJCXJlbGlkID0gKGR3b3JkIDw8IDUpICsgYml0OwogCi0JCQkJCQlpZiAocmVsaWQgPT0gMCkgewotCQkJCQkJCS8qIHNwZWNpYWwgY2FzZSAtIHZtYnVzIGNoYW5uZWwgcHJvdG9jb2wgbXNnICovCi0JCQkJCQkJRFBSSU5UX0RCRyhWTUJVUywgImludmFsaWQgcmVsaWQgLSAlZCIsIHJlbGlkKTsKLQkJCQkJCQljb250aW51ZTsKLQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJLyogUXVldWVXb3JrSXRlbShWbWJ1c1Byb2Nlc3NFdmVudCwgKHZvaWQqKXJlbGlkKTsgKi8KLQkJCQkJCQkvKiByZXQgPSBXb3JrUXVldWVRdWV1ZVdvcmtJdGVtKGdWbWJ1c0Nvbm5lY3Rpb24ud29ya1F1ZXVlLCBWbWJ1c1Byb2Nlc3NDaGFubmVsRXZlbnQsICh2b2lkKilyZWxpZCk7ICovCi0JCQkJCQlwcm9jZXNzX2Nobl9ldmVudCgodm9pZCAqKQotCQkJCQkJKHVuc2lnbmVkIGxvbmcpcmVsaWQpOwotCQkJCQkJfQotCQkJCQl9CisJCQkJaWYgKHJlbGlkID09IDApIHsKKwkJCQkJLyoKKwkJCQkJICogU3BlY2lhbCBjYXNlIC0gdm1idXMKKwkJCQkJICogY2hhbm5lbCBwcm90b2NvbCBtc2cKKwkJCQkJICovCisJCQkJCWNvbnRpbnVlOwogCQkJCX0KKwkJCQlwcm9jZXNzX2Nobl9ldmVudChyZWxpZCk7CiAJCQl9Ci0JCSB9CisJCX0KIAl9Ci0JcmV0dXJuOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L2h2LmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvaHYuYwppbmRleCAwYjA2ZjRmLi5hMmNjMDkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvaHYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvaHYuYwpAQCAtMTksMTMgKzE5LDE1IEBACiAgKiAgIEhhbmsgSmFuc3NlbiAgPGhqYW5zc2VuQG1pY3Jvc29mdC5jb20+CiAgKgogICovCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0jaW5jbHVkZSAiaHZfYXBpLmgiCi0jaW5jbHVkZSAibG9nZ2luZy5oIgotI2luY2x1ZGUgInZtYnVzX3ByaXZhdGUuaCIKKworI2luY2x1ZGUgImh5cGVydi5oIgorI2luY2x1ZGUgImh5cGVydl92bWJ1cy5oIgogCiAvKiBUaGUgb25lIGFuZCBvbmx5ICovCiBzdHJ1Y3QgaHZfY29udGV4dCBodl9jb250ZXh0ID0gewpAQCAtODAsMzMgKzgyLDcgQEAKIAlvcCA9IEhWQ1BVSURfVkVORE9SX01BWEZVTkNUSU9OOwogCWNwdWlkKG9wLCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKIAotCURQUklOVF9JTkZPKFZNQlVTLCAiVmVuZG9yIElEOiAlYyVjJWMlYyVjJWMlYyVjJWMlYyVjJWMiLAotCQkgICAgKGVieCAmIDB4RkYpLAotCQkgICAgKChlYnggPj4gOCkgJiAweEZGKSwKLQkJICAgICgoZWJ4ID4+IDE2KSAmIDB4RkYpLAotCQkgICAgKChlYnggPj4gMjQpICYgMHhGRiksCi0JCSAgICAoZWN4ICYgMHhGRiksCi0JCSAgICAoKGVjeCA+PiA4KSAmIDB4RkYpLAotCQkgICAgKChlY3ggPj4gMTYpICYgMHhGRiksCi0JCSAgICAoKGVjeCA+PiAyNCkgJiAweEZGKSwKLQkJICAgIChlZHggJiAweEZGKSwKLQkJICAgICgoZWR4ID4+IDgpICYgMHhGRiksCi0JCSAgICAoKGVkeCA+PiAxNikgJiAweEZGKSwKLQkJICAgICgoZWR4ID4+IDI0KSAmIDB4RkYpKTsKLQogCW1heF9sZWFmID0gZWF4OwotCWVheCA9IDA7Ci0JZWJ4ID0gMDsKLQllY3ggPSAwOwotCWVkeCA9IDA7Ci0Jb3AgPSBIVkNQVUlEX0lOVEVSRkFDRTsKLQljcHVpZChvcCwgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7Ci0KLQlEUFJJTlRfSU5GTyhWTUJVUywgIkludGVyZmFjZSBJRDogJWMlYyVjJWMiLAotCQkgICAgKGVheCAmIDB4RkYpLAotCQkgICAgKChlYXggPj4gOCkgJiAweEZGKSwKLQkJICAgICgoZWF4ID4+IDE2KSAmIDB4RkYpLAotCQkgICAgKChlYXggPj4gMjQpICYgMHhGRikpOwogCiAJaWYgKG1heF9sZWFmID49IEhWQ1BVSURfVkVSU0lPTikgewogCQllYXggPSAwOwpAQCAtMTE1LDcgKzkxLDcgQEAKIAkJZWR4ID0gMDsKIAkJb3AgPSBIVkNQVUlEX1ZFUlNJT047CiAJCWNwdWlkKG9wLCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKLQkJRFBSSU5UX0lORk8oVk1CVVMsICJPUyBCdWlsZDolZC0lZC4lZC0lZC0lZC4lZCIsXAorCQlwcl9pbmZvKCJIeXBlci1WIEhvc3QgT1MgQnVpbGQ6JWQtJWQuJWQtJWQtJWQuJWRcbiIsCiAJCQkgICAgZWF4LAogCQkJICAgIGVieCA+PiAxNiwKIAkJCSAgICBlYnggJiAweEZGRkYsCkBAIC0xMzcsMTggKzExMywxMSBAQAogCXU2NCBvdXRwdXRfYWRkcmVzcyA9IChvdXRwdXQpID8gdmlydF90b19waHlzKG91dHB1dCkgOiAwOwogCXZvbGF0aWxlIHZvaWQgKmh5cGVyY2FsbF9wYWdlID0gaHZfY29udGV4dC5oeXBlcmNhbGxfcGFnZTsKIAotCURQUklOVF9EQkcoVk1CVVMsICJIeXBlcmNhbGwgPGNvbnRyb2wgJWxseCBpbnB1dCBwaHlzICVsbHggdmlydCAlcCAiCi0JCSAgICJvdXRwdXQgcGh5cyAlbGx4IHZpcnQgJXAgaHlwZXJjYWxsICVwPiIsCi0JCSAgIGNvbnRyb2wsIGlucHV0X2FkZHJlc3MsIGlucHV0LAotCQkgICBvdXRwdXRfYWRkcmVzcywgb3V0cHV0LCBoeXBlcmNhbGxfcGFnZSk7Ci0KIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92ICUwLCAlJXI4IiA6IDogInIiIChvdXRwdXRfYWRkcmVzcykgOiAicjgiKTsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2FsbCAqJTMiIDogIj1hIiAoaHZfc3RhdHVzKSA6CiAJCQkgICAgICJjIiAoY29udHJvbCksICJkIiAoaW5wdXRfYWRkcmVzcyksCiAJCQkgICAgICJtIiAoaHlwZXJjYWxsX3BhZ2UpKTsKIAotCURQUklOVF9EQkcoVk1CVVMsICJIeXBlcmNhbGwgPHJldHVybiAlbGx4PiIsICBodl9zdGF0dXMpOwotCiAJcmV0dXJuIGh2X3N0YXR1czsKIAogI2Vsc2UKQEAgLTE2NSwxOCArMTM0LDEyIEBACiAJdTMyIG91dHB1dF9hZGRyZXNzX2xvID0gb3V0cHV0X2FkZHJlc3MgJiAweEZGRkZGRkZGOwogCXZvbGF0aWxlIHZvaWQgKmh5cGVyY2FsbF9wYWdlID0gaHZfY29udGV4dC5oeXBlcmNhbGxfcGFnZTsKIAotCURQUklOVF9EQkcoVk1CVVMsICJIeXBlcmNhbGwgPGNvbnRyb2wgJWxseCBpbnB1dCAlcCBvdXRwdXQgJXA+IiwKLQkJICAgY29udHJvbCwgaW5wdXQsIG91dHB1dCk7Ci0KIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImNhbGwgKiU4IiA6ICI9ZCIoaHZfc3RhdHVzX2hpKSwKIAkJCSAgICAgICI9YSIoaHZfc3RhdHVzX2xvKSA6ICJkIiAoY29udHJvbF9oaSksCiAJCQkgICAgICAiYSIgKGNvbnRyb2xfbG8pLCAiYiIgKGlucHV0X2FkZHJlc3NfaGkpLAogCQkJICAgICAgImMiIChpbnB1dF9hZGRyZXNzX2xvKSwgIkQiKG91dHB1dF9hZGRyZXNzX2hpKSwKIAkJCSAgICAgICJTIihvdXRwdXRfYWRkcmVzc19sbyksICJtIiAoaHlwZXJjYWxsX3BhZ2UpKTsKIAotCURQUklOVF9EQkcoVk1CVVMsICJIeXBlcmNhbGwgPHJldHVybiAlbGx4PiIsCi0JCSAgIGh2X3N0YXR1c19sbyB8ICgodTY0KWh2X3N0YXR1c19oaSA8PCAzMikpOwotCiAJcmV0dXJuIGh2X3N0YXR1c19sbyB8ICgodTY0KWh2X3N0YXR1c19oaSA8PCAzMik7CiAjZW5kaWYgLyogIXg4Nl82NCAqLwogfQpAQCAtMTk3LDEzICsxNjAsOCBAQAogCW1lbXNldChodl9jb250ZXh0LnN5bmljX21lc3NhZ2VfcGFnZSwgMCwKIAkgICAgICAgc2l6ZW9mKHZvaWQgKikgKiBNQVhfTlVNX0NQVVMpOwogCi0JaWYgKCFxdWVyeV9oeXBlcnZpc29yX3ByZXNlbmNlKCkpIHsKLQkJRFBSSU5UX0VSUihWTUJVUywgIk5vIFdpbmRvd3MgaHlwZXJ2aXNvciBkZXRlY3RlZCEhIik7Ci0JCWdvdG8gQ2xlYW51cDsKLQl9Ci0KLQlEUFJJTlRfSU5GTyhWTUJVUywKLQkJICAgICJXaW5kb3dzIGh5cGVydmlzb3IgZGV0ZWN0ZWQhIFJldHJpZXZpbmcgbW9yZSBpbmZvLi4uIik7CisJaWYgKCFxdWVyeV9oeXBlcnZpc29yX3ByZXNlbmNlKCkpCisJCWdvdG8gY2xlYW51cDsKIAogCW1heF9sZWFmID0gcXVlcnlfaHlwZXJ2aXNvcl9pbmZvKCk7CiAJLyogSHZRdWVyeUh5cGVydmlzb3JGZWF0dXJlcyhtYXhMZWFmKTsgKi8KQEAgLTIxMywxMSArMTcxLDggQEAKIAkgKi8KIAlyZG1zcmwoSFZfWDY0X01TUl9HVUVTVF9PU19JRCwgaHZfY29udGV4dC5ndWVzdGlkKTsKIAotCWlmIChodl9jb250ZXh0Lmd1ZXN0aWQgIT0gMCkgewotCQlEUFJJTlRfRVJSKFZNQlVTLCAiVW5rbm93biBndWVzdCBpZCAoMHglbGx4KSEhIiwKLQkJCQlodl9jb250ZXh0Lmd1ZXN0aWQpOwotCQlnb3RvIENsZWFudXA7Ci0JfQorCWlmIChodl9jb250ZXh0Lmd1ZXN0aWQgIT0gMCkKKwkJZ290byBjbGVhbnVwOwogCiAJLyogV3JpdGUgb3VyIE9TIGluZm8gKi8KIAl3cm1zcmwoSFZfWDY0X01TUl9HVUVTVF9PU19JRCwgSFZfTElOVVhfR1VFU1RfSUQpOwpAQCAtMjMyLDExICsxODcsOCBAQAogCSovCiAJdmlydGFkZHIgPSBfX3ZtYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMLCBQQUdFX0tFUk5FTF9FWEVDKTsKIAotCWlmICghdmlydGFkZHIpIHsKLQkJRFBSSU5UX0VSUihWTUJVUywKLQkJCSAgICJ1bmFibGUgdG8gYWxsb2NhdGUgaHlwZXJjYWxsIHBhZ2UhISIpOwotCQlnb3RvIENsZWFudXA7Ci0JfQorCWlmICghdmlydGFkZHIpCisJCWdvdG8gY2xlYW51cDsKIAogCWh5cGVyY2FsbF9tc3IuZW5hYmxlID0gMTsKIApAQCAtMjQ3LDIzICsxOTksMTcgQEAKIAloeXBlcmNhbGxfbXNyLmFzX3VpbnQ2NCA9IDA7CiAJcmRtc3JsKEhWX1g2NF9NU1JfSFlQRVJDQUxMLCBoeXBlcmNhbGxfbXNyLmFzX3VpbnQ2NCk7CiAKLQlpZiAoIWh5cGVyY2FsbF9tc3IuZW5hYmxlKSB7Ci0JCURQUklOVF9FUlIoVk1CVVMsICJ1bmFibGUgdG8gc2V0IGh5cGVyY2FsbCBwYWdlISEiKTsKLQkJZ290byBDbGVhbnVwOwotCX0KKwlpZiAoIWh5cGVyY2FsbF9tc3IuZW5hYmxlKQorCQlnb3RvIGNsZWFudXA7CiAKIAlodl9jb250ZXh0Lmh5cGVyY2FsbF9wYWdlID0gdmlydGFkZHI7CiAKLQlEUFJJTlRfSU5GTyhWTUJVUywgIkh5cGVyY2FsbCBwYWdlIFZBPSVwLCBQQT0weCUwbGx4IiwKLQkJICAgIGh2X2NvbnRleHQuaHlwZXJjYWxsX3BhZ2UsCi0JCSAgICAodTY0KWh5cGVyY2FsbF9tc3IuZ3Vlc3RfcGh5c2ljYWxfYWRkcmVzcyA8PCBQQUdFX1NISUZUKTsKLQogCS8qIFNldHVwIHRoZSBnbG9iYWwgc2lnbmFsIGV2ZW50IHBhcmFtIGZvciB0aGUgc2lnbmFsIGV2ZW50IGh5cGVyY2FsbCAqLwogCWh2X2NvbnRleHQuc2lnbmFsX2V2ZW50X2J1ZmZlciA9CiAJCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaHZfaW5wdXRfc2lnbmFsX2V2ZW50X2J1ZmZlciksCiAJCQkJR0ZQX0tFUk5FTCk7CiAJaWYgKCFodl9jb250ZXh0LnNpZ25hbF9ldmVudF9idWZmZXIpCi0JCWdvdG8gQ2xlYW51cDsKKwkJZ290byBjbGVhbnVwOwogCiAJaHZfY29udGV4dC5zaWduYWxfZXZlbnRfcGFyYW0gPQogCQkoc3RydWN0IGh2X2lucHV0X3NpZ25hbF9ldmVudCAqKQpAQCAtMjc4LDcgKzIyNCw3IEBACiAKIAlyZXR1cm4gcmV0OwogCi1DbGVhbnVwOgorY2xlYW51cDoKIAlpZiAodmlydGFkZHIpIHsKIAkJaWYgKGh5cGVyY2FsbF9tc3IuZW5hYmxlKSB7CiAJCQloeXBlcmNhbGxfbXNyLmFzX3VpbnQ2NCA9IDA7CkBAIC0zOTQsMjQgKzM0MCwyMCBAQAogCS8qIENoZWNrIHRoZSB2ZXJzaW9uICovCiAJcmRtc3JsKEhWX1g2NF9NU1JfU1ZFUlNJT04sIHZlcnNpb24pOwogCi0JRFBSSU5UX0lORk8oVk1CVVMsICJTeW5JQyB2ZXJzaW9uOiAlbGx4IiwgdmVyc2lvbik7Ci0KIAlodl9jb250ZXh0LnN5bmljX21lc3NhZ2VfcGFnZVtjcHVdID0KIAkJKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7CiAKIAlpZiAoaHZfY29udGV4dC5zeW5pY19tZXNzYWdlX3BhZ2VbY3B1XSA9PSBOVUxMKSB7Ci0JCURQUklOVF9FUlIoVk1CVVMsCi0JCQkgICAidW5hYmxlIHRvIGFsbG9jYXRlIFNZTklDIG1lc3NhZ2UgcGFnZSEhIik7Ci0JCWdvdG8gQ2xlYW51cDsKKwkJcHJfZXJyKCJVbmFibGUgdG8gYWxsb2NhdGUgU1lOSUMgbWVzc2FnZSBwYWdlXG4iKTsKKwkJZ290byBjbGVhbnVwOwogCX0KIAogCWh2X2NvbnRleHQuc3luaWNfZXZlbnRfcGFnZVtjcHVdID0KIAkJKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7CiAKIAlpZiAoaHZfY29udGV4dC5zeW5pY19ldmVudF9wYWdlW2NwdV0gPT0gTlVMTCkgewotCQlEUFJJTlRfRVJSKFZNQlVTLAotCQkJICAgInVuYWJsZSB0byBhbGxvY2F0ZSBTWU5JQyBldmVudCBwYWdlISEiKTsKLQkJZ290byBDbGVhbnVwOworCQlwcl9lcnIoIlVuYWJsZSB0byBhbGxvY2F0ZSBTWU5JQyBldmVudCBwYWdlXG4iKTsKKwkJZ290byBjbGVhbnVwOwogCX0KIAogCS8qIFNldHVwIHRoZSBTeW5pYydzIG1lc3NhZ2UgcGFnZSAqLwpAQCAtNDIwLDggKzM2Miw2IEBACiAJc2ltcC5iYXNlX3NpbXBfZ3BhID0gdmlydF90b19waHlzKGh2X2NvbnRleHQuc3luaWNfbWVzc2FnZV9wYWdlW2NwdV0pCiAJCT4+IFBBR0VfU0hJRlQ7CiAKLQlEUFJJTlRfREJHKFZNQlVTLCAiSFZfWDY0X01TUl9TSU1QIG1zciBzZXQgdG86ICVsbHgiLCBzaW1wLmFzX3VpbnQ2NCk7Ci0KIAl3cm1zcmwoSFZfWDY0X01TUl9TSU1QLCBzaW1wLmFzX3VpbnQ2NCk7CiAKIAkvKiBTZXR1cCB0aGUgU3luaWMncyBldmVudCBwYWdlICovCkBAIC00MzAsMTQgKzM3MCw4IEBACiAJc2llZnAuYmFzZV9zaWVmcF9ncGEgPSB2aXJ0X3RvX3BoeXMoaHZfY29udGV4dC5zeW5pY19ldmVudF9wYWdlW2NwdV0pCiAJCT4+IFBBR0VfU0hJRlQ7CiAKLQlEUFJJTlRfREJHKFZNQlVTLCAiSFZfWDY0X01TUl9TSUVGUCBtc3Igc2V0IHRvOiAlbGx4Iiwgc2llZnAuYXNfdWludDY0KTsKLQogCXdybXNybChIVl9YNjRfTVNSX1NJRUZQLCBzaWVmcC5hc191aW50NjQpOwogCi0JLyogU2V0dXAgdGhlIGludGVyY2VwdGlvbiBTSU5ULiAqLwotCS8qIHdybXNybCgoSFZfWDY0X01TUl9TSU5UMCArIEhWX1NZTklDX0lOVEVSQ0VQVElPTl9TSU5UX0lOREVYKSwgKi8KLQkvKgkgIGludGVyY2VwdGlvblNpbnQuYXNfdWludDY0KTsgKi8KLQogCS8qIFNldHVwIHRoZSBzaGFyZWQgU0lOVC4gKi8KIAlyZG1zcmwoSFZfWDY0X01TUl9TSU5UMCArIFZNQlVTX01FU1NBR0VfU0lOVCwgc2hhcmVkX3NpbnQuYXNfdWludDY0KTsKIApAQCAtNDQ2LDkgKzM4MCw2IEBACiAJc2hhcmVkX3NpbnQubWFza2VkID0gZmFsc2U7CiAJc2hhcmVkX3NpbnQuYXV0b19lb2kgPSB0cnVlOwogCi0JRFBSSU5UX0RCRyhWTUJVUywgIkhWX1g2NF9NU1JfU0lOVDEgbXNyIHNldCB0bzogJWxseCIsCi0JCSAgIHNoYXJlZF9zaW50LmFzX3VpbnQ2NCk7Ci0KIAl3cm1zcmwoSFZfWDY0X01TUl9TSU5UMCArIFZNQlVTX01FU1NBR0VfU0lOVCwgc2hhcmVkX3NpbnQuYXNfdWludDY0KTsKIAogCS8qIEVuYWJsZSB0aGUgZ2xvYmFsIHN5bmljIGJpdCAqLwpAQCAtNDYwLDcgKzM5MSw3IEBACiAJaHZfY29udGV4dC5zeW5pY19pbml0aWFsaXplZCA9IHRydWU7CiAJcmV0dXJuOwogCi1DbGVhbnVwOgorY2xlYW51cDoKIAlpZiAoaHZfY29udGV4dC5zeW5pY19ldmVudF9wYWdlW2NwdV0pCiAJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylodl9jb250ZXh0LnN5bmljX2V2ZW50X3BhZ2VbY3B1XSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9odi5oIGIvZHJpdmVycy9zdGFnaW5nL2h2L2h2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyOWFmZjgxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9odi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLS8qCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA5LCBNaWNyb3NvZnQgQ29ycG9yYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCi0gKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKLSAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUKLSAqIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBLgotICoKLSAqIEF1dGhvcnM6Ci0gKiAgIEhhaXlhbmcgWmhhbmcgPGhhaXlhbmd6QG1pY3Jvc29mdC5jb20+Ci0gKiAgIEhhbmsgSmFuc3NlbiAgPGhqYW5zc2VuQG1pY3Jvc29mdC5jb20+Ci0gKgotICovCi0KLQotI2lmbmRlZiBfX0hWX0hfXwotI2RlZmluZSBfX0hWX0hfXwotCi0jaW5jbHVkZSAiaHZfYXBpLmgiCi0KLWVudW0gewotCVZNQlVTX01FU1NBR0VfQ09OTkVDVElPTl9JRAk9IDEsCi0JVk1CVVNfTUVTU0FHRV9QT1JUX0lECQk9IDEsCi0JVk1CVVNfRVZFTlRfQ09OTkVDVElPTl9JRAk9IDIsCi0JVk1CVVNfRVZFTlRfUE9SVF9JRAkJPSAyLAotCVZNQlVTX01PTklUT1JfQ09OTkVDVElPTl9JRAk9IDMsCi0JVk1CVVNfTU9OSVRPUl9QT1JUX0lECQk9IDMsCi0JVk1CVVNfTUVTU0FHRV9TSU5UCQk9IDIsCi19OwotCi0vKiAjZGVmaW5lcyAqLwotCi0jZGVmaW5lIEhWX1BSRVNFTlRfQklUCQkJMHg4MDAwMDAwMAotCi0jZGVmaW5lIEhWX0xJTlVYX0dVRVNUX0lEX0xPCQkweDAwMDAwMDAwCi0jZGVmaW5lIEhWX0xJTlVYX0dVRVNUX0lEX0hJCQkweEIxNkIwMEI1Ci0jZGVmaW5lIEhWX0xJTlVYX0dVRVNUX0lECQkoKCh1NjQpSFZfTElOVVhfR1VFU1RfSURfSEkgPDwgMzIpIHwgXAotCQkJCQkgICBIVl9MSU5VWF9HVUVTVF9JRF9MTykKLQotI2RlZmluZSBIVl9DUFVfUE9XRVJfTUFOQUdFTUVOVAkJKDEgPDwgMCkKLSNkZWZpbmUgSFZfUkVDT01NRU5EQVRJT05TX01BWAkJNAotCi0jZGVmaW5lIEhWX1g2NF9NQVgJCQk1Ci0jZGVmaW5lIEhWX0NBUFNfTUFYCQkJOAotCi0KLSNkZWZpbmUgSFZfSFlQRVJDQUxMX1BBUkFNX0FMSUdOCXNpemVvZih1NjQpCi0KLQotLyogU2VydmljZSBkZWZpbml0aW9ucyAqLwotCi0jZGVmaW5lIEhWX1NFUlZJQ0VfUEFSRU5UX1BPUlQJCQkJKDApCi0jZGVmaW5lIEhWX1NFUlZJQ0VfUEFSRU5UX0NPTk5FQ1RJT04JCQkoMCkKLQotI2RlZmluZSBIVl9TRVJWSUNFX0NPTk5FQ1RfUkVTUE9OU0VfU1VDQ0VTUwkJKDApCi0jZGVmaW5lIEhWX1NFUlZJQ0VfQ09OTkVDVF9SRVNQT05TRV9JTlZBTElEX1BBUkFNRVRFUgkoMSkKLSNkZWZpbmUgSFZfU0VSVklDRV9DT05ORUNUX1JFU1BPTlNFX1VOS05PV05fU0VSVklDRQkoMikKLSNkZWZpbmUgSFZfU0VSVklDRV9DT05ORUNUX1JFU1BPTlNFX0NPTk5FQ1RJT05fUkVKRUNURUQJKDMpCi0KLSNkZWZpbmUgSFZfU0VSVklDRV9DT05ORUNUX1JFUVVFU1RfTUVTU0FHRV9JRAkJKDEpCi0jZGVmaW5lIEhWX1NFUlZJQ0VfQ09OTkVDVF9SRVNQT05TRV9NRVNTQUdFX0lECQkoMikKLSNkZWZpbmUgSFZfU0VSVklDRV9ESVNDT05ORUNUX1JFUVVFU1RfTUVTU0FHRV9JRAkoMykKLSNkZWZpbmUgSFZfU0VSVklDRV9ESVNDT05ORUNUX1JFU1BPTlNFX01FU1NBR0VfSUQJKDQpCi0jZGVmaW5lIEhWX1NFUlZJQ0VfTUFYX01FU1NBR0VfSUQJCQkJKDQpCi0KLSNkZWZpbmUgSFZfU0VSVklDRV9QUk9UT0NPTF9WRVJTSU9OICgweDAwMTApCi0jZGVmaW5lIEhWX0NPTk5FQ1RfUEFZTE9BRF9CWVRFX0NPVU5UIDY0Ci0KLS8qICNkZWZpbmUgVk1CVVNfUkVWSVNJT05fTlVNQkVSCTYgKi8KLQotLyogT3VyIGxvY2FsIHZtYnVzJ3MgcG9ydCBhbmQgY29ubmVjdGlvbiBpZC4gQW55dGhpbmcgPjAgaXMgZmluZSAqLwotLyogI2RlZmluZSBWTUJVU19QT1JUX0lECQkxMSAqLwotCi0vKiA2MjgxODBCOC0zMDhELTRjNWUtQjdEQi0xQkVCNjJFNjJFRjQgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaHZfZ3VpZCBWTUJVU19TRVJWSUNFX0lEID0gewotCS5kYXRhID0gewotCQkweGI4LCAweDgwLCAweDgxLCAweDYyLCAweDhkLCAweDMwLCAweDVlLCAweDRjLAotCQkweGI3LCAweGRiLCAweDFiLCAweGViLCAweDYyLCAweGU2LCAweDJlLCAweGY0Ci0JfSwKLX07Ci0KLSNkZWZpbmUgTUFYX05VTV9DUFVTCTMyCi0KLQotc3RydWN0IGh2X2lucHV0X3NpZ25hbF9ldmVudF9idWZmZXIgewotCXU2NCBhbGlnbjg7Ci0Jc3RydWN0IGh2X2lucHV0X3NpZ25hbF9ldmVudCBldmVudDsKLX07Ci0KLXN0cnVjdCBodl9jb250ZXh0IHsKLQkvKiBXZSBvbmx5IHN1cHBvcnQgcnVubmluZyBvbiB0b3Agb2YgSHlwZXItVgotCSogU28gYXQgdGhpcyBwb2ludCB0aGlzIHJlYWxseSBjYW4gb25seSBjb250YWluIHRoZSBIeXBlci1WIElECi0JKi8KLQl1NjQgZ3Vlc3RpZDsKLQotCXZvaWQgKmh5cGVyY2FsbF9wYWdlOwotCi0JYm9vbCBzeW5pY19pbml0aWFsaXplZDsKLQotCS8qCi0JICogVGhpcyBpcyB1c2VkIGFzIGFuIGlucHV0IHBhcmFtIHRvIEh2Q2FsbFNpZ25hbEV2ZW50IGh5cGVyY2FsbC4gVGhlCi0JICogaW5wdXQgcGFyYW0gaXMgaW1tdXRhYmxlIGluIG91ciB1c2FnZSBhbmQgbXVzdCBiZSBkeW5hbWljIG1lbSAodnMKLQkgKiBzdGFjayBvciBnbG9iYWwpLiAqLwotCXN0cnVjdCBodl9pbnB1dF9zaWduYWxfZXZlbnRfYnVmZmVyICpzaWduYWxfZXZlbnRfYnVmZmVyOwotCS8qIDgtYnl0ZXMgYWxpZ25lZCBvZiB0aGUgYnVmZmVyIGFib3ZlICovCi0Jc3RydWN0IGh2X2lucHV0X3NpZ25hbF9ldmVudCAqc2lnbmFsX2V2ZW50X3BhcmFtOwotCi0Jdm9pZCAqc3luaWNfbWVzc2FnZV9wYWdlW01BWF9OVU1fQ1BVU107Ci0Jdm9pZCAqc3luaWNfZXZlbnRfcGFnZVtNQVhfTlVNX0NQVVNdOwotfTsKLQotZXh0ZXJuIHN0cnVjdCBodl9jb250ZXh0IGh2X2NvbnRleHQ7Ci0KLQotLyogSHYgSW50ZXJmYWNlICovCi0KLWV4dGVybiBpbnQgaHZfaW5pdCh2b2lkKTsKLQotZXh0ZXJuIHZvaWQgaHZfY2xlYW51cCh2b2lkKTsKLQotZXh0ZXJuIHUxNiBodl9wb3N0X21lc3NhZ2UodW5pb24gaHZfY29ubmVjdGlvbl9pZCBjb25uZWN0aW9uX2lkLAotCQkJIGVudW0gaHZfbWVzc2FnZV90eXBlIG1lc3NhZ2VfdHlwZSwKLQkJCSB2b2lkICpwYXlsb2FkLCBzaXplX3QgcGF5bG9hZF9zaXplKTsKLQotZXh0ZXJuIHUxNiBodl9zaWduYWxfZXZlbnQodm9pZCk7Ci0KLWV4dGVybiB2b2lkIGh2X3N5bmljX2luaXQodm9pZCAqaXJxYXJnKTsKLQotZXh0ZXJuIHZvaWQgaHZfc3luaWNfY2xlYW51cCh2b2lkICphcmcpOwotCi0jZW5kaWYgLyogX19IVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9odl9hcGkuaCBiL2RyaXZlcnMvc3RhZ2luZy9odi9odl9hcGkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNhNzIyOC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvaHZfYXBpLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MTAgKzAsMCBAQAotLyoKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDksIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKLSAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAotICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZQotICogUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCi0gKgotICogQXV0aG9yczoKLSAqICAgSGFpeWFuZyBaaGFuZyA8aGFpeWFuZ3pAbWljcm9zb2Z0LmNvbT4KLSAqICAgSGFuayBKYW5zc2VuICA8aGphbnNzZW5AbWljcm9zb2Z0LmNvbT4KLSAqCi0gKi8KLSNpZm5kZWYgX19IVl9BUElfSAotI2RlZmluZSBfX0hWX0FQSV9ICi0KLXN0cnVjdCBodl9ndWlkIHsKLQl1bnNpZ25lZCBjaGFyIGRhdGFbMTZdOwotfTsKLQotCi0KLS8qIFN0YXR1cyBjb2RlcyBmb3IgaHlwZXJ2aXNvciBvcGVyYXRpb25zLiAqLwotCi0vKgotICogSFZfU1RBVFVTX1NVQ0NFU1MKLSAqIFRoZSBzcGVjaWZpZWQgaHlwZXJjYWxsIHN1Y2NlZWRlZAotICovCi0jZGVmaW5lIEhWX1NUQVRVU19TVUNDRVNTCQkJCSgodTE2KTB4MDAwMCkKLQotLyoKLSAqIEhWX1NUQVRVU19JTlZBTElEX0hZUEVSQ0FMTF9DT0RFCi0gKiBUaGUgaHlwZXJ2aXNvciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBvcGVyYXRpb24gYmVjYXVzZSB0aGUgc3BlY2lmaWVkCi0gKiBoeXBlcmNhbGwgY29kZSBpcyBub3Qgc3VwcG9ydGVkLgotICovCi0jZGVmaW5lIEhWX1NUQVRVU19JTlZBTElEX0hZUEVSQ0FMTF9DT0RFCQkoKHUxNikweDAwMDIpCi0KLS8qCi0gKiBIVl9TVEFUVVNfSU5WQUxJRF9IWVBFUkNBTExfSU5QVVQKLSAqIFRoZSBoeXBlcnZpc29yIGRvZXMgbm90IHN1cHBvcnQgdGhlIG9wZXJhdGlvbiBiZWNhdXNlIHRoZSBlbmNvZGluZyBmb3IgdGhlCi0gKiBoeXBlcmNhbGwgaW5wdXQgcmVnaXN0ZXIgaXMgbm90IHN1cHBvcnRlZC4KLSAqLwotI2RlZmluZSBIVl9TVEFUVVNfSU5WQUxJRF9IWVBFUkNBTExfSU5QVVQJCSgodTE2KTB4MDAwMykKLQotLyoKLSAqIEhWX1NUQVRVU19JTlZBTElEX0FMSUdOTUVOVAotICogVGhlIGh5cGVydmlzb3IgY291bGQgbm90IHBlcmZvcm0gdGhlIG9wZXJhdGlvbiBiZWNhdXNlIGEgcGFyYW1ldGVyIGhhcyBhbgotICogaW52YWxpZCBhbGlnbm1lbnQuCi0gKi8KLSNkZWZpbmUgSFZfU1RBVFVTX0lOVkFMSURfQUxJR05NRU5UCQkJKCh1MTYpMHgwMDA0KQotCi0vKgotICogSFZfU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSCi0gKiBUaGUgaHlwZXJ2aXNvciBjb3VsZCBub3QgcGVyZm9ybSB0aGUgb3BlcmF0aW9uIGJlY2F1c2UgYW4gaW52YWxpZCBwYXJhbWV0ZXIKLSAqIHdhcyBzcGVjaWZpZWQuCi0gKi8KLSNkZWZpbmUgSFZfU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSCQkJKCh1MTYpMHgwMDA1KQotCi0vKgotICogSFZfU1RBVFVTX0FDQ0VTU19ERU5JRUQKLSAqIEFjY2VzcyB0byB0aGUgc3BlY2lmaWVkIG9iamVjdCB3YXMgZGVuaWVkLgotICovCi0jZGVmaW5lIEhWX1NUQVRVU19BQ0NFU1NfREVOSUVECQkJCSgodTE2KTB4MDAwNikKLQotLyoKLSAqIEhWX1NUQVRVU19JTlZBTElEX1BBUlRJVElPTl9TVEFURQotICogVGhlIGh5cGVydmlzb3IgY291bGQgbm90IHBlcmZvcm0gdGhlIG9wZXJhdGlvbiBiZWNhdXNlIHRoZSBwYXJ0aXRpb24gaXMKLSAqIGVudGVyaW5nIG9yIGluIGFuIGludmFsaWQgc3RhdGUuCi0gKi8KLSNkZWZpbmUgSFZfU1RBVFVTX0lOVkFMSURfUEFSVElUSU9OX1NUQVRFCQkoKHUxNikweDAwMDcpCi0KLS8qCi0gKiBIVl9TVEFUVVNfT1BFUkFUSU9OX0RFTklFRAotICogVGhlIG9wZXJhdGlvbiBpcyBub3QgYWxsb3dlZCBpbiB0aGUgY3VycmVudCBzdGF0ZS4KLSAqLwotI2RlZmluZSBIVl9TVEFUVVNfT1BFUkFUSU9OX0RFTklFRAkJCSgodTE2KTB4MDAwOCkKLQotLyoKLSAqIEhWX1NUQVRVU19VTktOT1dOX1BST1BFUlRZCi0gKiBUaGUgaHlwZXJ2aXNvciBkb2VzIG5vdCByZWNvZ25pemUgdGhlIHNwZWNpZmllZCBwYXJ0aXRpb24gcHJvcGVydHkuCi0gKi8KLSNkZWZpbmUgSFZfU1RBVFVTX1VOS05PV05fUFJPUEVSVFkJCQkoKHUxNikweDAwMDkpCi0KLS8qCi0gKiBIVl9TVEFUVVNfUFJPUEVSVFlfVkFMVUVfT1VUX09GX1JBTkdFCi0gKiBUaGUgc3BlY2lmaWVkIHZhbHVlIG9mIGEgcGFydGl0aW9uIHByb3BlcnR5IGlzIG91dCBvZiByYW5nZSBvciB2aW9sYXRlcyBhbgotICogaW52YXJpYW50LgotICovCi0jZGVmaW5lIEhWX1NUQVRVU19QUk9QRVJUWV9WQUxVRV9PVVRfT0ZfUkFOR0UJCSgodTE2KTB4MDAwQSkKLQotLyoKLSAqIEhWX1NUQVRVU19JTlNVRkZJQ0lFTlRfTUVNT1JZCi0gKiBUaGVyZSBpcyBub3QgZW5vdWdoIG1lbW9yeSBpbiB0aGUgaHlwZXJ2aXNvciBwb29sIHRvIGNvbXBsZXRlIHRoZSBvcGVyYXRpb24uCi0gKi8KLSNkZWZpbmUgSFZfU1RBVFVTX0lOU1VGRklDSUVOVF9NRU1PUlkJCQkoKHUxNikweDAwMEIpCi0KLS8qCi0gKiBIVl9TVEFUVVNfUEFSVElUSU9OX1RPT19ERUVQCi0gKiBUaGUgbWF4aW11bSBwYXJ0aXRpb24gZGVwdGggaGFzIGJlZW4gZXhjZWVkZWQgZm9yIHRoZSBwYXJ0aXRpb24gaGllcmFyY2h5LgotICovCi0jZGVmaW5lIEhWX1NUQVRVU19QQVJUSVRJT05fVE9PX0RFRVAJCQkoKHUxNikweDAwMEMpCi0KLS8qCi0gKiBIVl9TVEFUVVNfSU5WQUxJRF9QQVJUSVRJT05fSUQKLSAqIEEgcGFydGl0aW9uIHdpdGggdGhlIHNwZWNpZmllZCBwYXJ0aXRpb24gSWQgZG9lcyBub3QgZXhpc3QuCi0gKi8KLSNkZWZpbmUgSFZfU1RBVFVTX0lOVkFMSURfUEFSVElUSU9OX0lECQkJKCh1MTYpMHgwMDBEKQotCi0vKgotICogSFZfU1RBVFVTX0lOVkFMSURfVlBfSU5ERVgKLSAqIFRoZSBoeXBlcnZpc29yIGNvdWxkIG5vdCBwZXJmb3JtIHRoZSBvcGVyYXRpb24gYmVjYXVzZSB0aGUgc3BlY2lmaWVkIFZQCi0gKiBpbmRleCBpcyBpbnZhbGlkLgotICovCi0jZGVmaW5lIEhWX1NUQVRVU19JTlZBTElEX1ZQX0lOREVYCQkJKCh1MTYpMHgwMDBFKQotCi0vKgotICogSFZfU1RBVFVTX05PVF9GT1VORAotICogVGhlIGl0ZXJhdGlvbiBpcyBjb21wbGV0ZTsgbm8gYWRkaXRpb24gaXRlbXMgaW4gdGhlIGl0ZXJhdGlvbiBjb3VsZCBiZQotICogZm91bmQuCi0gKi8KLSNkZWZpbmUgSFZfU1RBVFVTX05PVF9GT1VORAkJCQkoKHUxNikweDAwMTApCi0KLS8qCi0gKiBIVl9TVEFUVVNfSU5WQUxJRF9QT1JUX0lECi0gKiBUaGUgaHlwZXJ2aXNvciBjb3VsZCBub3QgcGVyZm9ybSB0aGUgb3BlcmF0aW9uIGJlY2F1c2UgdGhlIHNwZWNpZmllZCBwb3J0Ci0gKiBpZGVudGlmaWVyIGlzIGludmFsaWQuCi0gKi8KLSNkZWZpbmUgSFZfU1RBVFVTX0lOVkFMSURfUE9SVF9JRAkJCSgodTE2KTB4MDAxMSkKLQotLyoKLSAqIEhWX1NUQVRVU19JTlZBTElEX0NPTk5FQ1RJT05fSUQKLSAqIFRoZSBoeXBlcnZpc29yIGNvdWxkIG5vdCBwZXJmb3JtIHRoZSBvcGVyYXRpb24gYmVjYXVzZSB0aGUgc3BlY2lmaWVkCi0gKiBjb25uZWN0aW9uIGlkZW50aWZpZXIgaXMgaW52YWxpZC4KLSAqLwotI2RlZmluZSBIVl9TVEFUVVNfSU5WQUxJRF9DT05ORUNUSU9OX0lECQkJKCh1MTYpMHgwMDEyKQotCi0vKgotICogSFZfU1RBVFVTX0lOU1VGRklDSUVOVF9CVUZGRVJTCi0gKiBZb3UgZGlkIG5vdCBzdXBwbHkgZW5vdWdoIG1lc3NhZ2UgYnVmZmVycyB0byBzZW5kIGEgbWVzc2FnZS4KLSAqLwotI2RlZmluZSBIVl9TVEFUVVNfSU5TVUZGSUNJRU5UX0JVRkZFUlMJCQkoKHUxNikweDAwMTMpCi0KLS8qCi0gKiBIVl9TVEFUVVNfTk9UX0FDS05PV0xFREdFRAotICogVGhlIHByZXZpb3VzIHZpcnR1YWwgaW50ZXJydXB0IGhhcyBub3QgYmVlbiBhY2tub3dsZWRnZWQuCi0gKi8KLSNkZWZpbmUgSFZfU1RBVFVTX05PVF9BQ0tOT1dMRURHRUQJCQkoKHUxNikweDAwMTQpCi0KLS8qCi0gKiBIVl9TVEFUVVNfSU5WQUxJRF9WUF9TVEFURQotICogQSB2aXJ0dWFsIHByb2Nlc3NvciBpcyBub3QgaW4gdGhlIGNvcnJlY3Qgc3RhdGUgZm9yIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUKLSAqIGluZGljYXRlZCBvcGVyYXRpb24uCi0gKi8KLSNkZWZpbmUgSFZfU1RBVFVTX0lOVkFMSURfVlBfU1RBVEUJCQkoKHUxNikweDAwMTUpCi0KLS8qCi0gKiBIVl9TVEFUVVNfQUNLTk9XTEVER0VECi0gKiBUaGUgcHJldmlvdXMgdmlydHVhbCBpbnRlcnJ1cHQgaGFzIGFscmVhZHkgYmVlbiBhY2tub3dsZWRnZWQuCi0gKi8KLSNkZWZpbmUgSFZfU1RBVFVTX0FDS05PV0xFREdFRAkJCQkoKHUxNikweDAwMTYpCi0KLS8qCi0gKiBIVl9TVEFUVVNfSU5WQUxJRF9TQVZFX1JFU1RPUkVfU1RBVEUKLSAqIFRoZSBpbmRpY2F0ZWQgcGFydGl0aW9uIGlzIG5vdCBpbiBhIHZhbGlkIHN0YXRlIGZvciBzYXZpbmcgb3IgcmVzdG9yaW5nLgotICovCi0jZGVmaW5lIEhWX1NUQVRVU19JTlZBTElEX1NBVkVfUkVTVE9SRV9TVEFURQkJKCh1MTYpMHgwMDE3KQotCi0vKgotICogSFZfU1RBVFVTX0lOVkFMSURfU1lOSUNfU1RBVEUKLSAqIFRoZSBoeXBlcnZpc29yIGNvdWxkIG5vdCBjb21wbGV0ZSB0aGUgb3BlcmF0aW9uIGJlY2F1c2UgYSByZXF1aXJlZCBmZWF0dXJlCi0gKiBvZiB0aGUgc3ludGhldGljIGludGVycnVwdCBjb250cm9sbGVyIChTeW5JQykgd2FzIGRpc2FibGVkLgotICovCi0jZGVmaW5lIEhWX1NUQVRVU19JTlZBTElEX1NZTklDX1NUQVRFCQkJKCh1MTYpMHgwMDE4KQotCi0vKgotICogSFZfU1RBVFVTX09CSkVDVF9JTl9VU0UKLSAqIFRoZSBoeXBlcnZpc29yIGNvdWxkIG5vdCBwZXJmb3JtIHRoZSBvcGVyYXRpb24gYmVjYXVzZSB0aGUgb2JqZWN0IG9yIHZhbHVlCi0gKiB3YXMgZWl0aGVyIGFscmVhZHkgaW4gdXNlIG9yIGJlaW5nIHVzZWQgZm9yIGEgcHVycG9zZSB0aGF0IHdvdWxkIG5vdCBwZXJtaXQKLSAqIGNvbXBsZXRpbmcgdGhlIG9wZXJhdGlvbi4KLSAqLwotI2RlZmluZSBIVl9TVEFUVVNfT0JKRUNUX0lOX1VTRQkJCQkoKHUxNikweDAwMTkpCi0KLS8qCi0gKiBIVl9TVEFUVVNfSU5WQUxJRF9QUk9YSU1JVFlfRE9NQUlOX0lORk8KLSAqIFRoZSBwcm94aW1pdHkgZG9tYWluIGluZm9ybWF0aW9uIGlzIGludmFsaWQuCi0gKi8KLSNkZWZpbmUgSFZfU1RBVFVTX0lOVkFMSURfUFJPWElNSVRZX0RPTUFJTl9JTkZPCQkoKHUxNikweDAwMUEpCi0KLS8qCi0gKiBIVl9TVEFUVVNfTk9fREFUQQotICogQW4gYXR0ZW1wdCB0byByZXRyaWV2ZSBkZWJ1Z2dpbmcgZGF0YSBmYWlsZWQgYmVjYXVzZSBub25lIHdhcyBhdmFpbGFibGUuCi0gKi8KLSNkZWZpbmUgSFZfU1RBVFVTX05PX0RBVEEJCQkJKCh1MTYpMHgwMDFCKQotCi0vKgotICogSFZfU1RBVFVTX0lOQUNUSVZFCi0gKiBUaGUgcGh5c2ljYWwgY29ubmVjdGlvbiBiZWluZyB1c2VkIGZvciBkZWJ1Z2dnaW5nIGhhcyBub3QgcmVjb3JkZWQgYW55Ci0gKiByZWNlaXZlIGFjdGl2aXR5IHNpbmNlIHRoZSBsYXN0IG9wZXJhdGlvbi4KLSAqLwotI2RlZmluZSBIVl9TVEFUVVNfSU5BQ1RJVkUJCQkJKCh1MTYpMHgwMDFDKQotCi0vKgotICogSFZfU1RBVFVTX05PX1JFU09VUkNFUwotICogVGhlcmUgYXJlIG5vdCBlbm91Z2ggcmVzb3VyY2VzIHRvIGNvbXBsZXRlIHRoZSBvcGVyYXRpb24uCi0gKi8KLSNkZWZpbmUgSFZfU1RBVFVTX05PX1JFU09VUkNFUwkJCQkoKHUxNikweDAwMUQpCi0KLS8qCi0gKiBIVl9TVEFUVVNfRkVBVFVSRV9VTkFWQUlMQUJMRQotICogQSBoeXBlcnZpc29yIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZSB0byB0aGUgdXNlci4KLSAqLwotI2RlZmluZSBIVl9TVEFUVVNfRkVBVFVSRV9VTkFWQUlMQUJMRQkJCSgodTE2KTB4MDAxRSkKLQotLyoKLSAqIEhWX1NUQVRVU19VTlNVQ0NFU1NGVUwKLSAqIHtPcGVyYXRpb24gRmFpbGVkfSBUaGUgcmVxdWVzdGVkIG9wZXJhdGlvbiB3YXMgdW5zdWNjZXNzZnVsLgotICovCi0jZGVmaW5lIEhWX1NUQVRVU19VTlNVQ0NFU1NGVUwJCQkJKCh1MTYpMHgxMDAxKQotCi0vKgotICogSFZfU1RBVFVTX0lOU1VGRklDSUVOVF9CVUZGRVIKLSAqIFRoZSBzcGVjaWZpZWQgYnVmZmVyIHdhcyB0b28gc21hbGwgdG8gY29udGFpbiBhbGwgb2YgdGhlIHJlcXVlc3RlZCBkYXRhLgotICovCi0jZGVmaW5lIEhWX1NUQVRVU19JTlNVRkZJQ0lFTlRfQlVGRkVSCQkJKCh1MTYpMHgxMDAyKQotCi0vKgotICogSFZfU1RBVFVTX0dQQV9OT1RfUFJFU0VOVAotICogVGhlIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgaXMgbm90IGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggYSBzeXN0ZW0KLSAqIHBoeXNpY2FsIGFkZHJlc3MuCi0gKi8KLSNkZWZpbmUgSFZfU1RBVFVTX0dQQV9OT1RfUFJFU0VOVAkJCSgodTE2KTB4MTAwMykKLQotLyoKLSAqIEhWX1NUQVRVU19HVUVTVF9QQUdFX0ZBVUxUCi0gKiBUaGUgb3BlcmF0aW9uIHdvdWxkIGhhdmUgcmVzdWx0ZWQgaW4gYSBwYWdlIGZhdWx0IGluIHRoZSBndWVzdC4KLSAqLwotI2RlZmluZSBIVl9TVEFUVVNfR1VFU1RfUEFHRV9GQVVMVAkJCSgodTE2KTB4MTAwNCkKLQotLyoKLSAqIEhWX1NUQVRVU19SVU5ET1dOX0RJU0FCTEVECi0gKiBUaGUgb3BlcmF0aW9uIGNhbm5vdCBwcm9jZWVkIGFzIHRoZSBydW5kb3duIG9iamVjdCB3YXMgbWFya2VkIGRpc2FibGVkLgotICovCi0jZGVmaW5lIEhWX1NUQVRVU19SVU5ET1dOX0RJU0FCTEVECQkJKCh1MTYpMHgxMDA1KQotCi0vKgotICogSFZfU1RBVFVTX0tFWV9BTFJFQURZX0VYSVNUUwotICogVGhlIGVudHJ5IGNhbm5vdCBiZSBhZGRlZCBhcyBhbm90aGVyIGVudHJ5IHdpdGggdGhlIHNhbWUga2V5IGFscmVhZHkgZXhpc3RzLgotICovCi0jZGVmaW5lIEhWX1NUQVRVU19LRVlfQUxSRUFEWV9FWElTVFMJCQkoKHUxNikweDEwMDYpCi0KLS8qCi0gKiBIVl9TVEFUVVNfR1BBX0lOVEVSQ0VQVAotICogVGhlIG9wZXJhdGlvbiByZXN1bHRlZCBhbiBpbnRlcmNlcHQgb24gYSByZWdpb24gb2YgZ3Vlc3QgcGh5c2ljYWwgbWVtb3J5LgotICovCi0jZGVmaW5lIEhWX1NUQVRVU19HUEFfSU5URVJDRVBUCQkJCSgodTE2KTB4MTAwNykKLQotLyoKLSAqIEhWX1NUQVRVU19HVUVTVF9HRU5FUkFMX1BST1RFQ1RJT05fRkFVTFQKLSAqIFRoZSBvcGVyYXRpb24gd291bGQgaGF2ZSByZXN1bHRlZCBpbiBhIGdlbmVyYWwgcHJvdGVjdGlvbiBmYXVsdCBpbiB0aGUKLSAqIGd1ZXN0LgotICovCi0jZGVmaW5lIEhWX1NUQVRVU19HVUVTVF9HRU5FUkFMX1BST1RFQ1RJT05fRkFVTFQJKCh1MTYpMHgxMDA4KQotCi0vKgotICogSFZfU1RBVFVTX0dVRVNUX1NUQUNLX0ZBVUxUCi0gKiBUaGUgb3BlcmF0aW9uIHdvdWxkIGhhdmUgcmVzdWx0ZWQgaW4gYSBzdGFjayBmYXVsdCBpbiB0aGUgZ3Vlc3QuCi0gKi8KLSNkZWZpbmUgSFZfU1RBVFVTX0dVRVNUX1NUQUNLX0ZBVUxUCQkJKCh1MTYpMHgxMDA5KQotCi0vKgotICogSFZfU1RBVFVTX0dVRVNUX0lOVkFMSURfT1BDT0RFX0ZBVUxUCi0gKiBUaGUgb3BlcmF0aW9uIHdvdWxkIGhhdmUgcmVzdWx0ZWQgaW4gYW4gaW52YWxpZCBvcGNvZGUgZmF1bHQgaW4gdGhlIGd1ZXN0LgotICovCi0jZGVmaW5lIEhWX1NUQVRVU19HVUVTVF9JTlZBTElEX09QQ09ERV9GQVVMVAkJKCh1MTYpMHgxMDBBKQotCi0vKgotICogSFZfU1RBVFVTX0ZJTkFMSVpFX0lOQ09NUExFVEUKLSAqIFRoZSBwYXJ0aXRpb24gaXMgbm90IGNvbXBsZXRlbHkgZmluYWxpemVkLgotICovCi0jZGVmaW5lIEhWX1NUQVRVU19GSU5BTElaRV9JTkNPTVBMRVRFCQkJKCh1MTYpMHgxMDBCKQotCi0vKgotICogSFZfU1RBVFVTX0dVRVNUX01BQ0hJTkVfQ0hFQ0tfQUJPUlQKLSAqIFRoZSBvcGVyYXRpb24gd291bGQgaGF2ZSByZXN1bHRlZCBpbiBhbiBtYWNoaW5lIGNoZWNrIGFib3J0IGluIHRoZSBndWVzdC4KLSAqLwotI2RlZmluZSBIVl9TVEFUVVNfR1VFU1RfTUFDSElORV9DSEVDS19BQk9SVAkJKCh1MTYpMHgxMDBDKQotCi0vKgotICogSFZfU1RBVFVTX0lMTEVHQUxfT1ZFUkxBWV9BQ0NFU1MKLSAqIEFuIGlsbGVnYWwgYWNjZXNzIHdhcyBhdHRlbXB0ZWQgdG8gYW4gb3ZlcmxheSBwYWdlLgotICovCi0jZGVmaW5lIEhWX1NUQVRVU19JTExFR0FMX09WRVJMQVlfQUNDRVNTCQkoKHUxNikweDEwMEQpCi0KLS8qCi0gKiBIVl9TVEFUVVNfSU5TVUZGSUNJRU5UX1NZU1RFTV9WQQotICogVGhlcmUgaXMgbm90IGVub3VnaCBzeXN0ZW0gVkEgc3BhY2UgYXZhaWxhYmxlIHRvIHNhdGlzZnkgdGhlIHJlcXVlc3QsCi0gKi8KLSNkZWZpbmUgSFZfU1RBVFVTX0lOU1VGRklDSUVOVF9TWVNURU1fVkEJCSgodTE2KTB4MTAwRSkKLQotLyoKLSAqIEhWX1NUQVRVU19WSVJUVUFMX0FERFJFU1NfTk9UX01BUFBFRAotICogVGhlIHBhc3NlZCB2aXJ0dWFsIGFkZHJlc3Mgd2FzIG5vdCBtYXBwZWQgaW4gdGhlIGh5cGVydmlzb3IgYWRkcmVzcyBzcGFjZS4KLSAqLwotI2RlZmluZSBIVl9TVEFUVVNfVklSVFVBTF9BRERSRVNTX05PVF9NQVBQRUQJCSgodTE2KTB4MTAwRikKLQotLyoKLSAqIEhWX1NUQVRVU19OT1RfSU1QTEVNRU5URUQKLSAqIFRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIHZlcnNpb24gb2YgdGhlCi0gKiBoeXBlcnZpc29yLgotICovCi0jZGVmaW5lIEhWX1NUQVRVU19OT1RfSU1QTEVNRU5URUQJCQkoKHUxNikweDEwMTApCi0KLS8qCi0gKiBIVl9TVEFUVVNfVk1YX0lOU1RSVUNUSU9OX0ZBSUxFRAotICogVGhlIHJlcXVlc3RlZCBWTVggaW5zdHJ1Y3Rpb24gZmFpbGVkIHRvIGNvbXBsZXRlIHN1Y2Nlc3NmdWxseS4KLSAqLwotI2RlZmluZSBIVl9TVEFUVVNfVk1YX0lOU1RSVUNUSU9OX0ZBSUxFRAkJKCh1MTYpMHgxMDExKQotCi0vKgotICogSFZfU1RBVFVTX1ZNWF9JTlNUUlVDVElPTl9GQUlMRURfV0lUSF9TVEFUVVMKLSAqIFRoZSByZXF1ZXN0ZWQgVk1YIGluc3RydWN0aW9uIGZhaWxlZCB0byBjb21wbGV0ZSBzdWNjZXNzZnVsbHkgaW5kaWNhdGluZwotICogc3RhdHVzLgotICovCi0jZGVmaW5lIEhWX1NUQVRVU19WTVhfSU5TVFJVQ1RJT05fRkFJTEVEX1dJVEhfU1RBVFVTCSgodTE2KTB4MTAxMikKLQotLyoKLSAqIEhWX1NUQVRVU19NU1JfQUNDRVNTX0ZBSUxFRAotICogVGhlIHJlcXVlc3RlZCBhY2Nlc3MgdG8gdGhlIG1vZGVsIHNwZWNpZmljIHJlZ2lzdGVyIGZhaWxlZC4KLSAqLwotI2RlZmluZSBIVl9TVEFUVVNfTVNSX0FDQ0VTU19GQUlMRUQJCSgodTE2KTB4MTAxMykKLQotLyoKLSAqIEhWX1NUQVRVU19DUl9BQ0NFU1NfRkFJTEVECi0gKiBUaGUgcmVxdWVzdGVkIGFjY2VzcyB0byB0aGUgY29udHJvbCByZWdpc3RlciBmYWlsZWQuCi0gKi8KLSNkZWZpbmUgSFZfU1RBVFVTX0NSX0FDQ0VTU19GQUlMRUQJCSgodTE2KTB4MTAxNCkKLQotLyoKLSAqIEhWX1NUQVRVU19USU1FT1VUCi0gKiBUaGUgc3BlY2lmaWVkIHRpbWVvdXQgZXhwaXJlZCBiZWZvcmUgdGhlIG9wZXJhdGlvbiBjb21wbGV0ZWQuCi0gKi8KLSNkZWZpbmUgSFZfU1RBVFVTX1RJTUVPVVQJCQkoKHUxNikweDEwMTYpCi0KLS8qCi0gKiBIVl9TVEFUVVNfTVNSX0lOVEVSQ0VQVAotICogVGhlIHJlcXVlc3RlZCBhY2Nlc3MgdG8gdGhlIG1vZGVsIHNwZWNpZmljIHJlZ2lzdGVyIGdlbmVyYXRlZCBhbiBpbnRlcmNlcHQuCi0gKi8KLSNkZWZpbmUgSFZfU1RBVFVTX01TUl9JTlRFUkNFUFQJCQkoKHUxNikweDEwMTcpCi0KLS8qCi0gKiBIVl9TVEFUVVNfQ1BVSURfSU5URVJDRVBUCi0gKiBUaGUgQ1BVSUQgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGVkIGFuIGludGVyY2VwdC4KLSAqLwotI2RlZmluZSBIVl9TVEFUVVNfQ1BVSURfSU5URVJDRVBUCQkoKHUxNikweDEwMTgpCi0KLS8qCi0gKiBIVl9TVEFUVVNfUkVQRUFUX0lOU1RSVUNUSU9OCi0gKiBUaGUgY3VycmVudCBpbnN0cnVjdGlvbiBzaG91bGQgYmUgcmVwZWF0ZWQgYW5kIHRoZSBpbnN0cnVjdGlvbiBwb2ludGVyIG5vdAotICogYWR2YW5jZWQuCi0gKi8KLSNkZWZpbmUgSFZfU1RBVFVTX1JFUEVBVF9JTlNUUlVDVElPTgkJKCh1MTYpMHgxMDE5KQotCi0vKgotICogSFZfU1RBVFVTX1BBR0VfUFJPVEVDVElPTl9WSU9MQVRJT04KLSAqIFRoZSBjdXJyZW50IGluc3RydWN0aW9uIHNob3VsZCBiZSByZXBlYXRlZCBhbmQgdGhlIGluc3RydWN0aW9uIHBvaW50ZXIgbm90Ci0gKiBhZHZhbmNlZC4KLSAqLwotI2RlZmluZSBIVl9TVEFUVVNfUEFHRV9QUk9URUNUSU9OX1ZJT0xBVElPTgkoKHUxNikweDEwMUEpCi0KLS8qCi0gKiBIVl9TVEFUVVNfUEFHRV9UQUJMRV9JTlZBTElECi0gKiBUaGUgY3VycmVudCBpbnN0cnVjdGlvbiBzaG91bGQgYmUgcmVwZWF0ZWQgYW5kIHRoZSBpbnN0cnVjdGlvbiBwb2ludGVyIG5vdAotICogYWR2YW5jZWQuCi0gKi8KLSNkZWZpbmUgSFZfU1RBVFVTX1BBR0VfVEFCTEVfSU5WQUxJRAkJKCh1MTYpMHgxMDFCKQotCi0vKgotICogSFZfU1RBVFVTX1BBR0VfTk9UX1BSRVNFTlQKLSAqIFRoZSBjdXJyZW50IGluc3RydWN0aW9uIHNob3VsZCBiZSByZXBlYXRlZCBhbmQgdGhlIGluc3RydWN0aW9uIHBvaW50ZXIgbm90Ci0gKiBhZHZhbmNlZC4KLSAqLwotI2RlZmluZSBIVl9TVEFUVVNfUEFHRV9OT1RfUFJFU0VOVAkJKCh1MTYpMHgxMDFDKQotCi0vKgotICogSFZfU1RBVFVTX0lPX0lOVEVSQ0VQVAotICogVGhlIHJlcXVlc3RlZCBhY2Nlc3MgdG8gdGhlIEkvTyBwb3J0IGdlbmVyYXRlZCBhbiBpbnRlcmNlcHQuCi0gKi8KLSNkZWZpbmUgSFZfU1RBVFVTX0lPX0lOVEVSQ0VQVAkJCQkoKHUxNikweDEwMUQpCi0KLS8qCi0gKiBIVl9TVEFUVVNfTk9USElOR19UT19ETwotICogVGhlcmUgaXMgbm90aGluZyB0byBkby4KLSAqLwotI2RlZmluZSBIVl9TVEFUVVNfTk9USElOR19UT19ETwkJCQkoKHUxNikweDEwMUUpCi0KLS8qCi0gKiBIVl9TVEFUVVNfVEhSRUFEX1RFUk1JTkFUSU5HCi0gKiBUaGUgcmVxdWVzdGVkIHRocmVhZCBpcyB0ZXJtaW5hdGluZy4KLSAqLwotI2RlZmluZSBIVl9TVEFUVVNfVEhSRUFEX1RFUk1JTkFUSU5HCQkJKCh1MTYpMHgxMDFGKQotCi0vKgotICogSFZfU1RBVFVTX1NFQ1RJT05fQUxSRUFEWV9DT05TVFJVQ1RFRAotICogVGhlIHNwZWNpZmllZCBzZWN0aW9uIHdhcyBhbHJlYWR5IGNvbnN0cnVjdGVkLgotICovCi0jZGVmaW5lIEhWX1NUQVRVU19TRUNUSU9OX0FMUkVBRFlfQ09OU1RSVUNURUQJCSgodTE2KTB4MTAyMCkKLQotLyogSFZfU1RBVFVTX1NFQ1RJT05fTk9UX0FMUkVBRFlfQ09OU1RSVUNURUQKLSAqIFRoZSBzcGVjaWZpZWQgc2VjdGlvbiB3YXMgbm90IGFscmVhZHkgY29uc3RydWN0ZWQuCi0gKi8KLSNkZWZpbmUgSFZfU1RBVFVTX1NFQ1RJT05fTk9UX0FMUkVBRFlfQ09OU1RSVUNURUQJKCh1MTYpMHgxMDIxKQotCi0vKgotICogSFZfU1RBVFVTX1BBR0VfQUxSRUFEWV9DT01NSVRURUQKLSAqIFRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHdhcyBhbHJlYWR5IGJhY2tlZCBieSBwaHlzaWNhbCBtZW1vcnkuCi0gKi8KLSNkZWZpbmUgSFZfU1RBVFVTX1BBR0VfQUxSRUFEWV9DT01NSVRURUQJCSgodTE2KTB4MTAyMikKLQotLyoKLSAqIEhWX1NUQVRVU19QQUdFX05PVF9BTFJFQURZX0NPTU1JVFRFRAotICogVGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3Mgd2FzIG5vdCBhbHJlYWR5IGJhY2tlZCBieSBwaHlzaWNhbCBtZW1vcnkuCi0gKi8KLSNkZWZpbmUgSFZfU1RBVFVTX1BBR0VfTk9UX0FMUkVBRFlfQ09NTUlUVEVECQkoKHUxNikweDEwMjMpCi0KLS8qCi0gKiBIVl9TVEFUVVNfQ09NTUlUVEVEX1BBR0VTX1JFTUFJTgotICogQ29tbWl0dGVkIHBhZ2VzIHJlbWFpbiBpbiB0aGUgc2VjdGlvbi4KLSAqLwotI2RlZmluZSBIVl9TVEFUVVNfQ09NTUlUVEVEX1BBR0VTX1JFTUFJTgkJKCh1MTYpMHgxMDI0KQotCi0vKgotICogSFZfU1RBVFVTX05PX1JFTUFJTklOR19DT01NSVRURURfUEFHRVMKLSAqIE5vIGFkZGl0aW9uYWwgY29tbWl0dGVkIHBhZ2VzIGJleW9uZCB0aGUgc3BlY2lmaWVkIHBhZ2UgZXhpc3QgaW4gdGhlCi0gKiBzZWN0aW9uLgotICovCi0jZGVmaW5lIEhWX1NUQVRVU19OT19SRU1BSU5JTkdfQ09NTUlUVEVEX1BBR0VTCQkoKHUxNikweDEwMjUpCi0KLS8qCi0gKiBIVl9TVEFUVVNfSU5TVUZGSUNJRU5UX0NPTVBBUlRNRU5UX1ZBCi0gKiBUaGUgVkEgc3BhY2Ugb2YgdGhlIGNvbXBhcnRtZW50IGlzIGV4aGF1c3RlZC4KLSAqLwotI2RlZmluZSBIVl9TVEFUVVNfSU5TVUZGSUNJRU5UX0NPTVBBUlRNRU5UX1ZBCQkoKHUxNikweDEwMjYpCi0KLS8qCi0gKiBIVl9TVEFUVVNfREVSRUZfU1BBX0xJU1RfRlVMTAotICogVGhlIFNQQSBkZXJlZmVyZW5jZSBsaXN0IGlzIGZ1bGwsIGFuZCB0aGVyZSBhcmUgYWRkaXRpb25hbCBlbnRyaWVzIHRvIGJlCi0gKiBhZGRlZCB0byBpdC4KLSAqLwotI2RlZmluZSBIVl9TVEFUVVNfREVSRUZfU1BBX0xJU1RfRlVMTAkJCSgodTE2KTB4MTAyNykKLQotLyoKLSAqIEhWX1NUQVRVU19HUEFfT1VUX09GX1JBTkdFCi0gKiBUaGUgc3VwcGxpZWQgR1BBIGlzIG91dCBvZiByYW5nZS4KLSAqLwotI2RlZmluZSBIVl9TVEFUVVNfR1BBX09VVF9PRl9SQU5HRQkJCSgodTE2KTB4MTAyNykKLQotLyoKLSAqIEhWX1NUQVRVU19OT05WT0xBVElMRV9YTU1fU1RBTEUKLSAqIFRoZSBYTU0gcmVnaXN0ZXIgdGhhdCB3YXMgYmVpbmcgYWNjZXNzZWQgaXMgc3RhbGUuCi0gKi8KLSNkZWZpbmUgSFZfU1RBVFVTX05PTlZPTEFUSUxFX1hNTV9TVEFMRQkJCSgodTE2KTB4MTAyOCkKLQotLyogSFZfU1RBVFVTX1VOU1VQUE9SVEVEX1BST0NFU1NPUgotICogVGhlIGh5cGVydmlzb3IgZG9lcyBub3Qgc3VwcG9ydCB0aGUgcHJvY2Vzc29ycyBpbiB0aGlzIHN5c3RlbS4KLSAqLwotI2RlZmluZSBIVl9TVEFUVVNfVU5TVVBQT1JURURfUFJPQ0VTU09SCQkJKCh1MTYpMHgxMDI5KQotCi0vKgotICogSFZfU1RBVFVTX0lOU1VGRklDSUVOVF9DUk9NX1NQQUNFCi0gKiBJbnN1ZmZpY2llbnQgc3BhY2UgZXhpc3RlZCBmb3IgY29weWluZyBvdmVyIHRoZSBDUk9NIGNvbnRlbnRzLgotICovCi0jZGVmaW5lIEhWX1NUQVRVU19JTlNVRkZJQ0lFTlRfQ1JPTV9TUEFDRQkJKCh1MTYpMHgyMDAwKQotCi0vKgotICogSFZfU1RBVFVTX0JBRF9DUk9NX0ZPUk1BVAotICogVGhlIGNvbnRlbnRzIG9mIHRoZSBDUk9NIGZhaWxlZCB2YWxpZGF0aW9uIGF0dGVtcHRzLgotICovCi0jZGVmaW5lIEhWX1NUQVRVU19CQURfQ1JPTV9GT1JNQVQJCQkoKHUxNikweDIwMDEpCi0KLS8qCi0gKiBIVl9TVEFUVVNfVU5TVVBQT1JURURfQ1JPTV9GT1JNQVQKLSAqIFRoZSBjb250ZW50cyBvZiB0aGUgQ1JPTSBjb250YWluIGNvbnRlbnRzIHRoZSBwYXJzZXIgZG9lc24ndCBzdXBwb3J0LgotICovCi0jZGVmaW5lIEhWX1NUQVRVU19VTlNVUFBPUlRFRF9DUk9NX0ZPUk1BVAkJKCh1MTYpMHgyMDAyKQotCi0vKgotICogSFZfU1RBVFVTX1VOU1VQUE9SVEVEX0NPTlRST0xMRVIKLSAqIFRoZSByZWdpc3RlciBmb3JtYXQgb2YgdGhlIE9IQ0kgY29udHJvbGxlciBzcGVjaWZpZWQgZm9yIGRlYnVnZ2luZyBpcyBub3QKLSAqIHN1cHBvcnRlZC4KLSAqLwotI2RlZmluZSBIVl9TVEFUVVNfVU5TVVBQT1JURURfQ09OVFJPTExFUgkJKCh1MTYpMHgyMDAzKQotCi0vKgotICogSFZfU1RBVFVTX0NST01fVE9PX0xBUkdFCi0gKiBUaGUgQ1JPTSBjb250ZW50cyB3ZXJlIHRvIGxhcmdlIHRvIGNvcHkgb3Zlci4KLSAqLwotI2RlZmluZSBIVl9TVEFUVVNfQ1JPTV9UT09fTEFSR0UJCQkoKHUxNikweDIwMDQpCi0KLS8qCi0gKiBIVl9TVEFUVVNfQ09OVFJPTExFUl9JTl9VU0UKLSAqIFRoZSBPSENJIGNvbnRyb2xsZXIgc3BlY2lmaWVkIGZvciBkZWJ1Z2dpbmcgY2Fubm90IGJlIHVzZWQgYXMgaXQgaXMgYWxyZWFkeQotICogaW4gdXNlLgotICovCi0jZGVmaW5lIEhWX1NUQVRVU19DT05UUk9MTEVSX0lOX1VTRQkJCSgodTE2KTB4MjAwNSkKLQotCi0vKgotICogVGhlIGJlbG93IENQVUlEIGxlYXZlcyBhcmUgcHJlc2VudCBpZiBWZXJzaW9uQW5kRmVhdHVyZXMuSHlwZXJ2aXNvclByZXNlbnQKLSAqIGlzIHNldCBieSBDUFVJRChIVkNQVUlEX1ZFUlNJT05fRkVBVFVSRVMpLgotICovCi1lbnVtIGh2X2NwdWlkX2Z1bmN0aW9uIHsKLQlIVkNQVUlEX1ZFUlNJT05fRkVBVFVSRVMJCT0gMHgwMDAwMDAwMSwKLQlIVkNQVUlEX1ZFTkRPUl9NQVhGVU5DVElPTgkJPSAweDQwMDAwMDAwLAotCUhWQ1BVSURfSU5URVJGQUNFCQkJPSAweDQwMDAwMDAxLAotCi0JLyoKLQkgKiBUaGUgcmVtYWluaW5nIGZ1bmN0aW9ucyBkZXBlbmQgb24gdGhlIHZhbHVlIG9mCi0JICogSFZDUFVJRF9JTlRFUkZBQ0UKLQkgKi8KLQlIVkNQVUlEX1ZFUlNJT04JCQk9IDB4NDAwMDAwMDIsCi0JSFZDUFVJRF9GRUFUVVJFUwkJCT0gMHg0MDAwMDAwMywKLQlIVkNQVUlEX0VOTElHSFRFTk1FTlRfSU5GTwk9IDB4NDAwMDAwMDQsCi0JSFZDUFVJRF9JTVBMRU1FTlRBVElPTl9MSU1JVFMJCT0gMHg0MDAwMDAwNSwKLX07Ci0KLS8qIERlZmluZSB0aGUgdmlydHVhbCBBUElDIHJlZ2lzdGVycyAqLwotI2RlZmluZSBIVl9YNjRfTVNSX0VPSQkJCSgweDQwMDAwMDcwKQotI2RlZmluZSBIVl9YNjRfTVNSX0lDUgkJCSgweDQwMDAwMDcxKQotI2RlZmluZSBIVl9YNjRfTVNSX1RQUgkJCSgweDQwMDAwMDcyKQotI2RlZmluZSBIVl9YNjRfTVNSX0FQSUNfQVNTSVNUX1BBR0UJKDB4NDAwMDAwNzMpCi0KLS8qIERlZmluZSB2ZXJzaW9uIG9mIHRoZSBzeW50aGV0aWMgaW50ZXJydXB0IGNvbnRyb2xsZXIuICovCi0jZGVmaW5lIEhWX1NZTklDX1ZFUlNJT04JCSgxKQotCi0vKiBEZWZpbmUgc3ludGhldGljIGludGVycnVwdCBjb250cm9sbGVyIG1vZGVsIHNwZWNpZmljIHJlZ2lzdGVycy4gKi8KLSNkZWZpbmUgSFZfWDY0X01TUl9TQ09OVFJPTAkJKDB4NDAwMDAwODApCi0jZGVmaW5lIEhWX1g2NF9NU1JfU1ZFUlNJT04JCSgweDQwMDAwMDgxKQotI2RlZmluZSBIVl9YNjRfTVNSX1NJRUZQCQkoMHg0MDAwMDA4MikKLSNkZWZpbmUgSFZfWDY0X01TUl9TSU1QCQkJKDB4NDAwMDAwODMpCi0jZGVmaW5lIEhWX1g2NF9NU1JfRU9NCQkJKDB4NDAwMDAwODQpCi0jZGVmaW5lIEhWX1g2NF9NU1JfU0lOVDAJCSgweDQwMDAwMDkwKQotI2RlZmluZSBIVl9YNjRfTVNSX1NJTlQxCQkoMHg0MDAwMDA5MSkKLSNkZWZpbmUgSFZfWDY0X01TUl9TSU5UMgkJKDB4NDAwMDAwOTIpCi0jZGVmaW5lIEhWX1g2NF9NU1JfU0lOVDMJCSgweDQwMDAwMDkzKQotI2RlZmluZSBIVl9YNjRfTVNSX1NJTlQ0CQkoMHg0MDAwMDA5NCkKLSNkZWZpbmUgSFZfWDY0X01TUl9TSU5UNQkJKDB4NDAwMDAwOTUpCi0jZGVmaW5lIEhWX1g2NF9NU1JfU0lOVDYJCSgweDQwMDAwMDk2KQotI2RlZmluZSBIVl9YNjRfTVNSX1NJTlQ3CQkoMHg0MDAwMDA5NykKLSNkZWZpbmUgSFZfWDY0X01TUl9TSU5UOAkJKDB4NDAwMDAwOTgpCi0jZGVmaW5lIEhWX1g2NF9NU1JfU0lOVDkJCSgweDQwMDAwMDk5KQotI2RlZmluZSBIVl9YNjRfTVNSX1NJTlQxMAkJKDB4NDAwMDAwOUEpCi0jZGVmaW5lIEhWX1g2NF9NU1JfU0lOVDExCQkoMHg0MDAwMDA5QikKLSNkZWZpbmUgSFZfWDY0X01TUl9TSU5UMTIJCSgweDQwMDAwMDlDKQotI2RlZmluZSBIVl9YNjRfTVNSX1NJTlQxMwkJKDB4NDAwMDAwOUQpCi0jZGVmaW5lIEhWX1g2NF9NU1JfU0lOVDE0CQkoMHg0MDAwMDA5RSkKLSNkZWZpbmUgSFZfWDY0X01TUl9TSU5UMTUJCSgweDQwMDAwMDlGKQotCi0vKiBEZWZpbmUgdGhlIGV4cGVjdGVkIFN5bklDIHZlcnNpb24uICovCi0jZGVmaW5lIEhWX1NZTklDX1ZFUlNJT05fMQkJKDB4MSkKLQotLyogRGVmaW5lIHN5bnRoZXRpYyBpbnRlcnJ1cHQgY29udHJvbGxlciBtZXNzYWdlIGNvbnN0YW50cy4gKi8KLSNkZWZpbmUgSFZfTUVTU0FHRV9TSVpFCQkJKDI1NikKLSNkZWZpbmUgSFZfTUVTU0FHRV9QQVlMT0FEX0JZVEVfQ09VTlQJKDI0MCkKLSNkZWZpbmUgSFZfTUVTU0FHRV9QQVlMT0FEX1FXT1JEX0NPVU5UCSgzMCkKLSNkZWZpbmUgSFZfQU5ZX1ZQCQkJKDB4RkZGRkZGRkYpCi0KLS8qIERlZmluZSBzeW50aGV0aWMgaW50ZXJydXB0IGNvbnRyb2xsZXIgZmxhZyBjb25zdGFudHMuICovCi0jZGVmaW5lIEhWX0VWRU5UX0ZMQUdTX0NPVU5UCQkoMjU2ICogOCkKLSNkZWZpbmUgSFZfRVZFTlRfRkxBR1NfQllURV9DT1VOVAkoMjU2KQotI2RlZmluZSBIVl9FVkVOVF9GTEFHU19EV09SRF9DT1VOVAkoMjU2IC8gc2l6ZW9mKHUzMikpCi0KLS8qIERlZmluZSBoeXBlcnZpc29yIG1lc3NhZ2UgdHlwZXMuICovCi1lbnVtIGh2X21lc3NhZ2VfdHlwZSB7Ci0JSFZNU0dfTk9ORQkJCT0gMHgwMDAwMDAwMCwKLQotCS8qIE1lbW9yeSBhY2Nlc3MgbWVzc2FnZXMuICovCi0JSFZNU0dfVU5NQVBQRURfR1BBCQk9IDB4ODAwMDAwMDAsCi0JSFZNU0dfR1BBX0lOVEVSQ0VQVAkJPSAweDgwMDAwMDAxLAotCi0JLyogVGltZXIgbm90aWZpY2F0aW9uIG1lc3NhZ2VzLiAqLwotCUhWTVNHX1RJTUVSX0VYUElSRUQJCQk9IDB4ODAwMDAwMTAsCi0KLQkvKiBFcnJvciBtZXNzYWdlcy4gKi8KLQlIVk1TR19JTlZBTElEX1ZQX1JFR0lTVEVSX1ZBTFVFCT0gMHg4MDAwMDAyMCwKLQlIVk1TR19VTlJFQ09WRVJBQkxFX0VYQ0VQVElPTgk9IDB4ODAwMDAwMjEsCi0JSFZNU0dfVU5TVVBQT1JURURfRkVBVFVSRQkJPSAweDgwMDAwMDIyLAotCi0JLyogVHJhY2UgYnVmZmVyIGNvbXBsZXRlIG1lc3NhZ2VzLiAqLwotCUhWTVNHX0VWRU5UTE9HX0JVRkZFUkNPTVBMRVRFCT0gMHg4MDAwMDA0MCwKLQotCS8qIFBsYXRmb3JtLXNwZWNpZmljIHByb2Nlc3NvciBpbnRlcmNlcHQgbWVzc2FnZXMuICovCi0JSFZNU0dfWDY0X0lPUE9SVF9JTlRFUkNFUFQJCT0gMHg4MDAxMDAwMCwKLQlIVk1TR19YNjRfTVNSX0lOVEVSQ0VQVAkJPSAweDgwMDEwMDAxLAotCUhWTVNHX1g2NF9DUFVJRF9JTlRFUkNFUFQJCT0gMHg4MDAxMDAwMiwKLQlIVk1TR19YNjRfRVhDRVBUSU9OX0lOVEVSQ0VQVAk9IDB4ODAwMTAwMDMsCi0JSFZNU0dfWDY0X0FQSUNfRU9JCQkJPSAweDgwMDEwMDA0LAotCUhWTVNHX1g2NF9MRUdBQ1lfRlBfRVJST1IJCT0gMHg4MDAxMDAwNQotfTsKLQotLyogRGVmaW5lIHRoZSBudW1iZXIgb2Ygc3ludGhldGljIGludGVycnVwdCBzb3VyY2VzLiAqLwotI2RlZmluZSBIVl9TWU5JQ19TSU5UX0NPVU5UCQkoMTYpCi0jZGVmaW5lIEhWX1NZTklDX1NUSU1FUl9DT1VOVAkJKDQpCi0KLS8qIERlZmluZSBpbnZhbGlkIHBhcnRpdGlvbiBpZGVudGlmaWVyLiAqLwotI2RlZmluZSBIVl9QQVJUSVRJT05fSURfSU5WQUxJRAkJKCh1NjQpMHgwKQotCi0vKiBEZWZpbmUgY29ubmVjdGlvbiBpZGVudGlmaWVyIHR5cGUuICovCi11bmlvbiBodl9jb25uZWN0aW9uX2lkIHsKLQl1MzIgYXN1MzI7Ci0Jc3RydWN0IHsKLQkJdTMyIGlkOjI0OwotCQl1MzIgcmVzZXJ2ZWQ6ODsKLQl9IHU7Ci19OwotCi0vKiBEZWZpbmUgcG9ydCBpZGVudGlmaWVyIHR5cGUuICovCi11bmlvbiBodl9wb3J0X2lkIHsKLQl1MzIgYXN1MzI7Ci0Jc3RydWN0IHsKLQkJdTMyIGlkOjI0OwotCQl1MzIgcmVzZXJ2ZWQ6ODsKLQl9IHUgOwotfTsKLQotLyogRGVmaW5lIHBvcnQgdHlwZS4gKi8KLWVudW0gaHZfcG9ydF90eXBlIHsKLQlIVlBPUlRfTVNHCT0gMSwKLQlIVlBPUlRfRVZFTlQJCT0gMiwKLQlIVlBPUlRfTU9OSVRPUgk9IDMKLX07Ci0KLS8qIERlZmluZSBwb3J0IGluZm9ybWF0aW9uIHN0cnVjdHVyZS4gKi8KLXN0cnVjdCBodl9wb3J0X2luZm8gewotCWVudW0gaHZfcG9ydF90eXBlIHBvcnRfdHlwZTsKLQl1MzIgcGFkZGluZzsKLQl1bmlvbiB7Ci0JCXN0cnVjdCB7Ci0JCQl1MzIgdGFyZ2V0X3NpbnQ7Ci0JCQl1MzIgdGFyZ2V0X3ZwOwotCQkJdTY0IHJzdmR6OwotCQl9IG1lc3NhZ2VfcG9ydF9pbmZvOwotCQlzdHJ1Y3QgewotCQkJdTMyIHRhcmdldF9zaW50OwotCQkJdTMyIHRhcmdldF92cDsKLQkJCXUxNiBiYXNlX2ZsYWdfYnVtYmVyOwotCQkJdTE2IGZsYWdfY291bnQ7Ci0JCQl1MzIgcnN2ZHo7Ci0JCX0gZXZlbnRfcG9ydF9pbmZvOwotCQlzdHJ1Y3QgewotCQkJdTY0IG1vbml0b3JfYWRkcmVzczsKLQkJCXU2NCByc3ZkejsKLQkJfSBtb25pdG9yX3BvcnRfaW5mbzsKLQl9OwotfTsKLQotc3RydWN0IGh2X2Nvbm5lY3Rpb25faW5mbyB7Ci0JZW51bSBodl9wb3J0X3R5cGUgcG9ydF90eXBlOwotCXUzMiBwYWRkaW5nOwotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCXU2NCByc3ZkejsKLQkJfSBtZXNzYWdlX2Nvbm5lY3Rpb25faW5mbzsKLQkJc3RydWN0IHsKLQkJCXU2NCByc3ZkejsKLQkJfSBldmVudF9jb25uZWN0aW9uX2luZm87Ci0JCXN0cnVjdCB7Ci0JCQl1NjQgbW9uaXRvcl9hZGRyZXNzOwotCQl9IG1vbml0b3JfY29ubmVjdGlvbl9pbmZvOwotCX07Ci19OwotCi0vKiBEZWZpbmUgc3ludGhldGljIGludGVycnVwdCBjb250cm9sbGVyIG1lc3NhZ2UgZmxhZ3MuICovCi11bmlvbiBodl9tZXNzYWdlX2ZsYWdzIHsKLQl1OCBhc3U4OwotCXN0cnVjdCB7Ci0JCXU4IG1zZ19wZW5kaW5nOjE7Ci0JCXU4IHJlc2VydmVkOjc7Ci0JfTsKLX07Ci0KLS8qIERlZmluZSBzeW50aGV0aWMgaW50ZXJydXB0IGNvbnRyb2xsZXIgbWVzc2FnZSBoZWFkZXIuICovCi1zdHJ1Y3QgaHZfbWVzc2FnZV9oZWFkZXIgewotCWVudW0gaHZfbWVzc2FnZV90eXBlIG1lc3NhZ2VfdHlwZTsKLQl1OCBwYXlsb2FkX3NpemU7Ci0JdW5pb24gaHZfbWVzc2FnZV9mbGFncyBtZXNzYWdlX2ZsYWdzOwotCXU4IHJlc2VydmVkWzJdOwotCXVuaW9uIHsKLQkJdTY0IHNlbmRlcjsKLQkJdW5pb24gaHZfcG9ydF9pZCBwb3J0OwotCX07Ci19OwotCi0vKiBEZWZpbmUgdGltZXIgbWVzc2FnZSBwYXlsb2FkIHN0cnVjdHVyZS4gKi8KLXN0cnVjdCBodl90aW1lcl9tZXNzYWdlX3BheWxvYWQgewotCXUzMiB0aW1lcl9pbmRleDsKLQl1MzIgcmVzZXJ2ZWQ7Ci0JdTY0IGV4cGlyYXRpb25fdGltZTsJLyogV2hlbiB0aGUgdGltZXIgZXhwaXJlZCAqLwotCXU2NCBkZWxpdmVyeV90aW1lOwkvKiBXaGVuIHRoZSBtZXNzYWdlIHdhcyBkZWxpdmVyZWQgKi8KLX07Ci0KLS8qIERlZmluZSBzeW50aGV0aWMgaW50ZXJydXB0IGNvbnRyb2xsZXIgbWVzc2FnZSBmb3JtYXQuICovCi1zdHJ1Y3QgaHZfbWVzc2FnZSB7Ci0Jc3RydWN0IGh2X21lc3NhZ2VfaGVhZGVyIGhlYWRlcjsKLQl1bmlvbiB7Ci0JCXU2NCBwYXlsb2FkW0hWX01FU1NBR0VfUEFZTE9BRF9RV09SRF9DT1VOVF07Ci0JfSB1IDsKLX07Ci0KLS8qIERlZmluZSB0aGUgbnVtYmVyIG9mIG1lc3NhZ2UgYnVmZmVycyBhc3NvY2lhdGVkIHdpdGggZWFjaCBwb3J0LiAqLwotI2RlZmluZSBIVl9QT1JUX01FU1NBR0VfQlVGRkVSX0NPVU5UCSgxNikKLQotLyogRGVmaW5lIHRoZSBzeW50aGV0aWMgaW50ZXJydXB0IG1lc3NhZ2UgcGFnZSBsYXlvdXQuICovCi1zdHJ1Y3QgaHZfbWVzc2FnZV9wYWdlIHsKLQlzdHJ1Y3QgaHZfbWVzc2FnZSBzaW50X21lc3NhZ2VbSFZfU1lOSUNfU0lOVF9DT1VOVF07Ci19OwotCi0vKiBEZWZpbmUgdGhlIHN5bnRoZXRpYyBpbnRlcnJ1cHQgY29udHJvbGxlciBldmVudCBmbGFncyBmb3JtYXQuICovCi11bmlvbiBodl9zeW5pY19ldmVudF9mbGFncyB7Ci0JdTggZmxhZ3M4W0hWX0VWRU5UX0ZMQUdTX0JZVEVfQ09VTlRdOwotCXUzMiBmbGFnczMyW0hWX0VWRU5UX0ZMQUdTX0RXT1JEX0NPVU5UXTsKLX07Ci0KLS8qIERlZmluZSB0aGUgc3ludGhldGljIGludGVycnVwdCBmbGFncyBwYWdlIGxheW91dC4gKi8KLXN0cnVjdCBodl9zeW5pY19ldmVudF9mbGFnc19wYWdlIHsKLQl1bmlvbiBodl9zeW5pY19ldmVudF9mbGFncyBzaW50ZXZlbnRfZmxhZ3NbSFZfU1lOSUNfU0lOVF9DT1VOVF07Ci19OwotCi0vKiBEZWZpbmUgU3luSUMgY29udHJvbCByZWdpc3Rlci4gKi8KLXVuaW9uIGh2X3N5bmljX3Njb250cm9sIHsKLQl1NjQgYXNfdWludDY0OwotCXN0cnVjdCB7Ci0JCXU2NCBlbmFibGU6MTsKLQkJdTY0IHJlc2VydmVkOjYzOwotCX07Ci19OwotCi0vKiBEZWZpbmUgc3ludGhldGljIGludGVycnVwdCBzb3VyY2UuICovCi11bmlvbiBodl9zeW5pY19zaW50IHsKLQl1NjQgYXNfdWludDY0OwotCXN0cnVjdCB7Ci0JCXU2NCB2ZWN0b3I6ODsKLQkJdTY0IHJlc2VydmVkMTo4OwotCQl1NjQgbWFza2VkOjE7Ci0JCXU2NCBhdXRvX2VvaToxOwotCQl1NjQgcmVzZXJ2ZWQyOjQ2OwotCX07Ci19OwotCi0vKiBEZWZpbmUgdGhlIGZvcm1hdCBvZiB0aGUgU0lNUCByZWdpc3RlciAqLwotdW5pb24gaHZfc3luaWNfc2ltcCB7Ci0JdTY0IGFzX3VpbnQ2NDsKLQlzdHJ1Y3QgewotCQl1NjQgc2ltcF9lbmFibGVkOjE7Ci0JCXU2NCBwcmVzZXJ2ZWQ6MTE7Ci0JCXU2NCBiYXNlX3NpbXBfZ3BhOjUyOwotCX07Ci19OwotCi0vKiBEZWZpbmUgdGhlIGZvcm1hdCBvZiB0aGUgU0lFRlAgcmVnaXN0ZXIgKi8KLXVuaW9uIGh2X3N5bmljX3NpZWZwIHsKLQl1NjQgYXNfdWludDY0OwotCXN0cnVjdCB7Ci0JCXU2NCBzaWVmcF9lbmFibGVkOjE7Ci0JCXU2NCBwcmVzZXJ2ZWQ6MTE7Ci0JCXU2NCBiYXNlX3NpZWZwX2dwYTo1MjsKLQl9OwotfTsKLQotLyogRGVmaW5pdGlvbnMgZm9yIHRoZSBtb25pdG9yZWQgbm90aWZpY2F0aW9uIGZhY2lsaXR5ICovCi11bmlvbiBodl9tb25pdG9yX3RyaWdnZXJfZ3JvdXAgewotCXU2NCBhc191aW50NjQ7Ci0Jc3RydWN0IHsKLQkJdTMyIHBlbmRpbmc7Ci0JCXUzMiBhcm1lZDsKLQl9OwotfTsKLQotc3RydWN0IGh2X21vbml0b3JfcGFyYW1ldGVyIHsKLQl1bmlvbiBodl9jb25uZWN0aW9uX2lkIGNvbm5lY3Rpb25pZDsKLQl1MTYgZmxhZ251bWJlcjsKLQl1MTYgcnN2ZHo7Ci19OwotCi11bmlvbiBodl9tb25pdG9yX3RyaWdnZXJfc3RhdGUgewotCXUzMiBhc3UzMjsKLQotCXN0cnVjdCB7Ci0JCXUzMiBncm91cF9lbmFibGU6NDsKLQkJdTMyIHJzdmR6OjI4OwotCX07Ci19OwotCi0vKiBzdHJ1Y3QgaHZfbW9uaXRvcl9wYWdlIExheW91dCAqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiB8IDAgICB8IFRyaWdnZXJTdGF0ZSAoNCBieXRlcykgfCBSc3ZkMSAoNCBieXRlcykgICAgIHwgKi8KLS8qIHwgOCAgIHwgVHJpZ2dlckdyb3VwWzBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqLwotLyogfCAxMCAgfCBUcmlnZ2VyR3JvdXBbMV0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICovCi0vKiB8IDE4ICB8IFRyaWdnZXJHcm91cFsyXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKi8KLS8qIHwgMjAgIHwgVHJpZ2dlckdyb3VwWzNdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqLwotLyogfCAyOCAgfCBSc3ZkMlswXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICovCi0vKiB8IDMwICB8IFJzdmQyWzFdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKi8KLS8qIHwgMzggIHwgUnN2ZDJbMl0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqLwotLyogfCA0MCAgfCBOZXh0Q2hlY2tUaW1lWzBdWzBdICAgIHwgTmV4dENoZWNrVGltZVswXVsxXSB8ICovCi0vKiB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKi8KLS8qIHwgMjQwIHwgTGF0ZW5jeVswXVswLi4zXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqLwotLyogfCAzNDAgfCBSc3Z6M1swXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICovCi0vKiB8IDQ0MCB8IFBhcmFtZXRlclswXVswXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKi8KLS8qIHwgNDQ4IHwgUGFyYW1ldGVyWzBdWzFdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqLwotLyogfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICovCi0vKiB8IDg0MCB8IFJzdmQ0WzBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotc3RydWN0IGh2X21vbml0b3JfcGFnZSB7Ci0JdW5pb24gaHZfbW9uaXRvcl90cmlnZ2VyX3N0YXRlIHRyaWdnZXJfc3RhdGU7Ci0JdTMyIHJzdmR6MTsKLQotCXVuaW9uIGh2X21vbml0b3JfdHJpZ2dlcl9ncm91cCB0cmlnZ2VyX2dyb3VwWzRdOwotCXU2NCByc3ZkejJbM107Ci0KLQlzMzIgbmV4dF9jaGVja3RpbWVbNF1bMzJdOwotCi0JdTE2IGxhdGVuY3lbNF1bMzJdOwotCXU2NCByc3ZkejNbMzJdOwotCi0Jc3RydWN0IGh2X21vbml0b3JfcGFyYW1ldGVyIHBhcmFtZXRlcls0XVszMl07Ci0KLQl1OCByc3ZkejRbMTk4NF07Ci19OwotCi0vKiBEZWNsYXJlIHRoZSB2YXJpb3VzIGh5cGVyY2FsbCBvcGVyYXRpb25zLiAqLwotZW51bSBodl9jYWxsX2NvZGUgewotCUhWQ0FMTF9QT1NUX01FU1NBR0UJPSAweDAwNWMsCi0JSFZDQUxMX1NJR05BTF9FVkVOVAk9IDB4MDA1ZCwKLX07Ci0KLS8qIERlZmluaXRpb24gb2YgdGhlIGh2X3Bvc3RfbWVzc2FnZSBoeXBlcmNhbGwgaW5wdXQgc3RydWN0dXJlLiAqLwotc3RydWN0IGh2X2lucHV0X3Bvc3RfbWVzc2FnZSB7Ci0JdW5pb24gaHZfY29ubmVjdGlvbl9pZCBjb25uZWN0aW9uaWQ7Ci0JdTMyIHJlc2VydmVkOwotCWVudW0gaHZfbWVzc2FnZV90eXBlIG1lc3NhZ2VfdHlwZTsKLQl1MzIgcGF5bG9hZF9zaXplOwotCXU2NCBwYXlsb2FkW0hWX01FU1NBR0VfUEFZTE9BRF9RV09SRF9DT1VOVF07Ci19OwotCi0vKiBEZWZpbml0aW9uIG9mIHRoZSBodl9zaWduYWxfZXZlbnQgaHlwZXJjYWxsIGlucHV0IHN0cnVjdHVyZS4gKi8KLXN0cnVjdCBodl9pbnB1dF9zaWduYWxfZXZlbnQgewotCXVuaW9uIGh2X2Nvbm5lY3Rpb25faWQgY29ubmVjdGlvbmlkOwotCXUxNiBmbGFnX251bWJlcjsKLQl1MTYgcnN2ZHo7Ci19OwotCi0vKgotICogVmVyc2lvbmluZyBkZWZpbml0aW9ucyB1c2VkIGZvciBndWVzdHMgcmVwb3J0aW5nIHRoZW1zZWx2ZXMgdG8gdGhlCi0gKiBoeXBlcnZpc29yLCBhbmQgdmlzYSB2ZXJzYS4KLSAqLwotCi0vKiBWZXJzaW9uIGluZm8gcmVwb3J0ZWQgYnkgZ3Vlc3QgT1MncyAqLwotZW51bSBodl9ndWVzdF9vc192ZW5kb3IgewotCUhWR1VFU1RPU19WRU5ET1JfTUlDUk9TT0ZUCT0gMHgwMDAxCi19OwotCi1lbnVtIGh2X2d1ZXN0X29zX21pY3Jvc29mdF9pZHMgewotCUhWR1VFU1RPU19NSUNST1NPRlRfVU5ERUZJTkVECT0gMHgwMCwKLQlIVkdVRVNUT1NfTUlDUk9TT0ZUX01TRE9TCQk9IDB4MDEsCi0JSFZHVUVTVE9TX01JQ1JPU09GVF9XSU5ET1dTM1gJPSAweDAyLAotCUhWR1VFU1RPU19NSUNST1NPRlRfV0lORE9XUzlYCT0gMHgwMywKLQlIVkdVRVNUT1NfTUlDUk9TT0ZUX1dJTkRPV1NOVAk9IDB4MDQsCi0JSFZHVUVTVE9TX01JQ1JPU09GVF9XSU5ET1dTQ0UJPSAweDA1Ci19OwotCi0vKgotICogRGVjbGFyZSB0aGUgTVNSIHVzZWQgdG8gaWRlbnRpZnkgdGhlIGd1ZXN0IE9TLgotICovCi0jZGVmaW5lIEhWX1g2NF9NU1JfR1VFU1RfT1NfSUQJMHg0MDAwMDAwMAotCi11bmlvbiBodl94NjRfbXNyX2d1ZXN0X29zX2lkX2NvbnRlbnRzIHsKLQl1NjQgYXNfdWludDY0OwotCXN0cnVjdCB7Ci0JCXU2NCBidWlsZF9udW1iZXI6MTY7Ci0JCXU2NCBzZXJ2aWNlX3ZlcnNpb246ODsgLyogU2VydmljZSBQYWNrLCBldGMuICovCi0JCXU2NCBtaW5vcl92ZXJzaW9uOjg7Ci0JCXU2NCBtYWpvcl92ZXJzaW9uOjg7Ci0JCXU2NCBvc19pZDo4OyAvKiBlbnVtIGh2X2d1ZXN0X29zX21pY3Jvc29mdF9pZHMgKGlmIFZlbmRvcj1NUykgKi8KLQkJdTY0IHZlbmRvcl9pZDoxNjsgLyogZW51bSBodl9ndWVzdF9vc192ZW5kb3IgKi8KLQl9OwotfTsKLQotLyoKLSAqIERlY2xhcmUgdGhlIE1TUiB1c2VkIHRvIHNldHVwIHBhZ2VzIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgaHlwZXJ2aXNvci4KLSAqLwotI2RlZmluZSBIVl9YNjRfTVNSX0hZUEVSQ0FMTAkweDQwMDAwMDAxCi0KLXVuaW9uIGh2X3g2NF9tc3JfaHlwZXJjYWxsX2NvbnRlbnRzIHsKLQl1NjQgYXNfdWludDY0OwotCXN0cnVjdCB7Ci0JCXU2NCBlbmFibGU6MTsKLQkJdTY0IHJlc2VydmVkOjExOwotCQl1NjQgZ3Vlc3RfcGh5c2ljYWxfYWRkcmVzczo1MjsKLQl9OwotfTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvaHZfa3ZwLmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvaHZfa3ZwLmMKaW5kZXggZmFmNjkyZTQuLjEzYjBlY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9odl9rdnAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvaHZfa3ZwLmMKQEAgLTIwLDIzICsyMCwxNCBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgogICoKICAqLwotCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CiAKICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KICNpbmNsdWRlIDxsaW51eC9ubHMuaD4KICNpbmNsdWRlIDxsaW51eC9jb25uZWN0b3IuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAotI2luY2x1ZGUgImxvZ2dpbmcuaCIKLSNpbmNsdWRlICJodl9hcGkuaCIKLSNpbmNsdWRlICJ2bWJ1cy5oIgotI2luY2x1ZGUgInZtYnVzX3BhY2tldF9mb3JtYXQuaCIKLSNpbmNsdWRlICJ2bWJ1c19jaGFubmVsX2ludGVyZmFjZS5oIgotI2luY2x1ZGUgInZlcnNpb25faW5mby5oIgotI2luY2x1ZGUgImNoYW5uZWwuaCIKLSNpbmNsdWRlICJ2bWJ1c19wcml2YXRlLmgiCi0jaW5jbHVkZSAidm1idXNfYXBpLmgiCi0jaW5jbHVkZSAidXRpbHMuaCIKKyNpbmNsdWRlICJoeXBlcnYuaCIKICNpbmNsdWRlICJodl9rdnAuaCIKIAogCkBAIC0xMTQsNyArMTA1LDcgQEAKIAogCW1lc3NhZ2UgPSAoc3RydWN0IGh2X2t1X21zZyAqKW1zZy0+ZGF0YTsKIAlpZiAobXNnLT5zZXEgPT0gS1ZQX1JFR0lTVEVSKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIktWUDogdXNlci1tb2RlIHJlZ2lzdGVyaW5nIGRvbmUuXG4iKTsKKwkJcHJfaW5mbygiS1ZQOiB1c2VyLW1vZGUgcmVnaXN0ZXJpbmcgZG9uZS5cbiIpOwogCQlrdnBfcmVnaXN0ZXIoKTsKIAl9CiAKQEAgLTE3NCw3ICsxNjUsNyBAQAogCQkvKgogCQkgKiBUaGlzIGlzIGEgc3B1cmlvdXMgY2FsbCEKIAkJICovCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIktWUDogVHJhbnNhY3Rpb24gbm90IGFjdGl2ZVxuIik7CisJCXByX3dhcm4oIktWUDogVHJhbnNhY3Rpb24gbm90IGFjdGl2ZVxuIik7CiAJCXJldHVybjsKIAl9CiAJLyoKQEAgLTI1OSw5ICsyNTAsNiBAQAogCXZtYnVzX3JlY3ZwYWNrZXQoY2hhbm5lbCwgcmVjdl9idWZmZXIsIFBBR0VfU0laRSwgJnJlY3ZsZW4sICZyZXF1ZXN0aWQpOwogCiAJaWYgKHJlY3ZsZW4gPiAwKSB7Ci0JCURQUklOVF9EQkcoVk1CVVMsICJLVlAgcGFja2V0OiBsZW49JWQsIHJlcXVlc3RpZD0lbGxkIiwKLQkJCSAgIHJlY3ZsZW4sIHJlcXVlc3RpZCk7Ci0KIAkJaWNtc2doZHJwID0gKHN0cnVjdCBpY21zZ19oZHIgKikmcmVjdl9idWZmZXJbCiAJCQlzaXplb2Yoc3RydWN0IHZtYnVzcGlwZV9oZHIpXTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L2h2X21vdXNlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvaHZfbW91c2UuYwppbmRleCAxMThjN2JlLi4zNTllNzM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvaHZfbW91c2UuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvaHZfbW91c2UuYwpAQCAtMjYsMTMgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kbWkuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCi0jaW5jbHVkZSAiaHZfYXBpLmgiCi0jaW5jbHVkZSAibG9nZ2luZy5oIgotI2luY2x1ZGUgInZlcnNpb25faW5mby5oIgotI2luY2x1ZGUgInZtYnVzLmgiCi0jaW5jbHVkZSAidm1idXNfYXBpLmgiCi0jaW5jbHVkZSAiY2hhbm5lbC5oIgotI2luY2x1ZGUgInZtYnVzX3BhY2tldF9mb3JtYXQuaCIKKyNpbmNsdWRlICJoeXBlcnYuaCIKIAogCiAvKgpAQCAtNDUsMTMgKzM5LDYgQEAKIAljaGFyIG5hbWVbMTI4XTsKIH07CiAKLS8qIFJlcHJlc2VudHMgdGhlIGlucHV0IHZzYyBkcml2ZXIgKi8KLS8qIEZJWE1FIC0gY2FuIGJlIHJlbW92ZWQgZW50aXJlbHkgKi8KLXN0cnVjdCBtb3VzZXZzY19kcnZfb2JqIHsKLQlzdHJ1Y3QgaHZfZHJpdmVyIEJhc2U7Ci19OwotCi0KIC8qIFRoZSBtYXhpbXVtIHNpemUgb2YgYSBzeW50aGV0aWMgaW5wdXQgbWVzc2FnZS4gKi8KICNkZWZpbmUgU1lOVEhISURfTUFYX0lOUFVUX1JFUE9SVF9TSVpFIDE2CiAKQEAgLTE2OSwyMyArMTU2LDIzIEBACiAgKiBSZXByZXNlbnRzIGFuIG1vdXNldnNjIGRldmljZQogICovCiBzdHJ1Y3QgbW91c2V2c2NfZGV2IHsKLQlzdHJ1Y3QgaHZfZGV2aWNlCSpEZXZpY2U7CisJc3RydWN0IGh2X2RldmljZQkqZGV2aWNlOwogCS8qIDAgaW5kaWNhdGVzIHRoZSBkZXZpY2UgaXMgYmVpbmcgZGVzdHJveWVkICovCi0JYXRvbWljX3QJCVJlZkNvdW50OwotCWludAkJCU51bU91dHN0YW5kaW5nUmVxdWVzdHM7Ci0JdW5zaWduZWQgY2hhcgkJYkluaXRpYWxpemVDb21wbGV0ZTsKLQlzdHJ1Y3QgbW91c2V2c2NfcHJ0X21zZwlQcm90b2NvbFJlcTsKLQlzdHJ1Y3QgbW91c2V2c2NfcHJ0X21zZwlQcm90b2NvbFJlc3A7CisJYXRvbWljX3QJCXJlZl9jb3VudDsKKwlpbnQJCQludW1fb3V0c3RhbmRpbmdfcmVxOworCXVuc2lnbmVkIGNoYXIJCWluaXRfY29tcGxldGU7CisJc3RydWN0IG1vdXNldnNjX3BydF9tc2cJcHJvdG9jb2xfcmVxOworCXN0cnVjdCBtb3VzZXZzY19wcnRfbXNnCXByb3RvY29sX3Jlc3A7CiAJLyogU3luY2hyb25pemUgdGhlIHJlcXVlc3QvcmVzcG9uc2UgaWYgbmVlZGVkICovCi0Jd2FpdF9xdWV1ZV9oZWFkX3QJUHJvdG9jb2xXYWl0RXZlbnQ7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QJRGV2aWNlSW5mb1dhaXRFdmVudDsKKwl3YWl0X3F1ZXVlX2hlYWRfdAlwcm90b2NvbF93YWl0X2V2ZW50OworCXdhaXRfcXVldWVfaGVhZF90CWRldl9pbmZvX3dhaXRfZXZlbnQ7CiAJaW50CQkJcHJvdG9jb2xfd2FpdF9jb25kaXRpb247CiAJaW50CQkJZGV2aWNlX3dhaXRfY29uZGl0aW9uOwotCWludAkJCURldmljZUluZm9TdGF0dXM7CisJaW50CQkJZGV2X2luZm9fc3RhdHVzOwogCi0Jc3RydWN0IGhpZF9kZXNjcmlwdG9yCSpIaWREZXNjOwotCXVuc2lnbmVkIGNoYXIJCSpSZXBvcnREZXNjOwotCXUzMgkJCVJlcG9ydERlc2NTaXplOworCXN0cnVjdCBoaWRfZGVzY3JpcHRvcgkqaGlkX2Rlc2M7CisJdW5zaWduZWQgY2hhcgkJKnJlcG9ydF9kZXNjOworCXUzMgkJCXJlcG9ydF9kZXNjX3NpemU7CiAJc3RydWN0IGh2X2lucHV0X2Rldl9pbmZvIGhpZF9kZXZfaW5mbzsKIH07CiAKQEAgLTIwMiw0MSArMTg5LDQxIEBACiBzdGF0aWMgdm9pZCBpbnB1dHJlcG9ydF9jYWxsYmFjayhzdHJ1Y3QgaHZfZGV2aWNlICpkZXYsIHZvaWQgKnBhY2tldCwgdTMyIGxlbik7CiBzdGF0aWMgdm9pZCByZXBvcnRkZXNjX2NhbGxiYWNrKHN0cnVjdCBodl9kZXZpY2UgKmRldiwgdm9pZCAqcGFja2V0LCB1MzIgbGVuKTsKIAotc3RhdGljIHN0cnVjdCBtb3VzZXZzY19kZXYgKkFsbG9jSW5wdXREZXZpY2Uoc3RydWN0IGh2X2RldmljZSAqRGV2aWNlKQorc3RhdGljIHN0cnVjdCBtb3VzZXZzY19kZXYgKmFsbG9jX2lucHV0X2RldmljZShzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UpCiB7Ci0Jc3RydWN0IG1vdXNldnNjX2RldiAqaW5wdXREZXZpY2U7CisJc3RydWN0IG1vdXNldnNjX2RldiAqaW5wdXRfZGV2OwogCi0JaW5wdXREZXZpY2UgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbW91c2V2c2NfZGV2KSwgR0ZQX0tFUk5FTCk7CisJaW5wdXRfZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1vdXNldnNjX2RldiksIEdGUF9LRVJORUwpOwogCi0JaWYgKCFpbnB1dERldmljZSkKKwlpZiAoIWlucHV0X2RldikKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKgogCSAqIFNldCB0byAyIHRvIGFsbG93IGJvdGggaW5ib3VuZCBhbmQgb3V0Ym91bmQgdHJhZmZpY3MKLQkgKiAoaWUgR2V0SW5wdXREZXZpY2UoKSBhbmQgTXVzdEdldElucHV0RGV2aWNlKCkpIHRvIHByb2NlZWQuCisJICogKGllIGdldF9pbnB1dF9kZXZpY2UoKSBhbmQgbXVzdF9nZXRfaW5wdXRfZGV2aWNlKCkpIHRvIHByb2NlZWQuCiAJICovCi0JYXRvbWljX2NtcHhjaGcoJmlucHV0RGV2aWNlLT5SZWZDb3VudCwgMCwgMik7CisJYXRvbWljX2NtcHhjaGcoJmlucHV0X2Rldi0+cmVmX2NvdW50LCAwLCAyKTsKIAotCWlucHV0RGV2aWNlLT5EZXZpY2UgPSBEZXZpY2U7Ci0JRGV2aWNlLT5leHQgPSBpbnB1dERldmljZTsKKwlpbnB1dF9kZXYtPmRldmljZSA9IGRldmljZTsKKwlkZXZpY2UtPmV4dCA9IGlucHV0X2RldjsKIAotCXJldHVybiBpbnB1dERldmljZTsKKwlyZXR1cm4gaW5wdXRfZGV2OwogfQogCi1zdGF0aWMgdm9pZCBGcmVlSW5wdXREZXZpY2Uoc3RydWN0IG1vdXNldnNjX2RldiAqRGV2aWNlKQorc3RhdGljIHZvaWQgZnJlZV9pbnB1dF9kZXZpY2Uoc3RydWN0IG1vdXNldnNjX2RldiAqZGV2aWNlKQogewotCVdBUk5fT04oYXRvbWljX3JlYWQoJkRldmljZS0+UmVmQ291bnQpID09IDApOwotCWtmcmVlKERldmljZSk7CisJV0FSTl9PTihhdG9taWNfcmVhZCgmZGV2aWNlLT5yZWZfY291bnQpID09IDApOworCWtmcmVlKGRldmljZSk7CiB9CiAKIC8qCiAgKiBHZXQgdGhlIGlucHV0ZGV2aWNlIG9iamVjdCBpZiBleGlzdHMgYW5kIGl0cyByZWZjb3VudCA+IDEKICAqLwotc3RhdGljIHN0cnVjdCBtb3VzZXZzY19kZXYgKkdldElucHV0RGV2aWNlKHN0cnVjdCBodl9kZXZpY2UgKkRldmljZSkKK3N0YXRpYyBzdHJ1Y3QgbW91c2V2c2NfZGV2ICpnZXRfaW5wdXRfZGV2aWNlKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSkKIHsKLQlzdHJ1Y3QgbW91c2V2c2NfZGV2ICppbnB1dERldmljZTsKKwlzdHJ1Y3QgbW91c2V2c2NfZGV2ICppbnB1dF9kZXY7CiAKLQlpbnB1dERldmljZSA9IChzdHJ1Y3QgbW91c2V2c2NfZGV2ICopRGV2aWNlLT5leHQ7CisJaW5wdXRfZGV2ID0gKHN0cnVjdCBtb3VzZXZzY19kZXYgKilkZXZpY2UtPmV4dDsKIAogLyoKICAqCUZJWE1FCkBAIC0yNDQsMTM0ICsyMzEsMTM3IEBACiAgKgl3aGF0IHRoZSBpbnRlbnRpb24gaXMuLi4KICAqCiAgKglwcmludGsoS0VSTl9FUlIgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+IFJFRkNPVU5UID0gJWQiLAotICoJICAgICAgIGlucHV0RGV2aWNlLT5SZWZDb3VudCk7CisgKgkgICAgICAgaW5wdXRfZGV2LT5yZWZfY291bnQpOwogICovCiAKLQlpZiAoaW5wdXREZXZpY2UgJiYgYXRvbWljX3JlYWQoJmlucHV0RGV2aWNlLT5SZWZDb3VudCkgPiAxKQotCQlhdG9taWNfaW5jKCZpbnB1dERldmljZS0+UmVmQ291bnQpOworCWlmIChpbnB1dF9kZXYgJiYgYXRvbWljX3JlYWQoJmlucHV0X2Rldi0+cmVmX2NvdW50KSA+IDEpCisJCWF0b21pY19pbmMoJmlucHV0X2Rldi0+cmVmX2NvdW50KTsKIAllbHNlCi0JCWlucHV0RGV2aWNlID0gTlVMTDsKKwkJaW5wdXRfZGV2ID0gTlVMTDsKIAotCXJldHVybiBpbnB1dERldmljZTsKKwlyZXR1cm4gaW5wdXRfZGV2OwogfQogCiAvKgogICogR2V0IHRoZSBpbnB1dGRldmljZSBvYmplY3QgaWZmIGV4aXN0cyBhbmQgaXRzIHJlZmNvdW50ID4gMAogICovCi1zdGF0aWMgc3RydWN0IG1vdXNldnNjX2RldiAqTXVzdEdldElucHV0RGV2aWNlKHN0cnVjdCBodl9kZXZpY2UgKkRldmljZSkKK3N0YXRpYyBzdHJ1Y3QgbW91c2V2c2NfZGV2ICptdXN0X2dldF9pbnB1dF9kZXZpY2Uoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlKQogewotCXN0cnVjdCBtb3VzZXZzY19kZXYgKmlucHV0RGV2aWNlOworCXN0cnVjdCBtb3VzZXZzY19kZXYgKmlucHV0X2RldjsKIAotCWlucHV0RGV2aWNlID0gKHN0cnVjdCBtb3VzZXZzY19kZXYgKilEZXZpY2UtPmV4dDsKKwlpbnB1dF9kZXYgPSAoc3RydWN0IG1vdXNldnNjX2RldiAqKWRldmljZS0+ZXh0OwogCi0JaWYgKGlucHV0RGV2aWNlICYmIGF0b21pY19yZWFkKCZpbnB1dERldmljZS0+UmVmQ291bnQpKQotCQlhdG9taWNfaW5jKCZpbnB1dERldmljZS0+UmVmQ291bnQpOworCWlmIChpbnB1dF9kZXYgJiYgYXRvbWljX3JlYWQoJmlucHV0X2Rldi0+cmVmX2NvdW50KSkKKwkJYXRvbWljX2luYygmaW5wdXRfZGV2LT5yZWZfY291bnQpOwogCWVsc2UKLQkJaW5wdXREZXZpY2UgPSBOVUxMOworCQlpbnB1dF9kZXYgPSBOVUxMOwogCi0JcmV0dXJuIGlucHV0RGV2aWNlOworCXJldHVybiBpbnB1dF9kZXY7CiB9CiAKLXN0YXRpYyB2b2lkIFB1dElucHV0RGV2aWNlKHN0cnVjdCBodl9kZXZpY2UgKkRldmljZSkKK3N0YXRpYyB2b2lkIHB1dF9pbnB1dF9kZXZpY2Uoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlKQogewotCXN0cnVjdCBtb3VzZXZzY19kZXYgKmlucHV0RGV2aWNlOworCXN0cnVjdCBtb3VzZXZzY19kZXYgKmlucHV0X2RldjsKIAotCWlucHV0RGV2aWNlID0gKHN0cnVjdCBtb3VzZXZzY19kZXYgKilEZXZpY2UtPmV4dDsKKwlpbnB1dF9kZXYgPSAoc3RydWN0IG1vdXNldnNjX2RldiAqKWRldmljZS0+ZXh0OwogCi0JYXRvbWljX2RlYygmaW5wdXREZXZpY2UtPlJlZkNvdW50KTsKKwlhdG9taWNfZGVjKCZpbnB1dF9kZXYtPnJlZl9jb3VudCk7CiB9CiAKIC8qCi0gKiBEcm9wIHJlZiBjb3VudCB0byAxIHRvIGVmZmVjdGl2ZWx5IGRpc2FibGUgR2V0SW5wdXREZXZpY2UoKQorICogRHJvcCByZWYgY291bnQgdG8gMSB0byBlZmZlY3RpdmVseSBkaXNhYmxlIGdldF9pbnB1dF9kZXZpY2UoKQogICovCi1zdGF0aWMgc3RydWN0IG1vdXNldnNjX2RldiAqUmVsZWFzZUlucHV0RGV2aWNlKHN0cnVjdCBodl9kZXZpY2UgKkRldmljZSkKK3N0YXRpYyBzdHJ1Y3QgbW91c2V2c2NfZGV2ICpyZWxlYXNlX2lucHV0X2RldmljZShzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UpCiB7Ci0Jc3RydWN0IG1vdXNldnNjX2RldiAqaW5wdXREZXZpY2U7CisJc3RydWN0IG1vdXNldnNjX2RldiAqaW5wdXRfZGV2OwogCi0JaW5wdXREZXZpY2UgPSAoc3RydWN0IG1vdXNldnNjX2RldiAqKURldmljZS0+ZXh0OworCWlucHV0X2RldiA9IChzdHJ1Y3QgbW91c2V2c2NfZGV2ICopZGV2aWNlLT5leHQ7CiAKIAkvKiBCdXN5IHdhaXQgdW50aWwgdGhlIHJlZiBkcm9wIHRvIDIsIHRoZW4gc2V0IGl0IHRvIDEgICovCi0Jd2hpbGUgKGF0b21pY19jbXB4Y2hnKCZpbnB1dERldmljZS0+UmVmQ291bnQsIDIsIDEpICE9IDIpCisJd2hpbGUgKGF0b21pY19jbXB4Y2hnKCZpbnB1dF9kZXYtPnJlZl9jb3VudCwgMiwgMSkgIT0gMikKIAkJdWRlbGF5KDEwMCk7CiAKLQlyZXR1cm4gaW5wdXREZXZpY2U7CisJcmV0dXJuIGlucHV0X2RldjsKIH0KIAogLyoKLSAqIERyb3AgcmVmIGNvdW50IHRvIDAuIE5vIG9uZSBjYW4gdXNlIElucHV0RGV2aWNlIG9iamVjdC4KKyAqIERyb3AgcmVmIGNvdW50IHRvIDAuIE5vIG9uZSBjYW4gdXNlIGlucHV0X2RldmljZSBvYmplY3QuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgbW91c2V2c2NfZGV2ICpGaW5hbFJlbGVhc2VJbnB1dERldmljZShzdHJ1Y3QgaHZfZGV2aWNlICpEZXZpY2UpCitzdGF0aWMgc3RydWN0IG1vdXNldnNjX2RldiAqZmluYWxfcmVsZWFzZV9pbnB1dF9kZXZpY2Uoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlKQogewotCXN0cnVjdCBtb3VzZXZzY19kZXYgKmlucHV0RGV2aWNlOworCXN0cnVjdCBtb3VzZXZzY19kZXYgKmlucHV0X2RldjsKIAotCWlucHV0RGV2aWNlID0gKHN0cnVjdCBtb3VzZXZzY19kZXYgKilEZXZpY2UtPmV4dDsKKwlpbnB1dF9kZXYgPSAoc3RydWN0IG1vdXNldnNjX2RldiAqKWRldmljZS0+ZXh0OwogCiAJLyogQnVzeSB3YWl0IHVudGlsIHRoZSByZWYgZHJvcCB0byAxLCB0aGVuIHNldCBpdCB0byAwICAqLwotCXdoaWxlIChhdG9taWNfY21weGNoZygmaW5wdXREZXZpY2UtPlJlZkNvdW50LCAxLCAwKSAhPSAxKQorCXdoaWxlIChhdG9taWNfY21weGNoZygmaW5wdXRfZGV2LT5yZWZfY291bnQsIDEsIDApICE9IDEpCiAJCXVkZWxheSgxMDApOwogCi0JRGV2aWNlLT5leHQgPSBOVUxMOwotCXJldHVybiBpbnB1dERldmljZTsKKwlkZXZpY2UtPmV4dCA9IE5VTEw7CisJcmV0dXJuIGlucHV0X2RldjsKIH0KIAotc3RhdGljIHZvaWQgTW91c2V2c2NPblNlbmRDb21wbGV0aW9uKHN0cnVjdCBodl9kZXZpY2UgKkRldmljZSwgc3RydWN0IHZtcGFja2V0X2Rlc2NyaXB0b3IgKlBhY2tldCkKK3N0YXRpYyB2b2lkIG1vdXNldnNjX29uX3NlbmRfY29tcGxldGlvbihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsCisJCQkJCXN0cnVjdCB2bXBhY2tldF9kZXNjcmlwdG9yICpwYWNrZXQpCiB7Ci0Jc3RydWN0IG1vdXNldnNjX2RldiAqaW5wdXREZXZpY2U7CisJc3RydWN0IG1vdXNldnNjX2RldiAqaW5wdXRfZGV2OwogCXZvaWQgKnJlcXVlc3Q7CiAKLQlpbnB1dERldmljZSA9IE11c3RHZXRJbnB1dERldmljZShEZXZpY2UpOwotCWlmICghaW5wdXREZXZpY2UpIHsKKwlpbnB1dF9kZXYgPSBtdXN0X2dldF9pbnB1dF9kZXZpY2UoZGV2aWNlKTsKKwlpZiAoIWlucHV0X2RldikgewogCQlwcl9lcnIoInVuYWJsZSB0byBnZXQgaW5wdXQgZGV2aWNlLi4uZGV2aWNlIGJlaW5nIGRlc3Ryb3llZD8iKTsKIAkJcmV0dXJuOwogCX0KIAotCXJlcXVlc3QgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKVBhY2tldC0+dHJhbnNfaWQ7CisJcmVxdWVzdCA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpcGFja2V0LT50cmFuc19pZDsKIAotCWlmIChyZXF1ZXN0ID09ICZpbnB1dERldmljZS0+UHJvdG9jb2xSZXEpIHsKKwlpZiAocmVxdWVzdCA9PSAmaW5wdXRfZGV2LT5wcm90b2NvbF9yZXEpIHsKIAkJLyogRklYTUUgKi8KIAkJLyogU2hvdWxkbid0IHdlIGJlIGRvaW5nIHNvbWV0aGluZyBoZXJlPyAqLwogCX0KIAotCVB1dElucHV0RGV2aWNlKERldmljZSk7CisJcHV0X2lucHV0X2RldmljZShkZXZpY2UpOwogfQogCi1zdGF0aWMgdm9pZCBNb3VzZXZzY09uUmVjZWl2ZURldmljZUluZm8oc3RydWN0IG1vdXNldnNjX2RldiAqSW5wdXREZXZpY2UsIHN0cnVjdCBzeW50aGhpZF9kZXZpY2VfaW5mbyAqRGV2aWNlSW5mbykKK3N0YXRpYyB2b2lkIG1vdXNldnNjX29uX3JlY2VpdmVfZGV2aWNlX2luZm8oc3RydWN0IG1vdXNldnNjX2RldiAqaW5wdXRfZGV2aWNlLAorCQkJCXN0cnVjdCBzeW50aGhpZF9kZXZpY2VfaW5mbyAqZGV2aWNlX2luZm8pCiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGhpZF9kZXNjcmlwdG9yICpkZXNjOwogCXN0cnVjdCBtb3VzZXZzY19wcnRfbXNnIGFjazsKIAogCS8qIEFzc3VtZSBzdWNjZXNzIGZvciBub3cgKi8KLQlJbnB1dERldmljZS0+RGV2aWNlSW5mb1N0YXR1cyA9IDA7CisJaW5wdXRfZGV2aWNlLT5kZXZfaW5mb19zdGF0dXMgPSAwOwogCiAJLyogU2F2ZSB0aGUgZGV2aWNlIGF0dHIgKi8KLQltZW1jcHkoJklucHV0RGV2aWNlLT5oaWRfZGV2X2luZm8sICZEZXZpY2VJbmZvLT5oaWRfZGV2X2luZm8sIHNpemVvZihzdHJ1Y3QgaHZfaW5wdXRfZGV2X2luZm8pKTsKKwltZW1jcHkoJmlucHV0X2RldmljZS0+aGlkX2Rldl9pbmZvLCAmZGV2aWNlX2luZm8tPmhpZF9kZXZfaW5mbywKKwkJc2l6ZW9mKHN0cnVjdCBodl9pbnB1dF9kZXZfaW5mbykpOwogCiAJLyogU2F2ZSB0aGUgaGlkIGRlc2MgKi8KLQlkZXNjID0gJkRldmljZUluZm8tPmhpZF9kZXNjcmlwdG9yOworCWRlc2MgPSAmZGV2aWNlX2luZm8tPmhpZF9kZXNjcmlwdG9yOwogCVdBUk5fT04oZGVzYy0+Ykxlbmd0aCA+IDApOwogCi0JSW5wdXREZXZpY2UtPkhpZERlc2MgPSBremFsbG9jKGRlc2MtPmJMZW5ndGgsIEdGUF9LRVJORUwpOworCWlucHV0X2RldmljZS0+aGlkX2Rlc2MgPSBremFsbG9jKGRlc2MtPmJMZW5ndGgsIEdGUF9LRVJORUwpOwogCi0JaWYgKCFJbnB1dERldmljZS0+SGlkRGVzYykgeworCWlmICghaW5wdXRfZGV2aWNlLT5oaWRfZGVzYykgewogCQlwcl9lcnIoInVuYWJsZSB0byBhbGxvY2F0ZSBoaWQgZGVzY3JpcHRvciAtIHNpemUgJWQiLCBkZXNjLT5iTGVuZ3RoKTsKIAkJZ290byBDbGVhbnVwOwogCX0KIAotCW1lbWNweShJbnB1dERldmljZS0+SGlkRGVzYywgZGVzYywgZGVzYy0+Ykxlbmd0aCk7CisJbWVtY3B5KGlucHV0X2RldmljZS0+aGlkX2Rlc2MsIGRlc2MsIGRlc2MtPmJMZW5ndGgpOwogCiAJLyogU2F2ZSB0aGUgcmVwb3J0IGRlc2MgKi8KLQlJbnB1dERldmljZS0+UmVwb3J0RGVzY1NpemUgPSBkZXNjLT5kZXNjWzBdLndEZXNjcmlwdG9yTGVuZ3RoOwotCUlucHV0RGV2aWNlLT5SZXBvcnREZXNjID0ga3phbGxvYyhJbnB1dERldmljZS0+UmVwb3J0RGVzY1NpemUsCisJaW5wdXRfZGV2aWNlLT5yZXBvcnRfZGVzY19zaXplID0gZGVzYy0+ZGVzY1swXS53RGVzY3JpcHRvckxlbmd0aDsKKwlpbnB1dF9kZXZpY2UtPnJlcG9ydF9kZXNjID0ga3phbGxvYyhpbnB1dF9kZXZpY2UtPnJlcG9ydF9kZXNjX3NpemUsCiAJCQkJCSAgR0ZQX0tFUk5FTCk7CiAKLQlpZiAoIUlucHV0RGV2aWNlLT5SZXBvcnREZXNjKSB7CisJaWYgKCFpbnB1dF9kZXZpY2UtPnJlcG9ydF9kZXNjKSB7CiAJCXByX2VycigidW5hYmxlIHRvIGFsbG9jYXRlIHJlcG9ydCBkZXNjcmlwdG9yIC0gc2l6ZSAlZCIsCi0JCQkgICBJbnB1dERldmljZS0+UmVwb3J0RGVzY1NpemUpOworCQkJICAgaW5wdXRfZGV2aWNlLT5yZXBvcnRfZGVzY19zaXplKTsKIAkJZ290byBDbGVhbnVwOwogCX0KIAotCW1lbWNweShJbnB1dERldmljZS0+UmVwb3J0RGVzYywKKwltZW1jcHkoaW5wdXRfZGV2aWNlLT5yZXBvcnRfZGVzYywKIAkgICAgICAgKCh1bnNpZ25lZCBjaGFyICopZGVzYykgKyBkZXNjLT5iTGVuZ3RoLAogCSAgICAgICBkZXNjLT5kZXNjWzBdLndEZXNjcmlwdG9yTGVuZ3RoKTsKIApAQCAtMzg1LDcgKzM3NSw3IEBACiAJYWNrLmFjay5oZWFkZXIuc2l6ZSA9IDE7CiAJYWNrLmFjay5yZXNlcnZlZCA9IDA7CiAKLQlyZXQgPSB2bWJ1c19zZW5kcGFja2V0KElucHV0RGV2aWNlLT5EZXZpY2UtPmNoYW5uZWwsCisJcmV0ID0gdm1idXNfc2VuZHBhY2tldChpbnB1dF9kZXZpY2UtPmRldmljZS0+Y2hhbm5lbCwKIAkJCSZhY2ssCiAJCQlzaXplb2Yoc3RydWN0IHBpcGVfcHJ0X21zZykgLSBzaXplb2YodW5zaWduZWQgY2hhcikgKwogCQkJc2l6ZW9mKHN0cnVjdCBzeW50aGhpZF9kZXZpY2VfaW5mb19hY2spLApAQCAtMzk4LDEzOCArMzg4LDE0MyBAQAogCQlnb3RvIENsZWFudXA7CiAJfQogCi0JSW5wdXREZXZpY2UtPmRldmljZV93YWl0X2NvbmRpdGlvbiA9IDE7Ci0Jd2FrZV91cCgmSW5wdXREZXZpY2UtPkRldmljZUluZm9XYWl0RXZlbnQpOworCWlucHV0X2RldmljZS0+ZGV2aWNlX3dhaXRfY29uZGl0aW9uID0gMTsKKwl3YWtlX3VwKCZpbnB1dF9kZXZpY2UtPmRldl9pbmZvX3dhaXRfZXZlbnQpOwogCiAJcmV0dXJuOwogCiBDbGVhbnVwOgotCWtmcmVlKElucHV0RGV2aWNlLT5IaWREZXNjKTsKLQlJbnB1dERldmljZS0+SGlkRGVzYyA9IE5VTEw7CisJa2ZyZWUoaW5wdXRfZGV2aWNlLT5oaWRfZGVzYyk7CisJaW5wdXRfZGV2aWNlLT5oaWRfZGVzYyA9IE5VTEw7CiAKLQlrZnJlZShJbnB1dERldmljZS0+UmVwb3J0RGVzYyk7Ci0JSW5wdXREZXZpY2UtPlJlcG9ydERlc2MgPSBOVUxMOworCWtmcmVlKGlucHV0X2RldmljZS0+cmVwb3J0X2Rlc2MpOworCWlucHV0X2RldmljZS0+cmVwb3J0X2Rlc2MgPSBOVUxMOwogCi0JSW5wdXREZXZpY2UtPkRldmljZUluZm9TdGF0dXMgPSAtMTsKLQlJbnB1dERldmljZS0+ZGV2aWNlX3dhaXRfY29uZGl0aW9uID0gMTsKLQl3YWtlX3VwKCZJbnB1dERldmljZS0+RGV2aWNlSW5mb1dhaXRFdmVudCk7CisJaW5wdXRfZGV2aWNlLT5kZXZfaW5mb19zdGF0dXMgPSAtMTsKKwlpbnB1dF9kZXZpY2UtPmRldmljZV93YWl0X2NvbmRpdGlvbiA9IDE7CisJd2FrZV91cCgmaW5wdXRfZGV2aWNlLT5kZXZfaW5mb193YWl0X2V2ZW50KTsKIH0KIAotc3RhdGljIHZvaWQgTW91c2V2c2NPblJlY2VpdmVJbnB1dFJlcG9ydChzdHJ1Y3QgbW91c2V2c2NfZGV2ICpJbnB1dERldmljZSwgc3RydWN0IHN5bnRoaGlkX2lucHV0X3JlcG9ydCAqSW5wdXRSZXBvcnQpCitzdGF0aWMgdm9pZCBtb3VzZXZzY19vbl9yZWNlaXZlX2lucHV0X3JlcG9ydChzdHJ1Y3QgbW91c2V2c2NfZGV2ICppbnB1dF9kZXZpY2UsCisJCQkJc3RydWN0IHN5bnRoaGlkX2lucHV0X3JlcG9ydCAqaW5wdXRfcmVwb3J0KQogewotCXN0cnVjdCBtb3VzZXZzY19kcnZfb2JqICppbnB1dERyaXZlcjsKKwlzdHJ1Y3QgaHZfZHJpdmVyICppbnB1dF9kcnY7CiAKLQlpZiAoIUlucHV0RGV2aWNlLT5iSW5pdGlhbGl6ZUNvbXBsZXRlKSB7Ci0JCXByX2luZm8oIkluaXRpYWxpemF0aW9uIGluY29tcGxldGUuLi5pZ25vcmluZyBJbnB1dFJlcG9ydCBtc2ciKTsKKwlpZiAoIWlucHV0X2RldmljZS0+aW5pdF9jb21wbGV0ZSkgeworCQlwcl9pbmZvKCJJbml0aWFsaXphdGlvbiBpbmNvbXBsZXRlLi4uaWdub3JpbmcgaW5wdXRfcmVwb3J0IG1zZyIpOwogCQlyZXR1cm47CiAJfQogCi0JaW5wdXREcml2ZXIgPSAoc3RydWN0IG1vdXNldnNjX2Rydl9vYmogKilJbnB1dERldmljZS0+RGV2aWNlLT5kcnY7CisJaW5wdXRfZHJ2ID0gZHJ2X3RvX2h2X2RydihpbnB1dF9kZXZpY2UtPmRldmljZS0+ZGV2aWNlLmRyaXZlcik7CiAKLQlpbnB1dHJlcG9ydF9jYWxsYmFjayhJbnB1dERldmljZS0+RGV2aWNlLAotCQkJICAgICBJbnB1dFJlcG9ydC0+YnVmZmVyLAotCQkJICAgICBJbnB1dFJlcG9ydC0+aGVhZGVyLnNpemUpOworCWlucHV0cmVwb3J0X2NhbGxiYWNrKGlucHV0X2RldmljZS0+ZGV2aWNlLAorCQkJICAgICBpbnB1dF9yZXBvcnQtPmJ1ZmZlciwKKwkJCSAgICAgaW5wdXRfcmVwb3J0LT5oZWFkZXIuc2l6ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIE1vdXNldnNjT25SZWNlaXZlKHN0cnVjdCBodl9kZXZpY2UgKkRldmljZSwgc3RydWN0IHZtcGFja2V0X2Rlc2NyaXB0b3IgKlBhY2tldCkKK3N0YXRpYyB2b2lkIG1vdXNldnNjX29uX3JlY2VpdmUoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLAorCQkJCXN0cnVjdCB2bXBhY2tldF9kZXNjcmlwdG9yICpwYWNrZXQpCiB7Ci0Jc3RydWN0IHBpcGVfcHJ0X21zZyAqcGlwZU1zZzsKLQlzdHJ1Y3Qgc3ludGhoaWRfbXNnICpoaWRNc2c7Ci0Jc3RydWN0IG1vdXNldnNjX2RldiAqaW5wdXREZXZpY2U7CisJc3RydWN0IHBpcGVfcHJ0X21zZyAqcGlwZV9tc2c7CisJc3RydWN0IHN5bnRoaGlkX21zZyAqaGlkX21zZzsKKwlzdHJ1Y3QgbW91c2V2c2NfZGV2ICppbnB1dF9kZXY7CiAKLQlpbnB1dERldmljZSA9IE11c3RHZXRJbnB1dERldmljZShEZXZpY2UpOwotCWlmICghaW5wdXREZXZpY2UpIHsKKwlpbnB1dF9kZXYgPSBtdXN0X2dldF9pbnB1dF9kZXZpY2UoZGV2aWNlKTsKKwlpZiAoIWlucHV0X2RldikgewogCQlwcl9lcnIoInVuYWJsZSB0byBnZXQgaW5wdXQgZGV2aWNlLi4uZGV2aWNlIGJlaW5nIGRlc3Ryb3llZD8iKTsKIAkJcmV0dXJuOwogCX0KIAotCXBpcGVNc2cgPSAoc3RydWN0IHBpcGVfcHJ0X21zZyAqKSgodW5zaWduZWQgbG9uZylQYWNrZXQgKyAoUGFja2V0LT5vZmZzZXQ4IDw8IDMpKTsKKwlwaXBlX21zZyA9IChzdHJ1Y3QgcGlwZV9wcnRfbXNnICopKCh1bnNpZ25lZCBsb25nKXBhY2tldCArCisJCQkJCQkocGFja2V0LT5vZmZzZXQ4IDw8IDMpKTsKIAotCWlmIChwaXBlTXNnLT50eXBlICE9IFBpcGVNZXNzYWdlRGF0YSkgeworCWlmIChwaXBlX21zZy0+dHlwZSAhPSBQaXBlTWVzc2FnZURhdGEpIHsKIAkJcHJfZXJyKCJ1bmtub3duIHBpcGUgbXNnIHR5cGUgLSB0eXBlICVkIGxlbiAlZCIsCi0JCQkgICBwaXBlTXNnLT50eXBlLCBwaXBlTXNnLT5zaXplKTsKLQkJUHV0SW5wdXREZXZpY2UoRGV2aWNlKTsKKwkJCSAgIHBpcGVfbXNnLT50eXBlLCBwaXBlX21zZy0+c2l6ZSk7CisJCXB1dF9pbnB1dF9kZXZpY2UoZGV2aWNlKTsKIAkJcmV0dXJuIDsKIAl9CiAKLQloaWRNc2cgPSAoc3RydWN0IHN5bnRoaGlkX21zZyAqKSZwaXBlTXNnLT5kYXRhWzBdOworCWhpZF9tc2cgPSAoc3RydWN0IHN5bnRoaGlkX21zZyAqKSZwaXBlX21zZy0+ZGF0YVswXTsKIAotCXN3aXRjaCAoaGlkTXNnLT5oZWFkZXIudHlwZSkgeworCXN3aXRjaCAoaGlkX21zZy0+aGVhZGVyLnR5cGUpIHsKIAljYXNlIFN5bnRoSGlkUHJvdG9jb2xSZXNwb25zZToKLQkJbWVtY3B5KCZpbnB1dERldmljZS0+UHJvdG9jb2xSZXNwLCBwaXBlTXNnLAotCQkgICAgICAgcGlwZU1zZy0+c2l6ZSArIHNpemVvZihzdHJ1Y3QgcGlwZV9wcnRfbXNnKSAtCisJCW1lbWNweSgmaW5wdXRfZGV2LT5wcm90b2NvbF9yZXNwLCBwaXBlX21zZywKKwkJICAgICAgIHBpcGVfbXNnLT5zaXplICsgc2l6ZW9mKHN0cnVjdCBwaXBlX3BydF9tc2cpIC0KIAkJICAgICAgIHNpemVvZih1bnNpZ25lZCBjaGFyKSk7Ci0JCWlucHV0RGV2aWNlLT5wcm90b2NvbF93YWl0X2NvbmRpdGlvbiA9IDE7Ci0JCXdha2VfdXAoJmlucHV0RGV2aWNlLT5Qcm90b2NvbFdhaXRFdmVudCk7CisJCWlucHV0X2Rldi0+cHJvdG9jb2xfd2FpdF9jb25kaXRpb24gPSAxOworCQl3YWtlX3VwKCZpbnB1dF9kZXYtPnByb3RvY29sX3dhaXRfZXZlbnQpOwogCQlicmVhazsKIAogCWNhc2UgU3ludGhIaWRJbml0aWFsRGV2aWNlSW5mbzoKLQkJV0FSTl9PTihwaXBlTXNnLT5zaXplID49IHNpemVvZihzdHJ1Y3QgaHZfaW5wdXRfZGV2X2luZm8pKTsKKwkJV0FSTl9PTihwaXBlX21zZy0+c2l6ZSA+PSBzaXplb2Yoc3RydWN0IGh2X2lucHV0X2Rldl9pbmZvKSk7CiAKIAkJLyoKIAkJICogUGFyc2Ugb3V0IHRoZSBkZXZpY2UgaW5mbyBpbnRvIGRldmljZSBhdHRyLAogCQkgKiBoaWQgZGVzYyBhbmQgcmVwb3J0IGRlc2MKIAkJICovCi0JCU1vdXNldnNjT25SZWNlaXZlRGV2aWNlSW5mbyhpbnB1dERldmljZSwKLQkJCQkJICAgIChzdHJ1Y3Qgc3ludGhoaWRfZGV2aWNlX2luZm8gKikmcGlwZU1zZy0+ZGF0YVswXSk7CisJCW1vdXNldnNjX29uX3JlY2VpdmVfZGV2aWNlX2luZm8oaW5wdXRfZGV2LAorCQkJKHN0cnVjdCBzeW50aGhpZF9kZXZpY2VfaW5mbyAqKSZwaXBlX21zZy0+ZGF0YVswXSk7CiAJCWJyZWFrOwogCWNhc2UgU3ludGhIaWRJbnB1dFJlcG9ydDoKLQkJTW91c2V2c2NPblJlY2VpdmVJbnB1dFJlcG9ydChpbnB1dERldmljZSwKLQkJCQkJICAgICAoc3RydWN0IHN5bnRoaGlkX2lucHV0X3JlcG9ydCAqKSZwaXBlTXNnLT5kYXRhWzBdKTsKKwkJbW91c2V2c2Nfb25fcmVjZWl2ZV9pbnB1dF9yZXBvcnQoaW5wdXRfZGV2LAorCQkJKHN0cnVjdCBzeW50aGhpZF9pbnB1dF9yZXBvcnQgKikmcGlwZV9tc2ctPmRhdGFbMF0pOwogCiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByX2VycigidW5zdXBwb3J0ZWQgaGlkIG1zZyB0eXBlIC0gdHlwZSAlZCBsZW4gJWQiLAotCQkgICAgICAgaGlkTXNnLT5oZWFkZXIudHlwZSwgaGlkTXNnLT5oZWFkZXIuc2l6ZSk7CisJCSAgICAgICBoaWRfbXNnLT5oZWFkZXIudHlwZSwgaGlkX21zZy0+aGVhZGVyLnNpemUpOwogCQlicmVhazsKIAl9CiAKLQlQdXRJbnB1dERldmljZShEZXZpY2UpOworCXB1dF9pbnB1dF9kZXZpY2UoZGV2aWNlKTsKIH0KIAotc3RhdGljIHZvaWQgTW91c2V2c2NPbkNoYW5uZWxDYWxsYmFjayh2b2lkICpDb250ZXh0KQorc3RhdGljIHZvaWQgbW91c2V2c2Nfb25fY2hhbm5lbF9jYWxsYmFjayh2b2lkICpjb250ZXh0KQogewogCWNvbnN0IGludCBwYWNrZXRTaXplID0gMHgxMDA7CiAJaW50IHJldCA9IDA7Ci0Jc3RydWN0IGh2X2RldmljZSAqZGV2aWNlID0gKHN0cnVjdCBodl9kZXZpY2UgKilDb250ZXh0OwotCXN0cnVjdCBtb3VzZXZzY19kZXYgKmlucHV0RGV2aWNlOworCXN0cnVjdCBodl9kZXZpY2UgKmRldmljZSA9IChzdHJ1Y3QgaHZfZGV2aWNlICopY29udGV4dDsKKwlzdHJ1Y3QgbW91c2V2c2NfZGV2ICppbnB1dF9kZXY7CiAKLQl1MzIgYnl0ZXNSZWN2ZDsKLQl1NjQgcmVxdWVzdElkOwotCXVuc2lnbmVkIGNoYXIgcGFja2V0W3BhY2tldFNpemVdOworCXUzMiBieXRlc19yZWN2ZDsKKwl1NjQgcmVxX2lkOworCXVuc2lnbmVkIGNoYXIgcGFja2V0WzB4MTAwXTsKIAlzdHJ1Y3Qgdm1wYWNrZXRfZGVzY3JpcHRvciAqZGVzYzsKIAl1bnNpZ25lZCBjaGFyCSpidWZmZXIgPSBwYWNrZXQ7CiAJaW50CWJ1ZmZlcmxlbiA9IHBhY2tldFNpemU7CiAKLQlpbnB1dERldmljZSA9IE11c3RHZXRJbnB1dERldmljZShkZXZpY2UpOworCWlucHV0X2RldiA9IG11c3RfZ2V0X2lucHV0X2RldmljZShkZXZpY2UpOwogCi0JaWYgKCFpbnB1dERldmljZSkgeworCWlmICghaW5wdXRfZGV2KSB7CiAJCXByX2VycigidW5hYmxlIHRvIGdldCBpbnB1dCBkZXZpY2UuLi5kZXZpY2UgYmVpbmcgZGVzdHJveWVkPyIpOwogCQlyZXR1cm47CiAJfQogCiAJZG8gewotCQlyZXQgPSB2bWJ1c19yZWN2cGFja2V0X3JhdyhkZXZpY2UtPmNoYW5uZWwsIGJ1ZmZlciwgYnVmZmVybGVuLCAmYnl0ZXNSZWN2ZCwgJnJlcXVlc3RJZCk7CisJCXJldCA9IHZtYnVzX3JlY3ZwYWNrZXRfcmF3KGRldmljZS0+Y2hhbm5lbCwgYnVmZmVyLAorCQkJCQlidWZmZXJsZW4sICZieXRlc19yZWN2ZCwgJnJlcV9pZCk7CiAKIAkJaWYgKHJldCA9PSAwKSB7Ci0JCQlpZiAoYnl0ZXNSZWN2ZCA+IDApIHsKKwkJCWlmIChieXRlc19yZWN2ZCA+IDApIHsKIAkJCQlkZXNjID0gKHN0cnVjdCB2bXBhY2tldF9kZXNjcmlwdG9yICopYnVmZmVyOwogCiAJCQkJc3dpdGNoIChkZXNjLT50eXBlKSB7CiAJCQkJCWNhc2UgVk1fUEtUX0NPTVA6Ci0JCQkJCQlNb3VzZXZzY09uU2VuZENvbXBsZXRpb24oZGV2aWNlLAotCQkJCQkJCQkJIGRlc2MpOworCQkJCQkJbW91c2V2c2Nfb25fc2VuZF9jb21wbGV0aW9uKAorCQkJCQkJCWRldmljZSwgZGVzYyk7CiAJCQkJCQlicmVhazsKIAogCQkJCQljYXNlIFZNX1BLVF9EQVRBX0lOQkFORDoKLQkJCQkJCU1vdXNldnNjT25SZWNlaXZlKGRldmljZSwgZGVzYyk7CisJCQkJCQltb3VzZXZzY19vbl9yZWNlaXZlKAorCQkJCQkJCWRldmljZSwgZGVzYyk7CiAJCQkJCQlicmVhazsKIAogCQkJCQlkZWZhdWx0OgogCQkJCQkJcHJfZXJyKCJ1bmhhbmRsZWQgcGFja2V0IHR5cGUgJWQsIHRpZCAlbGx4IGxlbiAlZFxuIiwKIAkJCQkJCQkgICBkZXNjLT50eXBlLAotCQkJCQkJCSAgIHJlcXVlc3RJZCwKLQkJCQkJCQkgICBieXRlc1JlY3ZkKTsKKwkJCQkJCQkgICByZXFfaWQsCisJCQkJCQkJICAgYnl0ZXNfcmVjdmQpOwogCQkJCQkJYnJlYWs7CiAJCQkJfQogCkBAIC01NTUsOCArNTUwLDggQEAKIAkJCX0KIAkJfSBlbHNlIGlmIChyZXQgPT0gLTIpIHsKIAkJCS8qIEhhbmRsZSBsYXJnZSBwYWNrZXQgKi8KLQkJCWJ1ZmZlcmxlbiA9IGJ5dGVzUmVjdmQ7Ci0JCQlidWZmZXIgPSBremFsbG9jKGJ5dGVzUmVjdmQsIEdGUF9LRVJORUwpOworCQkJYnVmZmVybGVuID0gYnl0ZXNfcmVjdmQ7CisJCQlidWZmZXIgPSBremFsbG9jKGJ5dGVzX3JlY3ZkLCBHRlBfS0VSTkVMKTsKIAogCQkJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CiAJCQkJYnVmZmVyID0gcGFja2V0OwpAQCAtNTY0LDM1ICs1NTksMzUgQEAKIAogCQkJCS8qIFRyeSBhZ2FpbiBuZXh0IHRpbWUgYXJvdW5kICovCiAJCQkJcHJfZXJyKCJ1bmFibGUgdG8gYWxsb2NhdGUgYnVmZmVyIG9mIHNpemUgJWQhIiwKLQkJCQkgICAgICAgYnl0ZXNSZWN2ZCk7CisJCQkJICAgICAgIGJ5dGVzX3JlY3ZkKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQogCX0gd2hpbGUgKDEpOwogCi0JUHV0SW5wdXREZXZpY2UoZGV2aWNlKTsKKwlwdXRfaW5wdXRfZGV2aWNlKGRldmljZSk7CiAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyBpbnQgTW91c2V2c2NDb25uZWN0VG9Wc3Aoc3RydWN0IGh2X2RldmljZSAqRGV2aWNlKQorc3RhdGljIGludCBtb3VzZXZzY19jb25uZWN0X3RvX3ZzcChzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UpCiB7CiAJaW50IHJldCA9IDA7Ci0Jc3RydWN0IG1vdXNldnNjX2RldiAqaW5wdXREZXZpY2U7CisJc3RydWN0IG1vdXNldnNjX2RldiAqaW5wdXRfZGV2OwogCXN0cnVjdCBtb3VzZXZzY19wcnRfbXNnICpyZXF1ZXN0OwogCXN0cnVjdCBtb3VzZXZzY19wcnRfbXNnICpyZXNwb25zZTsKIAotCWlucHV0RGV2aWNlID0gR2V0SW5wdXREZXZpY2UoRGV2aWNlKTsKKwlpbnB1dF9kZXYgPSBnZXRfaW5wdXRfZGV2aWNlKGRldmljZSk7CiAKLQlpZiAoIWlucHV0RGV2aWNlKSB7CisJaWYgKCFpbnB1dF9kZXYpIHsKIAkJcHJfZXJyKCJ1bmFibGUgdG8gZ2V0IGlucHV0IGRldmljZS4uLmRldmljZSBiZWluZyBkZXN0cm95ZWQ/Iik7CiAJCXJldHVybiAtMTsKIAl9CiAKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbnB1dERldmljZS0+UHJvdG9jb2xXYWl0RXZlbnQpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmlucHV0RGV2aWNlLT5EZXZpY2VJbmZvV2FpdEV2ZW50KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbnB1dF9kZXYtPnByb3RvY29sX3dhaXRfZXZlbnQpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmlucHV0X2Rldi0+ZGV2X2luZm9fd2FpdF9ldmVudCk7CiAKLQlyZXF1ZXN0ID0gJmlucHV0RGV2aWNlLT5Qcm90b2NvbFJlcTsKKwlyZXF1ZXN0ID0gJmlucHV0X2Rldi0+cHJvdG9jb2xfcmVxOwogCiAJLyoKIAkgKiBOb3csIGluaXRpYXRlIHRoZSB2c2MvdnNwIGluaXRpYWxpemF0aW9uIHByb3RvY29sIG9uIHRoZSBvcGVuIGNoYW5uZWwKQEAgLTYwOCw3ICs2MDMsNyBAQAogCiAJcHJfaW5mbygic3ludGhoaWQgcHJvdG9jb2wgcmVxdWVzdC4uLiIpOwogCi0JcmV0ID0gdm1idXNfc2VuZHBhY2tldChEZXZpY2UtPmNoYW5uZWwsIHJlcXVlc3QsCisJcmV0ID0gdm1idXNfc2VuZHBhY2tldChkZXZpY2UtPmNoYW5uZWwsIHJlcXVlc3QsCiAJCQkJCXNpemVvZihzdHJ1Y3QgcGlwZV9wcnRfbXNnKSAtCiAJCQkJCXNpemVvZih1bnNpZ25lZCBjaGFyKSArCiAJCQkJCXNpemVvZihzdHJ1Y3Qgc3ludGhoaWRfcHJvdG9jb2xfcmVxdWVzdCksCkBAIC02MjAsMTQgKzYxNSwxNSBAQAogCQlnb3RvIENsZWFudXA7CiAJfQogCi0JaW5wdXREZXZpY2UtPnByb3RvY29sX3dhaXRfY29uZGl0aW9uID0gMDsKLQl3YWl0X2V2ZW50X3RpbWVvdXQoaW5wdXREZXZpY2UtPlByb3RvY29sV2FpdEV2ZW50LCBpbnB1dERldmljZS0+cHJvdG9jb2xfd2FpdF9jb25kaXRpb24sIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpOwotCWlmIChpbnB1dERldmljZS0+cHJvdG9jb2xfd2FpdF9jb25kaXRpb24gPT0gMCkgeworCWlucHV0X2Rldi0+cHJvdG9jb2xfd2FpdF9jb25kaXRpb24gPSAwOworCXdhaXRfZXZlbnRfdGltZW91dChpbnB1dF9kZXYtPnByb3RvY29sX3dhaXRfZXZlbnQsCisJCWlucHV0X2Rldi0+cHJvdG9jb2xfd2FpdF9jb25kaXRpb24sIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpOworCWlmIChpbnB1dF9kZXYtPnByb3RvY29sX3dhaXRfY29uZGl0aW9uID09IDApIHsKIAkJcmV0ID0gLUVUSU1FRE9VVDsKIAkJZ290byBDbGVhbnVwOwogCX0KIAotCXJlc3BvbnNlID0gJmlucHV0RGV2aWNlLT5Qcm90b2NvbFJlc3A7CisJcmVzcG9uc2UgPSAmaW5wdXRfZGV2LT5wcm90b2NvbF9yZXNwOwogCiAJaWYgKCFyZXNwb25zZS0+cmVzcG9uc2UuYXBwcm92ZWQpIHsKIAkJcHJfZXJyKCJzeW50aGhpZCBwcm90b2NvbCByZXF1ZXN0IGZhaWxlZCAodmVyc2lvbiAlZCkiLApAQCAtNjM2LDkgKzYzMiwxMCBAQAogCQlnb3RvIENsZWFudXA7CiAJfQogCi0JaW5wdXREZXZpY2UtPmRldmljZV93YWl0X2NvbmRpdGlvbiA9IDA7Ci0Jd2FpdF9ldmVudF90aW1lb3V0KGlucHV0RGV2aWNlLT5EZXZpY2VJbmZvV2FpdEV2ZW50LCBpbnB1dERldmljZS0+ZGV2aWNlX3dhaXRfY29uZGl0aW9uLCBtc2Vjc190b19qaWZmaWVzKDEwMDApKTsKLQlpZiAoaW5wdXREZXZpY2UtPmRldmljZV93YWl0X2NvbmRpdGlvbiA9PSAwKSB7CisJaW5wdXRfZGV2LT5kZXZpY2Vfd2FpdF9jb25kaXRpb24gPSAwOworCXdhaXRfZXZlbnRfdGltZW91dChpbnB1dF9kZXYtPmRldl9pbmZvX3dhaXRfZXZlbnQsCisJCWlucHV0X2Rldi0+ZGV2aWNlX3dhaXRfY29uZGl0aW9uLCBtc2Vjc190b19qaWZmaWVzKDEwMDApKTsKKwlpZiAoaW5wdXRfZGV2LT5kZXZpY2Vfd2FpdF9jb25kaXRpb24gPT0gMCkgewogCQlyZXQgPSAtRVRJTUVET1VUOwogCQlnb3RvIENsZWFudXA7CiAJfQpAQCAtNjQ3LDk0ICs2NDQsOTUgQEAKIAkgKiBXZSBzaG91bGQgaGF2ZSBnb3R0ZW4gdGhlIGRldmljZSBhdHRyLCBoaWQgZGVzYyBhbmQgcmVwb3J0CiAJICogZGVzYyBhdCB0aGlzIHBvaW50CiAJICovCi0JaWYgKCFpbnB1dERldmljZS0+RGV2aWNlSW5mb1N0YXR1cykKKwlpZiAoIWlucHV0X2Rldi0+ZGV2X2luZm9fc3RhdHVzKQogCQlwcl9pbmZvKCIqKioqIGlucHV0IGNoYW5uZWwgdXAgYW5kIHJ1bm5pbmchISAqKioqIik7CiAJZWxzZQogCQlyZXQgPSAtMTsKIAogQ2xlYW51cDoKLQlQdXRJbnB1dERldmljZShEZXZpY2UpOworCXB1dF9pbnB1dF9kZXZpY2UoZGV2aWNlKTsKIAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgTW91c2V2c2NPbkRldmljZUFkZChzdHJ1Y3QgaHZfZGV2aWNlICpEZXZpY2UsIHZvaWQgKkFkZGl0aW9uYWxJbmZvKQorc3RhdGljIGludCBtb3VzZXZzY19vbl9kZXZpY2VfYWRkKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSwKKwkJCQkJdm9pZCAqYWRkaXRpb25hbF9pbmZvKQogewogCWludCByZXQgPSAwOwotCXN0cnVjdCBtb3VzZXZzY19kZXYgKmlucHV0RGV2aWNlOwotCXN0cnVjdCBtb3VzZXZzY19kcnZfb2JqICppbnB1dERyaXZlcjsKKwlzdHJ1Y3QgbW91c2V2c2NfZGV2ICppbnB1dF9kZXY7CisJc3RydWN0IGh2X2RyaXZlciAqaW5wdXRfZHJ2OwogCXN0cnVjdCBodl9pbnB1dF9kZXZfaW5mbyBkZXZfaW5mbzsKIAotCWlucHV0RGV2aWNlID0gQWxsb2NJbnB1dERldmljZShEZXZpY2UpOworCWlucHV0X2RldiA9IGFsbG9jX2lucHV0X2RldmljZShkZXZpY2UpOwogCi0JaWYgKCFpbnB1dERldmljZSkgeworCWlmICghaW5wdXRfZGV2KSB7CiAJCXJldCA9IC0xOwogCQlnb3RvIENsZWFudXA7CiAJfQogCi0JaW5wdXREZXZpY2UtPmJJbml0aWFsaXplQ29tcGxldGUgPSBmYWxzZTsKKwlpbnB1dF9kZXYtPmluaXRfY29tcGxldGUgPSBmYWxzZTsKIAogCS8qIE9wZW4gdGhlIGNoYW5uZWwgKi8KLQlyZXQgPSB2bWJ1c19vcGVuKERldmljZS0+Y2hhbm5lbCwKKwlyZXQgPSB2bWJ1c19vcGVuKGRldmljZS0+Y2hhbm5lbCwKIAkJSU5QVVRWU0NfU0VORF9SSU5HX0JVRkZFUl9TSVpFLAogCQlJTlBVVFZTQ19SRUNWX1JJTkdfQlVGRkVSX1NJWkUsCiAJCU5VTEwsCiAJCTAsCi0JCU1vdXNldnNjT25DaGFubmVsQ2FsbGJhY2ssCi0JCURldmljZQorCQltb3VzZXZzY19vbl9jaGFubmVsX2NhbGxiYWNrLAorCQlkZXZpY2UKIAkJKTsKIAogCWlmIChyZXQgIT0gMCkgewogCQlwcl9lcnIoInVuYWJsZSB0byBvcGVuIGNoYW5uZWw6ICVkIiwgcmV0KTsKLQkJRnJlZUlucHV0RGV2aWNlKGlucHV0RGV2aWNlKTsKKwkJZnJlZV9pbnB1dF9kZXZpY2UoaW5wdXRfZGV2KTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCXByX2luZm8oIklucHV0VnNjIGNoYW5uZWwgb3BlbjogJWQiLCByZXQpOwogCi0JcmV0ID0gTW91c2V2c2NDb25uZWN0VG9Wc3AoRGV2aWNlKTsKKwlyZXQgPSBtb3VzZXZzY19jb25uZWN0X3RvX3ZzcChkZXZpY2UpOwogCiAJaWYgKHJldCAhPSAwKSB7CiAJCXByX2VycigidW5hYmxlIHRvIGNvbm5lY3QgY2hhbm5lbDogJWQiLCByZXQpOwogCi0JCXZtYnVzX2Nsb3NlKERldmljZS0+Y2hhbm5lbCk7Ci0JCUZyZWVJbnB1dERldmljZShpbnB1dERldmljZSk7CisJCXZtYnVzX2Nsb3NlKGRldmljZS0+Y2hhbm5lbCk7CisJCWZyZWVfaW5wdXRfZGV2aWNlKGlucHV0X2Rldik7CiAJCXJldHVybiByZXQ7CiAJfQogCi0JaW5wdXREcml2ZXIgPSAoc3RydWN0IG1vdXNldnNjX2Rydl9vYmogKilpbnB1dERldmljZS0+RGV2aWNlLT5kcnY7CisJaW5wdXRfZHJ2ID0gZHJ2X3RvX2h2X2RydihpbnB1dF9kZXYtPmRldmljZS0+ZGV2aWNlLmRyaXZlcik7CiAKLQlkZXZfaW5mby52ZW5kb3IgPSBpbnB1dERldmljZS0+aGlkX2Rldl9pbmZvLnZlbmRvcjsKLQlkZXZfaW5mby5wcm9kdWN0ID0gaW5wdXREZXZpY2UtPmhpZF9kZXZfaW5mby5wcm9kdWN0OwotCWRldl9pbmZvLnZlcnNpb24gPSBpbnB1dERldmljZS0+aGlkX2Rldl9pbmZvLnZlcnNpb247CisJZGV2X2luZm8udmVuZG9yID0gaW5wdXRfZGV2LT5oaWRfZGV2X2luZm8udmVuZG9yOworCWRldl9pbmZvLnByb2R1Y3QgPSBpbnB1dF9kZXYtPmhpZF9kZXZfaW5mby5wcm9kdWN0OworCWRldl9pbmZvLnZlcnNpb24gPSBpbnB1dF9kZXYtPmhpZF9kZXZfaW5mby52ZXJzaW9uOwogCXN0cmNweShkZXZfaW5mby5uYW1lLCAiTWljcm9zb2Z0IFZtYnVzIEhJRC1jb21wbGlhbnQgTW91c2UiKTsKIAogCS8qIFNlbmQgdGhlIGRldmljZSBpbmZvIGJhY2sgdXAgKi8KLQlkZXZpY2VpbmZvX2NhbGxiYWNrKERldmljZSwgJmRldl9pbmZvKTsKKwlkZXZpY2VpbmZvX2NhbGxiYWNrKGRldmljZSwgJmRldl9pbmZvKTsKIAogCS8qIFNlbmQgdGhlIHJlcG9ydCBkZXNjIGJhY2sgdXAgKi8KIAkvKiB3b3JrYXJvdW5kIFNBLTE2NyAqLwotCWlmIChpbnB1dERldmljZS0+UmVwb3J0RGVzY1sxNF0gPT0gMHgyNSkKLQkJaW5wdXREZXZpY2UtPlJlcG9ydERlc2NbMTRdID0gMHgyOTsKKwlpZiAoaW5wdXRfZGV2LT5yZXBvcnRfZGVzY1sxNF0gPT0gMHgyNSkKKwkJaW5wdXRfZGV2LT5yZXBvcnRfZGVzY1sxNF0gPSAweDI5OwogCi0JcmVwb3J0ZGVzY19jYWxsYmFjayhEZXZpY2UsIGlucHV0RGV2aWNlLT5SZXBvcnREZXNjLAotCQkJICAgIGlucHV0RGV2aWNlLT5SZXBvcnREZXNjU2l6ZSk7CisJcmVwb3J0ZGVzY19jYWxsYmFjayhkZXZpY2UsIGlucHV0X2Rldi0+cmVwb3J0X2Rlc2MsCisJCQkgICAgaW5wdXRfZGV2LT5yZXBvcnRfZGVzY19zaXplKTsKIAotCWlucHV0RGV2aWNlLT5iSW5pdGlhbGl6ZUNvbXBsZXRlID0gdHJ1ZTsKKwlpbnB1dF9kZXYtPmluaXRfY29tcGxldGUgPSB0cnVlOwogCiBDbGVhbnVwOgogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgTW91c2V2c2NPbkRldmljZVJlbW92ZShzdHJ1Y3QgaHZfZGV2aWNlICpEZXZpY2UpCitzdGF0aWMgaW50IG1vdXNldnNjX29uX2RldmljZV9yZW1vdmUoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlKQogewotCXN0cnVjdCBtb3VzZXZzY19kZXYgKmlucHV0RGV2aWNlOworCXN0cnVjdCBtb3VzZXZzY19kZXYgKmlucHV0X2RldjsKIAlpbnQgcmV0ID0gMDsKIAogCXByX2luZm8oImRpc2FibGluZyBpbnB1dCBkZXZpY2UgKCVwKS4uLiIsCi0JCSAgICBEZXZpY2UtPmV4dCk7CisJCSAgICBkZXZpY2UtPmV4dCk7CiAKLQlpbnB1dERldmljZSA9IFJlbGVhc2VJbnB1dERldmljZShEZXZpY2UpOworCWlucHV0X2RldiA9IHJlbGVhc2VfaW5wdXRfZGV2aWNlKGRldmljZSk7CiAKIAogCS8qCkBAIC03NDMsMjkgKzc0MSwyNyBAQAogCSAqCiAJICogc28gdGhhdCBvdXRzdGFuZGluZyByZXF1ZXN0cyBjYW4gYmUgY29tcGxldGVkLgogCSAqLwotCXdoaWxlIChpbnB1dERldmljZS0+TnVtT3V0c3RhbmRpbmdSZXF1ZXN0cykgewotCQlwcl9pbmZvKCJ3YWl0aW5nIGZvciAlZCByZXF1ZXN0cyB0byBjb21wbGV0ZS4uLiIsIGlucHV0RGV2aWNlLT5OdW1PdXRzdGFuZGluZ1JlcXVlc3RzKTsKKwl3aGlsZSAoaW5wdXRfZGV2LT5udW1fb3V0c3RhbmRpbmdfcmVxKSB7CisJCXByX2luZm8oIndhaXRpbmcgZm9yICVkIHJlcXVlc3RzIHRvIGNvbXBsZXRlLi4uIiwKKwkJCWlucHV0X2Rldi0+bnVtX291dHN0YW5kaW5nX3JlcSk7CiAKIAkJdWRlbGF5KDEwMCk7CiAJfQogCi0JcHJfaW5mbygicmVtb3ZpbmcgaW5wdXQgZGV2aWNlICglcCkuLi4iLCBEZXZpY2UtPmV4dCk7CisJcHJfaW5mbygicmVtb3ZpbmcgaW5wdXQgZGV2aWNlICglcCkuLi4iLCBkZXZpY2UtPmV4dCk7CiAKLQlpbnB1dERldmljZSA9IEZpbmFsUmVsZWFzZUlucHV0RGV2aWNlKERldmljZSk7CisJaW5wdXRfZGV2ID0gZmluYWxfcmVsZWFzZV9pbnB1dF9kZXZpY2UoZGV2aWNlKTsKIAotCXByX2luZm8oImlucHV0IGRldmljZSAoJXApIHNhZmUgdG8gcmVtb3ZlIiwgaW5wdXREZXZpY2UpOworCXByX2luZm8oImlucHV0IGRldmljZSAoJXApIHNhZmUgdG8gcmVtb3ZlIiwgaW5wdXRfZGV2KTsKIAogCS8qIENsb3NlIHRoZSBjaGFubmVsICovCi0Jdm1idXNfY2xvc2UoRGV2aWNlLT5jaGFubmVsKTsKKwl2bWJ1c19jbG9zZShkZXZpY2UtPmNoYW5uZWwpOwogCi0JRnJlZUlucHV0RGV2aWNlKGlucHV0RGV2aWNlKTsKKwlmcmVlX2lucHV0X2RldmljZShpbnB1dF9kZXYpOwogCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgTW91c2V2c2NPbkNsZWFudXAoc3RydWN0IGh2X2RyaXZlciAqZHJ2KQotewotfQogCiAvKgogICogRGF0YSB0eXBlcwpAQCAtNzc4LDggKzc3NCw2IEBACiB9OwogCiAKLXN0YXRpYyBzdHJ1Y3QgIG1vdXNldnNjX2Rydl9vYmogZ19tb3VzZXZzY19kcnY7Ci0KIHN0YXRpYyB2b2lkIGRldmljZWluZm9fY2FsbGJhY2soc3RydWN0IGh2X2RldmljZSAqZGV2LCBzdHJ1Y3QgaHZfaW5wdXRfZGV2X2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGlucHV0X2RldmljZV9jb250ZXh0ICppbnB1dF9kZXZpY2VfY3R4ID0KQEAgLTgxMywyNCArODA3LDE5IEBACiB7CiB9CiAKLXN0YXRpYyBpbnQgbW91c2V2c2NfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBtb3VzZXZzY19wcm9iZShzdHJ1Y3QgaHZfZGV2aWNlICpkZXYpCiB7CiAJaW50IHJldCA9IDA7CiAKLQlzdHJ1Y3QgaHZfZHJpdmVyICpkcnYgPQotCQlkcnZfdG9faHZfZHJ2KGRldmljZS0+ZHJpdmVyKTsKLQlzdHJ1Y3QgbW91c2V2c2NfZHJ2X29iaiAqbW91c2V2c2NfZHJ2X29iaiA9IGRydi0+cHJpdjsKLQotCXN0cnVjdCBodl9kZXZpY2UgKmRldmljZV9vYmogPSBkZXZpY2VfdG9faHZfZGV2aWNlKGRldmljZSk7CiAJc3RydWN0IGlucHV0X2RldmljZV9jb250ZXh0ICppbnB1dF9kZXZfY3R4OwogCiAJaW5wdXRfZGV2X2N0eCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbnB1dF9kZXZpY2VfY29udGV4dCksCiAJCQkJR0ZQX0tFUk5FTCk7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2aWNlLCBpbnB1dF9kZXZfY3R4KTsKKwlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2aWNlLCBpbnB1dF9kZXZfY3R4KTsKIAogCS8qIENhbGwgdG8gdGhlIHZzYyBkcml2ZXIgdG8gYWRkIHRoZSBkZXZpY2UgKi8KLQlyZXQgPSBtb3VzZXZzY19kcnZfb2JqLT5CYXNlLmRldl9hZGQoZGV2aWNlX29iaiwgTlVMTCk7CisJcmV0ID0gbW91c2V2c2Nfb25fZGV2aWNlX2FkZChkZXYsIE5VTEwpOwogCiAJaWYgKHJldCAhPSAwKSB7CiAJCURQUklOVF9FUlIoSU5QVVRWU0NfRFJWLCAidW5hYmxlIHRvIGFkZCBpbnB1dCB2c2MgZGV2aWNlIik7CkBAIC04NDEsMzUgKzgzMCwyNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1vdXNldnNjX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IG1vdXNldnNjX3JlbW92ZShzdHJ1Y3QgaHZfZGV2aWNlICpkZXYpCiB7CiAJaW50IHJldCA9IDA7CiAKLQlzdHJ1Y3QgaHZfZHJpdmVyICpkcnYgPQotCQlkcnZfdG9faHZfZHJ2KGRldmljZS0+ZHJpdmVyKTsKLQlzdHJ1Y3QgbW91c2V2c2NfZHJ2X29iaiAqbW91c2V2c2NfZHJ2X29iaiA9IGRydi0+cHJpdjsKLQotCXN0cnVjdCBodl9kZXZpY2UgKmRldmljZV9vYmogPSBkZXZpY2VfdG9faHZfZGV2aWNlKGRldmljZSk7CiAJc3RydWN0IGlucHV0X2RldmljZV9jb250ZXh0ICppbnB1dF9kZXZfY3R4OwogCiAJaW5wdXRfZGV2X2N0eCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbnB1dF9kZXZpY2VfY29udGV4dCksCiAJCQkJR0ZQX0tFUk5FTCk7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2aWNlLCBpbnB1dF9kZXZfY3R4KTsKKwlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2aWNlLCBpbnB1dF9kZXZfY3R4KTsKIAogCWlmIChpbnB1dF9kZXZfY3R4LT5jb25uZWN0ZWQpIHsKIAkJaGlkaW5wdXRfZGlzY29ubmVjdChpbnB1dF9kZXZfY3R4LT5oaWRfZGV2aWNlKTsKIAkJaW5wdXRfZGV2X2N0eC0+Y29ubmVjdGVkID0gMDsKIAl9CiAKLQlpZiAoIW1vdXNldnNjX2Rydl9vYmotPkJhc2UuZGV2X3JtKQotCQlyZXR1cm4gLTE7Ci0KIAkvKgogCSAqIENhbGwgdG8gdGhlIHZzYyBkcml2ZXIgdG8gbGV0IGl0IGtub3cgdGhhdCB0aGUgZGV2aWNlCiAJICogaXMgYmVpbmcgcmVtb3ZlZAogCSAqLwotCXJldCA9IG1vdXNldnNjX2Rydl9vYmotPkJhc2UuZGV2X3JtKGRldmljZV9vYmopOworCXJldCA9IG1vdXNldnNjX29uX2RldmljZV9yZW1vdmUoZGV2KTsKIAogCWlmIChyZXQgIT0gMCkgewogCQlEUFJJTlRfRVJSKElOUFVUVlNDX0RSViwKQEAgLTkzNCw4MSArOTE1LDI4IEBACiAJa2ZyZWUoaGlkX2Rldik7CiB9CiAKLXN0YXRpYyBpbnQgbW91c2V2c2NfZHJ2X2V4aXRfY2Ioc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkZXZpY2UgKipjdXJyID0gKHN0cnVjdCBkZXZpY2UgKiopZGF0YTsKLQkqY3VyciA9IGRldjsKIAotCXJldHVybiAxOwotfQorc3RhdGljIHN0cnVjdCAgaHZfZHJpdmVyIG1vdXNldnNjX2RydiA9IHsKKwkucHJvYmUgPSBtb3VzZXZzY19wcm9iZSwKKwkucmVtb3ZlID0gbW91c2V2c2NfcmVtb3ZlLAorfTsKIAogc3RhdGljIHZvaWQgbW91c2V2c2NfZHJ2X2V4aXQodm9pZCkKIHsKLQlzdHJ1Y3QgbW91c2V2c2NfZHJ2X29iaiAqbW91c2V2c2NfZHJ2X29iaiA9ICZnX21vdXNldnNjX2RydjsKLQlzdHJ1Y3QgaHZfZHJpdmVyICpkcnYgPSAmZ19tb3VzZXZzY19kcnYuQmFzZTsKLQlpbnQgcmV0OwotCi0Jc3RydWN0IGRldmljZSAqY3VycmVudF9kZXYgPSBOVUxMOwotCi0Jd2hpbGUgKDEpIHsKLQkJY3VycmVudF9kZXYgPSBOVUxMOwotCi0JCS8qIEdldCB0aGUgZGV2aWNlICovCi0JCXJldCA9IGRyaXZlcl9mb3JfZWFjaF9kZXZpY2UoJmRydi0+ZHJpdmVyLCBOVUxMLAotCQkJCQkgICAgICh2b2lkICopJmN1cnJlbnRfZGV2LAotCQkJCQkgICAgIG1vdXNldnNjX2Rydl9leGl0X2NiKTsKLQkJaWYgKHJldCkKLQkJCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3QgZmluZCBtb3VzZSBkZXZpY2UhXG4iKTsKLQotCQlpZiAoY3VycmVudF9kZXYgPT0gTlVMTCkKLQkJCWJyZWFrOwotCi0JCS8qIEluaXRpYXRlIHJlbW92YWwgZnJvbSB0aGUgdG9wLWRvd24gKi8KLQkJZGV2aWNlX3VucmVnaXN0ZXIoY3VycmVudF9kZXYpOwotCX0KLQotCWlmIChtb3VzZXZzY19kcnZfb2JqLT5CYXNlLmNsZWFudXApCi0JCW1vdXNldnNjX2Rydl9vYmotPkJhc2UuY2xlYW51cCgmbW91c2V2c2NfZHJ2X29iai0+QmFzZSk7Ci0KLQl2bWJ1c19jaGlsZF9kcml2ZXJfdW5yZWdpc3RlcigmZHJ2LT5kcml2ZXIpOwotCi0JcmV0dXJuOworCXZtYnVzX2NoaWxkX2RyaXZlcl91bnJlZ2lzdGVyKCZtb3VzZXZzY19kcnYuZHJpdmVyKTsKIH0KIAotc3RhdGljIGludCBtb3VzZV92c2NfaW5pdGlhbGl6ZShzdHJ1Y3QgaHZfZHJpdmVyICpEcml2ZXIpCi17Ci0Jc3RydWN0IG1vdXNldnNjX2Rydl9vYmogKmlucHV0RHJpdmVyID0KLQkJKHN0cnVjdCBtb3VzZXZzY19kcnZfb2JqICopRHJpdmVyOwotCWludCByZXQgPSAwOwotCi0JRHJpdmVyLT5uYW1lID0gZHJpdmVyX25hbWU7Ci0JbWVtY3B5KCZEcml2ZXItPmRldl90eXBlLCAmbW91c2VfZ3VpZCwKLQkgICAgICAgc2l6ZW9mKHN0cnVjdCBodl9ndWlkKSk7Ci0KLQkvKiBTZXR1cCB0aGUgZGlzcGF0Y2ggdGFibGUgKi8KLQlpbnB1dERyaXZlci0+QmFzZS5kZXZfYWRkID0gTW91c2V2c2NPbkRldmljZUFkZDsKLQlpbnB1dERyaXZlci0+QmFzZS5kZXZfcm0gPSBNb3VzZXZzY09uRGV2aWNlUmVtb3ZlOwotCWlucHV0RHJpdmVyLT5CYXNlLmNsZWFudXAgPSBNb3VzZXZzY09uQ2xlYW51cDsKLQotCXJldHVybiByZXQ7Ci19Ci0KLQogc3RhdGljIGludCBfX2luaXQgbW91c2V2c2NfaW5pdCh2b2lkKQogewotCXN0cnVjdCBtb3VzZXZzY19kcnZfb2JqICppbnB1dF9kcnZfb2JqID0gJmdfbW91c2V2c2NfZHJ2OwotCXN0cnVjdCBodl9kcml2ZXIgKmRydiA9ICZnX21vdXNldnNjX2Rydi5CYXNlOworCXN0cnVjdCBodl9kcml2ZXIgKmRydiA9ICZtb3VzZXZzY19kcnY7CiAKIAlEUFJJTlRfSU5GTyhJTlBVVFZTQ19EUlYsICJIeXBlci1WIE1vdXNlIGRyaXZlciBpbml0aWFsaXppbmcuIik7CiAKLQkvKiBDYWxsYmFjayB0byBjbGllbnQgZHJpdmVyIHRvIGNvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiAqLwotCW1vdXNlX3ZzY19pbml0aWFsaXplKCZpbnB1dF9kcnZfb2JqLT5CYXNlKTsKKwltZW1jcHkoJmRydi0+ZGV2X3R5cGUsICZtb3VzZV9ndWlkLAorCSAgICAgICBzaXplb2Yoc3RydWN0IGh2X2d1aWQpKTsKIAotCWRydi0+ZHJpdmVyLm5hbWUgPSBpbnB1dF9kcnZfb2JqLT5CYXNlLm5hbWU7Ci0JZHJ2LT5wcml2ID0gaW5wdXRfZHJ2X29iajsKLQotCWRydi0+ZHJpdmVyLnByb2JlID0gbW91c2V2c2NfcHJvYmU7Ci0JZHJ2LT5kcml2ZXIucmVtb3ZlID0gbW91c2V2c2NfcmVtb3ZlOworCWRydi0+ZHJpdmVyLm5hbWUgPSBkcml2ZXJfbmFtZTsKKwlkcnYtPm5hbWUgPSBkcml2ZXJfbmFtZTsKIAogCS8qIFRoZSBkcml2ZXIgYmVsb25ncyB0byB2bWJ1cyAqLwogCXZtYnVzX2NoaWxkX2RyaXZlcl9yZWdpc3RlcigmZHJ2LT5kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L2h2X3RpbWVzb3VyY2UuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9odl90aW1lc291cmNlLmMKaW5kZXggYTdlZTUzMzMuLjBlZmIwNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9odl90aW1lc291cmNlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L2h2X3RpbWVzb3VyY2UuYwpAQCAtMjAsNiArMjAsNyBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgogICoKICAqLworI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAogCiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CkBAIC05MSw3ICs5Miw3IEBACiAJaWYgKCFkbWlfY2hlY2tfc3lzdGVtKGh2X3RpbWVzb3VyY2VfZG1pX3RhYmxlKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlwcmludGsoS0VSTl9JTkZPICJSZWdpc3RlcmluZyBIeXBlclYgY2xvY2sgc291cmNlXG4iKTsKKwlwcl9pbmZvKCJSZWdpc3RlcmluZyBIeXBlclYgY2xvY2sgc291cmNlXG4iKTsKIAlyZXR1cm4gY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmh5cGVydl9jcyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9odl91dGlsLmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvaHZfdXRpbC5jCmluZGV4IDJkZjE1NjguLmMxNjRiNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9odl91dGlsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L2h2X3V0aWwuYwpAQCAtMTgsNiArMTgsOCBAQAogICogICBIYWl5YW5nIFpoYW5nIDxoYWl5YW5nekBtaWNyb3NvZnQuY29tPgogICogICBIYW5rIEphbnNzZW4gIDxoamFuc3NlbkBtaWNyb3NvZnQuY29tPgogICovCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0yNywxNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCi0jaW5jbHVkZSAibG9nZ2luZy5oIgotI2luY2x1ZGUgImh2X2FwaS5oIgotI2luY2x1ZGUgInZtYnVzLmgiCi0jaW5jbHVkZSAidm1idXNfcGFja2V0X2Zvcm1hdC5oIgotI2luY2x1ZGUgInZtYnVzX2NoYW5uZWxfaW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAidmVyc2lvbl9pbmZvLmgiCi0jaW5jbHVkZSAiY2hhbm5lbC5oIgotI2luY2x1ZGUgInZtYnVzX3ByaXZhdGUuaCIKLSNpbmNsdWRlICJ2bWJ1c19hcGkuaCIKLSNpbmNsdWRlICJ1dGlscy5oIgorI2luY2x1ZGUgImh5cGVydi5oIgogI2luY2x1ZGUgImh2X2t2cC5oIgogCiBzdGF0aWMgdTggKnNodXRfdHhmX2J1ZjsKQEAgLTU5LDkgKzUyLDYgQEAKIAkJCSBQQUdFX1NJWkUsICZyZWN2bGVuLCAmcmVxdWVzdGlkKTsKIAogCWlmIChyZWN2bGVuID4gMCkgewotCQlEUFJJTlRfREJHKFZNQlVTLCAic2h1dGRvd24gcGFja2V0OiBsZW49JWQsIHJlcXVlc3RpZD0lbGxkIiwKLQkJCSAgIHJlY3ZsZW4sIHJlcXVlc3RpZCk7Ci0KIAkJaWNtc2doZHJwID0gKHN0cnVjdCBpY21zZ19oZHIgKikmc2h1dF90eGZfYnVmWwogCQkJc2l6ZW9mKHN0cnVjdCB2bWJ1c3BpcGVfaGRyKV07CiAKQEAgLTc5LDE3ICs2OSwxNyBAQAogCQkJCWljbXNnaGRycC0+c3RhdHVzID0gSFZfU19PSzsKIAkJCQlleGVjdXRlX3NodXRkb3duID0gdHJ1ZTsKIAotCQkJCURQUklOVF9JTkZPKFZNQlVTLCAiU2h1dGRvd24gcmVxdWVzdCByZWNlaXZlZCAtIgotCQkJCQkgICAgIiBncmFjZWZ1bCBzaHV0ZG93biBpbml0aWF0ZWQiKTsKKwkJCQlwcl9pbmZvKCJTaHV0ZG93biByZXF1ZXN0IHJlY2VpdmVkIC0iCisJCQkJCSAgICAiIGdyYWNlZnVsIHNodXRkb3duIGluaXRpYXRlZFxuIik7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCWljbXNnaGRycC0+c3RhdHVzID0gSFZfRV9GQUlMOwogCQkJCWV4ZWN1dGVfc2h1dGRvd24gPSBmYWxzZTsKIAotCQkJCURQUklOVF9JTkZPKFZNQlVTLCAiU2h1dGRvd24gcmVxdWVzdCByZWNlaXZlZCAtIgotCQkJCQkgICAgIiBJbnZhbGlkIHJlcXVlc3QiKTsKKwkJCQlwcl9pbmZvKCJTaHV0ZG93biByZXF1ZXN0IHJlY2VpdmVkIC0iCisJCQkJCSAgICAiIEludmFsaWQgcmVxdWVzdFxuIik7CiAJCQkJYnJlYWs7Ci0JCQl9OworCQkJfQogCQl9CiAKIAkJaWNtc2doZHJwLT5pY2ZsYWdzID0gSUNNU0dIRFJGTEFHX1RSQU5TQUNUSU9OCkBAIC0xNTksOSArMTQ5LDYgQEAKIAkJCSBQQUdFX1NJWkUsICZyZWN2bGVuLCAmcmVxdWVzdGlkKTsKIAogCWlmIChyZWN2bGVuID4gMCkgewotCQlEUFJJTlRfREJHKFZNQlVTLCAidGltZXN5bmMgcGFja2V0OiByZWN2bGVuPSVkLCByZXF1ZXN0aWQ9JWxsZCIsCi0JCQlyZWN2bGVuLCByZXF1ZXN0aWQpOwotCiAJCWljbXNnaGRycCA9IChzdHJ1Y3QgaWNtc2dfaGRyICopJnRpbWVfdHhmX2J1ZlsKIAkJCQlzaXplb2Yoc3RydWN0IHZtYnVzcGlwZV9oZHIpXTsKIApAQCAtMjAwLDkgKzE4Nyw2IEBACiAJCQkgUEFHRV9TSVpFLCAmcmVjdmxlbiwgJnJlcXVlc3RpZCk7CiAKIAlpZiAocmVjdmxlbiA+IDApIHsKLQkJRFBSSU5UX0RCRyhWTUJVUywgImhlYXJ0YmVhdCBwYWNrZXQ6IGxlbj0lZCwgcmVxdWVzdGlkPSVsbGQiLAotCQkJICAgcmVjdmxlbiwgcmVxdWVzdGlkKTsKLQogCQlpY21zZ2hkcnAgPSAoc3RydWN0IGljbXNnX2hkciAqKSZoYmVhdF90eGZfYnVmWwogCQkJCXNpemVvZihzdHJ1Y3Qgdm1idXNwaXBlX2hkcildOwogCkBAIC0yMTQsOSArMTk4LDYgQEAKIAkJCQkJc2l6ZW9mKHN0cnVjdCB2bWJ1c3BpcGVfaGRyKSArCiAJCQkJCXNpemVvZihzdHJ1Y3QgaWNtc2dfaGRyKV07CiAKLQkJCURQUklOVF9EQkcoVk1CVVMsICJoZWFydGJlYXQgc2VxID0gJWxsZCIsCi0JCQkJICAgaGVhcnRiZWF0X21zZy0+c2VxX251bSk7Ci0KIAkJCWhlYXJ0YmVhdF9tc2ctPnNlcV9udW0gKz0gMTsKIAkJfQogCkBAIC0yNTQsNyArMjM1LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgaW5pdF9oeXBlcnZfdXRpbHModm9pZCkKIHsKLQlwcmludGsoS0VSTl9JTkZPICJSZWdpc3RlcmluZyBIeXBlclYgVXRpbGl0eSBEcml2ZXJcbiIpOworCXByX2luZm8oIlJlZ2lzdGVyaW5nIEh5cGVyViBVdGlsaXR5IERyaXZlclxuIik7CiAKIAlpZiAoaHZfa3ZwX2luaXQoKSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0yNjgsNTIgKzI0OSw0OCBAQAogCWhiZWF0X3R4Zl9idWYgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIXNodXRfdHhmX2J1ZiB8fCAhdGltZV90eGZfYnVmIHx8ICFoYmVhdF90eGZfYnVmKSB7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJICAgICAgICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciByZWNlaXZlIGJ1ZmZlclxuIik7CisJCXByX2luZm8oIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHJlY2VpdmUgYnVmZmVyXG4iKTsKIAkJa2ZyZWUoc2h1dF90eGZfYnVmKTsKIAkJa2ZyZWUodGltZV90eGZfYnVmKTsKIAkJa2ZyZWUoaGJlYXRfdHhmX2J1Zik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWh2X2NiX3V0aWxzW0hWX1NIVVRET1dOX01TR10uY2hhbm5lbC0+b25jaGFubmVsX2NhbGxiYWNrID0KLQkJJnNodXRkb3duX29uY2hhbm5lbGNhbGxiYWNrOwogCWh2X2NiX3V0aWxzW0hWX1NIVVRET1dOX01TR10uY2FsbGJhY2sgPSAmc2h1dGRvd25fb25jaGFubmVsY2FsbGJhY2s7CiAKLQlodl9jYl91dGlsc1tIVl9USU1FU1lOQ19NU0ddLmNoYW5uZWwtPm9uY2hhbm5lbF9jYWxsYmFjayA9Ci0JCSZ0aW1lc3luY19vbmNoYW5uZWxjYWxsYmFjazsKIAlodl9jYl91dGlsc1tIVl9USU1FU1lOQ19NU0ddLmNhbGxiYWNrID0gJnRpbWVzeW5jX29uY2hhbm5lbGNhbGxiYWNrOwogCi0JaHZfY2JfdXRpbHNbSFZfSEVBUlRCRUFUX01TR10uY2hhbm5lbC0+b25jaGFubmVsX2NhbGxiYWNrID0KLQkJJmhlYXJ0YmVhdF9vbmNoYW5uZWxjYWxsYmFjazsKIAlodl9jYl91dGlsc1tIVl9IRUFSVEJFQVRfTVNHXS5jYWxsYmFjayA9ICZoZWFydGJlYXRfb25jaGFubmVsY2FsbGJhY2s7CiAKLQlodl9jYl91dGlsc1tIVl9LVlBfTVNHXS5jaGFubmVsLT5vbmNoYW5uZWxfY2FsbGJhY2sgPQotCQkmaHZfa3ZwX29uY2hhbm5lbGNhbGxiYWNrOwotCi0KKwlodl9jYl91dGlsc1tIVl9LVlBfTVNHXS5jYWxsYmFjayA9ICZodl9rdnBfb25jaGFubmVsY2FsbGJhY2s7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgZXhpdF9oeXBlcnZfdXRpbHModm9pZCkKIHsKLQlwcmludGsoS0VSTl9JTkZPICJEZS1SZWdpc3RlcmVkIEh5cGVyViBVdGlsaXR5IERyaXZlclxuIik7CisJcHJfaW5mbygiRGUtUmVnaXN0ZXJlZCBIeXBlclYgVXRpbGl0eSBEcml2ZXJcbiIpOwogCi0JaHZfY2JfdXRpbHNbSFZfU0hVVERPV05fTVNHXS5jaGFubmVsLT5vbmNoYW5uZWxfY2FsbGJhY2sgPQotCQkmY2huX2NiX25lZ290aWF0ZTsKLQlodl9jYl91dGlsc1tIVl9TSFVURE9XTl9NU0ddLmNhbGxiYWNrID0gJmNobl9jYl9uZWdvdGlhdGU7CisJaWYgKGh2X2NiX3V0aWxzW0hWX1NIVVRET1dOX01TR10uY2hhbm5lbCAhPSBOVUxMKQorCQlodl9jYl91dGlsc1tIVl9TSFVURE9XTl9NU0ddLmNoYW5uZWwtPm9uY2hhbm5lbF9jYWxsYmFjayA9CisJCQkmY2huX2NiX25lZ290aWF0ZTsKKwlodl9jYl91dGlsc1tIVl9TSFVURE9XTl9NU0ddLmNhbGxiYWNrID0gTlVMTDsKIAotCWh2X2NiX3V0aWxzW0hWX1RJTUVTWU5DX01TR10uY2hhbm5lbC0+b25jaGFubmVsX2NhbGxiYWNrID0KLQkJJmNobl9jYl9uZWdvdGlhdGU7Ci0JaHZfY2JfdXRpbHNbSFZfVElNRVNZTkNfTVNHXS5jYWxsYmFjayA9ICZjaG5fY2JfbmVnb3RpYXRlOworCWlmIChodl9jYl91dGlsc1tIVl9USU1FU1lOQ19NU0ddLmNoYW5uZWwgIT0gTlVMTCkKKwkJaHZfY2JfdXRpbHNbSFZfVElNRVNZTkNfTVNHXS5jaGFubmVsLT5vbmNoYW5uZWxfY2FsbGJhY2sgPQorCQkJJmNobl9jYl9uZWdvdGlhdGU7CisJaHZfY2JfdXRpbHNbSFZfVElNRVNZTkNfTVNHXS5jYWxsYmFjayA9IE5VTEw7CiAKLQlodl9jYl91dGlsc1tIVl9IRUFSVEJFQVRfTVNHXS5jaGFubmVsLT5vbmNoYW5uZWxfY2FsbGJhY2sgPQotCQkmY2huX2NiX25lZ290aWF0ZTsKLQlodl9jYl91dGlsc1tIVl9IRUFSVEJFQVRfTVNHXS5jYWxsYmFjayA9ICZjaG5fY2JfbmVnb3RpYXRlOworCWlmIChodl9jYl91dGlsc1tIVl9IRUFSVEJFQVRfTVNHXS5jaGFubmVsICE9IE5VTEwpCisJCWh2X2NiX3V0aWxzW0hWX0hFQVJUQkVBVF9NU0ddLmNoYW5uZWwtPm9uY2hhbm5lbF9jYWxsYmFjayA9CisJCQkmY2huX2NiX25lZ290aWF0ZTsKKwlodl9jYl91dGlsc1tIVl9IRUFSVEJFQVRfTVNHXS5jYWxsYmFjayA9IE5VTEw7CiAKLQlodl9jYl91dGlsc1tIVl9LVlBfTVNHXS5jaGFubmVsLT5vbmNoYW5uZWxfY2FsbGJhY2sgPQotCQkmY2huX2NiX25lZ290aWF0ZTsKKwlpZiAoaHZfY2JfdXRpbHNbSFZfS1ZQX01TR10uY2hhbm5lbCAhPSBOVUxMKQorCQlodl9jYl91dGlsc1tIVl9LVlBfTVNHXS5jaGFubmVsLT5vbmNoYW5uZWxfY2FsbGJhY2sgPQorCQkJJmNobl9jYl9uZWdvdGlhdGU7CisJaHZfY2JfdXRpbHNbSFZfS1ZQX01TR10uY2FsbGJhY2sgPSBOVUxMOworCiAJaHZfa3ZwX2RlaW5pdCgpOwogCiAJa2ZyZWUoc2h1dF90eGZfYnVmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9oeXBlcnYuaCBiL2RyaXZlcnMvc3RhZ2luZy9odi9oeXBlcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzEwZTliCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L2h5cGVydi5oCkBAIC0wLDAgKzEsOTQ0IEBACisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgTWljcm9zb2Z0IENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlCisgKiBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KKyAqCisgKiBBdXRob3JzOgorICogICBIYWl5YW5nIFpoYW5nIDxoYWl5YW5nekBtaWNyb3NvZnQuY29tPgorICogICBIYW5rIEphbnNzZW4gIDxoamFuc3NlbkBtaWNyb3NvZnQuY29tPgorICogICBLLiBZLiBTcmluaXZhc2FuIDxreXNAbWljcm9zb2Z0LmNvbT4KKyAqCisgKi8KKworI2lmbmRlZiBfSFlQRVJWX0gKKyNkZWZpbmUgX0hZUEVSVl9ICisKKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworCisjaW5jbHVkZSA8YXNtL2h5cGVydi5oPgorCitzdHJ1Y3QgaHZfZ3VpZCB7CisJdW5zaWduZWQgY2hhciBkYXRhWzE2XTsKK307CisKKyNkZWZpbmUgTUFYX1BBR0VfQlVGRkVSX0NPVU5UCQkJCTE2CisjZGVmaW5lIE1BWF9NVUxUSVBBR0VfQlVGRkVSX0NPVU5UCQkJMzIgLyogMTI4SyAqLworCisjcHJhZ21hIHBhY2socHVzaCwgMSkKKworLyogU2luZ2xlLXBhZ2UgYnVmZmVyICovCitzdHJ1Y3QgaHZfcGFnZV9idWZmZXIgeworCXUzMiBsZW47CisJdTMyIG9mZnNldDsKKwl1NjQgcGZuOworfTsKKworLyogTXVsdGlwbGUtcGFnZSBidWZmZXIgKi8KK3N0cnVjdCBodl9tdWx0aXBhZ2VfYnVmZmVyIHsKKwkvKiBMZW5ndGggYW5kIE9mZnNldCBkZXRlcm1pbmVzIHRoZSAjIG9mIHBmbnMgaW4gdGhlIGFycmF5ICovCisJdTMyIGxlbjsKKwl1MzIgb2Zmc2V0OworCXU2NCBwZm5fYXJyYXlbTUFYX01VTFRJUEFHRV9CVUZGRVJfQ09VTlRdOworfTsKKworLyogMHgxOCBpbmNsdWRlcyB0aGUgcHJvcHJpZXRhcnkgcGFja2V0IGhlYWRlciAqLworI2RlZmluZSBNQVhfUEFHRV9CVUZGRVJfUEFDS0VUCQkoMHgxOCArCQkJXAorCQkJCQkoc2l6ZW9mKHN0cnVjdCBodl9wYWdlX2J1ZmZlcikgKiBcCisJCQkJCSBNQVhfUEFHRV9CVUZGRVJfQ09VTlQpKQorI2RlZmluZSBNQVhfTVVMVElQQUdFX0JVRkZFUl9QQUNLRVQJKDB4MTggKwkJCVwKKwkJCQkJIHNpemVvZihzdHJ1Y3QgaHZfbXVsdGlwYWdlX2J1ZmZlcikpCisKKworI3ByYWdtYSBwYWNrKHBvcCkKKworc3RydWN0IGh2X3JpbmdfYnVmZmVyIHsKKwkvKiBPZmZzZXQgaW4gYnl0ZXMgZnJvbSB0aGUgc3RhcnQgb2YgcmluZyBkYXRhIGJlbG93ICovCisJdTMyIHdyaXRlX2luZGV4OworCisJLyogT2Zmc2V0IGluIGJ5dGVzIGZyb20gdGhlIHN0YXJ0IG9mIHJpbmcgZGF0YSBiZWxvdyAqLworCXUzMiByZWFkX2luZGV4OworCisJdTMyIGludGVycnVwdF9tYXNrOworCisJLyogUGFkIGl0IHRvIFBBR0VfU0laRSBzbyB0aGF0IGRhdGEgc3RhcnRzIG9uIHBhZ2UgYm91bmRhcnkgKi8KKwl1OAlyZXNlcnZlZFs0MDg0XTsKKworCS8qIE5PVEU6CisJICogVGhlIGludGVycnVwdF9tYXNrIGZpZWxkIGlzIHVzZWQgb25seSBmb3IgY2hhbm5lbHMgYnV0IHNpbmNlIG91cgorCSAqIHZtYnVzIGNvbm5lY3Rpb24gYWxzbyB1c2VzIHRoaXMgZGF0YSBzdHJ1Y3R1cmUgYW5kIGl0cyBkYXRhIHN0YXJ0cworCSAqIGhlcmUsIHdlIGNvbW1lbnRlZCBvdXQgdGhpcyBmaWVsZC4KKwkgKi8KKworCS8qCisJICogUmluZyBkYXRhIHN0YXJ0cyBoZXJlICsgUmluZ0RhdGFTdGFydE9mZnNldAorCSAqICEhISBETyBOT1QgcGxhY2UgYW55IGZpZWxkcyBiZWxvdyB0aGlzICEhIQorCSAqLworCXU4IGJ1ZmZlclswXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvIHsKKwlzdHJ1Y3QgaHZfcmluZ19idWZmZXIgKnJpbmdfYnVmZmVyOworCXUzMiByaW5nX3NpemU7CQkJLyogSW5jbHVkZSB0aGUgc2hhcmVkIGhlYWRlciAqLworCXNwaW5sb2NrX3QgcmluZ19sb2NrOworCisJdTMyIHJpbmdfZGF0YXNpemU7CQkvKiA8IHJpbmdfc2l6ZSAqLworCXUzMiByaW5nX2RhdGFfc3RhcnRvZmZzZXQ7Cit9OworCitzdHJ1Y3QgaHZfcmluZ19idWZmZXJfZGVidWdfaW5mbyB7CisJdTMyIGN1cnJlbnRfaW50ZXJydXB0X21hc2s7CisJdTMyIGN1cnJlbnRfcmVhZF9pbmRleDsKKwl1MzIgY3VycmVudF93cml0ZV9pbmRleDsKKwl1MzIgYnl0ZXNfYXZhaWxfdG9yZWFkOworCXUzMiBieXRlc19hdmFpbF90b3dyaXRlOworfTsKKworLyoKKyAqIFdlIHVzZSB0aGUgc2FtZSB2ZXJzaW9uIG51bWJlcmluZyBmb3IgYWxsIEh5cGVyLVYgbW9kdWxlcy4KKyAqCisgKiBEZWZpbml0aW9uIG9mIHZlcnNpb25pbmcgaXMgYXMgZm9sbG93czsKKyAqCisgKglNYWpvciBOdW1iZXIJQ2hhbmdlcyBmb3IgdGhlc2Ugc2NlbmFyaW9zOworICoJCQkxLglXaGVuIGEgbmV3IHZlcnNpb24gb2YgV2luZG93cyBIeXBlci1WCisgKgkJCQlpcyByZWxlYXNlZC4KKyAqCQkJMi4JQSBNYWpvciBjaGFuZ2UgaGFzIG9jY3VycmVkIGluIHRoZQorICoJCQkJTGludXggSUMncy4KKyAqCQkJKEZvciBleGFtcGxlIHRoZSBtZXJnZSBmb3IgdGhlIGZpcnN0IHRpbWUKKyAqCQkJaW50byB0aGUga2VybmVsKSBFdmVyeSB0aW1lIHRoZSBNYWpvciBOdW1iZXIKKyAqCQkJY2hhbmdlcywgdGhlIFJldmlzaW9uIG51bWJlciBpcyByZXNldCB0byAwLgorICoJTWlub3IgTnVtYmVyCUNoYW5nZXMgd2hlbiBuZXcgZnVuY3Rpb25hbGl0eSBpcyBhZGRlZAorICoJCQl0byB0aGUgTGludXggSUMncyB0aGF0IGlzIG5vdCBhIGJ1ZyBmaXguCisgKgorICogMy4xIC0gQWRkZWQgY29tcGxldGVkIGh2X3V0aWxzIGRyaXZlci4gU2h1dGRvd24vSGVhcnRiZWF0L1RpbWVzeW5jCisgKi8KKyNkZWZpbmUgSFZfRFJWX1ZFUlNJT04gICAgICAgICAgICIzLjEiCisKKworLyoKKyAqIEEgcmV2aXNpb24gbnVtYmVyIG9mIHZtYnVzIHRoYXQgaXMgdXNlZCBmb3IgZW5zdXJpbmcgYm90aCBlbmRzIG9uIGEKKyAqIHBhcnRpdGlvbiBhcmUgdXNpbmcgY29tcGF0aWJsZSB2ZXJzaW9ucy4KKyAqLworI2RlZmluZSBWTUJVU19SRVZJU0lPTl9OVU1CRVIJCTEzCisKKy8qIE1ha2UgbWF4aW11bSBzaXplIG9mIHBpcGUgcGF5bG9hZCBvZiAxNksgKi8KKyNkZWZpbmUgTUFYX1BJUEVfREFUQV9QQVlMT0FECQkoc2l6ZW9mKHU4KSAqIDE2Mzg0KQorCisvKiBEZWZpbmUgUGlwZU1vZGUgdmFsdWVzLiAqLworI2RlZmluZSBWTUJVU19QSVBFX1RZUEVfQllURQkJMHgwMDAwMDAwMAorI2RlZmluZSBWTUJVU19QSVBFX1RZUEVfTUVTU0FHRQkJMHgwMDAwMDAwNAorCisvKiBUaGUgc2l6ZSBvZiB0aGUgdXNlciBkZWZpbmVkIGRhdGEgYnVmZmVyIGZvciBub24tcGlwZSBvZmZlcnMuICovCisjZGVmaW5lIE1BWF9VU0VSX0RFRklORURfQllURVMJCTEyMAorCisvKiBUaGUgc2l6ZSBvZiB0aGUgdXNlciBkZWZpbmVkIGRhdGEgYnVmZmVyIGZvciBwaXBlIG9mZmVycy4gKi8KKyNkZWZpbmUgTUFYX1BJUEVfVVNFUl9ERUZJTkVEX0JZVEVTCTExNgorCisvKgorICogQXQgdGhlIGNlbnRlciBvZiB0aGUgQ2hhbm5lbCBNYW5hZ2VtZW50IGxpYnJhcnkgaXMgdGhlIENoYW5uZWwgT2ZmZXIuIFRoaXMKKyAqIHN0cnVjdCBjb250YWlucyB0aGUgZnVuZGFtZW50YWwgaW5mb3JtYXRpb24gYWJvdXQgYW4gb2ZmZXIuCisgKi8KK3N0cnVjdCB2bWJ1c19jaGFubmVsX29mZmVyIHsKKwlzdHJ1Y3QgaHZfZ3VpZCBpZl90eXBlOworCXN0cnVjdCBodl9ndWlkIGlmX2luc3RhbmNlOworCXU2NCBpbnRfbGF0ZW5jeTsgLyogaW4gMTAwbnMgdW5pdHMgKi8KKwl1MzIgaWZfcmV2aXNpb247CisJdTMyIHNlcnZlcl9jdHhfc2l6ZTsJLyogaW4gYnl0ZXMgKi8KKwl1MTYgY2huX2ZsYWdzOworCXUxNiBtbWlvX21lZ2FieXRlczsJCS8qIGluIGJ5dGVzICogMTAyNCAqIDEwMjQgKi8KKworCXVuaW9uIHsKKwkJLyogTm9uLXBpcGVzOiBUaGUgdXNlciBoYXMgTUFYX1VTRVJfREVGSU5FRF9CWVRFUyBieXRlcy4gKi8KKwkJc3RydWN0IHsKKwkJCXVuc2lnbmVkIGNoYXIgdXNlcl9kZWZbTUFYX1VTRVJfREVGSU5FRF9CWVRFU107CisJCX0gc3RkOworCisJCS8qCisJCSAqIFBpcGVzOgorCQkgKiBUaGUgZm9sbG93aW5nIHNydWN0dXJlIGlzIGFuIGludGVncmF0ZWQgcGlwZSBwcm90b2NvbCwgd2hpY2gKKwkJICogaXMgaW1wbGVtZW50ZWQgb24gdG9wIG9mIHN0YW5kYXJkIHVzZXItZGVmaW5lZCBkYXRhLiBQaXBlCisJCSAqIGNsaWVudHMgaGF2ZSBNQVhfUElQRV9VU0VSX0RFRklORURfQllURVMgbGVmdCBmb3IgdGhlaXIgb3duCisJCSAqIHVzZS4KKwkJICovCisJCXN0cnVjdCB7CisJCQl1MzIgIHBpcGVfbW9kZTsKKwkJCXVuc2lnbmVkIGNoYXIgdXNlcl9kZWZbTUFYX1BJUEVfVVNFUl9ERUZJTkVEX0JZVEVTXTsKKwkJfSBwaXBlOworCX0gdTsKKwl1MzIgcGFkZGluZzsKK30gX19wYWNrZWQ7CisKKy8qIFNlcnZlciBGbGFncyAqLworI2RlZmluZSBWTUJVU19DSEFOTkVMX0VOVU1FUkFURV9ERVZJQ0VfSU5URVJGQUNFCTEKKyNkZWZpbmUgVk1CVVNfQ0hBTk5FTF9TRVJWRVJfU1VQUE9SVFNfVFJBTlNGRVJfUEFHRVMJMgorI2RlZmluZSBWTUJVU19DSEFOTkVMX1NFUlZFUl9TVVBQT1JUU19HUEFETFMJCTQKKyNkZWZpbmUgVk1CVVNfQ0hBTk5FTF9OQU1FRF9QSVBFX01PREUJCQkweDEwCisjZGVmaW5lIFZNQlVTX0NIQU5ORUxfTE9PUEJBQ0tfT0ZGRVIJCQkweDEwMAorI2RlZmluZSBWTUJVU19DSEFOTkVMX1BBUkVOVF9PRkZFUgkJCTB4MjAwCisjZGVmaW5lIFZNQlVTX0NIQU5ORUxfUkVRVUVTVF9NT05JVE9SRURfTk9USUZJQ0FUSU9OCTB4NDAwCisKK3N0cnVjdCB2bXBhY2tldF9kZXNjcmlwdG9yIHsKKwl1MTYgdHlwZTsKKwl1MTYgb2Zmc2V0ODsKKwl1MTYgbGVuODsKKwl1MTYgZmxhZ3M7CisJdTY0IHRyYW5zX2lkOworfSBfX3BhY2tlZDsKKworc3RydWN0IHZtcGFja2V0X2hlYWRlciB7CisJdTMyIHByZXZfcGt0X3N0YXJ0X29mZnNldDsKKwlzdHJ1Y3Qgdm1wYWNrZXRfZGVzY3JpcHRvciBkZXNjcmlwdG9yOworfSBfX3BhY2tlZDsKKworc3RydWN0IHZtdHJhbnNmZXJfcGFnZV9yYW5nZSB7CisJdTMyIGJ5dGVfY291bnQ7CisJdTMyIGJ5dGVfb2Zmc2V0OworfSBfX3BhY2tlZDsKKworc3RydWN0IHZtdHJhbnNmZXJfcGFnZV9wYWNrZXRfaGVhZGVyIHsKKwlzdHJ1Y3Qgdm1wYWNrZXRfZGVzY3JpcHRvciBkOworCXUxNiB4ZmVyX3BhZ2VzZXRfaWQ7CisJYm9vbCBzZW5kZXJfb3duc19zZXQ7CisJdTggcmVzZXJ2ZWQ7CisJdTMyIHJhbmdlX2NudDsKKwlzdHJ1Y3Qgdm10cmFuc2Zlcl9wYWdlX3JhbmdlIHJhbmdlc1sxXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB2bWdwYWRsX3BhY2tldF9oZWFkZXIgeworCXN0cnVjdCB2bXBhY2tldF9kZXNjcmlwdG9yIGQ7CisJdTMyIGdwYWRsOworCXUzMiByZXNlcnZlZDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB2bWFkZF9yZW1vdmVfdHJhbnNmZXJfcGFnZV9zZXQgeworCXN0cnVjdCB2bXBhY2tldF9kZXNjcmlwdG9yIGQ7CisJdTMyIGdwYWRsOworCXUxNiB4ZmVyX3BhZ2VzZXRfaWQ7CisJdTE2IHJlc2VydmVkOworfSBfX3BhY2tlZDsKKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgYSByYW5nZSBpbiBndWVzdCBwaHlzaWNhbCBzcGFjZSB0aGF0IGNhbiBiZSBtYWRlIHRvCisgKiBsb29rIHZpcnR1YWxseSBjb250aWd1b3VzLgorICovCitzdHJ1Y3QgZ3BhX3JhbmdlIHsKKwl1MzIgYnl0ZV9jb3VudDsKKwl1MzIgYnl0ZV9vZmZzZXQ7CisJdTY0IHBmbl9hcnJheVswXTsKK307CisKKy8qCisgKiBUaGlzIGlzIHRoZSBmb3JtYXQgZm9yIGFuIEVzdGFibGlzaCBHcGFkbCBwYWNrZXQsIHdoaWNoIGNvbnRhaW5zIGEgaGFuZGxlIGJ5CisgKiB3aGljaCB0aGlzIEdQQURMIHdpbGwgYmUga25vd24gYW5kIGEgc2V0IG9mIEdQQSByYW5nZXMgYXNzb2NpYXRlZCB3aXRoIGl0LgorICogVGhpcyBjYW4gYmUgY29udmVydGVkIHRvIGEgTURMIGJ5IHRoZSBndWVzdCBPUy4gIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBHUEEKKyAqIHJhbmdlcywgdGhlbiB0aGUgcmVzdWx0aW5nIE1ETCB3aWxsIGJlICJjaGFpbmVkLCIgcmVwcmVzZW50aW5nIG11bHRpcGxlIFZBCisgKiByYW5nZXMuCisgKi8KK3N0cnVjdCB2bWVzdGFibGlzaF9ncGFkbCB7CisJc3RydWN0IHZtcGFja2V0X2Rlc2NyaXB0b3IgZDsKKwl1MzIgZ3BhZGw7CisJdTMyIHJhbmdlX2NudDsKKwlzdHJ1Y3QgZ3BhX3JhbmdlIHJhbmdlWzFdOworfSBfX3BhY2tlZDsKKworLyoKKyAqIFRoaXMgaXMgdGhlIGZvcm1hdCBmb3IgYSBUZWFyZG93biBHcGFkbCBwYWNrZXQsIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZQorICogR1BBREwgaGFuZGxlIGluIHRoZSBFc3RhYmxpc2ggR3BhZGwgcGFja2V0IHdpbGwgbmV2ZXIgYmUgcmVmZXJlbmNlZCBhZ2Fpbi4KKyAqLworc3RydWN0IHZtdGVhcmRvd25fZ3BhZGwgeworCXN0cnVjdCB2bXBhY2tldF9kZXNjcmlwdG9yIGQ7CisJdTMyIGdwYWRsOworCXUzMiByZXNlcnZlZDsJLyogZm9yIGFsaWdubWVudCB0byBhIDgtYnl0ZSBib3VuZGFyeSAqLworfSBfX3BhY2tlZDsKKworLyoKKyAqIFRoaXMgaXMgdGhlIGZvcm1hdCBmb3IgYSBHUEEtRGlyZWN0IHBhY2tldCwgd2hpY2ggY29udGFpbnMgYSBzZXQgb2YgR1BBCisgKiByYW5nZXMsIGluIGFkZGl0aW9uIHRvIGNvbW1hbmRzIGFuZC9vciBkYXRhLgorICovCitzdHJ1Y3Qgdm1kYXRhX2dwYV9kaXJlY3QgeworCXN0cnVjdCB2bXBhY2tldF9kZXNjcmlwdG9yIGQ7CisJdTMyIHJlc2VydmVkOworCXUzMiByYW5nZV9jbnQ7CisJc3RydWN0IGdwYV9yYW5nZSByYW5nZVsxXTsKK30gX19wYWNrZWQ7CisKKy8qIFRoaXMgaXMgdGhlIGZvcm1hdCBmb3IgYSBBZGRpdGlvbmFsIERhdGEgUGFja2V0LiAqLworc3RydWN0IHZtYWRkaXRpb25hbF9kYXRhIHsKKwlzdHJ1Y3Qgdm1wYWNrZXRfZGVzY3JpcHRvciBkOworCXU2NCB0b3RhbF9ieXRlczsKKwl1MzIgb2Zmc2V0OworCXUzMiBieXRlX2NudDsKKwl1bnNpZ25lZCBjaGFyIGRhdGFbMV07Cit9IF9fcGFja2VkOworCit1bmlvbiB2bXBhY2tldF9sYXJnZXN0X3Bvc3NpYmxlX2hlYWRlciB7CisJc3RydWN0IHZtcGFja2V0X2Rlc2NyaXB0b3Igc2ltcGxlX2hkcjsKKwlzdHJ1Y3Qgdm10cmFuc2Zlcl9wYWdlX3BhY2tldF9oZWFkZXIgeGZlcl9wYWdlX2hkcjsKKwlzdHJ1Y3Qgdm1ncGFkbF9wYWNrZXRfaGVhZGVyIGdwYWRsX2hkcjsKKwlzdHJ1Y3Qgdm1hZGRfcmVtb3ZlX3RyYW5zZmVyX3BhZ2Vfc2V0IGFkZF9ybV94ZmVyX3BhZ2VfaGRyOworCXN0cnVjdCB2bWVzdGFibGlzaF9ncGFkbCBlc3RhYmxpc2hfZ3BhZGxfaGRyOworCXN0cnVjdCB2bXRlYXJkb3duX2dwYWRsIHRlYXJkb3duX2dwYWRsX2hkcjsKKwlzdHJ1Y3Qgdm1kYXRhX2dwYV9kaXJlY3QgZGF0YV9ncGFfZGlyZWN0X2hkcjsKK307CisKKyNkZWZpbmUgVk1QQUNLRVRfREFUQV9TVEFSVF9BRERSRVNTKF9fcGFja2V0KQlcCisJKHZvaWQgKikoKCh1bnNpZ25lZCBjaGFyICopX19wYWNrZXQpICsJXAorCSAoKHN0cnVjdCB2bXBhY2tldF9kZXNjcmlwdG9yKV9fcGFja2V0KS0+b2Zmc2V0OCAqIDgpCisKKyNkZWZpbmUgVk1QQUNLRVRfREFUQV9MRU5HVEgoX19wYWNrZXQpCQlcCisJKCgoKHN0cnVjdCB2bXBhY2tldF9kZXNjcmlwdG9yKV9fcGFja2V0KS0+bGVuOCAtCVwKKwkgICgoc3RydWN0IHZtcGFja2V0X2Rlc2NyaXB0b3IpX19wYWNrZXQpLT5vZmZzZXQ4KSAqIDgpCisKKyNkZWZpbmUgVk1QQUNLRVRfVFJBTlNGRVJfTU9ERShfX3BhY2tldCkJXAorCSgoKHN0cnVjdCBJTVBBQ1QpX19wYWNrZXQpLT50eXBlKQorCitlbnVtIHZtYnVzX3BhY2tldF90eXBlIHsKKwlWTV9QS1RfSU5WQUxJRAkJCQk9IDB4MCwKKwlWTV9QS1RfU1lOQ0gJCQkJPSAweDEsCisJVk1fUEtUX0FERF9YRkVSX1BBR0VTRVQJCQk9IDB4MiwKKwlWTV9QS1RfUk1fWEZFUl9QQUdFU0VUCQkJPSAweDMsCisJVk1fUEtUX0VTVEFCTElTSF9HUEFETAkJCT0gMHg0LAorCVZNX1BLVF9URUFSRE9XTl9HUEFETAkJCT0gMHg1LAorCVZNX1BLVF9EQVRBX0lOQkFORAkJCT0gMHg2LAorCVZNX1BLVF9EQVRBX1VTSU5HX1hGRVJfUEFHRVMJCT0gMHg3LAorCVZNX1BLVF9EQVRBX1VTSU5HX0dQQURMCQkJPSAweDgsCisJVk1fUEtUX0RBVEFfVVNJTkdfR1BBX0RJUkVDVAkJPSAweDksCisJVk1fUEtUX0NBTkNFTF9SRVFVRVNUCQkJPSAweGEsCisJVk1fUEtUX0NPTVAJCQkJPSAweGIsCisJVk1fUEtUX0RBVEFfVVNJTkdfQURESVRJT05BTF9QS1QJPSAweGMsCisJVk1fUEtUX0FERElUSU9OQUxfREFUQQkJCT0gMHhkCit9OworCisjZGVmaW5lIFZNQlVTX0RBVEFfUEFDS0VUX0ZMQUdfQ09NUExFVElPTl9SRVFVRVNURUQJMQorCisKKy8qIFZlcnNpb24gMSBtZXNzYWdlcyAqLworZW51bSB2bWJ1c19jaGFubmVsX21lc3NhZ2VfdHlwZSB7CisJQ0hBTk5FTE1TR19JTlZBTElECQkJPSAgMCwKKwlDSEFOTkVMTVNHX09GRkVSQ0hBTk5FTAkJPSAgMSwKKwlDSEFOTkVMTVNHX1JFU0NJTkRfQ0hBTk5FTE9GRkVSCT0gIDIsCisJQ0hBTk5FTE1TR19SRVFVRVNUT0ZGRVJTCQk9ICAzLAorCUNIQU5ORUxNU0dfQUxMT0ZGRVJTX0RFTElWRVJFRAk9ICA0LAorCUNIQU5ORUxNU0dfT1BFTkNIQU5ORUwJCT0gIDUsCisJQ0hBTk5FTE1TR19PUEVOQ0hBTk5FTF9SRVNVTFQJCT0gIDYsCisJQ0hBTk5FTE1TR19DTE9TRUNIQU5ORUwJCT0gIDcsCisJQ0hBTk5FTE1TR19HUEFETF9IRUFERVIJCT0gIDgsCisJQ0hBTk5FTE1TR19HUEFETF9CT0RZCQkJPSAgOSwKKwlDSEFOTkVMTVNHX0dQQURMX0NSRUFURUQJCT0gMTAsCisJQ0hBTk5FTE1TR19HUEFETF9URUFSRE9XTgkJPSAxMSwKKwlDSEFOTkVMTVNHX0dQQURMX1RPUk5ET1dOCQk9IDEyLAorCUNIQU5ORUxNU0dfUkVMSURfUkVMRUFTRUQJCT0gMTMsCisJQ0hBTk5FTE1TR19JTklUSUFURV9DT05UQUNUCQk9IDE0LAorCUNIQU5ORUxNU0dfVkVSU0lPTl9SRVNQT05TRQkJPSAxNSwKKwlDSEFOTkVMTVNHX1VOTE9BRAkJCT0gMTYsCisjaWZkZWYgVk1CVVNfRkVBVFVSRV9QQVJFTlRfT1JfUEVFUl9NRU1PUllfTUFQUEVEX0lOVE9fQV9DSElMRAorCUNIQU5ORUxNU0dfVklFV1JBTkdFX0FERAkJPSAxNywKKwlDSEFOTkVMTVNHX1ZJRVdSQU5HRV9SRU1PVkUJCT0gMTgsCisjZW5kaWYKKwlDSEFOTkVMTVNHX0NPVU5UCit9OworCitzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9tZXNzYWdlX2hlYWRlciB7CisJZW51bSB2bWJ1c19jaGFubmVsX21lc3NhZ2VfdHlwZSBtc2d0eXBlOworCXUzMiBwYWRkaW5nOworfSBfX3BhY2tlZDsKKworLyogUXVlcnkgVk1CdXMgVmVyc2lvbiBwYXJhbWV0ZXJzICovCitzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9xdWVyeV92bWJ1c192ZXJzaW9uIHsKKwlzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9tZXNzYWdlX2hlYWRlciBoZWFkZXI7CisJdTMyIHZlcnNpb247Cit9IF9fcGFja2VkOworCisvKiBWTUJ1cyBWZXJzaW9uIFN1cHBvcnRlZCBwYXJhbWV0ZXJzICovCitzdHJ1Y3Qgdm1idXNfY2hhbm5lbF92ZXJzaW9uX3N1cHBvcnRlZCB7CisJc3RydWN0IHZtYnVzX2NoYW5uZWxfbWVzc2FnZV9oZWFkZXIgaGVhZGVyOworCWJvb2wgdmVyc2lvbl9zdXBwb3J0ZWQ7Cit9IF9fcGFja2VkOworCisvKiBPZmZlciBDaGFubmVsIHBhcmFtZXRlcnMgKi8KK3N0cnVjdCB2bWJ1c19jaGFubmVsX29mZmVyX2NoYW5uZWwgeworCXN0cnVjdCB2bWJ1c19jaGFubmVsX21lc3NhZ2VfaGVhZGVyIGhlYWRlcjsKKwlzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9vZmZlciBvZmZlcjsKKwl1MzIgY2hpbGRfcmVsaWQ7CisJdTggbW9uaXRvcmlkOworCWJvb2wgbW9uaXRvcl9hbGxvY2F0ZWQ7Cit9IF9fcGFja2VkOworCisvKiBSZXNjaW5kIE9mZmVyIHBhcmFtZXRlcnMgKi8KK3N0cnVjdCB2bWJ1c19jaGFubmVsX3Jlc2NpbmRfb2ZmZXIgeworCXN0cnVjdCB2bWJ1c19jaGFubmVsX21lc3NhZ2VfaGVhZGVyIGhlYWRlcjsKKwl1MzIgY2hpbGRfcmVsaWQ7Cit9IF9fcGFja2VkOworCisvKgorICogUmVxdWVzdCBPZmZlciAtLSBubyBwYXJhbWV0ZXJzLCBTeW5JQyBtZXNzYWdlIGNvbnRhaW5zIHRoZSBwYXJ0aXRpb24gSUQKKyAqIFNldCBTbm9vcCAtLSBubyBwYXJhbWV0ZXJzLCBTeW5JQyBtZXNzYWdlIGNvbnRhaW5zIHRoZSBwYXJ0aXRpb24gSUQKKyAqIENsZWFyIFNub29wIC0tIG5vIHBhcmFtZXRlcnMsIFN5bklDIG1lc3NhZ2UgY29udGFpbnMgdGhlIHBhcnRpdGlvbiBJRAorICogQWxsIE9mZmVycyBEZWxpdmVyZWQgLS0gbm8gcGFyYW1ldGVycywgU3luSUMgbWVzc2FnZSBjb250YWlucyB0aGUgcGFydGl0aW9uCisgKgkJICAgICAgICAgICBJRAorICogRmx1c2ggQ2xpZW50IC0tIG5vIHBhcmFtZXRlcnMsIFN5bklDIG1lc3NhZ2UgY29udGFpbnMgdGhlIHBhcnRpdGlvbiBJRAorICovCisKKy8qIE9wZW4gQ2hhbm5lbCBwYXJhbWV0ZXJzICovCitzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9vcGVuX2NoYW5uZWwgeworCXN0cnVjdCB2bWJ1c19jaGFubmVsX21lc3NhZ2VfaGVhZGVyIGhlYWRlcjsKKworCS8qIElkZW50aWZpZXMgdGhlIHNwZWNpZmljIFZNQnVzIGNoYW5uZWwgdGhhdCBpcyBiZWluZyBvcGVuZWQuICovCisJdTMyIGNoaWxkX3JlbGlkOworCisJLyogSUQgbWFraW5nIGEgcGFydGljdWxhciBvcGVuIHJlcXVlc3QgYXQgYSBjaGFubmVsIG9mZmVyIHVuaXF1ZS4gKi8KKwl1MzIgb3BlbmlkOworCisJLyogR1BBREwgZm9yIHRoZSBjaGFubmVsJ3MgcmluZyBidWZmZXIuICovCisJdTMyIHJpbmdidWZmZXJfZ3BhZGxoYW5kbGU7CisKKwkvKiBHUEFETCBmb3IgdGhlIGNoYW5uZWwncyBzZXJ2ZXIgY29udGV4dCBzYXZlIGFyZWEuICovCisJdTMyIHNlcnZlcl9jb250ZXh0YXJlYV9ncGFkbGhhbmRsZTsKKworCS8qCisJKiBUaGUgdXBzdHJlYW0gcmluZyBidWZmZXIgYmVnaW5zIGF0IG9mZnNldCB6ZXJvIGluIHRoZSBtZW1vcnkKKwkqIGRlc2NyaWJlZCBieSBSaW5nQnVmZmVyR3BhZGxIYW5kbGUuIFRoZSBkb3duc3RyZWFtIHJpbmcgYnVmZmVyCisJKiBmb2xsb3dzIGl0IGF0IHRoaXMgb2Zmc2V0IChpbiBwYWdlcykuCisJKi8KKwl1MzIgZG93bnN0cmVhbV9yaW5nYnVmZmVyX3BhZ2VvZmZzZXQ7CisKKwkvKiBVc2VyLXNwZWNpZmljIGRhdGEgdG8gYmUgcGFzc2VkIGFsb25nIHRvIHRoZSBzZXJ2ZXIgZW5kcG9pbnQuICovCisJdW5zaWduZWQgY2hhciB1c2VyZGF0YVtNQVhfVVNFUl9ERUZJTkVEX0JZVEVTXTsKK30gX19wYWNrZWQ7CisKKy8qIE9wZW4gQ2hhbm5lbCBSZXN1bHQgcGFyYW1ldGVycyAqLworc3RydWN0IHZtYnVzX2NoYW5uZWxfb3Blbl9yZXN1bHQgeworCXN0cnVjdCB2bWJ1c19jaGFubmVsX21lc3NhZ2VfaGVhZGVyIGhlYWRlcjsKKwl1MzIgY2hpbGRfcmVsaWQ7CisJdTMyIG9wZW5pZDsKKwl1MzIgc3RhdHVzOworfSBfX3BhY2tlZDsKKworLyogQ2xvc2UgY2hhbm5lbCBwYXJhbWV0ZXJzOyAqLworc3RydWN0IHZtYnVzX2NoYW5uZWxfY2xvc2VfY2hhbm5lbCB7CisJc3RydWN0IHZtYnVzX2NoYW5uZWxfbWVzc2FnZV9oZWFkZXIgaGVhZGVyOworCXUzMiBjaGlsZF9yZWxpZDsKK30gX19wYWNrZWQ7CisKKy8qIENoYW5uZWwgTWVzc2FnZSBHUEFETCAqLworI2RlZmluZSBHUEFETF9UWVBFX1JJTkdfQlVGRkVSCQkxCisjZGVmaW5lIEdQQURMX1RZUEVfU0VSVkVSX1NBVkVfQVJFQQkyCisjZGVmaW5lIEdQQURMX1RZUEVfVFJBTlNBQ1RJT04JCTgKKworLyoKKyAqIFRoZSBudW1iZXIgb2YgUEZOcyBpbiBhIEdQQURMIG1lc3NhZ2UgaXMgZGVmaW5lZCBieSB0aGUgbnVtYmVyIG9mCisgKiBwYWdlcyB0aGF0IHdvdWxkIGJlIHNwYW5uZWQgYnkgQnl0ZUNvdW50IGFuZCBCeXRlT2Zmc2V0LiAgSWYgdGhlCisgKiBpbXBsaWVkIG51bWJlciBvZiBQRk5zIHdvbid0IGZpdCBpbiB0aGlzIHBhY2tldCwgdGhlcmUgd2lsbCBiZSBhCisgKiBmb2xsb3ctdXAgcGFja2V0IHRoYXQgY29udGFpbnMgbW9yZS4KKyAqLworc3RydWN0IHZtYnVzX2NoYW5uZWxfZ3BhZGxfaGVhZGVyIHsKKwlzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9tZXNzYWdlX2hlYWRlciBoZWFkZXI7CisJdTMyIGNoaWxkX3JlbGlkOworCXUzMiBncGFkbDsKKwl1MTYgcmFuZ2VfYnVmbGVuOworCXUxNiByYW5nZWNvdW50OworCXN0cnVjdCBncGFfcmFuZ2UgcmFuZ2VbMF07Cit9IF9fcGFja2VkOworCisvKiBUaGlzIGlzIHRoZSBmb2xsb3d1cCBwYWNrZXQgdGhhdCBjb250YWlucyBtb3JlIFBGTnMuICovCitzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9ncGFkbF9ib2R5IHsKKwlzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9tZXNzYWdlX2hlYWRlciBoZWFkZXI7CisJdTMyIG1zZ251bWJlcjsKKwl1MzIgZ3BhZGw7CisJdTY0IHBmblswXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB2bWJ1c19jaGFubmVsX2dwYWRsX2NyZWF0ZWQgeworCXN0cnVjdCB2bWJ1c19jaGFubmVsX21lc3NhZ2VfaGVhZGVyIGhlYWRlcjsKKwl1MzIgY2hpbGRfcmVsaWQ7CisJdTMyIGdwYWRsOworCXUzMiBjcmVhdGlvbl9zdGF0dXM7Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9ncGFkbF90ZWFyZG93biB7CisJc3RydWN0IHZtYnVzX2NoYW5uZWxfbWVzc2FnZV9oZWFkZXIgaGVhZGVyOworCXUzMiBjaGlsZF9yZWxpZDsKKwl1MzIgZ3BhZGw7Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9ncGFkbF90b3JuZG93biB7CisJc3RydWN0IHZtYnVzX2NoYW5uZWxfbWVzc2FnZV9oZWFkZXIgaGVhZGVyOworCXUzMiBncGFkbDsKK30gX19wYWNrZWQ7CisKKyNpZmRlZiBWTUJVU19GRUFUVVJFX1BBUkVOVF9PUl9QRUVSX01FTU9SWV9NQVBQRURfSU5UT19BX0NISUxECitzdHJ1Y3Qgdm1idXNfY2hhbm5lbF92aWV3X3JhbmdlX2FkZCB7CisJc3RydWN0IHZtYnVzX2NoYW5uZWxfbWVzc2FnZV9oZWFkZXIgaGVhZGVyOworCVBIWVNJQ0FMX0FERFJFU1Mgdmlld3JhbmdlX2Jhc2U7CisJdTY0IHZpZXdyYW5nZV9sZW5ndGg7CisJdTMyIGNoaWxkX3JlbGlkOworfSBfX3BhY2tlZDsKKworc3RydWN0IHZtYnVzX2NoYW5uZWxfdmlld19yYW5nZV9yZW1vdmUgeworCXN0cnVjdCB2bWJ1c19jaGFubmVsX21lc3NhZ2VfaGVhZGVyIGhlYWRlcjsKKwlQSFlTSUNBTF9BRERSRVNTIHZpZXdyYW5nZV9iYXNlOworCXUzMiBjaGlsZF9yZWxpZDsKK30gX19wYWNrZWQ7CisjZW5kaWYKKworc3RydWN0IHZtYnVzX2NoYW5uZWxfcmVsaWRfcmVsZWFzZWQgeworCXN0cnVjdCB2bWJ1c19jaGFubmVsX21lc3NhZ2VfaGVhZGVyIGhlYWRlcjsKKwl1MzIgY2hpbGRfcmVsaWQ7Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9pbml0aWF0ZV9jb250YWN0IHsKKwlzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9tZXNzYWdlX2hlYWRlciBoZWFkZXI7CisJdTMyIHZtYnVzX3ZlcnNpb25fcmVxdWVzdGVkOworCXUzMiBwYWRkaW5nMjsKKwl1NjQgaW50ZXJydXB0X3BhZ2U7CisJdTY0IG1vbml0b3JfcGFnZTE7CisJdTY0IG1vbml0b3JfcGFnZTI7Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qgdm1idXNfY2hhbm5lbF92ZXJzaW9uX3Jlc3BvbnNlIHsKKwlzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9tZXNzYWdlX2hlYWRlciBoZWFkZXI7CisJYm9vbCB2ZXJzaW9uX3N1cHBvcnRlZDsKK30gX19wYWNrZWQ7CisKK2VudW0gdm1idXNfY2hhbm5lbF9zdGF0ZSB7CisJQ0hBTk5FTF9PRkZFUl9TVEFURSwKKwlDSEFOTkVMX09QRU5JTkdfU1RBVEUsCisJQ0hBTk5FTF9PUEVOX1NUQVRFLAorfTsKKworc3RydWN0IHZtYnVzX2NoYW5uZWwgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdGVudHJ5OworCisJc3RydWN0IGh2X2RldmljZSAqZGV2aWNlX29iajsKKworCXN0cnVjdCB0aW1lcl9saXN0IHBvbGxfdGltZXI7IC8qIFNBLTExMSB3b3JrYXJvdW5kICovCisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisKKwllbnVtIHZtYnVzX2NoYW5uZWxfc3RhdGUgc3RhdGU7CisJLyoKKwkgKiBGb3IgdXRpbCBjaGFubmVscywgc3Rhc2ggdGhlCisJICogdGhlIHNlcnZpY2UgaW5kZXggZm9yIGVhc3kgYWNjZXNzLgorCSAqLworCXM4IHV0aWxfaW5kZXg7CisKKwlzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9vZmZlcl9jaGFubmVsIG9mZmVybXNnOworCS8qCisJICogVGhlc2UgYXJlIGJhc2VkIG9uIHRoZSBPZmZlck1zZy5Nb25pdG9ySWQuCisJICogU2F2ZSBpdCBoZXJlIGZvciBlYXN5IGFjY2Vzcy4KKwkgKi8KKwl1OCBtb25pdG9yX2dycDsKKwl1OCBtb25pdG9yX2JpdDsKKworCXUzMiByaW5nYnVmZmVyX2dwYWRsaGFuZGxlOworCisJLyogQWxsb2NhdGVkIG1lbW9yeSBmb3IgcmluZyBidWZmZXIgKi8KKwl2b2lkICpyaW5nYnVmZmVyX3BhZ2VzOworCXUzMiByaW5nYnVmZmVyX3BhZ2Vjb3VudDsKKwlzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyBvdXRib3VuZDsJLyogc2VuZCB0byBwYXJlbnQgKi8KKwlzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyBpbmJvdW5kOwkvKiByZWNlaXZlIGZyb20gcGFyZW50ICovCisJc3BpbmxvY2tfdCBpbmJvdW5kX2xvY2s7CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmNvbnRyb2x3cTsKKworCS8qIENoYW5uZWwgY2FsbGJhY2sgYXJlIGludm9rZWQgaW4gdGhpcyB3b3JrcXVldWUgY29udGV4dCAqLworCS8qIEhBTkRMRSBkYXRhV29ya1F1ZXVlOyAqLworCisJdm9pZCAoKm9uY2hhbm5lbF9jYWxsYmFjaykodm9pZCAqY29udGV4dCk7CisJdm9pZCAqY2hhbm5lbF9jYWxsYmFja19jb250ZXh0OworfTsKKworc3RydWN0IHZtYnVzX2NoYW5uZWxfZGVidWdfaW5mbyB7CisJdTMyIHJlbGlkOworCWVudW0gdm1idXNfY2hhbm5lbF9zdGF0ZSBzdGF0ZTsKKwlzdHJ1Y3QgaHZfZ3VpZCBpbnRlcmZhY2V0eXBlOworCXN0cnVjdCBodl9ndWlkIGludGVyZmFjZV9pbnN0YW5jZTsKKwl1MzIgbW9uaXRvcmlkOworCXUzMiBzZXJ2ZXJtb25pdG9yX3BlbmRpbmc7CisJdTMyIHNlcnZlcm1vbml0b3JfbGF0ZW5jeTsKKwl1MzIgc2VydmVybW9uaXRvcl9jb25uZWN0aW9uaWQ7CisJdTMyIGNsaWVudG1vbml0b3JfcGVuZGluZzsKKwl1MzIgY2xpZW50bW9uaXRvcl9sYXRlbmN5OworCXUzMiBjbGllbnRtb25pdG9yX2Nvbm5lY3Rpb25pZDsKKworCXN0cnVjdCBodl9yaW5nX2J1ZmZlcl9kZWJ1Z19pbmZvIGluYm91bmQ7CisJc3RydWN0IGh2X3JpbmdfYnVmZmVyX2RlYnVnX2luZm8gb3V0Ym91bmQ7Cit9OworCisvKgorICogUmVwcmVzZW50cyBlYWNoIGNoYW5uZWwgbXNnIG9uIHRoZSB2bWJ1cyBjb25uZWN0aW9uIFRoaXMgaXMgYQorICogdmFyaWFibGUtc2l6ZSBkYXRhIHN0cnVjdHVyZSBkZXBlbmRpbmcgb24gdGhlIG1zZyB0eXBlIGl0c2VsZgorICovCitzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9tc2dpbmZvIHsKKwkvKiBCb29ra2VlcGluZyBzdHVmZiAqLworCXN0cnVjdCBsaXN0X2hlYWQgbXNnbGlzdGVudHJ5OworCisJLyogU28gZmFyLCB0aGlzIGlzIG9ubHkgdXNlZCB0byBoYW5kbGUgZ3BhZGwgYm9keSBtZXNzYWdlICovCisJc3RydWN0IGxpc3RfaGVhZCBzdWJtc2dsaXN0OworCisJLyogU3luY2hyb25pemUgdGhlIHJlcXVlc3QvcmVzcG9uc2UgaWYgbmVlZGVkICovCisJc3RydWN0IGNvbXBsZXRpb24gIHdhaXRldmVudDsKKwl1bmlvbiB7CisJCXN0cnVjdCB2bWJ1c19jaGFubmVsX3ZlcnNpb25fc3VwcG9ydGVkIHZlcnNpb25fc3VwcG9ydGVkOworCQlzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9vcGVuX3Jlc3VsdCBvcGVuX3Jlc3VsdDsKKwkJc3RydWN0IHZtYnVzX2NoYW5uZWxfZ3BhZGxfdG9ybmRvd24gZ3BhZGxfdG9ybmRvd247CisJCXN0cnVjdCB2bWJ1c19jaGFubmVsX2dwYWRsX2NyZWF0ZWQgZ3BhZGxfY3JlYXRlZDsKKwkJc3RydWN0IHZtYnVzX2NoYW5uZWxfdmVyc2lvbl9yZXNwb25zZSB2ZXJzaW9uX3Jlc3BvbnNlOworCX0gcmVzcG9uc2U7CisKKwl1MzIgbXNnc2l6ZTsKKwkvKgorCSAqIFRoZSBjaGFubmVsIG1lc3NhZ2UgdGhhdCBnb2VzIG91dCBvbiB0aGUgIndpcmUiLgorCSAqIEl0IHdpbGwgY29udGFpbiBhdCBtaW5pbXVtIHRoZSBWTUJVU19DSEFOTkVMX01FU1NBR0VfSEVBREVSIGhlYWRlcgorCSAqLworCXVuc2lnbmVkIGNoYXIgbXNnWzBdOworfTsKKworCit2b2lkIGZyZWVfY2hhbm5lbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCk7CisKK3ZvaWQgdm1idXNfb25tZXNzYWdlKHZvaWQgKmNvbnRleHQpOworCitpbnQgdm1idXNfcmVxdWVzdF9vZmZlcnModm9pZCk7CisKKy8qIFRoZSBmb3JtYXQgbXVzdCBiZSB0aGUgc2FtZSBhcyBzdHJ1Y3Qgdm1kYXRhX2dwYV9kaXJlY3QgKi8KK3N0cnVjdCB2bWJ1c19jaGFubmVsX3BhY2tldF9wYWdlX2J1ZmZlciB7CisJdTE2IHR5cGU7CisJdTE2IGRhdGFvZmZzZXQ4OworCXUxNiBsZW5ndGg4OworCXUxNiBmbGFnczsKKwl1NjQgdHJhbnNhY3Rpb25pZDsKKwl1MzIgcmVzZXJ2ZWQ7CisJdTMyIHJhbmdlY291bnQ7CisJc3RydWN0IGh2X3BhZ2VfYnVmZmVyIHJhbmdlW01BWF9QQUdFX0JVRkZFUl9DT1VOVF07Cit9IF9fcGFja2VkOworCisvKiBUaGUgZm9ybWF0IG11c3QgYmUgdGhlIHNhbWUgYXMgc3RydWN0IHZtZGF0YV9ncGFfZGlyZWN0ICovCitzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9wYWNrZXRfbXVsdGlwYWdlX2J1ZmZlciB7CisJdTE2IHR5cGU7CisJdTE2IGRhdGFvZmZzZXQ4OworCXUxNiBsZW5ndGg4OworCXUxNiBmbGFnczsKKwl1NjQgdHJhbnNhY3Rpb25pZDsKKwl1MzIgcmVzZXJ2ZWQ7CisJdTMyIHJhbmdlY291bnQ7CQkvKiBBbHdheXMgMSBpbiB0aGlzIGNhc2UgKi8KKwlzdHJ1Y3QgaHZfbXVsdGlwYWdlX2J1ZmZlciByYW5nZTsKK30gX19wYWNrZWQ7CisKKworZXh0ZXJuIGludCB2bWJ1c19vcGVuKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLAorCQkJICAgIHUzMiBzZW5kX3JpbmdidWZmZXJzaXplLAorCQkJICAgIHUzMiByZWN2X3JpbmdidWZmZXJzaXplLAorCQkJICAgIHZvaWQgKnVzZXJkYXRhLAorCQkJICAgIHUzMiB1c2VyZGF0YWxlbiwKKwkJCSAgICB2b2lkKCpvbmNoYW5uZWxfY2FsbGJhY2spKHZvaWQgKmNvbnRleHQpLAorCQkJICAgIHZvaWQgKmNvbnRleHQpOworCitleHRlcm4gdm9pZCB2bWJ1c19jbG9zZShzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCk7CisKK2V4dGVybiBpbnQgdm1idXNfc2VuZHBhY2tldChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCwKKwkJCQkgIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKwkJCQkgIHUzMiBidWZmZXJMZW4sCisJCQkJICB1NjQgcmVxdWVzdGlkLAorCQkJCSAgZW51bSB2bWJ1c19wYWNrZXRfdHlwZSB0eXBlLAorCQkJCSAgdTMyIGZsYWdzKTsKKworZXh0ZXJuIGludCB2bWJ1c19zZW5kcGFja2V0X3BhZ2VidWZmZXIoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsCisJCQkJCSAgICBzdHJ1Y3QgaHZfcGFnZV9idWZmZXIgcGFnZWJ1ZmZlcnNbXSwKKwkJCQkJICAgIHUzMiBwYWdlY291bnQsCisJCQkJCSAgICB2b2lkICpidWZmZXIsCisJCQkJCSAgICB1MzIgYnVmZmVybGVuLAorCQkJCQkgICAgdTY0IHJlcXVlc3RpZCk7CisKK2V4dGVybiBpbnQgdm1idXNfc2VuZHBhY2tldF9tdWx0aXBhZ2VidWZmZXIoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsCisJCQkJCXN0cnVjdCBodl9tdWx0aXBhZ2VfYnVmZmVyICptcGIsCisJCQkJCXZvaWQgKmJ1ZmZlciwKKwkJCQkJdTMyIGJ1ZmZlcmxlbiwKKwkJCQkJdTY0IHJlcXVlc3RpZCk7CisKK2V4dGVybiBpbnQgdm1idXNfZXN0YWJsaXNoX2dwYWRsKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLAorCQkJCSAgICAgIHZvaWQgKmtidWZmZXIsCisJCQkJICAgICAgdTMyIHNpemUsCisJCQkJICAgICAgdTMyICpncGFkbF9oYW5kbGUpOworCitleHRlcm4gaW50IHZtYnVzX3RlYXJkb3duX2dwYWRsKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLAorCQkJCSAgICAgdTMyIGdwYWRsX2hhbmRsZSk7CisKK2V4dGVybiBpbnQgdm1idXNfcmVjdnBhY2tldChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCwKKwkJCQkgIHZvaWQgKmJ1ZmZlciwKKwkJCQkgIHUzMiBidWZmZXJsZW4sCisJCQkJICB1MzIgKmJ1ZmZlcl9hY3R1YWxfbGVuLAorCQkJCSAgdTY0ICpyZXF1ZXN0aWQpOworCitleHRlcm4gaW50IHZtYnVzX3JlY3ZwYWNrZXRfcmF3KHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLAorCQkJCSAgICAgdm9pZCAqYnVmZmVyLAorCQkJCSAgICAgdTMyIGJ1ZmZlcmxlbiwKKwkJCQkgICAgIHUzMiAqYnVmZmVyX2FjdHVhbF9sZW4sCisJCQkJICAgICB1NjQgKnJlcXVlc3RpZCk7CisKK2V4dGVybiB2b2lkIHZtYnVzX29uY2hhbm5lbF9ldmVudChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCk7CisKK2V4dGVybiB2b2lkIHZtYnVzX2dldF9kZWJ1Z19pbmZvKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLAorCQkJCSAgICAgc3RydWN0IHZtYnVzX2NoYW5uZWxfZGVidWdfaW5mbyAqZGVidWcpOworCitleHRlcm4gdm9pZCB2bWJ1c19vbnRpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSk7CisKKworI2RlZmluZSBMT1dPUkQoZHcpICgodW5zaWduZWQgc2hvcnQpKGR3KSkKKyNkZWZpbmUgSElXT1JEKGR3KSAoKHVuc2lnbmVkIHNob3J0KSgoKHVuc2lnbmVkIGludCkgKGR3KSA+PiAxNikgJiAweEZGRkYpKQorCisKKyNkZWZpbmUgVk1CVVMJCQkJMHgwMDAxCisjZGVmaW5lIFNUT1JWU0MJCQkJMHgwMDAyCisjZGVmaW5lIE5FVFZTQwkJCQkweDAwMDQKKyNkZWZpbmUgSU5QVVRWU0MJCQkweDAwMDgKKyNkZWZpbmUgQkxLVlNDCQkJCTB4MDAxMAorI2RlZmluZSBWTUJVU19EUlYJCQkweDAxMDAKKyNkZWZpbmUgU1RPUlZTQ19EUlYJCQkweDAyMDAKKyNkZWZpbmUgTkVUVlNDX0RSVgkJCTB4MDQwMAorI2RlZmluZSBJTlBVVFZTQ19EUlYJCTB4MDgwMAorI2RlZmluZSBCTEtWU0NfRFJWCQkJMHgxMDAwCisKKyNkZWZpbmUgQUxMX01PRFVMRVMJCQkoVk1CVVMJCXxcCisJCQkJCQkJU1RPUlZTQwkJfFwKKwkJCQkJCQlORVRWU0MJCXxcCisJCQkJCQkJSU5QVVRWU0MJfFwKKwkJCQkJCQlCTEtWU0MJCXxcCisJCQkJCQkJVk1CVVNfRFJWCXxcCisJCQkJCQkJU1RPUlZTQ19EUlYJfFwKKwkJCQkJCQlORVRWU0NfRFJWCXxcCisJCQkJCQkJSU5QVVRWU0NfRFJWfFwKKwkJCQkJCQlCTEtWU0NfRFJWKQorCisvKiBMb2dnaW5nIExldmVsICovCisjZGVmaW5lIEVSUk9SX0xWTAkJCQkzCisjZGVmaW5lIFdBUk5JTkdfTFZMCQkJCTQKKyNkZWZpbmUgSU5GT19MVkwJCQkJNgorI2RlZmluZSBERUJVR19MVkwJCQkJNworI2RlZmluZSBERUJVR19MVkxfRU5URVJFWElUCQkJOAorI2RlZmluZSBERUJVR19SSU5HX0xWTAkJCQk5CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgdm1idXNfbG9nbGV2ZWw7CisKKyNkZWZpbmUgRFBSSU5UKG1vZCwgbHZsLCBmbXQsIGFyZ3MuLi4pIGRvIHtcCisJaWYgKChtb2QgJiAoSElXT1JEKHZtYnVzX2xvZ2xldmVsKSkpICYmCVwKKwkgICAgKGx2bCA8PSBMT1dPUkQodm1idXNfbG9nbGV2ZWwpKSkJXAorCQlwcmludGsoS0VSTl9ERUJVRyAjbW9kIjogJXMoKSAiIGZtdCAiXG4iLCBfX2Z1bmNfXywgIyMgYXJncyk7XAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgRFBSSU5UX0RCRyhtb2QsIGZtdCwgYXJncy4uLikgZG8ge1wKKwlpZiAoKG1vZCAmIChISVdPUkQodm1idXNfbG9nbGV2ZWwpKSkgJiYJCVwKKwkgICAgKERFQlVHX0xWTCA8PSBMT1dPUkQodm1idXNfbG9nbGV2ZWwpKSkJXAorCQlwcmludGsoS0VSTl9ERUJVRyAjbW9kIjogJXMoKSAiIGZtdCAiXG4iLCBfX2Z1bmNfXywgIyMgYXJncyk7XAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgRFBSSU5UX0lORk8obW9kLCBmbXQsIGFyZ3MuLi4pIGRvIHtcCisJaWYgKChtb2QgJiAoSElXT1JEKHZtYnVzX2xvZ2xldmVsKSkpICYmCQlcCisJICAgIChJTkZPX0xWTCA8PSBMT1dPUkQodm1idXNfbG9nbGV2ZWwpKSkJXAorCQlwcmludGsoS0VSTl9JTkZPICNtb2QiOiAiIGZtdCAiXG4iLCAjIyBhcmdzKTtcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBEUFJJTlRfV0FSTihtb2QsIGZtdCwgYXJncy4uLikgZG8ge1wKKwlpZiAoKG1vZCAmIChISVdPUkQodm1idXNfbG9nbGV2ZWwpKSkgJiYJCVwKKwkgICAgKFdBUk5JTkdfTFZMIDw9IExPV09SRCh2bWJ1c19sb2dsZXZlbCkpKQlcCisJCXByaW50ayhLRVJOX1dBUk5JTkcgI21vZCI6IFdBUk5JTkchICIgZm10ICJcbiIsICMjIGFyZ3MpO1wKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIERQUklOVF9FUlIobW9kLCBmbXQsIGFyZ3MuLi4pIGRvIHtcCisJaWYgKChtb2QgJiAoSElXT1JEKHZtYnVzX2xvZ2xldmVsKSkpICYmCQlcCisJICAgIChFUlJPUl9MVkwgPD0gTE9XT1JEKHZtYnVzX2xvZ2xldmVsKSkpCVwKKwkJcHJpbnRrKEtFUk5fRVJSICNtb2QiOiAlcygpIEVSUk9SISEgIiBmbXQgIlxuIiwJXAorCQkgICAgICAgX19mdW5jX18sICMjIGFyZ3MpO1wKKwl9IHdoaWxlICgwKQorCisKKworc3RydWN0IGh2X2RyaXZlcjsKK3N0cnVjdCBodl9kZXZpY2U7CisKK3N0cnVjdCBodl9kZXZfcG9ydF9pbmZvIHsKKwl1MzIgaW50X21hc2s7CisJdTMyIHJlYWRfaWR4OworCXUzMiB3cml0ZV9pZHg7CisJdTMyIGJ5dGVzX2F2YWlsX3RvcmVhZDsKKwl1MzIgYnl0ZXNfYXZhaWxfdG93cml0ZTsKK307CisKK3N0cnVjdCBodl9kZXZpY2VfaW5mbyB7CisJdTMyIGNobl9pZDsKKwl1MzIgY2huX3N0YXRlOworCXN0cnVjdCBodl9ndWlkIGNobl90eXBlOworCXN0cnVjdCBodl9ndWlkIGNobl9pbnN0YW5jZTsKKworCXUzMiBtb25pdG9yX2lkOworCXUzMiBzZXJ2ZXJfbW9uaXRvcl9wZW5kaW5nOworCXUzMiBzZXJ2ZXJfbW9uaXRvcl9sYXRlbmN5OworCXUzMiBzZXJ2ZXJfbW9uaXRvcl9jb25uX2lkOworCXUzMiBjbGllbnRfbW9uaXRvcl9wZW5kaW5nOworCXUzMiBjbGllbnRfbW9uaXRvcl9sYXRlbmN5OworCXUzMiBjbGllbnRfbW9uaXRvcl9jb25uX2lkOworCisJc3RydWN0IGh2X2Rldl9wb3J0X2luZm8gaW5ib3VuZDsKKwlzdHJ1Y3QgaHZfZGV2X3BvcnRfaW5mbyBvdXRib3VuZDsKK307CisKKy8qIEJhc2UgZHJpdmVyIG9iamVjdCAqLworc3RydWN0IGh2X2RyaXZlciB7CisJY29uc3QgY2hhciAqbmFtZTsKKworCS8qIHRoZSBkZXZpY2UgdHlwZSBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIgKi8KKwlzdHJ1Y3QgaHZfZ3VpZCBkZXZfdHlwZTsKKworCXN0cnVjdCBkZXZpY2VfZHJpdmVyIGRyaXZlcjsKKworCWludCAoKnByb2JlKShzdHJ1Y3QgaHZfZGV2aWNlICopOworCWludCAoKnJlbW92ZSkoc3RydWN0IGh2X2RldmljZSAqKTsKKwl2b2lkICgqc2h1dGRvd24pKHN0cnVjdCBodl9kZXZpY2UgKik7CisKK307CisKKy8qIEJhc2UgZGV2aWNlIG9iamVjdCAqLworc3RydWN0IGh2X2RldmljZSB7CisJLyogdGhlIGRldmljZSB0eXBlIGlkIG9mIHRoaXMgZGV2aWNlICovCisJc3RydWN0IGh2X2d1aWQgZGV2X3R5cGU7CisKKwkvKiB0aGUgZGV2aWNlIGluc3RhbmNlIGlkIG9mIHRoaXMgZGV2aWNlICovCisJc3RydWN0IGh2X2d1aWQgZGV2X2luc3RhbmNlOworCisJc3RydWN0IGRldmljZSBkZXZpY2U7CisKKwlzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbDsKKworCS8qIERldmljZSBleHRlbnNpb247ICovCisJdm9pZCAqZXh0OworfTsKKworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBodl9kZXZpY2UgKmRldmljZV90b19odl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGQsIHN0cnVjdCBodl9kZXZpY2UsIGRldmljZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGh2X2RyaXZlciAqZHJ2X3RvX2h2X2RydihzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGQsIHN0cnVjdCBodl9kcml2ZXIsIGRyaXZlcik7Cit9CisKKworLyogVm1idXMgaW50ZXJmYWNlICovCitpbnQgdm1idXNfY2hpbGRfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpOwordm9pZCB2bWJ1c19jaGlsZF9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KTsKKworLyoKKyAqIENvbW1vbiBoZWFkZXIgZm9yIEh5cGVyLVYgSUNzCisgKi8KKworI2RlZmluZSBJQ01TR1RZUEVfTkVHT1RJQVRFCQkwCisjZGVmaW5lIElDTVNHVFlQRV9IRUFSVEJFQVQJCTEKKyNkZWZpbmUgSUNNU0dUWVBFX0tWUEVYQ0hBTkdFCQkyCisjZGVmaW5lIElDTVNHVFlQRV9TSFVURE9XTgkJMworI2RlZmluZSBJQ01TR1RZUEVfVElNRVNZTkMJCTQKKyNkZWZpbmUgSUNNU0dUWVBFX1ZTUwkJCTUKKworI2RlZmluZSBJQ01TR0hEUkZMQUdfVFJBTlNBQ1RJT04JMQorI2RlZmluZSBJQ01TR0hEUkZMQUdfUkVRVUVTVAkJMgorI2RlZmluZSBJQ01TR0hEUkZMQUdfUkVTUE9OU0UJCTQKKworI2RlZmluZSBIVl9TX09LCQkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgSFZfRV9GQUlMCQkJMHg4MDAwNDAwNQorI2RlZmluZSBIVl9FUlJPUl9OT1RfU1VQUE9SVEVECQkweDgwMDcwMDMyCisjZGVmaW5lIEhWX0VSUk9SX01BQ0hJTkVfTE9DS0VECQkweDgwMDcwNEY3CisKK3N0cnVjdCB2bWJ1c3BpcGVfaGRyIHsKKwl1MzIgZmxhZ3M7CisJdTMyIG1zZ3NpemU7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaWNfdmVyc2lvbiB7CisJdTE2IG1ham9yOworCXUxNiBtaW5vcjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBpY21zZ19oZHIgeworCXN0cnVjdCBpY192ZXJzaW9uIGljdmVyZnJhbWU7CisJdTE2IGljbXNndHlwZTsKKwlzdHJ1Y3QgaWNfdmVyc2lvbiBpY3Zlcm1zZzsKKwl1MTYgaWNtc2dzaXplOworCXUzMiBzdGF0dXM7CisJdTggaWN0cmFuc2FjdGlvbl9pZDsKKwl1OCBpY2ZsYWdzOworCXU4IHJlc2VydmVkWzJdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGljbXNnX25lZ290aWF0ZSB7CisJdTE2IGljZnJhbWVfdmVyY250OworCXUxNiBpY21zZ192ZXJjbnQ7CisJdTMyIHJlc2VydmVkOworCXN0cnVjdCBpY192ZXJzaW9uIGljdmVyc2lvbl9kYXRhWzFdOyAvKiBhbnkgc2l6ZSBhcnJheSAqLworfSBfX3BhY2tlZDsKKworc3RydWN0IHNodXRkb3duX21zZ19kYXRhIHsKKwl1MzIgcmVhc29uX2NvZGU7CisJdTMyIHRpbWVvdXRfc2Vjb25kczsKKwl1MzIgZmxhZ3M7CisJdTggIGRpc3BsYXlfbWVzc2FnZVsyMDQ4XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBoZWFydGJlYXRfbXNnX2RhdGEgeworCXU2NCBzZXFfbnVtOworCXUzMiByZXNlcnZlZFs4XTsKK30gX19wYWNrZWQ7CisKKy8qIFRpbWUgU3luYyBJQyBkZWZzICovCisjZGVmaW5lIElDVElNRVNZTkNGTEFHX1BST0JFCTAKKyNkZWZpbmUgSUNUSU1FU1lOQ0ZMQUdfU1lOQwkxCisjZGVmaW5lIElDVElNRVNZTkNGTEFHX1NBTVBMRQkyCisKKyNpZmRlZiBfX3g4Nl82NF9fCisjZGVmaW5lIFdMVElNRURFTFRBCTExNjQ0NDczNjAwMDAwMDAwMEwJLyogaW4gMTAwbnMgdW5pdCAqLworI2Vsc2UKKyNkZWZpbmUgV0xUSU1FREVMVEEJMTE2NDQ0NzM2MDAwMDAwMDAwTEwKKyNlbmRpZgorCitzdHJ1Y3QgaWN0aW1lc3luY19kYXRhIHsKKwl1NjQgcGFyZW50dGltZTsKKwl1NjQgY2hpbGR0aW1lOworCXU2NCByb3VuZHRyaXB0aW1lOworCXU4IGZsYWdzOworfSBfX3BhY2tlZDsKKworLyogSW5kZXggZm9yIGVhY2ggSUMgc3RydWN0IGluIGFycmF5IGh2X2NiX3V0aWxzW10gKi8KKyNkZWZpbmUgSFZfU0hVVERPV05fTVNHCQkwCisjZGVmaW5lIEhWX1RJTUVTWU5DX01TRwkJMQorI2RlZmluZSBIVl9IRUFSVEJFQVRfTVNHCTIKKyNkZWZpbmUgSFZfS1ZQX01TRwkJMworCitzdHJ1Y3QgaHlwZXJ2X3NlcnZpY2VfY2FsbGJhY2sgeworCXU4IG1zZ190eXBlOworCWNoYXIgKmxvZ19tc2c7CisJdW5zaWduZWQgY2hhciBkYXRhWzE2XTsKKwlzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbDsKKwl2b2lkICgqY2FsbGJhY2spICh2b2lkICpjb250ZXh0KTsKK307CisKK2V4dGVybiB2b2lkIHByZXBfbmVnb3RpYXRlX3Jlc3Aoc3RydWN0IGljbXNnX2hkciAqLAorCQkJCXN0cnVjdCBpY21zZ19uZWdvdGlhdGUgKiwgdTggKik7CitleHRlcm4gdm9pZCBjaG5fY2JfbmVnb3RpYXRlKHZvaWQgKik7CitleHRlcm4gc3RydWN0IGh5cGVydl9zZXJ2aWNlX2NhbGxiYWNrIGh2X2NiX3V0aWxzW107CisKKyNlbmRpZiAvKiBfSFlQRVJWX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9ybmRpcy5oIGIvZHJpdmVycy9zdGFnaW5nL2h2L2h5cGVydl9uZXQuaApzaW1pbGFyaXR5IGluZGV4IDY1JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3N0YWdpbmcvaHYvcm5kaXMuaApyZW5hbWUgdG8gZHJpdmVycy9zdGFnaW5nL2h2L2h5cGVydl9uZXQuaAppbmRleCAwMTRkZTA0Li4zMTUwOTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvcm5kaXMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvaHlwZXJ2X25ldC5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDksIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4KKyAqIENvcHlyaWdodCAoYykgMjAxMSwgTWljcm9zb2Z0IENvcnBvcmF0aW9uLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMTgsMTEgKzE4LDM5NSBAQAogICogQXV0aG9yczoKICAqICAgSGFpeWFuZyBaaGFuZyA8aGFpeWFuZ3pAbWljcm9zb2Z0LmNvbT4KICAqICAgSGFuayBKYW5zc2VuICA8aGphbnNzZW5AbWljcm9zb2Z0LmNvbT4KKyAqICAgSy4gWS4gU3Jpbml2YXNhbiA8a3lzQG1pY3Jvc29mdC5jb20+CiAgKgogICovCiAKLSNpZm5kZWYgX1JORElTX0hfCi0jZGVmaW5lIF9STkRJU19IXworI2lmbmRlZiBfSFlQRVJWX05FVF9ICisjZGVmaW5lIF9IWVBFUlZfTkVUX0gKKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlICJoeXBlcnYuaCIKKworLyogRndkIGRlY2xhcmF0aW9uICovCitzdHJ1Y3QgaHZfbmV0dnNjX3BhY2tldDsKKworLyogUmVwcmVzZW50IHRoZSB4ZmVyIHBhZ2UgcGFja2V0IHdoaWNoIGNvbnRhaW5zIDEgb3IgbW9yZSBuZXR2c2MgcGFja2V0ICovCitzdHJ1Y3QgeGZlcnBhZ2VfcGFja2V0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RfZW50OworCisJLyogIyBvZiBuZXR2c2MgcGFja2V0cyB0aGlzIHhmZXIgcGFja2V0IGNvbnRhaW5zICovCisJdTMyIGNvdW50OworfTsKKworLyogVGhlIG51bWJlciBvZiBwYWdlcyB3aGljaCBhcmUgZW5vdWdoIHRvIGNvdmVyIGp1bWJvIGZyYW1lIGJ1ZmZlci4gKi8KKyNkZWZpbmUgTkVUVlNDX1BBQ0tFVF9NQVhQQUdFCQk0CisKKy8qCisgKiBSZXByZXNlbnQgbmV0dnNjIHBhY2tldCB3aGljaCBjb250YWlucyAxIFJORElTIGFuZCAxIGV0aGVybmV0IGZyYW1lCisgKiB3aXRoaW4gdGhlIFJORElTCisgKi8KK3N0cnVjdCBodl9uZXR2c2NfcGFja2V0IHsKKwkvKiBCb29ra2VlcGluZyBzdHVmZiAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdF9lbnQ7CisKKwlzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2U7CisJYm9vbCBpc19kYXRhX3BrdDsKKworCS8qCisJICogVmFsaWQgb25seSBmb3IgcmVjZWl2ZXMgd2hlbiB3ZSBicmVhayBhIHhmZXIgcGFnZSBwYWNrZXQKKwkgKiBpbnRvIG11bHRpcGxlIG5ldHZzYyBwYWNrZXRzCisJICovCisJc3RydWN0IHhmZXJwYWdlX3BhY2tldCAqeGZlcl9wYWdlX3BrdDsKKworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXU2NCByZWN2X2NvbXBsZXRpb25fdGlkOworCQkJdm9pZCAqcmVjdl9jb21wbGV0aW9uX2N0eDsKKwkJCXZvaWQgKCpyZWN2X2NvbXBsZXRpb24pKHZvaWQgKmNvbnRleHQpOworCQl9IHJlY3Y7CisJCXN0cnVjdCB7CisJCQl1NjQgc2VuZF9jb21wbGV0aW9uX3RpZDsKKwkJCXZvaWQgKnNlbmRfY29tcGxldGlvbl9jdHg7CisJCQl2b2lkICgqc2VuZF9jb21wbGV0aW9uKSh2b2lkICpjb250ZXh0KTsKKwkJfSBzZW5kOworCX0gY29tcGxldGlvbjsKKworCS8qIFRoaXMgcG9pbnRzIHRvIHRoZSBtZW1vcnkgYWZ0ZXIgcGFnZV9idWYgKi8KKwl2b2lkICpleHRlbnNpb247CisKKwl1MzIgdG90YWxfZGF0YV9idWZsZW47CisJLyogUG9pbnRzIHRvIHRoZSBzZW5kL3JlY2VpdmUgYnVmZmVyIHdoZXJlIHRoZSBldGhlcm5ldCBmcmFtZSBpcyAqLworCXUzMiBwYWdlX2J1Zl9jbnQ7CisJc3RydWN0IGh2X3BhZ2VfYnVmZmVyIHBhZ2VfYnVmW05FVFZTQ19QQUNLRVRfTUFYUEFHRV07Cit9OworCitzdHJ1Y3QgbmV0dnNjX2RldmljZV9pbmZvIHsKKwl1bnNpZ25lZCBjaGFyIG1hY19hZHJbNl07CisJYm9vbCBsaW5rX3N0YXRlOwkvKiAwIC0gbGluayB1cCwgMSAtIGxpbmsgZG93biAqLworCWludCAgcmluZ19zaXplOworfTsKKworLyogSW50ZXJmYWNlICovCitpbnQgbmV0dnNjX2RldmljZV9hZGQoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLCB2b2lkICphZGRpdGlvbmFsX2luZm8pOworaW50IG5ldHZzY19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSk7CitpbnQgbmV0dnNjX3NlbmQoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLAorCQlzdHJ1Y3QgaHZfbmV0dnNjX3BhY2tldCAqcGFja2V0KTsKK3ZvaWQgbmV0dnNjX2xpbmtzdGF0dXNfY2FsbGJhY2soc3RydWN0IGh2X2RldmljZSAqZGV2aWNlX29iaiwKKwkJCQl1bnNpZ25lZCBpbnQgc3RhdHVzKTsKK2ludCBuZXR2c2NfcmVjdl9jYWxsYmFjayhzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2Vfb2JqLAorCQkJc3RydWN0IGh2X25ldHZzY19wYWNrZXQgKnBhY2tldCk7CitpbnQgbmV0dnNjX2luaXRpYWxpemUoc3RydWN0IGh2X2RyaXZlciAqZHJ2KTsKK2ludCBybmRpc19maWx0ZXJfb3BlbihzdHJ1Y3QgaHZfZGV2aWNlICpkZXYpOworaW50IHJuZGlzX2ZpbHRlcl9jbG9zZShzdHJ1Y3QgaHZfZGV2aWNlICpkZXYpOworaW50IHJuZGlzX2ZpbHRlX2RldmljZV9hZGQoc3RydWN0IGh2X2RldmljZSAqZGV2LAorCQkJdm9pZCAqYWRkaXRpb25hbF9pbmZvKTsKK2ludCBybmRpc19maWx0ZXJfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgaHZfZGV2aWNlICpkZXYpOworaW50IHJuZGlzX2ZpbHRlcl9yZWNlaXZlKHN0cnVjdCBodl9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBodl9uZXR2c2NfcGFja2V0ICpwa3QpOworCisKKworaW50IHJuZGlzX2ZpbHRlcl9zZW5kKHN0cnVjdCBodl9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBodl9uZXR2c2NfcGFja2V0ICpwa3QpOworCisjZGVmaW5lIE5WU1BfSU5WQUxJRF9QUk9UT0NPTF9WRVJTSU9OCSgodTMyKTB4RkZGRkZGRkYpCisKKyNkZWZpbmUgTlZTUF9QUk9UT0NPTF9WRVJTSU9OXzEJCTIKKyNkZWZpbmUgTlZTUF9NSU5fUFJPVE9DT0xfVkVSU0lPTglOVlNQX1BST1RPQ09MX1ZFUlNJT05fMQorI2RlZmluZSBOVlNQX01BWF9QUk9UT0NPTF9WRVJTSU9OCU5WU1BfUFJPVE9DT0xfVkVSU0lPTl8xCisKK2VudW0geworCU5WU1BfTVNHX1RZUEVfTk9ORSA9IDAsCisKKwkvKiBJbml0IE1lc3NhZ2VzICovCisJTlZTUF9NU0dfVFlQRV9JTklUCQkJPSAxLAorCU5WU1BfTVNHX1RZUEVfSU5JVF9DT01QTEVURQkJPSAyLAorCisJTlZTUF9WRVJTSU9OX01TR19TVEFSVAkJCT0gMTAwLAorCisJLyogVmVyc2lvbiAxIE1lc3NhZ2VzICovCisJTlZTUF9NU0cxX1RZUEVfU0VORF9ORElTX1ZFUgkJPSBOVlNQX1ZFUlNJT05fTVNHX1NUQVJULAorCisJTlZTUF9NU0cxX1RZUEVfU0VORF9SRUNWX0JVRiwKKwlOVlNQX01TRzFfVFlQRV9TRU5EX1JFQ1ZfQlVGX0NPTVBMRVRFLAorCU5WU1BfTVNHMV9UWVBFX1JFVk9LRV9SRUNWX0JVRiwKKworCU5WU1BfTVNHMV9UWVBFX1NFTkRfU0VORF9CVUYsCisJTlZTUF9NU0cxX1RZUEVfU0VORF9TRU5EX0JVRl9DT01QTEVURSwKKwlOVlNQX01TRzFfVFlQRV9SRVZPS0VfU0VORF9CVUYsCisKKwlOVlNQX01TRzFfVFlQRV9TRU5EX1JORElTX1BLVCwKKwlOVlNQX01TRzFfVFlQRV9TRU5EX1JORElTX1BLVF9DT01QTEVURSwKKworCS8qCisJICogVGhpcyBzaG91bGQgYmUgc2V0IHRvIHRoZSBudW1iZXIgb2YgbWVzc2FnZXMgZm9yIHRoZSB2ZXJzaW9uIHdpdGgKKwkgKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgbWVzc2FnZXMuCisJICovCisJTlZTUF9OVU1fTVNHX1BFUl9WRVJTSU9OCQk9IDksCit9OworCitlbnVtIHsKKwlOVlNQX1NUQVRfTk9ORSA9IDAsCisJTlZTUF9TVEFUX1NVQ0NFU1MsCisJTlZTUF9TVEFUX0ZBSUwsCisJTlZTUF9TVEFUX1BST1RPQ09MX1RPT19ORVcsCisJTlZTUF9TVEFUX1BST1RPQ09MX1RPT19PTEQsCisJTlZTUF9TVEFUX0lOVkFMSURfUk5ESVNfUEtULAorCU5WU1BfU1RBVF9CVVNZLAorCU5WU1BfU1RBVF9NQVgsCit9OworCitzdHJ1Y3QgbnZzcF9tZXNzYWdlX2hlYWRlciB7CisJdTMyIG1zZ190eXBlOworfTsKKworLyogSW5pdCBNZXNzYWdlcyAqLworCisvKgorICogVGhpcyBtZXNzYWdlIGlzIHVzZWQgYnkgdGhlIFZTQyB0byBpbml0aWFsaXplIHRoZSBjaGFubmVsIGFmdGVyIHRoZSBjaGFubmVscworICogaGFzIGJlZW4gb3BlbmVkLiBUaGlzIG1lc3NhZ2Ugc2hvdWxkIG5ldmVyIGluY2x1ZGUgYW55dGhpbmcgb3RoZXIgdGhlbgorICogdmVyc2lvbmluZyAoaS5lLiB0aGlzIG1lc3NhZ2Ugd2lsbCBiZSB0aGUgc2FtZSBmb3IgZXZlcikuCisgKi8KK3N0cnVjdCBudnNwX21lc3NhZ2VfaW5pdCB7CisJdTMyIG1pbl9wcm90b2NvbF92ZXI7CisJdTMyIG1heF9wcm90b2NvbF92ZXI7Cit9IF9fcGFja2VkOworCisvKgorICogVGhpcyBtZXNzYWdlIGlzIHVzZWQgYnkgdGhlIFZTUCB0byBjb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlCisgKiBjaGFubmVsLiBUaGlzIG1lc3NhZ2Ugc2hvdWxkIG5ldmVyIGluY2x1ZGUgYW55dGhpbmcgb3RoZXIgdGhlbiB2ZXJzaW9uaW5nCisgKiAoaS5lLiB0aGlzIG1lc3NhZ2Ugd2lsbCBiZSB0aGUgc2FtZSBmb3IgZXZlcikuCisgKi8KK3N0cnVjdCBudnNwX21lc3NhZ2VfaW5pdF9jb21wbGV0ZSB7CisJdTMyIG5lZ290aWF0ZWRfcHJvdG9jb2xfdmVyOworCXUzMiBtYXhfbWRsX2NoYWluX2xlbjsKKwl1MzIgc3RhdHVzOworfSBfX3BhY2tlZDsKKwordW5pb24gbnZzcF9tZXNzYWdlX2luaXRfdWJlciB7CisJc3RydWN0IG52c3BfbWVzc2FnZV9pbml0IGluaXQ7CisJc3RydWN0IG52c3BfbWVzc2FnZV9pbml0X2NvbXBsZXRlIGluaXRfY29tcGxldGU7Cit9IF9fcGFja2VkOworCisvKiBWZXJzaW9uIDEgTWVzc2FnZXMgKi8KKworLyoKKyAqIFRoaXMgbWVzc2FnZSBpcyB1c2VkIGJ5IHRoZSBWU0MgdG8gc2VuZCB0aGUgTkRJUyB2ZXJzaW9uIHRvIHRoZSBWU1AuIFRoZSBWU1AKKyAqIGNhbiB1c2UgdGhpcyBpbmZvcm1hdGlvbiB3aGVuIGhhbmRsaW5nIE9JRHMgc2VudCBieSB0aGUgVlNDLgorICovCitzdHJ1Y3QgbnZzcF8xX21lc3NhZ2Vfc2VuZF9uZGlzX3ZlcnNpb24geworCXUzMiBuZGlzX21ham9yX3ZlcjsKKwl1MzIgbmRpc19taW5vcl92ZXI7Cit9IF9fcGFja2VkOworCisvKgorICogVGhpcyBtZXNzYWdlIGlzIHVzZWQgYnkgdGhlIFZTQyB0byBzZW5kIGEgcmVjZWl2ZSBidWZmZXIgdG8gdGhlIFZTUC4gVGhlIFZTUAorICogY2FuIHRoZW4gdXNlIHRoZSByZWNlaXZlIGJ1ZmZlciB0byBzZW5kIGRhdGEgdG8gdGhlIFZTQy4KKyAqLworc3RydWN0IG52c3BfMV9tZXNzYWdlX3NlbmRfcmVjZWl2ZV9idWZmZXIgeworCXUzMiBncGFkbF9oYW5kbGU7CisJdTE2IGlkOworfSBfX3BhY2tlZDsKKworc3RydWN0IG52c3BfMV9yZWNlaXZlX2J1ZmZlcl9zZWN0aW9uIHsKKwl1MzIgb2Zmc2V0OworCXUzMiBzdWJfYWxsb2Nfc2l6ZTsKKwl1MzIgbnVtX3N1Yl9hbGxvY3M7CisJdTMyIGVuZF9vZmZzZXQ7Cit9IF9fcGFja2VkOworCisvKgorICogVGhpcyBtZXNzYWdlIGlzIHVzZWQgYnkgdGhlIFZTUCB0byBhY2tub3dsZWRnZSBhIHJlY2VpdmUgYnVmZmVyIHNlbmQgYnkgdGhlCisgKiBWU0MuIFRoaXMgbWVzc2FnZSBtdXN0IGJlIHNlbnQgYnkgdGhlIFZTUCBiZWZvcmUgdGhlIFZTUCB1c2VzIHRoZSByZWNlaXZlCisgKiBidWZmZXIuCisgKi8KK3N0cnVjdCBudnNwXzFfbWVzc2FnZV9zZW5kX3JlY2VpdmVfYnVmZmVyX2NvbXBsZXRlIHsKKwl1MzIgc3RhdHVzOworCXUzMiBudW1fc2VjdGlvbnM7CisKKwkvKgorCSAqIFRoZSByZWNlaXZlIGJ1ZmZlciBpcyBzcGxpdCBpbnRvIHR3byBwYXJ0cywgYSBsYXJnZSBzdWJhbGxvY2F0aW9uCisJICogc2VjdGlvbiBhbmQgYSBzbWFsbCBzdWJhbGxvY2F0aW9uIHNlY3Rpb24uIFRoZXNlIHNlY3Rpb25zIGFyZSB0aGVuCisJICogc3ViYWxsb2NhdGVkIGJ5IGEgY2VydGFpbiBzaXplLgorCSAqLworCisJLyoKKwkgKiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBicmVhayB1cCBvZiB0aGUgcmVjZWl2ZSBidWZmZXIgaGFzIDYKKwkgKiBsYXJnZSBzdWJhbGxvY2F0aW9ucyBhbmQgMTAgc21hbGwgc3ViYWxsb2NhdGlvbnMuCisJICovCisKKwkvKgorCSAqIHwgICAgICAgICAgICBMYXJnZSBTZWN0aW9uICAgICAgICAgIHwgIHwgICBTbWFsbCBTZWN0aW9uICAgfAorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqIHwgICAgIHwgICAgIHwgICAgIHwgICAgIHwgICAgIHwgICAgIHwgIHwgfCB8IHwgfCB8IHwgfCB8IHwgfAorCSAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgKiAgTGFyZ2VPZmZzZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgU21hbGxPZmZzZXQKKwkgKi8KKworCXN0cnVjdCBudnNwXzFfcmVjZWl2ZV9idWZmZXJfc2VjdGlvbiBzZWN0aW9uc1sxXTsKK30gX19wYWNrZWQ7CisKKy8qCisgKiBUaGlzIG1lc3NhZ2UgaXMgc2VudCBieSB0aGUgVlNDIHRvIHJldm9rZSB0aGUgcmVjZWl2ZSBidWZmZXIuICBBZnRlciB0aGUgVlNQCisgKiBjb21wbGV0ZXMgdGhpcyB0cmFuc2FjdGlvbiwgdGhlIHZzcCBzaG91bGQgbmV2ZXIgdXNlIHRoZSByZWNlaXZlIGJ1ZmZlcgorICogYWdhaW4uCisgKi8KK3N0cnVjdCBudnNwXzFfbWVzc2FnZV9yZXZva2VfcmVjZWl2ZV9idWZmZXIgeworCXUxNiBpZDsKK307CisKKy8qCisgKiBUaGlzIG1lc3NhZ2UgaXMgdXNlZCBieSB0aGUgVlNDIHRvIHNlbmQgYSBzZW5kIGJ1ZmZlciB0byB0aGUgVlNQLiBUaGUgVlNDCisgKiBjYW4gdGhlbiB1c2UgdGhlIHNlbmQgYnVmZmVyIHRvIHNlbmQgZGF0YSB0byB0aGUgVlNQLgorICovCitzdHJ1Y3QgbnZzcF8xX21lc3NhZ2Vfc2VuZF9zZW5kX2J1ZmZlciB7CisJdTMyIGdwYWRsX2hhbmRsZTsKKwl1MTYgaWQ7Cit9IF9fcGFja2VkOworCisvKgorICogVGhpcyBtZXNzYWdlIGlzIHVzZWQgYnkgdGhlIFZTUCB0byBhY2tub3dsZWRnZSBhIHNlbmQgYnVmZmVyIHNlbnQgYnkgdGhlCisgKiBWU0MuIFRoaXMgbWVzc2FnZSBtdXN0IGJlIHNlbnQgYnkgdGhlIFZTUCBiZWZvcmUgdGhlIFZTUCB1c2VzIHRoZSBzZW50CisgKiBidWZmZXIuCisgKi8KK3N0cnVjdCBudnNwXzFfbWVzc2FnZV9zZW5kX3NlbmRfYnVmZmVyX2NvbXBsZXRlIHsKKwl1MzIgc3RhdHVzOworCisJLyoKKwkgKiBUaGUgVlNDIGdldHMgdG8gY2hvb3NlIHRoZSBzaXplIG9mIHRoZSBzZW5kIGJ1ZmZlciBhbmQgdGhlIFZTUCBnZXRzCisJICogdG8gY2hvb3NlIHRoZSBzZWN0aW9ucyBzaXplIG9mIHRoZSBidWZmZXIuICBUaGlzIHdhcyBkb25lIHRvIGVuYWJsZQorCSAqIGR5bmFtaWMgcmVjb25maWd1cmF0aW9ucyB3aGVuIHRoZSBjb3N0IG9mIEdQQS1kaXJlY3QgYnVmZmVycworCSAqIGRlY3JlYXNlcy4KKwkgKi8KKwl1MzIgc2VjdGlvbl9zaXplOworfSBfX3BhY2tlZDsKKworLyoKKyAqIFRoaXMgbWVzc2FnZSBpcyBzZW50IGJ5IHRoZSBWU0MgdG8gcmV2b2tlIHRoZSBzZW5kIGJ1ZmZlci4gIEFmdGVyIHRoZSBWU1AKKyAqIGNvbXBsZXRlcyB0aGlzIHRyYW5zYWN0aW9uLCB0aGUgdnNwIHNob3VsZCBuZXZlciB1c2UgdGhlIHNlbmQgYnVmZmVyIGFnYWluLgorICovCitzdHJ1Y3QgbnZzcF8xX21lc3NhZ2VfcmV2b2tlX3NlbmRfYnVmZmVyIHsKKwl1MTYgaWQ7Cit9OworCisvKgorICogVGhpcyBtZXNzYWdlIGlzIHVzZWQgYnkgYm90aCB0aGUgVlNQIGFuZCB0aGUgVlNDIHRvIHNlbmQgYSBSTkRJUyBtZXNzYWdlIHRvCisgKiB0aGUgb3Bwb3NpdGUgY2hhbm5lbCBlbmRwb2ludC4KKyAqLworc3RydWN0IG52c3BfMV9tZXNzYWdlX3NlbmRfcm5kaXNfcGFja2V0IHsKKwkvKgorCSAqIFRoaXMgZmllbGQgaXMgc3BlY2lmaWVkIGJ5IFJOSURTLiBUaGV5IGFzc3VtZSB0aGVyZSdzIHR3byBkaWZmZXJlbnQKKwkgKiBjaGFubmVscyBvZiBjb21tdW5pY2F0aW9uLiBIb3dldmVyLCB0aGUgTmV0d29yayBWU1Agb25seSBoYXMgb25lLgorCSAqIFRoZXJlZm9yZSwgdGhlIGNoYW5uZWwgdHJhdmVscyB3aXRoIHRoZSBSTkRJUyBwYWNrZXQuCisJICovCisJdTMyIGNoYW5uZWxfdHlwZTsKKworCS8qCisJICogVGhpcyBmaWVsZCBpcyB1c2VkIHRvIHNlbmQgcGFydCBvciBhbGwgb2YgdGhlIGRhdGEgdGhyb3VnaCBhIHNlbmQKKwkgKiBidWZmZXIuIFRoaXMgdmFsdWVzIHNwZWNpZmllcyBhbiBpbmRleCBpbnRvIHRoZSBzZW5kIGJ1ZmZlci4gSWYgdGhlCisJICogaW5kZXggaXMgMHhGRkZGRkZGRiwgdGhlbiB0aGUgc2VuZCBidWZmZXIgaXMgbm90IGJlaW5nIHVzZWQgYW5kIGFsbAorCSAqIG9mIHRoZSBkYXRhIHdhcyBzZW50IHRocm91Z2ggb3RoZXIgVk1CdXMgbWVjaGFuaXNtcy4KKwkgKi8KKwl1MzIgc2VuZF9idWZfc2VjdGlvbl9pbmRleDsKKwl1MzIgc2VuZF9idWZfc2VjdGlvbl9zaXplOworfSBfX3BhY2tlZDsKKworLyoKKyAqIFRoaXMgbWVzc2FnZSBpcyB1c2VkIGJ5IGJvdGggdGhlIFZTUCBhbmQgdGhlIFZTQyB0byBjb21wbGV0ZSBhIFJORElTIG1lc3NhZ2UKKyAqIHRvIHRoZSBvcHBvc2l0ZSBjaGFubmVsIGVuZHBvaW50LiBBdCB0aGlzIHBvaW50LCB0aGUgaW5pdGlhdG9yIG9mIHRoaXMKKyAqIG1lc3NhZ2UgY2Fubm90IHVzZSBhbnkgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3JpZ2luYWwgUk5ESVMgcGFja2V0LgorICovCitzdHJ1Y3QgbnZzcF8xX21lc3NhZ2Vfc2VuZF9ybmRpc19wYWNrZXRfY29tcGxldGUgeworCXUzMiBzdGF0dXM7Cit9OworCit1bmlvbiBudnNwXzFfbWVzc2FnZV91YmVyIHsKKwlzdHJ1Y3QgbnZzcF8xX21lc3NhZ2Vfc2VuZF9uZGlzX3ZlcnNpb24gc2VuZF9uZGlzX3ZlcjsKKworCXN0cnVjdCBudnNwXzFfbWVzc2FnZV9zZW5kX3JlY2VpdmVfYnVmZmVyIHNlbmRfcmVjdl9idWY7CisJc3RydWN0IG52c3BfMV9tZXNzYWdlX3NlbmRfcmVjZWl2ZV9idWZmZXJfY29tcGxldGUKKwkJCQkJCXNlbmRfcmVjdl9idWZfY29tcGxldGU7CisJc3RydWN0IG52c3BfMV9tZXNzYWdlX3Jldm9rZV9yZWNlaXZlX2J1ZmZlciByZXZva2VfcmVjdl9idWY7CisKKwlzdHJ1Y3QgbnZzcF8xX21lc3NhZ2Vfc2VuZF9zZW5kX2J1ZmZlciBzZW5kX3NlbmRfYnVmOworCXN0cnVjdCBudnNwXzFfbWVzc2FnZV9zZW5kX3NlbmRfYnVmZmVyX2NvbXBsZXRlIHNlbmRfc2VuZF9idWZfY29tcGxldGU7CisJc3RydWN0IG52c3BfMV9tZXNzYWdlX3Jldm9rZV9zZW5kX2J1ZmZlciByZXZva2Vfc2VuZF9idWY7CisKKwlzdHJ1Y3QgbnZzcF8xX21lc3NhZ2Vfc2VuZF9ybmRpc19wYWNrZXQgc2VuZF9ybmRpc19wa3Q7CisJc3RydWN0IG52c3BfMV9tZXNzYWdlX3NlbmRfcm5kaXNfcGFja2V0X2NvbXBsZXRlCisJCQkJCQlzZW5kX3JuZGlzX3BrdF9jb21wbGV0ZTsKK30gX19wYWNrZWQ7CisKK3VuaW9uIG52c3BfYWxsX21lc3NhZ2VzIHsKKwl1bmlvbiBudnNwX21lc3NhZ2VfaW5pdF91YmVyIGluaXRfbXNnOworCXVuaW9uIG52c3BfMV9tZXNzYWdlX3ViZXIgdjFfbXNnOworfSBfX3BhY2tlZDsKKworLyogQUxMIE1lc3NhZ2VzICovCitzdHJ1Y3QgbnZzcF9tZXNzYWdlIHsKKwlzdHJ1Y3QgbnZzcF9tZXNzYWdlX2hlYWRlciBoZHI7CisJdW5pb24gbnZzcF9hbGxfbWVzc2FnZXMgbXNnOworfSBfX3BhY2tlZDsKKworCisKKworLyogI2RlZmluZSBOVlNDX01JTl9QUk9UT0NPTF9WRVJTSU9OCQkxICovCisvKiAjZGVmaW5lIE5WU0NfTUFYX1BST1RPQ09MX1ZFUlNJT04JCTEgKi8KKworI2RlZmluZSBORVRWU0NfU0VORF9CVUZGRVJfU0laRQkJCSg2NCoxMDI0KQkvKiA2NEsgKi8KKyNkZWZpbmUgTkVUVlNDX1NFTkRfQlVGRkVSX0lECQkJMHhmYWNlCisKKworI2RlZmluZSBORVRWU0NfUkVDRUlWRV9CVUZGRVJfU0laRQkJKDEwMjQqMTAyNCkJLyogMU1CICovCisKKyNkZWZpbmUgTkVUVlNDX1JFQ0VJVkVfQlVGRkVSX0lECQkweGNhZmUKKworI2RlZmluZSBORVRWU0NfUkVDRUlWRV9TR19DT1VOVAkJCTEKKworLyogUHJlYWxsb2NhdGVkIHJlY2VpdmUgcGFja2V0cyAqLworI2RlZmluZSBORVRWU0NfUkVDRUlWRV9QQUNLRVRMSVNUX0NPVU5UCQkyNTYKKworI2RlZmluZSBORVRWU0NfUEFDS0VUX1NJWkUgICAgICAgICAgICAgICAgICAgICAgMjA0OAorCisvKiBQZXIgbmV0dnNjIGNoYW5uZWwtc3BlY2lmaWMgKi8KK3N0cnVjdCBuZXR2c2NfZGV2aWNlIHsKKwlzdHJ1Y3QgaHZfZGV2aWNlICpkZXY7CisKKwlhdG9taWNfdCByZWZjbnQ7CisJYXRvbWljX3QgbnVtX291dHN0YW5kaW5nX3NlbmRzOworCS8qCisJICogTGlzdCBvZiBmcmVlIHByZWFsbG9jYXRlZCBodl9uZXR2c2NfcGFja2V0IHRvIHJlcHJlc2VudCByZWNlaXZlCisJICogcGFja2V0CisJICovCisJc3RydWN0IGxpc3RfaGVhZCByZWN2X3BrdF9saXN0OworCXNwaW5sb2NrX3QgcmVjdl9wa3RfbGlzdF9sb2NrOworCisJLyogU2VuZCBidWZmZXIgYWxsb2NhdGVkIGJ5IHVzIGJ1dCBtYW5hZ2VzIGJ5IE5ldFZTUCAqLworCXZvaWQgKnNlbmRfYnVmOworCXUzMiBzZW5kX2J1Zl9zaXplOworCXUzMiBzZW5kX2J1Zl9ncGFkbF9oYW5kbGU7CisJdTMyIHNlbmRfc2VjdGlvbl9zaXplOworCisJLyogUmVjZWl2ZSBidWZmZXIgYWxsb2NhdGVkIGJ5IHVzIGJ1dCBtYW5hZ2VzIGJ5IE5ldFZTUCAqLworCXZvaWQgKnJlY3ZfYnVmOworCXUzMiByZWN2X2J1Zl9zaXplOworCXUzMiByZWN2X2J1Zl9ncGFkbF9oYW5kbGU7CisJdTMyIHJlY3Zfc2VjdGlvbl9jbnQ7CisJc3RydWN0IG52c3BfMV9yZWNlaXZlX2J1ZmZlcl9zZWN0aW9uICpyZWN2X3NlY3Rpb247CisKKwkvKiBVc2VkIGZvciBOZXRWU1AgaW5pdGlhbGl6YXRpb24gcHJvdG9jb2wgKi8KKwlzdHJ1Y3QgY29tcGxldGlvbiBjaGFubmVsX2luaXRfd2FpdDsKKwlzdHJ1Y3QgbnZzcF9tZXNzYWdlIGNoYW5uZWxfaW5pdF9wa3Q7CisKKwlzdHJ1Y3QgbnZzcF9tZXNzYWdlIHJldm9rZV9wYWNrZXQ7CisJLyogdW5zaWduZWQgY2hhciBId01hY0FkZHJbSFdfTUFDQUREUl9MRU5dOyAqLworCisJLyogSG9sZHMgcm5kaXMgZGV2aWNlIGluZm8gKi8KKwl2b2lkICpleHRlbnNpb247Cit9OworCiAKIC8qICBTdGF0dXMgY29kZXMgKi8KIApAQCAtNjE4LDYgKzEwMDIsMTMgQEAKIAl1bmlvbiBybmRpc19tZXNzYWdlX2NvbnRhaW5lciBtc2c7CiB9OwogCisKK3N0cnVjdCBybmRpc19maWx0ZXJfcGFja2V0IHsKKwl2b2lkICpjb21wbGV0aW9uX2N0eDsKKwl2b2lkICgqY29tcGxldGlvbikodm9pZCAqY29udGV4dCk7CisJc3RydWN0IHJuZGlzX21lc3NhZ2UgbXNnOworfTsKKwogLyogSGFuZHkgbWFjcm9zICovCiAKIC8qIGdldCB0aGUgc2l6ZSBvZiBhbiBSTkRJUyBtZXNzYWdlLiBQYXNzIGluIHRoZSBtZXNzYWdlIHR5cGUsICovCkBAIC02NTAsNCArMTA0MSwyNyBAQAogI2RlZmluZSBSTkRJU19NRVNTQUdFX1JBV19QVFJfVE9fTUVTU0FHRV9QVFIocm5kaXNfbXNnKQlcCiAJKCh2b2lkICopIHJuZGlzX21zZykKIAotI2VuZGlmIC8qIF9STkRJU19IXyAqLworCisjZGVmaW5lIF9fc3RydWN0X2Jjb3VudCh4KQorCisKKworI2RlZmluZSBSTkRJU19IRUFERVJfU0laRQkoc2l6ZW9mKHN0cnVjdCBybmRpc19tZXNzYWdlKSAtIFwKKwkJCQkgc2l6ZW9mKHVuaW9uIHJuZGlzX21lc3NhZ2VfY29udGFpbmVyKSkKKworI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0RJUkVDVEVECTB4MDAwMDAwMDEKKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9NVUxUSUNBU1QJMHgwMDAwMDAwMgorI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1QJMHgwMDAwMDAwNAorI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0JST0FEQ0FTVAkweDAwMDAwMDA4CisjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfU09VUkNFX1JPVVRJTkcJMHgwMDAwMDAxMAorI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX1BST01JU0NVT1VTCTB4MDAwMDAwMjAKKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9TTVQJCTB4MDAwMDAwNDAKKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9BTExfTE9DQUwJMHgwMDAwMDA4MAorI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0dST1VQCQkweDAwMDAwMTAwCisjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfQUxMX0ZVTkNUSU9OQUwJMHgwMDAwMDIwMAorI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0ZVTkNUSU9OQUwJMHgwMDAwMDQwMAorI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX01BQ19GUkFNRQkweDAwMDAwODAwCisKKworCisjZW5kaWYgLyogX0hZUEVSVl9ORVRfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L3ZzdG9yYWdlLmggYi9kcml2ZXJzL3N0YWdpbmcvaHYvaHlwZXJ2X3N0b3JhZ2UuaApzaW1pbGFyaXR5IGluZGV4IDYzJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3N0YWdpbmcvaHYvdnN0b3JhZ2UuaApyZW5hbWUgdG8gZHJpdmVycy9zdGFnaW5nL2h2L2h5cGVydl9zdG9yYWdlLmgKaW5kZXggZWJiNGQ2Ny4uYTAxZjlhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L3ZzdG9yYWdlLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L2h5cGVydl9zdG9yYWdlLmgKQEAgLTEsNiArMSw2IEBACiAvKgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwOSwgTWljcm9zb2Z0IENvcnBvcmF0aW9uLgorICogQ29weXJpZ2h0IChjKSAyMDExLCBNaWNyb3NvZnQgQ29ycG9yYXRpb24uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC0xOCwxMyArMTgsMTkgQEAKICAqIEF1dGhvcnM6CiAgKiAgIEhhaXlhbmcgWmhhbmcgPGhhaXlhbmd6QG1pY3Jvc29mdC5jb20+CiAgKiAgIEhhbmsgSmFuc3NlbiAgPGhqYW5zc2VuQG1pY3Jvc29mdC5jb20+CisgKiAgIEsuIFkuIFNyaW5pdmFzYW4gPGt5c0BtaWNyb3NvZnQuY29tPgogICoKICAqLwogCisjaWZuZGVmIF9IWVBFUlZfU1RPUkFHRV9ICisjZGVmaW5lIF9IWVBFUlZfU1RPUkFHRV9ICisKKwogLyogdnN0b3JhZ2UudyByZXZpc2lvbiBudW1iZXIuICBUaGlzIGlzIHVzZWQgaW4gdGhlIGNhc2Ugb2YgYSB2ZXJzaW9uIG1hdGNoLCAqLwogLyogdG8gYWxlcnQgdGhlIHVzZXIgdGhhdCBzdHJ1Y3R1cmUgc2l6ZXMgbWF5IGJlIG1pc21hdGNoZWQgZXZlbiB0aG91Z2ggdGhlICovCiAvKiBwcm90b2NvbCB2ZXJzaW9ucyBtYXRjaC4gKi8KIAorCiAjZGVmaW5lIFJFVklTSU9OX1NUUklORyhSRVZJU0lPTl8pICNSRVZJU0lPTl8KICNkZWZpbmUgRklMTF9WTVNUT1JfUkVWSVNJT04oUkVTVUxUX0xWQUxVRV8pCQkJCVwKIAlkbyB7CQkJCQkJCQlcCkBAIC0xOTAsMyArMTk2LDEzOSBAQAogCiAvKiAgVGhpcyBpcyB0aGUgc2V0IG9mIGZsYWdzIHRoYXQgdGhlIHZzYyBjYW4gc2V0IGluIGFueSBwYWNrZXRzIGl0IHNlbmRzICovCiAjZGVmaW5lIFZTQ19MRUdBTF9GTEFHUwkJKFJFUVVFU1RfQ09NUExFVElPTl9GTEFHKQorCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSAiaHlwZXJ2X3N0b3JhZ2UuaCIKKyNpbmNsdWRlICJoeXBlcnYuaCIKKworLyogRGVmaW5lcyAqLworI2RlZmluZSBTVE9SVlNDX1JJTkdfQlVGRkVSX1NJWkUJCQkoMjAqUEFHRV9TSVpFKQorI2RlZmluZSBCTEtWU0NfUklOR19CVUZGRVJfU0laRQkJCQkoMjAqUEFHRV9TSVpFKQorCisjZGVmaW5lIFNUT1JWU0NfTUFYX0lPX1JFUVVFU1RTCQkJCTEyOAorCisvKgorICogSW4gSHlwZXItViwgZWFjaCBwb3J0L3BhdGgvdGFyZ2V0IG1hcHMgdG8gMSBzY3NpIGhvc3QgYWRhcHRlci4gIEluCisgKiByZWFsaXR5LCB0aGUgcGF0aC90YXJnZXQgaXMgbm90IHVzZWQgKGllIGFsd2F5cyBzZXQgdG8gMCkgc28gb3VyCisgKiBzY3NpIGhvc3QgYWRhcHRlciBlc3NlbnRpYWxseSBoYXMgMSBidXMgd2l0aCAxIHRhcmdldCB0aGF0IGNvbnRhaW5zCisgKiB1cCB0byAyNTYgbHVucy4KKyAqLworI2RlZmluZSBTVE9SVlNDX01BWF9MVU5TX1BFUl9UQVJHRVQJCQk2NAorI2RlZmluZSBTVE9SVlNDX01BWF9UQVJHRVRTCQkJCTEKKyNkZWZpbmUgU1RPUlZTQ19NQVhfQ0hBTk5FTFMJCQkJMQorCitzdHJ1Y3QgaHZfc3RvcnZzY19yZXF1ZXN0OworCisvKiBNYXRjaGVzIFdpbmRvd3MtZW5kICovCitlbnVtIHN0b3J2c2NfcmVxdWVzdF90eXBlIHsKKwlXUklURV9UWVBFLAorCVJFQURfVFlQRSwKKwlVTktOT1dOX1RZUEUsCit9OworCisKK3N0cnVjdCBodl9zdG9ydnNjX3JlcXVlc3QgeworCXN0cnVjdCBodl9zdG9ydnNjX3JlcXVlc3QgKnJlcXVlc3Q7CisJc3RydWN0IGh2X2RldmljZSAqZGV2aWNlOworCisJLyogU3luY2hyb25pemUgdGhlIHJlcXVlc3QvcmVzcG9uc2UgaWYgbmVlZGVkICovCisJc3RydWN0IGNvbXBsZXRpb24gd2FpdF9ldmVudDsKKworCXVuc2lnbmVkIGNoYXIgKnNlbnNlX2J1ZmZlcjsKKwl2b2lkICpjb250ZXh0OworCXZvaWQgKCpvbl9pb19jb21wbGV0aW9uKShzdHJ1Y3QgaHZfc3RvcnZzY19yZXF1ZXN0ICpyZXF1ZXN0KTsKKwlzdHJ1Y3QgaHZfbXVsdGlwYWdlX2J1ZmZlciBkYXRhX2J1ZmZlcjsKKworCXN0cnVjdCB2c3Rvcl9wYWNrZXQgdnN0b3JfcGFja2V0OworfTsKKworCitzdHJ1Y3Qgc3RvcnZzY19kZXZpY2VfaW5mbyB7CisJdTMyIHJpbmdfYnVmZmVyX3NpemU7CisJdW5zaWduZWQgaW50IHBvcnRfbnVtYmVyOworCXVuc2lnbmVkIGNoYXIgcGF0aF9pZDsKKwl1bnNpZ25lZCBjaGFyIHRhcmdldF9pZDsKK307CisKK3N0cnVjdCBzdG9ydnNjX21ham9yX2luZm8geworCWludCBtYWpvcjsKKwlpbnQgaW5kZXg7CisJYm9vbCBkb19yZWdpc3RlcjsKKwljaGFyICpkZXZuYW1lOworCWNoYXIgKmRpc2tuYW1lOworfTsKKworLyogQSBzdG9ydnNjIGRldmljZSBpcyBhIGRldmljZSBvYmplY3QgdGhhdCBjb250YWlucyBhIHZtYnVzIGNoYW5uZWwgKi8KK3N0cnVjdCBzdG9ydnNjX2RldmljZSB7CisJc3RydWN0IGh2X2RldmljZSAqZGV2aWNlOworCisJLyogMCBpbmRpY2F0ZXMgdGhlIGRldmljZSBpcyBiZWluZyBkZXN0cm95ZWQgKi8KKwlhdG9taWNfdCByZWZfY291bnQ7CisKKwlib29sCSBkcmFpbl9ub3RpZnk7CisJYXRvbWljX3QgbnVtX291dHN0YW5kaW5nX3JlcTsKKworCXdhaXRfcXVldWVfaGVhZF90IHdhaXRpbmdfdG9fZHJhaW47CisKKwkvKgorCSAqIEVhY2ggdW5pcXVlIFBvcnQvUGF0aC9UYXJnZXQgcmVwcmVzZW50cyAxIGNoYW5uZWwgaWUgc2NzaQorCSAqIGNvbnRyb2xsZXIuIEluIHJlYWxpdHksIHRoZSBwYXRoaWQsIHRhcmdldGlkIGlzIGFsd2F5cyAwCisJICogYW5kIHRoZSBwb3J0IGlzIHNldCBieSB1cworCSAqLworCXVuc2lnbmVkIGludCBwb3J0X251bWJlcjsKKwl1bnNpZ25lZCBjaGFyIHBhdGhfaWQ7CisJdW5zaWduZWQgY2hhciB0YXJnZXRfaWQ7CisKKwkvKiBVc2VkIGZvciB2c2MvdnNwIGNoYW5uZWwgcmVzZXQgcHJvY2VzcyAqLworCXN0cnVjdCBodl9zdG9ydnNjX3JlcXVlc3QgaW5pdF9yZXF1ZXN0OworCXN0cnVjdCBodl9zdG9ydnNjX3JlcXVlc3QgcmVzZXRfcmVxdWVzdDsKK307CisKKworLyogR2V0IHRoZSBzdG9yZGV2aWNlIG9iamVjdCBpZmYgZXhpc3RzIGFuZCBpdHMgcmVmY291bnQgPiAxICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzdG9ydnNjX2RldmljZSAqZ2V0X3N0b3JfZGV2aWNlKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3Qgc3RvcnZzY19kZXZpY2UgKnN0b3JfZGV2aWNlOworCisJc3Rvcl9kZXZpY2UgPSAoc3RydWN0IHN0b3J2c2NfZGV2aWNlICopZGV2aWNlLT5leHQ7CisJaWYgKHN0b3JfZGV2aWNlICYmIGF0b21pY19yZWFkKCZzdG9yX2RldmljZS0+cmVmX2NvdW50KSA+IDEpCisJCWF0b21pY19pbmMoJnN0b3JfZGV2aWNlLT5yZWZfY291bnQpOworCWVsc2UKKwkJc3Rvcl9kZXZpY2UgPSBOVUxMOworCisJcmV0dXJuIHN0b3JfZGV2aWNlOworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXRfc3Rvcl9kZXZpY2Uoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBzdG9ydnNjX2RldmljZSAqc3Rvcl9kZXZpY2U7CisKKwlzdG9yX2RldmljZSA9IChzdHJ1Y3Qgc3RvcnZzY19kZXZpY2UgKilkZXZpY2UtPmV4dDsKKworCWF0b21pY19kZWMoJnN0b3JfZGV2aWNlLT5yZWZfY291bnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3RvcnZzY193YWl0X3RvX2RyYWluKHN0cnVjdCBzdG9ydnNjX2RldmljZSAqZGV2KQoreworCWRldi0+ZHJhaW5fbm90aWZ5ID0gdHJ1ZTsKKwl3YWl0X2V2ZW50KGRldi0+d2FpdGluZ190b19kcmFpbiwKKwkJICAgYXRvbWljX3JlYWQoJmRldi0+bnVtX291dHN0YW5kaW5nX3JlcSkgPT0gMCk7CisJZGV2LT5kcmFpbl9ub3RpZnkgPSBmYWxzZTsKK30KKworLyogSW50ZXJmYWNlICovCisKK2ludCBzdG9ydnNjX2Rldl9hZGQoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLAorCQkJCXZvaWQgKmFkZGl0aW9uYWxfaW5mbyk7CitpbnQgc3RvcnZzY19kZXZfcmVtb3ZlKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSk7CisKK2ludCBzdG9ydnNjX2RvX2lvKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSwKKwkJCQlzdHJ1Y3QgaHZfc3RvcnZzY19yZXF1ZXN0ICpyZXF1ZXN0KTsKKworaW50IHN0b3J2c2NfZ2V0X21ham9yX2luZm8oc3RydWN0IHN0b3J2c2NfZGV2aWNlX2luZm8gKmRldmljZV9pbmZvLAorCQkJCXN0cnVjdCBzdG9ydnNjX21ham9yX2luZm8gKm1ham9yX2luZm8pOworCisjZW5kaWYgLyogX0hZUEVSVl9TVE9SQUdFX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9oeXBlcnZfdm1idXMuaCBiL2RyaXZlcnMvc3RhZ2luZy9odi9oeXBlcnZfdm1idXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjMwYTQyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L2h5cGVydl92bWJ1cy5oCkBAIC0wLDAgKzEsNjMxIEBACisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgTWljcm9zb2Z0IENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlCisgKiBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KKyAqCisgKiBBdXRob3JzOgorICogICBIYWl5YW5nIFpoYW5nIDxoYWl5YW5nekBtaWNyb3NvZnQuY29tPgorICogICBIYW5rIEphbnNzZW4gIDxoamFuc3NlbkBtaWNyb3NvZnQuY29tPgorICogICBLLiBZLiBTcmluaXZhc2FuIDxreXNAbWljcm9zb2Z0LmNvbT4KKyAqCisgKi8KKworI2lmbmRlZiBfSFlQRVJWX1ZNQlVTX0gKKyNkZWZpbmUgX0hZUEVSVl9WTUJVU19ICisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8YXNtL3N5bmNfYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvYXRvbWljLmg+CisKKyNpbmNsdWRlICJoeXBlcnYuaCIKKworLyoKKyAqIFRoZSBiZWxvdyBDUFVJRCBsZWF2ZXMgYXJlIHByZXNlbnQgaWYgVmVyc2lvbkFuZEZlYXR1cmVzLkh5cGVydmlzb3JQcmVzZW50CisgKiBpcyBzZXQgYnkgQ1BVSUQoSFZDUFVJRF9WRVJTSU9OX0ZFQVRVUkVTKS4KKyAqLworZW51bSBodl9jcHVpZF9mdW5jdGlvbiB7CisJSFZDUFVJRF9WRVJTSU9OX0ZFQVRVUkVTCQk9IDB4MDAwMDAwMDEsCisJSFZDUFVJRF9WRU5ET1JfTUFYRlVOQ1RJT04JCT0gMHg0MDAwMDAwMCwKKwlIVkNQVUlEX0lOVEVSRkFDRQkJCT0gMHg0MDAwMDAwMSwKKworCS8qCisJICogVGhlIHJlbWFpbmluZyBmdW5jdGlvbnMgZGVwZW5kIG9uIHRoZSB2YWx1ZSBvZgorCSAqIEhWQ1BVSURfSU5URVJGQUNFCisJICovCisJSFZDUFVJRF9WRVJTSU9OCQkJPSAweDQwMDAwMDAyLAorCUhWQ1BVSURfRkVBVFVSRVMJCQk9IDB4NDAwMDAwMDMsCisJSFZDUFVJRF9FTkxJR0hURU5NRU5UX0lORk8JPSAweDQwMDAwMDA0LAorCUhWQ1BVSURfSU1QTEVNRU5UQVRJT05fTElNSVRTCQk9IDB4NDAwMDAwMDUsCit9OworCisvKiBEZWZpbmUgdmVyc2lvbiBvZiB0aGUgc3ludGhldGljIGludGVycnVwdCBjb250cm9sbGVyLiAqLworI2RlZmluZSBIVl9TWU5JQ19WRVJTSU9OCQkoMSkKKworLyogRGVmaW5lIHRoZSBleHBlY3RlZCBTeW5JQyB2ZXJzaW9uLiAqLworI2RlZmluZSBIVl9TWU5JQ19WRVJTSU9OXzEJCSgweDEpCisKKy8qIERlZmluZSBzeW50aGV0aWMgaW50ZXJydXB0IGNvbnRyb2xsZXIgbWVzc2FnZSBjb25zdGFudHMuICovCisjZGVmaW5lIEhWX01FU1NBR0VfU0laRQkJCSgyNTYpCisjZGVmaW5lIEhWX01FU1NBR0VfUEFZTE9BRF9CWVRFX0NPVU5UCSgyNDApCisjZGVmaW5lIEhWX01FU1NBR0VfUEFZTE9BRF9RV09SRF9DT1VOVAkoMzApCisjZGVmaW5lIEhWX0FOWV9WUAkJCSgweEZGRkZGRkZGKQorCisvKiBEZWZpbmUgc3ludGhldGljIGludGVycnVwdCBjb250cm9sbGVyIGZsYWcgY29uc3RhbnRzLiAqLworI2RlZmluZSBIVl9FVkVOVF9GTEFHU19DT1VOVAkJKDI1NiAqIDgpCisjZGVmaW5lIEhWX0VWRU5UX0ZMQUdTX0JZVEVfQ09VTlQJKDI1NikKKyNkZWZpbmUgSFZfRVZFTlRfRkxBR1NfRFdPUkRfQ09VTlQJKDI1NiAvIHNpemVvZih1MzIpKQorCisvKiBEZWZpbmUgaHlwZXJ2aXNvciBtZXNzYWdlIHR5cGVzLiAqLworZW51bSBodl9tZXNzYWdlX3R5cGUgeworCUhWTVNHX05PTkUJCQk9IDB4MDAwMDAwMDAsCisKKwkvKiBNZW1vcnkgYWNjZXNzIG1lc3NhZ2VzLiAqLworCUhWTVNHX1VOTUFQUEVEX0dQQQkJPSAweDgwMDAwMDAwLAorCUhWTVNHX0dQQV9JTlRFUkNFUFQJCT0gMHg4MDAwMDAwMSwKKworCS8qIFRpbWVyIG5vdGlmaWNhdGlvbiBtZXNzYWdlcy4gKi8KKwlIVk1TR19USU1FUl9FWFBJUkVECQkJPSAweDgwMDAwMDEwLAorCisJLyogRXJyb3IgbWVzc2FnZXMuICovCisJSFZNU0dfSU5WQUxJRF9WUF9SRUdJU1RFUl9WQUxVRQk9IDB4ODAwMDAwMjAsCisJSFZNU0dfVU5SRUNPVkVSQUJMRV9FWENFUFRJT04JPSAweDgwMDAwMDIxLAorCUhWTVNHX1VOU1VQUE9SVEVEX0ZFQVRVUkUJCT0gMHg4MDAwMDAyMiwKKworCS8qIFRyYWNlIGJ1ZmZlciBjb21wbGV0ZSBtZXNzYWdlcy4gKi8KKwlIVk1TR19FVkVOVExPR19CVUZGRVJDT01QTEVURQk9IDB4ODAwMDAwNDAsCisKKwkvKiBQbGF0Zm9ybS1zcGVjaWZpYyBwcm9jZXNzb3IgaW50ZXJjZXB0IG1lc3NhZ2VzLiAqLworCUhWTVNHX1g2NF9JT1BPUlRfSU5URVJDRVBUCQk9IDB4ODAwMTAwMDAsCisJSFZNU0dfWDY0X01TUl9JTlRFUkNFUFQJCT0gMHg4MDAxMDAwMSwKKwlIVk1TR19YNjRfQ1BVSURfSU5URVJDRVBUCQk9IDB4ODAwMTAwMDIsCisJSFZNU0dfWDY0X0VYQ0VQVElPTl9JTlRFUkNFUFQJPSAweDgwMDEwMDAzLAorCUhWTVNHX1g2NF9BUElDX0VPSQkJCT0gMHg4MDAxMDAwNCwKKwlIVk1TR19YNjRfTEVHQUNZX0ZQX0VSUk9SCQk9IDB4ODAwMTAwMDUKK307CisKKy8qIERlZmluZSB0aGUgbnVtYmVyIG9mIHN5bnRoZXRpYyBpbnRlcnJ1cHQgc291cmNlcy4gKi8KKyNkZWZpbmUgSFZfU1lOSUNfU0lOVF9DT1VOVAkJKDE2KQorI2RlZmluZSBIVl9TWU5JQ19TVElNRVJfQ09VTlQJCSg0KQorCisvKiBEZWZpbmUgaW52YWxpZCBwYXJ0aXRpb24gaWRlbnRpZmllci4gKi8KKyNkZWZpbmUgSFZfUEFSVElUSU9OX0lEX0lOVkFMSUQJCSgodTY0KTB4MCkKKworLyogRGVmaW5lIGNvbm5lY3Rpb24gaWRlbnRpZmllciB0eXBlLiAqLwordW5pb24gaHZfY29ubmVjdGlvbl9pZCB7CisJdTMyIGFzdTMyOworCXN0cnVjdCB7CisJCXUzMiBpZDoyNDsKKwkJdTMyIHJlc2VydmVkOjg7CisJfSB1OworfTsKKworLyogRGVmaW5lIHBvcnQgaWRlbnRpZmllciB0eXBlLiAqLwordW5pb24gaHZfcG9ydF9pZCB7CisJdTMyIGFzdTMyOworCXN0cnVjdCB7CisJCXUzMiBpZDoyNDsKKwkJdTMyIHJlc2VydmVkOjg7CisJfSB1IDsKK307CisKKy8qIERlZmluZSBwb3J0IHR5cGUuICovCitlbnVtIGh2X3BvcnRfdHlwZSB7CisJSFZQT1JUX01TRwk9IDEsCisJSFZQT1JUX0VWRU5UCQk9IDIsCisJSFZQT1JUX01PTklUT1IJPSAzCit9OworCisvKiBEZWZpbmUgcG9ydCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuICovCitzdHJ1Y3QgaHZfcG9ydF9pbmZvIHsKKwllbnVtIGh2X3BvcnRfdHlwZSBwb3J0X3R5cGU7CisJdTMyIHBhZGRpbmc7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdTMyIHRhcmdldF9zaW50OworCQkJdTMyIHRhcmdldF92cDsKKwkJCXU2NCByc3ZkejsKKwkJfSBtZXNzYWdlX3BvcnRfaW5mbzsKKwkJc3RydWN0IHsKKwkJCXUzMiB0YXJnZXRfc2ludDsKKwkJCXUzMiB0YXJnZXRfdnA7CisJCQl1MTYgYmFzZV9mbGFnX2J1bWJlcjsKKwkJCXUxNiBmbGFnX2NvdW50OworCQkJdTMyIHJzdmR6OworCQl9IGV2ZW50X3BvcnRfaW5mbzsKKwkJc3RydWN0IHsKKwkJCXU2NCBtb25pdG9yX2FkZHJlc3M7CisJCQl1NjQgcnN2ZHo7CisJCX0gbW9uaXRvcl9wb3J0X2luZm87CisJfTsKK307CisKK3N0cnVjdCBodl9jb25uZWN0aW9uX2luZm8geworCWVudW0gaHZfcG9ydF90eXBlIHBvcnRfdHlwZTsKKwl1MzIgcGFkZGluZzsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1NjQgcnN2ZHo7CisJCX0gbWVzc2FnZV9jb25uZWN0aW9uX2luZm87CisJCXN0cnVjdCB7CisJCQl1NjQgcnN2ZHo7CisJCX0gZXZlbnRfY29ubmVjdGlvbl9pbmZvOworCQlzdHJ1Y3QgeworCQkJdTY0IG1vbml0b3JfYWRkcmVzczsKKwkJfSBtb25pdG9yX2Nvbm5lY3Rpb25faW5mbzsKKwl9OworfTsKKworLyogRGVmaW5lIHN5bnRoZXRpYyBpbnRlcnJ1cHQgY29udHJvbGxlciBtZXNzYWdlIGZsYWdzLiAqLwordW5pb24gaHZfbWVzc2FnZV9mbGFncyB7CisJdTggYXN1ODsKKwlzdHJ1Y3QgeworCQl1OCBtc2dfcGVuZGluZzoxOworCQl1OCByZXNlcnZlZDo3OworCX07Cit9OworCisvKiBEZWZpbmUgc3ludGhldGljIGludGVycnVwdCBjb250cm9sbGVyIG1lc3NhZ2UgaGVhZGVyLiAqLworc3RydWN0IGh2X21lc3NhZ2VfaGVhZGVyIHsKKwllbnVtIGh2X21lc3NhZ2VfdHlwZSBtZXNzYWdlX3R5cGU7CisJdTggcGF5bG9hZF9zaXplOworCXVuaW9uIGh2X21lc3NhZ2VfZmxhZ3MgbWVzc2FnZV9mbGFnczsKKwl1OCByZXNlcnZlZFsyXTsKKwl1bmlvbiB7CisJCXU2NCBzZW5kZXI7CisJCXVuaW9uIGh2X3BvcnRfaWQgcG9ydDsKKwl9OworfTsKKworLyogRGVmaW5lIHRpbWVyIG1lc3NhZ2UgcGF5bG9hZCBzdHJ1Y3R1cmUuICovCitzdHJ1Y3QgaHZfdGltZXJfbWVzc2FnZV9wYXlsb2FkIHsKKwl1MzIgdGltZXJfaW5kZXg7CisJdTMyIHJlc2VydmVkOworCXU2NCBleHBpcmF0aW9uX3RpbWU7CS8qIFdoZW4gdGhlIHRpbWVyIGV4cGlyZWQgKi8KKwl1NjQgZGVsaXZlcnlfdGltZTsJLyogV2hlbiB0aGUgbWVzc2FnZSB3YXMgZGVsaXZlcmVkICovCit9OworCisvKiBEZWZpbmUgc3ludGhldGljIGludGVycnVwdCBjb250cm9sbGVyIG1lc3NhZ2UgZm9ybWF0LiAqLworc3RydWN0IGh2X21lc3NhZ2UgeworCXN0cnVjdCBodl9tZXNzYWdlX2hlYWRlciBoZWFkZXI7CisJdW5pb24geworCQl1NjQgcGF5bG9hZFtIVl9NRVNTQUdFX1BBWUxPQURfUVdPUkRfQ09VTlRdOworCX0gdSA7Cit9OworCisvKiBEZWZpbmUgdGhlIG51bWJlciBvZiBtZXNzYWdlIGJ1ZmZlcnMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggcG9ydC4gKi8KKyNkZWZpbmUgSFZfUE9SVF9NRVNTQUdFX0JVRkZFUl9DT1VOVAkoMTYpCisKKy8qIERlZmluZSB0aGUgc3ludGhldGljIGludGVycnVwdCBtZXNzYWdlIHBhZ2UgbGF5b3V0LiAqLworc3RydWN0IGh2X21lc3NhZ2VfcGFnZSB7CisJc3RydWN0IGh2X21lc3NhZ2Ugc2ludF9tZXNzYWdlW0hWX1NZTklDX1NJTlRfQ09VTlRdOworfTsKKworLyogRGVmaW5lIHRoZSBzeW50aGV0aWMgaW50ZXJydXB0IGNvbnRyb2xsZXIgZXZlbnQgZmxhZ3MgZm9ybWF0LiAqLwordW5pb24gaHZfc3luaWNfZXZlbnRfZmxhZ3MgeworCXU4IGZsYWdzOFtIVl9FVkVOVF9GTEFHU19CWVRFX0NPVU5UXTsKKwl1MzIgZmxhZ3MzMltIVl9FVkVOVF9GTEFHU19EV09SRF9DT1VOVF07Cit9OworCisvKiBEZWZpbmUgdGhlIHN5bnRoZXRpYyBpbnRlcnJ1cHQgZmxhZ3MgcGFnZSBsYXlvdXQuICovCitzdHJ1Y3QgaHZfc3luaWNfZXZlbnRfZmxhZ3NfcGFnZSB7CisJdW5pb24gaHZfc3luaWNfZXZlbnRfZmxhZ3Mgc2ludGV2ZW50X2ZsYWdzW0hWX1NZTklDX1NJTlRfQ09VTlRdOworfTsKKworLyogRGVmaW5lIFN5bklDIGNvbnRyb2wgcmVnaXN0ZXIuICovCit1bmlvbiBodl9zeW5pY19zY29udHJvbCB7CisJdTY0IGFzX3VpbnQ2NDsKKwlzdHJ1Y3QgeworCQl1NjQgZW5hYmxlOjE7CisJCXU2NCByZXNlcnZlZDo2MzsKKwl9OworfTsKKworLyogRGVmaW5lIHN5bnRoZXRpYyBpbnRlcnJ1cHQgc291cmNlLiAqLwordW5pb24gaHZfc3luaWNfc2ludCB7CisJdTY0IGFzX3VpbnQ2NDsKKwlzdHJ1Y3QgeworCQl1NjQgdmVjdG9yOjg7CisJCXU2NCByZXNlcnZlZDE6ODsKKwkJdTY0IG1hc2tlZDoxOworCQl1NjQgYXV0b19lb2k6MTsKKwkJdTY0IHJlc2VydmVkMjo0NjsKKwl9OworfTsKKworLyogRGVmaW5lIHRoZSBmb3JtYXQgb2YgdGhlIFNJTVAgcmVnaXN0ZXIgKi8KK3VuaW9uIGh2X3N5bmljX3NpbXAgeworCXU2NCBhc191aW50NjQ7CisJc3RydWN0IHsKKwkJdTY0IHNpbXBfZW5hYmxlZDoxOworCQl1NjQgcHJlc2VydmVkOjExOworCQl1NjQgYmFzZV9zaW1wX2dwYTo1MjsKKwl9OworfTsKKworLyogRGVmaW5lIHRoZSBmb3JtYXQgb2YgdGhlIFNJRUZQIHJlZ2lzdGVyICovCit1bmlvbiBodl9zeW5pY19zaWVmcCB7CisJdTY0IGFzX3VpbnQ2NDsKKwlzdHJ1Y3QgeworCQl1NjQgc2llZnBfZW5hYmxlZDoxOworCQl1NjQgcHJlc2VydmVkOjExOworCQl1NjQgYmFzZV9zaWVmcF9ncGE6NTI7CisJfTsKK307CisKKy8qIERlZmluaXRpb25zIGZvciB0aGUgbW9uaXRvcmVkIG5vdGlmaWNhdGlvbiBmYWNpbGl0eSAqLwordW5pb24gaHZfbW9uaXRvcl90cmlnZ2VyX2dyb3VwIHsKKwl1NjQgYXNfdWludDY0OworCXN0cnVjdCB7CisJCXUzMiBwZW5kaW5nOworCQl1MzIgYXJtZWQ7CisJfTsKK307CisKK3N0cnVjdCBodl9tb25pdG9yX3BhcmFtZXRlciB7CisJdW5pb24gaHZfY29ubmVjdGlvbl9pZCBjb25uZWN0aW9uaWQ7CisJdTE2IGZsYWdudW1iZXI7CisJdTE2IHJzdmR6OworfTsKKwordW5pb24gaHZfbW9uaXRvcl90cmlnZ2VyX3N0YXRlIHsKKwl1MzIgYXN1MzI7CisKKwlzdHJ1Y3QgeworCQl1MzIgZ3JvdXBfZW5hYmxlOjQ7CisJCXUzMiByc3ZkejoyODsKKwl9OworfTsKKworLyogc3RydWN0IGh2X21vbml0b3JfcGFnZSBMYXlvdXQgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogfCAwICAgfCBUcmlnZ2VyU3RhdGUgKDQgYnl0ZXMpIHwgUnN2ZDEgKDQgYnl0ZXMpICAgICB8ICovCisvKiB8IDggICB8IFRyaWdnZXJHcm91cFswXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKi8KKy8qIHwgMTAgIHwgVHJpZ2dlckdyb3VwWzFdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqLworLyogfCAxOCAgfCBUcmlnZ2VyR3JvdXBbMl0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICovCisvKiB8IDIwICB8IFRyaWdnZXJHcm91cFszXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKi8KKy8qIHwgMjggIHwgUnN2ZDJbMF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqLworLyogfCAzMCAgfCBSc3ZkMlsxXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICovCisvKiB8IDM4ICB8IFJzdmQyWzJdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKi8KKy8qIHwgNDAgIHwgTmV4dENoZWNrVGltZVswXVswXSAgICB8IE5leHRDaGVja1RpbWVbMF1bMV0gfCAqLworLyogfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICovCisvKiB8IDI0MCB8IExhdGVuY3lbMF1bMC4uM10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKi8KKy8qIHwgMzQwIHwgUnN2ejNbMF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqLworLyogfCA0NDAgfCBQYXJhbWV0ZXJbMF1bMF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICovCisvKiB8IDQ0OCB8IFBhcmFtZXRlclswXVsxXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKi8KKy8qIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqLworLyogfCA4NDAgfCBSc3ZkNFswXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3N0cnVjdCBodl9tb25pdG9yX3BhZ2UgeworCXVuaW9uIGh2X21vbml0b3JfdHJpZ2dlcl9zdGF0ZSB0cmlnZ2VyX3N0YXRlOworCXUzMiByc3ZkejE7CisKKwl1bmlvbiBodl9tb25pdG9yX3RyaWdnZXJfZ3JvdXAgdHJpZ2dlcl9ncm91cFs0XTsKKwl1NjQgcnN2ZHoyWzNdOworCisJczMyIG5leHRfY2hlY2t0aW1lWzRdWzMyXTsKKworCXUxNiBsYXRlbmN5WzRdWzMyXTsKKwl1NjQgcnN2ZHozWzMyXTsKKworCXN0cnVjdCBodl9tb25pdG9yX3BhcmFtZXRlciBwYXJhbWV0ZXJbNF1bMzJdOworCisJdTggcnN2ZHo0WzE5ODRdOworfTsKKworLyogRGVjbGFyZSB0aGUgdmFyaW91cyBoeXBlcmNhbGwgb3BlcmF0aW9ucy4gKi8KK2VudW0gaHZfY2FsbF9jb2RlIHsKKwlIVkNBTExfUE9TVF9NRVNTQUdFCT0gMHgwMDVjLAorCUhWQ0FMTF9TSUdOQUxfRVZFTlQJPSAweDAwNWQsCit9OworCisvKiBEZWZpbml0aW9uIG9mIHRoZSBodl9wb3N0X21lc3NhZ2UgaHlwZXJjYWxsIGlucHV0IHN0cnVjdHVyZS4gKi8KK3N0cnVjdCBodl9pbnB1dF9wb3N0X21lc3NhZ2UgeworCXVuaW9uIGh2X2Nvbm5lY3Rpb25faWQgY29ubmVjdGlvbmlkOworCXUzMiByZXNlcnZlZDsKKwllbnVtIGh2X21lc3NhZ2VfdHlwZSBtZXNzYWdlX3R5cGU7CisJdTMyIHBheWxvYWRfc2l6ZTsKKwl1NjQgcGF5bG9hZFtIVl9NRVNTQUdFX1BBWUxPQURfUVdPUkRfQ09VTlRdOworfTsKKworLyogRGVmaW5pdGlvbiBvZiB0aGUgaHZfc2lnbmFsX2V2ZW50IGh5cGVyY2FsbCBpbnB1dCBzdHJ1Y3R1cmUuICovCitzdHJ1Y3QgaHZfaW5wdXRfc2lnbmFsX2V2ZW50IHsKKwl1bmlvbiBodl9jb25uZWN0aW9uX2lkIGNvbm5lY3Rpb25pZDsKKwl1MTYgZmxhZ19udW1iZXI7CisJdTE2IHJzdmR6OworfTsKKworLyoKKyAqIFZlcnNpb25pbmcgZGVmaW5pdGlvbnMgdXNlZCBmb3IgZ3Vlc3RzIHJlcG9ydGluZyB0aGVtc2VsdmVzIHRvIHRoZQorICogaHlwZXJ2aXNvciwgYW5kIHZpc2EgdmVyc2EuCisgKi8KKworLyogVmVyc2lvbiBpbmZvIHJlcG9ydGVkIGJ5IGd1ZXN0IE9TJ3MgKi8KK2VudW0gaHZfZ3Vlc3Rfb3NfdmVuZG9yIHsKKwlIVkdVRVNUT1NfVkVORE9SX01JQ1JPU09GVAk9IDB4MDAwMQorfTsKKworZW51bSBodl9ndWVzdF9vc19taWNyb3NvZnRfaWRzIHsKKwlIVkdVRVNUT1NfTUlDUk9TT0ZUX1VOREVGSU5FRAk9IDB4MDAsCisJSFZHVUVTVE9TX01JQ1JPU09GVF9NU0RPUwkJPSAweDAxLAorCUhWR1VFU1RPU19NSUNST1NPRlRfV0lORE9XUzNYCT0gMHgwMiwKKwlIVkdVRVNUT1NfTUlDUk9TT0ZUX1dJTkRPV1M5WAk9IDB4MDMsCisJSFZHVUVTVE9TX01JQ1JPU09GVF9XSU5ET1dTTlQJPSAweDA0LAorCUhWR1VFU1RPU19NSUNST1NPRlRfV0lORE9XU0NFCT0gMHgwNQorfTsKKworLyoKKyAqIERlY2xhcmUgdGhlIE1TUiB1c2VkIHRvIGlkZW50aWZ5IHRoZSBndWVzdCBPUy4KKyAqLworI2RlZmluZSBIVl9YNjRfTVNSX0dVRVNUX09TX0lECTB4NDAwMDAwMDAKKwordW5pb24gaHZfeDY0X21zcl9ndWVzdF9vc19pZF9jb250ZW50cyB7CisJdTY0IGFzX3VpbnQ2NDsKKwlzdHJ1Y3QgeworCQl1NjQgYnVpbGRfbnVtYmVyOjE2OworCQl1NjQgc2VydmljZV92ZXJzaW9uOjg7IC8qIFNlcnZpY2UgUGFjaywgZXRjLiAqLworCQl1NjQgbWlub3JfdmVyc2lvbjo4OworCQl1NjQgbWFqb3JfdmVyc2lvbjo4OworCQl1NjQgb3NfaWQ6ODsgLyogZW51bSBodl9ndWVzdF9vc19taWNyb3NvZnRfaWRzIChpZiBWZW5kb3I9TVMpICovCisJCXU2NCB2ZW5kb3JfaWQ6MTY7IC8qIGVudW0gaHZfZ3Vlc3Rfb3NfdmVuZG9yICovCisJfTsKK307CisKKy8qCisgKiBEZWNsYXJlIHRoZSBNU1IgdXNlZCB0byBzZXR1cCBwYWdlcyB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGh5cGVydmlzb3IuCisgKi8KKyNkZWZpbmUgSFZfWDY0X01TUl9IWVBFUkNBTEwJMHg0MDAwMDAwMQorCit1bmlvbiBodl94NjRfbXNyX2h5cGVyY2FsbF9jb250ZW50cyB7CisJdTY0IGFzX3VpbnQ2NDsKKwlzdHJ1Y3QgeworCQl1NjQgZW5hYmxlOjE7CisJCXU2NCByZXNlcnZlZDoxMTsKKwkJdTY0IGd1ZXN0X3BoeXNpY2FsX2FkZHJlc3M6NTI7CisJfTsKK307CisKKworZW51bSB7CisJVk1CVVNfTUVTU0FHRV9DT05ORUNUSU9OX0lECT0gMSwKKwlWTUJVU19NRVNTQUdFX1BPUlRfSUQJCT0gMSwKKwlWTUJVU19FVkVOVF9DT05ORUNUSU9OX0lECT0gMiwKKwlWTUJVU19FVkVOVF9QT1JUX0lECQk9IDIsCisJVk1CVVNfTU9OSVRPUl9DT05ORUNUSU9OX0lECT0gMywKKwlWTUJVU19NT05JVE9SX1BPUlRfSUQJCT0gMywKKwlWTUJVU19NRVNTQUdFX1NJTlQJCT0gMiwKK307CisKKy8qICNkZWZpbmVzICovCisKKyNkZWZpbmUgSFZfUFJFU0VOVF9CSVQJCQkweDgwMDAwMDAwCisKKyNkZWZpbmUgSFZfTElOVVhfR1VFU1RfSURfTE8JCTB4MDAwMDAwMDAKKyNkZWZpbmUgSFZfTElOVVhfR1VFU1RfSURfSEkJCTB4QjE2QjAwQjUKKyNkZWZpbmUgSFZfTElOVVhfR1VFU1RfSUQJCSgoKHU2NClIVl9MSU5VWF9HVUVTVF9JRF9ISSA8PCAzMikgfCBcCisJCQkJCSAgIEhWX0xJTlVYX0dVRVNUX0lEX0xPKQorCisjZGVmaW5lIEhWX0NQVV9QT1dFUl9NQU5BR0VNRU5UCQkoMSA8PCAwKQorI2RlZmluZSBIVl9SRUNPTU1FTkRBVElPTlNfTUFYCQk0CisKKyNkZWZpbmUgSFZfWDY0X01BWAkJCTUKKyNkZWZpbmUgSFZfQ0FQU19NQVgJCQk4CisKKworI2RlZmluZSBIVl9IWVBFUkNBTExfUEFSQU1fQUxJR04Jc2l6ZW9mKHU2NCkKKworCisvKiBTZXJ2aWNlIGRlZmluaXRpb25zICovCisKKyNkZWZpbmUgSFZfU0VSVklDRV9QQVJFTlRfUE9SVAkJCQkoMCkKKyNkZWZpbmUgSFZfU0VSVklDRV9QQVJFTlRfQ09OTkVDVElPTgkJCSgwKQorCisjZGVmaW5lIEhWX1NFUlZJQ0VfQ09OTkVDVF9SRVNQT05TRV9TVUNDRVNTCQkoMCkKKyNkZWZpbmUgSFZfU0VSVklDRV9DT05ORUNUX1JFU1BPTlNFX0lOVkFMSURfUEFSQU1FVEVSCSgxKQorI2RlZmluZSBIVl9TRVJWSUNFX0NPTk5FQ1RfUkVTUE9OU0VfVU5LTk9XTl9TRVJWSUNFCSgyKQorI2RlZmluZSBIVl9TRVJWSUNFX0NPTk5FQ1RfUkVTUE9OU0VfQ09OTkVDVElPTl9SRUpFQ1RFRAkoMykKKworI2RlZmluZSBIVl9TRVJWSUNFX0NPTk5FQ1RfUkVRVUVTVF9NRVNTQUdFX0lECQkoMSkKKyNkZWZpbmUgSFZfU0VSVklDRV9DT05ORUNUX1JFU1BPTlNFX01FU1NBR0VfSUQJCSgyKQorI2RlZmluZSBIVl9TRVJWSUNFX0RJU0NPTk5FQ1RfUkVRVUVTVF9NRVNTQUdFX0lECSgzKQorI2RlZmluZSBIVl9TRVJWSUNFX0RJU0NPTk5FQ1RfUkVTUE9OU0VfTUVTU0FHRV9JRAkoNCkKKyNkZWZpbmUgSFZfU0VSVklDRV9NQVhfTUVTU0FHRV9JRAkJCQkoNCkKKworI2RlZmluZSBIVl9TRVJWSUNFX1BST1RPQ09MX1ZFUlNJT04gKDB4MDAxMCkKKyNkZWZpbmUgSFZfQ09OTkVDVF9QQVlMT0FEX0JZVEVfQ09VTlQgNjQKKworLyogI2RlZmluZSBWTUJVU19SRVZJU0lPTl9OVU1CRVIJNiAqLworCisvKiBPdXIgbG9jYWwgdm1idXMncyBwb3J0IGFuZCBjb25uZWN0aW9uIGlkLiBBbnl0aGluZyA+MCBpcyBmaW5lICovCisvKiAjZGVmaW5lIFZNQlVTX1BPUlRfSUQJCTExICovCisKKy8qIDYyODE4MEI4LTMwOEQtNGM1ZS1CN0RCLTFCRUI2MkU2MkVGNCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBodl9ndWlkIFZNQlVTX1NFUlZJQ0VfSUQgPSB7CisJLmRhdGEgPSB7CisJCTB4YjgsIDB4ODAsIDB4ODEsIDB4NjIsIDB4OGQsIDB4MzAsIDB4NWUsIDB4NGMsCisJCTB4YjcsIDB4ZGIsIDB4MWIsIDB4ZWIsIDB4NjIsIDB4ZTYsIDB4MmUsIDB4ZjQKKwl9LAorfTsKKworI2RlZmluZSBNQVhfTlVNX0NQVVMJMzIKKworCitzdHJ1Y3QgaHZfaW5wdXRfc2lnbmFsX2V2ZW50X2J1ZmZlciB7CisJdTY0IGFsaWduODsKKwlzdHJ1Y3QgaHZfaW5wdXRfc2lnbmFsX2V2ZW50IGV2ZW50OworfTsKKworc3RydWN0IGh2X2NvbnRleHQgeworCS8qIFdlIG9ubHkgc3VwcG9ydCBydW5uaW5nIG9uIHRvcCBvZiBIeXBlci1WCisJKiBTbyBhdCB0aGlzIHBvaW50IHRoaXMgcmVhbGx5IGNhbiBvbmx5IGNvbnRhaW4gdGhlIEh5cGVyLVYgSUQKKwkqLworCXU2NCBndWVzdGlkOworCisJdm9pZCAqaHlwZXJjYWxsX3BhZ2U7CisKKwlib29sIHN5bmljX2luaXRpYWxpemVkOworCisJLyoKKwkgKiBUaGlzIGlzIHVzZWQgYXMgYW4gaW5wdXQgcGFyYW0gdG8gSHZDYWxsU2lnbmFsRXZlbnQgaHlwZXJjYWxsLiBUaGUKKwkgKiBpbnB1dCBwYXJhbSBpcyBpbW11dGFibGUgaW4gb3VyIHVzYWdlIGFuZCBtdXN0IGJlIGR5bmFtaWMgbWVtICh2cworCSAqIHN0YWNrIG9yIGdsb2JhbCkuICovCisJc3RydWN0IGh2X2lucHV0X3NpZ25hbF9ldmVudF9idWZmZXIgKnNpZ25hbF9ldmVudF9idWZmZXI7CisJLyogOC1ieXRlcyBhbGlnbmVkIG9mIHRoZSBidWZmZXIgYWJvdmUgKi8KKwlzdHJ1Y3QgaHZfaW5wdXRfc2lnbmFsX2V2ZW50ICpzaWduYWxfZXZlbnRfcGFyYW07CisKKwl2b2lkICpzeW5pY19tZXNzYWdlX3BhZ2VbTUFYX05VTV9DUFVTXTsKKwl2b2lkICpzeW5pY19ldmVudF9wYWdlW01BWF9OVU1fQ1BVU107Cit9OworCitleHRlcm4gc3RydWN0IGh2X2NvbnRleHQgaHZfY29udGV4dDsKKworCisvKiBIdiBJbnRlcmZhY2UgKi8KKworZXh0ZXJuIGludCBodl9pbml0KHZvaWQpOworCitleHRlcm4gdm9pZCBodl9jbGVhbnVwKHZvaWQpOworCitleHRlcm4gdTE2IGh2X3Bvc3RfbWVzc2FnZSh1bmlvbiBodl9jb25uZWN0aW9uX2lkIGNvbm5lY3Rpb25faWQsCisJCQkgZW51bSBodl9tZXNzYWdlX3R5cGUgbWVzc2FnZV90eXBlLAorCQkJIHZvaWQgKnBheWxvYWQsIHNpemVfdCBwYXlsb2FkX3NpemUpOworCitleHRlcm4gdTE2IGh2X3NpZ25hbF9ldmVudCh2b2lkKTsKKworZXh0ZXJuIHZvaWQgaHZfc3luaWNfaW5pdCh2b2lkICppcnFhcmcpOworCitleHRlcm4gdm9pZCBodl9zeW5pY19jbGVhbnVwKHZvaWQgKmFyZyk7CisKKworLyogSW50ZXJmYWNlICovCisKKworaW50IGh2X3JpbmdidWZmZXJfaW5pdChzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqcmluZ19pbmZvLCB2b2lkICpidWZmZXIsCisJCSAgIHUzMiBidWZsZW4pOworCit2b2lkIGh2X3JpbmdidWZmZXJfY2xlYW51cChzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqcmluZ19pbmZvKTsKKworaW50IGh2X3JpbmdidWZmZXJfd3JpdGUoc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKnJpbmdfaW5mbywKKwkJICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAorCQkgICAgdTMyIHNnY291bnQpOworCitpbnQgaHZfcmluZ2J1ZmZlcl9wZWVrKHN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvICpyaW5nX2luZm8sIHZvaWQgKmJ1ZmZlciwKKwkJICAgdTMyIGJ1Zmxlbik7CisKK2ludCBodl9yaW5nYnVmZmVyX3JlYWQoc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKnJpbmdfaW5mbywKKwkJICAgdm9pZCAqYnVmZmVyLAorCQkgICB1MzIgYnVmbGVuLAorCQkgICB1MzIgb2Zmc2V0KTsKKwordTMyIGh2X2dldF9yaW5nYnVmZmVyX2ludGVycnVwdF9tYXNrKHN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvICpyaW5nX2luZm8pOworCit2b2lkIGh2X2R1bXBfcmluZ19pbmZvKHN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvICpyaW5nX2luZm8sIGNoYXIgKnByZWZpeCk7CisKK3ZvaWQgaHZfcmluZ2J1ZmZlcl9nZXRfZGVidWdpbmZvKHN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvICpyaW5nX2luZm8sCisJCQkgICAgc3RydWN0IGh2X3JpbmdfYnVmZmVyX2RlYnVnX2luZm8gKmRlYnVnX2luZm8pOworCisvKgorICogTWF4aW11bSBjaGFubmVscyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBzaXplIG9mIHRoZSBpbnRlcnJ1cHQgcGFnZQorICogd2hpY2ggaXMgUEFHRV9TSVpFLiAxLzIgb2YgUEFHRV9TSVpFIGlzIGZvciBzZW5kIGVuZHBvaW50IGludGVycnVwdAorICogYW5kIHRoZSBvdGhlciBpcyByZWNlaXZlIGVuZHBvaW50IGludGVycnVwdAorICovCisjZGVmaW5lIE1BWF9OVU1fQ0hBTk5FTFMJKChQQUdFX1NJWkUgPj4gMSkgPDwgMykJLyogMTYzNDggY2hhbm5lbHMgKi8KKworLyogVGhlIHZhbHVlIGhlcmUgbXVzdCBiZSBpbiBtdWx0aXBsZSBvZiAzMiAqLworLyogVE9ETzogTmVlZCB0byBtYWtlIHRoaXMgY29uZmlndXJhYmxlICovCisjZGVmaW5lIE1BWF9OVU1fQ0hBTk5FTFNfU1VQUE9SVEVECTI1NgorCisKK2VudW0gdm1idXNfY29ubmVjdF9zdGF0ZSB7CisJRElTQ09OTkVDVEVELAorCUNPTk5FQ1RJTkcsCisJQ09OTkVDVEVELAorCURJU0NPTk5FQ1RJTkcKK307CisKKyNkZWZpbmUgTUFYX1NJWkVfQ0hBTk5FTF9NRVNTQUdFCUhWX01FU1NBR0VfUEFZTE9BRF9CWVRFX0NPVU5UCisKK3N0cnVjdCB2bWJ1c19jb25uZWN0aW9uIHsKKwllbnVtIHZtYnVzX2Nvbm5lY3Rfc3RhdGUgY29ubl9zdGF0ZTsKKworCWF0b21pY190IG5leHRfZ3BhZGxfaGFuZGxlOworCisJLyoKKwkgKiBSZXByZXNlbnRzIGNoYW5uZWwgaW50ZXJydXB0cy4gRWFjaCBiaXQgcG9zaXRpb24gcmVwcmVzZW50cyBhCisJICogY2hhbm5lbC4gIFdoZW4gYSBjaGFubmVsIHNlbmRzIGFuIGludGVycnVwdCB2aWEgVk1CVVMsIGl0IGZpbmRzIGl0cworCSAqIGJpdCBpbiB0aGUgc2VuZEludGVycnVwdFBhZ2UsIHNldCBpdCBhbmQgY2FsbHMgSHYgdG8gZ2VuZXJhdGUgYSBwb3J0CisJICogZXZlbnQuIFRoZSBvdGhlciBlbmQgcmVjZWl2ZXMgdGhlIHBvcnQgZXZlbnQgYW5kIHBhcnNlIHRoZQorCSAqIHJlY3ZJbnRlcnJ1cHRQYWdlIHRvIHNlZSB3aGljaCBiaXQgaXMgc2V0CisJICovCisJdm9pZCAqaW50X3BhZ2U7CisJdm9pZCAqc2VuZF9pbnRfcGFnZTsKKwl2b2lkICpyZWN2X2ludF9wYWdlOworCisJLyoKKwkgKiAyIHBhZ2VzIC0gMXN0IHBhZ2UgZm9yIHBhcmVudC0+Y2hpbGQgbm90aWZpY2F0aW9uIGFuZCAybmQKKwkgKiBpcyBjaGlsZC0+cGFyZW50IG5vdGlmaWNhdGlvbgorCSAqLworCXZvaWQgKm1vbml0b3JfcGFnZXM7CisJc3RydWN0IGxpc3RfaGVhZCBjaG5fbXNnX2xpc3Q7CisJc3BpbmxvY2tfdCBjaGFubmVsbXNnX2xvY2s7CisKKwkvKiBMaXN0IG9mIGNoYW5uZWxzICovCisJc3RydWN0IGxpc3RfaGVhZCBjaG5fbGlzdDsKKwlzcGlubG9ja190IGNoYW5uZWxfbG9jazsKKworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrX3F1ZXVlOworfTsKKworCitzdHJ1Y3Qgdm1idXNfbXNnaW5mbyB7CisJLyogQm9va2tlZXBpbmcgc3R1ZmYgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIG1zZ2xpc3RfZW50cnk7CisKKwkvKiBUaGUgbWVzc2FnZSBpdHNlbGYgKi8KKwl1bnNpZ25lZCBjaGFyIG1zZ1swXTsKK307CisKKworZXh0ZXJuIHN0cnVjdCB2bWJ1c19jb25uZWN0aW9uIHZtYnVzX2Nvbm5lY3Rpb247CisKKy8qIEdlbmVyYWwgdm1idXMgaW50ZXJmYWNlICovCisKK3N0cnVjdCBodl9kZXZpY2UgKnZtYnVzX2NoaWxkX2RldmljZV9jcmVhdGUoc3RydWN0IGh2X2d1aWQgKnR5cGUsCisJCQkJCSBzdHJ1Y3QgaHZfZ3VpZCAqaW5zdGFuY2UsCisJCQkJCSBzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCk7CisKK2ludCB2bWJ1c19jaGlsZF9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGh2X2RldmljZSAqY2hpbGRfZGV2aWNlX29iaik7Cit2b2lkIHZtYnVzX2NoaWxkX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZV9vYmopOworCisvKiBzdGF0aWMgdm9pZCAqLworLyogVm1idXNDaGlsZERldmljZURlc3Ryb3koICovCisvKiBzdHJ1Y3QgaHZfZGV2aWNlICopOyAqLworCitzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqcmVsaWQyY2hhbm5lbCh1MzIgcmVsaWQpOworCisKKy8qIENvbm5lY3Rpb24gaW50ZXJmYWNlICovCisKK2ludCB2bWJ1c19jb25uZWN0KHZvaWQpOworCitpbnQgdm1idXNfZGlzY29ubmVjdCh2b2lkKTsKKworaW50IHZtYnVzX3Bvc3RfbXNnKHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGJ1Zmxlbik7CisKK2ludCB2bWJ1c19zZXRfZXZlbnQodTMyIGNoaWxkX3JlbGlkKTsKKwordm9pZCB2bWJ1c19vbl9ldmVudCh1bnNpZ25lZCBsb25nIGRhdGEpOworCisKKyNlbmRpZiAvKiBfSFlQRVJWX1ZNQlVTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9sb2dnaW5nLmggYi9kcml2ZXJzL3N0YWdpbmcvaHYvbG9nZ2luZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzk5OTUxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9sb2dnaW5nLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwOSwgTWljcm9zb2Z0IENvcnBvcmF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAotICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi0gKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlCi0gKiBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KLSAqCi0gKiBBdXRob3JzOgotICogICBIYWl5YW5nIFpoYW5nIDxoYWl5YW5nekBtaWNyb3NvZnQuY29tPgotICogICBIYW5rIEphbnNzZW4gIDxoamFuc3NlbkBtaWNyb3NvZnQuY29tPgotICoKLSAqLwotCi0KLSNpZm5kZWYgX0xPR0dJTkdfSF8KLSNkZWZpbmUgX0xPR0dJTkdfSF8KLQotI2RlZmluZSBMT1dPUkQoZHcpICgodW5zaWduZWQgc2hvcnQpKGR3KSkKLSNkZWZpbmUgSElXT1JEKGR3KSAoKHVuc2lnbmVkIHNob3J0KSgoKHVuc2lnbmVkIGludCkgKGR3KSA+PiAxNikgJiAweEZGRkYpKQotCi0vKiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPiAqLwotLyogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPiAqLwotCi0KLSNkZWZpbmUgVk1CVVMJCQkJMHgwMDAxCi0jZGVmaW5lIFNUT1JWU0MJCQkJMHgwMDAyCi0jZGVmaW5lIE5FVFZTQwkJCQkweDAwMDQKLSNkZWZpbmUgSU5QVVRWU0MJCQkweDAwMDgKLSNkZWZpbmUgQkxLVlNDCQkJCTB4MDAxMAotI2RlZmluZSBWTUJVU19EUlYJCQkweDAxMDAKLSNkZWZpbmUgU1RPUlZTQ19EUlYJCQkweDAyMDAKLSNkZWZpbmUgTkVUVlNDX0RSVgkJCTB4MDQwMAotI2RlZmluZSBJTlBVVFZTQ19EUlYJCTB4MDgwMAotI2RlZmluZSBCTEtWU0NfRFJWCQkJMHgxMDAwCi0KLSNkZWZpbmUgQUxMX01PRFVMRVMJCQkoVk1CVVMJCXxcCi0JCQkJCQkJU1RPUlZTQwkJfFwKLQkJCQkJCQlORVRWU0MJCXxcCi0JCQkJCQkJSU5QVVRWU0MJfFwKLQkJCQkJCQlCTEtWU0MJCXxcCi0JCQkJCQkJVk1CVVNfRFJWCXxcCi0JCQkJCQkJU1RPUlZTQ19EUlYJfFwKLQkJCQkJCQlORVRWU0NfRFJWCXxcCi0JCQkJCQkJSU5QVVRWU0NfRFJWfFwKLQkJCQkJCQlCTEtWU0NfRFJWKQotCi0vKiBMb2dnaW5nIExldmVsICovCi0jZGVmaW5lIEVSUk9SX0xWTAkJCQkzCi0jZGVmaW5lIFdBUk5JTkdfTFZMCQkJCTQKLSNkZWZpbmUgSU5GT19MVkwJCQkJNgotI2RlZmluZSBERUJVR19MVkwJCQkJNwotI2RlZmluZSBERUJVR19MVkxfRU5URVJFWElUCQkJOAotI2RlZmluZSBERUJVR19SSU5HX0xWTAkJCQk5Ci0KLWV4dGVybiB1bnNpZ25lZCBpbnQgdm1idXNfbG9nbGV2ZWw7Ci0KLSNkZWZpbmUgRFBSSU5UKG1vZCwgbHZsLCBmbXQsIGFyZ3MuLi4pIGRvIHtcCi0JaWYgKChtb2QgJiAoSElXT1JEKHZtYnVzX2xvZ2xldmVsKSkpICYmCVwKLQkgICAgKGx2bCA8PSBMT1dPUkQodm1idXNfbG9nbGV2ZWwpKSkJXAotCQlwcmludGsoS0VSTl9ERUJVRyAjbW9kIjogJXMoKSAiIGZtdCAiXG4iLCBfX2Z1bmNfXywgIyMgYXJncyk7XAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgRFBSSU5UX0RCRyhtb2QsIGZtdCwgYXJncy4uLikgZG8ge1wKLQlpZiAoKG1vZCAmIChISVdPUkQodm1idXNfbG9nbGV2ZWwpKSkgJiYJCVwKLQkgICAgKERFQlVHX0xWTCA8PSBMT1dPUkQodm1idXNfbG9nbGV2ZWwpKSkJXAotCQlwcmludGsoS0VSTl9ERUJVRyAjbW9kIjogJXMoKSAiIGZtdCAiXG4iLCBfX2Z1bmNfXywgIyMgYXJncyk7XAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgRFBSSU5UX0lORk8obW9kLCBmbXQsIGFyZ3MuLi4pIGRvIHtcCi0JaWYgKChtb2QgJiAoSElXT1JEKHZtYnVzX2xvZ2xldmVsKSkpICYmCQlcCi0JICAgIChJTkZPX0xWTCA8PSBMT1dPUkQodm1idXNfbG9nbGV2ZWwpKSkJXAotCQlwcmludGsoS0VSTl9JTkZPICNtb2QiOiAiIGZtdCAiXG4iLCAjIyBhcmdzKTtcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBEUFJJTlRfV0FSTihtb2QsIGZtdCwgYXJncy4uLikgZG8ge1wKLQlpZiAoKG1vZCAmIChISVdPUkQodm1idXNfbG9nbGV2ZWwpKSkgJiYJCVwKLQkgICAgKFdBUk5JTkdfTFZMIDw9IExPV09SRCh2bWJ1c19sb2dsZXZlbCkpKQlcCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgI21vZCI6IFdBUk5JTkchICIgZm10ICJcbiIsICMjIGFyZ3MpO1wKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIERQUklOVF9FUlIobW9kLCBmbXQsIGFyZ3MuLi4pIGRvIHtcCi0JaWYgKChtb2QgJiAoSElXT1JEKHZtYnVzX2xvZ2xldmVsKSkpICYmCQlcCi0JICAgIChFUlJPUl9MVkwgPD0gTE9XT1JEKHZtYnVzX2xvZ2xldmVsKSkpCVwKLQkJcHJpbnRrKEtFUk5fRVJSICNtb2QiOiAlcygpIEVSUk9SISEgIiBmbXQgIlxuIiwJXAotCQkgICAgICAgX19mdW5jX18sICMjIGFyZ3MpO1wKLQl9IHdoaWxlICgwKQotCi0jZW5kaWYgLyogX0xPR0dJTkdfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2MuYwppbmRleCAyMGIxNTk3Ny4uNDFjYmIyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L25ldHZzYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2MuYwpAQCAtMTgsNiArMTgsOCBAQAogICogICBIYWl5YW5nIFpoYW5nIDxoYWl5YW5nekBtaWNyb3NvZnQuY29tPgogICogICBIYW5rIEphbnNzZW4gIDxoamFuc3NlbkBtaWNyb3NvZnQuY29tPgogICovCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KQEAgLTI1LDExICsyNyw5IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlICJodl9hcGkuaCIKLSNpbmNsdWRlICJsb2dnaW5nLmgiCi0jaW5jbHVkZSAibmV0dnNjLmgiCi0jaW5jbHVkZSAicm5kaXNfZmlsdGVyLmgiCi0jaW5jbHVkZSAiY2hhbm5lbC5oIgorCisjaW5jbHVkZSAiaHlwZXJ2LmgiCisjaW5jbHVkZSAiaHlwZXJ2X25ldC5oIgogCiAKIC8qIEdsb2JhbHMgKi8KQEAgLTQzLDM4ICs0Myw2IEBACiAJfQogfTsKIAotc3RhdGljIGludCBuZXR2c2NfZGV2aWNlX2FkZChzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsIHZvaWQgKmFkZGl0aW9uYWxfaW5mbyk7Ci0KLXN0YXRpYyBpbnQgbmV0dnNjX2RldmljZV9yZW1vdmUoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlKTsKLQotc3RhdGljIHZvaWQgbmV0dnNjX2NsZWFudXAoc3RydWN0IGh2X2RyaXZlciAqZHJpdmVyKTsKLQotc3RhdGljIHZvaWQgbmV0dnNjX2NoYW5uZWxfY2Iodm9pZCAqY29udGV4dCk7Ci0KLXN0YXRpYyBpbnQgbmV0dnNjX2luaXRfc2VuZF9idWYoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlKTsKLQotc3RhdGljIGludCBuZXR2c2NfaW5pdF9yZWN2X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UpOwotCi1zdGF0aWMgaW50IG5ldHZzY19kZXN0cm95X3NlbmRfYnVmKHN0cnVjdCBuZXR2c2NfZGV2aWNlICpuZXRfZGV2aWNlKTsKLQotc3RhdGljIGludCBuZXR2c2NfZGVzdHJveV9yZWN2X2J1ZihzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0X2RldmljZSk7Ci0KLXN0YXRpYyBpbnQgbmV0dnNjX2Nvbm5lY3RfdnNwKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSk7Ci0KLXN0YXRpYyB2b2lkIG5ldHZzY19zZW5kX2NvbXBsZXRpb24oc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLAotCQkJCSAgIHN0cnVjdCB2bXBhY2tldF9kZXNjcmlwdG9yICpwYWNrZXQpOwotCi1zdGF0aWMgaW50IG5ldHZzY19zZW5kKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSwKLQkJCXN0cnVjdCBodl9uZXR2c2NfcGFja2V0ICpwYWNrZXQpOwotCi1zdGF0aWMgdm9pZCBuZXR2c2NfcmVjZWl2ZShzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsCi0JCQkgICAgc3RydWN0IHZtcGFja2V0X2Rlc2NyaXB0b3IgKnBhY2tldCk7Ci0KLXN0YXRpYyB2b2lkIG5ldHZzY19yZWNlaXZlX2NvbXBsZXRpb24odm9pZCAqY29udGV4dCk7Ci0KLXN0YXRpYyB2b2lkIG5ldHZzY19zZW5kX3JlY3ZfY29tcGxldGlvbihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsCi0JCQkJCXU2NCB0cmFuc2FjdGlvbl9pZCk7Ci0KIAogc3RhdGljIHN0cnVjdCBuZXR2c2NfZGV2aWNlICphbGxvY19uZXRfZGV2aWNlKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSkKIHsKQEAgLTE3MSw0MyArMTM5LDg1IEBACiAJcmV0dXJuIG5ldF9kZXZpY2U7CiB9CiAKLS8qCi0gKiBuZXR2c2NfaW5pdGlhbGl6ZSAtIE1haW4gZW50cnkgcG9pbnQKLSAqLwotaW50IG5ldHZzY19pbml0aWFsaXplKHN0cnVjdCBodl9kcml2ZXIgKmRydikKK3N0YXRpYyBpbnQgbmV0dnNjX2Rlc3Ryb3lfcmVjdl9idWYoc3RydWN0IG5ldHZzY19kZXZpY2UgKm5ldF9kZXZpY2UpCiB7Ci0Jc3RydWN0IG5ldHZzY19kcml2ZXIgKmRyaXZlciA9IChzdHJ1Y3QgbmV0dnNjX2RyaXZlciAqKWRydjsKKwlzdHJ1Y3QgbnZzcF9tZXNzYWdlICpyZXZva2VfcGFja2V0OworCWludCByZXQgPSAwOwogCi0JRFBSSU5UX0RCRyhORVRWU0MsICJzaXplb2Yoc3RydWN0IGh2X25ldHZzY19wYWNrZXQpPSV6ZCwgIgotCQkgICAic2l6ZW9mKHN0cnVjdCBudnNwX21lc3NhZ2UpPSV6ZCwgIgotCQkgICAic2l6ZW9mKHN0cnVjdCB2bXRyYW5zZmVyX3BhZ2VfcGFja2V0X2hlYWRlcik9JXpkIiwKLQkJICAgc2l6ZW9mKHN0cnVjdCBodl9uZXR2c2NfcGFja2V0KSwKLQkJICAgc2l6ZW9mKHN0cnVjdCBudnNwX21lc3NhZ2UpLAotCQkgICBzaXplb2Yoc3RydWN0IHZtdHJhbnNmZXJfcGFnZV9wYWNrZXRfaGVhZGVyKSk7CisJLyoKKwkgKiBJZiB3ZSBnb3QgYSBzZWN0aW9uIGNvdW50LCBpdCBtZWFucyB3ZSByZWNlaXZlZCBhCisJICogU2VuZFJlY2VpdmVCdWZmZXJDb21wbGV0ZSBtc2cgKGllIHNlbnQKKwkgKiBOdnNwTWVzc2FnZTFUeXBlU2VuZFJlY2VpdmVCdWZmZXIgbXNnKSB0aGVyZWZvcmUsIHdlIG5lZWQKKwkgKiB0byBzZW5kIGEgcmV2b2tlIG1zZyBoZXJlCisJICovCisJaWYgKG5ldF9kZXZpY2UtPnJlY3Zfc2VjdGlvbl9jbnQpIHsKKwkJLyogU2VuZCB0aGUgcmV2b2tlIHJlY2VpdmUgYnVmZmVyICovCisJCXJldm9rZV9wYWNrZXQgPSAmbmV0X2RldmljZS0+cmV2b2tlX3BhY2tldDsKKwkJbWVtc2V0KHJldm9rZV9wYWNrZXQsIDAsIHNpemVvZihzdHJ1Y3QgbnZzcF9tZXNzYWdlKSk7CiAKLQlkcnYtPm5hbWUgPSBkcml2ZXJfbmFtZTsKLQltZW1jcHkoJmRydi0+ZGV2X3R5cGUsICZuZXR2c2NfZGV2aWNlX3R5cGUsIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOworCQlyZXZva2VfcGFja2V0LT5oZHIubXNnX3R5cGUgPQorCQkJTlZTUF9NU0cxX1RZUEVfUkVWT0tFX1JFQ1ZfQlVGOworCQlyZXZva2VfcGFja2V0LT5tc2cudjFfbXNnLgorCQlyZXZva2VfcmVjdl9idWYuaWQgPSBORVRWU0NfUkVDRUlWRV9CVUZGRVJfSUQ7CiAKLQkvKiBTZXR1cCB0aGUgZGlzcGF0Y2ggdGFibGUgKi8KLQlkcml2ZXItPmJhc2UuZGV2X2FkZAk9IG5ldHZzY19kZXZpY2VfYWRkOwotCWRyaXZlci0+YmFzZS5kZXZfcm0JPSBuZXR2c2NfZGV2aWNlX3JlbW92ZTsKLQlkcml2ZXItPmJhc2UuY2xlYW51cAkJPSBuZXR2c2NfY2xlYW51cDsKKwkJcmV0ID0gdm1idXNfc2VuZHBhY2tldChuZXRfZGV2aWNlLT5kZXYtPmNoYW5uZWwsCisJCQkJICAgICAgIHJldm9rZV9wYWNrZXQsCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgbnZzcF9tZXNzYWdlKSwKKwkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpcmV2b2tlX3BhY2tldCwKKwkJCQkgICAgICAgVk1fUEtUX0RBVEFfSU5CQU5ELCAwKTsKKwkJLyoKKwkJICogSWYgd2UgZmFpbGVkIGhlcmUsIHdlIG1pZ2h0IGFzIHdlbGwgcmV0dXJuIGFuZAorCQkgKiBoYXZlIGEgbGVhayByYXRoZXIgdGhhbiBjb250aW51ZSBhbmQgYSBidWdjaGsKKwkJICovCisJCWlmIChyZXQgIT0gMCkgeworCQkJZGV2X2VycigmbmV0X2RldmljZS0+ZGV2LT5kZXZpY2UsICJ1bmFibGUgdG8gc2VuZCAiCisJCQkJInJldm9rZSByZWNlaXZlIGJ1ZmZlciB0byBuZXR2c3AiKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KIAotCWRyaXZlci0+c2VuZAkJCT0gbmV0dnNjX3NlbmQ7CisJLyogVGVhcmRvd24gdGhlIGdwYWRsIG9uIHRoZSB2c3AgZW5kICovCisJaWYgKG5ldF9kZXZpY2UtPnJlY3ZfYnVmX2dwYWRsX2hhbmRsZSkgeworCQlyZXQgPSB2bWJ1c190ZWFyZG93bl9ncGFkbChuZXRfZGV2aWNlLT5kZXYtPmNoYW5uZWwsCisJCQkgICBuZXRfZGV2aWNlLT5yZWN2X2J1Zl9ncGFkbF9oYW5kbGUpOwogCi0Jcm5kaXNfZmlsdGVyX2luaXQoZHJpdmVyKTsKLQlyZXR1cm4gMDsKKwkJLyogSWYgd2UgZmFpbGVkIGhlcmUsIHdlIG1pZ2h0IGFzIHdlbGwgcmV0dXJuIGFuZCBoYXZlIGEgbGVhaworCQkgKiByYXRoZXIgdGhhbiBjb250aW51ZSBhbmQgYSBidWdjaGsKKwkJICovCisJCWlmIChyZXQgIT0gMCkgeworCQkJZGV2X2VycigmbmV0X2RldmljZS0+ZGV2LT5kZXZpY2UsCisJCQkJICAgInVuYWJsZSB0byB0ZWFyZG93biByZWNlaXZlIGJ1ZmZlcidzIGdwYWRsIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJbmV0X2RldmljZS0+cmVjdl9idWZfZ3BhZGxfaGFuZGxlID0gMDsKKwl9CisKKwlpZiAobmV0X2RldmljZS0+cmVjdl9idWYpIHsKKwkJLyogRnJlZSB1cCB0aGUgcmVjZWl2ZSBidWZmZXIgKi8KKwkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyluZXRfZGV2aWNlLT5yZWN2X2J1ZiwKKwkJCWdldF9vcmRlcihuZXRfZGV2aWNlLT5yZWN2X2J1Zl9zaXplKSk7CisJCW5ldF9kZXZpY2UtPnJlY3ZfYnVmID0gTlVMTDsKKwl9CisKKwlpZiAobmV0X2RldmljZS0+cmVjdl9zZWN0aW9uKSB7CisJCW5ldF9kZXZpY2UtPnJlY3Zfc2VjdGlvbl9jbnQgPSAwOworCQlrZnJlZShuZXRfZGV2aWNlLT5yZWN2X3NlY3Rpb24pOworCQluZXRfZGV2aWNlLT5yZWN2X3NlY3Rpb24gPSBOVUxMOworCX0KKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgbmV0dnNjX2luaXRfcmVjdl9idWYoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlKQogewogCWludCByZXQgPSAwOworCWludCB0OwogCXN0cnVjdCBuZXR2c2NfZGV2aWNlICpuZXRfZGV2aWNlOwogCXN0cnVjdCBudnNwX21lc3NhZ2UgKmluaXRfcGFja2V0OwogCiAJbmV0X2RldmljZSA9IGdldF9vdXRib3VuZF9uZXRfZGV2aWNlKGRldmljZSk7CiAJaWYgKCFuZXRfZGV2aWNlKSB7Ci0JCURQUklOVF9FUlIoTkVUVlNDLCAidW5hYmxlIHRvIGdldCBuZXQgZGV2aWNlLi4uIgorCQlkZXZfZXJyKCZkZXZpY2UtPmRldmljZSwgInVuYWJsZSB0byBnZXQgbmV0IGRldmljZS4uLiIKIAkJCSAgICJkZXZpY2UgYmVpbmcgZGVzdHJveWVkPyIpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMjE2LDE1ICsyMjYsMTIgQEAKIAkJKHZvaWQgKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUx8X19HRlBfWkVSTywKIAkJCQlnZXRfb3JkZXIobmV0X2RldmljZS0+cmVjdl9idWZfc2l6ZSkpOwogCWlmICghbmV0X2RldmljZS0+cmVjdl9idWYpIHsKLQkJRFBSSU5UX0VSUihORVRWU0MsCi0JCQkgICAidW5hYmxlIHRvIGFsbG9jYXRlIHJlY2VpdmUgYnVmZmVyIG9mIHNpemUgJWQiLAotCQkJICAgbmV0X2RldmljZS0+cmVjdl9idWZfc2l6ZSk7CisJCWRldl9lcnIoJmRldmljZS0+ZGV2aWNlLCAidW5hYmxlIHRvIGFsbG9jYXRlIHJlY2VpdmUgIgorCQkJImJ1ZmZlciBvZiBzaXplICVkIiwgbmV0X2RldmljZS0+cmVjdl9idWZfc2l6ZSk7CiAJCXJldCA9IC0xOwogCQlnb3RvIGNsZWFudXA7CiAJfQogCi0JRFBSSU5UX0lORk8oTkVUVlNDLCAiRXN0YWJsaXNoaW5nIHJlY2VpdmUgYnVmZmVyJ3MgR1BBREwuLi4iKTsKLQogCS8qCiAJICogRXN0YWJsaXNoIHRoZSBncGFkbCBoYW5kbGUgZm9yIHRoaXMgYnVmZmVyIG9uIHRoaXMKIAkgKiBjaGFubmVsLiAgTm90ZTogVGhpcyBjYWxsIHVzZXMgdGhlIHZtYnVzIGNvbm5lY3Rpb24gcmF0aGVyCkBAIC0yMzQsMTUgKzI0MSwxMyBAQAogCQkJCSAgICBuZXRfZGV2aWNlLT5yZWN2X2J1Zl9zaXplLAogCQkJCSAgICAmbmV0X2RldmljZS0+cmVjdl9idWZfZ3BhZGxfaGFuZGxlKTsKIAlpZiAocmV0ICE9IDApIHsKLQkJRFBSSU5UX0VSUihORVRWU0MsCi0JCQkgICAidW5hYmxlIHRvIGVzdGFibGlzaCByZWNlaXZlIGJ1ZmZlcidzIGdwYWRsIik7CisJCWRldl9lcnIoJmRldmljZS0+ZGV2aWNlLAorCQkJInVuYWJsZSB0byBlc3RhYmxpc2ggcmVjZWl2ZSBidWZmZXIncyBncGFkbCIpOwogCQlnb3RvIGNsZWFudXA7CiAJfQogCiAKIAkvKiBOb3RpZnkgdGhlIE5ldFZzcCBvZiB0aGUgZ3BhZGwgaGFuZGxlICovCi0JRFBSSU5UX0lORk8oTkVUVlNDLCAiU2VuZGluZyBOdnNwTWVzc2FnZTFUeXBlU2VuZFJlY2VpdmVCdWZmZXIuLi4iKTsKLQogCWluaXRfcGFja2V0ID0gJm5ldF9kZXZpY2UtPmNoYW5uZWxfaW5pdF9wa3Q7CiAKIAltZW1zZXQoaW5pdF9wYWNrZXQsIDAsIHNpemVvZihzdHJ1Y3QgbnZzcF9tZXNzYWdlKSk7CkBAIC0yNTQsMjggKzI1OSwyNSBAQAogCQlzZW5kX3JlY3ZfYnVmLmlkID0gTkVUVlNDX1JFQ0VJVkVfQlVGRkVSX0lEOwogCiAJLyogU2VuZCB0aGUgZ3BhZGwgbm90aWZpY2F0aW9uIHJlcXVlc3QgKi8KLQluZXRfZGV2aWNlLT53YWl0X2NvbmRpdGlvbiA9IDA7CiAJcmV0ID0gdm1idXNfc2VuZHBhY2tldChkZXZpY2UtPmNoYW5uZWwsIGluaXRfcGFja2V0LAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgbnZzcF9tZXNzYWdlKSwKIAkJCSAgICAgICAodW5zaWduZWQgbG9uZylpbml0X3BhY2tldCwKIAkJCSAgICAgICBWTV9QS1RfREFUQV9JTkJBTkQsCiAJCQkgICAgICAgVk1CVVNfREFUQV9QQUNLRVRfRkxBR19DT01QTEVUSU9OX1JFUVVFU1RFRCk7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCURQUklOVF9FUlIoTkVUVlNDLAotCQkJICAgInVuYWJsZSB0byBzZW5kIHJlY2VpdmUgYnVmZmVyJ3MgZ3BhZGwgdG8gbmV0dnNwIik7CisJCWRldl9lcnIoJmRldmljZS0+ZGV2aWNlLAorCQkJInVuYWJsZSB0byBzZW5kIHJlY2VpdmUgYnVmZmVyJ3MgZ3BhZGwgdG8gbmV0dnNwIik7CiAJCWdvdG8gY2xlYW51cDsKIAl9CiAKLQl3YWl0X2V2ZW50X3RpbWVvdXQobmV0X2RldmljZS0+Y2hhbm5lbF9pbml0X3dhaXQsCi0JCQluZXRfZGV2aWNlLT53YWl0X2NvbmRpdGlvbiwKLQkJCW1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpOwotCUJVR19PTihuZXRfZGV2aWNlLT53YWl0X2NvbmRpdGlvbiA9PSAwKTsKKwl0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZuZXRfZGV2aWNlLT5jaGFubmVsX2luaXRfd2FpdCwgSFopOworCUJVR19PTih0ID09IDApOwogCiAKIAkvKiBDaGVjayB0aGUgcmVzcG9uc2UgKi8KIAlpZiAoaW5pdF9wYWNrZXQtPm1zZy52MV9tc2cuCiAJICAgIHNlbmRfcmVjdl9idWZfY29tcGxldGUuc3RhdHVzICE9IE5WU1BfU1RBVF9TVUNDRVNTKSB7Ci0JCURQUklOVF9FUlIoTkVUVlNDLCAiVW5hYmxlIHRvIGNvbXBsZXRlIHJlY2VpdmUgYnVmZmVyICIKKwkJZGV2X2VycigmZGV2aWNlLT5kZXZpY2UsICJVbmFibGUgdG8gY29tcGxldGUgcmVjZWl2ZSBidWZmZXIgIgogCQkJICAgImluaXRpYWx6YXRpb24gd2l0aCBOZXRWc3AgLSBzdGF0dXMgJWQiLAogCQkJICAgaW5pdF9wYWNrZXQtPm1zZy52MV9tc2cuCiAJCQkgICBzZW5kX3JlY3ZfYnVmX2NvbXBsZXRlLnN0YXR1cyk7CkBAIC0zMDEsMTQgKzMwMyw2IEBACiAJCW5ldF9kZXZpY2UtPnJlY3Zfc2VjdGlvbl9jbnQgKgogCSAgICAgICBzaXplb2Yoc3RydWN0IG52c3BfMV9yZWNlaXZlX2J1ZmZlcl9zZWN0aW9uKSk7CiAKLQlEUFJJTlRfSU5GTyhORVRWU0MsICJSZWNlaXZlIHNlY3Rpb25zIGluZm8gKGNvdW50ICVkLCBvZmZzZXQgJWQsICIKLQkJICAgICJlbmRvZmZzZXQgJWQsIHN1YmFsbG9jIHNpemUgJWQsIG51bSBzdWJhbGxvY3MgJWQpIiwKLQkJICAgIG5ldF9kZXZpY2UtPnJlY3Zfc2VjdGlvbl9jbnQsCi0JCSAgICBuZXRfZGV2aWNlLT5yZWN2X3NlY3Rpb25bMF0ub2Zmc2V0LAotCQkgICAgbmV0X2RldmljZS0+cmVjdl9zZWN0aW9uWzBdLmVuZF9vZmZzZXQsCi0JCSAgICBuZXRfZGV2aWNlLT5yZWN2X3NlY3Rpb25bMF0uc3ViX2FsbG9jX3NpemUsCi0JCSAgICBuZXRfZGV2aWNlLT5yZWN2X3NlY3Rpb25bMF0ubnVtX3N1Yl9hbGxvY3MpOwotCiAJLyoKIAkgKiBGb3IgMXN0IHJlbGVhc2UsIHRoZXJlIHNob3VsZCBvbmx5IGJlIDEgc2VjdGlvbiB0aGF0IHJlcHJlc2VudHMgdGhlCiAJICogZW50aXJlIHJlY2VpdmUgYnVmZmVyCkBAIC0zMjksMTUgKzMyMyw4MCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgbmV0dnNjX2Rlc3Ryb3lfc2VuZF9idWYoc3RydWN0IG5ldHZzY19kZXZpY2UgKm5ldF9kZXZpY2UpCit7CisJc3RydWN0IG52c3BfbWVzc2FnZSAqcmV2b2tlX3BhY2tldDsKKwlpbnQgcmV0ID0gMDsKKworCS8qCisJICogSWYgd2UgZ290IGEgc2VjdGlvbiBjb3VudCwgaXQgbWVhbnMgd2UgcmVjZWl2ZWQgYQorCSAqICBTZW5kUmVjZWl2ZUJ1ZmZlckNvbXBsZXRlIG1zZyAoaWUgc2VudAorCSAqICBOdnNwTWVzc2FnZTFUeXBlU2VuZFJlY2VpdmVCdWZmZXIgbXNnKSB0aGVyZWZvcmUsIHdlIG5lZWQKKwkgKiAgdG8gc2VuZCBhIHJldm9rZSBtc2cgaGVyZQorCSAqLworCWlmIChuZXRfZGV2aWNlLT5zZW5kX3NlY3Rpb25fc2l6ZSkgeworCQkvKiBTZW5kIHRoZSByZXZva2Ugc2VuZCBidWZmZXIgKi8KKwkJcmV2b2tlX3BhY2tldCA9ICZuZXRfZGV2aWNlLT5yZXZva2VfcGFja2V0OworCQltZW1zZXQocmV2b2tlX3BhY2tldCwgMCwgc2l6ZW9mKHN0cnVjdCBudnNwX21lc3NhZ2UpKTsKKworCQlyZXZva2VfcGFja2V0LT5oZHIubXNnX3R5cGUgPQorCQkJTlZTUF9NU0cxX1RZUEVfUkVWT0tFX1NFTkRfQlVGOworCQlyZXZva2VfcGFja2V0LT5tc2cudjFfbXNnLgorCQkJcmV2b2tlX3NlbmRfYnVmLmlkID0gTkVUVlNDX1NFTkRfQlVGRkVSX0lEOworCisJCXJldCA9IHZtYnVzX3NlbmRwYWNrZXQobmV0X2RldmljZS0+ZGV2LT5jaGFubmVsLAorCQkJCSAgICAgICByZXZva2VfcGFja2V0LAorCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IG52c3BfbWVzc2FnZSksCisJCQkJICAgICAgICh1bnNpZ25lZCBsb25nKXJldm9rZV9wYWNrZXQsCisJCQkJICAgICAgIFZNX1BLVF9EQVRBX0lOQkFORCwgMCk7CisJCS8qCisJCSAqIElmIHdlIGZhaWxlZCBoZXJlLCB3ZSBtaWdodCBhcyB3ZWxsIHJldHVybiBhbmQgaGF2ZSBhIGxlYWsKKwkJICogcmF0aGVyIHRoYW4gY29udGludWUgYW5kIGEgYnVnY2hrCisJCSAqLworCQlpZiAocmV0ICE9IDApIHsKKwkJCWRldl9lcnIoJm5ldF9kZXZpY2UtPmRldi0+ZGV2aWNlLCAidW5hYmxlIHRvIHNlbmQgIgorCQkJCSJyZXZva2Ugc2VuZCBidWZmZXIgdG8gbmV0dnNwIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwkvKiBUZWFyZG93biB0aGUgZ3BhZGwgb24gdGhlIHZzcCBlbmQgKi8KKwlpZiAobmV0X2RldmljZS0+c2VuZF9idWZfZ3BhZGxfaGFuZGxlKSB7CisJCXJldCA9IHZtYnVzX3RlYXJkb3duX2dwYWRsKG5ldF9kZXZpY2UtPmRldi0+Y2hhbm5lbCwKKwkJCQkJICAgbmV0X2RldmljZS0+c2VuZF9idWZfZ3BhZGxfaGFuZGxlKTsKKworCQkvKgorCQkgKiBJZiB3ZSBmYWlsZWQgaGVyZSwgd2UgbWlnaHQgYXMgd2VsbCByZXR1cm4gYW5kIGhhdmUgYSBsZWFrCisJCSAqIHJhdGhlciB0aGFuIGNvbnRpbnVlIGFuZCBhIGJ1Z2NoaworCQkgKi8KKwkJaWYgKHJldCAhPSAwKSB7CisJCQlkZXZfZXJyKCZuZXRfZGV2aWNlLT5kZXYtPmRldmljZSwKKwkJCQkidW5hYmxlIHRvIHRlYXJkb3duIHNlbmQgYnVmZmVyJ3MgZ3BhZGwiKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQluZXRfZGV2aWNlLT5zZW5kX2J1Zl9ncGFkbF9oYW5kbGUgPSAwOworCX0KKworCWlmIChuZXRfZGV2aWNlLT5zZW5kX2J1ZikgeworCQkvKiBGcmVlIHVwIHRoZSByZWNlaXZlIGJ1ZmZlciAqLworCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKW5ldF9kZXZpY2UtPnNlbmRfYnVmLAorCQkJCWdldF9vcmRlcihuZXRfZGV2aWNlLT5zZW5kX2J1Zl9zaXplKSk7CisJCW5ldF9kZXZpY2UtPnNlbmRfYnVmID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IG5ldHZzY19pbml0X3NlbmRfYnVmKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSkKIHsKIAlpbnQgcmV0ID0gMDsKKwlpbnQgdDsKIAlzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0X2RldmljZTsKIAlzdHJ1Y3QgbnZzcF9tZXNzYWdlICppbml0X3BhY2tldDsKIAogCW5ldF9kZXZpY2UgPSBnZXRfb3V0Ym91bmRfbmV0X2RldmljZShkZXZpY2UpOwogCWlmICghbmV0X2RldmljZSkgewotCQlEUFJJTlRfRVJSKE5FVFZTQywgInVuYWJsZSB0byBnZXQgbmV0IGRldmljZS4uLiIKKwkJZGV2X2VycigmZGV2aWNlLT5kZXZpY2UsICJ1bmFibGUgdG8gZ2V0IG5ldCBkZXZpY2UuLi4iCiAJCQkgICAiZGV2aWNlIGJlaW5nIGRlc3Ryb3llZD8iKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTM1MCwxNCArNDA5LDEyIEBACiAJCSh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMfF9fR0ZQX1pFUk8sCiAJCQkJZ2V0X29yZGVyKG5ldF9kZXZpY2UtPnNlbmRfYnVmX3NpemUpKTsKIAlpZiAoIW5ldF9kZXZpY2UtPnNlbmRfYnVmKSB7Ci0JCURQUklOVF9FUlIoTkVUVlNDLCAidW5hYmxlIHRvIGFsbG9jYXRlIHNlbmQgYnVmZmVyIG9mIHNpemUgJWQiLAotCQkJICAgbmV0X2RldmljZS0+c2VuZF9idWZfc2l6ZSk7CisJCWRldl9lcnIoJmRldmljZS0+ZGV2aWNlLCAidW5hYmxlIHRvIGFsbG9jYXRlIHNlbmQgIgorCQkJImJ1ZmZlciBvZiBzaXplICVkIiwgbmV0X2RldmljZS0+c2VuZF9idWZfc2l6ZSk7CiAJCXJldCA9IC0xOwogCQlnb3RvIGNsZWFudXA7CiAJfQogCi0JRFBSSU5UX0lORk8oTkVUVlNDLCAiRXN0YWJsaXNoaW5nIHNlbmQgYnVmZmVyJ3MgR1BBREwuLi4iKTsKLQogCS8qCiAJICogRXN0YWJsaXNoIHRoZSBncGFkbCBoYW5kbGUgZm9yIHRoaXMgYnVmZmVyIG9uIHRoaXMKIAkgKiBjaGFubmVsLiAgTm90ZTogVGhpcyBjYWxsIHVzZXMgdGhlIHZtYnVzIGNvbm5lY3Rpb24gcmF0aGVyCkBAIC0zNjcsMTMgKzQyNCwxMSBAQAogCQkJCSAgICBuZXRfZGV2aWNlLT5zZW5kX2J1Zl9zaXplLAogCQkJCSAgICAmbmV0X2RldmljZS0+c2VuZF9idWZfZ3BhZGxfaGFuZGxlKTsKIAlpZiAocmV0ICE9IDApIHsKLQkJRFBSSU5UX0VSUihORVRWU0MsICJ1bmFibGUgdG8gZXN0YWJsaXNoIHNlbmQgYnVmZmVyJ3MgZ3BhZGwiKTsKKwkJZGV2X2VycigmZGV2aWNlLT5kZXZpY2UsICJ1bmFibGUgdG8gZXN0YWJsaXNoIHNlbmQgYnVmZmVyJ3MgZ3BhZGwiKTsKIAkJZ290byBjbGVhbnVwOwogCX0KIAogCS8qIE5vdGlmeSB0aGUgTmV0VnNwIG9mIHRoZSBncGFkbCBoYW5kbGUgKi8KLQlEUFJJTlRfSU5GTyhORVRWU0MsICJTZW5kaW5nIE52c3BNZXNzYWdlMVR5cGVTZW5kU2VuZEJ1ZmZlci4uLiIpOwotCiAJaW5pdF9wYWNrZXQgPSAmbmV0X2RldmljZS0+Y2hhbm5lbF9pbml0X3BrdDsKIAogCW1lbXNldChpbml0X3BhY2tldCwgMCwgc2l6ZW9mKHN0cnVjdCBudnNwX21lc3NhZ2UpKTsKQEAgLTM4NSwyNyArNDQwLDI1IEBACiAJCU5FVFZTQ19TRU5EX0JVRkZFUl9JRDsKIAogCS8qIFNlbmQgdGhlIGdwYWRsIG5vdGlmaWNhdGlvbiByZXF1ZXN0ICovCi0JbmV0X2RldmljZS0+d2FpdF9jb25kaXRpb24gPSAwOwogCXJldCA9IHZtYnVzX3NlbmRwYWNrZXQoZGV2aWNlLT5jaGFubmVsLCBpbml0X3BhY2tldCwKIAkJCSAgICAgICBzaXplb2Yoc3RydWN0IG52c3BfbWVzc2FnZSksCiAJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpaW5pdF9wYWNrZXQsCiAJCQkgICAgICAgVk1fUEtUX0RBVEFfSU5CQU5ELAogCQkJICAgICAgIFZNQlVTX0RBVEFfUEFDS0VUX0ZMQUdfQ09NUExFVElPTl9SRVFVRVNURUQpOwogCWlmIChyZXQgIT0gMCkgewotCQlEUFJJTlRfRVJSKE5FVFZTQywKKwkJZGV2X2VycigmZGV2aWNlLT5kZXZpY2UsCiAJCQkgICAidW5hYmxlIHRvIHNlbmQgcmVjZWl2ZSBidWZmZXIncyBncGFkbCB0byBuZXR2c3AiKTsKIAkJZ290byBjbGVhbnVwOwogCX0KIAotCXdhaXRfZXZlbnRfdGltZW91dChuZXRfZGV2aWNlLT5jaGFubmVsX2luaXRfd2FpdCwKLQkJCW5ldF9kZXZpY2UtPndhaXRfY29uZGl0aW9uLAotCQkJbXNlY3NfdG9famlmZmllcygxMDAwKSk7Ci0JQlVHX09OKG5ldF9kZXZpY2UtPndhaXRfY29uZGl0aW9uID09IDApOworCXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJm5ldF9kZXZpY2UtPmNoYW5uZWxfaW5pdF93YWl0LCBIWik7CisKKwlCVUdfT04odCA9PSAwKTsKIAogCS8qIENoZWNrIHRoZSByZXNwb25zZSAqLwogCWlmIChpbml0X3BhY2tldC0+bXNnLnYxX21zZy4KIAkgICAgc2VuZF9zZW5kX2J1Zl9jb21wbGV0ZS5zdGF0dXMgIT0gTlZTUF9TVEFUX1NVQ0NFU1MpIHsKLQkJRFBSSU5UX0VSUihORVRWU0MsICJVbmFibGUgdG8gY29tcGxldGUgc2VuZCBidWZmZXIgIgorCQlkZXZfZXJyKCZkZXZpY2UtPmRldmljZSwgIlVuYWJsZSB0byBjb21wbGV0ZSBzZW5kIGJ1ZmZlciAiCiAJCQkgICAiaW5pdGlhbHphdGlvbiB3aXRoIE5ldFZzcCAtIHN0YXR1cyAlZCIsCiAJCQkgICBpbml0X3BhY2tldC0+bXNnLnYxX21zZy4KIAkJCSAgIHNlbmRfc2VuZF9idWZfY29tcGxldGUuc3RhdHVzKTsKQEAgLTQyNiwxNjEgKzQ3OSwxNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbmV0dnNjX2Rlc3Ryb3lfcmVjdl9idWYoc3RydWN0IG5ldHZzY19kZXZpY2UgKm5ldF9kZXZpY2UpCi17Ci0Jc3RydWN0IG52c3BfbWVzc2FnZSAqcmV2b2tlX3BhY2tldDsKLQlpbnQgcmV0ID0gMDsKLQotCS8qCi0JICogSWYgd2UgZ290IGEgc2VjdGlvbiBjb3VudCwgaXQgbWVhbnMgd2UgcmVjZWl2ZWQgYQotCSAqIFNlbmRSZWNlaXZlQnVmZmVyQ29tcGxldGUgbXNnIChpZSBzZW50Ci0JICogTnZzcE1lc3NhZ2UxVHlwZVNlbmRSZWNlaXZlQnVmZmVyIG1zZykgdGhlcmVmb3JlLCB3ZSBuZWVkCi0JICogdG8gc2VuZCBhIHJldm9rZSBtc2cgaGVyZQotCSAqLwotCWlmIChuZXRfZGV2aWNlLT5yZWN2X3NlY3Rpb25fY250KSB7Ci0JCURQUklOVF9JTkZPKE5FVFZTQywKLQkJCSAgICAiU2VuZGluZyBOdnNwTWVzc2FnZTFUeXBlUmV2b2tlUmVjZWl2ZUJ1ZmZlci4uLiIpOwotCi0JCS8qIFNlbmQgdGhlIHJldm9rZSByZWNlaXZlIGJ1ZmZlciAqLwotCQlyZXZva2VfcGFja2V0ID0gJm5ldF9kZXZpY2UtPnJldm9rZV9wYWNrZXQ7Ci0JCW1lbXNldChyZXZva2VfcGFja2V0LCAwLCBzaXplb2Yoc3RydWN0IG52c3BfbWVzc2FnZSkpOwotCi0JCXJldm9rZV9wYWNrZXQtPmhkci5tc2dfdHlwZSA9Ci0JCQlOVlNQX01TRzFfVFlQRV9SRVZPS0VfUkVDVl9CVUY7Ci0JCXJldm9rZV9wYWNrZXQtPm1zZy52MV9tc2cuCi0JCXJldm9rZV9yZWN2X2J1Zi5pZCA9IE5FVFZTQ19SRUNFSVZFX0JVRkZFUl9JRDsKLQotCQlyZXQgPSB2bWJ1c19zZW5kcGFja2V0KG5ldF9kZXZpY2UtPmRldi0+Y2hhbm5lbCwKLQkJCQkgICAgICAgcmV2b2tlX3BhY2tldCwKLQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBudnNwX21lc3NhZ2UpLAotCQkJCSAgICAgICAodW5zaWduZWQgbG9uZylyZXZva2VfcGFja2V0LAotCQkJCSAgICAgICBWTV9QS1RfREFUQV9JTkJBTkQsIDApOwotCQkvKgotCQkgKiBJZiB3ZSBmYWlsZWQgaGVyZSwgd2UgbWlnaHQgYXMgd2VsbCByZXR1cm4gYW5kCi0JCSAqIGhhdmUgYSBsZWFrIHJhdGhlciB0aGFuIGNvbnRpbnVlIGFuZCBhIGJ1Z2NoawotCQkgKi8KLQkJaWYgKHJldCAhPSAwKSB7Ci0JCQlEUFJJTlRfRVJSKE5FVFZTQywgInVuYWJsZSB0byBzZW5kIHJldm9rZSByZWNlaXZlICIKLQkJCQkgICAiYnVmZmVyIHRvIG5ldHZzcCIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JfQotCi0JLyogVGVhcmRvd24gdGhlIGdwYWRsIG9uIHRoZSB2c3AgZW5kICovCi0JaWYgKG5ldF9kZXZpY2UtPnJlY3ZfYnVmX2dwYWRsX2hhbmRsZSkgewotCQlEUFJJTlRfSU5GTyhORVRWU0MsICJUZWFyaW5nIGRvd24gcmVjZWl2ZSBidWZmZXIncyBHUEFETC4uLiIpOwotCi0JCXJldCA9IHZtYnVzX3RlYXJkb3duX2dwYWRsKG5ldF9kZXZpY2UtPmRldi0+Y2hhbm5lbCwKLQkJCSAgIG5ldF9kZXZpY2UtPnJlY3ZfYnVmX2dwYWRsX2hhbmRsZSk7Ci0KLQkJLyogSWYgd2UgZmFpbGVkIGhlcmUsIHdlIG1pZ2h0IGFzIHdlbGwgcmV0dXJuIGFuZCBoYXZlIGEgbGVhayByYXRoZXIgdGhhbiBjb250aW51ZSBhbmQgYSBidWdjaGsgKi8KLQkJaWYgKHJldCAhPSAwKSB7Ci0JCQlEUFJJTlRfRVJSKE5FVFZTQywKLQkJCQkgICAidW5hYmxlIHRvIHRlYXJkb3duIHJlY2VpdmUgYnVmZmVyJ3MgZ3BhZGwiKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCQluZXRfZGV2aWNlLT5yZWN2X2J1Zl9ncGFkbF9oYW5kbGUgPSAwOwotCX0KLQotCWlmIChuZXRfZGV2aWNlLT5yZWN2X2J1ZikgewotCQlEUFJJTlRfSU5GTyhORVRWU0MsICJGcmVlaW5nIHVwIHJlY2VpdmUgYnVmZmVyLi4uIik7Ci0KLQkJLyogRnJlZSB1cCB0aGUgcmVjZWl2ZSBidWZmZXIgKi8KLQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyluZXRfZGV2aWNlLT5yZWN2X2J1ZiwKLQkJCWdldF9vcmRlcihuZXRfZGV2aWNlLT5yZWN2X2J1Zl9zaXplKSk7Ci0JCW5ldF9kZXZpY2UtPnJlY3ZfYnVmID0gTlVMTDsKLQl9Ci0KLQlpZiAobmV0X2RldmljZS0+cmVjdl9zZWN0aW9uKSB7Ci0JCW5ldF9kZXZpY2UtPnJlY3Zfc2VjdGlvbl9jbnQgPSAwOwotCQlrZnJlZShuZXRfZGV2aWNlLT5yZWN2X3NlY3Rpb24pOwotCQluZXRfZGV2aWNlLT5yZWN2X3NlY3Rpb24gPSBOVUxMOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgbmV0dnNjX2Rlc3Ryb3lfc2VuZF9idWYoc3RydWN0IG5ldHZzY19kZXZpY2UgKm5ldF9kZXZpY2UpCi17Ci0Jc3RydWN0IG52c3BfbWVzc2FnZSAqcmV2b2tlX3BhY2tldDsKLQlpbnQgcmV0ID0gMDsKLQotCS8qCi0JICogSWYgd2UgZ290IGEgc2VjdGlvbiBjb3VudCwgaXQgbWVhbnMgd2UgcmVjZWl2ZWQgYQotCSAqICBTZW5kUmVjZWl2ZUJ1ZmZlckNvbXBsZXRlIG1zZyAoaWUgc2VudAotCSAqICBOdnNwTWVzc2FnZTFUeXBlU2VuZFJlY2VpdmVCdWZmZXIgbXNnKSB0aGVyZWZvcmUsIHdlIG5lZWQKLQkgKiAgdG8gc2VuZCBhIHJldm9rZSBtc2cgaGVyZQotCSAqLwotCWlmIChuZXRfZGV2aWNlLT5zZW5kX3NlY3Rpb25fc2l6ZSkgewotCQlEUFJJTlRfSU5GTyhORVRWU0MsCi0JCQkgICAgIlNlbmRpbmcgTnZzcE1lc3NhZ2UxVHlwZVJldm9rZVNlbmRCdWZmZXIuLi4iKTsKLQotCQkvKiBTZW5kIHRoZSByZXZva2Ugc2VuZCBidWZmZXIgKi8KLQkJcmV2b2tlX3BhY2tldCA9ICZuZXRfZGV2aWNlLT5yZXZva2VfcGFja2V0OwotCQltZW1zZXQocmV2b2tlX3BhY2tldCwgMCwgc2l6ZW9mKHN0cnVjdCBudnNwX21lc3NhZ2UpKTsKLQotCQlyZXZva2VfcGFja2V0LT5oZHIubXNnX3R5cGUgPQotCQkJTlZTUF9NU0cxX1RZUEVfUkVWT0tFX1NFTkRfQlVGOwotCQlyZXZva2VfcGFja2V0LT5tc2cudjFfbXNnLgotCQkJcmV2b2tlX3NlbmRfYnVmLmlkID0gTkVUVlNDX1NFTkRfQlVGRkVSX0lEOwotCi0JCXJldCA9IHZtYnVzX3NlbmRwYWNrZXQobmV0X2RldmljZS0+ZGV2LT5jaGFubmVsLAotCQkJCSAgICAgICByZXZva2VfcGFja2V0LAotCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IG52c3BfbWVzc2FnZSksCi0JCQkJICAgICAgICh1bnNpZ25lZCBsb25nKXJldm9rZV9wYWNrZXQsCi0JCQkJICAgICAgIFZNX1BLVF9EQVRBX0lOQkFORCwgMCk7Ci0JCS8qCi0JCSAqIElmIHdlIGZhaWxlZCBoZXJlLCB3ZSBtaWdodCBhcyB3ZWxsIHJldHVybiBhbmQgaGF2ZSBhIGxlYWsKLQkJICogcmF0aGVyIHRoYW4gY29udGludWUgYW5kIGEgYnVnY2hrCi0JCSAqLwotCQlpZiAocmV0ICE9IDApIHsKLQkJCURQUklOVF9FUlIoTkVUVlNDLCAidW5hYmxlIHRvIHNlbmQgcmV2b2tlIHNlbmQgYnVmZmVyICIKLQkJCQkgICAidG8gbmV0dnNwIik7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQl9Ci0KLQkvKiBUZWFyZG93biB0aGUgZ3BhZGwgb24gdGhlIHZzcCBlbmQgKi8KLQlpZiAobmV0X2RldmljZS0+c2VuZF9idWZfZ3BhZGxfaGFuZGxlKSB7Ci0JCURQUklOVF9JTkZPKE5FVFZTQywgIlRlYXJpbmcgZG93biBzZW5kIGJ1ZmZlcidzIEdQQURMLi4uIik7Ci0JCXJldCA9IHZtYnVzX3RlYXJkb3duX2dwYWRsKG5ldF9kZXZpY2UtPmRldi0+Y2hhbm5lbCwKLQkJCQkJICAgbmV0X2RldmljZS0+c2VuZF9idWZfZ3BhZGxfaGFuZGxlKTsKLQotCQkvKgotCQkgKiBJZiB3ZSBmYWlsZWQgaGVyZSwgd2UgbWlnaHQgYXMgd2VsbCByZXR1cm4gYW5kIGhhdmUgYSBsZWFrCi0JCSAqIHJhdGhlciB0aGFuIGNvbnRpbnVlIGFuZCBhIGJ1Z2NoawotCQkgKi8KLQkJaWYgKHJldCAhPSAwKSB7Ci0JCQlEUFJJTlRfRVJSKE5FVFZTQywgInVuYWJsZSB0byB0ZWFyZG93biBzZW5kIGJ1ZmZlcidzICIKLQkJCQkgICAiZ3BhZGwiKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCQluZXRfZGV2aWNlLT5zZW5kX2J1Zl9ncGFkbF9oYW5kbGUgPSAwOwotCX0KLQotCWlmIChuZXRfZGV2aWNlLT5zZW5kX2J1ZikgewotCQlEUFJJTlRfSU5GTyhORVRWU0MsICJGcmVlaW5nIHVwIHNlbmQgYnVmZmVyLi4uIik7Ci0KLQkJLyogRnJlZSB1cCB0aGUgcmVjZWl2ZSBidWZmZXIgKi8KLQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyluZXRfZGV2aWNlLT5zZW5kX2J1ZiwKLQkJCQlnZXRfb3JkZXIobmV0X2RldmljZS0+c2VuZF9idWZfc2l6ZSkpOwotCQluZXRfZGV2aWNlLT5zZW5kX2J1ZiA9IE5VTEw7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQogCiBzdGF0aWMgaW50IG5ldHZzY19jb25uZWN0X3ZzcChzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UpCiB7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCB0OwogCXN0cnVjdCBuZXR2c2NfZGV2aWNlICpuZXRfZGV2aWNlOwogCXN0cnVjdCBudnNwX21lc3NhZ2UgKmluaXRfcGFja2V0OwogCWludCBuZGlzX3ZlcnNpb247CiAKIAluZXRfZGV2aWNlID0gZ2V0X291dGJvdW5kX25ldF9kZXZpY2UoZGV2aWNlKTsKIAlpZiAoIW5ldF9kZXZpY2UpIHsKLQkJRFBSSU5UX0VSUihORVRWU0MsICJ1bmFibGUgdG8gZ2V0IG5ldCBkZXZpY2UuLi4iCisJCWRldl9lcnIoJmRldmljZS0+ZGV2aWNlLCAidW5hYmxlIHRvIGdldCBuZXQgZGV2aWNlLi4uIgogCQkJICAgImRldmljZSBiZWluZyBkZXN0cm95ZWQ/Iik7CiAJCXJldHVybiAtMTsKIAl9CkBAIC01OTQsNTQgKzUwMywzNCBAQAogCWluaXRfcGFja2V0LT5tc2cuaW5pdF9tc2cuaW5pdC5tYXhfcHJvdG9jb2xfdmVyID0KIAkJTlZTUF9NQVhfUFJPVE9DT0xfVkVSU0lPTjsKIAotCURQUklOVF9JTkZPKE5FVFZTQywgIlNlbmRpbmcgTnZzcE1lc3NhZ2VUeXBlSW5pdC4uLiIpOwotCiAJLyogU2VuZCB0aGUgaW5pdCByZXF1ZXN0ICovCi0JbmV0X2RldmljZS0+d2FpdF9jb25kaXRpb24gPSAwOwogCXJldCA9IHZtYnVzX3NlbmRwYWNrZXQoZGV2aWNlLT5jaGFubmVsLCBpbml0X3BhY2tldCwKIAkJCSAgICAgICBzaXplb2Yoc3RydWN0IG52c3BfbWVzc2FnZSksCiAJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpaW5pdF9wYWNrZXQsCiAJCQkgICAgICAgVk1fUEtUX0RBVEFfSU5CQU5ELAogCQkJICAgICAgIFZNQlVTX0RBVEFfUEFDS0VUX0ZMQUdfQ09NUExFVElPTl9SRVFVRVNURUQpOwogCi0JaWYgKHJldCAhPSAwKSB7Ci0JCURQUklOVF9FUlIoTkVUVlNDLCAidW5hYmxlIHRvIHNlbmQgTnZzcE1lc3NhZ2VUeXBlSW5pdCIpOworCWlmIChyZXQgIT0gMCkKIAkJZ290byBjbGVhbnVwOwotCX0KIAotCXdhaXRfZXZlbnRfdGltZW91dChuZXRfZGV2aWNlLT5jaGFubmVsX2luaXRfd2FpdCwKLQkJCW5ldF9kZXZpY2UtPndhaXRfY29uZGl0aW9uLAotCQkJbXNlY3NfdG9famlmZmllcygxMDAwKSk7Ci0JaWYgKG5ldF9kZXZpY2UtPndhaXRfY29uZGl0aW9uID09IDApIHsKKwl0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZuZXRfZGV2aWNlLT5jaGFubmVsX2luaXRfd2FpdCwgSFopOworCisJaWYgKHQgPT0gMCkgewogCQlyZXQgPSAtRVRJTUVET1VUOwogCQlnb3RvIGNsZWFudXA7CiAJfQogCi0JRFBSSU5UX0lORk8oTkVUVlNDLCAiTnZzcE1lc3NhZ2VUeXBlSW5pdCBzdGF0dXMoJWQpIG1heCBtZGwgY2hhaW4gKCVkKSIsCi0JCWluaXRfcGFja2V0LT5tc2cuaW5pdF9tc2cuaW5pdF9jb21wbGV0ZS5zdGF0dXMsCi0JCWluaXRfcGFja2V0LT5tc2cuaW5pdF9tc2cuCi0JCSAgICBpbml0X2NvbXBsZXRlLm1heF9tZGxfY2hhaW5fbGVuKTsKLQogCWlmIChpbml0X3BhY2tldC0+bXNnLmluaXRfbXNnLmluaXRfY29tcGxldGUuc3RhdHVzICE9CiAJICAgIE5WU1BfU1RBVF9TVUNDRVNTKSB7Ci0JCURQUklOVF9FUlIoTkVUVlNDLAotCQkJInVuYWJsZSB0byBpbml0aWFsaXplIHdpdGggbmV0dnNwIChzdGF0dXMgMHgleCkiLAotCQkJaW5pdF9wYWNrZXQtPm1zZy5pbml0X21zZy5pbml0X2NvbXBsZXRlLnN0YXR1cyk7CiAJCXJldCA9IC0xOwogCQlnb3RvIGNsZWFudXA7CiAJfQogCiAJaWYgKGluaXRfcGFja2V0LT5tc2cuaW5pdF9tc2cuaW5pdF9jb21wbGV0ZS4KIAkgICAgbmVnb3RpYXRlZF9wcm90b2NvbF92ZXIgIT0gTlZTUF9QUk9UT0NPTF9WRVJTSU9OXzEpIHsKLQkJRFBSSU5UX0VSUihORVRWU0MsICJ1bmFibGUgdG8gaW5pdGlhbGl6ZSB3aXRoIG5ldHZzcCAiCi0JCQkgICAiKHZlcnNpb24gZXhwZWN0ZWQgMSBnb3QgJWQpIiwKLQkJCSAgIGluaXRfcGFja2V0LT5tc2cuaW5pdF9tc2cuCi0JCQkgICBpbml0X2NvbXBsZXRlLm5lZ290aWF0ZWRfcHJvdG9jb2xfdmVyKTsKIAkJcmV0ID0gLTE7CiAJCWdvdG8gY2xlYW51cDsKIAl9Ci0JRFBSSU5UX0lORk8oTkVUVlNDLCAiU2VuZGluZyBOdnNwTWVzc2FnZTFUeXBlU2VuZE5kaXNWZXJzaW9uLi4uIik7Ci0KIAkvKiBTZW5kIHRoZSBuZGlzIHZlcnNpb24gKi8KIAltZW1zZXQoaW5pdF9wYWNrZXQsIDAsIHNpemVvZihzdHJ1Y3QgbnZzcF9tZXNzYWdlKSk7CiAKQEAgLTY2MSw4ICs1NTAsNiBAQAogCQkJCSh1bnNpZ25lZCBsb25nKWluaXRfcGFja2V0LAogCQkJCVZNX1BLVF9EQVRBX0lOQkFORCwgMCk7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCURQUklOVF9FUlIoTkVUVlNDLAotCQkJICAgInVuYWJsZSB0byBzZW5kIE52c3BNZXNzYWdlMVR5cGVTZW5kTmRpc1ZlcnNpb24iKTsKIAkJcmV0ID0gLTE7CiAJCWdvdG8gY2xlYW51cDsKIAl9CkBAIC02NzcsMTQzICs1NjQsNDIgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBOZXRWc2NEaXNjb25uZWN0RnJvbVZzcChzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0X2RldmljZSkKK3N0YXRpYyB2b2lkIG5ldHZzY19kaXNjb25uZWN0X3ZzcChzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0X2RldmljZSkKIHsKIAluZXR2c2NfZGVzdHJveV9yZWN2X2J1ZihuZXRfZGV2aWNlKTsKIAluZXR2c2NfZGVzdHJveV9zZW5kX2J1ZihuZXRfZGV2aWNlKTsKIH0KIAogLyoKLSAqIG5ldHZzY19kZXZpY2VfYWRkIC0gQ2FsbGJhY2sgd2hlbiB0aGUgZGV2aWNlIGJlbG9uZ2luZyB0byB0aGlzCi0gKiBkcml2ZXIgaXMgYWRkZWQKLSAqLwotc3RhdGljIGludCBuZXR2c2NfZGV2aWNlX2FkZChzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsIHZvaWQgKmFkZGl0aW9uYWxfaW5mbykKLXsKLQlpbnQgcmV0ID0gMDsKLQlpbnQgaTsKLQlzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0X2RldmljZTsKLQlzdHJ1Y3QgaHZfbmV0dnNjX3BhY2tldCAqcGFja2V0LCAqcG9zOwotCXN0cnVjdCBuZXR2c2NfZHJpdmVyICpuZXRfZHJpdmVyID0KLQkJCQkoc3RydWN0IG5ldHZzY19kcml2ZXIgKilkZXZpY2UtPmRydjsKLQotCW5ldF9kZXZpY2UgPSBhbGxvY19uZXRfZGV2aWNlKGRldmljZSk7Ci0JaWYgKCFuZXRfZGV2aWNlKSB7Ci0JCXJldCA9IC0xOwotCQlnb3RvIGNsZWFudXA7Ci0JfQotCi0JRFBSSU5UX0RCRyhORVRWU0MsICJuZXR2c2MgY2hhbm5lbCBvYmplY3QgYWxsb2NhdGVkIC0gJXAiLCBuZXRfZGV2aWNlKTsKLQotCS8qIEluaXRpYWxpemUgdGhlIE5ldFZTQyBjaGFubmVsIGV4dGVuc2lvbiAqLwotCW5ldF9kZXZpY2UtPnJlY3ZfYnVmX3NpemUgPSBORVRWU0NfUkVDRUlWRV9CVUZGRVJfU0laRTsKLQlzcGluX2xvY2tfaW5pdCgmbmV0X2RldmljZS0+cmVjdl9wa3RfbGlzdF9sb2NrKTsKLQotCW5ldF9kZXZpY2UtPnNlbmRfYnVmX3NpemUgPSBORVRWU0NfU0VORF9CVUZGRVJfU0laRTsKLQotCUlOSVRfTElTVF9IRUFEKCZuZXRfZGV2aWNlLT5yZWN2X3BrdF9saXN0KTsKLQotCWZvciAoaSA9IDA7IGkgPCBORVRWU0NfUkVDRUlWRV9QQUNLRVRMSVNUX0NPVU5UOyBpKyspIHsKLQkJcGFja2V0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGh2X25ldHZzY19wYWNrZXQpICsKLQkJCQkgKE5FVFZTQ19SRUNFSVZFX1NHX0NPVU5UICoKLQkJCQkgIHNpemVvZihzdHJ1Y3QgaHZfcGFnZV9idWZmZXIpKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghcGFja2V0KSB7Ci0JCQlEUFJJTlRfREJHKE5FVFZTQywgInVuYWJsZSB0byBhbGxvY2F0ZSBuZXR2c2MgcGt0cyAiCi0JCQkJICAgImZvciByZWNlaXZlIHBvb2wgKHdhbnRlZCAlZCBnb3QgJWQpIiwKLQkJCQkgICBORVRWU0NfUkVDRUlWRV9QQUNLRVRMSVNUX0NPVU5ULCBpKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWxpc3RfYWRkX3RhaWwoJnBhY2tldC0+bGlzdF9lbnQsCi0JCQkgICAgICAmbmV0X2RldmljZS0+cmVjdl9wa3RfbGlzdCk7Ci0JfQotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm5ldF9kZXZpY2UtPmNoYW5uZWxfaW5pdF93YWl0KTsKLQotCS8qIE9wZW4gdGhlIGNoYW5uZWwgKi8KLQlyZXQgPSB2bWJ1c19vcGVuKGRldmljZS0+Y2hhbm5lbCwgbmV0X2RyaXZlci0+cmluZ19idWZfc2l6ZSwKLQkJCSBuZXRfZHJpdmVyLT5yaW5nX2J1Zl9zaXplLCBOVUxMLCAwLAotCQkJIG5ldHZzY19jaGFubmVsX2NiLCBkZXZpY2UpOwotCi0JaWYgKHJldCAhPSAwKSB7Ci0JCURQUklOVF9FUlIoTkVUVlNDLCAidW5hYmxlIHRvIG9wZW4gY2hhbm5lbDogJWQiLCByZXQpOwotCQlyZXQgPSAtMTsKLQkJZ290byBjbGVhbnVwOwotCX0KLQotCS8qIENoYW5uZWwgaXMgb3BlbmVkICovCi0JRFBSSU5UX0lORk8oTkVUVlNDLCAiKioqIE5ldFZTQyBjaGFubmVsIG9wZW5lZCBzdWNjZXNzZnVsbHkhICoqKiIpOwotCi0JLyogQ29ubmVjdCB3aXRoIHRoZSBOZXRWc3AgKi8KLQlyZXQgPSBuZXR2c2NfY29ubmVjdF92c3AoZGV2aWNlKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJRFBSSU5UX0VSUihORVRWU0MsICJ1bmFibGUgdG8gY29ubmVjdCB0byBOZXRWU1AgLSAlZCIsIHJldCk7Ci0JCXJldCA9IC0xOwotCQlnb3RvIGNsb3NlOwotCX0KLQotCURQUklOVF9JTkZPKE5FVFZTQywgIioqKiBOZXRWU0MgY2hhbm5lbCBoYW5kc2hha2UgcmVzdWx0IC0gJWQgKioqIiwKLQkJICAgIHJldCk7Ci0KLQlyZXR1cm4gcmV0OwotCi1jbG9zZToKLQkvKiBOb3csIHdlIGNhbiBjbG9zZSB0aGUgY2hhbm5lbCBzYWZlbHkgKi8KLQl2bWJ1c19jbG9zZShkZXZpY2UtPmNoYW5uZWwpOwotCi1jbGVhbnVwOgotCi0JaWYgKG5ldF9kZXZpY2UpIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBhY2tldCwgcG9zLAotCQkJCQkgJm5ldF9kZXZpY2UtPnJlY3ZfcGt0X2xpc3QsCi0JCQkJCSBsaXN0X2VudCkgewotCQkJbGlzdF9kZWwoJnBhY2tldC0+bGlzdF9lbnQpOwotCQkJa2ZyZWUocGFja2V0KTsKLQkJfQotCi0JCXJlbGVhc2Vfb3V0Ym91bmRfbmV0X2RldmljZShkZXZpY2UpOwotCQlyZWxlYXNlX2luYm91bmRfbmV0X2RldmljZShkZXZpY2UpOwotCi0JCWZyZWVfbmV0X2RldmljZShuZXRfZGV2aWNlKTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKgogICogbmV0dnNjX2RldmljZV9yZW1vdmUgLSBDYWxsYmFjayB3aGVuIHRoZSByb290IGJ1cyBkZXZpY2UgaXMgcmVtb3ZlZAogICovCi1zdGF0aWMgaW50IG5ldHZzY19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSkKK2ludCBuZXR2c2NfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IG5ldHZzY19kZXZpY2UgKm5ldF9kZXZpY2U7CiAJc3RydWN0IGh2X25ldHZzY19wYWNrZXQgKm5ldHZzY19wYWNrZXQsICpwb3M7CiAKLQlEUFJJTlRfSU5GTyhORVRWU0MsICJEaXNhYmxpbmcgb3V0Ym91bmQgdHJhZmZpYyBvbiBuZXQgZGV2aWNlICglcCkuLi4iLAotCQkgICAgZGV2aWNlLT5leHQpOwotCiAJLyogU3RvcCBvdXRib3VuZCB0cmFmZmljIGllIHNlbmRzIGFuZCByZWNlaXZlcyBjb21wbGV0aW9ucyAqLwogCW5ldF9kZXZpY2UgPSByZWxlYXNlX291dGJvdW5kX25ldF9kZXZpY2UoZGV2aWNlKTsKIAlpZiAoIW5ldF9kZXZpY2UpIHsKLQkJRFBSSU5UX0VSUihORVRWU0MsICJObyBuZXQgZGV2aWNlIHByZXNlbnQhISIpOworCQlkZXZfZXJyKCZkZXZpY2UtPmRldmljZSwgIk5vIG5ldCBkZXZpY2UgcHJlc2VudCEhIik7CiAJCXJldHVybiAtMTsKIAl9CiAKIAkvKiBXYWl0IGZvciBhbGwgc2VuZCBjb21wbGV0aW9ucyAqLwogCXdoaWxlIChhdG9taWNfcmVhZCgmbmV0X2RldmljZS0+bnVtX291dHN0YW5kaW5nX3NlbmRzKSkgewotCQlEUFJJTlRfSU5GTyhORVRWU0MsICJ3YWl0aW5nIGZvciAlZCByZXF1ZXN0cyB0byBjb21wbGV0ZS4uLiIsCi0JCQkgICAgYXRvbWljX3JlYWQoJm5ldF9kZXZpY2UtPm51bV9vdXRzdGFuZGluZ19zZW5kcykpOworCQlkZXZfZXJyKCZkZXZpY2UtPmRldmljZSwKKwkJCSJ3YWl0aW5nIGZvciAlZCByZXF1ZXN0cyB0byBjb21wbGV0ZS4uLiIsCisJCQlhdG9taWNfcmVhZCgmbmV0X2RldmljZS0+bnVtX291dHN0YW5kaW5nX3NlbmRzKSk7CiAJCXVkZWxheSgxMDApOwogCX0KIAotCURQUklOVF9JTkZPKE5FVFZTQywgIkRpc2Nvbm5lY3RpbmcgZnJvbSBuZXR2c3AuLi4iKTsKLQotCU5ldFZzY0Rpc2Nvbm5lY3RGcm9tVnNwKG5ldF9kZXZpY2UpOwotCi0JRFBSSU5UX0lORk8oTkVUVlNDLCAiRGlzYWJsaW5nIGluYm91bmQgdHJhZmZpYyBvbiBuZXQgZGV2aWNlICglcCkuLi4iLAotCQkgICAgZGV2aWNlLT5leHQpOworCW5ldHZzY19kaXNjb25uZWN0X3ZzcChuZXRfZGV2aWNlKTsKIAogCS8qIFN0b3AgaW5ib3VuZCB0cmFmZmljIGllIHJlY2VpdmVzIGFuZCBzZW5kcyBjb21wbGV0aW9ucyAqLwogCW5ldF9kZXZpY2UgPSByZWxlYXNlX2luYm91bmRfbmV0X2RldmljZShkZXZpY2UpOwogCiAJLyogQXQgdGhpcyBwb2ludCwgbm8gb25lIHNob3VsZCBiZSBhY2Nlc3NpbmcgbmV0RGV2aWNlIGV4Y2VwdCBpbiBoZXJlICovCi0JRFBSSU5UX0lORk8oTkVUVlNDLCAibmV0IGRldmljZSAoJXApIHNhZmUgdG8gcmVtb3ZlIiwgbmV0X2RldmljZSk7CisJZGV2X25vdGljZSgmZGV2aWNlLT5kZXZpY2UsICJuZXQgZGV2aWNlIHNhZmUgdG8gcmVtb3ZlIik7CiAKIAkvKiBOb3csIHdlIGNhbiBjbG9zZSB0aGUgY2hhbm5lbCBzYWZlbHkgKi8KIAl2bWJ1c19jbG9zZShkZXZpY2UtPmNoYW5uZWwpOwpAQCAtODI5LDEzICs2MTUsNiBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogbmV0dnNjX2NsZWFudXAgLSBQZXJmb3JtIGFueSBjbGVhbnVwIHdoZW4gdGhlIGRyaXZlciBpcyByZW1vdmVkCi0gKi8KLXN0YXRpYyB2b2lkIG5ldHZzY19jbGVhbnVwKHN0cnVjdCBodl9kcml2ZXIgKmRydikKLXsKLX0KLQogc3RhdGljIHZvaWQgbmV0dnNjX3NlbmRfY29tcGxldGlvbihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsCiAJCQkJICAgc3RydWN0IHZtcGFja2V0X2Rlc2NyaXB0b3IgKnBhY2tldCkKIHsKQEAgLTg0NSw3ICs2MjQsNyBAQAogCiAJbmV0X2RldmljZSA9IGdldF9pbmJvdW5kX25ldF9kZXZpY2UoZGV2aWNlKTsKIAlpZiAoIW5ldF9kZXZpY2UpIHsKLQkJRFBSSU5UX0VSUihORVRWU0MsICJ1bmFibGUgdG8gZ2V0IG5ldCBkZXZpY2UuLi4iCisJCWRldl9lcnIoJmRldmljZS0+ZGV2aWNlLCAidW5hYmxlIHRvIGdldCBuZXQgZGV2aWNlLi4uIgogCQkJICAgImRldmljZSBiZWluZyBkZXN0cm95ZWQ/Iik7CiAJCXJldHVybjsKIAl9CkBAIC04NTMsOSArNjMyLDYgQEAKIAludnNwX3BhY2tldCA9IChzdHJ1Y3QgbnZzcF9tZXNzYWdlICopKCh1bnNpZ25lZCBsb25nKXBhY2tldCArCiAJCQkocGFja2V0LT5vZmZzZXQ4IDw8IDMpKTsKIAotCURQUklOVF9EQkcoTkVUVlNDLCAic2VuZCBjb21wbGV0aW9uIHBhY2tldCAtIHR5cGUgJWQiLAotCQkgICBudnNwX3BhY2tldC0+aGRyLm1zZ190eXBlKTsKLQogCWlmICgobnZzcF9wYWNrZXQtPmhkci5tc2dfdHlwZSA9PSBOVlNQX01TR19UWVBFX0lOSVRfQ09NUExFVEUpIHx8CiAJICAgIChudnNwX3BhY2tldC0+aGRyLm1zZ190eXBlID09CiAJICAgICBOVlNQX01TRzFfVFlQRV9TRU5EX1JFQ1ZfQlVGX0NPTVBMRVRFKSB8fApAQCAtODY0LDggKzY0MCw3IEBACiAJCS8qIENvcHkgdGhlIHJlc3BvbnNlIGJhY2sgKi8KIAkJbWVtY3B5KCZuZXRfZGV2aWNlLT5jaGFubmVsX2luaXRfcGt0LCBudnNwX3BhY2tldCwKIAkJICAgICAgIHNpemVvZihzdHJ1Y3QgbnZzcF9tZXNzYWdlKSk7Ci0JCW5ldF9kZXZpY2UtPndhaXRfY29uZGl0aW9uID0gMTsKLQkJd2FrZV91cCgmbmV0X2RldmljZS0+Y2hhbm5lbF9pbml0X3dhaXQpOworCQljb21wbGV0ZSgmbmV0X2RldmljZS0+Y2hhbm5lbF9pbml0X3dhaXQpOwogCX0gZWxzZSBpZiAobnZzcF9wYWNrZXQtPmhkci5tc2dfdHlwZSA9PQogCQkgICBOVlNQX01TRzFfVFlQRV9TRU5EX1JORElTX1BLVF9DT01QTEVURSkgewogCQkvKiBHZXQgdGhlIHNlbmQgY29udGV4dCAqLwpAQCAtODc4LDE0ICs2NTMsMTQgQEAKIAogCQlhdG9taWNfZGVjKCZuZXRfZGV2aWNlLT5udW1fb3V0c3RhbmRpbmdfc2VuZHMpOwogCX0gZWxzZSB7Ci0JCURQUklOVF9FUlIoTkVUVlNDLCAiVW5rbm93biBzZW5kIGNvbXBsZXRpb24gcGFja2V0IHR5cGUgLSAiCisJCWRldl9lcnIoJmRldmljZS0+ZGV2aWNlLCAiVW5rbm93biBzZW5kIGNvbXBsZXRpb24gcGFja2V0IHR5cGUtICIKIAkJCSAgICIlZCByZWNlaXZlZCEhIiwgbnZzcF9wYWNrZXQtPmhkci5tc2dfdHlwZSk7CiAJfQogCiAJcHV0X25ldF9kZXZpY2UoZGV2aWNlKTsKIH0KIAotc3RhdGljIGludCBuZXR2c2Nfc2VuZChzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsCitpbnQgbmV0dnNjX3NlbmQoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLAogCQkJc3RydWN0IGh2X25ldHZzY19wYWNrZXQgKnBhY2tldCkKIHsKIAlzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0X2RldmljZTsKQEAgLTg5NSw3ICs2NzAsNyBAQAogCiAJbmV0X2RldmljZSA9IGdldF9vdXRib3VuZF9uZXRfZGV2aWNlKGRldmljZSk7CiAJaWYgKCFuZXRfZGV2aWNlKSB7Ci0JCURQUklOVF9FUlIoTkVUVlNDLCAibmV0IGRldmljZSAoJXApIHNodXR0aW5nIGRvd24uLi4iCisJCWRldl9lcnIoJmRldmljZS0+ZGV2aWNlLCAibmV0IGRldmljZSAoJXApIHNodXR0aW5nIGRvd24uLi4iCiAJCQkgICAiaWdub3Jpbmcgb3V0Ym91bmQgcGFja2V0cyIsIG5ldF9kZXZpY2UpOwogCQlyZXR1cm4gLTI7CiAJfQpAQCAtOTMxLDcgKzcwNiw3IEBACiAJfQogCiAJaWYgKHJldCAhPSAwKQotCQlEUFJJTlRfRVJSKE5FVFZTQywgIlVuYWJsZSB0byBzZW5kIHBhY2tldCAlcCByZXQgJWQiLAorCQlkZXZfZXJyKCZkZXZpY2UtPmRldmljZSwgIlVuYWJsZSB0byBzZW5kIHBhY2tldCAlcCByZXQgJWQiLAogCQkJICAgcGFja2V0LCByZXQpOwogCiAJYXRvbWljX2luYygmbmV0X2RldmljZS0+bnVtX291dHN0YW5kaW5nX3NlbmRzKTsKQEAgLTkzOSw2ICs3MTQsOTggQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBuZXR2c2Nfc2VuZF9yZWN2X2NvbXBsZXRpb24oc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLAorCQkJCQl1NjQgdHJhbnNhY3Rpb25faWQpCit7CisJc3RydWN0IG52c3BfbWVzc2FnZSByZWN2Y29tcE1lc3NhZ2U7CisJaW50IHJldHJpZXMgPSAwOworCWludCByZXQ7CisKKwlyZWN2Y29tcE1lc3NhZ2UuaGRyLm1zZ190eXBlID0KKwkJCQlOVlNQX01TRzFfVFlQRV9TRU5EX1JORElTX1BLVF9DT01QTEVURTsKKworCS8qIEZJWE1FOiBQYXNzIGluIHRoZSBzdGF0dXMgKi8KKwlyZWN2Y29tcE1lc3NhZ2UubXNnLnYxX21zZy5zZW5kX3JuZGlzX3BrdF9jb21wbGV0ZS5zdGF0dXMgPQorCQlOVlNQX1NUQVRfU1VDQ0VTUzsKKworcmV0cnlfc2VuZF9jbXBsdDoKKwkvKiBTZW5kIHRoZSBjb21wbGV0aW9uICovCisJcmV0ID0gdm1idXNfc2VuZHBhY2tldChkZXZpY2UtPmNoYW5uZWwsICZyZWN2Y29tcE1lc3NhZ2UsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBudnNwX21lc3NhZ2UpLCB0cmFuc2FjdGlvbl9pZCwKKwkJCSAgICAgICBWTV9QS1RfQ09NUCwgMCk7CisJaWYgKHJldCA9PSAwKSB7CisJCS8qIHN1Y2Nlc3MgKi8KKwkJLyogbm8tb3AgKi8KKwl9IGVsc2UgaWYgKHJldCA9PSAtMSkgeworCQkvKiBubyBtb3JlIHJvb20uLi53YWl0IGEgYml0IGFuZCBhdHRlbXB0IHRvIHJldHJ5IDMgdGltZXMgKi8KKwkJcmV0cmllcysrOworCQlkZXZfZXJyKCZkZXZpY2UtPmRldmljZSwgInVuYWJsZSB0byBzZW5kIHJlY2VpdmUgY29tcGxldGlvbiBwa3QiCisJCQkiICh0aWQgJWxseCkuLi5yZXRyeWluZyAlZCIsIHRyYW5zYWN0aW9uX2lkLCByZXRyaWVzKTsKKworCQlpZiAocmV0cmllcyA8IDQpIHsKKwkJCXVkZWxheSgxMDApOworCQkJZ290byByZXRyeV9zZW5kX2NtcGx0OworCQl9IGVsc2UgeworCQkJZGV2X2VycigmZGV2aWNlLT5kZXZpY2UsICJ1bmFibGUgdG8gc2VuZCByZWNlaXZlICIKKwkJCQkiY29tcGxldGlvbiBwa3QgKHRpZCAlbGx4KS4uLmdpdmUgdXAgcmV0cnlpbmciLAorCQkJCXRyYW5zYWN0aW9uX2lkKTsKKwkJfQorCX0gZWxzZSB7CisJCWRldl9lcnIoJmRldmljZS0+ZGV2aWNlLCAidW5hYmxlIHRvIHNlbmQgcmVjZWl2ZSAiCisJCQkiY29tcGxldGlvbiBwa3QgLSAlbGx4IiwgdHJhbnNhY3Rpb25faWQpOworCX0KK30KKworLyogU2VuZCBhIHJlY2VpdmUgY29tcGxldGlvbiBwYWNrZXQgdG8gUk5ESVMgZGV2aWNlIChpZSBOZXRWc3ApICovCitzdGF0aWMgdm9pZCBuZXR2c2NfcmVjZWl2ZV9jb21wbGV0aW9uKHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IGh2X25ldHZzY19wYWNrZXQgKnBhY2tldCA9IGNvbnRleHQ7CisJc3RydWN0IGh2X2RldmljZSAqZGV2aWNlID0gKHN0cnVjdCBodl9kZXZpY2UgKilwYWNrZXQtPmRldmljZTsKKwlzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0X2RldmljZTsKKwl1NjQgdHJhbnNhY3Rpb25faWQgPSAwOworCWJvb2wgZnNlbmRfcmVjZWl2ZV9jb21wID0gZmFsc2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qCisJICogRXZlbiB0aG91Z2ggaXQgc2VlbXMgbG9naWNhbCB0byBkbyBhIEdldE91dGJvdW5kTmV0RGV2aWNlKCkgaGVyZSB0bworCSAqIHNlbmQgb3V0IHJlY2VpdmUgY29tcGxldGlvbiwgd2UgYXJlIHVzaW5nIEdldEluYm91bmROZXREZXZpY2UoKQorCSAqIHNpbmNlIHdlIG1heSBoYXZlIGRpc2FibGUgb3V0Ym91bmQgdHJhZmZpYyBhbHJlYWR5LgorCSAqLworCW5ldF9kZXZpY2UgPSBnZXRfaW5ib3VuZF9uZXRfZGV2aWNlKGRldmljZSk7CisJaWYgKCFuZXRfZGV2aWNlKSB7CisJCWRldl9lcnIoJmRldmljZS0+ZGV2aWNlLCAidW5hYmxlIHRvIGdldCBuZXQgZGV2aWNlLi4uIgorCQkJICAgImRldmljZSBiZWluZyBkZXN0cm95ZWQ/Iik7CisJCXJldHVybjsKKwl9CisKKwkvKiBPdmVybG9hZGluZyB1c2Ugb2YgdGhlIGxvY2suICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJm5ldF9kZXZpY2UtPnJlY3ZfcGt0X2xpc3RfbG9jaywgZmxhZ3MpOworCisJcGFja2V0LT54ZmVyX3BhZ2VfcGt0LT5jb3VudC0tOworCisJLyoKKwkgKiBMYXN0IG9uZSBpbiB0aGUgbGluZSB0aGF0IHJlcHJlc2VudCAxIHhmZXIgcGFnZSBwYWNrZXQuCisJICogUmV0dXJuIHRoZSB4ZmVyIHBhZ2UgcGFja2V0IGl0c2VsZiB0byB0aGUgZnJlZWxpc3QKKwkgKi8KKwlpZiAocGFja2V0LT54ZmVyX3BhZ2VfcGt0LT5jb3VudCA9PSAwKSB7CisJCWZzZW5kX3JlY2VpdmVfY29tcCA9IHRydWU7CisJCXRyYW5zYWN0aW9uX2lkID0gcGFja2V0LT5jb21wbGV0aW9uLnJlY3YucmVjdl9jb21wbGV0aW9uX3RpZDsKKwkJbGlzdF9hZGRfdGFpbCgmcGFja2V0LT54ZmVyX3BhZ2VfcGt0LT5saXN0X2VudCwKKwkJCSAgICAgICZuZXRfZGV2aWNlLT5yZWN2X3BrdF9saXN0KTsKKworCX0KKworCS8qIFB1dCB0aGUgcGFja2V0IGJhY2sgKi8KKwlsaXN0X2FkZF90YWlsKCZwYWNrZXQtPmxpc3RfZW50LCAmbmV0X2RldmljZS0+cmVjdl9wa3RfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmV0X2RldmljZS0+cmVjdl9wa3RfbGlzdF9sb2NrLCBmbGFncyk7CisKKwkvKiBTZW5kIGEgcmVjZWl2ZSBjb21wbGV0aW9uIGZvciB0aGUgeGZlciBwYWdlIHBhY2tldCAqLworCWlmIChmc2VuZF9yZWNlaXZlX2NvbXApCisJCW5ldHZzY19zZW5kX3JlY3ZfY29tcGxldGlvbihkZXZpY2UsIHRyYW5zYWN0aW9uX2lkKTsKKworCXB1dF9uZXRfZGV2aWNlKGRldmljZSk7Cit9CisKIHN0YXRpYyB2b2lkIG5ldHZzY19yZWNlaXZlKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSwKIAkJCSAgICBzdHJ1Y3Qgdm1wYWNrZXRfZGVzY3JpcHRvciAqcGFja2V0KQogewpAQCAtOTUzLDExICs4MjAsMTIgQEAKIAlpbnQgaSwgajsKIAlpbnQgY291bnQgPSAwLCBieXRlc19yZW1haW4gPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKIAlMSVNUX0hFQUQobGlzdEhlYWQpOwogCiAJbmV0X2RldmljZSA9IGdldF9pbmJvdW5kX25ldF9kZXZpY2UoZGV2aWNlKTsKIAlpZiAoIW5ldF9kZXZpY2UpIHsKLQkJRFBSSU5UX0VSUihORVRWU0MsICJ1bmFibGUgdG8gZ2V0IG5ldCBkZXZpY2UuLi4iCisJCWRldl9lcnIoJmRldmljZS0+ZGV2aWNlLCAidW5hYmxlIHRvIGdldCBuZXQgZGV2aWNlLi4uIgogCQkJICAgImRldmljZSBiZWluZyBkZXN0cm95ZWQ/Iik7CiAJCXJldHVybjsKIAl9CkBAIC05NjcsNyArODM1LDcgQEAKIAkgKiBwYWNrZXQKIAkgKi8KIAlpZiAocGFja2V0LT50eXBlICE9IFZNX1BLVF9EQVRBX1VTSU5HX1hGRVJfUEFHRVMpIHsKLQkJRFBSSU5UX0VSUihORVRWU0MsICJVbmtub3duIHBhY2tldCB0eXBlIHJlY2VpdmVkIC0gJWQiLAorCQlkZXZfZXJyKCZkZXZpY2UtPmRldmljZSwgIlVua25vd24gcGFja2V0IHR5cGUgcmVjZWl2ZWQgLSAlZCIsCiAJCQkgICBwYWNrZXQtPnR5cGUpOwogCQlwdXRfbmV0X2RldmljZShkZXZpY2UpOwogCQlyZXR1cm47CkBAIC05NzksMjggKzg0NywyMiBAQAogCS8qIE1ha2Ugc3VyZSB0aGlzIGlzIGEgdmFsaWQgbnZzcCBwYWNrZXQgKi8KIAlpZiAobnZzcF9wYWNrZXQtPmhkci5tc2dfdHlwZSAhPQogCSAgICBOVlNQX01TRzFfVFlQRV9TRU5EX1JORElTX1BLVCkgewotCQlEUFJJTlRfRVJSKE5FVFZTQywgIlVua25vd24gbnZzcCBwYWNrZXQgdHlwZSByZWNlaXZlZCAtICVkIiwKLQkJCSAgIG52c3BfcGFja2V0LT5oZHIubXNnX3R5cGUpOworCQlkZXZfZXJyKCZkZXZpY2UtPmRldmljZSwgIlVua25vd24gbnZzcCBwYWNrZXQgdHlwZSByZWNlaXZlZC0iCisJCQkiICVkIiwgbnZzcF9wYWNrZXQtPmhkci5tc2dfdHlwZSk7CiAJCXB1dF9uZXRfZGV2aWNlKGRldmljZSk7CiAJCXJldHVybjsKIAl9CiAKLQlEUFJJTlRfREJHKE5FVFZTQywgIk5WU1AgcGFja2V0IHJlY2VpdmVkIC0gdHlwZSAlZCIsCi0JCSAgIG52c3BfcGFja2V0LT5oZHIubXNnX3R5cGUpOwotCiAJdm14ZmVycGFnZV9wYWNrZXQgPSAoc3RydWN0IHZtdHJhbnNmZXJfcGFnZV9wYWNrZXRfaGVhZGVyICopcGFja2V0OwogCiAJaWYgKHZteGZlcnBhZ2VfcGFja2V0LT54ZmVyX3BhZ2VzZXRfaWQgIT0gTkVUVlNDX1JFQ0VJVkVfQlVGRkVSX0lEKSB7Ci0JCURQUklOVF9FUlIoTkVUVlNDLCAiSW52YWxpZCB4ZmVyIHBhZ2Ugc2V0IGlkIC0gIgorCQlkZXZfZXJyKCZkZXZpY2UtPmRldmljZSwgIkludmFsaWQgeGZlciBwYWdlIHNldCBpZCAtICIKIAkJCSAgICJleHBlY3RpbmcgJXggZ290ICV4IiwgTkVUVlNDX1JFQ0VJVkVfQlVGRkVSX0lELAogCQkJICAgdm14ZmVycGFnZV9wYWNrZXQtPnhmZXJfcGFnZXNldF9pZCk7CiAJCXB1dF9uZXRfZGV2aWNlKGRldmljZSk7CiAJCXJldHVybjsKIAl9CiAKLQlEUFJJTlRfREJHKE5FVFZTQywgInhmZXIgcGFnZSAtIHJhbmdlIGNvdW50ICVkIiwKLQkJICAgdm14ZmVycGFnZV9wYWNrZXQtPnJhbmdlX2NudCk7Ci0KIAkvKgogCSAqIEdyYWIgZnJlZSBwYWNrZXRzIChyYW5nZSBjb3VudCArIDEpIHRvIHJlcHJlc2VudCB0aGlzIHhmZXIKIAkgKiBwYWdlIHBhY2tldC4gKzEgdG8gcmVwcmVzZW50IHRoZSB4ZmVyIHBhZ2UgcGFja2V0IGl0c2VsZi4KQEAgLTEwMjEsOSArODgzLDkgQEAKIAkgKiBzb21lIG9mIHRoZSB4ZmVyIHBhZ2UgcGFja2V0IHJhbmdlcy4uLgogCSAqLwogCWlmIChjb3VudCA8IDIpIHsKLQkJRFBSSU5UX0VSUihORVRWU0MsICJHb3Qgb25seSAlZCBuZXR2c2MgcGt0Li4ubmVlZGVkICVkIHBrdHMuICIKLQkJCSAgICJEcm9wcGluZyB0aGlzIHhmZXIgcGFnZSBwYWNrZXQgY29tcGxldGVseSEiLAotCQkJICAgY291bnQsIHZteGZlcnBhZ2VfcGFja2V0LT5yYW5nZV9jbnQgKyAxKTsKKwkJZGV2X2VycigmZGV2aWNlLT5kZXZpY2UsICJHb3Qgb25seSAlZCBuZXR2c2MgcGt0Li4ubmVlZGVkICIKKwkJCSIlZCBwa3RzLiBEcm9wcGluZyB0aGlzIHhmZXIgcGFnZSBwYWNrZXQgY29tcGxldGVseSEiLAorCQkJY291bnQsIHZteGZlcnBhZ2VfcGFja2V0LT5yYW5nZV9jbnQgKyAxKTsKIAogCQkvKiBSZXR1cm4gaXQgdG8gdGhlIGZyZWVsaXN0ICovCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZuZXRfZGV2aWNlLT5yZWN2X3BrdF9saXN0X2xvY2ssIGZsYWdzKTsKQEAgLTEwNDksOSArOTExLDkgQEAKIAl4ZmVycGFnZV9wYWNrZXQtPmNvdW50ID0gY291bnQgLSAxOwogCiAJaWYgKHhmZXJwYWdlX3BhY2tldC0+Y291bnQgIT0gdm14ZmVycGFnZV9wYWNrZXQtPnJhbmdlX2NudCkgewotCQlEUFJJTlRfSU5GTyhORVRWU0MsICJOZWVkZWQgJWQgbmV0dnNjIHBrdHMgdG8gc2F0aXN5IHRoaXMgeGZlciAiCi0JCQkgICAgInBhZ2UuLi5nb3QgJWQiLCB2bXhmZXJwYWdlX3BhY2tldC0+cmFuZ2VfY250LAotCQkJICAgIHhmZXJwYWdlX3BhY2tldC0+Y291bnQpOworCQlkZXZfZXJyKCZkZXZpY2UtPmRldmljZSwgIk5lZWRlZCAlZCBuZXR2c2MgcGt0cyB0byBzYXRpc3kgIgorCQkJInRoaXMgeGZlciBwYWdlLi4uZ290ICVkIiwKKwkJCXZteGZlcnBhZ2VfcGFja2V0LT5yYW5nZV9jbnQsIHhmZXJwYWdlX3BhY2tldC0+Y291bnQpOwogCX0KIAogCS8qIEVhY2ggcmFuZ2UgcmVwcmVzZW50cyAxIFJORElTIHBrdCB0aGF0IGNvbnRhaW5zIDEgZXRoZXJuZXQgZnJhbWUgKi8KQEAgLTExMTcsMTcgKzk3OSw5IEBACiAJCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0JCURQUklOVF9EQkcoTkVUVlNDLCAiWyVkXSAtIChhYnMgb2Zmc2V0ICV1IGxlbiAldSkgPT4gIgotCQkJICAgIihwZm4gJWxseCwgb2Zmc2V0ICV1LCBsZW4gJXUpIiwgaSwKLQkJCSAgIHZteGZlcnBhZ2VfcGFja2V0LT5yYW5nZXNbaV0uYnl0ZV9vZmZzZXQsCi0JCQkgICB2bXhmZXJwYWdlX3BhY2tldC0+cmFuZ2VzW2ldLmJ5dGVfY291bnQsCi0JCQkgICBuZXR2c2NfcGFja2V0LT5wYWdlX2J1ZlswXS5wZm4sCi0JCQkgICBuZXR2c2NfcGFja2V0LT5wYWdlX2J1ZlswXS5vZmZzZXQsCi0JCQkgICBuZXR2c2NfcGFja2V0LT5wYWdlX2J1ZlswXS5sZW4pOwogCiAJCS8qIFBhc3MgaXQgdG8gdGhlIHVwcGVyIGxheWVyICovCi0JCSgoc3RydWN0IG5ldHZzY19kcml2ZXIgKilkZXZpY2UtPmRydiktPgotCQkJcmVjdl9jYihkZXZpY2UsIG5ldHZzY19wYWNrZXQpOworCQlybmRpc19maWx0ZXJfcmVjZWl2ZShkZXZpY2UsIG5ldHZzY19wYWNrZXQpOwogCiAJCW5ldHZzY19yZWNlaXZlX2NvbXBsZXRpb24obmV0dnNjX3BhY2tldC0+CiAJCQkJY29tcGxldGlvbi5yZWN2LnJlY3ZfY29tcGxldGlvbl9jdHgpOwpAQCAtMTEzNiwxMDEgKzk5MCw2IEBACiAJcHV0X25ldF9kZXZpY2UoZGV2aWNlKTsKIH0KIAotc3RhdGljIHZvaWQgbmV0dnNjX3NlbmRfcmVjdl9jb21wbGV0aW9uKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSwKLQkJCQkJdTY0IHRyYW5zYWN0aW9uX2lkKQotewotCXN0cnVjdCBudnNwX21lc3NhZ2UgcmVjdmNvbXBNZXNzYWdlOwotCWludCByZXRyaWVzID0gMDsKLQlpbnQgcmV0OwotCi0JRFBSSU5UX0RCRyhORVRWU0MsICJTZW5kaW5nIHJlY2VpdmUgY29tcGxldGlvbiBwa3QgLSAlbGx4IiwKLQkJICAgdHJhbnNhY3Rpb25faWQpOwotCi0JcmVjdmNvbXBNZXNzYWdlLmhkci5tc2dfdHlwZSA9Ci0JCQkJTlZTUF9NU0cxX1RZUEVfU0VORF9STkRJU19QS1RfQ09NUExFVEU7Ci0KLQkvKiBGSVhNRTogUGFzcyBpbiB0aGUgc3RhdHVzICovCi0JcmVjdmNvbXBNZXNzYWdlLm1zZy52MV9tc2cuc2VuZF9ybmRpc19wa3RfY29tcGxldGUuc3RhdHVzID0KLQkJTlZTUF9TVEFUX1NVQ0NFU1M7Ci0KLXJldHJ5X3NlbmRfY21wbHQ6Ci0JLyogU2VuZCB0aGUgY29tcGxldGlvbiAqLwotCXJldCA9IHZtYnVzX3NlbmRwYWNrZXQoZGV2aWNlLT5jaGFubmVsLCAmcmVjdmNvbXBNZXNzYWdlLAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgbnZzcF9tZXNzYWdlKSwgdHJhbnNhY3Rpb25faWQsCi0JCQkgICAgICAgVk1fUEtUX0NPTVAsIDApOwotCWlmIChyZXQgPT0gMCkgewotCQkvKiBzdWNjZXNzICovCi0JCS8qIG5vLW9wICovCi0JfSBlbHNlIGlmIChyZXQgPT0gLTEpIHsKLQkJLyogbm8gbW9yZSByb29tLi4ud2FpdCBhIGJpdCBhbmQgYXR0ZW1wdCB0byByZXRyeSAzIHRpbWVzICovCi0JCXJldHJpZXMrKzsKLQkJRFBSSU5UX0VSUihORVRWU0MsICJ1bmFibGUgdG8gc2VuZCByZWNlaXZlIGNvbXBsZXRpb24gcGt0ICIKLQkJCSAgICIodGlkICVsbHgpLi4ucmV0cnlpbmcgJWQiLCB0cmFuc2FjdGlvbl9pZCwgcmV0cmllcyk7Ci0KLQkJaWYgKHJldHJpZXMgPCA0KSB7Ci0JCQl1ZGVsYXkoMTAwKTsKLQkJCWdvdG8gcmV0cnlfc2VuZF9jbXBsdDsKLQkJfSBlbHNlIHsKLQkJCURQUklOVF9FUlIoTkVUVlNDLCAidW5hYmxlIHRvIHNlbmQgcmVjZWl2ZSBjb21wbGV0aW9uICIKLQkJCQkgICJwa3QgKHRpZCAlbGx4KS4uLmdpdmUgdXAgcmV0cnlpbmciLAotCQkJCSAgdHJhbnNhY3Rpb25faWQpOwotCQl9Ci0JfSBlbHNlIHsKLQkJRFBSSU5UX0VSUihORVRWU0MsICJ1bmFibGUgdG8gc2VuZCByZWNlaXZlIGNvbXBsZXRpb24gcGt0IC0gIgotCQkJICAgIiVsbHgiLCB0cmFuc2FjdGlvbl9pZCk7Ci0JfQotfQotCi0vKiBTZW5kIGEgcmVjZWl2ZSBjb21wbGV0aW9uIHBhY2tldCB0byBSTkRJUyBkZXZpY2UgKGllIE5ldFZzcCkgKi8KLXN0YXRpYyB2b2lkIG5ldHZzY19yZWNlaXZlX2NvbXBsZXRpb24odm9pZCAqY29udGV4dCkKLXsKLQlzdHJ1Y3QgaHZfbmV0dnNjX3BhY2tldCAqcGFja2V0ID0gY29udGV4dDsKLQlzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UgPSAoc3RydWN0IGh2X2RldmljZSAqKXBhY2tldC0+ZGV2aWNlOwotCXN0cnVjdCBuZXR2c2NfZGV2aWNlICpuZXRfZGV2aWNlOwotCXU2NCB0cmFuc2FjdGlvbl9pZCA9IDA7Ci0JYm9vbCBmc2VuZF9yZWNlaXZlX2NvbXAgPSBmYWxzZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyoKLQkgKiBFdmVuIHRob3VnaCBpdCBzZWVtcyBsb2dpY2FsIHRvIGRvIGEgR2V0T3V0Ym91bmROZXREZXZpY2UoKSBoZXJlIHRvCi0JICogc2VuZCBvdXQgcmVjZWl2ZSBjb21wbGV0aW9uLCB3ZSBhcmUgdXNpbmcgR2V0SW5ib3VuZE5ldERldmljZSgpCi0JICogc2luY2Ugd2UgbWF5IGhhdmUgZGlzYWJsZSBvdXRib3VuZCB0cmFmZmljIGFscmVhZHkuCi0JICovCi0JbmV0X2RldmljZSA9IGdldF9pbmJvdW5kX25ldF9kZXZpY2UoZGV2aWNlKTsKLQlpZiAoIW5ldF9kZXZpY2UpIHsKLQkJRFBSSU5UX0VSUihORVRWU0MsICJ1bmFibGUgdG8gZ2V0IG5ldCBkZXZpY2UuLi4iCi0JCQkgICAiZGV2aWNlIGJlaW5nIGRlc3Ryb3llZD8iKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIE92ZXJsb2FkaW5nIHVzZSBvZiB0aGUgbG9jay4gKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbmV0X2RldmljZS0+cmVjdl9wa3RfbGlzdF9sb2NrLCBmbGFncyk7Ci0KLQlwYWNrZXQtPnhmZXJfcGFnZV9wa3QtPmNvdW50LS07Ci0KLQkvKgotCSAqIExhc3Qgb25lIGluIHRoZSBsaW5lIHRoYXQgcmVwcmVzZW50IDEgeGZlciBwYWdlIHBhY2tldC4KLQkgKiBSZXR1cm4gdGhlIHhmZXIgcGFnZSBwYWNrZXQgaXRzZWxmIHRvIHRoZSBmcmVlbGlzdAotCSAqLwotCWlmIChwYWNrZXQtPnhmZXJfcGFnZV9wa3QtPmNvdW50ID09IDApIHsKLQkJZnNlbmRfcmVjZWl2ZV9jb21wID0gdHJ1ZTsKLQkJdHJhbnNhY3Rpb25faWQgPSBwYWNrZXQtPmNvbXBsZXRpb24ucmVjdi5yZWN2X2NvbXBsZXRpb25fdGlkOwotCQlsaXN0X2FkZF90YWlsKCZwYWNrZXQtPnhmZXJfcGFnZV9wa3QtPmxpc3RfZW50LAotCQkJICAgICAgJm5ldF9kZXZpY2UtPnJlY3ZfcGt0X2xpc3QpOwotCi0JfQotCi0JLyogUHV0IHRoZSBwYWNrZXQgYmFjayAqLwotCWxpc3RfYWRkX3RhaWwoJnBhY2tldC0+bGlzdF9lbnQsICZuZXRfZGV2aWNlLT5yZWN2X3BrdF9saXN0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXRfZGV2aWNlLT5yZWN2X3BrdF9saXN0X2xvY2ssIGZsYWdzKTsKLQotCS8qIFNlbmQgYSByZWNlaXZlIGNvbXBsZXRpb24gZm9yIHRoZSB4ZmVyIHBhZ2UgcGFja2V0ICovCi0JaWYgKGZzZW5kX3JlY2VpdmVfY29tcCkKLQkJbmV0dnNjX3NlbmRfcmVjdl9jb21wbGV0aW9uKGRldmljZSwgdHJhbnNhY3Rpb25faWQpOwotCi0JcHV0X25ldF9kZXZpY2UoZGV2aWNlKTsKLX0KLQogc3RhdGljIHZvaWQgbmV0dnNjX2NoYW5uZWxfY2Iodm9pZCAqY29udGV4dCkKIHsKIAlpbnQgcmV0OwpAQCAtMTI1MSw3ICsxMDEwLDcgQEAKIAogCW5ldF9kZXZpY2UgPSBnZXRfaW5ib3VuZF9uZXRfZGV2aWNlKGRldmljZSk7CiAJaWYgKCFuZXRfZGV2aWNlKSB7Ci0JCURQUklOVF9FUlIoTkVUVlNDLCAibmV0IGRldmljZSAoJXApIHNodXR0aW5nIGRvd24uLi4iCisJCWRldl9lcnIoJmRldmljZS0+ZGV2aWNlLCAibmV0IGRldmljZSAoJXApIHNodXR0aW5nIGRvd24uLi4iCiAJCQkgICAiaWdub3JpbmcgaW5ib3VuZCBwYWNrZXRzIiwgbmV0X2RldmljZSk7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTEyNjEsOSArMTAyMCw2IEBACiAJCQkJCSAgICZieXRlc19yZWN2ZCwgJnJlcXVlc3RfaWQpOwogCQlpZiAocmV0ID09IDApIHsKIAkJCWlmIChieXRlc19yZWN2ZCA+IDApIHsKLQkJCQlEUFJJTlRfREJHKE5FVFZTQywgInJlY2VpdmUgJWQgYnl0ZXMsIHRpZCAlbGx4IiwKLQkJCQkJICAgYnl0ZXNfcmVjdmQsIHJlcXVlc3RfaWQpOwotCiAJCQkJZGVzYyA9IChzdHJ1Y3Qgdm1wYWNrZXRfZGVzY3JpcHRvciAqKWJ1ZmZlcjsKIAkJCQlzd2l0Y2ggKGRlc2MtPnR5cGUpIHsKIAkJCQljYXNlIFZNX1BLVF9DT01QOgpAQCAtMTI3NSw3ICsxMDMxLDcgQEAKIAkJCQkJYnJlYWs7CiAKIAkJCQlkZWZhdWx0OgotCQkJCQlEUFJJTlRfRVJSKE5FVFZTQywKKwkJCQkJZGV2X2VycigmZGV2aWNlLT5kZXZpY2UsCiAJCQkJCQkgICAidW5oYW5kbGVkIHBhY2tldCB0eXBlICVkLCAiCiAJCQkJCQkgICAidGlkICVsbHggbGVuICVkXG4iLAogCQkJCQkJICAgZGVzYy0+dHlwZSwgcmVxdWVzdF9pZCwKQEAgLTEzMDQsNyArMTA2MCw3IEBACiAJCQlidWZmZXIgPSBrbWFsbG9jKGJ5dGVzX3JlY3ZkLCBHRlBfQVRPTUlDKTsKIAkJCWlmIChidWZmZXIgPT0gTlVMTCkgewogCQkJCS8qIFRyeSBhZ2FpbiBuZXh0IHRpbWUgYXJvdW5kICovCi0JCQkJRFBSSU5UX0VSUihORVRWU0MsCisJCQkJZGV2X2VycigmZGV2aWNlLT5kZXZpY2UsCiAJCQkJCSAgICJ1bmFibGUgdG8gYWxsb2NhdGUgYnVmZmVyIG9mIHNpemUgIgogCQkJCQkgICAiKCVkKSEhIiwgYnl0ZXNfcmVjdmQpOwogCQkJCWJyZWFrOwpAQCAtMTMxOSwzICsxMDc1LDEwMiBAQAogCWtmcmVlKGJ1ZmZlcik7CiAJcmV0dXJuOwogfQorCisvKgorICogbmV0dnNjX2RldmljZV9hZGQgLSBDYWxsYmFjayB3aGVuIHRoZSBkZXZpY2UgYmVsb25naW5nIHRvIHRoaXMKKyAqIGRyaXZlciBpcyBhZGRlZAorICovCitpbnQgbmV0dnNjX2RldmljZV9hZGQoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLCB2b2lkICphZGRpdGlvbmFsX2luZm8pCit7CisJaW50IHJldCA9IDA7CisJaW50IGk7CisJaW50IHJpbmdfc2l6ZSA9CisJKChzdHJ1Y3QgbmV0dnNjX2RldmljZV9pbmZvICopYWRkaXRpb25hbF9pbmZvKS0+cmluZ19zaXplOworCXN0cnVjdCBuZXR2c2NfZGV2aWNlICpuZXRfZGV2aWNlOworCXN0cnVjdCBodl9uZXR2c2NfcGFja2V0ICpwYWNrZXQsICpwb3M7CisKKwluZXRfZGV2aWNlID0gYWxsb2NfbmV0X2RldmljZShkZXZpY2UpOworCWlmICghbmV0X2RldmljZSkgeworCQlyZXQgPSAtMTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCS8qIEluaXRpYWxpemUgdGhlIE5ldFZTQyBjaGFubmVsIGV4dGVuc2lvbiAqLworCW5ldF9kZXZpY2UtPnJlY3ZfYnVmX3NpemUgPSBORVRWU0NfUkVDRUlWRV9CVUZGRVJfU0laRTsKKwlzcGluX2xvY2tfaW5pdCgmbmV0X2RldmljZS0+cmVjdl9wa3RfbGlzdF9sb2NrKTsKKworCW5ldF9kZXZpY2UtPnNlbmRfYnVmX3NpemUgPSBORVRWU0NfU0VORF9CVUZGRVJfU0laRTsKKworCUlOSVRfTElTVF9IRUFEKCZuZXRfZGV2aWNlLT5yZWN2X3BrdF9saXN0KTsKKworCWZvciAoaSA9IDA7IGkgPCBORVRWU0NfUkVDRUlWRV9QQUNLRVRMSVNUX0NPVU5UOyBpKyspIHsKKwkJcGFja2V0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGh2X25ldHZzY19wYWNrZXQpICsKKwkJCQkgKE5FVFZTQ19SRUNFSVZFX1NHX0NPVU5UICoKKwkJCQkgIHNpemVvZihzdHJ1Y3QgaHZfcGFnZV9idWZmZXIpKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcGFja2V0KQorCQkJYnJlYWs7CisKKwkJbGlzdF9hZGRfdGFpbCgmcGFja2V0LT5saXN0X2VudCwKKwkJCSAgICAgICZuZXRfZGV2aWNlLT5yZWN2X3BrdF9saXN0KTsKKwl9CisJaW5pdF9jb21wbGV0aW9uKCZuZXRfZGV2aWNlLT5jaGFubmVsX2luaXRfd2FpdCk7CisKKwkvKiBPcGVuIHRoZSBjaGFubmVsICovCisJcmV0ID0gdm1idXNfb3BlbihkZXZpY2UtPmNoYW5uZWwsIHJpbmdfc2l6ZSAqIFBBR0VfU0laRSwKKwkJCSByaW5nX3NpemUgKiBQQUdFX1NJWkUsIE5VTEwsIDAsCisJCQkgbmV0dnNjX2NoYW5uZWxfY2IsIGRldmljZSk7CisKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2VycigmZGV2aWNlLT5kZXZpY2UsICJ1bmFibGUgdG8gb3BlbiBjaGFubmVsOiAlZCIsIHJldCk7CisJCXJldCA9IC0xOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJLyogQ2hhbm5lbCBpcyBvcGVuZWQgKi8KKwlwcl9pbmZvKCJodl9uZXR2c2MgY2hhbm5lbCBvcGVuZWQgc3VjY2Vzc2Z1bGx5Iik7CisKKwkvKiBDb25uZWN0IHdpdGggdGhlIE5ldFZzcCAqLworCXJldCA9IG5ldHZzY19jb25uZWN0X3ZzcChkZXZpY2UpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKCZkZXZpY2UtPmRldmljZSwKKwkJCSJ1bmFibGUgdG8gY29ubmVjdCB0byBOZXRWU1AgLSAlZCIsIHJldCk7CisJCXJldCA9IC0xOworCQlnb3RvIGNsb3NlOworCX0KKworCXJldHVybiByZXQ7CisKK2Nsb3NlOgorCS8qIE5vdywgd2UgY2FuIGNsb3NlIHRoZSBjaGFubmVsIHNhZmVseSAqLworCXZtYnVzX2Nsb3NlKGRldmljZS0+Y2hhbm5lbCk7CisKK2NsZWFudXA6CisKKwlpZiAobmV0X2RldmljZSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGFja2V0LCBwb3MsCisJCQkJCSAmbmV0X2RldmljZS0+cmVjdl9wa3RfbGlzdCwKKwkJCQkJIGxpc3RfZW50KSB7CisJCQlsaXN0X2RlbCgmcGFja2V0LT5saXN0X2VudCk7CisJCQlrZnJlZShwYWNrZXQpOworCQl9CisKKwkJcmVsZWFzZV9vdXRib3VuZF9uZXRfZGV2aWNlKGRldmljZSk7CisJCXJlbGVhc2VfaW5ib3VuZF9uZXRfZGV2aWNlKGRldmljZSk7CisKKwkJZnJlZV9uZXRfZGV2aWNlKG5ldF9kZXZpY2UpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBuZXR2c2NfaW5pdGlhbGl6ZSAtIE1haW4gZW50cnkgcG9pbnQKKyAqLworaW50IG5ldHZzY19pbml0aWFsaXplKHN0cnVjdCBodl9kcml2ZXIgKmRydikKK3sKKworCWRydi0+bmFtZSA9IGRyaXZlcl9uYW1lOworCW1lbWNweSgmZHJ2LT5kZXZfdHlwZSwgJm5ldHZzY19kZXZpY2VfdHlwZSwgc2l6ZW9mKHN0cnVjdCBodl9ndWlkKSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2MuaCBiL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDVkMjRiOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMzIgKzAsMCBAQAotLyoKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDksIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKLSAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAotICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZQotICogUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCi0gKgotICogQXV0aG9yczoKLSAqICAgSGFpeWFuZyBaaGFuZyA8aGFpeWFuZ3pAbWljcm9zb2Z0LmNvbT4KLSAqICAgSGFuayBKYW5zc2VuICA8aGphbnNzZW5AbWljcm9zb2Z0LmNvbT4KLSAqCi0gKi8KLQotCi0jaWZuZGVmIF9ORVRWU0NfSF8KLSNkZWZpbmUgX05FVFZTQ19IXwotCi0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgInZtYnVzX3BhY2tldF9mb3JtYXQuaCIKLSNpbmNsdWRlICJ2bWJ1c19jaGFubmVsX2ludGVyZmFjZS5oIgotI2luY2x1ZGUgIm5ldHZzY19hcGkuaCIKLQotCi0jZGVmaW5lIE5WU1BfSU5WQUxJRF9QUk9UT0NPTF9WRVJTSU9OCSgodTMyKTB4RkZGRkZGRkYpCi0KLSNkZWZpbmUgTlZTUF9QUk9UT0NPTF9WRVJTSU9OXzEJCTIKLSNkZWZpbmUgTlZTUF9NSU5fUFJPVE9DT0xfVkVSU0lPTglOVlNQX1BST1RPQ09MX1ZFUlNJT05fMQotI2RlZmluZSBOVlNQX01BWF9QUk9UT0NPTF9WRVJTSU9OCU5WU1BfUFJPVE9DT0xfVkVSU0lPTl8xCi0KLWVudW0gewotCU5WU1BfTVNHX1RZUEVfTk9ORSA9IDAsCi0KLQkvKiBJbml0IE1lc3NhZ2VzICovCi0JTlZTUF9NU0dfVFlQRV9JTklUCQkJPSAxLAotCU5WU1BfTVNHX1RZUEVfSU5JVF9DT01QTEVURQkJPSAyLAotCi0JTlZTUF9WRVJTSU9OX01TR19TVEFSVAkJCT0gMTAwLAotCi0JLyogVmVyc2lvbiAxIE1lc3NhZ2VzICovCi0JTlZTUF9NU0cxX1RZUEVfU0VORF9ORElTX1ZFUgkJPSBOVlNQX1ZFUlNJT05fTVNHX1NUQVJULAotCi0JTlZTUF9NU0cxX1RZUEVfU0VORF9SRUNWX0JVRiwKLQlOVlNQX01TRzFfVFlQRV9TRU5EX1JFQ1ZfQlVGX0NPTVBMRVRFLAotCU5WU1BfTVNHMV9UWVBFX1JFVk9LRV9SRUNWX0JVRiwKLQotCU5WU1BfTVNHMV9UWVBFX1NFTkRfU0VORF9CVUYsCi0JTlZTUF9NU0cxX1RZUEVfU0VORF9TRU5EX0JVRl9DT01QTEVURSwKLQlOVlNQX01TRzFfVFlQRV9SRVZPS0VfU0VORF9CVUYsCi0KLQlOVlNQX01TRzFfVFlQRV9TRU5EX1JORElTX1BLVCwKLQlOVlNQX01TRzFfVFlQRV9TRU5EX1JORElTX1BLVF9DT01QTEVURSwKLQotCS8qCi0JICogVGhpcyBzaG91bGQgYmUgc2V0IHRvIHRoZSBudW1iZXIgb2YgbWVzc2FnZXMgZm9yIHRoZSB2ZXJzaW9uIHdpdGgKLQkgKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgbWVzc2FnZXMuCi0JICovCi0JTlZTUF9OVU1fTVNHX1BFUl9WRVJTSU9OCQk9IDksCi19OwotCi1lbnVtIHsKLQlOVlNQX1NUQVRfTk9ORSA9IDAsCi0JTlZTUF9TVEFUX1NVQ0NFU1MsCi0JTlZTUF9TVEFUX0ZBSUwsCi0JTlZTUF9TVEFUX1BST1RPQ09MX1RPT19ORVcsCi0JTlZTUF9TVEFUX1BST1RPQ09MX1RPT19PTEQsCi0JTlZTUF9TVEFUX0lOVkFMSURfUk5ESVNfUEtULAotCU5WU1BfU1RBVF9CVVNZLAotCU5WU1BfU1RBVF9NQVgsCi19OwotCi1zdHJ1Y3QgbnZzcF9tZXNzYWdlX2hlYWRlciB7Ci0JdTMyIG1zZ190eXBlOwotfTsKLQotLyogSW5pdCBNZXNzYWdlcyAqLwotCi0vKgotICogVGhpcyBtZXNzYWdlIGlzIHVzZWQgYnkgdGhlIFZTQyB0byBpbml0aWFsaXplIHRoZSBjaGFubmVsIGFmdGVyIHRoZSBjaGFubmVscwotICogaGFzIGJlZW4gb3BlbmVkLiBUaGlzIG1lc3NhZ2Ugc2hvdWxkIG5ldmVyIGluY2x1ZGUgYW55dGhpbmcgb3RoZXIgdGhlbgotICogdmVyc2lvbmluZyAoaS5lLiB0aGlzIG1lc3NhZ2Ugd2lsbCBiZSB0aGUgc2FtZSBmb3IgZXZlcikuCi0gKi8KLXN0cnVjdCBudnNwX21lc3NhZ2VfaW5pdCB7Ci0JdTMyIG1pbl9wcm90b2NvbF92ZXI7Ci0JdTMyIG1heF9wcm90b2NvbF92ZXI7Ci19IF9fcGFja2VkOwotCi0vKgotICogVGhpcyBtZXNzYWdlIGlzIHVzZWQgYnkgdGhlIFZTUCB0byBjb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlCi0gKiBjaGFubmVsLiBUaGlzIG1lc3NhZ2Ugc2hvdWxkIG5ldmVyIGluY2x1ZGUgYW55dGhpbmcgb3RoZXIgdGhlbiB2ZXJzaW9uaW5nCi0gKiAoaS5lLiB0aGlzIG1lc3NhZ2Ugd2lsbCBiZSB0aGUgc2FtZSBmb3IgZXZlcikuCi0gKi8KLXN0cnVjdCBudnNwX21lc3NhZ2VfaW5pdF9jb21wbGV0ZSB7Ci0JdTMyIG5lZ290aWF0ZWRfcHJvdG9jb2xfdmVyOwotCXUzMiBtYXhfbWRsX2NoYWluX2xlbjsKLQl1MzIgc3RhdHVzOwotfSBfX3BhY2tlZDsKLQotdW5pb24gbnZzcF9tZXNzYWdlX2luaXRfdWJlciB7Ci0Jc3RydWN0IG52c3BfbWVzc2FnZV9pbml0IGluaXQ7Ci0Jc3RydWN0IG52c3BfbWVzc2FnZV9pbml0X2NvbXBsZXRlIGluaXRfY29tcGxldGU7Ci19IF9fcGFja2VkOwotCi0vKiBWZXJzaW9uIDEgTWVzc2FnZXMgKi8KLQotLyoKLSAqIFRoaXMgbWVzc2FnZSBpcyB1c2VkIGJ5IHRoZSBWU0MgdG8gc2VuZCB0aGUgTkRJUyB2ZXJzaW9uIHRvIHRoZSBWU1AuIFRoZSBWU1AKLSAqIGNhbiB1c2UgdGhpcyBpbmZvcm1hdGlvbiB3aGVuIGhhbmRsaW5nIE9JRHMgc2VudCBieSB0aGUgVlNDLgotICovCi1zdHJ1Y3QgbnZzcF8xX21lc3NhZ2Vfc2VuZF9uZGlzX3ZlcnNpb24gewotCXUzMiBuZGlzX21ham9yX3ZlcjsKLQl1MzIgbmRpc19taW5vcl92ZXI7Ci19IF9fcGFja2VkOwotCi0vKgotICogVGhpcyBtZXNzYWdlIGlzIHVzZWQgYnkgdGhlIFZTQyB0byBzZW5kIGEgcmVjZWl2ZSBidWZmZXIgdG8gdGhlIFZTUC4gVGhlIFZTUAotICogY2FuIHRoZW4gdXNlIHRoZSByZWNlaXZlIGJ1ZmZlciB0byBzZW5kIGRhdGEgdG8gdGhlIFZTQy4KLSAqLwotc3RydWN0IG52c3BfMV9tZXNzYWdlX3NlbmRfcmVjZWl2ZV9idWZmZXIgewotCXUzMiBncGFkbF9oYW5kbGU7Ci0JdTE2IGlkOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IG52c3BfMV9yZWNlaXZlX2J1ZmZlcl9zZWN0aW9uIHsKLQl1MzIgb2Zmc2V0OwotCXUzMiBzdWJfYWxsb2Nfc2l6ZTsKLQl1MzIgbnVtX3N1Yl9hbGxvY3M7Ci0JdTMyIGVuZF9vZmZzZXQ7Ci19IF9fcGFja2VkOwotCi0vKgotICogVGhpcyBtZXNzYWdlIGlzIHVzZWQgYnkgdGhlIFZTUCB0byBhY2tub3dsZWRnZSBhIHJlY2VpdmUgYnVmZmVyIHNlbmQgYnkgdGhlCi0gKiBWU0MuIFRoaXMgbWVzc2FnZSBtdXN0IGJlIHNlbnQgYnkgdGhlIFZTUCBiZWZvcmUgdGhlIFZTUCB1c2VzIHRoZSByZWNlaXZlCi0gKiBidWZmZXIuCi0gKi8KLXN0cnVjdCBudnNwXzFfbWVzc2FnZV9zZW5kX3JlY2VpdmVfYnVmZmVyX2NvbXBsZXRlIHsKLQl1MzIgc3RhdHVzOwotCXUzMiBudW1fc2VjdGlvbnM7Ci0KLQkvKgotCSAqIFRoZSByZWNlaXZlIGJ1ZmZlciBpcyBzcGxpdCBpbnRvIHR3byBwYXJ0cywgYSBsYXJnZSBzdWJhbGxvY2F0aW9uCi0JICogc2VjdGlvbiBhbmQgYSBzbWFsbCBzdWJhbGxvY2F0aW9uIHNlY3Rpb24uIFRoZXNlIHNlY3Rpb25zIGFyZSB0aGVuCi0JICogc3ViYWxsb2NhdGVkIGJ5IGEgY2VydGFpbiBzaXplLgotCSAqLwotCi0JLyoKLQkgKiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBicmVhayB1cCBvZiB0aGUgcmVjZWl2ZSBidWZmZXIgaGFzIDYKLQkgKiBsYXJnZSBzdWJhbGxvY2F0aW9ucyBhbmQgMTAgc21hbGwgc3ViYWxsb2NhdGlvbnMuCi0JICovCi0KLQkvKgotCSAqIHwgICAgICAgICAgICBMYXJnZSBTZWN0aW9uICAgICAgICAgIHwgIHwgICBTbWFsbCBTZWN0aW9uICAgfAotCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqIHwgICAgIHwgICAgIHwgICAgIHwgICAgIHwgICAgIHwgICAgIHwgIHwgfCB8IHwgfCB8IHwgfCB8IHwgfAotCSAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLQkgKiAgTGFyZ2VPZmZzZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgU21hbGxPZmZzZXQKLQkgKi8KLQotCXN0cnVjdCBudnNwXzFfcmVjZWl2ZV9idWZmZXJfc2VjdGlvbiBzZWN0aW9uc1sxXTsKLX0gX19wYWNrZWQ7Ci0KLS8qCi0gKiBUaGlzIG1lc3NhZ2UgaXMgc2VudCBieSB0aGUgVlNDIHRvIHJldm9rZSB0aGUgcmVjZWl2ZSBidWZmZXIuICBBZnRlciB0aGUgVlNQCi0gKiBjb21wbGV0ZXMgdGhpcyB0cmFuc2FjdGlvbiwgdGhlIHZzcCBzaG91bGQgbmV2ZXIgdXNlIHRoZSByZWNlaXZlIGJ1ZmZlcgotICogYWdhaW4uCi0gKi8KLXN0cnVjdCBudnNwXzFfbWVzc2FnZV9yZXZva2VfcmVjZWl2ZV9idWZmZXIgewotCXUxNiBpZDsKLX07Ci0KLS8qCi0gKiBUaGlzIG1lc3NhZ2UgaXMgdXNlZCBieSB0aGUgVlNDIHRvIHNlbmQgYSBzZW5kIGJ1ZmZlciB0byB0aGUgVlNQLiBUaGUgVlNDCi0gKiBjYW4gdGhlbiB1c2UgdGhlIHNlbmQgYnVmZmVyIHRvIHNlbmQgZGF0YSB0byB0aGUgVlNQLgotICovCi1zdHJ1Y3QgbnZzcF8xX21lc3NhZ2Vfc2VuZF9zZW5kX2J1ZmZlciB7Ci0JdTMyIGdwYWRsX2hhbmRsZTsKLQl1MTYgaWQ7Ci19IF9fcGFja2VkOwotCi0vKgotICogVGhpcyBtZXNzYWdlIGlzIHVzZWQgYnkgdGhlIFZTUCB0byBhY2tub3dsZWRnZSBhIHNlbmQgYnVmZmVyIHNlbnQgYnkgdGhlCi0gKiBWU0MuIFRoaXMgbWVzc2FnZSBtdXN0IGJlIHNlbnQgYnkgdGhlIFZTUCBiZWZvcmUgdGhlIFZTUCB1c2VzIHRoZSBzZW50Ci0gKiBidWZmZXIuCi0gKi8KLXN0cnVjdCBudnNwXzFfbWVzc2FnZV9zZW5kX3NlbmRfYnVmZmVyX2NvbXBsZXRlIHsKLQl1MzIgc3RhdHVzOwotCi0JLyoKLQkgKiBUaGUgVlNDIGdldHMgdG8gY2hvb3NlIHRoZSBzaXplIG9mIHRoZSBzZW5kIGJ1ZmZlciBhbmQgdGhlIFZTUCBnZXRzCi0JICogdG8gY2hvb3NlIHRoZSBzZWN0aW9ucyBzaXplIG9mIHRoZSBidWZmZXIuICBUaGlzIHdhcyBkb25lIHRvIGVuYWJsZQotCSAqIGR5bmFtaWMgcmVjb25maWd1cmF0aW9ucyB3aGVuIHRoZSBjb3N0IG9mIEdQQS1kaXJlY3QgYnVmZmVycwotCSAqIGRlY3JlYXNlcy4KLQkgKi8KLQl1MzIgc2VjdGlvbl9zaXplOwotfSBfX3BhY2tlZDsKLQotLyoKLSAqIFRoaXMgbWVzc2FnZSBpcyBzZW50IGJ5IHRoZSBWU0MgdG8gcmV2b2tlIHRoZSBzZW5kIGJ1ZmZlci4gIEFmdGVyIHRoZSBWU1AKLSAqIGNvbXBsZXRlcyB0aGlzIHRyYW5zYWN0aW9uLCB0aGUgdnNwIHNob3VsZCBuZXZlciB1c2UgdGhlIHNlbmQgYnVmZmVyIGFnYWluLgotICovCi1zdHJ1Y3QgbnZzcF8xX21lc3NhZ2VfcmV2b2tlX3NlbmRfYnVmZmVyIHsKLQl1MTYgaWQ7Ci19OwotCi0vKgotICogVGhpcyBtZXNzYWdlIGlzIHVzZWQgYnkgYm90aCB0aGUgVlNQIGFuZCB0aGUgVlNDIHRvIHNlbmQgYSBSTkRJUyBtZXNzYWdlIHRvCi0gKiB0aGUgb3Bwb3NpdGUgY2hhbm5lbCBlbmRwb2ludC4KLSAqLwotc3RydWN0IG52c3BfMV9tZXNzYWdlX3NlbmRfcm5kaXNfcGFja2V0IHsKLQkvKgotCSAqIFRoaXMgZmllbGQgaXMgc3BlY2lmaWVkIGJ5IFJOSURTLiBUaGV5IGFzc3VtZSB0aGVyZSdzIHR3byBkaWZmZXJlbnQKLQkgKiBjaGFubmVscyBvZiBjb21tdW5pY2F0aW9uLiBIb3dldmVyLCB0aGUgTmV0d29yayBWU1Agb25seSBoYXMgb25lLgotCSAqIFRoZXJlZm9yZSwgdGhlIGNoYW5uZWwgdHJhdmVscyB3aXRoIHRoZSBSTkRJUyBwYWNrZXQuCi0JICovCi0JdTMyIGNoYW5uZWxfdHlwZTsKLQotCS8qCi0JICogVGhpcyBmaWVsZCBpcyB1c2VkIHRvIHNlbmQgcGFydCBvciBhbGwgb2YgdGhlIGRhdGEgdGhyb3VnaCBhIHNlbmQKLQkgKiBidWZmZXIuIFRoaXMgdmFsdWVzIHNwZWNpZmllcyBhbiBpbmRleCBpbnRvIHRoZSBzZW5kIGJ1ZmZlci4gSWYgdGhlCi0JICogaW5kZXggaXMgMHhGRkZGRkZGRiwgdGhlbiB0aGUgc2VuZCBidWZmZXIgaXMgbm90IGJlaW5nIHVzZWQgYW5kIGFsbAotCSAqIG9mIHRoZSBkYXRhIHdhcyBzZW50IHRocm91Z2ggb3RoZXIgVk1CdXMgbWVjaGFuaXNtcy4KLQkgKi8KLQl1MzIgc2VuZF9idWZfc2VjdGlvbl9pbmRleDsKLQl1MzIgc2VuZF9idWZfc2VjdGlvbl9zaXplOwotfSBfX3BhY2tlZDsKLQotLyoKLSAqIFRoaXMgbWVzc2FnZSBpcyB1c2VkIGJ5IGJvdGggdGhlIFZTUCBhbmQgdGhlIFZTQyB0byBjb21wbGV0ZSBhIFJORElTIG1lc3NhZ2UKLSAqIHRvIHRoZSBvcHBvc2l0ZSBjaGFubmVsIGVuZHBvaW50LiBBdCB0aGlzIHBvaW50LCB0aGUgaW5pdGlhdG9yIG9mIHRoaXMKLSAqIG1lc3NhZ2UgY2Fubm90IHVzZSBhbnkgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3JpZ2luYWwgUk5ESVMgcGFja2V0LgotICovCi1zdHJ1Y3QgbnZzcF8xX21lc3NhZ2Vfc2VuZF9ybmRpc19wYWNrZXRfY29tcGxldGUgewotCXUzMiBzdGF0dXM7Ci19OwotCi11bmlvbiBudnNwXzFfbWVzc2FnZV91YmVyIHsKLQlzdHJ1Y3QgbnZzcF8xX21lc3NhZ2Vfc2VuZF9uZGlzX3ZlcnNpb24gc2VuZF9uZGlzX3ZlcjsKLQotCXN0cnVjdCBudnNwXzFfbWVzc2FnZV9zZW5kX3JlY2VpdmVfYnVmZmVyIHNlbmRfcmVjdl9idWY7Ci0Jc3RydWN0IG52c3BfMV9tZXNzYWdlX3NlbmRfcmVjZWl2ZV9idWZmZXJfY29tcGxldGUKLQkJCQkJCXNlbmRfcmVjdl9idWZfY29tcGxldGU7Ci0Jc3RydWN0IG52c3BfMV9tZXNzYWdlX3Jldm9rZV9yZWNlaXZlX2J1ZmZlciByZXZva2VfcmVjdl9idWY7Ci0KLQlzdHJ1Y3QgbnZzcF8xX21lc3NhZ2Vfc2VuZF9zZW5kX2J1ZmZlciBzZW5kX3NlbmRfYnVmOwotCXN0cnVjdCBudnNwXzFfbWVzc2FnZV9zZW5kX3NlbmRfYnVmZmVyX2NvbXBsZXRlIHNlbmRfc2VuZF9idWZfY29tcGxldGU7Ci0Jc3RydWN0IG52c3BfMV9tZXNzYWdlX3Jldm9rZV9zZW5kX2J1ZmZlciByZXZva2Vfc2VuZF9idWY7Ci0KLQlzdHJ1Y3QgbnZzcF8xX21lc3NhZ2Vfc2VuZF9ybmRpc19wYWNrZXQgc2VuZF9ybmRpc19wa3Q7Ci0Jc3RydWN0IG52c3BfMV9tZXNzYWdlX3NlbmRfcm5kaXNfcGFja2V0X2NvbXBsZXRlCi0JCQkJCQlzZW5kX3JuZGlzX3BrdF9jb21wbGV0ZTsKLX0gX19wYWNrZWQ7Ci0KLXVuaW9uIG52c3BfYWxsX21lc3NhZ2VzIHsKLQl1bmlvbiBudnNwX21lc3NhZ2VfaW5pdF91YmVyIGluaXRfbXNnOwotCXVuaW9uIG52c3BfMV9tZXNzYWdlX3ViZXIgdjFfbXNnOwotfSBfX3BhY2tlZDsKLQotLyogQUxMIE1lc3NhZ2VzICovCi1zdHJ1Y3QgbnZzcF9tZXNzYWdlIHsKLQlzdHJ1Y3QgbnZzcF9tZXNzYWdlX2hlYWRlciBoZHI7Ci0JdW5pb24gbnZzcF9hbGxfbWVzc2FnZXMgbXNnOwotfSBfX3BhY2tlZDsKLQotCi0KLQotLyogI2RlZmluZSBOVlNDX01JTl9QUk9UT0NPTF9WRVJTSU9OCQkxICovCi0vKiAjZGVmaW5lIE5WU0NfTUFYX1BST1RPQ09MX1ZFUlNJT04JCTEgKi8KLQotI2RlZmluZSBORVRWU0NfU0VORF9CVUZGRVJfU0laRQkJCSg2NCoxMDI0KQkvKiA2NEsgKi8KLSNkZWZpbmUgTkVUVlNDX1NFTkRfQlVGRkVSX0lECQkJMHhmYWNlCi0KLQotI2RlZmluZSBORVRWU0NfUkVDRUlWRV9CVUZGRVJfU0laRQkJKDEwMjQqMTAyNCkJLyogMU1CICovCi0KLSNkZWZpbmUgTkVUVlNDX1JFQ0VJVkVfQlVGRkVSX0lECQkweGNhZmUKLQotI2RlZmluZSBORVRWU0NfUkVDRUlWRV9TR19DT1VOVAkJCTEKLQotLyogUHJlYWxsb2NhdGVkIHJlY2VpdmUgcGFja2V0cyAqLwotI2RlZmluZSBORVRWU0NfUkVDRUlWRV9QQUNLRVRMSVNUX0NPVU5UCQkyNTYKLQotI2RlZmluZSBORVRWU0NfUEFDS0VUX1NJWkUgICAgICAgICAgICAgICAgICAgICAgMjA0OAotCi0vKiBQZXIgbmV0dnNjIGNoYW5uZWwtc3BlY2lmaWMgKi8KLXN0cnVjdCBuZXR2c2NfZGV2aWNlIHsKLQlzdHJ1Y3QgaHZfZGV2aWNlICpkZXY7Ci0KLQlhdG9taWNfdCByZWZjbnQ7Ci0JYXRvbWljX3QgbnVtX291dHN0YW5kaW5nX3NlbmRzOwotCS8qCi0JICogTGlzdCBvZiBmcmVlIHByZWFsbG9jYXRlZCBodl9uZXR2c2NfcGFja2V0IHRvIHJlcHJlc2VudCByZWNlaXZlCi0JICogcGFja2V0Ci0JICovCi0Jc3RydWN0IGxpc3RfaGVhZCByZWN2X3BrdF9saXN0OwotCXNwaW5sb2NrX3QgcmVjdl9wa3RfbGlzdF9sb2NrOwotCi0JLyogU2VuZCBidWZmZXIgYWxsb2NhdGVkIGJ5IHVzIGJ1dCBtYW5hZ2VzIGJ5IE5ldFZTUCAqLwotCXZvaWQgKnNlbmRfYnVmOwotCXUzMiBzZW5kX2J1Zl9zaXplOwotCXUzMiBzZW5kX2J1Zl9ncGFkbF9oYW5kbGU7Ci0JdTMyIHNlbmRfc2VjdGlvbl9zaXplOwotCi0JLyogUmVjZWl2ZSBidWZmZXIgYWxsb2NhdGVkIGJ5IHVzIGJ1dCBtYW5hZ2VzIGJ5IE5ldFZTUCAqLwotCXZvaWQgKnJlY3ZfYnVmOwotCXUzMiByZWN2X2J1Zl9zaXplOwotCXUzMiByZWN2X2J1Zl9ncGFkbF9oYW5kbGU7Ci0JdTMyIHJlY3Zfc2VjdGlvbl9jbnQ7Ci0Jc3RydWN0IG52c3BfMV9yZWNlaXZlX2J1ZmZlcl9zZWN0aW9uICpyZWN2X3NlY3Rpb247Ci0KLQkvKiBVc2VkIGZvciBOZXRWU1AgaW5pdGlhbGl6YXRpb24gcHJvdG9jb2wgKi8KLQlpbnQgd2FpdF9jb25kaXRpb247Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QgY2hhbm5lbF9pbml0X3dhaXQ7Ci0Jc3RydWN0IG52c3BfbWVzc2FnZSBjaGFubmVsX2luaXRfcGt0OwotCi0Jc3RydWN0IG52c3BfbWVzc2FnZSByZXZva2VfcGFja2V0OwotCS8qIHVuc2lnbmVkIGNoYXIgSHdNYWNBZGRyW0hXX01BQ0FERFJfTEVOXTsgKi8KLQotCS8qIEhvbGRzIHJuZGlzIGRldmljZSBpbmZvICovCi0Jdm9pZCAqZXh0ZW5zaW9uOwotfTsKLQotI2VuZGlmIC8qIF9ORVRWU0NfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2NfYXBpLmggYi9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjX2FwaS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGJlZDM2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2NfYXBpLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotLyoKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDksIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKLSAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAotICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZQotICogUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCi0gKgotICogQXV0aG9yczoKLSAqICAgSGFpeWFuZyBaaGFuZyA8aGFpeWFuZ3pAbWljcm9zb2Z0LmNvbT4KLSAqICAgSGFuayBKYW5zc2VuICA8aGphbnNzZW5AbWljcm9zb2Z0LmNvbT4KLSAqCi0gKi8KLQotCi0jaWZuZGVmIF9ORVRWU0NfQVBJX0hfCi0jZGVmaW5lIF9ORVRWU0NfQVBJX0hfCi0KLSNpbmNsdWRlICJ2bWJ1c19hcGkuaCIKLQotLyogRndkIGRlY2xhcmF0aW9uICovCi1zdHJ1Y3QgaHZfbmV0dnNjX3BhY2tldDsKLQotLyogUmVwcmVzZW50IHRoZSB4ZmVyIHBhZ2UgcGFja2V0IHdoaWNoIGNvbnRhaW5zIDEgb3IgbW9yZSBuZXR2c2MgcGFja2V0ICovCi1zdHJ1Y3QgeGZlcnBhZ2VfcGFja2V0IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RfZW50OwotCi0JLyogIyBvZiBuZXR2c2MgcGFja2V0cyB0aGlzIHhmZXIgcGFja2V0IGNvbnRhaW5zICovCi0JdTMyIGNvdW50OwotfTsKLQotLyogVGhlIG51bWJlciBvZiBwYWdlcyB3aGljaCBhcmUgZW5vdWdoIHRvIGNvdmVyIGp1bWJvIGZyYW1lIGJ1ZmZlci4gKi8KLSNkZWZpbmUgTkVUVlNDX1BBQ0tFVF9NQVhQQUdFCQk0Ci0KLS8qCi0gKiBSZXByZXNlbnQgbmV0dnNjIHBhY2tldCB3aGljaCBjb250YWlucyAxIFJORElTIGFuZCAxIGV0aGVybmV0IGZyYW1lCi0gKiB3aXRoaW4gdGhlIFJORElTCi0gKi8KLXN0cnVjdCBodl9uZXR2c2NfcGFja2V0IHsKLQkvKiBCb29ra2VlcGluZyBzdHVmZiAqLwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdF9lbnQ7Ci0KLQlzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2U7Ci0JYm9vbCBpc19kYXRhX3BrdDsKLQotCS8qCi0JICogVmFsaWQgb25seSBmb3IgcmVjZWl2ZXMgd2hlbiB3ZSBicmVhayBhIHhmZXIgcGFnZSBwYWNrZXQKLQkgKiBpbnRvIG11bHRpcGxlIG5ldHZzYyBwYWNrZXRzCi0JICovCi0Jc3RydWN0IHhmZXJwYWdlX3BhY2tldCAqeGZlcl9wYWdlX3BrdDsKLQotCXVuaW9uIHsKLQkJc3RydWN0ewotCQkJdTY0IHJlY3ZfY29tcGxldGlvbl90aWQ7Ci0JCQl2b2lkICpyZWN2X2NvbXBsZXRpb25fY3R4OwotCQkJdm9pZCAoKnJlY3ZfY29tcGxldGlvbikodm9pZCAqY29udGV4dCk7Ci0JCX0gcmVjdjsKLQkJc3RydWN0ewotCQkJdTY0IHNlbmRfY29tcGxldGlvbl90aWQ7Ci0JCQl2b2lkICpzZW5kX2NvbXBsZXRpb25fY3R4OwotCQkJdm9pZCAoKnNlbmRfY29tcGxldGlvbikodm9pZCAqY29udGV4dCk7Ci0JCX0gc2VuZDsKLQl9IGNvbXBsZXRpb247Ci0KLQkvKiBUaGlzIHBvaW50cyB0byB0aGUgbWVtb3J5IGFmdGVyIHBhZ2VfYnVmICovCi0Jdm9pZCAqZXh0ZW5zaW9uOwotCi0JdTMyIHRvdGFsX2RhdGFfYnVmbGVuOwotCS8qIFBvaW50cyB0byB0aGUgc2VuZC9yZWNlaXZlIGJ1ZmZlciB3aGVyZSB0aGUgZXRoZXJuZXQgZnJhbWUgaXMgKi8KLQl1MzIgcGFnZV9idWZfY250OwotCXN0cnVjdCBodl9wYWdlX2J1ZmZlciBwYWdlX2J1ZltORVRWU0NfUEFDS0VUX01BWFBBR0VdOwotfTsKLQotLyogUmVwcmVzZW50cyB0aGUgbmV0IHZzYyBkcml2ZXIgKi8KLXN0cnVjdCBuZXR2c2NfZHJpdmVyIHsKLQkvKiBNdXN0IGJlIHRoZSBmaXJzdCBmaWVsZCAqLwotCS8qIFdoaWNoIGlzIGEgYnVnIEZJWE1FISAqLwotCXN0cnVjdCBodl9kcml2ZXIgYmFzZTsKLQotCXUzMiByaW5nX2J1Zl9zaXplOwotCXUzMiByZXFfZXh0X3NpemU7Ci0KLQkvKgotCSAqIFRoaXMgaXMgc2V0IGJ5IHRoZSBjYWxsZXIgdG8gYWxsb3cgdXMgdG8gY2FsbGJhY2sgd2hlbiB3ZQotCSAqIHJlY2VpdmUgYSBwYWNrZXQgZnJvbSB0aGUgIndpcmUiCi0JICovCi0JaW50ICgqcmVjdl9jYikoc3RydWN0IGh2X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaHZfbmV0dnNjX3BhY2tldCAqcGFja2V0KTsKLQl2b2lkICgqbGlua19zdGF0dXNfY2hhbmdlKShzdHJ1Y3QgaHZfZGV2aWNlICpkZXYsIHUzMiBzdGF0dXMpOwotCi0JLyogU3BlY2lmaWMgdG8gdGhpcyBkcml2ZXIgKi8KLQlpbnQgKCpzZW5kKShzdHJ1Y3QgaHZfZGV2aWNlICpkZXYsIHN0cnVjdCBodl9uZXR2c2NfcGFja2V0ICpwYWNrZXQpOwotCi0Jdm9pZCAqY3R4OwotfTsKLQotc3RydWN0IG5ldHZzY19kZXZpY2VfaW5mbyB7Ci0JdW5zaWduZWQgY2hhciBtYWNfYWRyWzZdOwotCWJvb2wgbGlua19zdGF0ZTsJLyogMCAtIGxpbmsgdXAsIDEgLSBsaW5rIGRvd24gKi8KLX07Ci0KLS8qIEludGVyZmFjZSAqLwotaW50IG5ldHZzY19pbml0aWFsaXplKHN0cnVjdCBodl9kcml2ZXIgKmRydik7Ci1pbnQgcm5kaXNfZmlsdGVyX29wZW4oc3RydWN0IGh2X2RldmljZSAqZGV2KTsKLWludCBybmRpc19maWx0ZXJfY2xvc2Uoc3RydWN0IGh2X2RldmljZSAqZGV2KTsKLQotI2VuZGlmIC8qIF9ORVRWU0NfQVBJX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjX2Rydi5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L25ldHZzY19kcnYuYwppbmRleCAzMzk3MzU2Li43YjljMjI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjX2Rydi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2NfZHJ2LmMKQEAgLTE4LDYgKzE4LDggQEAKICAqICAgSGFpeWFuZyBaaGFuZyA8aGFpeWFuZ3pAbWljcm9zb2Z0LmNvbT4KICAqICAgSGFuayBKYW5zc2VuICA8aGphbnNzZW5AbWljcm9zb2Z0LmNvbT4KICAqLworI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KQEAgLTM2LDExICszOCw5IEBACiAjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxuZXQvcGt0X3NjaGVkLmg+Ci0jaW5jbHVkZSAiaHZfYXBpLmgiCi0jaW5jbHVkZSAibG9nZ2luZy5oIgotI2luY2x1ZGUgInZlcnNpb25faW5mby5oIgotI2luY2x1ZGUgInZtYnVzLmgiCi0jaW5jbHVkZSAibmV0dnNjX2FwaS5oIgorCisjaW5jbHVkZSAiaHlwZXJ2LmgiCisjaW5jbHVkZSAiaHlwZXJ2X25ldC5oIgogCiBzdHJ1Y3QgbmV0X2RldmljZV9jb250ZXh0IHsKIAkvKiBwb2ludCBiYWNrIHRvIG91ciBkZXZpY2UgY29udGV4dCAqLwpAQCAtNTgsOSArNTgsNiBAQAogbW9kdWxlX3BhcmFtKHJpbmdfc2l6ZSwgaW50LCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MocmluZ19zaXplLCAiUmluZyBidWZmZXIgc2l6ZSAoIyBvZiBwYWdlcykiKTsKIAotLyogVGhlIG9uZSBhbmQgb25seSBvbmUgKi8KLXN0YXRpYyBzdHJ1Y3QgIG5ldHZzY19kcml2ZXIgZ19uZXR2c2NfZHJ2OwotCiAvKiBuby1vcCBzbyB0aGUgbmV0ZGV2IGNvcmUgZG9lc24ndCByZXR1cm4gLUVJTlZBTCB3aGVuIG1vZGlmeWluZyB0aGUgdGhlCiAgKiBtdWx0aWNhc3QgYWRkcmVzcyBsaXN0IGluIFNJT0NBRERNVUxUSS4gaHYgaXMgc2V0dXAgdG8gZ2V0IGFsbCBtdWx0aWNhc3QKICAqIHdoZW4gaXQgY2FsbHMgUm5kaXNGaWx0ZXJPbk9wZW4oKSAqLwpAQCAtNzgsMTQgKzc1LDE0IEBACiAJCS8qIE9wZW4gdXAgdGhlIGRldmljZSAqLwogCQlyZXQgPSBybmRpc19maWx0ZXJfb3BlbihkZXZpY2Vfb2JqKTsKIAkJaWYgKHJldCAhPSAwKSB7Ci0JCQlEUFJJTlRfRVJSKE5FVFZTQ19EUlYsCi0JCQkJICAgInVuYWJsZSB0byBvcGVuIGRldmljZSAocmV0ICVkKS4iLCByZXQpOworCQkJbmV0ZGV2X2VycihuZXQsICJ1bmFibGUgdG8gb3BlbiBkZXZpY2UgKHJldCAlZCkuXG4iLAorCQkJCSAgIHJldCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAKIAkJbmV0aWZfc3RhcnRfcXVldWUobmV0KTsKIAl9IGVsc2UgewotCQlEUFJJTlRfRVJSKE5FVFZTQ19EUlYsICJ1bmFibGUgdG8gb3BlbiBkZXZpY2UuLi5saW5rIGlzIGRvd24uIik7CisJCW5ldGRldl9lcnIobmV0LCAidW5hYmxlIHRvIG9wZW4gZGV2aWNlLi4ubGluayBpcyBkb3duLlxuIik7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTEwMSw3ICs5OCw3IEBACiAKIAlyZXQgPSBybmRpc19maWx0ZXJfY2xvc2UoZGV2aWNlX29iaik7CiAJaWYgKHJldCAhPSAwKQotCQlEUFJJTlRfRVJSKE5FVFZTQ19EUlYsICJ1bmFibGUgdG8gY2xvc2UgZGV2aWNlIChyZXQgJWQpLiIsIHJldCk7CisJCW5ldGRldl9lcnIobmV0LCAidW5hYmxlIHRvIGNsb3NlIGRldmljZSAocmV0ICVkKS5cbiIsIHJldCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTMwLDE2ICsxMjcsMTAgQEAKIHN0YXRpYyBpbnQgbmV0dnNjX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZV9jb250ZXh0ICpuZXRfZGV2aWNlX2N0eCA9IG5ldGRldl9wcml2KG5ldCk7Ci0Jc3RydWN0IGh2X2RyaXZlciAqZHJ2ID0KLQkgICAgZHJ2X3RvX2h2X2RydihuZXRfZGV2aWNlX2N0eC0+ZGV2aWNlX2N0eC0+ZGV2aWNlLmRyaXZlcik7Ci0Jc3RydWN0IG5ldHZzY19kcml2ZXIgKm5ldF9kcnZfb2JqID0gZHJ2LT5wcml2OwogCXN0cnVjdCBodl9uZXR2c2NfcGFja2V0ICpwYWNrZXQ7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBpbnQgaSwgbnVtX3BhZ2VzOwogCi0JRFBSSU5UX0RCRyhORVRWU0NfRFJWLCAieG1pdCBwYWNrZXQgLSBsZW4gJWQgZGF0YV9sZW4gJWQiLAotCQkgICBza2ItPmxlbiwgc2tiLT5kYXRhX2xlbik7Ci0KIAkvKiBBZGQgMSBmb3Igc2tiLT5kYXRhIGFuZCBhZGRpdGlvbmFsIG9uZSBmb3IgUk5ESVMgKi8KIAludW1fcGFnZXMgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMSArIDE7CiAJaWYgKG51bV9wYWdlcyA+IG5ldF9kZXZpY2VfY3R4LT5hdmFpbCkKQEAgLTE0OCwxMCArMTM5LDEwIEBACiAJLyogQWxsb2NhdGUgYSBuZXR2c2MgcGFja2V0IGJhc2VkIG9uICMgb2YgZnJhZ3MuICovCiAJcGFja2V0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGh2X25ldHZzY19wYWNrZXQpICsKIAkJCSAobnVtX3BhZ2VzICogc2l6ZW9mKHN0cnVjdCBodl9wYWdlX2J1ZmZlcikpICsKLQkJCSBuZXRfZHJ2X29iai0+cmVxX2V4dF9zaXplLCBHRlBfQVRPTUlDKTsKKwkJCSBzaXplb2Yoc3RydWN0IHJuZGlzX2ZpbHRlcl9wYWNrZXQpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXBhY2tldCkgewogCQkvKiBvdXQgb2YgbWVtb3J5LCBzaWxlbnRseSBkcm9wIHBhY2tldCAqLwotCQlEUFJJTlRfRVJSKE5FVFZTQ19EUlYsICJ1bmFibGUgdG8gYWxsb2NhdGUgaHZfbmV0dnNjX3BhY2tldCIpOworCQluZXRkZXZfZXJyKG5ldCwgInVuYWJsZSB0byBhbGxvY2F0ZSBodl9uZXR2c2NfcGFja2V0XG4iKTsKIAogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCW5ldC0+c3RhdHMudHhfZHJvcHBlZCsrOwpAQCAtMTkxLDE2ICsxODIsMTIgQEAKIAlwYWNrZXQtPmNvbXBsZXRpb24uc2VuZC5zZW5kX2NvbXBsZXRpb25fY3R4ID0gcGFja2V0OwogCXBhY2tldC0+Y29tcGxldGlvbi5zZW5kLnNlbmRfY29tcGxldGlvbl90aWQgPSAodW5zaWduZWQgbG9uZylza2I7CiAKLQlyZXQgPSBuZXRfZHJ2X29iai0+c2VuZChuZXRfZGV2aWNlX2N0eC0+ZGV2aWNlX2N0eCwKKwlyZXQgPSBybmRpc19maWx0ZXJfc2VuZChuZXRfZGV2aWNlX2N0eC0+ZGV2aWNlX2N0eCwKIAkJCQkgIHBhY2tldCk7CiAJaWYgKHJldCA9PSAwKSB7CiAJCW5ldC0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCW5ldC0+c3RhdHMudHhfcGFja2V0cysrOwogCi0JCURQUklOVF9EQkcoTkVUVlNDX0RSViwgIiMgb2YgeG1pdHMgJWx1IHRvdGFsIHNpemUgJWx1IiwKLQkJCSAgIG5ldC0+c3RhdHMudHhfcGFja2V0cywKLQkJCSAgIG5ldC0+c3RhdHMudHhfYnl0ZXMpOwotCiAJCW5ldF9kZXZpY2VfY3R4LT5hdmFpbCAtPSBudW1fcGFnZXM7CiAJCWlmIChuZXRfZGV2aWNlX2N0eC0+YXZhaWwgPCBQQUNLRVRfUEFHRVNfTE9XQVRFUikKIAkJCW5ldGlmX3N0b3BfcXVldWUobmV0KTsKQEAgLTIxNiwxNSArMjAzLDE1IEBACiAvKgogICogbmV0dnNjX2xpbmtzdGF0dXNfY2FsbGJhY2sgLSBMaW5rIHVwL2Rvd24gbm90aWZpY2F0aW9uCiAgKi8KLXN0YXRpYyB2b2lkIG5ldHZzY19saW5rc3RhdHVzX2NhbGxiYWNrKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZV9vYmosCit2b2lkIG5ldHZzY19saW5rc3RhdHVzX2NhbGxiYWNrKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZV9vYmosCiAJCQkJICAgICAgIHVuc2lnbmVkIGludCBzdGF0dXMpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldCA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2aWNlX29iai0+ZGV2aWNlKTsKIAlzdHJ1Y3QgbmV0X2RldmljZV9jb250ZXh0ICpuZGV2X2N0eDsKIAogCWlmICghbmV0KSB7Ci0JCURQUklOVF9FUlIoTkVUVlNDX0RSViwgImdvdCBsaW5rIHN0YXR1cyBidXQgbmV0IGRldmljZSAiCi0JCQkJIm5vdCBpbml0aWFsaXplZCB5ZXQiKTsKKwkJbmV0ZGV2X2VycihuZXQsICJnb3QgbGluayBzdGF0dXMgYnV0IG5ldCBkZXZpY2UgIgorCQkJCSJub3QgaW5pdGlhbGl6ZWQgeWV0XG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjQ0LDcgKzIzMSw3IEBACiAgKiBuZXR2c2NfcmVjdl9jYWxsYmFjayAtICBDYWxsYmFjayB3aGVuIHdlIHJlY2VpdmUgYSBwYWNrZXQgZnJvbSB0aGUKICAqICJ3aXJlIiBvbiB0aGUgc3BlY2lmaWVkIGRldmljZS4KICAqLwotc3RhdGljIGludCBuZXR2c2NfcmVjdl9jYWxsYmFjayhzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2Vfb2JqLAoraW50IG5ldHZzY19yZWN2X2NhbGxiYWNrKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZV9vYmosCiAJCQkJc3RydWN0IGh2X25ldHZzY19wYWNrZXQgKnBhY2tldCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ID0gZGV2X2dldF9kcnZkYXRhKCZkZXZpY2Vfb2JqLT5kZXZpY2UpOwpAQCAtMjU0LDggKzI0MSw4IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghbmV0KSB7Ci0JCURQUklOVF9FUlIoTkVUVlNDX0RSViwgImdvdCByZWNlaXZlIGNhbGxiYWNrIGJ1dCBuZXQgZGV2aWNlICIKLQkJCQkibm90IGluaXRpYWxpemVkIHlldCIpOworCQluZXRkZXZfZXJyKG5ldCwgImdvdCByZWNlaXZlIGNhbGxiYWNrIGJ1dCBuZXQgZGV2aWNlIgorCQkJIiBub3QgaW5pdGlhbGl6ZWQgeWV0XG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0zMDEsOSArMjg4LDYgQEAKIAkgKi8KIAluZXRpZl9yeChza2IpOwogCi0JRFBSSU5UX0RCRyhORVRWU0NfRFJWLCAiIyBvZiByZWN2cyAlbHUgdG90YWwgc2l6ZSAlbHUiLAotCQkgICBuZXQtPnN0YXRzLnJ4X3BhY2tldHMsIG5ldC0+c3RhdHMucnhfYnl0ZXMpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMxNyw4ICszMDEsNiBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGV0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbwk9IG5ldHZzY19nZXRfZHJ2aW5mbywKLQkuZ2V0X3NnCQk9IGV0aHRvb2xfb3BfZ2V0X3NnLAotCS5zZXRfc2cJCT0gZXRodG9vbF9vcF9zZXRfc2csCiAJLmdldF9saW5rCT0gZXRodG9vbF9vcF9nZXRfbGluaywKIH07CiAKQEAgLTM1MSwyMCArMzMzLDEzIEBACiB9CiAKIAotc3RhdGljIGludCBuZXR2c2NfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBuZXR2c2NfcHJvYmUoc3RydWN0IGh2X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBodl9kcml2ZXIgKmRydiA9Ci0JCWRydl90b19odl9kcnYoZGV2aWNlLT5kcml2ZXIpOwotCXN0cnVjdCBuZXR2c2NfZHJpdmVyICpuZXRfZHJ2X29iaiA9IGRydi0+cHJpdjsKLQlzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2Vfb2JqID0gZGV2aWNlX3RvX2h2X2RldmljZShkZXZpY2UpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXQgPSBOVUxMOwogCXN0cnVjdCBuZXRfZGV2aWNlX2NvbnRleHQgKm5ldF9kZXZpY2VfY3R4OwogCXN0cnVjdCBuZXR2c2NfZGV2aWNlX2luZm8gZGV2aWNlX2luZm87CiAJaW50IHJldDsKIAotCWlmICghbmV0X2Rydl9vYmotPmJhc2UuZGV2X2FkZCkKLQkJcmV0dXJuIC0xOwotCiAJbmV0ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX2NvbnRleHQpKTsKIAlpZiAoIW5ldCkKIAkJcmV0dXJuIC0xOwpAQCAtMzczLDE5ICszNDgsMTkgQEAKIAluZXRpZl9jYXJyaWVyX29mZihuZXQpOwogCiAJbmV0X2RldmljZV9jdHggPSBuZXRkZXZfcHJpdihuZXQpOwotCW5ldF9kZXZpY2VfY3R4LT5kZXZpY2VfY3R4ID0gZGV2aWNlX29iajsKKwluZXRfZGV2aWNlX2N0eC0+ZGV2aWNlX2N0eCA9IGRldjsKIAluZXRfZGV2aWNlX2N0eC0+YXZhaWwgPSByaW5nX3NpemU7Ci0JZGV2X3NldF9kcnZkYXRhKGRldmljZSwgbmV0KTsKKwlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2aWNlLCBuZXQpOwogCUlOSVRfV09SSygmbmV0X2RldmljZV9jdHgtPndvcmssIG5ldHZzY19zZW5kX2dhcnApOwogCiAJLyogTm90aWZ5IHRoZSBuZXR2c2MgZHJpdmVyIG9mIHRoZSBuZXcgZGV2aWNlICovCi0JcmV0ID0gbmV0X2Rydl9vYmotPmJhc2UuZGV2X2FkZChkZXZpY2Vfb2JqLCAmZGV2aWNlX2luZm8pOworCWRldmljZV9pbmZvLnJpbmdfc2l6ZSA9IHJpbmdfc2l6ZTsKKwlyZXQgPSBybmRpc19maWx0ZV9kZXZpY2VfYWRkKGRldiwgJmRldmljZV9pbmZvKTsKIAlpZiAocmV0ICE9IDApIHsKIAkJZnJlZV9uZXRkZXYobmV0KTsKLQkJZGV2X3NldF9kcnZkYXRhKGRldmljZSwgTlVMTCk7CisJCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXZpY2UsIE5VTEwpOwogCi0JCURQUklOVF9FUlIoTkVUVlNDX0RSViwgInVuYWJsZSB0byBhZGQgbmV0dnNjIGRldmljZSAocmV0ICVkKSIsCi0JCQkgICByZXQpOworCQluZXRkZXZfZXJyKG5ldCwgInVuYWJsZSB0byBhZGQgbmV0dnNjIGRldmljZSAocmV0ICVkKVxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTQwNiwzOCArMzgxLDMyIEBACiAJbmV0LT5uZXRkZXZfb3BzID0gJmRldmljZV9vcHM7CiAKIAkvKiBUT0RPOiBBZGQgR1NPIGFuZCBDaGVja3N1bSBvZmZsb2FkICovCisJbmV0LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfU0c7CiAJbmV0LT5mZWF0dXJlcyA9IE5FVElGX0ZfU0c7CiAKIAlTRVRfRVRIVE9PTF9PUFMobmV0LCAmZXRodG9vbF9vcHMpOwotCVNFVF9ORVRERVZfREVWKG5ldCwgZGV2aWNlKTsKKwlTRVRfTkVUREVWX0RFVihuZXQsICZkZXYtPmRldmljZSk7CiAKIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmV0KTsKIAlpZiAocmV0ICE9IDApIHsKIAkJLyogUmVtb3ZlIHRoZSBkZXZpY2UgYW5kIHJlbGVhc2UgdGhlIHJlc291cmNlICovCi0JCW5ldF9kcnZfb2JqLT5iYXNlLmRldl9ybShkZXZpY2Vfb2JqKTsKKwkJcm5kaXNfZmlsdGVyX2RldmljZV9yZW1vdmUoZGV2KTsKIAkJZnJlZV9uZXRkZXYobmV0KTsKIAl9CiAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG5ldHZzY19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBuZXR2c2NfcmVtb3ZlKHN0cnVjdCBodl9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaHZfZHJpdmVyICpkcnYgPQotCQlkcnZfdG9faHZfZHJ2KGRldmljZS0+ZHJpdmVyKTsKLQlzdHJ1Y3QgbmV0dnNjX2RyaXZlciAqbmV0X2Rydl9vYmogPSBkcnYtPnByaXY7Ci0Jc3RydWN0IGh2X2RldmljZSAqZGV2aWNlX29iaiA9IGRldmljZV90b19odl9kZXZpY2UoZGV2aWNlKTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ID0gZGV2X2dldF9kcnZkYXRhKCZkZXZpY2Vfb2JqLT5kZXZpY2UpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXQgPSBkZXZfZ2V0X2RydmRhdGEoJmRldi0+ZGV2aWNlKTsKIAlpbnQgcmV0OwogCiAJaWYgKG5ldCA9PSBOVUxMKSB7Ci0JCURQUklOVF9JTkZPKE5FVFZTQywgIm5vIG5ldCBkZXZpY2UgdG8gcmVtb3ZlIik7CisJCWRldl9lcnIoJmRldi0+ZGV2aWNlLCAiTm8gbmV0IGRldmljZSB0byByZW1vdmVcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoIW5ldF9kcnZfb2JqLT5iYXNlLmRldl9ybSkKLQkJcmV0dXJuIC0xOwotCiAJLyogU3RvcCBvdXRib3VuZCBhc2FwICovCiAJbmV0aWZfc3RvcF9xdWV1ZShuZXQpOwogCS8qIG5ldGlmX2NhcnJpZXJfb2ZmKG5ldCk7ICovCkBAIC00NDgsODQgKzQxNywyNyBAQAogCSAqIENhbGwgdG8gdGhlIHZzYyBkcml2ZXIgdG8gbGV0IGl0IGtub3cgdGhhdCB0aGUgZGV2aWNlIGlzIGJlaW5nCiAJICogcmVtb3ZlZAogCSAqLwotCXJldCA9IG5ldF9kcnZfb2JqLT5iYXNlLmRldl9ybShkZXZpY2Vfb2JqKTsKKwlyZXQgPSBybmRpc19maWx0ZXJfZGV2aWNlX3JlbW92ZShkZXYpOwogCWlmIChyZXQgIT0gMCkgewogCQkvKiBUT0RPOiAqLwotCQlEUFJJTlRfRVJSKE5FVFZTQywgInVuYWJsZSB0byByZW1vdmUgdnNjIGRldmljZSAocmV0ICVkKSIsIHJldCk7CisJCW5ldGRldl9lcnIobmV0LCAidW5hYmxlIHRvIHJlbW92ZSB2c2MgZGV2aWNlIChyZXQgJWQpXG4iLCByZXQpOwogCX0KIAogCWZyZWVfbmV0ZGV2KG5ldCk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBuZXR2c2NfZHJ2X2V4aXRfY2Ioc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkZXZpY2UgKipjdXJyID0gKHN0cnVjdCBkZXZpY2UgKiopZGF0YTsKKy8qIFRoZSBvbmUgYW5kIG9ubHkgb25lICovCitzdGF0aWMgc3RydWN0ICBodl9kcml2ZXIgbmV0dnNjX2RydiA9IHsKKwkucHJvYmUgPSBuZXR2c2NfcHJvYmUsCisJLnJlbW92ZSA9IG5ldHZzY19yZW1vdmUsCit9OwogCi0JKmN1cnIgPSBkZXY7Ci0JLyogc3RvcCBpdGVyYXRpbmcgKi8KLQlyZXR1cm4gMTsKK3N0YXRpYyB2b2lkIF9fZXhpdCBuZXR2c2NfZHJ2X2V4aXQodm9pZCkKK3sKKwl2bWJ1c19jaGlsZF9kcml2ZXJfdW5yZWdpc3RlcigmbmV0dnNjX2Rydi5kcml2ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBuZXR2c2NfZHJ2X2V4aXQodm9pZCkKLXsKLQlzdHJ1Y3QgbmV0dnNjX2RyaXZlciAqbmV0dnNjX2Rydl9vYmogPSAmZ19uZXR2c2NfZHJ2OwotCXN0cnVjdCBodl9kcml2ZXIgKmRydiA9ICZnX25ldHZzY19kcnYuYmFzZTsKLQlzdHJ1Y3QgZGV2aWNlICpjdXJyZW50X2RldjsKLQlpbnQgcmV0OwotCi0Jd2hpbGUgKDEpIHsKLQkJY3VycmVudF9kZXYgPSBOVUxMOwotCi0JCS8qIEdldCB0aGUgZGV2aWNlICovCi0JCXJldCA9IGRyaXZlcl9mb3JfZWFjaF9kZXZpY2UoJmRydi0+ZHJpdmVyLCBOVUxMLAotCQkJCQkgICAgICZjdXJyZW50X2RldiwgbmV0dnNjX2Rydl9leGl0X2NiKTsKLQkJaWYgKHJldCkKLQkJCURQUklOVF9XQVJOKE5FVFZTQ19EUlYsCi0JCQkJICAgICJkcml2ZXJfZm9yX2VhY2hfZGV2aWNlIHJldHVybmVkICVkIiwgcmV0KTsKLQotCQlpZiAoY3VycmVudF9kZXYgPT0gTlVMTCkKLQkJCWJyZWFrOwotCi0JCS8qIEluaXRpYXRlIHJlbW92YWwgZnJvbSB0aGUgdG9wLWRvd24gKi8KLQkJRFBSSU5UX0lORk8oTkVUVlNDX0RSViwgInVucmVnaXN0ZXJpbmcgZGV2aWNlICglcCkuLi4iLAotCQkJICAgIGN1cnJlbnRfZGV2KTsKLQotCQlkZXZpY2VfdW5yZWdpc3RlcihjdXJyZW50X2Rldik7Ci0JfQotCi0JaWYgKG5ldHZzY19kcnZfb2JqLT5iYXNlLmNsZWFudXApCi0JCW5ldHZzY19kcnZfb2JqLT5iYXNlLmNsZWFudXAoJm5ldHZzY19kcnZfb2JqLT5iYXNlKTsKLQotCXZtYnVzX2NoaWxkX2RyaXZlcl91bnJlZ2lzdGVyKCZkcnYtPmRyaXZlcik7Ci0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBpbnQgbmV0dnNjX2Rydl9pbml0KGludCAoKmRydl9pbml0KShzdHJ1Y3QgaHZfZHJpdmVyICpkcnYpKQotewotCXN0cnVjdCBuZXR2c2NfZHJpdmVyICpuZXRfZHJ2X29iaiA9ICZnX25ldHZzY19kcnY7Ci0Jc3RydWN0IGh2X2RyaXZlciAqZHJ2ID0gJmdfbmV0dnNjX2Rydi5iYXNlOwotCWludCByZXQ7Ci0KLQluZXRfZHJ2X29iai0+cmluZ19idWZfc2l6ZSA9IHJpbmdfc2l6ZSAqIFBBR0VfU0laRTsKLQluZXRfZHJ2X29iai0+cmVjdl9jYiA9IG5ldHZzY19yZWN2X2NhbGxiYWNrOwotCW5ldF9kcnZfb2JqLT5saW5rX3N0YXR1c19jaGFuZ2UgPSBuZXR2c2NfbGlua3N0YXR1c19jYWxsYmFjazsKLQlkcnYtPnByaXYgPSBuZXRfZHJ2X29iajsKLQotCS8qIENhbGxiYWNrIHRvIGNsaWVudCBkcml2ZXIgdG8gY29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uICovCi0JZHJ2X2luaXQoJm5ldF9kcnZfb2JqLT5iYXNlKTsKLQotCWRydi0+ZHJpdmVyLm5hbWUgPSBuZXRfZHJ2X29iai0+YmFzZS5uYW1lOwotCi0JZHJ2LT5kcml2ZXIucHJvYmUgPSBuZXR2c2NfcHJvYmU7Ci0JZHJ2LT5kcml2ZXIucmVtb3ZlID0gbmV0dnNjX3JlbW92ZTsKLQotCS8qIFRoZSBkcml2ZXIgYmVsb25ncyB0byB2bWJ1cyAqLwotCXJldCA9IHZtYnVzX2NoaWxkX2RyaXZlcl9yZWdpc3RlcigmZHJ2LT5kcml2ZXIpOwotCi0JcmV0dXJuIHJldDsKLX0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9faW5pdGNvbnN0CiBodl9uZXR2c2NfZG1pX3RhYmxlW10gX19tYXliZV91bnVzZWQgID0gewpAQCAtNTQxLDE5ICs0NTMsMjYgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGRtaSwgaHZfbmV0dnNjX2RtaV90YWJsZSk7CiAKLXN0YXRpYyBpbnQgX19pbml0IG5ldHZzY19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBuZXR2c2NfZHJ2X2luaXQodm9pZCkKIHsKLQlEUFJJTlRfSU5GTyhORVRWU0NfRFJWLCAiTmV0dnNjIGluaXRpYWxpemluZy4uLi4iKTsKKwlzdHJ1Y3QgaHZfZHJpdmVyICpkcnYgPSAmbmV0dnNjX2RydjsKKwlpbnQgcmV0OworCisJcHJfaW5mbygiaW5pdGlhbGl6aW5nLi4uLiIpOwogCiAJaWYgKCFkbWlfY2hlY2tfc3lzdGVtKGh2X25ldHZzY19kbWlfdGFibGUpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJldHVybiBuZXR2c2NfZHJ2X2luaXQobmV0dnNjX2luaXRpYWxpemUpOwotfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgbmV0dnNjX2V4aXQodm9pZCkKLXsKLQluZXR2c2NfZHJ2X2V4aXQoKTsKKwkvKiBDYWxsYmFjayB0byBjbGllbnQgZHJpdmVyIHRvIGNvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiAqLworCW5ldHZzY19pbml0aWFsaXplKGRydik7CisKKwlkcnYtPmRyaXZlci5uYW1lID0gZHJ2LT5uYW1lOworCisJLyogVGhlIGRyaXZlciBiZWxvbmdzIHRvIHZtYnVzICovCisJcmV0ID0gdm1idXNfY2hpbGRfZHJpdmVyX3JlZ2lzdGVyKCZkcnYtPmRyaXZlcik7CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgX19pbml0Y29uc3QKQEAgLTU2Nyw1ICs0ODYsNSBAQAogTU9EVUxFX1ZFUlNJT04oSFZfRFJWX1ZFUlNJT04pOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJNaWNyb3NvZnQgSHlwZXItViBuZXR3b3JrIGRyaXZlciIpOwogCi1tb2R1bGVfaW5pdChuZXR2c2NfaW5pdCk7Ci1tb2R1bGVfZXhpdChuZXR2c2NfZXhpdCk7Cittb2R1bGVfaW5pdChuZXR2c2NfZHJ2X2luaXQpOworbW9kdWxlX2V4aXQobmV0dnNjX2Rydl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9yaW5nX2J1ZmZlci5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L3JpbmdfYnVmZmVyLmMKaW5kZXggNjY2ODhmYi4uM2RhMzMzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L3JpbmdfYnVmZmVyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L3JpbmdfYnVmZmVyLmMKQEAgLTE4LDEzICsxOCwxNiBAQAogICogQXV0aG9yczoKICAqICAgSGFpeWFuZyBaaGFuZyA8aGFpeWFuZ3pAbWljcm9zb2Z0LmNvbT4KICAqICAgSGFuayBKYW5zc2VuICA8aGphbnNzZW5AbWljcm9zb2Z0LmNvbT4KKyAqICAgSy4gWS4gU3Jpbml2YXNhbiA8a3lzQG1pY3Jvc29mdC5jb20+CiAgKgogICovCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgImxvZ2dpbmcuaCIKLSNpbmNsdWRlICJyaW5nX2J1ZmZlci5oIgorCisjaW5jbHVkZSAiaHlwZXJ2LmgiCisjaW5jbHVkZSAiaHlwZXJ2X3ZtYnVzLmgiCiAKIAogLyogI2RlZmluZXMgKi8KQEAgLTM0LDE4ICszNywxNSBAQAogI2RlZmluZSBCWVRFU19BVkFJTF9UT19XUklURShyLCB3LCB6KSAoKHcpID49IChyKSkgPyAoKHopIC0gKCh3KSAtIChyKSkpIDogKChyKSAtICh3KSkKIAogCi0vKisrCi0KLU5hbWU6Ci0JZ2V0X3JpbmdidWZmZXJfYXZhaWxieXRlcygpCi0KLURlc2NyaXB0aW9uOgotCUdldCBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIHRvIHJlYWQgYW5kIHRvIHdyaXRlIHRvCi0JZm9yIHRoZSBzcGVjaWZpZWQgcmluZyBidWZmZXIKLQotLS0qLworLyoKKyAqCisgKiBodl9nZXRfcmluZ2J1ZmZlcl9hdmFpbGJ5dGVzKCkKKyAqCisgKiBHZXQgbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSB0byByZWFkIGFuZCB0byB3cml0ZSB0bworICogZm9yIHRoZSBzcGVjaWZpZWQgcmluZyBidWZmZXIKKyAqLwogc3RhdGljIGlubGluZSB2b2lkCi1nZXRfcmluZ2J1ZmZlcl9hdmFpbGJ5dGVzKHN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvICpyYmksCitodl9nZXRfcmluZ2J1ZmZlcl9hdmFpbGJ5dGVzKHN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvICpyYmksCiAJCQkgIHUzMiAqcmVhZCwgdTMyICp3cml0ZSkKIHsKIAl1MzIgcmVhZF9sb2MsIHdyaXRlX2xvYzsKQEAgLTU4LDE2MiArNTgsMTMxIEBACiAJKnJlYWQgPSByYmktPnJpbmdfZGF0YXNpemUgLSAqd3JpdGU7CiB9CiAKLS8qKysKLQotTmFtZToKLQlnZXRfbmV4dF93cml0ZV9sb2NhdGlvbigpCi0KLURlc2NyaXB0aW9uOgotCUdldCB0aGUgbmV4dCB3cml0ZSBsb2NhdGlvbiBmb3IgdGhlIHNwZWNpZmllZCByaW5nIGJ1ZmZlcgotCi0tLSovCisvKgorICogaHZfZ2V0X25leHRfd3JpdGVfbG9jYXRpb24oKQorICoKKyAqIEdldCB0aGUgbmV4dCB3cml0ZSBsb2NhdGlvbiBmb3IgdGhlIHNwZWNpZmllZCByaW5nIGJ1ZmZlcgorICoKKyAqLwogc3RhdGljIGlubGluZSB1MzIKLWdldF9uZXh0X3dyaXRlX2xvY2F0aW9uKHN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvICpyaW5nX2luZm8pCitodl9nZXRfbmV4dF93cml0ZV9sb2NhdGlvbihzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqcmluZ19pbmZvKQogewogCXUzMiBuZXh0ID0gcmluZ19pbmZvLT5yaW5nX2J1ZmZlci0+d3JpdGVfaW5kZXg7CiAKLQkvKiBBU1NFUlQobmV4dCA8IHJpbmdfaW5mby0+UmluZ0RhdGFTaXplKTsgKi8KLQogCXJldHVybiBuZXh0OwogfQogCi0vKisrCi0KLU5hbWU6Ci0Jc2V0X25leHRfd3JpdGVfbG9jYXRpb24oKQotCi1EZXNjcmlwdGlvbjoKLQlTZXQgdGhlIG5leHQgd3JpdGUgbG9jYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgcmluZyBidWZmZXIKLQotLS0qLworLyoKKyAqIGh2X3NldF9uZXh0X3dyaXRlX2xvY2F0aW9uKCkKKyAqCisgKiBTZXQgdGhlIG5leHQgd3JpdGUgbG9jYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgcmluZyBidWZmZXIKKyAqCisgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAotc2V0X25leHRfd3JpdGVfbG9jYXRpb24oc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKnJpbmdfaW5mbywKK2h2X3NldF9uZXh0X3dyaXRlX2xvY2F0aW9uKHN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvICpyaW5nX2luZm8sCiAJCSAgICAgdTMyIG5leHRfd3JpdGVfbG9jYXRpb24pCiB7CiAJcmluZ19pbmZvLT5yaW5nX2J1ZmZlci0+d3JpdGVfaW5kZXggPSBuZXh0X3dyaXRlX2xvY2F0aW9uOwogfQogCi0vKisrCi0KLU5hbWU6Ci0JZ2V0X25leHRfcmVhZF9sb2NhdGlvbigpCi0KLURlc2NyaXB0aW9uOgotCUdldCB0aGUgbmV4dCByZWFkIGxvY2F0aW9uIGZvciB0aGUgc3BlY2lmaWVkIHJpbmcgYnVmZmVyCi0KLS0tKi8KKy8qCisgKiBodl9nZXRfbmV4dF9yZWFkX2xvY2F0aW9uKCkKKyAqCisgKiBHZXQgdGhlIG5leHQgcmVhZCBsb2NhdGlvbiBmb3IgdGhlIHNwZWNpZmllZCByaW5nIGJ1ZmZlcgorICovCiBzdGF0aWMgaW5saW5lIHUzMgotZ2V0X25leHRfcmVhZF9sb2NhdGlvbihzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqcmluZ19pbmZvKQoraHZfZ2V0X25leHRfcmVhZF9sb2NhdGlvbihzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqcmluZ19pbmZvKQogewogCXUzMiBuZXh0ID0gcmluZ19pbmZvLT5yaW5nX2J1ZmZlci0+cmVhZF9pbmRleDsKIAotCS8qIEFTU0VSVChuZXh0IDwgcmluZ19pbmZvLT5SaW5nRGF0YVNpemUpOyAqLwotCiAJcmV0dXJuIG5leHQ7CiB9CiAKLS8qKysKLQotTmFtZToKLQlnZXRfbmV4dF9yZWFkbG9jYXRpb25fd2l0aG9mZnNldCgpCi0KLURlc2NyaXB0aW9uOgotCUdldCB0aGUgbmV4dCByZWFkIGxvY2F0aW9uICsgb2Zmc2V0IGZvciB0aGUgc3BlY2lmaWVkIHJpbmcgYnVmZmVyLgotCVRoaXMgYWxsb3dzIHRoZSBjYWxsZXIgdG8gc2tpcAotCi0tLSovCisvKgorICogaHZfZ2V0X25leHRfcmVhZGxvY2F0aW9uX3dpdGhvZmZzZXQoKQorICoKKyAqIEdldCB0aGUgbmV4dCByZWFkIGxvY2F0aW9uICsgb2Zmc2V0IGZvciB0aGUgc3BlY2lmaWVkIHJpbmcgYnVmZmVyLgorICogVGhpcyBhbGxvd3MgdGhlIGNhbGxlciB0byBza2lwCisgKi8KIHN0YXRpYyBpbmxpbmUgdTMyCi1nZXRfbmV4dF9yZWFkbG9jYXRpb25fd2l0aG9mZnNldChzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqcmluZ19pbmZvLAoraHZfZ2V0X25leHRfcmVhZGxvY2F0aW9uX3dpdGhvZmZzZXQoc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKnJpbmdfaW5mbywKIAkJCQkgdTMyIG9mZnNldCkKIHsKIAl1MzIgbmV4dCA9IHJpbmdfaW5mby0+cmluZ19idWZmZXItPnJlYWRfaW5kZXg7CiAKLQkvKiBBU1NFUlQobmV4dCA8IHJpbmdfaW5mby0+UmluZ0RhdGFTaXplKTsgKi8KIAluZXh0ICs9IG9mZnNldDsKIAluZXh0ICU9IHJpbmdfaW5mby0+cmluZ19kYXRhc2l6ZTsKIAogCXJldHVybiBuZXh0OwogfQogCi0vKisrCi0KLU5hbWU6Ci0Jc2V0X25leHRfcmVhZF9sb2NhdGlvbigpCi0KLURlc2NyaXB0aW9uOgotCVNldCB0aGUgbmV4dCByZWFkIGxvY2F0aW9uIGZvciB0aGUgc3BlY2lmaWVkIHJpbmcgYnVmZmVyCi0KLS0tKi8KKy8qCisgKgorICogaHZfc2V0X25leHRfcmVhZF9sb2NhdGlvbigpCisgKgorICogU2V0IHRoZSBuZXh0IHJlYWQgbG9jYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgcmluZyBidWZmZXIKKyAqCisgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAotc2V0X25leHRfcmVhZF9sb2NhdGlvbihzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqcmluZ19pbmZvLAoraHZfc2V0X25leHRfcmVhZF9sb2NhdGlvbihzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqcmluZ19pbmZvLAogCQkgICAgdTMyIG5leHRfcmVhZF9sb2NhdGlvbikKIHsKIAlyaW5nX2luZm8tPnJpbmdfYnVmZmVyLT5yZWFkX2luZGV4ID0gbmV4dF9yZWFkX2xvY2F0aW9uOwogfQogCiAKLS8qKysKLQotTmFtZToKLQlnZXRfcmluZ19idWZmZXIoKQotCi1EZXNjcmlwdGlvbjoKLQlHZXQgdGhlIHN0YXJ0IG9mIHRoZSByaW5nIGJ1ZmZlcgotCi0tLSovCisvKgorICoKKyAqIGh2X2dldF9yaW5nX2J1ZmZlcigpCisgKgorICogR2V0IHRoZSBzdGFydCBvZiB0aGUgcmluZyBidWZmZXIKKyAqLwogc3RhdGljIGlubGluZSB2b2lkICoKLWdldF9yaW5nX2J1ZmZlcihzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqcmluZ19pbmZvKQoraHZfZ2V0X3JpbmdfYnVmZmVyKHN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvICpyaW5nX2luZm8pCiB7CiAJcmV0dXJuICh2b2lkICopcmluZ19pbmZvLT5yaW5nX2J1ZmZlci0+YnVmZmVyOwogfQogCiAKLS8qKysKLQotTmFtZToKLQlnZXRfcmluZ19idWZmZXJzaXplKCkKLQotRGVzY3JpcHRpb246Ci0JR2V0IHRoZSBzaXplIG9mIHRoZSByaW5nIGJ1ZmZlcgotCi0tLSovCisvKgorICoKKyAqIGh2X2dldF9yaW5nX2J1ZmZlcnNpemUoKQorICoKKyAqIEdldCB0aGUgc2l6ZSBvZiB0aGUgcmluZyBidWZmZXIKKyAqLwogc3RhdGljIGlubGluZSB1MzIKLWdldF9yaW5nX2J1ZmZlcnNpemUoc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKnJpbmdfaW5mbykKK2h2X2dldF9yaW5nX2J1ZmZlcnNpemUoc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKnJpbmdfaW5mbykKIHsKIAlyZXR1cm4gcmluZ19pbmZvLT5yaW5nX2RhdGFzaXplOwogfQogCi0vKisrCi0KLU5hbWU6Ci0JZ2V0X3JpbmdfYnVmZmVyaW5kaWNlcygpCi0KLURlc2NyaXB0aW9uOgotCUdldCB0aGUgcmVhZCBhbmQgd3JpdGUgaW5kaWNlcyBhcyB1NjQgb2YgdGhlIHNwZWNpZmllZCByaW5nIGJ1ZmZlcgotCi0tLSovCisvKgorICoKKyAqIGh2X2dldF9yaW5nX2J1ZmZlcmluZGljZXMoKQorICoKKyAqIEdldCB0aGUgcmVhZCBhbmQgd3JpdGUgaW5kaWNlcyBhcyB1NjQgb2YgdGhlIHNwZWNpZmllZCByaW5nIGJ1ZmZlcgorICoKKyAqLwogc3RhdGljIGlubGluZSB1NjQKLWdldF9yaW5nX2J1ZmZlcmluZGljZXMoc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKnJpbmdfaW5mbykKK2h2X2dldF9yaW5nX2J1ZmZlcmluZGljZXMoc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKnJpbmdfaW5mbykKIHsKIAlyZXR1cm4gKHU2NClyaW5nX2luZm8tPnJpbmdfYnVmZmVyLT53cml0ZV9pbmRleCA8PCAzMjsKIH0KIAogCi0vKisrCi0KLU5hbWU6Ci0JZHVtcF9yaW5nX2luZm8oKQotCi1EZXNjcmlwdGlvbjoKLQlEdW1wIG91dCB0byBjb25zb2xlIHRoZSByaW5nIGJ1ZmZlciBpbmZvCi0KLS0tKi8KLXZvaWQgZHVtcF9yaW5nX2luZm8oc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKnJpbmdfaW5mbywgY2hhciAqcHJlZml4KQorLyoKKyAqCisgKiBodl9kdW1wX3JpbmdfaW5mbygpCisgKgorICogRHVtcCBvdXQgdG8gY29uc29sZSB0aGUgcmluZyBidWZmZXIgaW5mbworICoKKyAqLwordm9pZCBodl9kdW1wX3JpbmdfaW5mbyhzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqcmluZ19pbmZvLCBjaGFyICpwcmVmaXgpCiB7CiAJdTMyIGJ5dGVzX2F2YWlsX3Rvd3JpdGU7CiAJdTMyIGJ5dGVzX2F2YWlsX3RvcmVhZDsKIAotCWdldF9yaW5nYnVmZmVyX2F2YWlsYnl0ZXMocmluZ19pbmZvLAorCWh2X2dldF9yaW5nYnVmZmVyX2F2YWlsYnl0ZXMocmluZ19pbmZvLAogCSZieXRlc19hdmFpbF90b3JlYWQsCiAJJmJ5dGVzX2F2YWlsX3Rvd3JpdGUpOwogCkBAIC0yMzEsNDEgKzIwMCw5MCBAQAogfQogCiAKLS8qIEludGVybmFsIHJvdXRpbmVzICovCi0KLXN0YXRpYyB1MzIKLWNvcHl0b19yaW5nYnVmZmVyKAotCXN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvCSpyaW5nX2luZm8sCi0JdTMyCQkJCXN0YXJ0X3dyaXRlX29mZnNldCwKLQl2b2lkCQkJCSpzcmMsCi0JdTMyCQkJCXNyY2xlbik7Ci0KLXN0YXRpYyB1MzIKLWNvcHlmcm9tX3JpbmdidWZmZXIoCisvKgorICoKKyAqIGh2X2NvcHlmcm9tX3JpbmdidWZmZXIoKQorICoKKyAqIEhlbHBlciByb3V0aW5lIHRvIGNvcHkgdG8gc291cmNlIGZyb20gcmluZyBidWZmZXIuCisgKiBBc3N1bWUgdGhlcmUgaXMgZW5vdWdoIHJvb20uIEhhbmRsZXMgd3JhcC1hcm91bmQgaW4gc3JjIGNhc2Ugb25seSEhCisgKgorICovCitzdGF0aWMgdTMyIGh2X2NvcHlmcm9tX3JpbmdidWZmZXIoCiAJc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8JKnJpbmdfaW5mbywKIAl2b2lkCQkJCSpkZXN0LAogCXUzMgkJCQlkZXN0bGVuLAotCXUzMgkJCQlzdGFydF9yZWFkX29mZnNldCk7CisJdTMyCQkJCXN0YXJ0X3JlYWRfb2Zmc2V0KQoreworCXZvaWQgKnJpbmdfYnVmZmVyID0gaHZfZ2V0X3JpbmdfYnVmZmVyKHJpbmdfaW5mbyk7CisJdTMyIHJpbmdfYnVmZmVyX3NpemUgPSBodl9nZXRfcmluZ19idWZmZXJzaXplKHJpbmdfaW5mbyk7CisKKwl1MzIgZnJhZ19sZW47CisKKwkvKiB3cmFwLWFyb3VuZCBkZXRlY3RlZCBhdCB0aGUgc3JjICovCisJaWYgKGRlc3RsZW4gPiByaW5nX2J1ZmZlcl9zaXplIC0gc3RhcnRfcmVhZF9vZmZzZXQpIHsKKwkJZnJhZ19sZW4gPSByaW5nX2J1ZmZlcl9zaXplIC0gc3RhcnRfcmVhZF9vZmZzZXQ7CisKKwkJbWVtY3B5KGRlc3QsIHJpbmdfYnVmZmVyICsgc3RhcnRfcmVhZF9vZmZzZXQsIGZyYWdfbGVuKTsKKwkJbWVtY3B5KGRlc3QgKyBmcmFnX2xlbiwgcmluZ19idWZmZXIsIGRlc3RsZW4gLSBmcmFnX2xlbik7CisJfSBlbHNlCisKKwkJbWVtY3B5KGRlc3QsIHJpbmdfYnVmZmVyICsgc3RhcnRfcmVhZF9vZmZzZXQsIGRlc3RsZW4pOwogCiAKKwlzdGFydF9yZWFkX29mZnNldCArPSBkZXN0bGVuOworCXN0YXJ0X3JlYWRfb2Zmc2V0ICU9IHJpbmdfYnVmZmVyX3NpemU7CiAKLS8qKysKKwlyZXR1cm4gc3RhcnRfcmVhZF9vZmZzZXQ7Cit9CiAKLU5hbWU6Ci0JcmluZ2J1ZmZlcl9nZXRfZGVidWdpbmZvKCkKIAotRGVzY3JpcHRpb246Ci0JR2V0IHZhcmlvdXMgZGVidWcgbWV0cmljcyBmb3IgdGhlIHNwZWNpZmllZCByaW5nIGJ1ZmZlcgorLyoKKyAqCisgKiBodl9jb3B5dG9fcmluZ2J1ZmZlcigpCisgKgorICogSGVscGVyIHJvdXRpbmUgdG8gY29weSBmcm9tIHNvdXJjZSB0byByaW5nIGJ1ZmZlci4KKyAqIEFzc3VtZSB0aGVyZSBpcyBlbm91Z2ggcm9vbS4gSGFuZGxlcyB3cmFwLWFyb3VuZCBpbiBkZXN0IGNhc2Ugb25seSEhCisgKgorICovCitzdGF0aWMgdTMyIGh2X2NvcHl0b19yaW5nYnVmZmVyKAorCXN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvCSpyaW5nX2luZm8sCisJdTMyCQkJCXN0YXJ0X3dyaXRlX29mZnNldCwKKwl2b2lkCQkJCSpzcmMsCisJdTMyCQkJCXNyY2xlbikKK3sKKwl2b2lkICpyaW5nX2J1ZmZlciA9IGh2X2dldF9yaW5nX2J1ZmZlcihyaW5nX2luZm8pOworCXUzMiByaW5nX2J1ZmZlcl9zaXplID0gaHZfZ2V0X3JpbmdfYnVmZmVyc2l6ZShyaW5nX2luZm8pOworCXUzMiBmcmFnX2xlbjsKIAotLS0qLwotdm9pZCByaW5nYnVmZmVyX2dldF9kZWJ1Z2luZm8oc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKnJpbmdfaW5mbywKKwkvKiB3cmFwLWFyb3VuZCBkZXRlY3RlZCEgKi8KKwlpZiAoc3JjbGVuID4gcmluZ19idWZmZXJfc2l6ZSAtIHN0YXJ0X3dyaXRlX29mZnNldCkgeworCQlmcmFnX2xlbiA9IHJpbmdfYnVmZmVyX3NpemUgLSBzdGFydF93cml0ZV9vZmZzZXQ7CisJCW1lbWNweShyaW5nX2J1ZmZlciArIHN0YXJ0X3dyaXRlX29mZnNldCwgc3JjLCBmcmFnX2xlbik7CisJCW1lbWNweShyaW5nX2J1ZmZlciwgc3JjICsgZnJhZ19sZW4sIHNyY2xlbiAtIGZyYWdfbGVuKTsKKwl9IGVsc2UKKwkJbWVtY3B5KHJpbmdfYnVmZmVyICsgc3RhcnRfd3JpdGVfb2Zmc2V0LCBzcmMsIHNyY2xlbik7CisKKwlzdGFydF93cml0ZV9vZmZzZXQgKz0gc3JjbGVuOworCXN0YXJ0X3dyaXRlX29mZnNldCAlPSByaW5nX2J1ZmZlcl9zaXplOworCisJcmV0dXJuIHN0YXJ0X3dyaXRlX29mZnNldDsKK30KKworLyoKKyAqCisgKiBodl9yaW5nYnVmZmVyX2dldF9kZWJ1Z2luZm8oKQorICoKKyAqIEdldCB2YXJpb3VzIGRlYnVnIG1ldHJpY3MgZm9yIHRoZSBzcGVjaWZpZWQgcmluZyBidWZmZXIKKyAqCisgKi8KK3ZvaWQgaHZfcmluZ2J1ZmZlcl9nZXRfZGVidWdpbmZvKHN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvICpyaW5nX2luZm8sCiAJCQkgICAgc3RydWN0IGh2X3JpbmdfYnVmZmVyX2RlYnVnX2luZm8gKmRlYnVnX2luZm8pCiB7CiAJdTMyIGJ5dGVzX2F2YWlsX3Rvd3JpdGU7CiAJdTMyIGJ5dGVzX2F2YWlsX3RvcmVhZDsKIAogCWlmIChyaW5nX2luZm8tPnJpbmdfYnVmZmVyKSB7Ci0JCWdldF9yaW5nYnVmZmVyX2F2YWlsYnl0ZXMocmluZ19pbmZvLAorCQlodl9nZXRfcmluZ2J1ZmZlcl9hdmFpbGJ5dGVzKHJpbmdfaW5mbywKIAkJCQkJJmJ5dGVzX2F2YWlsX3RvcmVhZCwKIAkJCQkJJmJ5dGVzX2F2YWlsX3Rvd3JpdGUpOwogCkBAIC0yODEsMzAgKzI5OSwyNiBAQAogfQogCiAKLS8qKysKLQotTmFtZToKLQlnZXRfcmluZ2J1ZmZlcl9pbnRlcnJ1cHRfbWFzaygpCi0KLURlc2NyaXB0aW9uOgotCUdldCB0aGUgaW50ZXJydXB0IG1hc2sgZm9yIHRoZSBzcGVjaWZpZWQgcmluZyBidWZmZXIKLQotLS0qLwotdTMyIGdldF9yaW5nYnVmZmVyX2ludGVycnVwdF9tYXNrKHN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvICpyYmkpCisvKgorICoKKyAqIGh2X2dldF9yaW5nYnVmZmVyX2ludGVycnVwdF9tYXNrKCkKKyAqCisgKiBHZXQgdGhlIGludGVycnVwdCBtYXNrIGZvciB0aGUgc3BlY2lmaWVkIHJpbmcgYnVmZmVyCisgKgorICovCit1MzIgaHZfZ2V0X3JpbmdidWZmZXJfaW50ZXJydXB0X21hc2soc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKnJiaSkKIHsKIAlyZXR1cm4gcmJpLT5yaW5nX2J1ZmZlci0+aW50ZXJydXB0X21hc2s7CiB9CiAKLS8qKysKLQotTmFtZToKLQlyaW5nYnVmZmVyX2luaXQoKQotCi1EZXNjcmlwdGlvbjoKLQlJbml0aWFsaXplIHRoZSByaW5nIGJ1ZmZlcgotCi0tLSovCi1pbnQgcmluZ2J1ZmZlcl9pbml0KHN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvICpyaW5nX2luZm8sCisvKgorICoKKyAqIGh2X3JpbmdidWZmZXJfaW5pdCgpCisgKgorICpJbml0aWFsaXplIHRoZSByaW5nIGJ1ZmZlcgorICoKKyAqLworaW50IGh2X3JpbmdidWZmZXJfaW5pdChzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqcmluZ19pbmZvLAogCQkgICB2b2lkICpidWZmZXIsIHUzMiBidWZsZW4pCiB7CiAJaWYgKHNpemVvZihzdHJ1Y3QgaHZfcmluZ19idWZmZXIpICE9IFBBR0VfU0laRSkKQEAgLTMyNCwyOSArMzM4LDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qKysKLQotTmFtZToKLQlyaW5nYnVmZmVyX2NsZWFudXAoKQotCi1EZXNjcmlwdGlvbjoKLQlDbGVhbnVwIHRoZSByaW5nIGJ1ZmZlcgotCi0tLSovCi12b2lkIHJpbmdidWZmZXJfY2xlYW51cChzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqcmluZ19pbmZvKQorLyoKKyAqCisgKiBodl9yaW5nYnVmZmVyX2NsZWFudXAoKQorICoKKyAqIENsZWFudXAgdGhlIHJpbmcgYnVmZmVyCisgKgorICovCit2b2lkIGh2X3JpbmdidWZmZXJfY2xlYW51cChzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqcmluZ19pbmZvKQogewogfQogCi0vKisrCi0KLU5hbWU6Ci0JcmluZ2J1ZmZlcl93cml0ZSgpCi0KLURlc2NyaXB0aW9uOgotCVdyaXRlIHRvIHRoZSByaW5nIGJ1ZmZlcgotCi0tLSovCi1pbnQgcmluZ2J1ZmZlcl93cml0ZShzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqb3V0cmluZ19pbmZvLAorLyoKKyAqCisgKiBodl9yaW5nYnVmZmVyX3dyaXRlKCkKKyAqCisgKiBXcml0ZSB0byB0aGUgcmluZyBidWZmZXIKKyAqCisgKi8KK2ludCBodl9yaW5nYnVmZmVyX3dyaXRlKHN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvICpvdXRyaW5nX2luZm8sCiAJCSAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwgdTMyIHNnY291bnQpCiB7CiAJaW50IGkgPSAwOwpAQCAtMzU1LDcgKzM2NSw3IEBACiAJdTMyIHRvdGFsYnl0ZXNfdG93cml0ZSA9IDA7CiAKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwotCXZvbGF0aWxlIHUzMiBuZXh0X3dyaXRlX2xvY2F0aW9uOworCXUzMiBuZXh0X3dyaXRlX2xvY2F0aW9uOwogCXU2NCBwcmV2X2luZGljZXMgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTM2OCw0MyArMzc4LDM0IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmb3V0cmluZ19pbmZvLT5yaW5nX2xvY2ssIGZsYWdzKTsKIAotCWdldF9yaW5nYnVmZmVyX2F2YWlsYnl0ZXMob3V0cmluZ19pbmZvLAorCWh2X2dldF9yaW5nYnVmZmVyX2F2YWlsYnl0ZXMob3V0cmluZ19pbmZvLAogCQkJCSZieXRlc19hdmFpbF90b3JlYWQsCiAJCQkJJmJ5dGVzX2F2YWlsX3Rvd3JpdGUpOwogCi0JRFBSSU5UX0RCRyhWTUJVUywgIldyaXRpbmcgJXUgYnl0ZXMuLi4iLCB0b3RhbGJ5dGVzX3Rvd3JpdGUpOwotCi0JLyogRHVtcHJpbmdfaW5mbyhPdXRyaW5nX2luZm8sICJCRUZPUkUgIik7ICovCiAKIAkvKiBJZiB0aGVyZSBpcyBvbmx5IHJvb20gZm9yIHRoZSBwYWNrZXQsIGFzc3VtZSBpdCBpcyBmdWxsLiAqLwogCS8qIE90aGVyd2lzZSwgdGhlIG5leHQgdGltZSBhcm91bmQsIHdlIHRoaW5rIHRoZSByaW5nIGJ1ZmZlciAqLwogCS8qIGlzIGVtcHR5IHNpbmNlIHRoZSByZWFkIGluZGV4ID09IHdyaXRlIGluZGV4ICovCiAJaWYgKGJ5dGVzX2F2YWlsX3Rvd3JpdGUgPD0gdG90YWxieXRlc190b3dyaXRlKSB7Ci0JCURQUklOVF9EQkcoVk1CVVMsCi0JCQkiTm8gbW9yZSBzcGFjZSBsZWZ0IG9uIG91dGJvdW5kIHJpbmcgYnVmZmVyICIKLQkJCSIobmVlZGVkICV1LCBhdmFpbCAldSkiLAotCQkJdG90YWxieXRlc190b3dyaXRlLAotCQkJYnl0ZXNfYXZhaWxfdG93cml0ZSk7Ci0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3V0cmluZ19pbmZvLT5yaW5nX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCS8qIFdyaXRlIHRvIHRoZSByaW5nIGJ1ZmZlciAqLwotCW5leHRfd3JpdGVfbG9jYXRpb24gPSBnZXRfbmV4dF93cml0ZV9sb2NhdGlvbihvdXRyaW5nX2luZm8pOworCW5leHRfd3JpdGVfbG9jYXRpb24gPSBodl9nZXRfbmV4dF93cml0ZV9sb2NhdGlvbihvdXRyaW5nX2luZm8pOwogCiAJZm9yX2VhY2hfc2coc2dsaXN0LCBzZywgc2djb3VudCwgaSkKIAl7Ci0JCW5leHRfd3JpdGVfbG9jYXRpb24gPSBjb3B5dG9fcmluZ2J1ZmZlcihvdXRyaW5nX2luZm8sCisJCW5leHRfd3JpdGVfbG9jYXRpb24gPSBodl9jb3B5dG9fcmluZ2J1ZmZlcihvdXRyaW5nX2luZm8sCiAJCQkJCQkgICAgIG5leHRfd3JpdGVfbG9jYXRpb24sCiAJCQkJCQkgICAgIHNnX3ZpcnQoc2cpLAogCQkJCQkJICAgICBzZy0+bGVuZ3RoKTsKIAl9CiAKIAkvKiBTZXQgcHJldmlvdXMgcGFja2V0IHN0YXJ0ICovCi0JcHJldl9pbmRpY2VzID0gZ2V0X3JpbmdfYnVmZmVyaW5kaWNlcyhvdXRyaW5nX2luZm8pOworCXByZXZfaW5kaWNlcyA9IGh2X2dldF9yaW5nX2J1ZmZlcmluZGljZXMob3V0cmluZ19pbmZvKTsKIAotCW5leHRfd3JpdGVfbG9jYXRpb24gPSBjb3B5dG9fcmluZ2J1ZmZlcihvdXRyaW5nX2luZm8sCisJbmV4dF93cml0ZV9sb2NhdGlvbiA9IGh2X2NvcHl0b19yaW5nYnVmZmVyKG91dHJpbmdfaW5mbywKIAkJCQkJICAgICBuZXh0X3dyaXRlX2xvY2F0aW9uLAogCQkJCQkgICAgICZwcmV2X2luZGljZXMsCiAJCQkJCSAgICAgc2l6ZW9mKHU2NCkpOwpAQCAtNDEzLDI1ICs0MTQsMjIgQEAKIAltYigpOwogCiAJLyogTm93LCB1cGRhdGUgdGhlIHdyaXRlIGxvY2F0aW9uICovCi0Jc2V0X25leHRfd3JpdGVfbG9jYXRpb24ob3V0cmluZ19pbmZvLCBuZXh0X3dyaXRlX2xvY2F0aW9uKTsKKwlodl9zZXRfbmV4dF93cml0ZV9sb2NhdGlvbihvdXRyaW5nX2luZm8sIG5leHRfd3JpdGVfbG9jYXRpb24pOwogCi0JLyogRHVtcHJpbmdfaW5mbyhPdXRyaW5nX2luZm8sICJBRlRFUiAiKTsgKi8KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm91dHJpbmdfaW5mby0+cmluZ19sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKIAotLyorKwotCi1OYW1lOgotCXJpbmdidWZmZXJfcGVlaygpCi0KLURlc2NyaXB0aW9uOgotCVJlYWQgd2l0aG91dCBhZHZhbmNpbmcgdGhlIHJlYWQgaW5kZXgKLQotLS0qLwotaW50IHJpbmdidWZmZXJfcGVlayhzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqSW5yaW5nX2luZm8sCisvKgorICoKKyAqIGh2X3JpbmdidWZmZXJfcGVlaygpCisgKgorICogUmVhZCB3aXRob3V0IGFkdmFuY2luZyB0aGUgcmVhZCBpbmRleAorICoKKyAqLworaW50IGh2X3JpbmdidWZmZXJfcGVlayhzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqSW5yaW5nX2luZm8sCiAJCSAgIHZvaWQgKkJ1ZmZlciwgdTMyIGJ1ZmxlbikKIHsKIAl1MzIgYnl0ZXNfYXZhaWxfdG93cml0ZTsKQEAgLTQ0MSwxNyArNDM5LDEyIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmSW5yaW5nX2luZm8tPnJpbmdfbG9jaywgZmxhZ3MpOwogCi0JZ2V0X3JpbmdidWZmZXJfYXZhaWxieXRlcyhJbnJpbmdfaW5mbywKKwlodl9nZXRfcmluZ2J1ZmZlcl9hdmFpbGJ5dGVzKElucmluZ19pbmZvLAogCQkJCSZieXRlc19hdmFpbF90b3JlYWQsCiAJCQkJJmJ5dGVzX2F2YWlsX3Rvd3JpdGUpOwogCiAJLyogTWFrZSBzdXJlIHRoZXJlIGlzIHNvbWV0aGluZyB0byByZWFkICovCiAJaWYgKGJ5dGVzX2F2YWlsX3RvcmVhZCA8IGJ1ZmxlbikgewotCQkvKiBEUFJJTlRfREJHKFZNQlVTLAotCQkJImdvdCBjYWxsYmFjayBidXQgbm90IGVub3VnaCB0byByZWFkICIKLQkJCSI8YXZhaWwgdG8gcmVhZCAlZCByZWFkIHNpemUgJWQ+ISEiLAotCQkJYnl0ZXNfYXZhaWxfdG9yZWFkLAotCQkJQnVmZmVyTGVuKTsgKi8KIAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZJbnJpbmdfaW5mby0+cmluZ19sb2NrLCBmbGFncyk7CiAKQEAgLTQ1OSw5ICs0NTIsOSBAQAogCX0KIAogCS8qIENvbnZlcnQgdG8gYnl0ZSBvZmZzZXQgKi8KLQluZXh0X3JlYWRfbG9jYXRpb24gPSBnZXRfbmV4dF9yZWFkX2xvY2F0aW9uKElucmluZ19pbmZvKTsKKwluZXh0X3JlYWRfbG9jYXRpb24gPSBodl9nZXRfbmV4dF9yZWFkX2xvY2F0aW9uKElucmluZ19pbmZvKTsKIAotCW5leHRfcmVhZF9sb2NhdGlvbiA9IGNvcHlmcm9tX3JpbmdidWZmZXIoSW5yaW5nX2luZm8sCisJbmV4dF9yZWFkX2xvY2F0aW9uID0gaHZfY29weWZyb21fcmluZ2J1ZmZlcihJbnJpbmdfaW5mbywKIAkJCQkJCUJ1ZmZlciwKIAkJCQkJCWJ1ZmxlbiwKIAkJCQkJCW5leHRfcmVhZF9sb2NhdGlvbik7CkBAIC00NzIsMTYgKzQ2NSwxNCBAQAogfQogCiAKLS8qKysKLQotTmFtZToKLQlyaW5nYnVmZmVyX3JlYWQoKQotCi1EZXNjcmlwdGlvbjoKLQlSZWFkIGFuZCBhZHZhbmNlIHRoZSByZWFkIGluZGV4Ci0KLS0tKi8KLWludCByaW5nYnVmZmVyX3JlYWQoc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKmlucmluZ19pbmZvLCB2b2lkICpidWZmZXIsCisvKgorICoKKyAqIGh2X3JpbmdidWZmZXJfcmVhZCgpCisgKgorICogUmVhZCBhbmQgYWR2YW5jZSB0aGUgcmVhZCBpbmRleAorICoKKyAqLworaW50IGh2X3JpbmdidWZmZXJfcmVhZChzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqaW5yaW5nX2luZm8sIHZvaWQgKmJ1ZmZlciwKIAkJICAgdTMyIGJ1ZmxlbiwgdTMyIG9mZnNldCkKIHsKIAl1MzIgYnl0ZXNfYXZhaWxfdG93cml0ZTsKQEAgLTQ5NSwzNiArNDg2LDI2IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW5yaW5nX2luZm8tPnJpbmdfbG9jaywgZmxhZ3MpOwogCi0JZ2V0X3JpbmdidWZmZXJfYXZhaWxieXRlcyhpbnJpbmdfaW5mbywKKwlodl9nZXRfcmluZ2J1ZmZlcl9hdmFpbGJ5dGVzKGlucmluZ19pbmZvLAogCQkJCSZieXRlc19hdmFpbF90b3JlYWQsCiAJCQkJJmJ5dGVzX2F2YWlsX3Rvd3JpdGUpOwogCi0JRFBSSU5UX0RCRyhWTUJVUywgIlJlYWRpbmcgJXUgYnl0ZXMuLi4iLCBidWZsZW4pOwotCi0JLyogRHVtcHJpbmdfaW5mbyhJbnJpbmdfaW5mbywgIkJFRk9SRSAiKTsgKi8KLQogCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBzb21ldGhpbmcgdG8gcmVhZCAqLwogCWlmIChieXRlc19hdmFpbF90b3JlYWQgPCBidWZsZW4pIHsKLQkJRFBSSU5UX0RCRyhWTUJVUywKLQkJCSJnb3QgY2FsbGJhY2sgYnV0IG5vdCBlbm91Z2ggdG8gcmVhZCAiCi0JCQkiPGF2YWlsIHRvIHJlYWQgJWQgcmVhZCBzaXplICVkPiEhIiwKLQkJCWJ5dGVzX2F2YWlsX3RvcmVhZCwKLQkJCWJ1Zmxlbik7Ci0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5yaW5nX2luZm8tPnJpbmdfbG9jaywgZmxhZ3MpOwogCiAJCXJldHVybiAtMTsKIAl9CiAKIAluZXh0X3JlYWRfbG9jYXRpb24gPQotCQlnZXRfbmV4dF9yZWFkbG9jYXRpb25fd2l0aG9mZnNldChpbnJpbmdfaW5mbywgb2Zmc2V0KTsKKwkJaHZfZ2V0X25leHRfcmVhZGxvY2F0aW9uX3dpdGhvZmZzZXQoaW5yaW5nX2luZm8sIG9mZnNldCk7CiAKLQluZXh0X3JlYWRfbG9jYXRpb24gPSBjb3B5ZnJvbV9yaW5nYnVmZmVyKGlucmluZ19pbmZvLAorCW5leHRfcmVhZF9sb2NhdGlvbiA9IGh2X2NvcHlmcm9tX3JpbmdidWZmZXIoaW5yaW5nX2luZm8sCiAJCQkJCQlidWZmZXIsCiAJCQkJCQlidWZsZW4sCiAJCQkJCQluZXh0X3JlYWRfbG9jYXRpb24pOwogCi0JbmV4dF9yZWFkX2xvY2F0aW9uID0gY29weWZyb21fcmluZ2J1ZmZlcihpbnJpbmdfaW5mbywKKwluZXh0X3JlYWRfbG9jYXRpb24gPSBodl9jb3B5ZnJvbV9yaW5nYnVmZmVyKGlucmluZ19pbmZvLAogCQkJCQkJJnByZXZfaW5kaWNlcywKIAkJCQkJCXNpemVvZih1NjQpLAogCQkJCQkJbmV4dF9yZWFkX2xvY2F0aW9uKTsKQEAgLTUzNSw5NCArNTE2LDkgQEAKIAltYigpOwogCiAJLyogVXBkYXRlIHRoZSByZWFkIGluZGV4ICovCi0Jc2V0X25leHRfcmVhZF9sb2NhdGlvbihpbnJpbmdfaW5mbywgbmV4dF9yZWFkX2xvY2F0aW9uKTsKLQotCS8qIER1bXByaW5nX2luZm8oSW5yaW5nX2luZm8sICJBRlRFUiAiKTsgKi8KKwlodl9zZXRfbmV4dF9yZWFkX2xvY2F0aW9uKGlucmluZ19pbmZvLCBuZXh0X3JlYWRfbG9jYXRpb24pOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5yaW5nX2luZm8tPnJpbmdfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9Ci0KLQotLyorKwotCi1OYW1lOgotCWNvcHl0b19yaW5nYnVmZmVyKCkKLQotRGVzY3JpcHRpb246Ci0JSGVscGVyIHJvdXRpbmUgdG8gY29weSBmcm9tIHNvdXJjZSB0byByaW5nIGJ1ZmZlci4KLQlBc3N1bWUgdGhlcmUgaXMgZW5vdWdoIHJvb20uIEhhbmRsZXMgd3JhcC1hcm91bmQgaW4gZGVzdCBjYXNlIG9ubHkhIQotCi0tLSovCi1zdGF0aWMgdTMyCi1jb3B5dG9fcmluZ2J1ZmZlcigKLQlzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbwkqcmluZ19pbmZvLAotCXUzMgkJCQlzdGFydF93cml0ZV9vZmZzZXQsCi0Jdm9pZAkJCQkqc3JjLAotCXUzMgkJCQlzcmNsZW4pCi17Ci0Jdm9pZCAqcmluZ19idWZmZXIgPSBnZXRfcmluZ19idWZmZXIocmluZ19pbmZvKTsKLQl1MzIgcmluZ19idWZmZXJfc2l6ZSA9IGdldF9yaW5nX2J1ZmZlcnNpemUocmluZ19pbmZvKTsKLQl1MzIgZnJhZ19sZW47Ci0KLQkvKiB3cmFwLWFyb3VuZCBkZXRlY3RlZCEgKi8KLQlpZiAoc3JjbGVuID4gcmluZ19idWZmZXJfc2l6ZSAtIHN0YXJ0X3dyaXRlX29mZnNldCkgewotCQlEUFJJTlRfREJHKFZNQlVTLCAid3JhcC1hcm91bmQgZGV0ZWN0ZWQhIik7Ci0KLQkJZnJhZ19sZW4gPSByaW5nX2J1ZmZlcl9zaXplIC0gc3RhcnRfd3JpdGVfb2Zmc2V0OwotCQltZW1jcHkocmluZ19idWZmZXIgKyBzdGFydF93cml0ZV9vZmZzZXQsIHNyYywgZnJhZ19sZW4pOwotCQltZW1jcHkocmluZ19idWZmZXIsIHNyYyArIGZyYWdfbGVuLCBzcmNsZW4gLSBmcmFnX2xlbik7Ci0JfSBlbHNlCi0JCW1lbWNweShyaW5nX2J1ZmZlciArIHN0YXJ0X3dyaXRlX29mZnNldCwgc3JjLCBzcmNsZW4pOwotCi0Jc3RhcnRfd3JpdGVfb2Zmc2V0ICs9IHNyY2xlbjsKLQlzdGFydF93cml0ZV9vZmZzZXQgJT0gcmluZ19idWZmZXJfc2l6ZTsKLQotCXJldHVybiBzdGFydF93cml0ZV9vZmZzZXQ7Ci19Ci0KLQotLyorKwotCi1OYW1lOgotCWNvcHlmcm9tX3JpbmdidWZmZXIoKQotCi1EZXNjcmlwdGlvbjoKLQlIZWxwZXIgcm91dGluZSB0byBjb3B5IHRvIHNvdXJjZSBmcm9tIHJpbmcgYnVmZmVyLgotCUFzc3VtZSB0aGVyZSBpcyBlbm91Z2ggcm9vbS4gSGFuZGxlcyB3cmFwLWFyb3VuZCBpbiBzcmMgY2FzZSBvbmx5ISEKLQotLS0qLwotc3RhdGljIHUzMgotY29weWZyb21fcmluZ2J1ZmZlcigKLQlzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbwkqcmluZ19pbmZvLAotCXZvaWQJCQkJKmRlc3QsCi0JdTMyCQkJCWRlc3RsZW4sCi0JdTMyCQkJCXN0YXJ0X3JlYWRfb2Zmc2V0KQotewotCXZvaWQgKnJpbmdfYnVmZmVyID0gZ2V0X3JpbmdfYnVmZmVyKHJpbmdfaW5mbyk7Ci0JdTMyIHJpbmdfYnVmZmVyX3NpemUgPSBnZXRfcmluZ19idWZmZXJzaXplKHJpbmdfaW5mbyk7Ci0KLQl1MzIgZnJhZ19sZW47Ci0KLQkvKiB3cmFwLWFyb3VuZCBkZXRlY3RlZCBhdCB0aGUgc3JjICovCi0JaWYgKGRlc3RsZW4gPiByaW5nX2J1ZmZlcl9zaXplIC0gc3RhcnRfcmVhZF9vZmZzZXQpIHsKLQkJRFBSSU5UX0RCRyhWTUJVUywgInNyYyB3cmFwLWFyb3VuZCBkZXRlY3RlZCEiKTsKLQotCQlmcmFnX2xlbiA9IHJpbmdfYnVmZmVyX3NpemUgLSBzdGFydF9yZWFkX29mZnNldDsKLQotCQltZW1jcHkoZGVzdCwgcmluZ19idWZmZXIgKyBzdGFydF9yZWFkX29mZnNldCwgZnJhZ19sZW4pOwotCQltZW1jcHkoZGVzdCArIGZyYWdfbGVuLCByaW5nX2J1ZmZlciwgZGVzdGxlbiAtIGZyYWdfbGVuKTsKLQl9IGVsc2UKLQotCQltZW1jcHkoZGVzdCwgcmluZ19idWZmZXIgKyBzdGFydF9yZWFkX29mZnNldCwgZGVzdGxlbik7Ci0KLQotCXN0YXJ0X3JlYWRfb2Zmc2V0ICs9IGRlc3RsZW47Ci0Jc3RhcnRfcmVhZF9vZmZzZXQgJT0gcmluZ19idWZmZXJfc2l6ZTsKLQotCXJldHVybiBzdGFydF9yZWFkX29mZnNldDsKLX0KLQotCi0vKiBlb2YgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9yaW5nX2J1ZmZlci5oIGIvZHJpdmVycy9zdGFnaW5nL2h2L3JpbmdfYnVmZmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiZjIwZDYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L3JpbmdfYnVmZmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDksIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKLSAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAotICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZQotICogUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCi0gKgotICogQXV0aG9yczoKLSAqICAgSGFpeWFuZyBaaGFuZyA8aGFpeWFuZ3pAbWljcm9zb2Z0LmNvbT4KLSAqICAgSGFuayBKYW5zc2VuICA8aGphbnNzZW5AbWljcm9zb2Z0LmNvbT4KLSAqCi0gKi8KLQotCi0jaWZuZGVmIF9SSU5HX0JVRkZFUl9IXwotI2RlZmluZSBfUklOR19CVUZGRVJfSF8KLQotI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+Ci0KLXN0cnVjdCBodl9yaW5nX2J1ZmZlciB7Ci0JLyogT2Zmc2V0IGluIGJ5dGVzIGZyb20gdGhlIHN0YXJ0IG9mIHJpbmcgZGF0YSBiZWxvdyAqLwotCXZvbGF0aWxlIHUzMiB3cml0ZV9pbmRleDsKLQotCS8qIE9mZnNldCBpbiBieXRlcyBmcm9tIHRoZSBzdGFydCBvZiByaW5nIGRhdGEgYmVsb3cgKi8KLQl2b2xhdGlsZSB1MzIgcmVhZF9pbmRleDsKLQotCXZvbGF0aWxlIHUzMiBpbnRlcnJ1cHRfbWFzazsKLQotCS8qIFBhZCBpdCB0byBQQUdFX1NJWkUgc28gdGhhdCBkYXRhIHN0YXJ0cyBvbiBwYWdlIGJvdW5kYXJ5ICovCi0JdTgJcmVzZXJ2ZWRbNDA4NF07Ci0KLQkvKiBOT1RFOgotCSAqIFRoZSBpbnRlcnJ1cHRfbWFzayBmaWVsZCBpcyB1c2VkIG9ubHkgZm9yIGNoYW5uZWxzIGJ1dCBzaW5jZSBvdXIKLQkgKiB2bWJ1cyBjb25uZWN0aW9uIGFsc28gdXNlcyB0aGlzIGRhdGEgc3RydWN0dXJlIGFuZCBpdHMgZGF0YSBzdGFydHMKLQkgKiBoZXJlLCB3ZSBjb21tZW50ZWQgb3V0IHRoaXMgZmllbGQuCi0JICovCi0JLyogdm9sYXRpbGUgdTMyIEludGVycnVwdE1hc2s7ICovCi0KLQkvKgotCSAqIFJpbmcgZGF0YSBzdGFydHMgaGVyZSArIFJpbmdEYXRhU3RhcnRPZmZzZXQKLQkgKiAhISEgRE8gTk9UIHBsYWNlIGFueSBmaWVsZHMgYmVsb3cgdGhpcyAhISEKLQkgKi8KLQl1OCBidWZmZXJbMF07Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyB7Ci0Jc3RydWN0IGh2X3JpbmdfYnVmZmVyICpyaW5nX2J1ZmZlcjsKLQl1MzIgcmluZ19zaXplOwkJCS8qIEluY2x1ZGUgdGhlIHNoYXJlZCBoZWFkZXIgKi8KLQlzcGlubG9ja190IHJpbmdfbG9jazsKLQotCXUzMiByaW5nX2RhdGFzaXplOwkJLyogPCByaW5nX3NpemUgKi8KLQl1MzIgcmluZ19kYXRhX3N0YXJ0b2Zmc2V0OwotfTsKLQotc3RydWN0IGh2X3JpbmdfYnVmZmVyX2RlYnVnX2luZm8gewotCXUzMiBjdXJyZW50X2ludGVycnVwdF9tYXNrOwotCXUzMiBjdXJyZW50X3JlYWRfaW5kZXg7Ci0JdTMyIGN1cnJlbnRfd3JpdGVfaW5kZXg7Ci0JdTMyIGJ5dGVzX2F2YWlsX3RvcmVhZDsKLQl1MzIgYnl0ZXNfYXZhaWxfdG93cml0ZTsKLX07Ci0KLQotCi0vKiBJbnRlcmZhY2UgKi8KLQotCi1pbnQgcmluZ2J1ZmZlcl9pbml0KHN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvICpyaW5nX2luZm8sIHZvaWQgKmJ1ZmZlciwKLQkJICAgdTMyIGJ1Zmxlbik7Ci0KLXZvaWQgcmluZ2J1ZmZlcl9jbGVhbnVwKHN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvICpyaW5nX2luZm8pOwotCi1pbnQgcmluZ2J1ZmZlcl93cml0ZShzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqcmluZ19pbmZvLAotCQkgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCi0JCSAgICB1MzIgc2djb3VudCk7Ci0KLWludCByaW5nYnVmZmVyX3BlZWsoc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKnJpbmdfaW5mbywgdm9pZCAqYnVmZmVyLAotCQkgICB1MzIgYnVmbGVuKTsKLQotaW50IHJpbmdidWZmZXJfcmVhZChzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqcmluZ19pbmZvLAotCQkgICB2b2lkICpidWZmZXIsCi0JCSAgIHUzMiBidWZsZW4sCi0JCSAgIHUzMiBvZmZzZXQpOwotCi11MzIgZ2V0X3JpbmdidWZmZXJfaW50ZXJydXB0X21hc2soc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKnJpbmdfaW5mbyk7Ci0KLXZvaWQgZHVtcF9yaW5nX2luZm8oc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKnJpbmdfaW5mbywgY2hhciAqcHJlZml4KTsKLQotdm9pZCByaW5nYnVmZmVyX2dldF9kZWJ1Z2luZm8oc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKnJpbmdfaW5mbywKLQkJCSAgICBzdHJ1Y3QgaHZfcmluZ19idWZmZXJfZGVidWdfaW5mbyAqZGVidWdfaW5mbyk7Ci0KLSNlbmRpZiAvKiBfUklOR19CVUZGRVJfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9ybmRpc19maWx0ZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9ybmRpc19maWx0ZXIuYwppbmRleCAwNDgzNzZiLi42MGViZGIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvcm5kaXNfZmlsdGVyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L3JuZGlzX2ZpbHRlci5jCkBAIC0yNSwxNyArMjUsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogCi0jaW5jbHVkZSAibG9nZ2luZy5oIgotI2luY2x1ZGUgImh2X2FwaS5oIgotI2luY2x1ZGUgIm5ldHZzY19hcGkuaCIKLSNpbmNsdWRlICJybmRpc19maWx0ZXIuaCIKKyNpbmNsdWRlICJoeXBlcnYuaCIKKyNpbmNsdWRlICJoeXBlcnZfbmV0LmgiCiAKLS8qIERhdGEgdHlwZXMgKi8KLXN0cnVjdCBybmRpc19maWx0ZXJfZHJpdmVyX29iamVjdCB7Ci0JLyogVGhlIG9yaWdpbmFsIGRyaXZlciAqLwotCXN0cnVjdCBuZXR2c2NfZHJpdmVyIGlubmVyX2RydjsKLX07CiAKIGVudW0gcm5kaXNfZGV2aWNlX3N0YXRlIHsKIAlSTkRJU19ERVZfVU5JTklUSUFMSVpFRCA9IDAsCkBAIC01OSw4ICs1Myw3IEBACiAKIHN0cnVjdCBybmRpc19yZXF1ZXN0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RfZW50OwotCWludCB3YWl0X2NvbmRpdGlvbjsKLQl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X2V2ZW50OworCXN0cnVjdCBjb21wbGV0aW9uICB3YWl0X2V2ZW50OwogCiAJLyoKIAkgKiBGSVhNRTogV2UgYXNzdW1lZCBhIGZpeGVkIHNpemUgcmVzcG9uc2UgaGVyZS4gSWYgd2UgZG8gZXZlciBuZWVkIHRvCkBAIC03NiwzMSArNjksMTEgQEAKIAlzdHJ1Y3Qgcm5kaXNfbWVzc2FnZSByZXF1ZXN0X21zZzsKIH07CiAKLQotc3RydWN0IHJuZGlzX2ZpbHRlcl9wYWNrZXQgewotCXZvaWQgKmNvbXBsZXRpb25fY3R4OwotCXZvaWQgKCpjb21wbGV0aW9uKSh2b2lkICpjb250ZXh0KTsKLQlzdHJ1Y3Qgcm5kaXNfbWVzc2FnZSBtc2c7Ci19OwotCi0KLXN0YXRpYyBpbnQgcm5kaXNfZmlsdGVfZGV2aWNlX2FkZChzdHJ1Y3QgaHZfZGV2aWNlICpkZXYsCi0JCQkJICB2b2lkICphZGRpdGlvbmFsX2luZm8pOwotCi1zdGF0aWMgaW50IHJuZGlzX2ZpbHRlcl9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBodl9kZXZpY2UgKmRldik7Ci0KLXN0YXRpYyB2b2lkIHJuZGlzX2ZpbHRlcl9jbGVhbnVwKHN0cnVjdCBodl9kcml2ZXIgKmRydik7Ci0KLXN0YXRpYyBpbnQgcm5kaXNfZmlsdGVyX3NlbmQoc3RydWN0IGh2X2RldmljZSAqZGV2LAotCQkJICAgICBzdHJ1Y3QgaHZfbmV0dnNjX3BhY2tldCAqcGt0KTsKLQogc3RhdGljIHZvaWQgcm5kaXNfZmlsdGVyX3NlbmRfY29tcGxldGlvbih2b2lkICpjdHgpOwogCiBzdGF0aWMgdm9pZCBybmRpc19maWx0ZXJfc2VuZF9yZXF1ZXN0X2NvbXBsZXRpb24odm9pZCAqY3R4KTsKIAogCi0vKiBUaGUgb25lIGFuZCBvbmx5ICovCi1zdGF0aWMgc3RydWN0IHJuZGlzX2ZpbHRlcl9kcml2ZXJfb2JqZWN0IHJuZGlzX2ZpbHRlcjsKIAogc3RhdGljIHN0cnVjdCBybmRpc19kZXZpY2UgKmdldF9ybmRpc19kZXZpY2Uodm9pZCkKIHsKQEAgLTEzMiw3ICsxMDUsNyBAQAogCWlmICghcmVxdWVzdCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZyZXF1ZXN0LT53YWl0X2V2ZW50KTsKKwlpbml0X2NvbXBsZXRpb24oJnJlcXVlc3QtPndhaXRfZXZlbnQpOwogCiAJcm5kaXNfbXNnID0gJnJlcXVlc3QtPnJlcXVlc3RfbXNnOwogCXJuZGlzX21zZy0+bmRpc19tc2dfdHlwZSA9IG1zZ190eXBlOwpAQCAtMjY0LDcgKzIzNyw3IEBACiAJCXJuZGlzX2ZpbHRlcl9zZW5kX3JlcXVlc3RfY29tcGxldGlvbjsKIAlwYWNrZXQtPmNvbXBsZXRpb24uc2VuZC5zZW5kX2NvbXBsZXRpb25fdGlkID0gKHVuc2lnbmVkIGxvbmcpZGV2OwogCi0JcmV0ID0gcm5kaXNfZmlsdGVyLmlubmVyX2Rydi5zZW5kKGRldi0+bmV0X2Rldi0+ZGV2LCBwYWNrZXQpOworCXJldCA9IG5ldHZzY19zZW5kKGRldi0+bmV0X2Rldi0+ZGV2LCBwYWNrZXQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI4MywxNCArMjU2LDYgQEAKIAkJICovCiAJCWlmIChyZXF1ZXN0LT5yZXF1ZXN0X21zZy5tc2cuaW5pdF9yZXEucmVxX2lkCiAJCSAgICA9PSByZXNwLT5tc2cuaW5pdF9jb21wbGV0ZS5yZXFfaWQpIHsKLQkJCURQUklOVF9EQkcoTkVUVlNDLCAiZm91bmQgcm5kaXMgcmVxdWVzdCBmb3IgIgotCQkJCSJ0aGlzIHJlc3BvbnNlIChpZCAweCV4IHJlcSB0eXBlIDB4JXggcmVzICIKLQkJCQkidHlwZSAweCV4KSIsCi0JCQkJcmVxdWVzdC0+cmVxdWVzdF9tc2cubXNnLgotCQkJCSAgIGluaXRfcmVxLnJlcV9pZCwKLQkJCQlyZXF1ZXN0LT5yZXF1ZXN0X21zZy5uZGlzX21zZ190eXBlLAotCQkJCXJlc3AtPm5kaXNfbXNnX3R5cGUpOwotCiAJCQlmb3VuZCA9IHRydWU7CiAJCQlicmVhazsKIAkJfQpAQCAtMzAyLDEwICsyNjcsMTEgQEAKIAkJCW1lbWNweSgmcmVxdWVzdC0+cmVzcG9uc2VfbXNnLCByZXNwLAogCQkJICAgICAgIHJlc3AtPm1zZ19sZW4pOwogCQl9IGVsc2UgewotCQkJRFBSSU5UX0VSUihORVRWU0MsICJybmRpcyByZXNwb25zZSBidWZmZXIgb3ZlcmZsb3cgIgotCQkJCSAgImRldGVjdGVkIChzaXplICV1IG1heCAlenUpIiwKLQkJCQkgIHJlc3AtPm1zZ19sZW4sCi0JCQkJICBzaXplb2Yoc3RydWN0IHJuZGlzX2ZpbHRlcl9wYWNrZXQpKTsKKwkJCWRldl9lcnIoJmRldi0+bmV0X2Rldi0+ZGV2LT5kZXZpY2UsCisJCQkJInJuZGlzIHJlc3BvbnNlIGJ1ZmZlciBvdmVyZmxvdyAiCisJCQkJImRldGVjdGVkIChzaXplICV1IG1heCAlenUpXG4iLAorCQkJCXJlc3AtPm1zZ19sZW4sCisJCQkJc2l6ZW9mKHN0cnVjdCBybmRpc19maWx0ZXJfcGFja2V0KSk7CiAKIAkJCWlmIChyZXNwLT5uZGlzX21zZ190eXBlID09CiAJCQkgICAgUkVNT1RFX05ESVNfUkVTRVRfQ01QTFQpIHsKQEAgLTMxOSwxMyArMjg1LDEzIEBACiAJCQl9CiAJCX0KIAotCQlyZXF1ZXN0LT53YWl0X2NvbmRpdGlvbiA9IDE7Ci0JCXdha2VfdXAoJnJlcXVlc3QtPndhaXRfZXZlbnQpOworCQljb21wbGV0ZSgmcmVxdWVzdC0+d2FpdF9ldmVudCk7CiAJfSBlbHNlIHsKLQkJRFBSSU5UX0VSUihORVRWU0MsICJubyBybmRpcyByZXF1ZXN0IGZvdW5kIGZvciB0aGlzIHJlc3BvbnNlICIKLQkJCSAgICIoaWQgMHgleCByZXMgdHlwZSAweCV4KSIsCi0JCQkgICByZXNwLT5tc2cuaW5pdF9jb21wbGV0ZS5yZXFfaWQsCi0JCQkgICByZXNwLT5uZGlzX21zZ190eXBlKTsKKwkJZGV2X2VycigmZGV2LT5uZXRfZGV2LT5kZXYtPmRldmljZSwKKwkJCSJubyBybmRpcyByZXF1ZXN0IGZvdW5kIGZvciB0aGlzIHJlc3BvbnNlICIKKwkJCSIoaWQgMHgleCByZXMgdHlwZSAweCV4KVxuIiwKKwkJCXJlc3AtPm1zZy5pbml0X2NvbXBsZXRlLnJlcV9pZCwKKwkJCXJlc3AtPm5kaXNfbXNnX3R5cGUpOwogCX0KIH0KIApAQCAtMzM2LDEwICszMDIsMTAgQEAKIAkJCSZyZXNwLT5tc2cuaW5kaWNhdGVfc3RhdHVzOwogCiAJaWYgKGluZGljYXRlLT5zdGF0dXMgPT0gUk5ESVNfU1RBVFVTX01FRElBX0NPTk5FQ1QpIHsKLQkJcm5kaXNfZmlsdGVyLmlubmVyX2Rydi5saW5rX3N0YXR1c19jaGFuZ2UoCisJCW5ldHZzY19saW5rc3RhdHVzX2NhbGxiYWNrKAogCQkJZGV2LT5uZXRfZGV2LT5kZXYsIDEpOwogCX0gZWxzZSBpZiAoaW5kaWNhdGUtPnN0YXR1cyA9PSBSTkRJU19TVEFUVVNfTUVESUFfRElTQ09OTkVDVCkgewotCQlybmRpc19maWx0ZXIuaW5uZXJfZHJ2Lmxpbmtfc3RhdHVzX2NoYW5nZSgKKwkJbmV0dnNjX2xpbmtzdGF0dXNfY2FsbGJhY2soCiAJCQlkZXYtPm5ldF9kZXYtPmRldiwgMCk7CiAJfSBlbHNlIHsKIAkJLyoKQEAgLTM3MSwxMSArMzM3LDEwIEBACiAKIAlwa3QtPmlzX2RhdGFfcGt0ID0gdHJ1ZTsKIAotCXJuZGlzX2ZpbHRlci5pbm5lcl9kcnYucmVjdl9jYihkZXYtPm5ldF9kZXYtPmRldiwKLQkJCQkJCSAgIHBrdCk7CisJbmV0dnNjX3JlY3ZfY2FsbGJhY2soZGV2LT5uZXRfZGV2LT5kZXYsIHBrdCk7CiB9CiAKLXN0YXRpYyBpbnQgcm5kaXNfZmlsdGVyX3JlY2VpdmUoc3RydWN0IGh2X2RldmljZSAqZGV2LAoraW50IHJuZGlzX2ZpbHRlcl9yZWNlaXZlKHN0cnVjdCBodl9kZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgaHZfbmV0dnNjX3BhY2tldAkqcGt0KQogewogCXN0cnVjdCBuZXR2c2NfZGV2aWNlICpuZXRfZGV2ID0gZGV2LT5leHQ7CkBAIC0zODgsMTUgKzM1MywxNSBAQAogCiAJLyogTWFrZSBzdXJlIHRoZSBybmRpcyBkZXZpY2Ugc3RhdGUgaXMgaW5pdGlhbGl6ZWQgKi8KIAlpZiAoIW5ldF9kZXYtPmV4dGVuc2lvbikgewotCQlEUFJJTlRfRVJSKE5FVFZTQywgImdvdCBybmRpcyBtZXNzYWdlIGJ1dCBubyBybmRpcyBkZXZpY2UuLi4iCi0JCQkgICJkcm9wcGluZyB0aGlzIG1lc3NhZ2UhIik7CisJCWRldl9lcnIoJmRldi0+ZGV2aWNlLCAiZ290IHJuZGlzIG1lc3NhZ2UgYnV0IG5vIHJuZGlzIGRldmljZSAtICIKKwkJCSAgImRyb3BwaW5nIHRoaXMgbWVzc2FnZSFcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJcm5kaXNfZGV2ID0gKHN0cnVjdCBybmRpc19kZXZpY2UgKiluZXRfZGV2LT5leHRlbnNpb247CiAJaWYgKHJuZGlzX2Rldi0+c3RhdGUgPT0gUk5ESVNfREVWX1VOSU5JVElBTElaRUQpIHsKLQkJRFBSSU5UX0VSUihORVRWU0MsICJnb3Qgcm5kaXMgbWVzc2FnZSBidXQgcm5kaXMgZGV2aWNlICIKLQkJCSAgICJ1bmluaXRpYWxpemVkLi4uZHJvcHBpbmcgdGhpcyBtZXNzYWdlISIpOworCQlkZXZfZXJyKCZkZXYtPmRldmljZSwgImdvdCBybmRpcyBtZXNzYWdlIGJ1dCBybmRpcyBkZXZpY2UgIgorCQkJICAgInVuaW5pdGlhbGl6ZWQuLi5kcm9wcGluZyB0aGlzIG1lc3NhZ2UhXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtNDE3LDggKzM4Miw4IEBACiAJCWt1bm1hcF9hdG9taWMocm5kaXNfaGRyIC0gcGt0LT5wYWdlX2J1ZlswXS5vZmZzZXQsCiAJCQkgICAgICBLTV9JUlEwKTsKIAotCQlEUFJJTlRfRVJSKE5FVFZTQywgImludmFsaWQgcm5kaXMgbWVzc2FnZT8gKGV4cGVjdGVkICV1ICIKLQkJCSAgICJieXRlcyBnb3QgJXUpLi4uZHJvcHBpbmcgdGhpcyBtZXNzYWdlISIsCisJCWRldl9lcnIoJmRldi0+ZGV2aWNlLCAiaW52YWxpZCBybmRpcyBtZXNzYWdlPyAoZXhwZWN0ZWQgJXUgIgorCQkJICAgImJ5dGVzIGdvdCAldSkuLi5kcm9wcGluZyB0aGlzIG1lc3NhZ2UhXG4iLAogCQkJICAgcm5kaXNfaGRyLT5tc2dfbGVuLAogCQkJICAgcGt0LT50b3RhbF9kYXRhX2J1Zmxlbik7CiAJCXJldHVybiAtMTsKQEAgLTQyNyw4ICszOTIsOCBAQAogCiAJaWYgKChybmRpc19oZHItPm5kaXNfbXNnX3R5cGUgIT0gUkVNT1RFX05ESVNfUEFDS0VUX01TRykgJiYKIAkgICAgKHJuZGlzX2hkci0+bXNnX2xlbiA+IHNpemVvZihzdHJ1Y3Qgcm5kaXNfbWVzc2FnZSkpKSB7Ci0JCURQUklOVF9FUlIoTkVUVlNDLCAiaW5jb21pbmcgcm5kaXMgbWVzc2FnZSBidWZmZXIgb3ZlcmZsb3cgIgotCQkJICAgImRldGVjdGVkIChnb3QgJXUsIG1heCAlenUpLi4ubWFya2luZyBpdCBhbiBlcnJvciEiLAorCQlkZXZfZXJyKCZkZXYtPmRldmljZSwgImluY29taW5nIHJuZGlzIG1lc3NhZ2UgYnVmZmVyIG92ZXJmbG93ICIKKwkJCSAgICJkZXRlY3RlZCAoZ290ICV1LCBtYXggJXp1KS4ubWFya2luZyBpdCBhbiBlcnJvciFcbiIsCiAJCQkgICBybmRpc19oZHItPm1zZ19sZW4sCiAJCQkgICBzaXplb2Yoc3RydWN0IHJuZGlzX21lc3NhZ2UpKTsKIAl9CkBAIC00NjAsNyArNDI1LDggQEAKIAkJcm5kaXNfZmlsdGVyX3JlY2VpdmVfaW5kaWNhdGVfc3RhdHVzKHJuZGlzX2RldiwgJnJuZGlzX21zZyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCURQUklOVF9FUlIoTkVUVlNDLCAidW5oYW5kbGVkIHJuZGlzIG1lc3NhZ2UgKHR5cGUgJXUgbGVuICV1KSIsCisJCWRldl9lcnIoJmRldi0+ZGV2aWNlLAorCQkJInVuaGFuZGxlZCBybmRpcyBtZXNzYWdlICh0eXBlICV1IGxlbiAldSlcbiIsCiAJCQkgICBybmRpc19tc2cubmRpc19tc2dfdHlwZSwKIAkJCSAgIHJuZGlzX21zZy5tc2dfbGVuKTsKIAkJYnJlYWs7CkBAIC00NzcsNiArNDQzLDcgQEAKIAlzdHJ1Y3Qgcm5kaXNfcXVlcnlfcmVxdWVzdCAqcXVlcnk7CiAJc3RydWN0IHJuZGlzX3F1ZXJ5X2NvbXBsZXRlICpxdWVyeV9jb21wbGV0ZTsKIAlpbnQgcmV0ID0gMDsKKwlpbnQgdDsKIAogCWlmICghcmVzdWx0KQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ5NiwxNCArNDYzLDEyIEBACiAJcXVlcnktPmluZm9fYnVmbGVuID0gMDsKIAlxdWVyeS0+ZGV2X3ZjX2hhbmRsZSA9IDA7CiAKLQlyZXF1ZXN0LT53YWl0X2NvbmRpdGlvbiA9IDA7CiAJcmV0ID0gcm5kaXNfZmlsdGVyX3NlbmRfcmVxdWVzdChkZXYsIHJlcXVlc3QpOwogCWlmIChyZXQgIT0gMCkKIAkJZ290byBDbGVhbnVwOwogCi0Jd2FpdF9ldmVudF90aW1lb3V0KHJlcXVlc3QtPndhaXRfZXZlbnQsIHJlcXVlc3QtPndhaXRfY29uZGl0aW9uLAotCQkJCW1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpOwotCWlmIChyZXF1ZXN0LT53YWl0X2NvbmRpdGlvbiA9PSAwKSB7CisJdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmcmVxdWVzdC0+d2FpdF9ldmVudCwgSFopOworCWlmICh0ID09IDApIHsKIAkJcmV0ID0gLUVUSU1FRE9VVDsKIAkJZ290byBDbGVhbnVwOwogCX0KQEAgLTU1NSw3ICs1MjAsNyBAQAogCXN0cnVjdCBybmRpc19zZXRfcmVxdWVzdCAqc2V0OwogCXN0cnVjdCBybmRpc19zZXRfY29tcGxldGUgKnNldF9jb21wbGV0ZTsKIAl1MzIgc3RhdHVzOwotCWludCByZXQ7CisJaW50IHJldCwgdDsKIAogCXJlcXVlc3QgPSBnZXRfcm5kaXNfcmVxdWVzdChkZXYsIFJFTU9URV9ORElTX1NFVF9NU0csCiAJCQlSTkRJU19NRVNTQUdFX1NJWkUoc3RydWN0IHJuZGlzX3NldF9yZXF1ZXN0KSArCkBAIC01NzQsMTYgKzUzOSwxNiBAQAogCW1lbWNweSgodm9pZCAqKSh1bnNpZ25lZCBsb25nKXNldCArIHNpemVvZihzdHJ1Y3Qgcm5kaXNfc2V0X3JlcXVlc3QpLAogCSAgICAgICAmbmV3X2ZpbHRlciwgc2l6ZW9mKHUzMikpOwogCi0JcmVxdWVzdC0+d2FpdF9jb25kaXRpb24gPSAwOwogCXJldCA9IHJuZGlzX2ZpbHRlcl9zZW5kX3JlcXVlc3QoZGV2LCByZXF1ZXN0KTsKIAlpZiAocmV0ICE9IDApCiAJCWdvdG8gQ2xlYW51cDsKIAotCXdhaXRfZXZlbnRfdGltZW91dChyZXF1ZXN0LT53YWl0X2V2ZW50LCByZXF1ZXN0LT53YWl0X2NvbmRpdGlvbiwKLQkJbXNlY3NfdG9famlmZmllcygyMDAwKSk7Ci0JaWYgKHJlcXVlc3QtPndhaXRfY29uZGl0aW9uID09IDApIHsKKwl0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZyZXF1ZXN0LT53YWl0X2V2ZW50LCBIWik7CisKKwlpZiAodCA9PSAwKSB7CiAJCXJldCA9IC0xOwotCQlEUFJJTlRfRVJSKE5FVFZTQywgInRpbWVvdXQgYmVmb3JlIHdlIGdvdCBhIHNldCByZXNwb25zZS4uLiIpOworCQlkZXZfZXJyKCZkZXYtPm5ldF9kZXYtPmRldi0+ZGV2aWNlLAorCQkJInRpbWVvdXQgYmVmb3JlIHdlIGdvdCBhIHNldCByZXNwb25zZS4uLlxuIik7CiAJCS8qCiAJCSAqIFdlIGNhbid0IGRlYWxsb2NhdGUgdGhlIHJlcXVlc3Qgc2luY2Ugd2UgbWF5IHN0aWxsIHJlY2VpdmUgYQogCQkgKiBzZW5kIGNvbXBsZXRpb24gZm9yIGl0LgpAQCAtNjAzLDQyICs1NjgsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBybmRpc19maWx0ZXJfaW5pdChzdHJ1Y3QgbmV0dnNjX2RyaXZlciAqZHJ2KQotewotCURQUklOVF9EQkcoTkVUVlNDLCAic2l6ZW9mKHN0cnVjdCBybmRpc19maWx0ZXJfcGFja2V0KSA9PSAlemQiLAotCQkgICBzaXplb2Yoc3RydWN0IHJuZGlzX2ZpbHRlcl9wYWNrZXQpKTsKLQotCWRydi0+cmVxX2V4dF9zaXplID0gc2l6ZW9mKHN0cnVjdCBybmRpc19maWx0ZXJfcGFja2V0KTsKLQotCS8qIERyaXZlci0+Q29udGV4dCA9IHJuZGlzRHJpdmVyOyAqLwotCi0JbWVtc2V0KCZybmRpc19maWx0ZXIsIDAsIHNpemVvZihzdHJ1Y3Qgcm5kaXNfZmlsdGVyX2RyaXZlcl9vYmplY3QpKTsKLQotCS8qcm5kaXNEcml2ZXItPkRyaXZlciA9IERyaXZlcjsKLQotCUFTU0VSVChEcml2ZXItPk9uTGlua1N0YXR1c0NoYW5nZWQpOwotCXJuZGlzRHJpdmVyLT5PbkxpbmtTdGF0dXNDaGFuZ2VkID0gRHJpdmVyLT5PbkxpbmtTdGF0dXNDaGFuZ2VkOyovCi0KLQkvKiBTYXZlIHRoZSBvcmlnaW5hbCBkaXNwYXRjaCBoYW5kbGVycyBiZWZvcmUgd2Ugb3ZlcnJpZGUgaXQgKi8KLQlybmRpc19maWx0ZXIuaW5uZXJfZHJ2LmJhc2UuZGV2X2FkZCA9IGRydi0+YmFzZS5kZXZfYWRkOwotCXJuZGlzX2ZpbHRlci5pbm5lcl9kcnYuYmFzZS5kZXZfcm0gPQotCQkJCQlkcnYtPmJhc2UuZGV2X3JtOwotCXJuZGlzX2ZpbHRlci5pbm5lcl9kcnYuYmFzZS5jbGVhbnVwID0gZHJ2LT5iYXNlLmNsZWFudXA7Ci0KLQlybmRpc19maWx0ZXIuaW5uZXJfZHJ2LnNlbmQgPSBkcnYtPnNlbmQ7Ci0Jcm5kaXNfZmlsdGVyLmlubmVyX2Rydi5yZWN2X2NiID0gZHJ2LT5yZWN2X2NiOwotCXJuZGlzX2ZpbHRlci5pbm5lcl9kcnYubGlua19zdGF0dXNfY2hhbmdlID0KLQkJCQkJZHJ2LT5saW5rX3N0YXR1c19jaGFuZ2U7Ci0KLQkvKiBPdmVycmlkZSAqLwotCWRydi0+YmFzZS5kZXZfYWRkID0gcm5kaXNfZmlsdGVfZGV2aWNlX2FkZDsKLQlkcnYtPmJhc2UuZGV2X3JtID0gcm5kaXNfZmlsdGVyX2RldmljZV9yZW1vdmU7Ci0JZHJ2LT5iYXNlLmNsZWFudXAgPSBybmRpc19maWx0ZXJfY2xlYW51cDsKLQlkcnYtPnNlbmQgPSBybmRpc19maWx0ZXJfc2VuZDsKLQlkcnYtPnJlY3ZfY2IgPSBybmRpc19maWx0ZXJfcmVjZWl2ZTsKLQotCXJldHVybiAwOwotfQogCiBzdGF0aWMgaW50IHJuZGlzX2ZpbHRlcl9pbml0X2RldmljZShzdHJ1Y3Qgcm5kaXNfZGV2aWNlICpkZXYpCiB7CkBAIC02NDYsNyArNTc1LDcgQEAKIAlzdHJ1Y3Qgcm5kaXNfaW5pdGlhbGl6ZV9yZXF1ZXN0ICppbml0OwogCXN0cnVjdCBybmRpc19pbml0aWFsaXplX2NvbXBsZXRlICppbml0X2NvbXBsZXRlOwogCXUzMiBzdGF0dXM7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCB0OwogCiAJcmVxdWVzdCA9IGdldF9ybmRpc19yZXF1ZXN0KGRldiwgUkVNT1RFX05ESVNfSU5JVElBTElaRV9NU0csCiAJCQlSTkRJU19NRVNTQUdFX1NJWkUoc3RydWN0IHJuZGlzX2luaXRpYWxpemVfcmVxdWVzdCkpOwpAQCAtNjY0LDcgKzU5Myw2IEBACiAKIAlkZXYtPnN0YXRlID0gUk5ESVNfREVWX0lOSVRJQUxJWklORzsKIAotCXJlcXVlc3QtPndhaXRfY29uZGl0aW9uID0gMDsKIAlyZXQgPSBybmRpc19maWx0ZXJfc2VuZF9yZXF1ZXN0KGRldiwgcmVxdWVzdCk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCWRldi0+c3RhdGUgPSBSTkRJU19ERVZfVU5JTklUSUFMSVpFRDsKQEAgLTY3Miw5ICs2MDAsOSBAQAogCX0KIAogCi0Jd2FpdF9ldmVudF90aW1lb3V0KHJlcXVlc3QtPndhaXRfZXZlbnQsIHJlcXVlc3QtPndhaXRfY29uZGl0aW9uLAotCQltc2Vjc190b19qaWZmaWVzKDEwMDApKTsKLQlpZiAocmVxdWVzdC0+d2FpdF9jb25kaXRpb24gPT0gMCkgeworCXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnJlcXVlc3QtPndhaXRfZXZlbnQsIEhaKTsKKworCWlmICh0ID09IDApIHsKIAkJcmV0ID0gLUVUSU1FRE9VVDsKIAkJZ290byBDbGVhbnVwOwogCX0KQEAgLTc1Myw3ICs2ODEsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgcm5kaXNfZmlsdGVfZGV2aWNlX2FkZChzdHJ1Y3QgaHZfZGV2aWNlICpkZXYsCitpbnQgcm5kaXNfZmlsdGVfZGV2aWNlX2FkZChzdHJ1Y3QgaHZfZGV2aWNlICpkZXYsCiAJCQkJICB2b2lkICphZGRpdGlvbmFsX2luZm8pCiB7CiAJaW50IHJldDsKQEAgLTc2NSwxNCArNjkzLDEyIEBACiAJaWYgKCFybmRpc0RldmljZSkKIAkJcmV0dXJuIC0xOwogCi0JRFBSSU5UX0RCRyhORVRWU0MsICJybmRpcyBkZXZpY2Ugb2JqZWN0IGFsbG9jYXRlZCAtICVwIiwgcm5kaXNEZXZpY2UpOwotCiAJLyoKIAkgKiBMZXQgdGhlIGlubmVyIGRyaXZlciBoYW5kbGUgdGhpcyBmaXJzdCB0byBjcmVhdGUgdGhlIG5ldHZzYyBjaGFubmVsCiAJICogTk9URSEgT25jZSB0aGUgY2hhbm5lbCBpcyBjcmVhdGVkLCB3ZSBtYXkgZ2V0IGEgcmVjZWl2ZSBjYWxsYmFjawogCSAqIChSbmRpc0ZpbHRlck9uUmVjZWl2ZSgpKSBiZWZvcmUgdGhpcyBjYWxsIGlzIGNvbXBsZXRlZAogCSAqLwotCXJldCA9IHJuZGlzX2ZpbHRlci5pbm5lcl9kcnYuYmFzZS5kZXZfYWRkKGRldiwgYWRkaXRpb25hbF9pbmZvKTsKKwlyZXQgPSBuZXR2c2NfZGV2aWNlX2FkZChkZXYsIGFkZGl0aW9uYWxfaW5mbyk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCWtmcmVlKHJuZGlzRGV2aWNlKTsKIAkJcmV0dXJuIHJldDsKQEAgLTgwMiwyMSArNzI4LDIwIEBACiAJCSAqLwogCX0KIAotCURQUklOVF9JTkZPKE5FVFZTQywgIkRldmljZSAweCVwIG1hYyBhZGRyICVwTSIsCi0JCSAgICBybmRpc0RldmljZSwgcm5kaXNEZXZpY2UtPmh3X21hY19hZHIpOwotCiAJbWVtY3B5KGRldmljZUluZm8tPm1hY19hZHIsIHJuZGlzRGV2aWNlLT5od19tYWNfYWRyLCBFVEhfQUxFTik7CiAKIAlybmRpc19maWx0ZXJfcXVlcnlfZGV2aWNlX2xpbmtfc3RhdHVzKHJuZGlzRGV2aWNlKTsKIAogCWRldmljZUluZm8tPmxpbmtfc3RhdGUgPSBybmRpc0RldmljZS0+bGlua19zdGF0OwotCURQUklOVF9JTkZPKE5FVFZTQywgIkRldmljZSAweCVwIGxpbmsgc3RhdGUgJXMiLCBybmRpc0RldmljZSwKLQkJICAgICgoZGV2aWNlSW5mby0+bGlua19zdGF0ZSkgPyAoImRvd24iKSA6ICgidXAiKSkpOworCisJZGV2X2luZm8oJmRldi0+ZGV2aWNlLCAiRGV2aWNlIE1BQyAlcE0gbGluayBzdGF0ZSAlcyIsCisJCSBybmRpc0RldmljZS0+aHdfbWFjX2FkciwKKwkJICgoZGV2aWNlSW5mby0+bGlua19zdGF0ZSkgPyAoImRvd25cbiIpIDogKCJ1cFxuIikpKTsKIAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgcm5kaXNfZmlsdGVyX2RldmljZV9yZW1vdmUoc3RydWN0IGh2X2RldmljZSAqZGV2KQoraW50IHJuZGlzX2ZpbHRlcl9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBodl9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0X2RldiA9IGRldi0+ZXh0OwogCXN0cnVjdCBybmRpc19kZXZpY2UgKnJuZGlzX2RldiA9IG5ldF9kZXYtPmV4dGVuc2lvbjsKQEAgLTgyNywxNSArNzUyLDExIEBACiAJa2ZyZWUocm5kaXNfZGV2KTsKIAluZXRfZGV2LT5leHRlbnNpb24gPSBOVUxMOwogCi0JLyogUGFzcyBjb250cm9sIHRvIGlubmVyIGRyaXZlciB0byByZW1vdmUgdGhlIGRldmljZSAqLwotCXJuZGlzX2ZpbHRlci5pbm5lcl9kcnYuYmFzZS5kZXZfcm0oZGV2KTsKKwluZXR2c2NfZGV2aWNlX3JlbW92ZShkZXYpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHJuZGlzX2ZpbHRlcl9jbGVhbnVwKHN0cnVjdCBodl9kcml2ZXIgKmRydikKLXsKLX0KIAogaW50IHJuZGlzX2ZpbHRlcl9vcGVuKHN0cnVjdCBodl9kZXZpY2UgKmRldikKIHsKQEAgLTg1Nyw3ICs3NzgsNyBAQAogCXJldHVybiBybmRpc19maWx0ZXJfY2xvc2VfZGV2aWNlKG5ldERldmljZS0+ZXh0ZW5zaW9uKTsKIH0KIAotc3RhdGljIGludCBybmRpc19maWx0ZXJfc2VuZChzdHJ1Y3QgaHZfZGV2aWNlICpkZXYsCitpbnQgcm5kaXNfZmlsdGVyX3NlbmQoc3RydWN0IGh2X2RldmljZSAqZGV2LAogCQkJICAgICBzdHJ1Y3QgaHZfbmV0dnNjX3BhY2tldCAqcGt0KQogewogCWludCByZXQ7CkBAIC04OTcsNyArODE4LDcgQEAKIAlwa3QtPmNvbXBsZXRpb24uc2VuZC5zZW5kX2NvbXBsZXRpb24gPSBybmRpc19maWx0ZXJfc2VuZF9jb21wbGV0aW9uOwogCXBrdC0+Y29tcGxldGlvbi5zZW5kLnNlbmRfY29tcGxldGlvbl9jdHggPSBmaWx0ZXJQYWNrZXQ7CiAKLQlyZXQgPSBybmRpc19maWx0ZXIuaW5uZXJfZHJ2LnNlbmQoZGV2LCBwa3QpOworCXJldCA9IG5ldHZzY19zZW5kKGRldiwgcGt0KTsKIAlpZiAocmV0ICE9IDApIHsKIAkJLyoKIAkJICogUmVzZXQgdGhlIGNvbXBsZXRpb24gdG8gb3JpZ2luYWxzIHRvIGFsbG93IHJldHJpZXMgZnJvbQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L3JuZGlzX2ZpbHRlci5oIGIvZHJpdmVycy9zdGFnaW5nL2h2L3JuZGlzX2ZpbHRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGExOGYzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9ybmRpc19maWx0ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA5LCBNaWNyb3NvZnQgQ29ycG9yYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCi0gKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKLSAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUKLSAqIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBLgotICoKLSAqIEF1dGhvcnM6Ci0gKiAgIEhhaXlhbmcgWmhhbmcgPGhhaXlhbmd6QG1pY3Jvc29mdC5jb20+Ci0gKiAgIEhhbmsgSmFuc3NlbiAgPGhqYW5zc2VuQG1pY3Jvc29mdC5jb20+Ci0gKgotICovCi0KLQotI2lmbmRlZiBfUk5ESVNGSUxURVJfSF8KLSNkZWZpbmUgX1JORElTRklMVEVSX0hfCi0KLSNkZWZpbmUgX19zdHJ1Y3RfYmNvdW50KHgpCi0KLSNpbmNsdWRlICJuZXR2c2MuaCIKLQotI2luY2x1ZGUgInJuZGlzLmgiCi0KLSNkZWZpbmUgUk5ESVNfSEVBREVSX1NJWkUJKHNpemVvZihzdHJ1Y3Qgcm5kaXNfbWVzc2FnZSkgLSBcCi0JCQkJIHNpemVvZih1bmlvbiBybmRpc19tZXNzYWdlX2NvbnRhaW5lcikpCi0KLSNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9ESVJFQ1RFRAkweDAwMDAwMDAxCi0jZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfTVVMVElDQVNUCTB4MDAwMDAwMDIKLSNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUCTB4MDAwMDAwMDQKLSNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9CUk9BRENBU1QJMHgwMDAwMDAwOAotI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX1NPVVJDRV9ST1VUSU5HCTB4MDAwMDAwMTAKLSNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9QUk9NSVNDVU9VUwkweDAwMDAwMDIwCi0jZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfU01UCQkweDAwMDAwMDQwCi0jZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfQUxMX0xPQ0FMCTB4MDAwMDAwODAKLSNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9HUk9VUAkJMHgwMDAwMDEwMAotI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0FMTF9GVU5DVElPTkFMCTB4MDAwMDAyMDAKLSNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9GVU5DVElPTkFMCTB4MDAwMDA0MDAKLSNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9NQUNfRlJBTUUJMHgwMDAwMDgwMAotCi0KLS8qIEludGVyZmFjZSAqLwotCi1leHRlcm4gaW50IHJuZGlzX2ZpbHRlcl9pbml0KHN0cnVjdCBuZXR2c2NfZHJpdmVyICpkcml2ZXIpOwotCi0jZW5kaWYgLyogX1JORElTRklMVEVSX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvc3RvcnZzYy5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L3N0b3J2c2MuYwppbmRleCBlMmFkNzI5Li4wNmNkMzI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvc3RvcnZzYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9zdG9ydnNjLmMKQEAgLTE3LDcxICsxNywxOSBAQAogICogQXV0aG9yczoKICAqICAgSGFpeWFuZyBaaGFuZyA8aGFpeWFuZ3pAbWljcm9zb2Z0LmNvbT4KICAqICAgSGFuayBKYW5zc2VuICA8aGphbnNzZW5AbWljcm9zb2Z0LmNvbT4KKyAqICAgSy4gWS4gU3Jpbml2YXNhbiA8a3lzQG1pY3Jvc29mdC5jb20+CisgKgogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSAiaHZfYXBpLmgiCi0jaW5jbHVkZSAibG9nZ2luZy5oIgotI2luY2x1ZGUgInN0b3J2c2NfYXBpLmgiCi0jaW5jbHVkZSAidm1idXNfcGFja2V0X2Zvcm1hdC5oIgotI2luY2x1ZGUgInZzdG9yYWdlLmgiCi0jaW5jbHVkZSAiY2hhbm5lbC5oIgogCi0KLXN0cnVjdCBzdG9ydnNjX3JlcXVlc3RfZXh0ZW5zaW9uIHsKLQkvKiBMSVNUX0VOVFJZIExpc3RFbnRyeTsgKi8KLQotCXN0cnVjdCBodl9zdG9ydnNjX3JlcXVlc3QgKnJlcXVlc3Q7Ci0Jc3RydWN0IGh2X2RldmljZSAqZGV2aWNlOwotCi0JLyogU3luY2hyb25pemUgdGhlIHJlcXVlc3QvcmVzcG9uc2UgaWYgbmVlZGVkICovCi0JaW50IHdhaXRfY29uZGl0aW9uOwotCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfZXZlbnQ7Ci0KLQlzdHJ1Y3QgdnN0b3JfcGFja2V0IHZzdG9yX3BhY2tldDsKLX07Ci0KLS8qIEEgc3RvcnZzYyBkZXZpY2UgaXMgYSBkZXZpY2Ugb2JqZWN0IHRoYXQgY29udGFpbnMgYSB2bWJ1cyBjaGFubmVsICovCi1zdHJ1Y3Qgc3RvcnZzY19kZXZpY2UgewotCXN0cnVjdCBodl9kZXZpY2UgKmRldmljZTsKLQotCS8qIDAgaW5kaWNhdGVzIHRoZSBkZXZpY2UgaXMgYmVpbmcgZGVzdHJveWVkICovCi0JYXRvbWljX3QgcmVmX2NvdW50OwotCi0JYXRvbWljX3QgbnVtX291dHN0YW5kaW5nX3JlcTsKLQotCS8qCi0JICogRWFjaCB1bmlxdWUgUG9ydC9QYXRoL1RhcmdldCByZXByZXNlbnRzIDEgY2hhbm5lbCBpZSBzY3NpCi0JICogY29udHJvbGxlci4gSW4gcmVhbGl0eSwgdGhlIHBhdGhpZCwgdGFyZ2V0aWQgaXMgYWx3YXlzIDAKLQkgKiBhbmQgdGhlIHBvcnQgaXMgc2V0IGJ5IHVzCi0JICovCi0JdW5zaWduZWQgaW50IHBvcnRfbnVtYmVyOwotCXVuc2lnbmVkIGNoYXIgcGF0aF9pZDsKLQl1bnNpZ25lZCBjaGFyIHRhcmdldF9pZDsKLQotCS8qIExJU1RfRU5UUlkgT3V0c3RhbmRpbmdSZXF1ZXN0TGlzdDsgKi8KLQkvKiBIQU5ETEUgT3V0c3RhbmRpbmdSZXF1ZXN0TG9jazsgKi8KLQotCS8qIFVzZWQgZm9yIHZzYy92c3AgY2hhbm5lbCByZXNldCBwcm9jZXNzICovCi0Jc3RydWN0IHN0b3J2c2NfcmVxdWVzdF9leHRlbnNpb24gaW5pdF9yZXF1ZXN0OwotCXN0cnVjdCBzdG9ydnNjX3JlcXVlc3RfZXh0ZW5zaW9uIHJlc2V0X3JlcXVlc3Q7Ci19OwotCi0KLXN0YXRpYyBjb25zdCBjaGFyICpnX2RyaXZlcl9uYW1lID0gInN0b3J2c2MiOwotCi0vKiB7YmE2MTYzZDktMDRhMS00ZDI5LWI2MDUtNzJlMmZmYjFkYzdmfSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBodl9ndWlkIGdTdG9yVnNjRGV2aWNlVHlwZSA9IHsKLQkuZGF0YSA9IHsKLQkJMHhkOSwgMHg2MywgMHg2MSwgMHhiYSwgMHhhMSwgMHgwNCwgMHgyOSwgMHg0ZCwKLQkJMHhiNiwgMHgwNSwgMHg3MiwgMHhlMiwgMHhmZiwgMHhiMSwgMHhkYywgMHg3ZgotCX0KLX07CisjaW5jbHVkZSAiaHlwZXJ2LmgiCisjaW5jbHVkZSAiaHlwZXJ2X3N0b3JhZ2UuaCIKIAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzdG9ydnNjX2RldmljZSAqYWxsb2Nfc3Rvcl9kZXZpY2Uoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlKQpAQCAtOTYsNiArNDQsNyBAQAogCS8qIChpZSBnZXRfc3Rvcl9kZXZpY2UoKSBhbmQgbXVzdF9nZXRfc3Rvcl9kZXZpY2UoKSkgdG8gcHJvY2VlZC4gKi8KIAlhdG9taWNfY21weGNoZygmc3Rvcl9kZXZpY2UtPnJlZl9jb3VudCwgMCwgMik7CiAKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzdG9yX2RldmljZS0+d2FpdGluZ190b19kcmFpbik7CiAJc3Rvcl9kZXZpY2UtPmRldmljZSA9IGRldmljZTsKIAlkZXZpY2UtPmV4dCA9IHN0b3JfZGV2aWNlOwogCkBAIC0xMDQsMjQgKzUzLDkgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGZyZWVfc3Rvcl9kZXZpY2Uoc3RydWN0IHN0b3J2c2NfZGV2aWNlICpkZXZpY2UpCiB7Ci0JLyogQVNTRVJUKGF0b21pY19yZWFkKCZkZXZpY2UtPnJlZl9jb3VudCkgPT0gMCk7ICovCiAJa2ZyZWUoZGV2aWNlKTsKIH0KIAotLyogR2V0IHRoZSBzdG9yZGV2aWNlIG9iamVjdCBpZmYgZXhpc3RzIGFuZCBpdHMgcmVmY291bnQgPiAxICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzdG9ydnNjX2RldmljZSAqZ2V0X3N0b3JfZGV2aWNlKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSkKLXsKLQlzdHJ1Y3Qgc3RvcnZzY19kZXZpY2UgKnN0b3JfZGV2aWNlOwotCi0Jc3Rvcl9kZXZpY2UgPSAoc3RydWN0IHN0b3J2c2NfZGV2aWNlICopZGV2aWNlLT5leHQ7Ci0JaWYgKHN0b3JfZGV2aWNlICYmIGF0b21pY19yZWFkKCZzdG9yX2RldmljZS0+cmVmX2NvdW50KSA+IDEpCi0JCWF0b21pY19pbmMoJnN0b3JfZGV2aWNlLT5yZWZfY291bnQpOwotCWVsc2UKLQkJc3Rvcl9kZXZpY2UgPSBOVUxMOwotCi0JcmV0dXJuIHN0b3JfZGV2aWNlOwotfQotCiAvKiBHZXQgdGhlIHN0b3JkZXZpY2Ugb2JqZWN0IGlmZiBleGlzdHMgYW5kIGl0cyByZWZjb3VudCA+IDAgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHN0b3J2c2NfZGV2aWNlICptdXN0X2dldF9zdG9yX2RldmljZSgKIAkJCQkJc3RydWN0IGh2X2RldmljZSAqZGV2aWNlKQpAQCAtMTM3LDE3ICs3MSw2IEBACiAJcmV0dXJuIHN0b3JfZGV2aWNlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcHV0X3N0b3JfZGV2aWNlKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSkKLXsKLQlzdHJ1Y3Qgc3RvcnZzY19kZXZpY2UgKnN0b3JfZGV2aWNlOwotCi0Jc3Rvcl9kZXZpY2UgPSAoc3RydWN0IHN0b3J2c2NfZGV2aWNlICopZGV2aWNlLT5leHQ7Ci0JLyogQVNTRVJUKHN0b3JfZGV2aWNlKTsgKi8KLQotCWF0b21pY19kZWMoJnN0b3JfZGV2aWNlLT5yZWZfY291bnQpOwotCS8qIEFTU0VSVChhdG9taWNfcmVhZCgmc3Rvcl9kZXZpY2UtPnJlZl9jb3VudCkpOyAqLwotfQotCiAvKiBEcm9wIHJlZiBjb3VudCB0byAxIHRvIGVmZmVjdGl2ZWx5IGRpc2FibGUgZ2V0X3N0b3JfZGV2aWNlKCkgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHN0b3J2c2NfZGV2aWNlICpyZWxlYXNlX3N0b3JfZGV2aWNlKAogCQkJCQlzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UpCkBAIC0xNTUsNyArNzgsNiBAQAogCXN0cnVjdCBzdG9ydnNjX2RldmljZSAqc3Rvcl9kZXZpY2U7CiAKIAlzdG9yX2RldmljZSA9IChzdHJ1Y3Qgc3RvcnZzY19kZXZpY2UgKilkZXZpY2UtPmV4dDsKLQkvKiBBU1NFUlQoc3Rvcl9kZXZpY2UpOyAqLwogCiAJLyogQnVzeSB3YWl0IHVudGlsIHRoZSByZWYgZHJvcCB0byAyLCB0aGVuIHNldCBpdCB0byAxICovCiAJd2hpbGUgKGF0b21pY19jbXB4Y2hnKCZzdG9yX2RldmljZS0+cmVmX2NvdW50LCAyLCAxKSAhPSAyKQpAQCAtMTcxLDcgKzkzLDYgQEAKIAlzdHJ1Y3Qgc3RvcnZzY19kZXZpY2UgKnN0b3JfZGV2aWNlOwogCiAJc3Rvcl9kZXZpY2UgPSAoc3RydWN0IHN0b3J2c2NfZGV2aWNlICopZGV2aWNlLT5leHQ7Ci0JLyogQVNTRVJUKHN0b3JfZGV2aWNlKTsgKi8KIAogCS8qIEJ1c3kgd2FpdCB1bnRpbCB0aGUgcmVmIGRyb3AgdG8gMSwgdGhlbiBzZXQgaXQgdG8gMCAqLwogCXdoaWxlIChhdG9taWNfY21weGNoZygmc3Rvcl9kZXZpY2UtPnJlZl9jb3VudCwgMSwgMCkgIT0gMSkKQEAgLTE4MSwxOSArMTAyLDE2IEBACiAJcmV0dXJuIHN0b3JfZGV2aWNlOwogfQogCi1zdGF0aWMgaW50IHN0b3JfdnNjX2NoYW5uZWxfaW5pdChzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IHN0b3J2c2NfY2hhbm5lbF9pbml0KHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3Qgc3RvcnZzY19kZXZpY2UgKnN0b3JfZGV2aWNlOwotCXN0cnVjdCBzdG9ydnNjX3JlcXVlc3RfZXh0ZW5zaW9uICpyZXF1ZXN0OworCXN0cnVjdCBodl9zdG9ydnNjX3JlcXVlc3QgKnJlcXVlc3Q7CiAJc3RydWN0IHZzdG9yX3BhY2tldCAqdnN0b3JfcGFja2V0OwotCWludCByZXQ7CisJaW50IHJldCwgdDsKIAogCXN0b3JfZGV2aWNlID0gZ2V0X3N0b3JfZGV2aWNlKGRldmljZSk7Ci0JaWYgKCFzdG9yX2RldmljZSkgewotCQlEUFJJTlRfRVJSKFNUT1JWU0MsICJ1bmFibGUgdG8gZ2V0IHN0b3IgZGV2aWNlLi4uIgotCQkJICAgImRldmljZSBiZWluZyBkZXN0cm95ZWQ/Iik7CisJaWYgKCFzdG9yX2RldmljZSkKIAkJcmV0dXJuIC0xOwotCX0KIAogCXJlcXVlc3QgPSAmc3Rvcl9kZXZpY2UtPmluaXRfcmVxdWVzdDsKIAl2c3Rvcl9wYWNrZXQgPSAmcmVxdWVzdC0+dnN0b3JfcGFja2V0OwpAQCAtMjAyLDQwICsxMjAsMzAgQEAKIAkgKiBOb3csIGluaXRpYXRlIHRoZSB2c2MvdnNwIGluaXRpYWxpemF0aW9uIHByb3RvY29sIG9uIHRoZSBvcGVuCiAJICogY2hhbm5lbAogCSAqLwotCW1lbXNldChyZXF1ZXN0LCAwLCBzaXplb2Yoc3RydWN0IHN0b3J2c2NfcmVxdWVzdF9leHRlbnNpb24pKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZyZXF1ZXN0LT53YWl0X2V2ZW50KTsKKwltZW1zZXQocmVxdWVzdCwgMCwgc2l6ZW9mKHN0cnVjdCBodl9zdG9ydnNjX3JlcXVlc3QpKTsKKwlpbml0X2NvbXBsZXRpb24oJnJlcXVlc3QtPndhaXRfZXZlbnQpOwogCXZzdG9yX3BhY2tldC0+b3BlcmF0aW9uID0gVlNUT1JfT1BFUkFUSU9OX0JFR0lOX0lOSVRJQUxJWkFUSU9OOwogCXZzdG9yX3BhY2tldC0+ZmxhZ3MgPSBSRVFVRVNUX0NPTVBMRVRJT05fRkxBRzsKIAogCURQUklOVF9JTkZPKFNUT1JWU0MsICJCRUdJTl9JTklUSUFMSVpBVElPTl9PUEVSQVRJT04uLi4iKTsKIAotCXJlcXVlc3QtPndhaXRfY29uZGl0aW9uID0gMDsKIAlyZXQgPSB2bWJ1c19zZW5kcGFja2V0KGRldmljZS0+Y2hhbm5lbCwgdnN0b3JfcGFja2V0LAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgdnN0b3JfcGFja2V0KSwKIAkJCSAgICAgICAodW5zaWduZWQgbG9uZylyZXF1ZXN0LAogCQkJICAgICAgIFZNX1BLVF9EQVRBX0lOQkFORCwKIAkJCSAgICAgICBWTUJVU19EQVRBX1BBQ0tFVF9GTEFHX0NPTVBMRVRJT05fUkVRVUVTVEVEKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJRFBSSU5UX0VSUihTVE9SVlNDLAotCQkJICAgInVuYWJsZSB0byBzZW5kIEJFR0lOX0lOSVRJQUxJWkFUSU9OX09QRVJBVElPTiIpOworCWlmIChyZXQgIT0gMCkKIAkJZ290byBjbGVhbnVwOwotCX0KIAotCXdhaXRfZXZlbnRfdGltZW91dChyZXF1ZXN0LT53YWl0X2V2ZW50LCByZXF1ZXN0LT53YWl0X2NvbmRpdGlvbiwKLQkJCW1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpOwotCWlmIChyZXF1ZXN0LT53YWl0X2NvbmRpdGlvbiA9PSAwKSB7CisJdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmcmVxdWVzdC0+d2FpdF9ldmVudCwgSFopOworCWlmICh0ID09IDApIHsKIAkJcmV0ID0gLUVUSU1FRE9VVDsKIAkJZ290byBjbGVhbnVwOwogCX0KIAotCiAJaWYgKHZzdG9yX3BhY2tldC0+b3BlcmF0aW9uICE9IFZTVE9SX09QRVJBVElPTl9DT01QTEVURV9JTyB8fAotCSAgICB2c3Rvcl9wYWNrZXQtPnN0YXR1cyAhPSAwKSB7Ci0JCURQUklOVF9FUlIoU1RPUlZTQywgIkJFR0lOX0lOSVRJQUxJWkFUSU9OX09QRVJBVElPTiBmYWlsZWQgIgotCQkJICAgIihvcCAlZCBzdGF0dXMgMHgleCkiLAotCQkJICAgdnN0b3JfcGFja2V0LT5vcGVyYXRpb24sIHZzdG9yX3BhY2tldC0+c3RhdHVzKTsKKwkgICAgdnN0b3JfcGFja2V0LT5zdGF0dXMgIT0gMCkKIAkJZ290byBjbGVhbnVwOwotCX0KIAogCURQUklOVF9JTkZPKFNUT1JWU0MsICJRVUVSWV9QUk9UT0NPTF9WRVJTSU9OX09QRVJBVElPTi4uLiIpOwogCkBAIC0yNDcsMzMgKzE1NSwyNCBAQAogCXZzdG9yX3BhY2tldC0+dmVyc2lvbi5tYWpvcl9taW5vciA9IFZNU1RPUl9QUk9UT0NPTF9WRVJTSU9OX0NVUlJFTlQ7CiAJRklMTF9WTVNUT1JfUkVWSVNJT04odnN0b3JfcGFja2V0LT52ZXJzaW9uLnJldmlzaW9uKTsKIAotCXJlcXVlc3QtPndhaXRfY29uZGl0aW9uID0gMDsKIAlyZXQgPSB2bWJ1c19zZW5kcGFja2V0KGRldmljZS0+Y2hhbm5lbCwgdnN0b3JfcGFja2V0LAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgdnN0b3JfcGFja2V0KSwKIAkJCSAgICAgICAodW5zaWduZWQgbG9uZylyZXF1ZXN0LAogCQkJICAgICAgIFZNX1BLVF9EQVRBX0lOQkFORCwKIAkJCSAgICAgICBWTUJVU19EQVRBX1BBQ0tFVF9GTEFHX0NPTVBMRVRJT05fUkVRVUVTVEVEKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJRFBSSU5UX0VSUihTVE9SVlNDLAotCQkJICAgInVuYWJsZSB0byBzZW5kIEJFR0lOX0lOSVRJQUxJWkFUSU9OX09QRVJBVElPTiIpOworCWlmIChyZXQgIT0gMCkKIAkJZ290byBjbGVhbnVwOwotCX0KIAotCXdhaXRfZXZlbnRfdGltZW91dChyZXF1ZXN0LT53YWl0X2V2ZW50LCByZXF1ZXN0LT53YWl0X2NvbmRpdGlvbiwKLQkJCW1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpOwotCWlmIChyZXF1ZXN0LT53YWl0X2NvbmRpdGlvbiA9PSAwKSB7CisJdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmcmVxdWVzdC0+d2FpdF9ldmVudCwgSFopOworCWlmICh0ID09IDApIHsKIAkJcmV0ID0gLUVUSU1FRE9VVDsKIAkJZ290byBjbGVhbnVwOwogCX0KIAogCS8qIFRPRE86IENoZWNrIHJldHVybmVkIHZlcnNpb24gKi8KIAlpZiAodnN0b3JfcGFja2V0LT5vcGVyYXRpb24gIT0gVlNUT1JfT1BFUkFUSU9OX0NPTVBMRVRFX0lPIHx8Ci0JICAgIHZzdG9yX3BhY2tldC0+c3RhdHVzICE9IDApIHsKLQkJRFBSSU5UX0VSUihTVE9SVlNDLCAiUVVFUllfUFJPVE9DT0xfVkVSU0lPTl9PUEVSQVRJT04gZmFpbGVkICIKLQkJCSAgICIob3AgJWQgc3RhdHVzIDB4JXgpIiwKLQkJCSAgIHZzdG9yX3BhY2tldC0+b3BlcmF0aW9uLCB2c3Rvcl9wYWNrZXQtPnN0YXR1cyk7CisJICAgIHZzdG9yX3BhY2tldC0+c3RhdHVzICE9IDApCiAJCWdvdG8gY2xlYW51cDsKLQl9CiAKIAkvKiBRdWVyeSBjaGFubmVsIHByb3BlcnRpZXMgKi8KIAlEUFJJTlRfSU5GTyhTVE9SVlNDLCAiUVVFUllfUFJPUEVSVElFU19PUEVSQVRJT04uLi4iKTsKQEAgLTI4NCw3NiArMTgzLDU0IEBACiAJdnN0b3JfcGFja2V0LT5zdG9yYWdlX2NoYW5uZWxfcHJvcGVydGllcy5wb3J0X251bWJlciA9CiAJCQkJCXN0b3JfZGV2aWNlLT5wb3J0X251bWJlcjsKIAotCXJlcXVlc3QtPndhaXRfY29uZGl0aW9uID0gMDsKIAlyZXQgPSB2bWJ1c19zZW5kcGFja2V0KGRldmljZS0+Y2hhbm5lbCwgdnN0b3JfcGFja2V0LAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgdnN0b3JfcGFja2V0KSwKIAkJCSAgICAgICAodW5zaWduZWQgbG9uZylyZXF1ZXN0LAogCQkJICAgICAgIFZNX1BLVF9EQVRBX0lOQkFORCwKIAkJCSAgICAgICBWTUJVU19EQVRBX1BBQ0tFVF9GTEFHX0NPTVBMRVRJT05fUkVRVUVTVEVEKTsKIAotCWlmIChyZXQgIT0gMCkgewotCQlEUFJJTlRfRVJSKFNUT1JWU0MsCi0JCQkgICAidW5hYmxlIHRvIHNlbmQgUVVFUllfUFJPUEVSVElFU19PUEVSQVRJT04iKTsKKwlpZiAocmV0ICE9IDApCiAJCWdvdG8gY2xlYW51cDsKLQl9CiAKLQl3YWl0X2V2ZW50X3RpbWVvdXQocmVxdWVzdC0+d2FpdF9ldmVudCwgcmVxdWVzdC0+d2FpdF9jb25kaXRpb24sCi0JCQltc2Vjc190b19qaWZmaWVzKDEwMDApKTsKLQlpZiAocmVxdWVzdC0+d2FpdF9jb25kaXRpb24gPT0gMCkgeworCXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnJlcXVlc3QtPndhaXRfZXZlbnQsIEhaKTsKKwlpZiAodCA9PSAwKSB7CiAJCXJldCA9IC1FVElNRURPVVQ7CiAJCWdvdG8gY2xlYW51cDsKIAl9CiAKIAkvKiBUT0RPOiBDaGVjayByZXR1cm5lZCB2ZXJzaW9uICovCiAJaWYgKHZzdG9yX3BhY2tldC0+b3BlcmF0aW9uICE9IFZTVE9SX09QRVJBVElPTl9DT01QTEVURV9JTyB8fAotCSAgICB2c3Rvcl9wYWNrZXQtPnN0YXR1cyAhPSAwKSB7Ci0JCURQUklOVF9FUlIoU1RPUlZTQywgIlFVRVJZX1BST1BFUlRJRVNfT1BFUkFUSU9OIGZhaWxlZCAiCi0JCQkgICAiKG9wICVkIHN0YXR1cyAweCV4KSIsCi0JCQkgICB2c3Rvcl9wYWNrZXQtPm9wZXJhdGlvbiwgdnN0b3JfcGFja2V0LT5zdGF0dXMpOworCSAgICB2c3Rvcl9wYWNrZXQtPnN0YXR1cyAhPSAwKQogCQlnb3RvIGNsZWFudXA7Ci0JfQogCiAJc3Rvcl9kZXZpY2UtPnBhdGhfaWQgPSB2c3Rvcl9wYWNrZXQtPnN0b3JhZ2VfY2hhbm5lbF9wcm9wZXJ0aWVzLnBhdGhfaWQ7CiAJc3Rvcl9kZXZpY2UtPnRhcmdldF9pZAogCQk9IHZzdG9yX3BhY2tldC0+c3RvcmFnZV9jaGFubmVsX3Byb3BlcnRpZXMudGFyZ2V0X2lkOwogCi0JRFBSSU5UX0RCRyhTVE9SVlNDLCAiY2hhbm5lbCBmbGFnIDB4JXgsIG1heCB4ZmVyIGxlbiAweCV4IiwKLQkJICAgdnN0b3JfcGFja2V0LT5zdG9yYWdlX2NoYW5uZWxfcHJvcGVydGllcy5mbGFncywKLQkJICAgdnN0b3JfcGFja2V0LT5zdG9yYWdlX2NoYW5uZWxfcHJvcGVydGllcy5tYXhfdHJhbnNmZXJfYnl0ZXMpOwotCiAJRFBSSU5UX0lORk8oU1RPUlZTQywgIkVORF9JTklUSUFMSVpBVElPTl9PUEVSQVRJT04uLi4iKTsKIAogCW1lbXNldCh2c3Rvcl9wYWNrZXQsIDAsIHNpemVvZihzdHJ1Y3QgdnN0b3JfcGFja2V0KSk7CiAJdnN0b3JfcGFja2V0LT5vcGVyYXRpb24gPSBWU1RPUl9PUEVSQVRJT05fRU5EX0lOSVRJQUxJWkFUSU9OOwogCXZzdG9yX3BhY2tldC0+ZmxhZ3MgPSBSRVFVRVNUX0NPTVBMRVRJT05fRkxBRzsKIAotCXJlcXVlc3QtPndhaXRfY29uZGl0aW9uID0gMDsKIAlyZXQgPSB2bWJ1c19zZW5kcGFja2V0KGRldmljZS0+Y2hhbm5lbCwgdnN0b3JfcGFja2V0LAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgdnN0b3JfcGFja2V0KSwKIAkJCSAgICAgICAodW5zaWduZWQgbG9uZylyZXF1ZXN0LAogCQkJICAgICAgIFZNX1BLVF9EQVRBX0lOQkFORCwKIAkJCSAgICAgICBWTUJVU19EQVRBX1BBQ0tFVF9GTEFHX0NPTVBMRVRJT05fUkVRVUVTVEVEKTsKIAotCWlmIChyZXQgIT0gMCkgewotCQlEUFJJTlRfRVJSKFNUT1JWU0MsCi0JCQkgICAidW5hYmxlIHRvIHNlbmQgRU5EX0lOSVRJQUxJWkFUSU9OX09QRVJBVElPTiIpOworCWlmIChyZXQgIT0gMCkKIAkJZ290byBjbGVhbnVwOwotCX0KIAotCXdhaXRfZXZlbnRfdGltZW91dChyZXF1ZXN0LT53YWl0X2V2ZW50LCByZXF1ZXN0LT53YWl0X2NvbmRpdGlvbiwKLQkJCW1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpOwotCWlmIChyZXF1ZXN0LT53YWl0X2NvbmRpdGlvbiA9PSAwKSB7CisJdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmcmVxdWVzdC0+d2FpdF9ldmVudCwgSFopOworCWlmICh0ID09IDApIHsKIAkJcmV0ID0gLUVUSU1FRE9VVDsKIAkJZ290byBjbGVhbnVwOwogCX0KIAogCWlmICh2c3Rvcl9wYWNrZXQtPm9wZXJhdGlvbiAhPSBWU1RPUl9PUEVSQVRJT05fQ09NUExFVEVfSU8gfHwKLQkgICAgdnN0b3JfcGFja2V0LT5zdGF0dXMgIT0gMCkgewotCQlEUFJJTlRfRVJSKFNUT1JWU0MsICJFTkRfSU5JVElBTElaQVRJT05fT1BFUkFUSU9OIGZhaWxlZCAiCi0JCQkgICAiKG9wICVkIHN0YXR1cyAweCV4KSIsCi0JCQkgICB2c3Rvcl9wYWNrZXQtPm9wZXJhdGlvbiwgdnN0b3JfcGFja2V0LT5zdGF0dXMpOworCSAgICB2c3Rvcl9wYWNrZXQtPnN0YXR1cyAhPSAwKQogCQlnb3RvIGNsZWFudXA7Ci0JfQogCiAJRFBSSU5UX0lORk8oU1RPUlZTQywgIioqKiogc3RvcmFnZSBjaGFubmVsIHVwIGFuZCBydW5uaW5nISEgKioqKiIpOwogCkBAIC0zNjIsNzggKzIzOSw3MCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIHN0b3JfdnNjX29uX2lvX2NvbXBsZXRpb24oc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLAorc3RhdGljIHZvaWQgc3RvcnZzY19vbl9pb19jb21wbGV0aW9uKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSwKIAkJCQkgIHN0cnVjdCB2c3Rvcl9wYWNrZXQgKnZzdG9yX3BhY2tldCwKLQkJCQkgIHN0cnVjdCBzdG9ydnNjX3JlcXVlc3RfZXh0ZW5zaW9uICpyZXF1ZXN0X2V4dCkKKwkJCQkgIHN0cnVjdCBodl9zdG9ydnNjX3JlcXVlc3QgKnJlcXVlc3QpCiB7Ci0Jc3RydWN0IGh2X3N0b3J2c2NfcmVxdWVzdCAqcmVxdWVzdDsKIAlzdHJ1Y3Qgc3RvcnZzY19kZXZpY2UgKnN0b3JfZGV2aWNlOworCXN0cnVjdCB2c3Rvcl9wYWNrZXQgKnN0b3JfcGt0OwogCiAJc3Rvcl9kZXZpY2UgPSBtdXN0X2dldF9zdG9yX2RldmljZShkZXZpY2UpOwotCWlmICghc3Rvcl9kZXZpY2UpIHsKLQkJRFBSSU5UX0VSUihTVE9SVlNDLCAidW5hYmxlIHRvIGdldCBzdG9yIGRldmljZS4uLiIKLQkJCSAgICJkZXZpY2UgYmVpbmcgZGVzdHJveWVkPyIpOworCWlmICghc3Rvcl9kZXZpY2UpCiAJCXJldHVybjsKLQl9CiAKLQlEUFJJTlRfREJHKFNUT1JWU0MsICJJT19DT01QTEVURV9PUEVSQVRJT04gLSByZXF1ZXN0IGV4dGVuc2lvbiAlcCAiCi0JCSAgICJjb21wbGV0ZWQgYnl0ZXMgeGZlciAldSIsIHJlcXVlc3RfZXh0LAotCQkgICB2c3Rvcl9wYWNrZXQtPnZtX3NyYi5kYXRhX3RyYW5zZmVyX2xlbmd0aCk7CisJc3Rvcl9wa3QgPSAmcmVxdWVzdC0+dnN0b3JfcGFja2V0OwogCi0JLyogQVNTRVJUKHJlcXVlc3RfZXh0ICE9IE5VTEwpOyAqLwotCS8qIEFTU0VSVChyZXF1ZXN0X2V4dC0+cmVxdWVzdCAhPSBOVUxMKTsgKi8KLQotCXJlcXVlc3QgPSByZXF1ZXN0X2V4dC0+cmVxdWVzdDsKLQotCS8qIEFTU0VSVChyZXF1ZXN0LT5PbklPQ29tcGxldGlvbiAhPSBOVUxMKTsgKi8KIAogCS8qIENvcHkgb3ZlciB0aGUgc3RhdHVzLi4uZXRjICovCi0JcmVxdWVzdC0+c3RhdHVzID0gdnN0b3JfcGFja2V0LT52bV9zcmIuc2NzaV9zdGF0dXM7CisJc3Rvcl9wa3QtPnZtX3NyYi5zY3NpX3N0YXR1cyA9IHZzdG9yX3BhY2tldC0+dm1fc3JiLnNjc2lfc3RhdHVzOworCXN0b3JfcGt0LT52bV9zcmIuc3JiX3N0YXR1cyA9IHZzdG9yX3BhY2tldC0+dm1fc3JiLnNyYl9zdGF0dXM7CisJc3Rvcl9wa3QtPnZtX3NyYi5zZW5zZV9pbmZvX2xlbmd0aCA9CisJdnN0b3JfcGFja2V0LT52bV9zcmIuc2Vuc2VfaW5mb19sZW5ndGg7CiAKLQlpZiAocmVxdWVzdC0+c3RhdHVzICE9IDAgfHwgdnN0b3JfcGFja2V0LT52bV9zcmIuc3JiX3N0YXR1cyAhPSAxKSB7CisJaWYgKHZzdG9yX3BhY2tldC0+dm1fc3JiLnNjc2lfc3RhdHVzICE9IDAgfHwKKwkJdnN0b3JfcGFja2V0LT52bV9zcmIuc3JiX3N0YXR1cyAhPSAxKXsKIAkJRFBSSU5UX1dBUk4oU1RPUlZTQywKIAkJCSAgICAiY21kIDB4JXggc2NzaSBzdGF0dXMgMHgleCBzcmIgc3RhdHVzIDB4JXhcbiIsCi0JCQkgICAgcmVxdWVzdC0+Y2RiWzBdLCB2c3Rvcl9wYWNrZXQtPnZtX3NyYi5zY3NpX3N0YXR1cywKKwkJCSAgICBzdG9yX3BrdC0+dm1fc3JiLmNkYlswXSwKKwkJCSAgICB2c3Rvcl9wYWNrZXQtPnZtX3NyYi5zY3NpX3N0YXR1cywKIAkJCSAgICB2c3Rvcl9wYWNrZXQtPnZtX3NyYi5zcmJfc3RhdHVzKTsKIAl9CiAKLQlpZiAoKHJlcXVlc3QtPnN0YXR1cyAmIDB4RkYpID09IDB4MDIpIHsKKwlpZiAoKHZzdG9yX3BhY2tldC0+dm1fc3JiLnNjc2lfc3RhdHVzICYgMHhGRikgPT0gMHgwMikgewogCQkvKiBDSEVDS19DT05ESVRJT04gKi8KIAkJaWYgKHZzdG9yX3BhY2tldC0+dm1fc3JiLnNyYl9zdGF0dXMgJiAweDgwKSB7CiAJCQkvKiBhdXRvc2Vuc2UgZGF0YSBhdmFpbGFibGUgKi8KIAkJCURQUklOVF9XQVJOKFNUT1JWU0MsICJzdG9ydnNjIHBrdCAlcCBhdXRvc2Vuc2UgZGF0YSAiCi0JCQkJICAgICJ2YWxpZCAtIGxlbiAlZFxuIiwgcmVxdWVzdF9leHQsCisJCQkJICAgICJ2YWxpZCAtIGxlbiAlZFxuIiwgcmVxdWVzdCwKIAkJCQkgICAgdnN0b3JfcGFja2V0LT52bV9zcmIuc2Vuc2VfaW5mb19sZW5ndGgpOwogCi0JCQkvKiBBU1NFUlQodnN0b3JfcGFja2V0LT52bV9zcmIuc2Vuc2VfaW5mb19sZW5ndGggPD0gKi8KLQkJCS8qIAlyZXF1ZXN0LT5TZW5zZUJ1ZmZlclNpemUpOyAqLwogCQkJbWVtY3B5KHJlcXVlc3QtPnNlbnNlX2J1ZmZlciwKIAkJCSAgICAgICB2c3Rvcl9wYWNrZXQtPnZtX3NyYi5zZW5zZV9kYXRhLAogCQkJICAgICAgIHZzdG9yX3BhY2tldC0+dm1fc3JiLnNlbnNlX2luZm9fbGVuZ3RoKTsKIAotCQkJcmVxdWVzdC0+c2Vuc2VfYnVmZmVyX3NpemUgPQotCQkJCQl2c3Rvcl9wYWNrZXQtPnZtX3NyYi5zZW5zZV9pbmZvX2xlbmd0aDsKIAkJfQogCX0KIAotCS8qIFRPRE86ICovCi0JcmVxdWVzdC0+Ynl0ZXNfeGZlciA9IHZzdG9yX3BhY2tldC0+dm1fc3JiLmRhdGFfdHJhbnNmZXJfbGVuZ3RoOworCXN0b3JfcGt0LT52bV9zcmIuZGF0YV90cmFuc2Zlcl9sZW5ndGggPQorCXZzdG9yX3BhY2tldC0+dm1fc3JiLmRhdGFfdHJhbnNmZXJfbGVuZ3RoOwogCiAJcmVxdWVzdC0+b25faW9fY29tcGxldGlvbihyZXF1ZXN0KTsKIAotCWF0b21pY19kZWMoJnN0b3JfZGV2aWNlLT5udW1fb3V0c3RhbmRpbmdfcmVxKTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc3Rvcl9kZXZpY2UtPm51bV9vdXRzdGFuZGluZ19yZXEpICYmCisJCXN0b3JfZGV2aWNlLT5kcmFpbl9ub3RpZnkpCisJCXdha2VfdXAoJnN0b3JfZGV2aWNlLT53YWl0aW5nX3RvX2RyYWluKTsKKwogCiAJcHV0X3N0b3JfZGV2aWNlKGRldmljZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHN0b3JfdnNjX29uX3JlY2VpdmUoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLAorc3RhdGljIHZvaWQgc3RvcnZzY19vbl9yZWNlaXZlKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSwKIAkJCSAgICAgc3RydWN0IHZzdG9yX3BhY2tldCAqdnN0b3JfcGFja2V0LAotCQkJICAgICBzdHJ1Y3Qgc3RvcnZzY19yZXF1ZXN0X2V4dGVuc2lvbiAqcmVxdWVzdF9leHQpCisJCQkgICAgIHN0cnVjdCBodl9zdG9ydnNjX3JlcXVlc3QgKnJlcXVlc3QpCiB7CiAJc3dpdGNoICh2c3Rvcl9wYWNrZXQtPm9wZXJhdGlvbikgewogCWNhc2UgVlNUT1JfT1BFUkFUSU9OX0NPTVBMRVRFX0lPOgotCQlEUFJJTlRfREJHKFNUT1JWU0MsICJJT19DT01QTEVURV9PUEVSQVRJT04iKTsKLQkJc3Rvcl92c2Nfb25faW9fY29tcGxldGlvbihkZXZpY2UsIHZzdG9yX3BhY2tldCwgcmVxdWVzdF9leHQpOworCQlzdG9ydnNjX29uX2lvX2NvbXBsZXRpb24oZGV2aWNlLCB2c3Rvcl9wYWNrZXQsIHJlcXVlc3QpOwogCQlicmVhazsKIAljYXNlIFZTVE9SX09QRVJBVElPTl9SRU1PVkVfREVWSUNFOgogCQlEUFJJTlRfSU5GTyhTVE9SVlNDLCAiUkVNT1ZFX0RFVklDRV9PUEVSQVRJT04iKTsKQEAgLTQ0Nyw2MCArMzE2LDQyIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBzdG9yX3ZzY19vbl9jaGFubmVsX2NhbGxiYWNrKHZvaWQgKmNvbnRleHQpCitzdGF0aWMgdm9pZCBzdG9ydnNjX29uX2NoYW5uZWxfY2FsbGJhY2sodm9pZCAqY29udGV4dCkKIHsKIAlzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UgPSAoc3RydWN0IGh2X2RldmljZSAqKWNvbnRleHQ7CiAJc3RydWN0IHN0b3J2c2NfZGV2aWNlICpzdG9yX2RldmljZTsKIAl1MzIgYnl0ZXNfcmVjdmQ7CiAJdTY0IHJlcXVlc3RfaWQ7CiAJdW5zaWduZWQgY2hhciBwYWNrZXRbQUxJR04oc2l6ZW9mKHN0cnVjdCB2c3Rvcl9wYWNrZXQpLCA4KV07Ci0Jc3RydWN0IHN0b3J2c2NfcmVxdWVzdF9leHRlbnNpb24gKnJlcXVlc3Q7CisJc3RydWN0IGh2X3N0b3J2c2NfcmVxdWVzdCAqcmVxdWVzdDsKIAlpbnQgcmV0OwogCi0JLyogQVNTRVJUKGRldmljZSk7ICovCiAKIAlzdG9yX2RldmljZSA9IG11c3RfZ2V0X3N0b3JfZGV2aWNlKGRldmljZSk7Ci0JaWYgKCFzdG9yX2RldmljZSkgewotCQlEUFJJTlRfRVJSKFNUT1JWU0MsICJ1bmFibGUgdG8gZ2V0IHN0b3IgZGV2aWNlLi4uIgotCQkJICAgImRldmljZSBiZWluZyBkZXN0cm95ZWQ/Iik7CisJaWYgKCFzdG9yX2RldmljZSkKIAkJcmV0dXJuOwotCX0KIAogCWRvIHsKIAkJcmV0ID0gdm1idXNfcmVjdnBhY2tldChkZXZpY2UtPmNoYW5uZWwsIHBhY2tldCwKIAkJCQkgICAgICAgQUxJR04oc2l6ZW9mKHN0cnVjdCB2c3Rvcl9wYWNrZXQpLCA4KSwKIAkJCQkgICAgICAgJmJ5dGVzX3JlY3ZkLCAmcmVxdWVzdF9pZCk7CiAJCWlmIChyZXQgPT0gMCAmJiBieXRlc19yZWN2ZCA+IDApIHsKLQkJCURQUklOVF9EQkcoU1RPUlZTQywgInJlY2VpdmUgJWQgYnl0ZXMgLSB0aWQgJWxseCIsCi0JCQkJICAgYnl0ZXNfcmVjdmQsIHJlcXVlc3RfaWQpOwogCi0JCQkvKiBBU1NFUlQoYnl0ZXNfcmVjdmQgPT0KLQkJCQkJc2l6ZW9mKHN0cnVjdCB2c3Rvcl9wYWNrZXQpKTsgKi8KLQotCQkJcmVxdWVzdCA9IChzdHJ1Y3Qgc3RvcnZzY19yZXF1ZXN0X2V4dGVuc2lvbiAqKQorCQkJcmVxdWVzdCA9IChzdHJ1Y3QgaHZfc3RvcnZzY19yZXF1ZXN0ICopCiAJCQkJCSh1bnNpZ25lZCBsb25nKXJlcXVlc3RfaWQ7Ci0JCQkvKiBBU1NFUlQocmVxdWVzdCk7YyAqLwogCi0JCQkvKiBpZiAodnN0b3JfcGFja2V0LkZsYWdzICYgU1lOVEhFVElDX0ZMQUcpICovCiAJCQlpZiAoKHJlcXVlc3QgPT0gJnN0b3JfZGV2aWNlLT5pbml0X3JlcXVlc3QpIHx8CiAJCQkgICAgKHJlcXVlc3QgPT0gJnN0b3JfZGV2aWNlLT5yZXNldF9yZXF1ZXN0KSkgewotCQkJCS8qIERQUklOVF9JTkZPKFNUT1JWU0MsCi0JCQkJICogICAgICAgICAgICAgInJlc2V0IGNvbXBsZXRpb24gLSBvcGVyYXRpb24gIgotCQkJCSAqICAgICAgICAgICAgICIldSBzdGF0dXMgJXUiLAotCQkJCSAqICAgICAgICAgICAgIHZzdG9yX3BhY2tldC5PcGVyYXRpb24sCi0JCQkJICogICAgICAgICAgICAgdnN0b3JfcGFja2V0LlN0YXR1cyk7ICovCiAKIAkJCQltZW1jcHkoJnJlcXVlc3QtPnZzdG9yX3BhY2tldCwgcGFja2V0LAogCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHZzdG9yX3BhY2tldCkpOwotCQkJCXJlcXVlc3QtPndhaXRfY29uZGl0aW9uID0gMTsKLQkJCQl3YWtlX3VwKCZyZXF1ZXN0LT53YWl0X2V2ZW50KTsKKwkJCQljb21wbGV0ZSgmcmVxdWVzdC0+d2FpdF9ldmVudCk7CiAJCQl9IGVsc2UgewotCQkJCXN0b3JfdnNjX29uX3JlY2VpdmUoZGV2aWNlLAorCQkJCXN0b3J2c2Nfb25fcmVjZWl2ZShkZXZpY2UsCiAJCQkJCQkoc3RydWN0IHZzdG9yX3BhY2tldCAqKXBhY2tldCwKIAkJCQkJCXJlcXVlc3QpOwogCQkJfQogCQl9IGVsc2UgewotCQkJLyogRFBSSU5UX0RCRyhTVE9SVlNDLCAibm90aGluZyBlbHNlIHRvIHJlYWQuLi4iKTsgKi8KIAkJCWJyZWFrOwogCQl9CiAJfSB3aGlsZSAoMSk7CkBAIC01MDksNDUgKzM2MCwzMyBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIGludCBzdG9yX3ZzY19jb25uZWN0X3RvX3ZzcChzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IHN0b3J2c2NfY29ubmVjdF90b192c3Aoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLCB1MzIgcmluZ19zaXplKQogewogCXN0cnVjdCB2bXN0b3JhZ2VfY2hhbm5lbF9wcm9wZXJ0aWVzIHByb3BzOwotCXN0cnVjdCBzdG9ydnNjX2RyaXZlcl9vYmplY3QgKnN0b3JfZHJpdmVyOwogCWludCByZXQ7CiAKLQlzdG9yX2RyaXZlciA9IChzdHJ1Y3Qgc3RvcnZzY19kcml2ZXJfb2JqZWN0ICopZGV2aWNlLT5kcnY7CiAJbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHN0cnVjdCB2bXN0b3JhZ2VfY2hhbm5lbF9wcm9wZXJ0aWVzKSk7CiAKIAkvKiBPcGVuIHRoZSBjaGFubmVsICovCiAJcmV0ID0gdm1idXNfb3BlbihkZXZpY2UtPmNoYW5uZWwsCi0JCQkgc3Rvcl9kcml2ZXItPnJpbmdfYnVmZmVyX3NpemUsCi0JCQkgc3Rvcl9kcml2ZXItPnJpbmdfYnVmZmVyX3NpemUsCisJCQkgcmluZ19zaXplLAorCQkJIHJpbmdfc2l6ZSwKIAkJCSAodm9pZCAqKSZwcm9wcywKIAkJCSBzaXplb2Yoc3RydWN0IHZtc3RvcmFnZV9jaGFubmVsX3Byb3BlcnRpZXMpLAotCQkJIHN0b3JfdnNjX29uX2NoYW5uZWxfY2FsbGJhY2ssIGRldmljZSk7CisJCQkgc3RvcnZzY19vbl9jaGFubmVsX2NhbGxiYWNrLCBkZXZpY2UpOwogCi0JRFBSSU5UX0RCRyhTVE9SVlNDLCAic3RvcmFnZSBwcm9wczogcGF0aCBpZCAlZCwgdGd0IGlkICVkLCBtYXggeGZlciAlZCIsCi0JCSAgIHByb3BzLnBhdGhfaWQsIHByb3BzLnRhcmdldF9pZCwgcHJvcHMubWF4X3RyYW5zZmVyX2J5dGVzKTsKLQotCWlmIChyZXQgIT0gMCkgewotCQlEUFJJTlRfRVJSKFNUT1JWU0MsICJ1bmFibGUgdG8gb3BlbiBjaGFubmVsOiAlZCIsIHJldCk7CisJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gLTE7Ci0JfQogCi0JcmV0ID0gc3Rvcl92c2NfY2hhbm5lbF9pbml0KGRldmljZSk7CisJcmV0ID0gc3RvcnZzY19jaGFubmVsX2luaXQoZGV2aWNlKTsKIAogCXJldHVybiByZXQ7CiB9CiAKLS8qCi0gKiBzdG9yX3ZzY19vbl9kZXZpY2VfYWRkIC0gQ2FsbGJhY2sgd2hlbiB0aGUgZGV2aWNlIGJlbG9uZ2luZyB0byB0aGlzIGRyaXZlcgotICogaXMgYWRkZWQKLSAqLwotc3RhdGljIGludCBzdG9yX3ZzY19vbl9kZXZpY2VfYWRkKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSwKK2ludCBzdG9ydnNjX2Rldl9hZGQoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLAogCQkJCQl2b2lkICphZGRpdGlvbmFsX2luZm8pCiB7CiAJc3RydWN0IHN0b3J2c2NfZGV2aWNlICpzdG9yX2RldmljZTsKLQkvKiBzdHJ1Y3Qgdm1zdG9yYWdlX2NoYW5uZWxfcHJvcGVydGllcyAqcHJvcHM7ICovCiAJc3RydWN0IHN0b3J2c2NfZGV2aWNlX2luZm8gKmRldmljZV9pbmZvOwogCWludCByZXQgPSAwOwogCkBAIC01NTksOCArMzk4LDYgQEAKIAl9CiAKIAkvKiBTYXZlIHRoZSBjaGFubmVsIHByb3BlcnRpZXMgdG8gb3VyIHN0b3J2c2MgY2hhbm5lbCAqLwotCS8qIHByb3BzID0gKHN0cnVjdCB2bXN0b3JhZ2VfY2hhbm5lbF9wcm9wZXJ0aWVzICopCi0JICoJCWNoYW5uZWwtPm9mZmVyTXNnLk9mZmVyLnUuU3RhbmRhcmQuVXNlckRlZmluZWQ7ICovCiAKIAkvKiBGSVhNRTogKi8KIAkvKgpAQCAtNTY5LDMwICs0MDYsMTggQEAKIAkgKiBzY3NpIGNoYW5uZWwgcHJpb3IgdG8gdGhlIGJ1cyBzY2FuCiAJICovCiAKLQkvKiBzdG9yQ2hhbm5lbC0+UG9ydE51bWJlciA9IDA7Ci0Jc3RvckNoYW5uZWwtPlBhdGhJZCA9IHByb3BzLT5QYXRoSWQ7Ci0Jc3RvckNoYW5uZWwtPlRhcmdldElkID0gcHJvcHMtPlRhcmdldElkOyAqLwotCiAJc3Rvcl9kZXZpY2UtPnBvcnRfbnVtYmVyID0gZGV2aWNlX2luZm8tPnBvcnRfbnVtYmVyOwogCS8qIFNlbmQgaXQgYmFjayB1cCAqLwotCXJldCA9IHN0b3JfdnNjX2Nvbm5lY3RfdG9fdnNwKGRldmljZSk7CisJcmV0ID0gc3RvcnZzY19jb25uZWN0X3RvX3ZzcChkZXZpY2UsIGRldmljZV9pbmZvLT5yaW5nX2J1ZmZlcl9zaXplKTsKIAotCS8qIGRldmljZV9pbmZvLT5Qb3J0TnVtYmVyID0gc3Rvcl9kZXZpY2UtPlBvcnROdW1iZXI7ICovCiAJZGV2aWNlX2luZm8tPnBhdGhfaWQgPSBzdG9yX2RldmljZS0+cGF0aF9pZDsKIAlkZXZpY2VfaW5mby0+dGFyZ2V0X2lkID0gc3Rvcl9kZXZpY2UtPnRhcmdldF9pZDsKIAotCURQUklOVF9EQkcoU1RPUlZTQywgImFzc2lnbmVkIHBvcnQgJXUsIHBhdGggJXUgdGFyZ2V0ICV1XG4iLAotCQkgICBzdG9yX2RldmljZS0+cG9ydF9udW1iZXIsIHN0b3JfZGV2aWNlLT5wYXRoX2lkLAotCQkgICBzdG9yX2RldmljZS0+dGFyZ2V0X2lkKTsKLQogY2xlYW51cDoKIAlyZXR1cm4gcmV0OwogfQogCi0vKgotICogc3Rvcl92c2Nfb25fZGV2aWNlX3JlbW92ZSAtIENhbGxiYWNrIHdoZW4gdGhlIG91ciBkZXZpY2UgaXMgYmVpbmcgcmVtb3ZlZAotICovCi1zdGF0aWMgaW50IHN0b3JfdnNjX29uX2RldmljZV9yZW1vdmUoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlKQoraW50IHN0b3J2c2NfZGV2X3JlbW92ZShzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IHN0b3J2c2NfZGV2aWNlICpzdG9yX2RldmljZTsKIApAQCAtNjA2LDE5ICs0MzEsMTEgQEAKIAkgKiBvbmx5IGFsbG93IGluYm91bmQgdHJhZmZpYyAocmVzcG9uc2VzKSB0byBwcm9jZWVkIHNvIHRoYXQKIAkgKiBvdXRzdGFuZGluZyByZXF1ZXN0cyBjYW4gYmUgY29tcGxldGVkLgogCSAqLwotCXdoaWxlIChhdG9taWNfcmVhZCgmc3Rvcl9kZXZpY2UtPm51bV9vdXRzdGFuZGluZ19yZXEpKSB7Ci0JCURQUklOVF9JTkZPKFNUT1JWU0MsICJ3YWl0aW5nIGZvciAlZCByZXF1ZXN0cyB0byBjb21wbGV0ZS4uLiIsCi0JCQkgICAgYXRvbWljX3JlYWQoJnN0b3JfZGV2aWNlLT5udW1fb3V0c3RhbmRpbmdfcmVxKSk7Ci0JCXVkZWxheSgxMDApOwotCX0KIAotCURQUklOVF9JTkZPKFNUT1JWU0MsICJyZW1vdmluZyBzdG9yYWdlIGRldmljZSAoJXApLi4uIiwKLQkJICAgIGRldmljZS0+ZXh0KTsKKwlzdG9ydnNjX3dhaXRfdG9fZHJhaW4oc3Rvcl9kZXZpY2UpOwogCiAJc3Rvcl9kZXZpY2UgPSBmaW5hbF9yZWxlYXNlX3N0b3JfZGV2aWNlKGRldmljZSk7CiAKLQlEUFJJTlRfSU5GTyhTVE9SVlNDLCAic3RvcmFnZSBkZXZpY2UgKCVwKSBzYWZlIHRvIHJlbW92ZSIsIHN0b3JfZGV2aWNlKTsKLQogCS8qIENsb3NlIHRoZSBjaGFubmVsICovCiAJdm1idXNfY2xvc2UoZGV2aWNlLT5jaGFubmVsKTsKIApAQCAtNjI2LDE0OCArNDQzLDUyIEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBzdG9yX3ZzY19vbl9ob3N0X3Jlc2V0KHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSkKLXsKLQlzdHJ1Y3Qgc3RvcnZzY19kZXZpY2UgKnN0b3JfZGV2aWNlOwotCXN0cnVjdCBzdG9ydnNjX3JlcXVlc3RfZXh0ZW5zaW9uICpyZXF1ZXN0OwotCXN0cnVjdCB2c3Rvcl9wYWNrZXQgKnZzdG9yX3BhY2tldDsKLQlpbnQgcmV0OwotCi0JRFBSSU5UX0lORk8oU1RPUlZTQywgInJlc2V0dGluZyBob3N0IGFkYXB0ZXIuLi4iKTsKLQotCXN0b3JfZGV2aWNlID0gZ2V0X3N0b3JfZGV2aWNlKGRldmljZSk7Ci0JaWYgKCFzdG9yX2RldmljZSkgewotCQlEUFJJTlRfRVJSKFNUT1JWU0MsICJ1bmFibGUgdG8gZ2V0IHN0b3IgZGV2aWNlLi4uIgotCQkJICAgImRldmljZSBiZWluZyBkZXN0cm95ZWQ/Iik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXF1ZXN0ID0gJnN0b3JfZGV2aWNlLT5yZXNldF9yZXF1ZXN0OwotCXZzdG9yX3BhY2tldCA9ICZyZXF1ZXN0LT52c3Rvcl9wYWNrZXQ7Ci0KLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZyZXF1ZXN0LT53YWl0X2V2ZW50KTsKLQotCXZzdG9yX3BhY2tldC0+b3BlcmF0aW9uID0gVlNUT1JfT1BFUkFUSU9OX1JFU0VUX0JVUzsKLQl2c3Rvcl9wYWNrZXQtPmZsYWdzID0gUkVRVUVTVF9DT01QTEVUSU9OX0ZMQUc7Ci0JdnN0b3JfcGFja2V0LT52bV9zcmIucGF0aF9pZCA9IHN0b3JfZGV2aWNlLT5wYXRoX2lkOwotCi0JcmVxdWVzdC0+d2FpdF9jb25kaXRpb24gPSAwOwotCXJldCA9IHZtYnVzX3NlbmRwYWNrZXQoZGV2aWNlLT5jaGFubmVsLCB2c3Rvcl9wYWNrZXQsCi0JCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB2c3Rvcl9wYWNrZXQpLAotCQkJICAgICAgICh1bnNpZ25lZCBsb25nKSZzdG9yX2RldmljZS0+cmVzZXRfcmVxdWVzdCwKLQkJCSAgICAgICBWTV9QS1RfREFUQV9JTkJBTkQsCi0JCQkgICAgICAgVk1CVVNfREFUQV9QQUNLRVRfRkxBR19DT01QTEVUSU9OX1JFUVVFU1RFRCk7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCURQUklOVF9FUlIoU1RPUlZTQywgIlVuYWJsZSB0byBzZW5kIHJlc2V0IHBhY2tldCAlcCByZXQgJWQiLAotCQkJICAgdnN0b3JfcGFja2V0LCByZXQpOwotCQlnb3RvIGNsZWFudXA7Ci0JfQotCi0Jd2FpdF9ldmVudF90aW1lb3V0KHJlcXVlc3QtPndhaXRfZXZlbnQsIHJlcXVlc3QtPndhaXRfY29uZGl0aW9uLAotCQkJbXNlY3NfdG9famlmZmllcygxMDAwKSk7Ci0JaWYgKHJlcXVlc3QtPndhaXRfY29uZGl0aW9uID09IDApIHsKLQkJcmV0ID0gLUVUSU1FRE9VVDsKLQkJZ290byBjbGVhbnVwOwotCX0KLQotCURQUklOVF9JTkZPKFNUT1JWU0MsICJob3N0IGFkYXB0ZXIgcmVzZXQgY29tcGxldGVkIik7Ci0KLQkvKgotCSAqIEF0IHRoaXMgcG9pbnQsIGFsbCBvdXRzdGFuZGluZyByZXF1ZXN0cyBpbiB0aGUgYWRhcHRlcgotCSAqIHNob3VsZCBoYXZlIGJlZW4gZmx1c2hlZCBvdXQgYW5kIHJldHVybiB0byB1cwotCSAqLwotCi1jbGVhbnVwOgotCXB1dF9zdG9yX2RldmljZShkZXZpY2UpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBzdG9yX3ZzY19vbl9pb19yZXF1ZXN0IC0gQ2FsbGJhY2sgdG8gaW5pdGlhdGUgYW4gSS9PIHJlcXVlc3QKLSAqLwotc3RhdGljIGludCBzdG9yX3ZzY19vbl9pb19yZXF1ZXN0KHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSwKK2ludCBzdG9ydnNjX2RvX2lvKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSwKIAkJCSAgICAgIHN0cnVjdCBodl9zdG9ydnNjX3JlcXVlc3QgKnJlcXVlc3QpCiB7CiAJc3RydWN0IHN0b3J2c2NfZGV2aWNlICpzdG9yX2RldmljZTsKLQlzdHJ1Y3Qgc3RvcnZzY19yZXF1ZXN0X2V4dGVuc2lvbiAqcmVxdWVzdF9leHRlbnNpb247CiAJc3RydWN0IHZzdG9yX3BhY2tldCAqdnN0b3JfcGFja2V0OwogCWludCByZXQgPSAwOwogCi0JcmVxdWVzdF9leHRlbnNpb24gPQotCQkoc3RydWN0IHN0b3J2c2NfcmVxdWVzdF9leHRlbnNpb24gKilyZXF1ZXN0LT5leHRlbnNpb247Ci0JdnN0b3JfcGFja2V0ID0gJnJlcXVlc3RfZXh0ZW5zaW9uLT52c3Rvcl9wYWNrZXQ7CisJdnN0b3JfcGFja2V0ID0gJnJlcXVlc3QtPnZzdG9yX3BhY2tldDsKIAlzdG9yX2RldmljZSA9IGdldF9zdG9yX2RldmljZShkZXZpY2UpOwogCi0JRFBSSU5UX0RCRyhTVE9SVlNDLCAiZW50ZXIgLSBEZXZpY2UgJXAsIERldmljZUV4dCAlcCwgUmVxdWVzdCAlcCwgIgotCQkgICAiRXh0ZW5zaW9uICVwIiwgZGV2aWNlLCBzdG9yX2RldmljZSwgcmVxdWVzdCwKLQkJICAgcmVxdWVzdF9leHRlbnNpb24pOwotCi0JRFBSSU5UX0RCRyhTVE9SVlNDLCAicmVxICVwIGxlbiAlZCBidXMgJWQsIHRhcmdldCAlZCwgbHVuICVkIGNkYmxlbiAlZCIsCi0JCSAgIHJlcXVlc3QsIHJlcXVlc3QtPmRhdGFfYnVmZmVyLmxlbiwgcmVxdWVzdC0+YnVzLAotCQkgICByZXF1ZXN0LT50YXJnZXRfaWQsIHJlcXVlc3QtPmx1bl9pZCwgcmVxdWVzdC0+Y2RiX2xlbik7Ci0KLQlpZiAoIXN0b3JfZGV2aWNlKSB7Ci0JCURQUklOVF9FUlIoU1RPUlZTQywgInVuYWJsZSB0byBnZXQgc3RvciBkZXZpY2UuLi4iCi0JCQkgICAiZGV2aWNlIGJlaW5nIGRlc3Ryb3llZD8iKTsKKwlpZiAoIXN0b3JfZGV2aWNlKQogCQlyZXR1cm4gLTI7Ci0JfQogCi0JLyogcHJpbnRfaGV4X2R1bXBfYnl0ZXMoIiIsIERVTVBfUFJFRklYX05PTkUsIHJlcXVlc3QtPkNkYiwKLQkgKgkJCXJlcXVlc3QtPkNkYkxlbik7ICovCiAKLQlyZXF1ZXN0X2V4dGVuc2lvbi0+cmVxdWVzdCA9IHJlcXVlc3Q7Ci0JcmVxdWVzdF9leHRlbnNpb24tPmRldmljZSAgPSBkZXZpY2U7CisJcmVxdWVzdC0+ZGV2aWNlICA9IGRldmljZTsKIAotCW1lbXNldCh2c3Rvcl9wYWNrZXQsIDAgLCBzaXplb2Yoc3RydWN0IHZzdG9yX3BhY2tldCkpOwogCiAJdnN0b3JfcGFja2V0LT5mbGFncyB8PSBSRVFVRVNUX0NPTVBMRVRJT05fRkxBRzsKIAogCXZzdG9yX3BhY2tldC0+dm1fc3JiLmxlbmd0aCA9IHNpemVvZihzdHJ1Y3Qgdm1zY3NpX3JlcXVlc3QpOwogCi0JdnN0b3JfcGFja2V0LT52bV9zcmIucG9ydF9udW1iZXIgPSByZXF1ZXN0LT5ob3N0OwotCXZzdG9yX3BhY2tldC0+dm1fc3JiLnBhdGhfaWQgPSByZXF1ZXN0LT5idXM7Ci0JdnN0b3JfcGFja2V0LT52bV9zcmIudGFyZ2V0X2lkID0gcmVxdWVzdC0+dGFyZ2V0X2lkOwotCXZzdG9yX3BhY2tldC0+dm1fc3JiLmx1biA9IHJlcXVlc3QtPmx1bl9pZDsKIAogCXZzdG9yX3BhY2tldC0+dm1fc3JiLnNlbnNlX2luZm9fbGVuZ3RoID0gU0VOU0VfQlVGRkVSX1NJWkU7CiAKLQkvKiBDb3B5IG92ZXIgdGhlIHNjc2kgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrICovCi0JdnN0b3JfcGFja2V0LT52bV9zcmIuY2RiX2xlbmd0aCA9IHJlcXVlc3QtPmNkYl9sZW47Ci0JbWVtY3B5KCZ2c3Rvcl9wYWNrZXQtPnZtX3NyYi5jZGIsIHJlcXVlc3QtPmNkYiwgcmVxdWVzdC0+Y2RiX2xlbik7CiAKLQl2c3Rvcl9wYWNrZXQtPnZtX3NyYi5kYXRhX2luID0gcmVxdWVzdC0+dHlwZTsKLQl2c3Rvcl9wYWNrZXQtPnZtX3NyYi5kYXRhX3RyYW5zZmVyX2xlbmd0aCA9IHJlcXVlc3QtPmRhdGFfYnVmZmVyLmxlbjsKKwl2c3Rvcl9wYWNrZXQtPnZtX3NyYi5kYXRhX3RyYW5zZmVyX2xlbmd0aCA9CisJcmVxdWVzdC0+ZGF0YV9idWZmZXIubGVuOwogCiAJdnN0b3JfcGFja2V0LT5vcGVyYXRpb24gPSBWU1RPUl9PUEVSQVRJT05fRVhFQ1VURV9TUkI7CiAKLQlEUFJJTlRfREJHKFNUT1JWU0MsICJzcmIgLSBsZW4gJWQgcG9ydCAlZCwgcGF0aCAlZCwgdGFyZ2V0ICVkLCAiCi0JCSAgICJsdW4gJWQgc2Vuc2VsZW4gJWQgY2RibGVuICVkIiwKLQkJICAgdnN0b3JfcGFja2V0LT52bV9zcmIubGVuZ3RoLAotCQkgICB2c3Rvcl9wYWNrZXQtPnZtX3NyYi5wb3J0X251bWJlciwKLQkJICAgdnN0b3JfcGFja2V0LT52bV9zcmIucGF0aF9pZCwKLQkJICAgdnN0b3JfcGFja2V0LT52bV9zcmIudGFyZ2V0X2lkLAotCQkgICB2c3Rvcl9wYWNrZXQtPnZtX3NyYi5sdW4sCi0JCSAgIHZzdG9yX3BhY2tldC0+dm1fc3JiLnNlbnNlX2luZm9fbGVuZ3RoLAotCQkgICB2c3Rvcl9wYWNrZXQtPnZtX3NyYi5jZGJfbGVuZ3RoKTsKLQotCWlmIChyZXF1ZXN0X2V4dGVuc2lvbi0+cmVxdWVzdC0+ZGF0YV9idWZmZXIubGVuKSB7CisJaWYgKHJlcXVlc3QtPmRhdGFfYnVmZmVyLmxlbikgewogCQlyZXQgPSB2bWJ1c19zZW5kcGFja2V0X211bHRpcGFnZWJ1ZmZlcihkZXZpY2UtPmNoYW5uZWwsCi0JCQkJJnJlcXVlc3RfZXh0ZW5zaW9uLT5yZXF1ZXN0LT5kYXRhX2J1ZmZlciwKKwkJCQkmcmVxdWVzdC0+ZGF0YV9idWZmZXIsCiAJCQkJdnN0b3JfcGFja2V0LAogCQkJCXNpemVvZihzdHJ1Y3QgdnN0b3JfcGFja2V0KSwKLQkJCQkodW5zaWduZWQgbG9uZylyZXF1ZXN0X2V4dGVuc2lvbik7CisJCQkJKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiAJfSBlbHNlIHsKIAkJcmV0ID0gdm1idXNfc2VuZHBhY2tldChkZXZpY2UtPmNoYW5uZWwsIHZzdG9yX3BhY2tldCwKIAkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB2c3Rvcl9wYWNrZXQpLAotCQkJCSAgICAgICAodW5zaWduZWQgbG9uZylyZXF1ZXN0X2V4dGVuc2lvbiwKKwkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCwKIAkJCQkgICAgICAgVk1fUEtUX0RBVEFfSU5CQU5ELAogCQkJCSAgICAgICBWTUJVU19EQVRBX1BBQ0tFVF9GTEFHX0NPTVBMRVRJT05fUkVRVUVTVEVEKTsKIAl9CiAKLQlpZiAocmV0ICE9IDApIHsKLQkJRFBSSU5UX0RCRyhTVE9SVlNDLCAiVW5hYmxlIHRvIHNlbmQgcGFja2V0ICVwIHJldCAlZCIsCi0JCQkgICB2c3Rvcl9wYWNrZXQsIHJldCk7Ci0JfQorCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKIAogCWF0b21pY19pbmMoJnN0b3JfZGV2aWNlLT5udW1fb3V0c3RhbmRpbmdfcmVxKTsKIApAQCAtNzc2LDYyICs0OTcsNjggQEAKIH0KIAogLyoKLSAqIHN0b3JfdnNjX29uX2NsZWFudXAgLSBQZXJmb3JtIGFueSBjbGVhbnVwIHdoZW4gdGhlIGRyaXZlciBpcyByZW1vdmVkCisgKiBUaGUgY2hhbm5lbCBwcm9wZXJ0aWVzIHVuaXF1ZWx5IHNwZWNpZnkgaG93IHRoZSBkZXZpY2UgaXMgdG8gYmUKKyAqIHByZXNlbnRlZCB0byB0aGUgZ3Vlc3QuIE1hcCB0aGlzIGluZm9ybWF0aW9uIGZvciB1c2UgYnkgdGhlIGJsb2NrCisgKiBkcml2ZXIuIEZvciBMaW51eCBndWVzdHMgb24gSHlwZXItViwgd2UgZW11bGF0ZSBhIHNjc2kgSEJBIGluIHRoZSBndWVzdAorICogKHN0b3J2c2NfZHJ2KSBhbmQgc28gc2NzaSBkZXZpY2VzIGluIHRoZSBndWVzdCAgYXJlIGhhbmRsZWQgYnkKKyAqIG5hdGl2ZSB1cHBlciBsZXZlbCBMaW51eCBkcml2ZXJzLiBDb25zZXF1ZW50bHksIEh5cGVyLVYKKyAqIGJsb2NrIGRyaXZlciwgd2hpbGUgYmVpbmcgYSBnZW5lcmljIGJsb2NrIGRyaXZlciwgcHJlc2VudGx5IGRvZXMgbm90CisgKiBkZWFsIHdpdGggYW55dGhpbmcgb3RoZXIgdGhhbiBkZXZpY2VzIHRoYXQgd291bGQgbmVlZCB0byBiZSBwcmVzZW50ZWQKKyAqIHRvIHRoZSBndWVzdCBhcyBhbiBJREUgZGlzay4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1hcHMgdGhlIGNoYW5uZWwgcHJvcGVydGllcyBhcyBlbWJlZGRlZCBpbiB0aGUgaW5wdXQKKyAqIHBhcmFtZXRlciBkZXZpY2VfaW5mbyBvbnRvIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSB0byByZWdpc3RlciB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgYmxvY2sgZGV2aWNlLgorICoKKyAqIEN1cnJlbnRseSwgdGhlcmUgaXMgbm8gd2F5IHRvIHN0b3AgdGhlIGVtdWxhdGlvbiBvZiB0aGUgYmxvY2sgZGV2aWNlCisgKiBvbiB0aGUgaG9zdCBzaWRlLiBBbmQgc28sIHRvIHByZXZlbnQgdGhlIG5hdGl2ZSBJREUgZHJpdmVycyBpbiBMaW51eAorICogZnJvbSB0YWtpbmcgb3ZlciB0aGVzZSBkZXZpY2VzICh0byBiZSBtYW5hZ2VkYnkgSHlwZXItViBibG9jaworICogZHJpdmVyKSwgd2Ugd2lsbCB0YWtlIG92ZXIgaWYgbmVlZCBiZSB0aGUgbWFqb3Igb2YgdGhlIElERSBjb250cm9sbGVycy4KKyAqCiAgKi8KLXN0YXRpYyB2b2lkIHN0b3JfdnNjX29uX2NsZWFudXAoc3RydWN0IGh2X2RyaXZlciAqZHJpdmVyKQorCitpbnQgc3RvcnZzY19nZXRfbWFqb3JfaW5mbyhzdHJ1Y3Qgc3RvcnZzY19kZXZpY2VfaW5mbyAqZGV2aWNlX2luZm8sCisJCQkgICAgc3RydWN0IHN0b3J2c2NfbWFqb3JfaW5mbyAqbWFqb3JfaW5mbykKIHsKLX0KLQotLyoKLSAqIHN0b3JfdnNjX2luaXRpYWxpemUgLSBNYWluIGVudHJ5IHBvaW50Ci0gKi8KLWludCBzdG9yX3ZzY19pbml0aWFsaXplKHN0cnVjdCBodl9kcml2ZXIgKmRyaXZlcikKLXsKLQlzdHJ1Y3Qgc3RvcnZzY19kcml2ZXJfb2JqZWN0ICpzdG9yX2RyaXZlcjsKLQotCXN0b3JfZHJpdmVyID0gKHN0cnVjdCBzdG9ydnNjX2RyaXZlcl9vYmplY3QgKilkcml2ZXI7Ci0KLQlEUFJJTlRfREJHKFNUT1JWU0MsICJzaXplb2YoU1RPUlZTQ19SRVFVRVNUKT0lemQgIgotCQkgICAic2l6ZW9mKHN0cnVjdCBzdG9ydnNjX3JlcXVlc3RfZXh0ZW5zaW9uKT0lemQgIgotCQkgICAic2l6ZW9mKHN0cnVjdCB2c3Rvcl9wYWNrZXQpPSV6ZCwgIgotCQkgICAic2l6ZW9mKHN0cnVjdCB2bXNjc2lfcmVxdWVzdCk9JXpkIiwKLQkJICAgc2l6ZW9mKHN0cnVjdCBodl9zdG9ydnNjX3JlcXVlc3QpLAotCQkgICBzaXplb2Yoc3RydWN0IHN0b3J2c2NfcmVxdWVzdF9leHRlbnNpb24pLAotCQkgICBzaXplb2Yoc3RydWN0IHZzdG9yX3BhY2tldCksCi0JCSAgIHNpemVvZihzdHJ1Y3Qgdm1zY3NpX3JlcXVlc3QpKTsKLQotCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgYXQgbGVhc3QgMiBwYWdlcyBzaW5jZSAxIHBhZ2UgaXMgdXNlZCBmb3IgY29udHJvbCAqLwotCS8qIEFTU0VSVChzdG9yX2RyaXZlci0+UmluZ0J1ZmZlclNpemUgPj0gKFBBR0VfU0laRSA8PCAxKSk7ICovCi0KLQlkcml2ZXItPm5hbWUgPSBnX2RyaXZlcl9uYW1lOwotCW1lbWNweSgmZHJpdmVyLT5kZXZfdHlwZSwgJmdTdG9yVnNjRGV2aWNlVHlwZSwKLQkgICAgICAgc2l6ZW9mKHN0cnVjdCBodl9ndWlkKSk7Ci0KLQlzdG9yX2RyaXZlci0+cmVxdWVzdF9leHRfc2l6ZSA9Ci0JCQlzaXplb2Yoc3RydWN0IHN0b3J2c2NfcmVxdWVzdF9leHRlbnNpb24pOworCXN0YXRpYyBib29sIGlkZTBfcmVnaXN0ZXJlZDsKKwlzdGF0aWMgYm9vbCBpZGUxX3JlZ2lzdGVyZWQ7CiAKIAkvKgotCSAqIERpdmlkZSB0aGUgcmluZyBidWZmZXIgZGF0YSBzaXplICh3aGljaCBpcyAxIHBhZ2UgbGVzcwotCSAqIHRoYW4gdGhlIHJpbmcgYnVmZmVyIHNpemUgc2luY2UgdGhhdCBwYWdlIGlzIHJlc2VydmVkIGZvcgotCSAqIHRoZSByaW5nIGJ1ZmZlciBpbmRpY2VzKSBieSB0aGUgbWF4IHJlcXVlc3Qgc2l6ZSAod2hpY2ggaXMKLQkgKiB2bWJ1c19jaGFubmVsX3BhY2tldF9tdWx0aXBhZ2VfYnVmZmVyICsgc3RydWN0IHZzdG9yX3BhY2tldCArIHU2NCkKKwkgKiBGb3Igbm93IHdlIG9ubHkgc3VwcG9ydCBJREUgZGlza3MuCiAJICovCi0Jc3Rvcl9kcml2ZXItPm1heF9vdXRzdGFuZGluZ19yZXFfcGVyX2NoYW5uZWwgPQotCQkoKHN0b3JfZHJpdmVyLT5yaW5nX2J1ZmZlcl9zaXplIC0gUEFHRV9TSVpFKSAvCi0JCSAgQUxJR04oTUFYX01VTFRJUEFHRV9CVUZGRVJfUEFDS0VUICsKLQkJCSAgIHNpemVvZihzdHJ1Y3QgdnN0b3JfcGFja2V0KSArIHNpemVvZih1NjQpLAotCQkJICAgc2l6ZW9mKHU2NCkpKTsKKwltYWpvcl9pbmZvLT5kZXZuYW1lID0gImlkZSI7CisJbWFqb3JfaW5mby0+ZGlza25hbWUgPSAiaGQiOwogCi0JRFBSSU5UX0lORk8oU1RPUlZTQywgIm1heCBpbyAldSwgY3VycmVudGx5ICV1XG4iLAotCQkgICAgc3Rvcl9kcml2ZXItPm1heF9vdXRzdGFuZGluZ19yZXFfcGVyX2NoYW5uZWwsCi0JCSAgICBTVE9SVlNDX01BWF9JT19SRVFVRVNUUyk7CisJaWYgKGRldmljZV9pbmZvLT5wYXRoX2lkKSB7CisJCW1ham9yX2luZm8tPm1ham9yID0gMjI7CisJCWlmICghaWRlMV9yZWdpc3RlcmVkKSB7CisJCQltYWpvcl9pbmZvLT5kb19yZWdpc3RlciA9IHRydWU7CisJCQlpZGUxX3JlZ2lzdGVyZWQgPSB0cnVlOworCQl9IGVsc2UKKwkJCW1ham9yX2luZm8tPmRvX3JlZ2lzdGVyID0gZmFsc2U7CiAKLQkvKiBTZXR1cCB0aGUgZGlzcGF0Y2ggdGFibGUgKi8KLQlzdG9yX2RyaXZlci0+YmFzZS5kZXZfYWRkCT0gc3Rvcl92c2Nfb25fZGV2aWNlX2FkZDsKLQlzdG9yX2RyaXZlci0+YmFzZS5kZXZfcm0JPSBzdG9yX3ZzY19vbl9kZXZpY2VfcmVtb3ZlOwotCXN0b3JfZHJpdmVyLT5iYXNlLmNsZWFudXAJPSBzdG9yX3ZzY19vbl9jbGVhbnVwOworCQlpZiAoZGV2aWNlX2luZm8tPnRhcmdldF9pZCkKKwkJCW1ham9yX2luZm8tPmluZGV4ID0gMzsKKwkJZWxzZQorCQkJbWFqb3JfaW5mby0+aW5kZXggPSAyOwogCi0Jc3Rvcl9kcml2ZXItPm9uX2lvX3JlcXVlc3QJPSBzdG9yX3ZzY19vbl9pb19yZXF1ZXN0OworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQltYWpvcl9pbmZvLT5tYWpvciA9IDM7CisJCWlmICghaWRlMF9yZWdpc3RlcmVkKSB7CisJCQltYWpvcl9pbmZvLT5kb19yZWdpc3RlciA9IHRydWU7CisJCQlpZGUwX3JlZ2lzdGVyZWQgPSB0cnVlOworCQl9IGVsc2UKKwkJCW1ham9yX2luZm8tPmRvX3JlZ2lzdGVyID0gZmFsc2U7CiAKLQlyZXR1cm4gMDsKKwkJaWYgKGRldmljZV9pbmZvLT50YXJnZXRfaWQpCisJCQltYWpvcl9pbmZvLT5pbmRleCA9IDE7CisJCWVsc2UKKwkJCW1ham9yX2luZm8tPmluZGV4ID0gMDsKKworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVOT0RFVjsKIH0KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L3N0b3J2c2NfYXBpLmggYi9kcml2ZXJzL3N0YWdpbmcvaHYvc3RvcnZzY19hcGkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJmNTc1NS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvc3RvcnZzY19hcGkuaAorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwOSwgTWljcm9zb2Z0IENvcnBvcmF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAotICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi0gKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlCi0gKiBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KLSAqCi0gKiBBdXRob3JzOgotICogICBIYWl5YW5nIFpoYW5nIDxoYWl5YW5nekBtaWNyb3NvZnQuY29tPgotICogICBIYW5rIEphbnNzZW4gIDxoamFuc3NlbkBtaWNyb3NvZnQuY29tPgotICoKLSAqLwotCi0KLSNpZm5kZWYgX1NUT1JWU0NfQVBJX0hfCi0jZGVmaW5lIF9TVE9SVlNDX0FQSV9IXwotCi0jaW5jbHVkZSAidm1idXNfYXBpLmgiCi0KLS8qIERlZmluZXMgKi8KLSNkZWZpbmUgU1RPUlZTQ19SSU5HX0JVRkZFUl9TSVpFCQkJKDIwKlBBR0VfU0laRSkKLSNkZWZpbmUgQkxLVlNDX1JJTkdfQlVGRkVSX1NJWkUJCQkJKDIwKlBBR0VfU0laRSkKLQotI2RlZmluZSBTVE9SVlNDX01BWF9JT19SRVFVRVNUUwkJCQkxMjgKLQotLyoKLSAqIEluIEh5cGVyLVYsIGVhY2ggcG9ydC9wYXRoL3RhcmdldCBtYXBzIHRvIDEgc2NzaSBob3N0IGFkYXB0ZXIuICBJbgotICogcmVhbGl0eSwgdGhlIHBhdGgvdGFyZ2V0IGlzIG5vdCB1c2VkIChpZSBhbHdheXMgc2V0IHRvIDApIHNvIG91cgotICogc2NzaSBob3N0IGFkYXB0ZXIgZXNzZW50aWFsbHkgaGFzIDEgYnVzIHdpdGggMSB0YXJnZXQgdGhhdCBjb250YWlucwotICogdXAgdG8gMjU2IGx1bnMuCi0gKi8KLSNkZWZpbmUgU1RPUlZTQ19NQVhfTFVOU19QRVJfVEFSR0VUCQkJNjQKLSNkZWZpbmUgU1RPUlZTQ19NQVhfVEFSR0VUUwkJCQkxCi0jZGVmaW5lIFNUT1JWU0NfTUFYX0NIQU5ORUxTCQkJCTEKLQotc3RydWN0IGh2X3N0b3J2c2NfcmVxdWVzdDsKLQotLyogTWF0Y2hlcyBXaW5kb3dzLWVuZCAqLwotZW51bSBzdG9ydnNjX3JlcXVlc3RfdHlwZXsKLQlXUklURV9UWVBFLAotCVJFQURfVFlQRSwKLQlVTktOT1dOX1RZUEUsCi19OwotCi1zdHJ1Y3QgaHZfc3RvcnZzY19yZXF1ZXN0IHsKLQllbnVtIHN0b3J2c2NfcmVxdWVzdF90eXBlIHR5cGU7Ci0JdTMyIGhvc3Q7Ci0JdTMyIGJ1czsKLQl1MzIgdGFyZ2V0X2lkOwotCXUzMiBsdW5faWQ7Ci0JdTggKmNkYjsKLQl1MzIgY2RiX2xlbjsKLQl1MzIgc3RhdHVzOwotCXUzMiBieXRlc194ZmVyOwotCi0JdW5zaWduZWQgY2hhciAqc2Vuc2VfYnVmZmVyOwotCXUzMiBzZW5zZV9idWZmZXJfc2l6ZTsKLQotCXZvaWQgKmNvbnRleHQ7Ci0KLQl2b2lkICgqb25faW9fY29tcGxldGlvbikoc3RydWN0IGh2X3N0b3J2c2NfcmVxdWVzdCAqcmVxdWVzdCk7Ci0KLQkvKiBUaGlzIHBvaW50cyB0byB0aGUgbWVtb3J5IGFmdGVyIERhdGFCdWZmZXIgKi8KLQl2b2lkICpleHRlbnNpb247Ci0KLQlzdHJ1Y3QgaHZfbXVsdGlwYWdlX2J1ZmZlciBkYXRhX2J1ZmZlcjsKLX07Ci0KLS8qIFJlcHJlc2VudHMgdGhlIGJsb2NrIHZzYyBkcml2ZXIgKi8KLXN0cnVjdCBzdG9ydnNjX2RyaXZlcl9vYmplY3QgewotCS8qIE11c3QgYmUgdGhlIGZpcnN0IGZpZWxkICovCi0JLyogV2hpY2ggaXMgYSBidWcgRklYTUUhICovCi0Jc3RydWN0IGh2X2RyaXZlciBiYXNlOwotCi0JLyogU2V0IGJ5IGNhbGxlciAoaW4gYnl0ZXMpICovCi0JdTMyIHJpbmdfYnVmZmVyX3NpemU7Ci0KLQkvKiBBbGxvY2F0ZSB0aGlzIG11Y2ggcHJpdmF0ZSBleHRlbnNpb24gZm9yIGVhY2ggSS9PIHJlcXVlc3QgKi8KLQl1MzIgcmVxdWVzdF9leHRfc2l6ZTsKLQotCS8qIE1heGltdW0gIyBvZiByZXF1ZXN0cyBpbiBmbGlnaHQgcGVyIGNoYW5uZWwvZGV2aWNlICovCi0JdTMyIG1heF9vdXRzdGFuZGluZ19yZXFfcGVyX2NoYW5uZWw7Ci0KLQkvKiBTcGVjaWZpYyB0byB0aGlzIGRyaXZlciAqLwotCWludCAoKm9uX2lvX3JlcXVlc3QpKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSwKLQkJCSAgIHN0cnVjdCBodl9zdG9ydnNjX3JlcXVlc3QgKnJlcXVlc3QpOwotfTsKLQotc3RydWN0IHN0b3J2c2NfZGV2aWNlX2luZm8gewotCXVuc2lnbmVkIGludCBwb3J0X251bWJlcjsKLQl1bnNpZ25lZCBjaGFyIHBhdGhfaWQ7Ci0JdW5zaWduZWQgY2hhciB0YXJnZXRfaWQ7Ci19OwotCi0vKiBJbnRlcmZhY2UgKi8KLWludCBzdG9yX3ZzY19pbml0aWFsaXplKHN0cnVjdCBodl9kcml2ZXIgKmRyaXZlcik7Ci1pbnQgc3Rvcl92c2Nfb25faG9zdF9yZXNldChzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UpOwotaW50IGJsa192c2NfaW5pdGlhbGl6ZShzdHJ1Y3QgaHZfZHJpdmVyICpkcml2ZXIpOwotCi0jZW5kaWYgLyogX1NUT1JWU0NfQVBJX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvc3RvcnZzY19kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9zdG9ydnNjX2Rydi5jCmluZGV4IGU2NDYyYTIuLjk0MmNjNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9zdG9ydnNjX2Rydi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9zdG9ydnNjX2Rydi5jCkBAIC0xNyw2ICsxNyw3IEBACiAgKiBBdXRob3JzOgogICogICBIYWl5YW5nIFpoYW5nIDxoYWl5YW5nekBtaWNyb3NvZnQuY29tPgogICogICBIYW5rIEphbnNzZW4gIDxoamFuc3NlbkBtaWNyb3NvZnQuY29tPgorICogICBLLiBZLiBTcmluaXZhc2FuIDxreXNAbWljcm9zb2Z0LmNvbT4KICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC0zMSwxOCArMzIsMjcgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfZWguaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aW5mby5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9kYmcuaD4KLSNpbmNsdWRlICJodl9hcGkuaCIKLSNpbmNsdWRlICJsb2dnaW5nLmgiCi0jaW5jbHVkZSAidmVyc2lvbl9pbmZvLmgiCi0jaW5jbHVkZSAidm1idXMuaCIKLSNpbmNsdWRlICJzdG9ydnNjX2FwaS5oIgogCisjaW5jbHVkZSAiaHlwZXJ2LmgiCisjaW5jbHVkZSAiaHlwZXJ2X3N0b3JhZ2UuaCIKIAotc3RydWN0IGhvc3RfZGV2aWNlX2NvbnRleHQgewotCS8qIG11c3QgYmUgMXN0IGZpZWxkCi0JICogRklYTUUgdGhpcyBpcyBhIGJ1ZyAqLwotCS8qIHBvaW50IGJhY2sgdG8gb3VyIGRldmljZSBjb250ZXh0ICovCi0Jc3RydWN0IGh2X2RldmljZSAqZGV2aWNlX2N0eDsKK3N0YXRpYyBpbnQgc3RvcnZzY19yaW5nYnVmZmVyX3NpemUgPSBTVE9SVlNDX1JJTkdfQlVGRkVSX1NJWkU7CisKK21vZHVsZV9wYXJhbShzdG9ydnNjX3JpbmdidWZmZXJfc2l6ZSwgaW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0Moc3RvcnZzY19yaW5nYnVmZmVyX3NpemUsICJSaW5nIGJ1ZmZlciBzaXplIChieXRlcykiKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmRyaXZlcl9uYW1lID0gInN0b3J2c2MiOworCisvKiB7YmE2MTYzZDktMDRhMS00ZDI5LWI2MDUtNzJlMmZmYjFkYzdmfSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBodl9ndWlkIGdTdG9yVnNjRGV2aWNlVHlwZSA9IHsKKwkuZGF0YSA9IHsKKwkJMHhkOSwgMHg2MywgMHg2MSwgMHhiYSwgMHhhMSwgMHgwNCwgMHgyOSwgMHg0ZCwKKwkJMHhiNiwgMHgwNSwgMHg3MiwgMHhlMiwgMHhmZiwgMHhiMSwgMHhkYywgMHg3ZgorCX0KK307CisKK3N0cnVjdCBodl9ob3N0X2RldmljZSB7CisJc3RydWN0IGh2X2RldmljZSAqZGV2OwogCXN0cnVjdCBrbWVtX2NhY2hlICpyZXF1ZXN0X3Bvb2w7CiAJdW5zaWduZWQgaW50IHBvcnQ7CiAJdW5zaWduZWQgY2hhciBwYXRoOwpAQCAtNTcsMzMxICs2Nyw1NyBAQAogCXN0cnVjdCBzY2F0dGVybGlzdCAqYm91bmNlX3NnbDsKIAogCXN0cnVjdCBodl9zdG9ydnNjX3JlcXVlc3QgcmVxdWVzdDsKLQkvKiAhISFETyBOT1QgQUREIEFOWVRISU5HIEJFTE9XIEhFUkUhISEgKi8KLQkvKiBUaGUgZXh0ZW5zaW9uIGJ1ZmZlciBmYWxscyByaWdodCBoZXJlIGFuZCBpcyBwb2ludGVkIHRvIGJ5Ci0JICogcmVxdWVzdC5FeHRlbnNpb247Ci0JICogV2hpY2ggc291bmRzIGxpa2UgYSB2ZXJ5IGJhZCBkZXNpZ24uLi4gKi8KIH07CiAKIAotLyogU3RhdGljIGRlY2wgKi8KLXN0YXRpYyBpbnQgc3RvcnZzY19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBzdG9ydnNjX3F1ZXVlY29tbWFuZChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwgc3RydWN0IHNjc2lfY21uZCAqc2NtbmQpOwotc3RhdGljIGludCBzdG9ydnNjX2RldmljZV9hbGxvYyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKik7Ci1zdGF0aWMgaW50IHN0b3J2c2NfZGV2aWNlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKik7Ci1zdGF0aWMgaW50IHN0b3J2c2NfaG9zdF9yZXNldF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKnNjbW5kKTsKLXN0YXRpYyBpbnQgc3RvcnZzY19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgc3RvcnZzY19kZXZpY2VfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2aWNlKQoreworCS8qCisJICogVGhpcyBlbmFibGVzIGx1bnMgdG8gYmUgbG9jYXRlZCBzcGFyc2VseS4gT3RoZXJ3aXNlLCB3ZSBtYXkgbm90CisJICogZGlzY292ZXJlZCB0aGVtLgorCSAqLworCXNkZXZpY2UtPnNkZXZfYmZsYWdzIHw9IEJMSVNUX1NQQVJTRUxVTiB8IEJMSVNUX0xBUkdFTFVOOworCXJldHVybiAwOworfQogCi1zdGF0aWMgc3RydWN0IHNjYXR0ZXJsaXN0ICpjcmVhdGVfYm91bmNlX2J1ZmZlcihzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKLQkJCQkJCXVuc2lnbmVkIGludCBzZ19jb3VudCwKLQkJCQkJCXVuc2lnbmVkIGludCBsZW4pOworc3RhdGljIGludCBzdG9ydnNjX21lcmdlX2J2ZWMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCisJCQkgICAgICBzdHJ1Y3QgYnZlY19tZXJnZV9kYXRhICpibWQsIHN0cnVjdCBiaW9fdmVjICpidmVjKQoreworCS8qIGNoZWNraW5nIGRvbmUgYnkgY2FsbGVyLiAqLworCXJldHVybiBidmVjLT5idl9sZW47Cit9CisKK3N0YXRpYyBpbnQgc3RvcnZzY19kZXZpY2VfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldmljZSkKK3sKKwlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2aWNlLCBNU0dfU0lNUExFX1RBRywKKwkJCQlTVE9SVlNDX01BWF9JT19SRVFVRVNUUyk7CisKKwlEUFJJTlRfSU5GTyhTVE9SVlNDX0RSViwgInNkZXYgKCVwKSAtIHNldHRpbmcgbWF4IHNlZ21lbnQgc2l6ZSB0byAlbGQiLAorCQkgICAgc2RldmljZSwgUEFHRV9TSVpFKTsKKwlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShzZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlLCBQQUdFX1NJWkUpOworCisJRFBSSU5UX0lORk8oU1RPUlZTQ19EUlYsICJzZGV2ICglcCkgLSBhZGRpbmcgbWVyZ2UgYmlvIHZlYyByb3V0aW5lIiwKKwkJICAgIHNkZXZpY2UpOworCWJsa19xdWV1ZV9tZXJnZV9idmVjKHNkZXZpY2UtPnJlcXVlc3RfcXVldWUsIHN0b3J2c2NfbWVyZ2VfYnZlYyk7CisKKwlibGtfcXVldWVfYm91bmNlX2xpbWl0KHNkZXZpY2UtPnJlcXVlc3RfcXVldWUsIEJMS19CT1VOQ0VfQU5ZKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBkZXN0cm95X2JvdW5jZV9idWZmZXIoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsCi0JCQkJICB1bnNpZ25lZCBpbnQgc2dfY291bnQpOwotc3RhdGljIGludCBkb19ib3VuY2VfYnVmZmVyKHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCB1bnNpZ25lZCBpbnQgc2dfY291bnQpOwotc3RhdGljIHVuc2lnbmVkIGludCBjb3B5X2Zyb21fYm91bmNlX2J1ZmZlcihzdHJ1Y3Qgc2NhdHRlcmxpc3QgKm9yaWdfc2dsLAotCQkJCQkgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpib3VuY2Vfc2dsLAotCQkJCQkgICAgdW5zaWduZWQgaW50IG9yaWdfc2dsX2NvdW50KTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgY29weV90b19ib3VuY2VfYnVmZmVyKHN0cnVjdCBzY2F0dGVybGlzdCAqb3JpZ19zZ2wsCi0JCQkJCSAgc3RydWN0IHNjYXR0ZXJsaXN0ICpib3VuY2Vfc2dsLAotCQkJCQkgIHVuc2lnbmVkIGludCBvcmlnX3NnbF9jb3VudCk7Ci0KLXN0YXRpYyBpbnQgc3RvcnZzY19nZXRfY2hzKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldiwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKLQkJCSAgIHNlY3Rvcl90IGNhcGFjaXR5LCBpbnQgKmluZm8pOwotCi0KLXN0YXRpYyBpbnQgc3RvcnZzY19yaW5nYnVmZmVyX3NpemUgPSBTVE9SVlNDX1JJTkdfQlVGRkVSX1NJWkU7Ci1tb2R1bGVfcGFyYW0oc3RvcnZzY19yaW5nYnVmZmVyX3NpemUsIGludCwgU19JUlVHTyk7Ci1NT0RVTEVfUEFSTV9ERVNDKHN0b3J2c2NfcmluZ2J1ZmZlcl9zaXplLCAiUmluZyBidWZmZXIgc2l6ZSAoYnl0ZXMpIik7Ci0KLS8qIFRoZSBvbmUgYW5kIG9ubHkgb25lICovCi1zdGF0aWMgc3RydWN0IHN0b3J2c2NfZHJpdmVyX29iamVjdCBnX3N0b3J2c2NfZHJ2OwotCi0vKiBTY3NpIGRyaXZlciAqLwotc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgc2NzaV9kcml2ZXIgPSB7Ci0JLm1vZHVsZQk9CQlUSElTX01PRFVMRSwKLQkubmFtZSA9CQkJInN0b3J2c2NfaG9zdF90IiwKLQkuYmlvc19wYXJhbSA9CQlzdG9ydnNjX2dldF9jaHMsCi0JLnF1ZXVlY29tbWFuZCA9CQlzdG9ydnNjX3F1ZXVlY29tbWFuZCwKLQkuZWhfaG9zdF9yZXNldF9oYW5kbGVyID0Jc3RvcnZzY19ob3N0X3Jlc2V0X2hhbmRsZXIsCi0JLnNsYXZlX2FsbG9jID0JCXN0b3J2c2NfZGV2aWNlX2FsbG9jLAotCS5zbGF2ZV9jb25maWd1cmUgPQlzdG9ydnNjX2RldmljZV9jb25maWd1cmUsCi0JLmNtZF9wZXJfbHVuID0JCTEsCi0JLyogNjQgbWF4X3F1ZXVlICogMSB0YXJnZXQgKi8KLQkuY2FuX3F1ZXVlID0JCVNUT1JWU0NfTUFYX0lPX1JFUVVFU1RTKlNUT1JWU0NfTUFYX1RBUkdFVFMsCi0JLnRoaXNfaWQgPQkJLTEsCi0JLyogbm8gdXNlIHNldHRpbmcgdG8gMCBzaW5jZSBsbF9ibGtfcncgcmVzZXQgaXQgdG8gMSAqLwotCS8qIGN1cnJlbnRseSAzMiAqLwotCS5zZ190YWJsZXNpemUgPQkJTUFYX01VTFRJUEFHRV9CVUZGRVJfQ09VTlQsCi0JLyoKLQkgKiBFTkFCTEVfQ0xVU1RFUklORyBhbGxvd3MgbXV0aXBsZSBwaHlzaWNhbGx5IGNvbnRpZyBiaW9fdmVjcyB0byBtZXJnZQotCSAqIGludG8gMSBzZyBlbGVtZW50LiBJZiBzZXQsIHdlIG11c3QgbGltaXQgdGhlIG1heF9zZWdtZW50X3NpemUgdG8KLQkgKiBQQUdFX1NJWkUsIG90aGVyd2lzZSB3ZSBtYXkgZ2V0IDEgc2cgZWxlbWVudCB0aGF0IHJlcHJlc2VudHMKLQkgKiBtdWx0aXBsZQotCSAqLwotCS8qIHBoeXNpY2FsbHkgY29udGlnIHBmbnMgKGllIHNnW3hdLmxlbmd0aCA+IFBBR0VfU0laRSkuICovCi0JLnVzZV9jbHVzdGVyaW5nID0JRU5BQkxFX0NMVVNURVJJTkcsCi0JLyogTWFrZSBzdXJlIHdlIGRvbnQgZ2V0IGEgc2cgc2VnbWVudCBjcm9zc2VzIGEgcGFnZSBib3VuZGFyeSAqLwotCS5kbWFfYm91bmRhcnkgPQkJUEFHRV9TSVpFLTEsCi19OwotCi0KLS8qCi0gKiBzdG9ydnNjX2Rydl9pbml0IC0gU3RvclZzYyBkcml2ZXIgaW5pdGlhbGl6YXRpb24uCi0gKi8KLXN0YXRpYyBpbnQgc3RvcnZzY19kcnZfaW5pdChpbnQgKCpkcnZfaW5pdCkoc3RydWN0IGh2X2RyaXZlciAqZHJ2KSkKKwkJCQkgIHVuc2lnbmVkIGludCBzZ19jb3VudCkKIHsKLQlpbnQgcmV0OwotCXN0cnVjdCBzdG9ydnNjX2RyaXZlcl9vYmplY3QgKnN0b3J2c2NfZHJ2X29iaiA9ICZnX3N0b3J2c2NfZHJ2OwotCXN0cnVjdCBodl9kcml2ZXIgKmRydiA9ICZnX3N0b3J2c2NfZHJ2LmJhc2U7CisJaW50IGk7CisJc3RydWN0IHBhZ2UgKnBhZ2VfYnVmOwogCi0Jc3RvcnZzY19kcnZfb2JqLT5yaW5nX2J1ZmZlcl9zaXplID0gc3RvcnZzY19yaW5nYnVmZmVyX3NpemU7Ci0KLQkvKiBDYWxsYmFjayB0byBjbGllbnQgZHJpdmVyIHRvIGNvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiAqLwotCWRydl9pbml0KCZzdG9ydnNjX2Rydl9vYmotPmJhc2UpOwotCi0JZHJ2LT5wcml2ID0gc3RvcnZzY19kcnZfb2JqOwotCi0JRFBSSU5UX0lORk8oU1RPUlZTQ19EUlYsCi0JCSAgICAicmVxdWVzdCBleHRlbnNpb24gc2l6ZSAldSwgbWF4IG91dHN0YW5kaW5nIHJlcXMgJXUiLAotCQkgICAgc3RvcnZzY19kcnZfb2JqLT5yZXF1ZXN0X2V4dF9zaXplLAotCQkgICAgc3RvcnZzY19kcnZfb2JqLT5tYXhfb3V0c3RhbmRpbmdfcmVxX3Blcl9jaGFubmVsKTsKLQotCWlmIChzdG9ydnNjX2Rydl9vYmotPm1heF9vdXRzdGFuZGluZ19yZXFfcGVyX2NoYW5uZWwgPAotCSAgICBTVE9SVlNDX01BWF9JT19SRVFVRVNUUykgewotCQlEUFJJTlRfRVJSKFNUT1JWU0NfRFJWLAotCQkJICAgIlRoZSBudW1iZXIgb2Ygb3V0c3RhbmRpbmcgaW8gcmVxdWVzdHMgKCVkKSAiCi0JCQkgICAiaXMgbGFyZ2VyIHRoYW4gdGhhdCBzdXBwb3J0ZWQgKCVkKSBpbnRlcm5hbGx5LiIsCi0JCQkgICBTVE9SVlNDX01BWF9JT19SRVFVRVNUUywKLQkJCSAgIHN0b3J2c2NfZHJ2X29iai0+bWF4X291dHN0YW5kaW5nX3JlcV9wZXJfY2hhbm5lbCk7Ci0JCXJldHVybiAtMTsKKwlmb3IgKGkgPSAwOyBpIDwgc2dfY291bnQ7IGkrKykgeworCQlwYWdlX2J1ZiA9IHNnX3BhZ2UoKCZzZ2xbaV0pKTsKKwkJaWYgKHBhZ2VfYnVmICE9IE5VTEwpCisJCQlfX2ZyZWVfcGFnZShwYWdlX2J1Zik7CiAJfQogCi0JZHJ2LT5kcml2ZXIubmFtZSA9IHN0b3J2c2NfZHJ2X29iai0+YmFzZS5uYW1lOwotCi0JZHJ2LT5kcml2ZXIucHJvYmUgPSBzdG9ydnNjX3Byb2JlOwotCWRydi0+ZHJpdmVyLnJlbW92ZSA9IHN0b3J2c2NfcmVtb3ZlOwotCi0JLyogVGhlIGRyaXZlciBiZWxvbmdzIHRvIHZtYnVzICovCi0JcmV0ID0gdm1idXNfY2hpbGRfZHJpdmVyX3JlZ2lzdGVyKCZkcnYtPmRyaXZlcik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHN0b3J2c2NfZHJ2X2V4aXRfY2Ioc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkZXZpY2UgKipjdXJyID0gKHN0cnVjdCBkZXZpY2UgKiopZGF0YTsKLQkqY3VyciA9IGRldjsKLQlyZXR1cm4gMTsgLyogc3RvcCBpdGVyYXRpbmcgKi8KLX0KLQotc3RhdGljIHZvaWQgc3RvcnZzY19kcnZfZXhpdCh2b2lkKQotewotCXN0cnVjdCBzdG9ydnNjX2RyaXZlcl9vYmplY3QgKnN0b3J2c2NfZHJ2X29iaiA9ICZnX3N0b3J2c2NfZHJ2OwotCXN0cnVjdCBodl9kcml2ZXIgKmRydiA9ICZnX3N0b3J2c2NfZHJ2LmJhc2U7Ci0Jc3RydWN0IGRldmljZSAqY3VycmVudF9kZXYgPSBOVUxMOwotCWludCByZXQ7Ci0KLQl3aGlsZSAoMSkgewotCQljdXJyZW50X2RldiA9IE5VTEw7Ci0KLQkJLyogR2V0IHRoZSBkZXZpY2UgKi8KLQkJcmV0ID0gZHJpdmVyX2Zvcl9lYWNoX2RldmljZSgmZHJ2LT5kcml2ZXIsIE5VTEwsCi0JCQkJCSAgICAgKHZvaWQgKikgJmN1cnJlbnRfZGV2LAotCQkJCQkgICAgIHN0b3J2c2NfZHJ2X2V4aXRfY2IpOwotCi0JCWlmIChyZXQpCi0JCQlEUFJJTlRfV0FSTihTVE9SVlNDX0RSViwKLQkJCQkgICAgImRyaXZlcl9mb3JfZWFjaF9kZXZpY2UgcmV0dXJuZWQgJWQiLCByZXQpOwotCi0JCWlmIChjdXJyZW50X2RldiA9PSBOVUxMKQotCQkJYnJlYWs7Ci0KLQkJLyogSW5pdGlhdGUgcmVtb3ZhbCBmcm9tIHRoZSB0b3AtZG93biAqLwotCQlkZXZpY2VfdW5yZWdpc3RlcihjdXJyZW50X2Rldik7Ci0JfQotCi0JaWYgKHN0b3J2c2NfZHJ2X29iai0+YmFzZS5jbGVhbnVwKQotCQlzdG9ydnNjX2Rydl9vYmotPmJhc2UuY2xlYW51cCgmc3RvcnZzY19kcnZfb2JqLT5iYXNlKTsKLQotCXZtYnVzX2NoaWxkX2RyaXZlcl91bnJlZ2lzdGVyKCZkcnYtPmRyaXZlcik7Ci0JcmV0dXJuOwotfQotCi0vKgotICogc3RvcnZzY19wcm9iZSAtIEFkZCBhIG5ldyBkZXZpY2UgZm9yIHRoaXMgZHJpdmVyCi0gKi8KLXN0YXRpYyBpbnQgc3RvcnZzY19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgaHZfZHJpdmVyICpkcnYgPQotCQkJCWRydl90b19odl9kcnYoZGV2aWNlLT5kcml2ZXIpOwotCXN0cnVjdCBzdG9ydnNjX2RyaXZlcl9vYmplY3QgKnN0b3J2c2NfZHJ2X29iaiA9IGRydi0+cHJpdjsKLQlzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2Vfb2JqID0gZGV2aWNlX3RvX2h2X2RldmljZShkZXZpY2UpOwotCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7Ci0Jc3RydWN0IGhvc3RfZGV2aWNlX2NvbnRleHQgKmhvc3RfZGV2aWNlX2N0eDsKLQlzdHJ1Y3Qgc3RvcnZzY19kZXZpY2VfaW5mbyBkZXZpY2VfaW5mbzsKLQotCWlmICghc3RvcnZzY19kcnZfb2JqLT5iYXNlLmRldl9hZGQpCi0JCXJldHVybiAtMTsKLQotCWhvc3QgPSBzY3NpX2hvc3RfYWxsb2MoJnNjc2lfZHJpdmVyLAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaG9zdF9kZXZpY2VfY29udGV4dCkpOwotCWlmICghaG9zdCkgewotCQlEUFJJTlRfRVJSKFNUT1JWU0NfRFJWLCAidW5hYmxlIHRvIGFsbG9jYXRlIHNjc2kgaG9zdCBvYmplY3QiKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JZGV2X3NldF9kcnZkYXRhKGRldmljZSwgaG9zdCk7Ci0KLQlob3N0X2RldmljZV9jdHggPSAoc3RydWN0IGhvc3RfZGV2aWNlX2NvbnRleHQgKilob3N0LT5ob3N0ZGF0YTsKLQltZW1zZXQoaG9zdF9kZXZpY2VfY3R4LCAwLCBzaXplb2Yoc3RydWN0IGhvc3RfZGV2aWNlX2NvbnRleHQpKTsKLQotCWhvc3RfZGV2aWNlX2N0eC0+cG9ydCA9IGhvc3QtPmhvc3Rfbm87Ci0JaG9zdF9kZXZpY2VfY3R4LT5kZXZpY2VfY3R4ID0gZGV2aWNlX29iajsKLQotCWhvc3RfZGV2aWNlX2N0eC0+cmVxdWVzdF9wb29sID0KLQkJCQlrbWVtX2NhY2hlX2NyZWF0ZShkZXZfbmFtZSgmZGV2aWNlX29iai0+ZGV2aWNlKSwKLQkJCQkJc2l6ZW9mKHN0cnVjdCBzdG9ydnNjX2NtZF9yZXF1ZXN0KSArCi0JCQkJCXN0b3J2c2NfZHJ2X29iai0+cmVxdWVzdF9leHRfc2l6ZSwgMCwKLQkJCQkJU0xBQl9IV0NBQ0hFX0FMSUdOLCBOVUxMKTsKLQotCWlmICghaG9zdF9kZXZpY2VfY3R4LT5yZXF1ZXN0X3Bvb2wpIHsKLQkJc2NzaV9ob3N0X3B1dChob3N0KTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JZGV2aWNlX2luZm8ucG9ydF9udW1iZXIgPSBob3N0LT5ob3N0X25vOwotCS8qIENhbGwgdG8gdGhlIHZzYyBkcml2ZXIgdG8gYWRkIHRoZSBkZXZpY2UgKi8KLQlyZXQgPSBzdG9ydnNjX2Rydl9vYmotPmJhc2UuZGV2X2FkZChkZXZpY2Vfb2JqLAotCQkJCQkJKHZvaWQgKikmZGV2aWNlX2luZm8pOwotCWlmIChyZXQgIT0gMCkgewotCQlEUFJJTlRfRVJSKFNUT1JWU0NfRFJWLCAidW5hYmxlIHRvIGFkZCBzY3NpIHZzYyBkZXZpY2UiKTsKLQkJa21lbV9jYWNoZV9kZXN0cm95KGhvc3RfZGV2aWNlX2N0eC0+cmVxdWVzdF9wb29sKTsKLQkJc2NzaV9ob3N0X3B1dChob3N0KTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCS8qIGhvc3RfZGV2aWNlX2N0eC0+cG9ydCA9IGRldmljZV9pbmZvLlBvcnROdW1iZXI7ICovCi0JaG9zdF9kZXZpY2VfY3R4LT5wYXRoID0gZGV2aWNlX2luZm8ucGF0aF9pZDsKLQlob3N0X2RldmljZV9jdHgtPnRhcmdldCA9IGRldmljZV9pbmZvLnRhcmdldF9pZDsKLQotCS8qIG1heCAjIG9mIGRldmljZXMgcGVyIHRhcmdldCAqLwotCWhvc3QtPm1heF9sdW4gPSBTVE9SVlNDX01BWF9MVU5TX1BFUl9UQVJHRVQ7Ci0JLyogbWF4ICMgb2YgdGFyZ2V0cyBwZXIgY2hhbm5lbCAqLwotCWhvc3QtPm1heF9pZCA9IFNUT1JWU0NfTUFYX1RBUkdFVFM7Ci0JLyogbWF4ICMgb2YgY2hhbm5lbHMgKi8KLQlob3N0LT5tYXhfY2hhbm5lbCA9IFNUT1JWU0NfTUFYX0NIQU5ORUxTIC0gMTsKLQotCS8qIFJlZ2lzdGVyIHRoZSBIQkEgYW5kIHN0YXJ0IHRoZSBzY3NpIGJ1cyBzY2FuICovCi0JcmV0ID0gc2NzaV9hZGRfaG9zdChob3N0LCBkZXZpY2UpOwotCWlmIChyZXQgIT0gMCkgewotCQlEUFJJTlRfRVJSKFNUT1JWU0NfRFJWLCAidW5hYmxlIHRvIGFkZCBzY3NpIGhvc3QgZGV2aWNlIik7Ci0KLQkJc3RvcnZzY19kcnZfb2JqLT5iYXNlLmRldl9ybShkZXZpY2Vfb2JqKTsKLQotCQlrbWVtX2NhY2hlX2Rlc3Ryb3koaG9zdF9kZXZpY2VfY3R4LT5yZXF1ZXN0X3Bvb2wpOwotCQlzY3NpX2hvc3RfcHV0KGhvc3QpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0Jc2NzaV9zY2FuX2hvc3QoaG9zdCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIHN0b3J2c2NfcmVtb3ZlIC0gQ2FsbGJhY2sgd2hlbiBvdXIgZGV2aWNlIGlzIHJlbW92ZWQKLSAqLwotc3RhdGljIGludCBzdG9ydnNjX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgaHZfZHJpdmVyICpkcnYgPQotCQkJZHJ2X3RvX2h2X2RydihkZXZpY2UtPmRyaXZlcik7Ci0Jc3RydWN0IHN0b3J2c2NfZHJpdmVyX29iamVjdCAqc3RvcnZzY19kcnZfb2JqID0gZHJ2LT5wcml2OwotCXN0cnVjdCBodl9kZXZpY2UgKmRldmljZV9vYmogPSBkZXZpY2VfdG9faHZfZGV2aWNlKGRldmljZSk7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXZpY2UpOwotCXN0cnVjdCBob3N0X2RldmljZV9jb250ZXh0ICpob3N0X2RldmljZV9jdHggPQotCQkJKHN0cnVjdCBob3N0X2RldmljZV9jb250ZXh0ICopaG9zdC0+aG9zdGRhdGE7Ci0KLQotCWlmICghc3RvcnZzY19kcnZfb2JqLT5iYXNlLmRldl9ybSkKLQkJcmV0dXJuIC0xOwotCi0JLyoKLQkgKiBDYWxsIHRvIHRoZSB2c2MgZHJpdmVyIHRvIGxldCBpdCBrbm93IHRoYXQgdGhlIGRldmljZSBpcyBiZWluZwotCSAqIHJlbW92ZWQKLQkgKi8KLQlyZXQgPSBzdG9ydnNjX2Rydl9vYmotPmJhc2UuZGV2X3JtKGRldmljZV9vYmopOwotCWlmIChyZXQgIT0gMCkgewotCQkvKiBUT0RPOiAqLwotCQlEUFJJTlRfRVJSKFNUT1JWU0MsICJ1bmFibGUgdG8gcmVtb3ZlIHZzYyBkZXZpY2UgKHJldCAlZCkiLAotCQkJICAgcmV0KTsKLQl9Ci0KLQlpZiAoaG9zdF9kZXZpY2VfY3R4LT5yZXF1ZXN0X3Bvb2wpIHsKLQkJa21lbV9jYWNoZV9kZXN0cm95KGhvc3RfZGV2aWNlX2N0eC0+cmVxdWVzdF9wb29sKTsKLQkJaG9zdF9kZXZpY2VfY3R4LT5yZXF1ZXN0X3Bvb2wgPSBOVUxMOwotCX0KLQotCURQUklOVF9JTkZPKFNUT1JWU0MsICJyZW1vdmluZyBob3N0IGFkYXB0ZXIgKCVwKS4uLiIsIGhvc3QpOwotCXNjc2lfcmVtb3ZlX2hvc3QoaG9zdCk7Ci0KLQlEUFJJTlRfSU5GTyhTVE9SVlNDLCAicmVsZWFzaW5nIGhvc3QgYWRhcHRlciAoJXApLi4uIiwgaG9zdCk7Ci0Jc2NzaV9ob3N0X3B1dChob3N0KTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogc3RvcnZzY19jb21tbWFuZF9jb21wbGV0aW9uIC0gQ29tbWFuZCBjb21wbGV0aW9uIHByb2Nlc3NpbmcKLSAqLwotc3RhdGljIHZvaWQgc3RvcnZzY19jb21tbWFuZF9jb21wbGV0aW9uKHN0cnVjdCBodl9zdG9ydnNjX3JlcXVlc3QgKnJlcXVlc3QpCi17Ci0Jc3RydWN0IHN0b3J2c2NfY21kX3JlcXVlc3QgKmNtZF9yZXF1ZXN0ID0KLQkJKHN0cnVjdCBzdG9ydnNjX2NtZF9yZXF1ZXN0ICopcmVxdWVzdC0+Y29udGV4dDsKLQlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21uZCA9IGNtZF9yZXF1ZXN0LT5jbWQ7Ci0Jc3RydWN0IGhvc3RfZGV2aWNlX2NvbnRleHQgKmhvc3RfZGV2aWNlX2N0eCA9Ci0JCShzdHJ1Y3QgaG9zdF9kZXZpY2VfY29udGV4dCAqKXNjbW5kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwotCXZvaWQgKCpzY3NpX2RvbmVfZm4pKHN0cnVjdCBzY3NpX2NtbmQgKik7Ci0Jc3RydWN0IHNjc2lfc2Vuc2VfaGRyIHNlbnNlX2hkcjsKLQotCS8qIEFTU0VSVChyZXF1ZXN0ID09ICZjbWRfcmVxdWVzdC0+cmVxdWVzdCk7ICovCi0JLyogQVNTRVJUKHNjbW5kKTsgKi8KLQkvKiBBU1NFUlQoKHVuc2lnbmVkIGxvbmcpc2NtbmQtPmhvc3Rfc2NyaWJibGUgPT0gKi8KLQkvKiAgICAgICAgKHVuc2lnbmVkIGxvbmcpY21kX3JlcXVlc3QpOyAqLwotCS8qIEFTU0VSVChzY21uZC0+c2NzaV9kb25lKTsgKi8KLQotCWlmIChjbWRfcmVxdWVzdC0+Ym91bmNlX3NnbF9jb3VudCkgewotCQkvKiB1c2luZyBib3VuY2UgYnVmZmVyICovCi0JCS8qIHByaW50aygiY29weV9mcm9tX2JvdW5jZV9idWZmZXJcbiIpOyAqLwotCi0JCS8qIEZJWE1FOiBXZSBjYW4gb3B0aW1pemUgb24gd3JpdGVzIGJ5IGp1c3Qgc2tpcHBpbmcgdGhpcyAqLwotCQljb3B5X2Zyb21fYm91bmNlX2J1ZmZlcihzY3NpX3NnbGlzdChzY21uZCksCi0JCQkJCWNtZF9yZXF1ZXN0LT5ib3VuY2Vfc2dsLAotCQkJCQlzY3NpX3NnX2NvdW50KHNjbW5kKSk7Ci0JCWRlc3Ryb3lfYm91bmNlX2J1ZmZlcihjbWRfcmVxdWVzdC0+Ym91bmNlX3NnbCwKLQkJCQkgICAgICBjbWRfcmVxdWVzdC0+Ym91bmNlX3NnbF9jb3VudCk7Ci0JfQotCi0Jc2NtbmQtPnJlc3VsdCA9IHJlcXVlc3QtPnN0YXR1czsKLQotCWlmIChzY21uZC0+cmVzdWx0KSB7Ci0JCWlmIChzY3NpX25vcm1hbGl6ZV9zZW5zZShzY21uZC0+c2Vuc2VfYnVmZmVyLAotCQkJCXJlcXVlc3QtPnNlbnNlX2J1ZmZlcl9zaXplLCAmc2Vuc2VfaGRyKSkKLQkJCXNjc2lfcHJpbnRfc2Vuc2VfaGRyKCJzdG9ydnNjIiwgJnNlbnNlX2hkcik7Ci0JfQotCi0JLyogQVNTRVJUKHJlcXVlc3QtPkJ5dGVzWGZlciA8PSByZXF1ZXN0LT5kYXRhX2J1ZmZlci5MZW5ndGgpOyAqLwotCXNjc2lfc2V0X3Jlc2lkKHNjbW5kLAotCQlyZXF1ZXN0LT5kYXRhX2J1ZmZlci5sZW4gLSByZXF1ZXN0LT5ieXRlc194ZmVyKTsKLQotCXNjc2lfZG9uZV9mbiA9IHNjbW5kLT5zY3NpX2RvbmU7Ci0KLQlzY21uZC0+aG9zdF9zY3JpYmJsZSA9IE5VTEw7Ci0Jc2NtbmQtPnNjc2lfZG9uZSA9IE5VTEw7Ci0KLQkvKiAhIURPIE5PVCBNT0RJRlkgdGhlIHNjbW5kIGFmdGVyIHRoaXMgY2FsbCAqLwotCXNjc2lfZG9uZV9mbihzY21uZCk7Ci0KLQlrbWVtX2NhY2hlX2ZyZWUoaG9zdF9kZXZpY2VfY3R4LT5yZXF1ZXN0X3Bvb2wsIGNtZF9yZXF1ZXN0KTsKKwlrZnJlZShzZ2wpOwogfQogCiBzdGF0aWMgaW50IGRvX2JvdW5jZV9idWZmZXIoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsIHVuc2lnbmVkIGludCBzZ19jb3VudCkKQEAgLTQ0MCwyMSArMTc2LDcyIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIGRlc3Ryb3lfYm91bmNlX2J1ZmZlcihzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKLQkJCQkgIHVuc2lnbmVkIGludCBzZ19jb3VudCkKKworLyogQXNzdW1lIHRoZSBvcmlnaW5hbCBzZ2wgaGFzIGVub3VnaCByb29tICovCitzdGF0aWMgdW5zaWduZWQgaW50IGNvcHlfZnJvbV9ib3VuY2VfYnVmZmVyKHN0cnVjdCBzY2F0dGVybGlzdCAqb3JpZ19zZ2wsCisJCQkJCSAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmJvdW5jZV9zZ2wsCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgb3JpZ19zZ2xfY291bnQpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2VfYnVmOworCWludCBqID0gMDsKKwl1bnNpZ25lZCBsb25nIHNyYywgZGVzdDsKKwl1bnNpZ25lZCBpbnQgc3JjbGVuLCBkZXN0bGVuLCBjb3B5bGVuOworCXVuc2lnbmVkIGludCB0b3RhbF9jb3BpZWQgPSAwOworCXVuc2lnbmVkIGxvbmcgYm91bmNlX2FkZHIgPSAwOworCXVuc2lnbmVkIGxvbmcgZGVzdF9hZGRyID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZm9yIChpID0gMDsgaSA8IHNnX2NvdW50OyBpKyspIHsKLQkJcGFnZV9idWYgPSBzZ19wYWdlKCgmc2dsW2ldKSk7Ci0JCWlmIChwYWdlX2J1ZiAhPSBOVUxMKQotCQkJX19mcmVlX3BhZ2UocGFnZV9idWYpOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWZvciAoaSA9IDA7IGkgPCBvcmlnX3NnbF9jb3VudDsgaSsrKSB7CisJCWRlc3RfYWRkciA9ICh1bnNpZ25lZCBsb25nKWttYXBfYXRvbWljKHNnX3BhZ2UoKCZvcmlnX3NnbFtpXSkpLAorCQkJCQlLTV9JUlEwKSArIG9yaWdfc2dsW2ldLm9mZnNldDsKKwkJZGVzdCA9IGRlc3RfYWRkcjsKKwkJZGVzdGxlbiA9IG9yaWdfc2dsW2ldLmxlbmd0aDsKKworCQlpZiAoYm91bmNlX2FkZHIgPT0gMCkKKwkJCWJvdW5jZV9hZGRyID0KKwkJCSh1bnNpZ25lZCBsb25nKWttYXBfYXRvbWljKHNnX3BhZ2UoKCZib3VuY2Vfc2dsW2pdKSksCisJCQkJCQkJS01fSVJRMCk7CisKKwkJd2hpbGUgKGRlc3RsZW4pIHsKKwkJCXNyYyA9IGJvdW5jZV9hZGRyICsgYm91bmNlX3NnbFtqXS5vZmZzZXQ7CisJCQlzcmNsZW4gPSBib3VuY2Vfc2dsW2pdLmxlbmd0aCAtIGJvdW5jZV9zZ2xbal0ub2Zmc2V0OworCisJCQljb3B5bGVuID0gbWluKHNyY2xlbiwgZGVzdGxlbik7CisJCQltZW1jcHkoKHZvaWQgKilkZXN0LCAodm9pZCAqKXNyYywgY29weWxlbik7CisKKwkJCXRvdGFsX2NvcGllZCArPSBjb3B5bGVuOworCQkJYm91bmNlX3NnbFtqXS5vZmZzZXQgKz0gY29weWxlbjsKKwkJCWRlc3RsZW4gLT0gY29weWxlbjsKKwkJCWRlc3QgKz0gY29weWxlbjsKKworCQkJaWYgKGJvdW5jZV9zZ2xbal0ub2Zmc2V0ID09IGJvdW5jZV9zZ2xbal0ubGVuZ3RoKSB7CisJCQkJLyogZnVsbCAqLworCQkJCWt1bm1hcF9hdG9taWMoKHZvaWQgKilib3VuY2VfYWRkciwgS01fSVJRMCk7CisJCQkJaisrOworCisJCQkJLyogaWYgd2UgbmVlZCB0byB1c2UgYW5vdGhlciBib3VuY2UgYnVmZmVyICovCisJCQkJaWYgKGRlc3RsZW4gfHwgaSAhPSBvcmlnX3NnbF9jb3VudCAtIDEpCisJCQkJCWJvdW5jZV9hZGRyID0KKwkJCQkJKHVuc2lnbmVkIGxvbmcpa21hcF9hdG9taWMoCisJCQkJCXNnX3BhZ2UoKCZib3VuY2Vfc2dsW2pdKSksIEtNX0lSUTApOworCQkJfSBlbHNlIGlmIChkZXN0bGVuID09IDAgJiYgaSA9PSBvcmlnX3NnbF9jb3VudCAtIDEpIHsKKwkJCQkvKiB1bm1hcCB0aGUgbGFzdCBib3VuY2UgdGhhdCBpcyA8IFBBR0VfU0laRSAqLworCQkJCWt1bm1hcF9hdG9taWMoKHZvaWQgKilib3VuY2VfYWRkciwgS01fSVJRMCk7CisJCQl9CisJCX0KKworCQlrdW5tYXBfYXRvbWljKCh2b2lkICopKGRlc3RfYWRkciAtIG9yaWdfc2dsW2ldLm9mZnNldCksCisJCQkgICAgICBLTV9JUlEwKTsKIAl9CiAKLQlrZnJlZShzZ2wpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiB0b3RhbF9jb3BpZWQ7CiB9CiAKKwogLyogQXNzdW1lIHRoZSBib3VuY2Vfc2dsIGhhcyBlbm91Z2ggcm9vbSBpZSB1c2luZyB0aGUgY3JlYXRlX2JvdW5jZV9idWZmZXIoKSAqLwogc3RhdGljIHVuc2lnbmVkIGludCBjb3B5X3RvX2JvdW5jZV9idWZmZXIoc3RydWN0IHNjYXR0ZXJsaXN0ICpvcmlnX3NnbCwKIAkJCQkJICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmJvdW5jZV9zZ2wsCkBAIC00NzcsMTAgKzI2NCwxMCBAQAogCQlzcmMgPSBzcmNfYWRkcjsKIAkJc3JjbGVuID0gb3JpZ19zZ2xbaV0ubGVuZ3RoOwogCi0JCS8qIEFTU0VSVChvcmlnX3NnbFtpXS5vZmZzZXQgKyBvcmlnX3NnbFtpXS5sZW5ndGggPD0gUEFHRV9TSVpFKTsgKi8KLQogCQlpZiAoYm91bmNlX2FkZHIgPT0gMCkKLQkJCWJvdW5jZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpa21hcF9hdG9taWMoc2dfcGFnZSgoJmJvdW5jZV9zZ2xbal0pKSwgS01fSVJRMCk7CisJCQlib3VuY2VfYWRkciA9CisJCQkodW5zaWduZWQgbG9uZylrbWFwX2F0b21pYyhzZ19wYWdlKCgmYm91bmNlX3NnbFtqXSkpLAorCQkJCQkJS01fSVJRMCk7CiAKIAkJd2hpbGUgKHNyY2xlbikgewogCQkJLyogYXNzdW1lIGJvdW5jZSBvZmZzZXQgYWx3YXlzID09IDAgKi8KQEAgLTUwMiw3ICsyODksMTAgQEAKIAogCQkJCS8qIGlmIHdlIG5lZWQgdG8gdXNlIGFub3RoZXIgYm91bmNlIGJ1ZmZlciAqLwogCQkJCWlmIChzcmNsZW4gfHwgaSAhPSBvcmlnX3NnbF9jb3VudCAtIDEpCi0JCQkJCWJvdW5jZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpa21hcF9hdG9taWMoc2dfcGFnZSgoJmJvdW5jZV9zZ2xbal0pKSwgS01fSVJRMCk7CisJCQkJCWJvdW5jZV9hZGRyID0KKwkJCQkJKHVuc2lnbmVkIGxvbmcpa21hcF9hdG9taWMoCisJCQkJCXNnX3BhZ2UoKCZib3VuY2Vfc2dsW2pdKSksIEtNX0lSUTApOworCiAJCQl9IGVsc2UgaWYgKHNyY2xlbiA9PSAwICYmIGkgPT0gb3JpZ19zZ2xfY291bnQgLSAxKSB7CiAJCQkJLyogdW5tYXAgdGhlIGxhc3QgYm91bmNlIHRoYXQgaXMgPCBQQUdFX1NJWkUgKi8KIAkJCQlrdW5tYXBfYXRvbWljKCh2b2lkICopYm91bmNlX2FkZHIsIEtNX0lSUTApOwpAQCAtNTE3LDY3ICszMDcsMTg1IEBACiAJcmV0dXJuIHRvdGFsX2NvcGllZDsKIH0KIAotLyogQXNzdW1lIHRoZSBvcmlnaW5hbCBzZ2wgaGFzIGVub3VnaCByb29tICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGNvcHlfZnJvbV9ib3VuY2VfYnVmZmVyKHN0cnVjdCBzY2F0dGVybGlzdCAqb3JpZ19zZ2wsCi0JCQkJCSAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmJvdW5jZV9zZ2wsCi0JCQkJCSAgICB1bnNpZ25lZCBpbnQgb3JpZ19zZ2xfY291bnQpCisKKy8qCisgKiBzdG9ydnNjX3JlbW92ZSAtIENhbGxiYWNrIHdoZW4gb3VyIGRldmljZSBpcyByZW1vdmVkCisgKi8KK3N0YXRpYyBpbnQgc3RvcnZzY19yZW1vdmUoc3RydWN0IGh2X2RldmljZSAqZGV2KQogewotCWludCBpOwotCWludCBqID0gMDsKLQl1bnNpZ25lZCBsb25nIHNyYywgZGVzdDsKLQl1bnNpZ25lZCBpbnQgc3JjbGVuLCBkZXN0bGVuLCBjb3B5bGVuOwotCXVuc2lnbmVkIGludCB0b3RhbF9jb3BpZWQgPSAwOwotCXVuc2lnbmVkIGxvbmcgYm91bmNlX2FkZHIgPSAwOwotCXVuc2lnbmVkIGxvbmcgZGVzdF9hZGRyID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoJmRldi0+ZGV2aWNlKTsKKwlzdHJ1Y3QgaHZfaG9zdF9kZXZpY2UgKmhvc3RfZGV2ID0KKwkJCShzdHJ1Y3QgaHZfaG9zdF9kZXZpY2UgKilob3N0LT5ob3N0ZGF0YTsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkvKgorCSAqIENhbGwgdG8gdGhlIHZzYyBkcml2ZXIgdG8gbGV0IGl0IGtub3cgdGhhdCB0aGUgZGV2aWNlIGlzIGJlaW5nCisJICogcmVtb3ZlZAorCSAqLworCXN0b3J2c2NfZGV2X3JlbW92ZShkZXYpOwogCi0JZm9yIChpID0gMDsgaSA8IG9yaWdfc2dsX2NvdW50OyBpKyspIHsKLQkJZGVzdF9hZGRyID0gKHVuc2lnbmVkIGxvbmcpa21hcF9hdG9taWMoc2dfcGFnZSgoJm9yaWdfc2dsW2ldKSksCi0JCQkJCUtNX0lSUTApICsgb3JpZ19zZ2xbaV0ub2Zmc2V0OwotCQlkZXN0ID0gZGVzdF9hZGRyOwotCQlkZXN0bGVuID0gb3JpZ19zZ2xbaV0ubGVuZ3RoOwotCQkvKiBBU1NFUlQob3JpZ19zZ2xbaV0ub2Zmc2V0ICsgb3JpZ19zZ2xbaV0ubGVuZ3RoIDw9IFBBR0VfU0laRSk7ICovCi0KLQkJaWYgKGJvdW5jZV9hZGRyID09IDApCi0JCQlib3VuY2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKWttYXBfYXRvbWljKHNnX3BhZ2UoKCZib3VuY2Vfc2dsW2pdKSksIEtNX0lSUTApOwotCi0JCXdoaWxlIChkZXN0bGVuKSB7Ci0JCQlzcmMgPSBib3VuY2VfYWRkciArIGJvdW5jZV9zZ2xbal0ub2Zmc2V0OwotCQkJc3JjbGVuID0gYm91bmNlX3NnbFtqXS5sZW5ndGggLSBib3VuY2Vfc2dsW2pdLm9mZnNldDsKLQotCQkJY29weWxlbiA9IG1pbihzcmNsZW4sIGRlc3RsZW4pOwotCQkJbWVtY3B5KCh2b2lkICopZGVzdCwgKHZvaWQgKilzcmMsIGNvcHlsZW4pOwotCi0JCQl0b3RhbF9jb3BpZWQgKz0gY29weWxlbjsKLQkJCWJvdW5jZV9zZ2xbal0ub2Zmc2V0ICs9IGNvcHlsZW47Ci0JCQlkZXN0bGVuIC09IGNvcHlsZW47Ci0JCQlkZXN0ICs9IGNvcHlsZW47Ci0KLQkJCWlmIChib3VuY2Vfc2dsW2pdLm9mZnNldCA9PSBib3VuY2Vfc2dsW2pdLmxlbmd0aCkgewotCQkJCS8qIGZ1bGwgKi8KLQkJCQlrdW5tYXBfYXRvbWljKCh2b2lkICopYm91bmNlX2FkZHIsIEtNX0lSUTApOwotCQkJCWorKzsKLQotCQkJCS8qIGlmIHdlIG5lZWQgdG8gdXNlIGFub3RoZXIgYm91bmNlIGJ1ZmZlciAqLwotCQkJCWlmIChkZXN0bGVuIHx8IGkgIT0gb3JpZ19zZ2xfY291bnQgLSAxKQotCQkJCQlib3VuY2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKWttYXBfYXRvbWljKHNnX3BhZ2UoKCZib3VuY2Vfc2dsW2pdKSksIEtNX0lSUTApOwotCQkJfSBlbHNlIGlmIChkZXN0bGVuID09IDAgJiYgaSA9PSBvcmlnX3NnbF9jb3VudCAtIDEpIHsKLQkJCQkvKiB1bm1hcCB0aGUgbGFzdCBib3VuY2UgdGhhdCBpcyA8IFBBR0VfU0laRSAqLwotCQkJCWt1bm1hcF9hdG9taWMoKHZvaWQgKilib3VuY2VfYWRkciwgS01fSVJRMCk7Ci0JCQl9Ci0JCX0KLQotCQlrdW5tYXBfYXRvbWljKCh2b2lkICopKGRlc3RfYWRkciAtIG9yaWdfc2dsW2ldLm9mZnNldCksCi0JCQkgICAgICBLTV9JUlEwKTsKKwlpZiAoaG9zdF9kZXYtPnJlcXVlc3RfcG9vbCkgeworCQlrbWVtX2NhY2hlX2Rlc3Ryb3koaG9zdF9kZXYtPnJlcXVlc3RfcG9vbCk7CisJCWhvc3RfZGV2LT5yZXF1ZXN0X3Bvb2wgPSBOVUxMOwogCX0KIAotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlEUFJJTlRfSU5GTyhTVE9SVlNDLCAicmVtb3ZpbmcgaG9zdCBhZGFwdGVyICglcCkuLi4iLCBob3N0KTsKKwlzY3NpX3JlbW92ZV9ob3N0KGhvc3QpOwogCi0JcmV0dXJuIHRvdGFsX2NvcGllZDsKKwlEUFJJTlRfSU5GTyhTVE9SVlNDLCAicmVsZWFzaW5nIGhvc3QgYWRhcHRlciAoJXApLi4uIiwgaG9zdCk7CisJc2NzaV9ob3N0X3B1dChob3N0KTsKKwlyZXR1cm4gMDsKIH0KIAorCitzdGF0aWMgaW50IHN0b3J2c2NfZ2V0X2NocyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHN0cnVjdCBibG9ja19kZXZpY2UgKiBiZGV2LAorCQkJICAgc2VjdG9yX3QgY2FwYWNpdHksIGludCAqaW5mbykKK3sKKwlzZWN0b3JfdCBuc2VjdCA9IGNhcGFjaXR5OworCXNlY3Rvcl90IGN5bGluZGVycyA9IG5zZWN0OworCWludCBoZWFkcywgc2VjdG9yc19wdDsKKworCS8qCisJICogV2UgYXJlIG1ha2luZyB1cCB0aGVzZSB2YWx1ZXM7IGxldCB1cyBrZWVwIGl0IHNpbXBsZS4KKwkgKi8KKwloZWFkcyA9IDB4ZmY7CisJc2VjdG9yc19wdCA9IDB4M2Y7ICAgICAgLyogU2VjdG9ycyBwZXIgdHJhY2sgKi8KKwlzZWN0b3JfZGl2KGN5bGluZGVycywgaGVhZHMgKiBzZWN0b3JzX3B0KTsKKwlpZiAoKHNlY3Rvcl90KShjeWxpbmRlcnMgKyAxKSAqIGhlYWRzICogc2VjdG9yc19wdCA8IG5zZWN0KQorCQljeWxpbmRlcnMgPSAweGZmZmY7CisKKwlpbmZvWzBdID0gaGVhZHM7CisJaW5mb1sxXSA9IHNlY3RvcnNfcHQ7CisJaW5mb1syXSA9IChpbnQpY3lsaW5kZXJzOworCisJRFBSSU5UX0lORk8oU1RPUlZTQ19EUlYsICJDSFMgKCVkLCAlZCwgJWQpIiwgKGludCljeWxpbmRlcnMsIGhlYWRzLAorCQkJc2VjdG9yc19wdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdG9ydnNjX2hvc3RfcmVzZXQoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBzdG9ydnNjX2RldmljZSAqc3Rvcl9kZXZpY2U7CisJc3RydWN0IGh2X3N0b3J2c2NfcmVxdWVzdCAqcmVxdWVzdDsKKwlzdHJ1Y3QgdnN0b3JfcGFja2V0ICp2c3Rvcl9wYWNrZXQ7CisJaW50IHJldCwgdDsKKworCURQUklOVF9JTkZPKFNUT1JWU0MsICJyZXNldHRpbmcgaG9zdCBhZGFwdGVyLi4uIik7CisKKwlzdG9yX2RldmljZSA9IGdldF9zdG9yX2RldmljZShkZXZpY2UpOworCWlmICghc3Rvcl9kZXZpY2UpCisJCXJldHVybiAtMTsKKworCXJlcXVlc3QgPSAmc3Rvcl9kZXZpY2UtPnJlc2V0X3JlcXVlc3Q7CisJdnN0b3JfcGFja2V0ID0gJnJlcXVlc3QtPnZzdG9yX3BhY2tldDsKKworCWluaXRfY29tcGxldGlvbigmcmVxdWVzdC0+d2FpdF9ldmVudCk7CisKKwl2c3Rvcl9wYWNrZXQtPm9wZXJhdGlvbiA9IFZTVE9SX09QRVJBVElPTl9SRVNFVF9CVVM7CisJdnN0b3JfcGFja2V0LT5mbGFncyA9IFJFUVVFU1RfQ09NUExFVElPTl9GTEFHOworCXZzdG9yX3BhY2tldC0+dm1fc3JiLnBhdGhfaWQgPSBzdG9yX2RldmljZS0+cGF0aF9pZDsKKworCXJldCA9IHZtYnVzX3NlbmRwYWNrZXQoZGV2aWNlLT5jaGFubmVsLCB2c3Rvcl9wYWNrZXQsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB2c3Rvcl9wYWNrZXQpLAorCQkJICAgICAgICh1bnNpZ25lZCBsb25nKSZzdG9yX2RldmljZS0+cmVzZXRfcmVxdWVzdCwKKwkJCSAgICAgICBWTV9QS1RfREFUQV9JTkJBTkQsCisJCQkgICAgICAgVk1CVVNfREFUQV9QQUNLRVRfRkxBR19DT01QTEVUSU9OX1JFUVVFU1RFRCk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIGNsZWFudXA7CisKKwl0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZyZXF1ZXN0LT53YWl0X2V2ZW50LCBIWik7CisJaWYgKHQgPT0gMCkgeworCQlyZXQgPSAtRVRJTUVET1VUOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJRFBSSU5UX0lORk8oU1RPUlZTQywgImhvc3QgYWRhcHRlciByZXNldCBjb21wbGV0ZWQiKTsKKworCS8qCisJICogQXQgdGhpcyBwb2ludCwgYWxsIG91dHN0YW5kaW5nIHJlcXVlc3RzIGluIHRoZSBhZGFwdGVyCisJICogc2hvdWxkIGhhdmUgYmVlbiBmbHVzaGVkIG91dCBhbmQgcmV0dXJuIHRvIHVzCisJICovCisKK2NsZWFudXA6CisJcHV0X3N0b3JfZGV2aWNlKGRldmljZSk7CisJcmV0dXJuIHJldDsKK30KKworCisvKgorICogc3RvcnZzY19ob3N0X3Jlc2V0X2hhbmRsZXIgLSBSZXNldCB0aGUgc2NzaSBIQkEKKyAqLworc3RhdGljIGludCBzdG9ydnNjX2hvc3RfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY21uZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBodl9ob3N0X2RldmljZSAqaG9zdF9kZXYgPQorCQkoc3RydWN0IGh2X2hvc3RfZGV2aWNlICopc2NtbmQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7CisJc3RydWN0IGh2X2RldmljZSAqZGV2ID0gaG9zdF9kZXYtPmRldjsKKworCURQUklOVF9JTkZPKFNUT1JWU0NfRFJWLCAic2RldiAoJXApIGRldiBvYmogKCVwKSAtIGhvc3QgcmVzZXR0aW5nLi4uIiwKKwkJICAgIHNjbW5kLT5kZXZpY2UsIGRldik7CisKKwkvKiBJbnZva2VzIHRoZSB2c2MgdG8gcmVzZXQgdGhlIGhvc3QvYnVzICovCisJcmV0ID0gc3RvcnZzY19ob3N0X3Jlc2V0KGRldik7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJRFBSSU5UX0lORk8oU1RPUlZTQ19EUlYsICJzZGV2ICglcCkgZGV2IG9iaiAoJXApIC0gaG9zdCByZXNldGVkIiwKKwkJICAgIHNjbW5kLT5kZXZpY2UsIGRldik7CisKKwlyZXR1cm4gcmV0OworfQorCisKKy8qCisgKiBzdG9ydnNjX2NvbW1tYW5kX2NvbXBsZXRpb24gLSBDb21tYW5kIGNvbXBsZXRpb24gcHJvY2Vzc2luZworICovCitzdGF0aWMgdm9pZCBzdG9ydnNjX2NvbW1tYW5kX2NvbXBsZXRpb24oc3RydWN0IGh2X3N0b3J2c2NfcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlzdHJ1Y3Qgc3RvcnZzY19jbWRfcmVxdWVzdCAqY21kX3JlcXVlc3QgPQorCQkoc3RydWN0IHN0b3J2c2NfY21kX3JlcXVlc3QgKilyZXF1ZXN0LT5jb250ZXh0OworCXN0cnVjdCBzY3NpX2NtbmQgKnNjbW5kID0gY21kX3JlcXVlc3QtPmNtZDsKKwlzdHJ1Y3QgaHZfaG9zdF9kZXZpY2UgKmhvc3RfZGV2ID0KKwkJKHN0cnVjdCBodl9ob3N0X2RldmljZSAqKXNjbW5kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOworCXZvaWQgKCpzY3NpX2RvbmVfZm4pKHN0cnVjdCBzY3NpX2NtbmQgKik7CisJc3RydWN0IHNjc2lfc2Vuc2VfaGRyIHNlbnNlX2hkcjsKKwlzdHJ1Y3Qgdm1zY3NpX3JlcXVlc3QgKnZtX3NyYjsKKworCWlmIChjbWRfcmVxdWVzdC0+Ym91bmNlX3NnbF9jb3VudCkgeworCisJCS8qIEZJWE1FOiBXZSBjYW4gb3B0aW1pemUgb24gd3JpdGVzIGJ5IGp1c3Qgc2tpcHBpbmcgdGhpcyAqLworCQljb3B5X2Zyb21fYm91bmNlX2J1ZmZlcihzY3NpX3NnbGlzdChzY21uZCksCisJCQkJCWNtZF9yZXF1ZXN0LT5ib3VuY2Vfc2dsLAorCQkJCQlzY3NpX3NnX2NvdW50KHNjbW5kKSk7CisJCWRlc3Ryb3lfYm91bmNlX2J1ZmZlcihjbWRfcmVxdWVzdC0+Ym91bmNlX3NnbCwKKwkJCQkgICAgICBjbWRfcmVxdWVzdC0+Ym91bmNlX3NnbF9jb3VudCk7CisJfQorCisJdm1fc3JiID0gJnJlcXVlc3QtPnZzdG9yX3BhY2tldC52bV9zcmI7CisJc2NtbmQtPnJlc3VsdCA9IHZtX3NyYi0+c2NzaV9zdGF0dXM7CisKKwlpZiAoc2NtbmQtPnJlc3VsdCkgeworCQlpZiAoc2NzaV9ub3JtYWxpemVfc2Vuc2Uoc2NtbmQtPnNlbnNlX2J1ZmZlciwKKwkJCQlTQ1NJX1NFTlNFX0JVRkZFUlNJWkUsICZzZW5zZV9oZHIpKQorCQkJc2NzaV9wcmludF9zZW5zZV9oZHIoInN0b3J2c2MiLCAmc2Vuc2VfaGRyKTsKKwl9CisKKwlzY3NpX3NldF9yZXNpZChzY21uZCwKKwkJcmVxdWVzdC0+ZGF0YV9idWZmZXIubGVuIC0KKwkJdm1fc3JiLT5kYXRhX3RyYW5zZmVyX2xlbmd0aCk7CisKKwlzY3NpX2RvbmVfZm4gPSBzY21uZC0+c2NzaV9kb25lOworCisJc2NtbmQtPmhvc3Rfc2NyaWJibGUgPSBOVUxMOworCXNjbW5kLT5zY3NpX2RvbmUgPSBOVUxMOworCisJLyogISFETyBOT1QgTU9ESUZZIHRoZSBzY21uZCBhZnRlciB0aGlzIGNhbGwgKi8KKwlzY3NpX2RvbmVfZm4oc2NtbmQpOworCisJa21lbV9jYWNoZV9mcmVlKGhvc3RfZGV2LT5yZXF1ZXN0X3Bvb2wsIGNtZF9yZXF1ZXN0KTsKK30KKworCiAvKgogICogc3RvcnZzY19xdWV1ZWNvbW1hbmQgLSBJbml0aWF0ZSBjb21tYW5kIHByb2Nlc3NpbmcKICAqLwpAQCAtNTg1LDI4ICs0OTMsMjAgQEAKIAkJCQl2b2lkICgqZG9uZSkoc3RydWN0IHNjc2lfY21uZCAqKSkKIHsKIAlpbnQgcmV0OwotCXN0cnVjdCBob3N0X2RldmljZV9jb250ZXh0ICpob3N0X2RldmljZV9jdHggPQotCQkoc3RydWN0IGhvc3RfZGV2aWNlX2NvbnRleHQgKilzY21uZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKLQlzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2VfY3R4ID0gaG9zdF9kZXZpY2VfY3R4LT5kZXZpY2VfY3R4OwotCXN0cnVjdCBodl9kcml2ZXIgKmRydiA9Ci0JCWRydl90b19odl9kcnYoZGV2aWNlX2N0eC0+ZGV2aWNlLmRyaXZlcik7Ci0Jc3RydWN0IHN0b3J2c2NfZHJpdmVyX29iamVjdCAqc3RvcnZzY19kcnZfb2JqID0gZHJ2LT5wcml2OworCXN0cnVjdCBodl9ob3N0X2RldmljZSAqaG9zdF9kZXYgPQorCQkoc3RydWN0IGh2X2hvc3RfZGV2aWNlICopc2NtbmQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7CisJc3RydWN0IGh2X2RldmljZSAqZGV2ID0gaG9zdF9kZXYtPmRldjsKIAlzdHJ1Y3QgaHZfc3RvcnZzY19yZXF1ZXN0ICpyZXF1ZXN0OwogCXN0cnVjdCBzdG9ydnNjX2NtZF9yZXF1ZXN0ICpjbWRfcmVxdWVzdDsKIAl1bnNpZ25lZCBpbnQgcmVxdWVzdF9zaXplID0gMDsKIAlpbnQgaTsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbDsKIAl1bnNpZ25lZCBpbnQgc2dfY291bnQgPSAwOworCXN0cnVjdCB2bXNjc2lfcmVxdWVzdCAqdm1fc3JiOwogCi0JRFBSSU5UX0RCRyhTVE9SVlNDX0RSViwgInNjbW5kICVwIGRpciAlZCwgdXNlX3NnICVkIGJ1ZiAlcCBsZW4gJWQgIgotCQkgICAicXVldWUgZGVwdGggJWQgdGFnZ2VkICVkIiwgc2NtbmQsIHNjbW5kLT5zY19kYXRhX2RpcmVjdGlvbiwKLQkJICAgc2NzaV9zZ19jb3VudChzY21uZCksIHNjc2lfc2dsaXN0KHNjbW5kKSwKLQkJICAgc2NzaV9idWZmbGVuKHNjbW5kKSwgc2NtbmQtPmRldmljZS0+cXVldWVfZGVwdGgsCi0JCSAgIHNjbW5kLT5kZXZpY2UtPnRhZ2dlZF9zdXBwb3J0ZWQpOwogCiAJLyogSWYgcmV0cnlpbmcsIG5vIG5lZWQgdG8gcHJlcCB0aGUgY21kICovCiAJaWYgKHNjbW5kLT5ob3N0X3NjcmliYmxlKSB7Ci0JCS8qIEFTU0VSVChzY21uZC0+c2NzaV9kb25lICE9IE5VTEwpOyAqLwogCiAJCWNtZF9yZXF1ZXN0ID0KIAkJCShzdHJ1Y3Qgc3RvcnZzY19jbWRfcmVxdWVzdCAqKXNjbW5kLT5ob3N0X3NjcmliYmxlOwpAQCAtNjE2LDE4ICs1MTYsMTMgQEAKIAkJZ290byByZXRyeV9yZXF1ZXN0OwogCX0KIAotCS8qIEFTU0VSVChzY21uZC0+c2NzaV9kb25lID09IE5VTEwpOyAqLwotCS8qIEFTU0VSVChzY21uZC0+aG9zdF9zY3JpYmJsZSA9PSBOVUxMKTsgKi8KLQogCXNjbW5kLT5zY3NpX2RvbmUgPSBkb25lOwogCiAJcmVxdWVzdF9zaXplID0gc2l6ZW9mKHN0cnVjdCBzdG9ydnNjX2NtZF9yZXF1ZXN0KTsKIAotCWNtZF9yZXF1ZXN0ID0ga21lbV9jYWNoZV9hbGxvYyhob3N0X2RldmljZV9jdHgtPnJlcXVlc3RfcG9vbCwKKwljbWRfcmVxdWVzdCA9IGttZW1fY2FjaGVfemFsbG9jKGhvc3RfZGV2LT5yZXF1ZXN0X3Bvb2wsCiAJCQkJICAgICAgIEdGUF9BVE9NSUMpOwogCWlmICghY21kX3JlcXVlc3QpIHsKLQkJRFBSSU5UX0VSUihTVE9SVlNDX0RSViwgInNjbW5kICglcCkgLSB1bmFibGUgdG8gYWxsb2NhdGUgIgotCQkJICAgInN0b3J2c2NfY21kX3JlcXVlc3QuLi5tYXJraW5nIHF1ZXVlIGJ1c3kiLCBzY21uZCk7CiAJCXNjbW5kLT5zY3NpX2RvbmUgPSBOVUxMOwogCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZOwogCX0KQEAgLTY0MCw0MCArNTM1LDM1IEBACiAJc2NtbmQtPmhvc3Rfc2NyaWJibGUgPSAodW5zaWduZWQgY2hhciAqKWNtZF9yZXF1ZXN0OwogCiAJcmVxdWVzdCA9ICZjbWRfcmVxdWVzdC0+cmVxdWVzdDsKKwl2bV9zcmIgPSAmcmVxdWVzdC0+dnN0b3JfcGFja2V0LnZtX3NyYjsKIAotCXJlcXVlc3QtPmV4dGVuc2lvbiA9Ci0JCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKWNtZF9yZXF1ZXN0ICsgcmVxdWVzdF9zaXplKTsKLQlEUFJJTlRfREJHKFNUT1JWU0NfRFJWLCAicmVxICVwIHNpemUgJWQgZXh0ICVkIiwgcmVxdWVzdCwgcmVxdWVzdF9zaXplLAotCQkgICBzdG9ydnNjX2Rydl9vYmotPnJlcXVlc3RfZXh0X3NpemUpOwogCiAJLyogQnVpbGQgdGhlIFNSQiAqLwogCXN3aXRjaCAoc2NtbmQtPnNjX2RhdGFfZGlyZWN0aW9uKSB7CiAJY2FzZSBETUFfVE9fREVWSUNFOgotCQlyZXF1ZXN0LT50eXBlID0gV1JJVEVfVFlQRTsKKwkJdm1fc3JiLT5kYXRhX2luID0gV1JJVEVfVFlQRTsKIAkJYnJlYWs7CiAJY2FzZSBETUFfRlJPTV9ERVZJQ0U6Ci0JCXJlcXVlc3QtPnR5cGUgPSBSRUFEX1RZUEU7CisJCXZtX3NyYi0+ZGF0YV9pbiA9IFJFQURfVFlQRTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmVxdWVzdC0+dHlwZSA9IFVOS05PV05fVFlQRTsKKwkJdm1fc3JiLT5kYXRhX2luID0gVU5LTk9XTl9UWVBFOwogCQlicmVhazsKIAl9CiAKIAlyZXF1ZXN0LT5vbl9pb19jb21wbGV0aW9uID0gc3RvcnZzY19jb21tbWFuZF9jb21wbGV0aW9uOwogCXJlcXVlc3QtPmNvbnRleHQgPSBjbWRfcmVxdWVzdDsvKiBzY21uZDsgKi8KIAotCS8qIHJlcXVlc3QtPlBvcnRJZCA9IHNjbW5kLT5kZXZpY2UtPmNoYW5uZWw7ICovCi0JcmVxdWVzdC0+aG9zdCA9IGhvc3RfZGV2aWNlX2N0eC0+cG9ydDsKLQlyZXF1ZXN0LT5idXMgPSBzY21uZC0+ZGV2aWNlLT5jaGFubmVsOwotCXJlcXVlc3QtPnRhcmdldF9pZCA9IHNjbW5kLT5kZXZpY2UtPmlkOwotCXJlcXVlc3QtPmx1bl9pZCA9IHNjbW5kLT5kZXZpY2UtPmx1bjsKKwl2bV9zcmItPnBvcnRfbnVtYmVyID0gaG9zdF9kZXYtPnBvcnQ7CisJdm1fc3JiLT5wYXRoX2lkID0gc2NtbmQtPmRldmljZS0+Y2hhbm5lbDsKKwl2bV9zcmItPnRhcmdldF9pZCA9IHNjbW5kLT5kZXZpY2UtPmlkOworCXZtX3NyYi0+bHVuID0gc2NtbmQtPmRldmljZS0+bHVuOwogCi0JLyogQVNTRVJUKHNjbW5kLT5jbWRfbGVuIDw9IDE2KTsgKi8KLQlyZXF1ZXN0LT5jZGJfbGVuID0gc2NtbmQtPmNtZF9sZW47Ci0JcmVxdWVzdC0+Y2RiID0gc2NtbmQtPmNtbmQ7CisJdm1fc3JiLT5jZGJfbGVuZ3RoID0gc2NtbmQtPmNtZF9sZW47CisKKwltZW1jcHkodm1fc3JiLT5jZGIsIHNjbW5kLT5jbW5kLCB2bV9zcmItPmNkYl9sZW5ndGgpOwogCiAJcmVxdWVzdC0+c2Vuc2VfYnVmZmVyID0gc2NtbmQtPnNlbnNlX2J1ZmZlcjsKLQlyZXF1ZXN0LT5zZW5zZV9idWZmZXJfc2l6ZSA9IFNDU0lfU0VOU0VfQlVGRkVSU0laRTsKIAogCiAJcmVxdWVzdC0+ZGF0YV9idWZmZXIubGVuID0gc2NzaV9idWZmbGVuKHNjbW5kKTsKQEAgLTY4MywyMCArNTczLDEzIEBACiAKIAkJLyogY2hlY2sgaWYgd2UgbmVlZCB0byBib3VuY2UgdGhlIHNnbCAqLwogCQlpZiAoZG9fYm91bmNlX2J1ZmZlcihzZ2wsIHNjc2lfc2dfY291bnQoc2NtbmQpKSAhPSAtMSkgewotCQkJRFBSSU5UX0lORk8oU1RPUlZTQ19EUlYsCi0JCQkJICAgICJuZWVkIHRvIGJvdW5jZSBidWZmZXIgZm9yIHRoaXMgc2NtbmQgJXAiLAotCQkJCSAgICBzY21uZCk7CiAJCQljbWRfcmVxdWVzdC0+Ym91bmNlX3NnbCA9CiAJCQkJY3JlYXRlX2JvdW5jZV9idWZmZXIoc2dsLCBzY3NpX3NnX2NvdW50KHNjbW5kKSwKIAkJCQkJCSAgICAgc2NzaV9idWZmbGVuKHNjbW5kKSk7CiAJCQlpZiAoIWNtZF9yZXF1ZXN0LT5ib3VuY2Vfc2dsKSB7Ci0JCQkJRFBSSU5UX0VSUihTVE9SVlNDX0RSViwKLQkJCQkJICAgInVuYWJsZSB0byBjcmVhdGUgYm91bmNlIGJ1ZmZlciBmb3IgIgotCQkJCQkgICAidGhpcyBzY21uZCAlcCIsIHNjbW5kKTsKLQogCQkJCXNjbW5kLT5zY3NpX2RvbmUgPSBOVUxMOwogCQkJCXNjbW5kLT5ob3N0X3NjcmliYmxlID0gTlVMTDsKLQkJCQlrbWVtX2NhY2hlX2ZyZWUoaG9zdF9kZXZpY2VfY3R4LT5yZXF1ZXN0X3Bvb2wsCisJCQkJa21lbV9jYWNoZV9mcmVlKGhvc3RfZGV2LT5yZXF1ZXN0X3Bvb2wsCiAJCQkJCQljbWRfcmVxdWVzdCk7CiAKIAkJCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKQEAgLTcxOSwxNCArNjAyLDExIEBACiAKIAkJcmVxdWVzdC0+ZGF0YV9idWZmZXIub2Zmc2V0ID0gc2dsWzBdLm9mZnNldDsKIAotCQlmb3IgKGkgPSAwOyBpIDwgc2dfY291bnQ7IGkrKykgewotCQkJRFBSSU5UX0RCRyhTVE9SVlNDX0RSViwgInNnbFslZF0gbGVuICVkIG9mZnNldCAlZFxuIiwKLQkJCQkgICBpLCBzZ2xbaV0ubGVuZ3RoLCBzZ2xbaV0ub2Zmc2V0KTsKKwkJZm9yIChpID0gMDsgaSA8IHNnX2NvdW50OyBpKyspCiAJCQlyZXF1ZXN0LT5kYXRhX2J1ZmZlci5wZm5fYXJyYXlbaV0gPQogCQkJCXBhZ2VfdG9fcGZuKHNnX3BhZ2UoKCZzZ2xbaV0pKSk7Ci0JCX0KKwogCX0gZWxzZSBpZiAoc2NzaV9zZ2xpc3Qoc2NtbmQpKSB7Ci0JCS8qIEFTU0VSVChzY3NpX2J1ZmZsZW4oc2NtbmQpIDw9IFBBR0VfU0laRSk7ICovCiAJCXJlcXVlc3QtPmRhdGFfYnVmZmVyLm9mZnNldCA9CiAJCQl2aXJ0X3RvX3BoeXMoc2NzaV9zZ2xpc3Qoc2NtbmQpKSAmIChQQUdFX1NJWkUtMSk7CiAJCXJlcXVlc3QtPmRhdGFfYnVmZmVyLnBmbl9hcnJheVswXSA9CkBAIC03MzUsMTMgKzYxNSwxMCBAQAogCiByZXRyeV9yZXF1ZXN0OgogCS8qIEludm9rZXMgdGhlIHZzYyB0byBzdGFydCBhbiBJTyAqLwotCXJldCA9IHN0b3J2c2NfZHJ2X29iai0+b25faW9fcmVxdWVzdChkZXZpY2VfY3R4LAotCQkJCQkgICAmY21kX3JlcXVlc3QtPnJlcXVlc3QpOworCXJldCA9IHN0b3J2c2NfZG9faW8oZGV2LCAmY21kX3JlcXVlc3QtPnJlcXVlc3QpOworCiAJaWYgKHJldCA9PSAtMSkgewogCQkvKiBubyBtb3JlIHNwYWNlICovCi0JCURQUklOVF9FUlIoU1RPUlZTQ19EUlYsCi0JCQkgICAic2NtbmQgKCVwKSAtIHF1ZXVlIEZVTEwuLi5tYXJraW5nIHF1ZXVlIGJ1c3kiLAotCQkJICAgc2NtbmQpOwogCiAJCWlmIChjbWRfcmVxdWVzdC0+Ym91bmNlX3NnbF9jb3VudCkgewogCQkJLyoKQEAgLTc1NSw3ICs2MzIsNyBAQAogCQkJCQkgICAgICBjbWRfcmVxdWVzdC0+Ym91bmNlX3NnbF9jb3VudCk7CiAJCX0KIAotCQlrbWVtX2NhY2hlX2ZyZWUoaG9zdF9kZXZpY2VfY3R4LT5yZXF1ZXN0X3Bvb2wsIGNtZF9yZXF1ZXN0KTsKKwkJa21lbV9jYWNoZV9mcmVlKGhvc3RfZGV2LT5yZXF1ZXN0X3Bvb2wsIGNtZF9yZXF1ZXN0KTsKIAogCQlzY21uZC0+c2NzaV9kb25lID0gTlVMTDsKIAkJc2NtbmQtPmhvc3Rfc2NyaWJibGUgPSBOVUxMOwpAQCAtNzY4LDE1NCArNjQ1LDE1NiBAQAogCiBzdGF0aWMgREVGX1NDU0lfUUNNRChzdG9ydnNjX3F1ZXVlY29tbWFuZCkKIAotc3RhdGljIGludCBzdG9ydnNjX21lcmdlX2J2ZWMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCi0JCQkgICAgICBzdHJ1Y3QgYnZlY19tZXJnZV9kYXRhICpibWQsIHN0cnVjdCBiaW9fdmVjICpidmVjKQotewotCS8qIGNoZWNraW5nIGRvbmUgYnkgY2FsbGVyLiAqLwotCXJldHVybiBidmVjLT5idl9sZW47Ci19CiAKLS8qCi0gKiBzdG9ydnNjX2RldmljZV9jb25maWd1cmUgLSBDb25maWd1cmUgdGhlIHNwZWNpZmllZCBzY3NpIGRldmljZQotICovCi1zdGF0aWMgaW50IHN0b3J2c2NfZGV2aWNlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldmljZSkKLXsKLQlEUFJJTlRfREJHKFNUT1JWU0NfRFJWLCAic2RldiAoJXApIC0gc2V0dGluZyBkZXZpY2UgZmxhZyB0byAlZCIsCi0JCSAgIHNkZXZpY2UsIEJMSVNUX1NQQVJTRUxVTik7CisvKiBTY3NpIGRyaXZlciAqLworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgc2NzaV9kcml2ZXIgPSB7CisJLm1vZHVsZQk9CQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJInN0b3J2c2NfaG9zdF90IiwKKwkuYmlvc19wYXJhbSA9CQlzdG9ydnNjX2dldF9jaHMsCisJLnF1ZXVlY29tbWFuZCA9CQlzdG9ydnNjX3F1ZXVlY29tbWFuZCwKKwkuZWhfaG9zdF9yZXNldF9oYW5kbGVyID0Jc3RvcnZzY19ob3N0X3Jlc2V0X2hhbmRsZXIsCisJLnNsYXZlX2FsbG9jID0JCXN0b3J2c2NfZGV2aWNlX2FsbG9jLAorCS5zbGF2ZV9jb25maWd1cmUgPQlzdG9ydnNjX2RldmljZV9jb25maWd1cmUsCisJLmNtZF9wZXJfbHVuID0JCTEsCisJLyogNjQgbWF4X3F1ZXVlICogMSB0YXJnZXQgKi8KKwkuY2FuX3F1ZXVlID0JCVNUT1JWU0NfTUFYX0lPX1JFUVVFU1RTKlNUT1JWU0NfTUFYX1RBUkdFVFMsCisJLnRoaXNfaWQgPQkJLTEsCisJLyogbm8gdXNlIHNldHRpbmcgdG8gMCBzaW5jZSBsbF9ibGtfcncgcmVzZXQgaXQgdG8gMSAqLworCS8qIGN1cnJlbnRseSAzMiAqLworCS5zZ190YWJsZXNpemUgPQkJTUFYX01VTFRJUEFHRV9CVUZGRVJfQ09VTlQsCiAJLyoKLQkgKiBUaGlzIGVuYWJsZXMgbHVucyB0byBiZSBsb2NhdGVkIHNwYXJzZWx5LiBPdGhlcndpc2UsIHdlIG1heSBub3QKLQkgKiBkaXNjb3ZlcmVkIHRoZW0uCisJICogRU5BQkxFX0NMVVNURVJJTkcgYWxsb3dzIG11dGlwbGUgcGh5c2ljYWxseSBjb250aWcgYmlvX3ZlY3MgdG8gbWVyZ2UKKwkgKiBpbnRvIDEgc2cgZWxlbWVudC4gSWYgc2V0LCB3ZSBtdXN0IGxpbWl0IHRoZSBtYXhfc2VnbWVudF9zaXplIHRvCisJICogUEFHRV9TSVpFLCBvdGhlcndpc2Ugd2UgbWF5IGdldCAxIHNnIGVsZW1lbnQgdGhhdCByZXByZXNlbnRzCisJICogbXVsdGlwbGUKIAkgKi8KLQlzZGV2aWNlLT5zZGV2X2JmbGFncyB8PSBCTElTVF9TUEFSU0VMVU4gfCBCTElTVF9MQVJHRUxVTjsKLQlyZXR1cm4gMDsKLX0KKwkvKiBwaHlzaWNhbGx5IGNvbnRpZyBwZm5zIChpZSBzZ1t4XS5sZW5ndGggPiBQQUdFX1NJWkUpLiAqLworCS51c2VfY2x1c3RlcmluZyA9CUVOQUJMRV9DTFVTVEVSSU5HLAorCS8qIE1ha2Ugc3VyZSB3ZSBkb250IGdldCBhIHNnIHNlZ21lbnQgY3Jvc3NlcyBhIHBhZ2UgYm91bmRhcnkgKi8KKwkuZG1hX2JvdW5kYXJ5ID0JCVBBR0VfU0laRS0xLAorfTsKIAotc3RhdGljIGludCBzdG9ydnNjX2RldmljZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2aWNlKQotewotCURQUklOVF9JTkZPKFNUT1JWU0NfRFJWLCAic2RldiAoJXApIC0gY3VyciBxdWV1ZSBkZXB0aCAlZCIsIHNkZXZpY2UsCi0JCSAgICBzZGV2aWNlLT5xdWV1ZV9kZXB0aCk7Ci0KLQlEUFJJTlRfSU5GTyhTVE9SVlNDX0RSViwgInNkZXYgKCVwKSAtIHNldHRpbmcgcXVldWUgZGVwdGggdG8gJWQiLAotCQkgICAgc2RldmljZSwgU1RPUlZTQ19NQVhfSU9fUkVRVUVTVFMpOwotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXZpY2UsIE1TR19TSU1QTEVfVEFHLAotCQkJCVNUT1JWU0NfTUFYX0lPX1JFUVVFU1RTKTsKLQotCURQUklOVF9JTkZPKFNUT1JWU0NfRFJWLCAic2RldiAoJXApIC0gc2V0dGluZyBtYXggc2VnbWVudCBzaXplIHRvICVsZCIsCi0JCSAgICBzZGV2aWNlLCBQQUdFX1NJWkUpOwotCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHNkZXZpY2UtPnJlcXVlc3RfcXVldWUsIFBBR0VfU0laRSk7Ci0KLQlEUFJJTlRfSU5GTyhTVE9SVlNDX0RSViwgInNkZXYgKCVwKSAtIGFkZGluZyBtZXJnZSBiaW8gdmVjIHJvdXRpbmUiLAotCQkgICAgc2RldmljZSk7Ci0JYmxrX3F1ZXVlX21lcmdlX2J2ZWMoc2RldmljZS0+cmVxdWVzdF9xdWV1ZSwgc3RvcnZzY19tZXJnZV9idmVjKTsKLQotCWJsa19xdWV1ZV9ib3VuY2VfbGltaXQoc2RldmljZS0+cmVxdWVzdF9xdWV1ZSwgQkxLX0JPVU5DRV9BTlkpOwotCS8qIHNkZXZpY2UtPnRpbWVvdXQgPSAoMjAwMCAqIEhaKTsvLyg3NSAqIEhaKTsgKi8KLQotCXJldHVybiAwOwotfQogCiAvKgotICogc3RvcnZzY19ob3N0X3Jlc2V0X2hhbmRsZXIgLSBSZXNldCB0aGUgc2NzaSBIQkEKKyAqIHN0b3J2c2NfcHJvYmUgLSBBZGQgYSBuZXcgZGV2aWNlIGZvciB0aGlzIGRyaXZlcgogICovCi1zdGF0aWMgaW50IHN0b3J2c2NfaG9zdF9yZXNldF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKnNjbW5kKQorCitzdGF0aWMgaW50IHN0b3J2c2NfcHJvYmUoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlKQogewogCWludCByZXQ7Ci0Jc3RydWN0IGhvc3RfZGV2aWNlX2NvbnRleHQgKmhvc3RfZGV2aWNlX2N0eCA9Ci0JCShzdHJ1Y3QgaG9zdF9kZXZpY2VfY29udGV4dCAqKXNjbW5kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwotCXN0cnVjdCBodl9kZXZpY2UgKmRldmljZV9jdHggPSBob3N0X2RldmljZV9jdHgtPmRldmljZV9jdHg7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKKwlzdHJ1Y3QgaHZfaG9zdF9kZXZpY2UgKmhvc3RfZGV2OworCXN0cnVjdCBzdG9ydnNjX2RldmljZV9pbmZvIGRldmljZV9pbmZvOwogCi0JRFBSSU5UX0lORk8oU1RPUlZTQ19EUlYsICJzZGV2ICglcCkgZGV2IG9iaiAoJXApIC0gaG9zdCByZXNldHRpbmcuLi4iLAotCQkgICAgc2NtbmQtPmRldmljZSwgZGV2aWNlX2N0eCk7CisJaG9zdCA9IHNjc2lfaG9zdF9hbGxvYygmc2NzaV9kcml2ZXIsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBodl9ob3N0X2RldmljZSkpOworCWlmICghaG9zdCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKLQkvKiBJbnZva2VzIHRoZSB2c2MgdG8gcmVzZXQgdGhlIGhvc3QvYnVzICovCi0JcmV0ID0gc3Rvcl92c2Nfb25faG9zdF9yZXNldChkZXZpY2VfY3R4KTsKLQlpZiAocmV0ICE9IDApCi0JCXJldHVybiByZXQ7CisJZGV2X3NldF9kcnZkYXRhKCZkZXZpY2UtPmRldmljZSwgaG9zdCk7CiAKLQlEUFJJTlRfSU5GTyhTVE9SVlNDX0RSViwgInNkZXYgKCVwKSBkZXYgb2JqICglcCkgLSBob3N0IHJlc2V0ZWQiLAotCQkgICAgc2NtbmQtPmRldmljZSwgZGV2aWNlX2N0eCk7CisJaG9zdF9kZXYgPSAoc3RydWN0IGh2X2hvc3RfZGV2aWNlICopaG9zdC0+aG9zdGRhdGE7CisJbWVtc2V0KGhvc3RfZGV2LCAwLCBzaXplb2Yoc3RydWN0IGh2X2hvc3RfZGV2aWNlKSk7CisKKwlob3N0X2Rldi0+cG9ydCA9IGhvc3QtPmhvc3Rfbm87CisJaG9zdF9kZXYtPmRldiA9IGRldmljZTsKKworCWhvc3RfZGV2LT5yZXF1ZXN0X3Bvb2wgPQorCQkJCWttZW1fY2FjaGVfY3JlYXRlKGRldl9uYW1lKCZkZXZpY2UtPmRldmljZSksCisJCQkJCXNpemVvZihzdHJ1Y3Qgc3RvcnZzY19jbWRfcmVxdWVzdCksIDAsCisJCQkJCVNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7CisKKwlpZiAoIWhvc3RfZGV2LT5yZXF1ZXN0X3Bvb2wpIHsKKwkJc2NzaV9ob3N0X3B1dChob3N0KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGV2aWNlX2luZm8ucG9ydF9udW1iZXIgPSBob3N0LT5ob3N0X25vOworCWRldmljZV9pbmZvLnJpbmdfYnVmZmVyX3NpemUgID0gc3RvcnZzY19yaW5nYnVmZmVyX3NpemU7CisJLyogQ2FsbCB0byB0aGUgdnNjIGRyaXZlciB0byBhZGQgdGhlIGRldmljZSAqLworCXJldCA9IHN0b3J2c2NfZGV2X2FkZChkZXZpY2UsICh2b2lkICopJmRldmljZV9pbmZvKTsKKworCWlmIChyZXQgIT0gMCkgeworCQlrbWVtX2NhY2hlX2Rlc3Ryb3koaG9zdF9kZXYtPnJlcXVlc3RfcG9vbCk7CisJCXNjc2lfaG9zdF9wdXQoaG9zdCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlob3N0X2Rldi0+cGF0aCA9IGRldmljZV9pbmZvLnBhdGhfaWQ7CisJaG9zdF9kZXYtPnRhcmdldCA9IGRldmljZV9pbmZvLnRhcmdldF9pZDsKKworCS8qIG1heCAjIG9mIGRldmljZXMgcGVyIHRhcmdldCAqLworCWhvc3QtPm1heF9sdW4gPSBTVE9SVlNDX01BWF9MVU5TX1BFUl9UQVJHRVQ7CisJLyogbWF4ICMgb2YgdGFyZ2V0cyBwZXIgY2hhbm5lbCAqLworCWhvc3QtPm1heF9pZCA9IFNUT1JWU0NfTUFYX1RBUkdFVFM7CisJLyogbWF4ICMgb2YgY2hhbm5lbHMgKi8KKwlob3N0LT5tYXhfY2hhbm5lbCA9IFNUT1JWU0NfTUFYX0NIQU5ORUxTIC0gMTsKKworCS8qIFJlZ2lzdGVyIHRoZSBIQkEgYW5kIHN0YXJ0IHRoZSBzY3NpIGJ1cyBzY2FuICovCisJcmV0ID0gc2NzaV9hZGRfaG9zdChob3N0LCAmZGV2aWNlLT5kZXZpY2UpOworCWlmIChyZXQgIT0gMCkgeworCisJCXN0b3J2c2NfZGV2X3JlbW92ZShkZXZpY2UpOworCisJCWttZW1fY2FjaGVfZGVzdHJveShob3N0X2Rldi0+cmVxdWVzdF9wb29sKTsKKwkJc2NzaV9ob3N0X3B1dChob3N0KTsKKwkJcmV0dXJuIC0xOworCX0KKworCXNjc2lfc2Nhbl9ob3N0KGhvc3QpOworCXJldHVybiByZXQ7Cit9CisKKy8qIFRoZSBvbmUgYW5kIG9ubHkgb25lICovCisKK3N0YXRpYyBzdHJ1Y3QgaHZfZHJpdmVyIHN0b3J2c2NfZHJ2ID0geworCS5wcm9iZSA9IHN0b3J2c2NfcHJvYmUsCisJLnJlbW92ZSA9IHN0b3J2c2NfcmVtb3ZlLAorfTsKKworCisvKgorICogc3RvcnZzY19kcnZfaW5pdCAtIFN0b3JWc2MgZHJpdmVyIGluaXRpYWxpemF0aW9uLgorICovCitzdGF0aWMgaW50IHN0b3J2c2NfZHJ2X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBodl9kcml2ZXIgKmRydiA9ICZzdG9ydnNjX2RydjsKKwl1MzIgbWF4X291dHN0YW5kaW5nX3JlcV9wZXJfY2hhbm5lbDsKKworCS8qCisJICogRGl2aWRlIHRoZSByaW5nIGJ1ZmZlciBkYXRhIHNpemUgKHdoaWNoIGlzIDEgcGFnZSBsZXNzCisJICogdGhhbiB0aGUgcmluZyBidWZmZXIgc2l6ZSBzaW5jZSB0aGF0IHBhZ2UgaXMgcmVzZXJ2ZWQgZm9yCisJICogdGhlIHJpbmcgYnVmZmVyIGluZGljZXMpIGJ5IHRoZSBtYXggcmVxdWVzdCBzaXplICh3aGljaCBpcworCSAqIHZtYnVzX2NoYW5uZWxfcGFja2V0X211bHRpcGFnZV9idWZmZXIgKyBzdHJ1Y3QgdnN0b3JfcGFja2V0ICsgdTY0KQorCSAqLworCisJbWF4X291dHN0YW5kaW5nX3JlcV9wZXJfY2hhbm5lbCA9CisJKChzdG9ydnNjX3JpbmdidWZmZXJfc2l6ZSAtIFBBR0VfU0laRSkgLworCUFMSUdOKE1BWF9NVUxUSVBBR0VfQlVGRkVSX1BBQ0tFVCArCisJc2l6ZW9mKHN0cnVjdCB2c3Rvcl9wYWNrZXQpICsgc2l6ZW9mKHU2NCksCisJc2l6ZW9mKHU2NCkpKTsKKworCW1lbWNweSgmZHJ2LT5kZXZfdHlwZSwgJmdTdG9yVnNjRGV2aWNlVHlwZSwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBodl9ndWlkKSk7CisKKwlpZiAobWF4X291dHN0YW5kaW5nX3JlcV9wZXJfY2hhbm5lbCA8CisJICAgIFNUT1JWU0NfTUFYX0lPX1JFUVVFU1RTKQorCQlyZXR1cm4gLTE7CisKKwlkcnYtPm5hbWUgPSBkcml2ZXJfbmFtZTsKKwlkcnYtPmRyaXZlci5uYW1lID0gZHJpdmVyX25hbWU7CisKKworCS8qIFRoZSBkcml2ZXIgYmVsb25ncyB0byB2bWJ1cyAqLworCXJldCA9IHZtYnVzX2NoaWxkX2RyaXZlcl9yZWdpc3RlcigmZHJ2LT5kcml2ZXIpOwogCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzdG9ydnNjX2dldF9jaHMoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICogYmRldiwKLQkJCSAgIHNlY3Rvcl90IGNhcGFjaXR5LCBpbnQgKmluZm8pCitzdGF0aWMgdm9pZCBzdG9ydnNjX2Rydl9leGl0KHZvaWQpCiB7Ci0Jc2VjdG9yX3QgdG90YWxfc2VjdG9ycyA9IGNhcGFjaXR5OwotCXNlY3Rvcl90IGN5bGluZGVyX3RpbWVzX2hlYWRzID0gMDsKLQlzZWN0b3JfdCB0ZW1wID0gMDsKLQotCWludCBzZWN0b3JzX3Blcl90cmFjayA9IDA7Ci0JaW50IGhlYWRzID0gMDsKLQlpbnQgY3lsaW5kZXJzID0gMDsKLQlpbnQgcmVtID0gMDsKLQotCWlmICh0b3RhbF9zZWN0b3JzID4gKDY1NTM1ICogMTYgKiAyNTUpKQotCQl0b3RhbF9zZWN0b3JzID0gKDY1NTM1ICogMTYgKiAyNTUpOwotCi0JaWYgKHRvdGFsX3NlY3RvcnMgPj0gKDY1NTM1ICogMTYgKiA2MykpIHsKLQkJc2VjdG9yc19wZXJfdHJhY2sgPSAyNTU7Ci0JCWhlYWRzID0gMTY7Ci0KLQkJY3lsaW5kZXJfdGltZXNfaGVhZHMgPSB0b3RhbF9zZWN0b3JzOwotCQkvKiBzZWN0b3JfZGl2IHN0b3JlcyB0aGUgcXVvdGllbnQgaW4gY3lsaW5kZXJfdGltZXNfaGVhZHMgKi8KLQkJcmVtID0gc2VjdG9yX2RpdihjeWxpbmRlcl90aW1lc19oZWFkcywgc2VjdG9yc19wZXJfdHJhY2spOwotCX0gZWxzZSB7Ci0JCXNlY3RvcnNfcGVyX3RyYWNrID0gMTc7Ci0KLQkJY3lsaW5kZXJfdGltZXNfaGVhZHMgPSB0b3RhbF9zZWN0b3JzOwotCQkvKiBzZWN0b3JfZGl2IHN0b3JlcyB0aGUgcXVvdGllbnQgaW4gY3lsaW5kZXJfdGltZXNfaGVhZHMgKi8KLQkJcmVtID0gc2VjdG9yX2RpdihjeWxpbmRlcl90aW1lc19oZWFkcywgc2VjdG9yc19wZXJfdHJhY2spOwotCi0JCXRlbXAgPSBjeWxpbmRlcl90aW1lc19oZWFkcyArIDEwMjM7Ci0JCS8qIHNlY3Rvcl9kaXYgc3RvcmVzIHRoZSBxdW90aWVudCBpbiB0ZW1wICovCi0JCXJlbSA9IHNlY3Rvcl9kaXYodGVtcCwgMTAyNCk7Ci0KLQkJaGVhZHMgPSB0ZW1wOwotCi0JCWlmIChoZWFkcyA8IDQpCi0JCQloZWFkcyA9IDQ7Ci0KLQkJaWYgKGN5bGluZGVyX3RpbWVzX2hlYWRzID49IChoZWFkcyAqIDEwMjQpIHx8IChoZWFkcyA+IDE2KSkgewotCQkJc2VjdG9yc19wZXJfdHJhY2sgPSAzMTsKLQkJCWhlYWRzID0gMTY7Ci0KLQkJCWN5bGluZGVyX3RpbWVzX2hlYWRzID0gdG90YWxfc2VjdG9yczsKLQkJCS8qCi0JCQkgKiBzZWN0b3JfZGl2IHN0b3JlcyB0aGUgcXVvdGllbnQgaW4KLQkJCSAqIGN5bGluZGVyX3RpbWVzX2hlYWRzCi0JCQkgKi8KLQkJCXJlbSA9IHNlY3Rvcl9kaXYoY3lsaW5kZXJfdGltZXNfaGVhZHMsCi0JCQkJCSBzZWN0b3JzX3Blcl90cmFjayk7Ci0JCX0KLQotCQlpZiAoY3lsaW5kZXJfdGltZXNfaGVhZHMgPj0gKGhlYWRzICogMTAyNCkpIHsKLQkJCXNlY3RvcnNfcGVyX3RyYWNrID0gNjM7Ci0JCQloZWFkcyA9IDE2OwotCi0JCQljeWxpbmRlcl90aW1lc19oZWFkcyA9IHRvdGFsX3NlY3RvcnM7Ci0JCQkvKgotCQkJICogc2VjdG9yX2RpdiBzdG9yZXMgdGhlIHF1b3RpZW50IGluCi0JCQkgKiBjeWxpbmRlcl90aW1lc19oZWFkcwotCQkJICovCi0JCQlyZW0gPSBzZWN0b3JfZGl2KGN5bGluZGVyX3RpbWVzX2hlYWRzLAotCQkJCQkgc2VjdG9yc19wZXJfdHJhY2spOwotCQl9Ci0JfQotCi0JdGVtcCA9IGN5bGluZGVyX3RpbWVzX2hlYWRzOwotCS8qIHNlY3Rvcl9kaXYgc3RvcmVzIHRoZSBxdW90aWVudCBpbiB0ZW1wICovCi0JcmVtID0gc2VjdG9yX2Rpdih0ZW1wLCBoZWFkcyk7Ci0JY3lsaW5kZXJzID0gdGVtcDsKLQotCWluZm9bMF0gPSBoZWFkczsKLQlpbmZvWzFdID0gc2VjdG9yc19wZXJfdHJhY2s7Ci0JaW5mb1syXSA9IGN5bGluZGVyczsKLQotCURQUklOVF9JTkZPKFNUT1JWU0NfRFJWLCAiQ0hTICglZCwgJWQsICVkKSIsIGN5bGluZGVycywgaGVhZHMsCi0JCSAgICBzZWN0b3JzX3Blcl90cmFjayk7Ci0KLSAgICByZXR1cm4gMDsKKwl2bWJ1c19jaGlsZF9kcml2ZXJfdW5yZWdpc3Rlcigmc3RvcnZzY19kcnYuZHJpdmVyKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgc3RvcnZzY19pbml0KHZvaWQpCkBAIC05MjMsNyArODAyLDcgQEAKIAlpbnQgcmV0OwogCiAJRFBSSU5UX0lORk8oU1RPUlZTQ19EUlYsICJTdG9ydnNjIGluaXRpYWxpemluZy4uLi4iKTsKLQlyZXQgPSBzdG9ydnNjX2Rydl9pbml0KHN0b3JfdnNjX2luaXRpYWxpemUpOworCXJldCA9IHN0b3J2c2NfZHJ2X2luaXQoKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvdXRpbHMuaCBiL2RyaXZlcnMvc3RhZ2luZy9odi91dGlscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2ViYmJmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi91dGlscy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDksIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKLSAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAotICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZQotICogUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCi0gKgotICogQXV0aG9yczoKLSAqICAgSGFpeWFuZyBaaGFuZyA8aGFpeWFuZ3pAbWljcm9zb2Z0LmNvbT4KLSAqICAgSGFuayBKYW5zc2VuICA8aGphbnNzZW5AbWljcm9zb2Z0LmNvbT4KLSAqLwotI2lmbmRlZiBfX0hWX1VUSUxTX0hfCi0jZGVmaW5lIF9fSFZfVVRJTFNfSF8KLQotLyoKLSAqIENvbW1vbiBoZWFkZXIgZm9yIEh5cGVyLVYgSUNzCi0gKi8KLSNkZWZpbmUgSUNNU0dUWVBFX05FR09USUFURQkJMAotI2RlZmluZSBJQ01TR1RZUEVfSEVBUlRCRUFUCQkxCi0jZGVmaW5lIElDTVNHVFlQRV9LVlBFWENIQU5HRQkJMgotI2RlZmluZSBJQ01TR1RZUEVfU0hVVERPV04JCTMKLSNkZWZpbmUgSUNNU0dUWVBFX1RJTUVTWU5DCQk0Ci0jZGVmaW5lIElDTVNHVFlQRV9WU1MJCQk1Ci0KLSNkZWZpbmUgSUNNU0dIRFJGTEFHX1RSQU5TQUNUSU9OCTEKLSNkZWZpbmUgSUNNU0dIRFJGTEFHX1JFUVVFU1QJCTIKLSNkZWZpbmUgSUNNU0dIRFJGTEFHX1JFU1BPTlNFCQk0Ci0KLSNkZWZpbmUgSFZfU19PSwkJCQkweDAwMDAwMDAwCi0jZGVmaW5lIEhWX0VfRkFJTAkJCTB4ODAwMDQwMDUKLSNkZWZpbmUgSFZfRVJST1JfTk9UX1NVUFBPUlRFRAkJMHg4MDA3MDAzMgotI2RlZmluZSBIVl9FUlJPUl9NQUNISU5FX0xPQ0tFRAkJMHg4MDA3MDRGNwotCi1zdHJ1Y3Qgdm1idXNwaXBlX2hkciB7Ci0JdTMyIGZsYWdzOwotCXUzMiBtc2dzaXplOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGljX3ZlcnNpb24gewotCXUxNiBtYWpvcjsKLQl1MTYgbWlub3I7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaWNtc2dfaGRyIHsKLQlzdHJ1Y3QgaWNfdmVyc2lvbiBpY3ZlcmZyYW1lOwotCXUxNiBpY21zZ3R5cGU7Ci0Jc3RydWN0IGljX3ZlcnNpb24gaWN2ZXJtc2c7Ci0JdTE2IGljbXNnc2l6ZTsKLQl1MzIgc3RhdHVzOwotCXU4IGljdHJhbnNhY3Rpb25faWQ7Ci0JdTggaWNmbGFnczsKLQl1OCByZXNlcnZlZFsyXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBpY21zZ19uZWdvdGlhdGUgewotCXUxNiBpY2ZyYW1lX3ZlcmNudDsKLQl1MTYgaWNtc2dfdmVyY250OwotCXUzMiByZXNlcnZlZDsKLQlzdHJ1Y3QgaWNfdmVyc2lvbiBpY3ZlcnNpb25fZGF0YVsxXTsgLyogYW55IHNpemUgYXJyYXkgKi8KLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBzaHV0ZG93bl9tc2dfZGF0YSB7Ci0JdTMyIHJlYXNvbl9jb2RlOwotCXUzMiB0aW1lb3V0X3NlY29uZHM7Ci0JdTMyIGZsYWdzOwotCXU4ICBkaXNwbGF5X21lc3NhZ2VbMjA0OF07Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGVhcnRiZWF0X21zZ19kYXRhIHsKLQl1NjQgc2VxX251bTsKLQl1MzIgcmVzZXJ2ZWRbOF07Ci19IF9fcGFja2VkOwotCi0vKiBUaW1lIFN5bmMgSUMgZGVmcyAqLwotI2RlZmluZSBJQ1RJTUVTWU5DRkxBR19QUk9CRQkwCi0jZGVmaW5lIElDVElNRVNZTkNGTEFHX1NZTkMJMQotI2RlZmluZSBJQ1RJTUVTWU5DRkxBR19TQU1QTEUJMgotCi0jaWZkZWYgX194ODZfNjRfXwotI2RlZmluZSBXTFRJTUVERUxUQQkxMTY0NDQ3MzYwMDAwMDAwMDBMCS8qIGluIDEwMG5zIHVuaXQgKi8KLSNlbHNlCi0jZGVmaW5lIFdMVElNRURFTFRBCTExNjQ0NDczNjAwMDAwMDAwMExMCi0jZW5kaWYKLQotc3RydWN0IGljdGltZXN5bmNfZGF0YXsKLQl1NjQgcGFyZW50dGltZTsKLQl1NjQgY2hpbGR0aW1lOwotCXU2NCByb3VuZHRyaXB0aW1lOwotCXU4IGZsYWdzOwotfSBfX3BhY2tlZDsKLQotLyogSW5kZXggZm9yIGVhY2ggSUMgc3RydWN0IGluIGFycmF5IGh2X2NiX3V0aWxzW10gKi8KLSNkZWZpbmUgSFZfU0hVVERPV05fTVNHCQkwCi0jZGVmaW5lIEhWX1RJTUVTWU5DX01TRwkJMQotI2RlZmluZSBIVl9IRUFSVEJFQVRfTVNHCTIKLSNkZWZpbmUgSFZfS1ZQX01TRwkJMwotCi1zdHJ1Y3QgaHlwZXJ2X3NlcnZpY2VfY2FsbGJhY2sgewotCXU4IG1zZ190eXBlOwotCWNoYXIgKmxvZ19tc2c7Ci0JdW5zaWduZWQgY2hhciBkYXRhWzE2XTsKLQlzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbDsKLQl2b2lkICgqY2FsbGJhY2spICh2b2lkICpjb250ZXh0KTsKLX07Ci0KLWV4dGVybiB2b2lkIHByZXBfbmVnb3RpYXRlX3Jlc3Aoc3RydWN0IGljbXNnX2hkciAqLAotCQkJCXN0cnVjdCBpY21zZ19uZWdvdGlhdGUgKiwgdTggKik7Ci1leHRlcm4gdm9pZCBjaG5fY2JfbmVnb3RpYXRlKHZvaWQgKik7Ci1leHRlcm4gc3RydWN0IGh5cGVydl9zZXJ2aWNlX2NhbGxiYWNrIGh2X2NiX3V0aWxzW107Ci0KLSNlbmRpZiAvKiBfX0hWX1VUSUxTX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvdmVyc2lvbl9pbmZvLmggYi9kcml2ZXJzL3N0YWdpbmcvaHYvdmVyc2lvbl9pbmZvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1MTc4ZjJjNy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvdmVyc2lvbl9pbmZvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwOSwgTWljcm9zb2Z0IENvcnBvcmF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAotICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi0gKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlCi0gKiBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KLSAqCi0gKiBBdXRob3JzOgotICogICBIYWl5YW5nIFpoYW5nIDxoYWl5YW5nekBtaWNyb3NvZnQuY29tPgotICogICBIYW5rIEphbnNzZW4gIDxoamFuc3NlbkBtaWNyb3NvZnQuY29tPgotICoKLSAqLwotCi0jaWZuZGVmIF9fSFZfVkVSU0lPTl9JTkZPCi0jZGVmaW5lIF9fSFZfVkVSU0lPTl9JTkZPCi0KLS8qCi0gKiBXZSB1c2UgdGhlIHNhbWUgdmVyc2lvbiBudW1iZXJpbmcgZm9yIGFsbCBIeXBlci1WIG1vZHVsZXMuCi0gKgotICogRGVmaW5pdGlvbiBvZiB2ZXJzaW9uaW5nIGlzIGFzIGZvbGxvd3M7Ci0gKgotICoJTWFqb3IgTnVtYmVyCUNoYW5nZXMgZm9yIHRoZXNlIHNjZW5hcmlvczsKLSAqCQkJMS4JV2hlbiBhIG5ldyB2ZXJzaW9uIG9mIFdpbmRvd3MgSHlwZXItVgotICoJCQkJaXMgcmVsZWFzZWQuCi0gKgkJCTIuCUEgTWFqb3IgY2hhbmdlIGhhcyBvY2N1cnJlZCBpbiB0aGUKLSAqCQkJCUxpbnV4IElDJ3MuCi0gKgkJCShGb3IgZXhhbXBsZSB0aGUgbWVyZ2UgZm9yIHRoZSBmaXJzdCB0aW1lCi0gKgkJCWludG8gdGhlIGtlcm5lbCkgRXZlcnkgdGltZSB0aGUgTWFqb3IgTnVtYmVyCi0gKgkJCWNoYW5nZXMsIHRoZSBSZXZpc2lvbiBudW1iZXIgaXMgcmVzZXQgdG8gMC4KLSAqCU1pbm9yIE51bWJlcglDaGFuZ2VzIHdoZW4gbmV3IGZ1bmN0aW9uYWxpdHkgaXMgYWRkZWQKLSAqCQkJdG8gdGhlIExpbnV4IElDJ3MgdGhhdCBpcyBub3QgYSBidWcgZml4LgotICoKLSAqIDMuMSAtIEFkZGVkIGNvbXBsZXRlZCBodl91dGlscyBkcml2ZXIuIFNodXRkb3duL0hlYXJ0YmVhdC9UaW1lc3luYwotICovCi0jZGVmaW5lIEhWX0RSVl9WRVJTSU9OICAgICAgICAgICAiMy4xIgotCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzLmggYi9kcml2ZXJzL3N0YWdpbmcvaHYvdm1idXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMwODdmMi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvdm1idXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA5LCBNaWNyb3NvZnQgQ29ycG9yYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCi0gKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKLSAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUKLSAqIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBLgotICoKLSAqIEF1dGhvcnM6Ci0gKiAgIEhhaXlhbmcgWmhhbmcgPGhhaXlhbmd6QG1pY3Jvc29mdC5jb20+Ci0gKiAgIEhhbmsgSmFuc3NlbiAgPGhqYW5zc2VuQG1pY3Jvc29mdC5jb20+Ci0gKgotICovCi0KLQotI2lmbmRlZiBfVk1CVVNfSF8KLSNkZWZpbmUgX1ZNQlVTX0hfCi0KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlICJ2bWJ1c19hcGkuaCIKLQotCi0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2VfdG9faHZfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmQpCi17Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgaHZfZGV2aWNlLCBkZXZpY2UpOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBodl9kcml2ZXIgKmRydl90b19odl9kcnYoc3RydWN0IGRldmljZV9kcml2ZXIgKmQpCi17Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgaHZfZHJpdmVyLCBkcml2ZXIpOwotfQotCi0KLS8qIFZtYnVzIGludGVyZmFjZSAqLwotaW50IHZtYnVzX2NoaWxkX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KTsKLXZvaWQgdm1idXNfY2hpbGRfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydik7Ci0KLWV4dGVybiBzdHJ1Y3QgY29tcGxldGlvbiBodl9jaGFubmVsX3JlYWR5OwotCi0jZW5kaWYgLyogX1ZNQlVTX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvdm1idXNfYXBpLmggYi9kcml2ZXJzL3N0YWdpbmcvaHYvdm1idXNfYXBpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwZDk2ZWIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzX2FwaS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8qCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA5LCBNaWNyb3NvZnQgQ29ycG9yYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCi0gKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKLSAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUKLSAqIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBLgotICoKLSAqIEF1dGhvcnM6Ci0gKiAgIEhhaXlhbmcgWmhhbmcgPGhhaXlhbmd6QG1pY3Jvc29mdC5jb20+Ci0gKiAgIEhhbmsgSmFuc3NlbiAgPGhqYW5zc2VuQG1pY3Jvc29mdC5jb20+Ci0gKgotICovCi0KLQotI2lmbmRlZiBfVk1CVVNfQVBJX0hfCi0jZGVmaW5lIF9WTUJVU19BUElfSF8KLQotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotCi0jZGVmaW5lIE1BWF9QQUdFX0JVRkZFUl9DT1VOVAkJCQkxNgotI2RlZmluZSBNQVhfTVVMVElQQUdFX0JVRkZFUl9DT1VOVAkJCTMyIC8qIDEyOEsgKi8KLQotI3ByYWdtYSBwYWNrKHB1c2gsIDEpCi0KLS8qIFNpbmdsZS1wYWdlIGJ1ZmZlciAqLwotc3RydWN0IGh2X3BhZ2VfYnVmZmVyIHsKLQl1MzIgbGVuOwotCXUzMiBvZmZzZXQ7Ci0JdTY0IHBmbjsKLX07Ci0KLS8qIE11bHRpcGxlLXBhZ2UgYnVmZmVyICovCi1zdHJ1Y3QgaHZfbXVsdGlwYWdlX2J1ZmZlciB7Ci0JLyogTGVuZ3RoIGFuZCBPZmZzZXQgZGV0ZXJtaW5lcyB0aGUgIyBvZiBwZm5zIGluIHRoZSBhcnJheSAqLwotCXUzMiBsZW47Ci0JdTMyIG9mZnNldDsKLQl1NjQgcGZuX2FycmF5W01BWF9NVUxUSVBBR0VfQlVGRkVSX0NPVU5UXTsKLX07Ci0KLS8qIDB4MTggaW5jbHVkZXMgdGhlIHByb3ByaWV0YXJ5IHBhY2tldCBoZWFkZXIgKi8KLSNkZWZpbmUgTUFYX1BBR0VfQlVGRkVSX1BBQ0tFVAkJKDB4MTggKwkJCVwKLQkJCQkJKHNpemVvZihzdHJ1Y3QgaHZfcGFnZV9idWZmZXIpICogXAotCQkJCQkgTUFYX1BBR0VfQlVGRkVSX0NPVU5UKSkKLSNkZWZpbmUgTUFYX01VTFRJUEFHRV9CVUZGRVJfUEFDS0VUCSgweDE4ICsJCQlcCi0JCQkJCSBzaXplb2Yoc3RydWN0IGh2X211bHRpcGFnZV9idWZmZXIpKQotCi0KLSNwcmFnbWEgcGFjayhwb3ApCi0KLXN0cnVjdCBodl9kcml2ZXI7Ci1zdHJ1Y3QgaHZfZGV2aWNlOwotCi1zdHJ1Y3QgaHZfZGV2X3BvcnRfaW5mbyB7Ci0JdTMyIGludF9tYXNrOwotCXUzMiByZWFkX2lkeDsKLQl1MzIgd3JpdGVfaWR4OwotCXUzMiBieXRlc19hdmFpbF90b3JlYWQ7Ci0JdTMyIGJ5dGVzX2F2YWlsX3Rvd3JpdGU7Ci19OwotCi1zdHJ1Y3QgaHZfZGV2aWNlX2luZm8gewotCXUzMiBjaG5faWQ7Ci0JdTMyIGNobl9zdGF0ZTsKLQlzdHJ1Y3QgaHZfZ3VpZCBjaG5fdHlwZTsKLQlzdHJ1Y3QgaHZfZ3VpZCBjaG5faW5zdGFuY2U7Ci0KLQl1MzIgbW9uaXRvcl9pZDsKLQl1MzIgc2VydmVyX21vbml0b3JfcGVuZGluZzsKLQl1MzIgc2VydmVyX21vbml0b3JfbGF0ZW5jeTsKLQl1MzIgc2VydmVyX21vbml0b3JfY29ubl9pZDsKLQl1MzIgY2xpZW50X21vbml0b3JfcGVuZGluZzsKLQl1MzIgY2xpZW50X21vbml0b3JfbGF0ZW5jeTsKLQl1MzIgY2xpZW50X21vbml0b3JfY29ubl9pZDsKLQotCXN0cnVjdCBodl9kZXZfcG9ydF9pbmZvIGluYm91bmQ7Ci0Jc3RydWN0IGh2X2Rldl9wb3J0X2luZm8gb3V0Ym91bmQ7Ci19OwotCi0vKiBCYXNlIGRyaXZlciBvYmplY3QgKi8KLXN0cnVjdCBodl9kcml2ZXIgewotCWNvbnN0IGNoYXIgKm5hbWU7Ci0KLQkvKiB0aGUgZGV2aWNlIHR5cGUgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyICovCi0Jc3RydWN0IGh2X2d1aWQgZGV2X3R5cGU7Ci0KLQkvKgotCSAqIERldmljZSB0eXBlIHNwZWNpZmljIGRyaXZlcnMgKG5ldCwgYmxrIGV0Yy4pCi0JICogbmVlZCBhIG1lY2hhbmlzbSB0byBnZXQgYSBwb2ludGVyIHRvCi0JICogZGV2aWNlIHR5cGUgc3BlY2lmaWMgZHJpdmVyIHN0cnVjdHVyZSBnaXZlbgotCSAqIGEgcG9pbnRlciB0byB0aGUgYmFzZSBoeXBlcnYgZHJpdmVyIHN0cnVjdHVyZS4KLQkgKiBUaGUgY3VycmVudCBjb2RlIHNvbHZlcyB0aGlzIHByb2JsZW0gdXNpbmcKLQkgKiBhIGhhY2suIFN1cHBvcnQgdGhpcyBuZWVkIGV4cGxpY2l0bHkKLQkgKi8KLQl2b2lkICpwcml2OwotCi0Jc3RydWN0IGRldmljZV9kcml2ZXIgZHJpdmVyOwotCi0JaW50ICgqZGV2X2FkZCkoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLCB2b2lkICpkYXRhKTsKLQlpbnQgKCpkZXZfcm0pKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSk7Ci0Jdm9pZCAoKmNsZWFudXApKHN0cnVjdCBodl9kcml2ZXIgKmRyaXZlcik7Ci19OwotCi0vKiBCYXNlIGRldmljZSBvYmplY3QgKi8KLXN0cnVjdCBodl9kZXZpY2UgewotCS8qIHRoZSBkcml2ZXIgZm9yIHRoaXMgZGV2aWNlICovCi0Jc3RydWN0IGh2X2RyaXZlciAqZHJ2OwotCi0JY2hhciBuYW1lWzY0XTsKLQotCXN0cnVjdCB3b3JrX3N0cnVjdCBwcm9iZV9mYWlsZWRfd29ya19pdGVtOwotCi0JaW50IHByb2JlX2Vycm9yOwotCi0JLyogdGhlIGRldmljZSB0eXBlIGlkIG9mIHRoaXMgZGV2aWNlICovCi0Jc3RydWN0IGh2X2d1aWQgZGV2X3R5cGU7Ci0KLQkvKiB0aGUgZGV2aWNlIGluc3RhbmNlIGlkIG9mIHRoaXMgZGV2aWNlICovCi0Jc3RydWN0IGh2X2d1aWQgZGV2X2luc3RhbmNlOwotCi0Jc3RydWN0IGRldmljZSBkZXZpY2U7Ci0KLQlzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbDsKLQotCS8qIERldmljZSBleHRlbnNpb247ICovCi0Jdm9pZCAqZXh0OwotfTsKLQotI2VuZGlmIC8qIF9WTUJVU19BUElfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1c19jaGFubmVsX2ludGVyZmFjZS5oIGIvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzX2NoYW5uZWxfaW50ZXJmYWNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwYWUyNTguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzX2NoYW5uZWxfaW50ZXJmYWNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwOSwgTWljcm9zb2Z0IENvcnBvcmF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAotICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi0gKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlCi0gKiBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KLSAqCi0gKiBBdXRob3JzOgotICogICBIYWl5YW5nIFpoYW5nIDxoYWl5YW5nekBtaWNyb3NvZnQuY29tPgotICogICBIYW5rIEphbnNzZW4gIDxoamFuc3NlbkBtaWNyb3NvZnQuY29tPgotICoKLSAqLwotCi0jaWZuZGVmIF9fVk1CVVNDSEFOTkVMSU5URVJGQUNFX0gKLSNkZWZpbmUgX19WTUJVU0NIQU5ORUxJTlRFUkZBQ0VfSAotCi0vKgotICogQSByZXZpc2lvbiBudW1iZXIgb2Ygdm1idXMgdGhhdCBpcyB1c2VkIGZvciBlbnN1cmluZyBib3RoIGVuZHMgb24gYQotICogcGFydGl0aW9uIGFyZSB1c2luZyBjb21wYXRpYmxlIHZlcnNpb25zLgotICovCi0jZGVmaW5lIFZNQlVTX1JFVklTSU9OX05VTUJFUgkJMTMKLQotLyogTWFrZSBtYXhpbXVtIHNpemUgb2YgcGlwZSBwYXlsb2FkIG9mIDE2SyAqLwotI2RlZmluZSBNQVhfUElQRV9EQVRBX1BBWUxPQUQJCShzaXplb2YodTgpICogMTYzODQpCi0KLS8qIERlZmluZSBQaXBlTW9kZSB2YWx1ZXMuICovCi0jZGVmaW5lIFZNQlVTX1BJUEVfVFlQRV9CWVRFCQkweDAwMDAwMDAwCi0jZGVmaW5lIFZNQlVTX1BJUEVfVFlQRV9NRVNTQUdFCQkweDAwMDAwMDA0Ci0KLS8qIFRoZSBzaXplIG9mIHRoZSB1c2VyIGRlZmluZWQgZGF0YSBidWZmZXIgZm9yIG5vbi1waXBlIG9mZmVycy4gKi8KLSNkZWZpbmUgTUFYX1VTRVJfREVGSU5FRF9CWVRFUwkJMTIwCi0KLS8qIFRoZSBzaXplIG9mIHRoZSB1c2VyIGRlZmluZWQgZGF0YSBidWZmZXIgZm9yIHBpcGUgb2ZmZXJzLiAqLwotI2RlZmluZSBNQVhfUElQRV9VU0VSX0RFRklORURfQllURVMJMTE2Ci0KLS8qCi0gKiBBdCB0aGUgY2VudGVyIG9mIHRoZSBDaGFubmVsIE1hbmFnZW1lbnQgbGlicmFyeSBpcyB0aGUgQ2hhbm5lbCBPZmZlci4gVGhpcwotICogc3RydWN0IGNvbnRhaW5zIHRoZSBmdW5kYW1lbnRhbCBpbmZvcm1hdGlvbiBhYm91dCBhbiBvZmZlci4KLSAqLwotc3RydWN0IHZtYnVzX2NoYW5uZWxfb2ZmZXIgewotCXN0cnVjdCBodl9ndWlkIGlmX3R5cGU7Ci0Jc3RydWN0IGh2X2d1aWQgaWZfaW5zdGFuY2U7Ci0JdTY0IGludF9sYXRlbmN5OyAvKiBpbiAxMDBucyB1bml0cyAqLwotCXUzMiBpZl9yZXZpc2lvbjsKLQl1MzIgc2VydmVyX2N0eF9zaXplOwkvKiBpbiBieXRlcyAqLwotCXUxNiBjaG5fZmxhZ3M7Ci0JdTE2IG1taW9fbWVnYWJ5dGVzOwkJLyogaW4gYnl0ZXMgKiAxMDI0ICogMTAyNCAqLwotCi0JdW5pb24gewotCQkvKiBOb24tcGlwZXM6IFRoZSB1c2VyIGhhcyBNQVhfVVNFUl9ERUZJTkVEX0JZVEVTIGJ5dGVzLiAqLwotCQlzdHJ1Y3QgewotCQkJdW5zaWduZWQgY2hhciB1c2VyX2RlZltNQVhfVVNFUl9ERUZJTkVEX0JZVEVTXTsKLQkJfSBzdGQ7Ci0KLQkJLyoKLQkJICogUGlwZXM6Ci0JCSAqIFRoZSBmb2xsb3dpbmcgc3J1Y3R1cmUgaXMgYW4gaW50ZWdyYXRlZCBwaXBlIHByb3RvY29sLCB3aGljaAotCQkgKiBpcyBpbXBsZW1lbnRlZCBvbiB0b3Agb2Ygc3RhbmRhcmQgdXNlci1kZWZpbmVkIGRhdGEuIFBpcGUKLQkJICogY2xpZW50cyBoYXZlIE1BWF9QSVBFX1VTRVJfREVGSU5FRF9CWVRFUyBsZWZ0IGZvciB0aGVpciBvd24KLQkJICogdXNlLgotCQkgKi8KLQkJc3RydWN0IHsKLQkJCXUzMiAgcGlwZV9tb2RlOwotCQkJdW5zaWduZWQgY2hhciB1c2VyX2RlZltNQVhfUElQRV9VU0VSX0RFRklORURfQllURVNdOwotCQl9IHBpcGU7Ci0JfSB1OwotCXUzMiBwYWRkaW5nOwotfSBfX3BhY2tlZDsKLQotLyogU2VydmVyIEZsYWdzICovCi0jZGVmaW5lIFZNQlVTX0NIQU5ORUxfRU5VTUVSQVRFX0RFVklDRV9JTlRFUkZBQ0UJMQotI2RlZmluZSBWTUJVU19DSEFOTkVMX1NFUlZFUl9TVVBQT1JUU19UUkFOU0ZFUl9QQUdFUwkyCi0jZGVmaW5lIFZNQlVTX0NIQU5ORUxfU0VSVkVSX1NVUFBPUlRTX0dQQURMUwkJNAotI2RlZmluZSBWTUJVU19DSEFOTkVMX05BTUVEX1BJUEVfTU9ERQkJCTB4MTAKLSNkZWZpbmUgVk1CVVNfQ0hBTk5FTF9MT09QQkFDS19PRkZFUgkJCTB4MTAwCi0jZGVmaW5lIFZNQlVTX0NIQU5ORUxfUEFSRU5UX09GRkVSCQkJMHgyMDAKLSNkZWZpbmUgVk1CVVNfQ0hBTk5FTF9SRVFVRVNUX01PTklUT1JFRF9OT1RJRklDQVRJT04JMHg0MDAKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvdm1idXNfZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvdm1idXNfZHJ2LmMKaW5kZXggNzkwODlmOC4uZWMxZDM4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzX2Rydi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1c19kcnYuYwpAQCAtMTcsNyArMTcsMTEgQEAKICAqIEF1dGhvcnM6CiAgKiAgIEhhaXlhbmcgWmhhbmcgPGhhaXlhbmd6QG1pY3Jvc29mdC5jb20+CiAgKiAgIEhhbmsgSmFuc3NlbiAgPGhqYW5zc2VuQG1pY3Jvc29mdC5jb20+CisgKiAgIEsuIFkuIFNyaW5pdmFzYW4gPGt5c0BtaWNyb3NvZnQuY29tPgorICoKICAqLworI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMjcsMjQwICszMSwyNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KLSNpbmNsdWRlICJ2ZXJzaW9uX2luZm8uaCIKLSNpbmNsdWRlICJodl9hcGkuaCIKLSNpbmNsdWRlICJsb2dnaW5nLmgiCi0jaW5jbHVkZSAidm1idXMuaCIKLSNpbmNsdWRlICJjaGFubmVsLmgiCi0jaW5jbHVkZSAidm1idXNfcHJpdmF0ZS5oIgorCisjaW5jbHVkZSAiaHlwZXJ2LmgiCisjaW5jbHVkZSAiaHlwZXJ2X3ZtYnVzLmgiCiAKIAotLyogRklYTUUhIFdlIG5lZWQgdG8gZG8gdGhpcyBkeW5hbWljYWxseSBmb3IgUElDIGFuZCBBUElDIHN5c3RlbSAqLwotI2RlZmluZSBWTUJVU19JUlEJCTB4NQotI2RlZmluZSBWTUJVU19JUlFfVkVDVE9SCUlSUTVfVkVDVE9SCitzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmh2X3BjaV9kZXY7CiAKLS8qIE1haW4gdm1idXMgZHJpdmVyIGRhdGEgc3RydWN0dXJlICovCi1zdHJ1Y3Qgdm1idXNfZHJpdmVyX2NvbnRleHQgewotCi0Jc3RydWN0IGJ1c190eXBlIGJ1czsKLQlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgbXNnX2RwYzsKLQlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgZXZlbnRfZHBjOwotCi0JLyogVGhlIGJ1cyByb290IGRldmljZSAqLwotCXN0cnVjdCBodl9kZXZpY2UgZGV2aWNlX2N0eDsKLX07Ci0KLXN0YXRpYyBpbnQgdm1idXNfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyKTsKLXN0YXRpYyBpbnQgdm1idXNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlKTsKLXN0YXRpYyBpbnQgdm1idXNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldmljZSk7Ci1zdGF0aWMgdm9pZCB2bWJ1c19zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpOwotc3RhdGljIGludCB2bWJ1c191ZXZlbnQoc3RydWN0IGRldmljZSAqZGV2aWNlLCBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpOwotCi1zdGF0aWMgaXJxcmV0dXJuX3Qgdm1idXNfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7Ci0KLXN0YXRpYyB2b2lkIHZtYnVzX2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldmljZSk7Ci1zdGF0aWMgdm9pZCB2bWJ1c19idXNfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpOwotCi1zdGF0aWMgc3NpemVfdCB2bWJ1c19zaG93X2RldmljZV9hdHRyKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2X2F0dHIsCi0JCQkJICAgICAgY2hhciAqYnVmKTsKLQorc3RhdGljIHN0cnVjdCB0YXNrbGV0X3N0cnVjdCBtc2dfZHBjOworc3RhdGljIHN0cnVjdCB0YXNrbGV0X3N0cnVjdCBldmVudF9kcGM7CiAKIHVuc2lnbmVkIGludCB2bWJ1c19sb2dsZXZlbCA9IChBTExfTU9EVUxFUyA8PCAxNiB8IElORk9fTFZMKTsKIEVYUE9SVF9TWU1CT0wodm1idXNfbG9nbGV2ZWwpOwogCS8qIChBTExfTU9EVUxFUyA8PCAxNiB8IERFQlVHX0xWTF9FTlRFUkVYSVQpOyAqLwogCS8qICgoKFZNQlVTIHwgVk1CVVNfRFJWKTw8MTYpIHwgREVCVUdfTFZMX0VOVEVSRVhJVCk7ICovCiAKLXN0YXRpYyBpbnQgdm1idXNfaXJxID0gVk1CVVNfSVJROwotCi0vKiBTZXQgdXAgcGVyIGRldmljZSBhdHRyaWJ1dGVzIGluIC9zeXMvYnVzL3ZtYnVzL2RldmljZXMvPGJ1cyBkZXZpY2U+ICovCi1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgdm1idXNfZGV2aWNlX2F0dHJzW10gPSB7Ci0JX19BVFRSKGlkLCBTX0lSVUdPLCB2bWJ1c19zaG93X2RldmljZV9hdHRyLCBOVUxMKSwKLQlfX0FUVFIoc3RhdGUsIFNfSVJVR08sIHZtYnVzX3Nob3dfZGV2aWNlX2F0dHIsIE5VTEwpLAotCV9fQVRUUihjbGFzc19pZCwgU19JUlVHTywgdm1idXNfc2hvd19kZXZpY2VfYXR0ciwgTlVMTCksCi0JX19BVFRSKGRldmljZV9pZCwgU19JUlVHTywgdm1idXNfc2hvd19kZXZpY2VfYXR0ciwgTlVMTCksCi0JX19BVFRSKG1vbml0b3JfaWQsIFNfSVJVR08sIHZtYnVzX3Nob3dfZGV2aWNlX2F0dHIsIE5VTEwpLAotCi0JX19BVFRSKHNlcnZlcl9tb25pdG9yX3BlbmRpbmcsIFNfSVJVR08sIHZtYnVzX3Nob3dfZGV2aWNlX2F0dHIsIE5VTEwpLAotCV9fQVRUUihzZXJ2ZXJfbW9uaXRvcl9sYXRlbmN5LCBTX0lSVUdPLCB2bWJ1c19zaG93X2RldmljZV9hdHRyLCBOVUxMKSwKLQlfX0FUVFIoc2VydmVyX21vbml0b3JfY29ubl9pZCwgU19JUlVHTywgdm1idXNfc2hvd19kZXZpY2VfYXR0ciwgTlVMTCksCi0KLQlfX0FUVFIoY2xpZW50X21vbml0b3JfcGVuZGluZywgU19JUlVHTywgdm1idXNfc2hvd19kZXZpY2VfYXR0ciwgTlVMTCksCi0JX19BVFRSKGNsaWVudF9tb25pdG9yX2xhdGVuY3ksIFNfSVJVR08sIHZtYnVzX3Nob3dfZGV2aWNlX2F0dHIsIE5VTEwpLAotCV9fQVRUUihjbGllbnRfbW9uaXRvcl9jb25uX2lkLCBTX0lSVUdPLCB2bWJ1c19zaG93X2RldmljZV9hdHRyLCBOVUxMKSwKLQotCV9fQVRUUihvdXRfaW50cl9tYXNrLCBTX0lSVUdPLCB2bWJ1c19zaG93X2RldmljZV9hdHRyLCBOVUxMKSwKLQlfX0FUVFIob3V0X3JlYWRfaW5kZXgsIFNfSVJVR08sIHZtYnVzX3Nob3dfZGV2aWNlX2F0dHIsIE5VTEwpLAotCV9fQVRUUihvdXRfd3JpdGVfaW5kZXgsIFNfSVJVR08sIHZtYnVzX3Nob3dfZGV2aWNlX2F0dHIsIE5VTEwpLAotCV9fQVRUUihvdXRfcmVhZF9ieXRlc19hdmFpbCwgU19JUlVHTywgdm1idXNfc2hvd19kZXZpY2VfYXR0ciwgTlVMTCksCi0JX19BVFRSKG91dF93cml0ZV9ieXRlc19hdmFpbCwgU19JUlVHTywgdm1idXNfc2hvd19kZXZpY2VfYXR0ciwgTlVMTCksCi0KLQlfX0FUVFIoaW5faW50cl9tYXNrLCBTX0lSVUdPLCB2bWJ1c19zaG93X2RldmljZV9hdHRyLCBOVUxMKSwKLQlfX0FUVFIoaW5fcmVhZF9pbmRleCwgU19JUlVHTywgdm1idXNfc2hvd19kZXZpY2VfYXR0ciwgTlVMTCksCi0JX19BVFRSKGluX3dyaXRlX2luZGV4LCBTX0lSVUdPLCB2bWJ1c19zaG93X2RldmljZV9hdHRyLCBOVUxMKSwKLQlfX0FUVFIoaW5fcmVhZF9ieXRlc19hdmFpbCwgU19JUlVHTywgdm1idXNfc2hvd19kZXZpY2VfYXR0ciwgTlVMTCksCi0JX19BVFRSKGluX3dyaXRlX2J5dGVzX2F2YWlsLCBTX0lSVUdPLCB2bWJ1c19zaG93X2RldmljZV9hdHRyLCBOVUxMKSwKLQlfX0FUVFJfTlVMTAotfTsKLQotLyogVGhlIG9uZSBhbmQgb25seSBvbmUgKi8KLXN0YXRpYyBzdHJ1Y3Qgdm1idXNfZHJpdmVyX2NvbnRleHQgdm1idXNfZHJ2ID0gewotCS5idXMubmFtZSA9CQkidm1idXMiLAotCS5idXMubWF0Y2ggPQkJdm1idXNfbWF0Y2gsCi0JLmJ1cy5zaHV0ZG93biA9CQl2bWJ1c19zaHV0ZG93biwKLQkuYnVzLnJlbW92ZSA9CQl2bWJ1c19yZW1vdmUsCi0JLmJ1cy5wcm9iZSA9CQl2bWJ1c19wcm9iZSwKLQkuYnVzLnVldmVudCA9CQl2bWJ1c191ZXZlbnQsCi0JLmJ1cy5kZXZfYXR0cnMgPQl2bWJ1c19kZXZpY2VfYXR0cnMsCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqZHJpdmVyX25hbWUgPSAiaHlwZXJ2IjsKLQotLyoKLSAqIFdpbmRvd3Mgdm1idXMgZG9lcyBub3QgZGVmaW5lZCB0aGlzLgotICogV2UgZGVmaW5lZCB0aGlzIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBkZXZpY2VzCi0gKi8KLS8qIHtjNTI5NTgxNi1mNjNhLTRkNWYtOGQxYS00ZGFmOTk5Y2ExODV9ICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGh2X2d1aWQgZGV2aWNlX3R5cGUgPSB7Ci0JLmRhdGEgPSB7Ci0JCTB4MTYsIDB4NTgsIDB4MjksIDB4YzUsIDB4M2EsIDB4ZjYsIDB4NWYsIDB4NGQsCi0JCTB4OGQsIDB4MWEsIDB4NGQsIDB4YWYsIDB4OTksIDB4OWMsIDB4YTEsIDB4ODUKLQl9Ci19OwotCi0vKiB7YWMzNzYwZmMtOWFkZi00MGFhLTk0MjctYTcwZWQ2ZGU5NWM1fSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBodl9ndWlkIGRldmljZV9pZCA9IHsKLQkuZGF0YSA9IHsKLQkJMHhmYywgMHg2MCwgMHgzNywgMHhhYywgMHhkZiwgMHg5YSwgMHhhYSwgMHg0MCwKLQkJMHg5NCwgMHgyNywgMHhhNywgMHgwZSwgMHhkNiwgMHhkZSwgMHg5NSwgMHhjNQotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaHZfZGV2aWNlICp2bWJ1c19kZXZpY2U7IC8qIHZtYnVzIHJvb3QgZGV2aWNlICovCi0KLQotLyoKLSAqIHZtYnVzX2Rldl9hZGQgLSBDYWxsYmFjayB3aGVuIHRoZSByb290IGJ1cyBkZXZpY2UgaXMgYWRkZWQKLSAqLwotc3RhdGljIGludCB2bWJ1c19kZXZfYWRkKHN0cnVjdCBodl9kZXZpY2UgKmRldiwgdm9pZCAqaW5mbykKLXsKLQl1MzIgKmlycXZlY3RvciA9IGluZm87Ci0JaW50IHJldDsKLQotCXZtYnVzX2RldmljZSA9IGRldjsKLQotCW1lbWNweSgmdm1idXNfZGV2aWNlLT5kZXZfdHlwZSwgJmRldmljZV90eXBlLCBzaXplb2Yoc3RydWN0IGh2X2d1aWQpKTsKLQltZW1jcHkoJnZtYnVzX2RldmljZS0+ZGV2X2luc3RhbmNlLCAmZGV2aWNlX2lkLAotCSAgICAgICBzaXplb2Yoc3RydWN0IGh2X2d1aWQpKTsKLQotCS8qIHN0cmNweShkZXYtPm5hbWUsICJ2bWJ1cyIpOyAqLwotCS8qIFN5bklDIHNldHVwLi4uICovCi0Jb25fZWFjaF9jcHUoaHZfc3luaWNfaW5pdCwgKHZvaWQgKilpcnF2ZWN0b3IsIDEpOwotCi0JLyogQ29ubmVjdCB0byBWTUJ1cyBpbiB0aGUgcm9vdCBwYXJ0aXRpb24gKi8KLQlyZXQgPSB2bWJ1c19jb25uZWN0KCk7Ci0KLQkvKiBWbWJ1c1NlbmRFdmVudChkZXZpY2UtPmxvY2FsUG9ydElkKzEpOyAqLwotCXJldHVybiByZXQ7Ci19Ci0KLQotc3RydWN0IG9ubWVzc2FnZV93b3JrX2NvbnRleHQgewotCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwotCXN0cnVjdCBodl9tZXNzYWdlIG1zZzsKLX07Ci0KLXN0YXRpYyB2b2lkIHZtYnVzX29ubWVzc2FnZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3Qgb25tZXNzYWdlX3dvcmtfY29udGV4dCAqY3R4OwotCi0JY3R4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBvbm1lc3NhZ2Vfd29ya19jb250ZXh0LAotCQkJICAgd29yayk7Ci0Jdm1idXNfb25tZXNzYWdlKCZjdHgtPm1zZyk7Ci0Ja2ZyZWUoY3R4KTsKLX0KLQotLyoKLSAqIHZtYnVzX29uX21zZ19kcGMgLSBEUEMgcm91dGluZSB0byBoYW5kbGUgbWVzc2FnZXMgZnJvbSB0aGUgaHlwZXJ2aXNpb3IKLSAqLwotc3RhdGljIHZvaWQgdm1idXNfb25fbXNnX2RwYyh1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQl2b2lkICpwYWdlX2FkZHIgPSBodl9jb250ZXh0LnN5bmljX21lc3NhZ2VfcGFnZVtjcHVdOwotCXN0cnVjdCBodl9tZXNzYWdlICptc2cgPSAoc3RydWN0IGh2X21lc3NhZ2UgKilwYWdlX2FkZHIgKwotCQkJCSAgVk1CVVNfTUVTU0FHRV9TSU5UOwotCXN0cnVjdCBvbm1lc3NhZ2Vfd29ya19jb250ZXh0ICpjdHg7Ci0KLQl3aGlsZSAoMSkgewotCQlpZiAobXNnLT5oZWFkZXIubWVzc2FnZV90eXBlID09IEhWTVNHX05PTkUpIHsKLQkJCS8qIG5vIG1zZyAqLwotCQkJYnJlYWs7Ci0JCX0gZWxzZSB7Ci0JCQljdHggPSBrbWFsbG9jKHNpemVvZigqY3R4KSwgR0ZQX0FUT01JQyk7Ci0JCQlpZiAoY3R4ID09IE5VTEwpCi0JCQkJY29udGludWU7Ci0JCQlJTklUX1dPUksoJmN0eC0+d29yaywgdm1idXNfb25tZXNzYWdlX3dvcmspOwotCQkJbWVtY3B5KCZjdHgtPm1zZywgbXNnLCBzaXplb2YoKm1zZykpOwotCQkJcXVldWVfd29yayh2bWJ1c19jb25uZWN0aW9uLndvcmtfcXVldWUsICZjdHgtPndvcmspOwotCQl9Ci0KLQkJbXNnLT5oZWFkZXIubWVzc2FnZV90eXBlID0gSFZNU0dfTk9ORTsKLQotCQkvKgotCQkgKiBNYWtlIHN1cmUgdGhlIHdyaXRlIHRvIE1lc3NhZ2VUeXBlIChpZSBzZXQgdG8KLQkJICogSFZNU0dfTk9ORSkgaGFwcGVucyBiZWZvcmUgd2UgcmVhZCB0aGUKLQkJICogTWVzc2FnZVBlbmRpbmcgYW5kIEVPTWluZy4gT3RoZXJ3aXNlLCB0aGUgRU9NaW5nCi0JCSAqIHdpbGwgbm90IGRlbGl2ZXIgYW55IG1vcmUgbWVzc2FnZXMgc2luY2UgdGhlcmUgaXMKLQkJICogbm8gZW1wdHkgc2xvdAotCQkgKi8KLQkJbWIoKTsKLQotCQlpZiAobXNnLT5oZWFkZXIubWVzc2FnZV9mbGFncy5tc2dfcGVuZGluZykgewotCQkJLyoKLQkJCSAqIFRoaXMgd2lsbCBjYXVzZSBtZXNzYWdlIHF1ZXVlIHJlc2NhbiB0bwotCQkJICogcG9zc2libHkgZGVsaXZlciBhbm90aGVyIG1zZyBmcm9tIHRoZQotCQkJICogaHlwZXJ2aXNvcgotCQkJICovCi0JCQl3cm1zcmwoSFZfWDY0X01TUl9FT00sIDApOwotCQl9Ci0JfQotfQotCi0vKgotICogdm1idXNfb25faXNyIC0gSVNSIHJvdXRpbmUKLSAqLwotc3RhdGljIGludCB2bWJ1c19vbl9pc3Iodm9pZCkKLXsKLQlpbnQgcmV0ID0gMDsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXZvaWQgKnBhZ2VfYWRkcjsKLQlzdHJ1Y3QgaHZfbWVzc2FnZSAqbXNnOwotCXVuaW9uIGh2X3N5bmljX2V2ZW50X2ZsYWdzICpldmVudDsKLQotCXBhZ2VfYWRkciA9IGh2X2NvbnRleHQuc3luaWNfbWVzc2FnZV9wYWdlW2NwdV07Ci0JbXNnID0gKHN0cnVjdCBodl9tZXNzYWdlICopcGFnZV9hZGRyICsgVk1CVVNfTUVTU0FHRV9TSU5UOwotCi0JLyogQ2hlY2sgaWYgdGhlcmUgYXJlIGFjdHVhbCBtc2dzIHRvIGJlIHByb2Nlc3MgKi8KLQlpZiAobXNnLT5oZWFkZXIubWVzc2FnZV90eXBlICE9IEhWTVNHX05PTkUpIHsKLQkJRFBSSU5UX0RCRyhWTUJVUywgInJlY2VpdmVkIG1zZyB0eXBlICVkIHNpemUgJWQiLAotCQkJCW1zZy0+aGVhZGVyLm1lc3NhZ2VfdHlwZSwKLQkJCQltc2ctPmhlYWRlci5wYXlsb2FkX3NpemUpOwotCQlyZXQgfD0gMHgxOwotCX0KLQotCS8qIFRPRE86IENoZWNrIGlmIHRoZXJlIGFyZSBldmVudHMgdG8gYmUgcHJvY2VzcyAqLwotCXBhZ2VfYWRkciA9IGh2X2NvbnRleHQuc3luaWNfZXZlbnRfcGFnZVtjcHVdOwotCWV2ZW50ID0gKHVuaW9uIGh2X3N5bmljX2V2ZW50X2ZsYWdzICopcGFnZV9hZGRyICsgVk1CVVNfTUVTU0FHRV9TSU5UOwotCi0JLyogU2luY2Ugd2UgYXJlIGEgY2hpbGQsIHdlIG9ubHkgbmVlZCB0byBjaGVjayBiaXQgMCAqLwotCWlmIChzeW5jX3Rlc3RfYW5kX2NsZWFyX2JpdCgwLCAodW5zaWduZWQgbG9uZyAqKSAmZXZlbnQtPmZsYWdzMzJbMF0pKSB7Ci0JCURQUklOVF9EQkcoVk1CVVMsICJyZWNlaXZlZCBldmVudCAlZCIsIGV2ZW50LT5mbGFnczMyWzBdKTsKLQkJcmV0IHw9IDB4MjsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQorc3RhdGljIGludCBwY2lfcHJvYmVfZXJyb3I7CitzdGF0aWMgc3RydWN0IGNvbXBsZXRpb24gcHJvYmVfZXZlbnQ7CitzdGF0aWMgaW50IGlycTsKIAogc3RhdGljIHZvaWQgZ2V0X2NoYW5uZWxfaW5mbyhzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsCiAJCQkgICAgIHN0cnVjdCBodl9kZXZpY2VfaW5mbyAqaW5mbykKQEAgLTQxMSwzMDggKzIwMiwzNiBAQAogCX0KIH0KIAotLyoKLSAqIHZtYnVzX2J1c19pbml0IC1NYWluIHZtYnVzIGRyaXZlciBpbml0aWFsaXphdGlvbiByb3V0aW5lLgotICoKLSAqIEhlcmUsIHdlCi0gKgktIGluaXRpYWxpemUgdGhlIHZtYnVzIGRyaXZlciBjb250ZXh0Ci0gKgktIHNldHVwIHZhcmlvdXMgZHJpdmVyIGVudHJ5IHBvaW50cwotICoJLSBpbnZva2UgdGhlIHZtYnVzIGh2IG1haW4gaW5pdCByb3V0aW5lCi0gKgktIGdldCB0aGUgaXJxIHJlc291cmNlCi0gKgktIGludm9rZSB0aGUgdm1idXMgdG8gYWRkIHRoZSB2bWJ1cyByb290IGRldmljZQotICoJLSBzZXR1cCB0aGUgdm1idXMgcm9vdCBkZXZpY2UKLSAqCS0gcmV0cmlldmUgdGhlIGNoYW5uZWwgb2ZmZXJzCi0gKi8KLXN0YXRpYyBpbnQgdm1idXNfYnVzX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3Qgdm1idXNfZHJpdmVyX2NvbnRleHQgKnZtYnVzX2Rydl9jdHggPSAmdm1idXNfZHJ2OwotCXN0cnVjdCBodl9kZXZpY2UgKmRldl9jdHggPSAmdm1idXNfZHJ2LmRldmljZV9jdHg7Ci0JaW50IHJldDsKLQl1bnNpZ25lZCBpbnQgdmVjdG9yOworLyogU2V0IHVwIHBlciBkZXZpY2UgYXR0cmlidXRlcyBpbiAvc3lzL2J1cy92bWJ1cy9kZXZpY2VzLzxidXMgZGV2aWNlPiAqLworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHZtYnVzX2RldmljZV9hdHRyc1tdID0geworCV9fQVRUUihpZCwgU19JUlVHTywgdm1idXNfc2hvd19kZXZpY2VfYXR0ciwgTlVMTCksCisJX19BVFRSKHN0YXRlLCBTX0lSVUdPLCB2bWJ1c19zaG93X2RldmljZV9hdHRyLCBOVUxMKSwKKwlfX0FUVFIoY2xhc3NfaWQsIFNfSVJVR08sIHZtYnVzX3Nob3dfZGV2aWNlX2F0dHIsIE5VTEwpLAorCV9fQVRUUihkZXZpY2VfaWQsIFNfSVJVR08sIHZtYnVzX3Nob3dfZGV2aWNlX2F0dHIsIE5VTEwpLAorCV9fQVRUUihtb25pdG9yX2lkLCBTX0lSVUdPLCB2bWJ1c19zaG93X2RldmljZV9hdHRyLCBOVUxMKSwKIAotCURQUklOVF9JTkZPKFZNQlVTLCAiKysrKysrKyBIViBEcml2ZXIgdmVyc2lvbiA9ICVzICsrKysrKysiLAotCQkgICAgSFZfRFJWX1ZFUlNJT04pOwotCURQUklOVF9JTkZPKFZNQlVTLCAiKysrKysrKyBWbWJ1cyBzdXBwb3J0ZWQgdmVyc2lvbiA9ICVkICsrKysrKysiLAotCQkJVk1CVVNfUkVWSVNJT05fTlVNQkVSKTsKLQlEUFJJTlRfSU5GTyhWTUJVUywgIisrKysrKysgVm1idXMgdXNpbmcgU0lOVCAlZCArKysrKysrIiwKLQkJCVZNQlVTX01FU1NBR0VfU0lOVCk7Ci0JRFBSSU5UX0RCRyhWTUJVUywgInNpemVvZih2bWJ1c19jaGFubmVsX3BhY2tldF9wYWdlX2J1ZmZlcik9JXpkLCAiCi0JCQkic2l6ZW9mKFZNQlVTX0NIQU5ORUxfUEFDS0VUX01VTElUUEFHRV9CVUZGRVIpPSV6ZCIsCi0JCQlzaXplb2Yoc3RydWN0IHZtYnVzX2NoYW5uZWxfcGFja2V0X3BhZ2VfYnVmZmVyKSwKLQkJCXNpemVvZihzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9wYWNrZXRfbXVsdGlwYWdlX2J1ZmZlcikpOworCV9fQVRUUihzZXJ2ZXJfbW9uaXRvcl9wZW5kaW5nLCBTX0lSVUdPLCB2bWJ1c19zaG93X2RldmljZV9hdHRyLCBOVUxMKSwKKwlfX0FUVFIoc2VydmVyX21vbml0b3JfbGF0ZW5jeSwgU19JUlVHTywgdm1idXNfc2hvd19kZXZpY2VfYXR0ciwgTlVMTCksCisJX19BVFRSKHNlcnZlcl9tb25pdG9yX2Nvbm5faWQsIFNfSVJVR08sIHZtYnVzX3Nob3dfZGV2aWNlX2F0dHIsIE5VTEwpLAogCisJX19BVFRSKGNsaWVudF9tb25pdG9yX3BlbmRpbmcsIFNfSVJVR08sIHZtYnVzX3Nob3dfZGV2aWNlX2F0dHIsIE5VTEwpLAorCV9fQVRUUihjbGllbnRfbW9uaXRvcl9sYXRlbmN5LCBTX0lSVUdPLCB2bWJ1c19zaG93X2RldmljZV9hdHRyLCBOVUxMKSwKKwlfX0FUVFIoY2xpZW50X21vbml0b3JfY29ubl9pZCwgU19JUlVHTywgdm1idXNfc2hvd19kZXZpY2VfYXR0ciwgTlVMTCksCiAKLQkvKiBIeXBlcnZpc29yIGluaXRpYWxpemF0aW9uLi4uc2V0dXAgaHlwZXJjYWxsIHBhZ2UuLmV0YyAqLwotCXJldCA9IGh2X2luaXQoKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJRFBSSU5UX0VSUihWTUJVUywgIlVuYWJsZSB0byBpbml0aWFsaXplIHRoZSBoeXBlcnZpc29yIC0gMHgleCIsCi0JCQkJcmV0KTsKLQkJZ290byBjbGVhbnVwOwotCX0KKwlfX0FUVFIob3V0X2ludHJfbWFzaywgU19JUlVHTywgdm1idXNfc2hvd19kZXZpY2VfYXR0ciwgTlVMTCksCisJX19BVFRSKG91dF9yZWFkX2luZGV4LCBTX0lSVUdPLCB2bWJ1c19zaG93X2RldmljZV9hdHRyLCBOVUxMKSwKKwlfX0FUVFIob3V0X3dyaXRlX2luZGV4LCBTX0lSVUdPLCB2bWJ1c19zaG93X2RldmljZV9hdHRyLCBOVUxMKSwKKwlfX0FUVFIob3V0X3JlYWRfYnl0ZXNfYXZhaWwsIFNfSVJVR08sIHZtYnVzX3Nob3dfZGV2aWNlX2F0dHIsIE5VTEwpLAorCV9fQVRUUihvdXRfd3JpdGVfYnl0ZXNfYXZhaWwsIFNfSVJVR08sIHZtYnVzX3Nob3dfZGV2aWNlX2F0dHIsIE5VTEwpLAogCisJX19BVFRSKGluX2ludHJfbWFzaywgU19JUlVHTywgdm1idXNfc2hvd19kZXZpY2VfYXR0ciwgTlVMTCksCisJX19BVFRSKGluX3JlYWRfaW5kZXgsIFNfSVJVR08sIHZtYnVzX3Nob3dfZGV2aWNlX2F0dHIsIE5VTEwpLAorCV9fQVRUUihpbl93cml0ZV9pbmRleCwgU19JUlVHTywgdm1idXNfc2hvd19kZXZpY2VfYXR0ciwgTlVMTCksCisJX19BVFRSKGluX3JlYWRfYnl0ZXNfYXZhaWwsIFNfSVJVR08sIHZtYnVzX3Nob3dfZGV2aWNlX2F0dHIsIE5VTEwpLAorCV9fQVRUUihpbl93cml0ZV9ieXRlc19hdmFpbCwgU19JUlVHTywgdm1idXNfc2hvd19kZXZpY2VfYXR0ciwgTlVMTCksCisJX19BVFRSX05VTEwKK307CiAKLQl2bWJ1c19kcnZfY3R4LT5idXMubmFtZSA9IGRyaXZlcl9uYW1lOwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgYnVzIGNvbnRleHQgKi8KLQl0YXNrbGV0X2luaXQoJnZtYnVzX2Rydl9jdHgtPm1zZ19kcGMsIHZtYnVzX29uX21zZ19kcGMsCi0JCSAgICAgKHVuc2lnbmVkIGxvbmcpTlVMTCk7Ci0JdGFza2xldF9pbml0KCZ2bWJ1c19kcnZfY3R4LT5ldmVudF9kcGMsIHZtYnVzX29uX2V2ZW50LAotCQkgICAgICh1bnNpZ25lZCBsb25nKU5VTEwpOwotCi0JLyogTm93LCByZWdpc3RlciB0aGUgYnVzICB3aXRoIExETSAqLwotCXJldCA9IGJ1c19yZWdpc3Rlcigmdm1idXNfZHJ2X2N0eC0+YnVzKTsKLQlpZiAocmV0KSB7Ci0JCXJldCA9IC0xOwotCQlnb3RvIGNsZWFudXA7Ci0JfQotCi0JLyogR2V0IHRoZSBpbnRlcnJ1cHQgcmVzb3VyY2UgKi8KLQlyZXQgPSByZXF1ZXN0X2lycSh2bWJ1c19pcnEsIHZtYnVzX2lzciwgSVJRRl9TQU1QTEVfUkFORE9NLAotCQkJICBkcml2ZXJfbmFtZSwgTlVMTCk7Ci0KLQlpZiAocmV0ICE9IDApIHsKLQkJRFBSSU5UX0VSUihWTUJVU19EUlYsICJFUlJPUiAtIFVuYWJsZSB0byByZXF1ZXN0IElSUSAlZCIsCi0JCQkgICB2bWJ1c19pcnEpOwotCi0JCWJ1c191bnJlZ2lzdGVyKCZ2bWJ1c19kcnZfY3R4LT5idXMpOwotCi0JCXJldCA9IC0xOwotCQlnb3RvIGNsZWFudXA7Ci0JfQotCXZlY3RvciA9IFZNQlVTX0lSUV9WRUNUT1I7Ci0KLQlEUFJJTlRfSU5GTyhWTUJVU19EUlYsICJpcnEgMHgleCB2ZWN0b3IgMHgleCIsIHZtYnVzX2lycSwgdmVjdG9yKTsKLQotCS8qIEFkZCB0aGUgcm9vdCBkZXZpY2UgKi8KLQltZW1zZXQoZGV2X2N0eCwgMCwgc2l6ZW9mKHN0cnVjdCBodl9kZXZpY2UpKTsKLQotCXJldCA9IHZtYnVzX2Rldl9hZGQoZGV2X2N0eCwgJnZlY3Rvcik7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCURQUklOVF9FUlIoVk1CVVNfRFJWLAotCQkJICAgIkVSUk9SIC0gVW5hYmxlIHRvIGFkZCB2bWJ1cyByb290IGRldmljZSIpOwotCi0JCWZyZWVfaXJxKHZtYnVzX2lycSwgTlVMTCk7Ci0KLQkJYnVzX3VucmVnaXN0ZXIoJnZtYnVzX2Rydl9jdHgtPmJ1cyk7Ci0KLQkJcmV0ID0gLTE7Ci0JCWdvdG8gY2xlYW51cDsKLQl9Ci0JLyogc3RyY3B5KGRldl9jdHgtPmRldmljZS5idXNfaWQsIGRldl9jdHgtPmRldmljZV9vYmoubmFtZSk7ICovCi0JZGV2X3NldF9uYW1lKCZkZXZfY3R4LT5kZXZpY2UsICJ2bWJ1c18wXzAiKTsKLQotCS8qIE5vIG5lZWQgdG8gYmluZCBhIGRyaXZlciB0byB0aGUgcm9vdCBkZXZpY2UuICovCi0JZGV2X2N0eC0+ZGV2aWNlLnBhcmVudCA9IE5VTEw7Ci0JLyogTlVMTDsgdm1idXNfcmVtb3ZlKCkgZG9lcyBub3QgZ2V0IGludm9rZWQgKi8KLQlkZXZfY3R4LT5kZXZpY2UuYnVzID0gJnZtYnVzX2Rydl9jdHgtPmJ1czsKLQotCS8qIFNldHVwIHRoZSBkZXZpY2UgZGlzcGF0Y2ggdGFibGUgKi8KLQlkZXZfY3R4LT5kZXZpY2UucmVsZWFzZSA9IHZtYnVzX2J1c19yZWxlYXNlOwotCi0JLyogcmVnaXN0ZXIgdGhlICByb290IGRldmljZSAqLwotCXJldCA9IGRldmljZV9yZWdpc3RlcigmZGV2X2N0eC0+ZGV2aWNlKTsKLQlpZiAocmV0KSB7Ci0JCURQUklOVF9FUlIoVk1CVVNfRFJWLAotCQkJICAgIkVSUk9SIC0gVW5hYmxlIHRvIHJlZ2lzdGVyIHZtYnVzIHJvb3QgZGV2aWNlIik7Ci0KLQkJZnJlZV9pcnEodm1idXNfaXJxLCBOVUxMKTsKLQkJYnVzX3VucmVnaXN0ZXIoJnZtYnVzX2Rydl9jdHgtPmJ1cyk7Ci0KLQkJcmV0ID0gLTE7Ci0JCWdvdG8gY2xlYW51cDsKLQl9Ci0KLQl2bWJ1c19yZXF1ZXN0X29mZmVycygpOwotCXdhaXRfZm9yX2NvbXBsZXRpb24oJmh2X2NoYW5uZWxfcmVhZHkpOwotCi1jbGVhbnVwOgotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiB2bWJ1c19idXNfZXhpdCAtIFRlcm1pbmF0ZSB0aGUgdm1idXMgZHJpdmVyLgotICoKLSAqIFRoaXMgcm91dGluZSBpcyBvcHBvc2l0ZSBvZiB2bWJ1c19idXNfaW5pdCgpCi0gKi8KLXN0YXRpYyB2b2lkIHZtYnVzX2J1c19leGl0KHZvaWQpCi17Ci0Jc3RydWN0IHZtYnVzX2RyaXZlcl9jb250ZXh0ICp2bWJ1c19kcnZfY3R4ID0gJnZtYnVzX2RydjsKLQotCXN0cnVjdCBodl9kZXZpY2UgKmRldl9jdHggPSAmdm1idXNfZHJ2LmRldmljZV9jdHg7Ci0KLQl2bWJ1c19yZWxlYXNlX3VuYXR0YWNoZWRfY2hhbm5lbHMoKTsKLQl2bWJ1c19kaXNjb25uZWN0KCk7Ci0Jb25fZWFjaF9jcHUoaHZfc3luaWNfY2xlYW51cCwgTlVMTCwgMSk7Ci0KLQlodl9jbGVhbnVwKCk7Ci0KLQkvKiBVbnJlZ2lzdGVyIHRoZSByb290IGJ1cyBkZXZpY2UgKi8KLQlkZXZpY2VfdW5yZWdpc3RlcigmZGV2X2N0eC0+ZGV2aWNlKTsKLQotCWJ1c191bnJlZ2lzdGVyKCZ2bWJ1c19kcnZfY3R4LT5idXMpOwotCi0JZnJlZV9pcnEodm1idXNfaXJxLCBOVUxMKTsKLQotCXRhc2tsZXRfa2lsbCgmdm1idXNfZHJ2X2N0eC0+bXNnX2RwYyk7Ci0JdGFza2xldF9raWxsKCZ2bWJ1c19kcnZfY3R4LT5ldmVudF9kcGMpOwotfQotCi0KLS8qKgotICogdm1idXNfY2hpbGRfZHJpdmVyX3JlZ2lzdGVyKCkgLSBSZWdpc3RlciBhIHZtYnVzJ3MgY2hpbGQgZHJpdmVyCi0gKiBAZHJ2OiAgICAgICAgUG9pbnRlciB0byBkcml2ZXIgc3RydWN0dXJlIHlvdSB3YW50IHRvIHJlZ2lzdGVyCi0gKgotICoKLSAqIFJlZ2lzdGVycyB0aGUgZ2l2ZW4gZHJpdmVyIHdpdGggTGludXggdGhyb3VnaCB0aGUgJ2RyaXZlcl9yZWdpc3RlcigpJyBjYWxsCi0gKiBBbmQgc2V0cyB1cCB0aGUgaHlwZXItdiB2bWJ1cyBoYW5kbGluZyBmb3IgdGhpcyBkcml2ZXIuCi0gKiBJdCB3aWxsIHJldHVybiB0aGUgc3RhdGUgb2YgdGhlICdkcml2ZXJfcmVnaXN0ZXIoKScgY2FsbC4KLSAqCi0gKiBNYWlubHkgdXNlZCBieSBIeXBlci1WIGRyaXZlcnMuCi0gKi8KLWludCB2bWJ1c19jaGlsZF9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKLXsKLQlpbnQgcmV0OwotCi0JRFBSSU5UX0lORk8oVk1CVVNfRFJWLCAiY2hpbGQgZHJpdmVyICglcCkgcmVnaXN0ZXJpbmcgLSBuYW1lICVzIiwKLQkJICAgIGRydiwgZHJ2LT5uYW1lKTsKLQotCS8qIFRoZSBjaGlsZCBkcml2ZXIgb24gdGhpcyB2bWJ1cyAqLwotCWRydi0+YnVzID0gJnZtYnVzX2Rydi5idXM7Ci0KLQlyZXQgPSBkcml2ZXJfcmVnaXN0ZXIoZHJ2KTsKLQotCXZtYnVzX3JlcXVlc3Rfb2ZmZXJzKCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTCh2bWJ1c19jaGlsZF9kcml2ZXJfcmVnaXN0ZXIpOwotCi0vKioKLSAqIHZtYnVzX2NoaWxkX2RyaXZlcl91bnJlZ2lzdGVyKCkgLSBVbnJlZ2lzdGVyIGEgdm1idXMncyBjaGlsZCBkcml2ZXIKLSAqIEBkcnY6ICAgICAgICBQb2ludGVyIHRvIGRyaXZlciBzdHJ1Y3R1cmUgeW91IHdhbnQgdG8gdW4tcmVnaXN0ZXIKLSAqCi0gKgotICogVW4tcmVnaXN0ZXIgdGhlIGdpdmVuIGRyaXZlciB3aXRoIExpbnV4IHRocm91Z2ggdGhlICdkcml2ZXJfdW5yZWdpc3RlcigpJwotICogY2FsbC4gQW5kIHVuZ2VnaXN0ZXJzIHRoZSBkcml2ZXIgZnJvbSB0aGUgSHlwZXItViB2bWJ1cyBoYW5kbGVyLgotICoKLSAqIE1haW5seSB1c2VkIGJ5IEh5cGVyLVYgZHJpdmVycy4KLSAqLwotdm9pZCB2bWJ1c19jaGlsZF9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQotewotCURQUklOVF9JTkZPKFZNQlVTX0RSViwgImNoaWxkIGRyaXZlciAoJXApIHVucmVnaXN0ZXJpbmcgLSBuYW1lICVzIiwKLQkJICAgIGRydiwgZHJ2LT5uYW1lKTsKLQotCWRyaXZlcl91bnJlZ2lzdGVyKGRydik7Ci0KLQlkcnYtPmJ1cyA9IE5VTEw7Ci19Ci1FWFBPUlRfU1lNQk9MKHZtYnVzX2NoaWxkX2RyaXZlcl91bnJlZ2lzdGVyKTsKLQotLyoKLSAqIHZtYnVzX2NoaWxkX2RldmljZV9jcmVhdGUgLSBDcmVhdGVzIGFuZCByZWdpc3RlcnMgYSBuZXcgY2hpbGQgZGV2aWNlCi0gKiBvbiB0aGUgdm1idXMuCi0gKi8KLXN0cnVjdCBodl9kZXZpY2UgKnZtYnVzX2NoaWxkX2RldmljZV9jcmVhdGUoc3RydWN0IGh2X2d1aWQgKnR5cGUsCi0JCQkJCSAgICBzdHJ1Y3QgaHZfZ3VpZCAqaW5zdGFuY2UsCi0JCQkJCSAgICBzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCkKLXsKLQlzdHJ1Y3QgaHZfZGV2aWNlICpjaGlsZF9kZXZpY2Vfb2JqOwotCi0JLyogQWxsb2NhdGUgdGhlIG5ldyBjaGlsZCBkZXZpY2UgKi8KLQljaGlsZF9kZXZpY2Vfb2JqID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGh2X2RldmljZSksIEdGUF9LRVJORUwpOwotCWlmICghY2hpbGRfZGV2aWNlX29iaikgewotCQlEUFJJTlRfRVJSKFZNQlVTX0RSViwKLQkJCSJ1bmFibGUgdG8gYWxsb2NhdGUgZGV2aWNlX2NvbnRleHQgZm9yIGNoaWxkIGRldmljZSIpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlEUFJJTlRfREJHKFZNQlVTX0RSViwgImNoaWxkIGRldmljZSAoJXApIGFsbG9jYXRlZCAtICIKLQkJInR5cGUgeyUwMnglMDJ4JTAyeCUwMngtJTAyeCUwMngtJTAyeCUwMngtIgotCQkiJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnh9LCIKLQkJImlkIHslMDJ4JTAyeCUwMnglMDJ4LSUwMnglMDJ4LSUwMnglMDJ4LSIKLQkJIiUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4fSIsCi0JCSZjaGlsZF9kZXZpY2Vfb2JqLT5kZXZpY2UsCi0JCXR5cGUtPmRhdGFbM10sIHR5cGUtPmRhdGFbMl0sIHR5cGUtPmRhdGFbMV0sIHR5cGUtPmRhdGFbMF0sCi0JCXR5cGUtPmRhdGFbNV0sIHR5cGUtPmRhdGFbNF0sIHR5cGUtPmRhdGFbN10sIHR5cGUtPmRhdGFbNl0sCi0JCXR5cGUtPmRhdGFbOF0sIHR5cGUtPmRhdGFbOV0sIHR5cGUtPmRhdGFbMTBdLCB0eXBlLT5kYXRhWzExXSwKLQkJdHlwZS0+ZGF0YVsxMl0sIHR5cGUtPmRhdGFbMTNdLCB0eXBlLT5kYXRhWzE0XSwgdHlwZS0+ZGF0YVsxNV0sCi0JCWluc3RhbmNlLT5kYXRhWzNdLCBpbnN0YW5jZS0+ZGF0YVsyXSwKLQkJaW5zdGFuY2UtPmRhdGFbMV0sIGluc3RhbmNlLT5kYXRhWzBdLAotCQlpbnN0YW5jZS0+ZGF0YVs1XSwgaW5zdGFuY2UtPmRhdGFbNF0sCi0JCWluc3RhbmNlLT5kYXRhWzddLCBpbnN0YW5jZS0+ZGF0YVs2XSwKLQkJaW5zdGFuY2UtPmRhdGFbOF0sIGluc3RhbmNlLT5kYXRhWzldLAotCQlpbnN0YW5jZS0+ZGF0YVsxMF0sIGluc3RhbmNlLT5kYXRhWzExXSwKLQkJaW5zdGFuY2UtPmRhdGFbMTJdLCBpbnN0YW5jZS0+ZGF0YVsxM10sCi0JCWluc3RhbmNlLT5kYXRhWzE0XSwgaW5zdGFuY2UtPmRhdGFbMTVdKTsKLQotCWNoaWxkX2RldmljZV9vYmotPmNoYW5uZWwgPSBjaGFubmVsOwotCW1lbWNweSgmY2hpbGRfZGV2aWNlX29iai0+ZGV2X3R5cGUsIHR5cGUsIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOwotCW1lbWNweSgmY2hpbGRfZGV2aWNlX29iai0+ZGV2X2luc3RhbmNlLCBpbnN0YW5jZSwKLQkgICAgICAgc2l6ZW9mKHN0cnVjdCBodl9ndWlkKSk7Ci0KLQotCXJldHVybiBjaGlsZF9kZXZpY2Vfb2JqOwotfQotCi0vKgotICogdm1idXNfY2hpbGRfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIGNoaWxkIGRldmljZQotICovCi1pbnQgdm1idXNfY2hpbGRfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBodl9kZXZpY2UgKmNoaWxkX2RldmljZV9vYmopCi17Ci0JaW50IHJldCA9IDA7Ci0KLQlzdGF0aWMgYXRvbWljX3QgZGV2aWNlX251bSA9IEFUT01JQ19JTklUKDApOwotCi0JRFBSSU5UX0RCRyhWTUJVU19EUlYsICJjaGlsZCBkZXZpY2UgKCVwKSByZWdpc3RlcmluZyIsCi0JCSAgIGNoaWxkX2RldmljZV9vYmopOwotCi0JLyogU2V0IHRoZSBkZXZpY2UgbmFtZS4gT3RoZXJ3aXNlLCBkZXZpY2VfcmVnaXN0ZXIoKSB3aWxsIGZhaWwuICovCi0JZGV2X3NldF9uYW1lKCZjaGlsZF9kZXZpY2Vfb2JqLT5kZXZpY2UsICJ2bWJ1c18wXyVkIiwKLQkJICAgICBhdG9taWNfaW5jX3JldHVybigmZGV2aWNlX251bSkpOwotCi0JLyogVGhlIG5ldyBkZXZpY2UgYmVsb25ncyB0byB0aGlzIGJ1cyAqLwotCWNoaWxkX2RldmljZV9vYmotPmRldmljZS5idXMgPSAmdm1idXNfZHJ2LmJ1czsgLyogZGV2aWNlLT5kZXYuYnVzOyAqLwotCWNoaWxkX2RldmljZV9vYmotPmRldmljZS5wYXJlbnQgPSAmdm1idXNfZGV2aWNlLT5kZXZpY2U7Ci0JY2hpbGRfZGV2aWNlX29iai0+ZGV2aWNlLnJlbGVhc2UgPSB2bWJ1c19kZXZpY2VfcmVsZWFzZTsKLQotCS8qCi0JICogUmVnaXN0ZXIgd2l0aCB0aGUgTERNLiBUaGlzIHdpbGwga2ljayBvZmYgdGhlIGRyaXZlci9kZXZpY2UKLQkgKiBiaW5kaW5nLi4ud2hpY2ggd2lsbCBldmVudHVhbGx5IGNhbGwgdm1idXNfbWF0Y2goKSBhbmQgdm1idXNfcHJvYmUoKQotCSAqLwotCXJldCA9IGRldmljZV9yZWdpc3RlcigmY2hpbGRfZGV2aWNlX29iai0+ZGV2aWNlKTsKLQotCS8qIHZtYnVzX3Byb2JlKCkgZXJyb3IgZG9lcyBub3QgZ2V0IHByb3BlcmdhdGUgdG8gZGV2aWNlX3JlZ2lzdGVyKCkuICovCi0JcmV0ID0gY2hpbGRfZGV2aWNlX29iai0+cHJvYmVfZXJyb3I7Ci0KLQlpZiAocmV0KQotCQlEUFJJTlRfRVJSKFZNQlVTX0RSViwgInVuYWJsZSB0byByZWdpc3RlciBjaGlsZCBkZXZpY2UgKCVwKSIsCi0JCQkgICAmY2hpbGRfZGV2aWNlX29iai0+ZGV2aWNlKTsKLQllbHNlCi0JCURQUklOVF9JTkZPKFZNQlVTX0RSViwgImNoaWxkIGRldmljZSAoJXApIHJlZ2lzdGVyZWQiLAotCQkJICAgICZjaGlsZF9kZXZpY2Vfb2JqLT5kZXZpY2UpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIHZtYnVzX2NoaWxkX2RldmljZV91bnJlZ2lzdGVyIC0gUmVtb3ZlIHRoZSBzcGVjaWZpZWQgY2hpbGQgZGV2aWNlCi0gKiBmcm9tIHRoZSB2bWJ1cy4KLSAqLwotdm9pZCB2bWJ1c19jaGlsZF9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2Vfb2JqKQotewotCi0JRFBSSU5UX0lORk8oVk1CVVNfRFJWLCAidW5yZWdpc3RlcmluZyBjaGlsZCBkZXZpY2UgKCVwKSIsCi0JCSAgICAmZGV2aWNlX29iai0+ZGV2aWNlKTsKLQotCS8qCi0JICogS2ljayBvZmYgdGhlIHByb2Nlc3Mgb2YgdW5yZWdpc3RlcmluZyB0aGUgZGV2aWNlLgotCSAqIFRoaXMgd2lsbCBjYWxsIHZtYnVzX3JlbW92ZSgpIGFuZCBldmVudHVhbGx5IHZtYnVzX2RldmljZV9yZWxlYXNlKCkKLQkgKi8KLQlkZXZpY2VfdW5yZWdpc3RlcigmZGV2aWNlX29iai0+ZGV2aWNlKTsKLQotCURQUklOVF9JTkZPKFZNQlVTX0RSViwgImNoaWxkIGRldmljZSAoJXApIHVucmVnaXN0ZXJlZCIsCi0JCSAgICAmZGV2aWNlX29iai0+ZGV2aWNlKTsKLX0KIAogLyoKICAqIHZtYnVzX3VldmVudCAtIGFkZCB1ZXZlbnQgZm9yIG91ciBkZXZpY2UKQEAgLTcyNiwyMSArMjQ1LDYgQEAKIAlzdHJ1Y3QgaHZfZGV2aWNlICpkZXYgPSBkZXZpY2VfdG9faHZfZGV2aWNlKGRldmljZSk7CiAJaW50IHJldDsKIAotCURQUklOVF9JTkZPKFZNQlVTX0RSViwgImdlbmVyYXRpbmcgdWV2ZW50IC0gVk1CVVNfREVWSUNFX0NMQVNTX0dVSUQ9eyIKLQkJICAgICIlMDJ4JTAyeCUwMnglMDJ4LSUwMnglMDJ4LSUwMnglMDJ4LSIKLQkJICAgICIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeH0iLAotCQkgICAgZGV2LT5kZXZfdHlwZS5kYXRhWzNdLCBkZXYtPmRldl90eXBlLmRhdGFbMl0sCi0JCSAgICBkZXYtPmRldl90eXBlLmRhdGFbMV0sIGRldi0+ZGV2X3R5cGUuZGF0YVswXSwKLQkJICAgIGRldi0+ZGV2X3R5cGUuZGF0YVs1XSwgZGV2LT5kZXZfdHlwZS5kYXRhWzRdLAotCQkgICAgZGV2LT5kZXZfdHlwZS5kYXRhWzddLCBkZXYtPmRldl90eXBlLmRhdGFbNl0sCi0JCSAgICBkZXYtPmRldl90eXBlLmRhdGFbOF0sIGRldi0+ZGV2X3R5cGUuZGF0YVs5XSwKLQkJICAgIGRldi0+ZGV2X3R5cGUuZGF0YVsxMF0sCi0JCSAgICBkZXYtPmRldl90eXBlLmRhdGFbMTFdLAotCQkgICAgZGV2LT5kZXZfdHlwZS5kYXRhWzEyXSwKLQkJICAgIGRldi0+ZGV2X3R5cGUuZGF0YVsxM10sCi0JCSAgICBkZXYtPmRldl90eXBlLmRhdGFbMTRdLAotCQkgICAgZGV2LT5kZXZfdHlwZS5kYXRhWzE1XSk7Ci0KIAlyZXQgPSBhZGRfdWV2ZW50X3ZhcihlbnYsICJWTUJVU19ERVZJQ0VfQ0xBU1NfR1VJRD17IgogCQkJICAgICAiJTAyeCUwMnglMDJ4JTAyeC0lMDJ4JTAyeC0lMDJ4JTAyeC0iCiAJCQkgICAgICIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeH0iLApAQCAtNzg5LDYgKzI5Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKKwogLyoKICAqIHZtYnVzX21hdGNoIC0gQXR0ZW1wdCB0byBtYXRjaCB0aGUgc3BlY2lmaWVkIGRldmljZSB0byB0aGUgc3BlY2lmaWVkIGRyaXZlcgogICovCkBAIC04MDAsNDAgKzMwNSwxMyBAQAogCiAJLyogV2UgZm91bmQgb3VyIGRyaXZlciA/ICovCiAJaWYgKG1lbWNtcCgmZGV2aWNlX2N0eC0+ZGV2X3R5cGUsICZkcnYtPmRldl90eXBlLAotCQkgICBzaXplb2Yoc3RydWN0IGh2X2d1aWQpKSA9PSAwKSB7Ci0KLQkJZGV2aWNlX2N0eC0+ZHJ2ID0gZHJ2LT5wcml2OwotCQlEUFJJTlRfSU5GTyhWTUJVU19EUlYsCi0JCQkgICAgImRldmljZSBvYmplY3QgKCVwKSBzZXQgdG8gZHJpdmVyIG9iamVjdCAoJXApIiwKLQkJCSAgICAmZGV2aWNlX2N0eCwKLQkJCSAgICBkZXZpY2VfY3R4LT5kcnYpOwotCisJCSAgIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpID09IDApCiAJCW1hdGNoID0gMTsKLQl9CisKIAlyZXR1cm4gbWF0Y2g7CiB9CiAKIC8qCi0gKiB2bWJ1c19wcm9iZV9mYWlsZWRfY2IgLSBDYWxsYmFjayB3aGVuIGEgZHJpdmVyIHByb2JlIGZhaWxlZCBpbiB2bWJ1c19wcm9iZSgpCi0gKgotICogV2UgbmVlZCBhIGNhbGxiYWNrIGJlY2F1c2Ugd2UgY2Fubm90IGludm9rZWQgZGV2aWNlX3VucmVnaXN0ZXIoKSBpbnNpZGUKLSAqIHZtYnVzX3Byb2JlKCkgc2luY2Ugdm1idXNfcHJvYmUoKSBtYXkgYmUgaW52b2tlZCBpbnNpZGUgZGV2aWNlX3JlZ2lzdGVyKCkKLSAqIGkuZS4gd2UgY2Fubm90IGNhbGwgZGV2aWNlX3VucmVnaXN0ZXIoKSBpbnNpZGUgZGV2aWNlX3JlZ2lzdGVyKCkKLSAqLwotc3RhdGljIHZvaWQgdm1idXNfcHJvYmVfZmFpbGVkX2NiKHN0cnVjdCB3b3JrX3N0cnVjdCAqY29udGV4dCkKLXsKLQlzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2VfY3R4ID0gKHN0cnVjdCBodl9kZXZpY2UgKiljb250ZXh0OwotCi0JLyoKLQkgKiBLaWNrIG9mZiB0aGUgcHJvY2VzcyBvZiB1bnJlZ2lzdGVyaW5nIHRoZSBkZXZpY2UuCi0JICogVGhpcyB3aWxsIGNhbGwgdm1idXNfcmVtb3ZlKCkgYW5kIGV2ZW50dWFsbHkgdm1idXNfZGV2aWNlX3JlbGVhc2UoKQotCSAqLwotCWRldmljZV91bnJlZ2lzdGVyKCZkZXZpY2VfY3R4LT5kZXZpY2UpOwotCi0JLyogcHV0X2RldmljZSgmZGV2aWNlX2N0eC0+ZGV2aWNlKTsgKi8KLX0KLQotLyoKICAqIHZtYnVzX3Byb2JlIC0gQWRkIHRoZSBuZXcgdm1idXMncyBjaGlsZCBkZXZpY2UKICAqLwogc3RhdGljIGludCB2bWJ1c19wcm9iZShzdHJ1Y3QgZGV2aWNlICpjaGlsZF9kZXZpY2UpCkBAIC04NDMsMjMgKzMyMSwxNSBAQAogCQkJZHJ2X3RvX2h2X2RydihjaGlsZF9kZXZpY2UtPmRyaXZlcik7CiAJc3RydWN0IGh2X2RldmljZSAqZGV2ID0gZGV2aWNlX3RvX2h2X2RldmljZShjaGlsZF9kZXZpY2UpOwogCi0JLyogTGV0IHRoZSBzcGVjaWZpYyBvcGVuLXNvdXJjZSBkcml2ZXIgaGFuZGxlcyB0aGUgcHJvYmUgaWYgaXQgY2FuICovCi0JaWYgKGRydi0+ZHJpdmVyLnByb2JlKSB7Ci0JCXJldCA9IGRldi0+cHJvYmVfZXJyb3IgPQotCQlkcnYtPmRyaXZlci5wcm9iZShjaGlsZF9kZXZpY2UpOwotCQlpZiAocmV0ICE9IDApIHsKLQkJCURQUklOVF9FUlIoVk1CVVNfRFJWLCAicHJvYmUoKSBmYWlsZWQgZm9yIGRldmljZSAlcyAiCi0JCQkJICAgIiglcCkgb24gZHJpdmVyICVzICglZCkuLi4iLAotCQkJCSAgIGRldl9uYW1lKGNoaWxkX2RldmljZSksIGNoaWxkX2RldmljZSwKLQkJCQkgICBjaGlsZF9kZXZpY2UtPmRyaXZlci0+bmFtZSwgcmV0KTsKKwlpZiAoZHJ2LT5wcm9iZSkgeworCQlyZXQgPSBkcnYtPnByb2JlKGRldik7CisJCWlmIChyZXQgIT0gMCkKKwkJCXByX2VycigicHJvYmUgZmFpbGVkIGZvciBkZXZpY2UgJXMgKCVkKVxuIiwKKwkJCSAgICAgICBkZXZfbmFtZShjaGlsZF9kZXZpY2UpLCByZXQpOwogCi0JCQlJTklUX1dPUksoJmRldi0+cHJvYmVfZmFpbGVkX3dvcmtfaXRlbSwKLQkJCQkgIHZtYnVzX3Byb2JlX2ZhaWxlZF9jYik7Ci0JCQlzY2hlZHVsZV93b3JrKCZkZXYtPnByb2JlX2ZhaWxlZF93b3JrX2l0ZW0pOwotCQl9CiAJfSBlbHNlIHsKLQkJRFBSSU5UX0VSUihWTUJVU19EUlYsICJwcm9iZSgpIG1ldGhvZCBub3Qgc2V0IGZvciBkcml2ZXIgLSAlcyIsCi0JCQkgICBjaGlsZF9kZXZpY2UtPmRyaXZlci0+bmFtZSk7CisJCXByX2VycigicHJvYmUgbm90IHNldCBmb3IgZHJpdmVyICVzXG4iLAorCQkgICAgICAgZGV2X25hbWUoY2hpbGRfZGV2aWNlKSk7CiAJCXJldCA9IC0xOwogCX0KIAlyZXR1cm4gcmV0OwpAQCAtODczLDI4ICszNDMsMTYgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBodl9kcml2ZXIgKmRydjsKIAotCS8qIFNwZWNpYWwgY2FzZSByb290IGJ1cyBkZXZpY2UgKi8KLQlpZiAoY2hpbGRfZGV2aWNlLT5wYXJlbnQgPT0gTlVMTCkgewotCQkvKgotCQkgKiBOby1vcCBzaW5jZSBpdCBpcyBzdGF0aWNhbGx5IGRlZmluZWQgYW5kIGhhbmRsZSBpbgotCQkgKiB2bWJ1c19idXNfZXhpdCgpCi0JCSAqLwotCQlyZXR1cm4gMDsKLQl9CisJc3RydWN0IGh2X2RldmljZSAqZGV2ID0gZGV2aWNlX3RvX2h2X2RldmljZShjaGlsZF9kZXZpY2UpOwogCiAJaWYgKGNoaWxkX2RldmljZS0+ZHJpdmVyKSB7CiAJCWRydiA9IGRydl90b19odl9kcnYoY2hpbGRfZGV2aWNlLT5kcml2ZXIpOwogCi0JCS8qCi0JCSAqIExldCB0aGUgc3BlY2lmaWMgb3Blbi1zb3VyY2UgZHJpdmVyIGhhbmRsZXMgdGhlIHJlbW92YWwgaWYKLQkJICogaXQgY2FuCi0JCSAqLwotCQlpZiAoZHJ2LT5kcml2ZXIucmVtb3ZlKSB7Ci0JCQlyZXQgPSBkcnYtPmRyaXZlci5yZW1vdmUoY2hpbGRfZGV2aWNlKTsKKwkJaWYgKGRydi0+cmVtb3ZlKSB7CisJCQlyZXQgPSBkcnYtPnJlbW92ZShkZXYpOwogCQl9IGVsc2UgewotCQkJRFBSSU5UX0VSUihWTUJVU19EUlYsCi0JCQkJICAgInJlbW92ZSgpIG1ldGhvZCBub3Qgc2V0IGZvciBkcml2ZXIgLSAlcyIsCi0JCQkJICAgY2hpbGRfZGV2aWNlLT5kcml2ZXItPm5hbWUpOworCQkJcHJfZXJyKCJyZW1vdmUgbm90IHNldCBmb3IgZHJpdmVyICVzXG4iLAorCQkJCWRldl9uYW1lKGNoaWxkX2RldmljZSkpOwogCQkJcmV0ID0gLTE7CiAJCX0KIAl9CkBAIC05MDIsMjEgKzM2MCwxNSBAQAogCXJldHVybiAwOwogfQogCisKIC8qCiAgKiB2bWJ1c19zaHV0ZG93biAtIFNodXRkb3duIGEgdm1idXMgZGV2aWNlCiAgKi8KIHN0YXRpYyB2b2lkIHZtYnVzX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmNoaWxkX2RldmljZSkKIHsKIAlzdHJ1Y3QgaHZfZHJpdmVyICpkcnY7CisJc3RydWN0IGh2X2RldmljZSAqZGV2ID0gZGV2aWNlX3RvX2h2X2RldmljZShjaGlsZF9kZXZpY2UpOwogCi0JLyogU3BlY2lhbCBjYXNlIHJvb3QgYnVzIGRldmljZSAqLwotCWlmIChjaGlsZF9kZXZpY2UtPnBhcmVudCA9PSBOVUxMKSB7Ci0JCS8qCi0JCSAqIE5vLW9wIHNpbmNlIGl0IGlzIHN0YXRpY2FsbHkgZGVmaW5lZCBhbmQgaGFuZGxlIGluCi0JCSAqIHZtYnVzX2J1c19leGl0KCkKLQkJICovCi0JCXJldHVybjsKLQl9CiAKIAkvKiBUaGUgZGV2aWNlIG1heSBub3QgYmUgYXR0YWNoZWQgeWV0ICovCiAJaWYgKCFjaGlsZF9kZXZpY2UtPmRyaXZlcikKQEAgLTkyNCwyNCArMzc2LDEyIEBACiAKIAlkcnYgPSBkcnZfdG9faHZfZHJ2KGNoaWxkX2RldmljZS0+ZHJpdmVyKTsKIAotCS8qIExldCB0aGUgc3BlY2lmaWMgb3Blbi1zb3VyY2UgZHJpdmVyIGhhbmRsZXMgdGhlIHJlbW92YWwgaWYgaXQgY2FuICovCi0JaWYgKGRydi0+ZHJpdmVyLnNodXRkb3duKQotCQlkcnYtPmRyaXZlci5zaHV0ZG93bihjaGlsZF9kZXZpY2UpOworCWlmIChkcnYtPnNodXRkb3duKQorCQlkcnYtPnNodXRkb3duKGRldik7CiAKIAlyZXR1cm47CiB9CiAKLS8qCi0gKiB2bWJ1c19idXNfcmVsZWFzZSAtIEZpbmFsIGNhbGxiYWNrIHJlbGVhc2Ugb2YgdGhlIHZtYnVzIHJvb3QgZGV2aWNlCi0gKi8KLXN0YXRpYyB2b2lkIHZtYnVzX2J1c19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKLXsKLQkvKiBGSVhNRSAqLwotCS8qIEVtcHR5IHJlbGVhc2UgZnVuY3Rpb25zIGFyZSBhIGJ1Zywgb3IgYSBtYWpvciBzaWduCi0JICogb2YgYSBwcm9ibGVtIGRlc2lnbiwgdGhpcyBNVVNUIEJFIEZJWEVEISAqLwotCWRldl9lcnIoZGV2aWNlLCAiJXMgbmVlZHMgdG8gYmUgZml4ZWQhXG4iLCBfX2Z1bmNfXyk7Ci0JV0FSTl9PTigxKTsKLX0KIAogLyoKICAqIHZtYnVzX2RldmljZV9yZWxlYXNlIC0gRmluYWwgY2FsbGJhY2sgcmVsZWFzZSBvZiB0aGUgdm1idXMgY2hpbGQgZGV2aWNlCkBAIC05NTIsOSArMzkyLDExMSBAQAogCiAJa2ZyZWUoZGV2aWNlX2N0eCk7CiAKLQkvKiAhIURPIE5PVCBSRUZFUkVOQ0UgZGV2aWNlX2N0eCBhbnltb3JlIGF0IHRoaXMgcG9pbnQhISAqLwogfQogCisvKiBUaGUgb25lIGFuZCBvbmx5IG9uZSAqLworc3RhdGljIHN0cnVjdCBidXNfdHlwZSAgaHZfYnVzID0geworCS5uYW1lID0JCSJ2bWJ1cyIsCisJLm1hdGNoID0JCXZtYnVzX21hdGNoLAorCS5zaHV0ZG93biA9CQl2bWJ1c19zaHV0ZG93biwKKwkucmVtb3ZlID0JCXZtYnVzX3JlbW92ZSwKKwkucHJvYmUgPQkJdm1idXNfcHJvYmUsCisJLnVldmVudCA9CQl2bWJ1c191ZXZlbnQsCisJLmRldl9hdHRycyA9CXZtYnVzX2RldmljZV9hdHRycywKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpkcml2ZXJfbmFtZSA9ICJoeXBlcnYiOworCisKK3N0cnVjdCBvbm1lc3NhZ2Vfd29ya19jb250ZXh0IHsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwlzdHJ1Y3QgaHZfbWVzc2FnZSBtc2c7Cit9OworCitzdGF0aWMgdm9pZCB2bWJ1c19vbm1lc3NhZ2Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG9ubWVzc2FnZV93b3JrX2NvbnRleHQgKmN0eDsKKworCWN0eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgb25tZXNzYWdlX3dvcmtfY29udGV4dCwKKwkJCSAgIHdvcmspOworCXZtYnVzX29ubWVzc2FnZSgmY3R4LT5tc2cpOworCWtmcmVlKGN0eCk7Cit9CisKKy8qCisgKiB2bWJ1c19vbl9tc2dfZHBjIC0gRFBDIHJvdXRpbmUgdG8gaGFuZGxlIG1lc3NhZ2VzIGZyb20gdGhlIGh5cGVydmlzaW9yCisgKi8KK3N0YXRpYyB2b2lkIHZtYnVzX29uX21zZ19kcGModW5zaWduZWQgbG9uZyBkYXRhKQoreworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJdm9pZCAqcGFnZV9hZGRyID0gaHZfY29udGV4dC5zeW5pY19tZXNzYWdlX3BhZ2VbY3B1XTsKKwlzdHJ1Y3QgaHZfbWVzc2FnZSAqbXNnID0gKHN0cnVjdCBodl9tZXNzYWdlICopcGFnZV9hZGRyICsKKwkJCQkgIFZNQlVTX01FU1NBR0VfU0lOVDsKKwlzdHJ1Y3Qgb25tZXNzYWdlX3dvcmtfY29udGV4dCAqY3R4OworCisJd2hpbGUgKDEpIHsKKwkJaWYgKG1zZy0+aGVhZGVyLm1lc3NhZ2VfdHlwZSA9PSBIVk1TR19OT05FKSB7CisJCQkvKiBubyBtc2cgKi8KKwkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJY3R4ID0ga21hbGxvYyhzaXplb2YoKmN0eCksIEdGUF9BVE9NSUMpOworCQkJaWYgKGN0eCA9PSBOVUxMKQorCQkJCWNvbnRpbnVlOworCQkJSU5JVF9XT1JLKCZjdHgtPndvcmssIHZtYnVzX29ubWVzc2FnZV93b3JrKTsKKwkJCW1lbWNweSgmY3R4LT5tc2csIG1zZywgc2l6ZW9mKCptc2cpKTsKKwkJCXF1ZXVlX3dvcmsodm1idXNfY29ubmVjdGlvbi53b3JrX3F1ZXVlLCAmY3R4LT53b3JrKTsKKwkJfQorCisJCW1zZy0+aGVhZGVyLm1lc3NhZ2VfdHlwZSA9IEhWTVNHX05PTkU7CisKKwkJLyoKKwkJICogTWFrZSBzdXJlIHRoZSB3cml0ZSB0byBNZXNzYWdlVHlwZSAoaWUgc2V0IHRvCisJCSAqIEhWTVNHX05PTkUpIGhhcHBlbnMgYmVmb3JlIHdlIHJlYWQgdGhlCisJCSAqIE1lc3NhZ2VQZW5kaW5nIGFuZCBFT01pbmcuIE90aGVyd2lzZSwgdGhlIEVPTWluZworCQkgKiB3aWxsIG5vdCBkZWxpdmVyIGFueSBtb3JlIG1lc3NhZ2VzIHNpbmNlIHRoZXJlIGlzCisJCSAqIG5vIGVtcHR5IHNsb3QKKwkJICovCisJCW1iKCk7CisKKwkJaWYgKG1zZy0+aGVhZGVyLm1lc3NhZ2VfZmxhZ3MubXNnX3BlbmRpbmcpIHsKKwkJCS8qCisJCQkgKiBUaGlzIHdpbGwgY2F1c2UgbWVzc2FnZSBxdWV1ZSByZXNjYW4gdG8KKwkJCSAqIHBvc3NpYmx5IGRlbGl2ZXIgYW5vdGhlciBtc2cgZnJvbSB0aGUKKwkJCSAqIGh5cGVydmlzb3IKKwkJCSAqLworCQkJd3Jtc3JsKEhWX1g2NF9NU1JfRU9NLCAwKTsKKwkJfQorCX0KK30KKworLyoKKyAqIHZtYnVzX29uX2lzciAtIElTUiByb3V0aW5lCisgKi8KK3N0YXRpYyBpbnQgdm1idXNfb25faXNyKHZvaWQpCit7CisJaW50IHJldCA9IDA7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwl2b2lkICpwYWdlX2FkZHI7CisJc3RydWN0IGh2X21lc3NhZ2UgKm1zZzsKKwl1bmlvbiBodl9zeW5pY19ldmVudF9mbGFncyAqZXZlbnQ7CisKKwlwYWdlX2FkZHIgPSBodl9jb250ZXh0LnN5bmljX21lc3NhZ2VfcGFnZVtjcHVdOworCW1zZyA9IChzdHJ1Y3QgaHZfbWVzc2FnZSAqKXBhZ2VfYWRkciArIFZNQlVTX01FU1NBR0VfU0lOVDsKKworCS8qIENoZWNrIGlmIHRoZXJlIGFyZSBhY3R1YWwgbXNncyB0byBiZSBwcm9jZXNzICovCisJaWYgKG1zZy0+aGVhZGVyLm1lc3NhZ2VfdHlwZSAhPSBIVk1TR19OT05FKQorCQlyZXQgfD0gMHgxOworCisJLyogVE9ETzogQ2hlY2sgaWYgdGhlcmUgYXJlIGV2ZW50cyB0byBiZSBwcm9jZXNzICovCisJcGFnZV9hZGRyID0gaHZfY29udGV4dC5zeW5pY19ldmVudF9wYWdlW2NwdV07CisJZXZlbnQgPSAodW5pb24gaHZfc3luaWNfZXZlbnRfZmxhZ3MgKilwYWdlX2FkZHIgKyBWTUJVU19NRVNTQUdFX1NJTlQ7CisKKwkvKiBTaW5jZSB3ZSBhcmUgYSBjaGlsZCwgd2Ugb25seSBuZWVkIHRvIGNoZWNrIGJpdCAwICovCisJaWYgKHN5bmNfdGVzdF9hbmRfY2xlYXJfYml0KDAsICh1bnNpZ25lZCBsb25nICopICZldmVudC0+ZmxhZ3MzMlswXSkpCisJCXJldCB8PSAweDI7CisKKwlyZXR1cm4gcmV0OworfQogCiAKIHN0YXRpYyBpcnFyZXR1cm5fdCB2bWJ1c19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQpAQCAtOTY2LDEwICs1MDgsMTAgQEAKIAkvKiBTY2hlZHVsZXMgYSBkcGMgaWYgbmVjZXNzYXJ5ICovCiAJaWYgKHJldCA+IDApIHsKIAkJaWYgKHRlc3RfYml0KDAsICh1bnNpZ25lZCBsb25nICopJnJldCkpCi0JCQl0YXNrbGV0X3NjaGVkdWxlKCZ2bWJ1c19kcnYubXNnX2RwYyk7CisJCQl0YXNrbGV0X3NjaGVkdWxlKCZtc2dfZHBjKTsKIAogCQlpZiAodGVzdF9iaXQoMSwgKHVuc2lnbmVkIGxvbmcgKikmcmV0KSkKLQkJCXRhc2tsZXRfc2NoZWR1bGUoJnZtYnVzX2Rydi5ldmVudF9kcGMpOworCQkJdGFza2xldF9zY2hlZHVsZSgmZXZlbnRfZHBjKTsKIAogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfSBlbHNlIHsKQEAgLTk3NywzNiArNTE5LDI5MSBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9faW5pdGRhdGEgbWljcm9zb2Z0X2h2X2RtaV90YWJsZVtdID0gewotCXsKLQkJLmlkZW50ID0gIkh5cGVyLVYiLAotCQkubWF0Y2hlcyA9IHsKLQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIk1pY3Jvc29mdCBDb3Jwb3JhdGlvbiIpLAotCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJWaXJ0dWFsIE1hY2hpbmUiKSwKLQkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIlZpcnR1YWwgTWFjaGluZSIpLAotCQl9LAotCX0sCi0JeyB9LAotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUoZG1pLCBtaWNyb3NvZnRfaHZfZG1pX3RhYmxlKTsKLQotc3RhdGljIGludCBfX2luaXQgdm1idXNfaW5pdCh2b2lkKQorLyoKKyAqIHZtYnVzX2J1c19pbml0IC1NYWluIHZtYnVzIGRyaXZlciBpbml0aWFsaXphdGlvbiByb3V0aW5lLgorICoKKyAqIEhlcmUsIHdlCisgKgktIGluaXRpYWxpemUgdGhlIHZtYnVzIGRyaXZlciBjb250ZXh0CisgKgktIGludm9rZSB0aGUgdm1idXMgaHYgbWFpbiBpbml0IHJvdXRpbmUKKyAqCS0gZ2V0IHRoZSBpcnEgcmVzb3VyY2UKKyAqCS0gcmV0cmlldmUgdGhlIGNoYW5uZWwgb2ZmZXJzCisgKi8KK3N0YXRpYyBpbnQgdm1idXNfYnVzX2luaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0JRFBSSU5UX0lORk8oVk1CVVNfRFJWLAotCQkiVm1idXMgaW5pdGlhbGl6aW5nLi4uLiBjdXJyZW50IGxvZyBsZXZlbCAweCV4ICgleCwleCkiLAotCQl2bWJ1c19sb2dsZXZlbCwgSElXT1JEKHZtYnVzX2xvZ2xldmVsKSwgTE9XT1JEKHZtYnVzX2xvZ2xldmVsKSk7Ci0JLyogVG9kbzogaXQgaXMgdXNlZCBmb3IgbG9nbGV2ZWwsIHRvIGJlIHBvcnRlZCB0byBuZXcga2VybmVsLiAqLworCWludCByZXQ7CisJdW5zaWduZWQgaW50IHZlY3RvcjsKIAotCWlmICghZG1pX2NoZWNrX3N5c3RlbShtaWNyb3NvZnRfaHZfZG1pX3RhYmxlKSkKLQkJcmV0dXJuIC1FTk9ERVY7CisJLyogSHlwZXJ2aXNvciBpbml0aWFsaXphdGlvbi4uLnNldHVwIGh5cGVyY2FsbCBwYWdlLi5ldGMgKi8KKwlyZXQgPSBodl9pbml0KCk7CisJaWYgKHJldCAhPSAwKSB7CisJCXByX2VycigiVW5hYmxlIHRvIGluaXRpYWxpemUgdGhlIGh5cGVydmlzb3IgLSAweCV4XG4iLCByZXQpOworCQlnb3RvIGNsZWFudXA7CisJfQogCi0JcmV0dXJuIHZtYnVzX2J1c19pbml0KCk7CisJLyogSW5pdGlhbGl6ZSB0aGUgYnVzIGNvbnRleHQgKi8KKwl0YXNrbGV0X2luaXQoJm1zZ19kcGMsIHZtYnVzX29uX21zZ19kcGMsIDApOworCXRhc2tsZXRfaW5pdCgmZXZlbnRfZHBjLCB2bWJ1c19vbl9ldmVudCwgMCk7CisKKwkvKiBOb3csIHJlZ2lzdGVyIHRoZSBidXMgIHdpdGggTERNICovCisJcmV0ID0gYnVzX3JlZ2lzdGVyKCZodl9idXMpOworCWlmIChyZXQpIHsKKwkJcmV0ID0gLTE7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkvKiBHZXQgdGhlIGludGVycnVwdCByZXNvdXJjZSAqLworCXJldCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgdm1idXNfaXNyLAorCQkJICBJUlFGX1NIQVJFRCB8IElSUUZfU0FNUExFX1JBTkRPTSwKKwkJCSAgZHJpdmVyX25hbWUsIHBkZXYpOworCisJaWYgKHJldCAhPSAwKSB7CisJCXByX2VycigiVW5hYmxlIHRvIHJlcXVlc3QgSVJRICVkXG4iLAorCQkJICAgcGRldi0+aXJxKTsKKworCQlidXNfdW5yZWdpc3RlcigmaHZfYnVzKTsKKworCQlyZXQgPSAtMTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCXZlY3RvciA9IElSUTBfVkVDVE9SICsgcGRldi0+aXJxOworCisJLyoKKwkgKiBOb3RpZnkgdGhlIGh5cGVydmlzb3Igb2Ygb3VyIGlycSBhbmQKKwkgKiBjb25uZWN0IHRvIHRoZSBob3N0LgorCSAqLworCW9uX2VhY2hfY3B1KGh2X3N5bmljX2luaXQsICh2b2lkICopJnZlY3RvciwgMSk7CisJcmV0ID0gdm1idXNfY29ubmVjdCgpOworCWlmIChyZXQpIHsKKwkJZnJlZV9pcnEocGRldi0+aXJxLCBwZGV2KTsKKwkJYnVzX3VucmVnaXN0ZXIoJmh2X2J1cyk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKworCXZtYnVzX3JlcXVlc3Rfb2ZmZXJzKCk7CisKK2NsZWFudXA6CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IHZtYnVzX2V4aXQodm9pZCkKKy8qKgorICogdm1idXNfY2hpbGRfZHJpdmVyX3JlZ2lzdGVyKCkgLSBSZWdpc3RlciBhIHZtYnVzJ3MgY2hpbGQgZHJpdmVyCisgKiBAZHJ2OiAgICAgICAgUG9pbnRlciB0byBkcml2ZXIgc3RydWN0dXJlIHlvdSB3YW50IHRvIHJlZ2lzdGVyCisgKgorICoKKyAqIFJlZ2lzdGVycyB0aGUgZ2l2ZW4gZHJpdmVyIHdpdGggTGludXggdGhyb3VnaCB0aGUgJ2RyaXZlcl9yZWdpc3RlcigpJyBjYWxsCisgKiBBbmQgc2V0cyB1cCB0aGUgaHlwZXItdiB2bWJ1cyBoYW5kbGluZyBmb3IgdGhpcyBkcml2ZXIuCisgKiBJdCB3aWxsIHJldHVybiB0aGUgc3RhdGUgb2YgdGhlICdkcml2ZXJfcmVnaXN0ZXIoKScgY2FsbC4KKyAqCisgKiBNYWlubHkgdXNlZCBieSBIeXBlci1WIGRyaXZlcnMuCisgKi8KK2ludCB2bWJ1c19jaGlsZF9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKIHsKLQl2bWJ1c19idXNfZXhpdCgpOwotCS8qIFRvZG86IGl0IGlzIHVzZWQgZm9yIGxvZ2xldmVsLCB0byBiZSBwb3J0ZWQgdG8gbmV3IGtlcm5lbC4gKi8KKwlpbnQgcmV0OworCisJcHJfaW5mbygiY2hpbGQgZHJpdmVyIHJlZ2lzdGVyaW5nIC0gbmFtZSAlc1xuIiwgZHJ2LT5uYW1lKTsKKworCS8qIFRoZSBjaGlsZCBkcml2ZXIgb24gdGhpcyB2bWJ1cyAqLworCWRydi0+YnVzID0gJmh2X2J1czsKKworCXJldCA9IGRyaXZlcl9yZWdpc3RlcihkcnYpOworCisJdm1idXNfcmVxdWVzdF9vZmZlcnMoKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKHZtYnVzX2NoaWxkX2RyaXZlcl9yZWdpc3Rlcik7CisKKy8qKgorICogdm1idXNfY2hpbGRfZHJpdmVyX3VucmVnaXN0ZXIoKSAtIFVucmVnaXN0ZXIgYSB2bWJ1cydzIGNoaWxkIGRyaXZlcgorICogQGRydjogICAgICAgIFBvaW50ZXIgdG8gZHJpdmVyIHN0cnVjdHVyZSB5b3Ugd2FudCB0byB1bi1yZWdpc3RlcgorICoKKyAqCisgKiBVbi1yZWdpc3RlciB0aGUgZ2l2ZW4gZHJpdmVyIHdpdGggTGludXggdGhyb3VnaCB0aGUgJ2RyaXZlcl91bnJlZ2lzdGVyKCknCisgKiBjYWxsLiBBbmQgdW5nZWdpc3RlcnMgdGhlIGRyaXZlciBmcm9tIHRoZSBIeXBlci1WIHZtYnVzIGhhbmRsZXIuCisgKgorICogTWFpbmx5IHVzZWQgYnkgSHlwZXItViBkcml2ZXJzLgorICovCit2b2lkIHZtYnVzX2NoaWxkX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCit7CisJcHJfaW5mbygiY2hpbGQgZHJpdmVyIHVucmVnaXN0ZXJpbmcgLSBuYW1lICVzXG4iLCBkcnYtPm5hbWUpOworCisJZHJpdmVyX3VucmVnaXN0ZXIoZHJ2KTsKKworCWRydi0+YnVzID0gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0wodm1idXNfY2hpbGRfZHJpdmVyX3VucmVnaXN0ZXIpOworCisvKgorICogdm1idXNfY2hpbGRfZGV2aWNlX2NyZWF0ZSAtIENyZWF0ZXMgYW5kIHJlZ2lzdGVycyBhIG5ldyBjaGlsZCBkZXZpY2UKKyAqIG9uIHRoZSB2bWJ1cy4KKyAqLworc3RydWN0IGh2X2RldmljZSAqdm1idXNfY2hpbGRfZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgaHZfZ3VpZCAqdHlwZSwKKwkJCQkJICAgIHN0cnVjdCBodl9ndWlkICppbnN0YW5jZSwKKwkJCQkJICAgIHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsKQoreworCXN0cnVjdCBodl9kZXZpY2UgKmNoaWxkX2RldmljZV9vYmo7CisKKwkvKiBBbGxvY2F0ZSB0aGUgbmV3IGNoaWxkIGRldmljZSAqLworCWNoaWxkX2RldmljZV9vYmogPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaHZfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjaGlsZF9kZXZpY2Vfb2JqKSB7CisJCXByX2VycigiVW5hYmxlIHRvIGFsbG9jYXRlIGRldmljZSBvYmplY3QgZm9yIGNoaWxkIGRldmljZVxuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCWNoaWxkX2RldmljZV9vYmotPmNoYW5uZWwgPSBjaGFubmVsOworCW1lbWNweSgmY2hpbGRfZGV2aWNlX29iai0+ZGV2X3R5cGUsIHR5cGUsIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOworCW1lbWNweSgmY2hpbGRfZGV2aWNlX29iai0+ZGV2X2luc3RhbmNlLCBpbnN0YW5jZSwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBodl9ndWlkKSk7CisKKworCXJldHVybiBjaGlsZF9kZXZpY2Vfb2JqOworfQorCisvKgorICogdm1idXNfY2hpbGRfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIGNoaWxkIGRldmljZQorICovCitpbnQgdm1idXNfY2hpbGRfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBodl9kZXZpY2UgKmNoaWxkX2RldmljZV9vYmopCit7CisJaW50IHJldCA9IDA7CisKKwlzdGF0aWMgYXRvbWljX3QgZGV2aWNlX251bSA9IEFUT01JQ19JTklUKDApOworCisJLyogU2V0IHRoZSBkZXZpY2UgbmFtZS4gT3RoZXJ3aXNlLCBkZXZpY2VfcmVnaXN0ZXIoKSB3aWxsIGZhaWwuICovCisJZGV2X3NldF9uYW1lKCZjaGlsZF9kZXZpY2Vfb2JqLT5kZXZpY2UsICJ2bWJ1c18wXyVkIiwKKwkJICAgICBhdG9taWNfaW5jX3JldHVybigmZGV2aWNlX251bSkpOworCisJLyogVGhlIG5ldyBkZXZpY2UgYmVsb25ncyB0byB0aGlzIGJ1cyAqLworCWNoaWxkX2RldmljZV9vYmotPmRldmljZS5idXMgPSAmaHZfYnVzOyAvKiBkZXZpY2UtPmRldi5idXM7ICovCisJY2hpbGRfZGV2aWNlX29iai0+ZGV2aWNlLnBhcmVudCA9ICZodl9wY2lfZGV2LT5kZXY7CisJY2hpbGRfZGV2aWNlX29iai0+ZGV2aWNlLnJlbGVhc2UgPSB2bWJ1c19kZXZpY2VfcmVsZWFzZTsKKworCS8qCisJICogUmVnaXN0ZXIgd2l0aCB0aGUgTERNLiBUaGlzIHdpbGwga2ljayBvZmYgdGhlIGRyaXZlci9kZXZpY2UKKwkgKiBiaW5kaW5nLi4ud2hpY2ggd2lsbCBldmVudHVhbGx5IGNhbGwgdm1idXNfbWF0Y2goKSBhbmQgdm1idXNfcHJvYmUoKQorCSAqLworCXJldCA9IGRldmljZV9yZWdpc3RlcigmY2hpbGRfZGV2aWNlX29iai0+ZGV2aWNlKTsKKworCWlmIChyZXQpCisJCXByX2VycigiVW5hYmxlIHRvIHJlZ2lzdGVyIGNoaWxkIGRldmljZVxuIik7CisJZWxzZQorCQlwcl9pbmZvKCJjaGlsZCBkZXZpY2UgJXMgcmVnaXN0ZXJlZFxuIiwKKwkJCWRldl9uYW1lKCZjaGlsZF9kZXZpY2Vfb2JqLT5kZXZpY2UpKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiB2bWJ1c19jaGlsZF9kZXZpY2VfdW5yZWdpc3RlciAtIFJlbW92ZSB0aGUgc3BlY2lmaWVkIGNoaWxkIGRldmljZQorICogZnJvbSB0aGUgdm1idXMuCisgKi8KK3ZvaWQgdm1idXNfY2hpbGRfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlX29iaikKK3sKKwkvKgorCSAqIEtpY2sgb2ZmIHRoZSBwcm9jZXNzIG9mIHVucmVnaXN0ZXJpbmcgdGhlIGRldmljZS4KKwkgKiBUaGlzIHdpbGwgY2FsbCB2bWJ1c19yZW1vdmUoKSBhbmQgZXZlbnR1YWxseSB2bWJ1c19kZXZpY2VfcmVsZWFzZSgpCisJICovCisJZGV2aWNlX3VucmVnaXN0ZXIoJmRldmljZV9vYmotPmRldmljZSk7CisKKwlwcl9pbmZvKCJjaGlsZCBkZXZpY2UgJXMgdW5yZWdpc3RlcmVkXG4iLAorCQlkZXZfbmFtZSgmZGV2aWNlX29iai0+ZGV2aWNlKSk7Cit9CisKKworLyoKKyAqIFZNQlVTIGlzIGFuIGFjcGkgZW51bWVyYXRlZCBkZXZpY2UuIEdldCB0aGUgdGhlIElSUSBpbmZvcm1hdGlvbgorICogZnJvbSBEU0RULgorICovCisKK3N0YXRpYyBhY3BpX3N0YXR1cyB2bWJ1c193YWxrX3Jlc291cmNlcyhzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqcmVzLCB2b2lkICppcnEpCit7CisKKwlpZiAocmVzLT50eXBlID09IEFDUElfUkVTT1VSQ0VfVFlQRV9JUlEpIHsKKwkJc3RydWN0IGFjcGlfcmVzb3VyY2VfaXJxICppcnFwOworCQlpcnFwID0gJnJlcy0+ZGF0YS5pcnE7CisKKwkJKigodW5zaWduZWQgaW50ICopaXJxKSA9IGlycXAtPmludGVycnVwdHNbMF07CisJfQorCisJcmV0dXJuIEFFX09LOworfQorCitzdGF0aWMgaW50IHZtYnVzX2FjcGlfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQoreworCWFjcGlfc3RhdHVzIHJlc3VsdDsKKworCXJlc3VsdCA9CisJYWNwaV93YWxrX3Jlc291cmNlcyhkZXZpY2UtPmhhbmRsZSwgTUVUSE9EX05BTUVfX0NSUywKKwkJCXZtYnVzX3dhbGtfcmVzb3VyY2VzLCAmaXJxKTsKKworCWlmIChBQ1BJX0ZBSUxVUkUocmVzdWx0KSkgeworCQljb21wbGV0ZSgmcHJvYmVfZXZlbnQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJY29tcGxldGUoJnByb2JlX2V2ZW50KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCB2bWJ1c19hY3BpX2RldmljZV9pZHNbXSA9IHsKKwl7IlZNQlVTIiwgMH0sCisJeyIiLCAwfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIHZtYnVzX2FjcGlfZGV2aWNlX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgYWNwaV9kcml2ZXIgdm1idXNfYWNwaV9kcml2ZXIgPSB7CisJLm5hbWUgPSAidm1idXMiLAorCS5pZHMgPSB2bWJ1c19hY3BpX2RldmljZV9pZHMsCisJLm9wcyA9IHsKKwkJLmFkZCA9IHZtYnVzX2FjcGlfYWRkLAorCX0sCit9OworCitzdGF0aWMgaW50IHZtYnVzX2FjcGlfaW5pdCh2b2lkKQoreworCWludCByZXN1bHQ7CisKKworCXJlc3VsdCA9IGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmdm1idXNfYWNwaV9kcml2ZXIpOworCWlmIChyZXN1bHQgPCAwKQorCQlyZXR1cm4gcmVzdWx0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZtYnVzX2FjcGlfZXhpdCh2b2lkKQoreworCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZ2bWJ1c19hY3BpX2RyaXZlcik7CisKKwlyZXR1cm47Cit9CisKKworc3RhdGljIGludCBfX2RldmluaXQgaHZfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJaHZfcGNpX2RldiA9IHBkZXY7CisKKwlwY2lfcHJvYmVfZXJyb3IgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAocGNpX3Byb2JlX2Vycm9yKQorCQlnb3RvIHByb2JlX2NsZWFudXA7CisKKwkvKgorCSAqIElmIHRoZSBQQ0kgc3ViLXN5dGVtIGRpZCBub3QgYXNzaWduIHVzIGFuCisJICogaXJxLCB1c2UgdGhlIGJpb3MgcHJvdmlkZWQgb25lLgorCSAqLworCisJaWYgKHBkZXYtPmlycSA9PSAwKQorCQlwZGV2LT5pcnEgPSBpcnE7CisKKwlwY2lfcHJvYmVfZXJyb3IgPSB2bWJ1c19idXNfaW5pdChwZGV2KTsKKworCWlmIChwY2lfcHJvYmVfZXJyb3IpCisJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKworcHJvYmVfY2xlYW51cDoKKwljb21wbGV0ZSgmcHJvYmVfZXZlbnQpOworCXJldHVybiBwY2lfcHJvYmVfZXJyb3I7CiB9CiAKIC8qCkBAIC0xMDIxLDEwICs4MTgsNTMgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbWljcm9zb2Z0X2h2X3BjaV90YWJsZSk7CiAKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBodl9idXNfZHJpdmVyID0geworCS5uYW1lID0gICAgICAgICAgICJodl9idXMiLAorCS5wcm9iZSA9ICAgICAgICAgIGh2X3BjaV9wcm9iZSwKKwkuaWRfdGFibGUgPSAgICAgICBtaWNyb3NvZnRfaHZfcGNpX3RhYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaHZfcGNpX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJaW5pdF9jb21wbGV0aW9uKCZwcm9iZV9ldmVudCk7CisKKwkvKgorCSAqIEdldCBpcnEgcmVzb3VyY2VzIGZpcnN0LgorCSAqLworCisJcmV0ID0gdm1idXNfYWNwaV9pbml0KCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXdhaXRfZm9yX2NvbXBsZXRpb24oJnByb2JlX2V2ZW50KTsKKworCWlmIChpcnEgPD0gMCkgeworCQl2bWJ1c19hY3BpX2V4aXQoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJdm1idXNfYWNwaV9leGl0KCk7CisJaW5pdF9jb21wbGV0aW9uKCZwcm9iZV9ldmVudCk7CisJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmaHZfYnVzX2RyaXZlcik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwkvKgorCSAqIEFsbCB0aGUgdm1idXMgaW5pdGlhbGl6YXRpb24gb2NjdXJzIHdpdGhpbiB0aGUKKwkgKiBodl9wY2lfcHJvYmUoKSBmdW5jdGlvbi4gV2FpdCBmb3IgaHZfcGNpX3Byb2JlKCkKKwkgKiB0byBjb21wbGV0ZS4KKwkgKi8KKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZwcm9iZV9ldmVudCk7CisKKwlpZiAocGNpX3Byb2JlX2Vycm9yKQorCQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmh2X2J1c19kcml2ZXIpOworCXJldHVybiBwY2lfcHJvYmVfZXJyb3I7Cit9CisKKwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1ZFUlNJT04oSFZfRFJWX1ZFUlNJT04pOwotbW9kdWxlX3BhcmFtKHZtYnVzX2lycSwgaW50LCBTX0lSVUdPKTsKLW1vZHVsZV9wYXJhbSh2bWJ1c19sb2dsZXZlbCwgaW50LCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbSh2bWJ1c19sb2dsZXZlbCwgaW50LCBTX0lSVUdPfFNfSVdVU1IpOwogCi1tb2R1bGVfaW5pdCh2bWJ1c19pbml0KTsKLW1vZHVsZV9leGl0KHZtYnVzX2V4aXQpOworbW9kdWxlX2luaXQoaHZfcGNpX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzX3BhY2tldF9mb3JtYXQuaCBiL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1c19wYWNrZXRfZm9ybWF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwYjJjMmIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzX3BhY2tldF9mb3JtYXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBACi0vKgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwOSwgTWljcm9zb2Z0IENvcnBvcmF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAotICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi0gKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlCi0gKiBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KLSAqCi0gKiBBdXRob3JzOgotICogICBIYWl5YW5nIFpoYW5nIDxoYWl5YW5nekBtaWNyb3NvZnQuY29tPgotICogICBIYW5rIEphbnNzZW4gIDxoamFuc3NlbkBtaWNyb3NvZnQuY29tPgotICoKLSAqLwotCi0jaWZuZGVmIF9WTUJVU1BBQ0tFVEZPUk1BVF9IXwotI2RlZmluZSBfVk1CVVNQQUNLRVRGT1JNQVRfSF8KLQotc3RydWN0IHZtcGFja2V0X2Rlc2NyaXB0b3IgewotCXUxNiB0eXBlOwotCXUxNiBvZmZzZXQ4OwotCXUxNiBsZW44OwotCXUxNiBmbGFnczsKLQl1NjQgdHJhbnNfaWQ7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3Qgdm1wYWNrZXRfaGVhZGVyIHsKLQl1MzIgcHJldl9wa3Rfc3RhcnRfb2Zmc2V0OwotCXN0cnVjdCB2bXBhY2tldF9kZXNjcmlwdG9yIGRlc2NyaXB0b3I7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3Qgdm10cmFuc2Zlcl9wYWdlX3JhbmdlIHsKLQl1MzIgYnl0ZV9jb3VudDsKLQl1MzIgYnl0ZV9vZmZzZXQ7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3Qgdm10cmFuc2Zlcl9wYWdlX3BhY2tldF9oZWFkZXIgewotCXN0cnVjdCB2bXBhY2tldF9kZXNjcmlwdG9yIGQ7Ci0JdTE2IHhmZXJfcGFnZXNldF9pZDsKLQlib29sIHNlbmRlcl9vd25zX3NldDsKLQl1OCByZXNlcnZlZDsKLQl1MzIgcmFuZ2VfY250OwotCXN0cnVjdCB2bXRyYW5zZmVyX3BhZ2VfcmFuZ2UgcmFuZ2VzWzFdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IHZtZ3BhZGxfcGFja2V0X2hlYWRlciB7Ci0Jc3RydWN0IHZtcGFja2V0X2Rlc2NyaXB0b3IgZDsKLQl1MzIgZ3BhZGw7Ci0JdTMyIHJlc2VydmVkOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IHZtYWRkX3JlbW92ZV90cmFuc2Zlcl9wYWdlX3NldCB7Ci0Jc3RydWN0IHZtcGFja2V0X2Rlc2NyaXB0b3IgZDsKLQl1MzIgZ3BhZGw7Ci0JdTE2IHhmZXJfcGFnZXNldF9pZDsKLQl1MTYgcmVzZXJ2ZWQ7Ci19IF9fcGFja2VkOwotCi0vKgotICogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyBhIHJhbmdlIGluIGd1ZXN0IHBoeXNpY2FsIHNwYWNlIHRoYXQgY2FuIGJlIG1hZGUgdG8KLSAqIGxvb2sgdmlydHVhbGx5IGNvbnRpZ3VvdXMuCi0gKi8KLXN0cnVjdCBncGFfcmFuZ2UgewotCXUzMiBieXRlX2NvdW50OwotCXUzMiBieXRlX29mZnNldDsKLQl1NjQgcGZuX2FycmF5WzBdOwotfTsKLQotLyoKLSAqIFRoaXMgaXMgdGhlIGZvcm1hdCBmb3IgYW4gRXN0YWJsaXNoIEdwYWRsIHBhY2tldCwgd2hpY2ggY29udGFpbnMgYSBoYW5kbGUgYnkKLSAqIHdoaWNoIHRoaXMgR1BBREwgd2lsbCBiZSBrbm93biBhbmQgYSBzZXQgb2YgR1BBIHJhbmdlcyBhc3NvY2lhdGVkIHdpdGggaXQuCi0gKiBUaGlzIGNhbiBiZSBjb252ZXJ0ZWQgdG8gYSBNREwgYnkgdGhlIGd1ZXN0IE9TLiAgSWYgdGhlcmUgYXJlIG11bHRpcGxlIEdQQQotICogcmFuZ2VzLCB0aGVuIHRoZSByZXN1bHRpbmcgTURMIHdpbGwgYmUgImNoYWluZWQsIiByZXByZXNlbnRpbmcgbXVsdGlwbGUgVkEKLSAqIHJhbmdlcy4KLSAqLwotc3RydWN0IHZtZXN0YWJsaXNoX2dwYWRsIHsKLQlzdHJ1Y3Qgdm1wYWNrZXRfZGVzY3JpcHRvciBkOwotCXUzMiBncGFkbDsKLQl1MzIgcmFuZ2VfY250OwotCXN0cnVjdCBncGFfcmFuZ2UgcmFuZ2VbMV07Ci19IF9fcGFja2VkOwotCi0vKgotICogVGhpcyBpcyB0aGUgZm9ybWF0IGZvciBhIFRlYXJkb3duIEdwYWRsIHBhY2tldCwgd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlCi0gKiBHUEFETCBoYW5kbGUgaW4gdGhlIEVzdGFibGlzaCBHcGFkbCBwYWNrZXQgd2lsbCBuZXZlciBiZSByZWZlcmVuY2VkIGFnYWluLgotICovCi1zdHJ1Y3Qgdm10ZWFyZG93bl9ncGFkbCB7Ci0Jc3RydWN0IHZtcGFja2V0X2Rlc2NyaXB0b3IgZDsKLQl1MzIgZ3BhZGw7Ci0JdTMyIHJlc2VydmVkOwkvKiBmb3IgYWxpZ25tZW50IHRvIGEgOC1ieXRlIGJvdW5kYXJ5ICovCi19IF9fcGFja2VkOwotCi0vKgotICogVGhpcyBpcyB0aGUgZm9ybWF0IGZvciBhIEdQQS1EaXJlY3QgcGFja2V0LCB3aGljaCBjb250YWlucyBhIHNldCBvZiBHUEEKLSAqIHJhbmdlcywgaW4gYWRkaXRpb24gdG8gY29tbWFuZHMgYW5kL29yIGRhdGEuCi0gKi8KLXN0cnVjdCB2bWRhdGFfZ3BhX2RpcmVjdCB7Ci0Jc3RydWN0IHZtcGFja2V0X2Rlc2NyaXB0b3IgZDsKLQl1MzIgcmVzZXJ2ZWQ7Ci0JdTMyIHJhbmdlX2NudDsKLQlzdHJ1Y3QgZ3BhX3JhbmdlIHJhbmdlWzFdOwotfSBfX3BhY2tlZDsKLQotLyogVGhpcyBpcyB0aGUgZm9ybWF0IGZvciBhIEFkZGl0aW9uYWwgRGF0YSBQYWNrZXQuICovCi1zdHJ1Y3Qgdm1hZGRpdGlvbmFsX2RhdGEgewotCXN0cnVjdCB2bXBhY2tldF9kZXNjcmlwdG9yIGQ7Ci0JdTY0IHRvdGFsX2J5dGVzOwotCXUzMiBvZmZzZXQ7Ci0JdTMyIGJ5dGVfY250OwotCXVuc2lnbmVkIGNoYXIgZGF0YVsxXTsKLX0gX19wYWNrZWQ7Ci0KLXVuaW9uIHZtcGFja2V0X2xhcmdlc3RfcG9zc2libGVfaGVhZGVyIHsKLQlzdHJ1Y3Qgdm1wYWNrZXRfZGVzY3JpcHRvciBzaW1wbGVfaGRyOwotCXN0cnVjdCB2bXRyYW5zZmVyX3BhZ2VfcGFja2V0X2hlYWRlciB4ZmVyX3BhZ2VfaGRyOwotCXN0cnVjdCB2bWdwYWRsX3BhY2tldF9oZWFkZXIgZ3BhZGxfaGRyOwotCXN0cnVjdCB2bWFkZF9yZW1vdmVfdHJhbnNmZXJfcGFnZV9zZXQgYWRkX3JtX3hmZXJfcGFnZV9oZHI7Ci0Jc3RydWN0IHZtZXN0YWJsaXNoX2dwYWRsIGVzdGFibGlzaF9ncGFkbF9oZHI7Ci0Jc3RydWN0IHZtdGVhcmRvd25fZ3BhZGwgdGVhcmRvd25fZ3BhZGxfaGRyOwotCXN0cnVjdCB2bWRhdGFfZ3BhX2RpcmVjdCBkYXRhX2dwYV9kaXJlY3RfaGRyOwotfTsKLQotI2RlZmluZSBWTVBBQ0tFVF9EQVRBX1NUQVJUX0FERFJFU1MoX19wYWNrZXQpCVwKLQkodm9pZCAqKSgoKHVuc2lnbmVkIGNoYXIgKilfX3BhY2tldCkgKwlcCi0JICgoc3RydWN0IHZtcGFja2V0X2Rlc2NyaXB0b3IpX19wYWNrZXQpLT5vZmZzZXQ4ICogOCkKLQotI2RlZmluZSBWTVBBQ0tFVF9EQVRBX0xFTkdUSChfX3BhY2tldCkJCVwKLQkoKCgoc3RydWN0IHZtcGFja2V0X2Rlc2NyaXB0b3IpX19wYWNrZXQpLT5sZW44IC0JXAotCSAgKChzdHJ1Y3Qgdm1wYWNrZXRfZGVzY3JpcHRvcilfX3BhY2tldCktPm9mZnNldDgpICogOCkKLQotI2RlZmluZSBWTVBBQ0tFVF9UUkFOU0ZFUl9NT0RFKF9fcGFja2V0KQlcCi0JKCgoc3RydWN0IElNUEFDVClfX3BhY2tldCktPnR5cGUpCi0KLWVudW0gdm1idXNfcGFja2V0X3R5cGUgewotCVZNX1BLVF9JTlZBTElECQkJCT0gMHgwLAotCVZNX1BLVF9TWU5DSAkJCQk9IDB4MSwKLQlWTV9QS1RfQUREX1hGRVJfUEFHRVNFVAkJCT0gMHgyLAotCVZNX1BLVF9STV9YRkVSX1BBR0VTRVQJCQk9IDB4MywKLQlWTV9QS1RfRVNUQUJMSVNIX0dQQURMCQkJPSAweDQsCi0JVk1fUEtUX1RFQVJET1dOX0dQQURMCQkJPSAweDUsCi0JVk1fUEtUX0RBVEFfSU5CQU5ECQkJPSAweDYsCi0JVk1fUEtUX0RBVEFfVVNJTkdfWEZFUl9QQUdFUwkJPSAweDcsCi0JVk1fUEtUX0RBVEFfVVNJTkdfR1BBREwJCQk9IDB4OCwKLQlWTV9QS1RfREFUQV9VU0lOR19HUEFfRElSRUNUCQk9IDB4OSwKLQlWTV9QS1RfQ0FOQ0VMX1JFUVVFU1QJCQk9IDB4YSwKLQlWTV9QS1RfQ09NUAkJCQk9IDB4YiwKLQlWTV9QS1RfREFUQV9VU0lOR19BRERJVElPTkFMX1BLVAk9IDB4YywKLQlWTV9QS1RfQURESVRJT05BTF9EQVRBCQkJPSAweGQKLX07Ci0KLSNkZWZpbmUgVk1CVVNfREFUQV9QQUNLRVRfRkxBR19DT01QTEVUSU9OX1JFUVVFU1RFRAkxCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzX3ByaXZhdGUuaCBiL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1c19wcml2YXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmMGQ4ZGYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzX3ByaXZhdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi0vKgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwOSwgTWljcm9zb2Z0IENvcnBvcmF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAotICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi0gKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlCi0gKiBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KLSAqCi0gKiBBdXRob3JzOgotICogICBIYWl5YW5nIFpoYW5nIDxoYWl5YW5nekBtaWNyb3NvZnQuY29tPgotICogICBIYW5rIEphbnNzZW4gIDxoamFuc3NlbkBtaWNyb3NvZnQuY29tPgotICoKLSAqLwotCi0KLSNpZm5kZWYgX1ZNQlVTX1BSSVZBVEVfSF8KLSNkZWZpbmUgX1ZNQlVTX1BSSVZBVEVfSF8KLQotI2luY2x1ZGUgImh2LmgiCi0jaW5jbHVkZSAidm1idXNfYXBpLmgiCi0jaW5jbHVkZSAiY2hhbm5lbC5oIgotI2luY2x1ZGUgImNoYW5uZWxfbWdtdC5oIgotI2luY2x1ZGUgInJpbmdfYnVmZmVyLmgiCi0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGFzbS9zeW5jX2JpdG9wcy5oPgotCi0KLS8qCi0gKiBNYXhpbXVtIGNoYW5uZWxzIGlzIGRldGVybWluZWQgYnkgdGhlIHNpemUgb2YgdGhlIGludGVycnVwdCBwYWdlCi0gKiB3aGljaCBpcyBQQUdFX1NJWkUuIDEvMiBvZiBQQUdFX1NJWkUgaXMgZm9yIHNlbmQgZW5kcG9pbnQgaW50ZXJydXB0Ci0gKiBhbmQgdGhlIG90aGVyIGlzIHJlY2VpdmUgZW5kcG9pbnQgaW50ZXJydXB0Ci0gKi8KLSNkZWZpbmUgTUFYX05VTV9DSEFOTkVMUwkoKFBBR0VfU0laRSA+PiAxKSA8PCAzKQkvKiAxNjM0OCBjaGFubmVscyAqLwotCi0vKiBUaGUgdmFsdWUgaGVyZSBtdXN0IGJlIGluIG11bHRpcGxlIG9mIDMyICovCi0vKiBUT0RPOiBOZWVkIHRvIG1ha2UgdGhpcyBjb25maWd1cmFibGUgKi8KLSNkZWZpbmUgTUFYX05VTV9DSEFOTkVMU19TVVBQT1JURUQJMjU2Ci0KLQotZW51bSB2bWJ1c19jb25uZWN0X3N0YXRlIHsKLQlESVNDT05ORUNURUQsCi0JQ09OTkVDVElORywKLQlDT05ORUNURUQsCi0JRElTQ09OTkVDVElORwotfTsKLQotI2RlZmluZSBNQVhfU0laRV9DSEFOTkVMX01FU1NBR0UJSFZfTUVTU0FHRV9QQVlMT0FEX0JZVEVfQ09VTlQKLQotc3RydWN0IHZtYnVzX2Nvbm5lY3Rpb24gewotCWVudW0gdm1idXNfY29ubmVjdF9zdGF0ZSBjb25uX3N0YXRlOwotCi0JYXRvbWljX3QgbmV4dF9ncGFkbF9oYW5kbGU7Ci0KLQkvKgotCSAqIFJlcHJlc2VudHMgY2hhbm5lbCBpbnRlcnJ1cHRzLiBFYWNoIGJpdCBwb3NpdGlvbiByZXByZXNlbnRzIGEKLQkgKiBjaGFubmVsLiAgV2hlbiBhIGNoYW5uZWwgc2VuZHMgYW4gaW50ZXJydXB0IHZpYSBWTUJVUywgaXQgZmluZHMgaXRzCi0JICogYml0IGluIHRoZSBzZW5kSW50ZXJydXB0UGFnZSwgc2V0IGl0IGFuZCBjYWxscyBIdiB0byBnZW5lcmF0ZSBhIHBvcnQKLQkgKiBldmVudC4gVGhlIG90aGVyIGVuZCByZWNlaXZlcyB0aGUgcG9ydCBldmVudCBhbmQgcGFyc2UgdGhlCi0JICogcmVjdkludGVycnVwdFBhZ2UgdG8gc2VlIHdoaWNoIGJpdCBpcyBzZXQKLQkgKi8KLQl2b2lkICppbnRfcGFnZTsKLQl2b2lkICpzZW5kX2ludF9wYWdlOwotCXZvaWQgKnJlY3ZfaW50X3BhZ2U7Ci0KLQkvKgotCSAqIDIgcGFnZXMgLSAxc3QgcGFnZSBmb3IgcGFyZW50LT5jaGlsZCBub3RpZmljYXRpb24gYW5kIDJuZAotCSAqIGlzIGNoaWxkLT5wYXJlbnQgbm90aWZpY2F0aW9uCi0JICovCi0Jdm9pZCAqbW9uaXRvcl9wYWdlczsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGNobl9tc2dfbGlzdDsKLQlzcGlubG9ja190IGNoYW5uZWxtc2dfbG9jazsKLQotCS8qIExpc3Qgb2YgY2hhbm5lbHMgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGNobl9saXN0OwotCXNwaW5sb2NrX3QgY2hhbm5lbF9sb2NrOwotCi0Jc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtfcXVldWU7Ci19OwotCi0KLXN0cnVjdCB2bWJ1c19tc2dpbmZvIHsKLQkvKiBCb29ra2VlcGluZyBzdHVmZiAqLwotCXN0cnVjdCBsaXN0X2hlYWQgbXNnbGlzdF9lbnRyeTsKLQotCS8qIFN5bmNocm9uaXplIHRoZSByZXF1ZXN0L3Jlc3BvbnNlIGlmIG5lZWRlZCAqLwotCWludCB3YWl0X2NvbmRpdGlvbjsKLQl3YWl0X3F1ZXVlX2hlYWRfdCAgd2FpdF9ldmVudDsKLQotCS8qIFRoZSBtZXNzYWdlIGl0c2VsZiAqLwotCXVuc2lnbmVkIGNoYXIgbXNnWzBdOwotfTsKLQotCi1leHRlcm4gc3RydWN0IHZtYnVzX2Nvbm5lY3Rpb24gdm1idXNfY29ubmVjdGlvbjsKLQotLyogR2VuZXJhbCB2bWJ1cyBpbnRlcmZhY2UgKi8KLQotc3RydWN0IGh2X2RldmljZSAqdm1idXNfY2hpbGRfZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgaHZfZ3VpZCAqdHlwZSwKLQkJCQkJIHN0cnVjdCBodl9ndWlkICppbnN0YW5jZSwKLQkJCQkJIHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsKTsKLQotaW50IHZtYnVzX2NoaWxkX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgaHZfZGV2aWNlICpjaGlsZF9kZXZpY2Vfb2JqKTsKLXZvaWQgdm1idXNfY2hpbGRfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlX29iaik7Ci0KLS8qIHN0YXRpYyB2b2lkICovCi0vKiBWbWJ1c0NoaWxkRGV2aWNlRGVzdHJveSggKi8KLS8qIHN0cnVjdCBodl9kZXZpY2UgKik7ICovCi0KLXN0cnVjdCB2bWJ1c19jaGFubmVsICpyZWxpZDJjaGFubmVsKHUzMiByZWxpZCk7Ci0KLQotLyogQ29ubmVjdGlvbiBpbnRlcmZhY2UgKi8KLQotaW50IHZtYnVzX2Nvbm5lY3Qodm9pZCk7Ci0KLWludCB2bWJ1c19kaXNjb25uZWN0KHZvaWQpOwotCi1pbnQgdm1idXNfcG9zdF9tc2codm9pZCAqYnVmZmVyLCBzaXplX3QgYnVmbGVuKTsKLQotaW50IHZtYnVzX3NldF9ldmVudCh1MzIgY2hpbGRfcmVsaWQpOwotCi12b2lkIHZtYnVzX29uX2V2ZW50KHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci0KLQotI2VuZGlmIC8qIF9WTUJVU19QUklWQVRFX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL0RvY3VtZW50YXRpb24vZGV2aWNlLnR4dCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vRG9jdW1lbnRhdGlvbi9kZXZpY2UudHh0CmluZGV4IDY5ZDk1NzAuLjFhYmI4MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vRG9jdW1lbnRhdGlvbi9kZXZpY2UudHh0CisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vRG9jdW1lbnRhdGlvbi9kZXZpY2UudHh0CkBAIC04LDM0ICs4LDY2IEBACiAKIEZpcnN0IGFsbG9jYXRlIG9uZSB1c2luZzoKIAotc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2UoKTsKK3N0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKHNpemVvZihzdHJ1Y3QgY2hpcF9zdGF0ZSkpOword2hlcmUgY2hpcF9zdGF0ZSBpcyBhIHN0cnVjdHVyZSBvZiBsb2NhbCBzdGF0ZSBkYXRhIGZvciB0aGlzIGluc3RhbmNlIG9mCit0aGUgY2hpcC4KKworVGhhdCBkYXRhIGNhbiBiZSBhY2Nlc3NlZCB1c2luZyBpaW9fcHJpdihzdHJ1Y3QgaWlvX2RldiAqKQogCiBUaGVuIGZpbGwgaW4gdGhlIGZvbGxvd2luZzoKIAotaW5kaW9fZGV2LT5kZXYucGFyZW50Ci0gIHRoZSBzdHJ1Y3QgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4KKy0gaW5kaW9fZGV2LT5kZXYucGFyZW50CisJU3RydWN0IGRldmljZSBhc3NvY2lhdGVkIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuCistIGluZGlvX2Rldi0+bmFtZQorCU5hbWUgb2YgdGhlIGRldmljZSBiZWluZyBkcml2ZW4gLSBtYWRlIGF2YWlsYWJsZSBhcyB0aGUgbmFtZQorCWF0dHJpYnV0ZSBpbiBzeXNmcy4KIAotaW5kaW9fZGV2LT5udW1faW50ZXJydXB0X2xpbmVzCi0gICBudW1iZXIgb2YgZXZlbnQgdHJpZ2dlcmluZyBoYXJkd2FyZSBsaW5lcyB0aGUgZGV2aWNlIGhhcy4KKy0gaW5kaW9fZGV2LT5pbmZvCisJcG9pbnRlciB0byBhIHN0cnVjdHVyZSB3aXRoIGVsZW1lbnRzIHRoYXQgdGVuZCB0byBiZSBmaXhlZCBmb3IKKwlsYXJnZSBzZXRzIG9mIGRpZmZlcmVudCBwYXJ0cyBzdXBwb3J0ZWQgYnkgYSBnaXZlbiBkcml2ZXIuCisJVGhpcyBjb250YWluczoKKwkqIGluZm8tPmRyaXZlcl9tb2R1bGU6CisJCVNldCB0byBUSElTX01PRFVMRS4gVXNlZCB0byBlbnN1cmUgY29ycmVjdCBvd25lcnNoaXAKKwkJb2YgdmFyaW91cyByZXNvdXJjZXMgYWxsb2NhdGUgYnkgdGhlIGNvcmUuCisJKiBpbmZvLT5udW1faW50ZXJydXB0X2xpbmVzOgorCQlOdW1iZXIgb2YgZXZlbnQgdHJpZ2dlcmluZyBoYXJkd2FyZSBsaW5lcyB0aGUgZGV2aWNlIGhhcy4KKwkqIGluZm8tPmV2ZW50X2F0dHJzOgorCQlBdHRyaWJ1dGVzIHVzZWQgdG8gZW5hYmxlIC8gZGlzYWJsZSBoYXJkd2FyZSBldmVudHMuCisJKiBpbmZvLT5hdHRyczoKKwkJR2VuZXJhbCBkZXZpY2UgYXR0cmlidXRlcy4gVHlwaWNhbGx5IHVzZWQgZm9yIHRoZSB3ZWlyZAorCQlhbmQgdGhlIHdvbmRlcmZ1bCBiaXRzIG5vdCBjb3ZlcmVkIGJ5IHRoZSBjaGFubmVsIHNwZWNpZmljYXRpb24uCisJKiBpbmZvLT5yZWFkX3JhdzoKKwkJUmF3IGRhdGEgcmVhZGluZyBmdW5jdGlvbi4gVXNlZCBmb3IgYm90aCByYXcgY2hhbm5lbCBhY2Nlc3MKKwkJYW5kIGZvciBhc3NvY2lhdGUgcGFyYW1ldGVycyBzdWNoIGFzIG9mZnNldHMgYW5kIHNjYWxlcy4KKwkqIGluZm8tPndyaXRlX3JhdzoKKwkJUmF3IHZhbHVlIHdyaXRpbmcgZnVuY3Rpb24uIFVzZWQgZm9yIHdyaXRhYmxlIGRldmljZSB2YWx1ZXMgc3VjaAorCQlhcyBEQUMgdmFsdWVzIGFuZCBjYWxpYm9mZnNldC4KKwkqIGluZm8tPnJlYWRfZXZlbnRfY29uZmlnOgorCQlUeXBpY2FsbHkgb25seSBzZXQgaWYgdGhlcmUgYXJlIHNvbWUgaW50ZXJydXB0IGxpbmVzLiAgVGhpcworCQlpcyB1c2VkIHRvIHJlYWQgaWYgYW4gb24gc2Vuc29yIGV2ZW50IGRldGVjdG9yIGlzIGVuYWJsZWQuCisJKiBpbmZvLT53cml0ZV9ldmVudF9jb25maWc6CisJCUVuYWJsZSAvIGRpc2FibGUgYW4gb24gc2Vuc29yIGV2ZW50IGRldGVjdG9yLgorCSogaW5mby0+cmVhZF9ldmVudF92YWx1ZToKKwkJUmVhZCB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggb24gc2Vuc29yIGV2ZW50IGRldGVjdG9ycy4gTm90ZSB0aGF0CisJCXRoZSBtZWFuaW5nIG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyBkZXBlbmRlbnQgb24gdGhlIGV2ZW50CisJCXR5cGUuCisJKiBpbmZvLT53cml0ZV9ldmVudF92YWx1ZToKKwkJV3JpdGUgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBvbiBzZW5zb3IgZXZlbnQgZGV0ZWN0b3JzLiBFLmcuCisJCWEgdGhyZXNob2xkIGFib3ZlIHdoaWNoIGFuIGludGVycnVwdCBvY2N1cnMuICBOb3RlIHRoYXQgdGhlCisJCW1lYW5pbmcgb2YgdGhlIHZhbHVlIHRvIGJlIHNldCBpcyBldmVudCB0eXBlIGRlcGVuZGFudC4KIAotaW5kaW9fZGV2LT5ldmVudF9hdHRycwotICAgYXR0cmlidXRlcyB1c2VkIHRvIGVuYWJsZSAvIGRpc2FibGUgaGFyZHdhcmUgZXZlbnRzIC0gbm90ZSB0aGUKLSAgIGF0dHJpYnV0ZXMgYXJlIGVtYmVkZGVkIGluIGlpb19ldmVudF9hdHRyIHN0cnVjdHVyZXMgd2l0aCBhbgotICAgYXNzb2NpYXRlZCBpaW9fZXZlbnRfaGFuZGxlciB3aGljaCBtYXkgb3IgbWF5IG5vdGUgYmUgc2hhcmVkLgotICAgSWYgbnVtX2ludGVycnVwdF9saW5lcyA9IDAsIHRoZW4gbm8gbmVlZCB0byBmaWxsIHRoaXMgaW4uCi0KLWluZGlvX2Rldi0+YXR0cnMKLSAgIGdlbmVyYWwgYXR0cmlidXRlcyBzdWNoIGFzIHBvbGxlZCBhY2Nlc3MgdG8gZGV2aWNlIGNoYW5uZWxzLgotCi1pbmRpb19kZXYtPmRldl9kYXRhCi0gICBwcml2YXRlIGRldmljZSBzcGVjaWZpYyBkYXRhLgotCi1pbmRpb19kZXYtPmRyaXZlcl9tb2R1bGUKLSAgIHR5cGljYWxseSBzZXQgdG8gVEhJU19NT0RVTEUuIFVzZWQgdG8gc3BlY2lmeSBvd25lcnNoaXAgb2Ygc29tZQotICAgaWlvIGNyZWF0ZWQgcmVzb3VyY2VzLgotCi1pbmRpb19kZXYtPm1vZGVzCi0gICB3aGV0aGVyIGRpcmVjdCBhY2Nlc3MgYW5kIC8gb3IgcmluZyBidWZmZXIgYWNjZXNzIGlzIHN1cHBvcnRlZC4KKy0gaW5kaW9fZGV2LT5tb2RlczoKKwlTcGVjaWZ5IHdoZXRoZXIgZGlyZWN0IGFjY2VzcyBhbmQgLyBvciByaW5nIGJ1ZmZlciBhY2Nlc3MgaXMgc3VwcG9ydGVkLgorLSBpbmRpb19kZXYtPnJpbmc6CisJQW4gb3B0aW9uYWwgYXNzb2NpYXRlZCBidWZmZXIuCistIGluZGlvX2Rldi0+cG9sbGZ1bmM6CisJUG9sbCBmdW5jdGlvbiByZWxhdGVkIGVsZW1lbnRzLiBUaGlzIGNvbnRyb2xzIHdoYXQgb2NjdXJzIHdoZW4gYSB0cmlnZ2VyCisJdG8gd2hpY2ggdGhpcyBkZXZpY2UgaXMgYXR0YWNoZWQgc2VuZHMgYW5kIGV2ZW50LgorLSBpbmRpb19kZXYtPmNoYW5uZWxzOgorCVNwZWNpZmljYXRpb24gb2YgZGV2aWNlIGNoYW5uZWxzLiBNb3N0IGF0dHJpYnV0ZXMgZXRjIGFyZSBidWlsdAorCWZvcm0gdGhpcyBzcGVjLgorLSBpbmRpb19kZXYtPm51bV9jaGFubmVsczoKKwlIb3cgbWFueSBjaGFubmVscyBhcmUgdGhlcmU/CiAKIE9uY2UgdGhlc2UgYXJlIHNldCB1cCwgYSBjYWxsIHRvIGlpb19kZXZpY2VfcmVnaXN0ZXIoaW5kaW9fZGV2KSwKIHdpbGwgcmVnaXN0ZXIgdGhlIGRldmljZSB3aXRoIHRoZSBpaW8gY29yZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vRG9jdW1lbnRhdGlvbi9nZW5lcmljX2J1ZmZlci5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9Eb2N1bWVudGF0aW9uL2dlbmVyaWNfYnVmZmVyLmMKaW5kZXggM2NjMThhYi4uZjgyODk0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9Eb2N1bWVudGF0aW9uL2dlbmVyaWNfYnVmZmVyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9Eb2N1bWVudGF0aW9uL2dlbmVyaWNfYnVmZmVyLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxzeXMvZGlyLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxwb2xsLmg+CiAjaW5jbHVkZSAiaWlvX3V0aWxzLmgiCiAKIC8qKgpAQCAtNTMsNiArNTQsMjQgQEAKIAlyZXR1cm4gYnl0ZXM7CiB9CiAKK3ZvaWQgcHJpbnQyYnl0ZShpbnQgaW5wdXQsIHN0cnVjdCBpaW9fY2hhbm5lbF9pbmZvICppbmZvKQoreworCS8qIHNoaWZ0IGJlZm9yZSBjb252ZXJzaW9uIHRvIGF2b2lkIHNpZ24gZXh0ZW5zaW9uCisJICAgb2YgbGVmdCBhbGlnbmVkIGRhdGEgKi8KKwlpbnB1dCA9IGlucHV0ID4+IGluZm8tPnNoaWZ0OworCWlmIChpbmZvLT5pc19zaWduZWQpIHsKKwkJaW50MTZfdCB2YWwgPSBpbnB1dDsKKwkJdmFsICY9ICgxIDw8IGluZm8tPmJpdHNfdXNlZCkgLSAxOworCQl2YWwgPSAoaW50MTZfdCkodmFsIDw8ICgxNiAtIGluZm8tPmJpdHNfdXNlZCkpID4+CisJCQkoMTYgLSBpbmZvLT5iaXRzX3VzZWQpOworCQlwcmludGYoIiUwNWYgICIsIHZhbCwKKwkJICAgICAgIChmbG9hdCkodmFsICsgaW5mby0+b2Zmc2V0KSppbmZvLT5zY2FsZSk7CisJfSBlbHNlIHsKKwkJdWludDE2X3QgdmFsID0gaW5wdXQ7CisJCXZhbCAmPSAoMSA8PCBpbmZvLT5iaXRzX3VzZWQpIC0gMTsKKwkJcHJpbnRmKCIlMDVmICIsICgoZmxvYXQpdmFsICsgaW5mby0+b2Zmc2V0KSppbmZvLT5zY2FsZSk7CisJfQorfQogLyoqCiAgKiBwcm9jZXNzX3NjYW4oKSAtIHByaW50IG91dCB0aGUgdmFsdWVzIGluIFNJIHVuaXRzCiAgKiBAZGF0YToJCXBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBzY2FuCkBAIC03MCwyNSArODksOCBAQAogCQlzd2l0Y2ggKGluZm9hcnJheVtrXS5ieXRlcykgewogCQkJLyogb25seSBhIGZldyBjYXNlcyBpbXBsZW1lbnRlZCBzbyBmYXIgKi8KIAkJY2FzZSAyOgotCQkJaWYgKGluZm9hcnJheVtrXS5pc19zaWduZWQpIHsKLQkJCQlpbnQxNl90IHZhbCA9ICooaW50MTZfdCAqKQotCQkJCQkoZGF0YQotCQkJCQkgKyBpbmZvYXJyYXlba10ubG9jYXRpb24pOwotCQkJCWlmICgodmFsID4+IGluZm9hcnJheVtrXS5iaXRzX3VzZWQpICYgMSkKLQkJCQkJdmFsID0gKHZhbCAmIGluZm9hcnJheVtrXS5tYXNrKSB8Ci0JCQkJCQl+aW5mb2FycmF5W2tdLm1hc2s7Ci0JCQkJcHJpbnRmKCIlMDVmICIsICgoZmxvYXQpdmFsICsKLQkJCQkJCSBpbmZvYXJyYXlba10ub2Zmc2V0KSoKLQkJCQkgICAgICAgaW5mb2FycmF5W2tdLnNjYWxlKTsKLQkJCX0gZWxzZSB7Ci0JCQkJdWludDE2X3QgdmFsID0gKih1aW50MTZfdCAqKQotCQkJCQkoZGF0YSArCi0JCQkJCSBpbmZvYXJyYXlba10ubG9jYXRpb24pOwotCQkJCXZhbCA9ICh2YWwgJiBpbmZvYXJyYXlba10ubWFzayk7Ci0JCQkJcHJpbnRmKCIlMDVmICIsICgoZmxvYXQpdmFsICsKLQkJCQkJCSBpbmZvYXJyYXlba10ub2Zmc2V0KSoKLQkJCQkgICAgICAgaW5mb2FycmF5W2tdLnNjYWxlKTsKLQkJCX0KKwkJCXByaW50MmJ5dGUoKih1aW50MTZfdCAqKShkYXRhICsgaW5mb2FycmF5W2tdLmxvY2F0aW9uKSwKKwkJCQkgICAmaW5mb2FycmF5W2tdKTsKIAkJCWJyZWFrOwogCQljYXNlIDg6CiAJCQlpZiAoaW5mb2FycmF5W2tdLmlzX3NpZ25lZCkgewpAQCAtMTMyLDEwICsxMzQsOSBAQAogCiAJaW50IGRhdGFyZHl0cmlnZ2VyID0gMTsKIAljaGFyICpkYXRhOwotCXNpemVfdCByZWFkX3NpemU7Ci0Jc3RydWN0IGlpb19ldmVudF9kYXRhIGRhdDsKKwlzc2l6ZV90IHJlYWRfc2l6ZTsKIAlpbnQgZGV2X251bSwgdHJpZ19udW07Ci0JY2hhciAqYnVmZmVyX2FjY2VzcywgKmJ1ZmZlcl9ldmVudDsKKwljaGFyICpidWZmZXJfYWNjZXNzOwogCWludCBzY2FuX3NpemU7CiAJaW50IG5vZXZlbnRzID0gMDsKIAljaGFyICpkdW1teTsKQEAgLTIxMCw3ICsyMTEsNyBAQAogCSAqLwogCXJldCA9IGJ1aWxkX2NoYW5uZWxfYXJyYXkoZGV2X2Rpcl9uYW1lLCAmaW5mb2FycmF5LCAmbnVtX2NoYW5uZWxzKTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ZigiUHJvYmxlbSByZWFkaW5nIHNjYW4gZWxlbWVudCBpbmZvcm1hdGlvbiBcbiIpOworCQlwcmludGYoIlByb2JsZW0gcmVhZGluZyBzY2FuIGVsZW1lbnQgaW5mb3JtYXRpb25cbiIpOwogCQlnb3RvIGVycm9yX2ZyZWVfdHJpZ2dlcm5hbWU7CiAJfQogCkBAIC0yNTEsNTQgKzI1MiwzMiBAQAogCX0KIAogCXJldCA9IGFzcHJpbnRmKCZidWZmZXJfYWNjZXNzLAotCQkgICAgICAgIi9kZXYvZGV2aWNlJWQ6YnVmZmVyMDphY2Nlc3MwIiwKKwkJICAgICAgICIvZGV2L2RldmljZSVkOmJ1ZmZlcjAiLAogCQkgICAgICAgZGV2X251bSk7CiAJaWYgKHJldCA8IDApIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9mcmVlX2RhdGE7CiAJfQogCi0JcmV0ID0gYXNwcmludGYoJmJ1ZmZlcl9ldmVudCwgIi9kZXYvZGV2aWNlJWQ6YnVmZmVyMDpldmVudDAiLCBkZXZfbnVtKTsKLQlpZiAocmV0IDwgMCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yX2ZyZWVfYnVmZmVyX2FjY2VzczsKLQl9CiAJLyogQXR0ZW1wdCB0byBvcGVuIG5vbiBibG9ja2luZyB0aGUgYWNjZXNzIGRldiAqLwogCWZwID0gb3BlbihidWZmZXJfYWNjZXNzLCBPX1JET05MWSB8IE9fTk9OQkxPQ0spOwogCWlmIChmcCA9PSAtMSkgeyAvKklmIGl0IGlzbid0IHRoZXJlIG1ha2UgdGhlIG5vZGUgKi8KIAkJcHJpbnRmKCJGYWlsZWQgdG8gb3BlbiAlc1xuIiwgYnVmZmVyX2FjY2Vzcyk7CiAJCXJldCA9IC1lcnJubzsKLQkJZ290byBlcnJvcl9mcmVlX2J1ZmZlcl9ldmVudDsKLQl9Ci0JLyogQXR0ZW1wdCB0byBvcGVuIHRoZSBldmVudCBhY2Nlc3MgZGV2IChibG9ja2luZyB0aGlzIHRpbWUpICovCi0JZnBfZXYgPSBmb3BlbihidWZmZXJfZXZlbnQsICJyYiIpOwotCWlmIChmcF9ldiA9PSBOVUxMKSB7Ci0JCXByaW50ZigiRmFpbGVkIHRvIG9wZW4gJXNcbiIsIGJ1ZmZlcl9ldmVudCk7Ci0JCXJldCA9IC1lcnJubzsKLQkJZ290byBlcnJvcl9jbG9zZV9idWZmZXJfYWNjZXNzOworCQlnb3RvIGVycm9yX2ZyZWVfYnVmZmVyX2FjY2VzczsKIAl9CiAKIAkvKiBXYWl0IGZvciBldmVudHMgMTAgdGltZXMgKi8KIAlmb3IgKGogPSAwOyBqIDwgbnVtX2xvb3BzOyBqKyspIHsKIAkJaWYgKCFub2V2ZW50cykgewotCQkJcmVhZF9zaXplID0gZnJlYWQoJmRhdCwKLQkJCQkJMSwKLQkJCQkJc2l6ZW9mKHN0cnVjdCBpaW9fZXZlbnRfZGF0YSksCi0JCQkJCWZwX2V2KTsKLQkJCXN3aXRjaCAoZGF0LmlkKSB7Ci0JCQljYXNlIElJT19FVkVOVF9DT0RFX1JJTkdfMTAwX0ZVTEw6Ci0JCQkJdG9yZWFkID0gYnVmX2xlbjsKLQkJCQlicmVhazsKLQkJCWNhc2UgSUlPX0VWRU5UX0NPREVfUklOR183NV9GVUxMOgotCQkJCXRvcmVhZCA9IGJ1Zl9sZW4qMy80OwotCQkJCWJyZWFrOwotCQkJY2FzZSBJSU9fRVZFTlRfQ09ERV9SSU5HXzUwX0ZVTEw6Ci0JCQkJdG9yZWFkID0gYnVmX2xlbi8yOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlwcmludGYoIlVuZXhwZWN0ZWRlZCBldmVudCBjb2RlXG4iKTsKLQkJCQljb250aW51ZTsKLQkJCX0KKwkJCXN0cnVjdCBwb2xsZmQgcGZkID0geworCQkJCS5mZCA9IGZwLAorCQkJCS5ldmVudHMgPSBQT0xMSU4sCisJCQl9OworCisJCQlwb2xsKCZwZmQsIDEsIC0xKTsKKwkJCXRvcmVhZCA9IGJ1Zl9sZW47CisKIAkJfSBlbHNlIHsKIAkJCXVzbGVlcCh0aW1lZGVsYXkpOwogCQkJdG9yZWFkID0gNjQ7CkBAIC0zMjAsMjIgKzI5OSwxOCBAQAogCS8qIFN0b3AgdGhlIHJpbmcgYnVmZmVyICovCiAJcmV0ID0gd3JpdGVfc3lzZnNfaW50KCJlbmFibGUiLCBidWZfZGlyX25hbWUsIDApOwogCWlmIChyZXQgPCAwKQotCQlnb3RvIGVycm9yX2Nsb3NlX2J1ZmZlcl9ldmVudDsKKwkJZ290byBlcnJvcl9jbG9zZV9idWZmZXJfYWNjZXNzOwogCiAJLyogRGlzY29ubmVjdCBmcm9tIHRoZSB0cmlnZ2VyIC0ganVzdCB3cml0ZSBhIGR1bW15IG5hbWUuKi8KIAl3cml0ZV9zeXNmc19zdHJpbmcoInRyaWdnZXIvY3VycmVudF90cmlnZ2VyIiwKIAkJCWRldl9kaXJfbmFtZSwgIk5VTEwiKTsKIAotZXJyb3JfY2xvc2VfYnVmZmVyX2V2ZW50OgotCWZjbG9zZShmcF9ldik7CiBlcnJvcl9jbG9zZV9idWZmZXJfYWNjZXNzOgogCWNsb3NlKGZwKTsKIGVycm9yX2ZyZWVfZGF0YToKIAlmcmVlKGRhdGEpOwogZXJyb3JfZnJlZV9idWZmZXJfYWNjZXNzOgogCWZyZWUoYnVmZmVyX2FjY2Vzcyk7Ci1lcnJvcl9mcmVlX2J1ZmZlcl9ldmVudDoKLQlmcmVlKGJ1ZmZlcl9ldmVudCk7CiBlcnJvcl9mcmVlX2J1Zl9kaXJfbmFtZToKIAlmcmVlKGJ1Zl9kaXJfbmFtZSk7CiBlcnJvcl9mcmVlX3RyaWdnZXJuYW1lOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9Eb2N1bWVudGF0aW9uL2lpb191dGlscy5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9Eb2N1bWVudGF0aW9uL2lpb191dGlscy5oCmluZGV4IGZkNzhlNGYuLjE1MGY0NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vRG9jdW1lbnRhdGlvbi9paW9fdXRpbHMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL0RvY3VtZW50YXRpb24vaWlvX3V0aWxzLmgKQEAgLTE2LDI1ICsxNiwxMSBAQAogCiAjZGVmaW5lIElJT19NQVhfTkFNRV9MRU5HVEggMzAKIAotI2RlZmluZSBJSU9fRVZfQ0xBU1NfQlVGRkVSCQkwCi0jZGVmaW5lIElJT19CVUZGRVJfRVZFTlRfQ09ERShjb2RlKQkJXAotCShJSU9fRVZfQ0xBU1NfQlVGRkVSIHwgKGNvZGUgPDwgOCkpCi0KLSNkZWZpbmUgSUlPX0VWRU5UX0NPREVfUklOR181MF9GVUxMCUlJT19CVUZGRVJfRVZFTlRfQ09ERSgwKQotI2RlZmluZSBJSU9fRVZFTlRfQ09ERV9SSU5HXzc1X0ZVTEwJSUlPX0JVRkZFUl9FVkVOVF9DT0RFKDEpCi0jZGVmaW5lIElJT19FVkVOVF9DT0RFX1JJTkdfMTAwX0ZVTEwJSUlPX0JVRkZFUl9FVkVOVF9DT0RFKDIpCi0KLQogI2RlZmluZSBGT1JNQVRfU0NBTl9FTEVNRU5UU19ESVIgIiVzOmJ1ZmZlcjAvc2Nhbl9lbGVtZW50cyIKICNkZWZpbmUgRk9STUFUX1RZUEVfRklMRSAiJXNfdHlwZSIKIAogY29uc3QgY2hhciAqaWlvX2RpciA9ICIvc3lzL2J1cy9paW8vZGV2aWNlcy8iOwogCi1zdHJ1Y3QgaWlvX2V2ZW50X2RhdGEgewotCWludCBpZDsKLQlfX3M2NCB0aW1lc3RhbXA7Ci19OwotCiAvKioKICAqIGlpb3V0aWxzX2JyZWFrX3VwX25hbWUoKSAtIGV4dHJhY3QgZ2VuZXJpYyBuYW1lIGZyb20gZnVsbCBjaGFubmVsIG5hbWUKICAqIEBmdWxsX25hbWU6IHRoZSBmdWxsIGNoYW5uZWwgbmFtZQpAQCAtODUsNiArNzEsNyBAQAogCXVuc2lnbmVkIGluZGV4OwogCXVuc2lnbmVkIGJ5dGVzOwogCXVuc2lnbmVkIGJpdHNfdXNlZDsKKwl1bnNpZ25lZCBzaGlmdDsKIAl1aW50NjRfdCBtYXNrOwogCXVuc2lnbmVkIGlzX3NpZ25lZDsKIAl1bnNpZ25lZCBlbmFibGVkOwpAQCAtMTAzLDYgKzkwLDcgQEAKIGlubGluZSBpbnQgaWlvdXRpbHNfZ2V0X3R5cGUodW5zaWduZWQgKmlzX3NpZ25lZCwKIAkJCSAgICAgdW5zaWduZWQgKmJ5dGVzLAogCQkJICAgICB1bnNpZ25lZCAqYml0c191c2VkLAorCQkJICAgICB1bnNpZ25lZCAqc2hpZnQsCiAJCQkgICAgIHVpbnQ2NF90ICptYXNrLAogCQkJICAgICBjb25zdCBjaGFyICpkZXZpY2VfZGlyLAogCQkJICAgICBjb25zdCBjaGFyICpuYW1lLApAQCAtMTU3LDcgKzE0NSw4IEBACiAJCQkJZ290byBlcnJvcl9mcmVlX2ZpbGVuYW1lOwogCQkJfQogCQkJZnNjYW5mKHN5c2ZzZnAsCi0JCQkgICAgICAgIiVjJXUvJXUiLCAmc2lnbmNoYXIsIGJpdHNfdXNlZCwgJnBhZGludCk7CisJCQkgICAgICAgIiVjJXUvJXU+PiV1IiwgJnNpZ25jaGFyLCBiaXRzX3VzZWQsCisJCQkgICAgICAgJnBhZGludCwgc2hpZnQpOwogCQkJKmJ5dGVzID0gcGFkaW50IC8gODsKIAkJCWlmICgqYml0c191c2VkID09IDY0KQogCQkJCSptYXNrID0gfjA7CkBAIC0zOTUsNiArMzg0LDcgQEAKIAkJCXJldCA9IGlpb3V0aWxzX2dldF90eXBlKCZjdXJyZW50LT5pc19zaWduZWQsCiAJCQkJCQkmY3VycmVudC0+Ynl0ZXMsCiAJCQkJCQkmY3VycmVudC0+Yml0c191c2VkLAorCQkJCQkJJmN1cnJlbnQtPnNoaWZ0LAogCQkJCQkJJmN1cnJlbnQtPm1hc2ssCiAJCQkJCQlkZXZpY2VfZGlyLAogCQkJCQkJY3VycmVudC0+bmFtZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vRG9jdW1lbnRhdGlvbi9vdmVydmlldy50eHQgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL0RvY3VtZW50YXRpb24vb3ZlcnZpZXcudHh0CmluZGV4IGQ5NzEwNmMuLmFmYzM5ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vRG9jdW1lbnRhdGlvbi9vdmVydmlldy50eHQKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9Eb2N1bWVudGF0aW9uL292ZXJ2aWV3LnR4dApAQCAtMyw4ICszLDcgQEAKIFRoZSBJbmR1c3RyaWFsIEkvTyBzdWJzeXN0ZW0gaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciBkZXZpY2VzCiB0aGF0IGluIHNvbWUgc2Vuc2UgYXJlIGFuYWxvZyB0byBkaWdpdGFsIGNvbnZlcnRlcnMgKEFEQ3MpLiBBcyBtYW55CiBhY3R1YWwgZGV2aWNlcyBjb21iaW5lIHNvbWUgQURDcyB3aXRoIGRpZ2l0YWwgdG8gYW5hbG9nIGNvbnZlcnRlcnMKLShEQUNzKSB0aGUgaW50ZW50aW9uIGlzIHRvIGFkZCB0aGF0IGZ1bmN0aW9uYWxpdHkgYXQgYSBmdXR1cmUgZGF0ZQotKGhlbmNlIHRoZSBuYW1lKS4KKyhEQUNzKSB0aGF0IGZ1bmN0aW9uYWxpdHkgaXMgYWxzbyBzdXBwb3J0ZWQuCiAKIFRoZSBhaW0gaXMgdG8gZmlsbCB0aGUgZ2FwIGJldHdlZW4gdGhlIHNvbWV3aGF0IHNpbWlsYXIgaHdtb24gYW5kCiBpbnB1dCBzdWJzeXN0ZW1zLiAgSHdtb24gaXMgdmVyeSBtdWNoIGRpcmVjdGVkIGF0IGxvdyBzYW1wbGUgcmF0ZQpAQCAtMzEsMzIgKzMwLDI4IEBACiBOb3RlOiBBIGdpdmVuIGRldmljZSBtYXkgaGF2ZSBvbmUgb3IgbW9yZSBldmVudCBjaGFubmVsLiAgVGhlc2UgZXZlbnRzIGFyZQogdHVybmVkIG9uIG9yIG9mZiAoaWYgcG9zc2libGUpIHZpYSBzeXNmcyBpbnRlcmZhY2VzLgogCi0qIEhhcmR3YXJlIHJpbmcgYnVmZmVyIHN1cHBvcnQuICBTb21lIHJlY2VudCBzZW5zb3JzIGhhdmUgaW5jbHVkZWQKKyogSGFyZHdhcmUgYnVmZmVyIHN1cHBvcnQuICBTb21lIHJlY2VudCBzZW5zb3JzIGhhdmUgaW5jbHVkZWQKIGZpZm8gLyByaW5nIGJ1ZmZlcnMgb24gdGhlIHNlbnNvciBjaGlwLiAgVGhlc2UgZ3JlYXRseSByZWR1Y2UgdGhlIGxvYWQKIG9uIHRoZSBob3N0IENQVSBieSBidWZmZXJpbmcgcmVsYXRpdmVseSBsYXJnZSBudW1iZXJzIG9mIGRhdGEgc2FtcGxlcwogYmFzZWQgb24gYW4gaW50ZXJuYWwgc2FtcGxpbmcgY2xvY2suIEV4YW1wbGVzIGluY2x1ZGUgVlRJIFNDQTMwMDAKLXNlcmllcyBhbmQgQW5hbG9nIERldmljZSBBRFhMMzQ1IGFjY2VsZXJvbWV0ZXJzLiAgRWFjaCByaW5nIGJ1ZmZlcgotdHlwaWNhbGx5IGhhcyBhbiBldmVudCBjaHJkZXYgKHNpbWlsYXIgdG8gdGhlIG1vcmUgZ2VuZXJhbCBvbmVzIGFib3ZlKQotdG8gcGFzcyBvbiBldmVudHMgc3VjaCBhcyBidWZmZXIgNTAlIGZ1bGwgYW5kIGFuIGFjY2VzcyBjaHJkZXYgdmlhCi13aGljaCB0aGUgcmF3IGRhdGEgaXQgc2VsZiBtYXkgYmUgcmVhZCBiYWNrLgorc2VyaWVzIGFuZCBBbmFsb2cgRGV2aWNlIEFEWEwzNDUgYWNjZWxlcm9tZXRlcnMuICBFYWNoIGJ1ZmZlciBzdXBwb3J0cworcG9sbGluZyB0byBlc3RhYmxpc2ggd2hlbiBkYXRhIGlzIGF2YWlsYWJsZS4KIAotKiBUcmlnZ2VyIGFuZCBzb2Z0d2FyZSByaW5nIGJ1ZmZlciBzdXBwb3J0LiBJbiBtYW55IGRhdGEgYW5hbHlzaXMKKyogVHJpZ2dlciBhbmQgc29mdHdhcmUgYnVmZmVyIHN1cHBvcnQuIEluIG1hbnkgZGF0YSBhbmFseXNpcwogYXBwbGljYXRpb25zIGl0IGl0IHVzZWZ1bCB0byBiZSBhYmxlIHRvIGNhcHR1cmUgZGF0YSBiYXNlZCBvbiBzb21lCiBleHRlcm5hbCBzaWduYWwgKHRyaWdnZXIpLiAgVGhlc2UgdHJpZ2dlcnMgbWlnaHQgYmUgYSBkYXRhIHJlYWR5CiBzaWduYWwsIGEgZ3BpbyBsaW5lIGNvbm5lY3RlZCB0byBzb21lIGV4dGVybmFsIHN5c3RlbSBvciBhbiBvbgogcHJvY2Vzc29yIHBlcmlvZGljIGludGVycnVwdC4gIEEgc2luZ2xlIHRyaWdnZXIgbWF5IGluaXRpYWxpemUgZGF0YQogY2FwdHVyZSBvciByZWFkaW5nIGZyb20gYSBudW1iZXIgb2Ygc2Vuc29ycy4gIFRoZXNlIHRyaWdnZXJzIGFyZQotdXNlZCBpbiBJSU8gdG8gZmlsbCBzb2Z0d2FyZSByaW5nIGJ1ZmZlcnMgYWN0aW5nIGluIGEgdmVyeSBzaW1pbGFyCit1c2VkIGluIElJTyB0byBmaWxsIHNvZnR3YXJlIGJ1ZmZlcnMgYWN0aW5nIGluIGEgdmVyeSBzaW1pbGFyCiBmYXNoaW9uIHRvIHRoZSBoYXJkd2FyZSBidWZmZXJzIGRlc2NyaWJlZCBhYm92ZS4KIAogT3RoZXIgZG9jdW1lbnRhdGlvbjoKIAotdXNlcnNwYWNlLnR4dCAtIG92ZXJ2aWV3IG9mIHJpbmcgYnVmZmVyIHJlYWRpbmcgZnJvbSB1c2Vyc3BhY2UuCi0KIGRldmljZS50eHQgLSBlbGVtZW50cyBvZiBhIHR5cGljYWwgZGV2aWNlIGRyaXZlci4KIAogdHJpZ2dlci50eHQgLSBlbGVtZW50cyBvZiBhIHR5cGljYWwgdHJpZ2dlciBkcml2ZXIuCiAKLXJpbmcudHh0IC0gYWRkaXRpb25hbCBlbGVtZW50cyByZXF1aXJlZCBmb3IgcmluZyBidWZmZXIgc3VwcG9ydC4KK3JpbmcudHh0IC0gYWRkaXRpb25hbCBlbGVtZW50cyByZXF1aXJlZCBmb3IgYnVmZmVyIHN1cHBvcnQuCiAKIHN5c2ZzLWJ1cy1paW8gLSBhYmkgZG9jdW1lbnRhdGlvbiBmaWxlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9Eb2N1bWVudGF0aW9uL3JpbmcudHh0IGIvZHJpdmVycy9zdGFnaW5nL2lpby9Eb2N1bWVudGF0aW9uL3JpbmcudHh0CmluZGV4IDM2OTZjMzYuLjdlOTllZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vRG9jdW1lbnRhdGlvbi9yaW5nLnR4dAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL0RvY3VtZW50YXRpb24vcmluZy50eHQKQEAgLTEsNTcgKzEsNTUgQEAKLVJpbmcgYnVmZmVyIHN1cHBvcnQgd2l0aGluIElJTworQnVmZmVyIHN1cHBvcnQgd2l0aGluIElJTwogCiBUaGlzIGRvY3VtZW50IGlzIGludGVuZGVkIGFzIGEgZ2VuZXJhbCBvdmVydmlldyBvZiB0aGUgZnVuY3Rpb25hbGl0eQotYSByaW5nIGJ1ZmZlciBtYXkgc3VwcGx5IGFuZCBob3cgaXQgaXMgc3BlY2lmaWVkIHdpdGhpbiBJSU8uICBGb3IgbW9yZQotc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gYSBnaXZlbiByaW5nIGJ1ZmZlciBpbXBsZW1lbnRhdGlvbiwgc2VlIHRoZQotY29tbWVudHMgaW4gdGhlIHNvdXJjZSBjb2RlLiAgTm90ZSB0aGF0IHRoZSBpbnRlbnRpb24gaXMgdG8gYWxsb3cKLXNvbWUgZHJpdmVycyB0byBzcGVjaWZ5IHJpbmcgYnVmZmVycyBjaG9pY2UgYXQgcHJvYmUgb3IgcnVudGltZSwgYnV0Ci1mb3Igbm93IHRoZSBzZWxlY3Rpb24gaXMgaGFyZCBjb2RlZCB3aXRoaW4gYSBnaXZlbiBkcml2ZXIuCithIGJ1ZmZlciBtYXkgc3VwcGx5IGFuZCBob3cgaXQgaXMgc3BlY2lmaWVkIHdpdGhpbiBJSU8uICBGb3IgbW9yZQorc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gYSBnaXZlbiBidWZmZXIgaW1wbGVtZW50YXRpb24sIHNlZSB0aGUKK2NvbW1lbnRzIGluIHRoZSBzb3VyY2UgY29kZS4gIE5vdGUgdGhhdCBzb21lIGRyaXZlcnMgYWxsb3cgYnVmZmVyCitpbXBsZW1lbnRhdGlvbiB0byBiZSBzZWxlY3RlZCBhdCBjb21waWxlIHRpbWUgdmlhIEtjb25maWcgb3B0aW9ucy4KIAotQSBnaXZlbiByaW5nIGJ1ZmZlciBpbXBsZW1lbnRhdGlvbiB0eXBpY2FsbHkgZW1iZWRkZWQgYSBzdHJ1Y3QKK0EgZ2l2ZW4gYnVmZmVyIGltcGxlbWVudGF0aW9uIHR5cGljYWxseSBlbWJlZHMgYSBzdHJ1Y3QKIGlpb19yaW5nX2J1ZmZlciBhbmQgaXQgaXMgYSBwb2ludGVyIHRvIHRoaXMgdGhhdCBpcyBwcm92aWRlZCB0byB0aGUKIElJTyBjb3JlLiBBY2Nlc3MgdG8gdGhlIGVtYmVkZGluZyBzdHJ1Y3R1cmUgaXMgdHlwaWNhbGx5IGRvbmUgdmlhCiBjb250YWluZXJfb2YgZnVuY3Rpb25zLgogCi1zdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyIGNvbnRhaW5zIDQgZnVuY3Rpb24gcG9pbnRlcnMKLShwcmVlbmFibGUsIHBvc3RlbmFibGUsIHByZWRpc2FibGUsIHBvc3RkaXNhYmxlKS4KLVRoZXNlIGFyZSB1c2VkIHRvIHBlcmZvcm0gaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgc3RlcHMgb24gZWl0aGVyIHNpZGUKLW9mIHRoZSBjb3JlIGNoYW5naW5nIGl0J3MgY3VycmVudCBtb2RlIHRvIGluZGljYXRlIHRoYXQgdGhlIHJpbmcgYnVmZmVyCitzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyIGNvbnRhaW5zIGEgc3RydWN0IGlpb19yaW5nX3NldHVwX29wcyAqc2V0dXBfb3BzCit3aGljaCBpbiB0dXJuIGNvbnRhaW5zIHRoZSA0IGZ1bmN0aW9uIHBvaW50ZXJzCisocHJlZW5hYmxlLCBwb3N0ZW5hYmxlLCBwcmVkaXNhYmxlIGFuZCBwb3N0ZGlzYWJsZSkuCitUaGVzZSBhcmUgdXNlZCB0byBwZXJmb3JtIGRldmljZSBzcGVjaWZpYyBzdGVwcyBvbiBlaXRoZXIgc2lkZQorb2YgdGhlIGNvcmUgY2hhbmdpbmcgaXQncyBjdXJyZW50IG1vZGUgdG8gaW5kaWNhdGUgdGhhdCB0aGUgYnVmZmVyCiBpcyBlbmFibGVkIG9yIGRpc2FibGVkIChhbG9uZyB3aXRoIGVuYWJsaW5nIHRyaWdnZXJpbmcgZXRjIGFzIGFwcHJvcHJpYXRlKS4KIAogQWxzbyBpbiBzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyIGlzIGEgc3RydWN0IGlpb19yaW5nX2FjY2Vzc19mdW5jcy4KIFRoZSBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gaGVyZSBhcmUgdXNlZCB0byBhbGxvdyB0aGUgY29yZSB0byBoYW5kbGUKLWFzIG11Y2ggcmluZyBidWZmZXIgZnVuY3Rpb25hbGl0eSBhcyBwb3NzaWJsZS4gTm90ZSBhbG1vc3QgYWxsIG9mIHRoZXNlCithcyBtdWNoIGJ1ZmZlciBmdW5jdGlvbmFsaXR5IGFzIHBvc3NpYmxlLiBOb3RlIGFsbW9zdCBhbGwgb2YgdGhlc2UKIGFyZSBvcHRpb25hbC4KIAogbWFya19pbl91c2UsIHVubWFya19pbl91c2UKLSAgQmFzaWNhbGx5IGluZGljYXRlIHRoYXQgbm90IGNoYW5nZXMgc2hvdWxkIGJlIG1hZGUgdG8gdGhlIHJpbmcKLSAgYnVmZmVyIHN0YXRlIHRoYXQgd2lsbCBlZmZlY3QgdGhlIGZvcm0gb2YgdGhlIGRhdGEgYmVpbmcgY2FwdHVyZXMKLSAgKGUuZy4gc2NhbiBlbGVtZW50cyBvciBsZW5ndGgpCisgIEJhc2ljYWxseSBpbmRpY2F0ZSB0aGF0IG5vdCBjaGFuZ2VzIHNob3VsZCBiZSBtYWRlIHRvIHRoZSBidWZmZXIgc3RhdGUgdGhhdAorICB3aWxsIGVmZmVjdCB0aGUgZm9ybSBvZiB0aGUgZGF0YSBiZWluZyBjYXB0dXJlcyAoZS5nLiBzY2FuIGVsZW1lbnRzIG9yIGxlbmd0aCkKIAogc3RvcmVfdG8KLSAgSWYgcG9zc2libGUsIHB1c2ggZGF0YSB0byByaW5nIGJ1ZmZlci4KKyAgSWYgcG9zc2libGUsIHB1c2ggZGF0YSB0byB0aGUgYnVmZmVyLgogCiByZWFkX2xhc3QKLSAgSWYgcG9zc2libGUgZ2V0IHRoZSBtb3N0IHJlY2VudCBlbnRyeSBmcm9tIHRoZSBidWZmZXIgKHdpdGhvdXQgcmVtb3ZhbCkuCisgIElmIHBvc3NpYmxlLCBnZXQgdGhlIG1vc3QgcmVjZW50IHNjYW4gZnJvbSB0aGUgYnVmZmVyICh3aXRob3V0IHJlbW92YWwpLgogICBUaGlzIHByb3ZpZGVzIHBvbGxpbmcgbGlrZSBmdW5jdGlvbmFsaXR5IHdoaWxzdCB0aGUgcmluZyBidWZmZXJpbmcgaXMgaW4KICAgdXNlIHdpdGhvdXQgYSBzZXBhcmF0ZSByZWFkIGZyb20gdGhlIGRldmljZS4KIAotcmlwX2xvdHMKLSAgVGhlIHByaW1hcnkgcmluZyBidWZmZXIgcmVhZGluZyBmdW5jdGlvbi4gTm90ZSB0aGF0IGl0IG1heSB3ZWxsIG5vdCByZXR1cm4KLSAgYXMgbXVjaCBkYXRhIGFzIHJlcXVlc3RlZC4gIFRoZSBkZWFkb2Zmc2V0IGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCBzb21lCi0gIGluaXRpYWwgZGF0YSBpbiB0aGUgZGF0YSBhcnJheSBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSB2YWxpZC4KK3JpcF9maXJzdF9uCisgIFRoZSBwcmltYXJ5IGJ1ZmZlciByZWFkaW5nIGZ1bmN0aW9uLiBOb3RlIHRoYXQgaXQgbWF5IHdlbGwgbm90IHJldHVybgorICBhcyBtdWNoIGRhdGEgYXMgcmVxdWVzdGVkLgogCiBtYXJrX3BhcmFtX2NoYW5nZWQKICAgVXNlZCB0byBpbmRpY2F0ZSB0aGF0IHNvbWV0aGluZyBoYXMgY2hhbmdlZC4gVXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoCiByZXF1ZXN0X3VwZGF0ZQogICBJZiBwYXJhbWV0ZXJzIGhhdmUgY2hhbmdlZCB0aGF0IHJlcXVpcmUgcmVpbml0aWFsaXphdGlvbiBvciBjb25maWd1cmF0aW9uIG9mCi0gIHRoZSByaW5nIGJ1ZmZlciB0aGlzIHdpbGwgdHJpZ2dlciBpdC4KKyAgdGhlIGJ1ZmZlciB0aGlzIHdpbGwgdHJpZ2dlciBpdC4KIAogZ2V0X2J5dGVzX3Blcl9kYXR1bSwgc2V0X2J5dGVzX3Blcl9kYXR1bQogICBHZXQvc2V0IHRoZSBudW1iZXIgb2YgYnl0ZXMgZm9yIGEgY29tcGxldGUgc2Nhbi4gKEFsbCBzYW1wbGVzICsgdGltZXN0YW1wKQogCiBnZXRfbGVuZ3RoIC8gc2V0X2xlbmd0aAotICBHZXQvc2V0IHRoZSBudW1iZXIgb2Ygc2FtcGxlIHNldHMgdGhhdCBtYXkgYmUgaGVsZCBieSB0aGUgYnVmZmVyLgorICBHZXQvc2V0IHRoZSBudW1iZXIgb2YgY29tcGxldGUgc2NhbnMgdGhhdCBtYXkgYmUgaGVsZCBieSB0aGUgYnVmZmVyLgogCiBpc19lbmFibGVkCiAgIFF1ZXJ5IGlmIHJpbmcgYnVmZmVyIGlzIGluIHVzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9Eb2N1bWVudGF0aW9uL3N5c2ZzLWJ1cy1paW8gYi9kcml2ZXJzL3N0YWdpbmcvaWlvL0RvY3VtZW50YXRpb24vc3lzZnMtYnVzLWlpbwppbmRleCA0OTE1YWVlLi40NjdjNDlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL0RvY3VtZW50YXRpb24vc3lzZnMtYnVzLWlpbworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL0RvY3VtZW50YXRpb24vc3lzZnMtYnVzLWlpbwpAQCAtNiw2ICs2LDEyIEBACiAJCUNvcnJlc3BvbmRzIHRvIGEgZ3JvdXBpbmcgb2Ygc2Vuc29yIGNoYW5uZWxzLiBYIGlzIHRoZSBJSU8KIAkJaW5kZXggb2YgdGhlIGRldmljZS4KIAorV2hhdDoJCS9zeXMvYnVzL2lpby9kZXZpY2VzL2RldmljZVtuXS9wb3dlcl9zdGF0ZQorS2VybmVsVmVyc2lvbjoJMi42LjM3CitDb250YWN0OglsaW51eC1paW9Admdlci5rZXJuZWwub3JnCitEZXNjcmlwdGlvbjoKKwkJVGhpcyBwcm9wZXJ0eSBnZXRzL3NldHMgdGhlIGRldmljZSBwb3dlciBzdGF0ZS4KKwogV2hhdDoJCS9zeXMvYnVzL2lpby9kZXZpY2VzL3RyaWdnZXJYCiBLZXJuZWxWZXJzaW9uOgkyLjYuMzUKIENvbnRhY3Q6CWxpbnV4LWlpb0B2Z2VyLmtlcm5lbC5vcmcKQEAgLTY5OCwzICs3MDQsMTAgQEAKIAkJd2l0aCBhbGwgX2VuIGF0dHJpYnV0ZXMgdG8gZXN0YWJsaXNoIHdoaWNoIGNoYW5uZWxzIGFyZSBwcmVzZW50LAogCQlhbmQgdGhlIHJlbGV2YW50IF90eXBlIGF0dHJpYnV0ZXMgdG8gZXN0YWJsaXNoIHRoZSBkYXRhIHN0b3JhZ2UKIAkJZm9ybWF0LgorCitXaGF0OgkJL3N5cy9idXMvaWlvL2RldmljZXMvZGV2aWNlWC9neXJvX3pfcXVhZHJhdHVyZV9jb3JyZWN0aW9uX3JhdworS2VybmVsVmVyc2lvbjoJMi42LjM4CitDb250YWN0OglsaW51eC1paW9AeHh4eHh4eHh4eHh4eHh4CitEZXNjcmlwdGlvbjoKKwkJVGhpcyBhdHRyaWJ1dGUgaXMgdXNlZCB0byByZWFkIHRoZSBhbW91bnQgb2YgcXVhZHJhdHVyZSBlcnJvcgorCQlwcmVzZW50IGluIHRoZSBkZXZpY2UgYXQgYSBnaXZlbiB0aW1lLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9Eb2N1bWVudGF0aW9uL3N5c2ZzLWJ1cy1paW8tbGlnaHQgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL0RvY3VtZW50YXRpb24vc3lzZnMtYnVzLWlpby1saWdodAppbmRleCA1ZDg0ODU2Li4yMWQyNzc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL0RvY3VtZW50YXRpb24vc3lzZnMtYnVzLWlpby1saWdodAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL0RvY3VtZW50YXRpb24vc3lzZnMtYnVzLWlpby1saWdodApAQCAtNjIsMyArNjIsMTYgQEAKIAkJc2Vuc2luZyBtb2RlLiBUaGlzIHZhbHVlIHNob3VsZCBiZSB0aGUgb3V0cHV0IGZyb20gYSByZWFkaW5nCiAJCWFuZCBpZiBleHByZXNzZWQgaW4gU0kgdW5pdHMsIHNob3VsZCBpbmNsdWRlIF9pbnB1dC4gSWYgdGhpcwogCQl2YWx1ZSBpcyBub3QgaW4gU0kgdW5pdHMsIHRoZW4gaXQgc2hvdWxkIGluY2x1ZGUgX3Jhdy4KKworV2hhdDoJCS9zeXMvYnVzL2lpby9kZXZpY2VzL2RldmljZVtuXS9pbGx1bWluYW5jZTBfdGFyZ2V0CitLZXJuZWxWZXJzaW9uOgkyLjYuMzcKK0NvbnRhY3Q6CWxpbnV4LWlpb0B2Z2VyLmtlcm5lbC5vcmcKK0Rlc2NyaXB0aW9uOgorCQlUaGlzIHByb3BlcnR5IGdldHMvc2V0cyB0aGUgbGFzdCBrbm93biBleHRlcm5hbAorCQlsdXggbWVhc3VyZW1lbnQgdXNlZCBpbi9mb3IgY2FsaWJyYXRpb24uCisKK1doYXQ6CQkvc3lzL2J1cy9paW8vZGV2aWNlcy9kZXZpY2Vbbl0vaWxsdW1pbmFuY2UwX2ludGVncmF0aW9uX3RpbWUKK0tlcm5lbFZlcnNpb246CTIuNi4zNworQ29udGFjdDoJbGludXgtaWlvQHZnZXIua2VybmVsLm9yZworRGVzY3JpcHRpb246CisJCVRoaXMgcHJvcGVydHkgZ2V0cy9zZXRzIHRoZSBzZW5zb3JzIEFEQyBhbmFsb2cgaW50ZWdyYXRpb24gdGltZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vRG9jdW1lbnRhdGlvbi9zeXNmcy1idXMtaWlvLWxpZ2h0LXRzbDI1ODMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL0RvY3VtZW50YXRpb24vc3lzZnMtYnVzLWlpby1saWdodC10c2wyNTgzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MDc4MWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL0RvY3VtZW50YXRpb24vc3lzZnMtYnVzLWlpby1saWdodC10c2wyNTgzCkBAIC0wLDAgKzEsMjAgQEAKK1doYXQ6CQkvc3lzL2J1cy9paW8vZGV2aWNlcy9kZXZpY2Vbbl0vbHV4X3RhYmxlCitLZXJuZWxWZXJzaW9uOgkyLjYuMzcKK0NvbnRhY3Q6CWxpbnV4LWlpb0B2Z2VyLmtlcm5lbC5vcmcKK0Rlc2NyaXB0aW9uOgorCQlUaGlzIHByb3BlcnR5IGdldHMvc2V0cyB0aGUgdGFibGUgb2YgY29lZmZpY2llbnRzCisJCXVzZWQgaW4gY2FsY3VsYXRpbmcgaWxsdW1pbmFuY2UgaW4gbHV4LgorCitXaGF0OgkJL3N5cy9idXMvaWlvL2RldmljZXMvZGV2aWNlW25dL2lsbHVtaW5hbmNlMF9jYWxpYnJhdGUKK0tlcm5lbFZlcnNpb246CTIuNi4zNworQ29udGFjdDoJbGludXgtaWlvQHZnZXIua2VybmVsLm9yZworRGVzY3JpcHRpb246CisJCVRoaXMgcHJvcGVydHkgY2F1c2VzIGFuIGludGVybmFsIGNhbGlicmF0aW9uIG9mIHRoZSBhbHMgZ2FpbiB0cmltCisJCXZhbHVlIHdoaWNoIGlzIGxhdGVyIHVzZWQgaW4gY2FsY3VsYXRpbmcgaWxsdW1pbmFuY2UgaW4gbHV4LgorCitXaGF0OgkJL3N5cy9idXMvaWlvL2RldmljZXMvZGV2aWNlW25dL2lsbHVtaW5hbmNlMF9pbnB1dF90YXJnZXQKK0tlcm5lbFZlcnNpb246CTIuNi4zNworQ29udGFjdDoJbGludXgtaWlvQHZnZXIua2VybmVsLm9yZworRGVzY3JpcHRpb246CisJCVRoaXMgcHJvcGVydHkgaXMgdGhlIGtub3duIGV4dGVybmFsbHkgaWxsdW1pbmFuY2UgKGluIGx1eCkuCisJCUl0IGlzIHVzZWQgaW4gdGhlIHByb2Nlc3Mgb2YgY2FsaWJyYXRpbmcgdGhlIGRldmljZSBhY2N1cmFjeS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vRG9jdW1lbnRhdGlvbi90cmlnZ2VyLnR4dCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vRG9jdW1lbnRhdGlvbi90cmlnZ2VyLnR4dAppbmRleCA2NTAxNTdmLi5mYzIwMTJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL0RvY3VtZW50YXRpb24vdHJpZ2dlci50eHQKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9Eb2N1bWVudGF0aW9uL3RyaWdnZXIudHh0CkBAIC01LDE0ICs1LDExIEBACiBzdWNoIHRyaWdnZXJzIGFyZSByZWdpc3RlcmVkIHdpdGggdGhlIGNvcmUgaW4gdGhlIHNhbWUgd2F5IGFzCiBzdGFuZC1hbG9uZSB0cmlnZ2Vycy4KIAotc3RydWN0IGlpb190cmlnICp0cmlnID0gaWlvX2FsbG9jYXRlX3RyaWdnZXIoKTsKK3N0cnVjdCBpaW9fdHJpZyAqdHJpZyA9IGlpb19hbGxvY2F0ZV90cmlnZ2VyKCI8dHJpZ2dlciBmb3JtYXQgc3RyaW5nPiIsIC4uLik7CiAKIGFsbG9jYXRlcyBhIHRyaWdnZXIgc3RydWN0dXJlLiAgVGhlIGtleSBlbGVtZW50cyB0byB0aGVuIGZpbGwgaW4gd2l0aGluCiBhIGRyaXZlciBhcmU6CiAKLXRyaWctPmNvbnRyb2xfYXR0cnMKLQlBbnkgc3lzZnMgYXR0cmlidXRlcyBuZWVkZWQgdG8gY29udHJvbCBwYXJhbWV0ZXJzIG9mIHRoZSB0cmlnZ2VyCi0KIHRyaWctPnByaXZhdGVfZGF0YQogCURldmljZSBzcGVjaWZpYyBwcml2YXRlIGRhdGEuCiAKQEAgLTIwLDggKzE3LDEyIEBACiAJVHlwaWNhbGx5IHNldCB0byBUSElTX01PRFVMRS4gVXNlZCB0byBlbnN1cmUgY29ycmVjdAogCW93bmVyc2hpcCBvZiBjb3JlIGFsbG9jYXRlZCByZXNvdXJjZXMuCiAKLXRyaWctPm5hbWUKLQlBIHVuaXF1ZSBuYW1lIGZvciB0aGUgdHJpZ2dlci4KK3RyaWctPnNldF90cmlnZ2VyX3N0YXRlOgorCUZ1bmN0aW9uIHRoYXQgZW5hYmxlcyAvIGRpc2FibGVzIHRoZSB1bmRlcmx5aW5nIHNvdXJjZSBvZiB0aGUgdHJpZ2dlci4KKworVGhlcmUgaXMgYWxzbyBhCit0cmlnLT5hbGxvY19saXN0IHdoaWNoIGlzIHVzZWZ1bCBmb3IgZHJpdmVycyB0aGF0IGFsbG9jYXRlIG11bHRpcGxlCit0cmlnZ2VycyB0byBrZWVwIHRyYWNrIG9mIHdoYXQgdGhleSBoYXZlIGNyZWF0ZWQuCiAKIFdoZW4gdGhlc2UgaGF2ZSBiZWVuIHNldCBjYWxsOgogCkBAIC0zMCw5ICszMSw4IEBACiB0byByZWdpc3RlciB0aGUgdHJpZ2dlciB3aXRoIHRoZSBjb3JlLCBtYWtpbmcgaXQgYXZhaWxhYmxlIHRvIHRyaWdnZXIKIGNvbnN1bWVycy4KIAotCiBUcmlnZ2VyIENvbnN1bWVycwogCi1DdXJyZW50bHkgdHJpZ2dlcnMgYXJlIG9ubHkgdXNlZCBmb3IgdGhlIGZpbGxpbmcgb2Ygc29mdHdhcmUgcmluZworQ3VycmVudGx5IHRyaWdnZXJzIGFyZSBvbmx5IHVzZWQgZm9yIHRoZSBmaWxsaW5nIG9mIHNvZnR3YXJlCiBidWZmZXJzIGFuZCBhcyBzdWNoIGFueSBkZXZpY2Ugc3VwcG9ydGluZyBJTkRJT19SSU5HX1RSSUdHRVJFRCBoYXMgdGhlCiBjb25zdW1lciBpbnRlcmZhY2UgYXV0b21hdGljYWxseSBjcmVhdGVkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS50eHQgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmYwNmU1ZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLVVzZXJzcGFjZSBhY2Nlc3MgdG8gSUlPCi0KLVRoZSBzeXNmcyBhdHRyaWJ1dGVzIGFyZSBkb2N1bWVudGVkIGluIHN5c2ZzLWJ1cy1paW8uCi0KLVVkZXYgd2lsbCBjcmVhdGUgdGhlIGZvbGxvd2luZyBlbnRyaWVzIHVuZGVyIC9kZXYgYnkgZGVmYXVsdDoKLQotZGV2aWNlMDpidWZmZXIwOmFjY2VzczAgLSByaW5nIGFjY2VzcyBjaHJkZXYKLWRldmljZTA6YnVmZmVyMDpldmVudDAgLSByaW5nIGV2ZW50IGNocmRldgotZGV2aWNlMDpldmVudDAgLSBnZW5lcmFsIGV2ZW50IGNocmRldi4KLQotVGhlIGZpbGVzLCBsaXMzbDAyZHFidWZmZXJzaW1wbGUuYyBhbmQgaWlvX3V0aWxzLmggaW4gdGhpcyBkaXJlY3RvcnkgcHJvdmlkZSBhbiBleGFtcGxlCi1vZiBob3cgdG8gdXNlIHRoZSByaW5nIGJ1ZmZlciBhbmQgZXZlbnQgaW50ZXJmYWNlcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vS2NvbmZpZwppbmRleCA2Nzc1YmY5Li5mOTZkNWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9LY29uZmlnCkBAIC01LDE3ICs1LDE3IEBACiBtZW51Y29uZmlnIElJTwogCXRyaXN0YXRlICJJbmR1c3RyaWFsIEkvTyBzdXBwb3J0IgogCWRlcGVuZHMgb24gIVMzOTAKLQktLS1oZWxwLS0tCisJaGVscAogCSAgVGhlIGluZHVzdHJpYWwgSS9PIHN1YnN5c3RlbSBwcm92aWRlcyBhIHVuaWZpZWQgZnJhbWV3b3JrIGZvcgogCSAgZHJpdmVycyBmb3IgbWFueSBkaWZmZXJlbnQgdHlwZXMgb2YgZW1iZWRkZWQgc2Vuc29ycyB1c2luZyBhCiAJICBudW1iZXIgb2YgZGlmZmVyZW50IHBoeXNpY2FsIGludGVyZmFjZXMgKGkyYywgc3BpLCBldGMpLiBTZWUKLQkgIERvY3VtZW50YXRpb24vaW5kdXN0cmlhbGlvIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCSAgZHJpdmVycy9zdGFnaW5nL2lpby9Eb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgogaWYgSUlPCiAKIGNvbmZpZyBJSU9fUklOR19CVUZGRVIKLQlib29sICJFbmFibGUgcmluZyBidWZmZXIgc3VwcG9ydCB3aXRoaW4gSUlPIgorCWJvb2wgIkVuYWJsZSBidWZmZXIgc3VwcG9ydCB3aXRoaW4gSUlPIgogCWhlbHAKLQkgIFByb3ZpZGUgY29yZSBzdXBwb3J0IGZvciB2YXJpb3VzIHJpbmcgYnVmZmVyIGJhc2VkIGRhdGEKKwkgIFByb3ZpZGUgY29yZSBzdXBwb3J0IGZvciB2YXJpb3VzIGJ1ZmZlciBiYXNlZCBkYXRhCiAJICBhY3F1aXNpdGlvbiBtZXRob2RzLgogCiBpZiBJSU9fUklOR19CVUZGRVIKQEAgLTQ4LDYgKzQ4LDEzIEBACiAJICByaW5nIGJ1ZmZlcnMuICBUaGUgdHJpZ2dlcnMgYXJlIGVmZmVjdGl2ZWx5IGEgJ2NhcHR1cmUKIAkgIGRhdGEgbm93JyBpbnRlcnJ1cHQuCiAKK2NvbmZpZyBJSU9fQ09OU1VNRVJTX1BFUl9UUklHR0VSCisgICAgICAgaW50ICJNYXhpbXVtIG51bWJlciBvZiBjb25zdW1lcnMgcGVyIHRyaWdnZXIiCisgICAgICAgZGVwZW5kcyBvbiBJSU9fVFJJR0dFUgorICAgICAgIGRlZmF1bHQgIjIiCisgICAgICAgaGVscAorCVRoaXMgdmFsdWUgY29udHJvbHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbnN1bWVycyB0aGF0IGEKKwlnaXZlbiB0cmlnZ2VyIG1heSBoYW5kbGUuIERlZmF1bHQgaXMgMi4KIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9paW8vYWRjL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwMS5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDEuaAppbmRleCAyM2ZlNTRkLi4wYjliODU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwMS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjAxLmgKQEAgLTY0LDkgKzY0LDYgQEAKIC8qKgogICogc3RydWN0IGFkaXMxNjIwMV9zdGF0ZSAtIGRldmljZSBpbnN0YW5jZSBzcGVjaWZpYyBkYXRhCiAgKiBAdXM6CQkJYWN0dWFsIHNwaV9kZXZpY2UKLSAqIEB3b3JrX3RyaWdnZXJfdG9fcmluZzogYmggZm9yIHRyaWdnZXJlZCBldmVudCBoYW5kbGluZwotICogQGludGVyOgkJdXNlZCB0byBjaGVjayBpZiBuZXcgaW50ZXJydXB0IGhhcyBiZWVuIHRyaWdnZXJlZAotICogQGxhc3RfdGltZXN0YW1wOglwYXNzaW5nIHRpbWVzdGFtcCBmcm9tIHRoIHRvIGJoIG9mIGludGVycnVwdCBoYW5kbGVyCiAgKiBAaW5kaW9fZGV2OgkJaW5kdXN0cmlhbCBJL08gZGV2aWNlIHN0cnVjdHVyZQogICogQHRyaWc6CQlkYXRhIHJlYWR5IHRyaWdnZXIgcmVnaXN0ZXJlZCB3aXRoIGlpbwogICogQHR4OgkJCXRyYW5zbWl0IGJ1ZmZlcgpAQCAtNzUsOCArNzIsNiBAQAogICoqLwogc3RydWN0IGFkaXMxNjIwMV9zdGF0ZSB7CiAJc3RydWN0IHNwaV9kZXZpY2UJCSp1czsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCXdvcmtfdHJpZ2dlcl90b19yaW5nOwotCXM2NAkJCQlsYXN0X3RpbWVzdGFtcDsKIAlzdHJ1Y3QgaWlvX2RldgkJCSppbmRpb19kZXY7CiAJc3RydWN0IGlpb190cmlnZ2VyCQkqdHJpZzsKIAl1OAkJCQkqdHg7CkBAIC04NCw3ICs3OSw3IEBACiAJc3RydWN0IG11dGV4CQkJYnVmX2xvY2s7CiB9OwogCi1pbnQgYWRpczE2MjAxX3NldF9pcnEoc3RydWN0IGRldmljZSAqZGV2LCBib29sIGVuYWJsZSk7CitpbnQgYWRpczE2MjAxX3NldF9pcnEoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwgYm9vbCBlbmFibGUpOwogCiAjaWZkZWYgQ09ORklHX0lJT19SSU5HX0JVRkZFUgogZW51bSBhZGlzMTYyMDFfc2NhbiB7CkBAIC0xMDcsOCArMTAyLDYgQEAKIGludCBhZGlzMTYyMDFfY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7CiB2b2lkIGFkaXMxNjIwMV91bmNvbmZpZ3VyZV9yaW5nKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwogCi1pbnQgYWRpczE2MjAxX2luaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKTsKLXZvaWQgYWRpczE2MjAxX3VuaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpOwogI2Vsc2UgLyogQ09ORklHX0lJT19SSU5HX0JVRkZFUiAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgYWRpczE2MjAxX3JlbW92ZV90cmlnZ2VyKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwMV9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwMV9jb3JlLmMKaW5kZXggNzliNzg1YS4uZTRjNDlmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDFfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjAxX2NvcmUuYwpAQCAtNiw5ICs2LDYgQEAKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTE2LDIwICsxMywyOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAKICNpbmNsdWRlICIuLi9paW8uaCIKICNpbmNsdWRlICIuLi9zeXNmcy5oIgorI2luY2x1ZGUgIi4uL3JpbmdfZ2VuZXJpYy5oIgorCiAjaW5jbHVkZSAiYWNjZWwuaCIKICNpbmNsdWRlICJpbmNsaW5vbWV0ZXIuaCIKLSNpbmNsdWRlICIuLi9neXJvL2d5cm8uaCIKICNpbmNsdWRlICIuLi9hZGMvYWRjLmgiCiAKICNpbmNsdWRlICJhZGlzMTYyMDEuaCIKIAogI2RlZmluZSBEUklWRVJfTkFNRQkJImFkaXMxNjIwMSIKIAotc3RhdGljIGludCBhZGlzMTYyMDFfY2hlY2tfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmRldik7CitlbnVtIGFkaXMxNjIwMV9jaGFuIHsKKwlpbl9zdXBwbHksCisJdGVtcCwKKwlhY2NlbF94LAorCWFjY2VsX3ksCisJaW5jbGlfeCwKKwlpbmNsaV95LAorCWluX2F1eCwKK307CiAKIC8qKgogICogYWRpczE2MjAxX3NwaV93cml0ZV9yZWdfOCgpIC0gd3JpdGUgc2luZ2xlIGJ5dGUgdG8gYSByZWdpc3RlcgpAQCAtNTcsMTggKzYyLDE3IEBACiAKIC8qKgogICogYWRpczE2MjAxX3NwaV93cml0ZV9yZWdfMTYoKSAtIHdyaXRlIDIgYnl0ZXMgdG8gYSBwYWlyIG9mIHJlZ2lzdGVycwotICogQGRldjogZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBjaGlsZCBvZiBhY3R1YWwgZGV2aWNlIChpaW9fZGV2IG9yIGlpb190cmlnKQorICogQGluZGlvX2RldjogaWlvIGRldmljZSBhc3NvY2lhdGVkIHdpdGggY2hpbGQgb2YgYWN0dWFsIGRldmljZQogICogQHJlZ19hZGRyZXNzOiB0aGUgYWRkcmVzcyBvZiB0aGUgbG93ZXIgb2YgdGhlIHR3byByZWdpc3RlcnMuIFNlY29uZCByZWdpc3RlcgogICogICAgICAgICAgICAgICBpcyBhc3N1bWVkIHRvIGhhdmUgYWRkcmVzcyBvbmUgZ3JlYXRlci4KICAqIEB2YWw6IHZhbHVlIHRvIGJlIHdyaXR0ZW4KICAqKi8KLXN0YXRpYyBpbnQgYWRpczE2MjAxX3NwaV93cml0ZV9yZWdfMTYoc3RydWN0IGRldmljZSAqZGV2LAotCQl1OCBsb3dlcl9yZWdfYWRkcmVzcywKLQkJdTE2IHZhbHVlKQorc3RhdGljIGludCBhZGlzMTYyMDFfc3BpX3dyaXRlX3JlZ18xNihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAorCQkJCSAgICAgIHU4IGxvd2VyX3JlZ19hZGRyZXNzLAorCQkJCSAgICAgIHUxNiB2YWx1ZSkKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBzcGlfbWVzc2FnZSBtc2c7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBhZGlzMTYyMDFfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOwogCXN0cnVjdCBzcGlfdHJhbnNmZXIgeGZlcnNbXSA9IHsKIAkJewpAQCAtODAsNyArODQsNiBAQAogCQkJLnR4X2J1ZiA9IHN0LT50eCArIDIsCiAJCQkuYml0c19wZXJfd29yZCA9IDgsCiAJCQkubGVuID0gMiwKLQkJCS5jc19jaGFuZ2UgPSAxLAogCQl9LAogCX07CiAKQEAgLTEwMSwxNyArMTA0LDE2IEBACiAKIC8qKgogICogYWRpczE2MjAxX3NwaV9yZWFkX3JlZ18xNigpIC0gcmVhZCAyIGJ5dGVzIGZyb20gYSAxNi1iaXQgcmVnaXN0ZXIKLSAqIEBkZXY6IGRldmljZSBhc3NvY2lhdGVkIHdpdGggY2hpbGQgb2YgYWN0dWFsIGRldmljZSAoaWlvX2RldiBvciBpaW9fdHJpZykKKyAqIEBpbmRpb19kZXY6IGlpbyBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIGNoaWxkIG9mIGFjdHVhbCBkZXZpY2UKICAqIEByZWdfYWRkcmVzczogdGhlIGFkZHJlc3Mgb2YgdGhlIGxvd2VyIG9mIHRoZSB0d28gcmVnaXN0ZXJzLiBTZWNvbmQgcmVnaXN0ZXIKICAqICAgICAgICAgICAgICAgaXMgYXNzdW1lZCB0byBoYXZlIGFkZHJlc3Mgb25lIGdyZWF0ZXIuCiAgKiBAdmFsOiBzb21ld2hlcmUgdG8gcGFzcyBiYWNrIHRoZSB2YWx1ZSByZWFkCiAgKiovCi1zdGF0aWMgaW50IGFkaXMxNjIwMV9zcGlfcmVhZF9yZWdfMTYoc3RydWN0IGRldmljZSAqZGV2LAorc3RhdGljIGludCBhZGlzMTYyMDFfc3BpX3JlYWRfcmVnXzE2KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCiAJCXU4IGxvd2VyX3JlZ19hZGRyZXNzLAogCQl1MTYgKnZhbCkKIHsKIAlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbXNnOwotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgYWRpczE2MjAxX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKIAlpbnQgcmV0OwogCXN0cnVjdCBzcGlfdHJhbnNmZXIgeGZlcnNbXSA9IHsKQEAgLTEyNSw3ICsxMjcsNiBAQAogCQkJLnJ4X2J1ZiA9IHN0LT5yeCwKIAkJCS5iaXRzX3Blcl93b3JkID0gOCwKIAkJCS5sZW4gPSAyLAotCQkJLmNzX2NoYW5nZSA9IDEsCiAJCQkuZGVsYXlfdXNlY3MgPSAyMCwKIAkJfSwKIAl9OwpAQCAtMTUwLDE2MCArMTUxLDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3NpemVfdCBhZGlzMTYyMDFfcmVhZF8xMmJpdF91bnNpZ25lZChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljaGFyICpidWYpCi17Ci0JaW50IHJldDsKLQl1MTYgdmFsID0gMDsKLQlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7Ci0KLQlyZXQgPSBhZGlzMTYyMDFfc3BpX3JlYWRfcmVnXzE2KGRldiwgdGhpc19hdHRyLT5hZGRyZXNzLCAmdmFsKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JaWYgKHZhbCAmIEFESVMxNjIwMV9FUlJPUl9BQ1RJVkUpIHsKLQkJcmV0ID0gYWRpczE2MjAxX2NoZWNrX3N0YXR1cyhkZXYpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgdmFsICYgMHgwRkZGKTsKLX0KLQotc3RhdGljIHNzaXplX3QgYWRpczE2MjAxX3JlYWRfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljaGFyICpidWYpCi17Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXNzaXplX3QgcmV0OwotCXUxNiB2YWw7Ci0KLQkvKiBUYWtlIHRoZSBpaW9fZGV2IHN0YXR1cyBsb2NrICovCi0JbXV0ZXhfbG9jaygmaW5kaW9fZGV2LT5tbG9jayk7Ci0KLQlyZXQgPSBhZGlzMTYyMDFfc3BpX3JlYWRfcmVnXzE2KGRldiwgQURJUzE2MjAxX1RFTVBfT1VULCAodTE2ICopJnZhbCk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJvcl9yZXQ7Ci0KLQlpZiAodmFsICYgQURJUzE2MjAxX0VSUk9SX0FDVElWRSkgewotCQlyZXQgPSBhZGlzMTYyMDFfY2hlY2tfc3RhdHVzKGRldik7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIGVycm9yX3JldDsKLQl9Ci0KLQl2YWwgJj0gMHhGRkY7Ci0JcmV0ID0gc3ByaW50ZihidWYsICIlZFxuIiwgdmFsKTsKLQotZXJyb3JfcmV0OgotCW11dGV4X3VubG9jaygmaW5kaW9fZGV2LT5tbG9jayk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHNzaXplX3QgYWRpczE2MjAxX3JlYWRfOWJpdF9zaWduZWQoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY2hhciAqYnVmKQotewotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7Ci0JczE2IHZhbCA9IDA7Ci0Jc3NpemVfdCByZXQ7Ci0KLQltdXRleF9sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKLQotCXJldCA9IGFkaXMxNjIwMV9zcGlfcmVhZF9yZWdfMTYoZGV2LCB0aGlzX2F0dHItPmFkZHJlc3MsICh1MTYgKikmdmFsKTsKLQlpZiAoIXJldCkgewotCQlpZiAodmFsICYgQURJUzE2MjAxX0VSUk9SX0FDVElWRSkgewotCQkJcmV0ID0gYWRpczE2MjAxX2NoZWNrX3N0YXR1cyhkZXYpOwotCQkJaWYgKHJldCkKLQkJCQlnb3RvIGVycm9yX3JldDsKLQkJfQotCQl2YWwgPSAoKHMxNikodmFsIDw8IDcpID4+IDcpOwotCQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB2YWwpOwotCX0KLQotZXJyb3JfcmV0OgotCW11dGV4X3VubG9jaygmaW5kaW9fZGV2LT5tbG9jayk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3NpemVfdCBhZGlzMTYyMDFfcmVhZF8xMmJpdF9zaWduZWQoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY2hhciAqYnVmKQotewotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7Ci0JczE2IHZhbCA9IDA7Ci0Jc3NpemVfdCByZXQ7Ci0KLQltdXRleF9sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKLQotCXJldCA9IGFkaXMxNjIwMV9zcGlfcmVhZF9yZWdfMTYoZGV2LCB0aGlzX2F0dHItPmFkZHJlc3MsICh1MTYgKikmdmFsKTsKLQlpZiAoIXJldCkgewotCQlpZiAodmFsICYgQURJUzE2MjAxX0VSUk9SX0FDVElWRSkgewotCQkJcmV0ID0gYWRpczE2MjAxX2NoZWNrX3N0YXR1cyhkZXYpOwotCQkJaWYgKHJldCkKLQkJCQlnb3RvIGVycm9yX3JldDsKLQkJfQotCi0JCXZhbCA9ICgoczE2KSh2YWwgPDwgNCkgPj4gNCk7Ci0JCXJldCA9IHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbCk7Ci0JfQotCi1lcnJvcl9yZXQ6Ci0JbXV0ZXhfdW5sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGFkaXMxNjIwMV9yZWFkXzE0Yml0X3NpZ25lZChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljaGFyICpidWYpCi17Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKLQlzMTYgdmFsID0gMDsKLQlzc2l6ZV90IHJldDsKLQotCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOwotCi0JcmV0ID0gYWRpczE2MjAxX3NwaV9yZWFkX3JlZ18xNihkZXYsIHRoaXNfYXR0ci0+YWRkcmVzcywgKHUxNiAqKSZ2YWwpOwotCWlmICghcmV0KSB7Ci0JCWlmICh2YWwgJiBBRElTMTYyMDFfRVJST1JfQUNUSVZFKSB7Ci0JCQlyZXQgPSBhZGlzMTYyMDFfY2hlY2tfc3RhdHVzKGRldik7Ci0JCQlpZiAocmV0KQotCQkJCWdvdG8gZXJyb3JfcmV0OwotCQl9Ci0KLQkJdmFsID0gKChzMTYpKHZhbCA8PCAyKSA+PiAyKTsKLQkJcmV0ID0gc3ByaW50ZihidWYsICIlZFxuIiwgdmFsKTsKLQl9Ci0KLWVycm9yX3JldDoKLQltdXRleF91bmxvY2soJmluZGlvX2Rldi0+bWxvY2spOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHNzaXplX3QgYWRpczE2MjAxX3dyaXRlXzE2Yml0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNvbnN0IGNoYXIgKmJ1ZiwKLQkJc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7Ci0JaW50IHJldDsKLQlsb25nIHZhbDsKLQotCXJldCA9IHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnZhbCk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJvcl9yZXQ7Ci0JcmV0ID0gYWRpczE2MjAxX3NwaV93cml0ZV9yZWdfMTYoZGV2LCB0aGlzX2F0dHItPmFkZHJlc3MsIHZhbCk7Ci0KLWVycm9yX3JldDoKLQlyZXR1cm4gcmV0ID8gcmV0IDogbGVuOwotfQotCiBzdGF0aWMgaW50IGFkaXMxNjIwMV9yZXNldChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJaW50IHJldDsKQEAgLTMzMSwxMiArMTc4LDEyIEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLWludCBhZGlzMTYyMDFfc2V0X2lycShzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgZW5hYmxlKQoraW50IGFkaXMxNjIwMV9zZXRfaXJxKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsIGJvb2wgZW5hYmxlKQogewogCWludCByZXQgPSAwOwogCXUxNiBtc2M7CiAKLQlyZXQgPSBhZGlzMTYyMDFfc3BpX3JlYWRfcmVnXzE2KGRldiwgQURJUzE2MjAxX01TQ19DVFJMLCAmbXNjKTsKKwlyZXQgPSBhZGlzMTYyMDFfc3BpX3JlYWRfcmVnXzE2KGluZGlvX2RldiwgQURJUzE2MjAxX01TQ19DVFJMLCAmbXNjKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycm9yX3JldDsKIApAQCAtMzQ3LDIwICsxOTQsMjEgQEAKIAllbHNlCiAJCW1zYyAmPSB+QURJUzE2MjAxX01TQ19DVFJMX0RBVEFfUkRZX0VOOwogCi0JcmV0ID0gYWRpczE2MjAxX3NwaV93cml0ZV9yZWdfMTYoZGV2LCBBRElTMTYyMDFfTVNDX0NUUkwsIG1zYyk7CisJcmV0ID0gYWRpczE2MjAxX3NwaV93cml0ZV9yZWdfMTYoaW5kaW9fZGV2LCBBRElTMTYyMDFfTVNDX0NUUkwsIG1zYyk7CiAKIGVycm9yX3JldDoKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGFkaXMxNjIwMV9jaGVja19zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBhZGlzMTYyMDFfY2hlY2tfc3RhdHVzKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCiB7CiAJdTE2IHN0YXR1czsKIAlpbnQgcmV0OwogCi0JcmV0ID0gYWRpczE2MjAxX3NwaV9yZWFkX3JlZ18xNihkZXYsIEFESVMxNjIwMV9ESUFHX1NUQVQsICZzdGF0dXMpOworCXJldCA9IGFkaXMxNjIwMV9zcGlfcmVhZF9yZWdfMTYoaW5kaW9fZGV2LAorCQkJCQlBRElTMTYyMDFfRElBR19TVEFULCAmc3RhdHVzKTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKGRldiwgIlJlYWRpbmcgc3RhdHVzIGZhaWxlZFxuIik7CisJCWRldl9lcnIoJmluZGlvX2Rldi0+ZGV2LCAiUmVhZGluZyBzdGF0dXMgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJvcl9yZXQ7CiAJfQogCXJldCA9IHN0YXR1cyAmIDB4RjsKQEAgLTM2OCwzMCArMjE2LDMwIEBACiAJCXJldCA9IC1FRkFVTFQ7CiAKIAlpZiAoc3RhdHVzICYgQURJUzE2MjAxX0RJQUdfU1RBVF9TUElfRkFJTCkKLQkJZGV2X2VycihkZXYsICJTUEkgZmFpbHVyZVxuIik7CisJCWRldl9lcnIoJmluZGlvX2Rldi0+ZGV2LCAiU1BJIGZhaWx1cmVcbiIpOwogCWlmIChzdGF0dXMgJiBBRElTMTYyMDFfRElBR19TVEFUX0ZMQVNIX1VQVCkKLQkJZGV2X2VycihkZXYsICJGbGFzaCB1cGRhdGUgZmFpbGVkXG4iKTsKKwkJZGV2X2VycigmaW5kaW9fZGV2LT5kZXYsICJGbGFzaCB1cGRhdGUgZmFpbGVkXG4iKTsKIAlpZiAoc3RhdHVzICYgQURJUzE2MjAxX0RJQUdfU1RBVF9QT1dFUl9ISUdIKQotCQlkZXZfZXJyKGRldiwgIlBvd2VyIHN1cHBseSBhYm92ZSAzLjYyNVZcbiIpOworCQlkZXZfZXJyKCZpbmRpb19kZXYtPmRldiwgIlBvd2VyIHN1cHBseSBhYm92ZSAzLjYyNVZcbiIpOwogCWlmIChzdGF0dXMgJiBBRElTMTYyMDFfRElBR19TVEFUX1BPV0VSX0xPVykKLQkJZGV2X2VycihkZXYsICJQb3dlciBzdXBwbHkgYmVsb3cgMy4xNVZcbiIpOworCQlkZXZfZXJyKCZpbmRpb19kZXYtPmRldiwgIlBvd2VyIHN1cHBseSBiZWxvdyAzLjE1VlxuIik7CiAKIGVycm9yX3JldDoKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGFkaXMxNjIwMV9zZWxmX3Rlc3Qoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBhZGlzMTYyMDFfc2VsZl90ZXN0KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCiB7CiAJaW50IHJldDsKLQlyZXQgPSBhZGlzMTYyMDFfc3BpX3dyaXRlX3JlZ18xNihkZXYsCisJcmV0ID0gYWRpczE2MjAxX3NwaV93cml0ZV9yZWdfMTYoaW5kaW9fZGV2LAogCQkJQURJUzE2MjAxX01TQ19DVFJMLAogCQkJQURJUzE2MjAxX01TQ19DVFJMX1NFTEZfVEVTVF9FTik7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKGRldiwgInByb2JsZW0gc3RhcnRpbmcgc2VsZiB0ZXN0Iik7CisJCWRldl9lcnIoJmluZGlvX2Rldi0+ZGV2LCAicHJvYmxlbSBzdGFydGluZyBzZWxmIHRlc3QiKTsKIAkJZ290byBlcnJfcmV0OwogCX0KIAotCXJldCA9IGFkaXMxNjIwMV9jaGVja19zdGF0dXMoZGV2KTsKKwlyZXQgPSBhZGlzMTYyMDFfY2hlY2tfc3RhdHVzKGluZGlvX2Rldik7CiAKIGVycl9yZXQ6CiAJcmV0dXJuIHJldDsKQEAgLTQwMywyNiArMjUxLDI2IEBACiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnN0LT5pbmRpb19kZXYtPmRldjsKIAogCS8qIERpc2FibGUgSVJRICovCi0JcmV0ID0gYWRpczE2MjAxX3NldF9pcnEoZGV2LCBmYWxzZSk7CisJcmV0ID0gYWRpczE2MjAxX3NldF9pcnEoc3QtPmluZGlvX2RldiwgZmFsc2UpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycihkZXYsICJkaXNhYmxlIGlycSBmYWlsZWQiKTsKIAkJZ290byBlcnJfcmV0OwogCX0KIAogCS8qIERvIHNlbGYgdGVzdCAqLwotCXJldCA9IGFkaXMxNjIwMV9zZWxmX3Rlc3QoZGV2KTsKKwlyZXQgPSBhZGlzMTYyMDFfc2VsZl90ZXN0KHN0LT5pbmRpb19kZXYpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycihkZXYsICJzZWxmIHRlc3QgZmFpbHVyZSIpOwogCQlnb3RvIGVycl9yZXQ7CiAJfQogCiAJLyogUmVhZCBzdGF0dXMgcmVnaXN0ZXIgdG8gY2hlY2sgdGhlIHJlc3VsdCAqLwotCXJldCA9IGFkaXMxNjIwMV9jaGVja19zdGF0dXMoZGV2KTsKKwlyZXQgPSBhZGlzMTYyMDFfY2hlY2tfc3RhdHVzKHN0LT5pbmRpb19kZXYpOwogCWlmIChyZXQpIHsKIAkJYWRpczE2MjAxX3Jlc2V0KGRldik7CiAJCWRldl9lcnIoZGV2LCAiZGV2aWNlIG5vdCBwbGF5aW5nIGJhbGwgLT4gcmVzZXQiKTsKIAkJbXNsZWVwKEFESVMxNjIwMV9TVEFSVFVQX0RFTEFZKTsKLQkJcmV0ID0gYWRpczE2MjAxX2NoZWNrX3N0YXR1cyhkZXYpOworCQlyZXQgPSBhZGlzMTYyMDFfY2hlY2tfc3RhdHVzKHN0LT5pbmRpb19kZXYpOwogCQlpZiAocmV0KSB7CiAJCQlkZXZfZXJyKGRldiwgImdpdmluZyB1cCIpOwogCQkJZ290byBlcnJfcmV0OwpAQCAtNDM2LDc3ICsyODQsMTcyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIElJT19ERVZfQVRUUl9JTl9OQU1FRF9SQVcoMCwgc3VwcGx5LCBhZGlzMTYyMDFfcmVhZF8xMmJpdF91bnNpZ25lZCwKLQkJQURJUzE2MjAxX1NVUFBMWV9PVVQpOwotc3RhdGljIElJT19DT05TVF9BVFRSKGluMF9zdXBwbHlfc2NhbGUsICIwLjAwMTIyIik7Ci1zdGF0aWMgSUlPX0RFVl9BVFRSX0lOX1JBVygxLCBhZGlzMTYyMDFfcmVhZF8xMmJpdF91bnNpZ25lZCwKLQkJQURJUzE2MjAxX0FVWF9BREMpOwotc3RhdGljIElJT19DT05TVF9BVFRSKGluMV9zY2FsZSwgIjAuMDAwNjEiKTsKK3N0YXRpYyB1OCBhZGlzMTYyMDFfYWRkcmVzc2VzWzddWzJdID0geworCVtpbl9zdXBwbHldID0geyBBRElTMTYyMDFfU1VQUExZX09VVCwgfSwKKwlbdGVtcF0gPSB7IEFESVMxNjIwMV9URU1QX09VVCB9LAorCVthY2NlbF94XSA9IHsgQURJUzE2MjAxX1hBQ0NMX09VVCwgQURJUzE2MjAxX1hBQ0NMX09GRlMgfSwKKwlbYWNjZWxfeV0gPSB7IEFESVMxNjIwMV9ZQUNDTF9PVVQsIEFESVMxNjIwMV9ZQUNDTF9PRkZTIH0sCisJW2luX2F1eF0gPSB7IEFESVMxNjIwMV9BVVhfQURDIH0sCisJW2luY2xpX3hdID0geyBBRElTMTYyMDFfWElOQ0xfT1VUIH0sCisJW2luY2xpX3ldID0geyBBRElTMTYyMDFfWUlOQ0xfT1VUIH0sCit9OwogCi1zdGF0aWMgSUlPX0RFVl9BVFRSX0FDQ0VMX1goYWRpczE2MjAxX3JlYWRfMTRiaXRfc2lnbmVkLAotCQlBRElTMTYyMDFfWEFDQ0xfT1VUKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfQUNDRUxfWShhZGlzMTYyMDFfcmVhZF8xNGJpdF9zaWduZWQsCi0JCUFESVMxNjIwMV9ZQUNDTF9PVVQpOwotc3RhdGljIElJT19ERVZfQVRUUl9BQ0NFTF9YX09GRlNFVChTX0lXVVNSIHwgU19JUlVHTywKLQkJYWRpczE2MjAxX3JlYWRfMTJiaXRfc2lnbmVkLAotCQlhZGlzMTYyMDFfd3JpdGVfMTZiaXQsCi0JCUFESVMxNjIwMV9YQUNDTF9PRkZTKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfQUNDRUxfWV9PRkZTRVQoU19JV1VTUiB8IFNfSVJVR08sCi0JCWFkaXMxNjIwMV9yZWFkXzEyYml0X3NpZ25lZCwKLQkJYWRpczE2MjAxX3dyaXRlXzE2Yml0LAotCQlBRElTMTYyMDFfWUFDQ0xfT0ZGUyk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFIoYWNjZWxfc2NhbGUsICIwLjQ2MjUiKTsKK3N0YXRpYyBpbnQgYWRpczE2MjAxX3JlYWRfcmF3KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCisJCQkgICAgICBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbiwKKwkJCSAgICAgIGludCAqdmFsLCBpbnQgKnZhbDIsCisJCQkgICAgICBsb25nIG1hc2spCit7CisJaW50IHJldDsKKwlpbnQgYml0czsKKwl1OCBhZGRyOworCXMxNiB2YWwxNjsKIAotc3RhdGljIElJT19ERVZfQVRUUl9JTkNMSV9YKGFkaXMxNjIwMV9yZWFkXzE0Yml0X3NpZ25lZCwKLQkJQURJUzE2MjAxX1hJTkNMX09VVCk7Ci1zdGF0aWMgSUlPX0RFVl9BVFRSX0lOQ0xJX1koYWRpczE2MjAxX3JlYWRfMTRiaXRfc2lnbmVkLAotCQlBRElTMTYyMDFfWUlOQ0xfT1VUKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5DTElfWF9PRkZTRVQoU19JV1VTUiB8IFNfSVJVR08sCi0JCWFkaXMxNjIwMV9yZWFkXzliaXRfc2lnbmVkLAotCQlhZGlzMTYyMDFfd3JpdGVfMTZiaXQsCi0JCUFESVMxNjIwMV9YQUNDTF9PRkZTKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5DTElfWV9PRkZTRVQoU19JV1VTUiB8IFNfSVJVR08sCi0JCWFkaXMxNjIwMV9yZWFkXzliaXRfc2lnbmVkLAotCQlhZGlzMTYyMDFfd3JpdGVfMTZiaXQsCi0JCUFESVMxNjIwMV9ZQUNDTF9PRkZTKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUihpbmNsaV9zY2FsZSwgIjAuMSIpOworCXN3aXRjaCAobWFzaykgeworCWNhc2UgMDoKKwkJbXV0ZXhfbG9jaygmaW5kaW9fZGV2LT5tbG9jayk7CisJCWFkZHIgPSBhZGlzMTYyMDFfYWRkcmVzc2VzW2NoYW4tPmFkZHJlc3NdWzBdOworCQlyZXQgPSBhZGlzMTYyMDFfc3BpX3JlYWRfcmVnXzE2KGluZGlvX2RldiwgYWRkciwgJnZhbDE2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CiAKLXN0YXRpYyBJSU9fREVWX0FUVFJfVEVNUF9SQVcoYWRpczE2MjAxX3JlYWRfdGVtcCk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFIodGVtcF9vZmZzZXQsICIyNSIpOwotc3RhdGljIElJT19DT05TVF9BVFRSKHRlbXBfc2NhbGUsICItMC40NyIpOworCQlpZiAodmFsMTYgJiBBRElTMTYyMDFfRVJST1JfQUNUSVZFKSB7CisJCQlyZXQgPSBhZGlzMTYyMDFfY2hlY2tfc3RhdHVzKGluZGlvX2Rldik7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KKwkJdmFsMTYgPSB2YWwxNiAmICgoMSA8PCBjaGFuLT5zY2FuX3R5cGUucmVhbGJpdHMpIC0gMSk7CisJCWlmIChjaGFuLT5zY2FuX3R5cGUuc2lnbiA9PSAncycpCisJCQl2YWwxNiA9IChzMTYpKHZhbDE2IDw8CisJCQkJICAgICAgKDE2IC0gY2hhbi0+c2Nhbl90eXBlLnJlYWxiaXRzKSkgPj4KKwkJCQkoMTYgLSBjaGFuLT5zY2FuX3R5cGUucmVhbGJpdHMpOworCQkqdmFsID0gdmFsMTY7CisJCW11dGV4X3VubG9jaygmaW5kaW9fZGV2LT5tbG9jayk7CisJCXJldHVybiBJSU9fVkFMX0lOVDsKKwljYXNlICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0VQQVJBVEUpOgorCWNhc2UgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpOgorCQlzd2l0Y2ggKGNoYW4tPnR5cGUpIHsKKwkJY2FzZSBJSU9fSU46CisJCQkqdmFsID0gMDsKKwkJCWlmIChjaGFuLT5jaGFubmVsID09IDApCisJCQkJKnZhbDIgPSAxMjIwOworCQkJZWxzZQorCQkJCSp2YWwyID0gNjEwOworCQkJcmV0dXJuIElJT19WQUxfSU5UX1BMVVNfTUlDUk87CisJCWNhc2UgSUlPX1RFTVA6CisJCQkqdmFsID0gMDsKKwkJCSp2YWwyID0gLTQ3MDAwMDsKKwkJCXJldHVybiBJSU9fVkFMX0lOVF9QTFVTX01JQ1JPOworCQljYXNlIElJT19BQ0NFTDoKKwkJCSp2YWwgPSAwOworCQkJKnZhbDIgPSA0NjI1MDA7CisJCQlyZXR1cm4gSUlPX1ZBTF9JTlRfUExVU19NSUNSTzsKKwkJY2FzZSBJSU9fSU5DTEk6CisJCQkqdmFsID0gMDsKKwkJCSp2YWwyID0gMTAwMDAwOworCQkJcmV0dXJuIElJT19WQUxfSU5UX1BMVVNfTUlDUk87CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwljYXNlICgxIDw8IElJT19DSEFOX0lORk9fT0ZGU0VUX1NFUEFSQVRFKToKKwkJKnZhbCA9IDI1OworCQlyZXR1cm4gSUlPX1ZBTF9JTlQ7CisJY2FzZSAoMSA8PCBJSU9fQ0hBTl9JTkZPX0NBTElCQklBU19TRVBBUkFURSk6CisJCXN3aXRjaCAoY2hhbi0+dHlwZSkgeworCQljYXNlIElJT19BQ0NFTDoKKwkJCWJpdHMgPSAxMjsKKwkJCWJyZWFrOworCQljYXNlIElJT19JTkNMSToKKwkJCWJpdHMgPSA5OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfTsKKwkJbXV0ZXhfbG9jaygmaW5kaW9fZGV2LT5tbG9jayk7CisJCWFkZHIgPSBhZGlzMTYyMDFfYWRkcmVzc2VzW2NoYW4tPmFkZHJlc3NdWzFdOworCQlyZXQgPSBhZGlzMTYyMDFfc3BpX3JlYWRfcmVnXzE2KGluZGlvX2RldiwgYWRkciwgJnZhbDE2KTsKKwkJaWYgKHJldCkgeworCQkJbXV0ZXhfdW5sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJdmFsMTYgJj0gKDEgPDwgYml0cykgLSAxOworCQl2YWwxNiA9IChzMTYpKHZhbDE2IDw8ICgxNiAtIGJpdHMpKSA+PiAoMTYgLSBiaXRzKTsKKwkJKnZhbCA9IHZhbDE2OworCQltdXRleF91bmxvY2soJmluZGlvX2Rldi0+bWxvY2spOworCQlyZXR1cm4gSUlPX1ZBTF9JTlQ7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IGFkaXMxNjIwMV93cml0ZV9yYXcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKKwkJCSAgICAgICBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbiwKKwkJCSAgICAgICBpbnQgdmFsLAorCQkJICAgICAgIGludCB2YWwyLAorCQkJICAgICAgIGxvbmcgbWFzaykKK3sKKwlpbnQgYml0czsKKwlzMTYgdmFsMTY7CisJdTggYWRkcjsKKwlzd2l0Y2ggKG1hc2spIHsKKwljYXNlICgxIDw8IElJT19DSEFOX0lORk9fQ0FMSUJCSUFTX1NFUEFSQVRFKToKKwkJc3dpdGNoIChjaGFuLT50eXBlKSB7CisJCWNhc2UgSUlPX0FDQ0VMOgorCQkJYml0cyA9IDEyOworCQkJYnJlYWs7CisJCWNhc2UgSUlPX0lOQ0xJOgorCQkJYml0cyA9IDk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9OworCQl2YWwxNiA9IHZhbCAmICgoMSA8PCBiaXRzKSAtIDEpOworCQlhZGRyID0gYWRpczE2MjAxX2FkZHJlc3Nlc1tjaGFuLT5hZGRyZXNzXVsxXTsKKwkJcmV0dXJuIGFkaXMxNjIwMV9zcGlfd3JpdGVfcmVnXzE2KGluZGlvX2RldiwgYWRkciwgdmFsMTYpOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHN0cnVjdCBpaW9fY2hhbl9zcGVjIGFkaXMxNjIwMV9jaGFubmVsc1tdID0geworCUlJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgInN1cHBseSIsIDAsIDAsCisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NFUEFSQVRFKSwKKwkJIGluX3N1cHBseSwgQURJUzE2MjAxX1NDQU5fU1VQUExZLAorCQkgSUlPX1NUKCd1JywgMTIsIDE2LCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX1RFTVAsIDAsIDEsIDAsIE5VTEwsIDAsIDAsCisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NFUEFSQVRFKSB8CisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX09GRlNFVF9TRVBBUkFURSksCisJCSB0ZW1wLCBBRElTMTYyMDFfU0NBTl9URU1QLAorCQkgSUlPX1NUKCd1JywgMTIsIDE2LCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX0FDQ0VMLCAxLCAwLCAwLCBOVUxMLCAwLCBJSU9fTU9EX1gsCisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCkgfAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19DQUxJQkJJQVNfU0VQQVJBVEUpLAorCQkgYWNjZWxfeCwgQURJUzE2MjAxX1NDQU5fQUNDX1gsCisJCSBJSU9fU1QoJ3MnLCAxNCwgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTihJSU9fQUNDRUwsIDEsIDAsIDAsIE5VTEwsIDAsIElJT19NT0RfWSwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSB8CisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX0NBTElCQklBU19TRVBBUkFURSksCisJCSBhY2NlbF95LCBBRElTMTYyMDFfU0NBTl9BQ0NfWSwKKwkJIElJT19TVCgncycsIDE0LCAxNiwgMCksIDApLAorCUlJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgTlVMTCwgMSwgMCwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0VQQVJBVEUpLAorCQkgaW5fYXV4LCBBRElTMTYyMDFfU0NBTl9BVVhfQURDLAorCQkgSUlPX1NUKCd1JywgMTIsIDE2LCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX0lOQ0xJLCAxLCAwLCAwLCBOVUxMLCAwLCBJSU9fTU9EX1gsCisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCkgfAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19DQUxJQkJJQVNfU0VQQVJBVEUpLAorCQkgaW5jbGlfeCwgQURJUzE2MjAxX1NDQU5fSU5DTElfWCwKKwkJIElJT19TVCgncycsIDE0LCAxNiwgMCksIDApLAorCUlJT19DSEFOKElJT19JTkNMSSwgMSwgMCwgMCwgTlVMTCwgMCwgSUlPX01PRF9ZLAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpIHwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fQ0FMSUJCSUFTX1NFUEFSQVRFKSwKKwkJIGluY2xpX3ksIEFESVMxNjIwMV9TQ0FOX0lOQ0xJX1ksCisJCSBJSU9fU1QoJ3MnLCAxNCwgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTl9TT0ZUX1RJTUVTVEFNUCg3KQorfTsKIAogc3RhdGljIElJT19ERVZJQ0VfQVRUUihyZXNldCwgU19JV1VTUiwgTlVMTCwgYWRpczE2MjAxX3dyaXRlX3Jlc2V0LCAwKTsKIAotc3RhdGljIElJT19DT05TVF9BVFRSKG5hbWUsICJhZGlzMTYyMDEiKTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkaXMxNjIwMV9ldmVudF9hdHRyaWJ1dGVzW10gPSB7Ci0JTlVMTAotfTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYWRpczE2MjAxX2V2ZW50X2F0dHJpYnV0ZV9ncm91cCA9IHsKLQkuYXR0cnMgPSBhZGlzMTYyMDFfZXZlbnRfYXR0cmlidXRlcywKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZGlzMTYyMDFfYXR0cmlidXRlc1tdID0gewotCSZpaW9fZGV2X2F0dHJfaW4wX3N1cHBseV9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4wX3N1cHBseV9zY2FsZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfdGVtcF9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfdGVtcF9vZmZzZXQuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfdGVtcF9zY2FsZS5kZXZfYXR0ci5hdHRyLAogCSZpaW9fZGV2X2F0dHJfcmVzZXQuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfbmFtZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW4xX3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjFfc2NhbGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2FjY2VsX3hfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9hY2NlbF95X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfYWNjZWxfeF9vZmZzZXQuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2FjY2VsX3lfb2Zmc2V0LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2FjY2VsX3NjYWxlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbmNsaV94X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW5jbGlfeV9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luY2xpX3hfb2Zmc2V0LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbmNsaV95X29mZnNldC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbmNsaV9zY2FsZS5kZXZfYXR0ci5hdHRyLAogCU5VTEwKIH07CiAKQEAgLTUxNCw2ICs0NTcsMTMgQEAKIAkuYXR0cnMgPSBhZGlzMTYyMDFfYXR0cmlidXRlcywKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2luZm8gYWRpczE2MjAxX2luZm8gPSB7CisJLmF0dHJzID0gJmFkaXMxNjIwMV9hdHRyaWJ1dGVfZ3JvdXAsCisJLnJlYWRfcmF3ID0gJmFkaXMxNjIwMV9yZWFkX3JhdywKKwkud3JpdGVfcmF3ID0gJmFkaXMxNjIwMV93cml0ZV9yYXcsCisJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRSwKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGFkaXMxNjIwMV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCWludCByZXQsIHJlZ2RvbmUgPSAwOwpAQCAtNTM5LDE4ICs0ODksMTkgQEAKIAlzdC0+dXMgPSBzcGk7CiAJbXV0ZXhfaW5pdCgmc3QtPmJ1Zl9sb2NrKTsKIAkvKiBzZXR1cCB0aGUgaW5kdXN0cmlhbGlvIGRyaXZlciBhbGxvY2F0ZWQgZWxlbWVudHMgKi8KLQlzdC0+aW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgpOworCXN0LT5pbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKDApOwogCWlmIChzdC0+aW5kaW9fZGV2ID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9mcmVlX3R4OwogCX0KIAorCXN0LT5pbmRpb19kZXYtPm5hbWUgPSBzcGktPmRldi5kcml2ZXItPm5hbWU7CiAJc3QtPmluZGlvX2Rldi0+ZGV2LnBhcmVudCA9ICZzcGktPmRldjsKLQlzdC0+aW5kaW9fZGV2LT5udW1faW50ZXJydXB0X2xpbmVzID0gMTsKLQlzdC0+aW5kaW9fZGV2LT5ldmVudF9hdHRycyA9ICZhZGlzMTYyMDFfZXZlbnRfYXR0cmlidXRlX2dyb3VwOwotCXN0LT5pbmRpb19kZXYtPmF0dHJzID0gJmFkaXMxNjIwMV9hdHRyaWJ1dGVfZ3JvdXA7CisJc3QtPmluZGlvX2Rldi0+aW5mbyA9ICZhZGlzMTYyMDFfaW5mbzsKKworCXN0LT5pbmRpb19kZXYtPmNoYW5uZWxzID0gYWRpczE2MjAxX2NoYW5uZWxzOworCXN0LT5pbmRpb19kZXYtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUoYWRpczE2MjAxX2NoYW5uZWxzKTsKIAlzdC0+aW5kaW9fZGV2LT5kZXZfZGF0YSA9ICh2b2lkICopKHN0KTsKLQlzdC0+aW5kaW9fZGV2LT5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEU7CiAJc3QtPmluZGlvX2Rldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1RfTU9ERTsKIAogCXJldCA9IGFkaXMxNjIwMV9jb25maWd1cmVfcmluZyhzdC0+aW5kaW9fZGV2KTsKQEAgLTU2MiwyNCArNTEzLDE4IEBACiAJCWdvdG8gZXJyb3JfdW5yZWdfcmluZ19mdW5jczsKIAlyZWdkb25lID0gMTsKIAotCXJldCA9IGFkaXMxNjIwMV9pbml0aWFsaXplX3Jpbmcoc3QtPmluZGlvX2Rldi0+cmluZyk7CisJcmV0ID0gaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyX2V4KHN0LT5pbmRpb19kZXYtPnJpbmcsIDAsCisJCQkJCSAgYWRpczE2MjAxX2NoYW5uZWxzLAorCQkJCQkgIEFSUkFZX1NJWkUoYWRpczE2MjAxX2NoYW5uZWxzKSk7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBpbml0aWFsaXplIHRoZSByaW5nXG4iKTsKIAkJZ290byBlcnJvcl91bnJlZ19yaW5nX2Z1bmNzOwogCX0KIAogCWlmIChzcGktPmlycSkgewotCQlyZXQgPSBpaW9fcmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoc3BpLT5pcnEsCi0JCQkJc3QtPmluZGlvX2RldiwKLQkJCQkwLAotCQkJCUlSUUZfVFJJR0dFUl9SSVNJTkcsCi0JCQkJImFkaXMxNjIwMSIpOwotCQlpZiAocmV0KQotCQkJZ290byBlcnJvcl91bmluaXRpYWxpemVfcmluZzsKLQogCQlyZXQgPSBhZGlzMTYyMDFfcHJvYmVfdHJpZ2dlcihzdC0+aW5kaW9fZGV2KTsKIAkJaWYgKHJldCkKLQkJCWdvdG8gZXJyb3JfdW5yZWdpc3Rlcl9saW5lOworCQkJZ290byBlcnJvcl91bmluaXRpYWxpemVfcmluZzsKIAl9CiAKIAkvKiBHZXQgdGhlIGRldmljZSBpbnRvIGEgc2FuZSBpbml0aWFsIHN0YXRlICovCkBAIC01OTAsMTEgKzUzNSw4IEBACiAKIGVycm9yX3JlbW92ZV90cmlnZ2VyOgogCWFkaXMxNjIwMV9yZW1vdmVfdHJpZ2dlcihzdC0+aW5kaW9fZGV2KTsKLWVycm9yX3VucmVnaXN0ZXJfbGluZToKLQlpZiAoc3BpLT5pcnEpCi0JCWlpb191bnJlZ2lzdGVyX2ludGVycnVwdF9saW5lKHN0LT5pbmRpb19kZXYsIDApOwogZXJyb3JfdW5pbml0aWFsaXplX3Jpbmc6Ci0JYWRpczE2MjAxX3VuaW5pdGlhbGl6ZV9yaW5nKHN0LT5pbmRpb19kZXYtPnJpbmcpOworCWlpb19yaW5nX2J1ZmZlcl91bnJlZ2lzdGVyKHN0LT5pbmRpb19kZXYtPnJpbmcpOwogZXJyb3JfdW5yZWdfcmluZ19mdW5jczoKIAlhZGlzMTYyMDFfdW5jb25maWd1cmVfcmluZyhzdC0+aW5kaW9fZGV2KTsKIGVycm9yX2ZyZWVfZGV2OgpAQCAtNjE3LDEzICs1NTksOCBAQAogCXN0cnVjdCBhZGlzMTYyMDFfc3RhdGUgKnN0ID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CiAJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHN0LT5pbmRpb19kZXY7CiAKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCiAJYWRpczE2MjAxX3JlbW92ZV90cmlnZ2VyKGluZGlvX2Rldik7Ci0JaWYgKHNwaS0+aXJxKQotCQlpaW9fdW5yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShpbmRpb19kZXYsIDApOwotCi0JYWRpczE2MjAxX3VuaW5pdGlhbGl6ZV9yaW5nKGluZGlvX2Rldi0+cmluZyk7CisJaWlvX3JpbmdfYnVmZmVyX3VucmVnaXN0ZXIoaW5kaW9fZGV2LT5yaW5nKTsKIAlpaW9fZGV2aWNlX3VucmVnaXN0ZXIoaW5kaW9fZGV2KTsKIAlhZGlzMTYyMDFfdW5jb25maWd1cmVfcmluZyhpbmRpb19kZXYpOwogCWtmcmVlKHN0LT50eCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwMV9yaW5nLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwMV9yaW5nLmMKaW5kZXggZTY4NzBhMi4uYzYxZjk4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDFfcmluZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjAxX3JpbmcuYwpAQCAtMSwxNCArMSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAKICNpbmNsdWRlICIuLi9paW8uaCIKICNpbmNsdWRlICIuLi9zeXNmcy5oIgpAQCAtMTcsNzQgKzE0LDE1IEBACiAjaW5jbHVkZSAiLi4vdHJpZ2dlci5oIgogI2luY2x1ZGUgImFkaXMxNjIwMS5oIgogCi1zdGF0aWMgSUlPX1NDQU5fRUxfQyhpbl9zdXBwbHksIEFESVMxNjIwMV9TQ0FOX1NVUFBMWSwgQURJUzE2MjAxX1NVUFBMWV9PVVQsIE5VTEwpOwotc3RhdGljIElJT19DT05TVF9BVFRSX1NDQU5fRUxfVFlQRShpbl9zdXBwbHksIHUsIDEyLCAxNik7Ci1zdGF0aWMgSUlPX1NDQU5fRUxfQyhhY2NlbF94LCBBRElTMTYyMDFfU0NBTl9BQ0NfWCwgQURJUzE2MjAxX1hBQ0NMX09VVCwgTlVMTCk7Ci1zdGF0aWMgSUlPX1NDQU5fRUxfQyhhY2NlbF95LCBBRElTMTYyMDFfU0NBTl9BQ0NfWSwgQURJUzE2MjAxX1lBQ0NMX09VVCwgTlVMTCk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfU0NBTl9FTF9UWVBFKGFjY2VsLCBzLCAxNCwgMTYpOwotc3RhdGljIElJT19TQ0FOX0VMX0MoaW4wLCBBRElTMTYyMDFfU0NBTl9BVVhfQURDLCBBRElTMTYyMDFfQVVYX0FEQywgTlVMTCk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfU0NBTl9FTF9UWVBFKGluMCwgdSwgMTIsIDE2KTsKLXN0YXRpYyBJSU9fU0NBTl9FTF9DKHRlbXAsIEFESVMxNjIwMV9TQ0FOX1RFTVAsIEFESVMxNjIwMV9URU1QX09VVCwgTlVMTCk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfU0NBTl9FTF9UWVBFKHRlbXAsIHUsIDEyLCAxNik7Ci1zdGF0aWMgSUlPX1NDQU5fRUxfQyhpbmNsaV94LCBBRElTMTYyMDFfU0NBTl9JTkNMSV9YLAotCQkgICAgIEFESVMxNjIwMV9YSU5DTF9PVVQsIE5VTEwpOwotc3RhdGljIElJT19TQ0FOX0VMX0MoaW5jbGlfeSwgQURJUzE2MjAxX1NDQU5fSU5DTElfWSwKLQkJICAgICBBRElTMTYyMDFfWUlOQ0xfT1VULCBOVUxMKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUl9TQ0FOX0VMX1RZUEUoaW5jbGksIHMsIDE0LCAxNik7Ci1zdGF0aWMgSUlPX1NDQU5fRUxfVElNRVNUQU1QKDcpOwotc3RhdGljIElJT19DT05TVF9BVFRSX1NDQU5fRUxfVFlQRSh0aW1lc3RhbXAsIHMsIDY0LCA2NCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZGlzMTYyMDFfc2Nhbl9lbF9hdHRyc1tdID0gewotCSZpaW9fc2Nhbl9lbF9pbl9zdXBwbHkuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW5fc3VwcGx5X2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luX3N1cHBseV90eXBlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2FjY2VsX3guZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfYWNjZWxfeF9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9hY2NlbF95LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2FjY2VsX3lfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfYWNjZWxfdHlwZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjAuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4wX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luMF90eXBlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX3RlbXAuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfdGVtcF9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl90ZW1wX3R5cGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfaW5jbGlfeC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbmNsaV94X2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luY2xpX3kuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW5jbGlfeV9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbmNsaV90eXBlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX3RpbWVzdGFtcC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl90aW1lc3RhbXBfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfdGltZXN0YW1wX3R5cGUuZGV2X2F0dHIuYXR0ciwKLQlOVUxMLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYWRpczE2MjAxX3NjYW5fZWxfZ3JvdXAgPSB7Ci0JLmF0dHJzID0gYWRpczE2MjAxX3NjYW5fZWxfYXR0cnMsCi0JLm5hbWUgPSAic2Nhbl9lbGVtZW50cyIsCi19OwotCi0vKioKLSAqIGFkaXMxNjIwMV9wb2xsX2Z1bmNfdGgoKSB0b3AgaGFsZiBpbnRlcnJ1cHQgaGFuZGxlciBjYWxsZWQgYnkgdHJpZ2dlcgotICogQHByaXZhdGVfZGF0YToJaWlvX2RldgotICoqLwotc3RhdGljIHZvaWQgYWRpczE2MjAxX3BvbGxfZnVuY190aChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LCBzNjQgdGltZSkKLXsKLQlzdHJ1Y3QgYWRpczE2MjAxX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKLQlzdC0+bGFzdF90aW1lc3RhbXAgPSB0aW1lOwotCXNjaGVkdWxlX3dvcmsoJnN0LT53b3JrX3RyaWdnZXJfdG9fcmluZyk7Ci19CiAKIC8qKgogICogYWRpczE2MjAxX3JlYWRfcmluZ19kYXRhKCkgcmVhZCBkYXRhIHJlZ2lzdGVycyB3aGljaCB3aWxsIGJlIHBsYWNlZCBpbnRvIHJpbmcKICAqIEBkZXY6IGRldmljZSBhc3NvY2lhdGVkIHdpdGggY2hpbGQgb2YgYWN0dWFsIGRldmljZSAoaWlvX2RldiBvciBpaW9fdHJpZykKICAqIEByeDogc29tZXdoZXJlIHRvIHBhc3MgYmFjayB0aGUgdmFsdWUgcmVhZAogICoqLwotc3RhdGljIGludCBhZGlzMTYyMDFfcmVhZF9yaW5nX2RhdGEoc3RydWN0IGRldmljZSAqZGV2LCB1OCAqcngpCitzdGF0aWMgaW50IGFkaXMxNjIwMV9yZWFkX3JpbmdfZGF0YShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LCB1OCAqcngpCiB7CiAJc3RydWN0IHNwaV9tZXNzYWdlIG1zZzsKLQlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGFkaXMxNjIwMV9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CiAJc3RydWN0IHNwaV90cmFuc2ZlciB4ZmVyc1tBRElTMTYyMDFfT1VUUFVUUyArIDFdOwogCWludCByZXQ7CkBAIC0xMDEsNyArMzksOCBAQAogCQl4ZmVyc1tpXS5sZW4gPSAyOwogCQl4ZmVyc1tpXS5kZWxheV91c2VjcyA9IDIwOwogCQl4ZmVyc1tpXS50eF9idWYgPSBzdC0+dHggKyAyICogaTsKLQkJc3QtPnR4WzIgKiBpXSA9IEFESVMxNjIwMV9SRUFEX1JFRyhBRElTMTYyMDFfU1VQUExZX09VVCArIDIgKiBpKTsKKwkJc3QtPnR4WzIgKiBpXSA9IEFESVMxNjIwMV9SRUFEX1JFRyhBRElTMTYyMDFfU1VQUExZX09VVCArCisJCQkJCQkgICAyICogaSk7CiAJCXN0LT50eFsyICogaSArIDFdID0gMDsKIAkJaWYgKGkgPj0gMSkKIAkJCXhmZXJzW2ldLnJ4X2J1ZiA9IHJ4ICsgMiAqIChpIC0gMSk7CkBAIC0xMjAsNTUgKzU5LDU3IEBACiAvKiBXaGlsc3QgdGhpcyBtYWtlcyBhIGxvdCBvZiBjYWxscyB0byBpaW9fc3dfcmluZyBmdW5jdGlvbnMgLSBpdCBpcyB0byBkZXZpY2UKICAqIHNwZWNpZmljIHRvIGJlIHJvbGxlZCBpbnRvIHRoZSBjb3JlLgogICovCi1zdGF0aWMgdm9pZCBhZGlzMTYyMDFfdHJpZ2dlcl9iaF90b19yaW5nKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29ya19zKQorc3RhdGljIGlycXJldHVybl90IGFkaXMxNjIwMV90cmlnZ2VyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqcCkKIHsKLQlzdHJ1Y3QgYWRpczE2MjAxX3N0YXRlICpzdAotCQk9IGNvbnRhaW5lcl9vZih3b3JrX3MsIHN0cnVjdCBhZGlzMTYyMDFfc3RhdGUsCi0JCQkgICAgICAgd29ya190cmlnZ2VyX3RvX3JpbmcpOwotCXN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcgPSBzdC0+aW5kaW9fZGV2LT5yaW5nOworCXN0cnVjdCBpaW9fcG9sbF9mdW5jICpwZiA9IHA7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHBmLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGFkaXMxNjIwMV9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CisJc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyA9IGluZGlvX2Rldi0+cmluZzsKIAogCWludCBpID0gMDsKIAlzMTYgKmRhdGE7Ci0Jc2l6ZV90IGRhdGFzaXplID0gcmluZy0+YWNjZXNzLmdldF9ieXRlc19wZXJfZGF0dW0ocmluZyk7CisJc2l6ZV90IGRhdGFzaXplID0gcmluZy0+YWNjZXNzLT5nZXRfYnl0ZXNfcGVyX2RhdHVtKHJpbmcpOwogCiAJZGF0YSA9IGttYWxsb2MoZGF0YXNpemUsIEdGUF9LRVJORUwpOwogCWlmIChkYXRhID09IE5VTEwpIHsKIAkJZGV2X2Vycigmc3QtPnVzLT5kZXYsICJtZW1vcnkgYWxsb2MgZmFpbGVkIGluIHJpbmcgYmgiKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlpZiAocmluZy0+c2Nhbl9jb3VudCkKLQkJaWYgKGFkaXMxNjIwMV9yZWFkX3JpbmdfZGF0YSgmc3QtPmluZGlvX2Rldi0+ZGV2LCBzdC0+cngpID49IDApCisJCWlmIChhZGlzMTYyMDFfcmVhZF9yaW5nX2RhdGEoc3QtPmluZGlvX2Rldiwgc3QtPnJ4KSA+PSAwKQogCQkJZm9yICg7IGkgPCByaW5nLT5zY2FuX2NvdW50OyBpKyspCiAJCQkJZGF0YVtpXSA9IGJlMTZfdG9fY3B1cCgKIAkJCQkJKF9fYmUxNiAqKSYoc3QtPnJ4W2kqMl0pKTsKIAogCS8qIEd1YXJhbnRlZWQgdG8gYmUgYWxpZ25lZCB3aXRoIDggYnl0ZSBib3VuZGFyeSAqLwogCWlmIChyaW5nLT5zY2FuX3RpbWVzdGFtcCkKLQkJKigoczY0ICopKGRhdGEgKyAoKGkgKyAzKS80KSo0KSkgPSBzdC0+bGFzdF90aW1lc3RhbXA7CisJCSooKHM2NCAqKShkYXRhICsgKChpICsgMykvNCkqNCkpID0gcGYtPnRpbWVzdGFtcDsKIAotCXJpbmctPmFjY2Vzcy5zdG9yZV90byhyaW5nLAotCQkJICAgICAgKHU4ICopZGF0YSwKLQkJCSAgICAgIHN0LT5sYXN0X3RpbWVzdGFtcCk7CisJcmluZy0+YWNjZXNzLT5zdG9yZV90byhyaW5nLCAodTggKilkYXRhLCBwZi0+dGltZXN0YW1wKTsKIAogCWlpb190cmlnZ2VyX25vdGlmeV9kb25lKHN0LT5pbmRpb19kZXYtPnRyaWcpOwogCWtmcmVlKGRhdGEpOwogCi0JcmV0dXJuOworCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogdm9pZCBhZGlzMTYyMDFfdW5jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQogewotCWtmcmVlKGluZGlvX2Rldi0+cG9sbGZ1bmMpOworCWlpb19kZWFsbG9jX3BvbGxmdW5jKGluZGlvX2Rldi0+cG9sbGZ1bmMpOwogCWlpb19zd19yYl9mcmVlKGluZGlvX2Rldi0+cmluZyk7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX3Jpbmdfc2V0dXBfb3BzIGFkaXMxNjIwMV9yaW5nX3NldHVwX29wcyA9IHsKKwkucHJlZW5hYmxlID0gJmlpb19zd19yaW5nX3ByZWVuYWJsZSwKKwkucG9zdGVuYWJsZSA9ICZpaW9fdHJpZ2dlcmVkX3JpbmdfcG9zdGVuYWJsZSwKKwkucHJlZGlzYWJsZSA9ICZpaW9fdHJpZ2dlcmVkX3JpbmdfcHJlZGlzYWJsZSwKK307CisKIGludCBhZGlzMTYyMDFfY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKIAlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgYWRpczE2MjAxX3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CiAJc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZzsKLQlJTklUX1dPUksoJnN0LT53b3JrX3RyaWdnZXJfdG9fcmluZywgYWRpczE2MjAxX3RyaWdnZXJfYmhfdG9fcmluZyk7CiAKIAlyaW5nID0gaWlvX3N3X3JiX2FsbG9jYXRlKGluZGlvX2Rldik7CiAJaWYgKCFyaW5nKSB7CkBAIC0xNzcsNDIgKzExOCwzNSBAQAogCX0KIAlpbmRpb19kZXYtPnJpbmcgPSByaW5nOwogCS8qIEVmZmVjdGl2ZWx5IHNlbGVjdCB0aGUgcmluZyBidWZmZXIgaW1wbGVtZW50YXRpb24gKi8KLQlpaW9fcmluZ19zd19yZWdpc3Rlcl9mdW5jcygmcmluZy0+YWNjZXNzKTsKIAlyaW5nLT5icGUgPSAyOwotCXJpbmctPnNjYW5fZWxfYXR0cnMgPSAmYWRpczE2MjAxX3NjYW5fZWxfZ3JvdXA7CiAJcmluZy0+c2Nhbl90aW1lc3RhbXAgPSB0cnVlOwotCXJpbmctPnByZWVuYWJsZSA9ICZpaW9fc3dfcmluZ19wcmVlbmFibGU7Ci0JcmluZy0+cG9zdGVuYWJsZSA9ICZpaW9fdHJpZ2dlcmVkX3JpbmdfcG9zdGVuYWJsZTsKLQlyaW5nLT5wcmVkaXNhYmxlID0gJmlpb190cmlnZ2VyZWRfcmluZ19wcmVkaXNhYmxlOworCXJpbmctPmFjY2VzcyA9ICZyaW5nX3N3X2FjY2Vzc19mdW5jczsKKwlyaW5nLT5zZXR1cF9vcHMgPSAmYWRpczE2MjAxX3Jpbmdfc2V0dXBfb3BzOwogCXJpbmctPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAkvKiBTZXQgZGVmYXVsdCBzY2FuIG1vZGUgKi8KLQlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCBpaW9fc2Nhbl9lbF9pbl9zdXBwbHkubnVtYmVyKTsKLQlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCBpaW9fc2Nhbl9lbF9hY2NlbF94Lm51bWJlcik7Ci0JaWlvX3NjYW5fbWFza19zZXQocmluZywgaWlvX3NjYW5fZWxfYWNjZWxfeS5udW1iZXIpOwotCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIGlpb19zY2FuX2VsX3RlbXAubnVtYmVyKTsKLQlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCBpaW9fc2Nhbl9lbF9pbjAubnVtYmVyKTsKLQlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCBpaW9fc2Nhbl9lbF9pbmNsaV94Lm51bWJlcik7Ci0JaWlvX3NjYW5fbWFza19zZXQocmluZywgaWlvX3NjYW5fZWxfaW5jbGlfeS5udW1iZXIpOworCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsCUFESVMxNjIwMV9TQ0FOX1NVUFBMWSk7CisJaWlvX3NjYW5fbWFza19zZXQocmluZywgQURJUzE2MjAxX1NDQU5fQUNDX1gpOworCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIEFESVMxNjIwMV9TQ0FOX0FDQ19ZKTsKKwlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCBBRElTMTYyMDFfU0NBTl9BVVhfQURDKTsKKwlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCBBRElTMTYyMDFfU0NBTl9URU1QKTsKKwlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCBBRElTMTYyMDFfU0NBTl9JTkNMSV9YKTsKKwlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCBBRElTMTYyMDFfU0NBTl9JTkNMSV9ZKTsKIAotCXJldCA9IGlpb19hbGxvY19wb2xsZnVuYyhpbmRpb19kZXYsIE5VTEwsICZhZGlzMTYyMDFfcG9sbF9mdW5jX3RoKTsKLQlpZiAocmV0KQorCWluZGlvX2Rldi0+cG9sbGZ1bmMgPSBpaW9fYWxsb2NfcG9sbGZ1bmMoJmlpb19wb2xsZnVuY19zdG9yZV90aW1lLAorCQkJCQkJICZhZGlzMTYyMDFfdHJpZ2dlcl9oYW5kbGVyLAorCQkJCQkJIElSUUZfT05FU0hPVCwKKwkJCQkJCSBpbmRpb19kZXYsCisJCQkJCQkgImFkaXMxNjIwMV9jb25zdW1lciVkIiwKKwkJCQkJCSBpbmRpb19kZXYtPmlkKTsKKwlpZiAoaW5kaW9fZGV2LT5wb2xsZnVuYyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3JfaWlvX3N3X3JiX2ZyZWU7CisJfQogCiAJaW5kaW9fZGV2LT5tb2RlcyB8PSBJTkRJT19SSU5HX1RSSUdHRVJFRDsKIAlyZXR1cm4gMDsKLQogZXJyb3JfaWlvX3N3X3JiX2ZyZWU6CiAJaWlvX3N3X3JiX2ZyZWUoaW5kaW9fZGV2LT5yaW5nKTsKIAlyZXR1cm4gcmV0OwogfQotCi1pbnQgYWRpczE2MjAxX2luaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKQotewotCXJldHVybiBpaW9fcmluZ19idWZmZXJfcmVnaXN0ZXIocmluZywgMCk7Ci19Ci0KLXZvaWQgYWRpczE2MjAxX3VuaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpCi17Ci0JaWlvX3JpbmdfYnVmZmVyX3VucmVnaXN0ZXIocmluZyk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwMV90cmlnZ2VyLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwMV90cmlnZ2VyLmMKaW5kZXggOGE5Y2VhMTkuLmJlYTkxN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjAxX3RyaWdnZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwMV90cmlnZ2VyLmMKQEAgLTQsNyArNCw2IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogCiAjaW5jbHVkZSAiLi4vaWlvLmgiCkBAIC0xMywzNSArMTIsNiBAQAogI2luY2x1ZGUgImFkaXMxNjIwMS5oIgogCiAvKioKLSAqIGFkaXMxNjIwMV9kYXRhX3JkeV90cmlnX3BvbGwoKSB0aGUgZXZlbnQgaGFuZGxlciBmb3IgdGhlIGRhdGEgcmR5IHRyaWcKLSAqKi8KLXN0YXRpYyBpbnQgYWRpczE2MjAxX2RhdGFfcmR5X3RyaWdfcG9sbChzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8sCi0JCQkJICAgICAgIGludCBpbmRleCwKLQkJCQkgICAgICAgczY0IHRpbWVzdGFtcCwKLQkJCQkgICAgICAgaW50IG5vX3Rlc3QpCi17Ci0Jc3RydWN0IGFkaXMxNjIwMV9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGRldl9pbmZvKTsKLQlzdHJ1Y3QgaWlvX3RyaWdnZXIgKnRyaWcgPSBzdC0+dHJpZzsKLQotCWlpb190cmlnZ2VyX3BvbGwodHJpZywgdGltZXN0YW1wKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotSUlPX0VWRU5UX1NIKGRhdGFfcmR5X3RyaWcsICZhZGlzMTYyMDFfZGF0YV9yZHlfdHJpZ19wb2xsKTsKLQotc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIGlpb190cmlnZ2VyX3JlYWRfbmFtZSwgTlVMTCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZGlzMTYyMDFfdHJpZ2dlcl9hdHRyc1tdID0gewotCSZkZXZfYXR0cl9uYW1lLmF0dHIsCi0JTlVMTCwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFkaXMxNjIwMV90cmlnZ2VyX2F0dHJfZ3JvdXAgPSB7Ci0JLmF0dHJzID0gYWRpczE2MjAxX3RyaWdnZXJfYXR0cnMsCi19OwotCi0vKioKICAqIGFkaXMxNjIwMV9kYXRhX3JkeV90cmlnZ2VyX3NldF9zdGF0ZSgpIHNldCBkYXRhcmR5IGludGVycnVwdCBzdGF0ZQogICoqLwogc3RhdGljIGludCBhZGlzMTYyMDFfZGF0YV9yZHlfdHJpZ2dlcl9zZXRfc3RhdGUoc3RydWN0IGlpb190cmlnZ2VyICp0cmlnLApAQCAtNDksMzEgKzE5LDkgQEAKIHsKIAlzdHJ1Y3QgYWRpczE2MjAxX3N0YXRlICpzdCA9IHRyaWctPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gc3QtPmluZGlvX2RldjsKLQlpbnQgcmV0ID0gMDsKIAogCWRldl9kYmcoJmluZGlvX2Rldi0+ZGV2LCAiJXMgKCVkKVxuIiwgX19mdW5jX18sIHN0YXRlKTsKLQlyZXQgPSBhZGlzMTYyMDFfc2V0X2lycSgmc3QtPmluZGlvX2Rldi0+ZGV2LCBzdGF0ZSk7Ci0JaWYgKHN0YXRlID09IGZhbHNlKSB7Ci0JCWlpb19yZW1vdmVfZXZlbnRfZnJvbV9saXN0KCZpaW9fZXZlbnRfZGF0YV9yZHlfdHJpZywKLQkJCQkJICAgJmluZGlvX2Rldi0+aW50ZXJydXB0c1swXQotCQkJCQkgICAtPmV2X2xpc3QpOwotCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCX0gZWxzZSB7Ci0JCWlpb19hZGRfZXZlbnRfdG9fbGlzdCgmaWlvX2V2ZW50X2RhdGFfcmR5X3RyaWcsCi0JCQkJICAgICAgJmluZGlvX2Rldi0+aW50ZXJydXB0c1swXS0+ZXZfbGlzdCk7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogYWRpczE2MjAxX3RyaWdfdHJ5X3JlZW4oKSB0cnkgcmVuYWJsaW5nIGlycSBmb3IgZGF0YSByZHkgdHJpZ2dlcgotICogQHRyaWc6CXRoZSBkYXRhcmR5IHRyaWdnZXIKLSAqKi8KLXN0YXRpYyBpbnQgYWRpczE2MjAxX3RyaWdfdHJ5X3JlZW4oc3RydWN0IGlpb190cmlnZ2VyICp0cmlnKQotewotCXN0cnVjdCBhZGlzMTYyMDFfc3RhdGUgKnN0ID0gdHJpZy0+cHJpdmF0ZV9kYXRhOwotCWVuYWJsZV9pcnEoc3QtPnVzLT5pcnEpOwotCXJldHVybiAwOworCXJldHVybiBhZGlzMTYyMDFfc2V0X2lycShzdC0+aW5kaW9fZGV2LCBzdGF0ZSk7CiB9CiAKIGludCBhZGlzMTYyMDFfcHJvYmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQpAQCAtODEsMzQgKzI5LDM2IEBACiAJaW50IHJldDsKIAlzdHJ1Y3QgYWRpczE2MjAxX3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CiAKLQlzdC0+dHJpZyA9IGlpb19hbGxvY2F0ZV90cmlnZ2VyKCk7Ci0Jc3QtPnRyaWctPm5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwKLQkJCQkiYWRpczE2MjAxLWRldiVkIiwKLQkJCQlpbmRpb19kZXYtPmlkKTsKLQlpZiAoIXN0LT50cmlnLT5uYW1lKSB7CisJc3QtPnRyaWcgPSBpaW9fYWxsb2NhdGVfdHJpZ2dlcigiYWRpczE2MjAxLWRldiVkIiwgaW5kaW9fZGV2LT5pZCk7CisJaWYgKHN0LT50cmlnID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJvcl9mcmVlX3RyaWc7CisJCWdvdG8gZXJyb3JfcmV0OwogCX0KKwlyZXQgPSByZXF1ZXN0X2lycShzdC0+dXMtPmlycSwKKwkJCSAgJmlpb190cmlnZ2VyX2dlbmVyaWNfZGF0YV9yZHlfcG9sbCwKKwkJCSAgSVJRRl9UUklHR0VSX1JJU0lORywKKwkJCSAgImFkaXMxNjIwMSIsCisJCQkgIHN0LT50cmlnKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yX2ZyZWVfdHJpZzsKIAlzdC0+dHJpZy0+ZGV2LnBhcmVudCA9ICZzdC0+dXMtPmRldjsKIAlzdC0+dHJpZy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlzdC0+dHJpZy0+cHJpdmF0ZV9kYXRhID0gc3Q7CiAJc3QtPnRyaWctPnNldF90cmlnZ2VyX3N0YXRlID0gJmFkaXMxNjIwMV9kYXRhX3JkeV90cmlnZ2VyX3NldF9zdGF0ZTsKLQlzdC0+dHJpZy0+dHJ5X3JlZW5hYmxlID0gJmFkaXMxNjIwMV90cmlnX3RyeV9yZWVuOwotCXN0LT50cmlnLT5jb250cm9sX2F0dHJzID0gJmFkaXMxNjIwMV90cmlnZ2VyX2F0dHJfZ3JvdXA7CiAJcmV0ID0gaWlvX3RyaWdnZXJfcmVnaXN0ZXIoc3QtPnRyaWcpOwogCiAJLyogc2VsZWN0IGRlZmF1bHQgdHJpZ2dlciAqLwogCWluZGlvX2Rldi0+dHJpZyA9IHN0LT50cmlnOwogCWlmIChyZXQpCi0JCWdvdG8gZXJyb3JfZnJlZV90cmlnX25hbWU7CisJCWdvdG8gZXJyb3JfZnJlZV9pcnE7CiAKIAlyZXR1cm4gMDsKIAotZXJyb3JfZnJlZV90cmlnX25hbWU6Ci0Ja2ZyZWUoc3QtPnRyaWctPm5hbWUpOworZXJyb3JfZnJlZV9pcnE6CisJZnJlZV9pcnEoc3QtPnVzLT5pcnEsIHN0LT50cmlnKTsKIGVycm9yX2ZyZWVfdHJpZzoKIAlpaW9fZnJlZV90cmlnZ2VyKHN0LT50cmlnKTsKLQorZXJyb3JfcmV0OgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTExNyw2ICs2Nyw2IEBACiAJc3RydWN0IGFkaXMxNjIwMV9zdGF0ZSAqc3RhdGUgPSBpbmRpb19kZXYtPmRldl9kYXRhOwogCiAJaWlvX3RyaWdnZXJfdW5yZWdpc3RlcihzdGF0ZS0+dHJpZyk7Ci0Ja2ZyZWUoc3RhdGUtPnRyaWctPm5hbWUpOworCWZyZWVfaXJxKHN0YXRlLT51cy0+aXJxLCBzdGF0ZS0+dHJpZyk7CiAJaWlvX2ZyZWVfdHJpZ2dlcihzdGF0ZS0+dHJpZyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwMy5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDMuaAppbmRleCBiODg2ODgxLi44YmI4Y2U1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwMy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjAzLmgKQEAgLTU5LDkgKzU5LDYgQEAKIC8qKgogICogc3RydWN0IGFkaXMxNjIwM19zdGF0ZSAtIGRldmljZSBpbnN0YW5jZSBzcGVjaWZpYyBkYXRhCiAgKiBAdXM6CQkJYWN0dWFsIHNwaV9kZXZpY2UKLSAqIEB3b3JrX3RyaWdnZXJfdG9fcmluZzogYmggZm9yIHRyaWdnZXJlZCBldmVudCBoYW5kbGluZwotICogQGludGVyOgkJdXNlZCB0byBjaGVjayBpZiBuZXcgaW50ZXJydXB0IGhhcyBiZWVuIHRyaWdnZXJlZAotICogQGxhc3RfdGltZXN0YW1wOglwYXNzaW5nIHRpbWVzdGFtcCBmcm9tIHRoIHRvIGJoIG9mIGludGVycnVwdCBoYW5kbGVyCiAgKiBAaW5kaW9fZGV2OgkJaW5kdXN0cmlhbCBJL08gZGV2aWNlIHN0cnVjdHVyZQogICogQHRyaWc6CQlkYXRhIHJlYWR5IHRyaWdnZXIgcmVnaXN0ZXJlZCB3aXRoIGlpbwogICogQHR4OgkJCXRyYW5zbWl0IGJ1ZmZlcgpAQCAtNzAsOCArNjcsNiBAQAogICoqLwogc3RydWN0IGFkaXMxNjIwM19zdGF0ZSB7CiAJc3RydWN0IHNwaV9kZXZpY2UJCSp1czsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCXdvcmtfdHJpZ2dlcl90b19yaW5nOwotCXM2NAkJCQlsYXN0X3RpbWVzdGFtcDsKIAlzdHJ1Y3QgaWlvX2RldgkJCSppbmRpb19kZXY7CiAJc3RydWN0IGlpb190cmlnZ2VyCQkqdHJpZzsKIAl1OAkJCQkqdHg7CkBAIC03OSw3ICs3NCw3IEBACiAJc3RydWN0IG11dGV4CQkJYnVmX2xvY2s7CiB9OwogCi1pbnQgYWRpczE2MjAzX3NldF9pcnEoc3RydWN0IGRldmljZSAqZGV2LCBib29sIGVuYWJsZSk7CitpbnQgYWRpczE2MjAzX3NldF9pcnEoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwgYm9vbCBlbmFibGUpOwogCiAjaWZkZWYgQ09ORklHX0lJT19SSU5HX0JVRkZFUgogZW51bSBhZGlzMTYyMDNfc2NhbiB7CkBAIC0xMDAsOCArOTUsNiBAQAogaW50IGFkaXMxNjIwM19jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKIHZvaWQgYWRpczE2MjAzX3VuY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7CiAKLWludCBhZGlzMTYyMDNfaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpOwotdm9pZCBhZGlzMTYyMDNfdW5pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyk7CiAjZWxzZSAvKiBDT05GSUdfSUlPX1JJTkdfQlVGRkVSICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGlzMTYyMDNfcmVtb3ZlX3RyaWdnZXIoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKQEAgLTEzMCwxNCArMTIzLDUgQEAKIHsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYWRpczE2MjAzX2luaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRpczE2MjAzX3VuaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpCi17Ci19Ci0KICNlbmRpZiAvKiBDT05GSUdfSUlPX1JJTkdfQlVGRkVSICovCiAjZW5kaWYgLyogU1BJX0FESVMxNjIwM19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDNfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDNfY29yZS5jCmluZGV4IGI1N2YxOTAuLjM2YmU0ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjAzX2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwM19jb3JlLmMKQEAgLTYsOSArNiw2IEBACiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC0xNiwzMyArMTMsMjkgQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgogCiAjaW5jbHVkZSAiLi4vaWlvLmgiCiAjaW5jbHVkZSAiLi4vc3lzZnMuaCIKICNpbmNsdWRlICJhY2NlbC5oIgogI2luY2x1ZGUgImluY2xpbm9tZXRlci5oIgotI2luY2x1ZGUgIi4uL2d5cm8vZ3lyby5oIgorI2luY2x1ZGUgIi4uL3JpbmdfZ2VuZXJpYy5oIgogI2luY2x1ZGUgIi4uL2FkYy9hZGMuaCIKIAogI2luY2x1ZGUgImFkaXMxNjIwMy5oIgogCiAjZGVmaW5lIERSSVZFUl9OQU1FCQkiYWRpczE2MjAzIgogCi1zdGF0aWMgaW50IGFkaXMxNjIwM19jaGVja19zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2KTsKLQogLyoqCiAgKiBhZGlzMTYyMDNfc3BpX3dyaXRlX3JlZ184KCkgLSB3cml0ZSBzaW5nbGUgYnl0ZSB0byBhIHJlZ2lzdGVyCi0gKiBAZGV2OiBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIGNoaWxkIG9mIGFjdHVhbCBkZXZpY2UgKGlpb19kZXYgb3IgaWlvX3RyaWcpCisgKiBAaW5kaW9fZGV2OiBpaW8gZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBjaGlsZCBvZiBhY3R1YWwgZGV2aWNlCiAgKiBAcmVnX2FkZHJlc3M6IHRoZSBhZGRyZXNzIG9mIHRoZSByZWdpc3RlciB0byBiZSB3cml0dGVuCiAgKiBAdmFsOiB0aGUgdmFsdWUgdG8gd3JpdGUKICAqKi8KLXN0YXRpYyBpbnQgYWRpczE2MjAzX3NwaV93cml0ZV9yZWdfOChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXU4IHJlZ19hZGRyZXNzLAotCQl1OCB2YWwpCitzdGF0aWMgaW50IGFkaXMxNjIwM19zcGlfd3JpdGVfcmVnXzgoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKKwkJCQkgICAgIHU4IHJlZ19hZGRyZXNzLAorCQkJCSAgICAgdTggdmFsKQogewogCWludCByZXQ7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBhZGlzMTYyMDNfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOwogCiAJbXV0ZXhfbG9jaygmc3QtPmJ1Zl9sb2NrKTsKQEAgLTU3LDE4ICs1MCwxNyBAQAogCiAvKioKICAqIGFkaXMxNjIwM19zcGlfd3JpdGVfcmVnXzE2KCkgLSB3cml0ZSAyIGJ5dGVzIHRvIGEgcGFpciBvZiByZWdpc3RlcnMKLSAqIEBkZXY6IGRldmljZSBhc3NvY2lhdGVkIHdpdGggY2hpbGQgb2YgYWN0dWFsIGRldmljZSAoaWlvX2RldiBvciBpaW9fdHJpZykKKyAqIEBpbmRpb19kZXY6IGlpbyBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIGNoaWxkIG9mIGFjdHVhbCBkZXZpY2UKICAqIEByZWdfYWRkcmVzczogdGhlIGFkZHJlc3Mgb2YgdGhlIGxvd2VyIG9mIHRoZSB0d28gcmVnaXN0ZXJzLiBTZWNvbmQgcmVnaXN0ZXIKICAqICAgICAgICAgICAgICAgaXMgYXNzdW1lZCB0byBoYXZlIGFkZHJlc3Mgb25lIGdyZWF0ZXIuCiAgKiBAdmFsOiB2YWx1ZSB0byBiZSB3cml0dGVuCiAgKiovCi1zdGF0aWMgaW50IGFkaXMxNjIwM19zcGlfd3JpdGVfcmVnXzE2KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJdTggbG93ZXJfcmVnX2FkZHJlc3MsCi0JCXUxNiB2YWx1ZSkKK3N0YXRpYyBpbnQgYWRpczE2MjAzX3NwaV93cml0ZV9yZWdfMTYoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKKwkJCQkgICAgICB1OCBsb3dlcl9yZWdfYWRkcmVzcywKKwkJCQkgICAgICB1MTYgdmFsdWUpCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbXNnOwotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgYWRpczE2MjAzX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKIAlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHhmZXJzW10gPSB7CiAJCXsKQEAgLTgwLDcgKzcyLDYgQEAKIAkJCS50eF9idWYgPSBzdC0+dHggKyAyLAogCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAogCQkJLmxlbiA9IDIsCi0JCQkuY3NfY2hhbmdlID0gMSwKIAkJfSwKIAl9OwogCkBAIC0xMDEsMTcgKzkyLDE2IEBACiAKIC8qKgogICogYWRpczE2MjAzX3NwaV9yZWFkX3JlZ18xNigpIC0gcmVhZCAyIGJ5dGVzIGZyb20gYSAxNi1iaXQgcmVnaXN0ZXIKLSAqIEBkZXY6IGRldmljZSBhc3NvY2lhdGVkIHdpdGggY2hpbGQgb2YgYWN0dWFsIGRldmljZSAoaWlvX2RldiBvciBpaW9fdHJpZykKKyAqIEBpbmRpb19kZXY6IGlpbyBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIGNoaWxkIG9mIGFjdHVhbCBkZXZpY2UKICAqIEByZWdfYWRkcmVzczogdGhlIGFkZHJlc3Mgb2YgdGhlIGxvd2VyIG9mIHRoZSB0d28gcmVnaXN0ZXJzLiBTZWNvbmQgcmVnaXN0ZXIKICAqICAgICAgICAgICAgICAgaXMgYXNzdW1lZCB0byBoYXZlIGFkZHJlc3Mgb25lIGdyZWF0ZXIuCiAgKiBAdmFsOiBzb21ld2hlcmUgdG8gcGFzcyBiYWNrIHRoZSB2YWx1ZSByZWFkCiAgKiovCi1zdGF0aWMgaW50IGFkaXMxNjIwM19zcGlfcmVhZF9yZWdfMTYoc3RydWN0IGRldmljZSAqZGV2LAorc3RhdGljIGludCBhZGlzMTYyMDNfc3BpX3JlYWRfcmVnXzE2KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCiAJCXU4IGxvd2VyX3JlZ19hZGRyZXNzLAogCQl1MTYgKnZhbCkKIHsKIAlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbXNnOwotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgYWRpczE2MjAzX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKIAlpbnQgcmV0OwogCXN0cnVjdCBzcGlfdHJhbnNmZXIgeGZlcnNbXSA9IHsKQEAgLTEyNSw3ICsxMTUsNiBAQAogCQkJLnJ4X2J1ZiA9IHN0LT5yeCwKIAkJCS5iaXRzX3Blcl93b3JkID0gOCwKIAkJCS5sZW4gPSAyLAotCQkJLmNzX2NoYW5nZSA9IDEsCiAJCQkuZGVsYXlfdXNlY3MgPSAyMCwKIAkJfSwKIAl9OwpAQCAtMTUwLDEwMSArMTM5LDQzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHNzaXplX3QgYWRpczE2MjAzX3JlYWRfMTJiaXRfdW5zaWduZWQoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY2hhciAqYnVmKQorc3RhdGljIGludCBhZGlzMTYyMDNfY2hlY2tfc3RhdHVzKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCiB7CisJdTE2IHN0YXR1czsKIAlpbnQgcmV0OwotCXUxNiB2YWwgPSAwOwotCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKIAotCXJldCA9IGFkaXMxNjIwM19zcGlfcmVhZF9yZWdfMTYoZGV2LCB0aGlzX2F0dHItPmFkZHJlc3MsICZ2YWwpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAodmFsICYgQURJUzE2MjAzX0VSUk9SX0FDVElWRSkKLQkJYWRpczE2MjAzX2NoZWNrX3N0YXR1cyhkZXYpOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHZhbCAmIDB4MEZGRik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGFkaXMxNjIwM19yZWFkX3RlbXAoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY2hhciAqYnVmKQotewotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzc2l6ZV90IHJldDsKLQl1MTYgdmFsOwotCi0JLyogVGFrZSB0aGUgaWlvX2RldiBzdGF0dXMgbG9jayAqLwotCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOwotCi0JcmV0ID0gYWRpczE2MjAzX3NwaV9yZWFkX3JlZ18xNihkZXYsIEFESVMxNjIwM19URU1QX09VVCwgKHUxNiAqKSZ2YWwpOwotCWlmIChyZXQpCisJcmV0ID0gYWRpczE2MjAzX3NwaV9yZWFkX3JlZ18xNihpbmRpb19kZXYsCisJCQkJCUFESVMxNjIwM19ESUFHX1NUQVQsCisJCQkJCSZzdGF0dXMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmluZGlvX2Rldi0+ZGV2LCAiUmVhZGluZyBzdGF0dXMgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJvcl9yZXQ7Ci0KLQlpZiAodmFsICYgQURJUzE2MjAzX0VSUk9SX0FDVElWRSkKLQkJYWRpczE2MjAzX2NoZWNrX3N0YXR1cyhkZXYpOwotCi0JdmFsICY9IDB4RkZGOwotCXJldCA9IHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbCk7Ci0KLWVycm9yX3JldDoKLQltdXRleF91bmxvY2soJmluZGlvX2Rldi0+bWxvY2spOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGFkaXMxNjIwM19yZWFkXzE0Yml0X3NpZ25lZChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljaGFyICpidWYpCi17Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKLQlzMTYgdmFsID0gMDsKLQlzc2l6ZV90IHJldDsKLQotCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOwotCi0JcmV0ID0gYWRpczE2MjAzX3NwaV9yZWFkX3JlZ18xNihkZXYsIHRoaXNfYXR0ci0+YWRkcmVzcywgKHUxNiAqKSZ2YWwpOwotCWlmICghcmV0KSB7Ci0JCWlmICh2YWwgJiBBRElTMTYyMDNfRVJST1JfQUNUSVZFKQotCQkJYWRpczE2MjAzX2NoZWNrX3N0YXR1cyhkZXYpOwotCi0JCXZhbCA9ICgoczE2KSh2YWwgPDwgMikgPj4gMik7Ci0JCXJldCA9IHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbCk7CiAJfQorCXJldCA9IHN0YXR1cyAmIDB4MUY7CiAKLQltdXRleF91bmxvY2soJmluZGlvX2Rldi0+bWxvY2spOworCWlmIChzdGF0dXMgJiBBRElTMTYyMDNfRElBR19TVEFUX1NFTEZURVNUX0ZBSUwpCisJCWRldl9lcnIoJmluZGlvX2Rldi0+ZGV2LCAiU2VsZiB0ZXN0IGZhaWx1cmVcbiIpOworCWlmIChzdGF0dXMgJiBBRElTMTYyMDNfRElBR19TVEFUX1NQSV9GQUlMKQorCQlkZXZfZXJyKCZpbmRpb19kZXYtPmRldiwgIlNQSSBmYWlsdXJlXG4iKTsKKwlpZiAoc3RhdHVzICYgQURJUzE2MjAzX0RJQUdfU1RBVF9GTEFTSF9VUFQpCisJCWRldl9lcnIoJmluZGlvX2Rldi0+ZGV2LCAiRmxhc2ggdXBkYXRlIGZhaWxlZFxuIik7CisJaWYgKHN0YXR1cyAmIEFESVMxNjIwM19ESUFHX1NUQVRfUE9XRVJfSElHSCkKKwkJZGV2X2VycigmaW5kaW9fZGV2LT5kZXYsICJQb3dlciBzdXBwbHkgYWJvdmUgMy42MjVWXG4iKTsKKwlpZiAoc3RhdHVzICYgQURJUzE2MjAzX0RJQUdfU1RBVF9QT1dFUl9MT1cpCisJCWRldl9lcnIoJmluZGlvX2Rldi0+ZGV2LCAiUG93ZXIgc3VwcGx5IGJlbG93IDMuMTVWXG4iKTsKIAorZXJyb3JfcmV0OgogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGFkaXMxNjIwM193cml0ZV8xNmJpdChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljb25zdCBjaGFyICpidWYsCi0JCXNpemVfdCBsZW4pCi17Ci0Jc3RydWN0IGlpb19kZXZfYXR0ciAqdGhpc19hdHRyID0gdG9faWlvX2Rldl9hdHRyKGF0dHIpOwotCWludCByZXQ7Ci0JbG9uZyB2YWw7Ci0KLQlyZXQgPSBzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ2YWwpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyb3JfcmV0OwotCXJldCA9IGFkaXMxNjIwM19zcGlfd3JpdGVfcmVnXzE2KGRldiwgdGhpc19hdHRyLT5hZGRyZXNzLCB2YWwpOwotCi1lcnJvcl9yZXQ6Ci0JcmV0dXJuIHJldCA/IHJldCA6IGxlbjsKLX0KLQotc3RhdGljIGludCBhZGlzMTYyMDNfcmVzZXQoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBhZGlzMTYyMDNfcmVzZXQoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKIAlpbnQgcmV0OwotCXJldCA9IGFkaXMxNjIwM19zcGlfd3JpdGVfcmVnXzgoZGV2LAorCXJldCA9IGFkaXMxNjIwM19zcGlfd3JpdGVfcmVnXzgoaW5kaW9fZGV2LAogCQkJQURJUzE2MjAzX0dMT0JfQ01ELAogCQkJQURJUzE2MjAzX0dMT0JfQ01EX1NXX1JFU0VUKTsKIAlpZiAocmV0KQotCQlkZXZfZXJyKGRldiwgInByb2JsZW0gcmVzZXR0aW5nIGRldmljZSIpOworCQlkZXZfZXJyKCZpbmRpb19kZXYtPmRldiwgInByb2JsZW0gcmVzZXR0aW5nIGRldmljZSIpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTI1MywyMyArMTg0LDI0IEBACiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiB7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCWlmIChsZW4gPCAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlzd2l0Y2ggKGJ1ZlswXSkgewogCWNhc2UgJzEnOgogCWNhc2UgJ3knOgogCWNhc2UgJ1knOgotCQlyZXR1cm4gYWRpczE2MjAzX3Jlc2V0KGRldik7CisJCXJldHVybiBhZGlzMTYyMDNfcmVzZXQoaW5kaW9fZGV2KTsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLWludCBhZGlzMTYyMDNfc2V0X2lycShzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgZW5hYmxlKQoraW50IGFkaXMxNjIwM19zZXRfaXJxKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsIGJvb2wgZW5hYmxlKQogewogCWludCByZXQgPSAwOwogCXUxNiBtc2M7CiAKLQlyZXQgPSBhZGlzMTYyMDNfc3BpX3JlYWRfcmVnXzE2KGRldiwgQURJUzE2MjAzX01TQ19DVFJMLCAmbXNjKTsKKwlyZXQgPSBhZGlzMTYyMDNfc3BpX3JlYWRfcmVnXzE2KGluZGlvX2RldiwgQURJUzE2MjAzX01TQ19DVFJMLCAmbXNjKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycm9yX3JldDsKIApAQCAtMjgwLDE0MiArMjEyLDE5NSBAQAogCWVsc2UKIAkJbXNjICY9IH5BRElTMTYyMDNfTVNDX0NUUkxfREFUQV9SRFlfRU47CiAKLQlyZXQgPSBhZGlzMTYyMDNfc3BpX3dyaXRlX3JlZ18xNihkZXYsIEFESVMxNjIwM19NU0NfQ1RSTCwgbXNjKTsKKwlyZXQgPSBhZGlzMTYyMDNfc3BpX3dyaXRlX3JlZ18xNihpbmRpb19kZXYsIEFESVMxNjIwM19NU0NfQ1RSTCwgbXNjKTsKIAogZXJyb3JfcmV0OgogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgYWRpczE2MjAzX2NoZWNrX3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JdTE2IHN0YXR1czsKLQlpbnQgcmV0OwotCi0JcmV0ID0gYWRpczE2MjAzX3NwaV9yZWFkX3JlZ18xNihkZXYsIEFESVMxNjIwM19ESUFHX1NUQVQsICZzdGF0dXMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIoZGV2LCAiUmVhZGluZyBzdGF0dXMgZmFpbGVkXG4iKTsKLQkJZ290byBlcnJvcl9yZXQ7Ci0JfQotCXJldCA9IHN0YXR1cyAmIDB4MUY7Ci0KLQlpZiAoc3RhdHVzICYgQURJUzE2MjAzX0RJQUdfU1RBVF9TRUxGVEVTVF9GQUlMKQotCQlkZXZfZXJyKGRldiwgIlNlbGYgdGVzdCBmYWlsdXJlXG4iKTsKLQlpZiAoc3RhdHVzICYgQURJUzE2MjAzX0RJQUdfU1RBVF9TUElfRkFJTCkKLQkJZGV2X2VycihkZXYsICJTUEkgZmFpbHVyZVxuIik7Ci0JaWYgKHN0YXR1cyAmIEFESVMxNjIwM19ESUFHX1NUQVRfRkxBU0hfVVBUKQotCQlkZXZfZXJyKGRldiwgIkZsYXNoIHVwZGF0ZSBmYWlsZWRcbiIpOwotCWlmIChzdGF0dXMgJiBBRElTMTYyMDNfRElBR19TVEFUX1BPV0VSX0hJR0gpCi0JCWRldl9lcnIoZGV2LCAiUG93ZXIgc3VwcGx5IGFib3ZlIDMuNjI1VlxuIik7Ci0JaWYgKHN0YXR1cyAmIEFESVMxNjIwM19ESUFHX1NUQVRfUE9XRVJfTE9XKQotCQlkZXZfZXJyKGRldiwgIlBvd2VyIHN1cHBseSBiZWxvdyAzLjE1VlxuIik7Ci0KLWVycm9yX3JldDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGFkaXMxNjIwM19zZWxmX3Rlc3Qoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBhZGlzMTYyMDNfc2VsZl90ZXN0KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCiB7CiAJaW50IHJldDsKLQlyZXQgPSBhZGlzMTYyMDNfc3BpX3dyaXRlX3JlZ18xNihkZXYsCisJcmV0ID0gYWRpczE2MjAzX3NwaV93cml0ZV9yZWdfMTYoaW5kaW9fZGV2LAogCQkJQURJUzE2MjAzX01TQ19DVFJMLAogCQkJQURJUzE2MjAzX01TQ19DVFJMX1NFTEZfVEVTVF9FTik7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKGRldiwgInByb2JsZW0gc3RhcnRpbmcgc2VsZiB0ZXN0Iik7CisJCWRldl9lcnIoJmluZGlvX2Rldi0+ZGV2LCAicHJvYmxlbSBzdGFydGluZyBzZWxmIHRlc3QiKTsKIAkJZ290byBlcnJfcmV0OwogCX0KIAotCWFkaXMxNjIwM19jaGVja19zdGF0dXMoZGV2KTsKKwlhZGlzMTYyMDNfY2hlY2tfc3RhdHVzKGluZGlvX2Rldik7CiAKIGVycl9yZXQ6CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBhZGlzMTYyMDNfaW5pdGlhbF9zZXR1cChzdHJ1Y3QgYWRpczE2MjAzX3N0YXRlICpzdCkKK3N0YXRpYyBpbnQgYWRpczE2MjAzX2luaXRpYWxfc2V0dXAoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKIAlpbnQgcmV0OwotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZzdC0+aW5kaW9fZGV2LT5kZXY7CiAKIAkvKiBEaXNhYmxlIElSUSAqLwotCXJldCA9IGFkaXMxNjIwM19zZXRfaXJxKGRldiwgZmFsc2UpOworCXJldCA9IGFkaXMxNjIwM19zZXRfaXJxKGluZGlvX2RldiwgZmFsc2UpOwogCWlmIChyZXQpIHsKLQkJZGV2X2VycihkZXYsICJkaXNhYmxlIGlycSBmYWlsZWQiKTsKKwkJZGV2X2VycigmaW5kaW9fZGV2LT5kZXYsICJkaXNhYmxlIGlycSBmYWlsZWQiKTsKIAkJZ290byBlcnJfcmV0OwogCX0KIAogCS8qIERvIHNlbGYgdGVzdCAqLwotCXJldCA9IGFkaXMxNjIwM19zZWxmX3Rlc3QoZGV2KTsKKwlyZXQgPSBhZGlzMTYyMDNfc2VsZl90ZXN0KGluZGlvX2Rldik7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKGRldiwgInNlbGYgdGVzdCBmYWlsdXJlIik7CisJCWRldl9lcnIoJmluZGlvX2Rldi0+ZGV2LCAic2VsZiB0ZXN0IGZhaWx1cmUiKTsKIAkJZ290byBlcnJfcmV0OwogCX0KIAogCS8qIFJlYWQgc3RhdHVzIHJlZ2lzdGVyIHRvIGNoZWNrIHRoZSByZXN1bHQgKi8KLQlyZXQgPSBhZGlzMTYyMDNfY2hlY2tfc3RhdHVzKGRldik7CisJcmV0ID0gYWRpczE2MjAzX2NoZWNrX3N0YXR1cyhpbmRpb19kZXYpOwogCWlmIChyZXQpIHsKLQkJYWRpczE2MjAzX3Jlc2V0KGRldik7Ci0JCWRldl9lcnIoZGV2LCAiZGV2aWNlIG5vdCBwbGF5aW5nIGJhbGwgLT4gcmVzZXQiKTsKKwkJYWRpczE2MjAzX3Jlc2V0KGluZGlvX2Rldik7CisJCWRldl9lcnIoJmluZGlvX2Rldi0+ZGV2LCAiZGV2aWNlIG5vdCBwbGF5aW5nIGJhbGwgLT4gcmVzZXQiKTsKIAkJbXNsZWVwKEFESVMxNjIwM19TVEFSVFVQX0RFTEFZKTsKLQkJcmV0ID0gYWRpczE2MjAzX2NoZWNrX3N0YXR1cyhkZXYpOworCQlyZXQgPSBhZGlzMTYyMDNfY2hlY2tfc3RhdHVzKGluZGlvX2Rldik7CiAJCWlmIChyZXQpIHsKLQkJCWRldl9lcnIoZGV2LCAiZ2l2aW5nIHVwIik7CisJCQlkZXZfZXJyKCZpbmRpb19kZXYtPmRldiwgImdpdmluZyB1cCIpOwogCQkJZ290byBlcnJfcmV0OwogCQl9CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiOiBhdCBDUyVkIChpcnEgJWQpXG4iLAotCQkJc3QtPnVzLT5jaGlwX3NlbGVjdCwgc3QtPnVzLT5pcnEpOwotCiBlcnJfcmV0OgogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fTkFNRURfUkFXKDAsIHN1cHBseSwgYWRpczE2MjAzX3JlYWRfMTJiaXRfdW5zaWduZWQsCi0JCUFESVMxNjIwM19TVVBQTFlfT1VUKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUihpbjBfc3VwcGx5X3NjYWxlLCAiMC4wMDEyMiIpOwotc3RhdGljIElJT19ERVZfQVRUUl9JTl9SQVcoMSwgYWRpczE2MjAzX3JlYWRfMTJiaXRfdW5zaWduZWQsCi0JCUFESVMxNjIwM19BVVhfQURDKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUihpbjFfc2NhbGUsICIwLjAwMDYxIik7CitlbnVtIGFkaXMxNjIwM19jaGFuIHsKKwlpbl9zdXBwbHksCisJaW5fYXV4LAorCWluY2xpX3gsCisJaW5jbGlfeSwKKwl0ZW1wLAorfTsKIAotc3RhdGljIElJT19ERVZfQVRUUl9JTkNMSV9YKGFkaXMxNjIwM19yZWFkXzE0Yml0X3NpZ25lZCwKLQkJQURJUzE2MjAzX1hJTkNMX09VVCk7Ci1zdGF0aWMgSUlPX0RFVl9BVFRSX0lOQ0xJX1koYWRpczE2MjAzX3JlYWRfMTRiaXRfc2lnbmVkLAotCQlBRElTMTYyMDNfWUlOQ0xfT1VUKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5DTElfWF9PRkZTRVQoU19JV1VTUiB8IFNfSVJVR08sCi0JCWFkaXMxNjIwM19yZWFkXzE0Yml0X3NpZ25lZCwKLQkJYWRpczE2MjAzX3dyaXRlXzE2Yml0LAotCQlBRElTMTYyMDNfSU5DTF9OVUxMKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUihpbmNsaV9zY2FsZSwgIjAuMDI1Iik7CitzdGF0aWMgdTggYWRpczE2MjAzX2FkZHJlc3Nlc1s1XVsyXSA9IHsKKwlbaW5fc3VwcGx5XSA9IHsgQURJUzE2MjAzX1NVUFBMWV9PVVQgfSwKKwlbaW5fYXV4XSA9IHsgQURJUzE2MjAzX0FVWF9BREMgfSwKKwlbaW5jbGlfeF0gPSB7IEFESVMxNjIwM19YSU5DTF9PVVQsIEFESVMxNjIwM19JTkNMX05VTEx9LAorCVtpbmNsaV95XSA9IHsgQURJUzE2MjAzX1lJTkNMX09VVCB9LAorCVt0ZW1wXSA9IHsgQURJUzE2MjAzX1RFTVBfT1VUIH0KK307CiAKLXN0YXRpYyBJSU9fREVWX0FUVFJfVEVNUF9SQVcoYWRpczE2MjAzX3JlYWRfdGVtcCk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFIodGVtcF9vZmZzZXQsICIyNSIpOwotc3RhdGljIElJT19DT05TVF9BVFRSKHRlbXBfc2NhbGUsICItMC40NyIpOworc3RhdGljIGludCBhZGlzMTYyMDNfd3JpdGVfcmF3KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCisJCQkgICAgICAgc3RydWN0IGlpb19jaGFuX3NwZWMgY29uc3QgKmNoYW4sCisJCQkgICAgICAgaW50IHZhbCwKKwkJCSAgICAgICBpbnQgdmFsMiwKKwkJCSAgICAgICBsb25nIG1hc2spCit7CisJLyogY3VycmVudGx5IG9ubHkgb25lIHdyaXRhYmxlIHBhcmFtZXRlciB3aGljaCBrZWVwcyB0aGlzIHNpbXBsZSAqLworCXU4IGFkZHIgPSBhZGlzMTYyMDNfYWRkcmVzc2VzW2NoYW4tPmFkZHJlc3NdWzFdOworCXJldHVybiBhZGlzMTYyMDNfc3BpX3dyaXRlX3JlZ18xNihpbmRpb19kZXYsIGFkZHIsIHZhbCAmIDB4M0ZGRik7Cit9CisKK3N0YXRpYyBpbnQgYWRpczE2MjAzX3JlYWRfcmF3KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCisJCQkgICAgICBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbiwKKwkJCSAgICAgIGludCAqdmFsLCBpbnQgKnZhbDIsCisJCQkgICAgICBsb25nIG1hc2spCit7CisJaW50IHJldDsKKwlpbnQgYml0czsKKwl1OCBhZGRyOworCXMxNiB2YWwxNjsKKwlzd2l0Y2ggKG1hc2spIHsKKwljYXNlIDA6CisJCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOworCQlhZGRyID0gYWRpczE2MjAzX2FkZHJlc3Nlc1tjaGFuLT5hZGRyZXNzXVswXTsKKwkJcmV0ID0gYWRpczE2MjAzX3NwaV9yZWFkX3JlZ18xNihpbmRpb19kZXYsIGFkZHIsICZ2YWwxNik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCWlmICh2YWwxNiAmIEFESVMxNjIwM19FUlJPUl9BQ1RJVkUpIHsKKwkJCXJldCA9IGFkaXMxNjIwM19jaGVja19zdGF0dXMoaW5kaW9fZGV2KTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCQl2YWwxNiA9IHZhbDE2ICYgKCgxIDw8IGNoYW4tPnNjYW5fdHlwZS5yZWFsYml0cykgLSAxKTsKKwkJaWYgKGNoYW4tPnNjYW5fdHlwZS5zaWduID09ICdzJykKKwkJCXZhbDE2ID0gKHMxNikodmFsMTYgPDwKKwkJCQkgICAgICAoMTYgLSBjaGFuLT5zY2FuX3R5cGUucmVhbGJpdHMpKSA+PgorCQkJCSgxNiAtIGNoYW4tPnNjYW5fdHlwZS5yZWFsYml0cyk7CisJCSp2YWwgPSB2YWwxNjsKKwkJbXV0ZXhfdW5sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKKwkJcmV0dXJuIElJT19WQUxfSU5UOworCWNhc2UgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TRVBBUkFURSk6CisJY2FzZSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCk6CisJCXN3aXRjaCAoY2hhbi0+dHlwZSkgeworCQljYXNlIElJT19JTjoKKwkJCSp2YWwgPSAwOworCQkJaWYgKGNoYW4tPmNoYW5uZWwgPT0gMCkKKwkJCQkqdmFsMiA9IDEyMjA7CisJCQllbHNlCisJCQkJKnZhbDIgPSA2MTA7CisJCQlyZXR1cm4gSUlPX1ZBTF9JTlRfUExVU19NSUNSTzsKKwkJY2FzZSBJSU9fVEVNUDoKKwkJCSp2YWwgPSAwOworCQkJKnZhbDIgPSAtNDcwMDAwOworCQkJcmV0dXJuIElJT19WQUxfSU5UX1BMVVNfTUlDUk87CisJCWNhc2UgSUlPX0lOQ0xJOgorCQkJKnZhbCA9IDA7CisJCQkqdmFsMiA9IDI1MDAwOworCQkJcmV0dXJuIElJT19WQUxfSU5UX1BMVVNfTUlDUk87CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCWNhc2UgKDEgPDwgSUlPX0NIQU5fSU5GT19PRkZTRVRfU0VQQVJBVEUpOgorCQkqdmFsID0gMjU7CisJCXJldHVybiBJSU9fVkFMX0lOVDsKKwljYXNlICgxIDw8IElJT19DSEFOX0lORk9fQ0FMSUJCSUFTX1NFUEFSQVRFKToKKwkJYml0cyA9IDE0OworCQltdXRleF9sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKKwkJYWRkciA9IGFkaXMxNjIwM19hZGRyZXNzZXNbY2hhbi0+YWRkcmVzc11bMV07CisJCXJldCA9IGFkaXMxNjIwM19zcGlfcmVhZF9yZWdfMTYoaW5kaW9fZGV2LCBhZGRyLCAmdmFsMTYpOworCQlpZiAocmV0KSB7CisJCQltdXRleF91bmxvY2soJmluZGlvX2Rldi0+bWxvY2spOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQl2YWwxNiAmPSAoMSA8PCBiaXRzKSAtIDE7CisJCXZhbDE2ID0gKHMxNikodmFsMTYgPDwgKDE2IC0gYml0cykpID4+ICgxNiAtIGJpdHMpOworCQkqdmFsID0gdmFsMTY7CisJCW11dGV4X3VubG9jaygmaW5kaW9fZGV2LT5tbG9jayk7CisJCXJldHVybiBJSU9fVkFMX0lOVDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBhZGlzMTYyMDNfY2hhbm5lbHNbXSA9IHsKKwlJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsICJzdXBwbHkiLCAwLCAwLAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TRVBBUkFURSksCisJCSBpbl9zdXBwbHksIEFESVMxNjIwM19TQ0FOX1NVUFBMWSwKKwkJIElJT19TVCgndScsIDEyLCAxNiwgMCksIDApLAorCUlJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgTlVMTCwgMSwgMCwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0VQQVJBVEUpLAorCQkgaW5fYXV4LCBBRElTMTYyMDNfU0NBTl9BVVhfQURDLAorCQkgSUlPX1NUKCd1JywgMTIsIDE2LCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX0lOQ0xJLCAxLCAwLCAwLCBOVUxMLCAwLCBJSU9fTU9EX1gsCisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCkgfAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19DQUxJQkJJQVNfU0VQQVJBVEUpLAorCQkgaW5jbGlfeCwgQURJUzE2MjAzX1NDQU5fSU5DTElfWCwKKwkJIElJT19TVCgncycsIDE0LCAxNiwgMCksIDApLAorCS8qIEZpeG1lOiBOb3Qgd2hhdCBpdCBhcHBlYXJzIHRvIGJlIC0gc2VlIGRhdGEgc2hlZXQgKi8KKwlJSU9fQ0hBTihJSU9fSU5DTEksIDEsIDAsIDAsIE5VTEwsIDAsIElJT19NT0RfWSwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJIGluY2xpX3ksIEFESVMxNjIwM19TQ0FOX0lOQ0xJX1ksCisJCSBJSU9fU1QoJ3MnLCAxNCwgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTihJSU9fVEVNUCwgMCwgMSwgMCwgTlVMTCwgMCwgMCwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0VQQVJBVEUpIHwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fT0ZGU0VUX1NFUEFSQVRFKSwKKwkJIHRlbXAsIEFESVMxNjIwM19TQ0FOX1RFTVAsCisJCSBJSU9fU1QoJ3UnLCAxMiwgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTl9TT0ZUX1RJTUVTVEFNUCg1KSwKK307CiAKIHN0YXRpYyBJSU9fREVWSUNFX0FUVFIocmVzZXQsIFNfSVdVU1IsIE5VTEwsIGFkaXMxNjIwM193cml0ZV9yZXNldCwgMCk7CiAKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUihuYW1lLCAiYWRpczE2MjAzIik7Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZGlzMTYyMDNfZXZlbnRfYXR0cmlidXRlc1tdID0gewotCU5VTEwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFkaXMxNjIwM19ldmVudF9hdHRyaWJ1dGVfZ3JvdXAgPSB7Ci0JLmF0dHJzID0gYWRpczE2MjAzX2V2ZW50X2F0dHJpYnV0ZXMsCi19OwotCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWRpczE2MjAzX2F0dHJpYnV0ZXNbXSA9IHsKLQkmaWlvX2Rldl9hdHRyX2luMF9zdXBwbHlfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luMF9zdXBwbHlfc2NhbGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX3RlbXBfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX3RlbXBfb2Zmc2V0LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX3RlbXBfc2NhbGUuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX3Jlc2V0LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX25hbWUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luMV9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4xX3NjYWxlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbmNsaV94X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW5jbGlfeV9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luY2xpX3hfb2Zmc2V0LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luY2xpX3NjYWxlLmRldl9hdHRyLmF0dHIsCiAJTlVMTAogfTsKIApAQCAtNDIzLDYgKzQwOCwxMyBAQAogCS5hdHRycyA9IGFkaXMxNjIwM19hdHRyaWJ1dGVzLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9faW5mbyBhZGlzMTYyMDNfaW5mbyA9IHsKKwkuYXR0cnMgPSAmYWRpczE2MjAzX2F0dHJpYnV0ZV9ncm91cCwKKwkucmVhZF9yYXcgPSAmYWRpczE2MjAzX3JlYWRfcmF3LAorCS53cml0ZV9yYXcgPSAmYWRpczE2MjAzX3dyaXRlX3JhdywKKwkuZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFLAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgYWRpczE2MjAzX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CiAJaW50IHJldCwgcmVnZG9uZSA9IDA7CkBAIC00NDgsMTggKzQ0MCwxNyBAQAogCXN0LT51cyA9IHNwaTsKIAltdXRleF9pbml0KCZzdC0+YnVmX2xvY2spOwogCS8qIHNldHVwIHRoZSBpbmR1c3RyaWFsaW8gZHJpdmVyIGFsbG9jYXRlZCBlbGVtZW50cyAqLwotCXN0LT5pbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKCk7CisJc3QtPmluZGlvX2RldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2UoMCk7CiAJaWYgKHN0LT5pbmRpb19kZXYgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX2ZyZWVfdHg7CiAJfQotCisJc3QtPmluZGlvX2Rldi0+bmFtZSA9IHNwaS0+ZGV2LmRyaXZlci0+bmFtZTsKIAlzdC0+aW5kaW9fZGV2LT5kZXYucGFyZW50ID0gJnNwaS0+ZGV2OwotCXN0LT5pbmRpb19kZXYtPm51bV9pbnRlcnJ1cHRfbGluZXMgPSAxOwotCXN0LT5pbmRpb19kZXYtPmV2ZW50X2F0dHJzID0gJmFkaXMxNjIwM19ldmVudF9hdHRyaWJ1dGVfZ3JvdXA7Ci0Jc3QtPmluZGlvX2Rldi0+YXR0cnMgPSAmYWRpczE2MjAzX2F0dHJpYnV0ZV9ncm91cDsKKwlzdC0+aW5kaW9fZGV2LT5jaGFubmVscyA9IGFkaXMxNjIwM19jaGFubmVsczsKKwlzdC0+aW5kaW9fZGV2LT5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKGFkaXMxNjIwM19jaGFubmVscyk7CisJc3QtPmluZGlvX2Rldi0+aW5mbyA9ICZhZGlzMTYyMDNfaW5mbzsKIAlzdC0+aW5kaW9fZGV2LT5kZXZfZGF0YSA9ICh2b2lkICopKHN0KTsKLQlzdC0+aW5kaW9fZGV2LT5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEU7CiAJc3QtPmluZGlvX2Rldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1RfTU9ERTsKIAogCXJldCA9IGFkaXMxNjIwM19jb25maWd1cmVfcmluZyhzdC0+aW5kaW9fZGV2KTsKQEAgLTQ3MSwzOSArNDYyLDMwIEBACiAJCWdvdG8gZXJyb3JfdW5yZWdfcmluZ19mdW5jczsKIAlyZWdkb25lID0gMTsKIAotCXJldCA9IGFkaXMxNjIwM19pbml0aWFsaXplX3Jpbmcoc3QtPmluZGlvX2Rldi0+cmluZyk7CisJcmV0ID0gaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyX2V4KHN0LT5pbmRpb19kZXYtPnJpbmcsIDAsCisJCQkJCSAgYWRpczE2MjAzX2NoYW5uZWxzLAorCQkJCQkgIEFSUkFZX1NJWkUoYWRpczE2MjAzX2NoYW5uZWxzKSk7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBpbml0aWFsaXplIHRoZSByaW5nXG4iKTsKIAkJZ290byBlcnJvcl91bnJlZ19yaW5nX2Z1bmNzOwogCX0KIAogCWlmIChzcGktPmlycSkgewotCQlyZXQgPSBpaW9fcmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoc3BpLT5pcnEsCi0JCQkJc3QtPmluZGlvX2RldiwKLQkJCQkwLAotCQkJCUlSUUZfVFJJR0dFUl9SSVNJTkcsCi0JCQkJImFkaXMxNjIwMyIpOwotCQlpZiAocmV0KQotCQkJZ290byBlcnJvcl91bmluaXRpYWxpemVfcmluZzsKLQogCQlyZXQgPSBhZGlzMTYyMDNfcHJvYmVfdHJpZ2dlcihzdC0+aW5kaW9fZGV2KTsKIAkJaWYgKHJldCkKLQkJCWdvdG8gZXJyb3JfdW5yZWdpc3Rlcl9saW5lOworCQkJZ290byBlcnJvcl91bmluaXRpYWxpemVfcmluZzsKIAl9CiAKIAkvKiBHZXQgdGhlIGRldmljZSBpbnRvIGEgc2FuZSBpbml0aWFsIHN0YXRlICovCi0JcmV0ID0gYWRpczE2MjAzX2luaXRpYWxfc2V0dXAoc3QpOworCXJldCA9IGFkaXMxNjIwM19pbml0aWFsX3NldHVwKHN0LT5pbmRpb19kZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfcmVtb3ZlX3RyaWdnZXI7CiAJcmV0dXJuIDA7CiAKIGVycm9yX3JlbW92ZV90cmlnZ2VyOgogCWFkaXMxNjIwM19yZW1vdmVfdHJpZ2dlcihzdC0+aW5kaW9fZGV2KTsKLWVycm9yX3VucmVnaXN0ZXJfbGluZToKLQlpZiAoc3BpLT5pcnEpCi0JCWlpb191bnJlZ2lzdGVyX2ludGVycnVwdF9saW5lKHN0LT5pbmRpb19kZXYsIDApOwogZXJyb3JfdW5pbml0aWFsaXplX3Jpbmc6Ci0JYWRpczE2MjAzX3VuaW5pdGlhbGl6ZV9yaW5nKHN0LT5pbmRpb19kZXYtPnJpbmcpOworCWlpb19yaW5nX2J1ZmZlcl91bnJlZ2lzdGVyKHN0LT5pbmRpb19kZXYtPnJpbmcpOwogZXJyb3JfdW5yZWdfcmluZ19mdW5jczoKIAlhZGlzMTYyMDNfdW5jb25maWd1cmVfcmluZyhzdC0+aW5kaW9fZGV2KTsKIGVycm9yX2ZyZWVfZGV2OgpAQCAtNTI2LDEzICs1MDgsOCBAQAogCXN0cnVjdCBhZGlzMTYyMDNfc3RhdGUgKnN0ID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CiAJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHN0LT5pbmRpb19kZXY7CiAKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCiAJYWRpczE2MjAzX3JlbW92ZV90cmlnZ2VyKGluZGlvX2Rldik7Ci0JaWYgKHNwaS0+aXJxKQotCQlpaW9fdW5yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShpbmRpb19kZXYsIDApOwotCi0JYWRpczE2MjAzX3VuaW5pdGlhbGl6ZV9yaW5nKGluZGlvX2Rldi0+cmluZyk7CisJaWlvX3JpbmdfYnVmZmVyX3VucmVnaXN0ZXIoaW5kaW9fZGV2LT5yaW5nKTsKIAlpaW9fZGV2aWNlX3VucmVnaXN0ZXIoaW5kaW9fZGV2KTsKIAlhZGlzMTYyMDNfdW5jb25maWd1cmVfcmluZyhpbmRpb19kZXYpOwogCWtmcmVlKHN0LT50eCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwM19yaW5nLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwM19yaW5nLmMKaW5kZXggM2Q3NzRmNy4uYTlhNzg5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDNfcmluZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjAzX3JpbmcuYwpAQCAtMTcsNTcgKzE3LDYgQEAKICNpbmNsdWRlICIuLi90cmlnZ2VyLmgiCiAjaW5jbHVkZSAiYWRpczE2MjAzLmgiCiAKLXN0YXRpYyBJSU9fU0NBTl9FTF9DKGluX3N1cHBseSwgQURJUzE2MjAzX1NDQU5fU1VQUExZLCBBRElTMTYyMDNfU1VQUExZX09VVCwgTlVMTCk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfU0NBTl9FTF9UWVBFKGluX3N1cHBseSwgdSwgMTIsIDE2KTsKLXN0YXRpYyBJSU9fU0NBTl9FTF9DKGluMCwgQURJUzE2MjAzX1NDQU5fQVVYX0FEQywgQURJUzE2MjAzX0FVWF9BREMsIE5VTEwpOwotc3RhdGljIElJT19DT05TVF9BVFRSX1NDQU5fRUxfVFlQRShpbjAsIHUsIDEyLCAxNik7Ci1zdGF0aWMgSUlPX1NDQU5fRUxfQyh0ZW1wLCBBRElTMTYyMDNfU0NBTl9URU1QLCBBRElTMTYyMDNfVEVNUF9PVVQsIE5VTEwpOwotc3RhdGljIElJT19DT05TVF9BVFRSX1NDQU5fRUxfVFlQRSh0ZW1wLCB1LCAxMiwgMTYpOwotc3RhdGljIElJT19TQ0FOX0VMX0MoaW5jbGlfeCwgQURJUzE2MjAzX1NDQU5fSU5DTElfWCwKLQkJICAgICBBRElTMTYyMDNfWElOQ0xfT1VULCBOVUxMKTsKLXN0YXRpYyBJSU9fU0NBTl9FTF9DKGluY2xpX3ksIEFESVMxNjIwM19TQ0FOX0lOQ0xJX1ksCi0JCSAgICAgQURJUzE2MjAzX1lJTkNMX09VVCwgTlVMTCk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfU0NBTl9FTF9UWVBFKGluY2xpLCBzLCAxNCwgMTYpOwotc3RhdGljIElJT19TQ0FOX0VMX1RJTUVTVEFNUCg1KTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUl9TQ0FOX0VMX1RZUEUodGltZXN0YW1wLCBzLCA2NCwgNjQpOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWRpczE2MjAzX3NjYW5fZWxfYXR0cnNbXSA9IHsKLQkmaWlvX3NjYW5fZWxfaW5fc3VwcGx5LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luX3N1cHBseV9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbl9zdXBwbHlfdHlwZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjAuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4wX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luMF90eXBlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX3RlbXAuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfdGVtcF9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl90ZW1wX3R5cGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfaW5jbGlfeC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbmNsaV94X2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luY2xpX3kuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW5jbGlfeV9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbmNsaV90eXBlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX3RpbWVzdGFtcC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl90aW1lc3RhbXBfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfdGltZXN0YW1wX3R5cGUuZGV2X2F0dHIuYXR0ciwKLQlOVUxMLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYWRpczE2MjAzX3NjYW5fZWxfZ3JvdXAgPSB7Ci0JLmF0dHJzID0gYWRpczE2MjAzX3NjYW5fZWxfYXR0cnMsCi0JLm5hbWUgPSAic2Nhbl9lbGVtZW50cyIsCi19OwotCi0vKioKLSAqIGFkaXMxNjIwM19wb2xsX2Z1bmNfdGgoKSB0b3AgaGFsZiBpbnRlcnJ1cHQgaGFuZGxlciBjYWxsZWQgYnkgdHJpZ2dlcgotICogQHByaXZhdGVfZGF0YToJaWlvX2RldgotICoqLwotc3RhdGljIHZvaWQgYWRpczE2MjAzX3BvbGxfZnVuY190aChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LCBzNjQgdGltZXN0YW1wKQotewotCXN0cnVjdCBhZGlzMTYyMDNfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOwotCXN0LT5sYXN0X3RpbWVzdGFtcCA9IHRpbWVzdGFtcDsKLQlzY2hlZHVsZV93b3JrKCZzdC0+d29ya190cmlnZ2VyX3RvX3JpbmcpOwotfQotCiAvKioKICAqIGFkaXMxNjIwM19yZWFkX3JpbmdfZGF0YSgpIHJlYWQgZGF0YSByZWdpc3RlcnMgd2hpY2ggd2lsbCBiZSBwbGFjZWQgaW50byByaW5nCiAgKiBAZGV2OiBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIGNoaWxkIG9mIGFjdHVhbCBkZXZpY2UgKGlpb19kZXYgb3IgaWlvX3RyaWcpCkBAIC0xMTUsMjEgKzY0LDIxIEBACiAvKiBXaGlsc3QgdGhpcyBtYWtlcyBhIGxvdCBvZiBjYWxscyB0byBpaW9fc3dfcmluZyBmdW5jdGlvbnMgLSBpdCBpcyB0byBkZXZpY2UKICAqIHNwZWNpZmljIHRvIGJlIHJvbGxlZCBpbnRvIHRoZSBjb3JlLgogICovCi1zdGF0aWMgdm9pZCBhZGlzMTYyMDNfdHJpZ2dlcl9iaF90b19yaW5nKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29ya19zKQorc3RhdGljIGlycXJldHVybl90IGFkaXMxNjIwM190cmlnZ2VyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqcCkKIHsKLQlzdHJ1Y3QgYWRpczE2MjAzX3N0YXRlICpzdAotCQk9IGNvbnRhaW5lcl9vZih3b3JrX3MsIHN0cnVjdCBhZGlzMTYyMDNfc3RhdGUsCi0JCQkgICAgICAgd29ya190cmlnZ2VyX3RvX3JpbmcpOwotCXN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcgPSBzdC0+aW5kaW9fZGV2LT5yaW5nOworCXN0cnVjdCBpaW9fcG9sbF9mdW5jICpwZiA9IHA7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHBmLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGFkaXMxNjIwM19zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CisJc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyA9IGluZGlvX2Rldi0+cmluZzsKIAogCWludCBpID0gMDsKIAlzMTYgKmRhdGE7Ci0Jc2l6ZV90IGRhdGFzaXplID0gcmluZy0+YWNjZXNzLmdldF9ieXRlc19wZXJfZGF0dW0ocmluZyk7CisJc2l6ZV90IGRhdGFzaXplID0gcmluZy0+YWNjZXNzLT5nZXRfYnl0ZXNfcGVyX2RhdHVtKHJpbmcpOwogCiAJZGF0YSA9IGttYWxsb2MoZGF0YXNpemUsIEdGUF9LRVJORUwpOwogCWlmIChkYXRhID09IE5VTEwpIHsKIAkJZGV2X2Vycigmc3QtPnVzLT5kZXYsICJtZW1vcnkgYWxsb2MgZmFpbGVkIGluIHJpbmcgYmgiKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlpZiAocmluZy0+c2Nhbl9jb3VudCkKQEAgLTE0MCwzMCArODksMzQgQEAKIAogCS8qIEd1YXJhbnRlZWQgdG8gYmUgYWxpZ25lZCB3aXRoIDggYnl0ZSBib3VuZGFyeSAqLwogCWlmIChyaW5nLT5zY2FuX3RpbWVzdGFtcCkKLQkJKigoczY0ICopKGRhdGEgKyAoKGkgKyAzKS80KSo0KSkgPSBzdC0+bGFzdF90aW1lc3RhbXA7CisJCSooKHM2NCAqKShkYXRhICsgKChpICsgMykvNCkqNCkpID0gcGYtPnRpbWVzdGFtcDsKIAotCXJpbmctPmFjY2Vzcy5zdG9yZV90byhyaW5nLAorCXJpbmctPmFjY2Vzcy0+c3RvcmVfdG8ocmluZywKIAkJCSAgICAgICh1OCAqKWRhdGEsCi0JCQkgICAgICBzdC0+bGFzdF90aW1lc3RhbXApOworCQkJICAgICAgcGYtPnRpbWVzdGFtcCk7CiAKIAlpaW9fdHJpZ2dlcl9ub3RpZnlfZG9uZShzdC0+aW5kaW9fZGV2LT50cmlnKTsKIAlrZnJlZShkYXRhKTsKIAotCXJldHVybjsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKIHZvaWQgYWRpczE2MjAzX3VuY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKLQlrZnJlZShpbmRpb19kZXYtPnBvbGxmdW5jKTsKKwlpaW9fZGVhbGxvY19wb2xsZnVuYyhpbmRpb19kZXYtPnBvbGxmdW5jKTsKIAlpaW9fc3dfcmJfZnJlZShpbmRpb19kZXYtPnJpbmcpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19yaW5nX3NldHVwX29wcyBhZGlzMTYyMDNfcmluZ19zZXR1cF9vcHMgPSB7CisJLnByZWVuYWJsZSA9ICZpaW9fc3dfcmluZ19wcmVlbmFibGUsCisJLnBvc3RlbmFibGUgPSAmaWlvX3RyaWdnZXJlZF9yaW5nX3Bvc3RlbmFibGUsCisJLnByZWRpc2FibGUgPSAmaWlvX3RyaWdnZXJlZF9yaW5nX3ByZWRpc2FibGUsCit9OworCiBpbnQgYWRpczE2MjAzX2NvbmZpZ3VyZV9yaW5nKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCiB7CiAJaW50IHJldCA9IDA7Ci0Jc3RydWN0IGFkaXMxNjIwM19zdGF0ZSAqc3QgPSBpbmRpb19kZXYtPmRldl9kYXRhOwogCXN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmc7Ci0JSU5JVF9XT1JLKCZzdC0+d29ya190cmlnZ2VyX3RvX3JpbmcsIGFkaXMxNjIwM190cmlnZ2VyX2JoX3RvX3JpbmcpOwogCiAJcmluZyA9IGlpb19zd19yYl9hbGxvY2F0ZShpbmRpb19kZXYpOwogCWlmICghcmluZykgewpAQCAtMTcyLDI1ICsxMjUsMjkgQEAKIAl9CiAJaW5kaW9fZGV2LT5yaW5nID0gcmluZzsKIAkvKiBFZmZlY3RpdmVseSBzZWxlY3QgdGhlIHJpbmcgYnVmZmVyIGltcGxlbWVudGF0aW9uICovCi0JaWlvX3Jpbmdfc3dfcmVnaXN0ZXJfZnVuY3MoJnJpbmctPmFjY2Vzcyk7CiAJcmluZy0+YnBlID0gMjsKLQlyaW5nLT5zY2FuX2VsX2F0dHJzID0gJmFkaXMxNjIwM19zY2FuX2VsX2dyb3VwOwogCXJpbmctPnNjYW5fdGltZXN0YW1wID0gdHJ1ZTsKLQlyaW5nLT5wcmVlbmFibGUgPSAmaWlvX3N3X3JpbmdfcHJlZW5hYmxlOwotCXJpbmctPnBvc3RlbmFibGUgPSAmaWlvX3RyaWdnZXJlZF9yaW5nX3Bvc3RlbmFibGU7Ci0JcmluZy0+cHJlZGlzYWJsZSA9ICZpaW9fdHJpZ2dlcmVkX3JpbmdfcHJlZGlzYWJsZTsKKwlyaW5nLT5hY2Nlc3MgPSAmcmluZ19zd19hY2Nlc3NfZnVuY3M7CisJcmluZy0+c2V0dXBfb3BzID0gJmFkaXMxNjIwM19yaW5nX3NldHVwX29wczsKIAlyaW5nLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJLyogU2V0IGRlZmF1bHQgc2NhbiBtb2RlICovCi0JaWlvX3NjYW5fbWFza19zZXQocmluZywgaWlvX3NjYW5fZWxfaW5fc3VwcGx5Lm51bWJlcik7Ci0JaWlvX3NjYW5fbWFza19zZXQocmluZywgaWlvX3NjYW5fZWxfdGVtcC5udW1iZXIpOwotCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIGlpb19zY2FuX2VsX2luMC5udW1iZXIpOwotCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIGlpb19zY2FuX2VsX2luY2xpX3gubnVtYmVyKTsKLQlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCBpaW9fc2Nhbl9lbF9pbmNsaV95Lm51bWJlcik7CisJaWlvX3NjYW5fbWFza19zZXQocmluZywgQURJUzE2MjAzX1NDQU5fU1VQUExZKTsKKwlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCBBRElTMTYyMDNfU0NBTl9URU1QKTsKKwlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCBBRElTMTYyMDNfU0NBTl9BVVhfQURDKTsKKwlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCBBRElTMTYyMDNfU0NBTl9JTkNMSV9YKTsKKwlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCBBRElTMTYyMDNfU0NBTl9JTkNMSV9ZKTsKIAotCXJldCA9IGlpb19hbGxvY19wb2xsZnVuYyhpbmRpb19kZXYsIE5VTEwsICZhZGlzMTYyMDNfcG9sbF9mdW5jX3RoKTsKLQlpZiAocmV0KQorCWluZGlvX2Rldi0+cG9sbGZ1bmMgPSBpaW9fYWxsb2NfcG9sbGZ1bmMoJmlpb19wb2xsZnVuY19zdG9yZV90aW1lLAorCQkJCQkJICZhZGlzMTYyMDNfdHJpZ2dlcl9oYW5kbGVyLAorCQkJCQkJIElSUUZfT05FU0hPVCwKKwkJCQkJCSBpbmRpb19kZXYsCisJCQkJCQkgImFkaXMxNjIwM19jb25zdW1lciVkIiwKKwkJCQkJCSBpbmRpb19kZXYtPmlkKTsKKwlpZiAoaW5kaW9fZGV2LT5wb2xsZnVuYyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3JfaWlvX3N3X3JiX2ZyZWU7CisJfQogCiAJaW5kaW9fZGV2LT5tb2RlcyB8PSBJTkRJT19SSU5HX1RSSUdHRVJFRDsKIAlyZXR1cm4gMDsKQEAgLTE5OSwxMyArMTU2LDMgQEAKIAlpaW9fc3dfcmJfZnJlZShpbmRpb19kZXYtPnJpbmcpOwogCXJldHVybiByZXQ7CiB9Ci0KLWludCBhZGlzMTYyMDNfaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpCi17Ci0JcmV0dXJuIGlpb19yaW5nX2J1ZmZlcl9yZWdpc3RlcihyaW5nLCAwKTsKLX0KLQotdm9pZCBhZGlzMTYyMDNfdW5pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZykKLXsKLQlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihyaW5nKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjAzX3RyaWdnZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjAzX3RyaWdnZXIuYwppbmRleCA1MGJlNTFjLi5jYTVkYjE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwM190cmlnZ2VyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDNfdHJpZ2dlci5jCkBAIC0xMywzNSArMTMsNiBAQAogI2luY2x1ZGUgImFkaXMxNjIwMy5oIgogCiAvKioKLSAqIGFkaXMxNjIwM19kYXRhX3JkeV90cmlnX3BvbGwoKSB0aGUgZXZlbnQgaGFuZGxlciBmb3IgdGhlIGRhdGEgcmR5IHRyaWcKLSAqKi8KLXN0YXRpYyBpbnQgYWRpczE2MjAzX2RhdGFfcmR5X3RyaWdfcG9sbChzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8sCi0JCQkJICAgICAgIGludCBpbmRleCwKLQkJCQkgICAgICAgczY0IHRpbWVzdGFtcCwKLQkJCQkgICAgICAgaW50IG5vX3Rlc3QpCi17Ci0Jc3RydWN0IGFkaXMxNjIwM19zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGRldl9pbmZvKTsKLQlzdHJ1Y3QgaWlvX3RyaWdnZXIgKnRyaWcgPSBzdC0+dHJpZzsKLQotCWlpb190cmlnZ2VyX3BvbGwodHJpZywgdGltZXN0YW1wKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotSUlPX0VWRU5UX1NIKGRhdGFfcmR5X3RyaWcsICZhZGlzMTYyMDNfZGF0YV9yZHlfdHJpZ19wb2xsKTsKLQotc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIGlpb190cmlnZ2VyX3JlYWRfbmFtZSwgTlVMTCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZGlzMTYyMDNfdHJpZ2dlcl9hdHRyc1tdID0gewotCSZkZXZfYXR0cl9uYW1lLmF0dHIsCi0JTlVMTCwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFkaXMxNjIwM190cmlnZ2VyX2F0dHJfZ3JvdXAgPSB7Ci0JLmF0dHJzID0gYWRpczE2MjAzX3RyaWdnZXJfYXR0cnMsCi19OwotCi0vKioKICAqIGFkaXMxNjIwM19kYXRhX3JkeV90cmlnZ2VyX3NldF9zdGF0ZSgpIHNldCBkYXRhcmR5IGludGVycnVwdCBzdGF0ZQogICoqLwogc3RhdGljIGludCBhZGlzMTYyMDNfZGF0YV9yZHlfdHJpZ2dlcl9zZXRfc3RhdGUoc3RydWN0IGlpb190cmlnZ2VyICp0cmlnLApAQCAtNDksMzEgKzIwLDkgQEAKIHsKIAlzdHJ1Y3QgYWRpczE2MjAzX3N0YXRlICpzdCA9IHRyaWctPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gc3QtPmluZGlvX2RldjsKLQlpbnQgcmV0ID0gMDsKIAogCWRldl9kYmcoJmluZGlvX2Rldi0+ZGV2LCAiJXMgKCVkKVxuIiwgX19mdW5jX18sIHN0YXRlKTsKLQlyZXQgPSBhZGlzMTYyMDNfc2V0X2lycSgmc3QtPmluZGlvX2Rldi0+ZGV2LCBzdGF0ZSk7Ci0JaWYgKHN0YXRlID09IGZhbHNlKSB7Ci0JCWlpb19yZW1vdmVfZXZlbnRfZnJvbV9saXN0KCZpaW9fZXZlbnRfZGF0YV9yZHlfdHJpZywKLQkJCQkJICAgJmluZGlvX2Rldi0+aW50ZXJydXB0c1swXQotCQkJCQkgICAtPmV2X2xpc3QpOwotCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCX0gZWxzZSB7Ci0JCWlpb19hZGRfZXZlbnRfdG9fbGlzdCgmaWlvX2V2ZW50X2RhdGFfcmR5X3RyaWcsCi0JCQkJICAgICAgJmluZGlvX2Rldi0+aW50ZXJydXB0c1swXS0+ZXZfbGlzdCk7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogYWRpczE2MjAzX3RyaWdfdHJ5X3JlZW4oKSB0cnkgcmVuYWJsaW5nIGlycSBmb3IgZGF0YSByZHkgdHJpZ2dlcgotICogQHRyaWc6CXRoZSBkYXRhcmR5IHRyaWdnZXIKLSAqKi8KLXN0YXRpYyBpbnQgYWRpczE2MjAzX3RyaWdfdHJ5X3JlZW4oc3RydWN0IGlpb190cmlnZ2VyICp0cmlnKQotewotCXN0cnVjdCBhZGlzMTYyMDNfc3RhdGUgKnN0ID0gdHJpZy0+cHJpdmF0ZV9kYXRhOwotCWVuYWJsZV9pcnEoc3QtPnVzLT5pcnEpOwotCXJldHVybiAwOworCXJldHVybiBhZGlzMTYyMDNfc2V0X2lycShzdC0+aW5kaW9fZGV2LCBzdGF0ZSk7CiB9CiAKIGludCBhZGlzMTYyMDNfcHJvYmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQpAQCAtODEsMzQgKzMwLDM4IEBACiAJaW50IHJldDsKIAlzdHJ1Y3QgYWRpczE2MjAzX3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CiAKLQlzdC0+dHJpZyA9IGlpb19hbGxvY2F0ZV90cmlnZ2VyKCk7Ci0Jc3QtPnRyaWctPm5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwKLQkJCQkiYWRpczE2MjAzLWRldiVkIiwKLQkJCQlpbmRpb19kZXYtPmlkKTsKLQlpZiAoIXN0LT50cmlnLT5uYW1lKSB7CisJc3QtPnRyaWcgPSBpaW9fYWxsb2NhdGVfdHJpZ2dlcigiYWRpczE2MjAzLWRldiVkIiwgaW5kaW9fZGV2LT5pZCk7CisJaWYgKHN0LT50cmlnID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJvcl9mcmVlX3RyaWc7CisJCWdvdG8gZXJyb3JfcmV0OwogCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKHN0LT51cy0+aXJxLAorCQkJICAmaWlvX3RyaWdnZXJfZ2VuZXJpY19kYXRhX3JkeV9wb2xsLAorCQkJICBJUlFGX1RSSUdHRVJfUklTSU5HLAorCQkJICAiYWRpczE2MjAzIiwKKwkJCSAgc3QtPnRyaWcpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3JfZnJlZV90cmlnOworCiAJc3QtPnRyaWctPmRldi5wYXJlbnQgPSAmc3QtPnVzLT5kZXY7CiAJc3QtPnRyaWctPm93bmVyID0gVEhJU19NT0RVTEU7CiAJc3QtPnRyaWctPnByaXZhdGVfZGF0YSA9IHN0OwogCXN0LT50cmlnLT5zZXRfdHJpZ2dlcl9zdGF0ZSA9ICZhZGlzMTYyMDNfZGF0YV9yZHlfdHJpZ2dlcl9zZXRfc3RhdGU7Ci0Jc3QtPnRyaWctPnRyeV9yZWVuYWJsZSA9ICZhZGlzMTYyMDNfdHJpZ190cnlfcmVlbjsKLQlzdC0+dHJpZy0+Y29udHJvbF9hdHRycyA9ICZhZGlzMTYyMDNfdHJpZ2dlcl9hdHRyX2dyb3VwOwogCXJldCA9IGlpb190cmlnZ2VyX3JlZ2lzdGVyKHN0LT50cmlnKTsKIAogCS8qIHNlbGVjdCBkZWZhdWx0IHRyaWdnZXIgKi8KIAlpbmRpb19kZXYtPnRyaWcgPSBzdC0+dHJpZzsKIAlpZiAocmV0KQotCQlnb3RvIGVycm9yX2ZyZWVfdHJpZ19uYW1lOworCQlnb3RvIGVycm9yX2ZyZWVfaXJxOwogCiAJcmV0dXJuIDA7CiAKLWVycm9yX2ZyZWVfdHJpZ19uYW1lOgotCWtmcmVlKHN0LT50cmlnLT5uYW1lKTsKK2Vycm9yX2ZyZWVfaXJxOgorCWZyZWVfaXJxKHN0LT51cy0+aXJxLCBzdC0+dHJpZyk7CiBlcnJvcl9mcmVlX3RyaWc6CiAJaWlvX2ZyZWVfdHJpZ2dlcihzdC0+dHJpZyk7Ci0KK2Vycm9yX3JldDoKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMTcsNiArNzAsNiBAQAogCXN0cnVjdCBhZGlzMTYyMDNfc3RhdGUgKnN0YXRlID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKIAogCWlpb190cmlnZ2VyX3VucmVnaXN0ZXIoc3RhdGUtPnRyaWcpOwotCWtmcmVlKHN0YXRlLT50cmlnLT5uYW1lKTsKKwlmcmVlX2lycShzdGF0ZS0+dXMtPmlycSwgc3RhdGUtPnRyaWcpOwogCWlpb19mcmVlX3RyaWdnZXIoc3RhdGUtPnRyaWcpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDQuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjA0LmgKaW5kZXggZTYxODQ0NjguLjUzMTBhNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjA0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDQuaApAQCAtNjcsOSArNjcsNiBAQAogLyoqCiAgKiBzdHJ1Y3QgYWRpczE2MjA0X3N0YXRlIC0gZGV2aWNlIGluc3RhbmNlIHNwZWNpZmljIGRhdGEKICAqIEB1czoJCQlhY3R1YWwgc3BpX2RldmljZQotICogQHdvcmtfdHJpZ2dlcl90b19yaW5nOiBiaCBmb3IgdHJpZ2dlcmVkIGV2ZW50IGhhbmRsaW5nCi0gKiBAaW50ZXI6CQl1c2VkIHRvIGNoZWNrIGlmIG5ldyBpbnRlcnJ1cHQgaGFzIGJlZW4gdHJpZ2dlcmVkCi0gKiBAbGFzdF90aW1lc3RhbXA6CXBhc3NpbmcgdGltZXN0YW1wIGZyb20gdGggdG8gYmggb2YgaW50ZXJydXB0IGhhbmRsZXIKICAqIEBpbmRpb19kZXY6CQlpbmR1c3RyaWFsIEkvTyBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAdHJpZzoJCWRhdGEgcmVhZHkgdHJpZ2dlciByZWdpc3RlcmVkIHdpdGggaWlvCiAgKiBAdHg6CQkJdHJhbnNtaXQgYnVmZmVyCkBAIC03OCw4ICs3NSw2IEBACiAgKiovCiBzdHJ1Y3QgYWRpczE2MjA0X3N0YXRlIHsKIAlzdHJ1Y3Qgc3BpX2RldmljZQkJKnVzOwotCXN0cnVjdCB3b3JrX3N0cnVjdAkJd29ya190cmlnZ2VyX3RvX3Jpbmc7Ci0JczY0CQkJCWxhc3RfdGltZXN0YW1wOwogCXN0cnVjdCBpaW9fZGV2CQkJKmluZGlvX2RldjsKIAlzdHJ1Y3QgaWlvX3RyaWdnZXIJCSp0cmlnOwogCXU4CQkJCSp0eDsKQEAgLTg3LDcgKzgyLDcgQEAKIAlzdHJ1Y3QgbXV0ZXgJCQlidWZfbG9jazsKIH07CiAKLWludCBhZGlzMTYyMDRfc2V0X2lycShzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgZW5hYmxlKTsKK2ludCBhZGlzMTYyMDRfc2V0X2lycShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LCBib29sIGVuYWJsZSk7CiAKICNpZmRlZiBDT05GSUdfSUlPX1JJTkdfQlVGRkVSCiBlbnVtIGFkaXMxNjIwNF9zY2FuIHsKQEAgLTEwOCw4ICsxMDMsNiBAQAogaW50IGFkaXMxNjIwNF9jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKIHZvaWQgYWRpczE2MjA0X3VuY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7CiAKLWludCBhZGlzMTYyMDRfaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpOwotdm9pZCBhZGlzMTYyMDRfdW5pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyk7CiAjZWxzZSAvKiBDT05GSUdfSUlPX1JJTkdfQlVGRkVSICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGlzMTYyMDRfcmVtb3ZlX3RyaWdnZXIoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKQEAgLTEzOCwxNCArMTMxLDUgQEAKIHsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYWRpczE2MjA0X2luaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRpczE2MjA0X3VuaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpCi17Ci19Ci0KICNlbmRpZiAvKiBDT05GSUdfSUlPX1JJTkdfQlVGRkVSICovCiAjZW5kaWYgLyogU1BJX0FESVMxNjIwNF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDRfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDRfY29yZS5jCmluZGV4IGNjMTVlNDAuLjE2ODA2NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjA0X2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwNF9jb3JlLmMKQEAgLTIwLDI4ICsyMCwyNSBAQAogCiAjaW5jbHVkZSAiLi4vaWlvLmgiCiAjaW5jbHVkZSAiLi4vc3lzZnMuaCIKKyNpbmNsdWRlICIuLi9yaW5nX2dlbmVyaWMuaCIKICNpbmNsdWRlICJhY2NlbC5oIgotI2luY2x1ZGUgIi4uL2d5cm8vZ3lyby5oIgogI2luY2x1ZGUgIi4uL2FkYy9hZGMuaCIKIAogI2luY2x1ZGUgImFkaXMxNjIwNC5oIgogCiAjZGVmaW5lIERSSVZFUl9OQU1FCQkiYWRpczE2MjA0IgogCi1zdGF0aWMgaW50IGFkaXMxNjIwNF9jaGVja19zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2KTsKLQogLyoqCiAgKiBhZGlzMTYyMDRfc3BpX3dyaXRlX3JlZ184KCkgLSB3cml0ZSBzaW5nbGUgYnl0ZSB0byBhIHJlZ2lzdGVyCiAgKiBAZGV2OiBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIGNoaWxkIG9mIGFjdHVhbCBkZXZpY2UgKGlpb19kZXYgb3IgaWlvX3RyaWcpCiAgKiBAcmVnX2FkZHJlc3M6IHRoZSBhZGRyZXNzIG9mIHRoZSByZWdpc3RlciB0byBiZSB3cml0dGVuCiAgKiBAdmFsOiB0aGUgdmFsdWUgdG8gd3JpdGUKICAqKi8KLXN0YXRpYyBpbnQgYWRpczE2MjA0X3NwaV93cml0ZV9yZWdfOChzdHJ1Y3QgZGV2aWNlICpkZXYsCitzdGF0aWMgaW50IGFkaXMxNjIwNF9zcGlfd3JpdGVfcmVnXzgoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKIAkJdTggcmVnX2FkZHJlc3MsCiAJCXU4IHZhbCkKIHsKIAlpbnQgcmV0OwotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgYWRpczE2MjA0X3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKIAogCW11dGV4X2xvY2soJnN0LT5idWZfbG9jayk7CkBAIC01NiwxOCArNTMsMTcgQEAKIAogLyoqCiAgKiBhZGlzMTYyMDRfc3BpX3dyaXRlX3JlZ18xNigpIC0gd3JpdGUgMiBieXRlcyB0byBhIHBhaXIgb2YgcmVnaXN0ZXJzCi0gKiBAZGV2OiBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIGNoaWxkIG9mIGFjdHVhbCBkZXZpY2UgKGlpb19kZXYgb3IgaWlvX3RyaWcpCisgKiBAaW5kaW9fZGV2OiBpaW8gZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBjaGlsZCBvZiBhY3R1YWwgZGV2aWNlCiAgKiBAcmVnX2FkZHJlc3M6IHRoZSBhZGRyZXNzIG9mIHRoZSBsb3dlciBvZiB0aGUgdHdvIHJlZ2lzdGVycy4gU2Vjb25kIHJlZ2lzdGVyCiAgKiAgICAgICAgICAgICAgIGlzIGFzc3VtZWQgdG8gaGF2ZSBhZGRyZXNzIG9uZSBncmVhdGVyLgogICogQHZhbDogdmFsdWUgdG8gYmUgd3JpdHRlbgogICoqLwotc3RhdGljIGludCBhZGlzMTYyMDRfc3BpX3dyaXRlX3JlZ18xNihzdHJ1Y3QgZGV2aWNlICpkZXYsCitzdGF0aWMgaW50IGFkaXMxNjIwNF9zcGlfd3JpdGVfcmVnXzE2KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCiAJCXU4IGxvd2VyX3JlZ19hZGRyZXNzLAogCQl1MTYgdmFsdWUpCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbXNnOwotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgYWRpczE2MjA0X3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKIAlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHhmZXJzW10gPSB7CiAJCXsKQEAgLTEwMCwxNyArOTYsMTYgQEAKIAogLyoqCiAgKiBhZGlzMTYyMDRfc3BpX3JlYWRfcmVnXzE2KCkgLSByZWFkIDIgYnl0ZXMgZnJvbSBhIDE2LWJpdCByZWdpc3RlcgotICogQGRldjogZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBjaGlsZCBvZiBhY3R1YWwgZGV2aWNlIChpaW9fZGV2IG9yIGlpb190cmlnKQorICogQGluZGlvX2RldjogaWlvIGRldmljZSBhc3NvY2lhdGVkIHdpdGggY2hpbGQgb2YgYWN0dWFsIGRldmljZQogICogQHJlZ19hZGRyZXNzOiB0aGUgYWRkcmVzcyBvZiB0aGUgbG93ZXIgb2YgdGhlIHR3byByZWdpc3RlcnMuIFNlY29uZCByZWdpc3RlcgogICogICAgICAgICAgICAgICBpcyBhc3N1bWVkIHRvIGhhdmUgYWRkcmVzcyBvbmUgZ3JlYXRlci4KICAqIEB2YWw6IHNvbWV3aGVyZSB0byBwYXNzIGJhY2sgdGhlIHZhbHVlIHJlYWQKICAqKi8KLXN0YXRpYyBpbnQgYWRpczE2MjA0X3NwaV9yZWFkX3JlZ18xNihzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXU4IGxvd2VyX3JlZ19hZGRyZXNzLAotCQl1MTYgKnZhbCkKK3N0YXRpYyBpbnQgYWRpczE2MjA0X3NwaV9yZWFkX3JlZ18xNihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAorCQkJCSAgICAgdTggbG93ZXJfcmVnX2FkZHJlc3MsCisJCQkJICAgICB1MTYgKnZhbCkKIHsKIAlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbXNnOwotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgYWRpczE2MjA0X3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKIAlpbnQgcmV0OwogCXN0cnVjdCBzcGlfdHJhbnNmZXIgeGZlcnNbXSA9IHsKQEAgLTEyNCw3ICsxMTksNiBAQAogCQkJLnJ4X2J1ZiA9IHN0LT5yeCwKIAkJCS5iaXRzX3Blcl93b3JkID0gOCwKIAkJCS5sZW4gPSAyLAotCQkJLmNzX2NoYW5nZSA9IDEsCiAJCQkuZGVsYXlfdXNlY3MgPSAyMCwKIAkJfSwKIAl9OwpAQCAtMTQ5LDcyICsxNDMsMzEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3NpemVfdCBhZGlzMTYyMDRfcmVhZF8xMmJpdF91bnNpZ25lZChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljaGFyICpidWYpCitzdGF0aWMgaW50IGFkaXMxNjIwNF9jaGVja19zdGF0dXMoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKKwl1MTYgc3RhdHVzOwogCWludCByZXQ7Ci0JdTE2IHZhbCA9IDA7Ci0Jc3RydWN0IGlpb19kZXZfYXR0ciAqdGhpc19hdHRyID0gdG9faWlvX2Rldl9hdHRyKGF0dHIpOwogCi0JcmV0ID0gYWRpczE2MjA0X3NwaV9yZWFkX3JlZ18xNihkZXYsIHRoaXNfYXR0ci0+YWRkcmVzcywgJnZhbCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCWlmICh2YWwgJiBBRElTMTYyMDRfRVJST1JfQUNUSVZFKQotCQlhZGlzMTYyMDRfY2hlY2tfc3RhdHVzKGRldik7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgdmFsICYgMHgwRkZGKTsKLX0KLQotc3RhdGljIHNzaXplX3QgYWRpczE2MjA0X3JlYWRfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljaGFyICpidWYpCi17Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXNzaXplX3QgcmV0OwotCXUxNiB2YWw7Ci0KLQkvKiBUYWtlIHRoZSBpaW9fZGV2IHN0YXR1cyBsb2NrICovCi0JbXV0ZXhfbG9jaygmaW5kaW9fZGV2LT5tbG9jayk7Ci0KLQlyZXQgPSBhZGlzMTYyMDRfc3BpX3JlYWRfcmVnXzE2KGRldiwgQURJUzE2MjA0X1RFTVBfT1VULCAodTE2ICopJnZhbCk7Ci0JaWYgKHJldCkKKwlyZXQgPSBhZGlzMTYyMDRfc3BpX3JlYWRfcmVnXzE2KGluZGlvX2RldiwKKwkJCQkJQURJUzE2MjA0X0RJQUdfU1RBVCwgJnN0YXR1cyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmaW5kaW9fZGV2LT5kZXYsICJSZWFkaW5nIHN0YXR1cyBmYWlsZWRcbiIpOwogCQlnb3RvIGVycm9yX3JldDsKKwl9CisJcmV0ID0gc3RhdHVzICYgMHgxRjsKIAotCWlmICh2YWwgJiBBRElTMTYyMDRfRVJST1JfQUNUSVZFKQotCQlhZGlzMTYyMDRfY2hlY2tfc3RhdHVzKGRldik7Ci0KLQl2YWwgJj0gMHhGRkY7Ci0JcmV0ID0gc3ByaW50ZihidWYsICIlZFxuIiwgdmFsKTsKKwlpZiAoc3RhdHVzICYgQURJUzE2MjA0X0RJQUdfU1RBVF9TRUxGVEVTVF9GQUlMKQorCQlkZXZfZXJyKCZpbmRpb19kZXYtPmRldiwgIlNlbGYgdGVzdCBmYWlsdXJlXG4iKTsKKwlpZiAoc3RhdHVzICYgQURJUzE2MjA0X0RJQUdfU1RBVF9TUElfRkFJTCkKKwkJZGV2X2VycigmaW5kaW9fZGV2LT5kZXYsICJTUEkgZmFpbHVyZVxuIik7CisJaWYgKHN0YXR1cyAmIEFESVMxNjIwNF9ESUFHX1NUQVRfRkxBU0hfVVBUKQorCQlkZXZfZXJyKCZpbmRpb19kZXYtPmRldiwgIkZsYXNoIHVwZGF0ZSBmYWlsZWRcbiIpOworCWlmIChzdGF0dXMgJiBBRElTMTYyMDRfRElBR19TVEFUX1BPV0VSX0hJR0gpCisJCWRldl9lcnIoJmluZGlvX2Rldi0+ZGV2LCAiUG93ZXIgc3VwcGx5IGFib3ZlIDMuNjI1VlxuIik7CisJaWYgKHN0YXR1cyAmIEFESVMxNjIwNF9ESUFHX1NUQVRfUE9XRVJfTE9XKQorCQlkZXZfZXJyKCZpbmRpb19kZXYtPmRldiwgIlBvd2VyIHN1cHBseSBiZWxvdyAyLjk3NVZcbiIpOwogCiBlcnJvcl9yZXQ6Ci0JbXV0ZXhfdW5sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3NpemVfdCBhZGlzMTYyMDRfcmVhZF8xMmJpdF9zaWduZWQoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY2hhciAqYnVmKQotewotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7Ci0JczE2IHZhbCA9IDA7Ci0Jc3NpemVfdCByZXQ7Ci0KLQltdXRleF9sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKLQotCXJldCA9IGFkaXMxNjIwNF9zcGlfcmVhZF9yZWdfMTYoZGV2LCB0aGlzX2F0dHItPmFkZHJlc3MsICh1MTYgKikmdmFsKTsKLQlpZiAoIXJldCkgewotCQlpZiAodmFsICYgQURJUzE2MjA0X0VSUk9SX0FDVElWRSkKLQkJCWFkaXMxNjIwNF9jaGVja19zdGF0dXMoZGV2KTsKLQotCQl2YWwgPSAoKHMxNikodmFsIDw8IDQpID4+IDQpOwotCQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB2YWwpOwotCX0KLQotCW11dGV4X3VubG9jaygmaW5kaW9fZGV2LT5tbG9jayk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMjksMTAgKzE4MiwxMSBAQAogCiAJbXV0ZXhfbG9jaygmaW5kaW9fZGV2LT5tbG9jayk7CiAKLQlyZXQgPSBhZGlzMTYyMDRfc3BpX3JlYWRfcmVnXzE2KGRldiwgdGhpc19hdHRyLT5hZGRyZXNzLCAodTE2ICopJnZhbCk7CisJcmV0ID0gYWRpczE2MjA0X3NwaV9yZWFkX3JlZ18xNihpbmRpb19kZXYsCisJCQkJCXRoaXNfYXR0ci0+YWRkcmVzcywgKHUxNiAqKSZ2YWwpOwogCWlmICghcmV0KSB7CiAJCWlmICh2YWwgJiBBRElTMTYyMDRfRVJST1JfQUNUSVZFKQotCQkJYWRpczE2MjA0X2NoZWNrX3N0YXR1cyhkZXYpOworCQkJYWRpczE2MjA0X2NoZWNrX3N0YXR1cyhpbmRpb19kZXYpOwogCiAJCXZhbCA9ICgoczE2KSh2YWwgPDwgMikgPj4gMik7CiAJCXJldCA9IHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbCk7CkBAIC0yNDMsMzIgKzE5NywxNCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGFkaXMxNjIwNF93cml0ZV8xNmJpdChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljb25zdCBjaGFyICpidWYsCi0JCXNpemVfdCBsZW4pCi17Ci0Jc3RydWN0IGlpb19kZXZfYXR0ciAqdGhpc19hdHRyID0gdG9faWlvX2Rldl9hdHRyKGF0dHIpOwotCWludCByZXQ7Ci0JbG9uZyB2YWw7Ci0KLQlyZXQgPSBzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ2YWwpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyb3JfcmV0OwotCXJldCA9IGFkaXMxNjIwNF9zcGlfd3JpdGVfcmVnXzE2KGRldiwgdGhpc19hdHRyLT5hZGRyZXNzLCB2YWwpOwotCi1lcnJvcl9yZXQ6Ci0JcmV0dXJuIHJldCA/IHJldCA6IGxlbjsKLX0KLQotc3RhdGljIGludCBhZGlzMTYyMDRfcmVzZXQoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBhZGlzMTYyMDRfcmVzZXQoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKIAlpbnQgcmV0OwotCXJldCA9IGFkaXMxNjIwNF9zcGlfd3JpdGVfcmVnXzgoZGV2LAorCXJldCA9IGFkaXMxNjIwNF9zcGlfd3JpdGVfcmVnXzgoaW5kaW9fZGV2LAogCQkJQURJUzE2MjA0X0dMT0JfQ01ELAogCQkJQURJUzE2MjA0X0dMT0JfQ01EX1NXX1JFU0VUKTsKIAlpZiAocmV0KQotCQlkZXZfZXJyKGRldiwgInByb2JsZW0gcmVzZXR0aW5nIGRldmljZSIpOworCQlkZXZfZXJyKCZpbmRpb19kZXYtPmRldiwgInByb2JsZW0gcmVzZXR0aW5nIGRldmljZSIpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTI3NywyMyArMjEzLDI1IEBACiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiB7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCiAJaWYgKGxlbiA8IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCXN3aXRjaCAoYnVmWzBdKSB7CiAJY2FzZSAnMSc6CiAJY2FzZSAneSc6CiAJY2FzZSAnWSc6Ci0JCXJldHVybiBhZGlzMTYyMDRfcmVzZXQoZGV2KTsKKwkJcmV0dXJuIGFkaXMxNjIwNF9yZXNldChpbmRpb19kZXYpOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotaW50IGFkaXMxNjIwNF9zZXRfaXJxKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBlbmFibGUpCitpbnQgYWRpczE2MjA0X3NldF9pcnEoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwgYm9vbCBlbmFibGUpCiB7CiAJaW50IHJldCA9IDA7CiAJdTE2IG1zYzsKIAotCXJldCA9IGFkaXMxNjIwNF9zcGlfcmVhZF9yZWdfMTYoZGV2LCBBRElTMTYyMDRfTVNDX0NUUkwsICZtc2MpOworCXJldCA9IGFkaXMxNjIwNF9zcGlfcmVhZF9yZWdfMTYoaW5kaW9fZGV2LCBBRElTMTYyMDRfTVNDX0NUUkwsICZtc2MpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfcmV0OwogCkBAIC0zMDQsMTA2ICsyNDIsNjMgQEAKIAllbHNlCiAJCW1zYyAmPSB+QURJUzE2MjA0X01TQ19DVFJMX0RBVEFfUkRZX0VOOwogCi0JcmV0ID0gYWRpczE2MjA0X3NwaV93cml0ZV9yZWdfMTYoZGV2LCBBRElTMTYyMDRfTVNDX0NUUkwsIG1zYyk7CisJcmV0ID0gYWRpczE2MjA0X3NwaV93cml0ZV9yZWdfMTYoaW5kaW9fZGV2LCBBRElTMTYyMDRfTVNDX0NUUkwsIG1zYyk7CiAKIGVycm9yX3JldDoKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGFkaXMxNjIwNF9jaGVja19zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2KQotewotCXUxNiBzdGF0dXM7Ci0JaW50IHJldDsKLQotCXJldCA9IGFkaXMxNjIwNF9zcGlfcmVhZF9yZWdfMTYoZGV2LCBBRElTMTYyMDRfRElBR19TVEFULCAmc3RhdHVzKTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKGRldiwgIlJlYWRpbmcgc3RhdHVzIGZhaWxlZFxuIik7Ci0JCWdvdG8gZXJyb3JfcmV0OwotCX0KLQlyZXQgPSBzdGF0dXMgJiAweDFGOwotCi0JaWYgKHN0YXR1cyAmIEFESVMxNjIwNF9ESUFHX1NUQVRfU0VMRlRFU1RfRkFJTCkKLQkJZGV2X2VycihkZXYsICJTZWxmIHRlc3QgZmFpbHVyZVxuIik7Ci0JaWYgKHN0YXR1cyAmIEFESVMxNjIwNF9ESUFHX1NUQVRfU1BJX0ZBSUwpCi0JCWRldl9lcnIoZGV2LCAiU1BJIGZhaWx1cmVcbiIpOwotCWlmIChzdGF0dXMgJiBBRElTMTYyMDRfRElBR19TVEFUX0ZMQVNIX1VQVCkKLQkJZGV2X2VycihkZXYsICJGbGFzaCB1cGRhdGUgZmFpbGVkXG4iKTsKLQlpZiAoc3RhdHVzICYgQURJUzE2MjA0X0RJQUdfU1RBVF9QT1dFUl9ISUdIKQotCQlkZXZfZXJyKGRldiwgIlBvd2VyIHN1cHBseSBhYm92ZSAzLjYyNVZcbiIpOwotCWlmIChzdGF0dXMgJiBBRElTMTYyMDRfRElBR19TVEFUX1BPV0VSX0xPVykKLQkJZGV2X2VycihkZXYsICJQb3dlciBzdXBwbHkgYmVsb3cgMi45NzVWXG4iKTsKLQotZXJyb3JfcmV0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgYWRpczE2MjA0X3NlbGZfdGVzdChzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGFkaXMxNjIwNF9zZWxmX3Rlc3Qoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKIAlpbnQgcmV0OwotCXJldCA9IGFkaXMxNjIwNF9zcGlfd3JpdGVfcmVnXzE2KGRldiwKKwlyZXQgPSBhZGlzMTYyMDRfc3BpX3dyaXRlX3JlZ18xNihpbmRpb19kZXYsCiAJCQlBRElTMTYyMDRfTVNDX0NUUkwsCiAJCQlBRElTMTYyMDRfTVNDX0NUUkxfU0VMRl9URVNUX0VOKTsKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoZGV2LCAicHJvYmxlbSBzdGFydGluZyBzZWxmIHRlc3QiKTsKKwkJZGV2X2VycigmaW5kaW9fZGV2LT5kZXYsICJwcm9ibGVtIHN0YXJ0aW5nIHNlbGYgdGVzdCIpOwogCQlnb3RvIGVycl9yZXQ7CiAJfQogCi0JYWRpczE2MjA0X2NoZWNrX3N0YXR1cyhkZXYpOworCWFkaXMxNjIwNF9jaGVja19zdGF0dXMoaW5kaW9fZGV2KTsKIAogZXJyX3JldDoKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGFkaXMxNjIwNF9pbml0aWFsX3NldHVwKHN0cnVjdCBhZGlzMTYyMDRfc3RhdGUgKnN0KQorc3RhdGljIGludCBhZGlzMTYyMDRfaW5pdGlhbF9zZXR1cChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQogewogCWludCByZXQ7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJnN0LT5pbmRpb19kZXYtPmRldjsKIAogCS8qIERpc2FibGUgSVJRICovCi0JcmV0ID0gYWRpczE2MjA0X3NldF9pcnEoZGV2LCBmYWxzZSk7CisJcmV0ID0gYWRpczE2MjA0X3NldF9pcnEoaW5kaW9fZGV2LCBmYWxzZSk7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKGRldiwgImRpc2FibGUgaXJxIGZhaWxlZCIpOworCQlkZXZfZXJyKCZpbmRpb19kZXYtPmRldiwgImRpc2FibGUgaXJxIGZhaWxlZCIpOwogCQlnb3RvIGVycl9yZXQ7CiAJfQogCiAJLyogRG8gc2VsZiB0ZXN0ICovCi0JcmV0ID0gYWRpczE2MjA0X3NlbGZfdGVzdChkZXYpOworCXJldCA9IGFkaXMxNjIwNF9zZWxmX3Rlc3QoaW5kaW9fZGV2KTsKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoZGV2LCAic2VsZiB0ZXN0IGZhaWx1cmUiKTsKKwkJZGV2X2VycigmaW5kaW9fZGV2LT5kZXYsICJzZWxmIHRlc3QgZmFpbHVyZSIpOwogCQlnb3RvIGVycl9yZXQ7CiAJfQogCiAJLyogUmVhZCBzdGF0dXMgcmVnaXN0ZXIgdG8gY2hlY2sgdGhlIHJlc3VsdCAqLwotCXJldCA9IGFkaXMxNjIwNF9jaGVja19zdGF0dXMoZGV2KTsKKwlyZXQgPSBhZGlzMTYyMDRfY2hlY2tfc3RhdHVzKGluZGlvX2Rldik7CiAJaWYgKHJldCkgewotCQlhZGlzMTYyMDRfcmVzZXQoZGV2KTsKLQkJZGV2X2VycihkZXYsICJkZXZpY2Ugbm90IHBsYXlpbmcgYmFsbCAtPiByZXNldCIpOworCQlhZGlzMTYyMDRfcmVzZXQoaW5kaW9fZGV2KTsKKwkJZGV2X2VycigmaW5kaW9fZGV2LT5kZXYsICJkZXZpY2Ugbm90IHBsYXlpbmcgYmFsbCAtPiByZXNldCIpOwogCQltc2xlZXAoQURJUzE2MjA0X1NUQVJUVVBfREVMQVkpOwotCQlyZXQgPSBhZGlzMTYyMDRfY2hlY2tfc3RhdHVzKGRldik7CisJCXJldCA9IGFkaXMxNjIwNF9jaGVja19zdGF0dXMoaW5kaW9fZGV2KTsKIAkJaWYgKHJldCkgewotCQkJZGV2X2VycihkZXYsICJnaXZpbmcgdXAiKTsKKwkJCWRldl9lcnIoJmluZGlvX2Rldi0+ZGV2LCAiZ2l2aW5nIHVwIik7CiAJCQlnb3RvIGVycl9yZXQ7CiAJCX0KIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICI6IGF0IENTJWQgKGlycSAlZClcbiIsCi0JCQlzdC0+dXMtPmNoaXBfc2VsZWN0LCBzdC0+dXMtPmlycSk7Ci0KIGVycl9yZXQ6CiAJcmV0dXJuIHJldDsKIH0KLQotc3RhdGljIElJT19ERVZfQVRUUl9JTl9OQU1FRF9SQVcoMCwgc3VwcGx5LCBhZGlzMTYyMDRfcmVhZF8xMmJpdF91bnNpZ25lZCwKLQkJQURJUzE2MjA0X1NVUFBMWV9PVVQpOwotc3RhdGljIElJT19DT05TVF9BVFRSKGluMF9zdXBwbHlfc2NhbGUsICIwLjAwMTIyIik7Ci1zdGF0aWMgSUlPX0RFVl9BVFRSX0lOX1JBVygxLCBhZGlzMTYyMDRfcmVhZF8xMmJpdF91bnNpZ25lZCwKLQkJQURJUzE2MjA0X0FVWF9BREMpOwotc3RhdGljIElJT19DT05TVF9BVFRSKGluMV9zY2FsZSwgIjAuMDAwNjEiKTsKLQotc3RhdGljIElJT19ERVZfQVRUUl9BQ0NFTF9YKGFkaXMxNjIwNF9yZWFkXzE0Yml0X3NpZ25lZCwKLQkJQURJUzE2MjA0X1hBQ0NMX09VVCk7Ci1zdGF0aWMgSUlPX0RFVl9BVFRSX0FDQ0VMX1koYWRpczE2MjA0X3JlYWRfMTRiaXRfc2lnbmVkLAotCQlBRElTMTYyMDRfWUFDQ0xfT1VUKTsKIHN0YXRpYyBJSU9fREVWX0FUVFJfQUNDRUxfWFkoYWRpczE2MjA0X3JlYWRfMTRiaXRfc2lnbmVkLAogCQlBRElTMTYyMDRfWFlfUlNTX09VVCk7CiBzdGF0aWMgSUlPX0RFVl9BVFRSX0FDQ0VMX1hQRUFLKGFkaXMxNjIwNF9yZWFkXzE0Yml0X3NpZ25lZCwKQEAgLTQxMiw1NCArMzA3LDE2NCBAQAogCQlBRElTMTYyMDRfWV9QRUFLX09VVCk7CiBzdGF0aWMgSUlPX0RFVl9BVFRSX0FDQ0VMX1hZUEVBSyhhZGlzMTYyMDRfcmVhZF8xNGJpdF9zaWduZWQsCiAJCUFESVMxNjIwNF9YWV9QRUFLX09VVCk7Ci1zdGF0aWMgSUlPX0RFVl9BVFRSX0FDQ0VMX1hfT0ZGU0VUKFNfSVdVU1IgfCBTX0lSVUdPLAotCQlhZGlzMTYyMDRfcmVhZF8xMmJpdF9zaWduZWQsCi0JCWFkaXMxNjIwNF93cml0ZV8xNmJpdCwKLQkJQURJUzE2MjA0X1hBQ0NMX05VTEwpOwotc3RhdGljIElJT19ERVZfQVRUUl9BQ0NFTF9ZX09GRlNFVChTX0lXVVNSIHwgU19JUlVHTywKLQkJYWRpczE2MjA0X3JlYWRfMTJiaXRfc2lnbmVkLAotCQlhZGlzMTYyMDRfd3JpdGVfMTZiaXQsCi0JCUFESVMxNjIwNF9ZQUNDTF9OVUxMKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUihhY2NlbF94X3NjYWxlLCAiMC4wMTcxMjUiKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUihhY2NlbF95X3NjYWxlLCAiMC4wMDg0MDciKTsKIHN0YXRpYyBJSU9fQ09OU1RfQVRUUihhY2NlbF94eV9zY2FsZSwgIjAuMDE3MTI1Iik7CiAKLXN0YXRpYyBJSU9fREVWX0FUVFJfVEVNUF9SQVcoYWRpczE2MjA0X3JlYWRfdGVtcCk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFIodGVtcF9vZmZzZXQsICIyNSIpOwotc3RhdGljIElJT19DT05TVF9BVFRSKHRlbXBfc2NhbGUsICItMC40NyIpOwotCiBzdGF0aWMgSUlPX0RFVklDRV9BVFRSKHJlc2V0LCBTX0lXVVNSLCBOVUxMLCBhZGlzMTYyMDRfd3JpdGVfcmVzZXQsIDApOwogCi1zdGF0aWMgSUlPX0NPTlNUX0FUVFIobmFtZSwgImFkaXMxNjIwNCIpOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWRpczE2MjA0X2V2ZW50X2F0dHJpYnV0ZXNbXSA9IHsKLQlOVUxMCitlbnVtIGFkaXMxNjIwNF9jaGFubmVsIHsKKwlpbl9zdXBwbHksCisJaW5fYXV4LAorCXRlbXAsCisJYWNjZWxfeCwKKwlhY2NlbF95LAogfTsKIAotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYWRpczE2MjA0X2V2ZW50X2F0dHJpYnV0ZV9ncm91cCA9IHsKLQkuYXR0cnMgPSBhZGlzMTYyMDRfZXZlbnRfYXR0cmlidXRlcywKK3N0YXRpYyB1OCBhZGlzMTYyMDRfYWRkcmVzc2VzWzVdWzJdID0geworCVtpbl9zdXBwbHldID0geyBBRElTMTYyMDRfU1VQUExZX09VVCB9LAorCVtpbl9hdXhdID0geyBBRElTMTYyMDRfQVVYX0FEQyB9LAorCVt0ZW1wXSA9IHsgQURJUzE2MjA0X1RFTVBfT1VUIH0sCisJW2FjY2VsX3hdID0geyBBRElTMTYyMDRfWEFDQ0xfT1VULCBBRElTMTYyMDRfWEFDQ0xfTlVMTCB9LAorCVthY2NlbF95XSA9IHsgQURJUzE2MjA0X1hBQ0NMX09VVCwgQURJUzE2MjA0X1lBQ0NMX05VTEwgfSwKIH07CitzdGF0aWMgaW50IGFkaXMxNjIwNF9yZWFkX3JhdyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAorCQkJICAgICAgc3RydWN0IGlpb19jaGFuX3NwZWMgY29uc3QgKmNoYW4sCisJCQkgICAgICBpbnQgKnZhbCwgaW50ICp2YWwyLAorCQkJICAgICAgbG9uZyBtYXNrKQoreworCWludCByZXQ7CisJaW50IGJpdHM7CisJdTggYWRkcjsKKwlzMTYgdmFsMTY7CiAKKwlzd2l0Y2ggKG1hc2spIHsKKwljYXNlIDA6CisJCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOworCQlhZGRyID0gYWRpczE2MjA0X2FkZHJlc3Nlc1tjaGFuLT5hZGRyZXNzXVswXTsKKwkJcmV0ID0gYWRpczE2MjA0X3NwaV9yZWFkX3JlZ18xNihpbmRpb19kZXYsIGFkZHIsICZ2YWwxNik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCWlmICh2YWwxNiAmIEFESVMxNjIwNF9FUlJPUl9BQ1RJVkUpIHsKKwkJCXJldCA9IGFkaXMxNjIwNF9jaGVja19zdGF0dXMoaW5kaW9fZGV2KTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCQl2YWwxNiA9IHZhbDE2ICYgKCgxIDw8IGNoYW4tPnNjYW5fdHlwZS5yZWFsYml0cykgLSAxKTsKKwkJaWYgKGNoYW4tPnNjYW5fdHlwZS5zaWduID09ICdzJykKKwkJCXZhbDE2ID0gKHMxNikodmFsMTYgPDwKKwkJCQkgICAgICAoMTYgLSBjaGFuLT5zY2FuX3R5cGUucmVhbGJpdHMpKSA+PgorCQkJCSgxNiAtIGNoYW4tPnNjYW5fdHlwZS5yZWFsYml0cyk7CisJCSp2YWwgPSB2YWwxNjsKKwkJbXV0ZXhfdW5sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKKwkJcmV0dXJuIElJT19WQUxfSU5UOworCWNhc2UgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TRVBBUkFURSk6CisJCXN3aXRjaCAoY2hhbi0+dHlwZSkgeworCQljYXNlIElJT19JTjoKKwkJCSp2YWwgPSAwOworCQkJaWYgKGNoYW4tPmNoYW5uZWwgPT0gMCkKKwkJCQkqdmFsMiA9IDEyMjA7CisJCQllbHNlCisJCQkJKnZhbDIgPSA2MTA7CisJCQlyZXR1cm4gSUlPX1ZBTF9JTlRfUExVU19NSUNSTzsKKwkJY2FzZSBJSU9fVEVNUDoKKwkJCSp2YWwgPSAwOworCQkJKnZhbDIgPSAtNDcwMDAwOworCQkJcmV0dXJuIElJT19WQUxfSU5UX1BMVVNfTUlDUk87CisJCWNhc2UgSUlPX0FDQ0VMOgorCQkJKnZhbCA9IDA7CisJCQlpZiAoY2hhbi0+Y2hhbm5lbCA9PSAneCcpCisJCQkJKnZhbDIgPSAxNzEyNTsKKwkJCWVsc2UKKwkJCQkqdmFsMiA9IDg0MDc7CisJCQlyZXR1cm4gSUlPX1ZBTF9JTlRfUExVU19NSUNSTzsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWNhc2UgKDEgPDwgSUlPX0NIQU5fSU5GT19PRkZTRVRfU0VQQVJBVEUpOgorCQkqdmFsID0gMjU7CisJCXJldHVybiBJSU9fVkFMX0lOVDsKKwljYXNlICgxIDw8IElJT19DSEFOX0lORk9fQ0FMSUJCSUFTX1NFUEFSQVRFKToKKwkJc3dpdGNoIChjaGFuLT50eXBlKSB7CisJCWNhc2UgSUlPX0FDQ0VMOgorCQkJYml0cyA9IDEyOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfTsKKwkJbXV0ZXhfbG9jaygmaW5kaW9fZGV2LT5tbG9jayk7CisJCWFkZHIgPSBhZGlzMTYyMDRfYWRkcmVzc2VzW2NoYW4tPmFkZHJlc3NdWzFdOworCQlyZXQgPSBhZGlzMTYyMDRfc3BpX3JlYWRfcmVnXzE2KGluZGlvX2RldiwgYWRkciwgJnZhbDE2KTsKKwkJaWYgKHJldCkgeworCQkJbXV0ZXhfdW5sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJdmFsMTYgJj0gKDEgPDwgYml0cykgLSAxOworCQl2YWwxNiA9IChzMTYpKHZhbDE2IDw8ICgxNiAtIGJpdHMpKSA+PiAoMTYgLSBiaXRzKTsKKwkJKnZhbCA9IHZhbDE2OworCQltdXRleF91bmxvY2soJmluZGlvX2Rldi0+bWxvY2spOworCQlyZXR1cm4gSUlPX1ZBTF9JTlQ7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IGFkaXMxNjIwNF93cml0ZV9yYXcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKKwkJCSAgICAgICBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbiwKKwkJCSAgICAgICBpbnQgdmFsLAorCQkJICAgICAgIGludCB2YWwyLAorCQkJICAgICAgIGxvbmcgbWFzaykKK3sKKwlpbnQgYml0czsKKwlzMTYgdmFsMTY7CisJdTggYWRkcjsKKwlzd2l0Y2ggKG1hc2spIHsKKwljYXNlICgxIDw8IElJT19DSEFOX0lORk9fQ0FMSUJCSUFTX1NFUEFSQVRFKToKKwkJc3dpdGNoIChjaGFuLT50eXBlKSB7CisJCWNhc2UgSUlPX0FDQ0VMOgorCQkJYml0cyA9IDEyOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfTsKKwkJdmFsMTYgPSB2YWwgJiAoKDEgPDwgYml0cykgLSAxKTsKKwkJYWRkciA9IGFkaXMxNjIwNF9hZGRyZXNzZXNbY2hhbi0+YWRkcmVzc11bMV07CisJCXJldHVybiBhZGlzMTYyMDRfc3BpX3dyaXRlX3JlZ18xNihpbmRpb19kZXYsIGFkZHIsIHZhbDE2KTsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBhZGlzMTYyMDRfY2hhbm5lbHNbXSA9IHsKKwlJSU9fQ0hBTihJSU9fSU4sIDAsIDAsIDAsICJzdXBwbHkiLCAwLCAwLAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TRVBBUkFURSksCisJCSBpbl9zdXBwbHksIEFESVMxNjIwNF9TQ0FOX1NVUFBMWSwKKwkJIElJT19TVCgndScsIDEyLCAxNiwgMCksIDApLAorCUlJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgTlVMTCwgMSwgMCwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0VQQVJBVEUpLAorCQkgaW5fYXV4LCBBRElTMTYyMDRfU0NBTl9BVVhfQURDLAorCQkgSUlPX1NUKCd1JywgMTIsIDE2LCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX1RFTVAsIDAsIDEsIDAsIE5VTEwsIDAsIDAsCisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NFUEFSQVRFKSB8CisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX09GRlNFVF9TRVBBUkFURSksCisJCSB0ZW1wLCBBRElTMTYyMDRfU0NBTl9URU1QLAorCQkgSUlPX1NUKCd1JywgMTIsIDE2LCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX0FDQ0VMLCAxLCAwLCAwLCBOVUxMLCAwLCBJSU9fTU9EX1gsCisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NFUEFSQVRFKSB8CisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX0NBTElCQklBU19TRVBBUkFURSksCisJCSBhY2NlbF94LCBBRElTMTYyMDRfU0NBTl9BQ0NfWCwKKwkJIElJT19TVCgncycsIDE0LCAxNiwgMCksIDApLAorCUlJT19DSEFOKElJT19BQ0NFTCwgMSwgMCwgMCwgTlVMTCwgMCwgSUlPX01PRF9ZLAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TRVBBUkFURSkgfAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19DQUxJQkJJQVNfU0VQQVJBVEUpLAorCQkgYWNjZWxfeSwgQURJUzE2MjA0X1NDQU5fQUNDX1ksCisJCSBJSU9fU1QoJ3MnLCAxNCwgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTl9TT0ZUX1RJTUVTVEFNUCg1KSwKK307CiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWRpczE2MjA0X2F0dHJpYnV0ZXNbXSA9IHsKLQkmaWlvX2Rldl9hdHRyX2luMF9zdXBwbHlfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luMF9zdXBwbHlfc2NhbGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX3RlbXBfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX3RlbXBfb2Zmc2V0LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX3RlbXBfc2NhbGUuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX3Jlc2V0LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX25hbWUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luMV9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4xX3NjYWxlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9hY2NlbF94X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfYWNjZWxfeV9yYXcuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX2FjY2VsX3h5LmRldl9hdHRyLmF0dHIsCiAJJmlpb19kZXZfYXR0cl9hY2NlbF94cGVhay5kZXZfYXR0ci5hdHRyLAogCSZpaW9fZGV2X2F0dHJfYWNjZWxfeXBlYWsuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX2FjY2VsX3h5cGVhay5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfYWNjZWxfeF9vZmZzZXQuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2FjY2VsX3lfb2Zmc2V0LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2FjY2VsX3hfc2NhbGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfYWNjZWxfeV9zY2FsZS5kZXZfYXR0ci5hdHRyLAogCSZpaW9fY29uc3RfYXR0cl9hY2NlbF94eV9zY2FsZS5kZXZfYXR0ci5hdHRyLAogCU5VTEwKIH07CkBAIC00NjgsNiArNDczLDEzIEBACiAJLmF0dHJzID0gYWRpczE2MjA0X2F0dHJpYnV0ZXMsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIGFkaXMxNjIwNF9pbmZvID0geworCS5hdHRycyA9ICZhZGlzMTYyMDRfYXR0cmlidXRlX2dyb3VwLAorCS5yZWFkX3JhdyA9ICZhZGlzMTYyMDRfcmVhZF9yYXcsCisJLndyaXRlX3JhdyA9ICZhZGlzMTYyMDRfd3JpdGVfcmF3LAorCS5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEUsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhZGlzMTYyMDRfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlpbnQgcmV0LCByZWdkb25lID0gMDsKQEAgLTQ5MywxOCArNTA1LDE4IEBACiAJc3QtPnVzID0gc3BpOwogCW11dGV4X2luaXQoJnN0LT5idWZfbG9jayk7CiAJLyogc2V0dXAgdGhlIGluZHVzdHJpYWxpbyBkcml2ZXIgYWxsb2NhdGVkIGVsZW1lbnRzICovCi0Jc3QtPmluZGlvX2RldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2UoKTsKKwlzdC0+aW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgwKTsKIAlpZiAoc3QtPmluZGlvX2RldiA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3JfZnJlZV90eDsKIAl9CiAKKwlzdC0+aW5kaW9fZGV2LT5uYW1lID0gc3BpLT5kZXYuZHJpdmVyLT5uYW1lOwogCXN0LT5pbmRpb19kZXYtPmRldi5wYXJlbnQgPSAmc3BpLT5kZXY7Ci0Jc3QtPmluZGlvX2Rldi0+bnVtX2ludGVycnVwdF9saW5lcyA9IDE7Ci0Jc3QtPmluZGlvX2Rldi0+ZXZlbnRfYXR0cnMgPSAmYWRpczE2MjA0X2V2ZW50X2F0dHJpYnV0ZV9ncm91cDsKLQlzdC0+aW5kaW9fZGV2LT5hdHRycyA9ICZhZGlzMTYyMDRfYXR0cmlidXRlX2dyb3VwOworCXN0LT5pbmRpb19kZXYtPmluZm8gPSAmYWRpczE2MjA0X2luZm87CisJc3QtPmluZGlvX2Rldi0+Y2hhbm5lbHMgPSBhZGlzMTYyMDRfY2hhbm5lbHM7CisJc3QtPmluZGlvX2Rldi0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShhZGlzMTYyMDRfY2hhbm5lbHMpOwogCXN0LT5pbmRpb19kZXYtPmRldl9kYXRhID0gKHZvaWQgKikoc3QpOwotCXN0LT5pbmRpb19kZXYtPmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRTsKIAlzdC0+aW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOwogCiAJcmV0ID0gYWRpczE2MjA0X2NvbmZpZ3VyZV9yaW5nKHN0LT5pbmRpb19kZXYpOwpAQCAtNTE2LDM5ICs1MjgsMzAgQEAKIAkJZ290byBlcnJvcl91bnJlZ19yaW5nX2Z1bmNzOwogCXJlZ2RvbmUgPSAxOwogCi0JcmV0ID0gYWRpczE2MjA0X2luaXRpYWxpemVfcmluZyhzdC0+aW5kaW9fZGV2LT5yaW5nKTsKKwlyZXQgPSBpaW9fcmluZ19idWZmZXJfcmVnaXN0ZXJfZXgoc3QtPmluZGlvX2Rldi0+cmluZywgMCwKKwkJCQkJICBhZGlzMTYyMDRfY2hhbm5lbHMsCisJCQkJCSAgQVJSQVlfU0laRShhZGlzMTYyMDRfY2hhbm5lbHMpKTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGluaXRpYWxpemUgdGhlIHJpbmdcbiIpOwogCQlnb3RvIGVycm9yX3VucmVnX3JpbmdfZnVuY3M7CiAJfQogCiAJaWYgKHNwaS0+aXJxKSB7Ci0JCXJldCA9IGlpb19yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShzcGktPmlycSwKLQkJCQlzdC0+aW5kaW9fZGV2LAotCQkJCTAsCi0JCQkJSVJRRl9UUklHR0VSX1JJU0lORywKLQkJCQkiYWRpczE2MjA0Iik7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIGVycm9yX3VuaW5pdGlhbGl6ZV9yaW5nOwotCiAJCXJldCA9IGFkaXMxNjIwNF9wcm9iZV90cmlnZ2VyKHN0LT5pbmRpb19kZXYpOwogCQlpZiAocmV0KQotCQkJZ290byBlcnJvcl91bnJlZ2lzdGVyX2xpbmU7CisJCQlnb3RvIGVycm9yX3VuaW5pdGlhbGl6ZV9yaW5nOwogCX0KIAogCS8qIEdldCB0aGUgZGV2aWNlIGludG8gYSBzYW5lIGluaXRpYWwgc3RhdGUgKi8KLQlyZXQgPSBhZGlzMTYyMDRfaW5pdGlhbF9zZXR1cChzdCk7CisJcmV0ID0gYWRpczE2MjA0X2luaXRpYWxfc2V0dXAoc3QtPmluZGlvX2Rldik7CiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl9yZW1vdmVfdHJpZ2dlcjsKIAlyZXR1cm4gMDsKIAogZXJyb3JfcmVtb3ZlX3RyaWdnZXI6CiAJYWRpczE2MjA0X3JlbW92ZV90cmlnZ2VyKHN0LT5pbmRpb19kZXYpOwotZXJyb3JfdW5yZWdpc3Rlcl9saW5lOgotCWlmIChzcGktPmlycSkKLQkJaWlvX3VucmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoc3QtPmluZGlvX2RldiwgMCk7CiBlcnJvcl91bmluaXRpYWxpemVfcmluZzoKLQlhZGlzMTYyMDRfdW5pbml0aWFsaXplX3Jpbmcoc3QtPmluZGlvX2Rldi0+cmluZyk7CisJaWlvX3JpbmdfYnVmZmVyX3VucmVnaXN0ZXIoc3QtPmluZGlvX2Rldi0+cmluZyk7CiBlcnJvcl91bnJlZ19yaW5nX2Z1bmNzOgogCWFkaXMxNjIwNF91bmNvbmZpZ3VyZV9yaW5nKHN0LT5pbmRpb19kZXYpOwogZXJyb3JfZnJlZV9kZXY6CkBAIC01NzEsMTMgKzU3NCw4IEBACiAJc3RydWN0IGFkaXMxNjIwNF9zdGF0ZSAqc3QgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKIAlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gc3QtPmluZGlvX2RldjsKIAotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Ci0KIAlhZGlzMTYyMDRfcmVtb3ZlX3RyaWdnZXIoaW5kaW9fZGV2KTsKLQlpZiAoc3BpLT5pcnEpCi0JCWlpb191bnJlZ2lzdGVyX2ludGVycnVwdF9saW5lKGluZGlvX2RldiwgMCk7Ci0KLQlhZGlzMTYyMDRfdW5pbml0aWFsaXplX3JpbmcoaW5kaW9fZGV2LT5yaW5nKTsKKwlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihzdC0+aW5kaW9fZGV2LT5yaW5nKTsKIAlpaW9fZGV2aWNlX3VucmVnaXN0ZXIoaW5kaW9fZGV2KTsKIAlhZGlzMTYyMDRfdW5jb25maWd1cmVfcmluZyhpbmRpb19kZXYpOwogCWtmcmVlKHN0LT50eCk7CkBAIC02MDksNSArNjA3LDUgQEAKIG1vZHVsZV9leGl0KGFkaXMxNjIwNF9leGl0KTsKIAogTU9EVUxFX0FVVEhPUigiQmFycnkgU29uZyA8MjFjbmJhb0BnbWFpbC5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkFuYWxvZyBEZXZpY2VzIEFESVMxNjIwNCBQcm9ncmFtbWFibGUgSGlnaC1nIERpZ2l0YWwgSW1wYWN0IFNlbnNvciBhbmQgUmVjb3JkZXIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQURJUzE2MjA0IEhpZ2gtZyBEaWdpdGFsIEltcGFjdCBTZW5zb3IgYW5kIFJlY29yZGVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwNF9yaW5nLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwNF9yaW5nLmMKaW5kZXggNDIwYjE2MGYuLmEyZDM2ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjA0X3JpbmcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwNF9yaW5nLmMKQEAgLTE3LDU1ICsxNyw2IEBACiAjaW5jbHVkZSAiLi4vdHJpZ2dlci5oIgogI2luY2x1ZGUgImFkaXMxNjIwNC5oIgogCi1zdGF0aWMgSUlPX1NDQU5fRUxfQyhpbl9zdXBwbHksIEFESVMxNjIwNF9TQ0FOX1NVUFBMWSwgQURJUzE2MjA0X1NVUFBMWV9PVVQsIE5VTEwpOwotc3RhdGljIElJT19DT05TVF9BVFRSX1NDQU5fRUxfVFlQRShpbl9zdXBwbHksIHUsIDEyLCAxNik7Ci1zdGF0aWMgSUlPX1NDQU5fRUxfQyhhY2NlbF94LCBBRElTMTYyMDRfU0NBTl9BQ0NfWCwgQURJUzE2MjA0X1hBQ0NMX09VVCwgTlVMTCk7Ci1zdGF0aWMgSUlPX1NDQU5fRUxfQyhhY2NlbF95LCBBRElTMTYyMDRfU0NBTl9BQ0NfWSwgQURJUzE2MjA0X1lBQ0NMX09VVCwgTlVMTCk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfU0NBTl9FTF9UWVBFKGFjY2VsLCBzLCAxNCwgMTYpOwotc3RhdGljIElJT19TQ0FOX0VMX0MoaW4wLCBBRElTMTYyMDRfU0NBTl9BVVhfQURDLCBBRElTMTYyMDRfQVVYX0FEQywgTlVMTCk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfU0NBTl9FTF9UWVBFKGluMCwgdSwgMTIsIDE2KTsKLXN0YXRpYyBJSU9fU0NBTl9FTF9DKHRlbXAsIEFESVMxNjIwNF9TQ0FOX1RFTVAsIEFESVMxNjIwNF9URU1QX09VVCwgTlVMTCk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfU0NBTl9FTF9UWVBFKHRlbXAsIHUsIDEyLCAxNik7Ci1zdGF0aWMgSUlPX1NDQU5fRUxfVElNRVNUQU1QKDUpOwotc3RhdGljIElJT19DT05TVF9BVFRSX1NDQU5fRUxfVFlQRSh0aW1lc3RhbXAsIHMsIDY0LCA2NCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZGlzMTYyMDRfc2Nhbl9lbF9hdHRyc1tdID0gewotCSZpaW9fc2Nhbl9lbF9pbl9zdXBwbHkuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW5fc3VwcGx5X2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luX3N1cHBseV90eXBlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2FjY2VsX3guZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfYWNjZWxfeF9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9hY2NlbF95LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2FjY2VsX3lfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfYWNjZWxfdHlwZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjAuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4wX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luMF90eXBlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX3RlbXAuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfdGVtcF9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl90ZW1wX3R5cGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfdGltZXN0YW1wLmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX3RpbWVzdGFtcF9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl90aW1lc3RhbXBfdHlwZS5kZXZfYXR0ci5hdHRyLAotCU5VTEwsCi19OwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZGlzMTYyMDRfc2Nhbl9lbF9ncm91cCA9IHsKLQkuYXR0cnMgPSBhZGlzMTYyMDRfc2Nhbl9lbF9hdHRycywKLQkubmFtZSA9ICJzY2FuX2VsZW1lbnRzIiwKLX07Ci0KLS8qKgotICogYWRpczE2MjA0X3BvbGxfZnVuY190aCgpIHRvcCBoYWxmIGludGVycnVwdCBoYW5kbGVyIGNhbGxlZCBieSB0cmlnZ2VyCi0gKiBAcHJpdmF0ZV9kYXRhOglpaW9fZGV2Ci0gKiovCi1zdGF0aWMgdm9pZCBhZGlzMTYyMDRfcG9sbF9mdW5jX3RoKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsIHM2NCB0aW1lc3RhbXApCi17Ci0Jc3RydWN0IGFkaXMxNjIwNF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7Ci0Jc3QtPmxhc3RfdGltZXN0YW1wID0gdGltZXN0YW1wOwotCXNjaGVkdWxlX3dvcmsoJnN0LT53b3JrX3RyaWdnZXJfdG9fcmluZyk7Ci19Ci0KIC8qKgogICogYWRpczE2MjA0X3JlYWRfcmluZ19kYXRhKCkgcmVhZCBkYXRhIHJlZ2lzdGVycyB3aGljaCB3aWxsIGJlIHBsYWNlZCBpbnRvIHJpbmcKICAqIEBkZXY6IGRldmljZSBhc3NvY2lhdGVkIHdpdGggY2hpbGQgb2YgYWN0dWFsIGRldmljZSAoaWlvX2RldiBvciBpaW9fdHJpZykKQEAgLTkxLDcgKzQyLDggQEAKIAkJeGZlcnNbaV0ubGVuID0gMjsKIAkJeGZlcnNbaV0uZGVsYXlfdXNlY3MgPSAyMDsKIAkJeGZlcnNbaV0udHhfYnVmID0gc3QtPnR4ICsgMiAqIGk7Ci0JCXN0LT50eFsyICogaV0gPSBBRElTMTYyMDRfUkVBRF9SRUcoQURJUzE2MjA0X1NVUFBMWV9PVVQgKyAyICogaSk7CisJCXN0LT50eFsyICogaV0KKwkJCT0gQURJUzE2MjA0X1JFQURfUkVHKEFESVMxNjIwNF9TVVBQTFlfT1VUICsgMiAqIGkpOwogCQlzdC0+dHhbMiAqIGkgKyAxXSA9IDA7CiAJCWlmIChpID49IDEpCiAJCQl4ZmVyc1tpXS5yeF9idWYgPSByeCArIDIgKiAoaSAtIDEpOwpAQCAtMTEwLDIxICs2MiwyMCBAQAogLyogV2hpbHN0IHRoaXMgbWFrZXMgYSBsb3Qgb2YgY2FsbHMgdG8gaWlvX3N3X3JpbmcgZnVuY3Rpb25zIC0gaXQgaXMgdG8gZGV2aWNlCiAgKiBzcGVjaWZpYyB0byBiZSByb2xsZWQgaW50byB0aGUgY29yZS4KICAqLwotc3RhdGljIHZvaWQgYWRpczE2MjA0X3RyaWdnZXJfYmhfdG9fcmluZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmtfcykKK3N0YXRpYyBpcnFyZXR1cm5fdCBhZGlzMTYyMDRfdHJpZ2dlcl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKnApCiB7Ci0Jc3RydWN0IGFkaXMxNjIwNF9zdGF0ZSAqc3QKLQkJPSBjb250YWluZXJfb2Yod29ya19zLCBzdHJ1Y3QgYWRpczE2MjA0X3N0YXRlLAotCQkJICAgICAgIHdvcmtfdHJpZ2dlcl90b19yaW5nKTsKLQlzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nID0gc3QtPmluZGlvX2Rldi0+cmluZzsKLQorCXN0cnVjdCBpaW9fcG9sbF9mdW5jICpwZiA9IHA7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHBmLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGFkaXMxNjIwNF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CisJc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyA9IGluZGlvX2Rldi0+cmluZzsKIAlpbnQgaSA9IDA7CiAJczE2ICpkYXRhOwotCXNpemVfdCBkYXRhc2l6ZSA9IHJpbmctPmFjY2Vzcy5nZXRfYnl0ZXNfcGVyX2RhdHVtKHJpbmcpOworCXNpemVfdCBkYXRhc2l6ZSA9IHJpbmctPmFjY2Vzcy0+Z2V0X2J5dGVzX3Blcl9kYXR1bShyaW5nKTsKIAogCWRhdGEgPSBrbWFsbG9jKGRhdGFzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGF0YSA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJnN0LT51cy0+ZGV2LCAibWVtb3J5IGFsbG9jIGZhaWxlZCBpbiByaW5nIGJoIik7Ci0JCXJldHVybjsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJaWYgKHJpbmctPnNjYW5fY291bnQpCkBAIC0xMzUsMzAgKzg2LDMyIEBACiAKIAkvKiBHdWFyYW50ZWVkIHRvIGJlIGFsaWduZWQgd2l0aCA4IGJ5dGUgYm91bmRhcnkgKi8KIAlpZiAocmluZy0+c2Nhbl90aW1lc3RhbXApCi0JCSooKHM2NCAqKShkYXRhICsgKChpICsgMykvNCkqNCkpID0gc3QtPmxhc3RfdGltZXN0YW1wOworCQkqKChzNjQgKikoZGF0YSArICgoaSArIDMpLzQpKjQpKSA9IHBmLT50aW1lc3RhbXA7CiAKLQlyaW5nLT5hY2Nlc3Muc3RvcmVfdG8ocmluZywKLQkJCSAgICAgICh1OCAqKWRhdGEsCi0JCQkgICAgICBzdC0+bGFzdF90aW1lc3RhbXApOworCXJpbmctPmFjY2Vzcy0+c3RvcmVfdG8ocmluZywgKHU4ICopZGF0YSwgcGYtPnRpbWVzdGFtcCk7CiAKIAlpaW9fdHJpZ2dlcl9ub3RpZnlfZG9uZShzdC0+aW5kaW9fZGV2LT50cmlnKTsKIAlrZnJlZShkYXRhKTsKIAotCXJldHVybjsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKIHZvaWQgYWRpczE2MjA0X3VuY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKLQlrZnJlZShpbmRpb19kZXYtPnBvbGxmdW5jKTsKKwlpaW9fZGVhbGxvY19wb2xsZnVuYyhpbmRpb19kZXYtPnBvbGxmdW5jKTsKIAlpaW9fc3dfcmJfZnJlZShpbmRpb19kZXYtPnJpbmcpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19yaW5nX3NldHVwX29wcyBhZGlzMTYyMDRfcmluZ19zZXR1cF9vcHMgPSB7CisJLnByZWVuYWJsZSA9ICZpaW9fc3dfcmluZ19wcmVlbmFibGUsCisJLnBvc3RlbmFibGUgPSAmaWlvX3RyaWdnZXJlZF9yaW5nX3Bvc3RlbmFibGUsCisJLnByZWRpc2FibGUgPSAmaWlvX3RyaWdnZXJlZF9yaW5nX3ByZWRpc2FibGUsCit9OworCiBpbnQgYWRpczE2MjA0X2NvbmZpZ3VyZV9yaW5nKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCiB7CiAJaW50IHJldCA9IDA7Ci0Jc3RydWN0IGFkaXMxNjIwNF9zdGF0ZSAqc3QgPSBpbmRpb19kZXYtPmRldl9kYXRhOwogCXN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmc7Ci0JSU5JVF9XT1JLKCZzdC0+d29ya190cmlnZ2VyX3RvX3JpbmcsIGFkaXMxNjIwNF90cmlnZ2VyX2JoX3RvX3JpbmcpOwogCiAJcmluZyA9IGlpb19zd19yYl9hbGxvY2F0ZShpbmRpb19kZXYpOwogCWlmICghcmluZykgewpAQCAtMTY3LDI1ICsxMjAsMzAgQEAKIAl9CiAJaW5kaW9fZGV2LT5yaW5nID0gcmluZzsKIAkvKiBFZmZlY3RpdmVseSBzZWxlY3QgdGhlIHJpbmcgYnVmZmVyIGltcGxlbWVudGF0aW9uICovCi0JaWlvX3Jpbmdfc3dfcmVnaXN0ZXJfZnVuY3MoJnJpbmctPmFjY2Vzcyk7CisJcmluZy0+YWNjZXNzID0gJnJpbmdfc3dfYWNjZXNzX2Z1bmNzOwogCXJpbmctPmJwZSA9IDI7Ci0JcmluZy0+c2Nhbl9lbF9hdHRycyA9ICZhZGlzMTYyMDRfc2Nhbl9lbF9ncm91cDsKIAlyaW5nLT5zY2FuX3RpbWVzdGFtcCA9IHRydWU7Ci0JcmluZy0+cHJlZW5hYmxlID0gJmlpb19zd19yaW5nX3ByZWVuYWJsZTsKLQlyaW5nLT5wb3N0ZW5hYmxlID0gJmlpb190cmlnZ2VyZWRfcmluZ19wb3N0ZW5hYmxlOwotCXJpbmctPnByZWRpc2FibGUgPSAmaWlvX3RyaWdnZXJlZF9yaW5nX3ByZWRpc2FibGU7CisJcmluZy0+c2V0dXBfb3BzID0gJmFkaXMxNjIwNF9yaW5nX3NldHVwX29wczsKIAlyaW5nLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJLyogU2V0IGRlZmF1bHQgc2NhbiBtb2RlICovCi0JaWlvX3NjYW5fbWFza19zZXQocmluZywgaWlvX3NjYW5fZWxfaW5fc3VwcGx5Lm51bWJlcik7Ci0JaWlvX3NjYW5fbWFza19zZXQocmluZywgaWlvX3NjYW5fZWxfYWNjZWxfeC5udW1iZXIpOwotCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIGlpb19zY2FuX2VsX2FjY2VsX3kubnVtYmVyKTsKLQlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCBpaW9fc2Nhbl9lbF90ZW1wLm51bWJlcik7Ci0JaWlvX3NjYW5fbWFza19zZXQocmluZywgaWlvX3NjYW5fZWxfaW4wLm51bWJlcik7CisJaWlvX3NjYW5fbWFza19zZXQocmluZywgQURJUzE2MjA0X1NDQU5fU1VQUExZKTsKKwlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCBBRElTMTYyMDRfU0NBTl9BQ0NfWCk7CisJaWlvX3NjYW5fbWFza19zZXQocmluZywgQURJUzE2MjA0X1NDQU5fQUNDX1kpOworCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIEFESVMxNjIwNF9TQ0FOX0FVWF9BREMpOworCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIEFESVMxNjIwNF9TQ0FOX1RFTVApOwogCi0JcmV0ID0gaWlvX2FsbG9jX3BvbGxmdW5jKGluZGlvX2RldiwgTlVMTCwgJmFkaXMxNjIwNF9wb2xsX2Z1bmNfdGgpOwotCWlmIChyZXQpCisJaW5kaW9fZGV2LT5wb2xsZnVuYyA9IGlpb19hbGxvY19wb2xsZnVuYygmaWlvX3BvbGxmdW5jX3N0b3JlX3RpbWUsCisJCQkJCQkgJmFkaXMxNjIwNF90cmlnZ2VyX2hhbmRsZXIsCisJCQkJCQkgSVJRRl9PTkVTSE9ULAorCQkJCQkJIGluZGlvX2RldiwKKwkJCQkJCSAiJXNfY29uc3VtZXIlZCIsCisJCQkJCQkgaW5kaW9fZGV2LT5uYW1lLAorCQkJCQkJIGluZGlvX2Rldi0+aWQpOworCWlmIChpbmRpb19kZXYtPnBvbGxmdW5jID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9paW9fc3dfcmJfZnJlZTsKKwl9CiAKIAlpbmRpb19kZXYtPm1vZGVzIHw9IElORElPX1JJTkdfVFJJR0dFUkVEOwogCXJldHVybiAwOwpAQCAtMTk0LDEzICsxNTIsMyBAQAogCWlpb19zd19yYl9mcmVlKGluZGlvX2Rldi0+cmluZyk7CiAJcmV0dXJuIHJldDsKIH0KLQotaW50IGFkaXMxNjIwNF9pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZykKLXsKLQlyZXR1cm4gaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyKHJpbmcsIDApOwotfQotCi12b2lkIGFkaXMxNjIwNF91bmluaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKQotewotCWlpb19yaW5nX2J1ZmZlcl91bnJlZ2lzdGVyKHJpbmcpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDRfdHJpZ2dlci5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDRfdHJpZ2dlci5jCmluZGV4IDhlOWRiOTAuLjVlMWY5YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjA0X3RyaWdnZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwNF90cmlnZ2VyLmMKQEAgLTEzLDM1ICsxMyw2IEBACiAjaW5jbHVkZSAiYWRpczE2MjA0LmgiCiAKIC8qKgotICogYWRpczE2MjA0X2RhdGFfcmR5X3RyaWdfcG9sbCgpIHRoZSBldmVudCBoYW5kbGVyIGZvciB0aGUgZGF0YSByZHkgdHJpZwotICoqLwotc3RhdGljIGludCBhZGlzMTYyMDRfZGF0YV9yZHlfdHJpZ19wb2xsKHN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbywKLQkJCQkgICAgICAgaW50IGluZGV4LAotCQkJCSAgICAgICBzNjQgdGltZXN0YW1wLAotCQkJCSAgICAgICBpbnQgbm9fdGVzdCkKLXsKLQlzdHJ1Y3QgYWRpczE2MjA0X3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoZGV2X2luZm8pOwotCXN0cnVjdCBpaW9fdHJpZ2dlciAqdHJpZyA9IHN0LT50cmlnOwotCi0JaWlvX3RyaWdnZXJfcG9sbCh0cmlnLCB0aW1lc3RhbXApOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1JSU9fRVZFTlRfU0goZGF0YV9yZHlfdHJpZywgJmFkaXMxNjIwNF9kYXRhX3JkeV90cmlnX3BvbGwpOwotCi1zdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgaWlvX3RyaWdnZXJfcmVhZF9uYW1lLCBOVUxMKTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkaXMxNjIwNF90cmlnZ2VyX2F0dHJzW10gPSB7Ci0JJmRldl9hdHRyX25hbWUuYXR0ciwKLQlOVUxMLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYWRpczE2MjA0X3RyaWdnZXJfYXR0cl9ncm91cCA9IHsKLQkuYXR0cnMgPSBhZGlzMTYyMDRfdHJpZ2dlcl9hdHRycywKLX07Ci0KLS8qKgogICogYWRpczE2MjA0X2RhdGFfcmR5X3RyaWdnZXJfc2V0X3N0YXRlKCkgc2V0IGRhdGFyZHkgaW50ZXJydXB0IHN0YXRlCiAgKiovCiBzdGF0aWMgaW50IGFkaXMxNjIwNF9kYXRhX3JkeV90cmlnZ2VyX3NldF9zdGF0ZShzdHJ1Y3QgaWlvX3RyaWdnZXIgKnRyaWcsCkBAIC00OSwzMSArMjAsOSBAQAogewogCXN0cnVjdCBhZGlzMTYyMDRfc3RhdGUgKnN0ID0gdHJpZy0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBzdC0+aW5kaW9fZGV2OwotCWludCByZXQgPSAwOwogCiAJZGV2X2RiZygmaW5kaW9fZGV2LT5kZXYsICIlcyAoJWQpXG4iLCBfX2Z1bmNfXywgc3RhdGUpOwotCXJldCA9IGFkaXMxNjIwNF9zZXRfaXJxKCZzdC0+aW5kaW9fZGV2LT5kZXYsIHN0YXRlKTsKLQlpZiAoc3RhdGUgPT0gZmFsc2UpIHsKLQkJaWlvX3JlbW92ZV9ldmVudF9mcm9tX2xpc3QoJmlpb19ldmVudF9kYXRhX3JkeV90cmlnLAotCQkJCQkgICAmaW5kaW9fZGV2LT5pbnRlcnJ1cHRzWzBdCi0JCQkJCSAgIC0+ZXZfbGlzdCk7Ci0JCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Ci0JfSBlbHNlIHsKLQkJaWlvX2FkZF9ldmVudF90b19saXN0KCZpaW9fZXZlbnRfZGF0YV9yZHlfdHJpZywKLQkJCQkgICAgICAmaW5kaW9fZGV2LT5pbnRlcnJ1cHRzWzBdLT5ldl9saXN0KTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBhZGlzMTYyMDRfdHJpZ190cnlfcmVlbigpIHRyeSByZW5hYmxpbmcgaXJxIGZvciBkYXRhIHJkeSB0cmlnZ2VyCi0gKiBAdHJpZzoJdGhlIGRhdGFyZHkgdHJpZ2dlcgotICoqLwotc3RhdGljIGludCBhZGlzMTYyMDRfdHJpZ190cnlfcmVlbihzdHJ1Y3QgaWlvX3RyaWdnZXIgKnRyaWcpCi17Ci0Jc3RydWN0IGFkaXMxNjIwNF9zdGF0ZSAqc3QgPSB0cmlnLT5wcml2YXRlX2RhdGE7Ci0JZW5hYmxlX2lycShzdC0+dXMtPmlycSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGFkaXMxNjIwNF9zZXRfaXJxKHN0LT5pbmRpb19kZXYsIHN0YXRlKTsKIH0KIAogaW50IGFkaXMxNjIwNF9wcm9iZV90cmlnZ2VyKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCkBAIC04MSwzNCArMzAsMzggQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBhZGlzMTYyMDRfc3RhdGUgKnN0ID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKIAotCXN0LT50cmlnID0gaWlvX2FsbG9jYXRlX3RyaWdnZXIoKTsKLQlzdC0+dHJpZy0+bmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLAotCQkJCSJhZGlzMTYyMDQtZGV2JWQiLAotCQkJCWluZGlvX2Rldi0+aWQpOwotCWlmICghc3QtPnRyaWctPm5hbWUpIHsKKwlzdC0+dHJpZyA9IGlpb19hbGxvY2F0ZV90cmlnZ2VyKCJhZGlzMTYyMDQtZGV2JWQiLCBpbmRpb19kZXYtPmlkKTsKKwlpZiAoc3QtPnRyaWcgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yX2ZyZWVfdHJpZzsKKwkJZ290byBlcnJvcl9yZXQ7CiAJfQorCisJcmV0ID0gcmVxdWVzdF9pcnEoc3QtPnVzLT5pcnEsCisJCQkgICZpaW9fdHJpZ2dlcl9nZW5lcmljX2RhdGFfcmR5X3BvbGwsCisJCQkgIElSUUZfVFJJR0dFUl9SSVNJTkcsCisJCQkgICJhZGlzMTYyMDQiLAorCQkJICBzdC0+dHJpZyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcl9mcmVlX3RyaWc7CisKIAlzdC0+dHJpZy0+ZGV2LnBhcmVudCA9ICZzdC0+dXMtPmRldjsKIAlzdC0+dHJpZy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlzdC0+dHJpZy0+cHJpdmF0ZV9kYXRhID0gc3Q7CiAJc3QtPnRyaWctPnNldF90cmlnZ2VyX3N0YXRlID0gJmFkaXMxNjIwNF9kYXRhX3JkeV90cmlnZ2VyX3NldF9zdGF0ZTsKLQlzdC0+dHJpZy0+dHJ5X3JlZW5hYmxlID0gJmFkaXMxNjIwNF90cmlnX3RyeV9yZWVuOwotCXN0LT50cmlnLT5jb250cm9sX2F0dHJzID0gJmFkaXMxNjIwNF90cmlnZ2VyX2F0dHJfZ3JvdXA7CiAJcmV0ID0gaWlvX3RyaWdnZXJfcmVnaXN0ZXIoc3QtPnRyaWcpOwogCiAJLyogc2VsZWN0IGRlZmF1bHQgdHJpZ2dlciAqLwogCWluZGlvX2Rldi0+dHJpZyA9IHN0LT50cmlnOwogCWlmIChyZXQpCi0JCWdvdG8gZXJyb3JfZnJlZV90cmlnX25hbWU7CisJCWdvdG8gZXJyb3JfZnJlZV9pcnE7CiAKIAlyZXR1cm4gMDsKIAotZXJyb3JfZnJlZV90cmlnX25hbWU6Ci0Ja2ZyZWUoc3QtPnRyaWctPm5hbWUpOworZXJyb3JfZnJlZV9pcnE6CisJZnJlZV9pcnEoc3QtPnVzLT5pcnEsIHN0LT50cmlnKTsKIGVycm9yX2ZyZWVfdHJpZzoKIAlpaW9fZnJlZV90cmlnZ2VyKHN0LT50cmlnKTsKLQorZXJyb3JfcmV0OgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTExNyw2ICs3MCw2IEBACiAJc3RydWN0IGFkaXMxNjIwNF9zdGF0ZSAqc3RhdGUgPSBpbmRpb19kZXYtPmRldl9kYXRhOwogCiAJaWlvX3RyaWdnZXJfdW5yZWdpc3RlcihzdGF0ZS0+dHJpZyk7Ci0Ja2ZyZWUoc3RhdGUtPnRyaWctPm5hbWUpOworCWZyZWVfaXJxKHN0YXRlLT51cy0+aXJxLCBzdGF0ZS0+dHJpZyk7CiAJaWlvX2ZyZWVfdHJpZ2dlcihzdGF0ZS0+dHJpZyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwOS5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDkuaAppbmRleCA4YjBkYTEzLi41OGQwOGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwOS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjA5LmgKQEAgLTEwNCw4ICsxMDQsNiBAQAogLyoqCiAgKiBzdHJ1Y3QgYWRpczE2MjA5X3N0YXRlIC0gZGV2aWNlIGluc3RhbmNlIHNwZWNpZmljIGRhdGEKICAqIEB1czoJCQlhY3R1YWwgc3BpX2RldmljZQotICogQHdvcmtfdHJpZ2dlcl90b19yaW5nOiBiaCBmb3IgdHJpZ2dlcmVkIGV2ZW50IGhhbmRsaW5nCi0gKiBAbGFzdF90aW1lc3RhbXA6CXBhc3NpbmcgdGltZXN0YW1wIGZyb20gdGggdG8gYmggb2YgaW50ZXJydXB0IGhhbmRsZXIKICAqIEBpbmRpb19kZXY6CQlpbmR1c3RyaWFsIEkvTyBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAdHJpZzoJCWRhdGEgcmVhZHkgdHJpZ2dlciByZWdpc3RlcmVkIHdpdGggaWlvCiAgKiBAdHg6CQkJdHJhbnNtaXQgYnVmZmVyCkBAIC0xMTQsOCArMTEyLDYgQEAKICAqKi8KIHN0cnVjdCBhZGlzMTYyMDlfc3RhdGUgewogCXN0cnVjdCBzcGlfZGV2aWNlCQkqdXM7Ci0Jc3RydWN0IHdvcmtfc3RydWN0CQl3b3JrX3RyaWdnZXJfdG9fcmluZzsKLQlzNjQJCQkJbGFzdF90aW1lc3RhbXA7CiAJc3RydWN0IGlpb19kZXYJCQkqaW5kaW9fZGV2OwogCXN0cnVjdCBpaW9fdHJpZ2dlcgkJKnRyaWc7CiAJdTgJCQkJKnR4OwpAQCAtMTIzLDcgKzExOSw3IEBACiAJc3RydWN0IG11dGV4CQkJYnVmX2xvY2s7CiB9OwogCi1pbnQgYWRpczE2MjA5X3NldF9pcnEoc3RydWN0IGRldmljZSAqZGV2LCBib29sIGVuYWJsZSk7CitpbnQgYWRpczE2MjA5X3NldF9pcnEoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwgYm9vbCBlbmFibGUpOwogCiAjaWZkZWYgQ09ORklHX0lJT19SSU5HX0JVRkZFUgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwOV9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwOV9jb3JlLmMKaW5kZXggZTRhYzk1Ni4uYzQyM2NjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDlfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjA5X2NvcmUuYwpAQCAtNiw5ICs2LDYgQEAKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTIzLDI3ICsyMCwyMyBAQAogI2luY2x1ZGUgIi4uL3JpbmdfZ2VuZXJpYy5oIgogI2luY2x1ZGUgImFjY2VsLmgiCiAjaW5jbHVkZSAiaW5jbGlub21ldGVyLmgiCi0jaW5jbHVkZSAiLi4vZ3lyby9neXJvLmgiCiAjaW5jbHVkZSAiLi4vYWRjL2FkYy5oIgogCiAjaW5jbHVkZSAiYWRpczE2MjA5LmgiCiAKICNkZWZpbmUgRFJJVkVSX05BTUUJCSJhZGlzMTYyMDkiCiAKLXN0YXRpYyBpbnQgYWRpczE2MjA5X2NoZWNrX3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkZXYpOwotCiAvKioKICAqIGFkaXMxNjIwOV9zcGlfd3JpdGVfcmVnXzgoKSAtIHdyaXRlIHNpbmdsZSBieXRlIHRvIGEgcmVnaXN0ZXIKLSAqIEBkZXY6IGRldmljZSBhc3NvY2lhdGVkIHdpdGggY2hpbGQgb2YgYWN0dWFsIGRldmljZSAoaWlvX2RldiBvciBpaW9fdHJpZykKKyAqIEBpbmRpb19kZXY6IGlpbyBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIGFjdHVhbCBkZXZpY2UKICAqIEByZWdfYWRkcmVzczogdGhlIGFkZHJlc3Mgb2YgdGhlIHJlZ2lzdGVyIHRvIGJlIHdyaXR0ZW4KICAqIEB2YWw6IHRoZSB2YWx1ZSB0byB3cml0ZQogICoqLwotc3RhdGljIGludCBhZGlzMTYyMDlfc3BpX3dyaXRlX3JlZ184KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJdTggcmVnX2FkZHJlc3MsCi0JCXU4IHZhbCkKK3N0YXRpYyBpbnQgYWRpczE2MjA5X3NwaV93cml0ZV9yZWdfOChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAorCQkJCSAgICAgdTggcmVnX2FkZHJlc3MsCisJCQkJICAgICB1OCB2YWwpCiB7CiAJaW50IHJldDsKLQlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGFkaXMxNjIwOV9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CiAKIAltdXRleF9sb2NrKCZzdC0+YnVmX2xvY2spOwpAQCAtNTgsMTggKzUxLDE3IEBACiAKIC8qKgogICogYWRpczE2MjA5X3NwaV93cml0ZV9yZWdfMTYoKSAtIHdyaXRlIDIgYnl0ZXMgdG8gYSBwYWlyIG9mIHJlZ2lzdGVycwotICogQGRldjogZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBjaGlsZCBvZiBhY3R1YWwgZGV2aWNlIChpaW9fZGV2IG9yIGlpb190cmlnKQorICogQGluZGlvX2RldjogaWlvIGRldmljZSBhc3NvY2lhdGVkIGFjdHVhbCBkZXZpY2UKICAqIEByZWdfYWRkcmVzczogdGhlIGFkZHJlc3Mgb2YgdGhlIGxvd2VyIG9mIHRoZSB0d28gcmVnaXN0ZXJzLiBTZWNvbmQgcmVnaXN0ZXIKICAqICAgICAgICAgICAgICAgaXMgYXNzdW1lZCB0byBoYXZlIGFkZHJlc3Mgb25lIGdyZWF0ZXIuCiAgKiBAdmFsOiB2YWx1ZSB0byBiZSB3cml0dGVuCiAgKiovCi1zdGF0aWMgaW50IGFkaXMxNjIwOV9zcGlfd3JpdGVfcmVnXzE2KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJdTggbG93ZXJfcmVnX2FkZHJlc3MsCi0JCXUxNiB2YWx1ZSkKK3N0YXRpYyBpbnQgYWRpczE2MjA5X3NwaV93cml0ZV9yZWdfMTYoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKKwkJCQkgICAgICB1OCBsb3dlcl9yZWdfYWRkcmVzcywKKwkJCQkgICAgICB1MTYgdmFsdWUpCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbXNnOwotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgYWRpczE2MjA5X3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKIAlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHhmZXJzW10gPSB7CiAJCXsKQEAgLTgyLDcgKzc0LDYgQEAKIAkJCS50eF9idWYgPSBzdC0+dHggKyAyLAogCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAogCQkJLmxlbiA9IDIsCi0JCQkuY3NfY2hhbmdlID0gMSwKIAkJCS5kZWxheV91c2VjcyA9IDMwLAogCQl9LAogCX07CkBAIC0xMDQsMTcgKzk1LDE2IEBACiAKIC8qKgogICogYWRpczE2MjA5X3NwaV9yZWFkX3JlZ18xNigpIC0gcmVhZCAyIGJ5dGVzIGZyb20gYSAxNi1iaXQgcmVnaXN0ZXIKLSAqIEBkZXY6IGRldmljZSBhc3NvY2lhdGVkIHdpdGggY2hpbGQgb2YgYWN0dWFsIGRldmljZSAoaWlvX2RldiBvciBpaW9fdHJpZykKKyAqIEBpbmRpb19kZXY6IGlpbyBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIGRldmljZQogICogQHJlZ19hZGRyZXNzOiB0aGUgYWRkcmVzcyBvZiB0aGUgbG93ZXIgb2YgdGhlIHR3byByZWdpc3RlcnMuIFNlY29uZCByZWdpc3RlcgogICogICAgICAgICAgICAgICBpcyBhc3N1bWVkIHRvIGhhdmUgYWRkcmVzcyBvbmUgZ3JlYXRlci4KICAqIEB2YWw6IHNvbWV3aGVyZSB0byBwYXNzIGJhY2sgdGhlIHZhbHVlIHJlYWQKICAqKi8KLXN0YXRpYyBpbnQgYWRpczE2MjA5X3NwaV9yZWFkX3JlZ18xNihzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXU4IGxvd2VyX3JlZ19hZGRyZXNzLAotCQl1MTYgKnZhbCkKK3N0YXRpYyBpbnQgYWRpczE2MjA5X3NwaV9yZWFkX3JlZ18xNihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAorCQkJCSAgICAgdTggbG93ZXJfcmVnX2FkZHJlc3MsCisJCQkJICAgICB1MTYgKnZhbCkKIHsKIAlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbXNnOwotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgYWRpczE2MjA5X3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKIAlpbnQgcmV0OwogCXN0cnVjdCBzcGlfdHJhbnNmZXIgeGZlcnNbXSA9IHsKQEAgLTEyOCw3ICsxMTgsNiBAQAogCQkJLnJ4X2J1ZiA9IHN0LT5yeCwKIAkJCS5iaXRzX3Blcl93b3JkID0gOCwKIAkJCS5sZW4gPSAyLAotCQkJLmNzX2NoYW5nZSA9IDEsCiAJCQkuZGVsYXlfdXNlY3MgPSAzMCwKIAkJfSwKIAl9OwpAQCAtMTU0LDExOSArMTQzLDE0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHNzaXplX3QgYWRpczE2MjA5X3JlYWRfMTJiaXRfdW5zaWduZWQoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY2hhciAqYnVmKQorc3RhdGljIGludCBhZGlzMTYyMDlfcmVzZXQoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKIAlpbnQgcmV0OwotCXUxNiB2YWwgPSAwOwotCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKLQotCXJldCA9IGFkaXMxNjIwOV9zcGlfcmVhZF9yZWdfMTYoZGV2LCB0aGlzX2F0dHItPmFkZHJlc3MsICZ2YWwpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAodmFsICYgQURJUzE2MjA5X0VSUk9SX0FDVElWRSkKLQkJYWRpczE2MjA5X2NoZWNrX3N0YXR1cyhkZXYpOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHZhbCAmIDB4MEZGRik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGFkaXMxNjIwOV9yZWFkXzE0Yml0X3Vuc2lnbmVkKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNoYXIgKmJ1ZikKLXsKLQlpbnQgcmV0OwotCXUxNiB2YWwgPSAwOwotCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKLQotCXJldCA9IGFkaXMxNjIwOV9zcGlfcmVhZF9yZWdfMTYoZGV2LCB0aGlzX2F0dHItPmFkZHJlc3MsICZ2YWwpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAodmFsICYgQURJUzE2MjA5X0VSUk9SX0FDVElWRSkKLQkJYWRpczE2MjA5X2NoZWNrX3N0YXR1cyhkZXYpOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHZhbCAmIDB4M0ZGRik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGFkaXMxNjIwOV9yZWFkX3RlbXAoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY2hhciAqYnVmKQotewotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzc2l6ZV90IHJldDsKLQl1MTYgdmFsOwotCi0JLyogVGFrZSB0aGUgaWlvX2RldiBzdGF0dXMgbG9jayAqLwotCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOwotCi0JcmV0ID0gYWRpczE2MjA5X3NwaV9yZWFkX3JlZ18xNihkZXYsIEFESVMxNjIwOV9URU1QX09VVCwgKHUxNiAqKSZ2YWwpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyb3JfcmV0OwotCi0JaWYgKHZhbCAmIEFESVMxNjIwOV9FUlJPUl9BQ1RJVkUpCi0JCWFkaXMxNjIwOV9jaGVja19zdGF0dXMoZGV2KTsKLQotCXZhbCAmPSAweEZGRjsKLQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB2YWwpOwotCi1lcnJvcl9yZXQ6Ci0JbXV0ZXhfdW5sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3NpemVfdCBhZGlzMTYyMDlfcmVhZF8xNGJpdF9zaWduZWQoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY2hhciAqYnVmKQotewotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7Ci0JczE2IHZhbCA9IDA7Ci0Jc3NpemVfdCByZXQ7Ci0KLQltdXRleF9sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKLQotCXJldCA9IGFkaXMxNjIwOV9zcGlfcmVhZF9yZWdfMTYoZGV2LCB0aGlzX2F0dHItPmFkZHJlc3MsICh1MTYgKikmdmFsKTsKLQlpZiAoIXJldCkgewotCQlpZiAodmFsICYgQURJUzE2MjA5X0VSUk9SX0FDVElWRSkKLQkJCWFkaXMxNjIwOV9jaGVja19zdGF0dXMoZGV2KTsKLQotCQl2YWwgPSAoKHMxNikodmFsIDw8IDIpID4+IDIpOwotCQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB2YWwpOwotCX0KLQotCW11dGV4X3VubG9jaygmaW5kaW9fZGV2LT5tbG9jayk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3NpemVfdCBhZGlzMTYyMDlfd3JpdGVfMTZiaXQoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY29uc3QgY2hhciAqYnVmLAotCQlzaXplX3QgbGVuKQotewotCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKLQlpbnQgcmV0OwotCWxvbmcgdmFsOwotCi0JcmV0ID0gc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdmFsKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycm9yX3JldDsKLQlyZXQgPSBhZGlzMTYyMDlfc3BpX3dyaXRlX3JlZ18xNihkZXYsIHRoaXNfYXR0ci0+YWRkcmVzcywgdmFsKTsKLQotZXJyb3JfcmV0OgotCXJldHVybiByZXQgPyByZXQgOiBsZW47Ci19Ci0KLXN0YXRpYyBpbnQgYWRpczE2MjA5X3Jlc2V0KHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgcmV0OwotCXJldCA9IGFkaXMxNjIwOV9zcGlfd3JpdGVfcmVnXzgoZGV2LAorCXJldCA9IGFkaXMxNjIwOV9zcGlfd3JpdGVfcmVnXzgoaW5kaW9fZGV2LAogCQkJQURJUzE2MjA5X0dMT0JfQ01ELAogCQkJQURJUzE2MjA5X0dMT0JfQ01EX1NXX1JFU0VUKTsKIAlpZiAocmV0KQotCQlkZXZfZXJyKGRldiwgInByb2JsZW0gcmVzZXR0aW5nIGRldmljZSIpOworCQlkZXZfZXJyKCZpbmRpb19kZXYtPmRldiwgInByb2JsZW0gcmVzZXR0aW5nIGRldmljZSIpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTI3NSwyMyArMTU5LDI1IEBACiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiB7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCiAJaWYgKGxlbiA8IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCXN3aXRjaCAoYnVmWzBdKSB7CiAJY2FzZSAnMSc6CiAJY2FzZSAneSc6CiAJY2FzZSAnWSc6Ci0JCXJldHVybiBhZGlzMTYyMDlfcmVzZXQoZGV2KTsKKwkJcmV0dXJuIGFkaXMxNjIwOV9yZXNldChpbmRpb19kZXYpOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotaW50IGFkaXMxNjIwOV9zZXRfaXJxKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBlbmFibGUpCitpbnQgYWRpczE2MjA5X3NldF9pcnEoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwgYm9vbCBlbmFibGUpCiB7CiAJaW50IHJldCA9IDA7CiAJdTE2IG1zYzsKIAotCXJldCA9IGFkaXMxNjIwOV9zcGlfcmVhZF9yZWdfMTYoZGV2LCBBRElTMTYyMDlfTVNDX0NUUkwsICZtc2MpOworCXJldCA9IGFkaXMxNjIwOV9zcGlfcmVhZF9yZWdfMTYoaW5kaW9fZGV2LCBBRElTMTYyMDlfTVNDX0NUUkwsICZtc2MpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfcmV0OwogCkBAIC0zMDIsMTYwICsxODgsMjY3IEBACiAJZWxzZQogCQltc2MgJj0gfkFESVMxNjIwOV9NU0NfQ1RSTF9EQVRBX1JEWV9FTjsKIAotCXJldCA9IGFkaXMxNjIwOV9zcGlfd3JpdGVfcmVnXzE2KGRldiwgQURJUzE2MjA5X01TQ19DVFJMLCBtc2MpOworCXJldCA9IGFkaXMxNjIwOV9zcGlfd3JpdGVfcmVnXzE2KGluZGlvX2RldiwgQURJUzE2MjA5X01TQ19DVFJMLCBtc2MpOwogCiBlcnJvcl9yZXQ6CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBhZGlzMTYyMDlfY2hlY2tfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgYWRpczE2MjA5X2NoZWNrX3N0YXR1cyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQogewogCXUxNiBzdGF0dXM7CiAJaW50IHJldDsKIAotCXJldCA9IGFkaXMxNjIwOV9zcGlfcmVhZF9yZWdfMTYoZGV2LCBBRElTMTYyMDlfRElBR19TVEFULCAmc3RhdHVzKTsKKwlyZXQgPSBhZGlzMTYyMDlfc3BpX3JlYWRfcmVnXzE2KGluZGlvX2RldiwKKwkJCQkJQURJUzE2MjA5X0RJQUdfU1RBVCwgJnN0YXR1cyk7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycihkZXYsICJSZWFkaW5nIHN0YXR1cyBmYWlsZWRcbiIpOworCQlkZXZfZXJyKCZpbmRpb19kZXYtPmRldiwgIlJlYWRpbmcgc3RhdHVzIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyb3JfcmV0OwogCX0KIAlyZXQgPSBzdGF0dXMgJiAweDFGOwogCiAJaWYgKHN0YXR1cyAmIEFESVMxNjIwOV9ESUFHX1NUQVRfU0VMRlRFU1RfRkFJTCkKLQkJZGV2X2VycihkZXYsICJTZWxmIHRlc3QgZmFpbHVyZVxuIik7CisJCWRldl9lcnIoJmluZGlvX2Rldi0+ZGV2LCAiU2VsZiB0ZXN0IGZhaWx1cmVcbiIpOwogCWlmIChzdGF0dXMgJiBBRElTMTYyMDlfRElBR19TVEFUX1NQSV9GQUlMKQotCQlkZXZfZXJyKGRldiwgIlNQSSBmYWlsdXJlXG4iKTsKKwkJZGV2X2VycigmaW5kaW9fZGV2LT5kZXYsICJTUEkgZmFpbHVyZVxuIik7CiAJaWYgKHN0YXR1cyAmIEFESVMxNjIwOV9ESUFHX1NUQVRfRkxBU0hfVVBUKQotCQlkZXZfZXJyKGRldiwgIkZsYXNoIHVwZGF0ZSBmYWlsZWRcbiIpOworCQlkZXZfZXJyKCZpbmRpb19kZXYtPmRldiwgIkZsYXNoIHVwZGF0ZSBmYWlsZWRcbiIpOwogCWlmIChzdGF0dXMgJiBBRElTMTYyMDlfRElBR19TVEFUX1BPV0VSX0hJR0gpCi0JCWRldl9lcnIoZGV2LCAiUG93ZXIgc3VwcGx5IGFib3ZlIDMuNjI1VlxuIik7CisJCWRldl9lcnIoJmluZGlvX2Rldi0+ZGV2LCAiUG93ZXIgc3VwcGx5IGFib3ZlIDMuNjI1VlxuIik7CiAJaWYgKHN0YXR1cyAmIEFESVMxNjIwOV9ESUFHX1NUQVRfUE9XRVJfTE9XKQotCQlkZXZfZXJyKGRldiwgIlBvd2VyIHN1cHBseSBiZWxvdyAzLjE1VlxuIik7CisJCWRldl9lcnIoJmluZGlvX2Rldi0+ZGV2LCAiUG93ZXIgc3VwcGx5IGJlbG93IDMuMTVWXG4iKTsKIAogZXJyb3JfcmV0OgogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgYWRpczE2MjA5X3NlbGZfdGVzdChzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGFkaXMxNjIwOV9zZWxmX3Rlc3Qoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKIAlpbnQgcmV0OwotCXJldCA9IGFkaXMxNjIwOV9zcGlfd3JpdGVfcmVnXzE2KGRldiwKKwlyZXQgPSBhZGlzMTYyMDlfc3BpX3dyaXRlX3JlZ18xNihpbmRpb19kZXYsCiAJCQlBRElTMTYyMDlfTVNDX0NUUkwsCiAJCQlBRElTMTYyMDlfTVNDX0NUUkxfU0VMRl9URVNUX0VOKTsKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoZGV2LCAicHJvYmxlbSBzdGFydGluZyBzZWxmIHRlc3QiKTsKKwkJZGV2X2VycigmaW5kaW9fZGV2LT5kZXYsICJwcm9ibGVtIHN0YXJ0aW5nIHNlbGYgdGVzdCIpOwogCQlnb3RvIGVycl9yZXQ7CiAJfQogCi0JYWRpczE2MjA5X2NoZWNrX3N0YXR1cyhkZXYpOworCWFkaXMxNjIwOV9jaGVja19zdGF0dXMoaW5kaW9fZGV2KTsKIAogZXJyX3JldDoKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGFkaXMxNjIwOV9pbml0aWFsX3NldHVwKHN0cnVjdCBhZGlzMTYyMDlfc3RhdGUgKnN0KQorc3RhdGljIGludCBhZGlzMTYyMDlfaW5pdGlhbF9zZXR1cChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQogewogCWludCByZXQ7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJnN0LT5pbmRpb19kZXYtPmRldjsKIAogCS8qIERpc2FibGUgSVJRICovCi0JcmV0ID0gYWRpczE2MjA5X3NldF9pcnEoZGV2LCBmYWxzZSk7CisJcmV0ID0gYWRpczE2MjA5X3NldF9pcnEoaW5kaW9fZGV2LCBmYWxzZSk7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKGRldiwgImRpc2FibGUgaXJxIGZhaWxlZCIpOworCQlkZXZfZXJyKCZpbmRpb19kZXYtPmRldiwgImRpc2FibGUgaXJxIGZhaWxlZCIpOwogCQlnb3RvIGVycl9yZXQ7CiAJfQogCiAJLyogRG8gc2VsZiB0ZXN0ICovCi0JcmV0ID0gYWRpczE2MjA5X3NlbGZfdGVzdChkZXYpOworCXJldCA9IGFkaXMxNjIwOV9zZWxmX3Rlc3QoaW5kaW9fZGV2KTsKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoZGV2LCAic2VsZiB0ZXN0IGZhaWx1cmUiKTsKKwkJZGV2X2VycigmaW5kaW9fZGV2LT5kZXYsICJzZWxmIHRlc3QgZmFpbHVyZSIpOwogCQlnb3RvIGVycl9yZXQ7CiAJfQogCiAJLyogUmVhZCBzdGF0dXMgcmVnaXN0ZXIgdG8gY2hlY2sgdGhlIHJlc3VsdCAqLwotCXJldCA9IGFkaXMxNjIwOV9jaGVja19zdGF0dXMoZGV2KTsKKwlyZXQgPSBhZGlzMTYyMDlfY2hlY2tfc3RhdHVzKGluZGlvX2Rldik7CiAJaWYgKHJldCkgewotCQlhZGlzMTYyMDlfcmVzZXQoZGV2KTsKLQkJZGV2X2VycihkZXYsICJkZXZpY2Ugbm90IHBsYXlpbmcgYmFsbCAtPiByZXNldCIpOworCQlhZGlzMTYyMDlfcmVzZXQoaW5kaW9fZGV2KTsKKwkJZGV2X2VycigmaW5kaW9fZGV2LT5kZXYsICJkZXZpY2Ugbm90IHBsYXlpbmcgYmFsbCAtPiByZXNldCIpOwogCQltc2xlZXAoQURJUzE2MjA5X1NUQVJUVVBfREVMQVkpOwotCQlyZXQgPSBhZGlzMTYyMDlfY2hlY2tfc3RhdHVzKGRldik7CisJCXJldCA9IGFkaXMxNjIwOV9jaGVja19zdGF0dXMoaW5kaW9fZGV2KTsKIAkJaWYgKHJldCkgewotCQkJZGV2X2VycihkZXYsICJnaXZpbmcgdXAiKTsKKwkJCWRldl9lcnIoJmluZGlvX2Rldi0+ZGV2LCAiZ2l2aW5nIHVwIik7CiAJCQlnb3RvIGVycl9yZXQ7CiAJCX0KIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICI6IGF0IENTJWQgKGlycSAlZClcbiIsCi0JCQlzdC0+dXMtPmNoaXBfc2VsZWN0LCBzdC0+dXMtPmlycSk7Ci0KIGVycl9yZXQ6CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIElJT19ERVZfQVRUUl9JTl9OQU1FRF9SQVcoMCwgc3VwcGx5LCBhZGlzMTYyMDlfcmVhZF8xNGJpdF91bnNpZ25lZCwKLQkJQURJUzE2MjA5X1NVUFBMWV9PVVQpOwotc3RhdGljIElJT19DT05TVF9BVFRSX0lOX05BTUVEX1NDQUxFKDAsIHN1cHBseSwgIjAuMzA1MTgiKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDEsIGFkaXMxNjIwOV9yZWFkXzEyYml0X3Vuc2lnbmVkLAotCQlBRElTMTYyMDlfQVVYX0FEQyk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFIoaW4xX3NjYWxlLCAiMC42MTA1Iik7CitlbnVtIGFkaXMxNjIwOV9jaGFuIHsKKwlpbl9zdXBwbHksCisJdGVtcCwKKwlhY2NlbF94LAorCWFjY2VsX3ksCisJaW5jbGlfeCwKKwlpbmNsaV95LAorCWluX2F1eCwKKwlyb3QsCit9OwogCi1zdGF0aWMgSUlPX0RFVl9BVFRSX0FDQ0VMX1goYWRpczE2MjA5X3JlYWRfMTRiaXRfc2lnbmVkLAotCQlBRElTMTYyMDlfWEFDQ0xfT1VUKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfQUNDRUxfWShhZGlzMTYyMDlfcmVhZF8xNGJpdF9zaWduZWQsCi0JCUFESVMxNjIwOV9ZQUNDTF9PVVQpOwotc3RhdGljIElJT19ERVZfQVRUUl9BQ0NFTF9YX0NBTElCQklBUyhTX0lXVVNSIHwgU19JUlVHTywKLQkJYWRpczE2MjA5X3JlYWRfMTRiaXRfc2lnbmVkLAotCQlhZGlzMTYyMDlfd3JpdGVfMTZiaXQsCi0JCUFESVMxNjIwOV9YQUNDTF9OVUxMKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfQUNDRUxfWV9DQUxJQkJJQVMoU19JV1VTUiB8IFNfSVJVR08sCi0JCWFkaXMxNjIwOV9yZWFkXzE0Yml0X3NpZ25lZCwKLQkJYWRpczE2MjA5X3dyaXRlXzE2Yml0LAotCQlBRElTMTYyMDlfWUFDQ0xfTlVMTCk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfQUNDRUxfU0NBTEUoIjAuMDAyMzk0MTk1NTMxIik7CitzdGF0aWMgY29uc3QgdTggYWRpczE2MjA5X2FkZHJlc3Nlc1s4XVsyXSA9IHsKKwlbaW5fc3VwcGx5XSA9IHsgQURJUzE2MjA5X1NVUFBMWV9PVVQgfSwKKwlbaW5fYXV4XSA9IHsgQURJUzE2MjA5X0FVWF9BREMgfSwKKwlbYWNjZWxfeF0gPSB7IEFESVMxNjIwOV9YQUNDTF9PVVQsIEFESVMxNjIwOV9YQUNDTF9OVUxMIH0sCisJW2FjY2VsX3ldID0geyBBRElTMTYyMDlfWUFDQ0xfT1VULCBBRElTMTYyMDlfWUFDQ0xfTlVMTCB9LAorCVtpbmNsaV94XSA9IHsgQURJUzE2MjA5X1hJTkNMX09VVCwgQURJUzE2MjA5X1hJTkNMX05VTEwgfSwKKwlbaW5jbGlfeV0gPSB7IEFESVMxNjIwOV9ZSU5DTF9PVVQsIEFESVMxNjIwOV9ZSU5DTF9OVUxMIH0sCisJW3JvdF0gPSB7IEFESVMxNjIwOV9ST1RfT1VUIH0sCisJW3RlbXBdID0geyBBRElTMTYyMDlfVEVNUF9PVVQgfSwKK307CiAKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5DTElfWChhZGlzMTYyMDlfcmVhZF8xNGJpdF9zaWduZWQsCi0JCUFESVMxNjIwOV9YSU5DTF9PVVQpOwotc3RhdGljIElJT19ERVZfQVRUUl9JTkNMSV9ZKGFkaXMxNjIwOV9yZWFkXzE0Yml0X3NpZ25lZCwKLQkJQURJUzE2MjA5X1lJTkNMX09VVCk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFIoaW5jbGlfc2NhbGUsICIwLjAwMDQzNjMzMjMxIik7CitzdGF0aWMgaW50IGFkaXMxNjIwOV93cml0ZV9yYXcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKKwkJCSAgICAgICBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbiwKKwkJCSAgICAgICBpbnQgdmFsLAorCQkJICAgICAgIGludCB2YWwyLAorCQkJICAgICAgIGxvbmcgbWFzaykKK3sKKwlpbnQgYml0czsKKwlzMTYgdmFsMTY7CisJdTggYWRkcjsKKwlzd2l0Y2ggKG1hc2spIHsKKwljYXNlICgxIDw8IElJT19DSEFOX0lORk9fQ0FMSUJCSUFTX1NFUEFSQVRFKToKKwkJc3dpdGNoIChjaGFuLT50eXBlKSB7CisJCWNhc2UgSUlPX0FDQ0VMOgorCQljYXNlIElJT19JTkNMSToKKwkJCWJpdHMgPSAxNDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX07CisJCXZhbDE2ID0gdmFsICYgKCgxIDw8IGJpdHMpIC0gMSk7CisJCWFkZHIgPSBhZGlzMTYyMDlfYWRkcmVzc2VzW2NoYW4tPmFkZHJlc3NdWzFdOworCQlyZXR1cm4gYWRpczE2MjA5X3NwaV93cml0ZV9yZWdfMTYoaW5kaW9fZGV2LCBhZGRyLCB2YWwxNik7CisJfQorCXJldHVybiAtRUlOVkFMOworfQogCi1zdGF0aWMgSUlPX0RFVklDRV9BVFRSKHJvdF9yYXcsIFNfSVJVR08sIGFkaXMxNjIwOV9yZWFkXzE0Yml0X3NpZ25lZCwKLQkJICAgICAgIE5VTEwsIEFESVMxNjIwOV9ST1RfT1VUKTsKK3N0YXRpYyBpbnQgYWRpczE2MjA5X3JlYWRfcmF3KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCisJCQkgICAgICBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbiwKKwkJCSAgICAgIGludCAqdmFsLCBpbnQgKnZhbDIsCisJCQkgICAgICBsb25nIG1hc2spCit7CisJaW50IHJldDsKKwlpbnQgYml0czsKKwl1OCBhZGRyOworCXMxNiB2YWwxNjsKIAotc3RhdGljIElJT19ERVZfQVRUUl9URU1QX1JBVyhhZGlzMTYyMDlfcmVhZF90ZW1wKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUl9URU1QX09GRlNFVCgiMjUiKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUl9URU1QX1NDQUxFKCItMC40NyIpOworCXN3aXRjaCAobWFzaykgeworCWNhc2UgMDoKKwkJbXV0ZXhfbG9jaygmaW5kaW9fZGV2LT5tbG9jayk7CisJCWFkZHIgPSBhZGlzMTYyMDlfYWRkcmVzc2VzW2NoYW4tPmFkZHJlc3NdWzBdOworCQlyZXQgPSBhZGlzMTYyMDlfc3BpX3JlYWRfcmVnXzE2KGluZGlvX2RldiwgYWRkciwgJnZhbDE2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJaWYgKHZhbDE2ICYgQURJUzE2MjA5X0VSUk9SX0FDVElWRSkgeworCQkJcmV0ID0gYWRpczE2MjA5X2NoZWNrX3N0YXR1cyhpbmRpb19kZXYpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJCXZhbDE2ID0gdmFsMTYgJiAoKDEgPDwgY2hhbi0+c2Nhbl90eXBlLnJlYWxiaXRzKSAtIDEpOworCQlpZiAoY2hhbi0+c2Nhbl90eXBlLnNpZ24gPT0gJ3MnKQorCQkJdmFsMTYgPSAoczE2KSh2YWwxNiA8PAorCQkJCSAgICAgICgxNiAtIGNoYW4tPnNjYW5fdHlwZS5yZWFsYml0cykpID4+CisJCQkJKDE2IC0gY2hhbi0+c2Nhbl90eXBlLnJlYWxiaXRzKTsKKwkJKnZhbCA9IHZhbDE2OworCQltdXRleF91bmxvY2soJmluZGlvX2Rldi0+bWxvY2spOworCQlyZXR1cm4gSUlPX1ZBTF9JTlQ7CisJY2FzZSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NFUEFSQVRFKToKKwljYXNlICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKToKKwkJc3dpdGNoIChjaGFuLT50eXBlKSB7CisJCWNhc2UgSUlPX0lOOgorCQkJKnZhbCA9IDA7CisJCQlpZiAoY2hhbi0+Y2hhbm5lbCA9PSAwKQorCQkJCSp2YWwyID0gMzA1MTgwOworCQkJZWxzZQorCQkJCSp2YWwyID0gNjEwNTAwOworCQkJcmV0dXJuIElJT19WQUxfSU5UX1BMVVNfTUlDUk87CisJCWNhc2UgSUlPX1RFTVA6CisJCQkqdmFsID0gMDsKKwkJCSp2YWwyID0gLTQ3MDAwMDsKKwkJCXJldHVybiBJSU9fVkFMX0lOVF9QTFVTX01JQ1JPOworCQljYXNlIElJT19BQ0NFTDoKKwkJCSp2YWwgPSAwOworCQkJKnZhbDIgPSAyMzk0OworCQkJcmV0dXJuIElJT19WQUxfSU5UX1BMVVNfTUlDUk87CisJCWNhc2UgSUlPX0lOQ0xJOgorCQkJKnZhbCA9IDA7CisJCQkqdmFsMiA9IDQzNjsKKwkJCXJldHVybiBJSU9fVkFMX0lOVF9QTFVTX01JQ1JPOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAoMSA8PCBJSU9fQ0hBTl9JTkZPX09GRlNFVF9TRVBBUkFURSk6CisJCSp2YWwgPSAyNTsKKwkJcmV0dXJuIElJT19WQUxfSU5UOworCWNhc2UgKDEgPDwgSUlPX0NIQU5fSU5GT19DQUxJQkJJQVNfU0VQQVJBVEUpOgorCQlzd2l0Y2ggKGNoYW4tPnR5cGUpIHsKKwkJY2FzZSBJSU9fQUNDRUw6CisJCQliaXRzID0gMTQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9OworCQltdXRleF9sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKKwkJYWRkciA9IGFkaXMxNjIwOV9hZGRyZXNzZXNbY2hhbi0+YWRkcmVzc11bMV07CisJCXJldCA9IGFkaXMxNjIwOV9zcGlfcmVhZF9yZWdfMTYoaW5kaW9fZGV2LCBhZGRyLCAmdmFsMTYpOworCQlpZiAocmV0KSB7CisJCQltdXRleF91bmxvY2soJmluZGlvX2Rldi0+bWxvY2spOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQl2YWwxNiAmPSAoMSA8PCBiaXRzKSAtIDE7CisJCXZhbDE2ID0gKHMxNikodmFsMTYgPDwgKDE2IC0gYml0cykpID4+ICgxNiAtIGJpdHMpOworCQkqdmFsID0gdmFsMTY7CisJCW11dGV4X3VubG9jaygmaW5kaW9fZGV2LT5tbG9jayk7CisJCXJldHVybiBJSU9fVkFMX0lOVDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBhZGlzMTYyMDlfY2hhbm5lbHNbXSA9IHsKKwlJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsIE5VTEwsIDAsIDAsCisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NFUEFSQVRFKSwKKwkJIGluX3N1cHBseSwgQURJUzE2MjA5X1NDQU5fU1VQUExZLAorCQkgSUlPX1NUKCd1JywgMTQsIDE2LCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX1RFTVAsIDAsIDEsIDAsIE5VTEwsIDAsIDAsCisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NFUEFSQVRFKSB8CisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX09GRlNFVF9TRVBBUkFURSksCisJCSB0ZW1wLCBBRElTMTYyMDlfU0NBTl9URU1QLAorCQkgSUlPX1NUKCd1JywgMTIsIDE2LCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX0FDQ0VMLCAxLCAwLCAwLCBOVUxMLCAwLCBJSU9fTU9EX1gsCisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCkgfAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19DQUxJQkJJQVNfU0VQQVJBVEUpLAorCQkgYWNjZWxfeCwgQURJUzE2MjA5X1NDQU5fQUNDX1gsCisJCSBJSU9fU1QoJ3MnLCAxNCwgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTihJSU9fQUNDRUwsIDEsIDAsIDAsIE5VTEwsIDAsIElJT19NT0RfWSwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSB8CisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX0NBTElCQklBU19TRVBBUkFURSksCisJCSBhY2NlbF95LCBBRElTMTYyMDlfU0NBTl9BQ0NfWSwKKwkJIElJT19TVCgncycsIDE0LCAxNiwgMCksIDApLAorCUlJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgTlVMTCwgMSwgMCwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0VQQVJBVEUpLAorCQkgaW5fYXV4LCBBRElTMTYyMDlfU0NBTl9BVVhfQURDLAorCQkgSUlPX1NUKCd1JywgMTIsIDE2LCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX0lOQ0xJLCAwLCAxLCAwLCBOVUxMLCAwLCBJSU9fTU9EX1gsCisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCSBpbmNsaV94LCBBRElTMTYyMDlfU0NBTl9JTkNMSV9YLAorCQkgSUlPX1NUKCdzJywgMTQsIDE2LCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX0lOQ0xJLCAwLCAxLCAwLCBOVUxMLCAwLCBJSU9fTU9EX1ksCisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCSBpbmNsaV95LCBBRElTMTYyMDlfU0NBTl9JTkNMSV9ZLAorCQkgSUlPX1NUKCdzJywgMTQsIDE2LCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX1JPVCwgMCwgMSwgMCwgTlVMTCwgMCwgSUlPX01PRF9YLAorCQkgICAgMCwKKwkJICAgIHJvdCwgQURJUzE2MjA5X1NDQU5fUk9ULAorCQkgICAgSUlPX1NUKCdzJywgMTQsIDE2LCAwKSwgMCksCisJSUlPX0NIQU5fU09GVF9USU1FU1RBTVAoOCkKK307CiAKIHN0YXRpYyBJSU9fREVWSUNFX0FUVFIocmVzZXQsIFNfSVdVU1IsIE5VTEwsIGFkaXMxNjIwOV93cml0ZV9yZXNldCwgMCk7CiAKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUl9OQU1FKCJhZGlzMTYyMDkiKTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkaXMxNjIwOV9ldmVudF9hdHRyaWJ1dGVzW10gPSB7Ci0JTlVMTAotfTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYWRpczE2MjA5X2V2ZW50X2F0dHJpYnV0ZV9ncm91cCA9IHsKLQkuYXR0cnMgPSBhZGlzMTYyMDlfZXZlbnRfYXR0cmlidXRlcywKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZGlzMTYyMDlfYXR0cmlidXRlc1tdID0gewotCSZpaW9fZGV2X2F0dHJfaW4wX3N1cHBseV9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4wX3N1cHBseV9zY2FsZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfdGVtcF9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfdGVtcF9vZmZzZXQuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfdGVtcF9zY2FsZS5kZXZfYXR0ci5hdHRyLAogCSZpaW9fZGV2X2F0dHJfcmVzZXQuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfbmFtZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW4xX3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjFfc2NhbGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2FjY2VsX3hfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9hY2NlbF95X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfYWNjZWxfeF9jYWxpYmJpYXMuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2FjY2VsX3lfY2FsaWJiaWFzLmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2FjY2VsX3NjYWxlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbmNsaV94X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW5jbGlfeV9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW5jbGlfc2NhbGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX3JvdF9yYXcuZGV2X2F0dHIuYXR0ciwKIAlOVUxMCiB9OwogCkBAIC00NjMsNiArNDU2LDEzIEBACiAJLmF0dHJzID0gYWRpczE2MjA5X2F0dHJpYnV0ZXMsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIGFkaXMxNjIwOV9pbmZvID0geworCS5hdHRycyA9ICZhZGlzMTYyMDlfYXR0cmlidXRlX2dyb3VwLAorCS5yZWFkX3JhdyA9ICZhZGlzMTYyMDlfcmVhZF9yYXcsCisJLndyaXRlX3JhdyA9ICZhZGlzMTYyMDlfd3JpdGVfcmF3LAorCS5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEUsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhZGlzMTYyMDlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlpbnQgcmV0LCByZWdkb25lID0gMDsKQEAgLTQ4OCwxOCArNDg4LDE4IEBACiAJc3QtPnVzID0gc3BpOwogCW11dGV4X2luaXQoJnN0LT5idWZfbG9jayk7CiAJLyogc2V0dXAgdGhlIGluZHVzdHJpYWxpbyBkcml2ZXIgYWxsb2NhdGVkIGVsZW1lbnRzICovCi0Jc3QtPmluZGlvX2RldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2UoKTsKKwlzdC0+aW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgwKTsKIAlpZiAoc3QtPmluZGlvX2RldiA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3JfZnJlZV90eDsKIAl9CiAKKwlzdC0+aW5kaW9fZGV2LT5uYW1lID0gc3BpLT5kZXYuZHJpdmVyLT5uYW1lOwogCXN0LT5pbmRpb19kZXYtPmRldi5wYXJlbnQgPSAmc3BpLT5kZXY7Ci0Jc3QtPmluZGlvX2Rldi0+bnVtX2ludGVycnVwdF9saW5lcyA9IDE7Ci0Jc3QtPmluZGlvX2Rldi0+ZXZlbnRfYXR0cnMgPSAmYWRpczE2MjA5X2V2ZW50X2F0dHJpYnV0ZV9ncm91cDsKLQlzdC0+aW5kaW9fZGV2LT5hdHRycyA9ICZhZGlzMTYyMDlfYXR0cmlidXRlX2dyb3VwOworCXN0LT5pbmRpb19kZXYtPmluZm8gPSAmYWRpczE2MjA5X2luZm87CisJc3QtPmluZGlvX2Rldi0+Y2hhbm5lbHMgPSBhZGlzMTYyMDlfY2hhbm5lbHM7CisJc3QtPmluZGlvX2Rldi0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShhZGlzMTYyMDlfY2hhbm5lbHMpOwogCXN0LT5pbmRpb19kZXYtPmRldl9kYXRhID0gKHZvaWQgKikoc3QpOwotCXN0LT5pbmRpb19kZXYtPmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRTsKIAlzdC0+aW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOwogCiAJcmV0ID0gYWRpczE2MjA5X2NvbmZpZ3VyZV9yaW5nKHN0LT5pbmRpb19kZXYpOwpAQCAtNTExLDM3ICs1MTEsMjggQEAKIAkJZ290byBlcnJvcl91bnJlZ19yaW5nX2Z1bmNzOwogCXJlZ2RvbmUgPSAxOwogCi0JcmV0ID0gaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyKHN0LT5pbmRpb19kZXYtPnJpbmcsIDApOworCXJldCA9IGlpb19yaW5nX2J1ZmZlcl9yZWdpc3Rlcl9leChzdC0+aW5kaW9fZGV2LT5yaW5nLCAwLAorCQkJCQkgIGFkaXMxNjIwOV9jaGFubmVscywKKwkJCQkJICBBUlJBWV9TSVpFKGFkaXMxNjIwOV9jaGFubmVscykpOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcmluZ1xuIik7CiAJCWdvdG8gZXJyb3JfdW5yZWdfcmluZ19mdW5jczsKIAl9CiAKIAlpZiAoc3BpLT5pcnEpIHsKLQkJcmV0ID0gaWlvX3JlZ2lzdGVyX2ludGVycnVwdF9saW5lKHNwaS0+aXJxLAotCQkJCXN0LT5pbmRpb19kZXYsCi0JCQkJMCwKLQkJCQlJUlFGX1RSSUdHRVJfUklTSU5HLAotCQkJCSJhZGlzMTYyMDkiKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gZXJyb3JfdW5pbml0aWFsaXplX3Jpbmc7Ci0KIAkJcmV0ID0gYWRpczE2MjA5X3Byb2JlX3RyaWdnZXIoc3QtPmluZGlvX2Rldik7CiAJCWlmIChyZXQpCi0JCQlnb3RvIGVycm9yX3VucmVnaXN0ZXJfbGluZTsKKwkJCWdvdG8gZXJyb3JfdW5pbml0aWFsaXplX3Jpbmc7CiAJfQogCiAJLyogR2V0IHRoZSBkZXZpY2UgaW50byBhIHNhbmUgaW5pdGlhbCBzdGF0ZSAqLwotCXJldCA9IGFkaXMxNjIwOV9pbml0aWFsX3NldHVwKHN0KTsKKwlyZXQgPSBhZGlzMTYyMDlfaW5pdGlhbF9zZXR1cChzdC0+aW5kaW9fZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycm9yX3JlbW92ZV90cmlnZ2VyOwogCXJldHVybiAwOwogCiBlcnJvcl9yZW1vdmVfdHJpZ2dlcjoKIAlhZGlzMTYyMDlfcmVtb3ZlX3RyaWdnZXIoc3QtPmluZGlvX2Rldik7Ci1lcnJvcl91bnJlZ2lzdGVyX2xpbmU6Ci0JaWYgKHNwaS0+aXJxKQotCQlpaW9fdW5yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShzdC0+aW5kaW9fZGV2LCAwKTsKIGVycm9yX3VuaW5pdGlhbGl6ZV9yaW5nOgogCWlpb19yaW5nX2J1ZmZlcl91bnJlZ2lzdGVyKHN0LT5pbmRpb19kZXYtPnJpbmcpOwogZXJyb3JfdW5yZWdfcmluZ19mdW5jczoKQEAgLTU2OSw5ICs1NjAsNiBAQAogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKIAlhZGlzMTYyMDlfcmVtb3ZlX3RyaWdnZXIoaW5kaW9fZGV2KTsKLQlpZiAoc3BpLT5pcnEpCi0JCWlpb191bnJlZ2lzdGVyX2ludGVycnVwdF9saW5lKGluZGlvX2RldiwgMCk7Ci0KIAlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihpbmRpb19kZXYtPnJpbmcpOwogCWlpb19kZXZpY2VfdW5yZWdpc3RlcihpbmRpb19kZXYpOwogCWFkaXMxNjIwOV91bmNvbmZpZ3VyZV9yaW5nKGluZGlvX2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwOV9yaW5nLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwOV9yaW5nLmMKaW5kZXggOGViYTBhZi4uMzkwOTA4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDlfcmluZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjA5X3JpbmcuYwpAQCAtMTcsNzEgKzE3LDYgQEAKICNpbmNsdWRlICIuLi90cmlnZ2VyLmgiCiAjaW5jbHVkZSAiYWRpczE2MjA5LmgiCiAKLXN0YXRpYyBJSU9fU0NBTl9FTF9DKGluX3N1cHBseSwgQURJUzE2MjA5X1NDQU5fU1VQUExZLAotCQkgICAgIEFESVMxNjIwOV9TVVBQTFlfT1VULCBOVUxMKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUl9TQ0FOX0VMX1RZUEUoaW5fc3VwcGx5LCB1LCAxNCwgMTYpCi1zdGF0aWMgSUlPX1NDQU5fRUxfQyhhY2NlbF94LCBBRElTMTYyMDlfU0NBTl9BQ0NfWCwgQURJUzE2MjA5X1hBQ0NMX09VVCwgTlVMTCk7Ci1zdGF0aWMgSUlPX1NDQU5fRUxfQyhhY2NlbF95LCBBRElTMTYyMDlfU0NBTl9BQ0NfWSwgQURJUzE2MjA5X1lBQ0NMX09VVCwgTlVMTCk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfU0NBTl9FTF9UWVBFKGFjY2VsLCBzLCAxNCwgMTYpOwotc3RhdGljIElJT19TQ0FOX0VMX0MoaW4wLCBBRElTMTYyMDlfU0NBTl9BVVhfQURDLCBBRElTMTYyMDlfQVVYX0FEQywgTlVMTCk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfU0NBTl9FTF9UWVBFKGluMCwgdSwgMTIsIDE2KTsKLXN0YXRpYyBJSU9fU0NBTl9FTF9DKHRlbXAsIEFESVMxNjIwOV9TQ0FOX1RFTVAsIEFESVMxNjIwOV9URU1QX09VVCwgTlVMTCk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfU0NBTl9FTF9UWVBFKHRlbXAsIHUsIDEyLCAxNik7Ci1zdGF0aWMgSUlPX1NDQU5fRUxfQyhpbmNsaV94LCBBRElTMTYyMDlfU0NBTl9JTkNMSV9YLAotCQkgICAgIEFESVMxNjIwOV9YSU5DTF9PVVQsIE5VTEwpOwotc3RhdGljIElJT19TQ0FOX0VMX0MoaW5jbGlfeSwgQURJUzE2MjA5X1NDQU5fSU5DTElfWSwKLQkJICAgICBBRElTMTYyMDlfWUlOQ0xfT1VULCBOVUxMKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUl9TQ0FOX0VMX1RZUEUoaW5jbGksIHMsIDE0LCAxNik7Ci1zdGF0aWMgSUlPX1NDQU5fRUxfQyhyb3QsIEFESVMxNjIwOV9TQ0FOX1JPVCwgQURJUzE2MjA5X1JPVF9PVVQsIE5VTEwpOwotc3RhdGljIElJT19DT05TVF9BVFRSX1NDQU5fRUxfVFlQRShyb3QsIHMsIDE0LCAxNik7Ci1zdGF0aWMgSUlPX1NDQU5fRUxfVElNRVNUQU1QKDgpOwotc3RhdGljIElJT19DT05TVF9BVFRSX1NDQU5fRUxfVFlQRSh0aW1lc3RhbXAsIHMsIDY0LCA2NCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZGlzMTYyMDlfc2Nhbl9lbF9hdHRyc1tdID0gewotCSZpaW9fc2Nhbl9lbF9pbl9zdXBwbHkuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW5fc3VwcGx5X2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luX3N1cHBseV90eXBlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2FjY2VsX3guZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfYWNjZWxfeF9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9hY2NlbF95LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2FjY2VsX3lfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfYWNjZWxfdHlwZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjAuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4wX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luMF90eXBlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX3RlbXAuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfdGVtcF9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl90ZW1wX3R5cGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfaW5jbGlfeC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbmNsaV94X2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luY2xpX3kuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW5jbGlfeV9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbmNsaV90eXBlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX3JvdC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9yb3RfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfcm90X3R5cGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfdGltZXN0YW1wLmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX3RpbWVzdGFtcF9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl90aW1lc3RhbXBfdHlwZS5kZXZfYXR0ci5hdHRyLAotCU5VTEwsCi19OwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZGlzMTYyMDlfc2Nhbl9lbF9ncm91cCA9IHsKLQkuYXR0cnMgPSBhZGlzMTYyMDlfc2Nhbl9lbF9hdHRycywKLQkubmFtZSA9ICJzY2FuX2VsZW1lbnRzIiwKLX07Ci0KLS8qKgotICogYWRpczE2MjA5X3BvbGxfZnVuY190aCgpIHRvcCBoYWxmIGludGVycnVwdCBoYW5kbGVyIGNhbGxlZCBieSB0cmlnZ2VyCi0gKiBAcHJpdmF0ZV9kYXRhOglpaW9fZGV2Ci0gKiovCi1zdGF0aWMgdm9pZCBhZGlzMTYyMDlfcG9sbF9mdW5jX3RoKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsIHM2NCB0aW1lKQotewotCXN0cnVjdCBhZGlzMTYyMDlfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOwotCXN0LT5sYXN0X3RpbWVzdGFtcCA9IHRpbWU7Ci0Jc2NoZWR1bGVfd29yaygmc3QtPndvcmtfdHJpZ2dlcl90b19yaW5nKTsKLX0KLQogLyoqCiAgKiBhZGlzMTYyMDlfcmVhZF9yaW5nX2RhdGEoKSByZWFkIGRhdGEgcmVnaXN0ZXJzIHdoaWNoIHdpbGwgYmUgcGxhY2VkIGludG8gcmluZwogICogQGRldjogZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBjaGlsZCBvZiBhY3R1YWwgZGV2aWNlIChpaW9fZGV2IG9yIGlpb190cmlnKQpAQCAtMTI3LDU1ICs2Miw1NiBAQAogLyogV2hpbHN0IHRoaXMgbWFrZXMgYSBsb3Qgb2YgY2FsbHMgdG8gaWlvX3N3X3JpbmcgZnVuY3Rpb25zIC0gaXQgaXMgdG8gZGV2aWNlCiAgKiBzcGVjaWZpYyB0byBiZSByb2xsZWQgaW50byB0aGUgY29yZS4KICAqLwotc3RhdGljIHZvaWQgYWRpczE2MjA5X3RyaWdnZXJfYmhfdG9fcmluZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmtfcykKK3N0YXRpYyBpcnFyZXR1cm5fdCBhZGlzMTYyMDlfdHJpZ2dlcl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKnApCiB7Ci0Jc3RydWN0IGFkaXMxNjIwOV9zdGF0ZSAqc3QKLQkJPSBjb250YWluZXJfb2Yod29ya19zLCBzdHJ1Y3QgYWRpczE2MjA5X3N0YXRlLAotCQkJICAgICAgIHdvcmtfdHJpZ2dlcl90b19yaW5nKTsKLQlzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nID0gc3QtPmluZGlvX2Rldi0+cmluZzsKKwlzdHJ1Y3QgaWlvX3BvbGxfZnVuYyAqcGYgPSBwOworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBwZi0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhZGlzMTYyMDlfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOworCXN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcgPSBpbmRpb19kZXYtPnJpbmc7CiAKIAlpbnQgaSA9IDA7CiAJczE2ICpkYXRhOwotCXNpemVfdCBkYXRhc2l6ZSA9IHJpbmctPmFjY2Vzcy5nZXRfYnl0ZXNfcGVyX2RhdHVtKHJpbmcpOworCXNpemVfdCBkYXRhc2l6ZSA9IHJpbmctPmFjY2Vzcy0+Z2V0X2J5dGVzX3Blcl9kYXR1bShyaW5nKTsKIAogCWRhdGEgPSBrbWFsbG9jKGRhdGFzaXplICwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRhdGEgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZzdC0+dXMtPmRldiwgIm1lbW9yeSBhbGxvYyBmYWlsZWQgaW4gcmluZyBiaCIpOwotCQlyZXR1cm47CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWlmIChyaW5nLT5zY2FuX2NvdW50KQotCQlpZiAoYWRpczE2MjA5X3JlYWRfcmluZ19kYXRhKCZzdC0+aW5kaW9fZGV2LT5kZXYsIHN0LT5yeCkgPj0gMCkKLQkJCWZvciAoOyBpIDwgcmluZy0+c2Nhbl9jb3VudDsgaSsrKQotCQkJCWRhdGFbaV0gPSBiZTE2X3RvX2NwdXAoCi0JCQkJCShfX2JlMTYgKikmKHN0LT5yeFtpKjJdKSk7CisJaWYgKHJpbmctPnNjYW5fY291bnQgJiYKKwkgICAgYWRpczE2MjA5X3JlYWRfcmluZ19kYXRhKCZzdC0+aW5kaW9fZGV2LT5kZXYsIHN0LT5yeCkgPj0gMCkKKwkJZm9yICg7IGkgPCByaW5nLT5zY2FuX2NvdW50OyBpKyspCisJCQlkYXRhW2ldID0gYmUxNl90b19jcHVwKChfX2JlMTYgKikmKHN0LT5yeFtpKjJdKSk7CiAKIAkvKiBHdWFyYW50ZWVkIHRvIGJlIGFsaWduZWQgd2l0aCA4IGJ5dGUgYm91bmRhcnkgKi8KIAlpZiAocmluZy0+c2Nhbl90aW1lc3RhbXApCi0JCSooKHM2NCAqKShkYXRhICsgKChpICsgMykvNCkqNCkpID0gc3QtPmxhc3RfdGltZXN0YW1wOworCQkqKChzNjQgKikoZGF0YSArICgoaSArIDMpLzQpKjQpKSA9IHBmLT50aW1lc3RhbXA7CiAKLQlyaW5nLT5hY2Nlc3Muc3RvcmVfdG8ocmluZywKLQkJCSAgICAgICh1OCAqKWRhdGEsCi0JCQkgICAgICBzdC0+bGFzdF90aW1lc3RhbXApOworCXJpbmctPmFjY2Vzcy0+c3RvcmVfdG8ocmluZywgKHU4ICopZGF0YSwgcGYtPnRpbWVzdGFtcCk7CiAKIAlpaW9fdHJpZ2dlcl9ub3RpZnlfZG9uZShzdC0+aW5kaW9fZGV2LT50cmlnKTsKIAlrZnJlZShkYXRhKTsKIAotCXJldHVybjsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKIHZvaWQgYWRpczE2MjA5X3VuY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKLQlrZnJlZShpbmRpb19kZXYtPnBvbGxmdW5jKTsKKwlpaW9fZGVhbGxvY19wb2xsZnVuYyhpbmRpb19kZXYtPnBvbGxmdW5jKTsKIAlpaW9fc3dfcmJfZnJlZShpbmRpb19kZXYtPnJpbmcpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19yaW5nX3NldHVwX29wcyBhZGlzMTYyMDlfcmluZ19zZXR1cF9vcHMgPSB7CisJLnByZWVuYWJsZSA9ICZpaW9fc3dfcmluZ19wcmVlbmFibGUsCisJLnBvc3RlbmFibGUgPSAmaWlvX3RyaWdnZXJlZF9yaW5nX3Bvc3RlbmFibGUsCisJLnByZWRpc2FibGUgPSAmaWlvX3RyaWdnZXJlZF9yaW5nX3ByZWRpc2FibGUsCit9OworCiBpbnQgYWRpczE2MjA5X2NvbmZpZ3VyZV9yaW5nKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCiB7CiAJaW50IHJldCA9IDA7Ci0Jc3RydWN0IGFkaXMxNjIwOV9zdGF0ZSAqc3QgPSBpbmRpb19kZXYtPmRldl9kYXRhOwogCXN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmc7Ci0JSU5JVF9XT1JLKCZzdC0+d29ya190cmlnZ2VyX3RvX3JpbmcsIGFkaXMxNjIwOV90cmlnZ2VyX2JoX3RvX3JpbmcpOwogCiAJcmluZyA9IGlpb19zd19yYl9hbGxvY2F0ZShpbmRpb19kZXYpOwogCWlmICghcmluZykgewpAQCAtMTg0LDI4ICsxMjAsMzMgQEAKIAl9CiAJaW5kaW9fZGV2LT5yaW5nID0gcmluZzsKIAkvKiBFZmZlY3RpdmVseSBzZWxlY3QgdGhlIHJpbmcgYnVmZmVyIGltcGxlbWVudGF0aW9uICovCi0JaWlvX3Jpbmdfc3dfcmVnaXN0ZXJfZnVuY3MoJnJpbmctPmFjY2Vzcyk7CisJcmluZy0+YWNjZXNzID0gJnJpbmdfc3dfYWNjZXNzX2Z1bmNzOwogCXJpbmctPmJwZSA9IDI7Ci0JcmluZy0+c2Nhbl9lbF9hdHRycyA9ICZhZGlzMTYyMDlfc2Nhbl9lbF9ncm91cDsKIAlyaW5nLT5zY2FuX3RpbWVzdGFtcCA9IHRydWU7Ci0JcmluZy0+cHJlZW5hYmxlID0gJmlpb19zd19yaW5nX3ByZWVuYWJsZTsKLQlyaW5nLT5wb3N0ZW5hYmxlID0gJmlpb190cmlnZ2VyZWRfcmluZ19wb3N0ZW5hYmxlOwotCXJpbmctPnByZWRpc2FibGUgPSAmaWlvX3RyaWdnZXJlZF9yaW5nX3ByZWRpc2FibGU7CisJcmluZy0+c2V0dXBfb3BzID0gJmFkaXMxNjIwOV9yaW5nX3NldHVwX29wczsKIAlyaW5nLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJLyogU2V0IGRlZmF1bHQgc2NhbiBtb2RlICovCi0JaWlvX3NjYW5fbWFza19zZXQocmluZywgaWlvX3NjYW5fZWxfaW5fc3VwcGx5Lm51bWJlcik7Ci0JaWlvX3NjYW5fbWFza19zZXQocmluZywgaWlvX3NjYW5fZWxfcm90Lm51bWJlcik7Ci0JaWlvX3NjYW5fbWFza19zZXQocmluZywgaWlvX3NjYW5fZWxfYWNjZWxfeC5udW1iZXIpOwotCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIGlpb19zY2FuX2VsX2FjY2VsX3kubnVtYmVyKTsKLQlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCBpaW9fc2Nhbl9lbF90ZW1wLm51bWJlcik7Ci0JaWlvX3NjYW5fbWFza19zZXQocmluZywgaWlvX3NjYW5fZWxfaW4wLm51bWJlcik7Ci0JaWlvX3NjYW5fbWFza19zZXQocmluZywgaWlvX3NjYW5fZWxfaW5jbGlfeC5udW1iZXIpOwotCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIGlpb19zY2FuX2VsX2luY2xpX3kubnVtYmVyKTsKKwlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCBBRElTMTYyMDlfU0NBTl9TVVBQTFkpOworCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIEFESVMxNjIwOV9TQ0FOX0FDQ19YKTsKKwlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCBBRElTMTYyMDlfU0NBTl9BQ0NfWSk7CisJaWlvX3NjYW5fbWFza19zZXQocmluZywgQURJUzE2MjA5X1NDQU5fQVVYX0FEQyk7CisJaWlvX3NjYW5fbWFza19zZXQocmluZywgQURJUzE2MjA5X1NDQU5fVEVNUCk7CisJaWlvX3NjYW5fbWFza19zZXQocmluZywgQURJUzE2MjA5X1NDQU5fSU5DTElfWCk7CisJaWlvX3NjYW5fbWFza19zZXQocmluZywgQURJUzE2MjA5X1NDQU5fSU5DTElfWSk7CisJaWlvX3NjYW5fbWFza19zZXQocmluZywgQURJUzE2MjA5X1NDQU5fUk9UKTsKIAotCXJldCA9IGlpb19hbGxvY19wb2xsZnVuYyhpbmRpb19kZXYsIE5VTEwsICZhZGlzMTYyMDlfcG9sbF9mdW5jX3RoKTsKLQlpZiAocmV0KQorCWluZGlvX2Rldi0+cG9sbGZ1bmMgPSBpaW9fYWxsb2NfcG9sbGZ1bmMoJmlpb19wb2xsZnVuY19zdG9yZV90aW1lLAorCQkJCQkJICZhZGlzMTYyMDlfdHJpZ2dlcl9oYW5kbGVyLAorCQkJCQkJIElSUUZfT05FU0hPVCwKKwkJCQkJCSBpbmRpb19kZXYsCisJCQkJCQkgIiVzX2NvbnN1bWVyJWQiLAorCQkJCQkJIGluZGlvX2Rldi0+bmFtZSwKKwkJCQkJCSBpbmRpb19kZXYtPmlkKTsKKwlpZiAoaW5kaW9fZGV2LT5wb2xsZnVuYyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3JfaWlvX3N3X3JiX2ZyZWU7CisJfQogCiAJaW5kaW9fZGV2LT5tb2RlcyB8PSBJTkRJT19SSU5HX1RSSUdHRVJFRDsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjA5X3RyaWdnZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjA5X3RyaWdnZXIuYwppbmRleCBkMjk4MGRjLi4yMTFlZTcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwOV90cmlnZ2VyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDlfdHJpZ2dlci5jCkBAIC0xNSwzMiArMTUsMTIgQEAKIC8qKgogICogYWRpczE2MjA5X2RhdGFfcmR5X3RyaWdfcG9sbCgpIHRoZSBldmVudCBoYW5kbGVyIGZvciB0aGUgZGF0YSByZHkgdHJpZwogICoqLwotc3RhdGljIGludCBhZGlzMTYyMDlfZGF0YV9yZHlfdHJpZ19wb2xsKHN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbywKLQkJCQkgICAgICAgaW50IGluZGV4LAotCQkJCSAgICAgICBzNjQgdGltZXN0YW1wLAotCQkJCSAgICAgICBpbnQgbm9fdGVzdCkKK3N0YXRpYyBpcnFyZXR1cm5fdCBhZGlzMTYyMDlfZGF0YV9yZHlfdHJpZ19wb2xsKGludCBpcnEsIHZvaWQgKnRyaWcpCiB7Ci0Jc3RydWN0IGFkaXMxNjIwOV9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGRldl9pbmZvKTsKLQlzdHJ1Y3QgaWlvX3RyaWdnZXIgKnRyaWcgPSBzdC0+dHJpZzsKLQotCWlpb190cmlnZ2VyX3BvbGwodHJpZywgdGltZXN0YW1wKTsKLQorCWlpb190cmlnZ2VyX3BvbGwodHJpZywgaWlvX2dldF90aW1lX25zKCkpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotSUlPX0VWRU5UX1NIKGRhdGFfcmR5X3RyaWcsICZhZGlzMTYyMDlfZGF0YV9yZHlfdHJpZ19wb2xsKTsKLQotc3RhdGljIElJT19UUklHR0VSX05BTUVfQVRUUjsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkaXMxNjIwOV90cmlnZ2VyX2F0dHJzW10gPSB7Ci0JJmRldl9hdHRyX25hbWUuYXR0ciwKLQlOVUxMLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYWRpczE2MjA5X3RyaWdnZXJfYXR0cl9ncm91cCA9IHsKLQkuYXR0cnMgPSBhZGlzMTYyMDlfdHJpZ2dlcl9hdHRycywKLX07Ci0KIC8qKgogICogYWRpczE2MjA5X2RhdGFfcmR5X3RyaWdnZXJfc2V0X3N0YXRlKCkgc2V0IGRhdGFyZHkgaW50ZXJydXB0IHN0YXRlCiAgKiovCkBAIC00OSwzMSArMjksOSBAQAogewogCXN0cnVjdCBhZGlzMTYyMDlfc3RhdGUgKnN0ID0gdHJpZy0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBzdC0+aW5kaW9fZGV2OwotCWludCByZXQgPSAwOwogCiAJZGV2X2RiZygmaW5kaW9fZGV2LT5kZXYsICIlcyAoJWQpXG4iLCBfX2Z1bmNfXywgc3RhdGUpOwotCXJldCA9IGFkaXMxNjIwOV9zZXRfaXJxKCZzdC0+aW5kaW9fZGV2LT5kZXYsIHN0YXRlKTsKLQlpZiAoc3RhdGUgPT0gZmFsc2UpIHsKLQkJaWlvX3JlbW92ZV9ldmVudF9mcm9tX2xpc3QoJmlpb19ldmVudF9kYXRhX3JkeV90cmlnLAotCQkJCQkgICAmaW5kaW9fZGV2LT5pbnRlcnJ1cHRzWzBdCi0JCQkJCSAgIC0+ZXZfbGlzdCk7Ci0JCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Ci0JfSBlbHNlIHsKLQkJaWlvX2FkZF9ldmVudF90b19saXN0KCZpaW9fZXZlbnRfZGF0YV9yZHlfdHJpZywKLQkJCQkgICAgICAmaW5kaW9fZGV2LT5pbnRlcnJ1cHRzWzBdLT5ldl9saXN0KTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBhZGlzMTYyMDlfdHJpZ190cnlfcmVlbigpIHRyeSByZW5hYmxpbmcgaXJxIGZvciBkYXRhIHJkeSB0cmlnZ2VyCi0gKiBAdHJpZzoJdGhlIGRhdGFyZHkgdHJpZ2dlcgotICoqLwotc3RhdGljIGludCBhZGlzMTYyMDlfdHJpZ190cnlfcmVlbihzdHJ1Y3QgaWlvX3RyaWdnZXIgKnRyaWcpCi17Ci0Jc3RydWN0IGFkaXMxNjIwOV9zdGF0ZSAqc3QgPSB0cmlnLT5wcml2YXRlX2RhdGE7Ci0JZW5hYmxlX2lycShzdC0+dXMtPmlycSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGFkaXMxNjIwOV9zZXRfaXJxKHN0LT5pbmRpb19kZXYsIHN0YXRlKTsKIH0KIAogaW50IGFkaXMxNjIwOV9wcm9iZV90cmlnZ2VyKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCkBAIC04MSwzNCArMzksMzcgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBhZGlzMTYyMDlfc3RhdGUgKnN0ID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKIAotCXN0LT50cmlnID0gaWlvX2FsbG9jYXRlX3RyaWdnZXIoKTsKLQlzdC0+dHJpZy0+bmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLAotCQkJCSAgICJhZGlzMTYyMDktZGV2JWQiLAotCQkJCSAgIGluZGlvX2Rldi0+aWQpOwotCWlmICghc3QtPnRyaWctPm5hbWUpIHsKKwlzdC0+dHJpZyA9IGlpb19hbGxvY2F0ZV90cmlnZ2VyKCJhZGlzMTYyMDktZGV2JWQiLCBpbmRpb19kZXYtPmlkKTsKKwlpZiAoc3QtPnRyaWcgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yX2ZyZWVfdHJpZzsKKwkJZ290byBlcnJvcl9yZXQ7CiAJfQorCisJcmV0ID0gcmVxdWVzdF9pcnEoc3QtPnVzLT5pcnEsCisJCQkgIGFkaXMxNjIwOV9kYXRhX3JkeV90cmlnX3BvbGwsCisJCQkgIElSUUZfVFJJR0dFUl9SSVNJTkcsCisJCQkgICJhZGlzMTYyMDkiLAorCQkJICBzdC0+dHJpZyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcl9mcmVlX3RyaWc7CiAJc3QtPnRyaWctPmRldi5wYXJlbnQgPSAmc3QtPnVzLT5kZXY7CiAJc3QtPnRyaWctPm93bmVyID0gVEhJU19NT0RVTEU7CiAJc3QtPnRyaWctPnByaXZhdGVfZGF0YSA9IHN0OwogCXN0LT50cmlnLT5zZXRfdHJpZ2dlcl9zdGF0ZSA9ICZhZGlzMTYyMDlfZGF0YV9yZHlfdHJpZ2dlcl9zZXRfc3RhdGU7Ci0Jc3QtPnRyaWctPnRyeV9yZWVuYWJsZSA9ICZhZGlzMTYyMDlfdHJpZ190cnlfcmVlbjsKLQlzdC0+dHJpZy0+Y29udHJvbF9hdHRycyA9ICZhZGlzMTYyMDlfdHJpZ2dlcl9hdHRyX2dyb3VwOwogCXJldCA9IGlpb190cmlnZ2VyX3JlZ2lzdGVyKHN0LT50cmlnKTsKIAogCS8qIHNlbGVjdCBkZWZhdWx0IHRyaWdnZXIgKi8KIAlpbmRpb19kZXYtPnRyaWcgPSBzdC0+dHJpZzsKIAlpZiAocmV0KQotCQlnb3RvIGVycm9yX2ZyZWVfdHJpZ19uYW1lOworCQlnb3RvIGVycm9yX2ZyZWVfaXJxOwogCiAJcmV0dXJuIDA7CiAKLWVycm9yX2ZyZWVfdHJpZ19uYW1lOgotCWtmcmVlKHN0LT50cmlnLT5uYW1lKTsKK2Vycm9yX2ZyZWVfaXJxOgorCWZyZWVfaXJxKHN0LT51cy0+aXJxLCBzdC0+dHJpZyk7CiBlcnJvcl9mcmVlX3RyaWc6CiAJaWlvX2ZyZWVfdHJpZ2dlcihzdC0+dHJpZyk7Ci0KK2Vycm9yX3JldDoKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMTcsNiArNzgsNiBAQAogCXN0cnVjdCBhZGlzMTYyMDlfc3RhdGUgKnN0YXRlID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKIAogCWlpb190cmlnZ2VyX3VucmVnaXN0ZXIoc3RhdGUtPnRyaWcpOwotCWtmcmVlKHN0YXRlLT50cmlnLT5uYW1lKTsKKwlmcmVlX2lycShzdGF0ZS0+dXMtPmlycSwgc3RhdGUtPnRyaWcpOwogCWlpb19mcmVlX3RyaWdnZXIoc3RhdGUtPnRyaWcpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMjBfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMjBfY29yZS5jCmluZGV4IDFjMWU5OGEuLjYwNWE3NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjIwX2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIyMF9jb3JlLmMKQEAgLTUyMSw4ICs1MjEsNiBAQAogCiBzdGF0aWMgSUlPX0NPTlNUX0FUVFJfU0FNUF9GUkVRX0FWQUlMKCIxMDAyMDAiKTsKIAotc3RhdGljIElJT19DT05TVF9BVFRSX05BTUUoImFkaXMxNjIyMCIpOwotCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWRpczE2MjIwX2F0dHJpYnV0ZXNbXSA9IHsKIAkmaWlvX2Rldl9hdHRyX2luMF9zdXBwbHlfcmF3LmRldl9hdHRyLmF0dHIsCiAJJmlpb19jb25zdF9hdHRyX2luMF9zdXBwbHlfc2NhbGUuZGV2X2F0dHIuYXR0ciwKQEAgLTUzOSw3ICs1MzcsNiBAQAogCSZpaW9fZGV2X2F0dHJfcmVzZXQuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX2NhcHR1cmUuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX2NhcHR1cmVfY291bnQuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfbmFtZS5kZXZfYXR0ci5hdHRyLAogCU5VTEwKIH07CiAKQEAgLTU0Nyw2ICs1NDQsMTAgQEAKIAkuYXR0cnMgPSBhZGlzMTYyMjBfYXR0cmlidXRlcywKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2luZm8gYWRpczE2MjIwX2luZm8gPSB7CisJLmF0dHJzID0gJmFkaXMxNjIyMF9hdHRyaWJ1dGVfZ3JvdXAsCisJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRSwKK307CiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhZGlzMTYyMjBfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlpbnQgcmV0LCByZWdkb25lID0gMDsKQEAgLTU3MiwxNiArNTczLDE2IEBACiAJc3QtPnVzID0gc3BpOwogCW11dGV4X2luaXQoJnN0LT5idWZfbG9jayk7CiAJLyogc2V0dXAgdGhlIGluZHVzdHJpYWxpbyBkcml2ZXIgYWxsb2NhdGVkIGVsZW1lbnRzICovCi0Jc3QtPmluZGlvX2RldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2UoKTsKKwlzdC0+aW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgwKTsKIAlpZiAoc3QtPmluZGlvX2RldiA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3JfZnJlZV90eDsKIAl9CiAKKwlzdC0+aW5kaW9fZGV2LT5uYW1lID0gc3BpLT5kZXYuZHJpdmVyLT5uYW1lOwogCXN0LT5pbmRpb19kZXYtPmRldi5wYXJlbnQgPSAmc3BpLT5kZXY7Ci0Jc3QtPmluZGlvX2Rldi0+YXR0cnMgPSAmYWRpczE2MjIwX2F0dHJpYnV0ZV9ncm91cDsKKwlzdC0+aW5kaW9fZGV2LT5pbmZvID0gJmFkaXMxNjIyMF9pbmZvOwogCXN0LT5pbmRpb19kZXYtPmRldl9kYXRhID0gKHZvaWQgKikoc3QpOwotCXN0LT5pbmRpb19kZXYtPmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRTsKIAlzdC0+aW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOwogCiAJcmV0ID0gaWlvX2RldmljZV9yZWdpc3RlcihzdC0+aW5kaW9fZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjQwLmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjI0MC5oCmluZGV4IDc2YTQ1NzkuLjE2MmIxZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjQwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyNDAuaApAQCAtMTI2LDkgKzEyNiw2IEBACiAvKioKICAqIHN0cnVjdCBhZGlzMTYyNDBfc3RhdGUgLSBkZXZpY2UgaW5zdGFuY2Ugc3BlY2lmaWMgZGF0YQogICogQHVzOgkJCWFjdHVhbCBzcGlfZGV2aWNlCi0gKiBAd29ya190cmlnZ2VyX3RvX3Jpbmc6IGJoIGZvciB0cmlnZ2VyZWQgZXZlbnQgaGFuZGxpbmcKLSAqIEBpbnRlcjoJCXVzZWQgdG8gY2hlY2sgaWYgbmV3IGludGVycnVwdCBoYXMgYmVlbiB0cmlnZ2VyZWQKLSAqIEBsYXN0X3RpbWVzdGFtcDoJcGFzc2luZyB0aW1lc3RhbXAgZnJvbSB0aCB0byBiaCBvZiBpbnRlcnJ1cHQgaGFuZGxlcgogICogQGluZGlvX2RldjoJCWluZHVzdHJpYWwgSS9PIGRldmljZSBzdHJ1Y3R1cmUKICAqIEB0cmlnOgkJZGF0YSByZWFkeSB0cmlnZ2VyIHJlZ2lzdGVyZWQgd2l0aCBpaW8KICAqIEB0eDoJCQl0cmFuc21pdCBidWZmZXIKQEAgLTEzNyw4ICsxMzQsNiBAQAogICoqLwogc3RydWN0IGFkaXMxNjI0MF9zdGF0ZSB7CiAJc3RydWN0IHNwaV9kZXZpY2UJCSp1czsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCXdvcmtfdHJpZ2dlcl90b19yaW5nOwotCXM2NAkJCQlsYXN0X3RpbWVzdGFtcDsKIAlzdHJ1Y3QgaWlvX2RldgkJCSppbmRpb19kZXY7CiAJc3RydWN0IGlpb190cmlnZ2VyCQkqdHJpZzsKIAl1OAkJCQkqdHg7CkBAIC0xNDYsNyArMTQxLDcgQEAKIAlzdHJ1Y3QgbXV0ZXgJCQlidWZfbG9jazsKIH07CiAKLWludCBhZGlzMTYyNDBfc2V0X2lycShzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgZW5hYmxlKTsKK2ludCBhZGlzMTYyNDBfc2V0X2lycShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LCBib29sIGVuYWJsZSk7CiAKICNpZmRlZiBDT05GSUdfSUlPX1JJTkdfQlVGRkVSCiAvKiBBdCB0aGUgbW9tZW50IHRyaWdnZXJzIGFyZSBvbmx5IHVzZWQgZm9yIHJpbmcgYnVmZmVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjI0MF9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjI0MF9jb3JlLmMKaW5kZXggZDExZDE2NC4uYWM2MDM4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyNDBfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjQwX2NvcmUuYwpAQCAtMjgsMjAgKzI4LDE5IEBACiAKICNkZWZpbmUgRFJJVkVSX05BTUUJCSJhZGlzMTYyNDAiCiAKLXN0YXRpYyBpbnQgYWRpczE2MjQwX2NoZWNrX3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkZXYpOworc3RhdGljIGludCBhZGlzMTYyNDBfY2hlY2tfc3RhdHVzKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwogCiAvKioKICAqIGFkaXMxNjI0MF9zcGlfd3JpdGVfcmVnXzgoKSAtIHdyaXRlIHNpbmdsZSBieXRlIHRvIGEgcmVnaXN0ZXIKLSAqIEBkZXY6IGRldmljZSBhc3NvY2lhdGVkIHdpdGggY2hpbGQgb2YgYWN0dWFsIGRldmljZSAoaWlvX2RldiBvciBpaW9fdHJpZykKKyAqIEBpbmRpb19kZXY6IGlpb19kZXYgYXNzb2NpYXRlZCB3aXRoIGRldmljZQogICogQHJlZ19hZGRyZXNzOiB0aGUgYWRkcmVzcyBvZiB0aGUgcmVnaXN0ZXIgdG8gYmUgd3JpdHRlbgogICogQHZhbDogdGhlIHZhbHVlIHRvIHdyaXRlCiAgKiovCi1zdGF0aWMgaW50IGFkaXMxNjI0MF9zcGlfd3JpdGVfcmVnXzgoc3RydWN0IGRldmljZSAqZGV2LAotCQl1OCByZWdfYWRkcmVzcywKLQkJdTggdmFsKQorc3RhdGljIGludCBhZGlzMTYyNDBfc3BpX3dyaXRlX3JlZ184KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCisJCQkJICAgICB1OCByZWdfYWRkcmVzcywKKwkJCQkgICAgIHU4IHZhbCkKIHsKIAlpbnQgcmV0OwotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgYWRpczE2MjQwX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKIAogCW11dGV4X2xvY2soJnN0LT5idWZfbG9jayk7CkBAIC01NiwxOCArNTUsMTcgQEAKIAogLyoqCiAgKiBhZGlzMTYyNDBfc3BpX3dyaXRlX3JlZ18xNigpIC0gd3JpdGUgMiBieXRlcyB0byBhIHBhaXIgb2YgcmVnaXN0ZXJzCi0gKiBAZGV2OiBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIGNoaWxkIG9mIGFjdHVhbCBkZXZpY2UgKGlpb19kZXYgb3IgaWlvX3RyaWcpCisgKiBAaW5kaW9fZGV2OiBpaW9fZGV2IGZvciB0aGlzIGRldmljZQogICogQHJlZ19hZGRyZXNzOiB0aGUgYWRkcmVzcyBvZiB0aGUgbG93ZXIgb2YgdGhlIHR3byByZWdpc3RlcnMuIFNlY29uZCByZWdpc3RlcgogICogICAgICAgICAgICAgICBpcyBhc3N1bWVkIHRvIGhhdmUgYWRkcmVzcyBvbmUgZ3JlYXRlci4KICAqIEB2YWw6IHZhbHVlIHRvIGJlIHdyaXR0ZW4KICAqKi8KLXN0YXRpYyBpbnQgYWRpczE2MjQwX3NwaV93cml0ZV9yZWdfMTYoc3RydWN0IGRldmljZSAqZGV2LAotCQl1OCBsb3dlcl9yZWdfYWRkcmVzcywKLQkJdTE2IHZhbHVlKQorc3RhdGljIGludCBhZGlzMTYyNDBfc3BpX3dyaXRlX3JlZ18xNihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAorCQkJCSAgICAgIHU4IGxvd2VyX3JlZ19hZGRyZXNzLAorCQkJCSAgICAgIHUxNiB2YWx1ZSkKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBzcGlfbWVzc2FnZSBtc2c7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBhZGlzMTYyNDBfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOwogCXN0cnVjdCBzcGlfdHJhbnNmZXIgeGZlcnNbXSA9IHsKIAkJewpAQCAtODAsNyArNzgsNiBAQAogCQkJLnR4X2J1ZiA9IHN0LT50eCArIDIsCiAJCQkuYml0c19wZXJfd29yZCA9IDgsCiAJCQkubGVuID0gMiwKLQkJCS5jc19jaGFuZ2UgPSAxLAogCQkJLmRlbGF5X3VzZWNzID0gMzUsCiAJCX0sCiAJfTsKQEAgLTEwMiwxNyArOTksMTYgQEAKIAogLyoqCiAgKiBhZGlzMTYyNDBfc3BpX3JlYWRfcmVnXzE2KCkgLSByZWFkIDIgYnl0ZXMgZnJvbSBhIDE2LWJpdCByZWdpc3RlcgotICogQGRldjogZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBjaGlsZCBvZiBhY3R1YWwgZGV2aWNlIChpaW9fZGV2IG9yIGlpb190cmlnKQorICogQGluZGlvX2RldjogaWlvX2RldiBmb3IgdGhpcyBkZXZpY2UKICAqIEByZWdfYWRkcmVzczogdGhlIGFkZHJlc3Mgb2YgdGhlIGxvd2VyIG9mIHRoZSB0d28gcmVnaXN0ZXJzLiBTZWNvbmQgcmVnaXN0ZXIKICAqICAgICAgICAgICAgICAgaXMgYXNzdW1lZCB0byBoYXZlIGFkZHJlc3Mgb25lIGdyZWF0ZXIuCiAgKiBAdmFsOiBzb21ld2hlcmUgdG8gcGFzcyBiYWNrIHRoZSB2YWx1ZSByZWFkCiAgKiovCi1zdGF0aWMgaW50IGFkaXMxNjI0MF9zcGlfcmVhZF9yZWdfMTYoc3RydWN0IGRldmljZSAqZGV2LAorc3RhdGljIGludCBhZGlzMTYyNDBfc3BpX3JlYWRfcmVnXzE2KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCiAJCXU4IGxvd2VyX3JlZ19hZGRyZXNzLAogCQl1MTYgKnZhbCkKIHsKIAlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbXNnOwotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgYWRpczE2MjQwX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKIAlpbnQgcmV0OwogCXN0cnVjdCBzcGlfdHJhbnNmZXIgeGZlcnNbXSA9IHsKQEAgLTE1OSw2MSArMTU1LDMwIEBACiAJCWNoYXIgKmJ1ZiwKIAkJdW5zaWduZWQgYml0cykKIHsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJaW50IHJldDsKIAlzMTYgdmFsID0gMDsKIAl1bnNpZ25lZCBzaGlmdCA9IDE2IC0gYml0czsKIAlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7CiAKLQlyZXQgPSBhZGlzMTYyNDBfc3BpX3JlYWRfcmVnXzE2KGRldiwgdGhpc19hdHRyLT5hZGRyZXNzLCAodTE2ICopJnZhbCk7CisJcmV0ID0gYWRpczE2MjQwX3NwaV9yZWFkX3JlZ18xNihpbmRpb19kZXYsCisJCQkJCXRoaXNfYXR0ci0+YWRkcmVzcywgKHUxNiAqKSZ2YWwpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKIAlpZiAodmFsICYgQURJUzE2MjQwX0VSUk9SX0FDVElWRSkKLQkJYWRpczE2MjQwX2NoZWNrX3N0YXR1cyhkZXYpOworCQlhZGlzMTYyNDBfY2hlY2tfc3RhdHVzKGluZGlvX2Rldik7CiAKIAl2YWwgPSAoKHMxNikodmFsIDw8IHNoaWZ0KSA+PiBzaGlmdCk7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbCk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGFkaXMxNjI0MF9yZWFkXzEwYml0X3Vuc2lnbmVkKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNoYXIgKmJ1ZikKLXsKLQlpbnQgcmV0OwotCXUxNiB2YWwgPSAwOwotCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKLQotCXJldCA9IGFkaXMxNjI0MF9zcGlfcmVhZF9yZWdfMTYoZGV2LCB0aGlzX2F0dHItPmFkZHJlc3MsICZ2YWwpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAodmFsICYgQURJUzE2MjQwX0VSUk9SX0FDVElWRSkKLQkJYWRpczE2MjQwX2NoZWNrX3N0YXR1cyhkZXYpOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHZhbCAmIDB4MDNGRik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGFkaXMxNjI0MF9yZWFkXzEwYml0X3NpZ25lZChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljaGFyICpidWYpCi17Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXNzaXplX3QgcmV0OwotCi0JLyogVGFrZSB0aGUgaWlvX2RldiBzdGF0dXMgbG9jayAqLwotCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOwotCXJldCA9ICBhZGlzMTYyNDBfc3BpX3JlYWRfc2lnbmVkKGRldiwgYXR0ciwgYnVmLCAxMCk7Ci0JbXV0ZXhfdW5sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90IGFkaXMxNjI0MF9yZWFkXzEyYml0X3NpZ25lZChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQljaGFyICpidWYpCiB7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXNzaXplX3QgcmV0OworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAogCS8qIFRha2UgdGhlIGlpb19kZXYgc3RhdHVzIGxvY2sgKi8KIAltdXRleF9sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKQEAgLTIyMywzMiArMTg4LDE0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHNzaXplX3QgYWRpczE2MjQwX3dyaXRlXzE2Yml0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNvbnN0IGNoYXIgKmJ1ZiwKLQkJc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7Ci0JaW50IHJldDsKLQlsb25nIHZhbDsKLQotCXJldCA9IHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnZhbCk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJvcl9yZXQ7Ci0JcmV0ID0gYWRpczE2MjQwX3NwaV93cml0ZV9yZWdfMTYoZGV2LCB0aGlzX2F0dHItPmFkZHJlc3MsIHZhbCk7Ci0KLWVycm9yX3JldDoKLQlyZXR1cm4gcmV0ID8gcmV0IDogbGVuOwotfQotCi1zdGF0aWMgaW50IGFkaXMxNjI0MF9yZXNldChzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGFkaXMxNjI0MF9yZXNldChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQogewogCWludCByZXQ7Ci0JcmV0ID0gYWRpczE2MjQwX3NwaV93cml0ZV9yZWdfOChkZXYsCisJcmV0ID0gYWRpczE2MjQwX3NwaV93cml0ZV9yZWdfOChpbmRpb19kZXYsCiAJCQlBRElTMTYyNDBfR0xPQl9DTUQsCiAJCQlBRElTMTYyNDBfR0xPQl9DTURfU1dfUkVTRVQpOwogCWlmIChyZXQpCi0JCWRldl9lcnIoZGV2LCAicHJvYmxlbSByZXNldHRpbmcgZGV2aWNlIik7CisJCWRldl9lcnIoJmluZGlvX2Rldi0+ZGV2LCAicHJvYmxlbSByZXNldHRpbmcgZGV2aWNlIik7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjU3LDIzICsyMDQsMjYgQEAKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKIAlpZiAobGVuIDwgMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJc3dpdGNoIChidWZbMF0pIHsKIAljYXNlICcxJzoKIAljYXNlICd5JzoKIAljYXNlICdZJzoKLQkJcmV0dXJuIGFkaXMxNjI0MF9yZXNldChkZXYpOworCQlyZXR1cm4gYWRpczE2MjQwX3Jlc2V0KGluZGlvX2Rldik7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQogCi1pbnQgYWRpczE2MjQwX3NldF9pcnEoc3RydWN0IGRldmljZSAqZGV2LCBib29sIGVuYWJsZSkKK2ludCBhZGlzMTYyNDBfc2V0X2lycShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LCBib29sIGVuYWJsZSkKIHsKIAlpbnQgcmV0ID0gMDsKIAl1MTYgbXNjOwogCi0JcmV0ID0gYWRpczE2MjQwX3NwaV9yZWFkX3JlZ18xNihkZXYsIEFESVMxNjI0MF9NU0NfQ1RSTCwgJm1zYyk7CisJcmV0ID0gYWRpczE2MjQwX3NwaV9yZWFkX3JlZ18xNihpbmRpb19kZXYsCisJCQkJCUFESVMxNjI0MF9NU0NfQ1RSTCwgJm1zYyk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl9yZXQ7CiAKQEAgLTI4NCwzNyArMjM0LDQwIEBACiAJZWxzZQogCQltc2MgJj0gfkFESVMxNjI0MF9NU0NfQ1RSTF9EQVRBX1JEWV9FTjsKIAotCXJldCA9IGFkaXMxNjI0MF9zcGlfd3JpdGVfcmVnXzE2KGRldiwgQURJUzE2MjQwX01TQ19DVFJMLCBtc2MpOworCXJldCA9IGFkaXMxNjI0MF9zcGlfd3JpdGVfcmVnXzE2KGluZGlvX2RldiwKKwkJCQkJIEFESVMxNjI0MF9NU0NfQ1RSTCwgbXNjKTsKIAogZXJyb3JfcmV0OgogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgYWRpczE2MjQwX3NlbGZfdGVzdChzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGFkaXMxNjI0MF9zZWxmX3Rlc3Qoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKIAlpbnQgcmV0OwotCXJldCA9IGFkaXMxNjI0MF9zcGlfd3JpdGVfcmVnXzE2KGRldiwKKwlyZXQgPSBhZGlzMTYyNDBfc3BpX3dyaXRlX3JlZ18xNihpbmRpb19kZXYsCiAJCQlBRElTMTYyNDBfTVNDX0NUUkwsCiAJCQlBRElTMTYyNDBfTVNDX0NUUkxfU0VMRl9URVNUX0VOKTsKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoZGV2LCAicHJvYmxlbSBzdGFydGluZyBzZWxmIHRlc3QiKTsKKwkJZGV2X2VycigmaW5kaW9fZGV2LT5kZXYsICJwcm9ibGVtIHN0YXJ0aW5nIHNlbGYgdGVzdCIpOwogCQlnb3RvIGVycl9yZXQ7CiAJfQogCiAJbXNsZWVwKEFESVMxNjI0MF9TVEFSVFVQX0RFTEFZKTsKIAotCWFkaXMxNjI0MF9jaGVja19zdGF0dXMoZGV2KTsKKwlhZGlzMTYyNDBfY2hlY2tfc3RhdHVzKGluZGlvX2Rldik7CiAKIGVycl9yZXQ6CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBhZGlzMTYyNDBfY2hlY2tfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgYWRpczE2MjQwX2NoZWNrX3N0YXR1cyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQogewogCXUxNiBzdGF0dXM7CiAJaW50IHJldDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaW5kaW9fZGV2LT5kZXY7CiAKLQlyZXQgPSBhZGlzMTYyNDBfc3BpX3JlYWRfcmVnXzE2KGRldiwgQURJUzE2MjQwX0RJQUdfU1RBVCwgJnN0YXR1cyk7CisJcmV0ID0gYWRpczE2MjQwX3NwaV9yZWFkX3JlZ18xNihpbmRpb19kZXYsCisJCQkJCUFESVMxNjI0MF9ESUFHX1NUQVQsICZzdGF0dXMpOwogCiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2VycihkZXYsICJSZWFkaW5nIHN0YXR1cyBmYWlsZWRcbiIpOwpAQCAtMzM3LDEyMiArMjkwLDIxNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgYWRpczE2MjQwX2luaXRpYWxfc2V0dXAoc3RydWN0IGFkaXMxNjI0MF9zdGF0ZSAqc3QpCitzdGF0aWMgaW50IGFkaXMxNjI0MF9pbml0aWFsX3NldHVwKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCiB7CiAJaW50IHJldDsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmc3QtPmluZGlvX2Rldi0+ZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpbmRpb19kZXYtPmRldjsKIAogCS8qIERpc2FibGUgSVJRICovCi0JcmV0ID0gYWRpczE2MjQwX3NldF9pcnEoZGV2LCBmYWxzZSk7CisJcmV0ID0gYWRpczE2MjQwX3NldF9pcnEoaW5kaW9fZGV2LCBmYWxzZSk7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKGRldiwgImRpc2FibGUgaXJxIGZhaWxlZCIpOwogCQlnb3RvIGVycl9yZXQ7CiAJfQogCiAJLyogRG8gc2VsZiB0ZXN0ICovCi0JcmV0ID0gYWRpczE2MjQwX3NlbGZfdGVzdChkZXYpOworCXJldCA9IGFkaXMxNjI0MF9zZWxmX3Rlc3QoaW5kaW9fZGV2KTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoZGV2LCAic2VsZiB0ZXN0IGZhaWx1cmUiKTsKIAkJZ290byBlcnJfcmV0OwogCX0KIAogCS8qIFJlYWQgc3RhdHVzIHJlZ2lzdGVyIHRvIGNoZWNrIHRoZSByZXN1bHQgKi8KLQlyZXQgPSBhZGlzMTYyNDBfY2hlY2tfc3RhdHVzKGRldik7CisJcmV0ID0gYWRpczE2MjQwX2NoZWNrX3N0YXR1cyhpbmRpb19kZXYpOwogCWlmIChyZXQpIHsKLQkJYWRpczE2MjQwX3Jlc2V0KGRldik7CisJCWFkaXMxNjI0MF9yZXNldChpbmRpb19kZXYpOwogCQlkZXZfZXJyKGRldiwgImRldmljZSBub3QgcGxheWluZyBiYWxsIC0+IHJlc2V0Iik7CiAJCW1zbGVlcChBRElTMTYyNDBfU1RBUlRVUF9ERUxBWSk7Ci0JCXJldCA9IGFkaXMxNjI0MF9jaGVja19zdGF0dXMoZGV2KTsKKwkJcmV0ID0gYWRpczE2MjQwX2NoZWNrX3N0YXR1cyhpbmRpb19kZXYpOwogCQlpZiAocmV0KSB7CiAJCQlkZXZfZXJyKGRldiwgImdpdmluZyB1cCIpOwogCQkJZ290byBlcnJfcmV0OwogCQl9CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiOiBhdCBDUyVkIChpcnEgJWQpXG4iLAotCQkJc3QtPnVzLT5jaGlwX3NlbGVjdCwgc3QtPnVzLT5pcnEpOwotCiBlcnJfcmV0OgogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fTkFNRURfUkFXKDAsIHN1cHBseSwgYWRpczE2MjQwX3JlYWRfMTBiaXRfdW5zaWduZWQsCi0JCUFESVMxNjI0MF9TVVBQTFlfT1VUKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDEsIGFkaXMxNjI0MF9yZWFkXzEwYml0X3NpZ25lZCwKLQkJQURJUzE2MjQwX0FVWF9BREMpOwotc3RhdGljIElJT19DT05TVF9BVFRSX0lOX05BTUVEX1NDQUxFKDAsIHN1cHBseSwgIjAuMDA0ODgiKTsKLQotc3RhdGljIElJT19DT05TVF9BVFRSX0FDQ0VMX1NDQUxFKCIwLjUwNDA2MTgxIik7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFIoYWNjZWxfcGVha19zY2FsZSwgIjYuNjI5Mjk1NCIpOwotc3RhdGljIElJT19ERVZfQVRUUl9BQ0NFTF9YKGFkaXMxNjI0MF9yZWFkXzEwYml0X3NpZ25lZCwKLQkJQURJUzE2MjQwX1hBQ0NMX09VVCk7Ci1zdGF0aWMgSUlPX0RFVklDRV9BVFRSKGFjY2VsX3hfcGVha19yYXcsIFNfSVJVR08sCi0JCSAgICAgICBhZGlzMTYyNDBfcmVhZF8xMGJpdF9zaWduZWQsIE5VTEwsCi0JCSAgICAgICBBRElTMTYyNDBfWFBFQUtfT1VUKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfQUNDRUxfWShhZGlzMTYyNDBfcmVhZF8xMGJpdF9zaWduZWQsCi0JCUFESVMxNjI0MF9ZQUNDTF9PVVQpOwotc3RhdGljIElJT19ERVZJQ0VfQVRUUihhY2NlbF95X3BlYWtfcmF3LCBTX0lSVUdPLAotCQkgICAgICAgYWRpczE2MjQwX3JlYWRfMTBiaXRfc2lnbmVkLCBOVUxMLAotCQkgICAgICAgQURJUzE2MjQwX1lQRUFLX09VVCk7Ci1zdGF0aWMgSUlPX0RFVl9BVFRSX0FDQ0VMX1ooYWRpczE2MjQwX3JlYWRfMTBiaXRfc2lnbmVkLAotCQlBRElTMTYyNDBfWkFDQ0xfT1VUKTsKLXN0YXRpYyBJSU9fREVWSUNFX0FUVFIoYWNjZWxfel9wZWFrX3JhdywgU19JUlVHTywKLQkJICAgICAgIGFkaXMxNjI0MF9yZWFkXzEwYml0X3NpZ25lZCwgTlVMTCwKLQkJICAgICAgIEFESVMxNjI0MF9aUEVBS19PVVQpOwotCiBzdGF0aWMgSUlPX0RFVklDRV9BVFRSKGFjY2VsX3h5el9zcXVhcmVkX3BlYWtfcmF3LCBTX0lSVUdPLAogCQkgICAgICAgYWRpczE2MjQwX3JlYWRfMTJiaXRfc2lnbmVkLCBOVUxMLAogCQkgICAgICAgQURJUzE2MjQwX1hZWlBFQUtfT1VUKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfQUNDRUxfWF9DQUxJQkJJQVMoU19JV1VTUiB8IFNfSVJVR08sCi0JCWFkaXMxNjI0MF9yZWFkXzEwYml0X3NpZ25lZCwKLQkJYWRpczE2MjQwX3dyaXRlXzE2Yml0LAotCQlBRElTMTYyNDBfWEFDQ0xfT0ZGKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfQUNDRUxfWV9DQUxJQkJJQVMoU19JV1VTUiB8IFNfSVJVR08sCi0JCWFkaXMxNjI0MF9yZWFkXzEwYml0X3NpZ25lZCwKLQkJYWRpczE2MjQwX3dyaXRlXzE2Yml0LAotCQlBRElTMTYyNDBfWUFDQ0xfT0ZGKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfQUNDRUxfWl9DQUxJQkJJQVMoU19JV1VTUiB8IFNfSVJVR08sCi0JCWFkaXMxNjI0MF9yZWFkXzEwYml0X3NpZ25lZCwKLQkJYWRpczE2MjQwX3dyaXRlXzE2Yml0LAotCQlBRElTMTYyNDBfWkFDQ0xfT0ZGKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfVEVNUF9SQVcoYWRpczE2MjQwX3JlYWRfMTBiaXRfdW5zaWduZWQpOwotc3RhdGljIElJT19DT05TVF9BVFRSX1RFTVBfU0NBTEUoIjAuMjQ0Iik7CiAKIHN0YXRpYyBJSU9fREVWSUNFX0FUVFIocmVzZXQsIFNfSVdVU1IsIE5VTEwsIGFkaXMxNjI0MF93cml0ZV9yZXNldCwgMCk7CiAKIHN0YXRpYyBJSU9fQ09OU1RfQVRUUl9TQU1QX0ZSRVFfQVZBSUwoIjQwOTYiKTsKIAotc3RhdGljIElJT19DT05TVF9BVFRSX05BTUUoImFkaXMxNjI0MCIpOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWRpczE2MjQwX2V2ZW50X2F0dHJpYnV0ZXNbXSA9IHsKLQlOVUxMCitlbnVtIGFkaXMxNjI0MF9jaGFuIHsKKwlpbl9zdXBwbHksCisJaW5fYXV4LAorCWFjY2VsX3gsCisJYWNjZWxfeSwKKwlhY2NlbF96LAorCXRlbXAsCiB9OwogCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZGlzMTYyNDBfZXZlbnRfYXR0cmlidXRlX2dyb3VwID0gewotCS5hdHRycyA9IGFkaXMxNjI0MF9ldmVudF9hdHRyaWJ1dGVzLAorc3RhdGljIGNvbnN0IHU4IGFkaXMxNjI0MF9hZGRyZXNzZXNbNl1bM10gPSB7CisJW2luX3N1cHBseV0gPSB7IEFESVMxNjI0MF9TVVBQTFlfT1VUIH0sCisJW2luX2F1eF0gPSB7IEFESVMxNjI0MF9BVVhfQURDIH0sCisJW2FjY2VsX3hdID0geyBBRElTMTYyNDBfWEFDQ0xfT1VULCBBRElTMTYyNDBfWEFDQ0xfT0ZGLAorCQkgICAgICBBRElTMTYyNDBfWFBFQUtfT1VUIH0sCisJW2FjY2VsX3ldID0geyBBRElTMTYyNDBfWUFDQ0xfT1VULCBBRElTMTYyNDBfWUFDQ0xfT0ZGLAorCQkgICAgICBBRElTMTYyNDBfWVBFQUtfT1VUIH0sCisJW2FjY2VsX3pdID0geyBBRElTMTYyNDBfWkFDQ0xfT1VULCBBRElTMTYyNDBfWkFDQ0xfT0ZGLAorCQkgICAgICBBRElTMTYyNDBfWlBFQUtfT1VUIH0sCisJW3RlbXBdID0geyBBRElTMTYyNDBfVEVNUF9PVVQgfSwKK307CisKK3N0YXRpYyBpbnQgYWRpczE2MjQwX3JlYWRfcmF3KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCisJCQkgICAgICBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbiwKKwkJCSAgICAgIGludCAqdmFsLCBpbnQgKnZhbDIsCisJCQkgICAgICBsb25nIG1hc2spCit7CisJaW50IHJldDsKKwlpbnQgYml0czsKKwl1OCBhZGRyOworCXMxNiB2YWwxNjsKKworCXN3aXRjaCAobWFzaykgeworCWNhc2UgMDoKKwkJbXV0ZXhfbG9jaygmaW5kaW9fZGV2LT5tbG9jayk7CisJCWFkZHIgPSBhZGlzMTYyNDBfYWRkcmVzc2VzW2NoYW4tPmFkZHJlc3NdWzBdOworCQlyZXQgPSBhZGlzMTYyNDBfc3BpX3JlYWRfcmVnXzE2KGluZGlvX2RldiwgYWRkciwgJnZhbDE2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJaWYgKHZhbDE2ICYgQURJUzE2MjQwX0VSUk9SX0FDVElWRSkgeworCQkJcmV0ID0gYWRpczE2MjQwX2NoZWNrX3N0YXR1cyhpbmRpb19kZXYpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJCXZhbDE2ID0gdmFsMTYgJiAoKDEgPDwgY2hhbi0+c2Nhbl90eXBlLnJlYWxiaXRzKSAtIDEpOworCQlpZiAoY2hhbi0+c2Nhbl90eXBlLnNpZ24gPT0gJ3MnKQorCQkJdmFsMTYgPSAoczE2KSh2YWwxNiA8PAorCQkJCSAgICAgICgxNiAtIGNoYW4tPnNjYW5fdHlwZS5yZWFsYml0cykpID4+CisJCQkJKDE2IC0gY2hhbi0+c2Nhbl90eXBlLnJlYWxiaXRzKTsKKwkJKnZhbCA9IHZhbDE2OworCQltdXRleF91bmxvY2soJmluZGlvX2Rldi0+bWxvY2spOworCQlyZXR1cm4gSUlPX1ZBTF9JTlQ7CisJY2FzZSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NFUEFSQVRFKToKKwljYXNlICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKToKKwkJc3dpdGNoIChjaGFuLT50eXBlKSB7CisJCWNhc2UgSUlPX0lOOgorCQkJKnZhbCA9IDA7CisJCQlpZiAoY2hhbi0+Y2hhbm5lbCA9PSAwKQorCQkJCSp2YWwyID0gNDg4MDsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCXJldHVybiBJSU9fVkFMX0lOVF9QTFVTX01JQ1JPOworCQljYXNlIElJT19URU1QOgorCQkJKnZhbCA9IDA7CisJCQkqdmFsMiA9IDI0NDAwMDsKKwkJCXJldHVybiBJSU9fVkFMX0lOVF9QTFVTX01JQ1JPOworCQljYXNlIElJT19BQ0NFTDoKKwkJCSp2YWwgPSAwOworCQkJKnZhbDIgPSA1MDQwNjI7CisJCQlyZXR1cm4gSUlPX1ZBTF9JTlRfUExVU19NSUNSTzsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWNhc2UgKDEgPDwgSUlPX0NIQU5fSU5GT19QRUFLX1NDQUxFX1NIQVJFRCk6CisJCSp2YWwgPSA2OworCQkqdmFsMiA9IDYyOTI5NTsKKwkJcmV0dXJuIElJT19WQUxfSU5UX1BMVVNfTUlDUk87CisJY2FzZSAoMSA8PCBJSU9fQ0hBTl9JTkZPX09GRlNFVF9TRVBBUkFURSk6CisJCSp2YWwgPSAyNTsKKwkJcmV0dXJuIElJT19WQUxfSU5UOworCWNhc2UgKDEgPDwgSUlPX0NIQU5fSU5GT19DQUxJQkJJQVNfU0VQQVJBVEUpOgorCQliaXRzID0gMTA7CisJCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOworCQlhZGRyID0gYWRpczE2MjQwX2FkZHJlc3Nlc1tjaGFuLT5hZGRyZXNzXVsxXTsKKwkJcmV0ID0gYWRpczE2MjQwX3NwaV9yZWFkX3JlZ18xNihpbmRpb19kZXYsIGFkZHIsICZ2YWwxNik7CisJCWlmIChyZXQpIHsKKwkJCW11dGV4X3VubG9jaygmaW5kaW9fZGV2LT5tbG9jayk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCXZhbDE2ICY9ICgxIDw8IGJpdHMpIC0gMTsKKwkJdmFsMTYgPSAoczE2KSh2YWwxNiA8PCAoMTYgLSBiaXRzKSkgPj4gKDE2IC0gYml0cyk7CisJCSp2YWwgPSB2YWwxNjsKKwkJbXV0ZXhfdW5sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKKwkJcmV0dXJuIElJT19WQUxfSU5UOworCWNhc2UgKDEgPDwgSUlPX0NIQU5fSU5GT19QRUFLX1NFUEFSQVRFKToKKwkJYml0cyA9IDEwOworCQltdXRleF9sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKKwkJYWRkciA9IGFkaXMxNjI0MF9hZGRyZXNzZXNbY2hhbi0+YWRkcmVzc11bMl07CisJCXJldCA9IGFkaXMxNjI0MF9zcGlfcmVhZF9yZWdfMTYoaW5kaW9fZGV2LCBhZGRyLCAmdmFsMTYpOworCQlpZiAocmV0KSB7CisJCQltdXRleF91bmxvY2soJmluZGlvX2Rldi0+bWxvY2spOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQl2YWwxNiAmPSAoMSA8PCBiaXRzKSAtIDE7CisJCXZhbDE2ID0gKHMxNikodmFsMTYgPDwgKDE2IC0gYml0cykpID4+ICgxNiAtIGJpdHMpOworCQkqdmFsID0gdmFsMTY7CisJCW11dGV4X3VubG9jaygmaW5kaW9fZGV2LT5tbG9jayk7CisJCXJldHVybiBJSU9fVkFMX0lOVDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgYWRpczE2MjQwX3dyaXRlX3JhdyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAorCQkJICAgICAgIHN0cnVjdCBpaW9fY2hhbl9zcGVjIGNvbnN0ICpjaGFuLAorCQkJICAgICAgIGludCB2YWwsCisJCQkgICAgICAgaW50IHZhbDIsCisJCQkgICAgICAgbG9uZyBtYXNrKQoreworCWludCBiaXRzID0gMTA7CisJczE2IHZhbDE2OworCXU4IGFkZHI7CisJc3dpdGNoIChtYXNrKSB7CisJY2FzZSAoMSA8PCBJSU9fQ0hBTl9JTkZPX0NBTElCQklBU19TRVBBUkFURSk6CisJCXZhbDE2ID0gdmFsICYgKCgxIDw8IGJpdHMpIC0gMSk7CisJCWFkZHIgPSBhZGlzMTYyNDBfYWRkcmVzc2VzW2NoYW4tPmFkZHJlc3NdWzFdOworCQlyZXR1cm4gYWRpczE2MjQwX3NwaV93cml0ZV9yZWdfMTYoaW5kaW9fZGV2LCBhZGRyLCB2YWwxNik7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgc3RydWN0IGlpb19jaGFuX3NwZWMgYWRpczE2MjQwX2NoYW5uZWxzW10gPSB7CisJSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCAic3VwcGx5IiwgMCwgMCwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0VQQVJBVEUpLAorCQkgaW5fc3VwcGx5LCBBRElTMTYyNDBfU0NBTl9TVVBQTFksCisJCSBJSU9fU1QoJ3UnLCAxMCwgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsIE5VTEwsIDEsIDAsCisJCSAwLAorCQkgaW5fYXV4LCBBRElTMTYyNDBfU0NBTl9BVVhfQURDLAorCQkgSUlPX1NUKCd1JywgMTAsIDE2LCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX0FDQ0VMLCAxLCAwLCAwLCBOVUxMLCAwLCBJSU9fTU9EX1gsCisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCkgfAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19DQUxJQkJJQVNfU0VQQVJBVEUpLAorCQkgYWNjZWxfeCwgQURJUzE2MjQwX1NDQU5fQUNDX1gsCisJCSBJSU9fU1QoJ3MnLCAxMCwgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTihJSU9fQUNDRUwsIDEsIDAsIDAsIE5VTEwsIDAsIElJT19NT0RfWSwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSB8CisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX0NBTElCQklBU19TRVBBUkFURSksCisJCSBhY2NlbF95LCBBRElTMTYyNDBfU0NBTl9BQ0NfWSwKKwkJIElJT19TVCgncycsIDEwLCAxNiwgMCksIDApLAorCUlJT19DSEFOKElJT19BQ0NFTCwgMSwgMCwgMCwgTlVMTCwgMCwgSUlPX01PRF9aLAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpIHwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fQ0FMSUJCSUFTX1NFUEFSQVRFKSwKKwkJIGFjY2VsX3osIEFESVMxNjI0MF9TQ0FOX0FDQ19aLAorCQkgSUlPX1NUKCdzJywgMTAsIDE2LCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX1RFTVAsIDAsIDEsIDAsIE5VTEwsIDAsIDAsCisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NFUEFSQVRFKSwKKwkJIHRlbXAsIEFESVMxNjI0MF9TQ0FOX1RFTVAsCisJCSBJSU9fU1QoJ3UnLCAxMCwgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTl9TT0ZUX1RJTUVTVEFNUCg2KQogfTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkaXMxNjI0MF9hdHRyaWJ1dGVzW10gPSB7Ci0JJmlpb19kZXZfYXR0cl9pbjBfc3VwcGx5X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjBfc3VwcGx5X3NjYWxlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjFfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2FjY2VsX3NjYWxlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2FjY2VsX3BlYWtfc2NhbGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2FjY2VsX3hfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9hY2NlbF94X2NhbGliYmlhcy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfYWNjZWxfeF9wZWFrX3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfYWNjZWxfeV9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2FjY2VsX3lfY2FsaWJiaWFzLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9hY2NlbF95X3BlYWtfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9hY2NlbF96X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfYWNjZWxfel9jYWxpYmJpYXMuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2FjY2VsX3pfcGVha19yYXcuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX2FjY2VsX3h5el9zcXVhcmVkX3BlYWtfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl90ZW1wX3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl90ZW1wX3NjYWxlLmRldl9hdHRyLmF0dHIsCiAJJmlpb19jb25zdF9hdHRyX3NhbXBsaW5nX2ZyZXF1ZW5jeV9hdmFpbGFibGUuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX3Jlc2V0LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX25hbWUuZGV2X2F0dHIuYXR0ciwKIAlOVUxMCiB9OwogCkBAIC00NjAsNiArNTA3LDEzIEBACiAJLmF0dHJzID0gYWRpczE2MjQwX2F0dHJpYnV0ZXMsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIGFkaXMxNjI0MF9pbmZvID0geworCS5hdHRycyA9ICZhZGlzMTYyNDBfYXR0cmlidXRlX2dyb3VwLAorCS5yZWFkX3JhdyA9ICZhZGlzMTYyNDBfcmVhZF9yYXcsCisJLndyaXRlX3JhdyA9ICZhZGlzMTYyNDBfd3JpdGVfcmF3LAorCS5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEUsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhZGlzMTYyNDBfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlpbnQgcmV0LCByZWdkb25lID0gMDsKQEAgLTQ4NSwxOCArNTM5LDE4IEBACiAJc3QtPnVzID0gc3BpOwogCW11dGV4X2luaXQoJnN0LT5idWZfbG9jayk7CiAJLyogc2V0dXAgdGhlIGluZHVzdHJpYWxpbyBkcml2ZXIgYWxsb2NhdGVkIGVsZW1lbnRzICovCi0Jc3QtPmluZGlvX2RldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2UoKTsKKwlzdC0+aW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgwKTsKIAlpZiAoc3QtPmluZGlvX2RldiA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3JfZnJlZV90eDsKIAl9CiAKKwlzdC0+aW5kaW9fZGV2LT5uYW1lID0gc3BpLT5kZXYuZHJpdmVyLT5uYW1lOwogCXN0LT5pbmRpb19kZXYtPmRldi5wYXJlbnQgPSAmc3BpLT5kZXY7Ci0Jc3QtPmluZGlvX2Rldi0+bnVtX2ludGVycnVwdF9saW5lcyA9IDE7Ci0Jc3QtPmluZGlvX2Rldi0+ZXZlbnRfYXR0cnMgPSAmYWRpczE2MjQwX2V2ZW50X2F0dHJpYnV0ZV9ncm91cDsKLQlzdC0+aW5kaW9fZGV2LT5hdHRycyA9ICZhZGlzMTYyNDBfYXR0cmlidXRlX2dyb3VwOworCXN0LT5pbmRpb19kZXYtPmluZm8gPSAmYWRpczE2MjQwX2luZm87CisJc3QtPmluZGlvX2Rldi0+Y2hhbm5lbHMgPSBhZGlzMTYyNDBfY2hhbm5lbHM7CisJc3QtPmluZGlvX2Rldi0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShhZGlzMTYyNDBfY2hhbm5lbHMpOwogCXN0LT5pbmRpb19kZXYtPmRldl9kYXRhID0gKHZvaWQgKikoc3QpOwotCXN0LT5pbmRpb19kZXYtPmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRTsKIAlzdC0+aW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOwogCiAJcmV0ID0gYWRpczE2MjQwX2NvbmZpZ3VyZV9yaW5nKHN0LT5pbmRpb19kZXYpOwpAQCAtNTA4LDM3ICs1NjIsMjggQEAKIAkJZ290byBlcnJvcl91bnJlZ19yaW5nX2Z1bmNzOwogCXJlZ2RvbmUgPSAxOwogCi0JcmV0ID0gaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyKHN0LT5pbmRpb19kZXYtPnJpbmcsIDApOworCXJldCA9IGlpb19yaW5nX2J1ZmZlcl9yZWdpc3Rlcl9leChzdC0+aW5kaW9fZGV2LT5yaW5nLCAwLAorCQkJCQkgIGFkaXMxNjI0MF9jaGFubmVscywKKwkJCQkJICBBUlJBWV9TSVpFKGFkaXMxNjI0MF9jaGFubmVscykpOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcmluZ1xuIik7CiAJCWdvdG8gZXJyb3JfdW5yZWdfcmluZ19mdW5jczsKIAl9CiAKIAlpZiAoc3BpLT5pcnEpIHsKLQkJcmV0ID0gaWlvX3JlZ2lzdGVyX2ludGVycnVwdF9saW5lKHNwaS0+aXJxLAotCQkJCXN0LT5pbmRpb19kZXYsCi0JCQkJMCwKLQkJCQlJUlFGX1RSSUdHRVJfUklTSU5HLAotCQkJCSJhZGlzMTYyNDAiKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gZXJyb3JfdW5pbml0aWFsaXplX3Jpbmc7Ci0KIAkJcmV0ID0gYWRpczE2MjQwX3Byb2JlX3RyaWdnZXIoc3QtPmluZGlvX2Rldik7CiAJCWlmIChyZXQpCi0JCQlnb3RvIGVycm9yX3VucmVnaXN0ZXJfbGluZTsKKwkJCWdvdG8gZXJyb3JfdW5pbml0aWFsaXplX3Jpbmc7CiAJfQogCiAJLyogR2V0IHRoZSBkZXZpY2UgaW50byBhIHNhbmUgaW5pdGlhbCBzdGF0ZSAqLwotCXJldCA9IGFkaXMxNjI0MF9pbml0aWFsX3NldHVwKHN0KTsKKwlyZXQgPSBhZGlzMTYyNDBfaW5pdGlhbF9zZXR1cChzdC0+aW5kaW9fZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycm9yX3JlbW92ZV90cmlnZ2VyOwogCXJldHVybiAwOwogCiBlcnJvcl9yZW1vdmVfdHJpZ2dlcjoKIAlhZGlzMTYyNDBfcmVtb3ZlX3RyaWdnZXIoc3QtPmluZGlvX2Rldik7Ci1lcnJvcl91bnJlZ2lzdGVyX2xpbmU6Ci0JaWYgKHNwaS0+aXJxKQotCQlpaW9fdW5yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShzdC0+aW5kaW9fZGV2LCAwKTsKIGVycm9yX3VuaW5pdGlhbGl6ZV9yaW5nOgogCWlpb19yaW5nX2J1ZmZlcl91bnJlZ2lzdGVyKHN0LT5pbmRpb19kZXYtPnJpbmcpOwogZXJyb3JfdW5yZWdfcmluZ19mdW5jczoKQEAgLTU2Niw5ICs2MTEsNiBAQAogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKIAlhZGlzMTYyNDBfcmVtb3ZlX3RyaWdnZXIoaW5kaW9fZGV2KTsKLQlpZiAoc3BpLT5pcnEpCi0JCWlpb191bnJlZ2lzdGVyX2ludGVycnVwdF9saW5lKGluZGlvX2RldiwgMCk7Ci0KIAlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihpbmRpb19kZXYtPnJpbmcpOwogCWlpb19kZXZpY2VfdW5yZWdpc3RlcihpbmRpb19kZXYpOwogCWFkaXMxNjI0MF91bmNvbmZpZ3VyZV9yaW5nKGluZGlvX2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjI0MF9yaW5nLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjI0MF9yaW5nLmMKaW5kZXggZjg4MmU5Yy4uMGM2ZDc4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyNDBfcmluZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjQwX3JpbmcuYwpAQCAtMTcsNTkgKzE3LDYgQEAKICNpbmNsdWRlICIuLi90cmlnZ2VyLmgiCiAjaW5jbHVkZSAiYWRpczE2MjQwLmgiCiAKLXN0YXRpYyBJSU9fU0NBTl9FTF9DKGluX3N1cHBseSwgQURJUzE2MjQwX1NDQU5fU1VQUExZLAotCQlBRElTMTYyNDBfU1VQUExZX09VVCwgTlVMTCk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfU0NBTl9FTF9UWVBFKGluX3N1cHBseSwgdSwgMTAsIDE2KTsKLXN0YXRpYyBJSU9fU0NBTl9FTF9DKGFjY2VsX3gsIEFESVMxNjI0MF9TQ0FOX0FDQ19YLCBBRElTMTYyNDBfWEFDQ0xfT1VULCBOVUxMKTsKLXN0YXRpYyBJSU9fU0NBTl9FTF9DKGFjY2VsX3ksIEFESVMxNjI0MF9TQ0FOX0FDQ19ZLCBBRElTMTYyNDBfWUFDQ0xfT1VULCBOVUxMKTsKLXN0YXRpYyBJSU9fU0NBTl9FTF9DKGFjY2VsX3osIEFESVMxNjI0MF9TQ0FOX0FDQ19aLCBBRElTMTYyNDBfWkFDQ0xfT1VULCBOVUxMKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUl9TQ0FOX0VMX1RZUEUoYWNjZWwsIHMsIDEwLCAxNik7Ci1zdGF0aWMgSUlPX1NDQU5fRUxfQyhpbjAsIEFESVMxNjI0MF9TQ0FOX0FVWF9BREMsIEFESVMxNjI0MF9BVVhfQURDLCBOVUxMKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUl9TQ0FOX0VMX1RZUEUoaW4wLCB1LCAxMCwgMTYpOwotc3RhdGljIElJT19TQ0FOX0VMX0ModGVtcCwgQURJUzE2MjQwX1NDQU5fVEVNUCwgQURJUzE2MjQwX1RFTVBfT1VULCBOVUxMKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUl9TQ0FOX0VMX1RZUEUodGVtcCwgdSwgMTAsIDE2KTsKLXN0YXRpYyBJSU9fU0NBTl9FTF9USU1FU1RBTVAoNik7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfU0NBTl9FTF9UWVBFKHRpbWVzdGFtcCwgcywgNjQsIDY0KTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkaXMxNjI0MF9zY2FuX2VsX2F0dHJzW10gPSB7Ci0JJmlpb19zY2FuX2VsX2luX3N1cHBseS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbl9zdXBwbHlfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW5fc3VwcGx5X3R5cGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfYWNjZWxfeC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9hY2NlbF94X2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2FjY2VsX3kuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfYWNjZWxfeV9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9hY2NlbF96LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2FjY2VsX3pfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfYWNjZWxfdHlwZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjAuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4wX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luMF90eXBlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX3RlbXAuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfdGVtcF9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl90ZW1wX3R5cGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfdGltZXN0YW1wLmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX3RpbWVzdGFtcF9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl90aW1lc3RhbXBfdHlwZS5kZXZfYXR0ci5hdHRyLAotCU5VTEwsCi19OwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZGlzMTYyNDBfc2Nhbl9lbF9ncm91cCA9IHsKLQkuYXR0cnMgPSBhZGlzMTYyNDBfc2Nhbl9lbF9hdHRycywKLQkubmFtZSA9ICJzY2FuX2VsZW1lbnRzIiwKLX07Ci0KLS8qKgotICogYWRpczE2MjQwX3BvbGxfZnVuY190aCgpIHRvcCBoYWxmIGludGVycnVwdCBoYW5kbGVyIGNhbGxlZCBieSB0cmlnZ2VyCi0gKiBAcHJpdmF0ZV9kYXRhOglpaW9fZGV2Ci0gKiovCi1zdGF0aWMgdm9pZCBhZGlzMTYyNDBfcG9sbF9mdW5jX3RoKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsIHM2NCB0aW1lKQotewotCXN0cnVjdCBhZGlzMTYyNDBfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOwotCXN0LT5sYXN0X3RpbWVzdGFtcCA9IHRpbWU7Ci0Jc2NoZWR1bGVfd29yaygmc3QtPndvcmtfdHJpZ2dlcl90b19yaW5nKTsKLX0KLQogLyoqCiAgKiBhZGlzMTYyNDBfcmVhZF9yaW5nX2RhdGEoKSByZWFkIGRhdGEgcmVnaXN0ZXJzIHdoaWNoIHdpbGwgYmUgcGxhY2VkIGludG8gcmluZwogICogQGRldjogZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBjaGlsZCBvZiBhY3R1YWwgZGV2aWNlIChpaW9fZGV2IG9yIGlpb190cmlnKQpAQCAtMTEyLDU2ICs1OSw1NiBAQAogCXJldHVybiByZXQ7CiB9CiAKLQotc3RhdGljIHZvaWQgYWRpczE2MjQwX3RyaWdnZXJfYmhfdG9fcmluZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmtfcykKK3N0YXRpYyBpcnFyZXR1cm5fdCBhZGlzMTYyNDBfdHJpZ2dlcl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKnApCiB7Ci0Jc3RydWN0IGFkaXMxNjI0MF9zdGF0ZSAqc3QKLQkJPSBjb250YWluZXJfb2Yod29ya19zLCBzdHJ1Y3QgYWRpczE2MjQwX3N0YXRlLAotCQkJCXdvcmtfdHJpZ2dlcl90b19yaW5nKTsKLQlzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nID0gc3QtPmluZGlvX2Rldi0+cmluZzsKKwlzdHJ1Y3QgaWlvX3BvbGxfZnVuYyAqcGYgPSBwOworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBwZi0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhZGlzMTYyNDBfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOworCXN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcgPSBpbmRpb19kZXYtPnJpbmc7CiAKIAlpbnQgaSA9IDA7CiAJczE2ICpkYXRhOwotCXNpemVfdCBkYXRhc2l6ZSA9IHJpbmctPmFjY2Vzcy5nZXRfYnl0ZXNfcGVyX2RhdHVtKHJpbmcpOworCXNpemVfdCBkYXRhc2l6ZSA9IHJpbmctPmFjY2Vzcy0+Z2V0X2J5dGVzX3Blcl9kYXR1bShyaW5nKTsKIAotCWRhdGEgPSBrbWFsbG9jKGRhdGFzaXplICwgR0ZQX0tFUk5FTCk7CisJZGF0YSA9IGttYWxsb2MoZGF0YXNpemUsIEdGUF9LRVJORUwpOwogCWlmIChkYXRhID09IE5VTEwpIHsKIAkJZGV2X2Vycigmc3QtPnVzLT5kZXYsICJtZW1vcnkgYWxsb2MgZmFpbGVkIGluIHJpbmcgYmgiKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlpZiAocmluZy0+c2Nhbl9jb3VudCkKLQkJaWYgKGFkaXMxNjI0MF9yZWFkX3JpbmdfZGF0YSgmc3QtPmluZGlvX2Rldi0+ZGV2LCBzdC0+cngpID49IDApCi0JCQlmb3IgKDsgaSA8IHJpbmctPnNjYW5fY291bnQ7IGkrKykKLQkJCQlkYXRhW2ldID0gYmUxNl90b19jcHVwKAotCQkJCQkoX19iZTE2ICopJihzdC0+cnhbaSoyXSkpOworCWlmIChyaW5nLT5zY2FuX2NvdW50ICYmCisJICAgIGFkaXMxNjI0MF9yZWFkX3JpbmdfZGF0YSgmc3QtPmluZGlvX2Rldi0+ZGV2LCBzdC0+cngpID49IDApCisJCWZvciAoOyBpIDwgcmluZy0+c2Nhbl9jb3VudDsgaSsrKQorCQkJZGF0YVtpXSA9IGJlMTZfdG9fY3B1cCgoX19iZTE2ICopJihzdC0+cnhbaSoyXSkpOwogCiAJLyogR3VhcmFudGVlZCB0byBiZSBhbGlnbmVkIHdpdGggOCBieXRlIGJvdW5kYXJ5ICovCiAJaWYgKHJpbmctPnNjYW5fdGltZXN0YW1wKQotCQkqKChzNjQgKikoZGF0YSArICgoaSArIDMpLzQpKjQpKSA9IHN0LT5sYXN0X3RpbWVzdGFtcDsKKwkJKigoczY0ICopKGRhdGEgKyAoKGkgKyAzKS80KSo0KSkgPSBwZi0+dGltZXN0YW1wOwogCi0JcmluZy0+YWNjZXNzLnN0b3JlX3RvKHJpbmcsCi0JCQkodTggKilkYXRhLAotCQkJc3QtPmxhc3RfdGltZXN0YW1wKTsKKwlyaW5nLT5hY2Nlc3MtPnN0b3JlX3RvKHJpbmcsICh1OCAqKWRhdGEsIHBmLT50aW1lc3RhbXApOwogCiAJaWlvX3RyaWdnZXJfbm90aWZ5X2RvbmUoc3QtPmluZGlvX2Rldi0+dHJpZyk7CiAJa2ZyZWUoZGF0YSk7CiAKLQlyZXR1cm47CisJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCiB2b2lkIGFkaXMxNjI0MF91bmNvbmZpZ3VyZV9yaW5nKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCiB7Ci0Ja2ZyZWUoaW5kaW9fZGV2LT5wb2xsZnVuYyk7CisJaWlvX2RlYWxsb2NfcG9sbGZ1bmMoaW5kaW9fZGV2LT5wb2xsZnVuYyk7CiAJaWlvX3N3X3JiX2ZyZWUoaW5kaW9fZGV2LT5yaW5nKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9fcmluZ19zZXR1cF9vcHMgYWRpczE2MjQwX3Jpbmdfc2V0dXBfb3BzID0geworCS5wcmVlbmFibGUgPSAmaWlvX3N3X3JpbmdfcHJlZW5hYmxlLAorCS5wb3N0ZW5hYmxlID0gJmlpb190cmlnZ2VyZWRfcmluZ19wb3N0ZW5hYmxlLAorCS5wcmVkaXNhYmxlID0gJmlpb190cmlnZ2VyZWRfcmluZ19wcmVkaXNhYmxlLAorfTsKKwogaW50IGFkaXMxNjI0MF9jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQogewogCWludCByZXQgPSAwOwotCXN0cnVjdCBhZGlzMTYyNDBfc3RhdGUgKnN0ID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKIAlzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nOwotCUlOSVRfV09SSygmc3QtPndvcmtfdHJpZ2dlcl90b19yaW5nLCBhZGlzMTYyNDBfdHJpZ2dlcl9iaF90b19yaW5nKTsKIAogCXJpbmcgPSBpaW9fc3dfcmJfYWxsb2NhdGUoaW5kaW9fZGV2KTsKIAlpZiAoIXJpbmcpIHsKQEAgLTE3MCwyNiArMTE3LDMxIEBACiAJfQogCWluZGlvX2Rldi0+cmluZyA9IHJpbmc7CiAJLyogRWZmZWN0aXZlbHkgc2VsZWN0IHRoZSByaW5nIGJ1ZmZlciBpbXBsZW1lbnRhdGlvbiAqLwotCWlpb19yaW5nX3N3X3JlZ2lzdGVyX2Z1bmNzKCZyaW5nLT5hY2Nlc3MpOworCXJpbmctPmFjY2VzcyA9ICZyaW5nX3N3X2FjY2Vzc19mdW5jczsKIAlyaW5nLT5icGUgPSAyOwotCXJpbmctPnNjYW5fZWxfYXR0cnMgPSAmYWRpczE2MjQwX3NjYW5fZWxfZ3JvdXA7CiAJcmluZy0+c2Nhbl90aW1lc3RhbXAgPSB0cnVlOwotCXJpbmctPnByZWVuYWJsZSA9ICZpaW9fc3dfcmluZ19wcmVlbmFibGU7Ci0JcmluZy0+cG9zdGVuYWJsZSA9ICZpaW9fdHJpZ2dlcmVkX3JpbmdfcG9zdGVuYWJsZTsKLQlyaW5nLT5wcmVkaXNhYmxlID0gJmlpb190cmlnZ2VyZWRfcmluZ19wcmVkaXNhYmxlOworCXJpbmctPnNldHVwX29wcyA9ICZhZGlzMTYyNDBfcmluZ19zZXR1cF9vcHM7CiAJcmluZy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCS8qIFNldCBkZWZhdWx0IHNjYW4gbW9kZSAqLwotCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIGlpb19zY2FuX2VsX2luX3N1cHBseS5udW1iZXIpOwotCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIGlpb19zY2FuX2VsX2FjY2VsX3gubnVtYmVyKTsKLQlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCBpaW9fc2Nhbl9lbF9hY2NlbF95Lm51bWJlcik7Ci0JaWlvX3NjYW5fbWFza19zZXQocmluZywgaWlvX3NjYW5fZWxfYWNjZWxfei5udW1iZXIpOwotCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIGlpb19zY2FuX2VsX3RlbXAubnVtYmVyKTsKLQlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCBpaW9fc2Nhbl9lbF9pbjAubnVtYmVyKTsKKwlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCBBRElTMTYyNDBfU0NBTl9TVVBQTFkpOworCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIEFESVMxNjI0MF9TQ0FOX0FDQ19YKTsKKwlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCBBRElTMTYyNDBfU0NBTl9BQ0NfWSk7CisJaWlvX3NjYW5fbWFza19zZXQocmluZywgQURJUzE2MjQwX1NDQU5fQUNDX1opOworCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIEFESVMxNjI0MF9TQ0FOX0FVWF9BREMpOworCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIEFESVMxNjI0MF9TQ0FOX1RFTVApOwogCi0JcmV0ID0gaWlvX2FsbG9jX3BvbGxmdW5jKGluZGlvX2RldiwgTlVMTCwgJmFkaXMxNjI0MF9wb2xsX2Z1bmNfdGgpOwotCWlmIChyZXQpCisJaW5kaW9fZGV2LT5wb2xsZnVuYyA9IGlpb19hbGxvY19wb2xsZnVuYygmaWlvX3BvbGxmdW5jX3N0b3JlX3RpbWUsCisJCQkJCQkgJmFkaXMxNjI0MF90cmlnZ2VyX2hhbmRsZXIsCisJCQkJCQkgSVJRRl9PTkVTSE9ULAorCQkJCQkJIGluZGlvX2RldiwKKwkJCQkJCSAiJXNfY29uc3VtZXIlZCIsCisJCQkJCQkgaW5kaW9fZGV2LT5uYW1lLAorCQkJCQkJIGluZGlvX2Rldi0+aWQpOworCWlmIChpbmRpb19kZXYtPnBvbGxmdW5jID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9paW9fc3dfcmJfZnJlZTsKKwl9CiAKIAlpbmRpb19kZXYtPm1vZGVzIHw9IElORElPX1JJTkdfVFJJR0dFUkVEOwogCXJldHVybiAwOwpAQCAtMTk4LDQgKzE1MCwzIEBACiAJaWlvX3N3X3JiX2ZyZWUoaW5kaW9fZGV2LT5yaW5nKTsKIAlyZXR1cm4gcmV0OwogfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjI0MF90cmlnZ2VyLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjI0MF90cmlnZ2VyLmMKaW5kZXggNmNiODY4MS4uZWNlM2NhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyNDBfdHJpZ2dlci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjQwX3RyaWdnZXIuYwpAQCAtMTUsMzIgKzE1LDEyIEBACiAvKioKICAqIGFkaXMxNjI0MF9kYXRhX3JkeV90cmlnX3BvbGwoKSB0aGUgZXZlbnQgaGFuZGxlciBmb3IgdGhlIGRhdGEgcmR5IHRyaWcKICAqKi8KLXN0YXRpYyBpbnQgYWRpczE2MjQwX2RhdGFfcmR5X3RyaWdfcG9sbChzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8sCi0JCQkJICAgICAgIGludCBpbmRleCwKLQkJCQkgICAgICAgczY0IHRpbWVzdGFtcCwKLQkJCQkgICAgICAgaW50IG5vX3Rlc3QpCitzdGF0aWMgaXJxcmV0dXJuX3QgYWRpczE2MjQwX2RhdGFfcmR5X3RyaWdfcG9sbChpbnQgaXJxLCB2b2lkICp0cmlnKQogewotCXN0cnVjdCBhZGlzMTYyNDBfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShkZXZfaW5mbyk7Ci0Jc3RydWN0IGlpb190cmlnZ2VyICp0cmlnID0gc3QtPnRyaWc7Ci0KLQlpaW9fdHJpZ2dlcl9wb2xsKHRyaWcsIHRpbWVzdGFtcCk7Ci0KKwlpaW9fdHJpZ2dlcl9wb2xsKHRyaWcsIGlpb19nZXRfdGltZV9ucygpKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLUlJT19FVkVOVF9TSChkYXRhX3JkeV90cmlnLCAmYWRpczE2MjQwX2RhdGFfcmR5X3RyaWdfcG9sbCk7Ci0KLXN0YXRpYyBJSU9fVFJJR0dFUl9OQU1FX0FUVFI7Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZGlzMTYyNDBfdHJpZ2dlcl9hdHRyc1tdID0gewotCSZkZXZfYXR0cl9uYW1lLmF0dHIsCi0JTlVMTCwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFkaXMxNjI0MF90cmlnZ2VyX2F0dHJfZ3JvdXAgPSB7Ci0JLmF0dHJzID0gYWRpczE2MjQwX3RyaWdnZXJfYXR0cnMsCi19OwotCiAvKioKICAqIGFkaXMxNjI0MF9kYXRhX3JkeV90cmlnZ2VyX3NldF9zdGF0ZSgpIHNldCBkYXRhcmR5IGludGVycnVwdCBzdGF0ZQogICoqLwpAQCAtNDksMzEgKzI5LDkgQEAKIHsKIAlzdHJ1Y3QgYWRpczE2MjQwX3N0YXRlICpzdCA9IHRyaWctPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gc3QtPmluZGlvX2RldjsKLQlpbnQgcmV0ID0gMDsKIAogCWRldl9kYmcoJmluZGlvX2Rldi0+ZGV2LCAiJXMgKCVkKVxuIiwgX19mdW5jX18sIHN0YXRlKTsKLQlyZXQgPSBhZGlzMTYyNDBfc2V0X2lycSgmc3QtPmluZGlvX2Rldi0+ZGV2LCBzdGF0ZSk7Ci0JaWYgKHN0YXRlID09IGZhbHNlKSB7Ci0JCWlpb19yZW1vdmVfZXZlbnRfZnJvbV9saXN0KCZpaW9fZXZlbnRfZGF0YV9yZHlfdHJpZywKLQkJCQkJICAgJmluZGlvX2Rldi0+aW50ZXJydXB0c1swXQotCQkJCQkgICAtPmV2X2xpc3QpOwotCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCX0gZWxzZSB7Ci0JCWlpb19hZGRfZXZlbnRfdG9fbGlzdCgmaWlvX2V2ZW50X2RhdGFfcmR5X3RyaWcsCi0JCQkJICAgICAgJmluZGlvX2Rldi0+aW50ZXJydXB0c1swXS0+ZXZfbGlzdCk7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogYWRpczE2MjQwX3RyaWdfdHJ5X3JlZW4oKSB0cnkgcmVuYWJsaW5nIGlycSBmb3IgZGF0YSByZHkgdHJpZ2dlcgotICogQHRyaWc6CXRoZSBkYXRhcmR5IHRyaWdnZXIKLSAqKi8KLXN0YXRpYyBpbnQgYWRpczE2MjQwX3RyaWdfdHJ5X3JlZW4oc3RydWN0IGlpb190cmlnZ2VyICp0cmlnKQotewotCXN0cnVjdCBhZGlzMTYyNDBfc3RhdGUgKnN0ID0gdHJpZy0+cHJpdmF0ZV9kYXRhOwotCWVuYWJsZV9pcnEoc3QtPnVzLT5pcnEpOwotCXJldHVybiAwOworCXJldHVybiBhZGlzMTYyNDBfc2V0X2lycShzdC0+aW5kaW9fZGV2LCBzdGF0ZSk7CiB9CiAKIGludCBhZGlzMTYyNDBfcHJvYmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQpAQCAtODEsMzQgKzM5LDM4IEBACiAJaW50IHJldDsKIAlzdHJ1Y3QgYWRpczE2MjQwX3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CiAKLQlzdC0+dHJpZyA9IGlpb19hbGxvY2F0ZV90cmlnZ2VyKCk7Ci0Jc3QtPnRyaWctPm5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwKLQkJCQkgICAiYWRpczE2MjQwLWRldiVkIiwKLQkJCQkgICBpbmRpb19kZXYtPmlkKTsKLQlpZiAoIXN0LT50cmlnLT5uYW1lKSB7CisJc3QtPnRyaWcgPSBpaW9fYWxsb2NhdGVfdHJpZ2dlcigiYWRpczE2MjQwLWRldiVkIiwgaW5kaW9fZGV2LT5pZCk7CisJaWYgKHN0LT50cmlnID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJvcl9mcmVlX3RyaWc7CisJCWdvdG8gZXJyb3JfcmV0OwogCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKHN0LT51cy0+aXJxLAorCQkJICBhZGlzMTYyNDBfZGF0YV9yZHlfdHJpZ19wb2xsLAorCQkJICBJUlFGX1RSSUdHRVJfUklTSU5HLAorCQkJICAiYWRpczE2MjQwIiwKKwkJCSAgc3QtPnRyaWcpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3JfZnJlZV90cmlnOworCiAJc3QtPnRyaWctPmRldi5wYXJlbnQgPSAmc3QtPnVzLT5kZXY7CiAJc3QtPnRyaWctPm93bmVyID0gVEhJU19NT0RVTEU7CiAJc3QtPnRyaWctPnByaXZhdGVfZGF0YSA9IHN0OwogCXN0LT50cmlnLT5zZXRfdHJpZ2dlcl9zdGF0ZSA9ICZhZGlzMTYyNDBfZGF0YV9yZHlfdHJpZ2dlcl9zZXRfc3RhdGU7Ci0Jc3QtPnRyaWctPnRyeV9yZWVuYWJsZSA9ICZhZGlzMTYyNDBfdHJpZ190cnlfcmVlbjsKLQlzdC0+dHJpZy0+Y29udHJvbF9hdHRycyA9ICZhZGlzMTYyNDBfdHJpZ2dlcl9hdHRyX2dyb3VwOwogCXJldCA9IGlpb190cmlnZ2VyX3JlZ2lzdGVyKHN0LT50cmlnKTsKIAogCS8qIHNlbGVjdCBkZWZhdWx0IHRyaWdnZXIgKi8KIAlpbmRpb19kZXYtPnRyaWcgPSBzdC0+dHJpZzsKIAlpZiAocmV0KQotCQlnb3RvIGVycm9yX2ZyZWVfdHJpZ19uYW1lOworCQlnb3RvIGVycm9yX2ZyZWVfaXJxOwogCiAJcmV0dXJuIDA7CiAKLWVycm9yX2ZyZWVfdHJpZ19uYW1lOgotCWtmcmVlKHN0LT50cmlnLT5uYW1lKTsKK2Vycm9yX2ZyZWVfaXJxOgorCWZyZWVfaXJxKHN0LT51cy0+aXJxLCBzdC0+dHJpZyk7CiBlcnJvcl9mcmVlX3RyaWc6CiAJaWlvX2ZyZWVfdHJpZ2dlcihzdC0+dHJpZyk7Ci0KK2Vycm9yX3JldDoKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMTcsNiArNzksNiBAQAogCXN0cnVjdCBhZGlzMTYyNDBfc3RhdGUgKnN0YXRlID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKIAogCWlpb190cmlnZ2VyX3VucmVnaXN0ZXIoc3RhdGUtPnRyaWcpOwotCWtmcmVlKHN0YXRlLT50cmlnLT5uYW1lKTsKKwlmcmVlX2lycShzdGF0ZS0+dXMtPmlycSwgc3RhdGUtPnRyaWcpOwogCWlpb19mcmVlX3RyaWdnZXIoc3RhdGUtPnRyaWcpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9reHNkOS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9reHNkOS5jCmluZGV4IDc5ZjU3OTUuLjk3MzE1NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwva3hzZDkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2t4c2Q5LmMKQEAgLTMwMSw2ICszMDEsMTEgQEAKIAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9faW5mbyBreHNkOV9pbmZvID0geworCS5hdHRycyA9ICZreHNkOV9hdHRyaWJ1dGVfZ3JvdXAsCisJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRSwKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGt4c2Q5X3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CiAKQEAgLTMyOSwxOSArMzM0LDE0IEBACiAKIAlzdC0+dXMgPSBzcGk7CiAJbXV0ZXhfaW5pdCgmc3QtPmJ1Zl9sb2NrKTsKLQlzdC0+aW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgpOworCXN0LT5pbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKDApOwogCWlmIChzdC0+aW5kaW9fZGV2ID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9mcmVlX3R4OwogCX0KIAlzdC0+aW5kaW9fZGV2LT5kZXYucGFyZW50ID0gJnNwaS0+ZGV2OwotCS8qIGZvciBub3cgKi8KLQlzdC0+aW5kaW9fZGV2LT5udW1faW50ZXJydXB0X2xpbmVzID0gMDsKLQlzdC0+aW5kaW9fZGV2LT5ldmVudF9hdHRycyA9IE5VTEw7Ci0KLQlzdC0+aW5kaW9fZGV2LT5hdHRycyA9ICZreHNkOV9hdHRyaWJ1dGVfZ3JvdXA7CisJc3QtPmluZGlvX2Rldi0+aW5mbyA9ICZreHNkOV9pbmZvOwogCXN0LT5pbmRpb19kZXYtPmRldl9kYXRhID0gKHZvaWQgKikoc3QpOwotCXN0LT5pbmRpb19kZXYtPmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRTsKIAlzdC0+aW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOwogCiAJcmV0ID0gaWlvX2RldmljZV9yZWdpc3RlcihzdC0+aW5kaW9fZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvbGlzM2wwMmRxLmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2xpczNsMDJkcS5oCmluZGV4IDExNDAyMTguLjE4YjIzYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvbGlzM2wwMmRxLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9saXMzbDAyZHEuaApAQCAtMTQ4LDM4ICsxNDgsMzEgQEAKICNkZWZpbmUgTElTM0wwMkRRX01BWF9SWCAxMgogLyoqCiAgKiBzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlIC0gZGV2aWNlIGluc3RhbmNlIHNwZWNpZmljIGRhdGEKLSAqIEBoZWxwZXI6CQlkYXRhIGFuZCBmdW5jIHBvaW50ZXIgYWxsb3dpbmcgZ2VuZXJpYyBmdW5jdGlvbnMKICAqIEB1czoJCQlhY3R1YWwgc3BpX2RldmljZQotICogQHdvcmtfdGhyZXNoOgliaCBmb3IgdGhyZXNob2xkIGV2ZW50cwotICogQHRocmVzaF90aW1lc3RhbXA6CXRpbWVzdGFtcCBmb3IgdGhyZXNob2xkIGludGVycnVwdHMuCi0gKiBAaW50ZXI6CQl1c2VkIHRvIGNoZWNrIGlmIG5ldyBpbnRlcnJ1cHQgaGFzIGJlZW4gdHJpZ2dlcmVkCiAgKiBAdHJpZzoJCWRhdGEgcmVhZHkgdHJpZ2dlciByZWdpc3RlcmVkIHdpdGggaWlvCiAgKiBAdHg6CQkJdHJhbnNtaXQgYnVmZmVyCiAgKiBAcng6CQkJcmVjZWl2ZSBidWZmZXIKICAqIEBidWZfbG9jazoJCW11dGV4IHRvIHByb3RlY3QgdHggYW5kIHJ4CiAgKiovCiBzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlIHsKLQlzdHJ1Y3QgaWlvX3N3X3JpbmdfaGVscGVyX3N0YXRlCWhlbHA7CiAJc3RydWN0IHNwaV9kZXZpY2UJCSp1czsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCXdvcmtfdGhyZXNoOwotCXM2NAkJCQl0aHJlc2hfdGltZXN0YW1wOwotCWJvb2wJCQkJaW50ZXI7CiAJc3RydWN0IGlpb190cmlnZ2VyCQkqdHJpZzsKLQl1OAkJCQkqdHg7Ci0JdTgJCQkJKnJ4OwogCXN0cnVjdCBtdXRleAkJCWJ1Zl9sb2NrOworCWJvb2wJCQkJdHJpZ2dlcl9vbjsKKworCXU4CXR4W0xJUzNMMDJEUV9NQVhfUlhdIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKwl1OAlyeFtMSVMzTDAyRFFfTUFYX1JYXSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CiB9OwogCi0jZGVmaW5lIGxpczNsMDJkcV9oX3RvX3MoX2gpCQkJCVwKLQljb250YWluZXJfb2YoX2gsIHN0cnVjdCBsaXMzbDAyZHFfc3RhdGUsIGhlbHApCi0KLWludCBsaXMzbDAyZHFfc3BpX3JlYWRfcmVnXzgoc3RydWN0IGRldmljZSAqZGV2LAoraW50IGxpczNsMDJkcV9zcGlfcmVhZF9yZWdfOChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAogCQkJICAgICB1OCByZWdfYWRkcmVzcywKIAkJCSAgICAgdTggKnZhbCk7CiAKLWludCBsaXMzbDAyZHFfc3BpX3dyaXRlX3JlZ184KHN0cnVjdCBkZXZpY2UgKmRldiwKK2ludCBsaXMzbDAyZHFfc3BpX3dyaXRlX3JlZ184KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCiAJCQkgICAgICB1OCByZWdfYWRkcmVzcywKLQkJCSAgICAgIHU4ICp2YWwpOworCQkJICAgICAgdTggdmFsKTsKKworaW50IGxpczNsMDJkcV9kaXNhYmxlX2FsbF9ldmVudHMoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7CiAKICNpZmRlZiBDT05GSUdfSUlPX1JJTkdfQlVGRkVSCiAvKiBBdCB0aGUgbW9tZW50IHRyaWdnZXJzIGFyZSBvbmx5IHVzZWQgZm9yIHJpbmcgYnVmZmVyCkBAIC0xODgsOSArMTgxLDkgQEAKIHZvaWQgbGlzM2wwMmRxX3JlbW92ZV90cmlnZ2VyKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwogaW50IGxpczNsMDJkcV9wcm9iZV90cmlnZ2VyKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwogCi1zc2l6ZV90IGxpczNsMDJkcV9yZWFkX2FjY2VsX2Zyb21fcmluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCSAgICAgICBjaGFyICpidWYpOworc3NpemVfdCBsaXMzbDAyZHFfcmVhZF9hY2NlbF9mcm9tX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZywKKwkJCQkgICAgICAgaW50IGluZGV4LAorCQkJCSAgICAgICBpbnQgKnZhbCk7CiAKIAogaW50IGxpczNsMDJkcV9jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKQEAgLTE5OSwxNCArMTkyLDE4IEBACiAjaWZkZWYgQ09ORklHX0xJUzNMMDJEUV9CVUZfUklOR19TVwogI2RlZmluZSBsaXMzbDAyZHFfZnJlZV9idWYgaWlvX3N3X3JiX2ZyZWUKICNkZWZpbmUgbGlzM2wwMmRxX2FsbG9jX2J1ZiBpaW9fc3dfcmJfYWxsb2NhdGUKLSNkZWZpbmUgbGlzM2wwMmRxX3JlZ2lzdGVyX2J1Zl9mdW5jcyBpaW9fcmluZ19zd19yZWdpc3Rlcl9mdW5jcworI2RlZmluZSBsaXMzbDAyZHFfYWNjZXNzX2Z1bmNzIHJpbmdfc3dfYWNjZXNzX2Z1bmNzCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTElTM0wwMkRRX0JVRl9LRklGTwogI2RlZmluZSBsaXMzbDAyZHFfZnJlZV9idWYgaWlvX2tmaWZvX2ZyZWUKICNkZWZpbmUgbGlzM2wwMmRxX2FsbG9jX2J1ZiBpaW9fa2ZpZm9fYWxsb2NhdGUKLSNkZWZpbmUgbGlzM2wwMmRxX3JlZ2lzdGVyX2J1Zl9mdW5jcyBpaW9fa2ZpZm9fcmVnaXN0ZXJfZnVuY3MKKyNkZWZpbmUgbGlzM2wwMmRxX2FjY2Vzc19mdW5jcyBrZmlmb19hY2Nlc3NfZnVuY3MKICNlbmRpZgoraXJxcmV0dXJuX3QgbGlzM2wwMmRxX2RhdGFfcmR5X3RyaWdfcG9sbChpbnQgaXJxLCB2b2lkICpwcml2YXRlKTsKKyNkZWZpbmUgbGlzM2wwMmRxX3RoIGxpczNsMDJkcV9kYXRhX3JkeV90cmlnX3BvbGwKKwogI2Vsc2UgLyogQ09ORklHX0lJT19SSU5HX0JVRkZFUiAqLworI2RlZmluZSBsaXMzbDAyZHFfdGggbGlzM2wwMmRxX25vcmluZwogCiBzdGF0aWMgaW5saW5lIHZvaWQgbGlzM2wwMmRxX3JlbW92ZV90cmlnZ2VyKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCiB7CkBAIC0yMTUsMTEgKzIxMiwxMCBAQAogewogCXJldHVybiAwOwogfQotCiBzdGF0aWMgaW5saW5lIHNzaXplX3QKLWxpczNsMDJkcV9yZWFkX2FjY2VsX2Zyb21fcmluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkgICAgICAgY2hhciAqYnVmKQorbGlzM2wwMmRxX3JlYWRfYWNjZWxfZnJvbV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcsCisJCQkgICAgICAgaW50IGluZGV4LAorCQkJICAgICAgIGludCAqdmFsKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9saXMzbDAyZHFfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9saXMzbDAyZHFfY29yZS5jCmluZGV4IDMwNjdmOTYuLmJhNWJjNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvbGlzM2wwMmRxX2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2xpczNsMDJkcV9jb3JlLmMKQEAgLTE1LDIwICsxNSwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAogI2luY2x1ZGUgIi4uL2lpby5oIgogI2luY2x1ZGUgIi4uL3N5c2ZzLmgiCiAjaW5jbHVkZSAiLi4vcmluZ19nZW5lcmljLmgiCi0jaW5jbHVkZSAiLi4vcmluZ19zdy5oIgogCiAjaW5jbHVkZSAiYWNjZWwuaCIKIApAQCAtMzgsMjcgKzM0LDMxIEBACiAgKiBJdCdzIGluIHRoZSBsaWtlbHkgdG8gYmUgYWRkZWQgY29tbWVudCBhdCB0aGUgdG9wIG9mIHNwaS5oLgogICogVGhpcyBtZWFucyB0aGF0IHVzZSBjYW5ub3QgYmUgbWFkZSBvZiBzcGlfd3JpdGUgZXRjLgogICovCisvKiBkaXJlY3QgY29weSBvZiB0aGUgaXJxX2RlZmF1bHRfcHJpbWFyeV9oYW5kbGVyICovCisjaWZuZGVmIENPTkZJR19JSU9fUklOR19CVUZGRVIKK3N0YXRpYyBpcnFyZXR1cm5fdCBsaXMzbDAyZHFfbm9yaW5nKGludCBpcnEsIHZvaWQgKnByaXZhdGUpCit7CisJcmV0dXJuIElSUV9XQUtFX1RIUkVBRDsKK30KKyNlbmRpZgogCiAvKioKICAqIGxpczNsMDJkcV9zcGlfcmVhZF9yZWdfOCgpIC0gcmVhZCBzaW5nbGUgYnl0ZSBmcm9tIGEgc2luZ2xlIHJlZ2lzdGVyCi0gKiBAZGV2OiBkZXZpY2UgYXNvc2NpYXRlZCB3aXRoIGNoaWxkIG9mIGFjdHVhbCBkZXZpY2UgKGlpb19kZXYgb3IgaWlvX3RyaWcpCisgKiBAaW5kaW9fZGV2OiBpaW9fZGV2IGZvciB0aGlzIGFjdHVhbCBkZXZpY2UKICAqIEByZWdfYWRkcmVzczogdGhlIGFkZHJlc3Mgb2YgdGhlIHJlZ2lzdGVyIHRvIGJlIHJlYWQKICAqIEB2YWw6IHBhc3MgYmFjayB0aGUgcmVzdWx0aW5nIHZhbHVlCiAgKiovCi1pbnQgbGlzM2wwMmRxX3NwaV9yZWFkX3JlZ184KHN0cnVjdCBkZXZpY2UgKmRldiwgdTggcmVnX2FkZHJlc3MsIHU4ICp2YWwpCitpbnQgbGlzM2wwMmRxX3NwaV9yZWFkX3JlZ184KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCisJCQkgICAgIHU4IHJlZ19hZGRyZXNzLCB1OCAqdmFsKQogewotCWludCByZXQ7CisJc3RydWN0IGxpczNsMDJkcV9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwogCXN0cnVjdCBzcGlfbWVzc2FnZSBtc2c7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBpaW9fc3dfcmluZ19oZWxwZXJfc3RhdGUgKmggPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7Ci0Jc3RydWN0IGxpczNsMDJkcV9zdGF0ZSAqc3QgPSBsaXMzbDAyZHFfaF90b19zKGgpOwotCisJaW50IHJldDsKIAlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHhmZXIgPSB7CiAJCS50eF9idWYgPSBzdC0+dHgsCiAJCS5yeF9idWYgPSBzdC0+cngsCiAJCS5iaXRzX3Blcl93b3JkID0gOCwKIAkJLmxlbiA9IDIsCi0JCS5jc19jaGFuZ2UgPSAxLAogCX07CiAKIAltdXRleF9sb2NrKCZzdC0+YnVmX2xvY2spOwpAQCAtNzYsMzQgKzc2LDIxIEBACiAKIC8qKgogICogbGlzM2wwMmRxX3NwaV93cml0ZV9yZWdfOCgpIC0gd3JpdGUgc2luZ2xlIGJ5dGUgdG8gYSByZWdpc3RlcgotICogQGRldjogZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBjaGlsZCBvZiBhY3R1YWwgZGV2aWNlIChpaW9fZGV2IG9yIGlpb190cmlnKQorICogQGluZGlvX2RldjogaWlvX2RldiBmb3IgdGhpcyBkZXZpY2UKICAqIEByZWdfYWRkcmVzczogdGhlIGFkZHJlc3Mgb2YgdGhlIHJlZ2lzdGVyIHRvIGJlIHdyaXR0ZW4KICAqIEB2YWw6IHRoZSB2YWx1ZSB0byB3cml0ZQogICoqLwotaW50IGxpczNsMDJkcV9zcGlfd3JpdGVfcmVnXzgoc3RydWN0IGRldmljZSAqZGV2LAoraW50IGxpczNsMDJkcV9zcGlfd3JpdGVfcmVnXzgoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKIAkJCSAgICAgIHU4IHJlZ19hZGRyZXNzLAotCQkJICAgICAgdTggKnZhbCkKKwkJCSAgICAgIHU4IHZhbCkKIHsKIAlpbnQgcmV0OwotCXN0cnVjdCBzcGlfbWVzc2FnZSBtc2c7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBpaW9fc3dfcmluZ19oZWxwZXJfc3RhdGUgKmgKLQkJPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7Ci0Jc3RydWN0IGxpczNsMDJkcV9zdGF0ZSAqc3QgPSBsaXMzbDAyZHFfaF90b19zKGgpOwotCXN0cnVjdCBzcGlfdHJhbnNmZXIgeGZlciA9IHsKLQkJLnR4X2J1ZiA9IHN0LT50eCwKLQkJLmJpdHNfcGVyX3dvcmQgPSA4LAotCQkubGVuID0gMiwKLQkJLmNzX2NoYW5nZSA9IDEsCi0JfTsKKwlzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CiAKIAltdXRleF9sb2NrKCZzdC0+YnVmX2xvY2spOwogCXN0LT50eFswXSA9IExJUzNMMDJEUV9XUklURV9SRUcocmVnX2FkZHJlc3MpOwotCXN0LT50eFsxXSA9ICp2YWw7Ci0KLQlzcGlfbWVzc2FnZV9pbml0KCZtc2cpOwotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ4ZmVyLCAmbXNnKTsKLQlyZXQgPSBzcGlfc3luYyhzdC0+dXMsICZtc2cpOworCXN0LT50eFsxXSA9IHZhbDsKKwlyZXQgPSBzcGlfd3JpdGUoc3QtPnVzLCBzdC0+dHgsIDIpOwogCW11dGV4X3VubG9jaygmc3QtPmJ1Zl9sb2NrKTsKIAogCXJldHVybiByZXQ7CkBAIC0xMTEsMjEgKzk4LDE4IEBACiAKIC8qKgogICogbGlzbDMwMmRxX3NwaV93cml0ZV9yZWdfczE2KCkgLSB3cml0ZSAyIGJ5dGVzIHRvIGEgcGFpciBvZiByZWdpc3RlcnMKLSAqIEBkZXY6IGRldmljZSBhc3NvY2lhdGVkIHdpdGggY2hpbGQgb2YgYWN0dWFsIGRldmljZSAoaWlvX2RldiBvciBpaW9fdHJpZykKLSAqIEByZWdfYWRkcmVzczogdGhlIGFkZHJlc3Mgb2YgdGhlIGxvd2VyIG9mIHRoZSB0d28gcmVnaXN0ZXJzLiBTZWNvbmQgcmVnaXN0ZXIKLSAqICAgICAgICAgICAgICAgaXMgYXNzdW1lZCB0byBoYXZlIGFkZHJlc3Mgb25lIGdyZWF0ZXIuCi0gKiBAdmFsOiB2YWx1ZSB0byBiZSB3cml0dGVuCisgKiBAaW5kaW9fZGV2OiBpaW9fZGV2IGZvciB0aGlzIGRldmljZQorICogQGxvd2VyX3JlZ19hZGRyZXNzOiB0aGUgYWRkcmVzcyBvZiB0aGUgbG93ZXIgb2YgdGhlIHR3byByZWdpc3RlcnMuCisgKiAgICAgICAgICAgICAgIFNlY29uZCByZWdpc3RlciBpcyBhc3N1bWVkIHRvIGhhdmUgYWRkcmVzcyBvbmUgZ3JlYXRlci4KKyAqIEB2YWx1ZTogdmFsdWUgdG8gYmUgd3JpdHRlbgogICoqLwotc3RhdGljIGludCBsaXMzbDAyZHFfc3BpX3dyaXRlX3JlZ19zMTYoc3RydWN0IGRldmljZSAqZGV2LAorc3RhdGljIGludCBsaXMzbDAyZHFfc3BpX3dyaXRlX3JlZ19zMTYoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKIAkJCQkgICAgICAgdTggbG93ZXJfcmVnX2FkZHJlc3MsCiAJCQkJICAgICAgIHMxNiB2YWx1ZSkKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBzcGlfbWVzc2FnZSBtc2c7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBpaW9fc3dfcmluZ19oZWxwZXJfc3RhdGUgKmgKLQkJPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7Ci0Jc3RydWN0IGxpczNsMDJkcV9zdGF0ZSAqc3QgPSBsaXMzbDAyZHFfaF90b19zKGgpOworCXN0cnVjdCBsaXMzbDAyZHFfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKIAlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHhmZXJzW10gPSB7IHsKIAkJCS50eF9idWYgPSBzdC0+dHgsCiAJCQkuYml0c19wZXJfd29yZCA9IDgsCkBAIC0xMzUsNyArMTE5LDYgQEAKIAkJCS50eF9idWYgPSBzdC0+dHggKyAyLAogCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAogCQkJLmxlbiA9IDIsCi0JCQkuY3NfY2hhbmdlID0gMSwKIAkJfSwKIAl9OwogCkBAIC0xNTQsMjMgKzEzNywxNSBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qKgotICogbGlzbDMwMmRxX3NwaV9yZWFkX3JlZ19zMTYoKSAtIHdyaXRlIDIgYnl0ZXMgdG8gYSBwYWlyIG9mIHJlZ2lzdGVycwotICogQGRldjogZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBjaGlsZCBvZiBhY3R1YWwgZGV2aWNlIChpaW9fZGV2IG9yIGlpb190cmlnKQotICogQHJlZ19hZGRyZXNzOiB0aGUgYWRkcmVzcyBvZiB0aGUgbG93ZXIgb2YgdGhlIHR3byByZWdpc3RlcnMuIFNlY29uZCByZWdpc3RlcgotICogICAgICAgICAgICAgICBpcyBhc3N1bWVkIHRvIGhhdmUgYWRkcmVzcyBvbmUgZ3JlYXRlci4KLSAqIEB2YWw6IHNvbWV3aGVyZSB0byBwYXNzIGJhY2sgdGhlIHZhbHVlIHJlYWQKLSAqKi8KLXN0YXRpYyBpbnQgbGlzM2wwMmRxX3NwaV9yZWFkX3JlZ19zMTYoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSAgICAgIHU4IGxvd2VyX3JlZ19hZGRyZXNzLAotCQkJCSAgICAgIHMxNiAqdmFsKQorc3RhdGljIGludCBsaXMzbDAyZHFfcmVhZF9yZWdfczE2KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCisJCQkJICB1OCBsb3dlcl9yZWdfYWRkcmVzcywKKwkJCQkgIGludCAqdmFsKQogeworCXN0cnVjdCBsaXMzbDAyZHFfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKKwogCXN0cnVjdCBzcGlfbWVzc2FnZSBtc2c7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBpaW9fc3dfcmluZ19oZWxwZXJfc3RhdGUgKmgKLQkJPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7Ci0Jc3RydWN0IGxpczNsMDJkcV9zdGF0ZSAqc3QgPSBsaXMzbDAyZHFfaF90b19zKGgpOwogCWludCByZXQ7CisJczE2IHRlbXB2YWw7CiAJc3RydWN0IHNwaV90cmFuc2ZlciB4ZmVyc1tdID0geyB7CiAJCQkudHhfYnVmID0gc3QtPnR4LAogCQkJLnJ4X2J1ZiA9IHN0LT5yeCwKQEAgLTE4MiwxNSArMTU3LDEzIEBACiAJCQkucnhfYnVmID0gc3QtPnJ4ICsgMiwKIAkJCS5iaXRzX3Blcl93b3JkID0gOCwKIAkJCS5sZW4gPSAyLAotCQkJLmNzX2NoYW5nZSA9IDEsCi0KIAkJfSwKIAl9OwogCiAJbXV0ZXhfbG9jaygmc3QtPmJ1Zl9sb2NrKTsKIAlzdC0+dHhbMF0gPSBMSVMzTDAyRFFfUkVBRF9SRUcobG93ZXJfcmVnX2FkZHJlc3MpOwogCXN0LT50eFsxXSA9IDA7Ci0Jc3QtPnR4WzJdID0gTElTM0wwMkRRX1JFQURfUkVHKGxvd2VyX3JlZ19hZGRyZXNzKzEpOworCXN0LT50eFsyXSA9IExJUzNMMDJEUV9SRUFEX1JFRyhsb3dlcl9yZWdfYWRkcmVzcyArIDEpOwogCXN0LT50eFszXSA9IDA7CiAKIAlzcGlfbWVzc2FnZV9pbml0KCZtc2cpOwpAQCAtMjAxLDE0NCArMTc0LDEzNSBAQAogCQlkZXZfZXJyKCZzdC0+dXMtPmRldiwgInByb2JsZW0gd2hlbiByZWFkaW5nIDE2IGJpdCByZWdpc3RlciIpOwogCQlnb3RvIGVycm9yX3JldDsKIAl9Ci0JKnZhbCA9IChzMTYpKHN0LT5yeFsxXSkgfCAoKHMxNikoc3QtPnJ4WzNdKSA8PCA4KTsKKwl0ZW1wdmFsID0gKHMxNikoc3QtPnJ4WzFdKSB8ICgoczE2KShzdC0+cnhbM10pIDw8IDgpOwogCisJKnZhbCA9IHRlbXB2YWw7CiBlcnJvcl9yZXQ6CiAJbXV0ZXhfdW5sb2NrKCZzdC0+YnVmX2xvY2spOwogCXJldHVybiByZXQ7CiB9CiAKLS8qKgotICogbGlzM2wwMmRxX3JlYWRfc2lnbmVkKCkgLSBhdHRyaWJ1dGUgZnVuY3Rpb24gdXNlZCBmb3IgOCBiaXQgc2lnbmVkIHZhbHVlcwotICogQGRldjogdGhlIGNoaWxkIGRldmljZSBhc3NvY2lhdGVkIHdpdGggdGhlIGlpb19kZXYgb3IgaWlvX3RyaWdnZXIKLSAqIEBhdHRyOiB0aGUgYXR0cmlidXRlIGJlaW5nIHByb2Nlc3NlZAotICogQGJ1ZjogYnVmZmVyIGludG8gd2hpY2ggcHV0IHRoZSBvdXRwdXQgc3RyaW5nCi0gKiovCi1zdGF0aWMgc3NpemVfdCBsaXMzbDAyZHFfcmVhZF9zaWduZWQoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICAgICBjaGFyICpidWYpCitlbnVtIGxpczNsMDJkcV9ybV9pbmQgeworCUxJUzNMMDJEUV9BQ0NFTCwKKwlMSVMzTDAyRFFfR0FJTiwKKwlMSVMzTDAyRFFfQklBUywKK307CisKK3N0YXRpYyB1OCBsaXMzbDAyZHFfYXhpc19tYXBbM11bM10gPSB7CisJW0xJUzNMMDJEUV9BQ0NFTF0gPSB7IExJUzNMMDJEUV9SRUdfT1VUX1hfTF9BRERSLAorCQkJICAgICAgTElTM0wwMkRRX1JFR19PVVRfWV9MX0FERFIsCisJCQkgICAgICBMSVMzTDAyRFFfUkVHX09VVF9aX0xfQUREUiB9LAorCVtMSVMzTDAyRFFfR0FJTl0gPSB7IExJUzNMMDJEUV9SRUdfR0FJTl9YX0FERFIsCisJCQkgICAgIExJUzNMMDJEUV9SRUdfR0FJTl9ZX0FERFIsCisJCQkgICAgIExJUzNMMDJEUV9SRUdfR0FJTl9aX0FERFIgfSwKKwlbTElTM0wwMkRRX0JJQVNdID0geyBMSVMzTDAyRFFfUkVHX09GRlNFVF9YX0FERFIsCisJCQkgICAgIExJUzNMMDJEUV9SRUdfT0ZGU0VUX1lfQUREUiwKKwkJCSAgICAgTElTM0wwMkRRX1JFR19PRkZTRVRfWl9BRERSIH0KK307CisKK3N0YXRpYyBpbnQgbGlzM2wwMmRxX3JlYWRfdGhyZXNoKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCisJCQkJIGludCBlLAorCQkJCSBpbnQgKnZhbCkKIHsKLQlpbnQgcmV0OwotCXM4IHZhbDsKLQlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7Ci0KLQlyZXQgPSBsaXMzbDAyZHFfc3BpX3JlYWRfcmVnXzgoZGV2LCB0aGlzX2F0dHItPmFkZHJlc3MsICh1OCAqKSZ2YWwpOwotCi0JcmV0dXJuIHJldCA/IHJldCA6IHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbCk7CisJcmV0dXJuIGxpczNsMDJkcV9yZWFkX3JlZ19zMTYoaW5kaW9fZGV2LCBMSVMzTDAyRFFfUkVHX1RIU19MX0FERFIsIHZhbCk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGxpczNsMDJkcV9yZWFkX3Vuc2lnbmVkKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICAgICAgIGNoYXIgKmJ1ZikKK3N0YXRpYyBpbnQgbGlzM2wwMmRxX3dyaXRlX3RocmVzaChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAorCQkJCSAgaW50IGV2ZW50X2NvZGUsCisJCQkJICBpbnQgdmFsKQogewotCWludCByZXQ7Ci0JdTggdmFsOwotCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKLQotCXJldCA9IGxpczNsMDJkcV9zcGlfcmVhZF9yZWdfOChkZXYsIHRoaXNfYXR0ci0+YWRkcmVzcywgJnZhbCk7Ci0KLQlyZXR1cm4gcmV0ID8gcmV0IDogc3ByaW50ZihidWYsICIlZFxuIiwgdmFsKTsKKwl1MTYgdmFsdWUgPSB2YWw7CisJcmV0dXJuIGxpczNsMDJkcV9zcGlfd3JpdGVfcmVnX3MxNihpbmRpb19kZXYsCisJCQkJCSAgIExJUzNMMDJEUV9SRUdfVEhTX0xfQUREUiwKKwkJCQkJICAgdmFsdWUpOwogfQogCi1zdGF0aWMgc3NpemVfdCBsaXMzbDAyZHFfd3JpdGVfc2lnbmVkKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkgICAgICBjb25zdCBjaGFyICpidWYsCi0JCQkJICAgICAgc2l6ZV90IGxlbikKK3N0YXRpYyBpbnQgbGlzM2wwMmRxX3dyaXRlX3JhdyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAorCQkJICAgICAgIHN0cnVjdCBpaW9fY2hhbl9zcGVjIGNvbnN0ICpjaGFuLAorCQkJICAgICAgIGludCB2YWwsCisJCQkgICAgICAgaW50IHZhbDIsCisJCQkgICAgICAgbG9uZyBtYXNrKQogewotCWxvbmcgdmFsaW47Ci0JczggdmFsOwotCWludCByZXQ7Ci0Jc3RydWN0IGlpb19kZXZfYXR0ciAqdGhpc19hdHRyID0gdG9faWlvX2Rldl9hdHRyKGF0dHIpOwotCi0JcmV0ID0gc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdmFsaW4pOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyb3JfcmV0OwotCXZhbCA9IHZhbGluOwotCXJldCA9IGxpczNsMDJkcV9zcGlfd3JpdGVfcmVnXzgoZGV2LCB0aGlzX2F0dHItPmFkZHJlc3MsICh1OCAqKSZ2YWwpOwotCi1lcnJvcl9yZXQ6Ci0JcmV0dXJuIHJldCA/IHJldCA6IGxlbjsKLX0KLQotc3RhdGljIHNzaXplX3QgbGlzM2wwMmRxX3dyaXRlX3Vuc2lnbmVkKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJCWNvbnN0IGNoYXIgKmJ1ZiwKLQkJCQkJc2l6ZV90IGxlbikKLXsKLQlpbnQgcmV0OwotCXVsb25nIHZhbGluOwotCXU4IHZhbDsKLQlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7Ci0KLQlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsaW4pOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyX3JldDsKLQl2YWwgPSB2YWxpbjsKLQlyZXQgPSBsaXMzbDAyZHFfc3BpX3dyaXRlX3JlZ184KGRldiwgdGhpc19hdHRyLT5hZGRyZXNzLCAmdmFsKTsKLQotZXJyX3JldDoKLQlyZXR1cm4gcmV0ID8gcmV0IDogbGVuOwotfQotCi1zdGF0aWMgc3NpemVfdCBsaXMzbDAyZHFfcmVhZF8xNmJpdF9zaWduZWQoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkJICAgY2hhciAqYnVmKQotewotCWludCByZXQ7Ci0JczE2IHZhbCA9IDA7Ci0Jc3RydWN0IGlpb19kZXZfYXR0ciAqdGhpc19hdHRyID0gdG9faWlvX2Rldl9hdHRyKGF0dHIpOwotCi0JcmV0ID0gbGlzM2wwMmRxX3NwaV9yZWFkX3JlZ19zMTYoZGV2LCB0aGlzX2F0dHItPmFkZHJlc3MsICZ2YWwpOwotCi0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB2YWwpOwotfQotCi1zdGF0aWMgc3NpemVfdCBsaXMzbDAyZHFfcmVhZF9hY2NlbChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCSAgICBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXNzaXplX3QgcmV0OwotCi0JLyogVGFrZSB0aGUgaWlvX2RldiBzdGF0dXMgbG9jayAqLwotCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOwotCWlmIChpbmRpb19kZXYtPmN1cnJlbnRtb2RlID09IElORElPX1JJTkdfVFJJR0dFUkVEKQotCQlyZXQgPSBsaXMzbDAyZHFfcmVhZF9hY2NlbF9mcm9tX3JpbmcoZGV2LCBhdHRyLCBidWYpOwotCWVsc2UKLQkJcmV0ID0gIGxpczNsMDJkcV9yZWFkXzE2Yml0X3NpZ25lZChkZXYsIGF0dHIsIGJ1Zik7Ci0JbXV0ZXhfdW5sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKLQorCWludCByZXQgPSAtRUlOVkFMLCByZWc7CisJdTggdXZhbDsKKwlzOCBzdmFsOworCXN3aXRjaCAobWFzaykgeworCWNhc2UgKDEgPDwgSUlPX0NIQU5fSU5GT19DQUxJQkJJQVNfU0VQQVJBVEUpOgorCQlpZiAodmFsID4gMjU1IHx8IHZhbCA8IC0yNTYpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJc3ZhbCA9IHZhbDsKKwkJcmVnID0gbGlzM2wwMmRxX2F4aXNfbWFwW0xJUzNMMDJEUV9CSUFTXVtjaGFuLT5hZGRyZXNzXTsKKwkJcmV0ID0gbGlzM2wwMmRxX3NwaV93cml0ZV9yZWdfOChpbmRpb19kZXYsIHJlZywgc3ZhbCk7CisJCWJyZWFrOworCWNhc2UgKDEgPDwgSUlPX0NIQU5fSU5GT19DQUxJQlNDQUxFX1NFUEFSQVRFKToKKwkJaWYgKHZhbCAmIH4weEZGKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXV2YWwgPSB2YWw7CisJCXJlZyA9IGxpczNsMDJkcV9heGlzX21hcFtMSVMzTDAyRFFfR0FJTl1bY2hhbi0+YWRkcmVzc107CisJCXJldCA9IGxpczNsMDJkcV9zcGlfd3JpdGVfcmVnXzgoaW5kaW9fZGV2LCByZWcsIHV2YWwpOworCQlicmVhazsKKwl9CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHNzaXplX3QgbGlzM2wwMmRxX3dyaXRlXzE2Yml0X3NpZ25lZChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkJICAgIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCQkJICAgIHNpemVfdCBsZW4pCitzdGF0aWMgaW50IGxpczNsMDJkcV9yZWFkX3JhdyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAorCQkJICAgICAgc3RydWN0IGlpb19jaGFuX3NwZWMgY29uc3QgKmNoYW4sCisJCQkgICAgICBpbnQgKnZhbCwKKwkJCSAgICAgIGludCAqdmFsMiwKKwkJCSAgICAgIGxvbmcgbWFzaykKIHsKLQlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7Ci0JaW50IHJldDsKLQlsb25nIHZhbDsKKwl1OCB1dGVtcDsKKwlzOCBzdGVtcDsKKwlzc2l6ZV90IHJldCA9IDA7CisJdTggcmVnOwogCi0JcmV0ID0gc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdmFsKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycm9yX3JldDsKLQlyZXQgPSBsaXMzbDAyZHFfc3BpX3dyaXRlX3JlZ19zMTYoZGV2LCB0aGlzX2F0dHItPmFkZHJlc3MsIHZhbCk7CisJc3dpdGNoIChtYXNrKSB7CisJY2FzZSAwOgorCQkvKiBUYWtlIHRoZSBpaW9fZGV2IHN0YXR1cyBsb2NrICovCisJCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOworCQlpZiAoaW5kaW9fZGV2LT5jdXJyZW50bW9kZSA9PSBJTkRJT19SSU5HX1RSSUdHRVJFRCkKKwkJCXJldCA9IGxpczNsMDJkcV9yZWFkX2FjY2VsX2Zyb21fcmluZyhpbmRpb19kZXYtPnJpbmcsCisJCQkJCQkJICAgICBjaGFuLT5zY2FuX2luZGV4LAorCQkJCQkJCSAgICAgdmFsKTsKKwkJZWxzZSB7CisJCQlyZWcgPSBsaXMzbDAyZHFfYXhpc19tYXAKKwkJCQlbTElTM0wwMkRRX0FDQ0VMXVtjaGFuLT5hZGRyZXNzXTsKKwkJCXJldCA9IGxpczNsMDJkcV9yZWFkX3JlZ19zMTYoaW5kaW9fZGV2LCByZWcsIHZhbCk7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKKwkJcmV0dXJuIElJT19WQUxfSU5UOworCWNhc2UgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpOgorCQkqdmFsID0gMDsKKwkJKnZhbDIgPSA5NTgwOworCQlyZXR1cm4gSUlPX1ZBTF9JTlRfUExVU19NSUNSTzsKKwljYXNlICgxIDw8IElJT19DSEFOX0lORk9fQ0FMSUJTQ0FMRV9TRVBBUkFURSk6CisJCXJlZyA9IGxpczNsMDJkcV9heGlzX21hcFtMSVMzTDAyRFFfR0FJTl1bY2hhbi0+YWRkcmVzc107CisJCXJldCA9IGxpczNsMDJkcV9zcGlfcmVhZF9yZWdfOChpbmRpb19kZXYsIHJlZywgJnV0ZW1wKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3JfcmV0OworCQkvKiB0byBtYXRjaCB3aXRoIHdoYXQgcHJldmlvdXMgY29kZSBkb2VzICovCisJCSp2YWwgPSB1dGVtcDsKKwkJcmV0dXJuIElJT19WQUxfSU5UOwogCisJY2FzZSAoMSA8PCBJSU9fQ0hBTl9JTkZPX0NBTElCQklBU19TRVBBUkFURSk6CisJCXJlZyA9IGxpczNsMDJkcV9heGlzX21hcFtMSVMzTDAyRFFfQklBU11bY2hhbi0+YWRkcmVzc107CisJCXJldCA9IGxpczNsMDJkcV9zcGlfcmVhZF9yZWdfOChpbmRpb19kZXYsIHJlZywgKHU4ICopJnN0ZW1wKTsKKwkJLyogdG8gbWF0Y2ggd2l0aCB3aGF0IHByZXZpb3VzIGNvZGUgZG9lcyAqLworCQkqdmFsID0gc3RlbXA7CisJCXJldHVybiBJSU9fVkFMX0lOVDsKKwl9CiBlcnJvcl9yZXQ6Ci0JcmV0dXJuIHJldCA/IHJldCA6IGxlbjsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgc3NpemVfdCBsaXMzbDAyZHFfcmVhZF9mcmVxdWVuY3koc3RydWN0IGRldmljZSAqZGV2LAogCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkJY2hhciAqYnVmKQogeworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgcmV0LCBsZW4gPSAwOwogCXM4IHQ7Ci0JcmV0ID0gbGlzM2wwMmRxX3NwaV9yZWFkX3JlZ184KGRldiwKKwlyZXQgPSBsaXMzbDAyZHFfc3BpX3JlYWRfcmVnXzgoaW5kaW9fZGV2LAogCQkJCSAgICAgICBMSVMzTDAyRFFfUkVHX0NUUkxfMV9BRERSLAogCQkJCSAgICAgICAodTggKikmdCk7CiAJaWYgKHJldCkKQEAgLTM3Niw3ICszNDAsNyBAQAogCQlyZXR1cm4gcmV0OwogCiAJbXV0ZXhfbG9jaygmaW5kaW9fZGV2LT5tbG9jayk7Ci0JcmV0ID0gbGlzM2wwMmRxX3NwaV9yZWFkX3JlZ184KGRldiwKKwlyZXQgPSBsaXMzbDAyZHFfc3BpX3JlYWRfcmVnXzgoaW5kaW9fZGV2LAogCQkJCSAgICAgICBMSVMzTDAyRFFfUkVHX0NUUkxfMV9BRERSLAogCQkJCSAgICAgICAmdCk7CiAJaWYgKHJldCkKQEAgLTM5OSwxMSArMzYzLDExIEBACiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJvcl9yZXRfbXV0ZXg7Ci0JfTsKKwl9CiAKLQlyZXQgPSBsaXMzbDAyZHFfc3BpX3dyaXRlX3JlZ184KGRldiwKKwlyZXQgPSBsaXMzbDAyZHFfc3BpX3dyaXRlX3JlZ184KGluZGlvX2RldiwKIAkJCQkJTElTM0wwMkRRX1JFR19DVFJMXzFfQUREUiwKLQkJCQkJJnQpOworCQkJCQl0KTsKIAogZXJyb3JfcmV0X211dGV4OgogCW11dGV4X3VubG9jaygmaW5kaW9fZGV2LT5tbG9jayk7CkBAIC00MTEsOCArMzc1LDkgQEAKIAlyZXR1cm4gcmV0ID8gcmV0IDogbGVuOwogfQogCi1zdGF0aWMgaW50IGxpczNsMDJkcV9pbml0aWFsX3NldHVwKHN0cnVjdCBsaXMzbDAyZHFfc3RhdGUgKnN0KQorc3RhdGljIGludCBsaXMzbDAyZHFfaW5pdGlhbF9zZXR1cChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQogeworCXN0cnVjdCBsaXMzbDAyZHFfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKIAlpbnQgcmV0OwogCXU4IHZhbCwgdmFsdGVzdDsKIApAQCAtNDIyLDE3ICszODcsMTcgQEAKIAogCXZhbCA9IExJUzNMMDJEUV9ERUZBVUxUX0NUUkwxOwogCS8qIFdyaXRlIHN1aXRhYmxlIGRlZmF1bHRzIHRvIGN0cmwxICovCi0JcmV0ID0gbGlzM2wwMmRxX3NwaV93cml0ZV9yZWdfOCgmc3QtPmhlbHAuaW5kaW9fZGV2LT5kZXYsCisJcmV0ID0gbGlzM2wwMmRxX3NwaV93cml0ZV9yZWdfOChpbmRpb19kZXYsCiAJCQkJCUxJUzNMMDJEUV9SRUdfQ1RSTF8xX0FERFIsCi0JCQkJCSZ2YWwpOworCQkJCQl2YWwpOwogCWlmIChyZXQpIHsKIAkJZGV2X2Vycigmc3QtPnVzLT5kZXYsICJwcm9ibGVtIHdpdGggc2V0dXAgY29udHJvbCByZWdpc3RlciAxIik7CiAJCWdvdG8gZXJyX3JldDsKIAl9CiAJLyogUmVwZWF0IGFzIHNvbWV0aW1lcyBkb2Vzbid0IHdvcmsgZmlyc3QgdGltZT8qLwotCXJldCA9IGxpczNsMDJkcV9zcGlfd3JpdGVfcmVnXzgoJnN0LT5oZWxwLmluZGlvX2Rldi0+ZGV2LAorCXJldCA9IGxpczNsMDJkcV9zcGlfd3JpdGVfcmVnXzgoaW5kaW9fZGV2LAogCQkJCQlMSVMzTDAyRFFfUkVHX0NUUkxfMV9BRERSLAotCQkJCQkmdmFsKTsKKwkJCQkJdmFsKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJnN0LT51cy0+ZGV2LCAicHJvYmxlbSB3aXRoIHNldHVwIGNvbnRyb2wgcmVnaXN0ZXIgMSIpOwogCQlnb3RvIGVycl9yZXQ7CkBAIC00NDAsMjggKzQwNSwyOSBAQAogCiAJLyogUmVhZCBiYWNrIHRvIGNoZWNrIHRoaXMgaGFzIHdvcmtlZCBhY3RzIGFzIGxvb3NlIHRlc3Qgb2YgY29ycmVjdAogCSAqIGNoaXAgKi8KLQlyZXQgPSBsaXMzbDAyZHFfc3BpX3JlYWRfcmVnXzgoJnN0LT5oZWxwLmluZGlvX2Rldi0+ZGV2LAorCXJldCA9IGxpczNsMDJkcV9zcGlfcmVhZF9yZWdfOChpbmRpb19kZXYsCiAJCQkJICAgICAgIExJUzNMMDJEUV9SRUdfQ1RSTF8xX0FERFIsCiAJCQkJICAgICAgICZ2YWx0ZXN0KTsKIAlpZiAocmV0IHx8ICh2YWx0ZXN0ICE9IHZhbCkpIHsKLQkJZGV2X2Vycigmc3QtPmhlbHAuaW5kaW9fZGV2LT5kZXYsICJkZXZpY2Ugbm90IHBsYXlpbmcgYmFsbCIpOworCQlkZXZfZXJyKCZpbmRpb19kZXYtPmRldiwKKwkJCSJkZXZpY2Ugbm90IHBsYXlpbmcgYmFsbCAlZCAlZFxuIiwgdmFsdGVzdCwgdmFsKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmV0OwogCX0KIAogCXZhbCA9IExJUzNMMDJEUV9ERUZBVUxUX0NUUkwyOwotCXJldCA9IGxpczNsMDJkcV9zcGlfd3JpdGVfcmVnXzgoJnN0LT5oZWxwLmluZGlvX2Rldi0+ZGV2LAorCXJldCA9IGxpczNsMDJkcV9zcGlfd3JpdGVfcmVnXzgoaW5kaW9fZGV2LAogCQkJCQlMSVMzTDAyRFFfUkVHX0NUUkxfMl9BRERSLAotCQkJCQkmdmFsKTsKKwkJCQkJdmFsKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJnN0LT51cy0+ZGV2LCAicHJvYmxlbSB3aXRoIHNldHVwIGNvbnRyb2wgcmVnaXN0ZXIgMiIpOwogCQlnb3RvIGVycl9yZXQ7CiAJfQogCiAJdmFsID0gTElTM0wwMkRRX1JFR19XQUtFX1VQX0NGR19MQVRDSF9TUkM7Ci0JcmV0ID0gbGlzM2wwMmRxX3NwaV93cml0ZV9yZWdfOCgmc3QtPmhlbHAuaW5kaW9fZGV2LT5kZXYsCisJcmV0ID0gbGlzM2wwMmRxX3NwaV93cml0ZV9yZWdfOChpbmRpb19kZXYsCiAJCQkJCUxJUzNMMDJEUV9SRUdfV0FLRV9VUF9DRkdfQUREUiwKLQkJCQkJJnZhbCk7CisJCQkJCXZhbCk7CiAJaWYgKHJldCkKIAkJZGV2X2Vycigmc3QtPnVzLT5kZXYsICJwcm9ibGVtIHdpdGggaW50ZXJydXB0IGNmZyByZWdpc3RlciIpOwogZXJyX3JldDoKQEAgLTQ2OSwzMDkgKzQzNSwyMTUgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0jZGVmaW5lIExJUzNMMDJEUV9TSUdORURfQVRUUihuYW1lLCByZWcpCVwKLQlJSU9fREVWSUNFX0FUVFIobmFtZSwJCQlcCi0JCQlTX0lXVVNSIHwgU19JUlVHTywJXAotCQkJbGlzM2wwMmRxX3JlYWRfc2lnbmVkLAlcCi0JCQlsaXMzbDAyZHFfd3JpdGVfc2lnbmVkLCBcCi0JCQlyZWcpOwotCi0jZGVmaW5lIExJUzNMMDJEUV9VTlNJR05FRF9BVFRSKG5hbWUsIHJlZykJCVwKLQlJSU9fREVWSUNFX0FUVFIobmFtZSwJCQkJXAotCQkJU19JV1VTUiB8IFNfSVJVR08sCQlcCi0JCQlsaXMzbDAyZHFfcmVhZF91bnNpZ25lZCwJXAotCQkJbGlzM2wwMmRxX3dyaXRlX3Vuc2lnbmVkLAlcCi0JCQlyZWcpOwotCi1zdGF0aWMgTElTM0wwMkRRX1NJR05FRF9BVFRSKGFjY2VsX3hfY2FsaWJiaWFzLAotCQkJICAgICBMSVMzTDAyRFFfUkVHX09GRlNFVF9YX0FERFIpOwotc3RhdGljIExJUzNMMDJEUV9TSUdORURfQVRUUihhY2NlbF95X2NhbGliYmlhcywKLQkJCSAgICAgTElTM0wwMkRRX1JFR19PRkZTRVRfWV9BRERSKTsKLXN0YXRpYyBMSVMzTDAyRFFfU0lHTkVEX0FUVFIoYWNjZWxfel9jYWxpYmJpYXMsCi0JCQkgICAgIExJUzNMMDJEUV9SRUdfT0ZGU0VUX1pfQUREUik7Ci0KLXN0YXRpYyBMSVMzTDAyRFFfVU5TSUdORURfQVRUUihhY2NlbF94X2NhbGlic2NhbGUsCi0JCQkgICAgICAgTElTM0wwMkRRX1JFR19HQUlOX1hfQUREUik7Ci1zdGF0aWMgTElTM0wwMkRRX1VOU0lHTkVEX0FUVFIoYWNjZWxfeV9jYWxpYnNjYWxlLAotCQkJICAgICAgIExJUzNMMDJEUV9SRUdfR0FJTl9ZX0FERFIpOwotc3RhdGljIExJUzNMMDJEUV9VTlNJR05FRF9BVFRSKGFjY2VsX3pfY2FsaWJzY2FsZSwKLQkJCSAgICAgICBMSVMzTDAyRFFfUkVHX0dBSU5fWl9BRERSKTsKLQotc3RhdGljIElJT19ERVZJQ0VfQVRUUihhY2NlbF9yYXdfbWFnX3ZhbHVlLAotCQkgICAgICAgU19JV1VTUiB8IFNfSVJVR08sCi0JCSAgICAgICBsaXMzbDAyZHFfcmVhZF8xNmJpdF9zaWduZWQsCi0JCSAgICAgICBsaXMzbDAyZHFfd3JpdGVfMTZiaXRfc2lnbmVkLAotCQkgICAgICAgTElTM0wwMkRRX1JFR19USFNfTF9BRERSKTsKLS8qIFJGQyBUaGUgcmVhZGluZyBtZXRob2QgZm9yIHRoZXNlIHdpbGwgY2hhbmdlIGRlcGVuZGluZyBvbiB3aGV0aGVyCi0gKiByaW5nIGJ1ZmZlciBjYXB0dXJlIGlzIGluIHVzZS4gSXMgaXQgd29ydGggbWFraW5nIHRoZXNlIHRha2UgdHdvCi0gKiBmdW5jdGlvbnMgYW5kIGxldCB0aGUgY29yZSBoYW5kbGUgd2hpY2ggdG8gY2FsbCwgb3IgbGVhdmUgYXMgaW4gdGhpcwotICogZHJpdmVyIHdoZXJlIGl0IGlzIHRoZSBkcml2ZXJzIHByb2JsZW0gdG8gbWFuYWdlIHRoaXM/Ci0gKi8KLQotc3RhdGljIElJT19ERVZfQVRUUl9BQ0NFTF9YKGxpczNsMDJkcV9yZWFkX2FjY2VsLAotCQkJICAgIExJUzNMMDJEUV9SRUdfT1VUX1hfTF9BRERSKTsKLQotc3RhdGljIElJT19ERVZfQVRUUl9BQ0NFTF9ZKGxpczNsMDJkcV9yZWFkX2FjY2VsLAotCQkJICAgIExJUzNMMDJEUV9SRUdfT1VUX1lfTF9BRERSKTsKLQotc3RhdGljIElJT19ERVZfQVRUUl9BQ0NFTF9aKGxpczNsMDJkcV9yZWFkX2FjY2VsLAotCQkJICAgIExJUzNMMDJEUV9SRUdfT1VUX1pfTF9BRERSKTsKLQogc3RhdGljIElJT19ERVZfQVRUUl9TQU1QX0ZSRVEoU19JV1VTUiB8IFNfSVJVR08sCiAJCQkgICAgICBsaXMzbDAyZHFfcmVhZF9mcmVxdWVuY3ksCiAJCQkgICAgICBsaXMzbDAyZHFfd3JpdGVfZnJlcXVlbmN5KTsKIAogc3RhdGljIElJT19DT05TVF9BVFRSX1NBTVBfRlJFUV9BVkFJTCgiMjgwIDU2MCAxMTIwIDQ0ODAiKTsKIAotc3RhdGljIHNzaXplX3QgbGlzM2wwMmRxX3JlYWRfaW50ZXJydXB0X2NvbmZpZyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkJICAgICAgIGNoYXIgKmJ1ZikKK3N0YXRpYyBpcnFyZXR1cm5fdCBsaXMzbDAyZHFfZXZlbnRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpwcml2YXRlKQogewotCWludCByZXQ7Ci0JczggdmFsOwotCXN0cnVjdCBpaW9fZXZlbnRfYXR0ciAqdGhpc19hdHRyID0gdG9faWlvX2V2ZW50X2F0dHIoYXR0cik7Ci0KLQlyZXQgPSBsaXMzbDAyZHFfc3BpX3JlYWRfcmVnXzgoZGV2LT5wYXJlbnQsCi0JCQkJICAgICAgIExJUzNMMDJEUV9SRUdfV0FLRV9VUF9DRkdfQUREUiwKLQkJCQkgICAgICAgKHU4ICopJnZhbCk7Ci0KLQlyZXR1cm4gcmV0ID8gcmV0IDogc3ByaW50ZihidWYsICIlZFxuIiwgISEodmFsICYgdGhpc19hdHRyLT5tYXNrKSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGxpczNsMDJkcV93cml0ZV9pbnRlcnJ1cHRfY29uZmlnKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCQkJY29uc3QgY2hhciAqYnVmLAotCQkJCQkJc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3QgaWlvX2V2ZW50X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19ldmVudF9hdHRyKGF0dHIpOwotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpbnQgcmV0LCBjdXJyZW50bHlzZXQsIGNoYW5nZWQgPSAwOwotCXU4IHZhbG9sZCwgY29udHJvbG9sZDsKLQlib29sIHZhbDsKLQotCXZhbCA9ICEoYnVmWzBdID09ICcwJyk7Ci0KLQltdXRleF9sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKLQkvKiByZWFkIGN1cnJlbnQgdmFsdWUgKi8KLQlyZXQgPSBsaXMzbDAyZHFfc3BpX3JlYWRfcmVnXzgoZGV2LT5wYXJlbnQsCi0JCQkJICAgICAgIExJUzNMMDJEUV9SRUdfV0FLRV9VUF9DRkdfQUREUiwKLQkJCQkgICAgICAgJnZhbG9sZCk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJvcl9tdXRleF91bmxvY2s7Ci0KLQkvKiByZWFkIGN1cnJlbnQgY29udHJvbCAqLwotCXJldCA9IGxpczNsMDJkcV9zcGlfcmVhZF9yZWdfOChkZXYsCi0JCQkJICAgICAgIExJUzNMMDJEUV9SRUdfQ1RSTF8yX0FERFIsCi0JCQkJICAgICAgICZjb250cm9sb2xkKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycm9yX211dGV4X3VubG9jazsKLQljdXJyZW50bHlzZXQgPSAhISh2YWxvbGQgJiB0aGlzX2F0dHItPm1hc2spOwotCWlmICh2YWwgPT0gZmFsc2UgJiYgY3VycmVudGx5c2V0KSB7Ci0JCXZhbG9sZCAmPSB+dGhpc19hdHRyLT5tYXNrOwotCQljaGFuZ2VkID0gMTsKLQkJaWlvX3JlbW92ZV9ldmVudF9mcm9tX2xpc3QodGhpc19hdHRyLT5saXN0ZWwsCi0JCQkJCQkgJmluZGlvX2Rldi0+aW50ZXJydXB0c1swXQotCQkJCQkJIC0+ZXZfbGlzdCk7Ci0JfSBlbHNlIGlmICh2YWwgPT0gdHJ1ZSAmJiAhY3VycmVudGx5c2V0KSB7Ci0JCWNoYW5nZWQgPSAxOwotCQl2YWxvbGQgfD0gdGhpc19hdHRyLT5tYXNrOwotCQlpaW9fYWRkX2V2ZW50X3RvX2xpc3QodGhpc19hdHRyLT5saXN0ZWwsCi0JCQkJCSAgICAmaW5kaW9fZGV2LT5pbnRlcnJ1cHRzWzBdLT5ldl9saXN0KTsKLQl9Ci0KLQlpZiAoY2hhbmdlZCkgewotCQlyZXQgPSBsaXMzbDAyZHFfc3BpX3dyaXRlX3JlZ184KGRldiwKLQkJCQkJCUxJUzNMMDJEUV9SRUdfV0FLRV9VUF9DRkdfQUREUiwKLQkJCQkJCSZ2YWxvbGQpOwotCQlpZiAocmV0KQotCQkJZ290byBlcnJvcl9tdXRleF91bmxvY2s7Ci0JCS8qIFRoaXMgYWx3YXlzIGVuYWJsZXMgdGhlIGludGVycnVwdCwgZXZlbiBpZiB3ZSd2ZSByZW1vdmUgdGhlCi0JCSAqIGxhc3QgdGhpbmcgdXNpbmcgaXQuIEZvciB0aGlzIGRldmljZSB3ZSBjYW4gdXNlIHRoZSByZWZlcmVuY2UKLQkJICogY291bnQgb24gdGhlIGhhbmRsZXIgdG8gdGVsbCB1cyBpZiBhbnlvbmUgd2FudHMgdGhlIGludGVycnVwdAotCQkgKi8KLQkJY29udHJvbG9sZCA9IHRoaXNfYXR0ci0+bGlzdGVsLT5yZWZjb3VudCA/Ci0JCQkoY29udHJvbG9sZCB8IExJUzNMMDJEUV9SRUdfQ1RSTF8yX0VOQUJMRV9JTlRFUlJVUFQpIDoKLQkJCShjb250cm9sb2xkICYgfkxJUzNMMDJEUV9SRUdfQ1RSTF8yX0VOQUJMRV9JTlRFUlJVUFQpOwotCQlyZXQgPSBsaXMzbDAyZHFfc3BpX3dyaXRlX3JlZ184KGRldiwKLQkJCQkJCUxJUzNMMDJEUV9SRUdfQ1RSTF8yX0FERFIsCi0JCQkJCQkmY29udHJvbG9sZCk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIGVycm9yX211dGV4X3VubG9jazsKLQl9Ci1lcnJvcl9tdXRleF91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKLQotCXJldHVybiByZXQgPyByZXQgOiBsZW47Ci19Ci0KLQotc3RhdGljIGludCBsaXMzbDAyZHFfdGhyZXNoX2hhbmRsZXJfdGgoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKLQkJCQkgICAgICAgaW50IGluZGV4LAotCQkJCSAgICAgICBzNjQgdGltZXN0YW1wLAotCQkJCSAgICAgICBpbnQgbm9fdGVzdCkKLXsKLQlzdHJ1Y3QgaWlvX3N3X3JpbmdfaGVscGVyX3N0YXRlICpoCi0JCT0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOwotCXN0cnVjdCBsaXMzbDAyZHFfc3RhdGUgKnN0ID0gbGlzM2wwMmRxX2hfdG9fcyhoKTsKLQotCS8qIFN0YXNoIHRoZSB0aW1lc3RhbXAgc29tZXdoZXJlIGNvbnZlbmllbnQgZm9yIHRoZSBiaCAqLwotCXN0LT50aHJlc2hfdGltZXN0YW1wID0gdGltZXN0YW1wOwotCXNjaGVkdWxlX3dvcmsoJnN0LT53b3JrX3RocmVzaCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKiBVbmZvcnVuYXRlbHkgaXQgYXBwZWFycyB0aGUgaW50ZXJydXB0IHdvbid0IGNsZWFyIHVubGVzcyB5b3UgcmVhZCBmcm9tIHRoZQotICogc3JjIHJlZ2lzdGVyLgotICovCi1zdGF0aWMgdm9pZCBsaXMzbDAyZHFfdGhyZXNoX2hhbmRsZXJfYmhfbm9fY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrX3MpCi17Ci0gICAgICAgc3RydWN0IGxpczNsMDJkcV9zdGF0ZSAqc3QKLQkgICAgICAgPSBjb250YWluZXJfb2Yod29ya19zLAotCQkgICAgICAgc3RydWN0IGxpczNsMDJkcV9zdGF0ZSwgd29ya190aHJlc2gpOwotCisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHByaXZhdGU7CiAJdTggdDsKIAotCWxpczNsMDJkcV9zcGlfcmVhZF9yZWdfOCgmc3QtPmhlbHAuaW5kaW9fZGV2LT5kZXYsCisJczY0IHRpbWVzdGFtcCA9IGlpb19nZXRfdGltZV9ucygpOworCisJbGlzM2wwMmRxX3NwaV9yZWFkX3JlZ184KGluZGlvX2RldiwKIAkJCQkgTElTM0wwMkRRX1JFR19XQUtFX1VQX1NSQ19BRERSLAogCQkJCSAmdCk7CiAKIAlpZiAodCAmIExJUzNMMDJEUV9SRUdfV0FLRV9VUF9TUkNfSU5URVJSVVBUX1pfSElHSCkKLQkJaWlvX3B1c2hfZXZlbnQoc3QtPmhlbHAuaW5kaW9fZGV2LCAwLAorCQlpaW9fcHVzaF9ldmVudChpbmRpb19kZXYsIDAsCiAJCQkgICAgICAgSUlPX01PRF9FVkVOVF9DT0RFKElJT19FVl9DTEFTU19BQ0NFTCwKIAkJCQkJCSAgMCwKIAkJCQkJCSAgSUlPX0VWX01PRF9aLAogCQkJCQkJICBJSU9fRVZfVFlQRV9USFJFU0gsCiAJCQkJCQkgIElJT19FVl9ESVJfUklTSU5HKSwKLQkJCSAgICAgICBzdC0+dGhyZXNoX3RpbWVzdGFtcCk7CisJCQkgICAgICAgdGltZXN0YW1wKTsKIAogCWlmICh0ICYgTElTM0wwMkRRX1JFR19XQUtFX1VQX1NSQ19JTlRFUlJVUFRfWl9MT1cpCi0JCWlpb19wdXNoX2V2ZW50KHN0LT5oZWxwLmluZGlvX2RldiwgMCwKKwkJaWlvX3B1c2hfZXZlbnQoaW5kaW9fZGV2LCAwLAogCQkJICAgICAgIElJT19NT0RfRVZFTlRfQ09ERShJSU9fRVZfQ0xBU1NfQUNDRUwsCiAJCQkJCQkgIDAsCiAJCQkJCQkgIElJT19FVl9NT0RfWiwKIAkJCQkJCSAgSUlPX0VWX1RZUEVfVEhSRVNILAogCQkJCQkJICBJSU9fRVZfRElSX0ZBTExJTkcpLAotCQkJICAgICAgIHN0LT50aHJlc2hfdGltZXN0YW1wKTsKKwkJCSAgICAgICB0aW1lc3RhbXApOwogCiAJaWYgKHQgJiBMSVMzTDAyRFFfUkVHX1dBS0VfVVBfU1JDX0lOVEVSUlVQVF9ZX0hJR0gpCi0JCWlpb19wdXNoX2V2ZW50KHN0LT5oZWxwLmluZGlvX2RldiwgMCwKKwkJaWlvX3B1c2hfZXZlbnQoaW5kaW9fZGV2LCAwLAogCQkJICAgICAgIElJT19NT0RfRVZFTlRfQ09ERShJSU9fRVZfQ0xBU1NfQUNDRUwsCiAJCQkJCQkgIDAsCiAJCQkJCQkgIElJT19FVl9NT0RfWSwKIAkJCQkJCSAgSUlPX0VWX1RZUEVfVEhSRVNILAogCQkJCQkJICBJSU9fRVZfRElSX1JJU0lORyksCi0JCQkgICAgICAgc3QtPnRocmVzaF90aW1lc3RhbXApOworCQkJICAgICAgIHRpbWVzdGFtcCk7CiAKIAlpZiAodCAmIExJUzNMMDJEUV9SRUdfV0FLRV9VUF9TUkNfSU5URVJSVVBUX1lfTE9XKQotCQlpaW9fcHVzaF9ldmVudChzdC0+aGVscC5pbmRpb19kZXYsIDAsCisJCWlpb19wdXNoX2V2ZW50KGluZGlvX2RldiwgMCwKIAkJCSAgICAgICBJSU9fTU9EX0VWRU5UX0NPREUoSUlPX0VWX0NMQVNTX0FDQ0VMLAogCQkJCQkJICAwLAogCQkJCQkJICBJSU9fRVZfTU9EX1ksCiAJCQkJCQkgIElJT19FVl9UWVBFX1RIUkVTSCwKIAkJCQkJCSAgSUlPX0VWX0RJUl9GQUxMSU5HKSwKLQkJCSAgICAgICBzdC0+dGhyZXNoX3RpbWVzdGFtcCk7CisJCQkgICAgICAgdGltZXN0YW1wKTsKIAogCWlmICh0ICYgTElTM0wwMkRRX1JFR19XQUtFX1VQX1NSQ19JTlRFUlJVUFRfWF9ISUdIKQotCQlpaW9fcHVzaF9ldmVudChzdC0+aGVscC5pbmRpb19kZXYsIDAsCisJCWlpb19wdXNoX2V2ZW50KGluZGlvX2RldiwgMCwKIAkJCSAgICAgICBJSU9fTU9EX0VWRU5UX0NPREUoSUlPX0VWX0NMQVNTX0FDQ0VMLAogCQkJCQkJICAwLAogCQkJCQkJICBJSU9fRVZfTU9EX1gsCiAJCQkJCQkgIElJT19FVl9UWVBFX1RIUkVTSCwKIAkJCQkJCSAgSUlPX0VWX0RJUl9SSVNJTkcpLAotCQkJICAgICAgIHN0LT50aHJlc2hfdGltZXN0YW1wKTsKKwkJCSAgICAgICB0aW1lc3RhbXApOwogCiAJaWYgKHQgJiBMSVMzTDAyRFFfUkVHX1dBS0VfVVBfU1JDX0lOVEVSUlVQVF9YX0xPVykKLQkJaWlvX3B1c2hfZXZlbnQoc3QtPmhlbHAuaW5kaW9fZGV2LCAwLAorCQlpaW9fcHVzaF9ldmVudChpbmRpb19kZXYsIDAsCiAJCQkgICAgICAgSUlPX01PRF9FVkVOVF9DT0RFKElJT19FVl9DTEFTU19BQ0NFTCwKIAkJCQkJCSAgMCwKIAkJCQkJCSAgSUlPX0VWX01PRF9YLAogCQkJCQkJICBJSU9fRVZfVFlQRV9USFJFU0gsCiAJCQkJCQkgIElJT19FVl9ESVJfRkFMTElORyksCi0JCQkgICAgICAgc3QtPnRocmVzaF90aW1lc3RhbXApOwotCS8qIHJlZW5hYmxlIHRoZSBpcnEgKi8KLQllbmFibGVfaXJxKHN0LT51cy0+aXJxKTsKKwkJCSAgICAgICB0aW1lc3RhbXApOworCiAJLyogQWNrIGFuZCBhbGxvdyBmb3IgbmV3IGludGVycnVwdHMgKi8KLQlsaXMzbDAyZHFfc3BpX3JlYWRfcmVnXzgoJnN0LT5oZWxwLmluZGlvX2Rldi0+ZGV2LAorCWxpczNsMDJkcV9zcGlfcmVhZF9yZWdfOChpbmRpb19kZXYsCiAJCQkJIExJUzNMMDJEUV9SRUdfV0FLRV9VUF9BQ0tfQUREUiwKIAkJCQkgJnQpOwogCi0JcmV0dXJuOworCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotLyogQSBzaGFyZWQgaGFuZGxlciBmb3IgYSBudW1iZXIgb2YgdGhyZXNob2xkIHR5cGVzICovCi1JSU9fRVZFTlRfU0godGhyZXNob2xkLCAmbGlzM2wwMmRxX3RocmVzaF9oYW5kbGVyX3RoKTsKKyNkZWZpbmUgTElTM0wwMkRRX0lORk9fTUFTSwkJCQlcCisJKCgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSB8CQlcCisJICgxIDw8IElJT19DSEFOX0lORk9fQ0FMSUJTQ0FMRV9TRVBBUkFURSkgfAlcCisJICgxIDw8IElJT19DSEFOX0lORk9fQ0FMSUJCSUFTX1NFUEFSQVRFKSkKIAotSUlPX0VWRU5UX0FUVFJfU0goYWNjZWxfeF90aHJlc2hfcmlzaW5nX2VuLAotCQkgIGlpb19ldmVudF90aHJlc2hvbGQsCi0JCSAgbGlzM2wwMmRxX3JlYWRfaW50ZXJydXB0X2NvbmZpZywKLQkJICBsaXMzbDAyZHFfd3JpdGVfaW50ZXJydXB0X2NvbmZpZywKLQkJICBMSVMzTDAyRFFfUkVHX1dBS0VfVVBfQ0ZHX0lOVEVSUlVQVF9YX0hJR0gpOworI2RlZmluZSBMSVMzTDAyRFFfRVZFTlRfTUFTSwkJCQkJXAorCShJSU9fRVZfQklUKElJT19FVl9UWVBFX1RIUkVTSCwgSUlPX0VWX0RJUl9SSVNJTkcpIHwJXAorCSBJSU9fRVZfQklUKElJT19FVl9UWVBFX1RIUkVTSCwgSUlPX0VWX0RJUl9GQUxMSU5HKSkKIAotSUlPX0VWRU5UX0FUVFJfU0goYWNjZWxfeV90aHJlc2hfcmlzaW5nX2VuLAotCQkgIGlpb19ldmVudF90aHJlc2hvbGQsCi0JCSAgbGlzM2wwMmRxX3JlYWRfaW50ZXJydXB0X2NvbmZpZywKLQkJICBsaXMzbDAyZHFfd3JpdGVfaW50ZXJydXB0X2NvbmZpZywKLQkJICBMSVMzTDAyRFFfUkVHX1dBS0VfVVBfQ0ZHX0lOVEVSUlVQVF9ZX0hJR0gpOwotCi1JSU9fRVZFTlRfQVRUUl9TSChhY2NlbF96X3RocmVzaF9yaXNpbmdfZW4sCi0JCSAgaWlvX2V2ZW50X3RocmVzaG9sZCwKLQkJICBsaXMzbDAyZHFfcmVhZF9pbnRlcnJ1cHRfY29uZmlnLAotCQkgIGxpczNsMDJkcV93cml0ZV9pbnRlcnJ1cHRfY29uZmlnLAotCQkgIExJUzNMMDJEUV9SRUdfV0FLRV9VUF9DRkdfSU5URVJSVVBUX1pfSElHSCk7Ci0KLUlJT19FVkVOVF9BVFRSX1NIKGFjY2VsX3hfdGhyZXNoX2ZhbGxpbmdfZW4sCi0JCSAgaWlvX2V2ZW50X3RocmVzaG9sZCwKLQkJICBsaXMzbDAyZHFfcmVhZF9pbnRlcnJ1cHRfY29uZmlnLAotCQkgIGxpczNsMDJkcV93cml0ZV9pbnRlcnJ1cHRfY29uZmlnLAotCQkgIExJUzNMMDJEUV9SRUdfV0FLRV9VUF9DRkdfSU5URVJSVVBUX1hfTE9XKTsKLQotSUlPX0VWRU5UX0FUVFJfU0goYWNjZWxfeV90aHJlc2hfZmFsbGluZ19lbiwKLQkJICBpaW9fZXZlbnRfdGhyZXNob2xkLAotCQkgIGxpczNsMDJkcV9yZWFkX2ludGVycnVwdF9jb25maWcsCi0JCSAgbGlzM2wwMmRxX3dyaXRlX2ludGVycnVwdF9jb25maWcsCi0JCSAgTElTM0wwMkRRX1JFR19XQUtFX1VQX0NGR19JTlRFUlJVUFRfWV9MT1cpOwotCi1JSU9fRVZFTlRfQVRUUl9TSChhY2NlbF96X3RocmVzaF9mYWxsaW5nX2VuLAotCQkgIGlpb19ldmVudF90aHJlc2hvbGQsCi0JCSAgbGlzM2wwMmRxX3JlYWRfaW50ZXJydXB0X2NvbmZpZywKLQkJICBsaXMzbDAyZHFfd3JpdGVfaW50ZXJydXB0X2NvbmZpZywKLQkJICBMSVMzTDAyRFFfUkVHX1dBS0VfVVBfQ0ZHX0lOVEVSUlVQVF9aX0xPVyk7Ci0KLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxpczNsMDJkcV9ldmVudF9hdHRyaWJ1dGVzW10gPSB7Ci0JJmlpb19ldmVudF9hdHRyX2FjY2VsX3hfdGhyZXNoX3Jpc2luZ19lbi5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl9hY2NlbF95X3RocmVzaF9yaXNpbmdfZW4uZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfYWNjZWxfel90aHJlc2hfcmlzaW5nX2VuLmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX2FjY2VsX3hfdGhyZXNoX2ZhbGxpbmdfZW4uZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfYWNjZWxfeV90aHJlc2hfZmFsbGluZ19lbi5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl9hY2NlbF96X3RocmVzaF9mYWxsaW5nX2VuLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9hY2NlbF9yYXdfbWFnX3ZhbHVlLmRldl9hdHRyLmF0dHIsCi0JTlVMTAorc3RhdGljIHN0cnVjdCBpaW9fY2hhbl9zcGVjIGxpczNsMDJkcV9jaGFubmVsc1tdID0geworCUlJT19DSEFOKElJT19BQ0NFTCwgMSwgMCwgMCwgTlVMTCwgMCwgSUlPX01PRF9YLCBMSVMzTDAyRFFfSU5GT19NQVNLLAorCQkgMCwgMCwgSUlPX1NUKCdzJywgMTIsIDE2LCAwKSwgTElTM0wwMkRRX0VWRU5UX01BU0spLAorCUlJT19DSEFOKElJT19BQ0NFTCwgMSwgMCwgMCwgTlVMTCwgMCwgSUlPX01PRF9ZLCBMSVMzTDAyRFFfSU5GT19NQVNLLAorCQkgMSwgMSwgSUlPX1NUKCdzJywgMTIsIDE2LCAwKSwgTElTM0wwMkRRX0VWRU5UX01BU0spLAorCUlJT19DSEFOKElJT19BQ0NFTCwgMSwgMCwgMCwgTlVMTCwgMCwgSUlPX01PRF9aLCBMSVMzTDAyRFFfSU5GT19NQVNLLAorCQkgMiwgMiwgSUlPX1NUKCdzJywgMTIsIDE2LCAwKSwgTElTM0wwMkRRX0VWRU5UX01BU0spLAorCUlJT19DSEFOX1NPRlRfVElNRVNUQU1QKDMpCiB9OwogCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBsaXMzbDAyZHFfZXZlbnRfYXR0cmlidXRlX2dyb3VwID0gewotCS5hdHRycyA9IGxpczNsMDJkcV9ldmVudF9hdHRyaWJ1dGVzLAotfTsKIAotc3RhdGljIElJT19DT05TVF9BVFRSX05BTUUoImxpczNsMDJkcSIpOwotc3RhdGljIElJT19DT05TVF9BVFRSKGFjY2VsX3NjYWxlLCAiMC4wMDk1OCIpOworc3RhdGljIHNzaXplX3QgbGlzM2wwMmRxX3JlYWRfZXZlbnRfY29uZmlnKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCisJCQkJCSAgIGludCBldmVudF9jb2RlKQoreworCisJdTggdmFsOworCWludCByZXQ7CisJdTggbWFzayA9ICgxIDw8IChJSU9fRVZFTlRfQ09ERV9FWFRSQUNUX01PRElGSUVSKGV2ZW50X2NvZGUpKjIgKworCQkJIChJSU9fRVZFTlRfQ09ERV9FWFRSQUNUX0RJUihldmVudF9jb2RlKSA9PQorCQkJICBJSU9fRVZfRElSX1JJU0lORykpKTsKKwlyZXQgPSBsaXMzbDAyZHFfc3BpX3JlYWRfcmVnXzgoaW5kaW9fZGV2LAorCQkJCSAgICAgICBMSVMzTDAyRFFfUkVHX1dBS0VfVVBfQ0ZHX0FERFIsCisJCQkJICAgICAgICZ2YWwpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuICEhKHZhbCAmIG1hc2spOworfQorCitpbnQgbGlzM2wwMmRxX2Rpc2FibGVfYWxsX2V2ZW50cyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQoreworCWludCByZXQ7CisJdTggY29udHJvbCwgdmFsOworCisJcmV0ID0gbGlzM2wwMmRxX3NwaV9yZWFkX3JlZ184KGluZGlvX2RldiwKKwkJCQkgICAgICAgTElTM0wwMkRRX1JFR19DVFJMXzJfQUREUiwKKwkJCQkgICAgICAgJmNvbnRyb2wpOworCisJY29udHJvbCAmPSB+TElTM0wwMkRRX1JFR19DVFJMXzJfRU5BQkxFX0lOVEVSUlVQVDsKKwlyZXQgPSBsaXMzbDAyZHFfc3BpX3dyaXRlX3JlZ184KGluZGlvX2RldiwKKwkJCQkJTElTM0wwMkRRX1JFR19DVFJMXzJfQUREUiwKKwkJCQkJY29udHJvbCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcl9yZXQ7CisJLyogQWxzbyBmb3IgY29uc2lzdGVuY3kgY2xlYXIgdGhlIG1hc2sgKi8KKwlyZXQgPSBsaXMzbDAyZHFfc3BpX3JlYWRfcmVnXzgoaW5kaW9fZGV2LAorCQkJCSAgICAgICBMSVMzTDAyRFFfUkVHX1dBS0VfVVBfQ0ZHX0FERFIsCisJCQkJICAgICAgICZ2YWwpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3JfcmV0OworCXZhbCAmPSB+MHgzZjsKKworCXJldCA9IGxpczNsMDJkcV9zcGlfd3JpdGVfcmVnXzgoaW5kaW9fZGV2LAorCQkJCQlMSVMzTDAyRFFfUkVHX1dBS0VfVVBfQ0ZHX0FERFIsCisJCQkJCXZhbCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcl9yZXQ7CisKKwlyZXQgPSBjb250cm9sOworZXJyb3JfcmV0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbGlzM2wwMmRxX3dyaXRlX2V2ZW50X2NvbmZpZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAorCQkJCQlpbnQgZXZlbnRfY29kZSwKKwkJCQkJaW50IHN0YXRlKQoreworCWludCByZXQgPSAwOworCXU4IHZhbCwgY29udHJvbDsKKwl1OCBjdXJyZW50bHlzZXQ7CisJYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisJdTggbWFzayA9ICgxIDw8IChJSU9fRVZFTlRfQ09ERV9FWFRSQUNUX01PRElGSUVSKGV2ZW50X2NvZGUpKjIgKworCQkJIChJSU9fRVZFTlRfQ09ERV9FWFRSQUNUX0RJUihldmVudF9jb2RlKSA9PQorCQkJICBJSU9fRVZfRElSX1JJU0lORykpKTsKKworCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOworCS8qIHJlYWQgY3VycmVudCBjb250cm9sICovCisJcmV0ID0gbGlzM2wwMmRxX3NwaV9yZWFkX3JlZ184KGluZGlvX2RldiwKKwkJCQkgICAgICAgTElTM0wwMkRRX1JFR19DVFJMXzJfQUREUiwKKwkJCQkgICAgICAgJmNvbnRyb2wpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3JfcmV0OworCXJldCA9IGxpczNsMDJkcV9zcGlfcmVhZF9yZWdfOChpbmRpb19kZXYsCisJCQkJICAgICAgIExJUzNMMDJEUV9SRUdfV0FLRV9VUF9DRkdfQUREUiwKKwkJCQkgICAgICAgJnZhbCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3JfcmV0OworCWN1cnJlbnRseXNldCA9IHZhbCAmIG1hc2s7CisKKwlpZiAoIWN1cnJlbnRseXNldCAmJiBzdGF0ZSkgeworCQljaGFuZ2VkID0gdHJ1ZTsKKwkJdmFsIHw9IG1hc2s7CisJfSBlbHNlIGlmIChjdXJyZW50bHlzZXQgJiYgIXN0YXRlKSB7CisJCWNoYW5nZWQgPSB0cnVlOworCQl2YWwgJj0gfm1hc2s7CisJfQorCisJaWYgKGNoYW5nZWQpIHsKKwkJcmV0ID0gbGlzM2wwMmRxX3NwaV93cml0ZV9yZWdfOChpbmRpb19kZXYsCisJCQkJCQlMSVMzTDAyRFFfUkVHX1dBS0VfVVBfQ0ZHX0FERFIsCisJCQkJCQl2YWwpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcl9yZXQ7CisJCWNvbnRyb2wgPSB2YWwgJiAweDNmID8KKwkJCShjb250cm9sIHwgTElTM0wwMkRRX1JFR19DVFJMXzJfRU5BQkxFX0lOVEVSUlVQVCkgOgorCQkJKGNvbnRyb2wgJiB+TElTM0wwMkRRX1JFR19DVFJMXzJfRU5BQkxFX0lOVEVSUlVQVCk7CisJCXJldCA9IGxpczNsMDJkcV9zcGlfd3JpdGVfcmVnXzgoaW5kaW9fZGV2LAorCQkJCQkgICAgICAgTElTM0wwMkRRX1JFR19DVFJMXzJfQUREUiwKKwkJCQkJICAgICAgIGNvbnRyb2wpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcl9yZXQ7CisJfQorCitlcnJvcl9yZXQ6CisJbXV0ZXhfdW5sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKKwlyZXR1cm4gcmV0OworfQogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbGlzM2wwMmRxX2F0dHJpYnV0ZXNbXSA9IHsKLQkmaWlvX2Rldl9hdHRyX2FjY2VsX3hfY2FsaWJiaWFzLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9hY2NlbF95X2NhbGliYmlhcy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfYWNjZWxfel9jYWxpYmJpYXMuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2FjY2VsX3hfY2FsaWJzY2FsZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfYWNjZWxfeV9jYWxpYnNjYWxlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9hY2NlbF96X2NhbGlic2NhbGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfYWNjZWxfc2NhbGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2FjY2VsX3hfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9hY2NlbF95X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfYWNjZWxfel9yYXcuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX3NhbXBsaW5nX2ZyZXF1ZW5jeS5kZXZfYXR0ci5hdHRyLAogCSZpaW9fY29uc3RfYXR0cl9zYW1wbGluZ19mcmVxdWVuY3lfYXZhaWxhYmxlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX25hbWUuZGV2X2F0dHIuYXR0ciwKIAlOVUxMCiB9OwogCkBAIC03NzksMTAzICs2NTEsOTYgQEAKIAkuYXR0cnMgPSBsaXMzbDAyZHFfYXR0cmlidXRlcywKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2luZm8gbGlzM2wwMmRxX2luZm8gPSB7CisJLm51bV9pbnRlcnJ1cHRfbGluZXMgPSAxLAorCS5yZWFkX3JhdyA9ICZsaXMzbDAyZHFfcmVhZF9yYXcsCisJLndyaXRlX3JhdyA9ICZsaXMzbDAyZHFfd3JpdGVfcmF3LAorCS5yZWFkX2V2ZW50X3ZhbHVlID0gJmxpczNsMDJkcV9yZWFkX3RocmVzaCwKKwkud3JpdGVfZXZlbnRfdmFsdWUgPSAmbGlzM2wwMmRxX3dyaXRlX3RocmVzaCwKKwkud3JpdGVfZXZlbnRfY29uZmlnID0gJmxpczNsMDJkcV93cml0ZV9ldmVudF9jb25maWcsCisJLnJlYWRfZXZlbnRfY29uZmlnID0gJmxpczNsMDJkcV9yZWFkX2V2ZW50X2NvbmZpZywKKwkuZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFLAorCS5hdHRycyA9ICZsaXMzbDAyZHFfYXR0cmlidXRlX2dyb3VwLAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgbGlzM2wwMmRxX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CiAJaW50IHJldCwgcmVnZG9uZSA9IDA7Ci0Jc3RydWN0IGxpczNsMDJkcV9zdGF0ZSAqc3QgPSBremFsbG9jKHNpemVvZiAqc3QsIEdGUF9LRVJORUwpOwotCWlmICghc3QpIHsKLQkJcmV0ID0gIC1FTk9NRU07CisJc3RydWN0IGxpczNsMDJkcV9zdGF0ZSAqc3Q7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldjsKKworCWluZGlvX2RldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2Uoc2l6ZW9mICpzdCk7CisJaWYgKGluZGlvX2RldiA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3JfcmV0OwogCX0KLQlJTklUX1dPUksoJnN0LT53b3JrX3RocmVzaCwgbGlzM2wwMmRxX3RocmVzaF9oYW5kbGVyX2JoX25vX2NoZWNrKTsKKwlzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CiAJLyogdGhpcyBpcyBvbmx5IHVzZWQgdG9yIHJlbW92YWwgcHVycG9zZXMgKi8KIAlzcGlfc2V0X2RydmRhdGEoc3BpLCBzdCk7CiAKLQkvKiBBbGxvY2F0ZSB0aGUgY29tbXMgYnVmZmVycyAqLwotCXN0LT5yeCA9IGt6YWxsb2Moc2l6ZW9mKCpzdC0+cngpKkxJUzNMMDJEUV9NQVhfUlgsIEdGUF9LRVJORUwpOwotCWlmIChzdC0+cnggPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yX2ZyZWVfc3Q7Ci0JfQotCXN0LT50eCA9IGt6YWxsb2Moc2l6ZW9mKCpzdC0+dHgpKkxJUzNMMDJEUV9NQVhfVFgsIEdGUF9LRVJORUwpOwotCWlmIChzdC0+dHggPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yX2ZyZWVfcng7Ci0JfQogCXN0LT51cyA9IHNwaTsKIAltdXRleF9pbml0KCZzdC0+YnVmX2xvY2spOwotCS8qIHNldHVwIHRoZSBpbmR1c3RyaWFsaW8gZHJpdmVyIGFsbG9jYXRlZCBlbGVtZW50cyAqLwotCXN0LT5oZWxwLmluZGlvX2RldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2UoKTsKLQlpZiAoc3QtPmhlbHAuaW5kaW9fZGV2ID09IE5VTEwpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJvcl9mcmVlX3R4OwotCX0KKwlpbmRpb19kZXYtPm5hbWUgPSBzcGktPmRldi5kcml2ZXItPm5hbWU7CisJaW5kaW9fZGV2LT5kZXYucGFyZW50ID0gJnNwaS0+ZGV2OworCWluZGlvX2Rldi0+aW5mbyA9ICZsaXMzbDAyZHFfaW5mbzsKKwlpbmRpb19kZXYtPmNoYW5uZWxzID0gbGlzM2wwMmRxX2NoYW5uZWxzOworCWluZGlvX2Rldi0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShsaXMzbDAyZHFfY2hhbm5lbHMpOwogCi0Jc3QtPmhlbHAuaW5kaW9fZGV2LT5kZXYucGFyZW50ID0gJnNwaS0+ZGV2OwotCXN0LT5oZWxwLmluZGlvX2Rldi0+bnVtX2ludGVycnVwdF9saW5lcyA9IDE7Ci0Jc3QtPmhlbHAuaW5kaW9fZGV2LT5ldmVudF9hdHRycyA9ICZsaXMzbDAyZHFfZXZlbnRfYXR0cmlidXRlX2dyb3VwOwotCXN0LT5oZWxwLmluZGlvX2Rldi0+YXR0cnMgPSAmbGlzM2wwMmRxX2F0dHJpYnV0ZV9ncm91cDsKLQlzdC0+aGVscC5pbmRpb19kZXYtPmRldl9kYXRhID0gKHZvaWQgKikoJnN0LT5oZWxwKTsKLQlzdC0+aGVscC5pbmRpb19kZXYtPmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRTsKLQlzdC0+aGVscC5pbmRpb19kZXYtPm1vZGVzID0gSU5ESU9fRElSRUNUX01PREU7CisJaW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOwogCi0JcmV0ID0gbGlzM2wwMmRxX2NvbmZpZ3VyZV9yaW5nKHN0LT5oZWxwLmluZGlvX2Rldik7CisJcmV0ID0gbGlzM2wwMmRxX2NvbmZpZ3VyZV9yaW5nKGluZGlvX2Rldik7CiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl9mcmVlX2RldjsKIAotCXJldCA9IGlpb19kZXZpY2VfcmVnaXN0ZXIoc3QtPmhlbHAuaW5kaW9fZGV2KTsKKwlyZXQgPSBpaW9fZGV2aWNlX3JlZ2lzdGVyKGluZGlvX2Rldik7CiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl91bnJlZ19yaW5nX2Z1bmNzOwogCXJlZ2RvbmUgPSAxOwogCi0JcmV0ID0gaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyKHN0LT5oZWxwLmluZGlvX2Rldi0+cmluZywgMCk7CisJcmV0ID0gaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyX2V4KGluZGlvX2Rldi0+cmluZywgMCwKKwkJCQkJICBsaXMzbDAyZHFfY2hhbm5lbHMsCisJCQkJCSAgQVJSQVlfU0laRShsaXMzbDAyZHFfY2hhbm5lbHMpKTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGluaXRpYWxpemUgdGhlIHJpbmdcbiIpOwogCQlnb3RvIGVycm9yX3VucmVnX3JpbmdfZnVuY3M7CiAJfQogCiAJaWYgKHNwaS0+aXJxICYmIGdwaW9faXNfdmFsaWQoaXJxX3RvX2dwaW8oc3BpLT5pcnEpKSA+IDApIHsKLQkJc3QtPmludGVyID0gMDsKLQkJcmV0ID0gaWlvX3JlZ2lzdGVyX2ludGVycnVwdF9saW5lKHNwaS0+aXJxLAotCQkJCQkJICBzdC0+aGVscC5pbmRpb19kZXYsCi0JCQkJCQkgIDAsCi0JCQkJCQkgIElSUUZfVFJJR0dFUl9SSVNJTkcsCi0JCQkJCQkgICJsaXMzbDAyZHEiKTsKKwkJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoc3QtPnVzLT5pcnEsCisJCQkJCSAgICZsaXMzbDAyZHFfdGgsCisJCQkJCSAgICZsaXMzbDAyZHFfZXZlbnRfaGFuZGxlciwKKwkJCQkJICAgSVJRRl9UUklHR0VSX1JJU0lORywKKwkJCQkJICAgImxpczNsMDJkcSIsCisJCQkJCSAgIGluZGlvX2Rldik7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycm9yX3VuaW5pdGlhbGl6ZV9yaW5nOwogCi0JCXJldCA9IGxpczNsMDJkcV9wcm9iZV90cmlnZ2VyKHN0LT5oZWxwLmluZGlvX2Rldik7CisJCXJldCA9IGxpczNsMDJkcV9wcm9iZV90cmlnZ2VyKGluZGlvX2Rldik7CiAJCWlmIChyZXQpCi0JCQlnb3RvIGVycm9yX3VucmVnaXN0ZXJfbGluZTsKKwkJCWdvdG8gZXJyb3JfZnJlZV9pbnRlcnJ1cHQ7CiAJfQogCiAJLyogR2V0IHRoZSBkZXZpY2UgaW50byBhIHNhbmUgaW5pdGlhbCBzdGF0ZSAqLwotCXJldCA9IGxpczNsMDJkcV9pbml0aWFsX3NldHVwKHN0KTsKKwlyZXQgPSBsaXMzbDAyZHFfaW5pdGlhbF9zZXR1cChpbmRpb19kZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfcmVtb3ZlX3RyaWdnZXI7CiAJcmV0dXJuIDA7CiAKIGVycm9yX3JlbW92ZV90cmlnZ2VyOgotCWlmIChzdC0+aGVscC5pbmRpb19kZXYtPm1vZGVzICYgSU5ESU9fUklOR19UUklHR0VSRUQpCi0JCWxpczNsMDJkcV9yZW1vdmVfdHJpZ2dlcihzdC0+aGVscC5pbmRpb19kZXYpOwotZXJyb3JfdW5yZWdpc3Rlcl9saW5lOgotCWlmIChzdC0+aGVscC5pbmRpb19kZXYtPm1vZGVzICYgSU5ESU9fUklOR19UUklHR0VSRUQpCi0JCWlpb191bnJlZ2lzdGVyX2ludGVycnVwdF9saW5lKHN0LT5oZWxwLmluZGlvX2RldiwgMCk7CisJaWYgKGluZGlvX2Rldi0+bW9kZXMgJiBJTkRJT19SSU5HX1RSSUdHRVJFRCkKKwkJbGlzM2wwMmRxX3JlbW92ZV90cmlnZ2VyKGluZGlvX2Rldik7CitlcnJvcl9mcmVlX2ludGVycnVwdDoKKwlpZiAoc3BpLT5pcnEgJiYgZ3Bpb19pc192YWxpZChpcnFfdG9fZ3BpbyhzcGktPmlycSkpID4gMCkKKwkJZnJlZV9pcnEoc3QtPnVzLT5pcnEsIGluZGlvX2Rldik7CiBlcnJvcl91bmluaXRpYWxpemVfcmluZzoKLQlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihzdC0+aGVscC5pbmRpb19kZXYtPnJpbmcpOworCWlpb19yaW5nX2J1ZmZlcl91bnJlZ2lzdGVyKGluZGlvX2Rldi0+cmluZyk7CiBlcnJvcl91bnJlZ19yaW5nX2Z1bmNzOgotCWxpczNsMDJkcV91bmNvbmZpZ3VyZV9yaW5nKHN0LT5oZWxwLmluZGlvX2Rldik7CisJbGlzM2wwMmRxX3VuY29uZmlndXJlX3JpbmcoaW5kaW9fZGV2KTsKIGVycm9yX2ZyZWVfZGV2OgogCWlmIChyZWdkb25lKQotCQlpaW9fZGV2aWNlX3VucmVnaXN0ZXIoc3QtPmhlbHAuaW5kaW9fZGV2KTsKKwkJaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CiAJZWxzZQotCQlpaW9fZnJlZV9kZXZpY2Uoc3QtPmhlbHAuaW5kaW9fZGV2KTsKLWVycm9yX2ZyZWVfdHg6Ci0Ja2ZyZWUoc3QtPnR4KTsKLWVycm9yX2ZyZWVfcng6Ci0Ja2ZyZWUoc3QtPnJ4KTsKLWVycm9yX2ZyZWVfc3Q6Ci0Ja2ZyZWUoc3QpOworCQlpaW9fZnJlZV9kZXZpY2UoaW5kaW9fZGV2KTsKIGVycm9yX3JldDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtODg0LDIzICs3NDksMjEgQEAKIHN0YXRpYyBpbnQgbGlzM2wwMmRxX3N0b3BfZGV2aWNlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCiB7CiAJaW50IHJldDsKLQlzdHJ1Y3QgaWlvX3N3X3JpbmdfaGVscGVyX3N0YXRlICpoCi0JCT0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOwotCXN0cnVjdCBsaXMzbDAyZHFfc3RhdGUgKnN0ID0gbGlzM2wwMmRxX2hfdG9fcyhoKTsKKwlzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CiAJdTggdmFsID0gMDsKIAogCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOwotCXJldCA9IGxpczNsMDJkcV9zcGlfd3JpdGVfcmVnXzgoJmluZGlvX2Rldi0+ZGV2LAorCXJldCA9IGxpczNsMDJkcV9zcGlfd3JpdGVfcmVnXzgoaW5kaW9fZGV2LAogCQkJCQlMSVMzTDAyRFFfUkVHX0NUUkxfMV9BRERSLAotCQkJCQkmdmFsKTsKKwkJCQkJdmFsKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJnN0LT51cy0+ZGV2LCAicHJvYmxlbSB3aXRoIHR1cm5pbmcgZGV2aWNlIG9mZjogY3RybDEiKTsKIAkJZ290byBlcnJfcmV0OwogCX0KIAotCXJldCA9IGxpczNsMDJkcV9zcGlfd3JpdGVfcmVnXzgoJmluZGlvX2Rldi0+ZGV2LAorCXJldCA9IGxpczNsMDJkcV9zcGlfd3JpdGVfcmVnXzgoaW5kaW9fZGV2LAogCQkJCQlMSVMzTDAyRFFfUkVHX0NUUkxfMl9BRERSLAotCQkJCQkmdmFsKTsKKwkJCQkJdmFsKTsKIAlpZiAocmV0KQogCQlkZXZfZXJyKCZzdC0+dXMtPmRldiwgInByb2JsZW0gd2l0aCB0dXJuaW5nIGRldmljZSBvZmY6IGN0cmwyIik7CiBlcnJfcmV0OgpAQCAtOTEyLDI1ICs3NzUsMjQgQEAKIHN0YXRpYyBpbnQgbGlzM2wwMmRxX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCWludCByZXQ7Ci0Jc3RydWN0IGxpczNsMDJkcV9zdGF0ZSAqc3QgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKLQlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gc3QtPmhlbHAuaW5kaW9fZGV2OworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKKwlzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CisKKwlyZXQgPSBsaXMzbDAyZHFfZGlzYWJsZV9hbGxfZXZlbnRzKGluZGlvX2Rldik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfcmV0OwogCiAJcmV0ID0gbGlzM2wwMmRxX3N0b3BfZGV2aWNlKGluZGlvX2Rldik7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfcmV0OwogCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwlpZiAoc3BpLT5pcnEgJiYgZ3Bpb19pc192YWxpZChpcnFfdG9fZ3BpbyhzcGktPmlycSkpID4gMCkKKwkJZnJlZV9pcnEoc3QtPnVzLT5pcnEsIGluZGlvX2Rldik7CiAKIAlsaXMzbDAyZHFfcmVtb3ZlX3RyaWdnZXIoaW5kaW9fZGV2KTsKLQlpZiAoc3BpLT5pcnEgJiYgZ3Bpb19pc192YWxpZChpcnFfdG9fZ3BpbyhzcGktPmlycSkpID4gMCkKLQkJaWlvX3VucmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoaW5kaW9fZGV2LCAwKTsKLQogCWlpb19yaW5nX2J1ZmZlcl91bnJlZ2lzdGVyKGluZGlvX2Rldi0+cmluZyk7CiAJbGlzM2wwMmRxX3VuY29uZmlndXJlX3JpbmcoaW5kaW9fZGV2KTsKIAlpaW9fZGV2aWNlX3VucmVnaXN0ZXIoaW5kaW9fZGV2KTsKLQlrZnJlZShzdC0+dHgpOwotCWtmcmVlKHN0LT5yeCk7Ci0Ja2ZyZWUoc3QpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvbGlzM2wwMmRxX3JpbmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvbGlzM2wwMmRxX3JpbmcuYwppbmRleCA1MjlhM2NjLi44ZDVjOGFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2xpczNsMDJkcV9yaW5nLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9saXMzbDAyZHFfcmluZy5jCkBAIC0xLDEzICsxLDExIEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgIi4uL2lpby5oIgpAQCAtMjksMTgwICsyNyw0OSBAQAogfQogCiAvKioKLSAqIGxpczNsMDJkcV9zY2FuX2VsX3NldF9zdGF0ZSgpIHNldCB3aGV0aGVyIGEgc2NhbiBjb250YWlucyBhIGdpdmVuIGNoYW5uZWwKLSAqIEBzY2FuX2VsOglhc3NvY2l0YXRlIGlpbyBzY2FuIGVsZW1lbnQgYXR0cmlidXRlCi0gKiBAaW5kaW9fZGV2Ogl0aGUgZGV2aWNlIHN0cnVjdHVyZQotICogQGJvb2w6CWRlc2lyZWQgc3RhdGUKLSAqCi0gKiBtbG9jayBhbHJlYWR5IGhlbGQgd2hlbiB0aGlzIGlzIGNhbGxlZC4KLSAqKi8KLXN0YXRpYyBpbnQgbGlzM2wwMmRxX3NjYW5fZWxfc2V0X3N0YXRlKHN0cnVjdCBpaW9fc2Nhbl9lbCAqc2Nhbl9lbCwKLQkJCQkgICAgICAgc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKLQkJCQkgICAgICAgYm9vbCBzdGF0ZSkKLXsKLQl1OCB0LCBtYXNrOwotCWludCByZXQ7Ci0KLQlyZXQgPSBsaXMzbDAyZHFfc3BpX3JlYWRfcmVnXzgoJmluZGlvX2Rldi0+ZGV2LAotCQkJCSAgICAgICBMSVMzTDAyRFFfUkVHX0NUUkxfMV9BRERSLAotCQkJCSAgICAgICAmdCk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJvcl9yZXQ7Ci0Jc3dpdGNoIChzY2FuX2VsLT5sYWJlbCkgewotCWNhc2UgTElTM0wwMkRRX1JFR19PVVRfWF9MX0FERFI6Ci0JCW1hc2sgPSBMSVMzTDAyRFFfUkVHX0NUUkxfMV9BWEVTX1hfRU5BQkxFOwotCQlicmVhazsKLQljYXNlIExJUzNMMDJEUV9SRUdfT1VUX1lfTF9BRERSOgotCQltYXNrID0gTElTM0wwMkRRX1JFR19DVFJMXzFfQVhFU19ZX0VOQUJMRTsKLQkJYnJlYWs7Ci0JY2FzZSBMSVMzTDAyRFFfUkVHX09VVF9aX0xfQUREUjoKLQkJbWFzayA9IExJUzNMMDJEUV9SRUdfQ1RSTF8xX0FYRVNfWl9FTkFCTEU7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3JfcmV0OwotCX0KLQotCWlmICghKG1hc2sgJiB0KSA9PSBzdGF0ZSkgewotCQlpZiAoc3RhdGUpCi0JCQl0IHw9IG1hc2s7Ci0JCWVsc2UKLQkJCXQgJj0gfm1hc2s7Ci0JCXJldCA9IGxpczNsMDJkcV9zcGlfd3JpdGVfcmVnXzgoJmluZGlvX2Rldi0+ZGV2LAotCQkJCQkJTElTM0wwMkRRX1JFR19DVFJMXzFfQUREUiwKLQkJCQkJCSZ0KTsKLQl9Ci1lcnJvcl9yZXQ6Ci0JcmV0dXJuIHJldDsKLQotfQotc3RhdGljIElJT19TQ0FOX0VMX0MoYWNjZWxfeCwgMCwKLQkJICAgICBMSVMzTDAyRFFfUkVHX09VVF9YX0xfQUREUiwKLQkJICAgICAmbGlzM2wwMmRxX3NjYW5fZWxfc2V0X3N0YXRlKTsKLXN0YXRpYyBJSU9fU0NBTl9FTF9DKGFjY2VsX3ksIDEsCi0JCSAgICAgTElTM0wwMkRRX1JFR19PVVRfWV9MX0FERFIsCi0JCSAgICAgJmxpczNsMDJkcV9zY2FuX2VsX3NldF9zdGF0ZSk7Ci1zdGF0aWMgSUlPX1NDQU5fRUxfQyhhY2NlbF96LCAyLAotCQkgICAgIExJUzNMMDJEUV9SRUdfT1VUX1pfTF9BRERSLAotCQkgICAgICZsaXMzbDAyZHFfc2Nhbl9lbF9zZXRfc3RhdGUpOwotc3RhdGljIElJT19DT05TVF9BVFRSX1NDQU5fRUxfVFlQRShhY2NlbCwgcywgMTIsIDE2KTsKLXN0YXRpYyBJSU9fU0NBTl9FTF9USU1FU1RBTVAoMyk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfU0NBTl9FTF9UWVBFKHRpbWVzdGFtcCwgcywgNjQsIDY0KTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxpczNsMDJkcV9zY2FuX2VsX2F0dHJzW10gPSB7Ci0JJmlpb19zY2FuX2VsX2FjY2VsX3guZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfYWNjZWxfeF9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9hY2NlbF95LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2FjY2VsX3lfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfYWNjZWxfei5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9hY2NlbF96X2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2FjY2VsX3R5cGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfdGltZXN0YW1wLmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX3RpbWVzdGFtcF9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl90aW1lc3RhbXBfdHlwZS5kZXZfYXR0ci5hdHRyLAotCU5VTEwsCi19OwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBsaXMzbDAyZHFfc2Nhbl9lbF9ncm91cCA9IHsKLQkuYXR0cnMgPSBsaXMzbDAyZHFfc2Nhbl9lbF9hdHRycywKLQkubmFtZSA9ICJzY2FuX2VsZW1lbnRzIiwKLX07Ci0KLS8qKgotICogbGlzM2wwMmRxX3BvbGxfZnVuY190aCgpIHRvcCBoYWxmIGludGVycnVwdCBoYW5kbGVyIGNhbGxlZCBieSB0cmlnZ2VyCi0gKiBAcHJpdmF0ZV9kYXRhOglpaW9fZGV2Ci0gKiovCi1zdGF0aWMgdm9pZCBsaXMzbDAyZHFfcG9sbF9mdW5jX3RoKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsIHM2NCB0aW1lKQotewotCXN0cnVjdCBpaW9fc3dfcmluZ19oZWxwZXJfc3RhdGUgKmgKLQkJPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7Ci0Jc3RydWN0IGxpczNsMDJkcV9zdGF0ZSAqc3QgPSBsaXMzbDAyZHFfaF90b19zKGgpOwotCS8qIGluIHRoaXMgY2FzZSB3ZSBuZWVkIHRvIHNsaWdodGx5IGV4dGVuZCB0aGUgaGVscGVyIGZ1bmN0aW9uICovCi0JaWlvX3N3X3BvbGxfZnVuY190aChpbmRpb19kZXYsIHRpbWUpOwotCi0JLyogSW5kaWNhdGUgdGhhdCB0aGlzIGludGVycnVwdCBpcyBiZWluZyBoYW5kbGVkICovCi0JLyogVGVjaG5pY2FsbHkgdGhpcyBpcyB0cmlnZ2VyIHJlbGF0ZWQsIGJ1dCB3aXRob3V0IHRoaXMKLQkgKiBoYW5kbGVyIHJ1bm5pbmcgdGhlcmUgaXMgY3VycmVudGx5IG5vdyB3YXkgZm9yIHRoZSBpbnRlcnJ1cHQKLQkgKiB0byBjbGVhci4KLQkgKi8KLQlzdC0+aW50ZXIgPSAxOwotfQotCi0vKioKICAqIGxpczNsMDJkcV9kYXRhX3JkeV90cmlnX3BvbGwoKSB0aGUgZXZlbnQgaGFuZGxlciBmb3IgdGhlIGRhdGEgcmR5IHRyaWcKICAqKi8KLXN0YXRpYyBpbnQgbGlzM2wwMmRxX2RhdGFfcmR5X3RyaWdfcG9sbChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAotCQkJCSAgICAgICBpbnQgaW5kZXgsCi0JCQkJICAgICAgIHM2NCB0aW1lc3RhbXAsCi0JCQkJICAgICAgIGludCBub190ZXN0KQoraXJxcmV0dXJuX3QgbGlzM2wwMmRxX2RhdGFfcmR5X3RyaWdfcG9sbChpbnQgaXJxLCB2b2lkICpwcml2YXRlKQogewotCXN0cnVjdCBpaW9fc3dfcmluZ19oZWxwZXJfc3RhdGUgKmgKLQkJPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7Ci0Jc3RydWN0IGxpczNsMDJkcV9zdGF0ZSAqc3QgPSBsaXMzbDAyZHFfaF90b19zKGgpOworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBwcml2YXRlOworCXN0cnVjdCBsaXMzbDAyZHFfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKIAotCWlpb190cmlnZ2VyX3BvbGwoc3QtPnRyaWcsIHRpbWVzdGFtcCk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJaWYgKHN0LT50cmlnZ2VyX29uKSB7CisJCWlpb190cmlnZ2VyX3BvbGwoc3QtPnRyaWcsIGlpb19nZXRfdGltZV9ucygpKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0gZWxzZQorCQlyZXR1cm4gSVJRX1dBS0VfVEhSRUFEOwogfQogCi0vKiBUaGlzIGlzIGFuIGV2ZW50IGFzIGl0IGlzIGEgcmVzcG9uc2UgdG8gYSBwaHlzaWNhbCBpbnRlcnJ1cHQgKi8KLUlJT19FVkVOVF9TSChkYXRhX3JkeV90cmlnLCAmbGlzM2wwMmRxX2RhdGFfcmR5X3RyaWdfcG9sbCk7Ci0KIC8qKgogICogbGlzM2wwMmRxX3JlYWRfYWNjZWxfZnJvbV9yaW5nKCkgaW5kaXZpZHVhbCBhY2NlbGVyYXRpb24gcmVhZCBmcm9tIHJpbmcKICAqKi8KLXNzaXplX3QgbGlzM2wwMmRxX3JlYWRfYWNjZWxfZnJvbV9yaW5nKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICAgICAgIGNoYXIgKmJ1ZikKK3NzaXplX3QgbGlzM2wwMmRxX3JlYWRfYWNjZWxfZnJvbV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcsCisJCQkJICAgICAgIGludCBpbmRleCwKKwkJCQkgICAgICAgaW50ICp2YWwpCiB7Ci0Jc3RydWN0IGlpb19zY2FuX2VsICplbCA9IE5VTEw7Ci0JaW50IHJldCwgbGVuID0gMCwgaSA9IDA7Ci0Jc3RydWN0IGlpb19kZXZfYXR0ciAqdGhpc19hdHRyID0gdG9faWlvX2Rldl9hdHRyKGF0dHIpOwotCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcgPSBkZXZfaW5mby0+cmluZzsKLQlzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpzY2FuX2VsX2F0dHJzID0gcmluZy0+c2Nhbl9lbF9hdHRyczsKKwlpbnQgcmV0OwogCXMxNiAqZGF0YTsKIAotCXdoaWxlIChzY2FuX2VsX2F0dHJzLT5hdHRyc1tpXSkgewotCQllbCA9IHRvX2lpb19zY2FuX2VsKChzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqKQotCQkJCSAgICAoc2Nhbl9lbF9hdHRycy0+YXR0cnNbaV0pKTsKLQkJLyogbGFiZWwgaXMgaW4gZmFjdCB0aGUgYWRkcmVzcyAqLwotCQlpZiAoZWwtPmxhYmVsID09IHRoaXNfYXR0ci0+YWRkcmVzcykKLQkJCWJyZWFrOwotCQlpKys7Ci0JfQotCWlmICghc2Nhbl9lbF9hdHRycy0+YXR0cnNbaV0pIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcl9yZXQ7Ci0JfQotCS8qIElmIHRoaXMgZWxlbWVudCBpcyBpbiB0aGUgc2NhbiBtYXNrICovCi0JcmV0ID0gaWlvX3NjYW5fbWFza19xdWVyeShyaW5nLCBlbC0+bnVtYmVyKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBlcnJvcl9yZXQ7Ci0JaWYgKHJldCkgewotCQlkYXRhID0ga21hbGxvYyhyaW5nLT5hY2Nlc3MuZ2V0X2J5dGVzX3Blcl9kYXR1bShyaW5nKSwKLQkJCSAgICAgICBHRlBfS0VSTkVMKTsKLQkJaWYgKGRhdGEgPT0gTlVMTCkKLQkJCXJldHVybiAtRU5PTUVNOwotCQlyZXQgPSByaW5nLT5hY2Nlc3MucmVhZF9sYXN0KHJpbmcsCi0JCQkJCSh1OCAqKWRhdGEpOwotCQlpZiAocmV0KQotCQkJZ290byBlcnJvcl9mcmVlX2RhdGE7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcl9yZXQ7Ci0JfQotCWxlbiA9IGlpb19zY2FuX21hc2tfY291bnRfdG9fcmlnaHQocmluZywgZWwtPm51bWJlcik7Ci0JaWYgKGxlbiA8IDApIHsKLQkJcmV0ID0gbGVuOworCWlmICghaWlvX3NjYW5fbWFza19xdWVyeShyaW5nLCBpbmRleCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFyaW5nLT5hY2Nlc3MtPnJlYWRfbGFzdCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWRhdGEgPSBrbWFsbG9jKHJpbmctPmFjY2Vzcy0+Z2V0X2J5dGVzX3Blcl9kYXR1bShyaW5nKSwKKwkJICAgICAgIEdGUF9LRVJORUwpOworCWlmIChkYXRhID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gcmluZy0+YWNjZXNzLT5yZWFkX2xhc3QocmluZywgKHU4ICopZGF0YSk7CisJaWYgKHJldCkKIAkJZ290byBlcnJvcl9mcmVlX2RhdGE7Ci0JfQotCWxlbiA9IHNwcmludGYoYnVmLCAicmluZyAlZFxuIiwgZGF0YVtsZW5dKTsKKwkqdmFsID0gZGF0YVtiaXRtYXBfd2VpZ2h0KCZyaW5nLT5zY2FuX21hc2ssIGluZGV4KV07CiBlcnJvcl9mcmVlX2RhdGE6CiAJa2ZyZWUoZGF0YSk7Ci1lcnJvcl9yZXQ6Ci0JcmV0dXJuIHJldCA/IHJldCA6IGxlbjsKIAorCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBjb25zdCB1OCByZWFkX2FsbF90eF9hcnJheVtdID0gewpAQCAtMjIwLDkgKzg3LDEwIEBACiAgKiBAcnhfYXJyYXk6CShkbWEgY2FwYWJsZSkgcmVjZWl2ZSBhcnJheSwgbXVzdCBiZSBhdCBsZWFzdAogICoJCTQqbnVtYmVyIG9mIGNoYW5uZWxzCiAgKiovCi1zdGF0aWMgaW50IGxpczNsMDJkcV9yZWFkX2FsbChzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlICpzdCwgdTggKnJ4X2FycmF5KQorc3RhdGljIGludCBsaXMzbDAyZHFfcmVhZF9hbGwoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwgdTggKnJ4X2FycmF5KQogewotCXN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcgPSBzdC0+aGVscC5pbmRpb19kZXYtPnJpbmc7CisJc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyA9IGluZGlvX2Rldi0+cmluZzsKKwlzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CiAJc3RydWN0IHNwaV90cmFuc2ZlciAqeGZlcnM7CiAJc3RydWN0IHNwaV9tZXNzYWdlIG1zZzsKIAlpbnQgcmV0LCBpLCBqID0gMDsKQEAgLTIzNCw3ICsxMDIsNyBAQAogCiAJbXV0ZXhfbG9jaygmc3QtPmJ1Zl9sb2NrKTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlYWRfYWxsX3R4X2FycmF5KS80OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWFkX2FsbF90eF9hcnJheSkvNDsgaSsrKQogCQlpZiAocmluZy0+c2Nhbl9tYXNrICYgKDEgPDwgaSkpIHsKIAkJCS8qIGxvd2VyIGJ5dGUgKi8KIAkJCXhmZXJzW2pdLnR4X2J1ZiA9IHN0LT50eCArIDIqajsKQEAgLTI1OCw3ICsxMjYsNyBAQAogCQkJeGZlcnNbal0uY3NfY2hhbmdlID0gMTsKIAkJCWorKzsKIAkJfQotCX0KKwogCS8qIEFmdGVyIHRoZXNlIGFyZSB0cmFuc21pdHRlZCwgdGhlIHJ4X2J1ZmYgc2hvdWxkIGhhdmUKIAkgKiB2YWx1ZXMgaW4gYWx0ZXJuYXRlIGJ5dGVzCiAJICovCkBAIC0yNzMsMzEgKzE0MSwyMCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGxpczNsMDJkcV90cmlnZ2VyX2JoX3RvX3Jpbmcoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrX3MpCi17Ci0Jc3RydWN0IGlpb19zd19yaW5nX2hlbHBlcl9zdGF0ZSAqaAotCQk9IGNvbnRhaW5lcl9vZih3b3JrX3MsIHN0cnVjdCBpaW9fc3dfcmluZ19oZWxwZXJfc3RhdGUsCi0JCQl3b3JrX3RyaWdnZXJfdG9fcmluZyk7Ci0Jc3RydWN0IGxpczNsMDJkcV9zdGF0ZSAqc3QgPSBsaXMzbDAyZHFfaF90b19zKGgpOwotCi0Jc3QtPmludGVyID0gMDsKLQlpaW9fc3dfdHJpZ2dlcl9iaF90b19yaW5nKHdvcmtfcyk7Ci19Ci0KLXN0YXRpYyBpbnQgbGlzM2wwMmRxX2dldF9yaW5nX2VsZW1lbnQoc3RydWN0IGlpb19zd19yaW5nX2hlbHBlcl9zdGF0ZSAqaCwKK3N0YXRpYyBpbnQgbGlzM2wwMmRxX2dldF9yaW5nX2VsZW1lbnQoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKIAkJCQl1OCAqYnVmKQogewogCWludCByZXQsIGk7CiAJdTggKnJ4X2FycmF5IDsKIAlzMTYgKmRhdGEgPSAoczE2ICopYnVmOwogCi0JcnhfYXJyYXkgPSBremFsbG9jKDQgKiAoaC0+aW5kaW9fZGV2LT5yaW5nLT5zY2FuX2NvdW50KSwgR0ZQX0tFUk5FTCk7CisJcnhfYXJyYXkgPSBremFsbG9jKDQgKiAoaW5kaW9fZGV2LT5yaW5nLT5zY2FuX2NvdW50KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJ4X2FycmF5ID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCXJldCA9IGxpczNsMDJkcV9yZWFkX2FsbChsaXMzbDAyZHFfaF90b19zKGgpLCByeF9hcnJheSk7CisJcmV0ID0gbGlzM2wwMmRxX3JlYWRfYWxsKGluZGlvX2RldiwgcnhfYXJyYXkpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwotCWZvciAoaSA9IDA7IGkgPCBoLT5pbmRpb19kZXYtPnJpbmctPnNjYW5fY291bnQ7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgaW5kaW9fZGV2LT5yaW5nLT5zY2FuX2NvdW50OyBpKyspCiAJCWRhdGFbaV0gPSBjb21iaW5lXzhfdG9fMTYocnhfYXJyYXlbaSo0KzFdLAogCQkJCQlyeF9hcnJheVtpKjQrM10pOwogCWtmcmVlKHJ4X2FycmF5KTsKQEAgLTMwNSwxOSArMTYyLDQ4IEBACiAJcmV0dXJuIGkqc2l6ZW9mKGRhdGFbMF0pOwogfQogCitzdGF0aWMgaXJxcmV0dXJuX3QgbGlzM2wwMmRxX3RyaWdnZXJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpwKQoreworCXN0cnVjdCBpaW9fcG9sbF9mdW5jICpwZiA9IHA7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHBmLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyA9IGluZGlvX2Rldi0+cmluZzsKKwlpbnQgbGVuID0gMDsKKwlzaXplX3QgZGF0YXNpemUgPSByaW5nLT5hY2Nlc3MtPmdldF9ieXRlc19wZXJfZGF0dW0ocmluZyk7CisJY2hhciAqZGF0YSA9IGttYWxsb2MoZGF0YXNpemUsIEdGUF9LRVJORUwpOworCisJaWYgKGRhdGEgPT0gTlVMTCkgeworCQlkZXZfZXJyKGluZGlvX2Rldi0+ZGV2LnBhcmVudCwKKwkJCSJtZW1vcnkgYWxsb2MgZmFpbGVkIGluIHJpbmcgYmgiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaWYgKHJpbmctPnNjYW5fY291bnQpCisJCWxlbiA9IGxpczNsMDJkcV9nZXRfcmluZ19lbGVtZW50KGluZGlvX2RldiwgZGF0YSk7CisKKwkgIC8qIEd1YXJhbnRlZWQgdG8gYmUgYWxpZ25lZCB3aXRoIDggYnl0ZSBib3VuZGFyeSAqLworCWlmIChyaW5nLT5zY2FuX3RpbWVzdGFtcCkKKwkJKihzNjQgKikoKChwaHlzX2FkZHJfdClkYXRhICsgbGVuCisJCQkJKyBzaXplb2YoczY0KSAtIDEpICYgfihzaXplb2YoczY0KSAtIDEpKQorCQkJPSBwZi0+dGltZXN0YW1wOworCXJpbmctPmFjY2Vzcy0+c3RvcmVfdG8ocmluZywgKHU4ICopZGF0YSwgcGYtPnRpbWVzdGFtcCk7CisKKwlpaW9fdHJpZ2dlcl9ub3RpZnlfZG9uZShpbmRpb19kZXYtPnRyaWcpOworCWtmcmVlKGRhdGEpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKwogLyogQ2FsbGVyIHJlc3BvbnNpYmxlIGZvciBsb2NraW5nIGFzIG5lY2Vzc2FyeS4gKi8KIHN0YXRpYyBpbnQKLV9fbGlzM2wwMmRxX3dyaXRlX2RhdGFfcmVhZHlfY29uZmlnKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgc3RydWN0IGlpb19ldmVudF9oYW5kbGVyX2xpc3QgKmxpc3QsCi0JCQkJICAgIGJvb2wgc3RhdGUpCitfX2xpczNsMDJkcV93cml0ZV9kYXRhX3JlYWR5X2NvbmZpZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgc3RhdGUpCiB7CiAJaW50IHJldDsKIAl1OCB2YWxvbGQ7CiAJYm9vbCBjdXJyZW50bHlzZXQ7CiAJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBsaXMzbDAyZHFfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKIAogLyogR2V0IHRoZSBjdXJyZW50IGV2ZW50IG1hc2sgcmVnaXN0ZXIgKi8KLQlyZXQgPSBsaXMzbDAyZHFfc3BpX3JlYWRfcmVnXzgoZGV2LAorCXJldCA9IGxpczNsMDJkcV9zcGlfcmVhZF9yZWdfOChpbmRpb19kZXYsCiAJCQkJICAgICAgIExJUzNMMDJEUV9SRUdfQ1RSTF8yX0FERFIsCiAJCQkJICAgICAgICZ2YWxvbGQpOwogCWlmIChyZXQpCkBAIC0zMjgsMzIgKzIxNCwzNiBAQAogCiAvKiBEaXNhYmxlIHJlcXVlc3RlZCAqLwogCWlmICghc3RhdGUgJiYgY3VycmVudGx5c2V0KSB7Ci0KKwkJLyogZGlzYWJsZSB0aGUgZGF0YSByZWFkeSBzaWduYWwgKi8KIAkJdmFsb2xkICY9IH5MSVMzTDAyRFFfUkVHX0NUUkxfMl9FTkFCTEVfREFUQV9SRUFEWV9HRU5FUkFUSU9OOworCiAJCS8qIFRoZSBkb3VibGUgd3JpdGUgaXMgdG8gb3ZlcmNvbWUgYSBoYXJkd2FyZSBidWc/Ki8KLQkJcmV0ID0gbGlzM2wwMmRxX3NwaV93cml0ZV9yZWdfOChkZXYsCisJCXJldCA9IGxpczNsMDJkcV9zcGlfd3JpdGVfcmVnXzgoaW5kaW9fZGV2LAogCQkJCQkJTElTM0wwMkRRX1JFR19DVFJMXzJfQUREUiwKLQkJCQkJCSZ2YWxvbGQpOworCQkJCQkJdmFsb2xkKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyb3JfcmV0OwotCQlyZXQgPSBsaXMzbDAyZHFfc3BpX3dyaXRlX3JlZ184KGRldiwKKwkJcmV0ID0gbGlzM2wwMmRxX3NwaV93cml0ZV9yZWdfOChpbmRpb19kZXYsCiAJCQkJCQlMSVMzTDAyRFFfUkVHX0NUUkxfMl9BRERSLAotCQkJCQkJJnZhbG9sZCk7CisJCQkJCQl2YWxvbGQpOwogCQlpZiAocmV0KQogCQkJZ290byBlcnJvcl9yZXQ7Ci0KLQkJaWlvX3JlbW92ZV9ldmVudF9mcm9tX2xpc3QobGlzdCwKLQkJCQkJICAgJmluZGlvX2Rldi0+aW50ZXJydXB0c1swXQotCQkJCQkgICAtPmV2X2xpc3QpOwotCisJCXN0LT50cmlnZ2VyX29uID0gZmFsc2U7CiAvKiBFbmFibGUgcmVxdWVzdGVkICovCiAJfSBlbHNlIGlmIChzdGF0ZSAmJiAhY3VycmVudGx5c2V0KSB7CiAJCS8qIGlmIG5vdCBzZXQsIGVuYWJsZSByZXF1ZXN0ZWQgKi8KLQkJdmFsb2xkIHw9IExJUzNMMDJEUV9SRUdfQ1RSTF8yX0VOQUJMRV9EQVRBX1JFQURZX0dFTkVSQVRJT047Ci0JCWlpb19hZGRfZXZlbnRfdG9fbGlzdChsaXN0LCAmaW5kaW9fZGV2LT5pbnRlcnJ1cHRzWzBdLT5ldl9saXN0KTsKLQkJcmV0ID0gbGlzM2wwMmRxX3NwaV93cml0ZV9yZWdfOChkZXYsCisJCS8qIGZpcnN0IGRpc2FibGUgYWxsIGV2ZW50cyAqLworCQlyZXQgPSBsaXMzbDAyZHFfZGlzYWJsZV9hbGxfZXZlbnRzKGluZGlvX2Rldik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBlcnJvcl9yZXQ7CisKKwkJdmFsb2xkID0gcmV0IHwKKwkJCUxJUzNMMDJEUV9SRUdfQ1RSTF8yX0VOQUJMRV9EQVRBX1JFQURZX0dFTkVSQVRJT047CisKKwkJc3QtPnRyaWdnZXJfb24gPSB0cnVlOworCQlyZXQgPSBsaXMzbDAyZHFfc3BpX3dyaXRlX3JlZ184KGluZGlvX2RldiwKIAkJCQkJCUxJUzNMMDJEUV9SRUdfQ1RSTF8yX0FERFIsCi0JCQkJCQkmdmFsb2xkKTsKKwkJCQkJCXZhbG9sZCk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycm9yX3JldDsKIAl9CkBAIC0zNzMsNjUgKzI2Myw0NSBAQAogc3RhdGljIGludCBsaXMzbDAyZHFfZGF0YV9yZHlfdHJpZ2dlcl9zZXRfc3RhdGUoc3RydWN0IGlpb190cmlnZ2VyICp0cmlnLAogCQkJCQkJYm9vbCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlICpzdCA9IHRyaWctPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gdHJpZy0+cHJpdmF0ZV9kYXRhOwogCWludCByZXQgPSAwOwogCXU4IHQ7Ci0JX19saXMzbDAyZHFfd3JpdGVfZGF0YV9yZWFkeV9jb25maWcoJnN0LT5oZWxwLmluZGlvX2Rldi0+ZGV2LAotCQkJCQkgICAgJmlpb19ldmVudF9kYXRhX3JkeV90cmlnLAotCQkJCQkgICAgc3RhdGUpOworCisJX19saXMzbDAyZHFfd3JpdGVfZGF0YV9yZWFkeV9jb25maWcoJmluZGlvX2Rldi0+ZGV2LCBzdGF0ZSk7CiAJaWYgKHN0YXRlID09IGZhbHNlKSB7Ci0JCS8qIHBvc3NpYmxlIHF1aXJrIHdpdGggaGFuZGxlciBjdXJyZW50bHkgd29ya2VkIGFyb3VuZAotCQkgICBieSBlbnN1cmluZyB0aGUgd29yayBxdWV1ZSBpcyBlbXB0eSAqLwotCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCQkvKiBDbGVhciBhbnkgb3V0c3RhbmRpbmcgcmVhZHkgZXZlbnRzICovCi0JCXJldCA9IGxpczNsMDJkcV9yZWFkX2FsbChzdCwgTlVMTCk7CisJCS8qCisJCSAqIEEgcG9zc2libGUgcXVpcmsgd2l0aCB0ZWggaGFuZGxlciBpcyBjdXJyZW50bHkgd29ya2VkIGFyb3VuZAorCQkgKiAgYnkgZW5zdXJpbmcgb3V0c3RhbmRpbmcgcmVhZCBldmVudHMgYXJlIGNsZWFyZWQuCisJCSAqLworCQlyZXQgPSBsaXMzbDAyZHFfcmVhZF9hbGwoaW5kaW9fZGV2LCBOVUxMKTsKIAl9Ci0JbGlzM2wwMmRxX3NwaV9yZWFkX3JlZ184KCZzdC0+aGVscC5pbmRpb19kZXYtPmRldiwKKwlsaXMzbDAyZHFfc3BpX3JlYWRfcmVnXzgoaW5kaW9fZGV2LAogCQkJCSBMSVMzTDAyRFFfUkVHX1dBS0VfVVBfU1JDX0FERFIsCiAJCQkJICZ0KTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgSUlPX1RSSUdHRVJfTkFNRV9BVFRSOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbGlzM2wwMmRxX3RyaWdnZXJfYXR0cnNbXSA9IHsKLQkmZGV2X2F0dHJfbmFtZS5hdHRyLAotCU5VTEwsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBsaXMzbDAyZHFfdHJpZ2dlcl9hdHRyX2dyb3VwID0gewotCS5hdHRycyA9IGxpczNsMDJkcV90cmlnZ2VyX2F0dHJzLAotfTsKLQogLyoqCiAgKiBsaXMzbDAyZHFfdHJpZ190cnlfcmVlbigpIHRyeSByZW5hYmxpbmcgaXJxIGZvciBkYXRhIHJkeSB0cmlnZ2VyCiAgKiBAdHJpZzoJdGhlIGRhdGFyZHkgdHJpZ2dlcgotICoKLSAqIEFzIHRoZSB0cmlnZ2VyIG1heSBvY2N1ciBvbiBhbnkgZGF0YSBlbGVtZW50IGJlaW5nIHVwZGF0ZWQgaXQgaXMKLSAqIHJlYWxseSByYXRoZXIgbGlrZWx5IHRvIG9jY3VyIGR1cmluZyB0aGUgcmVhZCBmcm9tIHRoZSBwcmV2aW91cwotICogdHJpZ2dlciBldmVudC4gIFRoZSBvbmx5IHdheSB0byBkaXNjb3ZlciBpZiB0aGlzIGhhcyBvY2N1cnJlZCBvbgotICogYm9hcmRzIG5vdCBzdXBwb3J0aW5nIGxldmVsIGludGVycnVwdHMgaXMgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGxpbmUuCi0gKiBJZiBpdCBpcyBpbmRpY2F0aW5nIGFub3RoZXIgaW50ZXJydXB0IGFuZCB3ZSBkb24ndCBzZWVtIHRvIGhhdmUgYQotICogaGFuZGxlciBsb29raW5nIGF0IGl0LCB0aGVuIHdlIG5lZWQgdG8gbm90aWZ5IHRoZSBjb3JlIHRoYXQgd2UgbmVlZAotICogdG8gdGVsbCB0aGUgdHJpZ2dlcmluZyBjb3JlIHRvIHRyeSByZWFkaW5nIGFsbCB0aGVzZSBhZ2Fpbi4KLSAqKi8KKyAqLwogc3RhdGljIGludCBsaXMzbDAyZHFfdHJpZ190cnlfcmVlbihzdHJ1Y3QgaWlvX3RyaWdnZXIgKnRyaWcpCiB7Ci0Jc3RydWN0IGxpczNsMDJkcV9zdGF0ZSAqc3QgPSB0cmlnLT5wcml2YXRlX2RhdGE7Ci0JZW5hYmxlX2lycShzdC0+dXMtPmlycSk7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHRyaWctPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CisJaW50IGk7CisKIAkvKiBJZiBncGlvIHN0aWxsIGhpZ2ggKG9yIGhpZ2ggYWdhaW4pICovCi0JaWYgKGdwaW9fZ2V0X3ZhbHVlKGlycV90b19ncGlvKHN0LT51cy0+aXJxKSkpCi0JCWlmIChzdC0+aW50ZXIgPT0gMCkgewotCQkJLyogYWxyZWFkeSBpbnRlcnJ1cHQgaGFuZGxlciBkZWFsaW5nIHdpdGggaXQgKi8KLQkJCWRpc2FibGVfaXJxX25vc3luYyhzdC0+dXMtPmlycSk7Ci0JCQlpZiAoc3QtPmludGVyID09IDEpIHsKLQkJCQkvKiBpbnRlcnJ1cHQgaGFuZGxlciBzbnVjayBpbiBiZXR3ZWVuIHRlc3QKLQkJCQkgKiBhbmQgZGlzYWJsZSAqLwotCQkJCWVuYWJsZV9pcnEoc3QtPnVzLT5pcnEpOwotCQkJCXJldHVybiAwOwotCQkJfQotCQkJcmV0dXJuIC1FQUdBSU47Ci0JCX0KKwkvKiBJbiB0aGVvcnkgcG9zc2libGUgd2Ugd2lsbCBuZWVkIHRvIGRvIHRoaXMgc2V2ZXJhbCB0aW1lcyAqLworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisJCWlmIChncGlvX2dldF92YWx1ZShpcnFfdG9fZ3BpbyhzdC0+dXMtPmlycSkpKQorCQkJbGlzM2wwMmRxX3JlYWRfYWxsKGluZGlvX2RldiwgTlVMTCk7CisJCWVsc2UKKwkJCWJyZWFrOworCWlmIChpID09IDUpCisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJGYWlsZWQgdG8gY2xlYXIgdGhlIGludGVycnVwdCBmb3IgbGlzM2wwMmRxXG4iKTsKKwogCS8qIGlycSByZWVuYWJsZWQgc28gc3VjY2VzcyEgKi8KIAlyZXR1cm4gMDsKIH0KQEAgLTQzOSw2MiArMzA5LDEyNCBAQAogaW50IGxpczNsMDJkcV9wcm9iZV90cmlnZ2VyKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCiB7CiAJaW50IHJldDsKLQlzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlICpzdGF0ZSA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CisJc3RydWN0IGxpczNsMDJkcV9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwogCi0Jc3RhdGUtPnRyaWcgPSBpaW9fYWxsb2NhdGVfdHJpZ2dlcigpOwotCWlmICghc3RhdGUtPnRyaWcpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jc3RhdGUtPnRyaWctPm5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwKLQkJCQkgICAgICAibGlzM2wwMmRxLWRldiVkIiwKLQkJCQkgICAgICBpbmRpb19kZXYtPmlkKTsKLQlpZiAoIXN0YXRlLT50cmlnLT5uYW1lKSB7CisJc3QtPnRyaWcgPSBpaW9fYWxsb2NhdGVfdHJpZ2dlcigibGlzM2wwMmRxLWRldiVkIiwgaW5kaW9fZGV2LT5pZCk7CisJaWYgKCFzdC0+dHJpZykgewogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yX2ZyZWVfdHJpZzsKKwkJZ290byBlcnJvcl9yZXQ7CiAJfQogCi0Jc3RhdGUtPnRyaWctPmRldi5wYXJlbnQgPSAmc3RhdGUtPnVzLT5kZXY7Ci0Jc3RhdGUtPnRyaWctPm93bmVyID0gVEhJU19NT0RVTEU7Ci0Jc3RhdGUtPnRyaWctPnByaXZhdGVfZGF0YSA9IHN0YXRlOwotCXN0YXRlLT50cmlnLT5zZXRfdHJpZ2dlcl9zdGF0ZSA9ICZsaXMzbDAyZHFfZGF0YV9yZHlfdHJpZ2dlcl9zZXRfc3RhdGU7Ci0Jc3RhdGUtPnRyaWctPnRyeV9yZWVuYWJsZSA9ICZsaXMzbDAyZHFfdHJpZ190cnlfcmVlbjsKLQlzdGF0ZS0+dHJpZy0+Y29udHJvbF9hdHRycyA9ICZsaXMzbDAyZHFfdHJpZ2dlcl9hdHRyX2dyb3VwOwotCXJldCA9IGlpb190cmlnZ2VyX3JlZ2lzdGVyKHN0YXRlLT50cmlnKTsKKwlzdC0+dHJpZy0+ZGV2LnBhcmVudCA9ICZzdC0+dXMtPmRldjsKKwlzdC0+dHJpZy0+b3duZXIgPSBUSElTX01PRFVMRTsKKwlzdC0+dHJpZy0+cHJpdmF0ZV9kYXRhID0gaW5kaW9fZGV2OworCXN0LT50cmlnLT5zZXRfdHJpZ2dlcl9zdGF0ZSA9ICZsaXMzbDAyZHFfZGF0YV9yZHlfdHJpZ2dlcl9zZXRfc3RhdGU7CisJc3QtPnRyaWctPnRyeV9yZWVuYWJsZSA9ICZsaXMzbDAyZHFfdHJpZ190cnlfcmVlbjsKKwlyZXQgPSBpaW9fdHJpZ2dlcl9yZWdpc3RlcihzdC0+dHJpZyk7CiAJaWYgKHJldCkKLQkJZ290byBlcnJvcl9mcmVlX3RyaWdfbmFtZTsKKwkJZ290byBlcnJvcl9mcmVlX3RyaWc7CiAKIAlyZXR1cm4gMDsKIAotZXJyb3JfZnJlZV90cmlnX25hbWU6Ci0Ja2ZyZWUoc3RhdGUtPnRyaWctPm5hbWUpOwogZXJyb3JfZnJlZV90cmlnOgotCWlpb19mcmVlX3RyaWdnZXIoc3RhdGUtPnRyaWcpOwotCisJaWlvX2ZyZWVfdHJpZ2dlcihzdC0+dHJpZyk7CitlcnJvcl9yZXQ6CiAJcmV0dXJuIHJldDsKIH0KIAogdm9pZCBsaXMzbDAyZHFfcmVtb3ZlX3RyaWdnZXIoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKLQlzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlICpzdGF0ZSA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CisJc3RydWN0IGxpczNsMDJkcV9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwogCi0JaWlvX3RyaWdnZXJfdW5yZWdpc3RlcihzdGF0ZS0+dHJpZyk7Ci0Ja2ZyZWUoc3RhdGUtPnRyaWctPm5hbWUpOwotCWlpb19mcmVlX3RyaWdnZXIoc3RhdGUtPnRyaWcpOworCWlpb190cmlnZ2VyX3VucmVnaXN0ZXIoc3QtPnRyaWcpOworCWlpb19mcmVlX3RyaWdnZXIoc3QtPnRyaWcpOwogfQogCiB2b2lkIGxpczNsMDJkcV91bmNvbmZpZ3VyZV9yaW5nKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCiB7Ci0Ja2ZyZWUoaW5kaW9fZGV2LT5wb2xsZnVuYyk7CisJaWlvX2RlYWxsb2NfcG9sbGZ1bmMoaW5kaW9fZGV2LT5wb2xsZnVuYyk7CiAJbGlzM2wwMmRxX2ZyZWVfYnVmKGluZGlvX2Rldi0+cmluZyk7CiB9CiAKK3N0YXRpYyBpbnQgbGlzM2wwMmRxX3JpbmdfcG9zdGVuYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQoreworCS8qIERpc2FibGUgdW53YW50ZWQgY2hhbm5lbHMgb3RoZXJ3aXNlIHRoZSBpbnRlcnJ1cHQgd2lsbCBub3QgY2xlYXIgKi8KKwl1OCB0OworCWludCByZXQ7CisJYm9vbCBvbmVlbmFibGVkID0gZmFsc2U7CisKKwlyZXQgPSBsaXMzbDAyZHFfc3BpX3JlYWRfcmVnXzgoaW5kaW9fZGV2LAorCQkJCSAgICAgICBMSVMzTDAyRFFfUkVHX0NUUkxfMV9BRERSLAorCQkJCSAgICAgICAmdCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcl9yZXQ7CisKKwlpZiAoaWlvX3NjYW5fbWFza19xdWVyeShpbmRpb19kZXYtPnJpbmcsIDApKSB7CisJCXQgfD0gTElTM0wwMkRRX1JFR19DVFJMXzFfQVhFU19YX0VOQUJMRTsKKwkJb25lZW5hYmxlZCA9IHRydWU7CisJfSBlbHNlCisJCXQgJj0gfkxJUzNMMDJEUV9SRUdfQ1RSTF8xX0FYRVNfWF9FTkFCTEU7CisJaWYgKGlpb19zY2FuX21hc2tfcXVlcnkoaW5kaW9fZGV2LT5yaW5nLCAxKSkgeworCQl0IHw9IExJUzNMMDJEUV9SRUdfQ1RSTF8xX0FYRVNfWV9FTkFCTEU7CisJCW9uZWVuYWJsZWQgPSB0cnVlOworCX0gZWxzZQorCQl0ICY9IH5MSVMzTDAyRFFfUkVHX0NUUkxfMV9BWEVTX1lfRU5BQkxFOworCWlmIChpaW9fc2Nhbl9tYXNrX3F1ZXJ5KGluZGlvX2Rldi0+cmluZywgMikpIHsKKwkJdCB8PSBMSVMzTDAyRFFfUkVHX0NUUkxfMV9BWEVTX1pfRU5BQkxFOworCQlvbmVlbmFibGVkID0gdHJ1ZTsKKwl9IGVsc2UKKwkJdCAmPSB+TElTM0wwMkRRX1JFR19DVFJMXzFfQVhFU19aX0VOQUJMRTsKKworCWlmICghb25lZW5hYmxlZCkgLyogd2hhdCBoYXBwZW5zIGluIHRoaXMgY2FzZSBpcyB1bmtub3duICovCisJCXJldHVybiAtRUlOVkFMOworCXJldCA9IGxpczNsMDJkcV9zcGlfd3JpdGVfcmVnXzgoaW5kaW9fZGV2LAorCQkJCQlMSVMzTDAyRFFfUkVHX0NUUkxfMV9BRERSLAorCQkJCQl0KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yX3JldDsKKworCXJldHVybiBpaW9fdHJpZ2dlcmVkX3JpbmdfcG9zdGVuYWJsZShpbmRpb19kZXYpOworZXJyb3JfcmV0OgorCXJldHVybiByZXQ7Cit9CisKKy8qIFR1cm4gYWxsIGNoYW5uZWxzIG9uIGFnYWluICovCitzdGF0aWMgaW50IGxpczNsMDJkcV9yaW5nX3ByZWRpc2FibGUoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKK3sKKwl1OCB0OworCWludCByZXQ7CisKKwlyZXQgPSBpaW9fdHJpZ2dlcmVkX3JpbmdfcHJlZGlzYWJsZShpbmRpb19kZXYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3JfcmV0OworCisJcmV0ID0gbGlzM2wwMmRxX3NwaV9yZWFkX3JlZ184KGluZGlvX2RldiwKKwkJCQkgICAgICAgTElTM0wwMkRRX1JFR19DVFJMXzFfQUREUiwKKwkJCQkgICAgICAgJnQpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3JfcmV0OworCXQgfD0gTElTM0wwMkRRX1JFR19DVFJMXzFfQVhFU19YX0VOQUJMRSB8CisJCUxJUzNMMDJEUV9SRUdfQ1RSTF8xX0FYRVNfWV9FTkFCTEUgfAorCQlMSVMzTDAyRFFfUkVHX0NUUkxfMV9BWEVTX1pfRU5BQkxFOworCisJcmV0ID0gbGlzM2wwMmRxX3NwaV93cml0ZV9yZWdfOChpbmRpb19kZXYsCisJCQkJCUxJUzNMMDJEUV9SRUdfQ1RSTF8xX0FERFIsCisJCQkJCXQpOworCitlcnJvcl9yZXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9fcmluZ19zZXR1cF9vcHMgbGlzM2wwMmRxX3Jpbmdfc2V0dXBfb3BzID0geworCS5wcmVlbmFibGUgPSAmaWlvX3N3X3JpbmdfcHJlZW5hYmxlLAorCS5wb3N0ZW5hYmxlID0gJmxpczNsMDJkcV9yaW5nX3Bvc3RlbmFibGUsCisJLnByZWRpc2FibGUgPSAmbGlzM2wwMmRxX3JpbmdfcHJlZGlzYWJsZSwKK307CisKIGludCBsaXMzbDAyZHFfY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKIAlpbnQgcmV0OwotCXN0cnVjdCBpaW9fc3dfcmluZ19oZWxwZXJfc3RhdGUgKmggPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CiAJc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZzsKLQlJTklUX1dPUksoJmgtPndvcmtfdHJpZ2dlcl90b19yaW5nLCBsaXMzbDAyZHFfdHJpZ2dlcl9iaF90b19yaW5nKTsKLQloLT5nZXRfcmluZ19lbGVtZW50ID0gJmxpczNsMDJkcV9nZXRfcmluZ19lbGVtZW50OwogCiAJcmluZyA9IGxpczNsMDJkcV9hbGxvY19idWYoaW5kaW9fZGV2KTsKIAlpZiAoIXJpbmcpCkBAIC01MDIsMjMgKzQzNCwzMSBAQAogCiAJaW5kaW9fZGV2LT5yaW5nID0gcmluZzsKIAkvKiBFZmZlY3RpdmVseSBzZWxlY3QgdGhlIHJpbmcgYnVmZmVyIGltcGxlbWVudGF0aW9uICovCi0JbGlzM2wwMmRxX3JlZ2lzdGVyX2J1Zl9mdW5jcygmcmluZy0+YWNjZXNzKTsKKwlpbmRpb19kZXYtPnJpbmctPmFjY2VzcyA9ICZsaXMzbDAyZHFfYWNjZXNzX2Z1bmNzOwogCXJpbmctPmJwZSA9IDI7Ci0JcmluZy0+c2Nhbl9lbF9hdHRycyA9ICZsaXMzbDAyZHFfc2Nhbl9lbF9ncm91cDsKKwogCXJpbmctPnNjYW5fdGltZXN0YW1wID0gdHJ1ZTsKLQlyaW5nLT5wcmVlbmFibGUgPSAmaWlvX3N3X3JpbmdfcHJlZW5hYmxlOwotCXJpbmctPnBvc3RlbmFibGUgPSAmaWlvX3RyaWdnZXJlZF9yaW5nX3Bvc3RlbmFibGU7Ci0JcmluZy0+cHJlZGlzYWJsZSA9ICZpaW9fdHJpZ2dlcmVkX3JpbmdfcHJlZGlzYWJsZTsKKwlyaW5nLT5zZXR1cF9vcHMgPSAmbGlzM2wwMmRxX3Jpbmdfc2V0dXBfb3BzOwogCXJpbmctPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAkvKiBTZXQgZGVmYXVsdCBzY2FuIG1vZGUgKi8KLQlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCBpaW9fc2Nhbl9lbF9hY2NlbF94Lm51bWJlcik7Ci0JaWlvX3NjYW5fbWFza19zZXQocmluZywgaWlvX3NjYW5fZWxfYWNjZWxfeS5udW1iZXIpOwotCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIGlpb19zY2FuX2VsX2FjY2VsX3oubnVtYmVyKTsKKwlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCAwKTsKKwlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCAxKTsKKwlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCAyKTsKIAotCXJldCA9IGlpb19hbGxvY19wb2xsZnVuYyhpbmRpb19kZXYsIE5VTEwsICZsaXMzbDAyZHFfcG9sbF9mdW5jX3RoKTsKLQlpZiAocmV0KQorCS8qIEZ1bmN0aW9ucyBhcmUgTlVMTCBhcyB3ZSBzZXQgaGFuZGxlciBiZWxvdyAqLworCWluZGlvX2Rldi0+cG9sbGZ1bmMgPSBpaW9fYWxsb2NfcG9sbGZ1bmMoJmlpb19wb2xsZnVuY19zdG9yZV90aW1lLAorCQkJCQkJICZsaXMzbDAyZHFfdHJpZ2dlcl9oYW5kbGVyLAorCQkJCQkJIDAsCisJCQkJCQkgaW5kaW9fZGV2LAorCQkJCQkJICJsaXMzbDAyZHFfY29uc3VtZXIlZCIsCisJCQkJCQkgaW5kaW9fZGV2LT5pZCk7CisKKwlpZiAoaW5kaW9fZGV2LT5wb2xsZnVuYyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3JfaWlvX3N3X3JiX2ZyZWU7CisJfQorCiAJaW5kaW9fZGV2LT5tb2RlcyB8PSBJTkRJT19SSU5HX1RSSUdHRVJFRDsKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9zY2EzMDAwLmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL3NjYTMwMDAuaAppbmRleCBkYjcxMDMzLi5jZjA3NTFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL3NjYTMwMDAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL3NjYTMwMDAuaApAQCAtMTU4LDE3ICsxNTgsMTcgQEAKIAogLyoqCiAgKiBzdHJ1Y3Qgc2NhMzAwMF9zdGF0ZSAtIGRldmljZSBpbnN0YW5jZSBzdGF0ZSBpbmZvcm1hdGlvbgotICogQHVzOiAJIAkJdGhlIGFzc29jaWF0ZWQgc3BpIGRldmljZQotICogQGluZm86IAkgIAkJY2hpcCB2YXJpYW50IGluZm9ybWF0aW9uCi0gKiBAaW5kaW9fZGV2OiAJIAkJZGV2aWNlIGluZm9ybWF0aW9uIHVzZWQgYnkgdGhlIElJTyBjb3JlCi0gKiBAaW50ZXJydXB0X2hhbmRsZXJfd3M6IAlldmVudCBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgYWxsIGV2ZW50cwotICogQGxhc3RfdGltZXN0YW1wOiAJCXRoZSB0aW1lc3RhbXAgb2YgdGhlIGxhc3QgZXZlbnQKLSAqIEBtb19kZXRfdXNlX2NvdW50OiAJCXJlZmVyZW5jZSBjb3VudGVyIGZvciB0aGUgbW90aW9uIGRldGVjdGlvbiB1bml0Ci0gKiBAbG9jazogCQkgCWxvY2sgdXNlZCB0byBwcm90ZWN0IGVsZW1lbnRzIG9mIHNjYTMwMDBfc3RhdGUKLSAqIAkgCQkJYW5kIHRoZSB1bmRlcmx5aW5nIGRldmljZSBzdGF0ZS4KLSAqIEBicHNlOiAJCSAJbnVtYmVyIG9mIGJpdHMgcGVyIHNjYW4gZWxlbWVudAotICogQHR4OiAJCSAJZG1hLWFibGUgdHJhbnNtaXQgYnVmZmVyCi0gKiBAcng6IAkJIAlkbWEtYWJsZSByZWNlaXZlIGJ1ZmZlcgorICogQHVzOgkJCXRoZSBhc3NvY2lhdGVkIHNwaSBkZXZpY2UKKyAqIEBpbmZvOgkJCWNoaXAgdmFyaWFudCBpbmZvcm1hdGlvbgorICogQGluZGlvX2RldjoJCQlkZXZpY2UgaW5mb3JtYXRpb24gdXNlZCBieSB0aGUgSUlPIGNvcmUKKyAqIEBpbnRlcnJ1cHRfaGFuZGxlcl93czoJZXZlbnQgaW50ZXJydXB0IGhhbmRsZXIgZm9yIGFsbCBldmVudHMKKyAqIEBsYXN0X3RpbWVzdGFtcDoJCXRoZSB0aW1lc3RhbXAgb2YgdGhlIGxhc3QgZXZlbnQKKyAqIEBtb19kZXRfdXNlX2NvdW50OgkJcmVmZXJlbmNlIGNvdW50ZXIgZm9yIHRoZSBtb3Rpb24gZGV0ZWN0aW9uIHVuaXQKKyAqIEBsb2NrOgkJCWxvY2sgdXNlZCB0byBwcm90ZWN0IGVsZW1lbnRzIG9mIHNjYTMwMDBfc3RhdGUKKyAqCQkJCWFuZCB0aGUgdW5kZXJseWluZyBkZXZpY2Ugc3RhdGUuCisgKiBAYnBzZToJCQludW1iZXIgb2YgYml0cyBwZXIgc2NhbiBlbGVtZW50CisgKiBAdHg6CQkJZG1hLWFibGUgdHJhbnNtaXQgYnVmZmVyCisgKiBAcng6CQkJZG1hLWFibGUgcmVjZWl2ZSBidWZmZXIKICAqKi8KIHN0cnVjdCBzY2EzMDAwX3N0YXRlIHsKIAlzdHJ1Y3Qgc3BpX2RldmljZQkJKnVzOwpAQCAtMTc5LDE1ICsxNzksMTQgQEAKIAlpbnQJCQkJbW9fZGV0X3VzZV9jb3VudDsKIAlzdHJ1Y3QgbXV0ZXgJCQlsb2NrOwogCWludAkJCQlicHNlOwotCXU4CQkJCSp0eDsKLQkvKiBub3QgdXNlZCBkdXJpbmcgYSByaW5nIGJ1ZmZlciByZWFkICovCi0JdTgJCQkJKnJ4OworCS8qIENhbiB0aGVzZSBzaGFyZSBhIGNhY2hlbGluZSA/ICovCisJdTgJCQkJcnhbMl0gX19fX2NhY2hlbGluZV9hbGlnbmVkOworCXU4CQkJCXR4WzZdIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKIH07CiAKIC8qKgogICogc3RydWN0IHNjYTMwMDBfY2hpcF9pbmZvIC0gbW9kZWwgZGVwZW5kZW50IHBhcmFtZXRlcnMKLSAqIEBuYW1lOiAJCQltb2RlbCBpZGVudGlmaWNhdGlvbgotICogQHNjYWxlOgkJCXN0cmluZyBjb250YWluaW5nIGZsb2F0aW5nIHBvaW50IHNjYWxlIGZhY3RvcgorICogQHNjYWxlOgkJCXNjYWxlICogMTBeLTYKICAqIEB0ZW1wX291dHB1dDoJCXNvbWUgZGV2aWNlcyBoYXZlIHRlbXBlcmF0dXJlIHNlbnNvcnMuCiAgKiBAbWVhc3VyZW1lbnRfbW9kZV9mcmVxOglub3JtYWwgbW9kZSBzYW1wbGluZyBmcmVxdWVuY3kKICAqIEBvcHRpb25fbW9kZV8xOgkJZmlyc3Qgb3B0aW9uYWwgbW9kZS4gTm90IGFsbCBtb2RlbHMgaGF2ZSBvbmUKQEAgLTE5OSwzMCArMTk4LDIwIEBACiAgKiBzY2EzMDAwIHZhcmlhbnQuCiAgKiovCiBzdHJ1Y3Qgc2NhMzAwMF9jaGlwX2luZm8gewotCWNvbnN0IGNoYXIJCSpuYW1lOwotCWNvbnN0IGNoYXIJCSpzY2FsZTsKKwl1bnNpZ25lZCBpbnQJCXNjYWxlOwogCWJvb2wJCQl0ZW1wX291dHB1dDsKIAlpbnQJCQltZWFzdXJlbWVudF9tb2RlX2ZyZXE7CiAJaW50CQkJb3B0aW9uX21vZGVfMTsKIAlpbnQJCQlvcHRpb25fbW9kZV8xX2ZyZXE7CiAJaW50CQkJb3B0aW9uX21vZGVfMjsKIAlpbnQJCQlvcHRpb25fbW9kZV8yX2ZyZXE7CisJaW50CQkJbW90X2RldF9tdWx0X3h6WzZdOworCWludAkJCW1vdF9kZXRfbXVsdF95WzddOwogfTsKIAotLyoqCi0gKiBzY2EzMDAwX3JlYWRfZGF0YSgpIHJlYWQgYSBzZXJpZXMgb2YgdmFsdWVzIGZyb20gdGhlIGRldmljZQotICogQGRldjoJCWRldmljZQotICogQHJlZ19hZGRyZXNzX2hpZ2g6CXN0YXJ0IGFkZHJlc3MgKGRlY3JlbWVudGVkIHJlYWQpCi0gKiBAcng6CQkJcG9pbnRlciB3aGVyZSByZWNlaXZlZCBkYXRhIGlzIHBsYWNlZC4gQ2FsbGVlCi0gKgkJCXJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIHRoaXMuCi0gKiBAbGVuOgkJbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQKLSAqCi0gKiBUaGUgbWFpbiBsb2NrIG11c3QgYmUgaGVsZC4KLSAqKi8KLWludCBzY2EzMDAwX3JlYWRfZGF0YShzdHJ1Y3Qgc2NhMzAwMF9zdGF0ZSAqc3QsCi0JCSAgICAgIHU4IHJlZ19hZGRyZXNzX2hpZ2gsCi0JCSAgICAgIHU4ICoqcnhfcCwKLQkJICAgICAgaW50IGxlbik7CitpbnQgc2NhMzAwMF9yZWFkX2RhdGFfc2hvcnQoc3RydWN0IHNjYTMwMDBfc3RhdGUgKnN0LAorCQkJICAgIHU4IHJlZ19hZGRyZXNzX2hpZ2gsCisJCQkgICAgaW50IGxlbik7CiAKIC8qKgogICogc2NhMzAwMF93cml0ZV9yZWcoKSB3cml0ZSBhIHNpbmdsZSByZWdpc3RlcgpAQCAtMjMzLDI5ICsyMjIsNiBAQAogICoqLwogaW50IHNjYTMwMDBfd3JpdGVfcmVnKHN0cnVjdCBzY2EzMDAwX3N0YXRlICpzdCwgdTggYWRkcmVzcywgdTggdmFsKTsKIAotLyogQ29udmVyc2lvbiBmdW5jdGlvbiBmb3IgdXNlIHdpdGggdGhlIHJpbmcgYnVmZmVyIHdoZW4gaW4gMTFiaXQgbW9kZSAqLwotc3RhdGljIGlubGluZSBpbnQgc2NhMzAwMF8xMWJpdF9jb252ZXJ0KHVpbnQ4X3QgbXNiLCB1aW50OF90IGxzYikKLXsKLQlpbnQxNl90IHZhbDsKLQotCXZhbCA9ICgobHNiID4+IDMpICYgMHgxQykgfCAobXNiIDw8IDUpOwotCXZhbCB8PSAodmFsICYgKDEgPDwgMTIpKSA/IDB4RTAwMCA6IDA7Ci0KLQlyZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBzY2EzMDAwXzEzYml0X2NvbnZlcnQodWludDhfdCBtc2IsIHVpbnQ4X3QgbHNiKQotewotCXMxNiB2YWw7Ci0KLQl2YWwgPSAoKGxzYiA+PiAzKSAmIDB4MUYpIHwgKG1zYiA8PCA1KTsKLQkvKiBzaWduIGZpbGwgKi8KLQl2YWwgfD0gKHZhbCAmICgxIDw8IDEyKSkgPyAweEUwMDAgOiAwOwotCi0JcmV0dXJuIHZhbDsKLX0KLQotCiAjaWZkZWYgQ09ORklHX0lJT19SSU5HX0JVRkZFUgogLyoqCiAgKiBzY2EzMDAwX3JlZ2lzdGVyX3JpbmdfZnVuY3MoKSBzZXR1cCB0aGUgcmluZyBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb25zCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL3NjYTMwMDBfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9zY2EzMDAwX2NvcmUuYwppbmRleCA1YjA2ZGVhLi5mMjEzYjg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL3NjYTMwMDBfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvc2NhMzAwMF9jb3JlLmMKQEAgLTQwLDk1ICs0MCw3NCBAQAogICogZG8gbm90IGFjdHVhbGx5IGFwcGVhciB0byBiZSBhdmFpbGFibGUuCiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2NhMzAwMF9jaGlwX2luZm8gc2NhMzAwMF9zcGlfY2hpcF9pbmZvX3RibFtdID0gewotCXsKLQkJLm5hbWUgPSAic2NhMzAwMC1kMDEiLAotCQkuc2NhbGUgPSAiIDAuMDA3MzU3NSIsCisJW2QwMV0gPSB7CisJCS5zY2FsZSA9IDczNTcsCiAJCS50ZW1wX291dHB1dCA9IHRydWUsCiAJCS5tZWFzdXJlbWVudF9tb2RlX2ZyZXEgPSAyNTAsCiAJCS5vcHRpb25fbW9kZV8xID0gU0NBMzAwMF9PUF9NT0RFX0JZUEFTUywKIAkJLm9wdGlvbl9tb2RlXzFfZnJlcSA9IDI1MCwKLQl9LCB7Ci0JCS5uYW1lID0gInNjYTMwMDAtZTAyIiwKLQkJLnNjYWxlID0gIjAuMDA5ODEiLAorCQkubW90X2RldF9tdWx0X3h6ID0gezUwLCAxMDAsIDIwMCwgMzUwLCA2NTAsIDEzMDB9LAorCQkubW90X2RldF9tdWx0X3kgPSB7NTAsIDEwMCwgMTUwLCAyNTAsIDQ1MCwgODUwLCAxNzUwfSwKKwl9LAorCVtlMDJdID0geworCQkuc2NhbGUgPSA5ODEwLAogCQkubWVhc3VyZW1lbnRfbW9kZV9mcmVxID0gMTI1LAogCQkub3B0aW9uX21vZGVfMSA9IFNDQTMwMDBfT1BfTU9ERV9OQVJST1csCiAJCS5vcHRpb25fbW9kZV8xX2ZyZXEgPSA2MywKLQl9LCB7Ci0JCS5uYW1lID0gInNjYTMwMDAtZTA0IiwKLQkJLnNjYWxlID0gIjAuMDE5NjIiLAorCQkubW90X2RldF9tdWx0X3h6ID0gezEwMCwgMTUwLCAzMDAsIDU1MCwgMTA1MCwgMjA1MH0sCisJCS5tb3RfZGV0X211bHRfeSA9IHs1MCwgMTAwLCAyMDAsIDM1MCwgNzAwLCAxMzUwLCAyNzAwfSwKKwl9LAorCVtlMDRdID0geworCQkuc2NhbGUgPSAxOTYyMCwKIAkJLm1lYXN1cmVtZW50X21vZGVfZnJlcSA9IDEwMCwKIAkJLm9wdGlvbl9tb2RlXzEgPSBTQ0EzMDAwX09QX01PREVfTkFSUk9XLAogCQkub3B0aW9uX21vZGVfMV9mcmVxID0gNTAsCiAJCS5vcHRpb25fbW9kZV8yID0gU0NBMzAwMF9PUF9NT0RFX1dJREUsCiAJCS5vcHRpb25fbW9kZV8yX2ZyZXEgPSA0MDAsCi0JfSwgewotCQkubmFtZSA9ICJzY2EzMDAwLWUwNSIsCi0JCS5zY2FsZSA9ICIwLjA2MTMxMjUiLAorCQkubW90X2RldF9tdWx0X3h6ID0gezIwMCwgMzAwLCA2MDAsIDExMDAsIDIxMDAsIDQxMDB9LAorCQkubW90X2RldF9tdWx0X3kgPSB7MTAwLCAyMDAsIDQwMCwgNzAwMCwgMTQwMCwgMjcwMCwgNTQwMDB9LAorCX0sCisJW2UwNV0gPSB7CisJCS5zY2FsZSA9IDYxMzEzLAogCQkubWVhc3VyZW1lbnRfbW9kZV9mcmVxID0gMjAwLAogCQkub3B0aW9uX21vZGVfMSA9IFNDQTMwMDBfT1BfTU9ERV9OQVJST1csCiAJCS5vcHRpb25fbW9kZV8xX2ZyZXEgPSA1MCwKIAkJLm9wdGlvbl9tb2RlXzIgPSBTQ0EzMDAwX09QX01PREVfV0lERSwKIAkJLm9wdGlvbl9tb2RlXzJfZnJlcSA9IDQwMCwKKwkJLm1vdF9kZXRfbXVsdF94eiA9IHs2MDAsIDkwMCwgMTcwMCwgMzIwMCwgNjEwMCwgMTE5MDB9LAorCQkubW90X2RldF9tdWx0X3kgPSB7MzAwLCA2MDAsIDEyMDAsIDIwMDAsIDQxMDAsIDc4MDAsIDE1NjAwfSwKIAl9LAogfTsKIAotCiBpbnQgc2NhMzAwMF93cml0ZV9yZWcoc3RydWN0IHNjYTMwMDBfc3RhdGUgKnN0LCB1OCBhZGRyZXNzLCB1OCB2YWwpCiB7Ci0Jc3RydWN0IHNwaV90cmFuc2ZlciB4ZmVyID0gewotCQkuYml0c19wZXJfd29yZCA9IDgsCi0JCS5sZW4gPSAyLAotCQkuY3NfY2hhbmdlID0gMSwKLQkJLnR4X2J1ZiA9IHN0LT50eCwKLQl9OwotCXN0cnVjdCBzcGlfbWVzc2FnZSBtc2c7Ci0KIAlzdC0+dHhbMF0gPSBTQ0EzMDAwX1dSSVRFX1JFRyhhZGRyZXNzKTsKIAlzdC0+dHhbMV0gPSB2YWw7CisJcmV0dXJuIHNwaV93cml0ZShzdC0+dXMsIHN0LT50eCwgMik7Cit9CisKK2ludCBzY2EzMDAwX3JlYWRfZGF0YV9zaG9ydChzdHJ1Y3Qgc2NhMzAwMF9zdGF0ZSAqc3QsCisJCQkgICAgdWludDhfdCByZWdfYWRkcmVzc19oaWdoLAorCQkJICAgIGludCBsZW4pCit7CisJc3RydWN0IHNwaV9tZXNzYWdlIG1zZzsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHhmZXJbMl0gPSB7CisJCXsKKwkJCS5sZW4gPSAxLAorCQkJLnR4X2J1ZiA9IHN0LT50eCwKKwkJfSwgeworCQkJLmxlbiA9IGxlbiwKKwkJCS5yeF9idWYgPSBzdC0+cngsCisJCX0KKwl9OworCXN0LT50eFswXSA9IFNDQTMwMDBfUkVBRF9SRUcocmVnX2FkZHJlc3NfaGlnaCk7CiAJc3BpX21lc3NhZ2VfaW5pdCgmbXNnKTsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlciwgJm1zZyk7CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnhmZXJbMF0sICZtc2cpOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ4ZmVyWzFdLCAmbXNnKTsKIAogCXJldHVybiBzcGlfc3luYyhzdC0+dXMsICZtc2cpOwogfQogCi1pbnQgc2NhMzAwMF9yZWFkX2RhdGEoc3RydWN0IHNjYTMwMDBfc3RhdGUgKnN0LAotCQkgICAgICB1aW50OF90IHJlZ19hZGRyZXNzX2hpZ2gsCi0JCSAgICAgIHU4ICoqcnhfcCwKLQkJICAgICAgaW50IGxlbikKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBzcGlfbWVzc2FnZSBtc2c7Ci0Jc3RydWN0IHNwaV90cmFuc2ZlciB4ZmVyID0gewotCQkuYml0c19wZXJfd29yZCA9IDgsCi0JCS5sZW4gPSBsZW4gKyAxLAotCQkuY3NfY2hhbmdlID0gMSwKLQkJLnR4X2J1ZiA9IHN0LT50eCwKLQl9OwotCi0JKnJ4X3AgPSBrbWFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOwotCWlmICgqcnhfcCA9PSBOVUxMKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyb3JfcmV0OwotCX0KLQl4ZmVyLnJ4X2J1ZiA9ICpyeF9wOwotCXN0LT50eFswXSA9IFNDQTMwMDBfUkVBRF9SRUcocmVnX2FkZHJlc3NfaGlnaCk7Ci0Jc3BpX21lc3NhZ2VfaW5pdCgmbXNnKTsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlciwgJm1zZyk7Ci0KLQlyZXQgPSBzcGlfc3luYyhzdC0+dXMsICZtc2cpOwotCi0JaWYgKHJldCkgewotCQlkZXZfZXJyKGdldF9kZXZpY2UoJnN0LT51cy0+ZGV2KSwgInByb2JsZW0gcmVhZGluZyByZWdpc3RlciIpOwotCQlnb3RvIGVycm9yX2ZyZWVfcng7Ci0JfQotCi0JcmV0dXJuIDA7Ci1lcnJvcl9mcmVlX3J4OgotCWtmcmVlKCpyeF9wKTsKLWVycm9yX3JldDoKLQlyZXR1cm4gcmV0OwotCi19CiAvKioKICAqIHNjYTMwMDBfcmVnX2xvY2tfb24oKSB0ZXN0IGlmIHRoZSBjdHJsIHJlZ2lzdGVyIGxvY2sgaXMgb24KICAqCkBAIC0xMzYsMTcgKzExNSwxMyBAQAogICoqLwogc3RhdGljIGludCBzY2EzMDAwX3JlZ19sb2NrX29uKHN0cnVjdCBzY2EzMDAwX3N0YXRlICpzdCkKIHsKLQl1OCAqcng7CiAJaW50IHJldDsKIAotCXJldCA9IHNjYTMwMDBfcmVhZF9kYXRhKHN0LCBTQ0EzMDAwX1JFR19BRERSX1NUQVRVUywgJnJ4LCAxKTsKLQorCXJldCA9IHNjYTMwMDBfcmVhZF9kYXRhX3Nob3J0KHN0LCBTQ0EzMDAwX1JFR19BRERSX1NUQVRVUywgMSk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7Ci0JcmV0ID0gIShyeFsxXSAmIFNDQTMwMDBfTE9DS0VEKTsKLQlrZnJlZShyeCk7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAhKHN0LT5yeFswXSAmIFNDQTMwMDBfTE9DS0VEKTsKIH0KIAogLyoqCkBAIC0xNjEsMTkgKzEzNiwxNSBAQAogCXN0cnVjdCBzcGlfbWVzc2FnZSBtc2c7CiAJc3RydWN0IHNwaV90cmFuc2ZlciB4ZmVyWzNdID0gewogCQl7Ci0JCQkuYml0c19wZXJfd29yZCA9IDgsCiAJCQkubGVuID0gMiwKIAkJCS5jc19jaGFuZ2UgPSAxLAogCQkJLnR4X2J1ZiA9IHN0LT50eCwKIAkJfSwgewotCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAogCQkJLmxlbiA9IDIsCiAJCQkuY3NfY2hhbmdlID0gMSwKIAkJCS50eF9idWYgPSBzdC0+dHggKyAyLAogCQl9LCB7Ci0JCQkuYml0c19wZXJfd29yZCA9IDgsCiAJCQkubGVuID0gMiwKLQkJCS5jc19jaGFuZ2UgPSAxLAogCQkJLnR4X2J1ZiA9IHN0LT50eCArIDQsCiAJCX0sCiAJfTsKQEAgLTIzNiw4ICsyMDcsNyBAQAogICogTG9jayBtdXN0IGJlIGhlbGQuCiAgKiovCiBzdGF0aWMgaW50IHNjYTMwMDBfcmVhZF9jdHJsX3JlZyhzdHJ1Y3Qgc2NhMzAwMF9zdGF0ZSAqc3QsCi0JCQkJIHU4IGN0cmxfcmVnLAotCQkJCSB1OCAqKnJ4X3ApCisJCQkJIHU4IGN0cmxfcmVnKQogewogCWludCByZXQ7CiAKQEAgLTI1Myw4ICsyMjMsMTEgQEAKIAlyZXQgPSBzY2EzMDAwX3dyaXRlX3JlZyhzdCwgU0NBMzAwMF9SRUdfQUREUl9DVFJMX1NFTCwgY3RybF9yZWcpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfcmV0OwotCXJldCA9IHNjYTMwMDBfcmVhZF9kYXRhKHN0LCBTQ0EzMDAwX1JFR19BRERSX0NUUkxfREFUQSwgcnhfcCwgMSk7Ci0KKwlyZXQgPSBzY2EzMDAwX3JlYWRfZGF0YV9zaG9ydChzdCwgU0NBMzAwMF9SRUdfQUREUl9DVFJMX0RBVEEsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3JfcmV0OworCWVsc2UKKwkJcmV0dXJuIHN0LT5yeFswXTsKIGVycm9yX3JldDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjY3LDIwICsyNDAsMTggQEAKICAqKi8KIHN0YXRpYyBpbnQgc2NhMzAwMF9jaGVja19zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2KQogewotCXU4ICpyeDsKIAlpbnQgcmV0OwogCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgc2NhMzAwMF9zdGF0ZSAqc3QgPSBpbmRpb19kZXYtPmRldl9kYXRhOwogCiAJbXV0ZXhfbG9jaygmc3QtPmxvY2spOwotCXJldCA9IHNjYTMwMDBfcmVhZF9kYXRhKHN0LCBTQ0EzMDAwX1JFR19BRERSX1NUQVRVUywgJnJ4LCAxKTsKKwlyZXQgPSBzY2EzMDAwX3JlYWRfZGF0YV9zaG9ydChzdCwgU0NBMzAwMF9SRUdfQUREUl9TVEFUVVMsIDEpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycm9yX3JldDsKLQlpZiAocnhbMV0gJiBTQ0EzMDAwX0VFUFJPTV9DU19FUlJPUikKKwlpZiAoc3QtPnJ4WzBdICYgU0NBMzAwMF9FRVBST01fQ1NfRVJST1IpCiAJCWRldl9lcnIoZGV2LCAiZWVwcm9tIGVycm9yXG4iKTsKLQlpZiAocnhbMV0gJiBTQ0EzMDAwX1NQSV9GUkFNRV9FUlJPUikKKwlpZiAoc3QtPnJ4WzBdICYgU0NBMzAwMF9TUElfRlJBTUVfRVJST1IpCiAJCWRldl9lcnIoZGV2LCAiUHJldmlvdXMgU1BJIEZyYW1lIHdhcyBjb3JydXB0XG4iKTsKLQlrZnJlZShyeCk7CiAKIGVycm9yX3JldDoKIAltdXRleF91bmxvY2soJnN0LT5sb2NrKTsKQEAgLTI4OCw1MyArMjU5LDcgQEAKIH0KICNlbmRpZiAvKiBTQ0EzMDAwX0RFQlVHICovCiAKLS8qKgotICogc2NhMzAwMF9yZWFkXzEzYml0X3NpZ25lZCgpIHN5c2ZzIGludGVyZmFjZSB0byByZWFkIDEzIGJpdCBzaWduZWQgcmVnaXN0ZXJzCi0gKgotICogVGhlc2UgYXJlIGRlc2NyaWJlZCBhcyBzaWduZWQgMTIgYml0IG9uIHRoZSBkYXRhIHNoZWV0LCB3aGljaCBhcHBlYXJzCi0gKiB0byBiZSBhIGNvbnZlbnRpb25hbCAyJ3MgY29tcGxlbWVudCAxMyBiaXQuCi0gKiovCi1zdGF0aWMgc3NpemVfdCBzY2EzMDAwX3JlYWRfMTNiaXRfc2lnbmVkKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCQkgY2hhciAqYnVmKQotewotCWludCBsZW4gPSAwLCByZXQ7Ci0JaW50IHZhbDsKLQlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7Ci0JdTggKnJ4OwotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3Qgc2NhMzAwMF9zdGF0ZSAqc3QgPSBpbmRpb19kZXYtPmRldl9kYXRhOwogCi0JbXV0ZXhfbG9jaygmc3QtPmxvY2spOwotCXJldCA9IHNjYTMwMDBfcmVhZF9kYXRhKHN0LCB0aGlzX2F0dHItPmFkZHJlc3MsICZyeCwgMik7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gZXJyb3JfcmV0OwotCXZhbCA9IHNjYTMwMDBfMTNiaXRfY29udmVydChyeFsxXSwgcnhbMl0pOwotCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiVkXG4iLCB2YWwpOwotCWtmcmVlKHJ4KTsKLWVycm9yX3JldDoKLQltdXRleF91bmxvY2soJnN0LT5sb2NrKTsKLQotCXJldHVybiByZXQgPyByZXQgOiBsZW47Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNjYTMwMDBfc2hvd19zY2FsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkgIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3Qgc2NhMzAwMF9zdGF0ZSAqc3QgPSBkZXZfaW5mby0+ZGV2X2RhdGE7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHN0LT5pbmZvLT5zY2FsZSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNjYTMwMDBfc2hvd19uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3Qgc2NhMzAwMF9zdGF0ZSAqc3QgPSBkZXZfaW5mby0+ZGV2X2RhdGE7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHN0LT5pbmZvLT5uYW1lKTsKLX0KIC8qKgogICogc2NhMzAwMF9zaG93X3JlZygpIC0gc3lzZnMgaW50ZXJmYWNlIHRvIHJlYWQgdGhlIGNoaXAgcmV2aXNpb24gbnVtYmVyCiAgKiovCkBAIC0zNDYsMTggKzI3MSwxNCBAQAogCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzY2EzMDAwX3N0YXRlICpzdCA9IGRldl9pbmZvLT5kZXZfZGF0YTsKIAotCXU4ICpyeDsKLQogCW11dGV4X2xvY2soJnN0LT5sb2NrKTsKLQlyZXQgPSBzY2EzMDAwX3JlYWRfZGF0YShzdCwgU0NBMzAwMF9SRUdfQUREUl9SRVZJRCwgJnJ4LCAxKTsKKwlyZXQgPSBzY2EzMDAwX3JlYWRfZGF0YV9zaG9ydChzdCwgU0NBMzAwMF9SRUdfQUREUl9SRVZJRCwgMSk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyb3JfcmV0OwogCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwKIAkJICAgICAgICJtYWpvcj0lZCwgbWlub3I9JWRcbiIsCi0JCSAgICAgICByeFsxXSAmIFNDQTMwMDBfUkVWSURfTUFKT1JfTUFTSywKLQkJICAgICAgIHJ4WzFdICYgU0NBMzAwMF9SRVZJRF9NSU5PUl9NQVNLKTsKLQlrZnJlZShyeCk7Ci0KKwkJICAgICAgIHN0LT5yeFswXSAmIFNDQTMwMDBfUkVWSURfTUFKT1JfTUFTSywKKwkJICAgICAgIHN0LT5yeFswXSAmIFNDQTMwMDBfUkVWSURfTUlOT1JfTUFTSyk7CiBlcnJvcl9yZXQ6CiAJbXV0ZXhfdW5sb2NrKCZzdC0+bG9jayk7CiAKQEAgLTQxMCwxNSArMzMxLDE0IEBACiAJc3RydWN0IGlpb19kZXYgKmRldl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHNjYTMwMDBfc3RhdGUgKnN0ID0gZGV2X2luZm8tPmRldl9kYXRhOwogCWludCBsZW4gPSAwLCByZXQ7Ci0JdTggKnJ4OwogCiAJbXV0ZXhfbG9jaygmc3QtPmxvY2spOwotCXJldCA9IHNjYTMwMDBfcmVhZF9kYXRhKHN0LCBTQ0EzMDAwX1JFR19BRERSX01PREUsICZyeCwgMSk7CisJcmV0ID0gc2NhMzAwMF9yZWFkX2RhdGFfc2hvcnQoc3QsIFNDQTMwMDBfUkVHX0FERFJfTU9ERSwgMSk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl9yZXQ7CiAJLyogbWFzayBib3R0b20gMiBiaXRzIC0gb25seSBvbmVzIHRoYXQgYXJlIHJlbGV2YW50ICovCi0JcnhbMV0gJj0gMHgwMzsKLQlzd2l0Y2ggKHJ4WzFdKSB7CisJc3QtPnJ4WzBdICY9IDB4MDM7CisJc3dpdGNoIChzdC0+cnhbMF0pIHsKIAljYXNlIFNDQTMwMDBfTUVBU19NT0RFX05PUk1BTDoKIAkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiMCAtIG5vcm1hbCBtb2RlXG4iKTsKIAkJYnJlYWs7CkBAIC00NjIsNyArMzgyLDYgQEAKIAlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgc2NhMzAwMF9zdGF0ZSAqc3QgPSBkZXZfaW5mby0+ZGV2X2RhdGE7CiAJaW50IHJldDsKLQl1OCAqcng7CiAJaW50IG1hc2sgPSAweDAzOwogCWxvbmcgdmFsOwogCkBAIC00NzAsMjAgKzM4OSwxOCBAQAogCXJldCA9IHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnZhbCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl9yZXQ7Ci0JcmV0ID0gc2NhMzAwMF9yZWFkX2RhdGEoc3QsIFNDQTMwMDBfUkVHX0FERFJfTU9ERSwgJnJ4LCAxKTsKKwlyZXQgPSBzY2EzMDAwX3JlYWRfZGF0YV9zaG9ydChzdCwgU0NBMzAwMF9SRUdfQUREUl9NT0RFLCAxKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycm9yX3JldDsKLQlyeFsxXSAmPSB+bWFzazsKLQlyeFsxXSB8PSAodmFsICYgbWFzayk7Ci0JcmV0ID0gc2NhMzAwMF93cml0ZV9yZWcoc3QsIFNDQTMwMDBfUkVHX0FERFJfTU9ERSwgcnhbMV0pOworCXN0LT5yeFswXSAmPSB+bWFzazsKKwlzdC0+cnhbMF0gfD0gKHZhbCAmIG1hc2spOworCXJldCA9IHNjYTMwMDBfd3JpdGVfcmVnKHN0LCBTQ0EzMDAwX1JFR19BRERSX01PREUsIHN0LT5yeFswXSk7CiAJaWYgKHJldCkKLQkJZ290byBlcnJvcl9mcmVlX3J4OworCQlnb3RvIGVycm9yX3JldDsKIAltdXRleF91bmxvY2soJnN0LT5sb2NrKTsKIAogCXJldHVybiBsZW47CiAKLWVycm9yX2ZyZWVfcng6Ci0Ja2ZyZWUocngpOwogZXJyb3JfcmV0OgogCW11dGV4X3VubG9jaygmc3QtPmxvY2spOwogCkBAIC01MDUsMTggKzQyMiw3MCBAQAogCiAvKiBNb3JlIHN0YW5kYXJkIGF0dHJpYnV0ZXMgKi8KIAotc3RhdGljIElJT19ERVZfQVRUUl9OQU1FKHNjYTMwMDBfc2hvd19uYW1lKTsKIHN0YXRpYyBJSU9fREVWX0FUVFJfUkVWKHNjYTMwMDBfc2hvd19yZXYpOwotc3RhdGljIElJT19ERVZJQ0VfQVRUUihhY2NlbF9zY2FsZSwgU19JUlVHTywgc2NhMzAwMF9zaG93X3NjYWxlLAotCQkgICAgICAgTlVMTCwgMCk7CiAKLXN0YXRpYyBJSU9fREVWX0FUVFJfQUNDRUxfWChzY2EzMDAwX3JlYWRfMTNiaXRfc2lnbmVkLAotCQkJICAgIFNDQTMwMDBfUkVHX0FERFJfWF9NU0IpOwotc3RhdGljIElJT19ERVZfQVRUUl9BQ0NFTF9ZKHNjYTMwMDBfcmVhZF8xM2JpdF9zaWduZWQsCi0JCQkgICAgU0NBMzAwMF9SRUdfQUREUl9ZX01TQik7Ci1zdGF0aWMgSUlPX0RFVl9BVFRSX0FDQ0VMX1ooc2NhMzAwMF9yZWFkXzEzYml0X3NpZ25lZCwKLQkJCSAgICBTQ0EzMDAwX1JFR19BRERSX1pfTVNCKTsKKyNkZWZpbmUgU0NBMzAwMF9JTkZPX01BU0sJCQlcCisJKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpCisjZGVmaW5lIFNDQTMwMDBfRVZFTlRfTUFTSwkJCQkJXAorCShJSU9fRVZfQklUKElJT19FVl9UWVBFX01BRywgSUlPX0VWX0RJUl9SSVNJTkcpKQogCitzdGF0aWMgc3RydWN0IGlpb19jaGFuX3NwZWMgc2NhMzAwMF9jaGFubmVsc1tdID0geworCUlJT19DSEFOKElJT19BQ0NFTCwgMSwgMCwgMCwgTlVMTCwgMCwgSUlPX01PRF9YLCBTQ0EzMDAwX0lORk9fTUFTSywKKwkJIDAsIDAsIElJT19TVCgncycsIDExLCAxNiwgNSksIFNDQTMwMDBfRVZFTlRfTUFTSyksCisJSUlPX0NIQU4oSUlPX0FDQ0VMLCAxLCAwLCAwLCBOVUxMLCAwLCBJSU9fTU9EX1ksIFNDQTMwMDBfSU5GT19NQVNLLAorCQkgMSwgMSwgSUlPX1NUKCdzJywgMTEsIDE2LCA1KSwgU0NBMzAwMF9FVkVOVF9NQVNLKSwKKwlJSU9fQ0hBTihJSU9fQUNDRUwsIDEsIDAsIDAsIE5VTEwsIDAsIElJT19NT0RfWiwgU0NBMzAwMF9JTkZPX01BU0ssCisJCSAyLCAyLCBJSU9fU1QoJ3MnLCAxMSwgMTYsIDUpLCBTQ0EzMDAwX0VWRU5UX01BU0spLAorfTsKKworc3RhdGljIHU4IHNjYTMwMDBfYWRkcmVzc2VzWzNdWzNdID0geworCVswXSA9IHtTQ0EzMDAwX1JFR19BRERSX1hfTVNCLCBTQ0EzMDAwX1JFR19DVFJMX1NFTF9NRF9YX1RILAorCSAgICAgICBTQ0EzMDAwX01EX0NUUkxfT1JfWH0sCisJWzFdID0ge1NDQTMwMDBfUkVHX0FERFJfWV9NU0IsIFNDQTMwMDBfUkVHX0NUUkxfU0VMX01EX1lfVEgsCisJICAgICAgIFNDQTMwMDBfTURfQ1RSTF9PUl9ZfSwKKwlbMl0gPSB7U0NBMzAwMF9SRUdfQUREUl9aX01TQiwgU0NBMzAwMF9SRUdfQ1RSTF9TRUxfTURfWl9USCwKKwkgICAgICAgU0NBMzAwMF9NRF9DVFJMX09SX1p9LAorfTsKKworc3RhdGljIGludCBzY2EzMDAwX3JlYWRfcmF3KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCisJCQkgICAgc3RydWN0IGlpb19jaGFuX3NwZWMgY29uc3QgKmNoYW4sCisJCQkgICAgaW50ICp2YWwsCisJCQkgICAgaW50ICp2YWwyLAorCQkJICAgIGxvbmcgbWFzaykKK3sKKwlzdHJ1Y3Qgc2NhMzAwMF9zdGF0ZSAqc3QgPSBpbmRpb19kZXYtPmRldl9kYXRhOworCWludCByZXQ7CisJdTggYWRkcmVzczsKKworCXN3aXRjaCAobWFzaykgeworCWNhc2UgMDoKKwkJbXV0ZXhfbG9jaygmc3QtPmxvY2spOworCQlpZiAoc3QtPm1vX2RldF91c2VfY291bnQpIHsKKwkJCW11dGV4X3VubG9jaygmc3QtPmxvY2spOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCQlhZGRyZXNzID0gc2NhMzAwMF9hZGRyZXNzZXNbY2hhbi0+YWRkcmVzc11bMF07CisJCXJldCA9IHNjYTMwMDBfcmVhZF9kYXRhX3Nob3J0KHN0LCBhZGRyZXNzLCAyKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCW11dGV4X3VubG9jaygmc3QtPmxvY2spOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQkqdmFsID0gKGJlMTZfdG9fY3B1cCgoX19iZTE2ICopc3QtPnJ4KSA+PiAzKSAmIDB4MUZGRjsKKwkJKnZhbCA9ICgoKnZhbCkgPDwgKHNpemVvZigqdmFsKSo4IC0gMTMpKSA+PgorCQkJKHNpemVvZigqdmFsKSo4IC0gMTMpOworCQltdXRleF91bmxvY2soJnN0LT5sb2NrKTsKKwkJcmV0dXJuIElJT19WQUxfSU5UOworCWNhc2UgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpOgorCQkqdmFsID0gMDsKKwkJaWYgKGNoYW4tPnR5cGUgPT0gSUlPX0FDQ0VMKQorCQkJKnZhbDIgPSBzdC0+aW5mby0+c2NhbGU7CisJCWVsc2UgLyogdGVtcGVyYXR1cmUgKi8KKwkJCSp2YWwyID0gNTU1NTU2OworCQlyZXR1cm4gSUlPX1ZBTF9JTlRfUExVU19NSUNSTzsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CiAKIC8qKgogICogc2NhMzAwMF9yZWFkX2F2X2ZyZXEoKSBzeXNmcyBmdW5jdGlvbiB0byBnZXQgYXZhaWxhYmxlIGZyZXF1ZW5jaWVzCkBAIC01MzIsMTUgKzUwMSwxNiBAQAogewogCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgc2NhMzAwMF9zdGF0ZSAqc3QgPSBpbmRpb19kZXYtPmRldl9kYXRhOwotCWludCBsZW4gPSAwLCByZXQ7Ci0JdTggKnJ4OworCWludCBsZW4gPSAwLCByZXQsIHZhbDsKKwogCW11dGV4X2xvY2soJnN0LT5sb2NrKTsKLQlyZXQgPSBzY2EzMDAwX3JlYWRfZGF0YShzdCwgU0NBMzAwMF9SRUdfQUREUl9NT0RFLCAmcngsIDEpOworCXJldCA9IHNjYTMwMDBfcmVhZF9kYXRhX3Nob3J0KHN0LCBTQ0EzMDAwX1JFR19BRERSX01PREUsIDEpOworCXZhbCA9IHN0LT5yeFswXTsKIAltdXRleF91bmxvY2soJnN0LT5sb2NrKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycm9yX3JldDsKLQlyeFsxXSAmPSAweDAzOwotCXN3aXRjaCAocnhbMV0pIHsKKworCXN3aXRjaCAodmFsICYgMHgwMykgewogCWNhc2UgU0NBMzAwMF9NRUFTX01PREVfTk9STUFMOgogCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIlZCAlZCAlZFxuIiwKIAkJCSAgICAgICBzdC0+aW5mby0+bWVhc3VyZW1lbnRfbW9kZV9mcmVxLApAQCAtNTYwLDcgKzUzMCw2IEBACiAJCQkgICAgICAgc3QtPmluZm8tPm9wdGlvbl9tb2RlXzJfZnJlcS80KTsKIAkJYnJlYWs7CiAJfQotCWtmcmVlKHJ4KTsKIAlyZXR1cm4gbGVuOwogZXJyb3JfcmV0OgogCXJldHVybiByZXQ7CkBAIC01NzUsMTIgKzU0NCwxMSBAQAogCQkJCQkgIGludCAqYmFzZV9mcmVxKQogewogCWludCByZXQ7Ci0JdTggKnJ4OwogCi0JcmV0ID0gc2NhMzAwMF9yZWFkX2RhdGEoc3QsIFNDQTMwMDBfUkVHX0FERFJfTU9ERSwgJnJ4LCAxKTsKKwlyZXQgPSBzY2EzMDAwX3JlYWRfZGF0YV9zaG9ydChzdCwgU0NBMzAwMF9SRUdfQUREUl9NT0RFLCAxKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycm9yX3JldDsKLQlzd2l0Y2ggKDB4MDMgJiByeFsxXSkgeworCXN3aXRjaCAoMHgwMyAmIHN0LT5yeFswXSkgewogCWNhc2UgU0NBMzAwMF9NRUFTX01PREVfTk9STUFMOgogCQkqYmFzZV9mcmVxID0gaW5mby0+bWVhc3VyZW1lbnRfbW9kZV9mcmVxOwogCQlicmVhazsKQEAgLTU5MSw3ICs1NTksNiBAQAogCQkqYmFzZV9mcmVxID0gaW5mby0+b3B0aW9uX21vZGVfMl9mcmVxOwogCQlicmVhazsKIAl9Ci0Ja2ZyZWUocngpOwogZXJyb3JfcmV0OgogCXJldHVybiByZXQ7CiB9CkBAIC02MDUsMTggKzU3MiwxOSBAQAogewogCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgc2NhMzAwMF9zdGF0ZSAqc3QgPSBpbmRpb19kZXYtPmRldl9kYXRhOwotCWludCByZXQsIGxlbiA9IDAsIGJhc2VfZnJlcSA9IDA7Ci0JdTggKnJ4OworCWludCByZXQsIGxlbiA9IDAsIGJhc2VfZnJlcSA9IDAsIHZhbDsKKwogCW11dGV4X2xvY2soJnN0LT5sb2NrKTsKIAlyZXQgPSBfX3NjYTMwMDBfZ2V0X2Jhc2VfZnJlcShzdCwgc3QtPmluZm8sICZiYXNlX2ZyZXEpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfcmV0X211dDsKLQlyZXQgPSBzY2EzMDAwX3JlYWRfY3RybF9yZWcoc3QsIFNDQTMwMDBfUkVHX0NUUkxfU0VMX09VVF9DVFJMLCAmcngpOworCXJldCA9IHNjYTMwMDBfcmVhZF9jdHJsX3JlZyhzdCwgU0NBMzAwMF9SRUdfQ1RSTF9TRUxfT1VUX0NUUkwpOwogCW11dGV4X3VubG9jaygmc3QtPmxvY2spOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfcmV0OworCXZhbCA9IHJldDsKIAlpZiAoYmFzZV9mcmVxID4gMCkKLQkJc3dpdGNoIChyeFsxXSYweDAzKSB7CisJCXN3aXRjaCAodmFsICYgMHgwMykgewogCQljYXNlIDB4MDA6CiAJCWNhc2UgMHgwMzoKIAkJCWxlbiA9IHNwcmludGYoYnVmLCAiJWRcbiIsIGJhc2VfZnJlcSk7CkBAIC02MjgsNyArNTk2LDcgQEAKIAkJCWxlbiA9IHNwcmludGYoYnVmLCAiJWRcbiIsIGJhc2VfZnJlcS80KTsKIAkJCWJyZWFrOwogCX0KLQlrZnJlZShyeCk7CisKIAlyZXR1cm4gbGVuOwogZXJyb3JfcmV0X211dDoKIAltdXRleF91bmxvY2soJnN0LT5sb2NrKTsKQEAgLTY0Nyw3ICs2MTUsNyBAQAogCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgc2NhMzAwMF9zdGF0ZSAqc3QgPSBpbmRpb19kZXYtPmRldl9kYXRhOwogCWludCByZXQsIGJhc2VfZnJlcSA9IDA7Ci0JdTggKnJ4OworCWludCBjdHJsdmFsOwogCWxvbmcgdmFsOwogCiAJcmV0ID0gc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdmFsKTsKQEAgLTY2MCwyMSArNjI4LDIzIEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl9mcmVlX2xvY2s7CiAKLQlyZXQgPSBzY2EzMDAwX3JlYWRfY3RybF9yZWcoc3QsIFNDQTMwMDBfUkVHX0NUUkxfU0VMX09VVF9DVFJMLCAmcngpOwotCWlmIChyZXQpCisJcmV0ID0gc2NhMzAwMF9yZWFkX2N0cmxfcmVnKHN0LCBTQ0EzMDAwX1JFR19DVFJMX1NFTF9PVVRfQ1RSTCk7CisJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyb3JfZnJlZV9sb2NrOworCWN0cmx2YWwgPSByZXQ7CiAJLyogY2xlYXIgdGhlIGJpdHMgKi8KLQlyeFsxXSAmPSB+MHgwMzsKKwljdHJsdmFsICY9IH4weDAzOwogCiAJaWYgKHZhbCA9PSBiYXNlX2ZyZXEvMikgewotCQlyeFsxXSB8PSBTQ0EzMDAwX09VVF9DVFJMX0JVRl9ESVZfMjsKKwkJY3RybHZhbCB8PSBTQ0EzMDAwX09VVF9DVFJMX0JVRl9ESVZfMjsKIAl9IGVsc2UgaWYgKHZhbCA9PSBiYXNlX2ZyZXEvNCkgewotCQlyeFsxXSB8PSBTQ0EzMDAwX09VVF9DVFJMX0JVRl9ESVZfNDsKKwkJY3RybHZhbCB8PSBTQ0EzMDAwX09VVF9DVFJMX0JVRl9ESVZfNDsKIAl9IGVsc2UgaWYgKHZhbCAhPSBiYXNlX2ZyZXEpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJvcl9mcmVlX2xvY2s7CiAJfQotCXJldCA9IHNjYTMwMDBfd3JpdGVfY3RybF9yZWcoc3QsIFNDQTMwMDBfUkVHX0NUUkxfU0VMX09VVF9DVFJMLCByeFsxXSk7CisJcmV0ID0gc2NhMzAwMF93cml0ZV9jdHJsX3JlZyhzdCwgU0NBMzAwMF9SRUdfQ1RSTF9TRUxfT1VUX0NUUkwsCisJCQkJICAgICBjdHJsdmFsKTsKIGVycm9yX2ZyZWVfbG9jazoKIAltdXRleF91bmxvY2soJnN0LT5sb2NrKTsKIApAQCAtNzA0LDE3ICs2NzQsMTQgQEAKIHsKIAlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHNjYTMwMDBfc3RhdGUgKnN0ID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKLQlpbnQgbGVuID0gMCwgcmV0OworCWludCByZXQ7CiAJaW50IHZhbDsKLQl1OCAqcng7Ci0JcmV0ID0gc2NhMzAwMF9yZWFkX2RhdGEoc3QsIFNDQTMwMDBfUkVHX0FERFJfVEVNUF9NU0IsICZyeCwgMik7CisJcmV0ID0gc2NhMzAwMF9yZWFkX2RhdGFfc2hvcnQoc3QsIFNDQTMwMDBfUkVHX0FERFJfVEVNUF9NU0IsIDIpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycm9yX3JldDsKLQl2YWwgPSAoKHJ4WzFdJjB4M0YpIDw8IDMpIHwgKChyeFsyXSAmIDB4RTApID4+IDUpOwotCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiVkXG4iLCB2YWwpOwotCWtmcmVlKHJ4KTsKKwl2YWwgPSAoKHN0LT5yeFswXSAmIDB4M0YpIDw8IDMpIHwgKChzdC0+cnhbMV0gJiAweEUwKSA+PiA1KTsKIAotCXJldHVybiBsZW47CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbCk7CiAKIGVycm9yX3JldDoKIAlyZXR1cm4gcmV0OwpAQCAtNzI1LDgwICs2OTIsNzEgQEAKIHN0YXRpYyBJSU9fQ09OU1RfQVRUUl9URU1QX09GRlNFVCgiLTIxNC42Iik7CiAKIC8qKgotICogc2NhMzAwMF9zaG93X3RocmVzaCgpIHN5c2ZzIHF1ZXJ5IG9mIGEgdGhyZXNob2xkCisgKiBzY2EzMDAwX3JlYWRfdGhyZXNoKCkgLSBxdWVyeSBvZiBhIHRocmVzaG9sZAogICoqLwotc3RhdGljIHNzaXplX3Qgc2NhMzAwMF9zaG93X3RocmVzaChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICAgY2hhciAqYnVmKQorc3RhdGljIGludCBzY2EzMDAwX3JlYWRfdGhyZXNoKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCisJCQkgICAgICAgaW50IGUsCisJCQkgICAgICAgaW50ICp2YWwpCiB7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByZXQsIGk7CiAJc3RydWN0IHNjYTMwMDBfc3RhdGUgKnN0ID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKLQlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7Ci0JaW50IGxlbiA9IDAsIHJldDsKLQl1OCAqcng7Ci0KKwlpbnQgbnVtID0gSUlPX0VWRU5UX0NPREVfRVhUUkFDVF9NT0RJRklFUihlKTsKIAltdXRleF9sb2NrKCZzdC0+bG9jayk7Ci0JcmV0ID0gc2NhMzAwMF9yZWFkX2N0cmxfcmVnKHN0LAotCQkJCSAgICB0aGlzX2F0dHItPmFkZHJlc3MsCi0JCQkJICAgICZyeCk7CisJcmV0ID0gc2NhMzAwMF9yZWFkX2N0cmxfcmVnKHN0LCBzY2EzMDAwX2FkZHJlc3Nlc1tudW1dWzFdKTsKIAltdXRleF91bmxvY2soJnN0LT5sb2NrKTsKLQlpZiAocmV0KQorCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwotCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiVkXG4iLCByeFsxXSk7Ci0Ja2ZyZWUocngpOworCSp2YWwgPSAwOworCWlmIChudW0gPT0gMSkKKwkJZm9yX2VhY2hfc2V0X2JpdChpLCAodW5zaWduZWQgbG9uZyAqKSZyZXQsCisJCQkJIEFSUkFZX1NJWkUoc3QtPmluZm8tPm1vdF9kZXRfbXVsdF95KSkKKwkJCSp2YWwgKz0gc3QtPmluZm8tPm1vdF9kZXRfbXVsdF95W2ldOworCWVsc2UKKwkJZm9yX2VhY2hfc2V0X2JpdChpLCAodW5zaWduZWQgbG9uZyAqKSZyZXQsCisJCQkJIEFSUkFZX1NJWkUoc3QtPmluZm8tPm1vdF9kZXRfbXVsdF94eikpCisJCQkqdmFsICs9IHN0LT5pbmZvLT5tb3RfZGV0X211bHRfeHpbaV07CiAKLQlyZXR1cm4gbGVuOworCXJldHVybiAwOwogfQogCiAvKioKLSAqIHNjYTMwMDBfd3JpdGVfdGhyZXNoKCkgc3lzZnMgY29udHJvbCBvZiB0aHJlc2hvbGQKKyAqIHNjYTMwMDBfd3JpdGVfdGhyZXNoKCkgY29udHJvbCBvZiB0aHJlc2hvbGQKICAqKi8KLXN0YXRpYyBzc2l6ZV90IHNjYTMwMDBfd3JpdGVfdGhyZXNoKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICAgIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCQkgICAgc2l6ZV90IGxlbikKK3N0YXRpYyBpbnQgc2NhMzAwMF93cml0ZV90aHJlc2goc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKKwkJCQkgICAgaW50IGUsCisJCQkJICAgIGludCB2YWwpCiB7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzY2EzMDAwX3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7Ci0Jc3RydWN0IGlpb19kZXZfYXR0ciAqdGhpc19hdHRyID0gdG9faWlvX2Rldl9hdHRyKGF0dHIpOworCWludCBudW0gPSBJSU9fRVZFTlRfQ09ERV9FWFRSQUNUX01PRElGSUVSKGUpOwogCWludCByZXQ7Ci0JbG9uZyB2YWw7CisJaW50IGk7CisJdTggbm9ubGluZWFyID0gMDsKIAotCXJldCA9IHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnZhbCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwlpZiAobnVtID09IDEpIHsKKwkJaSA9IEFSUkFZX1NJWkUoc3QtPmluZm8tPm1vdF9kZXRfbXVsdF95KTsKKwkJd2hpbGUgKGkgPiAwKQorCQkJaWYgKHZhbCA+PSBzdC0+aW5mby0+bW90X2RldF9tdWx0X3lbLS1pXSkgeworCQkJCW5vbmxpbmVhciB8PSAoMSA8PCBpKTsKKwkJCQl2YWwgLT0gc3QtPmluZm8tPm1vdF9kZXRfbXVsdF95W2ldOworCQkJfQorCX0gZWxzZSB7CisJCWkgPSBBUlJBWV9TSVpFKHN0LT5pbmZvLT5tb3RfZGV0X211bHRfeHopOworCQl3aGlsZSAoaSA+IDApCisJCQlpZiAodmFsID49IHN0LT5pbmZvLT5tb3RfZGV0X211bHRfeHpbLS1pXSkgeworCQkJCW5vbmxpbmVhciB8PSAoMSA8PCBpKTsKKwkJCQl2YWwgLT0gc3QtPmluZm8tPm1vdF9kZXRfbXVsdF94eltpXTsKKwkJCX0KKwl9CisKIAltdXRleF9sb2NrKCZzdC0+bG9jayk7Ci0JcmV0ID0gc2NhMzAwMF93cml0ZV9jdHJsX3JlZyhzdCwgdGhpc19hdHRyLT5hZGRyZXNzLCB2YWwpOworCXJldCA9IHNjYTMwMDBfd3JpdGVfY3RybF9yZWcoc3QsIHNjYTMwMDBfYWRkcmVzc2VzW251bV1bMV0sIG5vbmxpbmVhcik7CiAJbXV0ZXhfdW5sb2NrKCZzdC0+bG9jayk7CiAKLQlyZXR1cm4gcmV0ID8gcmV0IDogbGVuOworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBJSU9fREVWSUNFX0FUVFIoYWNjZWxfeF9yYXdfbWFnX3Jpc2luZ192YWx1ZSwKLQkJU19JUlVHTyB8IFNfSVdVU1IsCi0JCXNjYTMwMDBfc2hvd190aHJlc2gsCi0JCXNjYTMwMDBfd3JpdGVfdGhyZXNoLAotCQlTQ0EzMDAwX1JFR19DVFJMX1NFTF9NRF9YX1RIKTsKLQotc3RhdGljIElJT19ERVZJQ0VfQVRUUihhY2NlbF95X3Jhd19tYWdfcmlzaW5nX3ZhbHVlLAotCQlTX0lSVUdPIHwgU19JV1VTUiwKLQkJc2NhMzAwMF9zaG93X3RocmVzaCwKLQkJc2NhMzAwMF93cml0ZV90aHJlc2gsCi0JCVNDQTMwMDBfUkVHX0NUUkxfU0VMX01EX1lfVEgpOwotCi1zdGF0aWMgSUlPX0RFVklDRV9BVFRSKGFjY2VsX3pfcmF3X21hZ19yaXNpbmdfdmFsdWUsCi0JCVNfSVJVR08gfCBTX0lXVVNSLAotCQlzY2EzMDAwX3Nob3dfdGhyZXNoLAotCQlzY2EzMDAwX3dyaXRlX3RocmVzaCwKLQkJU0NBMzAwMF9SRUdfQ1RSTF9TRUxfTURfWl9USCk7Ci0KIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpzY2EzMDAwX2F0dHJpYnV0ZXNbXSA9IHsKLQkmaWlvX2Rldl9hdHRyX25hbWUuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX3JldmlzaW9uLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9hY2NlbF9zY2FsZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfYWNjZWxfeF9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2FjY2VsX3lfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9hY2NlbF96X3Jhdy5kZXZfYXR0ci5hdHRyLAogCSZpaW9fZGV2X2F0dHJfbWVhc3VyZW1lbnRfbW9kZV9hdmFpbGFibGUuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX21lYXN1cmVtZW50X21vZGUuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX3NhbXBsaW5nX2ZyZXF1ZW5jeV9hdmFpbGFibGUuZGV2X2F0dHIuYXR0ciwKQEAgLTgwNywxMiArNzY1LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpzY2EzMDAwX2F0dHJpYnV0ZXNfd2l0aF90ZW1wW10gPSB7Ci0JJmlpb19kZXZfYXR0cl9uYW1lLmRldl9hdHRyLmF0dHIsCiAJJmlpb19kZXZfYXR0cl9yZXZpc2lvbi5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfYWNjZWxfc2NhbGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2FjY2VsX3hfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9hY2NlbF95X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfYWNjZWxfel9yYXcuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX21lYXN1cmVtZW50X21vZGVfYXZhaWxhYmxlLmRldl9hdHRyLmF0dHIsCiAJJmlpb19kZXZfYXR0cl9tZWFzdXJlbWVudF9tb2RlLmRldl9hdHRyLmF0dHIsCiAJJmlpb19kZXZfYXR0cl9zYW1wbGluZ19mcmVxdWVuY3lfYXZhaWxhYmxlLmRldl9hdHRyLmF0dHIsCkBAIC04MzYsMTM0ICs3ODksMTAyIEBACiAvKiBkZXBlbmRpbmcgb24gZXZlbnQsIHB1c2ggdG8gdGhlIHJpbmcgYnVmZmVyIGV2ZW50IGNocmRldiBvciB0aGUgZXZlbnQgb25lICovCiAKIC8qKgotICogc2NhMzAwMF9pbnRlcnJ1cHRfaGFuZGxlcl9iaCgpIC0gaGFuZGxpbmcgcmluZyBhbmQgbm9uIHJpbmcgZXZlbnRzCisgKiBzY2EzMDAwX2V2ZW50X2hhbmRsZXIoKSAtIGhhbmRsaW5nIHJpbmcgYW5kIG5vbiByaW5nIGV2ZW50cwogICoKICAqIFRoaXMgZnVuY3Rpb24gaXMgY29tcGxpY2F0ZWQgYnkgdGhlIGZhY3QgdGhhdCB0aGUgZGV2aWNlcyBjYW4gc2lnbmlmeSByaW5nCiAgKiBhbmQgbm9uIHJpbmcgZXZlbnRzIHZpYSB0aGUgc2FtZSBpbnRlcnJ1cHQgbGluZSBhbmQgdGhleSBjYW4gb25seQogICogYmUgZGlzdGluZ3Vpc2hlZCB2aWEgYSByZWFkIG9mIHRoZSByZWxldmFudCBzdGF0dXMgcmVnaXN0ZXIuCiAgKiovCi1zdGF0aWMgdm9pZCBzY2EzMDAwX2ludGVycnVwdF9oYW5kbGVyX2JoKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29ya19zKQorc3RhdGljIGlycXJldHVybl90IHNjYTMwMDBfZXZlbnRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpwcml2YXRlKQogewotCXN0cnVjdCBzY2EzMDAwX3N0YXRlICpzdAotCQk9IGNvbnRhaW5lcl9vZih3b3JrX3MsIHN0cnVjdCBzY2EzMDAwX3N0YXRlLAotCQkJICAgICAgIGludGVycnVwdF9oYW5kbGVyX3dzKTsKLQl1OCAqcng7Ci0JaW50IHJldDsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gcHJpdmF0ZTsKKwlzdHJ1Y3Qgc2NhMzAwMF9zdGF0ZSAqc3Q7CisJaW50IHJldCwgdmFsOworCXM2NCBsYXN0X3RpbWVzdGFtcCA9IGlpb19nZXRfdGltZV9ucygpOwogCisJc3QgPSBpbmRpb19kZXYtPmRldl9kYXRhOwogCS8qIENvdWxkIGxlYWQgaWYgYmFkbHkgdGltZWQgdG8gYW4gZXh0cmEgcmVhZCBvZiBzdGF0dXMgcmVnLAogCSAqIGJ1dCBlbnN1cmVzIG5vIGludGVycnVwdCBpcyBtaXNzZWQuCiAJICovCi0JZW5hYmxlX2lycShzdC0+dXMtPmlycSk7CiAJbXV0ZXhfbG9jaygmc3QtPmxvY2spOwotCXJldCA9IHNjYTMwMDBfcmVhZF9kYXRhKHN0LCBTQ0EzMDAwX1JFR19BRERSX0lOVF9TVEFUVVMsCi0JCQkJJnJ4LCAxKTsKKwlyZXQgPSBzY2EzMDAwX3JlYWRfZGF0YV9zaG9ydChzdCwgU0NBMzAwMF9SRUdfQUREUl9JTlRfU1RBVFVTLCAxKTsKKwl2YWwgPSBzdC0+cnhbMF07CiAJbXV0ZXhfdW5sb2NrKCZzdC0+bG9jayk7CiAJaWYgKHJldCkKIAkJZ290byBkb25lOwogCi0Jc2NhMzAwMF9yaW5nX2ludF9wcm9jZXNzKHJ4WzFdLCBzdC0+aW5kaW9fZGV2LT5yaW5nKTsKKwlzY2EzMDAwX3JpbmdfaW50X3Byb2Nlc3ModmFsLCBzdC0+aW5kaW9fZGV2LT5yaW5nKTsKIAotCWlmIChyeFsxXSAmIFNDQTMwMDBfSU5UX1NUQVRVU19GUkVFX0ZBTEwpCisJaWYgKHZhbCAmIFNDQTMwMDBfSU5UX1NUQVRVU19GUkVFX0ZBTEwpCiAJCWlpb19wdXNoX2V2ZW50KHN0LT5pbmRpb19kZXYsIDAsCiAJCQkgICAgICAgSUlPX01PRF9FVkVOVF9DT0RFKElJT19FVl9DTEFTU19BQ0NFTCwKIAkJCQkJCSAgMCwKIAkJCQkJCSAgSUlPX0VWX01PRF9YX0FORF9ZX0FORF9aLAogCQkJCQkJICBJSU9fRVZfVFlQRV9NQUcsCiAJCQkJCQkgIElJT19FVl9ESVJfRkFMTElORyksCi0JCQkgICAgICAgc3QtPmxhc3RfdGltZXN0YW1wKTsKKwkJCSAgICAgICBsYXN0X3RpbWVzdGFtcCk7CiAKLQlpZiAocnhbMV0gJiBTQ0EzMDAwX0lOVF9TVEFUVVNfWV9UUklHR0VSKQorCWlmICh2YWwgJiBTQ0EzMDAwX0lOVF9TVEFUVVNfWV9UUklHR0VSKQogCQlpaW9fcHVzaF9ldmVudChzdC0+aW5kaW9fZGV2LCAwLAogCQkJICAgICAgIElJT19NT0RfRVZFTlRfQ09ERShJSU9fRVZfQ0xBU1NfQUNDRUwsCiAJCQkJCQkgIDAsCiAJCQkJCQkgIElJT19FVl9NT0RfWSwKIAkJCQkJCSAgSUlPX0VWX1RZUEVfTUFHLAogCQkJCQkJICBJSU9fRVZfRElSX1JJU0lORyksCi0JCQkgICAgICAgc3QtPmxhc3RfdGltZXN0YW1wKTsKKwkJCSAgICAgICBsYXN0X3RpbWVzdGFtcCk7CiAKLQlpZiAocnhbMV0gJiBTQ0EzMDAwX0lOVF9TVEFUVVNfWF9UUklHR0VSKQorCWlmICh2YWwgJiBTQ0EzMDAwX0lOVF9TVEFUVVNfWF9UUklHR0VSKQogCQlpaW9fcHVzaF9ldmVudChzdC0+aW5kaW9fZGV2LCAwLAogCQkJICAgICAgIElJT19NT0RfRVZFTlRfQ09ERShJSU9fRVZfQ0xBU1NfQUNDRUwsCiAJCQkJCQkgIDAsCiAJCQkJCQkgIElJT19FVl9NT0RfWCwKIAkJCQkJCSAgSUlPX0VWX1RZUEVfTUFHLAogCQkJCQkJICBJSU9fRVZfRElSX1JJU0lORyksCi0JCQkgICAgICAgc3QtPmxhc3RfdGltZXN0YW1wKTsKKwkJCSAgICAgICBsYXN0X3RpbWVzdGFtcCk7CiAKLQlpZiAocnhbMV0gJiBTQ0EzMDAwX0lOVF9TVEFUVVNfWl9UUklHR0VSKQorCWlmICh2YWwgJiBTQ0EzMDAwX0lOVF9TVEFUVVNfWl9UUklHR0VSKQogCQlpaW9fcHVzaF9ldmVudChzdC0+aW5kaW9fZGV2LCAwLAogCQkJICAgICAgIElJT19NT0RfRVZFTlRfQ09ERShJSU9fRVZfQ0xBU1NfQUNDRUwsCiAJCQkJCQkgIDAsCiAJCQkJCQkgIElJT19FVl9NT0RfWiwKIAkJCQkJCSAgSUlPX0VWX1RZUEVfTUFHLAogCQkJCQkJICBJSU9fRVZfRElSX1JJU0lORyksCi0JCQkgICAgICAgc3QtPmxhc3RfdGltZXN0YW1wKTsKKwkJCSAgICAgICBsYXN0X3RpbWVzdGFtcCk7CiAKIGRvbmU6Ci0Ja2ZyZWUocngpOwotCXJldHVybjsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKIC8qKgotICogc2NhMzAwMF9oYW5kbGVyX3RoKCkgaGFuZGxlcyBhbGwgaW50ZXJydXB0IGV2ZW50cyBmcm9tIGRldmljZQotICoKLSAqIFRoZXNlIGRldmljZXMgZGVwbG95IHVuaWZpZWQgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcnMgbWVhbmluZwotICogYWxsIGludGVycnVwdHMgbXVzdCBiZSBoYW5kbGVkIHRvZ2V0aGVyCisgKiBzY2EzMDAwX3JlYWRfZXZlbnRfY29uZmlnKCkgd2hhdCBldmVudHMgYXJlIGVuYWJsZWQKICAqKi8KLXN0YXRpYyBpbnQgc2NhMzAwMF9oYW5kbGVyX3RoKHN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbywKLQkJCSAgICAgIGludCBpbmRleCwKLQkJCSAgICAgIHM2NCB0aW1lc3RhbXAsCi0JCQkgICAgICBpbnQgbm9fdGVzdCkKK3N0YXRpYyBpbnQgc2NhMzAwMF9yZWFkX2V2ZW50X2NvbmZpZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAorCQkJCSAgICAgaW50IGUpCiB7Ci0Jc3RydWN0IHNjYTMwMDBfc3RhdGUgKnN0ID0gZGV2X2luZm8tPmRldl9kYXRhOwotCi0Jc3QtPmxhc3RfdGltZXN0YW1wID0gdGltZXN0YW1wOwotCXNjaGVkdWxlX3dvcmsoJnN0LT5pbnRlcnJ1cHRfaGFuZGxlcl93cyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBzY2EzMDAwX3F1ZXJ5X21vX2RldCgpIGlzIG1vdGlvbiBkZXRlY3Rpb24gZW5hYmxlZCBmb3IgdGhpcyBheGlzCi0gKgotICogRmlyc3QgcXVlcmllcyBpZiBtb3Rpb24gZGV0ZWN0aW9uIGlzIGVuYWJsZWQgYW5kIHRoZW4gaWYgdGhpcyBheGlzIGlzCi0gKiBvbi4KLSAqKi8KLXN0YXRpYyBzc2l6ZV90IHNjYTMwMDBfcXVlcnlfbW9fZGV0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICAgIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldi0+cGFyZW50KTsKIAlzdHJ1Y3Qgc2NhMzAwMF9zdGF0ZSAqc3QgPSBpbmRpb19kZXYtPmRldl9kYXRhOwotCXN0cnVjdCBpaW9fZXZlbnRfYXR0ciAqdGhpc19hdHRyID0gdG9faWlvX2V2ZW50X2F0dHIoYXR0cik7Ci0JaW50IHJldCwgbGVuID0gMDsKLQl1OCAqcng7CisJaW50IHJldDsKIAl1OCBwcm90ZWN0X21hc2sgPSAweDAzOworCWludCBudW0gPSBJSU9fRVZFTlRfQ09ERV9FWFRSQUNUX01PRElGSUVSKGUpOwogCiAJLyogcmVhZCBjdXJyZW50IHZhbHVlIG9mIG1vZGUgcmVnaXN0ZXIgKi8KIAltdXRleF9sb2NrKCZzdC0+bG9jayk7Ci0JcmV0ID0gc2NhMzAwMF9yZWFkX2RhdGEoc3QsIFNDQTMwMDBfUkVHX0FERFJfTU9ERSwgJnJ4LCAxKTsKKwlyZXQgPSBzY2EzMDAwX3JlYWRfZGF0YV9zaG9ydChzdCwgU0NBMzAwMF9SRUdfQUREUl9NT0RFLCAxKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycm9yX3JldDsKIAotCWlmICgocnhbMV0mcHJvdGVjdF9tYXNrKSAhPSBTQ0EzMDAwX01FQVNfTU9ERV9NT1RfREVUKQotCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIwXG4iKTsKKwlpZiAoKHN0LT5yeFswXSAmIHByb3RlY3RfbWFzaykgIT0gU0NBMzAwMF9NRUFTX01PREVfTU9UX0RFVCkKKwkJcmV0ID0gMDsKIAllbHNlIHsKLQkJa2ZyZWUocngpOwotCQlyZXQgPSBzY2EzMDAwX3JlYWRfY3RybF9yZWcoc3QsCi0JCQkJCSAgICBTQ0EzMDAwX1JFR19DVFJMX1NFTF9NRF9DVFJMLAotCQkJCQkgICAgJnJ4KTsKLQkJaWYgKHJldCkKKwkJcmV0ID0gc2NhMzAwMF9yZWFkX2N0cmxfcmVnKHN0LCBTQ0EzMDAwX1JFR19DVFJMX1NFTF9NRF9DVFJMKTsKKwkJaWYgKHJldCA8IDApCiAJCQlnb3RvIGVycm9yX3JldDsKIAkJLyogb25seSBzdXBwb3J0aW5nIGxvZ2ljYWwgb3IncyBmb3Igbm93ICovCi0JCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiVkXG4iLAotCQkJICAgICAgIChyeFsxXSAmIHRoaXNfYXR0ci0+bWFzaykgPyAxIDogMCk7CisJCXJldCA9ICEhKHJldCAmIHNjYTMwMDBfYWRkcmVzc2VzW251bV1bMl0pOwogCX0KLQlrZnJlZShyeCk7CiBlcnJvcl9yZXQ6CiAJbXV0ZXhfdW5sb2NrKCZzdC0+bG9jayk7CiAKLQlyZXR1cm4gcmV0ID8gcmV0IDogbGVuOworCXJldHVybiByZXQ7CiB9CiAvKioKICAqIHNjYTMwMDBfcXVlcnlfZnJlZV9mYWxsX21vZGUoKSBpcyBmcmVlIGZhbGwgbW9kZSBlbmFibGVkCkBAIC05NzMsODAgKzg5NCwyMCBAQAogCQkJCQkgICAgY2hhciAqYnVmKQogewogCWludCByZXQsIGxlbjsKLQl1OCAqcng7CiAJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzY2EzMDAwX3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CisJaW50IHZhbDsKIAogCW11dGV4X2xvY2soJnN0LT5sb2NrKTsKLQlyZXQgPSBzY2EzMDAwX3JlYWRfZGF0YShzdCwgU0NBMzAwMF9SRUdfQUREUl9NT0RFLCAmcngsIDEpOworCXJldCA9IHNjYTMwMDBfcmVhZF9kYXRhX3Nob3J0KHN0LCBTQ0EzMDAwX1JFR19BRERSX01PREUsIDEpOworCXZhbCA9IHN0LT5yeFswXTsKIAltdXRleF91bmxvY2soJnN0LT5sb2NrKTsKLQlpZiAocmV0KQorCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCWxlbiA9IHNwcmludGYoYnVmLCAiJWRcbiIsCi0JCSAgICAgICEhKHJ4WzFdICYgU0NBMzAwMF9GUkVFX0ZBTExfREVURUNUKSk7Ci0Ja2ZyZWUocngpOwotCisJCSAgICAgICEhKHZhbCAmIFNDQTMwMDBfRlJFRV9GQUxMX0RFVEVDVCkpOwogCXJldHVybiBsZW47CiB9Ci0vKioKLSAqIHNjYTMwMDBfcXVlcnlfcmluZ19pbnQoKSBpcyB0aGUgaGFyZHdhcmUgcmluZyBzdGF0dXMgaW50ZXJydXB0IGVuYWJsZWQKLSAqKi8KLXN0YXRpYyBzc2l6ZV90IHNjYTMwMDBfcXVlcnlfcmluZ19pbnQoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCSAgICAgIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgaWlvX2V2ZW50X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19ldmVudF9hdHRyKGF0dHIpOwotCWludCByZXQsIGxlbjsKLQl1OCAqcng7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYtPnBhcmVudCk7Ci0Jc3RydWN0IHNjYTMwMDBfc3RhdGUgKnN0ID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKLQltdXRleF9sb2NrKCZzdC0+bG9jayk7Ci0JcmV0ID0gc2NhMzAwMF9yZWFkX2RhdGEoc3QsIFNDQTMwMDBfUkVHX0FERFJfSU5UX01BU0ssICZyeCwgMSk7Ci0JbXV0ZXhfdW5sb2NrKCZzdC0+bG9jayk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAocnhbMV0gJiB0aGlzX2F0dHItPm1hc2spID8gMSA6IDApOwotCWtmcmVlKHJ4KTsKLQotCXJldHVybiBsZW47Ci19Ci0vKioKLSAqIHNjYTMwMDBfc2V0X3JpbmdfaW50KCkgc2V0IHN0YXRlIG9mIHJpbmcgc3RhdHVzIGludGVycnVwdAotICoqLwotc3RhdGljIHNzaXplX3Qgc2NhMzAwMF9zZXRfcmluZ19pbnQoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCQkgICAgICBzaXplX3QgbGVuKQotewotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2LT5wYXJlbnQpOwotCXN0cnVjdCBzY2EzMDAwX3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7Ci0Jc3RydWN0IGlpb19ldmVudF9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZXZlbnRfYXR0cihhdHRyKTsKLQotCWxvbmcgdmFsOwotCWludCByZXQ7Ci0JdTggKnJ4OwotCi0JbXV0ZXhfbG9jaygmc3QtPmxvY2spOwotCXJldCA9IHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnZhbCk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJvcl9yZXQ7Ci0JcmV0ID0gc2NhMzAwMF9yZWFkX2RhdGEoc3QsIFNDQTMwMDBfUkVHX0FERFJfSU5UX01BU0ssICZyeCwgMSk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJvcl9yZXQ7Ci0JaWYgKHZhbCkKLQkJcmV0ID0gc2NhMzAwMF93cml0ZV9yZWcoc3QsCi0JCQkJCVNDQTMwMDBfUkVHX0FERFJfSU5UX01BU0ssCi0JCQkJCXJ4WzFdIHwgdGhpc19hdHRyLT5tYXNrKTsKLQllbHNlCi0JCXJldCA9IHNjYTMwMDBfd3JpdGVfcmVnKHN0LAotCQkJCQlTQ0EzMDAwX1JFR19BRERSX0lOVF9NQVNLLAotCQkJCQlyeFsxXSAmIH50aGlzX2F0dHItPm1hc2spOwotCWtmcmVlKHJ4KTsKLWVycm9yX3JldDoKLQltdXRleF91bmxvY2soJnN0LT5sb2NrKTsKLQotCXJldHVybiByZXQgPyByZXQgOiBsZW47Ci19CiAKIC8qKgogICogc2NhMzAwMF9zZXRfZnJlZV9mYWxsX21vZGUoKSBzaW1wbGUgb24gb2ZmIGNvbnRyb2wgZm9yIGZyZWUgZmFsbCBpbnQKQEAgLTEwNjUsNyArOTI2LDYgQEAKIAlzdHJ1Y3Qgc2NhMzAwMF9zdGF0ZSAqc3QgPSBpbmRpb19kZXYtPmRldl9kYXRhOwogCWxvbmcgdmFsOwogCWludCByZXQ7Ci0JdTggKnJ4OwogCXU4IHByb3RlY3RfbWFzayA9IFNDQTMwMDBfRlJFRV9GQUxMX0RFVEVDVDsKIAogCW11dGV4X2xvY2soJnN0LT5sb2NrKTsKQEAgLTEwNzQsMjAgKzkzNCwxOCBAQAogCQlnb3RvIGVycm9yX3JldDsKIAogCS8qIHJlYWQgY3VycmVudCB2YWx1ZSBvZiBtb2RlIHJlZ2lzdGVyICovCi0JcmV0ID0gc2NhMzAwMF9yZWFkX2RhdGEoc3QsIFNDQTMwMDBfUkVHX0FERFJfTU9ERSwgJnJ4LCAxKTsKKwlyZXQgPSBzY2EzMDAwX3JlYWRfZGF0YV9zaG9ydChzdCwgU0NBMzAwMF9SRUdfQUREUl9NT0RFLCAxKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycm9yX3JldDsKIAogCS8qaWYgb2ZmIGFuZCBzaG91bGQgYmUgb24qLwotCWlmICh2YWwgJiYgIShyeFsxXSAmIHByb3RlY3RfbWFzaykpCisJaWYgKHZhbCAmJiAhKHN0LT5yeFswXSAmIHByb3RlY3RfbWFzaykpCiAJCXJldCA9IHNjYTMwMDBfd3JpdGVfcmVnKHN0LCBTQ0EzMDAwX1JFR19BRERSX01PREUsCi0JCQkJCShyeFsxXSB8IFNDQTMwMDBfRlJFRV9GQUxMX0RFVEVDVCkpOworCQkJCQkoc3QtPnJ4WzBdIHwgU0NBMzAwMF9GUkVFX0ZBTExfREVURUNUKSk7CiAJLyogaWYgb24gYW5kIHNob3VsZCBiZSBvZmYgKi8KLQllbHNlIGlmICghdmFsICYmIChyeFsxXSZwcm90ZWN0X21hc2spKQorCWVsc2UgaWYgKCF2YWwgJiYgKHN0LT5yeFswXSAmIHByb3RlY3RfbWFzaykpCiAJCXJldCA9IHNjYTMwMDBfd3JpdGVfcmVnKHN0LCBTQ0EzMDAwX1JFR19BRERSX01PREUsCi0JCQkJCShyeFsxXSAmIH5wcm90ZWN0X21hc2spKTsKLQotCWtmcmVlKHJ4KTsKKwkJCQkJKHN0LT5yeFswXSAmIH5wcm90ZWN0X21hc2spKTsKIGVycm9yX3JldDoKIAltdXRleF91bmxvY2soJnN0LT5sb2NrKTsKIApAQCAtMTEwMywxMjcgKzk2MSw3NyBAQAogICogVGhlcmUgaXMgYSBjb21wbGV4aXR5IGluIGtub3dpbmcgd2hpY2ggbW9kZSB0byByZXR1cm4gdG8gd2hlbgogICogdGhpcyBtb2RlIGlzIGRpc2FibGVkLiAgQ3VycmVudGx5IG5vcm1hbCBtb2RlIGlzIGFzc3VtZWQuCiAgKiovCi1zdGF0aWMgc3NpemVfdCBzY2EzMDAwX3NldF9tb19kZXQoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICBjb25zdCBjaGFyICpidWYsCi0JCQkJICBzaXplX3QgbGVuKQorc3RhdGljIGludCBzY2EzMDAwX3dyaXRlX2V2ZW50X2NvbmZpZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAorCQkJCSAgICAgIGludCBlLAorCQkJCSAgICAgIGludCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldi0+cGFyZW50KTsKIAlzdHJ1Y3Qgc2NhMzAwMF9zdGF0ZSAqc3QgPSBpbmRpb19kZXYtPmRldl9kYXRhOwotCXN0cnVjdCBpaW9fZXZlbnRfYXR0ciAqdGhpc19hdHRyID0gdG9faWlvX2V2ZW50X2F0dHIoYXR0cik7Ci0JbG9uZyB2YWw7Ci0JaW50IHJldDsKLQl1OCAqcng7CisJaW50IHJldCwgY3RybHZhbDsKIAl1OCBwcm90ZWN0X21hc2sgPSAweDAzOwotCXJldCA9IHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnZhbCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwlpbnQgbnVtID0gSUlPX0VWRU5UX0NPREVfRVhUUkFDVF9NT0RJRklFUihlKTsKIAogCW11dGV4X2xvY2soJnN0LT5sb2NrKTsKIAkvKiBGaXJzdCByZWFkIHRoZSBtb3Rpb24gZGV0ZWN0b3IgY29uZmlnIHRvIGZpbmQgb3V0IGlmCiAJICogdGhpcyBheGlzIGlzIG9uKi8KLQlyZXQgPSBzY2EzMDAwX3JlYWRfY3RybF9yZWcoc3QsCi0JCQkJICAgIFNDQTMwMDBfUkVHX0NUUkxfU0VMX01EX0NUUkwsCi0JCQkJICAgICZyeCk7Ci0JaWYgKHJldCkKKwlyZXQgPSBzY2EzMDAwX3JlYWRfY3RybF9yZWcoc3QsIFNDQTMwMDBfUkVHX0NUUkxfU0VMX01EX0NUUkwpOworCWlmIChyZXQgPCAwKQogCQlnb3RvIGV4aXRfcG9pbnQ7CisJY3RybHZhbCA9IHJldDsKIAkvKiBPZmYgYW5kIHNob3VsZCBiZSBvbiAqLwotCWlmICh2YWwgJiYgIShyeFsxXSAmIHRoaXNfYXR0ci0+bWFzaykpIHsKKwlpZiAoc3RhdGUgJiYgIShjdHJsdmFsICYgc2NhMzAwMF9hZGRyZXNzZXNbbnVtXVsyXSkpIHsKIAkJcmV0ID0gc2NhMzAwMF93cml0ZV9jdHJsX3JlZyhzdCwKIAkJCQkJICAgICBTQ0EzMDAwX1JFR19DVFJMX1NFTF9NRF9DVFJMLAotCQkJCQkgICAgIHJ4WzFdIHwgdGhpc19hdHRyLT5tYXNrKTsKKwkJCQkJICAgICBjdHJsdmFsIHwKKwkJCQkJICAgICBzY2EzMDAwX2FkZHJlc3Nlc1tudW1dWzJdKTsKIAkJaWYgKHJldCkKLQkJCWdvdG8gZXhpdF9wb2ludF9mcmVlX3J4OworCQkJZ290byBleGl0X3BvaW50OwogCQlzdC0+bW9fZGV0X3VzZV9jb3VudCsrOwotCX0gZWxzZSBpZiAoIXZhbCAmJiAocnhbMV0mdGhpc19hdHRyLT5tYXNrKSkgeworCX0gZWxzZSBpZiAoIXN0YXRlICYmIChjdHJsdmFsICYgc2NhMzAwMF9hZGRyZXNzZXNbbnVtXVsyXSkpIHsKIAkJcmV0ID0gc2NhMzAwMF93cml0ZV9jdHJsX3JlZyhzdCwKIAkJCQkJICAgICBTQ0EzMDAwX1JFR19DVFJMX1NFTF9NRF9DVFJMLAotCQkJCQkgICAgIHJ4WzFdICYgfih0aGlzX2F0dHItPm1hc2spKTsKKwkJCQkJICAgICBjdHJsdmFsICYKKwkJCQkJICAgICB+KHNjYTMwMDBfYWRkcmVzc2VzW251bV1bMl0pKTsKIAkJaWYgKHJldCkKLQkJCWdvdG8gZXhpdF9wb2ludF9mcmVlX3J4OworCQkJZ290byBleGl0X3BvaW50OwogCQlzdC0+bW9fZGV0X3VzZV9jb3VudC0tOwotCX0gZWxzZSAvKiByZWxpZXMgb24gY2xlYW4gc3RhdGUgZm9yIGRldmljZSBvbiBib290ICovCi0JCWdvdG8gZXhpdF9wb2ludF9mcmVlX3J4OwotCWtmcmVlKHJ4KTsKKwl9CisKIAkvKiByZWFkIGN1cnJlbnQgdmFsdWUgb2YgbW9kZSByZWdpc3RlciAqLwotCXJldCA9IHNjYTMwMDBfcmVhZF9kYXRhKHN0LCBTQ0EzMDAwX1JFR19BRERSX01PREUsICZyeCwgMSk7CisJcmV0ID0gc2NhMzAwMF9yZWFkX2RhdGFfc2hvcnQoc3QsIFNDQTMwMDBfUkVHX0FERFJfTU9ERSwgMSk7CiAJaWYgKHJldCkKIAkJZ290byBleGl0X3BvaW50OwogCS8qaWYgb2ZmIGFuZCBzaG91bGQgYmUgb24qLwogCWlmICgoc3QtPm1vX2RldF91c2VfY291bnQpCi0JICAgICYmICgocnhbMV0mcHJvdGVjdF9tYXNrKSAhPSBTQ0EzMDAwX01FQVNfTU9ERV9NT1RfREVUKSkKKwkgICAgJiYgKChzdC0+cnhbMF0gJiBwcm90ZWN0X21hc2spICE9IFNDQTMwMDBfTUVBU19NT0RFX01PVF9ERVQpKQogCQlyZXQgPSBzY2EzMDAwX3dyaXRlX3JlZyhzdCwgU0NBMzAwMF9SRUdfQUREUl9NT0RFLAotCQkJCQkocnhbMV0gJiB+cHJvdGVjdF9tYXNrKQorCQkJCQkoc3QtPnJ4WzBdICYgfnByb3RlY3RfbWFzaykKIAkJCQkJfCBTQ0EzMDAwX01FQVNfTU9ERV9NT1RfREVUKTsKIAkvKiBpZiBvbiBhbmQgc2hvdWxkIGJlIG9mZiAqLwogCWVsc2UgaWYgKCEoc3QtPm1vX2RldF91c2VfY291bnQpCi0JCSAmJiAoKHJ4WzFdJnByb3RlY3RfbWFzaykgPT0gU0NBMzAwMF9NRUFTX01PREVfTU9UX0RFVCkpCisJCSAmJiAoKHN0LT5yeFswXSAmIHByb3RlY3RfbWFzaykgPT0gU0NBMzAwMF9NRUFTX01PREVfTU9UX0RFVCkpCiAJCXJldCA9IHNjYTMwMDBfd3JpdGVfcmVnKHN0LCBTQ0EzMDAwX1JFR19BRERSX01PREUsCi0JCQkJCShyeFsxXSAmIH5wcm90ZWN0X21hc2spKTsKLWV4aXRfcG9pbnRfZnJlZV9yeDoKLQlrZnJlZShyeCk7CisJCQkJCShzdC0+cnhbMF0gJiB+cHJvdGVjdF9tYXNrKSk7CiBleGl0X3BvaW50OgogCW11dGV4X3VubG9jaygmc3QtPmxvY2spOwogCi0JcmV0dXJuIHJldCA/IHJldCA6IGxlbjsKKwlyZXR1cm4gcmV0OwogfQogCi0vKiBTaGFyZWQgZXZlbnQgaGFuZGxlciBmb3IgYWxsIGV2ZW50cyBhcyBzaW5nbGUgZXZlbnQgc3RhdHVzIHJlZ2lzdGVyICovCi1JSU9fRVZFTlRfU0goYWxsLCAmc2NhMzAwMF9oYW5kbGVyX3RoKTsKLQogLyogRnJlZSBmYWxsIGRldGVjdG9yIHJlbGF0ZWQgZXZlbnQgYXR0cmlidXRlICovCi1JSU9fRVZFTlRfQVRUUl9OQU1FRF9TSChhY2NlbF94YXlhel9tYWdfZmFsbGluZ19lbiwKLQkJCWFjY2VsX3gmeSZ6X21hZ19mYWxsaW5nX2VuLAotCQkJaWlvX2V2ZW50X2FsbCwKLQkJCXNjYTMwMDBfcXVlcnlfZnJlZV9mYWxsX21vZGUsCi0JCQlzY2EzMDAwX3NldF9mcmVlX2ZhbGxfbW9kZSwKLQkJCTApOworc3RhdGljIElJT19ERVZJQ0VfQVRUUl9OQU1FRChhY2NlbF94YXlhel9tYWdfZmFsbGluZ19lbiwKKwkJCSAgICAgYWNjZWxfeCZ5JnpfbWFnX2ZhbGxpbmdfZW4sCisJCQkgICAgIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJICAgICBzY2EzMDAwX3F1ZXJ5X2ZyZWVfZmFsbF9tb2RlLAorCQkJICAgICBzY2EzMDAwX3NldF9mcmVlX2ZhbGxfbW9kZSwKKwkJCSAgICAgMCk7CiAKLUlJT19DT05TVF9BVFRSX05BTUVEKGFjY2VsX3hheWF6X21hZ19mYWxsaW5nX3BlcmlvZCwKLQkJICAgICBhY2NlbF94Jnkmel9tYWdfZmFsbGluZ19wZXJpb2QsCi0JCSAgICAgIjAuMjI2Iik7Ci0KLS8qIE1vdGlvbiBkZXRlY3RvciByZWxhdGVkIGV2ZW50IGF0dHJpYnV0ZXMgKi8KLUlJT19FVkVOVF9BVFRSX1NIKGFjY2VsX3hfbWFnX3Jpc2luZ19lbiwKLQkJICBpaW9fZXZlbnRfYWxsLAotCQkgIHNjYTMwMDBfcXVlcnlfbW9fZGV0LAotCQkgIHNjYTMwMDBfc2V0X21vX2RldCwKLQkJICBTQ0EzMDAwX01EX0NUUkxfT1JfWCk7Ci0KLUlJT19FVkVOVF9BVFRSX1NIKGFjY2VsX3lfbWFnX3Jpc2luZ19lbiwKLQkJICBpaW9fZXZlbnRfYWxsLAotCQkgIHNjYTMwMDBfcXVlcnlfbW9fZGV0LAotCQkgIHNjYTMwMDBfc2V0X21vX2RldCwKLQkJICBTQ0EzMDAwX01EX0NUUkxfT1JfWSk7Ci0KLUlJT19FVkVOVF9BVFRSX1NIKGFjY2VsX3pfbWFnX3Jpc2luZ19lbiwKLQkJICBpaW9fZXZlbnRfYWxsLAotCQkgIHNjYTMwMDBfcXVlcnlfbW9fZGV0LAotCQkgIHNjYTMwMDBfc2V0X21vX2RldCwKLQkJICBTQ0EzMDAwX01EX0NUUkxfT1JfWik7Ci0KLS8qIEhhcmR3YXJlIHJpbmcgYnVmZmVyIHJlbGF0ZWQgZXZlbnQgYXR0cmlidXRlcyAqLwotSUlPX0VWRU5UX0FUVFJfUklOR181MF9GVUxMX1NIKGlpb19ldmVudF9hbGwsCi0JCQkgICAgICAgc2NhMzAwMF9xdWVyeV9yaW5nX2ludCwKLQkJCSAgICAgICBzY2EzMDAwX3NldF9yaW5nX2ludCwKLQkJCSAgICAgICBTQ0EzMDAwX0lOVF9NQVNLX1JJTkdfSEFMRik7Ci0KLUlJT19FVkVOVF9BVFRSX1JJTkdfNzVfRlVMTF9TSChpaW9fZXZlbnRfYWxsLAotCQkJICAgICAgIHNjYTMwMDBfcXVlcnlfcmluZ19pbnQsCi0JCQkgICAgICAgc2NhMzAwMF9zZXRfcmluZ19pbnQsCi0JCQkgICAgICAgU0NBMzAwMF9JTlRfTUFTS19SSU5HX1RIUkVFX1FVQVJURVIpOworc3RhdGljIElJT19DT05TVF9BVFRSX05BTUVEKGFjY2VsX3hheWF6X21hZ19mYWxsaW5nX3BlcmlvZCwKKwkJCSAgICBhY2NlbF94Jnkmel9tYWdfZmFsbGluZ19wZXJpb2QsCisJCQkgICAgIjAuMjI2Iik7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpzY2EzMDAwX2V2ZW50X2F0dHJpYnV0ZXNbXSA9IHsKLQkmaWlvX2V2ZW50X2F0dHJfYWNjZWxfeGF5YXpfbWFnX2ZhbGxpbmdfZW4uZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2FjY2VsX3hheWF6X21hZ19mYWxsaW5nX2VuLmRldl9hdHRyLmF0dHIsCiAJJmlpb19jb25zdF9hdHRyX2FjY2VsX3hheWF6X21hZ19mYWxsaW5nX3BlcmlvZC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl9hY2NlbF94X21hZ19yaXNpbmdfZW4uZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2FjY2VsX3hfcmF3X21hZ19yaXNpbmdfdmFsdWUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfYWNjZWxfeV9tYWdfcmlzaW5nX2VuLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9hY2NlbF95X3Jhd19tYWdfcmlzaW5nX3ZhbHVlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX2FjY2VsX3pfbWFnX3Jpc2luZ19lbi5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfYWNjZWxfel9yYXdfbWFnX3Jpc2luZ192YWx1ZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl9yaW5nXzUwX2Z1bGwuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfcmluZ183NV9mdWxsLmRldl9hdHRyLmF0dHIsCiAJTlVMTCwKIH07CiAKQEAgLTEyNDEsNzAgKzEwNDksNTAgQEAKIHN0YXRpYyBpbnQgc2NhMzAwMF9jbGVhbl9zZXR1cChzdHJ1Y3Qgc2NhMzAwMF9zdGF0ZSAqc3QpCiB7CiAJaW50IHJldDsKLQl1OCAqcng7CiAKIAltdXRleF9sb2NrKCZzdC0+bG9jayk7CiAJLyogRW5zdXJlIGFsbCBpbnRlcnJ1cHRzIGhhdmUgYmVlbiBhY2tub3dsZWRnZWQgKi8KLQlyZXQgPSBzY2EzMDAwX3JlYWRfZGF0YShzdCwgU0NBMzAwMF9SRUdfQUREUl9JTlRfU1RBVFVTLCAmcngsIDEpOworCXJldCA9IHNjYTMwMDBfcmVhZF9kYXRhX3Nob3J0KHN0LCBTQ0EzMDAwX1JFR19BRERSX0lOVF9TVEFUVVMsIDEpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfcmV0OwotCWtmcmVlKHJ4KTsKIAogCS8qIFR1cm4gb2ZmIGFsbCBtb3Rpb24gZGV0ZWN0aW9uIGNoYW5uZWxzICovCi0JcmV0ID0gc2NhMzAwMF9yZWFkX2N0cmxfcmVnKHN0LAotCQkJCSAgICBTQ0EzMDAwX1JFR19DVFJMX1NFTF9NRF9DVFJMLAotCQkJCSAgICAmcngpOwotCWlmIChyZXQpCisJcmV0ID0gc2NhMzAwMF9yZWFkX2N0cmxfcmVnKHN0LCBTQ0EzMDAwX1JFR19DVFJMX1NFTF9NRF9DVFJMKTsKKwlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJvcl9yZXQ7Ci0JcmV0ID0gc2NhMzAwMF93cml0ZV9jdHJsX3JlZyhzdCwKLQkJCQkgICAgIFNDQTMwMDBfUkVHX0NUUkxfU0VMX01EX0NUUkwsCi0JCQkJICAgICByeFsxXSAmIFNDQTMwMDBfTURfQ1RSTF9QUk9UX01BU0spOwotCWtmcmVlKHJ4KTsKKwlyZXQgPSBzY2EzMDAwX3dyaXRlX2N0cmxfcmVnKHN0LCBTQ0EzMDAwX1JFR19DVFJMX1NFTF9NRF9DVFJMLAorCQkJCSAgICAgcmV0ICYgU0NBMzAwMF9NRF9DVFJMX1BST1RfTUFTSyk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl9yZXQ7CiAKIAkvKiBEaXNhYmxlIHJpbmcgYnVmZmVyICovCi0Jc2NhMzAwMF9yZWFkX2N0cmxfcmVnKHN0LAotCQkJICAgICAgU0NBMzAwMF9SRUdfQ1RSTF9TRUxfT1VUX0NUUkwsCi0JCQkgICAgICAmcngpOwotCS8qIEZyZXF1ZW5jeSBvZiByaW5nIGJ1ZmZlciBzYW1wbGluZyBkZWxpYmVyYXRlbHkgcmVzdHJpY3RlZCB0byBtYWtlCi0JICogZGVidWdnaW5nIGVhc2llciAtIGFkZCBjb250cm9sIG9mIHRoaXMgbGF0ZXIgKi8KLQlyZXQgPSBzY2EzMDAwX3dyaXRlX2N0cmxfcmVnKHN0LAotCQkJCSAgICAgU0NBMzAwMF9SRUdfQ1RSTF9TRUxfT1VUX0NUUkwsCi0JCQkJICAgICAocnhbMV0gJiBTQ0EzMDAwX09VVF9DVFJMX1BST1RfTUFTSykKKwlyZXQgPSBzY2EzMDAwX3JlYWRfY3RybF9yZWcoc3QsIFNDQTMwMDBfUkVHX0NUUkxfU0VMX09VVF9DVFJMKTsKKwlyZXQgPSBzY2EzMDAwX3dyaXRlX2N0cmxfcmVnKHN0LCBTQ0EzMDAwX1JFR19DVFJMX1NFTF9PVVRfQ1RSTCwKKwkJCQkgICAgIChyZXQgJiBTQ0EzMDAwX09VVF9DVFJMX1BST1RfTUFTSykKIAkJCQkgICAgIHwgU0NBMzAwMF9PVVRfQ1RSTF9CVUZfWF9FTgogCQkJCSAgICAgfCBTQ0EzMDAwX09VVF9DVFJMX0JVRl9ZX0VOCiAJCQkJICAgICB8IFNDQTMwMDBfT1VUX0NUUkxfQlVGX1pfRU4KIAkJCQkgICAgIHwgU0NBMzAwMF9PVVRfQ1RSTF9CVUZfRElWXzQpOwotCWtmcmVlKHJ4KTsKLQogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfcmV0OwogCS8qIEVuYWJsZSBpbnRlcnJ1cHRzLCByZWxldmFudCB0byBtb2RlIGFuZCBzZXQgdXAgYXMgYWN0aXZlIGxvdyAqLwotCXJldCA9IHNjYTMwMDBfcmVhZF9kYXRhKHN0LAotCQkJICBTQ0EzMDAwX1JFR19BRERSX0lOVF9NQVNLLAotCQkJICAmcngsIDEpOworCXJldCA9IHNjYTMwMDBfcmVhZF9kYXRhX3Nob3J0KHN0LCBTQ0EzMDAwX1JFR19BRERSX0lOVF9NQVNLLCAxKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycm9yX3JldDsKIAlyZXQgPSBzY2EzMDAwX3dyaXRlX3JlZyhzdCwKIAkJCQlTQ0EzMDAwX1JFR19BRERSX0lOVF9NQVNLLAotCQkJCShyeFsxXSAmIFNDQTMwMDBfSU5UX01BU0tfUFJPVF9NQVNLKQorCQkJCShyZXQgJiBTQ0EzMDAwX0lOVF9NQVNLX1BST1RfTUFTSykKIAkJCQl8IFNDQTMwMDBfSU5UX01BU0tfQUNUSVZFX0xPVyk7Ci0Ja2ZyZWUocngpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfcmV0OwogCS8qIFNlbGVjdCBub3JtYWwgbWVhc3VyZW1lbnQgbW9kZSwgZnJlZSBmYWxsIG9mZiwgcmluZyBvZmYgKi8KIAkvKiBSaW5nIGluIDEyIGJpdCBtb2RlIC0gaXQgaXMgZmluZSB0byBvdmVyd3JpdGUgcmVzZXJ2ZWQgYml0cyAzLDUKIAkgKiBhcyB0aGF0IG9jY3VycyBpbiBvbmUgb2YgdGhlIGV4YW1wbGUgb24gdGhlIGRhdGFzaGVldCAqLwotCXJldCA9IHNjYTMwMDBfcmVhZF9kYXRhKHN0LAotCQkJICBTQ0EzMDAwX1JFR19BRERSX01PREUsCi0JCQkgICZyeCwgMSk7CisJcmV0ID0gc2NhMzAwMF9yZWFkX2RhdGFfc2hvcnQoc3QsIFNDQTMwMDBfUkVHX0FERFJfTU9ERSwgMSk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl9yZXQ7Ci0JcmV0ID0gc2NhMzAwMF93cml0ZV9yZWcoc3QsCi0JCQkJU0NBMzAwMF9SRUdfQUREUl9NT0RFLAotCQkJCShyeFsxXSAmIFNDQTMwMDBfTU9ERV9QUk9UX01BU0spKTsKLQlrZnJlZShyeCk7CisJcmV0ID0gc2NhMzAwMF93cml0ZV9yZWcoc3QsIFNDQTMwMDBfUkVHX0FERFJfTU9ERSwKKwkJCQkoc3QtPnJ4WzBdICYgU0NBMzAwMF9NT0RFX1BST1RfTUFTSykpOwogCXN0LT5icHNlID0gMTE7CiAKIGVycm9yX3JldDoKQEAgLTEzMTIsOCArMTEwMCwyOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IF9fc2NhMzAwMF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLAotCQkJCSAgICAgZW51bSBzY2EzMDAwX3ZhcmlhbnQgdmFyaWFudCkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2luZm8gc2NhMzAwMF9pbmZvID0geworCS5hdHRycyA9ICZzY2EzMDAwX2F0dHJpYnV0ZV9ncm91cCwKKwkucmVhZF9yYXcgPSAmc2NhMzAwMF9yZWFkX3JhdywKKwkubnVtX2ludGVycnVwdF9saW5lcyA9IDEsCisJLmV2ZW50X2F0dHJzID0gJnNjYTMwMDBfZXZlbnRfYXR0cmlidXRlX2dyb3VwLAorCS5yZWFkX2V2ZW50X3ZhbHVlID0gJnNjYTMwMDBfcmVhZF90aHJlc2gsCisJLndyaXRlX2V2ZW50X3ZhbHVlID0gJnNjYTMwMDBfd3JpdGVfdGhyZXNoLAorCS5yZWFkX2V2ZW50X2NvbmZpZyA9ICZzY2EzMDAwX3JlYWRfZXZlbnRfY29uZmlnLAorCS53cml0ZV9ldmVudF9jb25maWcgPSAmc2NhMzAwMF93cml0ZV9ldmVudF9jb25maWcsCisJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2luZm8gc2NhMzAwMF9pbmZvX3dpdGhfdGVtcCA9IHsKKwkuYXR0cnMgPSAmc2NhMzAwMF9hdHRyaWJ1dGVfZ3JvdXBfd2l0aF90ZW1wLAorCS5yZWFkX3JhdyA9ICZzY2EzMDAwX3JlYWRfcmF3LAorCS5yZWFkX2V2ZW50X3ZhbHVlID0gJnNjYTMwMDBfcmVhZF90aHJlc2gsCisJLndyaXRlX2V2ZW50X3ZhbHVlID0gJnNjYTMwMDBfd3JpdGVfdGhyZXNoLAorCS5yZWFkX2V2ZW50X2NvbmZpZyA9ICZzY2EzMDAwX3JlYWRfZXZlbnRfY29uZmlnLAorCS53cml0ZV9ldmVudF9jb25maWcgPSAmc2NhMzAwMF93cml0ZV9ldmVudF9jb25maWcsCisJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNjYTMwMDBfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlpbnQgcmV0LCByZWdkb25lID0gMDsKIAlzdHJ1Y3Qgc2NhMzAwMF9zdGF0ZSAqc3Q7CkBAIC0xMzI1LDc1ICsxMTM0LDU3IEBACiAJfQogCXNwaV9zZXRfZHJ2ZGF0YShzcGksIHN0KTsKIAotCXN0LT50eCA9IGttYWxsb2Moc2l6ZW9mKCpzdC0+dHgpKjYsIEdGUF9LRVJORUwpOwotCWlmIChzdC0+dHggPT0gTlVMTCkgeworCXN0LT51cyA9IHNwaTsKKwltdXRleF9pbml0KCZzdC0+bG9jayk7CisJc3QtPmluZm8gPSAmc2NhMzAwMF9zcGlfY2hpcF9pbmZvX3RibFtzcGlfZ2V0X2RldmljZV9pZChzcGkpCisJCQkJCSAgICAgIC0+ZHJpdmVyX2RhdGFdOworCisJc3QtPmluZGlvX2RldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2UoMCk7CisJaWYgKHN0LT5pbmRpb19kZXYgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX2NsZWFyX3N0OwogCX0KLQlzdC0+cnggPSBrbWFsbG9jKHNpemVvZigqc3QtPnJ4KSozLCBHRlBfS0VSTkVMKTsKLQlpZiAoc3QtPnJ4ID09IE5VTEwpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJvcl9mcmVlX3R4OwotCX0KLQlzdC0+dXMgPSBzcGk7Ci0JbXV0ZXhfaW5pdCgmc3QtPmxvY2spOwotCXN0LT5pbmZvID0gJnNjYTMwMDBfc3BpX2NoaXBfaW5mb190YmxbdmFyaWFudF07Ci0KLQlzdC0+aW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgpOwotCWlmIChzdC0+aW5kaW9fZGV2ID09IE5VTEwpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJvcl9mcmVlX3J4OwotCX0KLQogCXN0LT5pbmRpb19kZXYtPmRldi5wYXJlbnQgPSAmc3BpLT5kZXY7Ci0Jc3QtPmluZGlvX2Rldi0+bnVtX2ludGVycnVwdF9saW5lcyA9IDE7Ci0Jc3QtPmluZGlvX2Rldi0+ZXZlbnRfYXR0cnMgPSAmc2NhMzAwMF9ldmVudF9hdHRyaWJ1dGVfZ3JvdXA7CisJc3QtPmluZGlvX2Rldi0+bmFtZSA9IHNwaV9nZXRfZGV2aWNlX2lkKHNwaSktPm5hbWU7CiAJaWYgKHN0LT5pbmZvLT50ZW1wX291dHB1dCkKLQkJc3QtPmluZGlvX2Rldi0+YXR0cnMgPSAmc2NhMzAwMF9hdHRyaWJ1dGVfZ3JvdXBfd2l0aF90ZW1wOwotCWVsc2UKLQkJc3QtPmluZGlvX2Rldi0+YXR0cnMgPSAmc2NhMzAwMF9hdHRyaWJ1dGVfZ3JvdXA7CisJCXN0LT5pbmRpb19kZXYtPmluZm8gPSAmc2NhMzAwMF9pbmZvX3dpdGhfdGVtcDsKKwllbHNlIHsKKwkJc3QtPmluZGlvX2Rldi0+aW5mbyA9ICZzY2EzMDAwX2luZm87CisJCXN0LT5pbmRpb19kZXYtPmNoYW5uZWxzID0gc2NhMzAwMF9jaGFubmVsczsKKwkJc3QtPmluZGlvX2Rldi0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShzY2EzMDAwX2NoYW5uZWxzKTsKKwl9CiAJc3QtPmluZGlvX2Rldi0+ZGV2X2RhdGEgPSAodm9pZCAqKShzdCk7CiAJc3QtPmluZGlvX2Rldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1RfTU9ERTsKIAogCXNjYTMwMDBfY29uZmlndXJlX3Jpbmcoc3QtPmluZGlvX2Rldik7Ci0KIAlyZXQgPSBpaW9fZGV2aWNlX3JlZ2lzdGVyKHN0LT5pbmRpb19kZXYpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycm9yX2ZyZWVfZGV2OwogCXJlZ2RvbmUgPSAxOwotCXJldCA9IGlpb19yaW5nX2J1ZmZlcl9yZWdpc3RlcihzdC0+aW5kaW9fZGV2LT5yaW5nLCAwKTsKKwlyZXQgPSBpaW9fcmluZ19idWZmZXJfcmVnaXN0ZXJfZXgoc3QtPmluZGlvX2Rldi0+cmluZywgMCwKKwkJCQkJICBzY2EzMDAwX2NoYW5uZWxzLAorCQkJCQkgIEFSUkFZX1NJWkUoc2NhMzAwMF9jaGFubmVscykpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycm9yX3VucmVnaXN0ZXJfZGV2OwogCWlmIChzcGktPmlycSAmJiBncGlvX2lzX3ZhbGlkKGlycV90b19ncGlvKHNwaS0+aXJxKSkgPiAwKSB7Ci0JCUlOSVRfV09SSygmc3QtPmludGVycnVwdF9oYW5kbGVyX3dzLAotCQkJICBzY2EzMDAwX2ludGVycnVwdF9oYW5kbGVyX2JoKTsKLQkJcmV0ID0gaWlvX3JlZ2lzdGVyX2ludGVycnVwdF9saW5lKHNwaS0+aXJxLAotCQkJCQkJICBzdC0+aW5kaW9fZGV2LAotCQkJCQkJICAwLAotCQkJCQkJICBJUlFGX1RSSUdHRVJfRkFMTElORywKLQkJCQkJCSAgInNjYTMwMDAiKTsKKwkJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoc3BpLT5pcnEsCisJCQkJCSAgIE5VTEwsCisJCQkJCSAgICZzY2EzMDAwX2V2ZW50X2hhbmRsZXIsCisJCQkJCSAgIElSUUZfVFJJR0dFUl9GQUxMSU5HLAorCQkJCQkgICAic2NhMzAwMCIsCisJCQkJCSAgIHN0LT5pbmRpb19kZXYpOwogCQlpZiAocmV0KQogCQkJZ290byBlcnJvcl91bnJlZ2lzdGVyX3Jpbmc7Ci0JCS8qIFJGQwotCQkgKiBQcm9iYWJseSBhIGNvbW1vbiBzaXR1YXRpb24uICBBbGwgaW50ZXJydXB0cyBuZWVkIGFuIGFjawotCQkgKiBhbmQgdGhlcmUgaXMgb25seSBvbmUgaGFuZGxlciBzbyB0aGUgY29tcGxpY2F0ZWQgbGlzdCBzeXN0ZW0KLQkJICogaXMgb3ZlcmtpbGwuICBBdCB2ZXJ5IGxlYXN0IGEgc2ltcGxlciByZWdpc3RyYXRpb24gbWV0aG9kCi0JCSAqIG1pZ2h0IGJlIHdvcnRod2hpbGUuCi0JCSAqLwotCQlpaW9fYWRkX2V2ZW50X3RvX2xpc3QoCi0JCQlpaW9fZXZlbnRfYXR0cl9hY2NlbF96X21hZ19yaXNpbmdfZW4ubGlzdGVsLAotCQkJJnN0LT5pbmRpb19kZXYKLQkJCS0+aW50ZXJydXB0c1swXS0+ZXZfbGlzdCk7CiAJfQogCXNjYTMwMDBfcmVnaXN0ZXJfcmluZ19mdW5jcyhzdC0+aW5kaW9fZGV2KTsKIAlyZXQgPSBzY2EzMDAwX2NsZWFuX3NldHVwKHN0KTsKIAlpZiAocmV0KQotCQlnb3RvIGVycm9yX3VucmVnaXN0ZXJfaW50ZXJydXB0X2xpbmU7CisJCWdvdG8gZXJyb3JfZnJlZV9pcnE7CiAJcmV0dXJuIDA7CiAKLWVycm9yX3VucmVnaXN0ZXJfaW50ZXJydXB0X2xpbmU6CitlcnJvcl9mcmVlX2lycToKIAlpZiAoc3BpLT5pcnEgJiYgZ3Bpb19pc192YWxpZChpcnFfdG9fZ3BpbyhzcGktPmlycSkpID4gMCkKLQkJaWlvX3VucmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoc3QtPmluZGlvX2RldiwgMCk7CisJCWZyZWVfaXJxKHNwaS0+aXJxLCBzdC0+aW5kaW9fZGV2KTsKIGVycm9yX3VucmVnaXN0ZXJfcmluZzoKIAlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihzdC0+aW5kaW9fZGV2LT5yaW5nKTsKIGVycm9yX3VucmVnaXN0ZXJfZGV2OgpAQCAtMTQwMiwxMCArMTE5Myw2IEBACiAJCWlpb19kZXZpY2VfdW5yZWdpc3RlcihzdC0+aW5kaW9fZGV2KTsKIAllbHNlCiAJCWlpb19mcmVlX2RldmljZShzdC0+aW5kaW9fZGV2KTsKLWVycm9yX2ZyZWVfcng6Ci0Ja2ZyZWUoc3QtPnJ4KTsKLWVycm9yX2ZyZWVfdHg6Ci0Ja2ZyZWUoc3QtPnR4KTsKIGVycm9yX2NsZWFyX3N0OgogCWtmcmVlKHN0KTsKIGVycm9yX3JldDoKQEAgLTE0MTUsMjAgKzEyMDIsMTkgQEAKIHN0YXRpYyBpbnQgc2NhMzAwMF9zdG9wX2FsbF9pbnRlcnJ1cHRzKHN0cnVjdCBzY2EzMDAwX3N0YXRlICpzdCkKIHsKIAlpbnQgcmV0OwotCXU4ICpyeDsKIAogCW11dGV4X2xvY2soJnN0LT5sb2NrKTsKLQlyZXQgPSBzY2EzMDAwX3JlYWRfZGF0YShzdCwgU0NBMzAwMF9SRUdfQUREUl9JTlRfTUFTSywgJnJ4LCAxKTsKKwlyZXQgPSBzY2EzMDAwX3JlYWRfZGF0YV9zaG9ydChzdCwgU0NBMzAwMF9SRUdfQUREUl9JTlRfTUFTSywgMSk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl9yZXQ7CiAJcmV0ID0gc2NhMzAwMF93cml0ZV9yZWcoc3QsIFNDQTMwMDBfUkVHX0FERFJfSU5UX01BU0ssCi0JCQkJKHJ4WzFdICYgfihTQ0EzMDAwX0lOVF9NQVNLX1JJTkdfVEhSRUVfUVVBUlRFUgotCQkJCQkgICB8IFNDQTMwMDBfSU5UX01BU0tfUklOR19IQUxGCi0JCQkJCSAgIHwgU0NBMzAwMF9JTlRfTUFTS19BTExfSU5UUykpKTsKKwkJCQkoc3QtPnJ4WzBdICYKKwkJCQkgfihTQ0EzMDAwX0lOVF9NQVNLX1JJTkdfVEhSRUVfUVVBUlRFUiB8CisJCQkJICAgU0NBMzAwMF9JTlRfTUFTS19SSU5HX0hBTEYgfAorCQkJCSAgIFNDQTMwMDBfSU5UX01BU0tfQUxMX0lOVFMpKSk7CiBlcnJvcl9yZXQ6Ci0Ja2ZyZWUocngpOworCW11dGV4X3VubG9jaygmc3QtPmxvY2spOwogCXJldHVybiByZXQ7Ci0KIH0KIAogc3RhdGljIGludCBzY2EzMDAwX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQpAQCAtMTQ0MSw4NyArMTIyNyw0NCBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAJaWYgKHNwaS0+aXJxICYmIGdwaW9faXNfdmFsaWQoaXJxX3RvX2dwaW8oc3BpLT5pcnEpKSA+IDApCi0JCWlpb191bnJlZ2lzdGVyX2ludGVycnVwdF9saW5lKGluZGlvX2RldiwgMCk7CisJCWZyZWVfaXJxKHNwaS0+aXJxLCBpbmRpb19kZXYpOwogCWlpb19yaW5nX2J1ZmZlcl91bnJlZ2lzdGVyKGluZGlvX2Rldi0+cmluZyk7CiAJc2NhMzAwMF91bmNvbmZpZ3VyZV9yaW5nKGluZGlvX2Rldik7CiAJaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CiAKLQlrZnJlZShzdC0+dHgpOwotCWtmcmVlKHN0LT5yeCk7CiAJa2ZyZWUoc3QpOwogCiAJcmV0dXJuIDA7CiB9CiAKLS8qIFRoZXNlIG1hY3JvcyBzYXZlIG9uIGFuIGF3ZnVsIGxvdCBvZiByZXBlYXRlZCBjb2RlICovCi0jZGVmaW5lIFNDQTMwMDBfVkFSSUFOVF9QUk9CRShfbmFtZSkJCQkJXAotCXN0YXRpYyBpbnQgX19kZXZpbml0CQkJCQlcCi0Jc2NhMzAwMF8jI19uYW1lIyNfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkJCVwKLQl7CQkJCQkJCVwKLQkJcmV0dXJuIF9fc2NhMzAwMF9wcm9iZShzcGksIF9uYW1lKTsJCVwKLQl9CitzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9kZXZpY2VfaWQgc2NhMzAwMF9pZFtdID0geworCXsic2NhMzAwMF9kMDEiLCBkMDF9LAorCXsic2NhMzAwMF9lMDIiLCBlMDJ9LAorCXsic2NhMzAwMF9lMDQiLCBlMDR9LAorCXsic2NhMzAwMF9lMDUiLCBlMDV9LAorCXt9Cit9OwogCi0jZGVmaW5lIFNDQTMwMDBfVkFSSUFOVF9TUElfRFJJVkVSKF9uYW1lKQkJCVwKLQlzdHJ1Y3Qgc3BpX2RyaXZlciBzY2EzMDAwXyMjX25hbWUjI19kcml2ZXIgPSB7CQlcCi0JCS5kcml2ZXIgPSB7CQkJCQlcCi0JCQkubmFtZSA9ICJzY2EzMDAwXyIgI19uYW1lLAkJXAotCQkJLm93bmVyID0gVEhJU19NT0RVTEUsCQkJXAotCQl9LAkJCQkJCVwKLQkJLnByb2JlID0gc2NhMzAwMF8jI19uYW1lIyNfcHJvYmUsCQlcCi0JCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzY2EzMDAwX3JlbW92ZSksCQlcCi0JfQotCi1TQ0EzMDAwX1ZBUklBTlRfUFJPQkUoZDAxKTsKLXN0YXRpYyBTQ0EzMDAwX1ZBUklBTlRfU1BJX0RSSVZFUihkMDEpOwotCi1TQ0EzMDAwX1ZBUklBTlRfUFJPQkUoZTAyKTsKLXN0YXRpYyBTQ0EzMDAwX1ZBUklBTlRfU1BJX0RSSVZFUihlMDIpOwotCi1TQ0EzMDAwX1ZBUklBTlRfUFJPQkUoZTA0KTsKLXN0YXRpYyBTQ0EzMDAwX1ZBUklBTlRfU1BJX0RSSVZFUihlMDQpOwotCi1TQ0EzMDAwX1ZBUklBTlRfUFJPQkUoZTA1KTsKLXN0YXRpYyBTQ0EzMDAwX1ZBUklBTlRfU1BJX0RSSVZFUihlMDUpOworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHNjYTMwMDBfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInNjYTMwMDAiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9IHNjYTMwMDBfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNjYTMwMDBfcmVtb3ZlKSwKKwkuaWRfdGFibGUgPSBzY2EzMDAwX2lkLAorfTsKIAogc3RhdGljIF9faW5pdCBpbnQgc2NhMzAwMF9pbml0KHZvaWQpCiB7Ci0JaW50IHJldDsKLQotCXJldCA9IHNwaV9yZWdpc3Rlcl9kcml2ZXIoJnNjYTMwMDBfZDAxX2RyaXZlcik7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJvcl9yZXQ7Ci0JcmV0ID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmc2NhMzAwMF9lMDJfZHJpdmVyKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycm9yX3VucmVnX2QwMTsKLQlyZXQgPSBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZzY2EzMDAwX2UwNF9kcml2ZXIpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyb3JfdW5yZWdfZTAyOwotCXJldCA9IHNwaV9yZWdpc3Rlcl9kcml2ZXIoJnNjYTMwMDBfZTA1X2RyaXZlcik7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJvcl91bnJlZ19lMDQ7Ci0KLQlyZXR1cm4gMDsKLQotZXJyb3JfdW5yZWdfZTA0OgotCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmc2NhMzAwMF9lMDRfZHJpdmVyKTsKLWVycm9yX3VucmVnX2UwMjoKLQlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJnNjYTMwMDBfZTAyX2RyaXZlcik7Ci1lcnJvcl91bnJlZ19kMDE6Ci0Jc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZzY2EzMDAwX2QwMV9kcml2ZXIpOwotZXJyb3JfcmV0OgotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gc3BpX3JlZ2lzdGVyX2RyaXZlcigmc2NhMzAwMF9kcml2ZXIpOwogfQorbW9kdWxlX2luaXQoc2NhMzAwMF9pbml0KTsKIAogc3RhdGljIF9fZXhpdCB2b2lkIHNjYTMwMDBfZXhpdCh2b2lkKQogewotCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmc2NhMzAwMF9lMDVfZHJpdmVyKTsKLQlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJnNjYTMwMDBfZTA0X2RyaXZlcik7Ci0Jc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZzY2EzMDAwX2UwMl9kcml2ZXIpOwotCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmc2NhMzAwMF9kMDFfZHJpdmVyKTsKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJnNjYTMwMDBfZHJpdmVyKTsKIH0KLQotbW9kdWxlX2luaXQoc2NhMzAwMF9pbml0KTsKIG1vZHVsZV9leGl0KHNjYTMwMDBfZXhpdCk7CiAKIE1PRFVMRV9BVVRIT1IoIkpvbmF0aGFuIENhbWVyb24gPGppYzIzQGNhbS5hYy51az4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvc2NhMzAwMF9yaW5nLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL3NjYTMwMDBfcmluZy5jCmluZGV4IGE3MzBhNzYuLjdjNGZmMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvc2NhMzAwMF9yaW5nLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9zY2EzMDAwX3JpbmcuYwpAQCAtMTcsNiArMTcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogCiAjaW5jbHVkZSAiLi4vaWlvLmgiCiAjaW5jbHVkZSAiLi4vc3lzZnMuaCIKQEAgLTM0LDI2ICszNiw2MSBAQAogICogQ3VycmVudGx5IHNjYW4gZWxlbWVudHMgYXJlbid0IGNvbmZpZ3VyZWQgc28gaXQgZG9lc24ndCBtYXR0ZXIuCiAgKi8KIAorc3RhdGljIGludCBzY2EzMDAwX3JlYWRfZGF0YShzdHJ1Y3Qgc2NhMzAwMF9zdGF0ZSAqc3QsCisJCQkgICAgdWludDhfdCByZWdfYWRkcmVzc19oaWdoLAorCQkJICAgIHU4ICoqcnhfcCwKKwkJCSAgICBpbnQgbGVuKQoreworCWludCByZXQ7CisJc3RydWN0IHNwaV9tZXNzYWdlIG1zZzsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHhmZXJbMl0gPSB7CisJCXsKKwkJCS5sZW4gPSAxLAorCQkJLnR4X2J1ZiA9IHN0LT50eCwKKwkJfSwgeworCQkJLmxlbiA9IGxlbiwKKwkJfQorCX07CisJKnJ4X3AgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCpyeF9wID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJvcl9yZXQ7CisJfQorCXhmZXJbMV0ucnhfYnVmID0gKnJ4X3A7CisJc3QtPnR4WzBdID0gU0NBMzAwMF9SRUFEX1JFRyhyZWdfYWRkcmVzc19oaWdoKTsKKwlzcGlfbWVzc2FnZV9pbml0KCZtc2cpOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ4ZmVyWzBdLCAmbXNnKTsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlclsxXSwgJm1zZyk7CisJcmV0ID0gc3BpX3N5bmMoc3QtPnVzLCAmbXNnKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZ2V0X2RldmljZSgmc3QtPnVzLT5kZXYpLCAicHJvYmxlbSByZWFkaW5nIHJlZ2lzdGVyIik7CisJCWdvdG8gZXJyb3JfZnJlZV9yeDsKKwl9CisKKwlyZXR1cm4gMDsKK2Vycm9yX2ZyZWVfcng6CisJa2ZyZWUoKnJ4X3ApOworZXJyb3JfcmV0OgorCXJldHVybiByZXQ7Cit9CisKIC8qKgotICogc2NhMzAwMF9yaXBfaHdfcmIoKSAtIG1haW4gcmluZyBhY2Nlc3MgZnVuY3Rpb24sIHB1bGxzIGRhdGEgZnJvbSByaW5nCisgKiBzY2EzMDAwX3JlYWRfZmlyc3Rfbl9od19yYigpIC0gbWFpbiByaW5nIGFjY2VzcywgcHVsbHMgZGF0YSBmcm9tIHJpbmcKICAqIEByOgkJCXRoZSByaW5nCiAgKiBAY291bnQ6CQludW1iZXIgb2Ygc2FtcGxlcyB0byB0cnkgYW5kIHB1bGwKICAqIEBkYXRhOgkJb3V0cHV0IHRoZSBhY3R1YWwgc2FtcGxlcyBwdWxsZWQgZnJvbSB0aGUgaHcgcmluZwotICogQGRlYWRfb2Zmc2V0OgljaGVhdGluZyBhIGJpdCBoZXJlOiBTZXQgdG8gMSBzbyBhcyB0byBhbGxvdyBmb3IgdGhlCi0gKgkJCWxlYWRpbmcgYnl0ZSB1c2VkIGluIGJ1cyBjb21tcy4KICAqCiAgKiBDdXJyZW50bHkgZG9lcyBub3QgcHJvdmlkZSB0aW1lc3RhbXBzLiAgQXMgdGhlIGhhcmR3YXJlIGRvZXNuJ3QgYWRkIHRoZW0gdGhleQogICogY2FuIG9ubHkgYmUgaW5mZXJyZWQgYXBwcm94aW1hdGVseSBmcm9tIHJpbmcgYnVmZmVyIGV2ZW50cyBzdWNoIGFzIDUwJSBmdWxsCiAgKiBhbmQga25vd2xlZGdlIG9mIHdoZW4gYnVmZmVyIHdhcyBsYXN0IGVtcHRpZWQuICBUaGlzIGlzIGxlZnQgdG8gdXNlcnNwYWNlLgogICoqLwotc3RhdGljIGludCBzY2EzMDAwX3JpcF9od19yYihzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyLAotCQkJICAgICBzaXplX3QgY291bnQsIHU4ICoqZGF0YSwgaW50ICpkZWFkX29mZnNldCkKK3N0YXRpYyBpbnQgc2NhMzAwMF9yZWFkX2ZpcnN0X25faHdfcmIoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqciwKKwkJCQkgICAgICBzaXplX3QgY291bnQsIGNoYXIgX191c2VyICpidWYpCiB7CiAJc3RydWN0IGlpb19od19yaW5nX2J1ZmZlciAqaHdfcmluZyA9IGlpb190b19od19yaW5nX2J1ZihyKTsKIAlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gaHdfcmluZy0+cHJpdmF0ZTsKIAlzdHJ1Y3Qgc2NhMzAwMF9zdGF0ZSAqc3QgPSBpbmRpb19kZXYtPmRldl9kYXRhOwogCXU4ICpyeDsKLQlzMTYgKnNhbXBsZXM7CiAJaW50IHJldCwgaSwgbnVtX2F2YWlsYWJsZSwgbnVtX3JlYWQgPSAwOwogCWludCBieXRlc19wZXJfc2FtcGxlID0gMTsKIApAQCAtNjEsNDQgKzk4LDM4IEBACiAJCWJ5dGVzX3Blcl9zYW1wbGUgPSAyOwogCiAJbXV0ZXhfbG9jaygmc3QtPmxvY2spOwotCS8qIENoZWNrIGhvdyBtdWNoIGRhdGEgaXMgYXZhaWxhYmxlOgotCSAqIFJGQzogSW1wbGVtZW50IGFuIGlvY3RsIHRvIG5vdCBib3RoZXIgY2hlY2tpbmcgd2hldGhlciB0aGVyZQotCSAqIGlzIGVub3VnaCBkYXRhIGluIHRoZSByaW5nPyAgQWZ0ZXJhbGwsIGlmIHdlIGFyZSByZXNwb25kaW5nCi0JICogdG8gYW4gaW50ZXJydXB0IHdlIGhhdmUgYSBtaW5pbXVtIGNvbnRlbnQgZ3VhcmFudGVlZCBzbyBpdAotCSAqIHNlZW1zIHNsaWdodCBzaWxseSB0byB3YXN0ZSB0aW1lIGNoZWNraW5nIGl0IGlzIHRoZXJlLgotCSAqLwotCXJldCA9IHNjYTMwMDBfcmVhZF9kYXRhKHN0LAotCQkJCVNDQTMwMDBfUkVHX0FERFJfQlVGX0NPVU5ULAotCQkJCSZyeCwgMSk7CisJaWYgKGNvdW50ICUgYnl0ZXNfcGVyX3NhbXBsZSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycm9yX3JldDsKKwl9CisKKwlyZXQgPSBzY2EzMDAwX3JlYWRfZGF0YV9zaG9ydChzdCwgU0NBMzAwMF9SRUdfQUREUl9CVUZfQ09VTlQsIDEpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfcmV0OwogCWVsc2UKLQkJbnVtX2F2YWlsYWJsZSA9IHJ4WzFdOwotCS8qIG51bV9hdmFpbGFibGUgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBzYW1wbGVzIGF2YWlsYWJsZQorCQludW1fYXZhaWxhYmxlID0gc3QtPnJ4WzBdOworCS8qCisJICogbnVtX2F2YWlsYWJsZSBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIHNhbXBsZXMgYXZhaWxhYmxlCiAJICogaS5lLiBudW1iZXIgb2YgdGltZSBwb2ludHMgKiBudW1iZXIgb2YgY2hhbm5lbHMuCiAJICovCi0Ja2ZyZWUocngpOwogCWlmIChjb3VudCA+IG51bV9hdmFpbGFibGUgKiBieXRlc19wZXJfc2FtcGxlKQogCQludW1fcmVhZCA9IG51bV9hdmFpbGFibGUqYnl0ZXNfcGVyX3NhbXBsZTsKIAllbHNlCi0JCW51bV9yZWFkID0gY291bnQgLSAoY291bnQgJSAoYnl0ZXNfcGVyX3NhbXBsZSkpOworCQludW1fcmVhZCA9IGNvdW50OwogCi0JLyogQXZvaWQgdGhlIHJlYWQgcmVxdWVzdCBieXRlICovCi0JKmRlYWRfb2Zmc2V0ID0gMTsKIAlyZXQgPSBzY2EzMDAwX3JlYWRfZGF0YShzdCwKIAkJCQlTQ0EzMDAwX1JFR19BRERSX1JJTkdfT1VULAotCQkJCWRhdGEsIG51bV9yZWFkKTsKKwkJCQkmcngsIG51bV9yZWFkKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yX3JldDsKIAotCS8qIENvbnZlcnQgYnl0ZSBvcmRlciBhbmQgc2hpZnQgdG8gZGVmYXVsdCByZXNvbHV0aW9uICovCi0JaWYgKHN0LT5icHNlID09IDExKSB7Ci0JCXNhbXBsZXMgPSAoczE2KikoKmRhdGErMSk7Ci0JCWZvciAoaSA9IDA7IGkgPCAobnVtX3JlYWQvMik7IGkrKykgewotCQkJc2FtcGxlc1tpXSA9IGJlMTZfdG9fY3B1cCgKLQkJCQkJKF9fYmUxNiAqKSYoc2FtcGxlc1tpXSkpOwotCQkJc2FtcGxlc1tpXSA+Pj0gMzsKLQkJfQotCX0KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3JlYWQ7IGkrKykKKwkJKigoKHUxNiAqKXJ4KSArIGkpID0gYmUxNl90b19jcHVwKCh1MTYgKilyeCArIGkpOwogCisJaWYgKGNvcHlfdG9fdXNlcihidWYsIHJ4LCBudW1fcmVhZCkpCisJCXJldCA9IC1FRkFVTFQ7CisJa2ZyZWUocngpOworCXItPnN0dWZmdG9yZWFkID0gMDsKIGVycm9yX3JldDoKIAltdXRleF91bmxvY2soJnN0LT5sb2NrKTsKIApAQCAtMTI3LDYgKzE1OCw3NiBAQAogc3RhdGljIElJT19SSU5HX0xFTkdUSF9BVFRSOwogCiAvKioKKyAqIHNjYTMwMDBfcXVlcnlfcmluZ19pbnQoKSBpcyB0aGUgaGFyZHdhcmUgcmluZyBzdGF0dXMgaW50ZXJydXB0IGVuYWJsZWQKKyAqKi8KK3N0YXRpYyBzc2l6ZV90IHNjYTMwMDBfcXVlcnlfcmluZ19pbnQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7CisJaW50IHJldCwgdmFsOworCXN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gcmluZy0+aW5kaW9fZGV2OworCXN0cnVjdCBzY2EzMDAwX3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CisKKwltdXRleF9sb2NrKCZzdC0+bG9jayk7CisJcmV0ID0gc2NhMzAwMF9yZWFkX2RhdGFfc2hvcnQoc3QsIFNDQTMwMDBfUkVHX0FERFJfSU5UX01BU0ssIDEpOworCXZhbCA9IHN0LT5yeFswXTsKKwltdXRleF91bmxvY2soJnN0LT5sb2NrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsICEhKHZhbCAmIHRoaXNfYXR0ci0+YWRkcmVzcykpOworfQorCisvKioKKyAqIHNjYTMwMDBfc2V0X3JpbmdfaW50KCkgc2V0IHN0YXRlIG9mIHJpbmcgc3RhdHVzIGludGVycnVwdAorICoqLworc3RhdGljIHNzaXplX3Qgc2NhMzAwMF9zZXRfcmluZ19pbnQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCQkgICAgICBzaXplX3QgbGVuKQoreworCXN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gcmluZy0+aW5kaW9fZGV2OworCXN0cnVjdCBzY2EzMDAwX3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CisJc3RydWN0IGlpb19kZXZfYXR0ciAqdGhpc19hdHRyID0gdG9faWlvX2Rldl9hdHRyKGF0dHIpOworCWxvbmcgdmFsOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZzdC0+bG9jayk7CisJcmV0ID0gc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdmFsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yX3JldDsKKwlyZXQgPSBzY2EzMDAwX3JlYWRfZGF0YV9zaG9ydChzdCwgU0NBMzAwMF9SRUdfQUREUl9JTlRfTUFTSywgMSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcl9yZXQ7CisJaWYgKHZhbCkKKwkJcmV0ID0gc2NhMzAwMF93cml0ZV9yZWcoc3QsCisJCQkJCVNDQTMwMDBfUkVHX0FERFJfSU5UX01BU0ssCisJCQkJCXN0LT5yeFswXSB8IHRoaXNfYXR0ci0+YWRkcmVzcyk7CisJZWxzZQorCQlyZXQgPSBzY2EzMDAwX3dyaXRlX3JlZyhzdCwKKwkJCQkJU0NBMzAwMF9SRUdfQUREUl9JTlRfTUFTSywKKwkJCQkJc3QtPnJ4WzBdICYgfnRoaXNfYXR0ci0+YWRkcmVzcyk7CitlcnJvcl9yZXQ6CisJbXV0ZXhfdW5sb2NrKCZzdC0+bG9jayk7CisKKwlyZXR1cm4gcmV0ID8gcmV0IDogbGVuOworfQorCitzdGF0aWMgSUlPX0RFVklDRV9BVFRSKDUwX3BlcmNlbnQsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICAgc2NhMzAwMF9xdWVyeV9yaW5nX2ludCwKKwkJICAgICAgIHNjYTMwMDBfc2V0X3JpbmdfaW50LAorCQkgICAgICAgU0NBMzAwMF9JTlRfTUFTS19SSU5HX0hBTEYpOworCitzdGF0aWMgSUlPX0RFVklDRV9BVFRSKDc1X3BlcmNlbnQsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICAgc2NhMzAwMF9xdWVyeV9yaW5nX2ludCwKKwkJICAgICAgIHNjYTMwMDBfc2V0X3JpbmdfaW50LAorCQkgICAgICAgU0NBMzAwMF9JTlRfTUFTS19SSU5HX1RIUkVFX1FVQVJURVIpOworCisKKy8qKgogICogc2NhMzAwMF9zaG93X3JpbmdfYnBzZSgpIC1zeXNmcyBmdW5jdGlvbiB0byBxdWVyeSBiaXRzIHBlciBzYW1wbGUgZnJvbSByaW5nCiAgKiBAZGV2OiByaW5nIGJ1ZmZlciBkZXZpY2UKICAqIEBhdHRyOiB0aGlzIGRldmljZSBhdHRyaWJ1dGUKQEAgLTEzNywyMCArMjM4LDE4IEBACiAJCQkJICAgICAgY2hhciAqYnVmKQogewogCWludCBsZW4gPSAwLCByZXQ7Ci0JdTggKnJ4OwogCXN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gcmluZy0+aW5kaW9fZGV2OwogCXN0cnVjdCBzY2EzMDAwX3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CiAKIAltdXRleF9sb2NrKCZzdC0+bG9jayk7Ci0JcmV0ID0gc2NhMzAwMF9yZWFkX2RhdGEoc3QsIFNDQTMwMDBfUkVHX0FERFJfTU9ERSwgJnJ4LCAxKTsKKwlyZXQgPSBzY2EzMDAwX3JlYWRfZGF0YV9zaG9ydChzdCwgU0NBMzAwMF9SRUdfQUREUl9NT0RFLCAxKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycm9yX3JldDsKLQlpZiAocnhbMV0gJiBTQ0EzMDAwX1JJTkdfQlVGXzhCSVQpCisJaWYgKHN0LT5yeFswXSAmIFNDQTMwMDBfUklOR19CVUZfOEJJVCkKIAkJbGVuID0gc3ByaW50ZihidWYsICJzOC84XG4iKTsKIAllbHNlCiAJCWxlbiA9IHNwcmludGYoYnVmLCAiczExLzE2XG4iKTsKLQlrZnJlZShyeCk7CiBlcnJvcl9yZXQ6CiAJbXV0ZXhfdW5sb2NrKCZzdC0+bG9jayk7CiAKQEAgLTE3MywyMCArMjcyLDE5IEBACiAJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHJpbmctPmluZGlvX2RldjsKIAlzdHJ1Y3Qgc2NhMzAwMF9zdGF0ZSAqc3QgPSBpbmRpb19kZXYtPmRldl9kYXRhOwogCWludCByZXQ7Ci0JdTggKnJ4OwogCiAJbXV0ZXhfbG9jaygmc3QtPmxvY2spOwogCi0JcmV0ID0gc2NhMzAwMF9yZWFkX2RhdGEoc3QsIFNDQTMwMDBfUkVHX0FERFJfTU9ERSwgJnJ4LCAxKTsKKwlyZXQgPSBzY2EzMDAwX3JlYWRfZGF0YV9zaG9ydChzdCwgU0NBMzAwMF9SRUdfQUREUl9NT0RFLCAxKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycm9yX3JldDsKLQlpZiAoc3RybmNtcChidWYsICJzOC84IiwgNCkgPT0gMCkgeworCWlmIChzeXNmc19zdHJlcShidWYsICJzOC84IikpIHsKIAkJcmV0ID0gc2NhMzAwMF93cml0ZV9yZWcoc3QsIFNDQTMwMDBfUkVHX0FERFJfTU9ERSwKLQkJCQkJcnhbMV0gfCBTQ0EzMDAwX1JJTkdfQlVGXzhCSVQpOworCQkJCQlzdC0+cnhbMF0gfCBTQ0EzMDAwX1JJTkdfQlVGXzhCSVQpOwogCQlzdC0+YnBzZSA9IDg7Ci0JfSBlbHNlIGlmIChzdHJuY21wKGJ1ZiwgInMxMS8xNiIsIDUpID09IDApIHsKKwl9IGVsc2UgaWYgKHN5c2ZzX3N0cmVxKGJ1ZiwgInMxMS8xNiIpKSB7CiAJCXJldCA9IHNjYTMwMDBfd3JpdGVfcmVnKHN0LCBTQ0EzMDAwX1JFR19BRERSX01PREUsCi0JCQkJCXJ4WzFdICYgflNDQTMwMDBfUklOR19CVUZfOEJJVCk7CisJCQkJCXN0LT5yeFswXSAmIH5TQ0EzMDAwX1JJTkdfQlVGXzhCSVQpOwogCQlzdC0+YnBzZSA9IDExOwogCX0gZWxzZQogCQlyZXQgPSAtRUlOVkFMOwpAQCAtMTk2LDMzICsyOTQsMjMgQEAKIAlyZXR1cm4gcmV0ID8gcmV0IDogbGVuOwogfQogCi1zdGF0aWMgSUlPX1NDQU5fRUxfQyhhY2NlbF94LCAwLCAwLCBOVUxMKTsKLXN0YXRpYyBJSU9fU0NBTl9FTF9DKGFjY2VsX3ksIDEsIDAsIE5VTEwpOwotc3RhdGljIElJT19TQ0FOX0VMX0MoYWNjZWxfeiwgMiwgMCwgTlVMTCk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFIoYWNjZWxfdHlwZV9hdmFpbGFibGUsICJzOC84IHMxMS8xNiIpOwotc3RhdGljIElJT19ERVZJQ0VfQVRUUihhY2NlbF90eXBlLAotCQkgICAgICAgU19JUlVHTyB8IFNfSVdVU1IsCi0JCSAgICAgICBzY2EzMDAwX3Nob3dfcmluZ19icHNlLAotCQkgICAgICAgc2NhMzAwMF9zdG9yZV9yaW5nX2Jwc2UsCitzdGF0aWMgc3NpemVfdCBzY2EzMDAwX3Nob3dfYnVmZmVyX3NjYWxlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgY2hhciAqYnVmKQoreworCXN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gcmluZy0+aW5kaW9fZGV2OworCXN0cnVjdCBzY2EzMDAwX3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIwLiUwNmRcbiIsIDQqc3QtPmluZm8tPnNjYWxlKTsKK30KKworc3RhdGljIElJT19ERVZJQ0VfQVRUUihhY2NlbF9zY2FsZSwKKwkJICAgICAgIFNfSVJVR08sCisJCSAgICAgICBzY2EzMDAwX3Nob3dfYnVmZmVyX3NjYWxlLAorCQkgICAgICAgTlVMTCwKIAkJICAgICAgIDApOwogCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqc2NhMzAwMF9zY2FuX2VsX2F0dHJzW10gPSB7Ci0JJmlpb19zY2FuX2VsX2FjY2VsX3guZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfYWNjZWxfeF9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9hY2NlbF95LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2FjY2VsX3lfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfYWNjZWxfei5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9hY2NlbF96X2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2FjY2VsX3R5cGVfYXZhaWxhYmxlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9hY2NlbF90eXBlLmRldl9hdHRyLmF0dHIsCi0JTlVMTAotfTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgc2NhMzAwMF9zY2FuX2VsX2dyb3VwID0gewotCS5hdHRycyA9IHNjYTMwMDBfc2Nhbl9lbF9hdHRycywKLQkubmFtZSA9ICJzY2FuX2VsZW1lbnRzIiwKLX07Ci0KIC8qCiAgKiBSaW5nIGJ1ZmZlciBhdHRyaWJ1dGVzCiAgKiBUaGlzIGRldmljZSBpcyBhIGJpdCB1bnVzdWFsIGluIHRoYXQgdGhlIHNhbXBsaW5nIGZyZXF1ZW5jeSBhbmQgYnBzZQpAQCAtMjMzLDYgKzMyMSw5IEBACiAJJmRldl9hdHRyX2xlbmd0aC5hdHRyLAogCSZkZXZfYXR0cl9ieXRlc19wZXJfZGF0dW0uYXR0ciwKIAkmZGV2X2F0dHJfZW5hYmxlLmF0dHIsCisJJmlpb19kZXZfYXR0cl81MF9wZXJjZW50LmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl83NV9wZXJjZW50LmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9hY2NlbF9zY2FsZS5kZXZfYXR0ci5hdHRyLAogCU5VTEwsCiB9OwogCkBAIC0yNTgsMTEgKzM0OSwxMiBAQAogCXJpbmcgPSBremFsbG9jKHNpemVvZiAqcmluZywgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyaW5nKQogCQlyZXR1cm4gTlVMTDsKKwogCXJpbmctPnByaXZhdGUgPSBpbmRpb19kZXY7CiAJYnVmID0gJnJpbmctPmJ1ZjsKKwlidWYtPnN0dWZmdG9yZWFkID0gMDsKIAlpaW9fcmluZ19idWZmZXJfaW5pdChidWYsIGluZGlvX2Rldik7CiAJYnVmLT5kZXYudHlwZSA9ICZzY2EzMDAwX3JpbmdfdHlwZTsKLQlkZXZpY2VfaW5pdGlhbGl6ZSgmYnVmLT5kZXYpOwogCWJ1Zi0+ZGV2LnBhcmVudCA9ICZpbmRpb19kZXYtPmRldjsKIAlkZXZfc2V0X2RydmRhdGEoJmJ1Zi0+ZGV2LCAodm9pZCAqKWJ1Zik7CiAKQEAgLTI3NSw2ICszNjcsMTIgQEAKIAkJaWlvX3B1dF9yaW5nX2J1ZmZlcihyKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9fcmluZ19hY2Nlc3NfZnVuY3Mgc2NhMzAwMF9yaW5nX2FjY2Vzc19mdW5jcyA9IHsKKwkucmVhZF9maXJzdF9uID0gJnNjYTMwMDBfcmVhZF9maXJzdF9uX2h3X3JiLAorCS5nZXRfbGVuZ3RoID0gJnNjYTMwMDBfcmluZ19nZXRfbGVuZ3RoLAorCS5nZXRfYnl0ZXNfcGVyX2RhdHVtID0gJnNjYTMwMDBfcmluZ19nZXRfYnl0ZXNfcGVyX2RhdHVtLAorfTsKKwogaW50IHNjYTMwMDBfY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKIAlpbmRpb19kZXYtPnJpbmcgPSBzY2EzMDAwX3JiX2FsbG9jYXRlKGluZGlvX2Rldik7CkBAIC0yODIsMTAgKzM4MCwxMSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlpbmRpb19kZXYtPm1vZGVzIHw9IElORElPX1JJTkdfSEFSRFdBUkVfQlVGRkVSOwogCi0JaW5kaW9fZGV2LT5yaW5nLT5zY2FuX2VsX2F0dHJzID0gJnNjYTMwMDBfc2Nhbl9lbF9ncm91cDsKLQlpbmRpb19kZXYtPnJpbmctPmFjY2Vzcy5yaXBfbG90cyA9ICZzY2EzMDAwX3JpcF9od19yYjsKLQlpbmRpb19kZXYtPnJpbmctPmFjY2Vzcy5nZXRfbGVuZ3RoID0gJnNjYTMwMDBfcmluZ19nZXRfbGVuZ3RoOwotCWluZGlvX2Rldi0+cmluZy0+YWNjZXNzLmdldF9ieXRlc19wZXJfZGF0dW0gPSAmc2NhMzAwMF9yaW5nX2dldF9ieXRlc19wZXJfZGF0dW07CisJaW5kaW9fZGV2LT5yaW5nLT5hY2Nlc3MgPSAmc2NhMzAwMF9yaW5nX2FjY2Vzc19mdW5jczsKKworCWlpb19zY2FuX21hc2tfc2V0KGluZGlvX2Rldi0+cmluZywgMCk7CisJaWlvX3NjYW5fbWFza19zZXQoaW5kaW9fZGV2LT5yaW5nLCAxKTsKKwlpaW9fc2Nhbl9tYXNrX3NldChpbmRpb19kZXYtPnJpbmcsIDIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMDAsMjIgKzM5OSwyMCBAQAogewogCXN0cnVjdCBzY2EzMDAwX3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CiAJaW50IHJldDsKLQl1OCAqcng7CiAKIAltdXRleF9sb2NrKCZzdC0+bG9jayk7Ci0JcmV0ID0gc2NhMzAwMF9yZWFkX2RhdGEoc3QsIFNDQTMwMDBfUkVHX0FERFJfTU9ERSwgJnJ4LCAxKTsKKwlyZXQgPSBzY2EzMDAwX3JlYWRfZGF0YV9zaG9ydChzdCwgU0NBMzAwMF9SRUdfQUREUl9NT0RFLCAxKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycm9yX3JldDsKIAlpZiAoc3RhdGUpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAic3VwcG9zZWRseSBlbmFibGluZyByaW5nIGJ1ZmZlclxuIik7CiAJCXJldCA9IHNjYTMwMDBfd3JpdGVfcmVnKHN0LAogCQkJCQlTQ0EzMDAwX1JFR19BRERSX01PREUsCi0JCQkJCShyeFsxXSB8IFNDQTMwMDBfUklOR19CVUZfRU5BQkxFKSk7CisJCQkJCShzdC0+cnhbMF0gfCBTQ0EzMDAwX1JJTkdfQlVGX0VOQUJMRSkpOwogCX0gZWxzZQogCQlyZXQgPSBzY2EzMDAwX3dyaXRlX3JlZyhzdCwKIAkJCQkJU0NBMzAwMF9SRUdfQUREUl9NT0RFLAotCQkJCQkocnhbMV0gJiB+U0NBMzAwMF9SSU5HX0JVRl9FTkFCTEUpKTsKLQlrZnJlZShyeCk7CisJCQkJCShzdC0+cnhbMF0gJiB+U0NBMzAwMF9SSU5HX0JVRl9FTkFCTEUpKTsKIGVycm9yX3JldDoKIAltdXRleF91bmxvY2soJnN0LT5sb2NrKTsKIApAQCAtMzM4LDEwICs0MzUsMTQgQEAKIAlyZXR1cm4gX19zY2EzMDAwX2h3X3Jpbmdfc3RhdGVfc2V0KGluZGlvX2RldiwgMCk7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX3Jpbmdfc2V0dXBfb3BzIHNjYTMwMDBfcmluZ19zZXR1cF9vcHMgPSB7CisJLnByZWVuYWJsZSA9ICZzY2EzMDAwX2h3X3JpbmdfcHJlZW5hYmxlLAorCS5wb3N0ZGlzYWJsZSA9ICZzY2EzMDAwX2h3X3JpbmdfcG9zdGRpc2FibGUsCit9OworCiB2b2lkIHNjYTMwMDBfcmVnaXN0ZXJfcmluZ19mdW5jcyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQogewotCWluZGlvX2Rldi0+cmluZy0+cHJlZW5hYmxlID0gJnNjYTMwMDBfaHdfcmluZ19wcmVlbmFibGU7Ci0JaW5kaW9fZGV2LT5yaW5nLT5wb3N0ZGlzYWJsZSA9ICZzY2EzMDAwX2h3X3JpbmdfcG9zdGRpc2FibGU7CisJaW5kaW9fZGV2LT5yaW5nLT5zZXR1cF9vcHMgPSAmc2NhMzAwMF9yaW5nX3NldHVwX29wczsKIH0KIAogLyoqCkBAIC0zNTIsMTEgKzQ1Myw5IEBACiAgKiovCiB2b2lkIHNjYTMwMDBfcmluZ19pbnRfcHJvY2Vzcyh1OCB2YWwsIHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpCiB7Ci0JaWYgKHZhbCAmIFNDQTMwMDBfSU5UX1NUQVRVU19USFJFRV9RVUFSVEVSUykKLQkJaWlvX3B1c2hfb3JfZXNjYWxsYXRlX3JpbmdfZXZlbnQocmluZywKLQkJCQkJCSBJSU9fRVZFTlRfQ09ERV9SSU5HXzc1X0ZVTEwsCi0JCQkJCQkgMCk7Ci0JZWxzZSBpZiAodmFsICYgU0NBMzAwMF9JTlRfU1RBVFVTX0hBTEYpCi0JCWlpb19wdXNoX3JpbmdfZXZlbnQocmluZywKLQkJCQkgICAgSUlPX0VWRU5UX0NPREVfUklOR181MF9GVUxMLCAwKTsKKwlpZiAodmFsICYgKFNDQTMwMDBfSU5UX1NUQVRVU19USFJFRV9RVUFSVEVSUyB8CisJCSAgIFNDQTMwMDBfSU5UX1NUQVRVU19IQUxGKSkgeworCQlyaW5nLT5zdHVmZnRvcmVhZCA9IHRydWU7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcmluZy0+cG9sbHEpOworCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9LY29uZmlnCmluZGV4IDY2OTJhM2QuLjhjNzUxYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvS2NvbmZpZwpAQCAtMywzMCArMyw2IEBACiAjCiBjb21tZW50ICJBbmFsb2cgdG8gZGlnaXRhbCBjb252ZXJ0b3JzIgogCi1jb25maWcgTUFYMTM2MwotCXRyaXN0YXRlICJNQVhJTSBtYXgxMzYzIEFEQyBkcml2ZXIiCi0JZGVwZW5kcyBvbiBJMkMKLQlzZWxlY3QgSUlPX1RSSUdHRVIgaWYgSUlPX1JJTkdfQlVGRkVSCi0Jc2VsZWN0IE1BWDEzNjNfUklOR19CVUZGRVIKLQloZWxwCi0JICBTYXkgeWVzIGhlcmUgdG8gYnVpbGQgc3VwcG9ydCBmb3IgbWFueSBNQVhJTSBpMmMgYW5hbG9nIHRvIGRpZ2l0YWwKLQkgIGNvbnZlcnRvcnMgKEFEQykuIChtYXgxMzYxLCBtYXgxMzYyLCBtYXgxMzYzLCBtYXgxMzY0LCBtYXgxMDM2LAotCSAgbWF4MTAzNywgbWF4MTAzOCwgbWF4MTAzOSwgbWF4MTEzNiwgbWF4MTEzNiwgbWF4MTEzNywgbWF4MTEzOCwKLQkgIG1heDExMzksIG1heDEyMzYsIG1heDEyMzcsIG1heDExMjM4LCBtYXgxMjM5LCBtYXgxMTYwMCwgbWF4MTE2MDEsCi0JICBtYXgxMTYwMiwgbWF4MTE2MDMsIG1heDExNjA0LCBtYXgxMTYwNSwgbWF4MTE2MDYsIG1heDExNjA3LAotCSAgbWF4MTE2MDgsIG1heDExNjA5LCBtYXgxMTYxMCwgbWF4MTE2MTEsIG1heDExNjEyLCBtYXgxMTYxMywKLQkgIG1heDExNjE0LCBtYXgxMTYxNSwgbWF4MTE2MTYsIG1heDExNjE3KSBQcm92aWRlcyBkaXJlY3QgYWNjZXNzCi0JICB2aWEgc3lzZnMuCi0KLWNvbmZpZyBNQVgxMzYzX1JJTkdfQlVGRkVSCi0JYm9vbCAiTUFYSU0gbWF4MTM2MzogdXNlIHJpbmcgYnVmZmVyIgotCWRlcGVuZHMgb24gTUFYMTM2MwotCXNlbGVjdCBJSU9fUklOR19CVUZGRVIKLQlzZWxlY3QgSUlPX1NXX1JJTkcKLQloZWxwCi0JICBTYXkgeWVzIGhlcmUgdG8gaW5jbHVkZSByaW5nIGJ1ZmZlciBzdXBwb3J0IGluIHRoZSBNQVgxMzYzCi0JICBBREMgZHJpdmVyLgotCiBjb25maWcgQUQ3MTUwCiAJdHJpc3RhdGUgIkFuYWxvZyBEZXZpY2VzIGFkNzE1MC8xLzYgY2FwYWNpdGl2ZSBzZW5zb3IgZHJpdmVyIgogCWRlcGVuZHMgb24gSTJDCkBAIC0xNDIsNiArMTE4LDE4IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhZDc4ODcuCiAKK2NvbmZpZyBBRDc3ODAKKwl0cmlzdGF0ZSAiQW5hbG9nIERldmljZXMgQUQ3NzgwIEFENzc4MSBBREMgZHJpdmVyIgorCWRlcGVuZHMgb24gU1BJCisJZGVwZW5kcyBvbiBHUElPTElCCisJaGVscAorCSAgU2F5IHllcyBoZXJlIHRvIGJ1aWxkIHN1cHBvcnQgZm9yIEFuYWxvZyBEZXZpY2VzCisJICBBRDc3ODAgYW5kIEFENzc4MSBTUEkgYW5hbG9nIHRvIGRpZ2l0YWwgY29udmVydG9ycyAoQURDKS4KKwkgIElmIHVuc3VyZSwgc2F5IE4gKGJ1dCBpdCdzIHNhZmUgdG8gc2F5ICJZIikuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFkNzc4MC4KKwogY29uZmlnIEFENzc0NQogCXRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBBRDc3NDUsIEFENzc0NiBBRDc3NDcgY2FwYWNpdGl2ZSBzZW5zb3IgZHJpdmVyIgogCWRlcGVuZHMgb24gSTJDCkBAIC0xNzksMyArMTY3LDI3IEBACiAJaGVscAogCSAgU2F5IHllcyBoZXJlIHRvIGJ1aWxkIHN1cHBvcnQgZm9yIEFuYWxvZyBEZXZpY2VzIEFEVDc0MTAKIAkgIHRlbXBlcmF0dXJlIHNlbnNvcnMuCisKK2NvbmZpZyBNQVgxMzYzCisJdHJpc3RhdGUgIk1heGltIG1heDEzNjMgQURDIGRyaXZlciIKKwlkZXBlbmRzIG9uIEkyQworCXNlbGVjdCBJSU9fVFJJR0dFUiBpZiBJSU9fUklOR19CVUZGRVIKKwlzZWxlY3QgTUFYMTM2M19SSU5HX0JVRkZFUgorCWhlbHAKKwkgIFNheSB5ZXMgaGVyZSB0byBidWlsZCBzdXBwb3J0IGZvciBtYW55IE1heGltIGkyYyBhbmFsb2cgdG8gZGlnaXRhbAorCSAgY29udmVydG9ycyAoQURDKS4gKG1heDEzNjEsIG1heDEzNjIsIG1heDEzNjMsIG1heDEzNjQsIG1heDEwMzYsCisJICBtYXgxMDM3LCBtYXgxMDM4LCBtYXgxMDM5LCBtYXgxMTM2LCBtYXgxMTM2LCBtYXgxMTM3LCBtYXgxMTM4LAorCSAgbWF4MTEzOSwgbWF4MTIzNiwgbWF4MTIzNywgbWF4MTEyMzgsIG1heDEyMzksIG1heDExNjAwLCBtYXgxMTYwMSwKKwkgIG1heDExNjAyLCBtYXgxMTYwMywgbWF4MTE2MDQsIG1heDExNjA1LCBtYXgxMTYwNiwgbWF4MTE2MDcsCisJICBtYXgxMTYwOCwgbWF4MTE2MDksIG1heDExNjEwLCBtYXgxMTYxMSwgbWF4MTE2MTIsIG1heDExNjEzLAorCSAgbWF4MTE2MTQsIG1heDExNjE1LCBtYXgxMTYxNiwgbWF4MTE2MTcsIG1heDExNjQ0LCBtYXgxMTY0NSwKKwkgIG1heDExNjQ2LCBtYXgxMTY0NykgUHJvdmlkZXMgZGlyZWN0IGFjY2VzcyB2aWEgc3lzZnMuCisKK2NvbmZpZyBNQVgxMzYzX1JJTkdfQlVGRkVSCisJYm9vbCAiTWF4aW0gbWF4MTM2MzogdXNlIHJpbmcgYnVmZmVyIgorCWRlcGVuZHMgb24gTUFYMTM2MworCXNlbGVjdCBJSU9fUklOR19CVUZGRVIKKwlzZWxlY3QgSUlPX1NXX1JJTkcKKwloZWxwCisJICBTYXkgeWVzIGhlcmUgdG8gaW5jbHVkZSByaW5nIGJ1ZmZlciBzdXBwb3J0IGluIHRoZSBNQVgxMzYzCisJICBBREMgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9NYWtlZmlsZQppbmRleCAzMTA2N2RlLi4xZDliM2Y1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9NYWtlZmlsZQpAQCAtMzQsNiArMzQsNyBAQAogb2JqLSQoQ09ORklHX0FENzI5MSkgKz0gYWQ3MjkxLm8KIG9iai0kKENPTkZJR19BRDczMTQpICs9IGFkNzMxNC5vCiBvYmotJChDT05GSUdfQUQ3NzQ1KSArPSBhZDc3NDUubworb2JqLSQoQ09ORklHX0FENzc4MCkgKz0gYWQ3NzgwLm8KIG9iai0kKENPTkZJR19BRDc4MTYpICs9IGFkNzgxNi5vCiBvYmotJChDT05GSUdfQURUNzUpICs9IGFkdDc1Lm8KIG9iai0kKENPTkZJR19BRFQ3MzEwKSArPSBhZHQ3MzEwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzE1MC5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3MTUwLmMKaW5kZXggODU1NTc2Ni4uY2EzMmI2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3MTUwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3MTUwLmMKQEAgLTcsMTUgKzcsMTAgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9ydGMuaD4KIAogI2luY2x1ZGUgIi4uL2lpby5oIgogI2luY2x1ZGUgIi4uL3N5c2ZzLmgiCkBAIC02MywxMiArNTgsOSBAQAogICovCiAKIHN0cnVjdCBhZDcxNTBfY2hpcF9pbmZvIHsKLQljb25zdCBjaGFyICpuYW1lOwogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldjsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdGhyZXNoX3dvcms7CiAJYm9vbCBpbnRlcjsKLQlzNjQgbGFzdF90aW1lc3RhbXA7CiAJdTE2IGNoMV90aHJlc2hvbGQ7ICAgICAvKiBDaDEgVGhyZXNob2xkIChpbiBmaXhlZCB0aHJlc2hvbGQgbW9kZSkgKi8KIAl1OCAgY2gxX3NlbnNpdGl2aXR5OyAgIC8qIENoMSBTZW5zaXRpdml0eSAoaW4gYWRhcHRpdmUgdGhyZXNob2xkIG1vZGUpICovCiAJdTggIGNoMV90aW1lb3V0OyAgICAgICAvKiBDaDEgVGltZW91dCAoaW4gYWRhcHRpdmUgdGhyZXNob2xkIG1vZGUpICovCkBAIC04OCw3ICs4MCw4IEBACiAJdTggcmVnX2NmZzsKIH07CiAKLXN0cnVjdCBhZDcxNTBfY29udmVyc2lvbl9tb2RlIGFkNzE1MF9jb252X21vZGVfdGFibGVbQUQ3MTUwX01BWF9DT05WX01PREVdID0geworc3RhdGljIHN0cnVjdCBhZDcxNTBfY29udmVyc2lvbl9tb2RlCithZDcxNTBfY29udl9tb2RlX3RhYmxlW0FENzE1MF9NQVhfQ09OVl9NT0RFXSA9IHsKIAl7ICJpZGxlIiwgMCB9LAogCXsgImNvbnRpbnVvdXMtY29udmVyc2lvbiIsIDEgfSwKIAl7ICJzaW5nbGUtY29udmVyc2lvbiIsIDIgfSwKQEAgLTU5MCwxNyArNTgzLDYgQEAKIAkJYWQ3MTUwX3Nob3dfY2gyX3NldHVwLAogCQlhZDcxNTBfc3RvcmVfY2gyX3NldHVwKTsKIAotc3RhdGljIHNzaXplX3QgYWQ3MTUwX3Nob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljaGFyICpidWYpCi17Ci0Jc3RydWN0IGlpb19kZXYgKmRldl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGFkNzE1MF9jaGlwX2luZm8gKmNoaXAgPSBkZXZfaW5mby0+ZGV2X2RhdGE7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGNoaXAtPm5hbWUpOwotfQotCi1zdGF0aWMgSUlPX0RFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIGFkNzE1MF9zaG93X25hbWUsIE5VTEwsIDApOwotCiBzdGF0aWMgc3NpemVfdCBhZDcxNTBfc2hvd19wb3dlcmRvd25fdGltZXIoc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJY2hhciAqYnVmKQpAQCAtNjQ5LDcgKzYzMSw2IEBACiAJJmlpb19kZXZfYXR0cl9wb3dlcmRvd25fdGltZXIuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX2NoMV92YWx1ZS5kZXZfYXR0ci5hdHRyLAogCSZpaW9fZGV2X2F0dHJfY2gyX3ZhbHVlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9uYW1lLmRldl9hdHRyLmF0dHIsCiAJTlVMTCwKIH07CiAKQEAgLTY2MSw5NiArNjQyLDU3IEBACiAgKiB0aHJlc2hvbGQgZXZlbnRzCiAgKi8KIAotI2RlZmluZSBJSU9fRVZFTlRfQ09ERV9DSDFfSElHSCAgICBJSU9fQlVGRkVSX0VWRU5UX0NPREUoMCkKLSNkZWZpbmUgSUlPX0VWRU5UX0NPREVfQ0gxX0xPVyAgICAgSUlPX0JVRkZFUl9FVkVOVF9DT0RFKDEpCi0jZGVmaW5lIElJT19FVkVOVF9DT0RFX0NIMl9ISUdIICAgIElJT19CVUZGRVJfRVZFTlRfQ09ERSgyKQotI2RlZmluZSBJSU9fRVZFTlRfQ09ERV9DSDJfTE9XICAgICBJSU9fQlVGRkVSX0VWRU5UX0NPREUoMykKLQotI2RlZmluZSBJSU9fRVZFTlRfQVRUUl9DSDFfSElHSF9TSChfZXZsaXN0LCBfc2hvdywgX3N0b3JlLCBfbWFzaykJXAotCUlJT19FVkVOVF9BVFRSX1NIKGNoMV9oaWdoLCBfZXZsaXN0LCBfc2hvdywgX3N0b3JlLCBfbWFzaykKLQotI2RlZmluZSBJSU9fRVZFTlRfQVRUUl9DSDJfSElHSF9TSChfZXZsaXN0LCBfc2hvdywgX3N0b3JlLCBfbWFzaykJXAotCUlJT19FVkVOVF9BVFRSX1NIKGNoMl9oaWdoLCBfZXZsaXN0LCBfc2hvdywgX3N0b3JlLCBfbWFzaykKLQotI2RlZmluZSBJSU9fRVZFTlRfQVRUUl9DSDFfTE9XX1NIKF9ldmxpc3QsIF9zaG93LCBfc3RvcmUsIF9tYXNrKQlcCi0JSUlPX0VWRU5UX0FUVFJfU0goY2gxX2xvdywgX2V2bGlzdCwgX3Nob3csIF9zdG9yZSwgX21hc2spCi0KLSNkZWZpbmUgSUlPX0VWRU5UX0FUVFJfQ0gyX0xPV19TSChfZXZsaXN0LCBfc2hvdywgX3N0b3JlLCBfbWFzaykJXAotCUlJT19FVkVOVF9BVFRSX1NIKGNoMl9sb3csIF9ldmxpc3QsIF9zaG93LCBfc3RvcmUsIF9tYXNrKQotCi1zdGF0aWMgdm9pZCBhZDcxNTBfaW50ZXJydXB0X2hhbmRsZXJfYmgoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrX3MpCitzdGF0aWMgaXJxcmV0dXJuX3QgYWQ3MTUwX2V2ZW50X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqcHJpdmF0ZSkKIHsKLQlzdHJ1Y3QgYWQ3MTUwX2NoaXBfaW5mbyAqY2hpcCA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrX3MsIHN0cnVjdCBhZDcxNTBfY2hpcF9pbmZvLCB0aHJlc2hfd29yayk7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHByaXZhdGU7CisJc3RydWN0IGFkNzE1MF9jaGlwX2luZm8gKmNoaXAgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CiAJdTggaW50X3N0YXR1czsKLQotCWVuYWJsZV9pcnEoY2hpcC0+Y2xpZW50LT5pcnEpOworCXM2NCB0aW1lc3RhbXAgPSBpaW9fZ2V0X3RpbWVfbnMoKTsKIAogCWFkNzE1MF9pMmNfcmVhZChjaGlwLCBBRDcxNTBfU1RBVFVTLCAmaW50X3N0YXR1cywgMSk7CiAKIAlpZiAoKGludF9zdGF0dXMgJiBBRDcxNTBfU1RBVFVTX09VVDEpICYmICEoY2hpcC0+b2xkX3N0YXRlICYgQUQ3MTUwX1NUQVRVU19PVVQxKSkKLQkJaWlvX3B1c2hfZXZlbnQoY2hpcC0+aW5kaW9fZGV2LCAwLAotCQkJCUlJT19FVkVOVF9DT0RFX0NIMV9ISUdILAotCQkJCWNoaXAtPmxhc3RfdGltZXN0YW1wKTsKKwkJaWlvX3B1c2hfZXZlbnQoaW5kaW9fZGV2LCAwLAorCQkJICAgICAgIElJT19VTk1PRF9FVkVOVF9DT0RFKElJT19FVl9DTEFTU19JTiwKKwkJCQkJCSAgICAwLAorCQkJCQkJICAgIElJT19FVl9UWVBFX1RIUkVTSCwKKwkJCQkJCSAgICBJSU9fRVZfRElSX1JJU0lORyksCisJCQkJdGltZXN0YW1wKTsKIAllbHNlIGlmICgoIShpbnRfc3RhdHVzICYgQUQ3MTUwX1NUQVRVU19PVVQxKSkgJiYgKGNoaXAtPm9sZF9zdGF0ZSAmIEFENzE1MF9TVEFUVVNfT1VUMSkpCi0JCWlpb19wdXNoX2V2ZW50KGNoaXAtPmluZGlvX2RldiwgMCwKLQkJCQlJSU9fRVZFTlRfQ09ERV9DSDFfTE9XLAotCQkJCWNoaXAtPmxhc3RfdGltZXN0YW1wKTsKKwkJaWlvX3B1c2hfZXZlbnQoaW5kaW9fZGV2LCAwLAorCQkJICAgICAgIElJT19VTk1PRF9FVkVOVF9DT0RFKElJT19FVl9DTEFTU19JTiwKKwkJCQkJCSAgICAwLAorCQkJCQkJICAgIElJT19FVl9UWVBFX1RIUkVTSCwKKwkJCQkJCSAgICBJSU9fRVZfRElSX0ZBTExJTkcpLAorCQkJICAgICAgIHRpbWVzdGFtcCk7CiAKIAlpZiAoKGludF9zdGF0dXMgJiBBRDcxNTBfU1RBVFVTX09VVDIpICYmICEoY2hpcC0+b2xkX3N0YXRlICYgQUQ3MTUwX1NUQVRVU19PVVQyKSkKLQkJaWlvX3B1c2hfZXZlbnQoY2hpcC0+aW5kaW9fZGV2LCAwLAotCQkJCUlJT19FVkVOVF9DT0RFX0NIMl9ISUdILAotCQkJCWNoaXAtPmxhc3RfdGltZXN0YW1wKTsKKwkJaWlvX3B1c2hfZXZlbnQoaW5kaW9fZGV2LCAwLAorCQkJICAgICAgIElJT19VTk1PRF9FVkVOVF9DT0RFKElJT19FVl9DTEFTU19JTiwKKwkJCQkJCSAgICAxLAorCQkJCQkJICAgIElJT19FVl9UWVBFX1RIUkVTSCwKKwkJCQkJCSAgICBJSU9fRVZfRElSX1JJU0lORyksCisJCQkgICAgICAgdGltZXN0YW1wKTsKIAllbHNlIGlmICgoIShpbnRfc3RhdHVzICYgQUQ3MTUwX1NUQVRVU19PVVQyKSkgJiYgKGNoaXAtPm9sZF9zdGF0ZSAmIEFENzE1MF9TVEFUVVNfT1VUMikpCi0JCWlpb19wdXNoX2V2ZW50KGNoaXAtPmluZGlvX2RldiwgMCwKLQkJCQlJSU9fRVZFTlRfQ09ERV9DSDJfTE9XLAotCQkJCWNoaXAtPmxhc3RfdGltZXN0YW1wKTsKKwkJaWlvX3B1c2hfZXZlbnQoaW5kaW9fZGV2LCAwLAorCQkJICAgICAgIElJT19VTk1PRF9FVkVOVF9DT0RFKElJT19FVl9DTEFTU19JTiwKKwkJCQkJCSAgICAxLAorCQkJCQkJICAgIElJT19FVl9UWVBFX1RIUkVTSCwKKwkJCQkJCSAgICBJSU9fRVZfRElSX0ZBTExJTkcpLAorCQkJICAgICAgIHRpbWVzdGFtcCk7CisJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaW50IGFkNzE1MF9pbnRlcnJ1cHRfaGFuZGxlcl90aChzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8sCi0JCWludCBpbmRleCwKLQkJczY0IHRpbWVzdGFtcCwKLQkJaW50IG5vX3Rlc3QpCi17Ci0Jc3RydWN0IGFkNzE1MF9jaGlwX2luZm8gKmNoaXAgPSBkZXZfaW5mby0+ZGV2X2RhdGE7Ci0KLQljaGlwLT5sYXN0X3RpbWVzdGFtcCA9IHRpbWVzdGFtcDsKLQlzY2hlZHVsZV93b3JrKCZjaGlwLT50aHJlc2hfd29yayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotSUlPX0VWRU5UX1NIKHRocmVzaG9sZCwgJmFkNzE1MF9pbnRlcnJ1cHRfaGFuZGxlcl90aCk7Ci0KLXN0YXRpYyBzc2l6ZV90IGFkNzE1MF9xdWVyeV9vdXRfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljaGFyICpidWYpCi17Ci0JLyoKLQkgKiBBRDcxNTAgcHJvdmlkZXMgdHdvIGxvZ2ljIG91dHB1dCBjaGFubmVscywgd2hpY2ggY2FuIGJlIHVzZWQgYXMgaW50ZXJydXB0Ci0JICogYnV0IHRoZSBwaW5zIGFyZSBub3QgY29uZmlndXJhYmxlCi0JICovCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiMVxuIik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGFkNzE1MF9zZXRfb3V0X21vZGUoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY29uc3QgY2hhciAqYnVmLAotCQlzaXplX3QgbGVuKQotewotCXJldHVybiBsZW47Ci19Ci0KLUlJT19FVkVOVF9BVFRSX0NIMV9ISUdIX1NIKGlpb19ldmVudF90aHJlc2hvbGQsIGFkNzE1MF9xdWVyeV9vdXRfbW9kZSwgYWQ3MTUwX3NldF9vdXRfbW9kZSwgMCk7Ci1JSU9fRVZFTlRfQVRUUl9DSDJfSElHSF9TSChpaW9fZXZlbnRfdGhyZXNob2xkLCBhZDcxNTBfcXVlcnlfb3V0X21vZGUsIGFkNzE1MF9zZXRfb3V0X21vZGUsIDApOwotSUlPX0VWRU5UX0FUVFJfQ0gxX0xPV19TSChpaW9fZXZlbnRfdGhyZXNob2xkLCBhZDcxNTBfcXVlcnlfb3V0X21vZGUsIGFkNzE1MF9zZXRfb3V0X21vZGUsIDApOwotSUlPX0VWRU5UX0FUVFJfQ0gyX0xPV19TSChpaW9fZXZlbnRfdGhyZXNob2xkLCBhZDcxNTBfcXVlcnlfb3V0X21vZGUsIGFkNzE1MF9zZXRfb3V0X21vZGUsIDApOworc3RhdGljIElJT19DT05TVF9BVFRSKGNoMV9oaWdoX2VuLCAiMSIpOworc3RhdGljIElJT19DT05TVF9BVFRSKGNoMl9oaWdoX2VuLCAiMSIpOworc3RhdGljIElJT19DT05TVF9BVFRSKGNoMV9sb3dfZW4sICIxIik7CitzdGF0aWMgSUlPX0NPTlNUX0FUVFIoY2gyX2xvd19lbiwgIjEiKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkNzE1MF9ldmVudF9hdHRyaWJ1dGVzW10gPSB7Ci0JJmlpb19ldmVudF9hdHRyX2NoMV9oaWdoLmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX2NoMl9oaWdoLmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX2NoMV9sb3cuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfY2gyX2xvdy5kZXZfYXR0ci5hdHRyLAorCSZpaW9fY29uc3RfYXR0cl9jaDFfaGlnaF9lbi5kZXZfYXR0ci5hdHRyLAorCSZpaW9fY29uc3RfYXR0cl9jaDJfaGlnaF9lbi5kZXZfYXR0ci5hdHRyLAorCSZpaW9fY29uc3RfYXR0cl9jaDFfbG93X2VuLmRldl9hdHRyLmF0dHIsCisJJmlpb19jb25zdF9hdHRyX2NoMl9sb3dfZW4uZGV2X2F0dHIuYXR0ciwKIAlOVUxMLAogfTsKIApAQCAtNzU4LDYgKzcwMCwxMiBAQAogCS5hdHRycyA9IGFkNzE1MF9ldmVudF9hdHRyaWJ1dGVzLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9faW5mbyBhZDcxNTBfaW5mbyA9IHsKKwkuYXR0cnMgPSAmYWQ3MTUwX2F0dHJpYnV0ZV9ncm91cCwKKwkubnVtX2ludGVycnVwdF9saW5lcyA9IDEsCisJLmV2ZW50X2F0dHJzID0gJmFkNzE1MF9ldmVudF9hdHRyaWJ1dGVfZ3JvdXAsCisJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRSwKK307CiAvKgogICogZGV2aWNlIHByb2JlIGFuZCByZW1vdmUKICAqLwpAQCAtNzc2LDIxICs3MjQsMjAgQEAKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBjaGlwKTsKIAogCWNoaXAtPmNsaWVudCA9IGNsaWVudDsKLQljaGlwLT5uYW1lID0gaWQtPm5hbWU7CiAKLQljaGlwLT5pbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKCk7CisJY2hpcC0+aW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgwKTsKIAlpZiAoY2hpcC0+aW5kaW9fZGV2ID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9mcmVlX2NoaXA7CiAJfQogCi0JLyogRWNoaXBhYmlsaXNoIHRoYXQgdGhlIGlpb19kZXYgaXMgYSBjaGlsZCBvZiB0aGUgaTJjIGRldmljZSAqLworCS8qIEVzdGFibGlzaCB0aGF0IHRoZSBpaW9fZGV2IGlzIGEgY2hpbGQgb2YgdGhlIGkyYyBkZXZpY2UgKi8KKwljaGlwLT5pbmRpb19kZXYtPm5hbWUgPSBpZC0+bmFtZTsKIAljaGlwLT5pbmRpb19kZXYtPmRldi5wYXJlbnQgPSAmY2xpZW50LT5kZXY7Ci0JY2hpcC0+aW5kaW9fZGV2LT5hdHRycyA9ICZhZDcxNTBfYXR0cmlidXRlX2dyb3VwOwotCWNoaXAtPmluZGlvX2Rldi0+ZXZlbnRfYXR0cnMgPSAmYWQ3MTUwX2V2ZW50X2F0dHJpYnV0ZV9ncm91cDsKKworCWNoaXAtPmluZGlvX2Rldi0+aW5mbyA9ICZhZDcxNTBfaW5mbzsKIAljaGlwLT5pbmRpb19kZXYtPmRldl9kYXRhID0gKHZvaWQgKikoY2hpcCk7Ci0JY2hpcC0+aW5kaW9fZGV2LT5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEU7Ci0JY2hpcC0+aW5kaW9fZGV2LT5udW1faW50ZXJydXB0X2xpbmVzID0gMTsKKwogCWNoaXAtPmluZGlvX2Rldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1RfTU9ERTsKIAogCXJldCA9IGlpb19kZXZpY2VfcmVnaXN0ZXIoY2hpcC0+aW5kaW9fZGV2KTsKQEAgLTc5OCwxOSArNzQ1LDE2IEBACiAJCWdvdG8gZXJyb3JfZnJlZV9kZXY7CiAJcmVnZG9uZSA9IDE7CiAKLQlpZiAoY2xpZW50LT5pcnEgJiYgZ3Bpb19pc192YWxpZChpcnFfdG9fZ3BpbyhjbGllbnQtPmlycSkpID4gMCkgewotCQlyZXQgPSBpaW9fcmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoY2xpZW50LT5pcnEsCi0JCQkJY2hpcC0+aW5kaW9fZGV2LAotCQkJCTAsCi0JCQkJSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAotCQkJCSJhZDcxNTAiKTsKKwlpZiAoY2xpZW50LT5pcnEpIHsKKwkJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoY2xpZW50LT5pcnEsCisJCQkJCSAgIE5VTEwsCisJCQkJCSAgICZhZDcxNTBfZXZlbnRfaGFuZGxlciwKKwkJCQkJICAgSVJRRl9UUklHR0VSX1JJU0lORyB8CisJCQkJCSAgIElSUUZfVFJJR0dFUl9GQUxMSU5HLAorCQkJCQkgICAiYWQ3MTUwIiwKKwkJCQkJICAgY2hpcC0+aW5kaW9fZGV2KTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyb3JfZnJlZV9kZXY7Ci0KLQkJaWlvX2FkZF9ldmVudF90b19saXN0KGlpb19ldmVudF9hdHRyX2NoMl9sb3cubGlzdGVsLAotCQkJCSZjaGlwLT5pbmRpb19kZXYtPmludGVycnVwdHNbMF0tPmV2X2xpc3QpOwotCi0JCUlOSVRfV09SSygmY2hpcC0+dGhyZXNoX3dvcmssIGFkNzE1MF9pbnRlcnJ1cHRfaGFuZGxlcl9iaCk7CiAJfQogCiAJZGV2X2VycigmY2xpZW50LT5kZXYsICIlcyBjYXBhY2l0aXZlIHNlbnNvciByZWdpc3RlcmVkLCBpcnE6ICVkXG4iLCBpZC0+bmFtZSwgY2xpZW50LT5pcnEpOwpAQCAtODMzLDggKzc3Nyw4IEBACiAJc3RydWN0IGFkNzE1MF9jaGlwX2luZm8gKmNoaXAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gY2hpcC0+aW5kaW9fZGV2OwogCi0JaWYgKGNsaWVudC0+aXJxICYmIGdwaW9faXNfdmFsaWQoaXJxX3RvX2dwaW8oY2xpZW50LT5pcnEpKSA+IDApCi0JCWlpb191bnJlZ2lzdGVyX2ludGVycnVwdF9saW5lKGluZGlvX2RldiwgMCk7CisJaWYgKGNsaWVudC0+aXJxKQorCQlmcmVlX2lycShjbGllbnQtPmlycSwgaW5kaW9fZGV2KTsKIAlpaW9fZGV2aWNlX3VucmVnaXN0ZXIoaW5kaW9fZGV2KTsKIAlrZnJlZShjaGlwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3MTUyLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDcxNTIuYwppbmRleCBmYTdmODQwNi4uN2EzOGJjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3MTUyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3MTUyLmMKQEAgLTcsMTUgKzcsMTEgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9ydGMuaD4KIAogI2luY2x1ZGUgIi4uL2lpby5oIgogI2luY2x1ZGUgIi4uL3N5c2ZzLmgiCkBAIC01NCw3ICs1MCw2IEBACiAgKi8KIAogc3RydWN0IGFkNzE1Ml9jaGlwX2luZm8gewotCWNvbnN0IGNoYXIgKm5hbWU7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2OwogCXUxNiBjaDFfb2Zmc2V0OyAgICAgLyogQ2hhbm5lbCAxIG9mZnNldCBjYWxpYnJhdGlvbiBjb2VmZmljaWVudCAqLwpAQCAtNzIsNyArNjcsOCBAQAogCXU4IHJlZ19jZmc7CiB9OwogCi1zdHJ1Y3QgYWQ3MTUyX2NvbnZlcnNpb25fbW9kZSBhZDcxNTJfY29udl9tb2RlX3RhYmxlW0FENzE1Ml9NQVhfQ09OVl9NT0RFXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgYWQ3MTUyX2NvbnZlcnNpb25fbW9kZQorYWQ3MTUyX2NvbnZfbW9kZV90YWJsZVtBRDcxNTJfTUFYX0NPTlZfTU9ERV0gPSB7CiAJeyAiaWRsZSIsIDAgfSwKIAl7ICJjb250aW51b3VzLWNvbnZlcnNpb24iLCAxIH0sCiAJeyAic2luZ2xlLWNvbnZlcnNpb24iLCAyIH0sCkBAIC00ODIsMTcgKzQ3OCw2IEBACiAJCWFkNzE1Ml9zaG93X2ZpbHRlcl9yYXRlX3NldHVwLAogCQlhZDcxNTJfc3RvcmVfZmlsdGVyX3JhdGVfc2V0dXApOwogCi1zdGF0aWMgc3NpemVfdCBhZDcxNTJfc2hvd19uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgYWQ3MTUyX2NoaXBfaW5mbyAqY2hpcCA9IGRldl9pbmZvLT5kZXZfZGF0YTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgY2hpcC0+bmFtZSk7Ci19Ci0KLXN0YXRpYyBJSU9fREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgYWQ3MTUyX3Nob3dfbmFtZSwgTlVMTCwgMCk7Ci0KIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZDcxNTJfYXR0cmlidXRlc1tdID0gewogCSZpaW9fZGV2X2F0dHJfYXZhaWxhYmxlX2NvbnZlcnNpb25fbW9kZXMuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX2NvbnZlcnNpb25fbW9kZS5kZXZfYXR0ci5hdHRyLApAQCAtNTA1LDcgKzQ5MCw2IEBACiAJJmlpb19kZXZfYXR0cl9jaDFfc2V0dXAuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX2NoMl9zZXR1cC5kZXZfYXR0ci5hdHRyLAogCSZpaW9fZGV2X2F0dHJfZmlsdGVyX3JhdGVfc2V0dXAuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX25hbWUuZGV2X2F0dHIuYXR0ciwKIAlOVUxMLAogfTsKIApAQCAtNTEzLDYgKzQ5NywxMCBAQAogCS5hdHRycyA9IGFkNzE1Ml9hdHRyaWJ1dGVzLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9faW5mbyBhZDcxNTJfaW5mbyA9IHsKKwkuYXR0cnMgPSAmYWQ3MTUyX2F0dHJpYnV0ZV9ncm91cCwKKwkuZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFLAorfTsKIC8qCiAgKiBkZXZpY2UgcHJvYmUgYW5kIHJlbW92ZQogICovCkBAIC01MzEsMTkgKzUxOSwxOCBAQAogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGNoaXApOwogCiAJY2hpcC0+Y2xpZW50ID0gY2xpZW50OwotCWNoaXAtPm5hbWUgPSBpZC0+bmFtZTsKIAotCWNoaXAtPmluZGlvX2RldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2UoKTsKKwljaGlwLT5pbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKDApOwogCWlmIChjaGlwLT5pbmRpb19kZXYgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX2ZyZWVfY2hpcDsKIAl9CiAKIAkvKiBFY2hpcGFiaWxpc2ggdGhhdCB0aGUgaWlvX2RldiBpcyBhIGNoaWxkIG9mIHRoZSBpMmMgZGV2aWNlICovCisJY2hpcC0+aW5kaW9fZGV2LT5uYW1lID0gaWQtPm5hbWU7CiAJY2hpcC0+aW5kaW9fZGV2LT5kZXYucGFyZW50ID0gJmNsaWVudC0+ZGV2OwotCWNoaXAtPmluZGlvX2Rldi0+YXR0cnMgPSAmYWQ3MTUyX2F0dHJpYnV0ZV9ncm91cDsKKwljaGlwLT5pbmRpb19kZXYtPmluZm8gPSAmYWQ3MTUyX2luZm87CiAJY2hpcC0+aW5kaW9fZGV2LT5kZXZfZGF0YSA9ICh2b2lkICopKGNoaXApOwotCWNoaXAtPmluZGlvX2Rldi0+ZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFOwogCWNoaXAtPmluZGlvX2Rldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1RfTU9ERTsKIAogCXJldCA9IGlpb19kZXZpY2VfcmVnaXN0ZXIoY2hpcC0+aW5kaW9fZGV2KTsKQEAgLTU2Nyw4ICs1NTQsNiBAQAogCXN0cnVjdCBhZDcxNTJfY2hpcF9pbmZvICpjaGlwID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGNoaXAtPmluZGlvX2RldjsKIAotCWlmIChjbGllbnQtPmlycSAmJiBncGlvX2lzX3ZhbGlkKGlycV90b19ncGlvKGNsaWVudC0+aXJxKSkgPiAwKQotCQlpaW9fdW5yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShpbmRpb19kZXYsIDApOwogCWlpb19kZXZpY2VfdW5yZWdpc3RlcihpbmRpb19kZXYpOwogCWtmcmVlKGNoaXApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDcyOTEuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzI5MS5jCmluZGV4IDM0MDQxYTcuLjFiZTM0NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzI5MS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzI5MS5jCkBAIC04LDE0ICs4LDEyIEBACiAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgogCiAjaW5jbHVkZSAiLi4vaWlvLmgiCiAjaW5jbHVkZSAiLi4vc3lzZnMuaCIKQEAgLTYyLDExICs2MCw4IEBACiAgKi8KIAogc3RydWN0IGFkNzI5MV9jaGlwX2luZm8gewotCWNvbnN0IGNoYXIgKm5hbWU7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2OwotCXN0cnVjdCB3b3JrX3N0cnVjdCB0aHJlc2hfd29yazsKLQlzNjQgbGFzdF90aW1lc3RhbXA7CiAJdTE2IGNvbW1hbmQ7CiAJdTggIGNoYW5uZWxzOwkvKiBBY3RpdmUgdm9sdGFnZSBjaGFubmVscyAqLwogfTsKQEAgLTQzOCwxNyArNDMzLDYgQEAKIAkJYWQ3MjkxX3N0b3JlX2NoYW5uZWxfbWFzaywKIAkJMCk7CiAKLXN0YXRpYyBzc2l6ZV90IGFkNzI5MV9zaG93X25hbWUoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY2hhciAqYnVmKQotewotCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBhZDcyOTFfY2hpcF9pbmZvICpjaGlwID0gZGV2X2luZm8tPmRldl9kYXRhOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBjaGlwLT5uYW1lKTsKLX0KLQotc3RhdGljIElJT19ERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBhZDcyOTFfc2hvd19uYW1lLCBOVUxMLCAwKTsKLQogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkNzI5MV9hdHRyaWJ1dGVzW10gPSB7CiAJJmlpb19kZXZfYXR0cl9hdmFpbGFibGVfbW9kZXMuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX21vZGUuZGV2X2F0dHIuYXR0ciwKQEAgLTQ1OSw3ICs0NDMsNiBAQAogCSZpaW9fZGV2X2F0dHJfdF9hdmVyYWdlLmRldl9hdHRyLmF0dHIsCiAJJmlpb19kZXZfYXR0cl92b2x0YWdlLmRldl9hdHRyLmF0dHIsCiAJJmlpb19kZXZfYXR0cl9jaGFubmVsX21hc2suZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX25hbWUuZGV2X2F0dHIuYXR0ciwKIAlOVUxMLAogfTsKIApAQCAtNDcxLDI4ICs0NTQsMjMgQEAKICAqIHRlbXBlcmF0dXJlIGJvdW5kIGV2ZW50cwogICovCiAKLSNkZWZpbmUgSUlPX0VWRU5UX0NPREVfQUQ3MjkxX1RfU0VOU0VfSElHSCAgSUlPX0JVRkZFUl9FVkVOVF9DT0RFKDApCi0jZGVmaW5lIElJT19FVkVOVF9DT0RFX0FENzI5MV9UX1NFTlNFX0xPVyAgIElJT19CVUZGRVJfRVZFTlRfQ09ERSgxKQotI2RlZmluZSBJSU9fRVZFTlRfQ09ERV9BRDcyOTFfVF9BVkdfSElHSCAgICBJSU9fQlVGRkVSX0VWRU5UX0NPREUoMikKLSNkZWZpbmUgSUlPX0VWRU5UX0NPREVfQUQ3MjkxX1RfQVZHX0xPVyAgICAgSUlPX0JVRkZFUl9FVkVOVF9DT0RFKDMpCi0jZGVmaW5lIElJT19FVkVOVF9DT0RFX0FENzI5MV9WT0xUQUdFX0JBU0UgIElJT19CVUZGRVJfRVZFTlRfQ09ERSg0KQotCi1zdGF0aWMgdm9pZCBhZDcyOTFfaW50ZXJydXB0X2JoKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29ya19zKQorc3RhdGljIGlycXJldHVybl90IGFkNzI5MV9ldmVudF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKnByaXZhdGUpCiB7Ci0Jc3RydWN0IGFkNzI5MV9jaGlwX2luZm8gKmNoaXAgPQotCQljb250YWluZXJfb2Yod29ya19zLCBzdHJ1Y3QgYWQ3MjkxX2NoaXBfaW5mbywgdGhyZXNoX3dvcmspOworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBwcml2YXRlOworCXN0cnVjdCBhZDcyOTFfY2hpcF9pbmZvICpjaGlwID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShwcml2YXRlKTsKIAl1MTYgdF9zdGF0dXMsIHZfc3RhdHVzOwogCXUxNiBjb21tYW5kOwogCWludCBpOworCXM2NCB0aW1lc3RhbXAgPSBpaW9fZ2V0X3RpbWVfbnMoKTsKIAogCWlmIChhZDcyOTFfaTJjX3JlYWQoY2hpcCwgQUQ3MjkxX1RfQUxFUlRfU1RBVFVTLCAmdF9zdGF0dXMpKQotCQlyZXR1cm47CisJCXJldHVybiBJUlFfSEFORExFRDsKIAogCWlmIChhZDcyOTFfaTJjX3JlYWQoY2hpcCwgQUQ3MjkxX1ZPTFRBR0VfQUxFUlRfU1RBVFVTLCAmdl9zdGF0dXMpKQotCQlyZXR1cm47CisJCXJldHVybiBJUlFfSEFORExFRDsKIAogCWlmICghKHRfc3RhdHVzIHx8IHZfc3RhdHVzKSkKLQkJcmV0dXJuOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAKIAljb21tYW5kID0gY2hpcC0+Y29tbWFuZCB8IEFENzI5MV9BTEFSVF9DTEVBUjsKIAlhZDcyOTFfaTJjX3dyaXRlKGNoaXAsIEFENzI5MV9DT01NQU5ELCBjb21tYW5kKTsKQEAgLTUwMCw1MCArNDc4LDY3IEBACiAJY29tbWFuZCA9IGNoaXAtPmNvbW1hbmQgJiB+QUQ3MjkxX0FMQVJUX0NMRUFSOwogCWFkNzI5MV9pMmNfd3JpdGUoY2hpcCwgQUQ3MjkxX0NPTU1BTkQsIGNvbW1hbmQpOwogCi0JZW5hYmxlX2lycShjaGlwLT5jbGllbnQtPmlycSk7CisJaWYgKHRfc3RhdHVzICYgKDEgPDwgMCkpCisJCWlpb19wdXNoX2V2ZW50KGluZGlvX2RldiwgMCwKKwkJCSAgICAgICBJSU9fVU5NT0RfRVZFTlRfQ09ERShJSU9fVEVNUCwKKwkJCQkJCSAgICAwLAorCQkJCQkJICAgIElJT19FVl9UWVBFX1RIUkVTSCwKKwkJCQkJCSAgICBJSU9fRVZfRElSX0ZBTExJTkcpLAorCQkJICAgICAgIHRpbWVzdGFtcCk7CisJaWYgKHRfc3RhdHVzICYgKDEgPDwgMSkpCisJCWlpb19wdXNoX2V2ZW50KGluZGlvX2RldiwgMCwKKwkJCSAgICAgICBJSU9fVU5NT0RfRVZFTlRfQ09ERShJSU9fVEVNUCwKKwkJCQkJCSAgICAwLAorCQkJCQkJICAgIElJT19FVl9UWVBFX1RIUkVTSCwKKwkJCQkJCSAgICBJSU9fRVZfRElSX1JJU0lORyksCisJCQkgICAgICAgdGltZXN0YW1wKTsKKwlpZiAodF9zdGF0dXMgJiAoMSA8PCAyKSkKKwkJaWlvX3B1c2hfZXZlbnQoaW5kaW9fZGV2LCAwLAorCQkJICAgICAgIElJT19VTk1PRF9FVkVOVF9DT0RFKElJT19URU1QLAorCQkJCQkJICAgIDAsCisJCQkJCQkgICAgSUlPX0VWX1RZUEVfVEhSRVNILAorCQkJCQkJICAgIElJT19FVl9ESVJfRkFMTElORyksCisJCQkgICAgICAgdGltZXN0YW1wKTsKKwlpZiAodF9zdGF0dXMgJiAoMSA8PCAzKSkKKwkJaWlvX3B1c2hfZXZlbnQoaW5kaW9fZGV2LCAwLAorCQkJICAgICAgIElJT19VTk1PRF9FVkVOVF9DT0RFKElJT19URU1QLAorCQkJCQkJICAgIDAsCisJCQkJCQkgICAgSUlPX0VWX1RZUEVfVEhSRVNILAorCQkJCQkJICAgIElJT19FVl9ESVJfUklTSU5HKSwKKwkJCSAgICAgICB0aW1lc3RhbXApOwogCi0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlpZiAodF9zdGF0dXMgJiAoMSA8PCBpKSkKLQkJCWlpb19wdXNoX2V2ZW50KGNoaXAtPmluZGlvX2RldiwgMCwKLQkJCQlJSU9fRVZFTlRfQ09ERV9BRDcyOTFfVF9TRU5TRV9ISUdIICsgaSwKLQkJCQljaGlwLT5sYXN0X3RpbWVzdGFtcCk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IEFENzI5MV9WT0xUQUdFX0xJTUlUX0NPVU5UKjI7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBRDcyOTFfVk9MVEFHRV9MSU1JVF9DT1VOVCoyOyBpICs9IDIpIHsKIAkJaWYgKHZfc3RhdHVzICYgKDEgPDwgaSkpCi0JCQlpaW9fcHVzaF9ldmVudChjaGlwLT5pbmRpb19kZXYsIDAsCi0JCQkJSUlPX0VWRU5UX0NPREVfQUQ3MjkxX1ZPTFRBR0VfQkFTRSArIGksCi0JCQkJY2hpcC0+bGFzdF90aW1lc3RhbXApOworCQkJaWlvX3B1c2hfZXZlbnQoaW5kaW9fZGV2LCAwLAorCQkJCSAgICAgICBJSU9fVU5NT0RfRVZFTlRfQ09ERShJSU9fSU4sCisJCQkJCQkJICAgIGkvMiwKKwkJCQkJCQkgICAgSUlPX0VWX1RZUEVfVEhSRVNILAorCQkJCQkJCSAgICBJSU9fRVZfRElSX0ZBTExJTkcpLAorCQkJCSAgICAgICB0aW1lc3RhbXApOworCQlpZiAodl9zdGF0dXMgJiAoMSA8PCAoaSArIDEpKSkKKwkJCWlpb19wdXNoX2V2ZW50KGluZGlvX2RldiwgMCwKKwkJCQkgICAgICAgSUlPX1VOTU9EX0VWRU5UX0NPREUoSUlPX0lOLAorCQkJCQkJCSAgICBpLzIsCisJCQkJCQkJICAgIElJT19FVl9UWVBFX1RIUkVTSCwKKwkJCQkJCQkgICAgSUlPX0VWX0RJUl9SSVNJTkcpLAorCQkJCSAgICAgICB0aW1lc3RhbXApOwogCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCBhZDcyOTFfaW50ZXJydXB0KHN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbywKLQkJaW50IGluZGV4LAotCQlzNjQgdGltZXN0YW1wLAotCQlpbnQgbm9fdGVzdCkKLXsKLQlzdHJ1Y3QgYWQ3MjkxX2NoaXBfaW5mbyAqY2hpcCA9IGRldl9pbmZvLT5kZXZfZGF0YTsKLQotCWNoaXAtPmxhc3RfdGltZXN0YW1wID0gdGltZXN0YW1wOwotCXNjaGVkdWxlX3dvcmsoJmNoaXAtPnRocmVzaF93b3JrKTsKLQotCXJldHVybiAwOwotfQotCi1JSU9fRVZFTlRfU0goYWQ3MjkxLCAmYWQ3MjkxX2ludGVycnVwdCk7Ci0KIHN0YXRpYyBpbmxpbmUgc3NpemVfdCBhZDcyOTFfc2hvd190X2JvdW5kKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCXU4IGJvdW5kX3JlZywKIAkJY2hhciAqYnVmKQogewogCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBhZDcyOTFfY2hpcF9pbmZvICpjaGlwID0gZGV2X2luZm8tPmRldl9kYXRhOworCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKIAl1MTYgZGF0YTsKIAljaGFyIHNpZ24gPSAnICc7CiAJaW50IHJldDsKIAotCXJldCA9IGFkNzI5MV9pMmNfcmVhZChjaGlwLCBib3VuZF9yZWcsICZkYXRhKTsKKwlyZXQgPSBhZDcyOTFfaTJjX3JlYWQoY2hpcCwgdGhpc19hdHRyLT5hZGRyZXNzLCAmZGF0YSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIC1FSU87CiAKQEAgLTU2MSwxMiArNTU2LDEyIEBACiAKIHN0YXRpYyBpbmxpbmUgc3NpemVfdCBhZDcyOTFfc2V0X3RfYm91bmQoc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJdTggYm91bmRfcmVnLAogCQljb25zdCBjaGFyICpidWYsCiAJCXNpemVfdCBsZW4pCiB7CiAJc3RydWN0IGlpb19kZXYgKmRldl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGFkNzI5MV9jaGlwX2luZm8gKmNoaXAgPSBkZXZfaW5mby0+ZGV2X2RhdGE7CisJc3RydWN0IGlpb19kZXZfYXR0ciAqdGhpc19hdHRyID0gdG9faWlvX2Rldl9hdHRyKGF0dHIpOwogCWxvbmcgdG1wMSwgdG1wMjsKIAl1MTYgZGF0YTsKIAljaGFyICpwb3M7CkBAIC02MDAsNjQgKzU5NSwxMyBAQAogCQkvKiBjb252ZXJ0IHBvc2l0aXZlIHZhbHVlIHRvIHN1cHBseW1lbnQgKi8KIAkJZGF0YSA9IChBRDcyOTFfVF9WQUxVRV9TSUdOIDw8IDEpIC0gZGF0YTsKIAotCXJldCA9IGFkNzI5MV9pMmNfd3JpdGUoY2hpcCwgYm91bmRfcmVnLCBkYXRhKTsKKwlyZXQgPSBhZDcyOTFfaTJjX3dyaXRlKGNoaXAsIHRoaXNfYXR0ci0+YWRkcmVzcywgZGF0YSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIC1FSU87CiAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3NpemVfdCBhZDcyOTFfc2hvd190X3NlbnNlX2hpZ2goc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY2hhciAqYnVmKQotewotCXJldHVybiBhZDcyOTFfc2hvd190X2JvdW5kKGRldiwgYXR0ciwKLQkJCUFENzI5MV9UX1NFTlNFX0hJR0gsIGJ1Zik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3NpemVfdCBhZDcyOTFfc2V0X3Rfc2Vuc2VfaGlnaChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljb25zdCBjaGFyICpidWYsCi0JCXNpemVfdCBsZW4pCi17Ci0JcmV0dXJuIGFkNzI5MV9zZXRfdF9ib3VuZChkZXYsIGF0dHIsCi0JCQlBRDcyOTFfVF9TRU5TRV9ISUdILCBidWYsIGxlbik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGFkNzI5MV9zaG93X3Rfc2Vuc2VfbG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gYWQ3MjkxX3Nob3dfdF9ib3VuZChkZXYsIGF0dHIsCi0JCQlBRDcyOTFfVF9TRU5TRV9MT1csIGJ1Zik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3NpemVfdCBhZDcyOTFfc2V0X3Rfc2Vuc2VfbG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNvbnN0IGNoYXIgKmJ1ZiwKLQkJc2l6ZV90IGxlbikKLXsKLQlyZXR1cm4gYWQ3MjkxX3NldF90X2JvdW5kKGRldiwgYXR0ciwKLQkJCUFENzI5MV9UX1NFTlNFX0xPVywgYnVmLCBsZW4pOwotfQotCi1zdGF0aWMgc3NpemVfdCBhZDcyOTFfc2hvd190X3NlbnNlX2h5c3Qoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY2hhciAqYnVmKQotewotCXJldHVybiBhZDcyOTFfc2hvd190X2JvdW5kKGRldiwgYXR0ciwKLQkJCUFENzI5MV9UX1NFTlNFX0hZU1QsIGJ1Zik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3NpemVfdCBhZDcyOTFfc2V0X3Rfc2Vuc2VfaHlzdChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljb25zdCBjaGFyICpidWYsCi0JCXNpemVfdCBsZW4pCi17Ci0JcmV0dXJuIGFkNzI5MV9zZXRfdF9ib3VuZChkZXYsIGF0dHIsCi0JCQlBRDcyOTFfVF9TRU5TRV9IWVNULCBidWYsIGxlbik7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgc3NpemVfdCBhZDcyOTFfc2hvd192X2JvdW5kKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCXU4IGJvdW5kX3JlZywKQEAgLTcxMiwxOTEgKzY1NiwxMjEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGFkNzI5MV9nZXRfdm9sdGFnZV9saW1pdF9yZWdzKGNvbnN0IGNoYXIgKmNoYW5uZWwpCi17Ci0JaW50IGluZGV4OwotCi0JaWYgKHN0cmxlbihjaGFubmVsKSA8IDMgJiYgY2hhbm5lbFswXSAhPSAndicpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaW5kZXggPSBjaGFubmVsWzFdIC0gJzAnOwotCWlmIChpbmRleCA+PSBBRDcyOTFfVk9MVEFHRV9MSU1JVF9DT1VOVCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gaW5kZXg7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGFkNzI5MV9zaG93X3ZvbHRhZ2VfaGlnaChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljaGFyICpidWYpCi17Ci0JaW50IHJlZ3M7Ci0KLQlyZWdzID0gYWQ3MjkxX2dldF92b2x0YWdlX2xpbWl0X3JlZ3MoYXR0ci0+YXR0ci5uYW1lKTsKLQotCWlmIChyZWdzIDwgMCkKLQkJcmV0dXJuIHJlZ3M7Ci0KLQlyZXR1cm4gYWQ3MjkxX3Nob3dfdF9ib3VuZChkZXYsIGF0dHIsIHJlZ3MsIGJ1Zik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3NpemVfdCBhZDcyOTFfc2V0X3ZvbHRhZ2VfaGlnaChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljb25zdCBjaGFyICpidWYsCi0JCXNpemVfdCBsZW4pCi17Ci0JaW50IHJlZ3M7Ci0KLQlyZWdzID0gYWQ3MjkxX2dldF92b2x0YWdlX2xpbWl0X3JlZ3MoYXR0ci0+YXR0ci5uYW1lKTsKLQotCWlmIChyZWdzIDwgMCkKLQkJcmV0dXJuIHJlZ3M7Ci0KLQlyZXR1cm4gYWQ3MjkxX3NldF90X2JvdW5kKGRldiwgYXR0ciwgcmVncywgYnVmLCBsZW4pOwotfQotCi1zdGF0aWMgc3NpemVfdCBhZDcyOTFfc2hvd192b2x0YWdlX2xvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljaGFyICpidWYpCi17Ci0JaW50IHJlZ3M7Ci0KLQlyZWdzID0gYWQ3MjkxX2dldF92b2x0YWdlX2xpbWl0X3JlZ3MoYXR0ci0+YXR0ci5uYW1lKTsKLQotCWlmIChyZWdzIDwgMCkKLQkJcmV0dXJuIHJlZ3M7Ci0KLQlyZXR1cm4gYWQ3MjkxX3Nob3dfdF9ib3VuZChkZXYsIGF0dHIsIHJlZ3MrMSwgYnVmKTsKLX0KLQotc3RhdGljIGlubGluZSBzc2l6ZV90IGFkNzI5MV9zZXRfdm9sdGFnZV9sb3coc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY29uc3QgY2hhciAqYnVmLAotCQlzaXplX3QgbGVuKQotewotCWludCByZWdzOwotCi0JcmVncyA9IGFkNzI5MV9nZXRfdm9sdGFnZV9saW1pdF9yZWdzKGF0dHItPmF0dHIubmFtZSk7Ci0KLQlpZiAocmVncyA8IDApCi0JCXJldHVybiByZWdzOwotCi0JcmV0dXJuIGFkNzI5MV9zZXRfdF9ib3VuZChkZXYsIGF0dHIsIHJlZ3MrMSwgYnVmLCBsZW4pOwotfQotCi1zdGF0aWMgc3NpemVfdCBhZDcyOTFfc2hvd192b2x0YWdlX2h5c3Qoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY2hhciAqYnVmKQotewotCWludCByZWdzOwotCi0JcmVncyA9IGFkNzI5MV9nZXRfdm9sdGFnZV9saW1pdF9yZWdzKGF0dHItPmF0dHIubmFtZSk7Ci0KLQlpZiAocmVncyA8IDApCi0JCXJldHVybiByZWdzOwotCi0JcmV0dXJuIGFkNzI5MV9zaG93X3RfYm91bmQoZGV2LCBhdHRyLCByZWdzKzIsIGJ1Zik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3NpemVfdCBhZDcyOTFfc2V0X3ZvbHRhZ2VfaHlzdChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljb25zdCBjaGFyICpidWYsCi0JCXNpemVfdCBsZW4pCi17Ci0JaW50IHJlZ3M7Ci0KLQlyZWdzID0gYWQ3MjkxX2dldF92b2x0YWdlX2xpbWl0X3JlZ3MoYXR0ci0+YXR0ci5uYW1lKTsKLQotCWlmIChyZWdzIDwgMCkKLQkJcmV0dXJuIHJlZ3M7Ci0KLQlyZXR1cm4gYWQ3MjkxX3NldF90X2JvdW5kKGRldiwgYXR0ciwgcmVncysyLCBidWYsIGxlbik7Ci19Ci0KLUlJT19FVkVOVF9BVFRSX1NIKHRfc2Vuc2VfaGlnaCwgaWlvX2V2ZW50X2FkNzI5MSwKLQkJYWQ3MjkxX3Nob3dfdF9zZW5zZV9oaWdoLCBhZDcyOTFfc2V0X3Rfc2Vuc2VfaGlnaCwgMCk7Ci1JSU9fRVZFTlRfQVRUUl9TSCh0X3NlbnNlX2xvdywgaWlvX2V2ZW50X2FkNzI5MSwKLQkJYWQ3MjkxX3Nob3dfdF9zZW5zZV9sb3csIGFkNzI5MV9zZXRfdF9zZW5zZV9sb3csIDApOwotSUlPX0VWRU5UX0FUVFJfU0godF9zZW5zZV9oeXN0LCBpaW9fZXZlbnRfYWQ3MjkxLAotCQlhZDcyOTFfc2hvd190X3NlbnNlX2h5c3QsIGFkNzI5MV9zZXRfdF9zZW5zZV9oeXN0LCAwKTsKLQotSUlPX0VWRU5UX0FUVFJfU0godjBfaGlnaCwgaWlvX2V2ZW50X2FkNzI5MSwKLQkJYWQ3MjkxX3Nob3dfdm9sdGFnZV9oaWdoLCBhZDcyOTFfc2V0X3ZvbHRhZ2VfaGlnaCwgMCk7Ci1JSU9fRVZFTlRfQVRUUl9TSCh2MF9sb3csIGlpb19ldmVudF9hZDcyOTEsCi0JCWFkNzI5MV9zaG93X3ZvbHRhZ2VfbG93LCBhZDcyOTFfc2V0X3ZvbHRhZ2VfbG93LCAwKTsKLUlJT19FVkVOVF9BVFRSX1NIKHYwX2h5c3QsIGlpb19ldmVudF9hZDcyOTEsCi0JCWFkNzI5MV9zaG93X3ZvbHRhZ2VfaHlzdCwgYWQ3MjkxX3NldF92b2x0YWdlX2h5c3QsIDApOwotSUlPX0VWRU5UX0FUVFJfU0godjFfaGlnaCwgaWlvX2V2ZW50X2FkNzI5MSwKLQkJYWQ3MjkxX3Nob3dfdm9sdGFnZV9oaWdoLCBhZDcyOTFfc2V0X3ZvbHRhZ2VfaGlnaCwgMCk7Ci1JSU9fRVZFTlRfQVRUUl9TSCh2MV9sb3csIGlpb19ldmVudF9hZDcyOTEsCi0JCWFkNzI5MV9zaG93X3ZvbHRhZ2VfbG93LCBhZDcyOTFfc2V0X3ZvbHRhZ2VfbG93LCAwKTsKLUlJT19FVkVOVF9BVFRSX1NIKHYxX2h5c3QsIGlpb19ldmVudF9hZDcyOTEsCi0JCWFkNzI5MV9zaG93X3ZvbHRhZ2VfaHlzdCwgYWQ3MjkxX3NldF92b2x0YWdlX2h5c3QsIDApOwotSUlPX0VWRU5UX0FUVFJfU0godjJfaGlnaCwgaWlvX2V2ZW50X2FkNzI5MSwKLQkJYWQ3MjkxX3Nob3dfdm9sdGFnZV9oaWdoLCBhZDcyOTFfc2V0X3ZvbHRhZ2VfaGlnaCwgMCk7Ci1JSU9fRVZFTlRfQVRUUl9TSCh2Ml9sb3csIGlpb19ldmVudF9hZDcyOTEsCi0JCWFkNzI5MV9zaG93X3ZvbHRhZ2VfbG93LCBhZDcyOTFfc2V0X3ZvbHRhZ2VfbG93LCAwKTsKLUlJT19FVkVOVF9BVFRSX1NIKHYyX2h5c3QsIGlpb19ldmVudF9hZDcyOTEsCi0JCWFkNzI5MV9zaG93X3ZvbHRhZ2VfaHlzdCwgYWQ3MjkxX3NldF92b2x0YWdlX2h5c3QsIDApOwotSUlPX0VWRU5UX0FUVFJfU0godjNfaGlnaCwgaWlvX2V2ZW50X2FkNzI5MSwKLQkJYWQ3MjkxX3Nob3dfdm9sdGFnZV9oaWdoLCBhZDcyOTFfc2V0X3ZvbHRhZ2VfaGlnaCwgMCk7Ci1JSU9fRVZFTlRfQVRUUl9TSCh2M19sb3csIGlpb19ldmVudF9hZDcyOTEsCi0JCWFkNzI5MV9zaG93X3ZvbHRhZ2VfbG93LCBhZDcyOTFfc2V0X3ZvbHRhZ2VfbG93LCAwKTsKLUlJT19FVkVOVF9BVFRSX1NIKHYzX2h5c3QsIGlpb19ldmVudF9hZDcyOTEsCi0JCWFkNzI5MV9zaG93X3ZvbHRhZ2VfaHlzdCwgYWQ3MjkxX3NldF92b2x0YWdlX2h5c3QsIDApOwotSUlPX0VWRU5UX0FUVFJfU0godjRfaGlnaCwgaWlvX2V2ZW50X2FkNzI5MSwKLQkJYWQ3MjkxX3Nob3dfdm9sdGFnZV9oaWdoLCBhZDcyOTFfc2V0X3ZvbHRhZ2VfaGlnaCwgMCk7Ci1JSU9fRVZFTlRfQVRUUl9TSCh2NF9sb3csIGlpb19ldmVudF9hZDcyOTEsCi0JCWFkNzI5MV9zaG93X3ZvbHRhZ2VfbG93LCBhZDcyOTFfc2V0X3ZvbHRhZ2VfbG93LCAwKTsKLUlJT19FVkVOVF9BVFRSX1NIKHY0X2h5c3QsIGlpb19ldmVudF9hZDcyOTEsCi0JCWFkNzI5MV9zaG93X3ZvbHRhZ2VfaHlzdCwgYWQ3MjkxX3NldF92b2x0YWdlX2h5c3QsIDApOwotSUlPX0VWRU5UX0FUVFJfU0godjVfaGlnaCwgaWlvX2V2ZW50X2FkNzI5MSwKLQkJYWQ3MjkxX3Nob3dfdm9sdGFnZV9oaWdoLCBhZDcyOTFfc2V0X3ZvbHRhZ2VfaGlnaCwgMCk7Ci1JSU9fRVZFTlRfQVRUUl9TSCh2NV9sb3csIGlpb19ldmVudF9hZDcyOTEsCi0JCWFkNzI5MV9zaG93X3ZvbHRhZ2VfbG93LCBhZDcyOTFfc2V0X3ZvbHRhZ2VfbG93LCAwKTsKLUlJT19FVkVOVF9BVFRSX1NIKHY1X2h5c3QsIGlpb19ldmVudF9hZDcyOTEsCi0JCWFkNzI5MV9zaG93X3ZvbHRhZ2VfaHlzdCwgYWQ3MjkxX3NldF92b2x0YWdlX2h5c3QsIDApOwotSUlPX0VWRU5UX0FUVFJfU0godjZfaGlnaCwgaWlvX2V2ZW50X2FkNzI5MSwKLQkJYWQ3MjkxX3Nob3dfdm9sdGFnZV9oaWdoLCBhZDcyOTFfc2V0X3ZvbHRhZ2VfaGlnaCwgMCk7Ci1JSU9fRVZFTlRfQVRUUl9TSCh2Nl9sb3csIGlpb19ldmVudF9hZDcyOTEsCi0JCWFkNzI5MV9zaG93X3ZvbHRhZ2VfbG93LCBhZDcyOTFfc2V0X3ZvbHRhZ2VfbG93LCAwKTsKLUlJT19FVkVOVF9BVFRSX1NIKHY2X2h5c3QsIGlpb19ldmVudF9hZDcyOTEsCi0JCWFkNzI5MV9zaG93X3ZvbHRhZ2VfaHlzdCwgYWQ3MjkxX3NldF92b2x0YWdlX2h5c3QsIDApOwotSUlPX0VWRU5UX0FUVFJfU0godjdfaGlnaCwgaWlvX2V2ZW50X2FkNzI5MSwKLQkJYWQ3MjkxX3Nob3dfdm9sdGFnZV9oaWdoLCBhZDcyOTFfc2V0X3ZvbHRhZ2VfaGlnaCwgMCk7Ci1JSU9fRVZFTlRfQVRUUl9TSCh2N19sb3csIGlpb19ldmVudF9hZDcyOTEsCi0JCWFkNzI5MV9zaG93X3ZvbHRhZ2VfbG93LCBhZDcyOTFfc2V0X3ZvbHRhZ2VfbG93LCAwKTsKLUlJT19FVkVOVF9BVFRSX1NIKHY3X2h5c3QsIGlpb19ldmVudF9hZDcyOTEsCi0JCWFkNzI5MV9zaG93X3ZvbHRhZ2VfaHlzdCwgYWQ3MjkxX3NldF92b2x0YWdlX2h5c3QsIDApOworc3RhdGljIElJT19ERVZJQ0VfQVRUUih0X3NlbnNlX2hpZ2hfdmFsdWUsCisJCSAgICAgICBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgIGFkNzI5MV9zaG93X3RfYm91bmQsIGFkNzI5MV9zZXRfdF9ib3VuZCwKKwkJICAgICAgIEFENzI5MV9UX1NFTlNFX0hJR0gpOworc3RhdGljIElJT19ERVZJQ0VfQVRUUih0X3NlbnNlX2xvd192YWx1ZSwKKwkJICAgICAgIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICAgYWQ3MjkxX3Nob3dfdF9ib3VuZCwgYWQ3MjkxX3NldF90X2JvdW5kLAorCQkgICAgICAgQUQ3MjkxX1RfU0VOU0VfTE9XKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIodF9zZW5zZV9oeXN0X3ZhbHVlLAorCQkgICAgICAgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICAgICBhZDcyOTFfc2hvd190X2JvdW5kLCBhZDcyOTFfc2V0X3RfYm91bmQsCisJCSAgICAgICBBRDcyOTFfVF9TRU5TRV9IWVNUKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIodjBfaGlnaCwKKwkJICAgICAgIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICAgYWQ3MjkxX3Nob3dfdF9ib3VuZCwgYWQ3MjkxX3NldF90X2JvdW5kLCAweDA0KTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIodjBfbG93LAorCQkgICAgICAgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICAgICBhZDcyOTFfc2hvd190X2JvdW5kLCBhZDcyOTFfc2V0X3RfYm91bmQsIDB4MDUpOworc3RhdGljIElJT19ERVZJQ0VfQVRUUih2MF9oeXN0LAorCQkgICAgICAgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICAgICBhZDcyOTFfc2hvd190X2JvdW5kLCBhZDcyOTFfc2V0X3RfYm91bmQsIDB4MDYpOworc3RhdGljIElJT19ERVZJQ0VfQVRUUih2MV9oaWdoLAorCQkgICAgICAgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICAgICBhZDcyOTFfc2hvd190X2JvdW5kLCBhZDcyOTFfc2V0X3RfYm91bmQsIDB4MDcpOworc3RhdGljIElJT19ERVZJQ0VfQVRUUih2MV9sb3csCisJCSAgICAgICBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgIGFkNzI5MV9zaG93X3RfYm91bmQsIGFkNzI5MV9zZXRfdF9ib3VuZCwgMHgwOCk7CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSKHYxX2h5c3QsCisJCSAgICAgICBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgIGFkNzI5MV9zaG93X3RfYm91bmQsIGFkNzI5MV9zZXRfdF9ib3VuZCwgMHgwOSk7CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSKHYyX2hpZ2gsCisJCSAgICAgICBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgIGFkNzI5MV9zaG93X3RfYm91bmQsIGFkNzI5MV9zZXRfdF9ib3VuZCwgMHgwQSk7CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSKHYyX2xvdywKKwkJICAgICAgIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICAgYWQ3MjkxX3Nob3dfdF9ib3VuZCwgYWQ3MjkxX3NldF90X2JvdW5kLCAweDBCKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIodjJfaHlzdCwKKwkJICAgICAgIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICAgYWQ3MjkxX3Nob3dfdF9ib3VuZCwgYWQ3MjkxX3NldF90X2JvdW5kLCAweDBDKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIodjNfaGlnaCwKKwkJICAgICAgIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICAgLyogRGF0YXNoZWV0IHN1Z2dlc3RzIHRoaXMgb25lIGFuZCB0aGlzIG9uZSBvbmx5CisJCQkgIGhhcyB0aGUgcmVnaXN0ZXJzIGluIGRpZmZlcmVudCBvcmRlciAqLworCQkgICAgICAgYWQ3MjkxX3Nob3dfdF9ib3VuZCwgYWQ3MjkxX3NldF90X2JvdW5kLCAweDBFKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIodjNfbG93LAorCQkgICAgICAgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICAgICBhZDcyOTFfc2hvd190X2JvdW5kLCBhZDcyOTFfc2V0X3RfYm91bmQsIDB4MEQpOworc3RhdGljIElJT19ERVZJQ0VfQVRUUih2M19oeXN0LAorCQkgICAgICAgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICAgICBhZDcyOTFfc2hvd190X2JvdW5kLCBhZDcyOTFfc2V0X3RfYm91bmQsIDB4MEYpOworc3RhdGljIElJT19ERVZJQ0VfQVRUUih2NF9oaWdoLAorCQkgICAgICAgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICAgICBhZDcyOTFfc2hvd190X2JvdW5kLCBhZDcyOTFfc2V0X3RfYm91bmQsIDB4MTApOworc3RhdGljIElJT19ERVZJQ0VfQVRUUih2NF9sb3csCisJCSAgICAgICBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgIGFkNzI5MV9zaG93X3RfYm91bmQsIGFkNzI5MV9zZXRfdF9ib3VuZCwgMHgxMSk7CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSKHY0X2h5c3QsCisJCSAgICAgICBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgIGFkNzI5MV9zaG93X3RfYm91bmQsIGFkNzI5MV9zZXRfdF9ib3VuZCwgMHgxMik7CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSKHY1X2hpZ2gsCisJCSAgICAgICBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgIGFkNzI5MV9zaG93X3RfYm91bmQsIGFkNzI5MV9zZXRfdF9ib3VuZCwgMHgxMyk7CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSKHY1X2xvdywKKwkJICAgICAgIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICAgYWQ3MjkxX3Nob3dfdF9ib3VuZCwgYWQ3MjkxX3NldF90X2JvdW5kLCAweDE0KTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIodjVfaHlzdCwKKwkJICAgICAgIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICAgYWQ3MjkxX3Nob3dfdF9ib3VuZCwgYWQ3MjkxX3NldF90X2JvdW5kLCAweDE1KTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIodjZfaGlnaCwKKwkJICAgICAgIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICAgYWQ3MjkxX3Nob3dfdF9ib3VuZCwgYWQ3MjkxX3NldF90X2JvdW5kLCAweDE2KTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIodjZfbG93LAorCQkgICAgICAgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICAgICBhZDcyOTFfc2hvd190X2JvdW5kLCBhZDcyOTFfc2V0X3RfYm91bmQsIDB4MTcpOworc3RhdGljIElJT19ERVZJQ0VfQVRUUih2Nl9oeXN0LAorCQkgICAgICAgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICAgICBhZDcyOTFfc2hvd190X2JvdW5kLCBhZDcyOTFfc2V0X3RfYm91bmQsIDB4MTgpOworc3RhdGljIElJT19ERVZJQ0VfQVRUUih2N19oaWdoLAorCQkgICAgICAgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICAgICBhZDcyOTFfc2hvd190X2JvdW5kLCBhZDcyOTFfc2V0X3RfYm91bmQsIDB4MTkpOworc3RhdGljIElJT19ERVZJQ0VfQVRUUih2N19sb3csCisJCSAgICAgICBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgIGFkNzI5MV9zaG93X3RfYm91bmQsIGFkNzI5MV9zZXRfdF9ib3VuZCwgMHgxQSk7CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSKHY3X2h5c3QsCisJCSAgICAgICBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgIGFkNzI5MV9zaG93X3RfYm91bmQsIGFkNzI5MV9zZXRfdF9ib3VuZCwgMHgxQik7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZDcyOTFfZXZlbnRfYXR0cmlidXRlc1tdID0gewotCSZpaW9fZXZlbnRfYXR0cl90X3NlbnNlX2hpZ2guZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfdF9zZW5zZV9sb3cuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfdF9zZW5zZV9oeXN0LmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX3YwX2hpZ2guZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfdjBfbG93LmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX3YwX2h5c3QuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfdjFfaGlnaC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl92MV9sb3cuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfdjFfaHlzdC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl92Ml9oaWdoLmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX3YyX2xvdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl92Ml9oeXN0LmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX3YzX2hpZ2guZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfdjNfbG93LmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX3YzX2h5c3QuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfdjRfaGlnaC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl92NF9sb3cuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfdjRfaHlzdC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl92NV9oaWdoLmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX3Y1X2xvdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl92NV9oeXN0LmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX3Y2X2hpZ2guZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfdjZfbG93LmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX3Y2X2h5c3QuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfdjdfaGlnaC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl92N19sb3cuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfdjdfaHlzdC5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfdF9zZW5zZV9oaWdoX3ZhbHVlLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl90X3NlbnNlX2xvd192YWx1ZS5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfdF9zZW5zZV9oeXN0X3ZhbHVlLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl92MF9oaWdoLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl92MF9sb3cuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX3YwX2h5c3QuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX3YxX2hpZ2guZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX3YxX2xvdy5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfdjFfaHlzdC5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfdjJfaGlnaC5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfdjJfbG93LmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl92Ml9oeXN0LmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl92M19oaWdoLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl92M19sb3cuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX3YzX2h5c3QuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX3Y0X2hpZ2guZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX3Y0X2xvdy5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfdjRfaHlzdC5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfdjVfaGlnaC5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfdjVfbG93LmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl92NV9oeXN0LmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl92Nl9oaWdoLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl92Nl9sb3cuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX3Y2X2h5c3QuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX3Y3X2hpZ2guZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX3Y3X2xvdy5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfdjdfaHlzdC5kZXZfYXR0ci5hdHRyLAogCU5VTEwsCiB9OwogCkBAIC05MDQsNiArNzc4LDEyIEBACiAJLmF0dHJzID0gYWQ3MjkxX2V2ZW50X2F0dHJpYnV0ZXMsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIGFkNzI5MV9pbmZvID0geworCS5hdHRycyA9ICZhZDcyOTFfYXR0cmlidXRlX2dyb3VwLAorCS5udW1faW50ZXJydXB0X2xpbmVzID0gMSwKKwkuZXZlbnRfYXR0cnMgPSAmYWQ3MjkxX2V2ZW50X2F0dHJpYnV0ZV9ncm91cCwKK307CisKIC8qCiAgKiBkZXZpY2UgcHJvYmUgYW5kIHJlbW92ZQogICovCkBAIC05MjMsMjEgKzgwMywxOCBAQAogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGNoaXApOwogCiAJY2hpcC0+Y2xpZW50ID0gY2xpZW50OwotCWNoaXAtPm5hbWUgPSBpZC0+bmFtZTsKIAljaGlwLT5jb21tYW5kID0gQUQ3MjkxX05PSVNFX0RFTEFZIHwgQUQ3MjkxX1RfU0VOU0VfTUFTSzsKIAotCWNoaXAtPmluZGlvX2RldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2UoKTsKKwljaGlwLT5pbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKDApOwogCWlmIChjaGlwLT5pbmRpb19kZXYgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX2ZyZWVfY2hpcDsKIAl9CiAKKwljaGlwLT5pbmRpb19kZXYtPm5hbWUgPSBpZC0+bmFtZTsKIAljaGlwLT5pbmRpb19kZXYtPmRldi5wYXJlbnQgPSAmY2xpZW50LT5kZXY7Ci0JY2hpcC0+aW5kaW9fZGV2LT5hdHRycyA9ICZhZDcyOTFfYXR0cmlidXRlX2dyb3VwOwotCWNoaXAtPmluZGlvX2Rldi0+ZXZlbnRfYXR0cnMgPSAmYWQ3MjkxX2V2ZW50X2F0dHJpYnV0ZV9ncm91cDsKKwljaGlwLT5pbmRpb19kZXYtPmluZm8gPSAmYWQ3MjkxX2luZm87CiAJY2hpcC0+aW5kaW9fZGV2LT5kZXZfZGF0YSA9ICh2b2lkICopY2hpcDsKLQljaGlwLT5pbmRpb19kZXYtPmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRTsKLQljaGlwLT5pbmRpb19kZXYtPm51bV9pbnRlcnJ1cHRfbGluZXMgPSAxOwogCWNoaXAtPmluZGlvX2Rldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1RfTU9ERTsKIAogCXJldCA9IGlpb19kZXZpY2VfcmVnaXN0ZXIoY2hpcC0+aW5kaW9fZGV2KTsKQEAgLTk0NSwyNCArODIyLDE1IEBACiAJCWdvdG8gZXJyb3JfZnJlZV9kZXY7CiAKIAlpZiAoY2xpZW50LT5pcnEgPiAwKSB7Ci0JCXJldCA9IGlpb19yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShjbGllbnQtPmlycSwKLQkJCQljaGlwLT5pbmRpb19kZXYsCi0JCQkJMCwKLQkJCQlJUlFGX1RSSUdHRVJfTE9XLAotCQkJCWNoaXAtPm5hbWUpOworCQlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShjbGllbnQtPmlycSwKKwkJCQkJICAgTlVMTCwKKwkJCQkJICAgJmFkNzI5MV9ldmVudF9oYW5kbGVyLAorCQkJCQkgICBJUlFGX1RSSUdHRVJfTE9XIHwgSVJRRl9PTkVTSE9ULAorCQkJCQkgICBpZC0+bmFtZSwKKwkJCQkJICAgY2hpcC0+aW5kaW9fZGV2KTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyb3JfdW5yZWdfZGV2OwogCi0JCS8qCi0JCSAqIFRoZSBldmVudCBoYW5kbGVyIGxpc3QgZWxlbWVudCByZWZlciB0byBpaW9fZXZlbnRfYWQ3MjkxLgotCQkgKiBBbGwgZXZlbnQgYXR0cmlidXRlcyBiaW5kIHRvIHRoZSBzYW1lIGV2ZW50IGhhbmRsZXIuCi0JCSAqIFNvLCBvbmx5IHJlZ2lzdGVyIGV2ZW50IGhhbmRsZXIgb25jZS4KLQkJICovCi0JCWlpb19hZGRfZXZlbnRfdG9fbGlzdCgmaWlvX2V2ZW50X2FkNzI5MSwKLQkJCQkmY2hpcC0+aW5kaW9fZGV2LT5pbnRlcnJ1cHRzWzBdLT5ldl9saXN0KTsKLQotCQlJTklUX1dPUksoJmNoaXAtPnRocmVzaF93b3JrLCBhZDcyOTFfaW50ZXJydXB0X2JoKTsKLQogCQkvKiBzZXQgaXJxIHBvbGFyaXR5IGxvdyBsZXZlbCAqLwogCQljaGlwLT5jb21tYW5kIHw9IEFENzI5MV9BTEFSVF9QT0xBUklUWTsKIAl9CkBAIC05NzksNyArODQ3LDcgQEAKIAlyZXR1cm4gMDsKIAogZXJyb3JfdW5yZWdfaXJxOgotCWlpb191bnJlZ2lzdGVyX2ludGVycnVwdF9saW5lKGNoaXAtPmluZGlvX2RldiwgMCk7CisJZnJlZV9pcnEoY2xpZW50LT5pcnEsIGNoaXAtPmluZGlvX2Rldik7CiBlcnJvcl91bnJlZ19kZXY6CiAJaWlvX2RldmljZV91bnJlZ2lzdGVyKGNoaXAtPmluZGlvX2Rldik7CiBlcnJvcl9mcmVlX2RldjoKQEAgLTk5Niw3ICs4NjQsNyBAQAogCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBjaGlwLT5pbmRpb19kZXY7CiAKIAlpZiAoY2xpZW50LT5pcnEpCi0JCWlpb191bnJlZ2lzdGVyX2ludGVycnVwdF9saW5lKGluZGlvX2RldiwgMCk7CisJCWZyZWVfaXJxKGNsaWVudC0+aXJxLCBjaGlwLT5pbmRpb19kZXYpOwogCWlpb19kZXZpY2VfdW5yZWdpc3RlcihpbmRpb19kZXYpOwogCWlpb19mcmVlX2RldmljZShjaGlwLT5pbmRpb19kZXYpOwogCWtmcmVlKGNoaXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3Mjk4LmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDcyOTguaAppbmRleCBmZTdlZDc3Li42MjhmNWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDcyOTguaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDcyOTguaApAQCAtMTcsMTQgKzE3LDEzIEBACiAjZGVmaW5lIEFENzI5OF9UQVZHCSgxIDw8IDEpIC8qIHRlbXBlcmF0dXJlIHNlbnNvciBhdmVyYWdpbmcgZW5hYmxlICovCiAjZGVmaW5lIEFENzI5OF9QREQJKDEgPDwgMCkgLyogcGFydGlhbCBwb3dlciBkb3duIGVuYWJsZSAqLwogCi0jZGVmaW5lIEFENzI5OF9DSF9NQVNLCShBRDcyOThfQ0gwIHwgQUQ3Mjk4X0NIMSB8IEFENzI5OF9DSDIgfCBBRDcyOThfQ0gzIHwgXAotCQkJQUQ3Mjk4X0NINCB8IEFENzI5OF9DSDUgfCBBRDcyOThfQ0g2IHwgQUQ3Mjk4X0NINykKLQogI2RlZmluZSBBRDcyOThfTUFYX0NIQU4JCTgKICNkZWZpbmUgQUQ3Mjk4X0JJVFMJCTEyCiAjZGVmaW5lIEFENzI5OF9TVE9SQUdFX0JJVFMJMTYKICNkZWZpbmUgQUQ3Mjk4X0lOVFJFRl9tVgkyNTAwCiAKKyNkZWZpbmUgQUQ3Mjk4X0NIX1RFTVAJCTkKKwogI2RlZmluZSBSRVNfTUFTSyhiaXRzKQkoKDEgPDwgKGJpdHMpKSAtIDEpCiAKIC8qCkBAIC0zNywxMSArMzYsOCBAQAogfTsKIAogc3RydWN0IGFkNzI5OF9zdGF0ZSB7Ci0Jc3RydWN0IGlpb19kZXYJCQkqaW5kaW9fZGV2OwogCXN0cnVjdCBzcGlfZGV2aWNlCQkqc3BpOwogCXN0cnVjdCByZWd1bGF0b3IJCSpyZWc7Ci0Jc3RydWN0IHdvcmtfc3RydWN0CQlwb2xsX3dvcms7Ci0JYXRvbWljX3QJCQlwcm90ZWN0X3Jpbmc7CiAJc2l6ZV90CQkJCWRfc2l6ZTsKIAl1MTYJCQkJaW50X3ZyZWZfbXY7CiAJdW5zaWduZWQJCQlleHRfcmVmOwpAQCAtNTgsMTEgKzU0LDExIEBACiB9OwogCiAjaWZkZWYgQ09ORklHX0lJT19SSU5HX0JVRkZFUgotaW50IGFkNzI5OF9zY2FuX2Zyb21fcmluZyhzdHJ1Y3QgYWQ3Mjk4X3N0YXRlICpzdCwgbG9uZyBjaCk7CitpbnQgYWQ3Mjk4X3NjYW5fZnJvbV9yaW5nKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsIGxvbmcgY2gpOwogaW50IGFkNzI5OF9yZWdpc3Rlcl9yaW5nX2Z1bmNzX2FuZF9pbml0KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwogdm9pZCBhZDcyOThfcmluZ19jbGVhbnVwKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwogI2Vsc2UgLyogQ09ORklHX0lJT19SSU5HX0JVRkZFUiAqLwotc3RhdGljIGlubGluZSBpbnQgYWQ3Mjk4X3NjYW5fZnJvbV9yaW5nKHN0cnVjdCBhZDcyOThfc3RhdGUgKnN0LCBsb25nIGNoKQorc3RhdGljIGlubGluZSBpbnQgYWQ3Mjk4X3NjYW5fZnJvbV9yaW5nKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsIGxvbmcgY2gpCiB7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDcyOThfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3Mjk4X2NvcmUuYwppbmRleCAyZTkxNTRlLi5iOGU0YWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDcyOThfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzI5OF9jb3JlLmMKQEAgLTYsNyArNiw2IEBACiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTIzLDYgKzIyLDM3IEBACiAKICNpbmNsdWRlICJhZDcyOTguaCIKIAorc3RhdGljIHN0cnVjdCBpaW9fY2hhbl9zcGVjIGFkNzI5OF9jaGFubmVsc1tdID0geworCUlJT19DSEFOKElJT19URU1QLCAwLCAxLCAwLCBOVUxMLCAwLCAwLAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TRVBBUkFURSksCisJCSA5LCBBRDcyOThfQ0hfVEVNUCwgSUlPX1NUKCdzJywgMzIsIDMyLCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCAwLCAwLAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkgMCwgMCwgSUlPX1NUKCd1JywgMTIsIDE2LCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCAxLCAwLAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkgMSwgMSwgSUlPX1NUKCd1JywgMTIsIDE2LCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCAyLCAwLAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkgMiwgMiwgSUlPX1NUKCd1JywgMTIsIDE2LCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCAzLCAwLAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkgMywgMywgSUlPX1NUKCd1JywgMTIsIDE2LCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCA0LCAwLAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkgNCwgNCwgSUlPX1NUKCd1JywgMTIsIDE2LCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCA1LCAwLAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkgNSwgNSwgSUlPX1NUKCd1JywgMTIsIDE2LCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCA2LCAwLAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkgNiwgNiwgSUlPX1NUKCd1JywgMTIsIDE2LCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCA3LCAwLAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkgNywgNywgSUlPX1NUKCd1JywgMTIsIDE2LCAwKSwgMCksCisJSUlPX0NIQU5fU09GVF9USU1FU1RBTVAoOCksCit9OworCiBzdGF0aWMgaW50IGFkNzI5OF9zY2FuX2RpcmVjdChzdHJ1Y3QgYWQ3Mjk4X3N0YXRlICpzdCwgdW5zaWduZWQgY2gpCiB7CiAJaW50IHJldDsKQEAgLTM2LDU1ICs2NiwyOCBAQAogCXJldHVybiBiZTE2X3RvX2NwdShzdC0+cnhfYnVmWzBdKTsKIH0KIAotc3RhdGljIHNzaXplX3QgYWQ3Mjk4X3NjYW4oc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJICAgIGNoYXIgKmJ1ZikKK3N0YXRpYyBpbnQgYWQ3Mjk4X3NjYW5fdGVtcChzdHJ1Y3QgYWQ3Mjk4X3N0YXRlICpzdCwgaW50ICp2YWwpCiB7Ci0Jc3RydWN0IGlpb19kZXYgKmRldl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGFkNzI5OF9zdGF0ZSAqc3QgPSBkZXZfaW5mby0+ZGV2X2RhdGE7Ci0Jc3RydWN0IGlpb19kZXZfYXR0ciAqdGhpc19hdHRyID0gdG9faWlvX2Rldl9hdHRyKGF0dHIpOwotCWludCByZXQ7Ci0KLQltdXRleF9sb2NrKCZkZXZfaW5mby0+bWxvY2spOwotCWlmIChpaW9fcmluZ19lbmFibGVkKGRldl9pbmZvKSkKLQkJcmV0ID0gYWQ3Mjk4X3NjYW5fZnJvbV9yaW5nKHN0LCB0aGlzX2F0dHItPmFkZHJlc3MpOwotCWVsc2UKLQkJcmV0ID0gYWQ3Mjk4X3NjYW5fZGlyZWN0KHN0LCB0aGlzX2F0dHItPmFkZHJlc3MpOwotCW11dGV4X3VubG9jaygmZGV2X2luZm8tPm1sb2NrKTsKLQotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHJldCAmIFJFU19NQVNLKEFENzI5OF9CSVRTKSk7Ci19Ci0KLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDAsIGFkNzI5OF9zY2FuLCAwKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDEsIGFkNzI5OF9zY2FuLCAxKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDIsIGFkNzI5OF9zY2FuLCAyKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDMsIGFkNzI5OF9zY2FuLCAzKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDQsIGFkNzI5OF9zY2FuLCA0KTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDUsIGFkNzI5OF9zY2FuLCA1KTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDYsIGFkNzI5OF9zY2FuLCA2KTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDcsIGFkNzI5OF9zY2FuLCA3KTsKLQotc3RhdGljIHNzaXplX3QgYWQ3Mjk4X3Nob3dfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJY2hhciAqYnVmKQotewotCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBhZDcyOThfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShkZXZfaW5mbyk7Ci0JaW50IHRtcDsKKwlpbnQgdG1wLCByZXQ7CiAKIAl0bXAgPSBjcHVfdG9fYmUxNihBRDcyOThfV1JJVEUgfCBBRDcyOThfVFNFTlNFIHwKIAkJCSAgQUQ3Mjk4X1RBVkcgfCBzdC0+ZXh0X3JlZik7CiAKLQltdXRleF9sb2NrKCZkZXZfaW5mby0+bWxvY2spOwotCXNwaV93cml0ZShzdC0+c3BpLCAodTggKikmdG1wLCAyKTsKKwlyZXQgPSBzcGlfd3JpdGUoc3QtPnNwaSwgKHU4ICopJnRtcCwgMik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwogCXRtcCA9IDA7Ci0Jc3BpX3dyaXRlKHN0LT5zcGksICh1OCAqKSZ0bXAsIDIpOworCisJcmV0ID0gc3BpX3dyaXRlKHN0LT5zcGksICh1OCAqKSZ0bXAsIDIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKIAl1c2xlZXBfcmFuZ2UoMTAxLCAxMDAwKTsgLyogc2xlZXAgPiAxMDB1cyAqLwotCXNwaV9yZWFkKHN0LT5zcGksICh1OCAqKSZ0bXAsIDIpOwotCW11dGV4X3VubG9jaygmZGV2X2luZm8tPm1sb2NrKTsKKworCXJldCA9IHNwaV9yZWFkKHN0LT5zcGksICh1OCAqKSZ0bXAsIDIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAl0bXAgPSBiZTE2X3RvX2NwdSh0bXApICYgUkVTX01BU0soQUQ3Mjk4X0JJVFMpOwogCkBAIC0xMDEsNjUgKzEwNCw3NCBAQAogCQl0bXAgKj0gMjUwOyAvKiB0ZW1wZXJhdHVyZSBpbiBtaWxsaSBkZWdyZWVzIENlbHNpdXMgKi8KIAl9CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdG1wKTsKKwkqdmFsID0gdG1wOworCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBJSU9fREVWSUNFX0FUVFIodGVtcDBfaW5wdXQsIFNfSVJVR08sIGFkNzI5OF9zaG93X3RlbXAsIE5VTEwsIDApOwotCi1zdGF0aWMgc3NpemVfdCBhZDcyOThfc2hvd19zY2FsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJY2hhciAqYnVmKQorc3RhdGljIGludCBhZDcyOThfcmVhZF9yYXcoc3RydWN0IGlpb19kZXYgKmRldl9pbmZvLAorCQkJICAgc3RydWN0IGlpb19jaGFuX3NwZWMgY29uc3QgKmNoYW4sCisJCQkgICBpbnQgKnZhbCwKKwkJCSAgIGludCAqdmFsMiwKKwkJCSAgIGxvbmcgbSkKIHsKLQlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgYWQ3Mjk4X3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoZGV2X2luZm8pOwotCS8qIENvcnJlc3BvbmRzIHRvIFZyZWYgLyAyXihiaXRzKSAqLwotCXVuc2lnbmVkIGludCBzY2FsZV91diA9IChzdC0+aW50X3ZyZWZfbXYgKiAxMDAwKSA+PiBBRDcyOThfQklUUzsKKwlpbnQgcmV0OworCXN0cnVjdCBhZDcyOThfc3RhdGUgKnN0ID0gaWlvX3ByaXYoZGV2X2luZm8pOworCXVuc2lnbmVkIGludCBzY2FsZV91djsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkLiUwM2RcbiIsIHNjYWxlX3V2IC8gMTAwMCwgc2NhbGVfdXYgJSAxMDAwKTsKKwlzd2l0Y2ggKG0pIHsKKwljYXNlIDA6CisJCW11dGV4X2xvY2soJmRldl9pbmZvLT5tbG9jayk7CisJCWlmIChpaW9fcmluZ19lbmFibGVkKGRldl9pbmZvKSkgeworCQkJaWYgKGNoYW4tPmFkZHJlc3MgPT0gQUQ3Mjk4X0NIX1RFTVApCisJCQkJcmV0ID0gLUVOT0RFVjsKKwkJCWVsc2UKKwkJCQlyZXQgPSBhZDcyOThfc2Nhbl9mcm9tX3JpbmcoZGV2X2luZm8sCisJCQkJCQkJICAgIGNoYW4tPmFkZHJlc3MpOworCQl9IGVsc2UgeworCQkJaWYgKGNoYW4tPmFkZHJlc3MgPT0gQUQ3Mjk4X0NIX1RFTVApCisJCQkJcmV0ID0gYWQ3Mjk4X3NjYW5fdGVtcChzdCwgdmFsKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSBhZDcyOThfc2Nhbl9kaXJlY3Qoc3QsIGNoYW4tPmFkZHJlc3MpOworCQl9CisJCW11dGV4X3VubG9jaygmZGV2X2luZm8tPm1sb2NrKTsKKworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJaWYgKGNoYW4tPmFkZHJlc3MgIT0gQUQ3Mjk4X0NIX1RFTVApCisJCQkqdmFsID0gcmV0ICYgUkVTX01BU0soQUQ3Mjk4X0JJVFMpOworCisJCXJldHVybiBJSU9fVkFMX0lOVDsKKwljYXNlICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKToKKwkJc2NhbGVfdXYgPSAoc3QtPmludF92cmVmX212ICogMTAwMCkgPj4gQUQ3Mjk4X0JJVFM7CisJCSp2YWwgPSAgc2NhbGVfdXYgLyAxMDAwOworCQkqdmFsMiA9IChzY2FsZV91diAlIDEwMDApICogMTAwMDsKKwkJcmV0dXJuIElJT19WQUxfSU5UX1BMVVNfTUlDUk87CisJY2FzZSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NFUEFSQVRFKToKKwkJKnZhbCA9ICAxOworCQkqdmFsMiA9IDA7CisJCXJldHVybiBJSU9fVkFMX0lOVF9QTFVTX01JQ1JPOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKIH0KLXN0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW5fc2NhbGUsIFNfSVJVR08sIGFkNzI5OF9zaG93X3NjYWxlLCBOVUxMLCAwKTsKIAotc3RhdGljIHNzaXplX3QgYWQ3Mjk4X3Nob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCSBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGlpb19kZXYgKmRldl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGFkNzI5OF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGRldl9pbmZvKTsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBzcGlfZ2V0X2RldmljZV9pZChzdC0+c3BpKS0+bmFtZSk7Ci19Ci1zdGF0aWMgSUlPX0RFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIGFkNzI5OF9zaG93X25hbWUsIE5VTEwsIDApOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWQ3Mjk4X2F0dHJpYnV0ZXNbXSA9IHsKLQkmaWlvX2Rldl9hdHRyX2luMF9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luMV9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luMl9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luM19yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luNF9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luNV9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luNl9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luN19yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luX3NjYWxlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl90ZW1wMF9pbnB1dC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfbmFtZS5kZXZfYXR0ci5hdHRyLAotCU5VTEwsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZDcyOThfYXR0cmlidXRlX2dyb3VwID0gewotCS5hdHRycyA9IGFkNzI5OF9hdHRyaWJ1dGVzLAorc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9faW5mbyBhZDcyOThfaW5mbyA9IHsKKwkucmVhZF9yYXcgPSAmYWQ3Mjk4X3JlYWRfcmF3LAorCS5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEUsCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhZDcyOThfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlzdHJ1Y3QgYWQ3Mjk4X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gc3BpLT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgYWQ3Mjk4X3N0YXRlICpzdDsKLQlpbnQgcmV0OworCWludCByZXQsIHJlZ2RvbmUgPSAwOworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKHNpemVvZigqc3QpKTsKIAotCXN0ID0ga3phbGxvYyhzaXplb2YoKnN0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHN0ID09IE5VTEwpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJvcl9yZXQ7Ci0JfQorCWlmIChpbmRpb19kZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CiAKIAlzdC0+cmVnID0gcmVndWxhdG9yX2dldCgmc3BpLT5kZXYsICJ2Y2MiKTsKIAlpZiAoIUlTX0VSUihzdC0+cmVnKSkgewpAQCAtMTY4LDIyICsxODAsMTYgQEAKIAkJCWdvdG8gZXJyb3JfcHV0X3JlZzsKIAl9CiAKLQlzcGlfc2V0X2RydmRhdGEoc3BpLCBzdCk7CisJc3BpX3NldF9kcnZkYXRhKHNwaSwgaW5kaW9fZGV2KTsKIAotCWF0b21pY19zZXQoJnN0LT5wcm90ZWN0X3JpbmcsIDApOwogCXN0LT5zcGkgPSBzcGk7CiAKLQlzdC0+aW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgpOwotCWlmIChzdC0+aW5kaW9fZGV2ID09IE5VTEwpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJvcl9kaXNhYmxlX3JlZzsKLQl9Ci0KLQlzdC0+aW5kaW9fZGV2LT5kZXYucGFyZW50ID0gJnNwaS0+ZGV2OwotCXN0LT5pbmRpb19kZXYtPmF0dHJzID0gJmFkNzI5OF9hdHRyaWJ1dGVfZ3JvdXA7Ci0Jc3QtPmluZGlvX2Rldi0+ZGV2X2RhdGEgPSAodm9pZCAqKShzdCk7Ci0Jc3QtPmluZGlvX2Rldi0+ZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFOwotCXN0LT5pbmRpb19kZXYtPm1vZGVzID0gSU5ESU9fRElSRUNUX01PREU7CisJaW5kaW9fZGV2LT5uYW1lID0gc3BpX2dldF9kZXZpY2VfaWQoc3BpKS0+bmFtZTsKKwlpbmRpb19kZXYtPmRldi5wYXJlbnQgPSAmc3BpLT5kZXY7CisJaW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOworCWluZGlvX2Rldi0+Y2hhbm5lbHMgPSBhZDcyOThfY2hhbm5lbHM7CisJaW5kaW9fZGV2LT5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKGFkNzI5OF9jaGFubmVscyk7CisJaW5kaW9fZGV2LT5pbmZvID0gJmFkNzI5OF9pbmZvOwogCiAJLyogU2V0dXAgZGVmYXVsdCBtZXNzYWdlICovCiAKQEAgLTIwOCwzOSArMjE0LDQ0IEBACiAJCXN0LT5pbnRfdnJlZl9tdiA9IEFENzI5OF9JTlRSRUZfbVY7CiAJfQogCi0JcmV0ID0gYWQ3Mjk4X3JlZ2lzdGVyX3JpbmdfZnVuY3NfYW5kX2luaXQoc3QtPmluZGlvX2Rldik7CisJcmV0ID0gYWQ3Mjk4X3JlZ2lzdGVyX3JpbmdfZnVuY3NfYW5kX2luaXQoaW5kaW9fZGV2KTsKIAlpZiAocmV0KQotCQlnb3RvIGVycm9yX2ZyZWVfZGV2aWNlOworCQlnb3RvIGVycm9yX2Rpc2FibGVfcmVnOwogCi0JcmV0ID0gaWlvX2RldmljZV9yZWdpc3RlcihzdC0+aW5kaW9fZGV2KTsKKwlyZXQgPSBpaW9fZGV2aWNlX3JlZ2lzdGVyKGluZGlvX2Rldik7CiAJaWYgKHJldCkKLQkJZ290byBlcnJvcl9mcmVlX2RldmljZTsKKwkJZ290byBlcnJvcl9kaXNhYmxlX3JlZzsKKwlyZWdkb25lID0gMTsKIAotCXJldCA9IGlpb19yaW5nX2J1ZmZlcl9yZWdpc3RlcihzdC0+aW5kaW9fZGV2LT5yaW5nLCAwKTsKKwlyZXQgPSBpaW9fcmluZ19idWZmZXJfcmVnaXN0ZXJfZXgoaW5kaW9fZGV2LT5yaW5nLCAwLAorCQkJCQkgICZhZDcyOThfY2hhbm5lbHNbMV0sIC8qIHNraXAgdGVtcDAgKi8KKwkJCQkJICBBUlJBWV9TSVpFKGFkNzI5OF9jaGFubmVscykgLSAxKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycm9yX2NsZWFudXBfcmluZzsKKwogCXJldHVybiAwOwogCiBlcnJvcl9jbGVhbnVwX3Jpbmc6Ci0JYWQ3Mjk4X3JpbmdfY2xlYW51cChzdC0+aW5kaW9fZGV2KTsKLQlpaW9fZGV2aWNlX3VucmVnaXN0ZXIoc3QtPmluZGlvX2Rldik7Ci1lcnJvcl9mcmVlX2RldmljZToKLQlpaW9fZnJlZV9kZXZpY2Uoc3QtPmluZGlvX2Rldik7CisJYWQ3Mjk4X3JpbmdfY2xlYW51cChpbmRpb19kZXYpOwogZXJyb3JfZGlzYWJsZV9yZWc6CiAJaWYgKCFJU19FUlIoc3QtPnJlZykpCiAJCXJlZ3VsYXRvcl9kaXNhYmxlKHN0LT5yZWcpOwogZXJyb3JfcHV0X3JlZzoKIAlpZiAoIUlTX0VSUihzdC0+cmVnKSkKIAkJcmVndWxhdG9yX3B1dChzdC0+cmVnKTsKLQlrZnJlZShzdCk7Ci1lcnJvcl9yZXQ6CisKKwlpZiAocmVnZG9uZSkKKwkJaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CisJZWxzZQorCQlpaW9fZnJlZV9kZXZpY2UoaW5kaW9fZGV2KTsKKwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IGFkNzI5OF9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKLQlzdHJ1Y3QgYWQ3Mjk4X3N0YXRlICpzdCA9IHNwaV9nZXRfZHJ2ZGF0YShzcGkpOwotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBzdC0+aW5kaW9fZGV2OworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKKwlzdHJ1Y3QgYWQ3Mjk4X3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CiAKIAlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihpbmRpb19kZXYtPnJpbmcpOwogCWFkNzI5OF9yaW5nX2NsZWFudXAoaW5kaW9fZGV2KTsKQEAgLTI0OSw3ICsyNjAsOCBAQAogCQlyZWd1bGF0b3JfZGlzYWJsZShzdC0+cmVnKTsKIAkJcmVndWxhdG9yX3B1dChzdC0+cmVnKTsKIAl9Ci0Ja2ZyZWUoc3QpOworCWlpb19kZXZpY2VfdW5yZWdpc3RlcihpbmRpb19kZXYpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzI5OF9yaW5nLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDcyOThfcmluZy5jCmluZGV4IDkwNjhkN2YuLmEwNGMwMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzI5OF9yaW5nLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3Mjk4X3JpbmcuYwpAQCAtNyw3ICs3LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtMjIsNTIgKzIxLDkgQEAKIAogI2luY2x1ZGUgImFkNzI5OC5oIgogCi1zdGF0aWMgSUlPX1NDQU5fRUxfQyhpbjAsIDAsIDAsIE5VTEwpOwotc3RhdGljIElJT19TQ0FOX0VMX0MoaW4xLCAxLCAwLCBOVUxMKTsKLXN0YXRpYyBJSU9fU0NBTl9FTF9DKGluMiwgMiwgMCwgTlVMTCk7Ci1zdGF0aWMgSUlPX1NDQU5fRUxfQyhpbjMsIDMsIDAsIE5VTEwpOwotc3RhdGljIElJT19TQ0FOX0VMX0MoaW40LCA0LCAwLCBOVUxMKTsKLXN0YXRpYyBJSU9fU0NBTl9FTF9DKGluNSwgNSwgMCwgTlVMTCk7Ci1zdGF0aWMgSUlPX1NDQU5fRUxfQyhpbjYsIDYsIDAsIE5VTEwpOwotc3RhdGljIElJT19TQ0FOX0VMX0MoaW43LCA3LCAwLCBOVUxMKTsKLQotc3RhdGljIElJT19TQ0FOX0VMX1RJTUVTVEFNUCg4KTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUl9TQ0FOX0VMX1RZUEUodGltZXN0YW1wLCBzLCA2NCwgNjQpOwotCi1zdGF0aWMgSUlPX0NPTlNUX0FUVFIoaW5fdHlwZSwgInUxMi8xNiIpIDsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkNzI5OF9zY2FuX2VsX2F0dHJzW10gPSB7Ci0JJmlpb19zY2FuX2VsX2luMC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjBfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfaW4xLmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luMV9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjIuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4yX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luMy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjNfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfaW40LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luNF9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW41X2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luNi5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjZfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfaW43LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luN19pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl90aW1lc3RhbXBfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfdGltZXN0YW1wLmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX3RpbWVzdGFtcF90eXBlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luX3R5cGUuZGV2X2F0dHIuYXR0ciwKLQlOVUxMLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYWQ3Mjk4X3NjYW5fZWxfZ3JvdXAgPSB7Ci0JLm5hbWUgPSAic2Nhbl9lbGVtZW50cyIsCi0JLmF0dHJzID0gYWQ3Mjk4X3NjYW5fZWxfYXR0cnMsCi19OwotCi1pbnQgYWQ3Mjk4X3NjYW5fZnJvbV9yaW5nKHN0cnVjdCBhZDcyOThfc3RhdGUgKnN0LCBsb25nIGNoKQoraW50IGFkNzI5OF9zY2FuX2Zyb21fcmluZyhzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8sIGxvbmcgY2gpCiB7Ci0Jc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyA9IHN0LT5pbmRpb19kZXYtPnJpbmc7CisJc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyA9IGRldl9pbmZvLT5yaW5nOwogCWludCByZXQ7CiAJdTE2ICpyaW5nX2RhdGE7CiAKQEAgLTc2LDEyICszMiwxMyBAQAogCQlnb3RvIGVycm9yX3JldDsKIAl9CiAKLQlyaW5nX2RhdGEgPSBrbWFsbG9jKHJpbmctPmFjY2Vzcy5nZXRfYnl0ZXNfcGVyX2RhdHVtKHJpbmcpLCBHRlBfS0VSTkVMKTsKKwlyaW5nX2RhdGEgPSBrbWFsbG9jKHJpbmctPmFjY2Vzcy0+Z2V0X2J5dGVzX3Blcl9kYXR1bShyaW5nKSwKKwkJCSAgICBHRlBfS0VSTkVMKTsKIAlpZiAocmluZ19kYXRhID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9yZXQ7CiAJfQotCXJldCA9IHJpbmctPmFjY2Vzcy5yZWFkX2xhc3QocmluZywgKHU4ICopIHJpbmdfZGF0YSk7CisJcmV0ID0gcmluZy0+YWNjZXNzLT5yZWFkX2xhc3QocmluZywgKHU4ICopIHJpbmdfZGF0YSk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl9mcmVlX3JpbmdfZGF0YTsKIApAQCAtMTAyLDcgKzU5LDcgQEAKICAqKi8KIHN0YXRpYyBpbnQgYWQ3Mjk4X3JpbmdfcHJlZW5hYmxlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCiB7Ci0Jc3RydWN0IGFkNzI5OF9zdGF0ZSAqc3QgPSBpbmRpb19kZXYtPmRldl9kYXRhOworCXN0cnVjdCBhZDcyOThfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKIAlzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nID0gaW5kaW9fZGV2LT5yaW5nOwogCXNpemVfdCBkX3NpemU7CiAJaW50IGksIG07CkBAIC0xMTcsOCArNzQsOCBAQAogCQkJZF9zaXplICs9IHNpemVvZihzNjQpIC0gKGRfc2l6ZSAlIHNpemVvZihzNjQpKTsKIAl9CiAKLQlpZiAocmluZy0+YWNjZXNzLnNldF9ieXRlc19wZXJfZGF0dW0pCi0JCXJpbmctPmFjY2Vzcy5zZXRfYnl0ZXNfcGVyX2RhdHVtKHJpbmcsIGRfc2l6ZSk7CisJaWYgKHJpbmctPmFjY2Vzcy0+c2V0X2J5dGVzX3Blcl9kYXR1bSkKKwkJcmluZy0+YWNjZXNzLT5zZXRfYnl0ZXNfcGVyX2RhdHVtKHJpbmcsIGRfc2l6ZSk7CiAKIAlzdC0+ZF9zaXplID0gZF9zaXplOwogCkBAIC0xNTUsNDcgKzExMiwyNCBAQAogfQogCiAvKioKLSAqIGFkNzI5OF9wb2xsX2Z1bmNfdGgoKSB0aCBvZiB0cmlnZ2VyIGxhdW5jaGVkIHBvbGxpbmcgdG8gcmluZyBidWZmZXIKLSAqCi0gKiBBcyBzYW1wbGluZyBvbmx5IG9jY3VycyBvbiBzcGkgY29tbXMgb2NjdXJyaW5nLCBsZWF2ZSB0aW1lc3RhbXBpbmcgdW50aWwKLSAqIHRoZW4uICBTb21lIHRyaWdnZXJzIHdpbGwgZ2VuZXJhdGUgdGhlaXIgb3duIHRpbWUgc3RhbXAuICBDdXJyZW50bHkKLSAqIHRoZXJlIGlzIG5vIHdheSBvZiBub3RpZnlpbmcgdGhlbSB3aGVuIG5vIG9uZSBjYXJlcy4KLSAqKi8KLXN0YXRpYyB2b2lkIGFkNzI5OF9wb2xsX2Z1bmNfdGgoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwgczY0IHRpbWUpCi17Ci0Jc3RydWN0IGFkNzI5OF9zdGF0ZSAqc3QgPSBpbmRpb19kZXYtPmRldl9kYXRhOwotCi0Jc2NoZWR1bGVfd29yaygmc3QtPnBvbGxfd29yayk7Ci0JcmV0dXJuOwotfQotCi0vKioKLSAqIGFkNzI5OF9wb2xsX2JoX3RvX3JpbmcoKSBiaCBvZiB0cmlnZ2VyIGxhdW5jaGVkIHBvbGxpbmcgdG8gcmluZyBidWZmZXIKLSAqIEB3b3JrX3M6CXRoZSB3b3JrIHN0cnVjdCB0aHJvdWdoIHdoaWNoIHRoaXMgd2FzIHNjaGVkdWxlZAorICogYWQ3Mjk4X3RyaWdnZXJfaGFuZGxlcigpIGJoIG9mIHRyaWdnZXIgbGF1bmNoZWQgcG9sbGluZyB0byByaW5nIGJ1ZmZlcgogICoKICAqIEN1cnJlbnRseSB0aGVyZSBpcyBubyBvcHRpb24gaW4gdGhpcyBkcml2ZXIgdG8gZGlzYWJsZSB0aGUgc2F2aW5nIG9mCiAgKiB0aW1lc3RhbXBzIHdpdGhpbiB0aGUgcmluZy4KLSAqIEkgdGhpbmsgdGhlIG9uZSBjb3B5IG9mIHRoaXMgYXQgYSB0aW1lIHdhcyB0byBhdm9pZCBwcm9ibGVtcyBpZiB0aGUKLSAqIHRyaWdnZXIgd2FzIHNldCBmYXIgdG9vIGhpZ2ggYW5kIHRoZSByZWFkcyB0aGVuIGxvY2tlZCB1cCB0aGUgY29tcHV0ZXIuCiAgKiovCi1zdGF0aWMgdm9pZCBhZDcyOThfcG9sbF9iaF90b19yaW5nKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29ya19zKQorc3RhdGljIGlycXJldHVybl90IGFkNzI5OF90cmlnZ2VyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqcCkKIHsKLQlzdHJ1Y3QgYWQ3Mjk4X3N0YXRlICpzdCA9IGNvbnRhaW5lcl9vZih3b3JrX3MsIHN0cnVjdCBhZDcyOThfc3RhdGUsCi0JCQkJCQkgIHBvbGxfd29yayk7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHN0LT5pbmRpb19kZXY7Ci0Jc3RydWN0IGlpb19zd19yaW5nX2J1ZmZlciAqc3dfcmluZyA9IGlpb190b19zd19yaW5nKGluZGlvX2Rldi0+cmluZyk7CisJc3RydWN0IGlpb19wb2xsX2Z1bmMgKnBmID0gcDsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gcGYtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYWQ3Mjk4X3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CiAJc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyA9IGluZGlvX2Rldi0+cmluZzsKIAlzNjQgdGltZV9uczsKIAlfX3UxNiBidWZbMTZdOwogCWludCBiX3NlbnQsIGk7CiAKLQkvKiBFbnN1cmUgb25seSBvbmUgY29weSBvZiB0aGlzIGZ1bmN0aW9uIHJ1bm5pbmcgYXQgYSB0aW1lICovCi0JaWYgKGF0b21pY19pbmNfcmV0dXJuKCZzdC0+cHJvdGVjdF9yaW5nKSA+IDEpCi0JCXJldHVybjsKLQogCWJfc2VudCA9IHNwaV9zeW5jKHN0LT5zcGksICZzdC0+cmluZ19tc2cpOwogCWlmIChiX3NlbnQpCi0JCWdvdG8gZG9uZTsKKwkJcmV0dXJuIGJfc2VudDsKIAogCWlmIChyaW5nLT5zY2FuX3RpbWVzdGFtcCkgewogCQl0aW1lX25zID0gaWlvX2dldF90aW1lX25zKCk7CkBAIC0yMDYsMTQgKzE0MCwyMCBAQAogCWZvciAoaSA9IDA7IGkgPCByaW5nLT5zY2FuX2NvdW50OyBpKyspCiAJCWJ1ZltpXSA9IGJlMTZfdG9fY3B1KHN0LT5yeF9idWZbaV0pOwogCi0JaW5kaW9fZGV2LT5yaW5nLT5hY2Nlc3Muc3RvcmVfdG8oJnN3X3JpbmctPmJ1ZiwgKHU4ICopYnVmLCB0aW1lX25zKTsKLWRvbmU6Ci0JYXRvbWljX2RlYygmc3QtPnByb3RlY3RfcmluZyk7CisJaW5kaW9fZGV2LT5yaW5nLT5hY2Nlc3MtPnN0b3JlX3RvKHJpbmcsICh1OCAqKWJ1ZiwgdGltZV9ucyk7CisJaWlvX3RyaWdnZXJfbm90aWZ5X2RvbmUoaW5kaW9fZGV2LT50cmlnKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9fcmluZ19zZXR1cF9vcHMgYWQ3Mjk4X3Jpbmdfc2V0dXBfb3BzID0geworCS5wcmVlbmFibGUgPSAmYWQ3Mjk4X3JpbmdfcHJlZW5hYmxlLAorCS5wb3N0ZW5hYmxlID0gJmlpb190cmlnZ2VyZWRfcmluZ19wb3N0ZW5hYmxlLAorCS5wcmVkaXNhYmxlID0gJmlpb190cmlnZ2VyZWRfcmluZ19wcmVkaXNhYmxlLAorfTsKKwogaW50IGFkNzI5OF9yZWdpc3Rlcl9yaW5nX2Z1bmNzX2FuZF9pbml0KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCiB7Ci0Jc3RydWN0IGFkNzI5OF9zdGF0ZSAqc3QgPSBpbmRpb19kZXYtPmRldl9kYXRhOwogCWludCByZXQ7CiAKIAlpbmRpb19kZXYtPnJpbmcgPSBpaW9fc3dfcmJfYWxsb2NhdGUoaW5kaW9fZGV2KTsKQEAgLTIyMiwyNCArMTYyLDI4IEBACiAJCWdvdG8gZXJyb3JfcmV0OwogCX0KIAkvKiBFZmZlY3RpdmVseSBzZWxlY3QgdGhlIHJpbmcgYnVmZmVyIGltcGxlbWVudGF0aW9uICovCi0JaWlvX3Jpbmdfc3dfcmVnaXN0ZXJfZnVuY3MoJmluZGlvX2Rldi0+cmluZy0+YWNjZXNzKTsKLQlyZXQgPSBpaW9fYWxsb2NfcG9sbGZ1bmMoaW5kaW9fZGV2LCBOVUxMLCAmYWQ3Mjk4X3BvbGxfZnVuY190aCk7Ci0JaWYgKHJldCkKKwlpbmRpb19kZXYtPnJpbmctPmFjY2VzcyA9ICZyaW5nX3N3X2FjY2Vzc19mdW5jczsKKworCWluZGlvX2Rldi0+cG9sbGZ1bmMgPSBpaW9fYWxsb2NfcG9sbGZ1bmMoTlVMTCwKKwkJCQkJCSAmYWQ3Mjk4X3RyaWdnZXJfaGFuZGxlciwKKwkJCQkJCSBJUlFGX09ORVNIT1QsCisJCQkJCQkgaW5kaW9fZGV2LAorCQkJCQkJICJhZDcyOThfY29uc3VtZXIlZCIsCisJCQkJCQkgaW5kaW9fZGV2LT5pZCk7CisKKwlpZiAoaW5kaW9fZGV2LT5wb2xsZnVuYyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3JfZGVhbGxvY2F0ZV9zd19yYjsKKwl9CiAKIAkvKiBSaW5nIGJ1ZmZlciBmdW5jdGlvbnMgLSBoZXJlIHRyaWdnZXIgc2V0dXAgcmVsYXRlZCAqLwotCi0JaW5kaW9fZGV2LT5yaW5nLT5wcmVlbmFibGUgPSAmYWQ3Mjk4X3JpbmdfcHJlZW5hYmxlOwotCWluZGlvX2Rldi0+cmluZy0+cG9zdGVuYWJsZSA9ICZpaW9fdHJpZ2dlcmVkX3JpbmdfcG9zdGVuYWJsZTsKLQlpbmRpb19kZXYtPnJpbmctPnByZWRpc2FibGUgPSAmaWlvX3RyaWdnZXJlZF9yaW5nX3ByZWRpc2FibGU7Ci0JaW5kaW9fZGV2LT5yaW5nLT5zY2FuX2VsX2F0dHJzID0gJmFkNzI5OF9zY2FuX2VsX2dyb3VwOworCWluZGlvX2Rldi0+cmluZy0+c2V0dXBfb3BzID0gJmFkNzI5OF9yaW5nX3NldHVwX29wczsKIAlpbmRpb19kZXYtPnJpbmctPnNjYW5fdGltZXN0YW1wID0gdHJ1ZTsKIAotCUlOSVRfV09SSygmc3QtPnBvbGxfd29yaywgJmFkNzI5OF9wb2xsX2JoX3RvX3JpbmcpOwotCiAJLyogRmxhZyB0aGF0IHBvbGxlZCByaW5nIGJ1ZmZlcmluZyBpcyBwb3NzaWJsZSAqLwogCWluZGlvX2Rldi0+bW9kZXMgfD0gSU5ESU9fUklOR19UUklHR0VSRUQ7CiAJcmV0dXJuIDA7CisKIGVycm9yX2RlYWxsb2NhdGVfc3dfcmI6CiAJaWlvX3N3X3JiX2ZyZWUoaW5kaW9fZGV2LT5yaW5nKTsKIGVycm9yX3JldDoKQEAgLTI1Myw2ICsxOTcsNiBAQAogCQlpaW9fdHJpZ2dlcl9kZXR0YWNoX3BvbGxfZnVuYyhpbmRpb19kZXYtPnRyaWcsCiAJCQkJCSAgICAgIGluZGlvX2Rldi0+cG9sbGZ1bmMpOwogCX0KLQlrZnJlZShpbmRpb19kZXYtPnBvbGxmdW5jKTsKKwlpaW9fZGVhbGxvY19wb2xsZnVuYyhpbmRpb19kZXYtPnBvbGxmdW5jKTsKIAlpaW9fc3dfcmJfZnJlZShpbmRpb19kZXYtPnJpbmcpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3MzE0LmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDczMTQuYwppbmRleCA4YzE3YjFmLi45OGJiMTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDczMTQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDczMTQuYwpAQCAtNiwxNiArNiwxMSBAQAogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9ydGMuaD4KIAogI2luY2x1ZGUgIi4uL2lpby5oIgogI2luY2x1ZGUgIi4uL3N5c2ZzLmgiCkBAIC00Nyw3ICs0Miw2IEBACiAgKi8KIAogc3RydWN0IGFkNzMxNF9jaGlwX2luZm8gewotCWNvbnN0IGNoYXIgKm5hbWU7CiAJc3RydWN0IHNwaV9kZXZpY2UgKnNwaV9kZXY7CiAJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldjsKIAlzNjQgbGFzdF90aW1lc3RhbXA7CkBAIC0xNjAsNyArMTU0LDcgQEAKIAlpZiAoY2hpcC0+bW9kZSkKIAkJYWQ3MzE0X3NwaV93cml0ZShjaGlwLCBjaGlwLT5tb2RlKTsKIAotCWlmIChzdHJjbXAoY2hpcC0+bmFtZSwgImFkNzMxNCIpKSB7CisJaWYgKHN0cmNtcChkZXZfaW5mby0+bmFtZSwgImFkNzMxNCIpKSB7CiAJCWRhdGEgPSAoZGF0YSAmIEFENzMxNF9URU1QX01BU0spID4+CiAJCQlBRDczMTRfVEVNUF9PRkZTRVQ7CiAJCWlmIChkYXRhICYgQUQ3MzE0X1RFTVBfU0lHTikgewpAQCAtMTg2LDIyICsxODAsMTAgQEAKIAogc3RhdGljIElJT19ERVZJQ0VfQVRUUih0ZW1wZXJhdHVyZSwgU19JUlVHTywgYWQ3MzE0X3Nob3dfdGVtcGVyYXR1cmUsIE5VTEwsIDApOwogCi1zdGF0aWMgc3NpemVfdCBhZDczMTRfc2hvd19uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgYWQ3MzE0X2NoaXBfaW5mbyAqY2hpcCA9IGRldl9pbmZvLT5kZXZfZGF0YTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgY2hpcC0+bmFtZSk7Ci19Ci0KLXN0YXRpYyBJSU9fREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgYWQ3MzE0X3Nob3dfbmFtZSwgTlVMTCwgMCk7Ci0KIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZDczMTRfYXR0cmlidXRlc1tdID0gewogCSZpaW9fZGV2X2F0dHJfYXZhaWxhYmxlX21vZGVzLmRldl9hdHRyLmF0dHIsCiAJJmlpb19kZXZfYXR0cl9tb2RlLmRldl9hdHRyLmF0dHIsCiAJJmlpb19kZXZfYXR0cl90ZW1wZXJhdHVyZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfbmFtZS5kZXZfYXR0ci5hdHRyLAogCU5VTEwsCiB9OwogCkBAIC0yMDksNiArMTkxLDEwIEBACiAJLmF0dHJzID0gYWQ3MzE0X2F0dHJpYnV0ZXMsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIGFkNzMxNF9pbmZvID0geworCS5hdHRycyA9ICZhZDczMTRfYXR0cmlidXRlX2dyb3VwLAorCS5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEUsCit9OwogLyoKICAqIGRldmljZSBwcm9iZSBhbmQgcmVtb3ZlCiAgKi8KQEAgLTIyNywyNSArMjEzLDI0IEBACiAJZGV2X3NldF9kcnZkYXRhKCZzcGlfZGV2LT5kZXYsIGNoaXApOwogCiAJY2hpcC0+c3BpX2RldiA9IHNwaV9kZXY7Ci0JY2hpcC0+bmFtZSA9IHNwaV9kZXYtPm1vZGFsaWFzOwogCi0JY2hpcC0+aW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgpOworCWNoaXAtPmluZGlvX2RldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2UoMCk7CiAJaWYgKGNoaXAtPmluZGlvX2RldiA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3JfZnJlZV9jaGlwOwogCX0KIAorCWNoaXAtPmluZGlvX2Rldi0+bmFtZSA9IHNwaV9nZXRfZGV2aWNlX2lkKHNwaV9kZXYpLT5uYW1lOwogCWNoaXAtPmluZGlvX2Rldi0+ZGV2LnBhcmVudCA9ICZzcGlfZGV2LT5kZXY7Ci0JY2hpcC0+aW5kaW9fZGV2LT5hdHRycyA9ICZhZDczMTRfYXR0cmlidXRlX2dyb3VwOworCWNoaXAtPmluZGlvX2Rldi0+aW5mbyA9ICZhZDczMTRfaW5mbzsKIAljaGlwLT5pbmRpb19kZXYtPmRldl9kYXRhID0gKHZvaWQgKiljaGlwOwotCWNoaXAtPmluZGlvX2Rldi0+ZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFOwogCiAJcmV0ID0gaWlvX2RldmljZV9yZWdpc3RlcihjaGlwLT5pbmRpb19kZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfZnJlZV9kZXY7CiAKIAlkZXZfaW5mbygmc3BpX2Rldi0+ZGV2LCAiJXMgdGVtcGVyYXR1cmUgc2Vuc29yIHJlZ2lzdGVyZWQuXG4iLAotCQkJIGNoaXAtPm5hbWUpOworCQkJIGNoaXAtPmluZGlvX2Rldi0+bmFtZSk7CiAKIAlyZXR1cm4gMDsKIGVycm9yX2ZyZWVfZGV2OgpAQCAtMjYyLDggKzI0Nyw2IEBACiAJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGNoaXAtPmluZGlvX2RldjsKIAogCWRldl9zZXRfZHJ2ZGF0YSgmc3BpX2Rldi0+ZGV2LCBOVUxMKTsKLQlpZiAoc3BpX2Rldi0+aXJxKQotCQlpaW9fdW5yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShpbmRpb19kZXYsIDApOwogCWlpb19kZXZpY2VfdW5yZWdpc3RlcihpbmRpb19kZXYpOwogCWlpb19mcmVlX2RldmljZShjaGlwLT5pbmRpb19kZXYpOwogCWtmcmVlKGNoaXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3NDc2LmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc0NzYuaAppbmRleCBmOTE3ZTljLi4wMWE3MDIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc0NzYuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc0NzYuaApAQCAtMTksMTEgKzE5LDggQEAKIH07CiAKIHN0cnVjdCBhZDc0NzZfY2hpcF9pbmZvIHsKLQl1OAkJCQliaXRzOwotCXU4CQkJCXN0b3JhZ2ViaXRzOwotCXU4CQkJCXJlc19zaGlmdDsKLQljaGFyCQkJCXNpZ247CiAJdTE2CQkJCWludF92cmVmX212OworCXN0cnVjdCBpaW9fY2hhbl9zcGVjCQljaGFubmVsWzJdOwogfTsKIAogc3RydWN0IGFkNzQ3Nl9zdGF0ZSB7CkBAIC0zMSw4ICsyOCw2IEBACiAJc3RydWN0IHNwaV9kZXZpY2UJCSpzcGk7CiAJY29uc3Qgc3RydWN0IGFkNzQ3Nl9jaGlwX2luZm8JKmNoaXBfaW5mbzsKIAlzdHJ1Y3QgcmVndWxhdG9yCQkqcmVnOwotCXN0cnVjdCB3b3JrX3N0cnVjdAkJcG9sbF93b3JrOwotCWF0b21pY190CQkJcHJvdGVjdF9yaW5nOwogCXNpemVfdAkJCQlkX3NpemU7CiAJdTE2CQkJCWludF92cmVmX212OwogCXN0cnVjdCBzcGlfdHJhbnNmZXIJCXhmZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc0NzZfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3NDc2X2NvcmUuYwppbmRleCBkMjYzOTA0Li41MGNlZGI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc0NzZfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzQ3Nl9jb3JlLmMKQEAgLTYsMTMgKzYsMTAgQEAKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KQEAgLTM1LDExNyArMzIsOTcgQEAKIAlyZXR1cm4gKHN0LT5kYXRhWzBdIDw8IDgpIHwgc3QtPmRhdGFbMV07CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGFkNzQ3Nl9zY2FuKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCSAgICBjaGFyICpidWYpCitzdGF0aWMgaW50IGFkNzQ3Nl9yZWFkX3JhdyhzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8sCisJCQkgICBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbiwKKwkJCSAgIGludCAqdmFsLAorCQkJICAgaW50ICp2YWwyLAorCQkJICAgbG9uZyBtKQogewotCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBhZDc0NzZfc3RhdGUgKnN0ID0gZGV2X2luZm8tPmRldl9kYXRhOwogCWludCByZXQ7CisJc3RydWN0IGFkNzQ3Nl9zdGF0ZSAqc3QgPSBkZXZfaW5mby0+ZGV2X2RhdGE7CisJdW5zaWduZWQgaW50IHNjYWxlX3V2OwogCi0JbXV0ZXhfbG9jaygmZGV2X2luZm8tPm1sb2NrKTsKLQlpZiAoaWlvX3JpbmdfZW5hYmxlZChkZXZfaW5mbykpCi0JCXJldCA9IGFkNzQ3Nl9zY2FuX2Zyb21fcmluZyhzdCk7Ci0JZWxzZQotCQlyZXQgPSBhZDc0NzZfc2Nhbl9kaXJlY3Qoc3QpOwotCW11dGV4X3VubG9jaygmZGV2X2luZm8tPm1sb2NrKTsKKwlzd2l0Y2ggKG0pIHsKKwljYXNlIDA6CisJCW11dGV4X2xvY2soJmRldl9pbmZvLT5tbG9jayk7CisJCWlmIChpaW9fcmluZ19lbmFibGVkKGRldl9pbmZvKSkKKwkJCXJldCA9IGFkNzQ3Nl9zY2FuX2Zyb21fcmluZyhzdCk7CisJCWVsc2UKKwkJCXJldCA9IGFkNzQ3Nl9zY2FuX2RpcmVjdChzdCk7CisJCW11dGV4X3VubG9jaygmZGV2X2luZm8tPm1sb2NrKTsKIAotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIChyZXQgPj4gc3QtPmNoaXBfaW5mby0+cmVzX3NoaWZ0KSAmCi0JCSAgICAgICBSRVNfTUFTSyhzdC0+Y2hpcF9pbmZvLT5iaXRzKSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJKnZhbCA9IChyZXQgPj4gc3QtPmNoaXBfaW5mby0+Y2hhbm5lbFswXS5zY2FuX3R5cGUuc2hpZnQpICYKKwkJCVJFU19NQVNLKHN0LT5jaGlwX2luZm8tPmNoYW5uZWxbMF0uc2Nhbl90eXBlLnJlYWxiaXRzKTsKKwkJcmV0dXJuIElJT19WQUxfSU5UOworCWNhc2UgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpOgorCQlzY2FsZV91diA9IChzdC0+aW50X3ZyZWZfbXYgKiAxMDAwKQorCQkJPj4gc3QtPmNoaXBfaW5mby0+Y2hhbm5lbFswXS5zY2FuX3R5cGUucmVhbGJpdHM7CisJCSp2YWwgPSAgc2NhbGVfdXYvMTAwMDsKKwkJKnZhbDIgPSAoc2NhbGVfdXYlMTAwMCkqMTAwMDsKKwkJcmV0dXJuIElJT19WQUxfSU5UX1BMVVNfTUlDUk87CisJfQorCXJldHVybiAtRUlOVkFMOwogfQotc3RhdGljIElJT19ERVZfQVRUUl9JTl9SQVcoMCwgYWQ3NDc2X3NjYW4sIDApOwotCi1zdGF0aWMgc3NpemVfdCBhZDc0NzZfc2hvd19zY2FsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJY2hhciAqYnVmKQotewotCS8qIERyaXZlciBjdXJyZW50bHkgb25seSBzdXBwb3J0IGludGVybmFsIHZyZWYgKi8KLQlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgYWQ3NDc2X3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoZGV2X2luZm8pOwotCS8qIENvcnJlc3BvbmRzIHRvIFZyZWYgLyAyXihiaXRzKSAqLwotCXVuc2lnbmVkIGludCBzY2FsZV91diA9IChzdC0+aW50X3ZyZWZfbXYgKiAxMDAwKSA+PiBzdC0+Y2hpcF9pbmZvLT5iaXRzOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJTAzZFxuIiwgc2NhbGVfdXYgLyAxMDAwLCBzY2FsZV91diAlIDEwMDApOwotfQotc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbl9zY2FsZSwgU19JUlVHTywgYWQ3NDc2X3Nob3dfc2NhbGUsIE5VTEwsIDApOwotCi1zdGF0aWMgc3NpemVfdCBhZDc0NzZfc2hvd19uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgYWQ3NDc2X3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoZGV2X2luZm8pOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHNwaV9nZXRfZGV2aWNlX2lkKHN0LT5zcGkpLT5uYW1lKTsKLX0KLXN0YXRpYyBJSU9fREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgYWQ3NDc2X3Nob3dfbmFtZSwgTlVMTCwgMCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZDc0NzZfYXR0cmlidXRlc1tdID0gewotCSZpaW9fZGV2X2F0dHJfaW4wX3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW5fc2NhbGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX25hbWUuZGV2X2F0dHIuYXR0ciwKLQlOVUxMLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYWQ3NDc2X2F0dHJpYnV0ZV9ncm91cCA9IHsKLQkuYXR0cnMgPSBhZDc0NzZfYXR0cmlidXRlcywKLX07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWQ3NDc2X2NoaXBfaW5mbyBhZDc0NzZfY2hpcF9pbmZvX3RibFtdID0gewogCVtJRF9BRDc0NjZdID0gewotCQkuYml0cyA9IDEyLAotCQkuc3RvcmFnZWJpdHMgPSAxNiwKLQkJLnJlc19zaGlmdCA9IDAsCi0JCS5zaWduID0gSUlPX1NDQU5fRUxfVFlQRV9VTlNJR05FRCwKKwkJLmNoYW5uZWxbMF0gPSBJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsIE5VTEwsIDAsIDAsCisJCQkJICAgICAgICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJCQkgICAgICAgMCwgMCwgSUlPX1NUKCd1JywgMTIsIDE2LCAwKSwgMCksCisJCS5jaGFubmVsWzFdID0gSUlPX0NIQU5fU09GVF9USU1FU1RBTVAoMSksCiAJfSwKIAlbSURfQUQ3NDY3XSA9IHsKLQkJLmJpdHMgPSAxMCwKLQkJLnN0b3JhZ2ViaXRzID0gMTYsCi0JCS5yZXNfc2hpZnQgPSAyLAotCQkuc2lnbiA9IElJT19TQ0FOX0VMX1RZUEVfVU5TSUdORUQsCisJCS5jaGFubmVsWzBdID0gSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCAwLCAwLAorCQkJCSAgICAgICAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCQkJICAgICAgIDAsIDAsIElJT19TVCgndScsIDEwLCAxNiwgMiksIDApLAorCQkuY2hhbm5lbFsxXSA9IElJT19DSEFOX1NPRlRfVElNRVNUQU1QKDEpLAogCX0sCiAJW0lEX0FENzQ2OF0gPSB7Ci0JCS5iaXRzID0gOCwKLQkJLnN0b3JhZ2ViaXRzID0gMTYsCi0JCS5yZXNfc2hpZnQgPSA0LAotCQkuc2lnbiA9IElJT19TQ0FOX0VMX1RZUEVfVU5TSUdORUQsCisJCS5jaGFubmVsWzBdID0gSUlPX0NIQU4oSUlPX0lOLCAwLCAxICwgMCwgTlVMTCwgMCwgMCwKKwkJCQkgICAgICAgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkJCSAgICAgICAwLCAwLCBJSU9fU1QoJ3UnLCA4LCAxNiwgNCksIDApLAorCQkuY2hhbm5lbFsxXSA9IElJT19DSEFOX1NPRlRfVElNRVNUQU1QKDEpLAogCX0sCiAJW0lEX0FENzQ3NV0gPSB7Ci0JCS5iaXRzID0gMTIsCi0JCS5zdG9yYWdlYml0cyA9IDE2LAotCQkucmVzX3NoaWZ0ID0gMCwKLQkJLnNpZ24gPSBJSU9fU0NBTl9FTF9UWVBFX1VOU0lHTkVELAorCQkuY2hhbm5lbFswXSA9IElJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgTlVMTCwgMCwgMCwKKwkJCQkgICAgICAgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkJCSAgICAgICAwLCAwLCBJSU9fU1QoJ3UnLCAxMiwgMTYsIDApLCAwKSwKKwkJLmNoYW5uZWxbMV0gPSBJSU9fQ0hBTl9TT0ZUX1RJTUVTVEFNUCgxKSwKIAl9LAogCVtJRF9BRDc0NzZdID0gewotCQkuYml0cyA9IDEyLAotCQkuc3RvcmFnZWJpdHMgPSAxNiwKLQkJLnJlc19zaGlmdCA9IDAsCi0JCS5zaWduID0gSUlPX1NDQU5fRUxfVFlQRV9VTlNJR05FRCwKKwkJLmNoYW5uZWxbMF0gPSBJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsIE5VTEwsIDAsIDAsCisJCQkJICAgICAgICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJCQkgICAgICAgMCwgMCwgSUlPX1NUKCd1JywgMTIsIDE2LCAwKSwgMCksCisJCS5jaGFubmVsWzFdID0gSUlPX0NIQU5fU09GVF9USU1FU1RBTVAoMSksCiAJfSwKIAlbSURfQUQ3NDc3XSA9IHsKLQkJLmJpdHMgPSAxMCwKLQkJLnN0b3JhZ2ViaXRzID0gMTYsCi0JCS5yZXNfc2hpZnQgPSAyLAotCQkuc2lnbiA9IElJT19TQ0FOX0VMX1RZUEVfVU5TSUdORUQsCisJCS5jaGFubmVsWzBdID0gSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCAwLCAwLAorCQkJCSAgICAgICAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCQkJICAgICAgIDAsIDAsIElJT19TVCgndScsIDEwLCAxNiwgMiksIDApLAorCQkuY2hhbm5lbFsxXSA9IElJT19DSEFOX1NPRlRfVElNRVNUQU1QKDEpLAogCX0sCiAJW0lEX0FENzQ3OF0gPSB7Ci0JCS5iaXRzID0gOCwKLQkJLnN0b3JhZ2ViaXRzID0gMTYsCi0JCS5yZXNfc2hpZnQgPSA0LAotCQkuc2lnbiA9IElJT19TQ0FOX0VMX1RZUEVfVU5TSUdORUQsCisJCS5jaGFubmVsWzBdID0gSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCAwLCAwLAorCQkJCSAgICAgICAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCQkJICAgICAgIDAsIDAsIElJT19TVCgndScsIDgsIDE2LCA0KSwgMCksCisJCS5jaGFubmVsWzFdID0gSUlPX0NIQU5fU09GVF9USU1FU1RBTVAoMSksCiAJfSwKIAlbSURfQUQ3NDk1XSA9IHsKLQkJLmJpdHMgPSAxMiwKLQkJLnN0b3JhZ2ViaXRzID0gMTYsCi0JCS5yZXNfc2hpZnQgPSAwLAorCQkuY2hhbm5lbFswXSA9IElJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgTlVMTCwgMCwgMCwKKwkJCQkgICAgICAgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkJCSAgICAgICAwLCAwLCBJSU9fU1QoJ3UnLCAxMiwgMTYsIDApLCAwKSwKKwkJLmNoYW5uZWxbMV0gPSBJSU9fQ0hBTl9TT0ZUX1RJTUVTVEFNUCgxKSwKIAkJLmludF92cmVmX212ID0gMjUwMCwKLQkJLnNpZ24gPSBJSU9fU0NBTl9FTF9UWVBFX1VOU0lHTkVELAogCX0sCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIGFkNzQ3Nl9pbmZvID0geworCS5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEUsCisJLnJlYWRfcmF3ID0gJmFkNzQ3Nl9yZWFkX3JhdywKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGFkNzQ3Nl9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCXN0cnVjdCBhZDc0NzZfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOwpAQCAtMTgxLDEwICsxNTgsOSBAQAogCiAJc3BpX3NldF9kcnZkYXRhKHNwaSwgc3QpOwogCi0JYXRvbWljX3NldCgmc3QtPnByb3RlY3RfcmluZywgMCk7CiAJc3QtPnNwaSA9IHNwaTsKIAotCXN0LT5pbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKCk7CisJc3QtPmluZGlvX2RldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2UoMCk7CiAJaWYgKHN0LT5pbmRpb19kZXYgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX2Rpc2FibGVfcmVnOwpAQCAtMTkyLDE1ICsxNjgsMTYgQEAKIAogCS8qIEVzdGFibGlzaCB0aGF0IHRoZSBpaW9fZGV2IGlzIGEgY2hpbGQgb2YgdGhlIHNwaSBkZXZpY2UgKi8KIAlzdC0+aW5kaW9fZGV2LT5kZXYucGFyZW50ID0gJnNwaS0+ZGV2OwotCXN0LT5pbmRpb19kZXYtPmF0dHJzID0gJmFkNzQ3Nl9hdHRyaWJ1dGVfZ3JvdXA7CisJc3QtPmluZGlvX2Rldi0+bmFtZSA9IHNwaV9nZXRfZGV2aWNlX2lkKHNwaSktPm5hbWU7CiAJc3QtPmluZGlvX2Rldi0+ZGV2X2RhdGEgPSAodm9pZCAqKShzdCk7Ci0Jc3QtPmluZGlvX2Rldi0+ZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFOwogCXN0LT5pbmRpb19kZXYtPm1vZGVzID0gSU5ESU9fRElSRUNUX01PREU7Ci0KKwlzdC0+aW5kaW9fZGV2LT5jaGFubmVscyA9IHN0LT5jaGlwX2luZm8tPmNoYW5uZWw7CisJc3QtPmluZGlvX2Rldi0+bnVtX2NoYW5uZWxzID0gMjsKKwlzdC0+aW5kaW9fZGV2LT5pbmZvID0gJmFkNzQ3Nl9pbmZvOwogCS8qIFNldHVwIGRlZmF1bHQgbWVzc2FnZSAqLwogCiAJc3QtPnhmZXIucnhfYnVmID0gJnN0LT5kYXRhOwotCXN0LT54ZmVyLmxlbiA9IHN0LT5jaGlwX2luZm8tPnN0b3JhZ2ViaXRzIC8gODsKKwlzdC0+eGZlci5sZW4gPSBzdC0+Y2hpcF9pbmZvLT5jaGFubmVsWzBdLnNjYW5fdHlwZS5zdG9yYWdlYml0cyAvIDg7CiAKIAlzcGlfbWVzc2FnZV9pbml0KCZzdC0+bXNnKTsKIAlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmc3QtPnhmZXIsICZzdC0+bXNnKTsKQEAgLTIxMyw3ICsxOTAsOSBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfZnJlZV9kZXZpY2U7CiAKLQlyZXQgPSBpaW9fcmluZ19idWZmZXJfcmVnaXN0ZXIoc3QtPmluZGlvX2Rldi0+cmluZywgMCk7CisJcmV0ID0gaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyX2V4KHN0LT5pbmRpb19kZXYtPnJpbmcsIDAsCisJCQkJCSAgc3QtPmNoaXBfaW5mby0+Y2hhbm5lbCwKKwkJCQkJICBBUlJBWV9TSVpFKHN0LT5jaGlwX2luZm8tPmNoYW5uZWwpKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycm9yX2NsZWFudXBfcmluZzsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzQ3Nl9yaW5nLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc0NzZfcmluZy5jCmluZGV4IDkyZDkzNzguLmIxYjJlZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzQ3Nl9yaW5nLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3NDc2X3JpbmcuYwpAQCAtOCwxMyArOCwxMCBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KIAogI2luY2x1ZGUgIi4uL2lpby5oIgpAQCAtMjUsNTEgKzIyLDE5IEBACiAKICNpbmNsdWRlICJhZDc0NzYuaCIKIAotc3RhdGljIElJT19TQ0FOX0VMX0MoaW4wLCAwLCAwLCBOVUxMKTsKLXN0YXRpYyBJSU9fU0NBTl9FTF9USU1FU1RBTVAoMSk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfU0NBTl9FTF9UWVBFKHRpbWVzdGFtcCwgcywgNjQsIDY0KTsKLQotc3RhdGljIHNzaXplX3QgYWQ3NDc2X3Nob3dfdHlwZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJY2hhciAqYnVmKQotewotCXN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gcmluZy0+aW5kaW9fZGV2OwotCXN0cnVjdCBhZDc0NzZfc3RhdGUgKnN0ID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVjJWQvJWQ+PiVkXG4iLCBzdC0+Y2hpcF9pbmZvLT5zaWduLAotCQkgICAgICAgc3QtPmNoaXBfaW5mby0+Yml0cywgc3QtPmNoaXBfaW5mby0+c3RvcmFnZWJpdHMsCi0JCSAgICAgICBzdC0+Y2hpcF9pbmZvLT5yZXNfc2hpZnQpOwotfQotc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbl90eXBlLCBTX0lSVUdPLCBhZDc0NzZfc2hvd190eXBlLCBOVUxMLCAwKTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkNzQ3Nl9zY2FuX2VsX2F0dHJzW10gPSB7Ci0JJmlpb19zY2FuX2VsX2luMC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjBfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfdGltZXN0YW1wX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX3RpbWVzdGFtcC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl90aW1lc3RhbXBfdHlwZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW5fdHlwZS5kZXZfYXR0ci5hdHRyLAotCU5VTEwsCi19OwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZDc0NzZfc2Nhbl9lbF9ncm91cCA9IHsKLQkubmFtZSA9ICJzY2FuX2VsZW1lbnRzIiwKLQkuYXR0cnMgPSBhZDc0NzZfc2Nhbl9lbF9hdHRycywKLX07Ci0KIGludCBhZDc0NzZfc2Nhbl9mcm9tX3Jpbmcoc3RydWN0IGFkNzQ3Nl9zdGF0ZSAqc3QpCiB7CiAJc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyA9IHN0LT5pbmRpb19kZXYtPnJpbmc7CiAJaW50IHJldDsKIAl1OCAqcmluZ19kYXRhOwogCi0JcmluZ19kYXRhID0ga21hbGxvYyhyaW5nLT5hY2Nlc3MuZ2V0X2J5dGVzX3Blcl9kYXR1bShyaW5nKSwgR0ZQX0tFUk5FTCk7CisJcmluZ19kYXRhID0ga21hbGxvYyhyaW5nLT5hY2Nlc3MtPmdldF9ieXRlc19wZXJfZGF0dW0ocmluZyksCisJCQkgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKHJpbmdfZGF0YSA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3JfcmV0OwogCX0KLQlyZXQgPSByaW5nLT5hY2Nlc3MucmVhZF9sYXN0KHJpbmcsIHJpbmdfZGF0YSk7CisJcmV0ID0gcmluZy0+YWNjZXNzLT5yZWFkX2xhc3QocmluZywgcmluZ19kYXRhKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycm9yX2ZyZWVfcmluZ19kYXRhOwogCkBAIC05Myw3ICs1OCw4IEBACiAJc3RydWN0IGFkNzQ3Nl9zdGF0ZSAqc3QgPSBpbmRpb19kZXYtPmRldl9kYXRhOwogCXN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcgPSBpbmRpb19kZXYtPnJpbmc7CiAKLQlzdC0+ZF9zaXplID0gcmluZy0+c2Nhbl9jb3VudCAqIHN0LT5jaGlwX2luZm8tPnN0b3JhZ2ViaXRzIC8gODsKKwlzdC0+ZF9zaXplID0gcmluZy0+c2Nhbl9jb3VudCAqCisJCXN0LT5jaGlwX2luZm8tPmNoYW5uZWxbMF0uc2Nhbl90eXBlLnN0b3JhZ2ViaXRzIC8gODsKIAogCWlmIChyaW5nLT5zY2FuX3RpbWVzdGFtcCkgewogCQlzdC0+ZF9zaXplICs9IHNpemVvZihzNjQpOwpAQCAtMTAyLDU1ICs2OCwyOCBAQAogCQkJc3QtPmRfc2l6ZSArPSBzaXplb2YoczY0KSAtIChzdC0+ZF9zaXplICUgc2l6ZW9mKHM2NCkpOwogCX0KIAotCWlmIChpbmRpb19kZXYtPnJpbmctPmFjY2Vzcy5zZXRfYnl0ZXNfcGVyX2RhdHVtKQotCQlpbmRpb19kZXYtPnJpbmctPmFjY2Vzcy5zZXRfYnl0ZXNfcGVyX2RhdHVtKGluZGlvX2Rldi0+cmluZywKKwlpZiAoaW5kaW9fZGV2LT5yaW5nLT5hY2Nlc3MtPnNldF9ieXRlc19wZXJfZGF0dW0pCisJCWluZGlvX2Rldi0+cmluZy0+YWNjZXNzLT5zZXRfYnl0ZXNfcGVyX2RhdHVtKGluZGlvX2Rldi0+cmluZywKIAkJCQkJCQkgICAgc3QtPmRfc2l6ZSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotLyoqCi0gKiBhZDc0NzZfcG9sbF9mdW5jX3RoKCkgdGggb2YgdHJpZ2dlciBsYXVuY2hlZCBwb2xsaW5nIHRvIHJpbmcgYnVmZmVyCi0gKgotICogQXMgc2FtcGxpbmcgb25seSBvY2N1cnMgb24gaTJjIGNvbW1zIG9jY3VycmluZywgbGVhdmUgdGltZXN0YW1waW5nIHVudGlsCi0gKiB0aGVuLiAgU29tZSB0cmlnZ2VycyB3aWxsIGdlbmVyYXRlIHRoZWlyIG93biB0aW1lIHN0YW1wLiAgQ3VycmVudGx5Ci0gKiB0aGVyZSBpcyBubyB3YXkgb2Ygbm90aWZ5aW5nIHRoZW0gd2hlbiBubyBvbmUgY2FyZXMuCi0gKiovCi1zdGF0aWMgdm9pZCBhZDc0NzZfcG9sbF9mdW5jX3RoKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsIHM2NCB0aW1lKQorc3RhdGljIGlycXJldHVybl90IGFkNzQ3Nl90cmlnZ2VyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAgKnApCiB7Ci0Jc3RydWN0IGFkNzQ3Nl9zdGF0ZSAqc3QgPSBpbmRpb19kZXYtPmRldl9kYXRhOwotCi0Jc2NoZWR1bGVfd29yaygmc3QtPnBvbGxfd29yayk7Ci0JcmV0dXJuOwotfQotLyoqCi0gKiBhZDc0NzZfcG9sbF9iaF90b19yaW5nKCkgYmggb2YgdHJpZ2dlciBsYXVuY2hlZCBwb2xsaW5nIHRvIHJpbmcgYnVmZmVyCi0gKiBAd29ya19zOgl0aGUgd29yayBzdHJ1Y3QgdGhyb3VnaCB3aGljaCB0aGlzIHdhcyBzY2hlZHVsZWQKLSAqCi0gKiBDdXJyZW50bHkgdGhlcmUgaXMgbm8gb3B0aW9uIGluIHRoaXMgZHJpdmVyIHRvIGRpc2FibGUgdGhlIHNhdmluZyBvZgotICogdGltZXN0YW1wcyB3aXRoaW4gdGhlIHJpbmcuCi0gKiBJIHRoaW5rIHRoZSBvbmUgY29weSBvZiB0aGlzIGF0IGEgdGltZSB3YXMgdG8gYXZvaWQgcHJvYmxlbXMgaWYgdGhlCi0gKiB0cmlnZ2VyIHdhcyBzZXQgZmFyIHRvbyBoaWdoIGFuZCB0aGUgcmVhZHMgdGhlbiBsb2NrZWQgdXAgdGhlIGNvbXB1dGVyLgotICoqLwotc3RhdGljIHZvaWQgYWQ3NDc2X3BvbGxfYmhfdG9fcmluZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmtfcykKLXsKLQlzdHJ1Y3QgYWQ3NDc2X3N0YXRlICpzdCA9IGNvbnRhaW5lcl9vZih3b3JrX3MsIHN0cnVjdCBhZDc0NzZfc3RhdGUsCi0JCQkJCQkgIHBvbGxfd29yayk7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHN0LT5pbmRpb19kZXY7Ci0Jc3RydWN0IGlpb19zd19yaW5nX2J1ZmZlciAqc3dfcmluZyA9IGlpb190b19zd19yaW5nKGluZGlvX2Rldi0+cmluZyk7CisJc3RydWN0IGlpb19wb2xsX2Z1bmMgKnBmID0gcDsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gcGYtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYWQ3NDc2X3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKIAlzNjQgdGltZV9uczsKIAlfX3U4ICpyeGJ1ZjsKIAlpbnQgYl9zZW50OwogCi0JLyogRW5zdXJlIG9ubHkgb25lIGNvcHkgb2YgdGhpcyBmdW5jdGlvbiBydW5uaW5nIGF0IGEgdGltZSAqLwotCWlmIChhdG9taWNfaW5jX3JldHVybigmc3QtPnByb3RlY3RfcmluZykgPiAxKQotCQlyZXR1cm47Ci0KIAlyeGJ1ZiA9IGt6YWxsb2Moc3QtPmRfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJ4YnVmID09IE5VTEwpCi0JCXJldHVybjsKKwkJcmV0dXJuIC1FTk9NRU07CiAKLQliX3NlbnQgPSBzcGlfcmVhZChzdC0+c3BpLCByeGJ1Ziwgc3QtPmNoaXBfaW5mby0+c3RvcmFnZWJpdHMgLyA4KTsKKwliX3NlbnQgPSBzcGlfcmVhZChzdC0+c3BpLCByeGJ1ZiwKKwkJCSAgc3QtPmNoaXBfaW5mby0+Y2hhbm5lbFswXS5zY2FuX3R5cGUuc3RvcmFnZWJpdHMgLyA4KTsKIAlpZiAoYl9zZW50IDwgMCkKIAkJZ290byBkb25lOwogCkBAIC0xNjAsMTIgKzk5LDIwIEBACiAJCW1lbWNweShyeGJ1ZiArIHN0LT5kX3NpemUgLSBzaXplb2YoczY0KSwKIAkJCSZ0aW1lX25zLCBzaXplb2YodGltZV9ucykpOwogCi0JaW5kaW9fZGV2LT5yaW5nLT5hY2Nlc3Muc3RvcmVfdG8oJnN3X3JpbmctPmJ1ZiwgcnhidWYsIHRpbWVfbnMpOworCWluZGlvX2Rldi0+cmluZy0+YWNjZXNzLT5zdG9yZV90byhpbmRpb19kZXYtPnJpbmcsIHJ4YnVmLCB0aW1lX25zKTsKIGRvbmU6CisJaWlvX3RyaWdnZXJfbm90aWZ5X2RvbmUoaW5kaW9fZGV2LT50cmlnKTsKIAlrZnJlZShyeGJ1Zik7Ci0JYXRvbWljX2RlYygmc3QtPnByb3RlY3RfcmluZyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX3Jpbmdfc2V0dXBfb3BzIGFkNzQ3Nl9yaW5nX3NldHVwX29wcyA9IHsKKwkucHJlZW5hYmxlID0gJmFkNzQ3Nl9yaW5nX3ByZWVuYWJsZSwKKwkucG9zdGVuYWJsZSA9ICZpaW9fdHJpZ2dlcmVkX3JpbmdfcG9zdGVuYWJsZSwKKwkucHJlZGlzYWJsZSA9ICZpaW9fdHJpZ2dlcmVkX3JpbmdfcHJlZGlzYWJsZSwKK307CisKIGludCBhZDc0NzZfcmVnaXN0ZXJfcmluZ19mdW5jc19hbmRfaW5pdChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQogewogCXN0cnVjdCBhZDc0NzZfc3RhdGUgKnN0ID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKQEAgLTE3NywyNCArMTI0LDI4IEBACiAJCWdvdG8gZXJyb3JfcmV0OwogCX0KIAkvKiBFZmZlY3RpdmVseSBzZWxlY3QgdGhlIHJpbmcgYnVmZmVyIGltcGxlbWVudGF0aW9uICovCi0JaWlvX3Jpbmdfc3dfcmVnaXN0ZXJfZnVuY3MoJmluZGlvX2Rldi0+cmluZy0+YWNjZXNzKTsKLQlyZXQgPSBpaW9fYWxsb2NfcG9sbGZ1bmMoaW5kaW9fZGV2LCBOVUxMLCAmYWQ3NDc2X3BvbGxfZnVuY190aCk7Ci0JaWYgKHJldCkKKwlpbmRpb19kZXYtPnJpbmctPmFjY2VzcyA9ICZyaW5nX3N3X2FjY2Vzc19mdW5jczsKKwlpbmRpb19kZXYtPnBvbGxmdW5jCisJCT0gaWlvX2FsbG9jX3BvbGxmdW5jKE5VTEwsCisJCQkJICAgICAmYWQ3NDc2X3RyaWdnZXJfaGFuZGxlciwKKwkJCQkgICAgIElSUUZfT05FU0hPVCwKKwkJCQkgICAgIGluZGlvX2RldiwKKwkJCQkgICAgICIlc19jb25zdW1lciVkIiwKKwkJCQkgICAgIHNwaV9nZXRfZGV2aWNlX2lkKHN0LT5zcGkpLT5uYW1lLAorCQkJCSAgICAgaW5kaW9fZGV2LT5pZCk7CisJaWYgKGluZGlvX2Rldi0+cG9sbGZ1bmMgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX2RlYWxsb2NhdGVfc3dfcmI7CisJfQogCiAJLyogUmluZyBidWZmZXIgZnVuY3Rpb25zIC0gaGVyZSB0cmlnZ2VyIHNldHVwIHJlbGF0ZWQgKi8KLQotCWluZGlvX2Rldi0+cmluZy0+cHJlZW5hYmxlID0gJmFkNzQ3Nl9yaW5nX3ByZWVuYWJsZTsKLQlpbmRpb19kZXYtPnJpbmctPnBvc3RlbmFibGUgPSAmaWlvX3RyaWdnZXJlZF9yaW5nX3Bvc3RlbmFibGU7Ci0JaW5kaW9fZGV2LT5yaW5nLT5wcmVkaXNhYmxlID0gJmlpb190cmlnZ2VyZWRfcmluZ19wcmVkaXNhYmxlOwotCWluZGlvX2Rldi0+cmluZy0+c2Nhbl9lbF9hdHRycyA9ICZhZDc0NzZfc2Nhbl9lbF9ncm91cDsKKwlpbmRpb19kZXYtPnJpbmctPnNldHVwX29wcyA9ICZhZDc0NzZfcmluZ19zZXR1cF9vcHM7CiAJaW5kaW9fZGV2LT5yaW5nLT5zY2FuX3RpbWVzdGFtcCA9IHRydWU7CiAKLQlJTklUX1dPUksoJnN0LT5wb2xsX3dvcmssICZhZDc0NzZfcG9sbF9iaF90b19yaW5nKTsKLQogCS8qIEZsYWcgdGhhdCBwb2xsZWQgcmluZyBidWZmZXJpbmcgaXMgcG9zc2libGUgKi8KIAlpbmRpb19kZXYtPm1vZGVzIHw9IElORElPX1JJTkdfVFJJR0dFUkVEOwogCXJldHVybiAwOworCiBlcnJvcl9kZWFsbG9jYXRlX3N3X3JiOgogCWlpb19zd19yYl9mcmVlKGluZGlvX2Rldi0+cmluZyk7CiBlcnJvcl9yZXQ6CkBAIC0yMDksNiArMTYwLDYgQEAKIAkJaWlvX3RyaWdnZXJfZGV0dGFjaF9wb2xsX2Z1bmMoaW5kaW9fZGV2LT50cmlnLAogCQkJCQkgICAgICBpbmRpb19kZXYtPnBvbGxmdW5jKTsKIAl9Ci0Ja2ZyZWUoaW5kaW9fZGV2LT5wb2xsZnVuYyk7CisJaWlvX2RlYWxsb2NfcG9sbGZ1bmMoaW5kaW9fZGV2LT5wb2xsZnVuYyk7CiAJaWlvX3N3X3JiX2ZyZWUoaW5kaW9fZGV2LT5yaW5nKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzYwNi5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3NjA2LmgKaW5kZXggMzM4YmFkZS4uYjhiM2Q4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3NjA2LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3NjA2LmgKQEAgLTQzLDE3ICs0MywxNyBAQAogLyoqCiAgKiBzdHJ1Y3QgYWQ3NjA2X2NoaXBfaW5mbyAtIGNoaXAgc3BlY2lmYyBpbmZvcm1hdGlvbgogICogQG5hbWU6CQlpbmRlbnRpZmljYXRpb24gc3RyaW5nIGZvciBjaGlwCi0gKiBAYml0czoJCWFjY3VyYWN5IG9mIHRoZSBhZGMgaW4gYml0cwotICogQGJpdHM6CQlvdXRwdXQgY29kaW5nIFtzXWlnbmVkIG9yIFt1XW5zaWduZWQKICAqIEBpbnRfdnJlZl9tdjoJdGhlIGludGVybmFsIHJlZmVyZW5jZSB2b2x0YWdlCi0gKiBAbnVtX2NoYW5uZWxzOgludW1iZXIgb2YgcGh5c2ljYWwgaW5wdXRzIG9uIGNoaXAKKyAqIEBjaGFubmVsczoJCWNoYW5uZWwgc3BlY2lmaWNhdGlvbgorICogQG51bV9jaGFubmVsczoJbnVtYmVyIG9mIGNoYW5uZWxzCiAgKi8KIAogc3RydWN0IGFkNzYwNl9jaGlwX2luZm8gewotCWNoYXIJCQkJbmFtZVsxMF07CisJY29uc3QgY2hhcgkJCSpuYW1lOwogCXU4CQkJCWJpdHM7CiAJY2hhcgkJCQlzaWduOwogCXUxNgkJCQlpbnRfdnJlZl9tdjsKKwlzdHJ1Y3QgaWlvX2NoYW5fc3BlYwkJKmNoYW5uZWxzOwogCXVuc2lnbmVkCQkJbnVtX2NoYW5uZWxzOwogfTsKIApAQCAtNjIsMTQgKzYyLDEyIEBACiAgKi8KIAogc3RydWN0IGFkNzYwNl9zdGF0ZSB7Ci0Jc3RydWN0IGlpb19kZXYJCQkqaW5kaW9fZGV2OwogCXN0cnVjdCBkZXZpY2UJCQkqZGV2OwogCWNvbnN0IHN0cnVjdCBhZDc2MDZfY2hpcF9pbmZvCSpjaGlwX2luZm87CiAJc3RydWN0IGFkNzYwNl9wbGF0Zm9ybV9kYXRhCSpwZGF0YTsKIAlzdHJ1Y3QgcmVndWxhdG9yCQkqcmVnOwogCXN0cnVjdCB3b3JrX3N0cnVjdAkJcG9sbF93b3JrOwogCXdhaXRfcXVldWVfaGVhZF90CQl3cV9kYXRhX2F2YWlsOwotCWF0b21pY190CQkJcHJvdGVjdF9yaW5nOwogCXNpemVfdAkJCQlkX3NpemU7CiAJY29uc3Qgc3RydWN0IGFkNzYwNl9idXNfb3BzCSpib3BzOwogCWludAkJCQlpcnE7CkBAIC05NywxMiArOTUsMTIgQEAKIAlpbnQgKCpyZWFkX2Jsb2NrKShzdHJ1Y3QgZGV2aWNlICosIGludCwgdm9pZCAqKTsKIH07CiAKLXZvaWQgYWQ3NjA2X3N1c3BlbmQoc3RydWN0IGFkNzYwNl9zdGF0ZSAqc3QpOwotdm9pZCBhZDc2MDZfcmVzdW1lKHN0cnVjdCBhZDc2MDZfc3RhdGUgKnN0KTsKLXN0cnVjdCBhZDc2MDZfc3RhdGUgKmFkNzYwNl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBpcnEsCit2b2lkIGFkNzYwNl9zdXNwZW5kKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwordm9pZCBhZDc2MDZfcmVzdW1lKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOworc3RydWN0IGlpb19kZXYgKmFkNzYwNl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBpcnEsCiAJCQkgICAgICB2b2lkIF9faW9tZW0gKmJhc2VfYWRkcmVzcywgdW5zaWduZWQgaWQsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgYWQ3NjA2X2J1c19vcHMgKmJvcHMpOwotaW50IGFkNzYwNl9yZW1vdmUoc3RydWN0IGFkNzYwNl9zdGF0ZSAqc3QpOworaW50IGFkNzYwNl9yZW1vdmUoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7CiBpbnQgYWQ3NjA2X3Jlc2V0KHN0cnVjdCBhZDc2MDZfc3RhdGUgKnN0KTsKIAogZW51bSBhZDc2MDZfc3VwcG9ydGVkX2RldmljZV9pZHMgewpAQCAtMTExLDcgKzEwOSw3IEBACiAJSURfQUQ3NjA2XzQKIH07CiAKLWludCBhZDc2MDZfc2Nhbl9mcm9tX3Jpbmcoc3RydWN0IGFkNzYwNl9zdGF0ZSAqc3QsIHVuc2lnbmVkIGNoKTsKK2ludCBhZDc2MDZfc2Nhbl9mcm9tX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwgdW5zaWduZWQgY2gpOwogaW50IGFkNzYwNl9yZWdpc3Rlcl9yaW5nX2Z1bmNzX2FuZF9pbml0KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwogdm9pZCBhZDc2MDZfcmluZ19jbGVhbnVwKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwogI2VuZGlmIC8qIElJT19BRENfQUQ3NjA2X0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc2MDZfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3NjA2X2NvcmUuYwppbmRleCA0YzcwMGYwLi40NTkzNzFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc2MDZfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzYwNl9jb3JlLmMKQEAgLTcsMTIgKzcsMTAgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KQEAgLTM4LDggKzM2LDkgQEAKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAotc3RhdGljIGludCBhZDc2MDZfc2Nhbl9kaXJlY3Qoc3RydWN0IGFkNzYwNl9zdGF0ZSAqc3QsIHVuc2lnbmVkIGNoKQorc3RhdGljIGludCBhZDc2MDZfc2Nhbl9kaXJlY3Qoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwgdW5zaWduZWQgY2gpCiB7CisJc3RydWN0IGFkNzYwNl9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwogCWludCByZXQ7CiAKIAlzdC0+ZG9uZSA9IGZhbHNlOwpAQCAtNzgsNjcgKzc3LDQ0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHNzaXplX3QgYWQ3NjA2X3NjYW4oc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJICAgIGNoYXIgKmJ1ZikKK3N0YXRpYyBpbnQgYWQ3NjA2X3JlYWRfcmF3KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCisJCQkgICBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbiwKKwkJCSAgIGludCAqdmFsLAorCQkJICAgaW50ICp2YWwyLAorCQkJICAgbG9uZyBtKQogewotCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBhZDc2MDZfc3RhdGUgKnN0ID0gZGV2X2luZm8tPmRldl9kYXRhOwotCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKIAlpbnQgcmV0OworCXN0cnVjdCBhZDc2MDZfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKKwl1bnNpZ25lZCBpbnQgc2NhbGVfdXY7CiAKLQltdXRleF9sb2NrKCZkZXZfaW5mby0+bWxvY2spOwotCWlmIChpaW9fcmluZ19lbmFibGVkKGRldl9pbmZvKSkKLQkJcmV0ID0gYWQ3NjA2X3NjYW5fZnJvbV9yaW5nKHN0LCB0aGlzX2F0dHItPmFkZHJlc3MpOwotCWVsc2UKLQkJcmV0ID0gYWQ3NjA2X3NjYW5fZGlyZWN0KHN0LCB0aGlzX2F0dHItPmFkZHJlc3MpOwotCW11dGV4X3VubG9jaygmZGV2X2luZm8tPm1sb2NrKTsKKwlzd2l0Y2ggKG0pIHsKKwljYXNlIDA6CisJCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOworCQlpZiAoaWlvX3JpbmdfZW5hYmxlZChpbmRpb19kZXYpKQorCQkJcmV0ID0gYWQ3NjA2X3NjYW5fZnJvbV9yaW5nKGluZGlvX2RldiwgY2hhbi0+YWRkcmVzcyk7CisJCWVsc2UKKwkJCXJldCA9IGFkNzYwNl9zY2FuX2RpcmVjdChpbmRpb19kZXYsIGNoYW4tPmFkZHJlc3MpOworCQltdXRleF91bmxvY2soJmluZGlvX2Rldi0+bWxvY2spOwogCi0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgKHNob3J0KSByZXQpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCSp2YWwgPSAoc2hvcnQpIHJldDsKKwkJcmV0dXJuIElJT19WQUxfSU5UOworCWNhc2UgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpOgorCQlzY2FsZV91diA9IChzdC0+cmFuZ2UgKiAxMDAwICogMikKKwkJCT4+IHN0LT5jaGlwX2luZm8tPmNoYW5uZWxzWzBdLnNjYW5fdHlwZS5yZWFsYml0czsKKwkJKnZhbCA9ICBzY2FsZV91diAvIDEwMDA7CisJCSp2YWwyID0gKHNjYWxlX3V2ICUgMTAwMCkgKiAxMDAwOworCQlyZXR1cm4gSUlPX1ZBTF9JTlRfUExVU19NSUNSTzsKKwl9CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDAsIGFkNzYwNl9zY2FuLCAwKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDEsIGFkNzYwNl9zY2FuLCAxKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDIsIGFkNzYwNl9zY2FuLCAyKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDMsIGFkNzYwNl9zY2FuLCAzKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDQsIGFkNzYwNl9zY2FuLCA0KTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDUsIGFkNzYwNl9zY2FuLCA1KTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDYsIGFkNzYwNl9zY2FuLCA2KTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDcsIGFkNzYwNl9zY2FuLCA3KTsKLQotc3RhdGljIHNzaXplX3QgYWQ3NjA2X3Nob3dfc2NhbGUoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCWNoYXIgKmJ1ZikKLXsKLQkvKiBEcml2ZXIgY3VycmVudGx5IG9ubHkgc3VwcG9ydCBpbnRlcm5hbCB2cmVmICovCi0Jc3RydWN0IGlpb19kZXYgKmRldl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGFkNzYwNl9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGRldl9pbmZvKTsKLQl1bnNpZ25lZCBpbnQgc2NhbGVfdXYgPSAoc3QtPnJhbmdlICogMTAwMCAqIDIpID4+IHN0LT5jaGlwX2luZm8tPmJpdHM7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lMDNkXG4iLCBzY2FsZV91diAvIDEwMDAsIHNjYWxlX3V2ICUgMTAwMCk7Ci19Ci1zdGF0aWMgSUlPX0RFVklDRV9BVFRSKGluX3NjYWxlLCBTX0lSVUdPLCBhZDc2MDZfc2hvd19zY2FsZSwgTlVMTCwgMCk7Ci0KLXN0YXRpYyBzc2l6ZV90IGFkNzYwNl9zaG93X25hbWUoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkgY2hhciAqYnVmKQotewotCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBhZDc2MDZfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShkZXZfaW5mbyk7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgc3QtPmNoaXBfaW5mby0+bmFtZSk7Ci19Ci0KLXN0YXRpYyBJSU9fREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgYWQ3NjA2X3Nob3dfbmFtZSwgTlVMTCwgMCk7Ci0KIHN0YXRpYyBzc2l6ZV90IGFkNzYwNl9zaG93X3JhbmdlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGlpb19kZXYgKmRldl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGFkNzYwNl9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGRldl9pbmZvKTsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGFkNzYwNl9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwogCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHN0LT5yYW5nZSk7CiB9CkBAIC0xNDYsOCArMTIyLDggQEAKIHN0YXRpYyBzc2l6ZV90IGFkNzYwNl9zdG9yZV9yYW5nZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgYWQ3NjA2X3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoZGV2X2luZm8pOworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgYWQ3NjA2X3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CiAJdW5zaWduZWQgbG9uZyBsdmFsOwogCiAJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZsdmFsKSkKQEAgLTE1NiwxMCArMTMyLDEwIEBACiAJCWRldl9lcnIoZGV2LCAicmFuZ2UgaXMgbm90IHN1cHBvcnRlZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQltdXRleF9sb2NrKCZkZXZfaW5mby0+bWxvY2spOworCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOwogCWdwaW9fc2V0X3ZhbHVlKHN0LT5wZGF0YS0+Z3Bpb19yYW5nZSwgbHZhbCA9PSAxMDAwMCk7CiAJc3QtPnJhbmdlID0gbHZhbDsKLQltdXRleF91bmxvY2soJmRldl9pbmZvLT5tbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKIAogCXJldHVybiBjb3VudDsKIH0KQEAgLTE3MSw4ICsxNDcsOCBAQAogc3RhdGljIHNzaXplX3QgYWQ3NjA2X3Nob3dfb3ZlcnNhbXBsaW5nX3JhdGlvKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGlpb19kZXYgKmRldl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGFkNzYwNl9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGRldl9pbmZvKTsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGFkNzYwNl9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwogCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHN0LT5vdmVyc2FtcGxpbmcpOwogfQpAQCAtMTkyLDggKzE2OCw4IEBACiBzdGF0aWMgc3NpemVfdCBhZDc2MDZfc3RvcmVfb3ZlcnNhbXBsaW5nX3JhdGlvKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBhZDc2MDZfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShkZXZfaW5mbyk7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBhZDc2MDZfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKIAl1bnNpZ25lZCBsb25nIGx2YWw7CiAJaW50IHJldDsKIApAQCAtMjA2LDEyICsxODIsMTIgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQltdXRleF9sb2NrKCZkZXZfaW5mby0+bWxvY2spOworCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOwogCWdwaW9fc2V0X3ZhbHVlKHN0LT5wZGF0YS0+Z3Bpb19vczAsIChyZXQgPj4gMCkgJiAxKTsKIAlncGlvX3NldF92YWx1ZShzdC0+cGRhdGEtPmdwaW9fb3MxLCAocmV0ID4+IDEpICYgMSk7CiAJZ3Bpb19zZXRfdmFsdWUoc3QtPnBkYXRhLT5ncGlvX29zMSwgKHJldCA+PiAyKSAmIDEpOwogCXN0LT5vdmVyc2FtcGxpbmcgPSBsdmFsOwotCW11dGV4X3VubG9jaygmZGV2X2luZm8tPm1sb2NrKTsKKwltdXRleF91bmxvY2soJmluZGlvX2Rldi0+bWxvY2spOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMjIyLDE2ICsxOTgsNiBAQAogc3RhdGljIElJT19DT05TVF9BVFRSKG92ZXJzYW1wbGluZ19yYXRpb19hdmFpbGFibGUsICIwIDIgNCA4IDE2IDMyIDY0Iik7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZDc2MDZfYXR0cmlidXRlc1tdID0gewotCSZpaW9fZGV2X2F0dHJfaW4wX3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW4xX3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW4yX3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW4zX3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW40X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW41X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW42X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW43X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW5fc2NhbGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX25hbWUuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX3JhbmdlLmRldl9hdHRyLmF0dHIsCiAJJmlpb19jb25zdF9hdHRyX3JhbmdlX2F2YWlsYWJsZS5kZXZfYXR0ci5hdHRyLAogCSZpaW9fZGV2X2F0dHJfb3ZlcnNhbXBsaW5nX3JhdGlvLmRldl9hdHRyLmF0dHIsCkBAIC0yNDMsMjAgKzIwOSwxMiBAQAogCQkJCSAgICAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgaW50IG4pCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopOwotCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBhZDc2MDZfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShkZXZfaW5mbyk7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBhZDc2MDZfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKIAogCW1vZGVfdCBtb2RlID0gYXR0ci0+bW9kZTsKIAotCWlmIChzdC0+Y2hpcF9pbmZvLT5udW1fY2hhbm5lbHMgPD0gNiAmJgotCQkoYXR0ciA9PSAmaWlvX2Rldl9hdHRyX2luN19yYXcuZGV2X2F0dHIuYXR0ciB8fAotCQlhdHRyID09ICZpaW9fZGV2X2F0dHJfaW42X3Jhdy5kZXZfYXR0ci5hdHRyKSkKLQkJbW9kZSA9IDA7Ci0JZWxzZSBpZiAoc3QtPmNoaXBfaW5mby0+bnVtX2NoYW5uZWxzIDw9IDQgJiYKLQkJKGF0dHIgPT0gJmlpb19kZXZfYXR0cl9pbjVfcmF3LmRldl9hdHRyLmF0dHIgfHwKLQkJYXR0ciA9PSAmaWlvX2Rldl9hdHRyX2luNF9yYXcuZGV2X2F0dHIuYXR0cikpCi0JCW1vZGUgPSAwOwotCWVsc2UgaWYgKCFzdC0+aGF2ZV9vcyAmJgorCWlmICghc3QtPmhhdmVfb3MgJiYKIAkJKGF0dHIgPT0gJmlpb19kZXZfYXR0cl9vdmVyc2FtcGxpbmdfcmF0aW8uZGV2X2F0dHIuYXR0ciB8fAogCQlhdHRyID09CiAJCSZpaW9fY29uc3RfYXR0cl9vdmVyc2FtcGxpbmdfcmF0aW9fYXZhaWxhYmxlLmRldl9hdHRyLmF0dHIpKQpAQCAtMjc0LDI5ICsyMzIsOTIgQEAKIAkuaXNfdmlzaWJsZSA9IGFkNzYwNl9hdHRyX2lzX3Zpc2libGUsCiB9OwogCitzdGF0aWMgc3RydWN0IGlpb19jaGFuX3NwZWMgYWQ3NjA2XzhfY2hhbm5lbHNbXSA9IHsKKwlJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsIE5VTEwsIDAsIDAsCisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCSAwLCAwLCBJSU9fU1QoJ3MnLCAxNiwgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsIE5VTEwsIDEsIDAsCisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCSAxLCAxLCBJSU9fU1QoJ3MnLCAxNiwgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsIE5VTEwsIDIsIDAsCisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCSAyLCAyLCBJSU9fU1QoJ3MnLCAxNiwgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsIE5VTEwsIDMsIDAsCisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCSAzLCAzLCBJSU9fU1QoJ3MnLCAxNiwgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsIE5VTEwsIDQsIDAsCisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCSA0LCA0LCBJSU9fU1QoJ3MnLCAxNiwgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsIE5VTEwsIDUsIDAsCisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCSA1LCA1LCBJSU9fU1QoJ3MnLCAxNiwgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsIE5VTEwsIDYsIDAsCisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCSA2LCA2LCBJSU9fU1QoJ3MnLCAxNiwgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsIE5VTEwsIDcsIDAsCisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCSA3LCA3LCBJSU9fU1QoJ3MnLCAxNiwgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTl9TT0ZUX1RJTUVTVEFNUCg4KSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBhZDc2MDZfNl9jaGFubmVsc1tdID0geworCUlJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgTlVMTCwgMCwgMCwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJIDAsIDAsIElJT19TVCgncycsIDE2LCAxNiwgMCksIDApLAorCUlJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgTlVMTCwgMSwgMCwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJIDEsIDEsIElJT19TVCgncycsIDE2LCAxNiwgMCksIDApLAorCUlJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgTlVMTCwgMiwgMCwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJIDIsIDIsIElJT19TVCgncycsIDE2LCAxNiwgMCksIDApLAorCUlJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgTlVMTCwgMywgMCwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJIDMsIDMsIElJT19TVCgncycsIDE2LCAxNiwgMCksIDApLAorCUlJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgTlVMTCwgNCwgMCwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJIDQsIDQsIElJT19TVCgncycsIDE2LCAxNiwgMCksIDApLAorCUlJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgTlVMTCwgNSwgMCwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJIDUsIDUsIElJT19TVCgncycsIDE2LCAxNiwgMCksIDApLAorCUlJT19DSEFOX1NPRlRfVElNRVNUQU1QKDYpLAorfTsKKworc3RhdGljIHN0cnVjdCBpaW9fY2hhbl9zcGVjIGFkNzYwNl80X2NoYW5uZWxzW10gPSB7CisJSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCAwLCAwLAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkgMCwgMCwgSUlPX1NUKCdzJywgMTYsIDE2LCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCAxLCAwLAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkgMSwgMSwgSUlPX1NUKCdzJywgMTYsIDE2LCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCAyLCAwLAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkgMiwgMiwgSUlPX1NUKCdzJywgMTYsIDE2LCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCAzLCAwLAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkgMywgMywgSUlPX1NUKCdzJywgMTYsIDE2LCAwKSwgMCksCisJSUlPX0NIQU5fU09GVF9USU1FU1RBTVAoNCksCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkNzYwNl9jaGlwX2luZm8gYWQ3NjA2X2NoaXBfaW5mb190YmxbXSA9IHsKIAkvKgogCSAqIE1vcmUgZGV2aWNlcyBhZGRlZCBpbiBmdXR1cmUKIAkgKi8KIAlbSURfQUQ3NjA2XzhdID0gewogCQkubmFtZSA9ICJhZDc2MDYiLAotCQkuYml0cyA9IDE2LAotCQkuc2lnbiA9IElJT19TQ0FOX0VMX1RZUEVfU0lHTkVELAogCQkuaW50X3ZyZWZfbXYgPSAyNTAwLAorCQkuY2hhbm5lbHMgPSBhZDc2MDZfOF9jaGFubmVscywKIAkJLm51bV9jaGFubmVscyA9IDgsCiAJfSwKIAlbSURfQUQ3NjA2XzZdID0gewogCQkubmFtZSA9ICJhZDc2MDYtNiIsCi0JCS5iaXRzID0gMTYsCi0JCS5zaWduID0gSUlPX1NDQU5fRUxfVFlQRV9TSUdORUQsCiAJCS5pbnRfdnJlZl9tdiA9IDI1MDAsCisJCS5jaGFubmVscyA9IGFkNzYwNl82X2NoYW5uZWxzLAogCQkubnVtX2NoYW5uZWxzID0gNiwKIAl9LAogCVtJRF9BRDc2MDZfNF0gPSB7CiAJCS5uYW1lID0gImFkNzYwNi00IiwKLQkJLmJpdHMgPSAxNiwKLQkJLnNpZ24gPSBJSU9fU0NBTl9FTF9UWVBFX1NJR05FRCwKIAkJLmludF92cmVmX212ID0gMjUwMCwKKwkJLmNoYW5uZWxzID0gYWQ3NjA2XzRfY2hhbm5lbHMsCiAJCS5udW1fY2hhbm5lbHMgPSA0LAogCX0sCiB9OwpAQCAtMzQzLDggKzM2NCw4IEBACiAJCXN0LT5oYXZlX3Jlc2V0ID0gdHJ1ZTsKIAogCXJldCA9IGdwaW9fcmVxdWVzdF9vbmUoc3QtPnBkYXRhLT5ncGlvX3JhbmdlLCBHUElPRl9ESVJfT1VUIHwKLQkJCSAgICAgICAoKHN0LT5yYW5nZSA9PSAxMDAwMCkgPyBHUElPRl9JTklUX0hJR0ggOgotCQkJICAgICAgIAlHUElPRl9JTklUX0xPVyksICJBRDc2MDZfUkFOR0UiKTsKKwkJCQkoKHN0LT5yYW5nZSA9PSAxMDAwMCkgPyBHUElPRl9JTklUX0hJR0ggOgorCQkJCUdQSU9GX0lOSVRfTE9XKSwgIkFENzYwNl9SQU5HRSIpOwogCWlmICghcmV0KQogCQlzdC0+aGF2ZV9yYW5nZSA9IHRydWU7CiAKQEAgLTM5MSw5ICs0MTIsMTAgQEAKICAqLwogc3RhdGljIGlycXJldHVybl90IGFkNzYwNl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXN0cnVjdCBhZDc2MDZfc3RhdGUgKnN0ID0gZGV2X2lkOworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfaWQ7CisJc3RydWN0IGFkNzYwNl9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwogCi0JaWYgKGlpb19yaW5nX2VuYWJsZWQoc3QtPmluZGlvX2RldikpIHsKKwlpZiAoaWlvX3JpbmdfZW5hYmxlZChpbmRpb19kZXYpKSB7CiAJCWlmICghd29ya19wZW5kaW5nKCZzdC0+cG9sbF93b3JrKSkKIAkJCXNjaGVkdWxlX3dvcmsoJnN0LT5wb2xsX3dvcmspOwogCX0gZWxzZSB7CkBAIC00MDQsMjEgKzQyNiwyOSBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH07CiAKLXN0cnVjdCBhZDc2MDZfc3RhdGUgKmFkNzYwNl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBpcnEsCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIGFkNzYwNl9pbmZvID0geworCS5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEUsCisJLnJlYWRfcmF3ID0gJmFkNzYwNl9yZWFkX3JhdywKKwkuYXR0cnMgPSAmYWQ3NjA2X2F0dHJpYnV0ZV9ncm91cCwKK307CisKK3N0cnVjdCBpaW9fZGV2ICphZDc2MDZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgaXJxLAogCQkJICAgICAgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MsCiAJCQkgICAgICB1bnNpZ25lZCBpZCwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBhZDc2MDZfYnVzX29wcyAqYm9wcykKIHsKIAlzdHJ1Y3QgYWQ3NjA2X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBhZDc2MDZfc3RhdGUgKnN0OwotCWludCByZXQ7CisJaW50IHJldCwgcmVnZG9uZSA9IDA7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2Uoc2l6ZW9mKCpzdCkpOwogCi0Jc3QgPSBremFsbG9jKHNpemVvZigqc3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoc3QgPT0gTlVMTCkgeworCWlmIChpbmRpb19kZXYgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX3JldDsKIAl9CiAKKwlzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CisKIAlzdC0+ZGV2ID0gZGV2OwogCXN0LT5pZCA9IGlkOwogCXN0LT5pcnEgPSBpcnE7CkBAIC00NDUsOTMgKzQ3NSw5MSBAQAogCXN0LT5wZGF0YSA9IHBkYXRhOwogCXN0LT5jaGlwX2luZm8gPSAmYWQ3NjA2X2NoaXBfaW5mb190YmxbaWRdOwogCi0JYXRvbWljX3NldCgmc3QtPnByb3RlY3RfcmluZywgMCk7Ci0KLQlzdC0+aW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgpOwotCWlmIChzdC0+aW5kaW9fZGV2ID09IE5VTEwpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJvcl9kaXNhYmxlX3JlZzsKLQl9Ci0KLQlzdC0+aW5kaW9fZGV2LT5kZXYucGFyZW50ID0gZGV2OwotCXN0LT5pbmRpb19kZXYtPmF0dHJzID0gJmFkNzYwNl9hdHRyaWJ1dGVfZ3JvdXA7Ci0Jc3QtPmluZGlvX2Rldi0+ZGV2X2RhdGEgPSAodm9pZCAqKShzdCk7Ci0Jc3QtPmluZGlvX2Rldi0+ZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFOwotCXN0LT5pbmRpb19kZXYtPm1vZGVzID0gSU5ESU9fRElSRUNUX01PREU7CisJaW5kaW9fZGV2LT5kZXYucGFyZW50ID0gZGV2OworCWluZGlvX2Rldi0+aW5mbyA9ICZhZDc2MDZfaW5mbzsKKwlpbmRpb19kZXYtPm1vZGVzID0gSU5ESU9fRElSRUNUX01PREU7CisJaW5kaW9fZGV2LT5uYW1lID0gc3QtPmNoaXBfaW5mby0+bmFtZTsKKwlpbmRpb19kZXYtPmNoYW5uZWxzID0gc3QtPmNoaXBfaW5mby0+Y2hhbm5lbHM7CisJaW5kaW9fZGV2LT5udW1fY2hhbm5lbHMgPSBzdC0+Y2hpcF9pbmZvLT5udW1fY2hhbm5lbHM7CiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzdC0+d3FfZGF0YV9hdmFpbCk7CiAKIAlyZXQgPSBhZDc2MDZfcmVxdWVzdF9ncGlvcyhzdCk7CiAJaWYgKHJldCkKLQkJZ290byBlcnJvcl9mcmVlX2RldmljZTsKKwkJZ290byBlcnJvcl9kaXNhYmxlX3JlZzsKIAogCXJldCA9IGFkNzYwNl9yZXNldChzdCk7CiAJaWYgKHJldCkKIAkJZGV2X3dhcm4oc3QtPmRldiwgImZhaWxlZCB0byBSRVNFVDogbm8gUkVTRVQgR1BJTyBzcGVjaWZpZWRcbiIpOwogCiAJcmV0ID0gcmVxdWVzdF9pcnEoc3QtPmlycSwgYWQ3NjA2X2ludGVycnVwdCwKLQkJSVJRRl9UUklHR0VSX0ZBTExJTkcsIHN0LT5jaGlwX2luZm8tPm5hbWUsIHN0KTsKKwkJSVJRRl9UUklHR0VSX0ZBTExJTkcsIHN0LT5jaGlwX2luZm8tPm5hbWUsIGluZGlvX2Rldik7CiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl9mcmVlX2dwaW9zOwogCi0JcmV0ID0gYWQ3NjA2X3JlZ2lzdGVyX3JpbmdfZnVuY3NfYW5kX2luaXQoc3QtPmluZGlvX2Rldik7CisJcmV0ID0gYWQ3NjA2X3JlZ2lzdGVyX3JpbmdfZnVuY3NfYW5kX2luaXQoaW5kaW9fZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycm9yX2ZyZWVfaXJxOwogCi0JcmV0ID0gaWlvX2RldmljZV9yZWdpc3RlcihzdC0+aW5kaW9fZGV2KTsKKwlyZXQgPSBpaW9fZGV2aWNlX3JlZ2lzdGVyKGluZGlvX2Rldik7CiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl9mcmVlX2lycTsKKwlyZWdkb25lID0gMTsKIAotCXJldCA9IGlpb19yaW5nX2J1ZmZlcl9yZWdpc3RlcihzdC0+aW5kaW9fZGV2LT5yaW5nLCAwKTsKKwlyZXQgPSBpaW9fcmluZ19idWZmZXJfcmVnaXN0ZXJfZXgoaW5kaW9fZGV2LT5yaW5nLCAwLAorCQkJCQkgIGluZGlvX2Rldi0+Y2hhbm5lbHMsCisJCQkJCSAgaW5kaW9fZGV2LT5udW1fY2hhbm5lbHMpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfY2xlYW51cF9yaW5nOwogCi0JcmV0dXJuIHN0OworCXJldHVybiBpbmRpb19kZXY7CiAKIGVycm9yX2NsZWFudXBfcmluZzoKLQlhZDc2MDZfcmluZ19jbGVhbnVwKHN0LT5pbmRpb19kZXYpOwotCWlpb19kZXZpY2VfdW5yZWdpc3RlcihzdC0+aW5kaW9fZGV2KTsKKwlhZDc2MDZfcmluZ19jbGVhbnVwKGluZGlvX2Rldik7CiAKIGVycm9yX2ZyZWVfaXJxOgotCWZyZWVfaXJxKHN0LT5pcnEsIHN0KTsKKwlmcmVlX2lycShzdC0+aXJxLCBpbmRpb19kZXYpOwogCiBlcnJvcl9mcmVlX2dwaW9zOgogCWFkNzYwNl9mcmVlX2dwaW9zKHN0KTsKIAotZXJyb3JfZnJlZV9kZXZpY2U6Ci0JaWlvX2ZyZWVfZGV2aWNlKHN0LT5pbmRpb19kZXYpOwotCiBlcnJvcl9kaXNhYmxlX3JlZzoKIAlpZiAoIUlTX0VSUihzdC0+cmVnKSkKIAkJcmVndWxhdG9yX2Rpc2FibGUoc3QtPnJlZyk7CiBlcnJvcl9wdXRfcmVnOgogCWlmICghSVNfRVJSKHN0LT5yZWcpKQogCQlyZWd1bGF0b3JfcHV0KHN0LT5yZWcpOwotCWtmcmVlKHN0KTsKKwlpZiAocmVnZG9uZSkKKwkJaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CisJZWxzZQorCQlpaW9fZnJlZV9kZXZpY2UoaW5kaW9fZGV2KTsKIGVycm9yX3JldDoKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQogCi1pbnQgYWQ3NjA2X3JlbW92ZShzdHJ1Y3QgYWQ3NjA2X3N0YXRlICpzdCkKK2ludCBhZDc2MDZfcmVtb3ZlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCiB7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHN0LT5pbmRpb19kZXY7CisJc3RydWN0IGFkNzYwNl9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOworCiAJaWlvX3JpbmdfYnVmZmVyX3VucmVnaXN0ZXIoaW5kaW9fZGV2LT5yaW5nKTsKIAlhZDc2MDZfcmluZ19jbGVhbnVwKGluZGlvX2Rldik7Ci0JaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rldik7Ci0JZnJlZV9pcnEoc3QtPmlycSwgc3QpOworCisJZnJlZV9pcnEoc3QtPmlycSwgaW5kaW9fZGV2KTsKIAlpZiAoIUlTX0VSUihzdC0+cmVnKSkgewogCQlyZWd1bGF0b3JfZGlzYWJsZShzdC0+cmVnKTsKIAkJcmVndWxhdG9yX3B1dChzdC0+cmVnKTsKIAl9CiAKIAlhZDc2MDZfZnJlZV9ncGlvcyhzdCk7CisJaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CiAKLQlrZnJlZShzdCk7CiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgYWQ3NjA2X3N1c3BlbmQoc3RydWN0IGFkNzYwNl9zdGF0ZSAqc3QpCit2b2lkIGFkNzYwNl9zdXNwZW5kKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCiB7CisJc3RydWN0IGFkNzYwNl9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOworCiAJaWYgKHN0LT5oYXZlX3N0YnkpIHsKIAkJaWYgKHN0LT5oYXZlX3JhbmdlKQogCQkJZ3Bpb19zZXRfdmFsdWUoc3QtPnBkYXRhLT5ncGlvX3JhbmdlLCAxKTsKQEAgLTUzOSw4ICs1NjcsMTAgQEAKIAl9CiB9CiAKLXZvaWQgYWQ3NjA2X3Jlc3VtZShzdHJ1Y3QgYWQ3NjA2X3N0YXRlICpzdCkKK3ZvaWQgYWQ3NjA2X3Jlc3VtZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQogeworCXN0cnVjdCBhZDc2MDZfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKKwogCWlmIChzdC0+aGF2ZV9zdGJ5KSB7CiAJCWlmIChzdC0+aGF2ZV9yYW5nZSkKIAkJCWdwaW9fc2V0X3ZhbHVlKHN0LT5wZGF0YS0+Z3Bpb19yYW5nZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzYwNl9wYXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzYwNl9wYXIuYwppbmRleCA0M2E1NTRjLi5kMjEyMThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc2MDZfcGFyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3NjA2X3Bhci5jCkBAIC0xMiwxMyArMTIsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCisjaW5jbHVkZSAiLi4vaWlvLmgiCiAjaW5jbHVkZSAiYWQ3NjA2LmgiCiAKIHN0YXRpYyBpbnQgYWQ3NjA2X3BhcjE2X3JlYWRfYmxvY2soc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSBpbnQgY291bnQsIHZvaWQgKmJ1ZikKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IGFkNzYwNl9zdGF0ZSAqc3QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGFkNzYwNl9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwogCiAJaW5zdygodW5zaWduZWQgbG9uZykgc3QtPmJhc2VfYWRkcmVzcywgYnVmLCBjb3VudCk7CiAKQEAgLTMzLDcgKzM1LDggQEAKIAkJCQkgaW50IGNvdW50LCB2b2lkICpidWYpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCBhZDc2MDZfc3RhdGUgKnN0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBhZDc2MDZfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKIAogCWluc2IoKHVuc2lnbmVkIGxvbmcpIHN0LT5iYXNlX2FkZHJlc3MsIGJ1ZiwgY291bnQgKiAyKTsKIApAQCAtNDcsNyArNTAsNyBAQAogc3RhdGljIGludCBfX2RldmluaXQgYWQ3NjA2X3Bhcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCXN0cnVjdCBhZDc2MDZfc3RhdGUgKnN0OworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXY7CiAJdm9pZCBfX2lvbWVtICphZGRyOwogCXJlc291cmNlX3NpemVfdCByZW1hcF9zaXplOwogCWludCByZXQsIGlycTsKQEAgLTc1LDE3ICs3OCwxNyBAQAogCQlnb3RvIG91dDE7CiAJfQogCi0Jc3QgPSBhZDc2MDZfcHJvYmUoJnBkZXYtPmRldiwgaXJxLCBhZGRyLAorCWluZGlvX2RldiA9IGFkNzYwNl9wcm9iZSgmcGRldi0+ZGV2LCBpcnEsIGFkZHIsCiAJCQkgIHBsYXRmb3JtX2dldF9kZXZpY2VfaWQocGRldiktPmRyaXZlcl9kYXRhLAogCQkJICByZW1hcF9zaXplID4gMSA/ICZhZDc2MDZfcGFyMTZfYm9wcyA6CiAJCQkgICZhZDc2MDZfcGFyOF9ib3BzKTsKIAotCWlmIChJU19FUlIoc3QpKSAgewotCQlyZXQgPSBQVFJfRVJSKHN0KTsKKwlpZiAoSVNfRVJSKGluZGlvX2RldikpICB7CisJCXJldCA9IFBUUl9FUlIoaW5kaW9fZGV2KTsKIAkJZ290byBvdXQyOwogCX0KIAotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHN0KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmRpb19kZXYpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTk5LDEwICsxMDIsMTEgQEAKIAogc3RhdGljIGludCBfX2RldmV4aXQgYWQ3NjA2X3Bhcl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgYWQ3NjA2X3N0YXRlICpzdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgYWQ3NjA2X3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CiAKLQlhZDc2MDZfcmVtb3ZlKHN0KTsKKwlhZDc2MDZfcmVtb3ZlKGluZGlvX2Rldik7CiAKIAlpb3VubWFwKHN0LT5iYXNlX2FkZHJlc3MpOwogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CkBAIC0xMTYsMTggKzEyMCwxOCBAQAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBhZDc2MDZfcGFyX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBhZDc2MDZfc3RhdGUgKnN0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JYWQ3NjA2X3N1c3BlbmQoc3QpOworCWFkNzYwNl9zdXNwZW5kKGluZGlvX2Rldik7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhZDc2MDZfcGFyX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGFkNzYwNl9zdGF0ZSAqc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKLQlhZDc2MDZfcmVzdW1lKHN0KTsKKwlhZDc2MDZfcmVzdW1lKGluZGlvX2Rldik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzYwNl9yaW5nLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc2MDZfcmluZy5jCmluZGV4IGIzMmNiMGQuLmExOTliZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzYwNl9yaW5nLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3NjA2X3JpbmcuYwpAQCAtNyw3ICs3LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC0yMSw5OSArMjAsMTkgQEAKIAogI2luY2x1ZGUgImFkNzYwNi5oIgogCi1zdGF0aWMgSUlPX1NDQU5fRUxfQyhpbjAsIDAsIDAsIE5VTEwpOwotc3RhdGljIElJT19TQ0FOX0VMX0MoaW4xLCAxLCAwLCBOVUxMKTsKLXN0YXRpYyBJSU9fU0NBTl9FTF9DKGluMiwgMiwgMCwgTlVMTCk7Ci1zdGF0aWMgSUlPX1NDQU5fRUxfQyhpbjMsIDMsIDAsIE5VTEwpOwotc3RhdGljIElJT19TQ0FOX0VMX0MoaW40LCA0LCAwLCBOVUxMKTsKLXN0YXRpYyBJSU9fU0NBTl9FTF9DKGluNSwgNSwgMCwgTlVMTCk7Ci1zdGF0aWMgSUlPX1NDQU5fRUxfQyhpbjYsIDYsIDAsIE5VTEwpOwotc3RhdGljIElJT19TQ0FOX0VMX0MoaW43LCA3LCAwLCBOVUxMKTsKLQotc3RhdGljIElJT19TQ0FOX0VMX1RJTUVTVEFNUCg4KTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUl9TQ0FOX0VMX1RZUEUodGltZXN0YW1wLCBzLCA2NCwgNjQpOwotCi1zdGF0aWMgc3NpemVfdCBhZDc2MDZfc2hvd190eXBlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQljaGFyICpidWYpCitpbnQgYWQ3NjA2X3NjYW5fZnJvbV9yaW5nKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsIHVuc2lnbmVkIGNoKQogewotCXN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gcmluZy0+aW5kaW9fZGV2OwotCXN0cnVjdCBhZDc2MDZfc3RhdGUgKnN0ID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVjJWQvJWRcbiIsIHN0LT5jaGlwX2luZm8tPnNpZ24sCi0JCSAgICAgICBzdC0+Y2hpcF9pbmZvLT5iaXRzLCBzdC0+Y2hpcF9pbmZvLT5iaXRzKTsKLX0KLXN0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW5fdHlwZSwgU19JUlVHTywgYWQ3NjA2X3Nob3dfdHlwZSwgTlVMTCwgMCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZDc2MDZfc2Nhbl9lbF9hdHRyc1tdID0gewotCSZpaW9fc2Nhbl9lbF9pbjAuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4wX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luMS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjFfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfaW4yLmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luMl9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjMuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4zX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luNC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjRfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfaW41LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luNV9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjYuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW42X2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luNy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjdfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfdGltZXN0YW1wX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX3RpbWVzdGFtcC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl90aW1lc3RhbXBfdHlwZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW5fdHlwZS5kZXZfYXR0ci5hdHRyLAotCU5VTEwsCi19OwotCi1zdGF0aWMgbW9kZV90IGFkNzYwNl9zY2FuX2VsX2F0dHJfaXNfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCQkgICAgIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIGludCBuKQotewotCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKTsKLQlzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHJpbmctPmluZGlvX2RldjsKLQlzdHJ1Y3QgYWQ3NjA2X3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7Ci0KLQltb2RlX3QgbW9kZSA9IGF0dHItPm1vZGU7Ci0KLQlpZiAoc3QtPmNoaXBfaW5mby0+bnVtX2NoYW5uZWxzIDw9IDYgJiYKLQkJKGF0dHIgPT0gJmlpb19zY2FuX2VsX2luNy5kZXZfYXR0ci5hdHRyIHx8Ci0JCWF0dHIgPT0gJmlpb19jb25zdF9hdHRyX2luN19pbmRleC5kZXZfYXR0ci5hdHRyIHx8Ci0JCWF0dHIgPT0gJmlpb19zY2FuX2VsX2luNi5kZXZfYXR0ci5hdHRyIHx8Ci0JCWF0dHIgPT0gJmlpb19jb25zdF9hdHRyX2luNl9pbmRleC5kZXZfYXR0ci5hdHRyKSkKLQkJbW9kZSA9IDA7Ci0JZWxzZSBpZiAoc3QtPmNoaXBfaW5mby0+bnVtX2NoYW5uZWxzIDw9IDQgJiYKLQkJKGF0dHIgPT0gJmlpb19zY2FuX2VsX2luNS5kZXZfYXR0ci5hdHRyIHx8Ci0JCWF0dHIgPT0gJmlpb19jb25zdF9hdHRyX2luNV9pbmRleC5kZXZfYXR0ci5hdHRyIHx8Ci0JCWF0dHIgPT0gJmlpb19zY2FuX2VsX2luNC5kZXZfYXR0ci5hdHRyIHx8Ci0JCWF0dHIgPT0gJmlpb19jb25zdF9hdHRyX2luNF9pbmRleC5kZXZfYXR0ci5hdHRyKSkKLQkJbW9kZSA9IDA7Ci0KLQlyZXR1cm4gbW9kZTsKLX0KLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYWQ3NjA2X3NjYW5fZWxfZ3JvdXAgPSB7Ci0JLm5hbWUgPSAic2Nhbl9lbGVtZW50cyIsCi0JLmF0dHJzID0gYWQ3NjA2X3NjYW5fZWxfYXR0cnMsCi0JLmlzX3Zpc2libGUgPSBhZDc2MDZfc2Nhbl9lbF9hdHRyX2lzX3Zpc2libGUsCi19OwotCi1pbnQgYWQ3NjA2X3NjYW5fZnJvbV9yaW5nKHN0cnVjdCBhZDc2MDZfc3RhdGUgKnN0LCB1bnNpZ25lZCBjaCkKLXsKLQlzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nID0gc3QtPmluZGlvX2Rldi0+cmluZzsKKwlzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nID0gaW5kaW9fZGV2LT5yaW5nOwogCWludCByZXQ7CiAJdTE2ICpyaW5nX2RhdGE7CiAKLQlyaW5nX2RhdGEgPSBrbWFsbG9jKHJpbmctPmFjY2Vzcy5nZXRfYnl0ZXNfcGVyX2RhdHVtKHJpbmcpLCBHRlBfS0VSTkVMKTsKKwlyaW5nX2RhdGEgPSBrbWFsbG9jKHJpbmctPmFjY2Vzcy0+Z2V0X2J5dGVzX3Blcl9kYXR1bShyaW5nKSwKKwkJCSAgICBHRlBfS0VSTkVMKTsKIAlpZiAocmluZ19kYXRhID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9yZXQ7CiAJfQotCXJldCA9IHJpbmctPmFjY2Vzcy5yZWFkX2xhc3QocmluZywgKHU4ICopIHJpbmdfZGF0YSk7CisJcmV0ID0gcmluZy0+YWNjZXNzLT5yZWFkX2xhc3QocmluZywgKHU4ICopIHJpbmdfZGF0YSk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl9mcmVlX3JpbmdfZGF0YTsKIApAQCAtMTM0LDEyICs1MywxMiBAQAogICoqLwogc3RhdGljIGludCBhZDc2MDZfcmluZ19wcmVlbmFibGUoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKLQlzdHJ1Y3QgYWQ3NjA2X3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CisJc3RydWN0IGFkNzYwNl9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwogCXN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcgPSBpbmRpb19kZXYtPnJpbmc7CiAJc2l6ZV90IGRfc2l6ZTsKIAogCWRfc2l6ZSA9IHN0LT5jaGlwX2luZm8tPm51bV9jaGFubmVscyAqCi0JCSBzdC0+Y2hpcF9pbmZvLT5iaXRzIC8gODsKKwkJIHN0LT5jaGlwX2luZm8tPmNoYW5uZWxzWzBdLnNjYW5fdHlwZS5zdG9yYWdlYml0cyAvIDg7CiAKIAlpZiAocmluZy0+c2Nhbl90aW1lc3RhbXApIHsKIAkJZF9zaXplICs9IHNpemVvZihzNjQpOwpAQCAtMTQ4LDggKzY3LDggQEAKIAkJCWRfc2l6ZSArPSBzaXplb2YoczY0KSAtIChkX3NpemUgJSBzaXplb2YoczY0KSk7CiAJfQogCi0JaWYgKHJpbmctPmFjY2Vzcy5zZXRfYnl0ZXNfcGVyX2RhdHVtKQotCQlyaW5nLT5hY2Nlc3Muc2V0X2J5dGVzX3Blcl9kYXR1bShyaW5nLCBkX3NpemUpOworCWlmIChyaW5nLT5hY2Nlc3MtPnNldF9ieXRlc19wZXJfZGF0dW0pCisJCXJpbmctPmFjY2Vzcy0+c2V0X2J5dGVzX3Blcl9kYXR1bShyaW5nLCBkX3NpemUpOwogCiAJc3QtPmRfc2l6ZSA9IGRfc2l6ZTsKIApAQCAtMTU3LDE2ICs3NiwyMCBAQAogfQogCiAvKioKLSAqIGFkNzYwNl9wb2xsX2Z1bmNfdGgoKSB0aCBvZiB0cmlnZ2VyIGxhdW5jaGVkIHBvbGxpbmcgdG8gcmluZyBidWZmZXIKKyAqIGFkNzYwNl90cmlnZ2VyX2hhbmRsZXJfdGgoKSB0aC9iaCBvZiB0cmlnZ2VyIGxhdW5jaGVkIHBvbGxpbmcgdG8gcmluZyBidWZmZXIKICAqCiAgKiovCi1zdGF0aWMgdm9pZCBhZDc2MDZfcG9sbF9mdW5jX3RoKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsIHM2NCB0aW1lKQorc3RhdGljIGlycXJldHVybl90IGFkNzYwNl90cmlnZ2VyX2hhbmRsZXJfdGhfYmgoaW50IGlycSwgdm9pZCAqcCkKIHsKLQlzdHJ1Y3QgYWQ3NjA2X3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CisJc3RydWN0IGlpb19wb2xsX2Z1bmMgKnBmID0gcDsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gcGYtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYWQ3NjA2X3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CisKIAlncGlvX3NldF92YWx1ZShzdC0+cGRhdGEtPmdwaW9fY29udnN0LCAxKTsKIAotCXJldHVybjsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CisKIC8qKgogICogYWQ3NjA2X3BvbGxfYmhfdG9fcmluZygpIGJoIG9mIHRyaWdnZXIgbGF1bmNoZWQgcG9sbGluZyB0byByaW5nIGJ1ZmZlcgogICogQHdvcmtfczoJdGhlIHdvcmsgc3RydWN0IHRocm91Z2ggd2hpY2ggdGhpcyB3YXMgc2NoZWR1bGVkCkBAIC0xODAsMTcgKzEwMywxMiBAQAogewogCXN0cnVjdCBhZDc2MDZfc3RhdGUgKnN0ID0gY29udGFpbmVyX29mKHdvcmtfcywgc3RydWN0IGFkNzYwNl9zdGF0ZSwKIAkJCQkJCXBvbGxfd29yayk7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHN0LT5pbmRpb19kZXY7Ci0Jc3RydWN0IGlpb19zd19yaW5nX2J1ZmZlciAqc3dfcmluZyA9IGlpb190b19zd19yaW5nKGluZGlvX2Rldi0+cmluZyk7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGlpb19wcml2X3RvX2RldihzdCk7CiAJc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyA9IGluZGlvX2Rldi0+cmluZzsKIAlzNjQgdGltZV9uczsKIAlfX3U4ICpidWY7CiAJaW50IHJldDsKIAotCS8qIEVuc3VyZSBvbmx5IG9uZSBjb3B5IG9mIHRoaXMgZnVuY3Rpb24gcnVubmluZyBhdCBhIHRpbWUgKi8KLQlpZiAoYXRvbWljX2luY19yZXR1cm4oJnN0LT5wcm90ZWN0X3JpbmcpID4gMSkKLQkJcmV0dXJuOwotCiAJYnVmID0ga3phbGxvYyhzdC0+ZF9zaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoYnVmID09IE5VTEwpCiAJCXJldHVybjsKQEAgLTIyNSwxNiArMTQzLDIyIEBACiAJCW1lbWNweShidWYgKyBzdC0+ZF9zaXplIC0gc2l6ZW9mKHM2NCksCiAJCQkmdGltZV9ucywgc2l6ZW9mKHRpbWVfbnMpKTsKIAotCXJpbmctPmFjY2Vzcy5zdG9yZV90bygmc3dfcmluZy0+YnVmLCBidWYsIHRpbWVfbnMpOworCXJpbmctPmFjY2Vzcy0+c3RvcmVfdG8oaW5kaW9fZGV2LT5yaW5nLCBidWYsIHRpbWVfbnMpOwogZG9uZToKIAlncGlvX3NldF92YWx1ZShzdC0+cGRhdGEtPmdwaW9fY29udnN0LCAwKTsKKwlpaW9fdHJpZ2dlcl9ub3RpZnlfZG9uZShpbmRpb19kZXYtPnRyaWcpOwogCWtmcmVlKGJ1Zik7Ci0JYXRvbWljX2RlYygmc3QtPnByb3RlY3RfcmluZyk7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX3Jpbmdfc2V0dXBfb3BzIGFkNzYwNl9yaW5nX3NldHVwX29wcyA9IHsKKwkucHJlZW5hYmxlID0gJmFkNzYwNl9yaW5nX3ByZWVuYWJsZSwKKwkucG9zdGVuYWJsZSA9ICZpaW9fdHJpZ2dlcmVkX3JpbmdfcG9zdGVuYWJsZSwKKwkucHJlZGlzYWJsZSA9ICZpaW9fdHJpZ2dlcmVkX3JpbmdfcHJlZGlzYWJsZSwKK307CisKIGludCBhZDc2MDZfcmVnaXN0ZXJfcmluZ19mdW5jc19hbmRfaW5pdChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQogewotCXN0cnVjdCBhZDc2MDZfc3RhdGUgKnN0ID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKwlzdHJ1Y3QgYWQ3NjA2X3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CiAJaW50IHJldDsKIAogCWluZGlvX2Rldi0+cmluZyA9IGlpb19zd19yYl9hbGxvY2F0ZShpbmRpb19kZXYpOwpAQCAtMjQ0LDE3ICsxNjgsMjIgQEAKIAl9CiAKIAkvKiBFZmZlY3RpdmVseSBzZWxlY3QgdGhlIHJpbmcgYnVmZmVyIGltcGxlbWVudGF0aW9uICovCi0JaWlvX3Jpbmdfc3dfcmVnaXN0ZXJfZnVuY3MoJmluZGlvX2Rldi0+cmluZy0+YWNjZXNzKTsKLQlyZXQgPSBpaW9fYWxsb2NfcG9sbGZ1bmMoaW5kaW9fZGV2LCBOVUxMLCAmYWQ3NjA2X3BvbGxfZnVuY190aCk7Ci0JaWYgKHJldCkKKwlpbmRpb19kZXYtPnJpbmctPmFjY2VzcyA9ICZyaW5nX3N3X2FjY2Vzc19mdW5jczsKKwlpbmRpb19kZXYtPnBvbGxmdW5jID0gaWlvX2FsbG9jX3BvbGxmdW5jKCZhZDc2MDZfdHJpZ2dlcl9oYW5kbGVyX3RoX2JoLAorCQkJCQkJICZhZDc2MDZfdHJpZ2dlcl9oYW5kbGVyX3RoX2JoLAorCQkJCQkJIDAsCisJCQkJCQkgaW5kaW9fZGV2LAorCQkJCQkJICIlc19jb25zdW1lciVkIiwKKwkJCQkJCSBpbmRpb19kZXYtPm5hbWUsCisJCQkJCQkgaW5kaW9fZGV2LT5pZCk7CisJaWYgKGluZGlvX2Rldi0+cG9sbGZ1bmMgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX2RlYWxsb2NhdGVfc3dfcmI7CisJfQogCiAJLyogUmluZyBidWZmZXIgZnVuY3Rpb25zIC0gaGVyZSB0cmlnZ2VyIHNldHVwIHJlbGF0ZWQgKi8KIAotCWluZGlvX2Rldi0+cmluZy0+cHJlZW5hYmxlID0gJmFkNzYwNl9yaW5nX3ByZWVuYWJsZTsKLQlpbmRpb19kZXYtPnJpbmctPnBvc3RlbmFibGUgPSAmaWlvX3RyaWdnZXJlZF9yaW5nX3Bvc3RlbmFibGU7Ci0JaW5kaW9fZGV2LT5yaW5nLT5wcmVkaXNhYmxlID0gJmlpb190cmlnZ2VyZWRfcmluZ19wcmVkaXNhYmxlOwotCWluZGlvX2Rldi0+cmluZy0+c2Nhbl9lbF9hdHRycyA9ICZhZDc2MDZfc2Nhbl9lbF9ncm91cDsKKwlpbmRpb19kZXYtPnJpbmctPnNldHVwX29wcyA9ICZhZDc2MDZfcmluZ19zZXR1cF9vcHM7CiAJaW5kaW9fZGV2LT5yaW5nLT5zY2FuX3RpbWVzdGFtcCA9IHRydWUgOwogCiAJSU5JVF9XT1JLKCZzdC0+cG9sbF93b3JrLCAmYWQ3NjA2X3BvbGxfYmhfdG9fcmluZyk7CkBAIC0yNjIsNiArMTkxLDcgQEAKIAkvKiBGbGFnIHRoYXQgcG9sbGVkIHJpbmcgYnVmZmVyaW5nIGlzIHBvc3NpYmxlICovCiAJaW5kaW9fZGV2LT5tb2RlcyB8PSBJTkRJT19SSU5HX1RSSUdHRVJFRDsKIAlyZXR1cm4gMDsKKwogZXJyb3JfZGVhbGxvY2F0ZV9zd19yYjoKIAlpaW9fc3dfcmJfZnJlZShpbmRpb19kZXYtPnJpbmcpOwogZXJyb3JfcmV0OgpAQCAtMjc1LDYgKzIwNSw2IEBACiAJCWlpb190cmlnZ2VyX2RldHRhY2hfcG9sbF9mdW5jKGluZGlvX2Rldi0+dHJpZywKIAkJCQkJICAgICAgaW5kaW9fZGV2LT5wb2xsZnVuYyk7CiAJfQotCWtmcmVlKGluZGlvX2Rldi0+cG9sbGZ1bmMpOworCWlpb19kZWFsbG9jX3BvbGxmdW5jKGluZGlvX2Rldi0+cG9sbGZ1bmMpOwogCWlpb19zd19yYl9mcmVlKGluZGlvX2Rldi0+cmluZyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc2MDZfc3BpLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc2MDZfc3BpLmMKaW5kZXggZDczODQ5MS4uMDc2OWM4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3NjA2X3NwaS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzYwNl9zcGkuYwpAQCAtMTAsNiArMTAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCisjaW5jbHVkZSAiLi4vaWlvLmgiCiAjaW5jbHVkZSAiYWQ3NjA2LmgiCiAKICNkZWZpbmUgTUFYX1NQSV9GUkVRX0haCQkyMzUwMDAwMAkvKiBWRFJJVkUgYWJvdmUgNC43NSBWICovCkBAIC0zOSw0MiArNDEsNDIgQEAKIAogc3RhdGljIGludCBfX2RldmluaXQgYWQ3NjA2X3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewotCXN0cnVjdCBhZDc2MDZfc3RhdGUgKnN0OworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXY7CiAKLQlzdCA9IGFkNzYwNl9wcm9iZSgmc3BpLT5kZXYsIHNwaS0+aXJxLCBOVUxMLAorCWluZGlvX2RldiA9IGFkNzYwNl9wcm9iZSgmc3BpLT5kZXYsIHNwaS0+aXJxLCBOVUxMLAogCQkJICAgc3BpX2dldF9kZXZpY2VfaWQoc3BpKS0+ZHJpdmVyX2RhdGEsCiAJCQkgICAmYWQ3NjA2X3NwaV9ib3BzKTsKIAotCWlmIChJU19FUlIoc3QpKQotCQlyZXR1cm4gUFRSX0VSUihzdCk7CisJaWYgKElTX0VSUihpbmRpb19kZXYpKQorCQlyZXR1cm4gUFRSX0VSUihpbmRpb19kZXYpOwogCi0Jc3BpX3NldF9kcnZkYXRhKHNwaSwgc3QpOworCXNwaV9zZXRfZHJ2ZGF0YShzcGksIGluZGlvX2Rldik7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBfX2RldmV4aXQgYWQ3NjA2X3NwaV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKLQlzdHJ1Y3QgYWQ3NjA2X3N0YXRlICpzdCA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKIAotCXJldHVybiBhZDc2MDZfcmVtb3ZlKHN0KTsKKwlyZXR1cm4gYWQ3NjA2X3JlbW92ZShpbmRpb19kZXYpOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGFkNzYwNl9zcGlfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGFkNzYwNl9zdGF0ZSAqc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKLQlhZDc2MDZfc3VzcGVuZChzdCk7CisJYWQ3NjA2X3N1c3BlbmQoaW5kaW9fZGV2KTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFkNzYwNl9zcGlfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgYWQ3NjA2X3N0YXRlICpzdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAotCWFkNzYwNl9yZXN1bWUoc3QpOworCWFkNzYwNl9yZXN1bWUoaW5kaW9fZGV2KTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3NzQ1LmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc3NDUuYwppbmRleCBhYjdlZjg0Li4xOTQ0MjIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc3NDUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc3NDUuYwpAQCAtOCwxNCArOCwxMiBAQAogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9ydGMuaD4KIAogI2luY2x1ZGUgIi4uL2lpby5oIgogI2luY2x1ZGUgIi4uL3N5c2ZzLmgiCkBAIC01NSwxMiArNTMsOSBAQAogICovCiAKIHN0cnVjdCBhZDc3NHhfY2hpcF9pbmZvIHsKLQljb25zdCBjaGFyICpuYW1lOwogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldjsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdGhyZXNoX3dvcms7CiAJYm9vbCBpbnRlcjsKLQlzNjQgbGFzdF90aW1lc3RhbXA7CiAJdTE2IGNhcF9vZmZzOyAgICAgICAgICAgICAgICAgICAvKiBDYXBhY2l0aXZlIG9mZnNldCAqLwogCXUxNiBjYXBfZ2FpbjsgICAgICAgICAgICAgICAgICAgLyogQ2FwYWNpdGl2ZSBnYWluIGNhbGlicmF0aW9uICovCiAJdTE2IHZvbHRfZ2FpbjsgICAgICAgICAgICAgICAgICAvKiBWb2x0YWdlIGdhaW4gY2FsaWJyYXRpb24gKi8KQEAgLTc2LDcgKzcxLDggQEAKIAl1OCByZWdfY2ZnOwogfTsKIAotc3RydWN0IGFkNzc0eF9jb252ZXJzaW9uX21vZGUgYWQ3NzR4X2NvbnZfbW9kZV90YWJsZVtBRDc3NFhfTUFYX0NPTlZfTU9ERV0gPSB7CitzdGF0aWMgc3RydWN0IGFkNzc0eF9jb252ZXJzaW9uX21vZGUKK2FkNzc0eF9jb252X21vZGVfdGFibGVbQUQ3NzRYX01BWF9DT05WX01PREVdID0gewogCXsgImlkbGUiLCAwIH0sCiAJeyAiY29udGludW91cy1jb252ZXJzaW9uIiwgMSB9LAogCXsgInNpbmdsZS1jb252ZXJzaW9uIiwgMiB9LApAQCAtNTAyLDE3ICs0OTgsNiBAQAogCQlhZDc3NHhfc2hvd19jYXBfZ2FpbiwKIAkJYWQ3NzR4X3N0b3JlX2NhcF9nYWluKTsKIAotc3RhdGljIHNzaXplX3QgYWQ3NzR4X3Nob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljaGFyICpidWYpCi17Ci0Jc3RydWN0IGlpb19kZXYgKmRldl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGFkNzc0eF9jaGlwX2luZm8gKmNoaXAgPSBkZXZfaW5mby0+ZGV2X2RhdGE7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGNoaXAtPm5hbWUpOwotfQotCi1zdGF0aWMgSUlPX0RFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIGFkNzc0eF9zaG93X25hbWUsIE5VTEwsIDApOwotCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWQ3NzR4X2F0dHJpYnV0ZXNbXSA9IHsKIAkmaWlvX2Rldl9hdHRyX2F2YWlsYWJsZV9jb252ZXJzaW9uX21vZGVzLmRldl9hdHRyLmF0dHIsCiAJJmlpb19kZXZfYXR0cl9jb252ZXJzaW9uX21vZGUuZGV2X2F0dHIuYXR0ciwKQEAgLTUyNiw3ICs1MTEsNiBAQAogCSZpaW9fZGV2X2F0dHJfY2FwMF9yYXcuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX2NhcGRhYzBfcmF3LmRldl9hdHRyLmF0dHIsCiAJJmlpb19kZXZfYXR0cl9jYXBkYWMxX3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfbmFtZS5kZXZfYXR0ci5hdHRyLAogCU5VTEwsCiB9OwogCkBAIC01MzgsOCArNTIyLDggQEAKICAqIGRhdGEgcmVhZHkgZXZlbnRzCiAgKi8KIAotI2RlZmluZSBJSU9fRVZFTlRfQ09ERV9DQVBfUkRZICAgICBJSU9fQlVGRkVSX0VWRU5UX0NPREUoMCkKLSNkZWZpbmUgSUlPX0VWRU5UX0NPREVfVlRfUkRZICAgICAgSUlPX0JVRkZFUl9FVkVOVF9DT0RFKDEpCisjZGVmaW5lIElJT19FVkVOVF9DT0RFX0NBUF9SRFkgICAgIDAKKyNkZWZpbmUgSUlPX0VWRU5UX0NPREVfVlRfUkRZICAgICAgMQogCiAjZGVmaW5lIElJT19FVkVOVF9BVFRSX0NBUF9SRFlfU0goX2V2bGlzdCwgX3Nob3csIF9zdG9yZSwgX21hc2spCVwKIAlJSU9fRVZFTlRfQVRUUl9TSChjYXBfcmR5LCBfZXZsaXN0LCBfc2hvdywgX3N0b3JlLCBfbWFzaykKQEAgLTU0Nyw2NyArNTMxLDMzIEBACiAjZGVmaW5lIElJT19FVkVOVF9BVFRSX1ZUX1JEWV9TSChfZXZsaXN0LCBfc2hvdywgX3N0b3JlLCBfbWFzaykJXAogCUlJT19FVkVOVF9BVFRSX1NIKHZ0X3JkeSwgX2V2bGlzdCwgX3Nob3csIF9zdG9yZSwgX21hc2spCiAKLXN0YXRpYyB2b2lkIGFkNzc0eF9pbnRlcnJ1cHRfaGFuZGxlcl9iaChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmtfcykKK3N0YXRpYyBpcnFyZXR1cm5fdCBhZDc3NHhfZXZlbnRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpwcml2YXRlKQogewotCXN0cnVjdCBhZDc3NHhfY2hpcF9pbmZvICpjaGlwID0KLQkJY29udGFpbmVyX29mKHdvcmtfcywgc3RydWN0IGFkNzc0eF9jaGlwX2luZm8sIHRocmVzaF93b3JrKTsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gcHJpdmF0ZTsKKwlzdHJ1Y3QgYWQ3NzR4X2NoaXBfaW5mbyAqY2hpcCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKIAl1OCBpbnRfc3RhdHVzOwogCi0JZW5hYmxlX2lycShjaGlwLT5jbGllbnQtPmlycSk7Ci0KIAlhZDc3NHhfaTJjX3JlYWQoY2hpcCwgQUQ3NzRYX1NUQVRVUywgJmludF9zdGF0dXMsIDEpOwogCiAJaWYgKGludF9zdGF0dXMgJiBBRDc3NFhfU1RBVFVTX1JEWUNBUCkKLQkJaWlvX3B1c2hfZXZlbnQoY2hpcC0+aW5kaW9fZGV2LCAwLAotCQkJCUlJT19FVkVOVF9DT0RFX0NBUF9SRFksCi0JCQkJY2hpcC0+bGFzdF90aW1lc3RhbXApOworCQlpaW9fcHVzaF9ldmVudChpbmRpb19kZXYsIDAsCisJCQkgICAgICAgSUlPX0VWRU5UX0NPREVfQ0FQX1JEWSwKKwkJCSAgICAgICBpaW9fZ2V0X3RpbWVfbnMoKSk7CiAKIAlpZiAoaW50X3N0YXR1cyAmIEFENzc0WF9TVEFUVVNfUkRZVlQpCi0JCWlpb19wdXNoX2V2ZW50KGNoaXAtPmluZGlvX2RldiwgMCwKLQkJCQlJSU9fRVZFTlRfQ09ERV9WVF9SRFksCi0JCQkJY2hpcC0+bGFzdF90aW1lc3RhbXApOworCQlpaW9fcHVzaF9ldmVudChpbmRpb19kZXYsIDAsCisJCQkgICAgICAgSUlPX0VWRU5UX0NPREVfVlRfUkRZLAorCQkJICAgICAgIGlpb19nZXRfdGltZV9ucygpKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCBhZDc3NHhfaW50ZXJydXB0X2hhbmRsZXJfdGgoc3RydWN0IGlpb19kZXYgKmRldl9pbmZvLAotCQlpbnQgaW5kZXgsCi0JCXM2NCB0aW1lc3RhbXAsCi0JCWludCBub190ZXN0KQotewotCXN0cnVjdCBhZDc3NHhfY2hpcF9pbmZvICpjaGlwID0gZGV2X2luZm8tPmRldl9kYXRhOwotCi0JY2hpcC0+bGFzdF90aW1lc3RhbXAgPSB0aW1lc3RhbXA7Ci0Jc2NoZWR1bGVfd29yaygmY2hpcC0+dGhyZXNoX3dvcmspOwotCi0JcmV0dXJuIDA7Ci19Ci0KLUlJT19FVkVOVF9TSChkYXRhX3JkeSwgJmFkNzc0eF9pbnRlcnJ1cHRfaGFuZGxlcl90aCk7Ci0KLXN0YXRpYyBzc2l6ZV90IGFkNzc0eF9xdWVyeV9vdXRfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljaGFyICpidWYpCi17Ci0JLyoKLQkgKiBBRDc3NFggcHJvdmlkZXMgb25lIC9SRFkgcGluLCB3aGljaCBjYW4gYmUgdXNlZCBhcyBpbnRlcnJ1cHQKLQkgKiBidXQgdGhlIHBpbiBpcyBub3QgY29uZmlndXJhYmxlCi0JICovCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiMVxuIik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGFkNzc0eF9zZXRfb3V0X21vZGUoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY29uc3QgY2hhciAqYnVmLAotCQlzaXplX3QgbGVuKQotewotCXJldHVybiBsZW47Ci19Ci0KLUlJT19FVkVOVF9BVFRSX0NBUF9SRFlfU0goaWlvX2V2ZW50X2RhdGFfcmR5LCBhZDc3NHhfcXVlcnlfb3V0X21vZGUsIGFkNzc0eF9zZXRfb3V0X21vZGUsIDApOwotSUlPX0VWRU5UX0FUVFJfVlRfUkRZX1NIKGlpb19ldmVudF9kYXRhX3JkeSwgYWQ3NzR4X3F1ZXJ5X291dF9tb2RlLCBhZDc3NHhfc2V0X291dF9tb2RlLCAwKTsKK3N0YXRpYyBJSU9fQ09OU1RfQVRUUihjYXBfcmR5X2VuLCAiMSIpOworc3RhdGljIElJT19DT05TVF9BVFRSKHZ0X3JkeV9lbiwgIjEiKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkNzc0eF9ldmVudF9hdHRyaWJ1dGVzW10gPSB7Ci0JJmlpb19ldmVudF9hdHRyX2NhcF9yZHkuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfdnRfcmR5LmRldl9hdHRyLmF0dHIsCisJJmlpb19jb25zdF9hdHRyX2NhcF9yZHlfZW4uZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2NvbnN0X2F0dHJfdnRfcmR5X2VuLmRldl9hdHRyLmF0dHIsCiAJTlVMTCwKIH07CiAKQEAgLTYxNSw2ICs1NjUsMTIgQEAKIAkuYXR0cnMgPSBhZDc3NHhfZXZlbnRfYXR0cmlidXRlcywKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2luZm8gYWQ3NzR4X2luZm8gPSB7CisJLmF0dHJzID0gJmFkNzc0eF9ldmVudF9hdHRyaWJ1dGVfZ3JvdXAsCisJLmV2ZW50X2F0dHJzID0gJmFkNzc0eF9ldmVudF9hdHRyaWJ1dGVfZ3JvdXAsCisJLm51bV9pbnRlcnJ1cHRfbGluZXMgPSAxLAorCS5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEUsCit9OwogLyoKICAqIGRldmljZSBwcm9iZSBhbmQgcmVtb3ZlCiAgKi8KQEAgLTYzMywyMSArNTg5LDE4IEBACiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgY2hpcCk7CiAKIAljaGlwLT5jbGllbnQgPSBjbGllbnQ7Ci0JY2hpcC0+bmFtZSA9IGlkLT5uYW1lOwogCi0JY2hpcC0+aW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgpOworCWNoaXAtPmluZGlvX2RldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2UoMCk7CiAJaWYgKGNoaXAtPmluZGlvX2RldiA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3JfZnJlZV9jaGlwOwogCX0KIAogCS8qIEVzdGFibGlzaCB0aGF0IHRoZSBpaW9fZGV2IGlzIGEgY2hpbGQgb2YgdGhlIGkyYyBkZXZpY2UgKi8KKwljaGlwLT5pbmRpb19kZXYtPm5hbWUgPSBpZC0+bmFtZTsKIAljaGlwLT5pbmRpb19kZXYtPmRldi5wYXJlbnQgPSAmY2xpZW50LT5kZXY7Ci0JY2hpcC0+aW5kaW9fZGV2LT5hdHRycyA9ICZhZDc3NHhfYXR0cmlidXRlX2dyb3VwOwotCWNoaXAtPmluZGlvX2Rldi0+ZXZlbnRfYXR0cnMgPSAmYWQ3NzR4X2V2ZW50X2F0dHJpYnV0ZV9ncm91cDsKKwljaGlwLT5pbmRpb19kZXYtPmluZm8gPSAmYWQ3NzR4X2luZm87CiAJY2hpcC0+aW5kaW9fZGV2LT5kZXZfZGF0YSA9ICh2b2lkICopKGNoaXApOwotCWNoaXAtPmluZGlvX2Rldi0+ZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFOwotCWNoaXAtPmluZGlvX2Rldi0+bnVtX2ludGVycnVwdF9saW5lcyA9IDE7CiAJY2hpcC0+aW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOwogCiAJcmV0ID0gaWlvX2RldmljZV9yZWdpc3RlcihjaGlwLT5pbmRpb19kZXYpOwpAQCAtNjU2LDE4ICs2MDksMTQgQEAKIAlyZWdkb25lID0gMTsKIAogCWlmIChjbGllbnQtPmlycSkgewotCQlyZXQgPSBpaW9fcmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoY2xpZW50LT5pcnEsCi0JCQkJY2hpcC0+aW5kaW9fZGV2LAotCQkJCTAsCi0JCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcsCi0JCQkJImFkNzc0eCIpOworCQlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShjbGllbnQtPmlycSwKKwkJCQkJICAgTlVMTCwKKwkJCQkJICAgJmFkNzc0eF9ldmVudF9oYW5kbGVyLAorCQkJCQkgICBJUlFGX1RSSUdHRVJfRkFMTElORywKKwkJCQkJICAgImFkNzc0eCIsCisJCQkJCSAgIGNoaXAtPmluZGlvX2Rldik7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycm9yX2ZyZWVfZGV2OwotCi0JCWlpb19hZGRfZXZlbnRfdG9fbGlzdChpaW9fZXZlbnRfYXR0cl9jYXBfcmR5Lmxpc3RlbCwKLQkJCQkmY2hpcC0+aW5kaW9fZGV2LT5pbnRlcnJ1cHRzWzBdLT5ldl9saXN0KTsKLQotCQlJTklUX1dPUksoJmNoaXAtPnRocmVzaF93b3JrLCBhZDc3NHhfaW50ZXJydXB0X2hhbmRsZXJfYmgpOwogCX0KIAogCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXMgY2FwYWNpdGl2ZSBzZW5zb3IgcmVnaXN0ZXJlZCwgaXJxOiAlZFxuIiwgaWQtPm5hbWUsIGNsaWVudC0+aXJxKTsKQEAgLTY3Niw3ICs2MjUsNyBAQAogCiBlcnJvcl9mcmVlX2RldjoKIAlpZiAocmVnZG9uZSkKLQkJaWlvX2RldmljZV91bnJlZ2lzdGVyKGNoaXAtPmluZGlvX2Rldik7CisJCWZyZWVfaXJxKGNsaWVudC0+aXJxLCBjaGlwLT5pbmRpb19kZXYpOwogCWVsc2UKIAkJaWlvX2ZyZWVfZGV2aWNlKGNoaXAtPmluZGlvX2Rldik7CiBlcnJvcl9mcmVlX2NoaXA6CkBAIC02OTEsNyArNjQwLDcgQEAKIAlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gY2hpcC0+aW5kaW9fZGV2OwogCiAJaWYgKGNsaWVudC0+aXJxKQotCQlpaW9fdW5yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShpbmRpb19kZXYsIDApOworCQlmcmVlX2lycShjbGllbnQtPmlycSwgaW5kaW9fZGV2KTsKIAlpaW9fZGV2aWNlX3VucmVnaXN0ZXIoaW5kaW9fZGV2KTsKIAlrZnJlZShjaGlwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3NzgwLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc3ODAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGM3YjZjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3NzgwLmMKQEAgLTAsMCArMSwzMDEgQEAKKy8qCisgKiBBRDc3ODAvQUQ3NzgxIFNQSSBBREMgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIwMTEgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSAiLi4vaWlvLmgiCisjaW5jbHVkZSAiLi4vc3lzZnMuaCIKKyNpbmNsdWRlICIuLi9yaW5nX2dlbmVyaWMuaCIKKyNpbmNsdWRlICJhZGMuaCIKKworI2luY2x1ZGUgImFkNzc4MC5oIgorCisjZGVmaW5lIEFENzc4MF9SRFkJKDEgPDwgNykKKyNkZWZpbmUgQUQ3NzgwX0ZJTFRFUgkoMSA8PCA2KQorI2RlZmluZSBBRDc3ODBfRVJSCSgxIDw8IDUpCisjZGVmaW5lIEFENzc4MF9JRDEJKDEgPDwgNCkKKyNkZWZpbmUgQUQ3NzgwX0lEMAkoMSA8PCAzKQorI2RlZmluZSBBRDc3ODBfR0FJTgkoMSA8PCAyKQorI2RlZmluZSBBRDc3ODBfUEFUMQkoMSA8PCAxKQorI2RlZmluZSBBRDc3ODBfUEFUMAkoMSA8PCAwKQorCitzdHJ1Y3QgYWQ3NzgwX2NoaXBfaW5mbyB7CisJc3RydWN0IGlpb19jaGFuX3NwZWMJCWNoYW5uZWw7Cit9OworCitzdHJ1Y3QgYWQ3NzgwX3N0YXRlIHsKKwlzdHJ1Y3Qgc3BpX2RldmljZQkJKnNwaTsKKwljb25zdCBzdHJ1Y3QgYWQ3NzgwX2NoaXBfaW5mbwkqY2hpcF9pbmZvOworCXN0cnVjdCByZWd1bGF0b3IJCSpyZWc7CisJc3RydWN0IGFkNzc4MF9wbGF0Zm9ybV9kYXRhCSpwZGF0YTsKKwl3YWl0X3F1ZXVlX2hlYWRfdAkJd3FfZGF0YV9hdmFpbDsKKwlib29sCQkJCWRvbmU7CisJdTE2CQkJCWludF92cmVmX212OworCXN0cnVjdCBzcGlfdHJhbnNmZXIJCXhmZXI7CisJc3RydWN0IHNwaV9tZXNzYWdlCQltc2c7CisJLyoKKwkgKiBETUEgKHRodXMgY2FjaGUgY29oZXJlbmN5IG1haW50ZW5hbmNlKSByZXF1aXJlcyB0aGUKKwkgKiB0cmFuc2ZlciBidWZmZXJzIHRvIGxpdmUgaW4gdGhlaXIgb3duIGNhY2hlIGxpbmVzLgorCSAqLworCXVuc2lnbmVkIGludAkJCWRhdGEgX19fX2NhY2hlbGluZV9hbGlnbmVkOworfTsKKworZW51bSBhZDc3ODBfc3VwcG9ydGVkX2RldmljZV9pZHMgeworCUlEX0FENzc4MCwKKwlJRF9BRDc3ODEsCit9OworCitzdGF0aWMgaW50IGFkNzc4MF9yZWFkKHN0cnVjdCBhZDc3ODBfc3RhdGUgKnN0LCBpbnQgKnZhbCkKK3sKKwlpbnQgcmV0OworCisJc3BpX2J1c19sb2NrKHN0LT5zcGktPm1hc3Rlcik7CisKKwllbmFibGVfaXJxKHN0LT5zcGktPmlycSk7CisJc3QtPmRvbmUgPSBmYWxzZTsKKwlncGlvX3NldF92YWx1ZShzdC0+cGRhdGEtPmdwaW9fcGRyc3QsIDEpOworCisJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHN0LT53cV9kYXRhX2F2YWlsLCBzdC0+ZG9uZSk7CisJZGlzYWJsZV9pcnFfbm9zeW5jKHN0LT5zcGktPmlycSk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBzcGlfc3luY19sb2NrZWQoc3QtPnNwaSwgJnN0LT5tc2cpOworCSp2YWwgPSBiZTMyX3RvX2NwdShzdC0+ZGF0YSk7CitvdXQ6CisJZ3Bpb19zZXRfdmFsdWUoc3QtPnBkYXRhLT5ncGlvX3BkcnN0LCAwKTsKKwlzcGlfYnVzX3VubG9jayhzdC0+c3BpLT5tYXN0ZXIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZDc3ODBfcmVhZF9yYXcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKKwkJCSAgIHN0cnVjdCBpaW9fY2hhbl9zcGVjIGNvbnN0ICpjaGFuLAorCQkJICAgaW50ICp2YWwsCisJCQkgICBpbnQgKnZhbDIsCisJCQkgICBsb25nIG0pCit7CisJc3RydWN0IGFkNzc4MF9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOworCXN0cnVjdCBpaW9fY2hhbl9zcGVjIGNoYW5uZWwgPSBzdC0+Y2hpcF9pbmZvLT5jaGFubmVsOworCWludCByZXQsIHNtcGwgPSAwOworCXVuc2lnbmVkIGxvbmcgc2NhbGVfdXY7CisKKwlzd2l0Y2ggKG0pIHsKKwljYXNlIDA6CisJCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOworCQlyZXQgPSBhZDc3ODBfcmVhZChzdCwgJnNtcGwpOworCQltdXRleF91bmxvY2soJmluZGlvX2Rldi0+bWxvY2spOworCisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlpZiAoKHNtcGwgJiBBRDc3ODBfRVJSKSB8fAorCQkJISgoc21wbCAmIEFENzc4MF9QQVQwKSAmJiAhKHNtcGwgJiBBRDc3ODBfUEFUMSkpKQorCQkJcmV0dXJuIC1FSU87CisKKwkJKnZhbCA9IChzbXBsID4+IGNoYW5uZWwuc2Nhbl90eXBlLnNoaWZ0KSAmCisJCQkoKDEgPDwgKGNoYW5uZWwuc2Nhbl90eXBlLnJlYWxiaXRzKSkgLSAxKTsKKwkJKnZhbCAtPSAoMSA8PCAoY2hhbm5lbC5zY2FuX3R5cGUucmVhbGJpdHMgLSAxKSk7CisKKwkJaWYgKCEoc21wbCAmIEFENzc4MF9HQUlOKSkKKwkJCSp2YWwgKj0gMTI4OworCisJCXJldHVybiBJSU9fVkFMX0lOVDsKKwljYXNlICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKToKKwkJc2NhbGVfdXYgPSAoc3QtPmludF92cmVmX212ICogMTAwMDAwKQorCQkJPj4gKGNoYW5uZWwuc2Nhbl90eXBlLnJlYWxiaXRzIC0gMSk7CisJCSp2YWwgPSAgc2NhbGVfdXYgLyAxMDAwMDA7CisJCSp2YWwyID0gKHNjYWxlX3V2ICUgMTAwMDAwKSAqIDEwOworCQlyZXR1cm4gSUlPX1ZBTF9JTlRfUExVU19NSUNSTzsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWQ3NzgwX2NoaXBfaW5mbyBhZDc3ODBfY2hpcF9pbmZvX3RibFtdID0geworCVtJRF9BRDc3ODBdID0geworCQkuY2hhbm5lbCA9IElJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgTlVMTCwgMCwgMCwKKwkJCQkgICAgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkJCSAgICAwLCAwLCBJSU9fU1QoJ3MnLCAyNCwgMzIsIDgpLCAwKSwKKwl9LAorCVtJRF9BRDc3ODFdID0geworCQkuY2hhbm5lbCA9IElJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgTlVMTCwgMCwgMCwKKwkJCQkgICAgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkJCSAgICAwLCAwLCBJSU9fU1QoJ3MnLCAyMCwgMzIsIDEyKSwgMCksCisJfSwKK307CisKKy8qKgorICogIEludGVycnVwdCBoYW5kbGVyCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBhZDc3ODBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgYWQ3NzgwX3N0YXRlICpzdCA9IGRldl9pZDsKKworCXN0LT5kb25lID0gdHJ1ZTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnN0LT53cV9kYXRhX2F2YWlsKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2luZm8gYWQ3NzgwX2luZm8gPSB7CisJLnJlYWRfcmF3ID0gJmFkNzc4MF9yZWFkX3JhdywKKwkuZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgYWQ3NzgwX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IGFkNzc4MF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHNwaS0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGFkNzc4MF9zdGF0ZSAqc3Q7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldjsKKwlpbnQgcmV0LCB2b2x0YWdlX3V2ID0gMDsKKworCWlmICghcGRhdGEpIHsKKwkJZGV2X2RiZygmc3BpLT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhP1xuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWluZGlvX2RldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2Uoc2l6ZW9mKCpzdCkpOworCWlmIChpbmRpb19kZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CisKKwlzdC0+cmVnID0gcmVndWxhdG9yX2dldCgmc3BpLT5kZXYsICJ2Y2MiKTsKKwlpZiAoIUlTX0VSUihzdC0+cmVnKSkgeworCQlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHN0LT5yZWcpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcl9wdXRfcmVnOworCisJCXZvbHRhZ2VfdXYgPSByZWd1bGF0b3JfZ2V0X3ZvbHRhZ2Uoc3QtPnJlZyk7CisJfQorCisJc3QtPmNoaXBfaW5mbyA9CisJCSZhZDc3ODBfY2hpcF9pbmZvX3RibFtzcGlfZ2V0X2RldmljZV9pZChzcGkpLT5kcml2ZXJfZGF0YV07CisKKwlzdC0+cGRhdGEgPSBwZGF0YTsKKworCWlmIChwZGF0YSAmJiBwZGF0YS0+dnJlZl9tdikKKwkJc3QtPmludF92cmVmX212ID0gcGRhdGEtPnZyZWZfbXY7CisJZWxzZSBpZiAodm9sdGFnZV91dikKKwkJc3QtPmludF92cmVmX212ID0gdm9sdGFnZV91diAvIDEwMDA7CisJZWxzZQorCQlkZXZfd2Fybigmc3BpLT5kZXYsICJyZWZlcmVuY2Ugdm9sdGFnZSB1bnNwZWNpZmllZFxuIik7CisKKwlzcGlfc2V0X2RydmRhdGEoc3BpLCBpbmRpb19kZXYpOworCXN0LT5zcGkgPSBzcGk7CisKKwlpbmRpb19kZXYtPmRldi5wYXJlbnQgPSAmc3BpLT5kZXY7CisJaW5kaW9fZGV2LT5uYW1lID0gc3BpX2dldF9kZXZpY2VfaWQoc3BpKS0+bmFtZTsKKwlpbmRpb19kZXYtPm1vZGVzID0gSU5ESU9fRElSRUNUX01PREU7CisJaW5kaW9fZGV2LT5jaGFubmVscyA9ICZzdC0+Y2hpcF9pbmZvLT5jaGFubmVsOworCWluZGlvX2Rldi0+bnVtX2NoYW5uZWxzID0gMTsKKwlpbmRpb19kZXYtPmluZm8gPSAmYWQ3NzgwX2luZm87CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzdC0+d3FfZGF0YV9hdmFpbCk7CisKKwkvKiBTZXR1cCBkZWZhdWx0IG1lc3NhZ2UgKi8KKworCXN0LT54ZmVyLnJ4X2J1ZiA9ICZzdC0+ZGF0YTsKKwlzdC0+eGZlci5sZW4gPSBzdC0+Y2hpcF9pbmZvLT5jaGFubmVsLnNjYW5fdHlwZS5zdG9yYWdlYml0cyAvIDg7CisKKwlzcGlfbWVzc2FnZV9pbml0KCZzdC0+bXNnKTsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmc3QtPnhmZXIsICZzdC0+bXNnKTsKKworCXJldCA9IGdwaW9fcmVxdWVzdF9vbmUoc3QtPnBkYXRhLT5ncGlvX3BkcnN0LCBHUElPRl9PVVRfSU5JVF9MT1csCisJCQkgICAgICAgIkFENzc4MCAvUERSU1QiKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgR1BJTyBQRFJTVFxuIik7CisJCWdvdG8gZXJyb3JfZGlzYWJsZV9yZWc7CisJfQorCisJcmV0ID0gcmVxdWVzdF9pcnEoc3BpLT5pcnEsIGFkNzc4MF9pbnRlcnJ1cHQsCisJCUlSUUZfVFJJR0dFUl9GQUxMSU5HLCBzcGlfZ2V0X2RldmljZV9pZChzcGkpLT5uYW1lLCBzdCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcl9mcmVlX2dwaW87CisKKwlkaXNhYmxlX2lycShzcGktPmlycSk7CisKKwlyZXQgPSBpaW9fZGV2aWNlX3JlZ2lzdGVyKGluZGlvX2Rldik7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcl9mcmVlX2lycTsKKworCXJldHVybiAwOworCitlcnJvcl9mcmVlX2lycToKKwlmcmVlX2lycShzcGktPmlycSwgc3QpOworZXJyb3JfZnJlZV9ncGlvOgorCWdwaW9fZnJlZShzdC0+cGRhdGEtPmdwaW9fcGRyc3QpOworZXJyb3JfZGlzYWJsZV9yZWc6CisJaWYgKCFJU19FUlIoc3QtPnJlZykpCisJCXJlZ3VsYXRvcl9kaXNhYmxlKHN0LT5yZWcpOworZXJyb3JfcHV0X3JlZzoKKwlpZiAoIUlTX0VSUihzdC0+cmVnKSkKKwkJcmVndWxhdG9yX3B1dChzdC0+cmVnKTsKKworCWlpb19mcmVlX2RldmljZShpbmRpb19kZXYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZDc3ODBfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHNwaV9nZXRfZHJ2ZGF0YShzcGkpOworCXN0cnVjdCBhZDc3ODBfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKKworCWZyZWVfaXJxKHNwaS0+aXJxLCBzdCk7CisJZ3Bpb19mcmVlKHN0LT5wZGF0YS0+Z3Bpb19wZHJzdCk7CisJaWYgKCFJU19FUlIoc3QtPnJlZykpIHsKKwkJcmVndWxhdG9yX2Rpc2FibGUoc3QtPnJlZyk7CisJCXJlZ3VsYXRvcl9wdXQoc3QtPnJlZyk7CisJfQorCWlpb19kZXZpY2VfdW5yZWdpc3RlcihpbmRpb19kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZV9pZCBhZDc3ODBfaWRbXSA9IHsKKwl7ImFkNzc4MCIsIElEX0FENzc4MH0sCisJeyJhZDc3ODEiLCBJRF9BRDc3ODF9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgYWQ3NzgwX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJhZDc3ODAiLAorCQkuYnVzCT0gJnNwaV9idXNfdHlwZSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gYWQ3NzgwX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoYWQ3NzgwX3JlbW92ZSksCisJLmlkX3RhYmxlCT0gYWQ3NzgwX2lkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYWQ3NzgwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3BpX3JlZ2lzdGVyX2RyaXZlcigmYWQ3NzgwX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChhZDc3ODBfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhZDc3ODBfZXhpdCh2b2lkKQoreworCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmYWQ3NzgwX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChhZDc3ODBfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIk1pY2hhZWwgSGVubmVyaWNoIDxoZW5uZXJpY2hAYmxhY2tmaW4udWNsaW51eC5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFuYWxvZyBEZXZpY2VzIEFENzc4MC8xIEFEQyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3NzgwLmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc3ODAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2U1MTFjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3NzgwLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIEFENzc4MC9BRDc3ODEgU1BJIEFEQyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAxMSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yLgorICovCisjaWZuZGVmIElJT19BRENfQUQ3NzgwX0hfCisjZGVmaW5lIElJT19BRENfQUQ3NzgwX0hfCisKKy8qCisgKiBUT0RPOiBzdHJ1Y3QgYWQ3NzgwX3BsYXRmb3JtX2RhdGEgbmVlZHMgdG8gZ28gaW50byBpbmNsdWRlL2xpbnV4L2lpbworICovCisKKy8qIE5PVEU6CisgKiBUaGUgQUQ3NzgwIGRvZXNuJ3QgZmVhdHVyZSBhIGRlZGljYXRlZCBTUEkgY2hpcCBzZWxlY3QsIGluIGFkZGl0aW9uIGl0CisgKiBmZWF0dXJlcyBhIGR1YWwgdXNlIGRhdGEgb3V0IHJlYWR5IERPVVQvUkRZIG91dHB1dC4KKyAqIEluIG9yZGVyIHRvIGF2b2lkIGNvbnRlbnRpb25zIG9uIHRoZSBTUEkgYnVzLCBpdCdzIHRoZXJlZm9yZSBuZWNlc3NhcnkKKyAqIHRvIHVzZSBzcGkgYnVzIGxvY2tpbmcgY29tYmluZWQgd2l0aCBhIGRlZGljYXRlZCBHUElPIHRvIGNvbnRyb2wgdGhlCisgKiBwb3dlciBkb3duIHJlc2V0IHNpZ25hbCBvZiB0aGUgQUQ3NzgwLgorICoKKyAqIFRoZSBET1VUL1JEWSBvdXRwdXQgbXVzdCBhbHNvIGJlIHdpcmVkIHRvIGFuIGludGVycnVwdCBjYXBhYmxlIEdQSU8uCisgKi8KKworc3RydWN0IGFkNzc4MF9wbGF0Zm9ybV9kYXRhIHsKKwl1MTYJCQkJdnJlZl9tdjsKKwlpbnQJCQkJZ3Bpb19wZHJzdDsKK307CisKKyNlbmRpZiAvKiBJSU9fQURDX0FENzc4MF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3ODE2LmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc4MTYuYwppbmRleCBhZDc0MTVhLi4xMTM3OWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc4MTYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc4MTYuYwpAQCAtOCwxNCArOCwxMiBAQAogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvcnRjLmg+CiAKICNpbmNsdWRlICIuLi9paW8uaCIKICNpbmNsdWRlICIuLi9zeXNmcy5oIgpAQCAtNDQsMTEgKzQyLDggQEAKICAqLwogCiBzdHJ1Y3QgYWQ3ODE2X2NoaXBfaW5mbyB7Ci0JY29uc3QgY2hhciAqbmFtZTsKIAlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpX2RldjsKIAlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2OwotCXN0cnVjdCB3b3JrX3N0cnVjdCB0aHJlc2hfd29yazsKLQlzNjQgbGFzdF90aW1lc3RhbXA7CiAJdTE2IHJkd3JfcGluOwogCXUxNiBjb252ZXJ0X3BpbjsKIAl1MTYgYnVzeV9waW47CkBAIC0xODUsMTMgKzE4MCwxMyBAQAogCiAJaWYgKGRhdGEgPiBBRDc4MTZfQ1NfTUFYICYmIGRhdGEgIT0gQUQ3ODE2X0NTX01BU0spIHsKIAkJZGV2X2VycigmY2hpcC0+c3BpX2Rldi0+ZGV2LCAiSW52YWxpZCBjaGFubmVsIGlkICVsdSBmb3IgJXMuXG4iLAotCQkJZGF0YSwgY2hpcC0+bmFtZSk7CisJCQlkYXRhLCBkZXZfaW5mby0+bmFtZSk7CiAJCXJldHVybiAtRUlOVkFMOwotCX0gZWxzZSBpZiAoc3RyY21wKGNoaXAtPm5hbWUsICJhZDc4MTgiKSA9PSAwICYmIGRhdGEgPiAxKSB7CisJfSBlbHNlIGlmIChzdHJjbXAoZGV2X2luZm8tPm5hbWUsICJhZDc4MTgiKSA9PSAwICYmIGRhdGEgPiAxKSB7CiAJCWRldl9lcnIoJmNoaXAtPnNwaV9kZXYtPmRldiwKIAkJCSJJbnZhbGlkIGNoYW5uZWwgaWQgJWx1IGZvciBhZDc4MTguXG4iLCBkYXRhKTsKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfSBlbHNlIGlmIChzdHJjbXAoY2hpcC0+bmFtZSwgImFkNzgxNiIpID09IDAgJiYgZGF0YSA+IDApIHsKKwl9IGVsc2UgaWYgKHN0cmNtcChkZXZfaW5mby0+bmFtZSwgImFkNzgxNiIpID09IDAgJiYgZGF0YSA+IDApIHsKIAkJZGV2X2VycigmY2hpcC0+c3BpX2Rldi0+ZGV2LAogCQkJIkludmFsaWQgY2hhbm5lbCBpZCAlbHUgZm9yIGFkNzgxNi5cbiIsIGRhdGEpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTIzNiwyMyArMjMxLDExIEBACiAKIHN0YXRpYyBJSU9fREVWSUNFX0FUVFIodmFsdWUsIFNfSVJVR08sIGFkNzgxNl9zaG93X3ZhbHVlLCBOVUxMLCAwKTsKIAotc3RhdGljIHNzaXplX3QgYWQ3ODE2X3Nob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljaGFyICpidWYpCi17Ci0Jc3RydWN0IGlpb19kZXYgKmRldl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGFkNzgxNl9jaGlwX2luZm8gKmNoaXAgPSBkZXZfaW5mby0+ZGV2X2RhdGE7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGNoaXAtPm5hbWUpOwotfQotCi1zdGF0aWMgSUlPX0RFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIGFkNzgxNl9zaG93X25hbWUsIE5VTEwsIDApOwotCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWQ3ODE2X2F0dHJpYnV0ZXNbXSA9IHsKIAkmaWlvX2Rldl9hdHRyX2F2YWlsYWJsZV9tb2Rlcy5kZXZfYXR0ci5hdHRyLAogCSZpaW9fZGV2X2F0dHJfbW9kZS5kZXZfYXR0ci5hdHRyLAogCSZpaW9fZGV2X2F0dHJfY2hhbm5lbC5kZXZfYXR0ci5hdHRyLAogCSZpaW9fZGV2X2F0dHJfdmFsdWUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX25hbWUuZGV2X2F0dHIuYXR0ciwKIAlOVUxMLAogfTsKIApAQCAtMjY0LDM1ICsyNDcsMTkgQEAKICAqIHRlbXBlcmF0dXJlIGJvdW5kIGV2ZW50cwogICovCiAKLSNkZWZpbmUgSUlPX0VWRU5UX0NPREVfQUQ3ODE2X09USSAgICBJSU9fQlVGRkVSX0VWRU5UX0NPREUoMCkKKyNkZWZpbmUgSUlPX0VWRU5UX0NPREVfQUQ3ODE2X09USSBJSU9fVU5NT0RfRVZFTlRfQ09ERShJSU9fRVZfQ0xBU1NfVEVNUCwgXAorCQkJCQkJICAgICAgIDAsCQlcCisJCQkJCQkgICAgICAgSUlPX0VWX1RZUEVfVEhSRVNILCBcCisJCQkJCQkgICAgICAgSUlPX0VWX0RJUl9GQUxMSU5HKQogCi1zdGF0aWMgdm9pZCBhZDc4MTZfaW50ZXJydXB0X2JoKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29ya19zKQorc3RhdGljIGlycXJldHVybl90IGFkNzgxNl9ldmVudF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKnByaXZhdGUpCiB7Ci0Jc3RydWN0IGFkNzgxNl9jaGlwX2luZm8gKmNoaXAgPQotCQljb250YWluZXJfb2Yod29ya19zLCBzdHJ1Y3QgYWQ3ODE2X2NoaXBfaW5mbywgdGhyZXNoX3dvcmspOwotCi0JZW5hYmxlX2lycShjaGlwLT5zcGlfZGV2LT5pcnEpOwotCi0JaWlvX3B1c2hfZXZlbnQoY2hpcC0+aW5kaW9fZGV2LCAwLAotCQkJSUlPX0VWRU5UX0NPREVfQUQ3ODE2X09USSwKLQkJCWNoaXAtPmxhc3RfdGltZXN0YW1wKTsKKwlpaW9fcHVzaF9ldmVudChwcml2YXRlLCAwLAorCQkgICAgICAgSUlPX0VWRU5UX0NPREVfQUQ3ODE2X09USSwKKwkJICAgICAgIGlpb19nZXRfdGltZV9ucygpKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgYWQ3ODE2X2ludGVycnVwdChzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8sCi0JCWludCBpbmRleCwKLQkJczY0IHRpbWVzdGFtcCwKLQkJaW50IG5vX3Rlc3QpCi17Ci0Jc3RydWN0IGFkNzgxNl9jaGlwX2luZm8gKmNoaXAgPSBkZXZfaW5mby0+ZGV2X2RhdGE7Ci0KLQljaGlwLT5sYXN0X3RpbWVzdGFtcCA9IHRpbWVzdGFtcDsKLQlzY2hlZHVsZV93b3JrKCZjaGlwLT50aHJlc2hfd29yayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotSUlPX0VWRU5UX1NIKGFkNzgxNiwgJmFkNzgxNl9pbnRlcnJ1cHQpOwotCiBzdGF0aWMgc3NpemVfdCBhZDc4MTZfc2hvd19vdGkoc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJY2hhciAqYnVmKQpAQCAtMzUyLDExICszMTksMTEgQEAKIAlyZXR1cm4gbGVuOwogfQogCi1JSU9fRVZFTlRfQVRUUl9TSChvdGksIGlpb19ldmVudF9hZDc4MTYsCi0JCWFkNzgxNl9zaG93X290aSwgYWQ3ODE2X3NldF9vdGksIDApOworc3RhdGljIElJT19ERVZJQ0VfQVRUUihvdGksIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICAgYWQ3ODE2X3Nob3dfb3RpLCBhZDc4MTZfc2V0X290aSwgMCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZDc4MTZfZXZlbnRfYXR0cmlidXRlc1tdID0gewotCSZpaW9fZXZlbnRfYXR0cl9vdGkuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX290aS5kZXZfYXR0ci5hdHRyLAogCU5VTEwsCiB9OwogCkBAIC0zNjQsNiArMzMxLDEzIEBACiAJLmF0dHJzID0gYWQ3ODE2X2V2ZW50X2F0dHJpYnV0ZXMsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIGFkNzgxNl9pbmZvID0geworCS5hdHRycyA9ICZhZDc4MTZfYXR0cmlidXRlX2dyb3VwLAorCS5udW1faW50ZXJydXB0X2xpbmVzID0gMSwKKwkuZXZlbnRfYXR0cnMgPSAmYWQ3ODE2X2V2ZW50X2F0dHJpYnV0ZV9ncm91cCwKKwkuZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFLAorfTsKKwogLyoKICAqIGRldmljZSBwcm9iZSBhbmQgcmVtb3ZlCiAgKi8KQEAgLTM4OSwyOCArMzYzLDI3IEBACiAJZGV2X3NldF9kcnZkYXRhKCZzcGlfZGV2LT5kZXYsIGNoaXApOwogCiAJY2hpcC0+c3BpX2RldiA9IHNwaV9kZXY7Ci0JY2hpcC0+bmFtZSA9IHNwaV9kZXYtPm1vZGFsaWFzOwogCWZvciAoaSA9IDA7IGkgPD0gQUQ3ODE2X0NTX01BWDsgaSsrKQogCQljaGlwLT5vdGlfZGF0YVtpXSA9IDIwMzsKIAljaGlwLT5yZHdyX3BpbiA9IHBpbnNbMF07CiAJY2hpcC0+Y29udmVydF9waW4gPSBwaW5zWzFdOwogCWNoaXAtPmJ1c3lfcGluID0gcGluc1syXTsKIAotCXJldCA9IGdwaW9fcmVxdWVzdChjaGlwLT5yZHdyX3BpbiwgY2hpcC0+bmFtZSk7CisJcmV0ID0gZ3Bpb19yZXF1ZXN0KGNoaXAtPnJkd3JfcGluLCBzcGlfZ2V0X2RldmljZV9pZChzcGlfZGV2KS0+bmFtZSk7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZzcGlfZGV2LT5kZXYsICJGYWlsIHRvIHJlcXVlc3QgcmR3ciBncGlvIFBJTiAlZC5cbiIsCiAJCQljaGlwLT5yZHdyX3Bpbik7CiAJCWdvdG8gZXJyb3JfZnJlZV9jaGlwOwogCX0KIAlncGlvX2RpcmVjdGlvbl9pbnB1dChjaGlwLT5yZHdyX3Bpbik7Ci0JcmV0ID0gZ3Bpb19yZXF1ZXN0KGNoaXAtPmNvbnZlcnRfcGluLCBjaGlwLT5uYW1lKTsKKwlyZXQgPSBncGlvX3JlcXVlc3QoY2hpcC0+Y29udmVydF9waW4sIHNwaV9nZXRfZGV2aWNlX2lkKHNwaV9kZXYpLT5uYW1lKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJnNwaV9kZXYtPmRldiwgIkZhaWwgdG8gcmVxdWVzdCBjb252ZXJ0IGdwaW8gUElOICVkLlxuIiwKIAkJCWNoaXAtPmNvbnZlcnRfcGluKTsKIAkJZ290byBlcnJvcl9mcmVlX2dwaW9fcmR3cjsKIAl9CiAJZ3Bpb19kaXJlY3Rpb25faW5wdXQoY2hpcC0+Y29udmVydF9waW4pOwotCXJldCA9IGdwaW9fcmVxdWVzdChjaGlwLT5idXN5X3BpbiwgY2hpcC0+bmFtZSk7CisJcmV0ID0gZ3Bpb19yZXF1ZXN0KGNoaXAtPmJ1c3lfcGluLCBzcGlfZ2V0X2RldmljZV9pZChzcGlfZGV2KS0+bmFtZSk7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZzcGlfZGV2LT5kZXYsICJGYWlsIHRvIHJlcXVlc3QgYnVzeSBncGlvIFBJTiAlZC5cbiIsCiAJCQljaGlwLT5idXN5X3Bpbik7CkBAIC00MTgsMTggKzM5MSwxNSBAQAogCX0KIAlncGlvX2RpcmVjdGlvbl9pbnB1dChjaGlwLT5idXN5X3Bpbik7CiAKLQljaGlwLT5pbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKCk7CisJY2hpcC0+aW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgwKTsKIAlpZiAoY2hpcC0+aW5kaW9fZGV2ID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9mcmVlX2dwaW87CiAJfQotCisJY2hpcC0+aW5kaW9fZGV2LT5uYW1lID0gc3BpX2dldF9kZXZpY2VfaWQoc3BpX2RldiktPm5hbWU7CiAJY2hpcC0+aW5kaW9fZGV2LT5kZXYucGFyZW50ID0gJnNwaV9kZXYtPmRldjsKLQljaGlwLT5pbmRpb19kZXYtPmF0dHJzID0gJmFkNzgxNl9hdHRyaWJ1dGVfZ3JvdXA7Ci0JY2hpcC0+aW5kaW9fZGV2LT5ldmVudF9hdHRycyA9ICZhZDc4MTZfZXZlbnRfYXR0cmlidXRlX2dyb3VwOworCWNoaXAtPmluZGlvX2Rldi0+aW5mbyA9ICZhZDc4MTZfaW5mbzsKIAljaGlwLT5pbmRpb19kZXYtPmRldl9kYXRhID0gKHZvaWQgKiljaGlwOwotCWNoaXAtPmluZGlvX2Rldi0+ZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFOwotCWNoaXAtPmluZGlvX2Rldi0+bnVtX2ludGVycnVwdF9saW5lcyA9IDE7CiAJY2hpcC0+aW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOwogCiAJcmV0ID0gaWlvX2RldmljZV9yZWdpc3RlcihjaGlwLT5pbmRpb19kZXYpOwpAQCAtNDM4LDI3ICs0MDgsMTggQEAKIAogCWlmIChzcGlfZGV2LT5pcnEpIHsKIAkJLyogT25seSBsb3cgdHJpZ2dlciBpcyBzdXBwb3J0ZWQgaW4gYWQ3ODE2LzcvOCAqLwotCQlyZXQgPSBpaW9fcmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoc3BpX2Rldi0+aXJxLAotCQkJCWNoaXAtPmluZGlvX2RldiwKLQkJCQkwLAotCQkJCUlSUUZfVFJJR0dFUl9MT1csCi0JCQkJY2hpcC0+bmFtZSk7CisJCXJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHNwaV9kZXYtPmlycSwKKwkJCQkJICAgTlVMTCwKKwkJCQkJICAgJmFkNzgxNl9ldmVudF9oYW5kbGVyLAorCQkJCQkgICBJUlFGX1RSSUdHRVJfTE9XLAorCQkJCQkgICBjaGlwLT5pbmRpb19kZXYtPm5hbWUsCisJCQkJCSAgIGNoaXAtPmluZGlvX2Rldik7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycm9yX3VucmVnX2RldjsKLQotCQkvKgotCQkgKiBUaGUgZXZlbnQgaGFuZGxlciBsaXN0IGVsZW1lbnQgcmVmZXIgdG8gaWlvX2V2ZW50X2FkNzgxNi4KLQkJICogQWxsIGV2ZW50IGF0dHJpYnV0ZXMgYmluZCB0byB0aGUgc2FtZSBldmVudCBoYW5kbGVyLgotCQkgKiBTbywgb25seSByZWdpc3RlciBldmVudCBoYW5kbGVyIG9uY2UuCi0JCSAqLwotCQlpaW9fYWRkX2V2ZW50X3RvX2xpc3QoJmlpb19ldmVudF9hZDc4MTYsCi0JCQkJJmNoaXAtPmluZGlvX2Rldi0+aW50ZXJydXB0c1swXS0+ZXZfbGlzdCk7Ci0KLQkJSU5JVF9XT1JLKCZjaGlwLT50aHJlc2hfd29yaywgYWQ3ODE2X2ludGVycnVwdF9iaCk7CiAJfQogCiAJZGV2X2luZm8oJnNwaV9kZXYtPmRldiwgIiVzIHRlbXBlcmF0dXJlIHNlbnNvciBhbmQgQURDIHJlZ2lzdGVyZWQuXG4iLAotCQkJIGNoaXAtPm5hbWUpOworCQkJIGNoaXAtPmluZGlvX2Rldi0+bmFtZSk7CiAKIAlyZXR1cm4gMDsKIApAQCAtNDg1LDcgKzQ0Niw3IEBACiAKIAlkZXZfc2V0X2RydmRhdGEoJnNwaV9kZXYtPmRldiwgTlVMTCk7CiAJaWYgKHNwaV9kZXYtPmlycSkKLQkJaWlvX3VucmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoaW5kaW9fZGV2LCAwKTsKKwkJZnJlZV9pcnEoc3BpX2Rldi0+aXJxLCBpbmRpb19kZXYpOwogCWlpb19kZXZpY2VfdW5yZWdpc3RlcihpbmRpb19kZXYpOwogCWlpb19mcmVlX2RldmljZShjaGlwLT5pbmRpb19kZXYpOwogCWdwaW9fZnJlZShjaGlwLT5idXN5X3Bpbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc4ODcuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzg4Ny5oCmluZGV4IDQzOWM4MDIuLjgzNzA0NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzg4Ny5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzg4Ny5oCkBAIC00OCwyNCArNDgsMjMgQEAKIAlib29sCQkJCXVzZV9vbmNoaXBfcmVmOwogfTsKIAorLyoqCisgKiBzdHJ1Y3QgYWQ3ODg3X2NoaXBfaW5mbyAtIGNoaXAgc3BlY2lmYyBpbmZvcm1hdGlvbgorICogQGludF92cmVmX212Ogl0aGUgaW50ZXJuYWwgcmVmZXJlbmNlIHZvbHRhZ2UKKyAqIEBjaGFubmVsOgkJY2hhbm5lbCBzcGVjaWZpY2F0aW9uCisgKi8KKwogc3RydWN0IGFkNzg4N19jaGlwX2luZm8gewotCXU4CQkJCWJpdHM7CQkvKiBudW1iZXIgb2YgQURDIGJpdHMgKi8KLQl1OAkJCQlzdG9yYWdlYml0czsJLyogbnVtYmVyIG9mIGJpdHMgcmVhZCBmcm9tIHRoZSBBREMgKi8KLQl1OAkJCQlsZWZ0X3NoaWZ0OwkvKiBudW1iZXIgb2YgYml0cyB0aGUgc2FtcGxlIG11c3QgYmUgc2hpZnRlZCAqLwotCWNoYXIJCQkJc2lnbjsJCS8qIFtzXWlnbmVkIG9yIFt1XW5zaWduZWQgKi8KLQl1MTYJCQkJaW50X3ZyZWZfbXY7CS8qIGludGVybmFsIHJlZmVyZW5jZSB2b2x0YWdlICovCisJdTE2CQkJCWludF92cmVmX212OworCXN0cnVjdCBpaW9fY2hhbl9zcGVjCQljaGFubmVsWzNdOwogfTsKIAogc3RydWN0IGFkNzg4N19zdGF0ZSB7Ci0Jc3RydWN0IGlpb19kZXYJCQkqaW5kaW9fZGV2OwogCXN0cnVjdCBzcGlfZGV2aWNlCQkqc3BpOwogCWNvbnN0IHN0cnVjdCBhZDc4ODdfY2hpcF9pbmZvCSpjaGlwX2luZm87CiAJc3RydWN0IHJlZ3VsYXRvcgkJKnJlZzsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCXBvbGxfd29yazsKLQlhdG9taWNfdAkJCXByb3RlY3RfcmluZzsKIAlzaXplX3QJCQkJZF9zaXplOwogCXUxNgkJCQlpbnRfdnJlZl9tdjsKLQlib29sCQkJCWVuX2R1YWw7CiAJc3RydWN0IHNwaV90cmFuc2ZlcgkJeGZlcls0XTsKIAlzdHJ1Y3Qgc3BpX21lc3NhZ2UJCW1zZ1szXTsKIAlzdHJ1Y3Qgc3BpX21lc3NhZ2UJCSpyaW5nX21zZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzg4N19jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc4ODdfY29yZS5jCmluZGV4IDVkODVlZmEuLmRlMTRiMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzg4N19jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3ODg3X2NvcmUuYwpAQCAtMSwxOCArMSwxNSBAQAogLyoKICAqIEFENzg4NyBTUEkgQURDIGRyaXZlcgogICoKLSAqIENvcHlyaWdodCAyMDEwIEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDEwLTIwMTEgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KQEAgLTMzLDEwOCArMzAsNzUgQEAKIAlyZXR1cm4gKHN0LT5kYXRhWyhjaCAqIDIpXSA8PCA4KSB8IHN0LT5kYXRhWyhjaCAqIDIpICsgMV07CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGFkNzg4N19zY2FuKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCSAgICBjaGFyICpidWYpCitzdGF0aWMgaW50IGFkNzg4N19yZWFkX3JhdyhzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8sCisJCQkgICBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbiwKKwkJCSAgIGludCAqdmFsLAorCQkJICAgaW50ICp2YWwyLAorCQkJICAgbG9uZyBtKQogewotCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBhZDc4ODdfc3RhdGUgKnN0ID0gZGV2X2luZm8tPmRldl9kYXRhOwotCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKIAlpbnQgcmV0OworCXN0cnVjdCBhZDc4ODdfc3RhdGUgKnN0ID0gZGV2X2luZm8tPmRldl9kYXRhOworCXVuc2lnbmVkIGludCBzY2FsZV91djsKIAotCW11dGV4X2xvY2soJmRldl9pbmZvLT5tbG9jayk7Ci0JaWYgKGlpb19yaW5nX2VuYWJsZWQoZGV2X2luZm8pKQotCQlyZXQgPSBhZDc4ODdfc2Nhbl9mcm9tX3Jpbmcoc3QsIDEgPDwgdGhpc19hdHRyLT5hZGRyZXNzKTsKLQllbHNlCi0JCXJldCA9IGFkNzg4N19zY2FuX2RpcmVjdChzdCwgdGhpc19hdHRyLT5hZGRyZXNzKTsKLQltdXRleF91bmxvY2soJmRldl9pbmZvLT5tbG9jayk7CisJc3dpdGNoIChtKSB7CisJY2FzZSAwOgorCQltdXRleF9sb2NrKCZkZXZfaW5mby0+bWxvY2spOworCQlpZiAoaWlvX3JpbmdfZW5hYmxlZChkZXZfaW5mbykpCisJCQlyZXQgPSBhZDc4ODdfc2Nhbl9mcm9tX3Jpbmcoc3QsIDEgPDwgY2hhbi0+YWRkcmVzcyk7CisJCWVsc2UKKwkJCXJldCA9IGFkNzg4N19zY2FuX2RpcmVjdChzdCwgY2hhbi0+YWRkcmVzcyk7CisJCW11dGV4X3VubG9jaygmZGV2X2luZm8tPm1sb2NrKTsKIAotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIChyZXQgPj4gc3QtPmNoaXBfaW5mby0+bGVmdF9zaGlmdCkgJgotCQkgICAgICAgUkVTX01BU0soc3QtPmNoaXBfaW5mby0+Yml0cykpOwotfQotc3RhdGljIElJT19ERVZfQVRUUl9JTl9SQVcoMCwgYWQ3ODg3X3NjYW4sIDApOwotc3RhdGljIElJT19ERVZfQVRUUl9JTl9SQVcoMSwgYWQ3ODg3X3NjYW4sIDEpOwotCi1zdGF0aWMgc3NpemVfdCBhZDc4ODdfc2hvd19zY2FsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJY2hhciAqYnVmKQotewotCS8qIERyaXZlciBjdXJyZW50bHkgb25seSBzdXBwb3J0IGludGVybmFsIHZyZWYgKi8KLQlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgYWQ3ODg3X3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoZGV2X2luZm8pOwotCS8qIENvcnJlc3BvbmRzIHRvIFZyZWYgLyAyXihiaXRzKSAqLwotCXVuc2lnbmVkIGludCBzY2FsZV91diA9IChzdC0+aW50X3ZyZWZfbXYgKiAxMDAwKSA+PiBzdC0+Y2hpcF9pbmZvLT5iaXRzOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJTAzZFxuIiwgc2NhbGVfdXYgLyAxMDAwLCBzY2FsZV91diAlIDEwMDApOwotfQotc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbl9zY2FsZSwgU19JUlVHTywgYWQ3ODg3X3Nob3dfc2NhbGUsIE5VTEwsIDApOwotCi1zdGF0aWMgc3NpemVfdCBhZDc4ODdfc2hvd19uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgYWQ3ODg3X3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoZGV2X2luZm8pOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHNwaV9nZXRfZGV2aWNlX2lkKHN0LT5zcGkpLT5uYW1lKTsKLX0KLXN0YXRpYyBJSU9fREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgYWQ3ODg3X3Nob3dfbmFtZSwgTlVMTCwgMCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZDc4ODdfYXR0cmlidXRlc1tdID0gewotCSZpaW9fZGV2X2F0dHJfaW4wX3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW4xX3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW5fc2NhbGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX25hbWUuZGV2X2F0dHIuYXR0ciwKLQlOVUxMLAotfTsKLQotc3RhdGljIG1vZGVfdCBhZDc4ODdfYXR0cl9pc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJCSAgICAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgaW50IG4pCi17Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopOwotCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBhZDc4ODdfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShkZXZfaW5mbyk7Ci0KLQltb2RlX3QgbW9kZSA9IGF0dHItPm1vZGU7Ci0KLQlpZiAoKGF0dHIgPT0gJmlpb19kZXZfYXR0cl9pbjFfcmF3LmRldl9hdHRyLmF0dHIpICYmICFzdC0+ZW5fZHVhbCkKLQkJCW1vZGUgPSAwOwotCi0JcmV0dXJuIG1vZGU7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJKnZhbCA9IChyZXQgPj4gc3QtPmNoaXBfaW5mby0+Y2hhbm5lbFswXS5zY2FuX3R5cGUuc2hpZnQpICYKKwkJCVJFU19NQVNLKHN0LT5jaGlwX2luZm8tPmNoYW5uZWxbMF0uc2Nhbl90eXBlLnJlYWxiaXRzKTsKKwkJcmV0dXJuIElJT19WQUxfSU5UOworCWNhc2UgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpOgorCQlzY2FsZV91diA9IChzdC0+aW50X3ZyZWZfbXYgKiAxMDAwKQorCQkJPj4gc3QtPmNoaXBfaW5mby0+Y2hhbm5lbFswXS5zY2FuX3R5cGUucmVhbGJpdHM7CisJCSp2YWwgPSAgc2NhbGVfdXYvMTAwMDsKKwkJKnZhbDIgPSAoc2NhbGVfdXYlMTAwMCkqMTAwMDsKKwkJcmV0dXJuIElJT19WQUxfSU5UX1BMVVNfTUlDUk87CisJfQorCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZDc4ODdfYXR0cmlidXRlX2dyb3VwID0gewotCS5hdHRycyA9IGFkNzg4N19hdHRyaWJ1dGVzLAotCS5pc192aXNpYmxlID0gYWQ3ODg3X2F0dHJfaXNfdmlzaWJsZSwKLX07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWQ3ODg3X2NoaXBfaW5mbyBhZDc4ODdfY2hpcF9pbmZvX3RibFtdID0gewogCS8qCiAJICogTW9yZSBkZXZpY2VzIGFkZGVkIGluIGZ1dHVyZQogCSAqLwogCVtJRF9BRDc4ODddID0gewotCQkuYml0cyA9IDEyLAotCQkuc3RvcmFnZWJpdHMgPSAxNiwKLQkJLmxlZnRfc2hpZnQgPSAwLAotCQkuc2lnbiA9IElJT19TQ0FOX0VMX1RZUEVfVU5TSUdORUQsCisJCS5jaGFubmVsWzBdID0gSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCAxLCAwLAorCQkJCSAgICAgICAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCQkJICAgICAgIDEsIDEsIElJT19TVCgndScsIDEyLCAxNiwgMCksIDApLAorCisJCS5jaGFubmVsWzFdID0gSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCAwLCAwLAorCQkJCSAgICAgICAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCQkJICAgICAgIDAsIDAsIElJT19TVCgndScsIDEyLCAxNiwgMCksIDApLAorCisJCS5jaGFubmVsWzJdID0gSUlPX0NIQU5fU09GVF9USU1FU1RBTVAoMiksCiAJCS5pbnRfdnJlZl9tdiA9IDI1MDAsCiAJfSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2luZm8gYWQ3ODg3X2luZm8gPSB7CisJLnJlYWRfcmF3ID0gJmFkNzg4N19yZWFkX3JhdywKKwkuZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFLAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgYWQ3ODg3X3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CiAJc3RydWN0IGFkNzg4N19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHNwaS0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IGFkNzg4N19zdGF0ZSAqc3Q7Ci0JaW50IHJldCwgdm9sdGFnZV91diA9IDA7CisJaW50IHJldCwgdm9sdGFnZV91diA9IDAsIHJlZ2RvbmUgPSAwOworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKHNpemVvZigqc3QpKTsKIAotCXN0ID0ga3phbGxvYyhzaXplb2YoKnN0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHN0ID09IE5VTEwpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJvcl9yZXQ7Ci0JfQorCWlmIChpbmRpb19kZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CiAKIAlzdC0+cmVnID0gcmVndWxhdG9yX2dldCgmc3BpLT5kZXYsICJ2Y2MiKTsKIAlpZiAoIUlTX0VSUihzdC0+cmVnKSkgewpAQCAtMTQ4LDIzICsxMTIsMTUgQEAKIAlzdC0+Y2hpcF9pbmZvID0KIAkJJmFkNzg4N19jaGlwX2luZm9fdGJsW3NwaV9nZXRfZGV2aWNlX2lkKHNwaSktPmRyaXZlcl9kYXRhXTsKIAotCXNwaV9zZXRfZHJ2ZGF0YShzcGksIHN0KTsKLQotCWF0b21pY19zZXQoJnN0LT5wcm90ZWN0X3JpbmcsIDApOworCXNwaV9zZXRfZHJ2ZGF0YShzcGksIGluZGlvX2Rldik7CiAJc3QtPnNwaSA9IHNwaTsKIAotCXN0LT5pbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKHN0LT5pbmRpb19kZXYgPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yX2Rpc2FibGVfcmVnOwotCX0KLQogCS8qIEVzdGFiaWxpc2ggdGhhdCB0aGUgaWlvX2RldiBpcyBhIGNoaWxkIG9mIHRoZSBzcGkgZGV2aWNlICovCi0Jc3QtPmluZGlvX2Rldi0+ZGV2LnBhcmVudCA9ICZzcGktPmRldjsKLQlzdC0+aW5kaW9fZGV2LT5hdHRycyA9ICZhZDc4ODdfYXR0cmlidXRlX2dyb3VwOwotCXN0LT5pbmRpb19kZXYtPmRldl9kYXRhID0gKHZvaWQgKikoc3QpOwotCXN0LT5pbmRpb19kZXYtPmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRTsKLQlzdC0+aW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOworCWluZGlvX2Rldi0+ZGV2LnBhcmVudCA9ICZzcGktPmRldjsKKwlpbmRpb19kZXYtPm5hbWUgPSBzcGlfZ2V0X2RldmljZV9pZChzcGkpLT5uYW1lOworCWluZGlvX2Rldi0+ZGV2X2RhdGEgPSAodm9pZCAqKShzdCk7CisJaW5kaW9fZGV2LT5pbmZvID0gJmFkNzg4N19pbmZvOworCWluZGlvX2Rldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1RfTU9ERTsKIAogCS8qIFNldHVwIGRlZmF1bHQgbWVzc2FnZSAqLwogCkBAIC0yMDgsOCArMTY0LDYgQEAKIAkJc3BpX21lc3NhZ2VfaW5pdCgmc3QtPm1zZ1tBRDc4ODdfQ0gxXSk7CiAJCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZzdC0+eGZlclszXSwgJnN0LT5tc2dbQUQ3ODg3X0NIMV0pOwogCi0JCXN0LT5lbl9kdWFsID0gdHJ1ZTsKLQogCQlpZiAocGRhdGEgJiYgcGRhdGEtPnZyZWZfbXYpCiAJCQlzdC0+aW50X3ZyZWZfbXYgPSBwZGF0YS0+dnJlZl9tdjsKIAkJZWxzZSBpZiAodm9sdGFnZV91dikKQEAgLTIxNyw2ICsxNzEsOCBAQAogCQllbHNlCiAJCQlkZXZfd2Fybigmc3BpLT5kZXYsICJyZWZlcmVuY2Ugdm9sdGFnZSB1bnNwZWNpZmllZFxuIik7CiAKKwkJaW5kaW9fZGV2LT5jaGFubmVscyA9IHN0LT5jaGlwX2luZm8tPmNoYW5uZWw7CisJCWluZGlvX2Rldi0+bnVtX2NoYW5uZWxzID0gMzsKIAl9IGVsc2UgewogCQlpZiAocGRhdGEgJiYgcGRhdGEtPnZyZWZfbXYpCiAJCQlzdC0+aW50X3ZyZWZfbXYgPSBwZGF0YS0+dnJlZl9tdjsKQEAgLTIyNCw1MCArMTgwLDU2IEBACiAJCQlzdC0+aW50X3ZyZWZfbXYgPSBzdC0+Y2hpcF9pbmZvLT5pbnRfdnJlZl9tdjsKIAkJZWxzZQogCQkJZGV2X3dhcm4oJnNwaS0+ZGV2LCAicmVmZXJlbmNlIHZvbHRhZ2UgdW5zcGVjaWZpZWRcbiIpOworCisJCWluZGlvX2Rldi0+Y2hhbm5lbHMgPSAmc3QtPmNoaXBfaW5mby0+Y2hhbm5lbFsxXTsKKwkJaW5kaW9fZGV2LT5udW1fY2hhbm5lbHMgPSAyOwogCX0KIAotCi0JcmV0ID0gYWQ3ODg3X3JlZ2lzdGVyX3JpbmdfZnVuY3NfYW5kX2luaXQoc3QtPmluZGlvX2Rldik7CisJcmV0ID0gYWQ3ODg3X3JlZ2lzdGVyX3JpbmdfZnVuY3NfYW5kX2luaXQoaW5kaW9fZGV2KTsKIAlpZiAocmV0KQotCQlnb3RvIGVycm9yX2ZyZWVfZGV2aWNlOworCQlnb3RvIGVycm9yX2Rpc2FibGVfcmVnOwogCi0JcmV0ID0gaWlvX2RldmljZV9yZWdpc3RlcihzdC0+aW5kaW9fZGV2KTsKKwlyZXQgPSBpaW9fZGV2aWNlX3JlZ2lzdGVyKGluZGlvX2Rldik7CiAJaWYgKHJldCkKLQkJZ290byBlcnJvcl9mcmVlX2RldmljZTsKKwkJZ290byBlcnJvcl9kaXNhYmxlX3JlZzsKKwlyZWdkb25lID0gMTsKIAotCXJldCA9IGlpb19yaW5nX2J1ZmZlcl9yZWdpc3RlcihzdC0+aW5kaW9fZGV2LT5yaW5nLCAwKTsKKwlyZXQgPSBpaW9fcmluZ19idWZmZXJfcmVnaXN0ZXJfZXgoaW5kaW9fZGV2LT5yaW5nLCAwLAorCQkJCQkgIGluZGlvX2Rldi0+Y2hhbm5lbHMsCisJCQkJCSAgaW5kaW9fZGV2LT5udW1fY2hhbm5lbHMpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfY2xlYW51cF9yaW5nOwogCXJldHVybiAwOwogCiBlcnJvcl9jbGVhbnVwX3Jpbmc6Ci0JYWQ3ODg3X3JpbmdfY2xlYW51cChzdC0+aW5kaW9fZGV2KTsKLQlpaW9fZGV2aWNlX3VucmVnaXN0ZXIoc3QtPmluZGlvX2Rldik7Ci1lcnJvcl9mcmVlX2RldmljZToKLQlpaW9fZnJlZV9kZXZpY2Uoc3QtPmluZGlvX2Rldik7CisJYWQ3ODg3X3JpbmdfY2xlYW51cChpbmRpb19kZXYpOwogZXJyb3JfZGlzYWJsZV9yZWc6CiAJaWYgKCFJU19FUlIoc3QtPnJlZykpCiAJCXJlZ3VsYXRvcl9kaXNhYmxlKHN0LT5yZWcpOwogZXJyb3JfcHV0X3JlZzoKIAlpZiAoIUlTX0VSUihzdC0+cmVnKSkKIAkJcmVndWxhdG9yX3B1dChzdC0+cmVnKTsKLQlrZnJlZShzdCk7Ci1lcnJvcl9yZXQ6CisJaWYgKHJlZ2RvbmUpCisJCWlpb19kZXZpY2VfdW5yZWdpc3RlcihpbmRpb19kZXYpOworCWVsc2UKKwkJaWlvX2ZyZWVfZGV2aWNlKGluZGlvX2Rldik7CisKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGFkNzg4N19yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKLQlzdHJ1Y3QgYWQ3ODg3X3N0YXRlICpzdCA9IHNwaV9nZXRfZHJ2ZGF0YShzcGkpOwotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBzdC0+aW5kaW9fZGV2OworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKKwlzdHJ1Y3QgYWQ3ODg3X3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CisKIAlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihpbmRpb19kZXYtPnJpbmcpOwogCWFkNzg4N19yaW5nX2NsZWFudXAoaW5kaW9fZGV2KTsKLQlpaW9fZGV2aWNlX3VucmVnaXN0ZXIoaW5kaW9fZGV2KTsKIAlpZiAoIUlTX0VSUihzdC0+cmVnKSkgewogCQlyZWd1bGF0b3JfZGlzYWJsZShzdC0+cmVnKTsKIAkJcmVndWxhdG9yX3B1dChzdC0+cmVnKTsKIAl9Ci0Ja2ZyZWUoc3QpOworCWlpb19kZXZpY2VfdW5yZWdpc3RlcihpbmRpb19kZXYpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzg4N19yaW5nLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc4ODdfcmluZy5jCmluZGV4IGRhNzdmMjYuLjBlNGE1ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzg4N19yaW5nLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3ODg3X3JpbmcuYwpAQCAtMSwyMCArMSwxNyBAQAogLyoKLSAqIENvcHlyaWdodCAyMDEwIEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDEwLTIwMTEgQW5hbG9nIERldmljZXMgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDA4IEpvbmF0aGFuIENhbWVyb24KICAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIuCiAgKgogICogYWQ3ODg3X3JpbmcuYwogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KIAogI2luY2x1ZGUgIi4uL2lpby5oIgpAQCAtMjUsNjQgKzIyLDkgQEAKIAogI2luY2x1ZGUgImFkNzg4Ny5oIgogCi1zdGF0aWMgSUlPX1NDQU5fRUxfQyhpbjAsIDAsIDAsIE5VTEwpOwotc3RhdGljIElJT19TQ0FOX0VMX0MoaW4xLCAxLCAwLCBOVUxMKTsKLXN0YXRpYyBJSU9fU0NBTl9FTF9USU1FU1RBTVAoMik7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfU0NBTl9FTF9UWVBFKHRpbWVzdGFtcCwgcywgNjQsIDY0KTsKLQotc3RhdGljIHNzaXplX3QgYWQ3ODg3X3Nob3dfdHlwZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJY2hhciAqYnVmKQotewotCXN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gcmluZy0+aW5kaW9fZGV2OwotCXN0cnVjdCBhZDc4ODdfc3RhdGUgKnN0ID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVjJWQvJWQ+PiVkXG4iLCBzdC0+Y2hpcF9pbmZvLT5zaWduLAotCQkgICAgICAgc3QtPmNoaXBfaW5mby0+Yml0cywgc3QtPmNoaXBfaW5mby0+c3RvcmFnZWJpdHMsCi0JCSAgICAgICBzdC0+Y2hpcF9pbmZvLT5sZWZ0X3NoaWZ0KTsKLX0KLXN0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW5fdHlwZSwgU19JUlVHTywgYWQ3ODg3X3Nob3dfdHlwZSwgTlVMTCwgMCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZDc4ODdfc2Nhbl9lbF9hdHRyc1tdID0gewotCSZpaW9fc2Nhbl9lbF9pbjAuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4wX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luMS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjFfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfdGltZXN0YW1wX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX3RpbWVzdGFtcC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl90aW1lc3RhbXBfdHlwZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW5fdHlwZS5kZXZfYXR0ci5hdHRyLAotCU5VTEwsCi19OwotCi1zdGF0aWMgbW9kZV90IGFkNzg4N19zY2FuX2VsX2F0dHJfaXNfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCQkgICAgIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIGludCBuKQotewotCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKTsKLQlzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHJpbmctPmluZGlvX2RldjsKLQlzdHJ1Y3QgYWQ3ODg3X3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7Ci0KLQltb2RlX3QgbW9kZSA9IGF0dHItPm1vZGU7Ci0KLQlpZiAoKGF0dHIgPT0gJmlpb19zY2FuX2VsX2luMS5kZXZfYXR0ci5hdHRyKSB8fAotCQkoYXR0ciA9PSAmaWlvX2NvbnN0X2F0dHJfaW4xX2luZGV4LmRldl9hdHRyLmF0dHIpKQotCQlpZiAoIXN0LT5lbl9kdWFsKQotCQkJbW9kZSA9IDA7Ci0KLQlyZXR1cm4gbW9kZTsKLX0KLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYWQ3ODg3X3NjYW5fZWxfZ3JvdXAgPSB7Ci0JLm5hbWUgPSAic2Nhbl9lbGVtZW50cyIsCi0JLmF0dHJzID0gYWQ3ODg3X3NjYW5fZWxfYXR0cnMsCi0JLmlzX3Zpc2libGUgPSBhZDc4ODdfc2Nhbl9lbF9hdHRyX2lzX3Zpc2libGUsCi19OwotCiBpbnQgYWQ3ODg3X3NjYW5fZnJvbV9yaW5nKHN0cnVjdCBhZDc4ODdfc3RhdGUgKnN0LCBsb25nIG1hc2spCiB7Ci0Jc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyA9IHN0LT5pbmRpb19kZXYtPnJpbmc7CisJc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyA9IGlpb19wcml2X3RvX2RldihzdCktPnJpbmc7CiAJaW50IGNvdW50ID0gMCwgcmV0OwogCXUxNiAqcmluZ19kYXRhOwogCkBAIC05MSwxMiArMzMsMTMgQEAKIAkJZ290byBlcnJvcl9yZXQ7CiAJfQogCi0JcmluZ19kYXRhID0ga21hbGxvYyhyaW5nLT5hY2Nlc3MuZ2V0X2J5dGVzX3Blcl9kYXR1bShyaW5nKSwgR0ZQX0tFUk5FTCk7CisJcmluZ19kYXRhID0ga21hbGxvYyhyaW5nLT5hY2Nlc3MtPmdldF9ieXRlc19wZXJfZGF0dW0ocmluZyksCisJCQkgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKHJpbmdfZGF0YSA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3JfcmV0OwogCX0KLQlyZXQgPSByaW5nLT5hY2Nlc3MucmVhZF9sYXN0KHJpbmcsICh1OCAqKSByaW5nX2RhdGEpOworCXJldCA9IHJpbmctPmFjY2Vzcy0+cmVhZF9sYXN0KHJpbmcsICh1OCAqKSByaW5nX2RhdGEpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfZnJlZV9yaW5nX2RhdGE7CiAKQEAgLTEyNCw3ICs2Nyw4IEBACiAJc3RydWN0IGFkNzg4N19zdGF0ZSAqc3QgPSBpbmRpb19kZXYtPmRldl9kYXRhOwogCXN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcgPSBpbmRpb19kZXYtPnJpbmc7CiAKLQlzdC0+ZF9zaXplID0gcmluZy0+c2Nhbl9jb3VudCAqIHN0LT5jaGlwX2luZm8tPnN0b3JhZ2ViaXRzIC8gODsKKwlzdC0+ZF9zaXplID0gcmluZy0+c2Nhbl9jb3VudCAqCisJCXN0LT5jaGlwX2luZm8tPmNoYW5uZWxbMF0uc2Nhbl90eXBlLnN0b3JhZ2ViaXRzIC8gODsKIAogCWlmIChyaW5nLT5zY2FuX3RpbWVzdGFtcCkgewogCQlzdC0+ZF9zaXplICs9IHNpemVvZihzNjQpOwpAQCAtMTMzLDggKzc3LDggQEAKIAkJCXN0LT5kX3NpemUgKz0gc2l6ZW9mKHM2NCkgLSAoc3QtPmRfc2l6ZSAlIHNpemVvZihzNjQpKTsKIAl9CiAKLQlpZiAoaW5kaW9fZGV2LT5yaW5nLT5hY2Nlc3Muc2V0X2J5dGVzX3Blcl9kYXR1bSkKLQkJaW5kaW9fZGV2LT5yaW5nLT5hY2Nlc3Muc2V0X2J5dGVzX3Blcl9kYXR1bShpbmRpb19kZXYtPnJpbmcsCisJaWYgKGluZGlvX2Rldi0+cmluZy0+YWNjZXNzLT5zZXRfYnl0ZXNfcGVyX2RhdHVtKQorCQlpbmRpb19kZXYtPnJpbmctPmFjY2Vzcy0+c2V0X2J5dGVzX3Blcl9kYXR1bShpbmRpb19kZXYtPnJpbmcsCiAJCQkJCQkJICAgIHN0LT5kX3NpemUpOwogCiAJc3dpdGNoIChyaW5nLT5zY2FuX21hc2spIHsKQEAgLTE2Myw0OCArMTA3LDI3IEBACiB9CiAKIC8qKgotICogYWQ3ODg3X3BvbGxfZnVuY190aCgpIHRoIG9mIHRyaWdnZXIgbGF1bmNoZWQgcG9sbGluZyB0byByaW5nIGJ1ZmZlcgotICoKLSAqIEFzIHNhbXBsaW5nIG9ubHkgb2NjdXJzIG9uIHNwaSBjb21tcyBvY2N1cnJpbmcsIGxlYXZlIHRpbWVzdGFtcGluZyB1bnRpbAotICogdGhlbi4gIFNvbWUgdHJpZ2dlcnMgd2lsbCBnZW5lcmF0ZSB0aGVpciBvd24gdGltZSBzdGFtcC4gIEN1cnJlbnRseQotICogdGhlcmUgaXMgbm8gd2F5IG9mIG5vdGlmeWluZyB0aGVtIHdoZW4gbm8gb25lIGNhcmVzLgotICoqLwotc3RhdGljIHZvaWQgYWQ3ODg3X3BvbGxfZnVuY190aChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LCBzNjQgdGltZSkKLXsKLQlzdHJ1Y3QgYWQ3ODg3X3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7Ci0KLQlzY2hlZHVsZV93b3JrKCZzdC0+cG9sbF93b3JrKTsKLQlyZXR1cm47Ci19Ci0vKioKLSAqIGFkNzg4N19wb2xsX2JoX3RvX3JpbmcoKSBiaCBvZiB0cmlnZ2VyIGxhdW5jaGVkIHBvbGxpbmcgdG8gcmluZyBidWZmZXIKLSAqIEB3b3JrX3M6CXRoZSB3b3JrIHN0cnVjdCB0aHJvdWdoIHdoaWNoIHRoaXMgd2FzIHNjaGVkdWxlZAorICogYWQ3ODg3X3RyaWdnZXJfaGFuZGxlcigpIGJoIG9mIHRyaWdnZXIgbGF1bmNoZWQgcG9sbGluZyB0byByaW5nIGJ1ZmZlcgogICoKICAqIEN1cnJlbnRseSB0aGVyZSBpcyBubyBvcHRpb24gaW4gdGhpcyBkcml2ZXIgdG8gZGlzYWJsZSB0aGUgc2F2aW5nIG9mCiAgKiB0aW1lc3RhbXBzIHdpdGhpbiB0aGUgcmluZy4KLSAqIEkgdGhpbmsgdGhlIG9uZSBjb3B5IG9mIHRoaXMgYXQgYSB0aW1lIHdhcyB0byBhdm9pZCBwcm9ibGVtcyBpZiB0aGUKLSAqIHRyaWdnZXIgd2FzIHNldCBmYXIgdG9vIGhpZ2ggYW5kIHRoZSByZWFkcyB0aGVuIGxvY2tlZCB1cCB0aGUgY29tcHV0ZXIuCiAgKiovCi1zdGF0aWMgdm9pZCBhZDc4ODdfcG9sbF9iaF90b19yaW5nKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29ya19zKQorc3RhdGljIGlycXJldHVybl90IGFkNzg4N190cmlnZ2VyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqcCkKIHsKLQlzdHJ1Y3QgYWQ3ODg3X3N0YXRlICpzdCA9IGNvbnRhaW5lcl9vZih3b3JrX3MsIHN0cnVjdCBhZDc4ODdfc3RhdGUsCi0JCQkJCQkgIHBvbGxfd29yayk7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHN0LT5pbmRpb19kZXY7Ci0Jc3RydWN0IGlpb19zd19yaW5nX2J1ZmZlciAqc3dfcmluZyA9IGlpb190b19zd19yaW5nKGluZGlvX2Rldi0+cmluZyk7CisJc3RydWN0IGlpb19wb2xsX2Z1bmMgKnBmID0gcDsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gcGYtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYWQ3ODg3X3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKIAlzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nID0gaW5kaW9fZGV2LT5yaW5nOwogCXM2NCB0aW1lX25zOwogCV9fdTggKmJ1ZjsKIAlpbnQgYl9zZW50OwogCi0JdW5zaWduZWQgaW50IGJ5dGVzID0gcmluZy0+c2Nhbl9jb3VudCAqIHN0LT5jaGlwX2luZm8tPnN0b3JhZ2ViaXRzIC8gODsKLQotCS8qIEVuc3VyZSBvbmx5IG9uZSBjb3B5IG9mIHRoaXMgZnVuY3Rpb24gcnVubmluZyBhdCBhIHRpbWUgKi8KLQlpZiAoYXRvbWljX2luY19yZXR1cm4oJnN0LT5wcm90ZWN0X3JpbmcpID4gMSkKLQkJcmV0dXJuOworCXVuc2lnbmVkIGludCBieXRlcyA9IHJpbmctPnNjYW5fY291bnQgKgorCQlzdC0+Y2hpcF9pbmZvLT5jaGFubmVsWzBdLnNjYW5fdHlwZS5zdG9yYWdlYml0cyAvIDg7CiAKIAlidWYgPSBremFsbG9jKHN0LT5kX3NpemUsIEdGUF9LRVJORUwpOwogCWlmIChidWYgPT0gTlVMTCkKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT01FTTsKIAogCWJfc2VudCA9IHNwaV9zeW5jKHN0LT5zcGksIHN0LT5yaW5nX21zZyk7CiAJaWYgKGJfc2VudCkKQEAgLTIxNSwxNyArMTM4LDI1IEBACiAJbWVtY3B5KGJ1Ziwgc3QtPmRhdGEsIGJ5dGVzKTsKIAlpZiAocmluZy0+c2Nhbl90aW1lc3RhbXApCiAJCW1lbWNweShidWYgKyBzdC0+ZF9zaXplIC0gc2l6ZW9mKHM2NCksCi0JCQkmdGltZV9ucywgc2l6ZW9mKHRpbWVfbnMpKTsKKwkJICAgICAgICZ0aW1lX25zLCBzaXplb2YodGltZV9ucykpOwogCi0JaW5kaW9fZGV2LT5yaW5nLT5hY2Nlc3Muc3RvcmVfdG8oJnN3X3JpbmctPmJ1ZiwgYnVmLCB0aW1lX25zKTsKKwlpbmRpb19kZXYtPnJpbmctPmFjY2Vzcy0+c3RvcmVfdG8oaW5kaW9fZGV2LT5yaW5nLCBidWYsIHRpbWVfbnMpOwogZG9uZToKIAlrZnJlZShidWYpOwotCWF0b21pY19kZWMoJnN0LT5wcm90ZWN0X3JpbmcpOworCWlpb190cmlnZ2VyX25vdGlmeV9kb25lKGluZGlvX2Rldi0+dHJpZyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX3Jpbmdfc2V0dXBfb3BzIGFkNzg4N19yaW5nX3NldHVwX29wcyA9IHsKKwkucHJlZW5hYmxlID0gJmFkNzg4N19yaW5nX3ByZWVuYWJsZSwKKwkucG9zdGVuYWJsZSA9ICZpaW9fdHJpZ2dlcmVkX3JpbmdfcG9zdGVuYWJsZSwKKwkucHJlZGlzYWJsZSA9ICZpaW9fdHJpZ2dlcmVkX3JpbmdfcHJlZGlzYWJsZSwKKwkucG9zdGRpc2FibGUgPSAmYWQ3ODg3X3JpbmdfcG9zdGRpc2FibGUsCit9OworCiBpbnQgYWQ3ODg3X3JlZ2lzdGVyX3JpbmdfZnVuY3NfYW5kX2luaXQoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKLQlzdHJ1Y3QgYWQ3ODg3X3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CiAJaW50IHJldDsKIAogCWluZGlvX2Rldi0+cmluZyA9IGlpb19zd19yYl9hbGxvY2F0ZShpbmRpb19kZXYpOwpAQCAtMjM0LDI1ICsxNjUsMjQgQEAKIAkJZ290byBlcnJvcl9yZXQ7CiAJfQogCS8qIEVmZmVjdGl2ZWx5IHNlbGVjdCB0aGUgcmluZyBidWZmZXIgaW1wbGVtZW50YXRpb24gKi8KLQlpaW9fcmluZ19zd19yZWdpc3Rlcl9mdW5jcygmaW5kaW9fZGV2LT5yaW5nLT5hY2Nlc3MpOwotCXJldCA9IGlpb19hbGxvY19wb2xsZnVuYyhpbmRpb19kZXYsIE5VTEwsICZhZDc4ODdfcG9sbF9mdW5jX3RoKTsKLQlpZiAocmV0KQorCWluZGlvX2Rldi0+cmluZy0+YWNjZXNzID0gJnJpbmdfc3dfYWNjZXNzX2Z1bmNzOworCWluZGlvX2Rldi0+cG9sbGZ1bmMgPSBpaW9fYWxsb2NfcG9sbGZ1bmMoJmlpb19wb2xsZnVuY19zdG9yZV90aW1lLAorCQkJCQkJICZhZDc4ODdfdHJpZ2dlcl9oYW5kbGVyLAorCQkJCQkJIElSUUZfT05FU0hPVCwKKwkJCQkJCSBpbmRpb19kZXYsCisJCQkJCQkgImFkNzg4N19jb25zdW1lciVkIiwKKwkJCQkJCSBpbmRpb19kZXYtPmlkKTsKKwlpZiAoaW5kaW9fZGV2LT5wb2xsZnVuYyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3JfZGVhbGxvY2F0ZV9zd19yYjsKLQorCX0KIAkvKiBSaW5nIGJ1ZmZlciBmdW5jdGlvbnMgLSBoZXJlIHRyaWdnZXIgc2V0dXAgcmVsYXRlZCAqLwotCi0JaW5kaW9fZGV2LT5yaW5nLT5wcmVlbmFibGUgPSAmYWQ3ODg3X3JpbmdfcHJlZW5hYmxlOwotCWluZGlvX2Rldi0+cmluZy0+cG9zdGVuYWJsZSA9ICZpaW9fdHJpZ2dlcmVkX3JpbmdfcG9zdGVuYWJsZTsKLQlpbmRpb19kZXYtPnJpbmctPnByZWRpc2FibGUgPSAmaWlvX3RyaWdnZXJlZF9yaW5nX3ByZWRpc2FibGU7Ci0JaW5kaW9fZGV2LT5yaW5nLT5wb3N0ZGlzYWJsZSA9ICZhZDc4ODdfcmluZ19wb3N0ZGlzYWJsZTsKLQlpbmRpb19kZXYtPnJpbmctPnNjYW5fZWxfYXR0cnMgPSAmYWQ3ODg3X3NjYW5fZWxfZ3JvdXA7Ci0JaW5kaW9fZGV2LT5yaW5nLT5zY2FuX3RpbWVzdGFtcCA9IHRydWU7Ci0KLQlJTklUX1dPUksoJnN0LT5wb2xsX3dvcmssICZhZDc4ODdfcG9sbF9iaF90b19yaW5nKTsKKwlpbmRpb19kZXYtPnJpbmctPnNldHVwX29wcyA9ICZhZDc4ODdfcmluZ19zZXR1cF9vcHM7CiAKIAkvKiBGbGFnIHRoYXQgcG9sbGVkIHJpbmcgYnVmZmVyaW5nIGlzIHBvc3NpYmxlICovCiAJaW5kaW9fZGV2LT5tb2RlcyB8PSBJTkRJT19SSU5HX1RSSUdHRVJFRDsKIAlyZXR1cm4gMDsKKwogZXJyb3JfZGVhbGxvY2F0ZV9zd19yYjoKIAlpaW9fc3dfcmJfZnJlZShpbmRpb19kZXYtPnJpbmcpOwogZXJyb3JfcmV0OgpAQCAtMjY3LDYgKzE5Nyw2IEBACiAJCWlpb190cmlnZ2VyX2RldHRhY2hfcG9sbF9mdW5jKGluZGlvX2Rldi0+dHJpZywKIAkJCQkJICAgICAgaW5kaW9fZGV2LT5wb2xsZnVuYyk7CiAJfQotCWtmcmVlKGluZGlvX2Rldi0+cG9sbGZ1bmMpOworCWlpb19kZWFsbG9jX3BvbGxmdW5jKGluZGlvX2Rldi0+cG9sbGZ1bmMpOwogCWlpb19zd19yYl9mcmVlKGluZGlvX2Rldi0+cmluZyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc5OXguaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzk5eC5oCmluZGV4IGE0MjEzNjIuLjBkYzliNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzk5eC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzk5eC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBNaWNoYWVsIEhlbm5lcmljaCwgQW5hbG9nIERldmljZXMgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEgTWljaGFlbCBIZW5uZXJpY2gsIEFuYWxvZyBEZXZpY2VzIEluYy4KICAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwIEpvbmF0aGFuIENhbWVyb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNjcsNiArNjcsOCBAQAogCiAjZGVmaW5lIEFENzk5N184X1JFQURfU0lOR0xFCQkJMHg4MAogI2RlZmluZSBBRDc5OTdfOF9SRUFEX1NFUVVFTkNFCQkJMHg3MAorLyogVE9ETzogbW92ZSB0aGlzIGludG8gYSBjb21tb24gaGVhZGVyICovCisjZGVmaW5lIFJFU19NQVNLKGJpdHMpCSgoMSA8PCAoYml0cykpIC0gMSkKIAogZW51bSB7CiAJYWQ3OTkxLApAQCAtODMsNDMgKzg1LDI4IEBACiAKIC8qKgogICogc3RydWN0IGFkNzk5eF9jaGlwX2luZm8gLSBjaGlwIHNwZWNpZmMgaW5mb3JtYXRpb24KLSAqIEBudW1faW5wdXRzOgkJbnVtYmVyIG9mIHBoeXNpY2FsIGlucHV0cyBvbiBjaGlwCi0gKiBAYml0czoJCWFjY3VyYWN5IG9mIHRoZSBhZGMgaW4gYml0cworICogQGNoYW5uZWw6CQljaGFubmVsIHNwZWNpZmljYXRpb24KKyAqIEBudW1fY2hhbm5lbHM6CW51bWJlciBvZiBjaGFubmVscwogICogQGludF92cmVmX212Ogl0aGUgaW50ZXJuYWwgcmVmZXJlbmNlIHZvbHRhZ2UKICAqIEBtb25pdG9yX21vZGU6CXdoZXRoZXIgdGhlIGNoaXAgc3VwcG9ydHMgbW9uaXRvciBpbnRlcnJ1cHRzCiAgKiBAZGVmYXVsdF9jb25maWc6CWRldmljZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24KLSAqIEBkZXZfYXR0cnM6CQlwb2ludGVyIHRvIHRoZSBkZXZpY2UgYXR0cmlidXRlIGdyb3VwCi0gKiBAc2Nhbl9hdHRyczoJCXBvaW50ZXIgdG8gdGhlIHNjYW4gZWxlbWVudCBhdHRyaWJ1dGUgZ3JvdXAKICAqIEBldmVudF9hdHRyczoJcG9pbnRlciB0byB0aGUgbW9uaXRvciBldmVudCBhdHRyaWJ1dGUgZ3JvdXAKLSAqIEBhZDc5OXhfc2V0X3NjYW5fbW9kZTogZnVuY3Rpb24gcG9pbnRlciB0byB0aGUgZGV2aWNlIHNwZWNpZmljIG1vZGUgZnVuY3Rpb24KLQogICovCisKIHN0cnVjdCBhZDc5OXhfY2hpcF9pbmZvIHsKLQl1OAkJCQludW1faW5wdXRzOwotCXU4CQkJCWJpdHM7Ci0JdTgJCQkJc3RvcmFnZWJpdHM7Ci0JY2hhcgkJCQlzaWduOworCXN0cnVjdCBpaW9fY2hhbl9zcGVjCQljaGFubmVsWzldOworCWludAkJCQludW1fY2hhbm5lbHM7CiAJdTE2CQkJCWludF92cmVmX212OwotCWJvb2wJCQkJbW9uaXRvcl9tb2RlOwogCXUxNgkJCQlkZWZhdWx0X2NvbmZpZzsKLQlzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwCQkqZGV2X2F0dHJzOwotCXN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAJCSpzY2FuX2F0dHJzOwotCXN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAJCSpldmVudF9hdHRyczsKLQlpbnQgKCphZDc5OXhfc2V0X3NjYW5fbW9kZSkJKHN0cnVjdCBhZDc5OXhfc3RhdGUgKnN0LAotCQkJCQl1bnNpZ25lZCBtYXNrKTsKKwljb25zdCBzdHJ1Y3QgaWlvX2luZm8JCSppbmZvOwogfTsKIAogc3RydWN0IGFkNzk5eF9zdGF0ZSB7Ci0Jc3RydWN0IGlpb19kZXYJCQkqaW5kaW9fZGV2OwogCXN0cnVjdCBpMmNfY2xpZW50CQkqY2xpZW50OwogCWNvbnN0IHN0cnVjdCBhZDc5OXhfY2hpcF9pbmZvCSpjaGlwX2luZm87Ci0Jc3RydWN0IHdvcmtfc3RydWN0CQlwb2xsX3dvcms7Ci0Jc3RydWN0IHdvcmtfc3RydWN0CQl3b3JrX3RocmVzaDsKLQlhdG9taWNfdAkJCXByb3RlY3RfcmluZzsKIAlzaXplX3QJCQkJZF9zaXplOwogCXN0cnVjdCBpaW9fdHJpZ2dlcgkJKnRyaWc7CiAJc3RydWN0IHJlZ3VsYXRvcgkJKnJlZzsKLQlzNjQJCQkJbGFzdF90aW1lc3RhbXA7CiAJdTE2CQkJCWludF92cmVmX212OwogCXVuc2lnbmVkCQkJaWQ7CiAJY2hhcgkJCQkqbmFtZTsKQEAgLTEzNCw3ICsxMjEsNyBAQAogCXUxNgkJCQl2cmVmX212OwogfTsKIAotaW50IGFkNzk5eF9zZXRfc2Nhbl9tb2RlKHN0cnVjdCBhZDc5OXhfc3RhdGUgKnN0LCB1bnNpZ25lZCBtYXNrKTsKK2ludCBhZDc5OTdfOF9zZXRfc2Nhbl9tb2RlKHN0cnVjdCBhZDc5OXhfc3RhdGUgKnN0LCB1bnNpZ25lZCBtYXNrKTsKIAogI2lmZGVmIENPTkZJR19BRDc5OVhfUklOR19CVUZGRVIKIGludCBhZDc5OXhfc2luZ2xlX2NoYW5uZWxfZnJvbV9yaW5nKHN0cnVjdCBhZDc5OXhfc3RhdGUgKnN0LCBsb25nIG1hc2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3OTl4X2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzk5eF9jb3JlLmMKaW5kZXggZjA0ZTY0Mi4uMjliZmJjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3OTl4X2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc5OXhfY29yZS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIGlpby9hZGMvYWQ3OTl4LmMKLSAqIENvcHlyaWdodCAoQykgMjAxMCBNaWNoYWVsIEhlbm5lcmljaCwgQW5hbG9nIERldmljZXMgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTEwMTEgTWljaGFlbCBIZW5uZXJpY2gsIEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCiAgKiBiYXNlZCBvbiBpaW8vYWRjL21heDEzNjMKICAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwIEpvbmF0aGFuIENhbWVyb24KQEAgLTIzLDExICsyMyw5IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTEwMCwxMzAgKzk4LDc3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBhZDc5OXhfc2Nhbl9lbF9zZXRfc3RhdGUoc3RydWN0IGlpb19zY2FuX2VsICpzY2FuX2VsLAotCQkJCSAgICAgICBzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAotCQkJCSAgICAgICBib29sIHN0YXRlKQotewotCXN0cnVjdCBhZDc5OXhfc3RhdGUgKnN0ID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKLQlyZXR1cm4gYWQ3OTl4X3NldF9zY2FuX21vZGUoc3QsIHN0LT5pbmRpb19kZXYtPnJpbmctPnNjYW5fbWFzayk7Ci19Ci0KLS8qIEhlcmUgd2UgY2xhaW0gYWxsIGFyZSAxNiBiaXRzLiBUaGlzIGN1cnJlbnRseSBkb2VzIG5vIGhhcm0gYW5kIHNhdmVzCi0gKiB1cyBhIGxvdCBvZiBzY2FuIGVsZW1lbnQgbGlzdGluZ3MgKi8KLQotI2RlZmluZSBBRDc5OVhfU0NBTl9FTChudW1iZXIpCQkJCQkJXAotCUlJT19TQ0FOX0VMX0MoaW4jI251bWJlciwgbnVtYmVyLCAwLCBhZDc5OXhfc2Nhbl9lbF9zZXRfc3RhdGUpOwotCi1zdGF0aWMgQUQ3OTlYX1NDQU5fRUwoMCk7Ci1zdGF0aWMgQUQ3OTlYX1NDQU5fRUwoMSk7Ci1zdGF0aWMgQUQ3OTlYX1NDQU5fRUwoMik7Ci1zdGF0aWMgQUQ3OTlYX1NDQU5fRUwoMyk7Ci1zdGF0aWMgQUQ3OTlYX1NDQU5fRUwoNCk7Ci1zdGF0aWMgQUQ3OTlYX1NDQU5fRUwoNSk7Ci1zdGF0aWMgQUQ3OTlYX1NDQU5fRUwoNik7Ci1zdGF0aWMgQUQ3OTlYX1NDQU5fRUwoNyk7Ci0KLXN0YXRpYyBJSU9fU0NBTl9FTF9USU1FU1RBTVAoOCk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfU0NBTl9FTF9UWVBFKHRpbWVzdGFtcCwgcywgNjQsIDY0KQotCi1zdGF0aWMgc3NpemVfdCBhZDc5OXhfc2hvd190eXBlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQljaGFyICpidWYpCi17Ci0Jc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSByaW5nLT5pbmRpb19kZXY7Ci0Jc3RydWN0IGFkNzk5eF9zdGF0ZSAqc3QgPSBpbmRpb19kZXYtPmRldl9kYXRhOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWMlZC8lZFxuIiwgc3QtPmNoaXBfaW5mby0+c2lnbiwKLQkJICAgICAgIHN0LT5jaGlwX2luZm8tPmJpdHMsIEFENzk5WF9TVE9SQUdFQklUUyk7Ci19Ci1zdGF0aWMgSUlPX0RFVklDRV9BVFRSKGluX3R5cGUsIFNfSVJVR08sIGFkNzk5eF9zaG93X3R5cGUsIE5VTEwsIDApOwotCi1zdGF0aWMgaW50IGFkNzk5MV81Xzlfc2V0X3NjYW5fbW9kZShzdHJ1Y3QgYWQ3OTl4X3N0YXRlICpzdCwgdW5zaWduZWQgbWFzaykKLXsKLQlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGUoc3QtPmNsaWVudCwKLQkJc3QtPmNvbmZpZyB8IChtYXNrIDw8IEFENzk5WF9DSEFOTkVMX1NISUZUKSk7Ci19Ci0KLXN0YXRpYyBpbnQgYWQ3OTkyXzNfNF9zZXRfc2Nhbl9tb2RlKHN0cnVjdCBhZDc5OXhfc3RhdGUgKnN0LCB1bnNpZ25lZCBtYXNrKQotewotCXJldHVybiBhZDc5OXhfaTJjX3dyaXRlOChzdCwgQUQ3OTk4X0NPTkZfUkVHLAotCQlzdC0+Y29uZmlnIHwgKG1hc2sgPDwgQUQ3OTlYX0NIQU5ORUxfU0hJRlQpKTsKLX0KLQotc3RhdGljIGludCBhZDc5OTdfOF9zZXRfc2Nhbl9tb2RlKHN0cnVjdCBhZDc5OXhfc3RhdGUgKnN0LCB1bnNpZ25lZCBtYXNrKQoraW50IGFkNzk5N184X3NldF9zY2FuX21vZGUoc3RydWN0IGFkNzk5eF9zdGF0ZSAqc3QsIHVuc2lnbmVkIG1hc2spCiB7CiAJcmV0dXJuIGFkNzk5eF9pMmNfd3JpdGUxNihzdCwgQUQ3OTk4X0NPTkZfUkVHLAogCQlzdC0+Y29uZmlnIHwgKG1hc2sgPDwgQUQ3OTlYX0NIQU5ORUxfU0hJRlQpKTsKIH0KIAotaW50IGFkNzk5eF9zZXRfc2Nhbl9tb2RlKHN0cnVjdCBhZDc5OXhfc3RhdGUgKnN0LCB1bnNpZ25lZCBtYXNrKQorc3RhdGljIGludCBhZDc5OXhfc2Nhbl9kaXJlY3Qoc3RydWN0IGFkNzk5eF9zdGF0ZSAqc3QsIHVuc2lnbmVkIGNoKQogeworCXUxNiByeGJ1ZjsKKwl1OCBjbWQ7CiAJaW50IHJldDsKIAotCWlmIChzdC0+Y2hpcF9pbmZvLT5hZDc5OXhfc2V0X3NjYW5fbW9kZSAhPSBOVUxMKSB7Ci0JCXJldCA9IHN0LT5jaGlwX2luZm8tPmFkNzk5eF9zZXRfc2Nhbl9tb2RlKHN0LCBtYXNrKTsKLQkJcmV0dXJuIChyZXQgPiAwKSA/IDAgOiByZXQ7CisJc3dpdGNoIChzdC0+aWQpIHsKKwljYXNlIGFkNzk5MToKKwljYXNlIGFkNzk5NToKKwljYXNlIGFkNzk5OToKKwkJY21kID0gc3QtPmNvbmZpZyB8ICgoMSA8PCBjaCkgPDwgQUQ3OTlYX0NIQU5ORUxfU0hJRlQpOworCQlicmVhazsKKwljYXNlIGFkNzk5MjoKKwljYXNlIGFkNzk5MzoKKwljYXNlIGFkNzk5NDoKKwkJY21kID0gKDEgPDwgY2gpIDw8IEFENzk5WF9DSEFOTkVMX1NISUZUOworCQlicmVhazsKKwljYXNlIGFkNzk5NzoKKwljYXNlIGFkNzk5ODoKKwkJY21kID0gKGNoIDw8IEFENzk5WF9DSEFOTkVMX1NISUZUKSB8IEFENzk5N184X1JFQURfU0lOR0xFOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXQgPSBhZDc5OXhfaTJjX3JlYWQxNihzdCwgY21kLCAmcnhidWYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHJ4YnVmOwogfQogCi1zdGF0aWMgc3NpemVfdCBhZDc5OXhfcmVhZF9zaW5nbGVfY2hhbm5lbChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICAgY2hhciAqYnVmKQorc3RhdGljIGludCBhZDc5OXhfcmVhZF9yYXcoc3RydWN0IGlpb19kZXYgKmRldl9pbmZvLAorCQkJICAgc3RydWN0IGlpb19jaGFuX3NwZWMgY29uc3QgKmNoYW4sCisJCQkgICBpbnQgKnZhbCwKKwkJCSAgIGludCAqdmFsMiwKKwkJCSAgIGxvbmcgbSkKIHsKLQlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgYWQ3OTl4X3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoZGV2X2luZm8pOwotCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKLQlpbnQgcmV0ID0gMCwgbGVuID0gMDsKLQl1MzIgZGF0YSA7Ci0JdTE2IHJ4YnVmWzFdOwotCXU4IGNtZDsKLQlsb25nIG1hc2s7CisJaW50IHJldDsKKwlzdHJ1Y3QgYWQ3OTl4X3N0YXRlICpzdCA9IGRldl9pbmZvLT5kZXZfZGF0YTsKKwl1bnNpZ25lZCBpbnQgc2NhbGVfdXY7CiAKLQltdXRleF9sb2NrKCZkZXZfaW5mby0+bWxvY2spOwotCW1hc2sgPSAxIDw8IHRoaXNfYXR0ci0+YWRkcmVzczsKLQkvKiBJZiByaW5nIGJ1ZmZlciBjYXB0dXJlIGlzIG9jY3VycmluZywgcXVlcnkgdGhlIGJ1ZmZlciAqLwotCWlmIChpaW9fcmluZ19lbmFibGVkKGRldl9pbmZvKSkgewotCQlkYXRhID0gcmV0ID0gYWQ3OTl4X3NpbmdsZV9jaGFubmVsX2Zyb21fcmluZyhzdCwgbWFzayk7CisJc3dpdGNoIChtKSB7CisJY2FzZSAwOgorCQltdXRleF9sb2NrKCZkZXZfaW5mby0+bWxvY2spOworCQlpZiAoaWlvX3JpbmdfZW5hYmxlZChkZXZfaW5mbykpCisJCQlyZXQgPSBhZDc5OXhfc2luZ2xlX2NoYW5uZWxfZnJvbV9yaW5nKHN0LAorCQkJCTEgPDwgY2hhbi0+YWRkcmVzcyk7CisJCWVsc2UKKwkJCXJldCA9IGFkNzk5eF9zY2FuX2RpcmVjdChzdCwgY2hhbi0+YWRkcmVzcyk7CisJCW11dGV4X3VubG9jaygmZGV2X2luZm8tPm1sb2NrKTsKKwogCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gZXJyb3JfcmV0OwotCQlyZXQgPSAwOwotCX0gZWxzZSB7Ci0JCXN3aXRjaCAoc3QtPmlkKSB7Ci0JCWNhc2UgYWQ3OTkxOgotCQljYXNlIGFkNzk5NToKLQkJY2FzZSBhZDc5OTk6Ci0JCQljbWQgPSBzdC0+Y29uZmlnIHwgKG1hc2sgPDwgQUQ3OTlYX0NIQU5ORUxfU0hJRlQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgYWQ3OTkyOgotCQljYXNlIGFkNzk5MzoKLQkJY2FzZSBhZDc5OTQ6Ci0JCQljbWQgPSBtYXNrIDw8IEFENzk5WF9DSEFOTkVMX1NISUZUOwotCQkJYnJlYWs7Ci0JCWNhc2UgYWQ3OTk3OgotCQljYXNlIGFkNzk5ODoKLQkJCWNtZCA9ICh0aGlzX2F0dHItPmFkZHJlc3MgPDwKLQkJCQlBRDc5OVhfQ0hBTk5FTF9TSElGVCkgfCBBRDc5OTdfOF9SRUFEX1NJTkdMRTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJY21kID0gMDsKLQotCQl9Ci0JCXJldCA9IGFkNzk5eF9pMmNfcmVhZDE2KHN0LCBjbWQsIHJ4YnVmKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIGVycm9yX3JldDsKLQotCQlkYXRhID0gcnhidWZbMF07CisJCQlyZXR1cm4gcmV0OworCQkqdmFsID0gKHJldCA+PiBzdC0+Y2hpcF9pbmZvLT5jaGFubmVsWzBdLnNjYW5fdHlwZS5zaGlmdCkgJgorCQkJUkVTX01BU0soc3QtPmNoaXBfaW5mby0+Y2hhbm5lbFswXS5zY2FuX3R5cGUucmVhbGJpdHMpOworCQlyZXR1cm4gSUlPX1ZBTF9JTlQ7CisJY2FzZSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCk6CisJCXNjYWxlX3V2ID0gKHN0LT5pbnRfdnJlZl9tdiAqIDEwMDApCisJCQk+PiBzdC0+Y2hpcF9pbmZvLT5jaGFubmVsWzBdLnNjYW5fdHlwZS5yZWFsYml0czsKKwkJKnZhbCA9ICBzY2FsZV91diAvIDEwMDA7CisJCSp2YWwyID0gKHNjYWxlX3V2ICUgMTAwMCkgKiAxMDAwOworCQlyZXR1cm4gSUlPX1ZBTF9JTlRfUExVU19NSUNSTzsKIAl9Ci0KLQkvKiBQcmV0dHkgcHJpbnQgdGhlIHJlc3VsdCAqLwotCWxlbiA9IHNwcmludGYoYnVmLCAiJXVcbiIsIGRhdGEgJiAoKDEgPDwgKHN0LT5jaGlwX2luZm8tPmJpdHMpKSAtIDEpKTsKLQotZXJyb3JfcmV0OgotCW11dGV4X3VubG9jaygmZGV2X2luZm8tPm1sb2NrKTsKLQlyZXR1cm4gcmV0ID8gcmV0IDogbGVuOworCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgc3NpemVfdCBhZDc5OXhfcmVhZF9mcmVxdWVuY3koc3RydWN0IGRldmljZSAqZGV2LApAQCAtMzMxLDE4ICsyNzYsMTcgQEAKIAlyZXR1cm4gcmV0ID8gcmV0IDogbGVuOwogfQogCi0KIHN0YXRpYyBzc2l6ZV90IGFkNzk5eF9yZWFkX2NoYW5uZWxfY29uZmlnKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJCWNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgYWQ3OTl4X3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoZGV2X2luZm8pOwotCXN0cnVjdCBpaW9fZXZlbnRfYXR0ciAqdGhpc19hdHRyID0gdG9faWlvX2V2ZW50X2F0dHIoYXR0cik7CisJc3RydWN0IGlpb19kZXZfYXR0ciAqdGhpc19hdHRyID0gdG9faWlvX2Rldl9hdHRyKGF0dHIpOwogCiAJaW50IHJldDsKIAl1MTYgdmFsOwotCXJldCA9IGFkNzk5eF9pMmNfcmVhZDE2KHN0LCB0aGlzX2F0dHItPm1hc2ssICZ2YWwpOworCXJldCA9IGFkNzk5eF9pMmNfcmVhZDE2KHN0LCB0aGlzX2F0dHItPmFkZHJlc3MsICZ2YWwpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTM1Niw3ICszMDAsNyBAQAogewogCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBhZDc5OXhfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShkZXZfaW5mbyk7Ci0Jc3RydWN0IGlpb19ldmVudF9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZXZlbnRfYXR0cihhdHRyKTsKKwlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7CiAKIAlsb25nIHZhbDsKIAlpbnQgcmV0OwpAQCAtMzY2LDI3MyArMzEwLDExMSBAQAogCQlyZXR1cm4gcmV0OwogCiAJbXV0ZXhfbG9jaygmZGV2X2luZm8tPm1sb2NrKTsKLQlyZXQgPSBhZDc5OXhfaTJjX3dyaXRlMTYoc3QsIHRoaXNfYXR0ci0+bWFzaywgdmFsKTsKKwlyZXQgPSBhZDc5OXhfaTJjX3dyaXRlMTYoc3QsIHRoaXNfYXR0ci0+YWRkcmVzcywgdmFsKTsKIAltdXRleF91bmxvY2soJmRldl9pbmZvLT5tbG9jayk7CiAKIAlyZXR1cm4gcmV0ID8gcmV0IDogbGVuOwogfQogCi1zdGF0aWMgdm9pZCBhZDc5OXhfaW50ZXJydXB0X2JoKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29ya19zKQorc3RhdGljIGlycXJldHVybl90IGFkNzk5eF9ldmVudF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKnByaXZhdGUpCiB7Ci0Jc3RydWN0IGFkNzk5eF9zdGF0ZSAqc3QgPSBjb250YWluZXJfb2Yod29ya19zLAotCQlzdHJ1Y3QgYWQ3OTl4X3N0YXRlLCB3b3JrX3RocmVzaCk7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHByaXZhdGU7CisJc3RydWN0IGFkNzk5eF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKHByaXZhdGUpOwogCXU4IHN0YXR1czsKLQlpbnQgaTsKKwlpbnQgaSwgcmV0OwogCi0JaWYgKGFkNzk5eF9pMmNfcmVhZDgoc3QsIEFENzk5OF9BTEVSVF9TVEFUX1JFRywgJnN0YXR1cykpCi0JCWdvdG8gZXJyX291dDsKKwlyZXQgPSBhZDc5OXhfaTJjX3JlYWQ4KHN0LCBBRDc5OThfQUxFUlRfU1RBVF9SRUcsICZzdGF0dXMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAlpZiAoIXN0YXR1cykKLQkJZ290byBlcnJfb3V0OworCQlyZXR1cm4gLUVJTzsKIAogCWFkNzk5eF9pMmNfd3JpdGU4KHN0LCBBRDc5OThfQUxFUlRfU1RBVF9SRUcsIEFENzk5OF9BTEVSVF9TVEFUX0NMRUFSKTsKIAogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKIAkJaWYgKHN0YXR1cyAmICgxIDw8IGkpKQotCQkJaWlvX3B1c2hfZXZlbnQoc3QtPmluZGlvX2RldiwgMCwKLQkJCQlpICYgMHgxID8KLQkJCQlJSU9fRVZFTlRfQ09ERV9JTl9ISUdIX1RIUkVTSChpID4+IDEpIDoKLQkJCQlJSU9fRVZFTlRfQ09ERV9JTl9MT1dfVEhSRVNIKGkgPj4gMSksCi0JCQkJc3QtPmxhc3RfdGltZXN0YW1wKTsKKwkJCWlpb19wdXNoX2V2ZW50KGluZGlvX2RldiwgMCwKKwkJCQkgICAgICAgaSAmIDB4MSA/CisJCQkJICAgICAgIElJT19FVkVOVF9DT0RFX0lOX0hJR0hfVEhSRVNIKGkgPj4gMSkgOgorCQkJCSAgICAgICBJSU9fRVZFTlRfQ09ERV9JTl9MT1dfVEhSRVNIKGkgPj4gMSksCisJCQkJICAgICAgIGlpb19nZXRfdGltZV9ucygpKTsKIAl9CiAKLWVycl9vdXQ6Ci0JZW5hYmxlX2lycShzdC0+Y2xpZW50LT5pcnEpOworCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCBhZDc5OXhfaW50ZXJydXB0KHN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbywKLQkJaW50IGluZGV4LAotCQlzNjQgdGltZXN0YW1wLAotCQlpbnQgbm9fdGVzdCkKLXsKLQlzdHJ1Y3QgYWQ3OTl4X3N0YXRlICpzdCA9IGRldl9pbmZvLT5kZXZfZGF0YTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW4wX3RocmVzaF9sb3dfdmFsdWUsCisJCSAgICAgICBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgIGFkNzk5eF9yZWFkX2NoYW5uZWxfY29uZmlnLAorCQkgICAgICAgYWQ3OTl4X3dyaXRlX2NoYW5uZWxfY29uZmlnLAorCQkgICAgICAgQUQ3OTk4X0RBVEFMT1dfQ0gxX1JFRyk7CiAKLQlzdC0+bGFzdF90aW1lc3RhbXAgPSB0aW1lc3RhbXA7Ci0Jc2NoZWR1bGVfd29yaygmc3QtPndvcmtfdGhyZXNoKTsKLQlyZXR1cm4gMDsKLX0KK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW4wX3RocmVzaF9oaWdoX3ZhbHVlLAorCQkgICAgICAgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICAgICBhZDc5OXhfcmVhZF9jaGFubmVsX2NvbmZpZywKKwkJICAgICAgIGFkNzk5eF93cml0ZV9jaGFubmVsX2NvbmZpZywKKwkJICAgICAgIEFENzk5OF9EQVRBSElHSF9DSDFfUkVHKTsKIAotSUlPX0VWRU5UX1NIKGFkNzk5eCwgJmFkNzk5eF9pbnRlcnJ1cHQpOworc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbjBfdGhyZXNoX2JvdGhfaHlzdF9yYXcsCisJCSAgICAgICBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgIGFkNzk5eF9yZWFkX2NoYW5uZWxfY29uZmlnLAorCQkgICAgICAgYWQ3OTl4X3dyaXRlX2NoYW5uZWxfY29uZmlnLAorCQkgICAgICAgQUQ3OTk4X0hZU1RfQ0gxX1JFRyk7CiAKLS8qIERpcmVjdCByZWFkIGF0dHJpYnR1ZXMgKi8KLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDAsIGFkNzk5eF9yZWFkX3NpbmdsZV9jaGFubmVsLCAwKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDEsIGFkNzk5eF9yZWFkX3NpbmdsZV9jaGFubmVsLCAxKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDIsIGFkNzk5eF9yZWFkX3NpbmdsZV9jaGFubmVsLCAyKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDMsIGFkNzk5eF9yZWFkX3NpbmdsZV9jaGFubmVsLCAzKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDQsIGFkNzk5eF9yZWFkX3NpbmdsZV9jaGFubmVsLCA0KTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDUsIGFkNzk5eF9yZWFkX3NpbmdsZV9jaGFubmVsLCA1KTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDYsIGFkNzk5eF9yZWFkX3NpbmdsZV9jaGFubmVsLCA2KTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDcsIGFkNzk5eF9yZWFkX3NpbmdsZV9jaGFubmVsLCA3KTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW4xX3RocmVzaF9sb3dfdmFsdWUsCisJCSAgICAgICBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgIGFkNzk5eF9yZWFkX2NoYW5uZWxfY29uZmlnLAorCQkgICAgICAgYWQ3OTl4X3dyaXRlX2NoYW5uZWxfY29uZmlnLAorCQkgICAgICAgQUQ3OTk4X0RBVEFMT1dfQ0gyX1JFRyk7CiAKLXN0YXRpYyBzc2l6ZV90IGFkNzk5eF9zaG93X3NjYWxlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQljaGFyICpidWYpCi17Ci0JLyogRHJpdmVyIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgaW50ZXJuYWwgdnJlZiAqLwotCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBhZDc5OXhfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShkZXZfaW5mbyk7CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSKGluMV90aHJlc2hfaGlnaF92YWx1ZSwKKwkJICAgICAgIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICAgYWQ3OTl4X3JlYWRfY2hhbm5lbF9jb25maWcsCisJCSAgICAgICBhZDc5OXhfd3JpdGVfY2hhbm5lbF9jb25maWcsCisJCSAgICAgICBBRDc5OThfREFUQUhJR0hfQ0gyX1JFRyk7CiAKLQkvKiBDb3JyZXNwb25kcyB0byBWcmVmIC8gMl4oYml0cykgKi8KLQl1bnNpZ25lZCBpbnQgc2NhbGVfdXYgPSAoc3QtPmludF92cmVmX212ICogMTAwMCkgPj4gc3QtPmNoaXBfaW5mby0+Yml0czsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW4xX3RocmVzaF9ib3RoX2h5c3RfcmF3LAorCQkgICAgICAgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICAgICBhZDc5OXhfcmVhZF9jaGFubmVsX2NvbmZpZywKKwkJICAgICAgIGFkNzk5eF93cml0ZV9jaGFubmVsX2NvbmZpZywKKwkJICAgICAgIEFENzk5OF9IWVNUX0NIMl9SRUcpOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJTAzZFxuIiwgc2NhbGVfdXYgLyAxMDAwLCBzY2FsZV91diAlIDEwMDApOwotfQorc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbjJfdGhyZXNoX2xvd192YWx1ZSwKKwkJICAgICAgIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICAgYWQ3OTl4X3JlYWRfY2hhbm5lbF9jb25maWcsCisJCSAgICAgICBhZDc5OXhfd3JpdGVfY2hhbm5lbF9jb25maWcsCisJCSAgICAgICBBRDc5OThfREFUQUxPV19DSDNfUkVHKTsKIAotc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbl9zY2FsZSwgU19JUlVHTywgYWQ3OTl4X3Nob3dfc2NhbGUsIE5VTEwsIDApOworc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbjJfdGhyZXNoX2hpZ2hfdmFsdWUsCisJCSAgICAgICBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgIGFkNzk5eF9yZWFkX2NoYW5uZWxfY29uZmlnLAorCQkgICAgICAgYWQ3OTl4X3dyaXRlX2NoYW5uZWxfY29uZmlnLAorCQkgICAgICAgQUQ3OTk4X0RBVEFISUdIX0NIM19SRUcpOwogCi1zdGF0aWMgc3NpemVfdCBhZDc5OXhfc2hvd19uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgYWQ3OTl4X3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoZGV2X2luZm8pOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBzdC0+Y2xpZW50LT5uYW1lKTsKLX0KK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW4yX3RocmVzaF9ib3RoX2h5c3RfcmF3LAorCQkgICAgICAgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICAgICBhZDc5OXhfcmVhZF9jaGFubmVsX2NvbmZpZywKKwkJICAgICAgIGFkNzk5eF93cml0ZV9jaGFubmVsX2NvbmZpZywKKwkJICAgICAgIEFENzk5OF9IWVNUX0NIM19SRUcpOwogCi1zdGF0aWMgSUlPX0RFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIGFkNzk5eF9zaG93X25hbWUsIE5VTEwsIDApOworc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbjNfdGhyZXNoX2xvd192YWx1ZSwKKwkJICAgICAgIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICAgYWQ3OTl4X3JlYWRfY2hhbm5lbF9jb25maWcsCisJCSAgICAgICBhZDc5OXhfd3JpdGVfY2hhbm5lbF9jb25maWcsCisJCSAgICAgICBBRDc5OThfREFUQUxPV19DSDRfUkVHKTsKIAotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkNzk5MV81XzlfM180X2RldmljZV9hdHRyc1tdID0gewotCSZpaW9fZGV2X2F0dHJfaW4wX3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW4xX3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW4yX3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW4zX3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfbmFtZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW5fc2NhbGUuZGV2X2F0dHIuYXR0ciwKLQlOVUxMCi19Oworc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbjNfdGhyZXNoX2hpZ2hfdmFsdWUsCisJCSAgICAgICBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgIGFkNzk5eF9yZWFkX2NoYW5uZWxfY29uZmlnLAorCQkgICAgICAgYWQ3OTl4X3dyaXRlX2NoYW5uZWxfY29uZmlnLAorCQkgICAgICAgQUQ3OTk4X0RBVEFISUdIX0NINF9SRUcpOwogCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZDc5OTFfNV85XzNfNF9kZXZfYXR0cl9ncm91cCA9IHsKLQkuYXR0cnMgPSBhZDc5OTFfNV85XzNfNF9kZXZpY2VfYXR0cnMsCi19OwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWQ3OTkxXzVfOV8zXzRfc2Nhbl9lbF9hdHRyc1tdID0gewotCSZpaW9fc2Nhbl9lbF9pbjAuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4wX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luMS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjFfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfaW4yLmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luMl9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjMuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4zX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX3RpbWVzdGFtcF9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF90aW1lc3RhbXAuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfdGltZXN0YW1wX3R5cGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luX3R5cGUuZGV2X2F0dHIuYXR0ciwKLQlOVUxMLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYWQ3OTkxXzVfOV8zXzRfc2Nhbl9lbF9ncm91cCA9IHsKLQkubmFtZSA9ICJzY2FuX2VsZW1lbnRzIiwKLQkuYXR0cnMgPSBhZDc5OTFfNV85XzNfNF9zY2FuX2VsX2F0dHJzLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkNzk5Ml9kZXZpY2VfYXR0cnNbXSA9IHsKLQkmaWlvX2Rldl9hdHRyX2luMF9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luMV9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX25hbWUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luX3NjYWxlLmRldl9hdHRyLmF0dHIsCi0JTlVMTAotfTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYWQ3OTkyX2Rldl9hdHRyX2dyb3VwID0gewotCS5hdHRycyA9IGFkNzk5Ml9kZXZpY2VfYXR0cnMsCi19OwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWQ3OTkyX3NjYW5fZWxfYXR0cnNbXSA9IHsKLQkmaWlvX3NjYW5fZWxfaW4wLmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luMF9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjEuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4xX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX3RpbWVzdGFtcF9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF90aW1lc3RhbXAuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfdGltZXN0YW1wX3R5cGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luX3R5cGUuZGV2X2F0dHIuYXR0ciwKLQlOVUxMLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYWQ3OTkyX3NjYW5fZWxfZ3JvdXAgPSB7Ci0JLm5hbWUgPSAic2Nhbl9lbGVtZW50cyIsCi0JLmF0dHJzID0gYWQ3OTkyX3NjYW5fZWxfYXR0cnMsCi19OwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWQ3OTk3XzhfZGV2aWNlX2F0dHJzW10gPSB7Ci0JJmlpb19kZXZfYXR0cl9pbjBfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjFfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjJfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjNfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjRfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjVfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjZfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjdfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9uYW1lLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbl9zY2FsZS5kZXZfYXR0ci5hdHRyLAotCU5VTEwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFkNzk5N184X2Rldl9hdHRyX2dyb3VwID0gewotCS5hdHRycyA9IGFkNzk5N184X2RldmljZV9hdHRycywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZDc5OTdfOF9zY2FuX2VsX2F0dHJzW10gPSB7Ci0JJmlpb19zY2FuX2VsX2luMC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjBfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfaW4xLmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luMV9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjIuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4yX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luMy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjNfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfaW40LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luNF9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW41X2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luNi5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjZfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfaW43LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luN19pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl90aW1lc3RhbXBfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfdGltZXN0YW1wLmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX3RpbWVzdGFtcF90eXBlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbl90eXBlLmRldl9hdHRyLmF0dHIsCi0JTlVMTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFkNzk5N184X3NjYW5fZWxfZ3JvdXAgPSB7Ci0JLm5hbWUgPSAic2Nhbl9lbGVtZW50cyIsCi0JLmF0dHJzID0gYWQ3OTk3Xzhfc2Nhbl9lbF9hdHRycywKLX07Ci0KLUlJT19FVkVOVF9BVFRSX1NIKGluMF90aHJlc2hfbG93X3ZhbHVlLAotCQkgIGlpb19ldmVudF9hZDc5OXgsCi0JCSAgYWQ3OTl4X3JlYWRfY2hhbm5lbF9jb25maWcsCi0JCSAgYWQ3OTl4X3dyaXRlX2NoYW5uZWxfY29uZmlnLAotCQkgIEFENzk5OF9EQVRBTE9XX0NIMV9SRUcpOwotCi1JSU9fRVZFTlRfQVRUUl9TSChpbjBfdGhyZXNoX2hpZ2hfdmFsdWUsCi0JCSAgaWlvX2V2ZW50X2FkNzk5eCwKLQkJICBhZDc5OXhfcmVhZF9jaGFubmVsX2NvbmZpZywKLQkJICBhZDc5OXhfd3JpdGVfY2hhbm5lbF9jb25maWcsCi0JCSAgQUQ3OTk4X0RBVEFISUdIX0NIMV9SRUcpOwotCi1JSU9fRVZFTlRfQVRUUl9TSChpbjBfdGhyZXNoX2JvdGhfaHlzdF9yYXcsCi0JCSAgaWlvX2V2ZW50X2FkNzk5eCwKLQkJICBhZDc5OXhfcmVhZF9jaGFubmVsX2NvbmZpZywKLQkJICBhZDc5OXhfd3JpdGVfY2hhbm5lbF9jb25maWcsCi0JCSAgQUQ3OTk4X0hZU1RfQ0gxX1JFRyk7Ci0KLUlJT19FVkVOVF9BVFRSX1NIKGluMV90aHJlc2hfbG93X3ZhbHVlLAotCQkgIGlpb19ldmVudF9hZDc5OXgsCi0JCSAgYWQ3OTl4X3JlYWRfY2hhbm5lbF9jb25maWcsCi0JCSAgYWQ3OTl4X3dyaXRlX2NoYW5uZWxfY29uZmlnLAotCQkgIEFENzk5OF9EQVRBTE9XX0NIMl9SRUcpOwotCi1JSU9fRVZFTlRfQVRUUl9TSChpbjFfdGhyZXNoX2hpZ2hfdmFsdWUsCi0JCSAgaWlvX2V2ZW50X2FkNzk5eCwKLQkJICBhZDc5OXhfcmVhZF9jaGFubmVsX2NvbmZpZywKLQkJICBhZDc5OXhfd3JpdGVfY2hhbm5lbF9jb25maWcsCi0JCSAgQUQ3OTk4X0RBVEFISUdIX0NIMl9SRUcpOwotCi1JSU9fRVZFTlRfQVRUUl9TSChpbjFfdGhyZXNoX2JvdGhfaHlzdF9yYXcsCi0JCSAgaWlvX2V2ZW50X2FkNzk5eCwKLQkJICBhZDc5OXhfcmVhZF9jaGFubmVsX2NvbmZpZywKLQkJICBhZDc5OXhfd3JpdGVfY2hhbm5lbF9jb25maWcsCi0JCSAgQUQ3OTk4X0hZU1RfQ0gyX1JFRyk7Ci0KLUlJT19FVkVOVF9BVFRSX1NIKGluMl90aHJlc2hfbG93X3ZhbHVlLAotCQkgIGlpb19ldmVudF9hZDc5OXgsCi0JCSAgYWQ3OTl4X3JlYWRfY2hhbm5lbF9jb25maWcsCi0JCSAgYWQ3OTl4X3dyaXRlX2NoYW5uZWxfY29uZmlnLAotCQkgIEFENzk5OF9EQVRBTE9XX0NIM19SRUcpOwotCi1JSU9fRVZFTlRfQVRUUl9TSChpbjJfdGhyZXNoX2hpZ2hfdmFsdWUsCi0JCSAgaWlvX2V2ZW50X2FkNzk5eCwKLQkJICBhZDc5OXhfcmVhZF9jaGFubmVsX2NvbmZpZywKLQkJICBhZDc5OXhfd3JpdGVfY2hhbm5lbF9jb25maWcsCi0JCSAgQUQ3OTk4X0RBVEFISUdIX0NIM19SRUcpOwotCi1JSU9fRVZFTlRfQVRUUl9TSChpbjJfdGhyZXNoX2JvdGhfaHlzdF9yYXcsCi0JCSAgaWlvX2V2ZW50X2FkNzk5eCwKLQkJICBhZDc5OXhfcmVhZF9jaGFubmVsX2NvbmZpZywKLQkJICBhZDc5OXhfd3JpdGVfY2hhbm5lbF9jb25maWcsCi0JCSAgQUQ3OTk4X0hZU1RfQ0gzX1JFRyk7Ci0KLUlJT19FVkVOVF9BVFRSX1NIKGluM190aHJlc2hfbG93X3ZhbHVlLAotCQkgIGlpb19ldmVudF9hZDc5OXgsCi0JCSAgYWQ3OTl4X3JlYWRfY2hhbm5lbF9jb25maWcsCi0JCSAgYWQ3OTl4X3dyaXRlX2NoYW5uZWxfY29uZmlnLAotCQkgIEFENzk5OF9EQVRBTE9XX0NINF9SRUcpOwotCi1JSU9fRVZFTlRfQVRUUl9TSChpbjNfdGhyZXNoX2hpZ2hfdmFsdWUsCi0JCSAgaWlvX2V2ZW50X2FkNzk5eCwKLQkJICBhZDc5OXhfcmVhZF9jaGFubmVsX2NvbmZpZywKLQkJICBhZDc5OXhfd3JpdGVfY2hhbm5lbF9jb25maWcsCi0JCSAgQUQ3OTk4X0RBVEFISUdIX0NINF9SRUcpOwotCi1JSU9fRVZFTlRfQVRUUl9TSChpbjNfdGhyZXNoX2JvdGhfaHlzdF9yYXcsCi0JCSAgaWlvX2V2ZW50X2FkNzk5eCwKLQkJICBhZDc5OXhfcmVhZF9jaGFubmVsX2NvbmZpZywKLQkJICBhZDc5OXhfd3JpdGVfY2hhbm5lbF9jb25maWcsCi0JCSAgQUQ3OTk4X0hZU1RfQ0g0X1JFRyk7CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSKGluM190aHJlc2hfYm90aF9oeXN0X3JhdywKKwkJICAgICAgIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICAgYWQ3OTl4X3JlYWRfY2hhbm5lbF9jb25maWcsCisJCSAgICAgICBhZDc5OXhfd3JpdGVfY2hhbm5lbF9jb25maWcsCisJCSAgICAgICBBRDc5OThfSFlTVF9DSDRfUkVHKTsKIAogc3RhdGljIElJT19ERVZfQVRUUl9TQU1QX0ZSRVEoU19JV1VTUiB8IFNfSVJVR08sCiAJCQkgICAgICBhZDc5OXhfcmVhZF9mcmVxdWVuY3ksCkBAIC02NDAsMTggKzQyMiwxOCBAQAogc3RhdGljIElJT19DT05TVF9BVFRSX1NBTVBfRlJFUV9BVkFJTCgiMTU2MjUgNzgxMiAzOTA2IDE5NTMgOTc2IDQ4OCAyNDQgMCIpOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWQ3OTkzXzRfN184X2V2ZW50X2F0dHJpYnV0ZXNbXSA9IHsKLQkmaWlvX2V2ZW50X2F0dHJfaW4wX3RocmVzaF9sb3dfdmFsdWUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfaW4wX3RocmVzaF9oaWdoX3ZhbHVlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX2luMF90aHJlc2hfYm90aF9oeXN0X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl9pbjFfdGhyZXNoX2xvd192YWx1ZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl9pbjFfdGhyZXNoX2hpZ2hfdmFsdWUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfaW4xX3RocmVzaF9ib3RoX2h5c3RfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX2luMl90aHJlc2hfbG93X3ZhbHVlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX2luMl90aHJlc2hfaGlnaF92YWx1ZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl9pbjJfdGhyZXNoX2JvdGhfaHlzdF9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfaW4zX3RocmVzaF9sb3dfdmFsdWUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfaW4zX3RocmVzaF9oaWdoX3ZhbHVlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX2luM190aHJlc2hfYm90aF9oeXN0X3Jhdy5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfaW4wX3RocmVzaF9sb3dfdmFsdWUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2luMF90aHJlc2hfaGlnaF92YWx1ZS5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfaW4wX3RocmVzaF9ib3RoX2h5c3RfcmF3LmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9pbjFfdGhyZXNoX2xvd192YWx1ZS5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfaW4xX3RocmVzaF9oaWdoX3ZhbHVlLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9pbjFfdGhyZXNoX2JvdGhfaHlzdF9yYXcuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2luMl90aHJlc2hfbG93X3ZhbHVlLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9pbjJfdGhyZXNoX2hpZ2hfdmFsdWUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2luMl90aHJlc2hfYm90aF9oeXN0X3Jhdy5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfaW4zX3RocmVzaF9sb3dfdmFsdWUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2luM190aHJlc2hfaGlnaF92YWx1ZS5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfaW4zX3RocmVzaF9ib3RoX2h5c3RfcmF3LmRldl9hdHRyLmF0dHIsCiAJJmlpb19kZXZfYXR0cl9zYW1wbGluZ19mcmVxdWVuY3kuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2NvbnN0X2F0dHJfc2FtcGxpbmdfZnJlcXVlbmN5X2F2YWlsYWJsZS5kZXZfYXR0ci5hdHRyLAogCU5VTEwsCkBAIC02NjIsMTIgKzQ0NCwxMiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkNzk5Ml9ldmVudF9hdHRyaWJ1dGVzW10gPSB7Ci0JJmlpb19ldmVudF9hdHRyX2luMF90aHJlc2hfbG93X3ZhbHVlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX2luMF90aHJlc2hfaGlnaF92YWx1ZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl9pbjBfdGhyZXNoX2JvdGhfaHlzdF9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfaW4xX3RocmVzaF9sb3dfdmFsdWUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfaW4xX3RocmVzaF9oaWdoX3ZhbHVlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX2luMV90aHJlc2hfYm90aF9oeXN0X3Jhdy5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfaW4wX3RocmVzaF9sb3dfdmFsdWUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2luMF90aHJlc2hfaGlnaF92YWx1ZS5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfaW4wX3RocmVzaF9ib3RoX2h5c3RfcmF3LmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9pbjFfdGhyZXNoX2xvd192YWx1ZS5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfaW4xX3RocmVzaF9oaWdoX3ZhbHVlLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9pbjFfdGhyZXNoX2JvdGhfaHlzdF9yYXcuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX3NhbXBsaW5nX2ZyZXF1ZW5jeS5kZXZfYXR0ci5hdHRyLAogCSZpaW9fY29uc3RfYXR0cl9zYW1wbGluZ19mcmVxdWVuY3lfYXZhaWxhYmxlLmRldl9hdHRyLmF0dHIsCiAJTlVMTCwKQEAgLTY3Nyw5MyArNDU5LDE5MiBAQAogCS5hdHRycyA9IGFkNzk5Ml9ldmVudF9hdHRyaWJ1dGVzLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9faW5mbyBhZDc5OTFfaW5mbyA9IHsKKwkucmVhZF9yYXcgPSAmYWQ3OTl4X3JlYWRfcmF3LAorCS5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIGFkNzk5Ml9pbmZvID0geworCS5yZWFkX3JhdyA9ICZhZDc5OXhfcmVhZF9yYXcsCisJLm51bV9pbnRlcnJ1cHRfbGluZXMgPSAxLAorCS5ldmVudF9hdHRycyA9ICZhZDc5OTJfZXZlbnRfYXR0cnNfZ3JvdXAsCisJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2luZm8gYWQ3OTkzXzRfN184X2luZm8gPSB7CisJLnJlYWRfcmF3ID0gJmFkNzk5eF9yZWFkX3JhdywKKwkubnVtX2ludGVycnVwdF9saW5lcyA9IDEsCisJLmV2ZW50X2F0dHJzID0gJmFkNzk5M180XzdfOF9ldmVudF9hdHRyc19ncm91cCwKKwkuZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBhZDc5OXhfY2hpcF9pbmZvIGFkNzk5eF9jaGlwX2luZm9fdGJsW10gPSB7CiAJW2FkNzk5MV0gPSB7Ci0JCS5udW1faW5wdXRzID0gNCwKLQkJLmJpdHMgPSAxMiwKLQkJLnNpZ24gPSBJSU9fU0NBTl9FTF9UWVBFX1VOU0lHTkVELAorCQkuY2hhbm5lbFswXSA9IElJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgTlVMTCwgMCwgMCwKKwkJCQkgICAgICAgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkJCSAgICAgICAwLCAwLCBJSU9fU1QoJ3UnLCAxMiwgMTYsIDApLCAwKSwKKwkJLmNoYW5uZWxbMV0gPSBJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsIE5VTEwsIDEsIDAsCisJCQkJICAgICAgICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJCQkgICAgICAgMSwgMSwgSUlPX1NUKCd1JywgMTIsIDE2LCAwKSwgMCksCisJCS5jaGFubmVsWzJdID0gSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCAyLCAwLAorCQkJCSAgICAgICAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCQkJICAgICAgIDIsIDIsIElJT19TVCgndScsIDEyLCAxNiwgMCksIDApLAorCQkuY2hhbm5lbFszXSA9IElJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgTlVMTCwgMywgMCwKKwkJCQkgICAgICAgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkJCSAgICAgICAzLCAzLCBJSU9fU1QoJ3UnLCAxMiwgMTYsIDApLCAwKSwKKwkJLmNoYW5uZWxbNF0gPSBJSU9fQ0hBTl9TT0ZUX1RJTUVTVEFNUCg0KSwKKwkJLm51bV9jaGFubmVscyA9IDUsCiAJCS5pbnRfdnJlZl9tdiA9IDQwOTYsCi0JCS5kZXZfYXR0cnMgPSAmYWQ3OTkxXzVfOV8zXzRfZGV2X2F0dHJfZ3JvdXAsCi0JCS5zY2FuX2F0dHJzID0gJmFkNzk5MV81XzlfM180X3NjYW5fZWxfZ3JvdXAsCi0JCS5hZDc5OXhfc2V0X3NjYW5fbW9kZSA9IGFkNzk5MV81Xzlfc2V0X3NjYW5fbW9kZSwKKwkJLmluZm8gPSAmYWQ3OTkxX2luZm8sCiAJfSwKIAlbYWQ3OTk1XSA9IHsKLQkJLm51bV9pbnB1dHMgPSA0LAotCQkuYml0cyA9IDEwLAotCQkuc2lnbiA9IElJT19TQ0FOX0VMX1RZUEVfVU5TSUdORUQsCisJCS5jaGFubmVsWzBdID0gSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCAwLCAwLAorCQkJCSAgICAgICAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCQkJICAgICAgIDAsIDAsIElJT19TVCgndScsIDEwLCAxNiwgMCksIDApLAorCQkuY2hhbm5lbFsxXSA9IElJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgTlVMTCwgMSwgMCwKKwkJCQkgICAgICAgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkJCSAgICAgICAxLCAxLCBJSU9fU1QoJ3UnLCAxMCwgMTYsIDApLCAwKSwKKwkJLmNoYW5uZWxbMl0gPSBJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsIE5VTEwsIDIsIDAsCisJCQkJICAgICAgICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJCQkgICAgICAgMiwgMiwgSUlPX1NUKCd1JywgMTAsIDE2LCAwKSwgMCksCisJCS5jaGFubmVsWzNdID0gSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCAzLCAwLAorCQkJCSAgICAgICAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCQkJICAgICAgIDMsIDMsIElJT19TVCgndScsIDEwLCAxNiwgMCksIDApLAorCQkuY2hhbm5lbFs0XSA9IElJT19DSEFOX1NPRlRfVElNRVNUQU1QKDQpLAorCQkubnVtX2NoYW5uZWxzID0gNSwKIAkJLmludF92cmVmX212ID0gMTAyNCwKLQkJLmRldl9hdHRycyA9ICZhZDc5OTFfNV85XzNfNF9kZXZfYXR0cl9ncm91cCwKLQkJLnNjYW5fYXR0cnMgPSAmYWQ3OTkxXzVfOV8zXzRfc2Nhbl9lbF9ncm91cCwKLQkJLmFkNzk5eF9zZXRfc2Nhbl9tb2RlID0gYWQ3OTkxXzVfOV9zZXRfc2Nhbl9tb2RlLAorCQkuaW5mbyA9ICZhZDc5OTFfaW5mbywKIAl9LAogCVthZDc5OTldID0gewotCQkubnVtX2lucHV0cyA9IDQsCi0JCS5iaXRzID0gMTAsCi0JCS5zaWduID0gSUlPX1NDQU5fRUxfVFlQRV9VTlNJR05FRCwKKwkJLmNoYW5uZWxbMF0gPSBJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsIE5VTEwsIDAsIDAsCisJCQkJICAgICAgICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJCQkgICAgICAgMCwgMCwgSUlPX1NUKCd1JywgMTAsIDE2LCAwKSwgMCksCisJCS5jaGFubmVsWzFdID0gSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCAxLCAwLAorCQkJCSAgICAgICAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCQkJICAgICAgIDEsIDEsIElJT19TVCgndScsIDEwLCAxNiwgMCksIDApLAorCQkuY2hhbm5lbFsyXSA9IElJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgTlVMTCwgMiwgMCwKKwkJCQkgICAgICAgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkJCSAgICAgICAyLCAyLCBJSU9fU1QoJ3UnLCAxMCwgMTYsIDApLCAwKSwKKwkJLmNoYW5uZWxbM10gPSBJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsIE5VTEwsIDMsIDAsCisJCQkJICAgICAgICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJCQkgICAgICAgMywgMywgSUlPX1NUKCd1JywgMTAsIDE2LCAwKSwgMCksCisJCS5jaGFubmVsWzRdID0gSUlPX0NIQU5fU09GVF9USU1FU1RBTVAoNCksCisJCS5udW1fY2hhbm5lbHMgPSA1LAogCQkuaW50X3ZyZWZfbXYgPSAxMDI0LAotCQkuZGV2X2F0dHJzID0gJmFkNzk5MV81XzlfM180X2Rldl9hdHRyX2dyb3VwLAotCQkuc2Nhbl9hdHRycyA9ICZhZDc5OTFfNV85XzNfNF9zY2FuX2VsX2dyb3VwLAotCQkuYWQ3OTl4X3NldF9zY2FuX21vZGUgPSBhZDc5OTFfNV85X3NldF9zY2FuX21vZGUsCisJCS5pbmZvID0gJmFkNzk5MV9pbmZvLAogCX0sCiAJW2FkNzk5Ml0gPSB7Ci0JCS5udW1faW5wdXRzID0gMiwKLQkJLmJpdHMgPSAxMiwKLQkJLnNpZ24gPSBJSU9fU0NBTl9FTF9UWVBFX1VOU0lHTkVELAorCQkuY2hhbm5lbFswXSA9IElJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgTlVMTCwgMCwgMCwKKwkJCQkgICAgICAgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkJCSAgICAgICAwLCAwLCBJSU9fU1QoJ3UnLCAxMiwgMTYsIDApLCAwKSwKKwkJLmNoYW5uZWxbMV0gPSBJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsIE5VTEwsIDEsIDAsCisJCQkJICAgICAgICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJCQkgICAgICAgMSwgMSwgSUlPX1NUKCd1JywgMTIsIDE2LCAwKSwgMCksCisJCS5jaGFubmVsWzJdID0gSUlPX0NIQU5fU09GVF9USU1FU1RBTVAoMiksCisJCS5udW1fY2hhbm5lbHMgPSAzLAogCQkuaW50X3ZyZWZfbXYgPSA0MDk2LAotCQkubW9uaXRvcl9tb2RlID0gdHJ1ZSwKIAkJLmRlZmF1bHRfY29uZmlnID0gQUQ3OTk4X0FMRVJUX0VOLAotCQkuZGV2X2F0dHJzID0gJmFkNzk5Ml9kZXZfYXR0cl9ncm91cCwKLQkJLnNjYW5fYXR0cnMgPSAmYWQ3OTkyX3NjYW5fZWxfZ3JvdXAsCi0JCS5ldmVudF9hdHRycyA9ICZhZDc5OTJfZXZlbnRfYXR0cnNfZ3JvdXAsCi0JCS5hZDc5OXhfc2V0X3NjYW5fbW9kZSA9IGFkNzk5Ml8zXzRfc2V0X3NjYW5fbW9kZSwKKwkJLmluZm8gPSAmYWQ3OTkyX2luZm8sCiAJfSwKIAlbYWQ3OTkzXSA9IHsKLQkJLm51bV9pbnB1dHMgPSA0LAotCQkuYml0cyA9IDEwLAotCQkuc2lnbiA9IElJT19TQ0FOX0VMX1RZUEVfVU5TSUdORUQsCisJCS5jaGFubmVsWzBdID0gSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCAwLCAwLAorCQkJCSAgICAgICAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCQkJICAgICAgIDAsIDAsIElJT19TVCgndScsIDEwLCAxNiwgMCksIDApLAorCQkuY2hhbm5lbFsxXSA9IElJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgTlVMTCwgMSwgMCwKKwkJCQkgICAgICAgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkJCSAgICAgICAxLCAxLCBJSU9fU1QoJ3UnLCAxMCwgMTYsIDApLCAwKSwKKwkJLmNoYW5uZWxbMl0gPSBJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsIE5VTEwsIDIsIDAsCisJCQkJICAgICAgICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJCQkgICAgICAgMiwgMiwgSUlPX1NUKCd1JywgMTAsIDE2LCAwKSwgMCksCisJCS5jaGFubmVsWzNdID0gSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCAzLCAwLAorCQkJCSAgICAgICAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCQkJICAgICAgIDMsIDMsIElJT19TVCgndScsIDEwLCAxNiwgMCksIDApLAorCQkuY2hhbm5lbFs0XSA9IElJT19DSEFOX1NPRlRfVElNRVNUQU1QKDQpLAorCQkubnVtX2NoYW5uZWxzID0gNSwKIAkJLmludF92cmVmX212ID0gMTAyNCwKLQkJLm1vbml0b3JfbW9kZSA9IHRydWUsCiAJCS5kZWZhdWx0X2NvbmZpZyA9IEFENzk5OF9BTEVSVF9FTiwKLQkJLmRldl9hdHRycyA9ICZhZDc5OTFfNV85XzNfNF9kZXZfYXR0cl9ncm91cCwKLQkJLnNjYW5fYXR0cnMgPSAmYWQ3OTkxXzVfOV8zXzRfc2Nhbl9lbF9ncm91cCwKLQkJLmV2ZW50X2F0dHJzID0gJmFkNzk5M180XzdfOF9ldmVudF9hdHRyc19ncm91cCwKLQkJLmFkNzk5eF9zZXRfc2Nhbl9tb2RlID0gYWQ3OTkyXzNfNF9zZXRfc2Nhbl9tb2RlLAorCQkuaW5mbyA9ICZhZDc5OTNfNF83XzhfaW5mbywKIAl9LAogCVthZDc5OTRdID0gewotCQkubnVtX2lucHV0cyA9IDQsCi0JCS5iaXRzID0gMTIsCi0JCS5zaWduID0gSUlPX1NDQU5fRUxfVFlQRV9VTlNJR05FRCwKKwkJLmNoYW5uZWxbMF0gPSBJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsIE5VTEwsIDAsIDAsCisJCQkJICAgICAgICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJCQkgICAgICAgMCwgMCwgSUlPX1NUKCd1JywgMTIsIDE2LCAwKSwgMCksCisJCS5jaGFubmVsWzFdID0gSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCAxLCAwLAorCQkJCSAgICAgICAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCQkJICAgICAgIDEsIDEsIElJT19TVCgndScsIDEyLCAxNiwgMCksIDApLAorCQkuY2hhbm5lbFsyXSA9IElJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgTlVMTCwgMiwgMCwKKwkJCQkgICAgICAgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkJCSAgICAgICAyLCAyLCBJSU9fU1QoJ3UnLCAxMiwgMTYsIDApLCAwKSwKKwkJLmNoYW5uZWxbM10gPSBJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsIE5VTEwsIDMsIDAsCisJCQkJICAgICAgICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJCQkgICAgICAgMywgMywgSUlPX1NUKCd1JywgMTIsIDE2LCAwKSwgMCksCisJCS5jaGFubmVsWzRdID0gSUlPX0NIQU5fU09GVF9USU1FU1RBTVAoNCksCisJCS5udW1fY2hhbm5lbHMgPSA1LAogCQkuaW50X3ZyZWZfbXYgPSA0MDk2LAotCQkubW9uaXRvcl9tb2RlID0gdHJ1ZSwKIAkJLmRlZmF1bHRfY29uZmlnID0gQUQ3OTk4X0FMRVJUX0VOLAotCQkuZGV2X2F0dHJzID0gJmFkNzk5MV81XzlfM180X2Rldl9hdHRyX2dyb3VwLAotCQkuc2Nhbl9hdHRycyA9ICZhZDc5OTFfNV85XzNfNF9zY2FuX2VsX2dyb3VwLAotCQkuZXZlbnRfYXR0cnMgPSAmYWQ3OTkzXzRfN184X2V2ZW50X2F0dHJzX2dyb3VwLAotCQkuYWQ3OTl4X3NldF9zY2FuX21vZGUgPSBhZDc5OTJfM180X3NldF9zY2FuX21vZGUsCisJCS5pbmZvID0gJmFkNzk5M180XzdfOF9pbmZvLAogCX0sCiAJW2FkNzk5N10gPSB7Ci0JCS5udW1faW5wdXRzID0gOCwKLQkJLmJpdHMgPSAxMCwKLQkJLnNpZ24gPSBJSU9fU0NBTl9FTF9UWVBFX1VOU0lHTkVELAorCQkuY2hhbm5lbFswXSA9IElJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgTlVMTCwgMCwgMCwKKwkJCQkJICAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCQkJCSAgMCwgMCwgSUlPX1NUKCd1JywgMTAsIDE2LCAwKSwgMCksCisJCS5jaGFubmVsWzFdID0gSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCAxLCAwLAorCQkJCQkgICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJCQkJICAxLCAxLCBJSU9fU1QoJ3UnLCAxMCwgMTYsIDApLCAwKSwKKwkJLmNoYW5uZWxbMl0gPSBJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsIE5VTEwsIDIsIDAsCisJCQkJCSAgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkJCQkgIDIsIDIsIElJT19TVCgndScsIDEwLCAxNiwgMCksIDApLAorCQkuY2hhbm5lbFszXSA9IElJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgTlVMTCwgMywgMCwKKwkJCQkJICAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCQkJCSAgMywgMywgSUlPX1NUKCd1JywgMTAsIDE2LCAwKSwgMCksCisJCS5jaGFubmVsWzRdID0gSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCA0LCAwLAorCQkJCQkgICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJCQkJICA0LCA0LCBJSU9fU1QoJ3UnLCAxMCwgMTYsIDApLCAwKSwKKwkJLmNoYW5uZWxbNV0gPSBJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsIE5VTEwsIDUsIDAsCisJCQkJCSAgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkJCQkgIDUsIDUsIElJT19TVCgndScsIDEwLCAxNiwgMCksIDApLAorCQkuY2hhbm5lbFs2XSA9IElJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgTlVMTCwgNiwgMCwKKwkJCQkJICAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCQkJCSAgNiwgNiwgSUlPX1NUKCd1JywgMTAsIDE2LCAwKSwgMCksCisJCS5jaGFubmVsWzddID0gSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCA3LCAwLAorCQkJCQkgICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJCQkJICA3LCA3LCBJSU9fU1QoJ3UnLCAxMCwgMTYsIDApLCAwKSwKKwkJLmNoYW5uZWxbOF0gPSBJSU9fQ0hBTl9TT0ZUX1RJTUVTVEFNUCg4KSwKKwkJLm51bV9jaGFubmVscyA9IDksCiAJCS5pbnRfdnJlZl9tdiA9IDEwMjQsCi0JCS5tb25pdG9yX21vZGUgPSB0cnVlLAogCQkuZGVmYXVsdF9jb25maWcgPSBBRDc5OThfQUxFUlRfRU4sCi0JCS5kZXZfYXR0cnMgPSAmYWQ3OTk3XzhfZGV2X2F0dHJfZ3JvdXAsCi0JCS5zY2FuX2F0dHJzID0gJmFkNzk5N184X3NjYW5fZWxfZ3JvdXAsCi0JCS5ldmVudF9hdHRycyA9ICZhZDc5OTNfNF83XzhfZXZlbnRfYXR0cnNfZ3JvdXAsCi0JCS5hZDc5OXhfc2V0X3NjYW5fbW9kZSA9IGFkNzk5N184X3NldF9zY2FuX21vZGUsCisJCS5pbmZvID0gJmFkNzk5M180XzdfOF9pbmZvLAogCX0sCiAJW2FkNzk5OF0gPSB7Ci0JCS5udW1faW5wdXRzID0gOCwKLQkJLmJpdHMgPSAxMiwKLQkJLnNpZ24gPSBJSU9fU0NBTl9FTF9UWVBFX1VOU0lHTkVELAorCQkuY2hhbm5lbFswXSA9IElJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgTlVMTCwgMCwgMCwKKwkJCQkgICAgICAgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkJCSAgICAgICAwLCAwLCBJSU9fU1QoJ3UnLCAxMiwgMTYsIDApLCAwKSwKKwkJLmNoYW5uZWxbMV0gPSBJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsIE5VTEwsIDEsIDAsCisJCQkJICAgICAgICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJCQkgICAgICAgMSwgMSwgSUlPX1NUKCd1JywgMTIsIDE2LCAwKSwgMCksCisJCS5jaGFubmVsWzJdID0gSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCAyLCAwLAorCQkJCSAgICAgICAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCQkJICAgICAgIDIsIDIsIElJT19TVCgndScsIDEyLCAxNiwgMCksIDApLAorCQkuY2hhbm5lbFszXSA9IElJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgTlVMTCwgMywgMCwKKwkJCQkgICAgICAgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkJCSAgICAgICAzLCAzLCBJSU9fU1QoJ3UnLCAxMiwgMTYsIDApLCAwKSwKKwkJLmNoYW5uZWxbNF0gPSBJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsIE5VTEwsIDQsIDAsCisJCQkJICAgICAgICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJCQkgICAgICAgNCwgNCwgSUlPX1NUKCd1JywgMTIsIDE2LCAwKSwgMCksCisJCS5jaGFubmVsWzVdID0gSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCA1LCAwLAorCQkJCSAgICAgICAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCQkJICAgICAgIDUsIDUsIElJT19TVCgndScsIDEyLCAxNiwgMCksIDApLAorCQkuY2hhbm5lbFs2XSA9IElJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgTlVMTCwgNiwgMCwKKwkJCQkgICAgICAgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkJCSAgICAgICA2LCA2LCBJSU9fU1QoJ3UnLCAxMiwgMTYsIDApLCAwKSwKKwkJLmNoYW5uZWxbN10gPSBJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsIE5VTEwsIDcsIDAsCisJCQkJCSAgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkJCQkgIDcsIDcsIElJT19TVCgndScsIDEyLCAxNiwgMCksIDApLAorCQkuY2hhbm5lbFs4XSA9IElJT19DSEFOX1NPRlRfVElNRVNUQU1QKDgpLAorCQkubnVtX2NoYW5uZWxzID0gOSwKIAkJLmludF92cmVmX212ID0gNDA5NiwKLQkJLm1vbml0b3JfbW9kZSA9IHRydWUsCiAJCS5kZWZhdWx0X2NvbmZpZyA9IEFENzk5OF9BTEVSVF9FTiwKLQkJLmRldl9hdHRycyA9ICZhZDc5OTdfOF9kZXZfYXR0cl9ncm91cCwKLQkJLnNjYW5fYXR0cnMgPSAmYWQ3OTk3Xzhfc2Nhbl9lbF9ncm91cCwKLQkJLmV2ZW50X2F0dHJzID0gJmFkNzk5M180XzdfOF9ldmVudF9hdHRyc19ncm91cCwKLQkJLmFkNzk5eF9zZXRfc2Nhbl9tb2RlID0gYWQ3OTk3Xzhfc2V0X3NjYW5fbW9kZSwKKwkJLmluZm8gPSAmYWQ3OTkzXzRfN184X2luZm8sCiAJfSwKIH07CiAKQEAgLTc3MiwxNiArNjUzLDE2IEBACiB7CiAJaW50IHJldCwgcmVnZG9uZSA9IDA7CiAJc3RydWN0IGFkNzk5eF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0Jc3RydWN0IGFkNzk5eF9zdGF0ZSAqc3QgPSBremFsbG9jKHNpemVvZigqc3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoc3QgPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yX3JldDsKLQl9CisJc3RydWN0IGFkNzk5eF9zdGF0ZSAqc3Q7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2Uoc2l6ZW9mKCpzdCkpOwogCisJaWYgKGluZGlvX2RldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKIAkvKiB0aGlzIGlzIG9ubHkgdXNlZCBmb3IgZGV2aWNlIHJlbW92YWwgcHVycG9zZXMgKi8KLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBzdCk7CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgaW5kaW9fZGV2KTsKIAotCWF0b21pY19zZXQoJnN0LT5wcm90ZWN0X3JpbmcsIDApOwogCXN0LT5pZCA9IGlkLT5kcml2ZXJfZGF0YTsKIAlzdC0+Y2hpcF9pbmZvID0gJmFkNzk5eF9jaGlwX2luZm9fdGJsW3N0LT5pZF07CiAJc3QtPmNvbmZpZyA9IHN0LT5jaGlwX2luZm8tPmRlZmF1bHRfY29uZmlnOwpAQCAtODAxLDk0ICs2ODIsNzYgQEAKIAl9CiAJc3QtPmNsaWVudCA9IGNsaWVudDsKIAotCXN0LT5pbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKHN0LT5pbmRpb19kZXYgPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PTUVNOworCWluZGlvX2Rldi0+ZGV2LnBhcmVudCA9ICZjbGllbnQtPmRldjsKKwlpbmRpb19kZXYtPm5hbWUgPSBpZC0+bmFtZTsKKwlpbmRpb19kZXYtPmluZm8gPSBzdC0+Y2hpcF9pbmZvLT5pbmZvOworCWluZGlvX2Rldi0+bmFtZSA9IGlkLT5uYW1lOworCWluZGlvX2Rldi0+ZGV2X2RhdGEgPSAodm9pZCAqKShzdCk7CisKKwlpbmRpb19kZXYtPm1vZGVzID0gSU5ESU9fRElSRUNUX01PREU7CisJaW5kaW9fZGV2LT5jaGFubmVscyA9IHN0LT5jaGlwX2luZm8tPmNoYW5uZWw7CisJaW5kaW9fZGV2LT5udW1fY2hhbm5lbHMgPSBzdC0+Y2hpcF9pbmZvLT5udW1fY2hhbm5lbHM7CisKKwlyZXQgPSBhZDc5OXhfcmVnaXN0ZXJfcmluZ19mdW5jc19hbmRfaW5pdChpbmRpb19kZXYpOworCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfZGlzYWJsZV9yZWc7Ci0JfQogCi0JLyogRXN0YWJpbGlzaCB0aGF0IHRoZSBpaW9fZGV2IGlzIGEgY2hpbGQgb2YgdGhlIGkyYyBkZXZpY2UgKi8KLQlzdC0+aW5kaW9fZGV2LT5kZXYucGFyZW50ID0gJmNsaWVudC0+ZGV2OwotCXN0LT5pbmRpb19kZXYtPmF0dHJzID0gc3QtPmNoaXBfaW5mby0+ZGV2X2F0dHJzOwotCXN0LT5pbmRpb19kZXYtPmV2ZW50X2F0dHJzID0gc3QtPmNoaXBfaW5mby0+ZXZlbnRfYXR0cnM7Ci0KLQlzdC0+aW5kaW9fZGV2LT5kZXZfZGF0YSA9ICh2b2lkICopKHN0KTsKLQlzdC0+aW5kaW9fZGV2LT5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEU7Ci0Jc3QtPmluZGlvX2Rldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1RfTU9ERTsKLQlzdC0+aW5kaW9fZGV2LT5udW1faW50ZXJydXB0X2xpbmVzID0gMTsKLQotCXJldCA9IGFkNzk5eF9zZXRfc2Nhbl9tb2RlKHN0LCAwKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycm9yX2ZyZWVfZGV2aWNlOwotCi0JcmV0ID0gYWQ3OTl4X3JlZ2lzdGVyX3JpbmdfZnVuY3NfYW5kX2luaXQoc3QtPmluZGlvX2Rldik7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJvcl9mcmVlX2RldmljZTsKLQotCXJldCA9IGlpb19kZXZpY2VfcmVnaXN0ZXIoc3QtPmluZGlvX2Rldik7CisJcmV0ID0gaWlvX2RldmljZV9yZWdpc3RlcihpbmRpb19kZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfY2xlYW51cF9yaW5nOwogCXJlZ2RvbmUgPSAxOwogCi0JcmV0ID0gaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyKHN0LT5pbmRpb19kZXYtPnJpbmcsIDApOworCXJldCA9IGlpb19yaW5nX2J1ZmZlcl9yZWdpc3Rlcl9leChpbmRpb19kZXYtPnJpbmcsIDAsCisJCQkJCSAgaW5kaW9fZGV2LT5jaGFubmVscywKKwkJCQkJICBpbmRpb19kZXYtPm51bV9jaGFubmVscyk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl9jbGVhbnVwX3Jpbmc7CiAKLQlpZiAoY2xpZW50LT5pcnEgPiAwICYmIHN0LT5jaGlwX2luZm8tPm1vbml0b3JfbW9kZSkgewotCQlJTklUX1dPUksoJnN0LT53b3JrX3RocmVzaCwgYWQ3OTl4X2ludGVycnVwdF9iaCk7Ci0KLQkJcmV0ID0gaWlvX3JlZ2lzdGVyX2ludGVycnVwdF9saW5lKGNsaWVudC0+aXJxLAotCQkJCXN0LT5pbmRpb19kZXYsCi0JCQkJMCwKLQkJCQlJUlFGX1RSSUdHRVJfRkFMTElORywKLQkJCQljbGllbnQtPm5hbWUpOworCWlmIChjbGllbnQtPmlycSA+IDApIHsKKwkJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoY2xpZW50LT5pcnEsCisJCQkJCSAgIE5VTEwsCisJCQkJCSAgIGFkNzk5eF9ldmVudF9oYW5kbGVyLAorCQkJCQkgICBJUlFGX1RSSUdHRVJfRkFMTElORyB8CisJCQkJCSAgIElSUUZfT05FU0hPVCwKKwkJCQkJICAgY2xpZW50LT5uYW1lLAorCQkJCQkgICBpbmRpb19kZXYpOwogCQlpZiAocmV0KQogCQkJZ290byBlcnJvcl9jbGVhbnVwX3Jpbmc7Ci0KLQkJLyoKLQkJICogVGhlIGV2ZW50IGhhbmRsZXIgbGlzdCBlbGVtZW50IHJlZmVyIHRvIGlpb19ldmVudF9hZDc5OXguCi0JCSAqIEFsbCBldmVudCBhdHRyaWJ1dGVzIGJpbmQgdG8gdGhlIHNhbWUgZXZlbnQgaGFuZGxlci4KLQkJICogU28sIG9ubHkgcmVnaXN0ZXIgZXZlbnQgaGFuZGxlciBvbmNlLgotCQkgKi8KLQkJaWlvX2FkZF9ldmVudF90b19saXN0KCZpaW9fZXZlbnRfYWQ3OTl4LAotCQkJCSZzdC0+aW5kaW9fZGV2LT5pbnRlcnJ1cHRzWzBdLT5ldl9saXN0KTsKIAl9CiAKIAlyZXR1cm4gMDsKKwogZXJyb3JfY2xlYW51cF9yaW5nOgotCWFkNzk5eF9yaW5nX2NsZWFudXAoc3QtPmluZGlvX2Rldik7Ci1lcnJvcl9mcmVlX2RldmljZToKLQlpZiAoIXJlZ2RvbmUpCi0JCWlpb19mcmVlX2RldmljZShzdC0+aW5kaW9fZGV2KTsKLQllbHNlCi0JCWlpb19kZXZpY2VfdW5yZWdpc3RlcihzdC0+aW5kaW9fZGV2KTsKKwlhZDc5OXhfcmluZ19jbGVhbnVwKGluZGlvX2Rldik7CiBlcnJvcl9kaXNhYmxlX3JlZzoKIAlpZiAoIUlTX0VSUihzdC0+cmVnKSkKIAkJcmVndWxhdG9yX2Rpc2FibGUoc3QtPnJlZyk7CiBlcnJvcl9wdXRfcmVnOgogCWlmICghSVNfRVJSKHN0LT5yZWcpKQogCQlyZWd1bGF0b3JfcHV0KHN0LT5yZWcpOwotCWtmcmVlKHN0KTsKLWVycm9yX3JldDoKKwlpZiAocmVnZG9uZSkKKwkJaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CisJZWxzZQorCQlpaW9fZnJlZV9kZXZpY2UoaW5kaW9fZGV2KTsKKwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBfX2RldmV4aXQgaW50IGFkNzk5eF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgYWQ3OTl4X3N0YXRlICpzdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBzdC0+aW5kaW9fZGV2OworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgYWQ3OTl4X3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CiAKLQlpZiAoY2xpZW50LT5pcnEgPiAwICYmIHN0LT5jaGlwX2luZm8tPm1vbml0b3JfbW9kZSkKLQkJaWlvX3VucmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoaW5kaW9fZGV2LCAwKTsKKwlpZiAoY2xpZW50LT5pcnEgPiAwKQorCQlmcmVlX2lycShjbGllbnQtPmlycSwgaW5kaW9fZGV2KTsKIAogCWlpb19yaW5nX2J1ZmZlcl91bnJlZ2lzdGVyKGluZGlvX2Rldi0+cmluZyk7CiAJYWQ3OTl4X3JpbmdfY2xlYW51cChpbmRpb19kZXYpOwotCWlpb19kZXZpY2VfdW5yZWdpc3RlcihpbmRpb19kZXYpOwogCWlmICghSVNfRVJSKHN0LT5yZWcpKSB7CiAJCXJlZ3VsYXRvcl9kaXNhYmxlKHN0LT5yZWcpOwogCQlyZWd1bGF0b3JfcHV0KHN0LT5yZWcpOwogCX0KLQlrZnJlZShzdCk7CisJaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzk5eF9yaW5nLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc5OXhfcmluZy5jCmluZGV4IDA4NzVhN2UuLjFhZTg4NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzk5eF9yaW5nLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3OTl4X3JpbmcuYwpAQCAtMTAsNyArMTAsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0yOSw3ICsyOCw3IEBACiAKIGludCBhZDc5OXhfc2luZ2xlX2NoYW5uZWxfZnJvbV9yaW5nKHN0cnVjdCBhZDc5OXhfc3RhdGUgKnN0LCBsb25nIG1hc2spCiB7Ci0Jc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyA9IHN0LT5pbmRpb19kZXYtPnJpbmc7CisJc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyA9IGlpb19wcml2X3RvX2RldihzdCktPnJpbmc7CiAJaW50IGNvdW50ID0gMCwgcmV0OwogCXUxNiAqcmluZ19kYXRhOwogCkBAIC0zOCwxMiArMzcsMTMgQEAKIAkJZ290byBlcnJvcl9yZXQ7CiAJfQogCi0JcmluZ19kYXRhID0ga21hbGxvYyhyaW5nLT5hY2Nlc3MuZ2V0X2J5dGVzX3Blcl9kYXR1bShyaW5nKSwgR0ZQX0tFUk5FTCk7CisJcmluZ19kYXRhID0ga21hbGxvYyhyaW5nLT5hY2Nlc3MtPmdldF9ieXRlc19wZXJfZGF0dW0ocmluZyksCisJCQkgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKHJpbmdfZGF0YSA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3JfcmV0OwogCX0KLQlyZXQgPSByaW5nLT5hY2Nlc3MucmVhZF9sYXN0KHJpbmcsICh1OCAqKSByaW5nX2RhdGEpOworCXJldCA9IHJpbmctPmFjY2Vzcy0+cmVhZF9sYXN0KHJpbmcsICh1OCAqKSByaW5nX2RhdGEpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfZnJlZV9yaW5nX2RhdGE7CiAJLyogTmVlZCBhIGNvdW50IG9mIGNoYW5uZWxzIHByaW9yIHRvIHRoaXMgb25lICovCkBAIC03Miw3ICs3Miw3IEBACiBzdGF0aWMgaW50IGFkNzk5eF9yaW5nX3ByZWVuYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQogewogCXN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcgPSBpbmRpb19kZXYtPnJpbmc7Ci0Jc3RydWN0IGFkNzk5eF9zdGF0ZSAqc3QgPSBpbmRpb19kZXYtPmRldl9kYXRhOworCXN0cnVjdCBhZDc5OXhfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOwogCiAJLyoKIAkgKiBOZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGN1cnJlbnQgbW9kZSBiYXNlZCB1cG9uIHRoZSByZXF1ZXN0ZWQKQEAgLTgwLDcgKzgwLDcgQEAKIAkgKi8KIAogCWlmIChzdC0+aWQgPT0gYWQ3OTk3IHx8IHN0LT5pZCA9PSBhZDc5OTgpCi0JCWFkNzk5eF9zZXRfc2Nhbl9tb2RlKHN0LCByaW5nLT5zY2FuX21hc2spOworCQlhZDc5OTdfOF9zZXRfc2Nhbl9tb2RlKHN0LCByaW5nLT5zY2FuX21hc2spOwogCiAJc3QtPmRfc2l6ZSA9IHJpbmctPnNjYW5fY291bnQgKiAyOwogCkBAIC05MSw1NiArOTEsMzQgQEAKIAkJCXN0LT5kX3NpemUgKz0gc2l6ZW9mKHM2NCkgLSAoc3QtPmRfc2l6ZSAlIHNpemVvZihzNjQpKTsKIAl9CiAKLQlpZiAoaW5kaW9fZGV2LT5yaW5nLT5hY2Nlc3Muc2V0X2J5dGVzX3Blcl9kYXR1bSkKLQkJaW5kaW9fZGV2LT5yaW5nLT5hY2Nlc3Muc2V0X2J5dGVzX3Blcl9kYXR1bShpbmRpb19kZXYtPnJpbmcsCisJaWYgKGluZGlvX2Rldi0+cmluZy0+YWNjZXNzLT5zZXRfYnl0ZXNfcGVyX2RhdHVtKQorCQlpbmRpb19kZXYtPnJpbmctPmFjY2Vzcy0+c2V0X2J5dGVzX3Blcl9kYXR1bShpbmRpb19kZXYtPnJpbmcsCiAJCQkJCQkJICAgIHN0LT5kX3NpemUpOwogCiAJcmV0dXJuIDA7CiB9CiAKIC8qKgotICogYWQ3OTl4X3BvbGxfZnVuY190aCgpIHRoIG9mIHRyaWdnZXIgbGF1bmNoZWQgcG9sbGluZyB0byByaW5nIGJ1ZmZlcgotICoKLSAqIEFzIHNhbXBsaW5nIG9ubHkgb2NjdXJzIG9uIGkyYyBjb21tcyBvY2N1cnJpbmcsIGxlYXZlIHRpbWVzdGFtcGluZyB1bnRpbAotICogdGhlbi4gIFNvbWUgdHJpZ2dlcnMgd2lsbCBnZW5lcmF0ZSB0aGVpciBvd24gdGltZSBzdGFtcC4gIEN1cnJlbnRseQotICogdGhlcmUgaXMgbm8gd2F5IG9mIG5vdGlmeWluZyB0aGVtIHdoZW4gbm8gb25lIGNhcmVzLgotICoqLwotc3RhdGljIHZvaWQgYWQ3OTl4X3BvbGxfZnVuY190aChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LCBzNjQgdGltZSkKLXsKLQlzdHJ1Y3QgYWQ3OTl4X3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7Ci0KLQlzY2hlZHVsZV93b3JrKCZzdC0+cG9sbF93b3JrKTsKLQotCXJldHVybjsKLX0KLS8qKgotICogYWQ3OTl4X3BvbGxfYmhfdG9fcmluZygpIGJoIG9mIHRyaWdnZXIgbGF1bmNoZWQgcG9sbGluZyB0byByaW5nIGJ1ZmZlcgotICogQHdvcmtfczoJdGhlIHdvcmsgc3RydWN0IHRocm91Z2ggd2hpY2ggdGhpcyB3YXMgc2NoZWR1bGVkCisgKiBhZDc5OXhfdHJpZ2dlcl9oYW5kbGVyKCkgYmggb2YgdHJpZ2dlciBsYXVuY2hlZCBwb2xsaW5nIHRvIHJpbmcgYnVmZmVyCiAgKgogICogQ3VycmVudGx5IHRoZXJlIGlzIG5vIG9wdGlvbiBpbiB0aGlzIGRyaXZlciB0byBkaXNhYmxlIHRoZSBzYXZpbmcgb2YKICAqIHRpbWVzdGFtcHMgd2l0aGluIHRoZSByaW5nLgotICogSSB0aGluayB0aGUgb25lIGNvcHkgb2YgdGhpcyBhdCBhIHRpbWUgd2FzIHRvIGF2b2lkIHByb2JsZW1zIGlmIHRoZQotICogdHJpZ2dlciB3YXMgc2V0IGZhciB0b28gaGlnaCBhbmQgdGhlIHJlYWRzIHRoZW4gbG9ja2VkIHVwIHRoZSBjb21wdXRlci4KICAqKi8KLXN0YXRpYyB2b2lkIGFkNzk5eF9wb2xsX2JoX3RvX3Jpbmcoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrX3MpCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBhZDc5OXhfdHJpZ2dlcl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKnApCiB7Ci0Jc3RydWN0IGFkNzk5eF9zdGF0ZSAqc3QgPSBjb250YWluZXJfb2Yod29ya19zLCBzdHJ1Y3QgYWQ3OTl4X3N0YXRlLAotCQkJCQkJICBwb2xsX3dvcmspOwotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBzdC0+aW5kaW9fZGV2OworCXN0cnVjdCBpaW9fcG9sbF9mdW5jICpwZiA9IHA7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHBmLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGFkNzk5eF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CiAJc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyA9IGluZGlvX2Rldi0+cmluZzsKLQlzdHJ1Y3QgaWlvX3N3X3JpbmdfYnVmZmVyICpyaW5nX3N3ID0gaWlvX3RvX3N3X3JpbmcoaW5kaW9fZGV2LT5yaW5nKTsKIAlzNjQgdGltZV9uczsKIAlfX3U4ICpyeGJ1ZjsKIAlpbnQgYl9zZW50OwogCXU4IGNtZDsKIAotCS8qIEVuc3VyZSBvbmx5IG9uZSBjb3B5IG9mIHRoaXMgZnVuY3Rpb24gcnVubmluZyBhdCBhIHRpbWUgKi8KLQlpZiAoYXRvbWljX2luY19yZXR1cm4oJnN0LT5wcm90ZWN0X3JpbmcpID4gMSkKLQkJcmV0dXJuOwotCiAJcnhidWYgPSBrbWFsbG9jKHN0LT5kX3NpemUsIEdGUF9LRVJORUwpOwogCWlmIChyeGJ1ZiA9PSBOVUxMKQotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCiAJc3dpdGNoIChzdC0+aWQpIHsKIAljYXNlIGFkNzk5MToKQEAgLTE3MywxNiArMTUxLDI1IEBACiAJCW1lbWNweShyeGJ1ZiArIHN0LT5kX3NpemUgLSBzaXplb2YoczY0KSwKIAkJCSZ0aW1lX25zLCBzaXplb2YodGltZV9ucykpOwogCi0JcmluZy0+YWNjZXNzLnN0b3JlX3RvKCZyaW5nX3N3LT5idWYsIHJ4YnVmLCB0aW1lX25zKTsKKwlyaW5nLT5hY2Nlc3MtPnN0b3JlX3RvKGluZGlvX2Rldi0+cmluZywgcnhidWYsIHRpbWVfbnMpOwogZG9uZToKIAlrZnJlZShyeGJ1Zik7Ci0JYXRvbWljX2RlYygmc3QtPnByb3RlY3RfcmluZyk7CisJaWYgKGJfc2VudCA8IDApCisJCXJldHVybiBiX3NlbnQ7CitvdXQ6CisJaWlvX3RyaWdnZXJfbm90aWZ5X2RvbmUoaW5kaW9fZGV2LT50cmlnKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9fcmluZ19zZXR1cF9vcHMgYWQ3OTl4X2J1Zl9zZXR1cF9vcHMgPSB7CisJLnByZWVuYWJsZSA9ICZhZDc5OXhfcmluZ19wcmVlbmFibGUsCisJLnBvc3RlbmFibGUgPSAmaWlvX3RyaWdnZXJlZF9yaW5nX3Bvc3RlbmFibGUsCisJLnByZWRpc2FibGUgPSAmaWlvX3RyaWdnZXJlZF9yaW5nX3ByZWRpc2FibGUsCit9OwogCiBpbnQgYWQ3OTl4X3JlZ2lzdGVyX3JpbmdfZnVuY3NfYW5kX2luaXQoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKLQlzdHJ1Y3QgYWQ3OTl4X3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CiAJaW50IHJldCA9IDA7CiAKIAlpbmRpb19kZXYtPnJpbmcgPSBpaW9fc3dfcmJfYWxsb2NhdGUoaW5kaW9fZGV2KTsKQEAgLTE5MSwyNSArMTc4LDI3IEBACiAJCWdvdG8gZXJyb3JfcmV0OwogCX0KIAkvKiBFZmZlY3RpdmVseSBzZWxlY3QgdGhlIHJpbmcgYnVmZmVyIGltcGxlbWVudGF0aW9uICovCi0JaWlvX3Jpbmdfc3dfcmVnaXN0ZXJfZnVuY3MoJnN0LT5pbmRpb19kZXYtPnJpbmctPmFjY2Vzcyk7Ci0JcmV0ID0gaWlvX2FsbG9jX3BvbGxmdW5jKGluZGlvX2RldiwgTlVMTCwgJmFkNzk5eF9wb2xsX2Z1bmNfdGgpOwotCWlmIChyZXQpCisJaW5kaW9fZGV2LT5yaW5nLT5hY2Nlc3MgPSAmcmluZ19zd19hY2Nlc3NfZnVuY3M7CisJaW5kaW9fZGV2LT5wb2xsZnVuYyA9IGlpb19hbGxvY19wb2xsZnVuYyhOVUxMLAorCQkJCQkJICZhZDc5OXhfdHJpZ2dlcl9oYW5kbGVyLAorCQkJCQkJIElSUUZfT05FU0hPVCwKKwkJCQkJCSBpbmRpb19kZXYsCisJCQkJCQkgIiVzX2NvbnN1bWVyJWQiLAorCQkJCQkJIGluZGlvX2Rldi0+bmFtZSwKKwkJCQkJCSBpbmRpb19kZXYtPmlkKTsKKwlpZiAoaW5kaW9fZGV2LT5wb2xsZnVuYyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3JfZGVhbGxvY2F0ZV9zd19yYjsKKwl9CiAKIAkvKiBSaW5nIGJ1ZmZlciBmdW5jdGlvbnMgLSBoZXJlIHRyaWdnZXIgc2V0dXAgcmVsYXRlZCAqLwotCi0JaW5kaW9fZGV2LT5yaW5nLT5wcmVlbmFibGUgPSAmYWQ3OTl4X3JpbmdfcHJlZW5hYmxlOwotCWluZGlvX2Rldi0+cmluZy0+cG9zdGVuYWJsZSA9ICZpaW9fdHJpZ2dlcmVkX3JpbmdfcG9zdGVuYWJsZTsKLQlpbmRpb19kZXYtPnJpbmctPnByZWRpc2FibGUgPSAmaWlvX3RyaWdnZXJlZF9yaW5nX3ByZWRpc2FibGU7CisJaW5kaW9fZGV2LT5yaW5nLT5zZXR1cF9vcHMgPSAmYWQ3OTl4X2J1Zl9zZXR1cF9vcHM7CiAJaW5kaW9fZGV2LT5yaW5nLT5zY2FuX3RpbWVzdGFtcCA9IHRydWU7CiAKLQlJTklUX1dPUksoJnN0LT5wb2xsX3dvcmssICZhZDc5OXhfcG9sbF9iaF90b19yaW5nKTsKLQotCWluZGlvX2Rldi0+cmluZy0+c2Nhbl9lbF9hdHRycyA9IHN0LT5jaGlwX2luZm8tPnNjYW5fYXR0cnM7Ci0KIAkvKiBGbGFnIHRoYXQgcG9sbGVkIHJpbmcgYnVmZmVyaW5nIGlzIHBvc3NpYmxlICovCiAJaW5kaW9fZGV2LT5tb2RlcyB8PSBJTkRJT19SSU5HX1RSSUdHRVJFRDsKIAlyZXR1cm4gMDsKKwogZXJyb3JfZGVhbGxvY2F0ZV9zd19yYjoKIAlpaW9fc3dfcmJfZnJlZShpbmRpb19kZXYtPnJpbmcpOwogZXJyb3JfcmV0OgpAQCAtMjI0LDYgKzIxMyw2IEBACiAJCWlpb190cmlnZ2VyX2RldHRhY2hfcG9sbF9mdW5jKGluZGlvX2Rldi0+dHJpZywKIAkJCQkJICAgICAgaW5kaW9fZGV2LT5wb2xsZnVuYyk7CiAJfQotCWtmcmVlKGluZGlvX2Rldi0+cG9sbGZ1bmMpOworCWlpb19kZWFsbG9jX3BvbGxmdW5jKGluZGlvX2Rldi0+cG9sbGZ1bmMpOwogCWlpb19zd19yYl9mcmVlKGluZGlvX2Rldi0+cmluZyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZHQ3MzEwLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZHQ3MzEwLmMKaW5kZXggNzcxYTQwOS4uNjhlY2EwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWR0NzMxMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkdDczMTAuYwpAQCAtNywxNSArNywxMiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9ydGMuaD4KIAogI2luY2x1ZGUgIi4uL2lpby5oIgogI2luY2x1ZGUgIi4uL3N5c2ZzLmgiCkBAIC04MiwxMSArNzksOCBAQAogICovCiAKIHN0cnVjdCBhZHQ3MzEwX2NoaXBfaW5mbyB7Ci0JY29uc3QgY2hhciAqbmFtZTsKIAlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpX2RldjsKIAlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2OwotCXN0cnVjdCB3b3JrX3N0cnVjdCB0aHJlc2hfd29yazsKLQlzNjQgbGFzdF90aW1lc3RhbXA7CiAJdTggIGNvbmZpZzsKIH07CiAKQEAgLTM4MCwyNCArMzc0LDEyIEBACiAKIHN0YXRpYyBJSU9fREVWSUNFX0FUVFIodmFsdWUsIFNfSVJVR08sIGFkdDczMTBfc2hvd192YWx1ZSwgTlVMTCwgMCk7CiAKLXN0YXRpYyBzc2l6ZV90IGFkdDczMTBfc2hvd19uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgYWR0NzMxMF9jaGlwX2luZm8gKmNoaXAgPSBkZXZfaW5mby0+ZGV2X2RhdGE7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGNoaXAtPm5hbWUpOwotfQotCi1zdGF0aWMgSUlPX0RFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIGFkdDczMTBfc2hvd19uYW1lLCBOVUxMLCAwKTsKLQogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkdDczMTBfYXR0cmlidXRlc1tdID0gewogCSZpaW9fZGV2X2F0dHJfYXZhaWxhYmxlX21vZGVzLmRldl9hdHRyLmF0dHIsCiAJJmlpb19kZXZfYXR0cl9tb2RlLmRldl9hdHRyLmF0dHIsCiAJJmlpb19kZXZfYXR0cl9yZXNvbHV0aW9uLmRldl9hdHRyLmF0dHIsCiAJJmlpb19kZXZfYXR0cl9pZC5kZXZfYXR0ci5hdHRyLAogCSZpaW9fZGV2X2F0dHJfdmFsdWUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX25hbWUuZGV2X2F0dHIuYXR0ciwKIAlOVUxMLAogfTsKIApAQCAtNDA1LDUzICszODcsMzkgQEAKIAkuYXR0cnMgPSBhZHQ3MzEwX2F0dHJpYnV0ZXMsCiB9OwogCi0vKgotICogdGVtcGVyYXR1cmUgYm91bmQgZXZlbnRzCi0gKi8KLQotI2RlZmluZSBJSU9fRVZFTlRfQ09ERV9BRFQ3MzEwX0FCT1ZFX0FMQVJNICAgIElJT19CVUZGRVJfRVZFTlRfQ09ERSgwKQotI2RlZmluZSBJSU9fRVZFTlRfQ09ERV9BRFQ3MzEwX0JFTExPV19BTEFSTSAgIElJT19CVUZGRVJfRVZFTlRfQ09ERSgxKQotI2RlZmluZSBJSU9fRVZFTlRfQ09ERV9BRFQ3MzEwX0FCT1ZFX0NSSVQgICAgIElJT19CVUZGRVJfRVZFTlRfQ09ERSgyKQotCi1zdGF0aWMgdm9pZCBhZHQ3MzEwX2ludGVycnVwdF9iaChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmtfcykKK3N0YXRpYyBpcnFyZXR1cm5fdCBhZHQ3MzEwX2V2ZW50X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqcHJpdmF0ZSkKIHsKLQlzdHJ1Y3QgYWR0NzMxMF9jaGlwX2luZm8gKmNoaXAgPQotCQljb250YWluZXJfb2Yod29ya19zLCBzdHJ1Y3QgYWR0NzMxMF9jaGlwX2luZm8sIHRocmVzaF93b3JrKTsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gcHJpdmF0ZTsKKwlzdHJ1Y3QgYWR0NzMxMF9jaGlwX2luZm8gKmNoaXAgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CisJczY0IHRpbWVzdGFtcCA9IGlpb19nZXRfdGltZV9ucygpOwogCXU4IHN0YXR1czsKKwlpbnQgcmV0OwogCi0JaWYgKGFkdDczMTBfc3BpX3JlYWRfYnl0ZShjaGlwLCBBRFQ3MzEwX1NUQVRVUywgJnN0YXR1cykpCi0JCXJldHVybjsKKwlyZXQgPSBhZHQ3MzEwX3NwaV9yZWFkX2J5dGUoY2hpcCwgQURUNzMxMF9TVEFUVVMsICZzdGF0dXMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAlpZiAoc3RhdHVzICYgQURUNzMxMF9TVEFUX1RfSElHSCkKLQkJaWlvX3B1c2hfZXZlbnQoY2hpcC0+aW5kaW9fZGV2LCAwLAotCQkJSUlPX0VWRU5UX0NPREVfQURUNzMxMF9BQk9WRV9BTEFSTSwKLQkJCWNoaXAtPmxhc3RfdGltZXN0YW1wKTsKKwkJaWlvX3B1c2hfZXZlbnQoaW5kaW9fZGV2LCAwLAorCQkJICAgICAgIElJT19VTk1PRF9FVkVOVF9DT0RFKElJT19URU1QLCAwLAorCQkJCQkJICAgIElJT19FVl9UWVBFX1RIUkVTSCwKKwkJCQkJCSAgICBJSU9fRVZfRElSX1JJU0lORyksCisJCQkgICAgICAgdGltZXN0YW1wKTsKIAlpZiAoc3RhdHVzICYgQURUNzMxMF9TVEFUX1RfTE9XKQotCQlpaW9fcHVzaF9ldmVudChjaGlwLT5pbmRpb19kZXYsIDAsCi0JCQlJSU9fRVZFTlRfQ09ERV9BRFQ3MzEwX0JFTExPV19BTEFSTSwKLQkJCWNoaXAtPmxhc3RfdGltZXN0YW1wKTsKKwkJaWlvX3B1c2hfZXZlbnQoaW5kaW9fZGV2LCAwLAorCQkJICAgICAgIElJT19VTk1PRF9FVkVOVF9DT0RFKElJT19URU1QLCAwLAorCQkJCQkJICAgIElJT19FVl9UWVBFX1RIUkVTSCwKKwkJCQkJCSAgICBJSU9fRVZfRElSX0ZBTExJTkcpLAorCQkJICAgICAgIHRpbWVzdGFtcCk7CiAJaWYgKHN0YXR1cyAmIEFEVDczMTBfU1RBVF9UX0NSSVQpCi0JCWlpb19wdXNoX2V2ZW50KGNoaXAtPmluZGlvX2RldiwgMCwKLQkJCUlJT19FVkVOVF9DT0RFX0FEVDczMTBfQUJPVkVfQ1JJVCwKLQkJCWNoaXAtPmxhc3RfdGltZXN0YW1wKTsKKwkJaWlvX3B1c2hfZXZlbnQoaW5kaW9fZGV2LCAwLAorCQkJICAgICAgIElJT19VTk1PRF9FVkVOVF9DT0RFKElJT19URU1QLCAwLAorCQkJCQkJICAgIElJT19FVl9UWVBFX1RIUkVTSCwKKwkJCQkJCSAgICBJSU9fRVZfRElSX1JJU0lORyksCisJCQl0aW1lc3RhbXApOworCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCBhZHQ3MzEwX2ludGVycnVwdChzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8sCi0JCWludCBpbmRleCwKLQkJczY0IHRpbWVzdGFtcCwKLQkJaW50IG5vX3Rlc3QpCi17Ci0Jc3RydWN0IGFkdDczMTBfY2hpcF9pbmZvICpjaGlwID0gZGV2X2luZm8tPmRldl9kYXRhOwotCi0JY2hpcC0+bGFzdF90aW1lc3RhbXAgPSB0aW1lc3RhbXA7Ci0Jc2NoZWR1bGVfd29yaygmY2hpcC0+dGhyZXNoX3dvcmspOwotCi0JcmV0dXJuIDA7Ci19Ci0KLUlJT19FVkVOVF9TSChhZHQ3MzEwLCAmYWR0NzMxMF9pbnRlcnJ1cHQpOwotSUlPX0VWRU5UX1NIKGFkdDczMTBfY3QsICZhZHQ3MzEwX2ludGVycnVwdCk7Ci0KIHN0YXRpYyBzc2l6ZV90IGFkdDczMTBfc2hvd19ldmVudF9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCWNoYXIgKmJ1ZikKQEAgLTcyOSw0OSArNjk3LDYyIEBACiAJcmV0dXJuIGxlbjsKIH0KIAotSUlPX0VWRU5UX0FUVFJfU0goZXZlbnRfbW9kZSwgaWlvX2V2ZW50X2FkdDczMTAsCi0JCWFkdDczMTBfc2hvd19ldmVudF9tb2RlLCBhZHQ3MzEwX3NldF9ldmVudF9tb2RlLCAwKTsKLUlJT19FVkVOVF9BVFRSX1NIKGF2YWlsYWJsZV9ldmVudF9tb2RlcywgaWlvX2V2ZW50X2FkdDczMTAsCi0JCWFkdDczMTBfc2hvd19hdmFpbGFibGVfZXZlbnRfbW9kZXMsIE5VTEwsIDApOwotSUlPX0VWRU5UX0FUVFJfU0goZmF1bHRfcXVldWUsIGlpb19ldmVudF9hZHQ3MzEwLAotCQlhZHQ3MzEwX3Nob3dfZmF1bHRfcXVldWUsIGFkdDczMTBfc2V0X2ZhdWx0X3F1ZXVlLCAwKTsKLUlJT19FVkVOVF9BVFRSX1NIKHRfYWxhcm1faGlnaCwgaWlvX2V2ZW50X2FkdDczMTAsCi0JCWFkdDczMTBfc2hvd190X2FsYXJtX2hpZ2gsIGFkdDczMTBfc2V0X3RfYWxhcm1faGlnaCwgMCk7Ci1JSU9fRVZFTlRfQVRUUl9TSCh0X2FsYXJtX2xvdywgaWlvX2V2ZW50X2FkdDczMTAsCi0JCWFkdDczMTBfc2hvd190X2FsYXJtX2xvdywgYWR0NzMxMF9zZXRfdF9hbGFybV9sb3csIDApOwotSUlPX0VWRU5UX0FUVFJfU0godF9jcml0LCBpaW9fZXZlbnRfYWR0NzMxMF9jdCwKLQkJYWR0NzMxMF9zaG93X3RfY3JpdCwgYWR0NzMxMF9zZXRfdF9jcml0LCAwKTsKLUlJT19FVkVOVF9BVFRSX1NIKHRfaHlzdCwgaWlvX2V2ZW50X2FkdDczMTAsCi0JCWFkdDczMTBfc2hvd190X2h5c3QsIGFkdDczMTBfc2V0X3RfaHlzdCwgMCk7CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSKGV2ZW50X21vZGUsCisJCSAgICAgICBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgIGFkdDczMTBfc2hvd19ldmVudF9tb2RlLCBhZHQ3MzEwX3NldF9ldmVudF9tb2RlLCAwKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoYXZhaWxhYmxlX2V2ZW50X21vZGVzLAorCQkgICAgICAgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICAgICBhZHQ3MzEwX3Nob3dfYXZhaWxhYmxlX2V2ZW50X21vZGVzLCBOVUxMLCAwKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoZmF1bHRfcXVldWUsCisJCSAgICAgICBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgIGFkdDczMTBfc2hvd19mYXVsdF9xdWV1ZSwgYWR0NzMxMF9zZXRfZmF1bHRfcXVldWUsIDApOworc3RhdGljIElJT19ERVZJQ0VfQVRUUih0X2FsYXJtX2hpZ2gsCisJCSAgICAgICBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgIGFkdDczMTBfc2hvd190X2FsYXJtX2hpZ2gsIGFkdDczMTBfc2V0X3RfYWxhcm1faGlnaCwgMCk7CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSKHRfYWxhcm1fbG93LAorCQkgICAgICAgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICAgICBhZHQ3MzEwX3Nob3dfdF9hbGFybV9sb3csIGFkdDczMTBfc2V0X3RfYWxhcm1fbG93LCAwKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIodF9jcml0LAorCQkgICAgICAgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICAgICBhZHQ3MzEwX3Nob3dfdF9jcml0LCBhZHQ3MzEwX3NldF90X2NyaXQsIDApOworc3RhdGljIElJT19ERVZJQ0VfQVRUUih0X2h5c3QsCisJCSAgICAgICBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgIGFkdDczMTBfc2hvd190X2h5c3QsIGFkdDczMTBfc2V0X3RfaHlzdCwgMCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHQ3MzEwX2V2ZW50X2ludF9hdHRyaWJ1dGVzW10gPSB7Ci0JJmlpb19ldmVudF9hdHRyX2V2ZW50X21vZGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfYXZhaWxhYmxlX2V2ZW50X21vZGVzLmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX2ZhdWx0X3F1ZXVlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX3RfYWxhcm1faGlnaC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl90X2FsYXJtX2xvdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl90X2h5c3QuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2V2ZW50X21vZGUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2F2YWlsYWJsZV9ldmVudF9tb2Rlcy5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfZmF1bHRfcXVldWUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX3RfYWxhcm1faGlnaC5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfdF9hbGFybV9sb3cuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX3RfaHlzdC5kZXZfYXR0ci5hdHRyLAogCU5VTEwsCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWR0NzMxMF9ldmVudF9jdF9hdHRyaWJ1dGVzW10gPSB7Ci0JJmlpb19ldmVudF9hdHRyX2V2ZW50X21vZGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfYXZhaWxhYmxlX2V2ZW50X21vZGVzLmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX2ZhdWx0X3F1ZXVlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX3RfY3JpdC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl90X2h5c3QuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2V2ZW50X21vZGUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2F2YWlsYWJsZV9ldmVudF9tb2Rlcy5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfZmF1bHRfcXVldWUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX3RfY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfdF9oeXN0LmRldl9hdHRyLmF0dHIsCiAJTlVMTCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFkdDczMTBfZXZlbnRfYXR0cmlidXRlX2dyb3VwW0FEVDczMTBfSVJRU10gPSB7CiAJewogCQkuYXR0cnMgPSBhZHQ3MzEwX2V2ZW50X2ludF9hdHRyaWJ1dGVzLAotCX0sCi0JeworCX0sIHsKIAkJLmF0dHJzID0gYWR0NzMxMF9ldmVudF9jdF9hdHRyaWJ1dGVzLAogCX0KIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2luZm8gYWR0NzMxMF9pbmZvID0geworCS5hdHRycyA9ICZhZHQ3MzEwX2F0dHJpYnV0ZV9ncm91cCwKKwkubnVtX2ludGVycnVwdF9saW5lcyA9IEFEVDczMTBfSVJRUywKKwkuZXZlbnRfYXR0cnMgPSBhZHQ3MzEwX2V2ZW50X2F0dHJpYnV0ZV9ncm91cCwKKwkuZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFLAorfTsKKwogLyoKICAqIGRldmljZSBwcm9iZSBhbmQgcmVtb3ZlCiAgKi8KQEAgLTc5MiwyMCArNzczLDE3IEBACiAJZGV2X3NldF9kcnZkYXRhKCZzcGlfZGV2LT5kZXYsIGNoaXApOwogCiAJY2hpcC0+c3BpX2RldiA9IHNwaV9kZXY7Ci0JY2hpcC0+bmFtZSA9IHNwaV9kZXYtPm1vZGFsaWFzOwogCi0JY2hpcC0+aW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgpOworCWNoaXAtPmluZGlvX2RldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2UoMCk7CiAJaWYgKGNoaXAtPmluZGlvX2RldiA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3JfZnJlZV9jaGlwOwogCX0KIAogCWNoaXAtPmluZGlvX2Rldi0+ZGV2LnBhcmVudCA9ICZzcGlfZGV2LT5kZXY7Ci0JY2hpcC0+aW5kaW9fZGV2LT5hdHRycyA9ICZhZHQ3MzEwX2F0dHJpYnV0ZV9ncm91cDsKLQljaGlwLT5pbmRpb19kZXYtPmV2ZW50X2F0dHJzID0gYWR0NzMxMF9ldmVudF9hdHRyaWJ1dGVfZ3JvdXA7CisJY2hpcC0+aW5kaW9fZGV2LT5uYW1lID0gc3BpX2dldF9kZXZpY2VfaWQoc3BpX2RldiktPm5hbWU7CisJY2hpcC0+aW5kaW9fZGV2LT5pbmZvID0gJmFkdDczMTBfaW5mbzsKIAljaGlwLT5pbmRpb19kZXYtPmRldl9kYXRhID0gKHZvaWQgKiljaGlwOwotCWNoaXAtPmluZGlvX2Rldi0+ZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFOwotCWNoaXAtPmluZGlvX2Rldi0+bnVtX2ludGVycnVwdF9saW5lcyA9IEFEVDczMTBfSVJRUzsKIAljaGlwLT5pbmRpb19kZXYtPm1vZGVzID0gSU5ESU9fRElSRUNUX01PREU7CiAKIAlyZXQgPSBpaW9fZGV2aWNlX3JlZ2lzdGVyKGNoaXAtPmluZGlvX2Rldik7CkBAIC04MTgsNDUgKzc5NiwyOSBAQAogCQkJaXJxX2ZsYWdzID0gYWR0NzMxMF9wbGF0Zm9ybV9kYXRhWzJdOwogCQllbHNlCiAJCQlpcnFfZmxhZ3MgPSBJUlFGX1RSSUdHRVJfTE9XOwotCQlyZXQgPSBpaW9fcmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoc3BpX2Rldi0+aXJxLAotCQkJCWNoaXAtPmluZGlvX2RldiwKLQkJCQkwLAotCQkJCWlycV9mbGFncywKLQkJCQljaGlwLT5uYW1lKTsKKwkJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoc3BpX2Rldi0+aXJxLAorCQkJCQkgICBOVUxMLAorCQkJCQkgICAmYWR0NzMxMF9ldmVudF9oYW5kbGVyLAorCQkJCQkgICBpcnFfZmxhZ3MsCisJCQkJCSAgIGNoaXAtPmluZGlvX2Rldi0+bmFtZSwKKwkJCQkJICAgY2hpcC0+aW5kaW9fZGV2KTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyb3JfdW5yZWdfZGV2OwotCi0JCS8qCi0JCSAqIFRoZSBldmVudCBoYW5kbGVyIGxpc3QgZWxlbWVudCByZWZlciB0byBpaW9fZXZlbnRfYWR0NzMxMC4KLQkJICogQWxsIGV2ZW50IGF0dHJpYnV0ZXMgYmluZCB0byB0aGUgc2FtZSBldmVudCBoYW5kbGVyLgotCQkgKiBPbmUgZXZlbnQgaGFuZGxlciBjYW4gb25seSBiZSBhZGRlZCB0byBvbmUgZXZlbnQgbGlzdC4KLQkJICovCi0JCWlpb19hZGRfZXZlbnRfdG9fbGlzdCgmaWlvX2V2ZW50X2FkdDczMTAsCi0JCQkJJmNoaXAtPmluZGlvX2Rldi0+aW50ZXJydXB0c1swXS0+ZXZfbGlzdCk7CiAJfQogCiAJLyogSU5UIGJvdW5kIHRlbXBlcmF0dXJlIGFsYXJtIGV2ZW50LiBsaW5lIDEgKi8KIAlpZiAoYWR0NzMxMF9wbGF0Zm9ybV9kYXRhWzBdKSB7Ci0JCXJldCA9IGlpb19yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShhZHQ3MzEwX3BsYXRmb3JtX2RhdGFbMF0sCi0JCQkJY2hpcC0+aW5kaW9fZGV2LAotCQkJCTEsCi0JCQkJYWR0NzMxMF9wbGF0Zm9ybV9kYXRhWzFdLAotCQkJCWNoaXAtPm5hbWUpOworCQlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShhZHQ3MzEwX3BsYXRmb3JtX2RhdGFbMF0sCisJCQkJCSAgIE5VTEwsCisJCQkJCSAgICZhZHQ3MzEwX2V2ZW50X2hhbmRsZXIsCisJCQkJCSAgIGFkdDczMTBfcGxhdGZvcm1fZGF0YVsxXSwKKwkJCQkJICAgY2hpcC0+aW5kaW9fZGV2LT5uYW1lLAorCQkJCQkgICBjaGlwLT5pbmRpb19kZXYpOwogCQlpZiAocmV0KQogCQkJZ290byBlcnJvcl91bnJlZ19jdF9pcnE7Ci0KLQkJLyoKLQkJICogVGhlIGV2ZW50IGhhbmRsZXIgbGlzdCBlbGVtZW50IHJlZmVyIHRvIGlpb19ldmVudF9hZHQ3MzEwLgotCQkgKiBBbGwgZXZlbnQgYXR0cmlidXRlcyBiaW5kIHRvIHRoZSBzYW1lIGV2ZW50IGhhbmRsZXIuCi0JCSAqIE9uZSBldmVudCBoYW5kbGVyIGNhbiBvbmx5IGJlIGFkZGVkIHRvIG9uZSBldmVudCBsaXN0LgotCQkgKi8KLQkJaWlvX2FkZF9ldmVudF90b19saXN0KCZpaW9fZXZlbnRfYWR0NzMxMF9jdCwKLQkJCQkmY2hpcC0+aW5kaW9fZGV2LT5pbnRlcnJ1cHRzWzFdLT5ldl9saXN0KTsKIAl9CiAKIAlpZiAoc3BpX2Rldi0+aXJxICYmIGFkdDczMTBfcGxhdGZvcm1fZGF0YVswXSkgewotCQlJTklUX1dPUksoJmNoaXAtPnRocmVzaF93b3JrLCBhZHQ3MzEwX2ludGVycnVwdF9iaCk7Ci0KIAkJcmV0ID0gYWR0NzMxMF9zcGlfcmVhZF9ieXRlKGNoaXAsIEFEVDczMTBfQ09ORklHLCAmY2hpcC0+Y29uZmlnKTsKIAkJaWYgKHJldCkgewogCQkJcmV0ID0gLUVJTzsKQEAgLTg3OSwxNCArODQxLDE0IEBACiAJfQogCiAJZGV2X2luZm8oJnNwaV9kZXYtPmRldiwgIiVzIHRlbXBlcmF0dXJlIHNlbnNvciByZWdpc3RlcmVkLlxuIiwKLQkJCWNoaXAtPm5hbWUpOworCQkJY2hpcC0+aW5kaW9fZGV2LT5uYW1lKTsKIAogCXJldHVybiAwOwogCiBlcnJvcl91bnJlZ19pbnRfaXJxOgotCWlpb191bnJlZ2lzdGVyX2ludGVycnVwdF9saW5lKGNoaXAtPmluZGlvX2RldiwgMSk7CisJZnJlZV9pcnEoYWR0NzMxMF9wbGF0Zm9ybV9kYXRhWzBdLCBjaGlwLT5pbmRpb19kZXYpOwogZXJyb3JfdW5yZWdfY3RfaXJxOgotCWlpb191bnJlZ2lzdGVyX2ludGVycnVwdF9saW5lKGNoaXAtPmluZGlvX2RldiwgMCk7CisJZnJlZV9pcnEoc3BpX2Rldi0+aXJxLCBjaGlwLT5pbmRpb19kZXYpOwogZXJyb3JfdW5yZWdfZGV2OgogCWlpb19kZXZpY2VfdW5yZWdpc3RlcihjaGlwLT5pbmRpb19kZXYpOwogZXJyb3JfZnJlZV9kZXY6CkBAIC05MDUsOSArODY3LDkgQEAKIAogCWRldl9zZXRfZHJ2ZGF0YSgmc3BpX2Rldi0+ZGV2LCBOVUxMKTsKIAlpZiAoYWR0NzMxMF9wbGF0Zm9ybV9kYXRhWzBdKQotCQlpaW9fdW5yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShpbmRpb19kZXYsIDEpOworCQlmcmVlX2lycShhZHQ3MzEwX3BsYXRmb3JtX2RhdGFbMF0sIGNoaXAtPmluZGlvX2Rldik7CiAJaWYgKHNwaV9kZXYtPmlycSkKLQkJaWlvX3VucmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoaW5kaW9fZGV2LCAwKTsKKwkJZnJlZV9pcnEoc3BpX2Rldi0+aXJxLCBjaGlwLT5pbmRpb19kZXYpOwogCWlpb19kZXZpY2VfdW5yZWdpc3RlcihpbmRpb19kZXYpOwogCWlpb19mcmVlX2RldmljZShjaGlwLT5pbmRpb19kZXYpOwogCWtmcmVlKGNoaXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWR0NzQxMC5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWR0NzQxMC5jCmluZGV4IGMzNDVmMjcuLmM0MGE4NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkdDc0MTAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZHQ3NDEwLmMKQEAgLTcsMTUgKzcsMTIgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9ydGMuaD4KIAogI2luY2x1ZGUgIi4uL2lpby5oIgogI2luY2x1ZGUgIi4uL3N5c2ZzLmgiCkBAIC03NywxMSArNzQsOCBAQAogICovCiAKIHN0cnVjdCBhZHQ3NDEwX2NoaXBfaW5mbyB7Ci0JY29uc3QgY2hhciAqbmFtZTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXY7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHRocmVzaF93b3JrOwotCXM2NCBsYXN0X3RpbWVzdGFtcDsKIAl1OCAgY29uZmlnOwogfTsKIApAQCAtMzQ4LDI0ICszNDIsMTIgQEAKIAogc3RhdGljIElJT19ERVZJQ0VfQVRUUih2YWx1ZSwgU19JUlVHTywgYWR0NzQxMF9zaG93X3ZhbHVlLCBOVUxMLCAwKTsKIAotc3RhdGljIHNzaXplX3QgYWR0NzQxMF9zaG93X25hbWUoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY2hhciAqYnVmKQotewotCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBhZHQ3NDEwX2NoaXBfaW5mbyAqY2hpcCA9IGRldl9pbmZvLT5kZXZfZGF0YTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgY2hpcC0+bmFtZSk7Ci19Ci0KLXN0YXRpYyBJSU9fREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgYWR0NzQxMF9zaG93X25hbWUsIE5VTEwsIDApOwotCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWR0NzQxMF9hdHRyaWJ1dGVzW10gPSB7CiAJJmlpb19kZXZfYXR0cl9hdmFpbGFibGVfbW9kZXMuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX21vZGUuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX3Jlc29sdXRpb24uZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX2lkLmRldl9hdHRyLmF0dHIsCiAJJmlpb19kZXZfYXR0cl92YWx1ZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfbmFtZS5kZXZfYXR0ci5hdHRyLAogCU5VTEwsCiB9OwogCkBAIC0zNzMsNTUgKzM1NSwzOCBAQAogCS5hdHRycyA9IGFkdDc0MTBfYXR0cmlidXRlcywKIH07CiAKLS8qCi0gKiB0ZW1wZXJhdHVyZSBib3VuZCBldmVudHMKLSAqLwotCi0jZGVmaW5lIElJT19FVkVOVF9DT0RFX0FEVDc0MTBfQUJPVkVfQUxBUk0gICAgSUlPX0JVRkZFUl9FVkVOVF9DT0RFKDApCi0jZGVmaW5lIElJT19FVkVOVF9DT0RFX0FEVDc0MTBfQkVMTE9XX0FMQVJNICAgSUlPX0JVRkZFUl9FVkVOVF9DT0RFKDEpCi0jZGVmaW5lIElJT19FVkVOVF9DT0RFX0FEVDc0MTBfQUJPVkVfQ1JJVCAgICAgSUlPX0JVRkZFUl9FVkVOVF9DT0RFKDIpCi0KLXN0YXRpYyB2b2lkIGFkdDc0MTBfaW50ZXJydXB0X2JoKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29ya19zKQorc3RhdGljIGlycXJldHVybl90IGFkdDc0MTBfZXZlbnRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpwcml2YXRlKQogewotCXN0cnVjdCBhZHQ3NDEwX2NoaXBfaW5mbyAqY2hpcCA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrX3MsIHN0cnVjdCBhZHQ3NDEwX2NoaXBfaW5mbywgdGhyZXNoX3dvcmspOworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBwcml2YXRlOworCXN0cnVjdCBhZHQ3NDEwX2NoaXBfaW5mbyAqY2hpcCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKKwlzNjQgdGltZXN0YW1wID0gaWlvX2dldF90aW1lX25zKCk7CiAJdTggc3RhdHVzOwogCiAJaWYgKGFkdDc0MTBfaTJjX3JlYWRfYnl0ZShjaGlwLCBBRFQ3NDEwX1NUQVRVUywgJnN0YXR1cykpCi0JCXJldHVybjsKLQotCWVuYWJsZV9pcnEoY2hpcC0+Y2xpZW50LT5pcnEpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAKIAlpZiAoc3RhdHVzICYgQURUNzQxMF9TVEFUX1RfSElHSCkKLQkJaWlvX3B1c2hfZXZlbnQoY2hpcC0+aW5kaW9fZGV2LCAwLAotCQkJSUlPX0VWRU5UX0NPREVfQURUNzQxMF9BQk9WRV9BTEFSTSwKLQkJCWNoaXAtPmxhc3RfdGltZXN0YW1wKTsKKwkJaWlvX3B1c2hfZXZlbnQoaW5kaW9fZGV2LCAwLAorCQkJICAgICAgIElJT19VTk1PRF9FVkVOVF9DT0RFKElJT19URU1QLCAwLAorCQkJCQkJICAgIElJT19FVl9UWVBFX1RIUkVTSCwKKwkJCQkJCSAgICBJSU9fRVZfRElSX1JJU0lORyksCisJCQkgICAgICAgdGltZXN0YW1wKTsKIAlpZiAoc3RhdHVzICYgQURUNzQxMF9TVEFUX1RfTE9XKQotCQlpaW9fcHVzaF9ldmVudChjaGlwLT5pbmRpb19kZXYsIDAsCi0JCQlJSU9fRVZFTlRfQ09ERV9BRFQ3NDEwX0JFTExPV19BTEFSTSwKLQkJCWNoaXAtPmxhc3RfdGltZXN0YW1wKTsKKwkJaWlvX3B1c2hfZXZlbnQoaW5kaW9fZGV2LCAwLAorCQkJICAgICAgIElJT19VTk1PRF9FVkVOVF9DT0RFKElJT19URU1QLCAwLAorCQkJCQkJICAgIElJT19FVl9UWVBFX1RIUkVTSCwKKwkJCQkJCSAgICBJSU9fRVZfRElSX0ZBTExJTkcpLAorCQkJICAgICAgIHRpbWVzdGFtcCk7CiAJaWYgKHN0YXR1cyAmIEFEVDc0MTBfU1RBVF9UX0NSSVQpCi0JCWlpb19wdXNoX2V2ZW50KGNoaXAtPmluZGlvX2RldiwgMCwKLQkJCUlJT19FVkVOVF9DT0RFX0FEVDc0MTBfQUJPVkVfQ1JJVCwKLQkJCWNoaXAtPmxhc3RfdGltZXN0YW1wKTsKKwkJaWlvX3B1c2hfZXZlbnQoaW5kaW9fZGV2LCAwLAorCQkJICAgICAgIElJT19VTk1PRF9FVkVOVF9DT0RFKElJT19URU1QLCAwLAorCQkJCQkJICAgIElJT19FVl9UWVBFX1RIUkVTSCwKKwkJCQkJCSAgICBJSU9fRVZfRElSX1JJU0lORyksCisJCQkgICAgICAgdGltZXN0YW1wKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCBhZHQ3NDEwX2ludGVycnVwdChzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8sCi0JCWludCBpbmRleCwKLQkJczY0IHRpbWVzdGFtcCwKLQkJaW50IG5vX3Rlc3QpCi17Ci0Jc3RydWN0IGFkdDc0MTBfY2hpcF9pbmZvICpjaGlwID0gZGV2X2luZm8tPmRldl9kYXRhOwotCi0JY2hpcC0+bGFzdF90aW1lc3RhbXAgPSB0aW1lc3RhbXA7Ci0Jc2NoZWR1bGVfd29yaygmY2hpcC0+dGhyZXNoX3dvcmspOwotCi0JcmV0dXJuIDA7Ci19Ci0KLUlJT19FVkVOVF9TSChhZHQ3NDEwLCAmYWR0NzQxMF9pbnRlcnJ1cHQpOwotSUlPX0VWRU5UX1NIKGFkdDc0MTBfY3QsICZhZHQ3NDEwX2ludGVycnVwdCk7Ci0KIHN0YXRpYyBzc2l6ZV90IGFkdDc0MTBfc2hvd19ldmVudF9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCWNoYXIgKmJ1ZikKQEAgLTY5OSw0OSArNjY0LDYyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotSUlPX0VWRU5UX0FUVFJfU0goZXZlbnRfbW9kZSwgaWlvX2V2ZW50X2FkdDc0MTAsCi0JCWFkdDc0MTBfc2hvd19ldmVudF9tb2RlLCBhZHQ3NDEwX3NldF9ldmVudF9tb2RlLCAwKTsKLUlJT19FVkVOVF9BVFRSX1NIKGF2YWlsYWJsZV9ldmVudF9tb2RlcywgaWlvX2V2ZW50X2FkdDc0MTAsCi0JCWFkdDc0MTBfc2hvd19hdmFpbGFibGVfZXZlbnRfbW9kZXMsIE5VTEwsIDApOwotSUlPX0VWRU5UX0FUVFJfU0goZmF1bHRfcXVldWUsIGlpb19ldmVudF9hZHQ3NDEwLAotCQlhZHQ3NDEwX3Nob3dfZmF1bHRfcXVldWUsIGFkdDc0MTBfc2V0X2ZhdWx0X3F1ZXVlLCAwKTsKLUlJT19FVkVOVF9BVFRSX1NIKHRfYWxhcm1faGlnaCwgaWlvX2V2ZW50X2FkdDc0MTAsCi0JCWFkdDc0MTBfc2hvd190X2FsYXJtX2hpZ2gsIGFkdDc0MTBfc2V0X3RfYWxhcm1faGlnaCwgMCk7Ci1JSU9fRVZFTlRfQVRUUl9TSCh0X2FsYXJtX2xvdywgaWlvX2V2ZW50X2FkdDc0MTAsCi0JCWFkdDc0MTBfc2hvd190X2FsYXJtX2xvdywgYWR0NzQxMF9zZXRfdF9hbGFybV9sb3csIDApOwotSUlPX0VWRU5UX0FUVFJfU0godF9jcml0LCBpaW9fZXZlbnRfYWR0NzQxMF9jdCwKLQkJYWR0NzQxMF9zaG93X3RfY3JpdCwgYWR0NzQxMF9zZXRfdF9jcml0LCAwKTsKLUlJT19FVkVOVF9BVFRSX1NIKHRfaHlzdCwgaWlvX2V2ZW50X2FkdDc0MTAsCi0JCWFkdDc0MTBfc2hvd190X2h5c3QsIGFkdDc0MTBfc2V0X3RfaHlzdCwgMCk7CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSKGV2ZW50X21vZGUsCisJCSAgICAgICBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgIGFkdDc0MTBfc2hvd19ldmVudF9tb2RlLCBhZHQ3NDEwX3NldF9ldmVudF9tb2RlLCAwKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoYXZhaWxhYmxlX2V2ZW50X21vZGVzLAorCQkgICAgICAgU19JUlVHTywKKwkJICAgICAgIGFkdDc0MTBfc2hvd19hdmFpbGFibGVfZXZlbnRfbW9kZXMsIE5VTEwsIDApOworc3RhdGljIElJT19ERVZJQ0VfQVRUUihmYXVsdF9xdWV1ZSwKKwkJICAgICAgIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICAgYWR0NzQxMF9zaG93X2ZhdWx0X3F1ZXVlLCBhZHQ3NDEwX3NldF9mYXVsdF9xdWV1ZSwgMCk7CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSKHRfYWxhcm1faGlnaCwKKwkJICAgICAgIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICAgYWR0NzQxMF9zaG93X3RfYWxhcm1faGlnaCwgYWR0NzQxMF9zZXRfdF9hbGFybV9oaWdoLCAwKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIodF9hbGFybV9sb3csCisJCSAgICAgICBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgIGFkdDc0MTBfc2hvd190X2FsYXJtX2xvdywgYWR0NzQxMF9zZXRfdF9hbGFybV9sb3csIDApOworc3RhdGljIElJT19ERVZJQ0VfQVRUUih0X2NyaXQsCisJCSAgICAgICBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgIGFkdDc0MTBfc2hvd190X2NyaXQsIGFkdDc0MTBfc2V0X3RfY3JpdCwgMCk7CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSKHRfaHlzdCwKKwkJICAgICAgIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICAgYWR0NzQxMF9zaG93X3RfaHlzdCwgYWR0NzQxMF9zZXRfdF9oeXN0LCAwKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkdDc0MTBfZXZlbnRfaW50X2F0dHJpYnV0ZXNbXSA9IHsKLQkmaWlvX2V2ZW50X2F0dHJfZXZlbnRfbW9kZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl9hdmFpbGFibGVfZXZlbnRfbW9kZXMuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfZmF1bHRfcXVldWUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfdF9hbGFybV9oaWdoLmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX3RfYWxhcm1fbG93LmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX3RfaHlzdC5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfZXZlbnRfbW9kZS5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfYXZhaWxhYmxlX2V2ZW50X21vZGVzLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9mYXVsdF9xdWV1ZS5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfdF9hbGFybV9oaWdoLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl90X2FsYXJtX2xvdy5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfdF9oeXN0LmRldl9hdHRyLmF0dHIsCiAJTlVMTCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHQ3NDEwX2V2ZW50X2N0X2F0dHJpYnV0ZXNbXSA9IHsKLQkmaWlvX2V2ZW50X2F0dHJfZXZlbnRfbW9kZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl9hdmFpbGFibGVfZXZlbnRfbW9kZXMuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfZmF1bHRfcXVldWUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfdF9jcml0LmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX3RfaHlzdC5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfZXZlbnRfbW9kZS5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfYXZhaWxhYmxlX2V2ZW50X21vZGVzLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9mYXVsdF9xdWV1ZS5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfdF9jcml0LmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl90X2h5c3QuZGV2X2F0dHIuYXR0ciwKIAlOVUxMLAogfTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYWR0NzQxMF9ldmVudF9hdHRyaWJ1dGVfZ3JvdXBbQURUNzQxMF9JUlFTXSA9IHsKIAl7CiAJCS5hdHRycyA9IGFkdDc0MTBfZXZlbnRfaW50X2F0dHJpYnV0ZXMsCi0JfSwKLQl7CisJfSwgewogCQkuYXR0cnMgPSBhZHQ3NDEwX2V2ZW50X2N0X2F0dHJpYnV0ZXMsCiAJfQogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9faW5mbyBhZHQ3NDEwX2luZm8gPSB7CisJLmF0dHJzID0gJmFkdDc0MTBfYXR0cmlidXRlX2dyb3VwLAorCS5udW1faW50ZXJydXB0X2xpbmVzID0gQURUNzQxMF9JUlFTLAorCS5ldmVudF9hdHRycyA9IGFkdDc0MTBfZXZlbnRfYXR0cmlidXRlX2dyb3VwLAorCS5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEUsCit9OworCiAvKgogICogZGV2aWNlIHByb2JlIGFuZCByZW1vdmUKICAqLwpAQCAtNzYyLDIwICs3NDAsMTYgQEAKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBjaGlwKTsKIAogCWNoaXAtPmNsaWVudCA9IGNsaWVudDsKLQljaGlwLT5uYW1lID0gaWQtPm5hbWU7CiAKLQljaGlwLT5pbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKCk7CisJY2hpcC0+aW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgwKTsKIAlpZiAoY2hpcC0+aW5kaW9fZGV2ID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9mcmVlX2NoaXA7CiAJfQotCisJY2hpcC0+aW5kaW9fZGV2LT5uYW1lID0gaWQtPm5hbWU7CiAJY2hpcC0+aW5kaW9fZGV2LT5kZXYucGFyZW50ID0gJmNsaWVudC0+ZGV2OwotCWNoaXAtPmluZGlvX2Rldi0+YXR0cnMgPSAmYWR0NzQxMF9hdHRyaWJ1dGVfZ3JvdXA7Ci0JY2hpcC0+aW5kaW9fZGV2LT5ldmVudF9hdHRycyA9IGFkdDc0MTBfZXZlbnRfYXR0cmlidXRlX2dyb3VwOworCWNoaXAtPmluZGlvX2Rldi0+aW5mbyA9ICZhZHQ3NDEwX2luZm87CiAJY2hpcC0+aW5kaW9fZGV2LT5kZXZfZGF0YSA9ICh2b2lkICopY2hpcDsKLQljaGlwLT5pbmRpb19kZXYtPmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRTsKLQljaGlwLT5pbmRpb19kZXYtPm51bV9pbnRlcnJ1cHRfbGluZXMgPSBBRFQ3NDEwX0lSUVM7CiAJY2hpcC0+aW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOwogCiAJcmV0ID0gaWlvX2RldmljZV9yZWdpc3RlcihjaGlwLT5pbmRpb19kZXYpOwpAQCAtNzg0LDQ0ICs3NTgsMjkgQEAKIAogCS8qIENUIGNyaXRjYWwgdGVtcGVyYXR1cmUgZXZlbnQuIGxpbmUgMCAqLwogCWlmIChjbGllbnQtPmlycSkgewotCQlyZXQgPSBpaW9fcmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoY2xpZW50LT5pcnEsCi0JCQkJY2hpcC0+aW5kaW9fZGV2LAotCQkJCTAsCi0JCQkJSVJRRl9UUklHR0VSX0xPVywKLQkJCQljaGlwLT5uYW1lKTsKKwkJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoY2xpZW50LT5pcnEsCisJCQkJCSAgIE5VTEwsCisJCQkJCSAgICZhZHQ3NDEwX2V2ZW50X2hhbmRsZXIsCisJCQkJCSAgIElSUUZfVFJJR0dFUl9MT1csCisJCQkJCSAgIGlkLT5uYW1lLAorCQkJCQkgICBjaGlwLT5pbmRpb19kZXYpOwogCQlpZiAocmV0KQogCQkJZ290byBlcnJvcl91bnJlZ19kZXY7Ci0KLQkJLyoKLQkJICogVGhlIGV2ZW50IGhhbmRsZXIgbGlzdCBlbGVtZW50IHJlZmVyIHRvIGlpb19ldmVudF9hZHQ3NDEwLgotCQkgKiBBbGwgZXZlbnQgYXR0cmlidXRlcyBiaW5kIHRvIHRoZSBzYW1lIGV2ZW50IGhhbmRsZXIuCi0JCSAqIE9uZSBldmVudCBoYW5kbGVyIGNhbiBvbmx5IGJlIGFkZGVkIHRvIG9uZSBldmVudCBsaXN0LgotCQkgKi8KLQkJaWlvX2FkZF9ldmVudF90b19saXN0KCZpaW9fZXZlbnRfYWR0NzQxMCwKLQkJCQkmY2hpcC0+aW5kaW9fZGV2LT5pbnRlcnJ1cHRzWzBdLT5ldl9saXN0KTsKIAl9CiAKIAkvKiBJTlQgYm91bmQgdGVtcGVyYXR1cmUgYWxhcm0gZXZlbnQuIGxpbmUgMSAqLwogCWlmIChhZHQ3NDEwX3BsYXRmb3JtX2RhdGFbMF0pIHsKLQkJcmV0ID0gaWlvX3JlZ2lzdGVyX2ludGVycnVwdF9saW5lKGFkdDc0MTBfcGxhdGZvcm1fZGF0YVswXSwKLQkJCQljaGlwLT5pbmRpb19kZXYsCi0JCQkJMSwKLQkJCQlhZHQ3NDEwX3BsYXRmb3JtX2RhdGFbMV0sCi0JCQkJY2hpcC0+bmFtZSk7CisJCXJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKGFkdDc0MTBfcGxhdGZvcm1fZGF0YVswXSwKKwkJCQkJICAgTlVMTCwKKwkJCQkJICAgJmFkdDc0MTBfZXZlbnRfaGFuZGxlciwKKwkJCQkJICAgYWR0NzQxMF9wbGF0Zm9ybV9kYXRhWzFdLAorCQkJCQkgICBpZC0+bmFtZSwKKwkJCQkJICAgY2hpcC0+aW5kaW9fZGV2KTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyb3JfdW5yZWdfY3RfaXJxOwotCi0JCS8qCi0JCSAqIFRoZSBldmVudCBoYW5kbGVyIGxpc3QgZWxlbWVudCByZWZlciB0byBpaW9fZXZlbnRfYWR0NzQxMC4KLQkJICogQWxsIGV2ZW50IGF0dHJpYnV0ZXMgYmluZCB0byB0aGUgc2FtZSBldmVudCBoYW5kbGVyLgotCQkgKiBPbmUgZXZlbnQgaGFuZGxlciBjYW4gb25seSBiZSBhZGRlZCB0byBvbmUgZXZlbnQgbGlzdC4KLQkJICovCi0JCWlpb19hZGRfZXZlbnRfdG9fbGlzdCgmaWlvX2V2ZW50X2FkdDc0MTBfY3QsCi0JCQkJJmNoaXAtPmluZGlvX2Rldi0+aW50ZXJydXB0c1sxXS0+ZXZfbGlzdCk7CiAJfQogCiAJaWYgKGNsaWVudC0+aXJxICYmIGFkdDc0MTBfcGxhdGZvcm1fZGF0YVswXSkgewotCQlJTklUX1dPUksoJmNoaXAtPnRocmVzaF93b3JrLCBhZHQ3NDEwX2ludGVycnVwdF9iaCk7CiAKIAkJcmV0ID0gYWR0NzQxMF9pMmNfcmVhZF9ieXRlKGNoaXAsIEFEVDc0MTBfQ09ORklHLCAmY2hpcC0+Y29uZmlnKTsKIAkJaWYgKHJldCkgewpAQCAtODUwLDkgKzgwOSw5IEBACiAJcmV0dXJuIDA7CiAKIGVycm9yX3VucmVnX2ludF9pcnE6Ci0JaWlvX3VucmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoY2hpcC0+aW5kaW9fZGV2LCAxKTsKKwlmcmVlX2lycShhZHQ3NDEwX3BsYXRmb3JtX2RhdGFbMF0sIGNoaXAtPmluZGlvX2Rldik7CiBlcnJvcl91bnJlZ19jdF9pcnE6Ci0JaWlvX3VucmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoY2hpcC0+aW5kaW9fZGV2LCAwKTsKKwlmcmVlX2lycShjbGllbnQtPmlycSwgY2hpcC0+aW5kaW9fZGV2KTsKIGVycm9yX3VucmVnX2RldjoKIAlpaW9fZGV2aWNlX3VucmVnaXN0ZXIoY2hpcC0+aW5kaW9fZGV2KTsKIGVycm9yX2ZyZWVfZGV2OgpAQCAtODcwLDkgKzgyOSw5IEBACiAJdW5zaWduZWQgbG9uZyAqYWR0NzQxMF9wbGF0Zm9ybV9kYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCWlmIChhZHQ3NDEwX3BsYXRmb3JtX2RhdGFbMF0pCi0JCWlpb191bnJlZ2lzdGVyX2ludGVycnVwdF9saW5lKGluZGlvX2RldiwgMSk7CisJCWZyZWVfaXJxKGFkdDc0MTBfcGxhdGZvcm1fZGF0YVswXSwgY2hpcC0+aW5kaW9fZGV2KTsKIAlpZiAoY2xpZW50LT5pcnEpCi0JCWlpb191bnJlZ2lzdGVyX2ludGVycnVwdF9saW5lKGluZGlvX2RldiwgMCk7CisJCWZyZWVfaXJxKGNsaWVudC0+aXJxLCBjaGlwLT5pbmRpb19kZXYpOwogCWlpb19kZXZpY2VfdW5yZWdpc3RlcihpbmRpb19kZXYpOwogCWlpb19mcmVlX2RldmljZShjaGlwLT5pbmRpb19kZXYpOwogCWtmcmVlKGNoaXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWR0NzUuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkdDc1LmMKaW5kZXggYWZmNGQzMS4uMTE3MWZiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWR0NzUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZHQ3NS5jCkBAIC03LDE1ICs3LDExIEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvcnRjLmg+CiAKICNpbmNsdWRlICIuLi9paW8uaCIKICNpbmNsdWRlICIuLi9zeXNmcy5oIgpAQCAtNTQsMTEgKzUwLDggQEAKICAqLwogCiBzdHJ1Y3QgYWR0NzVfY2hpcF9pbmZvIHsKLQljb25zdCBjaGFyICpuYW1lOwogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldjsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdGhyZXNoX3dvcms7Ci0JczY0IGxhc3RfdGltZXN0YW1wOwogCXU4ICBjb25maWc7CiB9OwogCkBAIC0yNDksMjMgKzI0MiwxMSBAQAogCiBzdGF0aWMgSUlPX0RFVklDRV9BVFRSKHZhbHVlLCBTX0lSVUdPLCBhZHQ3NV9zaG93X3ZhbHVlLCBOVUxMLCAwKTsKIAotc3RhdGljIHNzaXplX3QgYWR0NzVfc2hvd19uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgYWR0NzVfY2hpcF9pbmZvICpjaGlwID0gZGV2X2luZm8tPmRldl9kYXRhOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBjaGlwLT5uYW1lKTsKLX0KLQotc3RhdGljIElJT19ERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBhZHQ3NV9zaG93X25hbWUsIE5VTEwsIDApOwotCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWR0NzVfYXR0cmlidXRlc1tdID0gewogCSZpaW9fZGV2X2F0dHJfYXZhaWxhYmxlX21vZGVzLmRldl9hdHRyLmF0dHIsCiAJJmlpb19kZXZfYXR0cl9tb2RlLmRldl9hdHRyLmF0dHIsCiAJJmlpb19kZXZfYXR0cl9vbmVzaG90LmRldl9hdHRyLmF0dHIsCiAJJmlpb19kZXZfYXR0cl92YWx1ZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfbmFtZS5kZXZfYXR0ci5hdHRyLAogCU5VTEwsCiB9OwogCkBAIC0yNzcsMzUgKzI1OCwyMCBAQAogICogdGVtcGVyYXR1cmUgYm91bmQgZXZlbnRzCiAgKi8KIAotI2RlZmluZSBJSU9fRVZFTlRfQ09ERV9BRFQ3NV9PVEkgICAgSUlPX0JVRkZFUl9FVkVOVF9DT0RFKDApCisjZGVmaW5lIElJT19FVkVOVF9DT0RFX0FEVDc1X09USSBJSU9fVU5NT0RfRVZFTlRfQ09ERShJSU9fRVZfQ0xBU1NfVEVNUCwgXAorCQkJCQkJICAgICAgMCwJCVwKKwkJCQkJCSAgICAgIElJT19FVl9UWVBFX1RIUkVTSCwgXAorCQkJCQkJICAgICAgSUlPX0VWX0RJUl9GQUxMSU5HKQogCi1zdGF0aWMgdm9pZCBhZHQ3NV9pbnRlcnJ1cHRfYmgoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrX3MpCitzdGF0aWMgaXJxcmV0dXJuX3QgYWR0NzVfZXZlbnRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpwcml2YXRlKQogewotCXN0cnVjdCBhZHQ3NV9jaGlwX2luZm8gKmNoaXAgPQotCQljb250YWluZXJfb2Yod29ya19zLCBzdHJ1Y3QgYWR0NzVfY2hpcF9pbmZvLCB0aHJlc2hfd29yayk7CisJaWlvX3B1c2hfZXZlbnQocHJpdmF0ZSwgMCwKKwkJICAgICAgIElJT19FVkVOVF9DT0RFX0FEVDc1X09USSwKKwkJICAgICAgIGlpb19nZXRfdGltZV9ucygpKTsKIAotCWVuYWJsZV9pcnEoY2hpcC0+Y2xpZW50LT5pcnEpOwotCi0JaWlvX3B1c2hfZXZlbnQoY2hpcC0+aW5kaW9fZGV2LCAwLAotCQkJSUlPX0VWRU5UX0NPREVfQURUNzVfT1RJLAotCQkJY2hpcC0+bGFzdF90aW1lc3RhbXApOworCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCBhZHQ3NV9pbnRlcnJ1cHQoc3RydWN0IGlpb19kZXYgKmRldl9pbmZvLAotCQlpbnQgaW5kZXgsCi0JCXM2NCB0aW1lc3RhbXAsCi0JCWludCBub190ZXN0KQotewotCXN0cnVjdCBhZHQ3NV9jaGlwX2luZm8gKmNoaXAgPSBkZXZfaW5mby0+ZGV2X2RhdGE7Ci0KLQljaGlwLT5sYXN0X3RpbWVzdGFtcCA9IHRpbWVzdGFtcDsKLQlzY2hlZHVsZV93b3JrKCZjaGlwLT50aHJlc2hfd29yayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotSUlPX0VWRU5UX1NIKGFkdDc1LCAmYWR0NzVfaW50ZXJydXB0KTsKLQogc3RhdGljIHNzaXplX3QgYWR0NzVfc2hvd19vdGlfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQljaGFyICpidWYpCkBAIC00NTgsMTYgKzQyNCwxNiBAQAogfQogc3RhdGljIGlubGluZSBzc2l6ZV90IGFkdDc1X3Nob3dfdF9ib3VuZChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQl1OCBib3VuZF9yZWcsCiAJCWNoYXIgKmJ1ZikKIHsKKwlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7CiAJc3RydWN0IGlpb19kZXYgKmRldl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGFkdDc1X2NoaXBfaW5mbyAqY2hpcCA9IGRldl9pbmZvLT5kZXZfZGF0YTsKIAl1MTYgZGF0YTsKIAljaGFyIHNpZ24gPSAnICc7CiAJaW50IHJldDsKIAotCXJldCA9IGFkdDc1X2kyY19yZWFkKGNoaXAsIGJvdW5kX3JlZywgKHU4ICopJmRhdGEpOworCXJldCA9IGFkdDc1X2kyY19yZWFkKGNoaXAsIHRoaXNfYXR0ci0+YWRkcmVzcywgKHU4ICopJmRhdGEpOwogCWlmIChyZXQpCiAJCXJldHVybiAtRUlPOwogCkBAIC00ODUsMTAgKzQ1MSwxMCBAQAogCiBzdGF0aWMgaW5saW5lIHNzaXplX3QgYWR0NzVfc2V0X3RfYm91bmQoc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJdTggYm91bmRfcmVnLAogCQljb25zdCBjaGFyICpidWYsCiAJCXNpemVfdCBsZW4pCiB7CisJc3RydWN0IGlpb19kZXZfYXR0ciAqdGhpc19hdHRyID0gdG9faWlvX2Rldl9hdHRyKGF0dHIpOwogCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBhZHQ3NV9jaGlwX2luZm8gKmNoaXAgPSBkZXZfaW5mby0+ZGV2X2RhdGE7CiAJbG9uZyB0bXAxLCB0bXAyOwpAQCAtNTI1LDY3ICs0OTEsNDIgQEAKIAlkYXRhIDw8PSBBRFQ3NV9WQUxVRV9PRkZTRVQ7CiAJZGF0YSA9IHN3YWIxNihkYXRhKTsKIAotCXJldCA9IGFkdDc1X2kyY193cml0ZShjaGlwLCBib3VuZF9yZWcsICh1OClkYXRhKTsKKwlyZXQgPSBhZHQ3NV9pMmNfd3JpdGUoY2hpcCwgdGhpc19hdHRyLT5hZGRyZXNzLCAodTgpZGF0YSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIC1FSU87CiAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3NpemVfdCBhZHQ3NV9zaG93X3Rfb3Moc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY2hhciAqYnVmKQotewotCXJldHVybiBhZHQ3NV9zaG93X3RfYm91bmQoZGV2LCBhdHRyLAotCQkJQURUNzVfVF9PUywgYnVmKTsKLX0KIAotc3RhdGljIGlubGluZSBzc2l6ZV90IGFkdDc1X3NldF90X29zKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNvbnN0IGNoYXIgKmJ1ZiwKLQkJc2l6ZV90IGxlbikKLXsKLQlyZXR1cm4gYWR0NzVfc2V0X3RfYm91bmQoZGV2LCBhdHRyLAotCQkJQURUNzVfVF9PUywgYnVmLCBsZW4pOwotfQotCi1zdGF0aWMgc3NpemVfdCBhZHQ3NV9zaG93X3RfaHlzdChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljaGFyICpidWYpCi17Ci0JcmV0dXJuIGFkdDc1X3Nob3dfdF9ib3VuZChkZXYsIGF0dHIsCi0JCQlBRFQ3NV9UX0hZU1QsIGJ1Zik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3NpemVfdCBhZHQ3NV9zZXRfdF9oeXN0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNvbnN0IGNoYXIgKmJ1ZiwKLQkJc2l6ZV90IGxlbikKLXsKLQlyZXR1cm4gYWR0NzVfc2V0X3RfYm91bmQoZGV2LCBhdHRyLAotCQkJQURUNzVfVF9IWVNULCBidWYsIGxlbik7Ci19Ci0KLUlJT19FVkVOVF9BVFRSX1NIKG90aV9tb2RlLCBpaW9fZXZlbnRfYWR0NzUsCi0JCWFkdDc1X3Nob3dfb3RpX21vZGUsIGFkdDc1X3NldF9vdGlfbW9kZSwgMCk7Ci1JSU9fRVZFTlRfQVRUUl9TSChhdmFpbGFibGVfb3RpX21vZGVzLCBpaW9fZXZlbnRfYWR0NzUsCi0JCWFkdDc1X3Nob3dfYXZhaWxhYmxlX290aV9tb2RlcywgTlVMTCwgMCk7Ci1JSU9fRVZFTlRfQVRUUl9TSChzbWJ1c19hbGFydCwgaWlvX2V2ZW50X2FkdDc1LAotCQlhZHQ3NV9zaG93X3NtYnVzX2FsYXJ0LCBhZHQ3NV9zZXRfc21idXNfYWxhcnQsIDApOwotSUlPX0VWRU5UX0FUVFJfU0goZmF1bHRfcXVldWUsIGlpb19ldmVudF9hZHQ3NSwKLQkJYWR0NzVfc2hvd19mYXVsdF9xdWV1ZSwgYWR0NzVfc2V0X2ZhdWx0X3F1ZXVlLCAwKTsKLUlJT19FVkVOVF9BVFRSX1NIKHRfb3MsIGlpb19ldmVudF9hZHQ3NSwKLQkJYWR0NzVfc2hvd190X29zLCBhZHQ3NV9zZXRfdF9vcywgMCk7Ci1JSU9fRVZFTlRfQVRUUl9TSCh0X2h5c3QsIGlpb19ldmVudF9hZHQ3NSwKLQkJYWR0NzVfc2hvd190X2h5c3QsIGFkdDc1X3NldF90X2h5c3QsIDApOworc3RhdGljIElJT19ERVZJQ0VfQVRUUihvdGlfbW9kZSwKKwkJICAgICAgIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICAgYWR0NzVfc2hvd19vdGlfbW9kZSwgYWR0NzVfc2V0X290aV9tb2RlLCAwKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoYXZhaWxhYmxlX290aV9tb2RlcywKKwkJICAgICAgIFNfSVJVR08sCisJCSAgICAgICBhZHQ3NV9zaG93X2F2YWlsYWJsZV9vdGlfbW9kZXMsIE5VTEwsIDApOworc3RhdGljIElJT19ERVZJQ0VfQVRUUihzbWJ1c19hbGFydCwKKwkJICAgICAgIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICAgYWR0NzVfc2hvd19zbWJ1c19hbGFydCwgYWR0NzVfc2V0X3NtYnVzX2FsYXJ0LCAwKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoZmF1bHRfcXVldWUsCisJCSAgICAgICBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgIGFkdDc1X3Nob3dfZmF1bHRfcXVldWUsIGFkdDc1X3NldF9mYXVsdF9xdWV1ZSwgMCk7CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSKHRfb3NfdmFsdWUsCisJCSAgICAgICBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgIGFkdDc1X3Nob3dfdF9ib3VuZCwgYWR0NzVfc2V0X3RfYm91bmQsCisJCSAgICAgICBBRFQ3NV9UX09TKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIodF9oeXN0X3ZhbHVlLAorCQkgICAgICAgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICAgICBhZHQ3NV9zaG93X3RfYm91bmQsIGFkdDc1X3NldF90X2JvdW5kLAorCQkgICAgICAgQURUNzVfVF9IWVNUKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkdDc1X2V2ZW50X2F0dHJpYnV0ZXNbXSA9IHsKLQkmaWlvX2V2ZW50X2F0dHJfb3RpX21vZGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfYXZhaWxhYmxlX290aV9tb2Rlcy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl9zbWJ1c19hbGFydC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl9mYXVsdF9xdWV1ZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl90X29zLmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX3RfaHlzdC5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfb3RpX21vZGUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2F2YWlsYWJsZV9vdGlfbW9kZXMuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX3NtYnVzX2FsYXJ0LmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9mYXVsdF9xdWV1ZS5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfdF9vc192YWx1ZS5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfdF9oeXN0X3ZhbHVlLmRldl9hdHRyLmF0dHIsCiAJTlVMTCwKIH07CiAKQEAgLTU5Myw2ICs1MzQsMTMgQEAKIAkuYXR0cnMgPSBhZHQ3NV9ldmVudF9hdHRyaWJ1dGVzLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9faW5mbyBhZHQ3NV9pbmZvID0geworCS5hdHRycyA9ICZhZHQ3NV9hdHRyaWJ1dGVfZ3JvdXAsCisJLm51bV9pbnRlcnJ1cHRfbGluZXMgPSAxLAorCS5ldmVudF9hdHRycyA9ICZhZHQ3NV9ldmVudF9hdHRyaWJ1dGVfZ3JvdXAsCisJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRSwKK307CisKIC8qCiAgKiBkZXZpY2UgcHJvYmUgYW5kIHJlbW92ZQogICovCkBAIC02MTIsMjAgKzU2MCwxNyBAQAogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGNoaXApOwogCiAJY2hpcC0+Y2xpZW50ID0gY2xpZW50OwotCWNoaXAtPm5hbWUgPSBpZC0+bmFtZTsKIAotCWNoaXAtPmluZGlvX2RldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2UoKTsKKwljaGlwLT5pbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKDApOwogCWlmIChjaGlwLT5pbmRpb19kZXYgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX2ZyZWVfY2hpcDsKIAl9CiAKKwljaGlwLT5pbmRpb19kZXYtPm5hbWUgPSBpZC0+bmFtZTsKIAljaGlwLT5pbmRpb19kZXYtPmRldi5wYXJlbnQgPSAmY2xpZW50LT5kZXY7Ci0JY2hpcC0+aW5kaW9fZGV2LT5hdHRycyA9ICZhZHQ3NV9hdHRyaWJ1dGVfZ3JvdXA7Ci0JY2hpcC0+aW5kaW9fZGV2LT5ldmVudF9hdHRycyA9ICZhZHQ3NV9ldmVudF9hdHRyaWJ1dGVfZ3JvdXA7CisJY2hpcC0+aW5kaW9fZGV2LT5pbmZvID0gJmFkdDc1X2luZm87CiAJY2hpcC0+aW5kaW9fZGV2LT5kZXZfZGF0YSA9ICh2b2lkICopY2hpcDsKLQljaGlwLT5pbmRpb19kZXYtPmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRTsKLQljaGlwLT5pbmRpb19kZXYtPm51bV9pbnRlcnJ1cHRfbGluZXMgPSAxOwogCWNoaXAtPmluZGlvX2Rldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1RfTU9ERTsKIAogCXJldCA9IGlpb19kZXZpY2VfcmVnaXN0ZXIoY2hpcC0+aW5kaW9fZGV2KTsKQEAgLTYzMywyNCArNTc4LDE1IEBACiAJCWdvdG8gZXJyb3JfZnJlZV9kZXY7CiAKIAlpZiAoY2xpZW50LT5pcnEgPiAwKSB7Ci0JCXJldCA9IGlpb19yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShjbGllbnQtPmlycSwKLQkJCQljaGlwLT5pbmRpb19kZXYsCi0JCQkJMCwKLQkJCQlJUlFGX1RSSUdHRVJfTE9XLAotCQkJCWNoaXAtPm5hbWUpOworCQlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShjbGllbnQtPmlycSwKKwkJCQkJICAgTlVMTCwKKwkJCQkJICAgJmFkdDc1X2V2ZW50X2hhbmRsZXIsCisJCQkJCSAgIElSUUZfVFJJR0dFUl9MT1csCisJCQkJCSAgIGNoaXAtPmluZGlvX2Rldi0+bmFtZSwKKwkJCQkJICAgY2hpcC0+aW5kaW9fZGV2KTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyb3JfdW5yZWdfZGV2OwogCi0JCS8qCi0JCSAqIFRoZSBldmVudCBoYW5kbGVyIGxpc3QgZWxlbWVudCByZWZlciB0byBpaW9fZXZlbnRfYWR0NzUuCi0JCSAqIEFsbCBldmVudCBhdHRyaWJ1dGVzIGJpbmQgdG8gdGhlIHNhbWUgZXZlbnQgaGFuZGxlci4KLQkJICogU28sIG9ubHkgcmVnaXN0ZXIgZXZlbnQgaGFuZGxlciBvbmNlLgotCQkgKi8KLQkJaWlvX2FkZF9ldmVudF90b19saXN0KCZpaW9fZXZlbnRfYWR0NzUsCi0JCQkJJmNoaXAtPmluZGlvX2Rldi0+aW50ZXJydXB0c1swXS0+ZXZfbGlzdCk7Ci0KLQkJSU5JVF9XT1JLKCZjaGlwLT50aHJlc2hfd29yaywgYWR0NzVfaW50ZXJydXB0X2JoKTsKLQogCQlyZXQgPSBhZHQ3NV9pMmNfcmVhZChjaGlwLCBBRFQ3NV9DT05GSUcsICZjaGlwLT5jb25maWcpOwogCQlpZiAocmV0KSB7CiAJCQlyZXQgPSAtRUlPOwpAQCAtNjY4LDExICs2MDQsMTEgQEAKIAl9CiAKIAlkZXZfaW5mbygmY2xpZW50LT5kZXYsICIlcyB0ZW1wZXJhdHVyZSBzZW5zb3IgcmVnaXN0ZXJlZC5cbiIsCi0JCQkgaWQtPm5hbWUpOworCQkJIGNoaXAtPmluZGlvX2Rldi0+bmFtZSk7CiAKIAlyZXR1cm4gMDsKIGVycm9yX3VucmVnX2lycToKLQlpaW9fdW5yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShjaGlwLT5pbmRpb19kZXYsIDApOworCWZyZWVfaXJxKGNsaWVudC0+aXJxLCBjaGlwLT5pbmRpb19kZXYpOwogZXJyb3JfdW5yZWdfZGV2OgogCWlpb19kZXZpY2VfdW5yZWdpc3RlcihjaGlwLT5pbmRpb19kZXYpOwogZXJyb3JfZnJlZV9kZXY6CkBAIC02ODksNyArNjI1LDcgQEAKIAlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gY2hpcC0+aW5kaW9fZGV2OwogCiAJaWYgKGNsaWVudC0+aXJxKQotCQlpaW9fdW5yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShpbmRpb19kZXYsIDApOworCQlmcmVlX2lycShjbGllbnQtPmlycSwgY2hpcC0+aW5kaW9fZGV2KTsKIAlpaW9fZGV2aWNlX3VucmVnaXN0ZXIoaW5kaW9fZGV2KTsKIAlpaW9fZnJlZV9kZXZpY2UoY2hpcC0+aW5kaW9fZGV2KTsKIAlrZnJlZShjaGlwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL21heDEzNjMuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL21heDEzNjMuaAppbmRleCA4ZjBmZTFjLi4zNjBiZmM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9tYXgxMzYzLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvbWF4MTM2My5oCkBAIC02Nyw3MCArNjcsNiBAQAogCWxvbmcJCW1vZGVtYXNrOwogfTsKIAotI2RlZmluZSBNQVgxMzYzX01PREVfU0lOR0xFKF9udW0sIF9tYXNrKSB7CQkJCVwKLQkJLmNvbmYgPSBNQVgxMzYzX0NIQU5ORUxfU0VMKF9udW0pCQkJXAotCQkJfCBNQVgxMzYzX0NPTkZJR19TQ0FOX1NJTkdMRV8xCQkJXAotCQkJfCBNQVgxMzYzX0NPTkZJR19TRSwJCQkJXAotCQkJLm1vZGVtYXNrID0gX21hc2ssCQkJCVwKLQkJCX0KLQotI2RlZmluZSBNQVgxMzYzX01PREVfU0NBTl9UT19DSEFOTkVMKF9udW0sIF9tYXNrKSB7CQkJXAotCQkuY29uZiA9IE1BWDEzNjNfQ0hBTk5FTF9TRUwoX251bSkJCQlcCi0JCQl8IE1BWDEzNjNfQ09ORklHX1NDQU5fVE9fQ1MJCQlcCi0JCQl8IE1BWDEzNjNfQ09ORklHX1NFLAkJCQlcCi0JCQkubW9kZW1hc2sgPSBfbWFzaywJCQkJXAotCQkJfQotCi0KLS8qIG5vdGUgbm90IGF2YWlsYWJsZSBmb3IgbWF4MTM2MyBoZW5jZSBuYW1pbmcgKi8KLSNkZWZpbmUgTUFYMTIzNl9NT0RFX1NDQU5fTUlEX1RPX0NIQU5ORUwoX21pZCwgX251bSwgX21hc2spIHsJCVwKLQkJLmNvbmYgPSBNQVgxMzYzX0NIQU5ORUxfU0VMKF9udW0pCQkJXAotCQkJfCBNQVgxMjM2X1NDQU5fTUlEX1RPX0NIQU5ORUwJCQlcCi0JCQl8IE1BWDEzNjNfQ09ORklHX1NFLAkJCQlcCi0JCQkubW9kZW1hc2sgPSBfbWFzawkJCQlcCi19Ci0KLSNkZWZpbmUgTUFYMTM2M19NT0RFX0RJRkZfU0lOR0xFKF9udW1wLCBfbnVtbSwgX21hc2spIHsJCQlcCi0JCS5jb25mID0gTUFYMTM2M19DSEFOTkVMX1NFTChfbnVtcCkJCQlcCi0JCQl8IE1BWDEzNjNfQ09ORklHX1NDQU5fU0lOR0xFXzEJCQlcCi0JCQl8IE1BWDEzNjNfQ09ORklHX0RFLAkJCQlcCi0JCQkubW9kZW1hc2sgPSBfbWFzawkJCQlcCi0JCQl9Ci0KLS8qIENhbid0IHRoaW5rIGhvdyB0byBhdXRvbWF0ZSBuYW1pbmcgc28gc3BlY2lmeSBmb3Igbm93ICovCi0jZGVmaW5lIE1BWDEzNjNfTU9ERV9ESUZGX1NDQU5fVE9fQ0hBTk5FTChfbnVtLCBfbnVtdmFscywgX21hc2spIHsgXAotCQkuY29uZiA9IE1BWDEzNjNfQ0hBTk5FTF9TRUwoX251bSkJCQlcCi0JCQl8IE1BWDEzNjNfQ09ORklHX1NDQU5fVE9fQ1MJCQlcCi0JCQl8IE1BWDEzNjNfQ09ORklHX0RFLAkJCQlcCi0JCQkubW9kZW1hc2sgPSBfbWFzawkJCQlcCi0JCQl9Ci0KLS8qIG5vdGUgb25seSBhdmFpbGFibGUgZm9yIG1heDEzNjMgaGVuY2UgbmFtaW5nICovCi0jZGVmaW5lIE1BWDEyMzZfTU9ERV9ESUZGX1NDQU5fTUlEX1RPX0NIQU5ORUwoX251bSwgX251bXZhbHMsIF9tYXNrKSB7IFwKLQkJLmNvbmYgPSBNQVgxMzYzX0NIQU5ORUxfU0VMKF9udW0pCQkJXAotCQkJfCBNQVgxMjM2X1NDQU5fTUlEX1RPX0NIQU5ORUwJCQlcCi0JCQl8IE1BWDEzNjNfQ09ORklHX1NFLAkJCQlcCi0JCQkubW9kZW1hc2sgPSBfbWFzawkJCQlcCi19Ci0KLS8qIFRoaXMgbWF5IHNlZW0gYW4gb3Zlcmx5IGxvbmcgd2luZGVkIHdheSB0byBkbyB0aGlzLCBidXQgYXQgbGVhc3QgaXQgbWFrZXMKLSAqIGNsZWFyIHdoYXQgYWxsIHRoZSB2YXJpb3VzIG9wdGlvbnMgYWN0dWFsbHkgZG8uIEFsdGVybmF0aXZlIHN1Z2dlc3Rpb25zCi0gKiB0aGF0IGRvbid0IHJlcXVpcmUgdXNlciB0byBoYXZlIGludGltYXRlIGtub3dsZWRnZSBvZiB0aGUgY2hpcCB3ZWxjb21lZC4KLSAqLwotZW51bSBtYXgxMzYzX2NoYW5uZWxzIHsKLQltYXgxMzYzX2luMCwgbWF4MTM2M19pbjEsIG1heDEzNjNfaW4yLCBtYXgxMzYzX2luMywKLQltYXgxMzYzX2luNCwgbWF4MTM2M19pbjUsIG1heDEzNjNfaW42LCBtYXgxMzYzX2luNywKLQltYXgxMzYzX2luOCwgbWF4MTM2M19pbjksIG1heDEzNjNfaW4xMCwgbWF4MTM2M19pbjExLAotCi0JbWF4MTM2M19pbjBtaW4xLCBtYXgxMzYzX2luMm1pbjMsCi0JbWF4MTM2M19pbjRtaW41LCBtYXgxMzYzX2luNm1pbjcsCi0JbWF4MTM2M19pbjhtaW45LCBtYXgxMzYzX2luMTBtaW4xMSwKLQotCW1heDEzNjNfaW4xbWluMCwgbWF4MTM2M19pbjNtaW4yLAotCW1heDEzNjNfaW41bWluNCwgbWF4MTM2M19pbjdtaW42LAotCW1heDEzNjNfaW45bWluOCwgbWF4MTM2M19pbjExbWluMTAsCi19OwotCiAvKiBUaGlzIG11c3QgYmUgbWFpbnRhaW5lZCBhbG9uZyBzaWRlIHRoZSBtYXgxMzYzX21vZGVfdGFibGUgaW4gbWF4MTM2M19jb3JlICovCiBlbnVtIG1heDEzNjNfbW9kZXMgewogCS8qIFNpbmdsZSByZWFkIG9mIGEgc2luZ2xlIGNoYW5uZWwgKi8KQEAgLTE1MiwzNyArODgsMzQgQEAKIC8qKgogICogc3RydWN0IG1heDEzNjNfY2hpcF9pbmZvIC0gY2hpcCBzcGVjaWZjIGluZm9ybWF0aW9uCiAgKiBAbmFtZToJCWluZGVudGlmaWNhdGlvbiBzdHJpbmcgZm9yIGNoaXAKLSAqIEBudW1faW5wdXRzOgkJbnVtYmVyIG9mIHBoeXNpY2FsIGlucHV0cyBvbiBjaGlwCiAgKiBAYml0czoJCWFjY3VyYWN5IG9mIHRoZSBhZGMgaW4gYml0cwogICogQGludF92cmVmX212Ogl0aGUgaW50ZXJuYWwgcmVmZXJlbmNlIHZvbHRhZ2UKLSAqIEBtb25pdG9yX21vZGU6CXdoZXRoZXIgdGhlIGNoaXAgc3VwcG9ydHMgbW9uaXRvciBpbnRlcnJ1cHRzCisgKiBAaW5mbzoJCWlpbyBjb3JlIGZ1bmN0aW9uIGNhbGxiYWNrcyBzdHJ1Y3R1cmUKICAqIEBtb2RlX2xpc3Q6CQlhcnJheSBvZiBhdmFpbGFibGUgc2NhbiBtb2RlcwogICogQG51bV9tb2RlczoJCXRoZSBudW1iZXIgb2Ygc2NhbiBtb2RlcyBhdmFpbGFibGUKICAqIEBkZWZhdWx0X21vZGU6CXRoZSBzY2FuIG1vZGUgaW4gd2hpY2ggdGhlIGNoaXAgc3RhcnRzIHVwCisgKiBAY2hhbm5lbDoJCWNoYW5uZWwgc3BlY2lmaWNhdGlvbgorICogQG51bV9jaGFubmVsczoJbnVtYmVyIG9mIGNoYW5uZWxzCiAgKi8KIHN0cnVjdCBtYXgxMzYzX2NoaXBfaW5mbyB7Ci0JdTgJCQkJbnVtX2lucHV0czsKLQl1OAkJCQliaXRzOwotCXUxNgkJCQlpbnRfdnJlZl9tdjsKLQlib29sCQkJCW1vbml0b3JfbW9kZTsKKwljb25zdCBzdHJ1Y3QgaWlvX2luZm8JCSppbmZvOworCXN0cnVjdCBpaW9fY2hhbl9zcGVjICpjaGFubmVsczsKKwlpbnQgbnVtX2NoYW5uZWxzOwogCWNvbnN0IGVudW0gbWF4MTM2M19tb2RlcwkqbW9kZV9saXN0OwotCWludAkJCQludW1fbW9kZXM7CiAJZW51bSBtYXgxMzYzX21vZGVzCQlkZWZhdWx0X21vZGU7Ci0Jc3RydWN0IGF0dHJpYnV0ZV9ncm91cAkJKmRldl9hdHRyczsKLQlzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwCQkqc2Nhbl9hdHRyczsKKwl1MTYJCQkJaW50X3ZyZWZfbXY7CisJdTgJCQkJbnVtX21vZGVzOworCXU4CQkJCWJpdHM7CiB9OwogCiAvKioKICAqIHN0cnVjdCBtYXgxMzYzX3N0YXRlIC0gZHJpdmVyIGluc3RhbmNlIHNwZWNpZmljIGRhdGEKLSAqIEBpbmRpb19kZXY6CQl0aGUgaW5kdXN0cmlhbCBJL08gZGV2aWNlCiAgKiBAY2xpZW50OgkJaTJjX2NsaWVudAogICogQHNldHVwYnl0ZToJCWNhY2hlIG9mIGN1cnJlbnQgZGV2aWNlIHNldHVwIGJ5dGUKICAqIEBjb25maWdieXRlOgkJY2FjaGUgb2YgY3VycmVudCBkZXZpY2UgY29uZmlnIGJ5dGUKICAqIEBjaGlwX2luZm86CQljaGlwIG1vZGVsIHNwZWNpZmljIGNvbnN0YW50cywgYXZhaWxhYmxlIG1vZGVzIGV0YwogICogQGN1cnJlbnRfbW9kZToJdGhlIHNjYW4gbW9kZSBvZiB0aGlzIGNoaXAKICAqIEByZXF1ZXN0ZWRtYXNrOglhIHZhbGlkIHJlcXVlc3RlZCBzZXQgb2YgY2hhbm5lbHMKLSAqIEBwb2xsX3dvcms6CQlib3R0b20gaGFsZiBvZiBwb2xsaW5nIGludGVycnVwdCBoYW5kbGVyCi0gKiBAcHJvdGVjdF9yaW5nOgl1c2VkIHRvIGVuc3VyZSBvbmx5IG9uZSBwb2xsaW5nIGJoIHJ1bm5pbmcgYXQgYSB0aW1lCiAgKiBAcmVnOgkJc3VwcGx5IHJlZ3VsYXRvcgogICogQG1vbml0b3Jfb246CQl3aGV0aGVyIG1vbml0b3IgbW9kZSBpcyBlbmFibGVkCiAgKiBAbW9uaXRvcl9zcGVlZDoJcGFyYW1ldGVyIGNvcnJlc3BvbmRpbmcgdG8gZGV2aWNlIG1vbml0b3Igc3BlZWQgc2V0dGluZwpAQCAtMTkwLDIwICsxMjMsMTQgQEAKICAqIEBtYXNrX2xvdzoJCWJpdG1hc2sgZm9yIGVuYWJsZWQgbG93IHRocmVzaG9sZHMKICAqIEB0aHJlc2hfaGlnaDoJaGlnaCB0aHJlc2hvbGQgdmFsdWVzCiAgKiBAdGhyZXNoX2xvdzoJCWxvdyB0aHJlc2hvbGQgdmFsdWVzCi0gKiBAbGFzdF90aW1lc3RhbXA6CXRpbWVzdGFtcCBvZiBsYXN0IGV2ZW50IGludGVycnVwdAotICogQHRocmVzaF93b3JrOgliaCB3b3JrIHN0cnVjdHVyZSBmb3IgZXZlbnQgaGFuZGxpbmcKICAqLwogc3RydWN0IG1heDEzNjNfc3RhdGUgewotCXN0cnVjdCBpaW9fZGV2CQkJKmluZGlvX2RldjsKIAlzdHJ1Y3QgaTJjX2NsaWVudAkJKmNsaWVudDsKIAl1OAkJCQlzZXR1cGJ5dGU7CiAJdTgJCQkJY29uZmlnYnl0ZTsKIAljb25zdCBzdHJ1Y3QgbWF4MTM2M19jaGlwX2luZm8JKmNoaXBfaW5mbzsKIAljb25zdCBzdHJ1Y3QgbWF4MTM2M19tb2RlCSpjdXJyZW50X21vZGU7CiAJdTMyCQkJCXJlcXVlc3RlZG1hc2s7Ci0Jc3RydWN0IHdvcmtfc3RydWN0CQlwb2xsX3dvcms7Ci0JYXRvbWljX3QJCQlwcm90ZWN0X3Jpbmc7Ci0Jc3RydWN0IGlpb190cmlnZ2VyCQkqdHJpZzsKIAlzdHJ1Y3QgcmVndWxhdG9yCQkqcmVnOwogCiAJLyogVXNpbmcgbW9uaXRvciBtb2RlcyBhbmQgYnVmZmVyIGF0IHRoZSBzYW1lIHRpbWUgaXMKQEAgLTIxNSw4ICsxNDIsNiBAQAogCS8qIDR4IHVuaXBvbGFyIGZpcnN0IHRoZW4gdGhlIGZvdXJzIGJpcG9sYXIgb25lcyAqLwogCXMxNgkJCQl0aHJlc2hfaGlnaFs4XTsKIAlzMTYJCQkJdGhyZXNoX2xvd1s4XTsKLQlzNjQJCQkJbGFzdF90aW1lc3RhbXA7Ci0Jc3RydWN0IHdvcmtfc3RydWN0CQl0aHJlc2hfd29yazsKIH07CiAKIGNvbnN0IHN0cnVjdCBtYXgxMzYzX21vZGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL21heDEzNjNfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvbWF4MTM2M19jb3JlLmMKaW5kZXggZGU4M2MzYi4uOThjZWJkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvbWF4MTM2M19jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvbWF4MTM2M19jb3JlLmMKQEAgLTIyLDcgKzIyLDYgQEAKICAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CkBAIC0zOSwzOCArMzgsNTAgQEAKICNpbmNsdWRlICJhZGMuaCIKICNpbmNsdWRlICJtYXgxMzYzLmgiCiAKLS8qIEhlcmUgd2UgY2xhaW0gYWxsIGFyZSAxNiBiaXRzLiBUaGlzIGN1cnJlbnRseSBkb2VzIG5vIGhhcm0gYW5kIHNhdmVzCi0gKiB1cyBhIGxvdCBvZiBzY2FuIGVsZW1lbnQgbGlzdGluZ3MgKi8KKyNkZWZpbmUgTUFYMTM2M19NT0RFX1NJTkdMRShfbnVtLCBfbWFzaykgewkJCQlcCisJCS5jb25mID0gTUFYMTM2M19DSEFOTkVMX1NFTChfbnVtKQkJCVwKKwkJCXwgTUFYMTM2M19DT05GSUdfU0NBTl9TSU5HTEVfMQkJCVwKKwkJCXwgTUFYMTM2M19DT05GSUdfU0UsCQkJCVwKKwkJCS5tb2RlbWFzayA9IF9tYXNrLAkJCQlcCisJCQl9CiAKLSNkZWZpbmUgTUFYMTM2M19TQ0FOX0VMKG51bWJlcikJCQkJXAotCUlJT19TQ0FOX0VMX0MoaW4jI251bWJlciwgbnVtYmVyLCAwLCBOVUxMKTsKLSNkZWZpbmUgTUFYMTM2M19TQ0FOX0VMX0QocCwgbiwgbnVtYmVyKQkJCQkJXAotCUlJT19TQ0FOX05BTUVEX0VMX0MoaW4jI3AjI20jI2luIyNuLCBpbiMjcC1pbiMjbiwgbnVtYmVyLCAwLCBOVUxMKTsKKyNkZWZpbmUgTUFYMTM2M19NT0RFX1NDQU5fVE9fQ0hBTk5FTChfbnVtLCBfbWFzaykgewkJCVwKKwkJLmNvbmYgPSBNQVgxMzYzX0NIQU5ORUxfU0VMKF9udW0pCQkJXAorCQkJfCBNQVgxMzYzX0NPTkZJR19TQ0FOX1RPX0NTCQkJXAorCQkJfCBNQVgxMzYzX0NPTkZJR19TRSwJCQkJXAorCQkJLm1vZGVtYXNrID0gX21hc2ssCQkJCVwKKwkJCX0KIAotc3RhdGljIE1BWDEzNjNfU0NBTl9FTCgwKTsKLXN0YXRpYyBNQVgxMzYzX1NDQU5fRUwoMSk7Ci1zdGF0aWMgTUFYMTM2M19TQ0FOX0VMKDIpOwotc3RhdGljIE1BWDEzNjNfU0NBTl9FTCgzKTsKLXN0YXRpYyBNQVgxMzYzX1NDQU5fRUwoNCk7Ci1zdGF0aWMgTUFYMTM2M19TQ0FOX0VMKDUpOwotc3RhdGljIE1BWDEzNjNfU0NBTl9FTCg2KTsKLXN0YXRpYyBNQVgxMzYzX1NDQU5fRUwoNyk7Ci1zdGF0aWMgTUFYMTM2M19TQ0FOX0VMKDgpOwotc3RhdGljIE1BWDEzNjNfU0NBTl9FTCg5KTsKLXN0YXRpYyBNQVgxMzYzX1NDQU5fRUwoMTApOwotc3RhdGljIE1BWDEzNjNfU0NBTl9FTCgxMSk7Ci1zdGF0aWMgTUFYMTM2M19TQ0FOX0VMX0QoMCwgMSwgMTIpOwotc3RhdGljIE1BWDEzNjNfU0NBTl9FTF9EKDIsIDMsIDEzKTsKLXN0YXRpYyBNQVgxMzYzX1NDQU5fRUxfRCg0LCA1LCAxNCk7Ci1zdGF0aWMgTUFYMTM2M19TQ0FOX0VMX0QoNiwgNywgMTUpOwotc3RhdGljIE1BWDEzNjNfU0NBTl9FTF9EKDgsIDksIDE2KTsKLXN0YXRpYyBNQVgxMzYzX1NDQU5fRUxfRCgxMCwgMTEsIDE3KTsKLXN0YXRpYyBNQVgxMzYzX1NDQU5fRUxfRCgxLCAwLCAxOCk7Ci1zdGF0aWMgTUFYMTM2M19TQ0FOX0VMX0QoMywgMiwgMTkpOwotc3RhdGljIE1BWDEzNjNfU0NBTl9FTF9EKDUsIDQsIDIwKTsKLXN0YXRpYyBNQVgxMzYzX1NDQU5fRUxfRCg3LCA2LCAyMSk7Ci1zdGF0aWMgTUFYMTM2M19TQ0FOX0VMX0QoOSwgOCwgMjIpOwotc3RhdGljIE1BWDEzNjNfU0NBTl9FTF9EKDExLCAxMCwgMjMpOworLyogbm90ZSBub3QgYXZhaWxhYmxlIGZvciBtYXgxMzYzIGhlbmNlIG5hbWluZyAqLworI2RlZmluZSBNQVgxMjM2X01PREVfU0NBTl9NSURfVE9fQ0hBTk5FTChfbWlkLCBfbnVtLCBfbWFzaykgewkJXAorCQkuY29uZiA9IE1BWDEzNjNfQ0hBTk5FTF9TRUwoX251bSkJCQlcCisJCQl8IE1BWDEyMzZfU0NBTl9NSURfVE9fQ0hBTk5FTAkJCVwKKwkJCXwgTUFYMTM2M19DT05GSUdfU0UsCQkJCVwKKwkJCS5tb2RlbWFzayA9IF9tYXNrCQkJCVwKK30KKworI2RlZmluZSBNQVgxMzYzX01PREVfRElGRl9TSU5HTEUoX251bXAsIF9udW1tLCBfbWFzaykgewkJCVwKKwkJLmNvbmYgPSBNQVgxMzYzX0NIQU5ORUxfU0VMKF9udW1wKQkJCVwKKwkJCXwgTUFYMTM2M19DT05GSUdfU0NBTl9TSU5HTEVfMQkJCVwKKwkJCXwgTUFYMTM2M19DT05GSUdfREUsCQkJCVwKKwkJCS5tb2RlbWFzayA9IF9tYXNrCQkJCVwKKwkJCX0KKworLyogQ2FuJ3QgdGhpbmsgaG93IHRvIGF1dG9tYXRlIG5hbWluZyBzbyBzcGVjaWZ5IGZvciBub3cgKi8KKyNkZWZpbmUgTUFYMTM2M19NT0RFX0RJRkZfU0NBTl9UT19DSEFOTkVMKF9udW0sIF9udW12YWxzLCBfbWFzaykgewlcCisJCS5jb25mID0gTUFYMTM2M19DSEFOTkVMX1NFTChfbnVtKQkJCVwKKwkJCXwgTUFYMTM2M19DT05GSUdfU0NBTl9UT19DUwkJCVwKKwkJCXwgTUFYMTM2M19DT05GSUdfREUsCQkJCVwKKwkJCS5tb2RlbWFzayA9IF9tYXNrCQkJCVwKKwkJCX0KKworLyogbm90ZSBvbmx5IGF2YWlsYWJsZSBmb3IgbWF4MTM2MyBoZW5jZSBuYW1pbmcgKi8KKyNkZWZpbmUgTUFYMTIzNl9NT0RFX0RJRkZfU0NBTl9NSURfVE9fQ0hBTk5FTChfbnVtLCBfbnVtdmFscywgX21hc2spIHsJXAorCQkuY29uZiA9IE1BWDEzNjNfQ0hBTk5FTF9TRUwoX251bSkJCQlcCisJCQl8IE1BWDEyMzZfU0NBTl9NSURfVE9fQ0hBTk5FTAkJCVwKKwkJCXwgTUFYMTM2M19DT05GSUdfU0UsCQkJCVwKKwkJCS5tb2RlbWFzayA9IF9tYXNrCQkJCVwKK30KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtYXgxMzYzX21vZGUgbWF4MTM2M19tb2RlX3RhYmxlW10gPSB7CiAJLyogQWxsIG9mIHRoZSBzaW5nbGUgY2hhbm5lbCBvcHRpb25zIGZpcnN0ICovCkBAIC0xNDcsNzYgKzE1OCwxMyBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgc3NpemVfdCBtYXgxMzYzX3Nob3dfcHJlY2lzaW9uX3Uoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCWNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGlpb19kZXYgKmRldl9pbmZvID0gcmluZy0+aW5kaW9fZGV2OwotCXN0cnVjdCBtYXgxMzYzX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoZGV2X2luZm8pOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgInUlZC8xNlxuIiwgc3QtPmNoaXBfaW5mby0+Yml0cyk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IG1heDEzNjNfc2hvd19wcmVjaXNpb25fcyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJY2hhciAqYnVmKQotewotCXN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSByaW5nLT5pbmRpb19kZXY7Ci0Jc3RydWN0IG1heDEzNjNfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShkZXZfaW5mbyk7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAicyVkLzE2XG4iLCBzdC0+Y2hpcF9pbmZvLT5iaXRzKTsKLX0KLQotI2RlZmluZSBNQVgxMzYzX1NDQU5fVFlQRShuKQkJCQkJCVwKLQlERVZJQ0VfQVRUUihpbiMjbiMjX3R5cGUsIFNfSVJVR08sCQkJCVwKLQkJICAgIG1heDEzNjNfc2hvd19wcmVjaXNpb25fdSwgTlVMTCk7Ci0jZGVmaW5lIE1BWDEzNjNfU0NBTl9UWVBFX0QocCwgbikJCQkJCVwKLQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl9pbiMjcCMjbSMjaW4jI24jI190eXBlID0JXAotCQlfX0FUVFIoaW4jI3AtaW4jI24jI190eXBlLCBTX0lSVUdPLAkJCVwKLQkJICAgICAgIG1heDEzNjNfc2hvd19wcmVjaXNpb25fcywgTlVMTCk7Ci0KLXN0YXRpYyBNQVgxMzYzX1NDQU5fVFlQRSgwKTsKLXN0YXRpYyBNQVgxMzYzX1NDQU5fVFlQRSgxKTsKLXN0YXRpYyBNQVgxMzYzX1NDQU5fVFlQRSgyKTsKLXN0YXRpYyBNQVgxMzYzX1NDQU5fVFlQRSgzKTsKLXN0YXRpYyBNQVgxMzYzX1NDQU5fVFlQRSg0KTsKLXN0YXRpYyBNQVgxMzYzX1NDQU5fVFlQRSg1KTsKLXN0YXRpYyBNQVgxMzYzX1NDQU5fVFlQRSg2KTsKLXN0YXRpYyBNQVgxMzYzX1NDQU5fVFlQRSg3KTsKLXN0YXRpYyBNQVgxMzYzX1NDQU5fVFlQRSg4KTsKLXN0YXRpYyBNQVgxMzYzX1NDQU5fVFlQRSg5KTsKLXN0YXRpYyBNQVgxMzYzX1NDQU5fVFlQRSgxMCk7Ci1zdGF0aWMgTUFYMTM2M19TQ0FOX1RZUEUoMTEpOwotCi1zdGF0aWMgTUFYMTM2M19TQ0FOX1RZUEVfRCgwLCAxKTsKLXN0YXRpYyBNQVgxMzYzX1NDQU5fVFlQRV9EKDIsIDMpOwotc3RhdGljIE1BWDEzNjNfU0NBTl9UWVBFX0QoNCwgNSk7Ci1zdGF0aWMgTUFYMTM2M19TQ0FOX1RZUEVfRCg2LCA3KTsKLXN0YXRpYyBNQVgxMzYzX1NDQU5fVFlQRV9EKDgsIDkpOwotc3RhdGljIE1BWDEzNjNfU0NBTl9UWVBFX0QoMTAsIDExKTsKLXN0YXRpYyBNQVgxMzYzX1NDQU5fVFlQRV9EKDEsIDApOwotc3RhdGljIE1BWDEzNjNfU0NBTl9UWVBFX0QoMywgMik7Ci1zdGF0aWMgTUFYMTM2M19TQ0FOX1RZUEVfRCg1LCA0KTsKLXN0YXRpYyBNQVgxMzYzX1NDQU5fVFlQRV9EKDcsIDYpOwotc3RhdGljIE1BWDEzNjNfU0NBTl9UWVBFX0QoOSwgOCk7Ci1zdGF0aWMgTUFYMTM2M19TQ0FOX1RZUEVfRCgxMSwgMTApOwotCiBzdGF0aWMgaW50IG1heDEzNjNfd3JpdGVfYmFzaWNfY29uZmlnKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkJICAgICAgdW5zaWduZWQgY2hhciBkMSwKIAkJCQkgICAgICB1bnNpZ25lZCBjaGFyIGQyKQogewotCWludCByZXQ7Ci0JdTggKnR4X2J1ZiA9IGttYWxsb2MoMiwgR0ZQX0tFUk5FTCk7CisJdTggdHhfYnVmWzJdID0ge2QxLCBkMn07CiAKLQlpZiAoIXR4X2J1ZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0JdHhfYnVmWzBdID0gZDE7Ci0JdHhfYnVmWzFdID0gZDI7Ci0KLQlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCB0eF9idWYsIDIpOwotCWtmcmVlKHR4X2J1Zik7Ci0KLQlyZXR1cm4gKHJldCA+IDApID8gMCA6IHJldDsKKwlyZXR1cm4gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgdHhfYnVmLCAyKTsKIH0KIAogaW50IG1heDEzNjNfc2V0X3NjYW5fbW9kZShzdHJ1Y3QgbWF4MTM2M19zdGF0ZSAqc3QpCkBAIC0yMzEsMjAgKzE3OSwxOSBAQAogCQkJCQkgIHN0LT5jb25maWdieXRlKTsKIH0KIAotc3RhdGljIHNzaXplX3QgbWF4MTM2M19yZWFkX3NpbmdsZV9jaGFubmVsKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkgICBjaGFyICpidWYpCitzdGF0aWMgaW50IG1heDEzNjNfcmVhZF9zaW5nbGVfY2hhbihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAorCQkJCSAgICBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbiwKKwkJCQkgICAgaW50ICp2YWwsCisJCQkJICAgIGxvbmcgbSkKIHsKLQlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgbWF4MTM2M19zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGRldl9pbmZvKTsKLQlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHN0LT5jbGllbnQ7Ci0JaW50IHJldCA9IDAsIGxlbiA9IDA7Ci0JczMyIGRhdGEgOworCWludCByZXQgPSAwOworCXMzMiBkYXRhOwogCWNoYXIgcnhidWZbMl07CiAJbG9uZyBtYXNrOworCXN0cnVjdCBtYXgxMzYzX3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHN0LT5jbGllbnQ7CiAKLQltdXRleF9sb2NrKCZkZXZfaW5mby0+bWxvY2spOworCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOwogCS8qCiAJICogSWYgbW9uaXRvciBtb2RlIGlzIGVuYWJsZWQsIHRoZSBtZXRob2QgZm9yIHJlYWRpbmcgYSBzaW5nbGUKIAkgKiBjaGFubmVsIHdpbGwgaGF2ZSB0byBiZSByYXRoZXIgZGlmZmVyZW50IGFuZCBoYXMgbm90IHlldApAQCAtMjU2LDggKzIwMyw4IEBACiAJfQogCiAJLyogSWYgcmluZyBidWZmZXIgY2FwdHVyZSBpcyBvY2N1cnJpbmcsIHF1ZXJ5IHRoZSBidWZmZXIgKi8KLQlpZiAoaWlvX3JpbmdfZW5hYmxlZChkZXZfaW5mbykpIHsKLQkJbWFzayA9IG1heDEzNjNfbW9kZV90YWJsZVt0aGlzX2F0dHItPmFkZHJlc3NdLm1vZGVtYXNrOworCWlmIChpaW9fcmluZ19lbmFibGVkKGluZGlvX2RldikpIHsKKwkJbWFzayA9IG1heDEzNjNfbW9kZV90YWJsZVtjaGFuLT5hZGRyZXNzXS5tb2RlbWFzazsKIAkJZGF0YSA9IG1heDEzNjNfc2luZ2xlX2NoYW5uZWxfZnJvbV9yaW5nKG1hc2ssIHN0KTsKIAkJaWYgKGRhdGEgPCAwKSB7CiAJCQlyZXQgPSBkYXRhOwpAQCAtMjY1LDEzICsyMTIsMTEgQEAKIAkJfQogCX0gZWxzZSB7CiAJCS8qIENoZWNrIHRvIHNlZSBpZiBjdXJyZW50IHNjYW4gbW9kZSBpcyBjb3JyZWN0ICovCi0JCWlmIChzdC0+Y3VycmVudF9tb2RlICE9Ci0JCSAgICAmbWF4MTM2M19tb2RlX3RhYmxlW3RoaXNfYXR0ci0+YWRkcmVzc10pIHsKKwkJaWYgKHN0LT5jdXJyZW50X21vZGUgIT0gJm1heDEzNjNfbW9kZV90YWJsZVtjaGFuLT5hZGRyZXNzXSkgewogCQkJLyogVXBkYXRlIHNjYW4gbW9kZSBpZiBuZWVkZWQgKi8KLQkJCXN0LT5jdXJyZW50X21vZGUKLQkJCQk9ICZtYXgxMzYzX21vZGVfdGFibGVbdGhpc19hdHRyLT5hZGRyZXNzXTsKKwkJCXN0LT5jdXJyZW50X21vZGUgPSAmbWF4MTM2M19tb2RlX3RhYmxlW2NoYW4tPmFkZHJlc3NdOwogCQkJcmV0ID0gbWF4MTM2M19zZXRfc2Nhbl9tb2RlKHN0KTsKLQkJCWlmIChyZXQpCisJCQlpZiAocmV0IDwgMCkKIAkJCQlnb3RvIGVycm9yX3JldDsKIAkJfQogCQlpZiAoc3QtPmNoaXBfaW5mby0+Yml0cyAhPSA4KSB7CkBAIC0yODEsNyArMjI2LDYgQEAKIAkJCQlyZXQgPSBkYXRhOwogCQkJCWdvdG8gZXJyb3JfcmV0OwogCQkJfQotCiAJCQlkYXRhID0gKHMzMikocnhidWZbMV0pIHwgKChzMzIpKHJ4YnVmWzBdICYgMHgwRikpIDw8IDg7CiAJCX0gZWxzZSB7CiAJCQkvKiBHZXQgcmVhZGluZyAqLwpAQCAtMjkzLDcyICsyMzcsNDQgQEAKIAkJCWRhdGEgPSByeGJ1ZlswXTsKIAkJfQogCX0KLQkvKiBQcmV0dHkgcHJpbnQgdGhlIHJlc3VsdCAqLwotCWxlbiA9IHNwcmludGYoYnVmLCAiJXVcbiIsIGRhdGEpOwotCisJKnZhbCA9IGRhdGE7CiBlcnJvcl9yZXQ6Ci0JbXV0ZXhfdW5sb2NrKCZkZXZfaW5mby0+bWxvY2spOwotCXJldHVybiByZXQgPyByZXQgOiBsZW47CisJbXV0ZXhfdW5sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKKwlyZXR1cm4gcmV0OworCiB9CiAKLS8qIERpcmVjdCByZWFkIGF0dHJpYnR1ZXMgKi8KLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDAsIG1heDEzNjNfcmVhZF9zaW5nbGVfY2hhbm5lbCwgX3MwKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDEsIG1heDEzNjNfcmVhZF9zaW5nbGVfY2hhbm5lbCwgX3MxKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDIsIG1heDEzNjNfcmVhZF9zaW5nbGVfY2hhbm5lbCwgX3MyKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDMsIG1heDEzNjNfcmVhZF9zaW5nbGVfY2hhbm5lbCwgX3MzKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDQsIG1heDEzNjNfcmVhZF9zaW5nbGVfY2hhbm5lbCwgX3M0KTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDUsIG1heDEzNjNfcmVhZF9zaW5nbGVfY2hhbm5lbCwgX3M1KTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDYsIG1heDEzNjNfcmVhZF9zaW5nbGVfY2hhbm5lbCwgX3M2KTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDcsIG1heDEzNjNfcmVhZF9zaW5nbGVfY2hhbm5lbCwgX3M3KTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDgsIG1heDEzNjNfcmVhZF9zaW5nbGVfY2hhbm5lbCwgX3M4KTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDksIG1heDEzNjNfcmVhZF9zaW5nbGVfY2hhbm5lbCwgX3M5KTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDEwLCBtYXgxMzYzX3JlYWRfc2luZ2xlX2NoYW5uZWwsIF9zMTApOwotc3RhdGljIElJT19ERVZfQVRUUl9JTl9SQVcoMTEsIG1heDEzNjNfcmVhZF9zaW5nbGVfY2hhbm5lbCwgX3MxMSk7Ci0KLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fRElGRl9SQVcoMCwgMSwgbWF4MTM2M19yZWFkX3NpbmdsZV9jaGFubmVsLCBkMG0xKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fRElGRl9SQVcoMiwgMywgbWF4MTM2M19yZWFkX3NpbmdsZV9jaGFubmVsLCBkMm0zKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fRElGRl9SQVcoNCwgNSwgbWF4MTM2M19yZWFkX3NpbmdsZV9jaGFubmVsLCBkNG01KTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fRElGRl9SQVcoNiwgNywgbWF4MTM2M19yZWFkX3NpbmdsZV9jaGFubmVsLCBkNm03KTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fRElGRl9SQVcoOCwgOSwgbWF4MTM2M19yZWFkX3NpbmdsZV9jaGFubmVsLCBkOG05KTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fRElGRl9SQVcoMTAsIDExLCBtYXgxMzYzX3JlYWRfc2luZ2xlX2NoYW5uZWwsIGQxMG0xMSk7Ci1zdGF0aWMgSUlPX0RFVl9BVFRSX0lOX0RJRkZfUkFXKDEsIDAsIG1heDEzNjNfcmVhZF9zaW5nbGVfY2hhbm5lbCwgZDFtMCk7Ci1zdGF0aWMgSUlPX0RFVl9BVFRSX0lOX0RJRkZfUkFXKDMsIDIsIG1heDEzNjNfcmVhZF9zaW5nbGVfY2hhbm5lbCwgZDNtMik7Ci1zdGF0aWMgSUlPX0RFVl9BVFRSX0lOX0RJRkZfUkFXKDUsIDQsIG1heDEzNjNfcmVhZF9zaW5nbGVfY2hhbm5lbCwgZDVtNCk7Ci1zdGF0aWMgSUlPX0RFVl9BVFRSX0lOX0RJRkZfUkFXKDcsIDYsIG1heDEzNjNfcmVhZF9zaW5nbGVfY2hhbm5lbCwgZDdtNik7Ci1zdGF0aWMgSUlPX0RFVl9BVFRSX0lOX0RJRkZfUkFXKDksIDgsIG1heDEzNjNfcmVhZF9zaW5nbGVfY2hhbm5lbCwgZDltOCk7Ci1zdGF0aWMgSUlPX0RFVl9BVFRSX0lOX0RJRkZfUkFXKDExLCAxMCwgbWF4MTM2M19yZWFkX3NpbmdsZV9jaGFubmVsLCBkMTFtMTApOwotCi0KLXN0YXRpYyBzc2l6ZV90IG1heDEzNjNfc2hvd19zY2FsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJY2hhciAqYnVmKQorc3RhdGljIGludCBtYXgxMzYzX3JlYWRfcmF3KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCisJCQkgICAgc3RydWN0IGlpb19jaGFuX3NwZWMgY29uc3QgKmNoYW4sCisJCQkgICAgaW50ICp2YWwsCisJCQkgICAgaW50ICp2YWwyLAorCQkJICAgIGxvbmcgbSkKIHsKLQkvKiBEcml2ZXIgY3VycmVudGx5IG9ubHkgc3VwcG9ydCBpbnRlcm5hbCB2cmVmICovCi0Jc3RydWN0IGlpb19kZXYgKmRldl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IG1heDEzNjNfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShkZXZfaW5mbyk7Ci0JLyogQ29ycmVzcG9uZHMgdG8gVnJlZiAvIDJeKGJpdHMpICovCi0KLQlpZiAoKDEgPDwgKHN0LT5jaGlwX2luZm8tPmJpdHMgKyAxKSkKLQkgICAgPiBzdC0+Y2hpcF9pbmZvLT5pbnRfdnJlZl9tdikKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiMC41XG4iKTsKLQllbHNlCi0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLAotCQkJc3QtPmNoaXBfaW5mby0+aW50X3ZyZWZfbXYgPj4gc3QtPmNoaXBfaW5mby0+Yml0cyk7CisJc3RydWN0IG1heDEzNjNfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKKwlpbnQgcmV0OworCXN3aXRjaCAobSkgeworCWNhc2UgMDoKKwkJcmV0ID0gbWF4MTM2M19yZWFkX3NpbmdsZV9jaGFuKGluZGlvX2RldiwgY2hhbiwgdmFsLCBtKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCXJldHVybiBJSU9fVkFMX0lOVDsKKwljYXNlICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKToKKwkJaWYgKCgxIDw8IChzdC0+Y2hpcF9pbmZvLT5iaXRzICsgMSkpID4KKwkJICAgIHN0LT5jaGlwX2luZm8tPmludF92cmVmX212KSB7CisJCQkqdmFsID0gMDsKKwkJCSp2YWwyID0gNTAwMDAwOworCQkJcmV0dXJuIElJT19WQUxfSU5UX1BMVVNfTUlDUk87CisJCX0gZWxzZSB7CisJCQkqdmFsID0gKHN0LT5jaGlwX2luZm8tPmludF92cmVmX212KQorCQkJCT4+IHN0LT5jaGlwX2luZm8tPmJpdHM7CisJCQlyZXR1cm4gSUlPX1ZBTF9JTlQ7CisJCX0KKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW5fc2NhbGUsIFNfSVJVR08sIG1heDEzNjNfc2hvd19zY2FsZSwgTlVMTCwgMCk7Ci0KLXN0YXRpYyBzc2l6ZV90IG1heDEzNjNfc2hvd19uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgbWF4MTM2M19zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGRldl9pbmZvKTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgc3QtPmNsaWVudC0+bmFtZSk7Ci19Ci0KLXN0YXRpYyBJSU9fREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgbWF4MTM2M19zaG93X25hbWUsIE5VTEwsIDApOwotCiAvKiBBcHBsaWVzIHRvIG1heDEzNjMgKi8KIHN0YXRpYyBjb25zdCBlbnVtIG1heDEzNjNfbW9kZXMgbWF4MTM2M19tb2RlX2xpc3RbXSA9IHsKIAlfczAsIF9zMSwgX3MyLCBfczMsCkBAIC0zNjcsNDggKzI4Myw3NiBAQAogCWQwbTF0bzJtMywgZDFtMHRvM20yLAogfTsKIAotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm1heDEzNjNfZGV2aWNlX2F0dHJzW10gPSB7Ci0JJmlpb19kZXZfYXR0cl9pbjBfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjFfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjJfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjNfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjBtaW4xX3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW4ybWluM19yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luMW1pbjBfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjNtaW4yX3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfbmFtZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW5fc2NhbGUuZGV2X2F0dHIuYXR0ciwKLQlOVUxMCisjZGVmaW5lIE1BWDEzNjNfRVZfTQkJCQkJCVwKKwkoSUlPX0VWX0JJVChJSU9fRVZfVFlQRV9USFJFU0gsIElJT19FVl9ESVJfUklTSU5HKQlcCisJIHwgSUlPX0VWX0JJVChJSU9fRVZfVFlQRV9USFJFU0gsIElJT19FVl9ESVJfRkFMTElORykpCisjZGVmaW5lIE1BWDEzNjNfSU5GT19NQVNLICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKQorCitzdGF0aWMgc3RydWN0IGlpb19jaGFuX3NwZWMgbWF4MTM2M19jaGFubmVsc1tdID0geworCUlJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgTlVMTCwgMCwgMCwgTUFYMTM2M19JTkZPX01BU0ssCisJCSBfczAsIDAsIElJT19TVCgndScsIDEyLCAxNiwgMCksIE1BWDEzNjNfRVZfTSksCisJSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCAxLCAwLCBNQVgxMzYzX0lORk9fTUFTSywKKwkJIF9zMSwgMSwgSUlPX1NUKCd1JywgMTIsIDE2LCAwKSwgTUFYMTM2M19FVl9NKSwKKwlJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsIE5VTEwsIDIsIDAsIE1BWDEzNjNfSU5GT19NQVNLLAorCQkgX3MyLCAyLCBJSU9fU1QoJ3UnLCAxMiwgMTYsIDApLCBNQVgxMzYzX0VWX00pLAorCUlJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgTlVMTCwgMywgMCwgTUFYMTM2M19JTkZPX01BU0ssCisJCSBfczMsIDMsIElJT19TVCgndScsIDEyLCAxNiwgMCksIE1BWDEzNjNfRVZfTSksCisJSUlPX0NIQU4oSUlPX0lOX0RJRkYsIDAsIDEsIDAsIE5VTEwsIDAsIDEsIE1BWDEzNjNfSU5GT19NQVNLLAorCQkgZDBtMSwgNCwgSUlPX1NUKCdzJywgMTIsIDE2LCAwKSwgTUFYMTM2M19FVl9NKSwKKwlJSU9fQ0hBTihJSU9fSU5fRElGRiwgMCwgMSwgMCwgTlVMTCwgMiwgMywgTUFYMTM2M19JTkZPX01BU0ssCisJCSBkMm0zLCA1LCBJSU9fU1QoJ3MnLCAxMiwgMTYsIDApLCBNQVgxMzYzX0VWX00pLAorCUlJT19DSEFOKElJT19JTl9ESUZGLCAwLCAxLCAwLCBOVUxMLCAxLCAwLCBNQVgxMzYzX0lORk9fTUFTSywKKwkJIGQxbTAsIDYsIElJT19TVCgncycsIDEyLCAxNiwgMCksIE1BWDEzNjNfRVZfTSksCisJSUlPX0NIQU4oSUlPX0lOX0RJRkYsIDAsIDEsIDAsIE5VTEwsIDMsIDIsIE1BWDEzNjNfSU5GT19NQVNLLAorCQkgZDNtMiwgNywgSUlPX1NUKCdzJywgMTIsIDE2LCAwKSwgTUFYMTM2M19FVl9NKSwKKwlJSU9fQ0hBTl9TT0ZUX1RJTUVTVEFNUCg4KQogfTsKIAotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWF4MTM2M19kZXZfYXR0cl9ncm91cCA9IHsKLQkuYXR0cnMgPSBtYXgxMzYzX2RldmljZV9hdHRycywKK3N0YXRpYyBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBtYXgxMzYxX2NoYW5uZWxzW10gPSB7CisJSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCAwLCAwLCBNQVgxMzYzX0lORk9fTUFTSywKKwkJIF9zMCwgMCwgSUlPX1NUKCd1JywgMTAsIDE2LCAwKSwgTUFYMTM2M19FVl9NKSwKKwlJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsIE5VTEwsIDEsIDAsIE1BWDEzNjNfSU5GT19NQVNLLAorCQkgX3MxLCAxLCBJSU9fU1QoJ3UnLCAxMCwgMTYsIDApLCBNQVgxMzYzX0VWX00pLAorCUlJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgTlVMTCwgMiwgMCwgTUFYMTM2M19JTkZPX01BU0ssCisJCSBfczIsIDIsIElJT19TVCgndScsIDEwLCAxNiwgMCksIE1BWDEzNjNfRVZfTSksCisJSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCAzLCAwLCBNQVgxMzYzX0lORk9fTUFTSywKKwkJIF9zMywgMywgSUlPX1NUKCd1JywgMTAsIDE2LCAwKSwgTUFYMTM2M19FVl9NKSwKKwlJSU9fQ0hBTihJSU9fSU5fRElGRiwgMCwgMSwgMCwgTlVMTCwgMCwgMSwgTUFYMTM2M19JTkZPX01BU0ssCisJCSBkMG0xLCA0LCBJSU9fU1QoJ3MnLCAxMCwgMTYsIDApLCBNQVgxMzYzX0VWX00pLAorCUlJT19DSEFOKElJT19JTl9ESUZGLCAwLCAxLCAwLCBOVUxMLCAyLCAzLCBNQVgxMzYzX0lORk9fTUFTSywKKwkJIGQybTMsIDUsIElJT19TVCgncycsIDEwLCAxNiwgMCksIE1BWDEzNjNfRVZfTSksCisJSUlPX0NIQU4oSUlPX0lOX0RJRkYsIDAsIDEsIDAsIE5VTEwsIDEsIDAsIE1BWDEzNjNfSU5GT19NQVNLLAorCQkgZDFtMCwgNiwgSUlPX1NUKCdzJywgMTAsIDE2LCAwKSwgTUFYMTM2M19FVl9NKSwKKwlJSU9fQ0hBTihJSU9fSU5fRElGRiwgMCwgMSwgMCwgTlVMTCwgMywgMiwgTUFYMTM2M19JTkZPX01BU0ssCisJCSBkM20yLCA3LCBJSU9fU1QoJ3MnLCAxMCwgMTYsIDApLCBNQVgxMzYzX0VWX00pLAorCUlJT19DSEFOX1NPRlRfVElNRVNUQU1QKDgpCiB9OwogCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbWF4MTM2M19zY2FuX2VsX2F0dHJzW10gPSB7Ci0JJmlpb19zY2FuX2VsX2luMC5kZXZfYXR0ci5hdHRyLAkmZGV2X2F0dHJfaW4wX3R5cGUuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4wX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luMS5kZXZfYXR0ci5hdHRyLAkmZGV2X2F0dHJfaW4xX3R5cGUuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4xX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luMi5kZXZfYXR0ci5hdHRyLAkmZGV2X2F0dHJfaW4yX3R5cGUuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4yX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luMy5kZXZfYXR0ci5hdHRyLAkmZGV2X2F0dHJfaW4zX3R5cGUuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4zX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luMG1pbjEuZGV2X2F0dHIuYXR0ciwJJmRldl9hdHRyX2luMG1pbjFfdHlwZS5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjBtaW4xX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luMm1pbjMuZGV2X2F0dHIuYXR0ciwJJmRldl9hdHRyX2luMm1pbjNfdHlwZS5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjJtaW4zX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luMW1pbjAuZGV2X2F0dHIuYXR0ciwJJmRldl9hdHRyX2luMW1pbjBfdHlwZS5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjFtaW4wX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luM21pbjIuZGV2X2F0dHIuYXR0ciwJJmRldl9hdHRyX2luM21pbjJfdHlwZS5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjNtaW4yX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JTlVMTCwKLX07CisjZGVmaW5lIE1BWDEzNjNfQ0hBTl9VKG51bSwgYWRkcmVzcywgc2Nhbl9pbmRleCwgYml0cykJCVwKKwlJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsIE5VTEwsIG51bSwgMCwgTUFYMTM2M19JTkZPX01BU0ssCVwKKwkJIGFkZHJlc3MsIHNjYW5faW5kZXgsIElJT19TVCgndScsIGJpdHMsCQlcCisJCQkJCSAgICAgKGJpdHMgPT0gOCkgPyA4IDogMTYsIDApLCAwKQorLyogYmlwb2xhciBjaGFubmVsICovCisjZGVmaW5lIE1BWDEzNjNfQ0hBTl9CKG51bSwgbnVtMiwgYWRkcmVzcywgc2Nhbl9pbmRleCwgYml0cykJCVwKKwlJSU9fQ0hBTihJSU9fSU5fRElGRiwgMCwgMSwgMCwgTlVMTCwgbnVtLCBudW0yLCBNQVgxMzYzX0lORk9fTUFTSyxcCisJCSBhZGRyZXNzLCBzY2FuX2luZGV4LCBJSU9fU1QoJ3MnLCBiaXRzLAkJXAorCQkJCQkgICAgIChiaXRzID09IDgpID8gOCA6IDE2LCAwKSwgMCkKIAotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWF4MTM2M19zY2FuX2VsX2dyb3VwID0gewotCS5uYW1lID0gInNjYW5fZWxlbWVudHMiLAotCS5hdHRycyA9IG1heDEzNjNfc2Nhbl9lbF9hdHRycywKLX07CisjZGVmaW5lIE1BWDEzNjNfNFhfQ0hBTlMoYml0cykgewkJXAorCU1BWDEzNjNfQ0hBTl9VKDAsIF9zMCwgMCwgYml0cyksCVwKKwlNQVgxMzYzX0NIQU5fVSgxLCBfczEsIDEsIGJpdHMpLAlcCisJTUFYMTM2M19DSEFOX1UoMiwgX3MyLCAyLCBiaXRzKSwJXAorCU1BWDEzNjNfQ0hBTl9VKDMsIF9zMywgMywgYml0cyksCVwKKwlNQVgxMzYzX0NIQU5fQigwLCAxLCBkMG0xLCA0LCBiaXRzKSwJXAorCU1BWDEzNjNfQ0hBTl9CKDIsIDMsIGQybTMsIDUsIGJpdHMpLAlcCisJTUFYMTM2M19DSEFOX0IoMSwgMCwgZDFtMCwgNiwgYml0cyksCVwKKwlNQVgxMzYzX0NIQU5fQigzLCAyLCBkM20yLCA3LCBiaXRzKSwJXAorCUlJT19DSEFOX1NPRlRfVElNRVNUQU1QKDgpCQlcCisJfQorCitzdGF0aWMgc3RydWN0IGlpb19jaGFuX3NwZWMgbWF4MTAzNl9jaGFubmVsc1tdID0gTUFYMTM2M180WF9DSEFOUyg4KTsKK3N0YXRpYyBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBtYXgxMTM2X2NoYW5uZWxzW10gPSBNQVgxMzYzXzRYX0NIQU5TKDEwKTsKK3N0YXRpYyBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBtYXgxMjM2X2NoYW5uZWxzW10gPSBNQVgxMzYzXzRYX0NIQU5TKDEyKTsKIAogLyogQXBwaWVzIHRvIG1heDEyMzYsIG1heDEyMzcgKi8KIHN0YXRpYyBjb25zdCBlbnVtIG1heDEzNjNfbW9kZXMgbWF4MTIzNl9tb2RlX2xpc3RbXSA9IHsKQEAgLTQzMiw5NyArMzc2LDM2IEBACiAJZDZtN3RvOG05LCBkNm03dG8xMG0xMSwgZDdtNnRvOW04LCBkN202dG8xMW0xMCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICptYXgxMjM4X2RldmljZV9hdHRyc1tdID0gewotCSZpaW9fZGV2X2F0dHJfaW4wX3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW4xX3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW4yX3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW4zX3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW40X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW41X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW42X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW43X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW44X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW45X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW4xMF9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luMTFfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjBtaW4xX3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW4ybWluM19yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luNG1pbjVfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjZtaW43X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW44bWluOV9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luMTBtaW4xMV9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luMW1pbjBfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjNtaW4yX3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW41bWluNF9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luN21pbjZfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjltaW44X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW4xMW1pbjEwX3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfbmFtZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW5fc2NhbGUuZGV2X2F0dHIuYXR0ciwKLQlOVUxMCi19OwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBtYXgxMjM4X2Rldl9hdHRyX2dyb3VwID0gewotCS5hdHRycyA9IG1heDEyMzhfZGV2aWNlX2F0dHJzLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm1heDEyMzhfc2Nhbl9lbF9hdHRyc1tdID0gewotCSZpaW9fc2Nhbl9lbF9pbjAuZGV2X2F0dHIuYXR0ciwJJmRldl9hdHRyX2luMF90eXBlLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luMF9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjEuZGV2X2F0dHIuYXR0ciwJJmRldl9hdHRyX2luMV90eXBlLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luMV9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjIuZGV2X2F0dHIuYXR0ciwJJmRldl9hdHRyX2luMl90eXBlLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luMl9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjMuZGV2X2F0dHIuYXR0ciwJJmRldl9hdHRyX2luM190eXBlLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luM19pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjQuZGV2X2F0dHIuYXR0ciwJJmRldl9hdHRyX2luNF90eXBlLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luNF9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjUuZGV2X2F0dHIuYXR0ciwJJmRldl9hdHRyX2luNV90eXBlLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luNV9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjYuZGV2X2F0dHIuYXR0ciwJJmRldl9hdHRyX2luNl90eXBlLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luNl9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjcuZGV2X2F0dHIuYXR0ciwJJmRldl9hdHRyX2luN190eXBlLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luN19pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjguZGV2X2F0dHIuYXR0ciwJJmRldl9hdHRyX2luOF90eXBlLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luOF9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjkuZGV2X2F0dHIuYXR0ciwJJmRldl9hdHRyX2luOV90eXBlLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luOV9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjEwLmRldl9hdHRyLmF0dHIsCSZkZXZfYXR0cl9pbjEwX3R5cGUuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4xMF9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjExLmRldl9hdHRyLmF0dHIsCSZkZXZfYXR0cl9pbjExX3R5cGUuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4xMV9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjBtaW4xLmRldl9hdHRyLmF0dHIsCSZkZXZfYXR0cl9pbjBtaW4xX3R5cGUuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4wbWluMV9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjJtaW4zLmRldl9hdHRyLmF0dHIsCSZkZXZfYXR0cl9pbjJtaW4zX3R5cGUuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4ybWluM19pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjRtaW41LmRldl9hdHRyLmF0dHIsCSZkZXZfYXR0cl9pbjRtaW41X3R5cGUuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW40bWluNV9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjZtaW43LmRldl9hdHRyLmF0dHIsCSZkZXZfYXR0cl9pbjZtaW43X3R5cGUuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW42bWluN19pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjhtaW45LmRldl9hdHRyLmF0dHIsCSZkZXZfYXR0cl9pbjhtaW45X3R5cGUuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW44bWluOV9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjEwbWluMTEuZGV2X2F0dHIuYXR0ciwJJmRldl9hdHRyX2luMTBtaW4xMV90eXBlLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luMTBtaW4xMV9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjFtaW4wLmRldl9hdHRyLmF0dHIsCSZkZXZfYXR0cl9pbjFtaW4wX3R5cGUuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4xbWluMF9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjNtaW4yLmRldl9hdHRyLmF0dHIsCSZkZXZfYXR0cl9pbjNtaW4yX3R5cGUuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4zbWluMl9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjVtaW40LmRldl9hdHRyLmF0dHIsCSZkZXZfYXR0cl9pbjVtaW40X3R5cGUuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW41bWluNF9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjdtaW42LmRldl9hdHRyLmF0dHIsCSZkZXZfYXR0cl9pbjdtaW42X3R5cGUuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW43bWluNl9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjltaW44LmRldl9hdHRyLmF0dHIsCSZkZXZfYXR0cl9pbjltaW44X3R5cGUuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW45bWluOF9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbjExbWluMTAuZGV2X2F0dHIuYXR0ciwJJmRldl9hdHRyX2luMTFtaW4xMF90eXBlLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luMTFtaW4xMF9pbmRleC5kZXZfYXR0ci5hdHRyLAotCU5VTEwsCi19OwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBtYXgxMjM4X3NjYW5fZWxfZ3JvdXAgPSB7Ci0JLm5hbWUgPSAic2Nhbl9lbGVtZW50cyIsCi0JLmF0dHJzID0gbWF4MTIzOF9zY2FuX2VsX2F0dHJzLAotfTsKLQorI2RlZmluZSBNQVgxMzYzXzEyWF9DSEFOUyhiaXRzKSB7CQkJXAorCU1BWDEzNjNfQ0hBTl9VKDAsIF9zMCwgMCwgYml0cyksCQlcCisJTUFYMTM2M19DSEFOX1UoMSwgX3MxLCAxLCBiaXRzKSwJCVwKKwlNQVgxMzYzX0NIQU5fVSgyLCBfczIsIDIsIGJpdHMpLAkJXAorCU1BWDEzNjNfQ0hBTl9VKDMsIF9zMywgMywgYml0cyksCQlcCisJTUFYMTM2M19DSEFOX1UoNCwgX3M0LCA0LCBiaXRzKSwJCVwKKwlNQVgxMzYzX0NIQU5fVSg1LCBfczUsIDUsIGJpdHMpLAkJXAorCU1BWDEzNjNfQ0hBTl9VKDYsIF9zNiwgNiwgYml0cyksCQlcCisJTUFYMTM2M19DSEFOX1UoNywgX3M3LCA3LCBiaXRzKSwJCVwKKwlNQVgxMzYzX0NIQU5fVSg4LCBfczgsIDgsIGJpdHMpLAkJXAorCU1BWDEzNjNfQ0hBTl9VKDksIF9zOSwgOSwgYml0cyksCQlcCisJTUFYMTM2M19DSEFOX1UoMTAsIF9zMTAsIDEwLCBiaXRzKSwJCVwKKwlNQVgxMzYzX0NIQU5fVSgxMSwgX3MxMSwgMTEsIGJpdHMpLAkJXAorCU1BWDEzNjNfQ0hBTl9CKDAsIDEsIGQwbTEsIDEyLCBiaXRzKSwJCVwKKwlNQVgxMzYzX0NIQU5fQigyLCAzLCBkMm0zLCAxMywgYml0cyksCQlcCisJTUFYMTM2M19DSEFOX0IoNCwgNSwgZDRtNSwgMTQsIGJpdHMpLAkJXAorCU1BWDEzNjNfQ0hBTl9CKDYsIDcsIGQ2bTcsIDE1LCBiaXRzKSwJCVwKKwlNQVgxMzYzX0NIQU5fQig4LCA5LCBkOG05LCAxNiwgYml0cyksCQlcCisJTUFYMTM2M19DSEFOX0IoMTAsIDExLCBkMTBtMTEsIDE3LCBiaXRzKSwJXAorCU1BWDEzNjNfQ0hBTl9CKDEsIDAsIGQxbTAsIDE4LCBiaXRzKSwJCVwKKwlNQVgxMzYzX0NIQU5fQigzLCAyLCBkM20yLCAxOSwgYml0cyksCQlcCisJTUFYMTM2M19DSEFOX0IoNSwgNCwgZDVtNCwgMjAsIGJpdHMpLAkJXAorCU1BWDEzNjNfQ0hBTl9CKDcsIDYsIGQ3bTYsIDIxLCBiaXRzKSwJCVwKKwlNQVgxMzYzX0NIQU5fQig5LCA4LCBkOW04LCAyMiwgYml0cyksCQlcCisJTUFYMTM2M19DSEFOX0IoMTEsIDEwLCBkMTFtMTAsIDIzLCBiaXRzKSwJXAorCUlJT19DSEFOX1NPRlRfVElNRVNUQU1QKDI0KQkJCVwKKwl9CitzdGF0aWMgc3RydWN0IGlpb19jaGFuX3NwZWMgbWF4MTAzOF9jaGFubmVsc1tdID0gTUFYMTM2M18xMlhfQ0hBTlMoOCk7CitzdGF0aWMgc3RydWN0IGlpb19jaGFuX3NwZWMgbWF4MTEzOF9jaGFubmVsc1tdID0gTUFYMTM2M18xMlhfQ0hBTlMoMTApOworc3RhdGljIHN0cnVjdCBpaW9fY2hhbl9zcGVjIG1heDEyMzhfY2hhbm5lbHNbXSA9IE1BWDEzNjNfMTJYX0NIQU5TKDEyKTsKIAogc3RhdGljIGNvbnN0IGVudW0gbWF4MTM2M19tb2RlcyBtYXgxMTYwN19tb2RlX2xpc3RbXSA9IHsKIAlfczAsIF9zMSwgX3MyLCBfczMsCkBAIC01NDIsNzIgKzQyNSw0MyBAQAogCWQxbTB0bzNtMiwgZDFtMHRvNW00LCBkMW0wdG83bTYsCiB9OwogCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbWF4MTE2MDhfZGV2aWNlX2F0dHJzW10gPSB7Ci0JJmlpb19kZXZfYXR0cl9pbjBfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjFfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjJfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjNfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjRfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjVfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjZfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjdfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjBtaW4xX3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW4ybWluM19yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luNG1pbjVfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjZtaW43X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW4xbWluMF9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luM21pbjJfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjVtaW40X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW43bWluNl9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX25hbWUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luX3NjYWxlLmRldl9hdHRyLmF0dHIsCi0JTlVMTAorI2RlZmluZSBNQVgxMzYzXzhYX0NIQU5TKGJpdHMpIHsJCQkJXAorCQlNQVgxMzYzX0NIQU5fVSgwLCBfczAsIDAsIGJpdHMpLAkJXAorCQkJTUFYMTM2M19DSEFOX1UoMSwgX3MxLCAxLCBiaXRzKSwJXAorCQkJTUFYMTM2M19DSEFOX1UoMiwgX3MyLCAyLCBiaXRzKSwJXAorCQkJTUFYMTM2M19DSEFOX1UoMywgX3MzLCAzLCBiaXRzKSwJXAorCQkJTUFYMTM2M19DSEFOX1UoNCwgX3M0LCA0LCBiaXRzKSwJXAorCQkJTUFYMTM2M19DSEFOX1UoNSwgX3M1LCA1LCBiaXRzKSwJXAorCQkJTUFYMTM2M19DSEFOX1UoNiwgX3M2LCA2LCBiaXRzKSwJXAorCQkJTUFYMTM2M19DSEFOX1UoNywgX3M3LCA3LCBiaXRzKSwJXAorCQkJTUFYMTM2M19DSEFOX0IoMCwgMSwgZDBtMSwgOCwgYml0cyksCVwKKwkJCU1BWDEzNjNfQ0hBTl9CKDIsIDMsIGQybTMsIDksIGJpdHMpLAlcCisJCQlNQVgxMzYzX0NIQU5fQig0LCA1LCBkNG01LCAxMCwgYml0cyksCVwKKwkJCU1BWDEzNjNfQ0hBTl9CKDYsIDcsIGQ2bTcsIDExLCBiaXRzKSwJXAorCQkJTUFYMTM2M19DSEFOX0IoMSwgMCwgZDFtMCwgMTIsIGJpdHMpLAlcCisJCQlNQVgxMzYzX0NIQU5fQigzLCAyLCBkM20yLCAxMywgYml0cyksCVwKKwkJCU1BWDEzNjNfQ0hBTl9CKDUsIDQsIGQ1bTQsIDE0LCBiaXRzKSwJXAorCQkJTUFYMTM2M19DSEFOX0IoNywgNiwgZDdtNiwgMTUsIGJpdHMpLAlcCisJCQlJSU9fQ0hBTl9TT0ZUX1RJTUVTVEFNUCgxNikJCVwKKwkJfQorc3RhdGljIHN0cnVjdCBpaW9fY2hhbl9zcGVjIG1heDExNjAyX2NoYW5uZWxzW10gPSBNQVgxMzYzXzhYX0NIQU5TKDgpOworc3RhdGljIHN0cnVjdCBpaW9fY2hhbl9zcGVjIG1heDExNjA4X2NoYW5uZWxzW10gPSBNQVgxMzYzXzhYX0NIQU5TKDEwKTsKK3N0YXRpYyBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBtYXgxMTYxNF9jaGFubmVsc1tdID0gTUFYMTM2M184WF9DSEFOUygxMik7CisKK3N0YXRpYyBjb25zdCBlbnVtIG1heDEzNjNfbW9kZXMgbWF4MTE2NDRfbW9kZV9saXN0W10gPSB7CisJX3MwLCBfczEsIHMwdG8xLCBkMG0xLCBkMW0wLAogfTsKIAotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWF4MTE2MDhfZGV2X2F0dHJfZ3JvdXAgPSB7Ci0JLmF0dHJzID0gbWF4MTE2MDhfZGV2aWNlX2F0dHJzLAotfTsKKyNkZWZpbmUgTUFYMTM2M18yWF9DSEFOUyhiaXRzKSB7CQkJXAorCU1BWDEzNjNfQ0hBTl9VKDAsIF9zMCwgMCwgYml0cyksCQlcCisJTUFYMTM2M19DSEFOX1UoMSwgX3MxLCAxLCBiaXRzKSwJCVwKKwlNQVgxMzYzX0NIQU5fQigwLCAxLCBkMG0xLCAyLCBiaXRzKSwJCVwKKwlNQVgxMzYzX0NIQU5fQigxLCAwLCBkMW0wLCAzLCBiaXRzKSwJCVwKKwlJSU9fQ0hBTl9TT0ZUX1RJTUVTVEFNUCg0KQkJCVwKKwl9CiAKLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICptYXgxMTYwOF9zY2FuX2VsX2F0dHJzW10gPSB7Ci0JJmlpb19zY2FuX2VsX2luMC5kZXZfYXR0ci5hdHRyLAkmZGV2X2F0dHJfaW4wX3R5cGUuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4wX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luMS5kZXZfYXR0ci5hdHRyLAkmZGV2X2F0dHJfaW4xX3R5cGUuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4xX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luMi5kZXZfYXR0ci5hdHRyLAkmZGV2X2F0dHJfaW4yX3R5cGUuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4yX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luMy5kZXZfYXR0ci5hdHRyLAkmZGV2X2F0dHJfaW4zX3R5cGUuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4zX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luNC5kZXZfYXR0ci5hdHRyLAkmZGV2X2F0dHJfaW40X3R5cGUuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW40X2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luNS5kZXZfYXR0ci5hdHRyLAkmZGV2X2F0dHJfaW41X3R5cGUuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW41X2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luNi5kZXZfYXR0ci5hdHRyLAkmZGV2X2F0dHJfaW42X3R5cGUuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW42X2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luNy5kZXZfYXR0ci5hdHRyLAkmZGV2X2F0dHJfaW43X3R5cGUuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW43X2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luMG1pbjEuZGV2X2F0dHIuYXR0ciwJJmRldl9hdHRyX2luMG1pbjFfdHlwZS5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjBtaW4xX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luMm1pbjMuZGV2X2F0dHIuYXR0ciwJJmRldl9hdHRyX2luMm1pbjNfdHlwZS5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjJtaW4zX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luNG1pbjUuZGV2X2F0dHIuYXR0ciwJJmRldl9hdHRyX2luNG1pbjVfdHlwZS5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjRtaW41X2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luNm1pbjcuZGV2X2F0dHIuYXR0ciwJJmRldl9hdHRyX2luNm1pbjdfdHlwZS5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjZtaW43X2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luMW1pbjAuZGV2X2F0dHIuYXR0ciwJJmRldl9hdHRyX2luMW1pbjBfdHlwZS5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjFtaW4wX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luM21pbjIuZGV2X2F0dHIuYXR0ciwJJmRldl9hdHRyX2luM21pbjJfdHlwZS5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjNtaW4yX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luNW1pbjQuZGV2X2F0dHIuYXR0ciwJJmRldl9hdHRyX2luNW1pbjRfdHlwZS5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjVtaW40X2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luN21pbjYuZGV2X2F0dHIuYXR0ciwJJmRldl9hdHRyX2luN21pbjZfdHlwZS5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjdtaW42X2luZGV4LmRldl9hdHRyLmF0dHIsCi0JTlVMTAotfTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWF4MTE2MDhfc2Nhbl9lbF9ncm91cCA9IHsKLQkubmFtZSA9ICJzY2FuX2VsZW1lbnRzIiwKLQkuYXR0cnMgPSBtYXgxMTYwOF9zY2FuX2VsX2F0dHJzLAotfTsKK3N0YXRpYyBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBtYXgxMTY0Nl9jaGFubmVsc1tdID0gTUFYMTM2M18yWF9DSEFOUygxMCk7CitzdGF0aWMgc3RydWN0IGlpb19jaGFuX3NwZWMgbWF4MTE2NDRfY2hhbm5lbHNbXSA9IE1BWDEzNjNfMlhfQ0hBTlMoMTIpOwogCiBlbnVtIHsgbWF4MTM2MSwKICAgICAgICBtYXgxMzYyLApAQCAtNjQzLDM1NCArNDk3LDEwIEBACiAgICAgICAgbWF4MTE2MTUsCiAgICAgICAgbWF4MTE2MTYsCiAgICAgICAgbWF4MTE2MTcsCi19OwotCi0vKiBtYXgxMzYzIGFuZCBtYXgxMzY4IHRlc3RlZCAtIHJlc3QgZnJvbSBkYXRhIHNoZWV0ICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IG1heDEzNjNfY2hpcF9pbmZvIG1heDEzNjNfY2hpcF9pbmZvX3RibFtdID0gewotCVttYXgxMzYxXSA9IHsKLQkJLm51bV9pbnB1dHMgPSA0LAotCQkuYml0cyA9IDEwLAotCQkuaW50X3ZyZWZfbXYgPSAyMDQ4LAotCQkubW9uaXRvcl9tb2RlID0gMSwKLQkJLm1vZGVfbGlzdCA9IG1heDEzNjNfbW9kZV9saXN0LAotCQkubnVtX21vZGVzID0gQVJSQVlfU0laRShtYXgxMzYzX21vZGVfbGlzdCksCi0JCS5kZWZhdWx0X21vZGUgPSBzMHRvMywKLQkJLmRldl9hdHRycyA9ICZtYXgxMzYzX2Rldl9hdHRyX2dyb3VwLAotCQkuc2Nhbl9hdHRycyA9ICZtYXgxMzYzX3NjYW5fZWxfZ3JvdXAsCi0JfSwKLQlbbWF4MTM2Ml0gPSB7Ci0JCS5udW1faW5wdXRzID0gNCwKLQkJLmJpdHMgPSAxMCwKLQkJLmludF92cmVmX212ID0gNDA5NiwKLQkJLm1vbml0b3JfbW9kZSA9IDEsCi0JCS5tb2RlX2xpc3QgPSBtYXgxMzYzX21vZGVfbGlzdCwKLQkJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobWF4MTM2M19tb2RlX2xpc3QpLAotCQkuZGVmYXVsdF9tb2RlID0gczB0bzMsCi0JCS5kZXZfYXR0cnMgPSAmbWF4MTM2M19kZXZfYXR0cl9ncm91cCwKLQkJLnNjYW5fYXR0cnMgPSAmbWF4MTM2M19zY2FuX2VsX2dyb3VwLAotCX0sCi0JW21heDEzNjNdID0gewotCQkubnVtX2lucHV0cyA9IDQsCi0JCS5iaXRzID0gMTIsCi0JCS5pbnRfdnJlZl9tdiA9IDIwNDgsCi0JCS5tb25pdG9yX21vZGUgPSAxLAotCQkubW9kZV9saXN0ID0gbWF4MTM2M19tb2RlX2xpc3QsCi0JCS5udW1fbW9kZXMgPSBBUlJBWV9TSVpFKG1heDEzNjNfbW9kZV9saXN0KSwKLQkJLmRlZmF1bHRfbW9kZSA9IHMwdG8zLAotCQkuZGV2X2F0dHJzID0gJm1heDEzNjNfZGV2X2F0dHJfZ3JvdXAsCi0JCS5zY2FuX2F0dHJzID0gJm1heDEzNjNfc2Nhbl9lbF9ncm91cCwKLQl9LAotCVttYXgxMzY0XSA9IHsKLQkJLm51bV9pbnB1dHMgPSA0LAotCQkuYml0cyA9IDEyLAotCQkuaW50X3ZyZWZfbXYgPSA0MDk2LAotCQkubW9uaXRvcl9tb2RlID0gMSwKLQkJLm1vZGVfbGlzdCA9IG1heDEzNjNfbW9kZV9saXN0LAotCQkubnVtX21vZGVzID0gQVJSQVlfU0laRShtYXgxMzYzX21vZGVfbGlzdCksCi0JCS5kZWZhdWx0X21vZGUgPSBzMHRvMywKLQkJLmRldl9hdHRycyA9ICZtYXgxMzYzX2Rldl9hdHRyX2dyb3VwLAotCQkuc2Nhbl9hdHRycyA9ICZtYXgxMzYzX3NjYW5fZWxfZ3JvdXAsCi0JfSwKLQlbbWF4MTAzNl0gPSB7Ci0JCS5udW1faW5wdXRzID0gNCwKLQkJLmJpdHMgPSA4LAotCQkuaW50X3ZyZWZfbXYgPSA0MDk2LAotCQkubW9kZV9saXN0ID0gbWF4MTIzNl9tb2RlX2xpc3QsCi0JCS5udW1fbW9kZXMgPSBBUlJBWV9TSVpFKG1heDEyMzZfbW9kZV9saXN0KSwKLQkJLmRlZmF1bHRfbW9kZSA9IHMwdG8zLAotCQkuZGV2X2F0dHJzID0gJm1heDEzNjNfZGV2X2F0dHJfZ3JvdXAsCi0JCS5zY2FuX2F0dHJzID0gJm1heDEzNjNfc2Nhbl9lbF9ncm91cCwKLQl9LAotCVttYXgxMDM3XSA9IHsKLQkJLm51bV9pbnB1dHMgPSA0LAotCQkuYml0cyA9IDgsCi0JCS5pbnRfdnJlZl9tdiA9IDIwNDgsCi0JCS5tb2RlX2xpc3QgPSBtYXgxMjM2X21vZGVfbGlzdCwKLQkJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobWF4MTIzNl9tb2RlX2xpc3QpLAotCQkuZGVmYXVsdF9tb2RlID0gczB0bzMsCi0JCS5kZXZfYXR0cnMgPSAmbWF4MTM2M19kZXZfYXR0cl9ncm91cCwKLQkJLnNjYW5fYXR0cnMgPSAmbWF4MTM2M19zY2FuX2VsX2dyb3VwLAotCX0sCi0JW21heDEwMzhdID0gewotCQkubnVtX2lucHV0cyA9IDEyLAotCQkuYml0cyA9IDgsCi0JCS5pbnRfdnJlZl9tdiA9IDQwOTYsCi0JCS5tb2RlX2xpc3QgPSBtYXgxMjM4X21vZGVfbGlzdCwKLQkJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobWF4MTIzOF9tb2RlX2xpc3QpLAotCQkuZGVmYXVsdF9tb2RlID0gczB0bzExLAotCQkuZGV2X2F0dHJzID0gJm1heDEyMzhfZGV2X2F0dHJfZ3JvdXAsCi0JCS5zY2FuX2F0dHJzID0gJm1heDEyMzhfc2Nhbl9lbF9ncm91cCwKLQl9LAotCVttYXgxMDM5XSA9IHsKLQkJLm51bV9pbnB1dHMgPSAxMiwKLQkJLmJpdHMgPSA4LAotCQkuaW50X3ZyZWZfbXYgPSAyMDQ4LAotCQkubW9kZV9saXN0ID0gbWF4MTIzOF9tb2RlX2xpc3QsCi0JCS5udW1fbW9kZXMgPSBBUlJBWV9TSVpFKG1heDEyMzhfbW9kZV9saXN0KSwKLQkJLmRlZmF1bHRfbW9kZSA9IHMwdG8xMSwKLQkJLmRldl9hdHRycyA9ICZtYXgxMjM4X2Rldl9hdHRyX2dyb3VwLAotCQkuc2Nhbl9hdHRycyA9ICZtYXgxMjM4X3NjYW5fZWxfZ3JvdXAsCi0JfSwKLQlbbWF4MTEzNl0gPSB7Ci0JCS5udW1faW5wdXRzID0gNCwKLQkJLmJpdHMgPSAxMCwKLQkJLmludF92cmVmX212ID0gNDA5NiwKLQkJLm1vZGVfbGlzdCA9IG1heDEyMzZfbW9kZV9saXN0LAotCQkubnVtX21vZGVzID0gQVJSQVlfU0laRShtYXgxMjM2X21vZGVfbGlzdCksCi0JCS5kZWZhdWx0X21vZGUgPSBzMHRvMywKLQkJLmRldl9hdHRycyA9ICZtYXgxMzYzX2Rldl9hdHRyX2dyb3VwLAotCQkuc2Nhbl9hdHRycyA9ICZtYXgxMzYzX3NjYW5fZWxfZ3JvdXAsCi0JfSwKLQlbbWF4MTEzN10gPSB7Ci0JCS5udW1faW5wdXRzID0gNCwKLQkJLmJpdHMgPSAxMCwKLQkJLmludF92cmVmX212ID0gMjA0OCwKLQkJLm1vZGVfbGlzdCA9IG1heDEyMzZfbW9kZV9saXN0LAotCQkubnVtX21vZGVzID0gQVJSQVlfU0laRShtYXgxMjM2X21vZGVfbGlzdCksCi0JCS5kZWZhdWx0X21vZGUgPSBzMHRvMywKLQkJLmRldl9hdHRycyA9ICZtYXgxMzYzX2Rldl9hdHRyX2dyb3VwLAotCQkuc2Nhbl9hdHRycyA9ICZtYXgxMzYzX3NjYW5fZWxfZ3JvdXAsCi0JfSwKLQlbbWF4MTEzOF0gPSB7Ci0JCS5udW1faW5wdXRzID0gMTIsCi0JCS5iaXRzID0gMTAsCi0JCS5pbnRfdnJlZl9tdiA9IDQwOTYsCi0JCS5tb2RlX2xpc3QgPSBtYXgxMjM4X21vZGVfbGlzdCwKLQkJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobWF4MTIzOF9tb2RlX2xpc3QpLAotCQkuZGVmYXVsdF9tb2RlID0gczB0bzExLAotCQkuZGV2X2F0dHJzID0gJm1heDEyMzhfZGV2X2F0dHJfZ3JvdXAsCi0JCS5zY2FuX2F0dHJzID0gJm1heDEyMzhfc2Nhbl9lbF9ncm91cCwKLQl9LAotCVttYXgxMTM5XSA9IHsKLQkJLm51bV9pbnB1dHMgPSAxMiwKLQkJLmJpdHMgPSAxMCwKLQkJLmludF92cmVmX212ID0gMjA0OCwKLQkJLm1vZGVfbGlzdCA9IG1heDEyMzhfbW9kZV9saXN0LAotCQkubnVtX21vZGVzID0gQVJSQVlfU0laRShtYXgxMjM4X21vZGVfbGlzdCksCi0JCS5kZWZhdWx0X21vZGUgPSBzMHRvMTEsCi0JCS5kZXZfYXR0cnMgPSAmbWF4MTIzOF9kZXZfYXR0cl9ncm91cCwKLQkJLnNjYW5fYXR0cnMgPSAmbWF4MTIzOF9zY2FuX2VsX2dyb3VwLAotCX0sCi0JW21heDEyMzZdID0gewotCQkubnVtX2lucHV0cyA9IDQsCi0JCS5iaXRzID0gMTIsCi0JCS5pbnRfdnJlZl9tdiA9IDQwOTYsCi0JCS5tb2RlX2xpc3QgPSBtYXgxMjM2X21vZGVfbGlzdCwKLQkJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobWF4MTIzNl9tb2RlX2xpc3QpLAotCQkuZGVmYXVsdF9tb2RlID0gczB0bzMsCi0JCS5kZXZfYXR0cnMgPSAmbWF4MTM2M19kZXZfYXR0cl9ncm91cCwKLQkJLnNjYW5fYXR0cnMgPSAmbWF4MTM2M19zY2FuX2VsX2dyb3VwLAotCX0sCi0JW21heDEyMzddID0gewotCQkubnVtX2lucHV0cyA9IDQsCi0JCS5iaXRzID0gMTIsCi0JCS5pbnRfdnJlZl9tdiA9IDIwNDgsCi0JCS5tb2RlX2xpc3QgPSBtYXgxMjM2X21vZGVfbGlzdCwKLQkJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobWF4MTIzNl9tb2RlX2xpc3QpLAotCQkuZGVmYXVsdF9tb2RlID0gczB0bzMsCi0JCS5kZXZfYXR0cnMgPSAmbWF4MTM2M19kZXZfYXR0cl9ncm91cCwKLQkJLnNjYW5fYXR0cnMgPSAmbWF4MTM2M19zY2FuX2VsX2dyb3VwLAotCX0sCi0JW21heDEyMzhdID0gewotCQkubnVtX2lucHV0cyA9IDEyLAotCQkuYml0cyA9IDEyLAotCQkuaW50X3ZyZWZfbXYgPSA0MDk2LAotCQkubW9kZV9saXN0ID0gbWF4MTIzOF9tb2RlX2xpc3QsCi0JCS5udW1fbW9kZXMgPSBBUlJBWV9TSVpFKG1heDEyMzhfbW9kZV9saXN0KSwKLQkJLmRlZmF1bHRfbW9kZSA9IHMwdG8xMSwKLQkJLmRldl9hdHRycyA9ICZtYXgxMjM4X2Rldl9hdHRyX2dyb3VwLAotCQkuc2Nhbl9hdHRycyA9ICZtYXgxMjM4X3NjYW5fZWxfZ3JvdXAsCi0JfSwKLQlbbWF4MTIzOV0gPSB7Ci0JCS5udW1faW5wdXRzID0gMTIsCi0JCS5iaXRzID0gMTIsCi0JCS5pbnRfdnJlZl9tdiA9IDIwNDgsCi0JCS5tb2RlX2xpc3QgPSBtYXgxMjM4X21vZGVfbGlzdCwKLQkJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobWF4MTIzOF9tb2RlX2xpc3QpLAotCQkuZGVmYXVsdF9tb2RlID0gczB0bzExLAotCQkuZGV2X2F0dHJzID0gJm1heDEyMzhfZGV2X2F0dHJfZ3JvdXAsCi0JCS5zY2FuX2F0dHJzID0gJm1heDEyMzhfc2Nhbl9lbF9ncm91cCwKLQl9LAotCVttYXgxMTYwMF0gPSB7Ci0JCS5udW1faW5wdXRzID0gNCwKLQkJLmJpdHMgPSA4LAotCQkuaW50X3ZyZWZfbXYgPSA0MDk2LAotCQkubW9kZV9saXN0ID0gbWF4MTE2MDdfbW9kZV9saXN0LAotCQkubnVtX21vZGVzID0gQVJSQVlfU0laRShtYXgxMTYwN19tb2RlX2xpc3QpLAotCQkuZGVmYXVsdF9tb2RlID0gczB0bzMsCi0JCS5kZXZfYXR0cnMgPSAmbWF4MTM2M19kZXZfYXR0cl9ncm91cCwKLQkJLnNjYW5fYXR0cnMgPSAmbWF4MTM2M19zY2FuX2VsX2dyb3VwLAotCX0sCi0JW21heDExNjAxXSA9IHsKLQkJLm51bV9pbnB1dHMgPSA0LAotCQkuYml0cyA9IDgsCi0JCS5pbnRfdnJlZl9tdiA9IDIwNDgsCi0JCS5tb2RlX2xpc3QgPSBtYXgxMTYwN19tb2RlX2xpc3QsCi0JCS5udW1fbW9kZXMgPSBBUlJBWV9TSVpFKG1heDExNjA3X21vZGVfbGlzdCksCi0JCS5kZWZhdWx0X21vZGUgPSBzMHRvMywKLQkJLmRldl9hdHRycyA9ICZtYXgxMzYzX2Rldl9hdHRyX2dyb3VwLAotCQkuc2Nhbl9hdHRycyA9ICZtYXgxMzYzX3NjYW5fZWxfZ3JvdXAsCi0JfSwKLQlbbWF4MTE2MDJdID0gewotCQkubnVtX2lucHV0cyA9IDgsCi0JCS5iaXRzID0gOCwKLQkJLmludF92cmVmX212ID0gNDA5NiwKLQkJLm1vZGVfbGlzdCA9IG1heDExNjA4X21vZGVfbGlzdCwKLQkJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobWF4MTE2MDhfbW9kZV9saXN0KSwKLQkJLmRlZmF1bHRfbW9kZSA9IHMwdG83LAotCQkuZGV2X2F0dHJzID0gJm1heDExNjA4X2Rldl9hdHRyX2dyb3VwLAotCQkuc2Nhbl9hdHRycyA9ICZtYXgxMTYwOF9zY2FuX2VsX2dyb3VwLAotCX0sCi0JW21heDExNjAzXSA9IHsKLQkJLm51bV9pbnB1dHMgPSA4LAotCQkuYml0cyA9IDgsCi0JCS5pbnRfdnJlZl9tdiA9IDIwNDgsCi0JCS5tb2RlX2xpc3QgPSBtYXgxMTYwOF9tb2RlX2xpc3QsCi0JCS5udW1fbW9kZXMgPSBBUlJBWV9TSVpFKG1heDExNjA4X21vZGVfbGlzdCksCi0JCS5kZWZhdWx0X21vZGUgPSBzMHRvNywKLQkJLmRldl9hdHRycyA9ICZtYXgxMTYwOF9kZXZfYXR0cl9ncm91cCwKLQkJLnNjYW5fYXR0cnMgPSAmbWF4MTE2MDhfc2Nhbl9lbF9ncm91cCwKLQl9LAotCVttYXgxMTYwNF0gPSB7Ci0JCS5udW1faW5wdXRzID0gMTIsCi0JCS5iaXRzID0gOCwKLQkJLmludF92cmVmX212ID0gNDA5OCwKLQkJLm1vZGVfbGlzdCA9IG1heDEyMzhfbW9kZV9saXN0LAotCQkubnVtX21vZGVzID0gQVJSQVlfU0laRShtYXgxMjM4X21vZGVfbGlzdCksCi0JCS5kZWZhdWx0X21vZGUgPSBzMHRvMTEsCi0JCS5kZXZfYXR0cnMgPSAmbWF4MTIzOF9kZXZfYXR0cl9ncm91cCwKLQkJLnNjYW5fYXR0cnMgPSAmbWF4MTIzOF9zY2FuX2VsX2dyb3VwLAotCX0sCi0JW21heDExNjA1XSA9IHsKLQkJLm51bV9pbnB1dHMgPSAxMiwKLQkJLmJpdHMgPSA4LAotCQkuaW50X3ZyZWZfbXYgPSAyMDQ4LAotCQkubW9kZV9saXN0ID0gbWF4MTIzOF9tb2RlX2xpc3QsCi0JCS5udW1fbW9kZXMgPSBBUlJBWV9TSVpFKG1heDEyMzhfbW9kZV9saXN0KSwKLQkJLmRlZmF1bHRfbW9kZSA9IHMwdG8xMSwKLQkJLmRldl9hdHRycyA9ICZtYXgxMjM4X2Rldl9hdHRyX2dyb3VwLAotCQkuc2Nhbl9hdHRycyA9ICZtYXgxMjM4X3NjYW5fZWxfZ3JvdXAsCi0JfSwKLQlbbWF4MTE2MDZdID0gewotCQkubnVtX2lucHV0cyA9IDQsCi0JCS5iaXRzID0gMTAsCi0JCS5pbnRfdnJlZl9tdiA9IDQwOTYsCi0JCS5tb2RlX2xpc3QgPSBtYXgxMTYwN19tb2RlX2xpc3QsCi0JCS5udW1fbW9kZXMgPSBBUlJBWV9TSVpFKG1heDExNjA3X21vZGVfbGlzdCksCi0JCS5kZWZhdWx0X21vZGUgPSBzMHRvMywKLQkJLmRldl9hdHRycyA9ICZtYXgxMzYzX2Rldl9hdHRyX2dyb3VwLAotCQkuc2Nhbl9hdHRycyA9ICZtYXgxMzYzX3NjYW5fZWxfZ3JvdXAsCi0JfSwKLQlbbWF4MTE2MDddID0gewotCQkubnVtX2lucHV0cyA9IDQsCi0JCS5iaXRzID0gMTAsCi0JCS5pbnRfdnJlZl9tdiA9IDIwNDgsCi0JCS5tb2RlX2xpc3QgPSBtYXgxMTYwN19tb2RlX2xpc3QsCi0JCS5udW1fbW9kZXMgPSBBUlJBWV9TSVpFKG1heDExNjA3X21vZGVfbGlzdCksCi0JCS5kZWZhdWx0X21vZGUgPSBzMHRvMywKLQkJLmRldl9hdHRycyA9ICZtYXgxMzYzX2Rldl9hdHRyX2dyb3VwLAotCQkuc2Nhbl9hdHRycyA9ICZtYXgxMzYzX3NjYW5fZWxfZ3JvdXAsCi0JfSwKLQlbbWF4MTE2MDhdID0gewotCQkubnVtX2lucHV0cyA9IDgsCi0JCS5iaXRzID0gMTAsCi0JCS5pbnRfdnJlZl9tdiA9IDQwOTYsCi0JCS5tb2RlX2xpc3QgPSBtYXgxMTYwOF9tb2RlX2xpc3QsCi0JCS5udW1fbW9kZXMgPSBBUlJBWV9TSVpFKG1heDExNjA4X21vZGVfbGlzdCksCi0JCS5kZWZhdWx0X21vZGUgPSBzMHRvNywKLQkJLmRldl9hdHRycyA9ICZtYXgxMTYwOF9kZXZfYXR0cl9ncm91cCwKLQkJLnNjYW5fYXR0cnMgPSAmbWF4MTE2MDhfc2Nhbl9lbF9ncm91cCwKLQl9LAotCVttYXgxMTYwOV0gPSB7Ci0JCS5udW1faW5wdXRzID0gOCwKLQkJLmJpdHMgPSAxMCwKLQkJLmludF92cmVmX212ID0gMjA0OCwKLQkJLm1vZGVfbGlzdCA9IG1heDExNjA4X21vZGVfbGlzdCwKLQkJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobWF4MTE2MDhfbW9kZV9saXN0KSwKLQkJLmRlZmF1bHRfbW9kZSA9IHMwdG83LAotCQkuZGV2X2F0dHJzID0gJm1heDExNjA4X2Rldl9hdHRyX2dyb3VwLAotCQkuc2Nhbl9hdHRycyA9ICZtYXgxMTYwOF9zY2FuX2VsX2dyb3VwLAotCX0sCi0JW21heDExNjEwXSA9IHsKLQkJLm51bV9pbnB1dHMgPSAxMiwKLQkJLmJpdHMgPSAxMCwKLQkJLmludF92cmVmX212ID0gNDA5OCwKLQkJLm1vZGVfbGlzdCA9IG1heDEyMzhfbW9kZV9saXN0LAotCQkubnVtX21vZGVzID0gQVJSQVlfU0laRShtYXgxMjM4X21vZGVfbGlzdCksCi0JCS5kZWZhdWx0X21vZGUgPSBzMHRvMTEsCi0JCS5kZXZfYXR0cnMgPSAmbWF4MTIzOF9kZXZfYXR0cl9ncm91cCwKLQkJLnNjYW5fYXR0cnMgPSAmbWF4MTIzOF9zY2FuX2VsX2dyb3VwLAotCX0sCi0JW21heDExNjExXSA9IHsKLQkJLm51bV9pbnB1dHMgPSAxMiwKLQkJLmJpdHMgPSAxMCwKLQkJLmludF92cmVmX212ID0gMjA0OCwKLQkJLm1vZGVfbGlzdCA9IG1heDEyMzhfbW9kZV9saXN0LAotCQkubnVtX21vZGVzID0gQVJSQVlfU0laRShtYXgxMjM4X21vZGVfbGlzdCksCi0JCS5kZWZhdWx0X21vZGUgPSBzMHRvMTEsCi0JCS5kZXZfYXR0cnMgPSAmbWF4MTIzOF9kZXZfYXR0cl9ncm91cCwKLQkJLnNjYW5fYXR0cnMgPSAmbWF4MTIzOF9zY2FuX2VsX2dyb3VwLAotCX0sCi0JW21heDExNjEyXSA9IHsKLQkJLm51bV9pbnB1dHMgPSA0LAotCQkuYml0cyA9IDEyLAotCQkuaW50X3ZyZWZfbXYgPSA0MDk2LAotCQkubW9kZV9saXN0ID0gbWF4MTE2MDdfbW9kZV9saXN0LAotCQkubnVtX21vZGVzID0gQVJSQVlfU0laRShtYXgxMTYwN19tb2RlX2xpc3QpLAotCQkuZGVmYXVsdF9tb2RlID0gczB0bzMsCi0JCS5kZXZfYXR0cnMgPSAmbWF4MTM2M19kZXZfYXR0cl9ncm91cCwKLQkJLnNjYW5fYXR0cnMgPSAmbWF4MTM2M19zY2FuX2VsX2dyb3VwLAotCX0sCi0JW21heDExNjEzXSA9IHsKLQkJLm51bV9pbnB1dHMgPSA0LAotCQkuYml0cyA9IDEyLAotCQkuaW50X3ZyZWZfbXYgPSAyMDQ4LAotCQkubW9kZV9saXN0ID0gbWF4MTE2MDdfbW9kZV9saXN0LAotCQkubnVtX21vZGVzID0gQVJSQVlfU0laRShtYXgxMTYwN19tb2RlX2xpc3QpLAotCQkuZGVmYXVsdF9tb2RlID0gczB0bzMsCi0JCS5kZXZfYXR0cnMgPSAmbWF4MTM2M19kZXZfYXR0cl9ncm91cCwKLQkJLnNjYW5fYXR0cnMgPSAmbWF4MTM2M19zY2FuX2VsX2dyb3VwLAotCX0sCi0JW21heDExNjE0XSA9IHsKLQkJLm51bV9pbnB1dHMgPSA4LAotCQkuYml0cyA9IDEyLAotCQkuaW50X3ZyZWZfbXYgPSA0MDk2LAotCQkubW9kZV9saXN0ID0gbWF4MTE2MDhfbW9kZV9saXN0LAotCQkubnVtX21vZGVzID0gQVJSQVlfU0laRShtYXgxMTYwOF9tb2RlX2xpc3QpLAotCQkuZGVmYXVsdF9tb2RlID0gczB0bzcsCi0JCS5kZXZfYXR0cnMgPSAmbWF4MTE2MDhfZGV2X2F0dHJfZ3JvdXAsCi0JCS5zY2FuX2F0dHJzID0gJm1heDExNjA4X3NjYW5fZWxfZ3JvdXAsCi0JfSwKLQlbbWF4MTE2MTVdID0gewotCQkubnVtX2lucHV0cyA9IDgsCi0JCS5iaXRzID0gMTIsCi0JCS5pbnRfdnJlZl9tdiA9IDIwNDgsCi0JCS5tb2RlX2xpc3QgPSBtYXgxMTYwOF9tb2RlX2xpc3QsCi0JCS5udW1fbW9kZXMgPSBBUlJBWV9TSVpFKG1heDExNjA4X21vZGVfbGlzdCksCi0JCS5kZWZhdWx0X21vZGUgPSBzMHRvNywKLQkJLmRldl9hdHRycyA9ICZtYXgxMTYwOF9kZXZfYXR0cl9ncm91cCwKLQkJLnNjYW5fYXR0cnMgPSAmbWF4MTE2MDhfc2Nhbl9lbF9ncm91cCwKLQl9LAotCVttYXgxMTYxNl0gPSB7Ci0JCS5udW1faW5wdXRzID0gMTIsCi0JCS5iaXRzID0gMTIsCi0JCS5pbnRfdnJlZl9tdiA9IDQwOTgsCi0JCS5tb2RlX2xpc3QgPSBtYXgxMjM4X21vZGVfbGlzdCwKLQkJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobWF4MTIzOF9tb2RlX2xpc3QpLAotCQkuZGVmYXVsdF9tb2RlID0gczB0bzExLAotCQkuZGV2X2F0dHJzID0gJm1heDEyMzhfZGV2X2F0dHJfZ3JvdXAsCi0JCS5zY2FuX2F0dHJzID0gJm1heDEyMzhfc2Nhbl9lbF9ncm91cCwKLQl9LAotCVttYXgxMTYxN10gPSB7Ci0JCS5udW1faW5wdXRzID0gMTIsCi0JCS5iaXRzID0gMTIsCi0JCS5pbnRfdnJlZl9tdiA9IDIwNDgsCi0JCS5tb2RlX2xpc3QgPSBtYXgxMjM4X21vZGVfbGlzdCwKLQkJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobWF4MTIzOF9tb2RlX2xpc3QpLAotCQkuZGVmYXVsdF9tb2RlID0gczB0bzExLAotCQkuZGV2X2F0dHJzID0gJm1heDEyMzhfZGV2X2F0dHJfZ3JvdXAsCi0JCS5zY2FuX2F0dHJzID0gJm1heDEyMzhfc2Nhbl9lbF9ncm91cCwKLQl9CisgICAgICAgbWF4MTE2NDQsCisgICAgICAgbWF4MTE2NDUsCisgICAgICAgbWF4MTE2NDYsCisgICAgICAgbWF4MTE2NDcKIH07CiAKIHN0YXRpYyBjb25zdCBpbnQgbWF4MTM2M19tb25pdG9yX3NwZWVkc1tdID0geyAxMzMwMDAsIDY2NTAwMCwgMzMzMDAsIDE2NjAwLApAQCAtMTAwMCw4ICs1MTAsNyBAQAogCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkJY2hhciAqYnVmKQogewotCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBtYXgxMzYzX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoZGV2X2luZm8pOworCXN0cnVjdCBtYXgxMzYzX3N0YXRlICpzdCA9IGlpb19wcml2KGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbWF4MTM2M19tb25pdG9yX3NwZWVkc1tzdC0+bW9uaXRvcl9zcGVlZF0pOwogfQogCkBAIC0xMDEwLDggKzUxOSw4IEBACiAJCQkJCWNvbnN0IGNoYXIgKmJ1ZiwKIAkJCQkJc2l6ZV90IGxlbikKIHsKLQlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgbWF4MTM2M19zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGRldl9pbmZvKTsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1heDEzNjNfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKIAlpbnQgaSwgcmV0OwogCXVuc2lnbmVkIGxvbmcgdmFsOwogCWJvb2wgZm91bmQgPSBmYWxzZTsKQEAgLTEwMjcsOSArNTM2LDkgQEAKIAlpZiAoIWZvdW5kKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW11dGV4X2xvY2soJmRldl9pbmZvLT5tbG9jayk7CisJbXV0ZXhfbG9jaygmaW5kaW9fZGV2LT5tbG9jayk7CiAJc3QtPm1vbml0b3Jfc3BlZWQgPSBpOwotCW11dGV4X3VubG9jaygmZGV2X2luZm8tPm1sb2NrKTsKKwltdXRleF91bmxvY2soJmluZGlvX2Rldi0+bWxvY2spOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMDQxLDUyICs1NTAsMjQgQEAKIHN0YXRpYyBJSU9fQ09OU1RfQVRUUihzYW1wbGluZ19mcmVxdWVuY3lfYXZhaWxhYmxlLAogCQkiMTMzMDAwIDY2NTAwMCAzMzMwMCAxNjYwMCA4MzAwIDQyMDAgMjAwMCAxMDAwIik7CiAKLXN0YXRpYyBzc2l6ZV90IG1heDEzNjNfc2hvd190aHJlc2goc3RydWN0IGRldmljZSAqZGV2LAotCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCWNoYXIgKmJ1ZiwKLQkJCQlib29sIGhpZ2gpCitzdGF0aWMgaW50IG1heDEzNjNfcmVhZF90aHJlc2goc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKKwkJCSAgICAgICBpbnQgZXZlbnRfY29kZSwKKwkJCSAgICAgICBpbnQgKnZhbCkKIHsKLQlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgbWF4MTM2M19zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGRldl9pbmZvKTsKLQlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7Ci0KLQlpZiAoaGlnaCkKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsCi0JCQlzdC0+dGhyZXNoX2hpZ2hbdGhpc19hdHRyLT5hZGRyZXNzXSk7CisJc3RydWN0IG1heDEzNjNfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKKwlpZiAoSUlPX0VWRU5UX0NPREVfRVhUUkFDVF9ESVIoZXZlbnRfY29kZSkgPT0gSUlPX0VWX0RJUl9GQUxMSU5HKQorCQkqdmFsID0gc3QtPnRocmVzaF9sb3dbSUlPX0VWRU5UX0NPREVfRVhUUkFDVF9OVU0oZXZlbnRfY29kZSldOwogCWVsc2UKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsCi0JCQlzdC0+dGhyZXNoX2xvd1t0aGlzX2F0dHItPmFkZHJlc3MgJiAweDddKTsKKwkJKnZhbCA9IHN0LT50aHJlc2hfaGlnaFtJSU9fRVZFTlRfQ09ERV9FWFRSQUNUX05VTShldmVudF9jb2RlKV07CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IG1heDEzNjNfc2hvd190aHJlc2hfbG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQljaGFyICpidWYpCitzdGF0aWMgaW50IG1heDEzNjNfd3JpdGVfdGhyZXNoKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCisJCQkJaW50IGV2ZW50X2NvZGUsCisJCQkJaW50IHZhbCkKIHsKLQlyZXR1cm4gbWF4MTM2M19zaG93X3RocmVzaChkZXYsIGF0dHIsIGJ1ZiwgZmFsc2UpOwotfQotCi1zdGF0aWMgc3NpemVfdCBtYXgxMzYzX3Nob3dfdGhyZXNoX2hpZ2goc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkJY2hhciAqYnVmKQotewotCXJldHVybiBtYXgxMzYzX3Nob3dfdGhyZXNoKGRldiwgYXR0ciwgYnVmLCB0cnVlKTsKLX0KLQotc3RhdGljIHNzaXplX3QgbWF4MTM2M19zdG9yZV90aHJlc2hfdW5zaWduZWQoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkJY29uc3QgY2hhciAqYnVmLAotCQkJCQlzaXplX3QgbGVuLAotCQkJCQlib29sIGhpZ2gpCi17Ci0Jc3RydWN0IGlpb19kZXYgKmRldl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IG1heDEzNjNfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShkZXZfaW5mbyk7Ci0Jc3RydWN0IGlpb19kZXZfYXR0ciAqdGhpc19hdHRyID0gdG9faWlvX2Rldl9hdHRyKGF0dHIpOwotCXVuc2lnbmVkIGxvbmcgdmFsOwotCWludCByZXQ7Ci0KLQlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gLUVJTlZBTDsKKwlzdHJ1Y3QgbWF4MTM2M19zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOworCS8qIG1ha2UgaXQgaGFuZGxlIHNpZ25lZCBjb3JyZWN0bHkgYXMgd2VsbCAqLwogCXN3aXRjaCAoc3QtPmNoaXBfaW5mby0+Yml0cykgewogCWNhc2UgMTA6CiAJCWlmICh2YWwgPiAweDNGRikKQEAgLTEwOTgsMjIwICs1NzksNjAgQEAKIAkJYnJlYWs7CiAJfQogCi0Jc3dpdGNoIChoaWdoKSB7Ci0JY2FzZSAxOgotCQlzdC0+dGhyZXNoX2hpZ2hbdGhpc19hdHRyLT5hZGRyZXNzXSA9IHZhbDsKKwlzd2l0Y2ggKElJT19FVkVOVF9DT0RFX0VYVFJBQ1RfRElSKGV2ZW50X2NvZGUpKSB7CisJY2FzZSBJSU9fRVZfRElSX0ZBTExJTkc6CisJCXN0LT50aHJlc2hfbG93W0lJT19FVkVOVF9DT0RFX0VYVFJBQ1RfTlVNKGV2ZW50X2NvZGUpXSA9IHZhbDsKIAkJYnJlYWs7Ci0JY2FzZSAwOgotCQlzdC0+dGhyZXNoX2xvd1t0aGlzX2F0dHItPmFkZHJlc3MgJiAweDddID0gdmFsOworCWNhc2UgSUlPX0VWX0RJUl9SSVNJTkc6CisJCXN0LT50aHJlc2hfaGlnaFtJSU9fRVZFTlRfQ09ERV9FWFRSQUNUX05VTShldmVudF9jb2RlKV0gPSB2YWw7CiAJCWJyZWFrOwogCX0KIAotCXJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IG1heDEzNjNfc3RvcmVfdGhyZXNoX2hpZ2hfdW5zaWduZWQoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJCQljb25zdCBjaGFyICpidWYsCi0JCQkJCQlzaXplX3QgbGVuKQotewotCXJldHVybiBtYXgxMzYzX3N0b3JlX3RocmVzaF91bnNpZ25lZChkZXYsIGF0dHIsIGJ1ZiwgbGVuLCB0cnVlKTsKLX0KLQotc3RhdGljIHNzaXplX3QgbWF4MTM2M19zdG9yZV90aHJlc2hfbG93X3Vuc2lnbmVkKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCQkJY29uc3QgY2hhciAqYnVmLAotCQkJCQkJc2l6ZV90IGxlbikKLXsKLQlyZXR1cm4gbWF4MTM2M19zdG9yZV90aHJlc2hfdW5zaWduZWQoZGV2LCBhdHRyLCBidWYsIGxlbiwgZmFsc2UpOwotfQotCi1zdGF0aWMgc3NpemVfdCBtYXgxMzYzX3N0b3JlX3RocmVzaF9zaWduZWQoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkJY29uc3QgY2hhciAqYnVmLAotCQkJCQlzaXplX3QgbGVuLAotCQkJCQlib29sIGhpZ2gpCi17Ci0Jc3RydWN0IGlpb19kZXYgKmRldl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IG1heDEzNjNfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShkZXZfaW5mbyk7Ci0Jc3RydWN0IGlpb19kZXZfYXR0ciAqdGhpc19hdHRyID0gdG9faWlvX2Rldl9hdHRyKGF0dHIpOwotCWxvbmcgdmFsOwotCWludCByZXQ7Ci0KLQlyZXQgPSBzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ2YWwpOwotCWlmIChyZXQpCi0JCXJldHVybiAtRUlOVkFMOwotCXN3aXRjaCAoc3QtPmNoaXBfaW5mby0+Yml0cykgewotCWNhc2UgMTA6Ci0JCWlmICh2YWwgPCAtNTEyIHx8IHZhbCA+IDUxMSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQljYXNlIDEyOgotCQlpZiAodmFsIDwgLTIwNDggfHwgdmFsID4gMjA0NykKLQkJCXJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0KLQlzd2l0Y2ggKGhpZ2gpIHsKLQljYXNlIDE6Ci0JCXN0LT50aHJlc2hfaGlnaFt0aGlzX2F0dHItPmFkZHJlc3NdID0gdmFsOwotCQlicmVhazsKLQljYXNlIDA6Ci0JCXN0LT50aHJlc2hfbG93W3RoaXNfYXR0ci0+YWRkcmVzcyAmIDB4N10gPSB2YWw7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IG1heDEzNjNfc3RvcmVfdGhyZXNoX2hpZ2hfc2lnbmVkKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCQkJY29uc3QgY2hhciAqYnVmLAotCQkJCQkJc2l6ZV90IGxlbikKLXsKLQlyZXR1cm4gbWF4MTM2M19zdG9yZV90aHJlc2hfc2lnbmVkKGRldiwgYXR0ciwgYnVmLCBsZW4sIHRydWUpOwotfQotCi1zdGF0aWMgc3NpemVfdCBtYXgxMzYzX3N0b3JlX3RocmVzaF9sb3dfc2lnbmVkKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCQkJY29uc3QgY2hhciAqYnVmLAotCQkJCQkJc2l6ZV90IGxlbikKLXsKLQlyZXR1cm4gbWF4MTM2M19zdG9yZV90aHJlc2hfc2lnbmVkKGRldiwgYXR0ciwgYnVmLCBsZW4sIGZhbHNlKTsKLX0KLQotc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbjBfdGhyZXNoX2hpZ2hfdmFsdWUsIFNfSVJVR08gfCBTX0lXVVNSLAotCQltYXgxMzYzX3Nob3dfdGhyZXNoX2hpZ2gsCi0JCW1heDEzNjNfc3RvcmVfdGhyZXNoX2hpZ2hfdW5zaWduZWQsIDApOwotc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbjBfdGhyZXNoX2xvd192YWx1ZSwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCW1heDEzNjNfc2hvd190aHJlc2hfbG93LAotCQltYXgxMzYzX3N0b3JlX3RocmVzaF9sb3dfdW5zaWduZWQsIDApOwotc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbjFfdGhyZXNoX2hpZ2hfdmFsdWUsIFNfSVJVR08gfCBTX0lXVVNSLAotCQltYXgxMzYzX3Nob3dfdGhyZXNoX2hpZ2gsCi0JCW1heDEzNjNfc3RvcmVfdGhyZXNoX2hpZ2hfdW5zaWduZWQsIDEpOwotc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbjFfdGhyZXNoX2xvd192YWx1ZSwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCW1heDEzNjNfc2hvd190aHJlc2hfbG93LAotCQltYXgxMzYzX3N0b3JlX3RocmVzaF9sb3dfdW5zaWduZWQsIDEpOwotc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbjJfdGhyZXNoX2hpZ2hfdmFsdWUsIFNfSVJVR08gfCBTX0lXVVNSLAotCQltYXgxMzYzX3Nob3dfdGhyZXNoX2hpZ2gsCi0JCW1heDEzNjNfc3RvcmVfdGhyZXNoX2hpZ2hfdW5zaWduZWQsIDIpOwotc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbjJfdGhyZXNoX2xvd192YWx1ZSwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCW1heDEzNjNfc2hvd190aHJlc2hfbG93LAotCQltYXgxMzYzX3N0b3JlX3RocmVzaF9sb3dfdW5zaWduZWQsIDIpOwotc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbjNfdGhyZXNoX2hpZ2hfdmFsdWUsIFNfSVJVR08gfCBTX0lXVVNSLAotCQltYXgxMzYzX3Nob3dfdGhyZXNoX2hpZ2gsCi0JCW1heDEzNjNfc3RvcmVfdGhyZXNoX2hpZ2hfdW5zaWduZWQsIDMpOwotc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbjNfdGhyZXNoX2xvd192YWx1ZSwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCW1heDEzNjNfc2hvd190aHJlc2hfbG93LAotCQltYXgxMzYzX3N0b3JlX3RocmVzaF9sb3dfdW5zaWduZWQsIDMpOwotCi1zdGF0aWMgSUlPX0RFVklDRV9BVFRSX05BTUVEKGluMG1pbjFfdGhyZXNoX2hpZ2hfdmFsdWUsCi0JCQlpbjAtaW4xX3RocmVzaF9oaWdoX3ZhbHVlLAotCQkJU19JUlVHTyB8IFNfSVdVU1IsIG1heDEzNjNfc2hvd190aHJlc2hfaGlnaCwKLQkJCW1heDEzNjNfc3RvcmVfdGhyZXNoX2hpZ2hfc2lnbmVkLCA0KTsKLXN0YXRpYyBJSU9fREVWSUNFX0FUVFJfTkFNRUQoaW4wbWluMV90aHJlc2hfbG93X3ZhbHVlLAotCQkJaW4wLWluMV90aHJlc2hfbG93X3ZhbHVlLAotCQkJU19JUlVHTyB8IFNfSVdVU1IsIG1heDEzNjNfc2hvd190aHJlc2hfbG93LAotCQkJbWF4MTM2M19zdG9yZV90aHJlc2hfbG93X3NpZ25lZCwgNCk7Ci1zdGF0aWMgSUlPX0RFVklDRV9BVFRSX05BTUVEKGluMm1pbjNfdGhyZXNoX2hpZ2hfdmFsdWUsCi0JCQlpbjItaW4zX3RocmVzaF9oaWdoX3ZhbHVlLAotCQkJU19JUlVHTyB8IFNfSVdVU1IsIG1heDEzNjNfc2hvd190aHJlc2hfaGlnaCwKLQkJCW1heDEzNjNfc3RvcmVfdGhyZXNoX2hpZ2hfc2lnbmVkLCA1KTsKLXN0YXRpYyBJSU9fREVWSUNFX0FUVFJfTkFNRUQoaW4ybWluM190aHJlc2hfbG93X3ZhbHVlLAotCQkJaW4yLWluM190aHJlc2hfbG93X3ZhbHVlLAotCQkJU19JUlVHTyB8IFNfSVdVU1IsIG1heDEzNjNfc2hvd190aHJlc2hfbG93LAotCQkJbWF4MTM2M19zdG9yZV90aHJlc2hfbG93X3NpZ25lZCwgNSk7Ci1zdGF0aWMgSUlPX0RFVklDRV9BVFRSX05BTUVEKGluMW1pbjBfdGhyZXNoX2hpZ2hfdmFsdWUsCi0JCQlpbjEtaW4wX3RocmVzaF9oaWdoX3ZhbHVlLAotCQkJU19JUlVHTyB8IFNfSVdVU1IsIG1heDEzNjNfc2hvd190aHJlc2hfaGlnaCwKLQkJCW1heDEzNjNfc3RvcmVfdGhyZXNoX2hpZ2hfc2lnbmVkLCA2KTsKLXN0YXRpYyBJSU9fREVWSUNFX0FUVFJfTkFNRUQoaW4xbWluMF90aHJlc2hfbG93X3ZhbHVlLAotCQkJaW4xLWluMF90aHJlc2hfbG93X3ZhbHVlLAotCQkJU19JUlVHTyB8IFNfSVdVU1IsIG1heDEzNjNfc2hvd190aHJlc2hfbG93LAotCQkJbWF4MTM2M19zdG9yZV90aHJlc2hfbG93X3NpZ25lZCwgNik7Ci1zdGF0aWMgSUlPX0RFVklDRV9BVFRSX05BTUVEKGluM21pbjJfdGhyZXNoX2hpZ2hfdmFsdWUsCi0JCQlpbjMtaW4yX3RocmVzaF9oaWdoX3ZhbHVlLAotCQkJU19JUlVHTyB8IFNfSVdVU1IsIG1heDEzNjNfc2hvd190aHJlc2hfaGlnaCwKLQkJCW1heDEzNjNfc3RvcmVfdGhyZXNoX2hpZ2hfc2lnbmVkLCA3KTsKLXN0YXRpYyBJSU9fREVWSUNFX0FUVFJfTkFNRUQoaW4zbWluMl90aHJlc2hfbG93X3ZhbHVlLAotCQkJaW4zLWluMl90aHJlc2hfbG93X3ZhbHVlLAotCQkJU19JUlVHTyB8IFNfSVdVU1IsIG1heDEzNjNfc2hvd190aHJlc2hfbG93LAotCQkJbWF4MTM2M19zdG9yZV90aHJlc2hfbG93X3NpZ25lZCwgNyk7Ci0KLXN0YXRpYyBpbnQgbWF4MTM2M19pbnRfdGgoc3RydWN0IGlpb19kZXYgKmRldl9pbmZvLAotCQkJaW50IGluZGV4LAotCQkJczY0IHRpbWVzdGFtcCwKLQkJCWludCBub3RfdGVzdCkKLXsKLQlzdHJ1Y3QgbWF4MTM2M19zdGF0ZSAqc3QgPSBkZXZfaW5mby0+ZGV2X2RhdGE7Ci0KLQlzdC0+bGFzdF90aW1lc3RhbXAgPSB0aW1lc3RhbXA7Ci0Jc2NoZWR1bGVfd29yaygmc3QtPnRocmVzaF93b3JrKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgbWF4MTM2M190aHJlc2hfaGFuZGxlcl9iaChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmtfcykKK3N0YXRpYyBjb25zdCBpbnQgbWF4MTM2M19ldmVudF9jb2Rlc1tdID0geworCUlJT19FVkVOVF9DT0RFX0lOX0xPV19USFJFU0goMyksIElJT19FVkVOVF9DT0RFX0lOX0hJR0hfVEhSRVNIKDMpLAorCUlJT19FVkVOVF9DT0RFX0lOX0xPV19USFJFU0goMiksIElJT19FVkVOVF9DT0RFX0lOX0hJR0hfVEhSRVNIKDIpLAorCUlJT19FVkVOVF9DT0RFX0lOX0xPV19USFJFU0goMSksIElJT19FVkVOVF9DT0RFX0lOX0hJR0hfVEhSRVNIKDEpLAorCUlJT19FVkVOVF9DT0RFX0lOX0xPV19USFJFU0goMCksIElJT19FVkVOVF9DT0RFX0lOX0hJR0hfVEhSRVNIKDApCit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgbWF4MTM2M19ldmVudF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKnByaXZhdGUpCiB7Ci0Jc3RydWN0IG1heDEzNjNfc3RhdGUgKnN0ID0gY29udGFpbmVyX29mKHdvcmtfcywgc3RydWN0IG1heDEzNjNfc3RhdGUsCi0JCQkJCQl0aHJlc2hfd29yayk7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHByaXZhdGU7CisJc3RydWN0IG1heDEzNjNfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKKwlzNjQgdGltZXN0YW1wID0gaWlvX2dldF90aW1lX25zKCk7CisJdW5zaWduZWQgbG9uZyBtYXNrLCBsb2M7CiAJdTggcng7CiAJdTggdHhbMl0gPSB7IHN0LT5zZXR1cGJ5dGUsCiAJCSAgICAgTUFYMTM2M19NT05fSU5UX0VOQUJMRSB8IChzdC0+bW9uaXRvcl9zcGVlZCA8PCAxKSB8IDB4RjAgfTsKIAogCWkyY19tYXN0ZXJfcmVjdihzdC0+Y2xpZW50LCAmcngsIDEpOwotCWlmIChyeCAmICgxIDw8IDApKQotCQlpaW9fcHVzaF9ldmVudChzdC0+aW5kaW9fZGV2LCAwLAotCQkJSUlPX0VWRU5UX0NPREVfSU5fTE9XX1RIUkVTSCgzKSwKLQkJCXN0LT5sYXN0X3RpbWVzdGFtcCk7Ci0JaWYgKHJ4ICYgKDEgPDwgMSkpCi0JCWlpb19wdXNoX2V2ZW50KHN0LT5pbmRpb19kZXYsIDAsCi0JCQlJSU9fRVZFTlRfQ09ERV9JTl9ISUdIX1RIUkVTSCgzKSwKLQkJCXN0LT5sYXN0X3RpbWVzdGFtcCk7Ci0JaWYgKHJ4ICYgKDEgPDwgMikpCi0JCWlpb19wdXNoX2V2ZW50KHN0LT5pbmRpb19kZXYsIDAsCi0JCQlJSU9fRVZFTlRfQ09ERV9JTl9MT1dfVEhSRVNIKDIpLAotCQkJc3QtPmxhc3RfdGltZXN0YW1wKTsKLQlpZiAocnggJiAoMSA8PCAzKSkKLQkJaWlvX3B1c2hfZXZlbnQoc3QtPmluZGlvX2RldiwgMCwKLQkJCUlJT19FVkVOVF9DT0RFX0lOX0hJR0hfVEhSRVNIKDIpLAotCQkJc3QtPmxhc3RfdGltZXN0YW1wKTsKLQlpZiAocnggJiAoMSA8PCA0KSkKLQkJaWlvX3B1c2hfZXZlbnQoc3QtPmluZGlvX2RldiwgMCwKLQkJCUlJT19FVkVOVF9DT0RFX0lOX0xPV19USFJFU0goMSksCi0JCQlzdC0+bGFzdF90aW1lc3RhbXApOwotCWlmIChyeCAmICgxIDw8IDUpKQotCQlpaW9fcHVzaF9ldmVudChzdC0+aW5kaW9fZGV2LCAwLAotCQkJSUlPX0VWRU5UX0NPREVfSU5fSElHSF9USFJFU0goMSksCi0JCQlzdC0+bGFzdF90aW1lc3RhbXApOwotCWlmIChyeCAmICgxIDw8IDYpKQotCQlpaW9fcHVzaF9ldmVudChzdC0+aW5kaW9fZGV2LCAwLAotCQkJSUlPX0VWRU5UX0NPREVfSU5fTE9XX1RIUkVTSCgwKSwKLQkJCXN0LT5sYXN0X3RpbWVzdGFtcCk7Ci0JaWYgKHJ4ICYgKDEgPDwgNykpCi0JCWlpb19wdXNoX2V2ZW50KHN0LT5pbmRpb19kZXYsIDAsCi0JCQlJSU9fRVZFTlRfQ09ERV9JTl9ISUdIX1RIUkVTSCgwKSwKLQkJCXN0LT5sYXN0X3RpbWVzdGFtcCk7Ci0JZW5hYmxlX2lycShzdC0+Y2xpZW50LT5pcnEpOworCW1hc2sgPSByeDsKKwlmb3JfZWFjaF9zZXRfYml0KGxvYywgJm1hc2ssIDgpCisJCWlpb19wdXNoX2V2ZW50KGluZGlvX2RldiwgMCwgbWF4MTM2M19ldmVudF9jb2Rlc1tsb2NdLAorCQkJICAgICAgIHRpbWVzdGFtcCk7CiAJaTJjX21hc3Rlcl9zZW5kKHN0LT5jbGllbnQsIHR4LCAyKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIHNzaXplX3QgbWF4MTM2M19yZWFkX2ludGVycnVwdF9jb25maWcoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkJY2hhciAqYnVmKQorc3RhdGljIGludCBtYXgxMzYzX3JlYWRfZXZlbnRfY29uZmlnKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCisJCQkJICAgICBpbnQgZXZlbnRfY29kZSkKIHsKLQlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgbWF4MTM2M19zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGRldl9pbmZvKTsKLQlzdHJ1Y3QgaWlvX2V2ZW50X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19ldmVudF9hdHRyKGF0dHIpOworCXN0cnVjdCBtYXgxMzYzX3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CisKIAlpbnQgdmFsOwotCi0JbXV0ZXhfbG9jaygmZGV2X2luZm8tPm1sb2NrKTsKLQlpZiAodGhpc19hdHRyLT5tYXNrICYgMHg4KQotCQl2YWwgPSAoMSA8PCAodGhpc19hdHRyLT5tYXNrICYgMHg3KSkgJiBzdC0+bWFza19sb3c7CisJaW50IG51bWJlciA9IElJT19FVkVOVF9DT0RFX0VYVFJBQ1RfTlVNKGV2ZW50X2NvZGUpOworCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOworCWlmIChJSU9fRVZFTlRfQ09ERV9FWFRSQUNUX0RJUihldmVudF9jb2RlKSA9PSBJSU9fRVZfRElSX0ZBTExJTkcpCisJCXZhbCA9ICgxIDw8IG51bWJlcikgJiBzdC0+bWFza19sb3c7CiAJZWxzZQotCQl2YWwgPSAoMSA8PCB0aGlzX2F0dHItPm1hc2spICYgc3QtPm1hc2tfaGlnaDsKLQltdXRleF91bmxvY2soJmRldl9pbmZvLT5tbG9jayk7CisJCXZhbCA9ICgxIDw8IG51bWJlcikgJiBzdC0+bWFza19oaWdoOworCW11dGV4X3VubG9jaygmaW5kaW9fZGV2LT5tbG9jayk7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgISF2YWwpOworCXJldHVybiB2YWw7CiB9CiAKIHN0YXRpYyBpbnQgbWF4MTM2M19tb25pdG9yX21vZGVfdXBkYXRlKHN0cnVjdCBtYXgxMzYzX3N0YXRlICpzdCwgaW50IGVuYWJsZWQpCkBAIC0xNDI4LDYgKzc0OSw3IEBACiAgKiBUbyBrZWVwIHRoaXMgbWFuYWdlYWJsZSB3ZSBhbHdheXMgdXNlIG9uZSBvZiAzIHNjYW4gbW9kZXMuCiAgKiBTY2FuIDAuLi4zLCAwLTEsMi0zIGFuZCAxLTAsMy0yCiAgKi8KKwogc3RhdGljIGlubGluZSBpbnQgX19tYXgxMzYzX2NoZWNrX2V2ZW50X21hc2soaW50IHRoaXNtYXNrLCBpbnQgY2hlY2ttYXNrKQogewogCWludCByZXQgPSAwOwpAQCAtMTQ0OCwyMDYgKzc3MCw1NCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IG1heDEzNjNfd3JpdGVfaW50ZXJydXB0X2NvbmZpZyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCQljb25zdCBjaGFyICpidWYsCi0JCQkJCXNpemVfdCBsZW4pCitzdGF0aWMgaW50IG1heDEzNjNfd3JpdGVfZXZlbnRfY29uZmlnKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCisJCQkJICAgICAgaW50IGV2ZW50X2NvZGUsCisJCQkJICAgICAgaW50IHN0YXRlKQogewotCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBtYXgxMzYzX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoZGV2X2luZm8pOwotCXN0cnVjdCBpaW9fZXZlbnRfYXR0ciAqdGhpc19hdHRyID0gdG9faWlvX2V2ZW50X2F0dHIoYXR0cik7Ci0JdW5zaWduZWQgbG9uZyB2YWw7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgbWF4MTM2M19zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwogCXUxNiB1bmlmaWVkbWFzazsKLQlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gLUVJTlZBTDsKLQltdXRleF9sb2NrKCZzdC0+aW5kaW9fZGV2LT5tbG9jayk7CisJaW50IG51bWJlciA9IElJT19FVkVOVF9DT0RFX0VYVFJBQ1RfTlVNKGV2ZW50X2NvZGUpOworCisJbXV0ZXhfbG9jaygmaW5kaW9fZGV2LT5tbG9jayk7CiAJdW5pZmllZG1hc2sgPSBzdC0+bWFza19sb3cgfCBzdC0+bWFza19oaWdoOwotCWlmICh0aGlzX2F0dHItPm1hc2sgJiAweDA4KSB7Ci0JCS8qIElmIHdlIGFyZSBkaXNhYmxpbmcgbm8gbmVlZCB0byB0ZXN0ICovCi0JCWlmICh2YWwgPT0gMCkKLQkJCXN0LT5tYXNrX2xvdyAmPSB+KDEgPDwgKHRoaXNfYXR0ci0+bWFzayAmIDB4NykpOworCWlmIChJSU9fRVZFTlRfQ09ERV9FWFRSQUNUX0RJUihldmVudF9jb2RlKSA9PSBJSU9fRVZfRElSX0ZBTExJTkcpIHsKKworCQlpZiAoc3RhdGUgPT0gMCkKKwkJCXN0LT5tYXNrX2xvdyAmPSB+KDEgPDwgbnVtYmVyKTsKIAkJZWxzZSB7Ci0JCQlyZXQgPSBfX21heDEzNjNfY2hlY2tfZXZlbnRfbWFzayh0aGlzX2F0dHItPm1hc2sgJiAweDcsCi0JCQkJCQkJdW5pZmllZG1hc2spOworCQkJcmV0ID0gX19tYXgxMzYzX2NoZWNrX2V2ZW50X21hc2soKDEgPDwgbnVtYmVyKSwKKwkJCQkJCQkgdW5pZmllZG1hc2spOwogCQkJaWYgKHJldCkKIAkJCQlnb3RvIGVycm9yX3JldDsKLQkJCXN0LT5tYXNrX2xvdyB8PSAoMSA8PCAodGhpc19hdHRyLT5tYXNrICYgMHg3KSk7CisJCQlzdC0+bWFza19sb3cgfD0gKDEgPDwgbnVtYmVyKTsKIAkJfQogCX0gZWxzZSB7Ci0JCWlmICh2YWwgPT0gMCkKLQkJCXN0LT5tYXNrX2hpZ2ggJj0gfigxIDw8ICh0aGlzX2F0dHItPm1hc2spKTsKKwkJaWYgKHN0YXRlID09IDApCisJCQlzdC0+bWFza19oaWdoICY9IH4oMSA8PCBudW1iZXIpOwogCQllbHNlIHsKLQkJCXJldCA9IF9fbWF4MTM2M19jaGVja19ldmVudF9tYXNrKHRoaXNfYXR0ci0+bWFzaywKLQkJCQkJCQl1bmlmaWVkbWFzayk7CisJCQlyZXQgPSBfX21heDEzNjNfY2hlY2tfZXZlbnRfbWFzaygoMSA8PCBudW1iZXIpLAorCQkJCQkJCSB1bmlmaWVkbWFzayk7CiAJCQlpZiAocmV0KQogCQkJCWdvdG8gZXJyb3JfcmV0OwotCQkJc3QtPm1hc2tfaGlnaCB8PSAoMSA8PCB0aGlzX2F0dHItPm1hc2spOworCQkJc3QtPm1hc2tfaGlnaCB8PSAoMSA8PCBudW1iZXIpOwogCQl9CiAJfQotCWlmIChzdC0+bW9uaXRvcl9vbiAmJiAhc3QtPm1hc2tfaGlnaCAmJiAhc3QtPm1hc2tfbG93KQotCQlpaW9fcmVtb3ZlX2V2ZW50X2Zyb21fbGlzdCh0aGlzX2F0dHItPmxpc3RlbCwKLQkJCQkJJmRldl9pbmZvLT5pbnRlcnJ1cHRzWzBdLT5ldl9saXN0KTsKLQlpZiAoIXN0LT5tb25pdG9yX29uICYmIHZhbCkKLQkJaWlvX2FkZF9ldmVudF90b19saXN0KHRoaXNfYXR0ci0+bGlzdGVsLAotCQkJCSZkZXZfaW5mby0+aW50ZXJydXB0c1swXS0+ZXZfbGlzdCk7CiAKIAltYXgxMzYzX21vbml0b3JfbW9kZV91cGRhdGUoc3QsICEhKHN0LT5tYXNrX2hpZ2ggfCBzdC0+bWFza19sb3cpKTsKIGVycm9yX3JldDoKLQltdXRleF91bmxvY2soJnN0LT5pbmRpb19kZXYtPm1sb2NrKTsKKwltdXRleF91bmxvY2soJmluZGlvX2Rldi0+bWxvY2spOwogCi0JcmV0dXJuIGxlbjsKKwlyZXR1cm4gcmV0OwogfQogCi1JSU9fRVZFTlRfU0gobWF4MTM2M190aHJlc2gsIG1heDEzNjNfaW50X3RoKTsKLQotI2RlZmluZSBNQVgxMzYzX0hJR0hfVEhSRVNIKGEpIGEKLSNkZWZpbmUgTUFYMTM2M19MT1dfVEhSRVNIKGEpIChhIHwgMHg4KQotCi1JSU9fRVZFTlRfQVRUUl9TSChpbjBfdGhyZXNoX2hpZ2hfZW4sCi0JCWlpb19ldmVudF9tYXgxMzYzX3RocmVzaCwKLQkJbWF4MTM2M19yZWFkX2ludGVycnVwdF9jb25maWcsCi0JCW1heDEzNjNfd3JpdGVfaW50ZXJydXB0X2NvbmZpZywKLQkJTUFYMTM2M19ISUdIX1RIUkVTSCgwKSk7Ci0KLUlJT19FVkVOVF9BVFRSX1NIKGluMF90aHJlc2hfbG93X2VuLAotCQlpaW9fZXZlbnRfbWF4MTM2M190aHJlc2gsCi0JCW1heDEzNjNfcmVhZF9pbnRlcnJ1cHRfY29uZmlnLAotCQltYXgxMzYzX3dyaXRlX2ludGVycnVwdF9jb25maWcsCi0JCU1BWDEzNjNfTE9XX1RIUkVTSCgwKSk7Ci0KLUlJT19FVkVOVF9BVFRSX1NIKGluMV90aHJlc2hfaGlnaF9lbiwKLQkJaWlvX2V2ZW50X21heDEzNjNfdGhyZXNoLAotCQltYXgxMzYzX3JlYWRfaW50ZXJydXB0X2NvbmZpZywKLQkJbWF4MTM2M193cml0ZV9pbnRlcnJ1cHRfY29uZmlnLAotCQlNQVgxMzYzX0hJR0hfVEhSRVNIKDEpKTsKLQotSUlPX0VWRU5UX0FUVFJfU0goaW4xX3RocmVzaF9sb3dfZW4sCi0JCWlpb19ldmVudF9tYXgxMzYzX3RocmVzaCwKLQkJbWF4MTM2M19yZWFkX2ludGVycnVwdF9jb25maWcsCi0JCW1heDEzNjNfd3JpdGVfaW50ZXJydXB0X2NvbmZpZywKLQkJTUFYMTM2M19MT1dfVEhSRVNIKDEpKTsKLQotSUlPX0VWRU5UX0FUVFJfU0goaW4yX3RocmVzaF9oaWdoX2VuLAotCQlpaW9fZXZlbnRfbWF4MTM2M190aHJlc2gsCi0JCW1heDEzNjNfcmVhZF9pbnRlcnJ1cHRfY29uZmlnLAotCQltYXgxMzYzX3dyaXRlX2ludGVycnVwdF9jb25maWcsCi0JCU1BWDEzNjNfSElHSF9USFJFU0goMikpOwotCi1JSU9fRVZFTlRfQVRUUl9TSChpbjJfdGhyZXNoX2xvd19lbiwKLQkJaWlvX2V2ZW50X21heDEzNjNfdGhyZXNoLAotCQltYXgxMzYzX3JlYWRfaW50ZXJydXB0X2NvbmZpZywKLQkJbWF4MTM2M193cml0ZV9pbnRlcnJ1cHRfY29uZmlnLAotCQlNQVgxMzYzX0xPV19USFJFU0goMikpOwotCi1JSU9fRVZFTlRfQVRUUl9TSChpbjNfdGhyZXNoX2hpZ2hfZW4sCi0JCWlpb19ldmVudF9tYXgxMzYzX3RocmVzaCwKLQkJbWF4MTM2M19yZWFkX2ludGVycnVwdF9jb25maWcsCi0JCW1heDEzNjNfd3JpdGVfaW50ZXJydXB0X2NvbmZpZywKLQkJTUFYMTM2M19ISUdIX1RIUkVTSCgzKSk7Ci0KLUlJT19FVkVOVF9BVFRSX1NIKGluM190aHJlc2hfbG93X2VuLAotCQlpaW9fZXZlbnRfbWF4MTM2M190aHJlc2gsCi0JCW1heDEzNjNfcmVhZF9pbnRlcnJ1cHRfY29uZmlnLAotCQltYXgxMzYzX3dyaXRlX2ludGVycnVwdF9jb25maWcsCi0JCU1BWDEzNjNfTE9XX1RIUkVTSCgzKSk7Ci0KLUlJT19FVkVOVF9BVFRSX05BTUVEX1NIKGluMG1pbjFfdGhyZXNoX2hpZ2hfZW4sCi0JCQlpbjAtaW4xX3RocmVzaF9oaWdoX2VuLAotCQkJaWlvX2V2ZW50X21heDEzNjNfdGhyZXNoLAotCQkJbWF4MTM2M19yZWFkX2ludGVycnVwdF9jb25maWcsCi0JCQltYXgxMzYzX3dyaXRlX2ludGVycnVwdF9jb25maWcsCi0JCQlNQVgxMzYzX0hJR0hfVEhSRVNIKDQpKTsKLQotSUlPX0VWRU5UX0FUVFJfTkFNRURfU0goaW4wbWluMV90aHJlc2hfbG93X2VuLAotCQkJaW4wLWluMV90aHJlc2hfbG93X2VuLAotCQkJaWlvX2V2ZW50X21heDEzNjNfdGhyZXNoLAotCQkJbWF4MTM2M19yZWFkX2ludGVycnVwdF9jb25maWcsCi0JCQltYXgxMzYzX3dyaXRlX2ludGVycnVwdF9jb25maWcsCi0JCQlNQVgxMzYzX0xPV19USFJFU0goNCkpOwotCi1JSU9fRVZFTlRfQVRUUl9OQU1FRF9TSChpbjNtaW4yX3RocmVzaF9oaWdoX2VuLAotCQkJaW4zLWluMl90aHJlc2hfaGlnaF9lbiwKLQkJCWlpb19ldmVudF9tYXgxMzYzX3RocmVzaCwKLQkJCW1heDEzNjNfcmVhZF9pbnRlcnJ1cHRfY29uZmlnLAotCQkJbWF4MTM2M193cml0ZV9pbnRlcnJ1cHRfY29uZmlnLAotCQkJTUFYMTM2M19ISUdIX1RIUkVTSCg1KSk7Ci0KLUlJT19FVkVOVF9BVFRSX05BTUVEX1NIKGluM21pbjJfdGhyZXNoX2xvd19lbiwKLQkJCWluMy1pbjJfdGhyZXNoX2xvd19lbiwKLQkJCWlpb19ldmVudF9tYXgxMzYzX3RocmVzaCwKLQkJCW1heDEzNjNfcmVhZF9pbnRlcnJ1cHRfY29uZmlnLAotCQkJbWF4MTM2M193cml0ZV9pbnRlcnJ1cHRfY29uZmlnLAotCQkJTUFYMTM2M19MT1dfVEhSRVNIKDUpKTsKLQotSUlPX0VWRU5UX0FUVFJfTkFNRURfU0goaW4xbWluMF90aHJlc2hfaGlnaF9lbiwKLQkJCWluMS1pbjBfdGhyZXNoX2hpZ2hfZW4sCi0JCQlpaW9fZXZlbnRfbWF4MTM2M190aHJlc2gsCi0JCQltYXgxMzYzX3JlYWRfaW50ZXJydXB0X2NvbmZpZywKLQkJCW1heDEzNjNfd3JpdGVfaW50ZXJydXB0X2NvbmZpZywKLQkJCU1BWDEzNjNfSElHSF9USFJFU0goNikpOwotCi1JSU9fRVZFTlRfQVRUUl9OQU1FRF9TSChpbjFtaW4wX3RocmVzaF9sb3dfZW4sCi0JCQlpbjEtaW4wX3RocmVzaF9sb3dfZW4sCi0JCQlpaW9fZXZlbnRfbWF4MTM2M190aHJlc2gsCi0JCQltYXgxMzYzX3JlYWRfaW50ZXJydXB0X2NvbmZpZywKLQkJCW1heDEzNjNfd3JpdGVfaW50ZXJydXB0X2NvbmZpZywKLQkJCU1BWDEzNjNfTE9XX1RIUkVTSCg2KSk7Ci0KLUlJT19FVkVOVF9BVFRSX05BTUVEX1NIKGluMm1pbjNfdGhyZXNoX2hpZ2hfZW4sCi0JCQlpbjItaW4zX3RocmVzaF9oaWdoX2VuLAotCQkJaWlvX2V2ZW50X21heDEzNjNfdGhyZXNoLAotCQkJbWF4MTM2M19yZWFkX2ludGVycnVwdF9jb25maWcsCi0JCQltYXgxMzYzX3dyaXRlX2ludGVycnVwdF9jb25maWcsCi0JCQlNQVgxMzYzX0hJR0hfVEhSRVNIKDcpKTsKLQotSUlPX0VWRU5UX0FUVFJfTkFNRURfU0goaW4ybWluM190aHJlc2hfbG93X2VuLAotCQkJaW4yLWluM190aHJlc2hfbG93X2VuLAotCQkJaWlvX2V2ZW50X21heDEzNjNfdGhyZXNoLAotCQkJbWF4MTM2M19yZWFkX2ludGVycnVwdF9jb25maWcsCi0JCQltYXgxMzYzX3dyaXRlX2ludGVycnVwdF9jb25maWcsCi0JCQlNQVgxMzYzX0xPV19USFJFU0goNykpOwotCiAvKgogICogQXMgd2l0aCBzY2FuX2VsZW1lbnRzLCBvbmx5IGNlcnRhaW4gc2V0cyBvZiB0aGVzZSBjYW4KICAqIGJlIGNvbWJpbmVkLgogICovCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbWF4MTM2M19ldmVudF9hdHRyaWJ1dGVzW10gPSB7Ci0JJmlpb19kZXZfYXR0cl9pbjBfdGhyZXNoX2hpZ2hfdmFsdWUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luMF90aHJlc2hfbG93X3ZhbHVlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjFfdGhyZXNoX2hpZ2hfdmFsdWUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luMV90aHJlc2hfbG93X3ZhbHVlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjJfdGhyZXNoX2hpZ2hfdmFsdWUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luMl90aHJlc2hfbG93X3ZhbHVlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjNfdGhyZXNoX2hpZ2hfdmFsdWUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luM190aHJlc2hfbG93X3ZhbHVlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjBtaW4xX3RocmVzaF9oaWdoX3ZhbHVlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjBtaW4xX3RocmVzaF9sb3dfdmFsdWUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luMm1pbjNfdGhyZXNoX2hpZ2hfdmFsdWUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luMm1pbjNfdGhyZXNoX2xvd192YWx1ZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW4xbWluMF90aHJlc2hfaGlnaF92YWx1ZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW4xbWluMF90aHJlc2hfbG93X3ZhbHVlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjNtaW4yX3RocmVzaF9oaWdoX3ZhbHVlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjNtaW4yX3RocmVzaF9sb3dfdmFsdWUuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX3NhbXBsaW5nX2ZyZXF1ZW5jeS5kZXZfYXR0ci5hdHRyLAogCSZpaW9fY29uc3RfYXR0cl9zYW1wbGluZ19mcmVxdWVuY3lfYXZhaWxhYmxlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX2luMF90aHJlc2hfaGlnaF9lbi5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl9pbjBfdGhyZXNoX2xvd19lbi5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl9pbjFfdGhyZXNoX2hpZ2hfZW4uZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfaW4xX3RocmVzaF9sb3dfZW4uZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfaW4yX3RocmVzaF9oaWdoX2VuLmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX2luMl90aHJlc2hfbG93X2VuLmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX2luM190aHJlc2hfaGlnaF9lbi5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl9pbjNfdGhyZXNoX2xvd19lbi5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl9pbjBtaW4xX3RocmVzaF9oaWdoX2VuLmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX2luMG1pbjFfdGhyZXNoX2xvd19lbi5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl9pbjNtaW4yX3RocmVzaF9oaWdoX2VuLmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX2luM21pbjJfdGhyZXNoX2xvd19lbi5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl9pbjFtaW4wX3RocmVzaF9oaWdoX2VuLmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX2luMW1pbjBfdGhyZXNoX2xvd19lbi5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl9pbjJtaW4zX3RocmVzaF9oaWdoX2VuLmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX2luMm1pbjNfdGhyZXNoX2xvd19lbi5kZXZfYXR0ci5hdHRyLAogCU5VTEwsCiB9OwogCkBAIC0xNjU1LDYgKzgyNSw0MTEgQEAKIAkuYXR0cnMgPSBtYXgxMzYzX2V2ZW50X2F0dHJpYnV0ZXMsCiB9OwogCisjZGVmaW5lIE1BWDEzNjNfRVZFTlRfRlVOQ1MJCQkJCQlcCisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9faW5mbyBtYXgxMjM4X2luZm8gPSB7CisJLnJlYWRfcmF3ID0gJm1heDEzNjNfcmVhZF9yYXcsCisJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2luZm8gbWF4MTM2M19pbmZvID0geworCS5yZWFkX2V2ZW50X3ZhbHVlID0gJm1heDEzNjNfcmVhZF90aHJlc2gsCisJLndyaXRlX2V2ZW50X3ZhbHVlID0gJm1heDEzNjNfd3JpdGVfdGhyZXNoLAorCS5yZWFkX2V2ZW50X2NvbmZpZyA9ICZtYXgxMzYzX3JlYWRfZXZlbnRfY29uZmlnLAorCS53cml0ZV9ldmVudF9jb25maWcgPSAmbWF4MTM2M193cml0ZV9ldmVudF9jb25maWcsCisJLnJlYWRfcmF3ID0gJm1heDEzNjNfcmVhZF9yYXcsCisJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRSwKKwkubnVtX2ludGVycnVwdF9saW5lcyA9IDEsCisJLmV2ZW50X2F0dHJzID0gJm1heDEzNjNfZXZlbnRfYXR0cmlidXRlX2dyb3VwLAorfTsKKworLyogbWF4MTM2MyBhbmQgbWF4MTM2OCB0ZXN0ZWQgLSByZXN0IGZyb20gZGF0YSBzaGVldCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBtYXgxMzYzX2NoaXBfaW5mbyBtYXgxMzYzX2NoaXBfaW5mb190YmxbXSA9IHsKKwlbbWF4MTM2MV0gPSB7CisJCS5iaXRzID0gMTAsCisJCS5pbnRfdnJlZl9tdiA9IDIwNDgsCisJCS5tb2RlX2xpc3QgPSBtYXgxMzYzX21vZGVfbGlzdCwKKwkJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobWF4MTM2M19tb2RlX2xpc3QpLAorCQkuZGVmYXVsdF9tb2RlID0gczB0bzMsCisJCS5jaGFubmVscyA9IG1heDEzNjFfY2hhbm5lbHMsCisJCS5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKG1heDEzNjFfY2hhbm5lbHMpLAorCQkuaW5mbyA9ICZtYXgxMzYzX2luZm8sCisJfSwKKwlbbWF4MTM2Ml0gPSB7CisJCS5iaXRzID0gMTAsCisJCS5pbnRfdnJlZl9tdiA9IDQwOTYsCisJCS5tb2RlX2xpc3QgPSBtYXgxMzYzX21vZGVfbGlzdCwKKwkJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobWF4MTM2M19tb2RlX2xpc3QpLAorCQkuZGVmYXVsdF9tb2RlID0gczB0bzMsCisJCS5jaGFubmVscyA9IG1heDEzNjFfY2hhbm5lbHMsCisJCS5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKG1heDEzNjFfY2hhbm5lbHMpLAorCQkuaW5mbyA9ICZtYXgxMzYzX2luZm8sCisJfSwKKwlbbWF4MTM2M10gPSB7CisJCS5iaXRzID0gMTIsCisJCS5pbnRfdnJlZl9tdiA9IDIwNDgsCisJCS5tb2RlX2xpc3QgPSBtYXgxMzYzX21vZGVfbGlzdCwKKwkJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobWF4MTM2M19tb2RlX2xpc3QpLAorCQkuZGVmYXVsdF9tb2RlID0gczB0bzMsCisJCS5jaGFubmVscyA9IG1heDEzNjNfY2hhbm5lbHMsCisJCS5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKG1heDEzNjNfY2hhbm5lbHMpLAorCQkuaW5mbyA9ICZtYXgxMzYzX2luZm8sCisJfSwKKwlbbWF4MTM2NF0gPSB7CisJCS5iaXRzID0gMTIsCisJCS5pbnRfdnJlZl9tdiA9IDQwOTYsCisJCS5tb2RlX2xpc3QgPSBtYXgxMzYzX21vZGVfbGlzdCwKKwkJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobWF4MTM2M19tb2RlX2xpc3QpLAorCQkuZGVmYXVsdF9tb2RlID0gczB0bzMsCisJCS5jaGFubmVscyA9IG1heDEzNjNfY2hhbm5lbHMsCisJCS5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKG1heDEzNjNfY2hhbm5lbHMpLAorCQkuaW5mbyA9ICZtYXgxMzYzX2luZm8sCisJfSwKKwlbbWF4MTAzNl0gPSB7CisJCS5iaXRzID0gOCwKKwkJLmludF92cmVmX212ID0gNDA5NiwKKwkJLm1vZGVfbGlzdCA9IG1heDEyMzZfbW9kZV9saXN0LAorCQkubnVtX21vZGVzID0gQVJSQVlfU0laRShtYXgxMjM2X21vZGVfbGlzdCksCisJCS5kZWZhdWx0X21vZGUgPSBzMHRvMywKKwkJLmluZm8gPSAmbWF4MTIzOF9pbmZvLAorCQkuY2hhbm5lbHMgPSBtYXgxMDM2X2NoYW5uZWxzLAorCQkubnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShtYXgxMDM2X2NoYW5uZWxzKSwKKwl9LAorCVttYXgxMDM3XSA9IHsKKwkJLmJpdHMgPSA4LAorCQkuaW50X3ZyZWZfbXYgPSAyMDQ4LAorCQkubW9kZV9saXN0ID0gbWF4MTIzNl9tb2RlX2xpc3QsCisJCS5udW1fbW9kZXMgPSBBUlJBWV9TSVpFKG1heDEyMzZfbW9kZV9saXN0KSwKKwkJLmRlZmF1bHRfbW9kZSA9IHMwdG8zLAorCQkuaW5mbyA9ICZtYXgxMjM4X2luZm8sCisJCS5jaGFubmVscyA9IG1heDEwMzZfY2hhbm5lbHMsCisJCS5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKG1heDEwMzZfY2hhbm5lbHMpLAorCX0sCisJW21heDEwMzhdID0geworCQkuYml0cyA9IDgsCisJCS5pbnRfdnJlZl9tdiA9IDQwOTYsCisJCS5tb2RlX2xpc3QgPSBtYXgxMjM4X21vZGVfbGlzdCwKKwkJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobWF4MTIzOF9tb2RlX2xpc3QpLAorCQkuZGVmYXVsdF9tb2RlID0gczB0bzExLAorCQkuaW5mbyA9ICZtYXgxMjM4X2luZm8sCisJCS5jaGFubmVscyA9IG1heDEwMzhfY2hhbm5lbHMsCisJCS5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKG1heDEwMzhfY2hhbm5lbHMpLAorCX0sCisJW21heDEwMzldID0geworCQkuYml0cyA9IDgsCisJCS5pbnRfdnJlZl9tdiA9IDIwNDgsCisJCS5tb2RlX2xpc3QgPSBtYXgxMjM4X21vZGVfbGlzdCwKKwkJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobWF4MTIzOF9tb2RlX2xpc3QpLAorCQkuZGVmYXVsdF9tb2RlID0gczB0bzExLAorCQkuaW5mbyA9ICZtYXgxMjM4X2luZm8sCisJCS5jaGFubmVscyA9IG1heDEwMzhfY2hhbm5lbHMsCisJCS5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKG1heDEwMzhfY2hhbm5lbHMpLAorCX0sCisJW21heDExMzZdID0geworCQkuYml0cyA9IDEwLAorCQkuaW50X3ZyZWZfbXYgPSA0MDk2LAorCQkubW9kZV9saXN0ID0gbWF4MTIzNl9tb2RlX2xpc3QsCisJCS5udW1fbW9kZXMgPSBBUlJBWV9TSVpFKG1heDEyMzZfbW9kZV9saXN0KSwKKwkJLmRlZmF1bHRfbW9kZSA9IHMwdG8zLAorCQkuaW5mbyA9ICZtYXgxMjM4X2luZm8sCisJCS5jaGFubmVscyA9IG1heDExMzZfY2hhbm5lbHMsCisJCS5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKG1heDExMzZfY2hhbm5lbHMpLAorCX0sCisJW21heDExMzddID0geworCQkuYml0cyA9IDEwLAorCQkuaW50X3ZyZWZfbXYgPSAyMDQ4LAorCQkubW9kZV9saXN0ID0gbWF4MTIzNl9tb2RlX2xpc3QsCisJCS5udW1fbW9kZXMgPSBBUlJBWV9TSVpFKG1heDEyMzZfbW9kZV9saXN0KSwKKwkJLmRlZmF1bHRfbW9kZSA9IHMwdG8zLAorCQkuaW5mbyA9ICZtYXgxMjM4X2luZm8sCisJCS5jaGFubmVscyA9IG1heDExMzZfY2hhbm5lbHMsCisJCS5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKG1heDExMzZfY2hhbm5lbHMpLAorCX0sCisJW21heDExMzhdID0geworCQkuYml0cyA9IDEwLAorCQkuaW50X3ZyZWZfbXYgPSA0MDk2LAorCQkubW9kZV9saXN0ID0gbWF4MTIzOF9tb2RlX2xpc3QsCisJCS5udW1fbW9kZXMgPSBBUlJBWV9TSVpFKG1heDEyMzhfbW9kZV9saXN0KSwKKwkJLmRlZmF1bHRfbW9kZSA9IHMwdG8xMSwKKwkJLmluZm8gPSAmbWF4MTIzOF9pbmZvLAorCQkuY2hhbm5lbHMgPSBtYXgxMTM4X2NoYW5uZWxzLAorCQkubnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShtYXgxMTM4X2NoYW5uZWxzKSwKKwl9LAorCVttYXgxMTM5XSA9IHsKKwkJLmJpdHMgPSAxMCwKKwkJLmludF92cmVmX212ID0gMjA0OCwKKwkJLm1vZGVfbGlzdCA9IG1heDEyMzhfbW9kZV9saXN0LAorCQkubnVtX21vZGVzID0gQVJSQVlfU0laRShtYXgxMjM4X21vZGVfbGlzdCksCisJCS5kZWZhdWx0X21vZGUgPSBzMHRvMTEsCisJCS5pbmZvID0gJm1heDEyMzhfaW5mbywKKwkJLmNoYW5uZWxzID0gbWF4MTEzOF9jaGFubmVscywKKwkJLm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUobWF4MTEzOF9jaGFubmVscyksCisJfSwKKwlbbWF4MTIzNl0gPSB7CisJCS5iaXRzID0gMTIsCisJCS5pbnRfdnJlZl9tdiA9IDQwOTYsCisJCS5tb2RlX2xpc3QgPSBtYXgxMjM2X21vZGVfbGlzdCwKKwkJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobWF4MTIzNl9tb2RlX2xpc3QpLAorCQkuZGVmYXVsdF9tb2RlID0gczB0bzMsCisJCS5pbmZvID0gJm1heDEyMzhfaW5mbywKKwkJLmNoYW5uZWxzID0gbWF4MTIzNl9jaGFubmVscywKKwkJLm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUobWF4MTIzNl9jaGFubmVscyksCisJfSwKKwlbbWF4MTIzN10gPSB7CisJCS5iaXRzID0gMTIsCisJCS5pbnRfdnJlZl9tdiA9IDIwNDgsCisJCS5tb2RlX2xpc3QgPSBtYXgxMjM2X21vZGVfbGlzdCwKKwkJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobWF4MTIzNl9tb2RlX2xpc3QpLAorCQkuZGVmYXVsdF9tb2RlID0gczB0bzMsCisJCS5pbmZvID0gJm1heDEyMzhfaW5mbywKKwkJLmNoYW5uZWxzID0gbWF4MTIzNl9jaGFubmVscywKKwkJLm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUobWF4MTIzNl9jaGFubmVscyksCisJfSwKKwlbbWF4MTIzOF0gPSB7CisJCS5iaXRzID0gMTIsCisJCS5pbnRfdnJlZl9tdiA9IDQwOTYsCisJCS5tb2RlX2xpc3QgPSBtYXgxMjM4X21vZGVfbGlzdCwKKwkJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobWF4MTIzOF9tb2RlX2xpc3QpLAorCQkuZGVmYXVsdF9tb2RlID0gczB0bzExLAorCQkuaW5mbyA9ICZtYXgxMjM4X2luZm8sCisJCS5jaGFubmVscyA9IG1heDEyMzhfY2hhbm5lbHMsCisJCS5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKG1heDEyMzhfY2hhbm5lbHMpLAorCX0sCisJW21heDEyMzldID0geworCQkuYml0cyA9IDEyLAorCQkuaW50X3ZyZWZfbXYgPSAyMDQ4LAorCQkubW9kZV9saXN0ID0gbWF4MTIzOF9tb2RlX2xpc3QsCisJCS5udW1fbW9kZXMgPSBBUlJBWV9TSVpFKG1heDEyMzhfbW9kZV9saXN0KSwKKwkJLmRlZmF1bHRfbW9kZSA9IHMwdG8xMSwKKwkJLmluZm8gPSAmbWF4MTIzOF9pbmZvLAorCQkuY2hhbm5lbHMgPSBtYXgxMjM4X2NoYW5uZWxzLAorCQkubnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShtYXgxMjM4X2NoYW5uZWxzKSwKKwl9LAorCVttYXgxMTYwMF0gPSB7CisJCS5iaXRzID0gOCwKKwkJLmludF92cmVmX212ID0gNDA5NiwKKwkJLm1vZGVfbGlzdCA9IG1heDExNjA3X21vZGVfbGlzdCwKKwkJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobWF4MTE2MDdfbW9kZV9saXN0KSwKKwkJLmRlZmF1bHRfbW9kZSA9IHMwdG8zLAorCQkuaW5mbyA9ICZtYXgxMjM4X2luZm8sCisJCS5jaGFubmVscyA9IG1heDEwMzZfY2hhbm5lbHMsCisJCS5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKG1heDEwMzZfY2hhbm5lbHMpLAorCX0sCisJW21heDExNjAxXSA9IHsKKwkJLmJpdHMgPSA4LAorCQkuaW50X3ZyZWZfbXYgPSAyMDQ4LAorCQkubW9kZV9saXN0ID0gbWF4MTE2MDdfbW9kZV9saXN0LAorCQkubnVtX21vZGVzID0gQVJSQVlfU0laRShtYXgxMTYwN19tb2RlX2xpc3QpLAorCQkuZGVmYXVsdF9tb2RlID0gczB0bzMsCisJCS5pbmZvID0gJm1heDEyMzhfaW5mbywKKwkJLmNoYW5uZWxzID0gbWF4MTAzNl9jaGFubmVscywKKwkJLm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUobWF4MTAzNl9jaGFubmVscyksCisJfSwKKwlbbWF4MTE2MDJdID0geworCQkuYml0cyA9IDgsCisJCS5pbnRfdnJlZl9tdiA9IDQwOTYsCisJCS5tb2RlX2xpc3QgPSBtYXgxMTYwOF9tb2RlX2xpc3QsCisJCS5udW1fbW9kZXMgPSBBUlJBWV9TSVpFKG1heDExNjA4X21vZGVfbGlzdCksCisJCS5kZWZhdWx0X21vZGUgPSBzMHRvNywKKwkJLmluZm8gPSAmbWF4MTIzOF9pbmZvLAorCQkuY2hhbm5lbHMgPSBtYXgxMTYwMl9jaGFubmVscywKKwkJLm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUobWF4MTE2MDJfY2hhbm5lbHMpLAorCX0sCisJW21heDExNjAzXSA9IHsKKwkJLmJpdHMgPSA4LAorCQkuaW50X3ZyZWZfbXYgPSAyMDQ4LAorCQkubW9kZV9saXN0ID0gbWF4MTE2MDhfbW9kZV9saXN0LAorCQkubnVtX21vZGVzID0gQVJSQVlfU0laRShtYXgxMTYwOF9tb2RlX2xpc3QpLAorCQkuZGVmYXVsdF9tb2RlID0gczB0bzcsCisJCS5pbmZvID0gJm1heDEyMzhfaW5mbywKKwkJLmNoYW5uZWxzID0gbWF4MTE2MDJfY2hhbm5lbHMsCisJCS5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKG1heDExNjAyX2NoYW5uZWxzKSwKKwl9LAorCVttYXgxMTYwNF0gPSB7CisJCS5iaXRzID0gOCwKKwkJLmludF92cmVmX212ID0gNDA5OCwKKwkJLm1vZGVfbGlzdCA9IG1heDEyMzhfbW9kZV9saXN0LAorCQkubnVtX21vZGVzID0gQVJSQVlfU0laRShtYXgxMjM4X21vZGVfbGlzdCksCisJCS5kZWZhdWx0X21vZGUgPSBzMHRvMTEsCisJCS5pbmZvID0gJm1heDEyMzhfaW5mbywKKwkJLmNoYW5uZWxzID0gbWF4MTIzOF9jaGFubmVscywKKwkJLm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUobWF4MTIzOF9jaGFubmVscyksCisJfSwKKwlbbWF4MTE2MDVdID0geworCQkuYml0cyA9IDgsCisJCS5pbnRfdnJlZl9tdiA9IDIwNDgsCisJCS5tb2RlX2xpc3QgPSBtYXgxMjM4X21vZGVfbGlzdCwKKwkJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobWF4MTIzOF9tb2RlX2xpc3QpLAorCQkuZGVmYXVsdF9tb2RlID0gczB0bzExLAorCQkuaW5mbyA9ICZtYXgxMjM4X2luZm8sCisJCS5jaGFubmVscyA9IG1heDEyMzhfY2hhbm5lbHMsCisJCS5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKG1heDEyMzhfY2hhbm5lbHMpLAorCX0sCisJW21heDExNjA2XSA9IHsKKwkJLmJpdHMgPSAxMCwKKwkJLmludF92cmVmX212ID0gNDA5NiwKKwkJLm1vZGVfbGlzdCA9IG1heDExNjA3X21vZGVfbGlzdCwKKwkJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobWF4MTE2MDdfbW9kZV9saXN0KSwKKwkJLmRlZmF1bHRfbW9kZSA9IHMwdG8zLAorCQkuaW5mbyA9ICZtYXgxMjM4X2luZm8sCisJCS5jaGFubmVscyA9IG1heDExMzZfY2hhbm5lbHMsCisJCS5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKG1heDExMzZfY2hhbm5lbHMpLAorCX0sCisJW21heDExNjA3XSA9IHsKKwkJLmJpdHMgPSAxMCwKKwkJLmludF92cmVmX212ID0gMjA0OCwKKwkJLm1vZGVfbGlzdCA9IG1heDExNjA3X21vZGVfbGlzdCwKKwkJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobWF4MTE2MDdfbW9kZV9saXN0KSwKKwkJLmRlZmF1bHRfbW9kZSA9IHMwdG8zLAorCQkuaW5mbyA9ICZtYXgxMjM4X2luZm8sCisJCS5jaGFubmVscyA9IG1heDExMzZfY2hhbm5lbHMsCisJCS5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKG1heDExMzZfY2hhbm5lbHMpLAorCX0sCisJW21heDExNjA4XSA9IHsKKwkJLmJpdHMgPSAxMCwKKwkJLmludF92cmVmX212ID0gNDA5NiwKKwkJLm1vZGVfbGlzdCA9IG1heDExNjA4X21vZGVfbGlzdCwKKwkJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobWF4MTE2MDhfbW9kZV9saXN0KSwKKwkJLmRlZmF1bHRfbW9kZSA9IHMwdG83LAorCQkuaW5mbyA9ICZtYXgxMjM4X2luZm8sCisJCS5jaGFubmVscyA9IG1heDExNjA4X2NoYW5uZWxzLAorCQkubnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShtYXgxMTYwOF9jaGFubmVscyksCisJfSwKKwlbbWF4MTE2MDldID0geworCQkuYml0cyA9IDEwLAorCQkuaW50X3ZyZWZfbXYgPSAyMDQ4LAorCQkubW9kZV9saXN0ID0gbWF4MTE2MDhfbW9kZV9saXN0LAorCQkubnVtX21vZGVzID0gQVJSQVlfU0laRShtYXgxMTYwOF9tb2RlX2xpc3QpLAorCQkuZGVmYXVsdF9tb2RlID0gczB0bzcsCisJCS5pbmZvID0gJm1heDEyMzhfaW5mbywKKwkJLmNoYW5uZWxzID0gbWF4MTE2MDhfY2hhbm5lbHMsCisJCS5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKG1heDExNjA4X2NoYW5uZWxzKSwKKwl9LAorCVttYXgxMTYxMF0gPSB7CisJCS5iaXRzID0gMTAsCisJCS5pbnRfdnJlZl9tdiA9IDQwOTgsCisJCS5tb2RlX2xpc3QgPSBtYXgxMjM4X21vZGVfbGlzdCwKKwkJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobWF4MTIzOF9tb2RlX2xpc3QpLAorCQkuZGVmYXVsdF9tb2RlID0gczB0bzExLAorCQkuaW5mbyA9ICZtYXgxMjM4X2luZm8sCisJCS5jaGFubmVscyA9IG1heDEyMzhfY2hhbm5lbHMsCisJCS5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKG1heDEyMzhfY2hhbm5lbHMpLAorCX0sCisJW21heDExNjExXSA9IHsKKwkJLmJpdHMgPSAxMCwKKwkJLmludF92cmVmX212ID0gMjA0OCwKKwkJLm1vZGVfbGlzdCA9IG1heDEyMzhfbW9kZV9saXN0LAorCQkubnVtX21vZGVzID0gQVJSQVlfU0laRShtYXgxMjM4X21vZGVfbGlzdCksCisJCS5kZWZhdWx0X21vZGUgPSBzMHRvMTEsCisJCS5pbmZvID0gJm1heDEyMzhfaW5mbywKKwkJLmNoYW5uZWxzID0gbWF4MTIzOF9jaGFubmVscywKKwkJLm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUobWF4MTIzOF9jaGFubmVscyksCisJfSwKKwlbbWF4MTE2MTJdID0geworCQkuYml0cyA9IDEyLAorCQkuaW50X3ZyZWZfbXYgPSA0MDk2LAorCQkubW9kZV9saXN0ID0gbWF4MTE2MDdfbW9kZV9saXN0LAorCQkubnVtX21vZGVzID0gQVJSQVlfU0laRShtYXgxMTYwN19tb2RlX2xpc3QpLAorCQkuZGVmYXVsdF9tb2RlID0gczB0bzMsCisJCS5pbmZvID0gJm1heDEyMzhfaW5mbywKKwkJLmNoYW5uZWxzID0gbWF4MTM2M19jaGFubmVscywKKwkJLm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUobWF4MTM2M19jaGFubmVscyksCisJfSwKKwlbbWF4MTE2MTNdID0geworCQkuYml0cyA9IDEyLAorCQkuaW50X3ZyZWZfbXYgPSAyMDQ4LAorCQkubW9kZV9saXN0ID0gbWF4MTE2MDdfbW9kZV9saXN0LAorCQkubnVtX21vZGVzID0gQVJSQVlfU0laRShtYXgxMTYwN19tb2RlX2xpc3QpLAorCQkuZGVmYXVsdF9tb2RlID0gczB0bzMsCisJCS5pbmZvID0gJm1heDEyMzhfaW5mbywKKwkJLmNoYW5uZWxzID0gbWF4MTM2M19jaGFubmVscywKKwkJLm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUobWF4MTM2M19jaGFubmVscyksCisJfSwKKwlbbWF4MTE2MTRdID0geworCQkuYml0cyA9IDEyLAorCQkuaW50X3ZyZWZfbXYgPSA0MDk2LAorCQkubW9kZV9saXN0ID0gbWF4MTE2MDhfbW9kZV9saXN0LAorCQkubnVtX21vZGVzID0gQVJSQVlfU0laRShtYXgxMTYwOF9tb2RlX2xpc3QpLAorCQkuZGVmYXVsdF9tb2RlID0gczB0bzcsCisJCS5pbmZvID0gJm1heDEyMzhfaW5mbywKKwkJLmNoYW5uZWxzID0gbWF4MTE2MTRfY2hhbm5lbHMsCisJCS5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKG1heDExNjE0X2NoYW5uZWxzKSwKKwl9LAorCVttYXgxMTYxNV0gPSB7CisJCS5iaXRzID0gMTIsCisJCS5pbnRfdnJlZl9tdiA9IDIwNDgsCisJCS5tb2RlX2xpc3QgPSBtYXgxMTYwOF9tb2RlX2xpc3QsCisJCS5udW1fbW9kZXMgPSBBUlJBWV9TSVpFKG1heDExNjA4X21vZGVfbGlzdCksCisJCS5kZWZhdWx0X21vZGUgPSBzMHRvNywKKwkJLmluZm8gPSAmbWF4MTIzOF9pbmZvLAorCQkuY2hhbm5lbHMgPSBtYXgxMTYxNF9jaGFubmVscywKKwkJLm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUobWF4MTE2MTRfY2hhbm5lbHMpLAorCX0sCisJW21heDExNjE2XSA9IHsKKwkJLmJpdHMgPSAxMiwKKwkJLmludF92cmVmX212ID0gNDA5OCwKKwkJLm1vZGVfbGlzdCA9IG1heDEyMzhfbW9kZV9saXN0LAorCQkubnVtX21vZGVzID0gQVJSQVlfU0laRShtYXgxMjM4X21vZGVfbGlzdCksCisJCS5kZWZhdWx0X21vZGUgPSBzMHRvMTEsCisJCS5pbmZvID0gJm1heDEyMzhfaW5mbywKKwkJLmNoYW5uZWxzID0gbWF4MTIzOF9jaGFubmVscywKKwkJLm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUobWF4MTIzOF9jaGFubmVscyksCisJfSwKKwlbbWF4MTE2MTddID0geworCQkuYml0cyA9IDEyLAorCQkuaW50X3ZyZWZfbXYgPSAyMDQ4LAorCQkubW9kZV9saXN0ID0gbWF4MTIzOF9tb2RlX2xpc3QsCisJCS5udW1fbW9kZXMgPSBBUlJBWV9TSVpFKG1heDEyMzhfbW9kZV9saXN0KSwKKwkJLmRlZmF1bHRfbW9kZSA9IHMwdG8xMSwKKwkJLmluZm8gPSAmbWF4MTIzOF9pbmZvLAorCQkuY2hhbm5lbHMgPSBtYXgxMjM4X2NoYW5uZWxzLAorCQkubnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShtYXgxMjM4X2NoYW5uZWxzKSwKKwl9LAorCVttYXgxMTY0NF0gPSB7CisJCS5iaXRzID0gMTIsCisJCS5pbnRfdnJlZl9tdiA9IDIwNDgsCisJCS5tb2RlX2xpc3QgPSBtYXgxMTY0NF9tb2RlX2xpc3QsCisJCS5udW1fbW9kZXMgPSBBUlJBWV9TSVpFKG1heDExNjQ0X21vZGVfbGlzdCksCisJCS5kZWZhdWx0X21vZGUgPSBzMHRvMSwKKwkJLmluZm8gPSAmbWF4MTIzOF9pbmZvLAorCQkuY2hhbm5lbHMgPSBtYXgxMTY0NF9jaGFubmVscywKKwkJLm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUobWF4MTE2NDRfY2hhbm5lbHMpLAorCX0sCisJW21heDExNjQ1XSA9IHsKKwkJLmJpdHMgPSAxMiwKKwkJLmludF92cmVmX212ID0gNDA5NiwKKwkJLm1vZGVfbGlzdCA9IG1heDExNjQ0X21vZGVfbGlzdCwKKwkJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobWF4MTE2NDRfbW9kZV9saXN0KSwKKwkJLmRlZmF1bHRfbW9kZSA9IHMwdG8xLAorCQkuaW5mbyA9ICZtYXgxMjM4X2luZm8sCisJCS5jaGFubmVscyA9IG1heDExNjQ0X2NoYW5uZWxzLAorCQkubnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShtYXgxMTY0NF9jaGFubmVscyksCisJfSwKKwlbbWF4MTE2NDZdID0geworCQkuYml0cyA9IDEwLAorCQkuaW50X3ZyZWZfbXYgPSAyMDQ4LAorCQkubW9kZV9saXN0ID0gbWF4MTE2NDRfbW9kZV9saXN0LAorCQkubnVtX21vZGVzID0gQVJSQVlfU0laRShtYXgxMTY0NF9tb2RlX2xpc3QpLAorCQkuZGVmYXVsdF9tb2RlID0gczB0bzEsCisJCS5pbmZvID0gJm1heDEyMzhfaW5mbywKKwkJLmNoYW5uZWxzID0gbWF4MTE2NDZfY2hhbm5lbHMsCisJCS5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKG1heDExNjQ2X2NoYW5uZWxzKSwKKwl9LAorCVttYXgxMTY0N10gPSB7CisJCS5iaXRzID0gMTAsCisJCS5pbnRfdnJlZl9tdiA9IDQwOTYsCisJCS5tb2RlX2xpc3QgPSBtYXgxMTY0NF9tb2RlX2xpc3QsCisJCS5udW1fbW9kZXMgPSBBUlJBWV9TSVpFKG1heDExNjQ0X21vZGVfbGlzdCksCisJCS5kZWZhdWx0X21vZGUgPSBzMHRvMSwKKwkJLmluZm8gPSAmbWF4MTIzOF9pbmZvLAorCQkuY2hhbm5lbHMgPSBtYXgxMTY0Nl9jaGFubmVscywKKwkJLm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUobWF4MTE2NDZfY2hhbm5lbHMpLAorCX0sCit9OworCisKKwogc3RhdGljIGludCBtYXgxMzYzX2luaXRpYWxfc2V0dXAoc3RydWN0IG1heDEzNjNfc3RhdGUgKnN0KQogewogCXN0LT5zZXR1cGJ5dGUgPSBNQVgxMzYzX1NFVFVQX0FJTjNfSVNfQUlOM19SRUZfSVNfVkRECkBAIC0xNjc1LDEyNiArMTI1MCwxMTYgQEAKIAkJCQkgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJaW50IHJldCwgaSwgcmVnZG9uZSA9IDA7Ci0Jc3RydWN0IG1heDEzNjNfc3RhdGUgKnN0ID0ga3phbGxvYyhzaXplb2YoKnN0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHN0ID09IE5VTEwpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJvcl9yZXQ7Ci0JfQorCXN0cnVjdCBtYXgxMzYzX3N0YXRlICpzdDsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2OworCXN0cnVjdCByZWd1bGF0b3IgKnJlZzsKIAotCS8qIHRoaXMgaXMgb25seSB1c2VkIGZvciBkZXZpY2UgcmVtb3ZhbCBwdXJwb3NlcyAqLwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHN0KTsKLQotCWF0b21pY19zZXQoJnN0LT5wcm90ZWN0X3JpbmcsIDApOwotCi0Jc3QtPmNoaXBfaW5mbyA9ICZtYXgxMzYzX2NoaXBfaW5mb190YmxbaWQtPmRyaXZlcl9kYXRhXTsKLQlzdC0+cmVnID0gcmVndWxhdG9yX2dldCgmY2xpZW50LT5kZXYsICJ2Y2MiKTsKLQlpZiAoIUlTX0VSUihzdC0+cmVnKSkgewotCQlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHN0LT5yZWcpOworCXJlZyA9IHJlZ3VsYXRvcl9nZXQoJmNsaWVudC0+ZGV2LCAidmNjIik7CisJaWYgKCFJU19FUlIocmVnKSkgeworCQlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHJlZyk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycm9yX3B1dF9yZWc7CiAJfQotCXN0LT5jbGllbnQgPSBjbGllbnQ7CiAKLQlzdC0+aW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgpOwotCWlmIChzdC0+aW5kaW9fZGV2ID09IE5VTEwpIHsKKwlpbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKHNpemVvZihzdHJ1Y3QgbWF4MTM2M19zdGF0ZSkpOworCWlmIChpbmRpb19kZXYgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX2Rpc2FibGVfcmVnOwogCX0KKwlzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CisJc3QtPnJlZyA9IHJlZzsKKwkvKiB0aGlzIGlzIG9ubHkgdXNlZCBmb3IgZGV2aWNlIHJlbW92YWwgcHVycG9zZXMgKi8KKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBpbmRpb19kZXYpOwogCi0Jc3QtPmluZGlvX2Rldi0+YXZhaWxhYmxlX3NjYW5fbWFza3MKLQkJPSBremFsbG9jKHNpemVvZigqc3QtPmluZGlvX2Rldi0+YXZhaWxhYmxlX3NjYW5fbWFza3MpKgorCXN0LT5jaGlwX2luZm8gPSAmbWF4MTM2M19jaGlwX2luZm9fdGJsW2lkLT5kcml2ZXJfZGF0YV07CisJc3QtPmNsaWVudCA9IGNsaWVudDsKKworCWluZGlvX2Rldi0+YXZhaWxhYmxlX3NjYW5fbWFza3MKKwkJPSBremFsbG9jKHNpemVvZigqaW5kaW9fZGV2LT5hdmFpbGFibGVfc2Nhbl9tYXNrcykqCiAJCQkgIChzdC0+Y2hpcF9pbmZvLT5udW1fbW9kZXMgKyAxKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzdC0+aW5kaW9fZGV2LT5hdmFpbGFibGVfc2Nhbl9tYXNrcykgeworCWlmICghaW5kaW9fZGV2LT5hdmFpbGFibGVfc2Nhbl9tYXNrcykgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX2ZyZWVfZGV2aWNlOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBzdC0+Y2hpcF9pbmZvLT5udW1fbW9kZXM7IGkrKykKLQkJc3QtPmluZGlvX2Rldi0+YXZhaWxhYmxlX3NjYW5fbWFza3NbaV0gPQorCQlpbmRpb19kZXYtPmF2YWlsYWJsZV9zY2FuX21hc2tzW2ldID0KIAkJCW1heDEzNjNfbW9kZV90YWJsZVtzdC0+Y2hpcF9pbmZvLT5tb2RlX2xpc3RbaV1dCiAJCQkubW9kZW1hc2s7CiAJLyogRXN0YWJpbGlzaCB0aGF0IHRoZSBpaW9fZGV2IGlzIGEgY2hpbGQgb2YgdGhlIGkyYyBkZXZpY2UgKi8KLQlzdC0+aW5kaW9fZGV2LT5kZXYucGFyZW50ID0gJmNsaWVudC0+ZGV2OwotCXN0LT5pbmRpb19kZXYtPmF0dHJzID0gc3QtPmNoaXBfaW5mby0+ZGV2X2F0dHJzOworCWluZGlvX2Rldi0+ZGV2LnBhcmVudCA9ICZjbGllbnQtPmRldjsKKwlpbmRpb19kZXYtPm5hbWUgPSBpZC0+bmFtZTsKIAotCS8qIFRvZG86IHRoaXMgc2hvdWxkbid0IGJlIGhlcmUuICovCi0Jc3QtPmluZGlvX2Rldi0+ZGV2X2RhdGEgPSAodm9pZCAqKShzdCk7Ci0Jc3QtPmluZGlvX2Rldi0+ZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFOwotCXN0LT5pbmRpb19kZXYtPm1vZGVzID0gSU5ESU9fRElSRUNUX01PREU7Ci0JaWYgKHN0LT5jaGlwX2luZm8tPm1vbml0b3JfbW9kZSAmJiBjbGllbnQtPmlycSkgewotCQlzdC0+aW5kaW9fZGV2LT5udW1faW50ZXJydXB0X2xpbmVzID0gMTsKLQkJc3QtPmluZGlvX2Rldi0+ZXZlbnRfYXR0cnMKLQkJCT0gJm1heDEzNjNfZXZlbnRfYXR0cmlidXRlX2dyb3VwOwotCX0KLQorCWluZGlvX2Rldi0+aW5mbyA9IHN0LT5jaGlwX2luZm8tPmluZm87CisJaW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOwogCXJldCA9IG1heDEzNjNfaW5pdGlhbF9zZXR1cChzdCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3JfZnJlZV9hdmFpbGFibGVfc2Nhbl9tYXNrczsKKworCXJldCA9IG1heDEzNjNfcmVnaXN0ZXJfcmluZ19mdW5jc19hbmRfaW5pdChpbmRpb19kZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfZnJlZV9hdmFpbGFibGVfc2Nhbl9tYXNrczsKIAotCXJldCA9IG1heDEzNjNfcmVnaXN0ZXJfcmluZ19mdW5jc19hbmRfaW5pdChzdC0+aW5kaW9fZGV2KTsKLQlpZiAocmV0KQotCQlnb3RvIGVycm9yX2ZyZWVfYXZhaWxhYmxlX3NjYW5fbWFza3M7Ci0KLQlyZXQgPSBpaW9fZGV2aWNlX3JlZ2lzdGVyKHN0LT5pbmRpb19kZXYpOworCXJldCA9IGlpb19kZXZpY2VfcmVnaXN0ZXIoaW5kaW9fZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycm9yX2NsZWFudXBfcmluZzsKIAlyZWdkb25lID0gMTsKLQlyZXQgPSBpaW9fcmluZ19idWZmZXJfcmVnaXN0ZXIoc3QtPmluZGlvX2Rldi0+cmluZywgMCk7CisJcmV0ID0gaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyX2V4KGluZGlvX2Rldi0+cmluZywgMCwKKwkJCQkJICBzdC0+Y2hpcF9pbmZvLT5jaGFubmVscywKKwkJCQkJICBzdC0+Y2hpcF9pbmZvLT5udW1fY2hhbm5lbHMpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfY2xlYW51cF9yaW5nOwogCi0JaWYgKHN0LT5jaGlwX2luZm8tPm1vbml0b3JfbW9kZSAmJiBjbGllbnQtPmlycSkgewotCQlyZXQgPSBpaW9fcmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoY2xpZW50LT5pcnEsCi0JCQkJCQlzdC0+aW5kaW9fZGV2LAotCQkJCQkJMCwKLQkJCQkJCUlSUUZfVFJJR0dFUl9SSVNJTkcsCi0JCQkJCQljbGllbnQtPm5hbWUpOworCWlmIChjbGllbnQtPmlycSkgeworCQlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShzdC0+Y2xpZW50LT5pcnEsCisJCQkJCSAgIE5VTEwsCisJCQkJCSAgICZtYXgxMzYzX2V2ZW50X2hhbmRsZXIsCisJCQkJCSAgIElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX09ORVNIT1QsCisJCQkJCSAgICJtYXgxMzYzX2V2ZW50IiwKKwkJCQkJICAgaW5kaW9fZGV2KTsKKwogCQlpZiAocmV0KQogCQkJZ290byBlcnJvcl91bmluaXRfcmluZzsKLQotCQlJTklUX1dPUksoJnN0LT50aHJlc2hfd29yaywgbWF4MTM2M190aHJlc2hfaGFuZGxlcl9iaCk7CiAJfQogCiAJcmV0dXJuIDA7CiBlcnJvcl91bmluaXRfcmluZzoKLQlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihzdC0+aW5kaW9fZGV2LT5yaW5nKTsKKwlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihpbmRpb19kZXYtPnJpbmcpOwogZXJyb3JfY2xlYW51cF9yaW5nOgotCW1heDEzNjNfcmluZ19jbGVhbnVwKHN0LT5pbmRpb19kZXYpOworCW1heDEzNjNfcmluZ19jbGVhbnVwKGluZGlvX2Rldik7CiBlcnJvcl9mcmVlX2F2YWlsYWJsZV9zY2FuX21hc2tzOgotCWtmcmVlKHN0LT5pbmRpb19kZXYtPmF2YWlsYWJsZV9zY2FuX21hc2tzKTsKKwlrZnJlZShpbmRpb19kZXYtPmF2YWlsYWJsZV9zY2FuX21hc2tzKTsKIGVycm9yX2ZyZWVfZGV2aWNlOgogCWlmICghcmVnZG9uZSkKLQkJaWlvX2ZyZWVfZGV2aWNlKHN0LT5pbmRpb19kZXYpOworCQlpaW9fZnJlZV9kZXZpY2UoaW5kaW9fZGV2KTsKIAllbHNlCi0JCWlpb19kZXZpY2VfdW5yZWdpc3RlcihzdC0+aW5kaW9fZGV2KTsKKwkJaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CiBlcnJvcl9kaXNhYmxlX3JlZzoKIAlpZiAoIUlTX0VSUihzdC0+cmVnKSkKIAkJcmVndWxhdG9yX2Rpc2FibGUoc3QtPnJlZyk7CiBlcnJvcl9wdXRfcmVnOgogCWlmICghSVNfRVJSKHN0LT5yZWcpKQogCQlyZWd1bGF0b3JfcHV0KHN0LT5yZWcpOwotCWtmcmVlKHN0KTsKIAotZXJyb3JfcmV0OgogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgbWF4MTM2M19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgbWF4MTM2M19zdGF0ZSAqc3QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gc3QtPmluZGlvX2RldjsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IG1heDEzNjNfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKKwlzdHJ1Y3QgcmVndWxhdG9yICpyZWcgPSBzdC0+cmVnOwogCi0JaWYgKHN0LT5jaGlwX2luZm8tPm1vbml0b3JfbW9kZSAmJiBjbGllbnQtPmlycSkKLQkJaWlvX3VucmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoc3QtPmluZGlvX2RldiwgMCk7CisJaWYgKGNsaWVudC0+aXJxKQorCQlmcmVlX2lycShzdC0+Y2xpZW50LT5pcnEsIGluZGlvX2Rldik7CiAJaWlvX3JpbmdfYnVmZmVyX3VucmVnaXN0ZXIoaW5kaW9fZGV2LT5yaW5nKTsKIAltYXgxMzYzX3JpbmdfY2xlYW51cChpbmRpb19kZXYpOwotCWtmcmVlKHN0LT5pbmRpb19kZXYtPmF2YWlsYWJsZV9zY2FuX21hc2tzKTsKLQlpaW9fZGV2aWNlX3VucmVnaXN0ZXIoaW5kaW9fZGV2KTsKLQlpZiAoIUlTX0VSUihzdC0+cmVnKSkgewotCQlyZWd1bGF0b3JfZGlzYWJsZShzdC0+cmVnKTsKLQkJcmVndWxhdG9yX3B1dChzdC0+cmVnKTsKKwlrZnJlZShpbmRpb19kZXYtPmF2YWlsYWJsZV9zY2FuX21hc2tzKTsKKwlpZiAoIUlTX0VSUihyZWcpKSB7CisJCXJlZ3VsYXRvcl9kaXNhYmxlKHJlZyk7CisJCXJlZ3VsYXRvcl9wdXQocmVnKTsKIAl9Ci0Ja2ZyZWUoc3QpOworCWlpb19kZXZpY2VfdW5yZWdpc3RlcihpbmRpb19kZXYpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9tYXgxMzYzX3JpbmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL21heDEzNjNfcmluZy5jCmluZGV4IGQzNmZjYzYuLmY0M2JlZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL21heDEzNjNfcmluZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL21heDEzNjNfcmluZy5jCkBAIC05LDggKzksNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMjcsMTAgKzI1LDkgQEAKIAogI2luY2x1ZGUgIm1heDEzNjMuaCIKIAotLyogVG9kbzogdGVzdCB0aGlzICovCiBpbnQgbWF4MTM2M19zaW5nbGVfY2hhbm5lbF9mcm9tX3JpbmcobG9uZyBtYXNrLCBzdHJ1Y3QgbWF4MTM2M19zdGF0ZSAqc3QpCiB7Ci0Jc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyA9IHN0LT5pbmRpb19kZXYtPnJpbmc7CisJc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyA9IGlpb19wcml2X3RvX2RldihzdCktPnJpbmc7CiAJaW50IGNvdW50ID0gMCwgcmV0OwogCXU4ICpyaW5nX2RhdGE7CiAJaWYgKCEoc3QtPmN1cnJlbnRfbW9kZS0+bW9kZW1hc2sgJiBtYXNrKSkgewpAQCAtMzgsMTIgKzM1LDEzIEBACiAJCWdvdG8gZXJyb3JfcmV0OwogCX0KIAotCXJpbmdfZGF0YSA9IGttYWxsb2MocmluZy0+YWNjZXNzLmdldF9ieXRlc19wZXJfZGF0dW0ocmluZyksIEdGUF9LRVJORUwpOworCXJpbmdfZGF0YSA9IGttYWxsb2MocmluZy0+YWNjZXNzLT5nZXRfYnl0ZXNfcGVyX2RhdHVtKHJpbmcpLAorCQkJICAgIEdGUF9LRVJORUwpOwogCWlmIChyaW5nX2RhdGEgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX3JldDsKIAl9Ci0JcmV0ID0gcmluZy0+YWNjZXNzLnJlYWRfbGFzdChyaW5nLCByaW5nX2RhdGEpOworCXJldCA9IHJpbmctPmFjY2Vzcy0+cmVhZF9sYXN0KHJpbmcsIHJpbmdfZGF0YSk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl9mcmVlX3JpbmdfZGF0YTsKIAkvKiBOZWVkIGEgY291bnQgb2YgY2hhbm5lbHMgcHJpb3IgdG8gdGhpcyBvbmUgKi8KQEAgLTY1LDYgKzYzLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCisKIC8qKgogICogbWF4MTM2M19yaW5nX3ByZWVuYWJsZSgpIC0gc2V0dXAgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIHJpbmcgYmVmb3JlIGVuYWJsaW5nCiAgKgpAQCAtNzQsOSArNzMsOSBAQAogICoqLwogc3RhdGljIGludCBtYXgxMzYzX3JpbmdfcHJlZW5hYmxlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCiB7Ci0Jc3RydWN0IG1heDEzNjNfc3RhdGUgKnN0ID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKwlzdHJ1Y3QgbWF4MTM2M19zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwogCXN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcgPSBpbmRpb19kZXYtPnJpbmc7Ci0Jc2l6ZV90IGRfc2l6ZTsKKwlzaXplX3QgZF9zaXplID0gMDsKIAl1bnNpZ25lZCBsb25nIG51bXZhbHM7CiAKIAkvKgpAQCAtOTEsNTAgKzkwLDI2IEBACiAJbWF4MTM2M19zZXRfc2Nhbl9tb2RlKHN0KTsKIAogCW51bXZhbHMgPSBod2VpZ2h0X2xvbmcoc3QtPmN1cnJlbnRfbW9kZS0+bW9kZW1hc2spOwotCWlmIChyaW5nLT5hY2Nlc3Muc2V0X2J5dGVzX3Blcl9kYXR1bSkgeworCWlmIChyaW5nLT5hY2Nlc3MtPnNldF9ieXRlc19wZXJfZGF0dW0pIHsKKwkJaWYgKHJpbmctPnNjYW5fdGltZXN0YW1wKQorCQkJZF9zaXplICs9IHNpemVvZihzNjQpOwogCQlpZiAoc3QtPmNoaXBfaW5mby0+Yml0cyAhPSA4KQotCQkJZF9zaXplID0gbnVtdmFscyoyICsgc2l6ZW9mKHM2NCk7CisJCQlkX3NpemUgKz0gbnVtdmFscyoyOwogCQllbHNlCi0JCQlkX3NpemUgPSBudW12YWxzICsgc2l6ZW9mKHM2NCk7Ci0JCWlmIChkX3NpemUgJSA4KQorCQkJZF9zaXplICs9IG51bXZhbHM7CisJCWlmIChyaW5nLT5zY2FuX3RpbWVzdGFtcCAmJiAoZF9zaXplICUgOCkpCiAJCQlkX3NpemUgKz0gOCAtIChkX3NpemUgJSA4KTsKLQkJcmluZy0+YWNjZXNzLnNldF9ieXRlc19wZXJfZGF0dW0ocmluZywgZF9zaXplKTsKKwkJcmluZy0+YWNjZXNzLT5zZXRfYnl0ZXNfcGVyX2RhdHVtKHJpbmcsIGRfc2l6ZSk7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLQotLyoqCi0gKiBtYXgxMzYzX3BvbGxfZnVuY190aCgpIC0gdGggb2YgdHJpZ2dlciBsYXVuY2hlZCBwb2xsaW5nIHRvIHJpbmcgYnVmZmVyCi0gKgotICogQXMgc2FtcGxpbmcgb25seSBvY2N1cnMgb24gaTJjIGNvbW1zIG9jY3VycmluZywgbGVhdmUgdGltZXN0YW1waW5nIHVudGlsCi0gKiB0aGVuLiAgU29tZSB0cmlnZ2VycyB3aWxsIGdlbmVyYXRlIHRoZWlyIG93biB0aW1lIHN0YW1wLiAgQ3VycmVudGx5Ci0gKiB0aGVyZSBpcyBubyB3YXkgb2Ygbm90aWZ5aW5nIHRoZW0gd2hlbiBubyBvbmUgY2FyZXMuCi0gKiovCi1zdGF0aWMgdm9pZCBtYXgxMzYzX3BvbGxfZnVuY190aChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LCBzNjQgdGltZSkKK3N0YXRpYyBpcnFyZXR1cm5fdCBtYXgxMzYzX3RyaWdnZXJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpwKQogewotCXN0cnVjdCBtYXgxMzYzX3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7Ci0KLQlzY2hlZHVsZV93b3JrKCZzdC0+cG9sbF93b3JrKTsKLQotCXJldHVybjsKLX0KLS8qKgotICogbWF4MTM2M19wb2xsX2JoX3RvX3JpbmcoKSAtIGJoIG9mIHRyaWdnZXIgbGF1bmNoZWQgcG9sbGluZyB0byByaW5nIGJ1ZmZlcgotICogQHdvcmtfczoJdGhlIHdvcmsgc3RydWN0IHRocm91Z2ggd2hpY2ggdGhpcyB3YXMgc2NoZWR1bGVkCi0gKgotICogQ3VycmVudGx5IHRoZXJlIGlzIG5vIG9wdGlvbiBpbiB0aGlzIGRyaXZlciB0byBkaXNhYmxlIHRoZSBzYXZpbmcgb2YKLSAqIHRpbWVzdGFtcHMgd2l0aGluIHRoZSByaW5nLgotICogSSB0aGluayB0aGUgb25lIGNvcHkgb2YgdGhpcyBhdCBhIHRpbWUgd2FzIHRvIGF2b2lkIHByb2JsZW1zIGlmIHRoZQotICogdHJpZ2dlciB3YXMgc2V0IGZhciB0b28gaGlnaCBhbmQgdGhlIHJlYWRzIHRoZW4gbG9ja2VkIHVwIHRoZSBjb21wdXRlci4KLSAqKi8KLXN0YXRpYyB2b2lkIG1heDEzNjNfcG9sbF9iaF90b19yaW5nKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29ya19zKQotewotCXN0cnVjdCBtYXgxMzYzX3N0YXRlICpzdCA9IGNvbnRhaW5lcl9vZih3b3JrX3MsIHN0cnVjdCBtYXgxMzYzX3N0YXRlLAotCQkJCQkJICBwb2xsX3dvcmspOwotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBzdC0+aW5kaW9fZGV2OwotCXN0cnVjdCBpaW9fc3dfcmluZ19idWZmZXIgKnN3X3JpbmcgPSBpaW9fdG9fc3dfcmluZyhpbmRpb19kZXYtPnJpbmcpOworCXN0cnVjdCBpaW9fcG9sbF9mdW5jICpwZiA9IHA7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHBmLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG1heDEzNjNfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKIAlzNjQgdGltZV9uczsKIAlfX3U4ICpyeGJ1ZjsKIAlpbnQgYl9zZW50OwpAQCAtMTQ5LDIwICsxMjQsMTYgQEAKIAlpZiAoZF9zaXplICUgc2l6ZW9mKHM2NCkpCiAJCWRfc2l6ZSArPSBzaXplb2YoczY0KSAtIChkX3NpemUgJSBzaXplb2YoczY0KSk7CiAKLQkvKiBFbnN1cmUgb25seSBvbmUgY29weSBvZiB0aGlzIGZ1bmN0aW9uIHJ1bm5pbmcgYXQgYSB0aW1lICovCi0JaWYgKGF0b21pY19pbmNfcmV0dXJuKCZzdC0+cHJvdGVjdF9yaW5nKSA+IDEpCi0JCXJldHVybjsKLQogCS8qIE1vbml0b3IgbW9kZSBwcmV2ZW50cyByZWFkaW5nLiBXaGlsc3Qgbm90IGN1cnJlbnRseSBpbXBsZW1lbnRlZAogCSAqIG1pZ2h0IGFzIHdlbGwgaGF2ZSB0aGlzIHRlc3QgaW4gaGVyZSBpbiB0aGUgbWVhbnRpbWUgYXMgaXQgZG9lcwogCSAqIG5vIGhhcm0uCiAJICovCiAJaWYgKG51bXZhbHMgPT0gMCkKLQkJcmV0dXJuOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAKIAlyeGJ1ZiA9IGttYWxsb2MoZF9zaXplLAlHRlBfS0VSTkVMKTsKIAlpZiAocnhidWYgPT0gTlVMTCkKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT01FTTsKIAlpZiAoc3QtPmNoaXBfaW5mby0+Yml0cyAhPSA4KQogCQliX3NlbnQgPSBpMmNfbWFzdGVyX3JlY3Yoc3QtPmNsaWVudCwgcnhidWYsIG51bXZhbHMqMik7CiAJZWxzZQpAQCAtMTc0LDE2ICsxNDUsMjMgQEAKIAogCW1lbWNweShyeGJ1ZiArIGRfc2l6ZSAtIHNpemVvZihzNjQpLCAmdGltZV9ucywgc2l6ZW9mKHRpbWVfbnMpKTsKIAotCWluZGlvX2Rldi0+cmluZy0+YWNjZXNzLnN0b3JlX3RvKCZzd19yaW5nLT5idWYsIHJ4YnVmLCB0aW1lX25zKTsKKwlpbmRpb19kZXYtPnJpbmctPmFjY2Vzcy0+c3RvcmVfdG8oaW5kaW9fZGV2LT5yaW5nLCByeGJ1ZiwgdGltZV9ucyk7CiBkb25lOgorCWlpb190cmlnZ2VyX25vdGlmeV9kb25lKGluZGlvX2Rldi0+dHJpZyk7CiAJa2ZyZWUocnhidWYpOwotCWF0b21pY19kZWMoJnN0LT5wcm90ZWN0X3JpbmcpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19yaW5nX3NldHVwX29wcyBtYXgxMzYzX3Jpbmdfc2V0dXBfb3BzID0geworCS5wb3N0ZW5hYmxlID0gJmlpb190cmlnZ2VyZWRfcmluZ19wb3N0ZW5hYmxlLAorCS5wcmVlbmFibGUgPSAmbWF4MTM2M19yaW5nX3ByZWVuYWJsZSwKKwkucHJlZGlzYWJsZSA9ICZpaW9fdHJpZ2dlcmVkX3JpbmdfcHJlZGlzYWJsZSwKK307CiAKIGludCBtYXgxMzYzX3JlZ2lzdGVyX3JpbmdfZnVuY3NfYW5kX2luaXQoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKLQlzdHJ1Y3QgbWF4MTM2M19zdGF0ZSAqc3QgPSBpbmRpb19kZXYtPmRldl9kYXRhOworCXN0cnVjdCBtYXgxMzYzX3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CiAJaW50IHJldCA9IDA7CiAKIAlpbmRpb19kZXYtPnJpbmcgPSBpaW9fc3dfcmJfYWxsb2NhdGUoaW5kaW9fZGV2KTsKQEAgLTE5MSwyMiArMTY5LDI3IEBACiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3JfcmV0OwogCX0KLQkvKiBFZmZlY3RpdmVseSBzZWxlY3QgdGhlIHJpbmcgYnVmZmVyIGltcGxlbWVudGF0aW9uICovCi0JaWlvX3Jpbmdfc3dfcmVnaXN0ZXJfZnVuY3MoJmluZGlvX2Rldi0+cmluZy0+YWNjZXNzKTsKLQlyZXQgPSBpaW9fYWxsb2NfcG9sbGZ1bmMoaW5kaW9fZGV2LCBOVUxMLCAmbWF4MTM2M19wb2xsX2Z1bmNfdGgpOwotCWlmIChyZXQpCisJaW5kaW9fZGV2LT5wb2xsZnVuYyA9IGlpb19hbGxvY19wb2xsZnVuYyhOVUxMLAorCQkJCQkJICZtYXgxMzYzX3RyaWdnZXJfaGFuZGxlciwKKwkJCQkJCSBJUlFGX09ORVNIT1QsCisJCQkJCQkgaW5kaW9fZGV2LAorCQkJCQkJICIlc19jb25zdW1lciVkIiwKKwkJCQkJCSBzdC0+Y2xpZW50LT5uYW1lLAorCQkJCQkJIGluZGlvX2Rldi0+aWQpOworCWlmIChpbmRpb19kZXYtPnBvbGxmdW5jID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9kZWFsbG9jYXRlX3N3X3JiOwotCisJfQorCS8qIEVmZmVjdGl2ZWx5IHNlbGVjdCB0aGUgcmluZyBidWZmZXIgaW1wbGVtZW50YXRpb24gKi8KKwlpbmRpb19kZXYtPnJpbmctPmFjY2VzcyA9ICZyaW5nX3N3X2FjY2Vzc19mdW5jczsKIAkvKiBSaW5nIGJ1ZmZlciBmdW5jdGlvbnMgLSBoZXJlIHRyaWdnZXIgc2V0dXAgcmVsYXRlZCAqLwotCWluZGlvX2Rldi0+cmluZy0+c2Nhbl9lbF9hdHRycyA9IHN0LT5jaGlwX2luZm8tPnNjYW5fYXR0cnM7Ci0JaW5kaW9fZGV2LT5yaW5nLT5wb3N0ZW5hYmxlID0gJmlpb190cmlnZ2VyZWRfcmluZ19wb3N0ZW5hYmxlOwotCWluZGlvX2Rldi0+cmluZy0+cHJlZW5hYmxlID0gJm1heDEzNjNfcmluZ19wcmVlbmFibGU7Ci0JaW5kaW9fZGV2LT5yaW5nLT5wcmVkaXNhYmxlID0gJmlpb190cmlnZ2VyZWRfcmluZ19wcmVkaXNhYmxlOwotCUlOSVRfV09SSygmc3QtPnBvbGxfd29yaywgJm1heDEzNjNfcG9sbF9iaF90b19yaW5nKTsKKwlpbmRpb19kZXYtPnJpbmctPnNldHVwX29wcyA9ICZtYXgxMzYzX3Jpbmdfc2V0dXBfb3BzOwogCiAJLyogRmxhZyB0aGF0IHBvbGxlZCByaW5nIGJ1ZmZlcmluZyBpcyBwb3NzaWJsZSAqLwogCWluZGlvX2Rldi0+bW9kZXMgfD0gSU5ESU9fUklOR19UUklHR0VSRUQ7CisKIAlyZXR1cm4gMDsKKwogZXJyb3JfZGVhbGxvY2F0ZV9zd19yYjoKIAlpaW9fc3dfcmJfZnJlZShpbmRpb19kZXYtPnJpbmcpOwogZXJyb3JfcmV0OgpAQCAtMjIxLDYgKzIwNCw2IEBACiAJCWlpb190cmlnZ2VyX2RldHRhY2hfcG9sbF9mdW5jKGluZGlvX2Rldi0+dHJpZywKIAkJCQkJICAgICAgaW5kaW9fZGV2LT5wb2xsZnVuYyk7CiAJfQotCWtmcmVlKGluZGlvX2Rldi0+cG9sbGZ1bmMpOworCWlpb19kZWFsbG9jX3BvbGxmdW5jKGluZGlvX2Rldi0+cG9sbGZ1bmMpOwogCWlpb19zd19yYl9mcmVlKGluZGlvX2Rldi0+cmluZyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkZGFjL2FkdDczMTYuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRkYWMvYWR0NzMxNi5jCmluZGV4IGQxYjViMTMuLjcwOTdkZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRkYWMvYWR0NzMxNi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRkYWMvYWR0NzMxNi5jCkBAIC0xNzQsMTAgKzE3NCw3IEBACiAgKi8KIAogc3RydWN0IGFkdDczMTZfY2hpcF9pbmZvIHsKLQljb25zdCBjaGFyCQkqbmFtZTsKIAlzdHJ1Y3QgaWlvX2RldgkJKmluZGlvX2RldjsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJdGhyZXNoX3dvcms7Ci0JczY0CQkJbGFzdF90aW1lc3RhbXA7CiAJc3RydWN0IGFkdDczMTZfYnVzCWJ1czsKIAl1MTYJCQlsZGFjX3BpbjsKIAl1MTYJCQlpbnRfbWFzazsJLyogMHgyZiAqLwpAQCAtNDAzLDcgKzQwMCw3IEBACiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjUgLSBBSU40XG4iKTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gc3ByaW50ZihidWYsICJOL0FcbiIpOwotCX07CisJfQogfQogCiBzdGF0aWMgc3NpemVfdCBhZHQ3MzE2X3N0b3JlX2FkX2NoYW5uZWwoc3RydWN0IGRldmljZSAqZGV2LApAQCAtNDY1LDcgKzQ2Miw3IEBACiAKIAlpZiAoKGNoaXAtPmlkICYgSURfRkFNSUxZX01BU0spID09IElEX0FEVDc1WFgpCiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjAgLSBWRERcbjEgLSBJbnRlcm5hbCBUZW1wZXJhdHVyZVxuIgotCQkJCSIyIC0gRXh0ZXJuYWwgVGVtcGVyYXR1cmUgb3IgQUlOMlxuIgorCQkJCSIyIC0gRXh0ZXJuYWwgVGVtcGVyYXR1cmUgb3IgQUlOMVxuIgogCQkJCSIzIC0gQUlOMlxuNCAtIEFJTjNcbjUgLSBBSU40XG4iKTsKIAllbHNlCiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjAgLSBWRERcbjEgLSBJbnRlcm5hbCBUZW1wZXJhdHVyZVxuIgpAQCAtODkzLDcgKzg5MCw3IEBACiAJCQlyZXR1cm4gc3ByaW50ZihidWYsICIyIC0gYXV0byBhdCBNU0IgREFDIEFCQ0Qgd3JpdGluZ1xuIik7CiAJCWRlZmF1bHQ6IC8qIEFEVDczMTZfREFfRU5fTU9ERV9MREFDICovCiAJCQlyZXR1cm4gc3ByaW50ZihidWYsICIzIC0gbWFudWFsXG4iKTsKLQkJfTsKKwkJfQogCX0KIH0KIApAQCAtMTIwNSw3ICsxMjAyLDcgQEAKIAkJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhKTsKIAkJZWxzZQogCQkJYnJlYWs7Ci0JfTsKKwl9CiAKIAlpZiAoZGF0YSAmIEFEVDczMTZfVF9WQUxVRV9TSUdOKSB7CiAJCS8qIGNvbnZlcnQgc3VwcGxlbWVudCB0byBwb3NpdGl2ZSB2YWx1ZSAqLwpAQCAtMTY3NCwxOCArMTY3MSw2IEBACiAKIHN0YXRpYyBJSU9fREVWSUNFX0FUVFIoYnVzX3R5cGUsIFNfSVJVR08sIGFkdDczMTZfc2hvd19idXNfdHlwZSwgTlVMTCwgMCk7CiAKLXN0YXRpYyBzc2l6ZV90IGFkdDczMTZfc2hvd19uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgYWR0NzMxNl9jaGlwX2luZm8gKmNoaXAgPSBkZXZfaW5mby0+ZGV2X2RhdGE7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgY2hpcC0+bmFtZSk7Ci19Ci0KLXN0YXRpYyBJSU9fREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgYWR0NzMxNl9zaG93X25hbWUsIE5VTEwsIDApOwotCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWR0NzMxNl9hdHRyaWJ1dGVzW10gPSB7CiAJJmlpb19kZXZfYXR0cl9hbGxfbW9kZXMuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX21vZGUuZGV2X2F0dHIuYXR0ciwKQEAgLTE3MjIsNyArMTcwNyw2IEBACiAJJmlpb19kZXZfYXR0cl9tYW51ZmFjdG9yZXJfaWQuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX2RldmljZV9yZXYuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX2J1c190eXBlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9uYW1lLmRldl9hdHRyLmF0dHIsCiAJTlVMTCwKIH07CiAKQEAgLTE3NzEsNyArMTc1NSw2IEBACiAJJmlpb19kZXZfYXR0cl9tYW51ZmFjdG9yZXJfaWQuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX2RldmljZV9yZXYuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX2J1c190eXBlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9uYW1lLmRldl9hdHRyLmF0dHIsCiAJTlVMTCwKIH07CiAKQEAgLTE3NzksNzAgKzE3NjIsNzcgQEAKIAkuYXR0cnMgPSBhZHQ3NTE2X2F0dHJpYnV0ZXMsCiB9OwogCi0KLS8qCi0gKiB0ZW1wZXJhdHVyZSBib3VuZCBldmVudHMKLSAqLwotCi0jZGVmaW5lIElJT19FVkVOVF9DT0RFX0FEVDczMTZfSU5fVEVNUF9ISUdIICAgSUlPX0JVRkZFUl9FVkVOVF9DT0RFKDApCi0jZGVmaW5lIElJT19FVkVOVF9DT0RFX0FEVDczMTZfSU5fVEVNUF9MT1cgICAgSUlPX0JVRkZFUl9FVkVOVF9DT0RFKDEpCi0jZGVmaW5lIElJT19FVkVOVF9DT0RFX0FEVDczMTZfRVhfVEVNUF9ISUdIICAgSUlPX0JVRkZFUl9FVkVOVF9DT0RFKDIpCi0jZGVmaW5lIElJT19FVkVOVF9DT0RFX0FEVDczMTZfRVhfVEVNUF9MT1cgICAgSUlPX0JVRkZFUl9FVkVOVF9DT0RFKDMpCi0jZGVmaW5lIElJT19FVkVOVF9DT0RFX0FEVDczMTZfRVhfVEVNUF9GQVVMVCAgSUlPX0JVRkZFUl9FVkVOVF9DT0RFKDQpCi0jZGVmaW5lIElJT19FVkVOVF9DT0RFX0FEVDc1MTZfQUlOMSAgICAgICAgICAgSUlPX0JVRkZFUl9FVkVOVF9DT0RFKDUpCi0jZGVmaW5lIElJT19FVkVOVF9DT0RFX0FEVDc1MTZfQUlOMiAgICAgICAgICAgSUlPX0JVRkZFUl9FVkVOVF9DT0RFKDYpCi0jZGVmaW5lIElJT19FVkVOVF9DT0RFX0FEVDc1MTZfQUlOMyAgICAgICAgICAgSUlPX0JVRkZFUl9FVkVOVF9DT0RFKDcpCi0jZGVmaW5lIElJT19FVkVOVF9DT0RFX0FEVDc1MTZfQUlONCAgICAgICAgICAgSUlPX0JVRkZFUl9FVkVOVF9DT0RFKDgpCi0jZGVmaW5lIElJT19FVkVOVF9DT0RFX0FEVDczMTZfVkREICAgICAgICAgICAgSUlPX0JVRkZFUl9FVkVOVF9DT0RFKDkpCi0KLXN0YXRpYyB2b2lkIGFkdDczMTZfaW50ZXJydXB0X2JoKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29ya19zKQorc3RhdGljIGlycXJldHVybl90IGFkdDczMTZfZXZlbnRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpwcml2YXRlKQogewotCXN0cnVjdCBhZHQ3MzE2X2NoaXBfaW5mbyAqY2hpcCA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrX3MsIHN0cnVjdCBhZHQ3MzE2X2NoaXBfaW5mbywgdGhyZXNoX3dvcmspOworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBwcml2YXRlOworCXN0cnVjdCBhZHQ3MzE2X2NoaXBfaW5mbyAqY2hpcCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKIAl1OCBzdGF0MSwgc3RhdDI7Ci0JaW50IGksIHJldCwgY291bnQ7CisJaW50IHJldDsKKwlzNjQgdGltZTsKIAogCXJldCA9IGNoaXAtPmJ1cy5yZWFkKGNoaXAtPmJ1cy5jbGllbnQsIEFEVDczMTZfSU5UX1NUQVQxLCAmc3RhdDEpOwogCWlmICghcmV0KSB7Ci0JCWlmICgoY2hpcC0+aWQgJiBJRF9GQU1JTFlfTUFTSykgPT0gSURfQURUNzVYWCkKLQkJCWNvdW50ID0gODsKLQkJZWxzZQotCQkJY291bnQgPSA1OworCQlpZiAoKGNoaXAtPmlkICYgSURfRkFNSUxZX01BU0spICE9IElEX0FEVDc1WFgpCisJCQlzdGF0MSAmPSAweDFGOwogCi0JCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCQlpZiAoc3RhdDEgJiAoMSA8PCBpKSkKLQkJCQlpaW9fcHVzaF9ldmVudChjaGlwLT5pbmRpb19kZXYsIDAsCi0JCQkJCUlJT19FVkVOVF9DT0RFX0FEVDczMTZfSU5fVEVNUF9ISUdIICsgaSwKLQkJCQkJY2hpcC0+bGFzdF90aW1lc3RhbXApOworCQl0aW1lID0gaWlvX2dldF90aW1lX25zKCk7CisJCWlmIChzdGF0MSAmICgxIDw8IDApKQorCQkJaWlvX3B1c2hfZXZlbnQoY2hpcC0+aW5kaW9fZGV2LCAwLAorCQkJCSAgICAgICBJSU9fVU5NT0RfRVZFTlRfQ09ERShJSU9fVEVNUCwgMCwKKwkJCQkJCQkgICAgSUlPX0VWX1RZUEVfVEhSRVNILAorCQkJCQkJCSAgICBJSU9fRVZfRElSX1JJU0lORyksCisJCQkJICAgICAgIHRpbWUpOworCQlpZiAoc3RhdDEgJiAoMSA8PCAxKSkKKwkJCWlpb19wdXNoX2V2ZW50KGNoaXAtPmluZGlvX2RldiwgMCwKKwkJCQkgICAgICAgSUlPX1VOTU9EX0VWRU5UX0NPREUoSUlPX1RFTVAsIDAsCisJCQkJCQkJICAgIElJT19FVl9UWVBFX1RIUkVTSCwKKwkJCQkJCQkgICAgSUlPX0VWX0RJUl9GQUxMSU5HKSwKKwkJCQkgICAgICAgdGltZSk7CisJCWlmIChzdGF0MSAmICgxIDw8IDIpKQorCQkJaWlvX3B1c2hfZXZlbnQoY2hpcC0+aW5kaW9fZGV2LCAwLAorCQkJCSAgICAgICBJSU9fVU5NT0RfRVZFTlRfQ09ERShJSU9fVEVNUCwgMSwKKwkJCQkJCQkgICAgSUlPX0VWX1RZUEVfVEhSRVNILAorCQkJCQkJCSAgICBJSU9fRVZfRElSX1JJU0lORyksCisJCQkJICAgICAgIHRpbWUpOworCQlpZiAoc3RhdDEgJiAoMSA8PCAzKSkKKwkJCWlpb19wdXNoX2V2ZW50KGNoaXAtPmluZGlvX2RldiwgMCwKKwkJCQkgICAgICAgSUlPX1VOTU9EX0VWRU5UX0NPREUoSUlPX1RFTVAsIDEsCisJCQkJCQkJICAgIElJT19FVl9UWVBFX1RIUkVTSCwKKwkJCQkJCQkgICAgSUlPX0VWX0RJUl9GQUxMSU5HKSwKKwkJCQkgICAgICAgdGltZSk7CisJCWlmIChzdGF0MSAmICgxIDw8IDUpKQorCQkJaWlvX3B1c2hfZXZlbnQoY2hpcC0+aW5kaW9fZGV2LCAwLAorCQkJCSAgICAgICBJSU9fVU5NT0RfRVZFTlRfQ09ERShJSU9fSU4sIDEsCisJCQkJCQkJICAgIElJT19FVl9UWVBFX1RIUkVTSCwKKwkJCQkJCQkgICAgSUlPX0VWX0RJUl9FSVRIRVIpLAorCQkJCSAgICAgICB0aW1lKTsKKwkJaWYgKHN0YXQxICYgKDEgPDwgNikpCisJCQlpaW9fcHVzaF9ldmVudChjaGlwLT5pbmRpb19kZXYsIDAsCisJCQkJICAgICAgIElJT19VTk1PRF9FVkVOVF9DT0RFKElJT19JTiwgMiwKKwkJCQkJCQkgICAgSUlPX0VWX1RZUEVfVEhSRVNILAorCQkJCQkJCSAgICBJSU9fRVZfRElSX0VJVEhFUiksCisJCQkJICAgICAgIHRpbWUpOworCQlpZiAoc3RhdDEgJiAoMSA8PCA3KSkKKwkJCWlpb19wdXNoX2V2ZW50KGNoaXAtPmluZGlvX2RldiwgMCwKKwkJCQkgICAgICAgSUlPX1VOTU9EX0VWRU5UX0NPREUoSUlPX0lOLCAzLAorCQkJCQkJCSAgICBJSU9fRVZfVFlQRV9USFJFU0gsCisJCQkJCQkJICAgIElJT19FVl9ESVJfRUlUSEVSKSwKKwkJCQkgICAgICAgdGltZSk7CiAJCX0KLQl9Ci0KIAlyZXQgPSBjaGlwLT5idXMucmVhZChjaGlwLT5idXMuY2xpZW50LCBBRFQ3MzE2X0lOVF9TVEFUMiwgJnN0YXQyKTsKIAlpZiAoIXJldCkgewogCQlpZiAoc3RhdDIgJiBBRFQ3MzE2X0lOVF9NQVNLMl9WREQpCiAJCQlpaW9fcHVzaF9ldmVudChjaGlwLT5pbmRpb19kZXYsIDAsCi0JCQkJSUlPX0VWRU5UX0NPREVfQURUNzMxNl9WREQsCi0JCQkJY2hpcC0+bGFzdF90aW1lc3RhbXApOworCQkJCSAgICAgICBJSU9fVU5NT0RfRVZFTlRfQ09ERShJSU9fSU4sCisJCQkJCQkJICAgIDAsCisJCQkJCQkJICAgIElJT19FVl9UWVBFX1RIUkVTSCwKKwkJCQkJCQkgICAgSUlPX0VWX0RJUl9SSVNJTkcpLAorCQkJCSAgICAgICBpaW9fZ2V0X3RpbWVfbnMoKSk7CiAJfQogCi0JZW5hYmxlX2lycShjaGlwLT5idXMuaXJxKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgYWR0NzMxNl9pbnRlcnJ1cHQoc3RydWN0IGlpb19kZXYgKmRldl9pbmZvLAotCQlpbnQgaW5kZXgsCi0JCXM2NCB0aW1lc3RhbXAsCi0JCWludCBub190ZXN0KQotewotCXN0cnVjdCBhZHQ3MzE2X2NoaXBfaW5mbyAqY2hpcCA9IGRldl9pbmZvLT5kZXZfZGF0YTsKLQotCWNoaXAtPmxhc3RfdGltZXN0YW1wID0gdGltZXN0YW1wOwotCXNjaGVkdWxlX3dvcmsoJmNoaXAtPnRocmVzaF93b3JrKTsKLQotCXJldHVybiAwOwotfQotCi1JSU9fRVZFTlRfU0goYWR0NzMxNiwgJmFkdDczMTZfaW50ZXJydXB0KTsKLQogLyoKICAqIFNob3cgbWFzayBvZiBlbmFibGVkIGludGVycnVwdHMgaW4gSGV4LgogICovCkBAIC0xOTAxLDkgKzE4OTEsOSBAQAogfQogc3RhdGljIGlubGluZSBzc2l6ZV90IGFkdDczMTZfc2hvd19hZF9ib3VuZChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQl1OCBib3VuZF9yZWcsCiAJCWNoYXIgKmJ1ZikKIHsKKwlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7CiAJc3RydWN0IGlpb19kZXYgKmRldl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGFkdDczMTZfY2hpcF9pbmZvICpjaGlwID0gZGV2X2luZm8tPmRldl9kYXRhOwogCXU4IHZhbDsKQEAgLTE5MTEsMTAgKzE5MDEsMTAgQEAKIAlpbnQgcmV0OwogCiAJaWYgKChjaGlwLT5pZCAmIElEX0ZBTUlMWV9NQVNLKSA9PSBJRF9BRFQ3M1hYICYmCi0JCWJvdW5kX3JlZyA+IEFEVDczMTZfRVhfVEVNUF9MT1cpCisJCXRoaXNfYXR0ci0+YWRkcmVzcyA+IEFEVDczMTZfRVhfVEVNUF9MT1cpCiAJCXJldHVybiAtRVBFUk07CiAKLQlyZXQgPSBjaGlwLT5idXMucmVhZChjaGlwLT5idXMuY2xpZW50LCBib3VuZF9yZWcsICZ2YWwpOworCXJldCA9IGNoaXAtPmJ1cy5yZWFkKGNoaXAtPmJ1cy5jbGllbnQsIHRoaXNfYXR0ci0+YWRkcmVzcywgJnZhbCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIC1FSU87CiAKQEAgLTE5MzEsMTAgKzE5MjEsMTAgQEAKIAogc3RhdGljIGlubGluZSBzc2l6ZV90IGFkdDczMTZfc2V0X2FkX2JvdW5kKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCXU4IGJvdW5kX3JlZywKIAkJY29uc3QgY2hhciAqYnVmLAogCQlzaXplX3QgbGVuKQogeworCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKIAlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgYWR0NzMxNl9jaGlwX2luZm8gKmNoaXAgPSBkZXZfaW5mby0+ZGV2X2RhdGE7CiAJbG9uZyBkYXRhOwpAQCAtMTk0Miw3ICsxOTMyLDcgQEAKIAlpbnQgcmV0OwogCiAJaWYgKChjaGlwLT5pZCAmIElEX0ZBTUlMWV9NQVNLKSA9PSBJRF9BRFQ3M1hYICYmCi0JCWJvdW5kX3JlZyA+IEFEVDczMTZfRVhfVEVNUF9MT1cpCisJCXRoaXNfYXR0ci0+YWRkcmVzcyA+IEFEVDczMTZfRVhfVEVNUF9MT1cpCiAJCXJldHVybiAtRVBFUk07CiAKIAlyZXQgPSBzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZkYXRhKTsKQEAgLTE5NjMsMTgzICsxOTUzLDEzIEBACiAKIAl2YWwgPSAodTgpZGF0YTsKIAotCXJldCA9IGNoaXAtPmJ1cy53cml0ZShjaGlwLT5idXMuY2xpZW50LCBib3VuZF9yZWcsIHZhbCk7CisJcmV0ID0gY2hpcC0+YnVzLndyaXRlKGNoaXAtPmJ1cy5jbGllbnQsIHRoaXNfYXR0ci0+YWRkcmVzcywgdmFsKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gLUVJTzsKIAogCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGFkdDczMTZfc2hvd19pbl90ZW1wX2hpZ2goc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY2hhciAqYnVmKQotewotCXJldHVybiBhZHQ3MzE2X3Nob3dfYWRfYm91bmQoZGV2LCBhdHRyLAotCQkJQURUNzMxNl9JTl9URU1QX0hJR0gsIGJ1Zik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3NpemVfdCBhZHQ3MzE2X3NldF9pbl90ZW1wX2hpZ2goc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY29uc3QgY2hhciAqYnVmLAotCQlzaXplX3QgbGVuKQotewotCXJldHVybiBhZHQ3MzE2X3NldF9hZF9ib3VuZChkZXYsIGF0dHIsCi0JCQlBRFQ3MzE2X0lOX1RFTVBfSElHSCwgYnVmLCBsZW4pOwotfQotCi1zdGF0aWMgc3NpemVfdCBhZHQ3MzE2X3Nob3dfaW5fdGVtcF9sb3coc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY2hhciAqYnVmKQotewotCXJldHVybiBhZHQ3MzE2X3Nob3dfYWRfYm91bmQoZGV2LCBhdHRyLAotCQkJQURUNzMxNl9JTl9URU1QX0xPVywgYnVmKTsKLX0KLQotc3RhdGljIGlubGluZSBzc2l6ZV90IGFkdDczMTZfc2V0X2luX3RlbXBfbG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNvbnN0IGNoYXIgKmJ1ZiwKLQkJc2l6ZV90IGxlbikKLXsKLQlyZXR1cm4gYWR0NzMxNl9zZXRfYWRfYm91bmQoZGV2LCBhdHRyLAotCQkJQURUNzMxNl9JTl9URU1QX0xPVywgYnVmLCBsZW4pOwotfQotCi1zdGF0aWMgc3NpemVfdCBhZHQ3MzE2X3Nob3dfZXhfdGVtcF9haW4xX2hpZ2goc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY2hhciAqYnVmKQotewotCXJldHVybiBhZHQ3MzE2X3Nob3dfYWRfYm91bmQoZGV2LCBhdHRyLAotCQkJQURUNzMxNl9FWF9URU1QX0hJR0gsIGJ1Zik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3NpemVfdCBhZHQ3MzE2X3NldF9leF90ZW1wX2FpbjFfaGlnaChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljb25zdCBjaGFyICpidWYsCi0JCXNpemVfdCBsZW4pCi17Ci0JcmV0dXJuIGFkdDczMTZfc2V0X2FkX2JvdW5kKGRldiwgYXR0ciwKLQkJCUFEVDczMTZfRVhfVEVNUF9ISUdILCBidWYsIGxlbik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGFkdDczMTZfc2hvd19leF90ZW1wX2FpbjFfbG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gYWR0NzMxNl9zaG93X2FkX2JvdW5kKGRldiwgYXR0ciwKLQkJCUFEVDczMTZfRVhfVEVNUF9MT1csIGJ1Zik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3NpemVfdCBhZHQ3MzE2X3NldF9leF90ZW1wX2FpbjFfbG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNvbnN0IGNoYXIgKmJ1ZiwKLQkJc2l6ZV90IGxlbikKLXsKLQlyZXR1cm4gYWR0NzMxNl9zZXRfYWRfYm91bmQoZGV2LCBhdHRyLAotCQkJQURUNzMxNl9FWF9URU1QX0xPVywgYnVmLCBsZW4pOwotfQotCi1zdGF0aWMgc3NpemVfdCBhZHQ3MzE2X3Nob3dfYWluMl9oaWdoKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gYWR0NzMxNl9zaG93X2FkX2JvdW5kKGRldiwgYXR0ciwKLQkJCUFEVDc1MTZfQUlOMl9ISUdILCBidWYpOwotfQotCi1zdGF0aWMgaW5saW5lIHNzaXplX3QgYWR0NzMxNl9zZXRfYWluMl9oaWdoKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNvbnN0IGNoYXIgKmJ1ZiwKLQkJc2l6ZV90IGxlbikKLXsKLQlyZXR1cm4gYWR0NzMxNl9zZXRfYWRfYm91bmQoZGV2LCBhdHRyLAotCQkJQURUNzUxNl9BSU4yX0hJR0gsIGJ1ZiwgbGVuKTsKLX0KLQotc3RhdGljIHNzaXplX3QgYWR0NzMxNl9zaG93X2FpbjJfbG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gYWR0NzMxNl9zaG93X2FkX2JvdW5kKGRldiwgYXR0ciwKLQkJCUFEVDc1MTZfQUlOMl9MT1csIGJ1Zik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3NpemVfdCBhZHQ3MzE2X3NldF9haW4yX2xvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljb25zdCBjaGFyICpidWYsCi0JCXNpemVfdCBsZW4pCi17Ci0JcmV0dXJuIGFkdDczMTZfc2V0X2FkX2JvdW5kKGRldiwgYXR0ciwKLQkJCUFEVDc1MTZfQUlOMl9MT1csIGJ1ZiwgbGVuKTsKLX0KLQotc3RhdGljIHNzaXplX3QgYWR0NzMxNl9zaG93X2FpbjNfaGlnaChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljaGFyICpidWYpCi17Ci0JcmV0dXJuIGFkdDczMTZfc2hvd19hZF9ib3VuZChkZXYsIGF0dHIsCi0JCQlBRFQ3NTE2X0FJTjNfSElHSCwgYnVmKTsKLX0KLQotc3RhdGljIGlubGluZSBzc2l6ZV90IGFkdDczMTZfc2V0X2FpbjNfaGlnaChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljb25zdCBjaGFyICpidWYsCi0JCXNpemVfdCBsZW4pCi17Ci0JcmV0dXJuIGFkdDczMTZfc2V0X2FkX2JvdW5kKGRldiwgYXR0ciwKLQkJCUFEVDc1MTZfQUlOM19ISUdILCBidWYsIGxlbik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGFkdDczMTZfc2hvd19haW4zX2xvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljaGFyICpidWYpCi17Ci0JcmV0dXJuIGFkdDczMTZfc2hvd19hZF9ib3VuZChkZXYsIGF0dHIsCi0JCQlBRFQ3NTE2X0FJTjNfTE9XLCBidWYpOwotfQotCi1zdGF0aWMgaW5saW5lIHNzaXplX3QgYWR0NzMxNl9zZXRfYWluM19sb3coc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY29uc3QgY2hhciAqYnVmLAotCQlzaXplX3QgbGVuKQotewotCXJldHVybiBhZHQ3MzE2X3NldF9hZF9ib3VuZChkZXYsIGF0dHIsCi0JCQlBRFQ3NTE2X0FJTjNfTE9XLCBidWYsIGxlbik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGFkdDczMTZfc2hvd19haW40X2hpZ2goc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY2hhciAqYnVmKQotewotCXJldHVybiBhZHQ3MzE2X3Nob3dfYWRfYm91bmQoZGV2LCBhdHRyLAotCQkJQURUNzUxNl9BSU40X0hJR0gsIGJ1Zik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3NpemVfdCBhZHQ3MzE2X3NldF9haW40X2hpZ2goc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY29uc3QgY2hhciAqYnVmLAotCQlzaXplX3QgbGVuKQotewotCXJldHVybiBhZHQ3MzE2X3NldF9hZF9ib3VuZChkZXYsIGF0dHIsCi0JCQlBRFQ3NTE2X0FJTjRfSElHSCwgYnVmLCBsZW4pOwotfQotCi1zdGF0aWMgc3NpemVfdCBhZHQ3MzE2X3Nob3dfYWluNF9sb3coc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY2hhciAqYnVmKQotewotCXJldHVybiBhZHQ3MzE2X3Nob3dfYWRfYm91bmQoZGV2LCBhdHRyLAotCQkJQURUNzUxNl9BSU40X0xPVywgYnVmKTsKLX0KLQotc3RhdGljIGlubGluZSBzc2l6ZV90IGFkdDczMTZfc2V0X2FpbjRfbG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNvbnN0IGNoYXIgKmJ1ZiwKLQkJc2l6ZV90IGxlbikKLXsKLQlyZXR1cm4gYWR0NzMxNl9zZXRfYWRfYm91bmQoZGV2LCBhdHRyLAotCQkJQURUNzUxNl9BSU40X0xPVywgYnVmLCBsZW4pOwotfQotCiBzdGF0aWMgc3NpemVfdCBhZHQ3MzE2X3Nob3dfaW50X2VuYWJsZWQoc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJY2hhciAqYnVmKQpAQCAtMjE3Myw0NyArMTk5Myw3MiBAQAogCXJldHVybiBsZW47CiB9CiAKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW50X21hc2ssCisJCSAgICAgICBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgIGFkdDczMTZfc2hvd19pbnRfbWFzaywgYWR0NzMxNl9zZXRfaW50X21hc2ssCisJCSAgICAgICAwKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW5fdGVtcF9oaWdoX3ZhbHVlLAorCQkgICAgICAgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICAgICBhZHQ3MzE2X3Nob3dfYWRfYm91bmQsIGFkdDczMTZfc2V0X2FkX2JvdW5kLAorCQkgICAgICAgQURUNzMxNl9JTl9URU1QX0hJR0gpOworc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbl90ZW1wX2xvd192YWx1ZSwKKwkJICAgICAgIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICAgYWR0NzMxNl9zaG93X2FkX2JvdW5kLCBhZHQ3MzE2X3NldF9hZF9ib3VuZCwKKwkJICAgICAgIEFEVDczMTZfSU5fVEVNUF9MT1cpOworc3RhdGljIElJT19ERVZJQ0VfQVRUUihleF90ZW1wX2hpZ2hfdmFsdWUsCisJCSAgICAgICBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgIGFkdDczMTZfc2hvd19hZF9ib3VuZCwgYWR0NzMxNl9zZXRfYWRfYm91bmQsCisJCSAgICAgICBBRFQ3MzE2X0VYX1RFTVBfSElHSCk7CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSKGV4X3RlbXBfbG93X3ZhbHVlLAorCQkgICAgICAgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICAgICBhZHQ3MzE2X3Nob3dfYWRfYm91bmQsIGFkdDczMTZfc2V0X2FkX2JvdW5kLAorCQkgICAgICAgQURUNzMxNl9FWF9URU1QX0xPVyk7CiAKLUlJT19FVkVOVF9BVFRSX1NIKGludF9tYXNrLCBpaW9fZXZlbnRfYWR0NzMxNiwKLQkJYWR0NzMxNl9zaG93X2ludF9tYXNrLCBhZHQ3MzE2X3NldF9pbnRfbWFzaywgMCk7Ci1JSU9fRVZFTlRfQVRUUl9TSChpbl90ZW1wX2hpZ2gsIGlpb19ldmVudF9hZHQ3MzE2LAotCQlhZHQ3MzE2X3Nob3dfaW5fdGVtcF9oaWdoLCBhZHQ3MzE2X3NldF9pbl90ZW1wX2hpZ2gsIDApOwotSUlPX0VWRU5UX0FUVFJfU0goaW5fdGVtcF9sb3csIGlpb19ldmVudF9hZHQ3MzE2LAotCQlhZHQ3MzE2X3Nob3dfaW5fdGVtcF9sb3csIGFkdDczMTZfc2V0X2luX3RlbXBfbG93LCAwKTsKLUlJT19FVkVOVF9BVFRSX1NIKGV4X3RlbXBfaGlnaCwgaWlvX2V2ZW50X2FkdDczMTYsCi0JCWFkdDczMTZfc2hvd19leF90ZW1wX2FpbjFfaGlnaCwKLQkJYWR0NzMxNl9zZXRfZXhfdGVtcF9haW4xX2hpZ2gsIDApOwotSUlPX0VWRU5UX0FUVFJfU0goZXhfdGVtcF9sb3csIGlpb19ldmVudF9hZHQ3MzE2LAotCQlhZHQ3MzE2X3Nob3dfZXhfdGVtcF9haW4xX2xvdywKLQkJYWR0NzMxNl9zZXRfZXhfdGVtcF9haW4xX2xvdywgMCk7Ci1JSU9fRVZFTlRfQVRUUl9TSChleF90ZW1wX2FpbjFfaGlnaCwgaWlvX2V2ZW50X2FkdDczMTYsCi0JCWFkdDczMTZfc2hvd19leF90ZW1wX2FpbjFfaGlnaCwKLQkJYWR0NzMxNl9zZXRfZXhfdGVtcF9haW4xX2hpZ2gsIDApOwotSUlPX0VWRU5UX0FUVFJfU0goZXhfdGVtcF9haW4xX2xvdywgaWlvX2V2ZW50X2FkdDczMTYsCi0JCWFkdDczMTZfc2hvd19leF90ZW1wX2FpbjFfbG93LAotCQlhZHQ3MzE2X3NldF9leF90ZW1wX2FpbjFfbG93LCAwKTsKLUlJT19FVkVOVF9BVFRSX1NIKGFpbjJfaGlnaCwgaWlvX2V2ZW50X2FkdDczMTYsCi0JCWFkdDczMTZfc2hvd19haW4yX2hpZ2gsIGFkdDczMTZfc2V0X2FpbjJfaGlnaCwgMCk7Ci1JSU9fRVZFTlRfQVRUUl9TSChhaW4yX2xvdywgaWlvX2V2ZW50X2FkdDczMTYsCi0JCWFkdDczMTZfc2hvd19haW4yX2xvdywgYWR0NzMxNl9zZXRfYWluMl9sb3csIDApOwotSUlPX0VWRU5UX0FUVFJfU0goYWluM19oaWdoLCBpaW9fZXZlbnRfYWR0NzMxNiwKLQkJYWR0NzMxNl9zaG93X2FpbjNfaGlnaCwgYWR0NzMxNl9zZXRfYWluM19oaWdoLCAwKTsKLUlJT19FVkVOVF9BVFRSX1NIKGFpbjNfbG93LCBpaW9fZXZlbnRfYWR0NzMxNiwKLQkJYWR0NzMxNl9zaG93X2FpbjNfbG93LCBhZHQ3MzE2X3NldF9haW4zX2xvdywgMCk7Ci1JSU9fRVZFTlRfQVRUUl9TSChhaW40X2hpZ2gsIGlpb19ldmVudF9hZHQ3MzE2LAotCQlhZHQ3MzE2X3Nob3dfYWluNF9oaWdoLCBhZHQ3MzE2X3NldF9haW40X2hpZ2gsIDApOwotSUlPX0VWRU5UX0FUVFJfU0goYWluNF9sb3csIGlpb19ldmVudF9hZHQ3MzE2LAotCQlhZHQ3MzE2X3Nob3dfYWluNF9sb3csIGFkdDczMTZfc2V0X2FpbjRfbG93LCAwKTsKLUlJT19FVkVOVF9BVFRSX1NIKGludF9lbmFibGVkLCBpaW9fZXZlbnRfYWR0NzMxNiwKLQkJYWR0NzMxNl9zaG93X2ludF9lbmFibGVkLCBhZHQ3MzE2X3NldF9pbnRfZW5hYmxlZCwgMCk7CisvKiBOQVNUWSBkdXBsaWNhdGlvbiB0byBiZSBmaXhlZCAqLworc3RhdGljIElJT19ERVZJQ0VfQVRUUihleF90ZW1wX2FpbjFfaGlnaF92YWx1ZSwKKwkJICAgICAgIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICAgYWR0NzMxNl9zaG93X2FkX2JvdW5kLCBhZHQ3MzE2X3NldF9hZF9ib3VuZCwKKwkJICAgICAgIEFEVDczMTZfRVhfVEVNUF9ISUdIKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoZXhfdGVtcF9haW4xX2xvd192YWx1ZSwKKwkJICAgICAgIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICAgYWR0NzMxNl9zaG93X2FkX2JvdW5kLCBhZHQ3MzE2X3NldF9hZF9ib3VuZCwKKwkJICAgICAgIEFEVDczMTZfRVhfVEVNUF9MT1cpOworc3RhdGljIElJT19ERVZJQ0VfQVRUUihhaW4yX2hpZ2hfdmFsdWUsCisJCSAgICAgICBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgIGFkdDczMTZfc2hvd19hZF9ib3VuZCwgYWR0NzMxNl9zZXRfYWRfYm91bmQsCisJCSAgICAgICBBRFQ3NTE2X0FJTjJfSElHSCk7CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSKGFpbjJfbG93X3ZhbHVlLAorCQkgICAgICAgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICAgICBhZHQ3MzE2X3Nob3dfYWRfYm91bmQsIGFkdDczMTZfc2V0X2FkX2JvdW5kLAorCQkgICAgICAgQURUNzUxNl9BSU4yX0xPVyk7CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSKGFpbjNfaGlnaF92YWx1ZSwKKwkJICAgICAgIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICAgYWR0NzMxNl9zaG93X2FkX2JvdW5kLCBhZHQ3MzE2X3NldF9hZF9ib3VuZCwKKwkJICAgICAgIEFEVDc1MTZfQUlOM19ISUdIKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoYWluM19sb3dfdmFsdWUsCisJCSAgICAgICBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgIGFkdDczMTZfc2hvd19hZF9ib3VuZCwgYWR0NzMxNl9zZXRfYWRfYm91bmQsCisJCSAgICAgICBBRFQ3NTE2X0FJTjNfTE9XKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoYWluNF9oaWdoX3ZhbHVlLAorCQkgICAgICAgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICAgICBhZHQ3MzE2X3Nob3dfYWRfYm91bmQsIGFkdDczMTZfc2V0X2FkX2JvdW5kLAorCQkgICAgICAgQURUNzUxNl9BSU40X0hJR0gpOworc3RhdGljIElJT19ERVZJQ0VfQVRUUihhaW40X2xvd192YWx1ZSwKKwkJICAgICAgIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICAgYWR0NzMxNl9zaG93X2FkX2JvdW5kLCBhZHQ3MzE2X3NldF9hZF9ib3VuZCwKKwkJICAgICAgIEFEVDc1MTZfQUlONF9MT1cpOworc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbnRfZW5hYmxlZCwKKwkJICAgICAgIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICAgYWR0NzMxNl9zaG93X2ludF9lbmFibGVkLAorCQkgICAgICAgYWR0NzMxNl9zZXRfaW50X2VuYWJsZWQsIDApOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWR0NzMxNl9ldmVudF9hdHRyaWJ1dGVzW10gPSB7Ci0JJmlpb19ldmVudF9hdHRyX2ludF9tYXNrLmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX2luX3RlbXBfaGlnaC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl9pbl90ZW1wX2xvdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl9leF90ZW1wX2hpZ2guZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfZXhfdGVtcF9sb3cuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfaW50X2VuYWJsZWQuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2ludF9tYXNrLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9pbl90ZW1wX2hpZ2hfdmFsdWUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2luX3RlbXBfbG93X3ZhbHVlLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9leF90ZW1wX2hpZ2hfdmFsdWUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2V4X3RlbXBfbG93X3ZhbHVlLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9pbnRfZW5hYmxlZC5kZXZfYXR0ci5hdHRyLAogCU5VTEwsCiB9OwogCkBAIC0yMjIyLDE4ICsyMDY3LDE4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWR0NzUxNl9ldmVudF9hdHRyaWJ1dGVzW10gPSB7Ci0JJmlpb19ldmVudF9hdHRyX2ludF9tYXNrLmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX2luX3RlbXBfaGlnaC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl9pbl90ZW1wX2xvdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl9leF90ZW1wX2FpbjFfaGlnaC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl9leF90ZW1wX2FpbjFfbG93LmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX2FpbjJfaGlnaC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl9haW4yX2xvdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZXZlbnRfYXR0cl9haW4zX2hpZ2guZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfYWluM19sb3cuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2V2ZW50X2F0dHJfYWluNF9oaWdoLmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX2FpbjRfbG93LmRldl9hdHRyLmF0dHIsCi0JJmlpb19ldmVudF9hdHRyX2ludF9lbmFibGVkLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9pbnRfbWFzay5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfaW5fdGVtcF9oaWdoX3ZhbHVlLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9pbl90ZW1wX2xvd192YWx1ZS5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfZXhfdGVtcF9haW4xX2hpZ2hfdmFsdWUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2V4X3RlbXBfYWluMV9sb3dfdmFsdWUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2FpbjJfaGlnaF92YWx1ZS5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfYWluMl9sb3dfdmFsdWUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2FpbjNfaGlnaF92YWx1ZS5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfYWluM19sb3dfdmFsdWUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2FpbjRfaGlnaF92YWx1ZS5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfYWluNF9sb3dfdmFsdWUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2ludF9lbmFibGVkLmRldl9hdHRyLmF0dHIsCiAJTlVMTCwKIH07CiAKQEAgLTIyNjEsNiArMjEwNiwyMCBAQAogRVhQT1JUX1NZTUJPTChhZHQ3MzE2X2VuYWJsZSk7CiAjZW5kaWYKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9faW5mbyBhZHQ3MzE2X2luZm8gPSB7CisJLmF0dHJzID0gJmFkdDczMTZfYXR0cmlidXRlX2dyb3VwLAorCS5udW1faW50ZXJydXB0X2xpbmVzID0gMSwKKwkuZXZlbnRfYXR0cnMgPSAmYWR0NzMxNl9ldmVudF9hdHRyaWJ1dGVfZ3JvdXAsCisJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2luZm8gYWR0NzUxNl9pbmZvID0geworCS5hdHRycyA9ICZhZHQ3NTE2X2F0dHJpYnV0ZV9ncm91cCwKKwkubnVtX2ludGVycnVwdF9saW5lcyA9IDEsCisJLmV2ZW50X2F0dHJzID0gJmFkdDc1MTZfZXZlbnRfYXR0cmlidXRlX2dyb3VwLAorCS5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEUsCit9OworCiAvKgogICogZGV2aWNlIHByb2JlIGFuZCByZW1vdmUKICAqLwpAQCAtMjI4MCw3ICsyMTM5LDYgQEAKIAlkZXZfc2V0X2RydmRhdGEoZGV2LCBjaGlwKTsKIAogCWNoaXAtPmJ1cyA9ICpidXM7Ci0JY2hpcC0+bmFtZSA9IG5hbWU7CiAKIAlpZiAobmFtZVs0XSA9PSAnMycpCiAJCWNoaXAtPmlkID0gSURfQURUNzMxNiArIChuYW1lWzZdIC0gJzYnKTsKQEAgLTIyOTksMjMgKzIxNTcsMTkgQEAKIAlpZiAoKGNoaXAtPmlkICYgSURfRkFNSUxZX01BU0spID09IElEX0FEVDc1WFgpCiAJCWNoaXAtPmludF9tYXNrIHw9IEFEVDc1MTZfQUlOX0lOVF9NQVNLOwogCi0JY2hpcC0+aW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgpOworCWNoaXAtPmluZGlvX2RldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2UoMCk7CiAJaWYgKGNoaXAtPmluZGlvX2RldiA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3JfZnJlZV9jaGlwOwogCX0KIAogCWNoaXAtPmluZGlvX2Rldi0+ZGV2LnBhcmVudCA9IGRldjsKLQlpZiAoKGNoaXAtPmlkICYgSURfRkFNSUxZX01BU0spID09IElEX0FEVDc1WFgpIHsKLQkJY2hpcC0+aW5kaW9fZGV2LT5hdHRycyA9ICZhZHQ3NTE2X2F0dHJpYnV0ZV9ncm91cDsKLQkJY2hpcC0+aW5kaW9fZGV2LT5ldmVudF9hdHRycyA9ICZhZHQ3NTE2X2V2ZW50X2F0dHJpYnV0ZV9ncm91cDsKLQl9IGVsc2UgewotCQljaGlwLT5pbmRpb19kZXYtPmF0dHJzID0gJmFkdDczMTZfYXR0cmlidXRlX2dyb3VwOwotCQljaGlwLT5pbmRpb19kZXYtPmV2ZW50X2F0dHJzID0gJmFkdDczMTZfZXZlbnRfYXR0cmlidXRlX2dyb3VwOwotCX0KKwlpZiAoKGNoaXAtPmlkICYgSURfRkFNSUxZX01BU0spID09IElEX0FEVDc1WFgpCisJCWNoaXAtPmluZGlvX2Rldi0+aW5mbyA9ICZhZHQ3NTE2X2luZm87CisJZWxzZQorCQljaGlwLT5pbmRpb19kZXYtPmluZm8gPSAmYWR0NzMxNl9pbmZvOworCWNoaXAtPmluZGlvX2Rldi0+bmFtZSA9IG5hbWU7CiAJY2hpcC0+aW5kaW9fZGV2LT5kZXZfZGF0YSA9ICh2b2lkICopY2hpcDsKLQljaGlwLT5pbmRpb19kZXYtPmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRTsKLQljaGlwLT5pbmRpb19kZXYtPm51bV9pbnRlcnJ1cHRfbGluZXMgPSAxOwogCWNoaXAtPmluZGlvX2Rldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1RfTU9ERTsKIAogCXJldCA9IGlpb19kZXZpY2VfcmVnaXN0ZXIoY2hpcC0+aW5kaW9fZGV2KTsKQEAgLTIzMjYsMjQgKzIxODAsMTUgQEAKIAkJaWYgKGFkdDczMTZfcGxhdGZvcm1fZGF0YVswXSkKIAkJCWNoaXAtPmJ1cy5pcnFfZmxhZ3MgPSBhZHQ3MzE2X3BsYXRmb3JtX2RhdGFbMF07CiAKLQkJcmV0ID0gaWlvX3JlZ2lzdGVyX2ludGVycnVwdF9saW5lKGNoaXAtPmJ1cy5pcnEsCi0JCQkJY2hpcC0+aW5kaW9fZGV2LAotCQkJCTAsCi0JCQkJY2hpcC0+YnVzLmlycV9mbGFncywKLQkJCQljaGlwLT5uYW1lKTsKKwkJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoY2hpcC0+YnVzLmlycSwKKwkJCQkJICAgTlVMTCwKKwkJCQkJICAgJmFkdDczMTZfZXZlbnRfaGFuZGxlciwKKwkJCQkJICAgY2hpcC0+YnVzLmlycV9mbGFncyB8IElSUUZfT05FU0hPVCwKKwkJCQkJICAgY2hpcC0+aW5kaW9fZGV2LT5uYW1lLAorCQkJCQkgICBjaGlwLT5pbmRpb19kZXYpOwogCQlpZiAocmV0KQogCQkJZ290byBlcnJvcl91bnJlZ19kZXY7CiAKLQkJLyoKLQkJICogVGhlIGV2ZW50IGhhbmRsZXIgbGlzdCBlbGVtZW50IHJlZmVyIHRvIGlpb19ldmVudF9hZHQ3MzE2LgotCQkgKiBBbGwgZXZlbnQgYXR0cmlidXRlcyBiaW5kIHRvIHRoZSBzYW1lIGV2ZW50IGhhbmRsZXIuCi0JCSAqIFNvLCBvbmx5IHJlZ2lzdGVyIGV2ZW50IGhhbmRsZXIgb25jZS4KLQkJICovCi0JCWlpb19hZGRfZXZlbnRfdG9fbGlzdCgmaWlvX2V2ZW50X2FkdDczMTYsCi0JCQkJJmNoaXAtPmluZGlvX2Rldi0+aW50ZXJydXB0c1swXS0+ZXZfbGlzdCk7Ci0KLQkJSU5JVF9XT1JLKCZjaGlwLT50aHJlc2hfd29yaywgYWR0NzMxNl9pbnRlcnJ1cHRfYmgpOwotCiAJCWlmIChjaGlwLT5idXMuaXJxX2ZsYWdzICYgSVJRRl9UUklHR0VSX0hJR0gpCiAJCQljaGlwLT5jb25maWcxIHw9IEFEVDczMTZfSU5UX1BPTEFSSVRZOwogCX0KQEAgLTIzNjEsMTIgKzIyMDYsMTIgQEAKIAl9CiAKIAlkZXZfaW5mbyhkZXYsICIlcyB0ZW1wZXJhdHVyZSBzZW5zb3IsIEFEQyBhbmQgREFDIHJlZ2lzdGVyZWQuXG4iLAotCQkJY2hpcC0+bmFtZSk7CisJCQljaGlwLT5pbmRpb19kZXYtPm5hbWUpOwogCiAJcmV0dXJuIDA7CiAKIGVycm9yX3VucmVnX2lycToKLQlpaW9fdW5yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShjaGlwLT5pbmRpb19kZXYsIDApOworCWZyZWVfaXJxKGNoaXAtPmJ1cy5pcnEsIGNoaXAtPmluZGlvX2Rldik7CiBlcnJvcl91bnJlZ19kZXY6CiAJaWlvX2RldmljZV91bnJlZ2lzdGVyKGNoaXAtPmluZGlvX2Rldik7CiBlcnJvcl9mcmVlX2RldjoKQEAgLTIzODMsMTIgKzIyMjgsMTEgQEAKIAogCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBhZHQ3MzE2X2NoaXBfaW5mbyAqY2hpcCA9IGRldl9pbmZvLT5kZXZfZGF0YTsKLQlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gY2hpcC0+aW5kaW9fZGV2OwogCiAJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAJaWYgKGNoaXAtPmJ1cy5pcnEpCi0JCWlpb191bnJlZ2lzdGVyX2ludGVycnVwdF9saW5lKGluZGlvX2RldiwgMCk7Ci0JaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CisJCWZyZWVfaXJxKGNoaXAtPmJ1cy5pcnEsIGNoaXAtPmluZGlvX2Rldik7CisJaWlvX2RldmljZV91bnJlZ2lzdGVyKGNoaXAtPmluZGlvX2Rldik7CiAJaWlvX2ZyZWVfZGV2aWNlKGNoaXAtPmluZGlvX2Rldik7CiAJa2ZyZWUoY2hpcCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vY2hyZGV2LmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2NocmRldi5oCmluZGV4IDRmY2I5OWMuLjNlMzFlZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vY2hyZGV2LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9jaHJkZXYuaApAQCAtNDUsMjMgKzQ1LDEwIEBACiAgKiBzdHJ1Y3QgaWlvX2RldGVjdGVkX2V2ZW50X2xpc3QgLSBsaXN0IGVsZW1lbnQgZm9yIGV2ZW50cyB0aGF0IGhhdmUgb2NjdXJyZWQKICAqIEBsaXN0OgkJbGlua2VkIGxpc3QgaGVhZGVyCiAgKiBAZXY6CQkJdGhlIGV2ZW50IGl0c2VsZgotICogQHNoYXJlZF9wb2ludGVyOgl1c2VkIHdoZW4gdGhlIGV2ZW50IGlzIHNoYXJlZCAtIGkuZS4gY2FuIGJlIGVzY2FsbGF0ZWQKLSAqCQkJb24gZGVtYW5kIChlZyByaW5nIGJ1ZmZlciA1MCUtPjEwMCUgZnVsbCkKICAqLwogc3RydWN0IGlpb19kZXRlY3RlZF9ldmVudF9saXN0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlsaXN0OwogCXN0cnVjdCBpaW9fZXZlbnRfZGF0YQkJZXY7Ci0Jc3RydWN0IGlpb19zaGFyZWRfZXZfcG9pbnRlcgkqc2hhcmVkX3BvaW50ZXI7Ci19OwotLyoqCi0gKiBzdHJ1Y3QgaWlvX3NoYXJlZF9ldl9wb2ludGVyIC0gYWxsb3dzIHNoYXJlZCBldmVudHMgdG8gaWRlbnRpZnkgaWYgY3VycmVudGx5Ci0gKgkJCQlpbiB0aGUgZGV0ZWN0ZWQgZXZlbnQgbGlzdAotICogQGV2X3A6CXBvaW50ZXIgdG8gZGV0ZWN0ZWQgZXZlbnQgbGlzdCBlbGVtZW50IChudWxsIGlmIG5vdCBpbiBsaXN0KQotICogQGxvY2s6CXByb3RlY3QgdGhpcyBlbGVtZW50IHRvIHByZXZlbnQgc2ltdWx0YW5lb3VzIGVkaXQgYW5kIHJlbW92ZQotICovCi1zdHJ1Y3QgaWlvX3NoYXJlZF9ldl9wb2ludGVyIHsKLQlzdHJ1Y3QgaWlvX2RldGVjdGVkX2V2ZW50X2xpc3QJKmV2X3A7Ci0Jc3BpbmxvY2tfdAkJCWxvY2s7CiB9OwogCiAvKioKQEAgLTczLDQzICs2MCwxNiBAQAogICogQGRldF9ldmVudHM6CQlsaXN0IG9mIGRldGVjdGVkIGV2ZW50cwogICogQG1heF9ldmVudHM6CQltYXhpbXVtIG51bWJlciBvZiBldmVudHMgYmVmb3JlIG5ldyBvbmVzIGFyZSBkcm9wcGVkCiAgKiBAY3VycmVudF9ldmVudHM6CW51bWJlciBvZiBldmVudHMgaW4gZGV0ZWN0ZWQgbGlzdAotICogQG93bmVyOgkJZW5zdXJlIHRoZSBkcml2ZXIgbW9kdWxlIG93bnMgdGhlIGZpbGUsIG5vdCBpaW8KLSAqIEBwcml2YXRlOgkJZHJpdmVyIHNwZWNpZmljIGRhdGEKLSAqIEBfbmFtZToJCXVzZWQgaW50ZXJuYWxseSB0byBzdG9yZSB0aGUgc3lzZnMgbmFtZSBmb3IgbWlub3IgaWQKLSAqCQkJYXR0cmlidXRlCi0gKiBAX2F0dHJuYW1lOgkJdGhlIGV2ZW50IGludGVyZmFjZSdzIGF0dHJpYnV0ZSBuYW1lCiAgKi8KIHN0cnVjdCBpaW9fZXZlbnRfaW50ZXJmYWNlIHsKIAlzdHJ1Y3QgZGV2aWNlCQkJCWRldjsKIAlzdHJ1Y3QgaWlvX2hhbmRsZXIJCQloYW5kbGVyOwogCXdhaXRfcXVldWVfaGVhZF90CQkJd2FpdDsKIAlzdHJ1Y3QgbXV0ZXgJCQkJZXZlbnRfbGlzdF9sb2NrOwotCXN0cnVjdCBpaW9fZGV0ZWN0ZWRfZXZlbnRfbGlzdAkJZGV0X2V2ZW50czsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQkJZGV0X2V2ZW50czsKIAlpbnQJCQkJCW1heF9ldmVudHM7CiAJaW50CQkJCQljdXJyZW50X2V2ZW50czsKLQlzdHJ1Y3QgbW9kdWxlCQkJCSpvd25lcjsKLQl2b2lkCQkJCQkqcHJpdmF0ZTsKLQljaGFyCQkJCQlfbmFtZVszNV07Ci0JY2hhcgkJCQkJX2F0dHJuYW1lWzIwXTsKLX07Ci0KLS8qKgotICogc3RydWN0IGlpb19ldmVudF9oYW5kbGVyX2xpc3QgLSBlbGVtZW50IGluIGxpc3Qgb2YgaGFuZGxlcnMgZm9yIGV2ZW50cwotICogQGxpc3Q6CQlsaXN0IGhlYWRlcgotICogQHJlZmNvdW50OgkJYXMgdGhlIGhhbmRsZXIgbWF5IGJlIHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxlIGRldmljZQotICoJCQlzaWRlIGV2ZW50cywgcmVmZXJlbmNlIGNvdW50aW5nIGVuc3VyZXMgY2xlYW4gcmVtb3ZhbAotICogQGV4aXN0X2xvY2s6CQlwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnMgcmVsYXRlZCB0byByZWZjb3VudCB1c2FnZS4KLSAqIEBoYW5kbGVyOgkJZXZlbnQgaGFuZGxlciBmdW5jdGlvbiAtIGNhbGxlZCBvbiBldmVudCBpZiB0aGlzCi0gKgkJCWV2ZW50X2hhbmRsZXIgaXMgZW5hYmxlZC4KLSAqCi0gKiBFYWNoIGRldmljZSBoYXMgb25lIGxpc3Qgb2YgdGhlc2UgcGVyIGludGVycnVwdCBsaW5lLgotICoqLwotc3RydWN0IGlpb19ldmVudF9oYW5kbGVyX2xpc3QgewotCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKLQlpbnQJCQlyZWZjb3VudDsKLQlzdHJ1Y3QgbXV0ZXgJCWV4aXN0X2xvY2s7Ci0JaW50ICgqaGFuZGxlcikoc3RydWN0IGlpb19kZXYgKmRldl9pbmZvLCBpbnQgaW5kZXgsIHM2NCB0aW1lc3RhbXAsCi0JCSAgICAgICBpbnQgbm9fdGVzdCk7CisJc3RydWN0IGxpc3RfaGVhZCBkZXZfYXR0cl9saXN0OwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2RhYy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2lpby9kYWMvS2NvbmZpZwppbmRleCA2N2RlZmNiLi5kNWE1NTU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2RhYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZGFjL0tjb25maWcKQEAgLTIxLDYgKzIxLDI3IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhZDU0NDYuCiAKK2NvbmZpZyBBRDU1MDQKKwl0cmlzdGF0ZSAiQW5hbG9nIERldmljZXMgQUQ1NTA0L0FENTUwMSBEQUMgU1BJIGRyaXZlciIKKwlkZXBlbmRzIG9uIFNQSQorCWhlbHAKKwkgIFNheSB5ZXMgaGVyZSB0byBidWlsZCBzdXBwb3J0IGZvciBBbmFsb2cgRGV2aWNlcyBBRDU1MDQsIEFENTUwMSwKKwkgIEhpZ2ggVm9sdGFnZSBEaWdpdGFsIHRvIEFuYWxvZyBDb252ZXJ0ZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFkNTUwNC4KKworY29uZmlnIEFENTc5MQorCXRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBBRDU3NjAvQUQ1NzgwL0FENTc4MS9BRDU3OTEgREFDIFNQSSBkcml2ZXIiCisJZGVwZW5kcyBvbiBTUEkKKwloZWxwCisJICBTYXkgeWVzIGhlcmUgdG8gYnVpbGQgc3VwcG9ydCBmb3IgQW5hbG9nIERldmljZXMgQUQ1NzYwLCBBRDU3ODAsCisJICBBRDU3ODEsIEFENTc5MSBIaWdoIFJlc29sdXRpb24gVm9sdGFnZSBPdXRwdXQgRGlnaXRhbCB0bworCSAgQW5hbG9nIENvbnZlcnRlci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWQ1NzkxLgorCiBjb25maWcgTUFYNTE3CiAJdHJpc3RhdGUgIk1heGltIE1BWDUxNy81MTgvNTE5IERBQyBkcml2ZXIiCiAJZGVwZW5kcyBvbiBJMkMgJiYgRVhQRVJJTUVOVEFMCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2RhYy9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZGFjL01ha2VmaWxlCmluZGV4IDExOTdhZWYuLjgzMTk2ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZGFjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZGFjL01ha2VmaWxlCkBAIC0zLDUgKzMsNyBAQAogIwogCiBvYmotJChDT05GSUdfQUQ1NjI0Ul9TUEkpICs9IGFkNTYyNHJfc3BpLm8KK29iai0kKENPTkZJR19BRDU1MDQpICs9IGFkNTUwNC5vCiBvYmotJChDT05GSUdfQUQ1NDQ2KSArPSBhZDU0NDYubworb2JqLSQoQ09ORklHX0FENTc5MSkgKz0gYWQ1NzkxLm8KIG9iai0kKENPTkZJR19NQVg1MTcpICs9IG1heDUxNy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2RhYy9hZDU0NDYuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZGFjL2FkNTQ0Ni5jCmluZGV4IDg2MjNhNzIuLjg2Y2IwOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZGFjL2FkNTQ0Ni5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZGFjL2FkNTQ0Ni5jCkBAIC0xMDYsMTcgKzEwNiw2IEBACiB9CiBzdGF0aWMgSUlPX0RFVklDRV9BVFRSKG91dF9zY2FsZSwgU19JUlVHTywgYWQ1NDQ2X3Nob3dfc2NhbGUsIE5VTEwsIDApOwogCi1zdGF0aWMgc3NpemVfdCBhZDU0NDZfc2hvd19uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgYWQ1NDQ2X3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoZGV2X2luZm8pOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHNwaV9nZXRfZGV2aWNlX2lkKHN0LT5zcGkpLT5uYW1lKTsKLX0KLXN0YXRpYyBJSU9fREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgYWQ1NDQ2X3Nob3dfbmFtZSwgTlVMTCwgMCk7Ci0KIHN0YXRpYyBzc2l6ZV90IGFkNTQ0Nl93cml0ZV9wb3dlcmRvd25fbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCkBAIC0yMDQsNyArMTkzLDYgQEAKIAkmaWlvX2Rldl9hdHRyX291dDBfcG93ZXJkb3duLmRldl9hdHRyLmF0dHIsCiAJJmlpb19kZXZfYXR0cl9vdXRfcG93ZXJkb3duX21vZGUuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2NvbnN0X2F0dHJfb3V0X3Bvd2VyZG93bl9tb2RlX2F2YWlsYWJsZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfbmFtZS5kZXZfYXR0ci5hdHRyLAogCU5VTEwsCiB9OwogCkBAIC0yNDUsNiArMjMzLDEyIEBACiAJCS5sZWZ0X3NoaWZ0ID0gMCwKIAkJLnN0b3JlX3NhbXBsZSA9IGFkNTQ0Nl9zdG9yZV9zYW1wbGUsCiAJfSwKKwlbSURfQUQ1NTQxQV0gPSB7CisJCS5iaXRzID0gMTYsCisJCS5zdG9yYWdlYml0cyA9IDE2LAorCQkubGVmdF9zaGlmdCA9IDAsCisJCS5zdG9yZV9zYW1wbGUgPSBhZDU1NDJfc3RvcmVfc2FtcGxlLAorCX0sCiAJW0lEX0FENTU0MkFdID0gewogCQkuYml0cyA9IDE2LAogCQkuc3RvcmFnZWJpdHMgPSAxNiwKQEAgLTM0MCw2ICszMzQsMTEgQEAKIAl9LAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9faW5mbyBhZDU0NDZfaW5mbyA9IHsKKwkuYXR0cnMgPSAmYWQ1NDQ2X2F0dHJpYnV0ZV9ncm91cCwKKwkuZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFLAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgYWQ1NDQ2X3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CiAJc3RydWN0IGFkNTQ0Nl9zdGF0ZSAqc3Q7CkBAIC0zNjcsNyArMzY2LDcgQEAKIAogCXN0LT5zcGkgPSBzcGk7CiAKLQlzdC0+aW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgpOworCXN0LT5pbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKDApOwogCWlmIChzdC0+aW5kaW9fZGV2ID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9kaXNhYmxlX3JlZzsKQEAgLTM3NSw5ICszNzQsOSBAQAogCiAJLyogRXN0YWJpbGlzaCB0aGF0IHRoZSBpaW9fZGV2IGlzIGEgY2hpbGQgb2YgdGhlIHNwaSBkZXZpY2UgKi8KIAlzdC0+aW5kaW9fZGV2LT5kZXYucGFyZW50ID0gJnNwaS0+ZGV2OwotCXN0LT5pbmRpb19kZXYtPmF0dHJzID0gJmFkNTQ0Nl9hdHRyaWJ1dGVfZ3JvdXA7CisJc3QtPmluZGlvX2Rldi0+bmFtZSA9IHNwaV9nZXRfZGV2aWNlX2lkKHNwaSktPm5hbWU7CisJc3QtPmluZGlvX2Rldi0+aW5mbyA9ICZhZDU0NDZfaW5mbzsKIAlzdC0+aW5kaW9fZGV2LT5kZXZfZGF0YSA9ICh2b2lkICopKHN0KTsKLQlzdC0+aW5kaW9fZGV2LT5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEU7CiAJc3QtPmluZGlvX2Rldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1RfTU9ERTsKIAogCS8qIFNldHVwIGRlZmF1bHQgbWVzc2FnZSAqLwpAQCAtNDQyLDYgKzQ0MSw3IEBACiAJeyJhZDU0NDQiLCBJRF9BRDU0NDR9LAogCXsiYWQ1NDQ2IiwgSURfQUQ1NDQ2fSwKIAl7ImFkNTUxMmEiLCBJRF9BRDU1MTJBfSwKKwl7ImFkNTU0MWEiLCBJRF9BRDU1NDFBfSwKIAl7ImFkNTU0MmEiLCBJRF9BRDU1NDJBfSwKIAl7ImFkNTU0MyIsIElEX0FENTU0M30sCiAJeyJhZDU1NTMiLCBJRF9BRDU1NTN9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9kYWMvYWQ1NDQ2LmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2RhYy9hZDU0NDYuaAppbmRleCA3YWM2M2FiOGEuLmU2ZmZkMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZGFjL2FkNTQ0Ni5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZGFjL2FkNTQ0Ni5oCkBAIC05Miw2ICs5Miw3IEBACiBlbnVtIGFkNTQ0Nl9zdXBwb3J0ZWRfZGV2aWNlX2lkcyB7CiAJSURfQUQ1NDQ0LAogCUlEX0FENTQ0NiwKKwlJRF9BRDU1NDFBLAogCUlEX0FENTU0MkEsCiAJSURfQUQ1NTQzLAogCUlEX0FENTUxMkEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2RhYy9hZDU1MDQuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZGFjL2FkNTUwNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMDI5Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2RhYy9hZDU1MDQuYwpAQCAtMCwwICsxLDQwNCBAQAorLyoKKyAqIEFENTUwNCwgQUQ1NTAxIEhpZ2ggVm9sdGFnZSBEaWdpdGFsIHRvIEFuYWxvZyBDb252ZXJ0ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAxMSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisKKyNpbmNsdWRlICIuLi9paW8uaCIKKyNpbmNsdWRlICIuLi9zeXNmcy5oIgorI2luY2x1ZGUgImRhYy5oIgorI2luY2x1ZGUgImFkNTUwNC5oIgorCitzdGF0aWMgaW50IGFkNTUwNF9zcGlfd3JpdGUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgdTggYWRkciwgdTE2IHZhbCkKK3sKKwl1MTYgdG1wID0gY3B1X3RvX2JlMTYoQUQ1NTA0X0NNRF9XUklURSB8CisJCQkgICAgICBBRDU1MDRfQUREUihhZGRyKSB8CisJCQkgICAgICAodmFsICYgQUQ1NTA0X1JFU19NQVNLKSk7CisKKwlyZXR1cm4gc3BpX3dyaXRlKHNwaSwgKHU4ICopJnRtcCwgMik7Cit9CisKK3N0YXRpYyBpbnQgYWQ1NTA0X3NwaV9yZWFkKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHU4IGFkZHIsIHUxNiAqdmFsKQoreworCXUxNiB0bXAgPSBjcHVfdG9fYmUxNihBRDU1MDRfQ01EX1JFQUQgfCBBRDU1MDRfQUREUihhZGRyKSk7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyCXQgPSB7CisJCQkudHhfYnVmCQk9ICZ0bXAsCisJCQkucnhfYnVmCQk9IHZhbCwKKwkJCS5sZW4JCT0gMiwKKwkJfTsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UJbTsKKworCXNwaV9tZXNzYWdlX2luaXQoJm0pOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0LCAmbSk7CisJcmV0ID0gc3BpX3N5bmMoc3BpLCAmbSk7CisKKwkqdmFsID0gYmUxNl90b19jcHUoKnZhbCkgJiBBRDU1MDRfUkVTX01BU0s7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBhZDU1MDRfd3JpdGVfZGFjKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGFkNTUwNF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CisJc3RydWN0IGlpb19kZXZfYXR0ciAqdGhpc19hdHRyID0gdG9faWlvX2Rldl9hdHRyKGF0dHIpOworCWxvbmcgcmVhZGluOworCWludCByZXQ7CisKKwlyZXQgPSBzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZyZWFkaW4pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBhZDU1MDRfc3BpX3dyaXRlKHN0LT5zcGksIHRoaXNfYXR0ci0+YWRkcmVzcywgcmVhZGluKTsKKwlyZXR1cm4gcmV0ID8gcmV0IDogbGVuOworfQorCitzdGF0aWMgc3NpemVfdCBhZDU1MDRfcmVhZF9kYWMoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgYWQ1NTA0X3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKKwlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7CisJaW50IHJldDsKKwl1MTYgdmFsOworCisJcmV0ID0gYWQ1NTA0X3NwaV9yZWFkKHN0LT5zcGksIHRoaXNfYXR0ci0+YWRkcmVzcywgJnZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB2YWwpOworfQorCitzdGF0aWMgc3NpemVfdCBhZDU1MDRfcmVhZF9wb3dlcmRvd25fbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGFkNTUwNF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CisKKwljb25zdCBjaGFyIG1vZGVbXVsxNF0gPSB7IjIwa29obV90b19nbmQiLCAidGhyZWVfc3RhdGUifTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBtb2RlW3N0LT5wd3JfZG93bl9tb2RlXSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFkNTUwNF93cml0ZV9wb3dlcmRvd25fbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBhZDU1MDRfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOworCWludCByZXQ7CisKKwlpZiAoc3lzZnNfc3RyZXEoYnVmLCAiMjBrb2htX3RvX2duZCIpKQorCQlzdC0+cHdyX2Rvd25fbW9kZSA9IEFENTUwNF9EQUNfUFdSRE5fMjBLOworCWVsc2UgaWYgKHN5c2ZzX3N0cmVxKGJ1ZiwgInRocmVlX3N0YXRlIikpCisJCXN0LT5wd3JfZG93bl9tb2RlID0gQUQ1NTA0X0RBQ19QV1JETl8zU1RBVEU7CisJZWxzZQorCQlyZXQgPSAtRUlOVkFMOworCisJcmV0dXJuIHJldCA/IHJldCA6IGxlbjsKK30KKworc3RhdGljIHNzaXplX3QgYWQ1NTA0X3JlYWRfZGFjX3Bvd2VyZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgICBjaGFyICpidWYpCit7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBhZDU1MDRfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOworCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLAorCQkJIShzdC0+cHdyX2Rvd25fbWFzayAmICgxIDw8IHRoaXNfYXR0ci0+YWRkcmVzcykpKTsKK30KKworc3RhdGljIHNzaXplX3QgYWQ1NTA0X3dyaXRlX2RhY19wb3dlcmRvd24oc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJbG9uZyByZWFkaW47CisJaW50IHJldDsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGFkNTUwNF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CisJc3RydWN0IGlpb19kZXZfYXR0ciAqdGhpc19hdHRyID0gdG9faWlvX2Rldl9hdHRyKGF0dHIpOworCisJcmV0ID0gc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmcmVhZGluKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKHJlYWRpbiA9PSAwKQorCQlzdC0+cHdyX2Rvd25fbWFzayB8PSAoMSA8PCB0aGlzX2F0dHItPmFkZHJlc3MpOworCWVsc2UgaWYgKHJlYWRpbiA9PSAxKQorCQlzdC0+cHdyX2Rvd25fbWFzayAmPSB+KDEgPDwgdGhpc19hdHRyLT5hZGRyZXNzKTsKKwllbHNlCisJCXJldCA9IC1FSU5WQUw7CisKKwlyZXQgPSBhZDU1MDRfc3BpX3dyaXRlKHN0LT5zcGksIEFENTUwNF9BRERSX0NUUkwsCisJCQkJQUQ1NTA0X0RBQ19QV1JEV05fTU9ERShzdC0+cHdyX2Rvd25fbW9kZSkgfAorCQkJCUFENTUwNF9EQUNfUFdSKHN0LT5wd3JfZG93bl9tYXNrKSk7CisKKwkvKiB3cml0ZXMgdG8gdGhlIENUUkwgcmVnaXN0ZXIgbXVzdCBiZSBmb2xsb3dlZCBieSBhIE5PT1AgKi8KKwlhZDU1MDRfc3BpX3dyaXRlKHN0LT5zcGksIEFENTUwNF9BRERSX05PT1AsIDApOworCisJcmV0dXJuIHJldCA/IHJldCA6IGxlbjsKK30KKworc3RhdGljIHNzaXplX3QgYWQ1NTA0X3Nob3dfc2NhbGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGFkNTUwNF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CisJLyogQ29ycmVzcG9uZHMgdG8gVnJlZiAvIDJeKGJpdHMpICovCisJdW5zaWduZWQgaW50IHNjYWxlX3V2ID0gKHN0LT52cmVmX212ICogMTAwMCkgPj4gQUQ1NTA1X0JJVFM7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lMDNkXG4iLCBzY2FsZV91diAvIDEwMDAsIHNjYWxlX3V2ICUgMTAwMCk7Cit9CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSKG91dF9zY2FsZSwgU19JUlVHTywgYWQ1NTA0X3Nob3dfc2NhbGUsIE5VTEwsIDApOworCisjZGVmaW5lIElJT19ERVZfQVRUUl9PVVRfUldfUkFXKF9udW0sIF9zaG93LCBfc3RvcmUsIF9hZGRyKQkJXAorCUlJT19ERVZJQ0VfQVRUUihvdXQjI19udW0jI19yYXcsCQkJCVwKKwkJCVNfSVJVR08gfCBTX0lXVVNSLCBfc2hvdywgX3N0b3JlLCBfYWRkcikKKworc3RhdGljIElJT19ERVZfQVRUUl9PVVRfUldfUkFXKDAsIGFkNTUwNF9yZWFkX2RhYywKKwlhZDU1MDRfd3JpdGVfZGFjLCBBRDU1MDRfQUREUl9EQUMwKTsKK3N0YXRpYyBJSU9fREVWX0FUVFJfT1VUX1JXX1JBVygxLCBhZDU1MDRfcmVhZF9kYWMsCisJYWQ1NTA0X3dyaXRlX2RhYywgQUQ1NTA0X0FERFJfREFDMSk7CitzdGF0aWMgSUlPX0RFVl9BVFRSX09VVF9SV19SQVcoMiwgYWQ1NTA0X3JlYWRfZGFjLAorCWFkNTUwNF93cml0ZV9kYWMsIEFENTUwNF9BRERSX0RBQzIpOworc3RhdGljIElJT19ERVZfQVRUUl9PVVRfUldfUkFXKDMsIGFkNTUwNF9yZWFkX2RhYywKKwlhZDU1MDRfd3JpdGVfZGFjLCBBRDU1MDRfQUREUl9EQUMzKTsKKworc3RhdGljIElJT19ERVZJQ0VfQVRUUihvdXRfcG93ZXJkb3duX21vZGUsIFNfSVJVR08gfAorCQkJU19JV1VTUiwgYWQ1NTA0X3JlYWRfcG93ZXJkb3duX21vZGUsCisJCQlhZDU1MDRfd3JpdGVfcG93ZXJkb3duX21vZGUsIDApOworCitzdGF0aWMgSUlPX0NPTlNUX0FUVFIob3V0X3Bvd2VyZG93bl9tb2RlX2F2YWlsYWJsZSwKKwkJCSIyMGtvaG1fdG9fZ25kIHRocmVlX3N0YXRlIik7CisKKyNkZWZpbmUgSUlPX0RFVl9BVFRSX0RBQ19QT1dFUkRPV04oX251bSwgX3Nob3csIF9zdG9yZSwgX2FkZHIpCQlcCisJSUlPX0RFVklDRV9BVFRSKG91dCMjX251bSMjX3Bvd2VyZG93biwJCQkJXAorCQkJU19JUlVHTyB8IFNfSVdVU1IsIF9zaG93LCBfc3RvcmUsIF9hZGRyKQorCitzdGF0aWMgSUlPX0RFVl9BVFRSX0RBQ19QT1dFUkRPV04oMCwgYWQ1NTA0X3JlYWRfZGFjX3Bvd2VyZG93biwKKwkJCQkgICBhZDU1MDRfd3JpdGVfZGFjX3Bvd2VyZG93biwgMCk7CitzdGF0aWMgSUlPX0RFVl9BVFRSX0RBQ19QT1dFUkRPV04oMSwgYWQ1NTA0X3JlYWRfZGFjX3Bvd2VyZG93biwKKwkJCQkgICBhZDU1MDRfd3JpdGVfZGFjX3Bvd2VyZG93biwgMSk7CitzdGF0aWMgSUlPX0RFVl9BVFRSX0RBQ19QT1dFUkRPV04oMiwgYWQ1NTA0X3JlYWRfZGFjX3Bvd2VyZG93biwKKwkJCQkgICBhZDU1MDRfd3JpdGVfZGFjX3Bvd2VyZG93biwgMik7CitzdGF0aWMgSUlPX0RFVl9BVFRSX0RBQ19QT1dFUkRPV04oMywgYWQ1NTA0X3JlYWRfZGFjX3Bvd2VyZG93biwKKwkJCQkgICBhZDU1MDRfd3JpdGVfZGFjX3Bvd2VyZG93biwgMyk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZDU1MDRfYXR0cmlidXRlc1tdID0geworCSZpaW9fZGV2X2F0dHJfb3V0MF9yYXcuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX291dDFfcmF3LmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9vdXQyX3Jhdy5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfb3V0M19yYXcuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX291dDBfcG93ZXJkb3duLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9vdXQxX3Bvd2VyZG93bi5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfb3V0Ml9wb3dlcmRvd24uZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX291dDNfcG93ZXJkb3duLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9vdXRfcG93ZXJkb3duX21vZGUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2NvbnN0X2F0dHJfb3V0X3Bvd2VyZG93bl9tb2RlX2F2YWlsYWJsZS5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfb3V0X3NjYWxlLmRldl9hdHRyLmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFkNTUwNF9hdHRyaWJ1dGVfZ3JvdXAgPSB7CisJLmF0dHJzID0gYWQ1NTA0X2F0dHJpYnV0ZXMsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWQ1NTAxX2F0dHJpYnV0ZXNbXSA9IHsKKwkmaWlvX2Rldl9hdHRyX291dDBfcmF3LmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9vdXQwX3Bvd2VyZG93bi5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfb3V0X3Bvd2VyZG93bl9tb2RlLmRldl9hdHRyLmF0dHIsCisJJmlpb19jb25zdF9hdHRyX291dF9wb3dlcmRvd25fbW9kZV9hdmFpbGFibGUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX291dF9zY2FsZS5kZXZfYXR0ci5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZDU1MDFfYXR0cmlidXRlX2dyb3VwID0geworCS5hdHRycyA9IGFkNTUwMV9hdHRyaWJ1dGVzLAorfTsKKworc3RhdGljIElJT19DT05TVF9BVFRSKHRlbXAwX3RocmVzaF9yaXNpbmdfdmFsdWUsICIxMTAwMDAiKTsKK3N0YXRpYyBJSU9fQ09OU1RfQVRUUih0ZW1wMF90aHJlc2hfcmlzaW5nX2VuLCAiMSIpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWQ1NTA0X2V2X2F0dHJpYnV0ZXNbXSA9IHsKKwkmaWlvX2NvbnN0X2F0dHJfdGVtcDBfdGhyZXNoX3Jpc2luZ192YWx1ZS5kZXZfYXR0ci5hdHRyLAorCSZpaW9fY29uc3RfYXR0cl90ZW1wMF90aHJlc2hfcmlzaW5nX2VuLmRldl9hdHRyLmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFkNTUwNF9ldl9hdHRyaWJ1dGVfZ3JvdXAgPSB7CisJLmF0dHJzID0gYWQ1NTA0X2V2X2F0dHJpYnV0ZXMsCit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgYWQ1NTA0X2V2ZW50X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqcHJpdmF0ZSkKK3sKKwlpaW9fcHVzaF9ldmVudChwcml2YXRlLCAwLAorCQkgICAgICAgSUlPX1VOTU9EX0VWRU5UX0NPREUoSUlPX0VWX0NMQVNTX1RFTVAsCisJCQkJCSAgICAwLAorCQkJCQkgICAgSUlPX0VWX1RZUEVfVEhSRVNILAorCQkJCQkgICAgSUlPX0VWX0RJUl9SSVNJTkcpLAorCQkgICAgICAgaWlvX2dldF90aW1lX25zKCkpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIGFkNTUwNF9pbmZvID0geworCS5hdHRycyA9ICZhZDU1MDRfYXR0cmlidXRlX2dyb3VwLAorCS5udW1faW50ZXJydXB0X2xpbmVzID0gMSwKKwkuZXZlbnRfYXR0cnMgPSAmYWQ1NTA0X2V2X2F0dHJpYnV0ZV9ncm91cCwKKwkuZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9faW5mbyBhZDU1MDFfaW5mbyA9IHsKKwkuYXR0cnMgPSAmYWQ1NTAxX2F0dHJpYnV0ZV9ncm91cCwKKwkubnVtX2ludGVycnVwdF9saW5lcyA9IDEsCisJLmV2ZW50X2F0dHJzID0gJmFkNTUwNF9ldl9hdHRyaWJ1dGVfZ3JvdXAsCisJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGFkNTUwNF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBhZDU1MDRfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBhZDU1MDRfc3RhdGUgKnN0OworCWludCByZXQsIHZvbHRhZ2VfdXYgPSAwOworCisJc3QgPSBremFsbG9jKHNpemVvZigqc3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3QgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yX3JldDsKKwl9CisKKwlzcGlfc2V0X2RydmRhdGEoc3BpLCBzdCk7CisKKwlzdC0+cmVnID0gcmVndWxhdG9yX2dldCgmc3BpLT5kZXYsICJ2Y2MiKTsKKwlpZiAoIUlTX0VSUihzdC0+cmVnKSkgeworCQlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHN0LT5yZWcpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcl9wdXRfcmVnOworCisJCXZvbHRhZ2VfdXYgPSByZWd1bGF0b3JfZ2V0X3ZvbHRhZ2Uoc3QtPnJlZyk7CisJfQorCisJaWYgKHZvbHRhZ2VfdXYpCisJCXN0LT52cmVmX212ID0gdm9sdGFnZV91diAvIDEwMDA7CisJZWxzZSBpZiAocGRhdGEpCisJCXN0LT52cmVmX212ID0gcGRhdGEtPnZyZWZfbXY7CisJZWxzZQorCQlkZXZfd2Fybigmc3BpLT5kZXYsICJyZWZlcmVuY2Ugdm9sdGFnZSB1bnNwZWNpZmllZFxuIik7CisKKwlzdC0+c3BpID0gc3BpOworCXN0LT5pbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKDApOworCWlmIChzdC0+aW5kaW9fZGV2ID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJvcl9kaXNhYmxlX3JlZzsKKwl9CisJc3QtPmluZGlvX2Rldi0+ZGV2LnBhcmVudCA9ICZzcGktPmRldjsKKwlzdC0+aW5kaW9fZGV2LT5uYW1lID0gc3BpX2dldF9kZXZpY2VfaWQoc3QtPnNwaSktPm5hbWU7CisJaWYgKHNwaV9nZXRfZGV2aWNlX2lkKHN0LT5zcGkpLT5kcml2ZXJfZGF0YSA9PSBJRF9BRDU1MDEpCisJCXN0LT5pbmRpb19kZXYtPmluZm8gPSAmYWQ1NTAxX2luZm87CisJZWxzZQorCQlzdC0+aW5kaW9fZGV2LT5pbmZvID0gJmFkNTUwNF9pbmZvOworCXN0LT5pbmRpb19kZXYtPmRldl9kYXRhID0gKHZvaWQgKikoc3QpOworCXN0LT5pbmRpb19kZXYtPm1vZGVzID0gSU5ESU9fRElSRUNUX01PREU7CisKKwlyZXQgPSBpaW9fZGV2aWNlX3JlZ2lzdGVyKHN0LT5pbmRpb19kZXYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3JfZnJlZV9kZXY7CisKKwlpZiAoc3BpLT5pcnEpIHsKKwkJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoc3BpLT5pcnEsCisJCQkJCSAgIE5VTEwsCisJCQkJCSAgICZhZDU1MDRfZXZlbnRfaGFuZGxlciwKKwkJCQkJICAgSVJRRl9UUklHR0VSX0ZBTExJTkcgfCBJUlFGX09ORVNIT1QsCisJCQkJCSAgIHNwaV9nZXRfZGV2aWNlX2lkKHN0LT5zcGkpLT5uYW1lLAorCQkJCQkgICBzdC0+aW5kaW9fZGV2KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3JfdW5yZWdfaWlvX2RldmljZTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyb3JfdW5yZWdfaWlvX2RldmljZToKKwlpaW9fZGV2aWNlX3VucmVnaXN0ZXIoc3QtPmluZGlvX2Rldik7CitlcnJvcl9mcmVlX2RldjoKKwlpaW9fZnJlZV9kZXZpY2Uoc3QtPmluZGlvX2Rldik7CitlcnJvcl9kaXNhYmxlX3JlZzoKKwlpZiAoIUlTX0VSUihzdC0+cmVnKSkKKwkJcmVndWxhdG9yX2Rpc2FibGUoc3QtPnJlZyk7CitlcnJvcl9wdXRfcmVnOgorCWlmICghSVNfRVJSKHN0LT5yZWcpKQorCQlyZWd1bGF0b3JfcHV0KHN0LT5yZWcpOworCisJa2ZyZWUoc3QpOworZXJyb3JfcmV0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGFkNTUwNF9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgYWQ1NTA0X3N0YXRlICpzdCA9IHNwaV9nZXRfZHJ2ZGF0YShzcGkpOworCisJaWYgKHNwaS0+aXJxKQorCQlmcmVlX2lycShzcGktPmlycSwgc3QtPmluZGlvX2Rldik7CisKKwlpaW9fZGV2aWNlX3VucmVnaXN0ZXIoc3QtPmluZGlvX2Rldik7CisKKwlpZiAoIUlTX0VSUihzdC0+cmVnKSkgeworCQlyZWd1bGF0b3JfZGlzYWJsZShzdC0+cmVnKTsKKwkJcmVndWxhdG9yX3B1dChzdC0+cmVnKTsKKwl9CisKKwlrZnJlZShzdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzcGlfZGV2aWNlX2lkIGFkNTUwNF9pZFtdID0geworCXsiYWQ1NTA0IiwgSURfQUQ1NTA0fSwKKwl7ImFkNTUwMSIsIElEX0FENTUwMX0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBhZDU1MDRfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCSAgIC5uYW1lID0gImFkNTUwNCIsCisJCSAgIC5vd25lciA9IFRISVNfTU9EVUxFLAorCQkgICB9LAorCS5wcm9iZSA9IGFkNTUwNF9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoYWQ1NTA0X3JlbW92ZSksCisJLmlkX3RhYmxlID0gYWQ1NTA0X2lkLAorfTsKKworc3RhdGljIF9faW5pdCBpbnQgYWQ1NTA0X3NwaV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHNwaV9yZWdpc3Rlcl9kcml2ZXIoJmFkNTUwNF9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoYWQ1NTA0X3NwaV9pbml0KTsKKworc3RhdGljIF9fZXhpdCB2b2lkIGFkNTUwNF9zcGlfZXhpdCh2b2lkKQoreworCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmYWQ1NTA0X2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChhZDU1MDRfc3BpX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEhlbm5lcmljaCA8aGVubmVyaWNoQGJsYWNrZmluLnVjbGludXgub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBbmFsb2cgRGV2aWNlcyBBRDU1MDEvQUQ1NTAxIERBQyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9kYWMvYWQ1NTA0LmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2RhYy9hZDU1MDQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2VmMzUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9kYWMvYWQ1NTA0LmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIEFENTUwNCBTUEkgREFDIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDExIEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIuCisgKi8KKworI2lmbmRlZiBTUElfQUQ1NTA0X0hfCisjZGVmaW5lIFNQSV9BRDU1MDRfSF8KKworI2RlZmluZSBBRDU1MDVfQklUUwkJCTEyCisjZGVmaW5lIEFENTUwNF9SRVNfTUFTSwkJCSgoMSA8PCAoQUQ1NTA1X0JJVFMpKSAtIDEpCisKKyNkZWZpbmUgQUQ1NTA0X0NNRF9SRUFECQkJKDEgPDwgMTUpCisjZGVmaW5lIEFENTUwNF9DTURfV1JJVEUJCSgwIDw8IDE1KQorI2RlZmluZSBBRDU1MDRfQUREUihhZGRyKQkJKChhZGRyKSA8PCAxMikKKworLyogUmVnaXN0ZXJzICovCisjZGVmaW5lIEFENTUwNF9BRERSX05PT1AJCTAKKyNkZWZpbmUgQUQ1NTA0X0FERFJfREFDMAkJMQorI2RlZmluZSBBRDU1MDRfQUREUl9EQUMxCQkyCisjZGVmaW5lIEFENTUwNF9BRERSX0RBQzIJCTMKKyNkZWZpbmUgQUQ1NTA0X0FERFJfREFDMwkJNAorI2RlZmluZSBBRDU1MDRfQUREUl9BTExfREFDCQk1CisjZGVmaW5lIEFENTUwNF9BRERSX0NUUkwJCTcKKworLyogQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBBRDU1MDRfREFDX1BXUihjaCkJCSgoY2gpIDw8IDIpCisjZGVmaW5lIEFENTUwNF9EQUNfUFdSRFdOX01PREUobW9kZSkJKChtb2RlKSA8PCA2KQorI2RlZmluZSBBRDU1MDRfREFDX1BXUkROXzIwSwkJMAorI2RlZmluZSBBRDU1MDRfREFDX1BXUkROXzNTVEFURQkJMQorCisvKgorICogVE9ETzogc3RydWN0IGFkNTUwNF9wbGF0Zm9ybV9kYXRhIG5lZWRzIHRvIGdvIGludG8gaW5jbHVkZS9saW51eC9paW8KKyAqLworCitzdHJ1Y3QgYWQ1NTA0X3BsYXRmb3JtX2RhdGEgeworCXUxNgkJCQl2cmVmX212OworfTsKKworLyoqCisgKiBzdHJ1Y3QgYWQ1NDQ2X3N0YXRlIC0gZHJpdmVyIGluc3RhbmNlIHNwZWNpZmljIGRhdGEKKyAqIEBpbmRpb19kZXY6CQl0aGUgaW5kdXN0cmlhbCBJL08gZGV2aWNlCisgKiBAdXM6CQkJc3BpX2RldmljZQorICogQHJlZzoJCXN1cHBseSByZWd1bGF0b3IKKyAqIEB2cmVmX212OgkJYWN0dWFsIHJlZmVyZW5jZSB2b2x0YWdlIHVzZWQKKyAqIEBwd3JfZG93bl9tYXNrCXBvd2VyIGRvd24gbWFzaworICogQHB3cl9kb3duX21vZGUJY3VycmVudCBwb3dlciBkb3duIG1vZGUKKyAqLworCitzdHJ1Y3QgYWQ1NTA0X3N0YXRlIHsKKwlzdHJ1Y3QgaWlvX2RldgkJCSppbmRpb19kZXY7CisJc3RydWN0IHNwaV9kZXZpY2UJCSpzcGk7CisJc3RydWN0IHJlZ3VsYXRvcgkJKnJlZzsKKwl1bnNpZ25lZCBzaG9ydAkJCXZyZWZfbXY7CisJdW5zaWduZWQJCQlwd3JfZG93bl9tYXNrOworCXVuc2lnbmVkCQkJcHdyX2Rvd25fbW9kZTsKK307CisKKy8qKgorICogYWQ1NTA0X3N1cHBvcnRlZF9kZXZpY2VfaWRzOgorICovCisKK2VudW0gYWQ1NTA0X3N1cHBvcnRlZF9kZXZpY2VfaWRzIHsKKwlJRF9BRDU1MDQsCisJSURfQUQ1NTAxLAorfTsKKworI2VuZGlmIC8qIFNQSV9BRDU1MDRfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZGFjL2FkNTYyNHJfc3BpLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2RhYy9hZDU2MjRyX3NwaS5jCmluZGV4IGE5NDViMTguLmM2Nzk5ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZGFjL2FkNTYyNHJfc3BpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9kYWMvYWQ1NjI0cl9zcGkuYwpAQCAtMTc0LDE3ICsxNzQsNiBAQAogfQogc3RhdGljIElJT19ERVZJQ0VfQVRUUihvdXRfc2NhbGUsIFNfSVJVR08sIGFkNTYyNHJfc2hvd19zY2FsZSwgTlVMTCwgMCk7CiAKLXN0YXRpYyBzc2l6ZV90IGFkNTYyNHJfc2hvd19uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGFkNTYyNHJfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHNwaV9nZXRfZGV2aWNlX2lkKHN0LT51cyktPm5hbWUpOwotfQotc3RhdGljIElJT19ERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBhZDU2MjRyX3Nob3dfbmFtZSwgTlVMTCwgMCk7Ci0KIHN0YXRpYyBJSU9fREVWX0FUVFJfT1VUX1JBVygwLCBhZDU2MjRyX3dyaXRlX2RhYywgQUQ1NjI0Ul9BRERSX0RBQzApOwogc3RhdGljIElJT19ERVZfQVRUUl9PVVRfUkFXKDEsIGFkNTYyNHJfd3JpdGVfZGFjLCBBRDU2MjRSX0FERFJfREFDMSk7CiBzdGF0aWMgSUlPX0RFVl9BVFRSX09VVF9SQVcoMiwgYWQ1NjI0cl93cml0ZV9kYWMsIEFENTYyNFJfQUREUl9EQUMyKTsKQEAgLTIyMiw3ICsyMTEsNiBAQAogCSZpaW9fZGV2X2F0dHJfb3V0X3Bvd2VyZG93bl9tb2RlLmRldl9hdHRyLmF0dHIsCiAJJmlpb19jb25zdF9hdHRyX291dF9wb3dlcmRvd25fbW9kZV9hdmFpbGFibGUuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX291dF9zY2FsZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfbmFtZS5kZXZfYXR0ci5hdHRyLAogCU5VTEwsCiB9OwogCkBAIC0yMzAsNiArMjE4LDExIEBACiAJLmF0dHJzID0gYWQ1NjI0cl9hdHRyaWJ1dGVzLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9faW5mbyBhZDU2MjRyX2luZm8gPSB7CisJLmF0dHJzID0gJmFkNTYyNHJfYXR0cmlidXRlX2dyb3VwLAorCS5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEUsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhZDU2MjRyX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CiAJc3RydWN0IGFkNTYyNHJfc3RhdGUgKnN0OwpAQCAtMjYwLDE1ICsyNTMsMTUgQEAKIAkJc3QtPnZyZWZfbXYgPSBzdC0+Y2hpcF9pbmZvLT5pbnRfdnJlZl9tdjsKIAogCXN0LT51cyA9IHNwaTsKLQlzdC0+aW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgpOworCXN0LT5pbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKDApOwogCWlmIChzdC0+aW5kaW9fZGV2ID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9kaXNhYmxlX3JlZzsKIAl9CiAJc3QtPmluZGlvX2Rldi0+ZGV2LnBhcmVudCA9ICZzcGktPmRldjsKLQlzdC0+aW5kaW9fZGV2LT5hdHRycyA9ICZhZDU2MjRyX2F0dHJpYnV0ZV9ncm91cDsKKwlzdC0+aW5kaW9fZGV2LT5uYW1lID0gc3BpX2dldF9kZXZpY2VfaWQoc3BpKS0+bmFtZTsKKwlzdC0+aW5kaW9fZGV2LT5pbmZvID0gJmFkNTYyNHJfaW5mbzsKIAlzdC0+aW5kaW9fZGV2LT5kZXZfZGF0YSA9ICh2b2lkICopKHN0KTsKLQlzdC0+aW5kaW9fZGV2LT5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEU7CiAJc3QtPmluZGlvX2Rldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1RfTU9ERTsKIAogCXJldCA9IGlpb19kZXZpY2VfcmVnaXN0ZXIoc3QtPmluZGlvX2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2RhYy9hZDU3OTEuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZGFjL2FkNTc5MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZGEyNWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2RhYy9hZDU3OTEuYwpAQCAtMCwwICsxLDQ0NCBAQAorLyoKKyAqIEFENTc2MCwgQUQ1NzgwLCBBRDU3ODEsIEFENTc5MSBWb2x0YWdlIE91dHB1dCBEaWdpdGFsIHRvIEFuYWxvZyBDb252ZXJ0ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAxMSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisKKyNpbmNsdWRlICIuLi9paW8uaCIKKyNpbmNsdWRlICIuLi9zeXNmcy5oIgorI2luY2x1ZGUgImRhYy5oIgorI2luY2x1ZGUgImFkNTc5MS5oIgorCitzdGF0aWMgaW50IGFkNTc5MV9zcGlfd3JpdGUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgdTggYWRkciwgdTMyIHZhbCkKK3sKKwl1bmlvbiB7CisJCXUzMiBkMzI7CisJCXU4IGQ4WzRdOworCX0gZGF0YTsKKworCWRhdGEuZDMyID0gY3B1X3RvX2JlMzIoQUQ1NzkxX0NNRF9XUklURSB8CisJCQkgICAgICBBRDU3OTFfQUREUihhZGRyKSB8CisJCQkgICAgICAodmFsICYgQUQ1NzkxX0RBQ19NQVNLKSk7CisKKwlyZXR1cm4gc3BpX3dyaXRlKHNwaSwgJmRhdGEuZDhbMV0sIDMpOworfQorCitzdGF0aWMgaW50IGFkNTc5MV9zcGlfcmVhZChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCB1OCBhZGRyLCB1MzIgKnZhbCkKK3sKKwl1bmlvbiB7CisJCXUzMiBkMzI7CisJCXU4IGQ4WzRdOworCX0gZGF0YVszXTsKKwlpbnQgcmV0OworCXN0cnVjdCBzcGlfbWVzc2FnZSBtc2c7CisJc3RydWN0IHNwaV90cmFuc2ZlciB4ZmVyc1tdID0geworCQl7CisJCQkudHhfYnVmID0gJmRhdGFbMF0uZDhbMV0sCisJCQkuYml0c19wZXJfd29yZCA9IDgsCisJCQkubGVuID0gMywKKwkJCS5jc19jaGFuZ2UgPSAxLAorCQl9LCB7CisJCQkudHhfYnVmID0gJmRhdGFbMV0uZDhbMV0sCisJCQkucnhfYnVmID0gJmRhdGFbMl0uZDhbMV0sCisJCQkuYml0c19wZXJfd29yZCA9IDgsCisJCQkubGVuID0gMywKKwkJfSwKKwl9OworCisJZGF0YVswXS5kMzIgPSBjcHVfdG9fYmUzMihBRDU3OTFfQ01EX1JFQUQgfAorCQkJICAgICAgQUQ1NzkxX0FERFIoYWRkcikpOworCWRhdGFbMV0uZDMyID0gY3B1X3RvX2JlMzIoQUQ1NzkxX0FERFIoQUQ1NzkxX0FERFJfTk9PUCkpOworCisJc3BpX21lc3NhZ2VfaW5pdCgmbXNnKTsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlcnNbMF0sICZtc2cpOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ4ZmVyc1sxXSwgJm1zZyk7CisJcmV0ID0gc3BpX3N5bmMoc3BpLCAmbXNnKTsKKworCSp2YWwgPSBiZTMyX3RvX2NwdShkYXRhWzJdLmQzMik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBhZDU3OTFfd3JpdGVfZGFjKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGFkNTc5MV9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CisJc3RydWN0IGlpb19kZXZfYXR0ciAqdGhpc19hdHRyID0gdG9faWlvX2Rldl9hdHRyKGF0dHIpOworCWxvbmcgcmVhZGluOworCWludCByZXQ7CisKKwlyZXQgPSBzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZyZWFkaW4pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZWFkaW4gKz0gKDEgPDwgKHN0LT5jaGlwX2luZm8tPmJpdHMgLSAxKSk7CisJcmVhZGluICY9IEFENTc5MV9SRVNfTUFTSyhzdC0+Y2hpcF9pbmZvLT5iaXRzKTsKKwlyZWFkaW4gPDw9IHN0LT5jaGlwX2luZm8tPmxlZnRfc2hpZnQ7CisKKwlyZXQgPSBhZDU3OTFfc3BpX3dyaXRlKHN0LT5zcGksIHRoaXNfYXR0ci0+YWRkcmVzcywgcmVhZGluKTsKKwlyZXR1cm4gcmV0ID8gcmV0IDogbGVuOworfQorCitzdGF0aWMgc3NpemVfdCBhZDU3OTFfcmVhZF9kYWMoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgYWQ1NzkxX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKKwlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7CisJaW50IHJldDsKKwlpbnQgdmFsOworCisJcmV0ID0gYWQ1NzkxX3NwaV9yZWFkKHN0LT5zcGksIHRoaXNfYXR0ci0+YWRkcmVzcywgJnZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXZhbCAmPSBBRDU3OTFfREFDX01BU0s7CisJdmFsID4+PSBzdC0+Y2hpcF9pbmZvLT5sZWZ0X3NoaWZ0OworCXZhbCAtPSAoMSA8PCAoc3QtPmNoaXBfaW5mby0+Yml0cyAtIDEpKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB2YWwpOworfQorCitzdGF0aWMgc3NpemVfdCBhZDU3OTFfcmVhZF9wb3dlcmRvd25fbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGFkNTc5MV9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CisKKwljb25zdCBjaGFyIG1vZGVbXVsxNF0gPSB7IjZrb2htX3RvX2duZCIsICJ0aHJlZV9zdGF0ZSJ9OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIG1vZGVbc3QtPnB3cl9kb3duX21vZGVdKTsKK30KKworc3RhdGljIHNzaXplX3QgYWQ1NzkxX3dyaXRlX3Bvd2VyZG93bl9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGFkNTc5MV9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CisJaW50IHJldDsKKworCWlmIChzeXNmc19zdHJlcShidWYsICI2a29obV90b19nbmQiKSkKKwkJc3QtPnB3cl9kb3duX21vZGUgPSBBRDU3OTFfREFDX1BXUkROXzZLOworCWVsc2UgaWYgKHN5c2ZzX3N0cmVxKGJ1ZiwgInRocmVlX3N0YXRlIikpCisJCXN0LT5wd3JfZG93bl9tb2RlID0gQUQ1NzkxX0RBQ19QV1JETl8zU1RBVEU7CisJZWxzZQorCQlyZXQgPSAtRUlOVkFMOworCisJcmV0dXJuIHJldCA/IHJldCA6IGxlbjsKK30KKworc3RhdGljIHNzaXplX3QgYWQ1NzkxX3JlYWRfZGFjX3Bvd2VyZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgICBjaGFyICpidWYpCit7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBhZDU3OTFfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHN0LT5wd3JfZG93bik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFkNTc5MV93cml0ZV9kYWNfcG93ZXJkb3duKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCWxvbmcgcmVhZGluOworCWludCByZXQ7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBhZDU3OTFfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOworCisJcmV0ID0gc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmcmVhZGluKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKHJlYWRpbiA9PSAwKSB7CisJCXN0LT5wd3JfZG93biA9IGZhbHNlOworCQlzdC0+Y3RybCAmPSB+KEFENTc5MV9DVFJMX09QR05EIHwgQUQ1NzkxX0NUUkxfREFDVFJJKTsKKwl9IGVsc2UgaWYgKHJlYWRpbiA9PSAxKSB7CisJCXN0LT5wd3JfZG93biA9IHRydWU7CisJCWlmIChzdC0+cHdyX2Rvd25fbW9kZSA9PSBBRDU3OTFfREFDX1BXUkROXzZLKQorCQkJc3QtPmN0cmwgfD0gQUQ1NzkxX0NUUkxfT1BHTkQ7CisJCWVsc2UgaWYgKHN0LT5wd3JfZG93bl9tb2RlID09IEFENTc5MV9EQUNfUFdSRE5fM1NUQVRFKQorCQkJc3QtPmN0cmwgfD0gQUQ1NzkxX0NUUkxfREFDVFJJOworCX0gZWxzZQorCQlyZXQgPSAtRUlOVkFMOworCisJcmV0ID0gYWQ1NzkxX3NwaV93cml0ZShzdC0+c3BpLCBBRDU3OTFfQUREUl9DVFJMLCBzdC0+Y3RybCk7CisKKwlyZXR1cm4gcmV0ID8gcmV0IDogbGVuOworfQorCitzdGF0aWMgc3NpemVfdCBhZDU3OTFfc2hvd19zY2FsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY2hhciAqYnVmKQoreworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgYWQ1NzkxX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKKwkvKiBDb3JyZXNwb25kcyB0byBWcmVmIC8gMl4oYml0cykgKi8KKwl1bnNpZ25lZCBpbnQgc2NhbGVfdXYgPSAoc3QtPnZyZWZfbXYgKiAxMDAwKSA+PiBzdC0+Y2hpcF9pbmZvLT5iaXRzOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJTAzZFxuIiwgc2NhbGVfdXYgLyAxMDAwLCBzY2FsZV91diAlIDEwMDApOworfQorc3RhdGljIElJT19ERVZJQ0VfQVRUUihvdXRfc2NhbGUsIFNfSVJVR08sIGFkNTc5MV9zaG93X3NjYWxlLCBOVUxMLCAwKTsKKworc3RhdGljIHNzaXplX3QgYWQ1NzkxX3Nob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSBjaGFyICpidWYpCit7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBhZDU3OTFfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHNwaV9nZXRfZGV2aWNlX2lkKHN0LT5zcGkpLT5uYW1lKTsKK30KK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgYWQ1NzkxX3Nob3dfbmFtZSwgTlVMTCwgMCk7CisKKyNkZWZpbmUgSUlPX0RFVl9BVFRSX09VVF9SV19SQVcoX251bSwgX3Nob3csIF9zdG9yZSwgX2FkZHIpCQlcCisJSUlPX0RFVklDRV9BVFRSKG91dCMjX251bSMjX3JhdywJCQkJXAorCQkJU19JUlVHTyB8IFNfSVdVU1IsIF9zaG93LCBfc3RvcmUsIF9hZGRyKQorCitzdGF0aWMgSUlPX0RFVl9BVFRSX09VVF9SV19SQVcoMCwgYWQ1NzkxX3JlYWRfZGFjLAorCWFkNTc5MV93cml0ZV9kYWMsIEFENTc5MV9BRERSX0RBQzApOworCitzdGF0aWMgSUlPX0RFVklDRV9BVFRSKG91dF9wb3dlcmRvd25fbW9kZSwgU19JUlVHTyB8CisJCQlTX0lXVVNSLCBhZDU3OTFfcmVhZF9wb3dlcmRvd25fbW9kZSwKKwkJCWFkNTc5MV93cml0ZV9wb3dlcmRvd25fbW9kZSwgMCk7CisKK3N0YXRpYyBJSU9fQ09OU1RfQVRUUihvdXRfcG93ZXJkb3duX21vZGVfYXZhaWxhYmxlLAorCQkJIjZrb2htX3RvX2duZCB0aHJlZV9zdGF0ZSIpOworCisjZGVmaW5lIElJT19ERVZfQVRUUl9EQUNfUE9XRVJET1dOKF9udW0sIF9zaG93LCBfc3RvcmUsIF9hZGRyKQkJXAorCUlJT19ERVZJQ0VfQVRUUihvdXQjI19udW0jI19wb3dlcmRvd24sCQkJCVwKKwkJCVNfSVJVR08gfCBTX0lXVVNSLCBfc2hvdywgX3N0b3JlLCBfYWRkcikKKworc3RhdGljIElJT19ERVZfQVRUUl9EQUNfUE9XRVJET1dOKDAsIGFkNTc5MV9yZWFkX2RhY19wb3dlcmRvd24sCisJCQkJICAgYWQ1NzkxX3dyaXRlX2RhY19wb3dlcmRvd24sIDApOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWQ1NzkxX2F0dHJpYnV0ZXNbXSA9IHsKKwkmaWlvX2Rldl9hdHRyX291dDBfcmF3LmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9vdXQwX3Bvd2VyZG93bi5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfb3V0X3Bvd2VyZG93bl9tb2RlLmRldl9hdHRyLmF0dHIsCisJJmlpb19jb25zdF9hdHRyX291dF9wb3dlcmRvd25fbW9kZV9hdmFpbGFibGUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX291dF9zY2FsZS5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfbmFtZS5kZXZfYXR0ci5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZDU3OTFfYXR0cmlidXRlX2dyb3VwID0geworCS5hdHRycyA9IGFkNTc5MV9hdHRyaWJ1dGVzLAorfTsKKworc3RhdGljIGludCBhZDU3OTFfZ2V0X2xpbl9jb21wKHVuc2lnbmVkIGludCBzcGFuKQoreworCWlmIChzcGFuIDw9IDEwMDAwKQorCQlyZXR1cm4gQUQ1NzkxX0xJTkNPTVBfMF8xMDsKKwllbHNlIGlmIChzcGFuIDw9IDEyMDAwKQorCQlyZXR1cm4gQUQ1NzkxX0xJTkNPTVBfMTBfMTI7CisJZWxzZSBpZiAoc3BhbiA8PSAxNjAwMCkKKwkJcmV0dXJuIEFENTc5MV9MSU5DT01QXzEyXzE2OworCWVsc2UgaWYgKHNwYW4gPD0gMTkwMDApCisJCXJldHVybiBBRDU3OTFfTElOQ09NUF8xNl8xOTsKKwllbHNlCisJCXJldHVybiBBRDU3OTFfTElOQ09NUF8xOV8yMDsKK30KKworc3RhdGljIGludCBhZDU3ODBfZ2V0X2xpbl9jb21wKHVuc2lnbmVkIGludCBzcGFuKQoreworCWlmIChzcGFuIDw9IDEwMDAwKQorCQlyZXR1cm4gQUQ1NzgwX0xJTkNPTVBfMF8xMDsKKwllbHNlCisJCXJldHVybiBBRDU3ODBfTElOQ09NUF8xMF8yMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhZDU3OTFfY2hpcF9pbmZvIGFkNTc5MV9jaGlwX2luZm9fdGJsW10gPSB7CisJW0lEX0FENTc2MF0gPSB7CisJCS5iaXRzID0gMTYsCisJCS5sZWZ0X3NoaWZ0ID0gNCwKKwkJLmdldF9saW5fY29tcCA9IGFkNTc4MF9nZXRfbGluX2NvbXAsCisJfSwKKwlbSURfQUQ1NzgwXSA9IHsKKwkJLmJpdHMgPSAxOCwKKwkJLmxlZnRfc2hpZnQgPSAyLAorCQkuZ2V0X2xpbl9jb21wID0gYWQ1NzgwX2dldF9saW5fY29tcCwKKwl9LAorCVtJRF9BRDU3ODFdID0geworCQkuYml0cyA9IDE4LAorCQkubGVmdF9zaGlmdCA9IDIsCisJCS5nZXRfbGluX2NvbXAgPSBhZDU3OTFfZ2V0X2xpbl9jb21wLAorCX0sCisJW0lEX0FENTc5MV0gPSB7CisJCS5iaXRzID0gMjAsCisJCS5sZWZ0X3NoaWZ0ID0gMCwKKwkJLmdldF9saW5fY29tcCA9IGFkNTc5MV9nZXRfbGluX2NvbXAsCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2luZm8gYWQ1NzkxX2luZm8gPSB7CisJLmF0dHJzID0gJmFkNTc5MV9hdHRyaWJ1dGVfZ3JvdXAsCisJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGFkNTc5MV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBhZDU3OTFfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBhZDU3OTFfc3RhdGUgKnN0OworCWludCByZXQsIHBvc192b2x0YWdlX3V2ID0gMCwgbmVnX3ZvbHRhZ2VfdXYgPSAwOworCisJc3QgPSBremFsbG9jKHNpemVvZigqc3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3QgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yX3JldDsKKwl9CisKKwlzcGlfc2V0X2RydmRhdGEoc3BpLCBzdCk7CisKKwlzdC0+cmVnX3ZkZCA9IHJlZ3VsYXRvcl9nZXQoJnNwaS0+ZGV2LCAidmRkIik7CisJaWYgKCFJU19FUlIoc3QtPnJlZ192ZGQpKSB7CisJCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUoc3QtPnJlZ192ZGQpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcl9wdXRfcmVnX3BvczsKKworCQlwb3Nfdm9sdGFnZV91diA9IHJlZ3VsYXRvcl9nZXRfdm9sdGFnZShzdC0+cmVnX3ZkZCk7CisJfQorCisJc3QtPnJlZ192c3MgPSByZWd1bGF0b3JfZ2V0KCZzcGktPmRldiwgInZzcyIpOworCWlmICghSVNfRVJSKHN0LT5yZWdfdnNzKSkgeworCQlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHN0LT5yZWdfdnNzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3JfcHV0X3JlZ19uZWc7CisKKwkJbmVnX3ZvbHRhZ2VfdXYgPSByZWd1bGF0b3JfZ2V0X3ZvbHRhZ2Uoc3QtPnJlZ192c3MpOworCX0KKworCWlmICghSVNfRVJSKHN0LT5yZWdfdnNzKSAmJiAhSVNfRVJSKHN0LT5yZWdfdmRkKSkKKwkJc3QtPnZyZWZfbXYgPSAocG9zX3ZvbHRhZ2VfdXYgLSBuZWdfdm9sdGFnZV91dikgLyAxMDAwOworCWVsc2UgaWYgKHBkYXRhKQorCQlzdC0+dnJlZl9tdiA9IHBkYXRhLT52cmVmX3Bvc19tdiAtIHBkYXRhLT52cmVmX25lZ19tdjsKKwllbHNlCisJCWRldl93YXJuKCZzcGktPmRldiwgInJlZmVyZW5jZSB2b2x0YWdlIHVuc3BlY2lmaWVkXG4iKTsKKworCXJldCA9IGFkNTc5MV9zcGlfd3JpdGUoc3BpLCBBRDU3OTFfQUREUl9TV19DVFJMLCBBRDU3OTFfU1dDVFJMX1JFU0VUKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yX2Rpc2FibGVfcmVnX25lZzsKKworCXN0LT5jaGlwX2luZm8gPQorCQkmYWQ1NzkxX2NoaXBfaW5mb190Ymxbc3BpX2dldF9kZXZpY2VfaWQoc3BpKS0+ZHJpdmVyX2RhdGFdOworCisKKwlzdC0+Y3RybCA9IEFENTc2MV9DVFJMX0xJTkNPTVAoc3QtPmNoaXBfaW5mby0+Z2V0X2xpbl9jb21wKHN0LT52cmVmX212KSkKKwkJICB8ICgocGRhdGEgJiYgcGRhdGEtPnVzZV9yYnVmX2dhaW4yKSA/IDAgOiBBRDU3OTFfQ1RSTF9SQlVGKSB8CisJCSAgQUQ1NzkxX0NUUkxfQklOMlNDOworCisJcmV0ID0gYWQ1NzkxX3NwaV93cml0ZShzcGksIEFENTc5MV9BRERSX0NUUkwsIHN0LT5jdHJsIHwKKwkJQUQ1NzkxX0NUUkxfT1BHTkQgfCBBRDU3OTFfQ1RSTF9EQUNUUkkpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3JfZGlzYWJsZV9yZWdfbmVnOworCisJc3QtPnB3cl9kb3duID0gdHJ1ZTsKKworCXN0LT5zcGkgPSBzcGk7CisJc3QtPmluZGlvX2RldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2UoMCk7CisJaWYgKHN0LT5pbmRpb19kZXYgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yX2Rpc2FibGVfcmVnX25lZzsKKwl9CisJc3QtPmluZGlvX2Rldi0+ZGV2LnBhcmVudCA9ICZzcGktPmRldjsKKwlzdC0+aW5kaW9fZGV2LT5kZXZfZGF0YSA9ICh2b2lkICopKHN0KTsKKwlzdC0+aW5kaW9fZGV2LT5pbmZvID0gJmFkNTc5MV9pbmZvOworCXN0LT5pbmRpb19kZXYtPm1vZGVzID0gSU5ESU9fRElSRUNUX01PREU7CisKKwlyZXQgPSBpaW9fZGV2aWNlX3JlZ2lzdGVyKHN0LT5pbmRpb19kZXYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3JfZnJlZV9kZXY7CisKKwlyZXR1cm4gMDsKKworZXJyb3JfZnJlZV9kZXY6CisJaWlvX2ZyZWVfZGV2aWNlKHN0LT5pbmRpb19kZXYpOworCitlcnJvcl9kaXNhYmxlX3JlZ19uZWc6CisJaWYgKCFJU19FUlIoc3QtPnJlZ192c3MpKQorCQlyZWd1bGF0b3JfZGlzYWJsZShzdC0+cmVnX3Zzcyk7CitlcnJvcl9wdXRfcmVnX25lZzoKKwlpZiAoIUlTX0VSUihzdC0+cmVnX3ZzcykpCisJCXJlZ3VsYXRvcl9wdXQoc3QtPnJlZ192c3MpOworCisJaWYgKCFJU19FUlIoc3QtPnJlZ192ZGQpKQorCQlyZWd1bGF0b3JfZGlzYWJsZShzdC0+cmVnX3ZkZCk7CitlcnJvcl9wdXRfcmVnX3BvczoKKwlpZiAoIUlTX0VSUihzdC0+cmVnX3ZkZCkpCisJCXJlZ3VsYXRvcl9wdXQoc3QtPnJlZ192ZGQpOworCisJa2ZyZWUoc3QpOworZXJyb3JfcmV0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGFkNTc5MV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgYWQ1NzkxX3N0YXRlICpzdCA9IHNwaV9nZXRfZHJ2ZGF0YShzcGkpOworCisJaWlvX2RldmljZV91bnJlZ2lzdGVyKHN0LT5pbmRpb19kZXYpOworCisJaWYgKCFJU19FUlIoc3QtPnJlZ192ZGQpKSB7CisJCXJlZ3VsYXRvcl9kaXNhYmxlKHN0LT5yZWdfdmRkKTsKKwkJcmVndWxhdG9yX3B1dChzdC0+cmVnX3ZkZCk7CisJfQorCisJaWYgKCFJU19FUlIoc3QtPnJlZ192c3MpKSB7CisJCXJlZ3VsYXRvcl9kaXNhYmxlKHN0LT5yZWdfdnNzKTsKKwkJcmVndWxhdG9yX3B1dChzdC0+cmVnX3Zzcyk7CisJfQorCisJa2ZyZWUoc3QpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZV9pZCBhZDU3OTFfaWRbXSA9IHsKKwl7ImFkNTc2MCIsIElEX0FENTc2MH0sCisJeyJhZDU3ODAiLCBJRF9BRDU3ODB9LAorCXsiYWQ1NzgxIiwgSURfQUQ1NzgxfSwKKwl7ImFkNTc5MSIsIElEX0FENTc5MX0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBhZDU3OTFfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCSAgIC5uYW1lID0gImFkNTc5MSIsCisJCSAgIC5vd25lciA9IFRISVNfTU9EVUxFLAorCQkgICB9LAorCS5wcm9iZSA9IGFkNTc5MV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoYWQ1NzkxX3JlbW92ZSksCisJLmlkX3RhYmxlID0gYWQ1NzkxX2lkLAorfTsKKworc3RhdGljIF9faW5pdCBpbnQgYWQ1NzkxX3NwaV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHNwaV9yZWdpc3Rlcl9kcml2ZXIoJmFkNTc5MV9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoYWQ1NzkxX3NwaV9pbml0KTsKKworc3RhdGljIF9fZXhpdCB2b2lkIGFkNTc5MV9zcGlfZXhpdCh2b2lkKQoreworCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmYWQ1NzkxX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChhZDU3OTFfc3BpX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEhlbm5lcmljaCA8aGVubmVyaWNoQGJsYWNrZmluLnVjbGludXgub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBbmFsb2cgRGV2aWNlcyBBRDU3NjAvQUQ1NzgwL0FENTc4MS9BRDU3OTEgREFDIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2RhYy9hZDU3OTEuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZGFjL2FkNTc5MS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwOWFkOWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2RhYy9hZDU3OTEuaApAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIEFENTc5MSBTUEkgREFDIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDExIEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIuCisgKi8KKworI2lmbmRlZiBTUElfQUQ1NzkxX0hfCisjZGVmaW5lIFNQSV9BRDU3OTFfSF8KKworI2RlZmluZSBBRDU3OTFfUkVTX01BU0soeCkJCSgoMSA8PCAoeCkpIC0gMSkKKyNkZWZpbmUgQUQ1NzkxX0RBQ19NQVNLCQkJQUQ1NzkxX1JFU19NQVNLKDIwKQorI2RlZmluZSBBRDU3OTFfREFDX01TQgkJCSgxIDw8IDE5KQorCisjZGVmaW5lIEFENTc5MV9DTURfUkVBRAkJCSgxIDw8IDIzKQorI2RlZmluZSBBRDU3OTFfQ01EX1dSSVRFCQkoMCA8PCAyMykKKyNkZWZpbmUgQUQ1NzkxX0FERFIoYWRkcikJCSgoYWRkcikgPDwgMjApCisKKy8qIFJlZ2lzdGVycyAqLworI2RlZmluZSBBRDU3OTFfQUREUl9OT09QCQkwCisjZGVmaW5lIEFENTc5MV9BRERSX0RBQzAJCTEKKyNkZWZpbmUgQUQ1NzkxX0FERFJfQ1RSTAkJMgorI2RlZmluZSBBRDU3OTFfQUREUl9DTFJDT0RFCQkzCisjZGVmaW5lIEFENTc5MV9BRERSX1NXX0NUUkwJCTQKKworLyogQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBBRDU3OTFfQ1RSTF9SQlVGCQkoMSA8PCAxKQorI2RlZmluZSBBRDU3OTFfQ1RSTF9PUEdORAkJKDEgPDwgMikKKyNkZWZpbmUgQUQ1NzkxX0NUUkxfREFDVFJJCQkoMSA8PCAzKQorI2RlZmluZSBBRDU3OTFfQ1RSTF9CSU4yU0MJCSgxIDw8IDQpCisjZGVmaW5lIEFENTc5MV9DVFJMX1NET0RJUwkJKDEgPDwgNSkKKyNkZWZpbmUgQUQ1NzYxX0NUUkxfTElOQ09NUCh4KQkJKCh4KSA8PCA2KQorCisjZGVmaW5lIEFENTc5MV9MSU5DT01QXzBfMTAJCTAKKyNkZWZpbmUgQUQ1NzkxX0xJTkNPTVBfMTBfMTIJCTEKKyNkZWZpbmUgQUQ1NzkxX0xJTkNPTVBfMTJfMTYJCTIKKyNkZWZpbmUgQUQ1NzkxX0xJTkNPTVBfMTZfMTkJCTMKKyNkZWZpbmUgQUQ1NzkxX0xJTkNPTVBfMTlfMjAJCTEyCisKKyNkZWZpbmUgQUQ1NzgwX0xJTkNPTVBfMF8xMAkJMAorI2RlZmluZSBBRDU3ODBfTElOQ09NUF8xMF8yMAkJMTIKKworLyogU29mdHdhcmUgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBBRDU3OTFfU1dDVFJMX0xEQUMJCSgxIDw8IDApCisjZGVmaW5lIEFENTc5MV9TV0NUUkxfQ0xSCQkoMSA8PCAxKQorI2RlZmluZSBBRDU3OTFfU1dDVFJMX1JFU0VUCQkoMSA8PCAyKQorCisjZGVmaW5lIEFENTc5MV9EQUNfUFdSRE5fNksJCTAKKyNkZWZpbmUgQUQ1NzkxX0RBQ19QV1JETl8zU1RBVEUJCTEKKworLyoKKyAqIFRPRE86IHN0cnVjdCBhZDU3OTFfcGxhdGZvcm1fZGF0YSBuZWVkcyB0byBnbyBpbnRvIGluY2x1ZGUvbGludXgvaWlvCisgKi8KKworLyoqCisgKiBzdHJ1Y3QgYWQ1NzkxX3BsYXRmb3JtX2RhdGEgLSBwbGF0Zm9ybSBzcGVjaWZpYyBpbmZvcm1hdGlvbgorICogQHZyZWZfcG9zX212OglWZGQgUG9zaXRpdmUgQW5hbG9nIFN1cHBseSBWb2xhdGdlIChtVikKKyAqIEB2cmVmX25lZ19tdjoJVmRkIE5lZ2F0aXZlIEFuYWxvZyBTdXBwbHkgVm9sYXRnZSAobVYpCisgKiBAdXNlX3JidWZfZ2FpbjI6CWV4dC4gYW1wbGlmaWVyIGNvbm5lY3RlZCBpbiBnYWluIG9mIHR3byBjb25maWd1cmF0aW9uCisgKi8KKworc3RydWN0IGFkNTc5MV9wbGF0Zm9ybV9kYXRhIHsKKwl1MTYJCQkJdnJlZl9wb3NfbXY7CisJdTE2CQkJCXZyZWZfbmVnX212OworCWJvb2wJCQkJdXNlX3JidWZfZ2FpbjI7Cit9OworCisvKioKKyAqIHN0cnVjdCBhZDU3OTFfY2hpcF9pbmZvIC0gY2hpcCBzcGVjaWZpYyBpbmZvcm1hdGlvbgorICogQGJpdHM6CQlhY2N1cmFjeSBvZiB0aGUgREFDIGluIGJpdHMKKyAqIEBsZWZ0X3NoaWZ0OgkJbnVtYmVyIG9mIGJpdHMgdGhlIGRhdHVtIG11c3QgYmUgc2hpZnRlZAorICogQGdldF9saW5fY29tcDoJZnVuY3Rpb24gcG9pbnRlciB0byB0aGUgZGV2aWNlIHNwZWNpZmljIGZ1bmN0aW9uCisgKi8KKworc3RydWN0IGFkNTc5MV9jaGlwX2luZm8geworCXU4CQkJYml0czsKKwl1OAkJCWxlZnRfc2hpZnQ7CisJaW50ICgqZ2V0X2xpbl9jb21wKQkodW5zaWduZWQgaW50IHNwYW4pOworfTsKKworLyoqCisgKiBzdHJ1Y3QgYWQ1NzkxX3N0YXRlIC0gZHJpdmVyIGluc3RhbmNlIHNwZWNpZmljIGRhdGEKKyAqIEBpbmRpb19kZXY6CQl0aGUgaW5kdXN0cmlhbCBJL08gZGV2aWNlCisgKiBAdXM6CQkJc3BpX2RldmljZQorICogQHJlZ192ZGQ6CQlwb3NpdGl2ZSBzdXBwbHkgcmVndWxhdG9yCisgKiBAcmVnX3ZzczoJCW5lZ2F0aXZlIHN1cHBseSByZWd1bGF0b3IKKyAqIEBjaGlwX2luZm86CQljaGlwIG1vZGVsIHNwZWNpZmljIGNvbnN0YW50cworICogQHZyZWZfbXY6CQlhY3R1YWwgcmVmZXJlbmNlIHZvbHRhZ2UgdXNlZAorICogQHB3cl9kb3duX21vZGUJY3VycmVudCBwb3dlciBkb3duIG1vZGUKKyAqLworCitzdHJ1Y3QgYWQ1NzkxX3N0YXRlIHsKKwlzdHJ1Y3QgaWlvX2RldgkJCSppbmRpb19kZXY7CisJc3RydWN0IHNwaV9kZXZpY2UJCSpzcGk7CisJc3RydWN0IHJlZ3VsYXRvcgkJKnJlZ192ZGQ7CisJc3RydWN0IHJlZ3VsYXRvcgkJKnJlZ192c3M7CisJY29uc3Qgc3RydWN0IGFkNTc5MV9jaGlwX2luZm8JKmNoaXBfaW5mbzsKKwl1bnNpZ25lZCBzaG9ydAkJCXZyZWZfbXY7CisJdW5zaWduZWQJCQljdHJsOworCXVuc2lnbmVkCQkJcHdyX2Rvd25fbW9kZTsKKwlib29sCQkJCXB3cl9kb3duOworfTsKKworLyoqCisgKiBhZDU3OTFfc3VwcG9ydGVkX2RldmljZV9pZHM6CisgKi8KKworZW51bSBhZDU3OTFfc3VwcG9ydGVkX2RldmljZV9pZHMgeworCUlEX0FENTc2MCwKKwlJRF9BRDU3ODAsCisJSURfQUQ1NzgxLAorCUlEX0FENTc5MSwKK307CisKKyNlbmRpZiAvKiBTUElfQUQ1NzkxX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2RhYy9tYXg1MTcuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZGFjL21heDUxNy5jCmluZGV4IDcwNzFmNzEzLi44ODE3NjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2RhYy9tYXg1MTcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2RhYy9tYXg1MTcuYwpAQCAtMTg5LDYgKzE4OSwxNiBAQAogCXJldHVybiBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCAmb3V0YnVmLCAxKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9faW5mbyBtYXg1MTdfaW5mbyA9IHsKKwkuYXR0cnMgPSAmbWF4NTE3X2F0dHJpYnV0ZV9ncm91cCwKKwkuZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9faW5mbyBtYXg1MThfaW5mbyA9IHsKKwkuYXR0cnMgPSAmbWF4NTE3X2F0dHJpYnV0ZV9ncm91cCwKKwkuZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFLAorfTsKKwogc3RhdGljIGludCBtYXg1MTdfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKQEAgLTIwNiw3ICsyMTYsNyBAQAogCiAJZGF0YS0+Y2xpZW50ID0gY2xpZW50OwogCi0JZGF0YS0+aW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgpOworCWRhdGEtPmluZGlvX2RldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2UoMCk7CiAJaWYgKGRhdGEtPmluZGlvX2RldiA9PSBOVUxMKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXhpdF9mcmVlX2RhdGE7CkBAIC0yMTcsMTEgKzIyNywxMCBAQAogCiAJLyogcmVkdWNlZCBhdHRyaWJ1dGUgc2V0IGZvciBNQVg1MTcgKi8KIAlpZiAoaWQtPmRyaXZlcl9kYXRhID09IElEX01BWDUxNykKLQkJZGF0YS0+aW5kaW9fZGV2LT5hdHRycyA9ICZtYXg1MTdfYXR0cmlidXRlX2dyb3VwOworCQlkYXRhLT5pbmRpb19kZXYtPmluZm8gPSAmbWF4NTE3X2luZm87CiAJZWxzZQotCQlkYXRhLT5pbmRpb19kZXYtPmF0dHJzID0gJm1heDUxOF9hdHRyaWJ1dGVfZ3JvdXA7CisJCWRhdGEtPmluZGlvX2Rldi0+aW5mbyA9ICZtYXg1MThfaW5mbzsKIAlkYXRhLT5pbmRpb19kZXYtPmRldl9kYXRhID0gKHZvaWQgKikoZGF0YSk7Ci0JZGF0YS0+aW5kaW9fZGV2LT5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEU7CiAJZGF0YS0+aW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZGRzL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2Rkcy9LY29uZmlnCmluZGV4IDA2YjZmM2EuLmUwNzQzMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZGRzL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9kZHMvS2NvbmZpZwpAQCAtMjEsMTEgKzIxLDExIEBACiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWQ5ODMyLgogCiBjb25maWcgQUQ5ODM0Ci0JdHJpc3RhdGUgIkFuYWxvZyBEZXZpY2VzIGFkOTgzMy80LyBkcml2ZXIiCisJdHJpc3RhdGUgIkFuYWxvZyBEZXZpY2VzIEFEOTgzMy80LzcvOCBkcml2ZXIiCiAJZGVwZW5kcyBvbiBTUEkKIAloZWxwCiAJICBTYXkgeWVzIGhlcmUgdG8gYnVpbGQgc3VwcG9ydCBmb3IgQW5hbG9nIERldmljZXMgRERTIGNoaXAKLQkgIEFEOTgzMyBhbmQgQUQ5ODM0LCBwcm92aWRlcyBkaXJlY3QgYWNjZXNzIHZpYSBzeXNmcy4KKwkgIEFEOTgzMywgQUQ5ODM0LCBBRDk4MzcgYW5kIEFEOTgzOCwgcHJvdmlkZXMgZGlyZWN0IGFjY2VzcyB2aWEgc3lzZnMuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFkOTgzNC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZGRzL2FkNTkzMC5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9kZHMvYWQ1OTMwLmMKaW5kZXggZjgwMDM5Yy4uNDkwYzM2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9kZHMvYWQ1OTMwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9kZHMvYWQ1OTMwLmMKQEAgLTg3LDYgKzg3LDEyIEBACiAJLmF0dHJzID0gYWQ1OTMwX2F0dHJpYnV0ZXMsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIGFkNTkzMF9pbmZvID0geworCS5hdHRycyA9ICZhZDU5MzBfYXR0cmlidXRlX2dyb3VwLAorCisJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRSwKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGFkNTkzMF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCXN0cnVjdCBhZDU5MzBfc3RhdGUgKnN0OwpAQCAtMTAyLDE4ICsxMDgsMTQgQEAKIAltdXRleF9pbml0KCZzdC0+bG9jayk7CiAJc3QtPnNkZXYgPSBzcGk7CiAKLQlzdC0+aWRldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2UoKTsKKwlzdC0+aWRldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2UoMCk7CiAJaWYgKHN0LT5pZGV2ID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9mcmVlX3N0OwogCX0KIAlzdC0+aWRldi0+ZGV2LnBhcmVudCA9ICZzcGktPmRldjsKLQlzdC0+aWRldi0+bnVtX2ludGVycnVwdF9saW5lcyA9IDA7Ci0Jc3QtPmlkZXYtPmV2ZW50X2F0dHJzID0gTlVMTDsKLQotCXN0LT5pZGV2LT5hdHRycyA9ICZhZDU5MzBfYXR0cmlidXRlX2dyb3VwOwogCXN0LT5pZGV2LT5kZXZfZGF0YSA9ICh2b2lkICopKHN0KTsKLQlzdC0+aWRldi0+ZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFOworCXN0LT5pZGV2LT5pbmZvID0gJmFkNTkzMF9pbmZvOwogCXN0LT5pZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOwogCiAJcmV0ID0gaWlvX2RldmljZV9yZWdpc3RlcihzdC0+aWRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2Rkcy9hZDk4MzIuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZGRzL2FkOTgzMi5jCmluZGV4IDNlODQ5MWYuLmU4ZmUxNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZGRzL2FkOTgzMi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZGRzL2FkOTgzMi5jCkBAIC0xNTMsMTcgKzE1Myw2IEBACiAJcmV0dXJuIHJldCA/IHJldCA6IGxlbjsKIH0KIAotc3RhdGljIHNzaXplX3QgYWQ5ODMyX3Nob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCSBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGlpb19kZXYgKmRldl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGFkOTgzMl9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGRldl9pbmZvKTsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBzcGlfZ2V0X2RldmljZV9pZChzdC0+c3BpKS0+bmFtZSk7Ci19Ci1zdGF0aWMgSUlPX0RFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIGFkOTgzMl9zaG93X25hbWUsIE5VTEwsIDApOwotCiAvKioKICAqIHNlZSBkZHMuaCBmb3IgZnVydGhlciBpbmZvcm1hdGlvbgogICovCkBAIC0xOTksNyArMTg4LDYgQEAKIAkmaWlvX2Rldl9hdHRyX2RkczBfZnJlcXN5bWJvbC5kZXZfYXR0ci5hdHRyLAogCSZpaW9fZGV2X2F0dHJfZGRzMF9waGFzZXN5bWJvbC5kZXZfYXR0ci5hdHRyLAogCSZpaW9fZGV2X2F0dHJfZGRzMF9vdXRfZW5hYmxlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9uYW1lLmRldl9hdHRyLmF0dHIsCiAJTlVMTCwKIH07CiAKQEAgLTIwNyw2ICsxOTUsMTEgQEAKIAkuYXR0cnMgPSBhZDk4MzJfYXR0cmlidXRlcywKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2luZm8gYWQ5ODMyX2luZm8gPSB7CisJLmF0dHJzID0gJmFkOTgzMl9hdHRyaWJ1dGVfZ3JvdXAsCisJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRSwKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGFkOTgzMl9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCXN0cnVjdCBhZDk4MzJfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOwpAQCAtMjM2LDE2ICsyMjksMTYgQEAKIAlzcGlfc2V0X2RydmRhdGEoc3BpLCBzdCk7CiAJc3QtPnNwaSA9IHNwaTsKIAotCXN0LT5pbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKCk7CisJc3QtPmluZGlvX2RldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2UoMCk7CiAJaWYgKHN0LT5pbmRpb19kZXYgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX2Rpc2FibGVfcmVnOwogCX0KIAogCXN0LT5pbmRpb19kZXYtPmRldi5wYXJlbnQgPSAmc3BpLT5kZXY7Ci0Jc3QtPmluZGlvX2Rldi0+YXR0cnMgPSAmYWQ5ODMyX2F0dHJpYnV0ZV9ncm91cDsKKwlzdC0+aW5kaW9fZGV2LT5uYW1lID0gc3BpX2dldF9kZXZpY2VfaWQoc3BpKS0+bmFtZTsKKwlzdC0+aW5kaW9fZGV2LT5pbmZvID0gJmFkOTgzMl9pbmZvOwogCXN0LT5pbmRpb19kZXYtPmRldl9kYXRhID0gKHZvaWQgKikgc3Q7Ci0Jc3QtPmluZGlvX2Rldi0+ZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFOwogCXN0LT5pbmRpb19kZXYtPm1vZGVzID0gSU5ESU9fRElSRUNUX01PREU7CiAKIAkvKiBTZXR1cCBkZWZhdWx0IG1lc3NhZ2VzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2Rkcy9hZDk4MzQuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZGRzL2FkOTgzNC5jCmluZGV4IGViMWE2ODEuLjBlYmU4ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZGRzL2FkOTgzNC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZGRzL2FkOTgzNC5jCkBAIC0xLDkgKzEsOSBAQAogLyoKLSAqIEFEOTgzNCBTUEkgREFDIGRyaXZlcgorICogQUQ5ODMzL0FEOTgzNC9BRDk4MzcvQUQ5ODM4IFNQSSBERFMgZHJpdmVyCiAgKgotICogQ29weXJpZ2h0IDIwMTAgQW5hbG9nIERldmljZXMgSW5jLgorICogQ29weXJpZ2h0IDIwMTAtMjAxMSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KQEAgLTQ3LDcgKzQ3LDcgQEAKIAkJCQkgICAgICAgKEFEOTgzNF9GUkVRX0JJVFMgLyAyKSkgJgogCQkJCSAgICAgICBSRVNfTUFTSyhBRDk4MzRfRlJFUV9CSVRTIC8gMikpKTsKIAotCXJldHVybiBzcGlfc3luYyhzdC0+c3BpLCAmc3QtPmZyZXFfbXNnKTs7CisJcmV0dXJuIHNwaV9zeW5jKHN0LT5zcGksICZzdC0+ZnJlcV9tc2cpOwogfQogCiBzdGF0aWMgaW50IGFkOTgzNF93cml0ZV9waGFzZShzdHJ1Y3QgYWQ5ODM0X3N0YXRlICpzdCwKQEAgLTE0OCw3ICsxNDgsNyBAQAogCXN0cnVjdCBhZDk4MzRfc3RhdGUgKnN0ID0gZGV2X2luZm8tPmRldl9kYXRhOwogCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKIAlpbnQgcmV0ID0gMDsKLQlib29sIGlzX2FkOTgzMyA9IHN0LT5kZXZpZCA9PSBJRF9BRDk4MzM7CisJYm9vbCBpc19hZDk4MzNfNyA9IChzdC0+ZGV2aWQgPT0gSURfQUQ5ODMzKSB8fCAoc3QtPmRldmlkID09IElEX0FEOTgzNyk7CiAKIAltdXRleF9sb2NrKCZkZXZfaW5mby0+bWxvY2spOwogCkBAIC0xNTYsMTAgKzE1NiwxMCBAQAogCWNhc2UgMDoKIAkJaWYgKHN5c2ZzX3N0cmVxKGJ1ZiwgInNpbmUiKSkgewogCQkJc3QtPmNvbnRyb2wgJj0gfkFEOTgzNF9NT0RFOwotCQkJaWYgKGlzX2FkOTgzMykKKwkJCWlmIChpc19hZDk4MzNfNykKIAkJCQlzdC0+Y29udHJvbCAmPSB+QUQ5ODM0X09QQklURU47CiAJCX0gZWxzZSBpZiAoc3lzZnNfc3RyZXEoYnVmLCAidHJpYW5nbGUiKSkgewotCQkJaWYgKGlzX2FkOTgzMykgeworCQkJaWYgKGlzX2FkOTgzM183KSB7CiAJCQkJc3QtPmNvbnRyb2wgJj0gfkFEOTgzNF9PUEJJVEVOOwogCQkJCXN0LT5jb250cm9sIHw9IEFEOTgzNF9NT0RFOwogCQkJfSBlbHNlIGlmIChzdC0+Y29udHJvbCAmIEFEOTgzNF9PUEJJVEVOKSB7CkBAIC0xNjcsNyArMTY3LDcgQEAKIAkJCX0gZWxzZSB7CiAJCQkJc3QtPmNvbnRyb2wgfD0gQUQ5ODM0X01PREU7CiAJCQl9Ci0JCX0gZWxzZSBpZiAoaXNfYWQ5ODMzICYmIHN5c2ZzX3N0cmVxKGJ1ZiwgInNxdWFyZSIpKSB7CisJCX0gZWxzZSBpZiAoaXNfYWQ5ODMzXzcgJiYgc3lzZnNfc3RyZXEoYnVmLCAic3F1YXJlIikpIHsKIAkJCXN0LT5jb250cm9sICY9IH5BRDk4MzRfTU9ERTsKIAkJCXN0LT5jb250cm9sIHw9IEFEOTgzNF9PUEJJVEVOOwogCQl9IGVsc2UgewpAQCAtMTk4LDE3ICsxOTgsNiBAQAogCXJldHVybiByZXQgPyByZXQgOiBsZW47CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGFkOTgzNF9zaG93X25hbWUoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkgY2hhciAqYnVmKQotewotCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBhZDk4MzRfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShkZXZfaW5mbyk7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgc3BpX2dldF9kZXZpY2VfaWQoc3QtPnNwaSktPm5hbWUpOwotfQotc3RhdGljIElJT19ERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBhZDk4MzRfc2hvd19uYW1lLCBOVUxMLCAwKTsKLQogc3RhdGljIHNzaXplX3QgYWQ5ODM0X3Nob3dfb3V0MF93YXZldHlwZV9hdmFpbGFibGUoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJCQljaGFyICpidWYpCkBAIC0yMTcsNyArMjA2LDcgQEAKIAlzdHJ1Y3QgYWQ5ODM0X3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoZGV2X2luZm8pOwogCWNoYXIgKnN0cjsKIAotCWlmIChzdC0+ZGV2aWQgPT0gSURfQUQ5ODMzKQorCWlmICgoc3QtPmRldmlkID09IElEX0FEOTgzMykgfHwgKHN0LT5kZXZpZCA9PSBJRF9BRDk4MzcpKQogCQlzdHIgPSAic2luZSB0cmlhbmdsZSBzcXVhcmUiOwogCWVsc2UgaWYgKHN0LT5jb250cm9sICYgQUQ5ODM0X09QQklURU4pCiAJCXN0ciA9ICJzaW5lIjsKQEAgLTI4OCw3ICsyNzcsNiBAQAogCSZpaW9fZGV2X2F0dHJfZGRzMF9vdXQxX3dhdmV0eXBlLmRldl9hdHRyLmF0dHIsCiAJJmlpb19kZXZfYXR0cl9kZHMwX291dDBfd2F2ZXR5cGVfYXZhaWxhYmxlLmRldl9hdHRyLmF0dHIsCiAJJmlpb19kZXZfYXR0cl9kZHMwX291dDFfd2F2ZXR5cGVfYXZhaWxhYmxlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9uYW1lLmRldl9hdHRyLmF0dHIsCiAJTlVMTCwKIH07CiAKQEAgLTMwMSwxMyArMjg5LDEyIEBACiAKIAltb2RlX3QgbW9kZSA9IGF0dHItPm1vZGU7CiAKLQlpZiAoc3QtPmRldmlkID09IElEX0FEOTgzNCkKLQkJcmV0dXJuIG1vZGU7Ci0KLQlpZiAoKGF0dHIgPT0gJmlpb19kZXZfYXR0cl9kZHMwX291dDFfZW5hYmxlLmRldl9hdHRyLmF0dHIpIHx8CisJaWYgKCgoc3QtPmRldmlkID09IElEX0FEOTgzMykgfHwgKHN0LT5kZXZpZCA9PSBJRF9BRDk4MzcpKSAmJgorCQkoKGF0dHIgPT0gJmlpb19kZXZfYXR0cl9kZHMwX291dDFfZW5hYmxlLmRldl9hdHRyLmF0dHIpIHx8CiAJCShhdHRyID09ICZpaW9fZGV2X2F0dHJfZGRzMF9vdXQxX3dhdmV0eXBlLmRldl9hdHRyLmF0dHIpIHx8CiAJCShhdHRyID09Ci0JCSZpaW9fZGV2X2F0dHJfZGRzMF9vdXQxX3dhdmV0eXBlX2F2YWlsYWJsZS5kZXZfYXR0ci5hdHRyKSkKKwkJJmlpb19kZXZfYXR0cl9kZHMwX291dDFfd2F2ZXR5cGVfYXZhaWxhYmxlLmRldl9hdHRyLmF0dHIpIHx8CisJCShhdHRyID09ICZpaW9fZGV2X2F0dHJfZGRzMF9waW5jb250cm9sX2VuLmRldl9hdHRyLmF0dHIpKSkKIAkJbW9kZSA9IDA7CiAKIAlyZXR1cm4gbW9kZTsKQEAgLTMxOCw2ICszMDUsMTEgQEAKIAkuaXNfdmlzaWJsZSA9IGFkOTgzNF9hdHRyX2lzX3Zpc2libGUsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIGFkOTgzNF9pbmZvID0geworCS5hdHRycyA9ICZhZDk4MzRfYXR0cmlidXRlX2dyb3VwLAorCS5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEUsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhZDk4MzRfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlzdHJ1Y3QgYWQ5ODM0X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gc3BpLT5kZXYucGxhdGZvcm1fZGF0YTsKQEAgLTM0OSwxNiArMzQxLDE2IEBACiAJc3QtPnNwaSA9IHNwaTsKIAlzdC0+ZGV2aWQgPSBzcGlfZ2V0X2RldmljZV9pZChzcGkpLT5kcml2ZXJfZGF0YTsKIAotCXN0LT5pbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKCk7CisJc3QtPmluZGlvX2RldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2UoMCk7CiAJaWYgKHN0LT5pbmRpb19kZXYgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX2Rpc2FibGVfcmVnOwogCX0KIAogCXN0LT5pbmRpb19kZXYtPmRldi5wYXJlbnQgPSAmc3BpLT5kZXY7Ci0Jc3QtPmluZGlvX2Rldi0+YXR0cnMgPSAmYWQ5ODM0X2F0dHJpYnV0ZV9ncm91cDsKKwlzdC0+aW5kaW9fZGV2LT5uYW1lID0gc3BpX2dldF9kZXZpY2VfaWQoc3BpKS0+bmFtZTsKKwlzdC0+aW5kaW9fZGV2LT5pbmZvID0gJmFkOTgzNF9pbmZvOwogCXN0LT5pbmRpb19kZXYtPmRldl9kYXRhID0gKHZvaWQgKikgc3Q7Ci0Jc3QtPmluZGlvX2Rldi0+ZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFOwogCXN0LT5pbmRpb19kZXYtPm1vZGVzID0gSU5ESU9fRElSRUNUX01PREU7CiAKIAkvKiBTZXR1cCBkZWZhdWx0IG1lc3NhZ2VzICovCkBAIC00NDUsNiArNDM3LDggQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZV9pZCBhZDk4MzRfaWRbXSA9IHsKIAl7ImFkOTgzMyIsIElEX0FEOTgzM30sCiAJeyJhZDk4MzQiLCBJRF9BRDk4MzR9LAorCXsiYWQ5ODM3IiwgSURfQUQ5ODM3fSwKKwl7ImFkOTgzOCIsIElEX0FEOTgzOH0sCiAJe30KIH07CiAKQEAgLTQ3Miw2ICs0NjYsNiBAQAogbW9kdWxlX2V4aXQoYWQ5ODM0X2V4aXQpOwogCiBNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEhlbm5lcmljaCA8aGVubmVyaWNoQGJsYWNrZmluLnVjbGludXgub3JnPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBbmFsb2cgRGV2aWNlcyBBRDk4MzMvQUQ5ODM0IEREUyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBbmFsb2cgRGV2aWNlcyBBRDk4MzMvQUQ5ODM0L0FEOTgzNy9BRDk4MzggRERTIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CiBNT0RVTEVfQUxJQVMoInNwaTphZDk4MzQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZGRzL2FkOTgzNC5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9kZHMvYWQ5ODM0LmgKaW5kZXggMGZjM2I4OC4uMmFiZDYzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9kZHMvYWQ5ODM0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9kZHMvYWQ5ODM0LmgKQEAgLTEsOSArMSw5IEBACiAvKgotICogQUQ5ODM0IFNQSSBERFMgZHJpdmVyCisgKiBBRDk4MzMvQUQ5ODM0L0FEOTgzNy9BRDk4MzggU1BJIEREUyBkcml2ZXIKICAqCi0gKiBDb3B5cmlnaHQgMjAxMCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBDb3B5cmlnaHQgMjAxMC0yMDExIEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIuCiAgKi8KICNpZm5kZWYgSUlPX0REU19BRDk4MzRfSF8KICNkZWZpbmUgSUlPX0REU19BRDk4MzRfSF8KQEAgLTEwNyw2ICsxMDcsOCBAQAogZW51bSBhZDk4MzRfc3VwcG9ydGVkX2RldmljZV9pZHMgewogCUlEX0FEOTgzMywKIAlJRF9BRDk4MzQsCisJSURfQUQ5ODM3LAorCUlEX0FEOTgzOCwKIH07CiAKICNlbmRpZiAvKiBJSU9fRERTX0FEOTgzNF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9kZHMvYWQ5ODUwLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2Rkcy9hZDk4NTAuYwppbmRleCBiMjU5YmZlLi5iNTgwZDg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2Rkcy9hZDk4NTAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2Rkcy9hZDk4NTAuYwpAQCAtNzMsNiArNzMsMTEgQEAKIAkuYXR0cnMgPSBhZDk4NTBfYXR0cmlidXRlcywKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2luZm8gYWQ5ODUwX2luZm8gPSB7CisJLmF0dHJzID0gJmFkOTg1MF9hdHRyaWJ1dGVfZ3JvdXAsCisJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRSwKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGFkOTg1MF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCXN0cnVjdCBhZDk4NTBfc3RhdGUgKnN0OwpAQCAtODgsMTggKzkzLDE1IEBACiAJbXV0ZXhfaW5pdCgmc3QtPmxvY2spOwogCXN0LT5zZGV2ID0gc3BpOwogCi0Jc3QtPmlkZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKCk7CisJc3QtPmlkZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKDApOwogCWlmIChzdC0+aWRldiA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3JfZnJlZV9zdDsKIAl9CiAJc3QtPmlkZXYtPmRldi5wYXJlbnQgPSAmc3BpLT5kZXY7Ci0Jc3QtPmlkZXYtPm51bV9pbnRlcnJ1cHRfbGluZXMgPSAwOwotCXN0LT5pZGV2LT5ldmVudF9hdHRycyA9IE5VTEw7CiAKLQlzdC0+aWRldi0+YXR0cnMgPSAmYWQ5ODUwX2F0dHJpYnV0ZV9ncm91cDsKKwlzdC0+aWRldi0+aW5mbyA9ICZhZDk4NTBfaW5mbzsKIAlzdC0+aWRldi0+ZGV2X2RhdGEgPSAodm9pZCAqKShzdCk7Ci0Jc3QtPmlkZXYtPmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRTsKIAlzdC0+aWRldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1RfTU9ERTsKIAogCXJldCA9IGlpb19kZXZpY2VfcmVnaXN0ZXIoc3QtPmlkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9kZHMvYWQ5ODUyLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2Rkcy9hZDk4NTIuYwppbmRleCA1OTRmYjZhLi4wODAyMGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2Rkcy9hZDk4NTIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2Rkcy9hZDk4NTIuYwpAQCAtMjIyLDYgKzIyMiwxMSBAQAogCS5hdHRycyA9IGFkOTg1Ml9hdHRyaWJ1dGVzLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9faW5mbyBhZDk4NTJfaW5mbyA9IHsKKwkuYXR0cnMgPSAmYWQ5ODUyX2F0dHJpYnV0ZV9ncm91cCwKKwkuZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFLAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgYWQ5ODUyX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CiAJc3RydWN0IGFkOTg1Ml9zdGF0ZSAqc3Q7CkBAIC0yMzcsMTggKzI0MiwxNSBAQAogCW11dGV4X2luaXQoJnN0LT5sb2NrKTsKIAlzdC0+c2RldiA9IHNwaTsKIAotCXN0LT5pZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgpOworCXN0LT5pZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgwKTsKIAlpZiAoc3QtPmlkZXYgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX2ZyZWVfc3Q7CiAJfQogCXN0LT5pZGV2LT5kZXYucGFyZW50ID0gJnNwaS0+ZGV2OwotCXN0LT5pZGV2LT5udW1faW50ZXJydXB0X2xpbmVzID0gMDsKLQlzdC0+aWRldi0+ZXZlbnRfYXR0cnMgPSBOVUxMOwogCi0Jc3QtPmlkZXYtPmF0dHJzID0gJmFkOTg1Ml9hdHRyaWJ1dGVfZ3JvdXA7CisJc3QtPmlkZXYtPmluZm8gPSAmYWQ5ODUyX2luZm87CiAJc3QtPmlkZXYtPmRldl9kYXRhID0gKHZvaWQgKikoc3QpOwotCXN0LT5pZGV2LT5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEU7CiAJc3QtPmlkZXYtPm1vZGVzID0gSU5ESU9fRElSRUNUX01PREU7CiAKIAlyZXQgPSBpaW9fZGV2aWNlX3JlZ2lzdGVyKHN0LT5pZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZGRzL2FkOTkxMC5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9kZHMvYWQ5OTEwLmMKaW5kZXggZThmYjc1Yy4uOTdkNzVkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9kZHMvYWQ5OTEwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9kZHMvYWQ5OTEwLmMKQEAgLTM1Nyw2ICszNTcsMTEgQEAKIAkuYXR0cnMgPSBhZDk5MTBfYXR0cmlidXRlcywKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2luZm8gYWQ5OTEwX2luZm8gPSB7CisJLmF0dHJzID0gJmFkOTkxMF9hdHRyaWJ1dGVfZ3JvdXAsCisJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRSwKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGFkOTkxMF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCXN0cnVjdCBhZDk5MTBfc3RhdGUgKnN0OwpAQCAtMzcyLDE4ICszNzcsMTUgQEAKIAltdXRleF9pbml0KCZzdC0+bG9jayk7CiAJc3QtPnNkZXYgPSBzcGk7CiAKLQlzdC0+aWRldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2UoKTsKKwlzdC0+aWRldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2UoMCk7CiAJaWYgKHN0LT5pZGV2ID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9mcmVlX3N0OwogCX0KIAlzdC0+aWRldi0+ZGV2LnBhcmVudCA9ICZzcGktPmRldjsKLQlzdC0+aWRldi0+bnVtX2ludGVycnVwdF9saW5lcyA9IDA7Ci0Jc3QtPmlkZXYtPmV2ZW50X2F0dHJzID0gTlVMTDsKIAotCXN0LT5pZGV2LT5hdHRycyA9ICZhZDk5MTBfYXR0cmlidXRlX2dyb3VwOworCXN0LT5pZGV2LT5pbmZvID0gJmFkOTkxMF9pbmZvOwogCXN0LT5pZGV2LT5kZXZfZGF0YSA9ICh2b2lkICopKHN0KTsKLQlzdC0+aWRldi0+ZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFOwogCXN0LT5pZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOwogCiAJcmV0ID0gaWlvX2RldmljZV9yZWdpc3RlcihzdC0+aWRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2Rkcy9hZDk5NTEuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZGRzL2FkOTk1MS5jCmluZGV4IDU3ZWRkZjYuLmQ0ZGZjZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZGRzL2FkOTk1MS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZGRzL2FkOTk1MS5jCkBAIC0xNjYsNiArMTY2LDExIEBACiAJLmF0dHJzID0gYWQ5OTUxX2F0dHJpYnV0ZXMsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIGFkOTk1MV9pbmZvID0geworCS5hdHRycyA9ICZhZDk5NTFfYXR0cmlidXRlX2dyb3VwLAorCS5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEUsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhZDk5NTFfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlzdHJ1Y3QgYWQ5OTUxX3N0YXRlICpzdDsKQEAgLTE4MSwxOCArMTg2LDE1IEBACiAJbXV0ZXhfaW5pdCgmc3QtPmxvY2spOwogCXN0LT5zZGV2ID0gc3BpOwogCi0Jc3QtPmlkZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKCk7CisJc3QtPmlkZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKDApOwogCWlmIChzdC0+aWRldiA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3JfZnJlZV9zdDsKIAl9CiAJc3QtPmlkZXYtPmRldi5wYXJlbnQgPSAmc3BpLT5kZXY7Ci0Jc3QtPmlkZXYtPm51bV9pbnRlcnJ1cHRfbGluZXMgPSAwOwotCXN0LT5pZGV2LT5ldmVudF9hdHRycyA9IE5VTEw7CiAKLQlzdC0+aWRldi0+YXR0cnMgPSAmYWQ5OTUxX2F0dHJpYnV0ZV9ncm91cDsKKwlzdC0+aWRldi0+aW5mbyA9ICZhZDk5NTFfaW5mbzsKIAlzdC0+aWRldi0+ZGV2X2RhdGEgPSAodm9pZCAqKShzdCk7Ci0Jc3QtPmlkZXYtPmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRTsKIAlzdC0+aWRldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1RfTU9ERTsKIAogCXJldCA9IGlpb19kZXZpY2VfcmVnaXN0ZXIoc3QtPmlkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vS2NvbmZpZwppbmRleCA4Yjc4ZmEwLi5hZTJlN2QzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vS2NvbmZpZwpAQCAtMzUsMyArMzUsMTMgQEAKIAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgYWRpczE2MjYwLgorCitjb25maWcgQURYUlM0NTAKKwl0cmlzdGF0ZSAiQW5hbG9nIERldmljZXMgQURYUlM0NTAgRGlnaXRhbCBPdXRwdXQgR3lyb3Njb3BlIFNQSSBkcml2ZXIiCisJZGVwZW5kcyBvbiBTUEkKKwloZWxwCisJICBTYXkgeWVzIGhlcmUgdG8gYnVpbGQgc3VwcG9ydCBmb3IgQW5hbG9nIERldmljZXMgQURYUlM0NTAgcHJvZ3JhbW1hYmxlCisJICBkaWdpdGFsIG91dHB1dCBneXJvc2NvcGUuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGFkeHJzNDUwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL01ha2VmaWxlCmluZGV4IDI3NjRjMTUuLjIyMTIyNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vTWFrZWZpbGUKQEAgLTE3LDMgKzE3LDYgQEAKIAogYWRpczE2MjUxLXkgICAgICAgICAgICAgOj0gYWRpczE2MjUxX2NvcmUubwogb2JqLSQoQ09ORklHX0FESVMxNjI1MSkgKz0gYWRpczE2MjUxLm8KKworYWR4cnM0NTAteSAgICAgICAgICAgICA6PSBhZHhyczQ1MF9jb3JlLm8KK29iai0kKENPTkZJR19BRFhSUzQ1MCkgKz0gYWR4cnM0NTAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjA2MF9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vYWRpczE2MDYwX2NvcmUuYwppbmRleCBhZTUzZTcxLi5lZGY5ZTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vYWRpczE2MDYwX2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vYWRpczE2MDYwX2NvcmUuYwpAQCAtMTMzLDYgKzEzMywxMSBAQAogCS5hdHRycyA9IGFkaXMxNjA2MF9hdHRyaWJ1dGVzLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9faW5mbyBhZGlzMTYwNjBfaW5mbyA9IHsKKwkuYXR0cnMgPSAmYWRpczE2MDYwX2F0dHJpYnV0ZV9ncm91cCwKKwkuZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFLAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgYWRpczE2MDYwX3JfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlpbnQgcmV0LCByZWdkb25lID0gMDsKQEAgLTE0NywxNiArMTUyLDE1IEBACiAJc3QtPnVzX3IgPSBzcGk7CiAJbXV0ZXhfaW5pdCgmc3QtPmJ1Zl9sb2NrKTsKIAkvKiBzZXR1cCB0aGUgaW5kdXN0cmlhbGlvIGRyaXZlciBhbGxvY2F0ZWQgZWxlbWVudHMgKi8KLQlzdC0+aW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgpOworCXN0LT5pbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKDApOwogCWlmIChzdC0+aW5kaW9fZGV2ID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9mcmVlX3N0OwogCX0KIAogCXN0LT5pbmRpb19kZXYtPmRldi5wYXJlbnQgPSAmc3BpLT5kZXY7Ci0Jc3QtPmluZGlvX2Rldi0+YXR0cnMgPSAmYWRpczE2MDYwX2F0dHJpYnV0ZV9ncm91cDsKKwlzdC0+aW5kaW9fZGV2LT5pbmZvID0gJmFkaXMxNjA2MF9pbmZvOwogCXN0LT5pbmRpb19kZXYtPmRldl9kYXRhID0gKHZvaWQgKikoc3QpOwotCXN0LT5pbmRpb19kZXYtPmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRTsKIAlzdC0+aW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOwogCiAJcmV0ID0gaWlvX2RldmljZV9yZWdpc3RlcihzdC0+aW5kaW9fZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9hZGlzMTYwODBfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjA4MF9jb3JlLmMKaW5kZXggZWY5ZTMwNC4uZDQyNjkwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjA4MF9jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjA4MF9jb3JlLmMKQEAgLTExMCwxNCArMTEwLDEyIEBACiAJCSAgICAgICBBRElTMTYwODBfRElOX1RFTVApOwogc3RhdGljIElJT19ERVZfQVRUUl9JTl9SQVcoMCwgYWRpczE2MDgwX3JlYWQsIEFESVMxNjA4MF9ESU5fQUlOMSk7CiBzdGF0aWMgSUlPX0RFVl9BVFRSX0lOX1JBVygxLCBhZGlzMTYwODBfcmVhZCwgQURJUzE2MDgwX0RJTl9BSU4yKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUihuYW1lLCAiYWRpczE2MDgwIik7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZGlzMTYwODBfYXR0cmlidXRlc1tdID0gewogCSZpaW9fZGV2X2F0dHJfZ3lyb196X3Jhdy5kZXZfYXR0ci5hdHRyLAogCSZpaW9fZGV2X2F0dHJfdGVtcF9yYXcuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX2luMF9yYXcuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX2luMV9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfbmFtZS5kZXZfYXR0ci5hdHRyLAogCU5VTEwKIH07CiAKQEAgLTEyNSw2ICsxMjMsMTEgQEAKIAkuYXR0cnMgPSBhZGlzMTYwODBfYXR0cmlidXRlcywKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2luZm8gYWRpczE2MDgwX2luZm8gPSB7CisJLmF0dHJzID0gJmFkaXMxNjA4MF9hdHRyaWJ1dGVfZ3JvdXAsCisJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRSwKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGFkaXMxNjA4MF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCWludCByZXQsIHJlZ2RvbmUgPSAwOwpAQCAtMTQwLDE2ICsxNDMsMTYgQEAKIAlzdC0+dXMgPSBzcGk7CiAJbXV0ZXhfaW5pdCgmc3QtPmJ1Zl9sb2NrKTsKIAkvKiBzZXR1cCB0aGUgaW5kdXN0cmlhbGlvIGRyaXZlciBhbGxvY2F0ZWQgZWxlbWVudHMgKi8KLQlzdC0+aW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgpOworCXN0LT5pbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKDApOwogCWlmIChzdC0+aW5kaW9fZGV2ID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9mcmVlX3N0OwogCX0KIAorCXN0LT5pbmRpb19kZXYtPm5hbWUgPSBzcGktPmRldi5kcml2ZXItPm5hbWU7CiAJc3QtPmluZGlvX2Rldi0+ZGV2LnBhcmVudCA9ICZzcGktPmRldjsKLQlzdC0+aW5kaW9fZGV2LT5hdHRycyA9ICZhZGlzMTYwODBfYXR0cmlidXRlX2dyb3VwOworCXN0LT5pbmRpb19kZXYtPmluZm8gPSAmYWRpczE2MDgwX2luZm87CiAJc3QtPmluZGlvX2Rldi0+ZGV2X2RhdGEgPSAodm9pZCAqKShzdCk7Ci0Jc3QtPmluZGlvX2Rldi0+ZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFOwogCXN0LT5pbmRpb19kZXYtPm1vZGVzID0gSU5ESU9fRElSRUNUX01PREU7CiAKIAlyZXQgPSBpaW9fZGV2aWNlX3JlZ2lzdGVyKHN0LT5pbmRpb19kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjEzMF9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vYWRpczE2MTMwX2NvcmUuYwppbmRleCA3MGUyODMxLi4xNGQ1YTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vYWRpczE2MTMwX2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vYWRpczE2MTMwX2NvcmUuYwpAQCAtMTU1LDggKzE1NSw2IEBACiBzdGF0aWMgSUlPX0RFVklDRV9BVFRSKHRlbXBfcmF3LCBTX0lSVUdPLCBhZGlzMTYxMzBfdmFsX3JlYWQsIE5VTEwsCiAJCSAgICAgIEFESVMxNjEzMF9URU1QREFUQSk7CiAKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUihuYW1lLCAiYWRpczE2MTMwIik7Ci0KIHN0YXRpYyBJSU9fREVWX0FUVFJfR1lST19aKGFkaXMxNjEzMF92YWxfcmVhZCwgQURJUzE2MTMwX1JBVEVEQVRBKTsKIAogc3RhdGljIElJT19ERVZJQ0VfQVRUUihneXJvX3pfdHlwZSwgU19JV1VTUiB8IFNfSVJVR08sIGFkaXMxNjEzMF9iaXRzbW9kZV9yZWFkLApAQCAtMTY3LDcgKzE2NSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZGlzMTYxMzBfYXR0cmlidXRlc1tdID0gewogCSZpaW9fZGV2X2F0dHJfdGVtcF9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfbmFtZS5kZXZfYXR0ci5hdHRyLAogCSZpaW9fZGV2X2F0dHJfZ3lyb196X3Jhdy5kZXZfYXR0ci5hdHRyLAogCSZpaW9fZGV2X2F0dHJfZ3lyb196X3R5cGUuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2NvbnN0X2F0dHJfZ3lyb196X3R5cGVfYXZhaWxhYmxlLmRldl9hdHRyLmF0dHIsCkBAIC0xNzgsNiArMTc1LDExIEBACiAJLmF0dHJzID0gYWRpczE2MTMwX2F0dHJpYnV0ZXMsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIGFkaXMxNjEzMF9pbmZvID0geworCS5hdHRycyA9ICZhZGlzMTYxMzBfYXR0cmlidXRlX2dyb3VwLAorCS5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEUsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhZGlzMTYxMzBfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlpbnQgcmV0OwpAQCAtMTkxLDE2ICsxOTMsMTYgQEAKIAlzdC0+dXMgPSBzcGk7CiAJbXV0ZXhfaW5pdCgmc3QtPmJ1Zl9sb2NrKTsKIAkvKiBzZXR1cCB0aGUgaW5kdXN0cmlhbGlvIGRyaXZlciBhbGxvY2F0ZWQgZWxlbWVudHMgKi8KLQlzdC0+aW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgpOworCXN0LT5pbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKDApOwogCWlmIChzdC0+aW5kaW9fZGV2ID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9mcmVlX3N0OwogCX0KIAorCXN0LT5pbmRpb19kZXYtPm5hbWUgPSBzcGktPmRldi5kcml2ZXItPm5hbWU7CiAJc3QtPmluZGlvX2Rldi0+ZGV2LnBhcmVudCA9ICZzcGktPmRldjsKLQlzdC0+aW5kaW9fZGV2LT5hdHRycyA9ICZhZGlzMTYxMzBfYXR0cmlidXRlX2dyb3VwOworCXN0LT5pbmRpb19kZXYtPmluZm8gPSAmYWRpczE2MTMwX2luZm87CiAJc3QtPmluZGlvX2Rldi0+ZGV2X2RhdGEgPSAodm9pZCAqKShzdCk7Ci0Jc3QtPmluZGlvX2Rldi0+ZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFOwogCXN0LT5pbmRpb19kZXYtPm1vZGVzID0gSU5ESU9fRElSRUNUX01PREU7CiAJc3QtPm1vZGUgPSAxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vYWRpczE2MjYwLmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vYWRpczE2MjYwLmgKaW5kZXggMTM2OTUwMS4uNzAyZGM5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjI2MC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9hZGlzMTYyNjAuaApAQCAtODUsOSArODUsNiBAQAogLyoqCiAgKiBzdHJ1Y3QgYWRpczE2MjYwX3N0YXRlIC0gZGV2aWNlIGluc3RhbmNlIHNwZWNpZmljIGRhdGEKICAqIEB1czoJCQlhY3R1YWwgc3BpX2RldmljZQotICogQHdvcmtfdHJpZ2dlcl90b19yaW5nOiBiaCBmb3IgdHJpZ2dlcmVkIGV2ZW50IGhhbmRsaW5nCi0gKiBAaW50ZXI6CQl1c2VkIHRvIGNoZWNrIGlmIG5ldyBpbnRlcnJ1cHQgaGFzIGJlZW4gdHJpZ2dlcmVkCi0gKiBAbGFzdF90aW1lc3RhbXA6CXBhc3NpbmcgdGltZXN0YW1wIGZyb20gdGggdG8gYmggb2YgaW50ZXJydXB0IGhhbmRsZXIKICAqIEBpbmRpb19kZXY6CQlpbmR1c3RyaWFsIEkvTyBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAdHJpZzoJCWRhdGEgcmVhZHkgdHJpZ2dlciByZWdpc3RlcmVkIHdpdGggaWlvCiAgKiBAdHg6CQkJdHJhbnNtaXQgYnVmZmVyCkBAIC05Nyw4ICs5NCw2IEBACiAgKiovCiBzdHJ1Y3QgYWRpczE2MjYwX3N0YXRlIHsKIAlzdHJ1Y3Qgc3BpX2RldmljZQkJKnVzOwotCXN0cnVjdCB3b3JrX3N0cnVjdAkJd29ya190cmlnZ2VyX3RvX3Jpbmc7Ci0JczY0CQkJCWxhc3RfdGltZXN0YW1wOwogCXN0cnVjdCBpaW9fZGV2CQkJKmluZGlvX2RldjsKIAlzdHJ1Y3QgaWlvX3RyaWdnZXIJCSp0cmlnOwogCXU4CQkJCSp0eDsKQEAgLTEwNyw3ICsxMDIsNyBAQAogCXVuc2lnbmVkCQkJbmVnYXRlOjE7CiB9OwogCi1pbnQgYWRpczE2MjYwX3NldF9pcnEoc3RydWN0IGRldmljZSAqZGV2LCBib29sIGVuYWJsZSk7CitpbnQgYWRpczE2MjYwX3NldF9pcnEoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwgYm9vbCBlbmFibGUpOwogCiAjaWZkZWYgQ09ORklHX0lJT19SSU5HX0JVRkZFUgogLyogQXQgdGhlIG1vbWVudCB0cmlnZ2VycyBhcmUgb25seSB1c2VkIGZvciByaW5nIGJ1ZmZlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjI2MF9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vYWRpczE2MjYwX2NvcmUuYwppbmRleCA2OWEyOWVjLi4zZGM5YTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vYWRpczE2MjYwX2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vYWRpczE2MjYwX2NvcmUuYwpAQCAtMjgsMjAgKzI4LDE5IEBACiAKICNkZWZpbmUgRFJJVkVSX05BTUUJCSJhZGlzMTYyNjAiCiAKLXN0YXRpYyBpbnQgYWRpczE2MjYwX2NoZWNrX3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkZXYpOworc3RhdGljIGludCBhZGlzMTYyNjBfY2hlY2tfc3RhdHVzKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwogCiAvKioKICAqIGFkaXMxNjI2MF9zcGlfd3JpdGVfcmVnXzgoKSAtIHdyaXRlIHNpbmdsZSBieXRlIHRvIGEgcmVnaXN0ZXIKLSAqIEBkZXY6IGRldmljZSBhc3NvY2lhdGVkIHdpdGggY2hpbGQgb2YgYWN0dWFsIGRldmljZSAoaWlvX2RldiBvciBpaW9fdHJpZykKKyAqIEBpbmRpb19kZXY6IGlpb19kZXYgZm9yIHRoZSBkZXZpY2UKICAqIEByZWdfYWRkcmVzczogdGhlIGFkZHJlc3Mgb2YgdGhlIHJlZ2lzdGVyIHRvIGJlIHdyaXR0ZW4KICAqIEB2YWw6IHRoZSB2YWx1ZSB0byB3cml0ZQogICoqLwotc3RhdGljIGludCBhZGlzMTYyNjBfc3BpX3dyaXRlX3JlZ184KHN0cnVjdCBkZXZpY2UgKmRldiwKK3N0YXRpYyBpbnQgYWRpczE2MjYwX3NwaV93cml0ZV9yZWdfOChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAogCQl1OCByZWdfYWRkcmVzcywKIAkJdTggdmFsKQogewogCWludCByZXQ7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBhZGlzMTYyNjBfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOwogCiAJbXV0ZXhfbG9jaygmc3QtPmJ1Zl9sb2NrKTsKQEAgLTU2LDE4ICs1NSwxNyBAQAogCiAvKioKICAqIGFkaXMxNjI2MF9zcGlfd3JpdGVfcmVnXzE2KCkgLSB3cml0ZSAyIGJ5dGVzIHRvIGEgcGFpciBvZiByZWdpc3RlcnMKLSAqIEBkZXY6IGRldmljZSBhc3NvY2lhdGVkIHdpdGggY2hpbGQgb2YgYWN0dWFsIGRldmljZSAoaWlvX2RldiBvciBpaW9fdHJpZykKKyAqIEBpbmRpb19kZXY6IGlpb19kZXYgZm9yIHRoZSBkZXZpY2UKICAqIEByZWdfYWRkcmVzczogdGhlIGFkZHJlc3Mgb2YgdGhlIGxvd2VyIG9mIHRoZSB0d28gcmVnaXN0ZXJzLiBTZWNvbmQgcmVnaXN0ZXIKICAqICAgICAgICAgICAgICAgaXMgYXNzdW1lZCB0byBoYXZlIGFkZHJlc3Mgb25lIGdyZWF0ZXIuCiAgKiBAdmFsOiB2YWx1ZSB0byBiZSB3cml0dGVuCiAgKiovCi1zdGF0aWMgaW50IGFkaXMxNjI2MF9zcGlfd3JpdGVfcmVnXzE2KHN0cnVjdCBkZXZpY2UgKmRldiwKK3N0YXRpYyBpbnQgYWRpczE2MjYwX3NwaV93cml0ZV9yZWdfMTYoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKIAkJdTggbG93ZXJfcmVnX2FkZHJlc3MsCiAJCXUxNiB2YWx1ZSkKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBzcGlfbWVzc2FnZSBtc2c7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBhZGlzMTYyNjBfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOwogCXN0cnVjdCBzcGlfdHJhbnNmZXIgeGZlcnNbXSA9IHsKIAkJewpAQCAtODAsNyArNzgsNiBAQAogCQkJLnR4X2J1ZiA9IHN0LT50eCArIDIsCiAJCQkuYml0c19wZXJfd29yZCA9IDgsCiAJCQkubGVuID0gMiwKLQkJCS5jc19jaGFuZ2UgPSAxLAogCQkJLmRlbGF5X3VzZWNzID0gMjAsCiAJCX0sCiAJfTsKQEAgLTEwMiwxNyArOTksMTYgQEAKIAogLyoqCiAgKiBhZGlzMTYyNjBfc3BpX3JlYWRfcmVnXzE2KCkgLSByZWFkIDIgYnl0ZXMgZnJvbSBhIDE2LWJpdCByZWdpc3RlcgotICogQGRldjogZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBjaGlsZCBvZiBhY3R1YWwgZGV2aWNlIChpaW9fZGV2IG9yIGlpb190cmlnKQorICogQGluZGlvX2RldjogaWlvX2RldiBmb3IgdGhlIGRldmljZQogICogQHJlZ19hZGRyZXNzOiB0aGUgYWRkcmVzcyBvZiB0aGUgbG93ZXIgb2YgdGhlIHR3byByZWdpc3RlcnMuIFNlY29uZCByZWdpc3RlcgogICogICAgICAgICAgICAgICBpcyBhc3N1bWVkIHRvIGhhdmUgYWRkcmVzcyBvbmUgZ3JlYXRlci4KICAqIEB2YWw6IHNvbWV3aGVyZSB0byBwYXNzIGJhY2sgdGhlIHZhbHVlIHJlYWQKICAqKi8KLXN0YXRpYyBpbnQgYWRpczE2MjYwX3NwaV9yZWFkX3JlZ18xNihzdHJ1Y3QgZGV2aWNlICpkZXYsCitzdGF0aWMgaW50IGFkaXMxNjI2MF9zcGlfcmVhZF9yZWdfMTYoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKIAkJdTggbG93ZXJfcmVnX2FkZHJlc3MsCiAJCXUxNiAqdmFsKQogewogCXN0cnVjdCBzcGlfbWVzc2FnZSBtc2c7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBhZGlzMTYyNjBfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOwogCWludCByZXQ7CiAJc3RydWN0IHNwaV90cmFuc2ZlciB4ZmVyc1tdID0gewpAQCAtMTI2LDcgKzEyMiw2IEBACiAJCQkucnhfYnVmID0gc3QtPnJ4LAogCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAogCQkJLmxlbiA9IDIsCi0JCQkuY3NfY2hhbmdlID0gMSwKIAkJCS5kZWxheV91c2VjcyA9IDMwLAogCQl9LAogCX07CkBAIC0xNTIsOTIgKzE0Nyw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHNzaXplX3QgYWRpczE2MjYwX3NwaV9yZWFkX3NpZ25lZChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljaGFyICpidWYsCi0JCXVuc2lnbmVkIGJpdHMpCi17Ci0JaW50IHJldDsKLQlzMTYgdmFsID0gMDsKLQl1bnNpZ25lZCBzaGlmdCA9IDE2IC0gYml0czsKLQlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7Ci0KLQlyZXQgPSBhZGlzMTYyNjBfc3BpX3JlYWRfcmVnXzE2KGRldiwgdGhpc19hdHRyLT5hZGRyZXNzLCAodTE2ICopJnZhbCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCWlmICh2YWwgJiBBRElTMTYyNjBfRVJST1JfQUNUSVZFKQotCQlhZGlzMTYyNjBfY2hlY2tfc3RhdHVzKGRldik7Ci0JdmFsID0gKChzMTYpKHZhbCA8PCBzaGlmdCkgPj4gc2hpZnQpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB2YWwpOwotfQotCi1zdGF0aWMgc3NpemVfdCBhZGlzMTYyNjBfcmVhZF8xMmJpdF91bnNpZ25lZChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljaGFyICpidWYpCi17Ci0JaW50IHJldDsKLQl1MTYgdmFsID0gMDsKLQlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7Ci0KLQlyZXQgPSBhZGlzMTYyNjBfc3BpX3JlYWRfcmVnXzE2KGRldiwgdGhpc19hdHRyLT5hZGRyZXNzLCAmdmFsKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JaWYgKHZhbCAmIEFESVMxNjI2MF9FUlJPUl9BQ1RJVkUpCi0JCWFkaXMxNjI2MF9jaGVja19zdGF0dXMoZGV2KTsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCB2YWwgJiAweDBGRkYpOwotfQotCi1zdGF0aWMgc3NpemVfdCBhZGlzMTYyNjBfcmVhZF8xMmJpdF9zaWduZWQoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY2hhciAqYnVmKQotewotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzc2l6ZV90IHJldDsKLQotCS8qIFRha2UgdGhlIGlpb19kZXYgc3RhdHVzIGxvY2sgKi8KLQltdXRleF9sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKLQlyZXQgPSAgYWRpczE2MjYwX3NwaV9yZWFkX3NpZ25lZChkZXYsIGF0dHIsIGJ1ZiwgMTIpOwotCW11dGV4X3VubG9jaygmaW5kaW9fZGV2LT5tbG9jayk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3NpemVfdCBhZGlzMTYyNjBfcmVhZF8xNGJpdF9zaWduZWQoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY2hhciAqYnVmKQotewotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzc2l6ZV90IHJldDsKLQotCS8qIFRha2UgdGhlIGlpb19kZXYgc3RhdHVzIGxvY2sgKi8KLQltdXRleF9sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKLQlyZXQgPSAgYWRpczE2MjYwX3NwaV9yZWFkX3NpZ25lZChkZXYsIGF0dHIsIGJ1ZiwgMTQpOwotCW11dGV4X3VubG9jaygmaW5kaW9fZGV2LT5tbG9jayk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3NpemVfdCBhZGlzMTYyNjBfd3JpdGVfMTZiaXQoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY29uc3QgY2hhciAqYnVmLAotCQlzaXplX3QgbGVuKQotewotCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKLQlpbnQgcmV0OwotCWxvbmcgdmFsOwotCi0JcmV0ID0gc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdmFsKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycm9yX3JldDsKLQlyZXQgPSBhZGlzMTYyNjBfc3BpX3dyaXRlX3JlZ18xNihkZXYsIHRoaXNfYXR0ci0+YWRkcmVzcywgdmFsKTsKLQotZXJyb3JfcmV0OgotCXJldHVybiByZXQgPyByZXQgOiBsZW47Ci19Ci0KIHN0YXRpYyBzc2l6ZV90IGFkaXMxNjI2MF9yZWFkX2ZyZXF1ZW5jeV9hdmFpbGFibGUoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkJCSAgY2hhciAqYnVmKQpAQCAtMjU5LDcgKzE2OCw3IEBACiAJaW50IHJldCwgbGVuID0gMDsKIAl1MTYgdDsKIAlpbnQgc3BzOwotCXJldCA9IGFkaXMxNjI2MF9zcGlfcmVhZF9yZWdfMTYoZGV2LAorCXJldCA9IGFkaXMxNjI2MF9zcGlfcmVhZF9yZWdfMTYoaW5kaW9fZGV2LAogCQkJQURJUzE2MjYwX1NNUExfUFJELAogCQkJJnQpOwogCWlmIChyZXQpCkBAIC0zMDUsNyArMjE0LDcgQEAKIAkJc3QtPnVzLT5tYXhfc3BlZWRfaHogPSBBRElTMTYyNjBfU1BJX1NMT1c7CiAJZWxzZQogCQlzdC0+dXMtPm1heF9zcGVlZF9oeiA9IEFESVMxNjI2MF9TUElfRkFTVDsKLQlyZXQgPSBhZGlzMTYyNjBfc3BpX3dyaXRlX3JlZ184KGRldiwKKwlyZXQgPSBhZGlzMTYyNjBfc3BpX3dyaXRlX3JlZ184KGluZGlvX2RldiwKIAkJCUFESVMxNjI2MF9TTVBMX1BSRCwKIAkJCXQpOwogCkBAIC0zMTQsMzMgKzIyMywxNCBAQAogCXJldHVybiByZXQgPyByZXQgOiBsZW47CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGFkaXMxNjI2MF9yZWFkX2d5cm9fc2NhbGUoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY2hhciAqYnVmKQotewotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgYWRpczE2MjYwX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKLQlzc2l6ZV90IHJldCA9IDA7Ci0KLQlpZiAoc3QtPm5lZ2F0ZSkKLQkJcmV0ID0gc3ByaW50ZihidWYsICItIik7Ci0JLyogVGFrZSB0aGUgaWlvX2RldiBzdGF0dXMgbG9jayAqLwotCWlmIChzcGlfZ2V0X2RldmljZV9pZChzdC0+dXMpLT5kcml2ZXJfZGF0YSkKLQkJcmV0ICs9IHNwcmludGYoYnVmICsgcmV0LCAiJXNcbiIsICIwLjAwMDMxOTc0NDMyIik7Ci0JZWxzZQotCQlyZXQgKz0gc3ByaW50ZihidWYgKyByZXQsICIlc1xuIiwgIjAuMDAxMjc4NjI4MjEiKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgYWRpczE2MjYwX3Jlc2V0KHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgYWRpczE2MjYwX3Jlc2V0KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCiB7CiAJaW50IHJldDsKLQlyZXQgPSBhZGlzMTYyNjBfc3BpX3dyaXRlX3JlZ184KGRldiwKKwlyZXQgPSBhZGlzMTYyNjBfc3BpX3dyaXRlX3JlZ184KGluZGlvX2RldiwKIAkJCUFESVMxNjI2MF9HTE9CX0NNRCwKIAkJCUFESVMxNjI2MF9HTE9CX0NNRF9TV19SRVNFVCk7CiAJaWYgKHJldCkKLQkJZGV2X2VycihkZXYsICJwcm9ibGVtIHJlc2V0dGluZyBkZXZpY2UiKTsKKwkJZGV2X2VycigmaW5kaW9fZGV2LT5kZXYsICJwcm9ibGVtIHJlc2V0dGluZyBkZXZpY2UiKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0zNDksMjIgKzIzOSwyMyBAQAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogeworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpZiAobGVuIDwgMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJc3dpdGNoIChidWZbMF0pIHsKIAljYXNlICcxJzoKIAljYXNlICd5JzoKIAljYXNlICdZJzoKLQkJcmV0dXJuIGFkaXMxNjI2MF9yZXNldChkZXYpOworCQlyZXR1cm4gYWRpczE2MjYwX3Jlc2V0KGluZGlvX2Rldik7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQogCi1pbnQgYWRpczE2MjYwX3NldF9pcnEoc3RydWN0IGRldmljZSAqZGV2LCBib29sIGVuYWJsZSkKK2ludCBhZGlzMTYyNjBfc2V0X2lycShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LCBib29sIGVuYWJsZSkKIHsKIAlpbnQgcmV0OwogCXUxNiBtc2M7Ci0JcmV0ID0gYWRpczE2MjYwX3NwaV9yZWFkX3JlZ18xNihkZXYsIEFESVMxNjI2MF9NU0NfQ1RSTCwgJm1zYyk7CisJcmV0ID0gYWRpczE2MjYwX3NwaV9yZWFkX3JlZ18xNihpbmRpb19kZXYsIEFESVMxNjI2MF9NU0NfQ1RSTCwgJm1zYyk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl9yZXQ7CiAKQEAgLTM3NCw3ICsyNjUsNyBAQAogCWVsc2UKIAkJbXNjICY9IH5BRElTMTYyNjBfTVNDX0NUUkxfREFUQV9SRFlfRU47CiAKLQlyZXQgPSBhZGlzMTYyNjBfc3BpX3dyaXRlX3JlZ18xNihkZXYsIEFESVMxNjI2MF9NU0NfQ1RSTCwgbXNjKTsKKwlyZXQgPSBhZGlzMTYyNjBfc3BpX3dyaXRlX3JlZ18xNihpbmRpb19kZXYsIEFESVMxNjI2MF9NU0NfQ1RSTCwgbXNjKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycm9yX3JldDsKIApAQCAtMzgzLDQxICsyNzQsNDQgQEAKIH0KIAogLyogUG93ZXIgZG93biB0aGUgZGV2aWNlICovCi1zdGF0aWMgaW50IGFkaXMxNjI2MF9zdG9wX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGFkaXMxNjI2MF9zdG9wX2RldmljZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQogewogCWludCByZXQ7CiAJdTE2IHZhbCA9IEFESVMxNjI2MF9TTFBfQ05UX1BPV0VSX09GRjsKIAotCXJldCA9IGFkaXMxNjI2MF9zcGlfd3JpdGVfcmVnXzE2KGRldiwgQURJUzE2MjYwX1NMUF9DTlQsIHZhbCk7CisJcmV0ID0gYWRpczE2MjYwX3NwaV93cml0ZV9yZWdfMTYoaW5kaW9fZGV2LCBBRElTMTYyNjBfU0xQX0NOVCwgdmFsKTsKIAlpZiAocmV0KQotCQlkZXZfZXJyKGRldiwgInByb2JsZW0gd2l0aCB0dXJuaW5nIGRldmljZSBvZmY6IFNMUF9DTlQiKTsKKwkJZGV2X2VycigmaW5kaW9fZGV2LT5kZXYsICJwcm9ibGVtIHdpdGggdHVybmluZyBkZXZpY2Ugb2ZmOiBTTFBfQ05UIik7CiAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGFkaXMxNjI2MF9zZWxmX3Rlc3Qoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBhZGlzMTYyNjBfc2VsZl90ZXN0KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCiB7CiAJaW50IHJldDsKLQlyZXQgPSBhZGlzMTYyNjBfc3BpX3dyaXRlX3JlZ18xNihkZXYsCisJcmV0ID0gYWRpczE2MjYwX3NwaV93cml0ZV9yZWdfMTYoaW5kaW9fZGV2LAogCQkJQURJUzE2MjYwX01TQ19DVFJMLAogCQkJQURJUzE2MjYwX01TQ19DVFJMX01FTV9URVNUKTsKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoZGV2LCAicHJvYmxlbSBzdGFydGluZyBzZWxmIHRlc3QiKTsKKwkJZGV2X2VycigmaW5kaW9fZGV2LT5kZXYsICJwcm9ibGVtIHN0YXJ0aW5nIHNlbGYgdGVzdCIpOwogCQlnb3RvIGVycl9yZXQ7CiAJfQogCi0JYWRpczE2MjYwX2NoZWNrX3N0YXR1cyhkZXYpOworCWFkaXMxNjI2MF9jaGVja19zdGF0dXMoaW5kaW9fZGV2KTsKIAogZXJyX3JldDoKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGFkaXMxNjI2MF9jaGVja19zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBhZGlzMTYyNjBfY2hlY2tfc3RhdHVzKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCiB7CiAJdTE2IHN0YXR1czsKIAlpbnQgcmV0OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpbmRpb19kZXYtPmRldjsKIAotCXJldCA9IGFkaXMxNjI2MF9zcGlfcmVhZF9yZWdfMTYoZGV2LCBBRElTMTYyNjBfRElBR19TVEFULCAmc3RhdHVzKTsKKwlyZXQgPSBhZGlzMTYyNjBfc3BpX3JlYWRfcmVnXzE2KGluZGlvX2RldiwKKwkJCQkJQURJUzE2MjYwX0RJQUdfU1RBVCwKKwkJCQkJJnN0YXR1cyk7CiAKIAlpZiAocmV0IDwgMCkgewogCQlkZXZfZXJyKGRldiwgIlJlYWRpbmcgc3RhdHVzIGZhaWxlZFxuIik7CkBAIC00NDMsMTMwICszMzcsMjQwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBhZGlzMTYyNjBfaW5pdGlhbF9zZXR1cChzdHJ1Y3QgYWRpczE2MjYwX3N0YXRlICpzdCkKK3N0YXRpYyBpbnQgYWRpczE2MjYwX2luaXRpYWxfc2V0dXAoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKIAlpbnQgcmV0OwotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZzdC0+aW5kaW9fZGV2LT5kZXY7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmluZGlvX2Rldi0+ZGV2OwogCiAJLyogRGlzYWJsZSBJUlEgKi8KLQlyZXQgPSBhZGlzMTYyNjBfc2V0X2lycShkZXYsIGZhbHNlKTsKKwlyZXQgPSBhZGlzMTYyNjBfc2V0X2lycShpbmRpb19kZXYsIGZhbHNlKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoZGV2LCAiZGlzYWJsZSBpcnEgZmFpbGVkIik7CiAJCWdvdG8gZXJyX3JldDsKIAl9CiAKIAkvKiBEbyBzZWxmIHRlc3QgKi8KLQlyZXQgPSBhZGlzMTYyNjBfc2VsZl90ZXN0KGRldik7CisJcmV0ID0gYWRpczE2MjYwX3NlbGZfdGVzdChpbmRpb19kZXYpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycihkZXYsICJzZWxmIHRlc3QgZmFpbHVyZSIpOwogCQlnb3RvIGVycl9yZXQ7CiAJfQogCiAJLyogUmVhZCBzdGF0dXMgcmVnaXN0ZXIgdG8gY2hlY2sgdGhlIHJlc3VsdCAqLwotCXJldCA9IGFkaXMxNjI2MF9jaGVja19zdGF0dXMoZGV2KTsKKwlyZXQgPSBhZGlzMTYyNjBfY2hlY2tfc3RhdHVzKGluZGlvX2Rldik7CiAJaWYgKHJldCkgewotCQlhZGlzMTYyNjBfcmVzZXQoZGV2KTsKKwkJYWRpczE2MjYwX3Jlc2V0KGluZGlvX2Rldik7CiAJCWRldl9lcnIoZGV2LCAiZGV2aWNlIG5vdCBwbGF5aW5nIGJhbGwgLT4gcmVzZXQiKTsKIAkJbXNsZWVwKEFESVMxNjI2MF9TVEFSVFVQX0RFTEFZKTsKLQkJcmV0ID0gYWRpczE2MjYwX2NoZWNrX3N0YXR1cyhkZXYpOworCQlyZXQgPSBhZGlzMTYyNjBfY2hlY2tfc3RhdHVzKGluZGlvX2Rldik7CiAJCWlmIChyZXQpIHsKIAkJCWRldl9lcnIoZGV2LCAiZ2l2aW5nIHVwIik7CiAJCQlnb3RvIGVycl9yZXQ7CiAJCX0KIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICI6IGF0IENTJWQgKGlycSAlZClcbiIsCi0JCQlzdC0+dXMtPmNoaXBfc2VsZWN0LCBzdC0+dXMtPmlycSk7Ci0KIGVycl9yZXQ6CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIElJT19ERVZfQVRUUl9JTl9OQU1FRF9SQVcoMCwgc3VwcGx5LAotCQkJCWFkaXMxNjI2MF9yZWFkXzEyYml0X3Vuc2lnbmVkLAotCQkJCUFESVMxNjI2MF9TVVBQTFlfT1VUKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUl9JTl9OQU1FRF9TQ0FMRSgwLCBzdXBwbHksICIwLjAwMTgzMTUiKTsKLQotc3RhdGljIElJT19ERVZfQVRUUl9URU1QX1JBVyhhZGlzMTYyNjBfcmVhZF8xMmJpdF91bnNpZ25lZCk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfVEVNUF9PRkZTRVQoIjI1Iik7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfVEVNUF9TQ0FMRSgiMC4xNDUzIik7Ci0KLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDEsIGFkaXMxNjI2MF9yZWFkXzEyYml0X3Vuc2lnbmVkLAotCQlBRElTMTYyNjBfQVVYX0FEQyk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFIoaW4xX3NjYWxlLCAiMC4wMDA2MTA1Iik7Ci0KIHN0YXRpYyBJSU9fREVWX0FUVFJfU0FNUF9GUkVRKFNfSVdVU1IgfCBTX0lSVUdPLAogCQlhZGlzMTYyNjBfcmVhZF9mcmVxdWVuY3ksCiAJCWFkaXMxNjI2MF93cml0ZV9mcmVxdWVuY3kpOwogCiBzdGF0aWMgSUlPX0RFVklDRV9BVFRSKHJlc2V0LCBTX0lXVVNSLCBOVUxMLCBhZGlzMTYyNjBfd3JpdGVfcmVzZXQsIDApOwogCi0KIHN0YXRpYyBJSU9fREVWSUNFX0FUVFIoc2FtcGxpbmdfZnJlcXVlbmN5X2F2YWlsYWJsZSwKIAkJICAgICAgIFNfSVJVR08sIGFkaXMxNjI2MF9yZWFkX2ZyZXF1ZW5jeV9hdmFpbGFibGUsIE5VTEwsIDApOwogCi1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfTkFNRSgiYWRpczE2MjYwIik7CitlbnVtIGFkaXMxNjI2MF9jaGFubmVsIHsKKwlneXJvLAorCXRlbXAsCisJaW5fc3VwcGx5LAorCWluX2F1eCwKKwlhbmdsZSwKK307CisjZGVmaW5lIEFESVMxNjI2MF9HWVJPX0NIQU5ORUxfU0VUKGF4aXMsIG1vZCkJCQkJXAorCXN0cnVjdCBpaW9fY2hhbl9zcGVjIGFkaXMxNjI2MF9jaGFubmVsc18jI2F4aXNbXSA9IHsJCVwKKwkJSUlPX0NIQU4oSUlPX0dZUk8sIDEsIDAsIDAsIE5VTEwsIDAsIG1vZCwJCVwKKwkJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX0NBTElCQklBU19TRVBBUkFURSkgfAlcCisJCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19DQUxJQlNDQUxFX1NFUEFSQVRFKSB8CVwKKwkJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NFUEFSQVRFKSwJCVwKKwkJCSBneXJvLCBBRElTMTYyNjBfU0NBTl9HWVJPLAkJCVwKKwkJCSBJSU9fU1QoJ3MnLCAxNCwgMTYsIDApLCAwKSwJCQlcCisJCUlJT19DSEFOKElJT19BTkdMLCAxLCAwLCAwLCBOVUxMLCAwLCBtb2QsCQlcCisJCQkgMCwJCQkJCQlcCisJCQkgYW5nbGUsIEFESVMxNjI2MF9TQ0FOX0FOR0wsCQkJXAorCQkJIElJT19TVCgndScsIDE0LCAxNiwgMCksIDApLAkJCVwKKwkJSUlPX0NIQU4oSUlPX1RFTVAsIDAsIDEsIDAsIE5VTEwsIDAsIDAsCQkJXAorCQkJICgxIDw8IElJT19DSEFOX0lORk9fT0ZGU0VUX1NFUEFSQVRFKSB8CQlcCisJCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TRVBBUkFURSksCQlcCisJCQkgdGVtcCwgQURJUzE2MjYwX1NDQU5fVEVNUCwJCQlcCisJCQkgSUlPX1NUKCd1JywgMTIsIDE2LCAwKSwgMCksCQkJXAorCQlJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsICJzdXBwbHkiLCAwLCAwLAkJXAorCQkJICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0VQQVJBVEUpLAkJXAorCQkJIGluX3N1cHBseSwgQURJUzE2MjYwX1NDQU5fU1VQUExZLAkJXAorCQkJIElJT19TVCgndScsIDEyLCAxNiwgMCksIDApLAkJCVwKKwkJSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCBOVUxMLCAxLCAwLAkJCVwKKwkJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NFUEFSQVRFKSwJCVwKKwkJCSBpbl9hdXgsIEFESVMxNjI2MF9TQ0FOX0FVWF9BREMsCQlcCisJCQkgSUlPX1NUKCd1JywgMTIsIDE2LCAwKSwgMCksCQkJXAorCQlJSU9fQ0hBTl9TT0ZUX1RJTUVTVEFNUCg1KQkJCQlcCisJfQogCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWRpczE2MjYwX2V2ZW50X2F0dHJpYnV0ZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBBRElTMTYyNjBfR1lST19DSEFOTkVMX1NFVCh4LCBJSU9fTU9EX1gpOworc3RhdGljIGNvbnN0IEFESVMxNjI2MF9HWVJPX0NIQU5ORUxfU0VUKHksIElJT19NT0RfWSk7CitzdGF0aWMgY29uc3QgQURJUzE2MjYwX0dZUk9fQ0hBTk5FTF9TRVQoeiwgSUlPX01PRF9aKTsKKworc3RhdGljIGNvbnN0IHU4IGFkaXMxNjI2MF9hZGRyZXNzZXNbNV1bM10gPSB7CisJW2d5cm9dID0geyBBRElTMTYyNjBfR1lST19PVVQsCisJCSAgIEFESVMxNjI2MF9HWVJPX09GRiwKKwkJICAgQURJUzE2MjYwX0dZUk9fU0NBTEUgfSwKKwlbYW5nbGVdID0geyBBRElTMTYyNjBfQU5HTF9PVVQgfSwKKwlbaW5fc3VwcGx5XSA9IHsgQURJUzE2MjYwX1NVUFBMWV9PVVQgfSwKKwlbaW5fYXV4XSA9IHsgQURJUzE2MjYwX0FVWF9BREMgfSwKKwlbdGVtcF0gPSB7IEFESVMxNjI2MF9URU1QX09VVCB9LAorfTsKK3N0YXRpYyBpbnQgYWRpczE2MjYwX3JlYWRfcmF3KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCisJCQkgICAgICBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbiwKKwkJCSAgICAgIGludCAqdmFsLCBpbnQgKnZhbDIsCisJCQkgICAgICBsb25nIG1hc2spCit7CisJc3RydWN0IGFkaXMxNjI2MF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CisJaW50IHJldDsKKwlpbnQgYml0czsKKwl1OCBhZGRyOworCXMxNiB2YWwxNjsKKworCXN3aXRjaCAobWFzaykgeworCWNhc2UgMDoKKwkJbXV0ZXhfbG9jaygmaW5kaW9fZGV2LT5tbG9jayk7CisJCWFkZHIgPSBhZGlzMTYyNjBfYWRkcmVzc2VzW2NoYW4tPmFkZHJlc3NdWzBdOworCQlyZXQgPSBhZGlzMTYyNjBfc3BpX3JlYWRfcmVnXzE2KGluZGlvX2RldiwgYWRkciwgJnZhbDE2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJaWYgKHZhbDE2ICYgQURJUzE2MjYwX0VSUk9SX0FDVElWRSkgeworCQkJcmV0ID0gYWRpczE2MjYwX2NoZWNrX3N0YXR1cyhpbmRpb19kZXYpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJCXZhbDE2ID0gdmFsMTYgJiAoKDEgPDwgY2hhbi0+c2Nhbl90eXBlLnJlYWxiaXRzKSAtIDEpOworCQlpZiAoY2hhbi0+c2Nhbl90eXBlLnNpZ24gPT0gJ3MnKQorCQkJdmFsMTYgPSAoczE2KSh2YWwxNiA8PAorCQkJCSAgICAgICgxNiAtIGNoYW4tPnNjYW5fdHlwZS5yZWFsYml0cykpID4+CisJCQkJKDE2IC0gY2hhbi0+c2Nhbl90eXBlLnJlYWxiaXRzKTsKKwkJKnZhbCA9IHZhbDE2OworCQltdXRleF91bmxvY2soJmluZGlvX2Rldi0+bWxvY2spOworCQlyZXR1cm4gSUlPX1ZBTF9JTlQ7CisJY2FzZSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NFUEFSQVRFKToKKwljYXNlICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKToKKwkJc3dpdGNoIChjaGFuLT50eXBlKSB7CisJCWNhc2UgSUlPX0dZUk86CisJCQkqdmFsID0gMDsKKwkJCWlmIChzcGlfZ2V0X2RldmljZV9pZChzdC0+dXMpLT5kcml2ZXJfZGF0YSkKKwkJCQkqdmFsMiA9IDMyMDsKKwkJCWVsc2UKKwkJCQkqdmFsMiA9IDEyNzg7CisJCQlyZXR1cm4gSUlPX1ZBTF9JTlRfUExVU19NSUNSTzsKKwkJY2FzZSBJSU9fSU46CisJCQkqdmFsID0gMDsKKwkJCWlmIChjaGFuLT5jaGFubmVsID09IDApCisJCQkJKnZhbDIgPSAxODMxNTsKKwkJCWVsc2UKKwkJCQkqdmFsMiA9IDYxMDUwMDsKKwkJCXJldHVybiBJSU9fVkFMX0lOVF9QTFVTX01JQ1JPOworCQljYXNlIElJT19URU1QOgorCQkJKnZhbCA9IDA7CisJCQkqdmFsMiA9IDE0NTMwMDsKKwkJCXJldHVybiBJSU9fVkFMX0lOVF9QTFVTX01JQ1JPOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAoMSA8PCBJSU9fQ0hBTl9JTkZPX09GRlNFVF9TRVBBUkFURSk6CisJCSp2YWwgPSAyNTsKKwkJcmV0dXJuIElJT19WQUxfSU5UOworCWNhc2UgKDEgPDwgSUlPX0NIQU5fSU5GT19DQUxJQkJJQVNfU0VQQVJBVEUpOgorCQlzd2l0Y2ggKGNoYW4tPnR5cGUpIHsKKwkJY2FzZSBJSU9fR1lSTzoKKwkJCWJpdHMgPSAxMjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX07CisJCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOworCQlhZGRyID0gYWRpczE2MjYwX2FkZHJlc3Nlc1tjaGFuLT5hZGRyZXNzXVsxXTsKKwkJcmV0ID0gYWRpczE2MjYwX3NwaV9yZWFkX3JlZ18xNihpbmRpb19kZXYsIGFkZHIsICZ2YWwxNik7CisJCWlmIChyZXQpIHsKKwkJCW11dGV4X3VubG9jaygmaW5kaW9fZGV2LT5tbG9jayk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCXZhbDE2ICY9ICgxIDw8IGJpdHMpIC0gMTsKKwkJdmFsMTYgPSAoczE2KSh2YWwxNiA8PCAoMTYgLSBiaXRzKSkgPj4gKDE2IC0gYml0cyk7CisJCSp2YWwgPSB2YWwxNjsKKwkJbXV0ZXhfdW5sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKKwkJcmV0dXJuIElJT19WQUxfSU5UOworCWNhc2UgKDEgPDwgSUlPX0NIQU5fSU5GT19DQUxJQlNDQUxFX1NFUEFSQVRFKToKKwkJc3dpdGNoIChjaGFuLT50eXBlKSB7CisJCWNhc2UgSUlPX0dZUk86CisJCQliaXRzID0gMTI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9OworCQltdXRleF9sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKKwkJYWRkciA9IGFkaXMxNjI2MF9hZGRyZXNzZXNbY2hhbi0+YWRkcmVzc11bMl07CisJCXJldCA9IGFkaXMxNjI2MF9zcGlfcmVhZF9yZWdfMTYoaW5kaW9fZGV2LCBhZGRyLCAmdmFsMTYpOworCQlpZiAocmV0KSB7CisJCQltdXRleF91bmxvY2soJmluZGlvX2Rldi0+bWxvY2spOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQkqdmFsID0gKDEgPDwgYml0cykgLSAxOworCQltdXRleF91bmxvY2soJmluZGlvX2Rldi0+bWxvY2spOworCQlyZXR1cm4gSUlPX1ZBTF9JTlQ7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IGFkaXMxNjI2MF93cml0ZV9yYXcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKKwkJCSAgICAgICBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbiwKKwkJCSAgICAgICBpbnQgdmFsLAorCQkJICAgICAgIGludCB2YWwyLAorCQkJICAgICAgIGxvbmcgbWFzaykKK3sKKwlpbnQgYml0cyA9IDEyOworCXMxNiB2YWwxNjsKKwl1OCBhZGRyOworCXN3aXRjaCAobWFzaykgeworCWNhc2UgKDEgPDwgSUlPX0NIQU5fSU5GT19DQUxJQkJJQVNfU0VQQVJBVEUpOgorCQl2YWwxNiA9IHZhbCAmICgoMSA8PCBiaXRzKSAtIDEpOworCQlhZGRyID0gYWRpczE2MjYwX2FkZHJlc3Nlc1tjaGFuLT5hZGRyZXNzXVsxXTsKKwkJcmV0dXJuIGFkaXMxNjI2MF9zcGlfd3JpdGVfcmVnXzE2KGluZGlvX2RldiwgYWRkciwgdmFsMTYpOworCWNhc2UgKDEgPDwgSUlPX0NIQU5fSU5GT19DQUxJQlNDQUxFX1NFUEFSQVRFKToKKwkJdmFsMTYgPSB2YWwgJiAoKDEgPDwgYml0cykgLSAxKTsKKwkJYWRkciA9IGFkaXMxNjI2MF9hZGRyZXNzZXNbY2hhbi0+YWRkcmVzc11bMl07CisJCXJldHVybiBhZGlzMTYyNjBfc3BpX3dyaXRlX3JlZ18xNihpbmRpb19kZXYsIGFkZHIsIHZhbDE2KTsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZGlzMTYyNjBfYXR0cmlidXRlc1tdID0geworCSZpaW9fZGV2X2F0dHJfc2FtcGxpbmdfZnJlcXVlbmN5LmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9zYW1wbGluZ19mcmVxdWVuY3lfYXZhaWxhYmxlLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9yZXNldC5kZXZfYXR0ci5hdHRyLAogCU5VTEwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFkaXMxNjI2MF9ldmVudF9hdHRyaWJ1dGVfZ3JvdXAgPSB7Ci0JLmF0dHJzID0gYWRpczE2MjYwX2V2ZW50X2F0dHJpYnV0ZXMsCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZGlzMTYyNjBfYXR0cmlidXRlX2dyb3VwID0geworCS5hdHRycyA9IGFkaXMxNjI2MF9hdHRyaWJ1dGVzLAogfTsKIAotI2RlZmluZSBBRElTMTYyNjBfR1lST19BVFRSX1NFVChheGlzKQkJCQkJXAotCUlJT19ERVZfQVRUUl9HWVJPIyNheGlzKGFkaXMxNjI2MF9yZWFkXzE0Yml0X3NpZ25lZCwJCVwKLQkJCQlBRElTMTYyNjBfR1lST19PVVQpOwkJCVwKLQlzdGF0aWMgSUlPX0RFVl9BVFRSX0dZUk8jI2F4aXMjI19TQ0FMRShTX0lSVUdPLAkJCVwKLQkJCQkJYWRpczE2MjYwX3JlYWRfZ3lyb19zY2FsZSwJXAotCQkJCQlOVUxMLAkJCQlcCi0JCQkJCTApOwkJCQlcCi0Jc3RhdGljIElJT19ERVZfQVRUUl9HWVJPIyNheGlzIyNfQ0FMSUJTQ0FMRShTX0lSVUdPIHwgU19JV1VTUiwJXAotCQkJCQlhZGlzMTYyNjBfcmVhZF8xMmJpdF91bnNpZ25lZCwJXAotCQkJCQlhZGlzMTYyNjBfd3JpdGVfMTZiaXQsCQlcCi0JCQkJCUFESVMxNjI2MF9HWVJPX1NDQUxFKTsJCVwKLQlzdGF0aWMgSUlPX0RFVl9BVFRSX0dZUk8jI2F4aXMjI19DQUxJQkJJQVMoU19JV1VTUiB8IFNfSVJVR08sCVwKLQkJCQkJYWRpczE2MjYwX3JlYWRfMTJiaXRfc2lnbmVkLAlcCi0JCQkJCWFkaXMxNjI2MF93cml0ZV8xNmJpdCwJCVwKLQkJCQkJQURJUzE2MjYwX0dZUk9fT0ZGKTsJCVwKLQlzdGF0aWMgSUlPX0RFVl9BVFRSX0FOR0wjI2F4aXMoYWRpczE2MjYwX3JlYWRfMTRiaXRfc2lnbmVkLAlcCi0JCQkJICAgICAgIEFESVMxNjI2MF9BTkdMX09VVCk7Ci0KLXN0YXRpYyBBRElTMTYyNjBfR1lST19BVFRSX1NFVCgpOwotc3RhdGljIEFESVMxNjI2MF9HWVJPX0FUVFJfU0VUKF9YKTsKLXN0YXRpYyBBRElTMTYyNjBfR1lST19BVFRSX1NFVChfWSk7Ci1zdGF0aWMgQURJUzE2MjYwX0dZUk9fQVRUUl9TRVQoX1opOwotCi0jZGVmaW5lIEFESVMxNjI2MF9BVFRSX0dST1VQKGF4aXMpCQkJCQlcCi0Jc3RydWN0IGF0dHJpYnV0ZSAqYWRpczE2MjYwX2F0dHJpYnV0ZXMjI2F4aXNbXSA9IHsJCVwKLQkJJmlpb19kZXZfYXR0cl9pbjBfc3VwcGx5X3Jhdy5kZXZfYXR0ci5hdHRyLAkJXAotCQkmaWlvX2NvbnN0X2F0dHJfaW4wX3N1cHBseV9zY2FsZS5kZXZfYXR0ci5hdHRyLAkJXAotCQkmaWlvX2Rldl9hdHRyX2d5cm8jI2F4aXMjI19yYXcuZGV2X2F0dHIuYXR0ciwJCVwKLQkJJmlpb19kZXZfYXR0cl9neXJvIyNheGlzIyNfc2NhbGUuZGV2X2F0dHIuYXR0ciwJCVwKLQkJJmlpb19kZXZfYXR0cl9neXJvIyNheGlzIyNfY2FsaWJzY2FsZS5kZXZfYXR0ci5hdHRyLAlcCi0JCSZpaW9fZGV2X2F0dHJfZ3lybyMjYXhpcyMjX2NhbGliYmlhcy5kZXZfYXR0ci5hdHRyLAlcCi0JCSZpaW9fZGV2X2F0dHJfYW5nbCMjYXhpcyMjX3Jhdy5kZXZfYXR0ci5hdHRyLAkJXAotCQkmaWlvX2Rldl9hdHRyX3RlbXBfcmF3LmRldl9hdHRyLmF0dHIsCQkJXAotCQkmaWlvX2NvbnN0X2F0dHJfdGVtcF9vZmZzZXQuZGV2X2F0dHIuYXR0ciwJCVwKLQkJJmlpb19jb25zdF9hdHRyX3RlbXBfc2NhbGUuZGV2X2F0dHIuYXR0ciwJCVwKLQkJJmlpb19kZXZfYXR0cl9pbjFfcmF3LmRldl9hdHRyLmF0dHIsCQkJXAotCQkmaWlvX2NvbnN0X2F0dHJfaW4xX3NjYWxlLmRldl9hdHRyLmF0dHIsCQlcCi0JCSZpaW9fZGV2X2F0dHJfc2FtcGxpbmdfZnJlcXVlbmN5LmRldl9hdHRyLmF0dHIsCQlcCi0JCSZpaW9fZGV2X2F0dHJfc2FtcGxpbmdfZnJlcXVlbmN5X2F2YWlsYWJsZS5kZXZfYXR0ci5hdHRyLCBcCi0JCSZpaW9fZGV2X2F0dHJfcmVzZXQuZGV2X2F0dHIuYXR0ciwJCQlcCi0JCSZpaW9fY29uc3RfYXR0cl9uYW1lLmRldl9hdHRyLmF0dHIsCQkJXAotCQlOVUxMCQkJCQkJCVwKLQl9OwkJCQkJCQkJXAotCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFkaXMxNjI2MF9hdHRyaWJ1dGVfZ3JvdXAjI2F4aXMgXAotCT0gewkJCQkJCQkJXAotCQkuYXR0cnMgPSBhZGlzMTYyNjBfYXR0cmlidXRlcyMjYXhpcywJCQlcCi0JfTsKLQotc3RhdGljIEFESVMxNjI2MF9BVFRSX0dST1VQKCk7Ci1zdGF0aWMgQURJUzE2MjYwX0FUVFJfR1JPVVAoX3gpOwotc3RhdGljIEFESVMxNjI2MF9BVFRSX0dST1VQKF95KTsKLXN0YXRpYyBBRElTMTYyNjBfQVRUUl9HUk9VUChfeik7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIGFkaXMxNjI2MF9pbmZvID0geworCS5hdHRycyA9ICZhZGlzMTYyNjBfYXR0cmlidXRlX2dyb3VwLAorCS5yZWFkX3JhdyA9ICZhZGlzMTYyNjBfcmVhZF9yYXcsCisJLndyaXRlX3JhdyA9ICZhZGlzMTYyNjBfd3JpdGVfcmF3LAorCS5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEUsCit9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhZGlzMTYyNjBfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKQEAgLTU5NiwzNSArNjAwLDM1IEBACiAJc3QtPnVzID0gc3BpOwogCW11dGV4X2luaXQoJnN0LT5idWZfbG9jayk7CiAJLyogc2V0dXAgdGhlIGluZHVzdHJpYWxpbyBkcml2ZXIgYWxsb2NhdGVkIGVsZW1lbnRzICovCi0Jc3QtPmluZGlvX2RldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2UoKTsKKwlzdC0+aW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgwKTsKIAlpZiAoc3QtPmluZGlvX2RldiA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3JfZnJlZV90eDsKIAl9CiAKKwlzdC0+aW5kaW9fZGV2LT5uYW1lID0gc3BpX2dldF9kZXZpY2VfaWQoc3QtPnVzKS0+bmFtZTsKIAlzdC0+aW5kaW9fZGV2LT5kZXYucGFyZW50ID0gJnNwaS0+ZGV2OwotCXN0LT5pbmRpb19kZXYtPm51bV9pbnRlcnJ1cHRfbGluZXMgPSAxOwotCXN0LT5pbmRpb19kZXYtPmV2ZW50X2F0dHJzID0gJmFkaXMxNjI2MF9ldmVudF9hdHRyaWJ1dGVfZ3JvdXA7CisJc3QtPmluZGlvX2Rldi0+aW5mbyA9ICZhZGlzMTYyNjBfaW5mbzsKKwlzdC0+aW5kaW9fZGV2LT5udW1fY2hhbm5lbHMKKwkJPSBBUlJBWV9TSVpFKGFkaXMxNjI2MF9jaGFubmVsc194KTsKIAlpZiAocGQgJiYgcGQtPmRpcmVjdGlvbikKIAkJc3dpdGNoIChwZC0+ZGlyZWN0aW9uKSB7CiAJCWNhc2UgJ3gnOgotCQkJc3QtPmluZGlvX2Rldi0+YXR0cnMgPSAmYWRpczE2MjYwX2F0dHJpYnV0ZV9ncm91cF94OworCQkJc3QtPmluZGlvX2Rldi0+Y2hhbm5lbHMgPSBhZGlzMTYyNjBfY2hhbm5lbHNfeDsKIAkJCWJyZWFrOwogCQljYXNlICd5JzoKLQkJCXN0LT5pbmRpb19kZXYtPmF0dHJzID0gJmFkaXMxNjI2MF9hdHRyaWJ1dGVfZ3JvdXBfeTsKKwkJCXN0LT5pbmRpb19kZXYtPmNoYW5uZWxzID0gYWRpczE2MjYwX2NoYW5uZWxzX3k7CiAJCQlicmVhazsKIAkJY2FzZSAneic6Ci0JCQlzdC0+aW5kaW9fZGV2LT5hdHRycyA9ICZhZGlzMTYyNjBfYXR0cmlidXRlX2dyb3VwX3o7CisJCQlzdC0+aW5kaW9fZGV2LT5jaGFubmVscyA9IGFkaXMxNjI2MF9jaGFubmVsc196OwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlzdC0+aW5kaW9fZGV2LT5hdHRycyA9ICZhZGlzMTYyNjBfYXR0cmlidXRlX2dyb3VwOwotCQkJYnJlYWs7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCWVsc2UKLQkJc3QtPmluZGlvX2Rldi0+YXR0cnMgPSAmYWRpczE2MjYwX2F0dHJpYnV0ZV9ncm91cDsKKwkJc3QtPmluZGlvX2Rldi0+Y2hhbm5lbHMgPSBhZGlzMTYyNjBfY2hhbm5lbHNfeDsKIAogCXN0LT5pbmRpb19kZXYtPmRldl9kYXRhID0gKHZvaWQgKikoc3QpOwotCXN0LT5pbmRpb19kZXYtPmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRTsKIAlzdC0+aW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOwogCiAJcmV0ID0gYWRpczE2MjYwX2NvbmZpZ3VyZV9yaW5nKHN0LT5pbmRpb19kZXYpOwpAQCAtNjM1LDM3ICs2MzksMjggQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycm9yX3VucmVnX3JpbmdfZnVuY3M7CiAJcmVnZG9uZSA9IDE7Ci0JcmV0ID0gaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyKHN0LT5pbmRpb19kZXYtPnJpbmcsIDApOworCXJldCA9IGlpb19yaW5nX2J1ZmZlcl9yZWdpc3Rlcl9leChzdC0+aW5kaW9fZGV2LT5yaW5nLCAwLAorCQkJCQkgIHN0LT5pbmRpb19kZXYtPmNoYW5uZWxzLAorCQkJCQkgIEFSUkFZX1NJWkUoYWRpczE2MjYwX2NoYW5uZWxzX3gpKTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGluaXRpYWxpemUgdGhlIHJpbmdcbiIpOwogCQlnb3RvIGVycm9yX3VucmVnX3JpbmdfZnVuY3M7CiAJfQogCiAJaWYgKHNwaS0+aXJxKSB7Ci0JCXJldCA9IGlpb19yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShzcGktPmlycSwKLQkJCQlzdC0+aW5kaW9fZGV2LAotCQkJCTAsCi0JCQkJSVJRRl9UUklHR0VSX1JJU0lORywKLQkJCQkiYWRpczE2MjYwIik7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIGVycm9yX3VuaW5pdGlhbGl6ZV9yaW5nOwotCiAJCXJldCA9IGFkaXMxNjI2MF9wcm9iZV90cmlnZ2VyKHN0LT5pbmRpb19kZXYpOwogCQlpZiAocmV0KQotCQkJZ290byBlcnJvcl91bnJlZ2lzdGVyX2xpbmU7CisJCQlnb3RvIGVycm9yX3VuaW5pdGlhbGl6ZV9yaW5nOwogCX0KIAogCS8qIEdldCB0aGUgZGV2aWNlIGludG8gYSBzYW5lIGluaXRpYWwgc3RhdGUgKi8KLQlyZXQgPSBhZGlzMTYyNjBfaW5pdGlhbF9zZXR1cChzdCk7CisJcmV0ID0gYWRpczE2MjYwX2luaXRpYWxfc2V0dXAoc3QtPmluZGlvX2Rldik7CiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl9yZW1vdmVfdHJpZ2dlcjsKIAlyZXR1cm4gMDsKIAogZXJyb3JfcmVtb3ZlX3RyaWdnZXI6CiAJYWRpczE2MjYwX3JlbW92ZV90cmlnZ2VyKHN0LT5pbmRpb19kZXYpOwotZXJyb3JfdW5yZWdpc3Rlcl9saW5lOgotCWlmIChzcGktPmlycSkKLQkJaWlvX3VucmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoc3QtPmluZGlvX2RldiwgMCk7CiBlcnJvcl91bmluaXRpYWxpemVfcmluZzoKIAlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihzdC0+aW5kaW9fZGV2LT5yaW5nKTsKIGVycm9yX3VucmVnX3JpbmdfZnVuY3M6CkBAIC02OTEsMTUgKzY4NiwxMyBAQAogCXN0cnVjdCBhZGlzMTYyNjBfc3RhdGUgKnN0ID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CiAJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHN0LT5pbmRpb19kZXY7CiAKLQlyZXQgPSBhZGlzMTYyNjBfc3RvcF9kZXZpY2UoJihpbmRpb19kZXYtPmRldikpOworCXJldCA9IGFkaXMxNjI2MF9zdG9wX2RldmljZShpbmRpb19kZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX3JldDsKIAogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKIAlhZGlzMTYyNjBfcmVtb3ZlX3RyaWdnZXIoaW5kaW9fZGV2KTsKLQlpZiAoc3BpLT5pcnEpCi0JCWlpb191bnJlZ2lzdGVyX2ludGVycnVwdF9saW5lKGluZGlvX2RldiwgMCk7CiAKIAlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihzdC0+aW5kaW9fZGV2LT5yaW5nKTsKIAlpaW9fZGV2aWNlX3VucmVnaXN0ZXIoaW5kaW9fZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9hZGlzMTYyNjBfcmluZy5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjI2MF9yaW5nLmMKaW5kZXggMjM0Mjg4OS4uYTA5MjUwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjI2MF9yaW5nLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjI2MF9yaW5nLmMKQEAgLTE3LDU3ICsxNyw2IEBACiAjaW5jbHVkZSAiLi4vdHJpZ2dlci5oIgogI2luY2x1ZGUgImFkaXMxNjI2MC5oIgogCi1zdGF0aWMgSUlPX1NDQU5fRUxfQyhpbl9zdXBwbHksIEFESVMxNjI2MF9TQ0FOX1NVUFBMWSwKLQkJQURJUzE2MjYwX1NVUFBMWV9PVVQsIE5VTEwpOwotc3RhdGljIElJT19DT05TVF9BVFRSX1NDQU5fRUxfVFlQRShpbl9zdXBwbHksIHUsIDEyLCAxNik7Ci1zdGF0aWMgSUlPX1NDQU5fRUxfQyhneXJvLCBBRElTMTYyNjBfU0NBTl9HWVJPLCBBRElTMTYyNjBfR1lST19PVVQsIE5VTEwpOwotc3RhdGljIElJT19DT05TVF9BVFRSX1NDQU5fRUxfVFlQRShneXJvLCBzLCAxNCwgMTYpOwotc3RhdGljIElJT19TQ0FOX0VMX0MoaW4wLCBBRElTMTYyNjBfU0NBTl9BVVhfQURDLCBBRElTMTYyNjBfQVVYX0FEQywgTlVMTCk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfU0NBTl9FTF9UWVBFKGluMCwgdSwgMTIsIDE2KTsKLXN0YXRpYyBJSU9fU0NBTl9FTF9DKHRlbXAsIEFESVMxNjI2MF9TQ0FOX1RFTVAsIEFESVMxNjI2MF9URU1QX09VVCwgTlVMTCk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfU0NBTl9FTF9UWVBFKHRlbXAsIHUsIDEyLCAxNik7Ci1zdGF0aWMgSUlPX1NDQU5fRUxfQyhhbmdsLCBBRElTMTYyNjBfU0NBTl9BTkdMLCBBRElTMTYyNjBfQU5HTF9PVVQsIE5VTEwpOwotc3RhdGljIElJT19DT05TVF9BVFRSX1NDQU5fRUxfVFlQRShhbmdsLCB1LCAxNCwgMTYpOwotc3RhdGljIElJT19TQ0FOX0VMX1RJTUVTVEFNUCg1KTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUl9TQ0FOX0VMX1RZUEUodGltZXN0YW1wLCBzLCA2NCwgNjQpOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWRpczE2MjYwX3NjYW5fZWxfYXR0cnNbXSA9IHsKLQkmaWlvX3NjYW5fZWxfaW5fc3VwcGx5LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luX3N1cHBseV9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbl9zdXBwbHlfdHlwZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9neXJvLmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2d5cm9faW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfZ3lyb190eXBlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2luMC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjBfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4wX3R5cGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfdGVtcC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl90ZW1wX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX3RlbXBfdHlwZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9hbmdsLmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2FuZ2xfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfYW5nbF90eXBlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX3RpbWVzdGFtcC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl90aW1lc3RhbXBfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfdGltZXN0YW1wX3R5cGUuZGV2X2F0dHIuYXR0ciwKLQlOVUxMLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYWRpczE2MjYwX3NjYW5fZWxfZ3JvdXAgPSB7Ci0JLmF0dHJzID0gYWRpczE2MjYwX3NjYW5fZWxfYXR0cnMsCi0JLm5hbWUgPSAic2Nhbl9lbGVtZW50cyIsCi19OwotCi0vKioKLSAqIGFkaXMxNjI2MF9wb2xsX2Z1bmNfdGgoKSB0b3AgaGFsZiBpbnRlcnJ1cHQgaGFuZGxlciBjYWxsZWQgYnkgdHJpZ2dlcgotICogQHByaXZhdGVfZGF0YToJaWlvX2RldgotICoqLwotc3RhdGljIHZvaWQgYWRpczE2MjYwX3BvbGxfZnVuY190aChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LCBzNjQgdGltZSkKLXsKLQlzdHJ1Y3QgYWRpczE2MjYwX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKLQlzdC0+bGFzdF90aW1lc3RhbXAgPSB0aW1lOwotCXNjaGVkdWxlX3dvcmsoJnN0LT53b3JrX3RyaWdnZXJfdG9fcmluZyk7Ci19CiAKIC8qKgogICogYWRpczE2MjYwX3JlYWRfcmluZ19kYXRhKCkgcmVhZCBkYXRhIHJlZ2lzdGVycyB3aGljaCB3aWxsIGJlIHBsYWNlZCBpbnRvIHJpbmcKQEAgLTExNyw1NiArNjYsNTUgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0KLXN0YXRpYyB2b2lkIGFkaXMxNjI2MF90cmlnZ2VyX2JoX3RvX3Jpbmcoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrX3MpCitzdGF0aWMgaXJxcmV0dXJuX3QgYWRpczE2MjYwX3RyaWdnZXJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpwKQogewotCXN0cnVjdCBhZGlzMTYyNjBfc3RhdGUgKnN0Ci0JCT0gY29udGFpbmVyX29mKHdvcmtfcywgc3RydWN0IGFkaXMxNjI2MF9zdGF0ZSwKLQkJCQl3b3JrX3RyaWdnZXJfdG9fcmluZyk7Ci0Jc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyA9IHN0LT5pbmRpb19kZXYtPnJpbmc7Ci0KKwlzdHJ1Y3QgaWlvX3BvbGxfZnVuYyAqcGYgPSBwOworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBwZi0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhZGlzMTYyNjBfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOworCXN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcgPSBpbmRpb19kZXYtPnJpbmc7CiAJaW50IGkgPSAwOwogCXMxNiAqZGF0YTsKLQlzaXplX3QgZGF0YXNpemUgPSByaW5nLT5hY2Nlc3MuZ2V0X2J5dGVzX3Blcl9kYXR1bShyaW5nKTsKKwlzaXplX3QgZGF0YXNpemUgPSByaW5nLT5hY2Nlc3MtPmdldF9ieXRlc19wZXJfZGF0dW0ocmluZyk7CiAKIAlkYXRhID0ga21hbGxvYyhkYXRhc2l6ZSAsIEdGUF9LRVJORUwpOwogCWlmIChkYXRhID09IE5VTEwpIHsKIAkJZGV2X2Vycigmc3QtPnVzLT5kZXYsICJtZW1vcnkgYWxsb2MgZmFpbGVkIGluIHJpbmcgYmgiKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlpZiAocmluZy0+c2Nhbl9jb3VudCkKLQkJaWYgKGFkaXMxNjI2MF9yZWFkX3JpbmdfZGF0YSgmc3QtPmluZGlvX2Rldi0+ZGV2LCBzdC0+cngpID49IDApCi0JCQlmb3IgKDsgaSA8IHJpbmctPnNjYW5fY291bnQ7IGkrKykKLQkJCQlkYXRhW2ldID0gYmUxNl90b19jcHVwKAotCQkJCQkoX19iZTE2ICopJihzdC0+cnhbaSoyXSkpOworCWlmIChyaW5nLT5zY2FuX2NvdW50ICYmCisJICAgIGFkaXMxNjI2MF9yZWFkX3JpbmdfZGF0YSgmc3QtPmluZGlvX2Rldi0+ZGV2LCBzdC0+cngpID49IDApCisJCWZvciAoOyBpIDwgcmluZy0+c2Nhbl9jb3VudDsgaSsrKQorCQkJZGF0YVtpXSA9IGJlMTZfdG9fY3B1cCgoX19iZTE2ICopJihzdC0+cnhbaSoyXSkpOwogCiAJLyogR3VhcmFudGVlZCB0byBiZSBhbGlnbmVkIHdpdGggOCBieXRlIGJvdW5kYXJ5ICovCiAJaWYgKHJpbmctPnNjYW5fdGltZXN0YW1wKQotCQkqKChzNjQgKikoZGF0YSArICgoaSArIDMpLzQpKjQpKSA9IHN0LT5sYXN0X3RpbWVzdGFtcDsKKwkJKigoczY0ICopKGRhdGEgKyAoKGkgKyAzKS80KSo0KSkgPSBwZi0+dGltZXN0YW1wOwogCi0JcmluZy0+YWNjZXNzLnN0b3JlX3RvKHJpbmcsCi0JCQkodTggKilkYXRhLAotCQkJc3QtPmxhc3RfdGltZXN0YW1wKTsKKwlyaW5nLT5hY2Nlc3MtPnN0b3JlX3RvKHJpbmcsICh1OCAqKWRhdGEsIHBmLT50aW1lc3RhbXApOwogCiAJaWlvX3RyaWdnZXJfbm90aWZ5X2RvbmUoc3QtPmluZGlvX2Rldi0+dHJpZyk7CiAJa2ZyZWUoZGF0YSk7CiAKLQlyZXR1cm47CisJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCiB2b2lkIGFkaXMxNjI2MF91bmNvbmZpZ3VyZV9yaW5nKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCiB7Ci0Ja2ZyZWUoaW5kaW9fZGV2LT5wb2xsZnVuYyk7CisJaWlvX2RlYWxsb2NfcG9sbGZ1bmMoaW5kaW9fZGV2LT5wb2xsZnVuYyk7CiAJaWlvX3N3X3JiX2ZyZWUoaW5kaW9fZGV2LT5yaW5nKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9fcmluZ19zZXR1cF9vcHMgYWRpczE2MjYwX3Jpbmdfc2V0dXBfb3BzID0geworCS5wcmVlbmFibGUgPSAmaWlvX3N3X3JpbmdfcHJlZW5hYmxlLAorCS5wb3N0ZW5hYmxlID0gJmlpb190cmlnZ2VyZWRfcmluZ19wb3N0ZW5hYmxlLAorCS5wcmVkaXNhYmxlID0gJmlpb190cmlnZ2VyZWRfcmluZ19wcmVkaXNhYmxlLAorfTsKKwogaW50IGFkaXMxNjI2MF9jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQogewogCWludCByZXQgPSAwOwotCXN0cnVjdCBhZGlzMTYyNjBfc3RhdGUgKnN0ID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKIAlzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nOwotCUlOSVRfV09SSygmc3QtPndvcmtfdHJpZ2dlcl90b19yaW5nLCBhZGlzMTYyNjBfdHJpZ2dlcl9iaF90b19yaW5nKTsKIAogCXJpbmcgPSBpaW9fc3dfcmJfYWxsb2NhdGUoaW5kaW9fZGV2KTsKIAlpZiAoIXJpbmcpIHsKQEAgLTE3NSwyNSArMTIzLDI5IEBACiAJfQogCWluZGlvX2Rldi0+cmluZyA9IHJpbmc7CiAJLyogRWZmZWN0aXZlbHkgc2VsZWN0IHRoZSByaW5nIGJ1ZmZlciBpbXBsZW1lbnRhdGlvbiAqLwotCWlpb19yaW5nX3N3X3JlZ2lzdGVyX2Z1bmNzKCZyaW5nLT5hY2Nlc3MpOworCXJpbmctPmFjY2VzcyA9ICZyaW5nX3N3X2FjY2Vzc19mdW5jczsKIAlyaW5nLT5icGUgPSAyOwotCXJpbmctPnNjYW5fZWxfYXR0cnMgPSAmYWRpczE2MjYwX3NjYW5fZWxfZ3JvdXA7CiAJcmluZy0+c2Nhbl90aW1lc3RhbXAgPSB0cnVlOwotCXJpbmctPnByZWVuYWJsZSA9ICZpaW9fc3dfcmluZ19wcmVlbmFibGU7Ci0JcmluZy0+cG9zdGVuYWJsZSA9ICZpaW9fdHJpZ2dlcmVkX3JpbmdfcG9zdGVuYWJsZTsKLQlyaW5nLT5wcmVkaXNhYmxlID0gJmlpb190cmlnZ2VyZWRfcmluZ19wcmVkaXNhYmxlOworCXJpbmctPnNldHVwX29wcyA9ICZhZGlzMTYyNjBfcmluZ19zZXR1cF9vcHM7CiAJcmluZy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCS8qIFNldCBkZWZhdWx0IHNjYW4gbW9kZSAqLwotCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIGlpb19zY2FuX2VsX2luX3N1cHBseS5udW1iZXIpOwotCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIGlpb19zY2FuX2VsX2d5cm8ubnVtYmVyKTsKLQlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCBpaW9fc2Nhbl9lbF9pbjAubnVtYmVyKTsKLQlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCBpaW9fc2Nhbl9lbF90ZW1wLm51bWJlcik7Ci0JaWlvX3NjYW5fbWFza19zZXQocmluZywgaWlvX3NjYW5fZWxfYW5nbC5udW1iZXIpOworCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIEFESVMxNjI2MF9TQ0FOX1NVUFBMWSk7CisJaWlvX3NjYW5fbWFza19zZXQocmluZywgQURJUzE2MjYwX1NDQU5fR1lSTyk7CisJaWlvX3NjYW5fbWFza19zZXQocmluZywgQURJUzE2MjYwX1NDQU5fQVVYX0FEQyk7CisJaWlvX3NjYW5fbWFza19zZXQocmluZywgQURJUzE2MjYwX1NDQU5fVEVNUCk7CisJaWlvX3NjYW5fbWFza19zZXQocmluZywgQURJUzE2MjYwX1NDQU5fQU5HTCk7CiAKLQlyZXQgPSBpaW9fYWxsb2NfcG9sbGZ1bmMoaW5kaW9fZGV2LCBOVUxMLCAmYWRpczE2MjYwX3BvbGxfZnVuY190aCk7Ci0JaWYgKHJldCkKKwlpbmRpb19kZXYtPnBvbGxmdW5jID0gaWlvX2FsbG9jX3BvbGxmdW5jKCZpaW9fcG9sbGZ1bmNfc3RvcmVfdGltZSwKKwkJCQkJCSAmYWRpczE2MjYwX3RyaWdnZXJfaGFuZGxlciwKKwkJCQkJCSBJUlFGX09ORVNIT1QsCisJCQkJCQkgaW5kaW9fZGV2LAorCQkJCQkJICJhZGlzMTYyNjBfY29uc3VtZXIlZCIsCisJCQkJCQkgaW5kaW9fZGV2LT5pZCk7CisJaWYgKGluZGlvX2Rldi0+cG9sbGZ1bmMgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX2lpb19zd19yYl9mcmVlOworCX0KIAogCWluZGlvX2Rldi0+bW9kZXMgfD0gSU5ESU9fUklOR19UUklHR0VSRUQ7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vYWRpczE2MjYwX3RyaWdnZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9hZGlzMTYyNjBfdHJpZ2dlci5jCmluZGV4IDRhNzQ0YzEuLjRmMTBmYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9hZGlzMTYyNjBfdHJpZ2dlci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9hZGlzMTYyNjBfdHJpZ2dlci5jCkBAIC0xMywzNSArMTMsNiBAQAogI2luY2x1ZGUgImFkaXMxNjI2MC5oIgogCiAvKioKLSAqIGFkaXMxNjI2MF9kYXRhX3JkeV90cmlnX3BvbGwoKSB0aGUgZXZlbnQgaGFuZGxlciBmb3IgdGhlIGRhdGEgcmR5IHRyaWcKLSAqKi8KLXN0YXRpYyBpbnQgYWRpczE2MjYwX2RhdGFfcmR5X3RyaWdfcG9sbChzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8sCi0JCQkJICAgICAgIGludCBpbmRleCwKLQkJCQkgICAgICAgczY0IHRpbWVzdGFtcCwKLQkJCQkgICAgICAgaW50IG5vX3Rlc3QpCi17Ci0Jc3RydWN0IGFkaXMxNjI2MF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGRldl9pbmZvKTsKLQlzdHJ1Y3QgaWlvX3RyaWdnZXIgKnRyaWcgPSBzdC0+dHJpZzsKLQotCWlpb190cmlnZ2VyX3BvbGwodHJpZywgdGltZXN0YW1wKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotSUlPX0VWRU5UX1NIKGRhdGFfcmR5X3RyaWcsICZhZGlzMTYyNjBfZGF0YV9yZHlfdHJpZ19wb2xsKTsKLQotc3RhdGljIElJT19UUklHR0VSX05BTUVfQVRUUjsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkaXMxNjI2MF90cmlnZ2VyX2F0dHJzW10gPSB7Ci0JJmRldl9hdHRyX25hbWUuYXR0ciwKLQlOVUxMLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYWRpczE2MjYwX3RyaWdnZXJfYXR0cl9ncm91cCA9IHsKLQkuYXR0cnMgPSBhZGlzMTYyNjBfdHJpZ2dlcl9hdHRycywKLX07Ci0KLS8qKgogICogYWRpczE2MjYwX2RhdGFfcmR5X3RyaWdnZXJfc2V0X3N0YXRlKCkgc2V0IGRhdGFyZHkgaW50ZXJydXB0IHN0YXRlCiAgKiovCiBzdGF0aWMgaW50IGFkaXMxNjI2MF9kYXRhX3JkeV90cmlnZ2VyX3NldF9zdGF0ZShzdHJ1Y3QgaWlvX3RyaWdnZXIgKnRyaWcsCkBAIC00OSwzMSArMjAsOSBAQAogewogCXN0cnVjdCBhZGlzMTYyNjBfc3RhdGUgKnN0ID0gdHJpZy0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBzdC0+aW5kaW9fZGV2OwotCWludCByZXQgPSAwOwogCiAJZGV2X2RiZygmaW5kaW9fZGV2LT5kZXYsICIlcyAoJWQpXG4iLCBfX2Z1bmNfXywgc3RhdGUpOwotCXJldCA9IGFkaXMxNjI2MF9zZXRfaXJxKCZzdC0+aW5kaW9fZGV2LT5kZXYsIHN0YXRlKTsKLQlpZiAoc3RhdGUgPT0gZmFsc2UpIHsKLQkJaWlvX3JlbW92ZV9ldmVudF9mcm9tX2xpc3QoJmlpb19ldmVudF9kYXRhX3JkeV90cmlnLAotCQkJCQkgICAmaW5kaW9fZGV2LT5pbnRlcnJ1cHRzWzBdCi0JCQkJCSAgIC0+ZXZfbGlzdCk7Ci0JCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Ci0JfSBlbHNlIHsKLQkJaWlvX2FkZF9ldmVudF90b19saXN0KCZpaW9fZXZlbnRfZGF0YV9yZHlfdHJpZywKLQkJCQkgICAgICAmaW5kaW9fZGV2LT5pbnRlcnJ1cHRzWzBdLT5ldl9saXN0KTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBhZGlzMTYyNjBfdHJpZ190cnlfcmVlbigpIHRyeSByZW5hYmxpbmcgaXJxIGZvciBkYXRhIHJkeSB0cmlnZ2VyCi0gKiBAdHJpZzoJdGhlIGRhdGFyZHkgdHJpZ2dlcgotICoqLwotc3RhdGljIGludCBhZGlzMTYyNjBfdHJpZ190cnlfcmVlbihzdHJ1Y3QgaWlvX3RyaWdnZXIgKnRyaWcpCi17Ci0Jc3RydWN0IGFkaXMxNjI2MF9zdGF0ZSAqc3QgPSB0cmlnLT5wcml2YXRlX2RhdGE7Ci0JZW5hYmxlX2lycShzdC0+dXMtPmlycSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGFkaXMxNjI2MF9zZXRfaXJxKGluZGlvX2Rldiwgc3RhdGUpOwogfQogCiBpbnQgYWRpczE2MjYwX3Byb2JlX3RyaWdnZXIoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKQEAgLTgxLDM0ICszMCw0MCBAQAogCWludCByZXQ7CiAJc3RydWN0IGFkaXMxNjI2MF9zdGF0ZSAqc3QgPSBpbmRpb19kZXYtPmRldl9kYXRhOwogCi0Jc3QtPnRyaWcgPSBpaW9fYWxsb2NhdGVfdHJpZ2dlcigpOwotCXN0LT50cmlnLT5uYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsCi0JCQkJICAgImFkaXMxNjI2MC1kZXYlZCIsCi0JCQkJICAgaW5kaW9fZGV2LT5pZCk7Ci0JaWYgKCFzdC0+dHJpZy0+bmFtZSkgeworCXN0LT50cmlnID0gaWlvX2FsbG9jYXRlX3RyaWdnZXIoIiVzLWRldiVkIiwKKwkJCQkJc3BpX2dldF9kZXZpY2VfaWQoc3QtPnVzKS0+bmFtZSwKKwkJCQkJaW5kaW9fZGV2LT5pZCk7CisJaWYgKHN0LT50cmlnID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJvcl9mcmVlX3RyaWc7CisJCWdvdG8gZXJyb3JfcmV0OwogCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKHN0LT51cy0+aXJxLAorCQkJICAmaWlvX3RyaWdnZXJfZ2VuZXJpY19kYXRhX3JkeV9wb2xsLAorCQkJICBJUlFGX1RSSUdHRVJfUklTSU5HLAorCQkJICAiYWRpczE2MjYwIiwKKwkJCSAgc3QtPnRyaWcpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3JfZnJlZV90cmlnOworCiAJc3QtPnRyaWctPmRldi5wYXJlbnQgPSAmc3QtPnVzLT5kZXY7CiAJc3QtPnRyaWctPm93bmVyID0gVEhJU19NT0RVTEU7CiAJc3QtPnRyaWctPnByaXZhdGVfZGF0YSA9IHN0OwogCXN0LT50cmlnLT5zZXRfdHJpZ2dlcl9zdGF0ZSA9ICZhZGlzMTYyNjBfZGF0YV9yZHlfdHJpZ2dlcl9zZXRfc3RhdGU7Ci0Jc3QtPnRyaWctPnRyeV9yZWVuYWJsZSA9ICZhZGlzMTYyNjBfdHJpZ190cnlfcmVlbjsKLQlzdC0+dHJpZy0+Y29udHJvbF9hdHRycyA9ICZhZGlzMTYyNjBfdHJpZ2dlcl9hdHRyX2dyb3VwOwogCXJldCA9IGlpb190cmlnZ2VyX3JlZ2lzdGVyKHN0LT50cmlnKTsKIAogCS8qIHNlbGVjdCBkZWZhdWx0IHRyaWdnZXIgKi8KIAlpbmRpb19kZXYtPnRyaWcgPSBzdC0+dHJpZzsKIAlpZiAocmV0KQotCQlnb3RvIGVycm9yX2ZyZWVfdHJpZ19uYW1lOworCQlnb3RvIGVycm9yX2ZyZWVfaXJxOwogCiAJcmV0dXJuIDA7CiAKLWVycm9yX2ZyZWVfdHJpZ19uYW1lOgotCWtmcmVlKHN0LT50cmlnLT5uYW1lKTsKK2Vycm9yX2ZyZWVfaXJxOgorCWZyZWVfaXJxKHN0LT51cy0+aXJxLCBzdC0+dHJpZyk7CiBlcnJvcl9mcmVlX3RyaWc6CiAJaWlvX2ZyZWVfdHJpZ2dlcihzdC0+dHJpZyk7Ci0KK2Vycm9yX3JldDoKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMTcsNiArNzIsNiBAQAogCXN0cnVjdCBhZGlzMTYyNjBfc3RhdGUgKnN0YXRlID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKIAogCWlpb190cmlnZ2VyX3VucmVnaXN0ZXIoc3RhdGUtPnRyaWcpOwotCWtmcmVlKHN0YXRlLT50cmlnLT5uYW1lKTsKKwlmcmVlX2lycShzdGF0ZS0+dXMtPmlycSwgc3RhdGUtPnRyaWcpOwogCWlpb19mcmVlX3RyaWdnZXIoc3RhdGUtPnRyaWcpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkeHJzNDUwLmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vYWR4cnM0NTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTJmNjk0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkeHJzNDUwLmgKQEAgLTAsMCArMSw1OCBAQAorI2lmbmRlZiBTUElfQURYUlM0NTBfSF8KKyNkZWZpbmUgU1BJX0FEWFJTNDUwX0hfCisKKyNkZWZpbmUgQURYUlM0NTBfU1RBUlRVUF9ERUxBWQk1MCAvKiBtcyAqLworCisvKiBUaGUgTVNCIGZvciB0aGUgc3BpIGNvbW1hbmRzICovCisjZGVmaW5lIEFEWFJTNDUwX1NFTlNPUl9EQVRBICAgIDB4MjAKKyNkZWZpbmUgQURYUlM0NTBfV1JJVEVfREFUQQkweDQwCisjZGVmaW5lIEFEWFJTNDUwX1JFQURfREFUQQkweDgwCisKKyNkZWZpbmUgQURYUlM0NTBfUkFURTEJMHgwMAkvKiBSYXRlIFJlZ2lzdGVycyAqLworI2RlZmluZSBBRFhSUzQ1MF9URU1QMQkweDAyCS8qIFRlbXBlcmF0dXJlIFJlZ2lzdGVycyAqLworI2RlZmluZSBBRFhSUzQ1MF9MT0NTVDEJMHgwNAkvKiBMb3cgQ1NUIE1lbW9yeSBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgQURYUlM0NTBfSElDU1QxCTB4MDYJLyogSGlnaCBDU1QgTWVtb3J5IFJlZ2lzdGVycyAqLworI2RlZmluZSBBRFhSUzQ1MF9RVUFEMQkweDA4CS8qIFF1YWQgTWVtb3J5IFJlZ2lzdGVycyAqLworI2RlZmluZSBBRFhSUzQ1MF9GQVVMVDEJMHgwQQkvKiBGYXVsdCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgQURYUlM0NTBfUElEMQkweDBDCS8qIFBhcnQgSUQgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBBRFhSUzQ1MF9TTkgJMHgwRQkvKiBTZXJpYWwgTnVtYmVyIFJlZ2lzdGVycywgNCBieXRlcyAqLworI2RlZmluZSBBRFhSUzQ1MF9TTkwJMHgxMAorI2RlZmluZSBBRFhSUzQ1MF9ETkMxCTB4MTIJLyogRHluYW1pYyBOdWxsIENvcnJlY3Rpb24gUmVnaXN0ZXJzICovCisvKiBDaGVjayBiaXRzICovCisjZGVmaW5lIEFEWFJTNDUwX1AJMHgwMQorI2RlZmluZSBBRFhSUzQ1MF9DSEsJMHgwMgorI2RlZmluZSBBRFhSUzQ1MF9DU1QJMHgwNAorI2RlZmluZSBBRFhSUzQ1MF9QV1IJMHgwOAorI2RlZmluZSBBRFhSUzQ1MF9QT1IJMHgxMAorI2RlZmluZSBBRFhSUzQ1MF9OVk0JMHgyMAorI2RlZmluZSBBRFhSUzQ1MF9RCTB4NDAKKyNkZWZpbmUgQURYUlM0NTBfUExMCTB4ODAKKyNkZWZpbmUgQURYUlM0NTBfVVYJMHgxMDAKKyNkZWZpbmUgQURYUlM0NTBfT1YJMHgyMDAKKyNkZWZpbmUgQURYUlM0NTBfQU1QCTB4NDAwCisjZGVmaW5lIEFEWFJTNDUwX0ZBSUwJMHg4MDAKKworI2RlZmluZSBBRFhSUzQ1MF9XUkVSUl9NQVNLCSgweDcgPDwgMjkpCisKKyNkZWZpbmUgQURYUlM0NTBfTUFYX1JYIDQKKyNkZWZpbmUgQURYUlM0NTBfTUFYX1RYIDQKKworI2RlZmluZSBBRFhSUzQ1MF9HRVRfU1QoYSkJKChhID4+IDI2KSAmIDB4MykKKworLyoqCisgKiBzdHJ1Y3QgYWR4cnM0NTBfc3RhdGUgLSBkZXZpY2UgaW5zdGFuY2Ugc3BlY2lmaWMgZGF0YQorICogQHVzOgkJCWFjdHVhbCBzcGlfZGV2aWNlCisgKiBAaW5kaW9fZGV2OgkJaW5kdXN0cmlhbCBJL08gZGV2aWNlIHN0cnVjdHVyZQorICogQHR4OgkJCXRyYW5zbWl0IGJ1ZmZlcgorICogQHJ4OgkJCXJlY2lldmUgYnVmZmVyCisgKiBAYnVmX2xvY2s6CQltdXRleCB0byBwcm90ZWN0IHR4IGFuZCByeAorICoqLworc3RydWN0IGFkeHJzNDUwX3N0YXRlIHsKKwlzdHJ1Y3Qgc3BpX2RldmljZQkJKnVzOworCXN0cnVjdCBpaW9fZGV2CQkJKmluZGlvX2RldjsKKwl1OAkJCQkqdHg7CisJdTgJCQkJKnJ4OworCXN0cnVjdCBtdXRleAkJCWJ1Zl9sb2NrOworfTsKKworI2VuZGlmIC8qIFNQSV9BRFhSUzQ1MF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkeHJzNDUwX2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9hZHhyczQ1MF9jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcxNGU0YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9hZHhyczQ1MF9jb3JlLmMKQEAgLTAsMCArMSw0NTUgQEAKKy8qCisgKiBBRFhSUzQ1MCBEaWdpdGFsIE91dHB1dCBHeXJvc2NvcGUgRHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIwMTEgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisjaW5jbHVkZSAiLi4vaWlvLmgiCisjaW5jbHVkZSAiLi4vc3lzZnMuaCIKKyNpbmNsdWRlICJneXJvLmgiCisjaW5jbHVkZSAiLi4vYWRjL2FkYy5oIgorCisjaW5jbHVkZSAiYWR4cnM0NTAuaCIKKworLyoqCisgKiBhZHhyczQ1MF9zcGlfcmVhZF9yZWdfMTYoKSAtIHJlYWQgMiBieXRlcyBmcm9tIGEgcmVnaXN0ZXIgcGFpcgorICogQGRldjogZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBjaGlsZCBvZiBhY3R1YWwgaWlvX2RldgorICogQHJlZ19hZGRyZXNzOiB0aGUgYWRkcmVzcyBvZiB0aGUgbG93ZXIgb2YgdGhlIHR3byByZWdpc3RlcnMsd2hpY2ggc2hvdWxkIGJlIGFuIGV2ZW4gYWRkcmVzcywKKyAqIFNlY29uZCByZWdpc3RlcidzIGFkZHJlc3MgaXMgcmVnX2FkZHJlc3MgKyAxLgorICogQHZhbDogc29tZXdoZXJlIHRvIHBhc3MgYmFjayB0aGUgdmFsdWUgcmVhZAorICoqLworc3RhdGljIGludCBhZHhyczQ1MF9zcGlfcmVhZF9yZWdfMTYoc3RydWN0IGRldmljZSAqZGV2LAorCQl1OCByZWdfYWRkcmVzcywKKwkJdTE2ICp2YWwpCit7CisJc3RydWN0IHNwaV9tZXNzYWdlIG1zZzsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGFkeHJzNDUwX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKKwlpbnQgcmV0OworCXN0cnVjdCBzcGlfdHJhbnNmZXIgeGZlcnNbXSA9IHsKKwkJeworCQkJLnR4X2J1ZiA9IHN0LT50eCwKKwkJCS5iaXRzX3Blcl93b3JkID0gOCwKKwkJCS5sZW4gPSA0LAorCQkJLmNzX2NoYW5nZSA9IDEsCisJCX0sIHsKKwkJCS5yeF9idWYgPSBzdC0+cngsCisJCQkuYml0c19wZXJfd29yZCA9IDgsCisJCQkubGVuID0gNCwKKwkJfSwKKwl9OworCisJbXV0ZXhfbG9jaygmc3QtPmJ1Zl9sb2NrKTsKKwlzdC0+dHhbMF0gPSBBRFhSUzQ1MF9SRUFEX0RBVEEgfCAocmVnX2FkZHJlc3MgPj4gNyk7CisJc3QtPnR4WzFdID0gcmVnX2FkZHJlc3MgPDwgMTsKKwlzdC0+dHhbMl0gPSAwOworCXN0LT50eFszXSA9IDA7CisKKwlpZiAoIShod2VpZ2h0MzIoYmUzMl90b19jcHUoKih1MzIgKilzdC0+dHgpKSAmIDEpKQorCQlzdC0+dHhbM10gIHw9IEFEWFJTNDUwX1A7CisKKwlzcGlfbWVzc2FnZV9pbml0KCZtc2cpOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ4ZmVyc1swXSwgJm1zZyk7CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnhmZXJzWzFdLCAmbXNnKTsKKwlyZXQgPSBzcGlfc3luYyhzdC0+dXMsICZtc2cpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycigmc3QtPnVzLT5kZXYsICJwcm9ibGVtIHdoaWxlIHJlYWRpbmcgMTYgYml0IHJlZ2lzdGVyIDB4JTAyeFxuIiwKKwkJCQlyZWdfYWRkcmVzcyk7CisJCWdvdG8gZXJyb3JfcmV0OworCX0KKworCSp2YWwgPSAoYmUzMl90b19jcHUoKih1MzIgKilzdC0+cngpID4+IDUpICYgMHhGRkZGOworCitlcnJvcl9yZXQ6CisJbXV0ZXhfdW5sb2NrKCZzdC0+YnVmX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogYWR4cnM0NTBfc3BpX3dyaXRlX3JlZ18xNigpIC0gd3JpdGUgMiBieXRlcyBkYXRhIHRvIGEgcmVnaXN0ZXIgcGFpcgorICogQGRldjogZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBjaGlsZCBvZiBhY3R1YWwgYWN0dWFsIGlpb19kZXYKKyAqIEByZWdfYWRkcmVzczogdGhlIGFkZHJlc3Mgb2YgdGhlIGxvd2VyIG9mIHRoZSB0d28gcmVnaXN0ZXJzLHdoaWNoIHNob3VsZCBiZSBhbiBldmVuIGFkZHJlc3MsCisgKiBTZWNvbmQgcmVnaXN0ZXIncyBhZGRyZXNzIGlzIHJlZ19hZGRyZXNzICsgMS4KKyAqIEB2YWw6IHZhbHVlIHRvIGJlIHdyaXR0ZW4uCisgKiovCitzdGF0aWMgaW50IGFkeHJzNDUwX3NwaV93cml0ZV9yZWdfMTYoc3RydWN0IGRldmljZSAqZGV2LAorCQl1OCByZWdfYWRkcmVzcywKKwkJdTE2IHZhbCkKK3sKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbXNnOworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgYWR4cnM0NTBfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOworCWludCByZXQ7CisJc3RydWN0IHNwaV90cmFuc2ZlciB4ZmVycyA9IHsKKwkJLnR4X2J1ZiA9IHN0LT50eCwKKwkJLnJ4X2J1ZiA9IHN0LT5yeCwKKwkJLmJpdHNfcGVyX3dvcmQgPSA4LAorCQkubGVuID0gNCwKKwl9OworCisJbXV0ZXhfbG9jaygmc3QtPmJ1Zl9sb2NrKTsKKwlzdC0+dHhbMF0gPSBBRFhSUzQ1MF9XUklURV9EQVRBIHwgcmVnX2FkZHJlc3MgPj4gNzsKKwlzdC0+dHhbMV0gPSByZWdfYWRkcmVzcyA8PCAxIHwgdmFsID4+IDE1OworCXN0LT50eFsyXSA9IHZhbCA+PiA3OworCXN0LT50eFszXSA9IHZhbCA8PCAxOworCisJaWYgKCEoaHdlaWdodDMyKGJlMzJfdG9fY3B1KCoodTMyICopc3QtPnR4KSkgJiAxKSkKKwkJc3QtPnR4WzNdICB8PSBBRFhSUzQ1MF9QOworCisJc3BpX21lc3NhZ2VfaW5pdCgmbXNnKTsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlcnMsICZtc2cpOworCXJldCA9IHNwaV9zeW5jKHN0LT51cywgJm1zZyk7CisJaWYgKHJldCkKKwkJZGV2X2Vycigmc3QtPnVzLT5kZXYsICJwcm9ibGVtIHdoaWxlIHdyaXRpbmcgMTYgYml0IHJlZ2lzdGVyIDB4JTAyeFxuIiwKKwkJCQlyZWdfYWRkcmVzcyk7CisJbXNsZWVwKDEpOyAvKiBlbmZvcmNlIHNlcXVlbnRpYWwgdHJhbnNmZXIgZGVsYXkgMC4xbXMgKi8KKwltdXRleF91bmxvY2soJnN0LT5idWZfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBhZHhyczQ1MF9zcGlfc2Vuc29yX2RhdGEoKSAtIHJlYWQgMiBieXRlcyBzZW5zb3IgZGF0YQorICogQGRldjogZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBjaGlsZCBvZiBhY3R1YWwgaWlvX2RldgorICogQHZhbDogc29tZXdoZXJlIHRvIHBhc3MgYmFjayB0aGUgdmFsdWUgcmVhZAorICoqLworc3RhdGljIGludCBhZHhyczQ1MF9zcGlfc2Vuc29yX2RhdGEoc3RydWN0IGRldmljZSAqZGV2LCBzMTYgKnZhbCkKK3sKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbXNnOworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgYWR4cnM0NTBfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOworCWludCByZXQ7CisJc3RydWN0IHNwaV90cmFuc2ZlciB4ZmVyc1tdID0geworCQl7CisJCQkudHhfYnVmID0gc3QtPnR4LAorCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAorCQkJLmxlbiA9IDQsCisJCQkuY3NfY2hhbmdlID0gMSwKKwkJfSwgeworCQkJLnJ4X2J1ZiA9IHN0LT5yeCwKKwkJCS5iaXRzX3Blcl93b3JkID0gOCwKKwkJCS5sZW4gPSA0LAorCQl9LAorCX07CisKKwltdXRleF9sb2NrKCZzdC0+YnVmX2xvY2spOworCXN0LT50eFswXSA9IEFEWFJTNDUwX1NFTlNPUl9EQVRBOworCXN0LT50eFsxXSA9IDA7CisJc3QtPnR4WzJdID0gMDsKKwlzdC0+dHhbM10gPSAwOworCisJc3BpX21lc3NhZ2VfaW5pdCgmbXNnKTsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlcnNbMF0sICZtc2cpOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ4ZmVyc1sxXSwgJm1zZyk7CisJcmV0ID0gc3BpX3N5bmMoc3QtPnVzLCAmbXNnKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnN0LT51cy0+ZGV2LCAiUHJvYmxlbSB3aGlsZSByZWFkaW5nIHNlbnNvciBkYXRhXG4iKTsKKwkJZ290byBlcnJvcl9yZXQ7CisJfQorCisJKnZhbCA9IChiZTMyX3RvX2NwdSgqKHUzMiAqKXN0LT5yeCkgPj4gMTApICYgMHhGRkZGOworCitlcnJvcl9yZXQ6CisJbXV0ZXhfdW5sb2NrKCZzdC0+YnVmX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogYWR4cnM0NTBfc3BpX2luaXRpYWwoKSAtIHVzZSBmb3IgaW5pdGlhbGl6aW5nIHByb2NlZHVyZS4KKyAqIEBzdDogZGV2aWNlIGluc3RhbmNlIHNwZWNpZmljIGRhdGEKKyAqIEB2YWw6IHNvbWV3aGVyZSB0byBwYXNzIGJhY2sgdGhlIHZhbHVlIHJlYWQKKyAqKi8KK3N0YXRpYyBpbnQgYWR4cnM0NTBfc3BpX2luaXRpYWwoc3RydWN0IGFkeHJzNDUwX3N0YXRlICpzdCwKKwkJdTMyICp2YWwsIGNoYXIgY2hrKQoreworCXN0cnVjdCBzcGlfbWVzc2FnZSBtc2c7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHhmZXJzID0geworCQkudHhfYnVmID0gc3QtPnR4LAorCQkucnhfYnVmID0gc3QtPnJ4LAorCQkuYml0c19wZXJfd29yZCA9IDgsCisJCS5sZW4gPSA0LAorCX07CisKKwltdXRleF9sb2NrKCZzdC0+YnVmX2xvY2spOworCXN0LT50eFswXSA9IEFEWFJTNDUwX1NFTlNPUl9EQVRBOworCXN0LT50eFsxXSA9IDA7CisJc3QtPnR4WzJdID0gMDsKKwlzdC0+dHhbM10gPSAwOworCWlmIChjaGspCisJCXN0LT50eFszXSB8PSAoQURYUlM0NTBfQ0hLIHwgQURYUlM0NTBfUCk7CisJc3BpX21lc3NhZ2VfaW5pdCgmbXNnKTsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlcnMsICZtc2cpOworCXJldCA9IHNwaV9zeW5jKHN0LT51cywgJm1zZyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZzdC0+dXMtPmRldiwgIlByb2JsZW0gd2hpbGUgcmVhZGluZyBpbml0aWFsaXppbmcgZGF0YVxuIik7CisJCWdvdG8gZXJyb3JfcmV0OworCX0KKworCSp2YWwgPSBiZTMyX3RvX2NwdSgqKHUzMiAqKXN0LT5yeCk7CisKK2Vycm9yX3JldDoKKwltdXRleF91bmxvY2soJnN0LT5idWZfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgYWR4cnM0NTBfcmVhZF90ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNoYXIgKmJ1ZikKK3sKKwlpbnQgcmV0OworCXUxNiB0OworCXJldCA9IGFkeHJzNDUwX3NwaV9yZWFkX3JlZ18xNihkZXYsCisJCQlBRFhSUzQ1MF9URU1QMSwKKwkJCSZ0KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0ID4+IDcpOworfQorCitzdGF0aWMgc3NpemVfdCBhZHhyczQ1MF9yZWFkX3F1YWQoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY2hhciAqYnVmKQoreworCWludCByZXQ7CisJczE2IHQ7CisJcmV0ID0gYWR4cnM0NTBfc3BpX3JlYWRfcmVnXzE2KGRldiwKKwkJCUFEWFJTNDUwX1FVQUQxLAorCQkJJnQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHQpOworfQorCitzdGF0aWMgc3NpemVfdCBhZHhyczQ1MF93cml0ZV9kbmMoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY29uc3QgY2hhciAqYnVmLAorCQlzaXplX3QgbGVuKQoreworCWludCByZXQ7CisJbG9uZyB2YWw7CisKKwlyZXQgPSBzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ2YWwpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3JfcmV0OworCXJldCA9IGFkeHJzNDUwX3NwaV93cml0ZV9yZWdfMTYoZGV2LAorCQkJQURYUlM0NTBfRE5DMSwKKwkJCXZhbCAmIDB4M0ZGKTsKK2Vycm9yX3JldDoKKwlyZXR1cm4gcmV0ID8gcmV0IDogbGVuOworfQorCitzdGF0aWMgc3NpemVfdCBhZHhyczQ1MF9yZWFkX3NlbnNvcl9kYXRhKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNoYXIgKmJ1ZikKK3sKKwlpbnQgcmV0OworCXMxNiB0OworCisJcmV0ID0gYWR4cnM0NTBfc3BpX3NlbnNvcl9kYXRhKGRldiwgJnQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdCk7Cit9CisKKy8qIFJlY29tbWVuZGVkIFN0YXJ0dXAgU2VxdWVuY2UgYnkgc3BlYyAqLworc3RhdGljIGludCBhZHhyczQ1MF9pbml0aWFsX3NldHVwKHN0cnVjdCBhZHhyczQ1MF9zdGF0ZSAqc3QpCit7CisJdTMyIHQ7CisJdTE2IGRhdGE7CisJaW50IHJldDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmc3QtPmluZGlvX2Rldi0+ZGV2OworCisJbXNsZWVwKEFEWFJTNDUwX1NUQVJUVVBfREVMQVkqMik7CisJcmV0ID0gYWR4cnM0NTBfc3BpX2luaXRpYWwoc3QsICZ0LCAxKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWlmICh0ICE9IDB4MDEpCisJCWRldl93YXJuKCZzdC0+dXMtPmRldiwgIlRoZSBpbml0aWFsIHBvd2VyIG9uIHJlc3BvbnNlICIKKwkJCSAiaXMgbm90IGNvcnJlY3QhIFJlc3RhcnQgd2l0aG91dCByZXNldD9cbiIpOworCisJbXNsZWVwKEFEWFJTNDUwX1NUQVJUVVBfREVMQVkpOworCXJldCA9IGFkeHJzNDUwX3NwaV9pbml0aWFsKHN0LCAmdCwgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW1zbGVlcChBRFhSUzQ1MF9TVEFSVFVQX0RFTEFZKTsKKwlyZXQgPSBhZHhyczQ1MF9zcGlfaW5pdGlhbChzdCwgJnQsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJaWYgKCgodCAmIDB4ZmYpIHwgMHgwMSkgIT0gMHhmZiB8fCBBRFhSUzQ1MF9HRVRfU1QodCkgIT0gMikgeworCQlkZXZfZXJyKCZzdC0+dXMtPmRldiwgIlRoZSBzZWNvbmQgcmVzcG9uc2UgaXMgbm90IGNvcnJlY3QhXG4iKTsKKwkJcmV0dXJuIC1FSU87CisKKwl9CisJcmV0ID0gYWR4cnM0NTBfc3BpX2luaXRpYWwoc3QsICZ0LCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWlmICgoKHQgJiAweGZmKSB8IDB4MDEpICE9IDB4ZmYgfHwgQURYUlM0NTBfR0VUX1NUKHQpICE9IDIpIHsKKwkJZGV2X2Vycigmc3QtPnVzLT5kZXYsICJUaGUgdGhpcmQgcmVzcG9uc2UgaXMgbm90IGNvcnJlY3QhXG4iKTsKKwkJcmV0dXJuIC1FSU87CisKKwl9CisJcmV0ID0gYWR4cnM0NTBfc3BpX3JlYWRfcmVnXzE2KGRldiwgQURYUlM0NTBfRkFVTFQxLCAmZGF0YSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlpZiAoZGF0YSAmIDB4MGZmZikgeworCQlkZXZfZXJyKCZzdC0+dXMtPmRldiwgIlRoZSBkZXZpY2UgaXMgbm90IGluIG5vcm1hbCBzdGF0dXMhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldCA9IGFkeHJzNDUwX3NwaV9yZWFkX3JlZ18xNihkZXYsIEFEWFJTNDUwX1BJRDEsICZkYXRhKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWRldl9pbmZvKCZzdC0+dXMtPmRldiwgIlRoZSBQYXJ0IElEIGlzIDB4JXhcbiIsIGRhdGEpOworCisJcmV0ID0gYWR4cnM0NTBfc3BpX3JlYWRfcmVnXzE2KGRldiwgQURYUlM0NTBfU05MLCAmZGF0YSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwl0ID0gZGF0YTsKKwlyZXQgPSBhZHhyczQ1MF9zcGlfcmVhZF9yZWdfMTYoZGV2LCBBRFhSUzQ1MF9TTkgsICZkYXRhKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXQgfD0gZGF0YSA8PCAxNjsKKwlkZXZfaW5mbygmc3QtPnVzLT5kZXYsICJUaGUgU2VyaWFsIE51bWJlciBpcyAweCV4XG4iLCB0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgSUlPX0RFVl9BVFRSX0dZUk9fWihhZHhyczQ1MF9yZWFkX3NlbnNvcl9kYXRhLCAwKTsKK3N0YXRpYyBJSU9fREVWX0FUVFJfVEVNUF9SQVcoYWR4cnM0NTBfcmVhZF90ZW1wKTsKK3N0YXRpYyBJSU9fREVWX0FUVFJfR1lST19aX1FVQURSQVRVUkVfQ09SUkVDVElPTihhZHhyczQ1MF9yZWFkX3F1YWQsIDApOworc3RhdGljIElJT19ERVZfQVRUUl9HWVJPX1pfQ0FMSUJCSUFTKFNfSVdVU1IsCisJCU5VTEwsIGFkeHJzNDUwX3dyaXRlX2RuYywgMCk7CitzdGF0aWMgSUlPX0NPTlNUX0FUVFIobmFtZSwgImFkeHJzNDUwIik7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHhyczQ1MF9hdHRyaWJ1dGVzW10gPSB7CisJJmlpb19kZXZfYXR0cl9neXJvX3pfcmF3LmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl90ZW1wX3Jhdy5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfZ3lyb196X3F1YWRyYXR1cmVfY29ycmVjdGlvbl9yYXcuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2d5cm9fel9jYWxpYmJpYXMuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2NvbnN0X2F0dHJfbmFtZS5kZXZfYXR0ci5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFkeHJzNDUwX2F0dHJpYnV0ZV9ncm91cCA9IHsKKwkuYXR0cnMgPSBhZHhyczQ1MF9hdHRyaWJ1dGVzLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9faW5mbyBhZHhyczQ1MF9pbmZvID0geworCS5hdHRycyA9ICZhZHhyczQ1MF9hdHRyaWJ1dGVfZ3JvdXAsCisJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGFkeHJzNDUwX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJaW50IHJldCwgcmVnZG9uZSA9IDA7CisJc3RydWN0IGFkeHJzNDUwX3N0YXRlICpzdCA9IGt6YWxsb2Moc2l6ZW9mICpzdCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdCkgeworCQlyZXQgPSAgLUVOT01FTTsKKwkJZ290byBlcnJvcl9yZXQ7CisJfQorCS8qIFRoaXMgaXMgb25seSB1c2VkIGZvciByZW1vdmFsIHB1cnBvc2VzICovCisJc3BpX3NldF9kcnZkYXRhKHNwaSwgc3QpOworCisJLyogQWxsb2NhdGUgdGhlIGNvbW1zIGJ1ZmZlcnMgKi8KKwlzdC0+cnggPSBremFsbG9jKHNpemVvZigqc3QtPnJ4KSpBRFhSUzQ1MF9NQVhfUlgsIEdGUF9LRVJORUwpOworCWlmIChzdC0+cnggPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yX2ZyZWVfc3Q7CisJfQorCXN0LT50eCA9IGt6YWxsb2Moc2l6ZW9mKCpzdC0+dHgpKkFEWFJTNDUwX01BWF9UWCwgR0ZQX0tFUk5FTCk7CisJaWYgKHN0LT50eCA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3JfZnJlZV9yeDsKKwl9CisJc3QtPnVzID0gc3BpOworCW11dGV4X2luaXQoJnN0LT5idWZfbG9jayk7CisJLyogc2V0dXAgdGhlIGluZHVzdHJpYWxpbyBkcml2ZXIgYWxsb2NhdGVkIGVsZW1lbnRzICovCisJc3QtPmluZGlvX2RldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2UoMCk7CisJaWYgKHN0LT5pbmRpb19kZXYgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yX2ZyZWVfdHg7CisJfQorCisJc3QtPmluZGlvX2Rldi0+ZGV2LnBhcmVudCA9ICZzcGktPmRldjsKKwlzdC0+aW5kaW9fZGV2LT5pbmZvID0gJmFkeHJzNDUwX2luZm87CisJc3QtPmluZGlvX2Rldi0+ZGV2X2RhdGEgPSAodm9pZCAqKShzdCk7CisJc3QtPmluZGlvX2Rldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1RfTU9ERTsKKworCXJldCA9IGlpb19kZXZpY2VfcmVnaXN0ZXIoc3QtPmluZGlvX2Rldik7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcl9mcmVlX2RldjsKKwlyZWdkb25lID0gMTsKKworCS8qIEdldCB0aGUgZGV2aWNlIGludG8gYSBzYW5lIGluaXRpYWwgc3RhdGUgKi8KKwlyZXQgPSBhZHhyczQ1MF9pbml0aWFsX3NldHVwKHN0KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yX2luaXRpYWw7CisJcmV0dXJuIDA7CisKK2Vycm9yX2luaXRpYWw6CitlcnJvcl9mcmVlX2RldjoKKwlpZiAocmVnZG9uZSkKKwkJaWlvX2RldmljZV91bnJlZ2lzdGVyKHN0LT5pbmRpb19kZXYpOworCWVsc2UKKwkJaWlvX2ZyZWVfZGV2aWNlKHN0LT5pbmRpb19kZXYpOworZXJyb3JfZnJlZV90eDoKKwlrZnJlZShzdC0+dHgpOworZXJyb3JfZnJlZV9yeDoKKwlrZnJlZShzdC0+cngpOworZXJyb3JfZnJlZV9zdDoKKwlrZnJlZShzdCk7CitlcnJvcl9yZXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZHhyczQ1MF9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgYWR4cnM0NTBfc3RhdGUgKnN0ID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CisKKwlpaW9fZGV2aWNlX3VucmVnaXN0ZXIoc3QtPmluZGlvX2Rldik7CisJa2ZyZWUoc3QtPnR4KTsKKwlrZnJlZShzdC0+cngpOworCWtmcmVlKHN0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgYWR4cnM0NTBfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImFkeHJzNDUwIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSBhZHhyczQ1MF9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoYWR4cnM0NTBfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBfX2luaXQgaW50IGFkeHJzNDUwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3BpX3JlZ2lzdGVyX2RyaXZlcigmYWR4cnM0NTBfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGFkeHJzNDUwX2luaXQpOworCitzdGF0aWMgX19leGl0IHZvaWQgYWR4cnM0NTBfZXhpdCh2b2lkKQoreworCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmYWR4cnM0NTBfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGFkeHJzNDUwX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJDbGlmZiBDYWkgPGNsaWZmLmNhaUB4eHh4eHh4eHh4PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBbmFsb2cgRGV2aWNlcyBBRFhSUzQ1MCBHeXJvc2NvcGUgU1BJIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2d5cm8uaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9neXJvLmgKaW5kZXggYjRlYTViZi4uYjU0OTU2MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9neXJvLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2d5cm8uaApAQCAtNTcsNiArNTcsOSBAQAogI2RlZmluZSBJSU9fREVWX0FUVFJfR1lST19aX0NBTElCU0NBTEUoX21vZGUsIF9zaG93LCBfc3RvcmUsIF9hZGRyKQkJXAogCUlJT19ERVZJQ0VfQVRUUihneXJvX3pfY2FsaWJzY2FsZSwgX21vZGUsIF9zaG93LCBfc3RvcmUsIF9hZGRyKQogCisjZGVmaW5lIElJT19ERVZfQVRUUl9HWVJPX1pfUVVBRFJBVFVSRV9DT1JSRUNUSU9OKF9zaG93LCBfYWRkcikJCVwKKwlJSU9fREVWSUNFX0FUVFIoZ3lyb196X3F1YWRyYXR1cmVfY29ycmVjdGlvbl9yYXcsIFNfSVJVR08sIF9zaG93LCBOVUxMLCBfYWRkcikKKwogI2RlZmluZSBJSU9fREVWX0FUVFJfR1lSTyhfc2hvdywgX2FkZHIpCQkJXAogCUlJT19ERVZJQ0VfQVRUUihneXJvX3JhdywgU19JUlVHTywgX3Nob3csIE5VTEwsIF9hZGRyKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2lpby5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9paW8uaAppbmRleCA3MTI3ZjI2Li4zOGYxNDI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2lpby5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaWlvLmgKQEAgLTEyLDYgKzEyLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlICJzeXNmcy5oIgogI2luY2x1ZGUgImNocmRldi5oIgogCkBAIC0yNCw4ICsyNSwxNTcgQEAKIC8qIEV2ZW50IGludGVyZmFjZSBmbGFncyAqLwogI2RlZmluZSBJSU9fQlVTWV9CSVRfUE9TIDEKIAotc3RydWN0IGlpb19kZXY7CisvKiBuYXVnaHR5IHRlbXBvcmFyeSBoYWNrIHRvIG1hdGNoIHRoZXNlIGFnYWluc3QgdGhlIGV2ZW50IHZlcnNpb24KKyAgIC0gbmVlZCB0byBmbGF0dGVybiB0aGVzZSB0b2dldGhlciAqLworZW51bSBpaW9fY2hhbl90eXBlIHsKKwkvKiByZWFsIGNoYW5uZWwgdHlwZXMgKi8KKwlJSU9fSU4sCisJSUlPX0NVUlJFTlQsCisJSUlPX1BPV0VSLAorCUlJT19BQ0NFTCwKKwlJSU9fSU5fRElGRiwKKwlJSU9fR1lSTywKKwlJSU9fTUFHTiwKKwlJSU9fTElHSFQsCisJSUlPX0lOVEVOU0lUWSwKKwlJSU9fUFJPWElNSVRZLAorCUlJT19URU1QLAorCUlJT19JTkNMSSwKKwlJSU9fUk9ULAorCUlJT19BTkdMLAorCUlJT19USU1FU1RBTVAsCit9OwogCisjZGVmaW5lIElJT19NT0RfWAkJCTAKKyNkZWZpbmUgSUlPX01PRF9MSUdIVF9CT1RICQkwCisjZGVmaW5lIElJT19NT0RfWQkJCTEKKyNkZWZpbmUgSUlPX01PRF9MSUdIVF9JUgkJMQorI2RlZmluZSBJSU9fTU9EX1oJCQkyCisjZGVmaW5lIElJT19NT0RfWF9BTkRfWQkJCTMKKyNkZWZpbmUgSUlPX01PRF9YX0FOWF9aCQkJNAorI2RlZmluZSBJSU9fTU9EX1lfQU5EX1oJCQk1CisjZGVmaW5lIElJT19NT0RfWF9BTkRfWV9BTkRfWgkJNgorI2RlZmluZSBJSU9fTU9EX1hfT1JfWQkJCTcKKyNkZWZpbmUgSUlPX01PRF9YX09SX1oJCQk4CisjZGVmaW5lIElJT19NT0RfWV9PUl9aCQkJOQorI2RlZmluZSBJSU9fTU9EX1hfT1JfWV9PUl9aCQkxMAorCisvKiBDb3VsZCBhZGQgdGhlIHJhdyBhdHRyaWJ1dGVzIGFzIHdlbGwgLSBhbGxvd2luZyBidWZmZXIgb25seSBkZXZpY2VzICovCitlbnVtIGlpb19jaGFuX2luZm9fZW51bSB7CisJSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQsCisJSUlPX0NIQU5fSU5GT19TQ0FMRV9TRVBBUkFURSwKKwlJSU9fQ0hBTl9JTkZPX09GRlNFVF9TSEFSRUQsCisJSUlPX0NIQU5fSU5GT19PRkZTRVRfU0VQQVJBVEUsCisJSUlPX0NIQU5fSU5GT19DQUxJQlNDQUxFX1NIQVJFRCwKKwlJSU9fQ0hBTl9JTkZPX0NBTElCU0NBTEVfU0VQQVJBVEUsCisJSUlPX0NIQU5fSU5GT19DQUxJQkJJQVNfU0hBUkVELAorCUlJT19DSEFOX0lORk9fQ0FMSUJCSUFTX1NFUEFSQVRFLAorCUlJT19DSEFOX0lORk9fUEVBS19TSEFSRUQsCisJSUlPX0NIQU5fSU5GT19QRUFLX1NFUEFSQVRFLAorCUlJT19DSEFOX0lORk9fUEVBS19TQ0FMRV9TSEFSRUQsCisJSUlPX0NIQU5fSU5GT19QRUFLX1NDQUxFX1NFUEFSQVRFLAorfTsKKworLyoqCisgKiBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyAtIHNwZWNpZmljYXRpb24gb2YgYSBzaW5nbGUgY2hhbm5lbAorICogQHR5cGU6CQlXaGF0IHR5cGUgb2YgbWVhc3VyZW1lbnQgaXMgdGhlIGNoYW5uZWwgbWFraW5nLgorICogQGNoYW5uZWw6CQlXaGF0IG51bWJlciBvciBuYW1lIGRvIHdlIHdpc2ggdG8gYXNpZ24gdGhlIGNoYW5uZWwuCisgKiBAY2hhbm5lbDI6CQlJZiB0aGVyZSBpcyBhIHNlY29uZCBudW1iZXIgZm9yIGEgZGlmZmVyZW50aWFsCisgKgkJCWNoYW5uZWwgdGhlbiB0aGlzIGlzIGl0LiBJZiBtb2RpZmllZCBpcyBzZXQgdGhlbiB0aGUKKyAqCQkJdmFsdWUgaGVyZSBzcGVjaWZpZXMgdGhlIG1vZGlmaWVyLgorICogQGFkZHJlc3M6CQlEcml2ZXIgc3BlY2lmaWMgaWRlbnRpZmllci4KKyAqIEBzY2FuX2luZGV4OglNb25vdG9uaWMgaW5kZXggdG8gZ2l2ZSBvcmRlcmluZyBpbiBzY2FucyB3aGVuIHJlYWQKKyAqCQkJZnJvbSBhIGJ1ZmZlci4KKyAqIEBzY2FuX3R5cGU6CQlTaWduOgkJJ3MnIG9yICd1JyB0byBzcGVjaWZ5IHNpZ25lZCBvciB1bnNpZ25lZAorICoJCQlyZWFsYml0czoJTnVtYmVyIG9mIHZhbGlkIGJpdHMgb2YgZGF0YQorICoJCQlzdG9yYWdlX2JpdHM6CVJlYWxiaXRzICsgcGFkZGluZworICoJCQlzaGlmdDoJCVNoaWZ0IHJpZ2h0IGJ5IHRoaXMgYmVmb3JlIG1hc2tpbmcgb3V0CisgKgkJCQkJcmVhbGJpdHMuCisgKiBAaW5mb19tYXNrOgkJV2hhdCBpbmZvcm1hdGlvbiBpcyB0byBiZSBleHBvcnRlZCBhYm91dCB0aGlzIGNoYW5uZWwuCisgKgkJCVRoaXMgaW5jbHVkZXMgY2FsaWJiaWFzLCBzY2FsZSBldGMuCisgKiBAZXZlbnRfbWFzazoJV2hhdCBldmVudHMgY2FuIHRoaXMgY2hhbm5lbCBwcm9kdWNlLgorICogQGV4dGVuZF9uYW1lOglBbGxvd3MgbGFiZWxpbmcgb2YgY2hhbm5lbCBhdHRyaWJ1dGVzIHdpdGggYW4KKyAqCQkJaW5mb3JtYXRpdmUgbmFtZS4gTm90ZSB0aGlzIGhhcyBubyBlZmZlY3QgY29kZXMgZXRjLAorICoJCQl1bmxpa2UgbW9kaWZpZXJzLgorICogQHByb2Nlc3NlZF92YWw6CUZsYWcgdG8gc3BlY2lmeSB0aGUgZGF0YSBhY2Nlc3MgYXR0cmlidXRlIHNob3VsZCBiZQorICoJCQkqX2lucHV0IHJhdGhlciB0aGFuICpfcmF3LgorICogQG1vZGlmaWVkOgkJRG9lcyBhIG1vZGlmaWVyIGFwcGx5IHRvIHRoaXMgY2hhbm5lbC4gV2hhdCB0aGVzZSBhcmUKKyAqCQkJZGVwZW5kcyBvbiB0aGUgY2hhbm5lbCB0eXBlLiAgTW9kaWZpZXIgaXMgc2V0IGluCisgKgkJCWNoYW5uZWwyLiBFeGFtcGxlcyBhcmUgSUlPX01PRF9YIGZvciBheGlhbCBzZW5zb3JzIGFib3V0CisgKgkJCXRoZSAneCcgYXhpcy4KKyAqIEBpbmRleGVkOgkJU3BlY2lmeSB0aGUgY2hhbm5lbCBoYXMgYSBudW1lcmljYWwgaW5kZXguIElmIG5vdCwKKyAqCQkJdGhlIHZhbHVlIGluIGNoYW5uZWwgd2lsbCBiZSBzdXBwcmVzc2VkIGZvciBhdHRyaWJ1dGUKKyAqCQkJYnV0IG5vdCBmb3IgZXZlbnQgY29kZXMuIFR5cGljYWxseSBzZXQgaXQgdG8gMCB3aGVuCisgKgkJCXRoZSBpbmRleCBpcyBmYWxzZS4KKyAqLworc3RydWN0IGlpb19jaGFuX3NwZWMgeworCWVudW0gaWlvX2NoYW5fdHlwZQl0eXBlOworCWludAkJCWNoYW5uZWw7CisJaW50CQkJY2hhbm5lbDI7CisJdW5zaWduZWQgbG9uZwkJYWRkcmVzczsKKwlpbnQJCQlzY2FuX2luZGV4OworCXN0cnVjdCB7CisJCWNoYXIJc2lnbjsKKwkJdTgJcmVhbGJpdHM7CisJCXU4CXN0b3JhZ2ViaXRzOworCQl1OAlzaGlmdDsKKwl9IHNjYW5fdHlwZTsKKwljb25zdCBsb25nCQlpbmZvX21hc2s7CisJY29uc3QgbG9uZwkJZXZlbnRfbWFzazsKKwljb25zdCBjaGFyCQkqZXh0ZW5kX25hbWU7CisJdW5zaWduZWQJCXByb2Nlc3NlZF92YWw6MTsKKwl1bnNpZ25lZAkJbW9kaWZpZWQ6MTsKKwl1bnNpZ25lZAkJaW5kZXhlZDoxOworfTsKKy8qIE1lYW50IGZvciBpbnRlcm5hbCB1c2Ugb25seSAqLwordm9pZCBfX2lpb19kZXZpY2VfYXR0cl9kZWluaXQoc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldl9hdHRyKTsKK2ludCBfX2lpb19kZXZpY2VfYXR0cl9pbml0KHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZfYXR0ciwKKwkJCSAgIGNvbnN0IGNoYXIgKnBvc3RmaXgsCisJCQkgICBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbiwKKwkJCSAgIHNzaXplX3QgKCpyZWFkZnVuYykoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgICAgICBjaGFyICpidWYpLAorCQkJICAgc3NpemVfdCAoKndyaXRlZnVuYykoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCQljb25zdCBjaGFyICpidWYsCisJCQkJCQlzaXplX3QgbGVuKSwKKwkJCSAgIGJvb2wgZ2VuZXJpYyk7CisjZGVmaW5lIElJT19TVChzaSwgcmIsIHNiLCBzaCkJCQkJCQlcCisJeyAuc2lnbiA9IHNpLCAucmVhbGJpdHMgPSByYiwgLnN0b3JhZ2ViaXRzID0gc2IsIC5zaGlmdCA9IHNoIH0KKworI2RlZmluZSBJSU9fQ0hBTihfdHlwZSwgX21vZCwgX2luZGV4ZWQsIF9wcm9jLCBfbmFtZSwgX2NoYW4sIF9jaGFuMiwJXAorCQkgX2luZl9tYXNrLCBfYWRkcmVzcywgX3NpLCBfc3R5cGUsIF9ldmVudF9tYXNrKQkJXAorCXsgLnR5cGUgPSBfdHlwZSwJCQkJCQlcCisJICAubW9kaWZpZWQgPSBfbW9kLAkJCQkJCVwKKwkgIC5pbmRleGVkID0gX2luZGV4ZWQsCQkJCQkJXAorCSAgLnByb2Nlc3NlZF92YWwgPSBfcHJvYywJCQkJCVwKKwkgIC5leHRlbmRfbmFtZSA9IF9uYW1lLAkJCQkJCVwKKwkgIC5jaGFubmVsID0gX2NoYW4sCQkJCQkJXAorCSAgLmNoYW5uZWwyID0gX2NoYW4yLAkJCQkJCVwKKwkgIC5pbmZvX21hc2sgPSBfaW5mX21hc2ssCQkJCQlcCisJICAuYWRkcmVzcyA9IF9hZGRyZXNzLAkJCQkJCVwKKwkgIC5zY2FuX2luZGV4ID0gX3NpLAkJCQkJCVwKKwkgIC5zY2FuX3R5cGUgPSBfc3R5cGUsCQkJCQkJXAorCSAgLmV2ZW50X21hc2sgPSBfZXZlbnRfbWFzayB9CisKKyNkZWZpbmUgSUlPX0NIQU5fU09GVF9USU1FU1RBTVAoX3NpKQkJCQkJXAorCXsgLnR5cGUgPSBJSU9fVElNRVNUQU1QLCAuY2hhbm5lbCA9IC0xLAkJCQlcCisJCQkuc2Nhbl9pbmRleCA9IF9zaSwgLnNjYW5fdHlwZSA9IElJT19TVCgncycsIDY0LCA2NCwgMCkgfQorCitpbnQgX19paW9fYWRkX2NoYW5fZGV2YXR0cihjb25zdCBjaGFyICpwb3N0Zml4LAorCQkJICAgY29uc3QgY2hhciAqZ3JvdXAsCisJCQkgICBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbiwKKwkJCSAgIHNzaXplX3QgKCpmdW5jKShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgICBjaGFyICpidWYpLAorCQkJICAgc3NpemVfdCAoKndyaXRlZnVuYykoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCQljb25zdCBjaGFyICpidWYsCisJCQkJCQlzaXplX3QgbGVuKSwKKwkJCSAgIGludCBtYXNrLAorCQkJICAgYm9vbCBnZW5lcmljLAorCQkJICAgc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGxpc3RfaGVhZCAqYXR0cl9saXN0KTsKIC8qKgogICogaWlvX2dldF90aW1lX25zKCkgLSB1dGlsaXR5IGZ1bmN0aW9uIHRvIGdldCBhIHRpbWUgc3RhbXAgZm9yIGV2ZW50cyBldGMKICAqKi8KQEAgLTQxLDI2ICsxOTEsNiBAQAogCXJldHVybiB0aW1lc3BlY190b19ucygmdHMpOwogfQogCi0vKioKLSAqIGlpb19hZGRfZXZlbnRfdG9fbGlzdCgpIC0gV3JhcHMgYWRkaW5nIHRvIGV2ZW50IGxpc3RzCi0gKiBAZWw6CQl0aGUgbGlzdCBlbGVtZW50IG9mIHRoZSBldmVudCB0byBiZSBoYW5kbGVkLgotICogQGhlYWQ6CXRoZSBsaXN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZlbnQgaGFuZGxlciBiZWluZyB1c2VkLgotICoKLSAqIERvZXMgcmVmZXJlbmNlIGNvdW50aW5nIHRvIGFsbG93IHNoYXJlZCBoYW5kbGVycy4KLSAqKi8KLXZvaWQgaWlvX2FkZF9ldmVudF90b19saXN0KHN0cnVjdCBpaW9fZXZlbnRfaGFuZGxlcl9saXN0ICplbCwKLQkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOwotCi0vKioKLSAqIGlpb19yZW1vdmVfZXZlbnRfZnJvbV9saXN0KCkgLSBXcmFwcyByZW1vdmluZyBmcm9tIGV2ZW50IGxpc3QKLSAqIEBlbDoJCWVsZW1lbnQgdG8gYmUgcmVtb3ZlZAotICogQGhlYWQ6CWFzc29jaWF0ZSBsaXN0IGhlYWQgZm9yIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4KLSAqCi0gKiBEb2VzIHJlZmVyZW5jZSBjb3VudGluZyB0byBhbGxvdyBzaGFyZWQgaGFuZGxlcnMuCi0gKiovCi12b2lkIGlpb19yZW1vdmVfZXZlbnRfZnJvbV9saXN0KHN0cnVjdCBpaW9fZXZlbnRfaGFuZGxlcl9saXN0ICplbCwKLQkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKLQogLyogRGV2aWNlIG9wZXJhdGluZyBtb2RlcyAqLwogI2RlZmluZSBJTkRJT19ESVJFQ1RfTU9ERQkJMHgwMQogI2RlZmluZSBJTkRJT19SSU5HX1RSSUdHRVJFRAkJMHgwMgpAQCAtNzAsNiArMjAwLDYyIEBACiAKIC8qIFZhc3QgbWFqb3JpdHkgb2YgdGhpcyBpcyBzZXQgYnkgdGhlIGluZHVzdHJpYWxpbyBzdWJzeXN0ZW0gb24gYQogICogY2FsbCB0byBpaW9fZGV2aWNlX3JlZ2lzdGVyLiAqLworI2RlZmluZSBJSU9fVkFMX0lOVCAxCisjZGVmaW5lIElJT19WQUxfSU5UX1BMVVNfTUlDUk8gMgorCisvKioKKyAqIHN0cnVjdCBpaW9faW5mbyAtIGNvbnN0YW50IGluZm9ybWF0aW9uIGFib3V0IGRldmljZQorICogQGRyaXZlcl9tb2R1bGU6CW1vZHVsZSBzdHJ1Y3R1cmUgdXNlZCB0byBlbnN1cmUgY29ycmVjdAorICoJCQlvd25lcnNoaXAgb2YgY2hyZGV2cyBldGMKKyAqIEBudW1faW50ZXJydXB0X2xpbmVzOm51bWJlciBvZiBwaHlzaWNhbCBpbnRlcnJ1cHQgbGluZXMgZnJvbSBkZXZpY2UKKyAqIEBldmVudF9hdHRyczoJZXZlbnQgY29udHJvbCBhdHRyaWJ1dGVzCisgKiBAYXR0cnM6CQlnZW5lcmFsIHB1cnBvc2UgZGV2aWNlIGF0dHJpYnV0ZXMKKyAqIEByZWFkX3JhdzoJCWZ1bmN0aW9uIHRvIHJlcXVlc3QgYSB2YWx1ZSBmcm9tIHRoZSBkZXZpY2UuCisgKgkJCW1hc2sgc3BlY2lmaWVzIHdoaWNoIHZhbHVlLiBOb3RlIDAgbWVhbnMgYSByZWFkaW5nIG9mCisgKgkJCXRoZSBjaGFubmVsIGluIHF1ZXN0aW9uLiAgUmV0dXJuIHZhbHVlIHdpbGwgc3BlY2lmeSB0aGUKKyAqCQkJdHlwZSBvZiB2YWx1ZSByZXR1cm5lZCBieSB0aGUgZGV2aWNlLiB2YWwgYW5kIHZhbDIgd2lsbAorICoJCQljb250YWluIHRoZSBlbGVtZW50cyBtYWtpbmcgdXAgdGhlIHJldHVybmVkIHZhbHVlLgorICogQHdyaXRlX3JhdzoJCWZ1bmN0aW9uIHRvIHdyaXRlIGEgdmFsdWUgdG8gdGhlIGRldmljZS4KKyAqCQkJUGFyYW1ldGVycyBhcmUgdGhlIHNhbWUgYXMgZm9yIHJlYWRfcmF3LgorICogQHJlYWRfZXZlbnRfY29uZmlnOglmaW5kIG91dCBpZiB0aGUgZXZlbnQgaXMgZW5hYmxlZC4KKyAqIEB3cml0ZV9ldmVudF9jb25maWc6CXNldCBpZiB0aGUgZXZlbnQgaXMgZW5hYmxlZC4KKyAqIEByZWFkX2V2ZW50X3ZhbHVlOglyZWFkIGEgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBldmVudC4gTWVhbmluZworICoJCQlpcyBldmVudCBkZXBlbmRhbnQuIGV2ZW50X2NvZGUgc3BlY2lmaWVzIHdoaWNoIGV2ZW50LgorICogQHdyaXRlX2V2ZW50X3ZhbHVlOgl3cml0ZSB0aGUgdmFsdWUgYXNzb2NpYXRlIHdpdGggdGhlIGV2ZW50LgorICoJCQlNZWFuaW5nIGlzIGV2ZW50IGRlcGVuZGVudC4KKyAqKi8KK3N0cnVjdCBpaW9faW5mbyB7CisJc3RydWN0IG1vZHVsZQkJCSpkcml2ZXJfbW9kdWxlOworCWludAkJCQludW1faW50ZXJydXB0X2xpbmVzOworCXN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAJCSpldmVudF9hdHRyczsKKwljb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwCSphdHRyczsKKworCWludCAoKnJlYWRfcmF3KShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAorCQkJc3RydWN0IGlpb19jaGFuX3NwZWMgY29uc3QgKmNoYW4sCisJCQlpbnQgKnZhbCwKKwkJCWludCAqdmFsMiwKKwkJCWxvbmcgbWFzayk7CisKKwlpbnQgKCp3cml0ZV9yYXcpKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCisJCQkgc3RydWN0IGlpb19jaGFuX3NwZWMgY29uc3QgKmNoYW4sCisJCQkgaW50IHZhbCwKKwkJCSBpbnQgdmFsMiwKKwkJCSBsb25nIG1hc2spOworCisJaW50ICgqcmVhZF9ldmVudF9jb25maWcpKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCisJCQkJIGludCBldmVudF9jb2RlKTsKKworCWludCAoKndyaXRlX2V2ZW50X2NvbmZpZykoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKKwkJCQkgIGludCBldmVudF9jb2RlLAorCQkJCSAgaW50IHN0YXRlKTsKKworCWludCAoKnJlYWRfZXZlbnRfdmFsdWUpKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCisJCQkJaW50IGV2ZW50X2NvZGUsCisJCQkJaW50ICp2YWwpOworCWludCAoKndyaXRlX2V2ZW50X3ZhbHVlKShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAorCQkJCSBpbnQgZXZlbnRfY29kZSwKKwkJCQkgaW50IHZhbCk7Cit9OwogCiAvKioKICAqIHN0cnVjdCBpaW9fZGV2IC0gaW5kdXN0cmlhbCBJL08gZGV2aWNlCkBAIC03OSwxMyArMjY1LDYgQEAKICAqIEBjdXJyZW50bW9kZToJW0RSSVZFUl0gY3VycmVudCBvcGVyYXRpbmcgbW9kZQogICogQGRldjoJCVtEUklWRVJdIGRldmljZSBzdHJ1Y3R1cmUsIHNob3VsZCBiZSBhc3NpZ25lZCBhIHBhcmVudAogICoJCQlhbmQgb3duZXIKLSAqIEBhdHRyczoJCVtEUklWRVJdIGdlbmVyYWwgcHVycG9zZSBkZXZpY2UgYXR0cmlidXRlcwotICogQGRyaXZlcl9tb2R1bGU6CVtEUklWRVJdIG1vZHVsZSBzdHJ1Y3R1cmUgdXNlZCB0byBlbnN1cmUgY29ycmVjdAotICoJCQlvd25lcnNoaXAgb2YgY2hyZGV2cyBldGMKLSAqIEBudW1faW50ZXJydXB0X2xpbmVzOltEUklWRVJdIG51bWJlciBvZiBwaHlzaWNhbCBpbnRlcnJ1cHQgbGluZXMgZnJvbSBkZXZpY2UKLSAqIEBpbnRlcnJ1cHRzOgkJW0lOVEVSTl0gaW50ZXJydXB0IGxpbmUgc3BlY2lmaWMgZXZlbnQgbGlzdHMgZXRjCi0gKiBAZXZlbnRfYXR0cnM6CVtEUklWRVJdIGV2ZW50IGNvbnRyb2wgYXR0cmlidXRlcwotICogQGV2ZW50X2NvbmZfYXR0cnM6CVtEUklWRVJdIGV2ZW50IGNvbmZpZ3VyYXRpb24gYXR0cmlidXRlcwogICogQGV2ZW50X2ludGVyZmFjZXM6CVtJTlRFUk5dIGV2ZW50IGNocmRldnMgYXNzb2NpYXRlZCB3aXRoIGludGVycnVwdCBsaW5lcwogICogQHJpbmc6CQlbRFJJVkVSXSBhbnkgcmluZyBidWZmZXIgcHJlc2VudAogICogQG1sb2NrOgkJW0lOVEVSTl0gbG9jayB1c2VkIHRvIHByZXZlbnQgc2ltdWx0YW5lb3VzIGRldmljZSBzdGF0ZQpAQCAtOTMsNiArMjcyLDExIEBACiAgKiBAYXZhaWxhYmxlX3NjYW5fbWFza3M6IFtEUklWRVJdIG9wdGlvbmFsIGFycmF5IG9mIGFsbG93ZWQgYml0bWFza3MKICAqIEB0cmlnOgkJW0lOVEVSTl0gY3VycmVudCBkZXZpY2UgdHJpZ2dlciAocmluZyBidWZmZXIgbW9kZXMpCiAgKiBAcG9sbGZ1bmM6CQlbRFJJVkVSXSBmdW5jdGlvbiBydW4gb24gdHJpZ2dlciBiZWluZyByZWNlaXZlZAorICogQGNoYW5uZWxzOgkJW0RSSVZFUl0gY2hhbm5lbCBzcGVjaWZpY2F0aW9uIHN0cnVjdHVyZSB0YWJsZQorICogQG51bV9jaGFubmVsczoJW0RSSVZFUl0gbnVtYmVyIG9mIGNoYW5lbHMgc3BlY2lmaWVkIGluIEBjaGFubmVscy4KKyAqIEBjaGFubmVsX2F0dHJfbGlzdDoJW0lOVEVSTl0ga2VlcCB0cmFjayBvZiBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgY2hhbm5lbAorICoJCQlhdHRyaWJ1dGVzLgorICogQG5hbWU6CQlbRFJJVkVSXSBuYW1lIG9mIHRoZSBkZXZpY2UuCiAgKiovCiBzdHJ1Y3QgaWlvX2RldiB7CiAJaW50CQkJCWlkOwpAQCAtMTAwLDEzICsyODQsNiBAQAogCWludAkJCQltb2RlczsKIAlpbnQJCQkJY3VycmVudG1vZGU7CiAJc3RydWN0IGRldmljZQkJCWRldjsKLQljb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwCSphdHRyczsKLQlzdHJ1Y3QgbW9kdWxlCQkJKmRyaXZlcl9tb2R1bGU7Ci0KLQlpbnQJCQkJbnVtX2ludGVycnVwdF9saW5lczsKLQlzdHJ1Y3QgaWlvX2ludGVycnVwdAkJKippbnRlcnJ1cHRzOwotCXN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAJCSpldmVudF9hdHRyczsKLQlzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwCQkqZXZlbnRfY29uZl9hdHRyczsKIAogCXN0cnVjdCBpaW9fZXZlbnRfaW50ZXJmYWNlCSpldmVudF9pbnRlcmZhY2VzOwogCkBAIC0xMTYsNiArMjkzLDEzIEBACiAJdTMyCQkJCSphdmFpbGFibGVfc2Nhbl9tYXNrczsKIAlzdHJ1Y3QgaWlvX3RyaWdnZXIJCSp0cmlnOwogCXN0cnVjdCBpaW9fcG9sbF9mdW5jCQkqcG9sbGZ1bmM7CisKKwlzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbm5lbHM7CisJaW50IG51bV9jaGFubmVsczsKKworCXN0cnVjdCBsaXN0X2hlYWQgY2hhbm5lbF9hdHRyX2xpc3Q7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBzdHJ1Y3QgaWlvX2luZm8gKmluZm87CiB9OwogCiAvKioKQEAgLTEzMSw0NyArMzE1LDYgQEAKIHZvaWQgaWlvX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyk7CiAKIC8qKgotICogc3RydWN0IGlpb19pbnRlcnJ1cHQgLSB3cmFwcGVyIHVzZWQgdG8gYWxsb3cgZWFzeSBoYW5kbGluZyBvZiBtdWx0aXBsZQotICoJCQlwaHlzaWNhbCBpbnRlcnJ1cHQgbGluZXMKLSAqIEBkZXZfaW5mbzoJCXRoZSBpaW8gZGV2aWNlIGZvciB3aGljaCB0aGUgaXMgYW4gaW50ZXJydXB0IGxpbmUKLSAqIEBsaW5lX251bWJlcjoJYXNzb2NpYXRlZCBsaW5lIG51bWJlcgotICogQGlkOgkJCWlkYSBhbGxvY2F0ZWQgdW5pcXVlIGlkIG51bWJlcgotICogQGlycToJCWFzc29jaWF0ZSBpbnRlcnJ1cHQgbnVtYmVyCi0gKiBAZXZfbGlzdDoJCWV2ZW50IGhhbmRsZXIgbGlzdCBmb3IgYXNzb2NpYXRlZCBldmVudHMKLSAqIEBldl9saXN0X2xvY2s6CWVuc3VyZSBvbmx5IG9uZSBhY2Nlc3MgdG8gbGlzdCBhdCBhIHRpbWUKLSAqKi8KLXN0cnVjdCBpaW9faW50ZXJydXB0IHsKLQlzdHJ1Y3QgaWlvX2RldgkJCSpkZXZfaW5mbzsKLQlpbnQJCQkJbGluZV9udW1iZXI7Ci0JaW50CQkJCWlkOwotCWludAkJCQlpcnE7Ci0Jc3RydWN0IGxpc3RfaGVhZAkJZXZfbGlzdDsKLQlzcGlubG9ja190CQkJZXZfbGlzdF9sb2NrOwotfTsKLQotI2RlZmluZSB0b19paW9faW50ZXJydXB0KGkpIGNvbnRhaW5lcl9vZihpLCBzdHJ1Y3QgaWlvX2ludGVycnVwdCwgZXZfbGlzdCkKLQotLyoqCi0gKiBpaW9fcmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoKSAtIFRlbGwgSUlPIGFib3V0IGludGVycnVwdCBsaW5lcwotICoKLSAqIEBpcnE6CQlUeXBpY2FsbHkgcHJvdmlkZWQgdmlhIHBsYXRmb3JtIGRhdGEKLSAqIEBkZXZfaW5mbzoJCUlJTyBkZXZpY2UgaW5mbyBzdHJ1Y3R1cmUgZm9yIGRldmljZQotICogQGxpbmVfbnVtYmVyOglXaGljaCBpbnRlcnJ1cHQgbGluZSBvZiB0aGUgZGV2aWNlIGlzIHRoaXM/Ci0gKiBAdHlwZToJCUludGVycnVwdCB0eXBlIChlLmcuIGVkZ2UgdHJpZ2dlcmVkIGV0YykKLSAqIEBuYW1lOgkJSWRlbnRpZnlpbmcgbmFtZS4KLSAqKi8KLWludCBpaW9fcmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUodW5zaWduZWQgaW50CQkJaXJxLAotCQkJCXN0cnVjdCBpaW9fZGV2CQkJKmRldl9pbmZvLAotCQkJCWludAkJCQlsaW5lX251bWJlciwKLQkJCQl1bnNpZ25lZCBsb25nCQkJdHlwZSwKLQkJCQljb25zdCBjaGFyCQkJKm5hbWUpOwotCi12b2lkIGlpb191bnJlZ2lzdGVyX2ludGVycnVwdF9saW5lKHN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbywKLQkJCQkgICBpbnQgbGluZV9udW1iZXIpOwotCi0KLQotLyoqCiAgKiBpaW9fcHVzaF9ldmVudCgpIC0gdHJ5IHRvIGFkZCBldmVudCB0byB0aGUgbGlzdCBmb3IgdXNlcnNwYWNlIHJlYWRpbmcKICAqIEBkZXZfaW5mbzoJCUlJTyBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAZXZfbGluZToJCVdoaWNoIGV2ZW50IGxpbmUgKGhhcmR3YXJlIGludGVycnVwdCkKQEAgLTE4Myw1MCArMzI2LDYgQEAKIAkJICBpbnQgZXZfY29kZSwKIAkJICBzNjQgdGltZXN0YW1wKTsKIAotLyoqCi0gKiBfX2lpb19wdXNoX2V2ZW50KCkgLSB0cmllcyB0byBhZGQgYW4gZXZlbnQgdG8gdGhlIGxpc3QgYXNzb2NpYXRlZCB3aXRoIGEgY2hyZGV2Ci0gKiBAZXZfaW50OgkJdGhlIGV2ZW50IGludGVyZmFjZSB0byB3aGljaCB3ZSBhcmUgcHVzaGluZyB0aGUgZXZlbnQKLSAqIEBldl9jb2RlOgkJdGhlIG91dGdvaW5nIGV2ZW50IGNvZGUKLSAqIEB0aW1lc3RhbXA6CQl0aW1lc3RhbXAgb2YgdGhlIGV2ZW50Ci0gKiBAc2hhcmVkX3BvaW50ZXJfcDoJdGhlIHNoYXJlZCBldmVudCBwb2ludGVyCi0gKiovCi1pbnQgX19paW9fcHVzaF9ldmVudChzdHJ1Y3QgaWlvX2V2ZW50X2ludGVyZmFjZSAqZXZfaW50LAotCQkgICAgaW50IGV2X2NvZGUsCi0JCSAgICBzNjQgdGltZXN0YW1wLAotCQkgICAgc3RydWN0IGlpb19zaGFyZWRfZXZfcG9pbnRlcioKLQkJICAgIHNoYXJlZF9wb2ludGVyX3ApOwotLyoqCi0gKiBfX2lpb19jaGFuZ2VfZXZlbnQoKSAtIGNoYW5nZSBhbiBldmVudCBjb2RlIGluIGNhc2Ugb2YgZXZlbnQgZXNjYWxhdGlvbgotICogQGV2OgkJCXRoZSBldmVudCB0byBiZSBjaGFuZ2VkCi0gKiBAZXZfY29kZToJCW5ldyBldmVudCBjb2RlCi0gKiBAdGltZXN0YW1wOgkJbmV3IHRpbWVzdGFtcAotICoqLwotdm9pZCBfX2lpb19jaGFuZ2VfZXZlbnQoc3RydWN0IGlpb19kZXRlY3RlZF9ldmVudF9saXN0ICpldiwKLQkJCWludCBldl9jb2RlLAotCQkJczY0IHRpbWVzdGFtcCk7Ci0KLS8qKgotICogaWlvX3NldHVwX2V2X2ludCgpIC0gY29uZmlndXJlIGFuIGV2ZW50IGludGVyZmFjZSAoY2hyZGV2KQotICogQG5hbWU6CQluYW1lIHVzZWQgZm9yIHJlc3VsdGluZyBzeXNmcyBkaXJlY3RvcnkgZXRjLgotICogQGV2X2ludDoJCWludGVyZmFjZSB3ZSBhcmUgY29uZmlndXJpbmcKLSAqIEBvd25lcjoJCW1vZHVsZSB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciByZWdpc3RlcmluZyB0aGlzIGV2X2ludAotICogQGRldjoJCWRldmljZSB3aG9zZSBldl9pbnQgdGhpcyBpcwotICoqLwotaW50IGlpb19zZXR1cF9ldl9pbnQoc3RydWN0IGlpb19ldmVudF9pbnRlcmZhY2UgKmV2X2ludCwKLQkJICAgICBjb25zdCBjaGFyICpuYW1lLAotCQkgICAgIHN0cnVjdCBtb2R1bGUgKm93bmVyLAotCQkgICAgIHN0cnVjdCBkZXZpY2UgKmRldik7Ci0KLXZvaWQgaWlvX2ZyZWVfZXZfaW50KHN0cnVjdCBpaW9fZXZlbnRfaW50ZXJmYWNlICpldl9pbnQpOwotCi0vKioKLSAqIGlpb19hbGxvY2F0ZV9jaHJkZXYoKSAtIEFsbG9jYXRlIGEgY2hyZGV2Ci0gKiBAaGFuZGxlcjoJc3RydWN0IHRoYXQgY29udGFpbnMgcmVsZXZhbnQgZmlsZSBoYW5kbGluZyBmb3IgY2hyZGV2Ci0gKiBAZGV2X2luZm86CWlpb19kZXYgZm9yIHdoaWNoIGNocmRldiBpcyBiZWluZyBjcmVhdGVkCi0gKiovCi1pbnQgaWlvX2FsbG9jYXRlX2NocmRldihzdHJ1Y3QgaWlvX2hhbmRsZXIgKmhhbmRsZXIsIHN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyk7Ci12b2lkIGlpb19kZWFsbG9jYXRlX2NocmRldihzdHJ1Y3QgaWlvX2hhbmRsZXIgKmhhbmRsZXIpOwotCiAvKiBVc2VkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gYmlwb2xhciBhbmQgdW5pcG9sYXIgc2NhbiBlbGVtZW5lbnRzLgogICogV2hpbHN0IHRoaXMgbWF5IHNlZW0gb2J2aW91cywgd2UgbWF5IHdlbGwgd2FudCB0byBjaGFuZ2UgdGhlIHJlcHJlc2VudGF0aW9uCiAgKiBpbiB0aGUgZnV0dXJlISovCkBAIC0yNjQsMTAgKzM2MywyNSBAQAogCXJldHVybiBkLT5kZXZfZGF0YTsKIH0KIAorCisvKiBDYW4gd2UgbWFrZSB0aGlzIHNtYWxsZXI/ICovCisjZGVmaW5lIElJT19BTElHTiBMMV9DQUNIRV9CWVRFUwogLyoqCiAgKiBpaW9fYWxsb2NhdGVfZGV2aWNlKCkgLSBhbGxvY2F0ZSBhbiBpaW9fZGV2IGZyb20gYSBkcml2ZXIKKyAqIEBzaXplb2ZfcHJpdjogU3BhY2UgdG8gYWxsb2NhdGUgZm9yIHByaXZhdGUgc3RydWN0dXJlLgogICoqLwotc3RydWN0IGlpb19kZXYgKmlpb19hbGxvY2F0ZV9kZXZpY2Uodm9pZCk7CitzdHJ1Y3QgaWlvX2RldiAqaWlvX2FsbG9jYXRlX2RldmljZShpbnQgc2l6ZW9mX3ByaXYpOworCitzdGF0aWMgaW5saW5lIHZvaWQgKmlpb19wcml2KGNvbnN0IHN0cnVjdCBpaW9fZGV2ICpkZXYpCit7CisJcmV0dXJuIChjaGFyICopZGV2ICsgQUxJR04oc2l6ZW9mKHN0cnVjdCBpaW9fZGV2KSwgSUlPX0FMSUdOKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaWlvX2RldiAqaWlvX3ByaXZfdG9fZGV2KHZvaWQgKnByaXYpCit7CisJcmV0dXJuIChzdHJ1Y3QgaWlvX2RldiAqKSgoY2hhciAqKXByaXYgLQorCQkJCSAgQUxJR04oc2l6ZW9mKHN0cnVjdCBpaW9fZGV2KSwgSUlPX0FMSUdOKSk7Cit9CiAKIC8qKgogICogaWlvX2ZyZWVfZGV2aWNlKCkgLSBmcmVlIGFuIGlpb19kZXYgZnJvbSBhIGRyaXZlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L0tjb25maWcKaW5kZXggMzFhNjIzMy4uZTBlMDE0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9LY29uZmlnCkBAIC0zLDI5ICszLDEzIEBACiAjCiBjb21tZW50ICJJbmVydGlhbCBtZWFzdXJlbWVudCB1bml0cyIKIAotY29uZmlnIEFESVMxNjMwMAotCXRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBBRElTMTYzMDAgSU1VIFNQSSBkcml2ZXIiCi0JZGVwZW5kcyBvbiBTUEkKLQlzZWxlY3QgSUlPX1NXX1JJTkcgaWYgSUlPX1JJTkdfQlVGRkVSCi0Jc2VsZWN0IElJT19UUklHR0VSIGlmIElJT19SSU5HX0JVRkZFUgotCWhlbHAKLQkgIFNheSB5ZXMgaGVyZSB0byBidWlsZCBzdXBwb3J0IGZvciBBbmFsb2cgRGV2aWNlcyBhZGlzMTYzMDAgZm91ciBkZWdyZWVzCi0JICBvZiBmcmVlZG9tIGluZXJ0aWFsIHNlbnNvci4KLQotY29uZmlnIEFESVMxNjM1MAotCXRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBBRElTMTYzNTAvNTQvNTUvNjAvNjIvNjQvNjUgSU1VIFNQSSBkcml2ZXIiCi0JZGVwZW5kcyBvbiBTUEkKLQlzZWxlY3QgSUlPX1RSSUdHRVIgaWYgSUlPX1JJTkdfQlVGRkVSCi0Jc2VsZWN0IElJT19TV19SSU5HIGlmIElJT19SSU5HX0JVRkZFUgotCWhlbHAKLQkgIFNheSB5ZXMgaGVyZSB0byBidWlsZCBzdXBwb3J0IGZvciBBbmFsb2cgRGV2aWNlcyBhZGlzMTYzNTAvNTQvNTUvNjAvNjIvNjQvNjUKLQkgIGhpZ2ggcHJlY2lzaW9uIHRyaS1heGlzIGluZXJ0aWFsIHNlbnNvci4KLQogY29uZmlnIEFESVMxNjQwMAotCXRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBBRElTMTY0MDAvNSBJTVUgU1BJIGRyaXZlciIKKwl0cmlzdGF0ZSAiQW5hbG9nIERldmljZXMgQURJUzE2NDAwIGFuZCBzaW1pbGFyIElNVSBTUEkgZHJpdmVyIgogCWRlcGVuZHMgb24gU1BJCiAJc2VsZWN0IElJT19TV19SSU5HIGlmIElJT19SSU5HX0JVRkZFUgogCXNlbGVjdCBJSU9fVFJJR0dFUiBpZiBJSU9fUklOR19CVUZGRVIKIAloZWxwCi0JICBTYXkgeWVzIGhlcmUgdG8gYnVpbGQgc3VwcG9ydCBmb3IgQW5hbG9nIERldmljZXMgYWRpczE2NDAwLzUgdHJpYXhpYWwKLQkgIGluZXJ0aWFsIHNlbnNvciB3aXRoIE1hZ25ldG9tZXRlci4KKwkgIFNheSB5ZXMgaGVyZSB0byBidWlsZCBzdXBwb3J0IGZvciBBbmFsb2cgRGV2aWNlcyBhZGlzMTYzMDAsIGFkaXMxNjM1MCwKKwkgIGFkaXMxNjM1NCwgYWRpczE2MzU1LCBhZGlzMTYzNjAsIGFkaXMxNjM2MiwgYWRpczE2MzY0LCBhZGlzMTYzNjUsCisJICBhZGlzMTY0MDAgYW5kIGFkaXMxNjQwNSB0cmlheGlhbCBpbmVydGlhbCBzZW5zb3JzIChhZGlzMTY0MDAgc2VyaWVzCisJICBhbHNvIGhhdmUgbWFnbmV0b21ldGVycykuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L01ha2VmaWxlCmluZGV4IGYzYjQ1MGIuLmQ0NmE2OTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L01ha2VmaWxlCkBAIC0yLDE0ICsyLDYgQEAKICMgTWFrZWZpbGUgZm9yIEluZXJ0aWFsIE1lYXN1cmVtZW50IFVuaXRzCiAjCiAKLWFkaXMxNjMwMC15ICAgICAgICAgICAgIDo9IGFkaXMxNjMwMF9jb3JlLm8KLWFkaXMxNjMwMC0kKENPTkZJR19JSU9fUklOR19CVUZGRVIpICs9IGFkaXMxNjMwMF9yaW5nLm8gYWRpczE2MzAwX3RyaWdnZXIubwotb2JqLSQoQ09ORklHX0FESVMxNjMwMCkgKz0gYWRpczE2MzAwLm8KLQotYWRpczE2MzUwLXkgICAgICAgICAgICAgOj0gYWRpczE2MzUwX2NvcmUubwotYWRpczE2MzUwLSQoQ09ORklHX0lJT19SSU5HX0JVRkZFUikgKz0gYWRpczE2MzUwX3JpbmcubyBhZGlzMTYzNTBfdHJpZ2dlci5vCi1vYmotJChDT05GSUdfQURJUzE2MzUwKSArPSBhZGlzMTYzNTAubwotCiBhZGlzMTY0MDAteSAgICAgICAgICAgICA6PSBhZGlzMTY0MDBfY29yZS5vCiBhZGlzMTY0MDAtJChDT05GSUdfSUlPX1JJTkdfQlVGRkVSKSArPSBhZGlzMTY0MDBfcmluZy5vIGFkaXMxNjQwMF90cmlnZ2VyLm8KIG9iai0kKENPTkZJR19BRElTMTY0MDApICs9IGFkaXMxNjQwMC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTYzMDAuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjMwMC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDk1NzU5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjMwMC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTg0ICswLDAgQEAKLSNpZm5kZWYgU1BJX0FESVMxNjMwMF9IXwotI2RlZmluZSBTUElfQURJUzE2MzAwX0hfCi0KLSNkZWZpbmUgQURJUzE2MzAwX1NUQVJUVVBfREVMQVkJMjIwIC8qIG1zICovCi0KLSNkZWZpbmUgQURJUzE2MzAwX1JFQURfUkVHKGEpICAgIGEKLSNkZWZpbmUgQURJUzE2MzAwX1dSSVRFX1JFRyhhKSAoKGEpIHwgMHg4MCkKLQotI2RlZmluZSBBRElTMTYzMDBfRkxBU0hfQ05UICAweDAwIC8qIEZsYXNoIG1lbW9yeSB3cml0ZSBjb3VudCAqLwotI2RlZmluZSBBRElTMTYzMDBfU1VQUExZX09VVCAweDAyIC8qIFBvd2VyIHN1cHBseSBtZWFzdXJlbWVudCAqLwotI2RlZmluZSBBRElTMTYzMDBfWEdZUk9fT1VUIDB4MDQgLyogWC1heGlzIGd5cm9zY29wZSBvdXRwdXQgKi8KLSNkZWZpbmUgQURJUzE2MzAwX1hBQ0NMX09VVCAweDBBIC8qIFgtYXhpcyBhY2NlbGVyb21ldGVyIG91dHB1dCAqLwotI2RlZmluZSBBRElTMTYzMDBfWUFDQ0xfT1VUIDB4MEMgLyogWS1heGlzIGFjY2VsZXJvbWV0ZXIgb3V0cHV0ICovCi0jZGVmaW5lIEFESVMxNjMwMF9aQUNDTF9PVVQgMHgwRSAvKiBaLWF4aXMgYWNjZWxlcm9tZXRlciBvdXRwdXQgKi8KLSNkZWZpbmUgQURJUzE2MzAwX1RFTVBfT1VUICAweDEwIC8qIFRlbXBlcmF0dXJlIG91dHB1dCAqLwotI2RlZmluZSBBRElTMTYzMDBfWElOQ0xJX09VVCAweDEyIC8qIFgtYXhpcyBpbmNsaW5vbWV0ZXIgb3V0cHV0IG1lYXN1cmVtZW50ICovCi0jZGVmaW5lIEFESVMxNjMwMF9ZSU5DTElfT1VUIDB4MTQgLyogWS1heGlzIGluY2xpbm9tZXRlciBvdXRwdXQgbWVhc3VyZW1lbnQgKi8KLSNkZWZpbmUgQURJUzE2MzAwX0FVWF9BREMgICAweDE2IC8qIEF1eGlsaWFyeSBBREMgbWVhc3VyZW1lbnQgKi8KLQotLyogQ2FsaWJyYXRpb24gcGFyYW1ldGVycyAqLwotI2RlZmluZSBBRElTMTYzMDBfWEdZUk9fT0ZGIDB4MUEgLyogWC1heGlzIGd5cm9zY29wZSBiaWFzIG9mZnNldCBmYWN0b3IgKi8KLSNkZWZpbmUgQURJUzE2MzAwX1hBQ0NMX09GRiAweDIwIC8qIFgtYXhpcyBhY2NlbGVyYXRpb24gYmlhcyBvZmZzZXQgZmFjdG9yICovCi0jZGVmaW5lIEFESVMxNjMwMF9ZQUNDTF9PRkYgMHgyMiAvKiBZLWF4aXMgYWNjZWxlcmF0aW9uIGJpYXMgb2Zmc2V0IGZhY3RvciAqLwotI2RlZmluZSBBRElTMTYzMDBfWkFDQ0xfT0ZGIDB4MjQgLyogWi1heGlzIGFjY2VsZXJhdGlvbiBiaWFzIG9mZnNldCBmYWN0b3IgKi8KLQotI2RlZmluZSBBRElTMTYzMDBfR1BJT19DVFJMIDB4MzIgLyogQXV4aWxpYXJ5IGRpZ2l0YWwgaW5wdXQvb3V0cHV0IGNvbnRyb2wgKi8KLSNkZWZpbmUgQURJUzE2MzAwX01TQ19DVFJMICAweDM0IC8qIE1pc2NlbGxhbmVvdXMgY29udHJvbCAqLwotI2RlZmluZSBBRElTMTYzMDBfU01QTF9QUkQgIDB4MzYgLyogSW50ZXJuYWwgc2FtcGxlIHBlcmlvZCAocmF0ZSkgY29udHJvbCAqLwotI2RlZmluZSBBRElTMTYzMDBfU0VOU19BVkcgIDB4MzggLyogRHluYW1pYyByYW5nZSBhbmQgZGlnaXRhbCBmaWx0ZXIgY29udHJvbCAqLwotI2RlZmluZSBBRElTMTYzMDBfU0xQX0NOVCAgIDB4M0EgLyogU2xlZXAgbW9kZSBjb250cm9sICovCi0jZGVmaW5lIEFESVMxNjMwMF9ESUFHX1NUQVQgMHgzQyAvKiBTeXN0ZW0gc3RhdHVzICovCi0KLS8qIEFsYXJtIGZ1bmN0aW9ucyAqLwotI2RlZmluZSBBRElTMTYzMDBfR0xPQl9DTUQgIDB4M0UgLyogU3lzdGVtIGNvbW1hbmQgKi8KLSNkZWZpbmUgQURJUzE2MzAwX0FMTV9NQUcxICAweDI2IC8qIEFsYXJtIDEgYW1wbGl0dWRlIHRocmVzaG9sZCAqLwotI2RlZmluZSBBRElTMTYzMDBfQUxNX01BRzIgIDB4MjggLyogQWxhcm0gMiBhbXBsaXR1ZGUgdGhyZXNob2xkICovCi0jZGVmaW5lIEFESVMxNjMwMF9BTE1fU01QTDEgMHgyQSAvKiBBbGFybSAxIHNhbXBsZSBzaXplICovCi0jZGVmaW5lIEFESVMxNjMwMF9BTE1fU01QTDIgMHgyQyAvKiBBbGFybSAyIHNhbXBsZSBzaXplICovCi0jZGVmaW5lIEFESVMxNjMwMF9BTE1fQ1RSTCAgMHgyRSAvKiBBbGFybSBjb250cm9sICovCi0jZGVmaW5lIEFESVMxNjMwMF9BVVhfREFDICAgMHgzMCAvKiBBdXhpbGlhcnkgREFDIGRhdGEgKi8KLQotI2RlZmluZSBBRElTMTYzMDBfRVJST1JfQUNUSVZFCQkJKDE8PDE0KQotI2RlZmluZSBBRElTMTYzMDBfTkVXX0RBVEEJCQkoMTw8MTUpCi0KLS8qIE1TQ19DVFJMICovCi0jZGVmaW5lIEFESVMxNjMwMF9NU0NfQ1RSTF9NRU1fVEVTVAkJKDE8PDExKQotI2RlZmluZSBBRElTMTYzMDBfTVNDX0NUUkxfSU5UX1NFTEZfVEVTVAkoMTw8MTApCi0jZGVmaW5lIEFESVMxNjMwMF9NU0NfQ1RSTF9ORUdfU0VMRl9URVNUCSgxPDw5KQotI2RlZmluZSBBRElTMTYzMDBfTVNDX0NUUkxfUE9TX1NFTEZfVEVTVAkoMTw8OCkKLSNkZWZpbmUgQURJUzE2MzAwX01TQ19DVFJMX0dZUk9fQklBUwkJKDE8PDcpCi0jZGVmaW5lIEFESVMxNjMwMF9NU0NfQ1RSTF9BQ0NMX0FMSUdOCQkoMTw8NikKLSNkZWZpbmUgQURJUzE2MzAwX01TQ19DVFJMX0RBVEFfUkRZX0VOCQkoMTw8MikKLSNkZWZpbmUgQURJUzE2MzAwX01TQ19DVFJMX0RBVEFfUkRZX1BPTF9ISUdICSgxPDwxKQotI2RlZmluZSBBRElTMTYzMDBfTVNDX0NUUkxfREFUQV9SRFlfRElPMgkoMTw8MCkKLQotLyogU01QTF9QUkQgKi8KLSNkZWZpbmUgQURJUzE2MzAwX1NNUExfUFJEX1RJTUVfQkFTRQkoMTw8NykKLSNkZWZpbmUgQURJUzE2MzAwX1NNUExfUFJEX0RJVl9NQVNLCTB4N0YKLQotLyogRElBR19TVEFUICovCi0jZGVmaW5lIEFESVMxNjMwMF9ESUFHX1NUQVRfWkFDQ0xfRkFJTAkoMTw8MTUpCi0jZGVmaW5lIEFESVMxNjMwMF9ESUFHX1NUQVRfWUFDQ0xfRkFJTAkoMTw8MTQpCi0jZGVmaW5lIEFESVMxNjMwMF9ESUFHX1NUQVRfWEFDQ0xfRkFJTAkoMTw8MTMpCi0jZGVmaW5lIEFESVMxNjMwMF9ESUFHX1NUQVRfWEdZUk9fRkFJTAkoMTw8MTApCi0jZGVmaW5lIEFESVMxNjMwMF9ESUFHX1NUQVRfQUxBUk0yCSgxPDw5KQotI2RlZmluZSBBRElTMTYzMDBfRElBR19TVEFUX0FMQVJNMQkoMTw8OCkKLSNkZWZpbmUgQURJUzE2MzAwX0RJQUdfU1RBVF9GTEFTSF9DSEsJKDE8PDYpCi0jZGVmaW5lIEFESVMxNjMwMF9ESUFHX1NUQVRfU0VMRl9URVNUCSgxPDw1KQotI2RlZmluZSBBRElTMTYzMDBfRElBR19TVEFUX09WRVJGTE9XCSgxPDw0KQotI2RlZmluZSBBRElTMTYzMDBfRElBR19TVEFUX1NQSV9GQUlMCSgxPDwzKQotI2RlZmluZSBBRElTMTYzMDBfRElBR19TVEFUX0ZMQVNIX1VQVAkoMTw8MikKLSNkZWZpbmUgQURJUzE2MzAwX0RJQUdfU1RBVF9QT1dFUl9ISUdICSgxPDwxKQotI2RlZmluZSBBRElTMTYzMDBfRElBR19TVEFUX1BPV0VSX0xPVwkoMTw8MCkKLQotLyogR0xPQl9DTUQgKi8KLSNkZWZpbmUgQURJUzE2MzAwX0dMT0JfQ01EX1NXX1JFU0VUCSgxPDw3KQotI2RlZmluZSBBRElTMTYzMDBfR0xPQl9DTURfUF9BVVRPX05VTEwJKDE8PDQpCi0jZGVmaW5lIEFESVMxNjMwMF9HTE9CX0NNRF9GTEFTSF9VUEQJKDE8PDMpCi0jZGVmaW5lIEFESVMxNjMwMF9HTE9CX0NNRF9EQUNfTEFUQ0gJKDE8PDIpCi0jZGVmaW5lIEFESVMxNjMwMF9HTE9CX0NNRF9GQUNfQ0FMSUIJKDE8PDEpCi0jZGVmaW5lIEFESVMxNjMwMF9HTE9CX0NNRF9BVVRPX05VTEwJKDE8PDApCi0KLS8qIFNMUF9DTlQgKi8KLSNkZWZpbmUgQURJUzE2MzAwX1NMUF9DTlRfUE9XRVJfT0ZGCSgxPDw4KQotCi0jZGVmaW5lIEFESVMxNjMwMF9NQVhfVFggMTgKLSNkZWZpbmUgQURJUzE2MzAwX01BWF9SWCAxOAotCi0jZGVmaW5lIEFESVMxNjMwMF9TUElfU0xPVwkodTMyKSgzMDAgKiAxMDAwKQotI2RlZmluZSBBRElTMTYzMDBfU1BJX0JVUlNUCSh1MzIpKDEwMDAgKiAxMDAwKQotI2RlZmluZSBBRElTMTYzMDBfU1BJX0ZBU1QJKHUzMikoMjAwMCAqIDEwMDApCi0KLS8qKgotICogc3RydWN0IGFkaXMxNjMwMF9zdGF0ZSAtIGRldmljZSBpbnN0YW5jZSBzcGVjaWZpYyBkYXRhCi0gKiBAdXM6CQkJYWN0dWFsIHNwaV9kZXZpY2UKLSAqIEB3b3JrX3RyaWdnZXJfdG9fcmluZzogYmggZm9yIHRyaWdnZXJlZCBldmVudCBoYW5kbGluZwotICogQGludGVyOgkJdXNlZCB0byBjaGVjayBpZiBuZXcgaW50ZXJydXB0IGhhcyBiZWVuIHRyaWdnZXJlZAotICogQGxhc3RfdGltZXN0YW1wOglwYXNzaW5nIHRpbWVzdGFtcCBmcm9tIHRoIHRvIGJoIG9mIGludGVycnVwdCBoYW5kbGVyCi0gKiBAaW5kaW9fZGV2OgkJaW5kdXN0cmlhbCBJL08gZGV2aWNlIHN0cnVjdHVyZQotICogQHRyaWc6CQlkYXRhIHJlYWR5IHRyaWdnZXIgcmVnaXN0ZXJlZCB3aXRoIGlpbwotICogQHR4OgkJCXRyYW5zbWl0IGJ1ZmZlcgotICogQHJ4OgkJCXJlY2VpdmUgYnVmZmVyCi0gKiBAYnVmX2xvY2s6CQltdXRleCB0byBwcm90ZWN0IHR4IGFuZCByeAotICoqLwotc3RydWN0IGFkaXMxNjMwMF9zdGF0ZSB7Ci0Jc3RydWN0IHNwaV9kZXZpY2UJCSp1czsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCXdvcmtfdHJpZ2dlcl90b19yaW5nOwotCXM2NAkJCQlsYXN0X3RpbWVzdGFtcDsKLQlzdHJ1Y3QgaWlvX2RldgkJCSppbmRpb19kZXY7Ci0Jc3RydWN0IGlpb190cmlnZ2VyCQkqdHJpZzsKLQl1OAkJCQkqdHg7Ci0JdTgJCQkJKnJ4OwotCXN0cnVjdCBtdXRleAkJCWJ1Zl9sb2NrOwotfTsKLQotaW50IGFkaXMxNjMwMF9zZXRfaXJxKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBlbmFibGUpOwotCi0jaWZkZWYgQ09ORklHX0lJT19SSU5HX0JVRkZFUgotLyogQXQgdGhlIG1vbWVudCB0cmlnZ2VycyBhcmUgb25seSB1c2VkIGZvciByaW5nIGJ1ZmZlcgotICogZmlsbGluZy4gVGhpcyBtYXkgY2hhbmdlIQotICovCi0KLSNkZWZpbmUgQURJUzE2MzAwX1NDQU5fU1VQUExZCTAKLSNkZWZpbmUgQURJUzE2MzAwX1NDQU5fR1lST19YCTEKLSNkZWZpbmUgQURJUzE2MzAwX1NDQU5fQUNDX1gJMgotI2RlZmluZSBBRElTMTYzMDBfU0NBTl9BQ0NfWQkzCi0jZGVmaW5lIEFESVMxNjMwMF9TQ0FOX0FDQ19aCTQKLSNkZWZpbmUgQURJUzE2MzAwX1NDQU5fVEVNUAk1Ci0jZGVmaW5lIEFESVMxNjMwMF9TQ0FOX0FEQ18wCTYKLSNkZWZpbmUgQURJUzE2MzAwX1NDQU5fSU5DTElfWAk3Ci0jZGVmaW5lIEFESVMxNjMwMF9TQ0FOX0lOQ0xJX1kJOAotCi12b2lkIGFkaXMxNjMwMF9yZW1vdmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKLWludCBhZGlzMTYzMDBfcHJvYmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKLQotc3NpemVfdCBhZGlzMTYzMDBfcmVhZF9kYXRhX2Zyb21fcmluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICAgICAgY2hhciAqYnVmKTsKLQotCi1pbnQgYWRpczE2MzAwX2NvbmZpZ3VyZV9yaW5nKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwotdm9pZCBhZGlzMTYzMDBfdW5jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKLQotaW50IGFkaXMxNjMwMF9pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyk7Ci12b2lkIGFkaXMxNjMwMF91bmluaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKTsKLSNlbHNlIC8qIENPTkZJR19JSU9fUklOR19CVUZGRVIgKi8KLQotc3RhdGljIGlubGluZSB2b2lkIGFkaXMxNjMwMF9yZW1vdmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQotewotfQotCi1zdGF0aWMgaW5saW5lIGludCBhZGlzMTYzMDBfcHJvYmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHNzaXplX3QKLWFkaXMxNjMwMF9yZWFkX2RhdGFfZnJvbV9yaW5nKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJICAgICAgY2hhciAqYnVmKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFkaXMxNjMwMF9jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRpczE2MzAwX3VuY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKLXsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYWRpczE2MzAwX2luaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRpczE2MzAwX3VuaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpCi17Ci19Ci0KLSNlbmRpZiAvKiBDT05GSUdfSUlPX1JJTkdfQlVGRkVSICovCi0jZW5kaWYgLyogU1BJX0FESVMxNjMwMF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzAwX2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjMwMF9jb3JlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhZDEzZjQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzAwX2NvcmUuYworKysgL2Rldi9udWxsCkBAIC0xLDc1NiArMCwwIEBACi0vKgotICogQURJUzE2MzAwIEZvdXIgRGVncmVlcyBvZiBGcmVlZG9tIEluZXJ0aWFsIFNlbnNvciBEcml2ZXIKLSAqCi0gKiBDb3B5cmlnaHQgMjAxMCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0KLSNpbmNsdWRlICIuLi9paW8uaCIKLSNpbmNsdWRlICIuLi9zeXNmcy5oIgotI2luY2x1ZGUgIi4uL3JpbmdfZ2VuZXJpYy5oIgotI2luY2x1ZGUgIi4uL2FjY2VsL2FjY2VsLmgiCi0jaW5jbHVkZSAiLi4vYWNjZWwvaW5jbGlub21ldGVyLmgiCi0jaW5jbHVkZSAiLi4vZ3lyby9neXJvLmgiCi0jaW5jbHVkZSAiLi4vYWRjL2FkYy5oIgotCi0jaW5jbHVkZSAiYWRpczE2MzAwLmgiCi0KLSNkZWZpbmUgRFJJVkVSX05BTUUJCSJhZGlzMTYzMDAiCi0KLXN0YXRpYyBpbnQgYWRpczE2MzAwX2NoZWNrX3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkZXYpOwotCi0vKioKLSAqIGFkaXMxNjMwMF9zcGlfd3JpdGVfcmVnXzgoKSAtIHdyaXRlIHNpbmdsZSBieXRlIHRvIGEgcmVnaXN0ZXIKLSAqIEBkZXY6IGRldmljZSBhc3NvY2lhdGVkIHdpdGggY2hpbGQgb2YgYWN0dWFsIGRldmljZSAoaWlvX2RldiBvciBpaW9fdHJpZykKLSAqIEByZWdfYWRkcmVzczogdGhlIGFkZHJlc3Mgb2YgdGhlIHJlZ2lzdGVyIHRvIGJlIHdyaXR0ZW4KLSAqIEB2YWw6IHRoZSB2YWx1ZSB0byB3cml0ZQotICoqLwotc3RhdGljIGludCBhZGlzMTYzMDBfc3BpX3dyaXRlX3JlZ184KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJdTggcmVnX2FkZHJlc3MsCi0JCXU4IHZhbCkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgYWRpczE2MzAwX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKLQotCW11dGV4X2xvY2soJnN0LT5idWZfbG9jayk7Ci0Jc3QtPnR4WzBdID0gQURJUzE2MzAwX1dSSVRFX1JFRyhyZWdfYWRkcmVzcyk7Ci0Jc3QtPnR4WzFdID0gdmFsOwotCi0JcmV0ID0gc3BpX3dyaXRlKHN0LT51cywgc3QtPnR4LCAyKTsKLQltdXRleF91bmxvY2soJnN0LT5idWZfbG9jayk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGFkaXMxNjMwMF9zcGlfd3JpdGVfcmVnXzE2KCkgLSB3cml0ZSAyIGJ5dGVzIHRvIGEgcGFpciBvZiByZWdpc3RlcnMKLSAqIEBkZXY6IGRldmljZSBhc3NvY2lhdGVkIHdpdGggY2hpbGQgb2YgYWN0dWFsIGRldmljZSAoaWlvX2RldiBvciBpaW9fdHJpZykKLSAqIEByZWdfYWRkcmVzczogdGhlIGFkZHJlc3Mgb2YgdGhlIGxvd2VyIG9mIHRoZSB0d28gcmVnaXN0ZXJzLiBTZWNvbmQgcmVnaXN0ZXIKLSAqICAgICAgICAgICAgICAgaXMgYXNzdW1lZCB0byBoYXZlIGFkZHJlc3Mgb25lIGdyZWF0ZXIuCi0gKiBAdmFsOiB2YWx1ZSB0byBiZSB3cml0dGVuCi0gKiovCi1zdGF0aWMgaW50IGFkaXMxNjMwMF9zcGlfd3JpdGVfcmVnXzE2KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJdTggbG93ZXJfcmVnX2FkZHJlc3MsCi0JCXUxNiB2YWx1ZSkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBzcGlfbWVzc2FnZSBtc2c7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBhZGlzMTYzMDBfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOwotCXN0cnVjdCBzcGlfdHJhbnNmZXIgeGZlcnNbXSA9IHsKLQkJewotCQkJLnR4X2J1ZiA9IHN0LT50eCwKLQkJCS5iaXRzX3Blcl93b3JkID0gOCwKLQkJCS5sZW4gPSAyLAotCQkJLmNzX2NoYW5nZSA9IDEsCi0JCQkuZGVsYXlfdXNlY3MgPSA3NSwKLQkJfSwgewotCQkJLnR4X2J1ZiA9IHN0LT50eCArIDIsCi0JCQkuYml0c19wZXJfd29yZCA9IDgsCi0JCQkubGVuID0gMiwKLQkJCS5jc19jaGFuZ2UgPSAxLAotCQkJLmRlbGF5X3VzZWNzID0gNzUsCi0JCX0sCi0JfTsKLQotCW11dGV4X2xvY2soJnN0LT5idWZfbG9jayk7Ci0Jc3QtPnR4WzBdID0gQURJUzE2MzAwX1dSSVRFX1JFRyhsb3dlcl9yZWdfYWRkcmVzcyk7Ci0Jc3QtPnR4WzFdID0gdmFsdWUgJiAweEZGOwotCXN0LT50eFsyXSA9IEFESVMxNjMwMF9XUklURV9SRUcobG93ZXJfcmVnX2FkZHJlc3MgKyAxKTsKLQlzdC0+dHhbM10gPSAodmFsdWUgPj4gOCkgJiAweEZGOwotCi0Jc3BpX21lc3NhZ2VfaW5pdCgmbXNnKTsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlcnNbMF0sICZtc2cpOwotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ4ZmVyc1sxXSwgJm1zZyk7Ci0JcmV0ID0gc3BpX3N5bmMoc3QtPnVzLCAmbXNnKTsKLQltdXRleF91bmxvY2soJnN0LT5idWZfbG9jayk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGFkaXMxNjMwMF9zcGlfcmVhZF9yZWdfMTYoKSAtIHJlYWQgMiBieXRlcyBmcm9tIGEgMTYtYml0IHJlZ2lzdGVyCi0gKiBAZGV2OiBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIGNoaWxkIG9mIGFjdHVhbCBkZXZpY2UgKGlpb19kZXYgb3IgaWlvX3RyaWcpCi0gKiBAcmVnX2FkZHJlc3M6IHRoZSBhZGRyZXNzIG9mIHRoZSBsb3dlciBvZiB0aGUgdHdvIHJlZ2lzdGVycy4gU2Vjb25kIHJlZ2lzdGVyCi0gKiAgICAgICAgICAgICAgIGlzIGFzc3VtZWQgdG8gaGF2ZSBhZGRyZXNzIG9uZSBncmVhdGVyLgotICogQHZhbDogc29tZXdoZXJlIHRvIHBhc3MgYmFjayB0aGUgdmFsdWUgcmVhZAotICoqLwotc3RhdGljIGludCBhZGlzMTYzMDBfc3BpX3JlYWRfcmVnXzE2KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJdTggbG93ZXJfcmVnX2FkZHJlc3MsCi0JCXUxNiAqdmFsKQotewotCXN0cnVjdCBzcGlfbWVzc2FnZSBtc2c7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBhZGlzMTYzMDBfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOwotCWludCByZXQ7Ci0Jc3RydWN0IHNwaV90cmFuc2ZlciB4ZmVyc1tdID0gewotCQl7Ci0JCQkudHhfYnVmID0gc3QtPnR4LAotCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAotCQkJLmxlbiA9IDIsCi0JCQkuY3NfY2hhbmdlID0gMSwKLQkJCS5kZWxheV91c2VjcyA9IDc1LAotCQl9LCB7Ci0JCQkucnhfYnVmID0gc3QtPnJ4LAotCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAotCQkJLmxlbiA9IDIsCi0JCQkuY3NfY2hhbmdlID0gMSwKLQkJCS5kZWxheV91c2VjcyA9IDc1LAotCQl9LAotCX07Ci0KLQltdXRleF9sb2NrKCZzdC0+YnVmX2xvY2spOwotCXN0LT50eFswXSA9IEFESVMxNjMwMF9SRUFEX1JFRyhsb3dlcl9yZWdfYWRkcmVzcyk7Ci0Jc3QtPnR4WzFdID0gMDsKLQlzdC0+dHhbMl0gPSAwOwotCXN0LT50eFszXSA9IDA7Ci0KLQlzcGlfbWVzc2FnZV9pbml0KCZtc2cpOwotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ4ZmVyc1swXSwgJm1zZyk7Ci0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnhmZXJzWzFdLCAmbXNnKTsKLQlyZXQgPSBzcGlfc3luYyhzdC0+dXMsICZtc2cpOwotCWlmIChyZXQpIHsKLQkJZGV2X2Vycigmc3QtPnVzLT5kZXYsCi0JCQkicHJvYmxlbSB3aGVuIHJlYWRpbmcgMTYgYml0IHJlZ2lzdGVyIDB4JTAyWCIsCi0JCQlsb3dlcl9yZWdfYWRkcmVzcyk7Ci0JCWdvdG8gZXJyb3JfcmV0OwotCX0KLQkqdmFsID0gKHN0LT5yeFswXSA8PCA4KSB8IHN0LT5yeFsxXTsKLQotZXJyb3JfcmV0OgotCW11dGV4X3VubG9jaygmc3QtPmJ1Zl9sb2NrKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3NpemVfdCBhZGlzMTYzMDBfc3BpX3JlYWRfc2lnbmVkKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNoYXIgKmJ1ZiwKLQkJdW5zaWduZWQgYml0cykKLXsKLQlpbnQgcmV0OwotCXMxNiB2YWwgPSAwOwotCXVuc2lnbmVkIHNoaWZ0ID0gMTYgLSBiaXRzOwotCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKLQotCXJldCA9IGFkaXMxNjMwMF9zcGlfcmVhZF9yZWdfMTYoZGV2LCB0aGlzX2F0dHItPmFkZHJlc3MsICh1MTYgKikmdmFsKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JaWYgKHZhbCAmIEFESVMxNjMwMF9FUlJPUl9BQ1RJVkUpCi0JCWFkaXMxNjMwMF9jaGVja19zdGF0dXMoZGV2KTsKLQl2YWwgPSAoKHMxNikodmFsIDw8IHNoaWZ0KSA+PiBzaGlmdCk7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGFkaXMxNjMwMF9yZWFkXzEyYml0X3Vuc2lnbmVkKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNoYXIgKmJ1ZikKLXsKLQlpbnQgcmV0OwotCXUxNiB2YWwgPSAwOwotCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKLQotCXJldCA9IGFkaXMxNjMwMF9zcGlfcmVhZF9yZWdfMTYoZGV2LCB0aGlzX2F0dHItPmFkZHJlc3MsICZ2YWwpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAodmFsICYgQURJUzE2MzAwX0VSUk9SX0FDVElWRSkKLQkJYWRpczE2MzAwX2NoZWNrX3N0YXR1cyhkZXYpOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHZhbCAmIDB4MEZGRik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGFkaXMxNjMwMF9yZWFkXzE0Yml0X3Vuc2lnbmVkKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNoYXIgKmJ1ZikKLXsKLQlpbnQgcmV0OwotCXUxNiB2YWwgPSAwOwotCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKLQotCXJldCA9IGFkaXMxNjMwMF9zcGlfcmVhZF9yZWdfMTYoZGV2LCB0aGlzX2F0dHItPmFkZHJlc3MsICZ2YWwpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAodmFsICYgQURJUzE2MzAwX0VSUk9SX0FDVElWRSkKLQkJYWRpczE2MzAwX2NoZWNrX3N0YXR1cyhkZXYpOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHZhbCAmIDB4M0ZGRik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGFkaXMxNjMwMF9yZWFkXzE0Yml0X3NpZ25lZChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljaGFyICpidWYpCi17Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXNzaXplX3QgcmV0OwotCi0JLyogVGFrZSB0aGUgaWlvX2RldiBzdGF0dXMgbG9jayAqLwotCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOwotCXJldCA9ICBhZGlzMTYzMDBfc3BpX3JlYWRfc2lnbmVkKGRldiwgYXR0ciwgYnVmLCAxNCk7Ci0JbXV0ZXhfdW5sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGFkaXMxNjMwMF9yZWFkXzEyYml0X3NpZ25lZChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljaGFyICpidWYpCi17Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXNzaXplX3QgcmV0OwotCi0JLyogVGFrZSB0aGUgaWlvX2RldiBzdGF0dXMgbG9jayAqLwotCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOwotCXJldCA9ICBhZGlzMTYzMDBfc3BpX3JlYWRfc2lnbmVkKGRldiwgYXR0ciwgYnVmLCAxMik7Ci0JbXV0ZXhfdW5sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGFkaXMxNjMwMF9yZWFkXzEzYml0X3NpZ25lZChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljaGFyICpidWYpCi17Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXNzaXplX3QgcmV0OwotCi0JLyogVGFrZSB0aGUgaWlvX2RldiBzdGF0dXMgbG9jayAqLwotCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOwotCXJldCA9ICBhZGlzMTYzMDBfc3BpX3JlYWRfc2lnbmVkKGRldiwgYXR0ciwgYnVmLCAxMyk7Ci0JbXV0ZXhfdW5sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGFkaXMxNjMwMF93cml0ZV8xNmJpdChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljb25zdCBjaGFyICpidWYsCi0JCXNpemVfdCBsZW4pCi17Ci0Jc3RydWN0IGlpb19kZXZfYXR0ciAqdGhpc19hdHRyID0gdG9faWlvX2Rldl9hdHRyKGF0dHIpOwotCWludCByZXQ7Ci0JbG9uZyB2YWw7Ci0KLQlyZXQgPSBzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ2YWwpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyb3JfcmV0OwotCXJldCA9IGFkaXMxNjMwMF9zcGlfd3JpdGVfcmVnXzE2KGRldiwgdGhpc19hdHRyLT5hZGRyZXNzLCB2YWwpOwotCi1lcnJvcl9yZXQ6Ci0JcmV0dXJuIHJldCA/IHJldCA6IGxlbjsKLX0KLQotc3RhdGljIHNzaXplX3QgYWRpczE2MzAwX3JlYWRfZnJlcXVlbmN5KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNoYXIgKmJ1ZikKLXsKLQlpbnQgcmV0LCBsZW4gPSAwOwotCXUxNiB0OwotCWludCBzcHM7Ci0JcmV0ID0gYWRpczE2MzAwX3NwaV9yZWFkX3JlZ18xNihkZXYsCi0JCQlBRElTMTYzMDBfU01QTF9QUkQsCi0JCQkmdCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQlzcHMgPSAgKHQgJiBBRElTMTYzMDBfU01QTF9QUkRfVElNRV9CQVNFKSA/IDUzIDogMTYzODsKLQlzcHMgLz0gKHQgJiBBRElTMTYzMDBfU01QTF9QUkRfRElWX01BU0spICsgMTsKLQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIiVkIFNQU1xuIiwgc3BzKTsKLQlyZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgc3NpemVfdCBhZGlzMTYzMDBfd3JpdGVfZnJlcXVlbmN5KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNvbnN0IGNoYXIgKmJ1ZiwKLQkJc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGFkaXMxNjMwMF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7Ci0JbG9uZyB2YWw7Ci0JaW50IHJldDsKLQl1OCB0OwotCi0JcmV0ID0gc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdmFsKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JbXV0ZXhfbG9jaygmaW5kaW9fZGV2LT5tbG9jayk7Ci0KLQl0ID0gKDE2MzggLyB2YWwpOwotCWlmICh0ID4gMCkKLQkJdC0tOwotCXQgJj0gQURJUzE2MzAwX1NNUExfUFJEX0RJVl9NQVNLOwotCWlmICgodCAmIEFESVMxNjMwMF9TTVBMX1BSRF9ESVZfTUFTSykgPj0gMHgwQSkKLQkJc3QtPnVzLT5tYXhfc3BlZWRfaHogPSBBRElTMTYzMDBfU1BJX1NMT1c7Ci0JZWxzZQotCQlzdC0+dXMtPm1heF9zcGVlZF9oeiA9IEFESVMxNjMwMF9TUElfRkFTVDsKLQotCXJldCA9IGFkaXMxNjMwMF9zcGlfd3JpdGVfcmVnXzgoZGV2LAotCQkJQURJUzE2MzAwX1NNUExfUFJELAotCQkJdCk7Ci0KLQltdXRleF91bmxvY2soJmluZGlvX2Rldi0+bWxvY2spOwotCi0JcmV0dXJuIHJldCA/IHJldCA6IGxlbjsKLX0KLQotc3RhdGljIGludCBhZGlzMTYzMDBfcmVzZXQoc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCByZXQ7Ci0JcmV0ID0gYWRpczE2MzAwX3NwaV93cml0ZV9yZWdfOChkZXYsCi0JCQlBRElTMTYzMDBfR0xPQl9DTUQsCi0JCQlBRElTMTYzMDBfR0xPQl9DTURfU1dfUkVTRVQpOwotCWlmIChyZXQpCi0JCWRldl9lcnIoZGV2LCAicHJvYmxlbSByZXNldHRpbmcgZGV2aWNlIik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3NpemVfdCBhZGlzMTYzMDBfd3JpdGVfcmVzZXQoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQotewotCWlmIChsZW4gPCAxKQotCQlyZXR1cm4gLTE7Ci0Jc3dpdGNoIChidWZbMF0pIHsKLQljYXNlICcxJzoKLQljYXNlICd5JzoKLQljYXNlICdZJzoKLQkJcmV0dXJuIGFkaXMxNjMwMF9yZXNldChkZXYpOwotCX0KLQlyZXR1cm4gLTE7Ci19Ci0KLWludCBhZGlzMTYzMDBfc2V0X2lycShzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgZW5hYmxlKQotewotCWludCByZXQ7Ci0JdTE2IG1zYzsKLQlyZXQgPSBhZGlzMTYzMDBfc3BpX3JlYWRfcmVnXzE2KGRldiwgQURJUzE2MzAwX01TQ19DVFJMLCAmbXNjKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycm9yX3JldDsKLQotCW1zYyB8PSBBRElTMTYzMDBfTVNDX0NUUkxfREFUQV9SRFlfUE9MX0hJR0g7Ci0JbXNjICY9IH5BRElTMTYzMDBfTVNDX0NUUkxfREFUQV9SRFlfRElPMjsKLQlpZiAoZW5hYmxlKQotCQltc2MgfD0gQURJUzE2MzAwX01TQ19DVFJMX0RBVEFfUkRZX0VOOwotCWVsc2UKLQkJbXNjICY9IH5BRElTMTYzMDBfTVNDX0NUUkxfREFUQV9SRFlfRU47Ci0KLQlyZXQgPSBhZGlzMTYzMDBfc3BpX3dyaXRlX3JlZ18xNihkZXYsIEFESVMxNjMwMF9NU0NfQ1RSTCwgbXNjKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycm9yX3JldDsKLQotZXJyb3JfcmV0OgotCXJldHVybiByZXQ7Ci19Ci0KLS8qIFBvd2VyIGRvd24gdGhlIGRldmljZSAqLwotc3RhdGljIGludCBhZGlzMTYzMDBfc3RvcF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCByZXQ7Ci0JdTE2IHZhbCA9IEFESVMxNjMwMF9TTFBfQ05UX1BPV0VSX09GRjsKLQotCXJldCA9IGFkaXMxNjMwMF9zcGlfd3JpdGVfcmVnXzE2KGRldiwgQURJUzE2MzAwX1NMUF9DTlQsIHZhbCk7Ci0JaWYgKHJldCkKLQkJZGV2X2VycihkZXYsICJwcm9ibGVtIHdpdGggdHVybmluZyBkZXZpY2Ugb2ZmOiBTTFBfQ05UIik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGFkaXMxNjMwMF9zZWxmX3Rlc3Qoc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCByZXQ7Ci0JcmV0ID0gYWRpczE2MzAwX3NwaV93cml0ZV9yZWdfMTYoZGV2LAotCQkJQURJUzE2MzAwX01TQ19DVFJMLAotCQkJQURJUzE2MzAwX01TQ19DVFJMX01FTV9URVNUKTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoZGV2LCAicHJvYmxlbSBzdGFydGluZyBzZWxmIHRlc3QiKTsKLQkJZ290byBlcnJfcmV0OwotCX0KLQotCWFkaXMxNjMwMF9jaGVja19zdGF0dXMoZGV2KTsKLQotZXJyX3JldDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGFkaXMxNjMwMF9jaGVja19zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2KQotewotCXUxNiBzdGF0dXM7Ci0JaW50IHJldDsKLQotCXJldCA9IGFkaXMxNjMwMF9zcGlfcmVhZF9yZWdfMTYoZGV2LCBBRElTMTYzMDBfRElBR19TVEFULCAmc3RhdHVzKTsKLQotCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIoZGV2LCAiUmVhZGluZyBzdGF0dXMgZmFpbGVkXG4iKTsKLQkJZ290byBlcnJvcl9yZXQ7Ci0JfQotCXJldCA9IHN0YXR1czsKLQlpZiAoc3RhdHVzICYgQURJUzE2MzAwX0RJQUdfU1RBVF9aQUNDTF9GQUlMKQotCQlkZXZfZXJyKGRldiwgIlotYXhpcyBhY2NlbGVyb21ldGVyIHNlbGYtdGVzdCBmYWlsdXJlXG4iKTsKLQlpZiAoc3RhdHVzICYgQURJUzE2MzAwX0RJQUdfU1RBVF9ZQUNDTF9GQUlMKQotCQlkZXZfZXJyKGRldiwgIlktYXhpcyBhY2NlbGVyb21ldGVyIHNlbGYtdGVzdCBmYWlsdXJlXG4iKTsKLQlpZiAoc3RhdHVzICYgQURJUzE2MzAwX0RJQUdfU1RBVF9YQUNDTF9GQUlMKQotCQlkZXZfZXJyKGRldiwgIlgtYXhpcyBhY2NlbGVyb21ldGVyIHNlbGYtdGVzdCBmYWlsdXJlXG4iKTsKLQlpZiAoc3RhdHVzICYgQURJUzE2MzAwX0RJQUdfU1RBVF9YR1lST19GQUlMKQotCQlkZXZfZXJyKGRldiwgIlgtYXhpcyBneXJvc2NvcGUgc2VsZi10ZXN0IGZhaWx1cmVcbiIpOwotCWlmIChzdGF0dXMgJiBBRElTMTYzMDBfRElBR19TVEFUX0FMQVJNMikKLQkJZGV2X2VycihkZXYsICJBbGFybSAyIGFjdGl2ZVxuIik7Ci0JaWYgKHN0YXR1cyAmIEFESVMxNjMwMF9ESUFHX1NUQVRfQUxBUk0xKQotCQlkZXZfZXJyKGRldiwgIkFsYXJtIDEgYWN0aXZlXG4iKTsKLQlpZiAoc3RhdHVzICYgQURJUzE2MzAwX0RJQUdfU1RBVF9GTEFTSF9DSEspCi0JCWRldl9lcnIoZGV2LCAiRmxhc2ggY2hlY2tzdW0gZXJyb3JcbiIpOwotCWlmIChzdGF0dXMgJiBBRElTMTYzMDBfRElBR19TVEFUX1NFTEZfVEVTVCkKLQkJZGV2X2VycihkZXYsICJTZWxmIHRlc3QgZXJyb3JcbiIpOwotCWlmIChzdGF0dXMgJiBBRElTMTYzMDBfRElBR19TVEFUX09WRVJGTE9XKQotCQlkZXZfZXJyKGRldiwgIlNlbnNvciBvdmVycmFuZ2VcbiIpOwotCWlmIChzdGF0dXMgJiBBRElTMTYzMDBfRElBR19TVEFUX1NQSV9GQUlMKQotCQlkZXZfZXJyKGRldiwgIlNQSSBmYWlsdXJlXG4iKTsKLQlpZiAoc3RhdHVzICYgQURJUzE2MzAwX0RJQUdfU1RBVF9GTEFTSF9VUFQpCi0JCWRldl9lcnIoZGV2LCAiRmxhc2ggdXBkYXRlIGZhaWxlZFxuIik7Ci0JaWYgKHN0YXR1cyAmIEFESVMxNjMwMF9ESUFHX1NUQVRfUE9XRVJfSElHSCkKLQkJZGV2X2VycihkZXYsICJQb3dlciBzdXBwbHkgYWJvdmUgNS4yNVZcbiIpOwotCWlmIChzdGF0dXMgJiBBRElTMTYzMDBfRElBR19TVEFUX1BPV0VSX0xPVykKLQkJZGV2X2VycihkZXYsICJQb3dlciBzdXBwbHkgYmVsb3cgNC43NVZcbiIpOwotCi1lcnJvcl9yZXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBhZGlzMTYzMDBfaW5pdGlhbF9zZXR1cChzdHJ1Y3QgYWRpczE2MzAwX3N0YXRlICpzdCkKLXsKLQlpbnQgcmV0OwotCXUxNiBzbXBfcHJkOwotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZzdC0+aW5kaW9fZGV2LT5kZXY7Ci0KLQkvKiB1c2UgbG93IHNwaSBzcGVlZCBmb3IgaW5pdCAqLwotCXN0LT51cy0+bWF4X3NwZWVkX2h6ID0gQURJUzE2MzAwX1NQSV9TTE9XOwotCXN0LT51cy0+bW9kZSA9IFNQSV9NT0RFXzM7Ci0Jc3BpX3NldHVwKHN0LT51cyk7Ci0KLQkvKiBEaXNhYmxlIElSUSAqLwotCXJldCA9IGFkaXMxNjMwMF9zZXRfaXJxKGRldiwgZmFsc2UpOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycihkZXYsICJkaXNhYmxlIGlycSBmYWlsZWQiKTsKLQkJZ290byBlcnJfcmV0OwotCX0KLQotCS8qIERvIHNlbGYgdGVzdCAqLwotCXJldCA9IGFkaXMxNjMwMF9zZWxmX3Rlc3QoZGV2KTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoZGV2LCAic2VsZiB0ZXN0IGZhaWx1cmUiKTsKLQkJZ290byBlcnJfcmV0OwotCX0KLQotCS8qIFJlYWQgc3RhdHVzIHJlZ2lzdGVyIHRvIGNoZWNrIHRoZSByZXN1bHQgKi8KLQlyZXQgPSBhZGlzMTYzMDBfY2hlY2tfc3RhdHVzKGRldik7Ci0JaWYgKHJldCkgewotCQlhZGlzMTYzMDBfcmVzZXQoZGV2KTsKLQkJZGV2X2VycihkZXYsICJkZXZpY2Ugbm90IHBsYXlpbmcgYmFsbCAtPiByZXNldCIpOwotCQltc2xlZXAoQURJUzE2MzAwX1NUQVJUVVBfREVMQVkpOwotCQlyZXQgPSBhZGlzMTYzMDBfY2hlY2tfc3RhdHVzKGRldik7Ci0JCWlmIChyZXQpIHsKLQkJCWRldl9lcnIoZGV2LCAiZ2l2aW5nIHVwIik7Ci0JCQlnb3RvIGVycl9yZXQ7Ci0JCX0KLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICI6IGF0IENTJWQgKGlycSAlZClcbiIsCi0JCQlzdC0+dXMtPmNoaXBfc2VsZWN0LCBzdC0+dXMtPmlycSk7Ci0KLQkvKiB1c2UgaGlnaCBzcGkgc3BlZWQgaWYgcG9zc2libGUgKi8KLQlyZXQgPSBhZGlzMTYzMDBfc3BpX3JlYWRfcmVnXzE2KGRldiwgQURJUzE2MzAwX1NNUExfUFJELCAmc21wX3ByZCk7Ci0JaWYgKCFyZXQgJiYgKHNtcF9wcmQgJiBBRElTMTYzMDBfU01QTF9QUkRfRElWX01BU0spIDwgMHgwQSkgewotCQlzdC0+dXMtPm1heF9zcGVlZF9oeiA9IEFESVMxNjMwMF9TUElfU0xPVzsKLQkJc3BpX3NldHVwKHN0LT51cyk7Ci0JfQotCi1lcnJfcmV0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBJSU9fREVWX0FUVFJfR1lST19YX0NBTElCQklBUyhTX0lXVVNSIHwgU19JUlVHTywKLQkJYWRpczE2MzAwX3JlYWRfMTJiaXRfc2lnbmVkLAotCQlhZGlzMTYzMDBfd3JpdGVfMTZiaXQsCi0JCUFESVMxNjMwMF9YR1lST19PRkYpOwotCi1zdGF0aWMgSUlPX0RFVl9BVFRSX0FDQ0VMX1hfQ0FMSUJCSUFTKFNfSVdVU1IgfCBTX0lSVUdPLAotCQlhZGlzMTYzMDBfcmVhZF8xMmJpdF9zaWduZWQsCi0JCWFkaXMxNjMwMF93cml0ZV8xNmJpdCwKLQkJQURJUzE2MzAwX1hBQ0NMX09GRik7Ci0KLXN0YXRpYyBJSU9fREVWX0FUVFJfQUNDRUxfWV9DQUxJQkJJQVMoU19JV1VTUiB8IFNfSVJVR08sCi0JCWFkaXMxNjMwMF9yZWFkXzEyYml0X3NpZ25lZCwKLQkJYWRpczE2MzAwX3dyaXRlXzE2Yml0LAotCQlBRElTMTYzMDBfWUFDQ0xfT0ZGKTsKLQotc3RhdGljIElJT19ERVZfQVRUUl9BQ0NFTF9aX0NBTElCQklBUyhTX0lXVVNSIHwgU19JUlVHTywKLQkJYWRpczE2MzAwX3JlYWRfMTJiaXRfc2lnbmVkLAotCQlhZGlzMTYzMDBfd3JpdGVfMTZiaXQsCi0JCUFESVMxNjMwMF9aQUNDTF9PRkYpOwotCi1zdGF0aWMgSUlPX0RFVl9BVFRSX0lOX05BTUVEX1JBVygwLCBzdXBwbHksIGFkaXMxNjMwMF9yZWFkXzE0Yml0X3Vuc2lnbmVkLAotCQkJICAgQURJUzE2MzAwX1NVUFBMWV9PVVQpOwotc3RhdGljIElJT19DT05TVF9BVFRSX0lOX05BTUVEX1NDQUxFKDAsIHN1cHBseSwgIjAuMDAyNDIiKTsKLQotc3RhdGljIElJT19ERVZfQVRUUl9HWVJPX1goYWRpczE2MzAwX3JlYWRfMTRiaXRfc2lnbmVkLAotCQlBRElTMTYzMDBfWEdZUk9fT1VUKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUl9HWVJPX1NDQUxFKCIwLjAwMDg3MjY2NCIpOwotCi1zdGF0aWMgSUlPX0RFVl9BVFRSX0FDQ0VMX1goYWRpczE2MzAwX3JlYWRfMTRiaXRfc2lnbmVkLAotCQlBRElTMTYzMDBfWEFDQ0xfT1VUKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfQUNDRUxfWShhZGlzMTYzMDBfcmVhZF8xNGJpdF9zaWduZWQsCi0JCUFESVMxNjMwMF9ZQUNDTF9PVVQpOwotc3RhdGljIElJT19ERVZfQVRUUl9BQ0NFTF9aKGFkaXMxNjMwMF9yZWFkXzE0Yml0X3NpZ25lZCwKLQkJQURJUzE2MzAwX1pBQ0NMX09VVCk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfQUNDRUxfU0NBTEUoIjAuMDA1ODgzOTkiKTsKLQotc3RhdGljIElJT19ERVZfQVRUUl9JTkNMSV9YKGFkaXMxNjMwMF9yZWFkXzEzYml0X3NpZ25lZCwKLQkJQURJUzE2MzAwX1hJTkNMSV9PVVQpOwotc3RhdGljIElJT19ERVZfQVRUUl9JTkNMSV9ZKGFkaXMxNjMwMF9yZWFkXzEzYml0X3NpZ25lZCwKLQkJQURJUzE2MzAwX1lJTkNMSV9PVVQpOwotc3RhdGljIElJT19DT05TVF9BVFRSX0lOQ0xJX1NDQUxFKCIwLjAwMDc2Nzk0NDg3Iik7Ci0KLXN0YXRpYyBJSU9fREVWX0FUVFJfVEVNUF9SQVcoYWRpczE2MzAwX3JlYWRfMTJiaXRfdW5zaWduZWQpOwotc3RhdGljIElJT19DT05TVF9BVFRSX1RFTVBfT0ZGU0VUKCIxOTguMTYiKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUl9URU1QX1NDQUxFKCIwLjE0Iik7Ci0KLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fUkFXKDEsIGFkaXMxNjMwMF9yZWFkXzEyYml0X3Vuc2lnbmVkLAotCQlBRElTMTYzMDBfQVVYX0FEQyk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFIoaW4xX3NjYWxlLCAiMC4wMDA4MDYiKTsKLQotc3RhdGljIElJT19ERVZfQVRUUl9TQU1QX0ZSRVEoU19JV1VTUiB8IFNfSVJVR08sCi0JCWFkaXMxNjMwMF9yZWFkX2ZyZXF1ZW5jeSwKLQkJYWRpczE2MzAwX3dyaXRlX2ZyZXF1ZW5jeSk7Ci0KLXN0YXRpYyBJSU9fREVWSUNFX0FUVFIocmVzZXQsIFNfSVdVU1IsIE5VTEwsIGFkaXMxNjMwMF93cml0ZV9yZXNldCwgMCk7Ci0KLXN0YXRpYyBJSU9fQ09OU1RfQVRUUl9TQU1QX0ZSRVFfQVZBSUwoIjQwOSA1NDYgODE5IDE2MzgiKTsKLQotc3RhdGljIElJT19DT05TVF9BVFRSX05BTUUoImFkaXMxNjMwMCIpOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWRpczE2MzAwX2V2ZW50X2F0dHJpYnV0ZXNbXSA9IHsKLQlOVUxMCi19OwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZGlzMTYzMDBfZXZlbnRfYXR0cmlidXRlX2dyb3VwID0gewotCS5hdHRycyA9IGFkaXMxNjMwMF9ldmVudF9hdHRyaWJ1dGVzLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkaXMxNjMwMF9hdHRyaWJ1dGVzW10gPSB7Ci0JJmlpb19kZXZfYXR0cl9neXJvX3hfY2FsaWJiaWFzLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9hY2NlbF94X2NhbGliYmlhcy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfYWNjZWxfeV9jYWxpYmJpYXMuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2FjY2VsX3pfY2FsaWJiaWFzLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbjBfc3VwcGx5X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjBfc3VwcGx5X3NjYWxlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9neXJvX3hfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2d5cm9fc2NhbGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2FjY2VsX3hfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9hY2NlbF95X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfYWNjZWxfel9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfYWNjZWxfc2NhbGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luY2xpX3hfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbmNsaV95X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbmNsaV9zY2FsZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfdGVtcF9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfdGVtcF9vZmZzZXQuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfdGVtcF9zY2FsZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW4xX3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjFfc2NhbGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX3NhbXBsaW5nX2ZyZXF1ZW5jeS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9zYW1wbGluZ19mcmVxdWVuY3lfYXZhaWxhYmxlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9yZXNldC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9uYW1lLmRldl9hdHRyLmF0dHIsCi0JTlVMTAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYWRpczE2MzAwX2F0dHJpYnV0ZV9ncm91cCA9IHsKLQkuYXR0cnMgPSBhZGlzMTYzMDBfYXR0cmlidXRlcywKLX07Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IGFkaXMxNjMwMF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQotewotCWludCByZXQsIHJlZ2RvbmUgPSAwOwotCXN0cnVjdCBhZGlzMTYzMDBfc3RhdGUgKnN0ID0ga3phbGxvYyhzaXplb2YgKnN0LCBHRlBfS0VSTkVMKTsKLQlpZiAoIXN0KSB7Ci0JCXJldCA9ICAtRU5PTUVNOwotCQlnb3RvIGVycm9yX3JldDsKLQl9Ci0JLyogdGhpcyBpcyBvbmx5IHVzZWQgZm9yIHJlbW92YWwgcHVycG9zZXMgKi8KLQlzcGlfc2V0X2RydmRhdGEoc3BpLCBzdCk7Ci0KLQkvKiBBbGxvY2F0ZSB0aGUgY29tbXMgYnVmZmVycyAqLwotCXN0LT5yeCA9IGt6YWxsb2Moc2l6ZW9mKCpzdC0+cngpKkFESVMxNjMwMF9NQVhfUlgsIEdGUF9LRVJORUwpOwotCWlmIChzdC0+cnggPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yX2ZyZWVfc3Q7Ci0JfQotCXN0LT50eCA9IGt6YWxsb2Moc2l6ZW9mKCpzdC0+dHgpKkFESVMxNjMwMF9NQVhfVFgsIEdGUF9LRVJORUwpOwotCWlmIChzdC0+dHggPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yX2ZyZWVfcng7Ci0JfQotCXN0LT51cyA9IHNwaTsKLQltdXRleF9pbml0KCZzdC0+YnVmX2xvY2spOwotCS8qIHNldHVwIHRoZSBpbmR1c3RyaWFsaW8gZHJpdmVyIGFsbG9jYXRlZCBlbGVtZW50cyAqLwotCXN0LT5pbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKHN0LT5pbmRpb19kZXYgPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yX2ZyZWVfdHg7Ci0JfQotCi0Jc3QtPmluZGlvX2Rldi0+ZGV2LnBhcmVudCA9ICZzcGktPmRldjsKLQlzdC0+aW5kaW9fZGV2LT5udW1faW50ZXJydXB0X2xpbmVzID0gMTsKLQlzdC0+aW5kaW9fZGV2LT5ldmVudF9hdHRycyA9ICZhZGlzMTYzMDBfZXZlbnRfYXR0cmlidXRlX2dyb3VwOwotCXN0LT5pbmRpb19kZXYtPmF0dHJzID0gJmFkaXMxNjMwMF9hdHRyaWJ1dGVfZ3JvdXA7Ci0Jc3QtPmluZGlvX2Rldi0+ZGV2X2RhdGEgPSAodm9pZCAqKShzdCk7Ci0Jc3QtPmluZGlvX2Rldi0+ZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFOwotCXN0LT5pbmRpb19kZXYtPm1vZGVzID0gSU5ESU9fRElSRUNUX01PREU7Ci0KLQlyZXQgPSBhZGlzMTYzMDBfY29uZmlndXJlX3Jpbmcoc3QtPmluZGlvX2Rldik7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJvcl9mcmVlX2RldjsKLQotCXJldCA9IGlpb19kZXZpY2VfcmVnaXN0ZXIoc3QtPmluZGlvX2Rldik7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJvcl91bnJlZ19yaW5nX2Z1bmNzOwotCXJlZ2RvbmUgPSAxOwotCi0JcmV0ID0gaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyKHN0LT5pbmRpb19kZXYtPnJpbmcsIDApOwotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcmluZ1xuIik7Ci0JCWdvdG8gZXJyb3JfdW5yZWdfcmluZ19mdW5jczsKLQl9Ci0KLQlpZiAoc3BpLT5pcnEpIHsKLQkJcmV0ID0gaWlvX3JlZ2lzdGVyX2ludGVycnVwdF9saW5lKHNwaS0+aXJxLAotCQkJCXN0LT5pbmRpb19kZXYsCi0JCQkJMCwKLQkJCQlJUlFGX1RSSUdHRVJfUklTSU5HLAotCQkJCSJhZGlzMTYzMDAiKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gZXJyb3JfdW5pbml0aWFsaXplX3Jpbmc7Ci0KLQkJcmV0ID0gYWRpczE2MzAwX3Byb2JlX3RyaWdnZXIoc3QtPmluZGlvX2Rldik7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIGVycm9yX3VucmVnaXN0ZXJfbGluZTsKLQl9Ci0KLQkvKiBHZXQgdGhlIGRldmljZSBpbnRvIGEgc2FuZSBpbml0aWFsIHN0YXRlICovCi0JcmV0ID0gYWRpczE2MzAwX2luaXRpYWxfc2V0dXAoc3QpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyb3JfcmVtb3ZlX3RyaWdnZXI7Ci0JcmV0dXJuIDA7Ci0KLWVycm9yX3JlbW92ZV90cmlnZ2VyOgotCWFkaXMxNjMwMF9yZW1vdmVfdHJpZ2dlcihzdC0+aW5kaW9fZGV2KTsKLWVycm9yX3VucmVnaXN0ZXJfbGluZToKLQlpZiAoc3BpLT5pcnEpCi0JCWlpb191bnJlZ2lzdGVyX2ludGVycnVwdF9saW5lKHN0LT5pbmRpb19kZXYsIDApOwotZXJyb3JfdW5pbml0aWFsaXplX3Jpbmc6Ci0JaWlvX3JpbmdfYnVmZmVyX3VucmVnaXN0ZXIoc3QtPmluZGlvX2Rldi0+cmluZyk7Ci1lcnJvcl91bnJlZ19yaW5nX2Z1bmNzOgotCWFkaXMxNjMwMF91bmNvbmZpZ3VyZV9yaW5nKHN0LT5pbmRpb19kZXYpOwotZXJyb3JfZnJlZV9kZXY6Ci0JaWYgKHJlZ2RvbmUpCi0JCWlpb19kZXZpY2VfdW5yZWdpc3RlcihzdC0+aW5kaW9fZGV2KTsKLQllbHNlCi0JCWlpb19mcmVlX2RldmljZShzdC0+aW5kaW9fZGV2KTsKLWVycm9yX2ZyZWVfdHg6Ci0Ja2ZyZWUoc3QtPnR4KTsKLWVycm9yX2ZyZWVfcng6Ci0Ja2ZyZWUoc3QtPnJ4KTsKLWVycm9yX2ZyZWVfc3Q6Ci0Ja2ZyZWUoc3QpOwotZXJyb3JfcmV0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgYWRpczE2MzAwX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQotewotCWludCByZXQ7Ci0Jc3RydWN0IGFkaXMxNjMwMF9zdGF0ZSAqc3QgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKLQlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gc3QtPmluZGlvX2RldjsKLQotCXJldCA9IGFkaXMxNjMwMF9zdG9wX2RldmljZSgmKGluZGlvX2Rldi0+ZGV2KSk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJfcmV0OwotCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQotCWFkaXMxNjMwMF9yZW1vdmVfdHJpZ2dlcihpbmRpb19kZXYpOwotCWlmIChzcGktPmlycSkKLQkJaWlvX3VucmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoaW5kaW9fZGV2LCAwKTsKLQotCWlpb19yaW5nX2J1ZmZlcl91bnJlZ2lzdGVyKGluZGlvX2Rldi0+cmluZyk7Ci0JaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rldik7Ci0JYWRpczE2MzAwX3VuY29uZmlndXJlX3JpbmcoaW5kaW9fZGV2KTsKLQlrZnJlZShzdC0+dHgpOwotCWtmcmVlKHN0LT5yeCk7Ci0Ja2ZyZWUoc3QpOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9yZXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIGFkaXMxNjMwMF9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAiYWRpczE2MzAwIiwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JfSwKLQkucHJvYmUgPSBhZGlzMTYzMDBfcHJvYmUsCi0JLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGFkaXMxNjMwMF9yZW1vdmUpLAotfTsKLQotc3RhdGljIF9faW5pdCBpbnQgYWRpczE2MzAwX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gc3BpX3JlZ2lzdGVyX2RyaXZlcigmYWRpczE2MzAwX2RyaXZlcik7Ci19Ci1tb2R1bGVfaW5pdChhZGlzMTYzMDBfaW5pdCk7Ci0KLXN0YXRpYyBfX2V4aXQgdm9pZCBhZGlzMTYzMDBfZXhpdCh2b2lkKQotewotCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmYWRpczE2MzAwX2RyaXZlcik7Ci19Ci1tb2R1bGVfZXhpdChhZGlzMTYzMDBfZXhpdCk7Ci0KLU1PRFVMRV9BVVRIT1IoIkJhcnJ5IFNvbmcgPDIxY25iYW9AZ21haWwuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBbmFsb2cgRGV2aWNlcyBBRElTMTYzMDAgSU1VIFNQSSBkcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjMwMF9yaW5nLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTYzMDBfcmluZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTRmZGY0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjMwMF9yaW5nLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzggKzAsMCBAQAotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0KLSNpbmNsdWRlICIuLi9paW8uaCIKLSNpbmNsdWRlICIuLi9zeXNmcy5oIgotI2luY2x1ZGUgIi4uL3Jpbmdfc3cuaCIKLSNpbmNsdWRlICIuLi9hY2NlbC9hY2NlbC5oIgotI2luY2x1ZGUgIi4uL3RyaWdnZXIuaCIKLSNpbmNsdWRlICJhZGlzMTYzMDAuaCIKLQotc3RhdGljIElJT19TQ0FOX0VMX0MoaW4wX3N1cHBseSwgQURJUzE2MzAwX1NDQU5fU1VQUExZLAotCQkgICAgIEFESVMxNjMwMF9TVVBQTFlfT1VULCBOVUxMKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUl9TQ0FOX0VMX1RZUEUoaW4wX3N1cHBseSwgdSwgMTIsIDE2KTsKLXN0YXRpYyBJSU9fU0NBTl9FTF9DKGd5cm9feCwgQURJUzE2MzAwX1NDQU5fR1lST19YLCBBRElTMTYzMDBfWEdZUk9fT1VULCBOVUxMKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUl9TQ0FOX0VMX1RZUEUoZ3lybywgcywgMTQsIDE2KTsKLQotc3RhdGljIElJT19TQ0FOX0VMX0MoYWNjZWxfeCwgQURJUzE2MzAwX1NDQU5fQUNDX1gsIEFESVMxNjMwMF9YQUNDTF9PVVQsIE5VTEwpOwotc3RhdGljIElJT19TQ0FOX0VMX0MoYWNjZWxfeSwgQURJUzE2MzAwX1NDQU5fQUNDX1ksIEFESVMxNjMwMF9ZQUNDTF9PVVQsIE5VTEwpOwotc3RhdGljIElJT19TQ0FOX0VMX0MoYWNjZWxfeiwgQURJUzE2MzAwX1NDQU5fQUNDX1osIEFESVMxNjMwMF9aQUNDTF9PVVQsIE5VTEwpOwotc3RhdGljIElJT19DT05TVF9BVFRSX1NDQU5fRUxfVFlQRShhY2NlbCwgcywgMTQsIDE2KTsKLQotc3RhdGljIElJT19TQ0FOX0VMX0ModGVtcCwgQURJUzE2MzAwX1NDQU5fVEVNUCwgQURJUzE2MzAwX1RFTVBfT1VULCBOVUxMKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUl9TQ0FOX0VMX1RZUEUodGVtcCwgcywgMTIsIDE2KTsKLQotc3RhdGljIElJT19TQ0FOX0VMX0MoaW4xLCBBRElTMTYzMDBfU0NBTl9BRENfMCwgQURJUzE2MzAwX0FVWF9BREMsIE5VTEwpOwotc3RhdGljIElJT19DT05TVF9BVFRSX1NDQU5fRUxfVFlQRShpbjEsIHUsIDEyLCAxNik7Ci0KLXN0YXRpYyBJSU9fU0NBTl9FTF9DKGluY2xpX3gsIEFESVMxNjMwMF9TQ0FOX0lOQ0xJX1gsCi0JCSAgICAgQURJUzE2MzAwX1hJTkNMSV9PVVQsIE5VTEwpOwotc3RhdGljIElJT19TQ0FOX0VMX0MoaW5jbGlfeSwgQURJUzE2MzAwX1NDQU5fSU5DTElfWSwKLQkJICAgICBBRElTMTYzMDBfWUlOQ0xJX09VVCwgTlVMTCk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfU0NBTl9FTF9UWVBFKGluY2xpLCBzLCAxMywgMTYpOwotCi1zdGF0aWMgSUlPX1NDQU5fRUxfVElNRVNUQU1QKDkpOwotc3RhdGljIElJT19DT05TVF9BVFRSX1NDQU5fRUxfVFlQRSh0aW1lc3RhbXAsIHMsIDY0LCA2NCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZGlzMTYzMDBfc2Nhbl9lbF9hdHRyc1tdID0gewotCSZpaW9fc2Nhbl9lbF9pbjBfc3VwcGx5LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luMF9zdXBwbHlfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4wX3N1cHBseV90eXBlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2d5cm9feC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9neXJvX3hfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfZ3lyb190eXBlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX3RlbXAuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfdGVtcF9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl90ZW1wX3R5cGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfYWNjZWxfeC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9hY2NlbF94X2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2FjY2VsX3kuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfYWNjZWxfeV9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9hY2NlbF96LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2FjY2VsX3pfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfYWNjZWxfdHlwZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9pbmNsaV94LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luY2xpX3hfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfaW5jbGlfeS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbmNsaV95X2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luY2xpX3R5cGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfaW4xLmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luMV9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjFfdHlwZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF90aW1lc3RhbXAuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfdGltZXN0YW1wX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX3RpbWVzdGFtcF90eXBlLmRldl9hdHRyLmF0dHIsCi0JTlVMTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFkaXMxNjMwMF9zY2FuX2VsX2dyb3VwID0gewotCS5hdHRycyA9IGFkaXMxNjMwMF9zY2FuX2VsX2F0dHJzLAotCS5uYW1lID0gInNjYW5fZWxlbWVudHMiLAotfTsKLQotLyoqCi0gKiBhZGlzMTYzMDBfcG9sbF9mdW5jX3RoKCkgdG9wIGhhbGYgaW50ZXJydXB0IGhhbmRsZXIgY2FsbGVkIGJ5IHRyaWdnZXIKLSAqIEBwcml2YXRlX2RhdGE6CWlpb19kZXYKLSAqKi8KLXN0YXRpYyB2b2lkIGFkaXMxNjMwMF9wb2xsX2Z1bmNfdGgoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwgczY0IHRpbWUpCi17Ci0Jc3RydWN0IGFkaXMxNjMwMF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7Ci0Jc3QtPmxhc3RfdGltZXN0YW1wID0gdGltZTsKLQlzY2hlZHVsZV93b3JrKCZzdC0+d29ya190cmlnZ2VyX3RvX3JpbmcpOwotCS8qIEluZGljYXRlIHRoYXQgdGhpcyBpbnRlcnJ1cHQgaXMgYmVpbmcgaGFuZGxlZCAqLwotCi0JLyogVGVjaG5pY2FsbHkgdGhpcyBpcyB0cmlnZ2VyIHJlbGF0ZWQsIGJ1dCB3aXRob3V0IHRoaXMKLQkgKiBoYW5kbGVyIHJ1bm5pbmcgdGhlcmUgaXMgY3VycmVudGx5IG5vIHdheSBmb3IgdGhlIGludGVycnVwdAotCSAqIHRvIGNsZWFyLgotCSAqLwotfQotCi0vKioKLSAqIGFkaXMxNjMwMF9zcGlfcmVhZF9idXJzdCgpIC0gcmVhZCBhbGwgZGF0YSByZWdpc3RlcnMKLSAqIEBkZXY6IGRldmljZSBhc3NvY2lhdGVkIHdpdGggY2hpbGQgb2YgYWN0dWFsIGRldmljZSAoaWlvX2RldiBvciBpaW9fdHJpZykKLSAqIEByeDogc29tZXdoZXJlIHRvIHBhc3MgYmFjayB0aGUgdmFsdWUgcmVhZCAobWluIHNpemUgaXMgMjQgYnl0ZXMpCi0gKiovCi1zdGF0aWMgaW50IGFkaXMxNjMwMF9zcGlfcmVhZF9idXJzdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU4ICpyeCkKLXsKLQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbXNnOwotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgYWRpczE2MzAwX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKLQl1MzIgb2xkX3NwZWVkX2h6ID0gc3QtPnVzLT5tYXhfc3BlZWRfaHo7Ci0JaW50IHJldDsKLQotCXN0cnVjdCBzcGlfdHJhbnNmZXIgeGZlcnNbXSA9IHsKLQkJewotCQkJLnR4X2J1ZiA9IHN0LT50eCwKLQkJCS5iaXRzX3Blcl93b3JkID0gOCwKLQkJCS5sZW4gPSAyLAotCQkJLmNzX2NoYW5nZSA9IDAsCi0JCX0sIHsKLQkJCS5yeF9idWYgPSByeCwKLQkJCS5iaXRzX3Blcl93b3JkID0gOCwKLQkJCS5sZW4gPSAxOCwKLQkJCS5jc19jaGFuZ2UgPSAwLAotCQl9LAotCX07Ci0KLQltdXRleF9sb2NrKCZzdC0+YnVmX2xvY2spOwotCXN0LT50eFswXSA9IEFESVMxNjMwMF9SRUFEX1JFRyhBRElTMTYzMDBfR0xPQl9DTUQpOwotCXN0LT50eFsxXSA9IDA7Ci0KLQlzcGlfbWVzc2FnZV9pbml0KCZtc2cpOwotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ4ZmVyc1swXSwgJm1zZyk7Ci0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnhmZXJzWzFdLCAmbXNnKTsKLQotCXN0LT51cy0+bWF4X3NwZWVkX2h6ID0gQURJUzE2MzAwX1NQSV9CVVJTVDsKLQlzcGlfc2V0dXAoc3QtPnVzKTsKLQotCXJldCA9IHNwaV9zeW5jKHN0LT51cywgJm1zZyk7Ci0JaWYgKHJldCkKLQkJZGV2X2Vycigmc3QtPnVzLT5kZXYsICJwcm9ibGVtIHdoZW4gYnVyc3QgcmVhZGluZyIpOwotCi0Jc3QtPnVzLT5tYXhfc3BlZWRfaHogPSBvbGRfc3BlZWRfaHo7Ci0Jc3BpX3NldHVwKHN0LT51cyk7Ci0JbXV0ZXhfdW5sb2NrKCZzdC0+YnVmX2xvY2spOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qIFdoaWxzdCB0aGlzIG1ha2VzIGEgbG90IG9mIGNhbGxzIHRvIGlpb19zd19yaW5nIGZ1bmN0aW9ucyAtIGl0IGlzIHRvIGRldmljZQotICogc3BlY2lmaWMgdG8gYmUgcm9sbGVkIGludG8gdGhlIGNvcmUuCi0gKi8KLXN0YXRpYyB2b2lkIGFkaXMxNjMwMF90cmlnZ2VyX2JoX3RvX3Jpbmcoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrX3MpCi17Ci0Jc3RydWN0IGFkaXMxNjMwMF9zdGF0ZSAqc3QKLQkJPSBjb250YWluZXJfb2Yod29ya19zLCBzdHJ1Y3QgYWRpczE2MzAwX3N0YXRlLAotCQkJICAgICAgIHdvcmtfdHJpZ2dlcl90b19yaW5nKTsKLQlzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nID0gc3QtPmluZGlvX2Rldi0+cmluZzsKLQotCWludCBpID0gMDsKLQlzMTYgKmRhdGE7Ci0Jc2l6ZV90IGRhdGFzaXplID0gcmluZy0+YWNjZXNzLmdldF9ieXRlc19wZXJfZGF0dW0ocmluZyk7Ci0KLQlkYXRhID0ga21hbGxvYyhkYXRhc2l6ZSAsIEdGUF9LRVJORUwpOwotCWlmIChkYXRhID09IE5VTEwpIHsKLQkJZGV2X2Vycigmc3QtPnVzLT5kZXYsICJtZW1vcnkgYWxsb2MgZmFpbGVkIGluIHJpbmcgYmgiKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChyaW5nLT5zY2FuX2NvdW50KQotCQlpZiAoYWRpczE2MzAwX3NwaV9yZWFkX2J1cnN0KCZzdC0+aW5kaW9fZGV2LT5kZXYsIHN0LT5yeCkgPj0gMCkKLQkJCWZvciAoOyBpIDwgcmluZy0+c2Nhbl9jb3VudDsgaSsrKQotCQkJCWRhdGFbaV0gPSBiZTE2X3RvX2NwdXAoCi0JCQkJCShfX2JlMTYgKikmKHN0LT5yeFtpKjJdKSk7Ci0KLQkvKiBHdWFyYW50ZWVkIHRvIGJlIGFsaWduZWQgd2l0aCA4IGJ5dGUgYm91bmRhcnkgKi8KLQlpZiAocmluZy0+c2Nhbl90aW1lc3RhbXApCi0JCSooKHM2NCAqKShkYXRhICsgKChpICsgMykvNCkqNCkpID0gc3QtPmxhc3RfdGltZXN0YW1wOwotCi0JcmluZy0+YWNjZXNzLnN0b3JlX3RvKHJpbmcsCi0JCQkodTggKilkYXRhLAotCQkJc3QtPmxhc3RfdGltZXN0YW1wKTsKLQotCWlpb190cmlnZ2VyX25vdGlmeV9kb25lKHN0LT5pbmRpb19kZXYtPnRyaWcpOwotCWtmcmVlKGRhdGEpOwotCi0JcmV0dXJuOwotfQotCi12b2lkIGFkaXMxNjMwMF91bmNvbmZpZ3VyZV9yaW5nKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCi17Ci0Ja2ZyZWUoaW5kaW9fZGV2LT5wb2xsZnVuYyk7Ci0JaWlvX3N3X3JiX2ZyZWUoaW5kaW9fZGV2LT5yaW5nKTsKLX0KLQotaW50IGFkaXMxNjMwMF9jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQotewotCWludCByZXQgPSAwOwotCXN0cnVjdCBhZGlzMTYzMDBfc3RhdGUgKnN0ID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKLQlzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nOwotCUlOSVRfV09SSygmc3QtPndvcmtfdHJpZ2dlcl90b19yaW5nLCBhZGlzMTYzMDBfdHJpZ2dlcl9iaF90b19yaW5nKTsKLQotCXJpbmcgPSBpaW9fc3dfcmJfYWxsb2NhdGUoaW5kaW9fZGV2KTsKLQlpZiAoIXJpbmcpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JaW5kaW9fZGV2LT5yaW5nID0gcmluZzsKLQkvKiBFZmZlY3RpdmVseSBzZWxlY3QgdGhlIHJpbmcgYnVmZmVyIGltcGxlbWVudGF0aW9uICovCi0JaWlvX3Jpbmdfc3dfcmVnaXN0ZXJfZnVuY3MoJnJpbmctPmFjY2Vzcyk7Ci0JcmluZy0+YnBlID0gMjsKLQlyaW5nLT5zY2FuX2VsX2F0dHJzID0gJmFkaXMxNjMwMF9zY2FuX2VsX2dyb3VwOwotCXJpbmctPnNjYW5fdGltZXN0YW1wID0gdHJ1ZTsKLQlyaW5nLT5wcmVlbmFibGUgPSAmaWlvX3N3X3JpbmdfcHJlZW5hYmxlOwotCXJpbmctPnBvc3RlbmFibGUgPSAmaWlvX3RyaWdnZXJlZF9yaW5nX3Bvc3RlbmFibGU7Ci0JcmluZy0+cHJlZGlzYWJsZSA9ICZpaW9fdHJpZ2dlcmVkX3JpbmdfcHJlZGlzYWJsZTsKLQlyaW5nLT5vd25lciA9IFRISVNfTU9EVUxFOwotCi0JLyogU2V0IGRlZmF1bHQgc2NhbiBtb2RlICovCi0JaWlvX3NjYW5fbWFza19zZXQocmluZywgaWlvX3NjYW5fZWxfaW4wX3N1cHBseS5udW1iZXIpOwotCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIGlpb19zY2FuX2VsX2d5cm9feC5udW1iZXIpOwotCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIGlpb19zY2FuX2VsX2FjY2VsX3gubnVtYmVyKTsKLQlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCBpaW9fc2Nhbl9lbF9hY2NlbF95Lm51bWJlcik7Ci0JaWlvX3NjYW5fbWFza19zZXQocmluZywgaWlvX3NjYW5fZWxfYWNjZWxfei5udW1iZXIpOwotCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIGlpb19zY2FuX2VsX3RlbXAubnVtYmVyKTsKLQlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCBpaW9fc2Nhbl9lbF9pbjEubnVtYmVyKTsKLQlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCBpaW9fc2Nhbl9lbF9pbmNsaV94Lm51bWJlcik7Ci0JaWlvX3NjYW5fbWFza19zZXQocmluZywgaWlvX3NjYW5fZWxfaW5jbGlfeS5udW1iZXIpOwotCi0JcmV0ID0gaWlvX2FsbG9jX3BvbGxmdW5jKGluZGlvX2RldiwgTlVMTCwgJmFkaXMxNjMwMF9wb2xsX2Z1bmNfdGgpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyb3JfaWlvX3N3X3JiX2ZyZWU7Ci0KLQlpbmRpb19kZXYtPm1vZGVzIHw9IElORElPX1JJTkdfVFJJR0dFUkVEOwotCXJldHVybiAwOwotCi1lcnJvcl9paW9fc3dfcmJfZnJlZToKLQlpaW9fc3dfcmJfZnJlZShpbmRpb19kZXYtPnJpbmcpOwotCXJldHVybiByZXQ7Ci19Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjMwMF90cmlnZ2VyLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTYzMDBfdHJpZ2dlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjY3N2I2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjMwMF90cmlnZ2VyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotCi0jaW5jbHVkZSAiLi4vaWlvLmgiCi0jaW5jbHVkZSAiLi4vc3lzZnMuaCIKLSNpbmNsdWRlICIuLi90cmlnZ2VyLmgiCi0jaW5jbHVkZSAiYWRpczE2MzAwLmgiCi0KLS8qKgotICogYWRpczE2MzAwX2RhdGFfcmR5X3RyaWdfcG9sbCgpIHRoZSBldmVudCBoYW5kbGVyIGZvciB0aGUgZGF0YSByZHkgdHJpZwotICoqLwotc3RhdGljIGludCBhZGlzMTYzMDBfZGF0YV9yZHlfdHJpZ19wb2xsKHN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbywKLQkJCQkgICAgICAgaW50IGluZGV4LAotCQkJCSAgICAgICBzNjQgdGltZXN0YW1wLAotCQkJCSAgICAgICBpbnQgbm9fdGVzdCkKLXsKLQlzdHJ1Y3QgYWRpczE2MzAwX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoZGV2X2luZm8pOwotCXN0cnVjdCBpaW9fdHJpZ2dlciAqdHJpZyA9IHN0LT50cmlnOwotCi0JaWlvX3RyaWdnZXJfcG9sbCh0cmlnLCB0aW1lc3RhbXApOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1JSU9fRVZFTlRfU0goZGF0YV9yZHlfdHJpZywgJmFkaXMxNjMwMF9kYXRhX3JkeV90cmlnX3BvbGwpOwotCi1zdGF0aWMgSUlPX1RSSUdHRVJfTkFNRV9BVFRSOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWRpczE2MzAwX3RyaWdnZXJfYXR0cnNbXSA9IHsKLQkmZGV2X2F0dHJfbmFtZS5hdHRyLAotCU5VTEwsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZGlzMTYzMDBfdHJpZ2dlcl9hdHRyX2dyb3VwID0gewotCS5hdHRycyA9IGFkaXMxNjMwMF90cmlnZ2VyX2F0dHJzLAotfTsKLQotLyoqCi0gKiBhZGlzMTYzMDBfZGF0YV9yZHlfdHJpZ2dlcl9zZXRfc3RhdGUoKSBzZXQgZGF0YXJkeSBpbnRlcnJ1cHQgc3RhdGUKLSAqKi8KLXN0YXRpYyBpbnQgYWRpczE2MzAwX2RhdGFfcmR5X3RyaWdnZXJfc2V0X3N0YXRlKHN0cnVjdCBpaW9fdHJpZ2dlciAqdHJpZywKLQkJCQkJCWJvb2wgc3RhdGUpCi17Ci0Jc3RydWN0IGFkaXMxNjMwMF9zdGF0ZSAqc3QgPSB0cmlnLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHN0LT5pbmRpb19kZXY7Ci0JaW50IHJldCA9IDA7Ci0KLQlkZXZfZGJnKCZpbmRpb19kZXYtPmRldiwgIiVzICglZClcbiIsIF9fZnVuY19fLCBzdGF0ZSk7Ci0JcmV0ID0gYWRpczE2MzAwX3NldF9pcnEoJnN0LT5pbmRpb19kZXYtPmRldiwgc3RhdGUpOwotCWlmIChzdGF0ZSA9PSBmYWxzZSkgewotCQlpaW9fcmVtb3ZlX2V2ZW50X2Zyb21fbGlzdCgmaWlvX2V2ZW50X2RhdGFfcmR5X3RyaWcsCi0JCQkJCSAgICZpbmRpb19kZXYtPmludGVycnVwdHNbMF0KLQkJCQkJICAgLT5ldl9saXN0KTsKLQkJLyogcG9zc2libGUgcXVpcmsgd2l0aCBoYW5kbGVyIGN1cnJlbnRseSB3b3JrZWQgYXJvdW5kCi0JCSAgIGJ5IGVuc3VyaW5nIHRoZSB3b3JrIHF1ZXVlIGlzIGVtcHR5ICovCi0JCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Ci0JfSBlbHNlIHsKLQkJaWlvX2FkZF9ldmVudF90b19saXN0KCZpaW9fZXZlbnRfZGF0YV9yZHlfdHJpZywKLQkJCQkgICAgICAmaW5kaW9fZGV2LT5pbnRlcnJ1cHRzWzBdLT5ldl9saXN0KTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBhZGlzMTYzMDBfdHJpZ190cnlfcmVlbigpIHRyeSByZW5hYmxpbmcgaXJxIGZvciBkYXRhIHJkeSB0cmlnZ2VyCi0gKiBAdHJpZzoJdGhlIGRhdGFyZHkgdHJpZ2dlcgotICoqLwotc3RhdGljIGludCBhZGlzMTYzMDBfdHJpZ190cnlfcmVlbihzdHJ1Y3QgaWlvX3RyaWdnZXIgKnRyaWcpCi17Ci0Jc3RydWN0IGFkaXMxNjMwMF9zdGF0ZSAqc3QgPSB0cmlnLT5wcml2YXRlX2RhdGE7Ci0JZW5hYmxlX2lycShzdC0+dXMtPmlycSk7Ci0JLyogaXJxIHJlZW5hYmxlZCBzbyBzdWNjZXNzISAqLwotCXJldHVybiAwOwotfQotCi1pbnQgYWRpczE2MzAwX3Byb2JlX3RyaWdnZXIoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBhZGlzMTYzMDBfc3RhdGUgKnN0ID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKLQotCXN0LT50cmlnID0gaWlvX2FsbG9jYXRlX3RyaWdnZXIoKTsKLQlzdC0+dHJpZy0+bmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLAotCQkJCSAgICJhZGlzMTYzMDAtZGV2JWQiLAotCQkJCSAgIGluZGlvX2Rldi0+aWQpOwotCWlmICghc3QtPnRyaWctPm5hbWUpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJvcl9mcmVlX3RyaWc7Ci0JfQotCXN0LT50cmlnLT5kZXYucGFyZW50ID0gJnN0LT51cy0+ZGV2OwotCXN0LT50cmlnLT5vd25lciA9IFRISVNfTU9EVUxFOwotCXN0LT50cmlnLT5wcml2YXRlX2RhdGEgPSBzdDsKLQlzdC0+dHJpZy0+c2V0X3RyaWdnZXJfc3RhdGUgPSAmYWRpczE2MzAwX2RhdGFfcmR5X3RyaWdnZXJfc2V0X3N0YXRlOwotCXN0LT50cmlnLT50cnlfcmVlbmFibGUgPSAmYWRpczE2MzAwX3RyaWdfdHJ5X3JlZW47Ci0Jc3QtPnRyaWctPmNvbnRyb2xfYXR0cnMgPSAmYWRpczE2MzAwX3RyaWdnZXJfYXR0cl9ncm91cDsKLQlyZXQgPSBpaW9fdHJpZ2dlcl9yZWdpc3RlcihzdC0+dHJpZyk7Ci0KLQkvKiBzZWxlY3QgZGVmYXVsdCB0cmlnZ2VyICovCi0JaW5kaW9fZGV2LT50cmlnID0gc3QtPnRyaWc7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJvcl9mcmVlX3RyaWdfbmFtZTsKLQotCXJldHVybiAwOwotCi1lcnJvcl9mcmVlX3RyaWdfbmFtZToKLQlrZnJlZShzdC0+dHJpZy0+bmFtZSk7Ci1lcnJvcl9mcmVlX3RyaWc6Ci0JaWlvX2ZyZWVfdHJpZ2dlcihzdC0+dHJpZyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi12b2lkIGFkaXMxNjMwMF9yZW1vdmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQotewotCXN0cnVjdCBhZGlzMTYzMDBfc3RhdGUgKnN0YXRlID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKLQotCWlpb190cmlnZ2VyX3VucmVnaXN0ZXIoc3RhdGUtPnRyaWcpOwotCWtmcmVlKHN0YXRlLT50cmlnLT5uYW1lKTsKLQlpaW9fZnJlZV90cmlnZ2VyKHN0YXRlLT50cmlnKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjM1MC5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzUwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxYWQ0ODYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzUwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzcgKzAsMCBAQAotI2lmbmRlZiBTUElfQURJUzE2MzUwX0hfCi0jZGVmaW5lIFNQSV9BRElTMTYzNTBfSF8KLQotI2RlZmluZSBBRElTMTYzNTBfU1RBUlRVUF9ERUxBWQkyMjAgLyogbXMgKi8KLQotI2RlZmluZSBBRElTMTYzNTBfUkVBRF9SRUcoYSkgICAgYQotI2RlZmluZSBBRElTMTYzNTBfV1JJVEVfUkVHKGEpICgoYSkgfCAweDgwKQotCi0jZGVmaW5lIEFESVMxNjM1MF9GTEFTSF9DTlQgIDB4MDAgLyogRmxhc2ggbWVtb3J5IHdyaXRlIGNvdW50ICovCi0jZGVmaW5lIEFESVMxNjM1MF9TVVBQTFlfT1VUIDB4MDIgLyogUG93ZXIgc3VwcGx5IG1lYXN1cmVtZW50ICovCi0jZGVmaW5lIEFESVMxNjM1MF9YR1lST19PVVQgMHgwNCAvKiBYLWF4aXMgZ3lyb3Njb3BlIG91dHB1dCAqLwotI2RlZmluZSBBRElTMTYzNTBfWUdZUk9fT1VUIDB4MDYgLyogWS1heGlzIGd5cm9zY29wZSBvdXRwdXQgKi8KLSNkZWZpbmUgQURJUzE2MzUwX1pHWVJPX09VVCAweDA4IC8qIFotYXhpcyBneXJvc2NvcGUgb3V0cHV0ICovCi0jZGVmaW5lIEFESVMxNjM1MF9YQUNDTF9PVVQgMHgwQSAvKiBYLWF4aXMgYWNjZWxlcm9tZXRlciBvdXRwdXQgKi8KLSNkZWZpbmUgQURJUzE2MzUwX1lBQ0NMX09VVCAweDBDIC8qIFktYXhpcyBhY2NlbGVyb21ldGVyIG91dHB1dCAqLwotI2RlZmluZSBBRElTMTYzNTBfWkFDQ0xfT1VUIDB4MEUgLyogWi1heGlzIGFjY2VsZXJvbWV0ZXIgb3V0cHV0ICovCi0jZGVmaW5lIEFESVMxNjM1MF9YVEVNUF9PVVQgMHgxMCAvKiBYLWF4aXMgZ3lyb3Njb3BlIHRlbXBlcmF0dXJlIG1lYXN1cmVtZW50ICovCi0jZGVmaW5lIEFESVMxNjM1MF9ZVEVNUF9PVVQgMHgxMiAvKiBZLWF4aXMgZ3lyb3Njb3BlIHRlbXBlcmF0dXJlIG1lYXN1cmVtZW50ICovCi0jZGVmaW5lIEFESVMxNjM1MF9aVEVNUF9PVVQgMHgxNCAvKiBaLWF4aXMgZ3lyb3Njb3BlIHRlbXBlcmF0dXJlIG1lYXN1cmVtZW50ICovCi0jZGVmaW5lIEFESVMxNjM1MF9BVVhfQURDICAgMHgxNiAvKiBBdXhpbGlhcnkgQURDIG1lYXN1cmVtZW50ICovCi0KLS8qIENhbGlicmF0aW9uIHBhcmFtZXRlcnMgKi8KLSNkZWZpbmUgQURJUzE2MzUwX1hHWVJPX09GRiAweDFBIC8qIFgtYXhpcyBneXJvc2NvcGUgYmlhcyBvZmZzZXQgZmFjdG9yICovCi0jZGVmaW5lIEFESVMxNjM1MF9ZR1lST19PRkYgMHgxQyAvKiBZLWF4aXMgZ3lyb3Njb3BlIGJpYXMgb2Zmc2V0IGZhY3RvciAqLwotI2RlZmluZSBBRElTMTYzNTBfWkdZUk9fT0ZGIDB4MUUgLyogWi1heGlzIGd5cm9zY29wZSBiaWFzIG9mZnNldCBmYWN0b3IgKi8KLSNkZWZpbmUgQURJUzE2MzUwX1hBQ0NMX09GRiAweDIwIC8qIFgtYXhpcyBhY2NlbGVyYXRpb24gYmlhcyBvZmZzZXQgZmFjdG9yICovCi0jZGVmaW5lIEFESVMxNjM1MF9ZQUNDTF9PRkYgMHgyMiAvKiBZLWF4aXMgYWNjZWxlcmF0aW9uIGJpYXMgb2Zmc2V0IGZhY3RvciAqLwotI2RlZmluZSBBRElTMTYzNTBfWkFDQ0xfT0ZGIDB4MjQgLyogWi1heGlzIGFjY2VsZXJhdGlvbiBiaWFzIG9mZnNldCBmYWN0b3IgKi8KLQotI2RlZmluZSBBRElTMTYzNTBfR1BJT19DVFJMIDB4MzIgLyogQXV4aWxpYXJ5IGRpZ2l0YWwgaW5wdXQvb3V0cHV0IGNvbnRyb2wgKi8KLSNkZWZpbmUgQURJUzE2MzUwX01TQ19DVFJMICAweDM0IC8qIE1pc2NlbGxhbmVvdXMgY29udHJvbCAqLwotI2RlZmluZSBBRElTMTYzNTBfU01QTF9QUkQgIDB4MzYgLyogSW50ZXJuYWwgc2FtcGxlIHBlcmlvZCAocmF0ZSkgY29udHJvbCAqLwotI2RlZmluZSBBRElTMTYzNTBfU0VOU19BVkcgIDB4MzggLyogRHluYW1pYyByYW5nZSBhbmQgZGlnaXRhbCBmaWx0ZXIgY29udHJvbCAqLwotI2RlZmluZSBBRElTMTYzNTBfU0xQX0NOVCAgIDB4M0EgLyogU2xlZXAgbW9kZSBjb250cm9sICovCi0jZGVmaW5lIEFESVMxNjM1MF9ESUFHX1NUQVQgMHgzQyAvKiBTeXN0ZW0gc3RhdHVzICovCi0KLS8qIEFsYXJtIGZ1bmN0aW9ucyAqLwotI2RlZmluZSBBRElTMTYzNTBfR0xPQl9DTUQgIDB4M0UgLyogU3lzdGVtIGNvbW1hbmQgKi8KLSNkZWZpbmUgQURJUzE2MzUwX0FMTV9NQUcxICAweDI2IC8qIEFsYXJtIDEgYW1wbGl0dWRlIHRocmVzaG9sZCAqLwotI2RlZmluZSBBRElTMTYzNTBfQUxNX01BRzIgIDB4MjggLyogQWxhcm0gMiBhbXBsaXR1ZGUgdGhyZXNob2xkICovCi0jZGVmaW5lIEFESVMxNjM1MF9BTE1fU01QTDEgMHgyQSAvKiBBbGFybSAxIHNhbXBsZSBzaXplICovCi0jZGVmaW5lIEFESVMxNjM1MF9BTE1fU01QTDIgMHgyQyAvKiBBbGFybSAyIHNhbXBsZSBzaXplICovCi0jZGVmaW5lIEFESVMxNjM1MF9BTE1fQ1RSTCAgMHgyRSAvKiBBbGFybSBjb250cm9sICovCi0jZGVmaW5lIEFESVMxNjM1MF9BVVhfREFDICAgMHgzMCAvKiBBdXhpbGlhcnkgREFDIGRhdGEgKi8KLQotI2RlZmluZSBBRElTMTYzNTBfRVJST1JfQUNUSVZFCQkJKDE8PDE0KQotI2RlZmluZSBBRElTMTYzNTBfTkVXX0RBVEEJCQkoMTw8MTUpCi0KLS8qIE1TQ19DVFJMICovCi0jZGVmaW5lIEFESVMxNjM1MF9NU0NfQ1RSTF9NRU1fVEVTVAkJKDE8PDExKQotI2RlZmluZSBBRElTMTYzNTBfTVNDX0NUUkxfSU5UX1NFTEZfVEVTVAkoMTw8MTApCi0jZGVmaW5lIEFESVMxNjM1MF9NU0NfQ1RSTF9ORUdfU0VMRl9URVNUCSgxPDw5KQotI2RlZmluZSBBRElTMTYzNTBfTVNDX0NUUkxfUE9TX1NFTEZfVEVTVAkoMTw8OCkKLSNkZWZpbmUgQURJUzE2MzUwX01TQ19DVFJMX0dZUk9fQklBUwkJKDE8PDcpCi0jZGVmaW5lIEFESVMxNjM1MF9NU0NfQ1RSTF9BQ0NMX0FMSUdOCQkoMTw8NikKLSNkZWZpbmUgQURJUzE2MzUwX01TQ19DVFJMX0RBVEFfUkRZX0VOCQkoMTw8MikKLSNkZWZpbmUgQURJUzE2MzUwX01TQ19DVFJMX0RBVEFfUkRZX1BPTF9ISUdICSgxPDwxKQotI2RlZmluZSBBRElTMTYzNTBfTVNDX0NUUkxfREFUQV9SRFlfRElPMgkoMTw8MCkKLQotLyogU01QTF9QUkQgKi8KLSNkZWZpbmUgQURJUzE2MzUwX1NNUExfUFJEX1RJTUVfQkFTRQkoMTw8NykKLSNkZWZpbmUgQURJUzE2MzUwX1NNUExfUFJEX0RJVl9NQVNLCTB4N0YKLQotLyogRElBR19TVEFUICovCi0jZGVmaW5lIEFESVMxNjM1MF9ESUFHX1NUQVRfWkFDQ0xfRkFJTAkoMTw8MTUpCi0jZGVmaW5lIEFESVMxNjM1MF9ESUFHX1NUQVRfWUFDQ0xfRkFJTAkoMTw8MTQpCi0jZGVmaW5lIEFESVMxNjM1MF9ESUFHX1NUQVRfWEFDQ0xfRkFJTAkoMTw8MTMpCi0jZGVmaW5lIEFESVMxNjM1MF9ESUFHX1NUQVRfWEdZUk9fRkFJTAkoMTw8MTIpCi0jZGVmaW5lIEFESVMxNjM1MF9ESUFHX1NUQVRfWUdZUk9fRkFJTAkoMTw8MTEpCi0jZGVmaW5lIEFESVMxNjM1MF9ESUFHX1NUQVRfWkdZUk9fRkFJTAkoMTw8MTApCi0jZGVmaW5lIEFESVMxNjM1MF9ESUFHX1NUQVRfQUxBUk0yCSgxPDw5KQotI2RlZmluZSBBRElTMTYzNTBfRElBR19TVEFUX0FMQVJNMQkoMTw8OCkKLSNkZWZpbmUgQURJUzE2MzUwX0RJQUdfU1RBVF9GTEFTSF9DSEsJKDE8PDYpCi0jZGVmaW5lIEFESVMxNjM1MF9ESUFHX1NUQVRfU0VMRl9URVNUCSgxPDw1KQotI2RlZmluZSBBRElTMTYzNTBfRElBR19TVEFUX09WRVJGTE9XCSgxPDw0KQotI2RlZmluZSBBRElTMTYzNTBfRElBR19TVEFUX1NQSV9GQUlMCSgxPDwzKQotI2RlZmluZSBBRElTMTYzNTBfRElBR19TVEFUX0ZMQVNIX1VQVAkoMTw8MikKLSNkZWZpbmUgQURJUzE2MzUwX0RJQUdfU1RBVF9QT1dFUl9ISUdICSgxPDwxKQotI2RlZmluZSBBRElTMTYzNTBfRElBR19TVEFUX1BPV0VSX0xPVwkoMTw8MCkKLQotLyogR0xPQl9DTUQgKi8KLSNkZWZpbmUgQURJUzE2MzUwX0dMT0JfQ01EX1NXX1JFU0VUCSgxPDw3KQotI2RlZmluZSBBRElTMTYzNTBfR0xPQl9DTURfUF9BVVRPX05VTEwJKDE8PDQpCi0jZGVmaW5lIEFESVMxNjM1MF9HTE9CX0NNRF9GTEFTSF9VUEQJKDE8PDMpCi0jZGVmaW5lIEFESVMxNjM1MF9HTE9CX0NNRF9EQUNfTEFUQ0gJKDE8PDIpCi0jZGVmaW5lIEFESVMxNjM1MF9HTE9CX0NNRF9GQUNfQ0FMSUIJKDE8PDEpCi0jZGVmaW5lIEFESVMxNjM1MF9HTE9CX0NNRF9BVVRPX05VTEwJKDE8PDApCi0KLS8qIFNMUF9DTlQgKi8KLSNkZWZpbmUgQURJUzE2MzUwX1NMUF9DTlRfUE9XRVJfT0ZGCSgxPDw4KQotCi0jZGVmaW5lIEFESVMxNjM1MF9NQVhfVFggMjQKLSNkZWZpbmUgQURJUzE2MzUwX01BWF9SWCAyNAotCi0jZGVmaW5lIEFESVMxNjM1MF9TUElfU0xPVwkodTMyKSgzMDAgKiAxMDAwKQotI2RlZmluZSBBRElTMTYzNTBfU1BJX0JVUlNUCSh1MzIpKDEwMDAgKiAxMDAwKQotI2RlZmluZSBBRElTMTYzNTBfU1BJX0ZBU1QJKHUzMikoMjAwMCAqIDEwMDApCi0KLS8qKgotICogc3RydWN0IGFkaXMxNjM1MF9zdGF0ZSAtIGRldmljZSBpbnN0YW5jZSBzcGVjaWZpYyBkYXRhCi0gKiBAdXM6CQkJYWN0dWFsIHNwaV9kZXZpY2UKLSAqIEB3b3JrX3RyaWdnZXJfdG9fcmluZzogYmggZm9yIHRyaWdnZXJlZCBldmVudCBoYW5kbGluZwotICogQGludGVyOgkJdXNlZCB0byBjaGVjayBpZiBuZXcgaW50ZXJydXB0IGhhcyBiZWVuIHRyaWdnZXJlZAotICogQGxhc3RfdGltZXN0YW1wOglwYXNzaW5nIHRpbWVzdGFtcCBmcm9tIHRoIHRvIGJoIG9mIGludGVycnVwdCBoYW5kbGVyCi0gKiBAaW5kaW9fZGV2OgkJaW5kdXN0cmlhbCBJL08gZGV2aWNlIHN0cnVjdHVyZQotICogQHRyaWc6CQlkYXRhIHJlYWR5IHRyaWdnZXIgcmVnaXN0ZXJlZCB3aXRoIGlpbwotICogQHR4OgkJCXRyYW5zbWl0IGJ1ZmZlcgotICogQHJ4OgkJCXJlY2VpdmUgYnVmZmVyCi0gKiBAYnVmX2xvY2s6CQltdXRleCB0byBwcm90ZWN0IHR4IGFuZCByeAotICoqLwotc3RydWN0IGFkaXMxNjM1MF9zdGF0ZSB7Ci0Jc3RydWN0IHNwaV9kZXZpY2UJCSp1czsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCXdvcmtfdHJpZ2dlcl90b19yaW5nOwotCXM2NAkJCQlsYXN0X3RpbWVzdGFtcDsKLQlzdHJ1Y3QgaWlvX2RldgkJCSppbmRpb19kZXY7Ci0Jc3RydWN0IGlpb190cmlnZ2VyCQkqdHJpZzsKLQl1OAkJCQkqdHg7Ci0JdTgJCQkJKnJ4OwotCXN0cnVjdCBtdXRleAkJCWJ1Zl9sb2NrOwotfTsKLQotaW50IGFkaXMxNjM1MF9zZXRfaXJxKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBlbmFibGUpOwotCi0jaWZkZWYgQ09ORklHX0lJT19SSU5HX0JVRkZFUgotCi0jZGVmaW5lIEFESVMxNjM1MF9TQ0FOX1NVUFBMWQkwCi0jZGVmaW5lIEFESVMxNjM1MF9TQ0FOX0dZUk9fWAkxCi0jZGVmaW5lIEFESVMxNjM1MF9TQ0FOX0dZUk9fWQkyCi0jZGVmaW5lIEFESVMxNjM1MF9TQ0FOX0dZUk9fWgkzCi0jZGVmaW5lIEFESVMxNjM1MF9TQ0FOX0FDQ19YCTQKLSNkZWZpbmUgQURJUzE2MzUwX1NDQU5fQUNDX1kJNQotI2RlZmluZSBBRElTMTYzNTBfU0NBTl9BQ0NfWgk2Ci0jZGVmaW5lIEFESVMxNjM1MF9TQ0FOX1RFTVBfWAk3Ci0jZGVmaW5lIEFESVMxNjM1MF9TQ0FOX1RFTVBfWQk4Ci0jZGVmaW5lIEFESVMxNjM1MF9TQ0FOX1RFTVBfWgk5Ci0jZGVmaW5lIEFESVMxNjM1MF9TQ0FOX0FEQ18wCTEwCi0KLXZvaWQgYWRpczE2MzUwX3JlbW92ZV90cmlnZ2VyKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwotaW50IGFkaXMxNjM1MF9wcm9iZV90cmlnZ2VyKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwotCi1zc2l6ZV90IGFkaXMxNjM1MF9yZWFkX2RhdGFfZnJvbV9yaW5nKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkgICAgICBjaGFyICpidWYpOwotCi0KLWludCBhZGlzMTYzNTBfY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7Ci12b2lkIGFkaXMxNjM1MF91bmNvbmZpZ3VyZV9yaW5nKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwotCi0jZWxzZSAvKiBDT05GSUdfSUlPX1JJTkdfQlVGRkVSICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGlzMTYzNTBfcmVtb3ZlX3RyaWdnZXIoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKLXsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYWRpczE2MzUwX3Byb2JlX3RyaWdnZXIoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBzc2l6ZV90Ci1hZGlzMTYzNTBfcmVhZF9kYXRhX2Zyb21fcmluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCSAgICAgIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYWRpczE2MzUwX2NvbmZpZ3VyZV9yaW5nKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGlzMTYzNTBfdW5jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQotewotfQotI2VuZGlmIC8qIENPTkZJR19JSU9fUklOR19CVUZGRVIgKi8KLSNlbmRpZiAvKiBTUElfQURJUzE2MzUwX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTYzNTBfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzUwX2NvcmUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Y3MTc2Yi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTYzNTBfY29yZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNzU3ICswLDAgQEAKLS8qCi0gKiBBRElTMTYzNTAvNTQvNTUvNjAvNjIvNjQvNjUgaGlnaCBwcmVjaXNpb24gdHJpLWF4aXMgaW5lcnRpYWwgc2Vuc29yCi0gKgotICogQ29weXJpZ2h0IDIwMTAgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotCi0jaW5jbHVkZSAiLi4vaWlvLmgiCi0jaW5jbHVkZSAiLi4vc3lzZnMuaCIKLSNpbmNsdWRlICIuLi9yaW5nX2dlbmVyaWMuaCIKLSNpbmNsdWRlICIuLi9hY2NlbC9hY2NlbC5oIgotI2luY2x1ZGUgIi4uL2FkYy9hZGMuaCIKLSNpbmNsdWRlICIuLi9neXJvL2d5cm8uaCIKLQotI2luY2x1ZGUgImFkaXMxNjM1MC5oIgotCi0jZGVmaW5lIERSSVZFUl9OQU1FCQkiYWRpczE2MzUwIgotCi1zdGF0aWMgaW50IGFkaXMxNjM1MF9jaGVja19zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2KTsKLQotLyoqCi0gKiBhZGlzMTYzNTBfc3BpX3dyaXRlX3JlZ184KCkgLSB3cml0ZSBzaW5nbGUgYnl0ZSB0byBhIHJlZ2lzdGVyCi0gKiBAZGV2OiBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIGNoaWxkIG9mIGFjdHVhbCBkZXZpY2UgKGlpb19kZXYgb3IgaWlvX3RyaWcpCi0gKiBAcmVnX2FkZHJlc3M6IHRoZSBhZGRyZXNzIG9mIHRoZSByZWdpc3RlciB0byBiZSB3cml0dGVuCi0gKiBAdmFsOiB0aGUgdmFsdWUgdG8gd3JpdGUKLSAqKi8KLXN0YXRpYyBpbnQgYWRpczE2MzUwX3NwaV93cml0ZV9yZWdfOChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXU4IHJlZ19hZGRyZXNzLAotCQl1OCB2YWwpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGFkaXMxNjM1MF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7Ci0KLQltdXRleF9sb2NrKCZzdC0+YnVmX2xvY2spOwotCXN0LT50eFswXSA9IEFESVMxNjM1MF9XUklURV9SRUcocmVnX2FkZHJlc3MpOwotCXN0LT50eFsxXSA9IHZhbDsKLQotCXJldCA9IHNwaV93cml0ZShzdC0+dXMsIHN0LT50eCwgMik7Ci0JbXV0ZXhfdW5sb2NrKCZzdC0+YnVmX2xvY2spOwotCi0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBhZGlzMTYzNTBfc3BpX3dyaXRlX3JlZ18xNigpIC0gd3JpdGUgMiBieXRlcyB0byBhIHBhaXIgb2YgcmVnaXN0ZXJzCi0gKiBAZGV2OiBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIGNoaWxkIG9mIGFjdHVhbCBkZXZpY2UgKGlpb19kZXYgb3IgaWlvX3RyaWcpCi0gKiBAcmVnX2FkZHJlc3M6IHRoZSBhZGRyZXNzIG9mIHRoZSBsb3dlciBvZiB0aGUgdHdvIHJlZ2lzdGVycy4gU2Vjb25kIHJlZ2lzdGVyCi0gKiAgICAgICAgICAgICAgIGlzIGFzc3VtZWQgdG8gaGF2ZSBhZGRyZXNzIG9uZSBncmVhdGVyLgotICogQHZhbDogdmFsdWUgdG8gYmUgd3JpdHRlbgotICoqLwotc3RhdGljIGludCBhZGlzMTYzNTBfc3BpX3dyaXRlX3JlZ18xNihzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXU4IGxvd2VyX3JlZ19hZGRyZXNzLAotCQl1MTYgdmFsdWUpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbXNnOwotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgYWRpczE2MzUwX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKLQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHhmZXJzW10gPSB7Ci0JCXsKLQkJCS50eF9idWYgPSBzdC0+dHgsCi0JCQkuYml0c19wZXJfd29yZCA9IDgsCi0JCQkubGVuID0gMiwKLQkJCS5jc19jaGFuZ2UgPSAxLAotCQkJLmRlbGF5X3VzZWNzID0gMzUsCi0JCX0sIHsKLQkJCS50eF9idWYgPSBzdC0+dHggKyAyLAotCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAotCQkJLmxlbiA9IDIsCi0JCQkuY3NfY2hhbmdlID0gMSwKLQkJCS5kZWxheV91c2VjcyA9IDM1LAotCQl9LAotCX07Ci0KLQltdXRleF9sb2NrKCZzdC0+YnVmX2xvY2spOwotCXN0LT50eFswXSA9IEFESVMxNjM1MF9XUklURV9SRUcobG93ZXJfcmVnX2FkZHJlc3MpOwotCXN0LT50eFsxXSA9IHZhbHVlICYgMHhGRjsKLQlzdC0+dHhbMl0gPSBBRElTMTYzNTBfV1JJVEVfUkVHKGxvd2VyX3JlZ19hZGRyZXNzICsgMSk7Ci0Jc3QtPnR4WzNdID0gKHZhbHVlID4+IDgpICYgMHhGRjsKLQotCXNwaV9tZXNzYWdlX2luaXQoJm1zZyk7Ci0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnhmZXJzWzBdLCAmbXNnKTsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlcnNbMV0sICZtc2cpOwotCXJldCA9IHNwaV9zeW5jKHN0LT51cywgJm1zZyk7Ci0JbXV0ZXhfdW5sb2NrKCZzdC0+YnVmX2xvY2spOwotCi0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBhZGlzMTYzNTBfc3BpX3JlYWRfcmVnXzE2KCkgLSByZWFkIDIgYnl0ZXMgZnJvbSBhIDE2LWJpdCByZWdpc3RlcgotICogQGRldjogZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBjaGlsZCBvZiBhY3R1YWwgZGV2aWNlIChpaW9fZGV2IG9yIGlpb190cmlnKQotICogQHJlZ19hZGRyZXNzOiB0aGUgYWRkcmVzcyBvZiB0aGUgbG93ZXIgb2YgdGhlIHR3byByZWdpc3RlcnMuIFNlY29uZCByZWdpc3RlcgotICogICAgICAgICAgICAgICBpcyBhc3N1bWVkIHRvIGhhdmUgYWRkcmVzcyBvbmUgZ3JlYXRlci4KLSAqIEB2YWw6IHNvbWV3aGVyZSB0byBwYXNzIGJhY2sgdGhlIHZhbHVlIHJlYWQKLSAqKi8KLXN0YXRpYyBpbnQgYWRpczE2MzUwX3NwaV9yZWFkX3JlZ18xNihzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXU4IGxvd2VyX3JlZ19hZGRyZXNzLAotCQl1MTYgKnZhbCkKLXsKLQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbXNnOwotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgYWRpczE2MzUwX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKLQlpbnQgcmV0OwotCXN0cnVjdCBzcGlfdHJhbnNmZXIgeGZlcnNbXSA9IHsKLQkJewotCQkJLnR4X2J1ZiA9IHN0LT50eCwKLQkJCS5iaXRzX3Blcl93b3JkID0gOCwKLQkJCS5sZW4gPSAyLAotCQkJLmNzX2NoYW5nZSA9IDEsCi0JCQkuZGVsYXlfdXNlY3MgPSAzNSwKLQkJfSwgewotCQkJLnJ4X2J1ZiA9IHN0LT5yeCwKLQkJCS5iaXRzX3Blcl93b3JkID0gOCwKLQkJCS5sZW4gPSAyLAotCQkJLmNzX2NoYW5nZSA9IDEsCi0JCQkuZGVsYXlfdXNlY3MgPSAzNSwKLQkJfSwKLQl9OwotCi0JbXV0ZXhfbG9jaygmc3QtPmJ1Zl9sb2NrKTsKLQlzdC0+dHhbMF0gPSBBRElTMTYzNTBfUkVBRF9SRUcobG93ZXJfcmVnX2FkZHJlc3MpOwotCXN0LT50eFsxXSA9IDA7Ci0Jc3QtPnR4WzJdID0gMDsKLQlzdC0+dHhbM10gPSAwOwotCi0Jc3BpX21lc3NhZ2VfaW5pdCgmbXNnKTsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlcnNbMF0sICZtc2cpOwotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ4ZmVyc1sxXSwgJm1zZyk7Ci0JcmV0ID0gc3BpX3N5bmMoc3QtPnVzLCAmbXNnKTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJnN0LT51cy0+ZGV2LAotCQkJInByb2JsZW0gd2hlbiByZWFkaW5nIDE2IGJpdCByZWdpc3RlciAweCUwMlgiLAotCQkJbG93ZXJfcmVnX2FkZHJlc3MpOwotCQlnb3RvIGVycm9yX3JldDsKLQl9Ci0JKnZhbCA9IChzdC0+cnhbMF0gPDwgOCkgfCBzdC0+cnhbMV07Ci0KLWVycm9yX3JldDoKLQltdXRleF91bmxvY2soJnN0LT5idWZfbG9jayk7Ci0JcmV0dXJuIHJldDsKLX0KLQotCi1zdGF0aWMgc3NpemVfdCBhZGlzMTYzNTBfc3BpX3JlYWRfc2lnbmVkKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNoYXIgKmJ1ZiwKLQkJdW5zaWduZWQgYml0cykKLXsKLQlpbnQgcmV0OwotCXMxNiB2YWwgPSAwOwotCXVuc2lnbmVkIHNoaWZ0ID0gMTYgLSBiaXRzOwotCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKLQotCXJldCA9IGFkaXMxNjM1MF9zcGlfcmVhZF9yZWdfMTYoZGV2LCB0aGlzX2F0dHItPmFkZHJlc3MsICh1MTYgKikmdmFsKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JaWYgKHZhbCAmIEFESVMxNjM1MF9FUlJPUl9BQ1RJVkUpCi0JCWFkaXMxNjM1MF9jaGVja19zdGF0dXMoZGV2KTsKLQl2YWwgPSAoKHMxNikodmFsIDw8IHNoaWZ0KSA+PiBzaGlmdCk7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGFkaXMxNjM1MF9yZWFkXzEyYml0X3Vuc2lnbmVkKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNoYXIgKmJ1ZikKLXsKLQlpbnQgcmV0OwotCXUxNiB2YWwgPSAwOwotCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKLQotCXJldCA9IGFkaXMxNjM1MF9zcGlfcmVhZF9yZWdfMTYoZGV2LCB0aGlzX2F0dHItPmFkZHJlc3MsICZ2YWwpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAodmFsICYgQURJUzE2MzUwX0VSUk9SX0FDVElWRSkKLQkJYWRpczE2MzUwX2NoZWNrX3N0YXR1cyhkZXYpOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHZhbCAmIDB4MEZGRik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGFkaXMxNjM1MF9yZWFkXzE0Yml0X3NpZ25lZChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljaGFyICpidWYpCi17Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXNzaXplX3QgcmV0OwotCi0JLyogVGFrZSB0aGUgaWlvX2RldiBzdGF0dXMgbG9jayAqLwotCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOwotCXJldCA9ICBhZGlzMTYzNTBfc3BpX3JlYWRfc2lnbmVkKGRldiwgYXR0ciwgYnVmLCAxNCk7Ci0JbXV0ZXhfdW5sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGFkaXMxNjM1MF9yZWFkXzEyYml0X3NpZ25lZChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljaGFyICpidWYpCi17Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXNzaXplX3QgcmV0OwotCi0JLyogVGFrZSB0aGUgaWlvX2RldiBzdGF0dXMgbG9jayAqLwotCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOwotCXJldCA9ICBhZGlzMTYzNTBfc3BpX3JlYWRfc2lnbmVkKGRldiwgYXR0ciwgYnVmLCAxMik7Ci0JbXV0ZXhfdW5sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGFkaXMxNjM1MF93cml0ZV8xNmJpdChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljb25zdCBjaGFyICpidWYsCi0JCXNpemVfdCBsZW4pCi17Ci0Jc3RydWN0IGlpb19kZXZfYXR0ciAqdGhpc19hdHRyID0gdG9faWlvX2Rldl9hdHRyKGF0dHIpOwotCWludCByZXQ7Ci0JbG9uZyB2YWw7Ci0KLQlyZXQgPSBzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ2YWwpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyb3JfcmV0OwotCXJldCA9IGFkaXMxNjM1MF9zcGlfd3JpdGVfcmVnXzE2KGRldiwgdGhpc19hdHRyLT5hZGRyZXNzLCB2YWwpOwotCi1lcnJvcl9yZXQ6Ci0JcmV0dXJuIHJldCA/IHJldCA6IGxlbjsKLX0KLQotc3RhdGljIHNzaXplX3QgYWRpczE2MzUwX3JlYWRfZnJlcXVlbmN5KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNoYXIgKmJ1ZikKLXsKLQlpbnQgcmV0LCBsZW4gPSAwOwotCXUxNiB0OwotCWludCBzcHM7Ci0JcmV0ID0gYWRpczE2MzUwX3NwaV9yZWFkX3JlZ18xNihkZXYsCi0JCQlBRElTMTYzNTBfU01QTF9QUkQsCi0JCQkmdCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQlzcHMgPSAgKHQgJiBBRElTMTYzNTBfU01QTF9QUkRfVElNRV9CQVNFKSA/IDUzIDogMTYzODsKLQlzcHMgLz0gKHQgJiBBRElTMTYzNTBfU01QTF9QUkRfRElWX01BU0spICsgMTsKLQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIiVkIFNQU1xuIiwgc3BzKTsKLQlyZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgc3NpemVfdCBhZGlzMTYzNTBfd3JpdGVfZnJlcXVlbmN5KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNvbnN0IGNoYXIgKmJ1ZiwKLQkJc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGFkaXMxNjM1MF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7Ci0JbG9uZyB2YWw7Ci0JaW50IHJldDsKLQl1OCB0OwotCi0JcmV0ID0gc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdmFsKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JbXV0ZXhfbG9jaygmaW5kaW9fZGV2LT5tbG9jayk7Ci0KLQl0ID0gKDE2MzggLyB2YWwpOwotCWlmICh0ID4gMCkKLQkJdC0tOwotCXQgJj0gQURJUzE2MzUwX1NNUExfUFJEX0RJVl9NQVNLOwotCWlmICgodCAmIEFESVMxNjM1MF9TTVBMX1BSRF9ESVZfTUFTSykgPj0gMHgwQSkKLQkJc3QtPnVzLT5tYXhfc3BlZWRfaHogPSBBRElTMTYzNTBfU1BJX1NMT1c7Ci0JZWxzZQotCQlzdC0+dXMtPm1heF9zcGVlZF9oeiA9IEFESVMxNjM1MF9TUElfRkFTVDsKLQotCXJldCA9IGFkaXMxNjM1MF9zcGlfd3JpdGVfcmVnXzgoZGV2LAotCQkJQURJUzE2MzUwX1NNUExfUFJELAotCQkJdCk7Ci0KLQltdXRleF91bmxvY2soJmluZGlvX2Rldi0+bWxvY2spOwotCi0JcmV0dXJuIHJldCA/IHJldCA6IGxlbjsKLX0KLQotc3RhdGljIGludCBhZGlzMTYzNTBfcmVzZXQoc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCByZXQ7Ci0JcmV0ID0gYWRpczE2MzUwX3NwaV93cml0ZV9yZWdfOChkZXYsCi0JCQlBRElTMTYzNTBfR0xPQl9DTUQsCi0JCQlBRElTMTYzNTBfR0xPQl9DTURfU1dfUkVTRVQpOwotCWlmIChyZXQpCi0JCWRldl9lcnIoZGV2LCAicHJvYmxlbSByZXNldHRpbmcgZGV2aWNlIik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3NpemVfdCBhZGlzMTYzNTBfd3JpdGVfcmVzZXQoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQotewotCWlmIChsZW4gPCAxKQotCQlyZXR1cm4gLTE7Ci0Jc3dpdGNoIChidWZbMF0pIHsKLQljYXNlICcxJzoKLQljYXNlICd5JzoKLQljYXNlICdZJzoKLQkJcmV0dXJuIGFkaXMxNjM1MF9yZXNldChkZXYpOwotCX0KLQlyZXR1cm4gLTE7Ci19Ci0KLWludCBhZGlzMTYzNTBfc2V0X2lycShzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgZW5hYmxlKQotewotCWludCByZXQ7Ci0JdTE2IG1zYzsKLQlyZXQgPSBhZGlzMTYzNTBfc3BpX3JlYWRfcmVnXzE2KGRldiwgQURJUzE2MzUwX01TQ19DVFJMLCAmbXNjKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycm9yX3JldDsKLQotCW1zYyB8PSBBRElTMTYzNTBfTVNDX0NUUkxfREFUQV9SRFlfUE9MX0hJR0g7Ci0JbXNjICY9IH5BRElTMTYzNTBfTVNDX0NUUkxfREFUQV9SRFlfRElPMjsKLQotCWlmIChlbmFibGUpCi0JCW1zYyB8PSBBRElTMTYzNTBfTVNDX0NUUkxfREFUQV9SRFlfRU47Ci0JZWxzZQotCQltc2MgJj0gfkFESVMxNjM1MF9NU0NfQ1RSTF9EQVRBX1JEWV9FTjsKLQotCXJldCA9IGFkaXMxNjM1MF9zcGlfd3JpdGVfcmVnXzE2KGRldiwgQURJUzE2MzUwX01TQ19DVFJMLCBtc2MpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyb3JfcmV0OwotCi1lcnJvcl9yZXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotLyogUG93ZXIgZG93biB0aGUgZGV2aWNlICovCi1zdGF0aWMgaW50IGFkaXMxNjM1MF9zdG9wX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JaW50IHJldDsKLQl1MTYgdmFsID0gQURJUzE2MzUwX1NMUF9DTlRfUE9XRVJfT0ZGOwotCi0JcmV0ID0gYWRpczE2MzUwX3NwaV93cml0ZV9yZWdfMTYoZGV2LCBBRElTMTYzNTBfU0xQX0NOVCwgdmFsKTsKLQlpZiAocmV0KQotCQlkZXZfZXJyKGRldiwgInByb2JsZW0gd2l0aCB0dXJuaW5nIGRldmljZSBvZmY6IFNMUF9DTlQiKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgYWRpczE2MzUwX3NlbGZfdGVzdChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JaW50IHJldDsKLQlyZXQgPSBhZGlzMTYzNTBfc3BpX3dyaXRlX3JlZ18xNihkZXYsCi0JCQlBRElTMTYzNTBfTVNDX0NUUkwsCi0JCQlBRElTMTYzNTBfTVNDX0NUUkxfTUVNX1RFU1QpOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycihkZXYsICJwcm9ibGVtIHN0YXJ0aW5nIHNlbGYgdGVzdCIpOwotCQlnb3RvIGVycl9yZXQ7Ci0JfQotCi0JYWRpczE2MzUwX2NoZWNrX3N0YXR1cyhkZXYpOwotCi1lcnJfcmV0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgYWRpczE2MzUwX2NoZWNrX3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JdTE2IHN0YXR1czsKLQlpbnQgcmV0OwotCi0JcmV0ID0gYWRpczE2MzUwX3NwaV9yZWFkX3JlZ18xNihkZXYsIEFESVMxNjM1MF9ESUFHX1NUQVQsICZzdGF0dXMpOwotCi0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycihkZXYsICJSZWFkaW5nIHN0YXR1cyBmYWlsZWRcbiIpOwotCQlnb3RvIGVycm9yX3JldDsKLQl9Ci0JcmV0ID0gc3RhdHVzOwotCWlmIChzdGF0dXMgJiBBRElTMTYzNTBfRElBR19TVEFUX1pBQ0NMX0ZBSUwpCi0JCWRldl9lcnIoZGV2LCAiWi1heGlzIGFjY2VsZXJvbWV0ZXIgc2VsZi10ZXN0IGZhaWx1cmVcbiIpOwotCWlmIChzdGF0dXMgJiBBRElTMTYzNTBfRElBR19TVEFUX1lBQ0NMX0ZBSUwpCi0JCWRldl9lcnIoZGV2LCAiWS1heGlzIGFjY2VsZXJvbWV0ZXIgc2VsZi10ZXN0IGZhaWx1cmVcbiIpOwotCWlmIChzdGF0dXMgJiBBRElTMTYzNTBfRElBR19TVEFUX1hBQ0NMX0ZBSUwpCi0JCWRldl9lcnIoZGV2LCAiWC1heGlzIGFjY2VsZXJvbWV0ZXIgc2VsZi10ZXN0IGZhaWx1cmVcbiIpOwotCWlmIChzdGF0dXMgJiBBRElTMTYzNTBfRElBR19TVEFUX1hHWVJPX0ZBSUwpCi0JCWRldl9lcnIoZGV2LCAiWC1heGlzIGd5cm9zY29wZSBzZWxmLXRlc3QgZmFpbHVyZVxuIik7Ci0JaWYgKHN0YXR1cyAmIEFESVMxNjM1MF9ESUFHX1NUQVRfWUdZUk9fRkFJTCkKLQkJZGV2X2VycihkZXYsICJZLWF4aXMgZ3lyb3Njb3BlIHNlbGYtdGVzdCBmYWlsdXJlXG4iKTsKLQlpZiAoc3RhdHVzICYgQURJUzE2MzUwX0RJQUdfU1RBVF9aR1lST19GQUlMKQotCQlkZXZfZXJyKGRldiwgIlotYXhpcyBneXJvc2NvcGUgc2VsZi10ZXN0IGZhaWx1cmVcbiIpOwotCWlmIChzdGF0dXMgJiBBRElTMTYzNTBfRElBR19TVEFUX0FMQVJNMikKLQkJZGV2X2VycihkZXYsICJBbGFybSAyIGFjdGl2ZVxuIik7Ci0JaWYgKHN0YXR1cyAmIEFESVMxNjM1MF9ESUFHX1NUQVRfQUxBUk0xKQotCQlkZXZfZXJyKGRldiwgIkFsYXJtIDEgYWN0aXZlXG4iKTsKLQlpZiAoc3RhdHVzICYgQURJUzE2MzUwX0RJQUdfU1RBVF9GTEFTSF9DSEspCi0JCWRldl9lcnIoZGV2LCAiRmxhc2ggY2hlY2tzdW0gZXJyb3JcbiIpOwotCWlmIChzdGF0dXMgJiBBRElTMTYzNTBfRElBR19TVEFUX1NFTEZfVEVTVCkKLQkJZGV2X2VycihkZXYsICJTZWxmIHRlc3QgZXJyb3JcbiIpOwotCWlmIChzdGF0dXMgJiBBRElTMTYzNTBfRElBR19TVEFUX09WRVJGTE9XKQotCQlkZXZfZXJyKGRldiwgIlNlbnNvciBvdmVycmFuZ2VcbiIpOwotCWlmIChzdGF0dXMgJiBBRElTMTYzNTBfRElBR19TVEFUX1NQSV9GQUlMKQotCQlkZXZfZXJyKGRldiwgIlNQSSBmYWlsdXJlXG4iKTsKLQlpZiAoc3RhdHVzICYgQURJUzE2MzUwX0RJQUdfU1RBVF9GTEFTSF9VUFQpCi0JCWRldl9lcnIoZGV2LCAiRmxhc2ggdXBkYXRlIGZhaWxlZFxuIik7Ci0JaWYgKHN0YXR1cyAmIEFESVMxNjM1MF9ESUFHX1NUQVRfUE9XRVJfSElHSCkKLQkJZGV2X2VycihkZXYsICJQb3dlciBzdXBwbHkgYWJvdmUgNS4yNVZcbiIpOwotCWlmIChzdGF0dXMgJiBBRElTMTYzNTBfRElBR19TVEFUX1BPV0VSX0xPVykKLQkJZGV2X2VycihkZXYsICJQb3dlciBzdXBwbHkgYmVsb3cgNC43NVZcbiIpOwotCi1lcnJvcl9yZXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBhZGlzMTYzNTBfaW5pdGlhbF9zZXR1cChzdHJ1Y3QgYWRpczE2MzUwX3N0YXRlICpzdCkKLXsKLQlpbnQgcmV0OwotCXUxNiBzbXBfcHJkOwotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZzdC0+aW5kaW9fZGV2LT5kZXY7Ci0KLQkvKiB1c2UgbG93IHNwaSBzcGVlZCBmb3IgaW5pdCAqLwotCXN0LT51cy0+bWF4X3NwZWVkX2h6ID0gQURJUzE2MzUwX1NQSV9TTE9XOwotCXN0LT51cy0+bW9kZSA9IFNQSV9NT0RFXzM7Ci0Jc3BpX3NldHVwKHN0LT51cyk7Ci0KLQkvKiBEaXNhYmxlIElSUSAqLwotCXJldCA9IGFkaXMxNjM1MF9zZXRfaXJxKGRldiwgZmFsc2UpOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycihkZXYsICJkaXNhYmxlIGlycSBmYWlsZWQiKTsKLQkJZ290byBlcnJfcmV0OwotCX0KLQotCS8qIERvIHNlbGYgdGVzdCAqLwotCXJldCA9IGFkaXMxNjM1MF9zZWxmX3Rlc3QoZGV2KTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoZGV2LCAic2VsZiB0ZXN0IGZhaWx1cmUiKTsKLQkJZ290byBlcnJfcmV0OwotCX0KLQotCS8qIFJlYWQgc3RhdHVzIHJlZ2lzdGVyIHRvIGNoZWNrIHRoZSByZXN1bHQgKi8KLQlyZXQgPSBhZGlzMTYzNTBfY2hlY2tfc3RhdHVzKGRldik7Ci0JaWYgKHJldCkgewotCQlhZGlzMTYzNTBfcmVzZXQoZGV2KTsKLQkJZGV2X2VycihkZXYsICJkZXZpY2Ugbm90IHBsYXlpbmcgYmFsbCAtPiByZXNldCIpOwotCQltc2xlZXAoQURJUzE2MzUwX1NUQVJUVVBfREVMQVkpOwotCQlyZXQgPSBhZGlzMTYzNTBfY2hlY2tfc3RhdHVzKGRldik7Ci0JCWlmIChyZXQpIHsKLQkJCWRldl9lcnIoZGV2LCAiZ2l2aW5nIHVwIik7Ci0JCQlnb3RvIGVycl9yZXQ7Ci0JCX0KLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICI6IGF0IENTJWQgKGlycSAlZClcbiIsCi0JCQlzdC0+dXMtPmNoaXBfc2VsZWN0LCBzdC0+dXMtPmlycSk7Ci0KLQkvKiB1c2UgaGlnaCBzcGkgc3BlZWQgaWYgcG9zc2libGUgKi8KLQlyZXQgPSBhZGlzMTYzNTBfc3BpX3JlYWRfcmVnXzE2KGRldiwgQURJUzE2MzUwX1NNUExfUFJELCAmc21wX3ByZCk7Ci0JaWYgKCFyZXQgJiYgKHNtcF9wcmQgJiBBRElTMTYzNTBfU01QTF9QUkRfRElWX01BU0spIDwgMHgwQSkgewotCQlzdC0+dXMtPm1heF9zcGVlZF9oeiA9IEFESVMxNjM1MF9TUElfU0xPVzsKLQkJc3BpX3NldHVwKHN0LT51cyk7Ci0JfQotCi1lcnJfcmV0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBJSU9fREVWX0FUVFJfR1lST19YX0NBTElCQklBUyhTX0lXVVNSIHwgU19JUlVHTywKLQkJYWRpczE2MzUwX3JlYWRfMTJiaXRfc2lnbmVkLAotCQlhZGlzMTYzNTBfd3JpdGVfMTZiaXQsCi0JCUFESVMxNjM1MF9YR1lST19PRkYpOwotCi1zdGF0aWMgSUlPX0RFVl9BVFRSX0dZUk9fWV9DQUxJQkJJQVMoU19JV1VTUiB8IFNfSVJVR08sCi0JCWFkaXMxNjM1MF9yZWFkXzEyYml0X3NpZ25lZCwKLQkJYWRpczE2MzUwX3dyaXRlXzE2Yml0LAotCQlBRElTMTYzNTBfWUdZUk9fT0ZGKTsKLQotc3RhdGljIElJT19ERVZfQVRUUl9HWVJPX1pfQ0FMSUJCSUFTKFNfSVdVU1IgfCBTX0lSVUdPLAotCQlhZGlzMTYzNTBfcmVhZF8xMmJpdF9zaWduZWQsCi0JCWFkaXMxNjM1MF93cml0ZV8xNmJpdCwKLQkJQURJUzE2MzUwX1pHWVJPX09GRik7Ci0KLXN0YXRpYyBJSU9fREVWX0FUVFJfQUNDRUxfWF9DQUxJQkJJQVMoU19JV1VTUiB8IFNfSVJVR08sCi0JCWFkaXMxNjM1MF9yZWFkXzEyYml0X3NpZ25lZCwKLQkJYWRpczE2MzUwX3dyaXRlXzE2Yml0LAotCQlBRElTMTYzNTBfWEFDQ0xfT0ZGKTsKLQotc3RhdGljIElJT19ERVZfQVRUUl9BQ0NFTF9ZX0NBTElCQklBUyhTX0lXVVNSIHwgU19JUlVHTywKLQkJYWRpczE2MzUwX3JlYWRfMTJiaXRfc2lnbmVkLAotCQlhZGlzMTYzNTBfd3JpdGVfMTZiaXQsCi0JCUFESVMxNjM1MF9ZQUNDTF9PRkYpOwotCi1zdGF0aWMgSUlPX0RFVl9BVFRSX0FDQ0VMX1pfQ0FMSUJCSUFTKFNfSVdVU1IgfCBTX0lSVUdPLAotCQlhZGlzMTYzNTBfcmVhZF8xMmJpdF9zaWduZWQsCi0JCWFkaXMxNjM1MF93cml0ZV8xNmJpdCwKLQkJQURJUzE2MzUwX1pBQ0NMX09GRik7Ci0KLXN0YXRpYyBJSU9fREVWX0FUVFJfSU5fTkFNRURfUkFXKDAsIHN1cHBseSwgYWRpczE2MzUwX3JlYWRfMTJiaXRfdW5zaWduZWQsCi0JCUFESVMxNjM1MF9TVVBQTFlfT1VUKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUl9JTl9OQU1FRF9TQ0FMRSgwLCBzdXBwbHksICIwLjAwMjQxOCIpOwotCi1zdGF0aWMgSUlPX0RFVl9BVFRSX0dZUk9fWChhZGlzMTYzNTBfcmVhZF8xNGJpdF9zaWduZWQsCi0JCUFESVMxNjM1MF9YR1lST19PVVQpOwotc3RhdGljIElJT19ERVZfQVRUUl9HWVJPX1koYWRpczE2MzUwX3JlYWRfMTRiaXRfc2lnbmVkLAotCQlBRElTMTYzNTBfWUdZUk9fT1VUKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfR1lST19aKGFkaXMxNjM1MF9yZWFkXzE0Yml0X3NpZ25lZCwKLQkJQURJUzE2MzUwX1pHWVJPX09VVCk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfR1lST19TQ0FMRSgiMC4wMDEyNzg2MjgyMSIpOwotCi1zdGF0aWMgSUlPX0RFVl9BVFRSX0FDQ0VMX1goYWRpczE2MzUwX3JlYWRfMTRiaXRfc2lnbmVkLAotCQlBRElTMTYzNTBfWEFDQ0xfT1VUKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfQUNDRUxfWShhZGlzMTYzNTBfcmVhZF8xNGJpdF9zaWduZWQsCi0JCUFESVMxNjM1MF9ZQUNDTF9PVVQpOwotc3RhdGljIElJT19ERVZfQVRUUl9BQ0NFTF9aKGFkaXMxNjM1MF9yZWFkXzE0Yml0X3NpZ25lZCwKLQkJQURJUzE2MzUwX1pBQ0NMX09VVCk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfQUNDRUxfU0NBTEUoIjAuMDI0NzMyMzcxMyIpOwotCi1zdGF0aWMgSUlPX0RFVklDRV9BVFRSKHRlbXBfeF9yYXcsIFNfSVJVR08sIGFkaXMxNjM1MF9yZWFkXzEyYml0X3NpZ25lZCwKLQkJTlVMTCwgQURJUzE2MzUwX1hURU1QX09VVCk7Ci1zdGF0aWMgSUlPX0RFVklDRV9BVFRSKHRlbXBfeV9yYXcsIFNfSVJVR08sIGFkaXMxNjM1MF9yZWFkXzEyYml0X3NpZ25lZCwKLQkJTlVMTCwgQURJUzE2MzUwX1lURU1QX09VVCk7Ci1zdGF0aWMgSUlPX0RFVklDRV9BVFRSKHRlbXBfel9yYXcsIFNfSVJVR08sIGFkaXMxNjM1MF9yZWFkXzEyYml0X3NpZ25lZCwKLQkJTlVMTCwgQURJUzE2MzUwX1pURU1QX09VVCk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfVEVNUF9TQ0FMRSgiMC4xNDUzNCIpOwotc3RhdGljIElJT19DT05TVF9BVFRSX1RFTVBfT0ZGU0VUKCIxOTguMTYiKTsKLQotc3RhdGljIElJT19ERVZfQVRUUl9JTl9SQVcoMSwgYWRpczE2MzUwX3JlYWRfMTJiaXRfdW5zaWduZWQsCi0JCUFESVMxNjM1MF9BVVhfQURDKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUihpbjFfc2NhbGUsICIwLjAwMDgwNiIpOwotCi1zdGF0aWMgSUlPX0RFVl9BVFRSX1NBTVBfRlJFUShTX0lXVVNSIHwgU19JUlVHTywKLQkJYWRpczE2MzUwX3JlYWRfZnJlcXVlbmN5LAotCQlhZGlzMTYzNTBfd3JpdGVfZnJlcXVlbmN5KTsKLQotc3RhdGljIElJT19ERVZJQ0VfQVRUUihyZXNldCwgU19JV1VTUiwgTlVMTCwKLQkJYWRpczE2MzUwX3dyaXRlX3Jlc2V0LCAwKTsKLQotc3RhdGljIElJT19DT05TVF9BVFRSX1NBTVBfRlJFUV9BVkFJTCgiNDA5IDU0NiA4MTkgMTYzOCIpOwotCi1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfTkFNRSgiYWRpczE2MzUwIik7Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZGlzMTYzNTBfYXR0cmlidXRlc1tdID0gewotCSZpaW9fZGV2X2F0dHJfZ3lyb194X2NhbGliYmlhcy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfZ3lyb195X2NhbGliYmlhcy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfZ3lyb196X2NhbGliYmlhcy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfYWNjZWxfeF9jYWxpYmJpYXMuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2FjY2VsX3lfY2FsaWJiaWFzLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9hY2NlbF96X2NhbGliYmlhcy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW4wX3N1cHBseV9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4wX3N1cHBseV9zY2FsZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfZ3lyb194X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfZ3lyb195X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfZ3lyb196X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9neXJvX3NjYWxlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9hY2NlbF94X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfYWNjZWxfeV9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2FjY2VsX3pfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2FjY2VsX3NjYWxlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl90ZW1wX3hfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl90ZW1wX3lfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl90ZW1wX3pfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX3RlbXBfc2NhbGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfdGVtcF9vZmZzZXQuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luMV9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4xX3NjYWxlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9zYW1wbGluZ19mcmVxdWVuY3kuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfc2FtcGxpbmdfZnJlcXVlbmN5X2F2YWlsYWJsZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfcmVzZXQuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfbmFtZS5kZXZfYXR0ci5hdHRyLAotCU5VTEwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFkaXMxNjM1MF9hdHRyaWJ1dGVfZ3JvdXAgPSB7Ci0JLmF0dHJzID0gYWRpczE2MzUwX2F0dHJpYnV0ZXMsCi19OwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWRpczE2MzUwX2V2ZW50X2F0dHJpYnV0ZXNbXSA9IHsKLQlOVUxMLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYWRpczE2MzUwX2V2ZW50X2F0dHJpYnV0ZV9ncm91cCA9IHsKLQkuYXR0cnMgPSBhZGlzMTYzNTBfZXZlbnRfYXR0cmlidXRlcywKLX07Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IGFkaXMxNjM1MF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQotewotCWludCByZXQsIHJlZ2RvbmUgPSAwOwotCXN0cnVjdCBhZGlzMTYzNTBfc3RhdGUgKnN0ID0ga3phbGxvYyhzaXplb2YgKnN0LCBHRlBfS0VSTkVMKTsKLQlpZiAoIXN0KSB7Ci0JCXJldCA9ICAtRU5PTUVNOwotCQlnb3RvIGVycm9yX3JldDsKLQl9Ci0JLyogdGhpcyBpcyBvbmx5IHVzZWQgZm9yIHJlbW92YWwgcHVycG9zZXMgKi8KLQlzcGlfc2V0X2RydmRhdGEoc3BpLCBzdCk7Ci0KLQkvKiBBbGxvY2F0ZSB0aGUgY29tbXMgYnVmZmVycyAqLwotCXN0LT5yeCA9IGt6YWxsb2Moc2l6ZW9mKCpzdC0+cngpKkFESVMxNjM1MF9NQVhfUlgsIEdGUF9LRVJORUwpOwotCWlmIChzdC0+cnggPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yX2ZyZWVfc3Q7Ci0JfQotCXN0LT50eCA9IGt6YWxsb2Moc2l6ZW9mKCpzdC0+dHgpKkFESVMxNjM1MF9NQVhfVFgsIEdGUF9LRVJORUwpOwotCWlmIChzdC0+dHggPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yX2ZyZWVfcng7Ci0JfQotCXN0LT51cyA9IHNwaTsKLQltdXRleF9pbml0KCZzdC0+YnVmX2xvY2spOwotCS8qIHNldHVwIHRoZSBpbmR1c3RyaWFsaW8gZHJpdmVyIGFsbG9jYXRlZCBlbGVtZW50cyAqLwotCXN0LT5pbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKHN0LT5pbmRpb19kZXYgPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yX2ZyZWVfdHg7Ci0JfQotCi0Jc3QtPmluZGlvX2Rldi0+ZGV2LnBhcmVudCA9ICZzcGktPmRldjsKLQlzdC0+aW5kaW9fZGV2LT5udW1faW50ZXJydXB0X2xpbmVzID0gMTsKLQlzdC0+aW5kaW9fZGV2LT5ldmVudF9hdHRycyA9ICZhZGlzMTYzNTBfZXZlbnRfYXR0cmlidXRlX2dyb3VwOwotCXN0LT5pbmRpb19kZXYtPmF0dHJzID0gJmFkaXMxNjM1MF9hdHRyaWJ1dGVfZ3JvdXA7Ci0Jc3QtPmluZGlvX2Rldi0+ZGV2X2RhdGEgPSAodm9pZCAqKShzdCk7Ci0Jc3QtPmluZGlvX2Rldi0+ZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFOwotCXN0LT5pbmRpb19kZXYtPm1vZGVzID0gSU5ESU9fRElSRUNUX01PREU7Ci0KLQlyZXQgPSBhZGlzMTYzNTBfY29uZmlndXJlX3Jpbmcoc3QtPmluZGlvX2Rldik7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJvcl9mcmVlX2RldjsKLQotCXJldCA9IGlpb19kZXZpY2VfcmVnaXN0ZXIoc3QtPmluZGlvX2Rldik7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJvcl91bnJlZ19yaW5nX2Z1bmNzOwotCXJlZ2RvbmUgPSAxOwotCi0JcmV0ID0gaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyKHN0LT5pbmRpb19kZXYtPnJpbmcsIDApOwotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcmluZ1xuIik7Ci0JCWdvdG8gZXJyb3JfdW5yZWdfcmluZ19mdW5jczsKLQl9Ci0KLQlpZiAoc3BpLT5pcnEpIHsKLQkJcmV0ID0gaWlvX3JlZ2lzdGVyX2ludGVycnVwdF9saW5lKHNwaS0+aXJxLAotCQkJCXN0LT5pbmRpb19kZXYsCi0JCQkJMCwKLQkJCQlJUlFGX1RSSUdHRVJfUklTSU5HLAotCQkJCSJhZGlzMTYzNTAiKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gZXJyb3JfdW5pbml0aWFsaXplX3Jpbmc7Ci0KLQkJcmV0ID0gYWRpczE2MzUwX3Byb2JlX3RyaWdnZXIoc3QtPmluZGlvX2Rldik7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIGVycm9yX3VucmVnaXN0ZXJfbGluZTsKLQl9Ci0KLQkvKiBHZXQgdGhlIGRldmljZSBpbnRvIGEgc2FuZSBpbml0aWFsIHN0YXRlICovCi0JcmV0ID0gYWRpczE2MzUwX2luaXRpYWxfc2V0dXAoc3QpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyb3JfcmVtb3ZlX3RyaWdnZXI7Ci0JcmV0dXJuIDA7Ci0KLWVycm9yX3JlbW92ZV90cmlnZ2VyOgotCWFkaXMxNjM1MF9yZW1vdmVfdHJpZ2dlcihzdC0+aW5kaW9fZGV2KTsKLWVycm9yX3VucmVnaXN0ZXJfbGluZToKLQlpZiAoc3BpLT5pcnEpCi0JCWlpb191bnJlZ2lzdGVyX2ludGVycnVwdF9saW5lKHN0LT5pbmRpb19kZXYsIDApOwotZXJyb3JfdW5pbml0aWFsaXplX3Jpbmc6Ci0JaWlvX3JpbmdfYnVmZmVyX3VucmVnaXN0ZXIoc3QtPmluZGlvX2Rldi0+cmluZyk7Ci1lcnJvcl91bnJlZ19yaW5nX2Z1bmNzOgotCWFkaXMxNjM1MF91bmNvbmZpZ3VyZV9yaW5nKHN0LT5pbmRpb19kZXYpOwotZXJyb3JfZnJlZV9kZXY6Ci0JaWYgKHJlZ2RvbmUpCi0JCWlpb19kZXZpY2VfdW5yZWdpc3RlcihzdC0+aW5kaW9fZGV2KTsKLQllbHNlCi0JCWlpb19mcmVlX2RldmljZShzdC0+aW5kaW9fZGV2KTsKLWVycm9yX2ZyZWVfdHg6Ci0Ja2ZyZWUoc3QtPnR4KTsKLWVycm9yX2ZyZWVfcng6Ci0Ja2ZyZWUoc3QtPnJ4KTsKLWVycm9yX2ZyZWVfc3Q6Ci0Ja2ZyZWUoc3QpOwotZXJyb3JfcmV0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgYWRpczE2MzUwX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQotewotCWludCByZXQ7Ci0Jc3RydWN0IGFkaXMxNjM1MF9zdGF0ZSAqc3QgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKLQlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gc3QtPmluZGlvX2RldjsKLQotCXJldCA9IGFkaXMxNjM1MF9zdG9wX2RldmljZSgmKGluZGlvX2Rldi0+ZGV2KSk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJfcmV0OwotCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQotCWFkaXMxNjM1MF9yZW1vdmVfdHJpZ2dlcihpbmRpb19kZXYpOwotCWlmIChzcGktPmlycSkKLQkJaWlvX3VucmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoaW5kaW9fZGV2LCAwKTsKLQotCWlpb19yaW5nX2J1ZmZlcl91bnJlZ2lzdGVyKGluZGlvX2Rldi0+cmluZyk7Ci0JaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rldik7Ci0JYWRpczE2MzUwX3VuY29uZmlndXJlX3JpbmcoaW5kaW9fZGV2KTsKLQlrZnJlZShzdC0+dHgpOwotCWtmcmVlKHN0LT5yeCk7Ci0Ja2ZyZWUoc3QpOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9yZXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzcGlfZGV2aWNlX2lkIGFkaXMxNjM1MF9pZFtdID0gewotCXsiYWRpczE2MzUwIiwgMH0sCi0JeyJhZGlzMTYzNTQiLCAwfSwKLQl7ImFkaXMxNjM1NSIsIDB9LAotCXsiYWRpczE2MzYwIiwgMH0sCi0JeyJhZGlzMTYzNjIiLCAwfSwKLQl7ImFkaXMxNjM2NCIsIDB9LAotCXsiYWRpczE2MzY1IiwgMH0sCi0Je30KLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBhZGlzMTYzNTBfZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gImFkaXMxNjM1MCIsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAotCX0sCi0JLnByb2JlID0gYWRpczE2MzUwX3Byb2JlLAotCS5yZW1vdmUgPSBfX2RldmV4aXRfcChhZGlzMTYzNTBfcmVtb3ZlKSwKLQkuaWRfdGFibGUgPSBhZGlzMTYzNTBfaWQsCi19OwotCi1zdGF0aWMgX19pbml0IGludCBhZGlzMTYzNTBfaW5pdCh2b2lkKQotewotCXJldHVybiBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZhZGlzMTYzNTBfZHJpdmVyKTsKLX0KLW1vZHVsZV9pbml0KGFkaXMxNjM1MF9pbml0KTsKLQotc3RhdGljIF9fZXhpdCB2b2lkIGFkaXMxNjM1MF9leGl0KHZvaWQpCi17Ci0Jc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZhZGlzMTYzNTBfZHJpdmVyKTsKLX0KLW1vZHVsZV9leGl0KGFkaXMxNjM1MF9leGl0KTsKLQotTU9EVUxFX0FVVEhPUigiQmFycnkgU29uZyA8MjFjbmJhb0BnbWFpbC5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkFuYWxvZyBEZXZpY2VzIEFESVMxNjM1MC81NC81NS82MC82Mi82NC82NSBJTVUgU1BJIGRyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzUwX3JpbmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjM1MF9yaW5nLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YjcwY2YuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzUwX3JpbmcuYworKysgL2Rldi9udWxsCkBAIC0xLDIzNiArMCwwIEBACi0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLQotI2luY2x1ZGUgIi4uL2lpby5oIgotI2luY2x1ZGUgIi4uL3N5c2ZzLmgiCi0jaW5jbHVkZSAiLi4vcmluZ19zdy5oIgotI2luY2x1ZGUgIi4uL2FjY2VsL2FjY2VsLmgiCi0jaW5jbHVkZSAiLi4vdHJpZ2dlci5oIgotI2luY2x1ZGUgImFkaXMxNjM1MC5oIgotCi1zdGF0aWMgSUlPX1NDQU5fRUxfQyhpbjBfc3VwcGx5LCBBRElTMTYzNTBfU0NBTl9TVVBQTFksCi0JCUFESVMxNjM1MF9TVVBQTFlfT1VULCBOVUxMKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUl9TQ0FOX0VMX1RZUEUoaW4wX3N1cHBseSwgdSwgMTIsIDE2KTsKLQotc3RhdGljIElJT19TQ0FOX0VMX0MoZ3lyb194LCBBRElTMTYzNTBfU0NBTl9HWVJPX1gsIEFESVMxNjM1MF9YR1lST19PVVQsIE5VTEwpOwotc3RhdGljIElJT19TQ0FOX0VMX0MoZ3lyb195LCBBRElTMTYzNTBfU0NBTl9HWVJPX1ksIEFESVMxNjM1MF9ZR1lST19PVVQsIE5VTEwpOwotc3RhdGljIElJT19TQ0FOX0VMX0MoZ3lyb196LCBBRElTMTYzNTBfU0NBTl9HWVJPX1osIEFESVMxNjM1MF9aR1lST19PVVQsIE5VTEwpOwotc3RhdGljIElJT19DT05TVF9BVFRSX1NDQU5fRUxfVFlQRShneXJvLCBzLCAxNCwgMTYpOwotCi1zdGF0aWMgSUlPX1NDQU5fRUxfQyhhY2NlbF94LCBBRElTMTYzNTBfU0NBTl9BQ0NfWCwgQURJUzE2MzUwX1hBQ0NMX09VVCwgTlVMTCk7Ci1zdGF0aWMgSUlPX1NDQU5fRUxfQyhhY2NlbF95LCBBRElTMTYzNTBfU0NBTl9BQ0NfWSwgQURJUzE2MzUwX1lBQ0NMX09VVCwgTlVMTCk7Ci1zdGF0aWMgSUlPX1NDQU5fRUxfQyhhY2NlbF96LCBBRElTMTYzNTBfU0NBTl9BQ0NfWiwgQURJUzE2MzUwX1pBQ0NMX09VVCwgTlVMTCk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfU0NBTl9FTF9UWVBFKGFjY2VsLCBzLCAxNCwgMTYpOwotCi1zdGF0aWMgSUlPX1NDQU5fRUxfQyh0ZW1wX3gsIEFESVMxNjM1MF9TQ0FOX1RFTVBfWCwgQURJUzE2MzUwX1hURU1QX09VVCwgTlVMTCk7Ci1zdGF0aWMgSUlPX1NDQU5fRUxfQyh0ZW1wX3ksIEFESVMxNjM1MF9TQ0FOX1RFTVBfWSwgQURJUzE2MzUwX1lURU1QX09VVCwgTlVMTCk7Ci1zdGF0aWMgSUlPX1NDQU5fRUxfQyh0ZW1wX3osIEFESVMxNjM1MF9TQ0FOX1RFTVBfWiwgQURJUzE2MzUwX1pURU1QX09VVCwgTlVMTCk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfU0NBTl9FTF9UWVBFKHRlbXAsIHMsIDEyLCAxNik7Ci0KLXN0YXRpYyBJSU9fU0NBTl9FTF9DKGluMSwgQURJUzE2MzUwX1NDQU5fQURDXzAsIEFESVMxNjM1MF9BVVhfQURDLCBOVUxMKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUl9TQ0FOX0VMX1RZUEUoaW4xLCB1LCAxMiwgMTYpOwotCi1zdGF0aWMgSUlPX1NDQU5fRUxfVElNRVNUQU1QKDExKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUl9TQ0FOX0VMX1RZUEUodGltZXN0YW1wLCBzLCA2NCwgNjQpOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWRpczE2MzUwX3NjYW5fZWxfYXR0cnNbXSA9IHsKLQkmaWlvX3NjYW5fZWxfaW4wX3N1cHBseS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjBfc3VwcGx5X2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luMF9zdXBwbHlfdHlwZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9neXJvX3guZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfZ3lyb194X2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2d5cm9feS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9neXJvX3lfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfZ3lyb196LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2d5cm9fel9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9neXJvX3R5cGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfYWNjZWxfeC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9hY2NlbF94X2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2FjY2VsX3kuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfYWNjZWxfeV9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9hY2NlbF96LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2FjY2VsX3pfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfYWNjZWxfdHlwZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF90ZW1wX3guZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfdGVtcF94X2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX3RlbXBfeS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl90ZW1wX3lfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfdGVtcF96LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX3RlbXBfel9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl90ZW1wX3R5cGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfaW4xLmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luMV9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjFfdHlwZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF90aW1lc3RhbXAuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfdGltZXN0YW1wX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX3RpbWVzdGFtcF90eXBlLmRldl9hdHRyLmF0dHIsCi0JTlVMTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFkaXMxNjM1MF9zY2FuX2VsX2dyb3VwID0gewotCS5hdHRycyA9IGFkaXMxNjM1MF9zY2FuX2VsX2F0dHJzLAotCS5uYW1lID0gInNjYW5fZWxlbWVudHMiLAotfTsKLQotLyoqCi0gKiBhZGlzMTYzNTBfcG9sbF9mdW5jX3RoKCkgdG9wIGhhbGYgaW50ZXJydXB0IGhhbmRsZXIgY2FsbGVkIGJ5IHRyaWdnZXIKLSAqIEBwcml2YXRlX2RhdGE6CWlpb19kZXYKLSAqKi8KLXN0YXRpYyB2b2lkIGFkaXMxNjM1MF9wb2xsX2Z1bmNfdGgoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwgczY0IHRpbWUpCi17Ci0Jc3RydWN0IGFkaXMxNjM1MF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7Ci0Jc3QtPmxhc3RfdGltZXN0YW1wID0gdGltZTsKLQlzY2hlZHVsZV93b3JrKCZzdC0+d29ya190cmlnZ2VyX3RvX3JpbmcpOwotfQotCi0vKioKLSAqIGFkaXMxNjM1MF9zcGlfcmVhZF9idXJzdCgpIC0gcmVhZCBhbGwgZGF0YSByZWdpc3RlcnMKLSAqIEBkZXY6IGRldmljZSBhc3NvY2lhdGVkIHdpdGggY2hpbGQgb2YgYWN0dWFsIGRldmljZSAoaWlvX2RldiBvciBpaW9fdHJpZykKLSAqIEByeDogc29tZXdoZXJlIHRvIHBhc3MgYmFjayB0aGUgdmFsdWUgcmVhZCAobWluIHNpemUgaXMgMjQgYnl0ZXMpCi0gKiovCi1zdGF0aWMgaW50IGFkaXMxNjM1MF9zcGlfcmVhZF9idXJzdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU4ICpyeCkKLXsKLQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbXNnOwotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgYWRpczE2MzUwX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKLQl1MzIgb2xkX3NwZWVkX2h6ID0gc3QtPnVzLT5tYXhfc3BlZWRfaHo7Ci0JaW50IHJldDsKLQotCXN0cnVjdCBzcGlfdHJhbnNmZXIgeGZlcnNbXSA9IHsKLQkJewotCQkJLnR4X2J1ZiA9IHN0LT50eCwKLQkJCS5iaXRzX3Blcl93b3JkID0gOCwKLQkJCS5sZW4gPSAyLAotCQkJLmNzX2NoYW5nZSA9IDAsCi0JCX0sIHsKLQkJCS5yeF9idWYgPSByeCwKLQkJCS5iaXRzX3Blcl93b3JkID0gOCwKLQkJCS5sZW4gPSAyMiwKLQkJCS5jc19jaGFuZ2UgPSAwLAotCQl9LAotCX07Ci0KLQltdXRleF9sb2NrKCZzdC0+YnVmX2xvY2spOwotCXN0LT50eFswXSA9IEFESVMxNjM1MF9SRUFEX1JFRyhBRElTMTYzNTBfR0xPQl9DTUQpOwotCXN0LT50eFsxXSA9IDA7Ci0KLQlzcGlfbWVzc2FnZV9pbml0KCZtc2cpOwotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ4ZmVyc1swXSwgJm1zZyk7Ci0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnhmZXJzWzFdLCAmbXNnKTsKLQotCXN0LT51cy0+bWF4X3NwZWVkX2h6ID0gQURJUzE2MzUwX1NQSV9CVVJTVDsKLQlzcGlfc2V0dXAoc3QtPnVzKTsKLQotCXJldCA9IHNwaV9zeW5jKHN0LT51cywgJm1zZyk7Ci0JaWYgKHJldCkKLQkJZGV2X2Vycigmc3QtPnVzLT5kZXYsICJwcm9ibGVtIHdoZW4gYnVyc3QgcmVhZGluZyIpOwotCi0Jc3QtPnVzLT5tYXhfc3BlZWRfaHogPSBvbGRfc3BlZWRfaHo7Ci0Jc3BpX3NldHVwKHN0LT51cyk7Ci0JbXV0ZXhfdW5sb2NrKCZzdC0+YnVmX2xvY2spOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qIFdoaWxzdCB0aGlzIG1ha2VzIGEgbG90IG9mIGNhbGxzIHRvIGlpb19zd19yaW5nIGZ1bmN0aW9ucyAtIGl0IGlzIHRvIGRldmljZQotICogc3BlY2lmaWMgdG8gYmUgcm9sbGVkIGludG8gdGhlIGNvcmUuCi0gKi8KLXN0YXRpYyB2b2lkIGFkaXMxNjM1MF90cmlnZ2VyX2JoX3RvX3Jpbmcoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrX3MpCi17Ci0Jc3RydWN0IGFkaXMxNjM1MF9zdGF0ZSAqc3QKLQkJPSBjb250YWluZXJfb2Yod29ya19zLCBzdHJ1Y3QgYWRpczE2MzUwX3N0YXRlLAotCQkJICAgICAgIHdvcmtfdHJpZ2dlcl90b19yaW5nKTsKLQlzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nID0gc3QtPmluZGlvX2Rldi0+cmluZzsKLQotCWludCBpID0gMDsKLQlzMTYgKmRhdGE7Ci0Jc2l6ZV90IGRhdGFzaXplID0gcmluZy0+YWNjZXNzLmdldF9ieXRlc19wZXJfZGF0dW0ocmluZyk7Ci0KLQlkYXRhID0ga21hbGxvYyhkYXRhc2l6ZSAsIEdGUF9LRVJORUwpOwotCWlmIChkYXRhID09IE5VTEwpIHsKLQkJZGV2X2Vycigmc3QtPnVzLT5kZXYsICJtZW1vcnkgYWxsb2MgZmFpbGVkIGluIHJpbmcgYmgiKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChyaW5nLT5zY2FuX2NvdW50KQotCQlpZiAoYWRpczE2MzUwX3NwaV9yZWFkX2J1cnN0KCZzdC0+aW5kaW9fZGV2LT5kZXYsIHN0LT5yeCkgPj0gMCkKLQkJCWZvciAoOyBpIDwgcmluZy0+c2Nhbl9jb3VudDsgaSsrKQotCQkJCWRhdGFbaV0gPSBiZTE2X3RvX2NwdXAoCi0JCQkJCShfX2JlMTYgKikmKHN0LT5yeFtpKjJdKSk7Ci0KLQkvKiBHdWFyYW50ZWVkIHRvIGJlIGFsaWduZWQgd2l0aCA4IGJ5dGUgYm91bmRhcnkgKi8KLQlpZiAocmluZy0+c2Nhbl90aW1lc3RhbXApCi0JCSooKHM2NCAqKShkYXRhICsgKChpICsgMykvNCkqNCkpID0gc3QtPmxhc3RfdGltZXN0YW1wOwotCi0JcmluZy0+YWNjZXNzLnN0b3JlX3RvKHJpbmcsCi0JCQkodTggKilkYXRhLAotCQkJc3QtPmxhc3RfdGltZXN0YW1wKTsKLQotCWlpb190cmlnZ2VyX25vdGlmeV9kb25lKHN0LT5pbmRpb19kZXYtPnRyaWcpOwotCWtmcmVlKGRhdGEpOwotCi0JcmV0dXJuOwotfQotCi12b2lkIGFkaXMxNjM1MF91bmNvbmZpZ3VyZV9yaW5nKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCi17Ci0Ja2ZyZWUoaW5kaW9fZGV2LT5wb2xsZnVuYyk7Ci0JaWlvX3N3X3JiX2ZyZWUoaW5kaW9fZGV2LT5yaW5nKTsKLX0KLQotaW50IGFkaXMxNjM1MF9jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQotewotCWludCByZXQgPSAwOwotCXN0cnVjdCBhZGlzMTYzNTBfc3RhdGUgKnN0ID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKLQlzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nOwotCUlOSVRfV09SSygmc3QtPndvcmtfdHJpZ2dlcl90b19yaW5nLCBhZGlzMTYzNTBfdHJpZ2dlcl9iaF90b19yaW5nKTsKLQotCXJpbmcgPSBpaW9fc3dfcmJfYWxsb2NhdGUoaW5kaW9fZGV2KTsKLQlpZiAoIXJpbmcpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JaW5kaW9fZGV2LT5yaW5nID0gcmluZzsKLQkvKiBFZmZlY3RpdmVseSBzZWxlY3QgdGhlIHJpbmcgYnVmZmVyIGltcGxlbWVudGF0aW9uICovCi0JaWlvX3Jpbmdfc3dfcmVnaXN0ZXJfZnVuY3MoJnJpbmctPmFjY2Vzcyk7Ci0JcmluZy0+YnBlID0gMjsKLQlyaW5nLT5zY2FuX2VsX2F0dHJzID0gJmFkaXMxNjM1MF9zY2FuX2VsX2dyb3VwOwotCXJpbmctPnNjYW5fdGltZXN0YW1wID0gdHJ1ZTsKLQlyaW5nLT5wcmVlbmFibGUgPSAmaWlvX3N3X3JpbmdfcHJlZW5hYmxlOwotCXJpbmctPnBvc3RlbmFibGUgPSAmaWlvX3RyaWdnZXJlZF9yaW5nX3Bvc3RlbmFibGU7Ci0JcmluZy0+cHJlZGlzYWJsZSA9ICZpaW9fdHJpZ2dlcmVkX3JpbmdfcHJlZGlzYWJsZTsKLQlyaW5nLT5vd25lciA9IFRISVNfTU9EVUxFOwotCi0JLyogU2V0IGRlZmF1bHQgc2NhbiBtb2RlICovCi0JaWlvX3NjYW5fbWFza19zZXQocmluZywgaWlvX3NjYW5fZWxfaW4wX3N1cHBseS5udW1iZXIpOwotCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIGlpb19zY2FuX2VsX2d5cm9feC5udW1iZXIpOwotCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIGlpb19zY2FuX2VsX2d5cm9feS5udW1iZXIpOwotCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIGlpb19zY2FuX2VsX2d5cm9fei5udW1iZXIpOwotCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIGlpb19zY2FuX2VsX2FjY2VsX3gubnVtYmVyKTsKLQlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCBpaW9fc2Nhbl9lbF9hY2NlbF95Lm51bWJlcik7Ci0JaWlvX3NjYW5fbWFza19zZXQocmluZywgaWlvX3NjYW5fZWxfYWNjZWxfei5udW1iZXIpOwotCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIGlpb19zY2FuX2VsX3RlbXBfeC5udW1iZXIpOwotCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIGlpb19zY2FuX2VsX3RlbXBfeS5udW1iZXIpOwotCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIGlpb19zY2FuX2VsX3RlbXBfei5udW1iZXIpOwotCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIGlpb19zY2FuX2VsX2luMS5udW1iZXIpOwotCi0JcmV0ID0gaWlvX2FsbG9jX3BvbGxmdW5jKGluZGlvX2RldiwgTlVMTCwgJmFkaXMxNjM1MF9wb2xsX2Z1bmNfdGgpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyb3JfaWlvX3N3X3JiX2ZyZWU7Ci0KLQlpbmRpb19kZXYtPm1vZGVzIHw9IElORElPX1JJTkdfVFJJR0dFUkVEOwotCXJldHVybiAwOwotCi1lcnJvcl9paW9fc3dfcmJfZnJlZToKLQlpaW9fc3dfcmJfZnJlZShpbmRpb19kZXYtPnJpbmcpOwotCXJldHVybiByZXQ7Ci19Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjM1MF90cmlnZ2VyLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTYzNTBfdHJpZ2dlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzliN2VjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjM1MF90cmlnZ2VyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotCi0jaW5jbHVkZSAiLi4vaWlvLmgiCi0jaW5jbHVkZSAiLi4vc3lzZnMuaCIKLSNpbmNsdWRlICIuLi90cmlnZ2VyLmgiCi0jaW5jbHVkZSAiYWRpczE2MzUwLmgiCi0KLS8qKgotICogYWRpczE2MzUwX2RhdGFfcmR5X3RyaWdfcG9sbCgpIHRoZSBldmVudCBoYW5kbGVyIGZvciB0aGUgZGF0YSByZHkgdHJpZwotICoqLwotc3RhdGljIGludCBhZGlzMTYzNTBfZGF0YV9yZHlfdHJpZ19wb2xsKHN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbywKLQkJCQkgICAgICAgaW50IGluZGV4LAotCQkJCSAgICAgICBzNjQgdGltZXN0YW1wLAotCQkJCSAgICAgICBpbnQgbm9fdGVzdCkKLXsKLQlzdHJ1Y3QgYWRpczE2MzUwX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoZGV2X2luZm8pOwotCXN0cnVjdCBpaW9fdHJpZ2dlciAqdHJpZyA9IHN0LT50cmlnOwotCi0JaWlvX3RyaWdnZXJfcG9sbCh0cmlnLCB0aW1lc3RhbXApOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1JSU9fRVZFTlRfU0goZGF0YV9yZHlfdHJpZywgJmFkaXMxNjM1MF9kYXRhX3JkeV90cmlnX3BvbGwpOwotCi1zdGF0aWMgSUlPX1RSSUdHRVJfTkFNRV9BVFRSOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWRpczE2MzUwX3RyaWdnZXJfYXR0cnNbXSA9IHsKLQkmZGV2X2F0dHJfbmFtZS5hdHRyLAotCU5VTEwsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZGlzMTYzNTBfdHJpZ2dlcl9hdHRyX2dyb3VwID0gewotCS5hdHRycyA9IGFkaXMxNjM1MF90cmlnZ2VyX2F0dHJzLAotfTsKLQotLyoqCi0gKiBhZGlzMTYzNTBfZGF0YV9yZHlfdHJpZ2dlcl9zZXRfc3RhdGUoKSBzZXQgZGF0YXJkeSBpbnRlcnJ1cHQgc3RhdGUKLSAqKi8KLXN0YXRpYyBpbnQgYWRpczE2MzUwX2RhdGFfcmR5X3RyaWdnZXJfc2V0X3N0YXRlKHN0cnVjdCBpaW9fdHJpZ2dlciAqdHJpZywKLQkJCQkJCWJvb2wgc3RhdGUpCi17Ci0Jc3RydWN0IGFkaXMxNjM1MF9zdGF0ZSAqc3QgPSB0cmlnLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHN0LT5pbmRpb19kZXY7Ci0JaW50IHJldCA9IDA7Ci0KLQlkZXZfZGJnKCZpbmRpb19kZXYtPmRldiwgIiVzICglZClcbiIsIF9fZnVuY19fLCBzdGF0ZSk7Ci0JcmV0ID0gYWRpczE2MzUwX3NldF9pcnEoJnN0LT5pbmRpb19kZXYtPmRldiwgc3RhdGUpOwotCWlmIChzdGF0ZSA9PSBmYWxzZSkgewotCQlpaW9fcmVtb3ZlX2V2ZW50X2Zyb21fbGlzdCgmaWlvX2V2ZW50X2RhdGFfcmR5X3RyaWcsCi0JCQkJCSAgICZpbmRpb19kZXYtPmludGVycnVwdHNbMF0KLQkJCQkJICAgLT5ldl9saXN0KTsKLQkJLyogcG9zc2libGUgcXVpcmsgd2l0aCBoYW5kbGVyIGN1cnJlbnRseSB3b3JrZWQgYXJvdW5kCi0JCSAgIGJ5IGVuc3VyaW5nIHRoZSB3b3JrIHF1ZXVlIGlzIGVtcHR5ICovCi0JCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Ci0JfSBlbHNlIHsKLQkJaWlvX2FkZF9ldmVudF90b19saXN0KCZpaW9fZXZlbnRfZGF0YV9yZHlfdHJpZywKLQkJCQkgICAgICAmaW5kaW9fZGV2LT5pbnRlcnJ1cHRzWzBdLT5ldl9saXN0KTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBhZGlzMTYzNTBfdHJpZ190cnlfcmVlbigpIHRyeSByZW5hYmxpbmcgaXJxIGZvciBkYXRhIHJkeSB0cmlnZ2VyCi0gKiBAdHJpZzoJdGhlIGRhdGFyZHkgdHJpZ2dlcgotICoqLwotc3RhdGljIGludCBhZGlzMTYzNTBfdHJpZ190cnlfcmVlbihzdHJ1Y3QgaWlvX3RyaWdnZXIgKnRyaWcpCi17Ci0Jc3RydWN0IGFkaXMxNjM1MF9zdGF0ZSAqc3QgPSB0cmlnLT5wcml2YXRlX2RhdGE7Ci0JZW5hYmxlX2lycShzdC0+dXMtPmlycSk7Ci0JLyogaXJxIHJlZW5hYmxlZCBzbyBzdWNjZXNzISAqLwotCXJldHVybiAwOwotfQotCi1pbnQgYWRpczE2MzUwX3Byb2JlX3RyaWdnZXIoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBhZGlzMTYzNTBfc3RhdGUgKnN0ID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKLQotCXN0LT50cmlnID0gaWlvX2FsbG9jYXRlX3RyaWdnZXIoKTsKLQlzdC0+dHJpZy0+bmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLAotCQkJCSAgICJhZGlzMTYzNTAtZGV2JWQiLAotCQkJCSAgIGluZGlvX2Rldi0+aWQpOwotCWlmICghc3QtPnRyaWctPm5hbWUpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJvcl9mcmVlX3RyaWc7Ci0JfQotCXN0LT50cmlnLT5kZXYucGFyZW50ID0gJnN0LT51cy0+ZGV2OwotCXN0LT50cmlnLT5vd25lciA9IFRISVNfTU9EVUxFOwotCXN0LT50cmlnLT5wcml2YXRlX2RhdGEgPSBzdDsKLQlzdC0+dHJpZy0+c2V0X3RyaWdnZXJfc3RhdGUgPSAmYWRpczE2MzUwX2RhdGFfcmR5X3RyaWdnZXJfc2V0X3N0YXRlOwotCXN0LT50cmlnLT50cnlfcmVlbmFibGUgPSAmYWRpczE2MzUwX3RyaWdfdHJ5X3JlZW47Ci0Jc3QtPnRyaWctPmNvbnRyb2xfYXR0cnMgPSAmYWRpczE2MzUwX3RyaWdnZXJfYXR0cl9ncm91cDsKLQlyZXQgPSBpaW9fdHJpZ2dlcl9yZWdpc3RlcihzdC0+dHJpZyk7Ci0KLQkvKiBzZWxlY3QgZGVmYXVsdCB0cmlnZ2VyICovCi0JaW5kaW9fZGV2LT50cmlnID0gc3QtPnRyaWc7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJvcl9mcmVlX3RyaWdfbmFtZTsKLQotCXJldHVybiAwOwotCi1lcnJvcl9mcmVlX3RyaWdfbmFtZToKLQlrZnJlZShzdC0+dHJpZy0+bmFtZSk7Ci1lcnJvcl9mcmVlX3RyaWc6Ci0JaWlvX2ZyZWVfdHJpZ2dlcihzdC0+dHJpZyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi12b2lkIGFkaXMxNjM1MF9yZW1vdmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQotewotCXN0cnVjdCBhZGlzMTYzNTBfc3RhdGUgKnN0YXRlID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKLQotCWlpb190cmlnZ2VyX3VucmVnaXN0ZXIoc3RhdGUtPnRyaWcpOwotCWtmcmVlKHN0YXRlLT50cmlnLT5uYW1lKTsKLQlpaW9fZnJlZV90cmlnZ2VyKHN0YXRlLT50cmlnKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjQwMC5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2NDAwLmgKaW5kZXggZTMyOGJjYy4uZGIxODRkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2NDAwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2NDAwLmgKQEAgLTM3LDYgKzM3LDEwIEBACiAjZGVmaW5lIEFESVMxNjQwMF9URU1QX09VVCAgMHgxNiAvKiBUZW1wZXJhdHVyZSBvdXRwdXQgKi8KICNkZWZpbmUgQURJUzE2NDAwX0FVWF9BREMgICAweDE4IC8qIEF1eGlsaWFyeSBBREMgbWVhc3VyZW1lbnQgKi8KIAorI2RlZmluZSBBRElTMTYzNTBfWFRFTVBfT1VUIDB4MTAgLyogWC1heGlzIGd5cm9zY29wZSB0ZW1wZXJhdHVyZSBtZWFzdXJlbWVudCAqLworI2RlZmluZSBBRElTMTYzNTBfWVRFTVBfT1VUIDB4MTIgLyogWS1heGlzIGd5cm9zY29wZSB0ZW1wZXJhdHVyZSBtZWFzdXJlbWVudCAqLworI2RlZmluZSBBRElTMTYzNTBfWlRFTVBfT1VUIDB4MTQgLyogWi1heGlzIGd5cm9zY29wZSB0ZW1wZXJhdHVyZSBtZWFzdXJlbWVudCAqLworCiAvKiBDYWxpYnJhdGlvbiBwYXJhbWV0ZXJzICovCiAjZGVmaW5lIEFESVMxNjQwMF9YR1lST19PRkYgMHgxQSAvKiBYLWF4aXMgZ3lyb3Njb3BlIGJpYXMgb2Zmc2V0IGZhY3RvciAqLwogI2RlZmluZSBBRElTMTY0MDBfWUdZUk9fT0ZGIDB4MUMgLyogWS1heGlzIGd5cm9zY29wZSBiaWFzIG9mZnNldCBmYWN0b3IgKi8KQEAgLTY4LDcgKzcyLDYgQEAKICNkZWZpbmUgQURJUzE2NDAwX0FVWF9EQUMgICAweDRBIC8qIEF1eGlsaWFyeSBEQUMgZGF0YSAqLwogCiAjZGVmaW5lIEFESVMxNjQwMF9QUk9EVUNUX0lEIDB4NTYgLyogUHJvZHVjdCBpZGVudGlmaWVyICovCi0jZGVmaW5lIEFESVMxNjQwMF9QUk9EVUNUX0lEX0RFRkFVTFQgMHg0MDE1CS8qIERhdGFzaGVldCBzYXlzIDB4NDEwNSwgSSBnZXQgMHg0MDE1ICovCiAKICNkZWZpbmUgQURJUzE2NDAwX0VSUk9SX0FDVElWRQkJCSgxPDwxNCkKICNkZWZpbmUgQURJUzE2NDAwX05FV19EQVRBCQkJKDE8PDE0KQpAQCAtMTIzLDEzICsxMjYsMjEgQEAKICNkZWZpbmUgQURJUzE2NDAwX1NQSV9CVVJTVAkodTMyKSgxMDAwICogMTAwMCkKICNkZWZpbmUgQURJUzE2NDAwX1NQSV9GQVNUCSh1MzIpKDIwMDAgKiAxMDAwKQogCisjZGVmaW5lIEFESVMxNjQwMF9IQVNfUFJPRF9JRCAxCisjZGVmaW5lIEFESVMxNjQwMF9OT19CVVJTVCAyCitzdHJ1Y3QgYWRpczE2NDAwX2NoaXBfaW5mbyB7CisJY29uc3Qgc3RydWN0IGlpb19jaGFuX3NwZWMgKmNoYW5uZWxzOworCWNvbnN0IGludCBudW1fY2hhbm5lbHM7CisJY29uc3QgaW50IHByb2R1Y3RfaWQ7CisJY29uc3QgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgZ3lyb19zY2FsZV9taWNybzsKKwl1bnNpZ25lZCBpbnQgYWNjZWxfc2NhbGVfbWljcm87CisJdW5zaWduZWQgbG9uZyBkZWZhdWx0X3NjYW5fbWFzazsKK307CisKIC8qKgogICogc3RydWN0IGFkaXMxNjQwMF9zdGF0ZSAtIGRldmljZSBpbnN0YW5jZSBzcGVjaWZpYyBkYXRhCiAgKiBAdXM6CQkJYWN0dWFsIHNwaV9kZXZpY2UKLSAqIEB3b3JrX3RyaWdnZXJfdG9fcmluZzogYmggZm9yIHRyaWdnZXJlZCBldmVudCBoYW5kbGluZwotICogQGludGVyOgkJdXNlZCB0byBjaGVjayBpZiBuZXcgaW50ZXJydXB0IGhhcyBiZWVuIHRyaWdnZXJlZAotICogQGxhc3RfdGltZXN0YW1wOglwYXNzaW5nIHRpbWVzdGFtcCBmcm9tIHRoIHRvIGJoIG9mIGludGVycnVwdCBoYW5kbGVyCi0gKiBAaW5kaW9fZGV2OgkJaW5kdXN0cmlhbCBJL08gZGV2aWNlIHN0cnVjdHVyZQogICogQHRyaWc6CQlkYXRhIHJlYWR5IHRyaWdnZXIgcmVnaXN0ZXJlZCB3aXRoIGlpbwogICogQHR4OgkJCXRyYW5zbWl0IGJ1ZmZlcgogICogQHJ4OgkJCXJlY2VpdmUgYnVmZmVyCkBAIC0xMzcsMTYgKzE0OCwxNSBAQAogICoqLwogc3RydWN0IGFkaXMxNjQwMF9zdGF0ZSB7CiAJc3RydWN0IHNwaV9kZXZpY2UJCSp1czsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCXdvcmtfdHJpZ2dlcl90b19yaW5nOwotCXM2NAkJCQlsYXN0X3RpbWVzdGFtcDsKLQlzdHJ1Y3QgaWlvX2RldgkJCSppbmRpb19kZXY7CiAJc3RydWN0IGlpb190cmlnZ2VyCQkqdHJpZzsKLQl1OAkJCQkqdHg7Ci0JdTgJCQkJKnJ4OwogCXN0cnVjdCBtdXRleAkJCWJ1Zl9sb2NrOworCXN0cnVjdCBhZGlzMTY0MDBfY2hpcF9pbmZvCSp2YXJpYW50OworCisJdTgJdHhbQURJUzE2NDAwX01BWF9UWF0gX19fX2NhY2hlbGluZV9hbGlnbmVkOworCXU4CXJ4W0FESVMxNjQwMF9NQVhfUlhdIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKIH07CiAKLWludCBhZGlzMTY0MDBfc2V0X2lycShzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgZW5hYmxlKTsKK2ludCBhZGlzMTY0MDBfc2V0X2lycShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LCBib29sIGVuYWJsZSk7CiAKICNpZmRlZiBDT05GSUdfSUlPX1JJTkdfQlVGRkVSCiAvKiBBdCB0aGUgbW9tZW50IHRyaWdnZXJzIGFyZSBvbmx5IHVzZWQgZm9yIHJpbmcgYnVmZmVyCkBAIC0xNjEsMTAgKzE3MSwxNiBAQAogI2RlZmluZSBBRElTMTY0MDBfU0NBTl9BQ0NfWQk1CiAjZGVmaW5lIEFESVMxNjQwMF9TQ0FOX0FDQ19aCTYKICNkZWZpbmUgQURJUzE2NDAwX1NDQU5fTUFHTl9YCTcKKyNkZWZpbmUgQURJUzE2MzUwX1NDQU5fVEVNUF9YCTcKICNkZWZpbmUgQURJUzE2NDAwX1NDQU5fTUFHTl9ZCTgKKyNkZWZpbmUgQURJUzE2MzUwX1NDQU5fVEVNUF9ZCTgKICNkZWZpbmUgQURJUzE2NDAwX1NDQU5fTUFHTl9aCTkKKyNkZWZpbmUgQURJUzE2MzUwX1NDQU5fVEVNUF9aCTkKICNkZWZpbmUgQURJUzE2NDAwX1NDQU5fVEVNUAkxMAorI2RlZmluZSBBRElTMTYzNTBfU0NBTl9BRENfMAkxMAogI2RlZmluZSBBRElTMTY0MDBfU0NBTl9BRENfMAkxMQorI2RlZmluZSBBRElTMTYzMDBfU0NBTl9JTkNMSV9YCTEyCisjZGVmaW5lIEFESVMxNjMwMF9TQ0FOX0lOQ0xJX1kJMTMKIAogdm9pZCBhZGlzMTY0MDBfcmVtb3ZlX3RyaWdnZXIoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7CiBpbnQgYWRpczE2NDAwX3Byb2JlX3RyaWdnZXIoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTY0MDBfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2NDAwX2NvcmUuYwppbmRleCA1NDBiZGU2Li5mZTg5ODAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTY0MDBfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjQwMF9jb3JlLmMKQEAgLTM4LDcgKzM4LDE3IEBACiAKICNkZWZpbmUgRFJJVkVSX05BTUUJCSJhZGlzMTY0MDAiCiAKLXN0YXRpYyBpbnQgYWRpczE2NDAwX2NoZWNrX3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkZXYpOworZW51bSBhZGlzMTY0MDBfY2hpcF92YXJpYW50IHsKKwlBRElTMTYzMDAsCisJQURJUzE2MzUwLAorCUFESVMxNjM2MCwKKwlBRElTMTYzNjIsCisJQURJUzE2MzY0LAorCUFESVMxNjM2NSwKKwlBRElTMTY0MDAsCit9OworCitzdGF0aWMgaW50IGFkaXMxNjQwMF9jaGVja19zdGF0dXMoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7CiAKIC8qIEF0IHRoZSBtb21lbnQgdGhlIHNwaSBmcmFtZXdvcmsgZG9lc24ndCBhbGxvdyBnbG9iYWwgc2V0dGluZyBvZiBjc19jaGFuZ2UuCiAgKiBJdCdzIGluIHRoZSBsaWtlbHkgdG8gYmUgYWRkZWQgY29tbWVudCBhdCB0aGUgdG9wIG9mIHNwaS5oLgpAQCAtNTEsMTMgKzYxLDEyIEBACiAgKiBAcmVnX2FkZHJlc3M6IHRoZSBhZGRyZXNzIG9mIHRoZSByZWdpc3RlciB0byBiZSB3cml0dGVuCiAgKiBAdmFsOiB0aGUgdmFsdWUgdG8gd3JpdGUKICAqKi8KLXN0YXRpYyBpbnQgYWRpczE2NDAwX3NwaV93cml0ZV9yZWdfOChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXU4IHJlZ19hZGRyZXNzLAotCQl1OCB2YWwpCitzdGF0aWMgaW50IGFkaXMxNjQwMF9zcGlfd3JpdGVfcmVnXzgoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKKwkJCQkgICAgIHU4IHJlZ19hZGRyZXNzLAorCQkJCSAgICAgdTggdmFsKQogewogCWludCByZXQ7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBhZGlzMTY0MDBfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOworCXN0cnVjdCBhZGlzMTY0MDBfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKIAogCW11dGV4X2xvY2soJnN0LT5idWZfbG9jayk7CiAJc3QtPnR4WzBdID0gQURJUzE2NDAwX1dSSVRFX1JFRyhyZWdfYWRkcmVzcyk7CkBAIC03NiwxNCArODUsMTMgQEAKICAqICAgICAgICAgICAgICAgaXMgYXNzdW1lZCB0byBoYXZlIGFkZHJlc3Mgb25lIGdyZWF0ZXIuCiAgKiBAdmFsOiB2YWx1ZSB0byBiZSB3cml0dGVuCiAgKiovCi1zdGF0aWMgaW50IGFkaXMxNjQwMF9zcGlfd3JpdGVfcmVnXzE2KHN0cnVjdCBkZXZpY2UgKmRldiwKK3N0YXRpYyBpbnQgYWRpczE2NDAwX3NwaV93cml0ZV9yZWdfMTYoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKIAkJdTggbG93ZXJfcmVnX2FkZHJlc3MsCiAJCXUxNiB2YWx1ZSkKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBzcGlfbWVzc2FnZSBtc2c7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBhZGlzMTY0MDBfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOworCXN0cnVjdCBhZGlzMTY0MDBfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKIAlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHhmZXJzW10gPSB7CiAJCXsKIAkJCS50eF9idWYgPSBzdC0+dHgsCkBAIC0xMTQsMTggKzEyMiwxNyBAQAogCiAvKioKICAqIGFkaXMxNjQwMF9zcGlfcmVhZF9yZWdfMTYoKSAtIHJlYWQgMiBieXRlcyBmcm9tIGEgMTYtYml0IHJlZ2lzdGVyCi0gKiBAZGV2OiBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIGNoaWxkIG9mIGFjdHVhbCBkZXZpY2UgKGlpb19kZXYgb3IgaWlvX3RyaWcpCisgKiBAaW5kaW9fZGV2OiBpaW8gZGV2aWNlCiAgKiBAcmVnX2FkZHJlc3M6IHRoZSBhZGRyZXNzIG9mIHRoZSBsb3dlciBvZiB0aGUgdHdvIHJlZ2lzdGVycy4gU2Vjb25kIHJlZ2lzdGVyCiAgKiAgICAgICAgICAgICAgIGlzIGFzc3VtZWQgdG8gaGF2ZSBhZGRyZXNzIG9uZSBncmVhdGVyLgogICogQHZhbDogc29tZXdoZXJlIHRvIHBhc3MgYmFjayB0aGUgdmFsdWUgcmVhZAogICoqLwotc3RhdGljIGludCBhZGlzMTY0MDBfc3BpX3JlYWRfcmVnXzE2KHN0cnVjdCBkZXZpY2UgKmRldiwKK3N0YXRpYyBpbnQgYWRpczE2NDAwX3NwaV9yZWFkX3JlZ18xNihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAogCQl1OCBsb3dlcl9yZWdfYWRkcmVzcywKIAkJdTE2ICp2YWwpCiB7CiAJc3RydWN0IHNwaV9tZXNzYWdlIG1zZzsKLQlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGFkaXMxNjQwMF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CisJc3RydWN0IGFkaXMxNjQwMF9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwogCWludCByZXQ7CiAJc3RydWN0IHNwaV90cmFuc2ZlciB4ZmVyc1tdID0gewogCQl7CkBAIC0xNjMsMTAwICsxNzAsMTUgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3NpemVfdCBhZGlzMTY0MDBfc3BpX3JlYWRfc2lnbmVkKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNoYXIgKmJ1ZiwKLQkJdW5zaWduZWQgYml0cykKLXsKLQlpbnQgcmV0OwotCXMxNiB2YWwgPSAwOwotCXVuc2lnbmVkIHNoaWZ0ID0gMTYgLSBiaXRzOwotCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKLQotCXJldCA9IGFkaXMxNjQwMF9zcGlfcmVhZF9yZWdfMTYoZGV2LCB0aGlzX2F0dHItPmFkZHJlc3MsICh1MTYgKikmdmFsKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JaWYgKHZhbCAmIEFESVMxNjQwMF9FUlJPUl9BQ1RJVkUpCi0JCWFkaXMxNjQwMF9jaGVja19zdGF0dXMoZGV2KTsKLQl2YWwgPSAoKHMxNikodmFsIDw8IHNoaWZ0KSA+PiBzaGlmdCk7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGFkaXMxNjQwMF9yZWFkXzEyYml0X3Vuc2lnbmVkKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNoYXIgKmJ1ZikKLXsKLQlpbnQgcmV0OwotCXUxNiB2YWwgPSAwOwotCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKLQotCXJldCA9IGFkaXMxNjQwMF9zcGlfcmVhZF9yZWdfMTYoZGV2LCB0aGlzX2F0dHItPmFkZHJlc3MsICZ2YWwpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAodmFsICYgQURJUzE2NDAwX0VSUk9SX0FDVElWRSkKLQkJYWRpczE2NDAwX2NoZWNrX3N0YXR1cyhkZXYpOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHZhbCAmIDB4MEZGRik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGFkaXMxNjQwMF9yZWFkXzE0Yml0X3NpZ25lZChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljaGFyICpidWYpCi17Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXNzaXplX3QgcmV0OwotCi0JLyogVGFrZSB0aGUgaWlvX2RldiBzdGF0dXMgbG9jayAqLwotCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOwotCXJldCA9ICBhZGlzMTY0MDBfc3BpX3JlYWRfc2lnbmVkKGRldiwgYXR0ciwgYnVmLCAxNCk7Ci0JbXV0ZXhfdW5sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGFkaXMxNjQwMF9yZWFkXzEyYml0X3NpZ25lZChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljaGFyICpidWYpCi17Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXNzaXplX3QgcmV0OwotCi0JLyogVGFrZSB0aGUgaWlvX2RldiBzdGF0dXMgbG9jayAqLwotCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOwotCXJldCA9ICBhZGlzMTY0MDBfc3BpX3JlYWRfc2lnbmVkKGRldiwgYXR0ciwgYnVmLCAxMik7Ci0JbXV0ZXhfdW5sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGFkaXMxNjQwMF93cml0ZV8xNmJpdChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljb25zdCBjaGFyICpidWYsCi0JCXNpemVfdCBsZW4pCi17Ci0Jc3RydWN0IGlpb19kZXZfYXR0ciAqdGhpc19hdHRyID0gdG9faWlvX2Rldl9hdHRyKGF0dHIpOwotCWludCByZXQ7Ci0JbG9uZyB2YWw7Ci0KLQlyZXQgPSBzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ2YWwpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyb3JfcmV0OwotCXJldCA9IGFkaXMxNjQwMF9zcGlfd3JpdGVfcmVnXzE2KGRldiwgdGhpc19hdHRyLT5hZGRyZXNzLCB2YWwpOwotCi1lcnJvcl9yZXQ6Ci0JcmV0dXJuIHJldCA/IHJldCA6IGxlbjsKLX0KLQogc3RhdGljIHNzaXplX3QgYWRpczE2NDAwX3JlYWRfZnJlcXVlbmN5KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCWNoYXIgKmJ1ZikKIHsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJaW50IHJldCwgbGVuID0gMDsKIAl1MTYgdDsKIAlpbnQgc3BzOwotCXJldCA9IGFkaXMxNjQwMF9zcGlfcmVhZF9yZWdfMTYoZGV2LAorCXJldCA9IGFkaXMxNjQwMF9zcGlfcmVhZF9yZWdfMTYoaW5kaW9fZGV2LAogCQkJQURJUzE2NDAwX1NNUExfUFJELAogCQkJJnQpOwogCWlmIChyZXQpCkBAIC0yNzMsNyArMTk1LDcgQEAKIAkJc2l6ZV90IGxlbikKIHsKIAlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGFkaXMxNjQwMF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CisJc3RydWN0IGFkaXMxNjQwMF9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwogCWxvbmcgdmFsOwogCWludCByZXQ7CiAJdTggdDsKQEAgLTI5Myw3ICsyMTUsNyBAQAogCWVsc2UKIAkJc3QtPnVzLT5tYXhfc3BlZWRfaHogPSBBRElTMTY0MDBfU1BJX0ZBU1Q7CiAKLQlyZXQgPSBhZGlzMTY0MDBfc3BpX3dyaXRlX3JlZ184KGRldiwKKwlyZXQgPSBhZGlzMTY0MDBfc3BpX3dyaXRlX3JlZ184KGluZGlvX2RldiwKIAkJCUFESVMxNjQwMF9TTVBMX1BSRCwKIAkJCXQpOwogCkBAIC0zMDIsMTQgKzIyNCwxNCBAQAogCXJldHVybiByZXQgPyByZXQgOiBsZW47CiB9CiAKLXN0YXRpYyBpbnQgYWRpczE2NDAwX3Jlc2V0KHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgYWRpczE2NDAwX3Jlc2V0KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCiB7CiAJaW50IHJldDsKLQlyZXQgPSBhZGlzMTY0MDBfc3BpX3dyaXRlX3JlZ184KGRldiwKKwlyZXQgPSBhZGlzMTY0MDBfc3BpX3dyaXRlX3JlZ184KGluZGlvX2RldiwKIAkJCUFESVMxNjQwMF9HTE9CX0NNRCwKIAkJCUFESVMxNjQwMF9HTE9CX0NNRF9TV19SRVNFVCk7CiAJaWYgKHJldCkKLQkJZGV2X2VycihkZXYsICJwcm9ibGVtIHJlc2V0dGluZyBkZXZpY2UiKTsKKwkJZGV2X2VycigmaW5kaW9fZGV2LT5kZXYsICJwcm9ibGVtIHJlc2V0dGluZyBkZXZpY2UiKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0zMTgsMjIgKzI0MCwyNCBAQAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogeworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwogCWlmIChsZW4gPCAxKQogCQlyZXR1cm4gLTE7CiAJc3dpdGNoIChidWZbMF0pIHsKIAljYXNlICcxJzoKIAljYXNlICd5JzoKIAljYXNlICdZJzoKLQkJcmV0dXJuIGFkaXMxNjQwMF9yZXNldChkZXYpOworCQlyZXR1cm4gYWRpczE2NDAwX3Jlc2V0KGluZGlvX2Rldik7CiAJfQogCXJldHVybiAtMTsKIH0KIAotaW50IGFkaXMxNjQwMF9zZXRfaXJxKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBlbmFibGUpCitpbnQgYWRpczE2NDAwX3NldF9pcnEoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwgYm9vbCBlbmFibGUpCiB7CiAJaW50IHJldDsKIAl1MTYgbXNjOwotCXJldCA9IGFkaXMxNjQwMF9zcGlfcmVhZF9yZWdfMTYoZGV2LCBBRElTMTY0MDBfTVNDX0NUUkwsICZtc2MpOworCXJldCA9IGFkaXMxNjQwMF9zcGlfcmVhZF9yZWdfMTYoaW5kaW9fZGV2LCBBRElTMTY0MDBfTVNDX0NUUkwsICZtc2MpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfcmV0OwogCkBAIC0zNDMsNyArMjY3LDcgQEAKIAllbHNlCiAJCW1zYyAmPSB+QURJUzE2NDAwX01TQ19DVFJMX0RBVEFfUkRZX0VOOwogCi0JcmV0ID0gYWRpczE2NDAwX3NwaV93cml0ZV9yZWdfMTYoZGV2LCBBRElTMTY0MDBfTVNDX0NUUkwsIG1zYyk7CisJcmV0ID0gYWRpczE2NDAwX3NwaV93cml0ZV9yZWdfMTYoaW5kaW9fZGV2LCBBRElTMTY0MDBfTVNDX0NUUkwsIG1zYyk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl9yZXQ7CiAKQEAgLTM1Miw0MSArMjc2LDQ1IEBACiB9CiAKIC8qIFBvd2VyIGRvd24gdGhlIGRldmljZSAqLwotc3RhdGljIGludCBhZGlzMTY0MDBfc3RvcF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBhZGlzMTY0MDBfc3RvcF9kZXZpY2Uoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKIAlpbnQgcmV0OwogCXUxNiB2YWwgPSBBRElTMTY0MDBfU0xQX0NOVF9QT1dFUl9PRkY7CiAKLQlyZXQgPSBhZGlzMTY0MDBfc3BpX3dyaXRlX3JlZ18xNihkZXYsIEFESVMxNjQwMF9TTFBfQ05ULCB2YWwpOworCXJldCA9IGFkaXMxNjQwMF9zcGlfd3JpdGVfcmVnXzE2KGluZGlvX2RldiwgQURJUzE2NDAwX1NMUF9DTlQsIHZhbCk7CiAJaWYgKHJldCkKLQkJZGV2X2VycihkZXYsICJwcm9ibGVtIHdpdGggdHVybmluZyBkZXZpY2Ugb2ZmOiBTTFBfQ05UIik7CisJCWRldl9lcnIoJmluZGlvX2Rldi0+ZGV2LAorCQkJInByb2JsZW0gd2l0aCB0dXJuaW5nIGRldmljZSBvZmY6IFNMUF9DTlQiKTsKIAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgYWRpczE2NDAwX3NlbGZfdGVzdChzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGFkaXMxNjQwMF9zZWxmX3Rlc3Qoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKIAlpbnQgcmV0OwotCXJldCA9IGFkaXMxNjQwMF9zcGlfd3JpdGVfcmVnXzE2KGRldiwKKwlyZXQgPSBhZGlzMTY0MDBfc3BpX3dyaXRlX3JlZ18xNihpbmRpb19kZXYsCiAJCQlBRElTMTY0MDBfTVNDX0NUUkwsCiAJCQlBRElTMTY0MDBfTVNDX0NUUkxfTUVNX1RFU1QpOwogCWlmIChyZXQpIHsKLQkJZGV2X2VycihkZXYsICJwcm9ibGVtIHN0YXJ0aW5nIHNlbGYgdGVzdCIpOworCQlkZXZfZXJyKCZpbmRpb19kZXYtPmRldiwgInByb2JsZW0gc3RhcnRpbmcgc2VsZiB0ZXN0Iik7CiAJCWdvdG8gZXJyX3JldDsKIAl9CisKIAltc2xlZXAoQURJUzE2NDAwX01URVNUX0RFTEFZKTsKLQlhZGlzMTY0MDBfY2hlY2tfc3RhdHVzKGRldik7CisJYWRpczE2NDAwX2NoZWNrX3N0YXR1cyhpbmRpb19kZXYpOwogCiBlcnJfcmV0OgogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgYWRpczE2NDAwX2NoZWNrX3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGFkaXMxNjQwMF9jaGVja19zdGF0dXMoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKIAl1MTYgc3RhdHVzOwogCWludCByZXQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmluZGlvX2Rldi0+ZGV2OwogCi0JcmV0ID0gYWRpczE2NDAwX3NwaV9yZWFkX3JlZ18xNihkZXYsIEFESVMxNjQwMF9ESUFHX1NUQVQsICZzdGF0dXMpOworCXJldCA9IGFkaXMxNjQwMF9zcGlfcmVhZF9yZWdfMTYoaW5kaW9fZGV2LAorCQkJCQlBRElTMTY0MDBfRElBR19TVEFULCAmc3RhdHVzKTsKIAogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoZGV2LCAiUmVhZGluZyBzdGF0dXMgZmFpbGVkXG4iKTsKQEAgLTQyOCwxMSArMzU2LDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBhZGlzMTY0MDBfaW5pdGlhbF9zZXR1cChzdHJ1Y3QgYWRpczE2NDAwX3N0YXRlICpzdCkKK3N0YXRpYyBpbnQgYWRpczE2NDAwX2luaXRpYWxfc2V0dXAoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKIAlpbnQgcmV0OwogCXUxNiBwcm9kX2lkLCBzbXBfcHJkOwotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZzdC0+aW5kaW9fZGV2LT5kZXY7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmluZGlvX2Rldi0+ZGV2OworCXN0cnVjdCBhZGlzMTY0MDBfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKIAogCS8qIHVzZSBsb3cgc3BpIHNwZWVkIGZvciBpbml0ICovCiAJc3QtPnVzLT5tYXhfc3BlZWRfaHogPSBBRElTMTY0MDBfU1BJX1NMT1c7CkBAIC00NDAsNDUgKzM2OSw0NiBAQAogCXNwaV9zZXR1cChzdC0+dXMpOwogCiAJLyogRGlzYWJsZSBJUlEgKi8KLQlyZXQgPSBhZGlzMTY0MDBfc2V0X2lycShkZXYsIGZhbHNlKTsKKwlyZXQgPSBhZGlzMTY0MDBfc2V0X2lycShpbmRpb19kZXYsIGZhbHNlKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoZGV2LCAiZGlzYWJsZSBpcnEgZmFpbGVkIik7CiAJCWdvdG8gZXJyX3JldDsKIAl9CiAKIAkvKiBEbyBzZWxmIHRlc3QgKi8KLQlyZXQgPSBhZGlzMTY0MDBfc2VsZl90ZXN0KGRldik7CisJcmV0ID0gYWRpczE2NDAwX3NlbGZfdGVzdChpbmRpb19kZXYpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycihkZXYsICJzZWxmIHRlc3QgZmFpbHVyZSIpOwogCQlnb3RvIGVycl9yZXQ7CiAJfQogCiAJLyogUmVhZCBzdGF0dXMgcmVnaXN0ZXIgdG8gY2hlY2sgdGhlIHJlc3VsdCAqLwotCXJldCA9IGFkaXMxNjQwMF9jaGVja19zdGF0dXMoZGV2KTsKKwlyZXQgPSBhZGlzMTY0MDBfY2hlY2tfc3RhdHVzKGluZGlvX2Rldik7CiAJaWYgKHJldCkgewotCQlhZGlzMTY0MDBfcmVzZXQoZGV2KTsKKwkJYWRpczE2NDAwX3Jlc2V0KGluZGlvX2Rldik7CiAJCWRldl9lcnIoZGV2LCAiZGV2aWNlIG5vdCBwbGF5aW5nIGJhbGwgLT4gcmVzZXQiKTsKIAkJbXNsZWVwKEFESVMxNjQwMF9TVEFSVFVQX0RFTEFZKTsKLQkJcmV0ID0gYWRpczE2NDAwX2NoZWNrX3N0YXR1cyhkZXYpOworCQlyZXQgPSBhZGlzMTY0MDBfY2hlY2tfc3RhdHVzKGluZGlvX2Rldik7CiAJCWlmIChyZXQpIHsKIAkJCWRldl9lcnIoZGV2LCAiZ2l2aW5nIHVwIik7CiAJCQlnb3RvIGVycl9yZXQ7CiAJCX0KIAl9CisJaWYgKHN0LT52YXJpYW50LT5mbGFncyAmIEFESVMxNjQwMF9IQVNfUFJPRF9JRCkgeworCQlyZXQgPSBhZGlzMTY0MDBfc3BpX3JlYWRfcmVnXzE2KGluZGlvX2RldiwKKwkJCQkJCUFESVMxNjQwMF9QUk9EVUNUX0lELCAmcHJvZF9pZCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl9yZXQ7CiAKLQlyZXQgPSBhZGlzMTY0MDBfc3BpX3JlYWRfcmVnXzE2KGRldiwgQURJUzE2NDAwX1BST0RVQ1RfSUQsICZwcm9kX2lkKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycl9yZXQ7CisJCWlmICgocHJvZF9pZCAmIDB4RjAwMCkgIT0gc3QtPnZhcmlhbnQtPnByb2R1Y3RfaWQpCisJCQlkZXZfd2FybihkZXYsICJpbmNvcnJlY3QgaWQiKTsKIAotCWlmICgocHJvZF9pZCAmIDB4RjAwMCkgIT0gQURJUzE2NDAwX1BST0RVQ1RfSURfREVGQVVMVCkKLQkJZGV2X3dhcm4oZGV2LCAidW5rbm93biBwcm9kdWN0IGlkIik7Ci0KLQotCWRldl9pbmZvKGRldiwgIjogcHJvZF9pZCAweCUwNHggYXQgQ1MlZCAoaXJxICVkKVxuIiwKLQkJCXByb2RfaWQsIHN0LT51cy0+Y2hpcF9zZWxlY3QsIHN0LT51cy0+aXJxKTsKLQorCQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICI6IHByb2RfaWQgMHglMDR4IGF0IENTJWQgKGlycSAlZClcbiIsCisJCSAgICAgICBwcm9kX2lkLCBzdC0+dXMtPmNoaXBfc2VsZWN0LCBzdC0+dXMtPmlycSk7CisJfQogCS8qIHVzZSBoaWdoIHNwaSBzcGVlZCBpZiBwb3NzaWJsZSAqLwotCXJldCA9IGFkaXMxNjQwMF9zcGlfcmVhZF9yZWdfMTYoZGV2LCBBRElTMTY0MDBfU01QTF9QUkQsICZzbXBfcHJkKTsKKwlyZXQgPSBhZGlzMTY0MDBfc3BpX3JlYWRfcmVnXzE2KGluZGlvX2RldiwKKwkJCQkJQURJUzE2NDAwX1NNUExfUFJELCAmc21wX3ByZCk7CiAJaWYgKCFyZXQgJiYgKHNtcF9wcmQgJiBBRElTMTY0MDBfU01QTF9QUkRfRElWX01BU0spIDwgMHgwQSkgewogCQlzdC0+dXMtPm1heF9zcGVlZF9oeiA9IEFESVMxNjQwMF9TUElfU0xPVzsKIAkJc3BpX3NldHVwKHN0LT51cyk7CkBAIC00OTAsNTggKzQyMCw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2RlZmluZSBBRElTMTY0MDBfREVWX0FUVFJfQ0FMSUJCSUFTKF9jaGFubmVsLCBfcmVnKQkJXAotCUlJT19ERVZfQVRUUl8jI19jaGFubmVsIyNfQ0FMSUJCSUFTKFNfSVdVU1IgfCBTX0lSVUdPLAlcCi0JCQlhZGlzMTY0MDBfcmVhZF8xMmJpdF9zaWduZWQsCQlcCi0JCQlhZGlzMTY0MDBfd3JpdGVfMTZiaXQsCQkJXAotCQkJX3JlZykKLQotc3RhdGljIEFESVMxNjQwMF9ERVZfQVRUUl9DQUxJQkJJQVMoR1lST19YLCBBRElTMTY0MDBfWEdZUk9fT0ZGKTsKLXN0YXRpYyBBRElTMTY0MDBfREVWX0FUVFJfQ0FMSUJCSUFTKEdZUk9fWSwgQURJUzE2NDAwX1lHWVJPX09GRik7Ci1zdGF0aWMgQURJUzE2NDAwX0RFVl9BVFRSX0NBTElCQklBUyhHWVJPX1osIEFESVMxNjQwMF9aR1lST19PRkYpOwotCi1zdGF0aWMgQURJUzE2NDAwX0RFVl9BVFRSX0NBTElCQklBUyhBQ0NFTF9YLCBBRElTMTY0MDBfWEFDQ0xfT0ZGKTsKLXN0YXRpYyBBRElTMTY0MDBfREVWX0FUVFJfQ0FMSUJCSUFTKEFDQ0VMX1ksIEFESVMxNjQwMF9ZQUNDTF9PRkYpOwotc3RhdGljIEFESVMxNjQwMF9ERVZfQVRUUl9DQUxJQkJJQVMoQUNDRUxfWiwgQURJUzE2NDAwX1pBQ0NMX09GRik7Ci0KLQotc3RhdGljIElJT19ERVZfQVRUUl9JTl9OQU1FRF9SQVcoMCwgc3VwcGx5LCBhZGlzMTY0MDBfcmVhZF8xNGJpdF9zaWduZWQsCi0JCUFESVMxNjQwMF9TVVBQTFlfT1VUKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUl9JTl9OQU1FRF9TQ0FMRSgwLCBzdXBwbHksICIwLjAwMjQxOCBWIik7Ci0KLXN0YXRpYyBJSU9fREVWX0FUVFJfR1lST19YKGFkaXMxNjQwMF9yZWFkXzE0Yml0X3NpZ25lZCwKLQkJQURJUzE2NDAwX1hHWVJPX09VVCk7Ci1zdGF0aWMgSUlPX0RFVl9BVFRSX0dZUk9fWShhZGlzMTY0MDBfcmVhZF8xNGJpdF9zaWduZWQsCi0JCUFESVMxNjQwMF9ZR1lST19PVVQpOwotc3RhdGljIElJT19ERVZfQVRUUl9HWVJPX1ooYWRpczE2NDAwX3JlYWRfMTRiaXRfc2lnbmVkLAotCQlBRElTMTY0MDBfWkdZUk9fT1VUKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUihneXJvX3NjYWxlLCAiMC4wMDA4NzI2NjQ2Iik7Ci0KLXN0YXRpYyBJSU9fREVWX0FUVFJfQUNDRUxfWChhZGlzMTY0MDBfcmVhZF8xNGJpdF9zaWduZWQsCi0JCUFESVMxNjQwMF9YQUNDTF9PVVQpOwotc3RhdGljIElJT19ERVZfQVRUUl9BQ0NFTF9ZKGFkaXMxNjQwMF9yZWFkXzE0Yml0X3NpZ25lZCwKLQkJQURJUzE2NDAwX1lBQ0NMX09VVCk7Ci1zdGF0aWMgSUlPX0RFVl9BVFRSX0FDQ0VMX1ooYWRpczE2NDAwX3JlYWRfMTRiaXRfc2lnbmVkLAotCQlBRElTMTY0MDBfWkFDQ0xfT1VUKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUihhY2NlbF9zY2FsZSwgIjAuMDMyNjU2MTQ0NSIpOwotCi1zdGF0aWMgSUlPX0RFVl9BVFRSX01BR05fWChhZGlzMTY0MDBfcmVhZF8xNGJpdF9zaWduZWQsCi0JCUFESVMxNjQwMF9YTUFHTl9PVVQpOwotc3RhdGljIElJT19ERVZfQVRUUl9NQUdOX1koYWRpczE2NDAwX3JlYWRfMTRiaXRfc2lnbmVkLAotCQlBRElTMTY0MDBfWU1BR05fT1VUKTsKLXN0YXRpYyBJSU9fREVWX0FUVFJfTUFHTl9aKGFkaXMxNjQwMF9yZWFkXzE0Yml0X3NpZ25lZCwKLQkJQURJUzE2NDAwX1pNQUdOX09VVCk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFIobWFnbl9zY2FsZSwgIjAuMDAwNSBHcyIpOwotCi0KLXN0YXRpYyBJSU9fREVWX0FUVFJfVEVNUF9SQVcoYWRpczE2NDAwX3JlYWRfMTJiaXRfc2lnbmVkKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUl9URU1QX09GRlNFVCgiMTk4LjE2IEsiKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUl9URU1QX1NDQUxFKCIwLjE0IEsiKTsKLQotc3RhdGljIElJT19ERVZfQVRUUl9JTl9SQVcoMSwgYWRpczE2NDAwX3JlYWRfMTJiaXRfdW5zaWduZWQsCi0JCUFESVMxNjQwMF9BVVhfQURDKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUihpbjFfc2NhbGUsICIwLjAwMDgwNiBWIik7Ci0KIHN0YXRpYyBJSU9fREVWX0FUVFJfU0FNUF9GUkVRKFNfSVdVU1IgfCBTX0lSVUdPLAogCQlhZGlzMTY0MDBfcmVhZF9mcmVxdWVuY3ksCiAJCWFkaXMxNjQwMF93cml0ZV9mcmVxdWVuY3kpOwpAQCAtNTUwLDQ2ICs0MjgsMjczIEBACiAKIHN0YXRpYyBJSU9fQ09OU1RfQVRUUl9TQU1QX0ZSRVFfQVZBSUwoIjQwOSA1NDYgODE5IDE2MzgiKTsKIAotc3RhdGljIElJT19DT05TVF9BVFRSX05BTUUoImFkaXMxNjQwMCIpOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWRpczE2NDAwX2V2ZW50X2F0dHJpYnV0ZXNbXSA9IHsKLQlOVUxMCitlbnVtIGFkaXMxNjQwMF9jaGFuIHsKKwlpbl9zdXBwbHksCisJZ3lyb194LAorCWd5cm9feSwKKwlneXJvX3osCisJYWNjZWxfeCwKKwlhY2NlbF95LAorCWFjY2VsX3osCisJbWFnbl94LAorCW1hZ25feSwKKwltYWduX3osCisJdGVtcCwKKwl0ZW1wMCwgdGVtcDEsIHRlbXAyLAorCWluMQogfTsKIAotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYWRpczE2NDAwX2V2ZW50X2F0dHJpYnV0ZV9ncm91cCA9IHsKLQkuYXR0cnMgPSBhZGlzMTY0MDBfZXZlbnRfYXR0cmlidXRlcywKK3N0YXRpYyB1OCBhZGlzMTY0MDBfYWRkcmVzc2VzWzE2XVsyXSA9IHsKKwlbaW5fc3VwcGx5XSA9IHsgQURJUzE2NDAwX1NVUFBMWV9PVVQsIDAgfSwKKwlbZ3lyb194XSA9IHsgQURJUzE2NDAwX1hHWVJPX09VVCwgQURJUzE2NDAwX1hHWVJPX09GRiB9LAorCVtneXJvX3ldID0geyBBRElTMTY0MDBfWUdZUk9fT1VULCBBRElTMTY0MDBfWUdZUk9fT0ZGIH0sCisJW2d5cm9fel0gPSB7IEFESVMxNjQwMF9aR1lST19PVVQsIEFESVMxNjQwMF9aR1lST19PRkYgfSwKKwlbYWNjZWxfeF0gPSB7IEFESVMxNjQwMF9YQUNDTF9PVVQsIEFESVMxNjQwMF9YQUNDTF9PRkYgfSwKKwlbYWNjZWxfeV0gPSB7IEFESVMxNjQwMF9ZQUNDTF9PVVQsIEFESVMxNjQwMF9ZQUNDTF9PRkYgfSwKKwlbYWNjZWxfel0gPSB7IEFESVMxNjQwMF9aQUNDTF9PVVQsIEFESVMxNjQwMF9aQUNDTF9PRkYgfSwKKwlbbWFnbl94XSA9IHsgQURJUzE2NDAwX1hNQUdOX09VVCwgMCB9LAorCVttYWduX3ldID0geyBBRElTMTY0MDBfWU1BR05fT1VULCAwIH0sCisJW21hZ25fel0gPSB7IEFESVMxNjQwMF9aTUFHTl9PVVQsIDAgfSwKKwlbdGVtcF0gPSB7IEFESVMxNjQwMF9URU1QX09VVCwgMCB9LAorCVt0ZW1wMF0gPSB7IEFESVMxNjM1MF9YVEVNUF9PVVQgfSwKKwlbdGVtcDFdID0geyBBRElTMTYzNTBfWVRFTVBfT1VUIH0sCisJW3RlbXAyXSA9IHsgQURJUzE2MzUwX1pURU1QX09VVCB9LAorCVtpbjFdID0geyBBRElTMTY0MDBfQVVYX0FEQyAsIDAgfSwKK307CisKK3N0YXRpYyBpbnQgYWRpczE2NDAwX3dyaXRlX3JhdyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAorCQkJICAgICAgIHN0cnVjdCBpaW9fY2hhbl9zcGVjIGNvbnN0ICpjaGFuLAorCQkJICAgICAgIGludCB2YWwsCisJCQkgICAgICAgaW50IHZhbDIsCisJCQkgICAgICAgbG9uZyBtYXNrKQoreworCWludCByZXQ7CisJc3dpdGNoIChtYXNrKSB7CisJY2FzZSAoMSA8PCBJSU9fQ0hBTl9JTkZPX0NBTElCQklBU19TRVBBUkFURSk6CisJCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOworCQlyZXQgPSBhZGlzMTY0MDBfc3BpX3dyaXRlX3JlZ18xNihpbmRpb19kZXYsCisJCQkJYWRpczE2NDAwX2FkZHJlc3Nlc1tjaGFuLT5hZGRyZXNzXVsxXSwKKwkJCQl2YWwpOworCQltdXRleF91bmxvY2soJmluZGlvX2Rldi0+bWxvY2spOworCQlyZXR1cm4gcmV0OworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIGludCBhZGlzMTY0MDBfcmVhZF9yYXcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKKwkJCSAgICAgIHN0cnVjdCBpaW9fY2hhbl9zcGVjIGNvbnN0ICpjaGFuLAorCQkJICAgICAgaW50ICp2YWwsCisJCQkgICAgICBpbnQgKnZhbDIsCisJCQkgICAgICBsb25nIG1hc2spCit7CisJc3RydWN0IGFkaXMxNjQwMF9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOworCWludCByZXQ7CisJczE2IHZhbDE2OworCWludCBzaGlmdDsKKworCXN3aXRjaCAobWFzaykgeworCWNhc2UgMDoKKwkJbXV0ZXhfbG9jaygmaW5kaW9fZGV2LT5tbG9jayk7CisJCXJldCA9IGFkaXMxNjQwMF9zcGlfcmVhZF9yZWdfMTYoaW5kaW9fZGV2LAorCQkJCWFkaXMxNjQwMF9hZGRyZXNzZXNbY2hhbi0+YWRkcmVzc11bMF0sCisJCQkJJnZhbDE2KTsKKwkJaWYgKHJldCkgeworCQkJbXV0ZXhfdW5sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJdmFsMTYgJj0gKDEgPDwgY2hhbi0+c2Nhbl90eXBlLnJlYWxiaXRzKSAtIDE7CisJCWlmIChjaGFuLT5zY2FuX3R5cGUuc2lnbiA9PSAncycpIHsKKwkJCXNoaWZ0ID0gMTYgLSBjaGFuLT5zY2FuX3R5cGUucmVhbGJpdHM7CisJCQl2YWwxNiA9IChzMTYpKHZhbDE2IDw8IHNoaWZ0KSA+PiBzaGlmdDsKKwkJfQorCQkqdmFsID0gdmFsMTY7CisJCW11dGV4X3VubG9jaygmaW5kaW9fZGV2LT5tbG9jayk7CisJCXJldHVybiBJSU9fVkFMX0lOVDsKKwljYXNlICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKToKKwljYXNlICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0VQQVJBVEUpOgorCQlzd2l0Y2ggKGNoYW4tPnR5cGUpIHsKKwkJY2FzZSBJSU9fR1lSTzoKKwkJCSp2YWwgPSAwOworCQkJKnZhbDIgPSBzdC0+dmFyaWFudC0+Z3lyb19zY2FsZV9taWNybzsKKwkJCXJldHVybiBJSU9fVkFMX0lOVF9QTFVTX01JQ1JPOworCQljYXNlIElJT19JTjoKKwkJCSp2YWwgPSAwOworCQkJaWYgKGNoYW4tPmNoYW5uZWwgPT0gMCkKKwkJCQkqdmFsMiA9IDI0MTg7CisJCQllbHNlCisJCQkJKnZhbDIgPSA4MDY7CisJCQlyZXR1cm4gSUlPX1ZBTF9JTlRfUExVU19NSUNSTzsKKwkJY2FzZSBJSU9fQUNDRUw6CisJCQkqdmFsID0gMDsKKwkJCSp2YWwyID0gc3QtPnZhcmlhbnQtPmFjY2VsX3NjYWxlX21pY3JvOworCQkJcmV0dXJuIElJT19WQUxfSU5UX1BMVVNfTUlDUk87CisJCWNhc2UgSUlPX01BR046CisJCQkqdmFsID0gMDsKKwkJCSp2YWwyID0gNTAwOworCQkJcmV0dXJuIElJT19WQUxfSU5UX1BMVVNfTUlDUk87CisJCWNhc2UgSUlPX1RFTVA6CisJCQkqdmFsID0gMDsKKwkJCSp2YWwyID0gMTQwMDAwOworCQkJcmV0dXJuIElJT19WQUxfSU5UX1BMVVNfTUlDUk87CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCWNhc2UgKDEgPDwgSUlPX0NIQU5fSU5GT19DQUxJQkJJQVNfU0VQQVJBVEUpOgorCQltdXRleF9sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKKwkJcmV0ID0gYWRpczE2NDAwX3NwaV9yZWFkX3JlZ18xNihpbmRpb19kZXYsCisJCQkJYWRpczE2NDAwX2FkZHJlc3Nlc1tjaGFuLT5hZGRyZXNzXVsxXSwKKwkJCQkmdmFsMTYpOworCQltdXRleF91bmxvY2soJmluZGlvX2Rldi0+bWxvY2spOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJdmFsMTYgPSAoKHZhbDE2ICYgMHhGRkYpIDw8IDQpID4+IDQ7CisJCSp2YWwgPSB2YWwxNjsKKwkJcmV0dXJuIElJT19WQUxfSU5UOworCWNhc2UgKDEgPDwgSUlPX0NIQU5fSU5GT19PRkZTRVRfU0VQQVJBVEUpOgorCQkvKiBjdXJyZW50bHkgb25seSB0ZW1wZXJhdHVyZSAqLworCQkqdmFsID0gMTk4OworCQkqdmFsMiA9IDE2MDAwMDsKKwkJcmV0dXJuIElJT19WQUxfSU5UX1BMVVNfTUlDUk87CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGlpb19jaGFuX3NwZWMgYWRpczE2NDAwX2NoYW5uZWxzW10gPSB7CisJSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCAic3VwcGx5IiwgMCwgMCwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0VQQVJBVEUpLAorCQkgaW5fc3VwcGx5LCBBRElTMTY0MDBfU0NBTl9TVVBQTFksCisJCSBJSU9fU1QoJ3UnLCAxNCwgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTihJSU9fR1lSTywgMSwgMCwgMCwgTlVMTCwgMCwgSUlPX01PRF9YLAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19DQUxJQkJJQVNfU0VQQVJBVEUpIHwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJIGd5cm9feCwgQURJUzE2NDAwX1NDQU5fR1lST19YLCBJSU9fU1QoJ3MnLCAxNCwgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTihJSU9fR1lSTywgMSwgMCwgMCwgTlVMTCwgMCwgSUlPX01PRF9ZLAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19DQUxJQkJJQVNfU0VQQVJBVEUpIHwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJIGd5cm9feSwgQURJUzE2NDAwX1NDQU5fR1lST19ZLCBJSU9fU1QoJ3MnLCAxNCwgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTihJSU9fR1lSTywgMSwgMCwgMCwgTlVMTCwgMCwgSUlPX01PRF9aLAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19DQUxJQkJJQVNfU0VQQVJBVEUpIHwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJIGd5cm9feiwgQURJUzE2NDAwX1NDQU5fR1lST19aLCBJSU9fU1QoJ3MnLCAxNCwgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTihJSU9fQUNDRUwsIDEsIDAsIDAsIE5VTEwsIDAsIElJT19NT0RfWCwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fQ0FMSUJCSUFTX1NFUEFSQVRFKSB8CisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCSBhY2NlbF94LCBBRElTMTY0MDBfU0NBTl9BQ0NfWCwgSUlPX1NUKCdzJywgMTQsIDE2LCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX0FDQ0VMLCAxLCAwLCAwLCBOVUxMLCAwLCBJSU9fTU9EX1ksCisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX0NBTElCQklBU19TRVBBUkFURSkgfAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkgYWNjZWxfeSwgQURJUzE2NDAwX1NDQU5fQUNDX1ksIElJT19TVCgncycsIDE0LCAxNiwgMCksIDApLAorCUlJT19DSEFOKElJT19BQ0NFTCwgMSwgMCwgMCwgTlVMTCwgMCwgSUlPX01PRF9aLAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19DQUxJQkJJQVNfU0VQQVJBVEUpIHwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJIGFjY2VsX3osIEFESVMxNjQwMF9TQ0FOX0FDQ19aLCBJSU9fU1QoJ3MnLCAxNCwgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTihJSU9fTUFHTiwgMSwgMCwgMCwgTlVMTCwgMCwgSUlPX01PRF9YLAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkgbWFnbl94LCBBRElTMTY0MDBfU0NBTl9NQUdOX1gsIElJT19TVCgncycsIDE0LCAxNiwgMCksIDApLAorCUlJT19DSEFOKElJT19NQUdOLCAxLCAwLCAwLCBOVUxMLCAwLCBJSU9fTU9EX1ksCisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCSBtYWduX3ksIEFESVMxNjQwMF9TQ0FOX01BR05fWSwgSUlPX1NUKCdzJywgMTQsIDE2LCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX01BR04sIDEsIDAsIDAsIE5VTEwsIDAsIElJT19NT0RfWiwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJIG1hZ25feiwgQURJUzE2NDAwX1NDQU5fTUFHTl9aLCBJSU9fU1QoJ3MnLCAxNCwgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTihJSU9fVEVNUCwgMCwgMSwgMCwgTlVMTCwgMCwgMCwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fT0ZGU0VUX1NFUEFSQVRFKSB8CisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NFUEFSQVRFKSwKKwkJIHRlbXAsIEFESVMxNjQwMF9TQ0FOX1RFTVAsIElJT19TVCgncycsIDEyLCAxNiwgMCksIDApLAorCUlJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgTlVMTCwgMSwgMCwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0VQQVJBVEUpLAorCQkgaW4xLCBBRElTMTY0MDBfU0NBTl9BRENfMCwgSUlPX1NUKCdzJywgMTIsIDE2LCAwKSwgMCksCisJSUlPX0NIQU5fU09GVF9USU1FU1RBTVAoMTIpCit9OworCitzdGF0aWMgc3RydWN0IGlpb19jaGFuX3NwZWMgYWRpczE2MzUwX2NoYW5uZWxzW10gPSB7CisJSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCAic3VwcGx5IiwgMCwgMCwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0VQQVJBVEUpLAorCQkgMCwgQURJUzE2NDAwX1NDQU5fU1VQUExZLCBJSU9fU1QoJ3UnLCAxMiwgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTihJSU9fR1lSTywgMSwgMCwgMCwgTlVMTCwgMCwgSUlPX01PRF9YLAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19DQUxJQkJJQVNfU0VQQVJBVEUpIHwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJIDEsIEFESVMxNjQwMF9TQ0FOX0dZUk9fWCwgSUlPX1NUKCdzJywgMTQsIDE2LCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX0dZUk8sIDEsIDAsIDAsIE5VTEwsIDAsIElJT19NT0RfWSwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fQ0FMSUJCSUFTX1NFUEFSQVRFKSB8CisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCSAyLCBBRElTMTY0MDBfU0NBTl9HWVJPX1ksIElJT19TVCgncycsIDE0LCAxNiwgMCksIDApLAorCUlJT19DSEFOKElJT19HWVJPLCAxLCAwLCAwLCBOVUxMLCAwLCBJSU9fTU9EX1osCisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX0NBTElCQklBU19TRVBBUkFURSkgfAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkgMywgQURJUzE2NDAwX1NDQU5fR1lST19aLCBJSU9fU1QoJ3MnLCAxNCwgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTihJSU9fQUNDRUwsIDEsIDAsIDAsIE5VTEwsIDAsIElJT19NT0RfWCwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fQ0FMSUJCSUFTX1NFUEFSQVRFKSB8CisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCSA0LCBBRElTMTY0MDBfU0NBTl9BQ0NfWCwgSUlPX1NUKCdzJywgMTQsIDE2LCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX0FDQ0VMLCAxLCAwLCAwLCBOVUxMLCAwLCBJSU9fTU9EX1ksCisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX0NBTElCQklBU19TRVBBUkFURSkgfAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkgMCwgQURJUzE2NDAwX1NDQU5fQUNDX1ksIElJT19TVCgncycsIDE0LCAxNiwgMCksIDApLAorCUlJT19DSEFOKElJT19BQ0NFTCwgMSwgMCwgMCwgTlVMTCwgMCwgSUlPX01PRF9aLAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19DQUxJQkJJQVNfU0VQQVJBVEUpIHwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJIDAsIEFESVMxNjQwMF9TQ0FOX0FDQ19aLCBJSU9fU1QoJ3MnLCAxNCwgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTihJSU9fVEVNUCwgMCwgMSwgMCwgIngiLCAwLCAwLAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19PRkZTRVRfU0VQQVJBVEUpIHwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0VQQVJBVEUpLAorCQkgMCwgQURJUzE2MzUwX1NDQU5fVEVNUF9YLCBJSU9fU1QoJ3MnLCAxMiwgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTihJSU9fVEVNUCwgMCwgMSwgMCwgInkiLCAxLCAwLAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19PRkZTRVRfU0VQQVJBVEUpIHwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0VQQVJBVEUpLAorCQkgMCwgQURJUzE2MzUwX1NDQU5fVEVNUF9ZLCBJSU9fU1QoJ3MnLCAxMiwgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTihJSU9fVEVNUCwgMCwgMSwgMCwgInoiLCAyLCAwLAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19PRkZTRVRfU0VQQVJBVEUpIHwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0VQQVJBVEUpLAorCQkgMCwgQURJUzE2MzUwX1NDQU5fVEVNUF9aLCBJSU9fU1QoJ3MnLCAxMiwgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsIE5VTEwsIDEsIDAsCisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NFUEFSQVRFKSwKKwkJIDAsIEFESVMxNjM1MF9TQ0FOX0FEQ18wLCBJSU9fU1QoJ3MnLCAxMiwgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTl9TT0ZUX1RJTUVTVEFNUCgxMSkKK307CisKK3N0YXRpYyBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBhZGlzMTYzMDBfY2hhbm5lbHNbXSA9IHsKKwlJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsICJzdXBwbHkiLCAwLCAwLAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TRVBBUkFURSksCisJCSAwLCBBRElTMTY0MDBfU0NBTl9TVVBQTFksIElJT19TVCgndScsIDEyLCAxNiwgMCksIDApLAorCUlJT19DSEFOKElJT19HWVJPLCAxLCAwLCAwLCBOVUxMLCAwLCBJSU9fTU9EX1gsCisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX0NBTElCQklBU19TRVBBUkFURSkgfAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkgMSwgQURJUzE2NDAwX1NDQU5fR1lST19YLCBJSU9fU1QoJ3MnLCAxNCwgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTihJSU9fQUNDRUwsIDEsIDAsIDAsIE5VTEwsIDAsIElJT19NT0RfWCwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fQ0FMSUJCSUFTX1NFUEFSQVRFKSB8CisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCSA0LCBBRElTMTY0MDBfU0NBTl9BQ0NfWCwgSUlPX1NUKCdzJywgMTQsIDE2LCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX0FDQ0VMLCAxLCAwLCAwLCBOVUxMLCAwLCBJSU9fTU9EX1ksCisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX0NBTElCQklBU19TRVBBUkFURSkgfAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkgMCwgQURJUzE2NDAwX1NDQU5fQUNDX1ksIElJT19TVCgncycsIDE0LCAxNiwgMCksIDApLAorCUlJT19DSEFOKElJT19BQ0NFTCwgMSwgMCwgMCwgTlVMTCwgMCwgSUlPX01PRF9aLAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19DQUxJQkJJQVNfU0VQQVJBVEUpIHwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJIDAsIEFESVMxNjQwMF9TQ0FOX0FDQ19aLCBJSU9fU1QoJ3MnLCAxNCwgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTihJSU9fVEVNUCwgMCwgMSwgMCwgTlVMTCwgMCwgMCwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fT0ZGU0VUX1NFUEFSQVRFKSB8CisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NFUEFSQVRFKSwKKwkJIDAsIEFESVMxNjQwMF9TQ0FOX1RFTVAsIElJT19TVCgncycsIDEyLCAxNiwgMCksIDApLAorCUlJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgTlVMTCwgMSwgMCwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0VQQVJBVEUpLAorCQkgMCwgQURJUzE2MzUwX1NDQU5fQURDXzAsIElJT19TVCgncycsIDEyLCAxNiwgMCksIDApLAorCUlJT19DSEFOKElJT19JTkNMSSwgMSwgMCwgMCwgTlVMTCwgMCwgSUlPX01PRF9YLAorCQkgKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQkgMCwgQURJUzE2MzAwX1NDQU5fSU5DTElfWCwgSUlPX1NUKCdzJywgMTMsIDE2LCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX0lOQ0xJLCAxLCAwLCAwLCBOVUxMLCAwLCBJSU9fTU9EX1ksCisJCSAoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCSAwLCBBRElTMTYzMDBfU0NBTl9JTkNMSV9ZLCBJSU9fU1QoJ3MnLCAxMywgMTYsIDApLCAwKSwKKwlJSU9fQ0hBTl9TT0ZUX1RJTUVTVEFNUCgxNCkKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZGlzMTY0MDBfYXR0cmlidXRlc1tdID0gewotCSZpaW9fZGV2X2F0dHJfZ3lyb194X2NhbGliYmlhcy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfZ3lyb195X2NhbGliYmlhcy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfZ3lyb196X2NhbGliYmlhcy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfYWNjZWxfeF9jYWxpYmJpYXMuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2FjY2VsX3lfY2FsaWJiaWFzLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9hY2NlbF96X2NhbGliYmlhcy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW4wX3N1cHBseV9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4wX3N1cHBseV9zY2FsZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfZ3lyb194X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfZ3lyb195X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfZ3lyb196X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9neXJvX3NjYWxlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9hY2NlbF94X3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfYWNjZWxfeV9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2FjY2VsX3pfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2FjY2VsX3NjYWxlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9tYWduX3hfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9tYWduX3lfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9tYWduX3pfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX21hZ25fc2NhbGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX3RlbXBfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX3RlbXBfb2Zmc2V0LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX3RlbXBfc2NhbGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2luMV9yYXcuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4xX3NjYWxlLmRldl9hdHRyLmF0dHIsCiAJJmlpb19kZXZfYXR0cl9zYW1wbGluZ19mcmVxdWVuY3kuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2NvbnN0X2F0dHJfc2FtcGxpbmdfZnJlcXVlbmN5X2F2YWlsYWJsZS5kZXZfYXR0ci5hdHRyLAogCSZpaW9fZGV2X2F0dHJfcmVzZXQuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfbmFtZS5kZXZfYXR0ci5hdHRyLAogCU5VTEwKIH07CiAKQEAgLTU5NywxMDEgKzcwMiwxNDcgQEAKIAkuYXR0cnMgPSBhZGlzMTY0MDBfYXR0cmlidXRlcywKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgYWRpczE2NDAwX2NoaXBfaW5mbyBhZGlzMTY0MDBfY2hpcHNbXSA9IHsKKwlbQURJUzE2MzAwXSA9IHsKKwkJLmNoYW5uZWxzID0gYWRpczE2MzAwX2NoYW5uZWxzLAorCQkubnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShhZGlzMTYzMDBfY2hhbm5lbHMpLAorCQkuZ3lyb19zY2FsZV9taWNybyA9IDg3MywKKwkJLmFjY2VsX3NjYWxlX21pY3JvID0gNTg4NCwKKwkJLmRlZmF1bHRfc2Nhbl9tYXNrID0gKDEgPDwgQURJUzE2NDAwX1NDQU5fU1VQUExZKSB8CisJCSgxIDw8IEFESVMxNjQwMF9TQ0FOX0dZUk9fWCkgfCAoMSA8PCBBRElTMTY0MDBfU0NBTl9BQ0NfWCkgfAorCQkoMSA8PCBBRElTMTY0MDBfU0NBTl9BQ0NfWSkgfCAoMSA8PCBBRElTMTY0MDBfU0NBTl9BQ0NfWikgfAorCQkoMSA8PCBBRElTMTY0MDBfU0NBTl9URU1QKSB8ICgxIDw8IEFESVMxNjQwMF9TQ0FOX0FEQ18wKSB8CisJCSgxIDw8IEFESVMxNjMwMF9TQ0FOX0lOQ0xJX1gpIHwgKDEgPDwgQURJUzE2MzAwX1NDQU5fSU5DTElfWSkgfAorCQkoMSA8PCAxNCksCisJfSwKKwlbQURJUzE2MzUwXSA9IHsKKwkJLmNoYW5uZWxzID0gYWRpczE2MzUwX2NoYW5uZWxzLAorCQkubnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShhZGlzMTYzNTBfY2hhbm5lbHMpLAorCQkuZ3lyb19zY2FsZV9taWNybyA9IDg3MjY2NCwKKwkJLmFjY2VsX3NjYWxlX21pY3JvID0gMjQ3MzIsCisJCS5kZWZhdWx0X3NjYW5fbWFzayA9IDB4N0ZGLAorCQkuZmxhZ3MgPSBBRElTMTY0MDBfTk9fQlVSU1QsCisJfSwKKwlbQURJUzE2MzYwXSA9IHsKKwkJLmNoYW5uZWxzID0gYWRpczE2MzUwX2NoYW5uZWxzLAorCQkubnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShhZGlzMTYzNTBfY2hhbm5lbHMpLAorCQkuZmxhZ3MgPSBBRElTMTY0MDBfSEFTX1BST0RfSUQsCisJCS5wcm9kdWN0X2lkID0gMHgzRkU4LAorCQkuZ3lyb19zY2FsZV9taWNybyA9IDEyNzksCisJCS5hY2NlbF9zY2FsZV9taWNybyA9IDI0NzMyLAorCQkuZGVmYXVsdF9zY2FuX21hc2sgPSAweDdGRiwKKwl9LAorCVtBRElTMTYzNjJdID0geworCQkuY2hhbm5lbHMgPSBhZGlzMTYzNTBfY2hhbm5lbHMsCisJCS5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKGFkaXMxNjM1MF9jaGFubmVscyksCisJCS5mbGFncyA9IEFESVMxNjQwMF9IQVNfUFJPRF9JRCwKKwkJLnByb2R1Y3RfaWQgPSAweDNGRUEsCisJCS5neXJvX3NjYWxlX21pY3JvID0gMTI3OSwKKwkJLmFjY2VsX3NjYWxlX21pY3JvID0gMjQ3MzIsCisJCS5kZWZhdWx0X3NjYW5fbWFzayA9IDB4N0ZGLAorCX0sCisJW0FESVMxNjM2NF0gPSB7CisJCS5jaGFubmVscyA9IGFkaXMxNjM1MF9jaGFubmVscywKKwkJLm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUoYWRpczE2MzUwX2NoYW5uZWxzKSwKKwkJLmZsYWdzID0gQURJUzE2NDAwX0hBU19QUk9EX0lELAorCQkucHJvZHVjdF9pZCA9IDB4M0ZFQywKKwkJLmd5cm9fc2NhbGVfbWljcm8gPSAxMjc5LAorCQkuYWNjZWxfc2NhbGVfbWljcm8gPSAyNDczMiwKKwkJLmRlZmF1bHRfc2Nhbl9tYXNrID0gMHg3RkYsCisJfSwKKwlbQURJUzE2MzY1XSA9IHsKKwkJLmNoYW5uZWxzID0gYWRpczE2MzUwX2NoYW5uZWxzLAorCQkubnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShhZGlzMTYzNTBfY2hhbm5lbHMpLAorCQkuZmxhZ3MgPSBBRElTMTY0MDBfSEFTX1BST0RfSUQsCisJCS5wcm9kdWN0X2lkID0gMHgzRkVELAorCQkuZ3lyb19zY2FsZV9taWNybyA9IDEyNzksCisJCS5hY2NlbF9zY2FsZV9taWNybyA9IDI0NzMyLAorCQkuZGVmYXVsdF9zY2FuX21hc2sgPSAweDdGRiwKKwl9LAorCVtBRElTMTY0MDBdID0geworCQkuY2hhbm5lbHMgPSBhZGlzMTY0MDBfY2hhbm5lbHMsCisJCS5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKGFkaXMxNjQwMF9jaGFubmVscyksCisJCS5mbGFncyA9IEFESVMxNjQwMF9IQVNfUFJPRF9JRCwKKwkJLnByb2R1Y3RfaWQgPSAweDQwMTUsCisJCS5neXJvX3NjYWxlX21pY3JvID0gODczLAorCQkuYWNjZWxfc2NhbGVfbWljcm8gPSAzMjY1NiwKKwkJLmRlZmF1bHRfc2Nhbl9tYXNrID0gMHhGRkYsCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9faW5mbyBhZGlzMTY0MDBfaW5mbyA9IHsKKwkuZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFLAorCS5yZWFkX3JhdyA9ICZhZGlzMTY0MDBfcmVhZF9yYXcsCisJLndyaXRlX3JhdyA9ICZhZGlzMTY0MDBfd3JpdGVfcmF3LAorCS5hdHRycyA9ICZhZGlzMTY0MDBfYXR0cmlidXRlX2dyb3VwLAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgYWRpczE2NDAwX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CiAJaW50IHJldCwgcmVnZG9uZSA9IDA7Ci0Jc3RydWN0IGFkaXMxNjQwMF9zdGF0ZSAqc3QgPSBremFsbG9jKHNpemVvZiAqc3QsIEdGUF9LRVJORUwpOwotCWlmICghc3QpIHsKKwlzdHJ1Y3QgYWRpczE2NDAwX3N0YXRlICpzdDsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZShzaXplb2YoKnN0KSk7CisJaWYgKGluZGlvX2RldiA9PSBOVUxMKSB7CiAJCXJldCA9ICAtRU5PTUVNOwogCQlnb3RvIGVycm9yX3JldDsKIAl9CisJc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwogCS8qIHRoaXMgaXMgb25seSB1c2VkIGZvciByZW1vdmFsIHB1cnBvc2VzICovCi0Jc3BpX3NldF9kcnZkYXRhKHNwaSwgc3QpOworCXNwaV9zZXRfZHJ2ZGF0YShzcGksIGluZGlvX2Rldik7CiAKLQkvKiBBbGxvY2F0ZSB0aGUgY29tbXMgYnVmZmVycyAqLwotCXN0LT5yeCA9IGt6YWxsb2Moc2l6ZW9mKCpzdC0+cngpKkFESVMxNjQwMF9NQVhfUlgsIEdGUF9LRVJORUwpOwotCWlmIChzdC0+cnggPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yX2ZyZWVfc3Q7Ci0JfQotCXN0LT50eCA9IGt6YWxsb2Moc2l6ZW9mKCpzdC0+dHgpKkFESVMxNjQwMF9NQVhfVFgsIEdGUF9LRVJORUwpOwotCWlmIChzdC0+dHggPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yX2ZyZWVfcng7Ci0JfQogCXN0LT51cyA9IHNwaTsKIAltdXRleF9pbml0KCZzdC0+YnVmX2xvY2spOworCiAJLyogc2V0dXAgdGhlIGluZHVzdHJpYWxpbyBkcml2ZXIgYWxsb2NhdGVkIGVsZW1lbnRzICovCi0Jc3QtPmluZGlvX2RldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2UoKTsKLQlpZiAoc3QtPmluZGlvX2RldiA9PSBOVUxMKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyb3JfZnJlZV90eDsKLQl9CisJc3QtPnZhcmlhbnQgPSAmYWRpczE2NDAwX2NoaXBzW3NwaV9nZXRfZGV2aWNlX2lkKHNwaSktPmRyaXZlcl9kYXRhXTsKKwlpbmRpb19kZXYtPmRldi5wYXJlbnQgPSAmc3BpLT5kZXY7CisJaW5kaW9fZGV2LT5uYW1lID0gc3BpX2dldF9kZXZpY2VfaWQoc3BpKS0+bmFtZTsKKwlpbmRpb19kZXYtPmNoYW5uZWxzID0gc3QtPnZhcmlhbnQtPmNoYW5uZWxzOworCWluZGlvX2Rldi0+bnVtX2NoYW5uZWxzID0gc3QtPnZhcmlhbnQtPm51bV9jaGFubmVsczsKKwlpbmRpb19kZXYtPmluZm8gPSAmYWRpczE2NDAwX2luZm87CisJaW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOwogCi0Jc3QtPmluZGlvX2Rldi0+ZGV2LnBhcmVudCA9ICZzcGktPmRldjsKLQlzdC0+aW5kaW9fZGV2LT5udW1faW50ZXJydXB0X2xpbmVzID0gMTsKLQlzdC0+aW5kaW9fZGV2LT5ldmVudF9hdHRycyA9ICZhZGlzMTY0MDBfZXZlbnRfYXR0cmlidXRlX2dyb3VwOwotCXN0LT5pbmRpb19kZXYtPmF0dHJzID0gJmFkaXMxNjQwMF9hdHRyaWJ1dGVfZ3JvdXA7Ci0Jc3QtPmluZGlvX2Rldi0+ZGV2X2RhdGEgPSAodm9pZCAqKShzdCk7Ci0Jc3QtPmluZGlvX2Rldi0+ZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFOwotCXN0LT5pbmRpb19kZXYtPm1vZGVzID0gSU5ESU9fRElSRUNUX01PREU7Ci0KLQlyZXQgPSBhZGlzMTY0MDBfY29uZmlndXJlX3Jpbmcoc3QtPmluZGlvX2Rldik7CisJcmV0ID0gYWRpczE2NDAwX2NvbmZpZ3VyZV9yaW5nKGluZGlvX2Rldik7CiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl9mcmVlX2RldjsKIAotCXJldCA9IGlpb19kZXZpY2VfcmVnaXN0ZXIoc3QtPmluZGlvX2Rldik7CisJcmV0ID0gaWlvX2RldmljZV9yZWdpc3RlcihpbmRpb19kZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfdW5yZWdfcmluZ19mdW5jczsKIAlyZWdkb25lID0gMTsKIAotCXJldCA9IGlpb19yaW5nX2J1ZmZlcl9yZWdpc3RlcihzdC0+aW5kaW9fZGV2LT5yaW5nLCAwKTsKKwlyZXQgPSBpaW9fcmluZ19idWZmZXJfcmVnaXN0ZXJfZXgoaW5kaW9fZGV2LT5yaW5nLCAwLAorCQkJCQkgIHN0LT52YXJpYW50LT5jaGFubmVscywKKwkJCQkJICBzdC0+dmFyaWFudC0+bnVtX2NoYW5uZWxzKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJnNwaS0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgdGhlIHJpbmdcbiIpOwogCQlnb3RvIGVycm9yX3VucmVnX3JpbmdfZnVuY3M7CiAJfQogCiAJaWYgKHNwaS0+aXJxICYmIGdwaW9faXNfdmFsaWQoaXJxX3RvX2dwaW8oc3BpLT5pcnEpKSA+IDApIHsKLQkJcmV0ID0gaWlvX3JlZ2lzdGVyX2ludGVycnVwdF9saW5lKHNwaS0+aXJxLAotCQkJCXN0LT5pbmRpb19kZXYsCi0JCQkJMCwKLQkJCQlJUlFGX1RSSUdHRVJfUklTSU5HLAotCQkJCSJhZGlzMTY0MDAiKTsKKwkJcmV0ID0gYWRpczE2NDAwX3Byb2JlX3RyaWdnZXIoaW5kaW9fZGV2KTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyb3JfdW5pbml0aWFsaXplX3Jpbmc7Ci0KLQkJcmV0ID0gYWRpczE2NDAwX3Byb2JlX3RyaWdnZXIoc3QtPmluZGlvX2Rldik7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIGVycm9yX3VucmVnaXN0ZXJfbGluZTsKIAl9CiAKIAkvKiBHZXQgdGhlIGRldmljZSBpbnRvIGEgc2FuZSBpbml0aWFsIHN0YXRlICovCi0JcmV0ID0gYWRpczE2NDAwX2luaXRpYWxfc2V0dXAoc3QpOworCXJldCA9IGFkaXMxNjQwMF9pbml0aWFsX3NldHVwKGluZGlvX2Rldik7CiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl9yZW1vdmVfdHJpZ2dlcjsKIAlyZXR1cm4gMDsKIAogZXJyb3JfcmVtb3ZlX3RyaWdnZXI6Ci0JaWYgKHN0LT5pbmRpb19kZXYtPm1vZGVzICYgSU5ESU9fUklOR19UUklHR0VSRUQpCi0JCWFkaXMxNjQwMF9yZW1vdmVfdHJpZ2dlcihzdC0+aW5kaW9fZGV2KTsKLWVycm9yX3VucmVnaXN0ZXJfbGluZToKLQlpZiAoc3QtPmluZGlvX2Rldi0+bW9kZXMgJiBJTkRJT19SSU5HX1RSSUdHRVJFRCkKLQkJaWlvX3VucmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoc3QtPmluZGlvX2RldiwgMCk7CisJaWYgKGluZGlvX2Rldi0+bW9kZXMgJiBJTkRJT19SSU5HX1RSSUdHRVJFRCkKKwkJYWRpczE2NDAwX3JlbW92ZV90cmlnZ2VyKGluZGlvX2Rldik7CiBlcnJvcl91bmluaXRpYWxpemVfcmluZzoKLQlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihzdC0+aW5kaW9fZGV2LT5yaW5nKTsKKwlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihpbmRpb19kZXYtPnJpbmcpOwogZXJyb3JfdW5yZWdfcmluZ19mdW5jczoKLQlhZGlzMTY0MDBfdW5jb25maWd1cmVfcmluZyhzdC0+aW5kaW9fZGV2KTsKKwlhZGlzMTY0MDBfdW5jb25maWd1cmVfcmluZyhpbmRpb19kZXYpOwogZXJyb3JfZnJlZV9kZXY6CiAJaWYgKHJlZ2RvbmUpCi0JCWlpb19kZXZpY2VfdW5yZWdpc3RlcihzdC0+aW5kaW9fZGV2KTsKKwkJaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CiAJZWxzZQotCQlpaW9fZnJlZV9kZXZpY2Uoc3QtPmluZGlvX2Rldik7Ci1lcnJvcl9mcmVlX3R4OgotCWtmcmVlKHN0LT50eCk7Ci1lcnJvcl9mcmVlX3J4OgotCWtmcmVlKHN0LT5yeCk7Ci1lcnJvcl9mcmVlX3N0OgotCWtmcmVlKHN0KTsKKwkJaWlvX2ZyZWVfZGV2aWNlKGluZGlvX2Rldik7CiBlcnJvcl9yZXQ6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTcwMCwyNSArODUxLDE2IEBACiBzdGF0aWMgaW50IGFkaXMxNjQwMF9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlpbnQgcmV0OwotCXN0cnVjdCBhZGlzMTY0MDBfc3RhdGUgKnN0ID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHN0LT5pbmRpb19kZXY7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9ICBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKIAotCXJldCA9IGFkaXMxNjQwMF9zdG9wX2RldmljZSgmKGluZGlvX2Rldi0+ZGV2KSk7CisJcmV0ID0gYWRpczE2NDAwX3N0b3BfZGV2aWNlKGluZGlvX2Rldik7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfcmV0OwogCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQogCWFkaXMxNjQwMF9yZW1vdmVfdHJpZ2dlcihpbmRpb19kZXYpOwotCWlmIChzcGktPmlycSAmJiBncGlvX2lzX3ZhbGlkKGlycV90b19ncGlvKHNwaS0+aXJxKSkgPiAwKQotCQlpaW9fdW5yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShpbmRpb19kZXYsIDApOwotCi0JaWlvX3JpbmdfYnVmZmVyX3VucmVnaXN0ZXIoc3QtPmluZGlvX2Rldi0+cmluZyk7CisJaWlvX3JpbmdfYnVmZmVyX3VucmVnaXN0ZXIoaW5kaW9fZGV2LT5yaW5nKTsKIAlhZGlzMTY0MDBfdW5jb25maWd1cmVfcmluZyhpbmRpb19kZXYpOwogCWlpb19kZXZpY2VfdW5yZWdpc3RlcihpbmRpb19kZXYpOwotCWtmcmVlKHN0LT50eCk7Ci0Ja2ZyZWUoc3QtPnJ4KTsKLQlrZnJlZShzdCk7CiAKIAlyZXR1cm4gMDsKIApAQCAtNzI2LDExICs4NjgsMjYgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9kZXZpY2VfaWQgYWRpczE2NDAwX2lkW10gPSB7CisJeyJhZGlzMTYzMDAiLCBBRElTMTYzMDB9LAorCXsiYWRpczE2MzUwIiwgQURJUzE2MzUwfSwKKwl7ImFkaXMxNjM1NCIsIEFESVMxNjM1MH0sCisJeyJhZGlzMTYzNTUiLCBBRElTMTYzNTB9LAorCXsiYWRpczE2MzYwIiwgQURJUzE2MzYwfSwKKwl7ImFkaXMxNjM2MiIsIEFESVMxNjM2Mn0sCisJeyJhZGlzMTYzNjQiLCBBRElTMTYzNjR9LAorCXsiYWRpczE2MzY1IiwgQURJUzE2MzY1fSwKKwl7ImFkaXMxNjQwMCIsIEFESVMxNjQwMH0sCisJeyJhZGlzMTY0MDUiLCBBRElTMTY0MDB9LAorCXt9Cit9OworCiBzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgYWRpczE2NDAwX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewogCQkubmFtZSA9ICJhZGlzMTY0MDAiLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAorCS5pZF90YWJsZSA9IGFkaXMxNjQwMF9pZCwKIAkucHJvYmUgPSBhZGlzMTY0MDBfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGFkaXMxNjQwMF9yZW1vdmUpLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjQwMF9yaW5nLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTY0MDBfcmluZy5jCmluZGV4IGRhMjhjYjQuLjI1ODlhN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjQwMF9yaW5nLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2NDAwX3JpbmcuYwpAQCAtOSw2ICs5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKICNpbmNsdWRlICIuLi9paW8uaCIKICNpbmNsdWRlICIuLi9zeXNmcy5oIgpAQCAtMTcsOTMgKzE4LDYgQEAKICNpbmNsdWRlICIuLi90cmlnZ2VyLmgiCiAjaW5jbHVkZSAiYWRpczE2NDAwLmgiCiAKLXN0YXRpYyBJSU9fU0NBTl9FTF9DKGluMF9zdXBwbHksIEFESVMxNjQwMF9TQ0FOX1NVUFBMWSwKLQkJICAgICBBRElTMTY0MDBfU1VQUExZX09VVCwgTlVMTCk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfU0NBTl9FTF9UWVBFKGluMF9zdXBwbHksIHUsIDE0LCAxNik7Ci0KLXN0YXRpYyBJSU9fU0NBTl9FTF9DKGd5cm9feCwgQURJUzE2NDAwX1NDQU5fR1lST19YLCBBRElTMTY0MDBfWEdZUk9fT1VULCBOVUxMKTsKLXN0YXRpYyBJSU9fU0NBTl9FTF9DKGd5cm9feSwgQURJUzE2NDAwX1NDQU5fR1lST19ZLCBBRElTMTY0MDBfWUdZUk9fT1VULCBOVUxMKTsKLXN0YXRpYyBJSU9fU0NBTl9FTF9DKGd5cm9feiwgQURJUzE2NDAwX1NDQU5fR1lST19aLCBBRElTMTY0MDBfWkdZUk9fT1VULCBOVUxMKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUl9TQ0FOX0VMX1RZUEUoZ3lybywgcywgMTQsIDE2KTsKLQotc3RhdGljIElJT19TQ0FOX0VMX0MoYWNjZWxfeCwgQURJUzE2NDAwX1NDQU5fQUNDX1gsIEFESVMxNjQwMF9YQUNDTF9PVVQsIE5VTEwpOwotc3RhdGljIElJT19TQ0FOX0VMX0MoYWNjZWxfeSwgQURJUzE2NDAwX1NDQU5fQUNDX1ksIEFESVMxNjQwMF9ZQUNDTF9PVVQsIE5VTEwpOwotc3RhdGljIElJT19TQ0FOX0VMX0MoYWNjZWxfeiwgQURJUzE2NDAwX1NDQU5fQUNDX1osIEFESVMxNjQwMF9aQUNDTF9PVVQsIE5VTEwpOwotc3RhdGljIElJT19DT05TVF9BVFRSX1NDQU5fRUxfVFlQRShhY2NlbCwgcywgMTQsIDE2KTsKLQotc3RhdGljIElJT19TQ0FOX0VMX0MobWFnbl94LCBBRElTMTY0MDBfU0NBTl9NQUdOX1gsIEFESVMxNjQwMF9YTUFHTl9PVVQsIE5VTEwpOwotc3RhdGljIElJT19TQ0FOX0VMX0MobWFnbl95LCBBRElTMTY0MDBfU0NBTl9NQUdOX1ksIEFESVMxNjQwMF9ZTUFHTl9PVVQsIE5VTEwpOwotc3RhdGljIElJT19TQ0FOX0VMX0MobWFnbl96LCBBRElTMTY0MDBfU0NBTl9NQUdOX1osIEFESVMxNjQwMF9aTUFHTl9PVVQsIE5VTEwpOwotc3RhdGljIElJT19DT05TVF9BVFRSX1NDQU5fRUxfVFlQRShtYWduLCBzLCAxNCwgMTYpOwotCi1zdGF0aWMgSUlPX1NDQU5fRUxfQyh0ZW1wLCBBRElTMTY0MDBfU0NBTl9URU1QLCBBRElTMTY0MDBfVEVNUF9PVVQsIE5VTEwpOwotc3RhdGljIElJT19DT05TVF9BVFRSX1NDQU5fRUxfVFlQRSh0ZW1wLCBzLCAxMiwgMTYpOwotCi1zdGF0aWMgSUlPX1NDQU5fRUxfQyhpbjEsIEFESVMxNjQwMF9TQ0FOX0FEQ18wLCBBRElTMTY0MDBfQVVYX0FEQywgTlVMTCk7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfU0NBTl9FTF9UWVBFKGluMSwgdSwgMTIsIDE2KTsKLQotc3RhdGljIElJT19TQ0FOX0VMX1RJTUVTVEFNUCgxMik7Ci1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfU0NBTl9FTF9UWVBFKHRpbWVzdGFtcCwgcywgNjQsIDY0KTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkaXMxNjQwMF9zY2FuX2VsX2F0dHJzW10gPSB7Ci0JJmlpb19zY2FuX2VsX2luMF9zdXBwbHkuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfaW4wX3N1cHBseV9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjBfc3VwcGx5X3R5cGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfZ3lyb194LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2d5cm9feF9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9neXJvX3kuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfZ3lyb195X2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2d5cm9fei5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9neXJvX3pfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfZ3lyb190eXBlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX2FjY2VsX3guZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfYWNjZWxfeF9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9hY2NlbF95LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2FjY2VsX3lfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfYWNjZWxfei5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9hY2NlbF96X2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2FjY2VsX3R5cGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfbWFnbl94LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX21hZ25feF9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF9tYWduX3kuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfbWFnbl95X2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX21hZ25fei5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9tYWduX3pfaW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfbWFnbl90eXBlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19zY2FuX2VsX3RlbXAuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfdGVtcF9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl90ZW1wX3R5cGUuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX3NjYW5fZWxfaW4xLmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX2luMV9pbmRleC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9pbjFfdHlwZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF90aW1lc3RhbXAuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfdGltZXN0YW1wX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX3RpbWVzdGFtcF90eXBlLmRldl9hdHRyLmF0dHIsCi0JTlVMTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFkaXMxNjQwMF9zY2FuX2VsX2dyb3VwID0gewotCS5hdHRycyA9IGFkaXMxNjQwMF9zY2FuX2VsX2F0dHJzLAotCS5uYW1lID0gInNjYW5fZWxlbWVudHMiLAotfTsKLQotLyoqCi0gKiBhZGlzMTY0MDBfcG9sbF9mdW5jX3RoKCkgdG9wIGhhbGYgaW50ZXJydXB0IGhhbmRsZXIgY2FsbGVkIGJ5IHRyaWdnZXIKLSAqIEBwcml2YXRlX2RhdGE6CWlpb19kZXYKLSAqKi8KLXN0YXRpYyB2b2lkIGFkaXMxNjQwMF9wb2xsX2Z1bmNfdGgoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwgczY0IHRpbWUpCi17Ci0Jc3RydWN0IGFkaXMxNjQwMF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7Ci0Jc3QtPmxhc3RfdGltZXN0YW1wID0gdGltZTsKLQlzY2hlZHVsZV93b3JrKCZzdC0+d29ya190cmlnZ2VyX3RvX3JpbmcpOwotCS8qIEluZGljYXRlIHRoYXQgdGhpcyBpbnRlcnJ1cHQgaXMgYmVpbmcgaGFuZGxlZCAqLwotCi0JLyogVGVjaG5pY2FsbHkgdGhpcyBpcyB0cmlnZ2VyIHJlbGF0ZWQsIGJ1dCB3aXRob3V0IHRoaXMKLQkgKiBoYW5kbGVyIHJ1bm5pbmcgdGhlcmUgaXMgY3VycmVudGx5IG5vIHdheSBmb3IgdGhlIGludGVycnVwdAotCSAqIHRvIGNsZWFyLgotCSAqLwotfQotCiAvKioKICAqIGFkaXMxNjQwMF9zcGlfcmVhZF9idXJzdCgpIC0gcmVhZCBhbGwgZGF0YSByZWdpc3RlcnMKICAqIEBkZXY6IGRldmljZSBhc3NvY2lhdGVkIHdpdGggY2hpbGQgb2YgYWN0dWFsIGRldmljZSAoaWlvX2RldiBvciBpaW9fdHJpZykKQEAgLTExMyw3ICsyNyw3IEBACiB7CiAJc3RydWN0IHNwaV9tZXNzYWdlIG1zZzsKIAlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGFkaXMxNjQwMF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CisJc3RydWN0IGFkaXMxNjQwMF9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwogCXUzMiBvbGRfc3BlZWRfaHogPSBzdC0+dXMtPm1heF9zcGVlZF9oejsKIAlpbnQgcmV0OwogCkBAIC0xNTAsNjIgKzY0LDEyMiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBjb25zdCB1MTYgcmVhZF9hbGxfdHhfYXJyYXlbXSA9IHsKKwljcHVfdG9fYmUxNihBRElTMTY0MDBfUkVBRF9SRUcoQURJUzE2NDAwX1NVUFBMWV9PVVQpKSwKKwljcHVfdG9fYmUxNihBRElTMTY0MDBfUkVBRF9SRUcoQURJUzE2NDAwX1hHWVJPX09VVCkpLAorCWNwdV90b19iZTE2KEFESVMxNjQwMF9SRUFEX1JFRyhBRElTMTY0MDBfWUdZUk9fT1VUKSksCisJY3B1X3RvX2JlMTYoQURJUzE2NDAwX1JFQURfUkVHKEFESVMxNjQwMF9aR1lST19PVVQpKSwKKwljcHVfdG9fYmUxNihBRElTMTY0MDBfUkVBRF9SRUcoQURJUzE2NDAwX1hBQ0NMX09VVCkpLAorCWNwdV90b19iZTE2KEFESVMxNjQwMF9SRUFEX1JFRyhBRElTMTY0MDBfWUFDQ0xfT1VUKSksCisJY3B1X3RvX2JlMTYoQURJUzE2NDAwX1JFQURfUkVHKEFESVMxNjQwMF9aQUNDTF9PVVQpKSwKKwljcHVfdG9fYmUxNihBRElTMTY0MDBfUkVBRF9SRUcoQURJUzE2MzUwX1hURU1QX09VVCkpLAorCWNwdV90b19iZTE2KEFESVMxNjQwMF9SRUFEX1JFRyhBRElTMTYzNTBfWVRFTVBfT1VUKSksCisJY3B1X3RvX2JlMTYoQURJUzE2NDAwX1JFQURfUkVHKEFESVMxNjM1MF9aVEVNUF9PVVQpKSwKKwljcHVfdG9fYmUxNihBRElTMTY0MDBfUkVBRF9SRUcoQURJUzE2NDAwX0FVWF9BREMpKSwKK307CisKK3N0YXRpYyBpbnQgYWRpczE2MzUwX3NwaV9yZWFkX2FsbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU4ICpyeCkKK3sKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGFkaXMxNjQwMF9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOworCisJc3RydWN0IHNwaV9tZXNzYWdlIG1zZzsKKwlpbnQgaSwgaiA9IDAsIHJldDsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp4ZmVyczsKKworCXhmZXJzID0ga3phbGxvYyhzaXplb2YoKnhmZXJzKSppbmRpb19kZXYtPnJpbmctPnNjYW5fY291bnQgKyAxLAorCQkJR0ZQX0tFUk5FTCk7CisJaWYgKHhmZXJzID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVhZF9hbGxfdHhfYXJyYXkpOyBpKyspCisJCWlmIChpbmRpb19kZXYtPnJpbmctPnNjYW5fbWFzayAmICgxIDw8IGkpKSB7CisJCQl4ZmVyc1tqXS50eF9idWYgPSAmcmVhZF9hbGxfdHhfYXJyYXlbaV07CisJCQl4ZmVyc1tqXS5iaXRzX3Blcl93b3JkID0gMTY7CisJCQl4ZmVyc1tqXS5sZW4gPSAyOworCQkJeGZlcnNbaiArIDFdLnJ4X2J1ZiA9IHJ4ICsgaioyOworCQkJaisrOworCQl9CisJeGZlcnNbal0uYml0c19wZXJfd29yZCA9IDE2OworCXhmZXJzW2pdLmxlbiA9IDI7CisKKwlzcGlfbWVzc2FnZV9pbml0KCZtc2cpOworCWZvciAoaiA9IDA7IGogPCBpbmRpb19kZXYtPnJpbmctPnNjYW5fY291bnQgKyAxOyBqKyspCisJCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ4ZmVyc1tqXSwgJm1zZyk7CisKKwlyZXQgPSBzcGlfc3luYyhzdC0+dXMsICZtc2cpOworCWtmcmVlKHhmZXJzKTsKKworCXJldHVybiByZXQ7Cit9CisKIC8qIFdoaWxzdCB0aGlzIG1ha2VzIGEgbG90IG9mIGNhbGxzIHRvIGlpb19zd19yaW5nIGZ1bmN0aW9ucyAtIGl0IGlzIHRvIGRldmljZQogICogc3BlY2lmaWMgdG8gYmUgcm9sbGVkIGludG8gdGhlIGNvcmUuCiAgKi8KLXN0YXRpYyB2b2lkIGFkaXMxNjQwMF90cmlnZ2VyX2JoX3RvX3Jpbmcoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrX3MpCitzdGF0aWMgaXJxcmV0dXJuX3QgYWRpczE2NDAwX3RyaWdnZXJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpwKQogewotCXN0cnVjdCBhZGlzMTY0MDBfc3RhdGUgKnN0Ci0JCT0gY29udGFpbmVyX29mKHdvcmtfcywgc3RydWN0IGFkaXMxNjQwMF9zdGF0ZSwKLQkJCSAgICAgICB3b3JrX3RyaWdnZXJfdG9fcmluZyk7Ci0Jc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyA9IHN0LT5pbmRpb19kZXYtPnJpbmc7Ci0KLQlpbnQgaSA9IDAsIGo7CisJc3RydWN0IGlpb19wb2xsX2Z1bmMgKnBmID0gcDsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gcGYtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYWRpczE2NDAwX3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CisJc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyA9IGluZGlvX2Rldi0+cmluZzsKKwlpbnQgaSA9IDAsIGosIHJldCA9IDA7CiAJczE2ICpkYXRhOwotCXNpemVfdCBkYXRhc2l6ZSA9IHJpbmctPmFjY2Vzcy5nZXRfYnl0ZXNfcGVyX2RhdHVtKHJpbmcpOworCXNpemVfdCBkYXRhc2l6ZSA9IHJpbmctPmFjY2Vzcy0+Z2V0X2J5dGVzX3Blcl9kYXR1bShyaW5nKTsKIAl1bnNpZ25lZCBsb25nIG1hc2sgPSByaW5nLT5zY2FuX21hc2s7CiAKIAlkYXRhID0ga21hbGxvYyhkYXRhc2l6ZSAsIEdGUF9LRVJORUwpOwogCWlmIChkYXRhID09IE5VTEwpIHsKIAkJZGV2X2Vycigmc3QtPnVzLT5kZXYsICJtZW1vcnkgYWxsb2MgZmFpbGVkIGluIHJpbmcgYmgiKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlpZiAocmluZy0+c2Nhbl9jb3VudCkKLQkJaWYgKGFkaXMxNjQwMF9zcGlfcmVhZF9idXJzdCgmc3QtPmluZGlvX2Rldi0+ZGV2LCBzdC0+cngpID49IDApCi0JCQlmb3IgKDsgaSA8IHJpbmctPnNjYW5fY291bnQ7IGkrKykgeworCWlmIChyaW5nLT5zY2FuX2NvdW50KSB7CisJCWlmIChzdC0+dmFyaWFudC0+ZmxhZ3MgJiBBRElTMTY0MDBfTk9fQlVSU1QpIHsKKwkJCXJldCA9IGFkaXMxNjM1MF9zcGlfcmVhZF9hbGwoJmluZGlvX2Rldi0+ZGV2LCBzdC0+cngpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJCWZvciAoOyBpIDwgcmluZy0+c2Nhbl9jb3VudDsgaSsrKQorCQkJCWRhdGFbaV0JPSAqKHMxNiAqKShzdC0+cnggKyBpKjIpOworCQl9IGVsc2UgeworCQkJcmV0ID0gYWRpczE2NDAwX3NwaV9yZWFkX2J1cnN0KCZpbmRpb19kZXYtPmRldiwgc3QtPnJ4KTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCQlmb3IgKDsgaSA8IGluZGlvX2Rldi0+cmluZy0+c2Nhbl9jb3VudDsgaSsrKSB7CiAJCQkJaiA9IF9fZmZzKG1hc2spOwogCQkJCW1hc2sgJj0gfigxIDw8IGopOwotCQkJCWRhdGFbaV0JPSBiZTE2X3RvX2NwdXAoCisJCQkJZGF0YVtpXSA9IGJlMTZfdG9fY3B1cCgKIAkJCQkJKF9fYmUxNiAqKSYoc3QtPnJ4W2oqMl0pKTsKIAkJCX0KLQorCQl9CisJfQogCS8qIEd1YXJhbnRlZWQgdG8gYmUgYWxpZ25lZCB3aXRoIDggYnl0ZSBib3VuZGFyeSAqLwogCWlmIChyaW5nLT5zY2FuX3RpbWVzdGFtcCkKLQkJKigoczY0ICopKGRhdGEgKyAoKGkgKyAzKS80KSo0KSkgPSBzdC0+bGFzdF90aW1lc3RhbXA7CisJCSooKHM2NCAqKShkYXRhICsgKChpICsgMykvNCkqNCkpID0gcGYtPnRpbWVzdGFtcDsKKwlyaW5nLT5hY2Nlc3MtPnN0b3JlX3RvKGluZGlvX2Rldi0+cmluZywgKHU4ICopIGRhdGEsIHBmLT50aW1lc3RhbXApOwogCi0JcmluZy0+YWNjZXNzLnN0b3JlX3RvKHJpbmcsCi0JCQkodTggKikgZGF0YSwKLQkJCXN0LT5sYXN0X3RpbWVzdGFtcCk7Ci0KLQlpaW9fdHJpZ2dlcl9ub3RpZnlfZG9uZShzdC0+aW5kaW9fZGV2LT50cmlnKTsKKwlpaW9fdHJpZ2dlcl9ub3RpZnlfZG9uZShpbmRpb19kZXYtPnRyaWcpOwogCWtmcmVlKGRhdGEpOwogCi0JcmV0dXJuOworCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogdm9pZCBhZGlzMTY0MDBfdW5jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQogewotCWtmcmVlKGluZGlvX2Rldi0+cG9sbGZ1bmMpOworCWlpb19kZWFsbG9jX3BvbGxmdW5jKGluZGlvX2Rldi0+cG9sbGZ1bmMpOwogCWlpb19zd19yYl9mcmVlKGluZGlvX2Rldi0+cmluZyk7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX3Jpbmdfc2V0dXBfb3BzIGFkaXMxNjQwMF9yaW5nX3NldHVwX29wcyA9IHsKKwkucHJlZW5hYmxlID0gJmlpb19zd19yaW5nX3ByZWVuYWJsZSwKKwkucG9zdGVuYWJsZSA9ICZpaW9fdHJpZ2dlcmVkX3JpbmdfcG9zdGVuYWJsZSwKKwkucHJlZGlzYWJsZSA9ICZpaW9fdHJpZ2dlcmVkX3JpbmdfcHJlZGlzYWJsZSwKK307CisKIGludCBhZGlzMTY0MDBfY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKIAlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgYWRpczE2NDAwX3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CisJc3RydWN0IGFkaXMxNjQwMF9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwogCXN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmc7Ci0JSU5JVF9XT1JLKCZzdC0+d29ya190cmlnZ2VyX3RvX3JpbmcsIGFkaXMxNjQwMF90cmlnZ2VyX2JoX3RvX3JpbmcpOwogCiAJcmluZyA9IGlpb19zd19yYl9hbGxvY2F0ZShpbmRpb19kZXYpOwogCWlmICghcmluZykgewpAQCAtMjE0LDM2ICsxODgsMjkgQEAKIAl9CiAJaW5kaW9fZGV2LT5yaW5nID0gcmluZzsKIAkvKiBFZmZlY3RpdmVseSBzZWxlY3QgdGhlIHJpbmcgYnVmZmVyIGltcGxlbWVudGF0aW9uICovCi0JaWlvX3Jpbmdfc3dfcmVnaXN0ZXJfZnVuY3MoJnJpbmctPmFjY2Vzcyk7CisJcmluZy0+YWNjZXNzID0gJnJpbmdfc3dfYWNjZXNzX2Z1bmNzOwogCXJpbmctPmJwZSA9IDI7Ci0JcmluZy0+c2Nhbl9lbF9hdHRycyA9ICZhZGlzMTY0MDBfc2Nhbl9lbF9ncm91cDsKIAlyaW5nLT5zY2FuX3RpbWVzdGFtcCA9IHRydWU7Ci0JcmluZy0+cHJlZW5hYmxlID0gJmlpb19zd19yaW5nX3ByZWVuYWJsZTsKLQlyaW5nLT5wb3N0ZW5hYmxlID0gJmlpb190cmlnZ2VyZWRfcmluZ19wb3N0ZW5hYmxlOwotCXJpbmctPnByZWRpc2FibGUgPSAmaWlvX3RyaWdnZXJlZF9yaW5nX3ByZWRpc2FibGU7CisJcmluZy0+c2V0dXBfb3BzID0gJmFkaXMxNjQwMF9yaW5nX3NldHVwX29wczsKIAlyaW5nLT5vd25lciA9IFRISVNfTU9EVUxFOwotCiAJLyogU2V0IGRlZmF1bHQgc2NhbiBtb2RlICovCi0JaWlvX3NjYW5fbWFza19zZXQocmluZywgaWlvX3NjYW5fZWxfaW4wX3N1cHBseS5udW1iZXIpOwotCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIGlpb19zY2FuX2VsX2d5cm9feC5udW1iZXIpOwotCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIGlpb19zY2FuX2VsX2d5cm9feS5udW1iZXIpOwotCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIGlpb19zY2FuX2VsX2d5cm9fei5udW1iZXIpOwotCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIGlpb19zY2FuX2VsX2FjY2VsX3gubnVtYmVyKTsKLQlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCBpaW9fc2Nhbl9lbF9hY2NlbF95Lm51bWJlcik7Ci0JaWlvX3NjYW5fbWFza19zZXQocmluZywgaWlvX3NjYW5fZWxfYWNjZWxfei5udW1iZXIpOwotCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIGlpb19zY2FuX2VsX21hZ25feC5udW1iZXIpOwotCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIGlpb19zY2FuX2VsX21hZ25feS5udW1iZXIpOwotCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIGlpb19zY2FuX2VsX21hZ25fei5udW1iZXIpOwotCWlpb19zY2FuX21hc2tfc2V0KHJpbmcsIGlpb19zY2FuX2VsX3RlbXAubnVtYmVyKTsKLQlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCBpaW9fc2Nhbl9lbF9pbjEubnVtYmVyKTsKKwlyaW5nLT5zY2FuX21hc2sgPSBzdC0+dmFyaWFudC0+ZGVmYXVsdF9zY2FuX21hc2s7CisJcmluZy0+c2Nhbl9jb3VudCA9IGh3ZWlnaHRfbG9uZyhzdC0+dmFyaWFudC0+ZGVmYXVsdF9zY2FuX21hc2spOwogCi0JcmV0ID0gaWlvX2FsbG9jX3BvbGxmdW5jKGluZGlvX2RldiwgTlVMTCwgJmFkaXMxNjQwMF9wb2xsX2Z1bmNfdGgpOwotCWlmIChyZXQpCisJaW5kaW9fZGV2LT5wb2xsZnVuYyA9IGlpb19hbGxvY19wb2xsZnVuYygmaWlvX3BvbGxmdW5jX3N0b3JlX3RpbWUsCisJCQkJCQkgJmFkaXMxNjQwMF90cmlnZ2VyX2hhbmRsZXIsCisJCQkJCQkgSVJRRl9PTkVTSE9ULAorCQkJCQkJIGluZGlvX2RldiwKKwkJCQkJCSAiJXNfY29uc3VtZXIlZCIsCisJCQkJCQkgaW5kaW9fZGV2LT5uYW1lLAorCQkJCQkJIGluZGlvX2Rldi0+aWQpOworCWlmIChpbmRpb19kZXYtPnBvbGxmdW5jID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9paW9fc3dfcmJfZnJlZTsKKwl9CiAKIAlpbmRpb19kZXYtPm1vZGVzIHw9IElORElPX1JJTkdfVFJJR0dFUkVEOwogCXJldHVybiAwOwotCiBlcnJvcl9paW9fc3dfcmJfZnJlZToKIAlpaW9fc3dfcmJfZnJlZShpbmRpb19kZXYtPnJpbmcpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTY0MDBfdHJpZ2dlci5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2NDAwX3RyaWdnZXIuYwppbmRleCAzNmI1ZmY1Li5jNmVjNDFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTY0MDBfdHJpZ2dlci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjQwMF90cmlnZ2VyLmMKQEAgLTEzLDExMyArMTMsNjMgQEAKICNpbmNsdWRlICJhZGlzMTY0MDAuaCIKIAogLyoqCi0gKiBhZGlzMTY0MDBfZGF0YV9yZHlfdHJpZ19wb2xsKCkgdGhlIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBkYXRhIHJkeSB0cmlnCi0gKiovCi1zdGF0aWMgaW50IGFkaXMxNjQwMF9kYXRhX3JkeV90cmlnX3BvbGwoc3RydWN0IGlpb19kZXYgKmRldl9pbmZvLAotCQkJCSAgICAgICBpbnQgaW5kZXgsCi0JCQkJICAgICAgIHM2NCB0aW1lc3RhbXAsCi0JCQkJICAgICAgIGludCBub190ZXN0KQotewotCXN0cnVjdCBhZGlzMTY0MDBfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShkZXZfaW5mbyk7Ci0Jc3RydWN0IGlpb190cmlnZ2VyICp0cmlnID0gc3QtPnRyaWc7Ci0KLQlpaW9fdHJpZ2dlcl9wb2xsKHRyaWcsIHRpbWVzdGFtcCk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLUlJT19FVkVOVF9TSChkYXRhX3JkeV90cmlnLCAmYWRpczE2NDAwX2RhdGFfcmR5X3RyaWdfcG9sbCk7Ci0KLXN0YXRpYyBJSU9fVFJJR0dFUl9OQU1FX0FUVFI7Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZGlzMTY0MDBfdHJpZ2dlcl9hdHRyc1tdID0gewotCSZkZXZfYXR0cl9uYW1lLmF0dHIsCi0JTlVMTCwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFkaXMxNjQwMF90cmlnZ2VyX2F0dHJfZ3JvdXAgPSB7Ci0JLmF0dHJzID0gYWRpczE2NDAwX3RyaWdnZXJfYXR0cnMsCi19OwotCi0vKioKICAqIGFkaXMxNjQwMF9kYXRhX3JkeV90cmlnZ2VyX3NldF9zdGF0ZSgpIHNldCBkYXRhcmR5IGludGVycnVwdCBzdGF0ZQogICoqLwogc3RhdGljIGludCBhZGlzMTY0MDBfZGF0YV9yZHlfdHJpZ2dlcl9zZXRfc3RhdGUoc3RydWN0IGlpb190cmlnZ2VyICp0cmlnLAogCQkJCQkJYm9vbCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgYWRpczE2NDAwX3N0YXRlICpzdCA9IHRyaWctPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gc3QtPmluZGlvX2RldjsKLQlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gdHJpZy0+cHJpdmF0ZV9kYXRhOwogCiAJZGV2X2RiZygmaW5kaW9fZGV2LT5kZXYsICIlcyAoJWQpXG4iLCBfX2Z1bmNfXywgc3RhdGUpOwotCXJldCA9IGFkaXMxNjQwMF9zZXRfaXJxKCZzdC0+aW5kaW9fZGV2LT5kZXYsIHN0YXRlKTsKLQlpZiAoc3RhdGUgPT0gZmFsc2UpIHsKLQkJaWlvX3JlbW92ZV9ldmVudF9mcm9tX2xpc3QoJmlpb19ldmVudF9kYXRhX3JkeV90cmlnLAotCQkJCQkgICAmaW5kaW9fZGV2LT5pbnRlcnJ1cHRzWzBdCi0JCQkJCSAgIC0+ZXZfbGlzdCk7Ci0JCS8qIHBvc3NpYmxlIHF1aXJrIHdpdGggaGFuZGxlciBjdXJyZW50bHkgd29ya2VkIGFyb3VuZAotCQkgICBieSBlbnN1cmluZyB0aGUgd29yayBxdWV1ZSBpcyBlbXB0eSAqLwotCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCX0gZWxzZSB7Ci0JCWlpb19hZGRfZXZlbnRfdG9fbGlzdCgmaWlvX2V2ZW50X2RhdGFfcmR5X3RyaWcsCi0JCQkJICAgICAgJmluZGlvX2Rldi0+aW50ZXJydXB0c1swXS0+ZXZfbGlzdCk7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogYWRpczE2NDAwX3RyaWdfdHJ5X3JlZW4oKSB0cnkgcmVuYWJsaW5nIGlycSBmb3IgZGF0YSByZHkgdHJpZ2dlcgotICogQHRyaWc6CXRoZSBkYXRhcmR5IHRyaWdnZXIKLSAqKi8KLXN0YXRpYyBpbnQgYWRpczE2NDAwX3RyaWdfdHJ5X3JlZW4oc3RydWN0IGlpb190cmlnZ2VyICp0cmlnKQotewotCXN0cnVjdCBhZGlzMTY0MDBfc3RhdGUgKnN0ID0gdHJpZy0+cHJpdmF0ZV9kYXRhOwotCWVuYWJsZV9pcnEoc3QtPnVzLT5pcnEpOwotCS8qIGlycSByZWVuYWJsZWQgc28gc3VjY2VzcyEgKi8KLQlyZXR1cm4gMDsKKwlyZXR1cm4gYWRpczE2NDAwX3NldF9pcnEoaW5kaW9fZGV2LCBzdGF0ZSk7CiB9CiAKIGludCBhZGlzMTY0MDBfcHJvYmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQogewogCWludCByZXQ7Ci0Jc3RydWN0IGFkaXMxNjQwMF9zdGF0ZSAqc3QgPSBpbmRpb19kZXYtPmRldl9kYXRhOworCXN0cnVjdCBhZGlzMTY0MDBfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKIAotCXN0LT50cmlnID0gaWlvX2FsbG9jYXRlX3RyaWdnZXIoKTsKLQlzdC0+dHJpZy0+bmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLAotCQkJCSAgICJhZGlzMTY0MDAtZGV2JWQiLAotCQkJCSAgIGluZGlvX2Rldi0+aWQpOwotCWlmICghc3QtPnRyaWctPm5hbWUpIHsKKwlzdC0+dHJpZyA9IGlpb19hbGxvY2F0ZV90cmlnZ2VyKCIlcy1kZXYlZCIsCisJCQkJCXNwaV9nZXRfZGV2aWNlX2lkKHN0LT51cyktPm5hbWUsCisJCQkJCWluZGlvX2Rldi0+aWQpOworCWlmIChzdC0+dHJpZyA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyb3JfZnJlZV90cmlnOworCQlnb3RvIGVycm9yX3JldDsKIAl9CisKKwlyZXQgPSByZXF1ZXN0X2lycShzdC0+dXMtPmlycSwKKwkJCSAgJmlpb190cmlnZ2VyX2dlbmVyaWNfZGF0YV9yZHlfcG9sbCwKKwkJCSAgSVJRRl9UUklHR0VSX1JJU0lORywKKwkJCSAgImFkaXMxNjQwMCIsCisJCQkgIHN0LT50cmlnKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yX2ZyZWVfdHJpZzsKIAlzdC0+dHJpZy0+ZGV2LnBhcmVudCA9ICZzdC0+dXMtPmRldjsKIAlzdC0+dHJpZy0+b3duZXIgPSBUSElTX01PRFVMRTsKLQlzdC0+dHJpZy0+cHJpdmF0ZV9kYXRhID0gc3Q7CisJc3QtPnRyaWctPnByaXZhdGVfZGF0YSA9IGluZGlvX2RldjsKIAlzdC0+dHJpZy0+c2V0X3RyaWdnZXJfc3RhdGUgPSAmYWRpczE2NDAwX2RhdGFfcmR5X3RyaWdnZXJfc2V0X3N0YXRlOwotCXN0LT50cmlnLT50cnlfcmVlbmFibGUgPSAmYWRpczE2NDAwX3RyaWdfdHJ5X3JlZW47Ci0Jc3QtPnRyaWctPmNvbnRyb2xfYXR0cnMgPSAmYWRpczE2NDAwX3RyaWdnZXJfYXR0cl9ncm91cDsKIAlyZXQgPSBpaW9fdHJpZ2dlcl9yZWdpc3RlcihzdC0+dHJpZyk7CiAKIAkvKiBzZWxlY3QgZGVmYXVsdCB0cmlnZ2VyICovCiAJaW5kaW9fZGV2LT50cmlnID0gc3QtPnRyaWc7CiAJaWYgKHJldCkKLQkJZ290byBlcnJvcl9mcmVlX3RyaWdfbmFtZTsKKwkJZ290byBlcnJvcl9mcmVlX2lycTsKIAogCXJldHVybiAwOwogCi1lcnJvcl9mcmVlX3RyaWdfbmFtZToKLQlrZnJlZShzdC0+dHJpZy0+bmFtZSk7CitlcnJvcl9mcmVlX2lycToKKwlmcmVlX2lycShzdC0+dXMtPmlycSwgc3QtPnRyaWcpOwogZXJyb3JfZnJlZV90cmlnOgogCWlpb19mcmVlX3RyaWdnZXIoc3QtPnRyaWcpOwotCitlcnJvcl9yZXQ6CiAJcmV0dXJuIHJldDsKIH0KIAogdm9pZCBhZGlzMTY0MDBfcmVtb3ZlX3RyaWdnZXIoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKLQlzdHJ1Y3QgYWRpczE2NDAwX3N0YXRlICpzdGF0ZSA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CisJc3RydWN0IGFkaXMxNjQwMF9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwogCi0JaWlvX3RyaWdnZXJfdW5yZWdpc3RlcihzdGF0ZS0+dHJpZyk7Ci0Ja2ZyZWUoc3RhdGUtPnRyaWctPm5hbWUpOwotCWlpb19mcmVlX3RyaWdnZXIoc3RhdGUtPnRyaWcpOworCWlpb190cmlnZ2VyX3VucmVnaXN0ZXIoc3QtPnRyaWcpOworCWZyZWVfaXJxKHN0LT51cy0+aXJxLCBzdC0+dHJpZyk7CisJaWlvX2ZyZWVfdHJpZ2dlcihzdC0+dHJpZyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby1jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby1jb3JlLmMKaW5kZXggMTc5NWVlMS4uOTRkM2JmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYwpAQCAtMTYsNyArMTYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgpAQCAtNDQsMjcgKzQzLDU1IEBACiB9OwogRVhQT1JUX1NZTUJPTChpaW9fYnVzX3R5cGUpOwogCi12b2lkIF9faWlvX2NoYW5nZV9ldmVudChzdHJ1Y3QgaWlvX2RldGVjdGVkX2V2ZW50X2xpc3QgKmV2LAotCQkJaW50IGV2X2NvZGUsCi0JCQlzNjQgdGltZXN0YW1wKQotewotCWV2LT5ldi5pZCA9IGV2X2NvZGU7Ci0JZXYtPmV2LnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKLX0KLUVYUE9SVF9TWU1CT0woX19paW9fY2hhbmdlX2V2ZW50KTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaWlvX2NoYW5fdHlwZV9uYW1lX3NwZWNfc2hhcmVkW10gPSB7CisJW0lJT19USU1FU1RBTVBdID0gInRpbWVzdGFtcCIsCisJW0lJT19BQ0NFTF0gPSAiYWNjZWwiLAorCVtJSU9fSU5dID0gImluIiwKKwlbSUlPX0NVUlJFTlRdID0gImN1cnJlbnQiLAorCVtJSU9fUE9XRVJdID0gInBvd2VyIiwKKwlbSUlPX0lOX0RJRkZdID0gImluLWluIiwKKwlbSUlPX0dZUk9dID0gImd5cm8iLAorCVtJSU9fVEVNUF0gPSAidGVtcCIsCisJW0lJT19NQUdOXSA9ICJtYWduIiwKKwlbSUlPX0lOQ0xJXSA9ICJpbmNsaSIsCisJW0lJT19ST1RdID0gInJvdCIsCisJW0lJT19JTlRFTlNJVFldID0gImludGVuc2l0eSIsCisJW0lJT19MSUdIVF0gPSAiaWxsdW1pbmFuY2UiLAorCVtJSU9fQU5HTF0gPSAiYW5nbCIsCit9OwogCi0vKiBVc2VkIGJvdGggaW4gdGhlIGludGVycnVwdCBsaW5lIHB1dCBldmVudHMgYW5kIHRoZSByaW5nIGJ1ZmZlciBvbmVzICovCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGlpb19jaGFuX3R5cGVfbmFtZV9zcGVjX2NvbXBsZXhbXSA9IHsKKwlbSUlPX0lOX0RJRkZdID0gImluJWQtaW4lZCIsCit9OwogCi0vKiBOb3RlIHRoYXQgaW4gaXQncyBjdXJyZW50IGZvcm0gc29tZW9uZSBoYXMgdG8gYmUgbGlzdGVuaW5nIGJlZm9yZSBldmVudHMKLSAqIGFyZSBxdWV1ZWQuIEhlbmNlIGEgY2xpZW50IE1VU1Qgb3BlbiB0aGUgY2hyZGV2IGJlZm9yZSB0aGUgcmluZyBidWZmZXIgaXMKLSAqIHN3aXRjaGVkIG9uLgotICovCi1pbnQgX19paW9fcHVzaF9ldmVudChzdHJ1Y3QgaWlvX2V2ZW50X2ludGVyZmFjZSAqZXZfaW50LAotCQkgICAgIGludCBldl9jb2RlLAotCQkgICAgIHM2NCB0aW1lc3RhbXAsCi0JCSAgICAgc3RydWN0IGlpb19zaGFyZWRfZXZfcG9pbnRlciAqCi0JCSAgICAgc2hhcmVkX3BvaW50ZXJfcCkKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaWlvX21vZGlmaWVyX25hbWVzX2xpZ2h0W10gPSB7CisJW0lJT19NT0RfTElHSFRfQk9USF0gPSAiYm90aCIsCisJW0lJT19NT0RfTElHSFRfSVJdID0gImlyIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaWlvX21vZGlmaWVyX25hbWVzX2F4aWFsW10gPSB7CisJW0lJT19NT0RfWF0gPSAieCIsCisJW0lJT19NT0RfWV0gPSAieSIsCisJW0lJT19NT0RfWl0gPSAieiIsCit9OworCisvKiByZWxpZXMgb24gcGFpcnMgb2YgdGhlc2Ugc2hhcmVkIHRoZW4gc2VwYXJhdGUgKi8KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaWlvX2NoYW5faW5mb19wb3N0Zml4W10gPSB7CisJW0lJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVELzJdID0gInNjYWxlIiwKKwlbSUlPX0NIQU5fSU5GT19PRkZTRVRfU0hBUkVELzJdID0gIm9mZnNldCIsCisJW0lJT19DSEFOX0lORk9fQ0FMSUJTQ0FMRV9TSEFSRUQvMl0gPSAiY2FsaWJzY2FsZSIsCisJW0lJT19DSEFOX0lORk9fQ0FMSUJCSUFTX1NIQVJFRC8yXSA9ICJjYWxpYmJpYXMiLAorCVtJSU9fQ0hBTl9JTkZPX1BFQUtfU0hBUkVELzJdID0gInBlYWtfcmF3IiwKKwlbSUlPX0NIQU5fSU5GT19QRUFLX1NDQUxFX1NIQVJFRC8yXSA9ICJwZWFrX3NjYWxlIiwKK307CisKK2ludCBpaW9fcHVzaF9ldmVudChzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8sCisJCSAgIGludCBldl9saW5lLAorCQkgICBpbnQgZXZfY29kZSwKKwkJICAgczY0IHRpbWVzdGFtcCkKIHsKKwlzdHJ1Y3QgaWlvX2V2ZW50X2ludGVyZmFjZSAqZXZfaW50CisJCT0gJmRldl9pbmZvLT5ldmVudF9pbnRlcmZhY2VzW2V2X2xpbmVdOwogCXN0cnVjdCBpaW9fZGV0ZWN0ZWRfZXZlbnRfbGlzdCAqZXY7CiAJaW50IHJldCA9IDA7CiAKQEAgLTgzLDExICsxMTAsOCBAQAogCQl9CiAJCWV2LT5ldi5pZCA9IGV2X2NvZGU7CiAJCWV2LT5ldi50aW1lc3RhbXAgPSB0aW1lc3RhbXA7Ci0JCWV2LT5zaGFyZWRfcG9pbnRlciA9IHNoYXJlZF9wb2ludGVyX3A7Ci0JCWlmIChldi0+c2hhcmVkX3BvaW50ZXIpCi0JCQlzaGFyZWRfcG9pbnRlcl9wLT5ldl9wID0gZXY7CiAKLQkJbGlzdF9hZGRfdGFpbCgmZXYtPmxpc3QsICZldl9pbnQtPmRldF9ldmVudHMubGlzdCk7CisJCWxpc3RfYWRkX3RhaWwoJmV2LT5saXN0LCAmZXZfaW50LT5kZXRfZXZlbnRzKTsKIAkJZXZfaW50LT5jdXJyZW50X2V2ZW50cysrOwogCQltdXRleF91bmxvY2soJmV2X2ludC0+ZXZlbnRfbGlzdF9sb2NrKTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZldl9pbnQtPndhaXQpOwpAQCAtOTcsODUgKzEyMSw4IEBACiBlcnJvcl9yZXQ6CiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0woX19paW9fcHVzaF9ldmVudCk7Ci0KLWludCBpaW9fcHVzaF9ldmVudChzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8sCi0JCSAgIGludCBldl9saW5lLAotCQkgICBpbnQgZXZfY29kZSwKLQkJICAgczY0IHRpbWVzdGFtcCkKLXsKLQlyZXR1cm4gX19paW9fcHVzaF9ldmVudCgmZGV2X2luZm8tPmV2ZW50X2ludGVyZmFjZXNbZXZfbGluZV0sCi0JCQkJZXZfY29kZSwgdGltZXN0YW1wLCBOVUxMKTsKLX0KIEVYUE9SVF9TWU1CT0woaWlvX3B1c2hfZXZlbnQpOwogCi0vKiBHZW5lcmljIGludGVycnVwdCBsaW5lIGludGVycnVwdCBoYW5kbGVyICovCi1zdGF0aWMgaXJxcmV0dXJuX3QgaWlvX2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKl9pbnRfaW5mbykKLXsKLQlzdHJ1Y3QgaWlvX2ludGVycnVwdCAqaW50X2luZm8gPSBfaW50X2luZm87Ci0Jc3RydWN0IGlpb19kZXYgKmRldl9pbmZvID0gaW50X2luZm8tPmRldl9pbmZvOwotCXN0cnVjdCBpaW9fZXZlbnRfaGFuZGxlcl9saXN0ICpwOwotCXM2NCB0aW1lX25zOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW50X2luZm8tPmV2X2xpc3RfbG9jaywgZmxhZ3MpOwotCWlmIChsaXN0X2VtcHR5KCZpbnRfaW5mby0+ZXZfbGlzdCkpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW50X2luZm8tPmV2X2xpc3RfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gSVJRX05PTkU7Ci0JfQotCi0JdGltZV9ucyA9IGlpb19nZXRfdGltZV9ucygpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmludF9pbmZvLT5ldl9saXN0LCBsaXN0KSB7Ci0JCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOwotCQlwLT5oYW5kbGVyKGRldl9pbmZvLCAxLCB0aW1lX25zLCAhKHAtPnJlZmNvdW50ID4gMSkpOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnRfaW5mby0+ZXZfbGlzdF9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaWlvX2ludGVycnVwdCAqaWlvX2FsbG9jYXRlX2ludGVycnVwdCh2b2lkKQotewotCXN0cnVjdCBpaW9faW50ZXJydXB0ICppID0ga21hbGxvYyhzaXplb2YgKmksIEdGUF9LRVJORUwpOwotCWlmIChpKSB7Ci0JCXNwaW5fbG9ja19pbml0KCZpLT5ldl9saXN0X2xvY2spOwotCQlJTklUX0xJU1RfSEVBRCgmaS0+ZXZfbGlzdCk7Ci0JfQotCXJldHVybiBpOwotfQotCi0vKiBDb25maXJtaW5nIHRoZSB2YWxpZGl0eSBvZiBzdXBwbGllZCBpcnEgaXMgbGVmdCB0byBkcml2ZXJzLiovCi1pbnQgaWlvX3JlZ2lzdGVyX2ludGVycnVwdF9saW5lKHVuc2lnbmVkIGludCBpcnEsCi0JCQkJc3RydWN0IGlpb19kZXYgKmRldl9pbmZvLAotCQkJCWludCBsaW5lX251bWJlciwKLQkJCQl1bnNpZ25lZCBsb25nIHR5cGUsCi0JCQkJY29uc3QgY2hhciAqbmFtZSkKLXsKLQlpbnQgcmV0OwotCi0JZGV2X2luZm8tPmludGVycnVwdHNbbGluZV9udW1iZXJdID0gaWlvX2FsbG9jYXRlX2ludGVycnVwdCgpOwotCWlmIChkZXZfaW5mby0+aW50ZXJydXB0c1tsaW5lX251bWJlcl0gPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yX3JldDsKLQl9Ci0JZGV2X2luZm8tPmludGVycnVwdHNbbGluZV9udW1iZXJdLT5saW5lX251bWJlciA9IGxpbmVfbnVtYmVyOwotCWRldl9pbmZvLT5pbnRlcnJ1cHRzW2xpbmVfbnVtYmVyXS0+aXJxID0gaXJxOwotCWRldl9pbmZvLT5pbnRlcnJ1cHRzW2xpbmVfbnVtYmVyXS0+ZGV2X2luZm8gPSBkZXZfaW5mbzsKLQotCS8qIFBvc3NpYmx5IG9ubHkgcmVxdWVzdCBvbiBkZW1hbmQ/Ci0JICogQ2FuIHNlZSB0aGlzIG1heSBjb21wbGljYXRlIHRoZSBoYW5kbGluZyBvZiBpbnRlcnJ1cHRzLgotCSAqIEhvd2V2ZXIsIHdpdGggdGhpcyBhcHByb2FjaCB3ZSBtaWdodCBlbmQgdXAgaGFuZGxpbmcgbG90cyBvZgotCSAqIGV2ZW50cyBuby1vbmUgY2FyZXMgYWJvdXQuKi8KLQlyZXQgPSByZXF1ZXN0X2lycShpcnEsCi0JCQkgICZpaW9faW50ZXJydXB0X2hhbmRsZXIsCi0JCQkgIHR5cGUsCi0JCQkgIG5hbWUsCi0JCQkgIGRldl9pbmZvLT5pbnRlcnJ1cHRzW2xpbmVfbnVtYmVyXSk7Ci0KLWVycm9yX3JldDoKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTChpaW9fcmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUpOwogCiAvKiBUaGlzIHR1cm5zIHVwIGFuIGF3ZnVsIGxvdCAqLwogc3NpemVfdCBpaW9fcmVhZF9jb25zdF9hdHRyKHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTE4Niw1NCArMTMzLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woaWlvX3JlYWRfY29uc3RfYXR0cik7CiAKLS8qIEJlZm9yZSB0aGlzIHJ1bnMgdGhlIGludGVycnVwdCBnZW5lcmF0b3IgbXVzdCBoYXZlIGJlZW4gZGlzYWJsZWQgKi8KLXZvaWQgaWlvX3VucmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoc3RydWN0IGlpb19kZXYgKmRldl9pbmZvLCBpbnQgbGluZV9udW1iZXIpCi17Ci0JLyogbWFrZSBzdXJlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcnMgYXJlIGFsbCBkb25lICovCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQlmcmVlX2lycShkZXZfaW5mby0+aW50ZXJydXB0c1tsaW5lX251bWJlcl0tPmlycSwKLQkJIGRldl9pbmZvLT5pbnRlcnJ1cHRzW2xpbmVfbnVtYmVyXSk7Ci0Ja2ZyZWUoZGV2X2luZm8tPmludGVycnVwdHNbbGluZV9udW1iZXJdKTsKLX0KLUVYUE9SVF9TWU1CT0woaWlvX3VucmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUpOwotCi0vKiBSZWZlcmVuY2UgY291bnRlZCBhZGQgYW5kIHJlbW92ZSAqLwotdm9pZCBpaW9fYWRkX2V2ZW50X3RvX2xpc3Qoc3RydWN0IGlpb19ldmVudF9oYW5kbGVyX2xpc3QgKmVsLAotCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGlpb19pbnRlcnJ1cHQgKmludGVyID0gdG9faWlvX2ludGVycnVwdChoZWFkKTsKLQotCS8qIHRha2UgbXV0ZXggdG8gcHJvdGVjdCB0aGlzIGVsZW1lbnQgKi8KLQltdXRleF9sb2NrKCZlbC0+ZXhpc3RfbG9jayk7Ci0JaWYgKGVsLT5yZWZjb3VudCA9PSAwKSB7Ci0JCS8qIFRha2UgdGhlIGV2ZW50IGxpc3Qgc3BpbiBsb2NrICovCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZpbnRlci0+ZXZfbGlzdF9sb2NrLCBmbGFncyk7Ci0JCWxpc3RfYWRkKCZlbC0+bGlzdCwgaGVhZCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmludGVyLT5ldl9saXN0X2xvY2ssIGZsYWdzKTsKLQl9Ci0JZWwtPnJlZmNvdW50Kys7Ci0JbXV0ZXhfdW5sb2NrKCZlbC0+ZXhpc3RfbG9jayk7Ci19Ci1FWFBPUlRfU1lNQk9MKGlpb19hZGRfZXZlbnRfdG9fbGlzdCk7Ci0KLXZvaWQgaWlvX3JlbW92ZV9ldmVudF9mcm9tX2xpc3Qoc3RydWN0IGlpb19ldmVudF9oYW5kbGVyX2xpc3QgKmVsLAotCQkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgaWlvX2ludGVycnVwdCAqaW50ZXIgPSB0b19paW9faW50ZXJydXB0KGhlYWQpOwotCi0JbXV0ZXhfbG9jaygmZWwtPmV4aXN0X2xvY2spOwotCWVsLT5yZWZjb3VudC0tOwotCWlmIChlbC0+cmVmY291bnQgPT0gMCkgewotCQkvKiBUYWtlIHRoZSBldmVudCBsaXN0IHNwaW4gbG9jayAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW50ZXItPmV2X2xpc3RfbG9jaywgZmxhZ3MpOwotCQlsaXN0X2RlbF9pbml0KCZlbC0+bGlzdCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmludGVyLT5ldl9saXN0X2xvY2ssIGZsYWdzKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZlbC0+ZXhpc3RfbG9jayk7Ci19Ci1FWFBPUlRfU1lNQk9MKGlpb19yZW1vdmVfZXZlbnRfZnJvbV9saXN0KTsKIAogc3RhdGljIHNzaXplX3QgaWlvX2V2ZW50X2NocmRldl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgIGNoYXIgX191c2VyICpidWYsCkBAIC0yNDYsNyArMTQ1LDcgQEAKIAlzaXplX3QgbGVuOwogCiAJbXV0ZXhfbG9jaygmZXZfaW50LT5ldmVudF9saXN0X2xvY2spOwotCWlmIChsaXN0X2VtcHR5KCZldl9pbnQtPmRldF9ldmVudHMubGlzdCkpIHsKKwlpZiAobGlzdF9lbXB0eSgmZXZfaW50LT5kZXRfZXZlbnRzKSkgewogCQlpZiAoZmlsZXAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CiAJCQlyZXQgPSAtRUFHQUlOOwogCQkJZ290byBlcnJvcl9tdXRleF91bmxvY2s7CkBAIC0yNTUsMTQgKzE1NCwxNCBAQAogCQkvKiBCbG9ja2luZyBvbiBkZXZpY2U7IHdhaXRpbmcgZm9yIHNvbWV0aGluZyB0byBiZSB0aGVyZSAqLwogCQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZXZfaW50LT53YWl0LAogCQkJCQkgICAgICAgIWxpc3RfZW1wdHkoJmV2X2ludAotCQkJCQkJCSAgIC0+ZGV0X2V2ZW50cy5saXN0KSk7CisJCQkJCQkJICAgLT5kZXRfZXZlbnRzKSk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycm9yX3JldDsKIAkJLyogU2luZ2xlIGFjY2VzcyBkZXZpY2Ugc28gbm8gb25lIGVsc2UgY2FuIGdldCB0aGUgZGF0YSAqLwogCQltdXRleF9sb2NrKCZldl9pbnQtPmV2ZW50X2xpc3RfbG9jayk7CiAJfQogCi0JZWwgPSBsaXN0X2ZpcnN0X2VudHJ5KCZldl9pbnQtPmRldF9ldmVudHMubGlzdCwKKwllbCA9IGxpc3RfZmlyc3RfZW50cnkoJmV2X2ludC0+ZGV0X2V2ZW50cywKIAkJCSAgICAgIHN0cnVjdCBpaW9fZGV0ZWN0ZWRfZXZlbnRfbGlzdCwKIAkJCSAgICAgIGxpc3QpOwogCWxlbiA9IHNpemVvZiBlbC0+ZXY7CkBAIC0yNzMsMTggKzE3Miw2IEBACiAJbGlzdF9kZWwoJmVsLT5saXN0KTsKIAlldl9pbnQtPmN1cnJlbnRfZXZlbnRzLS07CiAJbXV0ZXhfdW5sb2NrKCZldl9pbnQtPmV2ZW50X2xpc3RfbG9jayk7Ci0JLyoKLQkgKiBQb3NzaWJsZSBjb25jdXJlbmN5IGlzc3VlIGlmIGFuIHVwZGF0ZSBvZiB0aGlzIGV2ZW50IGlzIG9uIGl0cyB3YXkKLQkgKiB0aHJvdWdoLiBNYXkgbGVhZCB0byBuZXcgZXZlbnQgYmVpbmcgcmVtb3ZlZCB3aGlsc3QgdGhlIHJlcG9ydGVkCi0JICogZXZlbnQgd2FzIHRoZSB1bmVzY2FsYXRlZCBldmVudC4gSW4gdHlwaWNhbCB1c2UgY2FzZSB0aGlzIGlzIG5vdCBhCi0JICogcHJvYmxlbSBhcyB1c2Vyc3BhY2Ugd2lsbCBzYXkgcmVhZCBoYWxmIHRoZSBidWZmZXIgZHVlIHRvIGEgNTAlCi0JICogZnVsbCBldmVudCB3aGljaCB3b3VsZCBtYWtlIHRoZSBjb3JyZWN0IDEwMCUgZnVsbCBpbmNvcnJlY3QgYW55d2F5LgotCSAqLwotCWlmIChlbC0+c2hhcmVkX3BvaW50ZXIpIHsKLQkJc3Bpbl9sb2NrKCZlbC0+c2hhcmVkX3BvaW50ZXItPmxvY2spOwotCQkoZWwtPnNoYXJlZF9wb2ludGVyLT5ldl9wKSA9IE5VTEw7Ci0JCXNwaW5fdW5sb2NrKCZlbC0+c2hhcmVkX3BvaW50ZXItPmxvY2spOwotCX0KIAlrZnJlZShlbCk7CiAKIAlyZXR1cm4gbGVuOwpAQCAtMzA5LDcgKzE5Niw3IEBACiAJICogY2xlYXIgb3V0IGFueSBhd2FpdGluZyBldmVudHMuIFRoZSBtYXNrIHdpbGwgcHJldmVudAogCSAqIGFueSBuZXcgX19paW9fcHVzaF9ldmVudCBjYWxscyBydW5uaW5nLgogCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbCwgdCwgJmV2X2ludC0+ZGV0X2V2ZW50cy5saXN0LCBsaXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVsLCB0LCAmZXZfaW50LT5kZXRfZXZlbnRzLCBsaXN0KSB7CiAJCWxpc3RfZGVsKCZlbC0+bGlzdCk7CiAJCWtmcmVlKGVsKTsKIAl9CkBAIC0zODEsMTAgKzI2OCwxMSBAQAogCXNwaW5fdW5sb2NrKCZpaW9faWRhX2xvY2spOwogfQogCi1pbnQgaWlvX3NldHVwX2V2X2ludChzdHJ1Y3QgaWlvX2V2ZW50X2ludGVyZmFjZSAqZXZfaW50LAotCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsCi0JCSAgICAgc3RydWN0IG1vZHVsZSAqb3duZXIsCi0JCSAgICAgc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBpaW9fc2V0dXBfZXZfaW50KHN0cnVjdCBpaW9fZXZlbnRfaW50ZXJmYWNlICpldl9pbnQsCisJCQkgICAgY29uc3QgY2hhciAqZGV2X25hbWUsCisJCQkgICAgaW50IGluZGV4LAorCQkJICAgIHN0cnVjdCBtb2R1bGUgKm93bmVyLAorCQkJICAgIHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlpbnQgcmV0LCBtaW5vcjsKIApAQCAtMzk5LDcgKzI4Nyw3IEBACiAJCWdvdG8gZXJyb3JfZGV2aWNlX3B1dDsKIAl9CiAJZXZfaW50LT5kZXYuZGV2dCA9IE1LREVWKE1BSk9SKGlpb19kZXZ0KSwgbWlub3IpOwotCWRldl9zZXRfbmFtZSgmZXZfaW50LT5kZXYsICIlcyIsIG5hbWUpOworCWRldl9zZXRfbmFtZSgmZXZfaW50LT5kZXYsICIlczpldmVudCVkIiwgZGV2X25hbWUsIGluZGV4KTsKIAogCXJldCA9IGRldmljZV9hZGQoJmV2X2ludC0+ZGV2KTsKIAlpZiAocmV0KQpAQCAtNDEyLDcgKzMwMCw3IEBACiAJLyogZGlzY3Vzc2lvbiBwb2ludCAtIG1ha2UgdGhpcyB2YXJpYWJsZT8gKi8KIAlldl9pbnQtPm1heF9ldmVudHMgPSAxMDsKIAlldl9pbnQtPmN1cnJlbnRfZXZlbnRzID0gMDsKLQlJTklUX0xJU1RfSEVBRCgmZXZfaW50LT5kZXRfZXZlbnRzLmxpc3QpOworCUlOSVRfTElTVF9IRUFEKCZldl9pbnQtPmRldF9ldmVudHMpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmV2X2ludC0+d2FpdCk7CiAJZXZfaW50LT5oYW5kbGVyLnByaXZhdGUgPSBldl9pbnQ7CiAJZXZfaW50LT5oYW5kbGVyLmZsYWdzID0gMDsKQEAgLTQzMyw3ICszMjEsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXZvaWQgaWlvX2ZyZWVfZXZfaW50KHN0cnVjdCBpaW9fZXZlbnRfaW50ZXJmYWNlICpldl9pbnQpCitzdGF0aWMgdm9pZCBpaW9fZnJlZV9ldl9pbnQoc3RydWN0IGlpb19ldmVudF9pbnRlcmZhY2UgKmV2X2ludCkKIHsKIAlkZXZpY2VfdW5yZWdpc3RlcigmZXZfaW50LT5kZXYpOwogCXB1dF9kZXZpY2UoJmV2X2ludC0+ZGV2KTsKQEAgLTQ4OCwyNCArMzc2LDM5NyBAQAogCWJ1c191bnJlZ2lzdGVyKCZpaW9fYnVzX3R5cGUpOwogfQogCi1zdGF0aWMgaW50IGlpb19kZXZpY2VfcmVnaXN0ZXJfc3lzZnMoc3RydWN0IGlpb19kZXYgKmRldl9pbmZvKQorc3RhdGljIHNzaXplX3QgaWlvX3JlYWRfY2hhbm5lbF9pbmZvKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgY2hhciAqYnVmKQogewotCWludCByZXQgPSAwOworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7CisJaW50IHZhbCwgdmFsMjsKKwlpbnQgcmV0ID0gaW5kaW9fZGV2LT5pbmZvLT5yZWFkX3JhdyhpbmRpb19kZXYsIHRoaXNfYXR0ci0+YywKKwkJCQkJICAgICZ2YWwsICZ2YWwyLCB0aGlzX2F0dHItPmFkZHJlc3MpOwogCi0JcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXZfaW5mby0+ZGV2LmtvYmosIGRldl9pbmZvLT5hdHRycyk7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKGRldl9pbmZvLT5kZXYucGFyZW50LAotCQkJIkZhaWxlZCB0byByZWdpc3RlciBzeXNmcyBob29rc1xuIik7Ci0JCWdvdG8gZXJyb3JfcmV0OworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKHJldCA9PSBJSU9fVkFMX0lOVCkKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbCk7CisJZWxzZSBpZiAocmV0ID09IElJT19WQUxfSU5UX1BMVVNfTUlDUk8pIHsKKwkJaWYgKHZhbDIgPCAwKQorCQkJcmV0dXJuIHNwcmludGYoYnVmLCAiLSVkLiUwNnVcbiIsIHZhbCwgLXZhbDIpOworCQllbHNlCisJCQlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lMDZ1XG4iLCB2YWwsIHZhbDIpOworCX0gZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgaWlvX3dyaXRlX2NoYW5uZWxfaW5mbyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICAgY29uc3QgY2hhciAqYnVmLAorCQkJCSAgICAgIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKKwlpbnQgcmV0LCBpbnRlZ2VyID0gMCwgbWljcm8gPSAwLCBtaWNyb19tdWx0ID0gMTAwMDAwOworCWJvb2wgaW50ZWdlcl9wYXJ0ID0gdHJ1ZSwgbmVnYXRpdmUgPSBmYWxzZTsKKworCS8qIEFzc3VtZXMgZGVjaW1hbCAtIHByZWNpc2lvbiBiYXNlZCBvbiBudW1iZXIgb2YgZGlnaXRzICovCisJaWYgKCFpbmRpb19kZXYtPmluZm8tPndyaXRlX3JhdykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGJ1ZlswXSA9PSAnLScpIHsKKwkJbmVnYXRpdmUgPSB0cnVlOworCQlidWYrKzsKKwl9CisJd2hpbGUgKCpidWYpIHsKKwkJaWYgKCcwJyA8PSAqYnVmICYmICpidWYgPD0gJzknKSB7CisJCQlpZiAoaW50ZWdlcl9wYXJ0KQorCQkJCWludGVnZXIgPSBpbnRlZ2VyKjEwICsgKmJ1ZiAtICcwJzsKKwkJCWVsc2UgeworCQkJCW1pY3JvICs9IG1pY3JvX211bHQqKCpidWYgLSAnMCcpOworCQkJCWlmIChtaWNyb19tdWx0ID09IDEpCisJCQkJCWJyZWFrOworCQkJCW1pY3JvX211bHQgLz0gMTA7CisJCQl9CisJCX0gZWxzZSBpZiAoKmJ1ZiA9PSAnXG4nKSB7CisJCQlpZiAoKihidWYgKyAxKSA9PSAnXDAnKQorCQkJCWJyZWFrOworCQkJZWxzZQorCQkJCXJldHVybiAtRUlOVkFMOworCQl9IGVsc2UgaWYgKCpidWYgPT0gJy4nKSB7CisJCQlpbnRlZ2VyX3BhcnQgPSBmYWxzZTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJ1ZisrOworCX0KKwlpZiAobmVnYXRpdmUpIHsKKwkJaWYgKGludGVnZXIpCisJCQlpbnRlZ2VyID0gLWludGVnZXI7CisJCWVsc2UKKwkJCW1pY3JvID0gLW1pY3JvOwogCX0KIAorCXJldCA9IGluZGlvX2Rldi0+aW5mby0+d3JpdGVfcmF3KGluZGlvX2RldiwgdGhpc19hdHRyLT5jLAorCQkJCQkgaW50ZWdlciwgbWljcm8sIHRoaXNfYXR0ci0+YWRkcmVzcyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbnQgX19paW9fYnVpbGRfcG9zdGZpeChzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbiwKKwkJCSAgICAgICBib29sIGdlbmVyaWMsCisJCQkgICAgICAgY29uc3QgY2hhciAqcG9zdGZpeCwKKwkJCSAgICAgICBjaGFyICoqcmVzdWx0KQoreworCWNoYXIgKmFsbF9wb3N0OworCS8qIDMgb3B0aW9ucyAtIGdlbmVyaWMsIGV4dGVuZF9uYW1lLCBtb2RpZmllZCAtIGlmIGdlbmVyaWMsIGV4dGVuZF9uYW1lCisJKiBhbmQgbW9kaWZpZWQgY2Fubm90IGFwcGx5LiovCisKKwlpZiAoZ2VuZXJpYyB8fCAoIWNoYW4tPm1vZGlmaWVkICYmICFjaGFuLT5leHRlbmRfbmFtZSkpIHsKKwkJYWxsX3Bvc3QgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgIiVzIiwgcG9zdGZpeCk7CisJfSBlbHNlIGlmIChjaGFuLT5tb2RpZmllZCkgeworCQljb25zdCBjaGFyICppbnRlcm1lZGlhdGU7CisJCXN3aXRjaCAoY2hhbi0+dHlwZSkgeworCQljYXNlIElJT19JTlRFTlNJVFk6CisJCQlpbnRlcm1lZGlhdGUKKwkJCQk9IGlpb19tb2RpZmllcl9uYW1lc19saWdodFtjaGFuLT5jaGFubmVsMl07CisJCQlicmVhazsKKwkJY2FzZSBJSU9fQUNDRUw6CisJCWNhc2UgSUlPX0dZUk86CisJCWNhc2UgSUlPX01BR046CisJCWNhc2UgSUlPX0lOQ0xJOgorCQljYXNlIElJT19ST1Q6CisJCWNhc2UgSUlPX0FOR0w6CisJCQlpbnRlcm1lZGlhdGUKKwkJCQk9IGlpb19tb2RpZmllcl9uYW1lc19heGlhbFtjaGFuLT5jaGFubmVsMl07CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmIChjaGFuLT5leHRlbmRfbmFtZSkKKwkJCWFsbF9wb3N0ID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICIlc18lc18lcyIsCisJCQkJCSAgICAgaW50ZXJtZWRpYXRlLAorCQkJCQkgICAgIGNoYW4tPmV4dGVuZF9uYW1lLAorCQkJCQkgICAgIHBvc3RmaXgpOworCQllbHNlCisJCQlhbGxfcG9zdCA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiJXNfJXMiLAorCQkJCQkgICAgIGludGVybWVkaWF0ZSwKKwkJCQkJICAgICBwb3N0Zml4KTsKKwl9IGVsc2UKKwkJYWxsX3Bvc3QgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgIiVzXyVzIiwgY2hhbi0+ZXh0ZW5kX25hbWUsCisJCQkJICAgICBwb3N0Zml4KTsKKwlpZiAoYWxsX3Bvc3QgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJKnJlc3VsdCA9IGFsbF9wb3N0OworCXJldHVybiAwOworfQorCitpbnQgX19paW9fZGV2aWNlX2F0dHJfaW5pdChzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2X2F0dHIsCisJCQkgICBjb25zdCBjaGFyICpwb3N0Zml4LAorCQkJICAgc3RydWN0IGlpb19jaGFuX3NwZWMgY29uc3QgKmNoYW4sCisJCQkgICBzc2l6ZV90ICgqcmVhZGZ1bmMpKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgICAgICAgY2hhciAqYnVmKSwKKwkJCSAgIHNzaXplX3QgKCp3cml0ZWZ1bmMpKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkJY29uc3QgY2hhciAqYnVmLAorCQkJCQkJc2l6ZV90IGxlbiksCisJCQkgICBib29sIGdlbmVyaWMpCit7CisJaW50IHJldDsKKwljaGFyICpuYW1lX2Zvcm1hdCwgKmZ1bGxfcG9zdGZpeDsKKwlzeXNmc19hdHRyX2luaXQoJmRldl9hdHRyLT5hdHRyKTsKKwlyZXQgPSBfX2lpb19idWlsZF9wb3N0Zml4KGNoYW4sIGdlbmVyaWMsIHBvc3RmaXgsICZmdWxsX3Bvc3RmaXgpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3JfcmV0OworCisJLyogU3BlY2lhbCBjYXNlIGZvciB0eXBlcyB0aGF0IHVzZXMgYm90aCBjaGFubmVsIG51bWJlcnMgaW4gbmFtaW5nICovCisJaWYgKGNoYW4tPnR5cGUgPT0gSUlPX0lOX0RJRkYgJiYgIWdlbmVyaWMpCisJCW5hbWVfZm9ybWF0CisJCQk9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiJXNfJXMiLAorCQkJCSAgICBpaW9fY2hhbl90eXBlX25hbWVfc3BlY19jb21wbGV4W2NoYW4tPnR5cGVdLAorCQkJCSAgICBmdWxsX3Bvc3RmaXgpOworCWVsc2UgaWYgKGdlbmVyaWMgfHwgIWNoYW4tPmluZGV4ZWQpCisJCW5hbWVfZm9ybWF0CisJCQk9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiJXNfJXMiLAorCQkJCSAgICBpaW9fY2hhbl90eXBlX25hbWVfc3BlY19zaGFyZWRbY2hhbi0+dHlwZV0sCisJCQkJICAgIGZ1bGxfcG9zdGZpeCk7CisJZWxzZQorCQluYW1lX2Zvcm1hdAorCQkJPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgIiVzJWRfJXMiLAorCQkJCSAgICBpaW9fY2hhbl90eXBlX25hbWVfc3BlY19zaGFyZWRbY2hhbi0+dHlwZV0sCisJCQkJICAgIGNoYW4tPmNoYW5uZWwsCisJCQkJICAgIGZ1bGxfcG9zdGZpeCk7CisKKwlpZiAobmFtZV9mb3JtYXQgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yX2ZyZWVfZnVsbF9wb3N0Zml4OworCX0KKwlkZXZfYXR0ci0+YXR0ci5uYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsCisJCQkJCW5hbWVfZm9ybWF0LAorCQkJCQljaGFuLT5jaGFubmVsLAorCQkJCQljaGFuLT5jaGFubmVsMik7CisJaWYgKGRldl9hdHRyLT5hdHRyLm5hbWUgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yX2ZyZWVfbmFtZV9mb3JtYXQ7CisJfQorCisJaWYgKHJlYWRmdW5jKSB7CisJCWRldl9hdHRyLT5hdHRyLm1vZGUgfD0gU19JUlVHTzsKKwkJZGV2X2F0dHItPnNob3cgPSByZWFkZnVuYzsKKwl9CisKKwlpZiAod3JpdGVmdW5jKSB7CisJCWRldl9hdHRyLT5hdHRyLm1vZGUgfD0gU19JV1VTUjsKKwkJZGV2X2F0dHItPnN0b3JlID0gd3JpdGVmdW5jOworCX0KKwlrZnJlZShuYW1lX2Zvcm1hdCk7CisJa2ZyZWUoZnVsbF9wb3N0Zml4KTsKKworCXJldHVybiAwOworCitlcnJvcl9mcmVlX25hbWVfZm9ybWF0OgorCWtmcmVlKG5hbWVfZm9ybWF0KTsKK2Vycm9yX2ZyZWVfZnVsbF9wb3N0Zml4OgorCWtmcmVlKGZ1bGxfcG9zdGZpeCk7CiBlcnJvcl9yZXQ6CiAJcmV0dXJuIHJldDsKIH0KIAordm9pZCBfX2lpb19kZXZpY2VfYXR0cl9kZWluaXQoc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldl9hdHRyKQoreworCWtmcmVlKGRldl9hdHRyLT5hdHRyLm5hbWUpOworfQorCitpbnQgX19paW9fYWRkX2NoYW5fZGV2YXR0cihjb25zdCBjaGFyICpwb3N0Zml4LAorCQkJICAgY29uc3QgY2hhciAqZ3JvdXAsCisJCQkgICBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbiwKKwkJCSAgIHNzaXplX3QgKCpyZWFkZnVuYykoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgICAgICBjaGFyICpidWYpLAorCQkJICAgc3NpemVfdCAoKndyaXRlZnVuYykoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCQljb25zdCBjaGFyICpidWYsCisJCQkJCQlzaXplX3QgbGVuKSwKKwkJCSAgIGludCBtYXNrLAorCQkJICAgYm9vbCBnZW5lcmljLAorCQkJICAgc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGxpc3RfaGVhZCAqYXR0cl9saXN0KQoreworCWludCByZXQ7CisJc3RydWN0IGlpb19kZXZfYXR0ciAqaWlvX2F0dHIsICp0OworCisJaWlvX2F0dHIgPSBremFsbG9jKHNpemVvZiAqaWlvX2F0dHIsIEdGUF9LRVJORUwpOworCWlmIChpaW9fYXR0ciA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3JfcmV0OworCX0KKwlyZXQgPSBfX2lpb19kZXZpY2VfYXR0cl9pbml0KCZpaW9fYXR0ci0+ZGV2X2F0dHIsCisJCQkJICAgICBwb3N0Zml4LCBjaGFuLAorCQkJCSAgICAgcmVhZGZ1bmMsIHdyaXRlZnVuYywgZ2VuZXJpYyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcl9paW9fZGV2X2F0dHJfZnJlZTsKKwlpaW9fYXR0ci0+YyA9IGNoYW47CisJaWlvX2F0dHItPmFkZHJlc3MgPSBtYXNrOworCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgYXR0cl9saXN0LCBsKQorCQlpZiAoc3RyY21wKHQtPmRldl9hdHRyLmF0dHIubmFtZSwKKwkJCSAgIGlpb19hdHRyLT5kZXZfYXR0ci5hdHRyLm5hbWUpID09IDApIHsKKwkJCWlmICghZ2VuZXJpYykKKwkJCQlkZXZfZXJyKGRldiwgInRyaWVkIHRvIGRvdWJsZSByZWdpc3RlciA6ICVzXG4iLAorCQkJCQl0LT5kZXZfYXR0ci5hdHRyLm5hbWUpOworCQkJcmV0ID0gLUVCVVNZOworCQkJZ290byBlcnJvcl9kZXZpY2VfYXR0cl9kZWluaXQ7CisJCX0KKworCXJldCA9IHN5c2ZzX2FkZF9maWxlX3RvX2dyb3VwKCZkZXYtPmtvYmosCisJCQkJICAgICAgJmlpb19hdHRyLT5kZXZfYXR0ci5hdHRyLCBncm91cCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3JfZGV2aWNlX2F0dHJfZGVpbml0OworCisJbGlzdF9hZGQoJmlpb19hdHRyLT5sLCBhdHRyX2xpc3QpOworCisJcmV0dXJuIDA7CisKK2Vycm9yX2RldmljZV9hdHRyX2RlaW5pdDoKKwlfX2lpb19kZXZpY2VfYXR0cl9kZWluaXQoJmlpb19hdHRyLT5kZXZfYXR0cik7CitlcnJvcl9paW9fZGV2X2F0dHJfZnJlZToKKwlrZnJlZShpaW9fYXR0cik7CitlcnJvcl9yZXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpaW9fZGV2aWNlX2FkZF9jaGFubmVsX3N5c2ZzKHN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbywKKwkJCQkJc3RydWN0IGlpb19jaGFuX3NwZWMgY29uc3QgKmNoYW4pCit7CisJaW50IHJldCwgaTsKKworCisJaWYgKGNoYW4tPmNoYW5uZWwgPCAwKQorCQlyZXR1cm4gMDsKKwlpZiAoY2hhbi0+cHJvY2Vzc2VkX3ZhbCkKKwkJcmV0ID0gX19paW9fYWRkX2NoYW5fZGV2YXR0cigiaW5wdXQiLCBOVUxMLCBjaGFuLAorCQkJCQkgICAgICZpaW9fcmVhZF9jaGFubmVsX2luZm8sCisJCQkJCSAgICAgTlVMTCwKKwkJCQkJICAgICAwLAorCQkJCQkgICAgIDAsCisJCQkJCSAgICAgJmRldl9pbmZvLT5kZXYsCisJCQkJCSAgICAgJmRldl9pbmZvLT5jaGFubmVsX2F0dHJfbGlzdCk7CisJZWxzZQorCQlyZXQgPSBfX2lpb19hZGRfY2hhbl9kZXZhdHRyKCJyYXciLCBOVUxMLCBjaGFuLAorCQkJCQkgICAgICZpaW9fcmVhZF9jaGFubmVsX2luZm8sCisJCQkJCSAgICAgTlVMTCwKKwkJCQkJICAgICAwLAorCQkJCQkgICAgIDAsCisJCQkJCSAgICAgJmRldl9pbmZvLT5kZXYsCisJCQkJCSAgICAgJmRldl9pbmZvLT5jaGFubmVsX2F0dHJfbGlzdCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcl9yZXQ7CisKKwlmb3JfZWFjaF9zZXRfYml0KGksICZjaGFuLT5pbmZvX21hc2ssIHNpemVvZihsb25nKSo4KSB7CisJCXJldCA9IF9faWlvX2FkZF9jaGFuX2RldmF0dHIoaWlvX2NoYW5faW5mb19wb3N0Zml4W2kvMl0sCisJCQkJCSAgICAgTlVMTCwgY2hhbiwKKwkJCQkJICAgICAmaWlvX3JlYWRfY2hhbm5lbF9pbmZvLAorCQkJCQkgICAgICZpaW9fd3JpdGVfY2hhbm5lbF9pbmZvLAorCQkJCQkgICAgICgxIDw8IGkpLAorCQkJCQkgICAgICEoaSUyKSwKKwkJCQkJICAgICAmZGV2X2luZm8tPmRldiwKKwkJCQkJICAgICAmZGV2X2luZm8tPmNoYW5uZWxfYXR0cl9saXN0KTsKKwkJaWYgKHJldCA9PSAtRUJVU1kgJiYgKGklMiA9PSAwKSkgeworCQkJcmV0ID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBlcnJvcl9yZXQ7CisJfQorZXJyb3JfcmV0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGlpb19kZXZpY2VfcmVtb3ZlX2FuZF9mcmVlX3JlYWRfYXR0cihzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8sCisJCQkJCQkgc3RydWN0IGlpb19kZXZfYXR0ciAqcCkKK3sKKwlzeXNmc19yZW1vdmVfZmlsZV9mcm9tX2dyb3VwKCZkZXZfaW5mby0+ZGV2LmtvYmosCisJCQkJICAgICAmcC0+ZGV2X2F0dHIuYXR0ciwgTlVMTCk7CisJa2ZyZWUocC0+ZGV2X2F0dHIuYXR0ci5uYW1lKTsKKwlrZnJlZShwKTsKK30KKworc3RhdGljIHNzaXplX3QgaWlvX3Nob3dfZGV2X25hbWUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgY2hhciAqYnVmKQoreworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgaW5kaW9fZGV2LT5uYW1lKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIGlpb19zaG93X2Rldl9uYW1lLCBOVUxMKTsKKworc3RhdGljIGludCBpaW9fZGV2aWNlX3JlZ2lzdGVyX3N5c2ZzKHN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbykKK3sKKwlpbnQgaSwgcmV0ID0gMDsKKwlzdHJ1Y3QgaWlvX2Rldl9hdHRyICpwLCAqbjsKKworCWlmIChkZXZfaW5mby0+aW5mby0+YXR0cnMpIHsKKwkJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXZfaW5mby0+ZGV2LmtvYmosCisJCQkJCSBkZXZfaW5mby0+aW5mby0+YXR0cnMpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGRldl9pbmZvLT5kZXYucGFyZW50LAorCQkJCSJGYWlsZWQgdG8gcmVnaXN0ZXIgc3lzZnMgaG9va3NcbiIpOworCQkJZ290byBlcnJvcl9yZXQ7CisJCX0KKwl9CisKKwkvKgorCSAqIE5ldyBjaGFubmVsIHJlZ2lzdHJhdGlvbiBtZXRob2QgLSByZWxpZXMgb24gdGhlIGZhY3QgYSBncm91cCBkb2VzCisJICogIG5vdCBuZWVkIHRvIGJlIGluaXRpYWxpemVkIGlmIGl0IGlzIG5hbWUgaXMgTlVMTC4KKwkgKi8KKwlJTklUX0xJU1RfSEVBRCgmZGV2X2luZm8tPmNoYW5uZWxfYXR0cl9saXN0KTsKKwlpZiAoZGV2X2luZm8tPmNoYW5uZWxzKQorCQlmb3IgKGkgPSAwOyBpIDwgZGV2X2luZm8tPm51bV9jaGFubmVsczsgaSsrKSB7CisJCQlyZXQgPSBpaW9fZGV2aWNlX2FkZF9jaGFubmVsX3N5c2ZzKGRldl9pbmZvLAorCQkJCQkJCSAgICZkZXZfaW5mbworCQkJCQkJCSAgIC0+Y2hhbm5lbHNbaV0pOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBlcnJvcl9jbGVhcl9hdHRyczsKKwkJfQorCWlmIChkZXZfaW5mby0+bmFtZSkgeworCQlyZXQgPSBzeXNmc19hZGRfZmlsZV90b19ncm91cCgmZGV2X2luZm8tPmRldi5rb2JqLAorCQkJCQkgICAgICAmZGV2X2F0dHJfbmFtZS5hdHRyLAorCQkJCQkgICAgICBOVUxMKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3JfY2xlYXJfYXR0cnM7CisJfQorCXJldHVybiAwOworCitlcnJvcl9jbGVhcl9hdHRyczoKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbiwKKwkJCQkgJmRldl9pbmZvLT5jaGFubmVsX2F0dHJfbGlzdCwgbCkgeworCQlsaXN0X2RlbCgmcC0+bCk7CisJCWlpb19kZXZpY2VfcmVtb3ZlX2FuZF9mcmVlX3JlYWRfYXR0cihkZXZfaW5mbywgcCk7CisJfQorCWlmIChkZXZfaW5mby0+aW5mby0+YXR0cnMpCisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2X2luZm8tPmRldi5rb2JqLCBkZXZfaW5mby0+aW5mby0+YXR0cnMpOworZXJyb3JfcmV0OgorCXJldHVybiByZXQ7CisKK30KKwogc3RhdGljIHZvaWQgaWlvX2RldmljZV91bnJlZ2lzdGVyX3N5c2ZzKHN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbykKIHsKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldl9pbmZvLT5kZXYua29iaiwgZGV2X2luZm8tPmF0dHJzKTsKKworCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnAsICpuOworCWlmIChkZXZfaW5mby0+bmFtZSkKKwkJc3lzZnNfcmVtb3ZlX2ZpbGVfZnJvbV9ncm91cCgmZGV2X2luZm8tPmRldi5rb2JqLAorCQkJCQkgICAgICZkZXZfYXR0cl9uYW1lLmF0dHIsCisJCQkJCSAgICAgTlVMTCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sICZkZXZfaW5mby0+Y2hhbm5lbF9hdHRyX2xpc3QsIGwpIHsKKwkJbGlzdF9kZWwoJnAtPmwpOworCQlpaW9fZGV2aWNlX3JlbW92ZV9hbmRfZnJlZV9yZWFkX2F0dHIoZGV2X2luZm8sIHApOworCX0KKworCWlmIChkZXZfaW5mby0+aW5mby0+YXR0cnMpCisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2X2luZm8tPmRldi5rb2JqLCBkZXZfaW5mby0+aW5mby0+YXR0cnMpOwogfQogCiAvKiBSZXR1cm4gYSBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlICovCkBAIC01MzgsNDggKzc5OSwyMDkgQEAKIH0KIEVYUE9SVF9TWU1CT0woaWlvX2ZyZWVfaWRhX3ZhbCk7CiAKLXN0YXRpYyBpbnQgaWlvX2RldmljZV9yZWdpc3Rlcl9pZChzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8sCi0JCQkJICBzdHJ1Y3QgaWRhICp0aGlzX2lkYSkKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaWlvX2V2X3R5cGVfdGV4dFtdID0geworCVtJSU9fRVZfVFlQRV9USFJFU0hdID0gInRocmVzaCIsCisJW0lJT19FVl9UWVBFX01BR10gPSAibWFnIiwKKwlbSUlPX0VWX1RZUEVfUk9DXSA9ICJyb2MiCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGlpb19ldl9kaXJfdGV4dFtdID0geworCVtJSU9fRVZfRElSX0VJVEhFUl0gPSAiZWl0aGVyIiwKKwlbSUlPX0VWX0RJUl9SSVNJTkddID0gInJpc2luZyIsCisJW0lJT19FVl9ESVJfRkFMTElOR10gPSAiZmFsbGluZyIKK307CisKK3N0YXRpYyBzc2l6ZV90IGlpb19ldl9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCQkgIHNpemVfdCBsZW4pCiB7Ci0JZGV2X2luZm8tPmlkID0gaWlvX2dldF9uZXdfaWRhX3ZhbCgmaWlvX2lkYSk7Ci0JaWYgKGRldl9pbmZvLT5pZCA8IDApCi0JCXJldHVybiBkZXZfaW5mby0+aWQ7Ci0JcmV0dXJuIDA7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKKwlpbnQgcmV0OworCWJvb2wgdmFsOworCisJcmV0ID0gc3RydG9ib29sKGJ1ZiwgJnZhbCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBpbmRpb19kZXYtPmluZm8tPndyaXRlX2V2ZW50X2NvbmZpZyhpbmRpb19kZXYsCisJCQkJCQkgIHRoaXNfYXR0ci0+YWRkcmVzcywKKwkJCQkJCSAgdmFsKTsKKwlyZXR1cm4gKHJldCA8IDApID8gcmV0IDogbGVuOwogfQogCi1zdGF0aWMgdm9pZCBpaW9fZGV2aWNlX3VucmVnaXN0ZXJfaWQoc3RydWN0IGlpb19kZXYgKmRldl9pbmZvKQorc3RhdGljIHNzaXplX3QgaWlvX2V2X3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgY2hhciAqYnVmKQogewotCWlpb19mcmVlX2lkYV92YWwoJmlpb19pZGEsIGRldl9pbmZvLT5pZCk7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKKwlpbnQgdmFsID0gaW5kaW9fZGV2LT5pbmZvLT5yZWFkX2V2ZW50X2NvbmZpZyhpbmRpb19kZXYsCisJCQkJCQkgICAgIHRoaXNfYXR0ci0+YWRkcmVzcyk7CisKKwlpZiAodmFsIDwgMCkKKwkJcmV0dXJuIHZhbDsKKwllbHNlCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB2YWwpOworfQorCitzdGF0aWMgc3NpemVfdCBpaW9fZXZfdmFsdWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSBjaGFyICpidWYpCit7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKKwlpbnQgdmFsLCByZXQ7CisKKwlyZXQgPSBpbmRpb19kZXYtPmluZm8tPnJlYWRfZXZlbnRfdmFsdWUoaW5kaW9fZGV2LAorCQkJCQkJdGhpc19hdHRyLT5hZGRyZXNzLCAmdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB2YWwpOworfQorCitzdGF0aWMgc3NpemVfdCBpaW9fZXZfdmFsdWVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICBjb25zdCBjaGFyICpidWYsCisJCQkJICBzaXplX3QgbGVuKQoreworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IHJldDsKKworCXJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBpbmRpb19kZXYtPmluZm8tPndyaXRlX2V2ZW50X3ZhbHVlKGluZGlvX2RldiwgdGhpc19hdHRyLT5hZGRyZXNzLAorCQkJCQkJIHZhbCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50IGlpb19kZXZpY2VfYWRkX2V2ZW50X3N5c2ZzKHN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbywKKwkJCQkgICAgICBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbikKK3sKKworCWludCByZXQgPSAwLCBpLCBtYXNrOworCWNoYXIgKnBvc3RmaXg7CisJaWYgKCFjaGFuLT5ldmVudF9tYXNrKQorCQlyZXR1cm4gMDsKKworCWZvcl9lYWNoX3NldF9iaXQoaSwgJmNoYW4tPmV2ZW50X21hc2ssIHNpemVvZihjaGFuLT5ldmVudF9tYXNrKSo4KSB7CisJCXBvc3RmaXggPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgIiVzXyVzX2VuIiwKKwkJCQkgICAgaWlvX2V2X3R5cGVfdGV4dFtpL0lJT19FVl9UWVBFX01BWF0sCisJCQkJICAgIGlpb19ldl9kaXJfdGV4dFtpJUlJT19FVl9UWVBFX01BWF0pOworCQlpZiAocG9zdGZpeCA9PSBOVUxMKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBlcnJvcl9yZXQ7CisJCX0KKwkJc3dpdGNoIChjaGFuLT50eXBlKSB7CisJCQkvKiBTd2l0Y2ggdGhpcyB0byBhIHRhYmxlIGF0IHNvbWUgcG9pbnQgKi8KKwkJY2FzZSBJSU9fSU46CisJCQltYXNrID0gSUlPX1VOTU9EX0VWRU5UX0NPREUoY2hhbi0+dHlwZSwgY2hhbi0+Y2hhbm5lbCwKKwkJCQkJCSAgICBpL0lJT19FVl9UWVBFX01BWCwKKwkJCQkJCSAgICBpJUlJT19FVl9UWVBFX01BWCk7CisJCQlicmVhazsKKwkJY2FzZSBJSU9fQUNDRUw6CisJCQltYXNrID0gSUlPX01PRF9FVkVOVF9DT0RFKGNoYW4tPnR5cGUsIDAsIGNoYW4tPmNoYW5uZWwsCisJCQkJCQkgIGkvSUlPX0VWX1RZUEVfTUFYLAorCQkJCQkJICBpJUlJT19FVl9UWVBFX01BWCk7CisJCQlicmVhazsKKwkJY2FzZSBJSU9fSU5fRElGRjoKKwkJCW1hc2sgPSBJSU9fTU9EX0VWRU5UX0NPREUoY2hhbi0+dHlwZSwgY2hhbi0+Y2hhbm5lbCwKKwkJCQkJCSAgY2hhbi0+Y2hhbm5lbDIsCisJCQkJCQkgIGkvSUlPX0VWX1RZUEVfTUFYLAorCQkJCQkJICBpJUlJT19FVl9UWVBFX01BWCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX0lORk8gImN1cnJlbnRseSB1bmhhbmRsZWQgdHlwZSBvZiBldmVudFxuIik7CisJCX0KKwkJcmV0ID0gX19paW9fYWRkX2NoYW5fZGV2YXR0cihwb3N0Zml4LAorCQkJCQkgICAgIE5VTEwsCisJCQkJCSAgICAgY2hhbiwKKwkJCQkJICAgICAmaWlvX2V2X3N0YXRlX3Nob3csCisJCQkJCSAgICAgaWlvX2V2X3N0YXRlX3N0b3JlLAorCQkJCQkgICAgIG1hc2ssCisJCQkJCSAgICAgLypIQUNLLiAtIGxpbWl0cyB1cyB0byBvbmUKKwkJCQkJICAgICAgIGV2ZW50IGludGVyZmFjZSAtIGZpeCBieQorCQkJCQkgICAgICAgZXh0ZW5kaW5nIHRoZSBiaXRtYXNrIC0gYnV0CisJCQkJCSAgICAgICBob3cgZmFyKi8KKwkJCQkJICAgICAwLAorCQkJCQkgICAgICZkZXZfaW5mby0+ZXZlbnRfaW50ZXJmYWNlc1swXS5kZXYsCisJCQkJCSAgICAgJmRldl9pbmZvLT5ldmVudF9pbnRlcmZhY2VzWzBdLgorCQkJCQkgICAgIGRldl9hdHRyX2xpc3QpOworCQlrZnJlZShwb3N0Zml4KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3JfcmV0OworCisJCXBvc3RmaXggPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgIiVzXyVzX3ZhbHVlIiwKKwkJCQkgICAgaWlvX2V2X3R5cGVfdGV4dFtpL0lJT19FVl9UWVBFX01BWF0sCisJCQkJICAgIGlpb19ldl9kaXJfdGV4dFtpJUlJT19FVl9UWVBFX01BWF0pOworCQlpZiAocG9zdGZpeCA9PSBOVUxMKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBlcnJvcl9yZXQ7CisJCX0KKwkJcmV0ID0gX19paW9fYWRkX2NoYW5fZGV2YXR0cihwb3N0Zml4LCBOVUxMLCBjaGFuLAorCQkJCQkgICAgIGlpb19ldl92YWx1ZV9zaG93LAorCQkJCQkgICAgIGlpb19ldl92YWx1ZV9zdG9yZSwKKwkJCQkJICAgICBtYXNrLAorCQkJCQkgICAgIDAsCisJCQkJCSAgICAgJmRldl9pbmZvLT5ldmVudF9pbnRlcmZhY2VzWzBdCisJCQkJCSAgICAgLmRldiwKKwkJCQkJICAgICAmZGV2X2luZm8tPmV2ZW50X2ludGVyZmFjZXNbMF0KKwkJCQkJICAgICAuZGV2X2F0dHJfbGlzdCk7CisJCWtmcmVlKHBvc3RmaXgpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcl9yZXQ7CisKKwl9CisKK2Vycm9yX3JldDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19paW9fcmVtb3ZlX2FsbF9ldmVudF9zeXNmcyhzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8sCisJCQkJCQljb25zdCBjaGFyICpncm91cG5hbWUsCisJCQkJCQlpbnQgbnVtKQoreworCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnAsICpuOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLAorCQkJCSAmZGV2X2luZm8tPmV2ZW50X2ludGVyZmFjZXNbbnVtXS4KKwkJCQkgZGV2X2F0dHJfbGlzdCwgbCkgeworCQlzeXNmc19yZW1vdmVfZmlsZV9mcm9tX2dyb3VwKCZkZXZfaW5mbworCQkJCQkgICAgIC0+ZXZlbnRfaW50ZXJmYWNlc1tudW1dLmRldi5rb2JqLAorCQkJCQkgICAgICZwLT5kZXZfYXR0ci5hdHRyLAorCQkJCQkgICAgIGdyb3VwbmFtZSk7CisJCWtmcmVlKHAtPmRldl9hdHRyLmF0dHIubmFtZSk7CisJCWtmcmVlKHApOworCX0KIH0KIAogc3RhdGljIGlubGluZSBpbnQgX19paW9fYWRkX2V2ZW50X2NvbmZpZ19hdHRycyhzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8sIGludCBpKQogeworCWludCBqOwogCWludCByZXQ7Ci0JLypwIGZvciBhZGRpbmcsIHEgZm9yIHJlbW92aW5nICovCi0Jc3RydWN0IGF0dHJpYnV0ZSAqKmF0dHJwLCAqKmF0dHJxOwotCi0JaWYgKGRldl9pbmZvLT5ldmVudF9jb25mX2F0dHJzICYmIGRldl9pbmZvLT5ldmVudF9jb25mX2F0dHJzW2ldLmF0dHJzKSB7Ci0JCWF0dHJwID0gZGV2X2luZm8tPmV2ZW50X2NvbmZfYXR0cnNbaV0uYXR0cnM7Ci0JCXdoaWxlICgqYXR0cnApIHsKLQkJCXJldCA9ICBzeXNmc19hZGRfZmlsZV90b19ncm91cCgmZGV2X2luZm8tPmRldi5rb2JqLAotCQkJCQkJICAgICAgICphdHRycCwKLQkJCQkJCSAgICAgICBkZXZfaW5mbwotCQkJCQkJICAgICAgIC0+ZXZlbnRfYXR0cnNbaV0ubmFtZSk7CisJSU5JVF9MSVNUX0hFQUQoJmRldl9pbmZvLT5ldmVudF9pbnRlcmZhY2VzWzBdLmRldl9hdHRyX2xpc3QpOworCS8qIER5bmljYWxseSBjcmVhdGVkIGZyb20gdGhlIGNoYW5uZWxzIGFycmF5ICovCisJaWYgKGRldl9pbmZvLT5jaGFubmVscykgeworCQlmb3IgKGogPSAwOyBqIDwgZGV2X2luZm8tPm51bV9jaGFubmVsczsgaisrKSB7CisJCQlyZXQgPSBpaW9fZGV2aWNlX2FkZF9ldmVudF9zeXNmcyhkZXZfaW5mbywKKwkJCQkJCQkgJmRldl9pbmZvCisJCQkJCQkJIC0+Y2hhbm5lbHNbal0pOwogCQkJaWYgKHJldCkKLQkJCQlnb3RvIGVycm9yX3JldDsKLQkJCWF0dHJwKys7CisJCQkJZ290byBlcnJvcl9jbGVhcl9hdHRyczsKIAkJfQogCX0KIAlyZXR1cm4gMDsKIAotZXJyb3JfcmV0OgotCWF0dHJxID0gZGV2X2luZm8tPmV2ZW50X2NvbmZfYXR0cnNbaV0uYXR0cnM7Ci0Jd2hpbGUgKGF0dHJxICE9IGF0dHJwKSB7Ci0JCQlzeXNmc19yZW1vdmVfZmlsZV9mcm9tX2dyb3VwKCZkZXZfaW5mby0+ZGV2LmtvYmosCi0JCQkJCSAgICAgKmF0dHJxLAotCQkJCQkgICAgIGRldl9pbmZvLT5ldmVudF9hdHRyc1tpXS5uYW1lKTsKLQkJYXR0cnErKzsKLQl9CitlcnJvcl9jbGVhcl9hdHRyczoKKwlfX2lpb19yZW1vdmVfYWxsX2V2ZW50X3N5c2ZzKGRldl9pbmZvLCBOVUxMLCBpKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC01ODcsMjAgKzEwMDksNyBAQAogc3RhdGljIGlubGluZSBpbnQgX19paW9fcmVtb3ZlX2V2ZW50X2NvbmZpZ19hdHRycyhzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8sCiAJCQkJCQkgIGludCBpKQogewotCXN0cnVjdCBhdHRyaWJ1dGUgKiphdHRycTsKLQotCWlmIChkZXZfaW5mby0+ZXZlbnRfY29uZl9hdHRycwotCQkmJiBkZXZfaW5mby0+ZXZlbnRfY29uZl9hdHRyc1tpXS5hdHRycykgewotCQlhdHRycSA9IGRldl9pbmZvLT5ldmVudF9jb25mX2F0dHJzW2ldLmF0dHJzOwotCQl3aGlsZSAoKmF0dHJxKSB7Ci0JCQlzeXNmc19yZW1vdmVfZmlsZV9mcm9tX2dyb3VwKCZkZXZfaW5mby0+ZGV2LmtvYmosCi0JCQkJCQkgICAgICphdHRycSwKLQkJCQkJCSAgICAgZGV2X2luZm8KLQkJCQkJCSAgICAgLT5ldmVudF9hdHRyc1tpXS5uYW1lKTsKLQkJCWF0dHJxKys7Ci0JCX0KLQl9Ci0KKwlfX2lpb19yZW1vdmVfYWxsX2V2ZW50X3N5c2ZzKGRldl9pbmZvLCBOVUxMLCBpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjA4LDM5ICsxMDE3LDIzIEBACiB7CiAJaW50IHJldCA9IDAsIGksIGo7CiAKLQlpZiAoZGV2X2luZm8tPm51bV9pbnRlcnJ1cHRfbGluZXMgPT0gMCkKKwlpZiAoZGV2X2luZm8tPmluZm8tPm51bV9pbnRlcnJ1cHRfbGluZXMgPT0gMCkKIAkJcmV0dXJuIDA7CiAKIAlkZXZfaW5mby0+ZXZlbnRfaW50ZXJmYWNlcyA9CiAJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpaW9fZXZlbnRfaW50ZXJmYWNlKQotCQkJKmRldl9pbmZvLT5udW1faW50ZXJydXB0X2xpbmVzLAorCQkJKmRldl9pbmZvLT5pbmZvLT5udW1faW50ZXJydXB0X2xpbmVzLAogCQkJR0ZQX0tFUk5FTCk7CiAJaWYgKGRldl9pbmZvLT5ldmVudF9pbnRlcmZhY2VzID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9yZXQ7CiAJfQogCi0JZGV2X2luZm8tPmludGVycnVwdHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaWlvX2ludGVycnVwdCAqKQotCQkJCSAgICAgICAqZGV2X2luZm8tPm51bV9pbnRlcnJ1cHRfbGluZXMsCi0JCQkJICAgICAgIEdGUF9LRVJORUwpOwotCWlmIChkZXZfaW5mby0+aW50ZXJydXB0cyA9PSBOVUxMKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyb3JfZnJlZV9ldmVudF9pbnRlcmZhY2VzOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBkZXZfaW5mby0+bnVtX2ludGVycnVwdF9saW5lczsgaSsrKSB7Ci0JCWRldl9pbmZvLT5ldmVudF9pbnRlcmZhY2VzW2ldLm93bmVyID0gZGV2X2luZm8tPmRyaXZlcl9tb2R1bGU7Ci0KLQkJc25wcmludGYoZGV2X2luZm8tPmV2ZW50X2ludGVyZmFjZXNbaV0uX25hbWUsIDIwLAotCQkJICIlczpldmVudCVkIiwKLQkJCSBkZXZfbmFtZSgmZGV2X2luZm8tPmRldiksCi0JCQkgaSk7Ci0KKwlmb3IgKGkgPSAwOyBpIDwgZGV2X2luZm8tPmluZm8tPm51bV9pbnRlcnJ1cHRfbGluZXM7IGkrKykgewogCQlyZXQgPSBpaW9fc2V0dXBfZXZfaW50KCZkZXZfaW5mby0+ZXZlbnRfaW50ZXJmYWNlc1tpXSwKLQkJCQkgICAgICAgKGNvbnN0IGNoYXIgKikoZGV2X2luZm8KLQkJCQkJCSAgICAgIC0+ZXZlbnRfaW50ZXJmYWNlc1tpXQotCQkJCQkJICAgICAgLl9uYW1lKSwKLQkJCQkgICAgICAgZGV2X2luZm8tPmRyaXZlcl9tb2R1bGUsCisJCQkJICAgICAgIGRldl9uYW1lKCZkZXZfaW5mby0+ZGV2KSwKKwkJCQkgICAgICAgaSwKKwkJCQkgICAgICAgZGV2X2luZm8tPmluZm8tPmRyaXZlcl9tb2R1bGUsCiAJCQkJICAgICAgICZkZXZfaW5mby0+ZGV2KTsKIAkJaWYgKHJldCkgewogCQkJZGV2X2VycigmZGV2X2luZm8tPmRldiwKQEAgLTY1MCwxMCArMTA0MywxMyBAQAogCiAJCWRldl9zZXRfZHJ2ZGF0YSgmZGV2X2luZm8tPmV2ZW50X2ludGVyZmFjZXNbaV0uZGV2LAogCQkJCSh2b2lkICopZGV2X2luZm8pOwotCQlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldl9pbmZvCi0JCQkJCS0+ZXZlbnRfaW50ZXJmYWNlc1tpXQotCQkJCQkuZGV2LmtvYmosCi0JCQkJCSZkZXZfaW5mby0+ZXZlbnRfYXR0cnNbaV0pOworCisJCWlmIChkZXZfaW5mby0+aW5mby0+ZXZlbnRfYXR0cnMgIT0gTlVMTCkKKwkJCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2X2luZm8KKwkJCQkJCSAtPmV2ZW50X2ludGVyZmFjZXNbaV0KKwkJCQkJCSAuZGV2LmtvYmosCisJCQkJCQkgJmRldl9pbmZvLT5pbmZvCisJCQkJCQkgLT5ldmVudF9hdHRyc1tpXSk7CiAKIAkJaWYgKHJldCkgewogCQkJZGV2X2VycigmZGV2X2luZm8tPmRldiwKQEAgLTY2Miw3ICsxMDU4LDcgQEAKIAkJfQogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBkZXZfaW5mby0+bnVtX2ludGVycnVwdF9saW5lczsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGRldl9pbmZvLT5pbmZvLT5udW1faW50ZXJydXB0X2xpbmVzOyBpKyspIHsKIAkJcmV0ID0gX19paW9fYWRkX2V2ZW50X2NvbmZpZ19hdHRycyhkZXZfaW5mbywgaSk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycm9yX3VucmVnaXN0ZXJfY29uZmlnX2F0dHJzOwpAQCAtNjczLDE3ICsxMDY5LDE2IEBACiBlcnJvcl91bnJlZ2lzdGVyX2NvbmZpZ19hdHRyczoKIAlmb3IgKGogPSAwOyBqIDwgaTsgaisrKQogCQlfX2lpb19yZW1vdmVfZXZlbnRfY29uZmlnX2F0dHJzKGRldl9pbmZvLCBpKTsKLQlpID0gZGV2X2luZm8tPm51bV9pbnRlcnJ1cHRfbGluZXMgLSAxOworCWkgPSBkZXZfaW5mby0+aW5mby0+bnVtX2ludGVycnVwdF9saW5lcyAtIDE7CiBlcnJvcl9yZW1vdmVfc3lzZnNfaW50ZXJmYWNlczoKIAlmb3IgKGogPSAwOyBqIDwgaTsgaisrKQotCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldl9pbmZvCisJCWlmIChkZXZfaW5mby0+aW5mby0+ZXZlbnRfYXR0cnMgIT0gTlVMTCkKKwkJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2X2luZm8KIAkJCQkgICAtPmV2ZW50X2ludGVyZmFjZXNbal0uZGV2LmtvYmosCi0JCQkJICAgJmRldl9pbmZvLT5ldmVudF9hdHRyc1tqXSk7CisJCQkJICAgJmRldl9pbmZvLT5pbmZvLT5ldmVudF9hdHRyc1tqXSk7CiBlcnJvcl9mcmVlX3NldHVwX2V2X2ludHM6CiAJZm9yIChqID0gMDsgaiA8IGk7IGorKykKIAkJaWlvX2ZyZWVfZXZfaW50KCZkZXZfaW5mby0+ZXZlbnRfaW50ZXJmYWNlc1tqXSk7Ci0Ja2ZyZWUoZGV2X2luZm8tPmludGVycnVwdHMpOwotZXJyb3JfZnJlZV9ldmVudF9pbnRlcmZhY2VzOgogCWtmcmVlKGRldl9pbmZvLT5ldmVudF9pbnRlcmZhY2VzKTsKIGVycm9yX3JldDoKIApAQCAtNjk0LDI1ICsxMDg5LDI1IEBACiB7CiAJaW50IGk7CiAKLQlpZiAoZGV2X2luZm8tPm51bV9pbnRlcnJ1cHRfbGluZXMgPT0gMCkKKwlpZiAoZGV2X2luZm8tPmluZm8tPm51bV9pbnRlcnJ1cHRfbGluZXMgPT0gMCkKIAkJcmV0dXJuOwotCWZvciAoaSA9IDA7IGkgPCBkZXZfaW5mby0+bnVtX2ludGVycnVwdF9saW5lczsgaSsrKQotCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldl9pbmZvCi0JCQkJICAgLT5ldmVudF9pbnRlcmZhY2VzW2ldLmRldi5rb2JqLAotCQkJCSAgICZkZXZfaW5mby0+ZXZlbnRfYXR0cnNbaV0pOworCWZvciAoaSA9IDA7IGkgPCBkZXZfaW5mby0+aW5mby0+bnVtX2ludGVycnVwdF9saW5lczsgaSsrKSB7CisJCV9faWlvX3JlbW92ZV9ldmVudF9jb25maWdfYXR0cnMoZGV2X2luZm8sIGkpOworCQlpZiAoZGV2X2luZm8tPmluZm8tPmV2ZW50X2F0dHJzICE9IE5VTEwpCisJCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldl9pbmZvCisJCQkJCSAgIC0+ZXZlbnRfaW50ZXJmYWNlc1tpXS5kZXYua29iaiwKKwkJCQkJICAgJmRldl9pbmZvLT5pbmZvLT5ldmVudF9hdHRyc1tpXSk7CisJfQogCi0JZm9yIChpID0gMDsgaSA8IGRldl9pbmZvLT5udW1faW50ZXJydXB0X2xpbmVzOyBpKyspCisJZm9yIChpID0gMDsgaSA8IGRldl9pbmZvLT5pbmZvLT5udW1faW50ZXJydXB0X2xpbmVzOyBpKyspCiAJCWlpb19mcmVlX2V2X2ludCgmZGV2X2luZm8tPmV2ZW50X2ludGVyZmFjZXNbaV0pOwotCWtmcmVlKGRldl9pbmZvLT5pbnRlcnJ1cHRzKTsKIAlrZnJlZShkZXZfaW5mby0+ZXZlbnRfaW50ZXJmYWNlcyk7CiB9CiAKIHN0YXRpYyB2b2lkIGlpb19kZXZfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiB7Ci0Jc3RydWN0IGlpb19kZXYgKmRldiA9IHRvX2lpb19kZXYoZGV2aWNlKTsKLQogCWlpb19wdXQoKTsKLQlrZnJlZShkZXYpOworCWtmcmVlKHRvX2lpb19kZXYoZGV2aWNlKSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX3R5cGUgaWlvX2Rldl90eXBlID0gewpAQCAtNzIwLDkgKzExMTUsMjAgQEAKIAkucmVsZWFzZSA9IGlpb19kZXZfcmVsZWFzZSwKIH07CiAKLXN0cnVjdCBpaW9fZGV2ICppaW9fYWxsb2NhdGVfZGV2aWNlKHZvaWQpCitzdHJ1Y3QgaWlvX2RldiAqaWlvX2FsbG9jYXRlX2RldmljZShpbnQgc2l6ZW9mX3ByaXYpCiB7Ci0Jc3RydWN0IGlpb19kZXYgKmRldiA9IGt6YWxsb2Moc2l6ZW9mICpkZXYsIEdGUF9LRVJORUwpOworCXN0cnVjdCBpaW9fZGV2ICpkZXY7CisJc2l6ZV90IGFsbG9jX3NpemU7CisKKwlhbGxvY19zaXplID0gc2l6ZW9mKHN0cnVjdCBpaW9fZGV2KTsKKwlpZiAoc2l6ZW9mX3ByaXYpIHsKKwkJYWxsb2Nfc2l6ZSA9IEFMSUdOKGFsbG9jX3NpemUsIElJT19BTElHTik7CisJCWFsbG9jX3NpemUgKz0gc2l6ZW9mX3ByaXY7CisJfQorCS8qIGVuc3VyZSAzMi1ieXRlIGFsaWdubWVudCBvZiB3aG9sZSBjb25zdHJ1Y3QgPyAqLworCWFsbG9jX3NpemUgKz0gSUlPX0FMSUdOIC0gMTsKKworCWRldiA9IGt6YWxsb2MoYWxsb2Nfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoZGV2KSB7CiAJCWRldi0+ZGV2LnR5cGUgPSAmaWlvX2Rldl90eXBlOwpAQCAtNzQ4LDggKzExNTQsOSBAQAogewogCWludCByZXQ7CiAKLQlyZXQgPSBpaW9fZGV2aWNlX3JlZ2lzdGVyX2lkKGRldl9pbmZvLCAmaWlvX2lkYSk7Ci0JaWYgKHJldCkgeworCWRldl9pbmZvLT5pZCA9IGlpb19nZXRfbmV3X2lkYV92YWwoJmlpb19pZGEpOworCWlmIChkZXZfaW5mby0+aWQgPCAwKSB7CisJCXJldCA9IGRldl9pbmZvLT5pZDsKIAkJZGV2X2VycigmZGV2X2luZm8tPmRldiwgIkZhaWxlZCB0byBnZXQgaWRcbiIpOwogCQlnb3RvIGVycm9yX3JldDsKIAl9CkBAIC03ODAsNyArMTE4Nyw3IEBACiBlcnJvcl9kZWxfZGV2aWNlOgogCWRldmljZV9kZWwoJmRldl9pbmZvLT5kZXYpOwogZXJyb3JfZnJlZV9pZGE6Ci0JaWlvX2RldmljZV91bnJlZ2lzdGVyX2lkKGRldl9pbmZvKTsKKwlpaW9fZnJlZV9pZGFfdmFsKCZpaW9faWRhLCBkZXZfaW5mby0+aWQpOwogZXJyb3JfcmV0OgogCXJldHVybiByZXQ7CiB9CkBAIC03OTIsNyArMTE5OSw3IEBACiAJCWlpb19kZXZpY2VfdW5yZWdpc3Rlcl90cmlnZ2VyX2NvbnN1bWVyKGRldl9pbmZvKTsKIAlpaW9fZGV2aWNlX3VucmVnaXN0ZXJfZXZlbnRzZXQoZGV2X2luZm8pOwogCWlpb19kZXZpY2VfdW5yZWdpc3Rlcl9zeXNmcyhkZXZfaW5mbyk7Ci0JaWlvX2RldmljZV91bnJlZ2lzdGVyX2lkKGRldl9pbmZvKTsKKwlpaW9fZnJlZV9pZGFfdmFsKCZpaW9faWRhLCBkZXZfaW5mby0+aWQpOwogCWRldmljZV91bnJlZ2lzdGVyKCZkZXZfaW5mby0+ZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0woaWlvX2RldmljZV91bnJlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLXJpbmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLXJpbmcuYwppbmRleCBiZDQzNzNhLi44NDNlYjgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby1yaW5nLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tcmluZy5jCkBAIC0xOCwzNyArMTgsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogCiAjaW5jbHVkZSAiaWlvLmgiCiAjaW5jbHVkZSAicmluZ19nZW5lcmljLmgiCiAKLWludCBpaW9fcHVzaF9yaW5nX2V2ZW50KHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmdfYnVmLAotCQkgICAgICAgaW50IGV2ZW50X2NvZGUsCi0JCSAgICAgICBzNjQgdGltZXN0YW1wKQotewotCXJldHVybiBfX2lpb19wdXNoX2V2ZW50KCZyaW5nX2J1Zi0+ZXZfaW50LAotCQkJICAgICAgIGV2ZW50X2NvZGUsCi0JCQkgICAgICAgdGltZXN0YW1wLAotCQkJICAgICAgICZyaW5nX2J1Zi0+c2hhcmVkX2V2X3BvaW50ZXIpOwotfQotRVhQT1JUX1NZTUJPTChpaW9fcHVzaF9yaW5nX2V2ZW50KTsKLQotaW50IGlpb19wdXNoX29yX2VzY2FsbGF0ZV9yaW5nX2V2ZW50KHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmdfYnVmLAotCQkJCSAgICBpbnQgZXZlbnRfY29kZSwKLQkJCQkgICAgczY0IHRpbWVzdGFtcCkKLXsKLQlpZiAocmluZ19idWYtPnNoYXJlZF9ldl9wb2ludGVyLmV2X3ApCi0JCV9faWlvX2NoYW5nZV9ldmVudChyaW5nX2J1Zi0+c2hhcmVkX2V2X3BvaW50ZXIuZXZfcCwKLQkJCQkgICBldmVudF9jb2RlLAotCQkJCSAgIHRpbWVzdGFtcCk7Ci0JZWxzZQotCQlyZXR1cm4gaWlvX3B1c2hfcmluZ19ldmVudChyaW5nX2J1ZiwKLQkJCQkJICBldmVudF9jb2RlLAotCQkJCQkgIHRpbWVzdGFtcCk7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGlpb19wdXNoX29yX2VzY2FsbGF0ZV9yaW5nX2V2ZW50KTsKLQogLyoqCiAgKiBpaW9fcmluZ19vcGVuKCkgLSBjaHJkZXYgZmlsZSBvcGVuIGZvciByaW5nIGJ1ZmZlciBhY2Nlc3MKICAqCkBAIC02Miw4ICszNiw4IEBACiAJc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmIgPSBoYW5kLT5wcml2YXRlOwogCiAJZmlscC0+cHJpdmF0ZV9kYXRhID0gaGFuZC0+cHJpdmF0ZTsKLQlpZiAocmItPmFjY2Vzcy5tYXJrX2luX3VzZSkKLQkJcmItPmFjY2Vzcy5tYXJrX2luX3VzZShyYik7CisJaWYgKHJiLT5hY2Nlc3MtPm1hcmtfaW5fdXNlKQorCQlyYi0+YWNjZXNzLT5tYXJrX2luX3VzZShyYik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTgxLDE4NCArNTUsMzE2IEBACiAJc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmIgPSBoYW5kLT5wcml2YXRlOwogCiAJY2xlYXJfYml0KElJT19CVVNZX0JJVF9QT1MsICZyYi0+YWNjZXNzX2hhbmRsZXIuZmxhZ3MpOwotCWlmIChyYi0+YWNjZXNzLnVubWFya19pbl91c2UpCi0JCXJiLT5hY2Nlc3MudW5tYXJrX2luX3VzZShyYik7CisJaWYgKHJiLT5hY2Nlc3MtPnVubWFya19pbl91c2UpCisJCXJiLT5hY2Nlc3MtPnVubWFya19pbl91c2UocmIpOwogCiAJcmV0dXJuIDA7CiB9CiAKIC8qKgotICogaWlvX3JpbmdfcmlwX291dGVyKCkgLSBjaHJkZXYgcmVhZCBmb3IgcmluZyBidWZmZXIgYWNjZXNzCisgKiBpaW9fcmluZ19yZWFkX2ZpcnN0X25fb3V0ZXIoKSAtIGNocmRldiByZWFkIGZvciByaW5nIGJ1ZmZlciBhY2Nlc3MKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHJlbGllcyBvbiBhbGwgcmluZyBidWZmZXIgaW1wbGVtZW50YXRpb25zIGhhdmluZyBhbgogICogaWlvX3JpbmcgX2J1ZmVyIGFzIHRoZWlyIGZpcnN0IGVsZW1lbnQuCiAgKiovCi1zdGF0aWMgc3NpemVfdCBpaW9fcmluZ19yaXBfb3V0ZXIoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsCi0JCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqZl9wcykKK3N0YXRpYyBzc2l6ZV90IGlpb19yaW5nX3JlYWRfZmlyc3Rfbl9vdXRlcihzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkgIHNpemVfdCBuLCBsb2ZmX3QgKmZfcHMpCiB7CiAJc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmIgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JaW50IHJldCwgZGVhZF9vZmZzZXQ7CiAKLQkvKiByaXAgbG90cyBtdXN0IGV4aXN0LiAqLwotCWlmICghcmItPmFjY2Vzcy5yaXBfbG90cykKKwlpZiAoIXJiLT5hY2Nlc3MtPnJlYWRfZmlyc3RfbikKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0ID0gcmItPmFjY2Vzcy5yaXBfbG90cyhyYiwgY291bnQsIGJ1ZiwgJmRlYWRfb2Zmc2V0KTsKKwlyZXR1cm4gcmItPmFjY2Vzcy0+cmVhZF9maXJzdF9uKHJiLCBuLCBidWYpOworfQogCi0JcmV0dXJuIHJldDsKKy8qKgorICogaWlvX3JpbmdfcG9sbCgpIC0gcG9sbCB0aGUgcmluZyB0byBmaW5kIG91dCBpZiBpdCBoYXMgZGF0YQorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGlpb19yaW5nX3BvbGwoc3RydWN0IGZpbGUgKmZpbHAsCisJCQkJICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCit7CisJc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmIgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisKKwlwb2xsX3dhaXQoZmlscCwgJnJiLT5wb2xscSwgd2FpdCk7CisJaWYgKHJiLT5zdHVmZnRvcmVhZCkKKwkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07CisJLyogbmVlZCBhIHdheSBvZiBrbm93aW5nIGlmIHRoZXJlIG1heSBiZSBlbm91Z2ggZGF0YS4uLiAqLworCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpaW9fcmluZ19maWxlb3BzID0gewotCS5yZWFkID0gaWlvX3JpbmdfcmlwX291dGVyLAorCS5yZWFkID0gaWlvX3JpbmdfcmVhZF9maXJzdF9uX291dGVyLAogCS5yZWxlYXNlID0gaWlvX3JpbmdfcmVsZWFzZSwKIAkub3BlbiA9IGlpb19yaW5nX29wZW4sCisJLnBvbGwgPSBpaW9fcmluZ19wb2xsLAogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsgPSBub29wX2xsc2VlaywKIH07CiAKLS8qKgotICogX19paW9fcmVxdWVzdF9yaW5nX2J1ZmZlcl9ldmVudF9jaHJkZXYoKSAtIGFsbG9jYXRlIHJpbmcgZXZlbnQgY2hyZGV2Ci0gKiBAYnVmOglyaW5nIGJ1ZmZlciB3aG9zZSBldmVudCBjaHJkZXYgd2UgYXJlIGFsbG9jYXRpbmcKLSAqIEBpZDoJCWlkIG9mIHRoaXMgcmluZyBidWZmZXIgKHR5cGljYWxseSAwKQotICogQG93bmVyOgl0aGUgbW9kdWxlIHdobyBvd25zIHRoZSByaW5nIGJ1ZmZlciAoZm9yIHJlZiBjb3VudGluZykKLSAqIEBkZXY6CWRldmljZSB3aXRoIHdoaWNoIHRoZSBjaHJkZXYgaXMgYXNzb2NpYXRlZAotICoqLwotc3RhdGljIGlubGluZSBpbnQKLV9faWlvX3JlcXVlc3RfcmluZ19idWZmZXJfZXZlbnRfY2hyZGV2KHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKmJ1ZiwKLQkJCQkgICAgICAgaW50IGlkLAotCQkJCSAgICAgICBzdHJ1Y3QgbW9kdWxlICpvd25lciwKLQkJCQkgICAgICAgc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCByZXQ7Ci0KLQlzbnByaW50ZihidWYtPmV2X2ludC5fbmFtZSwgc2l6ZW9mKGJ1Zi0+ZXZfaW50Ll9uYW1lKSwKLQkJICIlczpldmVudCVkIiwKLQkJIGRldl9uYW1lKCZidWYtPmRldiksCi0JCSBpZCk7Ci0JcmV0ID0gaWlvX3NldHVwX2V2X2ludCgmKGJ1Zi0+ZXZfaW50KSwKLQkJCSAgICAgICBidWYtPmV2X2ludC5fbmFtZSwKLQkJCSAgICAgICBvd25lciwKLQkJCSAgICAgICBkZXYpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyb3JfcmV0OwotCXJldHVybiAwOwotCi1lcnJvcl9yZXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1fX2lpb19mcmVlX3JpbmdfYnVmZmVyX2V2ZW50X2NocmRldihzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpidWYpCi17Ci0JaWlvX2ZyZWVfZXZfaW50KCYoYnVmLT5ldl9pbnQpKTsKLX0KLQotc3RhdGljIHZvaWQgaWlvX3JpbmdfYWNjZXNzX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQordm9pZCBpaW9fcmluZ19hY2Nlc3NfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqYnVmCi0JCT0gYWNjZXNzX2Rldl90b19paW9fcmluZ19idWZmZXIoZGV2KTsKKwkJPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyLCBkZXYpOwogCWNkZXZfZGVsKCZidWYtPmFjY2Vzc19oYW5kbGVyLmNocmRldik7CiAJaWlvX2RldmljZV9mcmVlX2NocmRldl9taW5vcihNSU5PUihkZXYtPmRldnQpKTsKIH0KLQotc3RhdGljIHN0cnVjdCBkZXZpY2VfdHlwZSBpaW9fcmluZ19hY2Nlc3NfdHlwZSA9IHsKLQkucmVsZWFzZSA9IGlpb19yaW5nX2FjY2Vzc19yZWxlYXNlLAotfTsKK0VYUE9SVF9TWU1CT0woaWlvX3JpbmdfYWNjZXNzX3JlbGVhc2UpOwogCiBzdGF0aWMgaW5saW5lIGludAotX19paW9fcmVxdWVzdF9yaW5nX2J1ZmZlcl9hY2Nlc3NfY2hyZGV2KHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKmJ1ZiwKLQkJCQkJaW50IGlkLAotCQkJCQlzdHJ1Y3QgbW9kdWxlICpvd25lcikKK19faWlvX3JlcXVlc3RfcmluZ19idWZmZXJfY2hyZGV2KHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKmJ1ZiwKKwkJCQkgc3RydWN0IG1vZHVsZSAqb3duZXIsCisJCQkJIGludCBpZCkKIHsKLQlpbnQgcmV0LCBtaW5vcjsKKwlpbnQgcmV0OwogCiAJYnVmLT5hY2Nlc3NfaGFuZGxlci5mbGFncyA9IDA7CisJYnVmLT5kZXYuYnVzID0gJmlpb19idXNfdHlwZTsKKwlkZXZpY2VfaW5pdGlhbGl6ZSgmYnVmLT5kZXYpOwogCi0JYnVmLT5hY2Nlc3NfZGV2LnBhcmVudCA9ICZidWYtPmRldjsKLQlidWYtPmFjY2Vzc19kZXYuYnVzID0gJmlpb19idXNfdHlwZTsKLQlidWYtPmFjY2Vzc19kZXYudHlwZSA9ICZpaW9fcmluZ19hY2Nlc3NfdHlwZTsKLQlkZXZpY2VfaW5pdGlhbGl6ZSgmYnVmLT5hY2Nlc3NfZGV2KTsKLQotCW1pbm9yID0gaWlvX2RldmljZV9nZXRfY2hyZGV2X21pbm9yKCk7Ci0JaWYgKG1pbm9yIDwgMCkgewotCQlyZXQgPSBtaW5vcjsKKwlyZXQgPSBpaW9fZGV2aWNlX2dldF9jaHJkZXZfbWlub3IoKTsKKwlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJvcl9kZXZpY2VfcHV0OwotCX0KLQlidWYtPmFjY2Vzc19kZXYuZGV2dCA9IE1LREVWKE1BSk9SKGlpb19kZXZ0KSwgbWlub3IpOwogCi0KLQlidWYtPmFjY2Vzc19pZCA9IGlkOwotCi0JZGV2X3NldF9uYW1lKCZidWYtPmFjY2Vzc19kZXYsICIlczphY2Nlc3MlZCIsCi0JCSAgICAgZGV2X25hbWUoJmJ1Zi0+ZGV2KSwKLQkJICAgICBidWYtPmFjY2Vzc19pZCk7Ci0JcmV0ID0gZGV2aWNlX2FkZCgmYnVmLT5hY2Nlc3NfZGV2KTsKKwlidWYtPmRldi5kZXZ0ID0gTUtERVYoTUFKT1IoaWlvX2RldnQpLCByZXQpOworCWRldl9zZXRfbmFtZSgmYnVmLT5kZXYsICIlczpidWZmZXIlZCIsCisJCSAgICAgZGV2X25hbWUoYnVmLT5kZXYucGFyZW50KSwKKwkJICAgICBpZCk7CisJcmV0ID0gZGV2aWNlX2FkZCgmYnVmLT5kZXYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGFkZCB0aGUgcmluZyBhY2Nlc3MgZGV2XG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gYWRkIHRoZSByaW5nIGRldlxuIik7CiAJCWdvdG8gZXJyb3JfZGV2aWNlX3B1dDsKIAl9Ci0KIAljZGV2X2luaXQoJmJ1Zi0+YWNjZXNzX2hhbmRsZXIuY2hyZGV2LCAmaWlvX3JpbmdfZmlsZW9wcyk7CiAJYnVmLT5hY2Nlc3NfaGFuZGxlci5jaHJkZXYub3duZXIgPSBvd25lcjsKLQotCXJldCA9IGNkZXZfYWRkKCZidWYtPmFjY2Vzc19oYW5kbGVyLmNocmRldiwgYnVmLT5hY2Nlc3NfZGV2LmRldnQsIDEpOworCXJldCA9IGNkZXZfYWRkKCZidWYtPmFjY2Vzc19oYW5kbGVyLmNocmRldiwgYnVmLT5kZXYuZGV2dCwgMSk7CiAJaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBhbGxvY2F0ZSByaW5nIGFjY2VzcyBjaHJkZXZcbiIpOworCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBhbGxvY2F0ZSByaW5nIGNocmRldlxuIik7CiAJCWdvdG8gZXJyb3JfZGV2aWNlX3VucmVnaXN0ZXI7CiAJfQogCXJldHVybiAwOwogCiBlcnJvcl9kZXZpY2VfdW5yZWdpc3RlcjoKLQlkZXZpY2VfdW5yZWdpc3RlcigmYnVmLT5hY2Nlc3NfZGV2KTsKKwlkZXZpY2VfdW5yZWdpc3RlcigmYnVmLT5kZXYpOwogZXJyb3JfZGV2aWNlX3B1dDoKLQlwdXRfZGV2aWNlKCZidWYtPmFjY2Vzc19kZXYpOworCXB1dF9kZXZpY2UoJmJ1Zi0+ZGV2KTsKIAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIF9faWlvX2ZyZWVfcmluZ19idWZmZXJfYWNjZXNzX2NocmRldihzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpidWYpCitzdGF0aWMgdm9pZCBfX2lpb19mcmVlX3JpbmdfYnVmZmVyX2NocmRldihzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpidWYpCiB7Ci0JZGV2aWNlX3VucmVnaXN0ZXIoJmJ1Zi0+YWNjZXNzX2Rldik7CisJZGV2aWNlX3VucmVnaXN0ZXIoJmJ1Zi0+ZGV2KTsKIH0KIAogdm9pZCBpaW9fcmluZ19idWZmZXJfaW5pdChzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nLAogCQkJICBzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8pCiB7Ci0JaWYgKHJpbmctPmFjY2Vzcy5tYXJrX3BhcmFtX2NoYW5nZSkKLQkJcmluZy0+YWNjZXNzLm1hcmtfcGFyYW1fY2hhbmdlKHJpbmcpOwogCXJpbmctPmluZGlvX2RldiA9IGRldl9pbmZvOwotCXJpbmctPmV2X2ludC5wcml2YXRlID0gcmluZzsKIAlyaW5nLT5hY2Nlc3NfaGFuZGxlci5wcml2YXRlID0gcmluZzsKLQlyaW5nLT5zaGFyZWRfZXZfcG9pbnRlci5ldl9wID0gTlVMTDsKLQlzcGluX2xvY2tfaW5pdCgmcmluZy0+c2hhcmVkX2V2X3BvaW50ZXIubG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcmluZy0+cG9sbHEpOwogfQogRVhQT1JUX1NZTUJPTChpaW9fcmluZ19idWZmZXJfaW5pdCk7CiAKLWludCBpaW9fcmluZ19idWZmZXJfcmVnaXN0ZXIoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZywgaW50IGlkKQorc3RhdGljIHNzaXplX3QgaWlvX3Nob3dfc2Nhbl9pbmRleChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCB0b19paW9fZGV2X2F0dHIoYXR0ciktPmMtPnNjYW5faW5kZXgpOworfQorCitzdGF0aWMgc3NpemVfdCBpaW9fc2hvd19maXhlZF90eXBlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICBjaGFyICpidWYpCit7CisJc3RydWN0IGlpb19kZXZfYXR0ciAqdGhpc19hdHRyID0gdG9faWlvX2Rldl9hdHRyKGF0dHIpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVjJWQvJWQ+PiV1XG4iLAorCQkgICAgICAgdGhpc19hdHRyLT5jLT5zY2FuX3R5cGUuc2lnbiwKKwkJICAgICAgIHRoaXNfYXR0ci0+Yy0+c2Nhbl90eXBlLnJlYWxiaXRzLAorCQkgICAgICAgdGhpc19hdHRyLT5jLT5zY2FuX3R5cGUuc3RvcmFnZWJpdHMsCisJCSAgICAgICB0aGlzX2F0dHItPmMtPnNjYW5fdHlwZS5zaGlmdCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGlpb19zY2FuX2VsX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCWNoYXIgKmJ1ZikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldCA9IGlpb19zY2FuX21hc2tfcXVlcnkocmluZywgdG9faWlvX2Rldl9hdHRyKGF0dHIpLT5hZGRyZXNzKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcmV0KTsKK30KKworc3RhdGljIGludCBpaW9fc2Nhbl9tYXNrX2NsZWFyKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcsIGludCBiaXQpCit7CisJaWYgKGJpdCA+IElJT19NQVhfU0NBTl9MRU5HVEgpCisJCXJldHVybiAtRUlOVkFMOworCXJpbmctPnNjYW5fbWFzayAmPSB+KDEgPDwgYml0KTsKKwlyaW5nLT5zY2FuX2NvdW50LS07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGlpb19zY2FuX2VsX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCQkgc2l6ZV90IGxlbikKK3sKKwlpbnQgcmV0ID0gMDsKKwlib29sIHN0YXRlOworCXN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gcmluZy0+aW5kaW9fZGV2OworCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKKworCXN0YXRlID0gIShidWZbMF0gPT0gJzAnKTsKKwltdXRleF9sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKKwlpZiAoaW5kaW9fZGV2LT5jdXJyZW50bW9kZSA9PSBJTkRJT19SSU5HX1RSSUdHRVJFRCkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyb3JfcmV0OworCX0KKwlyZXQgPSBpaW9fc2Nhbl9tYXNrX3F1ZXJ5KHJpbmcsIHRoaXNfYXR0ci0+YWRkcmVzcyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3JfcmV0OworCWlmICghc3RhdGUgJiYgcmV0KSB7CisJCXJldCA9IGlpb19zY2FuX21hc2tfY2xlYXIocmluZywgdGhpc19hdHRyLT5hZGRyZXNzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3JfcmV0OworCX0gZWxzZSBpZiAoc3RhdGUgJiYgIXJldCkgeworCQlyZXQgPSBpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCB0aGlzX2F0dHItPmFkZHJlc3MpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcl9yZXQ7CisJfQorCitlcnJvcl9yZXQ6CisJbXV0ZXhfdW5sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKKworCXJldHVybiByZXQgPyByZXQgOiBsZW47CisKK30KKworc3RhdGljIHNzaXplX3QgaWlvX3NjYW5fZWxfdHNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcmluZy0+c2Nhbl90aW1lc3RhbXApOworfQorCitzdGF0aWMgc3NpemVfdCBpaW9fc2Nhbl9lbF90c19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICBjb25zdCBjaGFyICpidWYsCisJCQkJICAgIHNpemVfdCBsZW4pCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSByaW5nLT5pbmRpb19kZXY7CisJYm9vbCBzdGF0ZTsKKwlzdGF0ZSA9ICEoYnVmWzBdID09ICcwJyk7CisJbXV0ZXhfbG9jaygmaW5kaW9fZGV2LT5tbG9jayk7CisJaWYgKGluZGlvX2Rldi0+Y3VycmVudG1vZGUgPT0gSU5ESU9fUklOR19UUklHR0VSRUQpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGVycm9yX3JldDsKKwl9CisJcmluZy0+c2Nhbl90aW1lc3RhbXAgPSBzdGF0ZTsKK2Vycm9yX3JldDoKKwltdXRleF91bmxvY2soJmluZGlvX2Rldi0+bWxvY2spOworCisJcmV0dXJuIHJldCA/IHJldCA6IGxlbjsKK30KKworc3RhdGljIGludCBpaW9fcmluZ19hZGRfY2hhbm5lbF9zeXNmcyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpaW9fY2hhbl9zcGVjICpjaGFuKQogewogCWludCByZXQ7CiAKLQlyaW5nLT5pZCA9IGlkOwotCi0JZGV2X3NldF9uYW1lKCZyaW5nLT5kZXYsICIlczpidWZmZXIlZCIsCi0JCSAgICAgZGV2X25hbWUocmluZy0+ZGV2LnBhcmVudCksCi0JCSAgICAgcmluZy0+aWQpOwotCXJldCA9IGRldmljZV9hZGQoJnJpbmctPmRldik7CisJcmV0ID0gX19paW9fYWRkX2NoYW5fZGV2YXR0cigiaW5kZXgiLCAic2Nhbl9lbGVtZW50cyIsCisJCQkJICAgICBjaGFuLAorCQkJCSAgICAgJmlpb19zaG93X3NjYW5faW5kZXgsCisJCQkJICAgICBOVUxMLAorCQkJCSAgICAgMCwKKwkJCQkgICAgIDAsCisJCQkJICAgICAmcmluZy0+ZGV2LAorCQkJCSAgICAgJnJpbmctPnNjYW5fZWxfZGV2X2F0dHJfbGlzdCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl9yZXQ7CiAKLQlyZXQgPSBfX2lpb19yZXF1ZXN0X3JpbmdfYnVmZmVyX2V2ZW50X2NocmRldihyaW5nLAotCQkJCQkJICAgICAwLAotCQkJCQkJICAgICByaW5nLT5vd25lciwKLQkJCQkJCSAgICAgJnJpbmctPmRldik7CisJcmV0ID0gX19paW9fYWRkX2NoYW5fZGV2YXR0cigidHlwZSIsICJzY2FuX2VsZW1lbnRzIiwKKwkJCQkgICAgIGNoYW4sCisJCQkJICAgICAmaWlvX3Nob3dfZml4ZWRfdHlwZSwKKwkJCQkgICAgIE5VTEwsCisJCQkJICAgICAwLAorCQkJCSAgICAgMCwKKwkJCQkgICAgICZyaW5nLT5kZXYsCisJCQkJICAgICAmcmluZy0+c2Nhbl9lbF9kZXZfYXR0cl9saXN0KTsKIAlpZiAocmV0KQotCQlnb3RvIGVycm9yX3JlbW92ZV9kZXZpY2U7CisJCWdvdG8gZXJyb3JfcmV0OwogCi0JcmV0ID0gX19paW9fcmVxdWVzdF9yaW5nX2J1ZmZlcl9hY2Nlc3NfY2hyZGV2KHJpbmcsCi0JCQkJCQkgICAgICAwLAotCQkJCQkJICAgICAgcmluZy0+b3duZXIpOworCWlmIChjaGFuLT50eXBlICE9IElJT19USU1FU1RBTVApCisJCXJldCA9IF9faWlvX2FkZF9jaGFuX2RldmF0dHIoImVuIiwgInNjYW5fZWxlbWVudHMiLAorCQkJCQkgICAgIGNoYW4sCisJCQkJCSAgICAgJmlpb19zY2FuX2VsX3Nob3csCisJCQkJCSAgICAgJmlpb19zY2FuX2VsX3N0b3JlLAorCQkJCQkgICAgIGNoYW4tPnNjYW5faW5kZXgsCisJCQkJCSAgICAgMCwKKwkJCQkJICAgICAmcmluZy0+ZGV2LAorCQkJCQkgICAgICZyaW5nLT5zY2FuX2VsX2Rldl9hdHRyX2xpc3QpOworCWVsc2UKKwkJcmV0ID0gX19paW9fYWRkX2NoYW5fZGV2YXR0cigiZW4iLCAic2Nhbl9lbGVtZW50cyIsCisJCQkJCSAgICAgY2hhbiwKKwkJCQkJICAgICAmaWlvX3NjYW5fZWxfdHNfc2hvdywKKwkJCQkJICAgICAmaWlvX3NjYW5fZWxfdHNfc3RvcmUsCisJCQkJCSAgICAgY2hhbi0+c2Nhbl9pbmRleCwKKwkJCQkJICAgICAwLAorCQkJCQkgICAgICZyaW5nLT5kZXYsCisJCQkJCSAgICAgJnJpbmctPnNjYW5fZWxfZGV2X2F0dHJfbGlzdCk7CitlcnJvcl9yZXQ6CisJcmV0dXJuIHJldDsKK30KIAorc3RhdGljIHZvaWQgaWlvX3JpbmdfcmVtb3ZlX2FuZF9mcmVlX3NjYW5fZGV2X2F0dHIoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZywKKwkJCQkJCSAgIHN0cnVjdCBpaW9fZGV2X2F0dHIgKnApCit7CisJc3lzZnNfcmVtb3ZlX2ZpbGVfZnJvbV9ncm91cCgmcmluZy0+ZGV2LmtvYmosCisJCQkJICAgICAmcC0+ZGV2X2F0dHIuYXR0ciwgInNjYW5fZWxlbWVudHMiKTsKKwlrZnJlZShwLT5kZXZfYXR0ci5hdHRyLm5hbWUpOworCWtmcmVlKHApOworfQorCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaWlvX3NjYW5fZWxfZHVtbXlfYXR0cnNbXSA9IHsKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBpaW9fc2Nhbl9lbF9kdW1teV9ncm91cCA9IHsKKwkubmFtZSA9ICJzY2FuX2VsZW1lbnRzIiwKKwkuYXR0cnMgPSBpaW9fc2Nhbl9lbF9kdW1teV9hdHRycworfTsKKworc3RhdGljIHZvaWQgX19paW9fcmluZ19hdHRyX2NsZWFudXAoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZykKK3sKKwlzdHJ1Y3QgaWlvX2Rldl9hdHRyICpwLCAqbjsKKwlpbnQgYW55ZHluYW1pYyA9ICFsaXN0X2VtcHR5KCZyaW5nLT5zY2FuX2VsX2Rldl9hdHRyX2xpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLAorCQkJCSAmcmluZy0+c2Nhbl9lbF9kZXZfYXR0cl9saXN0LCBsKQorCQlpaW9fcmluZ19yZW1vdmVfYW5kX2ZyZWVfc2Nhbl9kZXZfYXR0cihyaW5nLCBwKTsKKworCWlmIChyaW5nLT5zY2FuX2VsX2F0dHJzKQorCQlzeXNmc19yZW1vdmVfZ3JvdXAoJnJpbmctPmRldi5rb2JqLAorCQkJCSAgIHJpbmctPnNjYW5fZWxfYXR0cnMpOworCWVsc2UgaWYgKGFueWR5bmFtaWMpCisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmcmluZy0+ZGV2LmtvYmosCisJCQkJICAgJmlpb19zY2FuX2VsX2R1bW15X2dyb3VwKTsKK30KKworaW50IGlpb19yaW5nX2J1ZmZlcl9yZWdpc3Rlcl9leChzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nLCBpbnQgaWQsCisJCQkJY29uc3Qgc3RydWN0IGlpb19jaGFuX3NwZWMgKmNoYW5uZWxzLAorCQkJCWludCBudW1fY2hhbm5lbHMpCit7CisJaW50IHJldCwgaTsKKworCXJldCA9IF9faWlvX3JlcXVlc3RfcmluZ19idWZmZXJfY2hyZGV2KHJpbmcsIHJpbmctPm93bmVyLCBpZCk7CiAJaWYgKHJldCkKLQkJZ290byBlcnJvcl9mcmVlX3JpbmdfYnVmZmVyX2V2ZW50X2NocmRldjsKKwkJZ290byBlcnJvcl9yZXQ7CiAKIAlpZiAocmluZy0+c2Nhbl9lbF9hdHRycykgewogCQlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnJpbmctPmRldi5rb2JqLApAQCAtMjY2LDI5ICszNzIsMzkgQEAKIAkJaWYgKHJldCkgewogCQkJZGV2X2VycigmcmluZy0+ZGV2LAogCQkJCSJGYWlsZWQgdG8gYWRkIHN5c2ZzIHNjYW4gZWxlbWVudHNcbiIpOwotCQkJZ290byBlcnJvcl9mcmVlX3JpbmdfYnVmZmVyX2V2ZW50X2NocmRldjsKKwkJCWdvdG8gZXJyb3JfZnJlZV9yaW5nX2J1ZmZlcl9jaHJkZXY7CisJCX0KKwl9IGVsc2UgaWYgKGNoYW5uZWxzKSB7CisJCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcmluZy0+ZGV2LmtvYmosCisJCQkJCSAmaWlvX3NjYW5fZWxfZHVtbXlfZ3JvdXApOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcl9mcmVlX3JpbmdfYnVmZmVyX2NocmRldjsKKwl9CisKKwlJTklUX0xJU1RfSEVBRCgmcmluZy0+c2Nhbl9lbF9kZXZfYXR0cl9saXN0KTsKKwlpZiAoY2hhbm5lbHMpIHsKKwkJLyogbmV3IG1hZ2ljICovCisJCWZvciAoaSA9IDA7IGkgPCBudW1fY2hhbm5lbHM7IGkrKykgeworCQkJcmV0ID0gaWlvX3JpbmdfYWRkX2NoYW5uZWxfc3lzZnMocmluZywgJmNoYW5uZWxzW2ldKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gZXJyb3JfY2xlYW51cF9keW5hbWljOwogCQl9CiAJfQogCi0JcmV0dXJuIHJldDsKLWVycm9yX2ZyZWVfcmluZ19idWZmZXJfZXZlbnRfY2hyZGV2OgotCV9faWlvX2ZyZWVfcmluZ19idWZmZXJfZXZlbnRfY2hyZGV2KHJpbmcpOwotZXJyb3JfcmVtb3ZlX2RldmljZToKLQlkZXZpY2VfZGVsKCZyaW5nLT5kZXYpOworCXJldHVybiAwOworZXJyb3JfY2xlYW51cF9keW5hbWljOgorCV9faWlvX3JpbmdfYXR0cl9jbGVhbnVwKHJpbmcpOworZXJyb3JfZnJlZV9yaW5nX2J1ZmZlcl9jaHJkZXY6CisJX19paW9fZnJlZV9yaW5nX2J1ZmZlcl9jaHJkZXYocmluZyk7CiBlcnJvcl9yZXQ6CiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0woaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyKTsKK0VYUE9SVF9TWU1CT0woaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyX2V4KTsKIAogdm9pZCBpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKQogewotCWlmIChyaW5nLT5zY2FuX2VsX2F0dHJzKQotCQlzeXNmc19yZW1vdmVfZ3JvdXAoJnJpbmctPmRldi5rb2JqLAotCQkJCSAgIHJpbmctPnNjYW5fZWxfYXR0cnMpOwotCi0JX19paW9fZnJlZV9yaW5nX2J1ZmZlcl9hY2Nlc3NfY2hyZGV2KHJpbmcpOwotCV9faWlvX2ZyZWVfcmluZ19idWZmZXJfZXZlbnRfY2hyZGV2KHJpbmcpOwotCWRldmljZV9kZWwoJnJpbmctPmRldik7CisJX19paW9fcmluZ19hdHRyX2NsZWFudXAocmluZyk7CisJX19paW9fZnJlZV9yaW5nX2J1ZmZlcl9jaHJkZXYocmluZyk7CiB9CiBFWFBPUlRfU1lNQk9MKGlpb19yaW5nX2J1ZmZlcl91bnJlZ2lzdGVyKTsKIApAQCAtMjk2LDE0ICs0MTIsMTMgQEAKIAkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgICAgIGNoYXIgKmJ1ZikKIHsKLQlpbnQgbGVuID0gMDsKIAlzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKLQlpZiAocmluZy0+YWNjZXNzLmdldF9sZW5ndGgpCi0JCWxlbiA9IHNwcmludGYoYnVmLCAiJWRcbiIsCi0JCQkgICAgICByaW5nLT5hY2Nlc3MuZ2V0X2xlbmd0aChyaW5nKSk7CisJaWYgKHJpbmctPmFjY2Vzcy0+Z2V0X2xlbmd0aCkKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsCisJCQkgICAgICAgcmluZy0+YWNjZXNzLT5nZXRfbGVuZ3RoKHJpbmcpKTsKIAotCXJldHVybiBsZW47CisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGlpb19yZWFkX3JpbmdfbGVuZ3RoKTsKIApAQCAtMzE1LDE4ICs0MzAsMTkgQEAKIAlpbnQgcmV0OwogCXVsb25nIHZhbDsKIAlzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKIAlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKHJpbmctPmFjY2Vzcy5nZXRfbGVuZ3RoKQotCQlpZiAodmFsID09IHJpbmctPmFjY2Vzcy5nZXRfbGVuZ3RoKHJpbmcpKQorCWlmIChyaW5nLT5hY2Nlc3MtPmdldF9sZW5ndGgpCisJCWlmICh2YWwgPT0gcmluZy0+YWNjZXNzLT5nZXRfbGVuZ3RoKHJpbmcpKQogCQkJcmV0dXJuIGxlbjsKIAotCWlmIChyaW5nLT5hY2Nlc3Muc2V0X2xlbmd0aCkgewotCQlyaW5nLT5hY2Nlc3Muc2V0X2xlbmd0aChyaW5nLCB2YWwpOwotCQlpZiAocmluZy0+YWNjZXNzLm1hcmtfcGFyYW1fY2hhbmdlKQotCQkJcmluZy0+YWNjZXNzLm1hcmtfcGFyYW1fY2hhbmdlKHJpbmcpOworCWlmIChyaW5nLT5hY2Nlc3MtPnNldF9sZW5ndGgpIHsKKwkJcmluZy0+YWNjZXNzLT5zZXRfbGVuZ3RoKHJpbmcsIHZhbCk7CisJCWlmIChyaW5nLT5hY2Nlc3MtPm1hcmtfcGFyYW1fY2hhbmdlKQorCQkJcmluZy0+YWNjZXNzLT5tYXJrX3BhcmFtX2NoYW5nZShyaW5nKTsKIAl9CiAKIAlyZXR1cm4gbGVuOwpAQCAtMzM3LDE0ICs0NTMsMTMgQEAKIAkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgIGNoYXIgKmJ1ZikKIHsKLQlpbnQgbGVuID0gMDsKIAlzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKLQlpZiAocmluZy0+YWNjZXNzLmdldF9ieXRlc19wZXJfZGF0dW0pCi0JCWxlbiA9IHNwcmludGYoYnVmLCAiJWRcbiIsCi0JCQkgICAgICByaW5nLT5hY2Nlc3MuZ2V0X2J5dGVzX3Blcl9kYXR1bShyaW5nKSk7CisJaWYgKHJpbmctPmFjY2Vzcy0+Z2V0X2J5dGVzX3Blcl9kYXR1bSkKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsCisJCQkgICAgICAgcmluZy0+YWNjZXNzLT5nZXRfYnl0ZXNfcGVyX2RhdHVtKHJpbmcpKTsKIAotCXJldHVybiBsZW47CisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGlpb19yZWFkX3JpbmdfYnl0ZXNfcGVyX2RhdHVtKTsKIApAQCAtMzY4LDggKzQ4Myw4IEBACiAJCWdvdG8gZG9uZTsKIAl9CiAJaWYgKHJlcXVlc3RlZF9zdGF0ZSkgewotCQlpZiAocmluZy0+cHJlZW5hYmxlKSB7Ci0JCQlyZXQgPSByaW5nLT5wcmVlbmFibGUoZGV2X2luZm8pOworCQlpZiAocmluZy0+c2V0dXBfb3BzLT5wcmVlbmFibGUpIHsKKwkJCXJldCA9IHJpbmctPnNldHVwX29wcy0+cHJlZW5hYmxlKGRldl9pbmZvKTsKIAkJCWlmIChyZXQpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkgICAgICAgIkJ1ZmZlciBub3Qgc3RhcnRlZDoiCkBAIC0zNzcsOCArNDkyLDggQEAKIAkJCQlnb3RvIGVycm9yX3JldDsKIAkJCX0KIAkJfQotCQlpZiAocmluZy0+YWNjZXNzLnJlcXVlc3RfdXBkYXRlKSB7Ci0JCQlyZXQgPSByaW5nLT5hY2Nlc3MucmVxdWVzdF91cGRhdGUocmluZyk7CisJCWlmIChyaW5nLT5hY2Nlc3MtPnJlcXVlc3RfdXBkYXRlKSB7CisJCQlyZXQgPSByaW5nLT5hY2Nlc3MtPnJlcXVlc3RfdXBkYXRlKHJpbmcpOwogCQkJaWYgKHJldCkgewogCQkJCXByaW50ayhLRVJOX0lORk8KIAkJCQkgICAgICAgIkJ1ZmZlciBub3Qgc3RhcnRlZDoiCkBAIC0zODYsMTYgKzUwMSwxNiBAQAogCQkJCWdvdG8gZXJyb3JfcmV0OwogCQkJfQogCQl9Ci0JCWlmIChyaW5nLT5hY2Nlc3MubWFya19pbl91c2UpCi0JCQlyaW5nLT5hY2Nlc3MubWFya19pbl91c2UocmluZyk7CisJCWlmIChyaW5nLT5hY2Nlc3MtPm1hcmtfaW5fdXNlKQorCQkJcmluZy0+YWNjZXNzLT5tYXJrX2luX3VzZShyaW5nKTsKIAkJLyogRGVmaW5pdGVseSBwb3NzaWJsZSBmb3IgZGV2aWNlcyB0byBzdXBwb3J0IGJvdGggb2YgdGhlc2UuKi8KIAkJaWYgKGRldl9pbmZvLT5tb2RlcyAmIElORElPX1JJTkdfVFJJR0dFUkVEKSB7CiAJCQlpZiAoIWRldl9pbmZvLT50cmlnKSB7CiAJCQkJcHJpbnRrKEtFUk5fSU5GTwogCQkJCSAgICAgICAiQnVmZmVyIG5vdCBzdGFydGVkOiBubyB0cmlnZ2VyXG4iKTsKIAkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCWlmIChyaW5nLT5hY2Nlc3MudW5tYXJrX2luX3VzZSkKLQkJCQkJcmluZy0+YWNjZXNzLnVubWFya19pbl91c2UocmluZyk7CisJCQkJaWYgKHJpbmctPmFjY2Vzcy0+dW5tYXJrX2luX3VzZSkKKwkJCQkJcmluZy0+YWNjZXNzLT51bm1hcmtfaW5fdXNlKHJpbmcpOwogCQkJCWdvdG8gZXJyb3JfcmV0OwogCQkJfQogCQkJZGV2X2luZm8tPmN1cnJlbnRtb2RlID0gSU5ESU9fUklOR19UUklHR0VSRUQ7CkBAIC00MDYsMzIgKzUyMSwzMSBAQAogCQkJZ290byBlcnJvcl9yZXQ7CiAJCX0KIAotCQlpZiAocmluZy0+cG9zdGVuYWJsZSkgewotCi0JCQlyZXQgPSByaW5nLT5wb3N0ZW5hYmxlKGRldl9pbmZvKTsKKwkJaWYgKHJpbmctPnNldHVwX29wcy0+cG9zdGVuYWJsZSkgeworCQkJcmV0ID0gcmluZy0+c2V0dXBfb3BzLT5wb3N0ZW5hYmxlKGRldl9pbmZvKTsKIAkJCWlmIChyZXQpIHsKIAkJCQlwcmludGsoS0VSTl9JTkZPCiAJCQkJICAgICAgICJCdWZmZXIgbm90IHN0YXJ0ZWQ6IgogCQkJCSAgICAgICAicG9zdGVuYWJsZSBmYWlsZWRcbiIpOwotCQkJCWlmIChyaW5nLT5hY2Nlc3MudW5tYXJrX2luX3VzZSkKLQkJCQkJcmluZy0+YWNjZXNzLnVubWFya19pbl91c2UocmluZyk7CisJCQkJaWYgKHJpbmctPmFjY2Vzcy0+dW5tYXJrX2luX3VzZSkKKwkJCQkJcmluZy0+YWNjZXNzLT51bm1hcmtfaW5fdXNlKHJpbmcpOwogCQkJCWRldl9pbmZvLT5jdXJyZW50bW9kZSA9IHByZXZpb3VzX21vZGU7Ci0JCQkJaWYgKHJpbmctPnBvc3RkaXNhYmxlKQotCQkJCQlyaW5nLT5wb3N0ZGlzYWJsZShkZXZfaW5mbyk7CisJCQkJaWYgKHJpbmctPnNldHVwX29wcy0+cG9zdGRpc2FibGUpCisJCQkJCXJpbmctPnNldHVwX29wcy0+cG9zdGRpc2FibGUoZGV2X2luZm8pOwogCQkJCWdvdG8gZXJyb3JfcmV0OwogCQkJfQogCQl9CiAJfSBlbHNlIHsKLQkJaWYgKHJpbmctPnByZWRpc2FibGUpIHsKLQkJCXJldCA9IHJpbmctPnByZWRpc2FibGUoZGV2X2luZm8pOworCQlpZiAocmluZy0+c2V0dXBfb3BzLT5wcmVkaXNhYmxlKSB7CisJCQlyZXQgPSByaW5nLT5zZXR1cF9vcHMtPnByZWRpc2FibGUoZGV2X2luZm8pOwogCQkJaWYgKHJldCkKIAkJCQlnb3RvIGVycm9yX3JldDsKIAkJfQotCQlpZiAocmluZy0+YWNjZXNzLnVubWFya19pbl91c2UpCi0JCQlyaW5nLT5hY2Nlc3MudW5tYXJrX2luX3VzZShyaW5nKTsKKwkJaWYgKHJpbmctPmFjY2Vzcy0+dW5tYXJrX2luX3VzZSkKKwkJCXJpbmctPmFjY2Vzcy0+dW5tYXJrX2luX3VzZShyaW5nKTsKIAkJZGV2X2luZm8tPmN1cnJlbnRtb2RlID0gSU5ESU9fRElSRUNUX01PREU7Ci0JCWlmIChyaW5nLT5wb3N0ZGlzYWJsZSkgewotCQkJcmV0ID0gcmluZy0+cG9zdGRpc2FibGUoZGV2X2luZm8pOworCQlpZiAocmluZy0+c2V0dXBfb3BzLT5wb3N0ZGlzYWJsZSkgeworCQkJcmV0ID0gcmluZy0+c2V0dXBfb3BzLT5wb3N0ZGlzYWJsZShkZXZfaW5mbyk7CiAJCQlpZiAocmV0KQogCQkJCWdvdG8gZXJyb3JfcmV0OwogCQl9CkBAIC00NDUsNiArNTU5LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChpaW9fc3RvcmVfcmluZ19lbmFibGUpOworCiBzc2l6ZV90IGlpb19zaG93X3JpbmdfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJICAgIGNoYXIgKmJ1ZikKQEAgLTQ1NSw4OSArNTcwLDI3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGlpb19zaG93X3JpbmdfZW5hYmxlKTsKIAotc3NpemVfdCBpaW9fc2Nhbl9lbF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCSBjaGFyICpidWYpCitpbnQgaWlvX3N3X3JpbmdfcHJlZW5hYmxlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCiB7Ci0JaW50IHJldDsKLQlzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGlpb19zY2FuX2VsICp0aGlzX2VsID0gdG9faWlvX3NjYW5fZWwoYXR0cik7CisJc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyA9IGluZGlvX2Rldi0+cmluZzsKKwlzaXplX3Qgc2l6ZTsKKwlkZXZfZGJnKCZpbmRpb19kZXYtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisJLyogQ2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzY2FuIGVsZW1lbnRzIGVuYWJsZWQsIGlmIG5vdCBmYWlsKi8KKwlpZiAoIShyaW5nLT5zY2FuX2NvdW50IHx8IHJpbmctPnNjYW5fdGltZXN0YW1wKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHJpbmctPnNjYW5fdGltZXN0YW1wKQorCQlpZiAocmluZy0+c2Nhbl9jb3VudCkKKwkJCS8qIFRpbWVzdGFtcCAoYWxpZ25lZCB0byBzNjQpIGFuZCBkYXRhICovCisJCQlzaXplID0gKCgocmluZy0+c2Nhbl9jb3VudCAqIHJpbmctPmJwZSkKKwkJCQkJKyBzaXplb2YoczY0KSAtIDEpCisJCQkJJiB+KHNpemVvZihzNjQpIC0gMSkpCisJCQkJKyBzaXplb2YoczY0KTsKKwkJZWxzZSAvKiBUaW1lc3RhbXAgb25seSAgKi8KKwkJCXNpemUgPSBzaXplb2YoczY0KTsKKwllbHNlIC8qIERhdGEgb25seSAqLworCQlzaXplID0gcmluZy0+c2Nhbl9jb3VudCAqIHJpbmctPmJwZTsKKwlyaW5nLT5hY2Nlc3MtPnNldF9ieXRlc19wZXJfZGF0dW0ocmluZywgc2l6ZSk7CiAKLQlyZXQgPSBpaW9fc2Nhbl9tYXNrX3F1ZXJ5KHJpbmcsIHRoaXNfZWwtPm51bWJlcik7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHJldCk7CisJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKGlpb19zY2FuX2VsX3Nob3cpOwotCi1zc2l6ZV90IGlpb19zY2FuX2VsX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkgIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCSAgc2l6ZV90IGxlbikKLXsKLQlpbnQgcmV0ID0gMDsKLQlib29sIHN0YXRlOwotCXN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gcmluZy0+aW5kaW9fZGV2OwotCXN0cnVjdCBpaW9fc2Nhbl9lbCAqdGhpc19lbCA9IHRvX2lpb19zY2FuX2VsKGF0dHIpOwotCi0Jc3RhdGUgPSAhKGJ1ZlswXSA9PSAnMCcpOwotCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOwotCWlmIChpbmRpb19kZXYtPmN1cnJlbnRtb2RlID09IElORElPX1JJTkdfVFJJR0dFUkVEKSB7Ci0JCXJldCA9IC1FQlVTWTsKLQkJZ290byBlcnJvcl9yZXQ7Ci0JfQotCXJldCA9IGlpb19zY2FuX21hc2tfcXVlcnkocmluZywgdGhpc19lbC0+bnVtYmVyKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBlcnJvcl9yZXQ7Ci0JaWYgKCFzdGF0ZSAmJiByZXQpIHsKLQkJcmV0ID0gaWlvX3NjYW5fbWFza19jbGVhcihyaW5nLCB0aGlzX2VsLT5udW1iZXIpOwotCQlpZiAocmV0KQotCQkJZ290byBlcnJvcl9yZXQ7Ci0JfSBlbHNlIGlmIChzdGF0ZSAmJiAhcmV0KSB7Ci0JCXJldCA9IGlpb19zY2FuX21hc2tfc2V0KHJpbmcsIHRoaXNfZWwtPm51bWJlcik7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIGVycm9yX3JldDsKLQl9Ci0JaWYgKHRoaXNfZWwtPnNldF9zdGF0ZSkKLQkJcmV0ID0gdGhpc19lbC0+c2V0X3N0YXRlKHRoaXNfZWwsIGluZGlvX2Rldiwgc3RhdGUpOwotZXJyb3JfcmV0OgotCW11dGV4X3VubG9jaygmaW5kaW9fZGV2LT5tbG9jayk7Ci0KLQlyZXR1cm4gcmV0ID8gcmV0IDogbGVuOwotCi19Ci1FWFBPUlRfU1lNQk9MKGlpb19zY2FuX2VsX3N0b3JlKTsKLQotc3NpemVfdCBpaW9fc2Nhbl9lbF90c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCSAgICBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCByaW5nLT5zY2FuX3RpbWVzdGFtcCk7Ci19Ci1FWFBPUlRfU1lNQk9MKGlpb19zY2FuX2VsX3RzX3Nob3cpOwotCi1zc2l6ZV90IGlpb19zY2FuX2VsX3RzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkgICAgIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCSAgICAgc2l6ZV90IGxlbikKLXsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHJpbmctPmluZGlvX2RldjsKLQlib29sIHN0YXRlOwotCXN0YXRlID0gIShidWZbMF0gPT0gJzAnKTsKLQltdXRleF9sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKLQlpZiAoaW5kaW9fZGV2LT5jdXJyZW50bW9kZSA9PSBJTkRJT19SSU5HX1RSSUdHRVJFRCkgewotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gZXJyb3JfcmV0OwotCX0KLQlyaW5nLT5zY2FuX3RpbWVzdGFtcCA9IHN0YXRlOwotZXJyb3JfcmV0OgotCW11dGV4X3VubG9jaygmaW5kaW9fZGV2LT5tbG9jayk7Ci0KLQlyZXR1cm4gcmV0ID8gcmV0IDogbGVuOwotfQotRVhQT1JUX1NZTUJPTChpaW9fc2Nhbl9lbF90c19zdG9yZSk7Ci0KK0VYUE9SVF9TWU1CT0woaWlvX3N3X3JpbmdfcHJlZW5hYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLXRyaWdnZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLXRyaWdnZXIuYwppbmRleCA1N2RkOTIzLi42MTU5MDIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby10cmlnZ2VyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tdHJpZ2dlci5jCkBAIC0zOSw2ICszOSwxOSBAQAogc3RhdGljIERFRklORV9NVVRFWChpaW9fdHJpZ2dlcl9saXN0X2xvY2spOwogCiAvKioKKyAqIGlpb190cmlnZ2VyX3JlYWRfbmFtZSgpIC0gcmV0cmlldmUgdXNlZnVsIGlkZW50aWZ5aW5nIG5hbWUKKyAqKi8KK3N0YXRpYyBzc2l6ZV90IGlpb190cmlnZ2VyX3JlYWRfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaWlvX3RyaWdnZXIgKnRyaWcgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgdHJpZy0+bmFtZSk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBpaW9fdHJpZ2dlcl9yZWFkX25hbWUsIE5VTEwpOworCisvKioKICAqIGlpb190cmlnZ2VyX3JlZ2lzdGVyX3N5c2ZzKCkgLSBjcmVhdGUgYSBkZXZpY2UgZm9yIHRoaXMgdHJpZ2dlcgogICogQHRyaWdfaW5mbzoJdGhlIHRyaWdnZXIKICAqCkBAIC00NiwyMCArNTksMTYgQEAKICAqKi8KIHN0YXRpYyBpbnQgaWlvX3RyaWdnZXJfcmVnaXN0ZXJfc3lzZnMoc3RydWN0IGlpb190cmlnZ2VyICp0cmlnX2luZm8pCiB7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAodHJpZ19pbmZvLT5jb250cm9sX2F0dHJzKQotCQlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnRyaWdfaW5mby0+ZGV2LmtvYmosCi0JCQkJCSB0cmlnX2luZm8tPmNvbnRyb2xfYXR0cnMpOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gc3lzZnNfYWRkX2ZpbGVfdG9fZ3JvdXAoJnRyaWdfaW5mby0+ZGV2LmtvYmosCisJCQkJICAgICAgICZkZXZfYXR0cl9uYW1lLmF0dHIsCisJCQkJICAgICAgIE5VTEwpOwogfQogCiBzdGF0aWMgdm9pZCBpaW9fdHJpZ2dlcl91bnJlZ2lzdGVyX3N5c2ZzKHN0cnVjdCBpaW9fdHJpZ2dlciAqdHJpZ19pbmZvKQogewotCWlmICh0cmlnX2luZm8tPmNvbnRyb2xfYXR0cnMpCi0JCXN5c2ZzX3JlbW92ZV9ncm91cCgmdHJpZ19pbmZvLT5kZXYua29iaiwKLQkJCQkgICB0cmlnX2luZm8tPmNvbnRyb2xfYXR0cnMpOworCXN5c2ZzX3JlbW92ZV9maWxlX2Zyb21fZ3JvdXAoJnRyaWdfaW5mby0+ZGV2LmtvYmosCisJCQkJCSAgICZkZXZfYXR0cl9uYW1lLmF0dHIsCisJCQkJCSAgIE5VTEwpOwogfQogCiAKQEAgLTEzNCwxNCArMTQzLDggQEAKIAogdm9pZCBpaW9fdHJpZ2dlcl91bnJlZ2lzdGVyKHN0cnVjdCBpaW9fdHJpZ2dlciAqdHJpZ19pbmZvKQogewotCXN0cnVjdCBpaW9fdHJpZ2dlciAqY3Vyc29yOwotCiAJbXV0ZXhfbG9jaygmaWlvX3RyaWdnZXJfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGN1cnNvciwgJmlpb190cmlnZ2VyX2xpc3QsIGxpc3QpCi0JCWlmIChjdXJzb3IgPT0gdHJpZ19pbmZvKSB7Ci0JCQlsaXN0X2RlbCgmY3Vyc29yLT5saXN0KTsKLQkJCWJyZWFrOwotCQl9CisJbGlzdF9kZWwoJnRyaWdfaW5mby0+bGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZpaW9fdHJpZ2dlcl9saXN0X2xvY2spOwogCiAJaWlvX3RyaWdnZXJfdW5yZWdpc3Rlcl9zeXNmcyh0cmlnX2luZm8pOwpAQCAtMTUxLDQ3ICsxNTQsNTUgQEAKIH0KIEVYUE9SVF9TWU1CT0woaWlvX3RyaWdnZXJfdW5yZWdpc3Rlcik7CiAKLXN0cnVjdCBpaW9fdHJpZ2dlciAqaWlvX3RyaWdnZXJfZmluZF9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBsZW4pCitzdGF0aWMgc3RydWN0IGlpb190cmlnZ2VyICppaW9fdHJpZ2dlcl9maW5kX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJCSAgICBzaXplX3QgbGVuKQogewotCXN0cnVjdCBpaW9fdHJpZ2dlciAqdHJpZzsKLQlib29sIGZvdW5kID0gZmFsc2U7Ci0KLQlpZiAobGVuICYmIG5hbWVbbGVuIC0gMV0gPT0gJ1xuJykKLQkJbGVuLS07CisJc3RydWN0IGlpb190cmlnZ2VyICp0cmlnID0gTlVMTCwgKml0ZXI7CiAKIAltdXRleF9sb2NrKCZpaW9fdHJpZ2dlcl9saXN0X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkodHJpZywgJmlpb190cmlnZ2VyX2xpc3QsIGxpc3QpIHsKLQkJaWYgKHN0cm5jbXAodHJpZy0+bmFtZSwgbmFtZSwgbGVuKSA9PSAwKSB7Ci0JCQlmb3VuZCA9IHRydWU7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShpdGVyLCAmaWlvX3RyaWdnZXJfbGlzdCwgbGlzdCkKKwkJaWYgKHN5c2ZzX3N0cmVxKGl0ZXItPm5hbWUsIG5hbWUpKSB7CisJCQl0cmlnID0gaXRlcjsKIAkJCWJyZWFrOwogCQl9Ci0JfQogCW11dGV4X3VubG9jaygmaWlvX3RyaWdnZXJfbGlzdF9sb2NrKTsKIAotCXJldHVybiBmb3VuZCA/IHRyaWcgOiBOVUxMOworCXJldHVybiB0cmlnOwogfQotRVhQT1JUX1NZTUJPTChpaW9fdHJpZ2dlcl9maW5kX2J5X25hbWUpOwogCiB2b2lkIGlpb190cmlnZ2VyX3BvbGwoc3RydWN0IGlpb190cmlnZ2VyICp0cmlnLCBzNjQgdGltZSkKIHsKLQlzdHJ1Y3QgaWlvX3BvbGxfZnVuYyAqcGZfY3Vyc29yOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwZl9jdXJzb3IsICZ0cmlnLT5wb2xsZnVuY19saXN0LCBsaXN0KSB7Ci0JCWlmIChwZl9jdXJzb3ItPnBvbGxfZnVuY19pbW1lZGlhdGUpIHsKLQkJCXBmX2N1cnNvci0+cG9sbF9mdW5jX2ltbWVkaWF0ZShwZl9jdXJzb3ItPnByaXZhdGVfZGF0YSk7Ci0JCQl0cmlnLT51c2VfY291bnQrKzsKLQkJfQotCX0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBmX2N1cnNvciwgJnRyaWctPnBvbGxmdW5jX2xpc3QsIGxpc3QpIHsKLQkJaWYgKHBmX2N1cnNvci0+cG9sbF9mdW5jX21haW4pIHsKLQkJCXBmX2N1cnNvci0+cG9sbF9mdW5jX21haW4ocGZfY3Vyc29yLT5wcml2YXRlX2RhdGEsCi0JCQkJCQkgIHRpbWUpOwotCQkJdHJpZy0+dXNlX2NvdW50Kys7Ci0JCX0KKwlpbnQgaTsKKwlpZiAoIXRyaWctPnVzZV9jb3VudCkgeworCQlmb3IgKGkgPSAwOyBpIDwgQ09ORklHX0lJT19DT05TVU1FUlNfUEVSX1RSSUdHRVI7IGkrKykKKwkJCWlmICh0cmlnLT5zdWJpcnFzW2ldLmVuYWJsZWQpIHsKKwkJCQl0cmlnLT51c2VfY291bnQrKzsKKwkJCQlnZW5lcmljX2hhbmRsZV9pcnEodHJpZy0+c3ViaXJxX2Jhc2UgKyBpKTsKKwkJCX0KIAl9CiB9CiBFWFBPUlRfU1lNQk9MKGlpb190cmlnZ2VyX3BvbGwpOwogCitpcnFyZXR1cm5fdCBpaW9fdHJpZ2dlcl9nZW5lcmljX2RhdGFfcmR5X3BvbGwoaW50IGlycSwgdm9pZCAqcHJpdmF0ZSkKK3sKKwlpaW9fdHJpZ2dlcl9wb2xsKHByaXZhdGUsIGlpb19nZXRfdGltZV9ucygpKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CitFWFBPUlRfU1lNQk9MKGlpb190cmlnZ2VyX2dlbmVyaWNfZGF0YV9yZHlfcG9sbCk7CisKK3ZvaWQgaWlvX3RyaWdnZXJfcG9sbF9jaGFpbmVkKHN0cnVjdCBpaW9fdHJpZ2dlciAqdHJpZywgczY0IHRpbWUpCit7CisJaW50IGk7CisJaWYgKCF0cmlnLT51c2VfY291bnQpIHsKKwkJZm9yIChpID0gMDsgaSA8IENPTkZJR19JSU9fQ09OU1VNRVJTX1BFUl9UUklHR0VSOyBpKyspCisJCQlpZiAodHJpZy0+c3ViaXJxc1tpXS5lbmFibGVkKSB7CisJCQkJdHJpZy0+dXNlX2NvdW50Kys7CisJCQkJaGFuZGxlX25lc3RlZF9pcnEodHJpZy0+c3ViaXJxX2Jhc2UgKyBpKTsKKwkJCX0KKwl9Cit9CitFWFBPUlRfU1lNQk9MKGlpb190cmlnZ2VyX3BvbGxfY2hhaW5lZCk7CisKIHZvaWQgaWlvX3RyaWdnZXJfbm90aWZ5X2RvbmUoc3RydWN0IGlpb190cmlnZ2VyICp0cmlnKQogewogCXRyaWctPnVzZV9jb3VudC0tOwpAQCAtMjAzLDE4ICsyMTQsNiBAQAogfQogRVhQT1JUX1NZTUJPTChpaW9fdHJpZ2dlcl9ub3RpZnlfZG9uZSk7CiAKLS8qKgotICogaWlvX3RyaWdnZXJfcmVhZF9uYW1lKCkgLSByZXRyaWV2ZSB1c2VmdWwgaWRlbnRpZnlpbmcgbmFtZQotICoqLwotc3NpemVfdCBpaW9fdHJpZ2dlcl9yZWFkX25hbWUoc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkgICAgICBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGlpb190cmlnZ2VyICp0cmlnID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHRyaWctPm5hbWUpOwotfQotRVhQT1JUX1NZTUJPTChpaW9fdHJpZ2dlcl9yZWFkX25hbWUpOwotCiAvKiBUcmlnZ2VyIENvbnN1bWVyIHJlbGF0ZWQgZnVuY3Rpb25zICovCiAKIC8qIENvbXBsZXhpdHkgaW4gaGVyZS4gIFdpdGggY2VydGFpbiB0cmlnZ2VycyAoZGF0YXJkeSkgYW4gYWNrbm93bGVkZ2VtZW50CkBAIC0yMjgsMTggKzIyNywxNiBAQAogCQkJCSBzdHJ1Y3QgaWlvX3BvbGxfZnVuYyAqcGYpCiB7CiAJaW50IHJldCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlib29sIG5vdGludXNlCisJCT0gYml0bWFwX2VtcHR5KHRyaWctPnBvb2wsIENPTkZJR19JSU9fQ09OU1VNRVJTX1BFUl9UUklHR0VSKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ0cmlnLT5wb2xsZnVuY19saXN0X2xvY2ssIGZsYWdzKTsKLQlsaXN0X2FkZF90YWlsKCZwZi0+bGlzdCwgJnRyaWctPnBvbGxmdW5jX2xpc3QpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRyaWctPnBvbGxmdW5jX2xpc3RfbG9jaywgZmxhZ3MpOwotCi0JaWYgKHRyaWctPnNldF90cmlnZ2VyX3N0YXRlKQorCXBmLT5pcnEgPSBpaW9fdHJpZ2dlcl9nZXRfaXJxKHRyaWcpOworCXJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHBmLT5pcnEsIHBmLT5oLCBwZi0+dGhyZWFkLAorCQkJCSAgIHBmLT50eXBlLCBwZi0+bmFtZSwKKwkJCQkgICBwZik7CisJaWYgKHRyaWctPnNldF90cmlnZ2VyX3N0YXRlICYmIG5vdGludXNlKQogCQlyZXQgPSB0cmlnLT5zZXRfdHJpZ2dlcl9zdGF0ZSh0cmlnLCB0cnVlKTsKLQlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAic2V0IHRyaWdnZXIgc3RhdGUgZmFpbGVkXG4iKTsKLQkJbGlzdF9kZWwoJnBmLT5saXN0KTsKLQl9CisKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChpaW9fdHJpZ2dlcl9hdHRhY2hfcG9sbF9mdW5jKTsKQEAgLTI0Nyw0MSArMjQ0LDY4IEBACiBpbnQgaWlvX3RyaWdnZXJfZGV0dGFjaF9wb2xsX2Z1bmMoc3RydWN0IGlpb190cmlnZ2VyICp0cmlnLAogCQkJCSAgc3RydWN0IGlpb19wb2xsX2Z1bmMgKnBmKQogewotCXN0cnVjdCBpaW9fcG9sbF9mdW5jICpwZl9jdXJzb3I7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ0cmlnLT5wb2xsZnVuY19saXN0X2xvY2ssIGZsYWdzKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBmX2N1cnNvciwgJnRyaWctPnBvbGxmdW5jX2xpc3QsIGxpc3QpCi0JCWlmIChwZl9jdXJzb3IgPT0gcGYpIHsKLQkJCXJldCA9IDA7Ci0JCQlicmVhazsKLQkJfQotCWlmICghcmV0KSB7Ci0JCWlmIChsaXN0X2lzX3Npbmd1bGFyKCZ0cmlnLT5wb2xsZnVuY19saXN0KQotCQkgICAgJiYgdHJpZy0+c2V0X3RyaWdnZXJfc3RhdGUpIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRyaWctPnBvbGxmdW5jX2xpc3RfbG9jaywKLQkJCQkJICAgICAgIGZsYWdzKTsKLQkJCS8qIE1heSBzbGVlcCBoZW5jZSBjYW5ub3QgaG9sZCB0aGUgc3BpbiBsb2NrICovCi0JCQlyZXQgPSB0cmlnLT5zZXRfdHJpZ2dlcl9zdGF0ZSh0cmlnLCBmYWxzZSk7Ci0JCQlpZiAocmV0KQotCQkJCWdvdG8gZXJyb3JfcmV0OwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnRyaWctPnBvbGxmdW5jX2xpc3RfbG9jaywgZmxhZ3MpOwotCQl9Ci0JCS8qCi0JCSAqIE5vdyB3ZSBjYW4gZGVsZXRlIHNhZmUgaW4gdGhlIGtub3dsZWRnZSB0aGF0LCBpZiB0aGlzIGlzCi0JCSAqIHRoZSBsYXN0IHBvbGxmdW5jIHRoZW4gd2UgaGF2ZSBkaXNhYmxlZCB0aGUgdHJpZ2dlciBhbnl3YXkKLQkJICogYW5kIHNvIG5vdGhpbmcgc2hvdWxkIGJlIGFibGUgdG8gY2FsbCB0aGUgcG9sbGZ1bmMuCi0JCSAqLwotCQlsaXN0X2RlbCgmcGZfY3Vyc29yLT5saXN0KTsKKwlpbnQgcmV0ID0gMDsKKwlib29sIG5vX290aGVyX3VzZXJzCisJCT0gKGJpdG1hcF93ZWlnaHQodHJpZy0+cG9vbCwKKwkJCQkgQ09ORklHX0lJT19DT05TVU1FUlNfUEVSX1RSSUdHRVIpCisJCSAgID09IDEpOworCWlmICh0cmlnLT5zZXRfdHJpZ2dlcl9zdGF0ZSAmJiBub19vdGhlcl91c2VycykgeworCQlyZXQgPSB0cmlnLT5zZXRfdHJpZ2dlcl9zdGF0ZSh0cmlnLCBmYWxzZSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yX3JldDsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHJpZy0+cG9sbGZ1bmNfbGlzdF9sb2NrLCBmbGFncyk7CisJaWlvX3RyaWdnZXJfcHV0X2lycSh0cmlnLCBwZi0+aXJxKTsKKwlmcmVlX2lycShwZi0+aXJxLCBwZik7CiAKIGVycm9yX3JldDoKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChpaW9fdHJpZ2dlcl9kZXR0YWNoX3BvbGxfZnVuYyk7CiAKK2lycXJldHVybl90IGlpb19wb2xsZnVuY19zdG9yZV90aW1lKGludCBpcnEsIHZvaWQgKnApCit7CisJc3RydWN0IGlpb19wb2xsX2Z1bmMgKnBmID0gcDsKKwlwZi0+dGltZXN0YW1wID0gaWlvX2dldF90aW1lX25zKCk7CisJcmV0dXJuIElSUV9XQUtFX1RIUkVBRDsKK30KK0VYUE9SVF9TWU1CT0woaWlvX3BvbGxmdW5jX3N0b3JlX3RpbWUpOworCitzdHJ1Y3QgaWlvX3BvbGxfZnVuYworKmlpb19hbGxvY19wb2xsZnVuYyhpcnFyZXR1cm5fdCAoKmgpKGludCBpcnEsIHZvaWQgKnApLAorCQkgICAgaXJxcmV0dXJuX3QgKCp0aHJlYWQpKGludCBpcnEsIHZvaWQgKnApLAorCQkgICAgaW50IHR5cGUsCisJCSAgICB2b2lkICpwcml2YXRlLAorCQkgICAgY29uc3QgY2hhciAqZm10LAorCQkgICAgLi4uKQoreworCXZhX2xpc3QgdmFyZ3M7CisJc3RydWN0IGlpb19wb2xsX2Z1bmMgKnBmOworCisJcGYgPSBrbWFsbG9jKHNpemVvZiAqcGYsIEdGUF9LRVJORUwpOworCWlmIChwZiA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwl2YV9zdGFydCh2YXJncywgZm10KTsKKwlwZi0+bmFtZSA9IGt2YXNwcmludGYoR0ZQX0tFUk5FTCwgZm10LCB2YXJncyk7CisJdmFfZW5kKHZhcmdzKTsKKwlpZiAocGYtPm5hbWUgPT0gTlVMTCkgeworCQlrZnJlZShwZik7CisJCXJldHVybiBOVUxMOworCX0KKwlwZi0+aCA9IGg7CisJcGYtPnRocmVhZCA9IHRocmVhZDsKKwlwZi0+dHlwZSA9IHR5cGU7CisKKwlyZXR1cm4gcGY7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpaW9fYWxsb2NfcG9sbGZ1bmMpOworCit2b2lkIGlpb19kZWFsbG9jX3BvbGxmdW5jKHN0cnVjdCBpaW9fcG9sbF9mdW5jICpwZikKK3sKKwlrZnJlZShwZi0+bmFtZSk7CisJa2ZyZWUocGYpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWlvX2RlYWxsb2NfcG9sbGZ1bmMpOworCiAvKioKICAqIGlpb190cmlnZ2VyX3JlYWRfY3VycnJlbnQoKSAtIHRyaWdnZXIgY29uc3VtZXIgc3lzZnMgcXVlcnkgd2hpY2ggdHJpZ2dlcgogICoKQEAgLTM0OCw2ICszNzIsMjMgQEAKIHN0YXRpYyB2b2lkIGlpb190cmlnX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBpaW9fdHJpZ2dlciAqdHJpZyA9IHRvX2lpb190cmlnZ2VyKGRldmljZSk7CisJaW50IGk7CisKKwlpZiAodHJpZy0+c3ViaXJxX2Jhc2UpIHsKKwkJZm9yIChpID0gMDsgaSA8IENPTkZJR19JSU9fQ09OU1VNRVJTX1BFUl9UUklHR0VSOyBpKyspIHsKKwkJCWlycV9tb2RpZnlfc3RhdHVzKHRyaWctPnN1YmlycV9iYXNlICsgaSwKKwkJCQkJICBJUlFfTk9BVVRPRU4sCisJCQkJCSAgSVJRX05PUkVRVUVTVCB8IElSUV9OT1BST0JFKTsKKwkJCWlycV9zZXRfY2hpcCh0cmlnLT5zdWJpcnFfYmFzZSArIGksCisJCQkJICAgICBOVUxMKTsKKwkJCWlycV9zZXRfaGFuZGxlcih0cmlnLT5zdWJpcnFfYmFzZSArIGksCisJCQkJCU5VTEwpOworCQl9CisKKwkJaXJxX2ZyZWVfZGVzY3ModHJpZy0+c3ViaXJxX2Jhc2UsCisJCQkgICAgICAgQ09ORklHX0lJT19DT05TVU1FUlNfUEVSX1RSSUdHRVIpOworCX0KKwlrZnJlZSh0cmlnLT5uYW1lKTsKIAlrZnJlZSh0cmlnKTsKIAlpaW9fcHV0KCk7CiB9CkBAIC0zNTYsMTggKzM5Nyw2NiBAQAogCS5yZWxlYXNlID0gaWlvX3RyaWdfcmVsZWFzZSwKIH07CiAKLXN0cnVjdCBpaW9fdHJpZ2dlciAqaWlvX2FsbG9jYXRlX3RyaWdnZXIodm9pZCkKK3N0YXRpYyB2b2lkIGlpb190cmlnX3N1YmlycW1hc2soc3RydWN0IGlycV9kYXRhICpkKQogeworCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcChkKTsKKwlzdHJ1Y3QgaWlvX3RyaWdnZXIgKnRyaWcKKwkJPSBjb250YWluZXJfb2YoY2hpcCwKKwkJCSAgICAgICBzdHJ1Y3QgaWlvX3RyaWdnZXIsIHN1YmlycV9jaGlwKTsKKwl0cmlnLT5zdWJpcnFzW2QtPmlycSAtIHRyaWctPnN1YmlycV9iYXNlXS5lbmFibGVkID0gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGlpb190cmlnX3N1YmlycXVubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJc3RydWN0IGlycV9jaGlwICpjaGlwID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwKGQpOworCXN0cnVjdCBpaW9fdHJpZ2dlciAqdHJpZworCQk9IGNvbnRhaW5lcl9vZihjaGlwLAorCQkJICAgICAgIHN0cnVjdCBpaW9fdHJpZ2dlciwgc3ViaXJxX2NoaXApOworCXRyaWctPnN1YmlycXNbZC0+aXJxIC0gdHJpZy0+c3ViaXJxX2Jhc2VdLmVuYWJsZWQgPSB0cnVlOworfQorCitzdHJ1Y3QgaWlvX3RyaWdnZXIgKmlpb19hbGxvY2F0ZV90cmlnZ2VyKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgdmFyZ3M7CiAJc3RydWN0IGlpb190cmlnZ2VyICp0cmlnOwogCXRyaWcgPSBremFsbG9jKHNpemVvZiAqdHJpZywgR0ZQX0tFUk5FTCk7CiAJaWYgKHRyaWcpIHsKKwkJaW50IGk7CiAJCXRyaWctPmRldi50eXBlID0gJmlpb190cmlnX3R5cGU7CiAJCXRyaWctPmRldi5idXMgPSAmaWlvX2J1c190eXBlOwogCQlkZXZpY2VfaW5pdGlhbGl6ZSgmdHJpZy0+ZGV2KTsKIAkJZGV2X3NldF9kcnZkYXRhKCZ0cmlnLT5kZXYsICh2b2lkICopdHJpZyk7Ci0JCXNwaW5fbG9ja19pbml0KCZ0cmlnLT5wb2xsZnVuY19saXN0X2xvY2spOwotCQlJTklUX0xJU1RfSEVBRCgmdHJpZy0+bGlzdCk7Ci0JCUlOSVRfTElTVF9IRUFEKCZ0cmlnLT5wb2xsZnVuY19saXN0KTsKKworCQltdXRleF9pbml0KCZ0cmlnLT5wb29sX2xvY2spOworCQl0cmlnLT5zdWJpcnFfYmFzZQorCQkJPSBpcnFfYWxsb2NfZGVzY3MoLTEsIDAsCisJCQkJCSAgQ09ORklHX0lJT19DT05TVU1FUlNfUEVSX1RSSUdHRVIsCisJCQkJCSAgMCk7CisJCWlmICh0cmlnLT5zdWJpcnFfYmFzZSA8IDApIHsKKwkJCWtmcmVlKHRyaWcpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJdmFfc3RhcnQodmFyZ3MsIGZtdCk7CisJCXRyaWctPm5hbWUgPSBrdmFzcHJpbnRmKEdGUF9LRVJORUwsIGZtdCwgdmFyZ3MpOworCQl2YV9lbmQodmFyZ3MpOworCQlpZiAodHJpZy0+bmFtZSA9PSBOVUxMKSB7CisJCQlpcnFfZnJlZV9kZXNjcyh0cmlnLT5zdWJpcnFfYmFzZSwKKwkJCQkgICAgICAgQ09ORklHX0lJT19DT05TVU1FUlNfUEVSX1RSSUdHRVIpOworCQkJa2ZyZWUodHJpZyk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQl0cmlnLT5zdWJpcnFfY2hpcC5uYW1lID0gdHJpZy0+bmFtZTsKKwkJdHJpZy0+c3ViaXJxX2NoaXAuaXJxX21hc2sgPSAmaWlvX3RyaWdfc3ViaXJxbWFzazsKKwkJdHJpZy0+c3ViaXJxX2NoaXAuaXJxX3VubWFzayA9ICZpaW9fdHJpZ19zdWJpcnF1bm1hc2s7CisJCWZvciAoaSA9IDA7IGkgPCBDT05GSUdfSUlPX0NPTlNVTUVSU19QRVJfVFJJR0dFUjsgaSsrKSB7CisJCQlpcnFfc2V0X2NoaXAodHJpZy0+c3ViaXJxX2Jhc2UgKyBpLAorCQkJCSAgICAgJnRyaWctPnN1YmlycV9jaGlwKTsKKwkJCWlycV9zZXRfaGFuZGxlcih0cmlnLT5zdWJpcnFfYmFzZSArIGksCisJCQkJCSZoYW5kbGVfc2ltcGxlX2lycSk7CisJCQlpcnFfbW9kaWZ5X3N0YXR1cyh0cmlnLT5zdWJpcnFfYmFzZSArIGksCisJCQkJCSAgSVJRX05PUkVRVUVTVCB8IElSUV9OT0FVVE9FTiwKKwkJCQkJICBJUlFfTk9QUk9CRSk7CisJCX0KIAkJaWlvX2dldCgpOwogCX0KIAlyZXR1cm4gdHJpZzsKQEAgLTM5OCwyMCArNDg3LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woaWlvX2RldmljZV91bnJlZ2lzdGVyX3RyaWdnZXJfY29uc3VtZXIpOwogCi1pbnQgaWlvX2FsbG9jX3BvbGxmdW5jKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCi0JCSAgICAgICB2b2lkICgqaW1tZWRpYXRlKShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KSwKLQkJICAgICAgIHZvaWQgKCptYWluKShzdHJ1Y3QgaWlvX2RldiAqcHJpdmF0ZV9kYXRhLCBzNjQgdGltZSkpCi17Ci0JaW5kaW9fZGV2LT5wb2xsZnVuYyA9IGt6YWxsb2Moc2l6ZW9mKCppbmRpb19kZXYtPnBvbGxmdW5jKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGluZGlvX2Rldi0+cG9sbGZ1bmMgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JaW5kaW9fZGV2LT5wb2xsZnVuYy0+cG9sbF9mdW5jX2ltbWVkaWF0ZSA9IGltbWVkaWF0ZTsKLQlpbmRpb19kZXYtPnBvbGxmdW5jLT5wb2xsX2Z1bmNfbWFpbiA9IG1haW47Ci0JaW5kaW9fZGV2LT5wb2xsZnVuYy0+cHJpdmF0ZV9kYXRhID0gaW5kaW9fZGV2OwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChpaW9fYWxsb2NfcG9sbGZ1bmMpOwotCiBpbnQgaWlvX3RyaWdnZXJlZF9yaW5nX3Bvc3RlbmFibGUoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKIAlyZXR1cm4gaW5kaW9fZGV2LT50cmlnCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2tmaWZvX2J1Zi5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9rZmlmb19idWYuYwppbmRleCBhNTZjMGNiLi5jYzE0Yjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2tmaWZvX2J1Zi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8va2ZpZm9fYnVmLmMKQEAgLTgsNiArOCw4IEBACiAKICNpbmNsdWRlICJrZmlmb19idWYuaCIKIAorI2RlZmluZSBpaW9fdG9fa2ZpZm8ocikgY29udGFpbmVyX29mKHIsIHN0cnVjdCBpaW9fa2ZpZm8sIHJpbmcpCisKIHN0YXRpYyBpbmxpbmUgaW50IF9faWlvX2FsbG9jYXRlX2tmaWZvKHN0cnVjdCBpaW9fa2ZpZm8gKmJ1ZiwKIAkJCQlpbnQgYnl0ZXNfcGVyX2RhdHVtLCBpbnQgbGVuZ3RoKQogewpAQCAtMTgsNyArMjAsNyBAQAogCXJldHVybiBrZmlmb19hbGxvYygmYnVmLT5rZiwgYnl0ZXNfcGVyX2RhdHVtKmxlbmd0aCwgR0ZQX0tFUk5FTCk7CiB9CiAKLWludCBpaW9fcmVxdWVzdF91cGRhdGVfa2ZpZm8oc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcikKK3N0YXRpYyBpbnQgaWlvX3JlcXVlc3RfdXBkYXRlX2tmaWZvKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnIpCiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGlpb19rZmlmbyAqYnVmID0gaWlvX3RvX2tmaWZvKHIpOwpAQCAtMzcsMzEgKzM5LDI3IEBACiAJbXV0ZXhfdW5sb2NrKCZidWYtPnVzZV9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQotRVhQT1JUX1NZTUJPTChpaW9fcmVxdWVzdF91cGRhdGVfa2ZpZm8pOwogCi12b2lkIGlpb19tYXJrX2tmaWZvX2luX3VzZShzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyKQorc3RhdGljIHZvaWQgaWlvX21hcmtfa2ZpZm9faW5fdXNlKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnIpCiB7CiAJc3RydWN0IGlpb19rZmlmbyAqYnVmID0gaWlvX3RvX2tmaWZvKHIpOwogCW11dGV4X2xvY2soJmJ1Zi0+dXNlX2xvY2spOwogCWJ1Zi0+dXNlX2NvdW50Kys7CiAJbXV0ZXhfdW5sb2NrKCZidWYtPnVzZV9sb2NrKTsKIH0KLUVYUE9SVF9TWU1CT0woaWlvX21hcmtfa2ZpZm9faW5fdXNlKTsKIAotdm9pZCBpaW9fdW5tYXJrX2tmaWZvX2luX3VzZShzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyKQorc3RhdGljIHZvaWQgaWlvX3VubWFya19rZmlmb19pbl91c2Uoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcikKIHsKIAlzdHJ1Y3QgaWlvX2tmaWZvICpidWYgPSBpaW9fdG9fa2ZpZm8ocik7CiAJbXV0ZXhfbG9jaygmYnVmLT51c2VfbG9jayk7CiAJYnVmLT51c2VfY291bnQtLTsKIAltdXRleF91bmxvY2soJmJ1Zi0+dXNlX2xvY2spOwogfQotRVhQT1JUX1NZTUJPTChpaW9fdW5tYXJrX2tmaWZvX2luX3VzZSk7CiAKLWludCBpaW9fZ2V0X2xlbmd0aF9rZmlmbyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyKQorc3RhdGljIGludCBpaW9fZ2V0X2xlbmd0aF9rZmlmbyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyKQogewogCXJldHVybiByLT5sZW5ndGg7CiB9Ci1FWFBPUlRfU1lNQk9MKGlpb19nZXRfbGVuZ3RoX2tmaWZvKTsKIAogc3RhdGljIGlubGluZSB2b2lkIF9faWlvX2luaXRfa2ZpZm8oc3RydWN0IGlpb19rZmlmbyAqa2YpCiB7CkBAIC0xMDgsNiArMTA2LDcgQEAKIAlrZiA9IGt6YWxsb2Moc2l6ZW9mICprZiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFrZikKIAkJcmV0dXJuIE5VTEw7CisJa2YtPnVwZGF0ZV9uZWVkZWQgPSB0cnVlOwogCWlpb19yaW5nX2J1ZmZlcl9pbml0KCZrZi0+cmluZywgaW5kaW9fZGV2KTsKIAlfX2lpb19pbml0X2tmaWZvKGtmKTsKIAlrZi0+cmluZy5kZXYudHlwZSA9ICZpaW9fa2ZpZm9fdHlwZTsKQEAgLTEyMCw0MSArMTE5LDM3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGlpb19rZmlmb19hbGxvY2F0ZSk7CiAKLWludCBpaW9fZ2V0X2J5dGVzX3Blcl9kYXR1bV9rZmlmbyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyKQorc3RhdGljIGludCBpaW9fZ2V0X2J5dGVzX3Blcl9kYXR1bV9rZmlmbyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyKQogewogCXJldHVybiByLT5ieXRlc19wZXJfZGF0dW07CiB9Ci1FWFBPUlRfU1lNQk9MKGlpb19nZXRfYnl0ZXNfcGVyX2RhdHVtX2tmaWZvKTsKIAotaW50IGlpb19zZXRfYnl0ZXNfcGVyX2RhdHVtX2tmaWZvKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnIsIHNpemVfdCBicGQpCitzdGF0aWMgaW50IGlpb19zZXRfYnl0ZXNfcGVyX2RhdHVtX2tmaWZvKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnIsIHNpemVfdCBicGQpCiB7CiAJaWYgKHItPmJ5dGVzX3Blcl9kYXR1bSAhPSBicGQpIHsKIAkJci0+Ynl0ZXNfcGVyX2RhdHVtID0gYnBkOwotCQlpZiAoci0+YWNjZXNzLm1hcmtfcGFyYW1fY2hhbmdlKQotCQkJci0+YWNjZXNzLm1hcmtfcGFyYW1fY2hhbmdlKHIpOworCQlpZiAoci0+YWNjZXNzLT5tYXJrX3BhcmFtX2NoYW5nZSkKKwkJCXItPmFjY2Vzcy0+bWFya19wYXJhbV9jaGFuZ2Uocik7CiAJfQogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChpaW9fc2V0X2J5dGVzX3Blcl9kYXR1bV9rZmlmbyk7CiAKLWludCBpaW9fbWFya191cGRhdGVfbmVlZGVkX2tmaWZvKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnIpCitzdGF0aWMgaW50IGlpb19tYXJrX3VwZGF0ZV9uZWVkZWRfa2ZpZm8oc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcikKIHsKIAlzdHJ1Y3QgaWlvX2tmaWZvICprZiA9IGlpb190b19rZmlmbyhyKTsKIAlrZi0+dXBkYXRlX25lZWRlZCA9IHRydWU7CiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKGlpb19tYXJrX3VwZGF0ZV9uZWVkZWRfa2ZpZm8pOwogCi1pbnQgaWlvX3NldF9sZW5ndGhfa2ZpZm8oc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqciwgaW50IGxlbmd0aCkKK3N0YXRpYyBpbnQgaWlvX3NldF9sZW5ndGhfa2ZpZm8oc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqciwgaW50IGxlbmd0aCkKIHsKIAlpZiAoci0+bGVuZ3RoICE9IGxlbmd0aCkgewogCQlyLT5sZW5ndGggPSBsZW5ndGg7Ci0JCWlmIChyLT5hY2Nlc3MubWFya19wYXJhbV9jaGFuZ2UpCi0JCQlyLT5hY2Nlc3MubWFya19wYXJhbV9jaGFuZ2Uocik7CisJCWlmIChyLT5hY2Nlc3MtPm1hcmtfcGFyYW1fY2hhbmdlKQorCQkJci0+YWNjZXNzLT5tYXJrX3BhcmFtX2NoYW5nZShyKTsKIAl9CiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKGlpb19zZXRfbGVuZ3RoX2tmaWZvKTsKIAogdm9pZCBpaW9fa2ZpZm9fZnJlZShzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyKQogewpAQCAtMTYzLDcgKzE1OCw5IEBACiB9CiBFWFBPUlRfU1lNQk9MKGlpb19rZmlmb19mcmVlKTsKIAotaW50IGlpb19zdG9yZV90b19rZmlmbyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyLCB1OCAqZGF0YSwgczY0IHRpbWVzdGFtcCkKK3N0YXRpYyBpbnQgaWlvX3N0b3JlX3RvX2tmaWZvKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnIsCisJCQkgICAgICB1OCAqZGF0YSwKKwkJCSAgICAgIHM2NCB0aW1lc3RhbXApCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgaWlvX2tmaWZvICprZiA9IGlpb190b19rZmlmbyhyKTsKQEAgLTE3OSwxOCArMTc2LDMwIEBACiAJa2ZyZWUoZGF0YWwpOwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChpaW9fc3RvcmVfdG9fa2ZpZm8pOwogCi1pbnQgaWlvX3JpcF9rZmlmbyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyLAotCQlzaXplX3QgY291bnQsIGNoYXIgX191c2VyICpidWYsIGludCAqZGVhZG9mZnNldCkKK3N0YXRpYyBpbnQgaWlvX3JlYWRfZmlyc3Rfbl9rZmlmbyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyLAorCQkJICAgc2l6ZV90IG4sIGNoYXIgX191c2VyICpidWYpCiB7CiAJaW50IHJldCwgY29waWVkOwogCXN0cnVjdCBpaW9fa2ZpZm8gKmtmID0gaWlvX3RvX2tmaWZvKHIpOwogCi0JKmRlYWRvZmZzZXQgPSAwOwotCXJldCA9IGtmaWZvX3RvX3VzZXIoJmtmLT5rZiwgYnVmLCByLT5ieXRlc19wZXJfZGF0dW0qY291bnQsICZjb3BpZWQpOworCXJldCA9IGtmaWZvX3RvX3VzZXIoJmtmLT5rZiwgYnVmLCByLT5ieXRlc19wZXJfZGF0dW0qbiwgJmNvcGllZCk7CiAKIAlyZXR1cm4gY29waWVkOwogfQotRVhQT1JUX1NZTUJPTChpaW9fcmlwX2tmaWZvKTsKKworY29uc3Qgc3RydWN0IGlpb19yaW5nX2FjY2Vzc19mdW5jcyBrZmlmb19hY2Nlc3NfZnVuY3MgPSB7CisJLm1hcmtfaW5fdXNlID0gJmlpb19tYXJrX2tmaWZvX2luX3VzZSwKKwkudW5tYXJrX2luX3VzZSA9ICZpaW9fdW5tYXJrX2tmaWZvX2luX3VzZSwKKwkuc3RvcmVfdG8gPSAmaWlvX3N0b3JlX3RvX2tmaWZvLAorCS5yZWFkX2ZpcnN0X24gPSAmaWlvX3JlYWRfZmlyc3Rfbl9rZmlmbywKKwkubWFya19wYXJhbV9jaGFuZ2UgPSAmaWlvX21hcmtfdXBkYXRlX25lZWRlZF9rZmlmbywKKwkucmVxdWVzdF91cGRhdGUgPSAmaWlvX3JlcXVlc3RfdXBkYXRlX2tmaWZvLAorCS5nZXRfYnl0ZXNfcGVyX2RhdHVtID0gJmlpb19nZXRfYnl0ZXNfcGVyX2RhdHVtX2tmaWZvLAorCS5zZXRfYnl0ZXNfcGVyX2RhdHVtID0gJmlpb19zZXRfYnl0ZXNfcGVyX2RhdHVtX2tmaWZvLAorCS5nZXRfbGVuZ3RoID0gJmlpb19nZXRfbGVuZ3RoX2tmaWZvLAorCS5zZXRfbGVuZ3RoID0gJmlpb19zZXRfbGVuZ3RoX2tmaWZvLAorfTsKK0VYUE9SVF9TWU1CT0woa2ZpZm9fYWNjZXNzX2Z1bmNzKTsKKwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9rZmlmb19idWYuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8va2ZpZm9fYnVmLmgKaW5kZXggODA2NDM4My4uYWFjMzA1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9rZmlmb19idWYuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2tmaWZvX2J1Zi5oCkBAIC0xMSw0NSArMTEsNyBAQAogCXN0cnVjdCBtdXRleCB1c2VfbG9jazsKIH07CiAKLSNkZWZpbmUgaWlvX3RvX2tmaWZvKHIpIGNvbnRhaW5lcl9vZihyLCBzdHJ1Y3QgaWlvX2tmaWZvLCByaW5nKQotCi1pbnQgaWlvX2NyZWF0ZV9rZmlmbyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICoqcik7Ci1pbnQgaWlvX2luaXRfa2ZpZm8oc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqciwgc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7Ci12b2lkIGlpb19leGl0X2tmaWZvKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnIpOwotdm9pZCBpaW9fZnJlZV9rZmlmbyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyKTsKLXZvaWQgaWlvX21hcmtfa2ZpZm9faW5fdXNlKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnIpOwotdm9pZCBpaW9fdW5tYXJrX2tmaWZvX2luX3VzZShzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyKTsKLQotaW50IGlpb19zdG9yZV90b19rZmlmbyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyLCB1OCAqZGF0YSwgczY0IHRpbWVzdGFtcCk7Ci1pbnQgaWlvX3JpcF9rZmlmbyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyLAotCQlzaXplX3QgY291bnQsCi0JCWNoYXIgX191c2VyICpidWYsCi0JCWludCAqZGVhZF9vZmZzZXQpOwotCi1pbnQgaWlvX3JlcXVlc3RfdXBkYXRlX2tmaWZvKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnIpOwotaW50IGlpb19tYXJrX3VwZGF0ZV9uZWVkZWRfa2ZpZm8oc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcik7Ci0KLWludCBpaW9fZ2V0X2J5dGVzX3Blcl9kYXR1bV9rZmlmbyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyKTsKLWludCBpaW9fc2V0X2J5dGVzX3Blcl9kYXR1bV9rZmlmbyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyLCBzaXplX3QgYnBkKTsKLWludCBpaW9fZ2V0X2xlbmd0aF9rZmlmbyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyKTsKLWludCBpaW9fc2V0X2xlbmd0aF9rZmlmbyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyLCBpbnQgbGVuZ3RoKTsKLQotc3RhdGljIGlubGluZSB2b2lkIGlpb19rZmlmb19yZWdpc3Rlcl9mdW5jcyhzdHJ1Y3QgaWlvX3JpbmdfYWNjZXNzX2Z1bmNzICpyYSkKLXsKLQlyYS0+bWFya19pbl91c2UgPSAmaWlvX21hcmtfa2ZpZm9faW5fdXNlOwotCXJhLT51bm1hcmtfaW5fdXNlID0gJmlpb191bm1hcmtfa2ZpZm9faW5fdXNlOwotCi0JcmEtPnN0b3JlX3RvID0gJmlpb19zdG9yZV90b19rZmlmbzsKLQlyYS0+cmlwX2xvdHMgPSAmaWlvX3JpcF9rZmlmbzsKLQotCXJhLT5tYXJrX3BhcmFtX2NoYW5nZSA9ICZpaW9fbWFya191cGRhdGVfbmVlZGVkX2tmaWZvOwotCXJhLT5yZXF1ZXN0X3VwZGF0ZSA9ICZpaW9fcmVxdWVzdF91cGRhdGVfa2ZpZm87Ci0KLQlyYS0+Z2V0X2J5dGVzX3Blcl9kYXR1bSA9ICZpaW9fZ2V0X2J5dGVzX3Blcl9kYXR1bV9rZmlmbzsKLQlyYS0+c2V0X2J5dGVzX3Blcl9kYXR1bSA9ICZpaW9fc2V0X2J5dGVzX3Blcl9kYXR1bV9rZmlmbzsKLQlyYS0+Z2V0X2xlbmd0aCA9ICZpaW9fZ2V0X2xlbmd0aF9rZmlmbzsKLQlyYS0+c2V0X2xlbmd0aCA9ICZpaW9fc2V0X2xlbmd0aF9rZmlmbzsKLX07CitleHRlcm4gY29uc3Qgc3RydWN0IGlpb19yaW5nX2FjY2Vzc19mdW5jcyBrZmlmb19hY2Nlc3NfZnVuY3M7CiAKIHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKmlpb19rZmlmb19hbGxvY2F0ZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKIHZvaWQgaWlvX2tmaWZvX2ZyZWUoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2xpZ2h0L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2xpZ2h0L0tjb25maWcKaW5kZXggMzZkOGJiZS4uNDZkNjJkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvS2NvbmZpZwpAQCAtMSwxOCArMSw4IEBACi0jCitcIwogIyBMaWdodCBzZW5zb3JzCiAjCiBjb21tZW50ICJMaWdodCBzZW5zb3JzIgogCi1jb25maWcgU0VOU09SU19UU0wyNTYzCi0JdHJpc3RhdGUgIlRBT1MgVFNMMjU2WzAtM10gYW1iaWVudCBsaWdodCBzZW5zb3IiCi0JZGVwZW5kcyBvbiBJMkMKLQloZWxwCi0JIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgVGFvcyBUU0wyNTYwLAotCSBUU0wyNTYxLCBUU0wyNTYyIGFuZCBUU0wyNTYzIGFtYmllbnQgbGlnaHQgc2Vuc29ycy4KLQotCSBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCi0JIHdpbGwgYmUgY2FsbGVkIHRzbDI1NjMuCi0KIGNvbmZpZyBTRU5TT1JTX0lTTDI5MDE4CiAgICAgICAgIHRyaXN0YXRlICJJU0wgMjkwMTggbGlnaHQgYW5kIHByb3hpbWl0eSBzZW5zb3IiCiAgICAgICAgIGRlcGVuZHMgb24gSTJDCkBAIC0yNCwzICsxNCwxOSBAQAogICAgICAgICAgaW4gbHV4LCBwcm94aW1pdHkgaW5mcmFyZWQgc2Vuc2luZyBhbmQgbm9ybWFsIGluZnJhcmVkIHNlbnNpbmcuCiAgICAgICAgICBEYXRhIGZyb20gc2Vuc29yIGlzIGFjY2Vzc2libGUgdmlhIHN5c2ZzLgogCitjb25maWcgU0VOU09SU19UU0wyNTYzCisJdHJpc3RhdGUgIlRBT1MgVFNMMjU2MCwgVFNMMjU2MSwgVFNMMjU2MiBhbmQgVFNMMjU2MyBhbWJpZW50IGxpZ2h0IHNlbnNvcnMiCisJZGVwZW5kcyBvbiBJMkMKKwloZWxwCisJIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgVGFvcyBUU0wyNTYwLAorCSBUU0wyNTYxLCBUU0wyNTYyIGFuZCBUU0wyNTYzIGFtYmllbnQgbGlnaHQgc2Vuc29ycy4KKworCSBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCisJIHdpbGwgYmUgY2FsbGVkIHRzbDI1NjMuCisKK2NvbmZpZyBUU0wyNTgzCisJdHJpc3RhdGUgIlRBT1MgVFNMMjU4MCwgVFNMMjU4MSBhbmQgVFNMMjU4MyBsaWdodC10by1kaWdpdGFsIGNvbnZlcnRlcnMiCisJZGVwZW5kcyBvbiBJMkMKKwloZWxwCisJIFByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBUQU9TIHRzbDI1ODAsIHRzbDI1ODEgYW5kIHRzbDI1ODMgZGV2aWNlcy4KKwkgQWNjZXNzIEFMUyBkYXRhIHZpYSBpaW8sIHN5c2ZzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvTWFrZWZpbGUKaW5kZXggOTE0MmMwZS4uMzAxMWZiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2xpZ2h0L01ha2VmaWxlCkBAIC00LDMgKzQsNCBAQAogCiBvYmotJChDT05GSUdfU0VOU09SU19UU0wyNTYzKQkrPSB0c2wyNTYzLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0lTTDI5MDE4KQkrPSBpc2wyOTAxOC5vCitvYmotJChDT05GSUdfVFNMMjU4MykJKz0gdHNsMjU4My5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2xpZ2h0L2lzbDI5MDE4LmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2xpZ2h0L2lzbDI5MDE4LmMKaW5kZXggZjkxOWNjMS4uNDc5NGZmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC9pc2wyOTAxOC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvaXNsMjkwMTguYwpAQCAtNDAyLDE2ICs0MDIsNiBAQAogCXJldHVybiBnZXRfc2Vuc29yX2RhdGEoZGV2LCBidWYsIENPTU1NQU5EMV9PUE1PREVfUFJPWF9PTkNFKTsKIH0KIAotLyogUmVhZCBuYW1lICovCi1zdGF0aWMgc3NpemVfdCBzaG93X25hbWUoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgaXNsMjkwMThfY2hpcCAqY2hpcCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgY2hpcC0+Y2xpZW50LT5uYW1lKTsKLX0KLQogc3RhdGljIElJT19ERVZJQ0VfQVRUUihyYW5nZSwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfcmFuZ2UsIHN0b3JlX3JhbmdlLCAwKTsKIHN0YXRpYyBJSU9fQ09OU1RfQVRUUihyYW5nZV9hdmFpbGFibGUsICIxMDAwIDQwMDAgMTYwMDAgNjQwMDAiKTsKIHN0YXRpYyBJSU9fQ09OU1RfQVRUUihhZGNfcmVzb2x1dGlvbl9hdmFpbGFibGUsICI0IDggMTIgMTYiKTsKQEAgLTQyNCwxMiArNDE0LDEwIEBACiBzdGF0aWMgSUlPX0RFVklDRV9BVFRSKGlsbHVtaW5hbmNlMF9pbnB1dCwgU19JUlVHTywgc2hvd19sdXgsIE5VTEwsIDApOwogc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbnRlbnNpdHlfaW5mcmFyZWRfcmF3LCBTX0lSVUdPLCBzaG93X2lyLCBOVUxMLCAwKTsKIHN0YXRpYyBJSU9fREVWSUNFX0FUVFIocHJveGltaXR5X3JhdywgU19JUlVHTywgc2hvd19wcm94aW1faXIsIE5VTEwsIDApOwotc3RhdGljIElJT19ERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBzaG93X25hbWUsIE5VTEwsIDApOwogCiAjZGVmaW5lIElTTDI5MDE4X0RFVl9BVFRSKG5hbWUpICgmaWlvX2Rldl9hdHRyXyMjbmFtZS5kZXZfYXR0ci5hdHRyKQogI2RlZmluZSBJU0wyOTAxOF9DT05TVF9BVFRSKG5hbWUpICgmaWlvX2NvbnN0X2F0dHJfIyNuYW1lLmRldl9hdHRyLmF0dHIpCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaXNsMjkwMThfYXR0cmlidXRlc1tdID0gewotCUlTTDI5MDE4X0RFVl9BVFRSKG5hbWUpLAogCUlTTDI5MDE4X0RFVl9BVFRSKHJhbmdlKSwKIAlJU0wyOTAxOF9DT05TVF9BVFRSKHJhbmdlX2F2YWlsYWJsZSksCiAJSVNMMjkwMThfREVWX0FUVFIoYWRjX3Jlc29sdXRpb24pLApAQCAtNDY3LDYgKzQ1NSwxMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIGlzbDI5MTA4X2luZm8gPSB7CisJLmF0dHJzID0gJmlzbDI5MTA4X2dyb3VwLAorCS5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEUsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBpc2wyOTAxOF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKQEAgLTQ5MiwxNSArNDg1LDE1IEBACiAJaWYgKGVycikKIAkJZ290byBleGl0X2ZyZWU7CiAKLQljaGlwLT5pbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKCk7CisJY2hpcC0+aW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgwKTsKIAlpZiAoIWNoaXAtPmluZGlvX2RldikgewogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImlpbyBhbGxvY2F0aW9uIGZhaWxzXG4iKTsKIAkJZ290byBleGl0X2ZyZWU7CiAJfQotCWNoaXAtPmluZGlvX2Rldi0+YXR0cnMgPSAmaXNsMjkxMDhfZ3JvdXA7CisJY2hpcC0+aW5kaW9fZGV2LT5pbmZvID0gJmlzbDI5MTA4X2luZm87CisJY2hpcC0+aW5kaW9fZGV2LT5uYW1lID0gaWQtPm5hbWU7CiAJY2hpcC0+aW5kaW9fZGV2LT5kZXYucGFyZW50ID0gJmNsaWVudC0+ZGV2OwogCWNoaXAtPmluZGlvX2Rldi0+ZGV2X2RhdGEgPSAodm9pZCAqKShjaGlwKTsKLQljaGlwLT5pbmRpb19kZXYtPmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRTsKIAljaGlwLT5pbmRpb19kZXYtPm1vZGVzID0gSU5ESU9fRElSRUNUX01PREU7CiAJZXJyID0gaWlvX2RldmljZV9yZWdpc3RlcihjaGlwLT5pbmRpb19kZXYpOwogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvdHNsMjU2My5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC90c2wyNTYzLmMKaW5kZXggZGFkYWU3NS4uOWNmZmEyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC90c2wyNTYzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC90c2wyNTYzLmMKQEAgLTkyLDcgKzkyLDcgQEAKIAl1MTYgbWF4OwogfTsKIAotc3RhdGljIHN0cnVjdCB0c2wyNTYzX2dhaW5sZXZlbF9jb2VmZiB0c2wyNTYzX2dhaW5sZXZlbF90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB0c2wyNTYzX2dhaW5sZXZlbF9jb2VmZiB0c2wyNTYzX2dhaW5sZXZlbF90YWJsZVtdID0gewogCXsKIAkJLmdhaW50aW1lCT0gVFNMMjU2M19USU1JTkdfNDAwTVMgfCBUU0wyNTYzX1RJTUlOR19HQUlOMTYsCiAJCS5taW4JCT0gMCwKQEAgLTExNSwxNSArMTE1LDEyIEBACiBzdHJ1Y3QgdHNsMjU2M19jaGlwIHsKIAlzdHJ1Y3QgbXV0ZXgJCWxvY2s7CiAJc3RydWN0IGkyY19jbGllbnQJKmNsaWVudDsKLQlzdHJ1Y3QgaWlvX2RldgkJKmluZGlvX2RldjsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrCXBvd2Vyb2ZmX3dvcms7CiAKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29ya190aHJlc2g7Ci0JczY0CQkJZXZlbnRfdGltZXN0YW1wOwogCS8qIFJlbWVtYmVyIHN0YXRlIGZvciBzdXNwZW5kIGFuZCByZXN1bWUgZnVuY3Rpb25zICovCiAJcG1fbWVzc2FnZV90CQlzdGF0ZTsKIAotCXN0cnVjdCB0c2wyNTYzX2dhaW5sZXZlbF9jb2VmZiAqZ2FpbmxldmVsOworCXN0cnVjdCB0c2wyNTYzX2dhaW5sZXZlbF9jb2VmZiBjb25zdCAqZ2FpbmxldmVsOwogCiAJdTE2CQkJbG93X3RocmVzOwogCXUxNgkJCWhpZ2hfdGhyZXM7CkBAIC00NjcsMzIgKzQ2NCw2IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICBTeXNmcyBpbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgc3NpemVfdCB0c2wyNTYzX2FkY19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgdHNsMjU2M19jaGlwICpjaGlwID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKLQlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7Ci0JaW50IHJldDsKLQotCW11dGV4X2xvY2soJmNoaXAtPmxvY2spOwotCi0JcmV0ID0gdHNsMjU2M19nZXRfYWRjKGNoaXApOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCi0Jc3dpdGNoICh0aGlzX2F0dHItPmFkZHJlc3MpIHsKLQljYXNlIDA6Ci0JCXJldCA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGNoaXAtPmRhdGEwKTsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlyZXQgPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBjaGlwLT5kYXRhMSk7Ci0JCWJyZWFrOwotCX0KLW91dDoKLQltdXRleF91bmxvY2soJmNoaXAtPmxvY2spOwotCXJldHVybiByZXQ7Ci19CiAKIC8qIEFwcGx5IGNhbGlicmF0aW9uIGNvZWZmaWNpZW50IHRvIEFEQyBjb3VudC4gKi8KIHN0YXRpYyB1MzIgY2FsaWJfYWRjKHUzMiBhZGMsIHUzMiBjYWxpYikKQEAgLTUwNSwyMzcgKzQ3NiwxNjUgQEAKIAlyZXR1cm4gKHUzMikgc2NhbGVkOwogfQogCi1zdGF0aWMgc3NpemVfdCB0c2wyNTYzX2x1eF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorc3RhdGljIGludCB0c2wyNTYzX3dyaXRlX3JhdyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAorCQkJICAgICAgIHN0cnVjdCBpaW9fY2hhbl9zcGVjIGNvbnN0ICpjaGFuLAorCQkJICAgICAgIGludCB2YWwsCisJCQkgICAgICAgaW50IHZhbDIsCisJCQkgICAgICAgbG9uZyBtYXNrKQogewotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgdHNsMjU2M19jaGlwICpjaGlwID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKLQl1MzIgY2FsaWIwLCBjYWxpYjE7Ci0JaW50IHJldDsKKwlzdHJ1Y3QgdHNsMjU2M19jaGlwICpjaGlwID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKIAotCW11dGV4X2xvY2soJmNoaXAtPmxvY2spOwotCi0JcmV0ID0gdHNsMjU2M19nZXRfYWRjKGNoaXApOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCi0JY2FsaWIwID0gY2FsaWJfYWRjKGNoaXAtPmRhdGEwLCBjaGlwLT5jYWxpYjApICogY2hpcC0+Y292ZXJfY29tcF9nYWluOwotCWNhbGliMSA9IGNhbGliX2FkYyhjaGlwLT5kYXRhMSwgY2hpcC0+Y2FsaWIxKSAqIGNoaXAtPmNvdmVyX2NvbXBfZ2FpbjsKLQotCXJldCA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGFkY190b19sdXgoY2FsaWIwLCBjYWxpYjEpKTsKLQotb3V0OgotCW11dGV4X3VubG9jaygmY2hpcC0+bG9jayk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHNzaXplX3QgZm9ybWF0X2NhbGliKGNoYXIgKmJ1ZiwgaW50IGxlbiwgdTMyIGNhbGliKQotewotCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBjYWxpYl90b19zeXNmcyhjYWxpYikpOwotfQotCi1zdGF0aWMgc3NpemVfdCB0c2wyNTYzX2NhbGliX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAotCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCB0c2wyNTYzX2NoaXAgKmNoaXAgPSBpbmRpb19kZXYtPmRldl9kYXRhOwotCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKLQlpbnQgcmV0OwotCi0JbXV0ZXhfbG9jaygmY2hpcC0+bG9jayk7Ci0Jc3dpdGNoICh0aGlzX2F0dHItPmFkZHJlc3MpIHsKLQljYXNlIDA6Ci0JCXJldCA9IGZvcm1hdF9jYWxpYihidWYsIFBBR0VfU0laRSwgY2hpcC0+Y2FsaWIwKTsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlyZXQgPSBmb3JtYXRfY2FsaWIoYnVmLCBQQUdFX1NJWkUsIGNoaXAtPmNhbGliMSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FTk9ERVY7Ci0JfQotCW11dGV4X3VubG9jaygmY2hpcC0+bG9jayk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHNzaXplX3QgdHNsMjU2M19jYWxpYl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQotewotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgdHNsMjU2M19jaGlwICpjaGlwID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKLQlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7Ci0JaW50IHZhbHVlOwotCXUzMiBjYWxpYjsKLQotCWlmICgxICE9IHNzY2FuZihidWYsICIlZCIsICZ2YWx1ZSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY2FsaWIgPSBjYWxpYl9mcm9tX3N5c2ZzKHZhbHVlKTsKLQotCXN3aXRjaCAodGhpc19hdHRyLT5hZGRyZXNzKSB7Ci0JY2FzZSAwOgotCQljaGlwLT5jYWxpYjAgPSBjYWxpYjsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQljaGlwLT5jYWxpYjEgPSBjYWxpYjsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbnRlbnNpdHkwX2JvdGhfcmF3LCBTX0lSVUdPLAotCQl0c2wyNTYzX2FkY19zaG93LCBOVUxMLCAwKTsKLXN0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW50ZW5zaXR5MV9pcl9yYXcsIFNfSVJVR08sCi0JCXRzbDI1NjNfYWRjX3Nob3csIE5VTEwsIDEpOwotc3RhdGljIERFVklDRV9BVFRSKGlsbHVtaW5hbmNlMF9pbnB1dCwgU19JUlVHTywgdHNsMjU2M19sdXhfc2hvdywgTlVMTCk7Ci1zdGF0aWMgSUlPX0RFVklDRV9BVFRSKGludGVuc2l0eTBfYm90aF9jYWxpYmdhaW4sIFNfSVJVR08gfCBTX0lXVVNSLAotCQl0c2wyNTYzX2NhbGliX3Nob3csIHRzbDI1NjNfY2FsaWJfc3RvcmUsIDApOwotc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbnRlbnNpdHkxX2lyX2NhbGliZ2FpbiwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCXRzbDI1NjNfY2FsaWJfc2hvdywgdHNsMjU2M19jYWxpYl9zdG9yZSwgMSk7Ci0KLXN0YXRpYyBzc2l6ZV90IHRzbDI1NjNfc2hvd19uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQljaGFyICpidWYpCi17Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCB0c2wyNTYzX2NoaXAgKmNoaXAgPSBpbmRpb19kZXYtPmRldl9kYXRhOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBjaGlwLT5jbGllbnQtPm5hbWUpOwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgdHNsMjU2M19zaG93X25hbWUsIE5VTEwpOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqdHNsMjU2M19hdHRyaWJ1dGVzW10gPSB7Ci0JJmlpb19kZXZfYXR0cl9pbnRlbnNpdHkwX2JvdGhfcmF3LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbnRlbnNpdHkxX2lyX3Jhdy5kZXZfYXR0ci5hdHRyLAotCSZkZXZfYXR0cl9pbGx1bWluYW5jZTBfaW5wdXQuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2ludGVuc2l0eTBfYm90aF9jYWxpYmdhaW4uZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2Rldl9hdHRyX2ludGVuc2l0eTFfaXJfY2FsaWJnYWluLmRldl9hdHRyLmF0dHIsCi0JJmRldl9hdHRyX25hbWUuYXR0ciwKLQlOVUxMCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCB0c2wyNTYzX2dyb3VwID0gewotCS5hdHRycyA9IHRzbDI1NjNfYXR0cmlidXRlcywKLX07Ci0KLXN0YXRpYyBzc2l6ZV90IHRzbDI1NjNfcmVhZF90aHJlc2goc3RydWN0IGRldmljZSAqZGV2LAotCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQljaGFyICpidWYpCi17Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCB0c2wyNTYzX2NoaXAgKmNoaXAgPSBpbmRpb19kZXYtPmRldl9kYXRhOwotCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKLQl1MTYgdmFsID0gMDsKLQlzd2l0Y2ggKHRoaXNfYXR0ci0+YWRkcmVzcykgewotCWNhc2UgVFNMMjU2M19SRUdfSElHSExPVzoKLQkJdmFsID0gY2hpcC0+aGlnaF90aHJlczsKLQkJYnJlYWs7Ci0JY2FzZSBUU0wyNTYzX1JFR19MT1dMT1c6Ci0JCXZhbCA9IGNoaXAtPmxvd190aHJlczsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCB2YWwpOwotfQotCi1zdGF0aWMgc3NpemVfdCB0c2wyNTYzX3dyaXRlX3RocmVzaChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJY29uc3QgY2hhciAqYnVmLAotCQkJCXNpemVfdCBsZW4pCi17Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCB0c2wyNTYzX2NoaXAgKmNoaXAgPSBpbmRpb19kZXYtPmRldl9kYXRhOwotCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKLQl1bnNpZ25lZCBsb25nIHZhbDsKLQlpbnQgcmV0OwotCi0JcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQltdXRleF9sb2NrKCZjaGlwLT5sb2NrKTsKLQlyZXQgPSB0c2wyNTYzX3dyaXRlKGNoaXAtPmNsaWVudCwgdGhpc19hdHRyLT5hZGRyZXNzLCB2YWwgJiAweEZGKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycm9yX3JldDsKLQlyZXQgPSB0c2wyNTYzX3dyaXRlKGNoaXAtPmNsaWVudCwgdGhpc19hdHRyLT5hZGRyZXNzICsgMSwKLQkJCSh2YWwgPj4gOCkgJiAweEZGKTsKLQlzd2l0Y2ggKHRoaXNfYXR0ci0+YWRkcmVzcykgewotCWNhc2UgVFNMMjU2M19SRUdfSElHSExPVzoKLQkJY2hpcC0+aGlnaF90aHJlcyA9IHZhbDsKLQkJYnJlYWs7Ci0JY2FzZSBUU0wyNTYzX1JFR19MT1dMT1c6Ci0JCWNoaXAtPmxvd190aHJlcyA9IHZhbDsKLQkJYnJlYWs7Ci0JfQotCi1lcnJvcl9yZXQ6Ci0JbXV0ZXhfdW5sb2NrKCZjaGlwLT5sb2NrKTsKLQotCXJldHVybiByZXQgPCAwID8gcmV0IDogbGVuOwotfQotCi1zdGF0aWMgSUlPX0RFVklDRV9BVFRSKGludGVuc2l0eTBfYm90aF9yYXdfdGhyZXNoX3Jpc2luZ192YWx1ZSwKLQkJU19JUlVHTyB8IFNfSVdVU1IsCi0JCXRzbDI1NjNfcmVhZF90aHJlc2gsCi0JCXRzbDI1NjNfd3JpdGVfdGhyZXNoLAotCQlUU0wyNTYzX1JFR19ISUdITE9XKTsKLQotc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbnRlbnNpdHkwX2JvdGhfcmF3X3RocmVzaF9mYWxsaW5nX3ZhbHVlLAotCQlTX0lSVUdPIHwgU19JV1VTUiwKLQkJdHNsMjU2M19yZWFkX3RocmVzaCwKLQkJdHNsMjU2M193cml0ZV90aHJlc2gsCi0JCVRTTDI1NjNfUkVHX0xPV0xPVyk7Ci0KLXN0YXRpYyBpbnQgdHNsMjU2M19pbnRfdGgoc3RydWN0IGlpb19kZXYgKmRldl9pbmZvLAotCQkJaW50IGluZGV4LAotCQkJczY0IHRpbWVzdGFtcCwKLQkJCWludCBub3RfdGVzdCkKLXsKLQlzdHJ1Y3QgdHNsMjU2M19jaGlwICpjaGlwID0gZGV2X2luZm8tPmRldl9kYXRhOwotCi0JY2hpcC0+ZXZlbnRfdGltZXN0YW1wID0gdGltZXN0YW1wOwotCXNjaGVkdWxlX3dvcmsoJmNoaXAtPndvcmtfdGhyZXNoKTsKKwlpZiAoY2hhbi0+Y2hhbm5lbCA9PSAwKQorCQljaGlwLT5jYWxpYjAgPSBjYWxpYl9mcm9tX3N5c2ZzKHZhbCk7CisJZWxzZQorCQljaGlwLT5jYWxpYjEgPSBjYWxpYl9mcm9tX3N5c2ZzKHZhbCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdHNsMjU2M19pbnRfYmgoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrX3MpCitzdGF0aWMgaW50IHRzbDI1NjNfcmVhZF9yYXcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKKwkJCSAgICBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbiwKKwkJCSAgICBpbnQgKnZhbCwKKwkJCSAgICBpbnQgKnZhbDIsCisJCQkgICAgbG9uZyBtKQogewotCXN0cnVjdCB0c2wyNTYzX2NoaXAgKmNoaXAKLQkJPSBjb250YWluZXJfb2Yod29ya19zLAotCQkJc3RydWN0IHRzbDI1NjNfY2hpcCwgd29ya190aHJlc2gpOworCWludCByZXQgPSAtRUlOVkFMOworCXUzMiBjYWxpYjAsIGNhbGliMTsKKwlzdHJ1Y3QgdHNsMjU2M19jaGlwICpjaGlwID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKKworCW11dGV4X2xvY2soJmNoaXAtPmxvY2spOworCXN3aXRjaCAobSkgeworCWNhc2UgMDoKKwkJc3dpdGNoIChjaGFuLT50eXBlKSB7CisJCWNhc2UgSUlPX0xJR0hUOgorCQkJcmV0ID0gdHNsMjU2M19nZXRfYWRjKGNoaXApOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGVycm9yX3JldDsKKwkJCWNhbGliMCA9IGNhbGliX2FkYyhjaGlwLT5kYXRhMCwgY2hpcC0+Y2FsaWIwKSAqCisJCQkJY2hpcC0+Y292ZXJfY29tcF9nYWluOworCQkJY2FsaWIxID0gY2FsaWJfYWRjKGNoaXAtPmRhdGExLCBjaGlwLT5jYWxpYjEpICoKKwkJCQljaGlwLT5jb3Zlcl9jb21wX2dhaW47CisJCQkqdmFsID0gYWRjX3RvX2x1eChjYWxpYjAsIGNhbGliMSk7CisJCQlyZXQgPSBJSU9fVkFMX0lOVDsKKwkJCWJyZWFrOworCQljYXNlIElJT19JTlRFTlNJVFk6CisJCQlyZXQgPSB0c2wyNTYzX2dldF9hZGMoY2hpcCk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXJyb3JfcmV0OworCQkJaWYgKGNoYW4tPmNoYW5uZWwgPT0gMCkKKwkJCQkqdmFsID0gY2hpcC0+ZGF0YTA7CisJCQllbHNlCisJCQkJKnZhbCA9IGNoaXAtPmRhdGExOworCQkJcmV0ID0gSUlPX1ZBTF9JTlQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCisJY2FzZSAoMSA8PCBJSU9fQ0hBTl9JTkZPX0NBTElCU0NBTEVfU0VQQVJBVEUpOgorCQlpZiAoY2hhbi0+Y2hhbm5lbCA9PSAwKQorCQkJKnZhbCA9IGNhbGliX3RvX3N5c2ZzKGNoaXAtPmNhbGliMCk7CisJCWVsc2UKKwkJCSp2YWwgPSBjYWxpYl90b19zeXNmcyhjaGlwLT5jYWxpYjEpOworCQlyZXQgPSBJSU9fVkFMX0lOVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCitlcnJvcl9yZXQ6CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19jaGFuX3NwZWMgdHNsMjU2M19jaGFubmVsc1tdID0geworCUlJT19DSEFOKElJT19MSUdIVCwgMCwgMSwgMSwgTlVMTCwgMCwgMCwgMCwgMCwgMCwge30sIDApLAorCUlJT19DSEFOKElJT19JTlRFTlNJVFksIDEsIDEsIDAsICJib3RoIiwgMCwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fQ0FMSUJTQ0FMRV9TRVBBUkFURSksIDAsIDAsIDAsIHt9LAorCQkgSUlPX0VWX0JJVChJSU9fRVZfVFlQRV9USFJFU0gsIElJT19FVl9ESVJfUklTSU5HKSB8CisJCSBJSU9fRVZfQklUKElJT19FVl9UWVBFX1RIUkVTSCwgSUlPX0VWX0RJUl9GQUxMSU5HKSksCisJSUlPX0NIQU4oSUlPX0lOVEVOU0lUWSwgMSwgMSwgMCwgImlyIiwgMSwKKwkJICgxIDw8IElJT19DSEFOX0lORk9fQ0FMSUJTQ0FMRV9TRVBBUkFURSksIDAsIDAsIDAsIHt9LAorCQkgMCkKK307CisKK3N0YXRpYyBpbnQgdHNsMjU2M19yZWFkX3RocmVzaChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAorCQkJCWludCBldmVudF9jb2RlLAorCQkJCWludCAqdmFsKQoreworCXN0cnVjdCB0c2wyNTYzX2NoaXAgKmNoaXAgPSBpaW9fcHJpdihpbmRpb19kZXYpOworCisJc3dpdGNoIChJSU9fRVZFTlRfQ09ERV9FWFRSQUNUX0RJUihldmVudF9jb2RlKSkgeworCWNhc2UgSUlPX0VWX0RJUl9SSVNJTkc6CisJCSp2YWwgPSBjaGlwLT5oaWdoX3RocmVzOworCQlicmVhazsKKwljYXNlIElJT19FVl9ESVJfRkFMTElORzoKKwkJKnZhbCA9IGNoaXAtPmxvd190aHJlczsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHRzbDI1NjNfd3JpdGVfdGhyZXNoKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCisJCQkJICBpbnQgZXZlbnRfY29kZSwKKwkJCQkgIGludCB2YWwpCit7CisJc3RydWN0IHRzbDI1NjNfY2hpcCAqY2hpcCA9IGlpb19wcml2KGluZGlvX2Rldik7CisJaW50IHJldDsKKwl1OCBhZGRyZXNzOworCisJaWYgKElJT19FVkVOVF9DT0RFX0VYVFJBQ1RfRElSKGV2ZW50X2NvZGUpID09IElJT19FVl9ESVJfUklTSU5HKQorCQlhZGRyZXNzID0gVFNMMjU2M19SRUdfSElHSExPVzsKKwllbHNlCisJCWFkZHJlc3MgPSBUU0wyNTYzX1JFR19MT1dMT1c7CisJbXV0ZXhfbG9jaygmY2hpcC0+bG9jayk7CisJcmV0ID0gdHNsMjU2M193cml0ZShjaGlwLT5jbGllbnQsIGFkZHJlc3MsIHZhbCAmIDB4RkYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3JfcmV0OworCXJldCA9IHRzbDI1NjNfd3JpdGUoY2hpcC0+Y2xpZW50LCBhZGRyZXNzICsgMSwKKwkJCSh2YWwgPj4gOCkgJiAweEZGKTsKKwlpZiAoSUlPX0VWRU5UX0NPREVfRVhUUkFDVF9ESVIoZXZlbnRfY29kZSkgPT0gSUlPX0VWX0RJUl9SSVNJTkcpCisJCWNoaXAtPmhpZ2hfdGhyZXMgPSB2YWw7CisJZWxzZQorCQljaGlwLT5sb3dfdGhyZXMgPSB2YWw7CisKK2Vycm9yX3JldDoKKwltdXRleF91bmxvY2soJmNoaXAtPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlycXJldHVybl90IHRzbDI1NjNfZXZlbnRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpwcml2YXRlKQoreworCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IHByaXZhdGU7CisJc3RydWN0IHRzbDI1NjNfY2hpcCAqY2hpcCA9IGlpb19wcml2KGRldl9pbmZvKTsKIAl1OCBjbWQgPSBUU0wyNTYzX0NNRCB8IFRTTDI1NjNfQ0xFQVJJTlQ7CiAKLQlpaW9fcHVzaF9ldmVudChjaGlwLT5pbmRpb19kZXYsIDAsCisJaWlvX3B1c2hfZXZlbnQoZGV2X2luZm8sIDAsCiAJCSAgICAgICBJSU9fVU5NT0RfRVZFTlRfQ09ERShJSU9fRVZfQ0xBU1NfTElHSFQsCiAJCQkJCSAgICAwLAogCQkJCQkgICAgSUlPX0VWX1RZUEVfVEhSRVNILAogCQkJCQkgICAgSUlPX0VWX0RJUl9FSVRIRVIpLAotCQkgICAgICAgY2hpcC0+ZXZlbnRfdGltZXN0YW1wKTsKKwkJICAgICAgIGlpb19nZXRfdGltZV9ucygpKTsKIAotCS8qIHJlZW5hYmxlX2lycSAqLwotCWVuYWJsZV9pcnEoY2hpcC0+Y2xpZW50LT5pcnEpOwogCS8qIGNsZWFyIHRoZSBpbnRlcnJ1cHQgYW5kIHB1c2ggdGhlIGV2ZW50ICovCiAJaTJjX21hc3Rlcl9zZW5kKGNoaXAtPmNsaWVudCwgJmNtZCwgc2l6ZW9mKGNtZCkpOwotCisJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgc3NpemVfdCB0c2wyNTYzX3dyaXRlX2ludGVycnVwdF9jb25maWcoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkJY29uc3QgY2hhciAqYnVmLAotCQkJCQlzaXplX3QgbGVuKQorc3RhdGljIGludCB0c2wyNTYzX3dyaXRlX2ludGVycnVwdF9jb25maWcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKKwkJCQkJaW50IGV2ZW50X2NvZGUsCisJCQkJCWludCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IHRzbDI1NjNfY2hpcCAqY2hpcCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7Ci0Jc3RydWN0IGlpb19ldmVudF9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZXZlbnRfYXR0cihhdHRyKTsKLQlpbnQgaW5wdXQsIHJldCA9IDA7CisJc3RydWN0IHRzbDI1NjNfY2hpcCAqY2hpcCA9IGlpb19wcml2KGluZGlvX2Rldik7CisJaW50IHJldCA9IDA7CiAKLQlyZXQgPSBzc2NhbmYoYnVmLCAiJWQiLCAmaW5wdXQpOwotCWlmIChyZXQgIT0gMSkKLQkJcmV0dXJuIC1FSU5WQUw7CiAJbXV0ZXhfbG9jaygmY2hpcC0+bG9jayk7Ci0JaWYgKGlucHV0ICYmICEoY2hpcC0+aW50ciAmIDB4MzApKSB7Ci0JCWlpb19hZGRfZXZlbnRfdG9fbGlzdCh0aGlzX2F0dHItPmxpc3RlbCwKLQkJCQkmaW5kaW9fZGV2LT5pbnRlcnJ1cHRzWzBdLT5ldl9saXN0KTsKKwlpZiAoc3RhdGUgJiYgIShjaGlwLT5pbnRyICYgMHgzMCkpIHsKIAkJY2hpcC0+aW50ciAmPSB+MHgzMDsKIAkJY2hpcC0+aW50ciB8PSAweDEwOwogCQkvKiBlbnN1cmUgdGhlIGNoaXAgaXMgYWN0dWFsbHkgb24gKi8KQEAgLTc1MiwxMSArNjUxLDkgQEAKIAkJY2hpcC0+aW50X2VuYWJsZWQgPSB0cnVlOwogCX0KIAotCWlmICghaW5wdXQgJiYgKGNoaXAtPmludHIgJiAweDMwKSkgeworCWlmICghc3RhdGUgJiYgKGNoaXAtPmludHIgJiAweDMwKSkgewogCQljaGlwLT5pbnRyIHw9IH4weDMwOwogCQlyZXQgPSB0c2wyNTYzX3dyaXRlKGNoaXAtPmNsaWVudCwgVFNMMjU2M19SRUdfSU5ULCBjaGlwLT5pbnRyKTsKLQkJaWlvX3JlbW92ZV9ldmVudF9mcm9tX2xpc3QodGhpc19hdHRyLT5saXN0ZWwsCi0JCQkJCSZpbmRpb19kZXYtPmludGVycnVwdHNbMF0tPmV2X2xpc3QpOwogCQljaGlwLT5pbnRfZW5hYmxlZCA9IGZhbHNlOwogCQkvKiBub3cgdGhlIGludGVycnVwdCBpcyBub3QgZW5hYmxlZCwgd2UgY2FuIGdvIHRvIHNsZWVwICovCiAJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmY2hpcC0+cG93ZXJvZmZfd29yaywgNSAqIEhaKTsKQEAgLTc2NCw2OSArNjYxLDY0IEBACiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZjaGlwLT5sb2NrKTsKIAotCXJldHVybiAocmV0IDwgMCkgPyByZXQgOiBsZW47CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHNzaXplX3QgdHNsMjU2M19yZWFkX2ludGVycnVwdF9jb25maWcoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkJY2hhciAqYnVmKQorc3RhdGljIGludCB0c2wyNTYzX3JlYWRfaW50ZXJydXB0X2NvbmZpZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAorCQkJCQkgICBpbnQgZXZlbnRfY29kZSkKIHsKLQlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IHRzbDI1NjNfY2hpcCAqY2hpcCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7Ci0JaW50IHJldDsKKwlzdHJ1Y3QgdHNsMjU2M19jaGlwICpjaGlwID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKIAl1OCByeGJ1ZjsKLQlzc2l6ZV90IGxlbjsKKwlpbnQgcmV0OwogCiAJbXV0ZXhfbG9jaygmY2hpcC0+bG9jayk7Ci0JcmV0ID0gdHNsMjU2M19yZWFkKGNoaXAtPmNsaWVudCwKLQkJCVRTTDI1NjNfUkVHX0lOVCwKLQkJCSZyeGJ1ZiwKLQkJCXNpemVvZihyeGJ1ZikpOworCXJldCA9IHRzbDI1NjNfcmVhZChjaGlwLT5jbGllbnQsIFRTTDI1NjNfUkVHX0lOVCwKKwkJCSAgICZyeGJ1Ziwgc2l6ZW9mKHJ4YnVmKSk7CiAJbXV0ZXhfdW5sb2NrKCZjaGlwLT5sb2NrKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJvcl9yZXQ7Ci0JbGVuID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgISEocnhidWYgJiAweDMwKSk7CisJcmV0ID0gISEocnhidWYgJiAweDMwKTsKIGVycm9yX3JldDoKIAotCXJldHVybiAocmV0IDwgMCkgPyByZXQgOiBsZW47CisJcmV0dXJuIHJldDsKIH0KIAotSUlPX0VWRU5UX0FUVFIoaW50ZW5zaXR5MF9ib3RoX3RocmVzaF9lbiwKLQl0c2wyNTYzX3JlYWRfaW50ZXJydXB0X2NvbmZpZywKLQl0c2wyNTYzX3dyaXRlX2ludGVycnVwdF9jb25maWcsCi0JMCwKLQl0c2wyNTYzX2ludF90aCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp0c2wyNTYzX2V2ZW50X2F0dHJpYnV0ZXNbXSA9IHsKLQkmaWlvX2V2ZW50X2F0dHJfaW50ZW5zaXR5MF9ib3RoX3RocmVzaF9lbi5kZXZfYXR0ci5hdHRyLAotCSZpaW9fZGV2X2F0dHJfaW50ZW5zaXR5MF9ib3RoX3Jhd190aHJlc2hfcmlzaW5nX3ZhbHVlLmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl9pbnRlbnNpdHkwX2JvdGhfcmF3X3RocmVzaF9mYWxsaW5nX3ZhbHVlLmRldl9hdHRyLmF0dHIsCi0JTlVMTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHRzbDI1NjNfZXZlbnRfYXR0cmlidXRlX2dyb3VwID0gewotCS5hdHRycyA9IHRzbDI1NjNfZXZlbnRfYXR0cmlidXRlcywKLX07Ci0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogICAgICAgICAgICAgICAgICAgICAgUHJvYmUsIEF0dGFjaCwgUmVtb3ZlICAgICAgICAgICAgICAgICAgICovCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0c2wyNTYzX2kyY19kcml2ZXI7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2luZm8gdHNsMjU2M19pbmZvX25vX2lycSA9IHsKKwkuZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9faW5mbyB0c2wyNTYzX2luZm8gPSB7CisJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRSwKKwkubnVtX2ludGVycnVwdF9saW5lcyA9IDEsCisJLnJlYWRfcmF3ID0gJnRzbDI1NjNfcmVhZF9yYXcsCisJLndyaXRlX3JhdyA9ICZ0c2wyNTYzX3dyaXRlX3JhdywKKwkucmVhZF9ldmVudF92YWx1ZSA9ICZ0c2wyNTYzX3JlYWRfdGhyZXNoLAorCS53cml0ZV9ldmVudF92YWx1ZSA9ICZ0c2wyNTYzX3dyaXRlX3RocmVzaCwKKwkucmVhZF9ldmVudF9jb25maWcgPSAmdHNsMjU2M19yZWFkX2ludGVycnVwdF9jb25maWcsCisJLndyaXRlX2V2ZW50X2NvbmZpZyA9ICZ0c2wyNTYzX3dyaXRlX2ludGVycnVwdF9jb25maWcsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB0c2wyNTYzX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmRldmljZV9pZCkKIHsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2OwogCXN0cnVjdCB0c2wyNTYzX2NoaXAgKmNoaXA7CiAJc3RydWN0IHRzbDI1NjNfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWludCBlcnIgPSAwOwogCWludCByZXQ7CiAJdTggaWQ7CiAKLQljaGlwID0ga3phbGxvYyhzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNoaXApCisJaW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZShzaXplb2YoKmNoaXApKTsKKwlpZiAoIWluZGlvX2RldikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlJTklUX1dPUksoJmNoaXAtPndvcmtfdGhyZXNoLCB0c2wyNTYzX2ludF9iaCk7CisJY2hpcCA9IGlpb19wcml2KGluZGlvX2Rldik7CisKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBjaGlwKTsKIAljaGlwLT5jbGllbnQgPSBjbGllbnQ7CiAKQEAgLTg1NiwzMCArNzQ4LDI1IEBACiAJCWNoaXAtPmNvdmVyX2NvbXBfZ2FpbiA9IDE7CiAKIAlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJtb2RlbCAlZCwgcmV2LiAlZFxuIiwgaWQgPj4gNCwgaWQgJiAweDBmKTsKLQotCWNoaXAtPmluZGlvX2RldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2UoKTsKLQlpZiAoIWNoaXAtPmluZGlvX2RldikKLQkJZ290byBmYWlsMTsKLQljaGlwLT5pbmRpb19kZXYtPmF0dHJzID0gJnRzbDI1NjNfZ3JvdXA7Ci0JY2hpcC0+aW5kaW9fZGV2LT5kZXYucGFyZW50ID0gJmNsaWVudC0+ZGV2OwotCWNoaXAtPmluZGlvX2Rldi0+ZGV2X2RhdGEgPSAodm9pZCAqKShjaGlwKTsKLQljaGlwLT5pbmRpb19kZXYtPmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRTsKLQljaGlwLT5pbmRpb19kZXYtPm1vZGVzID0gSU5ESU9fRElSRUNUX01PREU7Ci0JaWYgKGNsaWVudC0+aXJxKSB7Ci0JCWNoaXAtPmluZGlvX2Rldi0+bnVtX2ludGVycnVwdF9saW5lcyA9IDE7Ci0JCWNoaXAtPmluZGlvX2Rldi0+ZXZlbnRfYXR0cnMKLQkJCT0gJnRzbDI1NjNfZXZlbnRfYXR0cmlidXRlX2dyb3VwOwotCX0KLQlyZXQgPSBpaW9fZGV2aWNlX3JlZ2lzdGVyKGNoaXAtPmluZGlvX2Rldik7CisJaW5kaW9fZGV2LT5uYW1lID0gY2xpZW50LT5uYW1lOworCWluZGlvX2Rldi0+Y2hhbm5lbHMgPSB0c2wyNTYzX2NoYW5uZWxzOworCWluZGlvX2Rldi0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRSh0c2wyNTYzX2NoYW5uZWxzKTsKKwlpbmRpb19kZXYtPmRldi5wYXJlbnQgPSAmY2xpZW50LT5kZXY7CisJaW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOworCWlmIChjbGllbnQtPmlycSkKKwkJaW5kaW9fZGV2LT5pbmZvID0gJnRzbDI1NjNfaW5mbzsKKwllbHNlCisJCWluZGlvX2Rldi0+aW5mbyA9ICZ0c2wyNTYzX2luZm9fbm9faXJxOworCXJldCA9IGlpb19kZXZpY2VfcmVnaXN0ZXIoaW5kaW9fZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIGZhaWwxOwotCiAJaWYgKGNsaWVudC0+aXJxKSB7Ci0JCXJldCA9IGlpb19yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShjbGllbnQtPmlycSwKLQkJCQkJCWNoaXAtPmluZGlvX2RldiwKLQkJCQkJCTAsCi0JCQkJCQlJUlFGX1RSSUdHRVJfUklTSU5HLAotCQkJCQkJY2xpZW50LT5uYW1lKTsKKwkJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoY2xpZW50LT5pcnEsCisJCQkJCSAgIE5VTEwsCisJCQkJCSAgICZ0c2wyNTYzX2V2ZW50X2hhbmRsZXIsCisJCQkJCSAgIElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX09ORVNIT1QsCisJCQkJCSAgICJ0c2wyNTYzX2V2ZW50IiwKKwkJCQkJICAgaW5kaW9fZGV2KTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZmFpbDI7CiAJfQpAQCAtODk0LDkgKzc4MSw5IEBACiAJcmV0dXJuIDA7CiBmYWlsMzoKIAlpZiAoY2xpZW50LT5pcnEpCi0JCWlpb191bnJlZ2lzdGVyX2ludGVycnVwdF9saW5lKGNoaXAtPmluZGlvX2RldiwgMCk7CisJCWZyZWVfaXJxKGNsaWVudC0+aXJxLCBpbmRpb19kZXYpOwogZmFpbDI6Ci0JaWlvX2RldmljZV91bnJlZ2lzdGVyKGNoaXAtPmluZGlvX2Rldik7CisJaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CiBmYWlsMToKIAlrZnJlZShjaGlwKTsKIAlyZXR1cm4gZXJyOwpAQCAtOTA1LDYgKzc5Miw3IEBACiBzdGF0aWMgaW50IHRzbDI1NjNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IHRzbDI1NjNfY2hpcCAqY2hpcCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBpaW9fcHJpdl90b19kZXYoY2hpcCk7CiAJaWYgKCFjaGlwLT5pbnRfZW5hYmxlZCkKIAkJY2FuY2VsX2RlbGF5ZWRfd29yaygmY2hpcC0+cG93ZXJvZmZfd29yayk7CiAJLyogRW5zdXJlIHRoYXQgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgLSB0aGVuIGZsdXNoIGFueSBib3R0b20gaGFsdmVzICovCkBAIC05MTMsMTAgKzgwMSw5IEBACiAJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAl0c2wyNTYzX3NldF9wb3dlcihjaGlwLCAwKTsKIAlpZiAoY2xpZW50LT5pcnEpCi0JCWlpb191bnJlZ2lzdGVyX2ludGVycnVwdF9saW5lKGNoaXAtPmluZGlvX2RldiwgMCk7Ci0JaWlvX2RldmljZV91bnJlZ2lzdGVyKGNoaXAtPmluZGlvX2Rldik7CisJCWZyZWVfaXJxKGNsaWVudC0+aXJxLCBpbmRpb19kZXYpOworCWlpb19kZXZpY2VfdW5yZWdpc3RlcihpbmRpb19kZXYpOwogCi0Ja2ZyZWUoY2hpcCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvdHNsMjU4My5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC90c2wyNTgzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY5NDYxMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvdHNsMjU4My5jCkBAIC0wLDAgKzEsOTY0IEBACisvKgorICogRGV2aWNlIGRyaXZlciBmb3IgbW9uaXRvcmluZyBhbWJpZW50IGxpZ2h0IGludGVuc2l0eSAobHV4KQorICogd2l0aGluIHRoZSBUQU9TIHRzbDI1OHggZmFtaWx5IG9mIGRldmljZXMgKHRzbDI1ODAsIHRzbDI1ODEpLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgVEFPUyBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCTAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgIi4uL2lpby5oIgorCisjZGVmaW5lIFRTTDI1OFhfTUFYX0RFVklDRV9SRUdTCQkzMgorCisvKiBUcml0b24gcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZQlUU0wyNThYX1JFR19NQVgJCTgKKworLyogRGV2aWNlIFJlZ2lzdGVycyBhbmQgTWFza3MgKi8KKyNkZWZpbmUgVFNMMjU4WF9DTlRSTAkJCTB4MDAKKyNkZWZpbmUgVFNMMjU4WF9BTFNfVElNRQkJMFgwMQorI2RlZmluZSBUU0wyNThYX0lOVEVSUlVQVAkJMHgwMgorI2RlZmluZSBUU0wyNThYX0dBSU4JCQkweDA3CisjZGVmaW5lIFRTTDI1OFhfUkVWSUQJCQkweDExCisjZGVmaW5lIFRTTDI1OFhfQ0hJUElECQkJMHgxMgorI2RlZmluZSBUU0wyNThYX0FMU19DSEFOMExPCQkweDE0CisjZGVmaW5lIFRTTDI1OFhfQUxTX0NIQU4wSEkJCTB4MTUKKyNkZWZpbmUgVFNMMjU4WF9BTFNfQ0hBTjFMTwkJMHgxNgorI2RlZmluZSBUU0wyNThYX0FMU19DSEFOMUhJCQkweDE3CisjZGVmaW5lIFRTTDI1OFhfVE1SX0xPCQkJMHgxOAorI2RlZmluZSBUU0wyNThYX1RNUl9ISQkJCTB4MTkKKworLyogdHNsMjU4MyBjbWQgcmVnIG1hc2tzICovCisjZGVmaW5lIFRTTDI1OFhfQ01EX1JFRwkJCTB4ODAKKyNkZWZpbmUgVFNMMjU4WF9DTURfU1BMX0ZOCQkweDYwCisjZGVmaW5lIFRTTDI1OFhfQ01EX0FMU19JTlRfQ0xSCTBYMDEKKworLyogdHNsMjU4MyBjbnRybCByZWcgbWFza3MgKi8KKyNkZWZpbmUgVFNMMjU4WF9DTlRMX0FEQ19FTkJMCTB4MDIKKyNkZWZpbmUgVFNMMjU4WF9DTlRMX1BXUl9PTgkJMHgwMQorCisvKiB0c2wyNTgzIHN0YXR1cyByZWcgbWFza3MgKi8KKyNkZWZpbmUgVFNMMjU4WF9TVEFfQURDX1ZBTElECTB4MDEKKyNkZWZpbmUgVFNMMjU4WF9TVEFfQURDX0lOVFIJMHgxMAorCisvKiBMdXggY2FsY3VsYXRpb24gY29uc3RhbnRzICovCisjZGVmaW5lCVRTTDI1OFhfTFVYX0NBTENfT1ZFUl9GTE9XCQk2NTUzNQorCitlbnVtIHsKKwlUU0wyNThYX0NISVBfVU5LTk9XTiA9IDAsCisJVFNMMjU4WF9DSElQX1dPUktJTkcgPSAxLAorCVRTTDI1OFhfQ0hJUF9TVVNQRU5ERUQgPSAyCit9IFRTTDI1OFhfQ0hJUF9XT1JLSU5HX1NUQVRVUzsKKworLyogUGVyLWRldmljZSBkYXRhICovCitzdHJ1Y3QgdGFvc19hbHNfaW5mbyB7CisJdTE2IGFsc19jaDA7CisJdTE2IGFsc19jaDE7CisJdTE2IGx1eDsKK307CisKK3N0cnVjdCB0YW9zX3NldHRpbmdzIHsKKwlpbnQgYWxzX3RpbWU7CisJaW50IGFsc19nYWluOworCWludCBhbHNfZ2Fpbl90cmltOworCWludCBhbHNfY2FsX3RhcmdldDsKK307CisKK3N0cnVjdCB0c2wyNTgzX2NoaXAgeworCXN0cnVjdCBtdXRleCBhbHNfbXV0ZXg7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgaWlvX2RldiAqaWlvX2RldjsKKwlzdHJ1Y3QgdGFvc19hbHNfaW5mbyBhbHNfY3VyX2luZm87CisJc3RydWN0IHRhb3Nfc2V0dGluZ3MgdGFvc19zZXR0aW5nczsKKwlpbnQgYWxzX3RpbWVfc2NhbGU7CisJaW50IGFsc19zYXR1cmF0aW9uOworCWludCB0YW9zX2NoaXBfc3RhdHVzOworCXU4IHRhb3NfY29uZmlnWzhdOworfTsKKworLyoKKyAqIEluaXRpYWwgdmFsdWVzIGZvciBkZXZpY2UgLSB0aGlzIHZhbHVlcyBjYW4vd2lsbCBiZSBjaGFuZ2VkIGJ5IGRyaXZlci4KKyAqIGFuZCBhcHBsaWNhdGlvbnMgYXMgbmVlZGVkLgorICogVGhlc2UgdmFsdWVzIGFyZSBkeW5hbWljLgorICovCitzdGF0aWMgY29uc3QgdTggdGFvc19jb25maWdbOF0gPSB7CisJCTB4MDAsIDB4ZWUsIDB4MDAsIDB4MDMsIDB4MDAsIDB4RkYsIDB4RkYsIDB4MDAKK307IC8qCWNudHJsIGF0aW1lIGludEMgIEF0aGwwIEF0aGwxIEF0aGgwIEF0aGgxIGdhaW4gKi8KKworc3RydWN0IHRhb3NfbHV4IHsKKwl1bnNpZ25lZCBpbnQgcmF0aW87CisJdW5zaWduZWQgaW50IGNoMDsKKwl1bnNpZ25lZCBpbnQgY2gxOworfTsKKworLyogVGhpcyBzdHJ1Y3R1cmUgaXMgaW50ZW50aW9uYWxseSBsYXJnZSB0byBhY2NvbW1vZGF0ZSB1cGRhdGVzIHZpYSBzeXNmcy4gKi8KKy8qIFNpemVkIHRvIDExID0gbWF4IDEwIHNlZ21lbnRzICsgMSB0ZXJtaW5hdGlvbiBzZWdtZW50ICovCisvKiBBc3N1bXB0aW9uIGlzIGlzIG9uZSBhbmQgb25seSBvbmUgdHlwZSBvZiBnbGFzcyB1c2VkICAqLworc3RydWN0IHRhb3NfbHV4IHRhb3NfZGV2aWNlX2x1eFsxMV0gPSB7CisJeyAgOTgzMCwgIDg1MjAsIDE1NzI5IH0sCisJeyAxMjQ1MiwgMTA4MDcsIDIzMzQ0IH0sCisJeyAxNDc0NiwgIDYzODMsIDExNzA1IH0sCisJeyAxNzY5NSwgIDQwNjMsICA2NTU0IH0sCit9OworCitzdHJ1Y3QgZ2FpbmFkaiB7CisJczE2IGNoMDsKKwlzMTYgY2gxOworfTsKKworLyogSW5kZXggPSAoMCAtIDMpIFVzZWQgdG8gdmFsaWRhdGUgdGhlIGdhaW4gc2VsZWN0aW9uIGluZGV4ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGdhaW5hZGogZ2FpbmFkaltdID0geworCXsgMSwgMSB9LAorCXsgOCwgOCB9LAorCXsgMTYsIDE2IH0sCisJeyAxMDcsIDExNSB9Cit9OworCisvKgorICogUHJvdmlkZXMgaW5pdGlhbCBvcGVyYXRpb25hbCBwYXJhbWV0ZXIgZGVmYXVsdHMuCisgKiBUaGVzZSBkZWZhdWx0cyBtYXkgYmUgY2hhbmdlZCB0aHJvdWdoIHRoZSBkZXZpY2UncyBzeXNmcyBmaWxlcy4KKyAqLworc3RhdGljIHZvaWQgdGFvc19kZWZhdWx0cyhzdHJ1Y3QgdHNsMjU4M19jaGlwICpjaGlwKQoreworCS8qIE9wZXJhdGlvbmFsIHBhcmFtZXRlcnMgKi8KKwljaGlwLT50YW9zX3NldHRpbmdzLmFsc190aW1lID0gMTAwOworCS8qIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA1MG1TICovCisJY2hpcC0+dGFvc19zZXR0aW5ncy5hbHNfZ2FpbiA9IDA7CisJLyogdGhpcyBpcyBhY3R1YWxseSBhbiBpbmRleCBpbnRvIHRoZSBnYWluIHRhYmxlICovCisJLyogYXNzdW1lIGNsZWFyIGdsYXNzIGFzIGRlZmF1bHQgKi8KKwljaGlwLT50YW9zX3NldHRpbmdzLmFsc19nYWluX3RyaW0gPSAxMDAwOworCS8qIGRlZmF1bHQgZ2FpbiB0cmltIHRvIGFjY291bnQgZm9yIGFwZXJ0dXJlIGVmZmVjdHMgKi8KKwljaGlwLT50YW9zX3NldHRpbmdzLmFsc19jYWxfdGFyZ2V0ID0gMTMwOworCS8qIEtub3duIGV4dGVybmFsIEFMUyByZWFkaW5nIHVzZWQgZm9yIGNhbGlicmF0aW9uICovCit9CisKKy8qCisgKiBSZWFkIGEgbnVtYmVyIG9mIGJ5dGVzIHN0YXJ0aW5nIGF0IHJlZ2lzdGVyIChyZWcpIGxvY2F0aW9uLgorICogUmV0dXJuIDAsIG9yIGkyY19zbWJ1c193cml0ZV9ieXRlIEVSUk9SIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQKK3Rhb3NfaTJjX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCAqdmFsLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCWludCByZXQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJLyogc2VsZWN0IHJlZ2lzdGVyIHRvIHdyaXRlICovCisJCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlKGNsaWVudCwgKFRTTDI1OFhfQ01EX1JFRyB8IHJlZykpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJ0YW9zX2kyY19yZWFkIGZhaWxlZCB0byB3cml0ZSIKKwkJCQkiIHJlZ2lzdGVyICV4XG4iLCByZWcpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQkvKiByZWFkIHRoZSBkYXRhICovCisJCSp2YWwgPSBpMmNfc21idXNfcmVhZF9ieXRlKGNsaWVudCk7CisJCXZhbCsrOworCQlyZWcrKzsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZWFkcyBhbmQgY2FsY3VsYXRlcyBjdXJyZW50IGx1eCB2YWx1ZS4KKyAqIFRoZSByYXcgY2gwIGFuZCBjaDEgdmFsdWVzIG9mIHRoZSBhbWJpZW50IGxpZ2h0IHNlbnNlZCBpbiB0aGUgbGFzdAorICogaW50ZWdyYXRpb24gY3ljbGUgYXJlIHJlYWQgZnJvbSB0aGUgZGV2aWNlLgorICogVGltZSBzY2FsZSBmYWN0b3IgYXJyYXkgdmFsdWVzIGFyZSBhZGp1c3RlZCBiYXNlZCBvbiB0aGUgaW50ZWdyYXRpb24gdGltZS4KKyAqIFRoZSByYXcgdmFsdWVzIGFyZSBtdWx0aXBsaWVkIGJ5IGEgc2NhbGUgZmFjdG9yLCBhbmQgZGV2aWNlIGdhaW4gaXMgb2J0YWluZWQKKyAqIHVzaW5nIGdhaW4gaW5kZXguIExpbWl0IGNoZWNrcyBhcmUgZG9uZSBuZXh0LCB0aGVuIHRoZSByYXRpbyBvZiBhIG11bHRpcGxlCisgKiBvZiBjaDEgdmFsdWUsIHRvIHRoZSBjaDAgdmFsdWUsIGlzIGNhbGN1bGF0ZWQuIFRoZSBhcnJheSB0YW9zX2RldmljZV9sdXhbXQorICogZGVjbGFyZWQgYWJvdmUgaXMgdGhlbiBzY2FubmVkIHRvIGZpbmQgdGhlIGZpcnN0IHJhdGlvIHZhbHVlIHRoYXQgaXMganVzdAorICogYWJvdmUgdGhlIHJhdGlvIHdlIGp1c3QgY2FsY3VsYXRlZC4gVGhlIGNoMCBhbmQgY2gxIG11bHRpcGxpZXIgY29uc3RhbnRzIGluCisgKiB0aGUgYXJyYXkgYXJlIHRoZW4gdXNlZCBhbG9uZyB3aXRoIHRoZSB0aW1lIHNjYWxlIGZhY3RvciBhcnJheSB2YWx1ZXMsIHRvCisgKiBjYWxjdWxhdGUgdGhlIGx1eC4KKyAqLworc3RhdGljIGludCB0YW9zX2dldF9sdXgoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwl1MTYgY2gwLCBjaDE7IC8qIHNlcGFyYXRlZCBjaDAvY2gxIGRhdGEgZnJvbSBkZXZpY2UgKi8KKwl1MzIgbHV4OyAvKiByYXcgbHV4IGNhbGN1bGF0ZWQgZnJvbSBkZXZpY2UgZGF0YSAqLworCXUzMiByYXRpbzsKKwl1OCBidWZbNV07CisJc3RydWN0IHRhb3NfbHV4ICpwOworCXN0cnVjdCB0c2wyNTgzX2NoaXAgKmNoaXAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgaSwgcmV0OworCXUzMiBjaDBsdXggPSAwOworCXUzMiBjaDFsdXggPSAwOworCisJaWYgKG11dGV4X3RyeWxvY2soJmNoaXAtPmFsc19tdXRleCkgPT0gMCkgeworCQlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJ0YW9zX2dldF9sdXggZGV2aWNlIGlzIGJ1c3lcbiIpOworCQlyZXR1cm4gY2hpcC0+YWxzX2N1cl9pbmZvLmx1eDsgLyogYnVzeSwgc28gcmV0dXJuIExBU1QgVkFMVUUgKi8KKwl9CisKKwlpZiAoY2hpcC0+dGFvc19jaGlwX3N0YXR1cyAhPSBUU0wyNThYX0NISVBfV09SS0lORykgeworCQkvKiBkZXZpY2UgaXMgbm90IGVuYWJsZWQgKi8KKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJ0YW9zX2dldF9sdXggZGV2aWNlIGlzIG5vdCBlbmFibGVkXG4iKTsKKwkJcmV0ID0gLUVCVVNZIDsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCXJldCA9IHRhb3NfaTJjX3JlYWQoY2xpZW50LCAoVFNMMjU4WF9DTURfUkVHKSwgJmJ1ZlswXSwgMSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJ0YW9zX2dldF9sdXggZmFpbGVkIHRvIHJlYWQgQ01EX1JFR1xuIik7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisJLyogaXMgZGF0YSBuZXcgJiB2YWxpZCAqLworCWlmICghKGJ1ZlswXSAmIFRTTDI1OFhfU1RBX0FEQ19JTlRSKSkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgInRhb3NfZ2V0X2x1eCBkYXRhIG5vdCB2YWxpZFxuIik7CisJCXJldCA9IGNoaXAtPmFsc19jdXJfaW5mby5sdXg7IC8qIHJldHVybiBMQVNUIFZBTFVFICovCisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCWludCByZWcgPSBUU0wyNThYX0NNRF9SRUcgfCAoVFNMMjU4WF9BTFNfQ0hBTjBMTyArIGkpOworCQlyZXQgPSB0YW9zX2kyY19yZWFkKGNsaWVudCwgcmVnLCAmYnVmW2ldLCAxKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAidGFvc19nZXRfbHV4IGZhaWxlZCB0byByZWFkIgorCQkJCSIgcmVnaXN0ZXIgJXhcbiIsIHJlZyk7CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KKwl9CisKKwkvKiBjbGVhciBzdGF0dXMsIHJlYWxseSBpbnRlcnJ1cHQgc3RhdHVzIChpbnRlcnJ1cHRzIGFyZSBvZmYpLCBidXQKKwkgKiB3ZSB1c2UgdGhlIGJpdCBhbnl3YXkgLSBkb24ndCBmb3JnZXQgMHg4MCAtIHRoaXMgaXMgYSBjb21tYW5kKi8KKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZShjbGllbnQsCisJKFRTTDI1OFhfQ01EX1JFRyB8IFRTTDI1OFhfQ01EX1NQTF9GTiB8IFRTTDI1OFhfQ01EX0FMU19JTlRfQ0xSKSk7CisKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCSJ0YW9zX2kyY193cml0ZV9jb21tYW5kIGZhaWxlZCBpbiB0YW9zX2dldF9sdXgsIGVyciA9ICVkXG4iLAorCQkJcmV0KTsKKwkJZ290byBvdXRfdW5sb2NrOyAvKiBoYXZlIG5vIGRhdGEsIHNvIHJldHVybiBmYWlsdXJlICovCisJfQorCisJLyogZXh0cmFjdCBBTFMvbHV4IGRhdGEgKi8KKwljaDAgPSBsZTE2X3RvX2NwdXAoKGNvbnN0IF9fbGUxNiAqKSZidWZbMF0pOworCWNoMSA9IGxlMTZfdG9fY3B1cCgoY29uc3QgX19sZTE2ICopJmJ1ZlsyXSk7CisKKwljaGlwLT5hbHNfY3VyX2luZm8uYWxzX2NoMCA9IGNoMDsKKwljaGlwLT5hbHNfY3VyX2luZm8uYWxzX2NoMSA9IGNoMTsKKworCWlmICgoY2gwID49IGNoaXAtPmFsc19zYXR1cmF0aW9uKSB8fCAoY2gxID49IGNoaXAtPmFsc19zYXR1cmF0aW9uKSkKKwkJZ290byByZXR1cm5fbWF4OworCisJaWYgKGNoMCA9PSAwKSB7CisJCS8qIGhhdmUgbm8gZGF0YSwgc28gcmV0dXJuIExBU1QgVkFMVUUgKi8KKwkJcmV0ID0gY2hpcC0+YWxzX2N1cl9pbmZvLmx1eCA9IDA7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisJLyogY2FsY3VsYXRlIHJhdGlvICovCisJcmF0aW8gPSAoY2gxIDw8IDE1KSAvIGNoMDsKKwkvKiBjb252ZXJ0IHRvIHVuc2NhbGVkIGx1eCB1c2luZyB0aGUgcG9pbnRlciB0byB0aGUgdGFibGUgKi8KKwlmb3IgKHAgPSAoc3RydWN0IHRhb3NfbHV4ICopIHRhb3NfZGV2aWNlX2x1eDsKKwkgICAgIHAtPnJhdGlvICE9IDAgJiYgcC0+cmF0aW8gPCByYXRpbzsgcCsrKQorCQk7CisKKwlpZiAocC0+cmF0aW8gPT0gMCkgeworCQlsdXggPSAwOworCX0gZWxzZSB7CisJCWNoMGx1eCA9ICgoY2gwICogcC0+Y2gwKSArCisJCQkgIChnYWluYWRqW2NoaXAtPnRhb3Nfc2V0dGluZ3MuYWxzX2dhaW5dLmNoMCA+PiAxKSkKKwkJCSAvIGdhaW5hZGpbY2hpcC0+dGFvc19zZXR0aW5ncy5hbHNfZ2Fpbl0uY2gwOworCQljaDFsdXggPSAoKGNoMSAqIHAtPmNoMSkgKworCQkJICAoZ2FpbmFkaltjaGlwLT50YW9zX3NldHRpbmdzLmFsc19nYWluXS5jaDEgPj4gMSkpCisJCQkgLyBnYWluYWRqW2NoaXAtPnRhb3Nfc2V0dGluZ3MuYWxzX2dhaW5dLmNoMTsKKwkJbHV4ID0gY2gwbHV4IC0gY2gxbHV4OworCX0KKworCS8qIG5vdGU6IGx1eCBpcyAzMSBiaXQgbWF4IGF0IHRoaXMgcG9pbnQgKi8KKwlpZiAoY2gxbHV4ID4gY2gwbHV4KSB7CisJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiTm8gRGF0YSAtIFJldHVybiBsYXN0IHZhbHVlXG4iKTsKKwkJcmV0ID0gY2hpcC0+YWxzX2N1cl9pbmZvLmx1eCA9IDA7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwkvKiBhZGp1c3QgZm9yIGFjdGl2ZSB0aW1lIHNjYWxlICovCisJaWYgKGNoaXAtPmFsc190aW1lX3NjYWxlID09IDApCisJCWx1eCA9IDA7CisJZWxzZQorCQlsdXggPSAobHV4ICsgKGNoaXAtPmFsc190aW1lX3NjYWxlID4+IDEpKSAvCisJCQljaGlwLT5hbHNfdGltZV9zY2FsZTsKKworCS8qIGFkanVzdCBmb3IgYWN0aXZlIGdhaW4gc2NhbGUgKi8KKwlsdXggPj49IDEzOyAvKiB0YWJsZXMgaGF2ZSBmYWN0b3Igb2YgODE5MiBidWlsdGluIGZvciBhY2N1cmFjeSAqLworCWx1eCA9IChsdXggKiBjaGlwLT50YW9zX3NldHRpbmdzLmFsc19nYWluX3RyaW0gKyA1MDApIC8gMTAwMDsKKwlpZiAobHV4ID4gVFNMMjU4WF9MVVhfQ0FMQ19PVkVSX0ZMT1cpIHsgLyogY2hlY2sgZm9yIG92ZXJmbG93ICovCityZXR1cm5fbWF4OgorCQlsdXggPSBUU0wyNThYX0xVWF9DQUxDX09WRVJfRkxPVzsKKwl9CisKKwkvKiBVcGRhdGUgdGhlIHN0cnVjdHVyZSB3aXRoIHRoZSBsYXRlc3QgVkFMSUQgbHV4LiAqLworCWNoaXAtPmFsc19jdXJfaW5mby5sdXggPSBsdXg7CisJcmV0ID0gbHV4OworCitvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmY2hpcC0+YWxzX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogT2J0YWluIHNpbmdsZSByZWFkaW5nIGFuZCBjYWxjdWxhdGUgdGhlIGFsc19nYWluX3RyaW0gKGxhdGVyIHVzZWQKKyAqIHRvIGRlcml2ZSBhY3R1YWwgbHV4KS4KKyAqIFJldHVybiB1cGRhdGVkIGdhaW5fdHJpbSB2YWx1ZS4KKyAqLworaW50IHRhb3NfYWxzX2NhbGlicmF0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB0c2wyNTgzX2NoaXAgKmNoaXAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl1OCByZWdfdmFsOworCXVuc2lnbmVkIGludCBnYWluX3RyaW1fdmFsOworCWludCByZXQ7CisJaW50IGx1eF92YWw7CisKKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZShjbGllbnQsIChUU0wyNThYX0NNRF9SRUcgfCBUU0wyNThYX0NOVFJMKSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsCisJCQkidGFvc19hbHNfY2FsaWJyYXRlIGZhaWxlZCB0byByZWFjaCB0aGUgQ05UUkwgcmVnaXN0ZXIsIHJldD0lZFxuIiwKKwkJCXJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmVnX3ZhbCA9IGkyY19zbWJ1c19yZWFkX2J5dGUoY2xpZW50KTsKKwlpZiAoKHJlZ192YWwgJiAoVFNMMjU4WF9DTlRMX0FEQ19FTkJMIHwgVFNMMjU4WF9DTlRMX1BXUl9PTikpCisJCQkhPSAoVFNMMjU4WF9DTlRMX0FEQ19FTkJMIHwgVFNMMjU4WF9DTlRMX1BXUl9PTikpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsCisJCQkidGFvc19hbHNfY2FsaWJyYXRlIGZhaWxlZDogZGV2aWNlIG5vdCBwb3dlcmVkIG9uIHdpdGggQURDIGVuYWJsZWRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGUoY2xpZW50LCAoVFNMMjU4WF9DTURfUkVHIHwgVFNMMjU4WF9DTlRSTCkpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAorCQkJInRhb3NfYWxzX2NhbGlicmF0ZSBmYWlsZWQgdG8gcmVhY2ggdGhlIFNUQVRVUyByZWdpc3RlciwgcmV0PSVkXG4iLAorCQkJcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmVnX3ZhbCA9IGkyY19zbWJ1c19yZWFkX2J5dGUoY2xpZW50KTsKKworCWlmICgocmVnX3ZhbCAmIFRTTDI1OFhfU1RBX0FEQ19WQUxJRCkgIT0gVFNMMjU4WF9TVEFfQURDX1ZBTElEKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAorCQkJInRhb3NfYWxzX2NhbGlicmF0ZSBmYWlsZWQ6IFNUQVRVUyAtIEFEQyBub3QgdmFsaWQuXG4iKTsKKwkJcmV0dXJuIC1FTk9EQVRBOworCX0KKwlsdXhfdmFsID0gdGFvc19nZXRfbHV4KGNsaWVudCk7CisJaWYgKGx1eF92YWwgPCAwKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAidGFvc19hbHNfY2FsaWJyYXRlIGZhaWxlZCB0byBnZXQgbHV4XG4iKTsKKwkJcmV0dXJuIGx1eF92YWw7CisJfQorCWdhaW5fdHJpbV92YWwgPSAodW5zaWduZWQgaW50KSAoKChjaGlwLT50YW9zX3NldHRpbmdzLmFsc19jYWxfdGFyZ2V0KQorCQkJKiBjaGlwLT50YW9zX3NldHRpbmdzLmFsc19nYWluX3RyaW0pIC8gbHV4X3ZhbCk7CisKKwlpZiAoKGdhaW5fdHJpbV92YWwgPCAyNTApIHx8IChnYWluX3RyaW1fdmFsID4gNDAwMCkpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsCisJCQkidGFvc19hbHNfY2FsaWJyYXRlIGZhaWxlZDogdHJpbV92YWwgb2YgJWQgaXMgb3V0IG9mIHJhbmdlXG4iLAorCQkJZ2Fpbl90cmltX3ZhbCk7CisJCXJldHVybiAtRU5PREFUQTsKKwl9CisJY2hpcC0+dGFvc19zZXR0aW5ncy5hbHNfZ2Fpbl90cmltID0gKGludCkgZ2Fpbl90cmltX3ZhbDsKKworCXJldHVybiAoaW50KSBnYWluX3RyaW1fdmFsOworfQorCisvKgorICogVHVybiB0aGUgZGV2aWNlIG9uLgorICogQ29uZmlndXJhdGlvbiBtdXN0IGJlIHNldCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICovCitzdGF0aWMgaW50IHRhb3NfY2hpcF9vbihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCWludCBpOworCWludCByZXQgPSAwOworCXU4ICp1UDsKKwl1OCB1dG1wOworCWludCBhbHNfY291bnQ7CisJaW50IGFsc190aW1lOworCXN0cnVjdCB0c2wyNTgzX2NoaXAgKmNoaXAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCS8qIGFuZCBtYWtlIHN1cmUgd2UncmUgbm90IGFscmVhZHkgb24gKi8KKwlpZiAoY2hpcC0+dGFvc19jaGlwX3N0YXR1cyA9PSBUU0wyNThYX0NISVBfV09SS0lORykgeworCQkvKiBpZiBmb3JjaW5nIGEgcmVnaXN0ZXIgdXBkYXRlIC0gdHVybiBvZmYsIHRoZW4gb24gKi8KKwkJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiZGV2aWNlIGlzIGFscmVhZHkgZW5hYmxlZFxuIik7CisJCXJldHVybiAgIC1FSU5WQUw7CisJfQorCisJLyogZGV0ZXJtaW5lIGFscyBpbnRlZ3JhdGlvbiByZWdzdGVyICovCisJYWxzX2NvdW50ID0gKGNoaXAtPnRhb3Nfc2V0dGluZ3MuYWxzX3RpbWUgKiAxMDAgKyAxMzUpIC8gMjcwOworCWlmIChhbHNfY291bnQgPT0gMCkKKwkJYWxzX2NvdW50ID0gMTsgLyogZW5zdXJlIGF0IGxlYXN0IG9uZSBjeWNsZSAqLworCisJLyogY29udmVydCBiYWNrIHRvIHRpbWUgKGVuY29tcGFzc2VzIG92ZXJyaWRlcykgKi8KKwlhbHNfdGltZSA9IChhbHNfY291bnQgKiAyNyArIDUpIC8gMTA7CisJY2hpcC0+dGFvc19jb25maWdbVFNMMjU4WF9BTFNfVElNRV0gPSAyNTYgLSBhbHNfY291bnQ7CisKKwkvKiBTZXQgdGhlIGdhaW4gYmFzZWQgb24gdGFvc19zZXR0aW5ncyBzdHJ1Y3QgKi8KKwljaGlwLT50YW9zX2NvbmZpZ1tUU0wyNThYX0dBSU5dID0gY2hpcC0+dGFvc19zZXR0aW5ncy5hbHNfZ2FpbjsKKworCS8qIHNldCBjaGlwIHN0cnVjdCByZSBzY2FsaW5nIGFuZCBzYXR1cmF0aW9uICovCisJY2hpcC0+YWxzX3NhdHVyYXRpb24gPSBhbHNfY291bnQgKiA5MjI7IC8qIDkwJSBvZiBmdWxsIHNjYWxlICovCisJY2hpcC0+YWxzX3RpbWVfc2NhbGUgPSAoYWxzX3RpbWUgKyAyNSkgLyA1MDsKKworCS8qIFRTTDI1OHggU3BlY2lmaWMgcG93ZXItb24gLyBhZGMgZW5hYmxlIHNlcXVlbmNlCisJICogUG93ZXIgb24gdGhlIGRldmljZSAxc3QuICovCisJdXRtcCA9IFRTTDI1OFhfQ05UTF9QV1JfT047CisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsCisJCVRTTDI1OFhfQ01EX1JFRyB8IFRTTDI1OFhfQ05UUkwsIHV0bXApOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAidGFvc19jaGlwX29uIGZhaWxlZCBvbiBDTlRSTCByZWcuXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIFVzZSB0aGUgZm9sbG93aW5nIHNoYWRvdyBjb3B5IGZvciBvdXIgZGVsYXkgYmVmb3JlIGVuYWJsaW5nIEFEQy4KKwkgKiBXcml0ZSBhbGwgdGhlIHJlZ2lzdGVycy4gKi8KKwlmb3IgKGkgPSAwLCB1UCA9IGNoaXAtPnRhb3NfY29uZmlnOyBpIDwgVFNMMjU4WF9SRUdfTUFYOyBpKyspIHsKKwkJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFRTTDI1OFhfQ01EX1JFRyArIGksCisJCQkJCQkqdVArKyk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCQkidGFvc19jaGlwX29uIGZhaWxlZCBvbiByZWcgJWQuXG4iLCBpKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCW1zbGVlcCgzKTsKKwkvKiBOT1cgZW5hYmxlIHRoZSBBREMKKwkgKiBpbml0aWFsaXplIHRoZSBkZXNpcmVkIG1vZGUgb2Ygb3BlcmF0aW9uICovCisJdXRtcCA9IFRTTDI1OFhfQ05UTF9QV1JfT04gfCBUU0wyNThYX0NOVExfQURDX0VOQkw7CisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFRTTDI1OFhfQ01EX1JFRyB8IFRTTDI1OFhfQ05UUkwsCisJCQkJCXV0bXApOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAidGFvc19jaGlwX29uIGZhaWxlZCBvbiAybmQgQ1RSTCByZWcuXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwljaGlwLT50YW9zX2NoaXBfc3RhdHVzID0gVFNMMjU4WF9DSElQX1dPUktJTkc7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHRhb3NfY2hpcF9vZmYoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgdHNsMjU4M19jaGlwICpjaGlwID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IHJldDsKKworCS8qIHR1cm4gZGV2aWNlIG9mZiAqLworCWNoaXAtPnRhb3NfY2hpcF9zdGF0dXMgPSBUU0wyNThYX0NISVBfU1VTUEVOREVEOworCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBUU0wyNThYX0NNRF9SRUcgfCBUU0wyNThYX0NOVFJMLAorCQkJCQkweDAwKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBTeXNmcyBJbnRlcmZhY2UgRnVuY3Rpb25zICovCitzdGF0aWMgc3NpemVfdCB0YW9zX2RldmljZV9pZChzdHJ1Y3QgZGV2aWNlICpkZXYsCitzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdHNsMjU4M19jaGlwICpjaGlwID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBjaGlwLT5jbGllbnQtPm5hbWUpOworfQorCitzdGF0aWMgc3NpemVfdCB0YW9zX3Bvd2VyX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB0c2wyNTgzX2NoaXAgKmNoaXAgPSBpbmRpb19kZXYtPmRldl9kYXRhOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGNoaXAtPnRhb3NfY2hpcF9zdGF0dXMpOworfQorCitzdGF0aWMgc3NpemVfdCB0YW9zX3Bvd2VyX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdHNsMjU4M19jaGlwICpjaGlwID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJnZhbHVlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodmFsdWUgPT0gMCkKKwkJdGFvc19jaGlwX29mZihjaGlwLT5jbGllbnQpOworCWVsc2UKKwkJdGFvc19jaGlwX29uKGNoaXAtPmNsaWVudCk7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3NpemVfdCB0YW9zX2dhaW5fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHRzbDI1ODNfY2hpcCAqY2hpcCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CisJY2hhciBnYWluWzRdID0gezB9OworCisJc3dpdGNoIChjaGlwLT50YW9zX3NldHRpbmdzLmFsc19nYWluKSB7CisJY2FzZSAwOgorCQlzdHJjcHkoZ2FpbiwgIjAwMSIpOworCQlicmVhazsKKwljYXNlIDE6CisJCXN0cmNweShnYWluLCAiMDA4Iik7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJc3RyY3B5KGdhaW4sICIwMTYiKTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlzdHJjcHkoZ2FpbiwgIjExMSIpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgZ2Fpbik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHRhb3NfZ2Fpbl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHRzbDI1ODNfY2hpcCAqY2hpcCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CisJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDAsICZ2YWx1ZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoICh2YWx1ZSkgeworCWNhc2UgMToKKwkJY2hpcC0+dGFvc19zZXR0aW5ncy5hbHNfZ2FpbiA9IDA7CisJCWJyZWFrOworCWNhc2UgODoKKwkJY2hpcC0+dGFvc19zZXR0aW5ncy5hbHNfZ2FpbiA9IDE7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCWNoaXAtPnRhb3Nfc2V0dGluZ3MuYWxzX2dhaW4gPSAyOworCQlicmVhazsKKwljYXNlIDExMToKKwkJY2hpcC0+dGFvc19zZXR0aW5ncy5hbHNfZ2FpbiA9IDM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoZGV2LCAiSW52YWxpZCBHYWluIEluZGV4IChtdXN0IGJlIDEsOCwxNiwxMTEpXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90IHRhb3NfZ2Fpbl9hdmFpbGFibGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgIjEgOCAxNiAxMTEiKTsKK30KKworc3RhdGljIHNzaXplX3QgdGFvc19hbHNfdGltZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdHNsMjU4M19jaGlwICpjaGlwID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBjaGlwLT50YW9zX3NldHRpbmdzLmFsc190aW1lKTsKK30KKworc3RhdGljIHNzaXplX3QgdGFvc19hbHNfdGltZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHRzbDI1ODNfY2hpcCAqY2hpcCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CisJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDAsICZ2YWx1ZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCh2YWx1ZSA8IDUwKSB8fCAodmFsdWUgPiA2NTApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh2YWx1ZSAlIDUwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCSBjaGlwLT50YW9zX3NldHRpbmdzLmFsc190aW1lID0gdmFsdWU7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3NpemVfdCB0YW9zX2Fsc190aW1lX2F2YWlsYWJsZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLAorCQkiNTAgMTAwIDE1MCAyMDAgMjUwIDMwMCAzNTAgNDAwIDQ1MCA1MDAgNTUwIDYwMCA2NTAiKTsKK30KKworc3RhdGljIHNzaXplX3QgdGFvc19hbHNfdHJpbV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdHNsMjU4M19jaGlwICpjaGlwID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBjaGlwLT50YW9zX3NldHRpbmdzLmFsc19nYWluX3RyaW0pOworfQorCitzdGF0aWMgc3NpemVfdCB0YW9zX2Fsc190cmltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdHNsMjU4M19jaGlwICpjaGlwID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJnZhbHVlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodmFsdWUpCisJCWNoaXAtPnRhb3Nfc2V0dGluZ3MuYWxzX2dhaW5fdHJpbSA9IHZhbHVlOworCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHNzaXplX3QgdGFvc19hbHNfY2FsX3RhcmdldF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdHNsMjU4M19jaGlwICpjaGlwID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBjaGlwLT50YW9zX3NldHRpbmdzLmFsc19jYWxfdGFyZ2V0KTsKK30KKworc3RhdGljIHNzaXplX3QgdGFvc19hbHNfY2FsX3RhcmdldF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHRzbDI1ODNfY2hpcCAqY2hpcCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CisJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDAsICZ2YWx1ZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHZhbHVlKQorCQljaGlwLT50YW9zX3NldHRpbmdzLmFsc19jYWxfdGFyZ2V0ID0gdmFsdWU7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3NpemVfdCB0YW9zX2x1eF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJY2hhciAqYnVmKQoreworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdHNsMjU4M19jaGlwICpjaGlwID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKwlpbnQgbHV4OworCisJbHV4ID0gdGFvc19nZXRfbHV4KGNoaXAtPmNsaWVudCk7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbHV4KTsKK30KKworc3RhdGljIHNzaXplX3QgdGFvc19kb19jYWxpYnJhdGUoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB0c2wyNTgzX2NoaXAgKmNoaXAgPSBpbmRpb19kZXYtPmRldl9kYXRhOworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmdmFsdWUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh2YWx1ZSA9PSAxKQorCQl0YW9zX2Fsc19jYWxpYnJhdGUoY2hpcC0+Y2xpZW50KTsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90IHRhb3NfbHV4dGFibGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlpbnQgaTsKKwlpbnQgb2Zmc2V0ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhb3NfZGV2aWNlX2x1eCk7IGkrKykgeworCQlvZmZzZXQgKz0gc3ByaW50ZihidWYgKyBvZmZzZXQsICIlZCwlZCwlZCwiLAorCQkJCSAgdGFvc19kZXZpY2VfbHV4W2ldLnJhdGlvLAorCQkJCSAgdGFvc19kZXZpY2VfbHV4W2ldLmNoMCwKKwkJCQkgIHRhb3NfZGV2aWNlX2x1eFtpXS5jaDEpOworCQlpZiAodGFvc19kZXZpY2VfbHV4W2ldLnJhdGlvID09IDApIHsKKwkJCS8qIFdlIGp1c3QgcHJpbnRlZCB0aGUgZmlyc3QgIjAiIGVudHJ5LgorCQkJICogTm93IGdldCByaWQgb2YgdGhlIGV4dHJhICIsIiBhbmQgYnJlYWsuICovCisJCQlvZmZzZXQtLTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJb2Zmc2V0ICs9IHNwcmludGYoYnVmICsgb2Zmc2V0LCAiXG4iKTsKKwlyZXR1cm4gb2Zmc2V0OworfQorCitzdGF0aWMgc3NpemVfdCB0YW9zX2x1eHRhYmxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdHNsMjU4M19jaGlwICpjaGlwID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKwlpbnQgdmFsdWVbQVJSQVlfU0laRSh0YW9zX2RldmljZV9sdXgpXTsKKwlpbnQgbjsKKworCWdldF9vcHRpb25zKGJ1ZiwgQVJSQVlfU0laRSh2YWx1ZSksIHZhbHVlKTsKKworCS8qIFdlIG5vdyBoYXZlIGFuIGFycmF5IG9mIGludHMgc3RhcnRpbmcgYXQgdmFsdWVbMV0sIGFuZAorCSAqIGVudW1lcmF0ZWQgYnkgdmFsdWVbMF0uCisJICogV2UgZXhwZWN0IGVhY2ggZ3JvdXAgb2YgdGhyZWUgaW50cyBpcyBvbmUgdGFibGUgZW50cnksCisJICogYW5kIHRoZSBsYXN0IHRhYmxlIGVudHJ5IGlzIGFsbCAwLgorCSAqLworCW4gPSB2YWx1ZVswXTsKKwlpZiAoKG4gJSAzKSB8fCBuIDwgNiB8fCBuID4gKChBUlJBWV9TSVpFKHRhb3NfZGV2aWNlX2x1eCkgLSAxKSAqIDMpKSB7CisJCWRldl9pbmZvKGRldiwgIkxVWCBUQUJMRSBJTlBVVCBFUlJPUiAxIFZhbHVlWzBdPSVkXG4iLCBuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICgodmFsdWVbKG4gLSAyKV0gfCB2YWx1ZVsobiAtIDEpXSB8IHZhbHVlW25dKSAhPSAwKSB7CisJCWRldl9pbmZvKGRldiwgIkxVWCBUQUJMRSBJTlBVVCBFUlJPUiAyIFZhbHVlWzBdPSVkXG4iLCBuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGNoaXAtPnRhb3NfY2hpcF9zdGF0dXMgPT0gVFNMMjU4WF9DSElQX1dPUktJTkcpCisJCXRhb3NfY2hpcF9vZmYoY2hpcC0+Y2xpZW50KTsKKworCS8qIFplcm8gb3V0IHRoZSB0YWJsZSAqLworCW1lbXNldCh0YW9zX2RldmljZV9sdXgsIDAsIHNpemVvZih0YW9zX2RldmljZV9sdXgpKTsKKwltZW1jcHkodGFvc19kZXZpY2VfbHV4LCAmdmFsdWVbMV0sICh2YWx1ZVswXSAqIDQpKTsKKworCXRhb3NfY2hpcF9vbihjaGlwLT5jbGllbnQpOworCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHRhb3NfZGV2aWNlX2lkLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihwb3dlcl9zdGF0ZSwgU19JUlVHTyB8IFNfSVdVU1IsCisJCXRhb3NfcG93ZXJfc3RhdGVfc2hvdywgdGFvc19wb3dlcl9zdGF0ZV9zdG9yZSk7CisKK3N0YXRpYyBERVZJQ0VfQVRUUihpbGx1bWluYW5jZTBfY2FsaWJzY2FsZSwgU19JUlVHTyB8IFNfSVdVU1IsCisJCXRhb3NfZ2Fpbl9zaG93LCB0YW9zX2dhaW5fc3RvcmUpOworc3RhdGljIERFVklDRV9BVFRSKGlsbHVtaW5hbmNlMF9jYWxpYnNjYWxlX2F2YWlsYWJsZSwgU19JUlVHTywKKwkJdGFvc19nYWluX2F2YWlsYWJsZV9zaG93LCBOVUxMKTsKKworc3RhdGljIERFVklDRV9BVFRSKGlsbHVtaW5hbmNlMF9pbnRlZ3JhdGlvbl90aW1lLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJdGFvc19hbHNfdGltZV9zaG93LCB0YW9zX2Fsc190aW1lX3N0b3JlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihpbGx1bWluYW5jZTBfaW50ZWdyYXRpb25fdGltZV9hdmFpbGFibGUsIFNfSVJVR08sCisJCXRhb3NfYWxzX3RpbWVfYXZhaWxhYmxlX3Nob3csIE5VTEwpOworCitzdGF0aWMgREVWSUNFX0FUVFIoaWxsdW1pbmFuY2UwX2NhbGliYmlhcywgU19JUlVHTyB8IFNfSVdVU1IsCisJCXRhb3NfYWxzX3RyaW1fc2hvdywgdGFvc19hbHNfdHJpbV9zdG9yZSk7CisKK3N0YXRpYyBERVZJQ0VfQVRUUihpbGx1bWluYW5jZTBfaW5wdXRfdGFyZ2V0LCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJdGFvc19hbHNfY2FsX3RhcmdldF9zaG93LCB0YW9zX2Fsc19jYWxfdGFyZ2V0X3N0b3JlKTsKKworc3RhdGljIERFVklDRV9BVFRSKGlsbHVtaW5hbmNlMF9pbnB1dCwgU19JUlVHTywgdGFvc19sdXhfc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoaWxsdW1pbmFuY2UwX2NhbGlicmF0ZSwgU19JV1VTUiwgTlVMTCwgdGFvc19kb19jYWxpYnJhdGUpOworc3RhdGljIERFVklDRV9BVFRSKGlsbHVtaW5hbmNlMF9sdXhfdGFibGUsIFNfSVJVR08gfCBTX0lXVVNSLAorCQl0YW9zX2x1eHRhYmxlX3Nob3csIHRhb3NfbHV4dGFibGVfc3RvcmUpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqc3lzZnNfYXR0cnNfY3RybFtdID0geworCSZkZXZfYXR0cl9uYW1lLmF0dHIsCisJJmRldl9hdHRyX3Bvd2VyX3N0YXRlLmF0dHIsCisJJmRldl9hdHRyX2lsbHVtaW5hbmNlMF9jYWxpYnNjYWxlLmF0dHIsCQkJLyogR2FpbiAgKi8KKwkmZGV2X2F0dHJfaWxsdW1pbmFuY2UwX2NhbGlic2NhbGVfYXZhaWxhYmxlLmF0dHIsCisJJmRldl9hdHRyX2lsbHVtaW5hbmNlMF9pbnRlZ3JhdGlvbl90aW1lLmF0dHIsCS8qIEkgdGltZSovCisJJmRldl9hdHRyX2lsbHVtaW5hbmNlMF9pbnRlZ3JhdGlvbl90aW1lX2F2YWlsYWJsZS5hdHRyLAorCSZkZXZfYXR0cl9pbGx1bWluYW5jZTBfY2FsaWJiaWFzLmF0dHIsCQkJLyogdHJpbSAgKi8KKwkmZGV2X2F0dHJfaWxsdW1pbmFuY2UwX2lucHV0X3RhcmdldC5hdHRyLAorCSZkZXZfYXR0cl9pbGx1bWluYW5jZTBfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfaWxsdW1pbmFuY2UwX2NhbGlicmF0ZS5hdHRyLAorCSZkZXZfYXR0cl9pbGx1bWluYW5jZTBfbHV4X3RhYmxlLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgdHNsMjU4M19hdHRyaWJ1dGVfZ3JvdXAgPSB7CisJLmF0dHJzID0gc3lzZnNfYXR0cnNfY3RybCwKK307CisKKy8qIFVzZSB0aGUgZGVmYXVsdCByZWdpc3RlciB2YWx1ZXMgdG8gaWRlbnRpZnkgdGhlIFRhb3MgZGV2aWNlICovCitzdGF0aWMgaW50IHRhb3NfdHNsMjU4eF9kZXZpY2UodW5zaWduZWQgY2hhciAqYnVmcCkKK3sKKwlyZXR1cm4gKChidWZwW1RTTDI1OFhfQ0hJUElEXSAmIDB4ZjApID09IDB4OTApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIHRzbDI1ODNfaW5mbyA9IHsKKwkuYXR0cnMgPSAmdHNsMjU4M19hdHRyaWJ1dGVfZ3JvdXAsCisJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRSwKK307CisKKy8qCisgKiBDbGllbnQgcHJvYmUgZnVuY3Rpb24gLSBXaGVuIGEgdmFsaWQgZGV2aWNlIGlzIGZvdW5kLCB0aGUgZHJpdmVyJ3MgZGV2aWNlCisgKiBkYXRhIHN0cnVjdHVyZSBpcyB1cGRhdGVkLCBhbmQgaW5pdGlhbGl6YXRpb24gY29tcGxldGVzIHN1Y2Nlc3NmdWxseS4KKyAqLworc3RhdGljIGludCBfX2RldmluaXQgdGFvc19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50cCwKKwkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkcCkKK3sKKwlpbnQgaSwgcmV0ID0gMDsKKwl1bnNpZ25lZCBjaGFyIGJ1ZltUU0wyNThYX01BWF9ERVZJQ0VfUkVHU107CisJc3RhdGljIHN0cnVjdCB0c2wyNTgzX2NoaXAgKmNoaXA7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudHAtPmFkYXB0ZXIsCisJCUkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpIHsKKwkJZGV2X2VycigmY2xpZW50cC0+ZGV2LAorCQkJInRhb3NfcHJvYmUoKSAtIGkyYyBzbWJ1cyBieXRlIGRhdGEgIgorCQkJImZ1bmN0aW9ucyB1bnN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwljaGlwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRzbDI1ODNfY2hpcCksIEdGUF9LRVJORUwpOworCWlmICghY2hpcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljaGlwLT5jbGllbnQgPSBjbGllbnRwOworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnRwLCBjaGlwKTsKKworCW11dGV4X2luaXQoJmNoaXAtPmFsc19tdXRleCk7CisJY2hpcC0+dGFvc19jaGlwX3N0YXR1cyA9IFRTTDI1OFhfQ0hJUF9VTktOT1dOOworCW1lbWNweShjaGlwLT50YW9zX2NvbmZpZywgdGFvc19jb25maWcsIHNpemVvZihjaGlwLT50YW9zX2NvbmZpZykpOworCisJZm9yIChpID0gMDsgaSA8IFRTTDI1OFhfTUFYX0RFVklDRV9SRUdTOyBpKyspIHsKKwkJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGUoY2xpZW50cCwKKwkJCQkoVFNMMjU4WF9DTURfUkVHIHwgKFRTTDI1OFhfQ05UUkwgKyBpKSkpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycigmY2xpZW50cC0+ZGV2LCAiaTJjX3NtYnVzX3dyaXRlX2J5dGVzKCkgdG8gY21kICIKKwkJCQkicmVnIGZhaWxlZCBpbiB0YW9zX3Byb2JlKCksIGVyciA9ICVkXG4iLCByZXQpOworCQkJZ290byBmYWlsMTsKKwkJfQorCQlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlKGNsaWVudHApOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycigmY2xpZW50cC0+ZGV2LCAiaTJjX3NtYnVzX3JlYWRfYnl0ZSBmcm9tICIKKwkJCQkicmVnIGZhaWxlZCBpbiB0YW9zX3Byb2JlKCksIGVyciA9ICVkXG4iLCByZXQpOworCisJCQlnb3RvIGZhaWwxOworCQl9CisJCWJ1ZltpXSA9IHJldDsKKwl9CisKKwlpZiAoIXRhb3NfdHNsMjU4eF9kZXZpY2UoYnVmKSkgeworCQlkZXZfaW5mbygmY2xpZW50cC0+ZGV2LCAiaTJjIGRldmljZSBmb3VuZCBidXQgZG9lcyBub3QgbWF0Y2ggIgorCQkJImV4cGVjdGVkIGlkIGluIHRhb3NfcHJvYmUoKVxuIik7CisJCWdvdG8gZmFpbDE7CisJfQorCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGUoY2xpZW50cCwgKFRTTDI1OFhfQ01EX1JFRyB8IFRTTDI1OFhfQ05UUkwpKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnRwLT5kZXYsICJpMmNfc21idXNfd3JpdGVfYnl0ZSgpIHRvIGNtZCByZWcgIgorCQkJImZhaWxlZCBpbiB0YW9zX3Byb2JlKCksIGVyciA9ICVkXG4iLCByZXQpOworCQlnb3RvIGZhaWwxOworCX0KKworCWNoaXAtPmlpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKDApOworCWlmICghY2hpcC0+aWlvX2RldikgeworCQlyZXQgPSAtRU5PTUVNOworCQlkZXZfZXJyKCZjbGllbnRwLT5kZXYsICJpaW8gYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIGZhaWwxOworCX0KKworCWNoaXAtPmlpb19kZXYtPmluZm8gPSAmdHNsMjU4M19pbmZvOworCWNoaXAtPmlpb19kZXYtPmRldi5wYXJlbnQgPSAmY2xpZW50cC0+ZGV2OworCWNoaXAtPmlpb19kZXYtPmRldl9kYXRhID0gKHZvaWQgKikoY2hpcCk7CisJY2hpcC0+aWlvX2Rldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1RfTU9ERTsKKwlyZXQgPSBpaW9fZGV2aWNlX3JlZ2lzdGVyKGNoaXAtPmlpb19kZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmY2xpZW50cC0+ZGV2LCAiaWlvIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIGZhaWwxOworCX0KKworCS8qIExvYWQgdXAgdGhlIFYyIGRlZmF1bHRzICh0aGVzZSBhcmUgaGFyZCBjb2RlZCBkZWZhdWx0cyBmb3Igbm93KSAqLworCXRhb3NfZGVmYXVsdHMoY2hpcCk7CisKKwkvKiBNYWtlIHN1cmUgdGhlIGNoaXAgaXMgb24gKi8KKwl0YW9zX2NoaXBfb24oY2xpZW50cCk7CisKKwlkZXZfaW5mbygmY2xpZW50cC0+ZGV2LCAiTGlnaHQgc2Vuc29yIGZvdW5kLlxuIik7CisKKwlyZXR1cm4gMDsKKworZmFpbDE6CisJa2ZyZWUoY2hpcCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHRhb3Nfc3VzcGVuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IHRzbDI1ODNfY2hpcCAqY2hpcCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmY2hpcC0+YWxzX211dGV4KTsKKworCWlmIChjaGlwLT50YW9zX2NoaXBfc3RhdHVzID09IFRTTDI1OFhfQ0hJUF9XT1JLSU5HKSB7CisJCXJldCA9IHRhb3NfY2hpcF9vZmYoY2xpZW50KTsKKwkJY2hpcC0+dGFvc19jaGlwX3N0YXR1cyA9IFRTTDI1OFhfQ0hJUF9TVVNQRU5ERUQ7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5hbHNfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdGFvc19yZXN1bWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgdHNsMjU4M19jaGlwICpjaGlwID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IHJldCA9IDA7CisKKwltdXRleF9sb2NrKCZjaGlwLT5hbHNfbXV0ZXgpOworCisJaWYgKGNoaXAtPnRhb3NfY2hpcF9zdGF0dXMgPT0gVFNMMjU4WF9DSElQX1NVU1BFTkRFRCkKKwkJcmV0ID0gdGFvc19jaGlwX29uKGNsaWVudCk7CisKKwltdXRleF91bmxvY2soJmNoaXAtPmFsc19tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB0YW9zX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB0c2wyNTgzX2NoaXAgKmNoaXAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCWlpb19kZXZpY2VfdW5yZWdpc3RlcihjaGlwLT5paW9fZGV2KTsKKworCWtmcmVlKGNoaXApOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19kZXZpY2VfaWQgdGFvc19pZHRhYmxlW10gPSB7CisJeyAidHNsMjU4MCIsIDAgfSwKKwl7ICJ0c2wyNTgxIiwgMSB9LAorCXsgInRzbDI1ODMiLCAyIH0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgdGFvc19pZHRhYmxlKTsKKworLyogRHJpdmVyIGRlZmluaXRpb24gKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0YW9zX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJ0c2wyNTgzIiwKKwl9LAorCS5pZF90YWJsZSA9IHRhb3NfaWR0YWJsZSwKKwkuc3VzcGVuZAk9IHRhb3Nfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHRhb3NfcmVzdW1lLAorCS5wcm9iZSA9IHRhb3NfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHRhb3NfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHRhb3NfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmdGFvc19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdGFvc19leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJnRhb3NfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodGFvc19pbml0KTsKK21vZHVsZV9leGl0KHRhb3NfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkouIEF1Z3VzdCBCcmVubmVyPGpicmVubmVyQHRhb3NpbmMuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUQU9TIHRzbDI1ODMgYW1iaWVudCBsaWdodCBzZW5zb3IgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL21hZ25ldG9tZXRlci9hazg5NzUuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbWFnbmV0b21ldGVyL2FrODk3NS5jCmluZGV4IDQyMGYyMDYuLjcwMGY5NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbWFnbmV0b21ldGVyL2FrODk3NS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbWFnbmV0b21ldGVyL2FrODk3NS5jCkBAIC0yMDYsNyArMjA2LDcgQEAKIAl9CiAKIAkvKiBQcmVjYWxjdWxhdGUgc2NhbGUgZmFjdG9yIGZvciBlYWNoIGF4aXMgYW5kCi0gICAgICAgICAgIHN0b3JlIGluIHRoZSBkZXZpY2UgZGF0YS4gKi8KKwkgICBzdG9yZSBpbiB0aGUgZGV2aWNlIGRhdGEuICovCiAJZGF0YS0+cmF3X3RvX2dhdXNzWzBdID0gKChkYXRhLT5hc2FbMF0gKyAxMjgpICogMzApID4+IDg7CiAJZGF0YS0+cmF3X3RvX2dhdXNzWzFdID0gKChkYXRhLT5hc2FbMV0gKyAxMjgpICogMzApID4+IDg7CiAJZGF0YS0+cmF3X3RvX2dhdXNzWzJdID0gKChkYXRhLT5hc2FbMl0gKyAxMjgpICogMzApID4+IDg7CkBAIC0zMTYsNiArMzE2LDU5IEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLCBkYXRhLT5yYXdfdG9fZ2F1c3NbdGhpc19hdHRyLT5hZGRyZXNzXSk7CiB9CiAKK3N0YXRpYyBpbnQgd2FpdF9jb252ZXJzaW9uX2NvbXBsZXRlX2dwaW8oc3RydWN0IGFrODk3NV9kYXRhICpkYXRhKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CisJdTggcmVhZF9zdGF0dXM7CisJdTMyIHRpbWVvdXRfbXMgPSBBSzg5NzVfTUFYX0NPTlZFUlNJT05fVElNRU9VVDsKKwlpbnQgcmV0OworCisJLyogV2FpdCBmb3IgdGhlIGNvbnZlcnNpb24gdG8gY29tcGxldGUuICovCisJd2hpbGUgKHRpbWVvdXRfbXMpIHsKKwkJbXNsZWVwKEFLODk3NV9DT05WRVJTSU9OX0RPTkVfUE9MTF9USU1FKTsKKwkJaWYgKGdwaW9fZ2V0X3ZhbHVlKGRhdGEtPmVvY19ncGlvKSkKKwkJCWJyZWFrOworCQl0aW1lb3V0X21zIC09IEFLODk3NV9DT05WRVJTSU9OX0RPTkVfUE9MTF9USU1FOworCX0KKwlpZiAoIXRpbWVvdXRfbXMpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJDb252ZXJzaW9uIHRpbWVvdXQgaGFwcGVuZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBhazg5NzVfcmVhZF9kYXRhKGNsaWVudCwgQUs4OTc1X1JFR19TVDEsIDEsICZyZWFkX3N0YXR1cyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJFcnJvciBpbiByZWFkaW5nIFNUMVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiByZWFkX3N0YXR1czsKK30KKworc3RhdGljIGludCB3YWl0X2NvbnZlcnNpb25fY29tcGxldGVfcG9sbGVkKHN0cnVjdCBhazg5NzVfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZGF0YS0+Y2xpZW50OworCXU4IHJlYWRfc3RhdHVzOworCXUzMiB0aW1lb3V0X21zID0gQUs4OTc1X01BWF9DT05WRVJTSU9OX1RJTUVPVVQ7CisJaW50IHJldDsKKworCS8qIFdhaXQgZm9yIHRoZSBjb252ZXJzaW9uIHRvIGNvbXBsZXRlLiAqLworCXdoaWxlICh0aW1lb3V0X21zKSB7CisJCW1zbGVlcChBSzg5NzVfQ09OVkVSU0lPTl9ET05FX1BPTExfVElNRSk7CisJCXJldCA9IGFrODk3NV9yZWFkX2RhdGEoY2xpZW50LCBBSzg5NzVfUkVHX1NUMSwgMSwgJnJlYWRfc3RhdHVzKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiRXJyb3IgaW4gcmVhZGluZyBTVDFcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlpZiAocmVhZF9zdGF0dXMpCisJCQlicmVhazsKKwkJdGltZW91dF9tcyAtPSBBSzg5NzVfQ09OVkVSU0lPTl9ET05FX1BPTExfVElNRTsKKwl9CisJaWYgKCF0aW1lb3V0X21zKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiQ29udmVyc2lvbiB0aW1lb3V0IGhhcHBlbmVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiByZWFkX3N0YXR1czsKK30KKwogLyoKICAqIEVtaXRzIHRoZSByYXcgZmx1eCB2YWx1ZSBmb3IgdGhlIHgsIHksIG9yIHogYXhpcy4KICAqLwpAQCAtMzI2LDcgKzM3OSw2IEBACiAJc3RydWN0IGFrODk3NV9kYXRhICpkYXRhID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZGF0YS0+Y2xpZW50OwogCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihkZXZhdHRyKTsKLQl1MzIgdGltZW91dF9tcyA9IEFLODk3NV9NQVhfQ09OVkVSU0lPTl9USU1FT1VUOwogCXUxNiBtZWFzX3JlZzsKIAlzMTYgcmF3OwogCXU4IHJlYWRfc3RhdHVzOwpAQCAtMzUyLDIzICs0MDQsMTQgQEAKIAl9CiAKIAkvKiBXYWl0IGZvciB0aGUgY29udmVyc2lvbiB0byBjb21wbGV0ZS4gKi8KLQl3aGlsZSAodGltZW91dF9tcykgewotCQltc2xlZXAoQUs4OTc1X0NPTlZFUlNJT05fRE9ORV9QT0xMX1RJTUUpOwotCQlpZiAoZ3Bpb19nZXRfdmFsdWUoZGF0YS0+ZW9jX2dwaW8pKQotCQkJYnJlYWs7Ci0JCXRpbWVvdXRfbXMgLT0gQUs4OTc1X0NPTlZFUlNJT05fRE9ORV9QT0xMX1RJTUU7Ci0JfQotCWlmICghdGltZW91dF9tcykgewotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkNvbnZlcnNpb24gdGltZW91dCBoYXBwZW5lZFxuIik7Ci0JCXJldCA9IC1FSU5WQUw7CisJaWYgKGRhdGEtPmVvY19ncGlvKQorCQlyZXQgPSB3YWl0X2NvbnZlcnNpb25fY29tcGxldGVfZ3BpbyhkYXRhKTsKKwllbHNlCisJCXJldCA9IHdhaXRfY29udmVyc2lvbl9jb21wbGV0ZV9wb2xsZWQoZGF0YSk7CisJaWYgKHJldCA8IDApCiAJCWdvdG8gZXhpdDsKLQl9CiAKLQlyZXQgPSBhazg5NzVfcmVhZF9kYXRhKGNsaWVudCwgQUs4OTc1X1JFR19TVDEsIDEsICZyZWFkX3N0YXR1cyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJFcnJvciBpbiByZWFkaW5nIFNUMVxuIik7Ci0JCWdvdG8gZXhpdDsKLQl9CisJcmVhZF9zdGF0dXMgPSByZXQ7CiAKIAlpZiAocmVhZF9zdGF0dXMgJiBBSzg5NzVfUkVHX1NUMV9EUkRZX01BU0spIHsKIAkJcmV0ID0gYWs4OTc1X3JlYWRfZGF0YShjbGllbnQsIEFLODk3NV9SRUdfU1QyLCAxLCAmcmVhZF9zdGF0dXMpOwpAQCAtNDMxLDYgKzQ3NCwxMSBAQAogCS5hdHRycyA9IGFrODk3NV9hdHRyLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9faW5mbyBhazg5NzVfaW5mbyA9IHsKKwkuYXR0cnMgPSAmYWs4OTc1X2F0dHJfZ3JvdXAsCisJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRSwKK307CisKIHN0YXRpYyBpbnQgYWs4OTc1X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CkBAIC00NTQsMjUgKzUwMiwyNiBAQAogCWRhdGEtPmVvY19pcnEgPSBjbGllbnQtPmlycTsKIAlkYXRhLT5lb2NfZ3BpbyA9IGlycV90b19ncGlvKGNsaWVudC0+aXJxKTsKIAotCWlmICghZGF0YS0+ZW9jX2dwaW8pIHsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQsIG5vIHZhbGlkIEdQSU9cbiIpOwotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGV4aXRfZnJlZTsKLQl9CisJLyogV2UgbWF5IG5vdCBoYXZlIGEgR1BJTyBiYXNlZCBJUlEgdG8gc2NhbiwgdGhhdCBpcyBmaW5lLCB3ZSB3aWxsCisJICAgcG9sbCBpZiBzbyAqLworCWlmIChkYXRhLT5lb2NfZ3BpbyA+IDApIHsKKwkJZXJyID0gZ3Bpb19yZXF1ZXN0KGRhdGEtPmVvY19ncGlvLCAiYWtfODk3NSIpOworCQlpZiAoZXJyIDwgMCkgeworCQkJZGV2X2VycigmY2xpZW50LT5kZXYsCisJCQkJImZhaWxlZCB0byByZXF1ZXN0IEdQSU8gJWQsIGVycm9yICVkXG4iLAorCQkJCQkJCWRhdGEtPmVvY19ncGlvLCBlcnIpOworCQkJZ290byBleGl0X2ZyZWU7CisJCX0KIAotCWVyciA9IGdwaW9fcmVxdWVzdChkYXRhLT5lb2NfZ3BpbywgImFrXzg5NzUiKTsKLQlpZiAoZXJyIDwgMCkgewotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IEdQSU8gJWQsIGVycm9yICVkXG4iLAotCQkJZGF0YS0+ZW9jX2dwaW8sIGVycik7Ci0JCWdvdG8gZXhpdF9mcmVlOwotCX0KLQotCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KGRhdGEtPmVvY19ncGlvKTsKLQlpZiAoZXJyIDwgMCkgewotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkZhaWxlZCB0byBjb25maWd1cmUgaW5wdXQgZGlyZWN0aW9uIGZvciIKLQkJCSIgR1BJTyAlZCwgZXJyb3IgJWRcbiIsIGRhdGEtPmVvY19ncGlvLCBlcnIpOwotCQlnb3RvIGV4aXRfZ3BpbzsKLQl9CisJCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KGRhdGEtPmVvY19ncGlvKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gY29uZmlndXJlIGlucHV0IGRpcmVjdGlvbiBmb3IgR1BJTyAlZCwgZXJyb3IgJWRcbiIsCisJCQkJCQlkYXRhLT5lb2NfZ3BpbywgZXJyKTsKKwkJCWdvdG8gZXhpdF9ncGlvOworCQl9CisJfSBlbHNlCisJCWRhdGEtPmVvY19ncGlvID0gMDsJLyogTm8gR1BJTyBhdmFpbGFibGUgKi8KIAogCS8qIFBlcmZvcm0gc29tZSBiYXNpYyBzdGFydC1vZi1kYXkgc2V0dXAgb2YgdGhlIGRldmljZS4gKi8KIAllcnIgPSBhazg5NzVfc2V0dXAoY2xpZW50KTsKQEAgLTQ4MiwxNiArNTMxLDE1IEBACiAJfQogCiAJLyogUmVnaXN0ZXIgd2l0aCBJSU8gKi8KLQlkYXRhLT5pbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKCk7CisJZGF0YS0+aW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgwKTsKIAlpZiAoZGF0YS0+aW5kaW9fZGV2ID09IE5VTEwpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBleGl0X2dwaW87CiAJfQogCiAJZGF0YS0+aW5kaW9fZGV2LT5kZXYucGFyZW50ID0gJmNsaWVudC0+ZGV2OwotCWRhdGEtPmluZGlvX2Rldi0+YXR0cnMgPSAmYWs4OTc1X2F0dHJfZ3JvdXA7CisJZGF0YS0+aW5kaW9fZGV2LT5pbmZvID0gJmFrODk3NV9pbmZvOwogCWRhdGEtPmluZGlvX2Rldi0+ZGV2X2RhdGEgPSAodm9pZCAqKShkYXRhKTsKLQlkYXRhLT5pbmRpb19kZXYtPmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRTsKIAlkYXRhLT5pbmRpb19kZXYtPm1vZGVzID0gSU5ESU9fRElSRUNUX01PREU7CiAKIAllcnIgPSBpaW9fZGV2aWNlX3JlZ2lzdGVyKGRhdGEtPmluZGlvX2Rldik7CkBAIC01MDMsNyArNTUxLDggQEAKIGV4aXRfZnJlZV9paW86CiAJaWlvX2ZyZWVfZGV2aWNlKGRhdGEtPmluZGlvX2Rldik7CiBleGl0X2dwaW86Ci0JZ3Bpb19mcmVlKGRhdGEtPmVvY19ncGlvKTsKKwlpZiAoZGF0YS0+ZW9jX2dwaW8pCisJCWdwaW9fZnJlZShkYXRhLT5lb2NfZ3Bpbyk7CiBleGl0X2ZyZWU6CiAJa2ZyZWUoZGF0YSk7CiBleGl0OgpAQCAtNTE3LDcgKzU2Niw4IEBACiAJaWlvX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmluZGlvX2Rldik7CiAJaWlvX2ZyZWVfZGV2aWNlKGRhdGEtPmluZGlvX2Rldik7CiAKLQlncGlvX2ZyZWUoZGF0YS0+ZW9jX2dwaW8pOworCWlmIChkYXRhLT5lb2NfZ3BpbykKKwkJZ3Bpb19mcmVlKGRhdGEtPmVvY19ncGlvKTsKIAogCWtmcmVlKGRhdGEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL21hZ25ldG9tZXRlci9obWM1ODQzLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL21hZ25ldG9tZXRlci9obWM1ODQzLmMKaW5kZXggNTE2ODkxNy4uZGQ5YTNiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9tYWduZXRvbWV0ZXIvaG1jNTg0My5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbWFnbmV0b21ldGVyL2htYzU4NDMuYwpAQCAtNTI5LDYgKzUyOSwxMSBAQAogCXByX2luZm8oIkhNQzU4NDMgaW5pdGlhbGl6ZWRcbiIpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIGhtYzU4NDNfaW5mbyA9IHsKKwkuYXR0cnMgPSAmaG1jNTg0M19ncm91cCwKKwkuZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFLAorfTsKKwogc3RhdGljIGludCBobWM1ODQzX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewpAQCAtNTUyLDE1ICs1NTcsMTQgQEAKIAkvKiBJbml0aWFsaXplIHRoZSBITUM1ODQzIGNoaXAgKi8KIAlobWM1ODQzX2luaXRfY2xpZW50KGNsaWVudCk7CiAKLQlkYXRhLT5pbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKCk7CisJZGF0YS0+aW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgwKTsKIAlpZiAoIWRhdGEtPmluZGlvX2RldikgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGV4aXRfZnJlZTE7CiAJfQotCWRhdGEtPmluZGlvX2Rldi0+YXR0cnMgPSAmaG1jNTg0M19ncm91cDsKKwlkYXRhLT5pbmRpb19kZXYtPmluZm8gPSAmaG1jNTg0M19pbmZvOwogCWRhdGEtPmluZGlvX2Rldi0+ZGV2LnBhcmVudCA9ICZjbGllbnQtPmRldjsKIAlkYXRhLT5pbmRpb19kZXYtPmRldl9kYXRhID0gKHZvaWQgKikoZGF0YSk7Ci0JZGF0YS0+aW5kaW9fZGV2LT5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEU7CiAJZGF0YS0+aW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOwogCWVyciA9IGlpb19kZXZpY2VfcmVnaXN0ZXIoZGF0YS0+aW5kaW9fZGV2KTsKIAlpZiAoZXJyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9hZGU3NzUzLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL21ldGVyL2FkZTc3NTMuYwppbmRleCA4Yjg2ZDgyLi42YzljMjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL21ldGVyL2FkZTc3NTMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL21ldGVyL2FkZTc3NTMuYwpAQCAtNDYzLDggKzQ2Myw2IEBACiAKIHN0YXRpYyBJSU9fQ09OU1RfQVRUUl9TQU1QX0ZSRVFfQVZBSUwoIjI3OTAwIDE0MDAwIDcwMDAgMzUwMCIpOwogCi1zdGF0aWMgSUlPX0NPTlNUX0FUVFIobmFtZSwgImFkZTc3NTMiKTsKLQogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkZTc3NTNfYXR0cmlidXRlc1tdID0gewogCSZpaW9fZGV2X2F0dHJfdGVtcF9yYXcuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2NvbnN0X2F0dHJfdGVtcF9vZmZzZXQuZGV2X2F0dHIuYXR0ciwKQEAgLTQ3Miw3ICs0NzAsNiBAQAogCSZpaW9fZGV2X2F0dHJfc2FtcGxpbmdfZnJlcXVlbmN5LmRldl9hdHRyLmF0dHIsCiAJJmlpb19jb25zdF9hdHRyX3NhbXBsaW5nX2ZyZXF1ZW5jeV9hdmFpbGFibGUuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX3Jlc2V0LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX25hbWUuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX3BoY2FsLmRldl9hdHRyLmF0dHIsCiAJJmlpb19kZXZfYXR0cl9jZmRlbi5kZXZfYXR0ci5hdHRyLAogCSZpaW9fZGV2X2F0dHJfYWVuZXJneS5kZXZfYXR0ci5hdHRyLApAQCAtNTA3LDYgKzUwNCwxMSBAQAogCS5hdHRycyA9IGFkZTc3NTNfYXR0cmlidXRlcywKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2luZm8gYWRlNzc1M19pbmZvID0geworCS5hdHRycyA9ICZhZGU3NzUzX2F0dHJpYnV0ZV9ncm91cCwKKwkuZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFLAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgYWRlNzc1M19wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCWludCByZXQsIHJlZ2RvbmUgPSAwOwpAQCAtNTMyLDE2ICs1MzQsMTYgQEAKIAlzdC0+dXMgPSBzcGk7CiAJbXV0ZXhfaW5pdCgmc3QtPmJ1Zl9sb2NrKTsKIAkvKiBzZXR1cCB0aGUgaW5kdXN0cmlhbGlvIGRyaXZlciBhbGxvY2F0ZWQgZWxlbWVudHMgKi8KLQlzdC0+aW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgpOworCXN0LT5pbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKDApOwogCWlmIChzdC0+aW5kaW9fZGV2ID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9mcmVlX3R4OwogCX0KIAorCXN0LT5pbmRpb19kZXYtPm5hbWUgPSBzcGktPmRldi5kcml2ZXItPm5hbWU7CiAJc3QtPmluZGlvX2Rldi0+ZGV2LnBhcmVudCA9ICZzcGktPmRldjsKLQlzdC0+aW5kaW9fZGV2LT5hdHRycyA9ICZhZGU3NzUzX2F0dHJpYnV0ZV9ncm91cDsKKwlzdC0+aW5kaW9fZGV2LT5pbmZvID0gJmFkZTc3NTNfaW5mbzsKIAlzdC0+aW5kaW9fZGV2LT5kZXZfZGF0YSA9ICh2b2lkICopKHN0KTsKLQlzdC0+aW5kaW9fZGV2LT5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEU7CiAJc3QtPmluZGlvX2Rldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1RfTU9ERTsKIAogCXJldCA9IGlpb19kZXZpY2VfcmVnaXN0ZXIoc3QtPmluZGlvX2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL21ldGVyL2FkZTc3NTQuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbWV0ZXIvYWRlNzc1NC5jCmluZGV4IDQyNzI4MTguLjM3OGYyYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbWV0ZXIvYWRlNzc1NC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbWV0ZXIvYWRlNzc1NC5jCkBAIC00ODIsOCArNDgyLDYgQEAKIAogc3RhdGljIElJT19DT05TVF9BVFRSX1NBTVBfRlJFUV9BVkFJTCgiMjYwMDAgMTMwMDAgNjUwMDAgMzMwMDAiKTsKIAotc3RhdGljIElJT19DT05TVF9BVFRSKG5hbWUsICJhZGU3NzU0Iik7Ci0KIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZGU3NzU0X2F0dHJpYnV0ZXNbXSA9IHsKIAkmaWlvX2Rldl9hdHRyX3RlbXBfcmF3LmRldl9hdHRyLmF0dHIsCiAJJmlpb19jb25zdF9hdHRyX3RlbXBfb2Zmc2V0LmRldl9hdHRyLmF0dHIsCkBAIC00OTEsNyArNDg5LDYgQEAKIAkmaWlvX2Rldl9hdHRyX3NhbXBsaW5nX2ZyZXF1ZW5jeS5kZXZfYXR0ci5hdHRyLAogCSZpaW9fY29uc3RfYXR0cl9zYW1wbGluZ19mcmVxdWVuY3lfYXZhaWxhYmxlLmRldl9hdHRyLmF0dHIsCiAJJmlpb19kZXZfYXR0cl9yZXNldC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9uYW1lLmRldl9hdHRyLmF0dHIsCiAJJmlpb19kZXZfYXR0cl9hZW5lcmd5LmRldl9hdHRyLmF0dHIsCiAJJmlpb19kZXZfYXR0cl9sYWVuZXJneS5kZXZfYXR0ci5hdHRyLAogCSZpaW9fZGV2X2F0dHJfdmFlbmVyZ3kuZGV2X2F0dHIuYXR0ciwKQEAgLTUzMCw3ICs1MjcsMTAgQEAKIAkuYXR0cnMgPSBhZGU3NzU0X2F0dHJpYnV0ZXMsCiB9OwogCi0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2luZm8gYWRlNzc1NF9pbmZvID0geworCS5hdHRycyA9ICZhZGU3NzU0X2F0dHJpYnV0ZV9ncm91cCwKKwkuZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFLAorfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgYWRlNzc1NF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewpAQCAtNTU3LDE2ICs1NTcsMTYgQEAKIAlzdC0+dXMgPSBzcGk7CiAJbXV0ZXhfaW5pdCgmc3QtPmJ1Zl9sb2NrKTsKIAkvKiBzZXR1cCB0aGUgaW5kdXN0cmlhbGlvIGRyaXZlciBhbGxvY2F0ZWQgZWxlbWVudHMgKi8KLQlzdC0+aW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgpOworCXN0LT5pbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKDApOwogCWlmIChzdC0+aW5kaW9fZGV2ID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9mcmVlX3R4OwogCX0KIAorCXN0LT5pbmRpb19kZXYtPm5hbWUgPSBzcGktPmRldi5kcml2ZXItPm5hbWU7CiAJc3QtPmluZGlvX2Rldi0+ZGV2LnBhcmVudCA9ICZzcGktPmRldjsKLQlzdC0+aW5kaW9fZGV2LT5hdHRycyA9ICZhZGU3NzU0X2F0dHJpYnV0ZV9ncm91cDsKKwlzdC0+aW5kaW9fZGV2LT5pbmZvID0gJmFkZTc3NTRfaW5mbzsKIAlzdC0+aW5kaW9fZGV2LT5kZXZfZGF0YSA9ICh2b2lkICopKHN0KTsKLQlzdC0+aW5kaW9fZGV2LT5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEU7CiAJc3QtPmluZGlvX2Rldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1RfTU9ERTsKIAogCXJldCA9IGlpb19kZXZpY2VfcmVnaXN0ZXIoc3QtPmluZGlvX2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL21ldGVyL2FkZTc3NTguaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbWV0ZXIvYWRlNzc1OC5oCmluZGV4IGM2ZmQ5NGYuLmZkNzRlMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbWV0ZXIvYWRlNzc1OC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbWV0ZXIvYWRlNzc1OC5oCkBAIC0xLDMgKzEsMTEgQEAKKy8qCisgKiBBREU3NzU4IFBvbHkgUGhhc2UgTXVsdGlmdW5jdGlvbiBFbmVyZ3kgTWV0ZXJpbmcgSUMgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIwMTAtMjAxMSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yLgorICovCisKICNpZm5kZWYgX0FERTc3NThfSAogI2RlZmluZSBfQURFNzc1OF9ICiAKQEAgLTgzLDQzICs5MSw1NCBAQAogI2RlZmluZSBBREU3NzU4X01BWF9SWCAgICA0CiAjZGVmaW5lIEFERTc3NThfU1RBUlRVUF9ERUxBWSAxCiAKLSNkZWZpbmUgQURFNzc1OF9TUElfU0xPVwkodTMyKSgzMDAgKiAxMDAwKQotI2RlZmluZSBBREU3NzU4X1NQSV9CVVJTVAkodTMyKSgxMDAwICogMTAwMCkKLSNkZWZpbmUgQURFNzc1OF9TUElfRkFTVAkodTMyKSgyMDAwICogMTAwMCkKKyNkZWZpbmUgQUQ3NzU4X05VTV9XQVZTRUwJNQorI2RlZmluZSBBRDc3NThfTlVNX1BIU0VMCTMKKyNkZWZpbmUgQUQ3NzU4X05VTV9XQVZFU1JDCShBRDc3NThfTlVNX1dBVlNFTCAqIEFENzc1OF9OVU1fUEhTRUwpCisKKyNkZWZpbmUgQUQ3NzU4X1BIQVNFX0EJCTAKKyNkZWZpbmUgQUQ3NzU4X1BIQVNFX0IJCTEKKyNkZWZpbmUgQUQ3NzU4X1BIQVNFX0MJCTIKKyNkZWZpbmUgQUQ3NzU4X0NVUlJFTlQJCTAKKyNkZWZpbmUgQUQ3NzU4X1ZPTFRBR0UJCTEKKyNkZWZpbmUgQUQ3NzU4X0FDVF9QV1IJCTIKKyNkZWZpbmUgQUQ3NzU4X1JFQUNUX1BXUgkzCisjZGVmaW5lIEFENzc1OF9BUFBfUFdSCQk0CisjZGVmaW5lIEFENzc1OF9XVChwLCB3KQkJKCgodykgPDwgMikgfCAocCkpCiAKICNkZWZpbmUgRFJJVkVSX05BTUUJCSJhZGU3NzU4IgogCisKIC8qKgogICogc3RydWN0IGFkZTc3NThfc3RhdGUgLSBkZXZpY2UgaW5zdGFuY2Ugc3BlY2lmaWMgZGF0YQogICogQHVzOgkJCWFjdHVhbCBzcGlfZGV2aWNlCi0gKiBAd29ya190cmlnZ2VyX3RvX3Jpbmc6IGJoIGZvciB0cmlnZ2VyZWQgZXZlbnQgaGFuZGxpbmcKLSAqIEBpbnRlcjoJCXVzZWQgdG8gY2hlY2sgaWYgbmV3IGludGVycnVwdCBoYXMgYmVlbiB0cmlnZ2VyZWQKLSAqIEBsYXN0X3RpbWVzdGFtcDoJcGFzc2luZyB0aW1lc3RhbXAgZnJvbSB0aCB0byBiaCBvZiBpbnRlcnJ1cHQgaGFuZGxlcgotICogQGluZGlvX2RldjoJCWluZHVzdHJpYWwgSS9PIGRldmljZSBzdHJ1Y3R1cmUKICAqIEB0cmlnOgkJZGF0YSByZWFkeSB0cmlnZ2VyIHJlZ2lzdGVyZWQgd2l0aCBpaW8KICAqIEB0eDoJCQl0cmFuc21pdCBidWZmZXIKICAqIEByeDoJCQlyZWNlaXZlIGJ1ZmZlcgogICogQGJ1Zl9sb2NrOgkJbXV0ZXggdG8gcHJvdGVjdCB0eCBhbmQgcngKICAqKi8KIHN0cnVjdCBhZGU3NzU4X3N0YXRlIHsKLQlzdHJ1Y3Qgc3BpX2RldmljZQkJKnVzOwotCXN0cnVjdCB3b3JrX3N0cnVjdAkJd29ya190cmlnZ2VyX3RvX3Jpbmc7Ci0JczY0CQkJCWxhc3RfdGltZXN0YW1wOwotCXN0cnVjdCBpaW9fZGV2CQkJKmluZGlvX2RldjsKLQlzdHJ1Y3QgaWlvX3RyaWdnZXIJCSp0cmlnOwotCXU4CQkJCSp0eDsKLQl1OAkJCQkqcng7Ci0Jc3RydWN0IG11dGV4CQkJYnVmX2xvY2s7CisJc3RydWN0IHNwaV9kZXZpY2UJKnVzOworCXN0cnVjdCBpaW9fdHJpZ2dlcgkqdHJpZzsKKwl1OAkJCSp0eDsKKwl1OAkJCSpyeDsKKwlzdHJ1Y3QgbXV0ZXgJCWJ1Zl9sb2NrOworCXUzMgkJCWF2YWlsYWJsZV9zY2FuX21hc2tzW0FENzc1OF9OVU1fV0FWRVNSQ107CisJc3RydWN0IGlpb19jaGFuX3NwZWMJKmFkZTc3NThfcmluZ19jaGFubmVsczsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyCXJpbmdfeGZlcls0XTsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UJcmluZ19tc2c7CisJLyoKKwkgKiBETUEgKHRodXMgY2FjaGUgY29oZXJlbmN5IG1haW50ZW5hbmNlKSByZXF1aXJlcyB0aGUKKwkgKiB0cmFuc2ZlciBidWZmZXJzIHRvIGxpdmUgaW4gdGhlaXIgb3duIGNhY2hlIGxpbmVzLgorCSAqLworCXVuc2lnbmVkIGNoYXIJCXJ4X2J1Zls4XSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisJdW5zaWduZWQgY2hhcgkJdHhfYnVmWzhdOworCiB9OwogI2lmZGVmIENPTkZJR19JSU9fUklOR19CVUZGRVIKIC8qIEF0IHRoZSBtb21lbnQgdHJpZ2dlcnMgYXJlIG9ubHkgdXNlZCBmb3IgcmluZyBidWZmZXIKICAqIGZpbGxpbmcuIFRoaXMgbWF5IGNoYW5nZSEKICAqLwogCi1lbnVtIGFkZTc3NThfc2NhbiB7Ci0JQURFNzc1OF9TQ0FOX1dGT1JNLAotfTsKLQogdm9pZCBhZGU3NzU4X3JlbW92ZV90cmlnZ2VyKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwogaW50IGFkZTc3NThfcHJvYmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKIApAQCAtMTM0LDYgKzE1MywxMiBAQAogaW50IGFkZTc3NThfaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpOwogdm9pZCBhZGU3NzU4X3VuaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpOwogaW50IGFkZTc3NThfc2V0X2lycShzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgZW5hYmxlKTsKKworaW50IGFkZTc3NThfc3BpX3dyaXRlX3JlZ184KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJdTggcmVnX2FkZHJlc3MsIHU4IHZhbCk7CitpbnQgYWRlNzc1OF9zcGlfcmVhZF9yZWdfOChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXU4IHJlZ19hZGRyZXNzLCB1OCAqdmFsKTsKKwogI2Vsc2UgLyogQ09ORklHX0lJT19SSU5HX0JVRkZFUiAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgYWRlNzc1OF9yZW1vdmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQpAQCAtMTQ0LDE0ICsxNjksNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHNzaXplX3QKLWFkZTc3NThfcmVhZF9kYXRhX2Zyb21fcmluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljaGFyICpidWYpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgYWRlNzc1OF9jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQogewogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9hZGU3NzU4X2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbWV0ZXIvYWRlNzc1OF9jb3JlLmMKaW5kZXggYjc2MzRjYi4uMjk5Yjk1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9hZGU3NzU4X2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL21ldGVyL2FkZTc3NThfY29yZS5jCkBAIC0xLDkgKzEsOSBAQAogLyoKLSAqIEFERTc3NTggUG9seXBoYXNlIE11bHRpZnVuY3Rpb24gRW5lcmd5IE1ldGVyaW5nIElDIERyaXZlcgorICogQURFNzc1OCBQb2x5IFBoYXNlIE11bHRpZnVuY3Rpb24gRW5lcmd5IE1ldGVyaW5nIElDIGRyaXZlcgogICoKLSAqIENvcHlyaWdodCAyMDEwIEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDEwLTIwMTEgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMi4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CkBAIC0yMCw2ICsyMCw3IEBACiAKICNpbmNsdWRlICIuLi9paW8uaCIKICNpbmNsdWRlICIuLi9zeXNmcy5oIgorI2luY2x1ZGUgIi4uL3JpbmdfZ2VuZXJpYy5oIgogI2luY2x1ZGUgIm1ldGVyLmgiCiAjaW5jbHVkZSAiYWRlNzc1OC5oIgogCkBAIC0yOSw3ICszMCw3IEBACiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGFkZTc3NThfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOworCXN0cnVjdCBhZGU3NzU4X3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CiAKIAltdXRleF9sb2NrKCZzdC0+YnVmX2xvY2spOwogCXN0LT50eFswXSA9IEFERTc3NThfV1JJVEVfUkVHKHJlZ19hZGRyZXNzKTsKQEAgLTQ4LDcgKzQ5LDcgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBzcGlfbWVzc2FnZSBtc2c7CiAJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBhZGU3NzU4X3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKKwlzdHJ1Y3QgYWRlNzc1OF9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwogCXN0cnVjdCBzcGlfdHJhbnNmZXIgeGZlcnNbXSA9IHsKIAkJewogCQkJLnR4X2J1ZiA9IHN0LT50eCwKQEAgLTc3LDcgKzc4LDcgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBzcGlfbWVzc2FnZSBtc2c7CiAJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBhZGU3NzU4X3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKKwlzdHJ1Y3QgYWRlNzc1OF9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwogCXN0cnVjdCBzcGlfdHJhbnNmZXIgeGZlcnNbXSA9IHsKIAkJewogCQkJLnR4X2J1ZiA9IHN0LT50eCwKQEAgLTEwMCwyMCArMTAxLDI2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBhZGU3NzU4X3NwaV9yZWFkX3JlZ184KHN0cnVjdCBkZXZpY2UgKmRldiwKK2ludCBhZGU3NzU4X3NwaV9yZWFkX3JlZ184KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJdTggcmVnX2FkZHJlc3MsCiAJCXU4ICp2YWwpCiB7CiAJc3RydWN0IHNwaV9tZXNzYWdlIG1zZzsKIAlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGFkZTc3NThfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOworCXN0cnVjdCBhZGU3NzU4X3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CiAJaW50IHJldDsKIAlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHhmZXJzW10gPSB7CiAJCXsKIAkJCS50eF9idWYgPSBzdC0+dHgsCisJCQkuYml0c19wZXJfd29yZCA9IDgsCisJCQkubGVuID0gMSwKKwkJCS5kZWxheV91c2VjcyA9IDQsCisJCX0sCisJCXsKKwkJCS50eF9idWYgPSAmc3QtPnR4WzFdLAogCQkJLnJ4X2J1ZiA9IHN0LT5yeCwKIAkJCS5iaXRzX3Blcl93b3JkID0gOCwKLQkJCS5sZW4gPSAyLAorCQkJLmxlbiA9IDEsCiAJCX0sCiAJfTsKIApAQCAtMTIyLDE0ICsxMjksMTUgQEAKIAlzdC0+dHhbMV0gPSAwOwogCiAJc3BpX21lc3NhZ2VfaW5pdCgmbXNnKTsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4ZmVycywgJm1zZyk7CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnhmZXJzWzBdLCAmbXNnKTsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlcnNbMV0sICZtc2cpOwogCXJldCA9IHNwaV9zeW5jKHN0LT51cywgJm1zZyk7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZzdC0+dXMtPmRldiwgInByb2JsZW0gd2hlbiByZWFkaW5nIDggYml0IHJlZ2lzdGVyIDB4JTAyWCIsCiAJCQkJcmVnX2FkZHJlc3MpOwogCQlnb3RvIGVycm9yX3JldDsKIAl9Ci0JKnZhbCA9IHN0LT5yeFsxXTsKKwkqdmFsID0gc3QtPnJ4WzBdOwogCiBlcnJvcl9yZXQ6CiAJbXV0ZXhfdW5sb2NrKCZzdC0+YnVmX2xvY2spOwpAQCAtMTQyLDMxICsxNTAsNDAgQEAKIHsKIAlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbXNnOwogCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgYWRlNzc1OF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CisJc3RydWN0IGFkZTc3NThfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKIAlpbnQgcmV0OwogCXN0cnVjdCBzcGlfdHJhbnNmZXIgeGZlcnNbXSA9IHsKIAkJewogCQkJLnR4X2J1ZiA9IHN0LT50eCwKKwkJCS5iaXRzX3Blcl93b3JkID0gOCwKKwkJCS5sZW4gPSAxLAorCQkJLmRlbGF5X3VzZWNzID0gNCwKKwkJfSwKKwkJeworCQkJLnR4X2J1ZiA9ICZzdC0+dHhbMV0sCiAJCQkucnhfYnVmID0gc3QtPnJ4LAogCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAotCQkJLmxlbiA9IDMsCisJCQkubGVuID0gMiwKIAkJfSwKIAl9OwogCisKIAltdXRleF9sb2NrKCZzdC0+YnVmX2xvY2spOwogCXN0LT50eFswXSA9IEFERTc3NThfUkVBRF9SRUcocmVnX2FkZHJlc3MpOwogCXN0LT50eFsxXSA9IDA7CiAJc3QtPnR4WzJdID0gMDsKIAogCXNwaV9tZXNzYWdlX2luaXQoJm1zZyk7Ci0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoeGZlcnMsICZtc2cpOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ4ZmVyc1swXSwgJm1zZyk7CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnhmZXJzWzFdLCAmbXNnKTsKIAlyZXQgPSBzcGlfc3luYyhzdC0+dXMsICZtc2cpOwogCWlmIChyZXQpIHsKIAkJZGV2X2Vycigmc3QtPnVzLT5kZXYsICJwcm9ibGVtIHdoZW4gcmVhZGluZyAxNiBiaXQgcmVnaXN0ZXIgMHglMDJYIiwKIAkJCQlyZWdfYWRkcmVzcyk7CiAJCWdvdG8gZXJyb3JfcmV0OwogCX0KLQkqdmFsID0gKHN0LT5yeFsxXSA8PCA4KSB8IHN0LT5yeFsyXTsKKworCSp2YWwgPSAoc3QtPnJ4WzBdIDw8IDgpIHwgc3QtPnJ4WzFdOwogCiBlcnJvcl9yZXQ6CiAJbXV0ZXhfdW5sb2NrKCZzdC0+YnVmX2xvY2spOwpAQCAtMTc5LDE0ICsxOTYsMjAgQEAKIHsKIAlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbXNnOwogCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgYWRlNzc1OF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CisJc3RydWN0IGFkZTc3NThfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKIAlpbnQgcmV0OwogCXN0cnVjdCBzcGlfdHJhbnNmZXIgeGZlcnNbXSA9IHsKIAkJewogCQkJLnR4X2J1ZiA9IHN0LT50eCwKKwkJCS5iaXRzX3Blcl93b3JkID0gOCwKKwkJCS5sZW4gPSAxLAorCQkJLmRlbGF5X3VzZWNzID0gNCwKKwkJfSwKKwkJeworCQkJLnR4X2J1ZiA9ICZzdC0+dHhbMV0sCiAJCQkucnhfYnVmID0gc3QtPnJ4LAogCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAotCQkJLmxlbiA9IDQsCisJCQkubGVuID0gMywKIAkJfSwKIAl9OwogCkBAIC0xOTcsMTQgKzIyMCwxNSBAQAogCXN0LT50eFszXSA9IDA7CiAKIAlzcGlfbWVzc2FnZV9pbml0KCZtc2cpOwotCXNwaV9tZXNzYWdlX2FkZF90YWlsKHhmZXJzLCAmbXNnKTsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlcnNbMF0sICZtc2cpOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ4ZmVyc1sxXSwgJm1zZyk7CiAJcmV0ID0gc3BpX3N5bmMoc3QtPnVzLCAmbXNnKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJnN0LT51cy0+ZGV2LCAicHJvYmxlbSB3aGVuIHJlYWRpbmcgMjQgYml0IHJlZ2lzdGVyIDB4JTAyWCIsCiAJCQkJcmVnX2FkZHJlc3MpOwogCQlnb3RvIGVycm9yX3JldDsKIAl9Ci0JKnZhbCA9IChzdC0+cnhbMV0gPDwgMTYpIHwgKHN0LT5yeFsyXSA8PCA4KSB8IHN0LT5yeFszXTsKKwkqdmFsID0gKHN0LT5yeFswXSA8PCAxNikgfCAoc3QtPnJ4WzFdIDw8IDgpIHwgc3QtPnJ4WzJdOwogCiBlcnJvcl9yZXQ6CiAJbXV0ZXhfdW5sb2NrKCZzdC0+YnVmX2xvY2spOwpAQCAtMjkyLDcgKzMxNiw3IEBACiAJcmV0dXJuIHJldCA/IHJldCA6IGxlbjsKIH0KIAotaW50IGFkZTc3NThfcmVzZXQoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBhZGU3NzU4X3Jlc2V0KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlpbnQgcmV0OwogCXU4IHZhbDsKQEAgLTMxOSw3ICszNDMsNyBAQAogCWNhc2UgJ1knOgogCQlyZXR1cm4gYWRlNzc1OF9yZXNldChkZXYpOwogCX0KLQlyZXR1cm4gLTE7CisJcmV0dXJuIGxlbjsKIH0KIAogc3RhdGljIElJT19ERVZfQVRUUl9WUEVBSyhTX0lXVVNSIHwgU19JUlVHTywKQEAgLTQ2MSwxMyArNDg1LDE0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBhZGU3NzU4X2luaXRpYWxfc2V0dXAoc3RydWN0IGFkZTc3NThfc3RhdGUgKnN0KQorc3RhdGljIGludCBhZGU3NzU4X2luaXRpYWxfc2V0dXAoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKKwlzdHJ1Y3QgYWRlNzc1OF9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpbmRpb19kZXYtPmRldjsKIAlpbnQgcmV0OwotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZzdC0+aW5kaW9fZGV2LT5kZXY7CiAKIAkvKiB1c2UgbG93IHNwaSBzcGVlZCBmb3IgaW5pdCAqLwotCXN0LT51cy0+bW9kZSA9IFNQSV9NT0RFXzM7CisJc3QtPnVzLT5tb2RlID0gU1BJX01PREVfMTsKIAlzcGlfc2V0dXAoc3QtPnVzKTsKIAogCS8qIERpc2FibGUgSVJRICovCkBAIC01MTAsNyArNTM1LDYgQEAKIAkJc2l6ZV90IGxlbikKIHsKIAlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGFkZTc3NThfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOwogCXVuc2lnbmVkIGxvbmcgdmFsOwogCWludCByZXQ7CiAJdTggcmVnLCB0OwpAQCAtNTIxLDE0ICs1NDUsMjMgQEAKIAogCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOwogCi0JdCA9ICgyNjA0MCAvIHZhbCk7Ci0JaWYgKHQgPiAwKQotCQl0ID4+PSAxOwotCi0JaWYgKHQgPiAxKQotCQlzdC0+dXMtPm1heF9zcGVlZF9oeiA9IEFERTc3NThfU1BJX1NMT1c7Ci0JZWxzZQotCQlzdC0+dXMtPm1heF9zcGVlZF9oeiA9IEFERTc3NThfU1BJX0ZBU1Q7CisJc3dpdGNoICh2YWwpIHsKKwljYXNlIDI2MDQwOgorCQl0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSAxMzAyMDoKKwkJdCA9IDE7CisJCWJyZWFrOworCWNhc2UgNjUxMDoKKwkJdCA9IDI7CisJCWJyZWFrOworCWNhc2UgMzI1NToKKwkJdCA9IDM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KIAogCXJldCA9IGFkZTc3NThfc3BpX3JlYWRfcmVnXzgoZGV2LAogCQkJQURFNzc1OF9XQVZNT0RFLApAQCAtNTQ5LDYzICs1ODIsNiBAQAogCXJldHVybiByZXQgPyByZXQgOiBsZW47CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGFkZTc3NThfcmVhZF93YXZlZm9ybV90eXBlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNoYXIgKmJ1ZikKLXsKLQlpbnQgcmV0LCBsZW4gPSAwOwotCXU4IHQ7Ci0JcmV0ID0gYWRlNzc1OF9zcGlfcmVhZF9yZWdfOChkZXYsCi0JCQlBREU3NzU4X1dBVk1PREUsCi0JCQkmdCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXQgPSAodCA+PiAyKSAmIDB4NzsKLQotCWxlbiA9IHNwcmludGYoYnVmLCAiJWRcbiIsIHQpOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIHNzaXplX3QgYWRlNzc1OF93cml0ZV93YXZlZm9ybV90eXBlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNvbnN0IGNoYXIgKmJ1ZiwKLQkJc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JdW5zaWduZWQgbG9uZyB2YWw7Ci0JaW50IHJldDsKLQl1OCByZWc7Ci0KLQlyZXQgPSBzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ2YWwpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAodmFsID4gNCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQltdXRleF9sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKLQotCXJldCA9IGFkZTc3NThfc3BpX3JlYWRfcmVnXzgoZGV2LAotCQkJQURFNzc1OF9XQVZNT0RFLAotCQkJJnJlZyk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KLQlyZWcgJj0gfig3IDw8IDIpOwotCXJlZyB8PSB2YWwgPDwgMjsKLQotCXJldCA9IGFkZTc3NThfc3BpX3dyaXRlX3JlZ184KGRldiwKLQkJCUFERTc3NThfV0FWTU9ERSwKLQkJCXJlZyk7Ci0KLW91dDoKLQltdXRleF91bmxvY2soJmluZGlvX2Rldi0+bWxvY2spOwotCi0JcmV0dXJuIHJldCA/IHJldCA6IGxlbjsKLX0KLQogc3RhdGljIElJT19ERVZfQVRUUl9URU1QX1JBVyhhZGU3NzU4X3JlYWRfOGJpdCk7CiBzdGF0aWMgSUlPX0NPTlNUX0FUVFIodGVtcF9vZmZzZXQsICIxMjkgQyIpOwogc3RhdGljIElJT19DT05TVF9BVFRSKHRlbXBfc2NhbGUsICI0IEMiKTsKQEAgLTYzMyw0MiArNjA5LDE3IEBACiAJCWFkZTc3NThfcmVhZF9mcmVxdWVuY3ksCiAJCWFkZTc3NThfd3JpdGVfZnJlcXVlbmN5KTsKIAotLyoqCi0gKiBJSU9fREVWX0FUVFJfV0FWRUZPUk1fVFlQRSAtIHNldCB0aGUgdHlwZSBvZiB3YXZlZm9ybS4KLSAqIEBfbW9kZTogc3lzZnMgZmlsZSBtb2RlL3Blcm1pc3Npb25zCi0gKiBAX3Nob3c6IG91dHB1dCBtZXRob2QgZm9yIHRoZSBhdHRyaWJ1dGUKLSAqIEBfc3RvcmU6IGlucHV0IG1ldGhvZCBmb3IgdGhlIGF0dHJpYnV0ZQotICoqLwotI2RlZmluZSBJSU9fREVWX0FUVFJfV0FWRUZPUk1fVFlQRShfbW9kZSwgX3Nob3csIF9zdG9yZSkJCQlcCi0JSUlPX0RFVklDRV9BVFRSKHdhdmVmb3JtX3R5cGUsIF9tb2RlLCBfc2hvdywgX3N0b3JlLCAwKQotCi1zdGF0aWMgSUlPX0RFVl9BVFRSX1dBVkVGT1JNX1RZUEUoU19JV1VTUiB8IFNfSVJVR08sCi0JCWFkZTc3NThfcmVhZF93YXZlZm9ybV90eXBlLAotCQlhZGU3NzU4X3dyaXRlX3dhdmVmb3JtX3R5cGUpOwotCiBzdGF0aWMgSUlPX0RFVl9BVFRSX1JFU0VUKGFkZTc3NThfd3JpdGVfcmVzZXQpOwogCi1zdGF0aWMgSUlPX0NPTlNUX0FUVFJfU0FNUF9GUkVRX0FWQUlMKCIyNjAwMCAxMzAwMCA2NTAwMCAzMzAwMCIpOwotCi1zdGF0aWMgSUlPX0NPTlNUX0FUVFIobmFtZSwgImFkZTc3NTgiKTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkZTc3NThfZXZlbnRfYXR0cmlidXRlc1tdID0gewotCU5VTEwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFkZTc3NThfZXZlbnRfYXR0cmlidXRlX2dyb3VwID0gewotCS5hdHRycyA9IGFkZTc3NThfZXZlbnRfYXR0cmlidXRlcywKLX07CitzdGF0aWMgSUlPX0NPTlNUX0FUVFJfU0FNUF9GUkVRX0FWQUlMKCIyNjA0MCAxMzAyMCA2NTEwIDMyNTUiKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkZTc3NThfYXR0cmlidXRlc1tdID0gewogCSZpaW9fZGV2X2F0dHJfdGVtcF9yYXcuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2NvbnN0X2F0dHJfdGVtcF9vZmZzZXQuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2NvbnN0X2F0dHJfdGVtcF9zY2FsZS5kZXZfYXR0ci5hdHRyLAogCSZpaW9fZGV2X2F0dHJfc2FtcGxpbmdfZnJlcXVlbmN5LmRldl9hdHRyLmF0dHIsCi0JJmlpb19kZXZfYXR0cl93YXZlZm9ybV90eXBlLmRldl9hdHRyLmF0dHIsCiAJJmlpb19jb25zdF9hdHRyX3NhbXBsaW5nX2ZyZXF1ZW5jeV9hdmFpbGFibGUuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX3Jlc2V0LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX25hbWUuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX2F3YXR0aHIuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX2J3YXR0aHIuZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX2N3YXR0aHIuZGV2X2F0dHIuYXR0ciwKQEAgLTcxMCwyNCArNjYxLDk1IEBACiAJLmF0dHJzID0gYWRlNzc1OF9hdHRyaWJ1dGVzLAogfTsKIAorc3RhdGljIHN0cnVjdCBpaW9fY2hhbl9zcGVjIGFkZTc3NThfY2hhbm5lbHNbXSA9IHsKKwlJSU9fQ0hBTihJSU9fSU4sIDAsIDEsIDAsICJyYXciLCAwLCAwLAorCQkoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCUFENzc1OF9XVChBRDc3NThfUEhBU0VfQSwgQUQ3NzU4X1ZPTFRBR0UpLAorCQkwLCBJSU9fU1QoJ3MnLCAyNCwgMzIsIDApLCAwKSwKKwlJSU9fQ0hBTihJSU9fQ1VSUkVOVCwgMCwgMSwgMCwgInJhdyIsIDAsIDAsCisJCSgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJQUQ3NzU4X1dUKEFENzc1OF9QSEFTRV9BLCBBRDc3NThfQ1VSUkVOVCksCisJCTEsIElJT19TVCgncycsIDI0LCAzMiwgMCksIDApLAorCUlJT19DSEFOKElJT19QT1dFUiwgMCwgMSwgMCwgImFwcGFyZW50X3JhdyIsIDAsIDAsCisJCSgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJQUQ3NzU4X1dUKEFENzc1OF9QSEFTRV9BLCBBRDc3NThfQVBQX1BXUiksCisJCTIsIElJT19TVCgncycsIDI0LCAzMiwgMCksIDApLAorCUlJT19DSEFOKElJT19QT1dFUiwgMCwgMSwgMCwgImFjdGl2ZV9yYXciLCAwLCAwLAorCQkoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCUFENzc1OF9XVChBRDc3NThfUEhBU0VfQSwgQUQ3NzU4X0FDVF9QV1IpLAorCQkzLCBJSU9fU1QoJ3MnLCAyNCwgMzIsIDApLCAwKSwKKwlJSU9fQ0hBTihJSU9fUE9XRVIsIDAsIDEsIDAsICJyZWFjdGl2ZV9yYXciLCAwLCAwLAorCQkoMSA8PCBJSU9fQ0hBTl9JTkZPX1NDQUxFX1NIQVJFRCksCisJCUFENzc1OF9XVChBRDc3NThfUEhBU0VfQSwgQUQ3NzU4X1JFQUNUX1BXUiksCisJCTQsIElJT19TVCgncycsIDI0LCAzMiwgMCksIDApLAorCUlJT19DSEFOKElJT19JTiwgMCwgMSwgMCwgInJhdyIsIDEsIDAsCisJCSgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJQUQ3NzU4X1dUKEFENzc1OF9QSEFTRV9CLCBBRDc3NThfVk9MVEFHRSksCisJCTUsIElJT19TVCgncycsIDI0LCAzMiwgMCksIDApLAorCUlJT19DSEFOKElJT19DVVJSRU5ULCAwLCAxLCAwLCAicmF3IiwgMSwgMCwKKwkJKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQlBRDc3NThfV1QoQUQ3NzU4X1BIQVNFX0IsIEFENzc1OF9DVVJSRU5UKSwKKwkJNiwgSUlPX1NUKCdzJywgMjQsIDMyLCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX1BPV0VSLCAwLCAxLCAwLCAiYXBwYXJlbnRfcmF3IiwgMSwgMCwKKwkJKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQlBRDc3NThfV1QoQUQ3NzU4X1BIQVNFX0IsIEFENzc1OF9BUFBfUFdSKSwKKwkJNywgSUlPX1NUKCdzJywgMjQsIDMyLCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX1BPV0VSLCAwLCAxLCAwLCAiYWN0aXZlX3JhdyIsIDEsIDAsCisJCSgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJQUQ3NzU4X1dUKEFENzc1OF9QSEFTRV9CLCBBRDc3NThfQUNUX1BXUiksCisJCTgsIElJT19TVCgncycsIDI0LCAzMiwgMCksIDApLAorCUlJT19DSEFOKElJT19QT1dFUiwgMCwgMSwgMCwgInJlYWN0aXZlX3JhdyIsIDEsIDAsCisJCSgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJQUQ3NzU4X1dUKEFENzc1OF9QSEFTRV9CLCBBRDc3NThfUkVBQ1RfUFdSKSwKKwkJOSwgSUlPX1NUKCdzJywgMjQsIDMyLCAwKSwgMCksCisJSUlPX0NIQU4oSUlPX0lOLCAwLCAxLCAwLCAicmF3IiwgMiwgMCwKKwkJKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQlBRDc3NThfV1QoQUQ3NzU4X1BIQVNFX0MsIEFENzc1OF9WT0xUQUdFKSwKKwkJMTAsIElJT19TVCgncycsIDI0LCAzMiwgMCksIDApLAorCUlJT19DSEFOKElJT19DVVJSRU5ULCAwLCAxLCAwLCAicmF3IiwgMiwgMCwKKwkJKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQlBRDc3NThfV1QoQUQ3NzU4X1BIQVNFX0MsIEFENzc1OF9DVVJSRU5UKSwKKwkJMTEsIElJT19TVCgncycsIDI0LCAzMiwgMCksIDApLAorCUlJT19DSEFOKElJT19QT1dFUiwgMCwgMSwgMCwgImFwcGFyZW50X3JhdyIsIDIsIDAsCisJCSgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJQUQ3NzU4X1dUKEFENzc1OF9QSEFTRV9DLCBBRDc3NThfQVBQX1BXUiksCisJCTEyLCBJSU9fU1QoJ3MnLCAyNCwgMzIsIDApLCAwKSwKKwlJSU9fQ0hBTihJSU9fUE9XRVIsIDAsIDEsIDAsICJhY3RpdmVfcmF3IiwgMiwgMCwKKwkJKDEgPDwgSUlPX0NIQU5fSU5GT19TQ0FMRV9TSEFSRUQpLAorCQlBRDc3NThfV1QoQUQ3NzU4X1BIQVNFX0MsIEFENzc1OF9BQ1RfUFdSKSwKKwkJMTMsIElJT19TVCgncycsIDI0LCAzMiwgMCksIDApLAorCUlJT19DSEFOKElJT19QT1dFUiwgMCwgMSwgMCwgInJlYWN0aXZlX3JhdyIsIDIsIDAsCisJCSgxIDw8IElJT19DSEFOX0lORk9fU0NBTEVfU0hBUkVEKSwKKwkJQUQ3NzU4X1dUKEFENzc1OF9QSEFTRV9DLCBBRDc3NThfUkVBQ1RfUFdSKSwKKwkJMTQsIElJT19TVCgncycsIDI0LCAzMiwgMCksIDApLAorCUlJT19DSEFOX1NPRlRfVElNRVNUQU1QKDE1KSwKK307CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2luZm8gYWRlNzc1OF9pbmZvID0geworCS5hdHRycyA9ICZhZGU3NzU4X2F0dHJpYnV0ZV9ncm91cCwKKwkuZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFLAorfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgYWRlNzc1OF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewotCWludCByZXQsIHJlZ2RvbmUgPSAwOwotCXN0cnVjdCBhZGU3NzU4X3N0YXRlICpzdCA9IGt6YWxsb2Moc2l6ZW9mICpzdCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzdCkgewotCQlyZXQgPSAgLUVOT01FTTsKKwlpbnQgaSwgcmV0LCByZWdkb25lID0gMDsKKwlzdHJ1Y3QgYWRlNzc1OF9zdGF0ZSAqc3Q7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2Uoc2l6ZW9mKCpzdCkpOworCisJaWYgKGluZGlvX2RldiA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3JfcmV0OwogCX0KKworCXN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKIAkvKiB0aGlzIGlzIG9ubHkgdXNlZCBmb3IgcmVtb3ZhbCBwdXJwb3NlcyAqLwotCXNwaV9zZXRfZHJ2ZGF0YShzcGksIHN0KTsKKwlzcGlfc2V0X2RydmRhdGEoc3BpLCBpbmRpb19kZXYpOwogCiAJLyogQWxsb2NhdGUgdGhlIGNvbW1zIGJ1ZmZlcnMgKi8KIAlzdC0+cnggPSBremFsbG9jKHNpemVvZigqc3QtPnJ4KSpBREU3NzU4X01BWF9SWCwgR0ZQX0tFUk5FTCk7CiAJaWYgKHN0LT5yeCA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyb3JfZnJlZV9zdDsKKwkJZ290byBlcnJvcl9mcmVlX2RldjsKIAl9CiAJc3QtPnR4ID0ga3phbGxvYyhzaXplb2YoKnN0LT50eCkqQURFNzc1OF9NQVhfVFgsIEdGUF9LRVJORUwpOwogCWlmIChzdC0+dHggPT0gTlVMTCkgewpAQCAtNzM1LDExMSArNzU3LDk2IEBACiAJCWdvdG8gZXJyb3JfZnJlZV9yeDsKIAl9CiAJc3QtPnVzID0gc3BpOworCXN0LT5hZGU3NzU4X3JpbmdfY2hhbm5lbHMgPSAmYWRlNzc1OF9jaGFubmVsc1swXTsKIAltdXRleF9pbml0KCZzdC0+YnVmX2xvY2spOwotCS8qIHNldHVwIHRoZSBpbmR1c3RyaWFsaW8gZHJpdmVyIGFsbG9jYXRlZCBlbGVtZW50cyAqLwotCXN0LT5pbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKHN0LT5pbmRpb19kZXYgPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yX2ZyZWVfdHg7Ci0JfQogCi0Jc3QtPmluZGlvX2Rldi0+ZGV2LnBhcmVudCA9ICZzcGktPmRldjsKLQlzdC0+aW5kaW9fZGV2LT5udW1faW50ZXJydXB0X2xpbmVzID0gMTsKLQlzdC0+aW5kaW9fZGV2LT5ldmVudF9hdHRycyA9ICZhZGU3NzU4X2V2ZW50X2F0dHJpYnV0ZV9ncm91cDsKLQlzdC0+aW5kaW9fZGV2LT5hdHRycyA9ICZhZGU3NzU4X2F0dHJpYnV0ZV9ncm91cDsKLQlzdC0+aW5kaW9fZGV2LT5kZXZfZGF0YSA9ICh2b2lkICopKHN0KTsKLQlzdC0+aW5kaW9fZGV2LT5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEU7Ci0Jc3QtPmluZGlvX2Rldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1RfTU9ERTsKKwlpbmRpb19kZXYtPm5hbWUgPSBzcGktPmRldi5kcml2ZXItPm5hbWU7CisJaW5kaW9fZGV2LT5kZXYucGFyZW50ID0gJnNwaS0+ZGV2OworCWluZGlvX2Rldi0+aW5mbyA9ICZhZGU3NzU4X2luZm87CisJaW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOwogCi0JcmV0ID0gYWRlNzc1OF9jb25maWd1cmVfcmluZyhzdC0+aW5kaW9fZGV2KTsKKwlmb3IgKGkgPSAwOyBpIDwgQUQ3NzU4X05VTV9XQVZFU1JDOyBpKyspCisJCXN0LT5hdmFpbGFibGVfc2Nhbl9tYXNrc1tpXSA9IDEgPDwgaTsKKworCWluZGlvX2Rldi0+YXZhaWxhYmxlX3NjYW5fbWFza3MgPSBzdC0+YXZhaWxhYmxlX3NjYW5fbWFza3M7CisKKwlyZXQgPSBhZGU3NzU4X2NvbmZpZ3VyZV9yaW5nKGluZGlvX2Rldik7CiAJaWYgKHJldCkKLQkJZ290byBlcnJvcl9mcmVlX2RldjsKKwkJZ290byBlcnJvcl9mcmVlX3R4OwogCi0JcmV0ID0gaWlvX2RldmljZV9yZWdpc3RlcihzdC0+aW5kaW9fZGV2KTsKKwlyZXQgPSBpaW9fZGV2aWNlX3JlZ2lzdGVyKGluZGlvX2Rldik7CiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl91bnJlZ19yaW5nX2Z1bmNzOwogCXJlZ2RvbmUgPSAxOwogCi0JcmV0ID0gYWRlNzc1OF9pbml0aWFsaXplX3Jpbmcoc3QtPmluZGlvX2Rldi0+cmluZyk7CisJcmV0ID0gaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyX2V4KGluZGlvX2Rldi0+cmluZywgMCwKKwkJCQkJICAmYWRlNzc1OF9jaGFubmVsc1swXSwKKwkJCQkJICBBUlJBWV9TSVpFKGFkZTc3NThfY2hhbm5lbHMpKTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGluaXRpYWxpemUgdGhlIHJpbmdcbiIpOworCQlkZXZfZXJyKCZzcGktPmRldiwgImZhaWxlZCB0byBpbml0aWFsaXplIHRoZSByaW5nXG4iKTsKIAkJZ290byBlcnJvcl91bnJlZ19yaW5nX2Z1bmNzOwogCX0KIAotCWlmIChzcGktPmlycSkgewotCQlyZXQgPSBpaW9fcmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoc3BpLT5pcnEsCi0JCQkJc3QtPmluZGlvX2RldiwKLQkJCQkwLAotCQkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HLAotCQkJCSJhZGU3NzU4Iik7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIGVycm9yX3VuaW5pdGlhbGl6ZV9yaW5nOworCS8qIEdldCB0aGUgZGV2aWNlIGludG8gYSBzYW5lIGluaXRpYWwgc3RhdGUgKi8KKwlyZXQgPSBhZGU3NzU4X2luaXRpYWxfc2V0dXAoaW5kaW9fZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yX3VuaW5pdGlhbGl6ZV9yaW5nOwogCi0JCXJldCA9IGFkZTc3NThfcHJvYmVfdHJpZ2dlcihzdC0+aW5kaW9fZGV2KTsKKwlpZiAoc3BpLT5pcnEpIHsKKwkJcmV0ID0gYWRlNzc1OF9wcm9iZV90cmlnZ2VyKGluZGlvX2Rldik7CiAJCWlmIChyZXQpCi0JCQlnb3RvIGVycm9yX3VucmVnaXN0ZXJfbGluZTsKKwkJCWdvdG8gZXJyb3JfcmVtb3ZlX3RyaWdnZXI7CiAJfQogCi0JLyogR2V0IHRoZSBkZXZpY2UgaW50byBhIHNhbmUgaW5pdGlhbCBzdGF0ZSAqLwotCXJldCA9IGFkZTc3NThfaW5pdGlhbF9zZXR1cChzdCk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJvcl9yZW1vdmVfdHJpZ2dlcjsKIAlyZXR1cm4gMDsKIAogZXJyb3JfcmVtb3ZlX3RyaWdnZXI6Ci0JaWYgKHN0LT5pbmRpb19kZXYtPm1vZGVzICYgSU5ESU9fUklOR19UUklHR0VSRUQpCi0JCWFkZTc3NThfcmVtb3ZlX3RyaWdnZXIoc3QtPmluZGlvX2Rldik7Ci1lcnJvcl91bnJlZ2lzdGVyX2xpbmU6Ci0JaWYgKHN0LT5pbmRpb19kZXYtPm1vZGVzICYgSU5ESU9fUklOR19UUklHR0VSRUQpCi0JCWlpb191bnJlZ2lzdGVyX2ludGVycnVwdF9saW5lKHN0LT5pbmRpb19kZXYsIDApOworCWlmIChpbmRpb19kZXYtPm1vZGVzICYgSU5ESU9fUklOR19UUklHR0VSRUQpCisJCWFkZTc3NThfcmVtb3ZlX3RyaWdnZXIoaW5kaW9fZGV2KTsKIGVycm9yX3VuaW5pdGlhbGl6ZV9yaW5nOgotCWFkZTc3NThfdW5pbml0aWFsaXplX3Jpbmcoc3QtPmluZGlvX2Rldi0+cmluZyk7CisJYWRlNzc1OF91bmluaXRpYWxpemVfcmluZyhpbmRpb19kZXYtPnJpbmcpOwogZXJyb3JfdW5yZWdfcmluZ19mdW5jczoKLQlhZGU3NzU4X3VuY29uZmlndXJlX3Jpbmcoc3QtPmluZGlvX2Rldik7Ci1lcnJvcl9mcmVlX2RldjoKLQlpZiAocmVnZG9uZSkKLQkJaWlvX2RldmljZV91bnJlZ2lzdGVyKHN0LT5pbmRpb19kZXYpOwotCWVsc2UKLQkJaWlvX2ZyZWVfZGV2aWNlKHN0LT5pbmRpb19kZXYpOworCWFkZTc3NThfdW5jb25maWd1cmVfcmluZyhpbmRpb19kZXYpOwogZXJyb3JfZnJlZV90eDoKIAlrZnJlZShzdC0+dHgpOwogZXJyb3JfZnJlZV9yeDoKIAlrZnJlZShzdC0+cngpOwotZXJyb3JfZnJlZV9zdDoKLQlrZnJlZShzdCk7CitlcnJvcl9mcmVlX2RldjoKKwlpZiAocmVnZG9uZSkKKwkJaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CisJZWxzZQorCQlpaW9fZnJlZV9kZXZpY2UoaW5kaW9fZGV2KTsKIGVycm9yX3JldDoKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGFkZTc3NThfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHNwaV9nZXRfZHJ2ZGF0YShzcGkpOworCXN0cnVjdCBhZGU3NzU4X3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CiAJaW50IHJldDsKLQlzdHJ1Y3QgYWRlNzc1OF9zdGF0ZSAqc3QgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKLQlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gc3QtPmluZGlvX2RldjsKIAotCXJldCA9IGFkZTc3NThfc3RvcF9kZXZpY2UoJihpbmRpb19kZXYtPmRldikpOworCXJldCA9IGFkZTc3NThfc3RvcF9kZXZpY2UoJmluZGlvX2Rldi0+ZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl9yZXQ7CiAKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCiAJYWRlNzc1OF9yZW1vdmVfdHJpZ2dlcihpbmRpb19kZXYpOwotCWlmIChzcGktPmlycSAmJiBncGlvX2lzX3ZhbGlkKGlycV90b19ncGlvKHNwaS0+aXJxKSkgPiAwKQotCQlpaW9fdW5yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShpbmRpb19kZXYsIDApOwotCiAJYWRlNzc1OF91bmluaXRpYWxpemVfcmluZyhpbmRpb19kZXYtPnJpbmcpOwotCWlpb19kZXZpY2VfdW5yZWdpc3RlcihpbmRpb19kZXYpOwogCWFkZTc3NThfdW5jb25maWd1cmVfcmluZyhpbmRpb19kZXYpOwogCWtmcmVlKHN0LT50eCk7CiAJa2ZyZWUoc3QtPnJ4KTsKLQlrZnJlZShzdCk7CisJaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CiAKIAlyZXR1cm4gMDsKLQogZXJyX3JldDoKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9kZXZpY2VfaWQgYWRlNzc1OF9pZFtdID0geworCXsiYWRlNzc1OCIsIDB9LAorCXt9Cit9OworCiBzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgYWRlNzc1OF9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSAiYWRlNzc1OCIsCkBAIC04NDcsNiArODU0LDcgQEAKIAl9LAogCS5wcm9iZSA9IGFkZTc3NThfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGFkZTc3NThfcmVtb3ZlKSwKKwkuaWRfdGFibGUgPSBhZGU3NzU4X2lkLAogfTsKIAogc3RhdGljIF9faW5pdCBpbnQgYWRlNzc1OF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL21ldGVyL2FkZTc3NThfcmluZy5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9hZGU3NzU4X3JpbmcuYwppbmRleCAyNzRiNGEwLi5iODliN2Y4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL21ldGVyL2FkZTc3NThfcmluZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbWV0ZXIvYWRlNzc1OF9yaW5nLmMKQEAgLTEsMyArMSwxMCBAQAorLyoKKyAqIEFERTc3NTggUG9seSBQaGFzZSBNdWx0aWZ1bmN0aW9uIEVuZXJneSBNZXRlcmluZyBJQyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAxMC0yMDExIEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIuCisgKi8KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CkBAIC05LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCiAjaW5jbHVkZSAiLi4vaWlvLmgiCiAjaW5jbHVkZSAiLi4vc3lzZnMuaCIKQEAgLTE4LDE4MiArMjYsMTg4IEBACiAjaW5jbHVkZSAiYWRlNzc1OC5oIgogCiAvKioKLSAqIGNvbWJpbmVfOF90b18zMigpIHV0aWxpdHkgZnVuY3Rpb24gdG8gbXVuZ2UgdG8gdThzIGludG8gdTMyCi0gKiovCi1zdGF0aWMgaW5saW5lIHUzMiBjb21iaW5lXzhfdG9fMzIodTggbG93ZXIsIHU4IG1pZCwgdTggdXBwZXIpCi17Ci0JdTMyIF9sb3dlciA9IGxvd2VyOwotCXUzMiBfbWlkID0gbWlkOwotCXUzMiBfdXBwZXIgPSB1cHBlcjsKLQotCXJldHVybiBfbG93ZXIgfCAoX21pZCA8PCA4KSB8IChfdXBwZXIgPDwgMTYpOwotfQotCi1zdGF0aWMgSUlPX1NDQU5fRUxfQyh3Zm9ybSwgQURFNzc1OF9TQ0FOX1dGT1JNLCBBREU3NzU4X1dGT1JNLCBOVUxMKTsKLXN0YXRpYyBJSU9fQ09OU1RfQVRUUl9TQ0FOX0VMX1RZUEUod2Zvcm0sIHMsIDI0LCAzMik7Ci1zdGF0aWMgSUlPX1NDQU5fRUxfVElNRVNUQU1QKDEpOwotc3RhdGljIElJT19DT05TVF9BVFRSX1NDQU5fRUxfVFlQRSh0aW1lc3RhbXAsIHMsIDY0LCA2NCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZGU3NzU4X3NjYW5fZWxfYXR0cnNbXSA9IHsKLQkmaWlvX3NjYW5fZWxfd2Zvcm0uZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfd2Zvcm1faW5kZXguZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfd2Zvcm1fdHlwZS5kZXZfYXR0ci5hdHRyLAotCSZpaW9fc2Nhbl9lbF90aW1lc3RhbXAuZGV2X2F0dHIuYXR0ciwKLQkmaWlvX2NvbnN0X2F0dHJfdGltZXN0YW1wX2luZGV4LmRldl9hdHRyLmF0dHIsCi0JJmlpb19jb25zdF9hdHRyX3RpbWVzdGFtcF90eXBlLmRldl9hdHRyLmF0dHIsCi0JTlVMTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFkZTc3NThfc2Nhbl9lbF9ncm91cCA9IHsKLQkuYXR0cnMgPSBhZGU3NzU4X3NjYW5fZWxfYXR0cnMsCi0JLm5hbWUgPSAic2Nhbl9lbGVtZW50cyIsCi19OwotCi0vKioKLSAqIGFkZTc3NThfcG9sbF9mdW5jX3RoKCkgdG9wIGhhbGYgaW50ZXJydXB0IGhhbmRsZXIgY2FsbGVkIGJ5IHRyaWdnZXIKLSAqIEBwcml2YXRlX2RhdGE6CWlpb19kZXYKLSAqKi8KLXN0YXRpYyB2b2lkIGFkZTc3NThfcG9sbF9mdW5jX3RoKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsIHM2NCB0aW1lKQotewotCXN0cnVjdCBhZGU3NzU4X3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKLQlzdC0+bGFzdF90aW1lc3RhbXAgPSB0aW1lOwotCXNjaGVkdWxlX3dvcmsoJnN0LT53b3JrX3RyaWdnZXJfdG9fcmluZyk7Ci0JLyogSW5kaWNhdGUgdGhhdCB0aGlzIGludGVycnVwdCBpcyBiZWluZyBoYW5kbGVkICovCi0KLQkvKiBUZWNobmljYWxseSB0aGlzIGlzIHRyaWdnZXIgcmVsYXRlZCwgYnV0IHdpdGhvdXQgdGhpcwotCSAqIGhhbmRsZXIgcnVubmluZyB0aGVyZSBpcyBjdXJyZW50bHkgbm8gd2F5IGZvciB0aGUgaW50ZXJydXB0Ci0JICogdG8gY2xlYXIuCi0JICovCi19Ci0KLS8qKgotICogYWRlNzc1OF9zcGlfcmVhZF9idXJzdCgpIC0gcmVhZCBhbGwgZGF0YSByZWdpc3RlcnMKKyAqIGFkZTc3NThfc3BpX3JlYWRfYnVyc3QoKSAtIHJlYWQgZGF0YSByZWdpc3RlcnMKICAqIEBkZXY6IGRldmljZSBhc3NvY2lhdGVkIHdpdGggY2hpbGQgb2YgYWN0dWFsIGRldmljZSAoaWlvX2RldiBvciBpaW9fdHJpZykKLSAqIEByeDogc29tZXdoZXJlIHRvIHBhc3MgYmFjayB0aGUgdmFsdWUgcmVhZCAobWluIHNpemUgaXMgMjQgYnl0ZXMpCiAgKiovCi1zdGF0aWMgaW50IGFkZTc3NThfc3BpX3JlYWRfYnVyc3Qoc3RydWN0IGRldmljZSAqZGV2LCB1OCAqcngpCitzdGF0aWMgaW50IGFkZTc3NThfc3BpX3JlYWRfYnVyc3Qoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBzcGlfbWVzc2FnZSBtc2c7CiAJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBhZGU3NzU4X3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKKwlzdHJ1Y3QgYWRlNzc1OF9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwogCWludCByZXQ7CiAKLQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHhmZXJzW10gPSB7Ci0JCXsKLQkJCS50eF9idWYgPSBzdC0+dHgsCi0JCQkucnhfYnVmID0gcngsCi0JCQkuYml0c19wZXJfd29yZCA9IDgsCi0JCQkubGVuID0gNCwKLQkJfSwgewotCQkJLnR4X2J1ZiA9IHN0LT50eCArIDQsCi0JCQkucnhfYnVmID0gcngsCi0JCQkuYml0c19wZXJfd29yZCA9IDgsCi0JCQkubGVuID0gNCwKLQkJfSwKLQl9OwotCi0JbXV0ZXhfbG9jaygmc3QtPmJ1Zl9sb2NrKTsKLQlzdC0+dHhbMF0gPSBBREU3NzU4X1JFQURfUkVHKEFERTc3NThfUlNUQVRVUyk7Ci0Jc3QtPnR4WzFdID0gMDsKLQlzdC0+dHhbMl0gPSAwOwotCXN0LT50eFszXSA9IDA7Ci0Jc3QtPnR4WzRdID0gQURFNzc1OF9SRUFEX1JFRyhBREU3NzU4X1dGT1JNKTsKLQlzdC0+dHhbNV0gPSAwOwotCXN0LT50eFs2XSA9IDA7Ci0Jc3QtPnR4WzddID0gMDsKLQotCXNwaV9tZXNzYWdlX2luaXQoJm1zZyk7Ci0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnhmZXJzWzBdLCAmbXNnKTsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlcnNbMV0sICZtc2cpOwotCXJldCA9IHNwaV9zeW5jKHN0LT51cywgJm1zZyk7CisJcmV0ID0gc3BpX3N5bmMoc3QtPnVzLCAmc3QtPnJpbmdfbXNnKTsKIAlpZiAocmV0KQogCQlkZXZfZXJyKCZzdC0+dXMtPmRldiwgInByb2JsZW0gd2hlbiByZWFkaW5nIFdGT1JNIHZhbHVlXG4iKTsKIAotCW11dGV4X3VubG9jaygmc3QtPmJ1Zl9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQogCitzdGF0aWMgaW50IGFkZTc3NThfd3JpdGVfd2F2ZWZvcm1fdHlwZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIHR5cGUpCit7CisJaW50IHJldDsKKwl1OCByZWc7CisKKwlyZXQgPSBhZGU3NzU4X3NwaV9yZWFkX3JlZ184KGRldiwKKwkJCUFERTc3NThfV0FWTU9ERSwKKwkJCSZyZWcpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJcmVnICY9IH4weDFGOworCXJlZyB8PSB0eXBlICYgMHgxRjsKKworCXJldCA9IGFkZTc3NThfc3BpX3dyaXRlX3JlZ184KGRldiwKKwkJCUFERTc3NThfV0FWTU9ERSwKKwkJCXJlZyk7CitvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIAogLyogV2hpbHN0IHRoaXMgbWFrZXMgYSBsb3Qgb2YgY2FsbHMgdG8gaWlvX3N3X3JpbmcgZnVuY3Rpb25zIC0gaXQgaXMgdG8gZGV2aWNlCiAgKiBzcGVjaWZpYyB0byBiZSByb2xsZWQgaW50byB0aGUgY29yZS4KICAqLwotc3RhdGljIHZvaWQgYWRlNzc1OF90cmlnZ2VyX2JoX3RvX3Jpbmcoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrX3MpCitzdGF0aWMgaXJxcmV0dXJuX3QgYWRlNzc1OF90cmlnZ2VyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqcCkKIHsKLQlzdHJ1Y3QgYWRlNzc1OF9zdGF0ZSAqc3QKLQkJPSBjb250YWluZXJfb2Yod29ya19zLCBzdHJ1Y3QgYWRlNzc1OF9zdGF0ZSwKLQkJCSAgICAgICB3b3JrX3RyaWdnZXJfdG9fcmluZyk7Ci0Jc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyA9IHN0LT5pbmRpb19kZXYtPnJpbmc7Ci0KLQlpbnQgaSA9IDA7Ci0JczMyICpkYXRhOwotCXNpemVfdCBkYXRhc2l6ZSA9IHJpbmctPmFjY2Vzcy5nZXRfYnl0ZXNfcGVyX2RhdHVtKHJpbmcpOwotCi0JZGF0YSA9IGttYWxsb2MoZGF0YXNpemUsIEdGUF9LRVJORUwpOwotCWlmIChkYXRhID09IE5VTEwpIHsKLQkJZGV2X2Vycigmc3QtPnVzLT5kZXYsICJtZW1vcnkgYWxsb2MgZmFpbGVkIGluIHJpbmcgYmgiKTsKLQkJcmV0dXJuOwotCX0KKwlzdHJ1Y3QgaWlvX3BvbGxfZnVuYyAqcGYgPSBwOworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBwZi0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcgPSBpbmRpb19kZXYtPnJpbmc7CisJc3RydWN0IGFkZTc3NThfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKKwlzNjQgZGF0NjRbMl07CisJdTMyICpkYXQzMiA9ICh1MzIgKilkYXQ2NDsKIAogCWlmIChyaW5nLT5zY2FuX2NvdW50KQotCQlpZiAoYWRlNzc1OF9zcGlfcmVhZF9idXJzdCgmc3QtPmluZGlvX2Rldi0+ZGV2LCBzdC0+cngpID49IDApCi0JCQlmb3IgKDsgaSA8IHJpbmctPnNjYW5fY291bnQ7IGkrKykKLQkJCQlkYXRhW2ldID0gY29tYmluZV84X3RvXzMyKHN0LT5yeFtpKjIrMl0sCi0JCQkJCQlzdC0+cnhbaSoyKzFdLAotCQkJCQkJc3QtPnJ4W2kqMl0pOworCQlpZiAoYWRlNzc1OF9zcGlfcmVhZF9idXJzdCgmaW5kaW9fZGV2LT5kZXYpID49IDApCisJCQkqZGF0MzIgPSBnZXRfdW5hbGlnbmVkX2JlMzIoJnN0LT5yeF9idWZbNV0pICYgMHhGRkZGRkY7CiAKIAkvKiBHdWFyYW50ZWVkIHRvIGJlIGFsaWduZWQgd2l0aCA4IGJ5dGUgYm91bmRhcnkgKi8KIAlpZiAocmluZy0+c2Nhbl90aW1lc3RhbXApCi0JCSooKHM2NCAqKQotCQkoKCh1MzIpZGF0YSArIDQgKiByaW5nLT5zY2FuX2NvdW50ICsgNCkgJiB+MHg3KSkgPQotCQkJc3QtPmxhc3RfdGltZXN0YW1wOworCQlkYXQ2NFsxXSA9IHBmLT50aW1lc3RhbXA7CiAKLQlyaW5nLT5hY2Nlc3Muc3RvcmVfdG8ocmluZywKLQkJCSAgICAgICh1OCAqKWRhdGEsCi0JCQkgICAgICBzdC0+bGFzdF90aW1lc3RhbXApOworCXJpbmctPmFjY2Vzcy0+c3RvcmVfdG8ocmluZywgKHU4ICopZGF0NjQsIHBmLT50aW1lc3RhbXApOwogCi0JaWlvX3RyaWdnZXJfbm90aWZ5X2RvbmUoc3QtPmluZGlvX2Rldi0+dHJpZyk7Ci0Ja2ZyZWUoZGF0YSk7CisJaWlvX3RyaWdnZXJfbm90aWZ5X2RvbmUoaW5kaW9fZGV2LT50cmlnKTsKIAotCXJldHVybjsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKKy8qKgorICogYWRlNzc1OF9yaW5nX3ByZWVuYWJsZSgpIHNldHVwIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSByaW5nIGJlZm9yZSBlbmFibGluZworICoKKyAqIFRoZSBjb21wbGV4IG5hdHVyZSBvZiB0aGUgc2V0dGluZyBvZiB0aGUgbnViZXIgb2YgYnl0ZXMgcGVyIGRhdHVtIGlzIGR1ZQorICogdG8gdGhpcyBkcml2ZXIgY3VycmVudGx5IGVuc3VyaW5nIHRoYXQgdGhlIHRpbWVzdGFtcCBpcyBzdG9yZWQgYXQgYW4gOAorICogYnl0ZSBib3VuZGFyeS4KKyAqKi8KK3N0YXRpYyBpbnQgYWRlNzc1OF9yaW5nX3ByZWVuYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQoreworCXN0cnVjdCBhZGU3NzU4X3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CisJc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyA9IGluZGlvX2Rldi0+cmluZzsKKwlzaXplX3QgZF9zaXplOworCXVuc2lnbmVkIGNoYW5uZWw7CisKKwlpZiAoIXJpbmctPnNjYW5fY291bnQpCisJCXJldHVybiAtRUlOVkFMOworCisJY2hhbm5lbCA9IF9fZmZzKHJpbmctPnNjYW5fbWFzayk7CisKKwlkX3NpemUgPSBzdC0+YWRlNzc1OF9yaW5nX2NoYW5uZWxzW2NoYW5uZWxdLnNjYW5fdHlwZS5zdG9yYWdlYml0cyAvIDg7CisKKwlpZiAocmluZy0+c2Nhbl90aW1lc3RhbXApIHsKKwkJZF9zaXplICs9IHNpemVvZihzNjQpOworCisJCWlmIChkX3NpemUgJSBzaXplb2YoczY0KSkKKwkJCWRfc2l6ZSArPSBzaXplb2YoczY0KSAtIChkX3NpemUgJSBzaXplb2YoczY0KSk7CisJfQorCisJaWYgKGluZGlvX2Rldi0+cmluZy0+YWNjZXNzLT5zZXRfYnl0ZXNfcGVyX2RhdHVtKQorCQlpbmRpb19kZXYtPnJpbmctPmFjY2Vzcy0+c2V0X2J5dGVzX3Blcl9kYXR1bShpbmRpb19kZXYtPnJpbmcsCisJCQkJCQkJICAgIGRfc2l6ZSk7CisKKwlhZGU3NzU4X3dyaXRlX3dhdmVmb3JtX3R5cGUoJmluZGlvX2Rldi0+ZGV2LAorCQlzdC0+YWRlNzc1OF9yaW5nX2NoYW5uZWxzW2NoYW5uZWxdLmFkZHJlc3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX3Jpbmdfc2V0dXBfb3BzIGFkZTc3NThfcmluZ19zZXR1cF9vcHMgPSB7CisJLnByZWVuYWJsZSA9ICZhZGU3NzU4X3JpbmdfcHJlZW5hYmxlLAorCS5wb3N0ZW5hYmxlID0gJmlpb190cmlnZ2VyZWRfcmluZ19wb3N0ZW5hYmxlLAorCS5wcmVkaXNhYmxlID0gJmlpb190cmlnZ2VyZWRfcmluZ19wcmVkaXNhYmxlLAorfTsKKwogdm9pZCBhZGU3NzU4X3VuY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKLQlrZnJlZShpbmRpb19kZXYtPnBvbGxmdW5jKTsKKwkvKiBlbnN1cmUgdGhhdCB0aGUgdHJpZ2dlciBoYXMgYmVlbiBkZXRhY2hlZCAqLworCWlmIChpbmRpb19kZXYtPnRyaWcpIHsKKwkJaWlvX3B1dF90cmlnZ2VyKGluZGlvX2Rldi0+dHJpZyk7CisJCWlpb190cmlnZ2VyX2RldHRhY2hfcG9sbF9mdW5jKGluZGlvX2Rldi0+dHJpZywKKwkJCQkJICAgICAgaW5kaW9fZGV2LT5wb2xsZnVuYyk7CisJfQorCWlpb19kZWFsbG9jX3BvbGxmdW5jKGluZGlvX2Rldi0+cG9sbGZ1bmMpOwogCWlpb19zd19yYl9mcmVlKGluZGlvX2Rldi0+cmluZyk7CiB9CiAKIGludCBhZGU3NzU4X2NvbmZpZ3VyZV9yaW5nKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCiB7CisJc3RydWN0IGFkZTc3NThfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKIAlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgYWRlNzc1OF9zdGF0ZSAqc3QgPSBpbmRpb19kZXYtPmRldl9kYXRhOwotCXN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmc7Ci0JSU5JVF9XT1JLKCZzdC0+d29ya190cmlnZ2VyX3RvX3JpbmcsIGFkZTc3NThfdHJpZ2dlcl9iaF90b19yaW5nKTsKIAotCXJpbmcgPSBpaW9fc3dfcmJfYWxsb2NhdGUoaW5kaW9fZGV2KTsKLQlpZiAoIXJpbmcpIHsKKwlpbmRpb19kZXYtPnJpbmcgPSBpaW9fc3dfcmJfYWxsb2NhdGUoaW5kaW9fZGV2KTsKKwlpZiAoIWluZGlvX2Rldi0+cmluZykgewogCQlyZXQgPSAtRU5PTUVNOwogCQlyZXR1cm4gcmV0OwogCX0KLQlpbmRpb19kZXYtPnJpbmcgPSByaW5nOworCiAJLyogRWZmZWN0aXZlbHkgc2VsZWN0IHRoZSByaW5nIGJ1ZmZlciBpbXBsZW1lbnRhdGlvbiAqLwotCWlpb19yaW5nX3N3X3JlZ2lzdGVyX2Z1bmNzKCZyaW5nLT5hY2Nlc3MpOwotCXJpbmctPmJwZSA9IDQ7Ci0JcmluZy0+c2Nhbl9lbF9hdHRycyA9ICZhZGU3NzU4X3NjYW5fZWxfZ3JvdXA7Ci0JcmluZy0+c2Nhbl90aW1lc3RhbXAgPSB0cnVlOwotCXJpbmctPnByZWVuYWJsZSA9ICZpaW9fc3dfcmluZ19wcmVlbmFibGU7Ci0JcmluZy0+cG9zdGVuYWJsZSA9ICZpaW9fdHJpZ2dlcmVkX3JpbmdfcG9zdGVuYWJsZTsKLQlyaW5nLT5wcmVkaXNhYmxlID0gJmlpb190cmlnZ2VyZWRfcmluZ19wcmVkaXNhYmxlOwotCXJpbmctPm93bmVyID0gVEhJU19NT0RVTEU7CisJaW5kaW9fZGV2LT5yaW5nLT5hY2Nlc3MgPSAmcmluZ19zd19hY2Nlc3NfZnVuY3M7CisJaW5kaW9fZGV2LT5yaW5nLT5zZXR1cF9vcHMgPSAmYWRlNzc1OF9yaW5nX3NldHVwX29wczsKKwlpbmRpb19kZXYtPnJpbmctPm93bmVyID0gVEhJU19NT0RVTEU7CiAKLQkvKiBTZXQgZGVmYXVsdCBzY2FuIG1vZGUgKi8KLQlpaW9fc2Nhbl9tYXNrX3NldChyaW5nLCBpaW9fc2Nhbl9lbF93Zm9ybS5udW1iZXIpOwotCi0JcmV0ID0gaWlvX2FsbG9jX3BvbGxmdW5jKGluZGlvX2RldiwgTlVMTCwgJmFkZTc3NThfcG9sbF9mdW5jX3RoKTsKLQlpZiAocmV0KQorCWluZGlvX2Rldi0+cG9sbGZ1bmMgPSBpaW9fYWxsb2NfcG9sbGZ1bmMoJmlpb19wb2xsZnVuY19zdG9yZV90aW1lLAorCQkJCQkJICZhZGU3NzU4X3RyaWdnZXJfaGFuZGxlciwKKwkJCQkJCSAwLAorCQkJCQkJIGluZGlvX2RldiwKKwkJCQkJCSAiYWRlNzc1OV9jb25zdW1lciVkIiwKKwkJCQkJCSBpbmRpb19kZXYtPmlkKTsKKwlpZiAoaW5kaW9fZGV2LT5wb2xsZnVuYyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3JfaWlvX3N3X3JiX2ZyZWU7CisJfQogCiAJaW5kaW9fZGV2LT5tb2RlcyB8PSBJTkRJT19SSU5HX1RSSUdHRVJFRDsKKworCXN0LT50eF9idWZbMF0gPSBBREU3NzU4X1JFQURfUkVHKEFERTc3NThfUlNUQVRVUyk7CisJc3QtPnR4X2J1ZlsxXSA9IDA7CisJc3QtPnR4X2J1ZlsyXSA9IDA7CisJc3QtPnR4X2J1ZlszXSA9IDA7CisJc3QtPnR4X2J1Zls0XSA9IEFERTc3NThfUkVBRF9SRUcoQURFNzc1OF9XRk9STSk7CisJc3QtPnR4X2J1Zls1XSA9IDA7CisJc3QtPnR4X2J1Zls2XSA9IDA7CisJc3QtPnR4X2J1Zls3XSA9IDA7CisKKwkvKiBidWlsZCBzcGkgcmluZyBtZXNzYWdlICovCisJc3QtPnJpbmdfeGZlclswXS50eF9idWYgPSAmc3QtPnR4X2J1ZlswXTsKKwlzdC0+cmluZ194ZmVyWzBdLmxlbiA9IDE7CisJc3QtPnJpbmdfeGZlclswXS5iaXRzX3Blcl93b3JkID0gODsKKwlzdC0+cmluZ194ZmVyWzBdLmRlbGF5X3VzZWNzID0gNDsKKwlzdC0+cmluZ194ZmVyWzFdLnJ4X2J1ZiA9ICZzdC0+cnhfYnVmWzFdOworCXN0LT5yaW5nX3hmZXJbMV0ubGVuID0gMzsKKwlzdC0+cmluZ194ZmVyWzFdLmJpdHNfcGVyX3dvcmQgPSA4OworCXN0LT5yaW5nX3hmZXJbMV0uY3NfY2hhbmdlID0gMTsKKworCXN0LT5yaW5nX3hmZXJbMl0udHhfYnVmID0gJnN0LT50eF9idWZbNF07CisJc3QtPnJpbmdfeGZlclsyXS5sZW4gPSAxOworCXN0LT5yaW5nX3hmZXJbMl0uYml0c19wZXJfd29yZCA9IDg7CisJc3QtPnJpbmdfeGZlclsyXS5kZWxheV91c2VjcyA9IDE7CisJc3QtPnJpbmdfeGZlclszXS5yeF9idWYgPSAmc3QtPnJ4X2J1Zls1XTsKKwlzdC0+cmluZ194ZmVyWzNdLmxlbiA9IDM7CisJc3QtPnJpbmdfeGZlclszXS5iaXRzX3Blcl93b3JkID0gODsKKworCXNwaV9tZXNzYWdlX2luaXQoJnN0LT5yaW5nX21zZyk7CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnN0LT5yaW5nX3hmZXJbMF0sICZzdC0+cmluZ19tc2cpOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZzdC0+cmluZ194ZmVyWzFdLCAmc3QtPnJpbmdfbXNnKTsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmc3QtPnJpbmdfeGZlclsyXSwgJnN0LT5yaW5nX21zZyk7CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnN0LT5yaW5nX3hmZXJbM10sICZzdC0+cmluZ19tc2cpOworCiAJcmV0dXJuIDA7CiAKIGVycm9yX2lpb19zd19yYl9mcmVlOgpAQCAtMjAxLDExICsyMTUsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBhZGU3NzU4X2luaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKQotewotCXJldHVybiBpaW9fcmluZ19idWZmZXJfcmVnaXN0ZXIocmluZywgMCk7Ci19Ci0KIHZvaWQgYWRlNzc1OF91bmluaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKQogewogCWlpb19yaW5nX2J1ZmZlcl91bnJlZ2lzdGVyKHJpbmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9hZGU3NzU4X3RyaWdnZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbWV0ZXIvYWRlNzc1OF90cmlnZ2VyLmMKaW5kZXggNjBhYmNhMC4uYTVjMzI0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9hZGU3NzU4X3RyaWdnZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL21ldGVyL2FkZTc3NThfdHJpZ2dlci5jCkBAIC0xLDMgKzEsMTEgQEAKKy8qCisgKiBBREU3NzU4IFBvbHkgUGhhc2UgTXVsdGlmdW5jdGlvbiBFbmVyZ3kgTWV0ZXJpbmcgSUMgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIwMTAtMjAxMSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yLgorICovCisKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgpAQCAtMTUsNTYgKzIzLDI0IEBACiAvKioKICAqIGFkZTc3NThfZGF0YV9yZHlfdHJpZ19wb2xsKCkgdGhlIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBkYXRhIHJkeSB0cmlnCiAgKiovCi1zdGF0aWMgaW50IGFkZTc3NThfZGF0YV9yZHlfdHJpZ19wb2xsKHN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbywKLQkJCQkgICAgICAgaW50IGluZGV4LAotCQkJCSAgICAgICBzNjQgdGltZXN0YW1wLAotCQkJCSAgICAgICBpbnQgbm9fdGVzdCkKK3N0YXRpYyBpcnFyZXR1cm5fdCBhZGU3NzU4X2RhdGFfcmR5X3RyaWdfcG9sbChpbnQgaXJxLCB2b2lkICpwcml2YXRlKQogewotCXN0cnVjdCBhZGU3NzU4X3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoZGV2X2luZm8pOwotCXN0cnVjdCBpaW9fdHJpZ2dlciAqdHJpZyA9IHN0LT50cmlnOwotCi0JaWlvX3RyaWdnZXJfcG9sbCh0cmlnLCB0aW1lc3RhbXApOworCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOworCWlpb190cmlnZ2VyX3BvbGwocHJpdmF0ZSwgaWlvX2dldF90aW1lX25zKCkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1JSU9fRVZFTlRfU0goZGF0YV9yZHlfdHJpZywgJmFkZTc3NThfZGF0YV9yZHlfdHJpZ19wb2xsKTsKLQotc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIGlpb190cmlnZ2VyX3JlYWRfbmFtZSwgTlVMTCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZGU3NzU4X3RyaWdnZXJfYXR0cnNbXSA9IHsKLQkmZGV2X2F0dHJfbmFtZS5hdHRyLAotCU5VTEwsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZGU3NzU4X3RyaWdnZXJfYXR0cl9ncm91cCA9IHsKLQkuYXR0cnMgPSBhZGU3NzU4X3RyaWdnZXJfYXR0cnMsCi19OwotCiAvKioKICAqIGFkZTc3NThfZGF0YV9yZHlfdHJpZ2dlcl9zZXRfc3RhdGUoKSBzZXQgZGF0YXJkeSBpbnRlcnJ1cHQgc3RhdGUKICAqKi8KIHN0YXRpYyBpbnQgYWRlNzc1OF9kYXRhX3JkeV90cmlnZ2VyX3NldF9zdGF0ZShzdHJ1Y3QgaWlvX3RyaWdnZXIgKnRyaWcsCiAJCQkJCQlib29sIHN0YXRlKQogewotCXN0cnVjdCBhZGU3NzU4X3N0YXRlICpzdCA9IHRyaWctPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gc3QtPmluZGlvX2RldjsKLQlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gdHJpZy0+cHJpdmF0ZV9kYXRhOwogCiAJZGV2X2RiZygmaW5kaW9fZGV2LT5kZXYsICIlcyAoJWQpXG4iLCBfX2Z1bmNfXywgc3RhdGUpOwotCXJldCA9IGFkZTc3NThfc2V0X2lycSgmc3QtPmluZGlvX2Rldi0+ZGV2LCBzdGF0ZSk7Ci0JaWYgKHN0YXRlID09IGZhbHNlKSB7Ci0JCWlpb19yZW1vdmVfZXZlbnRfZnJvbV9saXN0KCZpaW9fZXZlbnRfZGF0YV9yZHlfdHJpZywKLQkJCQkJICAgJmluZGlvX2Rldi0+aW50ZXJydXB0c1swXQotCQkJCQkgICAtPmV2X2xpc3QpOwotCQkvKiBwb3NzaWJsZSBxdWlyayB3aXRoIGhhbmRsZXIgY3VycmVudGx5IHdvcmtlZCBhcm91bmQKLQkJICAgYnkgZW5zdXJpbmcgdGhlIHdvcmsgcXVldWUgaXMgZW1wdHkgKi8KLQkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQl9IGVsc2UgewotCQlpaW9fYWRkX2V2ZW50X3RvX2xpc3QoJmlpb19ldmVudF9kYXRhX3JkeV90cmlnLAotCQkJCSAgICAgICZpbmRpb19kZXYtPmludGVycnVwdHNbMF0tPmV2X2xpc3QpOwotCX0KLQlyZXR1cm4gcmV0OworCXJldHVybiBhZGU3NzU4X3NldF9pcnEoJmluZGlvX2Rldi0+ZGV2LCBzdGF0ZSk7CiB9CiAKIC8qKgpAQCAtNzMsNyArNDksOSBAQAogICoqLwogc3RhdGljIGludCBhZGU3NzU4X3RyaWdfdHJ5X3JlZW4oc3RydWN0IGlpb190cmlnZ2VyICp0cmlnKQogewotCXN0cnVjdCBhZGU3NzU4X3N0YXRlICpzdCA9IHRyaWctPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gdHJpZy0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhZGU3NzU4X3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CisKIAllbmFibGVfaXJxKHN0LT51cy0+aXJxKTsKIAkvKiBpcnEgcmVlbmFibGVkIHNvIHN1Y2Nlc3MhICovCiAJcmV0dXJuIDA7CkBAIC04MSw0NSArNTksNTIgQEAKIAogaW50IGFkZTc3NThfcHJvYmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQogeworCXN0cnVjdCBhZGU3NzU4X3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CiAJaW50IHJldDsKLQlzdHJ1Y3QgYWRlNzc1OF9zdGF0ZSAqc3QgPSBpbmRpb19kZXYtPmRldl9kYXRhOwogCi0Jc3QtPnRyaWcgPSBpaW9fYWxsb2NhdGVfdHJpZ2dlcigpOwotCXN0LT50cmlnLT5uYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsCi0JCQkJImFkZTc3NTgtZGV2JWQiLAotCQkJCWluZGlvX2Rldi0+aWQpOwotCWlmICghc3QtPnRyaWctPm5hbWUpIHsKKwlzdC0+dHJpZyA9IGlpb19hbGxvY2F0ZV90cmlnZ2VyKCIlcy1kZXYlZCIsCisJCQkJCXNwaV9nZXRfZGV2aWNlX2lkKHN0LT51cyktPm5hbWUsCisJCQkJCWluZGlvX2Rldi0+aWQpOworCWlmIChzdC0+dHJpZyA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyb3JfZnJlZV90cmlnOworCQlnb3RvIGVycm9yX3JldDsKIAl9CisKKwlyZXQgPSByZXF1ZXN0X2lycShzdC0+dXMtPmlycSwKKwkJCSAgYWRlNzc1OF9kYXRhX3JkeV90cmlnX3BvbGwsCisJCQkgIElSUUZfVFJJR0dFUl9MT1csCisJCQkgIHNwaV9nZXRfZGV2aWNlX2lkKHN0LT51cyktPm5hbWUsCisJCQkgIHN0LT50cmlnKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yX2ZyZWVfdHJpZzsKKwogCXN0LT50cmlnLT5kZXYucGFyZW50ID0gJnN0LT51cy0+ZGV2OwogCXN0LT50cmlnLT5vd25lciA9IFRISVNfTU9EVUxFOwotCXN0LT50cmlnLT5wcml2YXRlX2RhdGEgPSBzdDsKKwlzdC0+dHJpZy0+cHJpdmF0ZV9kYXRhID0gaW5kaW9fZGV2OwogCXN0LT50cmlnLT5zZXRfdHJpZ2dlcl9zdGF0ZSA9ICZhZGU3NzU4X2RhdGFfcmR5X3RyaWdnZXJfc2V0X3N0YXRlOwogCXN0LT50cmlnLT50cnlfcmVlbmFibGUgPSAmYWRlNzc1OF90cmlnX3RyeV9yZWVuOwotCXN0LT50cmlnLT5jb250cm9sX2F0dHJzID0gJmFkZTc3NThfdHJpZ2dlcl9hdHRyX2dyb3VwOwogCXJldCA9IGlpb190cmlnZ2VyX3JlZ2lzdGVyKHN0LT50cmlnKTsKIAogCS8qIHNlbGVjdCBkZWZhdWx0IHRyaWdnZXIgKi8KIAlpbmRpb19kZXYtPnRyaWcgPSBzdC0+dHJpZzsKIAlpZiAocmV0KQotCQlnb3RvIGVycm9yX2ZyZWVfdHJpZ19uYW1lOworCQlnb3RvIGVycm9yX2ZyZWVfaXJxOwogCiAJcmV0dXJuIDA7CiAKLWVycm9yX2ZyZWVfdHJpZ19uYW1lOgotCWtmcmVlKHN0LT50cmlnLT5uYW1lKTsKK2Vycm9yX2ZyZWVfaXJxOgorCWZyZWVfaXJxKHN0LT51cy0+aXJxLCBzdC0+dHJpZyk7CiBlcnJvcl9mcmVlX3RyaWc6CiAJaWlvX2ZyZWVfdHJpZ2dlcihzdC0+dHJpZyk7Ci0KK2Vycm9yX3JldDoKIAlyZXR1cm4gcmV0OwogfQogCiB2b2lkIGFkZTc3NThfcmVtb3ZlX3RyaWdnZXIoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKLQlzdHJ1Y3QgYWRlNzc1OF9zdGF0ZSAqc3RhdGUgPSBpbmRpb19kZXYtPmRldl9kYXRhOworCXN0cnVjdCBhZGU3NzU4X3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CiAKLQlpaW9fdHJpZ2dlcl91bnJlZ2lzdGVyKHN0YXRlLT50cmlnKTsKLQlrZnJlZShzdGF0ZS0+dHJpZy0+bmFtZSk7Ci0JaWlvX2ZyZWVfdHJpZ2dlcihzdGF0ZS0+dHJpZyk7CisJaWlvX3RyaWdnZXJfdW5yZWdpc3RlcihzdC0+dHJpZyk7CisJZnJlZV9pcnEoc3QtPnVzLT5pcnEsIHN0LT50cmlnKTsKKwlpaW9fZnJlZV90cmlnZ2VyKHN0LT50cmlnKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbWV0ZXIvYWRlNzc1OS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9hZGU3NzU5LmMKaW5kZXggYTlkMzIwMy4uNzMwZjZkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9hZGU3NzU5LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9hZGU3NzU5LmMKQEAgLTQyMiw4ICs0MjIsNiBAQAogCiBzdGF0aWMgSUlPX0NPTlNUX0FUVFJfU0FNUF9GUkVRX0FWQUlMKCIyNzkwMCAxNDAwMCA3MDAwIDM1MDAiKTsKIAotc3RhdGljIElJT19DT05TVF9BVFRSKG5hbWUsICJhZGU3NzU5Iik7Ci0KIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZGU3NzU5X2F0dHJpYnV0ZXNbXSA9IHsKIAkmaWlvX2Rldl9hdHRyX3RlbXBfcmF3LmRldl9hdHRyLmF0dHIsCiAJJmlpb19jb25zdF9hdHRyX3RlbXBfb2Zmc2V0LmRldl9hdHRyLmF0dHIsCkBAIC00MzEsNyArNDI5LDYgQEAKIAkmaWlvX2Rldl9hdHRyX3NhbXBsaW5nX2ZyZXF1ZW5jeS5kZXZfYXR0ci5hdHRyLAogCSZpaW9fY29uc3RfYXR0cl9zYW1wbGluZ19mcmVxdWVuY3lfYXZhaWxhYmxlLmRldl9hdHRyLmF0dHIsCiAJJmlpb19kZXZfYXR0cl9yZXNldC5kZXZfYXR0ci5hdHRyLAotCSZpaW9fY29uc3RfYXR0cl9uYW1lLmRldl9hdHRyLmF0dHIsCiAJJmlpb19kZXZfYXR0cl9waGNhbC5kZXZfYXR0ci5hdHRyLAogCSZpaW9fZGV2X2F0dHJfY2ZkZW4uZGV2X2F0dHIuYXR0ciwKIAkmaWlvX2Rldl9hdHRyX2FlbmVyZ3kuZGV2X2F0dHIuYXR0ciwKQEAgLTQ1Myw2ICs0NTAsMTEgQEAKIAkuYXR0cnMgPSBhZGU3NzU5X2F0dHJpYnV0ZXMsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIGFkZTc3NTlfaW5mbyA9IHsKKwkuYXR0cnMgPSAmYWRlNzc1OV9hdHRyaWJ1dGVfZ3JvdXAsCisJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRSwKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGFkZTc3NTlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlpbnQgcmV0OwpAQCAtNDc4LDE4ICs0ODAsMTcgQEAKIAlzdC0+dXMgPSBzcGk7CiAJbXV0ZXhfaW5pdCgmc3QtPmJ1Zl9sb2NrKTsKIAkvKiBzZXR1cCB0aGUgaW5kdXN0cmlhbGlvIGRyaXZlciBhbGxvY2F0ZWQgZWxlbWVudHMgKi8KLQlzdC0+aW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgpOworCXN0LT5pbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKDApOwogCWlmIChzdC0+aW5kaW9fZGV2ID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9mcmVlX3R4OwogCX0KIAorCXN0LT5pbmRpb19kZXYtPm5hbWUgPSBzcGktPmRldi5kcml2ZXItPm5hbWU7CiAJc3QtPmluZGlvX2Rldi0+ZGV2LnBhcmVudCA9ICZzcGktPmRldjsKLQlzdC0+aW5kaW9fZGV2LT5udW1faW50ZXJydXB0X2xpbmVzID0gMTsKIAotCXN0LT5pbmRpb19kZXYtPmF0dHJzID0gJmFkZTc3NTlfYXR0cmlidXRlX2dyb3VwOworCXN0LT5pbmRpb19kZXYtPmluZm8gPSAmYWRlNzc1OV9pbmZvOwogCXN0LT5pbmRpb19kZXYtPmRldl9kYXRhID0gKHZvaWQgKikoc3QpOwotCXN0LT5pbmRpb19kZXYtPmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRTsKIAlzdC0+aW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOwogCiAJcmV0ID0gaWlvX2RldmljZV9yZWdpc3RlcihzdC0+aW5kaW9fZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbWV0ZXIvYWRlNzg1NC5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9hZGU3ODU0LmMKaW5kZXggODY2ZTU4NS4uNDRjZDNlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9hZGU3ODU0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9hZGU3ODU0LmMKQEAgLTU1MSw2ICs1NTEsMTEgQEAKIAkuYXR0cnMgPSBhZGU3ODU0X2F0dHJpYnV0ZXMsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIGFkZTc4NTRfaW5mbyA9IHsKKwkuYXR0cnMgPSAmYWRlNzg1NF9hdHRyaWJ1dGVfZ3JvdXAsCisJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRSwKK307CisKIGludCBhZGU3ODU0X3Byb2JlKHN0cnVjdCBhZGU3ODU0X3N0YXRlICpzdCwgc3RydWN0IGRldmljZSAqZGV2KQogewogCWludCByZXQ7CkBAIC01NjgsMTYgKzU3MywxNSBAQAogCX0KIAltdXRleF9pbml0KCZzdC0+YnVmX2xvY2spOwogCS8qIHNldHVwIHRoZSBpbmR1c3RyaWFsaW8gZHJpdmVyIGFsbG9jYXRlZCBlbGVtZW50cyAqLwotCXN0LT5pbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKCk7CisJc3QtPmluZGlvX2RldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2UoMCk7CiAJaWYgKHN0LT5pbmRpb19kZXYgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX2ZyZWVfdHg7CiAJfQogCiAJc3QtPmluZGlvX2Rldi0+ZGV2LnBhcmVudCA9IGRldjsKLQlzdC0+aW5kaW9fZGV2LT5hdHRycyA9ICZhZGU3ODU0X2F0dHJpYnV0ZV9ncm91cDsKKwlzdC0+aW5kaW9fZGV2LT5pbmZvID0gJmFkZTc4NTRfaW5mbzsKIAlzdC0+aW5kaW9fZGV2LT5kZXZfZGF0YSA9ICh2b2lkICopKHN0KTsKLQlzdC0+aW5kaW9fZGV2LT5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEU7CiAJc3QtPmluZGlvX2Rldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1RfTU9ERTsKIAogCXJldCA9IGlpb19kZXZpY2VfcmVnaXN0ZXIoc3QtPmluZGlvX2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL3Jlc29sdmVyL2FkMnMxMjB4LmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL3Jlc29sdmVyL2FkMnMxMjB4LmMKaW5kZXggOGY0OTdhMi4uZjgzZTE0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9yZXNvbHZlci9hZDJzMTIweC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vcmVzb2x2ZXIvYWQyczEyMHguYwpAQCAtMjA5LDEwICsyMDksMTQgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFkMnMxMjB4X2F0dHJpYnV0ZV9ncm91cCA9IHsKLQkubmFtZSA9IERSVl9OQU1FLAogCS5hdHRycyA9IGFkMnMxMjB4X2F0dHJpYnV0ZXMsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIGFkMnMxMjB4X2luZm8gPSB7CisJLmF0dHJzID0gJmFkMnMxMjB4X2F0dHJpYnV0ZV9ncm91cCwKKwkuZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFLAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgYWQyczEyMHhfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlzdHJ1Y3QgYWQyczEyMHhfc3RhdGUgKnN0OwpAQCAtMjQwLDE4ICsyNDQsMTUgQEAKIAlzdC0+c2FtcGxlID0gcGluc1swXTsKIAlzdC0+cmR2ZWwgPSBwaW5zWzFdOwogCi0Jc3QtPmlkZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKCk7CisJc3QtPmlkZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKDApOwogCWlmIChzdC0+aWRldiA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3JfZnJlZV9zdDsKIAl9CiAJc3QtPmlkZXYtPmRldi5wYXJlbnQgPSAmc3BpLT5kZXY7Ci0Jc3QtPmlkZXYtPm51bV9pbnRlcnJ1cHRfbGluZXMgPSAwOwotCXN0LT5pZGV2LT5ldmVudF9hdHRycyA9IE5VTEw7CiAKLQlzdC0+aWRldi0+YXR0cnMgPSAmYWQyczEyMHhfYXR0cmlidXRlX2dyb3VwOworCXN0LT5pZGV2LT5pbmZvID0gJmFkMnMxMjB4X2luZm87CiAJc3QtPmlkZXYtPmRldl9kYXRhID0gKHZvaWQgKikoc3QpOwotCXN0LT5pZGV2LT5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEU7CiAJc3QtPmlkZXYtPm1vZGVzID0gSU5ESU9fRElSRUNUX01PREU7CiAKIAlyZXQgPSBpaW9fZGV2aWNlX3JlZ2lzdGVyKHN0LT5pZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vcmVzb2x2ZXIvYWQyczEyMTAuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vcmVzb2x2ZXIvYWQyczEyMTAuYwppbmRleCBjMTJmNjRjLi4wOWY0ZmNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL3Jlc29sdmVyL2FkMnMxMjEwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9yZXNvbHZlci9hZDJzMTIxMC5jCkBAIC03NTUsNiArNzU1LDExIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9faW5mbyBhZDJzMTIxMF9pbmZvID0geworCS5hdHRycyA9ICZhZDJzMTIxMF9hdHRyaWJ1dGVfZ3JvdXAsCisJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRSwKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGFkMnMxMjEwX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CiAJc3RydWN0IGFkMnMxMjEwX3N0YXRlICpzdDsKQEAgLTgwMCwxOCArODA1LDE1IEBACiAJc3QtPnJlczAgPSBwaW5zWzNdOwogCXN0LT5yZXMxID0gcGluc1s0XTsKIAotCXN0LT5pZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgpOworCXN0LT5pZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgwKTsKIAlpZiAoc3QtPmlkZXYgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX2ZyZWVfc3Q7CiAJfQogCXN0LT5pZGV2LT5kZXYucGFyZW50ID0gJnNwaS0+ZGV2OwotCXN0LT5pZGV2LT5udW1faW50ZXJydXB0X2xpbmVzID0gMDsKLQlzdC0+aWRldi0+ZXZlbnRfYXR0cnMgPSBOVUxMOwogCi0Jc3QtPmlkZXYtPmF0dHJzID0gJmFkMnMxMjEwX2F0dHJpYnV0ZV9ncm91cDsKKwlzdC0+aWRldi0+aW5mbyA9ICZhZDJzMTIxMF9pbmZvOwogCXN0LT5pZGV2LT5kZXZfZGF0YSA9ICh2b2lkICopKHN0KTsKLQlzdC0+aWRldi0+ZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFOwogCXN0LT5pZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOwogCiAJcmV0ID0gaWlvX2RldmljZV9yZWdpc3RlcihzdC0+aWRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL3Jlc29sdmVyL2FkMnM5MC5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9yZXNvbHZlci9hZDJzOTAuYwppbmRleCA0MTQzNTM1Li45YjcyYTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL3Jlc29sdmVyL2FkMnM5MC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vcmVzb2x2ZXIvYWQyczkwLmMKQEAgLTc1LDYgKzc1LDExIEBACiAJLmF0dHJzID0gYWQyczkwX2F0dHJpYnV0ZXMsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIGFkMnM5MF9pbmZvID0geworCS5hdHRycyA9ICZhZDJzOTBfYXR0cmlidXRlX2dyb3VwLAorCS5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEUsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhZDJzOTBfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlzdHJ1Y3QgYWQyczkwX3N0YXRlICpzdDsKQEAgLTkwLDE4ICs5NSwxNSBAQAogCW11dGV4X2luaXQoJnN0LT5sb2NrKTsKIAlzdC0+c2RldiA9IHNwaTsKIAotCXN0LT5pZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgpOworCXN0LT5pZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgwKTsKIAlpZiAoc3QtPmlkZXYgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX2ZyZWVfc3Q7CiAJfQogCXN0LT5pZGV2LT5kZXYucGFyZW50ID0gJnNwaS0+ZGV2OwotCXN0LT5pZGV2LT5udW1faW50ZXJydXB0X2xpbmVzID0gMDsKLQlzdC0+aWRldi0+ZXZlbnRfYXR0cnMgPSBOVUxMOwogCi0Jc3QtPmlkZXYtPmF0dHJzID0gJmFkMnM5MF9hdHRyaWJ1dGVfZ3JvdXA7CisJc3QtPmlkZXYtPmluZm8gPSAmYWQyczkwX2luZm87CiAJc3QtPmlkZXYtPmRldl9kYXRhID0gKHZvaWQgKikoc3QpOwotCXN0LT5pZGV2LT5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEU7CiAJc3QtPmlkZXYtPm1vZGVzID0gSU5ESU9fRElSRUNUX01PREU7CiAKIAlyZXQgPSBpaW9fZGV2aWNlX3JlZ2lzdGVyKHN0LT5pZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vcmluZ19nZW5lcmljLmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL3JpbmdfZ2VuZXJpYy5oCmluZGV4IDMyOTQ4ZTUuLjNmMjZmNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vcmluZ19nZW5lcmljLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9yaW5nX2dlbmVyaWMuaApAQCAtMTYsMzUgKzE2LDEyIEBACiBzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyOwogCiAvKioKLSAqIGlpb19wdXNoX3JpbmdfZXZlbnQoKSAtIHJpbmcgYnVmZmVyIHNwZWNpZmljIHB1c2ggdG8gZXZlbnQgY2hyZGV2Ci0gKiBAcmluZ19idWY6CQlyaW5nIGJ1ZmZlciB0aGF0IGlzIHRoZSBldmVudCBzb3VyY2UKLSAqIEBldmVudF9jb2RlOgkJZXZlbnQgaW5kZW50aWZpY2F0aW9uIGNvZGUKLSAqIEB0aW1lc3RhbXA6CQl0aW1lIG9mIGV2ZW50Ci0gKiovCi1pbnQgaWlvX3B1c2hfcmluZ19ldmVudChzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nX2J1ZiwKLQkJCWludCBldmVudF9jb2RlLAotCQkJczY0IHRpbWVzdGFtcCk7Ci0vKioKLSAqIGlpb19wdXNoX29yX2VzY2FsbGF0ZV9yaW5nX2V2ZW50KCkgLQllc2NhbGF0ZSBvciBhZGQgYXMgYXBwcm9wcmlhdGUKLSAqIEByaW5nX2J1ZjoJCXJpbmcgYnVmZmVyIHRoYXQgaXMgdGhlIGV2ZW50IHNvdXJjZQotICogQGV2ZW50X2NvZGU6CQlldmVudCBpbmRlbnRpZmljYXRpb24gY29kZQotICogQHRpbWVzdGFtcDoJCXRpbWUgb2YgZXZlbnQKLSAqCi0gKiBUeXBpY2FsIHVzZWNhc2UgaXMgdG8gZXNjYWxhdGUgYSA1MCUgcmluZyBmdWxsIHRvIDc1JSBmdWxsIGlmIG5vIG9uZSBoYXMgeWV0Ci0gKiByZWFkIHRoZSBmaXJzdCBldmVudC4gQ2xlYXJseSB0aGUgNTAlIGZ1bGwgaXMgbm8gbG9uZ2VyIG9mIGludGVyZXN0IGluCi0gKiB0eXBpY2FsIHVzZSBjYXNlLgotICoqLwotaW50IGlpb19wdXNoX29yX2VzY2FsbGF0ZV9yaW5nX2V2ZW50KHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmdfYnVmLAotCQkJCSAgICAgaW50IGV2ZW50X2NvZGUsCi0JCQkJICAgICBzNjQgdGltZXN0YW1wKTsKLQotLyoqCiAgKiBzdHJ1Y3QgaWlvX3JpbmdfYWNjZXNzX2Z1bmNzIC0gYWNjZXNzIGZ1bmN0aW9ucyBmb3IgcmluZyBidWZmZXJzLgogICogQG1hcmtfaW5fdXNlOglyZWZlcmVuY2UgY291bnRpbmcsIHR5cGljYWxseSB0byBwcmV2ZW50IG1vZHVsZSByZW1vdmFsCiAgKiBAdW5tYXJrX2luX3VzZToJcmVkdWNlIHJlZmVyZW5jZSBjb3VudCB3aGVuIG5vIGxvbmdlciB1c2luZyByaW5nIGJ1ZmZlcgogICogQHN0b3JlX3RvOgkJYWN0dWFsbHkgc3RvcmUgc3R1ZmYgdG8gdGhlIHJpbmcgYnVmZmVyCiAgKiBAcmVhZF9sYXN0OgkJZ2V0IHRoZSBsYXN0IGVsZW1lbnQgc3RvcmVkCi0gKiBAcmlwX2xvdHM6CQl0cnkgdG8gZ2V0IGEgc3BlY2lmaWVkIG51bWJlciBvZiBlbGVtZW50cyAobXVzdCBleGlzdCkKKyAqIEByZWFkX2ZpcnN0X246CXRyeSB0byBnZXQgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIGVsZW1lbnRzIChtdXN0IGV4aXN0KQogICogQG1hcmtfcGFyYW1fY2hhbmdlOglub3RpZnkgcmluZyB0aGF0IHNvbWUgcmVsZXZhbnQgcGFyYW1ldGVyIGhhcyBjaGFuZ2VkCiAgKgkJCU9mdGVuIHRoaXMgbWVhbnMgdGhlIHVuZGVybHlpbmcgc3RvcmFnZSBtYXkgbmVlZCB0bwogICoJCQljaGFuZ2UuCkBAIC03MSwxMCArNDgsOSBAQAogCiAJaW50ICgqc3RvcmVfdG8pKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcsIHU4ICpkYXRhLCBzNjQgdGltZXN0YW1wKTsKIAlpbnQgKCpyZWFkX2xhc3QpKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcsIHU4ICpkYXRhKTsKLQlpbnQgKCpyaXBfbG90cykoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZywKLQkJCXNpemVfdCBjb3VudCwKLQkJCWNoYXIgX191c2VyICpidWYsCi0JCQlpbnQgKmRlYWRfb2Zmc2V0KTsKKwlpbnQgKCpyZWFkX2ZpcnN0X24pKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcsCisJCQkgICAgc2l6ZV90IG4sCisJCQkgICAgY2hhciBfX3VzZXIgKmJ1Zik7CiAKIAlpbnQgKCptYXJrX3BhcmFtX2NoYW5nZSkoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyk7CiAJaW50ICgqcmVxdWVzdF91cGRhdGUpKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpOwpAQCAtODgsNTggKzY0LDUyIEBACiAJaW50ICgqZW5hYmxlKShzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKTsKIH07CiAKK3N0cnVjdCBpaW9fcmluZ19zZXR1cF9vcHMgeworCWludAkJCQkoKnByZWVuYWJsZSkoc3RydWN0IGlpb19kZXYgKik7CisJaW50CQkJCSgqcG9zdGVuYWJsZSkoc3RydWN0IGlpb19kZXYgKik7CisJaW50CQkJCSgqcHJlZGlzYWJsZSkoc3RydWN0IGlpb19kZXYgKik7CisJaW50CQkJCSgqcG9zdGRpc2FibGUpKHN0cnVjdCBpaW9fZGV2ICopOworfTsKKwogLyoqCiAgKiBzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyIC0gZ2VuZXJhbCByaW5nIGJ1ZmZlciBzdHJ1Y3R1cmUKICAqIEBkZXY6CQlyaW5nIGJ1ZmZlciBkZXZpY2Ugc3RydWN0Ci0gKiBAYWNjZXNzX2RldjoJCXN5c3RlbSBkZXZpY2Ugc3RydWN0IGZvciB0aGUgY2hyZGV2CiAgKiBAaW5kaW9fZGV2OgkJaW5kdXN0cmlhbCBJL08gZGV2aWNlIHN0cnVjdHVyZQogICogQG93bmVyOgkJbW9kdWxlIHRoYXQgb3ducyB0aGUgcmluZyBidWZmZXIgKGZvciByZWYgY291bnRpbmcpCi0gKiBAaWQ6CQkJdW5pcXVlIGlkIG51bWJlcgotICogQGFjY2Vzc19pZDoJCWRldmljZSBpZCBudW1iZXIKICAqIEBsZW5ndGg6CQlbREVWSUNFXSBudW1iZXIgb2YgZGF0dW1zIGluIHJpbmcKICAqIEBieXRlc19wZXJfZGF0dW06CVtERVZJQ0VdIHNpemUgb2YgaW5kaXZpZHVhbCBkYXR1bSBpbmNsdWRpbmcgdGltZXN0YW1wCiAgKiBAYnBlOgkJW0RFVklDRV0gc2l6ZSBvZiBpbmRpdmlkdWFsIGNoYW5uZWwgdmFsdWUKLSAqIEBsb29wY291bnQ6CQlbSU5URVJOXSBudW1iZXIgb2YgdGltZXMgdGhlIHJpbmcgaGFzIGxvb3BlZAogICogQHNjYW5fZWxfYXR0cnM6CVtEUklWRVJdIGNvbnRyb2wgb2Ygc2NhbiBlbGVtZW50cyBpZiB0aGF0IHNjYW4gbW9kZQogICoJCQljb250cm9sIG1ldGhvZCBpcyB1c2VkCiAgKiBAc2Nhbl9jb3VudDoJW0lOVEVSTl0gdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgY3VycmVudCBzY2FuIG1vZGUKICAqIEBzY2FuX21hc2s6CQlbSU5URVJOXSBiaXRtYXNrIHVzZWQgaW4gbWFza2luZyBzY2FuIG1vZGUgZWxlbWVudHMKICAqIEBzY2FuX3RpbWVzdGFtcDoJW0lOVEVSTl0gZG9lcyB0aGUgc2NhbiBtb2RlIGluY2x1ZGUgYSB0aW1lc3RhbXAKICAqIEBhY2Nlc3NfaGFuZGxlcjoJW0lOVEVSTl0gY2hyZGV2IGFjY2VzcyBoYW5kbGluZwotICogQGV2X2ludDoJCVtJTlRFUk5dIGNocmRldiBpbnRlcmZhY2UgZm9yIHRoZSBldmVudCBjaHJkZXYKLSAqIEBzaGFyZWRfZXZfcG9pbnRlcjoJW0lOVEVSTl0gdGhlIHNoYXJlZCBldmVudCBwb2ludGVyIHRvIGFsbG93IGVzY2FsYXRpb24gb2YKLSAqCQkJZXZlbnRzCiAgKiBAYWNjZXNzOgkJW0RSSVZFUl0gcmluZyBhY2Nlc3MgZnVuY3Rpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUKICAqCQkJaW1wbGVtZW50YXRpb24uCiAgKiBAcHJlZW5hYmxlOgkJW0RSSVZFUl0gZnVuY3Rpb24gdG8gcnVuIHByaW9yIHRvIG1hcmtpbmcgcmluZyBlbmFibGVkCiAgKiBAcG9zdGVuYWJsZToJCVtEUklWRVJdIGZ1bmN0aW9uIHRvIHJ1biBhZnRlciBtYXJraW5nIHJpbmcgZW5hYmxlZAogICogQHByZWRpc2FibGU6CQlbRFJJVkVSXSBmdW5jdGlvbiB0byBydW4gcHJpb3IgdG8gbWFya2luZyByaW5nIGRpc2FibGVkCiAgKiBAcG9zdGRpc2FibGU6CVtEUklWRVJdIGZ1bmN0aW9uIHRvIHJ1biBhZnRlciBtYXJraW5nIHJpbmcgZGlzYWJsZWQKLSAgKiovCisgKiovCiBzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyIHsKLQlzdHJ1Y3QgZGV2aWNlIGRldjsKLQlzdHJ1Y3QgZGV2aWNlIGFjY2Vzc19kZXY7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldjsKLQlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKLQlpbnQJCQkJaWQ7Ci0JaW50CQkJCWFjY2Vzc19pZDsKLQlpbnQJCQkJbGVuZ3RoOwotCWludAkJCQlieXRlc19wZXJfZGF0dW07Ci0JaW50CQkJCWJwZTsKLQlpbnQJCQkJbG9vcGNvdW50OwotCXN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAJCSpzY2FuX2VsX2F0dHJzOwotCWludAkJCQlzY2FuX2NvdW50OwotCXUzMgkJCQlzY2FuX21hc2s7Ci0JYm9vbAkJCQlzY2FuX3RpbWVzdGFtcDsKLQlzdHJ1Y3QgaWlvX2hhbmRsZXIJCWFjY2Vzc19oYW5kbGVyOwotCXN0cnVjdCBpaW9fZXZlbnRfaW50ZXJmYWNlCWV2X2ludDsKLQlzdHJ1Y3QgaWlvX3NoYXJlZF9ldl9wb2ludGVyCXNoYXJlZF9ldl9wb2ludGVyOwotCXN0cnVjdCBpaW9fcmluZ19hY2Nlc3NfZnVuY3MJYWNjZXNzOwotCWludAkJCQkoKnByZWVuYWJsZSkoc3RydWN0IGlpb19kZXYgKik7Ci0JaW50CQkJCSgqcG9zdGVuYWJsZSkoc3RydWN0IGlpb19kZXYgKik7Ci0JaW50CQkJCSgqcHJlZGlzYWJsZSkoc3RydWN0IGlpb19kZXYgKik7Ci0JaW50CQkJCSgqcG9zdGRpc2FibGUpKHN0cnVjdCBpaW9fZGV2ICopOworCXN0cnVjdCBkZXZpY2UJCQkJZGV2OworCXN0cnVjdCBpaW9fZGV2CQkJCSppbmRpb19kZXY7CisJc3RydWN0IG1vZHVsZQkJCQkqb3duZXI7CisJaW50CQkJCQlsZW5ndGg7CisJaW50CQkJCQlieXRlc19wZXJfZGF0dW07CisJaW50CQkJCQlicGU7CisJc3RydWN0IGF0dHJpYnV0ZV9ncm91cAkJCSpzY2FuX2VsX2F0dHJzOworCWludAkJCQkJc2Nhbl9jb3VudDsKKwl1bnNpZ25lZCBsb25nCQkJCXNjYW5fbWFzazsKKwlib29sCQkJCQlzY2FuX3RpbWVzdGFtcDsKKwlzdHJ1Y3QgaWlvX2hhbmRsZXIJCQlhY2Nlc3NfaGFuZGxlcjsKKwljb25zdCBzdHJ1Y3QgaWlvX3JpbmdfYWNjZXNzX2Z1bmNzCSphY2Nlc3M7CisJY29uc3Qgc3RydWN0IGlpb19yaW5nX3NldHVwX29wcwkJKnNldHVwX29wczsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQkJc2Nhbl9lbF9kZXZfYXR0cl9saXN0OwogCisJd2FpdF9xdWV1ZV9oZWFkX3QJCQlwb2xscTsKKwlib29sCQkJCQlzdHVmZnRvcmVhZDsKIH07CiAKIC8qKgpAQCAtMTYxLDE1NCArMTMxLDggQEAKIHsKIAlyaW5nLT5ieXRlc19wZXJfZGF0dW0gPSBieXRlc19wZXJfZGF0dW07CiAJcmluZy0+bGVuZ3RoID0gbGVuZ3RoOwotCXJpbmctPmxvb3Bjb3VudCA9IDA7CiB9CiAKLS8qKgotICogc3RydWN0IGlpb19zY2FuX2VsIC0gYW4gaW5kaXZpZHVhbCBlbGVtZW50IG9mIGEgc2NhbgotICogQGRldl9hdHRyOgkJY29udHJvbCBhdHRyaWJ1dGUgKGlmIGRpcmVjdGx5IGNvbnRyb2xsYWJsZSkKLSAqIEBudW1iZXI6CQl1bmlxdWUgaWRlbnRpZmllciBvZiBlbGVtZW50ICh1c2VkIGZvciBiaXQgbWFzaykKLSAqIEBsYWJlbDoJCXVzZWZ1bCBkYXRhIGZvciB0aGUgc2NhbiBlbCAob2Z0ZW4gcmVnIGFkZHJlc3MpCi0gKiBAc2V0X3N0YXRlOgkJZm9yIHNvbWUgZGV2aWNlcyBkYXRhcmR5IHNpZ25hbHMgYXJlIGdlbmVyYXRlZAotICoJCQlmb3IgYW55IGVuYWJsZWQgbGluZXMuICBUaGlzIGFsbG93cyB1bndhbnRlZCBsaW5lcwotICoJCQl0byBiZSBkaXNhYmxlZCBhbmQgaGVuY2Ugbm90IGdldCBpbiB0aGUgd2F5LgotICoqLwotc3RydWN0IGlpb19zY2FuX2VsIHsKLQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQkJZGV2X2F0dHI7Ci0JdW5zaWduZWQgaW50CQkJbnVtYmVyOwotCXVuc2lnbmVkIGludAkJCWxhYmVsOwotCi0JaW50ICgqc2V0X3N0YXRlKShzdHJ1Y3QgaWlvX3NjYW5fZWwgKnNjYW5lbCwKLQkJCSBzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8sCi0JCQkgYm9vbCBzdGF0ZSk7Ci19OwotCi0jZGVmaW5lIHRvX2lpb19zY2FuX2VsKF9kZXZfYXR0cikJCQkJXAotCWNvbnRhaW5lcl9vZihfZGV2X2F0dHIsIHN0cnVjdCBpaW9fc2Nhbl9lbCwgZGV2X2F0dHIpOwotCi0vKioKLSAqIGlpb19zY2FuX2VsX3N0b3JlKCkgLSBzeXNmcyBzY2FuIGVsZW1lbnQgc2VsZWN0aW9uIGludGVyZmFjZQotICogQGRldjogdGhlIHRhcmdldCBkZXZpY2UKLSAqIEBhdHRyOiB0aGUgZGV2aWNlIGF0dHJpYnV0ZSB0aGF0IGlzIGJlaW5nIHByb2Nlc3NlZAotICogQGJ1ZjogaW5wdXQgZnJvbSB1c2Vyc3BhY2UKLSAqIEBsZW46IGxlbmd0aCBvZiBpbnB1dAotICoKLSAqIEEgZ2VuZXJpYyBmdW5jdGlvbiB1c2VkIHRvIGVuYWJsZSB2YXJpb3VzIHNjYW4gZWxlbWVudHMuICBJbiBzb21lCi0gKiBkZXZpY2VzIGV4cGxpY2l0IHJlYWQgY29tbWFuZHMgZm9yIGVhY2ggY2hhbm5lbCBtZWFuIHRoaXMgaXMgbWVyZWx5Ci0gKiBhIHNvZnR3YXJlIHN3aXRjaC4gIEluIG90aGVycyB0aGlzIG11c3QgYWN0aXZlbHkgZGlzYWJsZSB0aGUgY2hhbm5lbC4KLSAqIENvbXBsZXhpdGllcyBvY2N1ciB3aGVuIHRoaXMgaW50ZXJhY3RzIHdpdGggZGF0YSByZWFkeSB0eXBlIHRyaWdnZXJzCi0gKiB3aGljaCBtYXkgbm90IHJlc2V0IHVubGVzcyBldmVyeSBjaGFubmVsIHRoYXQgaXMgZW5hYmxlZCBpcyBleHBsaWNpdGx5Ci0gKiByZWFkLgotICoqLwotc3NpemVfdCBpaW9fc2Nhbl9lbF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pOwotLyoqCi0gKiBpaW9fc2Nhbl9lbF9zaG93KCkgLQlzeXNmcyBpbnRlcmZhY2UgdG8gcXVlcnkgd2hldGhlciBhIHNjYW4gZWxlbWVudAotICoJCQlpcyBlbmFibGVkIG9yIG5vdAotICogQGRldjogdGhlIHRhcmdldCBkZXZpY2UKLSAqIEBhdHRyOiB0aGUgZGV2aWNlIGF0dHJpYnV0ZSB0aGF0IGlzIGJlaW5nIHByb2Nlc3NlZAotICogQGJ1Zjogb3V0cHV0IGJ1ZmZlcgotICoqLwotc3NpemVfdCBpaW9fc2Nhbl9lbF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkgY2hhciAqYnVmKTsKLQotLyoqCi0gKiBpaW9fc2Nhbl9lbF90c19zdG9yZSgpIC0gc3lzZnMgaW50ZXJmYWNlIHRvIHNldCB3aGV0aGVyIGEgdGltZXN0YW1wIGlzIGluY2x1ZGVkCi0gKgkJCSAgICBpbiB0aGUgc2Nhbi4KLSAqKi8KLXNzaXplX3QgaWlvX3NjYW5fZWxfdHNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKLS8qKgotICogaWlvX3NjYW5fZWxfdHNfc2hvdygpIC0gc3lzZnMgaW50ZXJmYWNlIHRvIHF1ZXJ5IGlmIGEgdGltZXN0YW1wIGlzIGluY2x1ZGVkCi0gKgkJCSAgIGluIHRoZSBzY2FuLgotICoqLwotc3NpemVfdCBpaW9fc2Nhbl9lbF90c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkgICAgY2hhciAqYnVmKTsKLS8qKgotICogSUlPX1NDQU5fRUxfQyAtIGRlY2xhcmUgYW5kIGluaXRpYWxpemUgYSBzY2FuIGVsZW1lbnQgd2l0aCBhIGNvbnRyb2wgZnVuYwotICoKLSAqIEBfbmFtZToJaWRlbnRpZnlpbmcgbmFtZS4gUmVzdWx0aW5nIHN0cnVjdCBpcyBpaW9fc2Nhbl9lbF8jI19uYW1lLAotICoJCXN5c2ZzIGVsZW1lbnQsIF9uYW1lIyNfZW4uCi0gKiBAX251bWJlcjoJdW5pcXVlIGlkIG51bWJlciBmb3IgdGhlIHNjYW4gZWxlbWVudC4KLSAqCQlsZW5ndGggZGV2aWNlcykuCi0gKiBAX2xhYmVsOglpbmRlbnRpZmljYXRpb24gdmFyaWFibGUgdXNlZCBieSBkcml2ZXJzLiAgT2Z0ZW4gYSByZWcgYWRkcmVzcy4KLSAqIEBfY29udHJvbGZ1bmM6IGZ1bmN0aW9uIHVzZWQgdG8gbm90aWZ5IGhhcmR3YXJlIG9mIHdoZXRoZXIgc3RhdGUgY2hhbmdlcwotICoqLwotI2RlZmluZSBfX0lJT19TQ0FOX0VMX0MoX25hbWUsIF9udW1iZXIsIF9sYWJlbCwgX2NvbnRyb2xmdW5jKQlcCi0Jc3RydWN0IGlpb19zY2FuX2VsIGlpb19zY2FuX2VsXyMjX25hbWUgPSB7CQkJXAotCQkuZGV2X2F0dHIgPSBfX0FUVFIoX25hbWUjI19lbiwJCQkJXAotCQkJCSAgIFNfSVJVR08gfCBTX0lXVVNSLAkJCVwKLQkJCQkgICBpaW9fc2Nhbl9lbF9zaG93LAkJCVwKLQkJCQkgICBpaW9fc2Nhbl9lbF9zdG9yZSksCQkJXAotCQkubnVtYmVyID0gIF9udW1iZXIsCQkJCQlcCi0JCS5sYWJlbCA9IF9sYWJlbCwJCQkJCVwKLQkJLnNldF9zdGF0ZSA9IF9jb250cm9sZnVuYywJCQkJXAotCX07CQkJCQkJCQlcCi0Jc3RhdGljIElJT19DT05TVF9BVFRSKF9uYW1lIyNfaW5kZXgsICNfbnVtYmVyKQotCi0jZGVmaW5lIElJT19TQ0FOX0VMX0MoX25hbWUsIF9udW1iZXIsIF9sYWJlbCwgX2NvbnRyb2xmdW5jKQlcCi0JX19JSU9fU0NBTl9FTF9DKF9uYW1lLCBfbnVtYmVyLCBfbGFiZWwsIF9jb250cm9sZnVuYykKLQotI2RlZmluZSBfX0lJT19TQ0FOX05BTUVEX0VMX0MoX25hbWUsIF9zdHJpbmcsIF9udW1iZXIsIF9sYWJlbCwgX2NmKQlcCi0Jc3RydWN0IGlpb19zY2FuX2VsIGlpb19zY2FuX2VsXyMjX25hbWUgPSB7CQkJXAotCQkuZGV2X2F0dHIgPSBfX0FUVFIoX3N0cmluZyMjX2VuLAkJCVwKLQkJCQkgICBTX0lSVUdPIHwgU19JV1VTUiwJCQlcCi0JCQkJICAgaWlvX3NjYW5fZWxfc2hvdywJCQlcCi0JCQkJICAgaWlvX3NjYW5fZWxfc3RvcmUpLAkJCVwKLQkJLm51bWJlciA9ICBfbnVtYmVyLAkJCQkJXAotCQkubGFiZWwgPSBfbGFiZWwsCQkJCQlcCi0JCS5zZXRfc3RhdGUgPSBfY2YsCQkJCQlcCi0JfTsJCQkJCQkJCVwKLQlzdGF0aWMgc3RydWN0IGlpb19jb25zdF9hdHRyIGlpb19jb25zdF9hdHRyXyMjX25hbWUjI19pbmRleCA9IHsJXAotCQkuc3RyaW5nID0gI19udW1iZXIsCQkJCQlcCi0JCS5kZXZfYXR0ciA9IF9fQVRUUihfc3RyaW5nIyNfaW5kZXgsCQkJXAotCQkJCSAgIFNfSVJVR08sIGlpb19yZWFkX2NvbnN0X2F0dHIsIE5VTEwpCVwKLQl9Ci0KLQotI2RlZmluZSBJSU9fU0NBTl9OQU1FRF9FTF9DKF9uYW1lLCBfc3RyaW5nLCBfbnVtYmVyLCBfbGFiZWwsIF9jZikgXAotCV9fSUlPX1NDQU5fTkFNRURfRUxfQyhfbmFtZSwgX3N0cmluZywgX251bWJlciwgX2xhYmVsLCBfY2YpCi0vKioKLSAqIElJT19TQ0FOX0VMX1RJTUVTVEFNUCAtIGRlY2xhcmUgYSBzcGVjaWFsIHNjYW4gZWxlbWVudCBmb3IgdGltZXN0YW1wcwotICogQG51bWJlcjogc3BlY2lmeSB3aGVyZSBpbiB0aGUgc2NhbiBvcmRlciB0aGlzIGlzIHN0b3JlZC4KLSAqCi0gKiBPZGQgb25lIG91dC4gSGFuZGxlZCBzbGlnaHRseSBkaWZmZXJlbnRseSBmcm9tIG90aGVyIHNjYW4gZWxlbWVudHMuCi0gKiovCi0jZGVmaW5lIElJT19TQ0FOX0VMX1RJTUVTVEFNUChudW1iZXIpCQkJCVwKLQlzdHJ1Y3QgaWlvX3NjYW5fZWwgaWlvX3NjYW5fZWxfdGltZXN0YW1wID0gewkJXAotCQkuZGV2X2F0dHIgPSBfX0FUVFIodGltZXN0YW1wX2VuLAkJXAotCQkJCSAgIFNfSVJVR08gfCBTX0lXVVNSLAkJXAotCQkJCSAgIGlpb19zY2FuX2VsX3RzX3Nob3csCQlcCi0JCQkJICAgaWlvX3NjYW5fZWxfdHNfc3RvcmUpLAlcCi0JfTsJCQkJCQkJXAotCXN0YXRpYyBJSU9fQ09OU1RfQVRUUih0aW1lc3RhbXBfaW5kZXgsICNudW1iZXIpCi0KLS8qKgotICogSUlPX0NPTlNUX0FUVFJfU0NBTl9FTF9UWVBFIC0gYXR0ciB0byBzcGVjaWZ5IHRoZSBkYXRhIGZvcm1hdCBvZiBhIHNjYW4gZWwKLSAqIEBuYW1lOiB0aGUgc2NhbiBlbCBuYW1lIChtYXkgYmUgbW9yZSBnZW5lcmFsIGFuZCBjb3ZlciBhIHNldCBvZiBzY2FuIGVsZW1lbnRzCi0gKiBAX3NpZ246IGVpdGhlciBzIG9yIHUgZm9yIHNpZ25lZCBvciB1bnNpZ25lZAotICogQF9iaXRzOiBudW1iZXIgb2YgYWN0dWFsIGJpdHMgb2NjdXBsaWVkIGJ5IHRoZSB2YWx1ZQotICogQF9zdG9yYWdlYml0czogbnVtYmVyIG9mIGJpdHMgX2JpdHMgaXMgcGFkZGVkIHRvIHdoZW4gcmVhZCBvdXQgb2YgYnVmZmVyCi0gKiovCi0jZGVmaW5lIElJT19DT05TVF9BVFRSX1NDQU5fRUxfVFlQRShfbmFtZSwgX3NpZ24sIF9iaXRzLCBfc3RvcmFnZWJpdHMpIFwKLQlJSU9fQ09OU1RfQVRUUihfbmFtZSMjX3R5cGUsICNfc2lnbiNfYml0cyIvIiNfc3RvcmFnZWJpdHMpOwotCi0vKioKLSAqIElJT19DT05TVF9BVFRSX1NDQU5fRUxfVFlQRV9XSVRIX1NISUZUIC0gYXR0ciB0byBzcGVjaWZ5IHRoZSBkYXRhIGZvcm1hdCBvZiBhIHNjYW4gZWwKLSAqIEBuYW1lOiB0aGUgc2NhbiBlbCBuYW1lIChtYXkgYmUgbW9yZSBnZW5lcmFsIGFuZCBjb3ZlciBhIHNldCBvZiBzY2FuIGVsZW1lbnRzCi0gKiBAX3NpZ246IGVpdGhlciBzIG9yIHUgZm9yIHNpZ25lZCBvciB1bnNpZ25lZAotICogQF9iaXRzOiBudW1iZXIgb2YgYWN0dWFsIGJpdHMgb2NjdXBsaWVkIGJ5IHRoZSB2YWx1ZQotICogQF9zdG9yYWdlYml0czogbnVtYmVyIG9mIGJpdHMgX2JpdHMgaXMgcGFkZGVkIHRvIHdoZW4gcmVhZCBvdXQgb2YgYnVmZmVyCi0gKiBAX3NoaWZ0Yml0czogbnVtYmVyIG9mIGJpdHMgX3NoaWZ0Yml0cyB0aGUgcmVzdWx0IG11c3QgYmUgc2hpZnRlZAotICoqLwotI2RlZmluZSBJSU9fQ09OU1RfQVRUUl9TQ0FOX0VMX1RZUEVfV0lUSF9TSElGVChfbmFtZSwgX3NpZ24sIF9iaXRzLCBcCi0JCQkJCSAgICAgICBfc3RvcmFnZWJpdHMsIF9zaGlmdGJpdHMpIFwKLQlJSU9fQ09OU1RfQVRUUihfbmFtZSMjX3R5cGUsICNfc2lnbiNfYml0cyIvIiNfc3RvcmFnZWJpdHMgXAotCQkgICAgICAgIj4+IiNfc2hpZnRiaXRzKTsKLQotI2RlZmluZSBJSU9fU0NBTl9FTF9UWVBFX1NJR05FRCAgICAgICAgICdzJwotI2RlZmluZSBJSU9fU0NBTl9FTF9UWVBFX1VOU0lHTkVEICAgICAgICd1JwotCiAvKgogICogVGhlc2UgYXJlIG1haW5seSBwcm92aWRlZCB0byBhbGxvdyBmb3IgYSBjaGFuZ2Ugb2YgaW1wbGVtZW50YXRpb24gaWYgYSBkZXZpY2UKICAqIGhhcyBhIGxhcmdlIG51bWJlciBvZiBzY2FuIGVsZW1lbnRzCkBAIC0zNzUsNDEgKzE5OSw2IEBACiB9OwogCiAvKioKLSAqIGlpb19zY2FuX21hc2tfY2xlYXIoKSAtIGNsZWFyIGEgcGFydGljdWxhciBlbGVtZW50IGZyb20gdGhlIHNjYW4gbWFzawotICogQHJpbmc6IHRoZSByaW5nIGJ1ZmZlciB3aG9zZSBzY2FuIG1hc2sgd2UgYXJlIGludGVyZXN0ZWQgaW4KLSAqIEBiaXQ6IHRoZSBiaXQgdG8gY2xlYXIKLSAqKi8KLXN0YXRpYyBpbmxpbmUgaW50IGlpb19zY2FuX21hc2tfY2xlYXIoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZywgaW50IGJpdCkKLXsKLQlpZiAoYml0ID4gSUlPX01BWF9TQ0FOX0xFTkdUSCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmluZy0+c2Nhbl9tYXNrICY9IH4oMSA8PCBiaXQpOwotCXJpbmctPnNjYW5fY291bnQtLTsKLQlyZXR1cm4gMDsKLX07Ci0KLS8qKgotICogaWlvX3NjYW5fbWFza19jb3VudF90b19yaWdodCgpIC0gaG93IG1hbnkgc2NhbiBlbGVtZW50cyBvY2N1ciBiZWZvcmUgaGVyZQotICogQHJpbmc6IHRoZSByaW5nIGJ1ZmZlciB3aG9zZSBzY2FuIG1hc2sgd2UgaW50ZXJlc3RlZCBpbgotICogQGJpdDogd2hpY2ggbnVtYmVyIHNjYW4gZWxlbWVudCBpcyB0aGlzCi0gKiovCi1zdGF0aWMgaW5saW5lIGludCBpaW9fc2Nhbl9tYXNrX2NvdW50X3RvX3JpZ2h0KHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcsCi0JCQkJCQlpbnQgYml0KQotewotCWludCBjb3VudCA9IDA7Ci0JaW50IG1hc2sgPSAoMSA8PCBiaXQpOwotCWlmIChiaXQgPiBJSU9fTUFYX1NDQU5fTEVOR1RIKQotCQlyZXR1cm4gLUVJTlZBTDsKLQl3aGlsZSAobWFzaykgewotCQltYXNrID4+PSAxOwotCQlpZiAobWFzayAmIHJpbmctPnNjYW5fbWFzaykKLQkJCWNvdW50Kys7Ci0JfQotCi0JcmV0dXJuIGNvdW50OwotfQotCi0vKioKICAqIGlpb19wdXRfcmluZ19idWZmZXIoKSAtIG5vdGlmeSBkb25lIHdpdGggYnVmZmVyCiAgKiBAcmluZzogdGhlIGJ1ZmZlciB3ZSBhcmUgZG9uZSB3aXRoLgogICoqLwpAQCAtNDE4LDE3ICsyMDcsMTkgQEAKIAlwdXRfZGV2aWNlKCZyaW5nLT5kZXYpOwogfTsKIAotI2RlZmluZSB0b19paW9fcmluZ19idWZmZXIoZCkJCQlcCisjZGVmaW5lIHRvX2lpb19yaW5nX2J1ZmZlcihkKQkJCQlcCiAJY29udGFpbmVyX29mKGQsIHN0cnVjdCBpaW9fcmluZ19idWZmZXIsIGRldikKLSNkZWZpbmUgYWNjZXNzX2Rldl90b19paW9fcmluZ19idWZmZXIoZCkJCQlcCi0JY29udGFpbmVyX29mKGQsIHN0cnVjdCBpaW9fcmluZ19idWZmZXIsIGFjY2Vzc19kZXYpCiAKIC8qKgotICogaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyKCkgLSByZWdpc3RlciB0aGUgYnVmZmVyIHdpdGggSUlPIGNvcmUKKyAqIGlpb19yaW5nX2J1ZmZlcl9yZWdpc3Rlcl9leCgpIC0gcmVnaXN0ZXIgdGhlIGJ1ZmZlciB3aXRoIElJTyBjb3JlCiAgKiBAcmluZzogdGhlIGJ1ZmZlciB0byBiZSByZWdpc3RlcmVkCiAgKiBAaWQ6IHRoZSBpZCBvZiB0aGUgYnVmZmVyICh0eXBpY2FsbHkgMCkKICAqKi8KLWludCBpaW9fcmluZ19idWZmZXJfcmVnaXN0ZXIoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZywgaW50IGlkKTsKK2ludCBpaW9fcmluZ19idWZmZXJfcmVnaXN0ZXJfZXgoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZywgaW50IGlkLAorCQkJCWNvbnN0IHN0cnVjdCBpaW9fY2hhbl9zcGVjICpjaGFubmVscywKKwkJCQlpbnQgbnVtX2NoYW5uZWxzKTsKKwordm9pZCBpaW9fcmluZ19hY2Nlc3NfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCiAvKioKICAqIGlpb19yaW5nX2J1ZmZlcl91bnJlZ2lzdGVyKCkgLSB1bnJlZ2lzdGVyIHRoZSBidWZmZXIgZnJvbSBJSU8gY29yZQpAQCAtNDc2LDExICsyNjcsMTkgQEAKICNkZWZpbmUgSUlPX1JJTkdfRU5BQkxFX0FUVFIgREVWSUNFX0FUVFIoZW5hYmxlLCBTX0lSVUdPIHwgU19JV1VTUiwgXAogCQkJCQkgaWlvX3Nob3dfcmluZ19lbmFibGUsCQlcCiAJCQkJCSBpaW9fc3RvcmVfcmluZ19lbmFibGUpCisKK2ludCBpaW9fc3dfcmluZ19wcmVlbmFibGUoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7CisKICNlbHNlIC8qIENPTkZJR19JSU9fUklOR19CVUZGRVIgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGlpb19yaW5nX2J1ZmZlcl9yZWdpc3RlcihzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nLCBpbnQgaWQpCisKK3N0YXRpYyBpbmxpbmUgaW50IGlpb19yaW5nX2J1ZmZlcl9yZWdpc3Rlcl9leChzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nLAorCQkJCQkgICAgICBpbnQgaWQsCisJCQkJCSAgICAgIHN0cnVjdCBpaW9fY2hhbl9zcGVjICpjaGFubmVscywKKwkJCQkJICAgICAgaW50IG51bV9jaGFubmVscykKIHsKIAlyZXR1cm4gMDsKLX07Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKQoge307CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vcmluZ19zdy5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9yaW5nX3N3LmMKaW5kZXggYjcxY2UzOS4uZmViODRlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9yaW5nX3N3LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9yaW5nX3N3LmMKQEAgLTEyLDEwICsxMiw0MSBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgInJpbmdfc3cuaCIKICNpbmNsdWRlICJ0cmlnZ2VyLmgiCiAKKy8qKgorICogc3RydWN0IGlpb19zd19yaW5nX2J1ZmZlciAtIHNvZnR3YXJlIHJpbmcgYnVmZmVyCisgKiBAYnVmOgkJZ2VuZXJpYyByaW5nIGJ1ZmZlciBlbGVtZW50cworICogQGRhdGE6CQl0aGUgcmluZyBidWZmZXIgbWVtb3J5CisgKiBAcmVhZF9wOgkJcmVhZCBwb2ludGVyIChvbGRlc3QgYXZhaWxhYmxlKQorICogQHdyaXRlX3A6CQl3cml0ZSBwb2ludGVyCisgKiBAbGFzdF93cml0dGVuX3A6CXJlYWQgcG9pbnRlciAobmV3ZXN0IGF2YWlsYWJsZSkKKyAqIEBoYWxmX3A6CQloYWxmIGJ1ZmZlciBsZW5ndGggYmVoaW5kIHdyaXRlX3AgKGV2ZW50IGdlbmVyYXRpb24pCisgKiBAdXNlX2NvdW50OgkJcmVmZXJlbmNlIGNvdW50IHRvIHByZXZlbnQgcmVzaXppbmcgd2hlbiBpbiB1c2UKKyAqIEB1cGRhdGVfbmVlZGVkOglmbGFnIHRvIGluZGljYXRlZCBjaGFuZ2UgaW4gc2l6ZSByZXF1ZXN0ZWQKKyAqIEB1c2VfbG9jazoJCWxvY2sgdG8gcHJldmVudCBjaGFuZ2UgaW4gc2l6ZSB3aGVuIGluIHVzZQorICoKKyAqIE5vdGUgdGhhdCB0aGUgZmlyc3QgZWxlbWVudCBvZiBhbGwgcmluZyBidWZmZXJzIG11c3QgYmUgYQorICogc3RydWN0IGlpb19yaW5nX2J1ZmZlci4KKyoqLworc3RydWN0IGlpb19zd19yaW5nX2J1ZmZlciB7CisJc3RydWN0IGlpb19yaW5nX2J1ZmZlciAgYnVmOworCXVuc2lnbmVkIGNoYXIJCSpkYXRhOworCXVuc2lnbmVkIGNoYXIJCSpyZWFkX3A7CisJdW5zaWduZWQgY2hhcgkJKndyaXRlX3A7CisJdW5zaWduZWQgY2hhcgkJKmxhc3Rfd3JpdHRlbl9wOworCS8qIHVzZWQgdG8gYWN0IGFzIGEgcG9pbnQgYXQgd2hpY2ggdG8gc2lnbmFsIGFuIGV2ZW50ICovCisJdW5zaWduZWQgY2hhcgkJKmhhbGZfcDsKKwlpbnQJCQl1c2VfY291bnQ7CisJaW50CQkJdXBkYXRlX25lZWRlZDsKKwlzcGlubG9ja190CQl1c2VfbG9jazsKK307CisKKyNkZWZpbmUgaWlvX3RvX3N3X3JpbmcocikgY29udGFpbmVyX29mKHIsIHN0cnVjdCBpaW9fc3dfcmluZ19idWZmZXIsIGJ1ZikKKwogc3RhdGljIGlubGluZSBpbnQgX19paW9fYWxsb2NhdGVfc3dfcmluZ19idWZmZXIoc3RydWN0IGlpb19zd19yaW5nX2J1ZmZlciAqcmluZywKIAkJCQkJCWludCBieXRlc19wZXJfZGF0dW0sIGludCBsZW5ndGgpCiB7CkBAIC00MCwyMyArNzEsMjEgQEAKIAlrZnJlZShyaW5nLT5kYXRhKTsKIH0KIAotdm9pZCBpaW9fbWFya19zd19yYl9pbl91c2Uoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcikKK3N0YXRpYyB2b2lkIGlpb19tYXJrX3N3X3JiX2luX3VzZShzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyKQogewogCXN0cnVjdCBpaW9fc3dfcmluZ19idWZmZXIgKnJpbmcgPSBpaW9fdG9fc3dfcmluZyhyKTsKIAlzcGluX2xvY2soJnJpbmctPnVzZV9sb2NrKTsKIAlyaW5nLT51c2VfY291bnQrKzsKIAlzcGluX3VubG9jaygmcmluZy0+dXNlX2xvY2spOwogfQotRVhQT1JUX1NZTUJPTChpaW9fbWFya19zd19yYl9pbl91c2UpOwogCi12b2lkIGlpb191bm1hcmtfc3dfcmJfaW5fdXNlKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnIpCitzdGF0aWMgdm9pZCBpaW9fdW5tYXJrX3N3X3JiX2luX3VzZShzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyKQogewogCXN0cnVjdCBpaW9fc3dfcmluZ19idWZmZXIgKnJpbmcgPSBpaW9fdG9fc3dfcmluZyhyKTsKIAlzcGluX2xvY2soJnJpbmctPnVzZV9sb2NrKTsKIAlyaW5nLT51c2VfY291bnQtLTsKIAlzcGluX3VubG9jaygmcmluZy0+dXNlX2xvY2spOwogfQotRVhQT1JUX1NZTUJPTChpaW9fdW5tYXJrX3N3X3JiX2luX3VzZSk7CiAKIAogLyogUmluZyBidWZmZXIgcmVsYXRlZCBmdW5jdGlvbmFsaXR5ICovCkBAIC02OCw3ICs5Nyw2IEBACiAJCQkJdW5zaWduZWQgY2hhciAqZGF0YSwgczY0IHRpbWVzdGFtcCkKIHsKIAlpbnQgcmV0ID0gMDsKLQlpbnQgY29kZTsKIAl1bnNpZ25lZCBjaGFyICp0ZW1wX3B0ciwgKmNoYW5nZV90ZXN0X3B0cjsKIAogCS8qIGluaXRpYWwgc3RvcmUgKi8KQEAgLTEyMywxNCArMTUxLDYgQEAKIAkJICovCiAJCWlmIChjaGFuZ2VfdGVzdF9wdHIgPT0gcmluZy0+cmVhZF9wKQogCQkJcmluZy0+cmVhZF9wID0gdGVtcF9wdHI7Ci0KLQkJc3Bpbl9sb2NrKCZyaW5nLT5idWYuc2hhcmVkX2V2X3BvaW50ZXIubG9jayk7Ci0KLQkJcmV0ID0gaWlvX3B1c2hfb3JfZXNjYWxsYXRlX3JpbmdfZXZlbnQoJnJpbmctPmJ1ZiwKLQkJCSAgICAgICBJSU9fRVZFTlRfQ09ERV9SSU5HXzEwMF9GVUxMLCB0aW1lc3RhbXApOwotCQlzcGluX3VubG9jaygmcmluZy0+YnVmLnNoYXJlZF9ldl9wb2ludGVyLmxvY2spOwotCQlpZiAocmV0KQotCQkJZ290byBlcnJvcl9yZXQ7CiAJfQogCS8qIGludmVzdGlnYXRlIGlmIG91ciBldmVudCBiYXJyaWVyIGhhcyBiZWVuIHBhc3NlZCAqLwogCS8qIFRoZXJlIGFyZSBkZWZpbml0ZSAnaXNzdWVzJyB3aXRoIHRoaXMgYW5kIGNoYW5jZXMgb2YKQEAgLTE0MCw0MSArMTYwLDM1IEBACiAJaWYgKHJpbmctPmhhbGZfcCA9PSByaW5nLT5kYXRhICsgcmluZy0+YnVmLmxlbmd0aCpyaW5nLT5idWYuYnl0ZXNfcGVyX2RhdHVtKQogCQlyaW5nLT5oYWxmX3AgPSByaW5nLT5kYXRhOwogCWlmIChyaW5nLT5oYWxmX3AgPT0gcmluZy0+cmVhZF9wKSB7Ci0JCXNwaW5fbG9jaygmcmluZy0+YnVmLnNoYXJlZF9ldl9wb2ludGVyLmxvY2spOwotCQljb2RlID0gSUlPX0VWRU5UX0NPREVfUklOR181MF9GVUxMOwotCQlyZXQgPSBfX2lpb19wdXNoX2V2ZW50KCZyaW5nLT5idWYuZXZfaW50LAotCQkJCSAgICAgICBjb2RlLAotCQkJCSAgICAgICB0aW1lc3RhbXAsCi0JCQkJICAgICAgICZyaW5nLT5idWYuc2hhcmVkX2V2X3BvaW50ZXIpOwotCQlzcGluX3VubG9jaygmcmluZy0+YnVmLnNoYXJlZF9ldl9wb2ludGVyLmxvY2spOworCQlyaW5nLT5idWYuc3R1ZmZ0b3JlYWQgPSB0cnVlOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnJpbmctPmJ1Zi5wb2xscSk7CiAJfQotZXJyb3JfcmV0OgogCXJldHVybiByZXQ7CiB9CiAKLWludCBpaW9fcmlwX3N3X3JiKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnIsCi0JCSAgc2l6ZV90IGNvdW50LCBjaGFyIF9fdXNlciAqYnVmLCBpbnQgKmRlYWRfb2Zmc2V0KQorc3RhdGljIGludCBpaW9fcmVhZF9maXJzdF9uX3N3X3JiKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnIsCisJCQkJICBzaXplX3QgbiwgY2hhciBfX3VzZXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgaWlvX3N3X3JpbmdfYnVmZmVyICpyaW5nID0gaWlvX3RvX3N3X3Jpbmcocik7CiAKIAl1OCAqaW5pdGlhbF9yZWFkX3AsICppbml0aWFsX3dyaXRlX3AsICpjdXJyZW50X3JlYWRfcCwgKmVuZF9yZWFkX3A7CiAJdTggKmRhdGE7Ci0JaW50IHJldCwgbWF4X2NvcGllZDsKLQlpbnQgYnl0ZXNfdG9fcmlwOworCWludCByZXQsIG1heF9jb3BpZWQsIGJ5dGVzX3RvX3JpcCwgZGVhZF9vZmZzZXQ7CiAKIAkvKiBBIHVzZXJzcGFjZSBwcm9ncmFtIGhhcyBwcm9iYWJseSBtYWRlIGFuIGVycm9yIGlmIGl0IHRyaWVzIHRvCiAJICogIHJlYWQgc29tZXRoaW5nIHRoYXQgaXMgbm90IGEgd2hvbGUgbnVtYmVyIG9mIGJwZHMuCiAJICogUmV0dXJuIGFuIGVycm9yLgogCSAqLwotCWlmIChjb3VudCAlIHJpbmctPmJ1Zi5ieXRlc19wZXJfZGF0dW0pIHsKKwlpZiAobiAlIHJpbmctPmJ1Zi5ieXRlc19wZXJfZGF0dW0pIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiUmluZyBidWZmZXIgcmVhZCByZXF1ZXN0IG5vdCB3aG9sZSBudW1iZXIgb2YiCiAJCSAgICAgICAic2FtcGxlczogUmVxdWVzdCBieXRlcyAlemQsIEN1cnJlbnQgYnl0ZXMgcGVyIGRhdHVtICVkXG4iLAotCQkgICAgICAgY291bnQsIHJpbmctPmJ1Zi5ieXRlc19wZXJfZGF0dW0pOworCQkgICAgICAgbiwgcmluZy0+YnVmLmJ5dGVzX3Blcl9kYXR1bSk7CiAJCWdvdG8gZXJyb3JfcmV0OwogCX0KIAkvKiBMaW1pdCBzaXplIHRvIHdob2xlIG9mIHJpbmcgYnVmZmVyICovCi0JYnl0ZXNfdG9fcmlwID0gbWluKChzaXplX3QpKHJpbmctPmJ1Zi5ieXRlc19wZXJfZGF0dW0qcmluZy0+YnVmLmxlbmd0aCksIGNvdW50KTsKKwlieXRlc190b19yaXAgPSBtaW4oKHNpemVfdCkocmluZy0+YnVmLmJ5dGVzX3Blcl9kYXR1bSpyaW5nLT5idWYubGVuZ3RoKSwKKwkJCSAgIG4pOwogCiAJZGF0YSA9IGttYWxsb2MoYnl0ZXNfdG9fcmlwLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGF0YSA9PSBOVUxMKSB7CkBAIC0yNDAsOSArMjU0LDkgQEAKIAljdXJyZW50X3JlYWRfcCA9IHJpbmctPnJlYWRfcDsKIAogCWlmIChpbml0aWFsX3JlYWRfcCA8PSBjdXJyZW50X3JlYWRfcCkKLQkJKmRlYWRfb2Zmc2V0ID0gY3VycmVudF9yZWFkX3AgLSBpbml0aWFsX3JlYWRfcDsKKwkJZGVhZF9vZmZzZXQgPSBjdXJyZW50X3JlYWRfcCAtIGluaXRpYWxfcmVhZF9wOwogCWVsc2UKLQkJKmRlYWRfb2Zmc2V0ID0gcmluZy0+YnVmLmxlbmd0aCpyaW5nLT5idWYuYnl0ZXNfcGVyX2RhdHVtCisJCWRlYWRfb2Zmc2V0ID0gcmluZy0+YnVmLmxlbmd0aCpyaW5nLT5idWYuYnl0ZXNfcGVyX2RhdHVtCiAJCQktIChpbml0aWFsX3JlYWRfcCAtIGN1cnJlbnRfcmVhZF9wKTsKIAogCS8qIHBvc3NpYmxlIGlzc3VlIGlmIHRoZSBpbml0aWFsIHdyaXRlIGhhcyBiZWVuIGxhcHBlZCBvciBpbmRlZWQKQEAgLTI1MCw3ICsyNjQsNyBAQAogCS8qIE5vIHZhbGlkIGRhdGEgcmVhZC4KIAkgKiBJbiB0aGlzIGNhc2UgdGhlIHJlYWQgcG9pbnRlciBpcyBhbHJlYWR5IGNvcnJlY3QgaGF2aW5nIGJlZW4KIAkgKiBwdXNoZWQgZnVydGhlciB0aGFuIHdlIHdvdWxkIGxvb2suICovCi0JaWYgKG1heF9jb3BpZWQgLSAqZGVhZF9vZmZzZXQgPCAwKSB7CisJaWYgKG1heF9jb3BpZWQgLSBkZWFkX29mZnNldCA8IDApIHsKIAkJcmV0ID0gMDsKIAkJZ290byBlcnJvcl9mcmVlX2RhdGFfY3B5OwogCX0KQEAgLTI2NiwyNiArMjgwLDMwIEBACiAJd2hpbGUgKHJpbmctPnJlYWRfcCAhPSBlbmRfcmVhZF9wKQogCQlyaW5nLT5yZWFkX3AgPSBlbmRfcmVhZF9wOwogCi0JcmV0ID0gbWF4X2NvcGllZCAtICpkZWFkX29mZnNldDsKKwlyZXQgPSBtYXhfY29waWVkIC0gZGVhZF9vZmZzZXQ7CiAKLQlpZiAoY29weV90b191c2VyKGJ1ZiwgZGF0YSArICpkZWFkX29mZnNldCwgcmV0KSkgIHsKKwlpZiAoY29weV90b191c2VyKGJ1ZiwgZGF0YSArIGRlYWRfb2Zmc2V0LCByZXQpKSAgewogCQlyZXQgPSAgLUVGQVVMVDsKIAkJZ290byBlcnJvcl9mcmVlX2RhdGFfY3B5OwogCX0KKworCWlmIChieXRlc190b19yaXAgPj0gcmluZy0+YnVmLmxlbmd0aCpyaW5nLT5idWYuYnl0ZXNfcGVyX2RhdHVtLzIpCisJCXJpbmctPmJ1Zi5zdHVmZnRvcmVhZCA9IDA7CisKIGVycm9yX2ZyZWVfZGF0YV9jcHk6CiAJa2ZyZWUoZGF0YSk7CiBlcnJvcl9yZXQ6CiAKIAlyZXR1cm4gcmV0OwogfQotRVhQT1JUX1NZTUJPTChpaW9fcmlwX3N3X3JiKTsKIAotaW50IGlpb19zdG9yZV90b19zd19yYihzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyLCB1OCAqZGF0YSwgczY0IHRpbWVzdGFtcCkKK3N0YXRpYyBpbnQgaWlvX3N0b3JlX3RvX3N3X3JiKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnIsCisJCQkgICAgICB1OCAqZGF0YSwKKwkJCSAgICAgIHM2NCB0aW1lc3RhbXApCiB7CiAJc3RydWN0IGlpb19zd19yaW5nX2J1ZmZlciAqcmluZyA9IGlpb190b19zd19yaW5nKHIpOwogCXJldHVybiBpaW9fc3RvcmVfdG9fc3dfcmluZyhyaW5nLCBkYXRhLCB0aW1lc3RhbXApOwogfQotRVhQT1JUX1NZTUJPTChpaW9fc3RvcmVfdG9fc3dfcmIpOwogCiBzdGF0aWMgaW50IGlpb19yZWFkX2xhc3RfZnJvbV9zd19yaW5nKHN0cnVjdCBpaW9fc3dfcmluZ19idWZmZXIgKnJpbmcsCiAJCQkJICAgICAgdW5zaWduZWQgY2hhciAqZGF0YSkKQEAgLTMwOSwxOCArMzI3LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBpaW9fcmVhZF9sYXN0X2Zyb21fc3dfcmIoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqciwKK3N0YXRpYyBpbnQgaWlvX3JlYWRfbGFzdF9mcm9tX3N3X3JiKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnIsCiAJCQkgICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEpCiB7CiAJcmV0dXJuIGlpb19yZWFkX2xhc3RfZnJvbV9zd19yaW5nKGlpb190b19zd19yaW5nKHIpLCBkYXRhKTsKIH0KLUVYUE9SVF9TWU1CT0woaWlvX3JlYWRfbGFzdF9mcm9tX3N3X3JiKTsKIAotaW50IGlpb19yZXF1ZXN0X3VwZGF0ZV9zd19yYihzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyKQorc3RhdGljIGludCBpaW9fcmVxdWVzdF91cGRhdGVfc3dfcmIoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcikKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgaWlvX3N3X3JpbmdfYnVmZmVyICpyaW5nID0gaWlvX3RvX3N3X3Jpbmcocik7CiAKKwlyLT5zdHVmZnRvcmVhZCA9IGZhbHNlOwogCXNwaW5fbG9jaygmcmluZy0+dXNlX2xvY2spOwogCWlmICghcmluZy0+dXBkYXRlX25lZWRlZCkKIAkJZ290byBlcnJvcl9yZXQ7CkBAIC0zMzUsNTQgKzM1Myw0OSBAQAogCXNwaW5fdW5sb2NrKCZyaW5nLT51c2VfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0woaWlvX3JlcXVlc3RfdXBkYXRlX3N3X3JiKTsKIAotaW50IGlpb19nZXRfYnl0ZXNfcGVyX2RhdHVtX3N3X3JiKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnIpCitzdGF0aWMgaW50IGlpb19nZXRfYnl0ZXNfcGVyX2RhdHVtX3N3X3JiKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnIpCiB7CiAJc3RydWN0IGlpb19zd19yaW5nX2J1ZmZlciAqcmluZyA9IGlpb190b19zd19yaW5nKHIpOwogCXJldHVybiByaW5nLT5idWYuYnl0ZXNfcGVyX2RhdHVtOwogfQotRVhQT1JUX1NZTUJPTChpaW9fZ2V0X2J5dGVzX3Blcl9kYXR1bV9zd19yYik7CiAKLWludCBpaW9fc2V0X2J5dGVzX3Blcl9kYXR1bV9zd19yYihzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyLCBzaXplX3QgYnBkKQorc3RhdGljIGludCBpaW9fc2V0X2J5dGVzX3Blcl9kYXR1bV9zd19yYihzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyLCBzaXplX3QgYnBkKQogewogCWlmIChyLT5ieXRlc19wZXJfZGF0dW0gIT0gYnBkKSB7CiAJCXItPmJ5dGVzX3Blcl9kYXR1bSA9IGJwZDsKLQkJaWYgKHItPmFjY2Vzcy5tYXJrX3BhcmFtX2NoYW5nZSkKLQkJCXItPmFjY2Vzcy5tYXJrX3BhcmFtX2NoYW5nZShyKTsKKwkJaWYgKHItPmFjY2Vzcy0+bWFya19wYXJhbV9jaGFuZ2UpCisJCQlyLT5hY2Nlc3MtPm1hcmtfcGFyYW1fY2hhbmdlKHIpOwogCX0KIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woaWlvX3NldF9ieXRlc19wZXJfZGF0dW1fc3dfcmIpOwogCi1pbnQgaWlvX2dldF9sZW5ndGhfc3dfcmIoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcikKK3N0YXRpYyBpbnQgaWlvX2dldF9sZW5ndGhfc3dfcmIoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcikKIHsKIAlyZXR1cm4gci0+bGVuZ3RoOwogfQotRVhQT1JUX1NZTUJPTChpaW9fZ2V0X2xlbmd0aF9zd19yYik7CiAKLWludCBpaW9fc2V0X2xlbmd0aF9zd19yYihzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyLCBpbnQgbGVuZ3RoKQorc3RhdGljIGludCBpaW9fc2V0X2xlbmd0aF9zd19yYihzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyLCBpbnQgbGVuZ3RoKQogewogCWlmIChyLT5sZW5ndGggIT0gbGVuZ3RoKSB7CiAJCXItPmxlbmd0aCA9IGxlbmd0aDsKLQkJaWYgKHItPmFjY2Vzcy5tYXJrX3BhcmFtX2NoYW5nZSkKLQkJCXItPmFjY2Vzcy5tYXJrX3BhcmFtX2NoYW5nZShyKTsKKwkJaWYgKHItPmFjY2Vzcy0+bWFya19wYXJhbV9jaGFuZ2UpCisJCQlyLT5hY2Nlc3MtPm1hcmtfcGFyYW1fY2hhbmdlKHIpOwogCX0KIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woaWlvX3NldF9sZW5ndGhfc3dfcmIpOwogCi1pbnQgaWlvX21hcmtfdXBkYXRlX25lZWRlZF9zd19yYihzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyKQorc3RhdGljIGludCBpaW9fbWFya191cGRhdGVfbmVlZGVkX3N3X3JiKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnIpCiB7CiAJc3RydWN0IGlpb19zd19yaW5nX2J1ZmZlciAqcmluZyA9IGlpb190b19zd19yaW5nKHIpOwogCXJpbmctPnVwZGF0ZV9uZWVkZWQgPSB0cnVlOwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChpaW9fbWFya191cGRhdGVfbmVlZGVkX3N3X3JiKTsKIAogc3RhdGljIHZvaWQgaWlvX3N3X3JiX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnIgPSB0b19paW9fcmluZ19idWZmZXIoZGV2KTsKKwlpaW9fcmluZ19hY2Nlc3NfcmVsZWFzZSgmci0+ZGV2KTsKIAlrZnJlZShpaW9fdG9fc3dfcmluZyhyKSk7CiB9CiAKQEAgLTQyMCwxMyArNDMzLDEyIEBACiAJcmluZyA9IGt6YWxsb2Moc2l6ZW9mICpyaW5nLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXJpbmcpCiAJCXJldHVybiBOVUxMOworCXJpbmctPnVwZGF0ZV9uZWVkZWQgPSB0cnVlOwogCWJ1ZiA9ICZyaW5nLT5idWY7CiAJaWlvX3JpbmdfYnVmZmVyX2luaXQoYnVmLCBpbmRpb19kZXYpOwogCV9faWlvX2luaXRfc3dfcmluZ19idWZmZXIocmluZyk7CiAJYnVmLT5kZXYudHlwZSA9ICZpaW9fc3dfcmluZ190eXBlOwotCWRldmljZV9pbml0aWFsaXplKCZidWYtPmRldik7CiAJYnVmLT5kZXYucGFyZW50ID0gJmluZGlvX2Rldi0+ZGV2OwotCWJ1Zi0+ZGV2LmJ1cyA9ICZpaW9fYnVzX3R5cGU7CiAJZGV2X3NldF9kcnZkYXRhKCZidWYtPmRldiwgKHZvaWQgKilidWYpOwogCiAJcmV0dXJuIGJ1ZjsKQEAgLTQ0MCw3MyArNDUyLDIwIEBACiB9CiBFWFBPUlRfU1lNQk9MKGlpb19zd19yYl9mcmVlKTsKIAotaW50IGlpb19zd19yaW5nX3ByZWVuYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQotewotCXN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcgPSBpbmRpb19kZXYtPnJpbmc7Ci0Jc2l6ZV90IHNpemU7Ci0JZGV2X2RiZygmaW5kaW9fZGV2LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOwotCS8qIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc2NhbiBlbGVtZW50cyBlbmFibGVkLCBpZiBub3QgZmFpbCovCi0JaWYgKCEocmluZy0+c2Nhbl9jb3VudCB8fCByaW5nLT5zY2FuX3RpbWVzdGFtcCkpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmIChyaW5nLT5zY2FuX3RpbWVzdGFtcCkKLQkJaWYgKHJpbmctPnNjYW5fY291bnQpCi0JCQkvKiBUaW1lc3RhbXAgKGFsaWduZWQgdG8gczY0KSBhbmQgZGF0YSAqLwotCQkJc2l6ZSA9ICgoKHJpbmctPnNjYW5fY291bnQgKiByaW5nLT5icGUpCi0JCQkJCSsgc2l6ZW9mKHM2NCkgLSAxKQotCQkJCSYgfihzaXplb2YoczY0KSAtIDEpKQotCQkJCSsgc2l6ZW9mKHM2NCk7Ci0JCWVsc2UgLyogVGltZXN0YW1wIG9ubHkgICovCi0JCQlzaXplID0gc2l6ZW9mKHM2NCk7Ci0JZWxzZSAvKiBEYXRhIG9ubHkgKi8KLQkJc2l6ZSA9IHJpbmctPnNjYW5fY291bnQgKiByaW5nLT5icGU7Ci0JcmluZy0+YWNjZXNzLnNldF9ieXRlc19wZXJfZGF0dW0ocmluZywgc2l6ZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woaWlvX3N3X3JpbmdfcHJlZW5hYmxlKTsKLQotdm9pZCBpaW9fc3dfdHJpZ2dlcl9iaF90b19yaW5nKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29ya19zKQotewotCXN0cnVjdCBpaW9fc3dfcmluZ19oZWxwZXJfc3RhdGUgKnN0Ci0JCT0gY29udGFpbmVyX29mKHdvcmtfcywgc3RydWN0IGlpb19zd19yaW5nX2hlbHBlcl9zdGF0ZSwKLQkJCXdvcmtfdHJpZ2dlcl90b19yaW5nKTsKLQlzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nID0gc3QtPmluZGlvX2Rldi0+cmluZzsKLQlpbnQgbGVuID0gMDsKLQlzaXplX3QgZGF0YXNpemUgPSByaW5nLT5hY2Nlc3MuZ2V0X2J5dGVzX3Blcl9kYXR1bShyaW5nKTsKLQljaGFyICpkYXRhID0ga21hbGxvYyhkYXRhc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoZGF0YSA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoc3QtPmluZGlvX2Rldi0+ZGV2LnBhcmVudCwKLQkJCSJtZW1vcnkgYWxsb2MgZmFpbGVkIGluIHJpbmcgYmgiKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChyaW5nLT5zY2FuX2NvdW50KQotCQlsZW4gPSBzdC0+Z2V0X3JpbmdfZWxlbWVudChzdCwgZGF0YSk7Ci0KLQkgIC8qIEd1YXJhbnRlZWQgdG8gYmUgYWxpZ25lZCB3aXRoIDggYnl0ZSBib3VuZGFyeSAqLwotCWlmIChyaW5nLT5zY2FuX3RpbWVzdGFtcCkKLQkJKihzNjQgKikoKChwaHlzX2FkZHJfdClkYXRhICsgbGVuCi0JCQkJKyBzaXplb2YoczY0KSAtIDEpICYgfihzaXplb2YoczY0KSAtIDEpKQotCQkJPSBzdC0+bGFzdF90aW1lc3RhbXA7Ci0JcmluZy0+YWNjZXNzLnN0b3JlX3RvKHJpbmcsCi0JCQkodTggKilkYXRhLAotCQkJc3QtPmxhc3RfdGltZXN0YW1wKTsKLQotCWlpb190cmlnZ2VyX25vdGlmeV9kb25lKHN0LT5pbmRpb19kZXYtPnRyaWcpOwotCWtmcmVlKGRhdGEpOwotCi0JcmV0dXJuOwotfQotRVhQT1JUX1NZTUJPTChpaW9fc3dfdHJpZ2dlcl9iaF90b19yaW5nKTsKLQotdm9pZCBpaW9fc3dfcG9sbF9mdW5jX3RoKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsIHM2NCB0aW1lKQotewlzdHJ1Y3QgaWlvX3N3X3JpbmdfaGVscGVyX3N0YXRlICpoCi0JCT0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOwotCWgtPmxhc3RfdGltZXN0YW1wID0gdGltZTsKLQlzY2hlZHVsZV93b3JrKCZoLT53b3JrX3RyaWdnZXJfdG9fcmluZyk7Ci19Ci1FWFBPUlRfU1lNQk9MKGlpb19zd19wb2xsX2Z1bmNfdGgpOworY29uc3Qgc3RydWN0IGlpb19yaW5nX2FjY2Vzc19mdW5jcyByaW5nX3N3X2FjY2Vzc19mdW5jcyA9IHsKKwkubWFya19pbl91c2UgPSAmaWlvX21hcmtfc3dfcmJfaW5fdXNlLAorCS51bm1hcmtfaW5fdXNlID0gJmlpb191bm1hcmtfc3dfcmJfaW5fdXNlLAorCS5zdG9yZV90byA9ICZpaW9fc3RvcmVfdG9fc3dfcmIsCisJLnJlYWRfbGFzdCA9ICZpaW9fcmVhZF9sYXN0X2Zyb21fc3dfcmIsCisJLnJlYWRfZmlyc3RfbiA9ICZpaW9fcmVhZF9maXJzdF9uX3N3X3JiLAorCS5tYXJrX3BhcmFtX2NoYW5nZSA9ICZpaW9fbWFya191cGRhdGVfbmVlZGVkX3N3X3JiLAorCS5yZXF1ZXN0X3VwZGF0ZSA9ICZpaW9fcmVxdWVzdF91cGRhdGVfc3dfcmIsCisJLmdldF9ieXRlc19wZXJfZGF0dW0gPSAmaWlvX2dldF9ieXRlc19wZXJfZGF0dW1fc3dfcmIsCisJLnNldF9ieXRlc19wZXJfZGF0dW0gPSAmaWlvX3NldF9ieXRlc19wZXJfZGF0dW1fc3dfcmIsCisJLmdldF9sZW5ndGggPSAmaWlvX2dldF9sZW5ndGhfc3dfcmIsCisJLnNldF9sZW5ndGggPSAmaWlvX3NldF9sZW5ndGhfc3dfcmIsCit9OworRVhQT1JUX1NZTUJPTChyaW5nX3N3X2FjY2Vzc19mdW5jcyk7CiAKIE1PRFVMRV9ERVNDUklQVElPTigiSW5kdXN0cmlhbGlvIEkvTyBzb2Z0d2FyZSByaW5nIGJ1ZmZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9yaW5nX3N3LmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL3Jpbmdfc3cuaAppbmRleCAxMzM0MWMxZS4uMTUyNzE2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9yaW5nX3N3LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9yaW5nX3N3LmgKQEAgLTIzLDIwNSArMjMsMTMgQEAKIAogI2lmbmRlZiBfSUlPX1JJTkdfU1dfSF8KICNkZWZpbmUgX0lJT19SSU5HX1NXX0hfCi0vKiBORUVEUyBDT01NRU5UUyAqLwotLyogVGhlIGludGVudGlvbiBpcyB0aGF0IHRoaXMgc2hvdWxkIGJlIGEgc2VwYXJhdGUgbW9kdWxlIGZyb20gdGhlIGlpbyBjb3JlLgotICogVGhpcyBpcyBhIGJpdCBsaWtlIHN1cHBvcnRpbmcgYWxnb3JpdGhtcyBkZXBlbmRlbnQgb24gd2hhdCB0aGUgZGV2aWNlCi0gKiBkcml2ZXIgcmVxdWVzdHMgLSBzb21lIG1heSBzdXBwb3J0IG11bHRpcGxlIG9wdGlvbnMgKi8KLQotCi0jaW5jbHVkZSAiaWlvLmgiCiAjaW5jbHVkZSAicmluZ19nZW5lcmljLmgiCiAKLSNpZiBkZWZpbmVkIENPTkZJR19JSU9fU1dfUklORyB8fCBkZWZpbmVkIENPTkZJR19JSU9fU1dfUklOR19NT0RVTEUKLQogLyoqCi0gKiBpaW9fY3JlYXRlX3N3X3JiKCkgLSBzb2Z0d2FyZSByaW5nIGJ1ZmZlciBhbGxvY2F0aW9uCi0gKiBAcjoJCXBvaW50ZXIgdG8gcmluZyBidWZmZXIgcG9pbnRlcgorICogcmluZ19zd19hY2Nlc3NfZnVuY3MgLSBhY2Nlc3MgZnVuY3Rpb25zIGZvciBhIHNvZnR3YXJlIHJpbmcgYnVmZmVyCiAgKiovCi1pbnQgaWlvX2NyZWF0ZV9zd19yYihzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICoqcik7Ci0KLS8qKgotICogaWlvX2luaXRfc3dfcmIoKSAtIGluaXRpYWxpemUgdGhlIHNvZnR3YXJlIHJpbmcgYnVmZmVyCi0gKiBAcjoJCXBvaW50ZXIgdG8gYSBzb2Z0d2FyZSByaW5nIGJ1ZmZlciBjcmVhdGVkIGJ5IGFuCi0gKgkJaWlvX2NyZWF0ZV9zd19yYiBjYWxsCi0gKiBAaW5kaW9fZGV2OgkJaW5kdXN0cmlhbCBJL08gZGV2aWNlIHN0cnVjdHVyZQotICoqLwotaW50IGlpb19pbml0X3N3X3JiKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnIsIHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwotCi0vKioKLSAqIGlpb19leGl0X3N3X3JiKCkgLSByZXZlcnNlIHdoYXQgd2FzIGRvbmUgaW4gaWlvX2luaXRfc3dfcmIKLSAqIEByOgkJcG9pbnRlciB0byBhIHNvZnR3YXJlIHJpbmcgYnVmZmVyIGNyZWF0ZWQgYnkgYW4KLSAqCQlpaW9fY3JlYXRlX3N3X3JiIGNhbGwKLSAqKi8KLXZvaWQgaWlvX2V4aXRfc3dfcmIoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcik7Ci0KLS8qKgotICogaWlvX2ZyZWVfc3dfcmIoKSAtIGZyZWUgbWVtb3J5IG9jY3VwaWVkIGJ5IHRoZSBjb3JlIHJpbmcgYnVmZmVyIHN0cnVjdAotICogQHI6CQlwb2ludGVyIHRvIGEgc29mdHdhcmUgcmluZyBidWZmZXIgY3JlYXRlZCBieSBhbgotICoJCWlpb19jcmVhdGVfc3dfcmIgY2FsbAotICoqLwotdm9pZCBpaW9fZnJlZV9zd19yYihzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyKTsKLQotLyoqCi0gKiBpaW9fbWFya19zd19yYl9pbl91c2UoKSAtIHJlZmVyZW5jZSBjb3VudGluZyB0byBwcmV2ZW50IGluY29ycmVjdCBjaGFuY2VzCi0gKiBAcjoJCXBvaW50ZXIgdG8gYSBzb2Z0d2FyZSByaW5nIGJ1ZmZlciBjcmVhdGVkIGJ5IGFuCi0gKgkJaWlvX2NyZWF0ZV9zd19yYiBjYWxsCi0gKiovCi12b2lkIGlpb19tYXJrX3N3X3JiX2luX3VzZShzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyKTsKLQotLyoqCi0gKiAgaWlvX3VubWFya19zd19yYl9pbl91c2UoKSAtIG5vdGlmeSB0aGUgcmluZyBidWZmZXIgdGhhdCB3ZSBkb24ndCBjYXJlIGFueW1vcmUKLSAqIEByOgkJcG9pbnRlciB0byBhIHNvZnR3YXJlIHJpbmcgYnVmZmVyIGNyZWF0ZWQgYnkgYW4KLSAqCQlpaW9fY3JlYXRlX3N3X3JiIGNhbGwKLSAqKi8KLXZvaWQgaWlvX3VubWFya19zd19yYl9pbl91c2Uoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcik7Ci0KLS8qKgotICogaWlvX3JlYWRfbGFzdF9mcm9tX3N3X3JiKCkgLSBhdHRlbXB0IHRvIHJlYWQgdGhlIGxhc3Qgc3RvcmVkIGRhdHVtIGZyb20gdGhlIHJiCi0gKiBAcjoJCXBvaW50ZXIgdG8gYSBzb2Z0d2FyZSByaW5nIGJ1ZmZlciBjcmVhdGVkIGJ5IGFuCi0gKgkJaWlvX2NyZWF0ZV9zd19yYiBjYWxsCi0gKiBAZGF0YToJd2hlcmUgdG8gc3RvcmUgdGhlIGxhc3QgZGF0dW0KLSAqKi8KLWludCBpaW9fcmVhZF9sYXN0X2Zyb21fc3dfcmIoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqciwgdTggKmRhdGEpOwotCi0vKioKLSAqIGlpb19zdG9yZV90b19zd19yYigpIC0gc3RvcmUgYSBuZXcgZGF0dW0gdG8gdGhlIHJpbmcgYnVmZmVyCi0gKiBAcjoJCXBvaW50ZXIgdG8gcmluZyBidWZmZXIgaW5zdGFuY2UKLSAqIEBkYXRhOgl0aGUgZGF0dW0gdG8gYmUgc3RvcmVkIGluY2x1ZGluZyB0aW1lc3RhbXAgaWYgcmVsZXZhbnQKLSAqIEB0aW1lc3RhbXA6CXRpbWVzdGFtcCB3aGljaCB3aWxsIGJlIGF0dGFjaGVkIHRvIGJ1ZmZlciBldmVudHMgaWYgcmVsZXZhbnQKLSAqKi8KLWludCBpaW9fc3RvcmVfdG9fc3dfcmIoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqciwgdTggKmRhdGEsIHM2NCB0aW1lc3RhbXApOwotCi0vKioKLSAqIGlpb19yaXBfc3dfcmIoKSAtIGF0dGVtcHQgdG8gcmVhZCBkYXRhIGZyb20gdGhlIHJpbmcgYnVmZmVyCi0gKiBAcjoJCQlyaW5nIGJ1ZmZlciBpbnN0YW5jZQotICogQGNvdW50OgkJbnVtYmVyIG9mIGRhdHVtJ3MgdG8gdHJ5IGFuZCByZWFkCi0gKiBAYnVmOgkJdXNlcnNwYWNlIGJ1ZmZlciBpbnRvIHdoaWNoIGRhdGEgaXMgY29waWVkCi0gKiBAZGVhZF9vZmZzZXQ6CWhvdyBtdWNoIG9mIHRoZSBzdG9yZWQgZGF0YSB3YXMgcG9zc2libHkgaW52YWxpZGF0ZWQgYnkKLSAqCQkJdGhlIGVuZCBvZiB0aGUgY29weS4KLSAqKi8KLWludCBpaW9fcmlwX3N3X3JiKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnIsCi0JCSAgc2l6ZV90IGNvdW50LAotCQkgIGNoYXIgX191c2VyICpidWYsCi0JCSAgaW50ICpkZWFkX29mZnNldCk7Ci0KLS8qKgotICogaWlvX3JlcXVlc3RfdXBkYXRlX3N3X3JiKCkgLSB1cGRhdGUgcGFyYW1zIGlmIHVwZGF0ZSBuZWVkZWQKLSAqIEByOgkJcG9pbnRlciB0byBhIHNvZnR3YXJlIHJpbmcgYnVmZmVyIGNyZWF0ZWQgYnkgYW4KLSAqCQlpaW9fY3JlYXRlX3N3X3JiIGNhbGwKLSAqKi8KLWludCBpaW9fcmVxdWVzdF91cGRhdGVfc3dfcmIoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcik7Ci0KLS8qKgotICogaWlvX21hcmtfdXBkYXRlX25lZWRlZF9zd19yYigpIC0gdGVsbCB0aGUgcmluZyBidWZmZXIgaXQgbmVlZHMgYSBwYXJhbSB1cGRhdGUKLSAqIEByOgkJcG9pbnRlciB0byBhIHNvZnR3YXJlIHJpbmcgYnVmZmVyIGNyZWF0ZWQgYnkgYW4KLSAqCQlpaW9fY3JlYXRlX3N3X3JiIGNhbGwKLSAqKi8KLWludCBpaW9fbWFya191cGRhdGVfbmVlZGVkX3N3X3JiKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnIpOwotCi0KLS8qKgotICogaWlvX2dldF9ieXRlc19wZXJfZGF0dW1fc3dfcmIoKSAtIGdldCB0aGUgZGF0dW0gc2l6ZSBpbiBieXRlcwotICogQHI6CQlwb2ludGVyIHRvIGEgc29mdHdhcmUgcmluZyBidWZmZXIgY3JlYXRlZCBieSBhbgotICoJCWlpb19jcmVhdGVfc3dfcmIgY2FsbAotICoqLwotaW50IGlpb19nZXRfYnl0ZXNfcGVyX2RhdHVtX3N3X3JiKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnIpOwotCi0vKioKLSAqIGlpb19zZXRfYnl0ZXNfcGVyX2RhdHVtX3N3X3JiKCkgLSBzZXQgdGhlIGRhdHVtIHNpemUgaW4gYnl0ZXMKLSAqIEByOgkJcG9pbnRlciB0byBhIHNvZnR3YXJlIHJpbmcgYnVmZmVyIGNyZWF0ZWQgYnkgYW4KLSAqCQlpaW9fY3JlYXRlX3N3X3JiIGNhbGwKLSAqIEBicGQ6CWJ5dGVzIHBlciBkYXR1bSB2YWx1ZQotICoqLwotaW50IGlpb19zZXRfYnl0ZXNfcGVyX2RhdHVtX3N3X3JiKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnIsIHNpemVfdCBicGQpOwotCi0vKioKLSAqIGlpb19nZXRfbGVuZ3RoX3N3X3JiKCkgLSBnZXQgaG93IG1hbnkgZGF0dW1zIHRoZSByYiBtYXkgY29udGFpbgotICogQHI6CQlwb2ludGVyIHRvIGEgc29mdHdhcmUgcmluZyBidWZmZXIgY3JlYXRlZCBieSBhbgotICoJCWlpb19jcmVhdGVfc3dfcmIgY2FsbAotICoqLwotaW50IGlpb19nZXRfbGVuZ3RoX3N3X3JiKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnIpOwotCi0vKioKLSAqIGlpb19zZXRfbGVuZ3RoX3N3X3JiKCkgLSBzZXQgaG93IG1hbnkgZGF0dW1zIHRoZSByYiBtYXkgY29udGFpbgotICogQHI6CQlwb2ludGVyIHRvIGEgc29mdHdhcmUgcmluZyBidWZmZXIgY3JlYXRlZCBieSBhbgotICoJCWlpb19jcmVhdGVfc3dfcmIgY2FsbAotICogQGxlbmd0aDoJbWF4IG51bWJlciBvZiBkYXRhIGl0ZW1zIGZvciB0aGUgcmluZyBidWZmZXIKLSAqKi8KLWludCBpaW9fc2V0X2xlbmd0aF9zd19yYihzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyLCBpbnQgbGVuZ3RoKTsKLQotLyoqCi0gKiBpaW9fcmluZ19zd19yZWdpc3Rlcl9mdW5jcygpIC0gaGVscGVyIGZ1bmN0aW9uIHRvIHNldCB1cCByYiBhY2Nlc3MKLSAqIEByYToJCXBvaW50ZXIgdG8gQGlpb19yaW5nX2FjY2Vzc19mdW5jcwotICoqLwotc3RhdGljIGlubGluZSB2b2lkIGlpb19yaW5nX3N3X3JlZ2lzdGVyX2Z1bmNzKHN0cnVjdCBpaW9fcmluZ19hY2Nlc3NfZnVuY3MgKnJhKQotewotCXJhLT5tYXJrX2luX3VzZSA9ICZpaW9fbWFya19zd19yYl9pbl91c2U7Ci0JcmEtPnVubWFya19pbl91c2UgPSAmaWlvX3VubWFya19zd19yYl9pbl91c2U7Ci0KLQlyYS0+c3RvcmVfdG8gPSAmaWlvX3N0b3JlX3RvX3N3X3JiOwotCXJhLT5yZWFkX2xhc3QgPSAmaWlvX3JlYWRfbGFzdF9mcm9tX3N3X3JiOwotCXJhLT5yaXBfbG90cyA9ICZpaW9fcmlwX3N3X3JiOwotCi0JcmEtPm1hcmtfcGFyYW1fY2hhbmdlID0gJmlpb19tYXJrX3VwZGF0ZV9uZWVkZWRfc3dfcmI7Ci0JcmEtPnJlcXVlc3RfdXBkYXRlID0gJmlpb19yZXF1ZXN0X3VwZGF0ZV9zd19yYjsKLQotCXJhLT5nZXRfYnl0ZXNfcGVyX2RhdHVtID0gJmlpb19nZXRfYnl0ZXNfcGVyX2RhdHVtX3N3X3JiOwotCXJhLT5zZXRfYnl0ZXNfcGVyX2RhdHVtID0gJmlpb19zZXRfYnl0ZXNfcGVyX2RhdHVtX3N3X3JiOwotCi0JcmEtPmdldF9sZW5ndGggPSAmaWlvX2dldF9sZW5ndGhfc3dfcmI7Ci0JcmEtPnNldF9sZW5ndGggPSAmaWlvX3NldF9sZW5ndGhfc3dfcmI7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBpaW9fc3dfcmluZ19idWZmZXIgLSBzb2Z0d2FyZSByaW5nIGJ1ZmZlcgotICogQGJ1ZjoJCWdlbmVyaWMgcmluZyBidWZmZXIgZWxlbWVudHMKLSAqIEBkYXRhOgkJdGhlIHJpbmcgYnVmZmVyIG1lbW9yeQotICogQHJlYWRfcDoJCXJlYWQgcG9pbnRlciAob2xkZXN0IGF2YWlsYWJsZSkKLSAqIEB3cml0ZV9wOgkJd3JpdGUgcG9pbnRlcgotICogQGxhc3Rfd3JpdHRlbl9wOglyZWFkIHBvaW50ZXIgKG5ld2VzdCBhdmFpbGFibGUpCi0gKiBAaGFsZl9wOgkJaGFsZiBidWZmZXIgbGVuZ3RoIGJlaGluZCB3cml0ZV9wIChldmVudCBnZW5lcmF0aW9uKQotICogQHVzZV9jb3VudDoJCXJlZmVyZW5jZSBjb3VudCB0byBwcmV2ZW50IHJlc2l6aW5nIHdoZW4gaW4gdXNlCi0gKiBAdXBkYXRlX25lZWRlZDoJZmxhZyB0byBpbmRpY2F0ZWQgY2hhbmdlIGluIHNpemUgcmVxdWVzdGVkCi0gKiBAdXNlX2xvY2s6CQlsb2NrIHRvIHByZXZlbnQgY2hhbmdlIGluIHNpemUgd2hlbiBpbiB1c2UKLSAqCi0gKiBOb3RlIHRoYXQgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYWxsIHJpbmcgYnVmZmVycyBtdXN0IGJlIGEKLSAqIHN0cnVjdCBpaW9fcmluZ19idWZmZXIuCi0qKi8KLQotc3RydWN0IGlpb19zd19yaW5nX2J1ZmZlciB7Ci0Jc3RydWN0IGlpb19yaW5nX2J1ZmZlciAgYnVmOwotCXVuc2lnbmVkIGNoYXIJCSpkYXRhOwotCXVuc2lnbmVkIGNoYXIJCSpyZWFkX3A7Ci0JdW5zaWduZWQgY2hhcgkJKndyaXRlX3A7Ci0JdW5zaWduZWQgY2hhcgkJKmxhc3Rfd3JpdHRlbl9wOwotCS8qIHVzZWQgdG8gYWN0IGFzIGEgcG9pbnQgYXQgd2hpY2ggdG8gc2lnbmFsIGFuIGV2ZW50ICovCi0JdW5zaWduZWQgY2hhcgkJKmhhbGZfcDsKLQlpbnQJCQl1c2VfY291bnQ7Ci0JaW50CQkJdXBkYXRlX25lZWRlZDsKLQlzcGlubG9ja190CQl1c2VfbG9jazsKLX07Ci0KLSNkZWZpbmUgaWlvX3RvX3N3X3JpbmcocikgY29udGFpbmVyX29mKHIsIHN0cnVjdCBpaW9fc3dfcmluZ19idWZmZXIsIGJ1ZikKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaWlvX3JpbmdfYWNjZXNzX2Z1bmNzIHJpbmdfc3dfYWNjZXNzX2Z1bmNzOwogCiBzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICppaW9fc3dfcmJfYWxsb2NhdGUoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7CiB2b2lkIGlpb19zd19yYl9mcmVlKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpOwotCi1pbnQgaWlvX3N3X3JpbmdfcHJlZW5hYmxlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwotCi1zdHJ1Y3QgaWlvX3N3X3JpbmdfaGVscGVyX3N0YXRlIHsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCXdvcmtfdHJpZ2dlcl90b19yaW5nOwotCXN0cnVjdCBpaW9fZGV2CQkJKmluZGlvX2RldjsKLQlpbnQgKCpnZXRfcmluZ19lbGVtZW50KShzdHJ1Y3QgaWlvX3N3X3JpbmdfaGVscGVyX3N0YXRlICpzdCwgdTggKmJ1Zik7Ci0JczY0CQkJCWxhc3RfdGltZXN0YW1wOwotfTsKLQotdm9pZCBpaW9fc3dfcG9sbF9mdW5jX3RoKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsIHM2NCB0aW1lKTsKLXZvaWQgaWlvX3N3X3RyaWdnZXJfYmhfdG9fcmluZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmtfcyk7Ci0KLSNlbHNlIC8qIENPTkZJR19JSU9fUklOR19CVUZGRVIqLwotc3RydWN0IGlpb19zd19yaW5nX2hlbHBlcl9zdGF0ZSB7Ci0Jc3RydWN0IGlpb19kZXYJCQkqaW5kaW9fZGV2OwotfTsKLSNlbmRpZiAvKiAhQ09ORklHX0lJT19SSU5HX0JVRkZFUiAqLwogI2VuZGlmIC8qIF9JSU9fUklOR19TV19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9zeXNmcy5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9zeXNmcy5oCmluZGV4IDI0Yjc0ZGQuLmRkNzliNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vc3lzZnMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL3N5c2ZzLmgKQEAgLTE1LDMwICsxNSwxOCBAQAogI2luY2x1ZGUgImlpby5oIgogCiAvKioKLSAqIHN0cnVjdCBpaW9fZXZlbnRfYXR0ciAtIGV2ZW50IGNvbnRyb2wgYXR0cmlidXRlCi0gKiBAZGV2X2F0dHI6CXVuZGVybHlpbmcgZGV2aWNlIGF0dHJpYnV0ZQotICogQG1hc2s6CW1hc2sgZm9yIHRoZSBldmVudCB3aGVuIGRldGVjdGluZwotICogQGxpc3RlbDoJbGlzdCBoZWFkZXIgdG8gYWxsb3cgYWRkaXRpb24gdG8gbGlzdCBvZiBldmVudCBoYW5kbGVycwotKi8KLXN0cnVjdCBpaW9fZXZlbnRfYXR0ciB7Ci0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHI7Ci0JaW50IG1hc2s7Ci0Jc3RydWN0IGlpb19ldmVudF9oYW5kbGVyX2xpc3QgKmxpc3RlbDsKLX07Ci0KLSNkZWZpbmUgdG9faWlvX2V2ZW50X2F0dHIoX2Rldl9hdHRyKSBcCi0JY29udGFpbmVyX29mKF9kZXZfYXR0ciwgc3RydWN0IGlpb19ldmVudF9hdHRyLCBkZXZfYXR0cikKLQotLyoqCiAgKiBzdHJ1Y3QgaWlvX2Rldl9hdHRyIC0gaWlvIHNwZWNpZmljIGRldmljZSBhdHRyaWJ1dGUKICAqIEBkZXZfYXR0cjoJdW5kZXJseWluZyBkZXZpY2UgYXR0cmlidXRlCiAgKiBAYWRkcmVzczoJYXNzb2NpYXRlZCByZWdpc3RlciBhZGRyZXNzCiAgKiBAdmFsMjoJc2Vjb25kYXJ5IGF0dHJpYnV0ZSB2YWx1ZQorICogQGw6CQlsaXN0IGhlYWQgZm9yIG1haW50YWluaW5nIGxpc3Qgb2YgZHluYW1pY2FsbHkgY3JlYXRlZCBhdHRycy4KICAqLwogc3RydWN0IGlpb19kZXZfYXR0ciB7CiAJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHI7CiAJaW50IGFkZHJlc3M7CiAJaW50IHZhbDI7CisJc3RydWN0IGxpc3RfaGVhZCBsOworCXN0cnVjdCBpaW9fY2hhbl9zcGVjIGNvbnN0ICpjOwogfTsKIAogI2RlZmluZSB0b19paW9fZGV2X2F0dHIoX2Rldl9hdHRyKQkJCQlcCkBAIC0xMDEsMTMgKzg5LDYgQEAKIAlJSU9fREVWSUNFX0FUVFIocmV2aXNpb24sIFNfSVJVR08sIF9zaG93LCBOVUxMLCAwKQogCiAvKioKLSAqIElJT19ERVZfQVRUUl9OQU1FIC0gY2hpcCB0eXBlIGRlcGVuZGVudCBpZGVudGlmaWVyCi0gKiBAX3Nob3c6IG91dHB1dCBtZXRob2QgZm9yIHRoZSBhdHRyaWJ1dGUKLSAqKi8KLSNkZWZpbmUgSUlPX0RFVl9BVFRSX05BTUUoX3Nob3cpCQkJCVwKLQlJSU9fREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgX3Nob3csIE5VTEwsIDApCi0KLS8qKgogICogSUlPX0RFVl9BVFRSX1JFU0VUOiByZXNldHMgdGhlIGRldmljZQogICoqLwogI2RlZmluZSBJSU9fREVWX0FUVFJfUkVTRVQoX3N0b3JlKQkJCVwKQEAgLTE4MCwxMDQgKzE2MSwyNyBAQAogI2RlZmluZSBJSU9fQ09OU1RfQVRUUl9URU1QX1NDQUxFKF9zdHJpbmcpCQlcCiAJSUlPX0NPTlNUX0FUVFIodGVtcF9zY2FsZSwgX3N0cmluZykKIAotLyoqCi0gKiBJSU9fRVZFTlRfU0ggLSBnZW5lcmljIHNoYXJlZCBldmVudCBoYW5kbGVyCi0gKiBAX25hbWU6IGV2ZW50IG5hbWUKLSAqIEBfaGFuZGxlcjogaGFuZGxlciBmdW5jdGlvbiB0byBiZSBjYWxsZWQKLSAqCi0gKiBUaGlzIGlzIHVzZWQgaW4gY2FzZXMgd2hlcmUgbW9yZSB0aGFuIG9uZSBldmVudCBtYXkgcmVzdWx0IGZyb20gYSBzaW5nbGUKLSAqIGhhbmRsZXIuICBPZnRlbiB0aGUgY2FzZSB0aGF0IHNvbWUgYWxhcm0gcmVnaXN0ZXIgbXVzdCBiZSByZWFkIGFuZCBtdWx0aXBsZQotICogYWxhcm1zIG1heSBoYXZlIGJlZW4gdHJpZ2dlcmVkLgotICoqLwotI2RlZmluZSBJSU9fRVZFTlRfU0goX25hbWUsIF9oYW5kbGVyKQkJCQkJXAotCXN0YXRpYyBzdHJ1Y3QgaWlvX2V2ZW50X2hhbmRsZXJfbGlzdAkJCQlcCi0JaWlvX2V2ZW50XyMjX25hbWUgPSB7CQkJCQkJXAotCQkuaGFuZGxlciA9IF9oYW5kbGVyLAkJCQkJXAotCQkucmVmY291bnQgPSAwLAkJCQkJCVwKLQkJLmV4aXN0X2xvY2sgPSBfX01VVEVYX0lOSVRJQUxJWkVSKGlpb19ldmVudF8jI19uYW1lCVwKLQkJCQkJCSAgLmV4aXN0X2xvY2spLAkJXAotCQkubGlzdCA9IHsJCQkJCQlcCi0JCQkubmV4dCA9ICZpaW9fZXZlbnRfIyNfbmFtZS5saXN0LAkJXAotCQkJLnByZXYgPSAmaWlvX2V2ZW50XyMjX25hbWUubGlzdCwJCVwKLQkJfSwJCQkJCQkJXAotCX07CisvKiBtdXN0IG1hdGNoIG91ciBjaGFubmVsIGRlZnMgKi8KKyNkZWZpbmUgSUlPX0VWX0NMQVNTX0lOCQkJSUlPX0lOCisjZGVmaW5lIElJT19FVl9DTEFTU19JTl9ESUZGCQlJSU9fSU5fRElGRgorI2RlZmluZSBJSU9fRVZfQ0xBU1NfQUNDRUwJCUlJT19BQ0NFTAorI2RlZmluZSBJSU9fRVZfQ0xBU1NfR1lSTwkJSUlPX0dZUk8KKyNkZWZpbmUgSUlPX0VWX0NMQVNTX01BR04JCUlJT19NQUdOCisjZGVmaW5lIElJT19FVl9DTEFTU19MSUdIVAkJSUlPX0xJR0hUCisjZGVmaW5lIElJT19FVl9DTEFTU19QUk9YSU1JVFkJCUlJT19QUk9YSU1JVFkKKyNkZWZpbmUgSUlPX0VWX0NMQVNTX1RFTVAJCUlJT19URU1QCiAKLS8qKgotICogSUlPX0VWRU5UX0FUVFJfU0ggLSBnZW5lcmljIHNoYXJlZCBldmVudCBhdHRyaWJ1dGUKLSAqIEBfbmFtZTogZXZlbnQgbmFtZQotICogQF9ldl9saXN0OiBldmVudCBoYW5kbGVyIGxpc3QKLSAqIEBfc2hvdzogb3V0cHV0IG1ldGhvZCBmb3IgdGhlIGF0dHJpYnV0ZQotICogQF9zdG9yZTogaW5wdXQgbWV0aG9kIGZvciB0aGUgYXR0cmlidXRlCi0gKiBAX21hc2s6IG1hc2sgdXNlZCB3aGVuIGRldGVjdGluZyB0aGUgZXZlbnQKLSAqCi0gKiBBbiBhdHRyaWJ1dGUgd2l0aCBhbiBhc3NvY2lhdGVkIElJT19FVkVOVF9TSAotICoqLwotI2RlZmluZSBJSU9fRVZFTlRfQVRUUl9TSChfbmFtZSwgX2V2X2xpc3QsIF9zaG93LCBfc3RvcmUsIF9tYXNrKQlcCi0Jc3RhdGljIHN0cnVjdCBpaW9fZXZlbnRfYXR0cgkJCQkJXAotCWlpb19ldmVudF9hdHRyXyMjX25hbWUJCQkJCQlcCi0JPSB7IC5kZXZfYXR0ciA9IF9fQVRUUihfbmFtZSwgU19JUlVHTyB8IFNfSVdVU1IsCQlcCi0JCQkgICAgICAgX3Nob3csIF9zdG9yZSksCQkJCVwKLQkgICAgLm1hc2sgPSBfbWFzaywJCQkJCQlcCi0JICAgIC5saXN0ZWwgPSAmX2V2X2xpc3QgfTsKLQotI2RlZmluZSBJSU9fRVZFTlRfQVRUUl9OQU1FRF9TSChfdm5hbWUsIF9uYW1lLCBfZXZfbGlzdCwgX3Nob3csIF9zdG9yZSwgX21hc2spIFwKLQlzdGF0aWMgc3RydWN0IGlpb19ldmVudF9hdHRyCQkJCQlcCi0JaWlvX2V2ZW50X2F0dHJfIyNfdm5hbWUJCQkJCQlcCi0JPSB7IC5kZXZfYXR0ciA9IF9fQVRUUihfbmFtZSwgU19JUlVHTyB8IFNfSVdVU1IsCQlcCi0JCQkgICAgICAgX3Nob3csIF9zdG9yZSksCQkJCVwKLQkgICAgLm1hc2sgPSBfbWFzaywJCQkJCQlcCi0JICAgIC5saXN0ZWwgPSAmX2V2X2xpc3QgfTsKLQotLyoqCi0gKiBJSU9fRVZFTlRfQVRUUiAtIG5vbi1zaGFyZWQgZXZlbnQgYXR0cmlidXRlCi0gKiBAX25hbWU6IGV2ZW50IG5hbWUKLSAqIEBfc2hvdzogb3V0cHV0IG1ldGhvZCBmb3IgdGhlIGF0dHJpYnV0ZQotICogQF9zdG9yZTogaW5wdXQgbWV0aG9kIGZvciB0aGUgYXR0cmlidXRlCi0gKiBAX21hc2s6IG1hc2sgdXNlZCB3aGVuIGRldGVjdGluZyB0aGUgZXZlbnQKLSAqIEBfaGFuZGxlcjogaGFuZGxlciBmdW5jdGlvbiB0byBiZSBjYWxsZWQKLSAqKi8KLSNkZWZpbmUgSUlPX0VWRU5UX0FUVFIoX25hbWUsIF9zaG93LCBfc3RvcmUsIF9tYXNrLCBfaGFuZGxlcikJCVwKLQlJSU9fRVZFTlRfU0goX25hbWUsIF9oYW5kbGVyKTsJCQkJCVwKLQlzdGF0aWMgc3RydWN0CQkJCQkJCVwKLQlpaW9fZXZlbnRfYXR0cgkJCQkJCQlcCi0JaWlvX2V2ZW50X2F0dHJfIyNfbmFtZQkJCQkJCVwKLQk9IHsgLmRldl9hdHRyID0gX19BVFRSKF9uYW1lLCBTX0lSVUdPIHwgU19JV1VTUiwJCVwKLQkJCSAgICAgICBfc2hvdywgX3N0b3JlKSwJCQkJXAotCSAgICAubWFzayA9IF9tYXNrLAkJCQkJCVwKLQkgICAgLmxpc3RlbCA9ICZpaW9fZXZlbnRfIyNfbmFtZSB9OwkJCQlcCi0KLS8qKgotICogSUlPX0VWRU5UX0FUVFJfREFUQV9SRFkgLSBldmVudCBkcml2ZW4gYnkgZGF0YSByZWFkeSBzaWduYWwKLSAqIEBfc2hvdzogb3V0cHV0IG1ldGhvZCBmb3IgdGhlIGF0dHJpYnV0ZQotICogQF9zdG9yZTogaW5wdXQgbWV0aG9kIGZvciB0aGUgYXR0cmlidXRlCi0gKiBAX21hc2s6IG1hc2sgdXNlZCB3aGVuIGRldGVjdGluZyB0aGUgZXZlbnQKLSAqIEBfaGFuZGxlcjogaGFuZGxlciBmdW5jdGlvbiB0byBiZSBjYWxsZWQKLSAqCi0gKiBOb3QgdHlwaWNhbGx5IGltcGxlbWVudGVkIGluIGRldmljZXMgd2hlcmUgZnVsbCB0cmlnZ2VyaW5nIHN1cHBvcnQKLSAqIGhhcyBiZWVuIGltcGxlbWVudGVkLgotICoqLwotI2RlZmluZSBJSU9fRVZFTlRfQVRUUl9EQVRBX1JEWShfc2hvdywgX3N0b3JlLCBfbWFzaywgX2hhbmRsZXIpIFwKLQlJSU9fRVZFTlRfQVRUUihkYXRhX3JkeSwgX3Nob3csIF9zdG9yZSwgX21hc2ssIF9oYW5kbGVyKQotCi0jZGVmaW5lIElJT19FVl9DTEFTU19CVUZGRVIJCTAKLSNkZWZpbmUgSUlPX0VWX0NMQVNTX0lOCQkJMQotI2RlZmluZSBJSU9fRVZfQ0xBU1NfQUNDRUwJCTIKLSNkZWZpbmUgSUlPX0VWX0NMQVNTX0dZUk8JCTMKLSNkZWZpbmUgSUlPX0VWX0NMQVNTX01BR04JCTQKLSNkZWZpbmUgSUlPX0VWX0NMQVNTX0xJR0hUCQk1Ci0jZGVmaW5lIElJT19FVl9DTEFTU19QUk9YSU1JVFkJCTYKLQotI2RlZmluZSBJSU9fRVZfTU9EX1gJCQkwCi0jZGVmaW5lIElJT19FVl9NT0RfWQkJCTEKLSNkZWZpbmUgSUlPX0VWX01PRF9aCQkJMgotI2RlZmluZSBJSU9fRVZfTU9EX1hfQU5EX1kJCTMKLSNkZWZpbmUgSUlPX0VWX01PRF9YX0FOWF9aCQk0Ci0jZGVmaW5lIElJT19FVl9NT0RfWV9BTkRfWgkJNQotI2RlZmluZSBJSU9fRVZfTU9EX1hfQU5EX1lfQU5EX1oJNgotI2RlZmluZSBJSU9fRVZfTU9EX1hfT1JfWQkJNwotI2RlZmluZSBJSU9fRVZfTU9EX1hfT1JfWgkJOAotI2RlZmluZSBJSU9fRVZfTU9EX1lfT1JfWgkJOQotI2RlZmluZSBJSU9fRVZfTU9EX1hfT1JfWV9PUl9aCQkxMAorI2RlZmluZSBJSU9fRVZfTU9EX1gJCQlJSU9fTU9EX1gKKyNkZWZpbmUgSUlPX0VWX01PRF9ZCQkJSUlPX01PRF9ZCisjZGVmaW5lIElJT19FVl9NT0RfWgkJCUlJT19NT0RfWgorI2RlZmluZSBJSU9fRVZfTU9EX1hfQU5EX1kJCUlJT19NT0RfWF9BTkRfWQorI2RlZmluZSBJSU9fRVZfTU9EX1hfQU5YX1oJCUlJT19NT0RfWF9BTkRfWgorI2RlZmluZSBJSU9fRVZfTU9EX1lfQU5EX1oJCUlJT19NT0RfWV9BTkRfWgorI2RlZmluZSBJSU9fRVZfTU9EX1hfQU5EX1lfQU5EX1oJSUlPX01PRF9YX0FORF9ZX0FORF9aCisjZGVmaW5lIElJT19FVl9NT0RfWF9PUl9ZCQlJSU9fTU9EX1hfT1JfWQorI2RlZmluZSBJSU9fRVZfTU9EX1hfT1JfWgkJSUlPX01PRF9YX09SX1oKKyNkZWZpbmUgSUlPX0VWX01PRF9ZX09SX1oJCUlJT19NT0RfWV9PUl9aCisjZGVmaW5lIElJT19FVl9NT0RfWF9PUl9ZX09SX1oJCUlJT19NT0RfWF9PUl9ZX09SX1oKIAogI2RlZmluZSBJSU9fRVZfVFlQRV9USFJFU0gJCTAKICNkZWZpbmUgSUlPX0VWX1RZUEVfTUFHCQkJMQpAQCAtMjg3LDYgKzE5MSwxMCBAQAogI2RlZmluZSBJSU9fRVZfRElSX1JJU0lORwkJMQogI2RlZmluZSBJSU9fRVZfRElSX0ZBTExJTkcJCTIKIAorI2RlZmluZSBJSU9fRVZfVFlQRV9NQVggOAorI2RlZmluZSBJSU9fRVZfQklUKHR5cGUsIGRpcmVjdGlvbikJCQlcCisJKDEgPDwgKHR5cGUqSUlPX0VWX1RZUEVfTUFYICsgZGlyZWN0aW9uKSkKKwogI2RlZmluZSBJSU9fRVZFTlRfQ09ERShjaGFubmVsY2xhc3MsIG9yaWVudF9iaXQsIG51bWJlciwJCVwKIAkJICAgICAgIG1vZGlmaWVyLCB0eXBlLCBkaXJlY3Rpb24pCQkJXAogCShjaGFubmVsY2xhc3MgfCAob3JpZW50X2JpdCA8PCA4KSB8ICgobnVtYmVyKSA8PCA5KSB8CQlcCkBAIC0zMDMsMzggKzIxMSwxMiBAQAogI2RlZmluZSBJSU9fQlVGRkVSX0VWRU5UX0NPREUoY29kZSkJCVwKIAkoSUlPX0VWX0NMQVNTX0JVRkZFUiB8IChjb2RlIDw8IDgpKQogCi0vKioKLSAqIElJT19FVkVOVF9BVFRSX1JJTkdfNTBfRlVMTCAtIHJpbmcgYnVmZmVyIGV2ZW50IHRvIGluZGljYXRlIDUwJSBmdWxsCi0gKiBAX3Nob3c6IG91dHB1dCBtZXRob2QgZm9yIHRoZSBhdHRyaWJ1dGUKLSAqIEBfc3RvcmU6IGlucHV0IG1ldGhvZCBmb3IgdGhlIGF0dHJpYnV0ZQotICogQF9tYXNrOiBtYXNrIHVzZWQgd2hlbiBkZXRlY3RpbmcgdGhlIGV2ZW50Ci0gKiBAX2hhbmRsZXI6IGhhbmRsZXIgZnVuY3Rpb24gdG8gYmUgY2FsbGVkCi0gKiovCi0jZGVmaW5lIElJT19FVkVOVF9BVFRSX1JJTkdfNTBfRlVMTChfc2hvdywgX3N0b3JlLCBfbWFzaywgX2hhbmRsZXIpCVwKLQlJSU9fRVZFTlRfQVRUUihyaW5nXzUwX2Z1bGwsIF9zaG93LCBfc3RvcmUsIF9tYXNrLCBfaGFuZGxlcikKKyNkZWZpbmUgSUlPX0VWRU5UX0NPREVfRVhUUkFDVF9ESVIobWFzaykgKChtYXNrID4+IDI0KSAmIDB4ZikKIAotLyoqCi0gKiBJSU9fRVZFTlRfQVRUUl9SSU5HXzUwX0ZVTExfU0ggLSBzaGFyZWQgcmluZyBldmVudCB0byBpbmRpY2F0ZSA1MCUgZnVsbAotICogQF9ldmxpc3Q6IGV2ZW50IGhhbmRsZXIgbGlzdAotICogQF9zaG93OiBvdXRwdXQgbWV0aG9kIGZvciB0aGUgYXR0cmlidXRlCi0gKiBAX3N0b3JlOiBpbnB1dCBtZXRob2QgZm9yIHRoZSBhdHRyaWJ1dGUKLSAqIEBfbWFzazogbWFzayB1c2VkIHdoZW4gZGV0ZWN0aW5nIHRoZSBldmVudAotICoqLwotI2RlZmluZSBJSU9fRVZFTlRfQVRUUl9SSU5HXzUwX0ZVTExfU0goX2V2bGlzdCwgX3Nob3csIF9zdG9yZSwgX21hc2spCVwKLQlJSU9fRVZFTlRfQVRUUl9TSChyaW5nXzUwX2Z1bGwsIF9ldmxpc3QsIF9zaG93LCBfc3RvcmUsIF9tYXNrKQorLyogRXZlbnQgY29kZSBudW1iZXIgZXh0cmFjdGlvbiBkZXBlbmRzIG9uIHdoaWNoIHR5cGUgb2YgZXZlbnQgd2UgaGF2ZS4KKyAqIFBlcmhhcHMgcmV2aWV3IHRoaXMgZnVuY3Rpb24gaW4gdGhlIGZ1dHVyZSovCisjZGVmaW5lIElJT19FVkVOVF9DT0RFX0VYVFJBQ1RfTlVNKG1hc2spICgobWFzayA+PiA5KSAmIDB4MGYpCiAKLS8qKgotICogSUlPX0VWRU5UX0FUVFJfUklOR183NV9GVUxMX1NIIC0gc2hhcmVkIHJpbmcgZXZlbnQgdG8gaW5kaWNhdGUgNzUlIGZ1bGwKLSAqIEBfZXZsaXN0OiBldmVudCBoYW5kbGVyIGxpc3QKLSAqIEBfc2hvdzogb3V0cHV0IG1ldGhvZCBmb3IgdGhlIGF0dHJpYnV0ZQotICogQF9zdG9yZTogaW5wdXQgbWV0aG9kIGZvciB0aGUgYXR0cmlidXRlCi0gKiBAX21hc2s6IG1hc2sgdXNlZCB3aGVuIGRldGVjdGluZyB0aGUgZXZlbnQKLSAqKi8KLSNkZWZpbmUgSUlPX0VWRU5UX0FUVFJfUklOR183NV9GVUxMX1NIKF9ldmxpc3QsIF9zaG93LCBfc3RvcmUsIF9tYXNrKQlcCi0JSUlPX0VWRU5UX0FUVFJfU0gocmluZ183NV9mdWxsLCBfZXZsaXN0LCBfc2hvdywgX3N0b3JlLCBfbWFzaykKLQotI2RlZmluZSBJSU9fRVZFTlRfQ09ERV9SSU5HXzUwX0ZVTEwJSUlPX0JVRkZFUl9FVkVOVF9DT0RFKDApCi0jZGVmaW5lIElJT19FVkVOVF9DT0RFX1JJTkdfNzVfRlVMTAlJSU9fQlVGRkVSX0VWRU5UX0NPREUoMSkKLSNkZWZpbmUgSUlPX0VWRU5UX0NPREVfUklOR18xMDBfRlVMTAlJSU9fQlVGRkVSX0VWRU5UX0NPREUoMikKKyNkZWZpbmUgSUlPX0VWRU5UX0NPREVfRVhUUkFDVF9NT0RJRklFUihtYXNrKSAoKG1hc2sgPj4gMTMpICYgMHg3KQogCiAjZW5kaWYgLyogX0lORFVTVFJJQUxfSU9fU1lTRlNfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vdHJpZ2dlci5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby90cmlnZ2VyLmgKaW5kZXggNDY5YmViYS4uZjMyOWZlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby90cmlnZ2VyLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby90cmlnZ2VyLmgKQEAgLTYsOSArNiwxNSBAQAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisKICNpZm5kZWYgX0lJT19UUklHR0VSX0hfCiAjZGVmaW5lIF9JSU9fVFJJR0dFUl9IXwogCitzdHJ1Y3QgaWlvX3N1YmlycSB7CisJYm9vbCBlbmFibGVkOworfTsKKwogLyoqCiAgKiBzdHJ1Y3QgaWlvX3RyaWdnZXIgLSBpbmR1c3RyaWFsIEkvTyB0cmlnZ2VyIGRldmljZQogICoKQEAgLTE4LDE0ICsyNCwxNiBAQAogICogQHByaXZhdGVfZGF0YToJW0RSSVZFUl0gZGV2aWNlIHNwZWNpZmljIGRhdGEKICAqIEBsaXN0OgkJW0lOVEVSTl0gdXNlZCBpbiBtYWludGVuYW5jZSBvZiBnbG9iYWwgdHJpZ2dlciBsaXN0CiAgKiBAYWxsb2NfbGlzdDoJCVtEUklWRVJdIHVzZWQgZm9yIGRyaXZlciBzcGVjaWZpYyB0cmlnZ2VyIGxpc3QKLSAqIEBwb2xsZnVuY19saXN0X2xvY2s6CVtJTlRFUk5dIHByb3RlY3Rpb24gb2YgdGhlIHBvbGxpbmcgZnVuY3Rpb24gbGlzdAotICogQHBvbGxmdW5jX2xpc3Q6CVtJTlRFUk5dIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIHJ1biBvbiB0cmlnZ2VyLgotICogQGNvbnRyb2xfYXR0cnM6CVtEUklWRVJdIHN5c2ZzIGF0dHJpYnV0ZXMgcmVsZXZhbnQgdG8gdHJpZ2dlciB0eXBlCiAgKiBAb3duZXI6CQlbRFJJVkVSXSB1c2VkIHRvIG1vbml0b3IgdXNhZ2UgY291bnQgb2YgdGhlIHRyaWdnZXIuCiAgKiBAdXNlX2NvdW50OgkJdXNlIGNvdW50IGZvciB0aGUgdHJpZ2dlcgogICogQHNldF90cmlnZ2VyX3N0YXRlOglbRFJJVkVSXSBzd2l0Y2ggb24vb2ZmIHRoZSB0cmlnZ2VyIG9uIGRlbWFuZAogICogQHRyeV9yZWVuYWJsZToJZnVuY3Rpb24gdG8gcmVlbmFibGUgdGhlIHRyaWdnZXIgd2hlbiB0aGUKICAqCQkJdXNlIGNvdW50IGlzIHplcm8gKG1heSBiZSBOVUxMKQorICogQHN1YmlycV9jaGlwOglbSU5URVJOXSBhc3NvY2lhdGUgJ3ZpcnR1YWwnIGlycSBjaGlwLgorICogQHN1YmlycV9iYXNlOglbSU5URVJOXSBiYXNlIG51bWJlciBmb3IgaXJxcyBwcm92aWRlZCBieSB0cmlnZ2VyLgorICogQHN1YmlycXM6CQlbSU5URVJOXSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgJ2NoaWxkJyBpcnFzLgorICogQHBvb2w6CQlbSU5URVJOXSBiaXRtYXAgb2YgaXJxcyBjdXJyZW50bHkgaW4gdXNlLgorICogQHBvb2xfbG9jazoJCVtJTlRFUk5dIHByb3RlY3Rpb24gb2YgdGhlIGlycSBwb29sLgogICoqLwogc3RydWN0IGlpb190cmlnZ2VyIHsKIAlpbnQJCQkJaWQ7CkBAIC0zNSwxNCArNDMsMTggQEAKIAl2b2lkCQkJCSpwcml2YXRlX2RhdGE7CiAJc3RydWN0IGxpc3RfaGVhZAkJbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlhbGxvY19saXN0OwotCXNwaW5sb2NrX3QJCQlwb2xsZnVuY19saXN0X2xvY2s7Ci0Jc3RydWN0IGxpc3RfaGVhZAkJcG9sbGZ1bmNfbGlzdDsKLQljb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwCSpjb250cm9sX2F0dHJzOwogCXN0cnVjdCBtb2R1bGUJCQkqb3duZXI7CiAJaW50IHVzZV9jb3VudDsKIAogCWludCAoKnNldF90cmlnZ2VyX3N0YXRlKShzdHJ1Y3QgaWlvX3RyaWdnZXIgKnRyaWcsIGJvb2wgc3RhdGUpOwogCWludCAoKnRyeV9yZWVuYWJsZSkoc3RydWN0IGlpb190cmlnZ2VyICp0cmlnKTsKKworCXN0cnVjdCBpcnFfY2hpcAkJCXN1YmlycV9jaGlwOworCWludAkJCQlzdWJpcnFfYmFzZTsKKworCXN0cnVjdCBpaW9fc3ViaXJxIHN1YmlycXNbQ09ORklHX0lJT19DT05TVU1FUlNfUEVSX1RSSUdHRVJdOworCXVuc2lnbmVkIGxvbmcgcG9vbFtCSVRTX1RPX0xPTkdTKENPTkZJR19JSU9fQ09OU1VNRVJTX1BFUl9UUklHR0VSKV07CisJc3RydWN0IG11dGV4CQkJcG9vbF9sb2NrOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgaWlvX3RyaWdnZXIgKnRvX2lpb190cmlnZ2VyKHN0cnVjdCBkZXZpY2UgKmQpCkBAIC02MywyNyArNzUsNiBAQAogfTsKIAogLyoqCi0gKiBpaW9fdHJpZ2dlcl9yZWFkX25hbWUoKSAtIHN5c2ZzIGFjY2VzcyBmdW5jdGlvbiB0byBnZXQgdGhlIHRyaWdnZXIgbmFtZQotICogQGRldjogdGhlIHN5c3RlbSBkZXZpY2UKLSAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlcyBmb3IgdGhlIGRldmljZQotICogQGJ1Zjogb3V0cHV0IGJ1ZmZlciB0byBzdG9yZSB0aGUgdHJpZ2dlciBuYW1lCi0gKiovCi1zc2l6ZV90IGlpb190cmlnZ2VyX3JlYWRfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCSAgICAgIGNoYXIgKmJ1Zik7Ci0KLSNkZWZpbmUgSUlPX1RSSUdHRVJfTkFNRV9BVFRSIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sCQlcCi0JCQkJCSAgaWlvX3RyaWdnZXJfcmVhZF9uYW1lLAlcCi0JCQkJCSAgTlVMTCk7Ci0KLS8qKgotICogaWlvX3RyaWdnZXJfZmluZF9ieV9uYW1lKCkgLSBzZWFyY2ggZ2xvYmFsIHRyaWdnZXIgbGlzdAotICogQG5hbWU6IHRyaWdnZXIgbmFtZSB0byBzZWFyY2ggZm9yCi0gKiBAbGVuOiB0cmlnZ2VyIG5hbWUgc3RyaW5nIGxlbmd0aCB0byBjb21wYXJlCi0gKiovCi1zdHJ1Y3QgaWlvX3RyaWdnZXIgKmlpb190cmlnZ2VyX2ZpbmRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbGVuKTsKLQotLyoqCiAgKiBpaW9fdHJpZ2dlcl9yZWdpc3RlcigpIC0gcmVnaXN0ZXIgYSB0cmlnZ2VyIHdpdGggdGhlIElJTyBjb3JlCiAgKiBAdHJpZ19pbmZvOgl0cmlnZ2VyIHRvIGJlIHJlZ2lzdGVyZWQKICAqKi8KQEAgLTExOSwzNiArMTEwLDY1IEBACiAgKiBUeXBpY2FsbHkgY2FsbGVkIGluIHJlbGV2YW50IGhhcmR3YXJlIGludGVycnVwdCBoYW5kbGVyLgogICoqLwogdm9pZCBpaW9fdHJpZ2dlcl9wb2xsKHN0cnVjdCBpaW9fdHJpZ2dlciAqdHJpZywgczY0IHRpbWUpOwordm9pZCBpaW9fdHJpZ2dlcl9wb2xsX2NoYWluZWQoc3RydWN0IGlpb190cmlnZ2VyICp0cmlnLCBzNjQgdGltZSk7CiB2b2lkIGlpb190cmlnZ2VyX25vdGlmeV9kb25lKHN0cnVjdCBpaW9fdHJpZ2dlciAqdHJpZyk7CiAKK2lycXJldHVybl90IGlpb190cmlnZ2VyX2dlbmVyaWNfZGF0YV9yZHlfcG9sbChpbnQgaXJxLCB2b2lkICpwcml2YXRlKTsKKworc3RhdGljIGlubGluZSBpbnQgaWlvX3RyaWdnZXJfZ2V0X2lycShzdHJ1Y3QgaWlvX3RyaWdnZXIgKnRyaWcpCit7CisJaW50IHJldDsKKwltdXRleF9sb2NrKCZ0cmlnLT5wb29sX2xvY2spOworCXJldCA9IGJpdG1hcF9maW5kX2ZyZWVfcmVnaW9uKHRyaWctPnBvb2wsCisJCQkJICAgICAgQ09ORklHX0lJT19DT05TVU1FUlNfUEVSX1RSSUdHRVIsCisJCQkJICAgICAgaWxvZzIoMSkpOworCW11dGV4X3VubG9jaygmdHJpZy0+cG9vbF9sb2NrKTsKKwlpZiAocmV0ID49IDApCisJCXJldCArPSB0cmlnLT5zdWJpcnFfYmFzZTsKKworCXJldHVybiByZXQ7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgaWlvX3RyaWdnZXJfcHV0X2lycShzdHJ1Y3QgaWlvX3RyaWdnZXIgKnRyaWcsIGludCBpcnEpCit7CisJbXV0ZXhfbG9jaygmdHJpZy0+cG9vbF9sb2NrKTsKKwljbGVhcl9iaXQoaXJxIC0gdHJpZy0+c3ViaXJxX2Jhc2UsIHRyaWctPnBvb2wpOworCW11dGV4X3VubG9jaygmdHJpZy0+cG9vbF9sb2NrKTsKK307CisKIC8qKgogICogc3RydWN0IGlpb19wb2xsX2Z1bmMgLSBwb2xsIGZ1bmN0aW9uIHBhaXIKICAqCi0gKiBAbGlzdDoJCQlhc3NvY2lhdGUgdGhpcyB3aXRoIGEgdHJpZ2dlcnMgcG9sbGZ1bmNfbGlzdAogICogQHByaXZhdGVfZGF0YToJCWRhdGEgc3BlY2lmaWMgdG8gZGV2aWNlIChwYXNzZWQgaW50byBwb2xsIGZ1bmMpCi0gKiBAcG9sbF9mdW5jX2ltbWVkaWF0ZToJZnVuY3Rpb24gaW4gaGVyZSBpcyBydW4gZmlyc3QuIFRoZXkgc2hvdWxkIGJlCi0gKgkJCQlleHRyZW1lbHkgbGlnaHR3ZWlnaHQuICBUeXBpY2FsbHkgdXNlZCBmb3IgbGF0Y2gKLSAqCQkJCWNvbnRyb2wgb24gc2Vuc29yIHN1cHBvcnRpbmcgaXQuCi0gKiBAcG9sbF9mdW5jX21haW46CQlmdW5jdGlvbiBpbiBoZXJlIGlzIHJ1biBhZnRlciBhbGwgaW1tZWRpYXRlcy4KLSAqCQkJCVJlYWRpbmcgZnJvbSBzZW5zb3IgZXRjIHR5cGljYWxseSBpbnZvbHZlcwotICoJCQkJc2NoZWR1bGluZyBmcm9tIGhlcmUuCi0gKgotICogVGhlIHR3byBzdGFnZSBhcHByb2FjaCB1c2VkIGhlcmUgaXMgb25seSBpbXBvcnRhbnQgd2hlbiBtdWx0aXBsZSBzZW5zb3JzIGFyZQotICogYmVpbmcgdHJpZ2dlcmVkIGJ5IGEgc2luZ2xlIHRyaWdnZXIuIFRoaXMgcmVhbGx5IGNvbWVzIGludG8gaXRzIG93biB3aXRoCi0gKiBzaW11bHRhbmVvdXMgc2FtcGxpbmcgZGV2aWNlcyB3aGVyZSBhIHNpbXBsZSBsYXRjaCBjb21tYW5kIGNhbiBiZSB1c2VkIHRvCi0gKiBtYWtlIHRoZSBkZXZpY2Ugc3RvcmUgdGhlIHZhbHVlcyBvbiBhbGwgaW5wdXRzLgorICogQGg6CQkJCXRoZSBmdW5jdGlvbiB0aGF0IGlzIGFjdHVhbGx5IHJ1biBvbiB0cmlnZ2VyCisgKiBAdGhyZWFkOgkJCXRocmVhZGVkIGludGVycnVwdCBwYXJ0CisgKiBAdHlwZToJCQl0aGUgdHlwZSBvZiBpbnRlcnJ1cHQgKGJhc2ljYWxseSBpZiBvbmVzaG90KQorICogQG5hbWU6CQkJbmFtZSB1c2VkIHRvIGlkZW50aWZ5IHRoZSB0cmlnZ2VyIGNvbnN1bWVyLgorICogQGlycToJCQl0aGUgY29ycmVzcG9uZGluZyBpcnEgYXMgYWxsb2NhdGVkIGZyb20gdGhlCisgKgkJCQl0cmlnZ2VyIHBvb2wKKyAqIEB0aW1lc3RhbXA6CQkJc29tZSBkZXZpY2VzIG5lZWQgYSB0aW1lc3RhbXAgZ3JhYmJlZCBhcyBzb29uCisgKgkJCQlhcyBwb3NzaWJsZSBhZnRlciB0aGUgdHJpZ2dlciAtIGhlbmNlIGhhbmRsZXIKKyAqCQkJCXBhc3NlcyBpdCB2aWEgaGVyZS4KICAqKi8KIHN0cnVjdCBpaW9fcG9sbF9mdW5jIHsKLQlzdHJ1Y3QJCQkJbGlzdF9oZWFkIGxpc3Q7CiAJdm9pZAkJCQkqcHJpdmF0ZV9kYXRhOwotCXZvaWQgKCpwb2xsX2Z1bmNfaW1tZWRpYXRlKShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKLQl2b2lkICgqcG9sbF9mdW5jX21haW4pKHN0cnVjdCBpaW9fZGV2ICpwcml2YXRlX2RhdGEsIHM2NCB0aW1lKTsKLQorCWlycXJldHVybl90ICgqaCkoaW50IGlycSwgdm9pZCAqcCk7CisJaXJxcmV0dXJuX3QgKCp0aHJlYWQpKGludCBpcnEsIHZvaWQgKnApOworCWludCB0eXBlOworCWNoYXIgKm5hbWU7CisJaW50IGlycTsKKwlzNjQgdGltZXN0YW1wOwogfTsKIAotaW50IGlpb19hbGxvY19wb2xsZnVuYyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAotCQkgICAgICAgdm9pZCAoKmltbWVkaWF0ZSkoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiksCi0JCSAgICAgICB2b2lkICgqbWFpbikoc3RydWN0IGlpb19kZXYgKnByaXZhdGVfZGF0YSwgczY0IHRpbWUpKTsKK3N0cnVjdCBpaW9fcG9sbF9mdW5jCisqaWlvX2FsbG9jX3BvbGxmdW5jKGlycXJldHVybl90ICgqaCkoaW50IGlycSwgdm9pZCAqcCksCisJCSAgICBpcnFyZXR1cm5fdCAoKnRocmVhZCkoaW50IGlycSwgdm9pZCAqcCksCisJCSAgICBpbnQgdHlwZSwKKwkJICAgIHZvaWQgKnByaXZhdGUsCisJCSAgICBjb25zdCBjaGFyICpmbXQsCisJCSAgICAuLi4pOwordm9pZCBpaW9fZGVhbGxvY19wb2xsZnVuYyhzdHJ1Y3QgaWlvX3BvbGxfZnVuYyAqcGYpOworaXJxcmV0dXJuX3QgaWlvX3BvbGxmdW5jX3N0b3JlX3RpbWUoaW50IGlycSwgdm9pZCAqcCk7CiAKIC8qCiAgKiBUd28gZnVuY3Rpb25zIGZvciBjb21tb24gY2FzZSB3aGVyZSBhbGwgdGhhdCBoYXBwZW5zIGlzIGEgcG9sbGZ1bmMKQEAgLTE1Nyw4ICsxNzcsOCBAQAogaW50IGlpb190cmlnZ2VyZWRfcmluZ19wb3N0ZW5hYmxlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwogaW50IGlpb190cmlnZ2VyZWRfcmluZ19wcmVkaXNhYmxlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwogCi1zdHJ1Y3QgaWlvX3RyaWdnZXIgKmlpb19hbGxvY2F0ZV90cmlnZ2VyKHZvaWQpOwotCitzdHJ1Y3QgaWlvX3RyaWdnZXIgKmlpb19hbGxvY2F0ZV90cmlnZ2VyKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDEsIDIpKSk7CiB2b2lkIGlpb19mcmVlX3RyaWdnZXIoc3RydWN0IGlpb190cmlnZ2VyICp0cmlnKTsKIAogI2VuZGlmIC8qIF9JSU9fVFJJR0dFUl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby90cmlnZ2VyL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL3RyaWdnZXIvS2NvbmZpZwppbmRleCBjMzM3NzdlLi5iOGFiZjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL3RyaWdnZXIvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL3RyaWdnZXIvS2NvbmZpZwpAQCAtMzEsNiArMzEsNyBAQAogY29uZmlnIElJT19CRklOX1RNUl9UUklHR0VSCiAJdHJpc3RhdGUgIkJsYWNrZmluIFRJTUVSIHRyaWdnZXIiCiAJZGVwZW5kcyBvbiBCTEFDS0ZJTgorCXNlbGVjdCBCRklOX0dQVElNRVJTCiAJaGVscAogCSAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgdXNpbmcgYSBCbGFja2ZpbiB0aW1lciBhcyBJSU8gdHJpZ2dlcnMuCiAJICBJZiB1bnN1cmUsIHNheSBOIChidXQgaXQncyBzYWZlIHRvIHNheSAiWSIpLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby90cmlnZ2VyL2lpby10cmlnLWJmaW4tdGltZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vdHJpZ2dlci9paW8tdHJpZy1iZmluLXRpbWVyLmMKaW5kZXggNTgzYmVmMC4uNGYxNzI5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby90cmlnZ2VyL2lpby10cmlnLWJmaW4tdGltZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL3RyaWdnZXIvaWlvLXRyaWctYmZpbi10aW1lci5jCkBAIC0xMDYsMTEgKzEwNiw5IEBACiAKIHN0YXRpYyBERVZJQ0VfQVRUUihmcmVxdWVuY3ksIFNfSVJVR08gfCBTX0lXVVNSLCBpaW9fYmZpbl90bXJfZnJlcXVlbmN5X3Nob3csCiAJCSAgIGlpb19iZmluX3Rtcl9mcmVxdWVuY3lfc3RvcmUpOwotc3RhdGljIElJT19UUklHR0VSX05BTUVfQVRUUjsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmlpb19iZmluX3Rtcl90cmlnZ2VyX2F0dHJzW10gPSB7CiAJJmRldl9hdHRyX2ZyZXF1ZW5jeS5hdHRyLAotCSZkZXZfYXR0cl9uYW1lLmF0dHIsCiAJTlVMTCwKIH07CiAKQEAgLTExOCw2ICsxMTYsMTEgQEAKIAkuYXR0cnMgPSBpaW9fYmZpbl90bXJfdHJpZ2dlcl9hdHRycywKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICppaW9fYmZpbl90bXJfdHJpZ2dlcl9hdHRyX2dyb3Vwc1tdID0geworCSZpaW9fYmZpbl90bXJfdHJpZ2dlcl9hdHRyX2dyb3VwLAorCU5VTEwKK307CisKIAogc3RhdGljIGlycXJldHVybl90IGlpb19iZmluX3Rtcl90cmlnZ2VyX2lzcihpbnQgaXJxLCB2b2lkICpkZXZpZCkKIHsKQEAgLTE2NSwyNCArMTY4LDE4IEBACiAJc3QtPnRpbWVyX251bSA9IHJldDsKIAlzdC0+dCA9ICZpaW9fYmZpbl90aW1lcl9jb2RlW3N0LT50aW1lcl9udW1dOwogCi0Jc3QtPnRyaWcgPSBpaW9fYWxsb2NhdGVfdHJpZ2dlcigpOworCXN0LT50cmlnID0gaWlvX2FsbG9jYXRlX3RyaWdnZXIoImJmaW50bXIlZCIsIHN0LT50aW1lcl9udW0pOwogCWlmICghc3QtPnRyaWcpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQxOwogCX0KIAogCXN0LT50cmlnLT5wcml2YXRlX2RhdGEgPSBzdDsKLQlzdC0+dHJpZy0+Y29udHJvbF9hdHRycyA9ICZpaW9fYmZpbl90bXJfdHJpZ2dlcl9hdHRyX2dyb3VwOwogCXN0LT50cmlnLT5vd25lciA9IFRISVNfTU9EVUxFOwotCXN0LT50cmlnLT5uYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJiZmludG1yJWQiLCBzdC0+dGltZXJfbnVtKTsKLQlpZiAoc3QtPnRyaWctPm5hbWUgPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDI7Ci0JfQotCisJc3QtPnRyaWctPmRldi5ncm91cHMgPSBpaW9fYmZpbl90bXJfdHJpZ2dlcl9hdHRyX2dyb3VwczsKIAlyZXQgPSBpaW9fdHJpZ2dlcl9yZWdpc3RlcihzdC0+dHJpZyk7CiAJaWYgKHJldCkKLQkJZ290byBvdXQzOworCQlnb3RvIG91dDI7CiAKIAlyZXQgPSByZXF1ZXN0X2lycShzdC0+aXJxLCBpaW9fYmZpbl90bXJfdHJpZ2dlcl9pc3IsCiAJCQkgIDAsIHN0LT50cmlnLT5uYW1lLCBzdCk7CkBAIC0yMDEsOCArMTk4LDYgQEAKIAlyZXR1cm4gMDsKIG91dDQ6CiAJaWlvX3RyaWdnZXJfdW5yZWdpc3RlcihzdC0+dHJpZyk7Ci1vdXQzOgotCWtmcmVlKHN0LT50cmlnLT5uYW1lKTsKIG91dDI6CiAJaWlvX3B1dF90cmlnZ2VyKHN0LT50cmlnKTsKIG91dDE6CkBAIC0yMTgsNyArMjEzLDYgQEAKIAlkaXNhYmxlX2dwdGltZXJzKHN0LT50LT5iaXQpOwogCWZyZWVfaXJxKHN0LT5pcnEsIHN0KTsKIAlpaW9fdHJpZ2dlcl91bnJlZ2lzdGVyKHN0LT50cmlnKTsKLQlrZnJlZShzdC0+dHJpZy0+bmFtZSk7CiAJaWlvX3B1dF90cmlnZ2VyKHN0LT50cmlnKTsKIAlrZnJlZShzdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vdHJpZ2dlci9paW8tdHJpZy1ncGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL3RyaWdnZXIvaWlvLXRyaWctZ3Bpby5jCmluZGV4IDJjZTk1ZTkuLmIxODg2MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vdHJpZ2dlci9paW8tdHJpZy1ncGlvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby90cmlnZ2VyL2lpby10cmlnLWdwaW8uYwpAQCAtNDcsMTcgKzQ3LDYgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBJSU9fVFJJR0dFUl9OQU1FX0FUVFI7Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppaW9fZ3Bpb190cmlnZ2VyX2F0dHJzW10gPSB7Ci0JJmRldl9hdHRyX25hbWUuYXR0ciwKLQlOVUxMLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaWlvX2dwaW9fdHJpZ2dlcl9hdHRyX2dyb3VwID0gewotCS5hdHRycyA9IGlpb19ncGlvX3RyaWdnZXJfYXR0cnMsCi19OwotCiBzdGF0aWMgaW50IGlpb19ncGlvX3RyaWdnZXJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgaWlvX2dwaW9fdHJpZ2dlcl9pbmZvICp0cmlnX2luZm87CkBAIC03OSw3ICs2OCw3IEBACiAKIAkJZm9yIChpcnEgPSBpcnFfcmVzLT5zdGFydDsgaXJxIDw9IGlycV9yZXMtPmVuZDsgaXJxKyspIHsKIAotCQkJdHJpZyA9IGlpb19hbGxvY2F0ZV90cmlnZ2VyKCk7CisJCQl0cmlnID0gaWlvX2FsbG9jYXRlX3RyaWdnZXIoImlycXRyaWclZCIsIGlycSk7CiAJCQlpZiAoIXRyaWcpIHsKIAkJCQlyZXQgPSAtRU5PTUVNOwogCQkJCWdvdG8gZXJyb3JfZnJlZV9jb21wbGV0ZWRfcmVnaXN0cmF0aW9uczsKQEAgLTkwLDIxICs3OSwxNSBAQAogCQkJCXJldCA9IC1FTk9NRU07CiAJCQkJZ290byBlcnJvcl9wdXRfdHJpZ2dlcjsKIAkJCX0KLQkJCXRyaWctPmNvbnRyb2xfYXR0cnMgPSAmaWlvX2dwaW9fdHJpZ2dlcl9hdHRyX2dyb3VwOwogCQkJdHJpZy0+cHJpdmF0ZV9kYXRhID0gdHJpZ19pbmZvOwogCQkJdHJpZ19pbmZvLT5pcnEgPSBpcnE7CiAJCQl0cmlnLT5vd25lciA9IFRISVNfTU9EVUxFOwotCQkJdHJpZy0+bmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiaXJxdHJpZyVkIiwgaXJxKTsKLQkJCWlmICh0cmlnLT5uYW1lID09IE5VTEwpIHsKLQkJCQlyZXQgPSAtRU5PTUVNOwotCQkJCWdvdG8gZXJyb3JfZnJlZV90cmlnX2luZm87Ci0JCQl9CiAJCQlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGlpb19ncGlvX3RyaWdnZXJfcG9sbCwKIAkJCQkJICBpcnFmbGFncywgdHJpZy0+bmFtZSwgdHJpZyk7CiAJCQlpZiAocmV0KSB7CiAJCQkJZGV2X2VycigmcGRldi0+ZGV2LAogCQkJCQkicmVxdWVzdCBJUlEtJWQgZmFpbGVkIiwgaXJxKTsKLQkJCQlnb3RvIGVycm9yX2ZyZWVfbmFtZTsKKwkJCQlnb3RvIGVycm9yX2ZyZWVfdHJpZ19pbmZvOwogCQkJfQogCiAJCQlyZXQgPSBpaW9fdHJpZ2dlcl9yZWdpc3Rlcih0cmlnKTsKQEAgLTEyNCw4ICsxMDcsNiBAQAogLyogRmlyc3QgY2xlYW4gdXAgdGhlIHBhcnRseSBhbGxvY2F0ZWQgdHJpZ2dlciAqLwogZXJyb3JfcmVsZWFzZV9pcnE6CiAJZnJlZV9pcnEoaXJxLCB0cmlnKTsKLWVycm9yX2ZyZWVfbmFtZToKLQlrZnJlZSh0cmlnLT5uYW1lKTsKIGVycm9yX2ZyZWVfdHJpZ19pbmZvOgogCWtmcmVlKHRyaWdfaW5mbyk7CiBlcnJvcl9wdXRfdHJpZ2dlcjoKQEAgLTEzOCw3ICsxMTksNiBAQAogCQkJCSBhbGxvY19saXN0KSB7CiAJCXRyaWdfaW5mbyA9IHRyaWctPnByaXZhdGVfZGF0YTsKIAkJZnJlZV9pcnEoZ3Bpb190b19pcnEodHJpZ19pbmZvLT5pcnEpLCB0cmlnKTsKLQkJa2ZyZWUodHJpZy0+bmFtZSk7CiAJCWtmcmVlKHRyaWdfaW5mbyk7CiAJCWlpb190cmlnZ2VyX3VucmVnaXN0ZXIodHJpZyk7CiAJfQpAQCAtMTU5LDcgKzEzOSw2IEBACiAJCXRyaWdfaW5mbyA9IHRyaWctPnByaXZhdGVfZGF0YTsKIAkJaWlvX3RyaWdnZXJfdW5yZWdpc3Rlcih0cmlnKTsKIAkJZnJlZV9pcnEodHJpZ19pbmZvLT5pcnEsIHRyaWcpOwotCQlrZnJlZSh0cmlnLT5uYW1lKTsKIAkJa2ZyZWUodHJpZ19pbmZvKTsKIAkJaWlvX3B1dF90cmlnZ2VyKHRyaWcpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vdHJpZ2dlci9paW8tdHJpZy1wZXJpb2RpYy1ydGMuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vdHJpZ2dlci9paW8tdHJpZy1wZXJpb2RpYy1ydGMuYwppbmRleCAyNGYxNzRlLi4wMWNmN2UyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL3RyaWdnZXIvaWlvLXRyaWctcGVyaW9kaWMtcnRjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby90cmlnZ2VyL2lpby10cmlnLXBlcmlvZGljLXJ0Yy5jCkBAIC03MiwyMCArNzIsMjQgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgSUlPX1RSSUdHRVJfTkFNRV9BVFRSOwogc3RhdGljIERFVklDRV9BVFRSKGZyZXF1ZW5jeSwgU19JUlVHTyB8IFNfSVdVU1IsCiAJICAgIGlpb190cmlnX3BlcmlvZGljX3JlYWRfZnJlcSwKIAkgICAgaWlvX3RyaWdfcGVyaW9kaWNfd3JpdGVfZnJlcSk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppaW9fdHJpZ19wcnRjX2F0dHJzW10gPSB7CiAJJmRldl9hdHRyX2ZyZXF1ZW5jeS5hdHRyLAotCSZkZXZfYXR0cl9uYW1lLmF0dHIsCiAJTlVMTCwKIH07CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGlpb190cmlnX3BydGNfYXR0cl9ncm91cCA9IHsKIAkuYXR0cnMgPSBpaW9fdHJpZ19wcnRjX2F0dHJzLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmlpb190cmlnX3BydGNfYXR0cl9ncm91cHNbXSA9IHsKKwkmaWlvX3RyaWdfcHJ0Y19hdHRyX2dyb3VwLAorCU5VTEwKK307CisKIHN0YXRpYyB2b2lkIGlpb19wcnRjX3RyaWdnZXJfcG9sbCh2b2lkICpwcml2YXRlX2RhdGEpCiB7CiAJLyogVGltZXN0YW1wIGlzIG5vdCBwcm92aWRlZCBjdXJyZW50bHkgKi8KQEAgLTEwMyw3ICsxMDcsNyBAQAogCWZvciAoaSA9IDA7OyBpKyspIHsKIAkJaWYgKHBkYXRhW2ldID09IE5VTEwpCiAJCQlicmVhazsKLQkJdHJpZyA9IGlpb19hbGxvY2F0ZV90cmlnZ2VyKCk7CisJCXRyaWcgPSBpaW9fYWxsb2NhdGVfdHJpZ2dlcigicGVyaW9kaWMlcyIsIHBkYXRhW2ldKTsKIAkJaWYgKCF0cmlnKSB7CiAJCQlyZXQgPSAtRU5PTUVNOwogCQkJZ290byBlcnJvcl9mcmVlX2NvbXBsZXRlZF9yZWdpc3RyYXRpb25zOwpAQCAtMTE4LDI1ICsxMjIsMTkgQEAKIAkJdHJpZy0+cHJpdmF0ZV9kYXRhID0gdHJpZ19pbmZvOwogCQl0cmlnLT5vd25lciA9IFRISVNfTU9EVUxFOwogCQl0cmlnLT5zZXRfdHJpZ2dlcl9zdGF0ZSA9ICZpaW9fdHJpZ19wZXJpb2RpY19ydGNfc2V0X3N0YXRlOwotCQl0cmlnLT5uYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJwZXJpb2RpYyVzIiwgcGRhdGFbaV0pOwotCQlpZiAodHJpZy0+bmFtZSA9PSBOVUxMKSB7Ci0JCQlyZXQgPSAtRU5PTUVNOwotCQkJZ290byBlcnJvcl9mcmVlX3RyaWdfaW5mbzsKLQkJfQotCiAJCS8qIFJUQyBhY2Nlc3MgKi8KIAkJdHJpZ19pbmZvLT5ydGMKIAkJCT0gcnRjX2NsYXNzX29wZW4ocGRhdGFbaV0pOwogCQlpZiAodHJpZ19pbmZvLT5ydGMgPT0gTlVMTCkgewogCQkJcmV0ID0gLUVJTlZBTDsKLQkJCWdvdG8gZXJyb3JfZnJlZV9uYW1lOworCQkJZ290byBlcnJvcl9mcmVlX3RyaWdfaW5mbzsKIAkJfQogCQl0cmlnX2luZm8tPnRhc2suZnVuYyA9IGlpb19wcnRjX3RyaWdnZXJfcG9sbDsKIAkJdHJpZ19pbmZvLT50YXNrLnByaXZhdGVfZGF0YSA9IHRyaWc7CiAJCXJldCA9IHJ0Y19pcnFfcmVnaXN0ZXIodHJpZ19pbmZvLT5ydGMsICZ0cmlnX2luZm8tPnRhc2spOwogCQlpZiAocmV0KQogCQkJZ290byBlcnJvcl9jbG9zZV9ydGM7Ci0JCXRyaWctPmNvbnRyb2xfYXR0cnMgPSAmaWlvX3RyaWdfcHJ0Y19hdHRyX2dyb3VwOworCQl0cmlnLT5kZXYuZ3JvdXBzID0gaWlvX3RyaWdfcHJ0Y19hdHRyX2dyb3VwczsKIAkJcmV0ID0gaWlvX3RyaWdnZXJfcmVnaXN0ZXIodHJpZyk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycm9yX3VucmVnaXN0ZXJfcnRjX2lycTsKQEAgLTE0Niw4ICsxNDQsNiBAQAogCXJ0Y19pcnFfdW5yZWdpc3Rlcih0cmlnX2luZm8tPnJ0YywgJnRyaWdfaW5mby0+dGFzayk7CiBlcnJvcl9jbG9zZV9ydGM6CiAJcnRjX2NsYXNzX2Nsb3NlKHRyaWdfaW5mby0+cnRjKTsKLWVycm9yX2ZyZWVfbmFtZToKLQlrZnJlZSh0cmlnLT5uYW1lKTsKIGVycm9yX2ZyZWVfdHJpZ19pbmZvOgogCWtmcmVlKHRyaWdfaW5mbyk7CiBlcnJvcl9wdXRfdHJpZ2dlcl9hbmRfcmVtb3ZlX2Zyb21fbGlzdDoKQEAgLTE2MSw3ICsxNTcsNiBAQAogCQl0cmlnX2luZm8gPSB0cmlnLT5wcml2YXRlX2RhdGE7CiAJCXJ0Y19pcnFfdW5yZWdpc3Rlcih0cmlnX2luZm8tPnJ0YywgJnRyaWdfaW5mby0+dGFzayk7CiAJCXJ0Y19jbGFzc19jbG9zZSh0cmlnX2luZm8tPnJ0Yyk7Ci0JCWtmcmVlKHRyaWctPm5hbWUpOwogCQlrZnJlZSh0cmlnX2luZm8pOwogCQlpaW9fdHJpZ2dlcl91bnJlZ2lzdGVyKHRyaWcpOwogCX0KQEAgLTE4MCw3ICsxNzUsNiBAQAogCQl0cmlnX2luZm8gPSB0cmlnLT5wcml2YXRlX2RhdGE7CiAJCXJ0Y19pcnFfdW5yZWdpc3Rlcih0cmlnX2luZm8tPnJ0YywgJnRyaWdfaW5mby0+dGFzayk7CiAJCXJ0Y19jbGFzc19jbG9zZSh0cmlnX2luZm8tPnJ0Yyk7Ci0JCWtmcmVlKHRyaWctPm5hbWUpOwogCQlrZnJlZSh0cmlnX2luZm8pOwogCQlpaW9fdHJpZ2dlcl91bnJlZ2lzdGVyKHRyaWcpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vdHJpZ2dlci9paW8tdHJpZy1zeXNmcy5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby90cmlnZ2VyL2lpby10cmlnLXN5c2ZzLmMKaW5kZXggMTI3YTJhMy4uNDcyNDhjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby90cmlnZ2VyL2lpby10cmlnLXN5c2ZzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby90cmlnZ2VyL2lpby10cmlnLXN5c2ZzLmMKQEAgLTksMjUgKzksOTIgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogCiAjaW5jbHVkZSAiLi4vaWlvLmgiCiAjaW5jbHVkZSAiLi4vdHJpZ2dlci5oIgogCitzdHJ1Y3QgaWlvX3N5c2ZzX3RyaWcgeworCXN0cnVjdCBpaW9fdHJpZ2dlciAqdHJpZzsKKwlpbnQgaWQ7CisJc3RydWN0IGxpc3RfaGVhZCBsOworfTsKKworc3RhdGljIExJU1RfSEVBRChpaW9fc3lzZnNfdHJpZ19saXN0KTsKK3N0YXRpYyBERUZJTkVfTVVURVgoaWlvX3N5ZnNfdHJpZ19saXN0X211dCk7CisKK3N0YXRpYyBpbnQgaWlvX3N5c2ZzX3RyaWdnZXJfcHJvYmUoaW50IGlkKTsKK3N0YXRpYyBzc2l6ZV90IGlpb19zeXNmc190cmlnX2FkZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCQkgIHNpemVfdCBsZW4pCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGlucHV0OworCisJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJmlucHV0KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGlpb19zeXNmc190cmlnZ2VyX3Byb2JlKGlucHV0KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldHVybiBsZW47Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoYWRkX3RyaWdnZXIsIFNfSVdVU1IsIE5VTEwsICZpaW9fc3lzZnNfdHJpZ19hZGQpOworCitzdGF0aWMgaW50IGlpb19zeXNmc190cmlnZ2VyX3JlbW92ZShpbnQgaWQpOworc3RhdGljIHNzaXplX3QgaWlvX3N5c2ZzX3RyaWdfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLAorCQkJCSAgICAgc2l6ZV90IGxlbikKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgaW5wdXQ7CisKKwlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmaW5wdXQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0gaWlvX3N5c2ZzX3RyaWdnZXJfcmVtb3ZlKGlucHV0KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihyZW1vdmVfdHJpZ2dlciwgU19JV1VTUiwgTlVMTCwgJmlpb19zeXNmc190cmlnX3JlbW92ZSk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppaW9fc3lzZnNfdHJpZ19hdHRyc1tdID0geworCSZkZXZfYXR0cl9hZGRfdHJpZ2dlci5hdHRyLAorCSZkZXZfYXR0cl9yZW1vdmVfdHJpZ2dlci5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBpaW9fc3lzZnNfdHJpZ19ncm91cCA9IHsKKwkuYXR0cnMgPSBpaW9fc3lzZnNfdHJpZ19hdHRycywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICppaW9fc3lzZnNfdHJpZ19ncm91cHNbXSA9IHsKKwkmaWlvX3N5c2ZzX3RyaWdfZ3JvdXAsCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBkZXZpY2UgaWlvX3N5c2ZzX3RyaWdfZGV2ID0geworCS5idXMgPSAmaWlvX2J1c190eXBlLAorCS5ncm91cHMgPSBpaW9fc3lzZnNfdHJpZ19ncm91cHMsCit9OworCiBzdGF0aWMgc3NpemVfdCBpaW9fc3lzZnNfdHJpZ2dlcl9wb2xsKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBpaW9fdHJpZ2dlciAqdHJpZyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWlpb190cmlnZ2VyX3BvbGwodHJpZywgMCk7CisJaWlvX3RyaWdnZXJfcG9sbF9jaGFpbmVkKHRyaWcsIDApOwogCiAJcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgREVWSUNFX0FUVFIodHJpZ2dlcl9ub3csIFNfSVdVU1IsIE5VTEwsIGlpb19zeXNmc190cmlnZ2VyX3BvbGwpOwotc3RhdGljIElJT19UUklHR0VSX05BTUVfQVRUUjsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmlpb19zeXNmc190cmlnZ2VyX2F0dHJzW10gPSB7CiAJJmRldl9hdHRyX3RyaWdnZXJfbm93LmF0dHIsCi0JJmRldl9hdHRyX25hbWUuYXR0ciwKIAlOVUxMLAogfTsKIApAQCAtMzUsNzAgKzEwMiw5NiBAQAogCS5hdHRycyA9IGlpb19zeXNmc190cmlnZ2VyX2F0dHJzLAogfTsKIAotc3RhdGljIGludCBfX2RldmluaXQgaWlvX3N5c2ZzX3RyaWdnZXJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3QgaWlvX3RyaWdnZXIgKnRyaWc7Ci0JaW50IHJldDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICppaW9fc3lzZnNfdHJpZ2dlcl9hdHRyX2dyb3Vwc1tdID0geworCSZpaW9fc3lzZnNfdHJpZ2dlcl9hdHRyX2dyb3VwLAorCU5VTEwKK307CiAKLQl0cmlnID0gaWlvX2FsbG9jYXRlX3RyaWdnZXIoKTsKLQlpZiAoIXRyaWcpIHsKK3N0YXRpYyBpbnQgaWlvX3N5c2ZzX3RyaWdnZXJfcHJvYmUoaW50IGlkKQoreworCXN0cnVjdCBpaW9fc3lzZnNfdHJpZyAqdDsKKwlpbnQgcmV0OworCWJvb2wgZm91bmRpdCA9IGZhbHNlOworCW11dGV4X2xvY2soJmlpb19zeWZzX3RyaWdfbGlzdF9tdXQpOworCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJmlpb19zeXNmc190cmlnX2xpc3QsIGwpCisJCWlmIChpZCA9PSB0LT5pZCkgeworCQkJZm91bmRpdCA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCWlmIChmb3VuZGl0KSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0MTsKKwl9CisJdCA9IGttYWxsb2Moc2l6ZW9mKCp0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHQgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDE7CiAJfQotCi0JdHJpZy0+Y29udHJvbF9hdHRycyA9ICZpaW9fc3lzZnNfdHJpZ2dlcl9hdHRyX2dyb3VwOwotCXRyaWctPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JdHJpZy0+bmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAic3lzZnN0cmlnJWQiLCBwZGV2LT5pZCk7Ci0JaWYgKHRyaWctPm5hbWUgPT0gTlVMTCkgeworCXQtPmlkID0gaWQ7CisJdC0+dHJpZyA9IGlpb19hbGxvY2F0ZV90cmlnZ2VyKCJzeXNmc3RyaWclZCIsIGlkKTsKKwlpZiAoIXQtPnRyaWcpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQyOworCQlnb3RvIGZyZWVfdDsKIAl9CiAKLQlyZXQgPSBpaW9fdHJpZ2dlcl9yZWdpc3Rlcih0cmlnKTsKKwl0LT50cmlnLT5kZXYuZ3JvdXBzID0gaWlvX3N5c2ZzX3RyaWdnZXJfYXR0cl9ncm91cHM7CisJdC0+dHJpZy0+b3duZXIgPSBUSElTX01PRFVMRTsKKwl0LT50cmlnLT5kZXYucGFyZW50ID0gJmlpb19zeXNmc190cmlnX2RldjsKKworCXJldCA9IGlpb190cmlnZ2VyX3JlZ2lzdGVyKHQtPnRyaWcpOwogCWlmIChyZXQpCi0JCWdvdG8gb3V0MzsKLQotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHRyaWcpOwotCisJCWdvdG8gb3V0MjsKKwlsaXN0X2FkZCgmdC0+bCwgJmlpb19zeXNmc190cmlnX2xpc3QpOworCV9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7CisJbXV0ZXhfdW5sb2NrKCZpaW9fc3lmc190cmlnX2xpc3RfbXV0KTsKIAlyZXR1cm4gMDsKLW91dDM6Ci0Ja2ZyZWUodHJpZy0+bmFtZSk7Ci1vdXQyOgotCWlpb19wdXRfdHJpZ2dlcih0cmlnKTsKLW91dDE6CiAKK291dDI6CisJaWlvX3B1dF90cmlnZ2VyKHQtPnRyaWcpOworZnJlZV90OgorCWtmcmVlKHQpOworb3V0MToKKwltdXRleF91bmxvY2soJmlpb19zeWZzX3RyaWdfbGlzdF9tdXQpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IGlpb19zeXNmc190cmlnZ2VyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBpaW9fc3lzZnNfdHJpZ2dlcl9yZW1vdmUoaW50IGlkKQogewotCXN0cnVjdCBpaW9fdHJpZ2dlciAqdHJpZyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWJvb2wgZm91bmRpdCA9IGZhbHNlOworCXN0cnVjdCBpaW9fc3lzZnNfdHJpZyAqdDsKKwltdXRleF9sb2NrKCZpaW9fc3lmc190cmlnX2xpc3RfbXV0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZpaW9fc3lzZnNfdHJpZ19saXN0LCBsKQorCQlpZiAoaWQgPT0gdC0+aWQpIHsKKwkJCWZvdW5kaXQgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwlpZiAoIWZvdW5kaXQpIHsKKwkJbXV0ZXhfdW5sb2NrKCZpaW9fc3lmc190cmlnX2xpc3RfbXV0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCi0JaWlvX3RyaWdnZXJfdW5yZWdpc3Rlcih0cmlnKTsKLQlrZnJlZSh0cmlnLT5uYW1lKTsKLQlpaW9fcHV0X3RyaWdnZXIodHJpZyk7CisJaWlvX3RyaWdnZXJfdW5yZWdpc3Rlcih0LT50cmlnKTsKKwlpaW9fZnJlZV90cmlnZ2VyKHQtPnRyaWcpOwogCisJbGlzdF9kZWwoJnQtPmwpOworCWtmcmVlKHQpOworCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOworCW11dGV4X3VubG9jaygmaWlvX3N5ZnNfdHJpZ19saXN0X211dCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlpb19zeXNmc190cmlnZ2VyX2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJpaW9fc3lzZnNfdHJpZ2dlciIsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAotCX0sCi0JLnByb2JlID0gaWlvX3N5c2ZzX3RyaWdnZXJfcHJvYmUsCi0JLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGlpb19zeXNmc190cmlnZ2VyX3JlbW92ZSksCi19OwogCiBzdGF0aWMgaW50IF9faW5pdCBpaW9fc3lzZnNfdHJpZ19pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaWlvX3N5c2ZzX3RyaWdnZXJfZHJpdmVyKTsKKwlkZXZpY2VfaW5pdGlhbGl6ZSgmaWlvX3N5c2ZzX3RyaWdfZGV2KTsKKwlkZXZfc2V0X25hbWUoJmlpb19zeXNmc190cmlnX2RldiwgImlpb19zeXNmc190cmlnZ2VyIik7CisJcmV0dXJuIGRldmljZV9hZGQoJmlpb19zeXNmc190cmlnX2Rldik7CiB9CiBtb2R1bGVfaW5pdChpaW9fc3lzZnNfdHJpZ19pbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IGlpb19zeXNmc190cmlnX2V4aXQodm9pZCkKIHsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaWlvX3N5c2ZzX3RyaWdnZXJfZHJpdmVyKTsKKwlkZXZpY2VfdW5yZWdpc3RlcigmaWlvX3N5c2ZzX3RyaWdfZGV2KTsKIH0KIG1vZHVsZV9leGl0KGlpb19zeXNmc190cmlnX2V4aXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdC5jIGIvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbF9zc3QuYwppbmRleCA4MWMyNGQxLi5jMGMxNDRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0LmMKQEAgLTEwNyw2ICsxMDcsOSBAQAogCXVuc2lnbmVkIGludCBzaXplID0gMCwgc3RyX2lkOwogCXN0cnVjdCBzdHJlYW1faW5mbyAqc3RyZWFtIDsKIAorCS8qIERvIG5vdCBoYW5kbGUgaW50ZXJydXB0IGluIHN1c3BlbmRlZCBzdGF0ZSAqLworCWlmIChkcnYtPnNzdF9zdGF0ZSA9PSBTU1RfU1VTUEVOREVEKQorCQlyZXR1cm4gSVJRX05PTkU7CiAJLyogSW50ZXJydXB0IGFycml2ZWQsIGNoZWNrIHNyYyAqLwogCWlzci5mdWxsID0gc3N0X3NoaW1fcmVhZChkcnYtPnNoaW0sIFNTVF9JU1JYKTsKIApAQCAtMzE2LDE0ICszMTksMzAgQEAKIAlpZiAoc3N0X2Rydl9jdHgtPnBjaV9pZCA9PSBTU1RfTVJTVF9QQ0lfSUQpIHsKIAkJcmV0ID0gbWlzY19yZWdpc3RlcigmbHBlX2Rldik7CiAJCWlmIChyZXQpIHsKLSAJCQlwcl9lcnIoImNvdWxkbid0IHJlZ2lzdGVyIG1pc2MgZHJpdmVyXG4iKTsKKwkJCXByX2VycigiY291bGRuJ3QgcmVnaXN0ZXIgTFBFIGRldmljZVxuIik7CiAJCQlnb3RvIGRvX2ZyZWVfbWlzYzsKICAJCX0KKwl9IGVsc2UgaWYgKHNzdF9kcnZfY3R4LT5wY2lfaWQgPT0gU1NUX01GTERfUENJX0lEKSB7CisJCXUzMiBjc3I7CisKKwkJLyphbGxvY2F0ZSBtZW0gZm9yIGZ3IGNvbnRleHQgc2F2ZSBkdXJpbmcgc3VzcGVuZCovCisJCXNzdF9kcnZfY3R4LT5md19jbnR4ID0ga3phbGxvYyhGV19DT05URVhUX01FTSwgR0ZQX0tFUk5FTCk7CisJCWlmICghc3N0X2Rydl9jdHgtPmZ3X2NudHgpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGRvX2ZyZWVfbWlzYzsKKwkJfQorCQkvKnNldHRpbmcgemVybyBhcyB0aGF0IGlzIHZhbGlkIG1lbSB0byByZXN0b3JlKi8KKwkJc3N0X2Rydl9jdHgtPmZ3X2NudHhfc2l6ZSA9IDA7CisKKwkJLypzZXQgbHBlIHN0YXJ0IGNsb2NrIGFuZCByYW0gc2l6ZSovCisJCWNzciA9IHNzdF9zaGltX3JlYWQoc3N0X2Rydl9jdHgtPnNoaW0sIFNTVF9DU1IpOworCQljc3IgfD0gMHgzMDA2MDsgLypyZW1vdmUgdGhlIGNsb2NrIHJhdGlvIGFmdGVyIGZ3IGZpeCovCisJCXNzdF9zaGltX3dyaXRlKHNzdF9kcnZfY3R4LT5zaGltLCBTU1RfQ1NSLCBjc3IpOwogCX0KIAlzc3RfZHJ2X2N0eC0+bHBlX3N0YWxsZWQgPSAwOwotCXBtX3J1bnRpbWVfc2V0X2FjdGl2ZSgmcGNpLT5kZXYpOwotCXBtX3J1bnRpbWVfZW5hYmxlKCZwY2ktPmRldik7CisJcGNpX3NldF9kcnZkYXRhKHBjaSwgc3N0X2Rydl9jdHgpOwogCXBtX3J1bnRpbWVfYWxsb3coJnBjaS0+ZGV2KTsKKwlwbV9ydW50aW1lX3B1dF9ub2lkbGUoJnBjaS0+ZGV2KTsKIAlwcl9kZWJ1ZygiLi4uc3VjY2Vzc2Z1bGx5IGRvbmUhISFcbiIpOwogCXJldHVybiByZXQ7CiAKQEAgLTM1NSw3ICszNzQsOCBAQAogCWRlc3Ryb3lfd29ya3F1ZXVlKHNzdF9kcnZfY3R4LT5tYWRfd3EpOwogZG9fZnJlZV9kcnZfY3R4OgogCWtmcmVlKHNzdF9kcnZfY3R4KTsKLQlwcl9lcnIoIlByb2JlIGZhaWxlZCB3aXRoIDB4JXhcbiIsIHJldCk7CisJc3N0X2Rydl9jdHggPSBOVUxMOworCXByX2VycigiUHJvYmUgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzY5LDM1ICszODksNzYgQEAKICovCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgaW50ZWxfc3N0X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpKQogeworCXBtX3J1bnRpbWVfZ2V0X25vcmVzdW1lKCZwY2ktPmRldik7CisJcG1fcnVudGltZV9mb3JiaWQoJnBjaS0+ZGV2KTsKIAlwY2lfZGV2X3B1dChzc3RfZHJ2X2N0eC0+cGNpKTsKIAltdXRleF9sb2NrKCZzc3RfZHJ2X2N0eC0+c3N0X2xvY2spOwogCXNzdF9kcnZfY3R4LT5zc3Rfc3RhdGUgPSBTU1RfVU5fSU5JVDsKIAltdXRleF91bmxvY2soJnNzdF9kcnZfY3R4LT5zc3RfbG9jayk7CiAJbWlzY19kZXJlZ2lzdGVyKCZscGVfY3RybCk7Ci0JaWYgKHNzdF9kcnZfY3R4LT5wY2lfaWQgPT0gU1NUX01SU1RfUENJX0lEKQotCQltaXNjX2RlcmVnaXN0ZXIoJmxwZV9kZXYpOwogCWZyZWVfaXJxKHBjaS0+aXJxLCBzc3RfZHJ2X2N0eCk7CiAJaW91bm1hcChzc3RfZHJ2X2N0eC0+ZHJhbSk7CiAJaW91bm1hcChzc3RfZHJ2X2N0eC0+aXJhbSk7CiAJaW91bm1hcChzc3RfZHJ2X2N0eC0+bWFpbGJveCk7CiAJaW91bm1hcChzc3RfZHJ2X2N0eC0+c2hpbSk7CiAJc3N0X2Rydl9jdHgtPnBtaWNfc3RhdGUgPSBTTkRfTUFEX1VOX0lOSVQ7Ci0JaWYgKHNzdF9kcnZfY3R4LT5wY2lfaWQgPT0gU1NUX01SU1RfUENJX0lEKQorCWlmIChzc3RfZHJ2X2N0eC0+cGNpX2lkID09IFNTVF9NUlNUX1BDSV9JRCkgeworCQltaXNjX2RlcmVnaXN0ZXIoJmxwZV9kZXYpOwogCQlrZnJlZShzc3RfZHJ2X2N0eC0+bW1hcF9tZW0pOworCX0gZWxzZQorCQlrZnJlZShzc3RfZHJ2X2N0eC0+ZndfY250eCk7CiAJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAlkZXN0cm95X3dvcmtxdWV1ZShzc3RfZHJ2X2N0eC0+cHJvY2Vzc19yZXBseV93cSk7CiAJZGVzdHJveV93b3JrcXVldWUoc3N0X2Rydl9jdHgtPnByb2Nlc3NfbXNnX3dxKTsKIAlkZXN0cm95X3dvcmtxdWV1ZShzc3RfZHJ2X2N0eC0+cG9zdF9tc2dfd3EpOwogCWRlc3Ryb3lfd29ya3F1ZXVlKHNzdF9kcnZfY3R4LT5tYWRfd3EpOwotCWtmcmVlKHNzdF9kcnZfY3R4KTsKLQlwY2lfcmVsZWFzZV9yZWdpb24ocGNpLCAxKTsKLQlwY2lfcmVsZWFzZV9yZWdpb24ocGNpLCAyKTsKLQlwY2lfcmVsZWFzZV9yZWdpb24ocGNpLCAzKTsKLQlwY2lfcmVsZWFzZV9yZWdpb24ocGNpLCA0KTsKLQlwY2lfcmVsZWFzZV9yZWdpb24ocGNpLCA1KTsKKwlrZnJlZShwY2lfZ2V0X2RydmRhdGEocGNpKSk7CisJc3N0X2Rydl9jdHggPSBOVUxMOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGNpKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKIAlwY2lfc2V0X2RydmRhdGEocGNpLCBOVUxMKTsKIH0KIAordm9pZCBzc3Rfc2F2ZV9kc3BfY29udGV4dCh2b2lkKQoreworCXN0cnVjdCBzbmRfc3N0X2N0eHRfcGFyYW1zIGZ3X2NvbnRleHQ7CisJdW5zaWduZWQgaW50IHB2dF9pZCwgaTsKKwlzdHJ1Y3QgaXBjX3Bvc3QgKm1zZyA9IE5VTEw7CisKKwkvKmNoZWNrIGNwdSB0eXBlKi8KKwlpZiAoc3N0X2Rydl9jdHgtPnBjaV9pZCAhPSBTU1RfTUZMRF9QQ0lfSUQpCisJCXJldHVybjsKKwkJLypub3Qgc3VwcG9ydGVkIGZvciByZXN0Ki8KKwlpZiAoc3N0X2Rydl9jdHgtPnNzdF9zdGF0ZSAhPSBTU1RfRldfUlVOTklORykgeworCQlwcl9kZWJ1ZygiZncgbm90IHJ1bm5pbmcgbm8gY29udGV4dCBzYXZlIC4uLlxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKnNlbmQgbXNnIHRvIGZ3Ki8KKwlpZiAoc3N0X2NyZWF0ZV9sYXJnZV9tc2coJm1zZykpCisJCXJldHVybjsKKwlwdnRfaWQgPSBzc3RfYXNzaWduX3B2dF9pZChzc3RfZHJ2X2N0eCk7CisJaSA9IHNzdF9nZXRfYmxvY2tfc3RyZWFtKHNzdF9kcnZfY3R4KTsKKwlzc3RfZHJ2X2N0eC0+YWxsb2NfYmxvY2tbaV0uc3N0X2lkID0gcHZ0X2lkOworCXNzdF9maWxsX2hlYWRlcigmbXNnLT5oZWFkZXIsIElQQ19JQV9HRVRfRldfQ1RYVCwgMSwgcHZ0X2lkKTsKKwltc2ctPmhlYWRlci5wYXJ0LmRhdGEgPSBzaXplb2YoZndfY29udGV4dCkgKyBzaXplb2YodTMyKTsKKwlmd19jb250ZXh0LmFkZHJlc3MgPSB2aXJ0X3RvX3BoeXMoKHZvaWQgKilzc3RfZHJ2X2N0eC0+ZndfY250eCk7CisJZndfY29udGV4dC5zaXplID0gRldfQ09OVEVYVF9NRU07CisJbWVtY3B5KG1zZy0+bWFpbGJveF9kYXRhLCAmbXNnLT5oZWFkZXIsIHNpemVvZih1MzIpKTsKKwltZW1jcHkobXNnLT5tYWlsYm94X2RhdGEgKyBzaXplb2YodTMyKSwKKwkJCQkmZndfY29udGV4dCwgc2l6ZW9mKGZ3X2NvbnRleHQpKTsKKwlzcGluX2xvY2soJnNzdF9kcnZfY3R4LT5saXN0X3NwaW5fbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmbXNnLT5ub2RlLCAmc3N0X2Rydl9jdHgtPmlwY19kaXNwYXRjaF9saXN0KTsKKwlzcGluX3VubG9jaygmc3N0X2Rydl9jdHgtPmxpc3Rfc3Bpbl9sb2NrKTsKKwlzc3RfcG9zdF9tZXNzYWdlKCZzc3RfZHJ2X2N0eC0+aXBjX3Bvc3RfbXNnX3dxKTsKKwkvKndhaXQgZm9yIHJlcGx5Ki8KKwlpZiAoc3N0X3dhaXRfdGltZW91dChzc3RfZHJ2X2N0eCwgJnNzdF9kcnZfY3R4LT5hbGxvY19ibG9ja1tpXSkpCisJCXByX2RlYnVnKCJlcnIgZncgY29udGV4dCBzYXZlIHRpbWVvdXQgIC4uLlxuIik7CisJc3N0X2Rydl9jdHgtPmFsbG9jX2Jsb2NrW2ldLnNzdF9pZCA9IEJMT0NLX1VOSU5JVDsKKwlwcl9kZWJ1ZygiZncgY29udGV4dCBzYXZlZCAgLi4uXG4iKTsKKwlyZXR1cm47Cit9CisKIC8qIFBvd2VyIE1hbmFnZW1lbnQgKi8KIC8qCiAqIGludGVsX3NzdF9zdXNwZW5kIC0gUENJIHN1c3BlbmQgZnVuY3Rpb24KQEAgLTQxNyw2ICs0NzgsOCBAQAogCQlwcl9lcnIoImFjdGl2ZSBzdHJlYW1zLG5vdCBhYmxlIHRvIHN1c3BlbmRcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KKwkvKnNhdmUgZncgY29udGV4dCovCisJc3N0X3NhdmVfZHNwX2NvbnRleHQoKTsKIAkvKkFzc2VydCBSRVNFVCBvbiBMUEUgUHJvY2Vzc29yKi8KIAljc3IuZnVsbCA9IHNzdF9zaGltX3JlYWQoc3N0X2Rydl9jdHgtPnNoaW0sIFNTVF9DU1IpOwogCWNzci5mdWxsID0gY3NyLmZ1bGwgfCAweDI7CkBAIC00NjEsMTggKzUyNCw0NSBAQAogCXJldHVybiAwOwogfQogCisvKiBUaGUgcnVudGltZV9zdXNwZW5kL3Jlc3VtZSBpcyBwcmV0dHkgbXVjaCBzaW1pbGFyIHRvIHRoZSBsZWdhY3kgc3VzcGVuZC9yZXN1bWUgd2l0aCB0aGUgbm90ZWQgZXhjZXB0aW9uIGJlbG93OgorICogVGhlIFBDSSBjb3JlIHRha2VzIGNhcmUgb2YgdGFraW5nIHRoZSBzeXN0ZW0gdGhyb3VnaCBEM2hvdCBhbmQgcmVzdG9yaW5nIGl0IGJhY2sgdG8gRDAgYW5kIHNvIHRoZXJlIGlzCisgKiBubyBuZWVkIHRvIGR1cGxpY2F0ZSB0aGF0IGhlcmUuCisgKi8KIHN0YXRpYyBpbnQgaW50ZWxfc3N0X3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSB0b19wY2lfZGV2KGRldik7Ci0JcHJfZGVidWcoInJ1bnRpbWVfc3VzcGVuZCBjYWxsZWRcbiIpOwotCXJldHVybiBpbnRlbF9zc3Rfc3VzcGVuZChwY2lfZGV2LCBQTVNHX1NVU1BFTkQpOworCXVuaW9uIGNvbmZpZ19zdGF0dXNfcmVnIGNzcjsKKworCXByX2RlYnVnKCJpbnRlbF9zc3RfcnVudGltZV9zdXNwZW5kIGNhbGxlZFxuIik7CisJaWYgKHNzdF9kcnZfY3R4LT5zdHJlYW1fY250KSB7CisJCXByX2VycigiYWN0aXZlIHN0cmVhbXMsbm90IGFibGUgdG8gc3VzcGVuZFxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCS8qc2F2ZSBmdyBjb250ZXh0Ki8KKwlzc3Rfc2F2ZV9kc3BfY29udGV4dCgpOworCS8qQXNzZXJ0IFJFU0VUIG9uIExQRSBQcm9jZXNzb3IqLworCWNzci5mdWxsID0gc3N0X3NoaW1fcmVhZChzc3RfZHJ2X2N0eC0+c2hpbSwgU1NUX0NTUik7CisJY3NyLmZ1bGwgPSBjc3IuZnVsbCB8IDB4MjsKKwkvKiBNb3ZlIHRoZSBTU1Qgc3RhdGUgdG8gU3VzcGVuZGVkICovCisJbXV0ZXhfbG9jaygmc3N0X2Rydl9jdHgtPnNzdF9sb2NrKTsKKwlzc3RfZHJ2X2N0eC0+c3N0X3N0YXRlID0gU1NUX1NVU1BFTkRFRDsKKwlzc3Rfc2hpbV93cml0ZShzc3RfZHJ2X2N0eC0+c2hpbSwgU1NUX0NTUiwgY3NyLmZ1bGwpOworCW11dGV4X3VubG9jaygmc3N0X2Rydl9jdHgtPnNzdF9sb2NrKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBpbnRlbF9zc3RfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpOwotCXByX2RlYnVnKCJydW50aW1lX3Jlc3VtZSBjYWxsZWRcbiIpOwotCXJldHVybiBpbnRlbF9zc3RfcmVzdW1lKHBjaV9kZXYpOworCisJcHJfZGVidWcoImludGVsX3NzdF9ydW50aW1lX3Jlc3VtZSBjYWxsZWRcbiIpOworCWlmIChzc3RfZHJ2X2N0eC0+c3N0X3N0YXRlICE9IFNTVF9TVVNQRU5ERUQpIHsKKwkJcHJfZXJyKCJTU1QgaXMgbm90IGluIHN1c3BlbmRlZCBzdGF0ZVxuIik7CisJCXJldHVybiAwOworCX0KKworCW11dGV4X2xvY2soJnNzdF9kcnZfY3R4LT5zc3RfbG9jayk7CisJc3N0X2Rydl9jdHgtPnNzdF9zdGF0ZSA9IFNTVF9VTl9JTklUOworCW11dGV4X3VubG9jaygmc3N0X2Rydl9jdHgtPnNzdF9sb2NrKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBpbnRlbF9zc3RfcnVudGltZV9pZGxlKHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTU0NSw2ICs2MzUsNyBAQAogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKIAogCXByX2RlYnVnKCJkcml2ZXIgdW5sb2FkZWRcbiIpOworCXNzdF9kcnZfY3R4ID0gTlVMTDsKIAlyZXR1cm47CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0LmggYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdC5oCmluZGV4IGNiMDNmZjcuLjRhZDI4MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbF9zc3QuaApAQCAtMzAsOSArMzAsMTEgQEAKICAqICBUaGlzIGZpbGUgaXMgc2hhcmVkIGJldHdlZW4gdGhlIFNTVCBhbmQgTUFEIGRyaXZlcnMKICAqLwogI2luY2x1ZGUgImludGVsX3NzdF9pb2N0bC5oIgorI2luY2x1ZGUgPHNvdW5kL2phY2suaD4KIAogI2RlZmluZSBTU1RfQ0FSRF9OQU1FUyAiaW50ZWxfbWlkX2NhcmQiCiAKKyNkZWZpbmUgTUZMRF9NQVhfSFdfQ0ggNAogLyogY29udHJvbCBsaXN0IFBtaWMgJiBMcGUgKi8KIC8qIElucHV0IGNvbnRyb2xzICovCiBlbnVtIHBvcnRfc3RhdHVzIHsKQEAgLTgyLDEyICs4NCwxNiBAQAogCWludCBudW1fY2hhbm5lbDsKIAlpbnQgaW5wdXRfZGV2X2lkOwogCWludCBtdXRlX3N0YXR1czsKLQlpbnQgcGJfb247CisJc3RydWN0IG11dGV4IGxvY2s7CisJaW50IHBiX29uLCBwYmhzX29uOwogCWludCBjYXBfb247CiAJaW50IG91dHB1dF9kZXZfaWQ7CisJaW50IGxpbmVvdXRfZGV2X2lkLCBsaW5lX291dF9uYW1lc19jbnQ7CisJaW50IHByZXZfbGluZW91dF9kZXZfaWQ7CisJYm9vbCBqYWNrX2ludGVycnVwdF9zdGF0dXM7CiAJaW50ICgqc2V0X2lucHV0X2RldikgKHU4IHZhbHVlKTsKIAlpbnQgKCpzZXRfb3V0cHV0X2RldikgKHU4IHZhbHVlKTsKLQorCWludCAoKnNldF9saW5lb3V0X2RldikgKHU4IHZhbHVlKTsKIAlpbnQgKCpzZXRfbXV0ZSkgKGludCBkZXZfaWQsIHU4IHZhbHVlKTsKIAlpbnQgKCpnZXRfbXV0ZSkgKGludCBkZXZfaWQsIHU4ICp2YWx1ZSk7CiAKQEAgLTEwMywxMSArMTA5LDMwIEBACiAKIAlpbnQgKCpwb3dlcl91cF9wbWljX3BiKSAodW5zaWduZWQgaW50IHBvcnQpOwogCWludCAoKnBvd2VyX3VwX3BtaWNfY3ApICh1bnNpZ25lZCBpbnQgcG9ydCk7Ci0JaW50ICgqcG93ZXJfZG93bl9wbWljX3BiKSAodm9pZCk7Ci0JaW50ICgqcG93ZXJfZG93bl9wbWljX2NwKSAodm9pZCk7CisJaW50ICgqcG93ZXJfZG93bl9wbWljX3BiKSAodW5zaWduZWQgaW50IGRldmljZSk7CisJaW50ICgqcG93ZXJfZG93bl9wbWljX2NwKSAodW5zaWduZWQgaW50IGRldmljZSk7CiAJaW50ICgqcG93ZXJfZG93bl9wbWljKSAodm9pZCk7CisJdm9pZCAoKnBtaWNfaXJxX2NiKSAodm9pZCAqY2JfZGF0YSwgdTggdmFsdWUpOworCXZvaWQgKCpwbWljX2lycV9lbmFibGUpKHZvaWQgKmRhdGEpOworCWludCAoKnBtaWNfamFja19lbmFibGUpICh2b2lkKTsKKwlpbnQgKCpwbWljX2dldF9taWNfYmlhcykodm9pZCAqaW50ZWxtYWRkYXRhKTsKKwlpbnQgKCpwbWljX3NldF9oZWFkc2V0X3N0YXRlKShpbnQgc3RhdGUpOworCisJdW5zaWduZWQgaW50IGh3X2RtaWNfbWFwW01GTERfTUFYX0hXX0NIXTsKKwl1bnNpZ25lZCBpbnQgYXZhaWxhYmxlX2RtaWNzOworCWludCAoKnNldF9od19kbWljX3JvdXRlKSAodTggaW5kZXgpOworCisJaW50IGdwaW9fYW1wOwogfTsKIAorZXh0ZXJuIHZvaWQgc3N0X21hZF9zZW5kX2phY2tfcmVwb3J0KHN0cnVjdCBzbmRfamFjayAqamFjaywKKwkJCQkgICAgIGludCBidXR0b25wcmVzc2V2ZW50LAorCQkJCSAgICAgaW50IHN0YXR1cyk7CisKKworaW50IGludGVtYWRfc2V0X2hlYWRzZXRfc3RhdGUoaW50IHN0YXRlKTsKK2ludCBpbnRlbG1hZF9nZXRfbWljX2JpYXModm9pZCk7CisKIHN0cnVjdCBpbnRlbF9zc3RfcGNtX2NvbnRyb2wgewogCWludCAoKm9wZW4pIChzdHJ1Y3Qgc25kX3NzdF9wYXJhbXMgKnN0cl9wYXJhbSk7CiAJaW50ICgqZGV2aWNlX2NvbnRyb2wpIChpbnQgY21kLCB2b2lkICphcmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbF9zc3RfYXBwX2ludGVyZmFjZS5jIGIvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbF9zc3RfYXBwX2ludGVyZmFjZS5jCmluZGV4IDFkMDYyMTIuLmI4YzdkZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0X2FwcF9pbnRlcmZhY2UuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9hcHBfaW50ZXJmYWNlLmMKQEAgLTQxOCwxMCArNDE4LDYgQEAKIAlzdGF0aWMgaW50IHNlbnRfb2Zmc2V0OwogCXN0YXRpYyB1bnNpZ25lZCBsb25nIHNlbnRfaW5kZXg7CiAKLQlzdHJlYW1fYnVmcyA9IGt6YWxsb2Moc2l6ZW9mKCpzdHJlYW1fYnVmcyksIEdGUF9LRVJORUwpOwotCWlmICghc3RyZWFtX2J1ZnMpCi0JCXJldHVybiAtRU5PTUVNOwotCXN0cmVhbV9idWZzLT5hZGRyID0gc3N0X2Rydl9jdHgtPm1tYXBfbWVtOwogI2lmZGVmIENPTkZJR19NUlNUX1JBUl9IQU5ETEVSCiAJaWYgKHN0cmVhbS0+b3BzID09IFNUUkVBTV9PUFNfUExBWUJBQ0tfRFJNKSB7CiAJCWZvciAoaW5kZXggPSBzdHJlYW0tPnNnX2luZGV4OyBpbmRleCA8IG5yX3NlZ3M7IGluZGV4KyspIHsKQEAgLTQ0OCw2ICs0NDQsMTAgQEAKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAjZW5kaWYKKwlzdHJlYW1fYnVmcyA9IGt6YWxsb2Moc2l6ZW9mKCpzdHJlYW1fYnVmcyksIEdGUF9LRVJORUwpOworCWlmICghc3RyZWFtX2J1ZnMpCisJCXJldHVybiAtRU5PTUVNOworCXN0cmVhbV9idWZzLT5hZGRyID0gc3N0X2Rydl9jdHgtPm1tYXBfbWVtOwogCW1tYXBfbGVuID0gc3N0X2Rydl9jdHgtPm1tYXBfbGVuOwogCXN0cmVhbV9idWZzLT5hZGRyID0gc3N0X2Rydl9jdHgtPm1tYXBfbWVtOwogCWJ1ZnAgPSBzdHJlYW0tPmN1cl9wdHI7CkBAIC05NjEsNiArOTYxLDM0IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorCitpbnQgc3N0X2lvY3RsX3R1bmluZ19wYXJhbXModW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHNuZF9zc3RfdHVuaW5nX3BhcmFtcyBwYXJhbXM7CisJc3RydWN0IGlwY19wb3N0ICptc2c7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJnBhcmFtcywgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YocGFyYW1zKSkpCisJCXJldHVybiAtRUZBVUxUOworCWlmIChwYXJhbXMuc2l6ZSA+IFNTVF9NQUlMQk9YX1NJWkUpCisJCXJldHVybiAtRU5PTUVNOworCXByX2RlYnVnKCJQYXJhbWV0ZXIgJWQsIFN0cmVhbSAlZCwgU2l6ZSAlZFxuIiwgcGFyYW1zLnR5cGUsCisJCQlwYXJhbXMuc3RyX2lkLCBwYXJhbXMuc2l6ZSk7CisJaWYgKHNzdF9jcmVhdGVfbGFyZ2VfbXNnKCZtc2cpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNzdF9maWxsX2hlYWRlcigmbXNnLT5oZWFkZXIsIElQQ19JQV9UVU5JTkdfUEFSQU1TLCAxLCBwYXJhbXMuc3RyX2lkKTsKKwltc2ctPmhlYWRlci5wYXJ0LmRhdGEgPSBzaXplb2YodTMyKSArIHNpemVvZihwYXJhbXMpICsgcGFyYW1zLnNpemU7CisJbWVtY3B5KG1zZy0+bWFpbGJveF9kYXRhLCAmbXNnLT5oZWFkZXIuZnVsbCwgc2l6ZW9mKHUzMikpOworCW1lbWNweShtc2ctPm1haWxib3hfZGF0YSArIHNpemVvZih1MzIpLCAmcGFyYW1zLCBzaXplb2YocGFyYW1zKSk7CisJaWYgKGNvcHlfZnJvbV91c2VyKG1zZy0+bWFpbGJveF9kYXRhICsgc2l6ZW9mKHBhcmFtcyksCisJCQkodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZylwYXJhbXMuYWRkciwKKwkJCXBhcmFtcy5zaXplKSkgeworCQlrZnJlZShtc2ctPm1haWxib3hfZGF0YSk7CisJCWtmcmVlKG1zZyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlyZXR1cm4gc3N0X3NlbmRfYWxnb19pcGMoJm1zZyk7Cit9CiAvKioKICAqIGludGVsX3NzdF9pb2N0bCAtIHJlY2VpdmVzIHRoZSBkZXZpY2UgaW9jdGwncwogICogQGZpbGVfcHRyOnBvaW50ZXIgdG8gZmlsZQpAQCAtMTQxMiw2ICsxNDQwLDE1IEBACiAJCX0KIAkJcmV0dmFsID0gaW50ZWxfc3N0X2lvY3RsX2RzcChjbWQsIGFyZyk7CiAJCWJyZWFrOworCisJY2FzZSBfSU9DX05SKFNORFJWX1NTVF9UVU5JTkdfUEFSQU1TKToKKwkJaWYgKG1pbm9yICE9IEFNX01PRFVMRSkgeworCQkJcmV0dmFsID0gLUVCQURSUUM7CisJCQlicmVhazsKKwkJfQorCQlyZXR2YWwgPSBzc3RfaW9jdGxfdHVuaW5nX3BhcmFtcyhhcmcpOworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCXJldHZhbCA9IC1FSU5WQUw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbF9zc3RfY29tbW9uLmggYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9jb21tb24uaAppbmRleCAwYTYwZTg2Li5mOGU5ZGE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9jb21tb24uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9jb21tb24uaApAQCAtMjgsOCArMjgsOCBAQAogICogIENvbW1vbiBwcml2YXRlIGRlY2xhcmF0aW9ucyBmb3IgU1NUCiAgKi8KIAotI2RlZmluZSBTU1RfRFJJVkVSX1ZFUlNJT04gIjEuMi4wOSIKLSNkZWZpbmUgU1NUX1ZFUlNJT05fTlVNIDB4MTIwOQorI2RlZmluZSBTU1RfRFJJVkVSX1ZFUlNJT04gIjEuMi4xNyIKKyNkZWZpbmUgU1NUX1ZFUlNJT05fTlVNIDB4MTIxNwogCiAvKiBkcml2ZXIgbmFtZXMgKi8KICNkZWZpbmUgU1NUX0RSVl9OQU1FICJpbnRlbF9zc3RfZHJpdmVyIgpAQCAtMzcsNiArMzcsNyBAQAogI2RlZmluZSBTU1RfTUZMRF9QQ0lfSUQgMHgwODJGCiAjZGVmaW5lIFBDSV9JRF9MRU5HVEggNAogI2RlZmluZSBTU1RfU1VTUEVORF9ERUxBWSAyMDAwCisjZGVmaW5lIEZXX0NPTlRFWFRfTUVNICg2NCoxMDI0KQogCiBlbnVtIHNzdF9zdGF0ZXMgewogCVNTVF9GV19MT0FERUQgPSAxLApAQCAtOTQsNyArOTUsNyBAQAogLyogU1NUIHNoaW0gcmVnaXN0ZXJzIHRvIHN0cnVjdHVyZSBtYXBwaW5nICAqLwogdW5pb24gY29uZmlnX3N0YXR1c19yZWcgewogCXN0cnVjdCB7Ci0JCXUzMiByc3ZkMDoxOworCQl1MzIgbWZsZF9zdHJiOjE7CiAJCXUzMiBzc3RfcmVzZXQ6MTsKIAkJdTMyIGh3X3JzdmQ6MzsKIAkJdTMyIHNzdF9jbGs6MjsKQEAgLTQxNyw2ICs0MTgsOCBAQAogCXVuc2lnbmVkIGludAkJYXVkaW9fc3RhcnQ7CiAJZGV2X3QJCQlkZXZ0X2QsIGRldnRfYzsKIAl1bnNpZ25lZCBpbnQJCW1heF9zdHJlYW1zOworCXVuc2lnbmVkIGludAkJKmZ3X2NudHg7CisJdW5zaWduZWQgaW50CQlmd19jbnR4X3NpemU7CiB9OwogCiBleHRlcm4gc3RydWN0IGludGVsX3NzdF9kcnYgKnNzdF9kcnZfY3R4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbF9zc3RfZHJ2X2ludGVyZmFjZS5jIGIvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbF9zc3RfZHJ2X2ludGVyZmFjZS5jCmluZGV4IGU5YzE4MjEuLjEwMjE0NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0X2Rydl9pbnRlcmZhY2UuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9kcnZfaW50ZXJmYWNlLmMKQEAgLTEwNSwyMSArMTA1LDI4IEBACiAJaWYgKCFzc3RfdmFsaWRhdGVfc3RyaWQoc3RyX2lkKSkgewogCQkvKiBzdHJfaWQgaXMgdmFsaWQsIHNvIHN0cmVhbSBpcyBhbGxvYWN0ZWQgKi8KIAkJc3RyZWFtID0gJnNzdF9kcnZfY3R4LT5zdHJlYW1zW3N0cl9pZF07CisJCWlmIChzc3RfZnJlZV9zdHJlYW0oc3RyX2lkKSkKKwkJCXNzdF9jbGVhbl9zdHJlYW0oJnNzdF9kcnZfY3R4LT5zdHJlYW1zW3N0cl9pZF0pOwogCQlpZiAoc3RyZWFtLT5vcHMgPT0gU1RSRUFNX09QU19QTEFZQkFDSyB8fAogCQkJCXN0cmVhbS0+b3BzID09IFNUUkVBTV9PUFNfUExBWUJBQ0tfRFJNKSB7CiAJCQlzc3RfZHJ2X2N0eC0+cGJfc3RyZWFtcy0tOwotCQkJaWYgKHNzdF9kcnZfY3R4LT5wYl9zdHJlYW1zID09IDApCi0JCQkJc3N0X2Rydl9jdHgtPnNjYXJkX29wcy0+cG93ZXJfZG93bl9wbWljX3BiKCk7CisJCQlpZiAoc3N0X2Rydl9jdHgtPnBjaV9pZCA9PSBTU1RfTUZMRF9QQ0lfSUQpCisJCQkJc3N0X2Rydl9jdHgtPnNjYXJkX29wcy0+cG93ZXJfZG93bl9wbWljX3BiKAorCQkJCQkJc3RyZWFtLT5kZXZpY2UpOworCQkJZWxzZSB7CisJCQkJaWYgKHNzdF9kcnZfY3R4LT5wYl9zdHJlYW1zID09IDApCisJCQkJCXNzdF9kcnZfY3R4LT5zY2FyZF9vcHMtPgorCQkJCQlwb3dlcl9kb3duX3BtaWNfcGIoc3RyZWFtLT5kZXZpY2UpOworCQkJfQogCQl9IGVsc2UgaWYgKHN0cmVhbS0+b3BzID09IFNUUkVBTV9PUFNfQ0FQVFVSRSkgewogCQkJc3N0X2Rydl9jdHgtPmNwX3N0cmVhbXMtLTsKIAkJCWlmIChzc3RfZHJ2X2N0eC0+Y3Bfc3RyZWFtcyA9PSAwKQotCQkJCXNzdF9kcnZfY3R4LT5zY2FyZF9vcHMtPnBvd2VyX2Rvd25fcG1pY19jcCgpOworCQkJCXNzdF9kcnZfY3R4LT5zY2FyZF9vcHMtPnBvd2VyX2Rvd25fcG1pY19jcCgKKwkJCQkJCXN0cmVhbS0+ZGV2aWNlKTsKIAkJfQogCQlpZiAoc3N0X2Rydl9jdHgtPnBiX3N0cmVhbXMgPT0gMAogCQkJCSYmIHNzdF9kcnZfY3R4LT5jcF9zdHJlYW1zID09IDApCiAJCQlzc3RfZHJ2X2N0eC0+c2NhcmRfb3BzLT5wb3dlcl9kb3duX3BtaWMoKTsKLQkJaWYgKHNzdF9mcmVlX3N0cmVhbShzdHJfaWQpKQotCQkJc3N0X2NsZWFuX3N0cmVhbSgmc3N0X2Rydl9jdHgtPnN0cmVhbXNbc3RyX2lkXSk7CiAJfQogfQogCkBAIC0yNzYsOCArMjgzLDggQEAKIAkJcmV0dmFsID0gc3N0X3Jlc3VtZV9zdHJlYW0obWFkX29wcy0+c3RyZWFtX2lkKTsKIAkJYnJlYWs7CiAJY2FzZSBTU1RfU05EX0RST1A6Ci0vKgkJcmV0dmFsID0gc3N0X2Ryb3Bfc3RyZWFtKG1hZF9vcHMtPnN0cmVhbV9pZCk7Ci0qLwkJYnJlYWs7CisJCXJldHZhbCA9IHNzdF9kcm9wX3N0cmVhbShtYWRfb3BzLT5zdHJlYW1faWQpOworCQlicmVhazsKIAljYXNlIFNTVF9TTkRfU1RBUlQ6CiAJCQlwcl9kZWJ1ZygiU1NUIERlYnVnOiBzdGFydCBzdHJlYW1cbiIpOwogCQlyZXR2YWwgPSBzc3Rfc3RhcnRfc3RyZWFtKG1hZF9vcHMtPnN0cmVhbV9pZCk7CkBAIC01MDgsNyArNTE1LDYgQEAKIAkJCXNzdF9kcnZfY3R4LT5wbWljX3N0YXRlID0gU05EX01BRF9JTklUX0RPTkU7CiAJCQlzc3RfZHJ2X2N0eC0+cnhfdGltZV9zbG90X3N0YXR1cyA9IDA7IC8qZGVmYXVsdCBBTUlDKi8KIAkJCWNhcmQtPnBjbV9jb250cm9sID0gc3N0X3BtaWNfb3BzLnBjbV9jb250cm9sOwotCQkJc3N0X2Rydl9jdHgtPnNjYXJkX29wcy0+Y2FyZF9zdGF0dXMgPSBTTkRfQ0FSRF9VTl9JTklUOwogCQkJcmV0dXJuIDA7CiAJCX0gZWxzZSB7CiAJCQlwcl9lcnIoInN0cmNtcCBmYWlsICVzXG4iLCBjYXJkLT5tb2R1bGVfbmFtZSk7CkBAIC01MjAsNiArNTI2LDkgQEAKIAkJcHJfZXJyKCJSZXBlYXQgZm9yIHJlZ2lzdHJhdGlvbi4uZGVuaWVkXG4iKTsKIAkJcmV0dXJuIC1FQkFEUlFDOwogCX0KKwkvKiBUaGUgQVNvQyBjb2RlIGRvZXNuJ3Qgc2V0IHNjYXJkX29wcyAqLworCWlmIChzc3RfZHJ2X2N0eC0+c2NhcmRfb3BzKQorCQlzc3RfZHJ2X2N0eC0+c2NhcmRfb3BzLT5jYXJkX3N0YXR1cyA9IFNORF9DQVJEX1VOX0lOSVQ7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl9zc3RfY2FyZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9kc3AuYyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0X2RzcC5jCmluZGV4IGJmZmU0YzYuLmE4OWUxYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0X2RzcC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0X2RzcC5jCkBAIC03Myw3ICs3Myw4IEBACiAJdW5pb24gY29uZmlnX3N0YXR1c19yZWcgY3NyOwogCiAJcHJfZGVidWcoIlJlc2V0dGluZyB0aGUgRFNQIGluIG1lZGZpZWxkXG4iKTsKLQljc3IuZnVsbCA9IDB4MDQ4MzAzRTI7CisJY3NyLmZ1bGwgPSBzc3Rfc2hpbV9yZWFkKHNzdF9kcnZfY3R4LT5zaGltLCBTU1RfQ1NSKTsKKwljc3IuZnVsbCB8PSAweDM4MjsKIAlzc3Rfc2hpbV93cml0ZShzc3RfZHJ2X2N0eC0+c2hpbSwgU1NUX0NTUiwgY3NyLmZ1bGwpOwogCiAJcmV0dXJuIDA7CkBAIC0xMDksMTEgKzExMCwxNiBAQAogewogCXVuaW9uIGNvbmZpZ19zdGF0dXNfcmVnIGNzcjsKIAotCWNzci5mdWxsID0gMHgwNDgzMDA2MjsKKwljc3IuZnVsbCA9IHNzdF9zaGltX3JlYWQoc3N0X2Rydl9jdHgtPnNoaW0sIFNTVF9DU1IpOworCWNzci5wYXJ0LmJ5cGFzcyA9IDA7CiAJc3N0X3NoaW1fd3JpdGUoc3N0X2Rydl9jdHgtPnNoaW0sIFNTVF9DU1IsIGNzci5mdWxsKTsKLQljc3IuZnVsbCA9IDB4MDQ4MzAwNjM7CisJY3NyLmZ1bGwgPSBzc3Rfc2hpbV9yZWFkKHNzdF9kcnZfY3R4LT5zaGltLCBTU1RfQ1NSKTsKKwljc3IucGFydC5tZmxkX3N0cmIgPSAxOwogCXNzdF9zaGltX3dyaXRlKHNzdF9kcnZfY3R4LT5zaGltLCBTU1RfQ1NSLCBjc3IuZnVsbCk7Ci0JY3NyLmZ1bGwgPSAweDA0ODMwMDYxOworCWNzci5mdWxsID0gc3N0X3NoaW1fcmVhZChzc3RfZHJ2X2N0eC0+c2hpbSwgU1NUX0NTUik7CisJY3NyLnBhcnQucnVuX3N0YWxsID0gMDsKKwljc3IucGFydC5zc3RfcmVzZXQgPSAwOworCXByX2RlYnVnKCJTdGFydGluZyB0aGUgRFNQX21lZGZsZCAleFxuIiwgY3NyLmZ1bGwpOwogCXNzdF9zaGltX3dyaXRlKHNzdF9kcnZfY3R4LT5zaGltLCBTU1RfQ1NSLCBjc3IuZnVsbCk7CiAJcHJfZGVidWcoIlN0YXJ0aW5nIHRoZSBEU1BfbWVkZmxkXG4iKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbF9zc3RfZndfaXBjLmggYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9md19pcGMuaAppbmRleCAwZjBjNWJiLi41ZDBjYzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9md19pcGMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9md19pcGMuaApAQCAtNTYsNiArNTYsOCBAQAogI2RlZmluZSBJUENfSUFfR0VUX0ZXX1ZFUlNJT04gMHgwNAogI2RlZmluZSBJUENfSUFfR0VUX0ZXX0JVSUxEX0lORiAweDA1CiAjZGVmaW5lIElQQ19JQV9HRVRfRldfSU5GTyAweDA2CisjZGVmaW5lIElQQ19JQV9HRVRfRldfQ1RYVCAweDA3CisjZGVmaW5lIElQQ19JQV9TRVRfRldfQ1RYVCAweDA4CiAKIC8qIEkyTCBDb2RlYyBDb25maWcvY29udHJvbCBtc2dzICovCiAjZGVmaW5lIElQQ19JQV9TRVRfQ09ERUNfUEFSQU1TIDB4MTAKQEAgLTY5LDYgKzcxLDcgQEAKICNkZWZpbmUgSVBDX0lBX0RFQ09ERV9GUkFNRVMgMHgxOAogCiAjZGVmaW5lIElQQ19JQV9BTEdfUEFSQU1TIDB4MUEKKyNkZWZpbmUgSVBDX0lBX1RVTklOR19QQVJBTVMgMHgxQgogCiAvKiBJMkwgU3RyZWFtIGNvbmZpZy9jb250cm9sIG1zZ3MgKi8KICNkZWZpbmUgSVBDX0lBX0FMTE9DX1NUUkVBTSAweDIwIC8qIEFsbG9jYXRlIGEgc3RyZWFtIElEICovCkBAIC00MDYsNCArNDA5LDggQEAKIAljaGFyICptYWlsYm94X2RhdGE7CiB9OwogCitzdHJ1Y3Qgc25kX3NzdF9jdHh0X3BhcmFtcyB7CisJdTMyIGFkZHJlc3M7IC8qIFBoeXNpY2FsIEFkZHJlc3MgaW4gRERSIHdoZXJlIHRoZSBjb250ZXh0IGlzIHN0b3JlZCAqLworCXUzMiBzaXplOyAvKiBzaXplIG9mIHRoZSBjb250ZXh0ICovCit9OwogI2VuZGlmIC8qIF9fSU5URUxfU1NUX0ZXX0lQQ19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0X2lvY3RsLmggYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9pb2N0bC5oCmluZGV4IGJlYmMzOTUuLjVkYTVlZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0X2lvY3RsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbF9zc3RfaW9jdGwuaApAQCAtNDAwLDYgKzQwMCwxMyBAQAogCXN0cnVjdCBzbmRfc3N0X2J1ZmZzICpvYnVmczsKIH07CiAKK3N0cnVjdCBzbmRfc3N0X3R1bmluZ19wYXJhbXMgeworCV9fdTggdHlwZTsKKwlfX3U4IHN0cl9pZDsKKwlfX3U4IHNpemU7CisJX191OCByc3ZkOworCV9fYWxpZ25lZF91NjQgYWRkcjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogLypJT0NUTCBkZWZpbmVkIGhlcmUgKi8KIC8qU1NUIE1NRiBJT0NUTFMgb25seSAqLwogI2RlZmluZSBTTkRSVl9TU1RfU1RSRUFNX1NFVF9QQVJBTVMgX0lPUignTCcsIDB4MDAsIFwKQEAgLTQyOCw1ICs0MzUsNiBAQAogLypEU1AgSW9jdGxzIG9uIC9kZXYvaW50ZWxfc3N0X2N0cmwgb25seSovCiAjZGVmaW5lIFNORFJWX1NTVF9TRVRfQUxHTwlfSU9XKCdMJywgMHgzMCwgIHN0cnVjdCBzbmRfcHBwX3BhcmFtcyAqKQogI2RlZmluZSBTTkRSVl9TU1RfR0VUX0FMR08JX0lPV1IoJ0wnLCAweDMxLCAgc3RydWN0IHNuZF9wcHBfcGFyYW1zICopCisjZGVmaW5lIFNORFJWX1NTVF9UVU5JTkdfUEFSQU1TCV9JT1coJ0wnLCAweDMyLCAgc3RydWN0IHNuZF9zc3RfdHVuaW5nX3BhcmFtcyAqKQogCiAjZW5kaWYgLyogX19JTlRFTF9TU1RfSU9DVExfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9pcGMuYyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0X2lwYy5jCmluZGV4IDA3NDJkZGUuLjVjMzQ0NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0X2lwYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0X2lwYy5jCkBAIC0xNTQsNiArMTU0LDM3IEBACiAJc3N0X3NoaW1fd3JpdGUoc3N0X2Rydl9jdHgtPnNoaW0sIFNTVF9JTVJYLCBpbXIuZnVsbCk7CiB9CiAKK3ZvaWQgc3N0X3Jlc3RvcmVfZndfY29udGV4dCh2b2lkKQoreworCXN0cnVjdCBzbmRfc3N0X2N0eHRfcGFyYW1zIGZ3X2NvbnRleHQ7CisJc3RydWN0IGlwY19wb3N0ICptc2cgPSBOVUxMOworCisJcHJfZGVidWcoInJlc3RvcmVfZndfY29udGV4dFxuIik7CisJLypjaGVjayBjcHUgdHlwZSovCisJaWYgKHNzdF9kcnZfY3R4LT5wY2lfaWQgIT0gU1NUX01GTERfUENJX0lEKQorCQlyZXR1cm47CisJCS8qbm90IHN1cHBvcnRlZCBmb3IgcmVzdCovCisJaWYgKCFzc3RfZHJ2X2N0eC0+ZndfY250eF9zaXplKQorCQlyZXR1cm47CisJCS8qbm90aGluZyB0byByZXN0b3JlKi8KKwlwcl9kZWJ1ZygicmVzdG9yaW5nIGNvbnRleHQuLi4uLi5cbiIpOworCS8qc2VuZCBtc2cgdG8gZncqLworCWlmIChzc3RfY3JlYXRlX2xhcmdlX21zZygmbXNnKSkKKwkJcmV0dXJuOworCisJc3N0X2ZpbGxfaGVhZGVyKCZtc2ctPmhlYWRlciwgSVBDX0lBX1NFVF9GV19DVFhULCAxLCAwKTsKKwltc2ctPmhlYWRlci5wYXJ0LmRhdGEgPSBzaXplb2YoZndfY29udGV4dCkgKyBzaXplb2YodTMyKTsKKwlmd19jb250ZXh0LmFkZHJlc3MgPSB2aXJ0X3RvX3BoeXMoKHZvaWQgKilzc3RfZHJ2X2N0eC0+ZndfY250eCk7CisJZndfY29udGV4dC5zaXplID0gc3N0X2Rydl9jdHgtPmZ3X2NudHhfc2l6ZTsKKwltZW1jcHkobXNnLT5tYWlsYm94X2RhdGEsICZtc2ctPmhlYWRlciwgc2l6ZW9mKHUzMikpOworCW1lbWNweShtc2ctPm1haWxib3hfZGF0YSArIHNpemVvZih1MzIpLAorCQkJCSZmd19jb250ZXh0LCBzaXplb2YoZndfY29udGV4dCkpOworCXNwaW5fbG9jaygmc3N0X2Rydl9jdHgtPmxpc3Rfc3Bpbl9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZtc2ctPm5vZGUsICZzc3RfZHJ2X2N0eC0+aXBjX2Rpc3BhdGNoX2xpc3QpOworCXNwaW5fdW5sb2NrKCZzc3RfZHJ2X2N0eC0+bGlzdF9zcGluX2xvY2spOworCXNzdF9wb3N0X21lc3NhZ2UoJnNzdF9kcnZfY3R4LT5pcGNfcG9zdF9tc2dfd3EpOworCXJldHVybjsKK30KIC8qCiAgKiBwcm9jZXNzX2Z3X2luaXQgLSBwcm9jZXNzIHRoZSBGVyBpbml0IG1zZwogICoKQEAgLTE4NCwxMyArMjE1LDEzIEBACiAJc3N0X2Rydl9jdHgtPnNzdF9zdGF0ZSA9IFNTVF9GV19SVU5OSU5HOwogCXNzdF9kcnZfY3R4LT5scGVfc3RhbGxlZCA9IDA7CiAJbXV0ZXhfdW5sb2NrKCZzc3RfZHJ2X2N0eC0+c3N0X2xvY2spOwotCXByX2RlYnVnKCJGVyBWZXJzaW9uICV4LiV4XG4iLAotCQkJaW5pdC0+ZndfdmVyc2lvbi5tYWpvciwgaW5pdC0+ZndfdmVyc2lvbi5taW5vcik7Ci0JcHJfZGVidWcoIkJ1aWxkIE5vICV4IFR5cGUgJXhcbiIsCi0JCQlpbml0LT5md192ZXJzaW9uLmJ1aWxkLCBpbml0LT5md192ZXJzaW9uLnR5cGUpOworCXByX2RlYnVnKCJGVyBWZXJzaW9uICUwMnguJTAyeC4lMDJ4XG4iLCBpbml0LT5md192ZXJzaW9uLm1ham9yLAorCQkJaW5pdC0+ZndfdmVyc2lvbi5taW5vciwgaW5pdC0+ZndfdmVyc2lvbi5idWlsZCk7CisJcHJfZGVidWcoIkJ1aWxkIFR5cGUgJXhcbiIsIGluaXQtPmZ3X3ZlcnNpb24udHlwZSk7CiAJcHJfZGVidWcoIiBCdWlsZCBkYXRlICVzIFRpbWUgJXNcbiIsCiAJCQlpbml0LT5idWlsZF9pbmZvLmRhdGUsIGluaXQtPmJ1aWxkX2luZm8udGltZSk7CiAJc3N0X3dha2VfdXBfYWxsb2NfYmxvY2soc3N0X2Rydl9jdHgsIEZXX0RXTkxfSUQsIHJldHZhbCwgTlVMTCk7CisJc3N0X3Jlc3RvcmVfZndfY29udGV4dCgpOwogCXJldHVybiByZXR2YWw7CiB9CiAvKioKQEAgLTM4NSw2ICs0MTYsMjQgQEAKIAkJfQogCQlicmVhazsKIAl9CisKKwljYXNlIElQQ19JQV9UVU5JTkdfUEFSQU1TOiB7CisJCXByX2RlYnVnKCJzc3Q6SVBDX1RVTklOR19QQVJBTVMgcmVzcDogJXhcbiIsIG1zZy0+aGVhZGVyLmZ1bGwpOworCQlwcl9kZWJ1ZygiZGF0YSB2YWx1ZSAleFxuIiwgbXNnLT5oZWFkZXIucGFydC5kYXRhKTsKKwkJaWYgKG1zZy0+aGVhZGVyLnBhcnQubGFyZ2UpIHsKKwkJCXByX2RlYnVnKCJhbGcgc2V0IGZhaWxlZFxuIik7CisJCQlzc3RfZHJ2X2N0eC0+cHBwX3BhcmFtc19ibGsucmV0X2NvZGUgPQorCQkJCQkJCS1tc2ctPmhlYWRlci5wYXJ0LmRhdGE7CisJCX0gZWxzZSB7CisJCQlwcl9kZWJ1ZygiYWxnIHNldCBzdWNjZXNzXG4iKTsKKwkJCXNzdF9kcnZfY3R4LT5wcHBfcGFyYW1zX2Jsay5yZXRfY29kZSA9IDA7CisJCX0KKwkJaWYgKHNzdF9kcnZfY3R4LT5wcHBfcGFyYW1zX2Jsay5vbiA9PSB0cnVlKSB7CisJCQlzc3RfZHJ2X2N0eC0+cHBwX3BhcmFtc19ibGsuY29uZGl0aW9uID0gdHJ1ZTsKKwkJCXdha2VfdXAoJnNzdF9kcnZfY3R4LT53YWl0X3F1ZXVlKTsKKwkJfQorCX0KKwogCWNhc2UgSVBDX0lBX0dFVF9GV19JTkZPOiB7CiAJCXN0cnVjdCBzbmRfc3N0X2Z3X2luZm8gKmZ3X2luZm8gPQogCQkJKHN0cnVjdCBzbmRfc3N0X2Z3X2luZm8gKiltc2ctPm1haWxib3g7CkBAIC02MTUsMTIgKzY2NCwxOCBAQAogCQlicmVhazsKIAogCWNhc2UgSVBDX0lBX0ZSRUVfU1RSRUFNOgorCQlzdHJfaW5mbyA9ICZzc3RfZHJ2X2N0eC0+c3RyZWFtc1tzdHJfaWRdOwogCQlpZiAoIW1zZy0+aGVhZGVyLnBhcnQuZGF0YSkgewogCQkJcHJfZGVidWcoIlN0cmVhbSAlZCBmcmVlZFxuIiwgc3RyX2lkKTsKIAkJfSBlbHNlIHsKIAkJCXByX2VycigiRnJlZSBmb3IgJWQgcmV0IGVycm9yICV4XG4iLAogCQkJCSAgICAgICBzdHJfaWQsIG1zZy0+aGVhZGVyLnBhcnQuZGF0YSk7CiAJCX0KKwkJaWYgKHN0cl9pbmZvLT5jdHJsX2Jsay5vbiA9PSB0cnVlKSB7CisJCQlzdHJfaW5mby0+Y3RybF9ibGsub24gPSBmYWxzZTsKKwkJCXN0cl9pbmZvLT5jdHJsX2Jsay5jb25kaXRpb24gPSB0cnVlOworCQkJd2FrZV91cCgmc3N0X2Rydl9jdHgtPndhaXRfcXVldWUpOworCQl9CiAJCWJyZWFrOwogCWNhc2UgSVBDX0lBX0FMTE9DX1NUUkVBTTogewogCQkvKiBtYXAgdG8gc3RyZWFtLCBjYWxsIHBsYXkgKi8KQEAgLTY5OSw2ICs3NTQsMTcgQEAKIAljYXNlIElQQ19JQV9TVEFSVF9TVFJFQU06CiAJCXByX2RlYnVnKCJyZXBseSBmb3IgU1RBUlQgU1RSRUFNICV4XG4iLCBtc2ctPmhlYWRlci5mdWxsKTsKIAkJYnJlYWs7CisKKwljYXNlIElQQ19JQV9HRVRfRldfQ1RYVDoKKwkJcHJfZGVidWcoInJlcGx5IGZvciBnZXQgZncgY3R4dCAgJXhcbiIsIG1zZy0+aGVhZGVyLmZ1bGwpOworCQlpZiAobXNnLT5oZWFkZXIucGFydC5kYXRhKQorCQkJc3N0X2Rydl9jdHgtPmZ3X2NudHhfc2l6ZSA9IDA7CisJCWVsc2UKKwkJCXNzdF9kcnZfY3R4LT5md19jbnR4X3NpemUgPSAqc3N0X2Rydl9jdHgtPmZ3X2NudHg7CisJCXByX2RlYnVnKCJmdyBjb3BpZWQgZGF0YSAleFxuIiwgc3N0X2Rydl9jdHgtPmZ3X2NudHhfc2l6ZSk7CisJCXNzdF93YWtlX3VwX2FsbG9jX2Jsb2NrKAorCQkJc3N0X2Rydl9jdHgsIHN0cl9pZCwgbXNnLT5oZWFkZXIucGFydC5kYXRhLCBOVUxMKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyogSWxsZWdhbCBjYXNlICovCiAJCXByX2VycigicHJvY2VzcyByZXBseTpkZWZhdWx0ID0gJXhcbiIsIG1zZy0+aGVhZGVyLmZ1bGwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbF9zc3RfcHZ0LmMgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9wdnQuYwppbmRleCAwMWY4YzNiLi5lMDM0YmVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9wdnQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9wdnQuYwpAQCAtMjAzLDcgKzIwMyw3IEBACiAJCWtmcmVlKG1zZyk7CiAJCXByX2Vycigia3phbGxvYyBtYWlsYm94X2RhdGEgZmFpbGVkIik7CiAJCXJldHVybiAtRU5PTUVNOwotCX07CisJfQogCSphcmcgPSBtc2c7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9zdHJlYW0uYyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0X3N0cmVhbS5jCmluZGV4IGRkNThiZTUuLmJlNDU2NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0X3N0cmVhbS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0X3N0cmVhbS5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSAiaW50ZWxfc3N0X2lvY3RsLmgiCiAjaW5jbHVkZSAiaW50ZWxfc3N0LmgiCiAjaW5jbHVkZSAiaW50ZWxfc3N0X2Z3X2lwYy5oIgpAQCAtNDcsNyArNDgsNyBAQAogICovCiBpbnQgc3N0X2NoZWNrX2RldmljZV90eXBlKHUzMiBkZXZpY2UsIHUzMiBudW1fY2hhbiwgdTMyICpwY21fc2xvdCkKIHsKLQlpZiAoZGV2aWNlID4gTUFYX05VTV9TVFJFQU1TX01GTEQpIHsKKwlpZiAoZGV2aWNlID49IE1BWF9OVU1fU1RSRUFNU19NRkxEKSB7CiAJCXByX2RlYnVnKCJkZXZpY2UgdHlwZSBpbnZhbGlkICVkXG4iLCBkZXZpY2UpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC03Miw2ICs3Myw4IEBACiAJCQkqcGNtX3Nsb3QgPSAweDA3OwogCQllbHNlIGlmIChkZXZpY2UgPT0gU05EX1NTVF9ERVZJQ0VfQ0FQVFVSRSAmJiBudW1fY2hhbiA9PSA0KQogCQkJKnBjbV9zbG90ID0gMHgwRjsKKwkJZWxzZSBpZiAoZGV2aWNlID09IFNORF9TU1RfREVWSUNFX0NBUFRVUkUgJiYgbnVtX2NoYW4gPiA0KQorCQkJKnBjbV9zbG90ID0gMHgxRjsKIAkJZWxzZSB7CiAJCQlwcl9kZWJ1ZygiTm8gY29uZGl0aW9uIHNhdGlzZmllZC4uIHJldCBlcnJcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC01MTksMTAgKzUyMiw2IEBACiAJc3RyX2luZm8tPmRhdGFfYmxrLm9uID0gdHJ1ZTsKIAlyZXR2YWwgPSBzc3Rfd2FpdF9pbnRlcnJ1cHRpYmxlKHNzdF9kcnZfY3R4LCAmc3RyX2luZm8tPmRhdGFfYmxrKTsKIAlzdHJfaW5mby0+bmVlZF9kcmFpbmluZyA9IGZhbHNlOwotCWlmIChyZXR2YWwgPT0gLVNTVF9FUlJfSU5WQUxJRF9TVFJFQU1fSUQpIHsKLQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJc3N0X2NsZWFuX3N0cmVhbShzdHJfaW5mbyk7Ci0JfQogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTU2Myw2ICs1NjIsMTIgQEAKIAkJCXN0cl9pbmZvLT5kYXRhX2Jsay5yZXRfY29kZSA9IDA7CiAJCQl3YWtlX3VwKCZzc3RfZHJ2X2N0eC0+d2FpdF9xdWV1ZSk7CiAJCX0KKwkJc3RyX2luZm8tPmRhdGFfYmxrLm9uID0gdHJ1ZTsKKwkJc3RyX2luZm8tPmRhdGFfYmxrLmNvbmRpdGlvbiA9IGZhbHNlOworCQlyZXR2YWwgPSBzc3Rfd2FpdF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoc3N0X2Rydl9jdHgsCisJCQkJJnN0cl9pbmZvLT5jdHJsX2JsaywgU1NUX0JMT0NLX1RJTUVPVVQpOworCQlwcl9kZWJ1Zygid2FpdCBmb3IgZnJlZSByZXR1cm5lZCAlZFxuIiwgcmV0dmFsKTsKKwkJbXNsZWVwKDEwMCk7CiAJCW11dGV4X2xvY2soJnNzdF9kcnZfY3R4LT5zdHJlYW1fbG9jayk7CiAJCXNzdF9jbGVhbl9zdHJlYW0oc3RyX2luZm8pOwogCQltdXRleF91bmxvY2soJnNzdF9kcnZfY3R4LT5zdHJlYW1fbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9zdHJlYW1fZW5jb2RlZC5jIGIvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbF9zc3Rfc3RyZWFtX2VuY29kZWQuYwppbmRleCBkNWYwN2I4Li4yYmU1OGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9zdHJlYW1fZW5jb2RlZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0X3N0cmVhbV9lbmNvZGVkLmMKQEAgLTM2Myw3ICszNjMsNiBAQAogCQkJCXByX2VycigiU1NUX0FjdGl2YXRlX3RhcmdldF9mYWlsXG4iKTsKIAkJCWVsc2UKIAkJCQlwcl9lcnIoIlNTVF9BY3RpdmF0ZV90YXJnZXRfcGFzc1xuIik7Ci0JCXJldHVybiByZXR2YWw7CiAJfSBlbHNlIGlmIChzbG90LT5hY3Rpb24gPT0gU05EX1NTVF9QT1JUX1BSRVBBUkUgJiYKIAkJCXNsb3QtPmRldmljZV90eXBlID09IFNORF9TU1RfREVWSUNFX1BDTSkgewogCQkJCXJldHZhbCA9IHNzdF9wcmVwYXJlX3RhcmdldChzbG90KTsKQEAgLTM3MSwxMiArMzcwLDExIEBACiAJCQkJcHJfZXJyKCJTU1RfcHJlcGFyZV90YXJnZXRfZmFpbFxuIik7CiAJCQllbHNlCiAJCQkJcHJfZXJyKCJTU1RfcHJlcGFyZV90YXJnZXRfcGFzc1xuIik7Ci0JCQlyZXR1cm4gcmV0dmFsOwogCX0gZWxzZSB7CiAJCXByX2Vycigic2xvdF9hY3Rpb24gOiAlZCwgZGV2aWNlX3R5cGU6ICVkXG4iLAogCQkJCXNsb3QtPmFjdGlvbiwgc2xvdC0+ZGV2aWNlX3R5cGUpOwotCQlyZXR1cm4gcmV0dmFsOwogCX0KKwlyZXR1cm4gcmV0dmFsOwogfQogCiBpbnQgc3N0X3NlbmRfdGFyZ2V0KHN0cnVjdCBzbmRfc3N0X3RhcmdldF9kZXZpY2UgKnRhcmdldCkKQEAgLTg4Niw4ICs4ODQsNyBAQAogCQkJaW50ICppbnB1dF9pbmRleCwgaW50ICppbl9jb3BpZWQsCiAJCQlpbnQgKmlucHV0X2luZGV4X3ZhbGlkX3NpemUsIGludCAqbmV3X2VudHJ5X2ZsYWcpCiB7Ci0JaW50IHJldHZhbCA9IDA7Ci0JaW50IGk7CisJaW50IHJldHZhbCA9IDAsIGk7CiAKIAlpZiAoc3RyX2luZm8tPm9wcyA9PSBTVFJFQU1fT1BTX1BMQVlCQUNLX0RSTSkgewogCQlzdHJ1Y3QgUkFSX2J1ZmZlciByYXJfYnVmZmVyczsKQEAgLTkyNCw3ICs5MjEsNiBAQAogCXJldHVybiByZXR2YWw7CiB9CiAjZW5kaWYKLQogLypUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcHJlcGFyZSB0aGUga2VybmVsIGlucHV0IGJ1ZmZlcnMgd2l0aCBjb250ZW50cwogYmVmb3JlIHNlbmRpbmcgZm9yIGRlY29kZSovCiBzdGF0aWMgaW50IHNzdF9wcmVwYXJlX2lucHV0X2J1ZmZlcnMoc3RydWN0IHN0cmVhbV9pbmZvICpzdHJfaW5mbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWQuYyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWQuYwppbmRleCBkMjA3NjM2Li4yNTY1NmFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZC5jCkBAIC0zMiwxNSArMzIsMjEgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CiAjaW5jbHVkZSA8YXNtL21yc3QuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KLSNpbmNsdWRlICJqYWNrLmgiCisjaW5jbHVkZSA8c291bmQvamFjay5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgImludGVsX3NzdC5oIgogI2luY2x1ZGUgImludGVsX3NzdF9pb2N0bC5oIgorI2luY2x1ZGUgImludGVsX3NzdF9md19pcGMuaCIKKyNpbmNsdWRlICJpbnRlbF9zc3RfY29tbW9uLmgiCiAjaW5jbHVkZSAiaW50ZWxtaWRfc25kX2NvbnRyb2wuaCIKKyNpbmNsdWRlICJpbnRlbG1pZF9hZGNfY29udHJvbC5oIgogI2luY2x1ZGUgImludGVsbWlkLmgiCiAKIE1PRFVMRV9BVVRIT1IoIlZpbm9kIEtvdWwgPHZpbm9kLmtvdWxAaW50ZWwuY29tPiIpOwpAQCAtNjIsNyArNjgsMTQgQEAKIAogaW50CXNzdF9jYXJkX3ZlbmRvcl9pZDsKIGludCBpbnRlbG1pZF9hdWRpb19pbnRlcnJ1cHRfZW5hYmxlOy8qY2hlY2twYXRjaCBmaXgqLworc3RydWN0IHNuZF9pbnRlbG1hZCAqaW50ZWxtYWRfZHJ2OwogCisjZGVmaW5lIElORk8oX2NwdV9pZCwgX2lycV9jYWNoZSwgX3NpemUpIFwKKwkoKGtlcm5lbF91bG9uZ190KSYoc3RydWN0IHNuZF9pbnRlbG1hZF9wcm9iZV9pbmZvKSB7CVwKKwkJLmNwdV9pZCA9IChfY3B1X2lkKSwJCQlcCisJCS5pcnFfY2FjaGUgPSAoX2lycV9jYWNoZSksCQkJXAorCQkuc2l6ZSA9IChfc2l6ZSksCQkJCVwKKwl9KQogLyogRGF0YSBwYXRoIGZ1bmN0aW9uYWxpdGllcyAqLwogc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHNuZF9pbnRlbG1hZF9zdHJlYW0gPSB7CiAJLmluZm8gPQkoU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfApAQCAtMTg0LDcgKzE5Nyw3IEBACiAJCXJldHVybiByZXRfdmFsOwogCX0KIAotCSByZXRfdmFsID0gc25kX2ludGVsbWFkX2FsbG9jX3N0cmVhbShzdWJzdHJlYW0pOworCXJldF92YWwgPSBzbmRfaW50ZWxtYWRfYWxsb2Nfc3RyZWFtKHN1YnN0cmVhbSk7CiAJaWYgKHJldF92YWwgPCAwKQogCQlyZXR1cm4gcmV0X3ZhbDsKIAlzdHJlYW0tPmRiZ19jdW1fYnl0ZXMgPSAwOwpAQCAtMzIzLDYgKzMzNiwxNiBAQAogCXJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJLyogc2V0IHRoZSBydW50aW1lIGh3IHBhcmFtZXRlciB3aXRoIGxvY2FsIHNuZF9wY21faGFyZHdhcmUgc3RydWN0ICovCiAJcnVudGltZS0+aHcgPSBzbmRfaW50ZWxtYWRfc3RyZWFtOworCWlmIChpbnRlbG1hZGRhdGEtPmNwdV9pZCA9PSBDUFVfQ0hJUF9MSU5DUk9GVCkgeworCQkvKgorCQkgKiBNUlNUIGZpcm13YXJlIGN1cnJlbnRseSBkZW5pZXMgc3RlcmVvIHJlY29yZGluZyByZXF1ZXN0cy4KKwkJICovCisJCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpIHsKKwkJCXJ1bnRpbWUtPmh3LmZvcm1hdHMgPSAoU05EUlZfUENNX0ZNVEJJVF9TMTYgfAorCQkJCQkgICAgICAgU05EUlZfUENNX0ZNVEJJVF9VMTYpOworCQkJcnVudGltZS0+aHcuY2hhbm5lbHNfbWF4ID0gMTsKKwkJfQorCX0KIAlpZiAoaW50ZWxtYWRkYXRhLT5jcHVfaWQgPT0gQ1BVX0NISVBfUEVOV0VMTCkgewogCQlydW50aW1lLT5odyA9IHNuZF9pbnRlbG1hZF9zdHJlYW07CiAJCXJ1bnRpbWUtPmh3LnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDgwMDA7CkBAIC00MjMsNyArNDQ2LDU1IEBACiAJLnBvaW50ZXIgPSBzbmRfaW50ZWxtYWRfcGNtX3BvaW50ZXIsCiB9OwogCitpbnQgaW50ZWxtYWRfZ2V0X21pY19iaWFzKHZvaWQpCit7CisJc3RydWN0IHNuZF9wbWljX29wcyAqcG1pY19vcHM7CiAKKwlpZiAoIWludGVsbWFkX2RydiB8fCAhaW50ZWxtYWRfZHJ2LT5zc3RkcnZfb3BzKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlwbWljX29wcyA9IGludGVsbWFkX2Rydi0+c3N0ZHJ2X29wcy0+c2NhcmRfb3BzOworCWlmIChwbWljX29wcyAmJiBwbWljX29wcy0+cG1pY19nZXRfbWljX2JpYXMpCisJCXJldHVybiBwbWljX29wcy0+cG1pY19nZXRfbWljX2JpYXMoaW50ZWxtYWRfZHJ2KTsKKwllbHNlCisJCXJldHVybiAtRU5PREVWOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaW50ZWxtYWRfZ2V0X21pY19iaWFzKTsKKworaW50IGludGVsbWFkX3NldF9oZWFkc2V0X3N0YXRlKGludCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc25kX3BtaWNfb3BzICpwbWljX29wczsKKworCWlmICghaW50ZWxtYWRfZHJ2IHx8ICFpbnRlbG1hZF9kcnYtPnNzdGRydl9vcHMpCisJCXJldHVybiAtRU5PREVWOworCXBtaWNfb3BzID0gaW50ZWxtYWRfZHJ2LT5zc3RkcnZfb3BzLT5zY2FyZF9vcHM7CisJaWYgKHBtaWNfb3BzICYmIHBtaWNfb3BzLT5wbWljX3NldF9oZWFkc2V0X3N0YXRlKQorCQlyZXR1cm4gcG1pY19vcHMtPnBtaWNfc2V0X2hlYWRzZXRfc3RhdGUoc3RhdGUpOworCWVsc2UKKwkJcmV0dXJuIC1FTk9ERVY7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpbnRlbG1hZF9zZXRfaGVhZHNldF9zdGF0ZSk7CisKK3ZvaWQgc3N0X3Byb2Nlc3NfbWFkX2phY2tfZGV0ZWN0aW9uKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwl1OCBpbnRlcnJ1cHRfc3RhdHVzOworCXN0cnVjdCBtYWRfamFja19tc2dfd3EgKm1hZF9qYWNrX2RldGVjdCA9CisJCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG1hZF9qYWNrX21zZ193cSwgd3EpOworCisJc3RydWN0IHNuZF9pbnRlbG1hZCAqaW50ZWxtYWRkYXRhID0KKwkJCW1hZF9qYWNrX2RldGVjdC0+aW50ZWxtYWRkYXRhOworCisJaWYgKCFpbnRlbG1hZGRhdGEpCisJCXJldHVybjsKKworCWludGVycnVwdF9zdGF0dXMgPSBtYWRfamFja19kZXRlY3QtPmludHN0czsKKwlpZiAoaW50ZWxtYWRkYXRhLT5zc3RkcnZfb3BzICYmIGludGVsbWFkZGF0YS0+c3N0ZHJ2X29wcy0+c2NhcmRfb3BzCisJCQkmJiBpbnRlbG1hZGRhdGEtPnNzdGRydl9vcHMtPnNjYXJkX29wcy0+cG1pY19pcnFfY2IpIHsKKwkJaW50ZWxtYWRkYXRhLT5zc3RkcnZfb3BzLT5zY2FyZF9vcHMtPnBtaWNfaXJxX2NiKAorCQkJKHZvaWQgKilpbnRlbG1hZGRhdGEsIGludGVycnVwdF9zdGF0dXMpOworCQlpbnRlbG1hZGRhdGEtPnNzdGRydl9vcHMtPnNjYXJkX29wcy0+cG1pY19qYWNrX2VuYWJsZSgpOworCX0KKwlrZnJlZShtYWRfamFja19kZXRlY3QpOworfQogLyoqCiAgKiBzbmRfaW50ZWxtYWRfaW50cl9oYW5kbGVyLSBpbnRlcnJ1cHQgaGFuZGxlcgogICoKQEAgLTQzNiwxNSArNTA3LDE3IEBACiB7CiAJc3RydWN0IHNuZF9pbnRlbG1hZCAqaW50ZWxtYWRkYXRhID0KIAkJCShzdHJ1Y3Qgc25kX2ludGVsbWFkICopZGV2OwotCXU4IGludHN0czsKLQotCW1lbWNweV9mcm9taW8oJmludHN0cywKKwl1OCBpbnRlcnJ1cHRfc3RhdHVzOworCXN0cnVjdCBtYWRfamFja19tc2dfd3EgICptYWRfamFja19tc2c7CisJbWVtY3B5X2Zyb21pbygmaW50ZXJydXB0X3N0YXR1cywKIAkJCSgodm9pZCAqKShpbnRlbG1hZGRhdGEtPmludF9iYXNlKSksCiAJCQlzaXplb2YodTgpKTsKLQlpbnRlbG1hZGRhdGEtPm1hZF9qYWNrX21zZy5pbnRzdHMgPSBpbnRzdHM7Ci0JaW50ZWxtYWRkYXRhLT5tYWRfamFja19tc2cuaW50ZWxtYWRkYXRhID0gaW50ZWxtYWRkYXRhOwogCi0JcXVldWVfd29yayhpbnRlbG1hZGRhdGEtPm1hZF9qYWNrX3dxLCAmaW50ZWxtYWRkYXRhLT5tYWRfamFja19tc2cud3EpOworCW1hZF9qYWNrX21zZyA9IGt6YWxsb2Moc2l6ZW9mKCptYWRfamFja19tc2cpLCBHRlBfQVRPTUlDKTsKKwltYWRfamFja19tc2ctPmludHN0cyA9IGludGVycnVwdF9zdGF0dXM7CisJbWFkX2phY2tfbXNnLT5pbnRlbG1hZGRhdGEgPSBpbnRlbG1hZGRhdGE7CisJSU5JVF9XT1JLKCZtYWRfamFja19tc2ctPndxLCBzc3RfcHJvY2Vzc19tYWRfamFja19kZXRlY3Rpb24pOworCXF1ZXVlX3dvcmsoaW50ZWxtYWRkYXRhLT5tYWRfamFja193cSwgJm1hZF9qYWNrX21zZy0+d3EpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtNDU3LDI4NiArNTMwLDIyIEBACiAJCXByX2RlYnVnKCJNQUQgZXJyb3IgamFjayBlbXB0eVxuIik7CiAKIAl9IGVsc2UgewotCQlwcl9kZWJ1ZygiTUFEIHNlbmQgamFjayByZXBvcnQgZm9yID0gJWQhISFcbiIsIHN0YXR1cyk7Ci0JCXByX2RlYnVnKCJNQUQgc2VuZCBqYWNrIHJlcG9ydCAlZFxuIiwgamFjay0+dHlwZSk7CiAJCXNuZF9qYWNrX3JlcG9ydChqYWNrLCBzdGF0dXMpOwotCi0JCS8qYnV0dG9uIHByZXNzZWQgYW5kIHJlbGVhc2VkICovCisJCS8qIGJ1dHRvbiBwcmVzc2VkIGFuZCByZWxlYXNlZCAqLwogCQlpZiAoYnV0dG9ucHJlc3NldmVudCkKIAkJCXNuZF9qYWNrX3JlcG9ydChqYWNrLCAwKTsKIAkJcHJfZGVidWcoIk1BRCBzZW5kaW5nIGphY2sgcmVwb3J0IERvbmUgISEhXG4iKTsKIAl9Ci0KLQotCiB9CiAKLXZvaWQgc3N0X21hZF9qYWNrZGV0ZWN0aW9uX2ZzKHU4IGludHN0cyAsIHN0cnVjdCBzbmRfaW50ZWxtYWQgKmludGVsbWFkZGF0YSkKLXsKLQlzdHJ1Y3Qgc25kX2phY2sgKmphY2sgPSBOVUxMOwotCXVuc2lnbmVkIGludCBwcmVzZW50ID0gMCwgamFja19ldmVudF9mbGFnID0gMCwgYnV0dG9ucHJlc3NmbGFnID0gMDsKLQlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBzY19hY2Nlc3NbXSA9IHsKLQkJCQl7MHgxODcsIDB4MDAsIE1BU0s3fSwKLQkJCQl7MHgxODgsIDB4MTAsIE1BU0s0fSwKLQkJCQl7MHgxOGIsIDB4MTAsIE1BU0s0fSwKLQl9OwotCi0Jc3RydWN0IHNjX3JlZ19hY2Nlc3Mgc2NfYWNjZXNzX3dyaXRlW10gPSB7Ci0JCQkJezB4MTk4LCAweDAwLCAweDB9LAotCX07Ci0KLQlpZiAoaW50c3RzICYgMHg0KSB7Ci0KLQkJaWYgKCEoaW50ZWxtaWRfYXVkaW9faW50ZXJydXB0X2VuYWJsZSkpIHsKLQkJCXByX2RlYnVnKCJBdWRpbyBpbnRlcnJ1cHQgZW5hYmxlXG4iKTsKLQkJCXNzdF9zY19yZWdfYWNjZXNzKHNjX2FjY2VzcywgUE1JQ19SRUFEX01PRElGWSwgMyk7Ci0KLQkJCXNzdF9zY19yZWdfYWNjZXNzKHNjX2FjY2Vzc193cml0ZSwgUE1JQ19XUklURSwgMSk7Ci0JCQlpbnRlbG1pZF9hdWRpb19pbnRlcnJ1cHRfZW5hYmxlID0gMTsKLQkJCWludGVsbWFkZGF0YS0+amFja1swXS5qYWNrX3N0YXR1cyA9IDA7Ci0JCQlpbnRlbG1hZGRhdGEtPmphY2tbMV0uamFja19zdGF0dXMgPSAwOwotCi0JCX0KLQkJLyogc2VuZCBoZWFkcGhvbmUgZGV0ZWN0ICovCi0JCXByX2RlYnVnKCJNQUQgaGVhZHBob25lICVkXG4iLCBpbnRzdHMgJiAweDQpOwotCQlqYWNrID0gJmludGVsbWFkZGF0YS0+amFja1swXS5qYWNrOwotCQlwcmVzZW50ID0gIShpbnRlbG1hZGRhdGEtPmphY2tbMF0uamFja19zdGF0dXMpOwotCQlpbnRlbG1hZGRhdGEtPmphY2tbMF0uamFja19zdGF0dXMgPSBwcmVzZW50OwotCQlqYWNrX2V2ZW50X2ZsYWcgPSAxOwotCi0JfQotCi0JaWYgKGludHN0cyAmIDB4MikgewotCQkvKiBzZW5kIHNob3J0IHB1c2ggKi8KLQkJcHJfZGVidWcoIk1BRCBzaG9ydCBwdXNoICVkXG4iLCBpbnRzdHMgJiAweDIpOwotCQlqYWNrID0gJmludGVsbWFkZGF0YS0+amFja1syXS5qYWNrOwotCQlwcmVzZW50ID0gMTsKLQkJamFja19ldmVudF9mbGFnID0gMTsKLQkJYnV0dG9ucHJlc3NmbGFnID0gMTsKLQl9Ci0JaWYgKGludHN0cyAmIDB4MSkgewotCQkvKiBzZW5kIGxvbmcgcHVzaCAqLwotCQlwcl9kZWJ1ZygiTUFEIGxvbmcgcHVzaCAlZFxuIiwgaW50c3RzICYgMHgxKTsKLQkJamFjayA9ICZpbnRlbG1hZGRhdGEtPmphY2tbM10uamFjazsKLQkJcHJlc2VudCA9IDE7Ci0JCWphY2tfZXZlbnRfZmxhZyA9IDE7Ci0JCWJ1dHRvbnByZXNzZmxhZyA9IDE7Ci0JfQotCWlmIChpbnRzdHMgJiAweDgpIHsKLQkJaWYgKCEoaW50ZWxtaWRfYXVkaW9faW50ZXJydXB0X2VuYWJsZSkpIHsKLQkJCXByX2RlYnVnKCJBdWRpbyBpbnRlcnJ1cHQgZW5hYmxlXG4iKTsKLQkJCXNzdF9zY19yZWdfYWNjZXNzKHNjX2FjY2VzcywgUE1JQ19SRUFEX01PRElGWSwgMyk7Ci0KLQkJCXNzdF9zY19yZWdfYWNjZXNzKHNjX2FjY2Vzc193cml0ZSwgUE1JQ19XUklURSwgMSk7Ci0JCQlpbnRlbG1pZF9hdWRpb19pbnRlcnJ1cHRfZW5hYmxlID0gMTsKLQkJCWludGVsbWFkZGF0YS0+amFja1swXS5qYWNrX3N0YXR1cyA9IDA7Ci0JCQlpbnRlbG1hZGRhdGEtPmphY2tbMV0uamFja19zdGF0dXMgPSAwOwotCQl9Ci0JCS8qIHNlbmQgaGVhZHNldCBkZXRlY3QgKi8KLQkJcHJfZGVidWcoIk1BRCBoZWFkc2V0ID0gJWRcbiIsIGludHN0cyAmIDB4OCk7Ci0JCWphY2sgPSAmaW50ZWxtYWRkYXRhLT5qYWNrWzFdLmphY2s7Ci0JCXByZXNlbnQgPSAhKGludGVsbWFkZGF0YS0+amFja1sxXS5qYWNrX3N0YXR1cyk7Ci0JCWludGVsbWFkZGF0YS0+amFja1sxXS5qYWNrX3N0YXR1cyA9IHByZXNlbnQ7Ci0JCWphY2tfZXZlbnRfZmxhZyA9IDE7Ci0JfQotCi0JaWYgKGphY2tfZXZlbnRfZmxhZykKLQkJc3N0X21hZF9zZW5kX2phY2tfcmVwb3J0KGphY2ssIGJ1dHRvbnByZXNzZmxhZywgcHJlc2VudCk7Ci19Ci0KLQotdm9pZCBzc3RfbWFkX2phY2tkZXRlY3Rpb25fbXgodTggaW50c3RzLCBzdHJ1Y3Qgc25kX2ludGVsbWFkICppbnRlbG1hZGRhdGEpCi17Ci0JdTggdmFsdWUgPSAwLCBqYWNrX3ByZXZfc3RhdGUgPSAwOwotCXN0cnVjdCBzbmRfamFjayAqamFjayA9IE5VTEw7Ci0JdW5zaWduZWQgaW50IHByZXNlbnQgPSAwLCBqYWNrX2V2ZW50X2ZsYWcgPSAwLCBidXR0b25wcmVzc2ZsYWcgPSAwOwotCXRpbWVfdCAgdGltZWRpZmY7Ci0Jc3RydWN0IHNjX3JlZ19hY2Nlc3Mgc2NfYWNjZXNzX3JlYWQgPSB7MCx9OwotCXN0cnVjdCBzbmRfcG1pY19vcHMgKnNjYXJkX29wczsKLQotCXNjYXJkX29wcyA9IGludGVsbWFkZGF0YS0+c3N0ZHJ2X29wcy0+c2NhcmRfb3BzOwotCi0JcHJfZGVidWcoInByZXZpb3VzIHZhbHVlOiAleFxuIiwgaW50ZWxtYWRkYXRhLT5qYWNrX3ByZXZfc3RhdGUpOwotCi0JaWYgKCEoaW50ZWxtaWRfYXVkaW9faW50ZXJydXB0X2VuYWJsZSkpIHsKLQkJcHJfZGVidWcoIkF1ZGlvIGludGVycnVwdCBlbmFibGVcbiIpOwotCQlpbnRlbG1hZGRhdGEtPmphY2tfcHJldl9zdGF0ZSA9IDB4QzA7Ci0JCWludGVsbWlkX2F1ZGlvX2ludGVycnVwdF9lbmFibGUgPSAxOwotCX0KLQotCWlmIChpbnRzdHMgJiAweDIpIHsKLQkJamFja19wcmV2X3N0YXRlID0gaW50ZWxtYWRkYXRhLT5qYWNrX3ByZXZfc3RhdGU7Ci0JCWlmIChpbnRlbG1hZGRhdGEtPnBtaWNfc3RhdHVzID09IFBNSUNfSU5JVCkgewotCQkJc2NfYWNjZXNzX3JlYWQucmVnX2FkZHIgPSAweDIwMTsKLQkJCXNzdF9zY19yZWdfYWNjZXNzKCZzY19hY2Nlc3NfcmVhZCwgUE1JQ19SRUFELCAxKTsKLQkJCXZhbHVlID0gKHNjX2FjY2Vzc19yZWFkLnZhbHVlKTsKLQkJCXByX2RlYnVnKCJ2YWx1ZSByZXR1cm5lZCA9IDB4JXhcbiIsIHZhbHVlKTsKLQkJfQotCi0JCWlmIChqYWNrX3ByZXZfc3RhdGUgPT0gMHhjMCAmJiB2YWx1ZSA9PSAweDQwKSB7Ci0JCQkvKmhlYWRzZXQgZGV0ZWN0ZWQuICovCi0JCQlwcl9kZWJ1ZygiTUFEIGhlYWRzZXQgaW5zZXJ0ZWRcbiIpOwotCQkJamFjayA9ICZpbnRlbG1hZGRhdGEtPmphY2tbMV0uamFjazsKLQkJCXByZXNlbnQgPSAxOwotCQkJamFja19ldmVudF9mbGFnID0gMTsKLQkJCWludGVsbWFkZGF0YS0+amFja1sxXS5qYWNrX3N0YXR1cyA9IDE7Ci0KLQkJfQotCi0JCWlmIChqYWNrX3ByZXZfc3RhdGUgPT0gMHhjMCAmJiB2YWx1ZSA9PSAweDAwKSB7Ci0JCQkvKiBoZWFkcGhvbmUgIGRldGVjdGVkLiAqLwotCQkJcHJfZGVidWcoIk1BRCBoZWFkcGhvbmUgaW5zZXJ0ZWRcbiIpOwotCQkJamFjayA9ICZpbnRlbG1hZGRhdGEtPmphY2tbMF0uamFjazsKLQkJCXByZXNlbnQgPSAxOwotCQkJamFja19ldmVudF9mbGFnID0gMTsKLQotCQl9Ci0KLQkJaWYgKGphY2tfcHJldl9zdGF0ZSA9PSAweDQwICYmIHZhbHVlID09IDB4YzApIHsKLQkJCS8qaGVhZHNldCAgcmVtb3ZlZCovCi0JCQlwcl9kZWJ1ZygiSmFjayBoZWFkc2V0IHN0YXR1cyAlZFxuIiwKLQkJCQlpbnRlbG1hZGRhdGEtPmphY2tbMV0uamFja19zdGF0dXMpOwotCQkJcHJfZGVidWcoIk1BRCBoZWFkc2V0IHJlbW92ZWRcbiIpOwotCQkJamFjayA9ICZpbnRlbG1hZGRhdGEtPmphY2tbMV0uamFjazsKLQkJCXByZXNlbnQgPSAwOwotCQkJamFja19ldmVudF9mbGFnID0gMTsKLQkJCWludGVsbWFkZGF0YS0+amFja1sxXS5qYWNrX3N0YXR1cyA9IDA7Ci0JCX0KLQotCQlpZiAoamFja19wcmV2X3N0YXRlID09IDB4MDAgJiYgdmFsdWUgPT0gMHhjMCkgewotCQkJLyogaGVhZHBob25lICBkZXRlY3RlZC4gKi8KLQkJCXByX2RlYnVnKCJKYWNrIGhlYWRwaG9uZSBzdGF0dXMgJWRcbiIsCi0JCQkJCWludGVsbWFkZGF0YS0+amFja1swXS5qYWNrX3N0YXR1cyk7Ci0JCQlwcl9kZWJ1ZygiaGVhZHBob25lIHJlbW92ZWRcbiIpOwotCQkJamFjayA9ICZpbnRlbG1hZGRhdGEtPmphY2tbMF0uamFjazsKLQkJCXByZXNlbnQgPSAwOwotCQkJamFja19ldmVudF9mbGFnID0gMTsKLQkJfQotCi0JCWlmIChqYWNrX3ByZXZfc3RhdGUgPT0gMHg0MCAmJiB2YWx1ZSA9PSAweDAwKSB7Ci0JCQkvKmJ1dHRvbiBwcmVzc2VkKi8KLQkJCWRvX2dldHRpbWVvZmRheSgmaW50ZWxtYWRkYXRhLT5qYWNrWzFdLmJ1dHRvbnByZXNzZWQpOwotCQkJcHJfZGVidWcoIk1BRCBidXR0b24gcHJlc3MgZGV0ZWN0ZWRcbiIpOwotCQl9Ci0KLQotCQlpZiAoamFja19wcmV2X3N0YXRlID09IDB4MDAgJiYgdmFsdWUgPT0gMHg0MCkgewotCQkJaWYgKGludGVsbWFkZGF0YS0+amFja1sxXS5qYWNrX3N0YXR1cykgewotCQkJCS8qYnV0dG9uIHByZXNzZWQqLwotCQkJCWRvX2dldHRpbWVvZmRheSgKLQkJCQkJJmludGVsbWFkZGF0YS0+amFja1sxXS5idXR0b25yZWxlYXNlZCk7Ci0JCQkJLypidXR0b24gcHJlc3NlZCAqLwotCQkJCXByX2RlYnVnKCJCdXR0b24gUmVsZWFzZWQgZGV0ZWN0ZWRcbiIpOwotCQkJCXRpbWVkaWZmID0gaW50ZWxtYWRkYXRhLT5qYWNrWzFdLgotCQkJCQlidXR0b25yZWxlYXNlZC50dl9zZWMgLSBpbnRlbG1hZGRhdGEtPgotCQkJCQlqYWNrWzFdLmJ1dHRvbnByZXNzZWQudHZfc2VjOwotCQkJCWJ1dHRvbnByZXNzZmxhZyA9IDE7Ci0JCQkJaWYgKHRpbWVkaWZmID4gMSkgewotCQkJCQlwcl9kZWJ1ZygibG9uZyBwcmVzcyBkZXRlY3RlZFxuIik7Ci0JCQkJCS8qIHNlbmQgaGVhZHBob25lIGRldGVjdC91bmRldGVjdCAqLwotCQkJCQlqYWNrID0gJmludGVsbWFkZGF0YS0+amFja1szXS5qYWNrOwotCQkJCQlwcmVzZW50ID0gMTsKLQkJCQkJamFja19ldmVudF9mbGFnID0gMTsKLQkJCQl9IGVsc2UgewotCQkJCQlwcl9kZWJ1Zygic2hvcnQgcHJlc3MgZGV0ZWN0ZWRcbiIpOwotCQkJCQkvKiBzZW5kIGhlYWRwaG9uZSBkZXRlY3QvdW5kZXRlY3QgKi8KLQkJCQkJamFjayA9ICZpbnRlbG1hZGRhdGEtPmphY2tbMl0uamFjazsKLQkJCQkJcHJlc2VudCA9IDE7Ci0JCQkJCWphY2tfZXZlbnRfZmxhZyA9IDE7Ci0JCQkJfQotCQkJfQotCi0JCX0KLQkJaW50ZWxtYWRkYXRhLT5qYWNrX3ByZXZfc3RhdGUgPSB2YWx1ZTsKLQl9Ci0JaWYgKGphY2tfZXZlbnRfZmxhZykKLQkJc3N0X21hZF9zZW5kX2phY2tfcmVwb3J0KGphY2ssIGJ1dHRvbnByZXNzZmxhZywgcHJlc2VudCk7Ci19Ci0KLQotdm9pZCBzc3RfbWFkX2phY2tkZXRlY3Rpb25fbmVjKHU4IGludHN0cywgc3RydWN0IHNuZF9pbnRlbG1hZCAqaW50ZWxtYWRkYXRhKQotewotCXU4IHZhbHVlID0gMDsKLQlzdHJ1Y3Qgc25kX2phY2sgKmphY2sgPSBOVUxMOwotCXVuc2lnbmVkIGludCBwcmVzZW50ID0gMCwgamFja19ldmVudF9mbGFnID0gMCwgYnV0dG9ucHJlc3NmbGFnID0gMDsKLQlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBzY19hY2Nlc3NfcmVhZCA9IHswLH07Ci0KLQlpZiAoaW50ZWxtYWRkYXRhLT5wbWljX3N0YXR1cyA9PSBQTUlDX0lOSVQpIHsKLQkJc2NfYWNjZXNzX3JlYWQucmVnX2FkZHIgPSAweDEzMjsKLQkJc3N0X3NjX3JlZ19hY2Nlc3MoJnNjX2FjY2Vzc19yZWFkLCBQTUlDX1JFQUQsIDEpOwotCQl2YWx1ZSA9IChzY19hY2Nlc3NfcmVhZC52YWx1ZSk7Ci0JCXByX2RlYnVnKCJ2YWx1ZSByZXR1cm5lZCA9IDB4JXhcbiIsIHZhbHVlKTsKLQl9Ci0JaWYgKGludHN0cyAmIDB4MSkgewotCQlwcl9kZWJ1ZygiaGVhZHNldCBkZXRlY3RlZFxuIik7Ci0JCS8qIHNlbmQgaGVhZHNldCBkZXRlY3QvdW5kZXRlY3QgKi8KLQkJamFjayA9ICZpbnRlbG1hZGRhdGEtPmphY2tbMV0uamFjazsKLQkJcHJlc2VudCA9ICh2YWx1ZSA9PSAweDEpID8gMSA6IDA7Ci0JCWphY2tfZXZlbnRfZmxhZyA9IDE7Ci0JfQotCWlmIChpbnRzdHMgJiAweDIpIHsKLQkJcHJfZGVidWcoImhlYWRwaG9uZSBkZXRlY3RlZFxuIik7Ci0JCS8qIHNlbmQgaGVhZHBob25lIGRldGVjdC91bmRldGVjdCAqLwotCQlqYWNrID0gJmludGVsbWFkZGF0YS0+amFja1swXS5qYWNrOwotCQlwcmVzZW50ID0gKHZhbHVlID09IDB4MikgPyAxIDogMDsKLQkJamFja19ldmVudF9mbGFnID0gMTsKLQl9Ci0JaWYgKGludHN0cyAmIDB4NCkgewotCQlwcl9kZWJ1Zygic2hvcnQgcHVzaCBkZXRlY3RlZFxuIik7Ci0JCS8qIHNlbmQgc2hvcnQgcHVzaCAqLwotCQlqYWNrID0gJmludGVsbWFkZGF0YS0+amFja1syXS5qYWNrOwotCQlwcmVzZW50ID0gMTsKLQkJamFja19ldmVudF9mbGFnID0gMTsKLQkJYnV0dG9ucHJlc3NmbGFnID0gMTsKLQl9Ci0JaWYgKGludHN0cyAmIDB4OCkgewotCQlwcl9kZWJ1ZygibG9uZyBwdXNoIGRldGVjdGVkXG4iKTsKLQkJLyogc2VuZCBsb25nIHB1c2ggKi8KLQkJamFjayA9ICZpbnRlbG1hZGRhdGEtPmphY2tbM10uamFjazsKLQkJcHJlc2VudCA9IDE7Ci0JCWphY2tfZXZlbnRfZmxhZyA9IDE7Ci0JCWJ1dHRvbnByZXNzZmxhZyA9IDE7Ci0JfQotCi0JaWYgKGphY2tfZXZlbnRfZmxhZykKLQkJc3N0X21hZF9zZW5kX2phY2tfcmVwb3J0KGphY2ssIGJ1dHRvbnByZXNzZmxhZywgcHJlc2VudCk7Ci0KLQotfQotCi12b2lkIHNzdF9wcm9jZXNzX21hZF9qYWNrX2RldGVjdGlvbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0JdTggaW50c3RzOwotCXN0cnVjdCBtYWRfamFja19tc2dfd3EgKm1hZF9qYWNrX2RldGVjdCA9Ci0JCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG1hZF9qYWNrX21zZ193cSwgd3EpOwotCi0Jc3RydWN0IHNuZF9pbnRlbG1hZCAqaW50ZWxtYWRkYXRhID0KLQkJCW1hZF9qYWNrX2RldGVjdC0+aW50ZWxtYWRkYXRhOwotCi0JaW50c3RzID0gbWFkX2phY2tfZGV0ZWN0LT5pbnRzdHM7Ci0KLQlzd2l0Y2ggKGludGVsbWFkZGF0YS0+c3N0ZHJ2X29wcy0+dmVuZG9yX2lkKSB7Ci0JY2FzZSBTTkRfRlM6Ci0JCXNzdF9tYWRfamFja2RldGVjdGlvbl9mcyhpbnRzdHMgLCBpbnRlbG1hZGRhdGEpOwotCQlicmVhazsKLQljYXNlIFNORF9NWDoKLQkJc3N0X21hZF9qYWNrZGV0ZWN0aW9uX214KGludHN0cyAsIGludGVsbWFkZGF0YSk7Ci0JCWJyZWFrOwotCWNhc2UgU05EX05DOgotCQlzc3RfbWFkX2phY2tkZXRlY3Rpb25fbmVjKGludHN0cyAsIGludGVsbWFkZGF0YSk7Ci0JCWJyZWFrOwotCX0KLX0KLQotCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfaW50ZWxtYWRfcmVnaXN0ZXJfaXJxKAotCQkJCQlzdHJ1Y3Qgc25kX2ludGVsbWFkICppbnRlbG1hZGRhdGEpCisJCXN0cnVjdCBzbmRfaW50ZWxtYWQgKmludGVsbWFkZGF0YSwgdW5zaWduZWQgaW50IHJlZ2Jhc2UsCisJCXVuc2lnbmVkIGludCByZWdzaXplKQogewogCWludCByZXRfdmFsOwotCXUzMiByZWdiYXNlID0gQVVESU5UX0JBU0UsIHJlZ3NpemUgPSA4OwogCWNoYXIgKmRydl9uYW1lOwogCi0JcHJfZGVidWcoImlycSByZWcgZG9uZSwgcmVnYmFzZSAweCV4LCByZWdzaXplIDB4JXhcbiIsCisJcHJfZGVidWcoImlycSByZWcgcmVnYmFzZSAweCV4LCByZWdzaXplIDB4JXhcbiIsCiAJCQkJCXJlZ2Jhc2UsIHJlZ3NpemUpOwogCWludGVsbWFkZGF0YS0+aW50X2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUocmVnYmFzZSwgcmVnc2l6ZSk7CiAJaWYgKCFpbnRlbG1hZGRhdGEtPmludF9iYXNlKQpAQCAtNzk0LDYgKzYwMyw3IEBACiAJCWludGVsbWFkZGF0YS0+c3N0ZHJ2X29wcy0+c2NhcmRfb3BzLT5pbnB1dF9kZXZfaWQgPSBETUlDOwogCQlpbnRlbG1hZGRhdGEtPnNzdGRydl9vcHMtPnNjYXJkX29wcy0+b3V0cHV0X2Rldl9pZCA9CiAJCQkJCQkJU1RFUkVPX0hFQURQSE9ORTsKKwkJaW50ZWxtYWRkYXRhLT5zc3RkcnZfb3BzLT5zY2FyZF9vcHMtPmxpbmVvdXRfZGV2X2lkID0gTk9ORTsKIAl9CiAKIAkvKiByZWdpc3RlcmluZyB3aXRoIFNTVCBkcml2ZXIgdG8gZ2V0IGFjY2VzcyB0byBTU1QgQVBJcyB0byB1c2UgKi8KQEAgLTgwMiwxMiArNjEyLDE1IEBACiAJCXByX2Vycigic3N0IGNhcmQgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CiAJCXJldHVybiByZXRfdmFsOwogCX0KLQogCXNzdF9jYXJkX3ZlbmRvcl9pZCA9IGludGVsbWFkZGF0YS0+c3N0ZHJ2X29wcy0+dmVuZG9yX2lkOwogCWludGVsbWFkZGF0YS0+cG1pY19zdGF0dXMgPSBQTUlDX1VOSU5JVDsKIAlyZXR1cm4gcmV0X3ZhbDsKIH0KIAorc3RhdGljIHZvaWQgc25kX2ludGVsbWFkX3BhZ2VfZnJlZShzdHJ1Y3Qgc25kX3BjbSAqcGNtKQoreworCXNuZF9wY21fbGliX3ByZWFsbG9jYXRlX2ZyZWVfZm9yX2FsbChwY20pOworfQogLyogRHJpdmVyIEluaXQvZXhpdCBmdW5jdGlvbmFsaXRpZXMgKi8KIC8qKgogICogc25kX2ludGVsbWFkX3BjbV9uZXcgLSB0byBzZXR1cCBwY20gZm9yIHRoZSBjYXJkCkBAIC04NTksNiArNjcyLDcgQEAKIAkJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLCBjYXBfb3BzKTsKIAkvKiBzZXR1cCBwcml2YXRlIGRhdGEgd2hpY2ggY2FuIGJlIHJldHJpZXZlZCB3aGVuIHJlcXVpcmVkICovCiAJcGNtLT5wcml2YXRlX2RhdGEgPSBpbnRlbG1hZGRhdGE7CisJcGNtLT5wcml2YXRlX2ZyZWUgPSBzbmRfaW50ZWxtYWRfcGFnZV9mcmVlOwogCXBjbS0+aW5mb19mbGFncyA9IDA7CiAJc3RybmNweShwY20tPm5hbWUsIGNhcmQtPnNob3J0bmFtZSwgc3RybGVuKGNhcmQtPnNob3J0bmFtZSkpOwogCS8qIGFsbG9jYXRlIGRtYSBwYWdlcyBmb3IgQUxTQSBzdHJlYW0gb3BlcmF0aW9ucyAqLwpAQCAtOTAzLDggKzcxNywxMiBAQAogCiAJcHJfZGVidWcoInNuZF9pbnRlbG1hZF9qYWNrIGNhbGxlZFxuIik7CiAJamFjayA9ICZpbnRlbG1hZGRhdGEtPmphY2tbMF0uamFjazsKLQlyZXR2YWwgPSBzbmRfamFja19uZXcoaW50ZWxtYWRkYXRhLT5jYXJkLCAiSGVhZHBob25lIiwKLQkJCQlTTkRfSkFDS19IRUFEUEhPTkUsICZqYWNrKTsKKwlzbmRfamFja19zZXRfa2V5KGphY2ssIFNORF9KQUNLX0JUTl8wLCBLRVlfUEhPTkUpOworCXJldHZhbCA9IHNuZF9qYWNrX25ldyhpbnRlbG1hZGRhdGEtPmNhcmQsICJJbnRlbChSKSBNSUQgQXVkaW8gSmFjayIsCisJCVNORF9KQUNLX0hFQURQSE9ORSB8IFNORF9KQUNLX0hFQURTRVQgfAorCQlTV19KQUNLX1BIWVNJQ0FMX0lOU0VSVCB8IFNORF9KQUNLX0JUTl8wCisJCXwgU05EX0pBQ0tfQlROXzEsICZqYWNrKTsKKwlwcl9kZWJ1Zygic25kX2ludGVsbWFkX2phY2sgY2FsbGVkXG4iKTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJcmV0dXJuIHJldHZhbDsKIAlzbmRfamFja19yZXBvcnQoamFjaywgMCk7CkBAIC05MTIsNDAgKzczMCw2IEBACiAJamFjay0+cHJpdmF0ZV9kYXRhID0gamFjazsKIAlpbnRlbG1hZGRhdGEtPmphY2tbMF0uamFjayA9ICpqYWNrOwogCi0KLQlqYWNrID0gJmludGVsbWFkZGF0YS0+amFja1sxXS5qYWNrOwotCXJldHZhbCA9IHNuZF9qYWNrX25ldyhpbnRlbG1hZGRhdGEtPmNhcmQsICJIZWFkc2V0IiwKLQkJCQlTTkRfSkFDS19IRUFEU0VULCAmamFjayk7Ci0JaWYgKHJldHZhbCA8IDApCi0JCXJldHVybiByZXR2YWw7Ci0KLQotCi0JamFjay0+cHJpdmF0ZV9kYXRhID0gamFjazsKLQlpbnRlbG1hZGRhdGEtPmphY2tbMV0uamFjayA9ICpqYWNrOwotCi0KLQlqYWNrID0gJmludGVsbWFkZGF0YS0+amFja1syXS5qYWNrOwotCXJldHZhbCA9IHNuZF9qYWNrX25ldyhpbnRlbG1hZGRhdGEtPmNhcmQsICJTaG9ydCBQcmVzcyIsCi0JCQkJU05EX0pBQ0tfSFNfU0hPUlRfUFJFU1MsICZqYWNrKTsKLQlpZiAocmV0dmFsIDwgMCkKLQkJcmV0dXJuIHJldHZhbDsKLQotCi0JamFjay0+cHJpdmF0ZV9kYXRhID0gamFjazsKLQlpbnRlbG1hZGRhdGEtPmphY2tbMl0uamFjayA9ICpqYWNrOwotCi0KLQlqYWNrID0gJmludGVsbWFkZGF0YS0+amFja1szXS5qYWNrOwotCXJldHZhbCA9IHNuZF9qYWNrX25ldyhpbnRlbG1hZGRhdGEtPmNhcmQsICJMb25nIFByZXNzIiwKLQkJCQlTTkRfSkFDS19IU19MT05HX1BSRVNTLCAmamFjayk7Ci0JaWYgKHJldHZhbCA8IDApCi0JCXJldHVybiByZXR2YWw7Ci0KLQotCWphY2stPnByaXZhdGVfZGF0YSA9IGphY2s7Ci0JaW50ZWxtYWRkYXRhLT5qYWNrWzNdLmphY2sgPSAqamFjazsKLQogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTk5OCwxNCArNzgyLDE0IEBACiAJaW50ZWxtYWRkYXRhID0gZGV2aWNlLT5kZXZpY2VfZGF0YTsKIAogCXByX2RlYnVnKCJzbmRfaW50ZWxtYWRfZGV2X2ZyZWUgY2FsbGVkXG4iKTsKLQlzbmRfY2FyZF9mcmVlKGludGVsbWFkZGF0YS0+Y2FyZCk7Ci0JLypnZW5sX3VucmVnaXN0ZXJfZmFtaWx5KCZhdWRpb19ldmVudF9nZW5sX2ZhbWlseSk7Ki8KIAl1bnJlZ2lzdGVyX3NzdF9jYXJkKGludGVsbWFkZGF0YS0+c3N0ZHJ2X29wcyk7CiAKIAkvKiBmcmVlIGFsbG9jYXRlZCBtZW1vcnkgZm9yIGludGVybmFsIGNvbnRleHQgKi8KIAlkZXN0cm95X3dvcmtxdWV1ZShpbnRlbG1hZGRhdGEtPm1hZF9qYWNrX3dxKTsKKwlkZXZpY2UtPmRldmljZV9kYXRhID0gTlVMTDsKIAlrZnJlZShpbnRlbG1hZGRhdGEtPnNzdGRydl9vcHMpOwogCWtmcmVlKGludGVsbWFkZGF0YSk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTAzNiw5ICs4MjAsMTAgQEAKIAlpbnQgcmV0X3ZhbDsKIAlzdHJ1Y3Qgc25kX2ludGVsbWFkICppbnRlbG1hZGRhdGE7CiAJY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCAqaWQgPSBwbGF0Zm9ybV9nZXRfZGV2aWNlX2lkKHBkZXYpOwotCXVuc2lnbmVkIGludCBjcHVfaWQgPSAodW5zaWduZWQgaW50KWlkLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3Qgc25kX2ludGVsbWFkX3Byb2JlX2luZm8gKmluZm8gPSAodm9pZCAqKWlkLT5kcml2ZXJfZGF0YTsKIAotCXByX2RlYnVnKCJwcm9iZSBmb3IgJXMgY3B1X2lkICVkXG4iLCBwZGV2LT5uYW1lLCBjcHVfaWQpOworCXByX2RlYnVnKCJwcm9iZSBmb3IgJXMgY3B1X2lkICVkXG4iLCBwZGV2LT5uYW1lLCBpbmZvLT5jcHVfaWQpOworCXByX2RlYnVnKCJycV9jaGFjaGUgJXggb2Ygc2l6ZSAleFxuIiwgaW5mby0+aXJxX2NhY2hlLCBpbmZvLT5zaXplKTsKIAlpZiAoIXN0cmNtcChwZGV2LT5uYW1lLCBEUklWRVJfTkFNRV9NUlNUKSkKIAkJcHJfZGVidWcoImRldGVjdGVkIE1SU1RcbiIpOwogCWVsc2UgaWYgKCFzdHJjbXAocGRldi0+bmFtZSwgRFJJVkVSX05BTUVfTUZMRCkpCkBAIC0xMDQ3LDcgKzgzMiw4IEBACiAJCXByX2VycigiZGV0ZWN0ZWQgdW5rbm93biBkZXZpY2UgYWJvcnQhIVxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KLQlpZiAoKGNwdV9pZCA8IENQVV9DSElQX0xJTkNST0ZUKSB8fCAoY3B1X2lkID4gQ1BVX0NISVBfUEVOV0VMTCkpIHsKKwlpZiAoKGluZm8tPmNwdV9pZCA8IENQVV9DSElQX0xJTkNST0ZUKSB8fAorCQkJCShpbmZvLT5jcHVfaWQgPiBDUFVfQ0hJUF9QRU5XRUxMKSkgewogCQlwcl9lcnIoImRldGVjdGVkIHVua25vd24gY3B1X2lkIGFib3J0ISFcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC0xMDU3LDYgKzg0Myw3IEBACiAJCXByX2RlYnVnKCJtZW0gYWxsb2N0biBmYWlsXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQorCWludGVsbWFkX2RydiA9IGludGVsbWFkZGF0YTsKIAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgTFBFIEFQSSBzZXQgKi8KIAlpbnRlbG1hZGRhdGEtPnNzdGRydl9vcHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaW50ZWxfc3N0X2NhcmRfb3BzKSwKQEAgLTEwNjcsNyArODU0LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JaW50ZWxtYWRkYXRhLT5jcHVfaWQgPSBjcHVfaWQ7CisJaW50ZWxtYWRkYXRhLT5jcHVfaWQgPSBpbmZvLT5jcHVfaWQ7CiAJLyogY3JlYXRlIGEgY2FyZCBpbnN0YW5jZSB3aXRoIEFMU0EgZnJhbWV3b3JrICovCiAJcmV0X3ZhbCA9IHNuZF9jYXJkX2NyZWF0ZShjYXJkX2luZGV4LCBjYXJkX2lkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOwogCWlmIChyZXRfdmFsKSB7CkBAIC0xMDkxLDcgKzg3OCw3IEBACiAJcmV0X3ZhbCA9IHNuZF9pbnRlbG1hZF9zc3RfcmVnaXN0ZXIoaW50ZWxtYWRkYXRhKTsKIAlpZiAocmV0X3ZhbCkgewogCQlwcl9lcnIoInNuZF9pbnRlbG1hZF9zc3RfcmVnaXN0ZXIgZmFpbGVkXG4iKTsKLQkJZ290byBmcmVlX2FsbG9jczsKKwkJZ290byBzZXRfbnVsbF9kYXRhOwogCX0KIAogCWludGVsbWFkZGF0YS0+cG1pY19zdGF0dXMgPSBQTUlDX0lOSVQ7CkBAIC0xMDk5LDIwICs4ODYsMjEgQEAKIAlyZXRfdmFsID0gc25kX2ludGVsbWFkX3BjbShjYXJkLCBpbnRlbG1hZGRhdGEpOwogCWlmIChyZXRfdmFsKSB7CiAJCXByX2Vycigic25kX2ludGVsbWFkX3BjbSBmYWlsZWRcbiIpOwotCQlnb3RvIGZyZWVfYWxsb2NzOworCQlnb3RvIGZyZWVfc3N0OwogCX0KIAogCXJldF92YWwgPSBzbmRfaW50ZWxtYWRfbWl4ZXIoaW50ZWxtYWRkYXRhKTsKIAlpZiAocmV0X3ZhbCkgewogCQlwcl9lcnIoInNuZF9pbnRlbG1hZF9taXhlciBmYWlsZWRcbiIpOwotCQlnb3RvIGZyZWVfYWxsb2NzOworCQlnb3RvIGZyZWVfY2FyZDsKIAl9CiAKIAlyZXRfdmFsID0gc25kX2ludGVsbWFkX2phY2soaW50ZWxtYWRkYXRhKTsKIAlpZiAocmV0X3ZhbCkgewogCQlwcl9lcnIoInNuZF9pbnRlbG1hZF9qYWNrIGZhaWxlZFxuIik7Ci0JCWdvdG8gZnJlZV9hbGxvY3M7CisJCWdvdG8gZnJlZV9jYXJkOwogCX0KKwlpbnRlbG1hZGRhdGEtPmFkY19hZGRyZXNzID0gbWlkX2luaXRpYWxpemVfYWRjKCk7CiAKIAkvKmNyZWF0ZSB3b3JrIHF1ZXVlIGZvciBqYWNrIGludGVycnVwdCovCiAJSU5JVF9XT1JLKCZpbnRlbG1hZGRhdGEtPm1hZF9qYWNrX21zZy53cSwKQEAgLTExMjAsMzMgKzkwOCw0OCBAQAogCiAJaW50ZWxtYWRkYXRhLT5tYWRfamFja193cSA9IGNyZWF0ZV93b3JrcXVldWUoInNzdF9tYWRfamFja193cSIpOwogCWlmICghaW50ZWxtYWRkYXRhLT5tYWRfamFja193cSkKLQkJZ290byBmcmVlX21hZF9qYWNrX3dxOworCQlnb3RvIGZyZWVfY2FyZDsKIAotCXJldF92YWwgPSBzbmRfaW50ZWxtYWRfcmVnaXN0ZXJfaXJxKGludGVsbWFkZGF0YSk7CisJcmV0X3ZhbCA9IHNuZF9pbnRlbG1hZF9yZWdpc3Rlcl9pcnEoaW50ZWxtYWRkYXRhLAorCQkJCQlpbmZvLT5pcnFfY2FjaGUsIGluZm8tPnNpemUpOwogCWlmIChyZXRfdmFsKSB7CiAJCXByX2Vycigic25kX2ludGVsbWFkX3JlZ2lzdGVyX2lycSBmYWlsXG4iKTsKLQkJZ290byBmcmVlX2FsbG9jczsKKwkJZ290byBmcmVlX21hZF9qYWNrX3dxOwogCX0KIAogCS8qIGludGVybmFsIGZ1bmN0aW9uIGNhbGwgdG8gcmVnaXN0ZXIgZGV2aWNlIHdpdGggQUxTQSAqLwogCXJldF92YWwgPSBzbmRfaW50ZWxtYWRfY3JlYXRlKGludGVsbWFkZGF0YSwgY2FyZCk7CiAJaWYgKHJldF92YWwpIHsKIAkJcHJfZXJyKCJzbmRfaW50ZWxtYWRfY3JlYXRlIGZhaWxlZFxuIik7Ci0JCWdvdG8gZnJlZV9hbGxvY3M7CisJCWdvdG8gc2V0X3B2dF9kYXRhOwogCX0KIAljYXJkLT5wcml2YXRlX2RhdGEgPSAmaW50ZWxtYWRkYXRhOwogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBkZXYtPmRldik7CiAJcmV0X3ZhbCA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpOwogCWlmIChyZXRfdmFsKSB7CiAJCXByX2Vycigic25kX2NhcmRfcmVnaXN0ZXIgZmFpbGVkXG4iKTsKLQkJZ290byBmcmVlX2FsbG9jczsKKwkJZ290byBzZXRfcHZ0X2RhdGE7CisJfQorCWlmIChwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkgeworCQlpbnQgZ3Bpb19hbXAgPSAqKGludCAqKXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCQlpZiAoZ3Bpb19yZXF1ZXN0X29uZShncGlvX2FtcCwgR1BJT0ZfT1VUX0lOSVRfTE9XLCAiYW1wIHBvd2VyIikpCisJCQlncGlvX2FtcCA9IDA7CisJCWludGVsbWFkZGF0YS0+c3N0ZHJ2X29wcy0+c2NhcmRfb3BzLT5ncGlvX2FtcCA9IGdwaW9fYW1wOwogCX0KIAogCXByX2RlYnVnKCJzbmRfaW50ZWxtYWRfcHJvYmUgY29tcGxldGVcbiIpOwogCXJldHVybiByZXRfdmFsOwogCitzZXRfcHZ0X2RhdGE6CisJY2FyZC0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKIGZyZWVfbWFkX2phY2tfd3E6CiAJZGVzdHJveV93b3JrcXVldWUoaW50ZWxtYWRkYXRhLT5tYWRfamFja193cSk7CitmcmVlX2NhcmQ6CisJc25kX2NhcmRfZnJlZShpbnRlbG1hZGRhdGEtPmNhcmQpOworZnJlZV9zc3Q6CisJdW5yZWdpc3Rlcl9zc3RfY2FyZChpbnRlbG1hZGRhdGEtPnNzdGRydl9vcHMpOworc2V0X251bGxfZGF0YToKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIGZyZWVfYWxsb2NzOgogCXByX2VycigicHJvYmUgZmFpbGVkXG4iKTsKIAlzbmRfY2FyZF9mcmVlKGNhcmQpOwpAQCAtMTE2MSwxMyArOTY0LDEzIEBACiAJc3RydWN0IHNuZF9pbnRlbG1hZCAqaW50ZWxtYWRkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAlpZiAoaW50ZWxtYWRkYXRhKSB7CisJCWlmIChpbnRlbG1hZGRhdGEtPnNzdGRydl9vcHMtPnNjYXJkX29wcy0+Z3Bpb19hbXApCisJCQlncGlvX2ZyZWUoaW50ZWxtYWRkYXRhLT5zc3RkcnZfb3BzLT5zY2FyZF9vcHMtPmdwaW9fYW1wKTsKKwkJZnJlZV9pcnEoaW50ZWxtYWRkYXRhLT5pcnEsIGludGVsbWFkZGF0YSk7CiAJCXNuZF9jYXJkX2ZyZWUoaW50ZWxtYWRkYXRhLT5jYXJkKTsKLQkJdW5yZWdpc3Rlcl9zc3RfY2FyZChpbnRlbG1hZGRhdGEtPnNzdGRydl9vcHMpOwotCQkvKiBmcmVlIGFsbG9jYXRlZCBtZW1vcnkgZm9yIGludGVybmFsIGNvbnRleHQgKi8KLQkJZGVzdHJveV93b3JrcXVldWUoaW50ZWxtYWRkYXRhLT5tYWRfamFja193cSk7Ci0JCWtmcmVlKGludGVsbWFkZGF0YS0+c3N0ZHJ2X29wcyk7Ci0JCWtmcmVlKGludGVsbWFkZGF0YSk7CiAJfQorCWludGVsbWFkX2RydiA9IE5VTEw7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExNzUsOCArOTc4LDggQEAKICAqCQlEcml2ZXIgaW5pdGlhbGl6YXRpb24gYW5kIGV4aXQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCBzbmRfaW50ZWxtYWRfaWRzW10gPSB7Ci0Je0RSSVZFUl9OQU1FX01SU1QsIENQVV9DSElQX0xJTkNST0ZUfSwKLQl7RFJJVkVSX05BTUVfTUZMRCwgQ1BVX0NISVBfUEVOV0VMTH0sCisJe0RSSVZFUl9OQU1FX01SU1QsIElORk8oQ1BVX0NISVBfTElOQ1JPRlQsIEFVRElOVF9CQVNFLCAxKX0sCisJe0RSSVZFUl9OQU1FX01GTEQsIElORk8oQ1BVX0NISVBfUEVOV0VMTCwgMHhGRkZGN0ZDRCwgMSl9LAogCXsiIiwgMH0sCiAKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkLmggYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkLmgKaW5kZXggZTc3ZGE4Ny4uMTRhN2JhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWQuaApAQCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBfX0lOVEVMTUlEX0gKIAogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxzb3VuZC9qYWNrLmg+CiAKICNkZWZpbmUgRFJJVkVSX05BTUVfTUZMRCAibXNpY19hdWRpbyIKICNkZWZpbmUgRFJJVkVSX05BTUVfTVJTVCAicG1pY19hdWRpbyIKQEAgLTQzLDcgKzQ0LDcgQEAKICNkZWZpbmUgTUFYX0JVRkZFUgkJKDgwMCoxMDI0KSAvKiBmb3IgUENNICovCiAjZGVmaW5lIE1JTl9CVUZGRVIJCSg4MDAqMTAyNCkKICNkZWZpbmUgTUFYX1BFUklPRFMJCSgxMDI0KjIpCi0jZGVmaW5lIE1JTl9QRVJJT0RTCQkxCisjZGVmaW5lIE1JTl9QRVJJT0RTCQkyCiAjZGVmaW5lIE1BWF9QRVJJT0RfQllURVMgTUFYX0JVRkZFUgogI2RlZmluZSBNSU5fUEVSSU9EX0JZVEVTIDMyCiAvKiNkZWZpbmUgTUlOX1BFUklPRF9CWVRFUyAxNjAqLwpAQCAtNTMsMTIgKzU0LDEyIEBACiAjZGVmaW5lIFNURVJFT19DTlRMCQkyCiAjZGVmaW5lIE1JTl9DSEFOTkVMCQkxCiAjZGVmaW5lIE1BWF9DSEFOTkVMX0FNSUMJMgotI2RlZmluZSBNQVhfQ0hBTk5FTF9ETUlDCTQKKyNkZWZpbmUgTUFYX0NIQU5ORUxfRE1JQwk1CiAjZGVmaW5lIEZJRk9fU0laRQkJMCAvKiBmaWZvIG5vdCBiZWluZyB1c2VkICovCiAjZGVmaW5lIElOVEVMX01BRAkJIkludGVsIE1BRCIKLSNkZWZpbmUgTUFYX0NUUkxfTVJTVAkJNwotI2RlZmluZSBNQVhfQ1RSTF9NRkxECQkyCi0jZGVmaW5lIE1BWF9DVFJMCQk3CisjZGVmaW5lIE1BWF9DVFJMX01SU1QJCTgKKyNkZWZpbmUgTUFYX0NUUkxfTUZMRAkJNworI2RlZmluZSBNQVhfQ1RSTAkJOAogI2RlZmluZSBNQVhfVkVORE9SUwkJNAogLyogVE9ETyArNiBkYiAqLwogI2RlZmluZSBNQVhfVk9MCQk2NApAQCAtNjYsMTIgKzY3LDE3IEBACiAjZGVmaW5lIE1JTl9WT0wJCTAKICNkZWZpbmUgUExBWUJBQ0tfQ09VTlQgIDEKICNkZWZpbmUgQ0FQVFVSRV9DT1VOVAkxCisjZGVmaW5lIEFEQ19PTkVfTFNCX01VTFRJUExJRVIgMjM0NgorCisjZGVmaW5lIE1JRF9KQUNLX0hTX0xPTkdfUFJFU1MgU05EX0pBQ0tfQlROXzAKKyNkZWZpbmUgTUlEX0pBQ0tfSFNfU0hPUlRfUFJFU1MgU05EX0pBQ0tfQlROXzEKIAogZXh0ZXJuIGludAlzc3RfY2FyZF92ZW5kb3JfaWQ7CiAKIHN0cnVjdCBtYWRfamFjayB7CiAJc3RydWN0IHNuZF9qYWNrIGphY2s7CiAJaW50IGphY2tfc3RhdHVzOworCWludCBqYWNrX2Rldl9zdGF0ZTsKIAlzdHJ1Y3QgdGltZXZhbCBidXR0b25wcmVzc2VkOwogCXN0cnVjdCB0aW1ldmFsICBidXR0b25yZWxlYXNlZDsKIH07CkBAIC04Myw2ICs4OSwxMiBAQAogCiB9OwogCitzdHJ1Y3Qgc25kX2ludGVsbWFkX3Byb2JlX2luZm8geworCXVuc2lnbmVkIGludCBjcHVfaWQ7CisJdW5zaWduZWQgaW50IGlycV9jYWNoZTsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKK307CisKIC8qKgogICogc3RydWN0IHNuZF9pbnRlbG1hZCAtIGludGVsbWFkIGRyaXZlciBzdHJ1Y3R1cmUKICAqCkBAIC0xMTYsMTAgKzEyOCwxMiBAQAogCXZvaWQgX19pb21lbSAqaW50X2Jhc2U7CiAJaW50IG91dHB1dF9zZWw7CiAJaW50IGlucHV0X3NlbDsKKwlpbnQgbGluZW91dF9zZWw7CiAJaW50IG1hc3Rlcl9tdXRlOwogCXN0cnVjdCBtYWRfamFjayBqYWNrWzRdOwogCWludCBwbGF5YmFja19jbnQ7CiAJaW50IGNhcHR1cmVfY250OworCXUxNiBhZGNfYWRkcmVzczsKIAlzdHJ1Y3QgbWFkX2phY2tfbXNnX3dxICBtYWRfamFja19tc2c7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1hZF9qYWNrX3dxOwogCXU4IGphY2tfcHJldl9zdGF0ZTsKQEAgLTEzMSw2ICsxNDUsOCBAQAogCWludAlwbGF5YmFja192b2xfbWluOwogCWludAljYXB0dXJlX3ZvbF9tYXg7CiAJaW50CWNhcHR1cmVfdm9sX21pbjsKKwlpbnQJbWFzdGVyX3ZvbF9tYXg7CisJaW50CW1hc3Rlcl92b2xfbWluOwogfTsKIAogc3RydWN0IG1hZF9zdHJlYW1fcHZ0IHsKQEAgLTE2MSw4ICsxNzcsMTggQEAKIAlQTEFZQkFDS19NVVRFLAogCUNBUFRVUkVfVk9MLAogCUNBUFRVUkVfTVVURSwKKwlNQVNURVJfVk9MLAogCU1BU1RFUl9NVVRFCiB9OworZW51bSBfd2lkZ2V0X2N0cmxfbWZsZCB7CisJTElORU9VVF9TRUxfTUZMRCA9IDMsCit9OworZW51bSBod19jaHMgeworCUhXX0NIMCA9IDAsCisJSFdfQ0gxLAorCUhXX0NIMiwKKwlIV19DSDMKK307CiAKIHZvaWQgcGVyaW9kX2VsYXBzZWQodm9pZCAqbWFkX3N1YnN0cmVhbSk7CiBpbnQgc25kX2ludGVsbWFkX2FsbG9jX3N0cmVhbShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CkBAIC0xNzcsNSArMjAzLDcgQEAKIGV4dGVybiBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfaW50ZWxtYWRfY29udHJvbHNfbXJzdFtdOwogZXh0ZXJuIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9pbnRlbG1hZF9jb250cm9sc19tZmxkW107CiBleHRlcm4gc3RydWN0IHNuZF9wbWljX29wcyAqaW50ZWxtYWRfdmVuZG9yX29wc1tdOwordm9pZCBzc3RfbWFkX3NlbmRfamFja19yZXBvcnQoc3RydWN0IHNuZF9qYWNrICpqYWNrLAorCQkJaW50IGJ1dHRvbnByZXNzZXZlbnQgLCBpbnQgc3RhdHVzKTsKIAogI2VuZGlmIC8qIF9fSU5URUxNSURfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZF9hZGNfY29udHJvbC5oIGIvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZF9hZGNfY29udHJvbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZDVjMzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkX2FkY19jb250cm9sLmgKQEAgLTAsMCArMSwxOTMgQEAKKyNpZm5kZWYgX19JTlRFTE1JRF9BRENfQ09OVFJPTF9IX18KKyNkZWZpbmUgX19JTlRFTE1JRF9BRENfQ09OVFJPTF9IXworLyoKKyAqICBpbnRlbG1pZF9hZGNfY29udHJvbC5oIC0gSW50ZWwgU1NUIERyaXZlciBmb3IgYXVkaW8gZW5naW5lCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOC0xMCBJbnRlbCBDb3Jwb3JhdGlvbgorICogIEF1dGhvcnM6CVIgRHVyZ2FkYWRvc3MgPHIuZHVyZ2Fkb3NzQGludGVsLmNvbT4KKyAqCQlEaGFyYWdlc3dhcmkgUiA8ZGhhcmFnZXN3YXJpLnJAaW50ZWwuY29tPgorICogIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KKyAqCisgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICoKKyAqICBDb21tb24gcHJpdmF0ZSBBREMgZGVjbGFyYXRpb25zIGZvciBTU1QKKyAqLworCisKKyNkZWZpbmUgTVNJQ19BREMxQ05UTDEJCTB4MUMwCisjZGVmaW5lIE1TSUNfQURDX0VOQkwJCTB4MTAKKyNkZWZpbmUgTVNJQ19BRENfU1RBUlQJCTB4MDgKKworI2RlZmluZSBNU0lDX0FEQzFDTlRMMwkJMHgxQzIKKyNkZWZpbmUgTVNJQ19BRENUSEVSTV9FTkJMCTB4MDQKKyNkZWZpbmUgTVNJQ19BRENSUkRBVEFfRU5CTAkweDA1CisKKyNkZWZpbmUgTVNJQ19TVE9QQklUX01BU0sJMTYKKyNkZWZpbmUgTVNJQ19BRENUSEVSTV9NQVNLCTQKKworI2RlZmluZSBBRENfQ0hBTkxTX01BWAkJMTUgLyogTnVtYmVyIG9mIEFEQyBjaGFubmVscyAqLworI2RlZmluZSBBRENfTE9PUF9NQVgJCShBRENfQ0hBTkxTX01BWCAtIDEpCisKKy8qIEFEQyBjaGFubmVsIGNvZGUgdmFsdWVzICovCisjZGVmaW5lIEFVRElPX0RFVEVDVF9DT0RFCTB4MDYKKworLyogQURDIGJhc2UgYWRkcmVzc2VzICovCisjZGVmaW5lIEFEQ19DSE5MX1NUQVJUX0FERFIJMHgxQzUJLyogaW5jcmVtZW50cyBieSAxICovCisjZGVmaW5lIEFEQ19EQVRBX1NUQVJUX0FERFIgICAgIDB4MUQ0ICAgLyogaW5jcmVtZW50cyBieSAyICovCisKKworLyoqCisgKiBjb25maWd1cmVfYWRjIC0gZW5hYmxlcy9kaXNhYmxlcyB0aGUgQURDIGZvciBjb252ZXJzaW9uCisgKiBAdmFsOiB6ZXJvOiBkaXNhYmxlcyB0aGUgQURDIG5vbi16ZXJvOmVuYWJsZXMgdGhlIEFEQworICoKKyAqIEVuYWJsZS9EaXNhYmxlIHRoZSBBREMgZGVwZW5kaW5nIG9uIHRoZSBhcmd1bWVudAorICoKKyAqIENhbiBzbGVlcAorICovCitzdGF0aWMgaW5saW5lIGludCBjb25maWd1cmVfYWRjKGludCB2YWwpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBzY19hY2Nlc3MgPSB7MCx9OworCisKKwlzY19hY2Nlc3MucmVnX2FkZHIgPSBNU0lDX0FEQzFDTlRMMTsKKwlyZXQgPSBzc3Rfc2NfcmVnX2FjY2Vzcygmc2NfYWNjZXNzLCBQTUlDX1JFQUQsIDEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAodmFsKQorCQkvKiBFbmFibGUgYW5kIHN0YXJ0IHRoZSBBREMgKi8KKwkJc2NfYWNjZXNzLnZhbHVlIHw9IChNU0lDX0FEQ19FTkJMIHwgTVNJQ19BRENfU1RBUlQpOworCWVsc2UKKwkJLyogSnVzdCBzdG9wIHRoZSBBREMgKi8KKwkJc2NfYWNjZXNzLnZhbHVlICY9ICh+TVNJQ19BRENfU1RBUlQpOworCXNjX2FjY2Vzcy5yZWdfYWRkciA9IE1TSUNfQURDMUNOVEwxOworCXJldHVybiBzc3Rfc2NfcmVnX2FjY2Vzcygmc2NfYWNjZXNzLCBQTUlDX1dSSVRFLCAxKTsKK30KKworLyoqCisgKiByZXNldF9zdG9wYml0IC0gc2V0cyB0aGUgc3RvcCBiaXQgdG8gMCBvbiB0aGUgZ2l2ZW4gY2hhbm5lbAorICogQGFkZHI6IGFkZHJlc3Mgb2YgdGhlIGNoYW5uZWwKKyAqCisgKiBDYW4gc2xlZXAKKyAqLworc3RhdGljIGlubGluZSBpbnQgcmVzZXRfc3RvcGJpdCh1aW50MTZfdCBhZGRyKQoreworCWludCByZXQ7CisJc3RydWN0IHNjX3JlZ19hY2Nlc3Mgc2NfYWNjZXNzID0gezAsfTsKKwlzY19hY2Nlc3MucmVnX2FkZHIgPSBhZGRyOworCXJldCA9IHNzdF9zY19yZWdfYWNjZXNzKCZzY19hY2Nlc3MsIFBNSUNfUkVBRCwgMSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwkvKiBTZXQgdGhlIHN0b3AgYml0IHRvIHplcm8gKi8KKwlzY19hY2Nlc3MucmVnX2FkZHIgPSBhZGRyOworCXNjX2FjY2Vzcy52YWx1ZSA9IChzY19hY2Nlc3MudmFsdWUpICYgMHhFRjsKKwlyZXR1cm4gc3N0X3NjX3JlZ19hY2Nlc3MoJnNjX2FjY2VzcywgUE1JQ19XUklURSwgMSk7Cit9CisKKy8qKgorICogZmluZF9mcmVlX2NoYW5uZWwgLSBmaW5kcyBhbiBlbXB0eSBjaGFubmVsIGZvciBjb252ZXJzaW9uCisgKgorICogSWYgdGhlIEFEQyBpcyBub3QgZW5hYmxlZCB0aGVuIHN0YXJ0IHVzaW5nIDB0aCBjaGFubmVsCisgKiBpdHNlbGYuIE90aGVyd2lzZSBmaW5kIGFuIGVtcHR5IGNoYW5uZWwgYnkgbG9va2luZyBmb3IgYQorICogY2hhbm5lbCBpbiB3aGljaCB0aGUgc3RvcGJpdCBpcyBzZXQgdG8gMS4gcmV0dXJucyB0aGUgaW5kZXgKKyAqIG9mIHRoZSBmaXJzdCBmcmVlIGNoYW5uZWwgaWYgc3VjY2VlZHMgb3IgYW4gZXJyb3IgY29kZS4KKyAqCisgKiBDb250ZXh0OiBjYW4gc2xlZXAKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGZpbmRfZnJlZV9jaGFubmVsKHZvaWQpCit7CisJaW50IHJldDsKKwlpbnQgaTsKKworCXN0cnVjdCBzY19yZWdfYWNjZXNzIHNjX2FjY2VzcyA9IHswLH07CisKKwkvKiBjaGVjayB3aGV0aGVyIEFEQyBpcyBlbmFibGVkICovCisJc2NfYWNjZXNzLnJlZ19hZGRyID0gTVNJQ19BREMxQ05UTDE7CisJcmV0ID0gc3N0X3NjX3JlZ19hY2Nlc3MoJnNjX2FjY2VzcywgUE1JQ19SRUFELCAxKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKChzY19hY2Nlc3MudmFsdWUgJiBNU0lDX0FEQ19FTkJMKSA9PSAwKQorCQlyZXR1cm4gMDsKKworCS8qIEFEQyBpcyBhbHJlYWR5IGVuYWJsZWQ7IExvb2tpbmcgZm9yIGFuIGVtcHR5IGNoYW5uZWwgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQURDX0NIQU5MU19NQVg7IGkrKykgeworCisJCXNjX2FjY2Vzcy5yZWdfYWRkciA9IEFEQ19DSE5MX1NUQVJUX0FERFIgKyBpOworCQlyZXQgPSBzc3Rfc2NfcmVnX2FjY2Vzcygmc2NfYWNjZXNzLCBQTUlDX1JFQUQsIDEpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlpZiAoc2NfYWNjZXNzLnZhbHVlICYgTVNJQ19TVE9QQklUX01BU0spIHsKKwkJCXJldCA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gKHJldCA+IEFEQ19MT09QX01BWCkgPyAoLUVJTlZBTCkgOiByZXQ7Cit9CisKKy8qKgorICogbWlkX2luaXRpYWxpemVfYWRjIC0gaW5pdGlhbGl6aW5nIHRoZSBBREMKKyAqIEBkZXY6IG91ciBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogSW5pdGlhbGl6ZSB0aGUgQURDIGZvciByZWFkaW5nIHRoZXJtaXN0b3IgdmFsdWVzLiBDYW4gc2xlZXAuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG1pZF9pbml0aWFsaXplX2FkYyh2b2lkKQoreworCWludCBiYXNlX2FkZHIsIGNobmxfYWRkcjsKKwlpbnQgcmV0OworCXN0YXRpYyBpbnQgY2hhbm5lbF9pbmRleDsKKwlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBzY19hY2Nlc3MgPSB7MCx9OworCisJLyogSW5kZXggb2YgdGhlIGZpcnN0IGNoYW5uZWwgaW4gd2hpY2ggdGhlIHN0b3AgYml0IGlzIHNldCAqLworCWNoYW5uZWxfaW5kZXggPSBmaW5kX2ZyZWVfY2hhbm5lbCgpOworCWlmIChjaGFubmVsX2luZGV4IDwgMCkgeworCQlwcl9lcnIoIk5vIGZyZWUgQURDIGNoYW5uZWxzIik7CisJCXJldHVybiBjaGFubmVsX2luZGV4OworCX0KKworCWJhc2VfYWRkciA9IEFEQ19DSE5MX1NUQVJUX0FERFIgKyBjaGFubmVsX2luZGV4OworCisJaWYgKCEoY2hhbm5lbF9pbmRleCA9PSAwIHx8IGNoYW5uZWxfaW5kZXggPT0gQURDX0xPT1BfTUFYKSkgeworCQkvKiBSZXNldCBzdG9wIGJpdCBmb3IgY2hhbm5lbHMgb3RoZXIgdGhhbiAwIGFuZCAxMiAqLworCQlyZXQgPSByZXNldF9zdG9wYml0KGJhc2VfYWRkcik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCS8qIEluZGV4IG9mIHRoZSBmaXJzdCBmcmVlIGNoYW5uZWwgKi8KKwkJYmFzZV9hZGRyKys7CisJCWNoYW5uZWxfaW5kZXgrKzsKKwl9CisKKwkvKiBTaW5jZSB0aGlzIGlzIHRoZSBsYXN0IGNoYW5uZWwsIHNldCB0aGUgc3RvcCBiaXQKKwkgICB0byAxIGJ5IE9SaW5nIHRoZSBESUVfU0VOU09SX0NPREUgd2l0aCAweDEwICovCisJc2NfYWNjZXNzLnJlZ19hZGRyID0gYmFzZV9hZGRyOworCXNjX2FjY2Vzcy52YWx1ZSA9IEFVRElPX0RFVEVDVF9DT0RFIHwgMHgxMDsKKwlyZXQgPSBzc3Rfc2NfcmVnX2FjY2Vzcygmc2NfYWNjZXNzLCBQTUlDX1dSSVRFLCAxKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigidW5hYmxlIHRvIGVuYWJsZSBBREMiKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwljaG5sX2FkZHIgPSBBRENfREFUQV9TVEFSVF9BRERSICsgMiAqIGNoYW5uZWxfaW5kZXg7CisJcHJfZGVidWcoIm1pZF9pbml0aWFsaXplIDogJXgiLCBjaG5sX2FkZHIpOworCWNvbmZpZ3VyZV9hZGMoMSk7CisJcmV0dXJuIGNobmxfYWRkcjsKK30KKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkX2N0cmwuYyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWRfY3RybC5jCmluZGV4IDY5YWYwNzAuLjE5ZWM0NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWRfY3RybC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWRfY3RybC5jCkBAIC0yOSwxNyArMjksMzcgQEAKIAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+Ci0jaW5jbHVkZSAiamFjay5oIgogI2luY2x1ZGUgImludGVsX3NzdC5oIgogI2luY2x1ZGUgImludGVsX3NzdF9pb2N0bC5oIgogI2luY2x1ZGUgImludGVsbWlkX3NuZF9jb250cm9sLmgiCiAjaW5jbHVkZSAiaW50ZWxtaWQuaCIKIAorI2RlZmluZSBIV19DSF9CQVNFIDQKKworCisjZGVmaW5lIEhXX0NIXzAJIkh3MSIKKyNkZWZpbmUgSFdfQ0hfMQkiSHcyIgorI2RlZmluZSBIV19DSF8yCSJIdzMiCisjZGVmaW5lIEhXX0NIXzMJIkh3NCIKKworc3RhdGljIGNoYXIgKnJvdXRlcl9kbWljc1tdID0gewkiRE1JQzEiLAorCQkJCSJETUlDMiIsCisJCQkJIkRNSUMzIiwKKwkJCQkiRE1JQzQiLAorCQkJCSJETUlDNSIsCisJCQkJIkRNSUM2IgorCQkJCX07CisKIHN0YXRpYyBjaGFyICpvdXRfbmFtZXNfbXJzdFtdID0geyJIZWFkcGhvbmVzIiwKIAkJCQkiSW50ZXJuYWwgc3BlYWtlcnMifTsKIHN0YXRpYyBjaGFyICppbl9uYW1lc19tcnN0W10gPSB7IkFNSUMiLAogCQkJCSJETUlDIiwKIAkJCQkiSFNfTUlDIn07CitzdGF0aWMgY2hhciAqbGluZV9vdXRfbmFtZXNfbWZsZFtdID0geyJIZWFkc2V0IiwKKwkJCQkiSUhGICAgICIsCisJCQkJIlZpYnJhMSAiLAorCQkJCSJWaWJyYTIgIiwKKwkJCQkiTk9ORSAgICJ9Owogc3RhdGljIGNoYXIgKm91dF9uYW1lc19tZmxkW10gPSB7IkhlYWRzZXQgIiwKIAkJCQkiRWFyUGllY2UgICJ9Owogc3RhdGljIGNoYXIgKmluX25hbWVzX21mbGRbXSA9IHsiQU1JQyIsCkBAIC02MCw5ICs4MCwxMSBAQAogCX0sCiAJewogCQkucGxheWJhY2tfdm9sX21heCA9IDAsCi0JCS5wbGF5YmFja192b2xfbWluID0gLTEyNiwKKwkJLnBsYXliYWNrX3ZvbF9taW4gPSAtMzEsCiAJCS5jYXB0dXJlX3ZvbF9tYXggPSAwLAogCQkuY2FwdHVyZV92b2xfbWluID0gLTMxLAorCQkubWFzdGVyX3ZvbF9tYXggPSAwLAorCQkubWFzdGVyX3ZvbF9taW4gPSAtMTI2LAogCX0sCiB9OwogCkBAIC0xMzksNiArMTYxLDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc25kX2ludGVsbWFkX21hc3Rlcl92b2x1bWVfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwlzbmRfaW50ZWxtYWRfdm9sdW1lX2luZm8odWluZm8sIFNURVJFT19DTlRMLAorCQlpbnRlbG1hZF9jdHJsX3ZhbFtzc3RfY2FyZF92ZW5kb3JfaWRdLm1hc3Rlcl92b2xfbWF4LAorCQlpbnRlbG1hZF9jdHJsX3ZhbFtzc3RfY2FyZF92ZW5kb3JfaWRdLm1hc3Rlcl92b2xfbWluKTsKKwlyZXR1cm4gMDsKK30KKwogLyoqCiAqIHNuZF9pbnRlbG1hZF9kZXZpY2VfaW5mb19tcnN0IC0gcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRldmljZXMgYXZhaWxhYmxlCiAqCkBAIC0xNzksMTMgKzIxMCwyNyBAQAogc3RhdGljIGludCBzbmRfaW50ZWxtYWRfZGV2aWNlX2luZm9fbWZsZChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKKwlzdHJ1Y3Qgc25kX3BtaWNfb3BzICpzY2FyZF9vcHM7CisJc3RydWN0IHNuZF9pbnRlbG1hZCAqaW50ZWxtYWRkYXRhOworCiAJV0FSTl9PTigha2NvbnRyb2wpOwogCVdBUk5fT04oIXVpbmZvKTsKKworCWludGVsbWFkZGF0YSA9IGtjb250cm9sLT5wcml2YXRlX2RhdGE7CisKKwlXQVJOX09OKCFpbnRlbG1hZGRhdGEtPnNzdGRydl9vcHMpOworCisJc2NhcmRfb3BzID0gaW50ZWxtYWRkYXRhLT5zc3RkcnZfb3BzLT5zY2FyZF9vcHM7CiAJLyogc2V0dXAgZGV2aWNlIHNlbGVjdCBhcyBkcm9wIGRvd24gY29udHJvbHMgd2l0aCBkaWZmZXJlbnQgdmFsdWVzICovCiAJaWYgKGtjb250cm9sLT5pZC5udW1pZCA9PSBPVVRQVVRfU0VMKQogCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IEFSUkFZX1NJWkUob3V0X25hbWVzX21mbGQpOwotCWVsc2UKKwllbHNlIGlmIChrY29udHJvbC0+aWQubnVtaWQgPT0gSU5QVVRfU0VMKQogCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IEFSUkFZX1NJWkUoaW5fbmFtZXNfbWZsZCk7CisJZWxzZSBpZiAoa2NvbnRyb2wtPmlkLm51bWlkID09IExJTkVPVVRfU0VMX01GTEQpIHsKKwkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSBBUlJBWV9TSVpFKGxpbmVfb3V0X25hbWVzX21mbGQpOworCQlzY2FyZF9vcHMtPmxpbmVfb3V0X25hbWVzX2NudCA9IHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zOworCX0gZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKIAl1aW5mby0+Y291bnQgPSBNT05PX0NOVEw7CiAJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CiAKQEAgLTE5NSwxMCArMjQwLDE2IEBACiAJCXN0cm5jcHkodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwKIAkJCW91dF9uYW1lc19tZmxkW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dLAogCQkJc2l6ZW9mKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUpLTEpOwotCWVsc2UKKwllbHNlIGlmIChrY29udHJvbC0+aWQubnVtaWQgPT0gSU5QVVRfU0VMKQogCQlzdHJuY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsCiAJCQlpbl9uYW1lc19tZmxkW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dLAogCQkJc2l6ZW9mKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUpLTEpOworCWVsc2UgaWYgKGtjb250cm9sLT5pZC5udW1pZCA9PSBMSU5FT1VUX1NFTF9NRkxEKQorCQlzdHJuY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsCisJCQlsaW5lX291dF9uYW1lc19tZmxkW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dLAorCQkJc2l6ZW9mKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUpLTEpOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0MSw2ICsyOTIsMTEgQEAKIAljYXNlIENBUFRVUkVfVk9MOgogCQljbnRsX2xpc3RbMF0gPSBQTUlDX1NORF9DQVBUVVJFX1ZPTDsKIAkJYnJlYWs7CisKKwljYXNlIE1BU1RFUl9WT0w6CisJCWNudGxfbGlzdFswXSA9IFBNSUNfU05EX1JJR0hUX01BU1RFUl9WT0w7CisJCWNudGxfbGlzdFsxXSA9IFBNSUNfU05EX0xFRlRfTUFTVEVSX1ZPTDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjUxLDcgKzMwNyw4IEBACiAJaWYgKHJldF92YWwpCiAJCXJldHVybiByZXRfdmFsOwogCi0JaWYgKGtjb250cm9sLT5pZC5udW1pZCA9PSBQTEFZQkFDS19WT0wpIHsKKwlpZiAoa2NvbnRyb2wtPmlkLm51bWlkID09IFBMQVlCQUNLX1ZPTCB8fAorCQlrY29udHJvbC0+aWQubnVtaWQgPT0gTUFTVEVSX1ZPTCkgewogCQlyZXRfdmFsID0gc2NhcmRfb3BzLT5nZXRfdm9sKGNudGxfbGlzdFsxXSwgJnZhbHVlKTsKIAkJdXZhbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSA9IHZhbHVlOwogCX0KQEAgLTM1OSw2ICs0MTYsMTIgQEAKIAljYXNlIENBUFRVUkVfVk9MOgogCQljbnRsX2xpc3RbMF0gPSBQTUlDX1NORF9DQVBUVVJFX1ZPTDsKIAkJYnJlYWs7CisKKwljYXNlIE1BU1RFUl9WT0w6CisJCWNudGxfbGlzdFswXSA9IFBNSUNfU05EX0xFRlRfTUFTVEVSX1ZPTDsKKwkJY250bF9saXN0WzFdID0gUE1JQ19TTkRfUklHSFRfTUFTVEVSX1ZPTDsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0zNjgsNyArNDMxLDggQEAKIAlpZiAocmV0X3ZhbCkKIAkJcmV0dXJuIHJldF92YWw7CiAKLQlpZiAoa2NvbnRyb2wtPmlkLm51bWlkID09IFBMQVlCQUNLX1ZPTCkKKwlpZiAoa2NvbnRyb2wtPmlkLm51bWlkID09IFBMQVlCQUNLX1ZPTCB8fAorCQlrY29udHJvbC0+aWQubnVtaWQgPT0gTUFTVEVSX1ZPTCkKIAkJcmV0X3ZhbCA9IHNjYXJkX29wcy0+c2V0X3ZvbChjbnRsX2xpc3RbMV0sCiAJCQkJdXZhbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSk7CiAJcmV0dXJuIHJldF92YWw7CkBAIC00NjQsMTQgKzUyOCwzNiBAQAogCVdBUk5fT04oIWtjb250cm9sKTsKIAogCWludGVsbWFkZGF0YSA9IGtjb250cm9sLT5wcml2YXRlX2RhdGE7CisJc2NhcmRfb3BzID0gaW50ZWxtYWRkYXRhLT5zc3RkcnZfb3BzLT5zY2FyZF9vcHM7CiAJaWYgKGludGVsbWFkZGF0YS0+Y3B1X2lkID09IENQVV9DSElQX1BFTldFTEwpIHsKLQkJc2NhcmRfb3BzID0gaW50ZWxtYWRkYXRhLT5zc3RkcnZfb3BzLT5zY2FyZF9vcHM7CiAJCWlmIChrY29udHJvbC0+aWQubnVtaWQgPT0gT1VUUFVUX1NFTCkKIAkJCXV2YWwtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9CiAJCQkJCXNjYXJkX29wcy0+b3V0cHV0X2Rldl9pZDsKIAkJZWxzZSBpZiAoa2NvbnRyb2wtPmlkLm51bWlkID09IElOUFVUX1NFTCkKIAkJCXV2YWwtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9CiAJCQkJCXNjYXJkX29wcy0+aW5wdXRfZGV2X2lkOworCQllbHNlIGlmIChrY29udHJvbC0+aWQubnVtaWQgPT0gTElORU9VVF9TRUxfTUZMRCkKKwkJCXV2YWwtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9CisJCQkJCXNjYXJkX29wcy0+bGluZW91dF9kZXZfaWQ7CisJCWVsc2UKKwkJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZSBpZiAoaW50ZWxtYWRkYXRhLT5jcHVfaWQgPT0gQ1BVX0NISVBfTElOQ1JPRlQpIHsKKwkJaWYgKGtjb250cm9sLT5pZC5udW1pZCA9PSBPVVRQVVRfU0VMKQorCQkJLyogVGhlcmUgaXMgYSBtaXNtYXRjaCBoZXJlLgorCQkJICogQUxTQSBleHBlY3RzIDEgZm9yIGludGVybmFsIHNwZWFrZXIuCisJCQkgKiBCdXQgaW50ZXJuYWxseSwgd2UgbWF5IGdpdmUgMiBmb3IgaW50ZXJuYWwgc3BlYWtlci4KKwkJCSAqLworCQkJaWYgKHNjYXJkX29wcy0+b3V0cHV0X2Rldl9pZCA9PSBNT05PX0VBUlBJRUNFIHx8CisJCQkgICAgc2NhcmRfb3BzLT5vdXRwdXRfZGV2X2lkID09IElOVEVSTkFMX1NQS1IpCisJCQkJdXZhbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gTU9OT19FQVJQSUVDRTsKKwkJCWVsc2UgaWYgKHNjYXJkX29wcy0+b3V0cHV0X2Rldl9pZCA9PSBTVEVSRU9fSEVBRFBIT05FKQorCQkJCXV2YWwtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9CisJCQkJCVNURVJFT19IRUFEUEhPTkU7CisJCQllbHNlCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCWVsc2UgaWYgKGtjb250cm9sLT5pZC5udW1pZCA9PSBJTlBVVF9TRUwpCisJCQl1dmFsLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPQorCQkJCQlzY2FyZF9vcHMtPmlucHV0X2Rldl9pZDsKIAkJZWxzZQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfSBlbHNlCkBAIC01MzQsNiArNjIwLDExIEBACiAJCQkJdXZhbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdKTsKIAkJaW50ZWxtYWRkYXRhLT5pbnB1dF9zZWwgPSB1dmFsLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07CiAJCWJyZWFrOworCWNhc2UgTElORU9VVF9TRUxfTUZMRDoKKwkJcmV0X3ZhbCA9IHNjYXJkX29wcy0+c2V0X2xpbmVvdXRfZGV2KAorCQkJCQl1dmFsLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0pOworCQlpbnRlbG1hZGRhdGEtPmxpbmVvdXRfc2VsID0gdXZhbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC01NDEsNiArNjMyLDE1MSBAQAogCXJldHVybiByZXRfdmFsOwogfQogCitzdGF0aWMgaW50IHNuZF9pbnRlbG1hZF9kZXZpY2VfZG1pY19nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnV2YWwpCit7CisJc3RydWN0IHNuZF9pbnRlbG1hZCAqaW50ZWxtYWRkYXRhOworCXN0cnVjdCBzbmRfcG1pY19vcHMgKnNjYXJkX29wczsKKworCVdBUk5fT04oIXV2YWwpOworCVdBUk5fT04oIWtjb250cm9sKTsKKworCWludGVsbWFkZGF0YSA9IGtjb250cm9sLT5wcml2YXRlX2RhdGE7CisJc2NhcmRfb3BzID0gaW50ZWxtYWRkYXRhLT5zc3RkcnZfb3BzLT5zY2FyZF9vcHM7CisKKwlpZiAoc2NhcmRfb3BzLT5pbnB1dF9kZXZfaWQgIT0gRE1JQykgeworCQlwcl9kZWJ1ZygiaW5wdXQgZGV2ID0gMHgleFxuIiwgc2NhcmRfb3BzLT5pbnB1dF9kZXZfaWQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoaW50ZWxtYWRkYXRhLT5jcHVfaWQgPT0gQ1BVX0NISVBfUEVOV0VMTCkKKwkJdXZhbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisJZWxzZQorCQlwcl9kZWJ1ZygiIENQVSBpZCA9IDB4JXhpcyBpbnZhbGlkLlxuIiwKKwkJCWludGVsbWFkZGF0YS0+Y3B1X2lkKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBtc2ljX3NldF9iaXQodTggaW5kZXgsIHVuc2lnbmVkIGludCAqYXZhaWxhYmxlX2RtaWNzKQoreworCSphdmFpbGFibGVfZG1pY3MgfD0gKDEgPDwgaW5kZXgpOworfQorCit2b2lkIG1zaWNfY2xlYXJfYml0KHU4IGluZGV4LCB1bnNpZ25lZCBpbnQgKmF2YWlsYWJsZV9kbWljcykKK3sKKwkqYXZhaWxhYmxlX2RtaWNzICY9IH4oMSA8PCBpbmRleCk7Cit9CisKK2ludCBtc2ljX2lzX3NldF9iaXQodTggaW5kZXgsIHVuc2lnbmVkIGludCAqYXZhaWxhYmxlX2RtaWNzKQoreworCWludCByZXRfdmFsOworCisJcmV0X3ZhbCA9ICgqYXZhaWxhYmxlX2RtaWNzICYgKDEgPDwgaW5kZXgpKTsKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworc3RhdGljIGludCBzbmRfaW50ZWxtYWRfZGV2aWNlX2RtaWNfc2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1dmFsKQoreworCXN0cnVjdCBzbmRfaW50ZWxtYWQgKmludGVsbWFkZGF0YTsKKwlzdHJ1Y3Qgc25kX3BtaWNfb3BzICpzY2FyZF9vcHM7CisJaW50IGksIGRtaWNfaW5kZXg7CisJdW5zaWduZWQgaW50IGF2YWlsYWJsZV9kbWljczsKKwlpbnQganVtcF9jb3VudDsKKwlpbnQgbWF4X2RtaWNzID0gQVJSQVlfU0laRShyb3V0ZXJfZG1pY3MpOworCisJV0FSTl9PTighdXZhbCk7CisJV0FSTl9PTigha2NvbnRyb2wpOworCisJaW50ZWxtYWRkYXRhID0ga2NvbnRyb2wtPnByaXZhdGVfZGF0YTsKKwlXQVJOX09OKCFpbnRlbG1hZGRhdGEtPnNzdGRydl9vcHMpOworCisJc2NhcmRfb3BzID0gaW50ZWxtYWRkYXRhLT5zc3RkcnZfb3BzLT5zY2FyZF9vcHM7CisJV0FSTl9PTighc2NhcmRfb3BzKTsKKworCWlmIChzY2FyZF9vcHMtPmlucHV0X2Rldl9pZCAhPSBETUlDKSB7CisJCXByX2RlYnVnKCJpbnB1dCBkZXYgPSAweCV4XG4iLCBzY2FyZF9vcHMtPmlucHV0X2Rldl9pZCk7CisJCXJldHVybiAwOworCX0KKworCWF2YWlsYWJsZV9kbWljcyA9IHNjYXJkX29wcy0+YXZhaWxhYmxlX2RtaWNzOworCisJaWYgKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4gdXZhbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdKSB7CisJCXByX2RlYnVnKCJqdW1wIGNvdW50IC0xLlxuIik7CisJCWp1bXBfY291bnQgPSAtMTsKKwl9IGVsc2UgeworCQlwcl9kZWJ1ZygianVtcCBjb3VudCAxLlxuIik7CisJCWp1bXBfY291bnQgPSAxOworCX0KKworCWRtaWNfaW5kZXggPSAgdXZhbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOworCXByX2RlYnVnKCJzZXQgZnVuY3Rpb24uIGRtaWNfaW5kZXggPSAlZCwgYXZsX2RtaWMgPSAweCV4XG4iLAorCQkJIGRtaWNfaW5kZXgsIGF2YWlsYWJsZV9kbWljcyk7CisJZm9yIChpID0gMDsgaSA8IG1heF9kbWljczsgaSsrKSB7CisJCXByX2RlYnVnKCJzZXQgZnVuY3Rpb24uIGxvb3AgaW5kZXggPSAweCV4LiAgZG1pY19pbmRleCA9IDB4JXhcbiIsCisJCQkgaSwgZG1pY19pbmRleCk7CisJCWlmICghbXNpY19pc19zZXRfYml0KGRtaWNfaW5kZXgsICZhdmFpbGFibGVfZG1pY3MpKSB7CisJCQltc2ljX2NsZWFyX2JpdChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSwKKwkJCQkJCSZhdmFpbGFibGVfZG1pY3MpOworCQkJbXNpY19zZXRfYml0KGRtaWNfaW5kZXgsICZhdmFpbGFibGVfZG1pY3MpOworCQkJa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPSBkbWljX2luZGV4OworCQkJc2NhcmRfb3BzLT5hdmFpbGFibGVfZG1pY3MgPSBhdmFpbGFibGVfZG1pY3M7CisJCQlzY2FyZF9vcHMtPmh3X2RtaWNfbWFwW2tjb250cm9sLT5pZC5udW1pZC1IV19DSF9CQVNFXSA9CisJCQkJa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisJCQlzY2FyZF9vcHMtPnNldF9od19kbWljX3JvdXRlCisJCQkJKGtjb250cm9sLT5pZC5udW1pZC1IV19DSF9CQVNFKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJZG1pY19pbmRleCArPSBqdW1wX2NvdW50OworCisJCWlmIChkbWljX2luZGV4ID4gKG1heF9kbWljcyAtIDEpICYmIGp1bXBfY291bnQgPT0gMSkgeworCQkJcHJfZGVidWcoIlJlc2V0dGluZ3RoZSBkbWljIGluZGV4IHRvIDAuXG4iKTsKKwkJCWRtaWNfaW5kZXggPSAwOworCQl9IGVsc2UgaWYgKGRtaWNfaW5kZXggPT0gLTEgJiYganVtcF9jb3VudCA9PSAtMSkgeworCQkJcHJfZGVidWcoIlJlc2V0dGluZyB0aGUgZG1pYyBpbmRleCB0byA1LlxuIik7CisJCQlkbWljX2luZGV4ID0gbWF4X2RtaWNzIC0gMTsKKwkJfQorCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHNuZF9pbnRlbG1hZF9kZXZpY2VfZG1pY19pbmZvX21mbGQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJc3RydWN0IHNuZF9pbnRlbG1hZCAqaW50ZWxtYWRkYXRhOworCXN0cnVjdCBzbmRfcG1pY19vcHMgKnNjYXJkX29wczsKKworCXVpbmZvLT5jb3VudCAgICAgICAgICAgICAgICAgID0gTU9OT19DTlRMOworCXVpbmZvLT50eXBlICAgICAgICAgICAgICAgICAgID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOworCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gQVJSQVlfU0laRShyb3V0ZXJfZG1pY3MpOworCisJaW50ZWxtYWRkYXRhID0ga2NvbnRyb2wtPnByaXZhdGVfZGF0YTsKKwlXQVJOX09OKCFpbnRlbG1hZGRhdGEtPnNzdGRydl9vcHMpOworCisJc2NhcmRfb3BzID0gaW50ZWxtYWRkYXRhLT5zc3RkcnZfb3BzLT5zY2FyZF9vcHM7CisJV0FSTl9PTighc2NhcmRfb3BzKTsKKworCWlmICh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID49IHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zKQorCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0KKwkJCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zIC0gMTsKKworCXN0cm5jcHkodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwKKwlyb3V0ZXJfZG1pY3NbdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0sCisJc2l6ZW9mKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUpLTEpOworCisKKwltc2ljX3NldF9iaXQoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUsICZzY2FyZF9vcHMtPmF2YWlsYWJsZV9kbWljcyk7CisJcHJfZGVidWcoImluZm8gZnVuY3Rpb24uIGF2bF9kbWljID0gMHgleCIsCisJCXNjYXJkX29wcy0+YXZhaWxhYmxlX2RtaWNzKTsKKworCXNjYXJkX29wcy0+aHdfZG1pY19tYXBba2NvbnRyb2wtPmlkLm51bWlkLUhXX0NIX0JBU0VdID0KKwkJa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisKKwlyZXR1cm4gMDsKK30KKwogc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2ludGVsbWFkX2NvbnRyb2xzX21yc3RbTUFYX0NUUkxdIF9fZGV2aW5pdGRhdGEgPSB7CiB7CiAJLmlmYWNlCQk9CVNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLApAQCAtNTk4LDYgKzgzNCwxNSBAQAogfSwKIHsKIAkuaWZhY2UJCT0JU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJLm5hbWUJCT0JIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLAorCS5hY2Nlc3MJCT0JU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSwKKwkuaW5mbwkJPQlzbmRfaW50ZWxtYWRfbWFzdGVyX3ZvbHVtZV9pbmZvLAorCS5nZXQJCT0Jc25kX2ludGVsbWFkX3ZvbHVtZV9nZXQsCisJLnB1dAkJPQlzbmRfaW50ZWxtYWRfdm9sdW1lX3NldCwKKwkucHJpdmF0ZV92YWx1ZQk9CTAsCit9LAoreworCS5pZmFjZQkJPQlTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkubmFtZQkJPQkiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCiAJLmFjY2VzcwkJPQlTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFLAogCS5pbmZvCQk9CXNuZF9pbnRlbG1hZF9tdXRlX2luZm8sCkBAIC02MjcsNSArODcyLDUwIEBACiAJLnB1dAkJPQlzbmRfaW50ZWxtYWRfZGV2aWNlX3NldCwKIAkucHJpdmF0ZV92YWx1ZQk9CTAsCiB9LAoreworCS5pZmFjZQkJPQlTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkubmFtZQkJPQkiTGluZSBvdXQiLAorCS5hY2Nlc3MJCT0JU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSwKKwkuaW5mbwkJPQlzbmRfaW50ZWxtYWRfZGV2aWNlX2luZm9fbWZsZCwKKwkuZ2V0CQk9CXNuZF9pbnRlbG1hZF9kZXZpY2VfZ2V0LAorCS5wdXQJCT0Jc25kX2ludGVsbWFkX2RldmljZV9zZXQsCisJLnByaXZhdGVfdmFsdWUJPQkwLAorfSwKK3sKKwkuaWZhY2UJCT0JU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJLm5hbWUJCT0JSFdfQ0hfMCwKKwkuYWNjZXNzCQk9CVNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUsCisJLmluZm8JCT0Jc25kX2ludGVsbWFkX2RldmljZV9kbWljX2luZm9fbWZsZCwKKwkuZ2V0CQk9CXNuZF9pbnRlbG1hZF9kZXZpY2VfZG1pY19nZXQsCisJLnB1dAkJPQlzbmRfaW50ZWxtYWRfZGV2aWNlX2RtaWNfc2V0LAorCS5wcml2YXRlX3ZhbHVlCT0JMAorfSwKK3sKKwkuaWZhY2UJCT0JU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJLm5hbWUJCT0JSFdfQ0hfMSwKKwkuYWNjZXNzCQk9CVNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUsCisJLmluZm8JCT0Jc25kX2ludGVsbWFkX2RldmljZV9kbWljX2luZm9fbWZsZCwKKwkuZ2V0CQk9CXNuZF9pbnRlbG1hZF9kZXZpY2VfZG1pY19nZXQsCisJLnB1dAkJPQlzbmRfaW50ZWxtYWRfZGV2aWNlX2RtaWNfc2V0LAorCS5wcml2YXRlX3ZhbHVlCT0JMQorfSwKK3sKKwkuaWZhY2UJCT0JU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJLm5hbWUJCT0JSFdfQ0hfMiwKKwkuYWNjZXNzCQk9CVNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUsCisJLmluZm8JCT0Jc25kX2ludGVsbWFkX2RldmljZV9kbWljX2luZm9fbWZsZCwKKwkuZ2V0CQk9CXNuZF9pbnRlbG1hZF9kZXZpY2VfZG1pY19nZXQsCisJLnB1dAkJPQlzbmRfaW50ZWxtYWRfZGV2aWNlX2RtaWNfc2V0LAorCS5wcml2YXRlX3ZhbHVlCT0JMgorfSwKK3sKKwkuaWZhY2UJCT0JU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJLm5hbWUJCT0JSFdfQ0hfMywKKwkuYWNjZXNzCQk9CVNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUsCisJLmluZm8JCT0Jc25kX2ludGVsbWFkX2RldmljZV9kbWljX2luZm9fbWZsZCwKKwkuZ2V0CQk9CXNuZF9pbnRlbG1hZF9kZXZpY2VfZG1pY19nZXQsCisJLnB1dAkJPQlzbmRfaW50ZWxtYWRfZGV2aWNlX2RtaWNfc2V0LAorCS5wcml2YXRlX3ZhbHVlCT0JMworfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZF9tc2ljX2NvbnRyb2wuYyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWRfbXNpY19jb250cm9sLmMKaW5kZXggZGEwOTNlZC4uNzBjZGIxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZF9tc2ljX2NvbnRyb2wuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkX21zaWNfY29udHJvbC5jCkBAIC0yOCw5ICsyOCwxNSBAQAogCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgogI2luY2x1ZGUgImludGVsX3NzdC5oIgotI2luY2x1ZGUgImludGVsX3NzdF9pb2N0bC5oIgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSAiaW50ZWxtaWRfc25kX2NvbnRyb2wuaCIKKyNpbmNsdWRlICJpbnRlbG1pZC5oIgorCisjZGVmaW5lIEFVRElPTVVYMTIgIDB4MjRjCisjZGVmaW5lIEFVRElPTVVYMzQgIDB4MjRkCiAKIHN0YXRpYyBpbnQgbXNpY19pbml0X2NhcmQodm9pZCkKIHsKQEAgLTU0LDExNiArNjAsMzU5IEBACiAJCS8qVEkgdmlicmEgdy9hIHNldHRpbmdzKi8KIAkJezB4Mzg0LCAweDgwLCAwfSwKIAkJezB4Mzg1LCAweDgwLCAwfSwKLQkJLyp2aWJyYSBzZXR0aW5ncyovCiAJCXsweDI2NywgMHgwMCwgMH0sCi0JCXsweDI2QSwgMHgxMCwgMH0sCiAJCXsweDI2MSwgMHgwMCwgMH0sCi0JCXsweDI2NCwgMHgxMCwgMH0sCiAJCS8qIHBjbSBwb3J0IHNldHRpbmcgKi8KIAkJezB4Mjc4LCAweDAwLCAwfSwKIAkJezB4MjdCLCAweDAxLCAwfSwKIAkJezB4MjdDLCAweDBhLCAwfSwKIAkJLyogU2V0IHZvbCBIU0xSVk9MQ1RSTCwgSUhGVk9MICovCi0JCXsweDI1OSwgMHgwNCwgMH0sCi0JCXsweDI1QSwgMHgwNCwgMH0sCi0JCXsweDI1QiwgMHgwNCwgMH0sCi0JCXsweDI1QywgMHgwNCwgMH0sCisJCXsweDI1OSwgMHgwOCwgMH0sCisJCXsweDI1QSwgMHgwOCwgMH0sCisJCXsweDI1QiwgMHgwOCwgMH0sCisJCXsweDI1QywgMHgwOCwgMH0sCiAJCS8qIEhTRVBSWENUUkwgIEVuYWJsZSB0aGUgaGVhZHNldCBsZWZ0IGFuZCByaWdodCBGSVIgZmlsdGVycyAgKi8KIAkJezB4MjUwLCAweDMwLCAwfSwKIAkJLyogSFNNSVhFUiAqLwogCQl7MHgyNTYsIDB4MTEsIDB9LAogCQkvKiBhbWljIGNvbmZpZ3VyYXRpb24gKi8KLQkJezB4MjQ5LCAweDA5LCAweDB9LAotCQl7MHgyNEEsIDB4MDksIDB4MH0sCisJCXsweDI0OSwgMHgwMSwgMHgwfSwKKwkJezB4MjRBLCAweDAxLCAweDB9LAogCQkvKiB1bm1hc2sgb2NhdWRpby9hY2NkZXQgaW50ZXJydXB0cyAqLwogCQl7MHgxZCwgMHgwMCwgMHgwMH0sCiAJCXsweDFlLCAweDAwLCAweDAwfSwKIAl9OwogCXNuZF9tc2ljX29wcy5jYXJkX3N0YXR1cyA9IFNORF9DQVJEX0lOSVRfRE9ORTsKLQlzc3Rfc2NfcmVnX2FjY2VzcyhzY19hY2Nlc3MsIFBNSUNfV1JJVEUsIDMwKTsKKwlzc3Rfc2NfcmVnX2FjY2VzcyhzY19hY2Nlc3MsIFBNSUNfV1JJVEUsIDI4KTsKIAlzbmRfbXNpY19vcHMucGJfb24gPSAwOworCXNuZF9tc2ljX29wcy5wYmhzX29uID0gMDsKIAlzbmRfbXNpY19vcHMuY2FwX29uID0gMDsKIAlzbmRfbXNpY19vcHMuaW5wdXRfZGV2X2lkID0gRE1JQzsgLypkZWYgZGV2Ki8KIAlzbmRfbXNpY19vcHMub3V0cHV0X2Rldl9pZCA9IFNURVJFT19IRUFEUEhPTkU7CisJc25kX21zaWNfb3BzLmphY2tfaW50ZXJydXB0X3N0YXR1cyA9IGZhbHNlOwogCXByX2RlYnVnKCJtc2ljIGluaXQgY29tcGxldGUhIVxuIik7CiAJcmV0dXJuIDA7CiB9CitzdGF0aWMgaW50IG1zaWNfbGluZV9vdXRfcmVzdG9yZSh1OCB2YWx1ZSkKK3sKKwlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBoc19kcnZfZW5bXSA9IHsKKwkJezB4MjVkLCAweDAzLCAweDAzfSwKKwl9OworCXN0cnVjdCBzY19yZWdfYWNjZXNzIGVwX2Rydl9lbltdID0geworCQl7MHgyNWQsIDB4NDAsIDB4NDB9LAorCX07CisJc3RydWN0IHNjX3JlZ19hY2Nlc3MgaWhmX2Rydl9lbltdID0geworCQl7MHgyNWQsIDB4MGMsIDB4MGN9LAorCX07CisJc3RydWN0IHNjX3JlZ19hY2Nlc3MgdmliMV9kcnZfZW5bXSA9IHsKKwkJezB4MjVkLCAweDEwLCAweDEwfSwKKwl9OworCXN0cnVjdCBzY19yZWdfYWNjZXNzIHZpYjJfZHJ2X2VuW10gPSB7CisJCXsweDI1ZCwgMHgyMCwgMHgyMH0sCisJfTsKKwlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBwbW9kZV9lbmFibGVbXSA9IHsKKwkJezB4MzgxLCAweDEwLCAweDEwfSwKKwl9OworCWludCByZXR2YWwgPSAwOworCisJcHJfZGVidWcoIm1zaWNfbGluZW91dF9yZXN0b3JlX2xpbmVvdXRfZGV2OiVkXG4iLCB2YWx1ZSk7CisKKwlzd2l0Y2ggKHZhbHVlKSB7CisJY2FzZSBIRUFEU0VUOgorCQlwcl9kZWJ1ZygiU2VsZWN0aW5nIExpbmVvdXQtSEVBRFNFVC1yZXN0b3JlXG4iKTsKKwkJaWYgKHNuZF9tc2ljX29wcy5vdXRwdXRfZGV2X2lkID09IFNURVJFT19IRUFEUEhPTkUpCisJCQlyZXR2YWwgPSBzc3Rfc2NfcmVnX2FjY2Vzcyhoc19kcnZfZW4sCisJCQkJCQkJUE1JQ19SRUFEX01PRElGWSwgMSk7CisJCWVsc2UKKwkJCXJldHZhbCA9IHNzdF9zY19yZWdfYWNjZXNzKGVwX2Rydl9lbiwKKwkJCQkJCQlQTUlDX1JFQURfTU9ESUZZLCAxKTsKKwkJYnJlYWs7CisJY2FzZSBJSEY6CisJCXByX2RlYnVnKCJTZWxlY3RpbmcgTGluZW91dC1JSEYtcmVzdG9yZVxuIik7CisJCXJldHZhbCA9IHNzdF9zY19yZWdfYWNjZXNzKGloZl9kcnZfZW4sIFBNSUNfUkVBRF9NT0RJRlksIDEpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwkJcmV0dmFsID0gc3N0X3NjX3JlZ19hY2Nlc3MocG1vZGVfZW5hYmxlLCBQTUlDX1JFQURfTU9ESUZZLCAxKTsKKwkJYnJlYWs7CisJY2FzZSBWSUJSQTE6CisJCXByX2RlYnVnKCJTZWxlY3RpbmcgTGluZW91dC1WaWJyYTEtcmVzdG9yZVxuIik7CisJCXJldHZhbCA9IHNzdF9zY19yZWdfYWNjZXNzKHZpYjFfZHJ2X2VuLCBQTUlDX1JFQURfTU9ESUZZLCAxKTsKKwkJYnJlYWs7CisJY2FzZSBWSUJSQTI6CisJCXByX2RlYnVnKCJTZWxlY3RpbmcgTGluZW91dC1WSUJSQTItcmVzdG9yZVxuIik7CisJCXJldHZhbCA9IHNzdF9zY19yZWdfYWNjZXNzKHZpYjJfZHJ2X2VuLCBQTUlDX1JFQURfTU9ESUZZLCAxKTsKKwkJYnJlYWs7CisJY2FzZSBOT05FOgorCQlwcl9kZWJ1ZygiU2VsZWN0aW5nIExpbmVvdXQtTk9ORS1yZXN0b3JlXG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiByZXR2YWw7Cit9CitzdGF0aWMgaW50IG1zaWNfZ2V0X2xpbmVvdXRfcHJ2c3RhdGUodm9pZCkKK3sKKwlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBoc19paGZfZHJ2WzJdID0geworCQl7MHgyNTcsIDB4MCwgMHgwfSwKKwkJezB4MjVkLCAweDAsIDB4MH0sCisJfTsKKwlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyB2aWIxZHJ2WzJdID0geworCQl7MHgyNjQsIDB4MCwgMHgwfSwKKwkJezB4MjVELCAweDAsIDB4MH0sCisJfTsKKwlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyB2aWIyZHJ2WzJdID0geworCQl7MHgyNkEsIDB4MCwgMHgwfSwKKwkJezB4MjVELCAweDAsIDB4MH0sCisJfTsKKwlpbnQgcmV0dmFsID0gMCwgZHJ2X2VuLCBkYWNfZW4sIGRldl9pZCwgbWFzazsKKwlmb3IgKGRldl9pZCA9IDA7IGRldl9pZCA8IHNuZF9tc2ljX29wcy5saW5lX291dF9uYW1lc19jbnQ7IGRldl9pZCsrKSB7CisJCXN3aXRjaCAoZGV2X2lkKSB7CisJCWNhc2UgSEVBRFNFVDoKKwkJCXByX2RlYnVnKCJtc2ljX2dldF9saW5lb3V0X3BydnNfc3RhdGU6IEhFQURTRVRcbiIpOworCQkJc3N0X3NjX3JlZ19hY2Nlc3MoaHNfaWhmX2RydiwgUE1JQ19SRUFELCAyKTsKKworCQkJbWFzayA9IChNQVNLMHxNQVNLMSk7CisJCQlkYWNfZW4gPSAoaHNfaWhmX2RydlswXS52YWx1ZSkgJiBtYXNrOworCisJCQltYXNrID0gKChNQVNLMHxNQVNLMSl8TUFTSzYpOworCQkJZHJ2X2VuID0gKGhzX2loZl9kcnZbMV0udmFsdWUpICYgbWFzazsKKworCQkJaWYgKGRhY19lbiAmJiAoIWRydl9lbikpIHsKKwkJCQlzbmRfbXNpY19vcHMucHJldl9saW5lb3V0X2Rldl9pZCA9IEhFQURTRVQ7CisJCQkJcmV0dXJuIHJldHZhbDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIElIRjoKKwkJCXByX2RlYnVnKCJtc2ljX2dldF9saW5lb3V0X3BydnN0YXRlOiBJSEZcbiIpOworCQkJc3N0X3NjX3JlZ19hY2Nlc3MoaHNfaWhmX2RydiwgUE1JQ19SRUFELCAyKTsKKworCQkJbWFzayA9IChNQVNLMiB8IE1BU0szKTsKKwkJCWRhY19lbiA9IChoc19paGZfZHJ2WzBdLnZhbHVlKSAmIG1hc2s7CisKKwkJCW1hc2sgPSAoTUFTSzIgfCBNQVNLMyk7CisJCQlkcnZfZW4gPSAoaHNfaWhmX2RydlsxXS52YWx1ZSkgJiBtYXNrOworCisJCQlpZiAoZGFjX2VuICYmICghZHJ2X2VuKSkgeworCQkJCXNuZF9tc2ljX29wcy5wcmV2X2xpbmVvdXRfZGV2X2lkID0gSUhGOworCQkJCXJldHVybiByZXR2YWw7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBWSUJSQTE6CisJCQlwcl9kZWJ1ZygibXNpY19nZXRfbGluZW91dF9wcnZzdGF0ZTogdmlicmExXG4iKTsKKwkJCXNzdF9zY19yZWdfYWNjZXNzKHZpYjFkcnYsIFBNSUNfUkVBRCwgMik7CisKKwkJCW1hc2sgPSBNQVNLMTsKKwkJCWRhY19lbiA9ICh2aWIxZHJ2WzBdLnZhbHVlKSAmIG1hc2s7CisKKwkJCW1hc2sgPSBNQVNLNDsKKwkJCWRydl9lbiA9ICh2aWIxZHJ2WzFdLnZhbHVlKSAmIG1hc2s7CisKKwkJCWlmIChkYWNfZW4gJiYgKCFkcnZfZW4pKSB7CisJCQkJc25kX21zaWNfb3BzLnByZXZfbGluZW91dF9kZXZfaWQgPSBWSUJSQTE7CisJCQkJcmV0dXJuIHJldHZhbDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFZJQlJBMjoKKwkJCXByX2RlYnVnKCJtc2ljX2dldF9saW5lb3V0X3BydnN0YXRlOiB2aWJyYTJcbiIpOworCQkJc3N0X3NjX3JlZ19hY2Nlc3ModmliMmRydiwgUE1JQ19SRUFELCAyKTsKKworCQkJbWFzayA9IE1BU0sxOworCQkJZGFjX2VuID0gKHZpYjJkcnZbMF0udmFsdWUpICYgbWFzazsKKworCQkJbWFzayA9IE1BU0s1OworCQkJZHJ2X2VuID0gKCh2aWIyZHJ2WzFdLnZhbHVlKSAmIG1hc2spOworCisJCQlpZiAoZGFjX2VuICYmICghZHJ2X2VuKSkgeworCQkJCXNuZF9tc2ljX29wcy5wcmV2X2xpbmVvdXRfZGV2X2lkID0gVklCUkEyOworCQkJCXJldHVybiByZXR2YWw7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBOT05FOgorCQkJcHJfZGVidWcoIm1zaWNfZ2V0X2xpbmVvdXRfcHJ2c3RhdGU6IE5PTkVcbiIpOworCQkJc25kX21zaWNfb3BzLnByZXZfbGluZW91dF9kZXZfaWQgPSBOT05FOworCQkJcmV0dXJuIHJldHZhbDsKKwkJZGVmYXVsdDoKKwkJCXByX2RlYnVnKCJJbnZhbGlkIGRldmljZSBpZFxuIik7CisJCQlzbmRfbXNpY19vcHMucHJldl9saW5lb3V0X2Rldl9pZCA9IE5PTkU7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwlyZXR1cm4gcmV0dmFsOworfQorc3RhdGljIGludCBtc2ljX3NldF9zZWxlY3RlZF9saW5lb3V0X2Rldih1OCB2YWx1ZSkKK3sKKwlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBsb3V0X2hzW10gPSB7CisJCXsweDI1ZSwgMHgzMywgMHhGRn0sCisJCXsweDI1ZCwgMHgwLCAweDQzfSwKKwl9OworCXN0cnVjdCBzY19yZWdfYWNjZXNzIGxvdXRfaWhmW10gPSB7CisJCXsweDI1ZSwgMHg1NSwgMHhmZn0sCisJCXsweDI1ZCwgMHgwLCAweDBjfSwKKwl9OworCXN0cnVjdCBzY19yZWdfYWNjZXNzIGxvdXRfdmlicmExW10gPSB7CisKKwkJezB4MjVlLCAweDYxLCAweGZmfSwKKwkJezB4MjVkLCAweDAsIDB4MTB9LAorCX07CisJc3RydWN0IHNjX3JlZ19hY2Nlc3MgbG91dF92aWJyYTJbXSA9IHsKKworCQl7MHgyNWUsIDB4MTYsIDB4ZmZ9LAorCQl7MHgyNWQsIDB4MCwgMHgyMH0sCisJfTsKKwlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBsb3V0X2RlZltdID0geworCQl7MHgyNWUsIDB4NjYsIDB4MH0sCisJfTsKKwlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBwbW9kZV9kaXNhYmxlW10gPSB7CisJCXsweDM4MSwgMHgwMCwgMHgxMH0sCisJfTsKKwlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBwbW9kZV9lbmFibGVbXSA9IHsKKwkJezB4MzgxLCAweDEwLCAweDEwfSwKKwl9OworCWludCByZXR2YWwgPSAwOworCisJcHJfZGVidWcoIm1zaWNfc2V0X3NlbGVjdGVkX2xpbmVvdXRfZGV2OiVkXG4iLCB2YWx1ZSk7CisJbXNpY19nZXRfbGluZW91dF9wcnZzdGF0ZSgpOworCW1zaWNfbGluZV9vdXRfcmVzdG9yZShzbmRfbXNpY19vcHMucHJldl9saW5lb3V0X2Rldl9pZCk7CisJc25kX21zaWNfb3BzLmxpbmVvdXRfZGV2X2lkID0gdmFsdWU7CisKKwlzd2l0Y2ggKHZhbHVlKSB7CisJY2FzZSBIRUFEU0VUOgorCQlwcl9kZWJ1ZygiU2VsZWN0aW5nIExpbmVvdXQtSEVBRFNFVFxuIik7CisJCWlmIChzbmRfbXNpY19vcHMucGJfb24pCisJCQlyZXR2YWwgPSBzc3Rfc2NfcmVnX2FjY2Vzcyhsb3V0X2hzLAorCQkJCQlQTUlDX1JFQURfTU9ESUZZLCAyKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJcmV0dXJuIHJldHZhbDsKKwkJCXJldHZhbCA9IHNzdF9zY19yZWdfYWNjZXNzKHBtb2RlX2Rpc2FibGUsCisJCQkJCVBNSUNfUkVBRF9NT0RJRlksIDEpOworCQlicmVhazsKKwljYXNlIElIRjoKKwkJcHJfZGVidWcoIlNlbGVjdGluZyBMaW5lb3V0LUlIRlxuIik7CisJCWlmIChzbmRfbXNpY19vcHMucGJfb24pCisJCQlyZXR2YWwgPSBzc3Rfc2NfcmVnX2FjY2Vzcyhsb3V0X2loZiwKKwkJCQkJCQlQTUlDX1JFQURfTU9ESUZZLCAyKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJcmV0dXJuIHJldHZhbDsKKwkJCXJldHZhbCA9IHNzdF9zY19yZWdfYWNjZXNzKHBtb2RlX2VuYWJsZSwKKwkJCQkJUE1JQ19SRUFEX01PRElGWSwgMSk7CisJCWJyZWFrOworCWNhc2UgVklCUkExOgorCQlwcl9kZWJ1ZygiU2VsZWN0aW5nIExpbmVvdXQtVmlicmExXG4iKTsKKwkJaWYgKHNuZF9tc2ljX29wcy5wYl9vbikKKwkJCXJldHZhbCA9IHNzdF9zY19yZWdfYWNjZXNzKGxvdXRfdmlicmExLAorCQkJCQkJCVBNSUNfUkVBRF9NT0RJRlksIDIpOworCQkJaWYgKHJldHZhbCkKKwkJCQlyZXR1cm4gcmV0dmFsOworCQkJcmV0dmFsID0gc3N0X3NjX3JlZ19hY2Nlc3MocG1vZGVfZGlzYWJsZSwKKwkJCQkJUE1JQ19SRUFEX01PRElGWSwgMSk7CisJCWJyZWFrOworCWNhc2UgVklCUkEyOgorCQlwcl9kZWJ1ZygiU2VsZWN0aW5nIExpbmVvdXQtVklCUkEyXG4iKTsKKwkJaWYgKHNuZF9tc2ljX29wcy5wYl9vbikKKwkJCXJldHZhbCA9IHNzdF9zY19yZWdfYWNjZXNzKGxvdXRfdmlicmEyLAorCQkJCQkJCVBNSUNfUkVBRF9NT0RJRlksIDIpOworCQkJaWYgKHJldHZhbCkKKwkJCQlyZXR1cm4gcmV0dmFsOworCQkJcmV0dmFsID0gc3N0X3NjX3JlZ19hY2Nlc3MocG1vZGVfZGlzYWJsZSwKKwkJCQkJUE1JQ19SRUFEX01PRElGWSwgMSk7CisJCWJyZWFrOworCWNhc2UgTk9ORToKKwkJcHJfZGVidWcoIlNlbGVjdGluZyBMaW5lb3V0LU5PTkVcbiIpOworCQkJcmV0dmFsID0gc3N0X3NjX3JlZ19hY2Nlc3MobG91dF9kZWYsCisJCQkJCQkJUE1JQ19XUklURSwgMSk7CisJCQlpZiAocmV0dmFsKQorCQkJCXJldHVybiByZXR2YWw7CisJCQlyZXR2YWwgPSBzc3Rfc2NfcmVnX2FjY2VzcyhwbW9kZV9kaXNhYmxlLAorCQkJCQlQTUlDX1JFQURfTU9ESUZZLCAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKIAogc3RhdGljIGludCBtc2ljX3Bvd2VyX3VwX3BiKHVuc2lnbmVkIGludCBkZXZpY2UpCiB7Ci0Jc3RydWN0IHNjX3JlZ19hY2Nlc3Mgc2NfYWNjZXNzMVtdID0geworCXN0cnVjdCBzY19yZWdfYWNjZXNzIHZhdWRbXSA9IHsKIAkJLyogdHVybiBvbiB0aGUgYXVkaW8gcG93ZXIgc3VwcGxpZXMgKi8KLQkJezB4MERCLCAweDA1LCAwfSwKKwkJezB4MERCLCAweDA3LCAwfSwKKwl9OworCXN0cnVjdCBzY19yZWdfYWNjZXNzIHBsbFtdID0geworCQkvKiB0dXJuIG9uIFBMTCAqLworCQl7MHgyNDAsIDB4MjAsIDB9LAorCX07CisJc3RydWN0IHNjX3JlZ19hY2Nlc3MgdmhzW10gPSB7CiAJCS8qICBWSFNQICovCi0JCXsweDBEQywgMHhGRiwgMH0sCisJCXsweDBEQywgMHgzRCwgMH0sCiAJCS8qICBWSFNOICovCiAJCXsweDBERCwgMHgzRiwgMH0sCi0JCS8qIHR1cm4gb24gUExMICovCi0JCXsweDI0MCwgMHgyMSwgMH0sCiAJfTsKLQlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBzY19hY2Nlc3MyW10gPSB7CisJc3RydWN0IHNjX3JlZ19hY2Nlc3MgaHNkYWNbXSA9IHsKKwkJezB4MzgyLCAweDQwLCAweDQwfSwKIAkJLyogIGRpc2FibGUgZHJpdmVyICovCiAJCXsweDI1RCwgMHgwLCAweDQzfSwKIAkJLyogREFDIENPTkZJRyA7IGJvdGggSFAsIExQIG9uICovCiAJCXsweDI1NywgMHgwMywgMHgwM30sCiAJfTsKLQlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBzY19hY2Nlc3MzW10gPSB7CisJc3RydWN0IHNjX3JlZ19hY2Nlc3MgaHNfZmlsdGVyW10gPSB7CiAJCS8qIEhTRVBSWENUUkwgIEVuYWJsZSB0aGUgaGVhZHNldCBsZWZ0IGFuZCByaWdodCBGSVIgZmlsdGVycyAgKi8KIAkJezB4MjUwLCAweDMwLCAwfSwKIAkJLyogSFNNSVhFUiAqLwogCQl7MHgyNTYsIDB4MTEsIDB9LAogCX07Ci0Jc3RydWN0IHNjX3JlZ19hY2Nlc3Mgc2NfYWNjZXNzNFtdID0geworCXN0cnVjdCBzY19yZWdfYWNjZXNzIGhzX2VuYWJsZVtdID0gewogCQkvKiBlbmFibGUgZHJpdmVyICovCiAJCXsweDI1RCwgMHgzLCAweDN9LAorCQl7MHgyNkMsIDB4MCwgMHgyfSwKIAkJLyogdW5tdXRlIHRoZSBoZWFkc2V0ICovCiAJCXsgMHgyNTksIDB4ODAsIDB4ODB9LAogCQl7IDB4MjVBLCAweDgwLCAweDgwfSwKIAl9OwotCXN0cnVjdCBzY19yZWdfYWNjZXNzIHNjX2FjY2Vzc192aWhmW10gPSB7CisJc3RydWN0IHNjX3JlZ19hY2Nlc3MgdmloZltdID0gewogCQkvKiAgVklIRiBPTiAqLwotCQl7MHgwQzksIDB4MkQsIDB4MDB9LAorCQl7MHgwQzksIDB4MjcsIDB4MDB9LAogCX07Ci0Jc3RydWN0IHNjX3JlZ19hY2Nlc3Mgc2NfYWNjZXNzMjJbXSA9IHsKKwlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBpaGZfZmlsdGVyW10gPSB7CiAJCS8qICBkaXNhYmxlIGRyaXZlciAqLwogCQl7MHgyNUQsIDB4MDAsIDB4MEN9LAogCQkvKkZpbGVyIERBQyBlbmFibGUqLwogCQl7MHgyNTEsIDB4MDMsIDB4MDN9LAogCQl7MHgyNTcsIDB4MEMsIDB4MEN9LAogCX07Ci0Jc3RydWN0IHNjX3JlZ19hY2Nlc3Mgc2NfYWNjZXNzMzJbXSA9IHsKKwlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBpaGZfZW5bXSA9IHsKIAkJLyplbmFibGUgZHJ2Ki8KIAkJezB4MjVELCAweDBDLCAweDBjfSwKIAl9OwotCXN0cnVjdCBzY19yZWdfYWNjZXNzIHNjX2FjY2VzczQyW10gPSB7CisJc3RydWN0IHNjX3JlZ19hY2Nlc3MgaWhmX3VubXV0ZVtdID0gewogCQkvKnVubXV0ZSBoZWFkc2V0Ki8KIAkJezB4MjVCLCAweDgwLCAweDgwfSwKIAkJezB4MjVDLCAweDgwLCAweDgwfSwKIAl9OwotCXN0cnVjdCBzY19yZWdfYWNjZXNzIHNjX2FjY2VzczIzW10gPSB7CisJc3RydWN0IHNjX3JlZ19hY2Nlc3MgZXBkYWNbXSA9IHsKIAkJLyogIGRpc2FibGUgZHJpdmVyICovCiAJCXsweDI1RCwgMHgwLCAweDQzfSwKIAkJLyogREFDIENPTkZJRyA7IGJvdGggSFAsIExQIG9uICovCiAJCXsweDI1NywgMHgwMywgMHgwM30sCiAJfTsKLQlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBzY19hY2Nlc3M0M1tdID0geworCXN0cnVjdCBzY19yZWdfYWNjZXNzIGVwX2VuYWJsZVtdID0gewogCQkvKiBlbmFibGUgZHJpdmVyICovCiAJCXsweDI1RCwgMHg0MCwgMHg0MH0sCiAJCS8qIHVubXV0ZSB0aGUgaGVhZHNldCAqLwogCQl7IDB4MjU5LCAweDgwLCAweDgwfSwKIAkJeyAweDI1QSwgMHg4MCwgMHg4MH0sCiAJfTsKLQlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBzY19hY2Nlc3NfdmliW10gPSB7CisJc3RydWN0IHNjX3JlZ19hY2Nlc3MgdmliMV9lbltdID0gewogCQkvKiBlbmFibGUgZHJpdmVyLCBBREMgKi8KIAkJezB4MjVELCAweDEwLCAweDEwfSwKLQkJezB4MjY0LCAweDAyLCAweDAyfSwKKwkJezB4MjY0LCAweDAyLCAweDgyfSwKIAl9OwotCXN0cnVjdCBzY19yZWdfYWNjZXNzIHNjX2FjY2Vzc19oYXBbXSA9IHsKKwlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyB2aWIyX2VuW10gPSB7CiAJCS8qIGVuYWJsZSBkcml2ZXIsIEFEQyAqLwogCQl7MHgyNUQsIDB4MjAsIDB4MjB9LAotCQl7MHgyNkEsIDB4MDIsIDB4MDJ9LAorCQl7MHgyNkEsIDB4MDIsIDB4ODJ9LAogCX07Ci0Jc3RydWN0IHNjX3JlZ19hY2Nlc3Mgc2NfYWNjZXNzX3BjbTJbXSA9IHsKKwlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBwY20yX2VuW10gPSB7CiAJCS8qIGVuYWJsZSBwY20gMiAqLwogCQl7MHgyN0MsIDB4MSwgMHgxfSwKIAl9OwpAQCAtMTc2LDg5ICs0MjUsOTUgQEAKIAl9CiAKIAlwcl9kZWJ1ZygicG93ZXJpbmcgdXAgcGIuLi4uIERldmljZSAlZFxuIiwgZGV2aWNlKTsKLQlzc3Rfc2NfcmVnX2FjY2VzcyhzY19hY2Nlc3MxLCBQTUlDX1dSSVRFLCA0KTsKKwlzc3Rfc2NfcmVnX2FjY2Vzcyh2YXVkLCBQTUlDX1dSSVRFLCAxKTsKKwltc2xlZXAoMSk7CisJc3N0X3NjX3JlZ19hY2Nlc3MocGxsLCBQTUlDX1dSSVRFLCAxKTsKKwltc2xlZXAoMSk7CiAJc3dpdGNoIChkZXZpY2UpIHsKIAljYXNlIFNORF9TU1RfREVWSUNFX0hFQURTRVQ6Ci0JCWlmIChzbmRfbXNpY19vcHMub3V0cHV0X2Rldl9pZCA9PSBTVEVSRU9fSEVBRFBIT05FKSB7Ci0JCQlzc3Rfc2NfcmVnX2FjY2VzcyhzY19hY2Nlc3MyLCBQTUlDX1JFQURfTU9ESUZZLCAyKTsKLQkJCXNzdF9zY19yZWdfYWNjZXNzKHNjX2FjY2VzczMsIFBNSUNfV1JJVEUsIDIpOwotCQkJc3N0X3NjX3JlZ19hY2Nlc3Moc2NfYWNjZXNzNCwgUE1JQ19SRUFEX01PRElGWSwgMyk7Ci0JCX0gZWxzZSB7Ci0JCQlzc3Rfc2NfcmVnX2FjY2VzcyhzY19hY2Nlc3MyMywgUE1JQ19SRUFEX01PRElGWSwgMik7Ci0JCQlzc3Rfc2NfcmVnX2FjY2VzcyhzY19hY2Nlc3MzLCBQTUlDX1dSSVRFLCAyKTsKLQkJCXNzdF9zY19yZWdfYWNjZXNzKHNjX2FjY2VzczQzLCBQTUlDX1JFQURfTU9ESUZZLCAzKTsKLQkJfQogCQlzbmRfbXNpY19vcHMucGJfb24gPSAxOworCQlzbmRfbXNpY19vcHMucGJoc19vbiA9IDE7CisJCWlmIChzbmRfbXNpY19vcHMub3V0cHV0X2Rldl9pZCA9PSBTVEVSRU9fSEVBRFBIT05FKSB7CisJCQlzc3Rfc2NfcmVnX2FjY2Vzcyh2aHMsIFBNSUNfV1JJVEUsIDIpOworCQkJc3N0X3NjX3JlZ19hY2Nlc3MoaHNkYWMsIFBNSUNfUkVBRF9NT0RJRlksIDMpOworCQkJc3N0X3NjX3JlZ19hY2Nlc3MoaHNfZmlsdGVyLCBQTUlDX1dSSVRFLCAyKTsKKwkJCXNzdF9zY19yZWdfYWNjZXNzKGhzX2VuYWJsZSwgUE1JQ19SRUFEX01PRElGWSwgNCk7CisJCX0gZWxzZSB7CisJCQlzc3Rfc2NfcmVnX2FjY2VzcyhlcGRhYywgUE1JQ19SRUFEX01PRElGWSwgMik7CisJCQlzc3Rfc2NfcmVnX2FjY2Vzcyhoc19maWx0ZXIsIFBNSUNfV1JJVEUsIDIpOworCQkJc3N0X3NjX3JlZ19hY2Nlc3MoZXBfZW5hYmxlLCBQTUlDX1JFQURfTU9ESUZZLCAzKTsKKwkJfQorCQlpZiAoc25kX21zaWNfb3BzLmxpbmVvdXRfZGV2X2lkID09IEhFQURTRVQpCisJCQltc2ljX3NldF9zZWxlY3RlZF9saW5lb3V0X2RldihIRUFEU0VUKTsKIAkJYnJlYWs7Ci0KIAljYXNlIFNORF9TU1RfREVWSUNFX0lIRjoKLQkJc3N0X3NjX3JlZ19hY2Nlc3Moc2NfYWNjZXNzX3ZpaGYsIFBNSUNfV1JJVEUsIDEpOwotCQlzc3Rfc2NfcmVnX2FjY2VzcyhzY19hY2Nlc3MyMiwgUE1JQ19SRUFEX01PRElGWSwgMyk7Ci0JCXNzdF9zY19yZWdfYWNjZXNzKHNjX2FjY2VzczMyLCBQTUlDX1JFQURfTU9ESUZZLCAxKTsKLQkJc3N0X3NjX3JlZ19hY2Nlc3Moc2NfYWNjZXNzNDIsIFBNSUNfUkVBRF9NT0RJRlksIDIpOworCQlzbmRfbXNpY19vcHMucGJfb24gPSAxOworCQlzc3Rfc2NfcmVnX2FjY2Vzcyh2aWhmLCBQTUlDX1dSSVRFLCAxKTsKKwkJc3N0X3NjX3JlZ19hY2Nlc3MoaWhmX2ZpbHRlciwgUE1JQ19SRUFEX01PRElGWSwgMyk7CisJCXNzdF9zY19yZWdfYWNjZXNzKGloZl9lbiwgUE1JQ19SRUFEX01PRElGWSwgMSk7CisJCXNzdF9zY19yZWdfYWNjZXNzKGloZl91bm11dGUsIFBNSUNfUkVBRF9NT0RJRlksIDIpOworCQlpZiAoc25kX21zaWNfb3BzLmxpbmVvdXRfZGV2X2lkID09IElIRikKKwkJCW1zaWNfc2V0X3NlbGVjdGVkX2xpbmVvdXRfZGV2KElIRik7CiAJCWJyZWFrOwogCiAJY2FzZSBTTkRfU1NUX0RFVklDRV9WSUJSQToKLQkJc3N0X3NjX3JlZ19hY2Nlc3Moc2NfYWNjZXNzX3ZpYiwgUE1JQ19SRUFEX01PRElGWSwgMik7CisJCXNuZF9tc2ljX29wcy5wYl9vbiA9IDE7CisJCXNzdF9zY19yZWdfYWNjZXNzKHZpYjFfZW4sIFBNSUNfUkVBRF9NT0RJRlksIDIpOworCQlpZiAoc25kX21zaWNfb3BzLmxpbmVvdXRfZGV2X2lkID09IFZJQlJBMSkKKwkJCW1zaWNfc2V0X3NlbGVjdGVkX2xpbmVvdXRfZGV2KFZJQlJBMSk7CiAJCWJyZWFrOwogCiAJY2FzZSBTTkRfU1NUX0RFVklDRV9IQVBUSUM6Ci0JCXNzdF9zY19yZWdfYWNjZXNzKHNjX2FjY2Vzc19oYXAsIFBNSUNfUkVBRF9NT0RJRlksIDIpOworCQlzbmRfbXNpY19vcHMucGJfb24gPSAxOworCQlzc3Rfc2NfcmVnX2FjY2Vzcyh2aWIyX2VuLCBQTUlDX1JFQURfTU9ESUZZLCAyKTsKKwkJaWYgKHNuZF9tc2ljX29wcy5saW5lb3V0X2Rldl9pZCA9PSBWSUJSQTIpCisJCQltc2ljX3NldF9zZWxlY3RlZF9saW5lb3V0X2RldihWSUJSQTIpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CiAJCXByX3dhcm4oIldyb25nIERldmljZSAlZCwgc2VsZWN0ZWQgJWRcbiIsCiAJCQkgICAgICAgZGV2aWNlLCBzbmRfbXNpY19vcHMub3V0cHV0X2Rldl9pZCk7CiAJfQotCXJldHVybiBzc3Rfc2NfcmVnX2FjY2VzcyhzY19hY2Nlc3NfcGNtMiwgUE1JQ19SRUFEX01PRElGWSwgMSk7CisJcmV0dXJuIHNzdF9zY19yZWdfYWNjZXNzKHBjbTJfZW4sIFBNSUNfUkVBRF9NT0RJRlksIDEpOwogfQogCiBzdGF0aWMgaW50IG1zaWNfcG93ZXJfdXBfY3AodW5zaWduZWQgaW50IGRldmljZSkKIHsKLQlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBzY19hY2Nlc3NbXSA9IHsKKwlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyB2YXVkW10gPSB7CiAJCS8qIHR1cm4gb24gdGhlIGF1ZGlvIHBvd2VyIHN1cHBsaWVzICovCi0JCXsweDBEQiwgMHgwNSwgMH0sCi0JCS8qICBWSFNQICovCi0JCXsweDBEQywgMHhGRiwgMH0sCi0JCS8qICBWSFNOICovCi0JCXsweDBERCwgMHgzRiwgMH0sCi0JCS8qIHR1cm4gb24gUExMICovCi0JCXsweDI0MCwgMHgyMSwgMH0sCi0KLQkJLyogIFR1cm4gb24gRE1JQyBzdXBwbHkgICovCi0JCXsweDI0NywgMHhBMCwgMHgwfSwKLQkJezB4MjQwLCAweDIxLCAweDB9LAotCQl7MHgyNEMsIDB4MTAsIDB4MH0sCi0KLQkJLyogbWljIGRlbXV4IGVuYWJsZSAqLwotCQl7MHgyNDUsIDB4M0YsIDB4MH0sCi0JCXsweDI0NiwgMHg3LCAweDB9LAotCisJCXsweDBEQiwgMHgwNywgMH0sCiAJfTsKLQlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBzY19hY2Nlc3NfYW1pY1tdID0gewotCQkvKiB0dXJuIG9uIHRoZSBhdWRpbyBwb3dlciBzdXBwbGllcyAqLwotCQl7MHgwREIsIDB4MDUsIDB9LAotCQkvKiAgVkhTUCAqLwotCQl7MHgwREMsIDB4RkYsIDB9LAotCQkvKiAgVkhTTiAqLwotCQl7MHgwREQsIDB4M0YsIDB9LAorCXN0cnVjdCBzY19yZWdfYWNjZXNzIHBsbFtdID0gewogCQkvKiB0dXJuIG9uIFBMTCAqLwotCQl7MHgyNDAsIDB4MjEsIDB9LAotCQkvKkFEQyBFTiovCi0JCXsweDI0OCwgMHgwNSwgMHgwfSwKLQkJezB4MjRDLCAweDc2LCAweDB9LAotCQkvKk1JQyBFTiovCi0JCXsweDI0OSwgMHgwOSwgMHgwfSwKLQkJezB4MjRBLCAweDA5LCAweDB9LAorCQl7MHgyNDAsIDB4MjAsIDB9LAorCX07CisJc3RydWN0IHNjX3JlZ19hY2Nlc3MgZG1pY19iaWFzW10gPSB7CiAJCS8qICBUdXJuIG9uIEFNSUMgc3VwcGx5ICAqLwotCQl7MHgyNDcsIDB4RkMsIDB4MH0sCisJCXsweDI0NywgMHhBMCwgMHhBMH0sCisJfTsKKwlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBkbWljW10gPSB7CisJCS8qIG1pYyBkZW11eCBlbmFibGUgKi8KKwkJezB4MjQ1LCAweDNGLCAweDNGfSwKKwkJezB4MjQ2LCAweDA3LCAweDA3fSwKIAogCX07Ci0Jc3RydWN0IHNjX3JlZ19hY2Nlc3Mgc2NfYWNjZXNzMltdID0geworCXN0cnVjdCBzY19yZWdfYWNjZXNzIGFtaWNfYmlhc1tdID0geworCQkvKiAgVHVybiBvbiBBTUlDIHN1cHBseSAgKi8KKwkJezB4MjQ3LCAweEZDLCAweEZDfSwKKwl9OworCXN0cnVjdCBzY19yZWdfYWNjZXNzIGFtaWNbXSA9IHsKKwkJLypNSUMgRU4qLworCQl7MHgyNDksIDB4MDEsIDB4MDF9LAorCQl7MHgyNEEsIDB4MDEsIDB4MDF9LAorCQkvKkFEQyBFTiovCisJCXsweDI0OCwgMHgwNSwgMHgwRn0sCisKKwl9OworCXN0cnVjdCBzY19yZWdfYWNjZXNzIHBjbTJbXSA9IHsKIAkJLyogZW5hYmxlIHBjbSAyICovCiAJCXsweDI3QywgMHgxLCAweDF9LAogCX07Ci0Jc3RydWN0IHNjX3JlZ19hY2Nlc3Mgc2NfYWNjZXNzM1tdID0geworCXN0cnVjdCBzY19yZWdfYWNjZXNzIHR4X29uW10gPSB7CiAJCS8qd2FpdCBmb3IgbWljIHRvIHN0YWJhbGl6ZSBiZWZvcmUgdHVybmluZyBvbiBhdWRpbyBjaGFubmVscyovCiAJCXsweDI0RiwgMHgzQywgMHgwfSwKIAl9OwpAQCAtMjcxLDQyICs1MjYsMTYxIEBACiAJfQogCiAJcHJfZGVidWcoInBvd2VyaW5nIHVwIGNwLi4uLiVkXG4iLCBzbmRfbXNpY19vcHMuaW5wdXRfZGV2X2lkKTsKLQlzc3Rfc2NfcmVnX2FjY2VzcyhzY19hY2Nlc3MyLCBQTUlDX1JFQURfTU9ESUZZLCAxKTsKKwlzc3Rfc2NfcmVnX2FjY2Vzcyh2YXVkLCBQTUlDX1dSSVRFLCAxKTsKKwltc2xlZXAoNTAwKTsvKkZJWE1FIG5lZWQgb3B0aW16ZWQgdmFsdWUgaGVyZSovCisJc3N0X3NjX3JlZ19hY2Nlc3MocGxsLCBQTUlDX1dSSVRFLCAxKTsKKwltc2xlZXAoMSk7CiAJc25kX21zaWNfb3BzLmNhcF9vbiA9IDE7Ci0JaWYgKHNuZF9tc2ljX29wcy5pbnB1dF9kZXZfaWQgPT0gQU1JQykKLQkJc3N0X3NjX3JlZ19hY2Nlc3Moc2NfYWNjZXNzX2FtaWMsIFBNSUNfV1JJVEUsIDkpOwotCWVsc2UKLQkJc3N0X3NjX3JlZ19hY2Nlc3Moc2NfYWNjZXNzLCBQTUlDX1dSSVRFLCA5KTsKLQlyZXR1cm4gc3N0X3NjX3JlZ19hY2Nlc3Moc2NfYWNjZXNzMywgUE1JQ19XUklURSwgMSk7Ci0KKwlpZiAoc25kX21zaWNfb3BzLmlucHV0X2Rldl9pZCA9PSBBTUlDKSB7CisJCXNzdF9zY19yZWdfYWNjZXNzKGFtaWNfYmlhcywgUE1JQ19SRUFEX01PRElGWSwgMSk7CisJCW1zbGVlcCgxKTsKKwkJc3N0X3NjX3JlZ19hY2Nlc3MoYW1pYywgUE1JQ19SRUFEX01PRElGWSwgMyk7CisJfSBlbHNlIHsKKwkJc3N0X3NjX3JlZ19hY2Nlc3MoZG1pY19iaWFzLCBQTUlDX1JFQURfTU9ESUZZLCAxKTsKKwkJbXNsZWVwKDEpOworCQlzc3Rfc2NfcmVnX2FjY2VzcyhkbWljLCBQTUlDX1JFQURfTU9ESUZZLCAyKTsKKwl9CisJbXNsZWVwKDEpOworCXNzdF9zY19yZWdfYWNjZXNzKHR4X29uLCBQTUlDX1dSSVRFLCAxKTsKKwlyZXR1cm4gc3N0X3NjX3JlZ19hY2Nlc3MocGNtMiwgUE1JQ19SRUFEX01PRElGWSwgMSk7CiB9CiAKIHN0YXRpYyBpbnQgbXNpY19wb3dlcl9kb3duKHZvaWQpCiB7Ci0JaW50IHJldHZhbCA9IDA7CisJc3RydWN0IHNjX3JlZ19hY2Nlc3MgcG93ZXJfZG5bXSA9IHsKKwkJLyogIFZIU1AgKi8KKwkJezB4MERDLCAweEM0LCAwfSwKKwkJLyogIFZIU04gKi8KKwkJezB4MERELCAweDA0LCAwfSwKKwkJLyogIFZJSEYgKi8KKwkJezB4MEM5LCAweDI0LCAwfSwKKwl9OworCXN0cnVjdCBzY19yZWdfYWNjZXNzIHBsbFtdID0geworCQkvKiB0dXJuIG9mZiBQTEwqLworCQl7MHgyNDAsIDB4MDAsIDB4MH0sCisJfTsKKwlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyB2YXVkW10gPSB7CisJCS8qIHR1cm4gb2ZmIFZBVUQqLworCQl7MHgwREIsIDB4MDQsIDB9LAorCX07CiAKIAlwcl9kZWJ1ZygicG93ZXJpbmcgZG4gbXNpY1xuIik7CisJc25kX21zaWNfb3BzLnBiaHNfb24gPSAwOwogCXNuZF9tc2ljX29wcy5wYl9vbiA9IDA7CiAJc25kX21zaWNfb3BzLmNhcF9vbiA9IDA7Ci0JcmV0dXJuIHJldHZhbDsKKwlzc3Rfc2NfcmVnX2FjY2Vzcyhwb3dlcl9kbiwgUE1JQ19XUklURSwgMyk7CisJbXNsZWVwKDEpOworCXNzdF9zY19yZWdfYWNjZXNzKHBsbCwgUE1JQ19XUklURSwgMSk7CisJbXNsZWVwKDEpOworCXNzdF9zY19yZWdfYWNjZXNzKHZhdWQsIFBNSUNfV1JJVEUsIDEpOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1zaWNfcG93ZXJfZG93bl9wYih2b2lkKQorc3RhdGljIGludCBtc2ljX3Bvd2VyX2Rvd25fcGIodW5zaWduZWQgaW50IGRldmljZSkKIHsKLQlpbnQgcmV0dmFsID0gMDsKKwlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBkcnZfZW5hYmxlW10gPSB7CisJCXsweDI1RCwgMHgwMCwgMHgwMH0sCisJfTsKKwlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBoc19tdXRlW10gPSB7CisJCXsweDI1OSwgMHg4MCwgMHg4MH0sCisJCXsweDI1QSwgMHg4MCwgMHg4MH0sCisJCXsweDI2QywgMHgwMiwgMHgwMn0sCisJfTsKKwlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBoc19vZmZbXSA9IHsKKwkJezB4MjU3LCAweDAwLCAweDAzfSwKKwkJezB4MjUwLCAweDAwLCAweDMwfSwKKwkJezB4MzgyLCAweDAwLCAweDQwfSwKKwl9OworCXN0cnVjdCBzY19yZWdfYWNjZXNzIGloZl9tdXRlW10gPSB7CisJCXsweDI1QiwgMHg4MCwgMHg4MH0sCisJCXsweDI1QywgMHg4MCwgMHg4MH0sCisJfTsKKwlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBpaGZfb2ZmW10gPSB7CisJCXsweDI1NywgMHgwMCwgMHgwQ30sCisJCXsweDI1MSwgMHgwMCwgMHgwM30sCisJfTsKKwlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyB2aWIxX29mZltdID0geworCQl7MHgyNjQsIDB4MDAsIDB4ODJ9LAorCX07CisJc3RydWN0IHNjX3JlZ19hY2Nlc3MgdmliMl9vZmZbXSA9IHsKKwkJezB4MjZBLCAweDAwLCAweDgyfSwKKwl9OworCXN0cnVjdCBzY19yZWdfYWNjZXNzIGxvdXRfb2ZmW10gPSB7CisJCXsweDI1ZSwgMHg2NiwgMHgwMH0sCisJfTsKKwlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBwbW9kZV9kaXNhYmxlW10gPSB7CisJCXsweDM4MSwgMHgwMCwgMHgxMH0sCisJfTsKIAotCXByX2RlYnVnKCJwb3dlcmluZyBkbiBwYi4uLi5cbiIpOwotCXNuZF9tc2ljX29wcy5wYl9vbiA9IDA7Ci0JcmV0dXJuIHJldHZhbDsKKworCisJcHJfZGVidWcoInBvd2VyaW5nIGRuIHBiIGZvciBkZXZpY2UgJWRcbiIsIGRldmljZSk7CisJc3dpdGNoIChkZXZpY2UpIHsKKwljYXNlIFNORF9TU1RfREVWSUNFX0hFQURTRVQ6CisJCXNuZF9tc2ljX29wcy5wYmhzX29uID0gMDsKKwkJc3N0X3NjX3JlZ19hY2Nlc3MoaHNfbXV0ZSwgUE1JQ19SRUFEX01PRElGWSwgMyk7CisJCWRydl9lbmFibGVbMF0ubWFzayA9IDB4NDM7CisJCXNzdF9zY19yZWdfYWNjZXNzKGRydl9lbmFibGUsIFBNSUNfUkVBRF9NT0RJRlksIDEpOworCQlzc3Rfc2NfcmVnX2FjY2Vzcyhoc19vZmYsIFBNSUNfUkVBRF9NT0RJRlksIDMpOworCQlpZiAoc25kX21zaWNfb3BzLmxpbmVvdXRfZGV2X2lkID09IEhFQURTRVQpCisJCQlzc3Rfc2NfcmVnX2FjY2Vzcyhsb3V0X29mZiwgUE1JQ19XUklURSwgMSk7CisJCWJyZWFrOworCisJY2FzZSBTTkRfU1NUX0RFVklDRV9JSEY6CisJCXNzdF9zY19yZWdfYWNjZXNzKGloZl9tdXRlLCBQTUlDX1JFQURfTU9ESUZZLCAyKTsKKwkJZHJ2X2VuYWJsZVswXS5tYXNrID0gMHgwQzsKKwkJc3N0X3NjX3JlZ19hY2Nlc3MoZHJ2X2VuYWJsZSwgUE1JQ19SRUFEX01PRElGWSwgMSk7CisJCXNzdF9zY19yZWdfYWNjZXNzKGloZl9vZmYsIFBNSUNfUkVBRF9NT0RJRlksIDIpOworCQlpZiAoc25kX21zaWNfb3BzLmxpbmVvdXRfZGV2X2lkID09IElIRikgeworCQkJc3N0X3NjX3JlZ19hY2Nlc3MobG91dF9vZmYsIFBNSUNfV1JJVEUsIDEpOworCQkJc3N0X3NjX3JlZ19hY2Nlc3MocG1vZGVfZGlzYWJsZSwgUE1JQ19SRUFEX01PRElGWSwgMSk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFNORF9TU1RfREVWSUNFX1ZJQlJBOgorCQlzc3Rfc2NfcmVnX2FjY2Vzcyh2aWIxX29mZiwgUE1JQ19SRUFEX01PRElGWSwgMSk7CisJCWRydl9lbmFibGVbMF0ubWFzayA9IDB4MTA7CisJCXNzdF9zY19yZWdfYWNjZXNzKGRydl9lbmFibGUsIFBNSUNfUkVBRF9NT0RJRlksIDEpOworCQlpZiAoc25kX21zaWNfb3BzLmxpbmVvdXRfZGV2X2lkID09IFZJQlJBMSkKKwkJCXNzdF9zY19yZWdfYWNjZXNzKGxvdXRfb2ZmLCBQTUlDX1dSSVRFLCAxKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TU1RfREVWSUNFX0hBUFRJQzoKKwkJc3N0X3NjX3JlZ19hY2Nlc3ModmliMl9vZmYsIFBNSUNfUkVBRF9NT0RJRlksIDEpOworCQlkcnZfZW5hYmxlWzBdLm1hc2sgPSAweDIwOworCQlzc3Rfc2NfcmVnX2FjY2VzcyhkcnZfZW5hYmxlLCBQTUlDX1JFQURfTU9ESUZZLCAxKTsKKwkJaWYgKHNuZF9tc2ljX29wcy5saW5lb3V0X2Rldl9pZCA9PSBWSUJSQTIpCisJCQlzc3Rfc2NfcmVnX2FjY2Vzcyhsb3V0X29mZiwgUE1JQ19XUklURSwgMSk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtc2ljX3Bvd2VyX2Rvd25fY3Aodm9pZCkKK3N0YXRpYyBpbnQgbXNpY19wb3dlcl9kb3duX2NwKHVuc2lnbmVkIGludCBkZXZpY2UpCiB7Ci0JaW50IHJldHZhbCA9IDA7CisJc3RydWN0IHNjX3JlZ19hY2Nlc3MgZG1pY1tdID0geworCQl7MHgyNDcsIDB4MDAsIDB4QTB9LAorCQl7MHgyNDUsIDB4MDAsIDB4Mzh9LAorCQl7MHgyNDYsIDB4MDAsIDB4MDd9LAorCX07CisJc3RydWN0IHNjX3JlZ19hY2Nlc3MgYW1pY1tdID0geworCQl7MHgyNDgsIDB4MDAsIDB4MDV9LAorCQl7MHgyNDksIDB4MDAsIDB4MDF9LAorCQl7MHgyNEEsIDB4MDAsIDB4MDF9LAorCQl7MHgyNDcsIDB4MDAsIDB4QTN9LAorCX07CisJc3RydWN0IHNjX3JlZ19hY2Nlc3MgdHhfb2ZmW10gPSB7CisJCXsweDI0RiwgMHgwMCwgMHgzQ30sCisJfTsKIAogCXByX2RlYnVnKCJwb3dlcmluZyBkbiBjcC4uLi5cbiIpOwogCXNuZF9tc2ljX29wcy5jYXBfb24gPSAwOwotCXJldHVybiByZXR2YWw7CisJc3N0X3NjX3JlZ19hY2Nlc3ModHhfb2ZmLCBQTUlDX1JFQURfTU9ESUZZLCAxKTsKKwlpZiAoc25kX21zaWNfb3BzLmlucHV0X2Rldl9pZCA9PSBETUlDKQorCQlzc3Rfc2NfcmVnX2FjY2VzcyhkbWljLCBQTUlDX1JFQURfTU9ESUZZLCAzKTsKKwllbHNlCisJCXNzdF9zY19yZWdfYWNjZXNzKGFtaWMsIFBNSUNfUkVBRF9NT0RJRlksIDQpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG1zaWNfc2V0X3NlbGVjdGVkX291dHB1dF9kZXYodTggdmFsdWUpCkBAIC0zMTUsNyArNjg5LDcgQEAKIAogCXByX2RlYnVnKCJtc2ljIHNldCBzZWxlY3RlZCBvdXRwdXQ6JWRcbiIsIHZhbHVlKTsKIAlzbmRfbXNpY19vcHMub3V0cHV0X2Rldl9pZCA9IHZhbHVlOwotCWlmIChzbmRfbXNpY19vcHMucGJfb24pCisJaWYgKHNuZF9tc2ljX29wcy5wYmhzX29uKQogCQltc2ljX3Bvd2VyX3VwX3BiKFNORF9TU1RfREVWSUNFX0hFQURTRVQpOwogCXJldHVybiByZXR2YWw7CiB9CkBAIC0zNTIsNiArNzI2LDU3IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorc3RhdGljIGludCBtc2ljX3NldF9od19kbWljX3JvdXRlKHU4IGh3X2NoX2luZGV4KQoreworCXN0cnVjdCBzY19yZWdfYWNjZXNzIHNjX2FjY2Vzc19yb3V0ZXI7CisJaW50ICAgIHJldHZhbCA9IC1FSU5WQUw7CisKKwlzd2l0Y2ggKGh3X2NoX2luZGV4KSB7CisJY2FzZSBIV19DSDA6CisJCXNjX2FjY2Vzc19yb3V0ZXIucmVnX2FkZHIgPSBBVURJT01VWDEyOworCQlzY19hY2Nlc3Nfcm91dGVyLnZhbHVlICAgID0gc25kX21zaWNfb3BzLmh3X2RtaWNfbWFwWzBdOworCQlzY19hY2Nlc3Nfcm91dGVyLm1hc2sgICAgID0gKE1BU0syIHwgTUFTSzEgfCBNQVNLMCk7CisJCXByX2RlYnVnKCJod19jaDAuICB2YWx1ZSA9IDB4JXhcbiIsCisJCQkJc2NfYWNjZXNzX3JvdXRlci52YWx1ZSk7CisJCXJldHZhbCA9IHNzdF9zY19yZWdfYWNjZXNzKCZzY19hY2Nlc3Nfcm91dGVyLAorCQkJCVBNSUNfUkVBRF9NT0RJRlksIDEpOworCQlicmVhazsKKworCWNhc2UgSFdfQ0gxOgorCQlzY19hY2Nlc3Nfcm91dGVyLnJlZ19hZGRyID0gQVVESU9NVVgxMjsKKwkJc2NfYWNjZXNzX3JvdXRlci52YWx1ZSAgICA9IChzbmRfbXNpY19vcHMuaHdfZG1pY19tYXBbMV0pIDw8IDQ7CisJCXNjX2FjY2Vzc19yb3V0ZXIubWFzayAgICAgPSAoTUFTSzYgfCBNQVNLNSB8IE1BU0s0KTsKKwkJcHJfZGVidWcoIiMjIyBod19jaDEuICB2YWx1ZSA9IDB4JXhcbiIsCisJCQkJc2NfYWNjZXNzX3JvdXRlci52YWx1ZSk7CisJCXJldHZhbCA9IHNzdF9zY19yZWdfYWNjZXNzKCZzY19hY2Nlc3Nfcm91dGVyLAorCQkJCVBNSUNfUkVBRF9NT0RJRlksIDEpOworCQlicmVhazsKKworCWNhc2UgSFdfQ0gyOgorCQlzY19hY2Nlc3Nfcm91dGVyLnJlZ19hZGRyID0gQVVESU9NVVgzNDsKKwkJc2NfYWNjZXNzX3JvdXRlci52YWx1ZSAgICA9IHNuZF9tc2ljX29wcy5od19kbWljX21hcFsyXTsKKwkJc2NfYWNjZXNzX3JvdXRlci5tYXNrICAgICA9IChNQVNLMiB8IE1BU0sxIHwgTUFTSzApOworCQlwcl9kZWJ1ZygiaHdfY2gyLiAgdmFsdWUgPSAweCV4XG4iLAorCQkJCXNjX2FjY2Vzc19yb3V0ZXIudmFsdWUpOworCQlyZXR2YWwgPSBzc3Rfc2NfcmVnX2FjY2Vzcygmc2NfYWNjZXNzX3JvdXRlciwKKwkJCQlQTUlDX1JFQURfTU9ESUZZLCAxKTsKKwkJYnJlYWs7CisKKwljYXNlIEhXX0NIMzoKKwkJc2NfYWNjZXNzX3JvdXRlci5yZWdfYWRkciA9IEFVRElPTVVYMzQ7CisJCXNjX2FjY2Vzc19yb3V0ZXIudmFsdWUgICAgPSAoc25kX21zaWNfb3BzLmh3X2RtaWNfbWFwWzNdKSA8PCA0OworCQlzY19hY2Nlc3Nfcm91dGVyLm1hc2sgICAgID0gKE1BU0s2IHwgTUFTSzUgfCBNQVNLNCk7CisJCXByX2RlYnVnKCJod19jaDMuICB2YWx1ZSA9IDB4JXhcbiIsCisJCQkJc2NfYWNjZXNzX3JvdXRlci52YWx1ZSk7CisJCXJldHZhbCA9IHNzdF9zY19yZWdfYWNjZXNzKCZzY19hY2Nlc3Nfcm91dGVyLAorCQkJCVBNSUNfUkVBRF9NT0RJRlksIDEpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisKIHN0YXRpYyBpbnQgbXNpY19zZXRfcGNtX3ZvaWNlX3BhcmFtcyh2b2lkKQogewogCXJldHVybiAwOwpAQCAtMzkyLDkgKzgxNywyMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBtc2ljX3NldF9oZWFkc2V0X3N0YXRlKGludCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBoc19lbmFibGVbXSA9IHsKKwkJezB4MjVELCAweDAzLCAweDAzfSwKKwl9OworCisJaWYgKHN0YXRlKQorCQkvKmVuYWJsZSovCisJCXNzdF9zY19yZWdfYWNjZXNzKGhzX2VuYWJsZSwgUE1JQ19SRUFEX01PRElGWSwgMSk7CisJZWxzZSB7CisJCWhzX2VuYWJsZVswXS52YWx1ZSA9IDA7CisJCXNzdF9zY19yZWdfYWNjZXNzKGhzX2VuYWJsZSwgUE1JQ19SRUFEX01PRElGWSwgMSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1zaWNfZW5hYmxlX21pY19iaWFzKHZvaWQpCit7CisJc3RydWN0IHNjX3JlZ19hY2Nlc3MgamFja19pbnRlcnJ1cHRfcmVnW10gPSB7CisJCXsweDBEQiwgMHgwNywgMHgwMH0sCisKKwl9OworCXN0cnVjdCBzY19yZWdfYWNjZXNzIGphY2tfYmlhc19yZWdbXSA9IHsKKwkJezB4MjQ3LCAweDBDLCAweDBDfSwKKwl9OworCisJc3N0X3NjX3JlZ19hY2Nlc3MoamFja19pbnRlcnJ1cHRfcmVnLCBQTUlDX1dSSVRFLCAxKTsKKwlzc3Rfc2NfcmVnX2FjY2VzcyhqYWNrX2JpYXNfcmVnLCBQTUlDX1JFQURfTU9ESUZZLCAxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtc2ljX2Rpc2FibGVfbWljX2JpYXModm9pZCkKK3sKKwlpZiAoc25kX21zaWNfb3BzLmphY2tfaW50ZXJydXB0X3N0YXR1cyA9PSB0cnVlKQorCQlyZXR1cm4gMDsKKwlpZiAoIShzbmRfbXNpY19vcHMucGJfb24gfHwgc25kX21zaWNfb3BzLmNhcF9vbikpCisJCW1zaWNfcG93ZXJfZG93bigpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1zaWNfZGlzYWJsZV9qYWNrX2J0bih2b2lkKQoreworCXN0cnVjdCBzY19yZWdfYWNjZXNzIGJ0bl9kaXNhYmxlW10gPSB7CisJCXsweDI2QywgMHgwMCwgMHgwMX0KKwl9OworCisJaWYgKCEoc25kX21zaWNfb3BzLnBiX29uIHx8IHNuZF9tc2ljX29wcy5jYXBfb24pKQorCQltc2ljX3Bvd2VyX2Rvd24oKTsKKwlzbmRfbXNpY19vcHMuamFja19pbnRlcnJ1cHRfc3RhdHVzID0gZmFsc2U7CisJcmV0dXJuIHNzdF9zY19yZWdfYWNjZXNzKGJ0bl9kaXNhYmxlLCBQTUlDX1JFQURfTU9ESUZZLCAxKTsKK30KKworc3RhdGljIGludCBtc2ljX2VuYWJsZV9qYWNrX2J0bih2b2lkKQoreworCXN0cnVjdCBzY19yZWdfYWNjZXNzIGJ0bl9lbmFibGVbXSA9IHsKKwkJCXsweDI2YiwgMHg3NywgMHgwMH0sCisJCQl7MHgyNkMsIDB4MDEsIDB4MDB9LAorCX07CisJcmV0dXJuIHNzdF9zY19yZWdfYWNjZXNzKGJ0bl9lbmFibGUsIFBNSUNfV1JJVEUsIDIpOworfQorc3RhdGljIGludCBtc2ljX2NvbnZlcnRfYWRjX3RvX212b2x0KHVuc2lnbmVkIGludCBtaWNfYmlhcykKK3sKKwlyZXR1cm4gKEFEQ19PTkVfTFNCX01VTFRJUExJRVIgKiBtaWNfYmlhcykgLyAxMDAwOworfQoraW50IG1zaWNfZ2V0X2hlYWRzZXRfc3RhdGUoaW50IG1pY19iaWFzKQoreworCXN0cnVjdCBzY19yZWdfYWNjZXNzIG1zaWNfaHNfdG9nZ2xlW10gPSB7CisJCXsweDA3MCwgMHgwMCwgMHgwMX0sCisJfTsKKwlpZiAobWljX2JpYXMgPj0gMCAmJiBtaWNfYmlhcyA8IDQwMCkgeworCisJCXByX2RlYnVnKCJEZXRlY3RlZCBIZWFkcGhvbmUhISFcbiIpOworCQlzc3Rfc2NfcmVnX2FjY2Vzcyhtc2ljX2hzX3RvZ2dsZSwgUE1JQ19SRUFEX01PRElGWSwgMSk7CisKKwl9IGVsc2UgaWYgKG1pY19iaWFzID4gNDAwICYmIG1pY19iaWFzIDwgNjUwKSB7CisKKwkJcHJfZGVidWcoIkRldGVjdGVkIEFtZXJpY2FuIGhlYWRzZXRcbiIpOworCQltc2ljX2hzX3RvZ2dsZVswXS52YWx1ZSA9IDB4MDE7CisJCXNzdF9zY19yZWdfYWNjZXNzKG1zaWNfaHNfdG9nZ2xlLCBQTUlDX1JFQURfTU9ESUZZLCAxKTsKKworCX0gZWxzZSBpZiAobWljX2JpYXMgPj0gNjUwICYmIG1pY19iaWFzIDwgMjAwMCkgeworCisJCXByX2RlYnVnKCJEZXRlY3RlZCBIZWFkc2V0ISEhXG4iKTsKKwkJc3N0X3NjX3JlZ19hY2Nlc3MobXNpY19oc190b2dnbGUsIFBNSUNfUkVBRF9NT0RJRlksIDEpOworCQkvKnBvd2VyIG9uIGphY2sgYW5kIGJ0biovCisJCXNuZF9tc2ljX29wcy5qYWNrX2ludGVycnVwdF9zdGF0dXMgPSB0cnVlOworCQltc2ljX2VuYWJsZV9qYWNrX2J0bigpOworCQltc2ljX2VuYWJsZV9taWNfYmlhcygpOworCQlyZXR1cm4gU05EX0pBQ0tfSEVBRFNFVDsKKworCX0gZWxzZQorCQlwcl9kZWJ1ZygiRGV0ZWN0ZWQgT3BlbiBDYWJsZSEhIVxuIik7CisKKwlyZXR1cm4gU05EX0pBQ0tfSEVBRFBIT05FOworfQorCitzdGF0aWMgaW50IG1zaWNfZ2V0X21pY19iaWFzKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3Qgc25kX2ludGVsbWFkICppbnRlbG1hZF9kcnYgPSAoc3RydWN0IHNuZF9pbnRlbG1hZCAqKWFyZzsKKwl1MTYgYWRjX2FkciA9IGludGVsbWFkX2Rydi0+YWRjX2FkZHJlc3M7CisJdTE2IGFkY192YWw7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBhZGNfY3RybDNbMl0gPSB7CisJCQl7MHgxQzIsIDB4MDUsIDB4MH0sCisJfTsKKworCXN0cnVjdCBzY19yZWdfYWNjZXNzIGF1ZGlvX2FkY19yZWcxID0gezAsfTsKKwlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBhdWRpb19hZGNfcmVnMiA9IHswLH07CisKKwltc2ljX2VuYWJsZV9taWNfYmlhcygpOworCS8qIEVuYWJsZSB0aGUgbXNpYyBmb3IgY29udmVyc2lvbiBiZWZvcmUgcmVhZGluZyAqLworCXJldCA9IHNzdF9zY19yZWdfYWNjZXNzKGFkY19jdHJsMywgUE1JQ19XUklURSwgMSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlhZGNfY3RybDNbMF0udmFsdWUgPSAweDA0OworCS8qIFJlLXRvZ2dsZSB0aGUgUlJEQVRBUkQgYml0ICovCisJcmV0ID0gc3N0X3NjX3JlZ19hY2Nlc3MoYWRjX2N0cmwzLCBQTUlDX1dSSVRFLCAxKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJYXVkaW9fYWRjX3JlZzEucmVnX2FkZHIgPSBhZGNfYWRyOworCS8qIFJlYWQgdGhlIGhpZ2hlciBiaXRzIG9mIGRhdGEgKi8KKwltc2xlZXAoMTAwMCk7CisJcmV0ID0gc3N0X3NjX3JlZ19hY2Nlc3MoJmF1ZGlvX2FkY19yZWcxLCBQTUlDX1JFQUQsIDEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcHJfZGVidWcoImFkYyByZWFkIHZhbHVlICV4IiwgYXVkaW9fYWRjX3JlZzEudmFsdWUpOworCisJLyogU2hpZnQgYml0cyB0byBhY2NvbW9kYXRlIHRoZSBsb3dlciB0d28gZGF0YSBiaXRzICovCisJYWRjX3ZhbCA9IChhdWRpb19hZGNfcmVnMS52YWx1ZSA8PCAyKTsKKwlhZGNfYWRyKys7CisJYXVkaW9fYWRjX3JlZzIuIHJlZ19hZGRyID0gYWRjX2FkcjsKKwlyZXQgPSBzc3Rfc2NfcmVnX2FjY2VzcygmYXVkaW9fYWRjX3JlZzIsIFBNSUNfUkVBRCwgMSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlwcl9kZWJ1ZygiYWRjIHJlYWQgdmFsdWUgJXgiLCBhdWRpb19hZGNfcmVnMi52YWx1ZSk7CisKKwkvKiBBZGRpbmcgbG93ZXIgdHdvIGJpdHMgdG8gdGhlIGhpZ2hlciBiaXRzICovCisJYXVkaW9fYWRjX3JlZzIudmFsdWUgJj0gMDM7CisJYWRjX3ZhbCArPSBhdWRpb19hZGNfcmVnMi52YWx1ZTsKKworCXByX2RlYnVnKCJBREMgdmFsdWUgMHgleCIsIGFkY192YWwpOworCW1zaWNfZGlzYWJsZV9taWNfYmlhcygpOworCXJldHVybiBhZGNfdmFsOworfQorCitzdGF0aWMgdm9pZCBtc2ljX3BtaWNfaXJxX2NiKHZvaWQgKmNiX2RhdGEsIHU4IGludHN0cykKK3sKKwlzdHJ1Y3QgbWFkX2phY2sgKm1qYWNrID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgcHJlc2VudCA9IDAsIGphY2tfZXZlbnRfZmxhZyA9IDAsIGJ1dHRvbnByZXNzZmxhZyA9IDA7CisJc3RydWN0IHNuZF9pbnRlbG1hZCAqaW50ZWxtYWRkYXRhID0gY2JfZGF0YTsKKwlpbnQgcmV0dmFsID0gMDsKKworCXByX2RlYnVnKCJ2YWx1ZSByZXR1cm5lZCA9IDB4JXhcbiIsIGludHN0cyk7CisKKwlpZiAoc25kX21zaWNfb3BzLmNhcmRfc3RhdHVzID09IFNORF9DQVJEX1VOX0lOSVQpIHsKKwkJcmV0dmFsID0gbXNpY19pbml0X2NhcmQoKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybjsKKwkgIH0KKworCW1qYWNrID0gJmludGVsbWFkZGF0YS0+amFja1swXTsKKwlpZiAoaW50c3RzICYgMHgxKSB7CisJCXByX2RlYnVnKCJNQUQgc2hvcnRfcHVzaCBkZXRlY3RlZFxuIik7CisJCXByZXNlbnQgPSBTTkRfSkFDS19CVE5fMDsKKwkJamFja19ldmVudF9mbGFnID0gYnV0dG9ucHJlc3NmbGFnID0gMTsKKwkJbWphY2stPmphY2sudHlwZSA9IFNORF9KQUNLX0JUTl8wOworCQltamFjay0+amFjay5rZXlbMF0gPSBCVE5fMCA7CisJfQorCisJaWYgKGludHN0cyAmIDB4MikgeworCQlwcl9kZWJ1ZygiOk1BRCBsb25nX3B1c2ggZGV0ZWN0ZWRcbiIpOworCQlqYWNrX2V2ZW50X2ZsYWcgPSBidXR0b25wcmVzc2ZsYWcgPSAxOworCQltamFjay0+amFjay50eXBlID0gcHJlc2VudCA9IFNORF9KQUNLX0JUTl8xOworCQltamFjay0+amFjay5rZXlbMV0gPSBCVE5fMTsKKwl9CisKKwlpZiAoaW50c3RzICYgMHg0KSB7CisJCXVuc2lnbmVkIGludCBtaWNfYmlhczsKKwkJamFja19ldmVudF9mbGFnID0gMTsKKwkJYnV0dG9ucHJlc3NmbGFnID0gMDsKKwkJbWljX2JpYXMgPSBtc2ljX2dldF9taWNfYmlhcyhpbnRlbG1hZGRhdGEpOworCQlwcl9kZWJ1ZygibWljX2JpYXMgPSAlZFxuIiwgbWljX2JpYXMpOworCQltaWNfYmlhcyA9IG1zaWNfY29udmVydF9hZGNfdG9fbXZvbHQobWljX2JpYXMpOworCQlwcl9kZWJ1ZygibWljX2JpYXMgYWZ0ZXIgY29udmVyc2lvbiA9ICVkIG1WXG4iLCBtaWNfYmlhcyk7CisJCW1qYWNrLT5qYWNrX2Rldl9zdGF0ZSA9IG1zaWNfZ2V0X2hlYWRzZXRfc3RhdGUobWljX2JpYXMpOworCQltamFjay0+amFjay50eXBlID0gcHJlc2VudCA9IG1qYWNrLT5qYWNrX2Rldl9zdGF0ZTsKKwl9CisKKwlpZiAoaW50c3RzICYgMHg4KSB7CisJCW1qYWNrLT5qYWNrLnR5cGUgPSBtamFjay0+amFja19kZXZfc3RhdGU7CisJCXByZXNlbnQgPSAwOworCQlqYWNrX2V2ZW50X2ZsYWcgPSAxOworCQlidXR0b25wcmVzc2ZsYWcgPSAwOworCQltc2ljX2Rpc2FibGVfamFja19idG4oKTsKKwkJbXNpY19kaXNhYmxlX21pY19iaWFzKCk7CisJfQorCWlmIChqYWNrX2V2ZW50X2ZsYWcpCisJCXNzdF9tYWRfc2VuZF9qYWNrX3JlcG9ydCgmbWphY2stPmphY2ssCisJCQkJCWJ1dHRvbnByZXNzZmxhZywgcHJlc2VudCk7Cit9CisKKworCiBzdHJ1Y3Qgc25kX3BtaWNfb3BzIHNuZF9tc2ljX29wcyA9IHsKIAkuc2V0X2lucHV0X2Rldgk9CW1zaWNfc2V0X3NlbGVjdGVkX2lucHV0X2RldiwKIAkuc2V0X291dHB1dF9kZXYgPQltc2ljX3NldF9zZWxlY3RlZF9vdXRwdXRfZGV2LAorCS5zZXRfbGluZW91dF9kZXYgPQltc2ljX3NldF9zZWxlY3RlZF9saW5lb3V0X2RldiwKKwkuc2V0X2h3X2RtaWNfcm91dGUgPSAgICBtc2ljX3NldF9od19kbWljX3JvdXRlLAogCS5zZXRfbXV0ZQk9CW1zaWNfc2V0X211dGUsCiAJLmdldF9tdXRlCT0JbXNpY19nZXRfbXV0ZSwKIAkuc2V0X3ZvbAk9CW1zaWNfc2V0X3ZvbCwKQEAgLTQwOCw1ICsxMDM5LDkgQEAKIAkucG93ZXJfdXBfcG1pY19jcCA9CW1zaWNfcG93ZXJfdXBfY3AsCiAJLnBvd2VyX2Rvd25fcG1pY19wYiA9CW1zaWNfcG93ZXJfZG93bl9wYiwKIAkucG93ZXJfZG93bl9wbWljX2NwID0JbXNpY19wb3dlcl9kb3duX2NwLAotCS5wb3dlcl9kb3duX3BtaWMgPQltc2ljX3Bvd2VyX2Rvd24sCisJLnBvd2VyX2Rvd25fcG1pYwk9CW1zaWNfcG93ZXJfZG93biwKKwkucG1pY19pcnFfY2IJPQltc2ljX3BtaWNfaXJxX2NiLAorCS5wbWljX2phY2tfZW5hYmxlID0gbXNpY19lbmFibGVfbWljX2JpYXMsCisJLnBtaWNfZ2V0X21pY19iaWFzCT0gbXNpY19nZXRfbWljX2JpYXMsCisJLnBtaWNfc2V0X2hlYWRzZXRfc3RhdGUgPSBtc2ljX3NldF9oZWFkc2V0X3N0YXRlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWRfcHZ0LmMgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkX3B2dC5jCmluZGV4IDNiYTlkYWYuLjkwZTBlNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWRfcHZ0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZF9wdnQuYwpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+Ci0jaW5jbHVkZSAiamFjay5oIgogI2luY2x1ZGUgImludGVsX3NzdC5oIgogI2luY2x1ZGUgImludGVsX3NzdF9pb2N0bC5oIgogI2luY2x1ZGUgImludGVsbWlkX3NuZF9jb250cm9sLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkX3NuZF9jb250cm9sLmggYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkX3NuZF9jb250cm9sLmgKaW5kZXggYTQ1NjVmMy4uMDZhZDNhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZF9zbmRfY29udHJvbC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWRfc25kX2NvbnRyb2wuaApAQCAtODAsNiArODAsMTMgQEAKIAlIU19NSUMsCiAJSU5fVU5ERUZJTkVECiB9OworZW51bSBTTkRfTElORV9PVVRfREVWSUNFIHsKKwlIRUFEU0VULAorCUlIRiwKKwlWSUJSQTEsCisJVklCUkEyLAorCU5PTkUsCit9OwogCiBlbnVtIFNORF9PVVRQVVRfREVWSUNFIHsKIAlTVEVSRU9fSEVBRFBIT05FLApAQCAtMTA0LDYgKzExMSw4IEBACiAJUE1JQ19TTkRfUklHSFRfU1BFQUtFUl9NVVRFID0JCTB4MDAxNSwKIAlQTUlDX1NORF9SRUNFSVZFUl9WT0wgPQkJCTB4MDAxNiwKIAlQTUlDX1NORF9SRUNFSVZFUl9NVVRFID0JCTB4MDAxNywKKwlQTUlDX1NORF9MRUZUX01BU1RFUl9WT0wgPQkJMHgwMDE4LAorCVBNSUNfU05EX1JJR0hUX01BU1RFUl9WT0wgPQkJMHgwMDE5LAogLyogT3RoZXIgY29udHJvbHMgKi8KIAlQTUlDX1NORF9NVVRFX0FMTCA9CQkJMHgwMDIwLAogCVBNSUNfTUFYX0NPTlRST0xTID0JCQkweDAwMjAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkX3YwX2NvbnRyb2wuYyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWRfdjBfY29udHJvbC5jCmluZGV4IDc3NTZmOGYuLmI4ZGZkYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWRfdjBfY29udHJvbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWRfdjBfY29udHJvbC5jCkBAIC0zMCw5ICszMCwxMCBAQAogCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KICNpbmNsdWRlICJpbnRlbF9zc3QuaCIKICNpbmNsdWRlICJpbnRlbG1pZF9zbmRfY29udHJvbC5oIgotCisjaW5jbHVkZSAiaW50ZWxtaWQuaCIKIAogZW51bSBfcmVnX3YxIHsKIAlWT0lDRVBPUlQxID0gMHgxODAsCkBAIC02NCw2ICs2NSw3IEBACiB9OwogCiBpbnQgcmV2X2lkID0gMHgyMDsKK3N0YXRpYyBib29sIGphY2tfZGV0X2VuYWJsZWQ7CiAKIC8qKioqCiAgKiBmc19pbml0X2NhcmQgLSBpbml0aWFsaXplIHRoZSBzb3VuZCBjYXJkCkBAIC0xNTcsNyArMTU5LDcgQEAKIAlyZXR1cm4gZnNfZW5hYmxlX2F1ZGlvZGFjKFVOTVVURSk7CiB9CiAKLXN0YXRpYyBpbnQgZnNfcG93ZXJfZG93bl9wYih2b2lkKQorc3RhdGljIGludCBmc19wb3dlcl9kb3duX3BiKHVuc2lnbmVkIGludCBkZXZpY2UpCiB7CiAJc3RydWN0IHNjX3JlZ19hY2Nlc3Mgc2NfYWNjZXNzW10gPSB7CiAJCXtQT1dFUkNUUkwxLCAweDAwLCAweEM2fSwKQEAgLTE5NSw3ICsxOTcsNyBAQAogCXJldHVybiBzc3Rfc2NfcmVnX2FjY2VzcyhzY19hY2Nlc3MsIFBNSUNfUkVBRF9NT0RJRlksIDIpOwogfQogCi1zdGF0aWMgaW50IGZzX3Bvd2VyX2Rvd25fY3Aodm9pZCkKK3N0YXRpYyBpbnQgZnNfcG93ZXJfZG93bl9jcCh1bnNpZ25lZCBpbnQgZGV2aWNlKQogewogCXN0cnVjdCBzY19yZWdfYWNjZXNzIHNjX2FjY2Vzc1tdID0gewogCQl7UE9XRVJDVFJMMiwgMHgwMCwgMHgwM30sCkBAIC03NTMsNiArNzU1LDkwIEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorc3RhdGljIHZvaWQgZnNfcG1pY19pcnFfZW5hYmxlKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHNuZF9pbnRlbG1hZCAqaW50ZWxtYWRkYXRhID0gZGF0YTsKKwlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBzY19hY2Nlc3NbXSA9IHsKKwkJCQl7MHgxODcsIDB4MDAsIE1BU0s3fSwKKwkJCQl7MHgxODgsIDB4MTAsIE1BU0s0fSwKKwkJCQl7MHgxOGIsIDB4MTAsIE1BU0s0fSwKKwl9OworCisJc3RydWN0IHNjX3JlZ19hY2Nlc3Mgc2NfYWNjZXNzX3dyaXRlW10gPSB7CisJCQkJezB4MTk4LCAweDAwLCAweDB9LAorCX07CisJcHJfZGVidWcoIkF1ZGlvIGludGVycnVwdCBlbmFibGVcbiIpOworCXNzdF9zY19yZWdfYWNjZXNzKHNjX2FjY2VzcywgUE1JQ19SRUFEX01PRElGWSwgMyk7CisJc3N0X3NjX3JlZ19hY2Nlc3Moc2NfYWNjZXNzX3dyaXRlLCBQTUlDX1dSSVRFLCAxKTsKKworCWludGVsbWFkZGF0YS0+amFja1swXS5qYWNrX3N0YXR1cyA9IDA7CisJLyppbnRlbG1hZGRhdGEtPmphY2tbMV0uamFja19zdGF0dXMgPSAwOyovCisKKwlqYWNrX2RldF9lbmFibGVkID0gdHJ1ZTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGZzX3BtaWNfaXJxX2NiKHZvaWQgKmNiX2RhdGEsIHU4IHZhbHVlKQoreworCXN0cnVjdCBtYWRfamFjayAqbWphY2sgPSBOVUxMOworCXN0cnVjdCBzbmRfaW50ZWxtYWQgKmludGVsbWFkZGF0YSA9IGNiX2RhdGE7CisJdW5zaWduZWQgaW50IHByZXNlbnQgPSAwLCBqYWNrX2V2ZW50X2ZsYWcgPSAwLCBidXR0b25wcmVzc2ZsYWcgPSAwOworCisJbWphY2sgPSAmaW50ZWxtYWRkYXRhLT5qYWNrWzBdOworCisJaWYgKHZhbHVlICYgMHg0KSB7CisJCWlmICghamFja19kZXRfZW5hYmxlZCkKKwkJCWZzX3BtaWNfaXJxX2VuYWJsZShpbnRlbG1hZGRhdGEpOworCisJCS8qIHNlbmQgaGVhZHBob25lIGRldGVjdCAqLworCQlwcl9kZWJ1ZygiOk1BRCBoZWFkcGhvbmUgJWRcbiIsIHZhbHVlICYgMHg0KTsKKwkJcHJlc2VudCA9ICEobWphY2stPmphY2tfc3RhdHVzKTsKKwkJbWphY2stPmphY2tfc3RhdHVzID0gcHJlc2VudDsKKwkJamFja19ldmVudF9mbGFnID0gMTsKKwkJbWphY2stPmphY2sudHlwZSA9IFNORF9KQUNLX0hFQURQSE9ORTsKKwl9CisKKwlpZiAodmFsdWUgJiAweDIpIHsKKwkJLyogc2VuZCBzaG9ydCBwdXNoICovCisJCXByX2RlYnVnKCI6TUFEIHNob3J0IHB1c2ggJWRcbiIsIHZhbHVlICYgMHgyKTsKKwkJcHJlc2VudCA9IDE7CisJCWphY2tfZXZlbnRfZmxhZyA9IDE7CisJCWJ1dHRvbnByZXNzZmxhZyA9IDE7CisJCW1qYWNrLT5qYWNrLnR5cGUgPSBNSURfSkFDS19IU19TSE9SVF9QUkVTUzsKKwl9CisKKwlpZiAodmFsdWUgJiAweDEpIHsKKwkJLyogc2VuZCBsb25nIHB1c2ggKi8KKwkJcHJfZGVidWcoIjpNQUQgbG9uZyBwdXNoICVkXG4iLCB2YWx1ZSAmIDB4MSk7CisJCXByZXNlbnQgPSAxOworCQlqYWNrX2V2ZW50X2ZsYWcgPSAxOworCQlidXR0b25wcmVzc2ZsYWcgPSAxOworCQltamFjay0+amFjay50eXBlID0gTUlEX0pBQ0tfSFNfTE9OR19QUkVTUzsKKwl9CisKKwlpZiAodmFsdWUgJiAweDgpIHsKKwkJaWYgKCFqYWNrX2RldF9lbmFibGVkKQorCQkJZnNfcG1pY19pcnFfZW5hYmxlKGludGVsbWFkZGF0YSk7CisJCS8qIHNlbmQgaGVhZHNldCBkZXRlY3QgKi8KKwkJcHJfZGVidWcoIjpNQUQgaGVhZHNldCA9ICVkXG4iLCB2YWx1ZSAmIDB4OCk7CisJCXByZXNlbnQgPSAhKG1qYWNrLT5qYWNrX3N0YXR1cyk7CisJCW1qYWNrLT5qYWNrX3N0YXR1cyA9IHByZXNlbnQ7CisJCWphY2tfZXZlbnRfZmxhZyA9IDE7CisJCW1qYWNrLT5qYWNrLnR5cGUgPSBTTkRfSkFDS19IRUFEU0VUOworCX0KKworCisJaWYgKGphY2tfZXZlbnRfZmxhZykKKwkJc3N0X21hZF9zZW5kX2phY2tfcmVwb3J0KCZtamFjay0+amFjaywKKwkJCQkJCWJ1dHRvbnByZXNzZmxhZywgcHJlc2VudCk7CisKKwlyZXR1cm47Cit9CitzdGF0aWMgaW50IGZzX2phY2tfZW5hYmxlKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKIHN0cnVjdCBzbmRfcG1pY19vcHMgc25kX3BtaWNfb3BzX2ZzID0gewogCS5zZXRfaW5wdXRfZGV2ID0gZnNfc2V0X3NlbGVjdGVkX2lucHV0X2RldiwKIAkuc2V0X291dHB1dF9kZXYgPSBmc19zZXRfc2VsZWN0ZWRfb3V0cHV0X2RldiwKQEAgLTc2NSw5ICs4NTEsMTYgQEAKIAkuc2V0X3BjbV92b2ljZV9wYXJhbXMgPSBmc19zZXRfcGNtX3ZvaWNlX3BhcmFtcywKIAkuc2V0X3ZvaWNlX3BvcnQgPSBmc19zZXRfdm9pY2VfcG9ydCwKIAkuc2V0X2F1ZGlvX3BvcnQgPSBmc19zZXRfYXVkaW9fcG9ydCwKLQkucG93ZXJfdXBfcG1pY19wYiA9IGZzX3Bvd2VyX3VwX3BiLAotCS5wb3dlcl91cF9wbWljX2NwID0gZnNfcG93ZXJfdXBfY3AsCi0JLnBvd2VyX2Rvd25fcG1pY19wYiA9IGZzX3Bvd2VyX2Rvd25fcGIsCi0JLnBvd2VyX2Rvd25fcG1pY19jcCA9IGZzX3Bvd2VyX2Rvd25fY3AsCi0JLnBvd2VyX2Rvd25fcG1pYyA9IGZzX3Bvd2VyX2Rvd24sCisJLnBvd2VyX3VwX3BtaWNfcGIgPQlmc19wb3dlcl91cF9wYiwKKwkucG93ZXJfdXBfcG1pY19jcCA9CWZzX3Bvd2VyX3VwX2NwLAorCS5wb3dlcl9kb3duX3BtaWNfcGIgPQlmc19wb3dlcl9kb3duX3BiLAorCS5wb3dlcl9kb3duX3BtaWNfY3AgPQlmc19wb3dlcl9kb3duX2NwLAorCS5wb3dlcl9kb3duX3BtaWMJPQlmc19wb3dlcl9kb3duLAorCS5wbWljX2lycV9jYgk9CWZzX3BtaWNfaXJxX2NiLAorCS8qCisJICogSmFjayBkZXRlY3Rpb24gZW5hYmxpbmcKKwkgKiBuZWVkIGJlIGRlbGF5ZWQgdGlsbCBmaXJzdCBJUlEgaGFwcGVuLgorCSAqLworCS5wbWljX2lycV9lbmFibGUgPQlOVUxMLAorCS5wbWljX2phY2tfZW5hYmxlID0gZnNfamFja19lbmFibGUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZF92MV9jb250cm9sLmMgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkX3YxX2NvbnRyb2wuYwppbmRleCAxZWE4MTQyLi45ZDAwNzI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkX3YxX2NvbnRyb2wuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkX3YxX2NvbnRyb2wuYwpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxhc20vbXJzdC5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgotI2luY2x1ZGUgImphY2suaCIKICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CiAjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KQEAgLTIxMiw3ICsyMTEsNyBAQAogCXJldHVybiBteF9lbmFibGVfYXVkaW9kYWMoVU5NVVRFKTsKIH0KIAotc3RhdGljIGludCBteF9wb3dlcl9kb3duX3BiKHZvaWQpCitzdGF0aWMgaW50IG14X3Bvd2VyX2Rvd25fcGIodW5zaWduZWQgaW50IGRldmljZSkKIHsKIAlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBzY19hY2Nlc3NbM107CiAJaW50IHJldHZhbCA9IDA7CkBAIC0yNTUsNyArMjU0LDcgQEAKIAlyZXR1cm4gc3N0X3NjX3JlZ19hY2Nlc3Moc2NfYWNjZXNzLCBQTUlDX1JFQURfTU9ESUZZLCAyKTsKIH0KIAotc3RhdGljIGludCBteF9wb3dlcl9kb3duX2NwKHZvaWQpCitzdGF0aWMgaW50IG14X3Bvd2VyX2Rvd25fY3AodW5zaWduZWQgaW50IGRldmljZSkKIHsKIAlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBzY19hY2Nlc3NbXSA9IHsKIAkJe0VOQUJMRV9PUERFVl9DVFJMLCAweDAwLCBNQVNLMXxNQVNLMH0sCkBAIC04MzIsNiArODMxLDEyOSBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKK3N0YXRpYyB1OCBteF9nZXRfamFja19zdGF0dXModm9pZCkKK3sKKwlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBzY19hY2Nlc3NfcmVhZCA9IHswLH07CisKKwlzY19hY2Nlc3NfcmVhZC5yZWdfYWRkciA9IDB4MjAxOworCXNzdF9zY19yZWdfYWNjZXNzKCZzY19hY2Nlc3NfcmVhZCwgUE1JQ19SRUFELCAxKTsKKwlwcl9kZWJ1ZygidmFsdWUgcmV0dXJuZWQgPSAweCV4XG4iLCBzY19hY2Nlc3NfcmVhZC52YWx1ZSk7CisJcmV0dXJuIHNjX2FjY2Vzc19yZWFkLnZhbHVlOworfQorCitzdGF0aWMgdm9pZCBteF9wbWljX2lycV9lbmFibGUodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc25kX2ludGVsbWFkICppbnRlbG1hZGRhdGEgPSBkYXRhOworCisJaW50ZWxtYWRkYXRhLT5qYWNrX3ByZXZfc3RhdGUgPSAweGMwOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgbXhfcG1pY19pcnFfY2Iodm9pZCAqY2JfZGF0YSwgdTggaW50c3RzKQoreworCXU4IGphY2tfY3VyX3N0YXR1cywgamFja19wcmV2X3N0YXRlID0gMDsKKwlzdHJ1Y3QgbWFkX2phY2sgKm1qYWNrID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgcHJlc2VudCA9IDAsIGphY2tfZXZlbnRfZmxhZyA9IDAsIGJ1dHRvbnByZXNzZmxhZyA9IDA7CisJdGltZV90ICB0aW1lZGlmZjsKKwlzdHJ1Y3Qgc25kX2ludGVsbWFkICppbnRlbG1hZGRhdGEgPSBjYl9kYXRhOworCisJbWphY2sgPSAmaW50ZWxtYWRkYXRhLT5qYWNrWzBdOworCWlmIChpbnRzdHMgJiAweDIpIHsKKwkJamFja19jdXJfc3RhdHVzID0gbXhfZ2V0X2phY2tfc3RhdHVzKCk7CisJCWphY2tfcHJldl9zdGF0ZSA9IGludGVsbWFkZGF0YS0+amFja19wcmV2X3N0YXRlOworCQlpZiAoKGphY2tfcHJldl9zdGF0ZSA9PSAweGMwKSAmJiAoamFja19jdXJfc3RhdHVzID09IDB4NDApKSB7CisJCQkvKmhlYWRzZXQgaW5zZXJ0IGRldGVjdGVkLiAqLworCQkJcHJfZGVidWcoIk1BRCBoZWFkc2V0IGluc2VydGVkXG4iKTsKKwkJCXByZXNlbnQgPSAxOworCQkJamFja19ldmVudF9mbGFnID0gMTsKKwkJCW1qYWNrLT5qYWNrX3N0YXR1cyA9IDE7CisJCQltamFjay0+amFjay50eXBlID0gU05EX0pBQ0tfSEVBRFNFVDsKKwkJfQorCisJCWlmICgoamFja19wcmV2X3N0YXRlID09IDB4YzApICYmIChqYWNrX2N1cl9zdGF0dXMgPT0gMHgwMCkpIHsKKwkJCS8qIGhlYWRwaG9uZSBpbnNlcnQgZGV0ZWN0ZWQuICovCisJCQlwcl9kZWJ1ZygiTUFEIGhlYWRwaG9uZSBpbnNlcnRlZFxuIik7CisJCQlwcmVzZW50ID0gMTsKKwkJCWphY2tfZXZlbnRfZmxhZyA9IDE7CisJCQltamFjay0+amFjay50eXBlID0gU05EX0pBQ0tfSEVBRFBIT05FOworCQl9CisKKwkJaWYgKChqYWNrX3ByZXZfc3RhdGUgPT0gMHg0MCkgJiYgKGphY2tfY3VyX3N0YXR1cyA9PSAweGMwKSkgeworCQkJLyogaGVhZHNldCByZW1vdmUgZGV0ZWN0ZWQuICovCisJCQlwcl9kZWJ1ZygiTUFEIGhlYWRzZXQgcmVtb3ZlZFxuIik7CisKKwkJCXByZXNlbnQgPSAwOworCQkJamFja19ldmVudF9mbGFnID0gMTsKKwkJCW1qYWNrLT5qYWNrX3N0YXR1cyA9IDA7CisJCQltamFjay0+amFjay50eXBlID0gU05EX0pBQ0tfSEVBRFNFVDsKKwkJfQorCisJCWlmICgoamFja19wcmV2X3N0YXRlID09IDB4MDApICYmIChqYWNrX2N1cl9zdGF0dXMgPT0gMHhjMCkpIHsKKwkJCS8qIGhlYWRwaG9uZSByZW1vdmUgZGV0ZWN0ZWQuICovCisJCQlwcl9kZWJ1ZygiTUFEIGhlYWRwaG9uZSByZW1vdmVkXG4iKTsKKwkJCXByZXNlbnQgPSAwOworCQkJamFja19ldmVudF9mbGFnID0gMTsKKwkJCW1qYWNrLT5qYWNrLnR5cGUgPSBTTkRfSkFDS19IRUFEUEhPTkU7CisJCX0KKworCQlpZiAoKGphY2tfcHJldl9zdGF0ZSA9PSAweDQwKSAmJiAoamFja19jdXJfc3RhdHVzID09IDB4MDApKSB7CisJCQkvKiBidXR0b24gcHJlc3NlZCAqLworCQkJZG9fZ2V0dGltZW9mZGF5KCZtamFjay0+YnV0dG9ucHJlc3NlZCk7CisJCQlwcl9kZWJ1ZygiTUFEIGJ1dHRvbiBwcmVzcyBkZXRlY3RlZFxuIik7CisJCX0KKworCQlpZiAoKGphY2tfcHJldl9zdGF0ZSA9PSAweDAwKSAmJiAoamFja19jdXJfc3RhdHVzID09IDB4NDApKSB7CisJCQlpZiAobWphY2stPmphY2tfc3RhdHVzKSB7CisJCQkJLypidXR0b24gcHJlc3NlZCAqLworCQkJCWRvX2dldHRpbWVvZmRheSgKKwkJCQkJJm1qYWNrLT5idXR0b25yZWxlYXNlZCk7CisJCQkJLypidXR0b24gcHJlc3NlZCAqLworCQkJCXByX2RlYnVnKCJNQUQgQnV0dG9uIFJlbGVhc2VkIGRldGVjdGVkXG4iKTsKKwkJCQl0aW1lZGlmZiA9IG1qYWNrLT5idXR0b25yZWxlYXNlZC50dl9zZWMgLQorCQkJCQltamFjay0+YnV0dG9ucHJlc3NlZC50dl9zZWM7CisJCQkJYnV0dG9ucHJlc3NmbGFnID0gMTsKKworCQkJCWlmICh0aW1lZGlmZiA+IDEpIHsKKwkJCQkJcHJfZGVidWcoIk1BRCBsb25nIHByZXNzIGR0ZFxuIik7CisJCQkJCS8qIHNlbmQgaGVhZHBob25lIGRldGVjdC91bmRldGVjdCAqLworCQkJCQlwcmVzZW50ID0gMTsKKwkJCQkJamFja19ldmVudF9mbGFnID0gMTsKKwkJCQkJbWphY2stPmphY2sudHlwZSA9CisJCQkJCQkJTUlEX0pBQ0tfSFNfTE9OR19QUkVTUzsKKwkJCQl9IGVsc2UgeworCQkJCQlwcl9kZWJ1ZygiTUFEIHNob3J0IHByZXNzIGR0ZFxuIik7CisJCQkJCS8qIHNlbmQgaGVhZHBob25lIGRldGVjdC91bmRldGVjdCAqLworCQkJCQlwcmVzZW50ID0gMTsKKwkJCQkJamFja19ldmVudF9mbGFnID0gMTsKKwkJCQkJbWphY2stPmphY2sudHlwZSA9CisJCQkJCQlNSURfSkFDS19IU19TSE9SVF9QUkVTUzsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qKip3b3JrYXJvdW5kIGZvciBtYXhpbQorCQkJCWh3IGlzc3VlLDB4MDAgdCAweDQwIGlzIG5vdAorCQkJCWEgdmFsaWQgdHJhbnNpdG9uIGZvciBIZWFkc2V0IGluc2VydGlvbiAqLworCQkJCS8qaGVhZHNldCBpbnNlcnQgZGV0ZWN0ZWQuICovCisJCQkJcHJfZGVidWcoIk1BRCBoZWFkc2V0IGluc2VydGVkXG4iKTsKKwkJCQlwcmVzZW50ID0gMTsKKwkJCQlqYWNrX2V2ZW50X2ZsYWcgPSAxOworCQkJCW1qYWNrLT5qYWNrX3N0YXR1cyA9IDE7CisJCQkJbWphY2stPmphY2sudHlwZSA9IFNORF9KQUNLX0hFQURTRVQ7CisJCQl9CisJCX0KKwkJaW50ZWxtYWRkYXRhLT5qYWNrX3ByZXZfc3RhdGUgID0gamFja19jdXJfc3RhdHVzOworCQlwcl9kZWJ1ZygibXhfcG1pY19pcnFfY2IgcHJ2X3N0YXRlPSAweCV4XG4iLAorCQkJCQlpbnRlbG1hZGRhdGEtPmphY2tfcHJldl9zdGF0ZSk7CisJfQorCisJaWYgKGphY2tfZXZlbnRfZmxhZykKKwkJc3N0X21hZF9zZW5kX2phY2tfcmVwb3J0KCZtamFjay0+amFjaywKKwkJCQkJCWJ1dHRvbnByZXNzZmxhZywgcHJlc2VudCk7Cit9CitzdGF0aWMgaW50IG14X2phY2tfZW5hYmxlKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKIHN0cnVjdCBzbmRfcG1pY19vcHMgc25kX3BtaWNfb3BzX214ID0gewogCS5zZXRfaW5wdXRfZGV2ID0gbXhfc2V0X3NlbGVjdGVkX2lucHV0X2RldiwKIAkuc2V0X291dHB1dF9kZXYgPSBteF9zZXRfc2VsZWN0ZWRfb3V0cHV0X2RldiwKQEAgLTg0NCwxMCArOTY2LDEzIEBACiAJLnNldF9wY21fdm9pY2VfcGFyYW1zID0gbXhfc2V0X3BjbV92b2ljZV9wYXJhbXMsCiAJLnNldF92b2ljZV9wb3J0ID0gbXhfc2V0X3ZvaWNlX3BvcnQsCiAJLnNldF9hdWRpb19wb3J0ID0gbXhfc2V0X2F1ZGlvX3BvcnQsCi0JLnBvd2VyX3VwX3BtaWNfcGIgPSBteF9wb3dlcl91cF9wYiwKLQkucG93ZXJfdXBfcG1pY19jcCA9IG14X3Bvd2VyX3VwX2NwLAotCS5wb3dlcl9kb3duX3BtaWNfcGIgPSBteF9wb3dlcl9kb3duX3BiLAotCS5wb3dlcl9kb3duX3BtaWNfY3AgPSBteF9wb3dlcl9kb3duX2NwLAotCS5wb3dlcl9kb3duX3BtaWMgPSAgbXhfcG93ZXJfZG93biwKKwkucG93ZXJfdXBfcG1pY19wYiA9CW14X3Bvd2VyX3VwX3BiLAorCS5wb3dlcl91cF9wbWljX2NwID0JbXhfcG93ZXJfdXBfY3AsCisJLnBvd2VyX2Rvd25fcG1pY19wYiA9CW14X3Bvd2VyX2Rvd25fcGIsCisJLnBvd2VyX2Rvd25fcG1pY19jcCA9CW14X3Bvd2VyX2Rvd25fY3AsCisJLnBvd2VyX2Rvd25fcG1pYyA9CW14X3Bvd2VyX2Rvd24sCisJLnBtaWNfaXJxX2NiCSA9CW14X3BtaWNfaXJxX2NiLAorCS5wbWljX2lycV9lbmFibGUgPQlteF9wbWljX2lycV9lbmFibGUsCisJLnBtaWNfamFja19lbmFibGUgPQlteF9qYWNrX2VuYWJsZSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWRfdjJfY29udHJvbC5jIGIvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZF92Ml9jb250cm9sLmMKaW5kZXggM2M2YjNhYi4uMDAwMzc4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZF92Ml9jb250cm9sLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZF92Ml9jb250cm9sLmMKQEAgLTI4LDExICsyOCwxNCBAQAogCiAjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CiAKKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgogI2luY2x1ZGUgImludGVsX3NzdC5oIgogI2luY2x1ZGUgImludGVsbWlkX3NuZF9jb250cm9sLmgiCisjaW5jbHVkZSAiaW50ZWxtaWQuaCIKIAogZW51bSByZWdfdjMgewogCVZBVURJT0NOVCA9IDB4NTEsCkBAIC04Miw4ICs4NSwxNSBAQAogCUhQTE1JWFNFTCA9IDB4MTJiLAogCUhQUk1JWFNFTCA9IDB4MTJjLAogCUxPQU5USVBPUCA9IDB4MTJkLAorCUFVWERCTkMgPSAweDEyZiwKIH07CiAKK3N0YXRpYyB2b2lkIG5jX3NldF9hbXBfcG93ZXIoaW50IHBvd2VyKQoreworCWlmIChzbmRfcG1pY19vcHNfbmMuZ3Bpb19hbXApCisJCWdwaW9fc2V0X3ZhbHVlKHNuZF9wbWljX29wc19uYy5ncGlvX2FtcCwgcG93ZXIpOworfQorCiAvKioqKgogICogbmNfaW5pdF9jYXJkIC0gaW5pdGlhbGl6ZSB0aGUgc291bmQgY2FyZAogICoKQEAgLTExMSwxOCArMTIxLDIwIEBACiAJCXtWT0lDRVZPTCwgMHgwZSwgMH0sCiAJCXtIUExWT0wsIDB4MDYsIDB9LAogCQl7SFBSVk9MLCAweDA2LCAwfSwKLQkJe01JQ0NUUkwsIDB4NDEsIDB4MDB9LAorCQl7TUlDQ1RSTCwgMHg1MSwgMHgwMH0sCiAJCXtBRENTQU1QTEVSQVRFLCAweDhCLCAweDAwfSwKIAkJe01JQ1NFTFZPTCwgMHg1QiwgMHgwMH0sCiAJCXtMSUxTRUwsIDB4MDYsIDB9LAogCQl7TElSU0VMLCAweDQ2LCAwfSwKIAkJe0xPQU5USVBPUCwgMHgwMCwgMH0sCiAJCXtETUlDQ1RSTDEsIDB4NDAsIDB9LAorCQl7QVVYREJOQywgMHhmZiwgMH0sCiAJfTsKIAlzbmRfcG1pY19vcHNfbmMuY2FyZF9zdGF0dXMgPSBTTkRfQ0FSRF9JTklUX0RPTkU7CiAJc25kX3BtaWNfb3BzX25jLm1hc3Rlcl9tdXRlID0gVU5NVVRFOwogCXNuZF9wbWljX29wc19uYy5tdXRlX3N0YXR1cyA9IFVOTVVURTsKLQlzc3Rfc2NfcmVnX2FjY2VzcyhzY19hY2Nlc3MsIFBNSUNfV1JJVEUsIDI2KTsKKwlzc3Rfc2NfcmVnX2FjY2VzcyhzY19hY2Nlc3MsIFBNSUNfV1JJVEUsIDI3KTsKKwltdXRleF9pbml0KCZzbmRfcG1pY19vcHNfbmMubG9jayk7CiAJcHJfZGVidWcoImluaXQgY29tcGxldGUhIVxuIik7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNjksNiArMTgxLDcgQEAKIAkJcmV0dXJuIHJldHZhbDsKIAlpZiAocG9ydCA9PSAweEZGKQogCQlyZXR1cm4gMDsKKwltdXRleF9sb2NrKCZzbmRfcG1pY19vcHNfbmMubG9jayk7CiAJbmNfZW5hYmxlX2F1ZGlvZGFjKE1VVEUpOwogCW1zbGVlcCgzMCk7CiAKQEAgLTIwOSw4ICsyMjIsMjEgQEAKIAogCW1zbGVlcCgzMCk7CiAKLQlyZXR1cm4gbmNfZW5hYmxlX2F1ZGlvZGFjKFVOTVVURSk7CisJc25kX3BtaWNfb3BzX25jLnBiX29uID0gMTsKIAorCS8qCisJICogVGhlcmUgaXMgYSBtaXNtYXRjaCBiZXR3ZWVuIFBsYXliYWNrIFNvdXJjZXMgYW5kIHRoZSBlbnVtZXJhdGVkCisJICogdmFsdWVzIG9mIG91dHB1dCBzb3VyY2VzLiAgVGhpcyBtaXNtYXRjaCBjYXVzZXMgQUxTQSB1cHBlciB0byBzZW5kCisJICogSXRlbSAxIGZvciBJbnRlcm5hbCBTcGVha2VyLCBidXQgdGhlIGV4cGVjdGVkIGVudW1lcmF0aW9uIGlzIDIhICBGb3IKKwkgKiBub3csIHRyZWF0IE1PTk9fRUFSUElFQ0UgYW5kIElOVEVSTkFMX1NQS1IgaWRlbnRpY2FsbHkgYW5kIHBvd2VyIHVwCisJICogdGhlIG5lZWRlZCByZXNvdXJjZXMKKwkgKi8KKwlpZiAoc25kX3BtaWNfb3BzX25jLm91dHB1dF9kZXZfaWQgPT0gTU9OT19FQVJQSUVDRSB8fAorCSAgICBzbmRfcG1pY19vcHNfbmMub3V0cHV0X2Rldl9pZCA9PSBJTlRFUk5BTF9TUEtSKQorCQluY19zZXRfYW1wX3Bvd2VyKDEpOworCW5jX2VuYWJsZV9hdWRpb2RhYyhVTk1VVEUpOworCW11dGV4X3VubG9jaygmc25kX3BtaWNfb3BzX25jLmxvY2spOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG5jX3Bvd2VyX3VwX2NwKHVuc2lnbmVkIGludCBwb3J0KQpAQCAtMjcwLDcgKzI5Niw2IEBACiAJaW50IHJldHZhbCA9IDA7CiAJc3RydWN0IHNjX3JlZ19hY2Nlc3Mgc2NfYWNjZXNzWzVdOwogCi0KIAlpZiAoc25kX3BtaWNfb3BzX25jLmNhcmRfc3RhdHVzID09IFNORF9DQVJEX1VOX0lOSVQpCiAJCXJldHZhbCA9IG5jX2luaXRfY2FyZCgpOwogCWlmIChyZXR2YWwpCkBAIC0yODAsNiArMzA1LDEwIEBACiAKIAlwcl9kZWJ1ZygicG93ZXJpbmcgZG4gbmNfcG93ZXJfZG93biAuLi4uXG4iKTsKIAorCWlmIChzbmRfcG1pY19vcHNfbmMub3V0cHV0X2Rldl9pZCA9PSBNT05PX0VBUlBJRUNFIHx8CisJICAgIHNuZF9wbWljX29wc19uYy5vdXRwdXRfZGV2X2lkID09IElOVEVSTkFMX1NQS1IpCisJCW5jX3NldF9hbXBfcG93ZXIoMCk7CisKIAltc2xlZXAoMzApOwogCiAJc2NfYWNjZXNzWzBdLnJlZ19hZGRyID0gRFJWUE9XRVJDVFJMOwpAQCAtMzE2LDcgKzM0NSw3IEBACiAJcmV0dXJuIG5jX2VuYWJsZV9hdWRpb2RhYyhVTk1VVEUpOwogfQogCi1zdGF0aWMgaW50IG5jX3Bvd2VyX2Rvd25fcGIodm9pZCkKK3N0YXRpYyBpbnQgbmNfcG93ZXJfZG93bl9wYih1bnNpZ25lZCBpbnQgZGV2aWNlKQogewogCiAJaW50IHJldHZhbCA9IDA7CkBAIC0zMjgsNyArMzU3LDcgQEAKIAkJcmV0dXJuIHJldHZhbDsKIAogCXByX2RlYnVnKCJwb3dlcmluZyBkbiBwYi4uLi5cbiIpOwotCisJbXV0ZXhfbG9jaygmc25kX3BtaWNfb3BzX25jLmxvY2spOwogCW5jX2VuYWJsZV9hdWRpb2RhYyhNVVRFKTsKIAogCkBAIC0zNTUsMTIgKzM4NCwxNCBAQAogCiAJbXNsZWVwKDMwKTsKIAotCXJldHVybiBuY19lbmFibGVfYXVkaW9kYWMoVU5NVVRFKTsKKwlzbmRfcG1pY19vcHNfbmMucGJfb24gPSAwOwogCi0KKwluY19lbmFibGVfYXVkaW9kYWMoVU5NVVRFKTsKKwltdXRleF91bmxvY2soJnNuZF9wbWljX29wc19uYy5sb2NrKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBuY19wb3dlcl9kb3duX2NwKHZvaWQpCitzdGF0aWMgaW50IG5jX3Bvd2VyX2Rvd25fY3AodW5zaWduZWQgaW50IGRldmljZSkKIHsKIAlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBzY19hY2Nlc3NbXSA9IHsKIAkJe1BPV0VSQ1RSTDEsIDB4MDAsIDB4QkV9LApAQCAtNDk4LDExICs1MjksMTMgQEAKIHsKIAlzdHJ1Y3Qgc2NfcmVnX2FjY2VzcyBzY19hY2Nlc3NfSFBbXSA9IHsKIAkJe0xNVVRFLCAweDAyLCAweDA2fSwKLQkJe1JNVVRFLCAweDAyLCAweDA2fQorCQl7Uk1VVEUsIDB4MDIsIDB4MDZ9LAorCQl7RFJWUE9XRVJDVFJMLCAweDA2LCAweDA2fSwKIAl9OwogCXN0cnVjdCBzY19yZWdfYWNjZXNzIHNjX2FjY2Vzc19JU1tdID0gewogCQl7TE1VVEUsIDB4MDQsIDB4MDZ9LAotCQl7Uk1VVEUsIDB4MDQsIDB4MDZ9CisJCXtSTVVURSwgMHgwNCwgMHgwNn0sCisJCXtEUlZQT1dFUkNUUkwsIDB4MDAsIDB4MDZ9LAogCX07CiAJaW50IHJldHZhbCA9IDA7CiAKQEAgLTUxMiwxNyArNTQ1LDI2IEBACiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKIAlwcl9kZWJ1ZygibmMgc2V0IHNlbGVjdGVkIG91dHB1dDolZFxuIiwgdmFsdWUpOworCW11dGV4X2xvY2soJnNuZF9wbWljX29wc19uYy5sb2NrKTsKIAlzd2l0Y2ggKHZhbHVlKSB7CiAJY2FzZSBTVEVSRU9fSEVBRFBIT05FOgorCQlpZiAoc25kX3BtaWNfb3BzX25jLnBiX29uKQorCQkJc3N0X3NjX3JlZ19hY2Nlc3Moc2NfYWNjZXNzX0hQKzIsIFBNSUNfV1JJVEUsIDEpOwogCQlyZXR2YWwgPSBzc3Rfc2NfcmVnX2FjY2VzcyhzY19hY2Nlc3NfSFAsIFBNSUNfV1JJVEUsIDIpOworCQluY19zZXRfYW1wX3Bvd2VyKDApOwogCQlicmVhazsKKwljYXNlIE1PTk9fRUFSUElFQ0U6CiAJY2FzZSBJTlRFUk5BTF9TUEtSOgotCQlyZXR2YWwgPSBzc3Rfc2NfcmVnX2FjY2VzcyhzY19hY2Nlc3NfSVMsIFBNSUNfV1JJVEUsIDIpOworCQlyZXR2YWwgPSBzc3Rfc2NfcmVnX2FjY2VzcyhzY19hY2Nlc3NfSVMsIFBNSUNfV1JJVEUsIDMpOworCQlpZiAoc25kX3BtaWNfb3BzX25jLnBiX29uKQorCQkJbmNfc2V0X2FtcF9wb3dlcigxKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJfZXJyKCJyY3ZkIGlsbGVnYWwgcmVxdWVzdDogJWRcbiIsIHZhbHVlKTsKKwkJbXV0ZXhfdW5sb2NrKCZzbmRfcG1pY19vcHNfbmMubG9jayk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KKwltdXRleF91bmxvY2soJnNuZF9wbWljX29wc19uYy5sb2NrKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC03ODQsOSArODI2LDggQEAKIAljYXNlIFBNSUNfU05EX0xFRlRfUEJfVk9MOgogCQlwcl9kZWJ1ZygiUE1JQ19TTkRfTEVGVF9IUF9WT0wgJWRcbiIsIHZhbHVlKTsKIAkJc2NfYWNjZXNzWzBdLnZhbHVlID0gLXZhbHVlOwotCQlzY19hY2Nlc3NbMF0ucmVnX2FkZHIgID0gQVVESU9MVk9MOwotCQlzY19hY2Nlc3NbMF0ubWFzayA9Ci0JCQkoTUFTSzB8TUFTSzF8TUFTSzJ8TUFTSzN8TUFTSzR8TUFTSzV8TUFTSzYpOworCQlzY19hY2Nlc3NbMF0ucmVnX2FkZHIgID0gSFBMVk9MOworCQlzY19hY2Nlc3NbMF0ubWFzayA9IChNQVNLMHxNQVNLMXxNQVNLMnxNQVNLM3xNQVNLNCk7CiAJCWVudHJpZXMgPSAxOwogCQlicmVhazsKIApAQCAtNzk0LDE1ICs4MzUsMzIgQEAKIAkJcHJfZGVidWcoIlBNSUNfU05EX1JJR0hUX0hQX1ZPTCB2YWx1ZSAlZFxuIiwgdmFsdWUpOwogCQlpZiAoc25kX3BtaWNfb3BzX25jLm51bV9jaGFubmVsID09IDEpIHsKIAkJCXNjX2FjY2Vzc1swXS52YWx1ZSA9IDB4MDQ7Ci0JCSAgICBzY19hY2Nlc3NbMF0ucmVnX2FkZHIgPSBSTVVURTsKKwkJCXNjX2FjY2Vzc1swXS5yZWdfYWRkciA9IFJNVVRFOwogCQkJc2NfYWNjZXNzWzBdLm1hc2sgPSBNQVNLMjsKIAkJfSBlbHNlIHsKKwkJCXNjX2FjY2Vzc1swXS52YWx1ZSA9IC12YWx1ZTsKKwkJCXNjX2FjY2Vzc1swXS5yZWdfYWRkciAgPSBIUFJWT0w7CisJCQlzY19hY2Nlc3NbMF0ubWFzayA9IChNQVNLMHxNQVNLMXxNQVNLMnxNQVNLM3xNQVNLNCk7CisJCX0KKwkJZW50cmllcyA9IDE7CisJCWJyZWFrOworCisJY2FzZSBQTUlDX1NORF9MRUZUX01BU1RFUl9WT0w6CisJCXByX2RlYnVnKCJQTUlDX1NORF9MRUZUX01BU1RFUl9WT0wgdmFsdWUgJWRcbiIsIHZhbHVlKTsKIAkJc2NfYWNjZXNzWzBdLnZhbHVlID0gLXZhbHVlOwotCQlzY19hY2Nlc3NbMF0ucmVnX2FkZHIgID0gQVVESU9SVk9MOworCQlzY19hY2Nlc3NbMF0ucmVnX2FkZHIgPSBBVURJT0xWT0w7CisJCXNjX2FjY2Vzc1swXS5tYXNrID0KKwkJCShNQVNLMHxNQVNLMXxNQVNLMnxNQVNLM3xNQVNLNHxNQVNLNXxNQVNLNik7CisJCWVudHJpZXMgPSAxOworCQlicmVhazsKKworCWNhc2UgUE1JQ19TTkRfUklHSFRfTUFTVEVSX1ZPTDoKKwkJcHJfZGVidWcoIlBNSUNfU05EX1JJR0hUX01BU1RFUl9WT0wgdmFsdWUgJWRcbiIsIHZhbHVlKTsKKwkJc2NfYWNjZXNzWzBdLnZhbHVlID0gLXZhbHVlOworCQlzY19hY2Nlc3NbMF0ucmVnX2FkZHIgPSBBVURJT1JWT0w7CiAJCXNjX2FjY2Vzc1swXS5tYXNrID0KIAkJCQkoTUFTSzB8TUFTSzF8TUFTSzJ8TUFTSzN8TUFTSzR8TUFTSzV8TUFTSzYpOwogCQllbnRyaWVzID0gMTsKLQkJfQogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC04MzEsNyArODg5LDcgQEAKIAkJcHJfZGVidWcoIlNlbGVjdGluZyBBTUlDXG4iKTsKIAkJc2NfYWNjZXNzWzBdLnJlZ19hZGRyID0gMHgxMDc7CiAJCXNjX2FjY2Vzc1swXS52YWx1ZSA9IDB4NDA7Ci0JCXNjX2FjY2Vzc1swXS5tYXNrID0gIE1BU0s2fE1BU0s0fE1BU0szfE1BU0sxfE1BU0swOworCQlzY19hY2Nlc3NbMF0ubWFzayA9ICBNQVNLNnxNQVNLM3xNQVNLMXxNQVNLMDsKIAkJc2NfYWNjZXNzWzFdLnJlZ19hZGRyID0gMHgxMGE7CiAJCXNjX2FjY2Vzc1sxXS52YWx1ZSA9IDB4NDA7CiAJCXNjX2FjY2Vzc1sxXS5tYXNrID0gTUFTSzY7CkBAIC04NDYsOSArOTA0LDkgQEAKIAogCWNhc2UgSFNfTUlDOgogCQlwcl9kZWJ1ZygiU2VsZWN0aW5nIEhTX01JQ1xuIik7Ci0JCXNjX2FjY2Vzc1swXS5yZWdfYWRkciA9IDB4MTA3OwotCQlzY19hY2Nlc3NbMF0ubWFzayA9ICBNQVNLNnxNQVNLNHxNQVNLM3xNQVNLMXxNQVNLMDsKLQkJc2NfYWNjZXNzWzBdLnZhbHVlID0gMHgxMDsKKwkJc2NfYWNjZXNzWzBdLnJlZ19hZGRyID0gTUlDQ1RSTDsKKwkJc2NfYWNjZXNzWzBdLm1hc2sgPSAgTUFTSzZ8TUFTSzN8TUFTSzF8TUFTSzA7CisJCXNjX2FjY2Vzc1swXS52YWx1ZSA9IDB4MDA7CiAJCXNjX2FjY2Vzc1sxXS5yZWdfYWRkciA9IDB4MTA5OwogCQlzY19hY2Nlc3NbMV0ubWFzayA9IE1BU0s2OwogCQlzY19hY2Nlc3NbMV0udmFsdWUgPSAweDQwOwpAQCAtODU4LDEzICs5MTYsMTYgQEAKIAkJc2NfYWNjZXNzWzNdLnJlZ19hZGRyID0gMHgxMDU7CiAJCXNjX2FjY2Vzc1szXS52YWx1ZSA9IDB4NDA7CiAJCXNjX2FjY2Vzc1szXS5tYXNrID0gTUFTSzY7Ci0JCW51bV92YWwgPSA0OworCQlzY19hY2Nlc3NbNF0ucmVnX2FkZHIgPSBBRENTQU1QTEVSQVRFOworCQlzY19hY2Nlc3NbNF0ubWFzayA9IE1BU0s3fE1BU0s2fE1BU0s1fE1BU0s0fE1BU0szOworCQlzY19hY2Nlc3NbNF0udmFsdWUgPSAweGM4OworCQludW1fdmFsID0gNTsKIAkJYnJlYWs7CiAKIAljYXNlIERNSUM6CiAJCXByX2RlYnVnKCJETUlDXG4iKTsKLQkJc2NfYWNjZXNzWzBdLnJlZ19hZGRyID0gMHgxMDc7Ci0JCXNjX2FjY2Vzc1swXS5tYXNrID0gTUFTSzZ8TUFTSzR8TUFTSzN8TUFTSzF8TUFTSzA7CisJCXNjX2FjY2Vzc1swXS5yZWdfYWRkciA9IE1JQ0NUUkw7CisJCXNjX2FjY2Vzc1swXS5tYXNrID0gTUFTSzZ8TUFTSzN8TUFTSzF8TUFTSzA7CiAJCXNjX2FjY2Vzc1swXS52YWx1ZSA9IDB4MEI7CiAJCXNjX2FjY2Vzc1sxXS5yZWdfYWRkciA9IDB4MTA1OwogCQlzY19hY2Nlc3NbMV0udmFsdWUgPSAweDgwOwpAQCAtODcyLDEyICs5MzMsMTIgQEAKIAkJc2NfYWNjZXNzWzJdLnJlZ19hZGRyID0gMHgxMGE7CiAJCXNjX2FjY2Vzc1syXS52YWx1ZSA9IDB4NDA7CiAJCXNjX2FjY2Vzc1syXS5tYXNrID0gTUFTSzY7Ci0JCXNjX2FjY2Vzc1szXS5yZWdfYWRkciA9IDB4MTA5OworCQlzY19hY2Nlc3NbM10ucmVnX2FkZHIgPSBMSUxTRUw7CiAJCXNjX2FjY2Vzc1szXS5tYXNrID0gTUFTSzY7CiAJCXNjX2FjY2Vzc1szXS52YWx1ZSA9IDB4MDA7Ci0JCXNjX2FjY2Vzc1s0XS5yZWdfYWRkciA9IDB4MTA0OwotCQlzY19hY2Nlc3NbNF0udmFsdWUgPSAweDNDOwotCQlzY19hY2Nlc3NbNF0ubWFzayA9IDB4ZmY7CisJCXNjX2FjY2Vzc1s0XS5yZWdfYWRkciA9IEFEQ1NBTVBMRVJBVEU7CisJCXNjX2FjY2Vzc1s0XS5tYXNrID0gIE1BU0s3fE1BU0s2fE1BU0s1fE1BU0s0fE1BU0szOworCQlzY19hY2Nlc3NbNF0udmFsdWUgPSAweDMzOwogCQludW1fdmFsID0gNTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTk2NCwxOCArMTAyNSwzMCBAQAogCQltYXNrID0gKE1BU0swfE1BU0sxfE1BU0syfE1BU0szfE1BU0s0fE1BU0s1KTsKIAkJYnJlYWs7CiAKLQljYXNlIFBNSUNfU05EX1JJR0hUX1BCX1ZPTDoKLQkJcHJfZGVidWcoIkdFVF9WT0xVTUVfUE1JQ19MRUZUX0hQX1ZPTFxuIik7CisJY2FzZSBQTUlDX1NORF9MRUZUX01BU1RFUl9WT0w6CisJCXByX2RlYnVnKCJHRVRfVk9MVU1FX1BNSUNfTEVGVF9NQVNURVJfVk9MXG4iKTsKIAkJc2NfYWNjZXNzLnJlZ19hZGRyID0gQVVESU9MVk9MOwogCQltYXNrID0gKE1BU0swfE1BU0sxfE1BU0syfE1BU0szfE1BU0s0fE1BU0s1fE1BU0s2KTsKIAkJYnJlYWs7CiAKLQljYXNlIFBNSUNfU05EX0xFRlRfUEJfVk9MOgotCQlwcl9kZWJ1ZygiR0VUX1ZPTFVNRV9QTUlDX1JJR0hUX0hQX1ZPTFxuIik7CisJY2FzZSBQTUlDX1NORF9SSUdIVF9NQVNURVJfVk9MOgorCQlwcl9kZWJ1ZygiR0VUX1ZPTFVNRV9QTUlDX1JJR0hUX01BU1RFUl9WT0xcbiIpOwogCQlzY19hY2Nlc3MucmVnX2FkZHIgPSBBVURJT1JWT0w7CiAJCW1hc2sgPSAoTUFTSzB8TUFTSzF8TUFTSzJ8TUFTSzN8TUFTSzR8TUFTSzV8TUFTSzYpOwogCQlicmVhazsKIAorCWNhc2UgUE1JQ19TTkRfUklHSFRfUEJfVk9MOgorCQlwcl9kZWJ1ZygiR0VUX1ZPTFVNRV9QTUlDX1JJR0hUX0hQX1ZPTFxuIik7CisJCXNjX2FjY2Vzcy5yZWdfYWRkciA9IEhQUlZPTDsKKwkJbWFzayA9IChNQVNLMHxNQVNLMXxNQVNLMnxNQVNLM3xNQVNLNCk7CisJCWJyZWFrOworCisJY2FzZSBQTUlDX1NORF9MRUZUX1BCX1ZPTDoKKwkJcHJfZGVidWcoIkdFVF9WT0xVTUVfUE1JQ19MRUZUX0hQX1ZPTFxuIik7CisJCXNjX2FjY2Vzcy5yZWdfYWRkciA9IEhQTFZPTDsKKwkJbWFzayA9IChNQVNLMHxNQVNLMXxNQVNLMnxNQVNLM3xNQVNLNCk7CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTk4Nyw3ICsxMDYwLDgxIEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorc3RhdGljIHZvaWQgaHBfYXV0b211dGUoZW51bSBzbmRfamFja190eXBlcyB0eXBlLCBpbnQgcHJlc2VudCkKK3sKKwl1OCBpbiA9IERNSUM7CisJdTggb3V0ID0gSU5URVJOQUxfU1BLUjsKKwlpZiAocHJlc2VudCkgeworCQlpZiAodHlwZSA9PSBTTkRfSkFDS19IRUFEU0VUKQorCQkJaW4gPSBIU19NSUM7CisJCW91dCA9IFNURVJFT19IRUFEUEhPTkU7CisJfQorCW5jX3NldF9zZWxlY3RlZF9pbnB1dF9kZXYoaW4pOworCW5jX3NldF9zZWxlY3RlZF9vdXRwdXRfZGV2KG91dCk7Cit9CisKK3N0YXRpYyB2b2lkIG5jX3BtaWNfaXJxX2NiKHZvaWQgKmNiX2RhdGEsIHU4IGludHN0cykKK3sKKwl1OCB2YWx1ZSA9IDA7CisJc3RydWN0IG1hZF9qYWNrICptamFjayA9IE5VTEw7CisJdW5zaWduZWQgaW50IHByZXNlbnQgPSAwLCBqYWNrX2V2ZW50X2ZsYWcgPSAwLCBidXR0b25wcmVzc2ZsYWcgPSAwOworCXN0cnVjdCBzbmRfaW50ZWxtYWQgKmludGVsbWFkZGF0YSA9IGNiX2RhdGE7CisJc3RydWN0IHNjX3JlZ19hY2Nlc3Mgc2NfYWNjZXNzX3JlYWQgPSB7MCx9OworCisJc2NfYWNjZXNzX3JlYWQucmVnX2FkZHIgPSAweDEzMjsKKwlzc3Rfc2NfcmVnX2FjY2Vzcygmc2NfYWNjZXNzX3JlYWQsIFBNSUNfUkVBRCwgMSk7CisJdmFsdWUgPSAoc2NfYWNjZXNzX3JlYWQudmFsdWUpOworCXByX2RlYnVnKCJ2YWx1ZSByZXR1cm5lZCA9IDB4JXhcbiIsIHZhbHVlKTsKKworCW1qYWNrID0gJmludGVsbWFkZGF0YS0+amFja1swXTsKKwlpZiAoaW50c3RzICYgMHgxKSB7CisJCXByX2RlYnVnKCJTU1QgREJHOk1BRCBoZWFkc2V0IGRldGVjdGVkXG4iKTsKKwkJLyogc2VuZCBoZWFkc2V0IGRldGVjdC91bmRldGVjdCAqLworCQlwcmVzZW50ID0gKHZhbHVlID09IDB4MSkgPyAxIDogMDsKKwkJamFja19ldmVudF9mbGFnID0gMTsKKwkJbWphY2stPmphY2sudHlwZSA9IFNORF9KQUNLX0hFQURTRVQ7CisJCWhwX2F1dG9tdXRlKFNORF9KQUNLX0hFQURTRVQsIHByZXNlbnQpOworCX0KKworCWlmIChpbnRzdHMgJiAweDIpIHsKKwkJcHJfZGVidWcoIjpNQUQgaGVhZHBob25lIGRldGVjdGVkXG4iKTsKKwkJLyogc2VuZCBoZWFkcGhvbmUgZGV0ZWN0L3VuZGV0ZWN0ICovCisJCXByZXNlbnQgPSAodmFsdWUgPT0gMHgyKSA/IDEgOiAwOworCQlqYWNrX2V2ZW50X2ZsYWcgPSAxOworCQltamFjay0+amFjay50eXBlID0gU05EX0pBQ0tfSEVBRFBIT05FOworCQlocF9hdXRvbXV0ZShTTkRfSkFDS19IRUFEUEhPTkUsIHByZXNlbnQpOworCX0KKworCWlmIChpbnRzdHMgJiAweDQpIHsKKwkJcHJfZGVidWcoIk1BRCBzaG9ydCBwdXNoIGRldGVjdGVkXG4iKTsKKwkJLyogc2VuZCBzaG9ydCBwdXNoICovCisJCXByZXNlbnQgPSAxOworCQlqYWNrX2V2ZW50X2ZsYWcgPSAxOworCQlidXR0b25wcmVzc2ZsYWcgPSAxOworCQltamFjay0+amFjay50eXBlID0gTUlEX0pBQ0tfSFNfU0hPUlRfUFJFU1M7CisJfQorCisJaWYgKGludHN0cyAmIDB4OCkgeworCQlwcl9kZWJ1ZygiOk1BRCBsb25nIHB1c2ggZGV0ZWN0ZWRcbiIpOworCQkvKiBzZW5kIGxvbmcgcHVzaCAqLworCQlwcmVzZW50ID0gMTsKKwkJamFja19ldmVudF9mbGFnID0gMTsKKwkJYnV0dG9ucHJlc3NmbGFnID0gMTsKKwkJbWphY2stPmphY2sudHlwZSA9IE1JRF9KQUNLX0hTX0xPTkdfUFJFU1M7CisJfQorCisJaWYgKGphY2tfZXZlbnRfZmxhZykKKwkJc3N0X21hZF9zZW5kX2phY2tfcmVwb3J0KCZtamFjay0+amFjaywKKwkJCQkJYnV0dG9ucHJlc3NmbGFnLCBwcmVzZW50KTsKK30KK3N0YXRpYyBpbnQgbmNfamFja19lbmFibGUodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RydWN0IHNuZF9wbWljX29wcyBzbmRfcG1pY19vcHNfbmMgPSB7CisJLmlucHV0X2Rldl9pZCAgID0gICAgICAgRE1JQywKKwkub3V0cHV0X2Rldl9pZCAgPSAgICAgICBJTlRFUk5BTF9TUEtSLAogCS5zZXRfaW5wdXRfZGV2CT0JbmNfc2V0X3NlbGVjdGVkX2lucHV0X2RldiwKIAkuc2V0X291dHB1dF9kZXYgPQluY19zZXRfc2VsZWN0ZWRfb3V0cHV0X2RldiwKIAkuc2V0X211dGUJPQluY19zZXRfbXV0ZSwKQEAgLTEwMDMsNSArMTE1MCw3IEBACiAJLnBvd2VyX3VwX3BtaWNfY3AgPQluY19wb3dlcl91cF9jcCwKIAkucG93ZXJfZG93bl9wbWljX3BiID0JbmNfcG93ZXJfZG93bl9wYiwKIAkucG93ZXJfZG93bl9wbWljX2NwID0JbmNfcG93ZXJfZG93bl9jcCwKLQkucG93ZXJfZG93bl9wbWljID0JbmNfcG93ZXJfZG93biwKKwkucG93ZXJfZG93bl9wbWljCT0JbmNfcG93ZXJfZG93biwKKwkucG1pY19pcnFfY2IJPQluY19wbWljX2lycV9jYiwKKwkucG1pY19qYWNrX2VuYWJsZSA9CW5jX2phY2tfZW5hYmxlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvamFjay5oIGIvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9qYWNrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhNmU0ODMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9qYWNrLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0vKiBUZW1wb3Jhcnkgc3RhZ2luZyBnbHVlICovCi0KLSNpbmNsdWRlIDxzb3VuZC9qYWNrLmg+Ci0KLS8qIFRoZXNlIHdhbnQgYWRkaW5nIHRvIGphY2suaCBhcyBlbnVtIGVudHJpZXMgb25jZSBhcHByb3ZlZCAqLwotCi0jZGVmaW5lIFNORF9KQUNLX0hTX1NIT1JUX1BSRVNTIAkoU05EX0pBQ0tfSEVBRFNFVCB8IDB4MDAyMCkKLSNkZWZpbmUJU05EX0pBQ0tfSFNfTE9OR19QUkVTUwkJKFNORF9KQUNLX0hFQURTRVQgfCAweDAwNDApCi0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2tldWNyL2NvbW1vbi5oIGIvZHJpdmVycy9zdGFnaW5nL2tldWNyL2NvbW1vbi5oCmluZGV4IGI4N2RjN2EuLmNmMzQ3Y2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9jb21tb24uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcva2V1Y3IvY29tbW9uLmgKQEAgLTksNSArOSw3IEBACiB0eXBlZGVmIHUzMiBEV09SRDsKIHR5cGVkZWYgdTMyICpQRFdPUkQ7CiAKKyNkZWZpbmUgQllURV9NQVNLCTB4ZmYKKwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9pbml0LmMgYi9kcml2ZXJzL3N0YWdpbmcva2V1Y3IvaW5pdC5jCmluZGV4IDhhZjdjODQuLmI1YTg5MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9pbml0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2tldWNyL2luaXQuYwpAQCAtMTEsOSArMTEsNiBAQAogI2luY2x1ZGUgInRyYW5zcG9ydC5oIgogI2luY2x1ZGUgImluaXQuaCIKIAotQllURSBJc1NTRkRDQ29tcGxpYW5jZTsKLUJZVEUgSXNYRENvbXBsaWFuY2U7Ci0KIC8qCiAgKiBFTkVfSW5pdE1lZGlhKCk6CiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9pbml0LmggYi9kcml2ZXJzL3N0YWdpbmcva2V1Y3IvaW5pdC5oCmluZGV4IDk1M2EzMWUuLmY3MDkwNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9pbml0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2tldWNyL2luaXQuaApAQCAtNCw3ICs0LDcgQEAKIGV4dGVybiBpbnQgQ2hlY2tfRF9NZWRpYUZtdChzdHJ1Y3QgdXNfZGF0YSAqKTsKIAogCi1CWVRFIE1TX0luaXRbXSA9IHsKK3N0YXRpYyBCWVRFIE1TX0luaXRbXSA9IHsKIDB4OTAsIDB4RjAsIDB4MTUsIDB4RTAsIDB4RjUsIDB4MUMsIDB4MTEsIDB4MkMsCiAweDkwLCAweEZGLCAweDA5LCAweEUwLCAweDMwLCAweEUxLCAweDA2LCAweDkwLAogMHhGRiwgMHgyMywgMHg3NCwgMHg4MCwgMHhGMCwgMHg5MCwgMHhGRiwgMHgwOSwKQEAgLTI2Miw3ICsyNjIsNyBAQAogMHg0RCwgMHg1MywgMHgyRCwgMHg0OSwgMHg2RSwgMHg2OSwgMHg3NCwgMHgyMCwKIDB4MjAsIDB4MjAsIDB4MjAsIDB4MzEsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAgfTsKIAotQllURSBNU1BfUmR3cltdID0geworc3RhdGljIEJZVEUgTVNQX1Jkd3JbXSA9IHsKIDB4OTAsIDB4RjAsIDB4MTAsIDB4RTAsIDB4OTAsIDB4RUEsIDB4NDYsIDB4RjAsCiAweEI0LCAweDA0LCAweDAzLCAweDAyLCAweEUxLCAweDFFLCAweDkwLCAweEZGLAogMHgwOSwgMHhFMCwgMHgzMCwgMHhFMSwgMHgwNiwgMHg5MCwgMHhGRiwgMHgyMywKQEAgLTUyMCw3ICs1MjAsNyBAQAogMHg0RCwgMHg1MywgMHg1MCwgMHgyRCwgMHg1MiwgMHg1NywgMHgyMCwgMHgyMCwKIDB4MjAsIDB4MjAsIDB4MjAsIDB4MzEsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAgfTsKIAotQllURSBNU19SZHdyW10gPSB7CitzdGF0aWMgQllURSBNU19SZHdyW10gPSB7CiAweDkwLCAweEYwLCAweDEwLCAweEUwLCAweDkwLCAweEVBLCAweDQ2LCAweEYwLAogMHhCNCwgMHgwMiwgMHgwMiwgMHg4MCwgMHgzNiwgMHg5MCwgMHhGMCwgMHgxMSwKIDB4RTAsIDB4RjUsIDB4MTcsIDB4OTAsIDB4RjAsIDB4MTIsIDB4RTAsIDB4RjUsCkBAIC03NzgsNyArNzc4LDcgQEAKIDB4NEQsIDB4NTMsIDB4MkQsIDB4NTIsIDB4NTcsIDB4MjAsIDB4MjAsIDB4MjAsCiAweDIwLCAweDIwLCAweDIwLCAweDMxLCAweDMwLCAweDMwLCAweDMwLCAweDMwIH07CiAKLUJZVEUgU01fSW5pdFtdID0geworc3RhdGljIEJZVEUgU01fSW5pdFtdID0gewogMHg3QiwgMHgwOSwgMHg3QywgMHhGMCwgMHg3RCwgMHgxMCwgMHg3RSwgMHhFOSwKIDB4N0YsIDB4Q0MsIDB4MTIsIDB4MkYsIDB4NzEsIDB4OTAsIDB4RTksIDB4Q0MsCiAweEUwLCAweEI0LCAweDA3LCAweDEyLCAweDkwLCAweEZGLCAweDA5LCAweEUwLApAQCAtMTAzNiw3ICsxMDM2LDcgQEAKIDB4NTgsIDB4NDQsIDB4MkQsIDB4NDksIDB4NkUsIDB4NjksIDB4NzQsIDB4MjAsCiAweDIwLCAweDIwLCAweDIwLCAweDMxLCAweDMwLCAweDMwLCAweDMwLCAweDMxIH07CiAKLUJZVEUgU01fUmR3cltdID0geworc3RhdGljIEJZVEUgU01fUmR3cltdID0gewogMHg3QiwgMHgwQywgMHg3QywgMHhGMCwgMHg3RCwgMHgxMCwgMHg3RSwgMHhFOSwKIDB4N0YsIDB4Q0MsIDB4MTIsIDB4MkYsIDB4NzEsIDB4OTAsIDB4RTksIDB4QzMsCiAweEUwLCAweEI0LCAweDczLCAweDA0LCAweDc0LCAweDQwLCAweDgwLCAweDA5LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2tldWNyL21zLmMgYi9kcml2ZXJzL3N0YWdpbmcva2V1Y3IvbXMuYwppbmRleCBhNzEzNzIxLi4wODdhZDczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcva2V1Y3IvbXMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcva2V1Y3IvbXMuYwpAQCAtNiwxMyArNiwxNyBAQAogI2luY2x1ZGUgInRyYW5zcG9ydC5oIgogI2luY2x1ZGUgIm1zLmgiCiAKLS8vLS0tLS0gTVNfUmVhZGVyQ29weUJsb2NrKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1pbnQgTVNfUmVhZGVyQ29weUJsb2NrKHN0cnVjdCB1c19kYXRhICp1cywgV09SRCBvbGRwaHksIFdPUkQgbmV3cGh5LCBXT1JEIFBoeUJsb2NrQWRkciwgQllURSBQYWdlTnVtLCBQQllURSBidWYsIFdPUkQgbGVuKQorLyoKKyAqIE1TX1JlYWRlckNvcHlCbG9jaygpCisgKi8KK2ludCBNU19SZWFkZXJDb3B5QmxvY2soc3RydWN0IHVzX2RhdGEgKnVzLCBXT1JEIG9sZHBoeSwgV09SRCBuZXdwaHksCisJCQlXT1JEIFBoeUJsb2NrQWRkciwgQllURSBQYWdlTnVtLCBQQllURSBidWYsIFdPUkQgbGVuKQogewogCXN0cnVjdCBidWxrX2NiX3dyYXAgKmJjYiA9IChzdHJ1Y3QgYnVsa19jYl93cmFwICopIHVzLT5pb2J1ZjsKIAlpbnQJcmVzdWx0OwogCi0JLy9wcmludGsoIk1TX1JlYWRlckNvcHlCbG9jayAtLS0gUGh5QmxvY2tBZGRyID0gJXgsIFBhZ2VOdW0gPSAleFxuIiwgUGh5QmxvY2tBZGRyLCBQYWdlTnVtKTsKKwkvKiBwcmludGsoS0VSTl9JTkZPICJNU19SZWFkZXJDb3B5QmxvY2sgLS0tIFBoeUJsb2NrQWRkciA9ICV4LAorCQkJCVBhZ2VOdW0gPSAleFxuIiwgUGh5QmxvY2tBZGRyLCBQYWdlTnVtKTsgKi8KIAlyZXN1bHQgPSBFTkVfTG9hZEJpbkNvZGUodXMsIE1TX1JXX1BBVFRFUk4pOwogCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwpAQCAtMjUsMTAgKzI5LDEwIEBACiAJYmNiLT5DREJbMV0JCQk9IDB4MDg7CiAJYmNiLT5DREJbNF0JCQk9IChCWVRFKShvbGRwaHkpOwogCWJjYi0+Q0RCWzNdCQkJPSAoQllURSkob2xkcGh5Pj44KTsKLQliY2ItPkNEQlsyXQkJCT0gKEJZVEUpKG9sZHBoeT4+MTYpOworCWJjYi0+Q0RCWzJdCQkJPSAwOyAvKiAoQllURSkob2xkcGh5Pj4xNikgKi8KIAliY2ItPkNEQls3XQkJCT0gKEJZVEUpKG5ld3BoeSk7CiAJYmNiLT5DREJbNl0JCQk9IChCWVRFKShuZXdwaHk+PjgpOwotCWJjYi0+Q0RCWzVdCQkJPSAoQllURSkobmV3cGh5Pj4xNik7CisJYmNiLT5DREJbNV0JCQk9IDA7IC8qIChCWVRFKShuZXdwaHk+PjE2KSAqLwogCWJjYi0+Q0RCWzldCQkJPSAoQllURSkoUGh5QmxvY2tBZGRyKTsKIAliY2ItPkNEQls4XQkJCT0gKEJZVEUpKFBoeUJsb2NrQWRkcj4+OCk7CiAJYmNiLT5DREJbMTBdCQk9IFBhZ2VOdW07CkBAIC00MCwyMSArNDQsMjUgQEAKIAlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CiB9CiAKLS8vLS0tLS0gTVNfUmVhZGVyUmVhZFBhZ2UoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWludCBNU19SZWFkZXJSZWFkUGFnZShzdHJ1Y3QgdXNfZGF0YSAqdXMsIERXT1JEIFBoeUJsb2NrQWRkciwgQllURSBQYWdlTnVtLCBQRFdPUkQgUGFnZUJ1ZiwgTVNfTGliVHlwZUV4dGRhdCAqRXh0cmFEYXQpCisvKgorICogTVNfUmVhZGVyUmVhZFBhZ2UoKQorICovCitpbnQgTVNfUmVhZGVyUmVhZFBhZ2Uoc3RydWN0IHVzX2RhdGEgKnVzLCBEV09SRCBQaHlCbG9ja0FkZHIsCisJCUJZVEUgUGFnZU51bSwgUERXT1JEIFBhZ2VCdWYsIE1TX0xpYlR5cGVFeHRkYXQgKkV4dHJhRGF0KQogewogCXN0cnVjdCBidWxrX2NiX3dyYXAgKmJjYiA9IChzdHJ1Y3QgYnVsa19jYl93cmFwICopIHVzLT5pb2J1ZjsKIAlpbnQJcmVzdWx0OwogCUJZVEUJRXh0QnVmWzRdOwogCURXT1JECWJuID0gUGh5QmxvY2tBZGRyICogMHgyMCArIFBhZ2VOdW07CiAKLQkvL3ByaW50aygiTVMgLS0tIE1TX1JlYWRlclJlYWRQYWdlLCAgUGh5QmxvY2tBZGRyID0gJXgsIFBhZ2VOdW0gPSAleFxuIiwgUGh5QmxvY2tBZGRyLCBQYWdlTnVtKTsKKwkvKiBwcmludGsoS0VSTl9JTkZPICJNUyAtLS0gTVNfUmVhZGVyUmVhZFBhZ2UsCisJCVBoeUJsb2NrQWRkciA9ICV4LCBQYWdlTnVtID0gJXhcbiIsIFBoeUJsb2NrQWRkciwgUGFnZU51bSk7ICovCiAKIAlyZXN1bHQgPSBFTkVfTG9hZEJpbkNvZGUodXMsIE1TX1JXX1BBVFRFUk4pOwogCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwogCi0JLy8gUmVhZCBQYWdlIERhdGEKKwkvKiBSZWFkIFBhZ2UgRGF0YSAqLwogCW1lbXNldChiY2IsIDAsIHNpemVvZihzdHJ1Y3QgYnVsa19jYl93cmFwKSk7CiAJYmNiLT5TaWduYXR1cmUgPSBjcHVfdG9fbGUzMihVU19CVUxLX0NCX1NJR04pOwogCWJjYi0+RGF0YVRyYW5zZmVyTGVuZ3RoID0gMHgyMDA7CkBAIC02NSwxMiArNzMsMTIgQEAKIAliY2ItPkNEQls0XQkJCT0gKEJZVEUpKGJuPj44KTsKIAliY2ItPkNEQlszXQkJCT0gKEJZVEUpKGJuPj4xNik7CiAJYmNiLT5DREJbMl0JCQk9IChCWVRFKShibj4+MjQpOwotCQorCiAJcmVzdWx0ID0gRU5FX1NlbmRTY3NpQ21kKHVzLCBGRElSX1JFQUQsIFBhZ2VCdWYsIDApOwogCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwogCi0JLy8gUmVhZCBFeHRyYSBEYXRhCisJLyogUmVhZCBFeHRyYSBEYXRhICovCiAJbWVtc2V0KGJjYiwgMCwgc2l6ZW9mKHN0cnVjdCBidWxrX2NiX3dyYXApKTsKIAliY2ItPlNpZ25hdHVyZSA9IGNwdV90b19sZTMyKFVTX0JVTEtfQ0JfU0lHTik7CiAJYmNiLT5EYXRhVHJhbnNmZXJMZW5ndGggPSAweDQ7CkBAIC04OCw5ICs5Niw5IEBACiAJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CiAKIAlFeHRyYURhdC0+cmVzZXJ2ZWQgPSAwOwotCUV4dHJhRGF0LT5pbnRyICAgICA9IDB4ODA7ICAvLyBOb3QgeWV0LCCl/bCys10sILWlIGZpcmV3YXJlIHN1cHBvcnQKLQlFeHRyYURhdC0+c3RhdHVzMCAgPSAweDEwOyAgLy8gTm90IHlldCwgpf2wsrNdLCC1pSBmaXJld2FyZSBzdXBwb3J0Ci0JRXh0cmFEYXQtPnN0YXR1czEgID0gMHgwMDsgIC8vIE5vdCB5ZXQsIKX9sLKzXSwgtaUgZmlyZXdhcmUgc3VwcG9ydAorCUV4dHJhRGF0LT5pbnRyICAgICA9IDB4ODA7ICAvKiBOb3QgeWV0LGZpcmV3YXJlIHN1cHBvcnQgKi8KKwlFeHRyYURhdC0+c3RhdHVzMCAgPSAweDEwOyAgLyogTm90IHlldCxmaXJld2FyZSBzdXBwb3J0ICovCisJRXh0cmFEYXQtPnN0YXR1czEgID0gMHgwMDsgIC8qIE5vdCB5ZXQsZmlyZXdhcmUgc3VwcG9ydCAqLwogCUV4dHJhRGF0LT5vdnJmbGcgICA9IEV4dEJ1ZlswXTsKIAlFeHRyYURhdC0+bW5nZmxnICAgPSBFeHRCdWZbMV07CiAJRXh0cmFEYXQtPmxvZ2FkciAgID0gTWVtU3RpY2tMb2dBZGRyKEV4dEJ1ZlsyXSwgRXh0QnVmWzNdKTsKQEAgLTk4LDE0ICsxMDYsMTcgQEAKIAlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CiB9CiAKLS8vLS0tLS0gTVNfUmVhZGVyRXJhc2VCbG9jaygpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qCisgKiBNU19SZWFkZXJFcmFzZUJsb2NrKCkKKyAqLwogaW50IE1TX1JlYWRlckVyYXNlQmxvY2soc3RydWN0IHVzX2RhdGEgKnVzLCBEV09SRCBQaHlCbG9ja0FkZHIpCiB7CiAJc3RydWN0IGJ1bGtfY2Jfd3JhcCAqYmNiID0gKHN0cnVjdCBidWxrX2NiX3dyYXAgKikgdXMtPmlvYnVmOwogCWludAlyZXN1bHQ7CiAJRFdPUkQJYm4gPSBQaHlCbG9ja0FkZHI7CiAKLQkvL3ByaW50aygiTVMgLS0tIE1TX1JlYWRlckVyYXNlQmxvY2ssICBQaHlCbG9ja0FkZHIgPSAleFxuIiwgUGh5QmxvY2tBZGRyKTsKKwkvKiBwcmludGsoS0VSTl9JTkZPICJNUyAtLS0gTVNfUmVhZGVyRXJhc2VCbG9jaywKKwkJUGh5QmxvY2tBZGRyID0gJXhcbiIsIFBoeUJsb2NrQWRkcik7ICovCiAJcmVzdWx0ID0gRU5FX0xvYWRCaW5Db2RlKHVzLCBNU19SV19QQVRURVJOKTsKIAlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKQEAgLTExOSw3ICsxMzAsNyBAQAogCWJjYi0+Q0RCWzRdCQkJPSAoQllURSkoYm4pOwogCWJjYi0+Q0RCWzNdCQkJPSAoQllURSkoYm4+PjgpOwogCWJjYi0+Q0RCWzJdCQkJPSAoQllURSkoYm4+PjE2KTsKLQkKKwogCXJlc3VsdCA9IEVORV9TZW5kU2NzaUNtZCh1cywgRkRJUl9SRUFELCBOVUxMLCAwKTsKIAlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKQEAgLTEyNywyMyArMTM4LDI1IEBACiAJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOwogfQogCi0vLy0tLS0tIE1TX0NhcmRJbml0KCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgorICogTVNfQ2FyZEluaXQoKQorICovCiBpbnQgTVNfQ2FyZEluaXQoc3RydWN0IHVzX2RhdGEgKnVzKQogewotCURXT1JECQkJcmVzdWx0PTA7CisJRFdPUkQJCQlyZXN1bHQgPSAwOwogCVdPUkQJCQlUbXBCbG9jazsKIAlQQllURQkJCVBhZ2VCdWZmZXIwID0gTlVMTCwgUGFnZUJ1ZmZlcjEgPSBOVUxMOwogCU1TX0xpYlR5cGVFeHRkYXQJZXh0ZGF0OwogCVdPUkQJCQlidEJsazFzdCwgYnRCbGsybmQ7CiAJRFdPUkQJCQlidEJsazFzdEVycmVkOwogCi0JcHJpbnRrKCJNU19DYXJkSW5pdCBzdGFydFxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiTVNfQ2FyZEluaXQgc3RhcnRcbiIpOwogCiAJTVNfTGliRnJlZUFsbG9jYXRlZEFyZWEodXMpOwogCi0JaWYgKCgoUGFnZUJ1ZmZlcjAgPSBrbWFsbG9jKE1TX0JZVEVTX1BFUl9QQUdFLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgfHwKLQkgICAgKChQYWdlQnVmZmVyMSA9IGttYWxsb2MoTVNfQllURVNfUEVSX1BBR0UsIEdGUF9LRVJORUwpKSA9PSBOVUxMKSkKLQl7CisJUGFnZUJ1ZmZlcjAgPSBrbWFsbG9jKE1TX0JZVEVTX1BFUl9QQUdFLCBHRlBfS0VSTkVMKTsKKwlQYWdlQnVmZmVyMSA9IGttYWxsb2MoTVNfQllURVNfUEVSX1BBR0UsIEdGUF9LRVJORUwpOworCWlmICgoUGFnZUJ1ZmZlcjAgPT0gTlVMTCkgfHwgKFBhZ2VCdWZmZXIxID09IE5VTEwpKSB7CiAJCXJlc3VsdCA9IE1TX05PX01FTU9SWV9FUlJPUjsKIAkJZ290byBleGl0OwogCX0KQEAgLTE1MSwxNiArMTY0LDE2IEBACiAJYnRCbGsxc3QgPSBidEJsazJuZCA9IE1TX0xCX05PVF9VU0VEOwogCWJ0QmxrMXN0RXJyZWQgPSAwOwogCi0JZm9yIChUbXBCbG9jaz0wOyBUbXBCbG9jayA8IE1TX01BWF9JTklUSUFMX0VSUk9SX0JMT0NLUysyOyBUbXBCbG9jaysrKQotCXsKLQkJc3dpdGNoIChNU19SZWFkZXJSZWFkUGFnZSh1cywgVG1wQmxvY2ssIDAsIChEV09SRCAqKVBhZ2VCdWZmZXIwLCAmZXh0ZGF0KSkKLQkJewotCQkJY2FzZSBNU19TVEFUVVNfU1VDQ0VTUzoKKwlmb3IgKFRtcEJsb2NrID0gMDsgVG1wQmxvY2sgPCBNU19NQVhfSU5JVElBTF9FUlJPUl9CTE9DS1MrMjsKKwkJVG1wQmxvY2srKykgeworCQlzd2l0Y2ggKE1TX1JlYWRlclJlYWRQYWdlKHVzLCBUbXBCbG9jaywgMCwKKwkJCShEV09SRCAqKVBhZ2VCdWZmZXIwLCAmZXh0ZGF0KSkgeworCQljYXNlIE1TX1NUQVRVU19TVUNDRVNTOgogCQkJYnJlYWs7Ci0JCQljYXNlIE1TX1NUQVRVU19JTlRfRVJST1I6CisJCWNhc2UgTVNfU1RBVFVTX0lOVF9FUlJPUjoKIAkJCWJyZWFrOwotCQkJY2FzZSBNU19TVEFUVVNfRVJST1I6Ci0JCQlkZWZhdWx0OgorCQljYXNlIE1TX1NUQVRVU19FUlJPUjoKKwkJZGVmYXVsdDoKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTE3MywzOCArMTg2LDM3IEBACiAJCQkoKChNZW1TdGlja0Jvb3RCbG9ja1BhZ2UwICopUGFnZUJ1ZmZlcjApLT5oZWFkZXIuYk51bWJlck9mRGF0YUVudHJ5ICE9IE1TX0JPT1RfQkxPQ0tfREFUQV9FTlRSSUVTKSkKIAkJCQljb250aW51ZTsKIAotCQlpZiAoYnRCbGsxc3QgIT0gTVNfTEJfTk9UX1VTRUQpCi0JCXsKKwkJaWYgKGJ0QmxrMXN0ICE9IE1TX0xCX05PVF9VU0VEKSB7CiAJCQlidEJsazJuZCA9IFRtcEJsb2NrOwogCQkJYnJlYWs7CiAJCX0KIAogCQlidEJsazFzdCA9IFRtcEJsb2NrOwogCQltZW1jcHkoUGFnZUJ1ZmZlcjEsIFBhZ2VCdWZmZXIwLCBNU19CWVRFU19QRVJfUEFHRSk7Ci0JCWlmIChleHRkYXQuc3RhdHVzMSAmIChNU19SRUdfU1QxX0RURVIgfCBNU19SRUdfU1QxX0VYRVIgfCBNU19SRUdfU1QxX0ZHRVIpKQorCQlpZiAoZXh0ZGF0LnN0YXR1czEgJgorCQkJKE1TX1JFR19TVDFfRFRFUiB8IE1TX1JFR19TVDFfRVhFUiB8IE1TX1JFR19TVDFfRkdFUikpCiAJCQlidEJsazFzdEVycmVkID0gMTsKIAl9CiAKLQlpZiAoYnRCbGsxc3QgPT0gTVNfTEJfTk9UX1VTRUQpCi0JeworCWlmIChidEJsazFzdCA9PSBNU19MQl9OT1RfVVNFRCkgewogCQlyZXN1bHQgPSBNU19TVEFUVVNfRVJST1I7CiAJCWdvdG8gZXhpdDsKIAl9CiAKLQkvLyB3cml0ZSBwcm90ZWN0CisJLyogd3JpdGUgcHJvdGVjdCAqLwogCWlmICgoZXh0ZGF0LnN0YXR1czAgJiBNU19SRUdfU1QwX1dQKSA9PSBNU19SRUdfU1QwX1dQX09OKQogCQlNU19MaWJDdHJsU2V0KHVzLCBNU19MSUJfQ1RSTF9XUlBST1RFQ1QpOwogCiAJcmVzdWx0ID0gTVNfU1RBVFVTX0VSUk9SOwotCS8vIDFzdCBCb290IEJsb2NrCisJLyogMXN0IEJvb3QgQmxvY2sgKi8KIAlpZiAoYnRCbGsxc3RFcnJlZCA9PSAwKQotCQlyZXN1bHQgPSBNU19MaWJQcm9jZXNzQm9vdEJsb2NrKHVzLCBidEJsazFzdCwgUGFnZUJ1ZmZlcjEpOyAgIC8vIDFzdAotCS8vIDJuZCBCb290IEJsb2NrCisJCXJlc3VsdCA9IE1TX0xpYlByb2Nlc3NCb290QmxvY2sodXMsIGJ0QmxrMXN0LCBQYWdlQnVmZmVyMSk7CisJCS8qIDFzdCAqLworCS8qIDJuZCBCb290IEJsb2NrICovCiAJaWYgKHJlc3VsdCAmJiAoYnRCbGsybmQgIT0gTVNfTEJfTk9UX1VTRUQpKQogCQlyZXN1bHQgPSBNU19MaWJQcm9jZXNzQm9vdEJsb2NrKHVzLCBidEJsazJuZCwgUGFnZUJ1ZmZlcjApOwogCi0JaWYgKHJlc3VsdCkKLQl7CisJaWYgKHJlc3VsdCkgewogCQlyZXN1bHQgPSBNU19TVEFUVVNfRVJST1I7CiAJCWdvdG8gZXhpdDsKIAl9CkBAIC0yMTQsOCArMjI2LDcgQEAKIAogCXVzLT5NU19MaWIuUGh5MkxvZ01hcFtidEJsazFzdF0gPSBNU19MQl9CT09UX0JMT0NLOwogCi0JaWYgKGJ0QmxrMm5kICE9IE1TX0xCX05PVF9VU0VEKQotCXsKKwlpZiAoYnRCbGsybmQgIT0gTVNfTEJfTk9UX1VTRUQpIHsKIAkJZm9yIChUbXBCbG9jayA9IGJ0QmxrMXN0ICsgMTsgVG1wQmxvY2sgPCBidEJsazJuZDsgVG1wQmxvY2srKykKIAkJCXVzLT5NU19MaWIuUGh5MkxvZ01hcFtUbXBCbG9ja10gPSBNU19MQl9JTklUSUFMX0VSUk9SOwogCQl1cy0+TVNfTGliLlBoeTJMb2dNYXBbYnRCbGsybmRdID0gTVNfTEJfQk9PVF9CTE9DSzsKQEAgLTIyNSwxOCArMjM2LDE3IEBACiAJaWYgKHJlc3VsdCkKIAkJZ290byBleGl0OwogCi0JZm9yIChUbXBCbG9jaz1NU19QSFlTSUNBTF9CTE9DS1NfUEVSX1NFR01FTlQ7IFRtcEJsb2NrPHVzLT5NU19MaWIuTnVtYmVyT2ZQaHlCbG9jazsgVG1wQmxvY2srPU1TX1BIWVNJQ0FMX0JMT0NLU19QRVJfU0VHTUVOVCkKLQl7Ci0JCWlmIChNU19Db3VudEZyZWVCbG9jayh1cywgVG1wQmxvY2spID09IDApCi0JCXsKKwlmb3IgKFRtcEJsb2NrID0gTVNfUEhZU0lDQUxfQkxPQ0tTX1BFUl9TRUdNRU5UOworCQlUbXBCbG9jayA8IHVzLT5NU19MaWIuTnVtYmVyT2ZQaHlCbG9jazsKKwkJVG1wQmxvY2sgKz0gTVNfUEhZU0lDQUxfQkxPQ0tTX1BFUl9TRUdNRU5UKSB7CisJCWlmIChNU19Db3VudEZyZWVCbG9jayh1cywgVG1wQmxvY2spID09IDApIHsKIAkJCU1TX0xpYkN0cmxTZXQodXMsIE1TX0xJQl9DVFJMX1dSUFJPVEVDVCk7CiAJCQlicmVhazsKIAkJfQogCX0KIAotCS8vIHdyaXRlCi0JaWYgKE1TX0xpYkFsbG9jV3JpdGVCdWYodXMpKQotCXsKKwkvKiB3cml0ZSAqLworCWlmIChNU19MaWJBbGxvY1dyaXRlQnVmKHVzKSkgewogCQlyZXN1bHQgPSBNU19OT19NRU1PUllfRVJST1I7CiAJCWdvdG8gZXhpdDsKIAl9CkBAIC0yNDUsNDYgKzI1NSw0OCBAQAogCiBleGl0OgogCWtmcmVlKFBhZ2VCdWZmZXIxKTsKLSAgICAJa2ZyZWUoUGFnZUJ1ZmZlcjApOworCWtmcmVlKFBhZ2VCdWZmZXIwKTsKIAotCXByaW50aygiTVNfQ2FyZEluaXQgZW5kXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJNU19DYXJkSW5pdCBlbmRcbiIpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLS8vLS0tLS0gTVNfTGliQ2hlY2tEaXNhYmxlQmxvY2soKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qCisgKiBNU19MaWJDaGVja0Rpc2FibGVCbG9jaygpCisgKi8KIGludCBNU19MaWJDaGVja0Rpc2FibGVCbG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIFdPUkQgUGh5QmxvY2spCiB7Ci0JUFdPUkQJCQlQYWdlQnVmPU5VTEw7Ci0JRFdPUkQJCQlyZXN1bHQ9TVNfU1RBVFVTX1NVQ0NFU1M7Ci0JRFdPUkQJCQlibGssIGluZGV4PTA7CisJUFdPUkQJCQlQYWdlQnVmID0gTlVMTDsKKwlEV09SRAkJCXJlc3VsdCA9IE1TX1NUQVRVU19TVUNDRVNTOworCURXT1JECQkJYmxrLCBpbmRleCA9IDA7CiAJTVNfTGliVHlwZUV4dGRhdAlleHRkYXQ7CiAKLQlpZiAoKChQYWdlQnVmID0ga21hbGxvYyhNU19CWVRFU19QRVJfUEFHRSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpKQotCXsKKwlQYWdlQnVmID0ga21hbGxvYyhNU19CWVRFU19QRVJfUEFHRSwgR0ZQX0tFUk5FTCk7CisJaWYgKFBhZ2VCdWYgPT0gTlVMTCkgewogCQlyZXN1bHQgPSBNU19OT19NRU1PUllfRVJST1I7CiAJCWdvdG8gZXhpdDsKIAl9CiAKIAlNU19SZWFkZXJSZWFkUGFnZSh1cywgUGh5QmxvY2ssIDEsIChEV09SRCAqKVBhZ2VCdWYsICZleHRkYXQpOwotCWRvCi0JeworCWRvIHsKIAkJYmxrID0gYmUxNl90b19jcHUoUGFnZUJ1ZltpbmRleF0pOwogCQlpZiAoYmxrID09IE1TX0xCX05PVF9VU0VEKQogCQkJYnJlYWs7Ci0JCWlmIChibGsgPT0gdXMtPk1TX0xpYi5Mb2cyUGh5TWFwWzBdKQotCQl7CisJCWlmIChibGsgPT0gdXMtPk1TX0xpYi5Mb2cyUGh5TWFwWzBdKSB7CiAJCQlyZXN1bHQgPSBNU19FUlJPUl9GTEFTSF9SRUFEOwogCQkJYnJlYWs7CiAJCX0KIAkJaW5kZXgrKzsKLQl9IHdoaWxlKDEpOworCX0gd2hpbGUgKDEpOwogCiBleGl0OgogCWtmcmVlKFBhZ2VCdWYpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLS8vLS0tLS0gTVNfTGliRnJlZUFsbG9jYXRlZEFyZWEoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qCisgKiBNU19MaWJGcmVlQWxsb2NhdGVkQXJlYSgpCisgKi8KIHZvaWQgTVNfTGliRnJlZUFsbG9jYXRlZEFyZWEoc3RydWN0IHVzX2RhdGEgKnVzKQogewogCU1TX0xpYkZyZWVXcml0ZUJ1Zih1cyk7CkBAIC0zMDIsMjYgKzMxNCwzMSBAQAogCXVzLT5NU19MaWIuTnVtYmVyT2ZMb2dCbG9jawk9IDA7CiB9CiAKLS8vLS0tLS0gTVNfTGliRnJlZVdyaXRlQnVmKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qCisgKiBNU19MaWJGcmVlV3JpdGVCdWYoKQorICovCiB2b2lkIE1TX0xpYkZyZWVXcml0ZUJ1ZihzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7Ci0JdXMtPk1TX0xpYi53cnRibGsgPSAoV09SRCktMTsgLy9zZXQgdG8gLTEKLQlNU19MaWJDbGVhclBhZ2VNYXAodXMpOyAvLyBtZW1zZXQoKGZkb0V4dCktPk1TX0xpYi5wYWdlbWFwLCAwLCBzaXplb2YoKGZkb0V4dCktPk1TX0xpYi5wYWdlbWFwKSkKKwl1cy0+TVNfTGliLndydGJsayA9IChXT1JEKS0xOyAvKiBzZXQgdG8gLTEgKi8KIAotCWlmICh1cy0+TVNfTGliLmJsa3BhZykKLQl7Ci0JCWtmcmVlKChCWVRFICopKHVzLT5NU19MaWIuYmxrcGFnKSk7ICAvLyBBcm5vbGQgdGVzdCAuLi4KKwkvKiBtZW1zZXQoKGZkb0V4dCktPk1TX0xpYi5wYWdlbWFwLCAwLAorCQkJc2l6ZW9mKChmZG9FeHQpLT5NU19MaWIucGFnZW1hcCkpICovCisJTVNfTGliQ2xlYXJQYWdlTWFwKHVzKTsKKworCWlmICh1cy0+TVNfTGliLmJsa3BhZykgeworCQlrZnJlZSgoQllURSAqKSh1cy0+TVNfTGliLmJsa3BhZykpOyAgLyogQXJub2xkIHRlc3QgLi4uICovCiAJCXVzLT5NU19MaWIuYmxrcGFnID0gTlVMTDsKIAl9CiAKLQlpZiAodXMtPk1TX0xpYi5ibGtleHQpCi0JewotCQlrZnJlZSgoQllURSAqKSh1cy0+TVNfTGliLmJsa2V4dCkpOyAgLy8gQXJub2xkIHRlc3QgLi4uCisJaWYgKHVzLT5NU19MaWIuYmxrZXh0KSB7CisJCWtmcmVlKChCWVRFICopKHVzLT5NU19MaWIuYmxrZXh0KSk7ICAvKiBBcm5vbGQgdGVzdCAuLi4gKi8KIAkJdXMtPk1TX0xpYi5ibGtleHQgPSBOVUxMOwogCX0KIH0KIAotLy8tLS0tLSBNU19MaWJGcmVlTG9naWNhbE1hcCgpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLyoKKyAqIE1TX0xpYkZyZWVMb2dpY2FsTWFwKCkKKyAqLwogaW50IE1TX0xpYkZyZWVMb2dpY2FsTWFwKHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlrZnJlZSh1cy0+TVNfTGliLlBoeTJMb2dNYXApOwpAQCAtMzMwLDEwICszNDcsMTIgQEAKIAlrZnJlZSh1cy0+TVNfTGliLkxvZzJQaHlNYXApOwogCXVzLT5NU19MaWIuTG9nMlBoeU1hcCA9IE5VTEw7CiAKLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAotLy8tLS0tLSBNU19MaWJQcm9jZXNzQm9vdEJsb2NrKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLyoKKyAqIE1TX0xpYlByb2Nlc3NCb290QmxvY2soKQorICovCiBpbnQgTVNfTGliUHJvY2Vzc0Jvb3RCbG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIFdPUkQgUGh5QmxvY2ssIEJZVEUgKlBhZ2VEYXRhKQogewogCU1lbVN0aWNrQm9vdEJsb2NrU3lzRW50ICAqU3lzRW50cnk7CkBAIC0zNDMsMTQ0ICszNjIsMTY1IEBACiAJQllURSAgICAgICAgICAgICAgICAgICAgICpQYWdlQnVmZmVyOwogCU1TX0xpYlR5cGVFeHRkYXQgICAgICAgICBFeHRyYURhdGE7CiAKLQlpZiAoKFBhZ2VCdWZmZXIgPSBrbWFsbG9jKE1TX0JZVEVTX1BFUl9QQUdFLCBHRlBfS0VSTkVMKSk9PU5VTEwpCisKKwlQYWdlQnVmZmVyID0ga21hbGxvYyhNU19CWVRFU19QRVJfUEFHRSwgR0ZQX0tFUk5FTCk7CisJaWYgKFBhZ2VCdWZmZXIgPT0gTlVMTCkKIAkJcmV0dXJuIChEV09SRCktMTsKIAogCXJlc3VsdCA9IChEV09SRCktMTsKIAotCVN5c0luZm89ICYoKChNZW1TdGlja0Jvb3RCbG9ja1BhZ2UwICopUGFnZURhdGEpLT5zeXNpbmYpOworCVN5c0luZm8gPSAmKCgoTWVtU3RpY2tCb290QmxvY2tQYWdlMCAqKVBhZ2VEYXRhKS0+c3lzaW5mKTsKIAotCWlmICgoU3lzSW5mby0+Yk1zQ2xhc3MgIT0gTVNfU1lTSU5GX01TQ0xBU1NfVFlQRV8xKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKLQkJKGJlMTZfdG9fY3B1KFN5c0luZm8tPndQYWdlU2l6ZSkgIT0gTVNfU1lTSU5GX1BBR0VfU0laRSkgICAgICAgICAgICAgICAgICAgICAgIHx8CisJaWYgKChTeXNJbmZvLT5iTXNDbGFzcyAhPSBNU19TWVNJTkZfTVNDTEFTU19UWVBFXzEpIHx8CisJCShiZTE2X3RvX2NwdShTeXNJbmZvLT53UGFnZVNpemUpICE9IE1TX1NZU0lORl9QQUdFX1NJWkUpIHx8CiAJCSgoU3lzSW5mby0+YlNlY3VyaXR5U3VwcG9ydCAmIE1TX1NZU0lORl9TRUNVUklUWSkgPT0gTVNfU1lTSU5GX1NFQ1VSSVRZX1NVUFBPUlQpIHx8Ci0JCShTeXNJbmZvLT5iUmVzZXJ2ZWQxICE9IE1TX1NZU0lORl9SRVNFUlZFRDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8Ci0JCShTeXNJbmZvLT5iUmVzZXJ2ZWQyICE9IE1TX1NZU0lORl9SRVNFUlZFRDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8Ci0JCShTeXNJbmZvLT5iRm9ybWF0VHlwZSE9IE1TX1NZU0lORl9GT1JNQVRfRkFUKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisJCShTeXNJbmZvLT5iUmVzZXJ2ZWQxICE9IE1TX1NZU0lORl9SRVNFUlZFRDEpIHx8CisJCShTeXNJbmZvLT5iUmVzZXJ2ZWQyICE9IE1TX1NZU0lORl9SRVNFUlZFRDIpIHx8CisJCShTeXNJbmZvLT5iRm9ybWF0VHlwZSAhPSBNU19TWVNJTkZfRk9STUFUX0ZBVCkgfHwKIAkJKFN5c0luZm8tPmJVc2FnZSAhPSBNU19TWVNJTkZfVVNBR0VfR0VORVJBTCkpCiAJCWdvdG8gZXhpdDsKIAotCXN3aXRjaCAodXMtPk1TX0xpYi5jYXJkVHlwZSA9IFN5c0luZm8tPmJDYXJkVHlwZSkKLQl7Ci0JCWNhc2UgTVNfU1lTSU5GX0NBUkRUWVBFX1JET05MWToKLQkJCU1TX0xpYkN0cmxTZXQodXMsIE1TX0xJQl9DVFJMX1JET05MWSk7Ci0JCQlicmVhazsKLQkJY2FzZSBNU19TWVNJTkZfQ0FSRFRZUEVfUkRXUjoKLQkJCU1TX0xpYkN0cmxSZXNldCh1cywgTVNfTElCX0NUUkxfUkRPTkxZKTsKLQkJCWJyZWFrOwotCQljYXNlIE1TX1NZU0lORl9DQVJEVFlQRV9IWUJSSUQ6Ci0JCWRlZmF1bHQ6Ci0JCQlnb3RvIGV4aXQ7CisJc3dpdGNoICh1cy0+TVNfTGliLmNhcmRUeXBlID0gU3lzSW5mby0+YkNhcmRUeXBlKSB7CisJY2FzZSBNU19TWVNJTkZfQ0FSRFRZUEVfUkRPTkxZOgorCQlNU19MaWJDdHJsU2V0KHVzLCBNU19MSUJfQ1RSTF9SRE9OTFkpOworCQlicmVhazsKKwljYXNlIE1TX1NZU0lORl9DQVJEVFlQRV9SRFdSOgorCQlNU19MaWJDdHJsUmVzZXQodXMsIE1TX0xJQl9DVFJMX1JET05MWSk7CisJCWJyZWFrOworCWNhc2UgTVNfU1lTSU5GX0NBUkRUWVBFX0hZQlJJRDoKKwlkZWZhdWx0OgorCQlnb3RvIGV4aXQ7CiAJfQogCiAJdXMtPk1TX0xpYi5ibG9ja1NpemUgICAgICAgID0gYmUxNl90b19jcHUoU3lzSW5mby0+d0Jsb2NrU2l6ZSk7CiAJdXMtPk1TX0xpYi5OdW1iZXJPZlBoeUJsb2NrID0gYmUxNl90b19jcHUoU3lzSW5mby0+d0Jsb2NrTnVtYmVyKTsKLQl1cy0+TVNfTGliLk51bWJlck9mTG9nQmxvY2sgPSBiZTE2X3RvX2NwdShTeXNJbmZvLT53VG90YWxCbG9ja051bWJlcikgLSAyOwotCXVzLT5NU19MaWIuUGFnZXNQZXJCbG9jayAgICA9IHVzLT5NU19MaWIuYmxvY2tTaXplICogU0laRV9PRl9LSVJPIC8gTVNfQllURVNfUEVSX1BBR0U7Ci0JdXMtPk1TX0xpYi5OdW1iZXJPZlNlZ21lbnQgID0gdXMtPk1TX0xpYi5OdW1iZXJPZlBoeUJsb2NrIC8gTVNfUEhZU0lDQUxfQkxPQ0tTX1BFUl9TRUdNRU5UOworCXVzLT5NU19MaWIuTnVtYmVyT2ZMb2dCbG9jayA9IGJlMTZfdG9fY3B1KFN5c0luZm8tPndUb3RhbEJsb2NrTnVtYmVyKQorCQkJCQkJCQkJLTI7CisJdXMtPk1TX0xpYi5QYWdlc1BlckJsb2NrICAgID0gdXMtPk1TX0xpYi5ibG9ja1NpemUgKiBTSVpFX09GX0tJUk8gLworCQkJCQkJCU1TX0JZVEVTX1BFUl9QQUdFOworCXVzLT5NU19MaWIuTnVtYmVyT2ZTZWdtZW50ICA9IHVzLT5NU19MaWIuTnVtYmVyT2ZQaHlCbG9jayAvCisJCQkJCU1TX1BIWVNJQ0FMX0JMT0NLU19QRVJfU0VHTUVOVDsKIAl1cy0+TVNfTW9kZWwgICAgICAgICAgICAgICAgPSBiZTE2X3RvX2NwdShTeXNJbmZvLT53TWVtb3J5U2l6ZSk7CiAKLQlpZiAoTVNfTGliQWxsb2NMb2dpY2FsTWFwKHVzKSkJCQkvL0FsbG9jYXRlIHRvIGFsbCBudW1iZXIgb2YgbG9naWNhbGJsb2NrIGFuZCBwaHlzaWNhbGJsb2NrCisJLypBbGxvY2F0ZSB0byBhbGwgbnVtYmVyIG9mIGxvZ2ljYWxibG9jayBhbmQgcGh5c2ljYWxibG9jayAqLworCWlmIChNU19MaWJBbGxvY0xvZ2ljYWxNYXAodXMpKQogCQlnb3RvIGV4aXQ7CiAKLQlNU19MaWJTZXRCb290QmxvY2tNYXJrKHVzLCBQaHlCbG9jayk7CQkvL01hcmsgdGhlIGJvb2sgYmxvY2sKKwkvKiBNYXJrIHRoZSBib29rIGJsb2NrICovCisJTVNfTGliU2V0Qm9vdEJsb2NrTWFyayh1cywgUGh5QmxvY2spOwogCiAJU3lzRW50cnkgPSAmKCgoTWVtU3RpY2tCb290QmxvY2tQYWdlMCAqKVBhZ2VEYXRhKS0+c3lzZW50KTsKIAotCWZvciAoaT0wOyBpPE1TX05VTUJFUl9PRl9TWVNURU1fRU5UUlk7IGkrKykKLQl7CisJZm9yIChpID0gMDsgaSA8IE1TX05VTUJFUl9PRl9TWVNURU1fRU5UUlk7IGkrKykgewogCQlEV09SRCAgRW50cnlPZmZzZXQsIEVudHJ5U2l6ZTsKIAotCQlpZiAoKEVudHJ5T2Zmc2V0ID0gYmUzMl90b19jcHUoU3lzRW50cnktPmVudHJ5W2ldLmR3U3RhcnQpKSA9PSAweGZmZmZmZikKKwkJRW50cnlPZmZzZXQgPSBiZTMyX3RvX2NwdShTeXNFbnRyeS0+ZW50cnlbaV0uZHdTdGFydCk7CisKKwkJaWYgKEVudHJ5T2Zmc2V0ID09IDB4ZmZmZmZmKQorCQkJY29udGludWU7CisJCUVudHJ5U2l6ZSA9IGJlMzJfdG9fY3B1KFN5c0VudHJ5LT5lbnRyeVtpXS5kd1NpemUpOworCisJCWlmIChFbnRyeVNpemUgPT0gMCkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICgoRW50cnlTaXplID0gYmUzMl90b19jcHUoU3lzRW50cnktPmVudHJ5W2ldLmR3U2l6ZSkpID09IDApCisJCWlmIChFbnRyeU9mZnNldCArIE1TX0JZVEVTX1BFUl9QQUdFICsgRW50cnlTaXplID4KKwkJCXVzLT5NU19MaWIuYmxvY2tTaXplICogKERXT1JEKVNJWkVfT0ZfS0lSTykKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChFbnRyeU9mZnNldCArIE1TX0JZVEVTX1BFUl9QQUdFICsgRW50cnlTaXplID4gdXMtPk1TX0xpYi5ibG9ja1NpemUgKiAoRFdPUkQpU0laRV9PRl9LSVJPKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGkgPT0gMCkKLQkJeworCQlpZiAoaSA9PSAwKSB7CiAJCQlCWVRFICBQcmV2UGFnZU51bWJlciA9IDA7CiAJCQlXT1JEICBwaHlibGs7CiAKLQkJCWlmIChTeXNFbnRyeS0+ZW50cnlbaV0uYlR5cGUgIT0gTVNfU1lTRU5UX1RZUEVfSU5WQUxJRF9CTE9DSykKKwkJCWlmIChTeXNFbnRyeS0+ZW50cnlbaV0uYlR5cGUgIT0KKwkJCQlNU19TWVNFTlRfVFlQRV9JTlZBTElEX0JMT0NLKQogCQkJCWdvdG8gZXhpdDsKIAotCQkJd2hpbGUgKEVudHJ5U2l6ZSA+IDApCi0JCQl7Ci0JCQkJaWYgKChQYWdlTnVtYmVyID0gKEJZVEUpKEVudHJ5T2Zmc2V0IC8gTVNfQllURVNfUEVSX1BBR0UgKyAxKSkgIT0gUHJldlBhZ2VOdW1iZXIpCi0JCQkJewotCQkJCQlzd2l0Y2ggKE1TX1JlYWRlclJlYWRQYWdlKHVzLCBQaHlCbG9jaywgUGFnZU51bWJlciwgKERXT1JEICopUGFnZUJ1ZmZlciwgJkV4dHJhRGF0YSkpCi0JCQkJCXsKLQkJCQkJCWNhc2UgTVNfU1RBVFVTX1NVQ0NFU1M6Ci0JCQkJCQkJYnJlYWs7Ci0JCQkJCQljYXNlIE1TX1NUQVRVU19XUklURV9QUk9URUNUOgotCQkJCQkJY2FzZSBNU19FUlJPUl9GTEFTSF9SRUFEOgotCQkJCQkJY2FzZSBNU19TVEFUVVNfRVJST1I6Ci0JCQkJCQlkZWZhdWx0OgotCQkJCQkJCWdvdG8gZXhpdDsKKwkJCXdoaWxlIChFbnRyeVNpemUgPiAwKSB7CisKKwkJCQlQYWdlTnVtYmVyID0gKEJZVEUpKEVudHJ5T2Zmc2V0IC8KKwkJCQkJCQlNU19CWVRFU19QRVJfUEFHRSArIDEpOworCQkJCWlmIChQYWdlTnVtYmVyICE9IFByZXZQYWdlTnVtYmVyKSB7CisJCQkJCXN3aXRjaCAoTVNfUmVhZGVyUmVhZFBhZ2UodXMsIFBoeUJsb2NrLAorCQkJCQkJUGFnZU51bWJlciwgKERXT1JEICopUGFnZUJ1ZmZlciwKKwkJCQkJCSZFeHRyYURhdGEpKSB7CisJCQkJCWNhc2UgTVNfU1RBVFVTX1NVQ0NFU1M6CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBNU19TVEFUVVNfV1JJVEVfUFJPVEVDVDoKKwkJCQkJY2FzZSBNU19FUlJPUl9GTEFTSF9SRUFEOgorCQkJCQljYXNlIE1TX1NUQVRVU19FUlJPUjoKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCWdvdG8gZXhpdDsKIAkJCQkJfQogCiAJCQkJCVByZXZQYWdlTnVtYmVyID0gUGFnZU51bWJlcjsKIAkJCQl9CiAKLQkJCQlpZiAoKHBoeWJsayA9IGJlMTZfdG9fY3B1KCooV09SRCAqKShQYWdlQnVmZmVyICsgKEVudHJ5T2Zmc2V0ICUgTVNfQllURVNfUEVSX1BBR0UpKSkpIDwgMHgwZmZmKQorCQkJCXBoeWJsayA9IGJlMTZfdG9fY3B1KCooV09SRCAqKShQYWdlQnVmZmVyICsKKwkJCQkJKEVudHJ5T2Zmc2V0ICUgTVNfQllURVNfUEVSX1BBR0UpKSk7CisJCQkJaWYgKHBoeWJsayA8IDB4MGZmZikKIAkJCQkJTVNfTGliU2V0SW5pdGlhbEVycm9yQmxvY2sodXMsIHBoeWJsayk7CiAKIAkJCQlFbnRyeU9mZnNldCArPSAyOwogCQkJCUVudHJ5U2l6ZSAtPSAyOwogCQkJfQotCQl9Ci0JCWVsc2UgaWYgKGkgPT0gMSkKLQkJeyAgLy8gQ0lTL0lESQorCQl9IGVsc2UgaWYgKGkgPT0gMSkgeyAgLyogQ0lTL0lESSAqLwogCQkJTWVtU3RpY2tCb290QmxvY2tJREkgICppZGk7CiAKIAkJCWlmIChTeXNFbnRyeS0+ZW50cnlbaV0uYlR5cGUgIT0gTVNfU1lTRU5UX1RZUEVfQ0lTX0lESSkKIAkJCQlnb3RvIGV4aXQ7CiAKLQkJCXN3aXRjaCAoTVNfUmVhZGVyUmVhZFBhZ2UodXMsIFBoeUJsb2NrLCAoQllURSkoRW50cnlPZmZzZXQgLyBNU19CWVRFU19QRVJfUEFHRSArIDEpLCAoRFdPUkQgKilQYWdlQnVmZmVyLCAmRXh0cmFEYXRhKSkKLQkJCXsKLQkJCQljYXNlIE1TX1NUQVRVU19TVUNDRVNTOgotCQkJCQlicmVhazsKLQkJCQljYXNlIE1TX1NUQVRVU19XUklURV9QUk9URUNUOgotCQkJCWNhc2UgTVNfRVJST1JfRkxBU0hfUkVBRDoKLQkJCQljYXNlIE1TX1NUQVRVU19FUlJPUjoKLQkJCQlkZWZhdWx0OgotCQkJCQlnb3RvIGV4aXQ7CisJCQlzd2l0Y2ggKE1TX1JlYWRlclJlYWRQYWdlKHVzLCBQaHlCbG9jaywKKwkJCQkoQllURSkoRW50cnlPZmZzZXQgLyBNU19CWVRFU19QRVJfUEFHRSArIDEpLAorCQkJCShEV09SRCAqKVBhZ2VCdWZmZXIsICZFeHRyYURhdGEpKSB7CisJCQljYXNlIE1TX1NUQVRVU19TVUNDRVNTOgorCQkJCWJyZWFrOworCQkJY2FzZSBNU19TVEFUVVNfV1JJVEVfUFJPVEVDVDoKKwkJCWNhc2UgTVNfRVJST1JfRkxBU0hfUkVBRDoKKwkJCWNhc2UgTVNfU1RBVFVTX0VSUk9SOgorCQkJZGVmYXVsdDoKKwkJCQlnb3RvIGV4aXQ7CiAJCQl9CiAKLQkJCWlkaSA9ICYoKE1lbVN0aWNrQm9vdEJsb2NrQ0lTX0lESSAqKShQYWdlQnVmZmVyICsgKEVudHJ5T2Zmc2V0ICUgTVNfQllURVNfUEVSX1BBR0UpKSktPmlkaS5pZGk7Ci0JCQlpZiAobGUxNl90b19jcHUoaWRpLT53SURJZ2VuZXJhbENvbmZpZ3VyYXRpb24pICE9IE1TX0lESV9HRU5FUkFMX0NPTkYpCisJCQlpZGkgPSAmKChNZW1TdGlja0Jvb3RCbG9ja0NJU19JREkgKikoUGFnZUJ1ZmZlciArCisJCQkJKEVudHJ5T2Zmc2V0ICUgTVNfQllURVNfUEVSX1BBR0UpKSktPmlkaS5pZGk7CisJCQlpZiAobGUxNl90b19jcHUoaWRpLT53SURJZ2VuZXJhbENvbmZpZ3VyYXRpb24pICE9CisJCQkJCQkJTVNfSURJX0dFTkVSQUxfQ09ORikKIAkJCQlnb3RvIGV4aXQ7CiAKLQkJCXVzLT5NU19MaWIuQnl0ZXNQZXJTZWN0b3IgPSBsZTE2X3RvX2NwdShpZGktPndJRElieXRlc1BlclNlY3Rvcik7CisJCQl1cy0+TVNfTGliLkJ5dGVzUGVyU2VjdG9yID0KKwkJCQlsZTE2X3RvX2NwdShpZGktPndJRElieXRlc1BlclNlY3Rvcik7CiAJCQlpZiAodXMtPk1TX0xpYi5CeXRlc1BlclNlY3RvciAhPSBNU19CWVRFU19QRVJfUEFHRSkKIAkJCQlnb3RvIGV4aXQ7CiAJCX0KLQl9IC8vIEVuZCBmb3IgLi4KKwl9IC8qIEVuZCBmb3IgLi4gKi8KIAogCXJlc3VsdCA9IDA7CiAKIGV4aXQ6Ci0JaWYgKHJlc3VsdCkJCU1TX0xpYkZyZWVMb2dpY2FsTWFwKHVzKTsKKwlpZiAocmVzdWx0KQorCQlNU19MaWJGcmVlTG9naWNhbE1hcCh1cyk7CisKIAlrZnJlZShQYWdlQnVmZmVyKTsKIAogCXJlc3VsdCA9IDA7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotLy8tLS0tLSBNU19MaWJBbGxvY0xvZ2ljYWxNYXAoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLyoKKyAqIE1TX0xpYkFsbG9jTG9naWNhbE1hcCgpCisgKi8KIGludCBNU19MaWJBbGxvY0xvZ2ljYWxNYXAoc3RydWN0IHVzX2RhdGEgKnVzKQogewogCURXT1JEICBpOwogCiAKLQl1cy0+TVNfTGliLlBoeTJMb2dNYXAgPSBrbWFsbG9jKHVzLT5NU19MaWIuTnVtYmVyT2ZQaHlCbG9jayAqIHNpemVvZihXT1JEKSwgR0ZQX0tFUk5FTCk7Ci0JdXMtPk1TX0xpYi5Mb2cyUGh5TWFwID0ga21hbGxvYyh1cy0+TVNfTGliLk51bWJlck9mTG9nQmxvY2sgKiBzaXplb2YoV09SRCksIEdGUF9LRVJORUwpOworCXVzLT5NU19MaWIuUGh5MkxvZ01hcCA9IGttYWxsb2ModXMtPk1TX0xpYi5OdW1iZXJPZlBoeUJsb2NrICoKKwkJCQkJCXNpemVvZihXT1JEKSwgR0ZQX0tFUk5FTCk7CisJdXMtPk1TX0xpYi5Mb2cyUGh5TWFwID0ga21hbGxvYyh1cy0+TVNfTGliLk51bWJlck9mTG9nQmxvY2sgKgorCQkJCQkJc2l6ZW9mKFdPUkQpLCBHRlBfS0VSTkVMKTsKIAotCWlmICgodXMtPk1TX0xpYi5QaHkyTG9nTWFwID09IE5VTEwpIHx8ICh1cy0+TVNfTGliLkxvZzJQaHlNYXAgPT0gTlVMTCkpCi0JeworCWlmICgodXMtPk1TX0xpYi5QaHkyTG9nTWFwID09IE5VTEwpIHx8CisJCSh1cy0+TVNfTGliLkxvZzJQaHlNYXAgPT0gTlVMTCkpIHsKIAkJTVNfTGliRnJlZUxvZ2ljYWxNYXAodXMpOwogCQlyZXR1cm4gKERXT1JEKS0xOwogCX0KQEAgLTQ4OSwxMjggKzUyOSwxNDIgQEAKIAkJdXMtPk1TX0xpYi5QaHkyTG9nTWFwW2ldID0gTVNfTEJfTk9UX1VTRUQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgdXMtPk1TX0xpYi5OdW1iZXJPZkxvZ0Jsb2NrOyBpKyspCi0JdXMtPk1TX0xpYi5Mb2cyUGh5TWFwW2ldID0gTVNfTEJfTk9UX1VTRUQ7CisJCXVzLT5NU19MaWIuTG9nMlBoeU1hcFtpXSA9IE1TX0xCX05PVF9VU0VEOwogCiAJcmV0dXJuIDA7CiB9CiAKLS8vLS0tLS0gTVNfTGliU2V0Qm9vdEJsb2NrTWFyaygpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qCisgKiBNU19MaWJTZXRCb290QmxvY2tNYXJrKCkKKyAqLwogaW50IE1TX0xpYlNldEJvb3RCbG9ja01hcmsoc3RydWN0IHVzX2RhdGEgKnVzLCBXT1JEIHBoeWJsaykKIHsKLSAgICByZXR1cm4gTVNfTGliU2V0TG9naWNhbEJsb2NrTWFyayh1cywgcGh5YmxrLCBNU19MQl9CT09UX0JMT0NLKTsKKwlyZXR1cm4gTVNfTGliU2V0TG9naWNhbEJsb2NrTWFyayh1cywgcGh5YmxrLCBNU19MQl9CT09UX0JMT0NLKTsKIH0KIAotLy8tLS0tLSBNU19MaWJTZXRMb2dpY2FsQmxvY2tNYXJrKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLyoKKyAqIE1TX0xpYlNldExvZ2ljYWxCbG9ja01hcmsoKQorICovCiBpbnQgTVNfTGliU2V0TG9naWNhbEJsb2NrTWFyayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIFdPUkQgcGh5YmxrLCBXT1JEIG1hcmspCiB7Ci0gICAgaWYgKHBoeWJsayA+PSB1cy0+TVNfTGliLk51bWJlck9mUGh5QmxvY2spCi0gICAgICAgIHJldHVybiAoRFdPUkQpLTE7CisJaWYgKHBoeWJsayA+PSB1cy0+TVNfTGliLk51bWJlck9mUGh5QmxvY2spCisJCXJldHVybiAoRFdPUkQpLTE7CiAKLSAgICB1cy0+TVNfTGliLlBoeTJMb2dNYXBbcGh5YmxrXSA9IG1hcms7CisJdXMtPk1TX0xpYi5QaHkyTG9nTWFwW3BoeWJsa10gPSBtYXJrOwogCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKLS8vLS0tLS0gTVNfTGliU2V0SW5pdGlhbEVycm9yQmxvY2soKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qCisgKiBNU19MaWJTZXRJbml0aWFsRXJyb3JCbG9jaygpCisgKi8KIGludCBNU19MaWJTZXRJbml0aWFsRXJyb3JCbG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIFdPUkQgcGh5YmxrKQogewotICAgIHJldHVybiBNU19MaWJTZXRMb2dpY2FsQmxvY2tNYXJrKHVzLCBwaHlibGssIE1TX0xCX0lOSVRJQUxfRVJST1IpOworCXJldHVybiBNU19MaWJTZXRMb2dpY2FsQmxvY2tNYXJrKHVzLCBwaHlibGssIE1TX0xCX0lOSVRJQUxfRVJST1IpOwogfQogCi0vLy0tLS0tIE1TX0xpYlNjYW5Mb2dpY2FsQmxvY2tOdW1iZXIoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgorICogTVNfTGliU2NhbkxvZ2ljYWxCbG9ja051bWJlcigpCisgKi8KIGludCBNU19MaWJTY2FuTG9naWNhbEJsb2NrTnVtYmVyKHN0cnVjdCB1c19kYXRhICp1cywgV09SRCBidEJsazFzdCkKIHsKIAlXT1JECQkJUGh5QmxvY2ssIG5ld2JsaywgaTsKIAlXT1JECQkJTG9nU3RhcnQsIExvZ0VuZGU7CiAJTVNfTGliVHlwZUV4dGRhdAlleHRkYXQ7CiAJQllURQkJCWJ1ZlsweDIwMF07Ci0JRFdPUkQJCQljb3VudD0wLCBpbmRleD0wOworCURXT1JECQkJY291bnQgPSAwLCBpbmRleCA9IDA7CiAKLQlmb3IgKFBoeUJsb2NrID0gMDsgUGh5QmxvY2sgPCB1cy0+TVNfTGliLk51bWJlck9mUGh5QmxvY2s7KQotCXsKKwlmb3IgKFBoeUJsb2NrID0gMDsgUGh5QmxvY2sgPCB1cy0+TVNfTGliLk51bWJlck9mUGh5QmxvY2s7KSB7CiAJCU1TX0xpYlBoeTJMb2dSYW5nZShQaHlCbG9jaywgJkxvZ1N0YXJ0LCAmTG9nRW5kZSk7CiAKLQkJZm9yIChpPTA7IGk8TVNfUEhZU0lDQUxfQkxPQ0tTX1BFUl9TRUdNRU5UOyBpKyssIFBoeUJsb2NrKyspCi0JCXsKLQkJCXN3aXRjaCAoTVNfTGliQ29udjJMb2dpY2FsKHVzLCBQaHlCbG9jaykpCi0JCQl7Ci0JCQkJY2FzZSBNU19TVEFUVVNfRVJST1I6Ci0JCQkJCWNvbnRpbnVlOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCWJyZWFrOworCQlmb3IgKGkgPSAwOyBpIDwgTVNfUEhZU0lDQUxfQkxPQ0tTX1BFUl9TRUdNRU5UOworCQkJaSsrLCBQaHlCbG9jaysrKSB7CisJCQlzd2l0Y2ggKE1TX0xpYkNvbnYyTG9naWNhbCh1cywgUGh5QmxvY2spKSB7CisJCQljYXNlIE1TX1NUQVRVU19FUlJPUjoKKwkJCQljb250aW51ZTsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CiAJCQl9CiAKLQkJCWlmIChjb3VudCA9PSBQaHlCbG9jaykKLQkJCXsKLQkJCQlNU19MaWJSZWFkRXh0cmFCbG9jayh1cywgUGh5QmxvY2ssIDAsIDB4ODAsICZidWYpOworCQkJaWYgKGNvdW50ID09IFBoeUJsb2NrKSB7CisJCQkJTVNfTGliUmVhZEV4dHJhQmxvY2sodXMsIFBoeUJsb2NrLAorCQkJCQkJCTAsIDB4ODAsICZidWYpOwogCQkJCWNvdW50ICs9IDB4ODA7CiAJCQl9CiAJCQlpbmRleCA9IChQaHlCbG9jayAlIDB4ODApICogNDsKIAogCQkJZXh0ZGF0Lm92cmZsZyA9IGJ1ZltpbmRleF07CiAJCQlleHRkYXQubW5nZmxnID0gYnVmW2luZGV4KzFdOwotCQkJZXh0ZGF0LmxvZ2FkciA9IE1lbVN0aWNrTG9nQWRkcihidWZbaW5kZXgrMl0sIGJ1ZltpbmRleCszXSk7CisJCQlleHRkYXQubG9nYWRyID0gTWVtU3RpY2tMb2dBZGRyKGJ1ZltpbmRleCsyXSwKKwkJCQkJCQlidWZbaW5kZXgrM10pOwogCi0JCQlpZiAoKGV4dGRhdC5vdnJmbGcgJiBNU19SRUdfT1ZSX0JLU1QpICE9IE1TX1JFR19PVlJfQktTVF9PSykKLQkJCXsKKwkJCWlmICgoZXh0ZGF0Lm92cmZsZyAmIE1TX1JFR19PVlJfQktTVCkgIT0KKwkJCQlNU19SRUdfT1ZSX0JLU1RfT0spIHsKIAkJCQlNU19MaWJTZXRBY3F1aXJlZEVycm9yQmxvY2sodXMsIFBoeUJsb2NrKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAotCQkJaWYgKChleHRkYXQubW5nZmxnICYgTVNfUkVHX01OR19BVEZMRykgPT0gTVNfUkVHX01OR19BVEZMR19BVFRCTCkKLQkJCXsKKwkJCWlmICgoZXh0ZGF0Lm1uZ2ZsZyAmIE1TX1JFR19NTkdfQVRGTEcpID09CisJCQkJTVNfUkVHX01OR19BVEZMR19BVFRCTCkgewogCQkJCU1TX0xpYkVyYXNlUGh5QmxvY2sodXMsIFBoeUJsb2NrKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAotCQkJaWYgKGV4dGRhdC5sb2dhZHIgIT0gTVNfTEJfTk9UX1VTRUQpCi0JCQl7Ci0JCQkJaWYgKChleHRkYXQubG9nYWRyIDwgTG9nU3RhcnQpIHx8IChMb2dFbmRlIDw9IGV4dGRhdC5sb2dhZHIpKQotCQkJCXsKKwkJCWlmIChleHRkYXQubG9nYWRyICE9IE1TX0xCX05PVF9VU0VEKSB7CisJCQkJaWYgKChleHRkYXQubG9nYWRyIDwgTG9nU3RhcnQpIHx8CisJCQkJCShMb2dFbmRlIDw9IGV4dGRhdC5sb2dhZHIpKSB7CiAJCQkJCU1TX0xpYkVyYXNlUGh5QmxvY2sodXMsIFBoeUJsb2NrKTsKIAkJCQkJY29udGludWU7CiAJCQkJfQogCi0JCQkJaWYgKChuZXdibGsgPSBNU19MaWJDb252MlBoeXNpY2FsKHVzLCBleHRkYXQubG9nYWRyKSkgIT0gTVNfTEJfTk9UX1VTRUQpCi0JCQkJewotCQkJCQlpZiAoZXh0ZGF0LmxvZ2Fkcj09MCkKLQkJCQkJewotCQkJCQkJTVNfTGliU2V0TG9naWNhbFBhaXIodXMsIGV4dGRhdC5sb2dhZHIsIFBoeUJsb2NrKTsKLQkJCQkJCWlmICggTVNfTGliQ2hlY2tEaXNhYmxlQmxvY2sodXMsIGJ0QmxrMXN0KSApCi0JCQkJCQl7Ci0JCQkJCQkJTVNfTGliU2V0TG9naWNhbFBhaXIodXMsIGV4dGRhdC5sb2dhZHIsIG5ld2Jsayk7CisJCQkJbmV3YmxrID0gTVNfTGliQ29udjJQaHlzaWNhbCh1cywgZXh0ZGF0LmxvZ2Fkcik7CisKKwkJCQlpZiAobmV3YmxrICE9IE1TX0xCX05PVF9VU0VEKSB7CisJCQkJCWlmIChleHRkYXQubG9nYWRyID09IDApIHsKKwkJCQkJCU1TX0xpYlNldExvZ2ljYWxQYWlyKHVzLAorCQkJCQkJCQlleHRkYXQubG9nYWRyLAorCQkJCQkJCQlQaHlCbG9jayk7CisJCQkJCQlpZiAoTVNfTGliQ2hlY2tEaXNhYmxlQmxvY2sodXMsCisJCQkJCQkJYnRCbGsxc3QpKSB7CisJCQkJCQkJTVNfTGliU2V0TG9naWNhbFBhaXIodXMsCisJCQkJCQkJZXh0ZGF0LmxvZ2FkciwgbmV3YmxrKTsKIAkJCQkJCQljb250aW51ZTsKIAkJCQkJCX0KIAkJCQkJfQogCiAJCQkJCU1TX0xpYlJlYWRFeHRyYSh1cywgbmV3YmxrLCAwLCAmZXh0ZGF0KTsKLQkJCQkJaWYgKChleHRkYXQub3ZyZmxnICYgTVNfUkVHX09WUl9VRFNUKSA9PSBNU19SRUdfT1ZSX1VEU1RfVVBEQVRJTkcpCi0JCQkJCXsKLQkJCQkJCU1TX0xpYkVyYXNlUGh5QmxvY2sodXMsIFBoeUJsb2NrKTsKKwkJCQkJaWYgKChleHRkYXQub3ZyZmxnICYgTVNfUkVHX09WUl9VRFNUKSA9PQorCQkJCQkJTVNfUkVHX09WUl9VRFNUX1VQREFUSU5HKSB7CisJCQkJCQlNU19MaWJFcmFzZVBoeUJsb2NrKHVzLAorCQkJCQkJCQlQaHlCbG9jayk7CiAJCQkJCQljb250aW51ZTsKLQkJCQkJfQotCQkJCQllbHNlCisJCQkJCX0gZWxzZSB7CiAJCQkJCQlNU19MaWJFcmFzZVBoeUJsb2NrKHVzLCBuZXdibGspOworCQkJCQl9CiAJCQkJfQogCi0JCQkJTVNfTGliU2V0TG9naWNhbFBhaXIodXMsIGV4dGRhdC5sb2dhZHIsIFBoeUJsb2NrKTsKKwkJCQlNU19MaWJTZXRMb2dpY2FsUGFpcih1cywgZXh0ZGF0LmxvZ2FkciwKKwkJCQkJCQkJUGh5QmxvY2spOwogCQkJfQogCQl9Ci0JfSAvL0VuZCBmb3IgLi4uCisJfSAvKiBFbmQgZm9yIC4uLiAqLwogCiAJcmV0dXJuIE1TX1NUQVRVU19TVUNDRVNTOwogfQogCi0vLy0tLS0tIE1TX0xpYkFsbG9jV3JpdGVCdWYoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgorICogTVNfTGliQWxsb2NXcml0ZUJ1ZigpCisgKi8KIGludCBNU19MaWJBbGxvY1dyaXRlQnVmKHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAl1cy0+TVNfTGliLndydGJsayA9IChXT1JEKS0xOwogCi0JdXMtPk1TX0xpYi5ibGtwYWcgPSBrbWFsbG9jKHVzLT5NU19MaWIuUGFnZXNQZXJCbG9jayAqIHVzLT5NU19MaWIuQnl0ZXNQZXJTZWN0b3IsIEdGUF9LRVJORUwpOwotCXVzLT5NU19MaWIuYmxrZXh0ID0ga21hbGxvYyh1cy0+TVNfTGliLlBhZ2VzUGVyQmxvY2sgKiBzaXplb2YoTVNfTGliVHlwZUV4dGRhdCksIEdGUF9LRVJORUwpOworCXVzLT5NU19MaWIuYmxrcGFnID0ga21hbGxvYyh1cy0+TVNfTGliLlBhZ2VzUGVyQmxvY2sgKgorCQkJCQl1cy0+TVNfTGliLkJ5dGVzUGVyU2VjdG9yLCBHRlBfS0VSTkVMKTsKKwl1cy0+TVNfTGliLmJsa2V4dCA9IGttYWxsb2ModXMtPk1TX0xpYi5QYWdlc1BlckJsb2NrICoKKwkJCQkJc2l6ZW9mKE1TX0xpYlR5cGVFeHRkYXQpLCBHRlBfS0VSTkVMKTsKIAotCWlmICgodXMtPk1TX0xpYi5ibGtwYWcgPT0gTlVMTCkgfHwgKHVzLT5NU19MaWIuYmxrZXh0ID09IE5VTEwpKQotCXsKKwlpZiAoKHVzLT5NU19MaWIuYmxrcGFnID09IE5VTEwpIHx8ICh1cy0+TVNfTGliLmJsa2V4dCA9PSBOVUxMKSkgewogCQlNU19MaWJGcmVlV3JpdGVCdWYodXMpOwogCQlyZXR1cm4gKERXT1JEKS0xOwogCX0KQEAgLTYyMCw3ICs2NzQsOSBAQAogCXJldHVybiAwOwogfQogCi0vLy0tLS0tIE1TX0xpYkNsZWFyV3JpdGVCdWYoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgorICogTVNfTGliQ2xlYXJXcml0ZUJ1ZigpCisgKi8KIHZvaWQgTVNfTGliQ2xlYXJXcml0ZUJ1ZihzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJaW50IGk7CkBAIC02MjksMTIgKzY4NSwxMSBAQAogCU1TX0xpYkNsZWFyUGFnZU1hcCh1cyk7CiAKIAlpZiAodXMtPk1TX0xpYi5ibGtwYWcpCi0JCW1lbXNldCh1cy0+TVNfTGliLmJsa3BhZywgMHhmZiwgdXMtPk1TX0xpYi5QYWdlc1BlckJsb2NrICogdXMtPk1TX0xpYi5CeXRlc1BlclNlY3Rvcik7CisJCW1lbXNldCh1cy0+TVNfTGliLmJsa3BhZywgMHhmZiwKKwkJCXVzLT5NU19MaWIuUGFnZXNQZXJCbG9jayAqIHVzLT5NU19MaWIuQnl0ZXNQZXJTZWN0b3IpOwogCi0JaWYgKHVzLT5NU19MaWIuYmxrZXh0KQotCXsKLQkJZm9yIChpID0gMDsgaSA8IHVzLT5NU19MaWIuUGFnZXNQZXJCbG9jazsgaSsrKQotCQl7CisJaWYgKHVzLT5NU19MaWIuYmxrZXh0KSB7CisJCWZvciAoaSA9IDA7IGkgPCB1cy0+TVNfTGliLlBhZ2VzUGVyQmxvY2s7IGkrKykgewogCQkJdXMtPk1TX0xpYi5ibGtleHRbaV0uc3RhdHVzMSA9IE1TX1JFR19TVDFfREVGQVVMVDsKIAkJCXVzLT5NU19MaWIuYmxrZXh0W2ldLm92cmZsZyA9IE1TX1JFR19PVlJfREVGQVVMVDsKIAkJCXVzLT5NU19MaWIuYmxrZXh0W2ldLm1uZ2ZsZyA9IE1TX1JFR19NTkdfREVGQVVMVDsKQEAgLTY0MywzMiArNjk4LDM2IEBACiAJfQogfQogCi0vLy0tLS0tIE1TX0xpYlBoeTJMb2dSYW5nZSgpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgorICogTVNfTGliUGh5MkxvZ1JhbmdlKCkKKyAqLwogdm9pZCBNU19MaWJQaHkyTG9nUmFuZ2UoV09SRCBQaHlCbG9jaywgV09SRCAqTG9nU3RhcnQsIFdPUkQgKkxvZ0VuZGUpCiB7CiAJUGh5QmxvY2sgLz0gTVNfUEhZU0lDQUxfQkxPQ0tTX1BFUl9TRUdNRU5UOwogCi0JaWYgKFBoeUJsb2NrKQotCXsKLQkJKkxvZ1N0YXJ0ID0gTVNfTE9HSUNBTF9CTE9DS1NfSU5fMVNUX1NFR01FTlQgKyAoUGh5QmxvY2sgLSAxKSAqIE1TX0xPR0lDQUxfQkxPQ0tTX1BFUl9TRUdNRU5UOy8vNDk2Ci0JCSpMb2dFbmRlID0gKkxvZ1N0YXJ0ICsgTVNfTE9HSUNBTF9CTE9DS1NfUEVSX1NFR01FTlQ7Ly80OTYKLQl9Ci0JZWxzZQotCXsKKwlpZiAoUGh5QmxvY2spIHsKKwkJKkxvZ1N0YXJ0ID0gTVNfTE9HSUNBTF9CTE9DS1NfSU5fMVNUX1NFR01FTlQgKworCQkJKFBoeUJsb2NrIC0gMSkgKiBNU19MT0dJQ0FMX0JMT0NLU19QRVJfU0VHTUVOVDsvKjQ5NiovCisJCSpMb2dFbmRlID0gKkxvZ1N0YXJ0ICsgTVNfTE9HSUNBTF9CTE9DS1NfUEVSX1NFR01FTlQ7Lyo0OTYqLworCX0gZWxzZSB7CiAJCSpMb2dTdGFydCA9IDA7Ci0JCSpMb2dFbmRlID0gTVNfTE9HSUNBTF9CTE9DS1NfSU5fMVNUX1NFR01FTlQ7Ly80OTQKKwkJKkxvZ0VuZGUgPSBNU19MT0dJQ0FMX0JMT0NLU19JTl8xU1RfU0VHTUVOVDsvKjQ5NCovCiAJfQogfQogCi0vLy0tLS0tIE1TX0xpYlJlYWRFeHRyYUJsb2NrKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWludCBNU19MaWJSZWFkRXh0cmFCbG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIERXT1JEIFBoeUJsb2NrLCBCWVRFIFBhZ2VOdW0sIEJZVEUgYmxlbiwgdm9pZCAqYnVmKQorLyoKKyAqIE1TX0xpYlJlYWRFeHRyYUJsb2NrKCkKKyAqLworaW50IE1TX0xpYlJlYWRFeHRyYUJsb2NrKHN0cnVjdCB1c19kYXRhICp1cywgRFdPUkQgUGh5QmxvY2ssCisJCQkJQllURSBQYWdlTnVtLCBCWVRFIGJsZW4sIHZvaWQgKmJ1ZikKIHsKIAlzdHJ1Y3QgYnVsa19jYl93cmFwICpiY2IgPSAoc3RydWN0IGJ1bGtfY2Jfd3JhcCAqKSB1cy0+aW9idWY7CiAJaW50CXJlc3VsdDsKIAotCS8vcHJpbnRrKCJNU19MaWJSZWFkRXh0cmFCbG9jayAtLS0gUGh5QmxvY2sgPSAleCwgUGFnZU51bSA9ICV4LCBibGVuID0gJXhcbiIsIFBoeUJsb2NrLCBQYWdlTnVtLCBibGVuKTsKKwkvKiBwcmludGsoIk1TX0xpYlJlYWRFeHRyYUJsb2NrIC0tLSBQaHlCbG9jayA9ICV4LAorCQlQYWdlTnVtID0gJXgsIGJsZW4gPSAleFxuIiwgUGh5QmxvY2ssIFBhZ2VOdW0sIGJsZW4pOyAqLwogCi0JLy8gUmVhZCBFeHRyYSBEYXRhCisJLyogUmVhZCBFeHRyYSBEYXRhICovCiAJbWVtc2V0KGJjYiwgMCwgc2l6ZW9mKHN0cnVjdCBidWxrX2NiX3dyYXApKTsKIAliY2ItPlNpZ25hdHVyZSA9IGNwdV90b19sZTMyKFVTX0JVTEtfQ0JfU0lHTik7CiAJYmNiLT5EYXRhVHJhbnNmZXJMZW5ndGggPSAweDQgKiBibGVuOwpAQCAtNjg4LDE0ICs3NDcsMTggQEAKIAlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CiB9CiAKLS8vLS0tLS0gTVNfTGliUmVhZEV4dHJhKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWludCBNU19MaWJSZWFkRXh0cmEoc3RydWN0IHVzX2RhdGEgKnVzLCBEV09SRCBQaHlCbG9jaywgQllURSBQYWdlTnVtLCBNU19MaWJUeXBlRXh0ZGF0ICpFeHRyYURhdCkKKy8qCisgKiBNU19MaWJSZWFkRXh0cmEoKQorICovCitpbnQgTVNfTGliUmVhZEV4dHJhKHN0cnVjdCB1c19kYXRhICp1cywgRFdPUkQgUGh5QmxvY2ssCisJCUJZVEUgUGFnZU51bSwgTVNfTGliVHlwZUV4dGRhdCAqRXh0cmFEYXQpCiB7CiAJc3RydWN0IGJ1bGtfY2Jfd3JhcCAqYmNiID0gKHN0cnVjdCBidWxrX2NiX3dyYXAgKikgdXMtPmlvYnVmOwogCWludAlyZXN1bHQ7CiAJQllURQlFeHRCdWZbNF07CiAKLQkvL3ByaW50aygiTVNfTGliUmVhZEV4dHJhIC0tLSBQaHlCbG9jayA9ICV4LCBQYWdlTnVtID0gJXhcbiIsIFBoeUJsb2NrLCBQYWdlTnVtKTsKKwkvKiBwcmludGsoIk1TX0xpYlJlYWRFeHRyYSAtLS0gUGh5QmxvY2sgPSAleCwgUGFnZU51bSA9ICV4XG4iCisJCQkJCQksIFBoeUJsb2NrLCBQYWdlTnVtKTsgKi8KIAltZW1zZXQoYmNiLCAwLCBzaXplb2Yoc3RydWN0IGJ1bGtfY2Jfd3JhcCkpOwogCWJjYi0+U2lnbmF0dXJlID0gY3B1X3RvX2xlMzIoVVNfQlVMS19DQl9TSUdOKTsKIAliY2ItPkRhdGFUcmFuc2Zlckxlbmd0aCA9IDB4NDsKQEAgLTcwNywyMyArNzcwLDI1IEBACiAJYmNiLT5DREJbM10JCQk9IChCWVRFKShQaHlCbG9jaz4+OCk7CiAJYmNiLT5DREJbMl0JCQk9IChCWVRFKShQaHlCbG9jaz4+MTYpOwogCWJjYi0+Q0RCWzZdCQkJPSAweDAxOwotCQorCiAJcmVzdWx0ID0gRU5FX1NlbmRTY3NpQ21kKHVzLCBGRElSX1JFQUQsICZFeHRCdWYsIDApOwogCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwogCiAJRXh0cmFEYXQtPnJlc2VydmVkID0gMDsKLQlFeHRyYURhdC0+aW50ciAgICAgPSAweDgwOyAgLy8gTm90IHlldCwgd2FpdGluZyBmb3IgZmlyZXdhcmUgc3VwcG9ydAotCUV4dHJhRGF0LT5zdGF0dXMwICA9IDB4MTA7ICAvLyBOb3QgeWV0LCB3YWl0aW5nIGZvciBmaXJld2FyZSBzdXBwb3J0Ci0JRXh0cmFEYXQtPnN0YXR1czEgID0gMHgwMDsgIC8vIE5vdCB5ZXQsIHdhaXRpbmcgZm9yIGZpcmV3YXJlIHN1cHBvcnQKKwlFeHRyYURhdC0+aW50ciAgICAgPSAweDgwOyAgLyogTm90IHlldCwgd2FpdGluZyBmb3IgZmlyZXdhcmUgc3VwcG9ydCAqLworCUV4dHJhRGF0LT5zdGF0dXMwICA9IDB4MTA7ICAvKiBOb3QgeWV0LCB3YWl0aW5nIGZvciBmaXJld2FyZSBzdXBwb3J0ICovCisJRXh0cmFEYXQtPnN0YXR1czEgID0gMHgwMDsgIC8qIE5vdCB5ZXQsIHdhaXRpbmcgZm9yIGZpcmV3YXJlIHN1cHBvcnQgKi8KIAlFeHRyYURhdC0+b3ZyZmxnICAgPSBFeHRCdWZbMF07CiAJRXh0cmFEYXQtPm1uZ2ZsZyAgID0gRXh0QnVmWzFdOwogCUV4dHJhRGF0LT5sb2dhZHIgICA9IE1lbVN0aWNrTG9nQWRkcihFeHRCdWZbMl0sIEV4dEJ1ZlszXSk7Ci0JCisKIAlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CiB9CiAKLS8vLS0tLS0gTVNfTGliU2V0QWNxdWlyZWRFcnJvckJsb2NrKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qCisgKiBNU19MaWJTZXRBY3F1aXJlZEVycm9yQmxvY2soKQorICovCiBpbnQgTVNfTGliU2V0QWNxdWlyZWRFcnJvckJsb2NrKHN0cnVjdCB1c19kYXRhICp1cywgV09SRCBwaHlibGspCiB7CiAJV09SRCBsb2c7CkBAIC03MzEsNyArNzk2LDkgQEAKIAlpZiAocGh5YmxrID49IHVzLT5NU19MaWIuTnVtYmVyT2ZQaHlCbG9jaykKIAkJcmV0dXJuIChEV09SRCktMTsKIAotCWlmICgobG9nID0gdXMtPk1TX0xpYi5QaHkyTG9nTWFwW3BoeWJsa10pIDwgdXMtPk1TX0xpYi5OdW1iZXJPZkxvZ0Jsb2NrKQorCWxvZyA9IHVzLT5NU19MaWIuUGh5MkxvZ01hcFtwaHlibGtdOworCisJaWYgKGxvZyAgPCB1cy0+TVNfTGliLk51bWJlck9mTG9nQmxvY2spCiAJCXVzLT5NU19MaWIuTG9nMlBoeU1hcFtsb2ddID0gTVNfTEJfTk9UX1VTRUQ7CiAKIAlpZiAodXMtPk1TX0xpYi5QaHkyTG9nTWFwW3BoeWJsa10gIT0gTVNfTEJfSU5JVElBTF9FUlJPUikKQEAgLTc0MCw3ICs4MDcsOSBAQAogCXJldHVybiAwOwogfQogCi0vLy0tLS0tIE1TX0xpYkVyYXNlUGh5QmxvY2soKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgorICogTVNfTGliRXJhc2VQaHlCbG9jaygpCisgKi8KIGludCBNU19MaWJFcmFzZVBoeUJsb2NrKHN0cnVjdCB1c19kYXRhICp1cywgV09SRCBwaHlibGspCiB7CiAJV09SRCAgbG9nOwpAQCAtNzQ4LDI3ICs4MTcsMjcgQEAKIAlpZiAocGh5YmxrID49IHVzLT5NU19MaWIuTnVtYmVyT2ZQaHlCbG9jaykKIAkJcmV0dXJuIE1TX1NUQVRVU19FUlJPUjsKIAotCWlmICgobG9nID0gdXMtPk1TX0xpYi5QaHkyTG9nTWFwW3BoeWJsa10pIDwgdXMtPk1TX0xpYi5OdW1iZXJPZkxvZ0Jsb2NrKQorCWxvZyA9IHVzLT5NU19MaWIuUGh5MkxvZ01hcFtwaHlibGtdOworCisJaWYgKGxvZyA8IHVzLT5NU19MaWIuTnVtYmVyT2ZMb2dCbG9jaykKIAkJdXMtPk1TX0xpYi5Mb2cyUGh5TWFwW2xvZ10gPSBNU19MQl9OT1RfVVNFRDsKIAogCXVzLT5NU19MaWIuUGh5MkxvZ01hcFtwaHlibGtdID0gTVNfTEJfTk9UX1VTRUQ7CiAKLQlpZiAoTVNfTGliSXNXcml0YWJsZSh1cykpCi0JewotCQlzd2l0Y2ggKE1TX1JlYWRlckVyYXNlQmxvY2sodXMsIHBoeWJsaykpCi0JCXsKLQkJCWNhc2UgTVNfU1RBVFVTX1NVQ0NFU1M6Ci0JCQkJdXMtPk1TX0xpYi5QaHkyTG9nTWFwW3BoeWJsa10gPSBNU19MQl9OT1RfVVNFRF9FUkFTRUQ7Ci0JCQkJcmV0dXJuIE1TX1NUQVRVU19TVUNDRVNTOwotCQkJY2FzZSBNU19FUlJPUl9GTEFTSF9FUkFTRToKLQkJCWNhc2UgTVNfU1RBVFVTX0lOVF9FUlJPUiA6Ci0JCQkJTVNfTGliRXJyb3JQaHlCbG9jayh1cywgcGh5YmxrKTsKLQkJCQlyZXR1cm4gTVNfRVJST1JfRkxBU0hfRVJBU0U7Ci0JCQljYXNlIE1TX1NUQVRVU19FUlJPUjoKLQkJCWRlZmF1bHQ6Ci0JCQkJTVNfTGliQ3RybFNldCh1cywgTVNfTElCX0NUUkxfUkRPTkxZKTsKLQkJCQlNU19MaWJTZXRBY3F1aXJlZEVycm9yQmxvY2sodXMsIHBoeWJsayk7Ci0JCQkJcmV0dXJuIE1TX1NUQVRVU19FUlJPUjsKKwlpZiAoTVNfTGliSXNXcml0YWJsZSh1cykpIHsKKwkJc3dpdGNoIChNU19SZWFkZXJFcmFzZUJsb2NrKHVzLCBwaHlibGspKSB7CisJCWNhc2UgTVNfU1RBVFVTX1NVQ0NFU1M6CisJCQl1cy0+TVNfTGliLlBoeTJMb2dNYXBbcGh5YmxrXSA9IE1TX0xCX05PVF9VU0VEX0VSQVNFRDsKKwkJCXJldHVybiBNU19TVEFUVVNfU1VDQ0VTUzsKKwkJY2FzZSBNU19FUlJPUl9GTEFTSF9FUkFTRToKKwkJY2FzZSBNU19TVEFUVVNfSU5UX0VSUk9SOgorCQkJTVNfTGliRXJyb3JQaHlCbG9jayh1cywgcGh5YmxrKTsKKwkJCXJldHVybiBNU19FUlJPUl9GTEFTSF9FUkFTRTsKKwkJY2FzZSBNU19TVEFUVVNfRVJST1I6CisJCWRlZmF1bHQ6CisJCQlNU19MaWJDdHJsU2V0KHVzLCBNU19MSUJfQ1RSTF9SRE9OTFkpOworCQkJTVNfTGliU2V0QWNxdWlyZWRFcnJvckJsb2NrKHVzLCBwaHlibGspOworCQkJcmV0dXJuIE1TX1NUQVRVU19FUlJPUjsKIAkJfQogCX0KIApAQCAtNzc3LDI4ICs4NDYsMzUgQEAKIAlyZXR1cm4gTVNfU1RBVFVTX1NVQ0NFU1M7CiB9CiAKLS8vLS0tLS0gTVNfTGliRXJyb3JQaHlCbG9jaygpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qCisgKiBNU19MaWJFcnJvclBoeUJsb2NrKCkKKyAqLwogaW50IE1TX0xpYkVycm9yUGh5QmxvY2soc3RydWN0IHVzX2RhdGEgKnVzLCBXT1JEIHBoeWJsaykKIHsKLSAgICBpZiAocGh5YmxrID49IHVzLT5NU19MaWIuTnVtYmVyT2ZQaHlCbG9jaykKLSAgICAgICAgcmV0dXJuIE1TX1NUQVRVU19FUlJPUjsKKwlpZiAocGh5YmxrID49IHVzLT5NU19MaWIuTnVtYmVyT2ZQaHlCbG9jaykKKwkJcmV0dXJuIE1TX1NUQVRVU19FUlJPUjsKIAotICAgIE1TX0xpYlNldEFjcXVpcmVkRXJyb3JCbG9jayh1cywgcGh5YmxrKTsKKwlNU19MaWJTZXRBY3F1aXJlZEVycm9yQmxvY2sodXMsIHBoeWJsayk7CiAKLSAgICBpZiAoTVNfTGliSXNXcml0YWJsZSh1cykpCi0gICAgICAgIHJldHVybiBNU19MaWJPdmVyd3JpdGVFeHRyYSh1cywgcGh5YmxrLCAwLCAoQllURSkofk1TX1JFR19PVlJfQktTVCkpOworCWlmIChNU19MaWJJc1dyaXRhYmxlKHVzKSkKKwkJcmV0dXJuIE1TX0xpYk92ZXJ3cml0ZUV4dHJhKHVzLCBwaHlibGssIDAsCisJCQkJKEJZVEUpKH5NU19SRUdfT1ZSX0JLU1QgJiBCWVRFX01BU0spKTsKIAogCi0gICAgcmV0dXJuIE1TX1NUQVRVU19TVUNDRVNTOworCXJldHVybiBNU19TVEFUVVNfU1VDQ0VTUzsKIH0KIAotLy8tLS0tLSBNU19MaWJPdmVyd3JpdGVFeHRyYSgpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotaW50IE1TX0xpYk92ZXJ3cml0ZUV4dHJhKHN0cnVjdCB1c19kYXRhICp1cywgRFdPUkQgUGh5QmxvY2tBZGRyLCBCWVRFIFBhZ2VOdW0sIEJZVEUgT3ZlcndyaXRlRmxhZykKKy8qCisgKiBNU19MaWJPdmVyd3JpdGVFeHRyYSgpCisgKi8KK2ludCBNU19MaWJPdmVyd3JpdGVFeHRyYShzdHJ1Y3QgdXNfZGF0YSAqdXMsIERXT1JEIFBoeUJsb2NrQWRkciwKKwkJCQlCWVRFIFBhZ2VOdW0sIEJZVEUgT3ZlcndyaXRlRmxhZykKIHsKIAlzdHJ1Y3QgYnVsa19jYl93cmFwICpiY2IgPSAoc3RydWN0IGJ1bGtfY2Jfd3JhcCAqKSB1cy0+aW9idWY7CiAJaW50CXJlc3VsdDsKIAotCS8vcHJpbnRrKCJNUyAtLS0gTVNfTGliT3ZlcndyaXRlRXh0cmEsICBQaHlCbG9ja0FkZHIgPSAleCwgUGFnZU51bSA9ICV4XG4iLCBQaHlCbG9ja0FkZHIsIFBhZ2VOdW0pOworCS8qIHByaW50aygiTVMgLS0tIE1TX0xpYk92ZXJ3cml0ZUV4dHJhLCAgXAorCQlQaHlCbG9ja0FkZHIgPSAleCwgUGFnZU51bSA9ICV4XG4iLCBQaHlCbG9ja0FkZHIsIFBhZ2VOdW0pOyAqLwogCXJlc3VsdCA9IEVORV9Mb2FkQmluQ29kZSh1cywgTVNfUldfUEFUVEVSTik7CiAJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCiAJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CkBAIC04MTcsNyArODkzLDcgQEAKIAliY2ItPkNEQls3XQkJCT0gMHhGRjsKIAliY2ItPkNEQls4XQkJCT0gMHhGRjsKIAliY2ItPkNEQls5XQkJCT0gMHhGRjsKLQkKKwogCXJlc3VsdCA9IEVORV9TZW5kU2NzaUNtZCh1cywgRkRJUl9SRUFELCBOVUxMLCAwKTsKIAlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKQEAgLTgyNSwxMyArOTAxLDE2IEBACiAJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOwogfQogCi0vLy0tLS0tIE1TX0xpYkZvcmNlU2V0TG9naWNhbFBhaXIoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgorICogTVNfTGliRm9yY2VTZXRMb2dpY2FsUGFpcigpCisgKi8KIGludCBNU19MaWJGb3JjZVNldExvZ2ljYWxQYWlyKHN0cnVjdCB1c19kYXRhICp1cywgV09SRCBsb2dibGssIFdPUkQgcGh5YmxrKQogewogCWlmIChsb2dibGsgPT0gTVNfTEJfTk9UX1VTRUQpCiAJCXJldHVybiAwOwogCi0JaWYgKChsb2dibGsgPj0gdXMtPk1TX0xpYi5OdW1iZXJPZkxvZ0Jsb2NrKSB8fCAocGh5YmxrID49IHVzLT5NU19MaWIuTnVtYmVyT2ZQaHlCbG9jaykpCisJaWYgKChsb2dibGsgPj0gdXMtPk1TX0xpYi5OdW1iZXJPZkxvZ0Jsb2NrKSB8fAorCQkocGh5YmxrID49IHVzLT5NU19MaWIuTnVtYmVyT2ZQaHlCbG9jaykpCiAJCXJldHVybiAoRFdPUkQpLTE7CiAKIAl1cy0+TVNfTGliLlBoeTJMb2dNYXBbcGh5YmxrXSA9IGxvZ2JsazsKQEAgLTg0MCwxMCArOTE5LDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8vLS0tLS0gTVNfTGliU2V0TG9naWNhbFBhaXIoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qCisgKiBNU19MaWJTZXRMb2dpY2FsUGFpcigpCisgKi8KIGludCBNU19MaWJTZXRMb2dpY2FsUGFpcihzdHJ1Y3QgdXNfZGF0YSAqdXMsIFdPUkQgbG9nYmxrLCBXT1JEIHBoeWJsaykKIHsKLQlpZiAoKGxvZ2JsayA+PSB1cy0+TVNfTGliLk51bWJlck9mTG9nQmxvY2spIHx8IChwaHlibGsgPj0gdXMtPk1TX0xpYi5OdW1iZXJPZlBoeUJsb2NrKSkKKwlpZiAoKGxvZ2JsayA+PSB1cy0+TVNfTGliLk51bWJlck9mTG9nQmxvY2spIHx8CisJCShwaHlibGsgPj0gdXMtPk1TX0xpYi5OdW1iZXJPZlBoeUJsb2NrKSkKIAkJcmV0dXJuIChEV09SRCktMTsKIAogCXVzLT5NU19MaWIuUGh5MkxvZ01hcFtwaHlibGtdID0gbG9nYmxrOwpAQCAtODUyLDI4ICs5MzQsMzAgQEAKIAlyZXR1cm4gMDsKIH0KIAotLy8tLS0tLSBNU19Db3VudEZyZWVCbG9jaygpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLyoKKyAqIE1TX0NvdW50RnJlZUJsb2NrKCkKKyAqLwogaW50IE1TX0NvdW50RnJlZUJsb2NrKHN0cnVjdCB1c19kYXRhICp1cywgV09SRCBQaHlCbG9jaykKIHsKIAlEV09SRCBFbmRlLCBDb3VudDsKIAogCUVuZGUgPSBQaHlCbG9jayArIE1TX1BIWVNJQ0FMX0JMT0NLU19QRVJfU0VHTUVOVDsKLQlmb3IgKENvdW50ID0gMDsgUGh5QmxvY2sgPCBFbmRlOyBQaHlCbG9jaysrKQotCXsKLQkJc3dpdGNoICh1cy0+TVNfTGliLlBoeTJMb2dNYXBbUGh5QmxvY2tdKQotCQl7Ci0JCQljYXNlIE1TX0xCX05PVF9VU0VEOgotCQkJY2FzZSBNU19MQl9OT1RfVVNFRF9FUkFTRUQ6Ci0JCQkJQ291bnQrKzsKLQkJCWRlZmF1bHQ6Ci0JCQkJYnJlYWs7CisJZm9yIChDb3VudCA9IDA7IFBoeUJsb2NrIDwgRW5kZTsgUGh5QmxvY2srKykgeworCQlzd2l0Y2ggKHVzLT5NU19MaWIuUGh5MkxvZ01hcFtQaHlCbG9ja10pIHsKKwkJY2FzZSBNU19MQl9OT1RfVVNFRDoKKwkJY2FzZSBNU19MQl9OT1RfVVNFRF9FUkFTRUQ6CisJCQlDb3VudCsrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CiAJCX0KIAl9CiAKIAlyZXR1cm4gQ291bnQ7CiB9CiAKLS8vLS0tLS0gTVNfTGliU2VhcmNoQmxvY2tGcm9tUGh5c2ljYWwoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qCisgKiBNU19MaWJTZWFyY2hCbG9ja0Zyb21QaHlzaWNhbCgpCisgKi8KIGludCBNU19MaWJTZWFyY2hCbG9ja0Zyb21QaHlzaWNhbChzdHJ1Y3QgdXNfZGF0YSAqdXMsIFdPUkQgcGh5YmxrKQogewogCVdPUkQJCQlOZXdibGs7CkBAIC04ODMsNzAgKzk2Nyw2OCBAQAogCWlmIChwaHlibGsgPj0gdXMtPk1TX0xpYi5OdW1iZXJPZlBoeUJsb2NrKQogCQlyZXR1cm4gTVNfTEJfRVJST1I7CiAKLQlmb3IgKGJsayA9IHBoeWJsayArIDE7IGJsayAhPSBwaHlibGs7IGJsaysrKQotCXsKKwlmb3IgKGJsayA9IHBoeWJsayArIDE7IGJsayAhPSBwaHlibGs7IGJsaysrKSB7CiAJCWlmICgoYmxrICYgTVNfUEhZU0lDQUxfQkxPQ0tTX1BFUl9TRUdNRU5UX01BU0spID09IDApCiAJCQlibGsgLT0gTVNfUEhZU0lDQUxfQkxPQ0tTX1BFUl9TRUdNRU5UOwogCiAJCU5ld2JsayA9IHVzLT5NU19MaWIuUGh5MkxvZ01hcFtibGtdOwogCQlpZiAodXMtPk1TX0xpYi5QaHkyTG9nTWFwW2Jsa10gPT0gTVNfTEJfTk9UX1VTRURfRVJBU0VEKQogCQkJcmV0dXJuIGJsazsKLQkJZWxzZSBpZiAodXMtPk1TX0xpYi5QaHkyTG9nTWFwW2Jsa10gPT0gTVNfTEJfTk9UX1VTRUQpCi0JCXsKLQkJCXN3aXRjaCAoTVNfTGliUmVhZEV4dHJhKHVzLCBibGssIDAsICZleHRkYXQpKQotCQkJewotCQkJCWNhc2UgTVNfU1RBVFVTX1NVQ0NFU1MgOgotCQkJCWNhc2UgTVNfU1RBVFVTX1NVQ0NFU1NfV0lUSF9FQ0M6Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgTVNfTk9DQVJEX0VSUk9SOgotCQkJCQlyZXR1cm4gTVNfTk9DQVJEX0VSUk9SOwotCQkJCWNhc2UgTVNfU1RBVFVTX0lOVF9FUlJPUjoKLQkJCQkJcmV0dXJuIE1TX0xCX0VSUk9SOwotCQkJCWNhc2UgTVNfRVJST1JfRkxBU0hfUkVBRDoKLQkJCQlkZWZhdWx0OgotCQkJCQlNU19MaWJTZXRBY3F1aXJlZEVycm9yQmxvY2sodXMsIGJsayk7ICAgICAvLyBNU19MaWJFcnJvclBoeUJsb2NrKGZkb0V4dCwgYmxrKTsKLQkJCQkJY29udGludWU7Ci0JCQl9IC8vIEVuZCBzd2l0Y2gKKwkJZWxzZSBpZiAodXMtPk1TX0xpYi5QaHkyTG9nTWFwW2Jsa10gPT0gTVNfTEJfTk9UX1VTRUQpIHsKKwkJCXN3aXRjaCAoTVNfTGliUmVhZEV4dHJhKHVzLCBibGssIDAsICZleHRkYXQpKSB7CisJCQljYXNlIE1TX1NUQVRVU19TVUNDRVNTOgorCQkJY2FzZSBNU19TVEFUVVNfU1VDQ0VTU19XSVRIX0VDQzoKKwkJCQlicmVhazsKKwkJCWNhc2UgTVNfTk9DQVJEX0VSUk9SOgorCQkJCXJldHVybiBNU19OT0NBUkRfRVJST1I7CisJCQljYXNlIE1TX1NUQVRVU19JTlRfRVJST1I6CisJCQkJcmV0dXJuIE1TX0xCX0VSUk9SOworCQkJY2FzZSBNU19FUlJPUl9GTEFTSF9SRUFEOgorCQkJZGVmYXVsdDoKKwkJCQlNU19MaWJTZXRBY3F1aXJlZEVycm9yQmxvY2sodXMsIGJsayk7CisJCQkJLyogTVNfTGliRXJyb3JQaHlCbG9jayhmZG9FeHQsIGJsayk7ICovCisJCQkJY29udGludWU7CisJCQl9IC8qIEVuZCBzd2l0Y2ggKi8KIAotCQkJaWYgKChleHRkYXQub3ZyZmxnICYgTVNfUkVHX09WUl9CS1NUKSAhPSBNU19SRUdfT1ZSX0JLU1RfT0spCi0JCQl7CisJCQlpZiAoKGV4dGRhdC5vdnJmbGcgJiBNU19SRUdfT1ZSX0JLU1QpICE9CisJCQkJCQlNU19SRUdfT1ZSX0JLU1RfT0spIHsKIAkJCQlNU19MaWJTZXRBY3F1aXJlZEVycm9yQmxvY2sodXMsIGJsayk7CiAJCQkJY29udGludWU7CiAJCQl9CiAKLQkJCXN3aXRjaCAoTVNfTGliRXJhc2VQaHlCbG9jayh1cywgYmxrKSkKLQkJCXsKLQkJCQljYXNlIE1TX1NUQVRVU19TVUNDRVNTOgotCQkJCQlyZXR1cm4gYmxrOwotCQkJCWNhc2UgTVNfU1RBVFVTX0VSUk9SOgotCQkJCQlyZXR1cm4gTVNfTEJfRVJST1I7Ci0JCQkJY2FzZSBNU19FUlJPUl9GTEFTSF9FUkFTRToKLQkJCQlkZWZhdWx0OgotCQkJCQlNU19MaWJFcnJvclBoeUJsb2NrKHVzLCBibGspOwotCQkJCQlicmVhazsKKwkJCXN3aXRjaCAoTVNfTGliRXJhc2VQaHlCbG9jayh1cywgYmxrKSkgeworCQkJY2FzZSBNU19TVEFUVVNfU1VDQ0VTUzoKKwkJCQlyZXR1cm4gYmxrOworCQkJY2FzZSBNU19TVEFUVVNfRVJST1I6CisJCQkJcmV0dXJuIE1TX0xCX0VSUk9SOworCQkJY2FzZSBNU19FUlJPUl9GTEFTSF9FUkFTRToKKwkJCWRlZmF1bHQ6CisJCQkJTVNfTGliRXJyb3JQaHlCbG9jayh1cywgYmxrKTsKKwkJCQlicmVhazsKIAkJCX0KIAkJfQotCX0gLy8gRW5kIGZvcgorCX0gLyogRW5kIGZvciAqLwogCiAJcmV0dXJuIE1TX0xCX0VSUk9SOwogfQogCi0vLy0tLS0tIE1TX0xpYlNlYXJjaEJsb2NrRnJvbUxvZ2ljYWwoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgorICogTVNfTGliU2VhcmNoQmxvY2tGcm9tTG9naWNhbCgpCisgKi8KIGludCBNU19MaWJTZWFyY2hCbG9ja0Zyb21Mb2dpY2FsKHN0cnVjdCB1c19kYXRhICp1cywgV09SRCBsb2dibGspCiB7CiAJV09SRCBwaHlibGs7CiAKLQlpZiAoKHBoeWJsaz1NU19MaWJDb252MlBoeXNpY2FsKHVzLCBsb2dibGspKSA+PSBNU19MQl9FUlJPUikKLQl7CisJcGh5YmxrID0gTVNfTGliQ29udjJQaHlzaWNhbCh1cywgbG9nYmxrKTsKKwlpZiAocGh5YmxrID49IE1TX0xCX0VSUk9SKSB7CiAJCWlmIChsb2dibGsgPj0gdXMtPk1TX0xpYi5OdW1iZXJPZkxvZ0Jsb2NrKQogCQkJcmV0dXJuIE1TX0xCX0VSUk9SOwogCi0JCXBoeWJsayA9IChsb2dibGsgKyBNU19OVU1CRVJfT0ZfQk9PVF9CTE9DSykgLyBNU19MT0dJQ0FMX0JMT0NLU19QRVJfU0VHTUVOVDsKKwkJcGh5YmxrID0gKGxvZ2JsayArIE1TX05VTUJFUl9PRl9CT09UX0JMT0NLKSAvCisJCQkJCU1TX0xPR0lDQUxfQkxPQ0tTX1BFUl9TRUdNRU5UOwogCQlwaHlibGsgKj0gTVNfUEhZU0lDQUxfQkxPQ0tTX1BFUl9TRUdNRU5UOwogCQlwaHlibGsgKz0gTVNfUEhZU0lDQUxfQkxPQ0tTX1BFUl9TRUdNRU5UIC0gMTsKIAl9CiAKIAlyZXR1cm4gTVNfTGliU2VhcmNoQmxvY2tGcm9tUGh5c2ljYWwodXMsIHBoeWJsayk7CiB9Ci0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2tldWNyL21zLmggYi9kcml2ZXJzL3N0YWdpbmcva2V1Y3IvbXMuaAppbmRleCA0NTA5ZGI3Li5hM2RhNGJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcva2V1Y3IvbXMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcva2V1Y3IvbXMuaApAQCAtNCw0MSArNCw0MSBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgImNvbW1vbi5oIgogCi0vLyBNZW1vcnlTdGljayBSZWdpc3RlcgotLy8gU3RhdHVzIFJlZ2lzdGVyIDAKLSNkZWZpbmUgTVNfUkVHX1NUMF9NQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAgICAgLy8gbWVkaWEgYnVzeQotI2RlZmluZSBNU19SRUdfU1QwX0ZCMCAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MCAgICAvLyBmbHVzaCBidXN5IDAKLSNkZWZpbmUgTVNfUkVHX1NUMF9CRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAgICAgLy8gYnVmZmVyIGVtcHR5Ci0jZGVmaW5lIE1TX1JFR19TVDBfQkYgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwICAgIC8vIGJ1ZmZlciBmdWxsCi0jZGVmaW5lIE1TX1JFR19TVDBfU0wgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyICAgIC8vIHNsZWVwCi0jZGVmaW5lIE1TX1JFR19TVDBfV1AgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxICAgIC8vIHdyaXRlIHByb3RlY3RlZAorLyogTWVtb3J5U3RpY2sgUmVnaXN0ZXIgKi8KKy8qIFN0YXR1cyBSZWdpc3RlciAwICovCisjZGVmaW5lIE1TX1JFR19TVDBfTUIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwICAgIC8qIG1lZGlhIGJ1c3kgKi8KKyNkZWZpbmUgTVNfUkVHX1NUMF9GQjAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAgICAgLyogZmx1c2ggYnVzeSAwICovCisjZGVmaW5lIE1TX1JFR19TVDBfQkUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwICAgIC8qIGJ1ZmZlciBlbXB0eSAqLworI2RlZmluZSBNU19SRUdfU1QwX0JGICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCAgICAvKiBidWZmZXIgZnVsbCAqLworI2RlZmluZSBNU19SRUdfU1QwX1NMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMiAgICAvKiBzbGVlcCAqLworI2RlZmluZSBNU19SRUdfU1QwX1dQICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMSAgICAvKiB3cml0ZSBwcm90ZWN0ZWQgKi8KICNkZWZpbmUgTVNfUkVHX1NUMF9XUF9PTiAgICAgICAgICAgICAgICAgICAgICAgIE1TX1JFR19TVDBfV1AKICNkZWZpbmUgTVNfUkVHX1NUMF9XUF9PRkYgICAgICAgICAgICAgICAgICAgICAgIDB4MDAKIAotLy8gU3RhdHVzIFJlZ2lzdGVyIDEKLSNkZWZpbmUgTVNfUkVHX1NUMV9NQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAgICAgLy8gbWVkaWEgYnVzeQotI2RlZmluZSBNU19SRUdfU1QxX0ZCMSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MCAgICAvLyBmbHVzaCBidXN5IDEKLSNkZWZpbmUgTVNfUkVHX1NUMV9EVEVSICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAgICAgLy8gZXJyb3Igb24gZGF0YShjb3JyZWN0ZWQpCi0jZGVmaW5lIE1TX1JFR19TVDFfVUNEVCAgICAgICAgICAgICAgICAgICAgICAgICAweDEwICAgIC8vIHVuYWJsZSB0byBjb3JyZWN0IGRhdGEKLSNkZWZpbmUgTVNfUkVHX1NUMV9FWEVSICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDggICAgLy8gZXJyb3Igb24gZXh0cmEoY29ycmVjdGVkKQotI2RlZmluZSBNU19SRUdfU1QxX1VDRVggICAgICAgICAgICAgICAgICAgICAgICAgMHgwNCAgICAvLyB1bmFibGUgdG8gY29ycmVjdCBleHRyYQotI2RlZmluZSBNU19SRUdfU1QxX0ZHRVIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMiAgICAvLyBlcnJvciBvbiBvdmVyd3JpdGUgZmxhZyhjb3JyZWN0ZWQpCi0jZGVmaW5lIE1TX1JFR19TVDFfVUNGRyAgICAgICAgICAgICAgICAgICAgICAgICAweDAxICAgIC8vIHVuYWJsZSB0byBjb3JyZWN0IG92ZXJ3cml0ZSBmbGFnCi0jZGVmaW5lIE1TX1JFR19TVDFfREVGQVVMVCAgICAgICAgICAgICAgICAgICAgICAoTVNfUkVHX1NUMV9NQiAgIHwgTVNfUkVHX1NUMV9GQjEgIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1TX1JFR19TVDFfRFRFUiB8IE1TX1JFR19TVDFfVUNEVCB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNU19SRUdfU1QxX0VYRVIgfCBNU19SRUdfU1QxX1VDRVggfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVNfUkVHX1NUMV9GR0VSIHwgTVNfUkVHX1NUMV9VQ0ZHKQorLyogU3RhdHVzIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgTVNfUkVHX1NUMV9NQgkJMHg4MCAgICAvKiBtZWRpYSBidXN5ICovCisjZGVmaW5lIE1TX1JFR19TVDFfRkIxCQkweDQwICAgIC8qIGZsdXNoIGJ1c3kgMSAqLworI2RlZmluZSBNU19SRUdfU1QxX0RURVIJCTB4MjAgICAgLyogZXJyb3Igb24gZGF0YShjb3JyZWN0ZWQpICovCisjZGVmaW5lIE1TX1JFR19TVDFfVUNEVAkJMHgxMCAgICAvKiB1bmFibGUgdG8gY29ycmVjdCBkYXRhICovCisjZGVmaW5lIE1TX1JFR19TVDFfRVhFUgkJMHgwOCAgICAvKiBlcnJvciBvbiBleHRyYShjb3JyZWN0ZWQpICovCisjZGVmaW5lIE1TX1JFR19TVDFfVUNFWAkJMHgwNCAgICAvKiB1bmFibGUgdG8gY29ycmVjdCBleHRyYSAqLworI2RlZmluZSBNU19SRUdfU1QxX0ZHRVIJCTB4MDIgICAgLyogZXJyb3Igb24gb3ZlcndyaXRlIGZsYWcoY29ycmVjdGVkKSAqLworI2RlZmluZSBNU19SRUdfU1QxX1VDRkcJCTB4MDEgICAgLyogdW5hYmxlIHRvIGNvcnJlY3Qgb3ZlcndyaXRlIGZsYWcgKi8KKyNkZWZpbmUgTVNfUkVHX1NUMV9ERUZBVUxUCShNU19SRUdfU1QxX01CICAgfCBNU19SRUdfU1QxX0ZCMSAgfCBcCisJCQkJTVNfUkVHX1NUMV9EVEVSIHwgTVNfUkVHX1NUMV9VQ0RUIHwgXAorCQkJCU1TX1JFR19TVDFfRVhFUiB8IE1TX1JFR19TVDFfVUNFWCB8IFwKKwkJCQlNU19SRUdfU1QxX0ZHRVIgfCBNU19SRUdfU1QxX1VDRkcpCiAKLS8vIFN5c3RlbSBQYXJhbWV0ZXIKLSNkZWZpbmUgTVNfUkVHX1NZU1BBUl9CQU1EICAgICAgICAgICAgICAgICAgICAgIDB4ODAgICAgICAgICAgICAgICAgLy8gYmxvY2sgYWRkcmVzcyBtb2RlCi0jZGVmaW5lIE1TX1JFR19TWVNQQVJfQkFORF9MSU5FQVIgICAgICAgICAgICAgICBNU19SRUdfU1lTUEFSX0JBTUQgIC8vICAgbGluZWFyIG1vZGUKLSNkZWZpbmUgTVNfUkVHX1NZU1BBUl9CQU5EX0NISVAgICAgICAgICAgICAgICAgIDB4MDAgICAgICAgICAgICAgICAgLy8gIGNoaXAgbW9kZQotI2RlZmluZSBNU19SRUdfU1lTUEFSX0FURU4gICAgICAgICAgICAgICAgICAgICAgMHg0MCAgICAgICAgICAgICAgICAvLyBhdHRyaWJ1dGUgUk9NIGVuYWJsZQotI2RlZmluZSBNU19SRUdfU1lTUEFSX0FURU5fRU5BQkxFICAgICAgICAgICAgICAgTVNfUkVHX1NZU1BBUl9BVEVOICAvLyAgZW5hYmxlCi0jZGVmaW5lIE1TX1JFR19TWVNQQVJfQVRFTl9ESVNBQkxFICAgICAgICAgICAgICAweDAwICAgICAgICAgICAgICAgIC8vICBkaXNhYmxlCisvKiBTeXN0ZW0gUGFyYW1ldGVyICovCisjZGVmaW5lIE1TX1JFR19TWVNQQVJfQkFNRAkJMHg4MAkvKiBibG9jayBhZGRyZXNzIG1vZGUgKi8KKyNkZWZpbmUgTVNfUkVHX1NZU1BBUl9CQU5EX0xJTkVBUglNU19SRUdfU1lTUEFSX0JBTUQgIC8qICAgbGluZWFyIG1vZGUgKi8KKyNkZWZpbmUgTVNfUkVHX1NZU1BBUl9CQU5EX0NISVAJCTB4MDAJLyogIGNoaXAgbW9kZSAqLworI2RlZmluZSBNU19SRUdfU1lTUEFSX0FURU4JCTB4NDAJLyogYXR0cmlidXRlIFJPTSBlbmFibGUgKi8KKyNkZWZpbmUgTVNfUkVHX1NZU1BBUl9BVEVOX0VOQUJMRQlNU19SRUdfU1lTUEFSX0FURU4JLyogIGVuYWJsZSAqLworI2RlZmluZSBNU19SRUdfU1lTUEFSX0FURU5fRElTQUJMRQkweDAwCS8qICBkaXNhYmxlICovCiAjZGVmaW5lIE1TX1JFR19TWVNQQVJfUkVTRVJWRUQgICAgICAgICAgICAgICAgICAweDJmCiAKLS8vIENvbW1hbmQgUGFyYW1ldGVyCisvKiBDb21tYW5kIFBhcmFtZXRlciAqLwogI2RlZmluZSBNU19SRUdfQ01EUEFSX0NQMiAgICAgICAgICAgICAgICAgICAgICAgMHg4MAogI2RlZmluZSBNU19SRUdfQ01EUEFSX0NQMSAgICAgICAgICAgICAgICAgICAgICAgMHg0MAogI2RlZmluZSBNU19SRUdfQ01EUEFSX0NQMCAgICAgICAgICAgICAgICAgICAgICAgMHgyMApAQCAtNDgsNDQgKzQ4LDQ0IEBACiAjZGVmaW5lIE1TX1JFR19DTURQQVJfT1ZFUldSSVRFICAgICAgICAgICAgICAgICBNU19SRUdfQ01EUEFSX0NQMgogI2RlZmluZSBNU19SRUdfQ01EUEFSX1JFU0VSVkVEICAgICAgICAgICAgICAgICAgMHgxZgogCi0vLyBPdmVyd3JpdGUgQXJlYQotI2RlZmluZSBNU19SRUdfT1ZSX0JLU1QgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCAgICAgICAgICAgIC8vIGJsb2NrIHN0YXR1cwotI2RlZmluZSBNU19SRUdfT1ZSX0JLU1RfT0sgICAgICAgICAgICAgICAgICAgICAgTVNfUkVHX09WUl9CS1NUICAgICAvLyBPSwotI2RlZmluZSBNU19SRUdfT1ZSX0JLU1RfTkcgICAgICAgICAgICAgICAgICAgICAgMHgwMCAgICAgICAgICAgIC8vIE5HCi0jZGVmaW5lIE1TX1JFR19PVlJfUEdTVDAgICAgICAgICAgICAgICAgICAgICAgICAweDQwICAgICAgICAgICAgLy8gcGFnZSBzdGF0dXMKKy8qIE92ZXJ3cml0ZSBBcmVhICovCisjZGVmaW5lIE1TX1JFR19PVlJfQktTVAkJMHg4MCAgICAgICAgICAgIC8qIGJsb2NrIHN0YXR1cyAqLworI2RlZmluZSBNU19SRUdfT1ZSX0JLU1RfT0sgICAgICAgICAgICAgICAgICAgICAgTVNfUkVHX09WUl9CS1NUICAgICAvKiBPSyAqLworI2RlZmluZSBNU19SRUdfT1ZSX0JLU1RfTkcgICAgICAgICAgICAgICAgICAgICAgMHgwMCAgICAgICAgICAgIC8qIE5HICovCisjZGVmaW5lIE1TX1JFR19PVlJfUEdTVDAJMHg0MCAgICAgICAgICAgIC8qIHBhZ2Ugc3RhdHVzICovCiAjZGVmaW5lIE1TX1JFR19PVlJfUEdTVDEgICAgICAgICAgICAgICAgICAgICAgICAweDIwCi0jZGVmaW5lIE1TX1JFR19PVlJfUEdTVF9NQVNLICAgICAgICAgICAgICAgICAgICAoTVNfUkVHX09WUl9QR1NUMCB8IE1TX1JFR19PVlJfUEdTVDEpCi0jZGVmaW5lIE1TX1JFR19PVlJfUEdTVF9PSyAgICAgICAgICAgICAgICAgICAgICAoTVNfUkVHX09WUl9QR1NUMCB8IE1TX1JFR19PVlJfUEdTVDEpIC8vIE9LCi0jZGVmaW5lIE1TX1JFR19PVlJfUEdTVF9ORyAgICAgICAgICAgICAgICAgICAgICBNU19SRUdfT1ZSX1BHU1QxICAgICAgICAgICAgICAgICAgICAgIC8vIE5HCi0jZGVmaW5lIE1TX1JFR19PVlJfUEdTVF9EQVRBX0VSUk9SICAgICAgICAgICAgICAweDAwICAgICAgICAvLyBkYXRhIGVycm9yCi0jZGVmaW5lIE1TX1JFR19PVlJfVURTVCAgICAgICAgICAgICAgICAgICAgICAgICAweDEwICAgICAgICAvLyB1cGRhdGUgc3RhdHVzCi0jZGVmaW5lIE1TX1JFR19PVlJfVURTVF9VUERBVElORyAgICAgICAgICAgICAgICAweDAwICAgICAgICAvLyB1cGRhdGluZworI2RlZmluZSBNU19SRUdfT1ZSX1BHU1RfTUFTSwkoTVNfUkVHX09WUl9QR1NUMCB8IE1TX1JFR19PVlJfUEdTVDEpCisjZGVmaW5lIE1TX1JFR19PVlJfUEdTVF9PSwkoTVNfUkVHX09WUl9QR1NUMCB8IE1TX1JFR19PVlJfUEdTVDEpIC8qIE9LICovCisjZGVmaW5lIE1TX1JFR19PVlJfUEdTVF9ORwlNU19SRUdfT1ZSX1BHU1QxICAgICAgICAgICAgICAgICAgICAgIC8qIE5HICovCisjZGVmaW5lIE1TX1JFR19PVlJfUEdTVF9EQVRBX0VSUk9SICAgICAgICAgICAgICAweDAwICAgICAgICAvKiBkYXRhIGVycm9yICovCisjZGVmaW5lIE1TX1JFR19PVlJfVURTVCAgICAgICAgICAgICAgICAgICAgICAgICAweDEwICAgICAgICAvKiB1cGRhdGUgc3RhdHVzICovCisjZGVmaW5lIE1TX1JFR19PVlJfVURTVF9VUERBVElORyAgICAgICAgICAgICAgICAweDAwICAgICAgICAvKiB1cGRhdGluZyAqLwogI2RlZmluZSBNU19SRUdfT1ZSX1VEU1RfTk9fVVBEQVRFICAgICAgICAgICAgICAgTVNfUkVHX09WUl9VRFNUCiAjZGVmaW5lIE1TX1JFR19PVlJfUkVTRVJWRUQgICAgICAgICAgICAgICAgICAgICAweDA4CiAjZGVmaW5lIE1TX1JFR19PVlJfREVGQVVMVCAgICAgICAgICAgICAgICAgICAgICAoTVNfUkVHX09WUl9CS1NUX09LIHwgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVNfUkVHX09WUl9QR1NUX09LIHwgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVNfUkVHX09WUl9VRFNUX05PX1VQREFURSB8ICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1TX1JFR19PVlJfUkVTRVJWRUQpCi0vLyBNYW5hZ2VtZW50IEZsYWcKLSNkZWZpbmUgTVNfUkVHX01OR19TQ01TMCAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAgICAgLy8gc2VyaWFsIGNvcHkgbWFuYWdlbWVudCBzeXN0ZW0KKwkJCQkJCU1TX1JFR19PVlJfUEdTVF9PSyB8ICAgICAgXAorCQkJCQkJTVNfUkVHX09WUl9VRFNUX05PX1VQREFURSB8ICAgXAorCQkJCQkJTVNfUkVHX09WUl9SRVNFUlZFRCkKKy8qIE1hbmFnZW1lbnQgRmxhZyAqLworI2RlZmluZSBNU19SRUdfTU5HX1NDTVMwCTB4MjAgICAgLyogc2VyaWFsIGNvcHkgbWFuYWdlbWVudCBzeXN0ZW0gKi8KICNkZWZpbmUgTVNfUkVHX01OR19TQ01TMSAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAKLSNkZWZpbmUgTVNfUkVHX01OR19TQ01TX01BU0sgICAgICAgICAgICAgICAgICAgIChNU19SRUdfTU5HX1NDTVMwIHwgTVNfUkVHX01OR19TQ01TMSkKLSNkZWZpbmUgTVNfUkVHX01OR19TQ01TX0NPUFlfT0sgICAgICAgICAgICAgICAgIChNU19SRUdfTU5HX1NDTVMwIHwgTVNfUkVHX01OR19TQ01TMSkKKyNkZWZpbmUgTVNfUkVHX01OR19TQ01TX01BU0sJCShNU19SRUdfTU5HX1NDTVMwIHwgTVNfUkVHX01OR19TQ01TMSkKKyNkZWZpbmUgTVNfUkVHX01OR19TQ01TX0NPUFlfT0sJCShNU19SRUdfTU5HX1NDTVMwIHwgTVNfUkVHX01OR19TQ01TMSkKICNkZWZpbmUgTVNfUkVHX01OR19TQ01TX09ORV9DT1BZICAgICAgICAgICAgICAgIE1TX1JFR19NTkdfU0NNUzEKICNkZWZpbmUgTVNfUkVHX01OR19TQ01TX05PX0NPUFkgICAgICAgICAgICAgICAgIDB4MDAKLSNkZWZpbmUgTVNfUkVHX01OR19BVEZMRyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDggICAgLy8gYWRkcmVzcyB0cmFuc2ZlciB0YWJsZSBmbGFnCi0jZGVmaW5lIE1TX1JFR19NTkdfQVRGTEdfT1RIRVIgICAgICAgICAgICAgICAgICBNU19SRUdfTU5HX0FURkxHICAgIC8vIG90aGVyCi0jZGVmaW5lIE1TX1JFR19NTkdfQVRGTEdfQVRUQkwgICAgICAgICAgICAgICAgICAweDAwICAgIC8vIGFkZHJlc3MgdHJhbnNmZXIgdGFibGUKLSNkZWZpbmUgTVNfUkVHX01OR19TWVNGTEcgICAgICAgICAgICAgICAgICAgICAgIDB4MDQgICAgLy8gc3lzdGVtIGZsYWcKLSNkZWZpbmUgTVNfUkVHX01OR19TWVNGTEdfVVNFUiAgICAgICAgICAgICAgICAgIE1TX1JFR19NTkdfU1lTRkxHICAgLy8gdXNlciBibG9jawotI2RlZmluZSBNU19SRUdfTU5HX1NZU0ZMR19CT09UICAgICAgICAgICAgICAgICAgMHgwMCAgICAgICAgICAgIC8vIHN5c3RlbSBibG9jaworI2RlZmluZSBNU19SRUdfTU5HX0FURkxHCTB4MDgJLyogYWRkcmVzcyB0cmFuc2ZlciB0YWJsZSBmbGFnICovCisjZGVmaW5lIE1TX1JFR19NTkdfQVRGTEdfT1RIRVIgICAgICAgICAgICAgICAgICBNU19SRUdfTU5HX0FURkxHICAgIC8qIG90aGVyICovCisjZGVmaW5lIE1TX1JFR19NTkdfQVRGTEdfQVRUQkwJCTB4MDAJLyogYWRkcmVzcyB0cmFuc2ZlciB0YWJsZSAqLworI2RlZmluZSBNU19SRUdfTU5HX1NZU0ZMRyAgICAgICAgICAgICAgICAgICAgICAgMHgwNCAgICAvKiBzeXN0ZW0gZmxhZyAqLworI2RlZmluZSBNU19SRUdfTU5HX1NZU0ZMR19VU0VSCQlNU19SRUdfTU5HX1NZU0ZMRyAgIC8qIHVzZXIgYmxvY2sgKi8KKyNkZWZpbmUgTVNfUkVHX01OR19TWVNGTEdfQk9PVCAgICAgICAgICAgICAgICAgIDB4MDAgICAgLyogc3lzdGVtIGJsb2NrICovCiAjZGVmaW5lIE1TX1JFR19NTkdfUkVTRVJWRUQgICAgICAgICAgICAgICAgICAgICAweGMzCiAjZGVmaW5lIE1TX1JFR19NTkdfREVGQVVMVAkJKE1TX1JFR19NTkdfU0NNU19DT1BZX09LIHwJXAogCQkJCQkgTVNfUkVHX01OR19BVEZMR19PVEhFUiB8CVwKIAkJCQkJIE1TX1JFR19NTkdfU1lTRkxHX1VTRVIgfAlcCiAJCQkJCSBNU19SRUdfTU5HX1JFU0VSVkVEKQogCi0vLyBFcnJvciBjb2RlcworLyogRXJyb3IgY29kZXMgKi8KICNkZWZpbmUgTVNfU1RBVFVTX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMAogI2RlZmluZSBNU19FUlJPUl9PVVRfT0ZfU1BBQ0UgICAgICAgICAgICAgICAgICAgMHgwMTAzCiAjZGVmaW5lIE1TX1NUQVRVU19XUklURV9QUk9URUNUICAgICAgICAgICAgICAgICAweDAxMDYKQEAgLTExMCwyOSArMTEwLDQxIEBACiAjZGVmaW5lIE1TX0xCX0FDUVVJUkVEX0VSUk9SICAgICAgICAgICAgICAgICAgICAweGZmZjQKICNkZWZpbmUgTVNfTEJfTk9UX1VTRURfRVJBU0VEICAgICAgICAgICAgICAgICAgIDB4ZmZmNQogCi0jZGVmaW5lIE1TX0xpYkNvbnYyUGh5c2ljYWwocGR4LCBMb2dCbG9jaykgICAgICAoKChMb2dCbG9jaykgPj0gKHBkeCktPk1TX0xpYi5OdW1iZXJPZkxvZ0Jsb2NrKSA/IE1TX1NUQVRVU19FUlJPUiA6IChwZHgpLT5NU19MaWIuTG9nMlBoeU1hcFtMb2dCbG9ja10pCi0jZGVmaW5lIE1TX0xpYkNvbnYyTG9naWNhbChwZHgsIFBoeUJsb2NrKSAgICAgICAoKChQaHlCbG9jaykgPj0gKHBkeCktPk1TX0xpYi5OdW1iZXJPZlBoeUJsb2NrKSA/IE1TX1NUQVRVU19FUlJPUiA6IChwZHgpLT5NU19MaWIuUGh5MkxvZ01hcFtQaHlCbG9ja10pIC8vrGRwaHktPmxvZyB0YWJsZQorI2RlZmluZSBNU19MaWJDb252MlBoeXNpY2FsKHBkeCwgTG9nQmxvY2spIFwKKwkoKChMb2dCbG9jaykgPj0gKHBkeCktPk1TX0xpYi5OdW1iZXJPZkxvZ0Jsb2NrKSA/IFwKKwlNU19TVEFUVVNfRVJST1IgOiAocGR4KS0+TVNfTGliLkxvZzJQaHlNYXBbTG9nQmxvY2tdKQorI2RlZmluZSBNU19MaWJDb252MkxvZ2ljYWwocGR4LCBQaHlCbG9jaykgXAorCSgoKFBoeUJsb2NrKSA+PSAocGR4KS0+TVNfTGliLk51bWJlck9mUGh5QmxvY2spID8gXAorCU1TX1NUQVRVU19FUlJPUiA6IChwZHgpLT5NU19MaWIuUGh5MkxvZ01hcFtQaHlCbG9ja10pCisJLypkcGh5LT5sb2cgdGFibGUgKi8KIAogI2RlZmluZSBNU19MSUJfQ1RSTF9SRE9OTFkgICAgICAgICAgICAgICAgICAgICAgMAogI2RlZmluZSBNU19MSUJfQ1RSTF9XUlBST1RFQ1QgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBNU19MaWJDdHJsQ2hlY2socGR4LCBGbGFnKSAgICAgICAgICAgICAgKChwZHgpLT5NU19MaWIuZmxhZ3MgJiAoMSA8PCAoRmxhZykpKQorI2RlZmluZSBNU19MaWJDdHJsQ2hlY2socGR4LCBGbGFnKQkoKHBkeCktPk1TX0xpYi5mbGFncyAmICgxIDw8IChGbGFnKSkpCiAKLSNkZWZpbmUgTVNfTGliQ3RybFNldChwZHgsIEZsYWcpICAgICAgICAgICAgICAgIChwZHgpLT5NU19MaWIuZmxhZ3MgfD0gKDEgPDwgKEZsYWcpKQotI2RlZmluZSBNU19MaWJDdHJsUmVzZXQocGR4LCBGbGFnKSAgICAgICAgICAgICAgKHBkeCktPk1TX0xpYi5mbGFncyAmPSB+KDEgPDwgKEZsYWcpKQotI2RlZmluZSBNU19MaWJJc1dyaXRhYmxlKHBkeCkgICAgICAgICAgICAgICAgICAgKChNU19MaWJDdHJsQ2hlY2soKHBkeCksIE1TX0xJQl9DVFJMX1JET05MWSkgPT0gMCkgJiYgKE1TX0xpYkN0cmxDaGVjayhwZHgsIE1TX0xJQl9DVFJMX1dSUFJPVEVDVCkgPT0gMCkpCisjZGVmaW5lIE1TX0xpYkN0cmxTZXQocGR4LCBGbGFnKQkoKHBkeCktPk1TX0xpYi5mbGFncyB8PSAoMSA8PCAoRmxhZykpKQorI2RlZmluZSBNU19MaWJDdHJsUmVzZXQocGR4LCBGbGFnKQkoKHBkeCktPk1TX0xpYi5mbGFncyAmPSB+KDEgPDwgKEZsYWcpKSkKKyNkZWZpbmUgTVNfTGliSXNXcml0YWJsZShwZHgpIFwKKwkoKE1TX0xpYkN0cmxDaGVjaygocGR4KSwgTVNfTElCX0NUUkxfUkRPTkxZKSA9PSAwKSAmJiBcCisJKE1TX0xpYkN0cmxDaGVjayhwZHgsIE1TX0xJQl9DVFJMX1dSUFJPVEVDVCkgPT0gMCkpCiAKICNkZWZpbmUgTVNfTUFYX1BBR0VTX1BFUl9CTE9DSyAgICAgICAgICAgICAgICAgIDMyCiAjZGVmaW5lIE1TX0xJQl9CSVRTX1BFUl9CWVRFICAgICAgICAgICAgICAgICAgICA4CiAKLSNkZWZpbmUgTVNfTGliUGFnZU1hcElkeChuKSAgICAgICAgICAgICAgICAgICAgICgobikgLyBNU19MSUJfQklUU19QRVJfQllURSkKLSNkZWZpbmUgTVNfTGliUGFnZU1hcEJpdChuKSAgICAgICAgICAgICAgICAgICAgICgxIDw8ICgobikgJSBNU19MSUJfQklUU19QRVJfQllURSkpCi0jZGVmaW5lIE1TX0xpYkNoZWNrUGFnZU1hcEJpdChwZHgsIG4pICAgICAgICAgICAoKHBkeCktPk1TX0xpYi5wYWdlbWFwW01TX0xpYlBhZ2VNYXBJZHgobildICYgTVNfTGliUGFnZU1hcEJpdChuKSkKLSNkZWZpbmUgTVNfTGliU2V0UGFnZU1hcEJpdChwZHgsIG4pICAgICAgICAgICAgICgocGR4KS0+TVNfTGliLnBhZ2VtYXBbTVNfTGliUGFnZU1hcElkeChuKV0gfD0gTVNfTGliUGFnZU1hcEJpdChuKSkKLSNkZWZpbmUgTVNfTGliUmVzZXRQYWdlTWFwQml0KHBkeCwgbikgICAgICAgICAgICgocGR4KS0+TVNfTGliLnBhZ2VtYXBbTVNfTGliUGFnZU1hcElkeChuKV0gJj0gfk1TX0xpYlBhZ2VNYXBCaXQobikpCi0jZGVmaW5lIE1TX0xpYkNsZWFyUGFnZU1hcChwZHgpICAgICAgICAgICAgICAgICBtZW1zZXQoKHBkeCktPk1TX0xpYi5wYWdlbWFwLCAwLCBzaXplb2YoKHBkeCktPk1TX0xpYi5wYWdlbWFwKSkKKyNkZWZpbmUgTVNfTGliUGFnZU1hcElkeChuKSAoKG4pIC8gTVNfTElCX0JJVFNfUEVSX0JZVEUpCisjZGVmaW5lIE1TX0xpYlBhZ2VNYXBCaXQobikgKDEgPDwgKChuKSAlIE1TX0xJQl9CSVRTX1BFUl9CWVRFKSkKKyNkZWZpbmUgTVNfTGliQ2hlY2tQYWdlTWFwQml0KHBkeCwgbikgXAorCSgocGR4KS0+TVNfTGliLnBhZ2VtYXBbTVNfTGliUGFnZU1hcElkeChuKV0gJiBNU19MaWJQYWdlTWFwQml0KG4pKQorI2RlZmluZSBNU19MaWJTZXRQYWdlTWFwQml0KHBkeCwgbikgXAorCSgocGR4KS0+TVNfTGliLnBhZ2VtYXBbTVNfTGliUGFnZU1hcElkeChuKV0gfD0gTVNfTGliUGFnZU1hcEJpdChuKSkKKyNkZWZpbmUgTVNfTGliUmVzZXRQYWdlTWFwQml0KHBkeCwgbikgXAorCSgocGR4KS0+TVNfTGliLnBhZ2VtYXBbTVNfTGliUGFnZU1hcElkeChuKV0gJj0gfk1TX0xpYlBhZ2VNYXBCaXQobikpCisjZGVmaW5lIE1TX0xpYkNsZWFyUGFnZU1hcChwZHgpIFwKKwltZW1zZXQoKHBkeCktPk1TX0xpYi5wYWdlbWFwLCAwLCBzaXplb2YoKHBkeCktPk1TX0xpYi5wYWdlbWFwKSkKIAogCi0jZGVmaW5lIE1lbVN0aWNrTG9nQWRkcihsb2dhZHIxLCBsb2dhZHIwKSAgICAgICAoKCgoV09SRCkobG9nYWRyMSkpIDw8IDgpIHwgKGxvZ2FkcjApKQorI2RlZmluZSBNZW1TdGlja0xvZ0FkZHIobG9nYWRyMSwgbG9nYWRyMCkgXAorCSgoKChXT1JEKShsb2dhZHIxKSkgPDwgOCkgfCAobG9nYWRyMCkpCiAKICNkZWZpbmUgTVNfQllURVNfUEVSX1BBR0UgICAgICAgICAgICAgICAgICAgICAgIDUxMgogCkBAIC0xNDQsNyArMTU2LDcgQEAKICNkZWZpbmUgTVNfTlVNQkVSX09GX1NZU1RFTV9CTE9DSyAgICAgICAgICAgICAgIDQKICNkZWZpbmUgTVNfTE9HSUNBTF9CTE9DS1NfUEVSX1NFR01FTlQgICAgICAgICAgIDQ5NgogI2RlZmluZSBNU19MT0dJQ0FMX0JMT0NLU19JTl8xU1RfU0VHTUVOVCAgICAgICAgNDk0Ci0jZGVmaW5lIE1TX1BIWVNJQ0FMX0JMT0NLU19QRVJfU0VHTUVOVCAgICAgICAgICAweDIwMCAgIC8vIDUxMgorI2RlZmluZSBNU19QSFlTSUNBTF9CTE9DS1NfUEVSX1NFR01FTlQgICAgICAgICAgMHgyMDAgICAvKiA1MTIgKi8KICNkZWZpbmUgTVNfUEhZU0lDQUxfQkxPQ0tTX1BFUl9TRUdNRU5UX01BU0sgICAgIDB4MWZmCiAKICNkZWZpbmUgTVNfU0VDVE9SX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgIDUxMgpAQCAtMTY1LDUxICsxNzcsNTMgQEAKICNkZWZpbmUgTVNfU1lTSU5GX1NFQ1VSSVRZICAgICAgICAgICAgICAgICAgICAgIDB4MDEKICNkZWZpbmUgTVNfU1lTSU5GX1NFQ1VSSVRZX05PX1NVUFBPUlQgICAgICAgICAgIE1TX1NZU0lORl9TRUNVUklUWQogI2RlZmluZSBNU19TWVNJTkZfU0VDVVJJVFlfU1VQUE9SVCAgICAgICAgICAgICAgMAotI2RlZmluZSBNU19TWVNJTkZfRk9STUFUX01BVCAgICAgICAgICAgICAgICAgICAgMCAgIC8vID8KKyNkZWZpbmUgTVNfU1lTSU5GX0ZPUk1BVF9NQVQgICAgICAgICAgICAgICAgICAgIDAgICAvKiA/ICovCiAjZGVmaW5lIE1TX1NZU0lORl9GT1JNQVRfRkFUICAgICAgICAgICAgICAgICAgICAxCiAjZGVmaW5lIE1TX1NZU0lORl9VU0FHRV9HRU5FUkFMICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1TX1NZU0lORl9QQUdFX1NJWkUgICAgICAgICAgICAgICAgICAgICBNU19CWVRFU19QRVJfUEFHRSAvLyBmaXhlZAorI2RlZmluZSBNU19TWVNJTkZfUEFHRV9TSVpFICAgICAgICAgICAgICAgICAgICAgTVNfQllURVNfUEVSX1BBR0UgLyogZml4ZWQgKi8KICNkZWZpbmUgTVNfU1lTSU5GX1JFU0VSVkVEMSAgICAgICAgICAgICAgICAgICAgIDEKICNkZWZpbmUgTVNfU1lTSU5GX1JFU0VSVkVEMiAgICAgICAgICAgICAgICAgICAgIDEKIAogI2RlZmluZSBNU19TWVNFTlRfVFlQRV9JTlZBTElEX0JMT0NLICAgICAgICAgICAgMHgwMQotI2RlZmluZSBNU19TWVNFTlRfVFlQRV9DSVNfSURJICAgICAgICAgICAgICAgICAgMHgwYSAgICAvLyBDSVMvSURJCisjZGVmaW5lIE1TX1NZU0VOVF9UWVBFX0NJU19JREkgICAgICAgICAgICAgICAgICAweDBhICAgIC8qIENJUy9JREkgKi8KIAogI2RlZmluZSBTSVpFX09GX0tJUk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAyNAogCi0vLyBCT09UIEJMT0NLCisvKiBCT09UIEJMT0NLICovCiAjZGVmaW5lIE1TX05VTUJFUl9PRl9TWVNURU1fRU5UUlkgICAgICAgICAgICAgICA0CiAKLS8vLS0tLS0gTWVtU3RpY2tSZWdpc3RlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFN0YXR1cyByZWdpc3RlcnMgKDE2IGJ5dGVzKQorLyoKKyAqIE1lbVN0aWNrUmVnaXN0ZXJzCisgKi8KKy8qIFN0YXR1cyByZWdpc3RlcnMgKDE2IGJ5dGVzKSAqLwogdHlwZWRlZiBzdHJ1Y3QgewotCUJZVEUgUmVzZXJ2ZWQwOwkJLy8gMDAKLQlCWVRFIElOVFJlZ2lzdGVyOwkvLyAwMQotCUJZVEUgU3RhdHVzUmVnaXN0ZXIwOwkvLyAwMgotCUJZVEUgU3RhdHVzUmVnaXN0ZXIxOwkvLyAwMwotCUJZVEUgUmVzZXJ2ZWQxWzEyXTsJLy8gMDQtMEYKKwlCWVRFIFJlc2VydmVkMDsJCS8qIDAwICovCisJQllURSBJTlRSZWdpc3RlcjsJLyogMDEgKi8KKwlCWVRFIFN0YXR1c1JlZ2lzdGVyMDsJLyogMDIgKi8KKwlCWVRFIFN0YXR1c1JlZ2lzdGVyMTsJLyogMDMgKi8KKwlCWVRFIFJlc2VydmVkMVsxMl07CS8qIDA0LTBGICovCiB9IE1lbVN0aWNrU3RhdHVzUmVnaXN0ZXJzOwogCi0vLyBQYXJhbWV0ZXIgcmVnaXN0ZXJzICg2IGJ5dGVzKQorLyogUGFyYW1ldGVyIHJlZ2lzdGVycyAoNiBieXRlcykgKi8KIHR5cGVkZWYgc3RydWN0IHsKLQlCWVRFIFN5c3RlbVBhcmFtZXRlcjsJLy8gMTAKLQlCWVRFIEJsb2NrQWRkcmVzczI7CS8vIDExCi0JQllURSBCbG9ja0FkZHJlc3MxOwkvLyAxMgotCUJZVEUgQmxvY2tBZGRyZXNzMDsJLy8gMTMKLQlCWVRFIENNRFBhcmFtZXRlcjsJLy8gMTQKLQlCWVRFIFBhZ2VBZGRyZXNzOwkvLyAxNQorCUJZVEUgU3lzdGVtUGFyYW1ldGVyOwkvKiAxMCAqLworCUJZVEUgQmxvY2tBZGRyZXNzMjsJLyogMTEgKi8KKwlCWVRFIEJsb2NrQWRkcmVzczE7CS8qIDEyICovCisJQllURSBCbG9ja0FkZHJlc3MwOwkvKiAxMyAqLworCUJZVEUgQ01EUGFyYW1ldGVyOwkvKiAxNCAqLworCUJZVEUgUGFnZUFkZHJlc3M7CS8qIDE1ICovCiB9IE1lbVN0aWNrUGFyYW1ldGVyUmVnaXN0ZXJzOwogCi0vLyBFeHRyYSByZWdpc3RlcnMgKDkgYnl0ZXMpCisvKiBFeHRyYSByZWdpc3RlcnMgKDkgYnl0ZXMpICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0JQllURSBPdmVyd3JpdGVGbGFnOwkvLyAxNgotCUJZVEUgTWFuYWdlbWVudEZsYWc7CS8vIDE3Ci0JQllURSBMb2dpY2FsQWRkcmVzczE7CS8vIDE4Ci0JQllURSBMb2dpY2FsQWRkcmVzczA7CS8vIDE5Ci0JQllURSBSZXNlcnZlZEFyZWFbNV07CS8vIDFBLTFFCisJQllURSBPdmVyd3JpdGVGbGFnOwkvKiAxNiAqLworCUJZVEUgTWFuYWdlbWVudEZsYWc7CS8qIDE3ICovCisJQllURSBMb2dpY2FsQWRkcmVzczE7CS8qIDE4ICovCisJQllURSBMb2dpY2FsQWRkcmVzczA7CS8qIDE5ICovCisJQllURSBSZXNlcnZlZEFyZWFbNV07CS8qIDFBLTFFICovCiB9IE1lbVN0aWNrRXh0cmFEYXRhUmVnaXN0ZXJzOwogCi0vLyBBbGwgcmVnaXN0ZXJzIGluIE1lbW9yeSBTdGljayAoMzIgYnl0ZXMsIGluY2x1ZGVzIDEgYnl0ZSBwYWRkaW5nKQorLyogQWxsIHJlZ2lzdGVycyBpbiBNZW1vcnkgU3RpY2sgKDMyIGJ5dGVzLCBpbmNsdWRlcyAxIGJ5dGUgcGFkZGluZykgKi8KIHR5cGVkZWYgc3RydWN0IHsKIAlNZW1TdGlja1N0YXR1c1JlZ2lzdGVycyBzdGF0dXM7CiAJTWVtU3RpY2tQYXJhbWV0ZXJSZWdpc3RlcnMgcGFyYW07CkBAIC0yMTcsNyArMjMxLDkgQEAKIAlCWVRFIHBhZGRpbmc7CiB9IE1lbVN0aWNrUmVnaXN0ZXJzLCAqUE1lbVN0aWNrUmVnaXN0ZXJzOwogCi0vLy0tLS0tIE1lbVN0aWNrQm9vdEJsb2NrUGFnZTAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgorICogTWVtU3RpY2tCb290QmxvY2tQYWdlMAorICovCiB0eXBlZGVmIHN0cnVjdCB7CiAJV09SRCB3QmxvY2tJRDsKIAlXT1JEIHdGb3JtYXRWZXJzaW9uOwpAQCAtMjM4LDEzICsyNTQsMTMgQEAKIH0gTWVtU3RpY2tCb290QmxvY2tTeXNFbnQ7CiAKIHR5cGVkZWYgc3RydWN0IHsKLQlCWVRFIGJNc0NsYXNzOwkJLy8gbXVzdCBiZSAxCi0JQllURSBiQ2FyZFR5cGU7CQkvLyBzZWUgYmVsb3cKLQlXT1JEIHdCbG9ja1NpemU7CS8vIG4gS0IKLQlXT1JEIHdCbG9ja051bWJlcjsJLy8gbnVtYmVyIG9mIHBoeXNpY2FsIGJsb2NrCi0JV09SRCB3VG90YWxCbG9ja051bWJlcjsJLy8gbnVtYmVyIG9mIGxvZ2ljYWwgYmxvY2sKLQlXT1JEIHdQYWdlU2l6ZTsJCS8vIG11c3QgYmUgMHgyMDAKLQlCWVRFIGJFeHRyYVNpemU7CS8vIDB4MTAKKwlCWVRFIGJNc0NsYXNzOwkJLyogbXVzdCBiZSAxICovCisJQllURSBiQ2FyZFR5cGU7CQkvKiBzZWUgYmVsb3cgKi8KKwlXT1JEIHdCbG9ja1NpemU7CS8qIG4gS0IgKi8KKwlXT1JEIHdCbG9ja051bWJlcjsJLyogbnVtYmVyIG9mIHBoeXNpY2FsIGJsb2NrICovCisJV09SRCB3VG90YWxCbG9ja051bWJlcjsJLyogbnVtYmVyIG9mIGxvZ2ljYWwgYmxvY2sgKi8KKwlXT1JEIHdQYWdlU2l6ZTsJCS8qIG11c3QgYmUgMHgyMDAgKi8KKwlCWVRFIGJFeHRyYVNpemU7CS8qIDB4MTAgKi8KIAlCWVRFIGJTZWN1cml0eVN1cHBvcnQ7CiAJQllURSBiQXNzZW1ibHlEYXRlWzhdOwogCUJZVEUgYkZhY3RvcnlBcmVhWzRdOwpAQCAtMjU4LDEwICsyNzQsMTAgQEAKIAlCWVRFIGJWQ0M7CiAJQllURSBiVlBQOwogCVdPUkQgd0NvbnRyb2xsZXJDaGlwTnVtYmVyOwotCVdPUkQgd0NvbnRyb2xsZXJGdW5jdGlvbjsJLy8gTmV3IE1TCi0JQllURSBiUmVzZXJ2ZWQzWzldOwkJLy8gTmV3IE1TCi0JQllURSBiUGFyYWxsZWxTdXBwb3J0OwkJLy8gTmV3IE1TCi0JV09SRCB3Rm9ybWF0VmFsdWU7CQkvLyBOZXcgTVMKKwlXT1JEIHdDb250cm9sbGVyRnVuY3Rpb247CS8qIE5ldyBNUyAqLworCUJZVEUgYlJlc2VydmVkM1s5XTsJCS8qIE5ldyBNUyAqLworCUJZVEUgYlBhcmFsbGVsU3VwcG9ydDsJCS8qIE5ldyBNUyAqLworCVdPUkQgd0Zvcm1hdFZhbHVlOwkJLyogTmV3IE1TICovCiAJQllURSBiRm9ybWF0VHlwZTsKIAlCWVRFIGJVc2FnZTsKIAlCWVRFIGJEZXZpY2VUeXBlOwpAQCAtMjc3LDYwICsyOTMsNjIgQEAKIAlNZW1TdGlja0Jvb3RCbG9ja1N5c0luZiBzeXNpbmY7CiB9IE1lbVN0aWNrQm9vdEJsb2NrUGFnZTA7CiAKLS8vLS0tLS0gTWVtU3RpY2tCb290QmxvY2tDSVNfSURJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qCisgKiBNZW1TdGlja0Jvb3RCbG9ja0NJU19JREkKKyAqLwogdHlwZWRlZiBzdHJ1Y3QgewotCUJZVEUgYkNpc3RwbERFVklDRVs2XTsgICAgICAgICAgICAvLyAwCi0JQllURSBiQ2lzdHBsREVWSUNFMENbNl07ICAgICAgICAgIC8vIDYKLQlCWVRFIGJDaXN0cGxKRURFQ0NbNF07ICAgICAgICAgICAgLy8gMTIKLQlCWVRFIGJDaXN0cGxNQU5GSURbNl07ICAgICAgICAgICAgLy8gMTYKLQlCWVRFIGJDaXN0cGxWRVIxWzMyXTsgICAgICAgICAgICAgLy8gMjIKLQlCWVRFIGJDaXN0cGxGVU5DSURbNF07ICAgICAgICAgICAgLy8gNTQKLQlCWVRFIGJDaXN0cGxGVU5DRTBbNF07ICAgICAgICAgICAgLy8gNTgKLQlCWVRFIGJDaXN0cGxGVU5DRTFbNV07ICAgICAgICAgICAgLy8gNjIKLQlCWVRFIGJDaXN0cGxDT05GWzddOyAgICAgICAgICAgICAgLy8gNjcKLQlCWVRFIGJDaXN0cGxDRlRCTEVOVDBbMTBdOyAgICAgICAgLy8gNzQKLQlCWVRFIGJDaXN0cGxDRlRCTEVOVDFbOF07ICAgICAgICAgLy8gODQKLQlCWVRFIGJDaXN0cGxDRlRCTEVOVDJbMTJdOyAgICAgICAgLy8gOTIKLQlCWVRFIGJDaXN0cGxDRlRCTEVOVDNbOF07ICAgICAgICAgLy8gMTA0Ci0JQllURSBiQ2lzdHBsQ0ZUQkxFTlQ0WzE3XTsgICAgICAgIC8vIDExMgotCUJZVEUgYkNpc3RwbENGVEJMRU5UNVs4XTsgICAgICAgICAvLyAxMjkKLQlCWVRFIGJDaXN0cGxDRlRCTEVOVDZbMTddOyAgICAgICAgLy8gMTM3Ci0JQllURSBiQ2lzdHBsQ0ZUQkxFTlQ3WzhdOyAgICAgICAgIC8vIDE1NAotCUJZVEUgYkNpc3RwbE5PTElOS1szXTsgICAgICAgICAgICAvLyAxNjIKKwlCWVRFIGJDaXN0cGxERVZJQ0VbNl07ICAgICAgICAgICAgLyogMCAqLworCUJZVEUgYkNpc3RwbERFVklDRTBDWzZdOyAgICAgICAgICAvKiA2ICovCisJQllURSBiQ2lzdHBsSkVERUNDWzRdOyAgICAgICAgICAgIC8qIDEyICovCisJQllURSBiQ2lzdHBsTUFORklEWzZdOyAgICAgICAgICAgIC8qIDE2ICovCisJQllURSBiQ2lzdHBsVkVSMVszMl07ICAgICAgICAgICAgIC8qIDIyICovCisJQllURSBiQ2lzdHBsRlVOQ0lEWzRdOyAgICAgICAgICAgIC8qIDU0ICovCisJQllURSBiQ2lzdHBsRlVOQ0UwWzRdOyAgICAgICAgICAgIC8qIDU4ICovCisJQllURSBiQ2lzdHBsRlVOQ0UxWzVdOyAgICAgICAgICAgIC8qIDYyICovCisJQllURSBiQ2lzdHBsQ09ORls3XTsgICAgICAgICAgICAgIC8qIDY3ICovCisJQllURSBiQ2lzdHBsQ0ZUQkxFTlQwWzEwXTsgICAgICAgIC8qIDc0ICovCisJQllURSBiQ2lzdHBsQ0ZUQkxFTlQxWzhdOyAgICAgICAgIC8qIDg0ICovCisJQllURSBiQ2lzdHBsQ0ZUQkxFTlQyWzEyXTsgICAgICAgIC8qIDkyICovCisJQllURSBiQ2lzdHBsQ0ZUQkxFTlQzWzhdOyAgICAgICAgIC8qIDEwNCAqLworCUJZVEUgYkNpc3RwbENGVEJMRU5UNFsxN107ICAgICAgICAvKiAxMTIgKi8KKwlCWVRFIGJDaXN0cGxDRlRCTEVOVDVbOF07ICAgICAgICAgLyogMTI5ICovCisJQllURSBiQ2lzdHBsQ0ZUQkxFTlQ2WzE3XTsgICAgICAgIC8qIDEzNyAqLworCUJZVEUgYkNpc3RwbENGVEJMRU5UN1s4XTsgICAgICAgICAvKiAxNTQgKi8KKwlCWVRFIGJDaXN0cGxOT0xJTktbM107ICAgICAgICAgICAgLyogMTYyICovCiB9IE1lbVN0aWNrQm9vdEJsb2NrQ0lTOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAjZGVmaW5lIE1TX0lESV9HRU5FUkFMX0NPTkYgICAgICAgICAweDg0OEEKLQlXT1JEIHdJRElnZW5lcmFsQ29uZmlndXJhdGlvbjsgICAgIC8vIDAKLQlXT1JEIHdJREludW1iZXJPZkN5bGluZGVyOyAgICAgICAgIC8vIDEKLQlXT1JEIHdJRElyZXNlcnZlZDA7ICAgICAgICAgICAgICAgIC8vIDIKLQlXT1JEIHdJREludW1iZXJPZkhlYWQ7ICAgICAgICAgICAgIC8vIDMKLQlXT1JEIHdJRElieXRlc1BlclRyYWNrOyAgICAgICAgICAgIC8vIDQKLQlXT1JEIHdJRElieXRlc1BlclNlY3RvcjsgICAgICAgICAgIC8vIDUKLQlXT1JEIHdJRElzZWN0b3JzUGVyVHJhY2s7ICAgICAgICAgIC8vIDYKLQlXT1JEIHdJREl0b3RhbFNlY3RvcnNbMl07ICAgICAgICAgIC8vIDctOCAgaGlnaCxsb3cKLQlXT1JEIHdJRElyZXNlcnZlZDFbMTFdOyAgICAgICAgICAgIC8vIDktMTkKLQlXT1JEIHdJRElidWZmZXJUeXBlOyAgICAgICAgICAgICAgIC8vIDIwCi0JV09SRCB3SURJYnVmZmVyU2l6ZTsgICAgICAgICAgICAgICAvLyAyMQotCVdPUkQgd0lESWxvbmdDbWRFQ0M7ICAgICAgICAgICAgICAgLy8gMjIKLQlXT1JEIHdJRElmaXJtVmVyc2lvbls0XTsgICAgICAgICAgIC8vIDIzLTI2Ci0JV09SRCB3SURJbW9kZWxOYW1lWzIwXTsgICAgICAgICAgICAvLyAyNy00NgotCVdPUkQgd0lESXJlc2VydmVkMjsgICAgICAgICAgICAgICAgLy8gNDcKLQlXT1JEIHdJRElsb25nV29yZFN1cHBvcnRlZDsgICAgICAgIC8vIDQ4Ci0JV09SRCB3SURJZG1hU3VwcG9ydGVkOyAgICAgICAgICAgICAvLyA0OQotCVdPUkQgd0lESXJlc2VydmVkMzsgICAgICAgICAgICAgICAgLy8gNTAKLQlXT1JEIHdJRElwaW9UaW1pbmc7ICAgICAgICAgICAgICAgIC8vIDUxCi0JV09SRCB3SURJZG1hVGltaW5nOyAgICAgICAgICAgICAgICAvLyA1MgotCVdPUkQgd0lESXRyYW5zZmVyUGFyYW1ldGVyOyAgICAgICAgLy8gNTMKLQlXT1JEIHdJRElmb3JtYXR0ZWRDeWxpbmRlcjsgICAgICAgIC8vIDU0Ci0JV09SRCB3SURJZm9ybWF0dGVkSGVhZDsgICAgICAgICAgICAvLyA1NQotCVdPUkQgd0lESWZvcm1hdHRlZFNlY3RvcnNQZXJUcmFjazsgLy8gNTYKLQlXT1JEIHdJRElmb3JtYXR0ZWRUb3RhbFNlY3RvcnNbMl07IC8vIDU3LTU4Ci0JV09SRCB3SURJbXVsdGlTZWN0b3I7ICAgICAgICAgICAgICAvLyA1OQotCVdPUkQgd0lESWxiYVNlY3RvcnNbMl07ICAgICAgICAgICAgLy8gNjAtNjEKLQlXT1JEIHdJRElzaW5nbGVXb3JkRE1BOyAgICAgICAgICAgIC8vIDYyCi0JV09SRCB3SURJbXVsdGlXb3JkRE1BOyAgICAgICAgICAgICAvLyA2MwotCVdPUkQgd0lESXJlc2VydmVkNFsxOTJdOyAgICAgICAgICAgLy8gNjQtMjU1CisJV09SRCB3SURJZ2VuZXJhbENvbmZpZ3VyYXRpb247ICAgICAvKiAwICovCisJV09SRCB3SURJbnVtYmVyT2ZDeWxpbmRlcjsgICAgICAgICAvKiAxICovCisJV09SRCB3SURJcmVzZXJ2ZWQwOyAgICAgICAgICAgICAgICAvKiAyICovCisJV09SRCB3SURJbnVtYmVyT2ZIZWFkOyAgICAgICAgICAgICAvKiAzICovCisJV09SRCB3SURJYnl0ZXNQZXJUcmFjazsgICAgICAgICAgICAvKiA0ICovCisJV09SRCB3SURJYnl0ZXNQZXJTZWN0b3I7ICAgICAgICAgICAvKiA1ICovCisJV09SRCB3SURJc2VjdG9yc1BlclRyYWNrOyAgICAgICAgICAvKiA2ICovCisJV09SRCB3SURJdG90YWxTZWN0b3JzWzJdOyAgICAgICAgICAvKiA3LTggIGhpZ2gsbG93ICovCisJV09SRCB3SURJcmVzZXJ2ZWQxWzExXTsgICAgICAgICAgICAvKiA5LTE5ICovCisJV09SRCB3SURJYnVmZmVyVHlwZTsgICAgICAgICAgICAgICAvKiAyMCAqLworCVdPUkQgd0lESWJ1ZmZlclNpemU7ICAgICAgICAgICAgICAgLyogMjEgKi8KKwlXT1JEIHdJRElsb25nQ21kRUNDOyAgICAgICAgICAgICAgIC8qIDIyICovCisJV09SRCB3SURJZmlybVZlcnNpb25bNF07ICAgICAgICAgICAvKiAyMy0yNiAqLworCVdPUkQgd0lESW1vZGVsTmFtZVsyMF07ICAgICAgICAgICAgLyogMjctNDYgKi8KKwlXT1JEIHdJRElyZXNlcnZlZDI7ICAgICAgICAgICAgICAgIC8qIDQ3ICovCisJV09SRCB3SURJbG9uZ1dvcmRTdXBwb3J0ZWQ7ICAgICAgICAvKiA0OCAqLworCVdPUkQgd0lESWRtYVN1cHBvcnRlZDsgICAgICAgICAgICAgLyogNDkgKi8KKwlXT1JEIHdJRElyZXNlcnZlZDM7ICAgICAgICAgICAgICAgIC8qIDUwICovCisJV09SRCB3SURJcGlvVGltaW5nOyAgICAgICAgICAgICAgICAvKiA1MSAqLworCVdPUkQgd0lESWRtYVRpbWluZzsgICAgICAgICAgICAgICAgLyogNTIgKi8KKwlXT1JEIHdJREl0cmFuc2ZlclBhcmFtZXRlcjsgICAgICAgIC8qIDUzICovCisJV09SRCB3SURJZm9ybWF0dGVkQ3lsaW5kZXI7ICAgICAgICAvKiA1NCAqLworCVdPUkQgd0lESWZvcm1hdHRlZEhlYWQ7ICAgICAgICAgICAgLyogNTUgKi8KKwlXT1JEIHdJRElmb3JtYXR0ZWRTZWN0b3JzUGVyVHJhY2s7IC8qIDU2ICovCisJV09SRCB3SURJZm9ybWF0dGVkVG90YWxTZWN0b3JzWzJdOyAvKiA1Ny01OCAqLworCVdPUkQgd0lESW11bHRpU2VjdG9yOyAgICAgICAgICAgICAgLyogNTkgKi8KKwlXT1JEIHdJRElsYmFTZWN0b3JzWzJdOyAgICAgICAgICAgIC8qIDYwLTYxICovCisJV09SRCB3SURJc2luZ2xlV29yZERNQTsgICAgICAgICAgICAvKiA2MiAqLworCVdPUkQgd0lESW11bHRpV29yZERNQTsgICAgICAgICAgICAgLyogNjMgKi8KKwlXT1JEIHdJRElyZXNlcnZlZDRbMTkyXTsgICAgICAgICAgIC8qIDY0LTI1NSAqLwogfSBNZW1TdGlja0Jvb3RCbG9ja0lESTsKIAogdHlwZWRlZiBzdHJ1Y3QgewpAQCAtMzQ2LDcgKzM2NCw5IEBACiAKIH0gTWVtU3RpY2tCb290QmxvY2tDSVNfSURJOwogCi0vLy0tLS0tIE1TX0xpYkNvbnRyb2wgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgorICogTVNfTGliQ29udHJvbAorICovCiB0eXBlZGVmIHN0cnVjdCB7CiAJQllURSByZXNlcnZlZDsKIAlCWVRFIGludHI7CkBAIC0zNjIsMTQgKzM4MiwxNCBAQAogCURXT1JEIEJ5dGVzUGVyU2VjdG9yOwogCURXT1JEIE51bWJlck9mQ3lsaW5kZXI7CiAJRFdPUkQgU2VjdG9yc1BlckN5bGluZGVyOwotCVdPUkQgY2FyZFR5cGU7CQkJLy8gUi9XLCBSTywgSHlicmlkCisJV09SRCBjYXJkVHlwZTsJCQkvKiBSL1csIFJPLCBIeWJyaWQgKi8KIAlXT1JEIGJsb2NrU2l6ZTsKIAlXT1JEIFBhZ2VzUGVyQmxvY2s7CiAJV09SRCBOdW1iZXJPZlBoeUJsb2NrOwogCVdPUkQgTnVtYmVyT2ZMb2dCbG9jazsKIAlXT1JEIE51bWJlck9mU2VnbWVudDsKLQlXT1JEICpQaHkyTG9nTWFwOwkJLy8gcGh5MmxvZyB0YWJsZQotCVdPUkQgKkxvZzJQaHlNYXA7CQkvLyBsb2cycGh5IHRhYmxlCisJV09SRCAqUGh5MkxvZ01hcDsJCS8qIHBoeTJsb2cgdGFibGUgKi8KKwlXT1JEICpMb2cyUGh5TWFwOwkJLyogbG9nMnBoeSB0YWJsZSAqLwogCVdPUkQgd3J0YmxrOwogCUJZVEUgcGFnZW1hcFsoTVNfTUFYX1BBR0VTX1BFUl9CTE9DSyArIChNU19MSUJfQklUU19QRVJfQllURS0xKSkgLwogCQkgICAgIE1TX0xJQl9CSVRTX1BFUl9CWVRFXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9tc3Njc2kuYyBiL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9tc3Njc2kuYwppbmRleCBjYjkyZDI1Li5jYjcxOTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcva2V1Y3IvbXNzY3NpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2tldWNyL21zc2NzaS5jCkBAIC0xLDMgKzEsNSBAQAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTEwLDY4ICsxMiw0OCBAQAogI2luY2x1ZGUgInNjc2lnbHVlLmgiCiAjaW5jbHVkZSAidHJhbnNwb3J0LmgiCiAKLWludCBNU19TQ1NJX1Rlc3RfVW5pdF9SZWFkeSAoc3RydWN0IHVzX2RhdGEgKnVzLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIpOwotaW50IE1TX1NDU0lfSW5xdWlyeSAgICAgICAgIChzdHJ1Y3QgdXNfZGF0YSAqdXMsIHN0cnVjdCBzY3NpX2NtbmQgKnNyYik7Ci1pbnQgTVNfU0NTSV9Nb2RlX1NlbnNlICAgICAgKHN0cnVjdCB1c19kYXRhICp1cywgc3RydWN0IHNjc2lfY21uZCAqc3JiKTsKLWludCBNU19TQ1NJX1N0YXJ0X1N0b3AgICAgICAoc3RydWN0IHVzX2RhdGEgKnVzLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIpOwotaW50IE1TX1NDU0lfUmVhZF9DYXBhY2l0eSAgIChzdHJ1Y3QgdXNfZGF0YSAqdXMsIHN0cnVjdCBzY3NpX2NtbmQgKnNyYik7Ci1pbnQgTVNfU0NTSV9SZWFkICAgICAgICAgICAgKHN0cnVjdCB1c19kYXRhICp1cywgc3RydWN0IHNjc2lfY21uZCAqc3JiKTsKLWludCBNU19TQ1NJX1dyaXRlICAgICAgICAgICAoc3RydWN0IHVzX2RhdGEgKnVzLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIpOwotCi0vLy0tLS0tIE1TX1NDU0lJcnAoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotaW50IE1TX1NDU0lJcnAoc3RydWN0IHVzX2RhdGEgKnVzLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIpCi17Ci0JaW50ICAgIHJlc3VsdDsKLQotCXVzLT5TcmJTdGF0dXMgPSBTU19TVUNDRVNTOwotCXN3aXRjaCAoc3JiLT5jbW5kWzBdKQotCXsKLQkJY2FzZSBURVNUX1VOSVRfUkVBRFkgOiAgcmVzdWx0ID0gTVNfU0NTSV9UZXN0X1VuaXRfUmVhZHkgKHVzLCBzcmIpOyAgYnJlYWs7IC8vMHgwMAotCQljYXNlIElOUVVJUlkgICAgICAgICA6ICByZXN1bHQgPSBNU19TQ1NJX0lucXVpcnkgICAgICAgICAodXMsIHNyYik7ICBicmVhazsgLy8weDEyCi0JCWNhc2UgTU9ERV9TRU5TRSAgICAgIDogIHJlc3VsdCA9IE1TX1NDU0lfTW9kZV9TZW5zZSAgICAgICh1cywgc3JiKTsgIGJyZWFrOyAvLzB4MUEKLQkJY2FzZSBSRUFEX0NBUEFDSVRZICAgOiAgcmVzdWx0ID0gTVNfU0NTSV9SZWFkX0NhcGFjaXR5ICAgKHVzLCBzcmIpOyAgYnJlYWs7IC8vMHgyNQotCQljYXNlIFJFQURfMTAgICAgICAgICA6ICByZXN1bHQgPSBNU19TQ1NJX1JlYWQgICAgICAgICAgICAodXMsIHNyYik7ICBicmVhazsgLy8weDI4Ci0JCWNhc2UgV1JJVEVfMTAgICAgICAgIDogIHJlc3VsdCA9IE1TX1NDU0lfV3JpdGUgICAgICAgICAgICh1cywgc3JiKTsgIGJyZWFrOyAvLzB4MkEKLQotCQlkZWZhdWx0OgotCQkJdXMtPlNyYlN0YXR1cyA9IFNTX0lMTEVHQUxfUkVRVUVTVDsKLQkJCXJlc3VsdCA9IFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7Ci0JCQlicmVhazsKLQl9Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8tLS0tLSBNU19TQ1NJX1Rlc3RfVW5pdF9SZWFkeSgpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgorICogTVNfU0NTSV9UZXN0X1VuaXRfUmVhZHkoKQorICovCiBpbnQgTVNfU0NTSV9UZXN0X1VuaXRfUmVhZHkoc3RydWN0IHVzX2RhdGEgKnVzLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIpCiB7Ci0JLy9wcmludGsoIk1TX1NDU0lfVGVzdF9Vbml0X1JlYWR5XG4iKTsKKwkvKiBwcl9pbmZvKCJNU19TQ1NJX1Rlc3RfVW5pdF9SZWFkeVxuIik7ICovCiAJaWYgKHVzLT5NU19TdGF0dXMuSW5zZXJ0ICYmIHVzLT5NU19TdGF0dXMuUmVhZHkpCiAJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKLQllbHNlCi0JeworCWVsc2UgewogCQlFTkVfTVNJbml0KHVzKTsKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOwogCX0KLQkJCisKIAlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CiB9CiAKLS8vLS0tLS0gTVNfU0NTSV9JbnF1aXJ5KCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qCisgKiBNU19TQ1NJX0lucXVpcnkoKQorICovCiBpbnQgTVNfU0NTSV9JbnF1aXJ5KHN0cnVjdCB1c19kYXRhICp1cywgc3RydWN0IHNjc2lfY21uZCAqc3JiKQogewotCS8vcHJpbnRrKCJNU19TQ1NJX0lucXVpcnlcbiIpOwotCUJZVEUgZGF0YV9wdHJbMzZdID0gezB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MUYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NTMsIDB4NDIsIDB4MzIsIDB4MkUsIDB4MzAsIDB4MjAsIDB4MjAsIDB4NDMsIDB4NjEsIDB4NzIsIDB4NjQsIDB4NTIsIDB4NjUsIDB4NjEsIDB4NjQsIDB4NjUsIDB4NzIsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MzAsIDB4MzEsIDB4MzAsIDB4MzB9OworCS8qIHByX2luZm8oIk1TX1NDU0lfSW5xdWlyeVxuIik7ICovCisJQllURSBkYXRhX3B0clszNl0gPSB7MHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgxRiwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDU1LCAweDUzLCAweDQyLCAweDMyLAorCQkJCTB4MkUsIDB4MzAsIDB4MjAsIDB4MjAsIDB4NDMsIDB4NjEsCisJCQkJMHg3MiwgMHg2NCwgMHg1MiwgMHg2NSwgMHg2MSwgMHg2NCwKKwkJCQkweDY1LCAweDcyLCAweDIwLCAweDIwLCAweDIwLCAweDIwLAorCQkJCTB4MjAsIDB4MjAsIDB4MzAsIDB4MzEsIDB4MzAsIDB4MzB9OwogCiAJdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKHVzLCBkYXRhX3B0ciwgMzYsIHNyYiwgVE9fWEZFUl9CVUYpOwogCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKIH0KIAotCi0vLy0tLS0tIE1TX1NDU0lfTW9kZV9TZW5zZSgpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgorICogTVNfU0NTSV9Nb2RlX1NlbnNlKCkKKyAqLwogaW50IE1TX1NDU0lfTW9kZV9TZW5zZShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHN0cnVjdCBzY3NpX2NtbmQgKnNyYikKIHsKLQlCWVRFCW1lZGlhTm9XUFsxMl0gPSB7MHgwYiwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDAsMHg3MSwweGMwLDB4MDAsMHgwMCwweDAyLDB4MDB9OwotCUJZVEUJbWVkaWFXUFsxMl0gICA9IHsweDBiLDB4MDAsMHg4MCwweDA4LDB4MDAsMHgwMCwweDcxLDB4YzAsMHgwMCwweDAwLDB4MDIsMHgwMH07CisJQllURQltZWRpYU5vV1BbMTJdID0gezB4MGIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsCisJCQkJCTB4NzEsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDB9OworCUJZVEUJbWVkaWFXUFsxMl0gICA9IHsweDBiLCAweDAwLCAweDgwLCAweDA4LCAweDAwLCAweDAwLAorCQkJCQkweDcxLCAweGMwLCAweDAwLCAweDAwLCAweDAyLCAweDAwfTsKIAogCWlmICh1cy0+TVNfU3RhdHVzLld0UCkKIAkJdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKHVzLCBtZWRpYVdQLCAxMiwgc3JiLCBUT19YRkVSX0JVRik7CkBAIC04Miw3ICs2NCw5IEBACiAJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOwogfQogCi0vLy0tLS0tIE1TX1NDU0lfUmVhZF9DYXBhY2l0eSgpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgorICogTVNfU0NTSV9SZWFkX0NhcGFjaXR5KCkKKyAqLwogaW50IE1TX1NDU0lfUmVhZF9DYXBhY2l0eShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHN0cnVjdCBzY3NpX2NtbmQgKnNyYikKIHsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMDsKQEAgLTkxLDYwICs3NSw2NSBAQAogCVdPUkQgICAgYmxfbGVuOwogCUJZVEUgICAgYnVmWzhdOwogCi0JcHJpbnRrKCJNU19TQ1NJX1JlYWRfQ2FwYWNpdHlcbiIpOworCXByX2luZm8oIk1TX1NDU0lfUmVhZF9DYXBhY2l0eVxuIik7CiAKIAlibF9sZW4gPSAweDIwMDsKLQlpZiAoIHVzLT5NU19TdGF0dXMuSXNNU1BybyApCisJaWYgKHVzLT5NU19TdGF0dXMuSXNNU1BybykKIAkJYmxfbnVtID0gdXMtPk1TUF9Ub3RhbEJsb2NrIC0gMTsKIAllbHNlCi0JCWJsX251bSA9IHVzLT5NU19MaWIuTnVtYmVyT2ZMb2dCbG9jayAqIHVzLT5NU19MaWIuYmxvY2tTaXplICogMiAtIDE7CisJCWJsX251bSA9IHVzLT5NU19MaWIuTnVtYmVyT2ZMb2dCbG9jayAqCisJCQkJdXMtPk1TX0xpYi5ibG9ja1NpemUgKiAyIC0gMTsKIAogCXVzLT5ibF9udW0gPSBibF9udW07Ci0JcHJpbnRrKCJibF9sZW4gPSAleFxuIiwgYmxfbGVuKTsKLQlwcmludGsoImJsX251bSA9ICV4XG4iLCBibF9udW0pOworCXByX2luZm8oImJsX2xlbiA9ICV4XG4iLCBibF9sZW4pOworCXByX2luZm8oImJsX251bSA9ICV4XG4iLCBibF9udW0pOwogCi0JLy9zcmItPnJlcXVlc3RfYnVmZmxlbiA9IDg7Ci0JYnVmWzBdID0gKGJsX251bT4+MjQpICYgMHhmZjsKLQlidWZbMV0gPSAoYmxfbnVtPj4xNikgJiAweGZmOwotCWJ1ZlsyXSA9IChibF9udW0+PiA4KSAmIDB4ZmY7Ci0JYnVmWzNdID0gKGJsX251bT4+IDApICYgMHhmZjsKLQlidWZbNF0gPSAoYmxfbGVuPj4yNCkgJiAweGZmOwotCWJ1Zls1XSA9IChibF9sZW4+PjE2KSAmIDB4ZmY7Ci0JYnVmWzZdID0gKGJsX2xlbj4+IDgpICYgMHhmZjsKLQlidWZbN10gPSAoYmxfbGVuPj4gMCkgJiAweGZmOwotCQorCS8qIHNyYi0+cmVxdWVzdF9idWZmbGVuID0gODsgKi8KKwlidWZbMF0gPSAoYmxfbnVtID4+IDI0KSAmIDB4ZmY7CisJYnVmWzFdID0gKGJsX251bSA+PiAxNikgJiAweGZmOworCWJ1ZlsyXSA9IChibF9udW0gPj4gOCkgJiAweGZmOworCWJ1ZlszXSA9IChibF9udW0gPj4gMCkgJiAweGZmOworCWJ1Zls0XSA9IChibF9sZW4gPj4gMjQpICYgMHhmZjsKKwlidWZbNV0gPSAoYmxfbGVuID4+IDE2KSAmIDB4ZmY7CisJYnVmWzZdID0gKGJsX2xlbiA+PiA4KSAmIDB4ZmY7CisJYnVmWzddID0gKGJsX2xlbiA+PiAwKSAmIDB4ZmY7CisKIAl1c2Jfc3Rvcl9hY2Nlc3NfeGZlcl9idWYodXMsIGJ1ZiwgOCwgc3JiLCAmc2csICZvZmZzZXQsIFRPX1hGRVJfQlVGKTsKLQkvL3VzYl9zdG9yX3NldF94ZmVyX2J1Zih1cywgYnVmLCBzcmItPnJlcXVlc3RfYnVmZmxlbiwgc3JiLCBUT19YRkVSX0JVRik7CisJLyogdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKHVzLCBidWYsIHNyYi0+cmVxdWVzdF9idWZmbGVuLAorCQkJCQkJc3JiLCBUT19YRkVSX0JVRik7ICovCiAKIAlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CiB9CiAKLS8vLS0tLS0gTVNfU0NTSV9SZWFkKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qCisgKiBNU19TQ1NJX1JlYWQoKQorICovCiBpbnQgTVNfU0NTSV9SZWFkKHN0cnVjdCB1c19kYXRhICp1cywgc3RydWN0IHNjc2lfY21uZCAqc3JiKQogewogCXN0cnVjdCBidWxrX2NiX3dyYXAgKmJjYiA9IChzdHJ1Y3QgYnVsa19jYl93cmFwICopIHVzLT5pb2J1ZjsKLQlpbnQgcmVzdWx0PTA7CisJaW50IHJlc3VsdCA9IDA7CiAJUEJZVEUJQ2RiID0gc3JiLT5jbW5kOwotCURXT1JEIGJuICA9ICAoKENkYlsyXTw8MjQpICYgMHhmZjAwMDAwMCkgfCAoKENkYlszXTw8MTYpICYgMHgwMGZmMDAwMCkgfAotICAgICAgICAgICAgICAgICAgICgoQ2RiWzRdPDwgOCkgJiAweDAwMDBmZjAwKSB8ICgoQ2RiWzVdPDwgMCkgJiAweDAwMDAwMGZmKTsKLQlXT1JEICBibGVuID0gKChDZGJbN108PCA4KSAmIDB4ZmYwMCkgICAgIHwgKChDZGJbOF08PCAwKSAmIDB4MDBmZik7CisJRFdPUkQgYm4gID0gICgoQ2RiWzJdIDw8IDI0KSAmIDB4ZmYwMDAwMDApIHwKKwkJCSgoQ2RiWzNdIDw8IDE2KSAmIDB4MDBmZjAwMDApIHwKKwkJCSgoQ2RiWzRdIDw8IDgpICYgMHgwMDAwZmYwMCkgfAorCQkJKChDZGJbNV0gPDwgMCkgJiAweDAwMDAwMGZmKTsKKwlXT1JEICBibGVuID0gKChDZGJbN10gPDwgOCkgJiAweGZmMDApIHwgKChDZGJbOF0gPDwgMCkgJiAweDAwZmYpOwogCURXT1JECWJsZW5CeXRlID0gYmxlbiAqIDB4MjAwOwogCi0JLy9wcmludGsoIlNDU0lPUF9SRUFEIC0tLSBibiA9ICVYLCBibGVuID0gJVgsIHNyYi0+dXNlX3NnID0gJVhcbiIsIGJuLCBibGVuLCBzcmItPnVzZV9zZyk7Ci0JCisJLyogcHJfaW5mbygiU0NTSU9QX1JFQUQgLS0tIGJuID0gJVgsIGJsZW4gPSAlWCwgc3JiLT51c2Vfc2cgPSAlWFxuIiwKKwkJCQkJCWJuLCBibGVuLCBzcmItPnVzZV9zZyk7ICovCisKIAlpZiAoYm4gPiB1cy0+YmxfbnVtKQogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwogCi0JaWYgKHVzLT5NU19TdGF0dXMuSXNNU1BybykKLQl7CisJaWYgKHVzLT5NU19TdGF0dXMuSXNNU1BybykgewogCQlyZXN1bHQgPSBFTkVfTG9hZEJpbkNvZGUodXMsIE1TUF9SV19QQVRURVJOKTsKLQkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCi0JCXsKLQkJCXByaW50aygiTG9hZCBNU1AgUlcgcGF0dGVybiBGYWlsICEhXG4iKTsKKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJCXByX2luZm8oIkxvYWQgTVNQIFJXIHBhdHRlcm4gRmFpbCAhIVxuIik7CiAJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwogCQl9CiAKLQkJLy8gc2V0IHVwIHRoZSBjb21tYW5kIHdyYXBwZXIKKwkJLyogIHNldCB1cCB0aGUgY29tbWFuZCB3cmFwcGVyICovCiAJCW1lbXNldChiY2IsIDAsIHNpemVvZihzdHJ1Y3QgYnVsa19jYl93cmFwKSk7CiAJCWJjYi0+U2lnbmF0dXJlID0gY3B1X3RvX2xlMzIoVVNfQlVMS19DQl9TSUdOKTsKIAkJYmNiLT5EYXRhVHJhbnNmZXJMZW5ndGggPSBibGVuQnl0ZTsKQEAgLTE1NywxMSArMTQ2LDkgQEAKIAkJYmNiLT5DREJbMl0gPSAoQllURSkoYm4+PjI0KTsKIAogCQlyZXN1bHQgPSBFTkVfU2VuZFNjc2lDbWQodXMsIEZESVJfUkVBRCwgc2NzaV9zZ2xpc3Qoc3JiKSwgMSk7Ci0JfQotCWVsc2UKLQl7CisJfSBlbHNlIHsKIAkJdm9pZAkqYnVmOwotCQlpbnQJb2Zmc2V0PTA7CisJCWludAlvZmZzZXQgPSAwOwogCQlXT1JECXBoeWJsaywgbG9nYmxrOwogCQlCWVRFCVBhZ2VOdW07CiAJCVdPUkQJbGVuOwpAQCAtMTcyLDkgKzE1OSw4IEBACiAJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwogCiAJCXJlc3VsdCA9IEVORV9Mb2FkQmluQ29kZSh1cywgTVNfUldfUEFUVEVSTik7Ci0JCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQotCQl7Ci0JCQlwcmludGsoIkxvYWQgTVMgUlcgcGF0dGVybiBGYWlsICEhXG4iKTsKKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJCXByX2luZm8oIkxvYWQgTVMgUlcgcGF0dGVybiBGYWlsICEhXG4iKTsKIAkJCXJlc3VsdCA9IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKIAkJCWdvdG8gZXhpdDsKIAkJfQpAQCAtMTgyLDkgKzE2OCw4IEBACiAJCWxvZ2JsayAgPSAoV09SRCkoYm4gLyB1cy0+TVNfTGliLlBhZ2VzUGVyQmxvY2spOwogCQlQYWdlTnVtID0gKEJZVEUpKGJuICUgdXMtPk1TX0xpYi5QYWdlc1BlckJsb2NrKTsKIAotCQl3aGlsZSgxKQotCQl7Ci0JCQlpZiAoYmxlbiA+ICh1cy0+TVNfTGliLlBhZ2VzUGVyQmxvY2stUGFnZU51bSkgKQorCQl3aGlsZSAoMSkgeworCQkJaWYgKGJsZW4gPiAodXMtPk1TX0xpYi5QYWdlc1BlckJsb2NrLVBhZ2VOdW0pKQogCQkJCWxlbiA9IHVzLT5NU19MaWIuUGFnZXNQZXJCbG9jay1QYWdlTnVtOwogCQkJZWxzZQogCQkJCWxlbiA9IGJsZW47CkBAIC0xOTIsNyArMTc3LDcgQEAKIAkJCXBoeWJsayA9IE1TX0xpYkNvbnYyUGh5c2ljYWwodXMsIGxvZ2Jsayk7CiAJCQlibGtubyAgPSBwaHlibGsgKiAweDIwICsgUGFnZU51bTsKIAotCQkJLy8gc2V0IHVwIHRoZSBjb21tYW5kIHdyYXBwZXIKKwkJCS8qIHNldCB1cCB0aGUgY29tbWFuZCB3cmFwcGVyICovCiAJCQltZW1zZXQoYmNiLCAwLCBzaXplb2Yoc3RydWN0IGJ1bGtfY2Jfd3JhcCkpOwogCQkJYmNiLT5TaWduYXR1cmUgPSBjcHVfdG9fbGUzMihVU19CVUxLX0NCX1NJR04pOwogCQkJYmNiLT5EYXRhVHJhbnNmZXJMZW5ndGggPSAweDIwMCAqIGxlbjsKQEAgLTIwNSwxNSArMTkwLDE1IEBACiAJCQliY2ItPkNEQlsyXSA9IChCWVRFKShibGtubz4+MjQpOwogCiAJCQlyZXN1bHQgPSBFTkVfU2VuZFNjc2lDbWQodXMsIEZESVJfUkVBRCwgYnVmK29mZnNldCwgMCk7Ci0JCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKLQkJCXsKLQkJCQlwcmludGsoIk1TX1NDU0lfUmVhZCAtLS0gcmVzdWx0ID0gJXhcbiIsIHJlc3VsdCk7CisJCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQkJCXByX2luZm8oIk1TX1NDU0lfUmVhZCAtLS0gcmVzdWx0ID0gJXhcbiIsCisJCQkJCQkJCXJlc3VsdCk7CiAJCQkJcmVzdWx0ID0gIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKIAkJCQlnb3RvIGV4aXQ7CiAJCQl9CiAKIAkJCWJsZW4gLT0gbGVuOwotCQkJaWYgKGJsZW48PTApCisJCQlpZiAoYmxlbiA8PSAwKQogCQkJCWJyZWFrOwogCQkJbG9nYmxrKys7CiAJCQlQYWdlTnVtID0gMDsKQEAgLTIyNiwzMCArMjExLDMyIEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotLy8tLS0tLSBNU19TQ1NJX1dyaXRlKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qCisgKiBNU19TQ1NJX1dyaXRlKCkKKyAqLwogaW50IE1TX1NDU0lfV3JpdGUoc3RydWN0IHVzX2RhdGEgKnVzLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIpCiB7CiAJc3RydWN0IGJ1bGtfY2Jfd3JhcCAqYmNiID0gKHN0cnVjdCBidWxrX2NiX3dyYXAgKikgdXMtPmlvYnVmOwotCWludCByZXN1bHQ9MDsKKwlpbnQgcmVzdWx0ID0gMDsKIAlQQllURQlDZGIgPSBzcmItPmNtbmQ7Ci0JRFdPUkQgYm4gID0gICgoQ2RiWzJdPDwyNCkgJiAweGZmMDAwMDAwKSB8ICgoQ2RiWzNdPDwxNikgJiAweDAwZmYwMDAwKSB8Ci0gICAgICAgICAgICAgICAgICAgKChDZGJbNF08PCA4KSAmIDB4MDAwMGZmMDApIHwgKChDZGJbNV08PCAwKSAmIDB4MDAwMDAwZmYpOwotCVdPUkQgIGJsZW4gPSAoKENkYls3XTw8IDgpICYgMHhmZjAwKSAgICAgfCAoKENkYls4XTw8IDApICYgMHgwMGZmKTsKKwlEV09SRCBibiAgPSAoKENkYlsyXSA8PCAyNCkgJiAweGZmMDAwMDAwKSB8CisJCQkoKENkYlszXSA8PCAxNikgJiAweDAwZmYwMDAwKSB8CisJCQkoKENkYls0XSA8PCA4KSAmIDB4MDAwMGZmMDApIHwKKwkJCSgoQ2RiWzVdIDw8IDApICYgMHgwMDAwMDBmZik7CisJV09SRCAgYmxlbiA9ICgoQ2RiWzddIDw8IDgpICYgMHhmZjAwKSAgICAgfCAoKENkYls4XSA8PCAwKSAmIDB4MDBmZik7CiAJRFdPUkQJYmxlbkJ5dGUgPSBibGVuICogMHgyMDA7CiAKIAlpZiAoYm4gPiB1cy0+YmxfbnVtKQogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwogCi0JaWYgKHVzLT5NU19TdGF0dXMuSXNNU1BybykKLQl7CisJaWYgKHVzLT5NU19TdGF0dXMuSXNNU1BybykgewogCQlyZXN1bHQgPSBFTkVfTG9hZEJpbkNvZGUodXMsIE1TUF9SV19QQVRURVJOKTsKLQkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCi0JCXsKLQkJCXByaW50aygiTG9hZCBNU1AgUlcgcGF0dGVybiBGYWlsICEhXG4iKTsKKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJCXByX2luZm8oIkxvYWQgTVNQIFJXIHBhdHRlcm4gRmFpbCAhIVxuIik7CiAJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwogCQl9CiAKLQkJLy8gc2V0IHVwIHRoZSBjb21tYW5kIHdyYXBwZXIKKwkJLyogc2V0IHVwIHRoZSBjb21tYW5kIHdyYXBwZXIgKi8KIAkJbWVtc2V0KGJjYiwgMCwgc2l6ZW9mKHN0cnVjdCBidWxrX2NiX3dyYXApKTsKIAkJYmNiLT5TaWduYXR1cmUgPSBjcHVfdG9fbGUzMihVU19CVUxLX0NCX1NJR04pOwogCQliY2ItPkRhdGFUcmFuc2Zlckxlbmd0aCA9IGJsZW5CeXRlOwpAQCAtMjYyLDExICsyNDksOSBAQAogCQliY2ItPkNEQlsyXSA9IChCWVRFKShibj4+MjQpOwogCiAJCXJlc3VsdCA9IEVORV9TZW5kU2NzaUNtZCh1cywgRkRJUl9XUklURSwgc2NzaV9zZ2xpc3Qoc3JiKSwgMSk7Ci0JfQotCWVsc2UKLQl7CisJfSBlbHNlIHsKIAkJdm9pZAkqYnVmOwotCQlpbnQJb2Zmc2V0PTA7CisJCWludAlvZmZzZXQgPSAwOwogCQlXT1JECVBoeUJsb2NrQWRkcjsKIAkJQllURQlQYWdlTnVtOwogCQlEV09SRAlyZXN1bHQ7CkBAIC0yNzgsOSArMjYzLDggQEAKIAkJdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKHVzLCBidWYsIGJsZW5CeXRlLCBzcmIsIEZST01fWEZFUl9CVUYpOwogCiAJCXJlc3VsdCA9IEVORV9Mb2FkQmluQ29kZSh1cywgTVNfUldfUEFUVEVSTik7Ci0JCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQotCQl7Ci0JCQlwcmludGsoIkxvYWQgTVMgUlcgcGF0dGVybiBGYWlsICEhXG4iKTsKKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJCXByX2luZm8oIkxvYWQgTVMgUlcgcGF0dGVybiBGYWlsICEhXG4iKTsKIAkJCXJlc3VsdCA9IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKIAkJCWdvdG8gZXhpdDsKIAkJfQpAQCAtMjg4LDkgKzI3Miw4IEBACiAJCVBoeUJsb2NrQWRkciA9IChXT1JEKShibiAvIHVzLT5NU19MaWIuUGFnZXNQZXJCbG9jayk7CiAJCVBhZ2VOdW0gICAgICA9IChCWVRFKShibiAlIHVzLT5NU19MaWIuUGFnZXNQZXJCbG9jayk7CiAKLQkJd2hpbGUoMSkKLQkJewotCQkJaWYgKGJsZW4gPiAodXMtPk1TX0xpYi5QYWdlc1BlckJsb2NrLVBhZ2VOdW0pICkKKwkJd2hpbGUgKDEpIHsKKwkJCWlmIChibGVuID4gKHVzLT5NU19MaWIuUGFnZXNQZXJCbG9jay1QYWdlTnVtKSkKIAkJCQlsZW4gPSB1cy0+TVNfTGliLlBhZ2VzUGVyQmxvY2stUGFnZU51bTsKIAkJCWVsc2UKIAkJCQlsZW4gPSBibGVuOwpAQCAtMjk4LDEwICsyODEsMTIgQEAKIAkJCW9sZHBoeSA9IE1TX0xpYkNvbnYyUGh5c2ljYWwodXMsIFBoeUJsb2NrQWRkcik7CiAJCQluZXdwaHkgPSBNU19MaWJTZWFyY2hCbG9ja0Zyb21Mb2dpY2FsKHVzLCBQaHlCbG9ja0FkZHIpOwogCi0JCQlyZXN1bHQgPSBNU19SZWFkZXJDb3B5QmxvY2sodXMsIG9sZHBoeSwgbmV3cGh5LCBQaHlCbG9ja0FkZHIsIFBhZ2VOdW0sIGJ1ZitvZmZzZXQsIGxlbik7Ci0JCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKLQkJCXsKLQkJCQlwcmludGsoIk1TX1NDU0lfV3JpdGUgLS0tIHJlc3VsdCA9ICV4XG4iLCByZXN1bHQpOworCQkJcmVzdWx0ID0gTVNfUmVhZGVyQ29weUJsb2NrKHVzLCBvbGRwaHksIG5ld3BoeSwKKwkJCQkJCQlQaHlCbG9ja0FkZHIsIFBhZ2VOdW0sCisJCQkJCQkJYnVmK29mZnNldCwgbGVuKTsKKwkJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCQkJcHJfaW5mbygiTVNfU0NTSV9Xcml0ZSAtLS0gcmVzdWx0ID0gJXhcbiIsCisJCQkJCQkJCXJlc3VsdCk7CiAJCQkJcmVzdWx0ID0gIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKIAkJCQlnb3RvIGV4aXQ7CiAJCQl9CkBAIC0zMTAsNyArMjk1LDcgQEAKIAkJCU1TX0xpYkZvcmNlU2V0TG9naWNhbFBhaXIodXMsIFBoeUJsb2NrQWRkciwgbmV3cGh5KTsKIAogCQkJYmxlbiAtPSBsZW47Ci0JCQlpZiAoYmxlbjw9MCkKKwkJCWlmIChibGVuIDw9IDApCiAJCQkJYnJlYWs7CiAJCQlQaHlCbG9ja0FkZHIrKzsKIAkJCVBhZ2VOdW0gPSAwOwpAQCAtMzIyLDMgKzMwNywzOCBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKKy8qCisgKiBNU19TQ1NJSXJwKCkKKyAqLworaW50IE1TX1NDU0lJcnAoc3RydWN0IHVzX2RhdGEgKnVzLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIpCit7CisJaW50ICAgIHJlc3VsdDsKKworCXVzLT5TcmJTdGF0dXMgPSBTU19TVUNDRVNTOworCXN3aXRjaCAoc3JiLT5jbW5kWzBdKSB7CisJY2FzZSBURVNUX1VOSVRfUkVBRFk6CisJCXJlc3VsdCA9IE1TX1NDU0lfVGVzdF9Vbml0X1JlYWR5KHVzLCBzcmIpOworCQlicmVhazsgLyogMHgwMCAqLworCWNhc2UgSU5RVUlSWToKKwkJcmVzdWx0ID0gTVNfU0NTSV9JbnF1aXJ5KHVzLCBzcmIpOworCQlicmVhazsgLyogMHgxMiAqLworCWNhc2UgTU9ERV9TRU5TRToKKwkJcmVzdWx0ID0gTVNfU0NTSV9Nb2RlX1NlbnNlKHVzLCBzcmIpOworCQlicmVhazsgLyogMHgxQSAqLworCWNhc2UgUkVBRF9DQVBBQ0lUWToKKwkJcmVzdWx0ID0gTVNfU0NTSV9SZWFkX0NhcGFjaXR5KHVzLCBzcmIpOworCQlicmVhazsgLyogMHgyNSAqLworCWNhc2UgUkVBRF8xMDoKKwkJcmVzdWx0ID0gTVNfU0NTSV9SZWFkKHVzLCBzcmIpOworCQlicmVhazsgLyogMHgyOCAqLworCWNhc2UgV1JJVEVfMTA6CisJCXJlc3VsdCA9IE1TX1NDU0lfV3JpdGUodXMsIHNyYik7CisJCWJyZWFrOwkvKiAweDJBICovCisJZGVmYXVsdDoKKwkJdXMtPlNyYlN0YXR1cyA9IFNTX0lMTEVHQUxfUkVRVUVTVDsKKwkJcmVzdWx0ID0gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9zY3NpZ2x1ZS5jIGIvZHJpdmVycy9zdGFnaW5nL2tldWNyL3Njc2lnbHVlLmMKaW5kZXggZGE0ZjQyYS4uMTM1ZjdmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2tldWNyL3Njc2lnbHVlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2tldWNyL3Njc2lnbHVlLmMKQEAgLTEsMyArMSw1IEBACisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KQEAgLTEzLDE5ICsxNSwyMyBAQAogI2luY2x1ZGUgInRyYW5zcG9ydC5oIgogCiAvKiBIb3N0IGZ1bmN0aW9ucyAqLwotLy8tLS0tLSBob3N0X2luZm8oKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXN0YXRpYyBjb25zdCBjaGFyKiBob3N0X2luZm8oc3RydWN0IFNjc2lfSG9zdCAqaG9zdCkKKy8qCisgKiBob3N0X2luZm8oKQorICovCitzdGF0aWMgY29uc3QgY2hhciAqaG9zdF9pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpCiB7Ci0JLy9wcmludGsoInNjc2lnbHVlIC0tLSBob3N0X2luZm9cbiIpOworCS8qIHByX2luZm8oInNjc2lnbHVlIC0tLSBob3N0X2luZm9cbiIpOyAqLwogCXJldHVybiAiU0NTSSBlbXVsYXRpb24gZm9yIFVTQiBNYXNzIFN0b3JhZ2UgZGV2aWNlcyI7CiB9CiAKLS8vLS0tLS0gc2xhdmVfYWxsb2MoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qCisgKiBzbGF2ZV9hbGxvYygpCisgKi8KIHN0YXRpYyBpbnQgc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewogCXN0cnVjdCB1c19kYXRhICp1cyA9IGhvc3RfdG9fdXMoc2Rldi0+aG9zdCk7CiAKLQkvL3ByaW50aygic2NzaWdsdWUgLS0tIHNsYXZlX2FsbG9jXG4iKTsKKwkvKiBwcl9pbmZvKCJzY3NpZ2x1ZSAtLS0gc2xhdmVfYWxsb2NcbiIpOyAqLwogCXNkZXYtPmlucXVpcnlfbGVuID0gMzY7CiAKIAlibGtfcXVldWVfdXBkYXRlX2RtYV9hbGlnbm1lbnQoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgKDUxMiAtIDEpKTsKQEAgLTM2LDE0ICs0MiwxNSBAQAogCXJldHVybiAwOwogfQogCi0vLy0tLS0tIHNsYXZlX2NvbmZpZ3VyZSgpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLyoKKyAqIHNsYXZlX2NvbmZpZ3VyZSgpCisgKi8KIHN0YXRpYyBpbnQgc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKIAlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSBob3N0X3RvX3VzKHNkZXYtPmhvc3QpOwogCi0JLy9wcmludGsoInNjc2lnbHVlIC0tLSBzbGF2ZV9jb25maWd1cmVcbiIpOwotCWlmICh1cy0+ZmZsYWdzICYgKFVTX0ZMX01BWF9TRUNUT1JTXzY0IHwgVVNfRkxfTUFYX1NFQ1RPUlNfTUlOKSkKLQl7CisJLyogcHJfaW5mbygic2NzaWdsdWUgLS0tIHNsYXZlX2NvbmZpZ3VyZVxuIik7ICovCisJaWYgKHVzLT5mZmxhZ3MgJiAoVVNfRkxfTUFYX1NFQ1RPUlNfNjQgfCBVU19GTF9NQVhfU0VDVE9SU19NSU4pKSB7CiAJCXVuc2lnbmVkIGludCBtYXhfc2VjdG9ycyA9IDY0OwogCiAJCWlmICh1cy0+ZmZsYWdzICYgVVNfRkxfTUFYX1NFQ1RPUlNfTUlOKQpAQCAtNTMsOSArNjAsOSBAQAogCQkJCQkgICAgICBtYXhfc2VjdG9ycyk7CiAJfQogCi0JaWYgKHNkZXYtPnR5cGUgPT0gVFlQRV9ESVNLKQotCXsKLQkJaWYgKHVzLT5zdWJjbGFzcyAhPSBVU0JfU0NfU0NTSSAmJiB1cy0+c3ViY2xhc3MgIT0gVVNCX1NDX0NZUF9BVEFDQikKKwlpZiAoc2Rldi0+dHlwZSA9PSBUWVBFX0RJU0spIHsKKwkJaWYgKHVzLT5zdWJjbGFzcyAhPSBVU0JfU0NfU0NTSSAmJgorCQkJdXMtPnN1YmNsYXNzICE9IFVTQl9TQ19DWVBfQVRBQ0IpCiAJCQlzZGV2LT51c2VfMTBfZm9yX21zID0gMTsKIAkJc2Rldi0+dXNlXzE5Ml9ieXRlc19mb3JfM2YgPSAxOwogCQlpZiAodXMtPmZmbGFncyAmIFVTX0ZMX05PX1dQX0RFVEVDVCkKQEAgLTcwLDEzICs3NywxMiBAQAogCQlzZGV2LT5yZXRyeV9od2Vycm9yID0gMTsKIAkJc2Rldi0+YWxsb3dfcmVzdGFydCA9IDE7CiAJCXNkZXYtPmxhc3Rfc2VjdG9yX2J1ZyA9IDE7Ci0JfQotCWVsc2UKLQl7CisJfSBlbHNlIHsKIAkJc2Rldi0+dXNlXzEwX2Zvcl9tcyA9IDE7CiAJfQogCi0JaWYgKCh1cy0+cHJvdG9jb2wgPT0gVVNCX1BSX0NCIHx8IHVzLT5wcm90b2NvbCA9PSBVU0JfUFJfQ0JJKSAmJiBzZGV2LT5zY3NpX2xldmVsID09IFNDU0lfVU5LTk9XTikKKwlpZiAoKHVzLT5wcm90b2NvbCA9PSBVU0JfUFJfQ0IgfHwgdXMtPnByb3RvY29sID09IFVTQl9QUl9DQkkpICYmCisJCQkJCXNkZXYtPnNjc2lfbGV2ZWwgPT0gU0NTSV9VTktOT1dOKQogCQl1cy0+bWF4X2x1biA9IDA7CiAKIAlpZiAodXMtPmZmbGFncyAmIFVTX0ZMX05PVF9MT0NLQUJMRSkKQEAgLTg2LDI0ICs5MiwyNiBAQAogfQogCiAvKiBUaGlzIGlzIGFsd2F5cyBjYWxsZWQgd2l0aCBzY3NpX2xvY2soaG9zdCkgaGVsZCAqLwotLy8tLS0tLSBxdWV1ZWNvbW1hbmQoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXN0YXRpYyBpbnQgcXVldWVjb21tYW5kX2xjayhzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKQorLyoKKyAqIHF1ZXVlY29tbWFuZCgpCisgKi8KK3N0YXRpYyBpbnQgcXVldWVjb21tYW5kX2xjayhzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsCisJCQkJdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpCiB7CiAJc3RydWN0IHVzX2RhdGEgKnVzID0gaG9zdF90b191cyhzcmItPmRldmljZS0+aG9zdCk7CiAKLQkvL3ByaW50aygic2NzaWdsdWUgLS0tIHF1ZXVlY29tbWFuZFxuIik7CisJLyogcHJfaW5mbygic2NzaWdsdWUgLS0tIHF1ZXVlY29tbWFuZFxuIik7ICovCiAKIAkvKiBjaGVjayBmb3Igc3RhdGUtdHJhbnNpdGlvbiBlcnJvcnMgKi8KLQlpZiAodXMtPnNyYiAhPSBOVUxMKQotCXsKLQkJcHJpbnRrKCJFcnJvciBpbiAlczogdXMtPnNyYiA9ICVwXG4iLCBfX0ZVTkNUSU9OX18sIHVzLT5zcmIpOworCWlmICh1cy0+c3JiICE9IE5VTEwpIHsKKwkJLyogcHJfaW5mbygiRXJyb3IgaW4gJXM6IHVzLT5zcmIgPSAlcFxuIgorCQkJCSBfX0ZVTkNUSU9OX18sIHVzLT5zcmIpOyAqLwogCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKIAl9CiAKIAkvKiBmYWlsIHRoZSBjb21tYW5kIGlmIHdlIGFyZSBkaXNjb25uZWN0aW5nICovCi0JaWYgKHRlc3RfYml0KFVTX0ZMSURYX0RJU0NPTk5FQ1RJTkcsICZ1cy0+ZGZsYWdzKSkKLQl7Ci0JCXByaW50aygiRmFpbCBjb21tYW5kIGR1cmluZyBkaXNjb25uZWN0XG4iKTsKKwlpZiAodGVzdF9iaXQoVVNfRkxJRFhfRElTQ09OTkVDVElORywgJnVzLT5kZmxhZ3MpKSB7CisJCXByX2luZm8oIkZhaWwgY29tbWFuZCBkdXJpbmcgZGlzY29ubmVjdFxuIik7CiAJCXNyYi0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CiAJCWRvbmUoc3JiKTsKIAkJcmV0dXJuIDA7CkBAIC0xMjQsMjQgKzEzMiwyNCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBDb21tYW5kIHRpbWVvdXQgYW5kIGFib3J0ICovCi0vLy0tLS0tIGNvbW1hbmRfYWJvcnQoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qCisgKiBjb21tYW5kX2Fib3J0KCkKKyAqLwogc3RhdGljIGludCBjb21tYW5kX2Fib3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYikKIHsKIAlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSBob3N0X3RvX3VzKHNyYi0+ZGV2aWNlLT5ob3N0KTsKIAotCS8vcHJpbnRrKCJzY3NpZ2x1ZSAtLS0gY29tbWFuZF9hYm9ydFxuIik7CisJLyogcHJfaW5mbygic2NzaWdsdWUgLS0tIGNvbW1hbmRfYWJvcnRcbiIpOyAqLwogCiAJc2NzaV9sb2NrKHVzX3RvX2hvc3QodXMpKTsKLQlpZiAodXMtPnNyYiAhPSBzcmIpCi0JeworCWlmICh1cy0+c3JiICE9IHNyYikgewogCQlzY3NpX3VubG9jayh1c190b19ob3N0KHVzKSk7CiAJCXByaW50ayAoIi0tIG5vdGhpbmcgdG8gYWJvcnRcbiIpOwogCQlyZXR1cm4gRkFJTEVEOwogCX0KIAogCXNldF9iaXQoVVNfRkxJRFhfVElNRURfT1VULCAmdXMtPmRmbGFncyk7Ci0JaWYgKCF0ZXN0X2JpdChVU19GTElEWF9SRVNFVFRJTkcsICZ1cy0+ZGZsYWdzKSkKLQl7CisJaWYgKCF0ZXN0X2JpdChVU19GTElEWF9SRVNFVFRJTkcsICZ1cy0+ZGZsYWdzKSkgewogCQlzZXRfYml0KFVTX0ZMSURYX0FCT1JUSU5HLCAmdXMtPmRmbGFncyk7CiAJCXVzYl9zdG9yX3N0b3BfdHJhbnNwb3J0KHVzKTsKIAl9CkBAIC0xNTIsMTQgKzE2MCwxOCBAQAogCXJldHVybiBTVUNDRVNTOwogfQogCi0vKiBUaGlzIGludm9rZXMgdGhlIHRyYW5zcG9ydCByZXNldCBtZWNoYW5pc20gdG8gcmVzZXQgdGhlIHN0YXRlIG9mIHRoZSBkZXZpY2UgKi8KLS8vLS0tLS0gZGV2aWNlX3Jlc2V0KCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKiBUaGlzIGludm9rZXMgdGhlIHRyYW5zcG9ydCByZXNldCBtZWNoYW5pc20gdG8gcmVzZXQgdGhlIHN0YXRlIG9mIHRoZQorICogZGV2aWNlLgorICovCisvKgorICogZGV2aWNlX3Jlc2V0KCkKKyAqLwogc3RhdGljIGludCBkZXZpY2VfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqc3JiKQogewogCXN0cnVjdCB1c19kYXRhICp1cyA9IGhvc3RfdG9fdXMoc3JiLT5kZXZpY2UtPmhvc3QpOwogCWludCByZXN1bHQ7CiAKLQkvL3ByaW50aygic2NzaWdsdWUgLS0tIGRldmljZV9yZXNldFxuIik7CisJLyogcHJfaW5mbygic2NzaWdsdWUgLS0tIGRldmljZV9yZXNldFxuIik7ICovCiAKIAkvKiBsb2NrIHRoZSBkZXZpY2UgcG9pbnRlcnMgYW5kIGRvIHRoZSByZXNldCAqLwogCW11dGV4X2xvY2soJih1cy0+ZGV2X211dGV4KSk7CkBAIC0xNjksMzggKzE4MSw0MyBAQAogCXJldHVybiByZXN1bHQgPCAwID8gRkFJTEVEIDogU1VDQ0VTUzsKIH0KIAotLy8tLS0tLSBidXNfcmVzZXQoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qCisgKiBidXNfcmVzZXQoKQorICovCiBzdGF0aWMgaW50IGJ1c19yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIpCiB7CiAJc3RydWN0IHVzX2RhdGEgKnVzID0gaG9zdF90b191cyhzcmItPmRldmljZS0+aG9zdCk7CiAJaW50IHJlc3VsdDsKIAotCS8vcHJpbnRrKCJzY3NpZ2x1ZSAtLS0gYnVzX3Jlc2V0XG4iKTsKKwkvKiBwcl9pbmZvKCJzY3NpZ2x1ZSAtLS0gYnVzX3Jlc2V0XG4iKTsgKi8KIAlyZXN1bHQgPSB1c2Jfc3Rvcl9wb3J0X3Jlc2V0KHVzKTsKIAlyZXR1cm4gcmVzdWx0IDwgMCA/IEZBSUxFRCA6IFNVQ0NFU1M7CiB9CiAKLS8vLS0tLS0gdXNiX3N0b3JfcmVwb3J0X2RldmljZV9yZXNldCgpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLyoKKyAqIHVzYl9zdG9yX3JlcG9ydF9kZXZpY2VfcmVzZXQoKQorICovCiB2b2lkIHVzYl9zdG9yX3JlcG9ydF9kZXZpY2VfcmVzZXQoc3RydWN0IHVzX2RhdGEgKnVzKQogewogCWludCBpOwogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSB1c190b19ob3N0KHVzKTsKIAotCS8vcHJpbnRrKCJzY3NpZ2x1ZSAtLS0gdXNiX3N0b3JfcmVwb3J0X2RldmljZV9yZXNldFxuIik7CisJLyogcHJfaW5mbygic2NzaWdsdWUgLS0tIHVzYl9zdG9yX3JlcG9ydF9kZXZpY2VfcmVzZXRcbiIpOyAqLwogCXNjc2lfcmVwb3J0X2RldmljZV9yZXNldChob3N0LCAwLCAwKTsKLQlpZiAodXMtPmZmbGFncyAmIFVTX0ZMX1NDTV9NVUxUX1RBUkcpCi0JeworCWlmICh1cy0+ZmZsYWdzICYgVVNfRkxfU0NNX01VTFRfVEFSRykgewogCQlmb3IgKGkgPSAxOyBpIDwgaG9zdC0+bWF4X2lkOyArK2kpCiAJCQlzY3NpX3JlcG9ydF9kZXZpY2VfcmVzZXQoaG9zdCwgMCwgaSk7CiAJfQogfQogCi0vLy0tLS0tIHVzYl9zdG9yX3JlcG9ydF9idXNfcmVzZXQoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qCisgKiB1c2Jfc3Rvcl9yZXBvcnRfYnVzX3Jlc2V0KCkKKyAqLwogdm9pZCB1c2Jfc3Rvcl9yZXBvcnRfYnVzX3Jlc2V0KHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gdXNfdG9faG9zdCh1cyk7CiAKLQkvL3ByaW50aygic2NzaWdsdWUgLS0tIHVzYl9zdG9yX3JlcG9ydF9idXNfcmVzZXRcbiIpOworCS8qIHByX2luZm8oInNjc2lnbHVlIC0tLSB1c2Jfc3Rvcl9yZXBvcnRfYnVzX3Jlc2V0XG4iKTsgKi8KIAlzY3NpX2xvY2soaG9zdCk7CiAJc2NzaV9yZXBvcnRfYnVzX3Jlc2V0KGhvc3QsIDApOwogCXNjc2lfdW5sb2NrKGhvc3QpOwpAQCAtMjE1LDE0ICsyMzIsMTcgQEAKICNkZWZpbmUgU1BSSU5URihhcmdzLi4uKSBcCiAJZG8geyBpZiAocG9zIDwgYnVmZmVyK2xlbmd0aCkgcG9zICs9IHNwcmludGYocG9zLCAjIyBhcmdzKTsgfSB3aGlsZSAoMCkKIAotLy8tLS0tLSBwcm9jX2luZm8oKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXN0YXRpYyBpbnQgcHJvY19pbmZvIChzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0LCBjaGFyICpidWZmZXIsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgbGVuZ3RoLCBpbnQgaW5vdXQpCisvKgorICogcHJvY19pbmZvKCkKKyAqLworc3RhdGljIGludCBwcm9jX2luZm8oc3RydWN0IFNjc2lfSG9zdCAqaG9zdCwgY2hhciAqYnVmZmVyLCBjaGFyICoqc3RhcnQsCisJCQkJCW9mZl90IG9mZnNldCwgaW50IGxlbmd0aCwgaW50IGlub3V0KQogewogCXN0cnVjdCB1c19kYXRhICp1cyA9IGhvc3RfdG9fdXMoaG9zdCk7CiAJY2hhciAqcG9zID0gYnVmZmVyOwogCWNvbnN0IGNoYXIgKnN0cmluZzsKIAotCS8vcHJpbnRrKCJzY3NpZ2x1ZSAtLS0gcHJvY19pbmZvXG4iKTsKKwkvKiBwcl9pbmZvKCJzY3NpZ2x1ZSAtLS0gcHJvY19pbmZvXG4iKTsgKi8KIAlpZiAoaW5vdXQpCiAJCXJldHVybiBsZW5ndGg7CiAKQEAgLTI1NSw4ICsyNzUsNyBAQAogCVNQUklOVEYoIiAgICBUcmFuc3BvcnQ6ICVzXG4iLCB1cy0+dHJhbnNwb3J0X25hbWUpOwogCiAJLyogc2hvdyB0aGUgZGV2aWNlIGZsYWdzICovCi0JaWYgKHBvcyA8IGJ1ZmZlciArIGxlbmd0aCkKLQl7CisJaWYgKHBvcyA8IGJ1ZmZlciArIGxlbmd0aCkgewogCQlwb3MgKz0gc3ByaW50Zihwb3MsICIgICAgICAgUXVpcmtzOiIpOwogCiAjZGVmaW5lIFVTX0ZMQUcobmFtZSwgdmFsdWUpIFwKQEAgLTI3MSwxMSArMjkwLDExIEBACiAJKnN0YXJ0ID0gYnVmZmVyICsgb2Zmc2V0OwogCiAJaWYgKChwb3MgLSBidWZmZXIpIDwgb2Zmc2V0KQotCQlyZXR1cm4gKDApOworCQlyZXR1cm4gMDsKIAllbHNlIGlmICgocG9zIC0gYnVmZmVyIC0gb2Zmc2V0KSA8IGxlbmd0aCkKLQkJcmV0dXJuIChwb3MgLSBidWZmZXIgLSBvZmZzZXQpOworCQlyZXR1cm4gcG9zIC0gYnVmZmVyIC0gb2Zmc2V0OwogCWVsc2UKLQkJcmV0dXJuIChsZW5ndGgpOworCQlyZXR1cm4gbGVuZ3RoOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI4MywyOSArMzAyLDM1IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIE91dHB1dCByb3V0aW5lIGZvciB0aGUgc3lzZnMgbWF4X3NlY3RvcnMgZmlsZSAqLwotLy8tLS0tLSBzaG93X21heF9zZWN0b3JzKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zdGF0aWMgc3NpemVfdCBzaG93X21heF9zZWN0b3JzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKKy8qCisgKiBzaG93X21heF9zZWN0b3JzKCkKKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd19tYXhfc2VjdG9ycyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSB0b19zY3NpX2RldmljZShkZXYpOwogCi0JLy9wcmludGsoInNjc2lnbHVlIC0tLSBzc2l6ZV90IHNob3dfbWF4X3NlY3RvcnNcbiIpOworCS8qIHByX2luZm8oInNjc2lnbHVlIC0tLSBzc2l6ZV90IHNob3dfbWF4X3NlY3RvcnNcbiIpOyAqLwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBxdWV1ZV9tYXhfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlKSk7CiB9CiAKIC8qIElucHV0IHJvdXRpbmUgZm9yIHRoZSBzeXNmcyBtYXhfc2VjdG9ycyBmaWxlICovCi0vLy0tLS0tIHN0b3JlX21heF9zZWN0b3JzKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zdGF0aWMgc3NpemVfdCBzdG9yZV9tYXhfc2VjdG9ycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKKy8qCisgKiBzdG9yZV9tYXhfc2VjdG9ycygpCisgKi8KK3N0YXRpYyBzc2l6ZV90IHN0b3JlX21heF9zZWN0b3JzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSB0b19zY3NpX2RldmljZShkZXYpOwogCXVuc2lnbmVkIHNob3J0IG1zOwogCi0JLy9wcmludGsoInNjc2lnbHVlIC0tLSBzc2l6ZV90IHN0b3JlX21heF9zZWN0b3JzXG4iKTsKLQlpZiAoc3NjYW5mKGJ1ZiwgIiVodSIsICZtcykgPiAwICYmIG1zIDw9IFNDU0lfREVGQVVMVF9NQVhfU0VDVE9SUykKLQl7CisJLyogcHJfaW5mbygic2NzaWdsdWUgLS0tIHNzaXplX3Qgc3RvcmVfbWF4X3NlY3RvcnNcbiIpOyAqLworCWlmIChzc2NhbmYoYnVmLCAiJWh1IiwgJm1zKSA+IDAgJiYgbXMgPD0gU0NTSV9ERUZBVUxUX01BWF9TRUNUT1JTKSB7CiAJCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBtcyk7CiAJCXJldHVybiBzdHJsZW4oYnVmKTsKIAl9Ci0JcmV0dXJuIC1FSU5WQUw7CQorCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgREVWSUNFX0FUVFIobWF4X3NlY3RvcnMsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X21heF9zZWN0b3JzLCBzdG9yZV9tYXhfc2VjdG9ycyk7CkBAIC0zMTMsNyArMzM4LDkgQEAKIAogLyogdGhpcyBkZWZpbmVzIG91ciBob3N0IHRlbXBsYXRlLCB3aXRoIHdoaWNoIHdlJ2xsIGFsbG9jYXRlIGhvc3RzICovCiAKLS8vLS0tLS0gdXNiX3N0b3JfaG9zdF90ZW1wbGF0ZSgpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLyoKKyAqIHVzYl9zdG9yX2hvc3RfdGVtcGxhdGUoKQorICovCiBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHVzYl9zdG9yX2hvc3RfdGVtcGxhdGUgPSB7CiAJLyogYmFzaWMgdXNlcmxhbmQgaW50ZXJmYWNlIHN0dWZmICovCiAJLm5hbWUgPQkJCQkiZXVjci1zdG9yYWdlIiwKQEAgLTM3Niw0MiArNDAzLDQxIEBACiAgKiBTY2F0dGVyLWdhdGhlciB0cmFuc2ZlciBidWZmZXIgYWNjZXNzIHJvdXRpbmVzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8vLS0tLS0gdXNiX3N0b3JfYWNjZXNzX3hmZXJfYnVmKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgorICogdXNiX3N0b3JfYWNjZXNzX3hmZXJfYnVmKCkKKyAqLwogdW5zaWduZWQgaW50IHVzYl9zdG9yX2FjY2Vzc194ZmVyX2J1ZihzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwKIAl1bnNpZ25lZCBpbnQgYnVmbGVuLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCBzY2F0dGVybGlzdCAqKnNncHRyLAogCXVuc2lnbmVkIGludCAqb2Zmc2V0LCBlbnVtIHhmZXJfYnVmX2RpciBkaXIpCiB7CiAJdW5zaWduZWQgaW50IGNudDsKIAotCS8vcHJpbnRrKCJ0cmFuc3BvcnQgLS0tIHVzYl9zdG9yX2FjY2Vzc194ZmVyX2J1ZlxuIik7CisJLyogcHJfaW5mbygidHJhbnNwb3J0IC0tLSB1c2Jfc3Rvcl9hY2Nlc3NfeGZlcl9idWZcbiIpOyAqLwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSAqc2dwdHI7CiAKIAlpZiAoIXNnKQogCQlzZyA9IHNjc2lfc2dsaXN0KHNyYik7CiAKIAljbnQgPSAwOwotCXdoaWxlIChjbnQgPCBidWZsZW4gJiYgc2cpCi0JewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNnX3BhZ2Uoc2cpICsgKChzZy0+b2Zmc2V0ICsgKm9mZnNldCkgPj4gUEFHRV9TSElGVCk7CisJd2hpbGUgKGNudCA8IGJ1ZmxlbiAmJiBzZykgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNnX3BhZ2Uoc2cpICsKKwkJCQkJKChzZy0+b2Zmc2V0ICsgKm9mZnNldCkgPj4gUEFHRV9TSElGVCk7CiAJCXVuc2lnbmVkIGludCBwb2ZmID0gKHNnLT5vZmZzZXQgKyAqb2Zmc2V0KSAmIChQQUdFX1NJWkUtMSk7CiAJCXVuc2lnbmVkIGludCBzZ2xlbiA9IHNnLT5sZW5ndGggLSAqb2Zmc2V0OwogCi0JCWlmIChzZ2xlbiA+IGJ1ZmxlbiAtIGNudCkKLQkJeworCQlpZiAoc2dsZW4gPiBidWZsZW4gLSBjbnQpIHsKIAkJCS8qIFRyYW5zZmVyIGVuZHMgd2l0aGluIHRoaXMgcy1nIGVudHJ5ICovCiAJCQlzZ2xlbiA9IGJ1ZmxlbiAtIGNudDsKIAkJCSpvZmZzZXQgKz0gc2dsZW47Ci0JCX0KLQkJZWxzZQotCQl7CisJCX0gZWxzZSB7CiAJCQkvKiBUcmFuc2ZlciBjb250aW51ZXMgdG8gbmV4dCBzLWcgZW50cnkgKi8KIAkJCSpvZmZzZXQgPSAwOwogCQkJc2cgPSBzZ19uZXh0KHNnKTsKIAkJfQogCi0JCXdoaWxlIChzZ2xlbiA+IDApCi0JCXsKLQkJCXVuc2lnbmVkIGludCBwbGVuID0gbWluKHNnbGVuLCAodW5zaWduZWQgaW50KVBBR0VfU0laRSAtIHBvZmYpOworCQl3aGlsZSAoc2dsZW4gPiAwKSB7CisJCQl1bnNpZ25lZCBpbnQgcGxlbiA9IG1pbihzZ2xlbiwKKwkJCQkJCSh1bnNpZ25lZCBpbnQpUEFHRV9TSVpFIC0gcG9mZik7CiAJCQl1bnNpZ25lZCBjaGFyICpwdHIgPSBrbWFwKHBhZ2UpOwogCiAJCQlpZiAoZGlyID09IFRPX1hGRVJfQlVGKQpAQCAtNDMzLDE4ICs0NTksMjQgQEAKIAlyZXR1cm4gY250OwogfQogCi0vKiBTdG9yZSB0aGUgY29udGVudHMgb2YgYnVmZmVyIGludG8gc3JiJ3MgdHJhbnNmZXIgYnVmZmVyIGFuZCBzZXQgdGhlIFNDU0kgcmVzaWR1ZS4gKi8KLS8vLS0tLS0gdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12b2lkIHVzYl9zdG9yX3NldF94ZmVyX2J1ZihzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGJ1Zmxlbiwgc3RydWN0IHNjc2lfY21uZCAqc3JiLAotCXVuc2lnbmVkIGludCBkaXIpCisvKgorICogU3RvcmUgdGhlIGNvbnRlbnRzIG9mIGJ1ZmZlciBpbnRvIHNyYidzIHRyYW5zZmVyCisgKiBidWZmZXIgYW5kIHNldCB0aGUgU0NTSSByZXNpZHVlLgorICovCisvKgorICogdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKCkKKyAqLwordm9pZCB1c2Jfc3Rvcl9zZXRfeGZlcl9idWYoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBjaGFyICpidWZmZXIsCisJCXVuc2lnbmVkIGludCBidWZsZW4sIHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgdW5zaWduZWQgaW50IGRpcikKIHsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMDsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gTlVMTDsKIAotCS8vcHJpbnRrKCJ0cmFuc3BvcnQgLS0tIHVzYl9zdG9yX3NldF94ZmVyX2J1ZlxuIik7Ci0JLy8gVE9fWEZFUl9CVUYgPSAwLCBGUk9NX1hGRVJfQlVGID0gMQorCS8qIHByX2luZm8oInRyYW5zcG9ydCAtLS0gdXNiX3N0b3Jfc2V0X3hmZXJfYnVmXG4iKTsgKi8KKwkvKiBUT19YRkVSX0JVRiA9IDAsIEZST01fWEZFUl9CVUYgPSAxICovCiAJYnVmbGVuID0gbWluKGJ1Zmxlbiwgc2NzaV9idWZmbGVuKHNyYikpOwotCWJ1ZmxlbiA9IHVzYl9zdG9yX2FjY2Vzc194ZmVyX2J1Zih1cywgYnVmZmVyLCBidWZsZW4sIHNyYiwgJnNnLCAmb2Zmc2V0LCBkaXIpOworCWJ1ZmxlbiA9IHVzYl9zdG9yX2FjY2Vzc194ZmVyX2J1Zih1cywgYnVmZmVyLCBidWZsZW4sIHNyYiwKKwkJCQkJCSZzZywgJm9mZnNldCwgZGlyKTsKIAlpZiAoYnVmbGVuIDwgc2NzaV9idWZmbGVuKHNyYikpCiAJCXNjc2lfc2V0X3Jlc2lkKHNyYiwgc2NzaV9idWZmbGVuKHNyYikgLSBidWZsZW4pOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2tldWNyL3NtY29tbW9uLmggYi9kcml2ZXJzL3N0YWdpbmcva2V1Y3Ivc21jb21tb24uaAppbmRleCAwMDA2NGNhLi4yNzhiZGI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcva2V1Y3Ivc21jb21tb24uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcva2V1Y3Ivc21jb21tb24uaApAQCAtNiw3ICs2LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIERlZmluZSBEaWZpbmV0aW9uCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIFNVQ0NFU1MgICAgICAgICAgICAgMHgwMDAwIC8qIFNVQ0NFU1MgKi8KKyNkZWZpbmUgU01TVUNDRVNTICAgICAgICAgICAweDAwMDAgLyogU1VDQ0VTUyAqLwogI2RlZmluZSBFUlJPUiAgICAgICAgICAgICAgIDB4RkZGRiAvKiBFUlJPUiAqLwogI2RlZmluZSBDT1JSRUNUICAgICAgICAgICAgIDB4MDAwMSAvKiBDT1JSRUNUQUJMRSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcva2V1Y3Ivc21pbC5oIGIvZHJpdmVycy9zdGFnaW5nL2tldWNyL3NtaWwuaAppbmRleCA0MjI2ODEzLi5iNWE4ZmE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcva2V1Y3Ivc21pbC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9zbWlsLmgKQEAgLTQ0LDIxICs0NCwyMiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogSGFyZHdhcmUgRUNDIERlZmluaXRpb24KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgSFdfRUNDX1NVUFBPUlRFRCAgICAxICAgICAgLyogSGFyZHdhcmUgRUNDIFN1cHBvcnRlZCAqLyAgLyogTm8gZGlmaW5pdGlvbiBmb3IgU29mdHdhcmUgRUNDICovCisjZGVmaW5lIEhXX0VDQ19TVVBQT1JURUQgICAgMQkgICAvKiBIYXJkd2FyZSBFQ0MgU3VwcG9ydGVkICovCisvKiBObyBkaWZpbml0aW9uIGZvciBTb2Z0d2FyZSBFQ0MgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogU21hcnRNZWRpYSBDb21tYW5kICYgU3RhdHVzIERlZmluaXRpb24KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIFNtYXJ0TWVkaWEgQ29tbWFuZCAqLwogI2RlZmluZSBXUkRBVEEgICAgICAgIDB4ODAKLS8vI2RlZmluZSBSRUFEICAgICAgICAgIDB4MDAKKy8qICNkZWZpbmUgUkVBRCAgICAgICAgICAweDAwICovCiAjZGVmaW5lIFJFQURfUkVEVCAgICAgMHg1MAotLy8jZGVmaW5lIFdSSVRFICAgICAgICAgMHgxMAorLyogI2RlZmluZSBXUklURSAgICAgICAgIDB4MTAgKi8KICNkZWZpbmUgUkRTVEFUVVMgICAgICAweDcwCiAKLSNkZWZpbmUgUkVBRDEgICAgICAgICAweDAwIC8vTk8KLSNkZWZpbmUgUkVBRDIgICAgICAgICAweDAxIC8vTk8KLSNkZWZpbmUgUkVBRDMgICAgICAgICAweDUwIC8vTk8KKyNkZWZpbmUgUkVBRDEgICAgICAgICAweDAwIC8qIE5PICovCisjZGVmaW5lIFJFQUQyICAgICAgICAgMHgwMSAvKiBOTyAqLworI2RlZmluZSBSRUFEMyAgICAgICAgIDB4NTAgLyogTk8gKi8KICNkZWZpbmUgUlNUX0NISVAgICAgICAweEZGCiAjZGVmaW5lIEVSQVNFMSAgICAgICAgMHg2MAogI2RlZmluZSBFUkFTRTIgICAgICAgIDB4RDAKQEAgLTY3LDE5ICs2OCwxOSBAQAogI2RlZmluZSBSRUFEX0lEXzMgICAgIDB4OUEKIAogLyogNzEyIFNtYXJ0TWVkaWEgQ29tbWFuZCAqLwotI2RlZmluZSBTTV9DTURfUkVTRVQgICAgICAgICAgICAgICAgMHgwMCAgICAvLyAweEZGCi0jZGVmaW5lIFNNX0NNRF9SRUFEX0lEXzEgICAgICAgICAgICAweDEwICAgIC8vIDB4OTAKLSNkZWZpbmUgU01fQ01EX1JFQURfSURfMiAgICAgICAgICAgIDB4MjAgICAgLy8gMHg5MQotI2RlZmluZSBTTV9DTURfUkVBRF9TVEFUICAgICAgICAgICAgMHgzMCAgICAvLyAweDcwCi0jZGVmaW5lIFNNX0NNRF9SRE1VTFRQTF9TVEFUICAgICAgICAweDQwICAgIC8vIDB4NzEKLSNkZWZpbmUgU01fQ01EX1JFQURfMSAgICAgICAgICAgICAgIDB4NTAgICAgLy8gMHgwMAotI2RlZmluZSBTTV9DTURfUkVBRF8yICAgICAgICAgICAgICAgMHg2MCAgICAvLyAweDAxCi0jZGVmaW5lIFNNX0NNRF9SRUFEXzMgICAgICAgICAgICAgICAweDcwICAgIC8vIDB4NTAKLSNkZWZpbmUgU01fQ01EX1BBR1BSR01fVFJVRSAgICAgICAgIDB4ODAgICAgLy8gezB4ODAsIDB4MTB9Ci0jZGVmaW5lIFNNX0NNRF9QQUdQUkdNX0RVTVkgICAgICAgICAweDkwICAgIC8vIHsweDgwLCAweDExfQotI2RlZmluZSBTTV9DTURfUEFHUFJHTV9NQkxLICAgICAgICAgMHhBMCAgICAvLyB7MHg4MCwgMHgxNX0KLSNkZWZpbmUgU01fQ01EX0JMS0VSQVNFICAgICAgICAgICAgIDB4QjAgICAgLy8gezB4NjAsIDB4RDB9Ci0jZGVmaW5lIFNNX0NNRF9CTEtFUkFTRV9NVUxUUEwgICAgICAweEMwICAgIC8vIHsweDYwLTB4NjAsIDB4RDB9CisjZGVmaW5lIFNNX0NNRF9SRVNFVCAgICAgICAgICAgICAgICAweDAwICAgIC8qIDB4RkYgKi8KKyNkZWZpbmUgU01fQ01EX1JFQURfSURfMSAgICAgICAgICAgIDB4MTAgICAgLyogMHg5MCAqLworI2RlZmluZSBTTV9DTURfUkVBRF9JRF8yICAgICAgICAgICAgMHgyMCAgICAvKiAweDkxICovCisjZGVmaW5lIFNNX0NNRF9SRUFEX1NUQVQgICAgICAgICAgICAweDMwICAgIC8qIDB4NzAgKi8KKyNkZWZpbmUgU01fQ01EX1JETVVMVFBMX1NUQVQgICAgICAgIDB4NDAgICAgLyogMHg3MSAqLworI2RlZmluZSBTTV9DTURfUkVBRF8xICAgICAgICAgICAgICAgMHg1MCAgICAvKiAweDAwICovCisjZGVmaW5lIFNNX0NNRF9SRUFEXzIgICAgICAgICAgICAgICAweDYwICAgIC8qIDB4MDEgKi8KKyNkZWZpbmUgU01fQ01EX1JFQURfMyAgICAgICAgICAgICAgIDB4NzAgICAgLyogMHg1MCAqLworI2RlZmluZSBTTV9DTURfUEFHUFJHTV9UUlVFICAgICAgICAgMHg4MCAgICAvKiB7MHg4MCwgMHgxMH0gKi8KKyNkZWZpbmUgU01fQ01EX1BBR1BSR01fRFVNWSAgICAgICAgIDB4OTAgICAgLyogezB4ODAsIDB4MTF9ICovCisjZGVmaW5lIFNNX0NNRF9QQUdQUkdNX01CTEsgICAgICAgICAweEEwICAgIC8qIHsweDgwLCAweDE1fSAqLworI2RlZmluZSBTTV9DTURfQkxLRVJBU0UgICAgICAgICAgICAgMHhCMCAgICAvKiB7MHg2MCwgMHhEMH0gKi8KKyNkZWZpbmUgU01fQ01EX0JMS0VSQVNFX01VTFRQTCAgICAgIDB4QzAgICAgLyogezB4NjAtMHg2MCwgMHhEMH0gKi8KIAogI2RlZmluZSBTTV9DUkFERFRDVF9ERUJOQ0VUSU1FUl9FTiAgMHgwMgogI2RlZmluZSBTTV9DTURfU1RBUlRfQklUICAgICAgICAgICAgMHgwMQpAQCAtODcsMjcgKzg4LDMxIEBACiAjZGVmaW5lIFNNX1dhaXRDbWREb25lIHsgd2hpbGUgKCFTTV9DbWREb25lKTsgfQogI2RlZmluZSBTTV9XYWl0RG1hRG9uZSB7IHdoaWxlICghU01fRG1hRG9uZSk7IH0KIAotLy8gU21hcnRNZWRpYSBTdGF0dXMKLSNkZWZpbmUgV1JfRkFJTCAgICAgICAweDAxICAgICAgLy8gMDpQYXNzLCAxOkZhaWwKLSNkZWZpbmUgU1VTUEVOREVEICAgICAweDIwICAgICAgLy8gMDpOb3QgU3VzcGVuZGVkLCAxOlN1c3BlbmRlZAotI2RlZmluZSBSRUFEWSAgICAgICAgIDB4NDAgICAgICAvLyAwOkJ1c3ksIDE6UmVhZHkKLSNkZWZpbmUgV1JfUFJUQ1QgICAgICAweDgwICAgICAgLy8gMDpQcm90ZWN0LCAxOk5vdCBQcm90ZWN0CisvKiBTbWFydE1lZGlhIFN0YXR1cyAqLworI2RlZmluZSBXUl9GQUlMICAgICAgIDB4MDEgICAgICAvKiAwOlBhc3MsIDE6RmFpbCAqLworI2RlZmluZSBTVVNQRU5ERUQgICAgIDB4MjAgICAgICAvKiAwOk5vdCBTdXNwZW5kZWQsIDE6U3VzcGVuZGVkICovCisjZGVmaW5lIFJFQURZICAgICAgICAgMHg0MCAgICAgIC8qIDA6QnVzeSwgMTpSZWFkeSAqLworI2RlZmluZSBXUl9QUlRDVCAgICAgIDB4ODAgICAgICAvKiAwOlByb3RlY3QsIDE6Tm90IFByb3RlY3QgKi8KIAotLy8gU21hcnRNZWRpYSBCdXN5IFRpbWUgKDFiaXQ6MC4xbXMpCi0jZGVmaW5lIEJVU1lfUFJPRyAgICAgMjAwICAgICAgIC8vIHRQUk9HICAgOiAyMG1zICAtLS0tLSBQcm9ncmFtIFRpbWUgICAgICAgICAgb2xkIDogMjAwCi0jZGVmaW5lIEJVU1lfRVJBU0UgICAgNDAwMCAgICAgIC8vIHRCRVJBU0UgOiA0MDBtcyAtLS0tLSBCbG9jayBFcmFzZSBUaW1lICAgICAgb2xkIDogNDAwMAotLy9mb3IgNzEyIFRlc3QKLS8vI2RlZmluZSBCVVNZX1JFQUQgICAgIDEgICAgICAgICAvLyB0UiAgICAgIDogMTAwdXMgLS0tLS0gRGF0YSB0cmFuc2ZlciBUaW1lICAgb2xkIDogMQotLy8jZGVmaW5lIEJVU1lfUkVBRCAgICAgMTAgICAgICAgICAvLyB0UiAgICAgIDogMTAwdXMgLS0tLS0gRGF0YSB0cmFuc2ZlciBUaW1lICAgb2xkIDogMQotI2RlZmluZSBCVVNZX1JFQUQgICAgIDIwMCAgICAgICAvLyB0UiAgICAgIDogMjBtcyAgIC0tLS0tIERhdGEgdHJhbnNmZXIgVGltZSAgIG9sZCA6IDEKLS8vI2RlZmluZSBCVVNZX1JFU0VUICAgIDYwICAgICAgICAvLyB0UlNUICAgIDogNm1zICAgLS0tLS0gRGV2aWNlIFJlc2V0dGluZyBUaW1lIG9sZCA6IDYwCi0jZGVmaW5lIEJVU1lfUkVTRVQgICAgNjAwICAgICAgICAvLyB0UlNUICAgIDogNjBtcyAgIC0tLS0tIERldmljZSBSZXNldHRpbmcgVGltZSBvbGQgOiA2MAorLyogU21hcnRNZWRpYSBCdXN5IFRpbWUgKDFiaXQ6MC4xbXMpICovCisjZGVmaW5lIEJVU1lfUFJPRyAyMDAgLyogdFBST0cgICA6IDIwbXMgIC0tLS0tIFByb2dyYW0gVGltZSBvbGQgOiAyMDAgKi8KKyNkZWZpbmUgQlVTWV9FUkFTRSA0MDAwIC8qIHRCRVJBU0UgOiA0MDBtcyAtLS0tLSBCbG9jayBFcmFzZSBUaW1lIG9sZCA6IDQwMDAgKi8KIAotLy8gSGFyZHdhcmUgVGltZXIgKDFiaXQ6MC4xbXMpCi0jZGVmaW5lIFRJTUVfUE9OICAgICAgMzAwMCAgICAgIC8vIDMwMG1zIC0tLS0tLSBQb3dlciBPbiBXYWl0IFRpbWUKLSNkZWZpbmUgVElNRV9DRENISyAgICAyMDAgICAgICAgLy8gMjBtcyAgLS0tLS0tIENhcmQgQ2hlY2sgSW50ZXJ2YWwgVGltZXIKLSNkZWZpbmUgVElNRV9XUENISyAgICA1MCAgICAgICAgLy8gNW1zICAgLS0tLS0tIFdQIENoZWNrIEludGVydmFsIFRpbWVyCi0jZGVmaW5lIFRJTUVfNVZDSEsgICAgMTAgICAgICAgIC8vIDFtcyAgIC0tLS0tLSA1ViBDaGVjayBJbnRlcnZhbCBUaW1lcgorLypmb3IgNzEyIFRlc3QgKi8KKy8qICNkZWZpbmUgQlVTWV9SRUFEIDEgKi8vKiB0UiA6IDEwMHVzIC0tLS0tIERhdGEgdHJhbnNmZXIgVGltZSAgIG9sZCA6IDEgKi8KKy8qICNkZWZpbmUgQlVTWV9SRUFEIDEwICovLyogdFIgOiAxMDB1cyAtLS0tLSBEYXRhIHRyYW5zZmVyIFRpbWUgICBvbGQgOiAxICovCisKKyNkZWZpbmUgQlVTWV9SRUFEIDIwMCAvKiB0UiA6IDIwbXMgICAtLS0tLSBEYXRhIHRyYW5zZmVyIFRpbWUgICBvbGQgOiAxICovCisKKy8qICNkZWZpbmUgQlVTWV9SRVNFVCA2MCAqLy8qIHRSU1QgOiA2bXMgLS0tLS0gRGV2aWNlIFJlc2V0dGluZyBUaW1lIG9sZCA6IDYwICovCisKKyNkZWZpbmUgQlVTWV9SRVNFVCA2MDAgLyogdFJTVCA6IDYwbXMgICAtLS0tLSBEZXZpY2UgUmVzZXR0aW5nIFRpbWUgb2xkIDogNjAgKi8KKworLyogSGFyZHdhcmUgVGltZXIgKDFiaXQ6MC4xbXMpICovCisjZGVmaW5lIFRJTUVfUE9OICAgICAgMzAwMCAgICAgIC8qIDMwMG1zIC0tLS0tLSBQb3dlciBPbiBXYWl0IFRpbWUgKi8KKyNkZWZpbmUgVElNRV9DRENISyAgICAyMDAgICAgICAgLyogMjBtcyAgLS0tLS0tIENhcmQgQ2hlY2sgSW50ZXJ2YWwgVGltZXIgKi8KKyNkZWZpbmUgVElNRV9XUENISyAgICA1MCAgICAgICAgLyogNW1zICAgLS0tLS0tIFdQIENoZWNrIEludGVydmFsIFRpbWVyICovCisjZGVmaW5lIFRJTUVfNVZDSEsgICAgMTAgICAgICAgIC8qIDFtcyAgIC0tLS0tLSA1ViBDaGVjayBJbnRlcnZhbCBUaW1lciAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiBSZWR1bmRhbnQgRGF0YQpAQCAtMTI5LDMyICsxMzQsMzIgQEAKIFNtYXJ0TWVkaWEgTW9kZWwgJiBBdHRyaWJ1dGUKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIFNtYXJ0TWVkaWEgQXR0cmlidXRlICovCi0jZGVmaW5lIE5PV1AgICAgICAgICAgMHgwMCAvLyAwLi4uIC4uLi4gTm8gV3JpdGUgUHJvdGVjdAotI2RlZmluZSBXUCAgICAgICAgICAgIDB4ODAgLy8gMS4uLiAuLi4uIFdyaXRlIFByb3RlY3RlZAotI2RlZmluZSBNQVNLICAgICAgICAgIDB4MDAgLy8gLjAwLiAuLi4uIE5BTkQgTUFTSyBST00gTW9kZWwKLSNkZWZpbmUgRkxBU0ggICAgICAgICAweDIwIC8vIC4wMS4gLi4uLiBOQU5EIEZsYXNoIFJPTSBNb2RlbAotI2RlZmluZSBBRDNDWUMgICAgICAgIDB4MDAgLy8gLi4uMCAuLi4uIEFkZHJlc3MgMy1jeWNsZQotI2RlZmluZSBBRDRDWUMgICAgICAgIDB4MTAgLy8gLi4uMSAuLi4uIEFkZHJlc3MgNC1jeWNsZQotI2RlZmluZSBCUzE2ICAgICAgICAgIDB4MDAgLy8gLi4uLiAwMC4uIDE2cGFnZS9ibG9jawotI2RlZmluZSBCUzMyICAgICAgICAgIDB4MDQgLy8gLi4uLiAwMS4uIDMycGFnZS9ibG9jawotI2RlZmluZSBQUzI1NiAgICAgICAgIDB4MDAgLy8gLi4uLiAuLjAwIDI1NmJ5dGUvcGFnZQotI2RlZmluZSBQUzUxMiAgICAgICAgIDB4MDEgLy8gLi4uLiAuLjAxIDUxMmJ5dGUvcGFnZQotI2RlZmluZSBNV1AgICAgICAgICAgIDB4ODAgLy8gV3JpdGVQcm90ZWN0IG1hc2sKLSNkZWZpbmUgTUZMQVNIICAgICAgICAweDYwIC8vIEZsYXNoIFJvbSBtYXNrCi0jZGVmaW5lIE1BREMgICAgICAgICAgMHgxMCAvLyBBZGRyZXNzIEN5Y2xlCi0jZGVmaW5lIE1CUyAgICAgICAgICAgMHgwQyAvLyBCbG9ja1NpemUgbWFzawotI2RlZmluZSBNUFMgICAgICAgICAgIDB4MDMgLy8gUGFnZVNpemUgbWFzaworI2RlZmluZSBOT1dQICAgICAgICAgIDB4MDAgLyogMC4uLiAuLi4uIE5vIFdyaXRlIFByb3RlY3QgKi8KKyNkZWZpbmUgV1AgICAgICAgICAgICAweDgwIC8qIDEuLi4gLi4uLiBXcml0ZSBQcm90ZWN0ZWQgKi8KKyNkZWZpbmUgTUFTSyAgICAgICAgICAweDAwIC8qIC4wMC4gLi4uLiBOQU5EIE1BU0sgUk9NIE1vZGVsICovCisjZGVmaW5lIEZMQVNIICAgICAgICAgMHgyMCAvKiAuMDEuIC4uLi4gTkFORCBGbGFzaCBST00gTW9kZWwgKi8KKyNkZWZpbmUgQUQzQ1lDICAgICAgICAweDAwIC8qIC4uLjAgLi4uLiBBZGRyZXNzIDMtY3ljbGUgKi8KKyNkZWZpbmUgQUQ0Q1lDICAgICAgICAweDEwIC8qIC4uLjEgLi4uLiBBZGRyZXNzIDQtY3ljbGUgKi8KKyNkZWZpbmUgQlMxNiAgICAgICAgICAweDAwIC8qIC4uLi4gMDAuLiAxNnBhZ2UvYmxvY2sgKi8KKyNkZWZpbmUgQlMzMiAgICAgICAgICAweDA0IC8qIC4uLi4gMDEuLiAzMnBhZ2UvYmxvY2sgKi8KKyNkZWZpbmUgUFMyNTYgICAgICAgICAweDAwIC8qIC4uLi4gLi4wMCAyNTZieXRlL3BhZ2UgKi8KKyNkZWZpbmUgUFM1MTIgICAgICAgICAweDAxIC8qIC4uLi4gLi4wMSA1MTJieXRlL3BhZ2UgKi8KKyNkZWZpbmUgTVdQICAgICAgICAgICAweDgwIC8qIFdyaXRlUHJvdGVjdCBtYXNrICovCisjZGVmaW5lIE1GTEFTSCAgICAgICAgMHg2MCAvKiBGbGFzaCBSb20gbWFzayAqLworI2RlZmluZSBNQURDICAgICAgICAgIDB4MTAgLyogQWRkcmVzcyBDeWNsZSAqLworI2RlZmluZSBNQlMgICAgICAgICAgIDB4MEMgLyogQmxvY2tTaXplIG1hc2sgKi8KKyNkZWZpbmUgTVBTICAgICAgICAgICAweDAzIC8qIFBhZ2VTaXplIG1hc2sgKi8KIAogLyogU21hcnRNZWRpYSBNb2RlbCAqLwotI2RlZmluZSBOT1NTRkRDICAgICAgIDB4MDAgLy8gTk8gICBTbWFydE1lZGlhCi0jZGVmaW5lIFNTRkRDMU1CICAgICAgMHgwMSAvLyAxTUIgIFNtYXJ0TWVkaWEKLSNkZWZpbmUgU1NGREMyTUIgICAgICAweDAyIC8vIDJNQiAgU21hcnRNZWRpYQotI2RlZmluZSBTU0ZEQzRNQiAgICAgIDB4MDMgLy8gNE1CICBTbWFydE1lZGlhCi0jZGVmaW5lIFNTRkRDOE1CICAgICAgMHgwNCAvLyA4TUIgIFNtYXJ0TWVkaWEKLSNkZWZpbmUgU1NGREMxNk1CICAgICAweDA1IC8vIDE2TUIgU21hcnRNZWRpYQotI2RlZmluZSBTU0ZEQzMyTUIgICAgIDB4MDYgLy8gMzJNQiBTbWFydE1lZGlhCi0jZGVmaW5lIFNTRkRDNjRNQiAgICAgMHgwNyAvLyA2NE1CIFNtYXJ0TWVkaWEKLSNkZWZpbmUgU1NGREMxMjhNQiAgICAweDA4IC8vMTI4TUIgU21hcnRNZWRpYQorI2RlZmluZSBOT1NTRkRDICAgICAgIDB4MDAgLyogTk8gICBTbWFydE1lZGlhICovCisjZGVmaW5lIFNTRkRDMU1CICAgICAgMHgwMSAvKiAxTUIgIFNtYXJ0TWVkaWEgKi8KKyNkZWZpbmUgU1NGREMyTUIgICAgICAweDAyIC8qIDJNQiAgU21hcnRNZWRpYSAqLworI2RlZmluZSBTU0ZEQzRNQiAgICAgIDB4MDMgLyogNE1CICBTbWFydE1lZGlhICovCisjZGVmaW5lIFNTRkRDOE1CICAgICAgMHgwNCAvKiA4TUIgIFNtYXJ0TWVkaWEgKi8KKyNkZWZpbmUgU1NGREMxNk1CICAgICAweDA1IC8qIDE2TUIgU21hcnRNZWRpYSAqLworI2RlZmluZSBTU0ZEQzMyTUIgICAgIDB4MDYgLyogMzJNQiBTbWFydE1lZGlhICovCisjZGVmaW5lIFNTRkRDNjRNQiAgICAgMHgwNyAvKiA2NE1CIFNtYXJ0TWVkaWEgKi8KKyNkZWZpbmUgU1NGREMxMjhNQiAgICAweDA4IC8qMTI4TUIgU21hcnRNZWRpYSAqLwogI2RlZmluZSBTU0ZEQzI1Nk1CICAgIDB4MDkKICNkZWZpbmUgU1NGREM1MTJNQiAgICAweDBBCiAjZGVmaW5lIFNTRkRDMUdCICAgICAgMHgwQgpAQCAtMTYzLDggKzE2OCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiBTdHJ1Y3QgRGVmaW5pdGlvbgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RydWN0IFNTRkRDVFlQRQoteworc3RydWN0IFNTRkRDVFlQRSB7CiAJQllURSBNb2RlbDsKIAlCWVRFIEF0dHJpYnV0ZTsKIAlCWVRFIE1heFpvbmVzOwpAQCAtMTgzLDggKzE4Nyw3IEBACiAJV09SRCBNYXhMb2dCbG9ja3M7CiB9ICpTU0ZEQ1RZUEVfVDsKIAotc3RydWN0IEFERFJFU1MKLXsKK3N0cnVjdCBBRERSRVNTIHsKIAlCWVRFIFpvbmU7CS8qIFpvbmUgTnVtYmVyICovCiAJQllURSBTZWN0b3I7CS8qIFNlY3Rvcig1MTJieXRlKSBOdW1iZXIgb24gQmxvY2sgKi8KIAlXT1JEIFBoeUJsb2NrOwkvKiBQaHlzaWNhbCBCbG9jayBOdW1iZXIgb24gWm9uZSAqLwpAQCAtMTk5LDkyICsyMDIsMTEyIEBACiAJV09SRCBMb2dCbG9jazsJLyogTG9naWNhbCBCbG9jayBOdW1iZXIgb2YgWm9uZSAqLwogfSAqQUREUkVTU19UOwogCi1zdHJ1Y3QgQ0lTX0FSRUEKLXsKK3N0cnVjdCBDSVNfQVJFQSB7CiAJQllURSBTZWN0b3I7CS8qIFNlY3Rvcig1MTJieXRlKSBOdW1iZXIgb24gQmxvY2sgKi8KIAlXT1JEIFBoeUJsb2NrOwkvKiBQaHlzaWNhbCBCbG9jayBOdW1iZXIgb24gWm9uZSAwICovCiB9OwogCiAKLS8vLS0tLS0gU01JTE1haW4uYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2V4dGVybiBCWVRFIElzU1NGRENDb21wbGlhbmNlOworZXh0ZXJuIEJZVEUgSXNYRENvbXBsaWFuY2U7CisKK2V4dGVybiBEV09SRAlFcnJYRENvZGU7CitleHRlcm4gRFdPUkQJRXJyQ29kZTsKK2V4dGVybiBXT1JECVJlYWRCbG9jazsKK2V4dGVybiBXT1JECVdyaXRlQmxvY2s7CitleHRlcm4gRFdPUkQJTWVkaWFDaGFuZ2U7CisKK2V4dGVybiBzdHJ1Y3QgU1NGRENUWVBFICBTc2ZkYzsKK2V4dGVybiBzdHJ1Y3QgQUREUkVTUyAgICBNZWRpYTsKK2V4dGVybiBzdHJ1Y3QgQ0lTX0FSRUEgICBDaXNBcmVhOworCisvKgorICogU01JTE1haW4uYworICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50ICAgICAgICAgSW5pdF9EX1NtYXJ0TWVkaWEgICAgICAgICAgICh2b2lkKTsKLWludCAgICAgICAgIFB3b2ZmX0RfU21hcnRNZWRpYSAgICAgICAgICAodm9pZCk7Ci1pbnQgICAgICAgICBDaGVja19EX1NtYXJ0TWVkaWEgICAgICAgICAgKHZvaWQpOwotaW50ICAgICAgICAgQ2hlY2tfRF9QYXJhbWV0ZXIgICAgICAgICAgIChzdHJ1Y3QgdXNfZGF0YSAqLFdPUkQgKixCWVRFICosQllURSAqKTsKLWludCAgICAgICAgIE1lZGlhX0RfUmVhZFNlY3RvciAgICAgICAgICAoc3RydWN0IHVzX2RhdGEgKixEV09SRCxXT1JELEJZVEUgKik7Ci1pbnQgICAgICAgICBNZWRpYV9EX1dyaXRlU2VjdG9yICAgICAgICAgKHN0cnVjdCB1c19kYXRhICosRFdPUkQsV09SRCxCWVRFICopOwotaW50ICAgICAgICAgTWVkaWFfRF9Db3B5U2VjdG9yICAgICAgICAgIChzdHJ1Y3QgdXNfZGF0YSAqLERXT1JELFdPUkQsQllURSAqKTsKLWludCAgICAgICAgIE1lZGlhX0RfRXJhc2VCbG9jayAgICAgICAgICAoc3RydWN0IHVzX2RhdGEgKixEV09SRCxXT1JEKTsKLWludCAgICAgICAgIE1lZGlhX0RfRXJhc2VBbGwgICAgICAgICAgICAoc3RydWN0IHVzX2RhdGEgKik7CitpbnQgICAgICAgICBJbml0X0RfU21hcnRNZWRpYSh2b2lkKTsKK2ludCAgICAgICAgIFB3b2ZmX0RfU21hcnRNZWRpYSh2b2lkKTsKK2ludCAgICAgICAgIENoZWNrX0RfU21hcnRNZWRpYSh2b2lkKTsKK2ludCAgICAgICAgIENoZWNrX0RfUGFyYW1ldGVyKHN0cnVjdCB1c19kYXRhICosIFdPUkQgKiwgQllURSAqLCBCWVRFICopOworaW50ICAgICAgICAgTWVkaWFfRF9SZWFkU2VjdG9yKHN0cnVjdCB1c19kYXRhICosIERXT1JELCBXT1JELCBCWVRFICopOworaW50ICAgICAgICAgTWVkaWFfRF9Xcml0ZVNlY3RvcihzdHJ1Y3QgdXNfZGF0YSAqLCBEV09SRCwgV09SRCwgQllURSAqKTsKK2ludCAgICAgICAgIE1lZGlhX0RfQ29weVNlY3RvcihzdHJ1Y3QgdXNfZGF0YSAqLCBEV09SRCwgV09SRCwgQllURSAqKTsKK2ludCAgICAgICAgIE1lZGlhX0RfRXJhc2VCbG9jayhzdHJ1Y3QgdXNfZGF0YSAqLCBEV09SRCwgV09SRCk7CitpbnQgICAgICAgICBNZWRpYV9EX0VyYXNlQWxsKHN0cnVjdCB1c19kYXRhICopOwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludCAgICAgICAgIE1lZGlhX0RfT25lU2VjdFdyaXRlU3RhcnQgICAoc3RydWN0IHVzX2RhdGEgKixEV09SRCxCWVRFICopOwotaW50ICAgICAgICAgTWVkaWFfRF9PbmVTZWN0V3JpdGVOZXh0ICAgIChzdHJ1Y3QgdXNfZGF0YSAqLEJZVEUgKik7Ci1pbnQgICAgICAgICBNZWRpYV9EX09uZVNlY3RXcml0ZUZsdXNoICAgKHN0cnVjdCB1c19kYXRhICopOworaW50ICAgICAgICAgTWVkaWFfRF9PbmVTZWN0V3JpdGVTdGFydChzdHJ1Y3QgdXNfZGF0YSAqLCBEV09SRCwgQllURSAqKTsKK2ludCAgICAgICAgIE1lZGlhX0RfT25lU2VjdFdyaXRlTmV4dChzdHJ1Y3QgdXNfZGF0YSAqLCBCWVRFICopOworaW50ICAgICAgICAgTWVkaWFfRF9PbmVTZWN0V3JpdGVGbHVzaChzdHJ1Y3QgdXNfZGF0YSAqKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQgICAgICAgIFNNX0VuYWJsZUxFRCAgICAgICAgICAgICAgICAoc3RydWN0IHVzX2RhdGEgKixCT09MRUFOKTsKLXZvaWQgICAgICAgIExlZF9EX1Rlcm5PbiAgICAgICAgICAgICAgICAodm9pZCk7Ci12b2lkICAgICAgICBMZWRfRF9UZXJuT2ZmICAgICAgICAgICAgICAgKHZvaWQpOworZXh0ZXJuIGludAlTTV9GcmVlTWVtKHZvaWQpOwkvKiBFTkUgU00gZnVuY3Rpb24gKi8KK3ZvaWQgICAgICAgIFNNX0VuYWJsZUxFRChzdHJ1Y3QgdXNfZGF0YSAqLCBCT09MRUFOKTsKK3ZvaWQgICAgICAgIExlZF9EX1Rlcm5Pbih2b2lkKTsKK3ZvaWQgICAgICAgIExlZF9EX1Rlcm5PZmYodm9pZCk7CiAKLWludCAgICAgICAgIE1lZGlhX0RfRXJhc2VBbGxSZWR0RGF0YSAgICAoRFdPUkQgSW5kZXgsIEJPT0xFQU4gQ2hlY2tCbG9jayk7Ci0vL0RXT1JEICAgICAgIE1lZGlhX0RfR2V0TWVkaWFJbmZvICAgICAgICAoc3RydWN0IHVzX2RhdGEgKiBmZG9FeHQsIFBJT0NUTF9NRURJQV9JTkZPX0lOIHBQYXJhbUluLCBQSU9DVExfTUVESUFfSU5GT19PVVQgcFBhcmFtT3V0KTsKK2ludCAgICAgICAgIE1lZGlhX0RfRXJhc2VBbGxSZWR0RGF0YShEV09SRCBJbmRleCwgQk9PTEVBTiBDaGVja0Jsb2NrKTsKKy8qRFdPUkQgTWVkaWFfRF9HZXRNZWRpYUluZm8oc3RydWN0IHVzX2RhdGEgKiBmZG9FeHQsCisJUElPQ1RMX01FRElBX0lORk9fSU4gcFBhcmFtSW4sIFBJT0NUTF9NRURJQV9JTkZPX09VVCBwUGFyYW1PdXQpOyAqLwogCi0vLy0tLS0tIFNNSUxTdWIuYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgorICogU01JTFN1Yi5jCisgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQgIENoZWNrX0RfRGF0YUJsYW5rICAgICAgICAgICAgKEJZVEUgKik7Ci1pbnQgIENoZWNrX0RfRmFpbEJsb2NrICAgICAgICAgICAgKEJZVEUgKik7Ci1pbnQgIENoZWNrX0RfRGF0YVN0YXR1cyAgICAgICAgICAgKEJZVEUgKik7Ci1pbnQgIExvYWRfRF9Mb2dCbG9ja0FkZHIgICAgICAgICAgKEJZVEUgKik7Ci12b2lkIENscl9EX1JlZHVuZGFudERhdGEgICAgICAgICAgKEJZVEUgKik7Ci12b2lkIFNldF9EX0xvZ0Jsb2NrQWRkciAgICAgICAgICAgKEJZVEUgKik7Ci12b2lkIFNldF9EX0ZhaWxCbG9jayAgICAgICAgICAgICAgKEJZVEUgKik7Ci12b2lkIFNldF9EX0RhdGFTdGF1cyAgICAgICAgICAgICAgKEJZVEUgKik7CitpbnQgIENoZWNrX0RfRGF0YUJsYW5rKEJZVEUgKik7CitpbnQgIENoZWNrX0RfRmFpbEJsb2NrKEJZVEUgKik7CitpbnQgIENoZWNrX0RfRGF0YVN0YXR1cyhCWVRFICopOworaW50ICBMb2FkX0RfTG9nQmxvY2tBZGRyKEJZVEUgKik7Cit2b2lkIENscl9EX1JlZHVuZGFudERhdGEoQllURSAqKTsKK3ZvaWQgU2V0X0RfTG9nQmxvY2tBZGRyKEJZVEUgKik7Cit2b2lkIFNldF9EX0ZhaWxCbG9jayhCWVRFICopOwordm9pZCBTZXRfRF9EYXRhU3RhdXMoQllURSAqKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQgU3NmZGNfRF9SZXNldCAgICAgICAgICAgICAgICAoc3RydWN0IHVzX2RhdGEgKik7Ci1pbnQgIFNzZmRjX0RfUmVhZENpc1NlY3QgICAgICAgICAgKHN0cnVjdCB1c19kYXRhICosIEJZVEUgKixCWVRFICopOwotdm9pZCBTc2ZkY19EX1dyaXRlUmVkdE1vZGUgICAgICAgICh2b2lkKTsKLXZvaWQgU3NmZGNfRF9SZWFkSUQgICAgICAgICAgICAgICAoQllURSAqLCBCWVRFKTsKLWludCAgU3NmZGNfRF9SZWFkU2VjdCAgICAgICAgICAgICAoc3RydWN0IHVzX2RhdGEgKiwgQllURSAqLEJZVEUgKik7Ci1pbnQgIFNzZmRjX0RfUmVhZEJsb2NrICAgICAgICAgICAgKHN0cnVjdCB1c19kYXRhICosIFdPUkQsIEJZVEUgKixCWVRFICopOwotaW50ICBTc2ZkY19EX1dyaXRlU2VjdCAgICAgICAgICAgIChzdHJ1Y3QgdXNfZGF0YSAqLCBCWVRFICosQllURSAqKTsKLWludCAgU3NmZGNfRF9Xcml0ZUJsb2NrICAgICAgICAgICAoc3RydWN0IHVzX2RhdGEgKiwgV09SRCwgQllURSAqLEJZVEUgKik7Ci1pbnQgIFNzZmRjX0RfQ29weUJsb2NrICAgICAgICAgICAgKHN0cnVjdCB1c19kYXRhICosIFdPUkQsIEJZVEUgKixCWVRFICopOwotaW50ICBTc2ZkY19EX1dyaXRlU2VjdEZvckNvcHkgICAgIChzdHJ1Y3QgdXNfZGF0YSAqLCBCWVRFICosQllURSAqKTsKLWludCAgU3NmZGNfRF9FcmFzZUJsb2NrICAgICAgICAgICAoc3RydWN0IHVzX2RhdGEgKik7Ci1pbnQgIFNzZmRjX0RfUmVhZFJlZHREYXRhICAgICAgICAgKHN0cnVjdCB1c19kYXRhICosIEJZVEUgKik7Ci1pbnQgIFNzZmRjX0RfV3JpdGVSZWR0RGF0YSAgICAgICAgKHN0cnVjdCB1c19kYXRhICosIEJZVEUgKik7Ci1pbnQgIFNzZmRjX0RfQ2hlY2tTdGF0dXMgICAgICAgICAgKHZvaWQpOwotaW50ICBTZXRfRF9Tc2ZkY01vZGVsICAgICAgICAgICAgIChCWVRFKTsKLXZvaWQgQ250X0RfUmVzZXQgICAgICAgICAgICAgICAgICAodm9pZCk7Ci1pbnQgIENudF9EX1Bvd2VyT24gICAgICAgICAgICAgICAgKHZvaWQpOwotdm9pZCBDbnRfRF9Qb3dlck9mZiAgICAgICAgICAgICAgICh2b2lkKTsKLXZvaWQgQ250X0RfTGVkT24gICAgICAgICAgICAgICAgICAodm9pZCk7Ci12b2lkIENudF9EX0xlZE9mZiAgICAgICAgICAgICAgICAgKHZvaWQpOwotaW50ICBDaGVja19EX0NudFBvd2VyICAgICAgICAgICAgICh2b2lkKTsKLWludCAgQ2hlY2tfRF9DYXJkRXhpc3QgICAgICAgICAgICAodm9pZCk7Ci1pbnQgIENoZWNrX0RfQ2FyZFN0c0NoZyAgICAgICAgICAgKHZvaWQpOwotaW50ICBDaGVja19EX1NzZmRjV1AgICAgICAgICAgICAgICh2b2lkKTsKLWludCAgU01fUmVhZEJsb2NrICAgICAgICAgICAgICAgICAoc3RydWN0IHVzX2RhdGEgKiwgQllURSAqLEJZVEUgKik7Cit2b2lkIFNzZmRjX0RfUmVzZXQoc3RydWN0IHVzX2RhdGEgKik7CitpbnQgIFNzZmRjX0RfUmVhZENpc1NlY3Qoc3RydWN0IHVzX2RhdGEgKiwgQllURSAqLCBCWVRFICopOwordm9pZCBTc2ZkY19EX1dyaXRlUmVkdE1vZGUodm9pZCk7Cit2b2lkIFNzZmRjX0RfUmVhZElEKEJZVEUgKiwgQllURSk7CitpbnQgIFNzZmRjX0RfUmVhZFNlY3Qoc3RydWN0IHVzX2RhdGEgKiwgQllURSAqLCBCWVRFICopOworaW50ICBTc2ZkY19EX1JlYWRCbG9jayhzdHJ1Y3QgdXNfZGF0YSAqLCBXT1JELCBCWVRFICosIEJZVEUgKik7CitpbnQgIFNzZmRjX0RfV3JpdGVTZWN0KHN0cnVjdCB1c19kYXRhICosIEJZVEUgKiwgQllURSAqKTsKK2ludCAgU3NmZGNfRF9Xcml0ZUJsb2NrKHN0cnVjdCB1c19kYXRhICosIFdPUkQsIEJZVEUgKiwgQllURSAqKTsKK2ludCAgU3NmZGNfRF9Db3B5QmxvY2soc3RydWN0IHVzX2RhdGEgKiwgV09SRCwgQllURSAqLCBCWVRFICopOworaW50ICBTc2ZkY19EX1dyaXRlU2VjdEZvckNvcHkoc3RydWN0IHVzX2RhdGEgKiwgQllURSAqLCBCWVRFICopOworaW50ICBTc2ZkY19EX0VyYXNlQmxvY2soc3RydWN0IHVzX2RhdGEgKik7CitpbnQgIFNzZmRjX0RfUmVhZFJlZHREYXRhKHN0cnVjdCB1c19kYXRhICosIEJZVEUgKik7CitpbnQgIFNzZmRjX0RfV3JpdGVSZWR0RGF0YShzdHJ1Y3QgdXNfZGF0YSAqLCBCWVRFICopOworaW50ICBTc2ZkY19EX0NoZWNrU3RhdHVzKHZvaWQpOworaW50ICBTZXRfRF9Tc2ZkY01vZGVsKEJZVEUpOwordm9pZCBDbnRfRF9SZXNldCh2b2lkKTsKK2ludCAgQ250X0RfUG93ZXJPbih2b2lkKTsKK3ZvaWQgQ250X0RfUG93ZXJPZmYodm9pZCk7Cit2b2lkIENudF9EX0xlZE9uKHZvaWQpOwordm9pZCBDbnRfRF9MZWRPZmYodm9pZCk7CitpbnQgIENoZWNrX0RfQ250UG93ZXIodm9pZCk7CitpbnQgIENoZWNrX0RfQ2FyZEV4aXN0KHZvaWQpOworaW50ICBDaGVja19EX0NhcmRTdHNDaGcodm9pZCk7CitpbnQgIENoZWNrX0RfU3NmZGNXUCh2b2lkKTsKK2ludCAgU01fUmVhZEJsb2NrKHN0cnVjdCB1c19kYXRhICosIEJZVEUgKiwgQllURSAqKTsKIAotaW50ICBTc2ZkY19EX1JlYWRTZWN0X0RNQSAgICAgICAgIChzdHJ1Y3QgdXNfZGF0YSAqLCBCWVRFICosQllURSAqKTsKLWludCAgU3NmZGNfRF9SZWFkU2VjdF9QSU8gICAgICAgICAoc3RydWN0IHVzX2RhdGEgKiwgQllURSAqLEJZVEUgKik7Ci1pbnQgIFNzZmRjX0RfV3JpdGVTZWN0X0RNQSAgICAgICAgKHN0cnVjdCB1c19kYXRhICosIEJZVEUgKixCWVRFICopOwotaW50ICBTc2ZkY19EX1dyaXRlU2VjdF9QSU8gICAgICAgIChzdHJ1Y3QgdXNfZGF0YSAqLCBCWVRFICosQllURSAqKTsKK2ludCAgU3NmZGNfRF9SZWFkU2VjdF9ETUEoc3RydWN0IHVzX2RhdGEgKiwgQllURSAqLCBCWVRFICopOworaW50ICBTc2ZkY19EX1JlYWRTZWN0X1BJTyhzdHJ1Y3QgdXNfZGF0YSAqLCBCWVRFICosIEJZVEUgKik7CitpbnQgIFNzZmRjX0RfV3JpdGVTZWN0X0RNQShzdHJ1Y3QgdXNfZGF0YSAqLCBCWVRFICosIEJZVEUgKik7CitpbnQgIFNzZmRjX0RfV3JpdGVTZWN0X1BJTyhzdHJ1Y3QgdXNfZGF0YSAqLCBCWVRFICosIEJZVEUgKik7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQgIENoZWNrX0RfUmVhZEVycm9yICAgICAgICAgICAgKEJZVEUgKik7Ci1pbnQgIENoZWNrX0RfQ29ycmVjdCAgICAgICAgICAgICAgKEJZVEUgKixCWVRFICopOwotaW50ICBDaGVja19EX0NJU2RhdGEgICAgICAgICAgICAgIChCWVRFICosQllURSAqKTsKLXZvaWQgU2V0X0RfUmlnaHRFQ0MgICAgICAgICAgICAgICAoQllURSAqKTsKK2ludCAgQ2hlY2tfRF9SZWFkRXJyb3IoQllURSAqKTsKK2ludCAgQ2hlY2tfRF9Db3JyZWN0KEJZVEUgKiwgQllURSAqKTsKK2ludCAgQ2hlY2tfRF9DSVNkYXRhKEJZVEUgKiwgQllURSAqKTsKK3ZvaWQgU2V0X0RfUmlnaHRFQ0MoQllURSAqKTsKIAotLy8tLS0tLSBTTUlMRUNDLmMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdm9pZCBjYWxjdWxhdGVfZWNjICAgICAgICAgICAgICAgIChCWVRFICosIEJZVEUgKiwgQllURSAqLCBCWVRFICosIEJZVEUgKik7Ci1CWVRFIGNvcnJlY3RfZGF0YSAgICAgICAgICAgICAgICAgKEJZVEUgKiwgQllURSAqLCBCWVRFLCAgIEJZVEUsICAgQllURSk7Ci1pbnQgIF9Db3JyZWN0X0RfU3dFQ0MgICAgICAgICAgICAgKEJZVEUgKixCWVRFICosQllURSAqKTsKLXZvaWQgX0NhbGN1bGF0ZV9EX1N3RUNDICAgICAgICAgICAoQllURSAqLEJZVEUgKik7CisvKgorICogU01JTEVDQy5jCisgKi8KK3ZvaWQgY2FsY3VsYXRlX2VjYyhCWVRFICosIEJZVEUgKiwgQllURSAqLCBCWVRFICosIEJZVEUgKik7CitCWVRFIGNvcnJlY3RfZGF0YShCWVRFICosIEJZVEUgKiwgQllURSwgICBCWVRFLCAgIEJZVEUpOworaW50ICBfQ29ycmVjdF9EX1N3RUNDKEJZVEUgKiwgQllURSAqLCBCWVRFICopOwordm9pZCBfQ2FsY3VsYXRlX0RfU3dFQ0MoQllURSAqLCBCWVRFICopOwogCi12b2lkIFNNX0luaXQgICAgICAgICh2b2lkKTsKK3ZvaWQgU01fSW5pdCh2b2lkKTsKIAotI2VuZGlmIC8vIGFscmVhZHkgaW5jbHVkZWQKKyNlbmRpZiAvKiBhbHJlYWR5IGluY2x1ZGVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcva2V1Y3Ivc21pbGVjYy5jIGIvZHJpdmVycy9zdGFnaW5nL2tldWNyL3NtaWxlY2MuYwppbmRleCA1NjU5ZGVhLi4zMDg1ZjFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcva2V1Y3Ivc21pbGVjYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9zbWlsZWNjLmMKQEAgLTEsMzkgKzEsNDIgQEAKICNpbmNsdWRlICJ1c2IuaCIKICNpbmNsdWRlICJzY3NpZ2x1ZS5oIgogI2luY2x1ZGUgInRyYW5zcG9ydC5oIgotLy8jaW5jbHVkZSAic3RkbGliLmgiCi0vLyNpbmNsdWRlICJFVUNSNlNLLmgiCisvKiAjaW5jbHVkZSAic3RkbGliLmgiICovCisvKiAjaW5jbHVkZSAiRVVDUjZTSy5oIiAqLwogI2luY2x1ZGUgInNtY29tbW9uLmgiCiAjaW5jbHVkZSAic21pbC5oIgogCi0vLyNpbmNsdWRlIDxzdGRpby5oPgotLy8jaW5jbHVkZSA8c3RkbGliLmg+Ci0vLyNpbmNsdWRlIDxzdHJpbmcuaD4KLS8vI2luY2x1ZGUgPGRvcy5oPgotLy8KLS8vI2luY2x1ZGUgIkVNQ1JJT1MuaCIKKy8qICNpbmNsdWRlIDxzdGRpby5oPiAqLworLyogI2luY2x1ZGUgPHN0ZGxpYi5oPiAqLworLyogI2luY2x1ZGUgPHN0cmluZy5oPiAqLworLyogI2luY2x1ZGUgPGRvcy5oPiAqLworLyogI2luY2x1ZGUgIkVNQ1JJT1MuaCIgKi8KIAotLy8gQ1AwLUNQNSBjb2RlIHRhYmxlCisvKiBDUDAtQ1A1IGNvZGUgdGFibGUgKi8KIHN0YXRpYyBCWVRFIGVjY3RhYmxlWzI1Nl0gPSB7Ci0weDAwLDB4NTUsMHg1NiwweDAzLDB4NTksMHgwQywweDBGLDB4NUEsMHg1QSwweDBGLDB4MEMsMHg1OSwweDAzLDB4NTYsMHg1NSwweDAwLAotMHg2NSwweDMwLDB4MzMsMHg2NiwweDNDLDB4NjksMHg2QSwweDNGLDB4M0YsMHg2QSwweDY5LDB4M0MsMHg2NiwweDMzLDB4MzAsMHg2NSwKLTB4NjYsMHgzMywweDMwLDB4NjUsMHgzRiwweDZBLDB4NjksMHgzQywweDNDLDB4NjksMHg2QSwweDNGLDB4NjUsMHgzMCwweDMzLDB4NjYsCi0weDAzLDB4NTYsMHg1NSwweDAwLDB4NUEsMHgwRiwweDBDLDB4NTksMHg1OSwweDBDLDB4MEYsMHg1QSwweDAwLDB4NTUsMHg1NiwweDAzLAotMHg2OSwweDNDLDB4M0YsMHg2QSwweDMwLDB4NjUsMHg2NiwweDMzLDB4MzMsMHg2NiwweDY1LDB4MzAsMHg2QSwweDNGLDB4M0MsMHg2OSwKLTB4MEMsMHg1OSwweDVBLDB4MEYsMHg1NSwweDAwLDB4MDMsMHg1NiwweDU2LDB4MDMsMHgwMCwweDU1LDB4MEYsMHg1QSwweDU5LDB4MEMsCi0weDBGLDB4NUEsMHg1OSwweDBDLDB4NTYsMHgwMywweDAwLDB4NTUsMHg1NSwweDAwLDB4MDMsMHg1NiwweDBDLDB4NTksMHg1QSwweDBGLAotMHg2QSwweDNGLDB4M0MsMHg2OSwweDMzLDB4NjYsMHg2NSwweDMwLDB4MzAsMHg2NSwweDY2LDB4MzMsMHg2OSwweDNDLDB4M0YsMHg2QSwKLTB4NkEsMHgzRiwweDNDLDB4NjksMHgzMywweDY2LDB4NjUsMHgzMCwweDMwLDB4NjUsMHg2NiwweDMzLDB4NjksMHgzQywweDNGLDB4NkEsCi0weDBGLDB4NUEsMHg1OSwweDBDLDB4NTYsMHgwMywweDAwLDB4NTUsMHg1NSwweDAwLDB4MDMsMHg1NiwweDBDLDB4NTksMHg1QSwweDBGLAotMHgwQywweDU5LDB4NUEsMHgwRiwweDU1LDB4MDAsMHgwMywweDU2LDB4NTYsMHgwMywweDAwLDB4NTUsMHgwRiwweDVBLDB4NTksMHgwQywKLTB4NjksMHgzQywweDNGLDB4NkEsMHgzMCwweDY1LDB4NjYsMHgzMywweDMzLDB4NjYsMHg2NSwweDMwLDB4NkEsMHgzRiwweDNDLDB4NjksCi0weDAzLDB4NTYsMHg1NSwweDAwLDB4NUEsMHgwRiwweDBDLDB4NTksMHg1OSwweDBDLDB4MEYsMHg1QSwweDAwLDB4NTUsMHg1NiwweDAzLAotMHg2NiwweDMzLDB4MzAsMHg2NSwweDNGLDB4NkEsMHg2OSwweDNDLDB4M0MsMHg2OSwweDZBLDB4M0YsMHg2NSwweDMwLDB4MzMsMHg2NiwKLTB4NjUsMHgzMCwweDMzLDB4NjYsMHgzQywweDY5LDB4NkEsMHgzRiwweDNGLDB4NkEsMHg2OSwweDNDLDB4NjYsMHgzMywweDMwLDB4NjUsCi0weDAwLDB4NTUsMHg1NiwweDAzLDB4NTksMHgwQywweDBGLDB4NUEsMHg1QSwweDBGLDB4MEMsMHg1OSwweDAzLDB4NTYsMHg1NSwweDAwCisweDAwLCAweDU1LCAweDU2LCAweDAzLCAweDU5LCAweDBDLCAweDBGLCAweDVBLCAweDVBLCAweDBGLCAweDBDLCAweDU5LCAweDAzLAorMHg1NiwgMHg1NSwgMHgwMCwgMHg2NSwgMHgzMCwgMHgzMywgMHg2NiwgMHgzQywgMHg2OSwgMHg2QSwgMHgzRiwgMHgzRiwgMHg2QSwKKzB4NjksIDB4M0MsIDB4NjYsIDB4MzMsIDB4MzAsIDB4NjUsIDB4NjYsIDB4MzMsIDB4MzAsIDB4NjUsIDB4M0YsIDB4NkEsIDB4NjksCisweDNDLCAweDNDLCAweDY5LCAweDZBLCAweDNGLCAweDY1LCAweDMwLCAweDMzLCAweDY2LCAweDAzLCAweDU2LCAweDU1LCAweDAwLAorMHg1QSwgMHgwRiwgMHgwQywgMHg1OSwgMHg1OSwgMHgwQywgMHgwRiwgMHg1QSwgMHgwMCwgMHg1NSwgMHg1NiwgMHgwMywgMHg2OSwKKzB4M0MsIDB4M0YsIDB4NkEsIDB4MzAsIDB4NjUsIDB4NjYsIDB4MzMsIDB4MzMsIDB4NjYsIDB4NjUsIDB4MzAsIDB4NkEsIDB4M0YsCisweDNDLCAweDY5LCAweDBDLCAweDU5LCAweDVBLCAweDBGLCAweDU1LCAweDAwLCAweDAzLCAweDU2LCAweDU2LCAweDAzLCAweDAwLAorMHg1NSwgMHgwRiwgMHg1QSwgMHg1OSwgMHgwQywgMHgwRiwgMHg1QSwgMHg1OSwgMHgwQywgMHg1NiwgMHgwMywgMHgwMCwgMHg1NSwKKzB4NTUsIDB4MDAsIDB4MDMsIDB4NTYsIDB4MEMsIDB4NTksIDB4NUEsIDB4MEYsIDB4NkEsIDB4M0YsIDB4M0MsIDB4NjksIDB4MzMsCisweDY2LCAweDY1LCAweDMwLCAweDMwLCAweDY1LCAweDY2LCAweDMzLCAweDY5LCAweDNDLCAweDNGLCAweDZBLCAweDZBLCAweDNGLAorMHgzQywgMHg2OSwgMHgzMywgMHg2NiwgMHg2NSwgMHgzMCwgMHgzMCwgMHg2NSwgMHg2NiwgMHgzMywgMHg2OSwgMHgzQywgMHgzRiwKKzB4NkEsIDB4MEYsIDB4NUEsIDB4NTksIDB4MEMsIDB4NTYsIDB4MDMsIDB4MDAsIDB4NTUsIDB4NTUsIDB4MDAsIDB4MDMsIDB4NTYsCisweDBDLCAweDU5LCAweDVBLCAweDBGLCAweDBDLCAweDU5LCAweDVBLCAweDBGLCAweDU1LCAweDAwLCAweDAzLCAweDU2LCAweDU2LAorMHgwMywgMHgwMCwgMHg1NSwgMHgwRiwgMHg1QSwgMHg1OSwgMHgwQywgMHg2OSwgMHgzQywgMHgzRiwgMHg2QSwgMHgzMCwgMHg2NSwKKzB4NjYsIDB4MzMsIDB4MzMsIDB4NjYsIDB4NjUsIDB4MzAsIDB4NkEsIDB4M0YsIDB4M0MsIDB4NjksIDB4MDMsIDB4NTYsIDB4NTUsCisweDAwLCAweDVBLCAweDBGLCAweDBDLCAweDU5LCAweDU5LCAweDBDLCAweDBGLCAweDVBLCAweDAwLCAweDU1LCAweDU2LCAweDAzLAorMHg2NiwgMHgzMywgMHgzMCwgMHg2NSwgMHgzRiwgMHg2QSwgMHg2OSwgMHgzQywgMHgzQywgMHg2OSwgMHg2QSwgMHgzRiwgMHg2NSwKKzB4MzAsIDB4MzMsIDB4NjYsIDB4NjUsIDB4MzAsIDB4MzMsIDB4NjYsIDB4M0MsIDB4NjksIDB4NkEsIDB4M0YsIDB4M0YsIDB4NkEsCisweDY5LCAweDNDLCAweDY2LCAweDMzLCAweDMwLCAweDY1LCAweDAwLCAweDU1LCAweDU2LCAweDAzLCAweDU5LCAweDBDLCAweDBGLAorMHg1QSwgMHg1QSwgMHgwRiwgMHgwQywgMHg1OSwgMHgwMywgMHg1NiwgMHg1NSwgMHgwMAogfTsKIAotc3RhdGljIHZvaWQgICB0cmFuc19yZXN1bHQgIChCWVRFLCAgIEJZVEUsICAgQllURSAqLCBCWVRFICopOworc3RhdGljIHZvaWQgICB0cmFuc19yZXN1bHQoQllURSwgICBCWVRFLCAgIEJZVEUgKiwgQllURSAqKTsKIAogI2RlZmluZSBCSVQ3ICAgICAgICAweDgwCiAjZGVmaW5lIEJJVDYgICAgICAgIDB4NDAKQEAgLTQ4LDEzOSArNTEsMTQ0IEBACiAjZGVmaW5lIE1BU0tfQ1BTICAgIDB4M2YKICNkZWZpbmUgQ09SUkVDVEFCTEUgMHgwMDU1NTU1NEwKIAotc3RhdGljIHZvaWQgdHJhbnNfcmVzdWx0KHJlZzIscmVnMyxlY2MxLGVjYzIpCi1CWVRFIHJlZzI7IC8vIExQMTQsTFAxMixMUDEwLC4uLgotQllURSByZWczOyAvLyBMUDE1LExQMTMsTFAxMSwuLi4KLUJZVEUgKmVjYzE7IC8vIExQMTUsTFAxNCxMUDEzLC4uLgotQllURSAqZWNjMjsgLy8gTFAwNyxMUDA2LExQMDUsLi4uCisvKgorICogcmVnMjsgKiBMUDE0LExQMTIsTFAxMCwuLi4KKyAqIHJlZzM7ICogTFAxNSxMUDEzLExQMTEsLi4uCisgKiAqZWNjMTsgKiBMUDE1LExQMTQsTFAxMywuLi4KKyAqICplY2MyOyAqIExQMDcsTFAwNixMUDA1LC4uLgorICovCitzdGF0aWMgdm9pZCB0cmFuc19yZXN1bHQoQllURSByZWcyLCBCWVRFIHJlZzMsIEJZVEUgKmVjYzEsIEJZVEUgKmVjYzIpCiB7Ci0gICAgQllURSBhOyAvLyBXb3JraW5nIGZvciByZWcyLHJlZzMKLSAgICBCWVRFIGI7IC8vIFdvcmtpbmcgZm9yIGVjYzEsZWNjMgotICAgIEJZVEUgaTsgLy8gRm9yIGNvdW50aW5nCisJQllURSBhOyAvKiBXb3JraW5nIGZvciByZWcyLHJlZzMgKi8KKwlCWVRFIGI7IC8qIFdvcmtpbmcgZm9yIGVjYzEsZWNjMiAqLworCUJZVEUgaTsgLyogRm9yIGNvdW50aW5nICovCiAKLSAgICBhPUJJVDc7IGI9QklUNzsgLy8gODBoPTEwMDAwMDAwYgotICAgICplY2MxPSplY2MyPTA7IC8vIENsZWFyIGVjYzEsZWNjMgotICAgIGZvcihpPTA7IGk8NDsgKytpKSB7Ci0gICAgICAgIGlmICgocmVnMyZhKSE9MCkKLSAgICAgICAgICAgICplY2MxfD1iOyAvLyBMUDE1LDEzLDExLDkgLT4gZWNjMQotICAgICAgICBiPWI+PjE7IC8vIFJpZ2h0IHNoaWZ0Ci0gICAgICAgIGlmICgocmVnMiZhKSE9MCkKLSAgICAgICAgICAgICplY2MxfD1iOyAvLyBMUDE0LDEyLDEwLDggLT4gZWNjMQotICAgICAgICBiPWI+PjE7IC8vIFJpZ2h0IHNoaWZ0Ci0gICAgICAgIGE9YT4+MTsgLy8gUmlnaHQgc2hpZnQKLSAgICB9CisJYSA9IEJJVDc7IGIgPSBCSVQ3OyAvKiA4MGg9MTAwMDAwMDBiICovCisJKmVjYzEgPSAqZWNjMiA9IDA7IC8qIENsZWFyIGVjYzEsZWNjMiAqLworCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKKwkJaWYgKChyZWczJmEpICE9IDApCisJCQkqZWNjMSB8PSBiOyAvKiBMUDE1LDEzLDExLDkgLT4gZWNjMSAqLworCQliID0gYj4+MTsgLyogUmlnaHQgc2hpZnQgKi8KKwkJaWYgKChyZWcyJmEpICE9IDApCisJCQkqZWNjMSB8PSBiOyAvKiBMUDE0LDEyLDEwLDggLT4gZWNjMSAqLworCQliID0gYj4+MTsgLyogUmlnaHQgc2hpZnQgKi8KKwkJYSA9IGE+PjE7IC8qIFJpZ2h0IHNoaWZ0ICovCisJfQogCi0gICAgYj1CSVQ3OyAvLyA4MGg9MTAwMDAwMDBiCi0gICAgZm9yKGk9MDsgaTw0OyArK2kpIHsKLSAgICAgICAgaWYgKChyZWczJmEpIT0wKQotICAgICAgICAgICAgKmVjYzJ8PWI7IC8vIExQNyw1LDMsMSAtPiBlY2MyCi0gICAgICAgIGI9Yj4+MTsgLy8gUmlnaHQgc2hpZnQKLSAgICAgICAgaWYgKChyZWcyJmEpIT0wKQotICAgICAgICAgICAgKmVjYzJ8PWI7IC8vIExQNiw0LDIsMCAtPiBlY2MyCi0gICAgICAgIGI9Yj4+MTsgLy8gUmlnaHQgc2hpZnQKLSAgICAgICAgYT1hPj4xOyAvLyBSaWdodCBzaGlmdAotICAgIH0KKwliID0gQklUNzsgLyogODBoPTEwMDAwMDAwYiAqLworCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKKwkJaWYgKChyZWczJmEpICE9IDApCisJCQkqZWNjMiB8PSBiOyAvKiBMUDcsNSwzLDEgLT4gZWNjMiAqLworCQliID0gYj4+MTsgLyogUmlnaHQgc2hpZnQgKi8KKwkJaWYgKChyZWcyJmEpICE9IDApCisJCQkqZWNjMiB8PSBiOyAvKiBMUDYsNCwyLDAgLT4gZWNjMiAqLworCQliID0gYj4+MTsgLyogUmlnaHQgc2hpZnQgKi8KKwkJYSA9IGE+PjE7IC8qIFJpZ2h0IHNoaWZ0ICovCisJfQogfQogCi0vL3N0YXRpYyB2b2lkIGNhbGN1bGF0ZV9lY2ModGFibGUsZGF0YSxlY2MxLGVjYzIsZWNjMykKLXZvaWQgY2FsY3VsYXRlX2VjYyh0YWJsZSxkYXRhLGVjYzEsZWNjMixlY2MzKQotQllURSAqdGFibGU7IC8vIENQMC1DUDUgY29kZSB0YWJsZQotQllURSAqZGF0YTsgLy8gREFUQQotQllURSAqZWNjMTsgLy8gTFAxNSxMUDE0LExQMTMsLi4uCi1CWVRFICplY2MyOyAvLyBMUDA3LExQMDYsTFAwNSwuLi4KLUJZVEUgKmVjYzM7IC8vIENQNSxDUDQsQ1AzLC4uLiwiMSIsIjEiCisvKnN0YXRpYyB2b2lkIGNhbGN1bGF0ZV9lY2ModGFibGUsZGF0YSxlY2MxLGVjYzIsZWNjMykgKi8KKy8qCisgKiAqdGFibGU7ICogQ1AwLUNQNSBjb2RlIHRhYmxlCisgKiAqZGF0YTsgKiBEQVRBCisgKiAqZWNjMTsgKiBMUDE1LExQMTQsTFAxMywuLi4KKyAqICplY2MyOyAqIExQMDcsTFAwNixMUDA1LC4uLgorICogKmVjYzM7ICogQ1A1LENQNCxDUDMsLi4uLCIxIiwiMSIKKyAqLwordm9pZCBjYWxjdWxhdGVfZWNjKEJZVEUgKnRhYmxlLCBCWVRFICpkYXRhLCBCWVRFICplY2MxLCBCWVRFICplY2MyLCBCWVRFICplY2MzKQogewotICAgIERXT1JEICBpOyAgICAvLyBGb3IgY291bnRpbmcKLSAgICBCWVRFIGE7ICAgIC8vIFdvcmtpbmcgZm9yIHRhYmxlCi0gICAgQllURSByZWcxOyAvLyBELWFsbCxDUDUsQ1A0LENQMywuLi4KLSAgICBCWVRFIHJlZzI7IC8vIExQMTQsTFAxMixMMTAsLi4uCi0gICAgQllURSByZWczOyAvLyBMUDE1LExQMTMsTDExLC4uLgorCURXT1JEICBpOyAgICAvKiBGb3IgY291bnRpbmcgKi8KKwlCWVRFIGE7ICAgIC8qIFdvcmtpbmcgZm9yIHRhYmxlICovCisJQllURSByZWcxOyAvKiBELWFsbCxDUDUsQ1A0LENQMywuLi4gKi8KKwlCWVRFIHJlZzI7IC8qIExQMTQsTFAxMixMMTAsLi4uICovCisJQllURSByZWczOyAvKiBMUDE1LExQMTMsTDExLC4uLiAqLwogCi0gICAgcmVnMT1yZWcyPXJlZzM9MDsgICAvLyBDbGVhciBwYXJhbWV0ZXIKLSAgICBmb3IoaT0wOyBpPDI1NjsgKytpKSB7Ci0gICAgICAgIGE9dGFibGVbZGF0YVtpXV07IC8vIEdldCBDUDAtQ1A1IGNvZGUgZnJvbSB0YWJsZQotICAgICAgICByZWcxXj0oYSZNQVNLX0NQUyk7IC8vIFhPUiB3aXRoIGEKLSAgICAgICAgaWYgKChhJkJJVDYpIT0wKQotICAgICAgICB7IC8vIElmIERfYWxsKGFsbCBiaXQgWE9SKSA9IDEKLSAgICAgICAgICAgIHJlZzNePShCWVRFKWk7IC8vIFhPUiB3aXRoIGNvdW50ZXIKLSAgICAgICAgICAgIHJlZzJePX4oKEJZVEUpaSk7IC8vIFhPUiB3aXRoIGludi4gb2YgY291bnRlcgotICAgICAgICB9Ci0gICAgfQorCXJlZzEgPSByZWcyID0gcmVnMyA9IDA7ICAgLyogQ2xlYXIgcGFyYW1ldGVyICovCisJZm9yIChpID0gMDsgaSA8IDI1NjsgKytpKSB7CisJCWEgPSB0YWJsZVtkYXRhW2ldXTsgLyogR2V0IENQMC1DUDUgY29kZSBmcm9tIHRhYmxlICovCisJCXJlZzEgXj0gKGEmTUFTS19DUFMpOyAvKiBYT1Igd2l0aCBhICovCisJCWlmICgoYSZCSVQ2KSAhPSAwKSB7IC8qIElmIERfYWxsKGFsbCBiaXQgWE9SKSA9IDEgKi8KKwkJCXJlZzMgXj0gKEJZVEUpaTsgLyogWE9SIHdpdGggY291bnRlciAqLworCQkJcmVnMiBePSB+KChCWVRFKWkpOyAvKiBYT1Igd2l0aCBpbnYuIG9mIGNvdW50ZXIgKi8KKwkJfQorCX0KIAotICAgIC8vIFRyYW5zIExQMTQsMTIsMTAsLi4uICYgTFAxNSwxMywxMSwuLi4gLT4gTFAxNSwxNCwxMywuLi4gJiBMUDcsNiw1LC4uCi0gICAgdHJhbnNfcmVzdWx0KHJlZzIscmVnMyxlY2MxLGVjYzIpOwotICAgICplY2MxPX4oKmVjYzEpOyAqZWNjMj1+KCplY2MyKTsgLy8gSW52LiBlY2MyICYgZWNjMwotICAgICplY2MzPSgofnJlZzEpPDwyKXxCSVQxQklUMDsgLy8gTWFrZSBURUwgZm9ybWF0CisJLyogVHJhbnMgTFAxNCwxMiwxMCwuLi4gJiBMUDE1LDEzLDExLC4uLiAtPgorCQkJCQkJTFAxNSwxNCwxMywuLi4gJiBMUDcsNiw1LC4uICovCisJdHJhbnNfcmVzdWx0KHJlZzIsIHJlZzMsIGVjYzEsIGVjYzIpOworCSplY2MxID0gfigqZWNjMSk7ICplY2MyID0gfigqZWNjMik7IC8qIEludi4gZWNjMiAmIGVjYzMgKi8KKwkqZWNjMyA9ICgofnJlZzEpPDwyKXxCSVQxQklUMDsgLyogTWFrZSBURUwgZm9ybWF0ICovCiB9CiAKLUJZVEUgY29ycmVjdF9kYXRhKGRhdGEsZWNjZGF0YSxlY2MxLGVjYzIsZWNjMykKLUJZVEUgKmRhdGE7IC8vIERBVEEKLUJZVEUgKmVjY2RhdGE7IC8vIEVDQyBEQVRBCi1CWVRFIGVjYzE7IC8vIExQMTUsTFAxNCxMUDEzLC4uLgotQllURSBlY2MyOyAvLyBMUDA3LExQMDYsTFAwNSwuLi4KLUJZVEUgZWNjMzsgLy8gQ1A1LENQNCxDUDMsLi4uLCIxIiwiMSIKKy8qCisgKiAqZGF0YTsgKiBEQVRBCisgKiAqZWNjZGF0YTsgKiBFQ0MgREFUQQorICogZWNjMTsgKiBMUDE1LExQMTQsTFAxMywuLi4KKyAqIGVjYzI7ICogTFAwNyxMUDA2LExQMDUsLi4uCisgKiBlY2MzOyAqIENQNSxDUDQsQ1AzLC4uLiwiMSIsIjEiCisgKi8KK0JZVEUgY29ycmVjdF9kYXRhKEJZVEUgKmRhdGEsIEJZVEUgKmVjY2RhdGEsIEJZVEUgZWNjMSwgQllURSBlY2MyLCBCWVRFIGVjYzMpCiB7Ci0gICAgRFdPUkQgbDsgLy8gV29ya2luZyB0byBjaGVjayBkCi0gICAgRFdPUkQgZDsgLy8gUmVzdWx0IG9mIGNvbXBhcmlzb24KLSAgICBEV09SRCBpOyAvLyBGb3IgY291bnRpbmcKLSAgICBCWVRFIGQxLGQyLGQzOyAvLyBSZXN1bHQgb2YgY29tcGFyaXNvbgotICAgIEJZVEUgYTsgLy8gV29ya2luZyBmb3IgYWRkCi0gICAgQllURSBhZGQ7IC8vIEJ5dGUgYWRkcmVzcyBvZiBjb3IuIERBVEEKLSAgICBCWVRFIGI7IC8vIFdvcmtpbmcgZm9yIGJpdAotICAgIEJZVEUgYml0OyAvLyBCaXQgYWRkcmVzcyBvZiBjb3IuIERBVEEKKwlEV09SRCBsOyAvKiBXb3JraW5nIHRvIGNoZWNrIGQgKi8KKwlEV09SRCBkOyAvKiBSZXN1bHQgb2YgY29tcGFyaXNvbiAqLworCURXT1JEIGk7IC8qIEZvciBjb3VudGluZyAqLworCUJZVEUgZDEsIGQyLCBkMzsgLyogUmVzdWx0IG9mIGNvbXBhcmlzb24gKi8KKwlCWVRFIGE7IC8qIFdvcmtpbmcgZm9yIGFkZCAqLworCUJZVEUgYWRkOyAvKiBCeXRlIGFkZHJlc3Mgb2YgY29yLiBEQVRBICovCisJQllURSBiOyAvKiBXb3JraW5nIGZvciBiaXQgKi8KKwlCWVRFIGJpdDsgLyogQml0IGFkZHJlc3Mgb2YgY29yLiBEQVRBICovCiAKLSAgICBkMT1lY2MxXmVjY2RhdGFbMV07IGQyPWVjYzJeZWNjZGF0YVswXTsgLy8gQ29tcGFyZSBMUCdzCi0gICAgZDM9ZWNjM15lY2NkYXRhWzJdOyAvLyBDb21hcHJlIENQJ3MKLSAgICBkPSgoRFdPUkQpZDE8PDE2KSAvLyBSZXN1bHQgb2YgY29tcGFyaXNvbgotICAgICsoKERXT1JEKWQyPDw4KQotICAgICsoRFdPUkQpZDM7CisJZDEgPSBlY2MxXmVjY2RhdGFbMV07IGQyID0gZWNjMl5lY2NkYXRhWzBdOyAvKiBDb21wYXJlIExQJ3MgKi8KKwlkMyA9IGVjYzNeZWNjZGF0YVsyXTsgLyogQ29tYXByZSBDUCdzICovCisJZCA9ICgoRFdPUkQpZDE8PDE2KSAvKiBSZXN1bHQgb2YgY29tcGFyaXNvbiAqLworCSsoKERXT1JEKWQyPDw4KQorCSsoRFdPUkQpZDM7CiAKLSAgICBpZiAoZD09MCkgcmV0dXJuKDApOyAvLyBJZiBObyBlcnJvciwgcmV0dXJuCisJaWYgKGQgPT0gMCkKKwkJcmV0dXJuIDA7IC8qIElmIE5vIGVycm9yLCByZXR1cm4gKi8KIAotICAgIGlmICgoKGReKGQ+PjEpKSZDT1JSRUNUQUJMRSk9PUNPUlJFQ1RBQkxFKQotICAgIHsgLy8gSWYgY29ycmVjdGFibGUKLSAgICAgICAgbD1CSVQyMzsKLSAgICAgICAgYWRkPTA7IC8vIENsZWFyIHBhcmFtZXRlcgotICAgICAgICBhPUJJVDc7CisJaWYgKCgoZF4oZD4+MSkpJkNPUlJFQ1RBQkxFKSA9PSBDT1JSRUNUQUJMRSkgeyAvKiBJZiBjb3JyZWN0YWJsZSAqLworCQlsID0gQklUMjM7CisJCWFkZCA9IDA7IC8qIENsZWFyIHBhcmFtZXRlciAqLworCQlhID0gQklUNzsKIAotICAgICAgICBmb3IoaT0wOyBpPDg7ICsraSkgeyAvLyBDaGVja2luZyA4IGJpdAotICAgICAgICAgICAgaWYgKChkJmwpIT0wKSBhZGR8PWE7IC8vIE1ha2UgYnl0ZSBhZGRyZXNzIGZyb20gTFAncwotICAgICAgICAgICAgbD4+PTI7IGE+Pj0xOyAvLyBSaWdodCBTaGlmdAotICAgICAgICB9CisJCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpIHsgLyogQ2hlY2tpbmcgOCBiaXQgKi8KKwkJCWlmICgoZCZsKSAhPSAwKQorCQkJCWFkZCB8PSBhOyAvKiBNYWtlIGJ5dGUgYWRkcmVzcyBmcm9tIExQJ3MgKi8KKwkJCWwgPj49IDI7IGEgPj49IDE7IC8qIFJpZ2h0IFNoaWZ0ICovCisJCX0KIAotICAgICAgICBiaXQ9MDsgLy8gQ2xlYXIgcGFyYW1ldGVyCi0gICAgICAgIGI9QklUMjsKLSAgICAgICAgZm9yKGk9MDsgaTwzOyArK2kpIHsgLy8gQ2hlY2tpbmcgMyBiaXQKLSAgICAgICAgICAgIGlmICgoZCZsKSE9MCkgYml0fD1iOyAvLyBNYWtlIGJpdCBhZGRyZXNzIGZyb20gQ1AncwotICAgICAgICAgICAgbD4+PTI7IGI+Pj0xOyAvLyBSaWdodCBzaGlmdAotICAgICAgICB9CisJCWJpdCA9IDA7IC8qIENsZWFyIHBhcmFtZXRlciAqLworCQliID0gQklUMjsKKwkJZm9yIChpID0gMDsgaSA8IDM7ICsraSkgeyAvKiBDaGVja2luZyAzIGJpdCAqLworCQkJaWYgKChkJmwpICE9IDApCisJCQkJYml0IHw9IGI7IC8qIE1ha2UgYml0IGFkZHJlc3MgZnJvbSBDUCdzICovCisJCQlsID4+PSAyOyBiID4+PSAxOyAvKiBSaWdodCBzaGlmdCAqLworCQl9CiAKLSAgICAgICAgYj1CSVQwOwotICAgICAgICBkYXRhW2FkZF1ePShiPDxiaXQpOyAvLyBQdXQgY29ycmVjdGVkIGRhdGEKLSAgICAgICAgcmV0dXJuKDEpOwotICAgIH0KKwkJYiA9IEJJVDA7CisJCWRhdGFbYWRkXSBePSAoYjw8Yml0KTsgLyogUHV0IGNvcnJlY3RlZCBkYXRhICovCisJCXJldHVybiAxOworCX0KIAotICAgIGk9MDsgLy8gQ2xlYXIgY291bnQKLSAgICBkJj0weDAwZmZmZmZmTDsgLy8gTWFza2luZworCWkgPSAwOyAvKiBDbGVhciBjb3VudCAqLworCWQgJj0gMHgwMGZmZmZmZkw7IC8qIE1hc2tpbmcgKi8KIAotICAgIHdoaWxlKGQpIHsgLy8gSWYgZD0wIGZpbmlzaCBjb3VudGluZwotICAgICAgICBpZiAoZCZCSVQwKSArK2k7IC8vIENvdW50IG51bWJlciBvZiAxIGJpdAotICAgICAgICBkPj49MTsgLy8gUmlnaHQgc2hpZnQKLSAgICB9CisJd2hpbGUgKGQpIHsgLyogSWYgZD0wIGZpbmlzaCBjb3VudGluZyAqLworCQlpZiAoZCZCSVQwKQorCQkJKytpOyAvKiBDb3VudCBudW1iZXIgb2YgMSBiaXQgKi8KKwkJZCA+Pj0gMTsgLyogUmlnaHQgc2hpZnQgKi8KKwl9CiAKLSAgICBpZiAoaT09MSkKLSAgICB7IC8vIElmIEVDQyBlcnJvcgotICAgICAgICBlY2NkYXRhWzFdPWVjYzE7IGVjY2RhdGFbMF09ZWNjMjsgLy8gUHV0IHJpZ2h0IEVDQyBjb2RlCi0gICAgICAgIGVjY2RhdGFbMl09ZWNjMzsKLSAgICAgICAgcmV0dXJuKDIpOwotICAgIH0KLSAgICByZXR1cm4oMyk7IC8vIFVuY29ycmVjdGFibGUgZXJyb3IKKwlpZiAoaSA9PSAxKSB7IC8qIElmIEVDQyBlcnJvciAqLworCQllY2NkYXRhWzFdID0gZWNjMTsgZWNjZGF0YVswXSA9IGVjYzI7IC8qIFB1dCByaWdodCBFQ0MgY29kZSAqLworCQllY2NkYXRhWzJdID0gZWNjMzsKKwkJcmV0dXJuIDI7CisJfQorCXJldHVybiAzOyAvKiBVbmNvcnJlY3RhYmxlIGVycm9yICovCiB9CiAKLWludCBfQ29ycmVjdF9EX1N3RUNDKGJ1ZixyZWR1bmRhbnRfZWNjLGNhbGN1bGF0ZV9lY2MpCi1CWVRFICpidWY7Ci1CWVRFICpyZWR1bmRhbnRfZWNjOwotQllURSAqY2FsY3VsYXRlX2VjYzsKK2ludCBfQ29ycmVjdF9EX1N3RUNDKEJZVEUgKmJ1ZiwgQllURSAqcmVkdW5kYW50X2VjYywgQllURSAqY2FsY3VsYXRlX2VjYykKIHsKIAlEV09SRCBlcnI7CiAKQEAgLTE5NSwxMSArMjAzLDkgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXZvaWQgX0NhbGN1bGF0ZV9EX1N3RUNDKGJ1ZixlY2MpCi1CWVRFICpidWY7Ci1CWVRFICplY2M7Cit2b2lkIF9DYWxjdWxhdGVfRF9Td0VDQyhCWVRFICpidWYsIEJZVEUgKmVjYykKIHsKLSAgICBjYWxjdWxhdGVfZWNjKGVjY3RhYmxlLGJ1ZixlY2MrMSxlY2MrMCxlY2MrMik7CisJY2FsY3VsYXRlX2VjYyhlY2N0YWJsZSwgYnVmLCBlY2MrMSwgZWNjKzAsIGVjYysyKTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcva2V1Y3Ivc21pbG1haW4uYyBiL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9zbWlsbWFpbi5jCmluZGV4IDk1YzY4OGEuLjMxZjc4MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9zbWlsbWFpbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9zbWlsbWFpbi5jCkBAIC00OCwzMSArNDgsMjcgQEAKIERXT1JEIEVyclhEQ29kZTsKIERXT1JEIEVyckNvZGU7CiAvL0JZVEUgIFNlY3RCdWZbU0VDVFNJWkVdOwotQllURSAgV29ya0J1ZltTRUNUU0laRV07Ci1CWVRFICBSZWR1bmRhbnRbUkVEVFNJWkVdOwotQllURSAgV29ya1JlZHVuZFtSRURUU0laRV07CitzdGF0aWMgQllURSAgV29ya0J1ZltTRUNUU0laRV07CitzdGF0aWMgQllURSAgUmVkdW5kYW50W1JFRFRTSVpFXTsKK3N0YXRpYyBCWVRFICBXb3JrUmVkdW5kW1JFRFRTSVpFXTsKIC8vV09SRCAgTG9nMlBoeVtNQVhfWk9ORU5VTV1bTUFYX0xPR0JMT0NLXTsKLVdPUkQgICpMb2cyUGh5W01BWF9aT05FTlVNXTsgICAgICAgICAgICAgICAgIC8vIDEyOCB4IDEwMDAsICAgTG9nMlBoeVtNQVhfWk9ORU5VTV1bTUFYX0xPR0JMT0NLXTsKLUJZVEUgIEFzc2lnbltNQVhfWk9ORU5VTV1bTUFYX0JMT0NLTlVNLzhdOwotV09SRCAgQXNzaWduU3RhcnRbTUFYX1pPTkVOVU1dOworc3RhdGljIFdPUkQgICpMb2cyUGh5W01BWF9aT05FTlVNXTsgICAgICAgICAgICAgICAgIC8vIDEyOCB4IDEwMDAsICAgTG9nMlBoeVtNQVhfWk9ORU5VTV1bTUFYX0xPR0JMT0NLXTsKK3N0YXRpYyBCWVRFICBBc3NpZ25bTUFYX1pPTkVOVU1dW01BWF9CTE9DS05VTS84XTsKK3N0YXRpYyBXT1JEICBBc3NpZ25TdGFydFtNQVhfWk9ORU5VTV07CiBXT1JEICBSZWFkQmxvY2s7CiBXT1JEICBXcml0ZUJsb2NrOwogRFdPUkQgTWVkaWFDaGFuZ2U7Ci1EV09SRCBTZWN0Q29weU1vZGU7Ci0KLWV4dGVybiBzdHJ1Y3QgU1NGRENUWVBFICBTc2ZkYzsKLWV4dGVybiBzdHJ1Y3QgQUREUkVTUyAgICBNZWRpYTsKLWV4dGVybiBzdHJ1Y3QgQ0lTX0FSRUEgICBDaXNBcmVhOworc3RhdGljIERXT1JEIFNlY3RDb3B5TW9kZTsKIAogLy9CSVQgQ29udHJvbCBNYWNybwotQllURSBCaXREYXRhW10gPSB7IDB4MDEsMHgwMiwweDA0LDB4MDgsMHgxMCwweDIwLDB4NDAsMHg4MCB9IDsKK3N0YXRpYyBCWVRFIEJpdERhdGFbXSA9IHsgMHgwMSwweDAyLDB4MDQsMHgwOCwweDEwLDB4MjAsMHg0MCwweDgwIH0gOwogI2RlZmluZSBTZXRfRF9CaXQoYSxiKSAgICAoYVsoQllURSkoKGIpLzgpXXw9IEJpdERhdGFbKGIpJThdKQogI2RlZmluZSBDbHJfRF9CaXQoYSxiKSAgICAoYVsoQllURSkoKGIpLzgpXSY9fkJpdERhdGFbKGIpJThdKQogI2RlZmluZSBDaGtfRF9CaXQoYSxiKSAgICAoYVsoQllURSkoKGIpLzgpXSAmIEJpdERhdGFbKGIpJThdKQogCiAvL2V4dGVybiBQQllURSAgICBTTUhvc3RBZGRyOwotZXh0ZXJuIEJZVEUgICAgIElzU1NGRENDb21wbGlhbmNlOwotZXh0ZXJuIEJZVEUgICAgIElzWERDb21wbGlhbmNlOworQllURSAgICAgSXNTU0ZEQ0NvbXBsaWFuY2U7CitCWVRFICAgICBJc1hEQ29tcGxpYW5jZTsKIAogCiAvLwpAQCAtMTAyLDEyICs5OCwxMiBAQAogewogCWludAlpOwogCi0JcHJpbnRrKCJTTV9GcmVlTWVtIHN0YXJ0XG4iKTsKKwlwcl9pbmZvKCJTTV9GcmVlTWVtIHN0YXJ0XG4iKTsKIAlmb3IgKGk9MDsgaTxNQVhfWk9ORU5VTTsgaSsrKQogCXsKIAkJaWYgKExvZzJQaHlbaV0hPU5VTEwpCiAJCXsKLQkJCXByaW50aygiRnJlZSBab25lID0gJXgsIEFkZHIgPSAlcFxuIiwgaSwgTG9nMlBoeVtpXSk7CisJCQlwcl9pbmZvKCJGcmVlIFpvbmUgPSAleCwgQWRkciA9ICVwXG4iLCBpLCBMb2cyUGh5W2ldKTsKIAkJCWtmcmVlKExvZzJQaHlbaV0pOwogCQkJTG9nMlBoeVtpXSA9IE5VTEw7CiAJCX0KQEAgLTE5OCw3ICsxOTQsNyBAQAogCS8vU1NGRENUWVBFX1QgYWEgPSAoU1NGRENUWVBFX1QgKSAmU3NmZGM7CiAJLy9BRERSRVNTX1QgICBiYiA9IChBRERSRVNTX1QpICZNZWRpYTsKIAotCS8vcHJpbnRrKCJNZWRpYV9EX0NvcHlTZWN0b3IgISEhXG4iKTsKKwkvKiBwcl9pbmZvKCJNZWRpYV9EX0NvcHlTZWN0b3IgISEhXG4iKTsgKi8KIAlpZiAoQ29udl9EX01lZGlhQWRkcih1cywgc3RhcnQpKQogCQlyZXR1cm4oRXJyQ29kZSk7CiAKQEAgLTI1NiwxMyArMjUyLDEzIEBACiAJaWYgKE1lZGlhLlBoeUJsb2NrPT1OT19BU1NJR04pCiAJewogCQlNZWRpYS5QaHlCbG9jaz1Xcml0ZUJsb2NrOwotCQlyZXR1cm4oU1VDQ0VTUyk7CisJCXJldHVybihTTVNVQ0NFU1MpOwogCX0KIAogCUNscl9EX0JpdChBc3NpZ25bTWVkaWEuWm9uZV0sTWVkaWEuUGh5QmxvY2spOwogCU1lZGlhLlBoeUJsb2NrPVdyaXRlQmxvY2s7CiAKLQlyZXR1cm4oU1VDQ0VTUyk7CisJcmV0dXJuKFNNU1VDQ0VTUyk7CiB9CiAvKgogLy8tLS0tLSBNZWRpYV9EX1dyaXRlU2VjdG9yKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01NzIsNyArNTY4LDcgQEAKIC8vICAgICAgICBkZWZhdWx0OiAgICAgICAgICpjPSAwOyAgKmg9IDA7ICpzPSAwOyBFcnJDb2RlID0gRVJSX05vU21hcnRNZWRpYTsgICAgcmV0dXJuKEVSUk9SKTsKIC8vICAgIH0KIC8vCi0vLyAgICByZXR1cm4oU1VDQ0VTUyk7CisvLyAgICByZXR1cm4oU01TVUNDRVNTKTsKIC8vfQogLy8KIC8vLy9Qb3dlciBDb250cm9sICYgTWVkaWEgRXhpc3QgQ2hlY2sgU3Vicm91dGluZQpAQCAtNTk5LDcgKzU5NSw3IEBACiAvLyAgICAgICAgTWVkaWFDaGFuZ2UgPSBFUlJPUjsKIC8vICAgIC8vdXNsZWVwKDU2KjEwMjQpOwogLy8gICAgaWYgKCghQ2hlY2tfRF9DbnRQb3dlcigpKSYmKCFNZWRpYUNoYW5nZSkpICAvLyCmsyBwb3dlciAmIE1lZGlhIKhTs1EgY2hhbmdlLCCraCByZXR1cm4gc3VjY2VzcwotLy8gICAgICAgIHJldHVybihTVUNDRVNTKTsKKy8vICAgICAgICByZXR1cm4oU01TVUNDRVNTKTsKIC8vICAgIC8vdXNsZWVwKDU2KjEwMjQpOwogLy8KIC8vICAgIGlmIChDaGVja19EX0NhcmRFeGlzdCgpKSAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgY2FyZCBpcyBub3QgZXhpc3QsIHJldHVybiBlcnIKQEAgLTYxOCw3ICs2MTQsNyBAQAogLy8gICAgLy91c2xlZXAoNTYqMTAyNCk7CiAvLyAgICBTc2ZkY19EX1Jlc2V0KGZkb0V4dCk7CiAvLyAgICAvL3VzbGVlcCg1NioxMDI0KTsKLS8vICAgIHJldHVybihTVUNDRVNTKTsKKy8vICAgIHJldHVybihTTVNVQ0NFU1MpOwogLy99CiAvLwogLy8vLy0tLS0tQ2hlY2tfRF9NZWRpYUV4aXN0KCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTYzMCw3ICs2MjYsNyBAQAogLy8gICAgaWYgKCFDaGVja19EX0NhcmRFeGlzdCgpKQogLy8gICAgewogLy8gICAgICAgIGlmICghTWVkaWFDaGFuZ2UpCi0vLyAgICAgICAgICAgIHJldHVybihTVUNDRVNTKTsKKy8vICAgICAgICAgICAgcmV0dXJuKFNNU1VDQ0VTUyk7CiAvLwogLy8gICAgICAgIEVyckNvZGUgPSBFUlJfQ2hhbmdlZE1lZGlhOwogLy8gICAgICAgIHJldHVybihFUlJPUik7CkBAIC02NTAsMTkgKzY0NiwxOSBAQAogLy8gICAgICAgIHJldHVybihFUlJPUik7CiAvLyAgICB9CiAvLwotLy8gICAgcmV0dXJuKFNVQ0NFU1MpOworLy8gICAgcmV0dXJuKFNNU1VDQ0VTUyk7CiAvL30KICovCiAvL1NtYXJ0TWVkaWEgUGh5c2ljYWwgRm9ybWF0IFRlc3QgU3Vicm91dGluZQogLy8tLS0tLSBDaGVja19EX01lZGlhRm10KCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBpbnQgQ2hlY2tfRF9NZWRpYUZtdChzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7Ci0JcHJpbnRrKCJDaGVja19EX01lZGlhRm10XG4iKTsKKwlwcl9pbmZvKCJDaGVja19EX01lZGlhRm10XG4iKTsKIAkvL1VMT05HIGksaiwgcmVzdWx0PUZBTFNFLCB6b25lLGJsb2NrOwogCiAJLy91c2xlZXAoNTYqMTAyNCk7CiAJaWYgKCFNZWRpYUNoYW5nZSkKLQkJcmV0dXJuKFNVQ0NFU1MpOworCQlyZXR1cm4oU01TVUNDRVNTKTsKIAogCU1lZGlhQ2hhbmdlICA9IEVSUk9SOwogCVNlY3RDb3B5TW9kZSA9IENPTVBMRVRFRDsKQEAgLTY4Miw4ICs2NzgsOCBAQAogCX0KIAogCi0gICAgTWVkaWFDaGFuZ2UgPSBTVUNDRVNTOwotICAgIHJldHVybihTVUNDRVNTKTsKKyAgICBNZWRpYUNoYW5nZSA9IFNNU1VDQ0VTUzsKKyAgICByZXR1cm4oU01TVUNDRVNTKTsKIH0KIC8qCiAvLy8vLS0tLS0gQ2hlY2tfRF9CbG9ja0lzRnVsbCgpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTczNSw3ICs3MzEsNyBAQAogLy8gICAgICAgIHJldHVybihFUlJPUik7CiAvLyAgICB9CiAvLwotLy8gICAgcmV0dXJuKFNVQ0NFU1MpOworLy8gICAgcmV0dXJuKFNNU1VDQ0VTUyk7CiAvL30KICovCiAvL1NtYXJ0TWVkaWEgUGh5c2ljYWwgQWRkcmVzcyBDb250cm9sIFN1YnJvdXRpbmUKQEAgLTc2Nyw3ICs3NjMsNyBAQAogCQlDbHJfRF9SZWR1bmRhbnREYXRhKFJlZHVuZGFudCk7CiAJCVNldF9EX0xvZ0Jsb2NrQWRkcihSZWR1bmRhbnQpOwogCQlNZWRpYS5QaHlCbG9jayA9IExvZzJQaHlbTWVkaWEuWm9uZV1bTWVkaWEuTG9nQmxvY2tdOwotCQlyZXR1cm4oU1VDQ0VTUyk7CisJCXJldHVybihTTVNVQ0NFU1MpOwogCX0KIAogCUVyckNvZGUgPSBFUlJfT3V0T2ZMQkE7CkBAIC03ODIsNyArNzc4LDcgQEAKIAkvL0FERFJFU1NfVCAgIGJiID0gKEFERFJFU1NfVCkgJk1lZGlhOwogCiAJaWYgKCsrTWVkaWEuU2VjdG9yPFNzZmRjLk1heFNlY3RvcnMpCi0JCXJldHVybihTVUNDRVNTKTsKKwkJcmV0dXJuKFNNU1VDQ0VTUyk7CiAKIAlpZiAoTG9nMlBoeVtNZWRpYS5ab25lXT09TlVMTCkKIAl7CkBAIC04MDEsNyArNzk3LDcgQEAKIAkJQ2xyX0RfUmVkdW5kYW50RGF0YShSZWR1bmRhbnQpOwogCQlTZXRfRF9Mb2dCbG9ja0FkZHIoUmVkdW5kYW50KTsKIAkJTWVkaWEuUGh5QmxvY2s9TG9nMlBoeVtNZWRpYS5ab25lXVtNZWRpYS5Mb2dCbG9ja107Ci0JCXJldHVybihTVUNDRVNTKTsKKwkJcmV0dXJuKFNNU1VDQ0VTUyk7CiAJfQogCiAJTWVkaWEuTG9nQmxvY2s9MDsKQEAgLTgyMiw3ICs4MTgsNyBAQAogCQlDbHJfRF9SZWR1bmRhbnREYXRhKFJlZHVuZGFudCk7CiAJCVNldF9EX0xvZ0Jsb2NrQWRkcihSZWR1bmRhbnQpOwogCQlNZWRpYS5QaHlCbG9jaz1Mb2cyUGh5W01lZGlhLlpvbmVdW01lZGlhLkxvZ0Jsb2NrXTsKLQkJcmV0dXJuKFNVQ0NFU1MpOworCQlyZXR1cm4oU01TVUNDRVNTKTsKIAl9CiAKIAlNZWRpYS5ab25lPTA7CkBAIC04MzgsNyArODM0LDcgQEAKICAgICBBRERSRVNTX1QgICBiYiA9IChBRERSRVNTX1QpICZNZWRpYTsKIAogICAgIGlmICghTWVkaWEuU2VjdG9yKQotICAgICAgICByZXR1cm4oU1VDQ0VTUyk7CisgICAgICAgIHJldHVybihTTVNVQ0NFU1MpOwogCiAgICAgcmV0dXJuKEVSUk9SKTsKIH0KQEAgLTg1Miw3ICs4NDgsNyBAQAogICAgIGlmIChNZWRpYS5TZWN0b3I8KFNzZmRjLk1heFNlY3RvcnMtMSkpCiAgICAgICAgIHJldHVybihFUlJPUik7CiAKLSAgICByZXR1cm4oU1VDQ0VTUyk7CisgICAgcmV0dXJuKFNNU1VDQ0VTUyk7CiB9CiAqLwogLy9TbWFydE1lZGlhIFJlYWQvV3JpdGUgU3Vicm91dGluZSB3aXRoIFJldHJ5CkBAIC04NjIsNyArODU4LDcgQEAKIAlEV09SRCBlcnIsIHJldHJ5OwogCiAJaWYgKCFSZWFkX0RfUGh5T25lU2VjdCh1cywgY291bnQsIGJ1ZikpCi0JCXJldHVybihTVUNDRVNTKTsKKwkJcmV0dXJuKFNNU1VDQ0VTUyk7CiAJaWYgKEVyckNvZGU9PUVSUl9Id0Vycm9yKQogCQlyZXR1cm4oRVJST1IpOwogCWlmIChFcnJDb2RlPT1FUlJfRGF0YVN0YXR1cykKQEAgLTg3Miw3ICs4NjgsNyBAQAogCWlmIChTc2ZkYy5BdHRyaWJ1dGUgJk1XUCkKIAl7CiAJCWlmIChFcnJDb2RlPT1FUlJfQ29yUmVhZEVycikKLQkJCXJldHVybihTVUNDRVNTKTsKKwkJCXJldHVybihTTVNVQ0NFU1MpOwogCQlyZXR1cm4oRVJST1IpOwogCX0KIApAQCAtODg4LDEzICs4ODQsMTMgQEAKIAogCQlFcnJDb2RlID0gZXJyOwogCQlpZiAoRXJyQ29kZT09RVJSX0NvclJlYWRFcnIpCi0JCQlyZXR1cm4oU1VDQ0VTUyk7CisJCQlyZXR1cm4oU01TVUNDRVNTKTsKIAkJcmV0dXJuKEVSUk9SKTsKIAl9CiAKIAlNZWRpYUNoYW5nZSA9IEVSUk9SOwogI2Vsc2UKLQlpZiAoRXJyQ29kZT09RVJSX0NvclJlYWRFcnIpIHJldHVybihTVUNDRVNTKTsKKwlpZiAoRXJyQ29kZT09RVJSX0NvclJlYWRFcnIpIHJldHVybihTTVNVQ0NFU1MpOwogI2VuZGlmCiAKIAlyZXR1cm4oRVJST1IpOwpAQCAtOTA4LDcgKzkwNCw3IEBACiAgICAgQUREUkVTU19UICAgYmIgPSAoQUREUkVTU19UKSAmTWVkaWE7CiAKICAgICBpZiAoIVdyaXRlX0RfUGh5T25lU2VjdChmZG9FeHQsIGNvdW50LCBidWYpKQotICAgICAgICByZXR1cm4oU1VDQ0VTUyk7CisgICAgICAgIHJldHVybihTTVNVQ0NFU1MpOwogICAgIGlmIChFcnJDb2RlPT1FUlJfSHdFcnJvcikKICAgICAgICAgcmV0dXJuKEVSUk9SKTsKIApAQCAtOTIyLDcgKzkxOCw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIVdyaXRlX0RfUGh5T25lU2VjdChmZG9FeHQsIGNvdW50LCBidWYpKQotICAgICAgICAgICAgcmV0dXJuKFNVQ0NFU1MpOworICAgICAgICAgICAgcmV0dXJuKFNNU1VDQ0VTUyk7CiAgICAgICAgIGlmIChFcnJDb2RlPT1FUlJfSHdFcnJvcikKICAgICAgICAgICAgIHJldHVybihFUlJPUik7CiAgICAgfQpAQCAtOTQ0LDcgKzk0MCw3IEBACiAgICAgZm9yKHJldHJ5PTA7IHJldHJ5PDI7IHJldHJ5KyspCiAgICAgewogICAgICAgICBpZiAoIUNvcHlfRF9CbG9ja0hlYWQoZmRvRXh0KSkKLSAgICAgICAgICAgIHJldHVybihTVUNDRVNTKTsKKyAgICAgICAgICAgIHJldHVybihTTVNVQ0NFU1MpOwogICAgICAgICBpZiAoRXJyQ29kZT09RVJSX0h3RXJyb3IpCiAgICAgICAgICAgICByZXR1cm4oRVJST1IpOwogICAgIH0KQEAgLTk1OSw3ICs5NTUsNyBAQAogICAgIERXT1JEIHJldHJ5OwogCiAgICAgaWYgKCFDb3B5X0RfQmxvY2tUYWlsKGZkb0V4dCkpCi0gICAgICAgIHJldHVybihTVUNDRVNTKTsKKyAgICAgICAgcmV0dXJuKFNNU1VDQ0VTUyk7CiAgICAgaWYgKEVyckNvZGU9PUVSUl9Id0Vycm9yKQogICAgICAgICByZXR1cm4oRVJST1IpOwogCkBAIC05NzMsNyArOTY5LDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmICghQ29weV9EX0Jsb2NrVGFpbChmZG9FeHQpKQotICAgICAgICAgICAgcmV0dXJuKFNVQ0NFU1MpOworICAgICAgICAgICAgcmV0dXJuKFNNU1VDQ0VTUyk7CiAgICAgICAgIGlmIChFcnJDb2RlPT1FUlJfSHdFcnJvcikKICAgICAgICAgICAgIHJldHVybihFUlJPUik7CiAgICAgfQpAQCAtOTk1LDcgKzk5MSw3IEBACiAvLyAgICBBRERSRVNTX1QgICBiYiA9IChBRERSRVNTX1QpICZNZWRpYTsKIC8vCiAvLyAgICBpZiAoTWVkaWEuUGh5QmxvY2s9PU5PX0FTU0lHTikKLS8vICAgICAgICByZXR1cm4oU1VDQ0VTUyk7CisvLyAgICAgICAgcmV0dXJuKFNNU1VDQ0VTUyk7CiAvLwogLy8gICAgaWYgKExvZzJQaHlbTWVkaWEuWm9uZV09PU5VTEwpCiAvLyAgICB7CkBAIC0xMDIzLDcgKzEwMTksNyBAQAogLy8KIC8vICAgIENscl9EX0JpdChBc3NpZ25bTWVkaWEuWm9uZV0sTWVkaWEuUGh5QmxvY2spOwogLy8gICAgTWVkaWEuUGh5QmxvY2s9Tk9fQVNTSUdOOwotLy8gICAgcmV0dXJuKFNVQ0NFU1MpOworLy8gICAgcmV0dXJuKFNNU1VDQ0VTUyk7CiAvL30KIC8vCiAvLy8vU21hcnRNZWRpYSBFcmFzZSBTdWJyb3V0aW5lCkBAIC0xMDc2LDcgKzEwNzIsNyBAQAogLy8gICAgICAgICAgICB9CiAvLwogLy8gICAgICAgIH0KLS8vICAgIHJldHVybihTVUNDRVNTKTsKKy8vICAgIHJldHVybihTTVNVQ0NFU1MpOwogLy99CiAqLwogLy9TbWFydE1lZGlhIFBoeXNpY2FsIFNlY3RvciBEYXRhIENvcHkgU3Vicm91dGluZQpAQCAtMTExNiw3ICsxMTEyLDcgQEAKIAogCU1lZGlhLlBoeUJsb2NrPVdyaXRlQmxvY2s7CiAJTWVkaWEuU2VjdG9yPXNlY3Q7Ci0JcmV0dXJuKFNVQ0NFU1MpOworCXJldHVybihTTVNVQ0NFU1MpOwogfQogLyoKIC8vLS0tLS0gQ29weV9EX0Jsb2NrSGVhZCgpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTE0OSw3ICsxMTQ1LDcgQEAKIAogICAgIE1lZGlhLlBoeUJsb2NrPVdyaXRlQmxvY2s7CiAgICAgTWVkaWEuU2VjdG9yPXNlY3Q7Ci0gICAgcmV0dXJuKFNVQ0NFU1MpOworICAgIHJldHVybihTTVNVQ0NFU1MpOwogfQogCiAvLy0tLS0tIENvcHlfRF9CbG9ja1RhaWwoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTExNzgsNyArMTE3NCw3IEBACiAKICAgICBNZWRpYS5QaHlCbG9jaz1Xcml0ZUJsb2NrOwogICAgIE1lZGlhLlNlY3Rvcj1zZWN0OwotICAgIHJldHVybihTVUNDRVNTKTsKKyAgICByZXR1cm4oU01TVUNDRVNTKTsKIH0KIAogLy8tLS0tLSBSZWFzc2lnbl9EX0Jsb2NrSGVhZCgpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMjI2LDcgKzEyMjIsNyBAQAogICAgIFJlYWRCbG9jaz1ibG9jazsKICAgICBNZWRpYS5TZWN0b3I9c2VjdDsKICAgICBNZWRpYS5QaHlCbG9jaz1Xcml0ZUJsb2NrOwotICAgIHJldHVybihTVUNDRVNTKTsKKyAgICByZXR1cm4oU01TVUNDRVNTKTsKIH0KICovCiAvL1NtYXJ0TWVkaWEgUGh5c2ljYWwgQmxvY2sgQXNzaWduL1JlbGVhc2UgU3Vicm91dGluZQpAQCAtMTI0Niw3ICsxMjQyLDcgQEAKIAkJCU1lZGlhLlBoeUJsb2NrPVdyaXRlQmxvY2s7CiAJCQlTZWN0Q29weU1vZGU9UkVRX0VSQVNFOwogCQkJLy9FcnJYRENvZGUgPSBOT19FUlJPUjsKLQkJCXJldHVybihTVUNDRVNTKTsKKwkJCXJldHVybihTTVNVQ0NFU1MpOwogCQl9CiAJfQogCkBAIC0xMjU5LDcgKzEyNTUsNyBAQAogCQkJTWVkaWEuUGh5QmxvY2s9V3JpdGVCbG9jazsKIAkJCVNlY3RDb3B5TW9kZT1SRVFfRVJBU0U7CiAJCQkvL0VyclhEQ29kZSA9IE5PX0VSUk9SOwotCQkJcmV0dXJuKFNVQ0NFU1MpOworCQkJcmV0dXJuKFNNU1VDQ0VTUyk7CiAJCX0KIAl9CiAKQEAgLTEyODIsNyArMTI3OCw3IEBACiAJU2VjdENvcHlNb2RlPUNPTVBMRVRFRDsKIAogCWlmIChtb2RlPT1DT01QTEVURUQpCi0JCXJldHVybihTVUNDRVNTKTsKKwkJcmV0dXJuKFNNU1VDQ0VTUyk7CiAKIAlMb2cyUGh5W01lZGlhLlpvbmVdW01lZGlhLkxvZ0Jsb2NrXT1Xcml0ZUJsb2NrOwogCU1lZGlhLlBoeUJsb2NrPVJlYWRCbG9jazsKQEAgLTEyOTAsNyArMTI4Niw3IEBACiAJaWYgKE1lZGlhLlBoeUJsb2NrPT1OT19BU1NJR04pCiAJewogCQlNZWRpYS5QaHlCbG9jaz1Xcml0ZUJsb2NrOwotCQlyZXR1cm4oU1VDQ0VTUyk7CisJCXJldHVybihTTVNVQ0NFU1MpOwogCX0KIAogCWlmIChtb2RlPT1SRVFfRVJBU0UpCkBAIC0xMzA3LDcgKzEzMDMsNyBAQAogCQlyZXR1cm4oRVJST1IpOwogCiAJTWVkaWEuUGh5QmxvY2s9V3JpdGVCbG9jazsKLQlyZXR1cm4oU1VDQ0VTUyk7CisJcmV0dXJuKFNNU1VDQ0VTUyk7CiB9CiAKIC8vLS0tLS0gUmVsZWFzZV9EX1dyaXRlQmxvY2soKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTMyMiw3ICsxMzE4LDcgQEAKIAkJcmV0dXJuKEVSUk9SKTsKIAogCU1lZGlhLlBoeUJsb2NrPVJlYWRCbG9jazsKLQlyZXR1cm4oU1VDQ0VTUyk7CisJcmV0dXJuKFNNU1VDQ0VTUyk7CiB9CiAKIC8vU21hcnRNZWRpYSBQaHlzaWNhbCBTZWN0b3IgRGF0YSBDb3B5IFN1YnJvdXRpbmUKQEAgLTEzMzQsNyArMTMzMCw3IEBACiAJLy9TU0ZEQ1RZUEVfVCBhYSA9IChTU0ZEQ1RZUEVfVCApICZTc2ZkYzsKIAkvL0FERFJFU1NfVCAgIGJiID0gKEFERFJFU1NfVCkgJk1lZGlhOwogCi0JLy9wcmludGsoIkNvcHlfRF9QaHlPbmVTZWN0IC0tLSBTZWNvdHIgPSAleFxuIiwgTWVkaWEuU2VjdG9yKTsKKwkvKiBwcl9pbmZvKCJDb3B5X0RfUGh5T25lU2VjdCAtLS0gU2Vjb3RyID0gJXhcbiIsIE1lZGlhLlNlY3Rvcik7ICovCiAJaWYgKFJlYWRCbG9jayE9Tk9fQVNTSUdOKQogCXsKIAkJTWVkaWEuUGh5QmxvY2s9UmVhZEJsb2NrOwpAQCAtMTM1NSw5ICsxMzUxLDkgQEAKIAkJCWlmIChDaGVja19EX0RhdGFTdGF0dXMoV29ya1JlZHVuZCkpCiAJCQl7IGVycj1FUlJPUjsgYnJlYWs7IH0KIAkJCWlmICghQ2hlY2tfRF9SZWFkRXJyb3IoV29ya1JlZHVuZCkpCi0JCQl7IGVycj1TVUNDRVNTOyBicmVhazsgfQorCQkJeyBlcnI9U01TVUNDRVNTOyBicmVhazsgfQogCQkJaWYgKCFDaGVja19EX0NvcnJlY3QoV29ya0J1ZixXb3JrUmVkdW5kKSkKLQkJCXsgZXJyPVNVQ0NFU1M7IGJyZWFrOyB9CisJCQl7IGVycj1TTVNVQ0NFU1M7IGJyZWFrOyB9CiAKIAkJCWVycj1FUlJPUjsKIAkJCVNlY3RDb3B5TW9kZT1SRVFfRkFJTDsKQEAgLTEzNjUsNyArMTM2MSw3IEBACiAJfQogCWVsc2UKIAl7Ci0JCWVycj1TVUNDRVNTOworCQllcnI9U01TVUNDRVNTOwogCQlmb3IoaT0wOyBpPFNFQ1RTSVpFOyBpKyspCiAJCQlXb3JrQnVmW2ldPURVTU1ZX0RBVEE7CiAJCUNscl9EX1JlZHVuZGFudERhdGEoV29ya1JlZHVuZCk7CkBAIC0xMzg2LDcgKzEzODIsNyBAQAogCXsgRXJyQ29kZSA9IEVSUl9Xcml0ZUZhdWx0OyByZXR1cm4oRVJST1IpOyB9CiAKIAlNZWRpYS5QaHlCbG9jaz1SZWFkQmxvY2s7Ci0JcmV0dXJuKFNVQ0NFU1MpOworCXJldHVybihTTVNVQ0NFU1MpOwogfQogCiAvL1NtYXJ0TWVkaWEgUGh5c2ljYWwgU2VjdG9yIFJlYWQvV3JpdGUvRXJhc2UgU3Vicm91dGluZQpAQCAtMTQwMiw3ICsxMzk4LDcgQEAKIAl7CiAJCWZvcihpPTA7IGk8U0VDVFNJWkU7IGkrKykKIAkJCSpidWYrKz1EVU1NWV9EQVRBOwotCQlyZXR1cm4oU1VDQ0VTUyk7CisJCXJldHVybihTTVNVQ0NFU1MpOwogCX0KIAogCWZvcihyZXRyeT0wOyByZXRyeTwyOyByZXRyeSsrKQpAQCAtMTQyNCw3ICsxNDIwLDcgQEAKIAkJeyBFcnJDb2RlID0gRVJSX0RhdGFTdGF0dXM7IHJldHVybihFUlJPUik7IH0KIAogCQlpZiAoIUNoZWNrX0RfUmVhZEVycm9yKFJlZHVuZGFudCkpCi0JCQlyZXR1cm4oU1VDQ0VTUyk7CisJCQlyZXR1cm4oU01TVUNDRVNTKTsKIAogCQlpZiAoIUNoZWNrX0RfQ29ycmVjdChidWYsUmVkdW5kYW50KSkKIAkJeyBFcnJDb2RlID0gRVJSX0NvclJlYWRFcnI7IHJldHVybihFUlJPUik7IH0KQEAgLTE0NDYsNyArMTQ0Miw3IEBACiAgICAgaWYgKFNzZmRjX0RfQ2hlY2tTdGF0dXMoKSkKICAgICB7IEVyckNvZGUgPSBFUlJfV3JpdGVGYXVsdDsgcmV0dXJuKEVSUk9SKTsgfQogCi0gICAgcmV0dXJuKFNVQ0NFU1MpOworICAgIHJldHVybihTTVNVQ0NFU1MpOwogfQogKi8KIC8vLS0tLS0gRXJhc2VfRF9QaHlPbmVCbG9jaygpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTQ2MCw3ICsxNDU2LDcgQEAKIAlpZiAoU3NmZGNfRF9DaGVja1N0YXR1cygpKQogCXsgRXJyQ29kZSA9IEVSUl9Xcml0ZUZhdWx0OyByZXR1cm4oRVJST1IpOyB9CiAKLQlyZXR1cm4oU1VDQ0VTUyk7CisJcmV0dXJuKFNNU1VDQ0VTUyk7CiB9CiAKIC8vU21hcnRNZWRpYSBQaHlzaWNhbCBGb3JtYXQgQ2hlY2sgTG9jYWwgU3Vicm91dGluZQpAQCAtMTU0NCw3ICsxNTQwLDcgQEAKIC8vICAgICAgIH0KIC8vICAgIH0KIAotICAgIHJldHVybihTVUNDRVNTKTsKKyAgICByZXR1cm4oU01TVUNDRVNTKTsKIH0KIAogLy8tLS0tLSBTZWFyY2hfRF9DSVMoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNjAwLDcgKzE1OTYsNyBAQAogCQkJQ2lzQXJlYS5QaHlCbG9jaz1NZWRpYS5QaHlCbG9jazsKIAkJCUNpc0FyZWEuU2VjdG9yPU1lZGlhLlNlY3RvcjsKIAkJCVNzZmRjX0RfUmVzZXQodXMpOwotCQkJcmV0dXJuKFNVQ0NFU1MpOworCQkJcmV0dXJuKFNNU1VDQ0VTUyk7CiAJCX0KIAogCQlNZWRpYS5TZWN0b3IrKzsKQEAgLTE2MjAsNyArMTYxNiw4IEBACiAJaWYgKExvZzJQaHlbTWVkaWEuWm9uZV09PU5VTEwpCiAJewogCQlMb2cyUGh5W01lZGlhLlpvbmVdID0ga21hbGxvYyhNQVhfTE9HQkxPQ0sqc2l6ZW9mKFdPUkQpLCBHRlBfS0VSTkVMKTsKLQkJLy9wcmludGsoIkV4QWxsb2NhdGVQb29sIFpvbmUgPSAleCwgQWRkciA9ICV4XG4iLCBNZWRpYS5ab25lLCBMb2cyUGh5W01lZGlhLlpvbmVdKTsKKwkJLyogcHJfaW5mbygiRXhBbGxvY2F0ZVBvb2wgWm9uZSA9ICV4LCBBZGRyID0gJXhcbiIsCisJCQkJTWVkaWEuWm9uZSwgTG9nMlBoeVtNZWRpYS5ab25lXSk7ICovCiAJCWlmIChMb2cyUGh5W01lZGlhLlpvbmVdPT1OVUxMKQogCQkJcmV0dXJuKEVSUk9SKTsKIAl9CkBAIC0xNjMwLDcgKzE2MjcsOCBAQAogCS8vZm9yKE1lZGlhLlpvbmU9MDsgTWVkaWEuWm9uZTxNQVhfWk9ORU5VTTsgTWVkaWEuWm9uZSsrKQogCS8vZm9yKE1lZGlhLlpvbmU9MDsgTWVkaWEuWm9uZTxTc2ZkYy5NYXhab25lczsgTWVkaWEuWm9uZSsrKQogCXsKLQkJLy9wcmludGsoIk1ha2VfRF9Mb2dUYWJsZSAtLS0gTWVkaWFab25lID0gMHgleFxuIiwgTWVkaWEuWm9uZSk7CisJCS8qIHByX2luZm8oIk1ha2VfRF9Mb2dUYWJsZSAtLS0gTWVkaWFab25lID0gMHgleFxuIiwKKwkJCQkJCQlNZWRpYS5ab25lKTsgKi8KIAkJZm9yKE1lZGlhLkxvZ0Jsb2NrPTA7IE1lZGlhLkxvZ0Jsb2NrPFNzZmRjLk1heExvZ0Jsb2NrczsgTWVkaWEuTG9nQmxvY2srKykKIAkJCUxvZzJQaHlbTWVkaWEuWm9uZV1bTWVkaWEuTG9nQmxvY2tdPU5PX0FTU0lHTjsKIApAQCAtMTczNSw3ICsxNzMzLDcgQEAKIAl9IC8vIEVuZCBmb3IgKE1lZGlhLlpvbmU8TUFYX1pPTkVOVU0pCiAKIAlTc2ZkY19EX1Jlc2V0KHVzKTsKLQlyZXR1cm4oU1VDQ0VTUyk7CisJcmV0dXJuKFNNU1VDQ0VTUyk7CiB9CiAKIC8vLS0tLS0gTWFya0ZhaWxfRF9QaHlPbmVCbG9jaygpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTc2Myw3ICsxNzYxLDcgQEAKIAogCVNzZmRjX0RfUmVzZXQodXMpOwogCU1lZGlhLlNlY3Rvcj1zZWN0OwotCXJldHVybihTVUNDRVNTKTsKKwlyZXR1cm4oU01TVUNDRVNTKTsKIH0KIC8qCiAvLwpAQCAtMTgyMSw3ICsxODE5LDcgQEAKIC8vCiAvLyAgICBTc2ZkY19EX1Jlc2V0KGZkb0V4dCk7CiAvLwotLy8gICAgcmV0dXJuKFNVQ0NFU1MpOworLy8gICAgcmV0dXJuKFNNU1VDQ0VTUyk7CiAvL30KIC8vCiAvLy8vLS0tLS0gTWVkaWFfRF9HZXRNZWRpYUluZm8oKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9zbWlsc3ViLmMgYi9kcml2ZXJzL3N0YWdpbmcva2V1Y3Ivc21pbHN1Yi5jCmluZGV4IDRmZTQ3NDIuLmIzMTVkNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9zbWlsc3ViLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2tldWNyL3NtaWxzdWIuYwpAQCAtNDIsMTAgKzQyLDggQEAKIHN0cnVjdCBBRERSRVNTICAgICAgICAgICAgICAgICAgTWVkaWE7CiBzdHJ1Y3QgQ0lTX0FSRUEgICAgICAgICAgICAgICAgIENpc0FyZWE7CiAKLUJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWNjQnVmWzZdOworc3RhdGljIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWNjQnVmWzZdOwogZXh0ZXJuIFBCWVRFICAgICAgICAgICAgICAgICAgICBTTUhvc3RBZGRyOwotZXh0ZXJuIEJZVEUgICAgICAgICAgICAgICAgICAgICBJc1NTRkRDQ29tcGxpYW5jZTsKLWV4dGVybiBCWVRFICAgICAgICAgICAgICAgICAgICAgSXNYRENvbXBsaWFuY2U7CiBleHRlcm4gRFdPUkQgICAgICAgICAgICAgICAgICAgIEVyclhEQ29kZTsKIAogZXh0ZXJuIFdPUkQgIFJlYWRCbG9jazsKQEAgLTY3LDcgKzY1LDcgQEAKIAkJaWYgKCpyZWR1bmRhbnQrKyE9MHhGRikKIAkJCXJldHVybihFUlJPUik7CiAKLQlyZXR1cm4oU1VDQ0VTUyk7CisJcmV0dXJuKFNNU1VDQ0VTUyk7CiB9CiAKIC8vLS0tLS0gQ2hlY2tfRF9GYWlsQmxvY2soKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzYsMTMgKzc0LDEzIEBACiAJcmVkdW5kYW50Kz1SRURUX0JMT0NLOwogCiAJaWYgKCpyZWR1bmRhbnQ9PTB4RkYpCi0JCXJldHVybihTVUNDRVNTKTsKKwkJcmV0dXJuKFNNU1VDQ0VTUyk7CiAJaWYgKCEqcmVkdW5kYW50KQogCQlyZXR1cm4oRVJST1IpOwogCWlmIChod2VpZ2h0OCgqcmVkdW5kYW50KTw3KQogCQlyZXR1cm4oRVJST1IpOwogCi0JcmV0dXJuKFNVQ0NFU1MpOworCXJldHVybihTTVNVQ0NFU1MpOwogfQogCiAvLy0tLS0tIENoZWNrX0RfRGF0YVN0YXR1cygpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTkxLDcgKzg5LDcgQEAKIAlyZWR1bmRhbnQrPVJFRFRfREFUQTsKIAogCWlmICgqcmVkdW5kYW50PT0weEZGKQotCQlyZXR1cm4oU1VDQ0VTUyk7CisJCXJldHVybihTTVNVQ0NFU1MpOwogCWlmICghKnJlZHVuZGFudCkKIAl7CiAJCUVyclhEQ29kZSA9IEVSUl9EYXRhU3RhdHVzOwpAQCAtMTAzLDcgKzEwMSw3IEBACiAJaWYgKGh3ZWlnaHQ4KCpyZWR1bmRhbnQpPDUpCiAJCXJldHVybihFUlJPUik7CiAKLQlyZXR1cm4oU1VDQ0VTUyk7CisJcmV0dXJuKFNNU1VDQ0VTUyk7CiB9CiAKIC8vLS0tLS0gTG9hZF9EX0xvZ0Jsb2NrQWRkcigpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTE4LDE3ICsxMTYsMTcgQEAKIAogCWlmIChhZGRyMT09YWRkcjIpCiAJCWlmICgoYWRkcjEgJjB4RjAwMCk9PTB4MTAwMCkKLQkJeyBNZWRpYS5Mb2dCbG9jaz0oYWRkcjEgJjB4MEZGRikvMjsgcmV0dXJuKFNVQ0NFU1MpOyB9CisJCXsgTWVkaWEuTG9nQmxvY2s9KGFkZHIxICYweDBGRkYpLzI7IHJldHVybihTTVNVQ0NFU1MpOyB9CiAKIAlpZiAoaHdlaWdodDE2KChXT1JEKShhZGRyMV5hZGRyMikpIT0weDAxKSByZXR1cm4oRVJST1IpOwogCiAJaWYgKChhZGRyMSAmMHhGMDAwKT09MHgxMDAwKQogCQlpZiAoIShod2VpZ2h0MTYoYWRkcjEpICYweDAxKSkKLQkJeyBNZWRpYS5Mb2dCbG9jaz0oYWRkcjEgJjB4MEZGRikvMjsgcmV0dXJuKFNVQ0NFU1MpOyB9CisJCXsgTWVkaWEuTG9nQmxvY2s9KGFkZHIxICYweDBGRkYpLzI7IHJldHVybihTTVNVQ0NFU1MpOyB9CiAKIAlpZiAoKGFkZHIyICYweEYwMDApPT0weDEwMDApCiAJCWlmICghKGh3ZWlnaHQxNihhZGRyMikgJjB4MDEpKQotCQl7IE1lZGlhLkxvZ0Jsb2NrPShhZGRyMiAmMHgwRkZGKS8yOyByZXR1cm4oU1VDQ0VTUyk7IH0KKwkJeyBNZWRpYS5Mb2dCbG9jaz0oYWRkcjIgJjB4MEZGRikvMjsgcmV0dXJuKFNNU1VDQ0VTUyk7IH0KIAogCXJldHVybihFUlJPUik7CiB9CkBAIC0yMjIsNyArMjIwLDcgQEAKIAl9CiAKIAlNZWRpYS5ab25lPXpvbmU7IE1lZGlhLlBoeUJsb2NrPWJsb2NrOyBNZWRpYS5TZWN0b3I9c2VjdG9yOwotCXJldHVybihTVUNDRVNTKTsKKwlyZXR1cm4oU01TVUNDRVNTKTsKIH0KIC8qCiAvLy8vLS0tLS0gU3NmZGNfRF9Xcml0ZVJlZHRNb2RlKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDI4LDcgKzQyNiw3IEBACiAvLwogLy8gICAgaWYgKCFfSHdfRF9DaGtDYXJkSW4oKSkKIC8vICAgICAgIHJldHVybihFUlJPUik7Ci0vLyAgICByZXR1cm4oU1VDQ0VTUyk7CisvLyAgICByZXR1cm4oU01TVUNDRVNTKTsKIC8vfQogLy8KIC8vLy8tLS0tLSBTc2ZkY19EX1JlYWRTZWN0X1BJTygpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDUxLDcgKzQ0OSw3IEBACiAvLwogLy8gICAgX0NhbGNfRF9FQ0NkYXRhKGJ1Zik7CiAvLyAgICBfU2V0X0RfU3NmZGNSZFN0YW5kYnkoKTsKLS8vICAgIHJldHVybihTVUNDRVNTKTsKKy8vICAgIHJldHVybihTTVNVQ0NFU1MpOwogLy99CiAKIC8vIDYyNTAgQ01EIDMKQEAgLTUwOSw3ICs1MDcsNyBAQAogLy8gICAgICAgIEVORV9QcmludCgiRXJyb3JcbiIpOwogLy8gIH0KIAotICAgIHJldHVybihTVUNDRVNTKTsKKyAgICByZXR1cm4oU01TVUNDRVNTKTsKIH0KICovCiAvLy0tLS0tIFNzZmRjX0RfQ29weUJsb2NrKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTYxNCw3ICs2MTIsNyBAQAogLy8gICAgICAgIEVORV9QcmludCgiRXJyb3JcbiIpOwogLy8gIH0KIAotICAgIHJldHVybihTVUNDRVNTKTsKKyAgICByZXR1cm4oU01TVUNDRVNTKTsKIH0KIC8vCiAvLy8vLS0tLS0gU3NmZGNfRF9Xcml0ZVNlY3RfRE1BKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTcwNCw3ICs3MDIsNyBAQAogLy8gICAgaWYgKCFfSHdfRF9DaGtDYXJkSW4oKSkKIC8vICAgICAgIHJldHVybihFUlJPUik7CiAvLwotLy8gICAgcmV0dXJuKFNVQ0NFU1MpOworLy8gICAgcmV0dXJuKFNNU1VDQ0VTUyk7CiAvL30KIC8vCiAvLy8vLS0tLS0gU3NmZGNfRF9Xcml0ZVNlY3RfUElPKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTcyOSw3ICs3MjcsNyBAQAogLy8KIC8vICAgIF9TZXRfRF9Tc2ZkY1dyU3RhbmRieSgpOwogLy8gICAgX1NldF9EX1NzZmRjUmRTdGFuZGJ5KCk7Ci0vLyAgICByZXR1cm4oU1VDQ0VTUyk7CisvLyAgICByZXR1cm4oU01TVUNDRVNTKTsKIC8vfQogKi8KIC8vLS0tLS0gU3NmZGNfRF9Xcml0ZVNlY3RGb3JDb3B5KCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtODkzLDE0ICs4OTEsMTQgQEAKIGludCBTc2ZkY19EX0NoZWNrU3RhdHVzKHZvaWQpCiB7CiAgICAgLy8gRHJpdmVyIKSjsLUKLSAgICByZXR1cm4oU1VDQ0VTUyk7CisgICAgcmV0dXJuKFNNU1VDQ0VTUyk7CiAgICAgLy9fU2V0X0RfU3NmZGNSZENtZChSRFNUQVRVUyk7CiAgICAgLy8KICAgICAvL2lmIChfQ2hlY2tfRF9Tc2ZkY1N0YXR1cygpKQogICAgIC8veyBfU2V0X0RfU3NmZGNSZFN0YW5kYnkoKTsgcmV0dXJuKEVSUk9SKTsgfQogICAgIC8vCiAgICAgLy9fU2V0X0RfU3NmZGNSZFN0YW5kYnkoKTsKLSAgICAvL3JldHVybihTVUNDRVNTKTsKKyAgICAvL3JldHVybihTTVNVQ0NFU1MpOwogfQogLyoKIC8vLy9OQU5EIE1lbW9yeSAoU21hcnRNZWRpYSkgQ29udHJvbCBTdWJyb3V0aW5lIGZvciBSZWFkIERhdGEKQEAgLTEwOTUsNyArMTA5Myw3IEBACiAvLwogLy8gICAgZG8gewogLy8gICAgICAgIGlmICghX0h3X0RfQ2hrQnVzeSgpKQotLy8gICAgICAgICAgICByZXR1cm4oU1VDQ0VTUyk7CisvLyAgICAgICAgICAgIHJldHVybihTTVNVQ0NFU1MpOwogLy8gICAgICAgIEVEZWxheSgxMDApOwogLy8gICAgICAgIGNvdW50Kys7CiAvLyAgICB9IHdoaWxlIChjb3VudDw9dGltZSk7CkBAIC0xMTA5LDcgKzExMDcsNyBAQAogLy8gICAgaWYgKF9Id19EX0luRGF0YSgpICYgV1JfRkFJTCkKIC8vICAgICAgICByZXR1cm4oRVJST1IpOwogLy8KLS8vICAgIHJldHVybihTVUNDRVNTKTsKKy8vICAgIHJldHVybihTTVNVQ0NFU1MpOwogLy99CiAvLwogLy8vLyBGb3IgNzEyCkBAIC0xMzM5LDcgKzEzMzcsNyBAQAogICAgICAgICAgICAgcmV0dXJuKEVSUk9SKTsKICAgICB9CiAKLSAgICByZXR1cm4oU1VDQ0VTUyk7CisgICAgcmV0dXJuKFNNU1VDQ0VTUyk7CiB9CiAKIC8vLS0tLS0gX0NoZWNrX0RfRGV2Q29kZSgpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTM4OCw3ICsxMzg2LDcgQEAKIC8vICAgIGlmIChfSHdfRF9DaGtQb3dlcigpKQogLy8gICAgewogLy8gICAgICAgIF9Id19EX0VuYWJsZU9CKCk7ICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgU01fUkVHX0NUUkxfNSBSZWcuIHRvIDB4ODMKLS8vICAgICAgICByZXR1cm4oU1VDQ0VTUyk7CisvLyAgICAgICAgcmV0dXJuKFNNU1VDQ0VTUyk7CiAvLyAgICB9CiAvLwogLy8gICAgX0h3X0RfU2V0VmNjT2ZmKCk7CkBAIC0xNDE5LDcgKzE0MTcsNyBAQAogLy9pbnQgQ2hlY2tfRF9DbnRQb3dlcih2b2lkKQogLy97CiAvLyAgICBpZiAoX0h3X0RfQ2hrUG93ZXIoKSkKLS8vICAgICAgICByZXR1cm4oU1VDQ0VTUyk7IC8vIFBvd2VyIE9uCisvLyAgICAgICAgcmV0dXJuKFNNU1VDQ0VTUyk7IC8vIFBvd2VyIE9uCiAvLwogLy8gICAgcmV0dXJuKEVSUk9SKTsgICAgICAgLy8gUG93ZXIgT2ZmCiAvL30KQEAgLTE0MzEsNyArMTQyOSw3IEBACiAvLwogLy8gICAgaWYgKCFfSHdfRF9DaGtTdGF0dXMoKSkgLy8gTm90IFN0YXR1cyBDaGFuZ2UKIC8vICAgICAgICBpZiAoX0h3X0RfQ2hrQ2FyZEluKCkpCi0vLyAgICAgICAgICAgIHJldHVybihTVUNDRVNTKTsgLy8gQ2FyZCBleGlzdCBpbiBTbG90CisvLyAgICAgICAgICAgIHJldHVybihTTVNVQ0NFU1MpOyAvLyBDYXJkIGV4aXN0IGluIFNsb3QKIC8vCiAvLyAgICBmb3IoaT0wLGo9MCxrPTA7IGk8MTY7IGkrKykgewogLy8gICAgICAgIGlmIChfSHdfRF9DaGtDYXJkSW4oKSkgLy8gU3RhdHVzIENoYW5nZQpAQCAtMTQ0NCw3ICsxNDQyLDcgQEAKIC8vICAgICAgICB9CiAvLwogLy8gICAgICAgIGlmIChqPjMpCi0vLyAgICAgICAgICAgIHJldHVybihTVUNDRVNTKTsgLy8gQ2FyZCBleGlzdCBpbiBTbG90CisvLyAgICAgICAgICAgIHJldHVybihTTVNVQ0NFU1MpOyAvLyBDYXJkIGV4aXN0IGluIFNsb3QKIC8vICAgICAgICBpZiAoaz4zKQogLy8gICAgICAgICAgICByZXR1cm4oRVJST1IpOyAvLyBOTyBDYXJkIGV4aXN0IGluIFNsb3QKIC8vCkBAIC0xNDYwLDEyICsxNDU4LDEyIEBACiAvLyAgICBpZiAoX0h3X0RfQ2hrU3RhdHVzKCkpCiAvLyAgICAgICAgcmV0dXJuKEVSUk9SKTsgLy8gU3RhdHVzIENoYW5nZQogLy8KLS8vICAgIHJldHVybihTVUNDRVNTKTsgICAvLyBOb3QgU3RhdHVzIENoYW5nZQorLy8gICAgcmV0dXJuKFNNU1VDQ0VTUyk7ICAgLy8gTm90IFN0YXR1cyBDaGFuZ2UKIC8vfQogLy8KIC8vLy8tLS0tLSBDaGVja19EX1NzZmRjV1AoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvL2ludCBDaGVja19EX1NzZmRjV1Aodm9pZCkKLS8veyAvLyBFUlJPUjogV1AsIFNVQ0NFU1M6IE5vdCBXUAorLy97IC8vIEVSUk9SOiBXUCwgU01TVUNDRVNTOiBOb3QgV1AKIC8vICAgIGNoYXIgaTsKIC8vCiAvLyAgICBmb3IoaT0wOyBpPDg7IGkrKykgewpAQCAtMTQ3NCw3ICsxNDcyLDcgQEAKIC8vICAgICAgICBfV2FpdF9EX1RpbWVyKFRJTUVfV1BDSEspOwogLy8gICAgfQogLy8KLS8vICAgIHJldHVybihTVUNDRVNTKTsKKy8vICAgIHJldHVybihTTVNVQ0NFU1MpOwogLy99CiAvLwogKi8KQEAgLTE0ODIsMTMgKzE0ODAsMTMgQEAKIC8vLS0tLS0gQ2hlY2tfRF9SZWFkRXJyb3IoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBpbnQgQ2hlY2tfRF9SZWFkRXJyb3IoQllURSAqcmVkdW5kYW50KQogewotCXJldHVybiBTVUNDRVNTOworCXJldHVybiBTTVNVQ0NFU1M7CiB9CiAKIC8vLS0tLS0gQ2hlY2tfRF9Db3JyZWN0KCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogaW50IENoZWNrX0RfQ29ycmVjdChCWVRFICpidWYsQllURSAqcmVkdW5kYW50KQogewotCXJldHVybiBTVUNDRVNTOworCXJldHVybiBTTVNVQ0NFU1M7CiB9CiAKIC8vLS0tLS0gQ2hlY2tfRF9DSVNkYXRhKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTUwMCw3ICsxNDk4LDcgQEAKIAlpbnQgY2lzX2xlbiA9IHNpemVvZihjaXMpOwogCiAJaWYgKCFJc1NTRkRDQ29tcGxpYW5jZSAmJiAhSXNYRENvbXBsaWFuY2UpCi0JCXJldHVybiBTVUNDRVNTOworCQlyZXR1cm4gU01TVUNDRVNTOwogCiAJaWYgKCFtZW1jbXAocmVkdW5kYW50ICsgMHgwRCwgRWNjQnVmLCAzKSkKIAkJcmV0dXJuIG1lbWNtcChidWYsIGNpcywgY2lzX2xlbik7CkBAIC0xNTk5LDUgKzE1OTcsNSBAQAogICAgIGlmICghTlRfU1VDQ0VTUyhudFN0YXR1cykpCiAgICAgICAgcmV0dXJuKEVSUk9SKTsKIAotICAgIHJldHVybihTVUNDRVNTKTsKKyAgICByZXR1cm4oU01TVUNDRVNTKTsKIH0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2tldWNyL3Ntc2NzaS5jIGIvZHJpdmVycy9zdGFnaW5nL2tldWNyL3Ntc2NzaS5jCmluZGV4IDYyMTE2ODYuLmE2ZmE3N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9zbXNjc2kuYworKysgYi9kcml2ZXJzL3N0YWdpbmcva2V1Y3Ivc21zY3NpLmMKQEAgLTIwLDggKzIwLDYgQEAKIGludCBTTV9TQ1NJX1JlYWQgICAgICAgICAgICAoc3RydWN0IHVzX2RhdGEgKnVzLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIpOwogaW50IFNNX1NDU0lfV3JpdGUgICAgICAgICAgIChzdHJ1Y3QgdXNfZGF0YSAqdXMsIHN0cnVjdCBzY3NpX2NtbmQgKnNyYik7CiAKLWV4dGVybiBzdHJ1Y3QgU1NGRENUWVBFICAgICBTc2ZkYzsKLWV4dGVybiBzdHJ1Y3QgQUREUkVTUyAgICAgICBNZWRpYTsKIGV4dGVybiBQQllURSAgICAgICAgICAgICAgICBTTUhvc3RBZGRyOwogZXh0ZXJuIERXT1JEICAgICAgICAgICAgICAgIEVyclhEQ29kZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2tldWNyL3RyYW5zcG9ydC5jIGIvZHJpdmVycy9zdGFnaW5nL2tldWNyL3RyYW5zcG9ydC5jCmluZGV4IGE1MzQwMmYuLjAyNzRjYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9rZXVjci90cmFuc3BvcnQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcva2V1Y3IvdHJhbnNwb3J0LmMKQEAgLTEsMyArMSw1IEBACisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtMTMsMjMgKzE1LDI3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIERhdGEgdHJhbnNmZXIgcm91dGluZXMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vLS0tLS0gdXNiX3N0b3JfYmxvY2tpbmdfY29tcGxldGlvbigpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLyoKKyAqIHVzYl9zdG9yX2Jsb2NraW5nX2NvbXBsZXRpb24oKQorICovCiBzdGF0aWMgdm9pZCB1c2Jfc3Rvcl9ibG9ja2luZ19jb21wbGV0aW9uKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgY29tcGxldGlvbiAqdXJiX2RvbmVfcHRyID0gdXJiLT5jb250ZXh0OwogCi0JLy9wcmludGsoInRyYW5zcG9ydCAtLS0gdXNiX3N0b3JfYmxvY2tpbmdfY29tcGxldGlvblxuIik7CisJLyogcHJfaW5mbygidHJhbnNwb3J0IC0tLSB1c2Jfc3Rvcl9ibG9ja2luZ19jb21wbGV0aW9uXG4iKTsgKi8KIAljb21wbGV0ZSh1cmJfZG9uZV9wdHIpOwogfQogCi0vLy0tLS0tIHVzYl9zdG9yX21zZ19jb21tb24oKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qCisgKiB1c2Jfc3Rvcl9tc2dfY29tbW9uKCkKKyAqLwogc3RhdGljIGludCB1c2Jfc3Rvcl9tc2dfY29tbW9uKHN0cnVjdCB1c19kYXRhICp1cywgaW50IHRpbWVvdXQpCiB7CiAJc3RydWN0IGNvbXBsZXRpb24gdXJiX2RvbmU7CiAJbG9uZyB0aW1lbGVmdDsKIAlpbnQgc3RhdHVzOwogCi0JLy9wcmludGsoInRyYW5zcG9ydCAtLS0gdXNiX3N0b3JfbXNnX2NvbW1vblxuIik7CisJLyogcHJfaW5mbygidHJhbnNwb3J0IC0tLSB1c2Jfc3Rvcl9tc2dfY29tbW9uXG4iKTsgKi8KIAlpZiAodGVzdF9iaXQoVVNfRkxJRFhfQUJPUlRJTkcsICZ1cy0+ZGZsYWdzKSkKIAkJcmV0dXJuIC1FSU87CiAKQEAgLTUyLDM1ICs1OCwzNiBAQAogCiAJc2V0X2JpdChVU19GTElEWF9VUkJfQUNUSVZFLCAmdXMtPmRmbGFncyk7CiAKLQlpZiAodGVzdF9iaXQoVVNfRkxJRFhfQUJPUlRJTkcsICZ1cy0+ZGZsYWdzKSkKLQl7Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoVVNfRkxJRFhfVVJCX0FDVElWRSwgJnVzLT5kZmxhZ3MpKQotCQl7Ci0JCQkvL3ByaW50aygiLS0gY2FuY2VsbGluZyBVUkJcbiIpOworCWlmICh0ZXN0X2JpdChVU19GTElEWF9BQk9SVElORywgJnVzLT5kZmxhZ3MpKSB7CisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoVVNfRkxJRFhfVVJCX0FDVElWRSwgJnVzLT5kZmxhZ3MpKSB7CisJCQkvKiBwcl9pbmZvKCItLSBjYW5jZWxsaW5nIFVSQlxuIik7ICovCiAJCQl1c2JfdW5saW5rX3VyYih1cy0+Y3VycmVudF91cmIpOwogCQl9CiAJfQogCi0JdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgmdXJiX2RvbmUsIHRpbWVvdXQgPyA6IE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKKwl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KCZ1cmJfZG9uZSwKKwkJCQkJdGltZW91dCA/IDogTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwogCWNsZWFyX2JpdChVU19GTElEWF9VUkJfQUNUSVZFLCAmdXMtPmRmbGFncyk7CiAKLQlpZiAodGltZWxlZnQgPD0gMCkKLQl7Ci0JCS8vcHJpbnRrKCIlcyAtLSBjYW5jZWxsaW5nIFVSQlxuIiwgdGltZWxlZnQgPT0gMCA/ICJUaW1lb3V0IiA6ICJTaWduYWwiKTsKKwlpZiAodGltZWxlZnQgPD0gMCkgeworCQkvKiBwcl9pbmZvKCIlcyAtLSBjYW5jZWxsaW5nIFVSQlxuIiwKKwkJCXRpbWVsZWZ0ID09IDAgPyAiVGltZW91dCIgOiAiU2lnbmFsIik7ICovCiAJCXVzYl9raWxsX3VyYih1cy0+Y3VycmVudF91cmIpOwogCX0KIAogCXJldHVybiB1cy0+Y3VycmVudF91cmItPnN0YXR1czsKIH0KIAotLy8tLS0tLSB1c2Jfc3Rvcl9jb250cm9sX21zZygpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLyoKKyAqIHVzYl9zdG9yX2NvbnRyb2xfbXNnKCkKKyAqLwogaW50IHVzYl9zdG9yX2NvbnRyb2xfbXNnKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgaW50IHBpcGUsCiAJCSB1OCByZXF1ZXN0LCB1OCByZXF1ZXN0dHlwZSwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsCiAJCSB2b2lkICpkYXRhLCB1MTYgc2l6ZSwgaW50IHRpbWVvdXQpCiB7CiAJaW50IHN0YXR1czsKIAotCS8vcHJpbnRrKCJ0cmFuc3BvcnQgLS0tIHVzYl9zdG9yX2NvbnRyb2xfbXNnXG4iKTsKKwkvKiBwcl9pbmZvKCJ0cmFuc3BvcnQgLS0tIHVzYl9zdG9yX2NvbnRyb2xfbXNnXG4iKTsgKi8KIAogCS8qIGZpbGwgaW4gdGhlIGRldnJlcXVlc3Qgc3RydWN0dXJlICovCiAJdXMtPmNyLT5iUmVxdWVzdFR5cGUgPSByZXF1ZXN0dHlwZTsKQEAgLTkxLDcgKzk4LDcgQEAKIAogCS8qIGZpbGwgYW5kIHN1Ym1pdCB0aGUgVVJCICovCiAJdXNiX2ZpbGxfY29udHJvbF91cmIodXMtPmN1cnJlbnRfdXJiLCB1cy0+cHVzYl9kZXYsIHBpcGUsCi0JCQkgKHVuc2lnbmVkIGNoYXIqKSB1cy0+Y3IsIGRhdGEsIHNpemUsCisJCQkgKHVuc2lnbmVkIGNoYXIgKikgdXMtPmNyLCBkYXRhLCBzaXplLAogCQkJIHVzYl9zdG9yX2Jsb2NraW5nX2NvbXBsZXRpb24sIE5VTEwpOwogCXN0YXR1cyA9IHVzYl9zdG9yX21zZ19jb21tb24odXMsIHRpbWVvdXQpOwogCkBAIC0xMDEsMTQgKzEwOCwxNiBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLS8vLS0tLS0gdXNiX3N0b3JfY2xlYXJfaGFsdCgpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLyoKKyAqIHVzYl9zdG9yX2NsZWFyX2hhbHQoKQorICovCiBpbnQgdXNiX3N0b3JfY2xlYXJfaGFsdChzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCBwaXBlKQogewogCWludCByZXN1bHQ7CiAJaW50IGVuZHAgPSB1c2JfcGlwZWVuZHBvaW50KHBpcGUpOwogCi0JLy9wcmludGsoInRyYW5zcG9ydCAtLS0gdXNiX3N0b3JfY2xlYXJfaGFsdFxuIik7Ci0JaWYgKHVzYl9waXBlaW4gKHBpcGUpKQorCS8qIHByX2luZm8oInRyYW5zcG9ydCAtLS0gdXNiX3N0b3JfY2xlYXJfaGFsdFxuIik7ICovCisJaWYgKHVzYl9waXBlaW4ocGlwZSkpCiAJCWVuZHAgfD0gVVNCX0RJUl9JTjsKIAogCXJlc3VsdCA9IHVzYl9zdG9yX2NvbnRyb2xfbXNnKHVzLCB1cy0+c2VuZF9jdHJsX3BpcGUsCkBAIC0xMTgsMTAzICsxMjcsMTA5IEBACiAKIAkvKiByZXNldCB0aGUgZW5kcG9pbnQgdG9nZ2xlICovCiAJaWYgKHJlc3VsdCA+PSAwKQotCQkvL3VzYl9zZXR0b2dnbGUodXMtPnB1c2JfZGV2LCB1c2JfcGlwZWVuZHBvaW50KHBpcGUpLCB1c2JfcGlwZW91dChwaXBlKSwgMCk7Ci0gICAgICAgICAgICAgICAgdXNiX3Jlc2V0X2VuZHBvaW50KHVzLT5wdXNiX2RldiwgZW5kcCk7CisJCS8qIHVzYl9zZXR0b2dnbGUodXMtPnB1c2JfZGV2LCB1c2JfcGlwZWVuZHBvaW50KHBpcGUpLAorCQkJCQkJdXNiX3BpcGVvdXQocGlwZSksIDApOyAqLworCQl1c2JfcmVzZXRfZW5kcG9pbnQodXMtPnB1c2JfZGV2LCBlbmRwKTsKIAogCXJldHVybiByZXN1bHQ7CiB9CiAKLS8vLS0tLS0gaW50ZXJwcmV0X3VyYl9yZXN1bHQoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qCisgKiBpbnRlcnByZXRfdXJiX3Jlc3VsdCgpCisgKi8KIHN0YXRpYyBpbnQgaW50ZXJwcmV0X3VyYl9yZXN1bHQoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgcGlwZSwKIAkJdW5zaWduZWQgaW50IGxlbmd0aCwgaW50IHJlc3VsdCwgdW5zaWduZWQgaW50IHBhcnRpYWwpCiB7Ci0JLy9wcmludGsoInRyYW5zcG9ydCAtLS0gaW50ZXJwcmV0X3VyYl9yZXN1bHRcbiIpOworCS8qIHByX2luZm8oInRyYW5zcG9ydCAtLS0gaW50ZXJwcmV0X3VyYl9yZXN1bHRcbiIpOyAqLwogCXN3aXRjaCAocmVzdWx0KSB7CiAJLyogbm8gZXJyb3IgY29kZTsgZGlkIHdlIHNlbmQgYWxsIHRoZSBkYXRhPyAqLwogCWNhc2UgMDoKLQkJaWYgKHBhcnRpYWwgIT0gbGVuZ3RoKQotCQl7Ci0JCQkvL3ByaW50aygiLS0gc2hvcnQgdHJhbnNmZXJcbiIpOworCQlpZiAocGFydGlhbCAhPSBsZW5ndGgpIHsKKwkJCS8qIHByX2luZm8oIi0tIHNob3J0IHRyYW5zZmVyXG4iKTsgKi8KIAkJCXJldHVybiBVU0JfU1RPUl9YRkVSX1NIT1JUOwogCQl9Ci0JCS8vcHJpbnRrKCItLSB0cmFuc2ZlciBjb21wbGV0ZVxuIik7CisJCS8qIHByX2luZm8oIi0tIHRyYW5zZmVyIGNvbXBsZXRlXG4iKTsgKi8KIAkJcmV0dXJuIFVTQl9TVE9SX1hGRVJfR09PRDsKIAljYXNlIC1FUElQRToKLQkJaWYgKHVzYl9waXBlY29udHJvbChwaXBlKSkKLQkJewotCQkJLy9wcmludGsoIi0tIHN0YWxsIG9uIGNvbnRyb2wgcGlwZVxuIik7CisJCWlmICh1c2JfcGlwZWNvbnRyb2wocGlwZSkpIHsKKwkJCS8qIHByX2luZm8oIi0tIHN0YWxsIG9uIGNvbnRyb2wgcGlwZVxuIik7ICovCiAJCQlyZXR1cm4gVVNCX1NUT1JfWEZFUl9TVEFMTEVEOwogCQl9Ci0JCS8vcHJpbnRrKCJjbGVhcmluZyBlbmRwb2ludCBoYWx0IGZvciBwaXBlIDB4JXhcbiIsIHBpcGUpOworCQkvKiBwcl9pbmZvKCJjbGVhcmluZyBlbmRwb2ludCBoYWx0IGZvciBwaXBlIDB4JXhcbiIsIHBpcGUpOyAqLwogCQlpZiAodXNiX3N0b3JfY2xlYXJfaGFsdCh1cywgcGlwZSkgPCAwKQogCQkJcmV0dXJuIFVTQl9TVE9SX1hGRVJfRVJST1I7CiAJCXJldHVybiBVU0JfU1RPUl9YRkVSX1NUQUxMRUQ7CiAJY2FzZSAtRU9WRVJGTE9XOgotCQkvL3ByaW50aygiLS0gYmFiYmxlXG4iKTsKKwkJLyogcHJfaW5mbygiLS0gYmFiYmxlXG4iKTsgKi8KIAkJcmV0dXJuIFVTQl9TVE9SX1hGRVJfTE9ORzsKIAljYXNlIC1FQ09OTlJFU0VUOgotCQkvL3ByaW50aygiLS0gdHJhbnNmZXIgY2FuY2VsbGVkXG4iKTsKKwkJLyogcHJfaW5mbygiLS0gdHJhbnNmZXIgY2FuY2VsbGVkXG4iKTsgKi8KIAkJcmV0dXJuIFVTQl9TVE9SX1hGRVJfRVJST1I7CiAJY2FzZSAtRVJFTU9URUlPOgotCQkvL3ByaW50aygiLS0gc2hvcnQgcmVhZCB0cmFuc2ZlclxuIik7CisJCS8qIHByX2luZm8oIi0tIHNob3J0IHJlYWQgdHJhbnNmZXJcbiIpOyAqLwogCQlyZXR1cm4gVVNCX1NUT1JfWEZFUl9TSE9SVDsKIAljYXNlIC1FSU86Ci0JCS8vcHJpbnRrKCItLSBhYm9ydCBvciBkaXNjb25uZWN0IGluIHByb2dyZXNzXG4iKTsKKwkJLyogcHJfaW5mbygiLS0gYWJvcnQgb3IgZGlzY29ubmVjdCBpbiBwcm9ncmVzc1xuIik7ICovCiAJCXJldHVybiBVU0JfU1RPUl9YRkVSX0VSUk9SOwogCWRlZmF1bHQ6Ci0JCS8vcHJpbnRrKCItLSB1bmtub3duIGVycm9yXG4iKTsKKwkJLyogcHJfaW5mbygiLS0gdW5rbm93biBlcnJvclxuIik7ICovCiAJCXJldHVybiBVU0JfU1RPUl9YRkVSX0VSUk9SOwogCX0KIH0KIAotLy8tLS0tLSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1ZigpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLyoKKyAqIHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKCkKKyAqLwogaW50IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgaW50IHBpcGUsCiAJdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgKmFjdF9sZW4pCiB7CiAJaW50IHJlc3VsdDsKIAotCS8vcHJpbnRrKCJ0cmFuc3BvcnQgLS0tIHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmXG4iKTsKKwkvKiBwcl9pbmZvKCJ0cmFuc3BvcnQgLS0tIHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmXG4iKTsgKi8KIAogCS8qIGZpbGwgYW5kIHN1Ym1pdCB0aGUgVVJCICovCi0JdXNiX2ZpbGxfYnVsa191cmIodXMtPmN1cnJlbnRfdXJiLCB1cy0+cHVzYl9kZXYsIHBpcGUsIGJ1ZiwgbGVuZ3RoLCB1c2Jfc3Rvcl9ibG9ja2luZ19jb21wbGV0aW9uLCBOVUxMKTsKKwl1c2JfZmlsbF9idWxrX3VyYih1cy0+Y3VycmVudF91cmIsIHVzLT5wdXNiX2RldiwgcGlwZSwgYnVmLAorCQkJCWxlbmd0aCwgdXNiX3N0b3JfYmxvY2tpbmdfY29tcGxldGlvbiwgTlVMTCk7CiAJcmVzdWx0ID0gdXNiX3N0b3JfbXNnX2NvbW1vbih1cywgMCk7CiAKIAkvKiBzdG9yZSB0aGUgYWN0dWFsIGxlbmd0aCBvZiB0aGUgZGF0YSB0cmFuc2ZlcnJlZCAqLwogCWlmIChhY3RfbGVuKQogCQkqYWN0X2xlbiA9IHVzLT5jdXJyZW50X3VyYi0+YWN0dWFsX2xlbmd0aDsKIAotCXJldHVybiBpbnRlcnByZXRfdXJiX3Jlc3VsdCh1cywgcGlwZSwgbGVuZ3RoLCByZXN1bHQsIHVzLT5jdXJyZW50X3VyYi0+YWN0dWFsX2xlbmd0aCk7CisJcmV0dXJuIGludGVycHJldF91cmJfcmVzdWx0KHVzLCBwaXBlLCBsZW5ndGgsIHJlc3VsdCwKKwkJCQkJdXMtPmN1cnJlbnRfdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIH0KIAotLy8tLS0tLSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX3NnbGlzdCgpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLyoKKyAqIHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfc2dsaXN0KCkKKyAqLwogc3RhdGljIGludCB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX3NnbGlzdChzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCBwaXBlLAogCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbnVtX3NnLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLAogCQl1bnNpZ25lZCBpbnQgKmFjdF9sZW4pCiB7CiAJaW50IHJlc3VsdDsKIAotCS8vcHJpbnRrKCJ0cmFuc3BvcnQgLS0tIHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfc2dsaXN0XG4iKTsKKwkvKiBwcl9pbmZvKCJ0cmFuc3BvcnQgLS0tIHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfc2dsaXN0XG4iKTsgKi8KIAlpZiAodGVzdF9iaXQoVVNfRkxJRFhfQUJPUlRJTkcsICZ1cy0+ZGZsYWdzKSkKIAkJcmV0dXJuIFVTQl9TVE9SX1hGRVJfRVJST1I7CiAKIAkvKiBpbml0aWFsaXplIHRoZSBzY2F0dGVyLWdhdGhlciByZXF1ZXN0IGJsb2NrICovCi0JcmVzdWx0ID0gdXNiX3NnX2luaXQoJnVzLT5jdXJyZW50X3NnLCB1cy0+cHVzYl9kZXYsIHBpcGUsIDAsIHNnLCBudW1fc2csIGxlbmd0aCwgR0ZQX05PSU8pOwotCWlmIChyZXN1bHQpCi0JewotCQkvL3ByaW50aygidXNiX3NnX2luaXQgcmV0dXJuZWQgJWRcbiIsIHJlc3VsdCk7CisJcmVzdWx0ID0gdXNiX3NnX2luaXQoJnVzLT5jdXJyZW50X3NnLCB1cy0+cHVzYl9kZXYsIHBpcGUsIDAsCisJCQkJCXNnLCBudW1fc2csIGxlbmd0aCwgR0ZQX05PSU8pOworCWlmIChyZXN1bHQpIHsKKwkJLyogcHJfaW5mbygidXNiX3NnX2luaXQgcmV0dXJuZWQgJWRcbiIsIHJlc3VsdCk7ICovCiAJCXJldHVybiBVU0JfU1RPUl9YRkVSX0VSUk9SOwogCX0KIAotCS8qIHNpbmNlIHRoZSBibG9jayBoYXMgYmVlbiBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHksIGl0J3Mgbm93IG9rYXkgdG8gY2FuY2VsIGl0ICovCisJLyogc2luY2UgdGhlIGJsb2NrIGhhcyBiZWVuIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseSwKKwkJCQkJaXQncyBub3cgb2theSB0byBjYW5jZWwgaXQgKi8KIAlzZXRfYml0KFVTX0ZMSURYX1NHX0FDVElWRSwgJnVzLT5kZmxhZ3MpOwogCiAJLyogZGlkIGFuIGFib3J0L2Rpc2Nvbm5lY3Qgb2NjdXIgZHVyaW5nIHRoZSBzdWJtaXNzaW9uPyAqLwotCWlmICh0ZXN0X2JpdChVU19GTElEWF9BQk9SVElORywgJnVzLT5kZmxhZ3MpKQotCXsKKwlpZiAodGVzdF9iaXQoVVNfRkxJRFhfQUJPUlRJTkcsICZ1cy0+ZGZsYWdzKSkgewogCQkvKiBjYW5jZWwgdGhlIHJlcXVlc3QsIGlmIGl0IGhhc24ndCBiZWVuIGNhbmNlbGxlZCBhbHJlYWR5ICovCi0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoVVNfRkxJRFhfU0dfQUNUSVZFLCAmdXMtPmRmbGFncykpCi0JCXsKLQkJCS8vcHJpbnRrKCItLSBjYW5jZWxsaW5nIHNnIHJlcXVlc3RcbiIpOworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFVTX0ZMSURYX1NHX0FDVElWRSwgJnVzLT5kZmxhZ3MpKSB7CisJCQkvKiBwcl9pbmZvKCItLSBjYW5jZWxsaW5nIHNnIHJlcXVlc3RcbiIpOyAqLwogCQkJdXNiX3NnX2NhbmNlbCgmdXMtPmN1cnJlbnRfc2cpOwogCQl9CiAJfQpAQCAtMjI3LDExICsyNDIsMTUgQEAKIAlpZiAoYWN0X2xlbikKIAkJKmFjdF9sZW4gPSB1cy0+Y3VycmVudF9zZy5ieXRlczsKIAotCXJldHVybiBpbnRlcnByZXRfdXJiX3Jlc3VsdCh1cywgcGlwZSwgbGVuZ3RoLCByZXN1bHQsIHVzLT5jdXJyZW50X3NnLmJ5dGVzKTsKKwlyZXR1cm4gaW50ZXJwcmV0X3VyYl9yZXN1bHQodXMsIHBpcGUsIGxlbmd0aCwKKwkJCQkJcmVzdWx0LCB1cy0+Y3VycmVudF9zZy5ieXRlcyk7CiB9CiAKLS8vLS0tLS0gdXNiX3N0b3JfYnVsa19zcmIoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWludCB1c2Jfc3Rvcl9idWxrX3NyYihzdHJ1Y3QgdXNfZGF0YSogdXMsIHVuc2lnbmVkIGludCBwaXBlLCBzdHJ1Y3Qgc2NzaV9jbW5kKiBzcmIpCisvKgorICogdXNiX3N0b3JfYnVsa19zcmIoKQorICovCitpbnQgdXNiX3N0b3JfYnVsa19zcmIoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgcGlwZSwKKwkJCQkJc3RydWN0IHNjc2lfY21uZCAqc3JiKQogewogCXVuc2lnbmVkIGludCBwYXJ0aWFsOwogCWludCByZXN1bHQgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX3NnbGlzdCh1cywgcGlwZSwgc2NzaV9zZ2xpc3Qoc3JiKSwKQEAgLTI0MiwyNyArMjYxLDI3IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotLy8tLS0tLSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX3NnKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1pbnQgdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9zZyhzdHJ1Y3QgdXNfZGF0YSogdXMsIHVuc2lnbmVkIGludCBwaXBlLAorLyoKKyAqIHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfc2coKQorICovCitpbnQgdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9zZyhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCBwaXBlLAogCQl2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW5ndGhfbGVmdCwgaW50IHVzZV9zZywgaW50ICpyZXNpZHVhbCkKIHsKIAlpbnQgcmVzdWx0OwogCXVuc2lnbmVkIGludCBwYXJ0aWFsOwogCi0JLy9wcmludGsoInRyYW5zcG9ydCAtLS0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9zZ1xuIik7CisJLyogcHJfaW5mbygidHJhbnNwb3J0IC0tLSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX3NnXG4iKTsgKi8KIAkvKiBhcmUgd2Ugc2NhdHRlci1nYXRoZXJpbmc/ICovCi0JaWYgKHVzZV9zZykKLQl7CisJaWYgKHVzZV9zZykgewogCQkvKiB1c2UgdGhlIHVzYiBjb3JlIHNjYXR0ZXItZ2F0aGVyIHByaW1pdGl2ZXMgKi8KIAkJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9zZ2xpc3QodXMsIHBpcGUsCiAJCQkJKHN0cnVjdCBzY2F0dGVybGlzdCAqKSBidWYsIHVzZV9zZywKIAkJCQlsZW5ndGhfbGVmdCwgJnBhcnRpYWwpOwogCQlsZW5ndGhfbGVmdCAtPSBwYXJ0aWFsOwotCX0KLQllbHNlCi0JeworCX0gZWxzZSB7CiAJCS8qIG5vIHNjYXR0ZXItZ2F0aGVyLCBqdXN0IG1ha2UgdGhlIHJlcXVlc3QgKi8KLQkJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHBpcGUsIGJ1ZiwgbGVuZ3RoX2xlZnQsICZwYXJ0aWFsKTsKKwkJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHBpcGUsIGJ1ZiwKKwkJCQkJCQlsZW5ndGhfbGVmdCwgJnBhcnRpYWwpOwogCQlsZW5ndGhfbGVmdCAtPSBwYXJ0aWFsOwogCX0KIApAQCAtMjc1LDM3ICsyOTQsMzcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVHJhbnNwb3J0IHJvdXRpbmVzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vLy0tLS0tIHVzYl9zdG9yX2ludm9rZV90cmFuc3BvcnQoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qCisgKiB1c2Jfc3Rvcl9pbnZva2VfdHJhbnNwb3J0KCkKKyAqLwogdm9pZCB1c2Jfc3Rvcl9pbnZva2VfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQogewogCWludCBuZWVkX2F1dG9fc2Vuc2U7CiAJaW50IHJlc3VsdDsKIAotCS8vcHJpbnRrKCJ0cmFuc3BvcnQgLS0tIHVzYl9zdG9yX2ludm9rZV90cmFuc3BvcnRcbiIpOworCS8qIHByX2luZm8oInRyYW5zcG9ydCAtLS0gdXNiX3N0b3JfaW52b2tlX3RyYW5zcG9ydFxuIik7ICovCiAJdXNiX3N0b3JfcHJpbnRfY21kKHNyYik7CiAJLyogc2VuZCB0aGUgY29tbWFuZCB0byB0aGUgdHJhbnNwb3J0IGxheWVyICovCiAJc2NzaV9zZXRfcmVzaWQoc3JiLCAwKTsKLQlyZXN1bHQgPSB1cy0+dHJhbnNwb3J0KHNyYiwgdXMpOyAvL3VzYl9zdG9yX0J1bGtfdHJhbnNwb3J0OwotCQotCS8qIGlmIHRoZSBjb21tYW5kIGdldHMgYWJvcnRlZCBieSB0aGUgaGlnaGVyIGxheWVycywgd2UgbmVlZCB0byBzaG9ydC1jaXJjdWl0IGFsbCBvdGhlciBwcm9jZXNzaW5nICovCi0JaWYgKHRlc3RfYml0KFVTX0ZMSURYX1RJTUVEX09VVCwgJnVzLT5kZmxhZ3MpKQotCXsKLQkJLy9wcmludGsoIi0tIGNvbW1hbmQgd2FzIGFib3J0ZWRcbiIpOworCXJlc3VsdCA9IHVzLT50cmFuc3BvcnQoc3JiLCB1cyk7IC8qIHVzYl9zdG9yX0J1bGtfdHJhbnNwb3J0OyAqLworCisJLyogaWYgdGhlIGNvbW1hbmQgZ2V0cyBhYm9ydGVkIGJ5IHRoZSBoaWdoZXIgbGF5ZXJzLAorCQl3ZSBuZWVkIHRvIHNob3J0LWNpcmN1aXQgYWxsIG90aGVyIHByb2Nlc3NpbmcgKi8KKwlpZiAodGVzdF9iaXQoVVNfRkxJRFhfVElNRURfT1VULCAmdXMtPmRmbGFncykpIHsKKwkJLyogcHJfaW5mbygiLS0gY29tbWFuZCB3YXMgYWJvcnRlZFxuIik7ICovCiAJCXNyYi0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OwogCQlnb3RvIEhhbmRsZV9FcnJvcnM7CiAJfQogCiAJLyogaWYgdGhlcmUgaXMgYSB0cmFuc3BvcnQgZXJyb3IsIHJlc2V0IGFuZCBkb24ndCBhdXRvLXNlbnNlICovCi0JaWYgKHJlc3VsdCA9PSBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1IpCi0JewotCQkvL3ByaW50aygiLS0gdHJhbnNwb3J0IGluZGljYXRlcyBlcnJvciwgcmVzZXR0aW5nXG4iKTsKKwlpZiAocmVzdWx0ID09IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUikgeworCQkvKiBwcl9pbmZvKCItLSB0cmFuc3BvcnQgaW5kaWNhdGVzIGVycm9yLCByZXNldHRpbmdcbiIpOyAqLwogCQlzcmItPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKIAkJZ290byBIYW5kbGVfRXJyb3JzOwogCX0KIAogCS8qIGlmIHRoZSB0cmFuc3BvcnQgcHJvdmlkZWQgaXRzIG93biBzZW5zZSBkYXRhLCBkb24ndCBhdXRvLXNlbnNlICovCi0JaWYgKHJlc3VsdCA9PSBVU0JfU1RPUl9UUkFOU1BPUlRfTk9fU0VOU0UpCi0JeworCWlmIChyZXN1bHQgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX05PX1NFTlNFKSB7CiAJCXNyYi0+cmVzdWx0ID0gU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OOwogCQlyZXR1cm47CiAJfQpAQCAtMzE1LDM0ICszMzQsMzQgQEAKIAkvKiBEZXRlcm1pbmUgaWYgd2UgbmVlZCB0byBhdXRvLXNlbnNlICovCiAJbmVlZF9hdXRvX3NlbnNlID0gMDsKIAotCWlmICgodXMtPnByb3RvY29sID09IFVTQl9QUl9DQiB8fCB1cy0+cHJvdG9jb2wgPT0gVVNCX1BSX0RQQ01fVVNCKSAmJiBzcmItPnNjX2RhdGFfZGlyZWN0aW9uICE9IERNQV9GUk9NX0RFVklDRSkKLQl7Ci0JCS8vcHJpbnRrKCItLSBDQiB0cmFuc3BvcnQgZGV2aWNlIHJlcXVpcmluZyBhdXRvLXNlbnNlXG4iKTsKKwlpZiAoKHVzLT5wcm90b2NvbCA9PSBVU0JfUFJfQ0IgfHwgdXMtPnByb3RvY29sID09IFVTQl9QUl9EUENNX1VTQikgJiYKKwkJCQlzcmItPnNjX2RhdGFfZGlyZWN0aW9uICE9IERNQV9GUk9NX0RFVklDRSkgeworCQkvKiBwcl9pbmZvKCItLSBDQiB0cmFuc3BvcnQgZGV2aWNlIHJlcXVpcmluZyBhdXRvLXNlbnNlXG4iKTsgKi8KIAkJbmVlZF9hdXRvX3NlbnNlID0gMTsKIAl9CiAKLQlpZiAocmVzdWx0ID09IFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQpCi0JewotCQkvL3ByaW50aygiLS0gdHJhbnNwb3J0IGluZGljYXRlcyBjb21tYW5kIGZhaWx1cmVcbiIpOworCWlmIChyZXN1bHQgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRCkgeworCQkvKiBwcl9pbmZvKCItLSB0cmFuc3BvcnQgaW5kaWNhdGVzIGNvbW1hbmQgZmFpbHVyZVxuIik7ICovCiAJCW5lZWRfYXV0b19zZW5zZSA9IDE7CiAJfQogCiAJLyogTm93LCBpZiB3ZSBuZWVkIHRvIGRvIHRoZSBhdXRvLXNlbnNlLCBsZXQncyBkbyBpdCAqLwotCWlmIChuZWVkX2F1dG9fc2Vuc2UpCi0JeworCWlmIChuZWVkX2F1dG9fc2Vuc2UpIHsKIAkJaW50IHRlbXBfcmVzdWx0OwogCQlzdHJ1Y3Qgc2NzaV9laF9zYXZlIHNlczsKIAotCQlwcmludGsoIklzc3VpbmcgYXV0by1SRVFVRVNUX1NFTlNFXG4iKTsKKwkJcHJfaW5mbygiSXNzdWluZyBhdXRvLVJFUVVFU1RfU0VOU0VcbiIpOwogCiAJCXNjc2lfZWhfcHJlcF9jbW5kKHNyYiwgJnNlcywgTlVMTCwgMCwgVVNfU0VOU0VfU0laRSk7CiAKIAkJLyogd2UgbXVzdCBkbyB0aGUgcHJvdG9jb2wgdHJhbnNsYXRpb24gaGVyZSAqLwotCQlpZiAodXMtPnN1YmNsYXNzID09IFVTQl9TQ19SQkMgfHwgdXMtPnN1YmNsYXNzID09IFVTQl9TQ19TQ1NJIHx8IHVzLT5zdWJjbGFzcyA9PSBVU0JfU0NfQ1lQX0FUQUNCKQorCQlpZiAodXMtPnN1YmNsYXNzID09IFVTQl9TQ19SQkMgfHwKKwkJCXVzLT5zdWJjbGFzcyA9PSBVU0JfU0NfU0NTSSB8fAorCQkJdXMtPnN1YmNsYXNzID09IFVTQl9TQ19DWVBfQVRBQ0IpIHsKIAkJCXNyYi0+Y21kX2xlbiA9IDY7Ci0JCWVsc2UKKwkJfSBlbHNlIHsKIAkJCXNyYi0+Y21kX2xlbiA9IDEyOwotCisJCX0KIAkJLyogaXNzdWUgdGhlIGF1dG8tc2Vuc2UgY29tbWFuZCAqLwogCQlzY3NpX3NldF9yZXNpZChzcmIsIDApOwogCQl0ZW1wX3Jlc3VsdCA9IHVzLT50cmFuc3BvcnQodXMtPnNyYiwgdXMpOwpAQCAtMzUwLDE1ICszNjksMTMgQEAKIAkJLyogbGV0J3MgY2xlYW4gdXAgcmlnaHQgYXdheSAqLwogCQlzY3NpX2VoX3Jlc3RvcmVfY21uZChzcmIsICZzZXMpOwogCi0JCWlmICh0ZXN0X2JpdChVU19GTElEWF9USU1FRF9PVVQsICZ1cy0+ZGZsYWdzKSkKLQkJewotCQkJLy9wcmludGsoIi0tIGF1dG8tc2Vuc2UgYWJvcnRlZFxuIik7CisJCWlmICh0ZXN0X2JpdChVU19GTElEWF9USU1FRF9PVVQsICZ1cy0+ZGZsYWdzKSkgeworCQkJLyogcHJfaW5mbygiLS0gYXV0by1zZW5zZSBhYm9ydGVkXG4iKTsgKi8KIAkJCXNyYi0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OwogCQkJZ290byBIYW5kbGVfRXJyb3JzOwogCQl9Ci0JCWlmICh0ZW1wX3Jlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKLQkJewotCQkJLy9wcmludGsoIi0tIGF1dG8tc2Vuc2UgZmFpbHVyZVxuIik7CisJCWlmICh0ZW1wX3Jlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkgeworCQkJLyogcHJfaW5mbygiLS0gYXV0by1zZW5zZSBmYWlsdXJlXG4iKTsgKi8KIAkJCXNyYi0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OwogCQkJaWYgKCEodXMtPmZmbGFncyAmIFVTX0ZMX1NDTV9NVUxUX1RBUkcpKQogCQkJCWdvdG8gSGFuZGxlX0Vycm9yczsKQEAgLTM3MSwxNiArMzg4LDE3IEBACiAJCWlmIChyZXN1bHQgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QgJiYKIAkJCShzcmItPnNlbnNlX2J1ZmZlclsyXSAmIDB4YWYpID09IDAgJiYKIAkJCXNyYi0+c2Vuc2VfYnVmZmVyWzEyXSA9PSAwICYmCi0JCQlzcmItPnNlbnNlX2J1ZmZlclsxM10gPT0gMCkKLQkJeworCQkJc3JiLT5zZW5zZV9idWZmZXJbMTNdID09IDApIHsKIAkJCXNyYi0+cmVzdWx0ID0gU0FNX1NUQVRfR09PRDsKIAkJCXNyYi0+c2Vuc2VfYnVmZmVyWzBdID0gMHgwOwogCQl9CiAJfQogCiAJLyogRGlkIHdlIHRyYW5zZmVyIGxlc3MgdGhhbiB0aGUgbWluaW11bSBhbW91bnQgcmVxdWlyZWQ/ICovCi0JaWYgKHNyYi0+cmVzdWx0ID09IFNBTV9TVEFUX0dPT0QgJiYJc2NzaV9idWZmbGVuKHNyYikgLSBzY3NpX2dldF9yZXNpZChzcmIpIDwgc3JiLT51bmRlcmZsb3cpCi0JCXNyYi0+cmVzdWx0ID0gKERJRF9FUlJPUiA8PCAxNik7Ly92MDIgfCAoU1VHR0VTVF9SRVRSWSA8PCAyNCk7CisJaWYgKHNyYi0+cmVzdWx0ID09IFNBTV9TVEFUX0dPT0QgJiYgc2NzaV9idWZmbGVuKHNyYikgLQorCQkJCXNjc2lfZ2V0X3Jlc2lkKHNyYikgPCBzcmItPnVuZGVyZmxvdykKKwkJc3JiLT5yZXN1bHQgPSAoRElEX0VSUk9SIDw8IDE2KTsKKwkJLyogdjAyIHwgKFNVR0dFU1RfUkVUUlkgPDwgMjQpOyAqLwogCiAJcmV0dXJuOwogCkBAIC0zOTQsOCArNDEyLDcgQEAKIAlyZXN1bHQgPSB1c2Jfc3Rvcl9wb3J0X3Jlc2V0KHVzKTsKIAltdXRleF9sb2NrKCZ1cy0+ZGV2X211dGV4KTsKIAotCWlmIChyZXN1bHQgPCAwKQotCXsKKwlpZiAocmVzdWx0IDwgMCkgewogCQlzY3NpX2xvY2sodXNfdG9faG9zdCh1cykpOwogCQl1c2Jfc3Rvcl9yZXBvcnRfZGV2aWNlX3Jlc2V0KHVzKTsKIAkJc2NzaV91bmxvY2sodXNfdG9faG9zdCh1cykpOwpAQCAtNDA0LDYxICs0MjEsNjQgQEAKIAljbGVhcl9iaXQoVVNfRkxJRFhfUkVTRVRUSU5HLCAmdXMtPmRmbGFncyk7CiB9CiAKLS8vLS0tLS0gRU5FX3N0b3JfaW52b2tlX3RyYW5zcG9ydCgpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLyoKKyAqIEVORV9zdG9yX2ludm9rZV90cmFuc3BvcnQoKQorICovCiB2b2lkIEVORV9zdG9yX2ludm9rZV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7Ci0JaW50IHJlc3VsdD0wOworCWludCByZXN1bHQgPSAwOwogCi0JLy9wcmludGsoInRyYW5zcG9ydCAtLS0gRU5FX3N0b3JfaW52b2tlX3RyYW5zcG9ydFxuIik7CisJLyogcHJfaW5mbygidHJhbnNwb3J0IC0tLSBFTkVfc3Rvcl9pbnZva2VfdHJhbnNwb3J0XG4iKTsgKi8KIAl1c2Jfc3Rvcl9wcmludF9jbWQoc3JiKTsKIAkvKiBzZW5kIHRoZSBjb21tYW5kIHRvIHRoZSB0cmFuc3BvcnQgbGF5ZXIgKi8KIAlzY3NpX3NldF9yZXNpZChzcmIsIDApOwogCWlmICghKHVzLT5NU19TdGF0dXMuUmVhZHkgfHwgdXMtPlNNX1N0YXR1cy5SZWFkeSkpCiAJCXJlc3VsdCA9IEVORV9Jbml0TWVkaWEodXMpOwotCQorCiAJaWYgKHVzLT5Qb3dlcl9Jc1Jlc3VtID09IHRydWUpIHsKIAkJcmVzdWx0ID0gRU5FX0luaXRNZWRpYSh1cyk7Ci0JCXVzLT5Qb3dlcl9Jc1Jlc3VtID0gZmFsc2U7CQkKLQl9CQotCQotCWlmICh1cy0+TVNfU3RhdHVzLlJlYWR5KQlyZXN1bHQgPSBNU19TQ1NJSXJwKHVzLCBzcmIpOwotCWlmICh1cy0+U01fU3RhdHVzLlJlYWR5KQlyZXN1bHQgPSBTTV9TQ1NJSXJwKHVzLCBzcmIpOworCQl1cy0+UG93ZXJfSXNSZXN1bSA9IGZhbHNlOworCX0KIAotCS8qIGlmIHRoZSBjb21tYW5kIGdldHMgYWJvcnRlZCBieSB0aGUgaGlnaGVyIGxheWVycywgd2UgbmVlZCB0byBzaG9ydC1jaXJjdWl0IGFsbCBvdGhlciBwcm9jZXNzaW5nICovCi0JaWYgKHRlc3RfYml0KFVTX0ZMSURYX1RJTUVEX09VVCwgJnVzLT5kZmxhZ3MpKQotCXsKLQkJLy9wcmludGsoIi0tIGNvbW1hbmQgd2FzIGFib3J0ZWRcbiIpOworCWlmICh1cy0+TVNfU3RhdHVzLlJlYWR5KQorCQlyZXN1bHQgPSBNU19TQ1NJSXJwKHVzLCBzcmIpOworCWlmICh1cy0+U01fU3RhdHVzLlJlYWR5KQorCQlyZXN1bHQgPSBTTV9TQ1NJSXJwKHVzLCBzcmIpOworCisJLyogaWYgdGhlIGNvbW1hbmQgZ2V0cyBhYm9ydGVkIGJ5IHRoZSBoaWdoZXIgbGF5ZXJzLAorCQl3ZSBuZWVkIHRvIHNob3J0LWNpcmN1aXQgYWxsIG90aGVyIHByb2Nlc3NpbmcgKi8KKwlpZiAodGVzdF9iaXQoVVNfRkxJRFhfVElNRURfT1VULCAmdXMtPmRmbGFncykpIHsKKwkJLyogcHJfaW5mbygiLS0gY29tbWFuZCB3YXMgYWJvcnRlZFxuIik7ICovCiAJCXNyYi0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OwogCQlnb3RvIEhhbmRsZV9FcnJvcnM7CiAJfQogCiAJLyogaWYgdGhlcmUgaXMgYSB0cmFuc3BvcnQgZXJyb3IsIHJlc2V0IGFuZCBkb24ndCBhdXRvLXNlbnNlICovCi0JaWYgKHJlc3VsdCA9PSBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1IpCi0JewotCQkvL3ByaW50aygiLS0gdHJhbnNwb3J0IGluZGljYXRlcyBlcnJvciwgcmVzZXR0aW5nXG4iKTsKKwlpZiAocmVzdWx0ID09IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUikgeworCQkvKiBwcl9pbmZvKCItLSB0cmFuc3BvcnQgaW5kaWNhdGVzIGVycm9yLCByZXNldHRpbmdcbiIpOyAqLwogCQlzcmItPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKIAkJZ290byBIYW5kbGVfRXJyb3JzOwogCX0KIAogCS8qIGlmIHRoZSB0cmFuc3BvcnQgcHJvdmlkZWQgaXRzIG93biBzZW5zZSBkYXRhLCBkb24ndCBhdXRvLXNlbnNlICovCi0JaWYgKHJlc3VsdCA9PSBVU0JfU1RPUl9UUkFOU1BPUlRfTk9fU0VOU0UpCi0JeworCWlmIChyZXN1bHQgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX05PX1NFTlNFKSB7CiAJCXNyYi0+cmVzdWx0ID0gU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OOwogCQlyZXR1cm47CiAJfQogCiAJc3JiLT5yZXN1bHQgPSBTQU1fU1RBVF9HT09EOwotCWlmIChyZXN1bHQgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRCkKLQl7Ci0JCS8vcHJpbnRrKCItLSB0cmFuc3BvcnQgaW5kaWNhdGVzIGNvbW1hbmQgZmFpbHVyZVxuIik7Ci0JCS8vbmVlZF9hdXRvX3NlbnNlID0gMTsKKwlpZiAocmVzdWx0ID09IFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQpIHsKKwkJLyogcHJfaW5mbygiLS0gdHJhbnNwb3J0IGluZGljYXRlcyBjb21tYW5kIGZhaWx1cmVcbiIpOyAqLworCQkvKiBuZWVkX2F1dG9fc2Vuc2UgPSAxOyAqLwogCQlCdWlsZFNlbnNlQnVmZmVyKHNyYiwgdXMtPlNyYlN0YXR1cyk7CiAJCXNyYi0+cmVzdWx0ID0gU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OOwogCX0KIAogCS8qIERpZCB3ZSB0cmFuc2ZlciBsZXNzIHRoYW4gdGhlIG1pbmltdW0gYW1vdW50IHJlcXVpcmVkPyAqLwotCWlmIChzcmItPnJlc3VsdCA9PSBTQU1fU1RBVF9HT09EICYmIHNjc2lfYnVmZmxlbihzcmIpIC0gc2NzaV9nZXRfcmVzaWQoc3JiKSA8IHNyYi0+dW5kZXJmbG93KQotCQlzcmItPnJlc3VsdCA9IChESURfRVJST1IgPDwgMTYpOy8vdjAyIHwgKFNVR0dFU1RfUkVUUlkgPDwgMjQpOworCWlmIChzcmItPnJlc3VsdCA9PSBTQU1fU1RBVF9HT09EICYmIHNjc2lfYnVmZmxlbihzcmIpIC0KKwkJCQkJc2NzaV9nZXRfcmVzaWQoc3JiKSA8IHNyYi0+dW5kZXJmbG93KQorCQlzcmItPnJlc3VsdCA9IChESURfRVJST1IgPDwgMTYpOworCQkvKiB2MDIgfCAoU1VHR0VTVF9SRVRSWSA8PCAyNCk7ICovCiAKIAlyZXR1cm47CiAKQEAgLTQ3Miw4ICs0OTIsNyBAQAogCXJlc3VsdCA9IHVzYl9zdG9yX3BvcnRfcmVzZXQodXMpOwogCW11dGV4X2xvY2soJnVzLT5kZXZfbXV0ZXgpOwogCi0JaWYgKHJlc3VsdCA8IDApCi0JeworCWlmIChyZXN1bHQgPCAwKSB7CiAJCXNjc2lfbG9jayh1c190b19ob3N0KHVzKSk7CiAJCXVzYl9zdG9yX3JlcG9ydF9kZXZpY2VfcmVzZXQodXMpOwogCQlzY3NpX3VubG9jayh1c190b19ob3N0KHVzKSk7CkBAIC00ODIsNTIgKzUwMSw2MyBAQAogCWNsZWFyX2JpdChVU19GTElEWF9SRVNFVFRJTkcsICZ1cy0+ZGZsYWdzKTsKIH0KIAotLy8tLS0tLSBCdWlsZFNlbnNlQnVmZmVyKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLyoKKyAqIEJ1aWxkU2Vuc2VCdWZmZXIoKQorICovCiB2b2lkIEJ1aWxkU2Vuc2VCdWZmZXIoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBpbnQgU3JiU3RhdHVzKQogewotICAgIEJZVEUgICAgKmJ1ZiA9IHNyYi0+c2Vuc2VfYnVmZmVyOwotICAgIEJZVEUgICAgYXNjOworCUJZVEUgICAgKmJ1ZiA9IHNyYi0+c2Vuc2VfYnVmZmVyOworCUJZVEUgICAgYXNjOwogCi0gICAgcHJpbnRrKCJ0cmFuc3BvcnQgLS0tIEJ1aWxkU2Vuc2VCdWZmZXJcbiIpOwotICAgIHN3aXRjaCAoU3JiU3RhdHVzKQotICAgIHsKLSAgICAgICAgY2FzZSBTU19OT1RfUkVBRFk6ICAgICAgICBhc2MgPSAweDNhOyAgICBicmVhazsgIC8vIHNlbnNlIGtleSA9IDB4MDIKLSAgICAgICAgY2FzZSBTU19NRURJVU1fRVJSOiAgICAgICBhc2MgPSAweDBjOyAgICBicmVhazsgIC8vIHNlbnNlIGtleSA9IDB4MDMKLSAgICAgICAgY2FzZSBTU19JTExFR0FMX1JFUVVFU1Q6ICBhc2MgPSAweDIwOyAgICBicmVhazsgIC8vIHNlbnNlIGtleSA9IDB4MDUKLSAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICBhc2MgPSAweDAwOyAgICBicmVhazsgIC8vID8/Ci0gICAgfQorCXByX2luZm8oInRyYW5zcG9ydCAtLS0gQnVpbGRTZW5zZUJ1ZmZlclxuIik7CisJc3dpdGNoIChTcmJTdGF0dXMpIHsKKwljYXNlIFNTX05PVF9SRUFEWToKKwkJYXNjID0gMHgzYTsKKwkJYnJlYWs7ICAvKiAgc2Vuc2Uga2V5ID0gMHgwMiAqLworCWNhc2UgU1NfTUVESVVNX0VSUjoKKwkJYXNjID0gMHgwYzsKKwkJYnJlYWs7ICAvKiAgc2Vuc2Uga2V5ID0gMHgwMyAqLworCWNhc2UgU1NfSUxMRUdBTF9SRVFVRVNUOgorCQlhc2MgPSAweDIwOworCQlicmVhazsgIC8qICBzZW5zZSBrZXkgPSAweDA1ICovCisJZGVmYXVsdDoKKwkJYXNjID0gMHgwMDsKKwkJYnJlYWs7ICAvKiAgPz8gKi8KKwl9CiAKLSAgICBtZW1zZXQoYnVmLCAwLCAxOCk7Ci0gICAgYnVmWzB4MDBdID0gMHhmMDsKLSAgICBidWZbMHgwMl0gPSBTcmJTdGF0dXM7Ci0gICAgYnVmWzB4MDddID0gMHgwYjsKLSAgICBidWZbMHgwY10gPSBhc2M7CisJbWVtc2V0KGJ1ZiwgMCwgMTgpOworCWJ1ZlsweDAwXSA9IDB4ZjA7CisJYnVmWzB4MDJdID0gU3JiU3RhdHVzOworCWJ1ZlsweDA3XSA9IDB4MGI7CisJYnVmWzB4MGNdID0gYXNjOwogfQogCi0vLy0tLS0tIHVzYl9zdG9yX3N0b3BfdHJhbnNwb3J0KCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgorICogdXNiX3N0b3Jfc3RvcF90cmFuc3BvcnQoKQorICovCiB2b2lkIHVzYl9zdG9yX3N0b3BfdHJhbnNwb3J0KHN0cnVjdCB1c19kYXRhICp1cykKIHsKLQkvL3ByaW50aygidHJhbnNwb3J0IC0tLSB1c2Jfc3Rvcl9zdG9wX3RyYW5zcG9ydFxuIik7CisJLyogcHJfaW5mbygidHJhbnNwb3J0IC0tLSB1c2Jfc3Rvcl9zdG9wX3RyYW5zcG9ydFxuIik7ICovCiAKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFVTX0ZMSURYX1VSQl9BQ1RJVkUsICZ1cy0+ZGZsYWdzKSkKLQl7Ci0JCS8vcHJpbnRrKCItLSBjYW5jZWxsaW5nIFVSQlxuIik7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChVU19GTElEWF9VUkJfQUNUSVZFLCAmdXMtPmRmbGFncykpIHsKKwkJLyogcHJfaW5mbygiLS0gY2FuY2VsbGluZyBVUkJcbiIpOyAqLwogCQl1c2JfdW5saW5rX3VyYih1cy0+Y3VycmVudF91cmIpOwogCX0KIAotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoVVNfRkxJRFhfU0dfQUNUSVZFLCAmdXMtPmRmbGFncykpCi0JewotCQkvL3ByaW50aygiLS0gY2FuY2VsbGluZyBzZyByZXF1ZXN0XG4iKTsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFVTX0ZMSURYX1NHX0FDVElWRSwgJnVzLT5kZmxhZ3MpKSB7CisJCS8qIHByX2luZm8oIi0tIGNhbmNlbGxpbmcgc2cgcmVxdWVzdFxuIik7ICovCiAJCXVzYl9zZ19jYW5jZWwoJnVzLT5jdXJyZW50X3NnKTsKIAl9CiB9CiAKLS8vLS0tLS0gdXNiX3N0b3JfQnVsa19tYXhfbHVuKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgorICogdXNiX3N0b3JfQnVsa19tYXhfbHVuKCkKKyAqLwogaW50IHVzYl9zdG9yX0J1bGtfbWF4X2x1bihzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJaW50IHJlc3VsdDsKIAotCS8vcHJpbnRrKCJ0cmFuc3BvcnQgLS0tIHVzYl9zdG9yX0J1bGtfbWF4X2x1blxuIik7CisJLyogcHJfaW5mbygidHJhbnNwb3J0IC0tLSB1c2Jfc3Rvcl9CdWxrX21heF9sdW5cbiIpOyAqLwogCS8qIGlzc3VlIHRoZSBjb21tYW5kICovCiAJdXMtPmlvYnVmWzBdID0gMDsKIAlyZXN1bHQgPSB1c2Jfc3Rvcl9jb250cm9sX21zZyh1cywgdXMtPnJlY3ZfY3RybF9waXBlLApAQCAtNTM2LDcgKzU2Niw4IEBACiAJCQkJIFVTQl9SRUNJUF9JTlRFUkZBQ0UsCiAJCQkJIDAsIHVzLT5pZm51bSwgdXMtPmlvYnVmLCAxLCBIWik7CiAKLQkvL3ByaW50aygiR2V0TWF4TFVOIGNvbW1hbmQgcmVzdWx0IGlzICVkLCBkYXRhIGlzICVkXG4iLCByZXN1bHQsIHVzLT5pb2J1ZlswXSk7CisJLyogcHJfaW5mbygiR2V0TWF4TFVOIGNvbW1hbmQgcmVzdWx0IGlzICVkLCBkYXRhIGlzICVkXG4iLAorCQkJCQkJcmVzdWx0LCB1cy0+aW9idWZbMF0pOyAqLwogCiAJLyogaWYgd2UgaGF2ZSBhIHN1Y2Nlc3NmdWwgcmVxdWVzdCwgcmV0dXJuIHRoZSByZXN1bHQgKi8KIAlpZiAocmVzdWx0ID4gMCkKQEAgLTU0NSw3ICs1NzYsOSBAQAogCXJldHVybiAwOwogfQogCi0vLy0tLS0tIHVzYl9zdG9yX0J1bGtfdHJhbnNwb3J0KCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgorICogdXNiX3N0b3JfQnVsa190cmFuc3BvcnQoKQorICovCiBpbnQgdXNiX3N0b3JfQnVsa190cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJc3RydWN0IGJ1bGtfY2Jfd3JhcCAqYmNiID0gKHN0cnVjdCBidWxrX2NiX3dyYXAgKikgdXMtPmlvYnVmOwpAQCAtNTU3LDEwICs1OTAsOSBAQAogCXVuc2lnbmVkIGludCBjc3dsZW47CiAJdW5zaWduZWQgaW50IGNid2xlbiA9IFVTX0JVTEtfQ0JfV1JBUF9MRU47CiAKLQkvL3ByaW50aygidHJhbnNwb3J0IC0tLSB1c2Jfc3Rvcl9CdWxrX3RyYW5zcG9ydFxuIik7CisJLyogcHJfaW5mbygidHJhbnNwb3J0IC0tLSB1c2Jfc3Rvcl9CdWxrX3RyYW5zcG9ydFxuIik7ICovCiAJLyogVGFrZSBjYXJlIG9mIEJVTEszMiBkZXZpY2VzOyBzZXQgZXh0cmEgYnl0ZSB0byAwICovCi0JaWYgKHVubGlrZWx5KHVzLT5mZmxhZ3MgJiBVU19GTF9CVUxLMzIpKQotCXsKKwlpZiAodW5saWtlbHkodXMtPmZmbGFncyAmIFVTX0ZMX0JVTEszMikpIHsKIAkJY2J3bGVuID0gMzI7CiAJCXVzLT5pb2J1ZlszMV0gPSAwOwogCX0KQEAgLTU3OSwyNyArNjExLDMyIEBACiAJbWVtc2V0KGJjYi0+Q0RCLCAwLCBzaXplb2YoYmNiLT5DREIpKTsKIAltZW1jcHkoYmNiLT5DREIsIHNyYi0+Y21uZCwgYmNiLT5MZW5ndGgpOwogCi0JLy8gc2VuZCBjb21tYW5kCisJLyogIHNlbmQgY29tbWFuZCAqLwogCS8qIHNlbmQgaXQgdG8gb3V0IGVuZHBvaW50ICovCi0JLypwcmludGsoIkJ1bGsgQ29tbWFuZCBTIDB4JXggVCAweCV4IEwgJWQgRiAlZCBUcmcgJWQgTFVOICVkIENMICVkXG4iLAorCS8qIHByX2luZm8oIkJ1bGsgQ29tbWFuZCBTIDB4JXggVCAweCV4IEwgJWQgRiAlZCBUcmcgJWQgTFVOICVkIENMICVkXG4iLAogCQkJbGUzMl90b19jcHUoYmNiLT5TaWduYXR1cmUpLCBiY2ItPlRhZywKIAkJCWxlMzJfdG9fY3B1KGJjYi0+RGF0YVRyYW5zZmVyTGVuZ3RoKSwgYmNiLT5GbGFncywKIAkJCShiY2ItPkx1biA+PiA0KSwgKGJjYi0+THVuICYgMHgwRiksCi0JCQliY2ItPkxlbmd0aCk7Ki8KLQlyZXN1bHQgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zih1cywgdXMtPnNlbmRfYnVsa19waXBlLCBiY2IsIGNid2xlbiwgTlVMTCk7Ci0JLy9wcmludGsoIkJ1bGsgY29tbWFuZCB0cmFuc2ZlciByZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CisJCQliY2ItPkxlbmd0aCk7ICovCisJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHVzLT5zZW5kX2J1bGtfcGlwZSwKKwkJCQkJCWJjYiwgY2J3bGVuLCBOVUxMKTsKKwkvKiBwcl9pbmZvKCJCdWxrIGNvbW1hbmQgdHJhbnNmZXIgcmVzdWx0PSVkXG4iLCByZXN1bHQpOyAqLwogCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwogCiAJaWYgKHVubGlrZWx5KHVzLT5mZmxhZ3MgJiBVU19GTF9HT19TTE9XKSkKIAkJdWRlbGF5KDEyNSk7CiAKLQkvLyBSL1cgZGF0YQotCWlmICh0cmFuc2Zlcl9sZW5ndGgpCi0JewotCQl1bnNpZ25lZCBpbnQgcGlwZSA9IHNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFID8gdXMtPnJlY3ZfYnVsa19waXBlIDogdXMtPnNlbmRfYnVsa19waXBlOworCS8qICBSL1cgZGF0YSAqLworCWlmICh0cmFuc2Zlcl9sZW5ndGgpIHsKKwkJdW5zaWduZWQgaW50IHBpcGU7CisJCWlmIChzcmItPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkKKwkJCXBpcGUgPSB1cy0+cmVjdl9idWxrX3BpcGU7CisJCWVsc2UKKwkJCXBpcGUgPSB1cy0+c2VuZF9idWxrX3BpcGU7CisKIAkJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa19zcmIodXMsIHBpcGUsIHNyYik7Ci0JCS8vcHJpbnRrKCJCdWxrIGRhdGEgdHJhbnNmZXIgcmVzdWx0IDB4JXhcbiIsIHJlc3VsdCk7CisJCS8qIHByX2luZm8oIkJ1bGsgZGF0YSB0cmFuc2ZlciByZXN1bHQgMHgleFxuIiwgcmVzdWx0KTsgKi8KIAkJaWYgKHJlc3VsdCA9PSBVU0JfU1RPUl9YRkVSX0VSUk9SKQogCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKIApAQCAtNjA4LDU1ICs2NDUsNTYgQEAKIAl9CiAKIAkvKiBnZXQgQ1NXIGZvciBkZXZpY2Ugc3RhdHVzICovCi0JLy9wcmludGsoIkF0dGVtcHRpbmcgdG8gZ2V0IENTVy4uLlxuIik7Ci0JcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHVzLT5yZWN2X2J1bGtfcGlwZSwgYmNzLCBVU19CVUxLX0NTX1dSQVBfTEVOLCAmY3N3bGVuKTsKKwkvKiBwcl9pbmZvKCJBdHRlbXB0aW5nIHRvIGdldCBDU1cuLi5cbiIpOyAqLworCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHVzLCB1cy0+cmVjdl9idWxrX3BpcGUsIGJjcywKKwkJCQkJCVVTX0JVTEtfQ1NfV1JBUF9MRU4sICZjc3dsZW4pOwogCi0JaWYgKHJlc3VsdCA9PSBVU0JfU1RPUl9YRkVSX1NIT1JUICYmIGNzd2xlbiA9PSAwKQotCXsKLQkJLy9wcmludGsoIlJlY2VpdmVkIDAtbGVuZ3RoIENTVzsgcmV0cnlpbmcuLi5cbiIpOwotCQlyZXN1bHQgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zih1cywgdXMtPnJlY3ZfYnVsa19waXBlLCBiY3MsIFVTX0JVTEtfQ1NfV1JBUF9MRU4sICZjc3dsZW4pOworCWlmIChyZXN1bHQgPT0gVVNCX1NUT1JfWEZFUl9TSE9SVCAmJiBjc3dsZW4gPT0gMCkgeworCQkvKiBwcl9pbmZvKCJSZWNlaXZlZCAwLWxlbmd0aCBDU1c7IHJldHJ5aW5nLi4uXG4iKTsgKi8KKwkJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHVzLT5yZWN2X2J1bGtfcGlwZSwgYmNzLAorCQkJCQkJVVNfQlVMS19DU19XUkFQX0xFTiwgJmNzd2xlbik7CiAJfQogCiAJLyogZGlkIHRoZSBhdHRlbXB0IHRvIHJlYWQgdGhlIENTVyBmYWlsPyAqLwotCWlmIChyZXN1bHQgPT0gVVNCX1NUT1JfWEZFUl9TVEFMTEVEKQotCXsKKwlpZiAocmVzdWx0ID09IFVTQl9TVE9SX1hGRVJfU1RBTExFRCkgewogCQkvKiBnZXQgdGhlIHN0YXR1cyBhZ2FpbiAqLwotCQkvL3ByaW50aygiQXR0ZW1wdGluZyB0byBnZXQgQ1NXICgybmQgdHJ5KS4uLlxuIik7Ci0JCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHVzLCB1cy0+cmVjdl9idWxrX3BpcGUsIGJjcywgVVNfQlVMS19DU19XUkFQX0xFTiwgTlVMTCk7CisJCS8qIHByX2luZm8oIkF0dGVtcHRpbmcgdG8gZ2V0IENTVyAoMm5kIHRyeSkuLi5cbiIpOyAqLworCQlyZXN1bHQgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zih1cywgdXMtPnJlY3ZfYnVsa19waXBlLCBiY3MsCisJCQkJCQlVU19CVUxLX0NTX1dSQVBfTEVOLCBOVUxMKTsKIAl9CiAKIAkvKiBpZiB3ZSBzdGlsbCBoYXZlIGEgZmFpbHVyZSBhdCB0aGlzIHBvaW50LCB3ZSdyZSBpbiB0cm91YmxlICovCi0JLy9wcmludGsoIkJ1bGsgc3RhdHVzIHJlc3VsdCA9ICVkXG4iLCByZXN1bHQpOworCS8qIHByX2luZm8oIkJ1bGsgc3RhdHVzIHJlc3VsdCA9ICVkXG4iLCByZXN1bHQpOyAqLwogCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwogCiAJLyogY2hlY2sgYnVsayBzdGF0dXMgKi8KIAlyZXNpZHVlID0gbGUzMl90b19jcHUoYmNzLT5SZXNpZHVlKTsKLQkvL3ByaW50aygiQnVsayBTdGF0dXMgUyAweCV4IFQgMHgleCBSICV1IFN0YXQgMHgleFxuIiwgbGUzMl90b19jcHUoYmNzLT5TaWduYXR1cmUpLCBiY3MtPlRhZywgcmVzaWR1ZSwgYmNzLT5TdGF0dXMpOwotCWlmICghKGJjcy0+VGFnID09IHVzLT50YWcgfHwgKHVzLT5mZmxhZ3MgJiBVU19GTF9CVUxLX0lHTk9SRV9UQUcpKSB8fCBiY3MtPlN0YXR1cyA+IFVTX0JVTEtfU1RBVF9QSEFTRSkKLQl7Ci0JCS8vcHJpbnRrKCJCdWxrIGxvZ2ljYWwgZXJyb3JcbiIpOworCS8qIHByX2luZm8oIkJ1bGsgU3RhdHVzIFMgMHgleCBUIDB4JXggUiAldSBTdGF0IDB4JXhcbiIsCisJCQkJbGUzMl90b19jcHUoYmNzLT5TaWduYXR1cmUpLAorCQkJCWJjcy0+VGFnLCByZXNpZHVlLCBiY3MtPlN0YXR1cyk7ICovCisJaWYgKCEoYmNzLT5UYWcgPT0gdXMtPnRhZyB8fAorCQkodXMtPmZmbGFncyAmIFVTX0ZMX0JVTEtfSUdOT1JFX1RBRykpIHx8CisJCWJjcy0+U3RhdHVzID4gVVNfQlVMS19TVEFUX1BIQVNFKSB7CisJCS8qIHByX2luZm8oIkJ1bGsgbG9naWNhbCBlcnJvclxuIik7ICovCiAJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CiAJfQogCi0JaWYgKCF1cy0+YmNzX3NpZ25hdHVyZSkKLQl7CisJaWYgKCF1cy0+YmNzX3NpZ25hdHVyZSkgewogCQl1cy0+YmNzX3NpZ25hdHVyZSA9IGJjcy0+U2lnbmF0dXJlOwotCQkvL2lmICh1cy0+YmNzX3NpZ25hdHVyZSAhPSBjcHVfdG9fbGUzMihVU19CVUxLX0NTX1NJR04pKQotCQkvLwlwcmludGsoIkxlYXJudCBCQ1Mgc2lnbmF0dXJlIDB4JTA4WFxuIiwgbGUzMl90b19jcHUodXMtPmJjc19zaWduYXR1cmUpKTsKLQl9Ci0JZWxzZSBpZiAoYmNzLT5TaWduYXR1cmUgIT0gdXMtPmJjc19zaWduYXR1cmUpCi0JewotCQkvKnByaW50aygiU2lnbmF0dXJlIG1pc21hdGNoOiBnb3QgJTA4WCwgZXhwZWN0aW5nICUwOFhcbiIsCisJCS8qIGlmICh1cy0+YmNzX3NpZ25hdHVyZSAhPSBjcHVfdG9fbGUzMihVU19CVUxLX0NTX1NJR04pKSAqLworCQkvKiBwcl9pbmZvKCJMZWFybnQgQkNTIHNpZ25hdHVyZSAweCUwOFhcbiIsCisJCQkJbGUzMl90b19jcHUodXMtPmJjc19zaWduYXR1cmUpKTsgKi8KKwl9IGVsc2UgaWYgKGJjcy0+U2lnbmF0dXJlICE9IHVzLT5iY3Nfc2lnbmF0dXJlKSB7CisJCS8qIHByX2luZm8oIlNpZ25hdHVyZSBtaXNtYXRjaDogZ290ICUwOFgsIGV4cGVjdGluZyAlMDhYXG4iLAogCQkJICBsZTMyX3RvX2NwdShiY3MtPlNpZ25hdHVyZSksCi0JCQkgIGxlMzJfdG9fY3B1KHVzLT5iY3Nfc2lnbmF0dXJlKSk7Ki8KKwkJCSAgbGUzMl90b19jcHUodXMtPmJjc19zaWduYXR1cmUpKTsgKi8KIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKIAl9CiAKIAkvKiB0cnkgdG8gY29tcHV0ZSB0aGUgYWN0dWFsIHJlc2lkdWUsIGJhc2VkIG9uIGhvdyBtdWNoIGRhdGEKIAkgKiB3YXMgcmVhbGx5IHRyYW5zZmVycmVkIGFuZCB3aGF0IHRoZSBkZXZpY2UgdGVsbHMgdXMgKi8KLQlpZiAocmVzaWR1ZSAmJiAhKHVzLT5mZmxhZ3MgJiBVU19GTF9JR05PUkVfUkVTSURVRSkpCi0JeworCWlmIChyZXNpZHVlICYmICEodXMtPmZmbGFncyAmIFVTX0ZMX0lHTk9SRV9SRVNJRFVFKSkgewogCiAJCS8qIEhldXJpc3RpY2FsbHkgZGV0ZWN0IGRldmljZXMgdGhhdCBnZW5lcmF0ZSBib2d1cyByZXNpZHVlcwogCQkgKiBieSBzZWVpbmcgd2hhdCBoYXBwZW5zIHdpdGggSU5RVUlSWSBhbmQgUkVBRCBDQVBBQ0lUWQpAQCAtNjY3LDM0ICs3MDUsMzEgQEAKIAkJCQkJKChzcmItPmNtbmRbMF0gPT0gSU5RVUlSWSAmJgogCQkJCQkJdHJhbnNmZXJfbGVuZ3RoID09IDM2KSB8fAogCQkJCQkoc3JiLT5jbW5kWzBdID09IFJFQURfQ0FQQUNJVFkgJiYKLQkJCQkJCXRyYW5zZmVyX2xlbmd0aCA9PSA4KSkpCi0JCXsKKwkJCQkJCXRyYW5zZmVyX2xlbmd0aCA9PSA4KSkpIHsKIAkJCXVzLT5mZmxhZ3MgfD0gVVNfRkxfSUdOT1JFX1JFU0lEVUU7CiAKLQkJfQotCQllbHNlCi0JCXsKKwkJfSBlbHNlIHsKIAkJCXJlc2lkdWUgPSBtaW4ocmVzaWR1ZSwgdHJhbnNmZXJfbGVuZ3RoKTsKLQkJCXNjc2lfc2V0X3Jlc2lkKHNyYiwgbWF4KHNjc2lfZ2V0X3Jlc2lkKHNyYiksIChpbnQpIHJlc2lkdWUpKTsKKwkJCXNjc2lfc2V0X3Jlc2lkKHNyYiwgbWF4KHNjc2lfZ2V0X3Jlc2lkKHNyYiksCisJCQkJCQkJKGludCkgcmVzaWR1ZSkpOwogCQl9CiAJfQogCiAJLyogYmFzZWQgb24gdGhlIHN0YXR1cyBjb2RlLCB3ZSByZXBvcnQgZ29vZCBvciBiYWQgKi8KLQlzd2l0Y2ggKGJjcy0+U3RhdHVzKQotCXsKLQkJY2FzZSBVU19CVUxLX1NUQVRfT0s6Ci0JCQlpZiAoZmFrZV9zZW5zZSkKLQkJCXsKLQkJCQltZW1jcHkoc3JiLT5zZW5zZV9idWZmZXIsIHVzYl9zdG9yX3NlbnNlX2ludmFsaWRDREIsIHNpemVvZih1c2Jfc3Rvcl9zZW5zZV9pbnZhbGlkQ0RCKSk7Ci0JCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9OT19TRU5TRTsKLQkJCX0KLQkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwlzd2l0Y2ggKGJjcy0+U3RhdHVzKSB7CisJY2FzZSBVU19CVUxLX1NUQVRfT0s6CisJCWlmIChmYWtlX3NlbnNlKSB7CisJCQltZW1jcHkoc3JiLT5zZW5zZV9idWZmZXIsIHVzYl9zdG9yX3NlbnNlX2ludmFsaWRDREIsCisJCQkJCXNpemVvZih1c2Jfc3Rvcl9zZW5zZV9pbnZhbGlkQ0RCKSk7CisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX05PX1NFTlNFOworCQl9CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKIAotCQljYXNlIFVTX0JVTEtfU1RBVF9GQUlMOgotCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJY2FzZSBVU19CVUxLX1NUQVRfRkFJTDoKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CiAKLQkJY2FzZSBVU19CVUxLX1NUQVRfUEhBU0U6Ci0JCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCWNhc2UgVVNfQlVMS19TVEFUX1BIQVNFOgorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwogCX0KIAlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwogfQpAQCAtNzAyLDcgKzczNyw5IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFJlc2V0IHJvdXRpbmVzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vLy0tLS0tIHVzYl9zdG9yX3Jlc2V0X2NvbW1vbigpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLyoKKyAqIHVzYl9zdG9yX3Jlc2V0X2NvbW1vbigpCisgKi8KIHN0YXRpYyBpbnQgdXNiX3N0b3JfcmVzZXRfY29tbW9uKHN0cnVjdCB1c19kYXRhICp1cywKIAkJdTggcmVxdWVzdCwgdTggcmVxdWVzdHR5cGUsCiAJCXUxNiB2YWx1ZSwgdTE2IGluZGV4LCB2b2lkICpkYXRhLCB1MTYgc2l6ZSkKQEAgLTcxMCw2OSArNzQ3LDc1IEBACiAJaW50IHJlc3VsdDsKIAlpbnQgcmVzdWx0MjsKIAotCS8vcHJpbnRrKCJ0cmFuc3BvcnQgLS0tIHVzYl9zdG9yX3Jlc2V0X2NvbW1vblxuIik7Ci0JaWYgKHRlc3RfYml0KFVTX0ZMSURYX0RJU0NPTk5FQ1RJTkcsICZ1cy0+ZGZsYWdzKSkKLQl7Ci0JCS8vcHJpbnRrKCJObyByZXNldCBkdXJpbmcgZGlzY29ubmVjdFxuIik7CisJLyogcHJfaW5mbygidHJhbnNwb3J0IC0tLSB1c2Jfc3Rvcl9yZXNldF9jb21tb25cbiIpOyAqLworCWlmICh0ZXN0X2JpdChVU19GTElEWF9ESVNDT05ORUNUSU5HLCAmdXMtPmRmbGFncykpIHsKKwkJLyogcHJfaW5mbygiTm8gcmVzZXQgZHVyaW5nIGRpc2Nvbm5lY3RcbiIpOyAqLwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlyZXN1bHQgPSB1c2Jfc3Rvcl9jb250cm9sX21zZyh1cywgdXMtPnNlbmRfY3RybF9waXBlLCByZXF1ZXN0LCByZXF1ZXN0dHlwZSwgdmFsdWUsIGluZGV4LCBkYXRhLCBzaXplLAk1KkhaKTsKLQlpZiAocmVzdWx0IDwgMCkKLQl7Ci0JCS8vcHJpbnRrKCJTb2Z0IHJlc2V0IGZhaWxlZDogJWRcbiIsIHJlc3VsdCk7CisJcmVzdWx0ID0gdXNiX3N0b3JfY29udHJvbF9tc2codXMsIHVzLT5zZW5kX2N0cmxfcGlwZSwKKwkJCXJlcXVlc3QsIHJlcXVlc3R0eXBlLCB2YWx1ZSwgaW5kZXgsIGRhdGEsIHNpemUsCTUqSFopOworCisJaWYgKHJlc3VsdCA8IDApIHsKKwkJLyogcHJfaW5mbygiU29mdCByZXNldCBmYWlsZWQ6ICVkXG4iLCByZXN1bHQpOyAqLwogCQlyZXR1cm4gcmVzdWx0OwogCX0KIAotCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHVzLT5kZWxheV93YWl0LCB0ZXN0X2JpdChVU19GTElEWF9ESVNDT05ORUNUSU5HLCAmdXMtPmRmbGFncyksCUhaKjYpOwotCWlmICh0ZXN0X2JpdChVU19GTElEWF9ESVNDT05ORUNUSU5HLCAmdXMtPmRmbGFncykpCi0JewotCQkvL3ByaW50aygiUmVzZXQgaW50ZXJydXB0ZWQgYnkgZGlzY29ubmVjdFxuIik7CisJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQodXMtPmRlbGF5X3dhaXQsCisJCQl0ZXN0X2JpdChVU19GTElEWF9ESVNDT05ORUNUSU5HLCAmdXMtPmRmbGFncyksCUhaKjYpOworCisJaWYgKHRlc3RfYml0KFVTX0ZMSURYX0RJU0NPTk5FQ1RJTkcsICZ1cy0+ZGZsYWdzKSkgeworCQkvKiBwcl9pbmZvKCJSZXNldCBpbnRlcnJ1cHRlZCBieSBkaXNjb25uZWN0XG4iKTsgKi8KIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JLy9wcmludGsoIlNvZnQgcmVzZXQ6IGNsZWFyaW5nIGJ1bGstaW4gZW5kcG9pbnQgaGFsdFxuIik7CisJLyogcHJfaW5mbygiU29mdCByZXNldDogY2xlYXJpbmcgYnVsay1pbiBlbmRwb2ludCBoYWx0XG4iKTsgKi8KIAlyZXN1bHQgPSB1c2Jfc3Rvcl9jbGVhcl9oYWx0KHVzLCB1cy0+cmVjdl9idWxrX3BpcGUpOwogCi0JLy9wcmludGsoIlNvZnQgcmVzZXQ6IGNsZWFyaW5nIGJ1bGstb3V0IGVuZHBvaW50IGhhbHRcbiIpOworCS8qIHByX2luZm8oIlNvZnQgcmVzZXQ6IGNsZWFyaW5nIGJ1bGstb3V0IGVuZHBvaW50IGhhbHRcbiIpOyAqLwogCXJlc3VsdDIgPSB1c2Jfc3Rvcl9jbGVhcl9oYWx0KHVzLCB1cy0+c2VuZF9idWxrX3BpcGUpOwogCiAJLyogcmV0dXJuIGEgcmVzdWx0IGNvZGUgYmFzZWQgb24gdGhlIHJlc3VsdCBvZiB0aGUgY2xlYXItaGFsdHMgKi8KIAlpZiAocmVzdWx0ID49IDApCiAJCXJlc3VsdCA9IHJlc3VsdDI7Ci0JLy9pZiAocmVzdWx0IDwgMCkKLQkvLwlwcmludGsoIlNvZnQgcmVzZXQgZmFpbGVkXG4iKTsKLQkvL2Vsc2UKLQkvLwlwcmludGsoIlNvZnQgcmVzZXQgZG9uZVxuIik7CisJLyogaWYgKHJlc3VsdCA8IDApICovCisJCS8qIHByX2luZm8oIlNvZnQgcmVzZXQgZmFpbGVkXG4iKTsgKi8KKwkvKiBlbHNlICovCisJCS8qIHByX2luZm8oIlNvZnQgcmVzZXQgZG9uZVxuIik7ICovCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotLy8tLS0tLSB1c2Jfc3Rvcl9CdWxrX3Jlc2V0KCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgorICogdXNiX3N0b3JfQnVsa19yZXNldCgpCisgKi8KIGludCB1c2Jfc3Rvcl9CdWxrX3Jlc2V0KHN0cnVjdCB1c19kYXRhICp1cykKIHsKLQkvL3ByaW50aygidHJhbnNwb3J0IC0tLSB1c2Jfc3Rvcl9CdWxrX3Jlc2V0XG4iKTsKKwkvKiBwcl9pbmZvKCJ0cmFuc3BvcnQgLS0tIHVzYl9zdG9yX0J1bGtfcmVzZXRcbiIpOyAqLwogCXJldHVybiB1c2Jfc3Rvcl9yZXNldF9jb21tb24odXMsIFVTX0JVTEtfUkVTRVRfUkVRVUVTVCwKIAkJCQkgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAogCQkJCSAwLCB1cy0+aWZudW0sIE5VTEwsIDApOwogfQogCi0vLy0tLS0tIHVzYl9zdG9yX3BvcnRfcmVzZXQoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qCisgKiB1c2Jfc3Rvcl9wb3J0X3Jlc2V0KCkKKyAqLwogaW50IHVzYl9zdG9yX3BvcnRfcmVzZXQoc3RydWN0IHVzX2RhdGEgKnVzKQogewogCWludCByZXN1bHQ7CiAKLQkvL3ByaW50aygidHJhbnNwb3J0IC0tLSB1c2Jfc3Rvcl9wb3J0X3Jlc2V0XG4iKTsKKwkvKiBwcl9pbmZvKCJ0cmFuc3BvcnQgLS0tIHVzYl9zdG9yX3BvcnRfcmVzZXRcbiIpOyAqLwogCXJlc3VsdCA9IHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQodXMtPnB1c2JfZGV2LCB1cy0+cHVzYl9pbnRmKTsKIAlpZiAocmVzdWx0IDwgMCkKLQkJcHJpbnRrKCJ1bmFibGUgdG8gbG9jayBkZXZpY2UgZm9yIHJlc2V0OiAlZFxuIiwgcmVzdWx0KTsKKwkJcHJfaW5mbygidW5hYmxlIHRvIGxvY2sgZGV2aWNlIGZvciByZXNldDogJWRcbiIsIHJlc3VsdCk7CiAJZWxzZSB7CiAJCS8qIFdlcmUgd2UgZGlzY29ubmVjdGVkIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBsb2NrPyAqLwogCQlpZiAodGVzdF9iaXQoVVNfRkxJRFhfRElTQ09OTkVDVElORywgJnVzLT5kZmxhZ3MpKSB7CiAJCQlyZXN1bHQgPSAtRUlPOwotCQkJLy9wcmludGsoIk5vIHJlc2V0IGR1cmluZyBkaXNjb25uZWN0XG4iKTsKKwkJCS8qIHByX2luZm8oIk5vIHJlc2V0IGR1cmluZyBkaXNjb25uZWN0XG4iKTsgKi8KIAkJfSBlbHNlIHsKIAkJCXJlc3VsdCA9IHVzYl9yZXNldF9kZXZpY2UodXMtPnB1c2JfZGV2KTsKLQkJCS8vcHJpbnRrKCJ1c2JfcmVzZXRfY29tcG9zaXRlX2RldmljZSByZXR1cm5zICVkXG4iLCByZXN1bHQpOworCQkJLyogcHJfaW5mbygidXNiX3Jlc2V0X2NvbXBvc2l0ZV9kZXZpY2UgcmV0dXJucyAlZFxuIiwKKwkJCQkJCQkJcmVzdWx0KTsgKi8KIAkJfQogCQl1c2JfdW5sb2NrX2RldmljZSh1cy0+cHVzYl9kZXYpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9rZXVjci90cmFuc3BvcnQuaCBiL2RyaXZlcnMvc3RhZ2luZy9rZXVjci90cmFuc3BvcnQuaAppbmRleCA1NjVkOThjLi43NTI5NjE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcva2V1Y3IvdHJhbnNwb3J0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2tldWNyL3RyYW5zcG9ydC5oCkBAIC04LDcgKzgsNyBAQAogLyogY29tbWFuZCBibG9jayB3cmFwcGVyICovCiBzdHJ1Y3QgYnVsa19jYl93cmFwIHsKIAlfX2xlMzIJU2lnbmF0dXJlOwkJCS8qIGNvbnRhaW5zICdVU0JDJyAqLwotCV9fdTMyCVRhZzsJCQkJCS8qIHVuaXF1ZSBwZXIgY29tbWFuZCBpZCAqLworCV9fdTMyCVRhZzsJCQkJLyogdW5pcXVlIHBlciBjb21tYW5kIGlkICovCiAJX19sZTMyCURhdGFUcmFuc2Zlckxlbmd0aDsJLyogc2l6ZSBvZiBkYXRhICovCiAJX191OAlGbGFnczsJCQkJLyogZGlyZWN0aW9uIGluIGJpdCAwICovCiAJX191OAlMdW47CQkJCQkvKiBMVU4gbm9ybWFsbHkgMCAqLwpAQCAtNDksOSArNDksOSBAQAogCiAvKiBUcmFuc3BvcnQgcmV0dXJuIGNvZGVzICovCiAjZGVmaW5lIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09ECTAJLyogVHJhbnNwb3J0IGdvb2QsIGNvbW1hbmQgZ29vZAkqLwotI2RlZmluZSBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVECTEJLyogVHJhbnNwb3J0IGdvb2QsIGNvbW1hbmQgZmFpbGVkICAgKi8KLSNkZWZpbmUgVVNCX1NUT1JfVFJBTlNQT1JUX05PX1NFTlNFCTIJLyogQ29tbWFuZCBmYWlsZWQsIG5vIGF1dG8tc2Vuc2UgICAgKi8KLSNkZWZpbmUgVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SCTMJLyogVHJhbnNwb3J0IGJhZCAoaS5lLiBkZXZpY2UgZGVhZCkgKi8KKyNkZWZpbmUgVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRCAxCS8qIFRyYW5zcG9ydCBnb29kLCBjb21tYW5kIGZhaWxlZCAqLworI2RlZmluZSBVU0JfU1RPUl9UUkFOU1BPUlRfTk9fU0VOU0UgMgkvKiBDb21tYW5kIGZhaWxlZCwgbm8gYXV0by1zZW5zZSAqLworI2RlZmluZSBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1IgMwkvKiBUcmFuc3BvcnQgYmFkIChpLmUuIGRldmljZSBkZWFkKSAqLwogCiAvKgogICogV2UgdXNlZCB0byBoYXZlIFVTQl9TVE9SX1hGRVJfQUJPUlRFRCBhbmQgVVNCX1NUT1JfVFJBTlNQT1JUX0FCT1JURUQKQEAgLTY0LDExICs2NCwxMSBAQAogLyogQ0JJIGFjY2VwdCBkZXZpY2Ugc3BlY2lmaWMgY29tbWFuZCAqLwogI2RlZmluZSBVU19DQklfQURTQwkJMAogZXh0ZXJuIGludCB1c2Jfc3Rvcl9CdWxrX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICosIHN0cnVjdCB1c19kYXRhKik7Ci1leHRlcm4gaW50IHVzYl9zdG9yX0J1bGtfbWF4X2x1bihzdHJ1Y3QgdXNfZGF0YSopOwotZXh0ZXJuIGludCB1c2Jfc3Rvcl9CdWxrX3Jlc2V0KHN0cnVjdCB1c19kYXRhKik7CitleHRlcm4gaW50IHVzYl9zdG9yX0J1bGtfbWF4X2x1bihzdHJ1Y3QgdXNfZGF0YSAqKTsKK2V4dGVybiBpbnQgdXNiX3N0b3JfQnVsa19yZXNldChzdHJ1Y3QgdXNfZGF0YSAqKTsKIGV4dGVybiB2b2lkIHVzYl9zdG9yX3ByaW50X2NtZChzdHJ1Y3Qgc2NzaV9jbW5kICopOwogZXh0ZXJuIHZvaWQgdXNiX3N0b3JfaW52b2tlX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICosIHN0cnVjdCB1c19kYXRhKik7Ci1leHRlcm4gdm9pZCB1c2Jfc3Rvcl9zdG9wX3RyYW5zcG9ydChzdHJ1Y3QgdXNfZGF0YSopOworZXh0ZXJuIHZvaWQgdXNiX3N0b3Jfc3RvcF90cmFuc3BvcnQoc3RydWN0IHVzX2RhdGEgKik7CiBleHRlcm4gaW50IHVzYl9zdG9yX2NvbnRyb2xfbXNnKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgaW50IHBpcGUsCiAJCXU4IHJlcXVlc3QsIHU4IHJlcXVlc3R0eXBlLCB1MTYgdmFsdWUsIHUxNiBpbmRleCwKIAkJdm9pZCAqZGF0YSwgdTE2IHNpemUsIGludCB0aW1lb3V0KTsKQEAgLTc3LDIzICs3NywyNiBAQAogCQl2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW5ndGgsIHVuc2lnbmVkIGludCAqYWN0X2xlbik7CiBleHRlcm4gaW50IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfc2coc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgcGlwZSwKIAkJdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLCBpbnQgdXNlX3NnLCBpbnQgKnJlc2lkdWFsKTsKLWV4dGVybiBpbnQgdXNiX3N0b3JfYnVsa19zcmIoc3RydWN0IHVzX2RhdGEqIHVzLCB1bnNpZ25lZCBpbnQgcGlwZSwKLQkJc3RydWN0IHNjc2lfY21uZCogc3JiKTsKK2V4dGVybiBpbnQgdXNiX3N0b3JfYnVsa19zcmIoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgcGlwZSwKKwkJc3RydWN0IHNjc2lfY21uZCAqc3JiKTsKIGV4dGVybiBpbnQgdXNiX3N0b3JfcG9ydF9yZXNldChzdHJ1Y3QgdXNfZGF0YSAqdXMpOwogCiAvKiBQcm90b2NvbCBoYW5kbGluZyByb3V0aW5lcyAqLwogZW51bSB4ZmVyX2J1Zl9kaXIJe1RPX1hGRVJfQlVGLCBGUk9NX1hGRVJfQlVGfTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgdXNiX3N0b3JfYWNjZXNzX3hmZXJfYnVmKHN0cnVjdCB1c19kYXRhKiwgdW5zaWduZWQgY2hhciAqYnVmZmVyLAotCXVuc2lnbmVkIGludCBidWZsZW4sIHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHNjYXR0ZXJsaXN0ICoqLAotCXVuc2lnbmVkIGludCAqb2Zmc2V0LCBlbnVtIHhmZXJfYnVmX2RpciBkaXIpOwotZXh0ZXJuIHZvaWQgdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKHN0cnVjdCB1c19kYXRhKiwgdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgYnVmbGVuLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsCitleHRlcm4gdW5zaWduZWQgaW50IHVzYl9zdG9yX2FjY2Vzc194ZmVyX2J1ZihzdHJ1Y3QgdXNfZGF0YSosCisJdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgYnVmbGVuLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsCisJc3RydWN0IHNjYXR0ZXJsaXN0ICoqLCB1bnNpZ25lZCBpbnQgKm9mZnNldCwgZW51bSB4ZmVyX2J1Zl9kaXIgZGlyKTsKK2V4dGVybiB2b2lkIHVzYl9zdG9yX3NldF94ZmVyX2J1ZihzdHJ1Y3QgdXNfZGF0YSosIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwKKwl1bnNpZ25lZCBpbnQgYnVmbGVuLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsCiAJdW5zaWduZWQgaW50IGRpcik7CiAKLS8vIEVORSBzY3NpIGZ1bmN0aW9uCi1leHRlcm4gdm9pZCBFTkVfc3Rvcl9pbnZva2VfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHVzX2RhdGEqKTsKLWV4dGVybiBpbnQgRU5FX0luaXRNZWRpYShzdHJ1Y3QgdXNfZGF0YSopOwotZXh0ZXJuIGludCBFTkVfTVNJbml0KHN0cnVjdCB1c19kYXRhKik7Ci1leHRlcm4gaW50IEVORV9TTUluaXQoc3RydWN0IHVzX2RhdGEqKTsKKy8qCisgKiBFTkUgc2NzaSBmdW5jdGlvbgorICovCitleHRlcm4gdm9pZCBFTkVfc3Rvcl9pbnZva2VfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHVzX2RhdGEgKik7CitleHRlcm4gaW50IEVORV9Jbml0TWVkaWEoc3RydWN0IHVzX2RhdGEgKik7CitleHRlcm4gaW50IEVORV9NU0luaXQoc3RydWN0IHVzX2RhdGEgKik7CitleHRlcm4gaW50IEVORV9TTUluaXQoc3RydWN0IHVzX2RhdGEgKik7CiBleHRlcm4gaW50IEVORV9TZW5kU2NzaUNtZChzdHJ1Y3QgdXNfZGF0YSosIEJZVEUsIHZvaWQqLCBpbnQpOwogZXh0ZXJuIGludCBFTkVfTG9hZEJpbkNvZGUoc3RydWN0IHVzX2RhdGEqLCBCWVRFKTsKIGV4dGVybiBpbnQgRU5FX1JlYWRfQllURShzdHJ1Y3QgdXNfZGF0YSosIFdPUkQgaW5kZXgsIHZvaWQgKmJ1Zik7CkBAIC0xMDEsNDEgKzEwNCw1NCBAQAogZXh0ZXJuIGludCBFTkVfV3JpdGVfRGF0YShzdHJ1Y3QgdXNfZGF0YSosIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbmd0aCk7CiBleHRlcm4gdm9pZCBCdWlsZFNlbnNlQnVmZmVyKHN0cnVjdCBzY3NpX2NtbmQgKiwgaW50KTsKIAotLy8gRU5FIHNjc2kgZnVuY3Rpb24KKy8qCisgKiBFTkUgc2NzaSBmdW5jdGlvbgorICovCiBleHRlcm4gaW50IE1TX1NDU0lJcnAoc3RydWN0IHVzX2RhdGEgKnVzLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIpOwogZXh0ZXJuIGludCBTTV9TQ1NJSXJwKHN0cnVjdCB1c19kYXRhICp1cywgc3RydWN0IHNjc2lfY21uZCAqc3JiKTsKIAotLy8gRU5FIE1TIGZ1bmN0aW9uCi1leHRlcm4gaW50IAlNU19DYXJkSW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpOworLyoKKyAqIEVORSBNUyBmdW5jdGlvbgorICovCitleHRlcm4gaW50CU1TX0NhcmRJbml0KHN0cnVjdCB1c19kYXRhICp1cyk7CiBleHRlcm4gdm9pZAlNU19MaWJGcmVlQWxsb2NhdGVkQXJlYShzdHJ1Y3QgdXNfZGF0YSAqdXMpOwogZXh0ZXJuIHZvaWQJTVNfTGliRnJlZVdyaXRlQnVmKHN0cnVjdCB1c19kYXRhICp1cyk7CiBleHRlcm4gaW50CU1TX0xpYkZyZWVMb2dpY2FsTWFwKHN0cnVjdCB1c19kYXRhICp1cyk7Ci1leHRlcm4gaW50CU1TX0xpYkZvcmNlU2V0TG9naWNhbFBhaXIoc3RydWN0IHVzX2RhdGEgKnVzLCBXT1JEIGxvZ2JsaywgV09SRCBwaHlibGspOwotZXh0ZXJuIGludAlNU19SZWFkZXJSZWFkUGFnZShzdHJ1Y3QgdXNfZGF0YSAqdXMsIERXT1JEIFBoeUJsb2NrQWRkciwgQllURSBQYWdlTnVtLCBEV09SRCAqUGFnZUJ1ZiwgTVNfTGliVHlwZUV4dGRhdCAqRXh0cmFEYXQpOwotZXh0ZXJuIGludAlNU19SZWFkZXJDb3B5QmxvY2soc3RydWN0IHVzX2RhdGEgKnVzLCBXT1JEIG9sZHBoeSwgV09SRCBuZXdwaHksIFdPUkQgUGh5QmxvY2tBZGRyLCBCWVRFIFBhZ2VOdW0sIFBCWVRFIGJ1ZiwgV09SRCBsZW4pOworZXh0ZXJuIGludAlNU19MaWJGb3JjZVNldExvZ2ljYWxQYWlyKHN0cnVjdCB1c19kYXRhICp1cywgV09SRCBsb2dibGssCisJCQkJCQkJCVdPUkQgcGh5YmxrKTsKK2V4dGVybiBpbnQJTVNfUmVhZGVyUmVhZFBhZ2Uoc3RydWN0IHVzX2RhdGEgKnVzLCBEV09SRCBQaHlCbG9ja0FkZHIsCisJCQkJCUJZVEUgUGFnZU51bSwgRFdPUkQgKlBhZ2VCdWYsCisJCQkJCU1TX0xpYlR5cGVFeHRkYXQgKkV4dHJhRGF0KTsKK2V4dGVybiBpbnQJTVNfUmVhZGVyQ29weUJsb2NrKHN0cnVjdCB1c19kYXRhICp1cywgV09SRCBvbGRwaHksCisJCQkJCVdPUkQgbmV3cGh5LCBXT1JEIFBoeUJsb2NrQWRkciwKKwkJCQkJQllURSBQYWdlTnVtLCBQQllURSBidWYsIFdPUkQgbGVuKTsKIGV4dGVybiBpbnQJTVNfUmVhZGVyRXJhc2VCbG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIERXT1JEIFBoeUJsb2NrQWRkcik7Ci1leHRlcm4gaW50CU1TX0xpYlByb2Nlc3NCb290QmxvY2soc3RydWN0IHVzX2RhdGEgKnVzLCBXT1JEIFBoeUJsb2NrLCBCWVRFICpQYWdlRGF0YSk7CitleHRlcm4gaW50CU1TX0xpYlByb2Nlc3NCb290QmxvY2soc3RydWN0IHVzX2RhdGEgKnVzLCBXT1JEIFBoeUJsb2NrLAorCQkJCQkJCUJZVEUgKlBhZ2VEYXRhKTsKIGV4dGVybiBpbnQJTVNfTGliQWxsb2NMb2dpY2FsTWFwKHN0cnVjdCB1c19kYXRhICp1cyk7CiBleHRlcm4gaW50CU1TX0xpYlNldEJvb3RCbG9ja01hcmsoc3RydWN0IHVzX2RhdGEgKnVzLCBXT1JEIHBoeWJsayk7Ci1leHRlcm4gaW50CU1TX0xpYlNldExvZ2ljYWxCbG9ja01hcmsoc3RydWN0IHVzX2RhdGEgKnVzLCBXT1JEIHBoeWJsaywgV09SRCBtYXJrKTsKK2V4dGVybiBpbnQJTVNfTGliU2V0TG9naWNhbEJsb2NrTWFyayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIFdPUkQgcGh5YmxrLAorCQkJCQkJCQlXT1JEIG1hcmspOwogZXh0ZXJuIGludAlNU19MaWJTZXRJbml0aWFsRXJyb3JCbG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIFdPUkQgcGh5YmxrKTsKIGV4dGVybiBpbnQJTVNfTGliU2NhbkxvZ2ljYWxCbG9ja051bWJlcihzdHJ1Y3QgdXNfZGF0YSAqdXMsIFdPUkQgcGh5YmxrKTsKIGV4dGVybiBpbnQJTVNfTGliQWxsb2NXcml0ZUJ1ZihzdHJ1Y3QgdXNfZGF0YSAqdXMpOwogdm9pZAkJTVNfTGliQ2xlYXJXcml0ZUJ1ZihzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotdm9pZAkJTVNfTGliUGh5MkxvZ1JhbmdlKFdPUkQgUGh5QmxvY2ssIFdPUkQgKkxvZ1N0YXJ0LCBXT1JEICpMb2dFbmRlKTsKLWV4dGVybiBpbnQJTVNfTGliUmVhZEV4dHJhKHN0cnVjdCB1c19kYXRhICp1cywgRFdPUkQgUGh5QmxvY2ssIEJZVEUgUGFnZU51bSwgTVNfTGliVHlwZUV4dGRhdCAqRXh0cmFEYXQpOwotZXh0ZXJuIGludAlNU19MaWJSZWFkRXh0cmFCbG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIERXT1JEIFBoeUJsb2NrLCBCWVRFIFBhZ2VOdW0sIEJZVEUgYmxlbiwgdm9pZCAqYnVmKTsKK3ZvaWQJCU1TX0xpYlBoeTJMb2dSYW5nZShXT1JEIFBoeUJsb2NrLCBXT1JEICpMb2dTdGFydCwKKwkJCQkJCQlXT1JEICpMb2dFbmRlKTsKK2V4dGVybiBpbnQJTVNfTGliUmVhZEV4dHJhKHN0cnVjdCB1c19kYXRhICp1cywgRFdPUkQgUGh5QmxvY2ssCisJCQkJQllURSBQYWdlTnVtLCBNU19MaWJUeXBlRXh0ZGF0ICpFeHRyYURhdCk7CitleHRlcm4gaW50CU1TX0xpYlJlYWRFeHRyYUJsb2NrKHN0cnVjdCB1c19kYXRhICp1cywgRFdPUkQgUGh5QmxvY2ssCisJCQkJCUJZVEUgUGFnZU51bSwgQllURSBibGVuLCB2b2lkICpidWYpOwogZXh0ZXJuIGludAlNU19MaWJTZXRBY3F1aXJlZEVycm9yQmxvY2soc3RydWN0IHVzX2RhdGEgKnVzLCBXT1JEIHBoeWJsayk7CiBleHRlcm4gaW50CU1TX0xpYkVyYXNlUGh5QmxvY2soc3RydWN0IHVzX2RhdGEgKnVzLCBXT1JEIHBoeWJsayk7CiBleHRlcm4gaW50CU1TX0xpYkVycm9yUGh5QmxvY2soc3RydWN0IHVzX2RhdGEgKnVzLCBXT1JEIHBoeWJsayk7Ci1leHRlcm4gaW50CU1TX0xpYk92ZXJ3cml0ZUV4dHJhKHN0cnVjdCB1c19kYXRhICp1cywgRFdPUkQgUGh5QmxvY2tBZGRyLCBCWVRFIFBhZ2VOdW0sIEJZVEUgT3ZlcndyaXRlRmxhZyk7Ci1leHRlcm4gaW50CU1TX0xpYlNldExvZ2ljYWxQYWlyKHN0cnVjdCB1c19kYXRhICp1cywgV09SRCBsb2dibGssIFdPUkQgcGh5YmxrKTsKK2V4dGVybiBpbnQJTVNfTGliT3ZlcndyaXRlRXh0cmEoc3RydWN0IHVzX2RhdGEgKnVzLCBEV09SRCBQaHlCbG9ja0FkZHIsCisJCQkJCUJZVEUgUGFnZU51bSwgQllURSBPdmVyd3JpdGVGbGFnKTsKK2V4dGVybiBpbnQJTVNfTGliU2V0TG9naWNhbFBhaXIoc3RydWN0IHVzX2RhdGEgKnVzLAorCQkJCQlXT1JEIGxvZ2JsaywgV09SRCBwaHlibGspOwogZXh0ZXJuIGludAlNU19MaWJDaGVja0Rpc2FibGVCbG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIFdPUkQgUGh5QmxvY2spOwogZXh0ZXJuIGludAlNU19Db3VudEZyZWVCbG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIFdPUkQgUGh5QmxvY2spOwogZXh0ZXJuIGludAlNU19MaWJTZWFyY2hCbG9ja0Zyb21Mb2dpY2FsKHN0cnVjdCB1c19kYXRhICp1cywgV09SRCBsb2dibGspOwogZXh0ZXJuIGludAlNU19MaWJTZWFyY2hCbG9ja0Zyb21QaHlzaWNhbChzdHJ1Y3QgdXNfZGF0YSAqdXMsIFdPUkQgcGh5YmxrKTsKIAotLy8gRU5FIFNNIGZ1bmN0aW9uCi1leHRlcm4gaW50CVNNX0ZyZWVNZW0odm9pZCk7Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2tldWNyL3VzYi5jIGIvZHJpdmVycy9zdGFnaW5nL2tldWNyL3VzYi5jCmluZGV4IDhjMjMzMmUuLmQ4YzVjNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9rZXVjci91c2IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcva2V1Y3IvdXNiLmMKQEAgLTE0LDYgKzE0LDcgQEAKIAogI2luY2x1ZGUgInVzYi5oIgogI2luY2x1ZGUgInNjc2lnbHVlLmgiCisjaW5jbHVkZSAic21pbC5oIgogI2luY2x1ZGUgInRyYW5zcG9ydC5oIgogCiAvKiBTb21lIGluZm9ybWF0aW9uYWwgZGF0YSAqLwpAQCAtMzQsMTAgKzM1LDEwIEBACiAKICNpZmRlZiBDT05GSUdfUE0KIAotaW50IGV1Y3Jfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQorc3RhdGljIGludCBldWNyX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKIHsKIAlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSB1c2JfZ2V0X2ludGZkYXRhKGlmYWNlKTsKLQlwcmludGsoIi0tLSBldWNyX3N1c3BlbmQgLS0tXG4iKTsKKwlwcl9pbmZvKCItLS0gZXVjcl9zdXNwZW5kIC0tLVxuIik7CiAJLyogV2FpdCB1bnRpbCBubyBjb21tYW5kIGlzIHJ1bm5pbmcgKi8KIAltdXRleF9sb2NrKCZ1cy0+ZGV2X211dGV4KTsKIApAQCAtNTUsMTIgKzU2LDEyIEBACiB9CiAvL0VYUE9SVF9TWU1CT0xfR1BMKGV1Y3Jfc3VzcGVuZCk7CiAKLWludCBldWNyX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpCitzdGF0aWMgaW50IGV1Y3JfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKIHsKIAlCWVRFICAgIHRtcCA9IDA7CiAKIAlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSB1c2JfZ2V0X2ludGZkYXRhKGlmYWNlKTsKLQlwcmludGsoIi0tLSBldWNyX3Jlc3VtZS0tLVxuIik7CisJcHJfaW5mbygiLS0tIGV1Y3JfcmVzdW1lLS0tXG4iKTsKIAltdXRleF9sb2NrKCZ1cy0+ZGV2X211dGV4KTsKIAogCS8vVVNfREVCVUdQKCIlc1xuIiwgX19mdW5jX18pOwpAQCAtODAsMTIgKzgxLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAvL0VYUE9SVF9TWU1CT0xfR1BMKGV1Y3JfcmVzdW1lKTsKLWludCBldWNyX3Jlc2V0X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpCitzdGF0aWMgaW50IGV1Y3JfcmVzZXRfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKIHsKIAlCWVRFICAgIHRtcCA9IDA7CiAJc3RydWN0IHVzX2RhdGEgKnVzID0gdXNiX2dldF9pbnRmZGF0YShpZmFjZSk7CiAKLQlwcmludGsoIi0tLSBldWNyX3Jlc2V0X3Jlc3VtZS0tLVxuIik7CisJcHJfaW5mbygiLS0tIGV1Y3JfcmVzZXRfcmVzdW1lLS0tXG4iKTsKIAkvL1VTX0RFQlVHUCgiJXNcbiIsIF9fZnVuY19fKTsKIAogCS8qIFJlcG9ydCB0aGUgcmVzZXQgdG8gdGhlIFNDU0kgY29yZSAqLwpAQCAtMTE2LDcgKzExNyw3IEBACiB7CiAJc3RydWN0IHVzX2RhdGEgKnVzID0gdXNiX2dldF9pbnRmZGF0YShpZmFjZSk7CiAKLSAgICAgIHByaW50aygidXNiIC0tLSBldWNyX3ByZV9yZXNldFxuIik7CisJcHJfaW5mbygidXNiIC0tLSBldWNyX3ByZV9yZXNldFxuIik7CiAKIAkvKiBNYWtlIHN1cmUgbm8gY29tbWFuZCBydW5zIGR1cmluZyB0aGUgcmVzZXQgKi8KIAltdXRleF9sb2NrKCZ1cy0+ZGV2X211dGV4KTsKQEAgLTEyOCw3ICsxMjksNyBAQAogewogCXN0cnVjdCB1c19kYXRhICp1cyA9IHVzYl9nZXRfaW50ZmRhdGEoaWZhY2UpOwogCi0gICAgICBwcmludGsoInVzYiAtLS0gZXVjcl9wb3N0X3Jlc2V0XG4iKTsKKwlwcl9pbmZvKCJ1c2IgLS0tIGV1Y3JfcG9zdF9yZXNldFxuIik7CiAKIAkvKiBSZXBvcnQgdGhlIHJlc2V0IHRvIHRoZSBTQ1NJIGNvcmUgKi8KIAl1c2Jfc3Rvcl9yZXBvcnRfYnVzX3Jlc2V0KHVzKTsKQEAgLTE0MCw3ICsxNDEsNyBAQAogLy8tLS0tLSBmaWxsX2lucXVpcnlfcmVzcG9uc2UoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHZvaWQgZmlsbF9pbnF1aXJ5X3Jlc3BvbnNlKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IGRhdGFfbGVuKQogewotICAgICAgcHJpbnRrKCJ1c2IgLS0tIGZpbGxfaW5xdWlyeV9yZXNwb25zZVxuIik7CisJcHJfaW5mbygidXNiIC0tLSBmaWxsX2lucXVpcnlfcmVzcG9uc2VcbiIpOwogCWlmIChkYXRhX2xlbjwzNikgLy8gWW91IGxvc2UuCiAJCXJldHVybjsKIApAQCAtMTcxLDcgKzE3Miw3IEBACiAJc3RydWN0IHVzX2RhdGEgKnVzID0gKHN0cnVjdCB1c19kYXRhICopX191czsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gdXNfdG9faG9zdCh1cyk7CiAKLSAgICAgIHByaW50aygidXNiIC0tLSB1c2Jfc3Rvcl9jb250cm9sX3RocmVhZFxuIik7CisJcHJfaW5mbygidXNiIC0tLSB1c2Jfc3Rvcl9jb250cm9sX3RocmVhZFxuIik7CiAJZm9yKDs7KQogCXsKIAkJaWYgKHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmdXMtPmNtbmRfcmVhZHkpKQpAQCAtMjQyLDcgKzI0Myw3IEBACiAJCWVsc2UKIAkJewogU2tpcEZvckFib3J0OgotCQkJcHJpbnRrKCJzY3NpIGNvbW1hbmQgYWJvcnRlZFxuIik7CisJCQlwcl9pbmZvKCJzY3NpIGNvbW1hbmQgYWJvcnRlZFxuIik7CiAJCX0KIAogCQlpZiAodGVzdF9iaXQoVVNfRkxJRFhfVElNRURfT1VULCAmdXMtPmRmbGFncykpCkBAIC0yNzcsNyArMjc4LDcgQEAKIC8vLS0tLS0gYXNzb2NpYXRlX2RldigpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogc3RhdGljIGludCBhc3NvY2lhdGVfZGV2KHN0cnVjdCB1c19kYXRhICp1cywgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7Ci0gICAgICBwcmludGsoInVzYiAtLS0gYXNzb2NpYXRlX2RldlxuIik7CisJcHJfaW5mbygidXNiIC0tLSBhc3NvY2lhdGVfZGV2XG4iKTsKIAogCS8qIEZpbGwgaW4gdGhlIGRldmljZS1yZWxhdGVkIGZpZWxkcyAqLwogCXVzLT5wdXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CkBAIC0yOTEsMjEgKzI5MiwyMSBAQAogCXVzLT5jciA9IHVzYl9hbGxvY19jb2hlcmVudCh1cy0+cHVzYl9kZXYsIHNpemVvZigqdXMtPmNyKSwgR0ZQX0tFUk5FTCwgJnVzLT5jcl9kbWEpOwogCWlmICghdXMtPmNyKQogCXsKLQkJcHJpbnRrKCJ1c2JfY3RybHJlcXVlc3QgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlwcl9pbmZvKCJ1c2JfY3RybHJlcXVlc3QgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAl1cy0+aW9idWYgPSB1c2JfYWxsb2NfY29oZXJlbnQodXMtPnB1c2JfZGV2LCBVU19JT0JVRl9TSVpFLCBHRlBfS0VSTkVMLCAmdXMtPmlvYnVmX2RtYSk7CiAJaWYgKCF1cy0+aW9idWYpCiAJewotCQlwcmludGsoIkkvTyBidWZmZXIgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlwcl9pbmZvKCJJL08gYnVmZmVyIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJdXMtPnNlbnNlYnVmID0ga21hbGxvYyhVU19TRU5TRV9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXVzLT5zZW5zZWJ1ZikKIAl7Ci0JCXByaW50aygiU2Vuc2UgYnVmZmVyIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJcHJfaW5mbygiU2Vuc2UgYnVmZmVyIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXJldHVybiAwOwpAQCAtMzE3LDcgKzMxOCw3IEBACiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHVzLT5wdXNiX2RldjsKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICppZGVzYyA9ICZ1cy0+cHVzYl9pbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYzsKIAotICAgICAgcHJpbnRrKCJ1c2IgLS0tIGdldF9kZXZpY2VfaW5mb1xuIik7CisJcHJfaW5mbygidXNiIC0tLSBnZXRfZGV2aWNlX2luZm9cbiIpOwogCiAJdXMtPnN1YmNsYXNzID0gaWRlc2MtPmJJbnRlcmZhY2VTdWJDbGFzczsKIAl1cy0+cHJvdG9jb2wgPSBpZGVzYy0+YkludGVyZmFjZVByb3RvY29sOwpAQCAtMzI2LDcgKzMyNyw3IEBACiAKIAlpZiAodXMtPmZmbGFncyAmIFVTX0ZMX0lHTk9SRV9ERVZJQ0UpCiAJewotCQlwcmludGsoImRldmljZSBpZ25vcmVkXG4iKTsKKwkJcHJfaW5mbygiZGV2aWNlIGlnbm9yZWRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTMzOSw3ICszNDAsNyBAQAogLy8tLS0tLSBnZXRfdHJhbnNwb3J0KCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBzdGF0aWMgaW50IGdldF90cmFuc3BvcnQoc3RydWN0IHVzX2RhdGEgKnVzKQogewotICAgICAgcHJpbnRrKCJ1c2IgLS0tIGdldF90cmFuc3BvcnRcbiIpOworCXByX2luZm8oInVzYiAtLS0gZ2V0X3RyYW5zcG9ydFxuIik7CiAJc3dpdGNoICh1cy0+cHJvdG9jb2wpIHsKIAljYXNlIFVTQl9QUl9CVUxLOgogCQl1cy0+dHJhbnNwb3J0X25hbWUgPSAiQnVsayI7CkBAIC0zNTAsNyArMzUxLDcgQEAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTzsKIAl9Ci0JLy9wcmludGsoIlRyYW5zcG9ydDogJXNcbiIsIHVzLT50cmFuc3BvcnRfbmFtZSk7CisJLyogcHJfaW5mbygiVHJhbnNwb3J0OiAlc1xuIiwgdXMtPnRyYW5zcG9ydF9uYW1lKTsgKi8KIAogCS8qIGZpeCBmb3Igc2luZ2xlLWx1biBkZXZpY2VzICovCiAJaWYgKHVzLT5mZmxhZ3MgJiBVU19GTF9TSU5HTEVfTFVOKQpAQCAtMzYxLDkgKzM2MiwxMSBAQAogLy8tLS0tLSBnZXRfcHJvdG9jb2woKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHN0YXRpYyBpbnQgZ2V0X3Byb3RvY29sKHN0cnVjdCB1c19kYXRhICp1cykKIHsKLSAgICAgIHByaW50aygidXNiIC0tLSBnZXRfcHJvdG9jb2xcbiIpOwotCXByaW50aygidXMtPnB1c2JfZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yID0gJXhcbiIsIHVzLT5wdXNiX2Rldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7Ci0JcHJpbnRrKCJ1cy0+cHVzYl9kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ID0gJXhcbiIsIHVzLT5wdXNiX2Rldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOworCXByX2luZm8oInVzYiAtLS0gZ2V0X3Byb3RvY29sXG4iKTsKKwlwcl9pbmZvKCJ1cy0+cHVzYl9kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IgPSAleFxuIiwKKwkJCXVzLT5wdXNiX2Rldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7CisJcHJfaW5mbygidXMtPnB1c2JfZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCA9ICV4XG4iLAorCQkJdXMtPnB1c2JfZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CiAJc3dpdGNoICh1cy0+c3ViY2xhc3MpIHsKIAljYXNlIFVTQl9TQ19TQ1NJOgogCQl1cy0+cHJvdG9jb2xfbmFtZSA9ICJUcmFuc3BhcmVudCBTQ1NJIjsKQEAgLTM3Niw3ICszNzksNyBAQAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlPOwogCX0KLQkvL3ByaW50aygiUHJvdG9jb2w6ICVzXG4iLCB1cy0+cHJvdG9jb2xfbmFtZSk7CisJLyogcHJfaW5mbygiUHJvdG9jb2w6ICVzXG4iLCB1cy0+cHJvdG9jb2xfbmFtZSk7ICovCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM5MCw3ICszOTMsNyBAQAogCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBfb3V0ID0gTlVMTDsKIAlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwX2ludCA9IE5VTEw7CiAKLSAgICAgIHByaW50aygidXNiIC0tLSBnZXRfcGlwZXNcbiIpOworCXByX2luZm8oInVzYiAtLS0gZ2V0X3BpcGVzXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBhbHRzZXR0aW5nLT5kZXNjLmJOdW1FbmRwb2ludHM7IGkrKykKIAl7CkBAIC00MTgsNyArNDIxLDcgQEAKIAogCWlmICghZXBfaW4gfHwgIWVwX291dCB8fCAodXMtPnByb3RvY29sID09IFVTQl9QUl9DQkkgJiYgIWVwX2ludCkpCiAJewotCQlwcmludGsoIkVuZHBvaW50IHNhbml0eSBjaGVjayBmYWlsZWQhIFJlamVjdGluZyBkZXYuXG4iKTsKKwkJcHJfaW5mbygiRW5kcG9pbnQgc2FuaXR5IGNoZWNrIGZhaWxlZCEgUmVqZWN0aW5nIGRldi5cbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTQ0MCwxMSArNDQzLDExIEBACiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0aDsKIAotICAgICAgcHJpbnRrKCJ1c2IgLS0tIHVzYl9zdG9yX2FjcXVpcmVfcmVzb3VyY2VzXG4iKTsKKwlwcl9pbmZvKCJ1c2IgLS0tIHVzYl9zdG9yX2FjcXVpcmVfcmVzb3VyY2VzXG4iKTsKIAl1cy0+Y3VycmVudF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCWlmICghdXMtPmN1cnJlbnRfdXJiKQogCXsKLQkJcHJpbnRrKCJVUkIgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlwcl9pbmZvKCJVUkIgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTQ1Miw3ICs0NTUsNyBAQAogCXRoID0ga3RocmVhZF9ydW4odXNiX3N0b3JfY29udHJvbF90aHJlYWQsIHVzLCAiZXVjci1zdG9yYWdlIik7CiAJaWYgKElTX0VSUih0aCkpCiAJewotCQlwcmludGsoIlVuYWJsZSB0byBzdGFydCBjb250cm9sIHRocmVhZFxuIik7CisJCXByX2luZm8oIlVuYWJsZSB0byBzdGFydCBjb250cm9sIHRocmVhZFxuIik7CiAJCXJldHVybiBQVFJfRVJSKHRoKTsKIAl9CiAJdXMtPmN0bF90aHJlYWQgPSB0aDsKQEAgLTQ2Myw3ICs0NjYsNyBAQAogLy8tLS0tLSB1c2Jfc3Rvcl9yZWxlYXNlX3Jlc291cmNlcygpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogc3RhdGljIHZvaWQgdXNiX3N0b3JfcmVsZWFzZV9yZXNvdXJjZXMoc3RydWN0IHVzX2RhdGEgKnVzKQogewotCXByaW50aygidXNiIC0tLSB1c2Jfc3Rvcl9yZWxlYXNlX3Jlc291cmNlc1xuIik7CisJcHJfaW5mbygidXNiIC0tLSB1c2Jfc3Rvcl9yZWxlYXNlX3Jlc291cmNlc1xuIik7CiAKIAlTTV9GcmVlTWVtKCk7CiAKQEAgLTQ3NCw3ICs0NzcsNyBAQAogCS8qIENhbGwgdGhlIGRlc3RydWN0b3Igcm91dGluZSwgaWYgaXQgZXhpc3RzICovCiAJaWYgKHVzLT5leHRyYV9kZXN0cnVjdG9yKQogCXsKLQkJcHJpbnRrKCItLSBjYWxsaW5nIGV4dHJhX2Rlc3RydWN0b3IoKVxuIik7CisJCXByX2luZm8oIi0tIGNhbGxpbmcgZXh0cmFfZGVzdHJ1Y3RvcigpXG4iKTsKIAkJdXMtPmV4dHJhX2Rlc3RydWN0b3IodXMtPmV4dHJhKTsKIAl9CiAKQEAgLTQ4Niw3ICs0ODksNyBAQAogLy8tLS0tLSBkaXNzb2NpYXRlX2RldigpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogc3RhdGljIHZvaWQgZGlzc29jaWF0ZV9kZXYoc3RydWN0IHVzX2RhdGEgKnVzKQogewotICAgICAgcHJpbnRrKCJ1c2IgLS0tIGRpc3NvY2lhdGVfZGV2XG4iKTsKKwlwcl9pbmZvKCJ1c2IgLS0tIGRpc3NvY2lhdGVfZGV2XG4iKTsKIAogCWtmcmVlKHVzLT5zZW5zZWJ1Zik7CiAKQEAgLTUwNSw3ICs1MDgsNyBAQAogewogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSB1c190b19ob3N0KHVzKTsKIAotICAgICAgcHJpbnRrKCJ1c2IgLS0tIHF1aWVzY2VfYW5kX3JlbW92ZV9ob3N0XG4iKTsKKwlwcl9pbmZvKCJ1c2IgLS0tIHF1aWVzY2VfYW5kX3JlbW92ZV9ob3N0XG4iKTsKIAogCS8qIElmIHRoZSBkZXZpY2UgaXMgcmVhbGx5IGdvbmUsIGN1dCBzaG9ydCByZXNldCBkZWxheXMgKi8KIAlpZiAodXMtPnB1c2JfZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpCkBAIC01MzUsNyArNTM4LDcgQEAKIC8vLS0tLS0gcmVsZWFzZV9ldmVyeXRoaW5nKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBzdGF0aWMgdm9pZCByZWxlYXNlX2V2ZXJ5dGhpbmcoc3RydWN0IHVzX2RhdGEgKnVzKQogewotICAgICAgcHJpbnRrKCJ1c2IgLS0tIHJlbGVhc2VfZXZlcnl0aGluZ1xuIik7CisJcHJfaW5mbygidXNiIC0tLSByZWxlYXNlX2V2ZXJ5dGhpbmdcbiIpOwogCiAJdXNiX3N0b3JfcmVsZWFzZV9yZXNvdXJjZXModXMpOwogCWRpc3NvY2lhdGVfZGV2KHVzKTsKQEAgLTU0Nyw4ICs1NTAsOCBAQAogewogCXN0cnVjdCB1c19kYXRhICp1cyA9IChzdHJ1Y3QgdXNfZGF0YSAqKV9fdXM7CiAKLSAgICAgIHByaW50aygidXNiIC0tLSB1c2Jfc3Rvcl9zY2FuX3RocmVhZFxuIik7Ci0JcHJpbnRrKCJFVUNSIDogZGV2aWNlIGZvdW5kIGF0ICVkXG4iLCB1cy0+cHVzYl9kZXYtPmRldm51bSk7CisJcHJfaW5mbygidXNiIC0tLSB1c2Jfc3Rvcl9zY2FuX3RocmVhZFxuIik7CisJcHJfaW5mbygiRVVDUiA6IGRldmljZSBmb3VuZCBhdCAlZFxuIiwgdXMtPnB1c2JfZGV2LT5kZXZudW0pOwogCiAJc2V0X2ZyZWV6YWJsZSgpOwogCS8qIFdhaXQgZm9yIHRoZSB0aW1lb3V0IHRvIGV4cGlyZSBvciBmb3IgYSBkaXNjb25uZWN0ICovCkBAIC01NjksNyArNTcyLDcgQEAKIAkJCW11dGV4X3VubG9jaygmdXMtPmRldl9tdXRleCk7CiAJCX0KIAkJc2NzaV9zY2FuX2hvc3QodXNfdG9faG9zdCh1cykpOwotCQlwcmludGsoIkVVQ1IgOiBkZXZpY2Ugc2NhbiBjb21wbGV0ZVxuIik7CisJCXByX2luZm8oIkVVQ1IgOiBkZXZpY2Ugc2NhbiBjb21wbGV0ZVxuIik7CiAJfQogCWNvbXBsZXRlX2FuZF9leGl0KCZ1cy0+c2Nhbm5pbmdfZG9uZSwgMCk7CiB9CkBAIC01ODMsMTIgKzU4NiwxMiBAQAogCUJZVEUJTWlzY1JlZzAzID0gMDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRoOwogCi0gICAgICBwcmludGsoInVzYiAtLS0gZXVjcl9wcm9iZVxuIik7CisJcHJfaW5mbygidXNiIC0tLSBldWNyX3Byb2JlXG4iKTsKIAogICAgICAgaG9zdCA9IHNjc2lfaG9zdF9hbGxvYygmdXNiX3N0b3JfaG9zdF90ZW1wbGF0ZSwgc2l6ZW9mKCp1cykpOwogCWlmICghaG9zdCkKIAl7Ci0JCXByaW50aygiVW5hYmxlIHRvIGFsbG9jYXRlIHRoZSBzY3NpIGhvc3RcbiIpOworCQlwcl9pbmZvKCJVbmFibGUgdG8gYWxsb2NhdGUgdGhlIHNjc2kgaG9zdFxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtNjMxLDcgKzYzNCw3IEBACiAJcmVzdWx0ID0gc2NzaV9hZGRfaG9zdChob3N0LCAmaW50Zi0+ZGV2KTsKIAlpZiAocmVzdWx0KQogCXsKLQkJcHJpbnRrKCJVbmFibGUgdG8gYWRkIHRoZSBzY3NpIGhvc3RcbiIpOworCQlwcl9pbmZvKCJVbmFibGUgdG8gYWRkIHRoZSBzY3NpIGhvc3RcbiIpOwogCQlnb3RvIEJhZERldmljZTsKIAl9CiAKQEAgLTYzOSw3ICs2NDIsNyBAQAogCXRoID0ga3RocmVhZF9jcmVhdGUodXNiX3N0b3Jfc2Nhbl90aHJlYWQsIHVzLCAiZXVjci1zdG9yLXNjYW4iKTsKIAlpZiAoSVNfRVJSKHRoKSkKIAl7Ci0JCXByaW50aygiVW5hYmxlIHRvIHN0YXJ0IHRoZSBkZXZpY2Utc2Nhbm5pbmcgdGhyZWFkXG4iKTsKKwkJcHJfaW5mbygiVW5hYmxlIHRvIHN0YXJ0IHRoZSBkZXZpY2Utc2Nhbm5pbmcgdGhyZWFkXG4iKTsKIAkJY29tcGxldGUoJnVzLT5zY2FubmluZ19kb25lKTsKIAkJcXVpZXNjZV9hbmRfcmVtb3ZlX2hvc3QodXMpOwogCQlyZXN1bHQgPSBQVFJfRVJSKHRoKTsKQEAgLTY1OCw3ICs2NjEsNyBAQAogCWlmICghKE1pc2NSZWcwMyAmIDB4MDIpKSB7CiAJCXJlc3VsdCA9IC1FTk9ERVY7CiAJCXF1aWVzY2VfYW5kX3JlbW92ZV9ob3N0KHVzKTsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJrZXVjcjogVGhlIGRyaXZlciBvbmx5IHN1cHBvcnRzIFNNL01TIGNhcmQuXAorCQlwcl9pbmZvKCJrZXVjcjogVGhlIGRyaXZlciBvbmx5IHN1cHBvcnRzIFNNL01TIGNhcmQuXAogCQkJVG8gdXNlIFNEIGNhcmQsIFwKIAkJCXBsZWFzZSBidWlsZCBkcml2ZXIvdXNiL3N0b3JhZ2UvdW1zLWVuZXViNjI1MC5rb1xuIik7CiAJCWdvdG8gQmFkRGV2aWNlOwpAQCAtNjY4LDcgKzY3MSw3IEBACiAKIAkvKiBXZSBjb21lIGhlcmUgaWYgdGhlcmUgYXJlIGFueSBwcm9ibGVtcyAqLwogQmFkRGV2aWNlOgotICAgICAgcHJpbnRrKCJ1c2IgLS0tIGV1Y3JfcHJvYmUgZmFpbGVkXG4iKTsKKwlwcl9pbmZvKCJ1c2IgLS0tIGV1Y3JfcHJvYmUgZmFpbGVkXG4iKTsKIAlyZWxlYXNlX2V2ZXJ5dGhpbmcodXMpOwogCXJldHVybiByZXN1bHQ7CiB9CkBAIC02NzgsNyArNjgxLDcgQEAKIHsKIAlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCi0gICAgICBwcmludGsoInVzYiAtLS0gZXVjcl9kaXNjb25uZWN0XG4iKTsKKwlwcl9pbmZvKCJ1c2IgLS0tIGV1Y3JfZGlzY29ubmVjdFxuIik7CiAJcXVpZXNjZV9hbmRfcmVtb3ZlX2hvc3QodXMpOwogCXJlbGVhc2VfZXZlcnl0aGluZyh1cyk7CiB9CkBAIC03MDUsMTEgKzcwOCwxMSBAQAogc3RhdGljIGludCBfX2luaXQgdXNiX3N0b3JfaW5pdCh2b2lkKQogewogCWludCByZXR2YWw7Ci0gICAgICBwcmludGsoInVzYiAtLS0gdXNiX3N0b3JfaW5pdCBzdGFydFxuIik7CisJcHJfaW5mbygidXNiIC0tLSB1c2Jfc3Rvcl9pbml0IHN0YXJ0XG4iKTsKIAogCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmdXNiX3N0b3JhZ2VfZHJpdmVyKTsKIAlpZiAocmV0dmFsID09IDApCi0gICAgICAgICAgICBwcmludGsoIkVORSBVU0IgTWFzcyBTdG9yYWdlIHN1cHBvcnQgcmVnaXN0ZXJlZC5cbiIpOworCQlwcl9pbmZvKCJFTkUgVVNCIE1hc3MgU3RvcmFnZSBzdXBwb3J0IHJlZ2lzdGVyZWQuXG4iKTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC03MTcsNyArNzIwLDcgQEAKIC8vLS0tLS0gdXNiX3N0b3JfZXhpdCgpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogc3RhdGljIHZvaWQgX19leGl0IHVzYl9zdG9yX2V4aXQodm9pZCkKIHsKLSAgICAgIHByaW50aygidXNiIC0tLSB1c2Jfc3Rvcl9leGl0XG4iKTsKKwlwcl9pbmZvKCJ1c2IgLS0tIHVzYl9zdG9yX2V4aXRcbiIpOwogCiAJdXNiX2RlcmVnaXN0ZXIoJnVzYl9zdG9yYWdlX2RyaXZlcikgOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2RyaXZlci5jIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2RyaXZlci5jCmluZGV4IGVhOTIwOWQuLjg1MWI3NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9kcml2ZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvZHJpdmVyLmMKQEAgLTEwOTQsOCArMTA5NCw2IEBACiBlcnJfZGVzdHJ1Y3Q6CiAJbGluZTZfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKIGVycl9wdXQ6Ci0JdXNiX3B1dF9pbnRmKGludGVyZmFjZSk7Ci0JdXNiX3B1dF9kZXYodXNiZGV2KTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3BhcmFsbGVsLmMgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3BhcmFsbGVsLmMKaW5kZXggODMyNTIyYy4uNTA3MjRjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19wYXJhbGxlbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfcGFyYWxsZWwuYwpAQCAtNTY4LDE3ICs1NjgsMTcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBsaXJjX2RyaXZlciBkcml2ZXIgPSB7Ci0gICAgICAgLm5hbWUJCT0gTElSQ19EUklWRVJfTkFNRSwKLSAgICAgICAubWlub3IJCT0gLTEsCi0gICAgICAgLmNvZGVfbGVuZ3RoCT0gMSwKLSAgICAgICAuc2FtcGxlX3JhdGUJPSAwLAotICAgICAgIC5kYXRhCQk9IE5VTEwsCi0gICAgICAgLmFkZF90b19idWYJPSBOVUxMLAotICAgICAgIC5zZXRfdXNlX2luYwk9IHNldF91c2VfaW5jLAotICAgICAgIC5zZXRfdXNlX2RlYwk9IHNldF91c2VfZGVjLAotICAgICAgIC5mb3BzCQk9ICZsaXJjX2ZvcHMsCi0gICAgICAgLmRldgkJPSBOVUxMLAotICAgICAgIC5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkubmFtZQkJPSBMSVJDX0RSSVZFUl9OQU1FLAorCS5taW5vcgkJPSAtMSwKKwkuY29kZV9sZW5ndGgJPSAxLAorCS5zYW1wbGVfcmF0ZQk9IDAsCisJLmRhdGEJCT0gTlVMTCwKKwkuYWRkX3RvX2J1Zgk9IE5VTEwsCisJLnNldF91c2VfaW5jCT0gc2V0X3VzZV9pbmMsCisJLnNldF91c2VfZGVjCT0gc2V0X3VzZV9kZWMsCisJLmZvcHMJCT0gJmxpcmNfZm9wcywKKwkuZGV2CQk9IE5VTEwsCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmxpcmNfcGFyYWxsZWxfZGV2OwpAQCAtNTk0LDcgKzU5NCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgbGlyY19wYXJhbGxlbF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKKwkJCQkJcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXJldHVybiAwOwogfQpAQCAtNjQ3LDcgKzY0Nyw4IEBACiAKIAlyZXN1bHQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmxpcmNfcGFyYWxsZWxfZHJpdmVyKTsKIAlpZiAocmVzdWx0KSB7Ci0JCXByaW50aygicGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyIHJldHVybmVkICVkXG4iLCByZXN1bHQpOworCQlwcmludGsoS0VSTl9OT1RJQ0UgInBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlciIKKwkJCQkJIiByZXR1cm5lZCAlZFxuIiwgcmVzdWx0KTsKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfc2VyaWFsLmMgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3NlcmlhbC5jCmluZGV4IDFjMzA5OWIuLjRhM2NjYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19zZXJpYWwuYwpAQCAtOTE5LDcgKzkxOSw3IEBACiAJZGVmYXVsdDoKIAkJZHByaW50aygiSW50ZXJydXB0ICVkLCBwb3J0ICUwNHggb2J0YWluZWRcbiIsIGlycSwgaW8pOwogCQlicmVhazsKLQl9OworCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZoYXJkd2FyZVt0eXBlXS5sb2NrLCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfc2lyLmMgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3Npci5jCmluZGV4IDc2YmU3YjguLmE3YjQ2ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfc2lyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19zaXIuYwpAQCAtMTQzLDkgKzE0Myw5IEBACiAjZW5kaWYKICNpZm5kZWYgTElSQ19QT1JUCiAvKiBmb3IgZXh0ZXJuYWwgZG9uZ2xlcywgZGVmYXVsdCB0byBjb20xICovCi0jaWYgZGVmaW5lZChMSVJDX1NJUl9BQ1RJU1lTX0FDVDIwMEwpIHx8IFwKLSAgICBkZWZpbmVkKExJUkNfU0lSX0FDVElTWVNfQUNUMjIwTCkgfHwgXAotICAgIGRlZmluZWQoTElSQ19TSVJfVEVLUkFNKQorI2lmIGRlZmluZWQoTElSQ19TSVJfQUNUSVNZU19BQ1QyMDBMKSAgICAgICAgIHx8IFwKKwkgICAgZGVmaW5lZChMSVJDX1NJUl9BQ1RJU1lTX0FDVDIyMEwpIHx8IFwKKwkgICAgZGVmaW5lZChMSVJDX1NJUl9URUtSQU0pCiAjZGVmaW5lIExJUkNfUE9SVCAweDNmOAogI2Vsc2UKIC8qIG9uYm9hcmQgc2lyIHBvcnRzIGFyZSB0eXBpY2FsbHkgY29tMyAqLwpAQCAtNDY3LDcgKzQ2Nyw3IEBACiAKIHN0YXRpYyBpbnQgc2V0X3VzZV9pbmModm9pZCAqZGF0YSkKIHsKLSAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc2V0X3VzZV9kZWModm9pZCAqZGF0YSkKQEAgLTQ3NSwxNyArNDc1LDE3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbGlyY19kcml2ZXIgZHJpdmVyID0gewotICAgICAgIC5uYW1lCQk9IExJUkNfRFJJVkVSX05BTUUsCi0gICAgICAgLm1pbm9yCQk9IC0xLAotICAgICAgIC5jb2RlX2xlbmd0aAk9IDEsCi0gICAgICAgLnNhbXBsZV9yYXRlCT0gMCwKLSAgICAgICAuZGF0YQkJPSBOVUxMLAotICAgICAgIC5hZGRfdG9fYnVmCT0gTlVMTCwKLSAgICAgICAuc2V0X3VzZV9pbmMJPSBzZXRfdXNlX2luYywKLSAgICAgICAuc2V0X3VzZV9kZWMJPSBzZXRfdXNlX2RlYywKLSAgICAgICAuZm9wcwkJPSAmbGlyY19mb3BzLAotICAgICAgIC5kZXYJCT0gTlVMTCwKLSAgICAgICAub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCT0gTElSQ19EUklWRVJfTkFNRSwKKwkubWlub3IJCT0gLTEsCisJLmNvZGVfbGVuZ3RoCT0gMSwKKwkuc2FtcGxlX3JhdGUJPSAwLAorCS5kYXRhCQk9IE5VTEwsCisJLmFkZF90b19idWYJPSBOVUxMLAorCS5zZXRfdXNlX2luYwk9IHNldF91c2VfaW5jLAorCS5zZXRfdXNlX2RlYwk9IHNldF91c2VfZGVjLAorCS5mb3BzCQk9ICZsaXJjX2ZvcHMsCisJLmRldgkJPSBOVUxMLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL21laS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmM2YxNzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpL0tjb25maWcKQEAgLTAsMCArMSwyOCBAQAorY29uZmlnIElOVEVMX01FSQorCXRyaXN0YXRlICJJbnRlbCBNYW5hZ2VtZW50IEVuZ2luZSBJbnRlcmZhY2UgKEludGVsIE1FSSkiCisJZGVwZW5kcyBvbiBYODYgJiYgUENJICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFRoZSBJbnRlbCBNYW5hZ2VtZW50IEVuZ2luZSAoSW50ZWwgTUUpIHByb3ZpZGVzIE1hbmFnZWFiaWxpdHksCisJICBTZWN1cml0eSBhbmQgTWVkaWEgc2VydmljZXMgZm9yIHN5c3RlbSBjb250YWluaW5nIEludGVsIGNoaXBzZXRzLgorCSAgaWYgc2VsZWN0ZWQgL2Rldi9tZWkgbWlzYyBkZXZpY2Ugd2lsbCBiZSBjcmVhdGVkLgorCisJICBTdXBwb3J0ZWQgQ2hpcHNldHMgYXJlOgorCSAgNyBTZXJpZXMgQ2hpcHNldCBGYW1pbHkKKwkgIDYgU2VyaWVzIENoaXBzZXQgRmFtaWx5CisJICA1IFNlcmllcyBDaGlwc2V0IEZhbWlseQorCSAgNCBTZXJpZXMgQ2hpcHNldCBGYW1pbHkKKwkgIE1vYmlsZSA0IFNlcmllcyBDaGlwc2V0IEZhbWlseQorCSAgSUNIOQorCSAgODI5NDZHWi9HTAorCSAgODJHMzUgRXhwcmVzcworCSAgODJROTYzL1E5NjUKKwkgIDgyUDk2NS9HOTY1CisJICBNb2JpbGUgUE05NjUvR005NjUKKwkgIE1vYmlsZSBHTUU5NjUvR0xFOTYwCisJICA4MlEzNSBFeHByZXNzCisJICA4MkczMy9HMzEvUDM1L1AzMSBFeHByZXNzCisJICA4MlEzMyBFeHByZXNzCisJICA4MlgzOC9YNDggRXhwcmVzcworCisJICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUKKwkgIDxodHRwOi8vc29mdHdhcmUuaW50ZWwuY29tL2VuLXVzL21hbmFnZWFiaWxpdHkvPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laS9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9tZWkvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcxNjhkYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWkvTWFrZWZpbGUKQEAgLTAsMCArMSwxMSBAQAorIworIyBNYWtlZmlsZSAtIEludGVsIE1hbmFnZW1lbnQgRW5naW5lIEludGVyZmFjZSAoSW50ZWwgTUVJKSBMaW51eCBkcml2ZXIKKyMgQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEsIEludGVsIENvcnBvcmF0aW9uLgorIworb2JqLSQoQ09ORklHX0lOVEVMX01FSSkgKz0gbWVpLm8KK21laS1vYmpzIDo9IGluaXQubworbWVpLW9ianMgKz0gaW50ZXJydXB0Lm8KK21laS1vYmpzICs9IGludGVyZmFjZS5vCittZWktb2JqcyArPSBpb3J3Lm8KK21laS1vYmpzICs9IG1haW4ubworbWVpLW9ianMgKz0gd2QubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laS9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL21laS9UT0RPCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNmE2NjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpL1RPRE8KQEAgLTAsMCArMSwxNyBAQAorVE9ETzoKKwktIENyZWF0ZSBpbi1rZXJuZWwgQ2xpZW50IEFQSS4gRXhhbXBsZXMgb2YgaW4ta2VybmVsIGNsaWVudHMgYXJlIHdhdGNoZG9nIGFuZCBBTVRISS4KKwktIE1FIFdhdGNoZG9nIERyaXZlciB0byBleHBvc2Ugc3RhbmRhcmQgTGludXggd2F0Y2hkb2cgaW50ZXJmYWNlCisJLSBSZXdyaXRlIEFNVEhJIHRvIHVzZSBpbi1rZXJuZWwgY2xpZW50IGludGVyZmFjZQorCS0gQ2xlYW51cCBpbml0IGFuZCBwcm9iZSBmdW5jdGlvbnMKKwktIFJldmlldyBCVUcvQlVHX09OIHVzYWdlCisJLSBDbGVhbnVwIGFuZCByZW9yZ2FuaXplIGhlYWRlciBmaWxlcworCS0gUmV3cml0ZSBjbGllbnQgZGF0YSBzdHJ1Y3R1cmUKKwktIE1ha2Ugc3RhdGUgbWFjaGluZSBtb3JlIHJlYWRhYmxlCisJLSBBZGQgbWVpLnR4dCB3aXRoIGRyaXZlciBleHBsYW5hdGlvbiBhbmQgaXQncyBkcml2ZXIKKwktIEZpeCBLY29uZmlnCisJLSBDbGVhbnVwIGFuZCBzcGxpdCB0aGUgdGltZXIgZnVuY3Rpb24KK1Vwb24gVW5zdGFnaW5nOgorCS0gbW92ZSBtZWkuaCB0byBpbmNsdWRlL2xpbnV4L21laS5oCisJLSBEb2N1bWVudGF0aW9uL2lvY3RsL2lvY3RsLW51bWJlci50eHQKKwktIGRyb3AgbWVpX3ZlcnNpb24uaAorCS0gVXBkYXRlZCBNQUlOVEFJTkVSUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laS9ody5oIGIvZHJpdmVycy9zdGFnaW5nL21laS9ody5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliOTAwOGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpL2h3LmgKQEAgLTAsMCArMSwzMzMgQEAKKy8qCisgKgorICogSW50ZWwgTWFuYWdlbWVudCBFbmdpbmUgSW50ZXJmYWNlIChJbnRlbCBNRUkpIExpbnV4IGRyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMTEsIEludGVsIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2lmbmRlZiBfTUVJX0hXX1RZUEVTX0hfCisjZGVmaW5lIF9NRUlfSFdfVFlQRVNfSF8KKworI2luY2x1ZGUgPGxpbnV4L3V1aWQuaD4KKworLyoKKyAqIFRpbWVvdXRzCisgKi8KKyNkZWZpbmUgTUVJX0lOVEVST1BfVElNRU9VVCAgICAoSFogKiA3KQorI2RlZmluZSBNRUlfQ09OTkVDVF9USU1FT1VUCQkzCS8qIGF0IGxlYXN0IDIgc2Vjb25kcyAqLworCisjZGVmaW5lIENPTk5FQ1RfVElNRU9VVCAgICAgICAgMTUJLyogSFBTIGRlZmluaXRpb24gKi8KKyNkZWZpbmUgSU5JVF9DTElFTlRTX1RJTUVPVVQgICAxNQkvKiBIUFMgZGVmaW5pdGlvbiAqLworCisjZGVmaW5lIElBTVRISUZfU1RBTExfVElNRVIJCTEyCS8qIHNlY29uZHMgKi8KKyNkZWZpbmUgSUFNVEhJRl9SRUFEX1RJTUVSCQkxMDAwMAkvKiBtcyAqLworCisvKgorICogSW50ZXJuYWwgQ2xpZW50cyBOdW1iZXIKKyAqLworI2RlZmluZSBNRUlfV0RfSE9TVF9DTElFTlRfSUQgICAgICAgICAgMQorI2RlZmluZSBNRUlfSUFNVEhJRl9IT1NUX0NMSUVOVF9JRCAgICAgMgorCisvKgorICogTUVJIGRldmljZSBJRHMKKyAqLworI2RlZmluZSAgICBNRUlfREVWX0lEXzgyOTQ2R1oJMHgyOTc0ICAvKiA4Mjk0NkdaL0dMICovCisjZGVmaW5lICAgIE1FSV9ERVZfSURfODJHMzUJMHgyOTg0ICAvKiA4MkczNSBFeHByZXNzICovCisjZGVmaW5lICAgIE1FSV9ERVZfSURfODJROTY1CTB4Mjk5NCAgLyogODJROTYzL1E5NjUgKi8KKyNkZWZpbmUgICAgTUVJX0RFVl9JRF84Mkc5NjUJMHgyOUE0ICAvKiA4MlA5NjUvRzk2NSAqLworCisjZGVmaW5lICAgIE1FSV9ERVZfSURfODJHTTk2NQkweDJBMDQgIC8qIE1vYmlsZSBQTTk2NS9HTTk2NSAqLworI2RlZmluZSAgICBNRUlfREVWX0lEXzgyR01FOTY1CTB4MkExNCAgLyogTW9iaWxlIEdNRTk2NS9HTEU5NjAgKi8KKworI2RlZmluZSAgICBNRUlfREVWX0lEX0lDSDlfODJRMzUgMHgyOUI0ICAvKiA4MlEzNSBFeHByZXNzICovCisjZGVmaW5lICAgIE1FSV9ERVZfSURfSUNIOV84MkczMyAweDI5QzQgIC8qIDgyRzMzL0czMS9QMzUvUDMxIEV4cHJlc3MgKi8KKyNkZWZpbmUgICAgTUVJX0RFVl9JRF9JQ0g5XzgyUTMzIDB4MjlENCAgLyogODJRMzMgRXhwcmVzcyAqLworI2RlZmluZSAgICBNRUlfREVWX0lEX0lDSDlfODJYMzggMHgyOUU0ICAvKiA4MlgzOC9YNDggRXhwcmVzcyAqLworI2RlZmluZSAgICBNRUlfREVWX0lEX0lDSDlfMzIwMCAgMHgyOUY0ICAvKiAzMjAwLzMyMTAgU2VydmVyICovCisKKyNkZWZpbmUgICAgTUVJX0RFVl9JRF9JQ0g5XzYJMHgyOEI0ICAvKiBCZWFybGFrZSAqLworI2RlZmluZSAgICBNRUlfREVWX0lEX0lDSDlfNwkweDI4QzQgIC8qIEJlYXJsYWtlICovCisjZGVmaW5lICAgIE1FSV9ERVZfSURfSUNIOV84CTB4MjhENCAgLyogQmVhcmxha2UgKi8KKyNkZWZpbmUgICAgTUVJX0RFVl9JRF9JQ0g5XzkgICAgMHgyOEU0ICAvKiBCZWFybGFrZSAqLworI2RlZmluZSAgICBNRUlfREVWX0lEX0lDSDlfMTAJMHgyOEY0ICAvKiBCZWFybGFrZSAqLworCisjZGVmaW5lICAgIE1FSV9ERVZfSURfSUNIOU1fMQkweDJBNDQgIC8qIENhbnRpZ2EgKi8KKyNkZWZpbmUgICAgTUVJX0RFVl9JRF9JQ0g5TV8yCTB4MkE1NCAgLyogQ2FudGlnYSAqLworI2RlZmluZSAgICBNRUlfREVWX0lEX0lDSDlNXzMJMHgyQTY0ICAvKiBDYW50aWdhICovCisjZGVmaW5lICAgIE1FSV9ERVZfSURfSUNIOU1fNAkweDJBNzQgIC8qIENhbnRpZ2EgKi8KKworI2RlZmluZSAgICBNRUlfREVWX0lEX0lDSDEwXzEJMHgyRTA0ICAvKiBFYWdsZWxha2UgKi8KKyNkZWZpbmUgICAgTUVJX0RFVl9JRF9JQ0gxMF8yCTB4MkUxNCAgLyogRWFnbGVsYWtlICovCisjZGVmaW5lICAgIE1FSV9ERVZfSURfSUNIMTBfMwkweDJFMjQgIC8qIEVhZ2xlbGFrZSAqLworI2RlZmluZSAgICBNRUlfREVWX0lEX0lDSDEwXzQJMHgyRTM0ICAvKiBFYWdsZWxha2UgKi8KKworI2RlZmluZSAgICBNRUlfREVWX0lEX0lCWFBLXzEJMHgzQjY0ICAvKiBDYWxwZWxsYSAqLworI2RlZmluZSAgICBNRUlfREVWX0lEX0lCWFBLXzIJMHgzQjY1ICAvKiBDYWxwZWxsYSAqLworCisjZGVmaW5lICAgIE1FSV9ERVZfSURfQ1BUXzEJMHgxQzNBICAgIC8qIENvdWdlcnBvaW50ICovCisjZGVmaW5lICAgIE1FSV9ERVZfSURfUEJHXzEJMHgxRDNBICAgIC8qIFBCRyAqLworCisjZGVmaW5lICAgIE1FSV9ERVZfSURfUFBUXzEJMHgxRTNBICAgIC8qIFBhbnRoZXJwb2ludCBQUFQgKi8KKyNkZWZpbmUgICAgTUVJX0RFVl9JRF9QUFRfMgkweDFDQkEgICAgLyogUGFudGhlcnBvaW50IFBQVCAqLworI2RlZmluZSAgICBNRUlfREVWX0lEX1BQVF8zCTB4MURCQSAgICAvKiBQYW50aGVycG9pbnQgUFBUICovCisKKworLyoKKyAqIE1FSSBIVyBTZWN0aW9uCisgKi8KKworLyogTUVJIHJlZ2lzdGVycyAqLworLyogSF9DQl9XVyAtIEhvc3QgQ2lyY3VsYXIgQnVmZmVyIChDQikgV3JpdGUgV2luZG93IHJlZ2lzdGVyICovCisjZGVmaW5lIEhfQ0JfV1cgICAgMAorLyogSF9DU1IgLSBIb3N0IENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIEhfQ1NSICAgICAgNAorLyogTUVfQ0JfUlcgLSBNRSBDaXJjdWxhciBCdWZmZXIgUmVhZCBXaW5kb3cgcmVnaXN0ZXIgKHJlYWQgb25seSkgKi8KKyNkZWZpbmUgTUVfQ0JfUlcgICA4CisvKiBNRV9DU1JfSEEgLSBNRSBDb250cm9sIFN0YXR1cyBIb3N0IEFjY2VzcyByZWdpc3RlciAocmVhZCBvbmx5KSAqLworI2RlZmluZSBNRV9DU1JfSEEgIDB4QworCisKKy8qIHJlZ2lzdGVyIGJpdHMgb2YgSF9DU1IgKEhvc3QgQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIpICovCisvKiBIb3N0IENpcmN1bGFyIEJ1ZmZlciBEZXB0aCAtIG1heGltdW0gbnVtYmVyIG9mIDMyLWJpdCBlbnRyaWVzIGluIENCICovCisjZGVmaW5lIEhfQ0JEICAgICAgICAgICAgIDB4RkYwMDAwMDAKKy8qIEhvc3QgQ2lyY3VsYXIgQnVmZmVyIFdyaXRlIFBvaW50ZXIgKi8KKyNkZWZpbmUgSF9DQldQICAgICAgICAgICAgMHgwMEZGMDAwMAorLyogSG9zdCBDaXJjdWxhciBCdWZmZXIgUmVhZCBQb2ludGVyICovCisjZGVmaW5lIEhfQ0JSUCAgICAgICAgICAgIDB4MDAwMEZGMDAKKy8qIEhvc3QgUmVzZXQgKi8KKyNkZWZpbmUgSF9SU1QgICAgICAgICAgICAgMHgwMDAwMDAxMAorLyogSG9zdCBSZWFkeSAqLworI2RlZmluZSBIX1JEWSAgICAgICAgICAgICAweDAwMDAwMDA4CisvKiBIb3N0IEludGVycnVwdCBHZW5lcmF0ZSAqLworI2RlZmluZSBIX0lHICAgICAgICAgICAgICAweDAwMDAwMDA0CisvKiBIb3N0IEludGVycnVwdCBTdGF0dXMgKi8KKyNkZWZpbmUgSF9JUyAgICAgICAgICAgICAgMHgwMDAwMDAwMgorLyogSG9zdCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIEhfSUUgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKworCisvKiByZWdpc3RlciBiaXRzIG9mIE1FX0NTUl9IQSAoTUUgQ29udHJvbCBTdGF0dXMgSG9zdCBBY2Nlc3MgcmVnaXN0ZXIpICovCisvKiBNRSBDQiAoQ2lyY3VsYXIgQnVmZmVyKSBEZXB0aCBIUkEgKEhvc3QgUmVhZCBBY2Nlc3MpIC0gaG9zdCByZWFkIG9ubHkKK2FjY2VzcyB0byBNRV9DQkQgKi8KKyNkZWZpbmUgTUVfQ0JEX0hSQSAgICAgICAgMHhGRjAwMDAwMAorLyogTUUgQ0IgV3JpdGUgUG9pbnRlciBIUkEgLSBob3N0IHJlYWQgb25seSBhY2Nlc3MgdG8gTUVfQ0JXUCAqLworI2RlZmluZSBNRV9DQldQX0hSQSAgICAgICAweDAwRkYwMDAwCisvKiBNRSBDQiBSZWFkIFBvaW50ZXIgSFJBIC0gaG9zdCByZWFkIG9ubHkgYWNjZXNzIHRvIE1FX0NCUlAgKi8KKyNkZWZpbmUgTUVfQ0JSUF9IUkEgICAgICAgMHgwMDAwRkYwMAorLyogTUUgUmVzZXQgSFJBIC0gaG9zdCByZWFkIG9ubHkgYWNjZXNzIHRvIE1FX1JTVCAqLworI2RlZmluZSBNRV9SU1RfSFJBICAgICAgICAweDAwMDAwMDEwCisvKiBNRSBSZWFkeSBIUkEgLSBob3N0IHJlYWQgb25seSBhY2Nlc3MgdG8gTUVfUkRZICovCisjZGVmaW5lIE1FX1JEWV9IUkEgICAgICAgIDB4MDAwMDAwMDgKKy8qIE1FIEludGVycnVwdCBHZW5lcmF0ZSBIUkEgLSBob3N0IHJlYWQgb25seSBhY2Nlc3MgdG8gTUVfSUcgKi8KKyNkZWZpbmUgTUVfSUdfSFJBICAgICAgICAgMHgwMDAwMDAwNAorLyogTUUgSW50ZXJydXB0IFN0YXR1cyBIUkEgLSBob3N0IHJlYWQgb25seSBhY2Nlc3MgdG8gTUVfSVMgKi8KKyNkZWZpbmUgTUVfSVNfSFJBICAgICAgICAgMHgwMDAwMDAwMgorLyogTUUgSW50ZXJydXB0IEVuYWJsZSBIUkEgLSBob3N0IHJlYWQgb25seSBhY2Nlc3MgdG8gTUVfSUUgKi8KKyNkZWZpbmUgTUVfSUVfSFJBICAgICAgICAgMHgwMDAwMDAwMQorCisvKgorICogTUVJIFZlcnNpb24KKyAqLworI2RlZmluZSBIQk1fTUlOT1JfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEhCTV9NQUpPUl9WRVJTSU9OICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSEJNX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgICAgICAgMQkvKiAxIHNlY29uZCAqLworCisvKgorICogTUVJIEJ1cyBNZXNzYWdlIENvbW1hbmQgSURzCisgKi8KKyNkZWZpbmUgSE9TVF9TVEFSVF9SRVFfQ01EICAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBIT1NUX1NUQVJUX1JFU19DTUQgICAgICAgICAgICAgICAgICAweDgxCisKKyNkZWZpbmUgSE9TVF9TVE9QX1JFUV9DTUQgICAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBIT1NUX1NUT1BfUkVTX0NNRCAgICAgICAgICAgICAgICAgICAweDgyCisKKyNkZWZpbmUgTUVfU1RPUF9SRVFfQ01EICAgICAgICAgICAgICAgICAgICAgMHgwMworCisjZGVmaW5lIEhPU1RfRU5VTV9SRVFfQ01EICAgICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgSE9TVF9FTlVNX1JFU19DTUQgICAgICAgICAgICAgICAgICAgMHg4NAorCisjZGVmaW5lIEhPU1RfQ0xJRU5UX1BST1BFUlRJRVNfUkVRX0NNRCAgICAgIDB4MDUKKyNkZWZpbmUgSE9TVF9DTElFTlRfUFJPUEVSVElFU19SRVNfQ01EICAgICAgMHg4NQorCisjZGVmaW5lIENMSUVOVF9DT05ORUNUX1JFUV9DTUQgICAgICAgICAgICAgIDB4MDYKKyNkZWZpbmUgQ0xJRU5UX0NPTk5FQ1RfUkVTX0NNRCAgICAgICAgICAgICAgMHg4NgorCisjZGVmaW5lIENMSUVOVF9ESVNDT05ORUNUX1JFUV9DTUQgICAgICAgICAgIDB4MDcKKyNkZWZpbmUgQ0xJRU5UX0RJU0NPTk5FQ1RfUkVTX0NNRCAgICAgICAgICAgMHg4NworCisjZGVmaW5lIE1FSV9GTE9XX0NPTlRST0xfQ01EICAgICAgICAgICAgICAgMHgwOAorCisvKgorICogTUVJIFN0b3AgUmVhc29uCisgKiB1c2VkIGJ5IGhibV9ob3N0X3N0b3BfcmVxdWVzdC5yZWFzb24KKyAqLworZW51bSBtZWlfc3RvcF9yZWFzb25fdHlwZXMgeworCURSSVZFUl9TVE9QX1JFUVVFU1QgPSAweDAwLAorCURFVklDRV9EMV9FTlRSWSA9IDB4MDEsCisJREVWSUNFX0QyX0VOVFJZID0gMHgwMiwKKwlERVZJQ0VfRDNfRU5UUlkgPSAweDAzLAorCVNZU1RFTV9TMV9FTlRSWSA9IDB4MDQsCisJU1lTVEVNX1MyX0VOVFJZID0gMHgwNSwKKwlTWVNURU1fUzNfRU5UUlkgPSAweDA2LAorCVNZU1RFTV9TNF9FTlRSWSA9IDB4MDcsCisJU1lTVEVNX1M1X0VOVFJZID0gMHgwOAorfTsKKworLyoKKyAqIENsaWVudCBDb25uZWN0IFN0YXR1cworICogdXNlZCBieSBoYm1fY2xpZW50X2Nvbm5lY3RfcmVzcG9uc2Uuc3RhdHVzCisgKi8KK2VudW0gY2xpZW50X2Nvbm5lY3Rfc3RhdHVzX3R5cGVzIHsKKwlDQ1NfU1VDQ0VTUyA9IDB4MDAsCisJQ0NTX05PVF9GT1VORCA9IDB4MDEsCisJQ0NTX0FMUkVBRFlfU1RBUlRFRCA9IDB4MDIsCisJQ0NTX09VVF9PRl9SRVNPVVJDRVMgPSAweDAzLAorCUNDU19NRVNTQUdFX1NNQUxMID0gMHgwNAorfTsKKworLyoKKyAqIENsaWVudCBEaXNjb25uZWN0IFN0YXR1cworICovCitlbnVtIGNsaWVudF9kaXNjb25uZWN0X3N0YXR1c190eXBlcyB7CisJQ0RTX1NVQ0NFU1MgPSAweDAwCit9OworCisvKgorICogIE1FSSBCVVMgSW50ZXJmYWNlIFNlY3Rpb24KKyAqLworc3RydWN0IG1laV9tc2dfaGRyIHsKKwl1MzIgbWVfYWRkcjo4OworCXUzMiBob3N0X2FkZHI6ODsKKwl1MzIgbGVuZ3RoOjk7CisJdTMyIHJlc2VydmVkOjY7CisJdTMyIG1zZ19jb21wbGV0ZToxOworfSBfX3BhY2tlZDsKKworCitzdHJ1Y3QgaGJtX2NtZCB7CisJdTggY21kOjc7CisJdTggaXNfcmVzcG9uc2U6MTsKK30gX19wYWNrZWQ7CisKKworc3RydWN0IG1laV9idXNfbWVzc2FnZSB7CisJc3RydWN0IGhibV9jbWQgY21kOworCXU4IGNvbW1hbmRfc3BlY2lmaWNfZGF0YVtdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGhibV92ZXJzaW9uIHsKKwl1OCBtaW5vcl92ZXJzaW9uOworCXU4IG1ham9yX3ZlcnNpb247Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaGJtX2hvc3RfdmVyc2lvbl9yZXF1ZXN0IHsKKwlzdHJ1Y3QgaGJtX2NtZCBjbWQ7CisJdTggcmVzZXJ2ZWQ7CisJc3RydWN0IGhibV92ZXJzaW9uIGhvc3RfdmVyc2lvbjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBoYm1faG9zdF92ZXJzaW9uX3Jlc3BvbnNlIHsKKwlzdHJ1Y3QgaGJtX2NtZCBjbWQ7CisJaW50IGhvc3RfdmVyc2lvbl9zdXBwb3J0ZWQ7CisJc3RydWN0IGhibV92ZXJzaW9uIG1lX21heF92ZXJzaW9uOworfSBfX3BhY2tlZDsKKworc3RydWN0IGhibV9ob3N0X3N0b3BfcmVxdWVzdCB7CisJc3RydWN0IGhibV9jbWQgY21kOworCXU4IHJlYXNvbjsKKwl1OCByZXNlcnZlZFsyXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBoYm1faG9zdF9zdG9wX3Jlc3BvbnNlIHsKKwlzdHJ1Y3QgaGJtX2NtZCBjbWQ7CisJdTggcmVzZXJ2ZWRbM107Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaGJtX21lX3N0b3BfcmVxdWVzdCB7CisJc3RydWN0IGhibV9jbWQgY21kOworCXU4IHJlYXNvbjsKKwl1OCByZXNlcnZlZFsyXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBoYm1faG9zdF9lbnVtX3JlcXVlc3QgeworCXN0cnVjdCBoYm1fY21kIGNtZDsKKwl1OCByZXNlcnZlZFszXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBoYm1faG9zdF9lbnVtX3Jlc3BvbnNlIHsKKwlzdHJ1Y3QgaGJtX2NtZCBjbWQ7CisJdTggcmVzZXJ2ZWRbM107CisJdTggdmFsaWRfYWRkcmVzc2VzWzMyXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtZWlfY2xpZW50X3Byb3BlcnRpZXMgeworCXV1aWRfbGUgcHJvdG9jb2xfbmFtZTsKKwl1OCBwcm90b2NvbF92ZXJzaW9uOworCXU4IG1heF9udW1iZXJfb2ZfY29ubmVjdGlvbnM7CisJdTggZml4ZWRfYWRkcmVzczsKKwl1OCBzaW5nbGVfcmVjdl9idWY7CisJdTMyIG1heF9tc2dfbGVuZ3RoOworfSBfX3BhY2tlZDsKKworc3RydWN0IGhibV9wcm9wc19yZXF1ZXN0IHsKKwlzdHJ1Y3QgaGJtX2NtZCBjbWQ7CisJdTggYWRkcmVzczsKKwl1OCByZXNlcnZlZFsyXTsKK30gX19wYWNrZWQ7CisKKworc3RydWN0IGhibV9wcm9wc19yZXNwb25zZSB7CisJc3RydWN0IGhibV9jbWQgY21kOworCXU4IGFkZHJlc3M7CisJdTggc3RhdHVzOworCXU4IHJlc2VydmVkWzFdOworCXN0cnVjdCBtZWlfY2xpZW50X3Byb3BlcnRpZXMgY2xpZW50X3Byb3BlcnRpZXM7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaGJtX2NsaWVudF9jb25uZWN0X3JlcXVlc3QgeworCXN0cnVjdCBoYm1fY21kIGNtZDsKKwl1OCBtZV9hZGRyOworCXU4IGhvc3RfYWRkcjsKKwl1OCByZXNlcnZlZDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBoYm1fY2xpZW50X2Nvbm5lY3RfcmVzcG9uc2UgeworCXN0cnVjdCBoYm1fY21kIGNtZDsKKwl1OCBtZV9hZGRyOworCXU4IGhvc3RfYWRkcjsKKwl1OCBzdGF0dXM7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaGJtX2NsaWVudF9kaXNjb25uZWN0X3JlcXVlc3QgeworCXN0cnVjdCBoYm1fY21kIGNtZDsKKwl1OCBtZV9hZGRyOworCXU4IGhvc3RfYWRkcjsKKwl1OCByZXNlcnZlZFsxXTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgTUVJX0ZDX01FU1NBR0VfUkVTRVJWRURfTEVOR1RIICAgICAgICAgICA1CisKK3N0cnVjdCBoYm1fZmxvd19jb250cm9sIHsKKwlzdHJ1Y3QgaGJtX2NtZCBjbWQ7CisJdTggbWVfYWRkcjsKKwl1OCBob3N0X2FkZHI7CisJdTggcmVzZXJ2ZWRbTUVJX0ZDX01FU1NBR0VfUkVTRVJWRURfTEVOR1RIXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtZWlfbWVfY2xpZW50IHsKKwlzdHJ1Y3QgbWVpX2NsaWVudF9wcm9wZXJ0aWVzIHByb3BzOworCXU4IGNsaWVudF9pZDsKKwl1OCBtZWlfZmxvd19jdHJsX2NyZWRzOworfSBfX3BhY2tlZDsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWkvaW5pdC5jIGIvZHJpdmVycy9zdGFnaW5nL21laS9pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgxODg1MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWkvaW5pdC5jCkBAIC0wLDAgKzEsNzcwIEBACisvKgorICoKKyAqIEludGVsIE1hbmFnZW1lbnQgRW5naW5lIEludGVyZmFjZSAoSW50ZWwgTUVJKSBMaW51eCBkcml2ZXIKKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDExLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAibWVpX2Rldi5oIgorI2luY2x1ZGUgImh3LmgiCisjaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibWVpLmgiCisKK2NvbnN0IHV1aWRfbGUgbWVpX2FtdGhpX2d1aWQgID0gVVVJRF9MRSgweDEyZjgwMDI4LCAweGI0YjcsIDB4NGIyZCwgMHhhYywKKwkJCQkJCTB4YTgsIDB4NDYsIDB4ZTAsIDB4ZmYsIDB4NjUsCisJCQkJCQkweDgxLCAweDRjKTsKKworLyoqCisgKiBtZWlfaW5pdGlhbGl6ZV9saXN0IC0gU2V0cyB1cCBhIHF1ZXVlIGxpc3QuCisgKgorICogQGxpc3Q6IEFuIGluc3RhbmNlIG9mIG91ciBsaXN0IHN0cnVjdHVyZQorICogQGRldjogdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqLwordm9pZCBtZWlfaW5pdGlhbGl6ZV9saXN0KHN0cnVjdCBtZWlfaW9fbGlzdCAqbGlzdCwgc3RydWN0IG1laV9kZXZpY2UgKmRldikKK3sKKwkvKiBpbml0aWFsaXplIG91ciBxdWV1ZSBsaXN0ICovCisJSU5JVF9MSVNUX0hFQUQoJmxpc3QtPm1laV9jYi5jYl9saXN0KTsKKwlsaXN0LT5zdGF0dXMgPSAwOworCWxpc3QtPmRldmljZV9leHRlbnNpb24gPSBkZXY7Cit9CisKKy8qKgorICogbWVpX2ZsdXNoX3F1ZXVlcyAtIGZsdXNoZXMgcXVldWUgbGlzdHMgYmVsb25naW5nIHRvIGNsLgorICoKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAY2w6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QKKyAqLwordm9pZCBtZWlfZmx1c2hfcXVldWVzKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYsIHN0cnVjdCBtZWlfY2wgKmNsKQoreworCWludCBpOworCisJaWYgKCFkZXYgfHwgIWNsKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgTUVJX0lPX0xJU1RTX05VTUJFUjsgaSsrKSB7CisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAicmVtb3ZlIGxpc3QgZW50cnkgYmVsb25naW5nIHRvIGNsXG4iKTsKKwkJbWVpX2ZsdXNoX2xpc3QoZGV2LT5pb19saXN0X2FycmF5W2ldLCBjbCk7CisJfQorfQorCisKKy8qKgorICogbWVpX2ZsdXNoX2xpc3QgLSByZW1vdmVzIGxpc3QgZW50cnkgYmVsb25naW5nIHRvIGNsLgorICoKKyAqIEBsaXN0OiAgQW4gaW5zdGFuY2Ugb2Ygb3VyIGxpc3Qgc3RydWN0dXJlCisgKiBAY2w6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QKKyAqLwordm9pZCBtZWlfZmx1c2hfbGlzdChzdHJ1Y3QgbWVpX2lvX2xpc3QgKmxpc3QsIHN0cnVjdCBtZWlfY2wgKmNsKQoreworCXN0cnVjdCBtZWlfY2wgKmNsX3RtcDsKKwlzdHJ1Y3QgbWVpX2NsX2NiICpjYl9wb3MgPSBOVUxMOworCXN0cnVjdCBtZWlfY2xfY2IgKmNiX25leHQgPSBOVUxMOworCisJaWYgKCFsaXN0IHx8ICFjbCkKKwkJcmV0dXJuOworCisJaWYgKGxpc3QtPnN0YXR1cyAhPSAwKQorCQlyZXR1cm47CisKKwlpZiAobGlzdF9lbXB0eSgmbGlzdC0+bWVpX2NiLmNiX2xpc3QpKQorCQlyZXR1cm47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2JfcG9zLCBjYl9uZXh0LAorCQkJCSAmbGlzdC0+bWVpX2NiLmNiX2xpc3QsIGNiX2xpc3QpIHsKKwkJaWYgKGNiX3BvcykgeworCQkJY2xfdG1wID0gKHN0cnVjdCBtZWlfY2wgKikKKwkJCQljYl9wb3MtPmZpbGVfcHJpdmF0ZTsKKwkJCWlmIChjbF90bXAgJiYKKwkJCSAgICBtZWlfZmVfc2FtZV9pZChjbCwgY2xfdG1wKSkKKwkJCQlsaXN0X2RlbCgmY2JfcG9zLT5jYl9saXN0KTsKKwkJfQorCX0KK30KKworLyoqCisgKiBtZWlfcmVzZXRfaWFtdGhpZl9wYXJhbXMgLSBpbml0aWFsaXplcyBtZWkgZGV2aWNlIGlhbXRoaWYKKyAqCisgKiBAZGV2OiB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICovCitzdGF0aWMgdm9pZCBtZWlfcmVzZXRfaWFtdGhpZl9wYXJhbXMoc3RydWN0IG1laV9kZXZpY2UgKmRldikKK3sKKwkvKiByZXNldCBpYW10aGlmIHBhcmFtZXRlcnMuICovCisJZGV2LT5pYW10aGlmX2N1cnJlbnRfY2IgPSBOVUxMOworCWRldi0+aWFtdGhpZl9tc2dfYnVmX3NpemUgPSAwOworCWRldi0+aWFtdGhpZl9tc2dfYnVmX2luZGV4ID0gMDsKKwlkZXYtPmlhbXRoaWZfY2FuY2VsZWQgPSAwOworCWRldi0+aWFtdGhpZl9pb2N0bCA9IDA7CisJZGV2LT5pYW10aGlmX3N0YXRlID0gTUVJX0lBTVRISUZfSURMRTsKKwlkZXYtPmlhbXRoaWZfdGltZXIgPSAwOworfQorCisvKioKKyAqIGluaXRfbWVpX2RldmljZSAtIGFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgdGhlIG1laSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogQHBkZXY6IFRoZSBwY2kgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIHJldHVybnMgVGhlIG1laV9kZXZpY2VfZGV2aWNlIHBvaW50ZXIgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgorICovCitzdHJ1Y3QgbWVpX2RldmljZSAqaW5pdF9tZWlfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWludCBpOworCXN0cnVjdCBtZWlfZGV2aWNlICpkZXY7CisKKwlkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWVpX2RldmljZSksIEdGUF9LRVJORUwpOworCWlmICghZGV2KQorCQlyZXR1cm4gTlVMTDsKKworCS8qIHNldHVwIG91ciBsaXN0IGFycmF5ICovCisJZGV2LT5pb19saXN0X2FycmF5WzBdID0gJmRldi0+cmVhZF9saXN0OworCWRldi0+aW9fbGlzdF9hcnJheVsxXSA9ICZkZXYtPndyaXRlX2xpc3Q7CisJZGV2LT5pb19saXN0X2FycmF5WzJdID0gJmRldi0+d3JpdGVfd2FpdGluZ19saXN0OworCWRldi0+aW9fbGlzdF9hcnJheVszXSA9ICZkZXYtPmN0cmxfd3JfbGlzdDsKKwlkZXYtPmlvX2xpc3RfYXJyYXlbNF0gPSAmZGV2LT5jdHJsX3JkX2xpc3Q7CisJZGV2LT5pb19saXN0X2FycmF5WzVdID0gJmRldi0+YW10aGlfY21kX2xpc3Q7CisJZGV2LT5pb19saXN0X2FycmF5WzZdID0gJmRldi0+YW10aGlfcmVhZF9jb21wbGV0ZV9saXN0OworCUlOSVRfTElTVF9IRUFEKCZkZXYtPmZpbGVfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmRldi0+d2RfY2wubGluayk7CisJSU5JVF9MSVNUX0hFQUQoJmRldi0+aWFtdGhpZl9jbC5saW5rKTsKKwltdXRleF9pbml0KCZkZXYtPmRldmljZV9sb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPndhaXRfcmVjdmRfbXNnKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPndhaXRfc3RvcF93ZCk7CisJZGV2LT5tZWlfc3RhdGUgPSBNRUlfSU5JVElBTElaSU5HOworCWRldi0+aWFtdGhpZl9zdGF0ZSA9IE1FSV9JQU1USElGX0lETEU7CisJZm9yIChpID0gMDsgaSA8IE1FSV9JT19MSVNUU19OVU1CRVI7IGkrKykKKwkJbWVpX2luaXRpYWxpemVfbGlzdChkZXYtPmlvX2xpc3RfYXJyYXlbaV0sIGRldik7CisJZGV2LT5wZGV2ID0gcGRldjsKKwlyZXR1cm4gZGV2OworfQorCisvKioKKyAqIG1laV9od19pbml0IC0gaW5pdGlhbGl6ZXMgaG9zdCBhbmQgZncgdG8gc3RhcnQgd29yay4KKyAqCisgKiBAZGV2OiB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlLgorICovCitpbnQgbWVpX2h3X2luaXQoc3RydWN0IG1laV9kZXZpY2UgKmRldikKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmZGV2LT5kZXZpY2VfbG9jayk7CisKKwlkZXYtPmhvc3RfaHdfc3RhdGUgPSBtZWlfaGNzcl9yZWFkKGRldik7CisJZGV2LT5tZV9od19zdGF0ZSA9IG1laV9tZWNzcl9yZWFkKGRldik7CisJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJob3N0X2h3X3N0YXRlID0gMHglMDh4LCBtZXN0YXRlID0gMHglMDh4LlxuIiwKKwkgICAgZGV2LT5ob3N0X2h3X3N0YXRlLCBkZXYtPm1lX2h3X3N0YXRlKTsKKworCS8qIGFja25vd2xlZGdlIGludGVycnVwdCBhbmQgc3RvcCBpbnRlcnVwdHMgKi8KKwlpZiAoKGRldi0+aG9zdF9od19zdGF0ZSAmIEhfSVMpID09IEhfSVMpCisJCW1laV9yZWdfd3JpdGUoZGV2LCBIX0NTUiwgZGV2LT5ob3N0X2h3X3N0YXRlKTsKKworCWRldi0+cmVjdmRfbXNnID0gMDsKKwlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgInJlc2V0IGluIHN0YXJ0IHRoZSBtZWkgZGV2aWNlLlxuIik7CisKKwltZWlfcmVzZXQoZGV2LCAxKTsKKworCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiaG9zdF9od19zdGF0ZSA9IDB4JTA4eCwgbWVfaHdfc3RhdGUgPSAweCUwOHguXG4iLAorCSAgICBkZXYtPmhvc3RfaHdfc3RhdGUsIGRldi0+bWVfaHdfc3RhdGUpOworCisJLyogd2FpdCBmb3IgTUUgdG8gdHVybiBvbiBNRV9SRFkgKi8KKwlpZiAoIWRldi0+cmVjdmRfbXNnKSB7CisJCW11dGV4X3VubG9jaygmZGV2LT5kZXZpY2VfbG9jayk7CisJCWVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGRldi0+d2FpdF9yZWN2ZF9tc2csCisJCQlkZXYtPnJlY3ZkX21zZywgTUVJX0lOVEVST1BfVElNRU9VVCk7CisJCW11dGV4X2xvY2soJmRldi0+ZGV2aWNlX2xvY2spOworCX0KKworCWlmICghZXJyICYmICFkZXYtPnJlY3ZkX21zZykgeworCQlkZXYtPm1laV9zdGF0ZSA9IE1FSV9ESVNBQkxFRDsKKwkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsCisJCQkid2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQgZmFpbGVkIgorCQkJIm9uIHdhaXQgZm9yIE1FIHRvIHR1cm4gb24gTUVfUkRZLlxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghKCgoZGV2LT5ob3N0X2h3X3N0YXRlICYgSF9SRFkpID09IEhfUkRZKSAmJgorCSAgICAgICgoZGV2LT5tZV9od19zdGF0ZSAmIE1FX1JEWV9IUkEpID09IE1FX1JEWV9IUkEpKSkgeworCQlkZXYtPm1laV9zdGF0ZSA9IE1FSV9ESVNBQkxFRDsKKwkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsCisJCQkiaG9zdF9od19zdGF0ZSA9IDB4JTA4eCwgbWVfaHdfc3RhdGUgPSAweCUwOHguXG4iLAorCQkJZGV2LT5ob3N0X2h3X3N0YXRlLCBkZXYtPm1lX2h3X3N0YXRlKTsKKworCQlpZiAoIShkZXYtPmhvc3RfaHdfc3RhdGUgJiBIX1JEWSkgIT0gSF9SRFkpCisJCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgImhvc3QgdHVybiBvZmYgSF9SRFkuXG4iKTsKKworCQlpZiAoIShkZXYtPm1lX2h3X3N0YXRlICYgTUVfUkRZX0hSQSkgIT0gTUVfUkRZX0hSQSkKKwkJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiTUUgdHVybiBvZmYgTUVfUkRZLlxuIik7CisKKwkJcHJpbnRrKEtFUk5fRVJSICJtZWk6IGxpbmsgbGF5ZXIgaW5pdGlhbGl6YXRpb24gZmFpbGVkLlxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChkZXYtPnZlcnNpb24ubWFqb3JfdmVyc2lvbiAhPSBIQk1fTUFKT1JfVkVSU0lPTiB8fAorCSAgICBkZXYtPnZlcnNpb24ubWlub3JfdmVyc2lvbiAhPSBIQk1fTUlOT1JfVkVSU0lPTikgeworCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgIk1FSSBzdGFydCBmYWlsZWQuXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJZGV2LT5yZWN2ZF9tc2cgPSAwOworCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiaG9zdF9od19zdGF0ZSA9IDB4JTA4eCwgbWVfaHdfc3RhdGUgPSAweCUwOHguXG4iLAorCSAgICBkZXYtPmhvc3RfaHdfc3RhdGUsIGRldi0+bWVfaHdfc3RhdGUpOworCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiTUUgdHVybiBvbiBNRV9SRFkgYW5kIGhvc3QgdHVybiBvbiBIX1JEWS5cbiIpOworCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAibGluayBsYXllciBoYXMgYmVlbiBlc3RhYmxpc2hlZC5cbiIpOworCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiTUVJICBzdGFydCBzdWNjZXNzLlxuIik7CisJcmV0ID0gMDsKKworb3V0OgorCW11dGV4X3VubG9jaygmZGV2LT5kZXZpY2VfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBtZWlfaHdfcmVzZXQgLSByZXNldHMgZncgdmlhIG1laSBjc3IgcmVnaXN0ZXIuCisgKgorICogQGRldjogdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBpbnRlcnJ1cHRzX2VuYWJsZWQ6IGlmIGludGVycnVwdCBzaG91bGQgYmUgZW5hYmxlZCBhZnRlciByZXNldC4KKyAqLworc3RhdGljIHZvaWQgbWVpX2h3X3Jlc2V0KHN0cnVjdCBtZWlfZGV2aWNlICpkZXYsIGludCBpbnRlcnJ1cHRzX2VuYWJsZWQpCit7CisJZGV2LT5ob3N0X2h3X3N0YXRlIHw9IChIX1JTVCB8IEhfSUcpOworCisJaWYgKGludGVycnVwdHNfZW5hYmxlZCkKKwkJbWVpX2VuYWJsZV9pbnRlcnJ1cHRzKGRldik7CisJZWxzZQorCQltZWlfZGlzYWJsZV9pbnRlcnJ1cHRzKGRldik7Cit9CisKKy8qKgorICogbWVpX3Jlc2V0IC0gcmVzZXRzIGhvc3QgYW5kIGZ3LgorICoKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAaW50ZXJydXB0c19lbmFibGVkOiBpZiBpbnRlcnJ1cHQgc2hvdWxkIGJlIGVuYWJsZWQgYWZ0ZXIgcmVzZXQuCisgKi8KK3ZvaWQgbWVpX3Jlc2V0KHN0cnVjdCBtZWlfZGV2aWNlICpkZXYsIGludCBpbnRlcnJ1cHRzX2VuYWJsZWQpCit7CisJc3RydWN0IG1laV9jbCAqY2xfcG9zID0gTlVMTDsKKwlzdHJ1Y3QgbWVpX2NsICpjbF9uZXh0ID0gTlVMTDsKKwlzdHJ1Y3QgbWVpX2NsX2NiICpjYl9wb3MgPSBOVUxMOworCXN0cnVjdCBtZWlfY2xfY2IgKmNiX25leHQgPSBOVUxMOworCWJvb2wgdW5leHBlY3RlZDsKKworCWlmIChkZXYtPm1laV9zdGF0ZSA9PSBNRUlfUkVDT1ZFUklOR19GUk9NX1JFU0VUKSB7CisJCWRldi0+bmVlZF9yZXNldCA9IDE7CisJCXJldHVybjsKKwl9CisKKwl1bmV4cGVjdGVkID0gKGRldi0+bWVpX3N0YXRlICE9IE1FSV9JTklUSUFMSVpJTkcgJiYKKwkJCWRldi0+bWVpX3N0YXRlICE9IE1FSV9ESVNBQkxFRCAmJgorCQkJZGV2LT5tZWlfc3RhdGUgIT0gTUVJX1BPV0VSX0RPV04gJiYKKwkJCWRldi0+bWVpX3N0YXRlICE9IE1FSV9QT1dFUl9VUCk7CisKKwlkZXYtPmhvc3RfaHdfc3RhdGUgPSBtZWlfaGNzcl9yZWFkKGRldik7CisKKwlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgImJlZm9yZSByZXNldCBob3N0X2h3X3N0YXRlID0gMHglMDh4LlxuIiwKKwkgICAgZGV2LT5ob3N0X2h3X3N0YXRlKTsKKworCW1laV9od19yZXNldChkZXYsIGludGVycnVwdHNfZW5hYmxlZCk7CisKKwlkZXYtPmhvc3RfaHdfc3RhdGUgJj0gfkhfUlNUOworCWRldi0+aG9zdF9od19zdGF0ZSB8PSBIX0lHOworCisJbWVpX2hjc3Jfc2V0KGRldik7CisKKwlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgImN1cnJlbnRseSBzYXZlZCBob3N0X2h3X3N0YXRlID0gMHglMDh4LlxuIiwKKwkgICAgZGV2LT5ob3N0X2h3X3N0YXRlKTsKKworCWRldi0+bmVlZF9yZXNldCA9IDA7CisKKwlpZiAoZGV2LT5tZWlfc3RhdGUgIT0gTUVJX0lOSVRJQUxJWklORykgeworCQlpZiAoZGV2LT5tZWlfc3RhdGUgIT0gTUVJX0RJU0FCTEVEICYmCisJCSAgICBkZXYtPm1laV9zdGF0ZSAhPSBNRUlfUE9XRVJfRE9XTikKKwkJCWRldi0+bWVpX3N0YXRlID0gTUVJX1JFU0VUSU5HOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjbF9wb3MsCisJCQkJY2xfbmV4dCwgJmRldi0+ZmlsZV9saXN0LCBsaW5rKSB7CisJCQljbF9wb3MtPnN0YXRlID0gTUVJX0ZJTEVfRElTQ09OTkVDVEVEOworCQkJY2xfcG9zLT5tZWlfZmxvd19jdHJsX2NyZWRzID0gMDsKKwkJCWNsX3Bvcy0+cmVhZF9jYiA9IE5VTEw7CisJCQljbF9wb3MtPnRpbWVyX2NvdW50ID0gMDsKKwkJfQorCQkvKiByZW1vdmUgZW50cnkgaWYgYWxyZWFkeSBpbiBsaXN0ICovCisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAibGlzdCBkZWwgaWFtdGhpZiBhbmQgd2QgZmlsZSBsaXN0LlxuIik7CisJCW1laV9yZW1vdmVfY2xpZW50X2Zyb21fZmlsZV9saXN0KGRldiwKKwkJCQlkZXYtPndkX2NsLmhvc3RfY2xpZW50X2lkKTsKKworCQltZWlfcmVtb3ZlX2NsaWVudF9mcm9tX2ZpbGVfbGlzdChkZXYsCisJCQkJZGV2LT5pYW10aGlmX2NsLmhvc3RfY2xpZW50X2lkKTsKKworCQltZWlfcmVzZXRfaWFtdGhpZl9wYXJhbXMoZGV2KTsKKwkJZGV2LT53ZF9kdWVfY291bnRlciA9IDA7CisJCWRldi0+ZXh0cmFfd3JpdGVfaW5kZXggPSAwOworCX0KKworCWRldi0+bnVtX21laV9tZV9jbGllbnRzID0gMDsKKwlkZXYtPnJkX21zZ19oZHIgPSAwOworCWRldi0+c3RvcCA9IDA7CisJZGV2LT53ZF9wZW5kaW5nID0gMDsKKworCS8qIHVwZGF0ZSB0aGUgc3RhdGUgb2YgdGhlIHJlZ2lzdGVycyBhZnRlciByZXNldCAqLworCWRldi0+aG9zdF9od19zdGF0ZSA9IG1laV9oY3NyX3JlYWQoZGV2KTsKKwlkZXYtPm1lX2h3X3N0YXRlID0gbWVpX21lY3NyX3JlYWQoZGV2KTsKKworCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiYWZ0ZXIgcmVzZXQgaG9zdF9od19zdGF0ZSA9IDB4JTA4eCwgbWVfaHdfc3RhdGUgPSAweCUwOHguXG4iLAorCSAgICBkZXYtPmhvc3RfaHdfc3RhdGUsIGRldi0+bWVfaHdfc3RhdGUpOworCisJaWYgKHVuZXhwZWN0ZWQpCisJCWRldl93YXJuKCZkZXYtPnBkZXYtPmRldiwgInVuZXhwZWN0ZWQgcmVzZXQuXG4iKTsKKworCS8qIFdha2UgdXAgYWxsIHJlYWRpbmdzIHNvIHRoZXkgY2FuIGJlIGludGVycnVwdGVkICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNsX3BvcywgY2xfbmV4dCwgJmRldi0+ZmlsZV9saXN0LCBsaW5rKSB7CisJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZjbF9wb3MtPnJ4X3dhaXQpKSB7CisJCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgIldha2luZyB1cCBjbGllbnQhXG4iKTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2xfcG9zLT5yeF93YWl0KTsKKwkJfQorCX0KKwkvKiByZW1vdmUgYWxsIHdhaXRpbmcgcmVxdWVzdHMgKi8KKwlpZiAoZGV2LT53cml0ZV9saXN0LnN0YXR1cyA9PSAwICYmCisJCSFsaXN0X2VtcHR5KCZkZXYtPndyaXRlX2xpc3QubWVpX2NiLmNiX2xpc3QpKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjYl9wb3MsIGNiX25leHQsCisJCQkJJmRldi0+d3JpdGVfbGlzdC5tZWlfY2IuY2JfbGlzdCwgY2JfbGlzdCkgeworCQkJaWYgKGNiX3BvcykgeworCQkJCWxpc3RfZGVsKCZjYl9wb3MtPmNiX2xpc3QpOworCQkJCW1laV9mcmVlX2NiX3ByaXZhdGUoY2JfcG9zKTsKKwkJCQljYl9wb3MgPSBOVUxMOworCQkJfQorCQl9CisJfQorfQorCisKKworLyoqCisgKiBob3N0X3N0YXJ0X21lc3NhZ2UgLSBtZWkgaG9zdCBzZW5kcyBzdGFydCBtZXNzYWdlLgorICoKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogcmV0dXJucyBub25lLgorICovCit2b2lkIGhvc3Rfc3RhcnRfbWVzc2FnZShzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtZWlfbXNnX2hkciAqbWVpX2hkcjsKKwlzdHJ1Y3QgaGJtX2hvc3RfdmVyc2lvbl9yZXF1ZXN0ICpob3N0X3N0YXJ0X3JlcTsKKworCS8qIGhvc3Qgc3RhcnQgbWVzc2FnZSAqLworCW1laV9oZHIgPSAoc3RydWN0IG1laV9tc2dfaGRyICopICZkZXYtPndyX21zZ19idWZbMF07CisJbWVpX2hkci0+aG9zdF9hZGRyID0gMDsKKwltZWlfaGRyLT5tZV9hZGRyID0gMDsKKwltZWlfaGRyLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhibV9ob3N0X3ZlcnNpb25fcmVxdWVzdCk7CisJbWVpX2hkci0+bXNnX2NvbXBsZXRlID0gMTsKKwltZWlfaGRyLT5yZXNlcnZlZCA9IDA7CisKKwlob3N0X3N0YXJ0X3JlcSA9CisJICAgIChzdHJ1Y3QgaGJtX2hvc3RfdmVyc2lvbl9yZXF1ZXN0ICopICZkZXYtPndyX21zZ19idWZbMV07CisJbWVtc2V0KGhvc3Rfc3RhcnRfcmVxLCAwLCBzaXplb2Yoc3RydWN0IGhibV9ob3N0X3ZlcnNpb25fcmVxdWVzdCkpOworCWhvc3Rfc3RhcnRfcmVxLT5jbWQuY21kID0gSE9TVF9TVEFSVF9SRVFfQ01EOworCWhvc3Rfc3RhcnRfcmVxLT5ob3N0X3ZlcnNpb24ubWFqb3JfdmVyc2lvbiA9IEhCTV9NQUpPUl9WRVJTSU9OOworCWhvc3Rfc3RhcnRfcmVxLT5ob3N0X3ZlcnNpb24ubWlub3JfdmVyc2lvbiA9IEhCTV9NSU5PUl9WRVJTSU9OOworCWRldi0+cmVjdmRfbXNnID0gMDsKKwlpZiAoIW1laV93cml0ZV9tZXNzYWdlKGRldiwgbWVpX2hkciwKKwkJCQkgICAgICAgKHVuc2lnbmVkIGNoYXIgKikgKGhvc3Rfc3RhcnRfcmVxKSwKKwkJCQkgICAgICAgbWVpX2hkci0+bGVuZ3RoKSkgeworCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgIndyaXRlIHNlbmQgdmVyc2lvbiBtZXNzYWdlIHRvIEZXIGZhaWwuXG4iKTsKKwkJZGV2LT5tZWlfc3RhdGUgPSBNRUlfUkVTRVRJTkc7CisJCW1laV9yZXNldChkZXYsIDEpOworCX0KKwlkZXYtPmluaXRfY2xpZW50c19zdGF0ZSA9IE1FSV9TVEFSVF9NRVNTQUdFOworCWRldi0+aW5pdF9jbGllbnRzX3RpbWVyID0gSU5JVF9DTElFTlRTX1RJTUVPVVQ7CisJcmV0dXJuIDsKK30KKworLyoqCisgKiBob3N0X2VudW1fY2xpZW50c19tZXNzYWdlIC0gaG9zdCBzZW5kcyBlbnVtZXJhdGlvbiBjbGllbnQgcmVxdWVzdCBtZXNzYWdlLgorICoKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogcmV0dXJucyBub25lLgorICovCit2b2lkIGhvc3RfZW51bV9jbGllbnRzX21lc3NhZ2Uoc3RydWN0IG1laV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbWVpX21zZ19oZHIgKm1laV9oZHI7CisJc3RydWN0IGhibV9ob3N0X2VudW1fcmVxdWVzdCAqaG9zdF9lbnVtX3JlcTsKKwltZWlfaGRyID0gKHN0cnVjdCBtZWlfbXNnX2hkciAqKSAmZGV2LT53cl9tc2dfYnVmWzBdOworCS8qIGVudW1lcmF0ZSBjbGllbnRzICovCisJbWVpX2hkci0+aG9zdF9hZGRyID0gMDsKKwltZWlfaGRyLT5tZV9hZGRyID0gMDsKKwltZWlfaGRyLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhibV9ob3N0X2VudW1fcmVxdWVzdCk7CisJbWVpX2hkci0+bXNnX2NvbXBsZXRlID0gMTsKKwltZWlfaGRyLT5yZXNlcnZlZCA9IDA7CisKKwlob3N0X2VudW1fcmVxID0gKHN0cnVjdCBoYm1faG9zdF9lbnVtX3JlcXVlc3QgKikgJmRldi0+d3JfbXNnX2J1ZlsxXTsKKwltZW1zZXQoaG9zdF9lbnVtX3JlcSwgMCwgc2l6ZW9mKHN0cnVjdCBoYm1faG9zdF9lbnVtX3JlcXVlc3QpKTsKKwlob3N0X2VudW1fcmVxLT5jbWQuY21kID0gSE9TVF9FTlVNX1JFUV9DTUQ7CisJaWYgKCFtZWlfd3JpdGVfbWVzc2FnZShkZXYsIG1laV9oZHIsCisJCQkgICAgICAgKHVuc2lnbmVkIGNoYXIgKikgKGhvc3RfZW51bV9yZXEpLAorCQkJCW1laV9oZHItPmxlbmd0aCkpIHsKKwkJZGV2LT5tZWlfc3RhdGUgPSBNRUlfUkVTRVRJTkc7CisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAid3JpdGUgc2VuZCBlbnVtZXJhdGlvbiByZXF1ZXN0IG1lc3NhZ2UgdG8gRlcgZmFpbC5cbiIpOworCQltZWlfcmVzZXQoZGV2LCAxKTsKKwl9CisJZGV2LT5pbml0X2NsaWVudHNfc3RhdGUgPSBNRUlfRU5VTV9DTElFTlRTX01FU1NBR0U7CisJZGV2LT5pbml0X2NsaWVudHNfdGltZXIgPSBJTklUX0NMSUVOVFNfVElNRU9VVDsKKwlyZXR1cm4gOworfQorCisKKy8qKgorICogYWxsb2NhdGVfbWVfY2xpZW50c19zdG9yYWdlIC0gYWxsb2NhdGVzIHN0b3JhZ2UgZm9yIG1lIGNsaWVudHMKKyAqCisgKiBAZGV2OiB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIHJldHVybnMgbm9uZS4KKyAqLwordm9pZCBhbGxvY2F0ZV9tZV9jbGllbnRzX3N0b3JhZ2Uoc3RydWN0IG1laV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbWVpX21lX2NsaWVudCAqY2xpZW50czsKKwlpbnQgYjsKKworCS8qIGNvdW50IGhvdyBtYW55IE1FIGNsaWVudHMgd2UgaGF2ZSAqLworCWZvcl9lYWNoX3NldF9iaXQoYiwgZGV2LT5tZV9jbGllbnRzX21hcCwgTUVJX0NMSUVOVFNfTUFYKQorCQlkZXYtPm51bV9tZWlfbWVfY2xpZW50cysrOworCisJaWYgKGRldi0+bnVtX21laV9tZV9jbGllbnRzIDw9IDApCisJCXJldHVybiA7CisKKworCWlmIChkZXYtPm1lX2NsaWVudHMgIT0gTlVMTCkgeworCQlrZnJlZShkZXYtPm1lX2NsaWVudHMpOworCQlkZXYtPm1lX2NsaWVudHMgPSBOVUxMOworCX0KKwlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgIm1lbW9yeSBhbGxvY2F0aW9uIGZvciBNRSBjbGllbnRzIHNpemU9JXpkLlxuIiwKKwkJZGV2LT5udW1fbWVpX21lX2NsaWVudHMgKiBzaXplb2Yoc3RydWN0IG1laV9tZV9jbGllbnQpKTsKKwkvKiBhbGxvY2F0ZSBzdG9yYWdlIGZvciBNRSBjbGllbnRzIHJlcHJlc2VudGF0aW9uICovCisJY2xpZW50cyA9IGtjYWxsb2MoZGV2LT5udW1fbWVpX21lX2NsaWVudHMsCisJCQlzaXplb2Yoc3RydWN0IG1laV9tZV9jbGllbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNsaWVudHMpIHsKKwkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJtZW1vcnkgYWxsb2NhdGlvbiBmb3IgTUUgY2xpZW50cyBmYWlsZWQuXG4iKTsKKwkJZGV2LT5tZWlfc3RhdGUgPSBNRUlfUkVTRVRJTkc7CisJCW1laV9yZXNldChkZXYsIDEpOworCQlyZXR1cm4gOworCX0KKwlkZXYtPm1lX2NsaWVudHMgPSBjbGllbnRzOworCXJldHVybiA7Cit9CisvKioKKyAqIGhvc3RfY2xpZW50X3Byb3BlcnRpZXMgLSByZWFkcyBwcm9wZXJ0aWVzIGZvciBjbGllbnQKKyAqCisgKiBAZGV2OiB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIHJldHVybnMgbm9uZS4KKyAqLwordm9pZCBob3N0X2NsaWVudF9wcm9wZXJ0aWVzKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1laV9tc2dfaGRyICptZWlfaGVhZGVyOworCXN0cnVjdCBoYm1fcHJvcHNfcmVxdWVzdCAqaG9zdF9jbGlfcmVxOworCWludCBiOworCXU4IGNsaWVudF9udW0gPSBkZXYtPm1lX2NsaWVudF9wcmVzZW50YXRpb25fbnVtOworCisJYiA9IGRldi0+bWVfY2xpZW50X2luZGV4OworCWIgPSBmaW5kX25leHRfYml0KGRldi0+bWVfY2xpZW50c19tYXAsIE1FSV9DTElFTlRTX01BWCwgYik7CisJaWYgKGIgPCBNRUlfQ0xJRU5UU19NQVgpIHsKKwkJZGV2LT5tZV9jbGllbnRzW2NsaWVudF9udW1dLmNsaWVudF9pZCA9IGI7CisJCWRldi0+bWVfY2xpZW50c1tjbGllbnRfbnVtXS5tZWlfZmxvd19jdHJsX2NyZWRzID0gMDsKKwkJbWVpX2hlYWRlciA9IChzdHJ1Y3QgbWVpX21zZ19oZHIgKikmZGV2LT53cl9tc2dfYnVmWzBdOworCQltZWlfaGVhZGVyLT5ob3N0X2FkZHIgPSAwOworCQltZWlfaGVhZGVyLT5tZV9hZGRyID0gMDsKKwkJbWVpX2hlYWRlci0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBoYm1fcHJvcHNfcmVxdWVzdCk7CisJCW1laV9oZWFkZXItPm1zZ19jb21wbGV0ZSA9IDE7CisJCW1laV9oZWFkZXItPnJlc2VydmVkID0gMDsKKworCQlob3N0X2NsaV9yZXEgPSAoc3RydWN0IGhibV9wcm9wc19yZXF1ZXN0ICopJmRldi0+d3JfbXNnX2J1ZlsxXTsKKworCQltZW1zZXQoaG9zdF9jbGlfcmVxLCAwLCBzaXplb2Yoc3RydWN0IGhibV9wcm9wc19yZXF1ZXN0KSk7CisKKwkJaG9zdF9jbGlfcmVxLT5jbWQuY21kID0gSE9TVF9DTElFTlRfUFJPUEVSVElFU19SRVFfQ01EOworCQlob3N0X2NsaV9yZXEtPmFkZHJlc3MgPSBiOworCisJCWlmICghbWVpX3dyaXRlX21lc3NhZ2UoZGV2LCBtZWlfaGVhZGVyLAorCQkJCSh1bnNpZ25lZCBjaGFyICopaG9zdF9jbGlfcmVxLAorCQkJCW1laV9oZWFkZXItPmxlbmd0aCkpIHsKKwkJCWRldi0+bWVpX3N0YXRlID0gTUVJX1JFU0VUSU5HOworCQkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJ3cml0ZSBzZW5kIGVudW1lcmF0aW9uIHJlcXVlc3QgbWVzc2FnZSB0byBGVyBmYWlsLlxuIik7CisJCQltZWlfcmVzZXQoZGV2LCAxKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWRldi0+aW5pdF9jbGllbnRzX3RpbWVyID0gSU5JVF9DTElFTlRTX1RJTUVPVVQ7CisJCWRldi0+bWVfY2xpZW50X2luZGV4ID0gYjsKKwkJcmV0dXJuOworCX0KKworCisJLyoKKwkgKiBDbGVhciBNYXAgZm9yIGluZGljYXRpbmcgbm93IE1FIGNsaWVudHMKKwkgKiB3aXRoIGFzc29jaWF0ZWQgaG9zdCBjbGllbnQKKwkgKi8KKwliaXRtYXBfemVybyhkZXYtPmhvc3RfY2xpZW50c19tYXAsIE1FSV9DTElFTlRTX01BWCk7CisJZGV2LT53cml0ZV9oYW5nID0gLTE7CisJZGV2LT5vcGVuX2hhbmRsZV9jb3VudCA9IDA7CisJYml0bWFwX3NldChkZXYtPmhvc3RfY2xpZW50c19tYXAsIDAsIDMpOworCWRldi0+bWVpX3N0YXRlID0gTUVJX0VOQUJMRUQ7CisKKwltZWlfd2RfaG9zdF9pbml0KGRldik7CisJcmV0dXJuOworfQorCisvKioKKyAqIG1laV9pbml0X2ZpbGVfcHJpdmF0ZSAtIGluaXRpYWxpemVzIHByaXZhdGUgZmlsZSBzdHJ1Y3R1cmUuCisgKgorICogQHByaXY6IHByaXZhdGUgZmlsZSBzdHJ1Y3R1cmUgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqIEBmaWxlOiB0aGUgZmlsZSBzdHJ1Y3R1cmUKKyAqLwordm9pZCBtZWlfaW5pdF9maWxlX3ByaXZhdGUoc3RydWN0IG1laV9jbCAqcHJpdiwgc3RydWN0IG1laV9kZXZpY2UgKmRldikKK3sKKwltZW1zZXQocHJpdiwgMCwgc2l6ZW9mKHN0cnVjdCBtZWlfY2wpKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT53YWl0KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT5yeF93YWl0KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT50eF93YWl0KTsKKwlJTklUX0xJU1RfSEVBRCgmcHJpdi0+bGluayk7CisJcHJpdi0+cmVhZGluZ19zdGF0ZSA9IE1FSV9JRExFOworCXByaXYtPndyaXRpbmdfc3RhdGUgPSBNRUlfSURMRTsKKwlwcml2LT5kZXYgPSBkZXY7Cit9CisKK2ludCBtZWlfZmluZF9tZV9jbGllbnRfaW5kZXgoY29uc3Qgc3RydWN0IG1laV9kZXZpY2UgKmRldiwgdXVpZF9sZSBjdXVpZCkKK3sKKwlpbnQgaSwgcmVzID0gLTE7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1fbWVpX21lX2NsaWVudHM7ICsraSkKKwkJaWYgKHV1aWRfbGVfY21wKGN1dWlkLAorCQkJCWRldi0+bWVfY2xpZW50c1tpXS5wcm9wcy5wcm90b2NvbF9uYW1lKSA9PSAwKSB7CisJCQlyZXMgPSBpOworCQkJYnJlYWs7CisJCX0KKworCXJldHVybiByZXM7Cit9CisKKworLyoqCisgKiBtZWlfZmluZF9tZV9jbGllbnRfdXBkYXRlX2ZpbGV4dCAtIHNlYXJjaGVzIGZvciBNRSBjbGllbnQgZ3VpZAorICogICAgICAgICAgICAgICAgICAgICAgIHNldHMgY2xpZW50X2lkIGluIG1laV9maWxlX3ByaXZhdGUgaWYgZm91bmQKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAcHJpdjogcHJpdmF0ZSBmaWxlIHN0cnVjdHVyZSB0byBzZXQgY2xpZW50X2lkIGluCisgKiBAY2d1aWQ6IHNlYXJjaGVkIGd1aWQgb2YgTUUgY2xpZW50CisgKiBAY2xpZW50X2lkOiBpZCBvZiBob3N0IGNsaWVudCB0byBiZSBzZXQgaW4gZmlsZSBwcml2YXRlIHN0cnVjdHVyZQorICoKKyAqIHJldHVybnMgTUUgY2xpZW50IGluZGV4CisgKi8KK3U4IG1laV9maW5kX21lX2NsaWVudF91cGRhdGVfZmlsZXh0KHN0cnVjdCBtZWlfZGV2aWNlICpkZXYsIHN0cnVjdCBtZWlfY2wgKnByaXYsCisJCQkJY29uc3QgdXVpZF9sZSAqY2d1aWQsIHU4IGNsaWVudF9pZCkKK3sKKwlpbnQgaTsKKworCWlmICghZGV2IHx8ICFwcml2IHx8ICFjZ3VpZCkKKwkJcmV0dXJuIDA7CisKKwkvKiBjaGVjayBmb3IgdmFsaWQgY2xpZW50IGlkICovCisJaSA9IG1laV9maW5kX21lX2NsaWVudF9pbmRleChkZXYsICpjZ3VpZCk7CisJaWYgKGkgPj0gMCkgeworCQlwcml2LT5tZV9jbGllbnRfaWQgPSBkZXYtPm1lX2NsaWVudHNbaV0uY2xpZW50X2lkOworCQlwcml2LT5zdGF0ZSA9IE1FSV9GSUxFX0NPTk5FQ1RJTkc7CisJCXByaXYtPmhvc3RfY2xpZW50X2lkID0gY2xpZW50X2lkOworCisJCWxpc3RfYWRkX3RhaWwoJnByaXYtPmxpbmssICZkZXYtPmZpbGVfbGlzdCk7CisJCXJldHVybiAodTgpaTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBob3N0X2luaXRfaWFtdGhpZiAtIG1laSBpbml0aWFsaXphdGlvbiBpYW10aGlmIGNsaWVudC4KKyAqCisgKiBAZGV2OiB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqLwordm9pZCBob3N0X2luaXRfaWFtdGhpZihzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KQoreworCXU4IGk7CisJdW5zaWduZWQgY2hhciAqbXNnX2J1ZjsKKworCW1laV9pbml0X2ZpbGVfcHJpdmF0ZSgmZGV2LT5pYW10aGlmX2NsLCBkZXYpOworCWRldi0+aWFtdGhpZl9jbC5zdGF0ZSA9IE1FSV9GSUxFX0RJU0NPTk5FQ1RFRDsKKworCS8qIGZpbmQgTUUgYW10aGkgY2xpZW50ICovCisJaSA9IG1laV9maW5kX21lX2NsaWVudF91cGRhdGVfZmlsZXh0KGRldiwgJmRldi0+aWFtdGhpZl9jbCwKKwkJCSAgICAmbWVpX2FtdGhpX2d1aWQsIE1FSV9JQU1USElGX0hPU1RfQ0xJRU5UX0lEKTsKKwlpZiAoZGV2LT5pYW10aGlmX2NsLnN0YXRlICE9IE1FSV9GSUxFX0NPTk5FQ1RJTkcpIHsKKwkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJmYWlsZWQgdG8gZmluZCBpYW10aGlmIGNsaWVudC5cbiIpOworCQlyZXR1cm47CisJfQorCisJLyogRG8gbm90IHJlbmRlciB0aGUgc3lzdGVtIHVudXNhYmxlIHdoZW4gaWFtdGhpZl9tdHUgaXMgbm90IGVxdWFsIHRvCisJdGhlIHZhbHVlIHJlY2VpdmVkIGZyb20gTUUuCisJQXNzaWduIGlhbXRoaWZfbXR1IHRvIHRoZSB2YWx1ZSByZWNlaXZlZCBmcm9tIE1FIGluIG9yZGVyIHRvIHNvbHZlIHRoZQorCWhhcmR3YXJlIG1hY3JvIGluY29tcGF0aWJpbGl0eS4gKi8KKworCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiW0RFRkFVTFRdIElBTVRISUYgPSAlZFxuIiwgZGV2LT5pYW10aGlmX210dSk7CisJZGV2LT5pYW10aGlmX210dSA9IGRldi0+bWVfY2xpZW50c1tpXS5wcm9wcy5tYXhfbXNnX2xlbmd0aDsKKwlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwKKwkJCSJJQU1USElGID0gJWRcbiIsCisJCQlkZXYtPm1lX2NsaWVudHNbaV0ucHJvcHMubWF4X21zZ19sZW5ndGgpOworCisJa2ZyZWUoZGV2LT5pYW10aGlmX21zZ19idWYpOworCWRldi0+aWFtdGhpZl9tc2dfYnVmID0gTlVMTDsKKworCS8qIGFsbG9jYXRlIHN0b3JhZ2UgZm9yIE1FIG1lc3NhZ2UgYnVmZmVyICovCisJbXNnX2J1ZiA9IGtjYWxsb2MoZGV2LT5pYW10aGlmX210dSwKKwkJCXNpemVvZih1bnNpZ25lZCBjaGFyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtc2dfYnVmKSB7CisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAibWVtb3J5IGFsbG9jYXRpb24gZm9yIE1FIG1lc3NhZ2UgYnVmZmVyIGZhaWxlZC5cbiIpOworCQlyZXR1cm47CisJfQorCisJZGV2LT5pYW10aGlmX21zZ19idWYgPSBtc2dfYnVmOworCisJaWYgKCFtZWlfY29ubmVjdChkZXYsICZkZXYtPmlhbXRoaWZfY2wpKSB7CisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiRmFpbGVkIHRvIGNvbm5lY3QgdG8gQU1USEkgY2xpZW50XG4iKTsKKwkJZGV2LT5pYW10aGlmX2NsLnN0YXRlID0gTUVJX0ZJTEVfRElTQ09OTkVDVEVEOworCQlkZXYtPmlhbXRoaWZfY2wuaG9zdF9jbGllbnRfaWQgPSAwOworCX0gZWxzZSB7CisJCWRldi0+aWFtdGhpZl9jbC50aW1lcl9jb3VudCA9IENPTk5FQ1RfVElNRU9VVDsKKwl9Cit9CisKKy8qKgorICogbWVpX2FsbG9jX2ZpbGVfcHJpdmF0ZSAtIGFsbG9jYXRlcyBhIHByaXZhdGUgZmlsZSBzdHJ1Y3R1cmUgYW5kIHNldHMgaXQgdXAuCisgKiBAZmlsZTogdGhlIGZpbGUgc3RydWN0dXJlCisgKgorICogcmV0dXJucyAgVGhlIGFsbG9jYXRlZCBmaWxlIG9yIE5VTEwgb24gZmFpbHVyZQorICovCitzdHJ1Y3QgbWVpX2NsICptZWlfYWxsb2NfZmlsZV9wcml2YXRlKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1laV9jbCAqcHJpdjsKKworCXByaXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWVpX2NsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gTlVMTDsKKworCW1laV9pbml0X2ZpbGVfcHJpdmF0ZShwcml2LCBkZXYpOworCisJcmV0dXJuIHByaXY7Cit9CisKKworCisvKioKKyAqIG1laV9kaXNjb25uZWN0X2hvc3RfY2xpZW50IC0gc2VuZHMgZGlzY29ubmVjdCBtZXNzYWdlIHRvIGZ3IGZyb20gaG9zdCBjbGllbnQuCisgKgorICogQGRldjogdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBjbDogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdAorICoKKyAqIExvY2tpbmc6IGNhbGxlZCB1bmRlciAiZGV2LT5kZXZpY2VfbG9jayIgbG9jaworICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlLgorICovCitpbnQgbWVpX2Rpc2Nvbm5lY3RfaG9zdF9jbGllbnQoc3RydWN0IG1laV9kZXZpY2UgKmRldiwgc3RydWN0IG1laV9jbCAqY2wpCit7CisJaW50IHJldHMsIGVycjsKKwlsb25nIHRpbWVvdXQgPSAxNTsJLyogMTUgc2Vjb25kcyAqLworCXN0cnVjdCBtZWlfY2xfY2IgKmNiOworCisJaWYgKCFkZXYgfHwgIWNsKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChjbC0+c3RhdGUgIT0gTUVJX0ZJTEVfRElTQ09OTkVDVElORykKKwkJcmV0dXJuIDA7CisKKwljYiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtZWlfY2xfY2IpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCUlOSVRfTElTVF9IRUFEKCZjYi0+Y2JfbGlzdCk7CisJY2ItPmZpbGVfcHJpdmF0ZSA9IGNsOworCWNiLT5tYWpvcl9maWxlX29wZXJhdGlvbnMgPSBNRUlfQ0xPU0U7CisJaWYgKGRldi0+bWVpX2hvc3RfYnVmZmVyX2lzX2VtcHR5KSB7CisJCWRldi0+bWVpX2hvc3RfYnVmZmVyX2lzX2VtcHR5ID0gMDsKKwkJaWYgKG1laV9kaXNjb25uZWN0KGRldiwgY2wpKSB7CisJCQltZGVsYXkoMTApOyAvKiBXYWl0IGZvciBoYXJkd2FyZSBkaXNjb25uZWN0aW9uIHJlYWR5ICovCisJCQlsaXN0X2FkZF90YWlsKCZjYi0+Y2JfbGlzdCwKKwkJCQkmZGV2LT5jdHJsX3JkX2xpc3QubWVpX2NiLmNiX2xpc3QpOworCQl9IGVsc2UgeworCQkJcmV0cyA9IC1FTk9ERVY7CisJCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgImZhaWxlZCB0byBjYWxsIG1laV9kaXNjb25uZWN0LlxuIik7CisJCQlnb3RvIGZyZWU7CisJCX0KKwl9IGVsc2UgeworCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgImFkZCBkaXNjb25uZWN0IGNiIHRvIGNvbnRyb2wgd3JpdGUgbGlzdFxuIik7CisJCWxpc3RfYWRkX3RhaWwoJmNiLT5jYl9saXN0LAorCQkJCSZkZXYtPmN0cmxfd3JfbGlzdC5tZWlfY2IuY2JfbGlzdCk7CisJfQorCW11dGV4X3VubG9jaygmZGV2LT5kZXZpY2VfbG9jayk7CisKKwllcnIgPSB3YWl0X2V2ZW50X3RpbWVvdXQoZGV2LT53YWl0X3JlY3ZkX21zZywKKwkJIChNRUlfRklMRV9ESVNDT05ORUNURUQgPT0gY2wtPnN0YXRlKSwKKwkJIHRpbWVvdXQgKiBIWik7CisKKwltdXRleF9sb2NrKCZkZXYtPmRldmljZV9sb2NrKTsKKwlpZiAoTUVJX0ZJTEVfRElTQ09OTkVDVEVEID09IGNsLT5zdGF0ZSkgeworCQlyZXRzID0gMDsKKwkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJzdWNjZXNzZnVsbHkgZGlzY29ubmVjdGVkIGZyb20gRlcgY2xpZW50LlxuIik7CisJfSBlbHNlIHsKKwkJcmV0cyA9IC1FTk9ERVY7CisJCWlmIChNRUlfRklMRV9ESVNDT05ORUNURUQgIT0gY2wtPnN0YXRlKQorCQkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJ3cm9uZyBzdGF0dXMgY2xpZW50IGRpc2Nvbm5lY3QuXG4iKTsKKworCQlpZiAoZXJyKQorCQkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsCisJCQkJCSJ3YWl0IGZhaWxlZCBkaXNjb25uZWN0IGVycj0lMDh4XG4iLAorCQkJCQllcnIpOworCisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiZmFpbGVkIHRvIGRpc2Nvbm5lY3QgZnJvbSBGVyBjbGllbnQuXG4iKTsKKwl9CisKKwltZWlfZmx1c2hfbGlzdCgmZGV2LT5jdHJsX3JkX2xpc3QsIGNsKTsKKwltZWlfZmx1c2hfbGlzdCgmZGV2LT5jdHJsX3dyX2xpc3QsIGNsKTsKK2ZyZWU6CisJbWVpX2ZyZWVfY2JfcHJpdmF0ZShjYik7CisJcmV0dXJuIHJldHM7Cit9CisKKy8qKgorICogbWVpX3JlbW92ZV9jbGllbnRfZnJvbV9maWxlX2xpc3QgLQorICoJcmVtb3ZlcyBmaWxlIHByaXZhdGUgZGF0YSBmcm9tIGRldmljZSBmaWxlIGxpc3QKKyAqCisgKiBAZGV2OiB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICogQGhvc3RfY2xpZW50X2lkOiBob3N0IGNsaWVudCBpZCB0byBiZSByZW1vdmVkCisgKi8KK3ZvaWQgbWVpX3JlbW92ZV9jbGllbnRfZnJvbV9maWxlX2xpc3Qoc3RydWN0IG1laV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgdTggaG9zdF9jbGllbnRfaWQpCit7CisJc3RydWN0IG1laV9jbCAqY2xfcG9zID0gTlVMTDsKKwlzdHJ1Y3QgbWVpX2NsICpjbF9uZXh0ID0gTlVMTDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2xfcG9zLCBjbF9uZXh0LCAmZGV2LT5maWxlX2xpc3QsIGxpbmspIHsKKwkJaWYgKGhvc3RfY2xpZW50X2lkID09IGNsX3Bvcy0+aG9zdF9jbGllbnRfaWQpIHsKKwkJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAicmVtb3ZlIGhvc3QgY2xpZW50ID0gJWQsIE1FIGNsaWVudCA9ICVkXG4iLAorCQkJCQljbF9wb3MtPmhvc3RfY2xpZW50X2lkLAorCQkJCQljbF9wb3MtPm1lX2NsaWVudF9pZCk7CisJCQlsaXN0X2RlbF9pbml0KCZjbF9wb3MtPmxpbmspOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpL2ludGVyZmFjZS5jIGIvZHJpdmVycy9zdGFnaW5nL21laS9pbnRlcmZhY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTU5YWFlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laS9pbnRlcmZhY2UuYwpAQCAtMCwwICsxLDQ0NyBAQAorLyoKKyAqCisgKiBJbnRlbCBNYW5hZ2VtZW50IEVuZ2luZSBJbnRlcmZhY2UgKEludGVsIE1FSSkgTGludXggZHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAxMSwgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSAibWVpX2Rldi5oIgorI2luY2x1ZGUgIm1laS5oIgorI2luY2x1ZGUgImludGVyZmFjZS5oIgorCisKKworLyoqCisgKiBtZWlfc2V0X2Nzcl9yZWdpc3RlciAtIHdyaXRlcyBIX0NTUiByZWdpc3RlciB0byB0aGUgbWVpIGRldmljZSwKKyAqIGFuZCBpZ25vcmVzIHRoZSBIX0lTIGJpdCBmb3IgaXQgaXMgd3JpdGUtb25lLXRvLXplcm8uCisgKgorICogQGRldjogdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqLwordm9pZCBtZWlfaGNzcl9zZXQoc3RydWN0IG1laV9kZXZpY2UgKmRldikKK3sKKwlpZiAoKGRldi0+aG9zdF9od19zdGF0ZSAmIEhfSVMpID09IEhfSVMpCisJCWRldi0+aG9zdF9od19zdGF0ZSAmPSB+SF9JUzsKKwltZWlfcmVnX3dyaXRlKGRldiwgSF9DU1IsIGRldi0+aG9zdF9od19zdGF0ZSk7CisJZGV2LT5ob3N0X2h3X3N0YXRlID0gbWVpX2hjc3JfcmVhZChkZXYpOworfQorCisvKioKKyAqIG1laV9jc3JfZW5hYmxlX2ludGVycnVwdHMgLSBlbmFibGVzIG1laSBkZXZpY2UgaW50ZXJydXB0cworICoKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKi8KK3ZvaWQgbWVpX2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYpCit7CisJZGV2LT5ob3N0X2h3X3N0YXRlIHw9IEhfSUU7CisJbWVpX2hjc3Jfc2V0KGRldik7Cit9CisKKy8qKgorICogbWVpX2Nzcl9kaXNhYmxlX2ludGVycnVwdHMgLSBkaXNhYmxlcyBtZWkgZGV2aWNlIGludGVycnVwdHMKKyAqCisgKiBAZGV2OiB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICovCit2b2lkIG1laV9kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IG1laV9kZXZpY2UgKmRldikKK3sKKwlkZXYtPmhvc3RfaHdfc3RhdGUgJj0gfkhfSUU7CisJbWVpX2hjc3Jfc2V0KGRldik7Cit9CisKKy8qKgorICogX2hvc3RfZ2V0X2ZpbGxlZF9zbG90cyAtIGdldHMgbnVtYmVyIG9mIGRldmljZSBmaWxsZWQgYnVmZmVyIHNsb3RzCisgKgorICogQGRldmljZTogdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiByZXR1cm5zIG51bWJlciBvZiBmaWxsZWQgc2xvdHMKKyAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgX2hvc3RfZ2V0X2ZpbGxlZF9zbG90cyhjb25zdCBzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KQoreworCWNoYXIgcmVhZF9wdHIsIHdyaXRlX3B0cjsKKworCXJlYWRfcHRyID0gKGNoYXIpICgoZGV2LT5ob3N0X2h3X3N0YXRlICYgSF9DQlJQKSA+PiA4KTsKKwl3cml0ZV9wdHIgPSAoY2hhcikgKChkZXYtPmhvc3RfaHdfc3RhdGUgJiBIX0NCV1ApID4+IDE2KTsKKworCXJldHVybiAodW5zaWduZWQgY2hhcikgKHdyaXRlX3B0ciAtIHJlYWRfcHRyKTsKK30KKworLyoqCisgKiBtZWlfaG9zdF9idWZmZXJfaXNfZW1wdHkgLSBjaGVja3MgaWYgaG9zdCBidWZmZXIgaXMgZW1wdHkuCisgKgorICogQGRldjogdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiByZXR1cm5zIDEgaWYgZW1wdHksIDAgLSBvdGhlcndpc2UuCisgKi8KK2ludCBtZWlfaG9zdF9idWZmZXJfaXNfZW1wdHkoc3RydWN0IG1laV9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBjaGFyIGZpbGxlZF9zbG90czsKKworCWRldi0+aG9zdF9od19zdGF0ZSA9IG1laV9oY3NyX3JlYWQoZGV2KTsKKwlmaWxsZWRfc2xvdHMgPSBfaG9zdF9nZXRfZmlsbGVkX3Nsb3RzKGRldik7CisKKwlpZiAoZmlsbGVkX3Nsb3RzID09IDApCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbWVpX2NvdW50X2VtcHR5X3dyaXRlX3Nsb3RzIC0gY291bnRzIHdyaXRlIGVtcHR5IHNsb3RzLgorICoKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogcmV0dXJucyAtMShFU0xPVFNfT1ZFUkZMT1cpIGlmIG92ZXJmbG93LCBvdGhlcndpc2UgZW1wdHkgc2xvdHMgY291bnQKKyAqLworaW50IG1laV9jb3VudF9lbXB0eV93cml0ZV9zbG90cyhzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGNoYXIgYnVmZmVyX2RlcHRoLCBmaWxsZWRfc2xvdHMsIGVtcHR5X3Nsb3RzOworCisJZGV2LT5ob3N0X2h3X3N0YXRlID0gbWVpX2hjc3JfcmVhZChkZXYpOworCWJ1ZmZlcl9kZXB0aCA9ICh1bnNpZ25lZCBjaGFyKSAoKGRldi0+aG9zdF9od19zdGF0ZSAmIEhfQ0JEKSA+PiAyNCk7CisJZmlsbGVkX3Nsb3RzID0gX2hvc3RfZ2V0X2ZpbGxlZF9zbG90cyhkZXYpOworCWVtcHR5X3Nsb3RzID0gYnVmZmVyX2RlcHRoIC0gZmlsbGVkX3Nsb3RzOworCisJLyogY2hlY2sgZm9yIG92ZXJmbG93ICovCisJaWYgKGZpbGxlZF9zbG90cyA+IGJ1ZmZlcl9kZXB0aCkKKwkJcmV0dXJuIC1FT1ZFUkZMT1c7CisKKwlyZXR1cm4gZW1wdHlfc2xvdHM7Cit9CisKKy8qKgorICogbWVpX3dyaXRlX21lc3NhZ2UgLSB3cml0ZXMgYSBtZXNzYWdlIHRvIG1laSBkZXZpY2UuCisgKgorICogQGRldjogdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBoZWFkZXI6IGhlYWRlciBvZiBtZXNzYWdlCisgKiBAd3JpdGVfYnVmZmVyOiBtZXNzYWdlIGJ1ZmZlciB3aWxsIGJlIHdyaXR0ZW4KKyAqIEB3cml0ZV9sZW5ndGg6IG1lc3NhZ2Ugc2l6ZSB3aWxsIGJlIHdyaXR0ZW4KKyAqCisgKiByZXR1cm5zIDEgaWYgc3VjY2VzcywgMCAtIG90aGVyd2lzZS4KKyAqLworaW50IG1laV93cml0ZV9tZXNzYWdlKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBtZWlfbXNnX2hkciAqaGVhZGVyLAorCQkJICAgICB1bnNpZ25lZCBjaGFyICp3cml0ZV9idWZmZXIsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgd3JpdGVfbGVuZ3RoKQoreworCXUzMiB0ZW1wX21zZyA9IDA7CisJdW5zaWduZWQgbG9uZyBieXRlc193cml0dGVuID0gMDsKKwl1bnNpZ25lZCBjaGFyIGJ1ZmZlcl9kZXB0aCwgZmlsbGVkX3Nsb3RzLCBlbXB0eV9zbG90czsKKwl1bnNpZ25lZCBsb25nIGR3X3RvX3dyaXRlOworCisJZGV2LT5ob3N0X2h3X3N0YXRlID0gbWVpX2hjc3JfcmVhZChkZXYpOworCisJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsCisJCQkiaG9zdF9od19zdGF0ZSA9IDB4JTA4eC5cbiIsCisJCQlkZXYtPmhvc3RfaHdfc3RhdGUpOworCisJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsCisJCQkibWVpX3dyaXRlX21lc3NhZ2UgaGVhZGVyPSUwOHguXG4iLAorCQkJKigodTMyICopIGhlYWRlcikpOworCisJYnVmZmVyX2RlcHRoID0gKHVuc2lnbmVkIGNoYXIpICgoZGV2LT5ob3N0X2h3X3N0YXRlICYgSF9DQkQpID4+IDI0KTsKKwlmaWxsZWRfc2xvdHMgPSBfaG9zdF9nZXRfZmlsbGVkX3Nsb3RzKGRldik7CisJZW1wdHlfc2xvdHMgPSBidWZmZXJfZGVwdGggLSBmaWxsZWRfc2xvdHM7CisJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsCisJCQkiZmlsbGVkID0gJWh1LCBlbXB0eSA9ICVodS5cbiIsCisJCQlmaWxsZWRfc2xvdHMsIGVtcHR5X3Nsb3RzKTsKKworCWR3X3RvX3dyaXRlID0gKCh3cml0ZV9sZW5ndGggKyAzKSAvIDQpOworCisJaWYgKGR3X3RvX3dyaXRlID4gZW1wdHlfc2xvdHMpCisJCXJldHVybiAwOworCisJbWVpX3JlZ193cml0ZShkZXYsIEhfQ0JfV1csICooKHUzMiAqKSBoZWFkZXIpKTsKKworCXdoaWxlICh3cml0ZV9sZW5ndGggPj0gNCkgeworCQltZWlfcmVnX3dyaXRlKGRldiwgSF9DQl9XVywKKwkJCQkqKHUzMiAqKSAod3JpdGVfYnVmZmVyICsgYnl0ZXNfd3JpdHRlbikpOworCQlieXRlc193cml0dGVuICs9IDQ7CisJCXdyaXRlX2xlbmd0aCAtPSA0OworCX0KKworCWlmICh3cml0ZV9sZW5ndGggPiAwKSB7CisJCW1lbWNweSgmdGVtcF9tc2csICZ3cml0ZV9idWZmZXJbYnl0ZXNfd3JpdHRlbl0sIHdyaXRlX2xlbmd0aCk7CisJCW1laV9yZWdfd3JpdGUoZGV2LCBIX0NCX1dXLCB0ZW1wX21zZyk7CisJfQorCisJZGV2LT5ob3N0X2h3X3N0YXRlIHw9IEhfSUc7CisJbWVpX2hjc3Jfc2V0KGRldik7CisJZGV2LT5tZV9od19zdGF0ZSA9IG1laV9tZWNzcl9yZWFkKGRldik7CisJaWYgKChkZXYtPm1lX2h3X3N0YXRlICYgTUVfUkRZX0hSQSkgIT0gTUVfUkRZX0hSQSkKKwkJcmV0dXJuIDA7CisKKwlkZXYtPndyaXRlX2hhbmcgPSAwOworCXJldHVybiAxOworfQorCisvKioKKyAqIG1laV9jb3VudF9mdWxsX3JlYWRfc2xvdHMgLSBjb3VudHMgcmVhZCBmdWxsIHNsb3RzLgorICoKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogcmV0dXJucyAtMShFU0xPVFNfT1ZFUkZMT1cpIGlmIG92ZXJmbG93LCBvdGhlcndpc2UgZmlsbGVkIHNsb3RzIGNvdW50CisgKi8KK2ludCBtZWlfY291bnRfZnVsbF9yZWFkX3Nsb3RzKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYpCit7CisJY2hhciByZWFkX3B0ciwgd3JpdGVfcHRyOworCXVuc2lnbmVkIGNoYXIgYnVmZmVyX2RlcHRoLCBmaWxsZWRfc2xvdHM7CisKKwlkZXYtPm1lX2h3X3N0YXRlID0gbWVpX21lY3NyX3JlYWQoZGV2KTsKKwlidWZmZXJfZGVwdGggPSAodW5zaWduZWQgY2hhcikoKGRldi0+bWVfaHdfc3RhdGUgJiBNRV9DQkRfSFJBKSA+PiAyNCk7CisJcmVhZF9wdHIgPSAoY2hhcikgKChkZXYtPm1lX2h3X3N0YXRlICYgTUVfQ0JSUF9IUkEpID4+IDgpOworCXdyaXRlX3B0ciA9IChjaGFyKSAoKGRldi0+bWVfaHdfc3RhdGUgJiBNRV9DQldQX0hSQSkgPj4gMTYpOworCWZpbGxlZF9zbG90cyA9ICh1bnNpZ25lZCBjaGFyKSAod3JpdGVfcHRyIC0gcmVhZF9wdHIpOworCisJLyogY2hlY2sgZm9yIG92ZXJmbG93ICovCisJaWYgKGZpbGxlZF9zbG90cyA+IGJ1ZmZlcl9kZXB0aCkKKwkJcmV0dXJuIC1FT1ZFUkZMT1c7CisKKwlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgImZpbGxlZF9zbG90cyA9JTA4eFxuIiwgZmlsbGVkX3Nsb3RzKTsKKwlyZXR1cm4gKGludClmaWxsZWRfc2xvdHM7Cit9CisKKy8qKgorICogbWVpX3JlYWRfc2xvdHMgLSByZWFkcyBhIG1lc3NhZ2UgZnJvbSBtZWkgZGV2aWNlLgorICoKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAYnVmZmVyOiBtZXNzYWdlIGJ1ZmZlciB3aWxsIGJlIHdyaXR0ZW4KKyAqIEBidWZmZXJfbGVuZ3RoOiBtZXNzYWdlIHNpemUgd2lsbCBiZSByZWFkCisgKi8KK3ZvaWQgbWVpX3JlYWRfc2xvdHMoc3RydWN0IG1laV9kZXZpY2UgKmRldiwKKwkJICAgICB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgYnVmZmVyX2xlbmd0aCkKK3sKKwl1MzIgaSA9IDA7CisJdW5zaWduZWQgY2hhciB0ZW1wX2J1ZltzaXplb2YodTMyKV07CisKKwl3aGlsZSAoYnVmZmVyX2xlbmd0aCA+PSBzaXplb2YodTMyKSkgeworCQkoKHUzMiAqKSBidWZmZXIpW2ldID0gbWVpX21lY2Jyd19yZWFkKGRldik7CisKKwkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsCisJCQkJImJ1ZmZlclslZF09ICVkXG4iLAorCQkJCWksICgodTMyICopIGJ1ZmZlcilbaV0pOworCisJCWkrKzsKKwkJYnVmZmVyX2xlbmd0aCAtPSBzaXplb2YodTMyKTsKKwl9CisKKwlpZiAoYnVmZmVyX2xlbmd0aCA+IDApIHsKKwkJKigodTMyICopICZ0ZW1wX2J1ZikgPSBtZWlfbWVjYnJ3X3JlYWQoZGV2KTsKKwkJbWVtY3B5KCZidWZmZXJbaSAqIDRdLCB0ZW1wX2J1ZiwgYnVmZmVyX2xlbmd0aCk7CisJfQorCisJZGV2LT5ob3N0X2h3X3N0YXRlIHw9IEhfSUc7CisJbWVpX2hjc3Jfc2V0KGRldik7Cit9CisKKy8qKgorICogbWVpX2Zsb3dfY3RybF9jcmVkcyAtIGNoZWNrcyBmbG93X2NvbnRyb2wgY3JlZGVudGlhbHMuCisgKgorICogQGRldjogdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBjbDogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdAorICoKKyAqIHJldHVybnMgMSBpZiBtZWlfZmxvd19jdHJsX2NyZWRzID4wLCAwIC0gb3RoZXJ3aXNlLgorICoJLUVOT0VOVCBpZiBtZWlfY2wgaXMgbm90IHByZXNlbnQKKyAqCS1FSU5WQUwgaWYgc2luZ2xlX3JlY3ZfYnVmID09IDAKKyAqLworaW50IG1laV9mbG93X2N0cmxfY3JlZHMoc3RydWN0IG1laV9kZXZpY2UgKmRldiwgc3RydWN0IG1laV9jbCAqY2wpCit7CisJaW50IGk7CisKKwlpZiAoIWRldi0+bnVtX21laV9tZV9jbGllbnRzKQorCQlyZXR1cm4gMDsKKworCWlmIChjbC0+bWVpX2Zsb3dfY3RybF9jcmVkcyA+IDApCisJCXJldHVybiAxOworCisJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX21laV9tZV9jbGllbnRzOyBpKyspIHsKKwkJc3RydWN0IG1laV9tZV9jbGllbnQgICptZV9jbCA9ICZkZXYtPm1lX2NsaWVudHNbaV07CisJCWlmIChtZV9jbC0+Y2xpZW50X2lkID09IGNsLT5tZV9jbGllbnRfaWQpIHsKKwkJCWlmIChtZV9jbC0+bWVpX2Zsb3dfY3RybF9jcmVkcykgeworCQkJCWlmIChXQVJOX09OKG1lX2NsLT5wcm9wcy5zaW5nbGVfcmVjdl9idWYgPT0gMCkpCisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCXJldHVybiAxOworCQkJfSBlbHNlIHsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gLUVOT0VOVDsKK30KKworLyoqCisgKiBtZWlfZmxvd19jdHJsX3JlZHVjZSAtIHJlZHVjZXMgZmxvd19jb250cm9sLgorICoKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAY2w6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QKKyAqIEByZXR1cm5zCisgKgkwIG9uIHN1Y2Nlc3MKKyAqCS1FTk9FTlQgd2hlbiBtZSBjbGllbnQgaXMgbm90IGZvdW5kCisgKgktRUlOVkFMIHdlaG4gY3RybCBjcmVkaXRzIGFyZSA8PSAwCisgKi8KK2ludCBtZWlfZmxvd19jdHJsX3JlZHVjZShzdHJ1Y3QgbWVpX2RldmljZSAqZGV2LCBzdHJ1Y3QgbWVpX2NsICpjbCkKK3sKKwlpbnQgaTsKKworCWlmICghZGV2LT5udW1fbWVpX21lX2NsaWVudHMpCisJCXJldHVybiAtRU5PRU5UOworCisJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX21laV9tZV9jbGllbnRzOyBpKyspIHsKKwkJc3RydWN0IG1laV9tZV9jbGllbnQgICptZV9jbCA9ICZkZXYtPm1lX2NsaWVudHNbaV07CisJCWlmIChtZV9jbC0+Y2xpZW50X2lkID09IGNsLT5tZV9jbGllbnRfaWQpIHsKKwkJCWlmIChtZV9jbC0+cHJvcHMuc2luZ2xlX3JlY3ZfYnVmICE9IDApIHsKKwkJCQlpZiAoV0FSTl9PTihtZV9jbC0+bWVpX2Zsb3dfY3RybF9jcmVkcyA8PSAwKSkKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJZGV2LT5tZV9jbGllbnRzW2ldLm1laV9mbG93X2N0cmxfY3JlZHMtLTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKFdBUk5fT04oY2wtPm1laV9mbG93X2N0cmxfY3JlZHMgPD0gMCkpCisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCWNsLT5tZWlfZmxvd19jdHJsX2NyZWRzLS07CisJCQl9CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gLUVOT0VOVDsKK30KKworLyoqCisgKiBtZWlfc2VuZF9mbG93X2NvbnRyb2wgLSBzZW5kcyBmbG93IGNvbnRyb2wgdG8gZncuCisgKgorICogQGRldjogdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBjbDogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdAorICoKKyAqIHJldHVybnMgMSBpZiBzdWNjZXNzLCAwIC0gb3RoZXJ3aXNlLgorICovCitpbnQgbWVpX3NlbmRfZmxvd19jb250cm9sKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYsIHN0cnVjdCBtZWlfY2wgKmNsKQoreworCXN0cnVjdCBtZWlfbXNnX2hkciAqbWVpX2hkcjsKKwlzdHJ1Y3QgaGJtX2Zsb3dfY29udHJvbCAqbWVpX2Zsb3dfY29udHJvbDsKKworCW1laV9oZHIgPSAoc3RydWN0IG1laV9tc2dfaGRyICopICZkZXYtPndyX21zZ19idWZbMF07CisJbWVpX2hkci0+aG9zdF9hZGRyID0gMDsKKwltZWlfaGRyLT5tZV9hZGRyID0gMDsKKwltZWlfaGRyLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhibV9mbG93X2NvbnRyb2wpOworCW1laV9oZHItPm1zZ19jb21wbGV0ZSA9IDE7CisJbWVpX2hkci0+cmVzZXJ2ZWQgPSAwOworCisJbWVpX2Zsb3dfY29udHJvbCA9IChzdHJ1Y3QgaGJtX2Zsb3dfY29udHJvbCAqKSAmZGV2LT53cl9tc2dfYnVmWzFdOworCW1lbXNldChtZWlfZmxvd19jb250cm9sLCAwLCBzaXplb2YobWVpX2Zsb3dfY29udHJvbCkpOworCW1laV9mbG93X2NvbnRyb2wtPmhvc3RfYWRkciA9IGNsLT5ob3N0X2NsaWVudF9pZDsKKwltZWlfZmxvd19jb250cm9sLT5tZV9hZGRyID0gY2wtPm1lX2NsaWVudF9pZDsKKwltZWlfZmxvd19jb250cm9sLT5jbWQuY21kID0gTUVJX0ZMT1dfQ09OVFJPTF9DTUQ7CisJbWVtc2V0KG1laV9mbG93X2NvbnRyb2wtPnJlc2VydmVkLCAwLAorCQkJc2l6ZW9mKG1laV9mbG93X2NvbnRyb2wtPnJlc2VydmVkKSk7CisJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJzZW5kaW5nIGZsb3cgY29udHJvbCBob3N0IGNsaWVudCA9ICVkLCBNRSBjbGllbnQgPSAlZFxuIiwKKwkgICAgY2wtPmhvc3RfY2xpZW50X2lkLCBjbC0+bWVfY2xpZW50X2lkKTsKKwlpZiAoIW1laV93cml0ZV9tZXNzYWdlKGRldiwgbWVpX2hkciwKKwkJCQkodW5zaWduZWQgY2hhciAqKSBtZWlfZmxvd19jb250cm9sLAorCQkJCXNpemVvZihzdHJ1Y3QgaGJtX2Zsb3dfY29udHJvbCkpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworCit9CisKKy8qKgorICogbWVpX290aGVyX2NsaWVudF9pc19jb25uZWN0aW5nIC0gY2hlY2tzIGlmIG90aGVyCisgKiAgICBjbGllbnQgd2l0aCB0aGUgc2FtZSBjbGllbnQgaWQgaXMgY29ubmVjdGVkLgorICoKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAY2w6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QKKyAqCisgKiByZXR1cm5zIDEgaWYgb3RoZXIgY2xpZW50IGlzIGNvbm5lY3RlZCwgMCAtIG90aGVyd2lzZS4KKyAqLworaW50IG1laV9vdGhlcl9jbGllbnRfaXNfY29ubmVjdGluZyhzdHJ1Y3QgbWVpX2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBtZWlfY2wgKmNsKQoreworCXN0cnVjdCBtZWlfY2wgKmNsX3BvcyA9IE5VTEw7CisJc3RydWN0IG1laV9jbCAqY2xfbmV4dCA9IE5VTEw7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2xfcG9zLCBjbF9uZXh0LCAmZGV2LT5maWxlX2xpc3QsIGxpbmspIHsKKwkJaWYgKChjbF9wb3MtPnN0YXRlID09IE1FSV9GSUxFX0NPTk5FQ1RJTkcpICYmCisJCQkoY2xfcG9zICE9IGNsKSAmJgorCQkJY2wtPm1lX2NsaWVudF9pZCA9PSBjbF9wb3MtPm1lX2NsaWVudF9pZCkKKwkJCXJldHVybiAxOworCisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIG1laV9kaXNjb25uZWN0IC0gc2VuZHMgZGlzY29ubmVjdCBtZXNzYWdlIHRvIGZ3LgorICoKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAY2w6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QKKyAqCisgKiByZXR1cm5zIDEgaWYgc3VjY2VzcywgMCAtIG90aGVyd2lzZS4KKyAqLworaW50IG1laV9kaXNjb25uZWN0KHN0cnVjdCBtZWlfZGV2aWNlICpkZXYsIHN0cnVjdCBtZWlfY2wgKmNsKQoreworCXN0cnVjdCBtZWlfbXNnX2hkciAqbWVpX2hkcjsKKwlzdHJ1Y3QgaGJtX2NsaWVudF9kaXNjb25uZWN0X3JlcXVlc3QgKm1laV9jbGlfZGlzY29ubmVjdDsKKworCW1laV9oZHIgPSAoc3RydWN0IG1laV9tc2dfaGRyICopICZkZXYtPndyX21zZ19idWZbMF07CisJbWVpX2hkci0+aG9zdF9hZGRyID0gMDsKKwltZWlfaGRyLT5tZV9hZGRyID0gMDsKKwltZWlfaGRyLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhibV9jbGllbnRfZGlzY29ubmVjdF9yZXF1ZXN0KTsKKwltZWlfaGRyLT5tc2dfY29tcGxldGUgPSAxOworCW1laV9oZHItPnJlc2VydmVkID0gMDsKKworCW1laV9jbGlfZGlzY29ubmVjdCA9CisJICAgIChzdHJ1Y3QgaGJtX2NsaWVudF9kaXNjb25uZWN0X3JlcXVlc3QgKikgJmRldi0+d3JfbXNnX2J1ZlsxXTsKKwltZW1zZXQobWVpX2NsaV9kaXNjb25uZWN0LCAwLCBzaXplb2YobWVpX2NsaV9kaXNjb25uZWN0KSk7CisJbWVpX2NsaV9kaXNjb25uZWN0LT5ob3N0X2FkZHIgPSBjbC0+aG9zdF9jbGllbnRfaWQ7CisJbWVpX2NsaV9kaXNjb25uZWN0LT5tZV9hZGRyID0gY2wtPm1lX2NsaWVudF9pZDsKKwltZWlfY2xpX2Rpc2Nvbm5lY3QtPmNtZC5jbWQgPSBDTElFTlRfRElTQ09OTkVDVF9SRVFfQ01EOworCW1laV9jbGlfZGlzY29ubmVjdC0+cmVzZXJ2ZWRbMF0gPSAwOworCisJaWYgKCFtZWlfd3JpdGVfbWVzc2FnZShkZXYsIG1laV9oZHIsCisJCQkJKHVuc2lnbmVkIGNoYXIgKikgbWVpX2NsaV9kaXNjb25uZWN0LAorCQkJCXNpemVvZihzdHJ1Y3QgaGJtX2NsaWVudF9kaXNjb25uZWN0X3JlcXVlc3QpKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiBtZWlfY29ubmVjdCAtIHNlbmRzIGNvbm5lY3QgbWVzc2FnZSB0byBmdy4KKyAqCisgKiBAZGV2OiB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICogQGNsOiBwcml2YXRlIGRhdGEgb2YgdGhlIGZpbGUgb2JqZWN0CisgKgorICogcmV0dXJucyAxIGlmIHN1Y2Nlc3MsIDAgLSBvdGhlcndpc2UuCisgKi8KK2ludCBtZWlfY29ubmVjdChzdHJ1Y3QgbWVpX2RldmljZSAqZGV2LCBzdHJ1Y3QgbWVpX2NsICpjbCkKK3sKKwlzdHJ1Y3QgbWVpX21zZ19oZHIgKm1laV9oZHI7CisJc3RydWN0IGhibV9jbGllbnRfY29ubmVjdF9yZXF1ZXN0ICptZWlfY2xpX2Nvbm5lY3Q7CisKKwltZWlfaGRyID0gKHN0cnVjdCBtZWlfbXNnX2hkciAqKSAmZGV2LT53cl9tc2dfYnVmWzBdOworCW1laV9oZHItPmhvc3RfYWRkciA9IDA7CisJbWVpX2hkci0+bWVfYWRkciA9IDA7CisJbWVpX2hkci0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBoYm1fY2xpZW50X2Nvbm5lY3RfcmVxdWVzdCk7CisJbWVpX2hkci0+bXNnX2NvbXBsZXRlID0gMTsKKwltZWlfaGRyLT5yZXNlcnZlZCA9IDA7CisKKwltZWlfY2xpX2Nvbm5lY3QgPQorCSAgICAoc3RydWN0IGhibV9jbGllbnRfY29ubmVjdF9yZXF1ZXN0ICopICZkZXYtPndyX21zZ19idWZbMV07CisJbWVpX2NsaV9jb25uZWN0LT5ob3N0X2FkZHIgPSBjbC0+aG9zdF9jbGllbnRfaWQ7CisJbWVpX2NsaV9jb25uZWN0LT5tZV9hZGRyID0gY2wtPm1lX2NsaWVudF9pZDsKKwltZWlfY2xpX2Nvbm5lY3QtPmNtZC5jbWQgPSBDTElFTlRfQ09OTkVDVF9SRVFfQ01EOworCW1laV9jbGlfY29ubmVjdC0+cmVzZXJ2ZWQgPSAwOworCisJaWYgKCFtZWlfd3JpdGVfbWVzc2FnZShkZXYsIG1laV9oZHIsCisJCQkJKHVuc2lnbmVkIGNoYXIgKikgbWVpX2NsaV9jb25uZWN0LAorCQkJCXNpemVvZihzdHJ1Y3QgaGJtX2NsaWVudF9jb25uZWN0X3JlcXVlc3QpKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWkvaW50ZXJmYWNlLmggYi9kcml2ZXJzL3N0YWdpbmcvbWVpL2ludGVyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwYmY1Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpL2ludGVyZmFjZS5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKgorICogSW50ZWwgTWFuYWdlbWVudCBFbmdpbmUgSW50ZXJmYWNlIChJbnRlbCBNRUkpIExpbnV4IGRyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMTEsIEludGVsIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworCisKKyNpZm5kZWYgX01FSV9JTlRFUkZBQ0VfSF8KKyNkZWZpbmUgX01FSV9JTlRFUkZBQ0VfSF8KKworI2luY2x1ZGUgIm1laS5oIgorI2luY2x1ZGUgIm1laV9kZXYuaCIKKworCisjZGVmaW5lIEFNVF9XRF9WQUxVRSAxMjAJLyogc2Vjb25kcyAqLworCisjZGVmaW5lIE1FSV9XQVRDSERPR19EQVRBX1NJWkUgICAgICAgICAxNgorI2RlZmluZSBNRUlfU1RBUlRfV0RfREFUQV9TSVpFICAgICAgICAgMjAKKyNkZWZpbmUgTUVJX1dEX1BBUkFNU19TSVpFICAgICAgICAgICAgIDQKKworCit2b2lkIG1laV9yZWFkX3Nsb3RzKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYsCisJCSAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGJ1ZmZlcl9sZW5ndGgpOworCitpbnQgbWVpX3dyaXRlX21lc3NhZ2Uoc3RydWN0IG1laV9kZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IG1laV9tc2dfaGRyICpoZWFkZXIsCisJCQkgICAgIHVuc2lnbmVkIGNoYXIgKndyaXRlX2J1ZmZlciwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyB3cml0ZV9sZW5ndGgpOworCitpbnQgbWVpX2hvc3RfYnVmZmVyX2lzX2VtcHR5KHN0cnVjdCBtZWlfZGV2aWNlICpkZXYpOworCitpbnQgbWVpX2NvdW50X2Z1bGxfcmVhZF9zbG90cyhzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KTsKKworaW50IG1laV9jb3VudF9lbXB0eV93cml0ZV9zbG90cyhzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KTsKKworaW50IG1laV9mbG93X2N0cmxfY3JlZHMoc3RydWN0IG1laV9kZXZpY2UgKmRldiwgc3RydWN0IG1laV9jbCAqY2wpOworCitpbnQgbWVpX3dkX3NlbmQoc3RydWN0IG1laV9kZXZpY2UgKmRldik7CitpbnQgbWVpX3dkX3N0b3Aoc3RydWN0IG1laV9kZXZpY2UgKmRldiwgYm9vbCBwcmVzZXJ2ZSk7Cit2b2lkIG1laV93ZF9ob3N0X2luaXQoc3RydWN0IG1laV9kZXZpY2UgKmRldik7Cit2b2lkIG1laV93ZF9zdGFydF9zZXR1cChzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KTsKKworaW50IG1laV9mbG93X2N0cmxfcmVkdWNlKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYsIHN0cnVjdCBtZWlfY2wgKmNsKTsKKworaW50IG1laV9zZW5kX2Zsb3dfY29udHJvbChzdHJ1Y3QgbWVpX2RldmljZSAqZGV2LCBzdHJ1Y3QgbWVpX2NsICpjbCk7CisKK2ludCBtZWlfZGlzY29ubmVjdChzdHJ1Y3QgbWVpX2RldmljZSAqZGV2LCBzdHJ1Y3QgbWVpX2NsICpjbCk7CitpbnQgbWVpX290aGVyX2NsaWVudF9pc19jb25uZWN0aW5nKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYsIHN0cnVjdCBtZWlfY2wgKmNsKTsKK2ludCBtZWlfY29ubmVjdChzdHJ1Y3QgbWVpX2RldmljZSAqZGV2LCBzdHJ1Y3QgbWVpX2NsICpjbCk7CisKKyNlbmRpZiAvKiBfTUVJX0lOVEVSRkFDRV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laS9pbnRlcnJ1cHQuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWkvaW50ZXJydXB0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFiOTIxNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWkvaW50ZXJydXB0LmMKQEAgLTAsMCArMSwxNjI0IEBACisvKgorICoKKyAqIEludGVsIE1hbmFnZW1lbnQgRW5naW5lIEludGVyZmFjZSAoSW50ZWwgTUVJKSBMaW51eCBkcml2ZXIKKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDExLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICovCisKKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKworI2luY2x1ZGUgIm1laV9kZXYuaCIKKyNpbmNsdWRlICJtZWkuaCIKKyNpbmNsdWRlICJody5oIgorI2luY2x1ZGUgImludGVyZmFjZS5oIgorCisKKy8qKgorICogbWVpX2ludGVycnVwdF9xdWlja19oYW5kbGVyIC0gVGhlIElTUiBvZiB0aGUgTUVJIGRldmljZQorICoKKyAqIEBpcnE6IFRoZSBpcnEgbnVtYmVyCisgKiBAZGV2X2lkOiBwb2ludGVyIHRvIHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogcmV0dXJucyBpcnFyZXR1cm5fdAorICovCitpcnFyZXR1cm5fdCBtZWlfaW50ZXJydXB0X3F1aWNrX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBtZWlfZGV2aWNlICpkZXYgPSAoc3RydWN0IG1laV9kZXZpY2UgKikgZGV2X2lkOworCXUzMiBjc3JfcmVnID0gbWVpX2hjc3JfcmVhZChkZXYpOworCisJaWYgKChjc3JfcmVnICYgSF9JUykgIT0gSF9JUykKKwkJcmV0dXJuIElSUV9OT05FOworCisJLyogY2xlYXIgSF9JUyBiaXQgaW4gSF9DU1IgKi8KKwltZWlfcmVnX3dyaXRlKGRldiwgSF9DU1IsIGNzcl9yZWcpOworCisJcmV0dXJuIElSUV9XQUtFX1RIUkVBRDsKK30KKworLyoqCisgKiBfbWVpX2NtcGwgLSBwcm9jZXNzZXMgY29tcGxldGVkIG9wZXJhdGlvbi4KKyAqCisgKiBAY2w6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QuCisgKiBAY2JfcG9zOiBjYWxsYmFjayBibG9jay4KKyAqLworc3RhdGljIHZvaWQgX21laV9jbXBsKHN0cnVjdCBtZWlfY2wgKmNsLCBzdHJ1Y3QgbWVpX2NsX2NiICpjYl9wb3MpCit7CisJaWYgKGNiX3Bvcy0+bWFqb3JfZmlsZV9vcGVyYXRpb25zID09IE1FSV9XUklURSkgeworCQltZWlfZnJlZV9jYl9wcml2YXRlKGNiX3Bvcyk7CisJCWNiX3BvcyA9IE5VTEw7CisJCWNsLT53cml0aW5nX3N0YXRlID0gTUVJX1dSSVRFX0NPTVBMRVRFOworCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmY2wtPnR4X3dhaXQpKQorCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjbC0+dHhfd2FpdCk7CisKKwl9IGVsc2UgaWYgKGNiX3Bvcy0+bWFqb3JfZmlsZV9vcGVyYXRpb25zID09IE1FSV9SRUFEICYmCisJCQlNRUlfUkVBRElORyA9PSBjbC0+cmVhZGluZ19zdGF0ZSkgeworCQljbC0+cmVhZGluZ19zdGF0ZSA9IE1FSV9SRUFEX0NPTVBMRVRFOworCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmY2wtPnJ4X3dhaXQpKQorCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjbC0+cnhfd2FpdCk7CisKKwl9Cit9CisKKy8qKgorICogX21laV9jbXBsX2lhbXRoaWYgLSBwcm9jZXNzZXMgY29tcGxldGVkIGlhbXRoaWYgb3BlcmF0aW9uLgorICoKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugc3RydWN0dXJlLgorICogQGNiX3BvczogY2FsbGJhY2sgYmxvY2suCisgKi8KK3N0YXRpYyB2b2lkIF9tZWlfY21wbF9pYW10aGlmKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYsIHN0cnVjdCBtZWlfY2xfY2IgKmNiX3BvcykKK3sKKwlpZiAoZGV2LT5pYW10aGlmX2NhbmNlbGVkICE9IDEpIHsKKwkJZGV2LT5pYW10aGlmX3N0YXRlID0gTUVJX0lBTVRISUZfUkVBRF9DT01QTEVURTsKKwkJZGV2LT5pYW10aGlmX3N0YWxsX3RpbWVyID0gMDsKKwkJbWVtY3B5KGNiX3Bvcy0+cmVzcG9uc2VfYnVmZmVyLmRhdGEsCisJCQkJZGV2LT5pYW10aGlmX21zZ19idWYsCisJCQkJZGV2LT5pYW10aGlmX21zZ19idWZfaW5kZXgpOworCQlsaXN0X2FkZF90YWlsKCZjYl9wb3MtPmNiX2xpc3QsCisJCQkJJmRldi0+YW10aGlfcmVhZF9jb21wbGV0ZV9saXN0Lm1laV9jYi5jYl9saXN0KTsKKwkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJhbXRoaSByZWFkIGNvbXBsZXRlZC5cbiIpOworCQlkZXYtPmlhbXRoaWZfdGltZXIgPSBqaWZmaWVzOworCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgImRldi0+aWFtdGhpZl90aW1lciA9ICVsZFxuIiwKKwkJCQlkZXYtPmlhbXRoaWZfdGltZXIpOworCX0gZWxzZSB7CisJCXJ1bl9uZXh0X2lhbXRoaWZfY21kKGRldik7CisJfQorCisJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJjb21wbGV0aW5nIGFtdGhpIGNhbGwgYmFjay5cbiIpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT5pYW10aGlmX2NsLndhaXQpOworfQorCisKKy8qKgorICogbWVpX2lycV90aHJlYWRfcmVhZF9hbXRoaV9tZXNzYWdlIC0gYm90dG9tIGhhbGYgcmVhZCByb3V0aW5lIGFmdGVyIElTUiB0bworICogaGFuZGxlIHRoZSByZWFkIGFtdGhpIG1lc3NhZ2UgZGF0YSBwcm9jZXNzaW5nLgorICoKKyAqIEBjb21wbGV0ZV9saXN0OiBBbiBpbnN0YW5jZSBvZiBvdXIgbGlzdCBzdHJ1Y3R1cmUKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAbWVpX2hkcjogaGVhZGVyIG9mIGFtdGhpIG1lc3NhZ2UKKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgPDAgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBtZWlfaXJxX3RocmVhZF9yZWFkX2FtdGhpX21lc3NhZ2Uoc3RydWN0IG1laV9pb19saXN0ICpjb21wbGV0ZV9saXN0LAorCQlzdHJ1Y3QgbWVpX2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgbWVpX21zZ19oZHIgKm1laV9oZHIpCit7CisJc3RydWN0IG1laV9jbCAqY2w7CisJc3RydWN0IG1laV9jbF9jYiAqY2I7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCisJQlVHX09OKG1laV9oZHItPm1lX2FkZHIgIT0gZGV2LT5pYW10aGlmX2NsLm1lX2NsaWVudF9pZCk7CisJQlVHX09OKGRldi0+aWFtdGhpZl9zdGF0ZSAhPSBNRUlfSUFNVEhJRl9SRUFESU5HKTsKKworCWJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIChkZXYtPmlhbXRoaWZfbXNnX2J1ZiArCisJCQlkZXYtPmlhbXRoaWZfbXNnX2J1Zl9pbmRleCk7CisJQlVHX09OKGRldi0+aWFtdGhpZl9tdHUgPCBkZXYtPmlhbXRoaWZfbXNnX2J1Zl9pbmRleCArIG1laV9oZHItPmxlbmd0aCk7CisKKwltZWlfcmVhZF9zbG90cyhkZXYsIGJ1ZmZlciwgbWVpX2hkci0+bGVuZ3RoKTsKKworCWRldi0+aWFtdGhpZl9tc2dfYnVmX2luZGV4ICs9IG1laV9oZHItPmxlbmd0aDsKKworCWlmICghbWVpX2hkci0+bXNnX2NvbXBsZXRlKQorCQlyZXR1cm4gMDsKKworCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LAorCQkJImFtdGhpX21lc3NhZ2VfYnVmZmVyX2luZGV4ID0lZFxuIiwKKwkJCW1laV9oZHItPmxlbmd0aCk7CisKKwlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgImNvbXBsZXRlZCBhbXRoaSByZWFkLlxuICIpOworCWlmICghZGV2LT5pYW10aGlmX2N1cnJlbnRfY2IpCisJCXJldHVybiAtRU5PREVWOworCisJY2IgPSBkZXYtPmlhbXRoaWZfY3VycmVudF9jYjsKKwlkZXYtPmlhbXRoaWZfY3VycmVudF9jYiA9IE5VTEw7CisKKwljbCA9IChzdHJ1Y3QgbWVpX2NsICopY2ItPmZpbGVfcHJpdmF0ZTsKKwlpZiAoIWNsKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRldi0+aWFtdGhpZl9zdGFsbF90aW1lciA9IDA7CisJY2ItPmluZm9ybWF0aW9uID0JZGV2LT5pYW10aGlmX21zZ19idWZfaW5kZXg7CisJY2ItPnJlYWRfdGltZSA9IGppZmZpZXM7CisJaWYgKGRldi0+aWFtdGhpZl9pb2N0bCAmJiBjbCA9PSAmZGV2LT5pYW10aGlmX2NsKSB7CisJCS8qIGZvdW5kIHRoZSBpYW10aGlmIGNiICovCisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiY29tcGxldGUgdGhlIGFtdGhpIHJlYWQgY2IuXG4gIik7CisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiYWRkIHRoZSBhbXRoaSByZWFkIGNiIHRvIGNvbXBsZXRlLlxuICIpOworCQlsaXN0X2FkZF90YWlsKCZjYi0+Y2JfbGlzdCwKKwkJCQkJCSZjb21wbGV0ZV9saXN0LT5tZWlfY2IuY2JfbGlzdCk7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIF9tZWlfaXJxX3RocmVhZF9zdGF0ZV9vayAtIGNoZWNrcyBpZiBtZWkgaGVhZGVyIG1hdGNoZXMgZmlsZSBwcml2YXRlIGRhdGEKKyAqCisgKiBAY2w6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QKKyAqIEBtZWlfaGRyOiBoZWFkZXIgb2YgbWVpIGNsaWVudCBtZXNzYWdlCisgKgorICogcmV0dXJucyAhPTAgaWYgbWF0Y2hlcywgMCBpZiBubyBtYXRjaC4KKyAqLworc3RhdGljIGludCBfbWVpX2lycV90aHJlYWRfc3RhdGVfb2soc3RydWN0IG1laV9jbCAqY2wsCisJCQkJc3RydWN0IG1laV9tc2dfaGRyICptZWlfaGRyKQoreworCXJldHVybiAoY2wtPmhvc3RfY2xpZW50X2lkID09IG1laV9oZHItPmhvc3RfYWRkciAmJgorCQljbC0+bWVfY2xpZW50X2lkID09IG1laV9oZHItPm1lX2FkZHIgJiYKKwkJY2wtPnN0YXRlID09IE1FSV9GSUxFX0NPTk5FQ1RFRCAmJgorCQlNRUlfUkVBRF9DT01QTEVURSAhPSBjbC0+cmVhZGluZ19zdGF0ZSk7Cit9CisKKy8qKgorICogbWVpX2lycV90aHJlYWRfcmVhZF9jbGllbnRfbWVzc2FnZSAtIGJvdHRvbSBoYWxmIHJlYWQgcm91dGluZSBhZnRlciBJU1IgdG8KKyAqIGhhbmRsZSB0aGUgcmVhZCBtZWkgY2xpZW50IG1lc3NhZ2UgZGF0YSBwcm9jZXNzaW5nLgorICoKKyAqIEBjb21wbGV0ZV9saXN0OiBBbiBpbnN0YW5jZSBvZiBvdXIgbGlzdCBzdHJ1Y3R1cmUKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAbWVpX2hkcjogaGVhZGVyIG9mIG1laSBjbGllbnQgbWVzc2FnZQorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IG1laV9pcnFfdGhyZWFkX3JlYWRfY2xpZW50X21lc3NhZ2Uoc3RydWN0IG1laV9pb19saXN0ICpjb21wbGV0ZV9saXN0LAorCQlzdHJ1Y3QgbWVpX2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgbWVpX21zZ19oZHIgKm1laV9oZHIpCit7CisJc3RydWN0IG1laV9jbCAqY2w7CisJc3RydWN0IG1laV9jbF9jYiAqY2JfcG9zID0gTlVMTCwgKmNiX25leHQgPSBOVUxMOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKworCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAic3RhcnQgY2xpZW50IG1zZ1xuIik7CisJaWYgKCEoZGV2LT5yZWFkX2xpc3Quc3RhdHVzID09IDAgJiYKKwkgICAgICAhbGlzdF9lbXB0eSgmZGV2LT5yZWFkX2xpc3QubWVpX2NiLmNiX2xpc3QpKSkKKwkJZ290byBxdWl0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNiX3BvcywgY2JfbmV4dCwKKwkJCSZkZXYtPnJlYWRfbGlzdC5tZWlfY2IuY2JfbGlzdCwgY2JfbGlzdCkgeworCQljbCA9IChzdHJ1Y3QgbWVpX2NsICopY2JfcG9zLT5maWxlX3ByaXZhdGU7CisJCWlmIChjbCAmJiBfbWVpX2lycV90aHJlYWRfc3RhdGVfb2soY2wsIG1laV9oZHIpKSB7CisJCQljbC0+cmVhZGluZ19zdGF0ZSA9IE1FSV9SRUFESU5HOworCQkJYnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKikKKwkJCQkoY2JfcG9zLT5yZXNwb25zZV9idWZmZXIuZGF0YSArCisJCQkJY2JfcG9zLT5pbmZvcm1hdGlvbik7CisJCQlCVUdfT04oY2JfcG9zLT5yZXNwb25zZV9idWZmZXIuc2l6ZSA8CisJCQkJCW1laV9oZHItPmxlbmd0aCArCisJCQkJCWNiX3Bvcy0+aW5mb3JtYXRpb24pOworCisJCQlpZiAoY2JfcG9zLT5yZXNwb25zZV9idWZmZXIuc2l6ZSA8CisJCQkJCW1laV9oZHItPmxlbmd0aCArIGNiX3Bvcy0+aW5mb3JtYXRpb24pIHsKKwkJCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgIm1lc3NhZ2Ugb3ZlcmZsb3cuXG4iKTsKKwkJCQlsaXN0X2RlbCgmY2JfcG9zLT5jYl9saXN0KTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJCWlmIChidWZmZXIpCisJCQkJbWVpX3JlYWRfc2xvdHMoZGV2LCBidWZmZXIsIG1laV9oZHItPmxlbmd0aCk7CisKKwkJCWNiX3Bvcy0+aW5mb3JtYXRpb24gKz0gbWVpX2hkci0+bGVuZ3RoOworCQkJaWYgKG1laV9oZHItPm1zZ19jb21wbGV0ZSkgeworCQkJCWNsLT5zdGF0dXMgPSAwOworCQkJCWxpc3RfZGVsKCZjYl9wb3MtPmNiX2xpc3QpOworCQkJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LAorCQkJCQkiY29tcGxldGVkIHJlYWQgaG9zdCBjbGllbnQgPSAlZCwiCisJCQkJCSJNRSBjbGllbnQgPSAlZCwgIgorCQkJCQkiZGF0YSBsZW5ndGggPSAlbHVcbiIsCisJCQkJCWNsLT5ob3N0X2NsaWVudF9pZCwKKwkJCQkJY2wtPm1lX2NsaWVudF9pZCwKKwkJCQkJY2JfcG9zLT5pbmZvcm1hdGlvbik7CisKKwkJCQkqKGNiX3Bvcy0+cmVzcG9uc2VfYnVmZmVyLmRhdGEgKworCQkJCQljYl9wb3MtPmluZm9ybWF0aW9uKSA9ICdcMCc7CisJCQkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJjYl9wb3MtPnJlc19idWZmZXIgLSAlc1xuIiwKKwkJCQkJY2JfcG9zLT5yZXNwb25zZV9idWZmZXIuZGF0YSk7CisJCQkJbGlzdF9hZGRfdGFpbCgmY2JfcG9zLT5jYl9saXN0LAorCQkJCQkmY29tcGxldGVfbGlzdC0+bWVpX2NiLmNiX2xpc3QpOworCQkJfQorCisJCQlicmVhazsKKwkJfQorCisJfQorCitxdWl0OgorCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAibWVzc2FnZSByZWFkXG4iKTsKKwlpZiAoIWJ1ZmZlcikgeworCQltZWlfcmVhZF9zbG90cyhkZXYsICh1bnNpZ25lZCBjaGFyICopIGRldi0+cmRfbXNnX2J1ZiwKKwkJCQkJCW1laV9oZHItPmxlbmd0aCk7CisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiZGlzY2FyZGluZyBtZXNzYWdlLCBoZWFkZXIgPSUwOHguXG4iLAorCQkJCSoodTMyICopIGRldi0+cmRfbXNnX2J1Zik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogX21laV9pcnFfdGhyZWFkX2lhbXRoaWZfcmVhZCAtIHByZXBhcmVzIHRvIHJlYWQgaWFtdGhpZiBkYXRhLgorICoKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugc3RydWN0dXJlLgorICogQHNsb3RzOiBmcmVlIHNsb3RzLgorICoKKyAqIHJldHVybnMgMCwgT0s7IG90aGVyd2lzZSwgZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgX21laV9pcnFfdGhyZWFkX2lhbXRoaWZfcmVhZChzdHJ1Y3QgbWVpX2RldmljZSAqZGV2LCBzMzIgKnNsb3RzKQoreworCisJaWYgKCgoKnNsb3RzKSAqIHNpemVvZih1MzIpKSA+PSAoc2l6ZW9mKHN0cnVjdCBtZWlfbXNnX2hkcikKKwkJCSsgc2l6ZW9mKHN0cnVjdCBoYm1fZmxvd19jb250cm9sKSkpIHsKKwkJKnNsb3RzIC09IChzaXplb2Yoc3RydWN0IG1laV9tc2dfaGRyKSArCisJCQkJc2l6ZW9mKHN0cnVjdCBoYm1fZmxvd19jb250cm9sKSArIDMpIC8gNDsKKwkJaWYgKCFtZWlfc2VuZF9mbG93X2NvbnRyb2woZGV2LCAmZGV2LT5pYW10aGlmX2NsKSkgeworCQkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJpYW10aGlmIGZsb3cgY29udHJvbCBmYWlsZWRcbiIpOworCQl9IGVsc2UgeworCQkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJpYW10aGlmIGZsb3cgY29udHJvbCBzdWNjZXNzXG4iKTsKKwkJCWRldi0+aWFtdGhpZl9zdGF0ZSA9IE1FSV9JQU1USElGX1JFQURJTkc7CisJCQlkZXYtPmlhbXRoaWZfZmxvd19jb250cm9sX3BlbmRpbmcgPSAwOworCQkJZGV2LT5pYW10aGlmX21zZ19idWZfaW5kZXggPSAwOworCQkJZGV2LT5pYW10aGlmX21zZ19idWZfc2l6ZSA9IDA7CisJCQlkZXYtPmlhbXRoaWZfc3RhbGxfdGltZXIgPSBJQU1USElGX1NUQUxMX1RJTUVSOworCQkJZGV2LT5tZWlfaG9zdF9idWZmZXJfaXNfZW1wdHkgPQorCQkJCQltZWlfaG9zdF9idWZmZXJfaXNfZW1wdHkoZGV2KTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlyZXR1cm4gLUVNU0dTSVpFOworCX0KK30KKworLyoqCisgKiBfbWVpX2lycV90aHJlYWRfY2xvc2UgLSBwcm9jZXNzZXMgY2xvc2UgcmVsYXRlZCBvcGVyYXRpb24uCisgKgorICogQGRldjogdGhlIGRldmljZSBzdHJ1Y3R1cmUuCisgKiBAc2xvdHM6IGZyZWUgc2xvdHMuCisgKiBAY2JfcG9zOiBjYWxsYmFjayBibG9jay4KKyAqIEBjbDogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdC4KKyAqIEBjbXBsX2xpc3Q6IGNvbXBsZXRlIGxpc3QuCisgKgorICogcmV0dXJucyAwLCBPSzsgb3RoZXJ3aXNlLCBlcnJvci4KKyAqLworc3RhdGljIGludCBfbWVpX2lycV90aHJlYWRfY2xvc2Uoc3RydWN0IG1laV9kZXZpY2UgKmRldiwgczMyICpzbG90cywKKwkJCQlzdHJ1Y3QgbWVpX2NsX2NiICpjYl9wb3MsCisJCQkJc3RydWN0IG1laV9jbCAqY2wsCisJCQkJc3RydWN0IG1laV9pb19saXN0ICpjbXBsX2xpc3QpCit7CisJaWYgKCgqc2xvdHMgKiBzaXplb2YodTMyKSkgPj0gKHNpemVvZihzdHJ1Y3QgbWVpX21zZ19oZHIpICsKKwkJCXNpemVvZihzdHJ1Y3QgaGJtX2NsaWVudF9kaXNjb25uZWN0X3JlcXVlc3QpKSkgeworCQkqc2xvdHMgLT0gKHNpemVvZihzdHJ1Y3QgbWVpX21zZ19oZHIpICsKKwkJCXNpemVvZihzdHJ1Y3QgaGJtX2NsaWVudF9kaXNjb25uZWN0X3JlcXVlc3QpICsgMykgLyA0OworCisJCWlmICghbWVpX2Rpc2Nvbm5lY3QoZGV2LCBjbCkpIHsKKwkJCWNsLT5zdGF0dXMgPSAwOworCQkJY2JfcG9zLT5pbmZvcm1hdGlvbiA9IDA7CisJCQlsaXN0X21vdmVfdGFpbCgmY2JfcG9zLT5jYl9saXN0LAorCQkJCQkmY21wbF9saXN0LT5tZWlfY2IuY2JfbGlzdCk7CisJCQlyZXR1cm4gLUVNU0dTSVpFOworCQl9IGVsc2UgeworCQkJY2wtPnN0YXRlID0gTUVJX0ZJTEVfRElTQ09OTkVDVElORzsKKwkJCWNsLT5zdGF0dXMgPSAwOworCQkJY2JfcG9zLT5pbmZvcm1hdGlvbiA9IDA7CisJCQlsaXN0X21vdmVfdGFpbCgmY2JfcG9zLT5jYl9saXN0LAorCQkJCQkmZGV2LT5jdHJsX3JkX2xpc3QubWVpX2NiLmNiX2xpc3QpOworCQkJY2wtPnRpbWVyX2NvdW50ID0gTUVJX0NPTk5FQ1RfVElNRU9VVDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIHJldHVybiB0aGUgY2FuY2VsIHJvdXRpbmUgKi8KKwkJcmV0dXJuIC1FQkFETVNHOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGlzX3RyZWF0X3NwZWNpYWxseV9jbGllbnQgLSBjaGVja3MgaWYgdGhlIG1lc3NhZ2UgYmVsb25ncworICogdG8gdGhlIGZpbGUgcHJpdmF0ZSBkYXRhLgorICoKKyAqIEBjbDogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdAorICogQHJzOiBjb25uZWN0IHJlc3BvbnNlIGJ1cyBtZXNzYWdlCisgKgorICovCitzdGF0aWMgYm9vbCBpc190cmVhdF9zcGVjaWFsbHlfY2xpZW50KHN0cnVjdCBtZWlfY2wgKmNsLAorCQlzdHJ1Y3QgaGJtX2NsaWVudF9jb25uZWN0X3Jlc3BvbnNlICpycykKK3sKKworCWlmIChjbC0+aG9zdF9jbGllbnRfaWQgPT0gcnMtPmhvc3RfYWRkciAmJgorCSAgICBjbC0+bWVfY2xpZW50X2lkID09IHJzLT5tZV9hZGRyKSB7CisJCWlmICghcnMtPnN0YXR1cykgeworCQkJY2wtPnN0YXRlID0gTUVJX0ZJTEVfQ09OTkVDVEVEOworCQkJY2wtPnN0YXR1cyA9IDA7CisKKwkJfSBlbHNlIHsKKwkJCWNsLT5zdGF0ZSA9IE1FSV9GSUxFX0RJU0NPTk5FQ1RFRDsKKwkJCWNsLT5zdGF0dXMgPSAtRU5PREVWOworCQl9CisJCWNsLT50aW1lcl9jb3VudCA9IDA7CisKKwkJcmV0dXJuIHRydWU7CisJfQorCXJldHVybiBmYWxzZTsKK30KKworLyoqCisgKiBtZWlfY2xpZW50X2Nvbm5lY3RfcmVzcG9uc2UgLSBjb25uZWN0cyB0byByZXNwb25zZSBpcnEgcm91dGluZQorICoKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAcnM6IGNvbm5lY3QgcmVzcG9uc2UgYnVzIG1lc3NhZ2UKKyAqLworc3RhdGljIHZvaWQgbWVpX2NsaWVudF9jb25uZWN0X3Jlc3BvbnNlKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBoYm1fY2xpZW50X2Nvbm5lY3RfcmVzcG9uc2UgKnJzKQoreworCisJc3RydWN0IG1laV9jbCAqY2w7CisJc3RydWN0IG1laV9jbF9jYiAqY2JfcG9zID0gTlVMTCwgKmNiX25leHQgPSBOVUxMOworCisJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsCisJCQkiY29ubmVjdF9yZXNwb25zZTpcbiIKKwkJCSJNRSBDbGllbnQgPSAlZFxuIgorCQkJIkhvc3QgQ2xpZW50ID0gJWRcbiIKKwkJCSJTdGF0dXMgPSAlZFxuIiwKKwkJCXJzLT5tZV9hZGRyLAorCQkJcnMtPmhvc3RfYWRkciwKKwkJCXJzLT5zdGF0dXMpOworCisJLyogaWYgV0Qgb3IgaWFtdGhpZiBjbGllbnQgdHJlYXQgc3BlY2lhbGx5ICovCisKKwlpZiAoaXNfdHJlYXRfc3BlY2lhbGx5X2NsaWVudCgmKGRldi0+d2RfY2wpLCBycykpIHsKKwkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJkZXYtPndkX3RpbWVvdXQgPSVkLlxuIiwKKwkJCQlkZXYtPndkX3RpbWVvdXQpOworCisJCWRldi0+d2RfZHVlX2NvdW50ZXIgPSAoZGV2LT53ZF90aW1lb3V0KSA/IDEgOiAwOworCisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAic3VjY2Vzc2Z1bGx5IGNvbm5lY3RlZCB0byBXRCBjbGllbnQuXG4iKTsKKwkJaG9zdF9pbml0X2lhbXRoaWYoZGV2KTsKKwkJcmV0dXJuOworCX0KKworCWlmIChpc190cmVhdF9zcGVjaWFsbHlfY2xpZW50KCYoZGV2LT5pYW10aGlmX2NsKSwgcnMpKSB7CisJCWRldi0+aWFtdGhpZl9zdGF0ZSA9IE1FSV9JQU1USElGX0lETEU7CisJCXJldHVybjsKKwl9CisJaWYgKCFkZXYtPmN0cmxfcmRfbGlzdC5zdGF0dXMgJiYKKwkgICAgIWxpc3RfZW1wdHkoJmRldi0+Y3RybF9yZF9saXN0Lm1laV9jYi5jYl9saXN0KSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2JfcG9zLCBjYl9uZXh0LAorCQkJJmRldi0+Y3RybF9yZF9saXN0Lm1laV9jYi5jYl9saXN0LCBjYl9saXN0KSB7CisJCQljbCA9IChzdHJ1Y3QgbWVpX2NsICopY2JfcG9zLT5maWxlX3ByaXZhdGU7CisJCQlpZiAoIWNsKSB7CisJCQkJbGlzdF9kZWwoJmNiX3Bvcy0+Y2JfbGlzdCk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJaWYgKE1FSV9JT0NUTCA9PSBjYl9wb3MtPm1ham9yX2ZpbGVfb3BlcmF0aW9ucykgeworCQkJCWlmIChpc190cmVhdF9zcGVjaWFsbHlfY2xpZW50KGNsLCBycykpIHsKKwkJCQkJbGlzdF9kZWwoJmNiX3Bvcy0+Y2JfbGlzdCk7CisJCQkJCWNsLT5zdGF0dXMgPSAwOworCQkJCQljbC0+dGltZXJfY291bnQgPSAwOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwl9Cit9CisKKy8qKgorICogbWVpX2NsaWVudF9kaXNjb25uZWN0X3Jlc3BvbnNlIC0gZGlzY29ubmVjdHMgZnJvbSByZXNwb25zZSBpcnEgcm91dGluZQorICoKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAcnM6IGRpc2Nvbm5lY3QgcmVzcG9uc2UgYnVzIG1lc3NhZ2UKKyAqLworc3RhdGljIHZvaWQgbWVpX2NsaWVudF9kaXNjb25uZWN0X3Jlc3BvbnNlKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBoYm1fY2xpZW50X2Nvbm5lY3RfcmVzcG9uc2UgKnJzKQoreworCXN0cnVjdCBtZWlfY2wgKmNsOworCXN0cnVjdCBtZWlfY2xfY2IgKmNiX3BvcyA9IE5VTEwsICpjYl9uZXh0ID0gTlVMTDsKKworCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LAorCQkJImRpc2Nvbm5lY3RfcmVzcG9uc2U6XG4iCisJCQkiTUUgQ2xpZW50ID0gJWRcbiIKKwkJCSJIb3N0IENsaWVudCA9ICVkXG4iCisJCQkiU3RhdHVzID0gJWRcbiIsCisJCQlycy0+bWVfYWRkciwKKwkJCXJzLT5ob3N0X2FkZHIsCisJCQlycy0+c3RhdHVzKTsKKworCWlmICghZGV2LT5jdHJsX3JkX2xpc3Quc3RhdHVzICYmCisJICAgICFsaXN0X2VtcHR5KCZkZXYtPmN0cmxfcmRfbGlzdC5tZWlfY2IuY2JfbGlzdCkpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNiX3BvcywgY2JfbmV4dCwKKwkJCQkmZGV2LT5jdHJsX3JkX2xpc3QubWVpX2NiLmNiX2xpc3QsIGNiX2xpc3QpIHsKKwkJCWNsID0gKHN0cnVjdCBtZWlfY2wgKiljYl9wb3MtPmZpbGVfcHJpdmF0ZTsKKworCQkJaWYgKCFjbCkgeworCQkJCWxpc3RfZGVsKCZjYl9wb3MtPmNiX2xpc3QpOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUgaW4gY3RybF9yZF9saXN0LlxuIik7CisJCQlpZiAoY2wtPmhvc3RfY2xpZW50X2lkID09IHJzLT5ob3N0X2FkZHIgJiYKKwkJCSAgICBjbC0+bWVfY2xpZW50X2lkID09IHJzLT5tZV9hZGRyKSB7CisKKwkJCQlsaXN0X2RlbCgmY2JfcG9zLT5jYl9saXN0KTsKKwkJCQlpZiAoIXJzLT5zdGF0dXMpCisJCQkJCWNsLT5zdGF0ZSA9IE1FSV9GSUxFX0RJU0NPTk5FQ1RFRDsKKworCQkJCWNsLT5zdGF0dXMgPSAwOworCQkJCWNsLT50aW1lcl9jb3VudCA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9Cit9CisKKy8qKgorICogc2FtZV9mbG93X2FkZHIgLSB0ZWxscyBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgYWRkcmVzcy4KKyAqCisgKiBAZmlsZTogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdC4KKyAqIEBmbG93OiBmbG93IGNvbnRyb2wuCisgKgorICogcmV0dXJucyAgIT0wLCBzYW1lOyAwLG5vdC4KKyAqLworc3RhdGljIGludCBzYW1lX2Zsb3dfYWRkcihzdHJ1Y3QgbWVpX2NsICpjbCwgc3RydWN0IGhibV9mbG93X2NvbnRyb2wgKmZsb3cpCit7CisJcmV0dXJuIChjbC0+aG9zdF9jbGllbnRfaWQgPT0gZmxvdy0+aG9zdF9hZGRyICYmCisJCWNsLT5tZV9jbGllbnRfaWQgPT0gZmxvdy0+bWVfYWRkcik7Cit9CisKKy8qKgorICogYWRkX3NpbmdsZV9mbG93X2NyZWRzIC0gYWRkcyBzaW5nbGUgYnVmZmVyIGNyZWRlbnRpYWxzLgorICoKKyAqIEBmaWxlOiBwcml2YXRlIGRhdGEgb3QgdGhlIGZpbGUgb2JqZWN0LgorICogQGZsb3c6IGZsb3cgY29udHJvbC4KKyAqLworc3RhdGljIHZvaWQgYWRkX3NpbmdsZV9mbG93X2NyZWRzKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgaGJtX2Zsb3dfY29udHJvbCAqZmxvdykKK3sKKwlzdHJ1Y3QgbWVpX21lX2NsaWVudCAqY2xpZW50OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX21laV9tZV9jbGllbnRzOyBpKyspIHsKKwkJY2xpZW50ID0gJmRldi0+bWVfY2xpZW50c1tpXTsKKwkJaWYgKGNsaWVudCAmJiBmbG93LT5tZV9hZGRyID09IGNsaWVudC0+Y2xpZW50X2lkKSB7CisJCQlpZiAoY2xpZW50LT5wcm9wcy5zaW5nbGVfcmVjdl9idWYpIHsKKwkJCQljbGllbnQtPm1laV9mbG93X2N0cmxfY3JlZHMrKzsKKwkJCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgInJlY3YgZmxvdyBjdHJsIG1zZyBNRSAlZCAoc2luZ2xlKS5cbiIsCisJCQkJICAgIGZsb3ctPm1lX2FkZHIpOworCQkJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiZmxvdyBjb250cm9sIGNyZWRlbnRpYWxzID0lZC5cbiIsCisJCQkJICAgIGNsaWVudC0+bWVpX2Zsb3dfY3RybF9jcmVkcyk7CisJCQl9IGVsc2UgeworCQkJCUJVRygpOwkvKiBlcnJvciBpbiBmbG93IGNvbnRyb2wgKi8KKwkJCX0KKwkJfQorCX0KK30KKworLyoqCisgKiBtZWlfY2xpZW50X2Zsb3dfY29udHJvbF9yZXNwb25zZSAtIGZsb3cgY29udHJvbCByZXNwb25zZSBpcnEgcm91dGluZQorICoKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAZmxvd19jb250cm9sOiBmbG93IGNvbnRyb2wgcmVzcG9uc2UgYnVzIG1lc3NhZ2UKKyAqLworc3RhdGljIHZvaWQgbWVpX2NsaWVudF9mbG93X2NvbnRyb2xfcmVzcG9uc2Uoc3RydWN0IG1laV9kZXZpY2UgKmRldiwKKwkJc3RydWN0IGhibV9mbG93X2NvbnRyb2wgKmZsb3dfY29udHJvbCkKK3sKKwlzdHJ1Y3QgbWVpX2NsICpjbF9wb3MgPSBOVUxMOworCXN0cnVjdCBtZWlfY2wgKmNsX25leHQgPSBOVUxMOworCisJaWYgKCFmbG93X2NvbnRyb2wtPmhvc3RfYWRkcikgeworCQkvKiBzaW5nbGUgcmVjZWl2ZSBidWZmZXIgKi8KKwkJYWRkX3NpbmdsZV9mbG93X2NyZWRzKGRldiwgZmxvd19jb250cm9sKTsKKwl9IGVsc2UgeworCQkvKiBub3JtYWwgY29ubmVjdGlvbiAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2xfcG9zLCBjbF9uZXh0LAorCQkJCSZkZXYtPmZpbGVfbGlzdCwgbGluaykgeworCQkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUgaW4gZmlsZV9saXN0XG4iKTsKKworCQkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJjbCBvZiBob3N0IGNsaWVudCAlZCBNRSBjbGllbnQgJWQuXG4iLAorCQkJICAgIGNsX3Bvcy0+aG9zdF9jbGllbnRfaWQsCisJCQkgICAgY2xfcG9zLT5tZV9jbGllbnRfaWQpOworCQkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJmbG93IGN0cmwgbXNnIGZvciBob3N0ICVkIE1FICVkLlxuIiwKKwkJCSAgICBmbG93X2NvbnRyb2wtPmhvc3RfYWRkciwKKwkJCSAgICBmbG93X2NvbnRyb2wtPm1lX2FkZHIpOworCQkJaWYgKHNhbWVfZmxvd19hZGRyKGNsX3BvcywgZmxvd19jb250cm9sKSkgeworCQkJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAicmVjdiBjdHJsIG1zZyBmb3IgaG9zdCAgJWQgTUUgJWQuXG4iLAorCQkJCSAgICBmbG93X2NvbnRyb2wtPmhvc3RfYWRkciwKKwkJCQkgICAgZmxvd19jb250cm9sLT5tZV9hZGRyKTsKKwkJCQljbF9wb3MtPm1laV9mbG93X2N0cmxfY3JlZHMrKzsKKwkJCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgImZsb3cgY29udHJvbCBjcmVkZW50aWFscyA9ICVkLlxuIiwKKwkJCQkgICAgY2xfcG9zLT5tZWlfZmxvd19jdHJsX2NyZWRzKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KK30KKworLyoqCisgKiBzYW1lX2Rpc2Nvbm5fYWRkciAtIHRlbGxzIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSBhZGRyZXNzCisgKgorICogQGZpbGU6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QuCisgKiBAZGlzY29ubjogZGlzY29ubmVjdGlvbiByZXF1ZXN0LgorICoKKyAqIHJldHVybnMgIT0wLCBzYW1lOyAwLG5vdC4KKyAqLworc3RhdGljIGludCBzYW1lX2Rpc2Nvbm5fYWRkcihzdHJ1Y3QgbWVpX2NsICpjbCwKKwkJCSAgICAgc3RydWN0IGhibV9jbGllbnRfZGlzY29ubmVjdF9yZXF1ZXN0ICpkaXNjb25uKQoreworCXJldHVybiAoY2wtPmhvc3RfY2xpZW50X2lkID09IGRpc2Nvbm4tPmhvc3RfYWRkciAmJgorCQljbC0+bWVfY2xpZW50X2lkID09IGRpc2Nvbm4tPm1lX2FkZHIpOworfQorCisvKioKKyAqIG1laV9jbGllbnRfZGlzY29ubmVjdF9yZXF1ZXN0IC0gZGlzY29ubmVjdHMgZnJvbSByZXF1ZXN0IGlycSByb3V0aW5lCisgKgorICogQGRldjogdGhlIGRldmljZSBzdHJ1Y3R1cmUuCisgKiBAZGlzY29ubmVjdF9yZXE6IGRpc2Nvbm5lY3QgcmVxdWVzdCBidXMgbWVzc2FnZS4KKyAqLworc3RhdGljIHZvaWQgbWVpX2NsaWVudF9kaXNjb25uZWN0X3JlcXVlc3Qoc3RydWN0IG1laV9kZXZpY2UgKmRldiwKKwkJc3RydWN0IGhibV9jbGllbnRfZGlzY29ubmVjdF9yZXF1ZXN0ICpkaXNjb25uZWN0X3JlcSkKK3sKKwlzdHJ1Y3QgbWVpX21zZ19oZHIgKm1laV9oZHI7CisJc3RydWN0IGhibV9jbGllbnRfY29ubmVjdF9yZXNwb25zZSAqZGlzY29ubmVjdF9yZXM7CisJc3RydWN0IG1laV9jbCAqY2xfcG9zID0gTlVMTDsKKwlzdHJ1Y3QgbWVpX2NsICpjbF9uZXh0ID0gTlVMTDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjbF9wb3MsIGNsX25leHQsICZkZXYtPmZpbGVfbGlzdCwgbGluaykgeworCQlpZiAoc2FtZV9kaXNjb25uX2FkZHIoY2xfcG9zLCBkaXNjb25uZWN0X3JlcSkpIHsKKwkJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiZGlzY29ubmVjdCByZXF1ZXN0IGhvc3QgY2xpZW50ICVkIE1FIGNsaWVudCAlZC5cbiIsCisJCQkJCWRpc2Nvbm5lY3RfcmVxLT5ob3N0X2FkZHIsCisJCQkJCWRpc2Nvbm5lY3RfcmVxLT5tZV9hZGRyKTsKKwkJCWNsX3Bvcy0+c3RhdGUgPSBNRUlfRklMRV9ESVNDT05ORUNURUQ7CisJCQljbF9wb3MtPnRpbWVyX2NvdW50ID0gMDsKKwkJCWlmIChjbF9wb3MgPT0gJmRldi0+d2RfY2wpIHsKKwkJCQlkZXYtPndkX2R1ZV9jb3VudGVyID0gMDsKKwkJCQlkZXYtPndkX3BlbmRpbmcgPSAwOworCQkJfSBlbHNlIGlmIChjbF9wb3MgPT0gJmRldi0+aWFtdGhpZl9jbCkKKwkJCQlkZXYtPmlhbXRoaWZfdGltZXIgPSAwOworCisJCQkvKiBwcmVwYXJlIGRpc2Nvbm5lY3QgcmVzcG9uc2UgKi8KKwkJCW1laV9oZHIgPQorCQkJCShzdHJ1Y3QgbWVpX21zZ19oZHIgKikgJmRldi0+ZXh0X21zZ19idWZbMF07CisJCQltZWlfaGRyLT5ob3N0X2FkZHIgPSAwOworCQkJbWVpX2hkci0+bWVfYWRkciA9IDA7CisJCQltZWlfaGRyLT5sZW5ndGggPQorCQkJCXNpemVvZihzdHJ1Y3QgaGJtX2NsaWVudF9jb25uZWN0X3Jlc3BvbnNlKTsKKwkJCW1laV9oZHItPm1zZ19jb21wbGV0ZSA9IDE7CisJCQltZWlfaGRyLT5yZXNlcnZlZCA9IDA7CisKKwkJCWRpc2Nvbm5lY3RfcmVzID0KKwkJCQkoc3RydWN0IGhibV9jbGllbnRfY29ubmVjdF9yZXNwb25zZSAqKQorCQkJCSZkZXYtPmV4dF9tc2dfYnVmWzFdOworCQkJZGlzY29ubmVjdF9yZXMtPmhvc3RfYWRkciA9IGNsX3Bvcy0+aG9zdF9jbGllbnRfaWQ7CisJCQlkaXNjb25uZWN0X3Jlcy0+bWVfYWRkciA9IGNsX3Bvcy0+bWVfY2xpZW50X2lkOworCQkJKih1OCAqKSAoJmRpc2Nvbm5lY3RfcmVzLT5jbWQpID0KKwkJCQlDTElFTlRfRElTQ09OTkVDVF9SRVNfQ01EOworCQkJZGlzY29ubmVjdF9yZXMtPnN0YXR1cyA9IDA7CisJCQlkZXYtPmV4dHJhX3dyaXRlX2luZGV4ID0gMjsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCisKKy8qKgorICogbWVpX2lycV90aHJlYWRfcmVhZF9idXNfbWVzc2FnZSAtIGJvdHRvbSBoYWxmIHJlYWQgcm91dGluZSBhZnRlciBJU1IgdG8KKyAqIGhhbmRsZSB0aGUgcmVhZCBidXMgbWVzc2FnZSBjbWQgcHJvY2Vzc2luZy4KKyAqCisgKiBAZGV2OiB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICogQG1laV9oZHI6IGhlYWRlciBvZiBidXMgbWVzc2FnZQorICovCitzdGF0aWMgdm9pZCBtZWlfaXJxX3RocmVhZF9yZWFkX2J1c19tZXNzYWdlKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBtZWlfbXNnX2hkciAqbWVpX2hkcikKK3sKKwlzdHJ1Y3QgbWVpX2J1c19tZXNzYWdlICptZWlfbXNnOworCXN0cnVjdCBoYm1faG9zdF92ZXJzaW9uX3Jlc3BvbnNlICp2ZXJzaW9uX3JlczsKKwlzdHJ1Y3QgaGJtX2NsaWVudF9jb25uZWN0X3Jlc3BvbnNlICpjb25uZWN0X3JlczsKKwlzdHJ1Y3QgaGJtX2NsaWVudF9jb25uZWN0X3Jlc3BvbnNlICpkaXNjb25uZWN0X3JlczsKKwlzdHJ1Y3QgaGJtX2Zsb3dfY29udHJvbCAqZmxvd19jb250cm9sOworCXN0cnVjdCBoYm1fcHJvcHNfcmVzcG9uc2UgKnByb3BzX3JlczsKKwlzdHJ1Y3QgaGJtX2hvc3RfZW51bV9yZXNwb25zZSAqZW51bV9yZXM7CisJc3RydWN0IGhibV9jbGllbnRfZGlzY29ubmVjdF9yZXF1ZXN0ICpkaXNjb25uZWN0X3JlcTsKKwlzdHJ1Y3QgaGJtX2hvc3Rfc3RvcF9yZXF1ZXN0ICpob3N0X3N0b3BfcmVxOworCisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCisJLyogcmVhZCB0aGUgbWVzc2FnZSB0byBvdXIgYnVmZmVyICovCisJYnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKikgZGV2LT5yZF9tc2dfYnVmOworCUJVR19PTihtZWlfaGRyLT5sZW5ndGggPj0gc2l6ZW9mKGRldi0+cmRfbXNnX2J1ZikpOworCW1laV9yZWFkX3Nsb3RzKGRldiwgYnVmZmVyLCBtZWlfaGRyLT5sZW5ndGgpOworCW1laV9tc2cgPSAoc3RydWN0IG1laV9idXNfbWVzc2FnZSAqKSBidWZmZXI7CisKKwlzd2l0Y2ggKCoodTggKikgbWVpX21zZykgeworCWNhc2UgSE9TVF9TVEFSVF9SRVNfQ01EOgorCQl2ZXJzaW9uX3JlcyA9IChzdHJ1Y3QgaGJtX2hvc3RfdmVyc2lvbl9yZXNwb25zZSAqKSBtZWlfbXNnOworCQlpZiAodmVyc2lvbl9yZXMtPmhvc3RfdmVyc2lvbl9zdXBwb3J0ZWQpIHsKKwkJCWRldi0+dmVyc2lvbi5tYWpvcl92ZXJzaW9uID0gSEJNX01BSk9SX1ZFUlNJT047CisJCQlkZXYtPnZlcnNpb24ubWlub3JfdmVyc2lvbiA9IEhCTV9NSU5PUl9WRVJTSU9OOworCQkJaWYgKGRldi0+bWVpX3N0YXRlID09IE1FSV9JTklUX0NMSUVOVFMgJiYKKwkJCSAgICBkZXYtPmluaXRfY2xpZW50c19zdGF0ZSA9PSBNRUlfU1RBUlRfTUVTU0FHRSkgeworCQkJCWRldi0+aW5pdF9jbGllbnRzX3RpbWVyID0gMDsKKwkJCQlob3N0X2VudW1fY2xpZW50c19tZXNzYWdlKGRldik7CisJCQl9IGVsc2UgeworCQkJCWRldi0+cmVjdmRfbXNnID0gMDsKKwkJCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgIklNRUkgcmVzZXQgZHVlIHRvIHJlY2VpdmVkIGhvc3Qgc3RhcnQgcmVzcG9uc2UgYnVzIG1lc3NhZ2UuXG4iKTsKKwkJCQltZWlfcmVzZXQoZGV2LCAxKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0gZWxzZSB7CisJCQlkZXYtPnZlcnNpb24gPSB2ZXJzaW9uX3Jlcy0+bWVfbWF4X3ZlcnNpb247CisJCQkvKiBzZW5kIHN0b3AgbWVzc2FnZSAqLworCQkJbWVpX2hkci0+aG9zdF9hZGRyID0gMDsKKwkJCW1laV9oZHItPm1lX2FkZHIgPSAwOworCQkJbWVpX2hkci0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBoYm1faG9zdF9zdG9wX3JlcXVlc3QpOworCQkJbWVpX2hkci0+bXNnX2NvbXBsZXRlID0gMTsKKwkJCW1laV9oZHItPnJlc2VydmVkID0gMDsKKworCQkJaG9zdF9zdG9wX3JlcSA9IChzdHJ1Y3QgaGJtX2hvc3Rfc3RvcF9yZXF1ZXN0ICopCisJCQkJCQkJJmRldi0+d3JfbXNnX2J1ZlsxXTsKKworCQkJbWVtc2V0KGhvc3Rfc3RvcF9yZXEsCisJCQkJCTAsCisJCQkJCXNpemVvZihzdHJ1Y3QgaGJtX2hvc3Rfc3RvcF9yZXF1ZXN0KSk7CisJCQlob3N0X3N0b3BfcmVxLT5jbWQuY21kID0gSE9TVF9TVE9QX1JFUV9DTUQ7CisJCQlob3N0X3N0b3BfcmVxLT5yZWFzb24gPSBEUklWRVJfU1RPUF9SRVFVRVNUOworCQkJbWVpX3dyaXRlX21lc3NhZ2UoZGV2LCBtZWlfaGRyLAorCQkJCQkgICAodW5zaWduZWQgY2hhciAqKSAoaG9zdF9zdG9wX3JlcSksCisJCQkJCSAgIG1laV9oZHItPmxlbmd0aCk7CisJCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgInZlcnNpb24gbWlzbWF0Y2guXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWRldi0+cmVjdmRfbXNnID0gMTsKKwkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJob3N0IHN0YXJ0IHJlc3BvbnNlIG1lc3NhZ2UgcmVjZWl2ZWQuXG4iKTsKKwkJYnJlYWs7CisKKwljYXNlIENMSUVOVF9DT05ORUNUX1JFU19DTUQ6CisJCWNvbm5lY3RfcmVzID0KKwkJCShzdHJ1Y3QgaGJtX2NsaWVudF9jb25uZWN0X3Jlc3BvbnNlICopIG1laV9tc2c7CisJCW1laV9jbGllbnRfY29ubmVjdF9yZXNwb25zZShkZXYsIGNvbm5lY3RfcmVzKTsKKwkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJjbGllbnQgY29ubmVjdCByZXNwb25zZSBtZXNzYWdlIHJlY2VpdmVkLlxuIik7CisJCXdha2VfdXAoJmRldi0+d2FpdF9yZWN2ZF9tc2cpOworCQlicmVhazsKKworCWNhc2UgQ0xJRU5UX0RJU0NPTk5FQ1RfUkVTX0NNRDoKKwkJZGlzY29ubmVjdF9yZXMgPQorCQkJKHN0cnVjdCBoYm1fY2xpZW50X2Nvbm5lY3RfcmVzcG9uc2UgKikgbWVpX21zZzsKKwkJbWVpX2NsaWVudF9kaXNjb25uZWN0X3Jlc3BvbnNlKGRldiwJIGRpc2Nvbm5lY3RfcmVzKTsKKwkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJjbGllbnQgZGlzY29ubmVjdCByZXNwb25zZSBtZXNzYWdlIHJlY2VpdmVkLlxuIik7CisJCXdha2VfdXAoJmRldi0+d2FpdF9yZWN2ZF9tc2cpOworCQlicmVhazsKKworCWNhc2UgTUVJX0ZMT1dfQ09OVFJPTF9DTUQ6CisJCWZsb3dfY29udHJvbCA9IChzdHJ1Y3QgaGJtX2Zsb3dfY29udHJvbCAqKSBtZWlfbXNnOworCQltZWlfY2xpZW50X2Zsb3dfY29udHJvbF9yZXNwb25zZShkZXYsIGZsb3dfY29udHJvbCk7CisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiY2xpZW50IGZsb3cgY29udHJvbCByZXNwb25zZSBtZXNzYWdlIHJlY2VpdmVkLlxuIik7CisJCWJyZWFrOworCisJY2FzZSBIT1NUX0NMSUVOVF9QUk9QRVJUSUVTX1JFU19DTUQ6CisJCXByb3BzX3JlcyA9IChzdHJ1Y3QgaGJtX3Byb3BzX3Jlc3BvbnNlICopbWVpX21zZzsKKwkJaWYgKHByb3BzX3Jlcy0+c3RhdHVzIHx8ICFkZXYtPm1lX2NsaWVudHMpIHsKKwkJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAicmVzZXQgZHVlIHRvIHJlY2VpdmVkIGhvc3QgY2xpZW50IHByb3BlcnRpZXMgcmVzcG9uc2UgYnVzIG1lc3NhZ2Ugd3Jvbmcgc3RhdHVzLlxuIik7CisJCQltZWlfcmVzZXQoZGV2LCAxKTsKKwkJCXJldHVybjsKKwkJfQorCSAgICAgICBpZiAoZGV2LT5tZV9jbGllbnRzW2Rldi0+bWVfY2xpZW50X3ByZXNlbnRhdGlvbl9udW1dCisJCQkJCS5jbGllbnRfaWQgPT0gcHJvcHNfcmVzLT5hZGRyZXNzKSB7CisKKwkJCWRldi0+bWVfY2xpZW50c1tkZXYtPm1lX2NsaWVudF9wcmVzZW50YXRpb25fbnVtXS5wcm9wcworCQkJCQkJPSBwcm9wc19yZXMtPmNsaWVudF9wcm9wZXJ0aWVzOworCisJCQlpZiAoZGV2LT5tZWlfc3RhdGUgPT0gTUVJX0lOSVRfQ0xJRU5UUyAmJgorCQkJICAgIGRldi0+aW5pdF9jbGllbnRzX3N0YXRlID09CisJCQkJCU1FSV9DTElFTlRfUFJPUEVSVElFU19NRVNTQUdFKSB7CisJCQkJZGV2LT5tZV9jbGllbnRfaW5kZXgrKzsKKwkJCQlkZXYtPm1lX2NsaWVudF9wcmVzZW50YXRpb25fbnVtKys7CisJCQkJaG9zdF9jbGllbnRfcHJvcGVydGllcyhkZXYpOworCQkJfSBlbHNlIHsKKwkJCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgInJlc2V0IGR1ZSB0byByZWNlaXZlZCBob3N0IGNsaWVudCBwcm9wZXJ0aWVzIHJlc3BvbnNlIGJ1cyBtZXNzYWdlIik7CisJCQkJbWVpX3Jlc2V0KGRldiwgMSk7CisJCQkJcmV0dXJuOworCQkJfQorCQl9IGVsc2UgeworCQkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJyZXNldCBkdWUgdG8gcmVjZWl2ZWQgaG9zdCBjbGllbnQgcHJvcGVydGllcyByZXNwb25zZSBidXMgbWVzc2FnZSBmb3Igd3JvbmcgY2xpZW50IElEXG4iKTsKKwkJCW1laV9yZXNldChkZXYsIDEpOworCQkJcmV0dXJuOworCQl9CisJCWJyZWFrOworCisJY2FzZSBIT1NUX0VOVU1fUkVTX0NNRDoKKwkJZW51bV9yZXMgPSAoc3RydWN0IGhibV9ob3N0X2VudW1fcmVzcG9uc2UgKikgbWVpX21zZzsKKwkJbWVtY3B5KGRldi0+bWVfY2xpZW50c19tYXAsIGVudW1fcmVzLT52YWxpZF9hZGRyZXNzZXMsIDMyKTsKKwkJaWYgKGRldi0+bWVpX3N0YXRlID09IE1FSV9JTklUX0NMSUVOVFMgJiYKKwkJICAgIGRldi0+aW5pdF9jbGllbnRzX3N0YXRlID09IE1FSV9FTlVNX0NMSUVOVFNfTUVTU0FHRSkgeworCQkJCWRldi0+aW5pdF9jbGllbnRzX3RpbWVyID0gMDsKKwkJCQlkZXYtPm1lX2NsaWVudF9wcmVzZW50YXRpb25fbnVtID0gMDsKKwkJCQlkZXYtPm1lX2NsaWVudF9pbmRleCA9IDA7CisJCQkJYWxsb2NhdGVfbWVfY2xpZW50c19zdG9yYWdlKGRldik7CisJCQkJZGV2LT5pbml0X2NsaWVudHNfc3RhdGUgPQorCQkJCQlNRUlfQ0xJRU5UX1BST1BFUlRJRVNfTUVTU0FHRTsKKwkJCQlob3N0X2NsaWVudF9wcm9wZXJ0aWVzKGRldik7CisJCX0gZWxzZSB7CisJCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgInJlc2V0IGR1ZSB0byByZWNlaXZlZCBob3N0IGVudW1lcmF0aW9uIGNsaWVudHMgcmVzcG9uc2UgYnVzIG1lc3NhZ2UuXG4iKTsKKwkJCW1laV9yZXNldChkZXYsIDEpOworCQkJcmV0dXJuOworCQl9CisJCWJyZWFrOworCisJY2FzZSBIT1NUX1NUT1BfUkVTX0NNRDoKKwkJZGV2LT5tZWlfc3RhdGUgPSBNRUlfRElTQUJMRUQ7CisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAicmVzZXR0aW5nIGJlY2F1c2Ugb2YgRlcgc3RvcCByZXNwb25zZS5cbiIpOworCQltZWlfcmVzZXQoZGV2LCAxKTsKKwkJYnJlYWs7CisKKwljYXNlIENMSUVOVF9ESVNDT05ORUNUX1JFUV9DTUQ6CisJCS8qIHNlYXJjaCBmb3IgY2xpZW50ICovCisJCWRpc2Nvbm5lY3RfcmVxID0KKwkJCShzdHJ1Y3QgaGJtX2NsaWVudF9kaXNjb25uZWN0X3JlcXVlc3QgKikgbWVpX21zZzsKKwkJbWVpX2NsaWVudF9kaXNjb25uZWN0X3JlcXVlc3QoZGV2LCBkaXNjb25uZWN0X3JlcSk7CisJCWJyZWFrOworCisJY2FzZSBNRV9TVE9QX1JFUV9DTUQ6CisJCS8qIHByZXBhcmUgc3RvcCByZXF1ZXN0ICovCisJCW1laV9oZHIgPSAoc3RydWN0IG1laV9tc2dfaGRyICopICZkZXYtPmV4dF9tc2dfYnVmWzBdOworCQltZWlfaGRyLT5ob3N0X2FkZHIgPSAwOworCQltZWlfaGRyLT5tZV9hZGRyID0gMDsKKwkJbWVpX2hkci0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBoYm1faG9zdF9zdG9wX3JlcXVlc3QpOworCQltZWlfaGRyLT5tc2dfY29tcGxldGUgPSAxOworCQltZWlfaGRyLT5yZXNlcnZlZCA9IDA7CisJCWhvc3Rfc3RvcF9yZXEgPQorCQkJKHN0cnVjdCBoYm1faG9zdF9zdG9wX3JlcXVlc3QgKikgJmRldi0+ZXh0X21zZ19idWZbMV07CisJCW1lbXNldChob3N0X3N0b3BfcmVxLCAwLCBzaXplb2Yoc3RydWN0IGhibV9ob3N0X3N0b3BfcmVxdWVzdCkpOworCQlob3N0X3N0b3BfcmVxLT5jbWQuY21kID0gSE9TVF9TVE9QX1JFUV9DTUQ7CisJCWhvc3Rfc3RvcF9yZXEtPnJlYXNvbiA9IERSSVZFUl9TVE9QX1JFUVVFU1Q7CisJCWhvc3Rfc3RvcF9yZXEtPnJlc2VydmVkWzBdID0gMDsKKwkJaG9zdF9zdG9wX3JlcS0+cmVzZXJ2ZWRbMV0gPSAwOworCQlkZXYtPmV4dHJhX3dyaXRlX2luZGV4ID0gMjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisKKwl9Cit9CisKKworLyoqCisgKiBfbWVpX2hiX3JlYWQgLSBwcm9jZXNzZXMgcmVhZCByZWxhdGVkIG9wZXJhdGlvbi4KKyAqCisgKiBAZGV2OiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4KKyAqIEBzbG90czogZnJlZSBzbG90cy4KKyAqIEBjYl9wb3M6IGNhbGxiYWNrIGJsb2NrLgorICogQGNsOiBwcml2YXRlIGRhdGEgb2YgdGhlIGZpbGUgb2JqZWN0LgorICogQGNtcGxfbGlzdDogY29tcGxldGUgbGlzdC4KKyAqCisgKiByZXR1cm5zIDAsIE9LOyBvdGhlcndpc2UsIGVycm9yLgorICovCitzdGF0aWMgaW50IF9tZWlfaXJxX3RocmVhZF9yZWFkKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYsCXMzMiAqc2xvdHMsCisJCQlzdHJ1Y3QgbWVpX2NsX2NiICpjYl9wb3MsCisJCQlzdHJ1Y3QgbWVpX2NsICpjbCwKKwkJCXN0cnVjdCBtZWlfaW9fbGlzdCAqY21wbF9saXN0KQoreworCWlmICgoKnNsb3RzICogc2l6ZW9mKHUzMikpID49IChzaXplb2Yoc3RydWN0IG1laV9tc2dfaGRyKSArCisJCQlzaXplb2Yoc3RydWN0IGhibV9mbG93X2NvbnRyb2wpKSkgeworCQkqc2xvdHMgLT0gKHNpemVvZihzdHJ1Y3QgbWVpX21zZ19oZHIpICsKKwkJCXNpemVvZihzdHJ1Y3QgaGJtX2Zsb3dfY29udHJvbCkgKyAzKSAvIDQ7CisJCWlmICghbWVpX3NlbmRfZmxvd19jb250cm9sKGRldiwgY2wpKSB7CisJCQljbC0+c3RhdHVzID0gLUVOT0RFVjsKKwkJCWNiX3Bvcy0+aW5mb3JtYXRpb24gPSAwOworCQkJbGlzdF9tb3ZlX3RhaWwoJmNiX3Bvcy0+Y2JfbGlzdCwKKwkJCQkJJmNtcGxfbGlzdC0+bWVpX2NiLmNiX2xpc3QpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0gZWxzZSB7CisJCQlsaXN0X21vdmVfdGFpbCgmY2JfcG9zLT5jYl9saXN0LAorCQkJCQkmZGV2LT5yZWFkX2xpc3QubWVpX2NiLmNiX2xpc3QpOworCQl9CisJfSBlbHNlIHsKKwkJLyogcmV0dXJuIHRoZSBjYW5jZWwgcm91dGluZSAqLworCQlsaXN0X2RlbCgmY2JfcG9zLT5jYl9saXN0KTsKKwkJcmV0dXJuIC1FQkFETVNHOworCX0KKworCXJldHVybiAwOworfQorCisKKy8qKgorICogX21laV9pcnFfdGhyZWFkX2lvY3RsIC0gcHJvY2Vzc2VzIGlvY3RsIHJlbGF0ZWQgb3BlcmF0aW9uLgorICoKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugc3RydWN0dXJlLgorICogQHNsb3RzOiBmcmVlIHNsb3RzLgorICogQGNiX3BvczogY2FsbGJhY2sgYmxvY2suCisgKiBAY2w6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QuCisgKiBAY21wbF9saXN0OiBjb21wbGV0ZSBsaXN0LgorICoKKyAqIHJldHVybnMgMCwgT0s7IG90aGVyd2lzZSwgZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgX21laV9pcnFfdGhyZWFkX2lvY3RsKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYsIHMzMiAqc2xvdHMsCisJCQlzdHJ1Y3QgbWVpX2NsX2NiICpjYl9wb3MsCisJCQlzdHJ1Y3QgbWVpX2NsICpjbCwKKwkJCXN0cnVjdCBtZWlfaW9fbGlzdCAqY21wbF9saXN0KQoreworCWlmICgoKnNsb3RzICogc2l6ZW9mKHUzMikpID49IChzaXplb2Yoc3RydWN0IG1laV9tc2dfaGRyKSArCisJCQlzaXplb2Yoc3RydWN0IGhibV9jbGllbnRfY29ubmVjdF9yZXF1ZXN0KSkpIHsKKwkJY2wtPnN0YXRlID0gTUVJX0ZJTEVfQ09OTkVDVElORzsKKwkJKnNsb3RzIC09IChzaXplb2Yoc3RydWN0IG1laV9tc2dfaGRyKSArCisJCQlzaXplb2Yoc3RydWN0IGhibV9jbGllbnRfY29ubmVjdF9yZXF1ZXN0KSArIDMpIC8gNDsKKwkJaWYgKCFtZWlfY29ubmVjdChkZXYsIGNsKSkgeworCQkJY2wtPnN0YXR1cyA9IC1FTk9ERVY7CisJCQljYl9wb3MtPmluZm9ybWF0aW9uID0gMDsKKwkJCWxpc3RfZGVsKCZjYl9wb3MtPmNiX2xpc3QpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0gZWxzZSB7CisJCQlsaXN0X21vdmVfdGFpbCgmY2JfcG9zLT5jYl9saXN0LAorCQkJCSZkZXYtPmN0cmxfcmRfbGlzdC5tZWlfY2IuY2JfbGlzdCk7CisJCQljbC0+dGltZXJfY291bnQgPSBNRUlfQ09OTkVDVF9USU1FT1VUOworCQl9CisJfSBlbHNlIHsKKwkJLyogcmV0dXJuIHRoZSBjYW5jZWwgcm91dGluZSAqLworCQlsaXN0X2RlbCgmY2JfcG9zLT5jYl9saXN0KTsKKwkJcmV0dXJuIC1FQkFETVNHOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIF9tZWlfaXJxX3RocmVhZF9jbXBsIC0gcHJvY2Vzc2VzIGNvbXBsZXRlZCBhbmQgbm8taWFtdGhpZiBvcGVyYXRpb24uCisgKgorICogQGRldjogdGhlIGRldmljZSBzdHJ1Y3R1cmUuCisgKiBAc2xvdHM6IGZyZWUgc2xvdHMuCisgKiBAY2JfcG9zOiBjYWxsYmFjayBibG9jay4KKyAqIEBjbDogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdC4KKyAqIEBjbXBsX2xpc3Q6IGNvbXBsZXRlIGxpc3QuCisgKgorICogcmV0dXJucyAwLCBPSzsgb3RoZXJ3aXNlLCBlcnJvci4KKyAqLworc3RhdGljIGludCBfbWVpX2lycV90aHJlYWRfY21wbChzdHJ1Y3QgbWVpX2RldmljZSAqZGV2LAlzMzIgKnNsb3RzLAorCQkJc3RydWN0IG1laV9jbF9jYiAqY2JfcG9zLAorCQkJc3RydWN0IG1laV9jbCAqY2wsCisJCQlzdHJ1Y3QgbWVpX2lvX2xpc3QgKmNtcGxfbGlzdCkKK3sKKwlzdHJ1Y3QgbWVpX21zZ19oZHIgKm1laV9oZHI7CisKKwlpZiAoKCpzbG90cyAqIHNpemVvZih1MzIpKSA+PSAoc2l6ZW9mKHN0cnVjdCBtZWlfbXNnX2hkcikgKworCQkJKGNiX3Bvcy0+cmVxdWVzdF9idWZmZXIuc2l6ZSAtCisJCQljYl9wb3MtPmluZm9ybWF0aW9uKSkpIHsKKwkJbWVpX2hkciA9IChzdHJ1Y3QgbWVpX21zZ19oZHIgKikgJmRldi0+d3JfbXNnX2J1ZlswXTsKKwkJbWVpX2hkci0+aG9zdF9hZGRyID0gY2wtPmhvc3RfY2xpZW50X2lkOworCQltZWlfaGRyLT5tZV9hZGRyID0gY2wtPm1lX2NsaWVudF9pZDsKKwkJbWVpX2hkci0+bGVuZ3RoID0gY2JfcG9zLT5yZXF1ZXN0X2J1ZmZlci5zaXplIC0KKwkJCQkJY2JfcG9zLT5pbmZvcm1hdGlvbjsKKwkJbWVpX2hkci0+bXNnX2NvbXBsZXRlID0gMTsKKwkJbWVpX2hkci0+cmVzZXJ2ZWQgPSAwOworCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgImNiX3Bvcy0+cmVxdWVzdF9idWZmZXIuc2l6ZSA9JWQiCisJCQkibWVpX2hkci0+bXNnX2NvbXBsZXRlID0gJWRcbiIsCisJCQkJY2JfcG9zLT5yZXF1ZXN0X2J1ZmZlci5zaXplLAorCQkJCW1laV9oZHItPm1zZ19jb21wbGV0ZSk7CisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiY2JfcG9zLT5pbmZvcm1hdGlvbiAgPSVsdVxuIiwKKwkJCQljYl9wb3MtPmluZm9ybWF0aW9uKTsKKwkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJtZWlfaGRyLT5sZW5ndGggID0lZFxuIiwKKwkJCQltZWlfaGRyLT5sZW5ndGgpOworCQkqc2xvdHMgLT0gKHNpemVvZihzdHJ1Y3QgbWVpX21zZ19oZHIpICsKKwkJCQltZWlfaGRyLT5sZW5ndGggKyAzKSAvIDQ7CisJCWlmICghbWVpX3dyaXRlX21lc3NhZ2UoZGV2LCBtZWlfaGRyLAorCQkJCSh1bnNpZ25lZCBjaGFyICopCisJCQkJKGNiX3Bvcy0+cmVxdWVzdF9idWZmZXIuZGF0YSArCisJCQkJY2JfcG9zLT5pbmZvcm1hdGlvbiksCisJCQkJbWVpX2hkci0+bGVuZ3RoKSkgeworCQkJY2wtPnN0YXR1cyA9IC1FTk9ERVY7CisJCQlsaXN0X21vdmVfdGFpbCgmY2JfcG9zLT5jYl9saXN0LAorCQkJCSZjbXBsX2xpc3QtPm1laV9jYi5jYl9saXN0KTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9IGVsc2UgeworCQkJaWYgKG1laV9mbG93X2N0cmxfcmVkdWNlKGRldiwgY2wpKQorCQkJCXJldHVybiAtRU5PREVWOworCQkJY2wtPnN0YXR1cyA9IDA7CisJCQljYl9wb3MtPmluZm9ybWF0aW9uICs9IG1laV9oZHItPmxlbmd0aDsKKwkJCWxpc3RfbW92ZV90YWlsKCZjYl9wb3MtPmNiX2xpc3QsCisJCQkJJmRldi0+d3JpdGVfd2FpdGluZ19saXN0Lm1laV9jYi5jYl9saXN0KTsKKwkJfQorCX0gZWxzZSBpZiAoKnNsb3RzID09ICgoZGV2LT5ob3N0X2h3X3N0YXRlICYgSF9DQkQpID4+IDI0KSkgeworCQkvKiBidWZmZXIgaXMgc3RpbGwgZW1wdHkgKi8KKwkJbWVpX2hkciA9IChzdHJ1Y3QgbWVpX21zZ19oZHIgKikgJmRldi0+d3JfbXNnX2J1ZlswXTsKKwkJbWVpX2hkci0+aG9zdF9hZGRyID0gY2wtPmhvc3RfY2xpZW50X2lkOworCQltZWlfaGRyLT5tZV9hZGRyID0gY2wtPm1lX2NsaWVudF9pZDsKKwkJbWVpX2hkci0+bGVuZ3RoID0KKwkJCSgqc2xvdHMgKiBzaXplb2YodTMyKSkgLSBzaXplb2Yoc3RydWN0IG1laV9tc2dfaGRyKTsKKwkJbWVpX2hkci0+bXNnX2NvbXBsZXRlID0gMDsKKwkJbWVpX2hkci0+cmVzZXJ2ZWQgPSAwOworCisJCSgqc2xvdHMpIC09IChzaXplb2Yoc3RydWN0IG1laV9tc2dfaGRyKSArCisJCQkJbWVpX2hkci0+bGVuZ3RoICsgMykgLyA0OworCQlpZiAoIW1laV93cml0ZV9tZXNzYWdlKGRldiwgbWVpX2hkciwKKwkJCQkJKHVuc2lnbmVkIGNoYXIgKikKKwkJCQkJKGNiX3Bvcy0+cmVxdWVzdF9idWZmZXIuZGF0YSArCisJCQkJCWNiX3Bvcy0+aW5mb3JtYXRpb24pLAorCQkJCQltZWlfaGRyLT5sZW5ndGgpKSB7CisJCQljbC0+c3RhdHVzID0gLUVOT0RFVjsKKwkJCWxpc3RfbW92ZV90YWlsKCZjYl9wb3MtPmNiX2xpc3QsCisJCQkJJmNtcGxfbGlzdC0+bWVpX2NiLmNiX2xpc3QpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0gZWxzZSB7CisJCQljYl9wb3MtPmluZm9ybWF0aW9uICs9IG1laV9oZHItPmxlbmd0aDsKKwkJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LAorCQkJCQkiY2JfcG9zLT5yZXF1ZXN0X2J1ZmZlci5zaXplID0lZCIKKwkJCQkJIiBtZWlfaGRyLT5tc2dfY29tcGxldGUgPSAlZFxuIiwKKwkJCQkJY2JfcG9zLT5yZXF1ZXN0X2J1ZmZlci5zaXplLAorCQkJCQltZWlfaGRyLT5tc2dfY29tcGxldGUpOworCQkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJjYl9wb3MtPmluZm9ybWF0aW9uICA9JWx1XG4iLAorCQkJCQljYl9wb3MtPmluZm9ybWF0aW9uKTsKKwkJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAibWVpX2hkci0+bGVuZ3RoICA9JWRcbiIsCisJCQkJCW1laV9oZHItPmxlbmd0aCk7CisJCX0KKwkJcmV0dXJuIC1FTVNHU0laRTsKKwl9IGVsc2UgeworCQlyZXR1cm4gLUVCQURNU0c7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogX21laV9pcnFfdGhyZWFkX2NtcGxfaWFtdGhpZiAtIHByb2Nlc3NlcyBjb21wbGV0ZWQgaWFtdGhpZiBvcGVyYXRpb24uCisgKgorICogQGRldjogdGhlIGRldmljZSBzdHJ1Y3R1cmUuCisgKiBAc2xvdHM6IGZyZWUgc2xvdHMuCisgKiBAY2JfcG9zOiBjYWxsYmFjayBibG9jay4KKyAqIEBjbDogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdC4KKyAqIEBjbXBsX2xpc3Q6IGNvbXBsZXRlIGxpc3QuCisgKgorICogcmV0dXJucyAwLCBPSzsgb3RoZXJ3aXNlLCBlcnJvci4KKyAqLworc3RhdGljIGludCBfbWVpX2lycV90aHJlYWRfY21wbF9pYW10aGlmKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYsIHMzMiAqc2xvdHMsCisJCQlzdHJ1Y3QgbWVpX2NsX2NiICpjYl9wb3MsCisJCQlzdHJ1Y3QgbWVpX2NsICpjbCwKKwkJCXN0cnVjdCBtZWlfaW9fbGlzdCAqY21wbF9saXN0KQoreworCXN0cnVjdCBtZWlfbXNnX2hkciAqbWVpX2hkcjsKKworCWlmICgoKnNsb3RzICogc2l6ZW9mKHUzMikpID49IChzaXplb2Yoc3RydWN0IG1laV9tc2dfaGRyKSArCisJCQlkZXYtPmlhbXRoaWZfbXNnX2J1Zl9zaXplIC0KKwkJCWRldi0+aWFtdGhpZl9tc2dfYnVmX2luZGV4KSkgeworCQltZWlfaGRyID0gKHN0cnVjdCBtZWlfbXNnX2hkciAqKSAmZGV2LT53cl9tc2dfYnVmWzBdOworCQltZWlfaGRyLT5ob3N0X2FkZHIgPSBjbC0+aG9zdF9jbGllbnRfaWQ7CisJCW1laV9oZHItPm1lX2FkZHIgPSBjbC0+bWVfY2xpZW50X2lkOworCQltZWlfaGRyLT5sZW5ndGggPSBkZXYtPmlhbXRoaWZfbXNnX2J1Zl9zaXplIC0KKwkJCWRldi0+aWFtdGhpZl9tc2dfYnVmX2luZGV4OworCQltZWlfaGRyLT5tc2dfY29tcGxldGUgPSAxOworCQltZWlfaGRyLT5yZXNlcnZlZCA9IDA7CisKKwkJKnNsb3RzIC09IChzaXplb2Yoc3RydWN0IG1laV9tc2dfaGRyKSArCisJCQkJbWVpX2hkci0+bGVuZ3RoICsgMykgLyA0OworCisJCWlmICghbWVpX3dyaXRlX21lc3NhZ2UoZGV2LCBtZWlfaGRyLAorCQkJCQkoZGV2LT5pYW10aGlmX21zZ19idWYgKworCQkJCQlkZXYtPmlhbXRoaWZfbXNnX2J1Zl9pbmRleCksCisJCQkJCW1laV9oZHItPmxlbmd0aCkpIHsKKwkJCWRldi0+aWFtdGhpZl9zdGF0ZSA9IE1FSV9JQU1USElGX0lETEU7CisJCQljbC0+c3RhdHVzID0gLUVOT0RFVjsKKwkJCWxpc3RfZGVsKCZjYl9wb3MtPmNiX2xpc3QpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0gZWxzZSB7CisJCQlpZiAobWVpX2Zsb3dfY3RybF9yZWR1Y2UoZGV2LCBjbCkpCisJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQlkZXYtPmlhbXRoaWZfbXNnX2J1Zl9pbmRleCArPSBtZWlfaGRyLT5sZW5ndGg7CisJCQljYl9wb3MtPmluZm9ybWF0aW9uID0gZGV2LT5pYW10aGlmX21zZ19idWZfaW5kZXg7CisJCQljbC0+c3RhdHVzID0gMDsKKwkJCWRldi0+aWFtdGhpZl9zdGF0ZSA9IE1FSV9JQU1USElGX0ZMT1dfQ09OVFJPTDsKKwkJCWRldi0+aWFtdGhpZl9mbG93X2NvbnRyb2xfcGVuZGluZyA9IDE7CisJCQkvKiBzYXZlIGlhbXRoaWYgY2Igc2VudCB0byBhbXRoaSBjbGllbnQgKi8KKwkJCWRldi0+aWFtdGhpZl9jdXJyZW50X2NiID0gY2JfcG9zOworCQkJbGlzdF9tb3ZlX3RhaWwoJmNiX3Bvcy0+Y2JfbGlzdCwKKwkJCQkmZGV2LT53cml0ZV93YWl0aW5nX2xpc3QubWVpX2NiLmNiX2xpc3QpOworCisJCX0KKwl9IGVsc2UgaWYgKCpzbG90cyA9PSAoKGRldi0+aG9zdF9od19zdGF0ZSAmIEhfQ0JEKSA+PiAyNCkpIHsKKwkJCS8qIGJ1ZmZlciBpcyBzdGlsbCBlbXB0eSAqLworCQltZWlfaGRyID0gKHN0cnVjdCBtZWlfbXNnX2hkciAqKSAmZGV2LT53cl9tc2dfYnVmWzBdOworCQltZWlfaGRyLT5ob3N0X2FkZHIgPSBjbC0+aG9zdF9jbGllbnRfaWQ7CisJCW1laV9oZHItPm1lX2FkZHIgPSBjbC0+bWVfY2xpZW50X2lkOworCQltZWlfaGRyLT5sZW5ndGggPQorCQkJKCpzbG90cyAqIHNpemVvZih1MzIpKSAtIHNpemVvZihzdHJ1Y3QgbWVpX21zZ19oZHIpOworCQltZWlfaGRyLT5tc2dfY29tcGxldGUgPSAwOworCQltZWlfaGRyLT5yZXNlcnZlZCA9IDA7CisKKwkJKnNsb3RzIC09IChzaXplb2Yoc3RydWN0IG1laV9tc2dfaGRyKSArCisJCQkJbWVpX2hkci0+bGVuZ3RoICsgMykgLyA0OworCisJCWlmICghbWVpX3dyaXRlX21lc3NhZ2UoZGV2LCBtZWlfaGRyLAorCQkJCQkoZGV2LT5pYW10aGlmX21zZ19idWYgKworCQkJCQlkZXYtPmlhbXRoaWZfbXNnX2J1Zl9pbmRleCksCisJCQkJCW1laV9oZHItPmxlbmd0aCkpIHsKKwkJCWNsLT5zdGF0dXMgPSAtRU5PREVWOworCQkJbGlzdF9kZWwoJmNiX3Bvcy0+Y2JfbGlzdCk7CisJCX0gZWxzZSB7CisJCQlkZXYtPmlhbXRoaWZfbXNnX2J1Zl9pbmRleCArPSBtZWlfaGRyLT5sZW5ndGg7CisJCX0KKwkJcmV0dXJuIC1FTVNHU0laRTsKKwl9IGVsc2UgeworCQlyZXR1cm4gLUVCQURNU0c7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbWVpX2lycV90aHJlYWRfcmVhZF9oYW5kbGVyIC0gYm90dG9tIGhhbGYgcmVhZCByb3V0aW5lIGFmdGVyIElTUiB0bworICogaGFuZGxlIHRoZSByZWFkIHByb2Nlc3NpbmcuCisgKgorICogQGNtcGxfbGlzdDogQW4gaW5zdGFuY2Ugb2Ygb3VyIGxpc3Qgc3RydWN0dXJlCisgKiBAZGV2OiB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICogQHNsb3RzOiBzbG90cyB0byByZWFkLgorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IG1laV9pcnFfdGhyZWFkX3JlYWRfaGFuZGxlcihzdHJ1Y3QgbWVpX2lvX2xpc3QgKmNtcGxfbGlzdCwKKwkJc3RydWN0IG1laV9kZXZpY2UgKmRldiwKKwkJczMyICpzbG90cykKK3sKKwlzdHJ1Y3QgbWVpX21zZ19oZHIgKm1laV9oZHI7CisJc3RydWN0IG1laV9jbCAqY2xfcG9zID0gTlVMTDsKKwlzdHJ1Y3QgbWVpX2NsICpjbF9uZXh0ID0gTlVMTDsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghZGV2LT5yZF9tc2dfaGRyKSB7CisJCWRldi0+cmRfbXNnX2hkciA9IG1laV9tZWNicndfcmVhZChkZXYpOworCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgInNsb3RzID0lMDh4LlxuIiwgKnNsb3RzKTsKKwkJKCpzbG90cyktLTsKKwkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJzbG90cyA9JTA4eC5cbiIsICpzbG90cyk7CisJfQorCW1laV9oZHIgPSAoc3RydWN0IG1laV9tc2dfaGRyICopICZkZXYtPnJkX21zZ19oZHI7CisJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJtZWlfaGRyLT5sZW5ndGggPSVkXG4iLCBtZWlfaGRyLT5sZW5ndGgpOworCisJaWYgKG1laV9oZHItPnJlc2VydmVkIHx8ICFkZXYtPnJkX21zZ19oZHIpIHsKKwkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJjb3JydXB0ZWQgbWVzc2FnZSBoZWFkZXIuXG4iKTsKKwkJcmV0ID0gLUVCQURNU0c7CisJCWdvdG8gZW5kOworCX0KKworCWlmIChtZWlfaGRyLT5ob3N0X2FkZHIgfHwgbWVpX2hkci0+bWVfYWRkcikgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2xfcG9zLCBjbF9uZXh0LAorCQkJCQkmZGV2LT5maWxlX2xpc3QsIGxpbmspIHsKKwkJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LAorCQkJCQkibGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlIHJlYWQgaG9zdCIKKwkJCQkJIiBjbGllbnQgPSAlZCwgTUUgY2xpZW50ID0gJWRcbiIsCisJCQkJCWNsX3Bvcy0+aG9zdF9jbGllbnRfaWQsCisJCQkJCWNsX3Bvcy0+bWVfY2xpZW50X2lkKTsKKwkJCWlmIChjbF9wb3MtPmhvc3RfY2xpZW50X2lkID09IG1laV9oZHItPmhvc3RfYWRkciAmJgorCQkJICAgIGNsX3Bvcy0+bWVfY2xpZW50X2lkID09IG1laV9oZHItPm1lX2FkZHIpCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAoJmNsX3Bvcy0+bGluayA9PSAmZGV2LT5maWxlX2xpc3QpIHsKKwkJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiY29ycnVwdGVkIG1lc3NhZ2UgaGVhZGVyXG4iKTsKKwkJCXJldCA9IC1FQkFETVNHOworCQkJZ290byBlbmQ7CisJCX0KKwl9CisJaWYgKCgoKnNsb3RzKSAqIHNpemVvZih1MzIpKSA8IG1laV9oZHItPmxlbmd0aCkgeworCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwKKwkJCQkid2UgY2FuJ3QgcmVhZCB0aGUgbWVzc2FnZSBzbG90cyA9JTA4eC5cbiIsCisJCQkJKnNsb3RzKTsKKwkJLyogd2UgY2FuJ3QgcmVhZCB0aGUgbWVzc2FnZSAqLworCQlyZXQgPSAtRVJBTkdFOworCQlnb3RvIGVuZDsKKwl9CisKKwkvKiBkZWNpZGUgd2hlcmUgdG8gcmVhZCB0aGUgbWVzc2FnZSB0b28gKi8KKwlpZiAoIW1laV9oZHItPmhvc3RfYWRkcikgeworCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgImNhbGwgbWVpX2lycV90aHJlYWRfcmVhZF9idXNfbWVzc2FnZS5cbiIpOworCQltZWlfaXJxX3RocmVhZF9yZWFkX2J1c19tZXNzYWdlKGRldiwgbWVpX2hkcik7CisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiZW5kIG1laV9pcnFfdGhyZWFkX3JlYWRfYnVzX21lc3NhZ2UuXG4iKTsKKwl9IGVsc2UgaWYgKG1laV9oZHItPmhvc3RfYWRkciA9PSBkZXYtPmlhbXRoaWZfY2wuaG9zdF9jbGllbnRfaWQgJiYKKwkJICAgKE1FSV9GSUxFX0NPTk5FQ1RFRCA9PSBkZXYtPmlhbXRoaWZfY2wuc3RhdGUpICYmCisJCSAgIChkZXYtPmlhbXRoaWZfc3RhdGUgPT0gTUVJX0lBTVRISUZfUkVBRElORykpIHsKKwkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJjYWxsIG1laV9pcnFfdGhyZWFkX3JlYWRfaWFtdGhpZl9tZXNzYWdlLlxuIik7CisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAibWVpX2hkci0+bGVuZ3RoID0lZFxuIiwKKwkJCQltZWlfaGRyLT5sZW5ndGgpOworCQlyZXQgPSBtZWlfaXJxX3RocmVhZF9yZWFkX2FtdGhpX21lc3NhZ2UoY21wbF9saXN0LAorCQkJCQkJCWRldiwgbWVpX2hkcik7CisJCWlmIChyZXQpCisJCQlnb3RvIGVuZDsKKworCX0gZWxzZSB7CisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiY2FsbCBtZWlfaXJxX3RocmVhZF9yZWFkX2NsaWVudF9tZXNzYWdlLlxuIik7CisJCXJldCA9IG1laV9pcnFfdGhyZWFkX3JlYWRfY2xpZW50X21lc3NhZ2UoY21wbF9saXN0LAorCQkJCQkJCSBkZXYsIG1laV9oZHIpOworCQlpZiAocmV0KQorCQkJZ290byBlbmQ7CisKKwl9CisKKwkvKiByZXNldCB0aGUgbnVtYmVyIG9mIHNsb3RzIGFuZCBoZWFkZXIgKi8KKwkqc2xvdHMgPSBtZWlfY291bnRfZnVsbF9yZWFkX3Nsb3RzKGRldik7CisJZGV2LT5yZF9tc2dfaGRyID0gMDsKKworCWlmICgqc2xvdHMgPT0gLUVPVkVSRkxPVykgeworCQkvKiBvdmVyZmxvdyAtIHJlc2V0ICovCisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAicmVzZXR0aW5nIGR1ZSB0byBzbG90cyBvdmVyZmxvdy5cbiIpOworCQkvKiBzZXQgdGhlIGV2ZW50IHNpbmNlIG1lc3NhZ2UgaGFzIGJlZW4gcmVhZCAqLworCQlyZXQgPSAtRVJBTkdFOworCQlnb3RvIGVuZDsKKwl9CitlbmQ6CisJcmV0dXJuIHJldDsKK30KKworCisvKioKKyAqIG1laV9pcnFfdGhyZWFkX3dyaXRlX2hhbmRsZXIgLSBib3R0b20gaGFsZiB3cml0ZSByb3V0aW5lIGFmdGVyCisgKiBJU1IgdG8gaGFuZGxlIHRoZSB3cml0ZSBwcm9jZXNzaW5nLgorICoKKyAqIEBjbXBsX2xpc3Q6IEFuIGluc3RhbmNlIG9mIG91ciBsaXN0IHN0cnVjdHVyZQorICogQGRldjogdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBzbG90czogc2xvdHMgdG8gd3JpdGUuCisgKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgbWVpX2lycV90aHJlYWRfd3JpdGVfaGFuZGxlcihzdHJ1Y3QgbWVpX2lvX2xpc3QgKmNtcGxfbGlzdCwKKwkJc3RydWN0IG1laV9kZXZpY2UgKmRldiwKKwkJczMyICpzbG90cykKK3sKKworCXN0cnVjdCBtZWlfY2wgKmNsOworCXN0cnVjdCBtZWlfY2xfY2IgKmNiX3BvcyA9IE5VTEwsICpjYl9uZXh0ID0gTlVMTDsKKwlzdHJ1Y3QgbWVpX2lvX2xpc3QgKmxpc3Q7CisJaW50IHJldDsKKworCWlmICghbWVpX2hvc3RfYnVmZmVyX2lzX2VtcHR5KGRldikpIHsKKwkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJob3N0IGJ1ZmZlciBpcyBub3QgZW1wdHkuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCWRldi0+d3JpdGVfaGFuZyA9IC0xOworCSpzbG90cyA9IG1laV9jb3VudF9lbXB0eV93cml0ZV9zbG90cyhkZXYpOworCS8qIGNvbXBsZXRlIGFsbCB3YWl0aW5nIGZvciB3cml0ZSBDQiAqLworCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiY29tcGxldGUgYWxsIHdhaXRpbmcgZm9yIHdyaXRlIGNiLlxuIik7CisKKwlsaXN0ID0gJmRldi0+d3JpdGVfd2FpdGluZ19saXN0OworCWlmICghbGlzdC0+c3RhdHVzICYmICFsaXN0X2VtcHR5KCZsaXN0LT5tZWlfY2IuY2JfbGlzdCkpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNiX3BvcywgY2JfbmV4dCwKKwkJCQkmbGlzdC0+bWVpX2NiLmNiX2xpc3QsIGNiX2xpc3QpIHsKKwkJCWNsID0gKHN0cnVjdCBtZWlfY2wgKiljYl9wb3MtPmZpbGVfcHJpdmF0ZTsKKwkJCWlmIChjbCkgeworCQkJCWNsLT5zdGF0dXMgPSAwOworCQkJCWxpc3RfZGVsKCZjYl9wb3MtPmNiX2xpc3QpOworCQkJCWlmIChNRUlfV1JJVElORyA9PSBjbC0+d3JpdGluZ19zdGF0ZSAmJgorCQkJCSAgIChjYl9wb3MtPm1ham9yX2ZpbGVfb3BlcmF0aW9ucyA9PQorCQkJCQkJTUVJX1dSSVRFKSAmJgorCQkJCSAgIChjbCAhPSAmZGV2LT5pYW10aGlmX2NsKSkgeworCQkJCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwKKwkJCQkJCSJNRUkgV1JJVEUgQ09NUExFVEVcbiIpOworCQkJCQljbC0+d3JpdGluZ19zdGF0ZSA9CisJCQkJCQkJTUVJX1dSSVRFX0NPTVBMRVRFOworCQkJCQlsaXN0X2FkZF90YWlsKCZjYl9wb3MtPmNiX2xpc3QsCisJCQkJCQkmY21wbF9saXN0LT5tZWlfY2IuY2JfbGlzdCk7CisJCQkJfQorCQkJCWlmIChjbCA9PSAmZGV2LT5pYW10aGlmX2NsKSB7CisJCQkJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiY2hlY2sgaWFtdGhpZiBmbG93IGNvbnRyb2wuXG4iKTsKKwkJCQkJaWYgKGRldi0+aWFtdGhpZl9mbG93X2NvbnRyb2xfcGVuZGluZykgeworCQkJCQkJcmV0ID0KKwkJCQkJCV9tZWlfaXJxX3RocmVhZF9pYW10aGlmX3JlYWQoCisJCQkJCQkJCWRldiwgc2xvdHMpOworCQkJCQkJaWYgKHJldCkKKwkJCQkJCQlyZXR1cm4gcmV0OworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCX0KKwl9CisKKwlpZiAoZGV2LT5zdG9wICYmICFkZXYtPndkX3BlbmRpbmcpIHsKKwkJZGV2LT53ZF9zdG9wcGVkID0gMTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkZXYtPndhaXRfc3RvcF93ZCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChkZXYtPmV4dHJhX3dyaXRlX2luZGV4KSB7CisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiZXh0cmFfd3JpdGVfaW5kZXggPSVkLlxuIiwKKwkJCQlkZXYtPmV4dHJhX3dyaXRlX2luZGV4KTsKKwkJbWVpX3dyaXRlX21lc3NhZ2UoZGV2LAorCQkJCShzdHJ1Y3QgbWVpX21zZ19oZHIgKikgJmRldi0+ZXh0X21zZ19idWZbMF0sCisJCQkJKHVuc2lnbmVkIGNoYXIgKikgJmRldi0+ZXh0X21zZ19idWZbMV0sCisJCQkJKGRldi0+ZXh0cmFfd3JpdGVfaW5kZXggLSAxKSAqIHNpemVvZih1MzIpKTsKKwkJKnNsb3RzIC09IGRldi0+ZXh0cmFfd3JpdGVfaW5kZXg7CisJCWRldi0+ZXh0cmFfd3JpdGVfaW5kZXggPSAwOworCX0KKwlpZiAoZGV2LT5tZWlfc3RhdGUgPT0gTUVJX0VOQUJMRUQpIHsKKwkJaWYgKGRldi0+d2RfcGVuZGluZyAmJgorCQkJbWVpX2Zsb3dfY3RybF9jcmVkcyhkZXYsICZkZXYtPndkX2NsKSA+IDApIHsKKwkJCWlmIChtZWlfd2Rfc2VuZChkZXYpKQorCQkJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAid2Qgc2VuZCBmYWlsZWQuXG4iKTsKKwkJCWVsc2UKKwkJCQlpZiAobWVpX2Zsb3dfY3RybF9yZWR1Y2UoZGV2LCAmZGV2LT53ZF9jbCkpCisJCQkJCXJldHVybiAtRU5PREVWOworCisJCQlkZXYtPndkX3BlbmRpbmcgPSAwOworCisJCQlpZiAoZGV2LT53ZF90aW1lb3V0KSB7CisJCQkJKnNsb3RzIC09IChzaXplb2Yoc3RydWN0IG1laV9tc2dfaGRyKSArCisJCQkJCSBNRUlfU1RBUlRfV0RfREFUQV9TSVpFICsgMykgLyA0OworCQkJCWRldi0+d2RfZHVlX2NvdW50ZXIgPSAyOworCQkJfSBlbHNlIHsKKwkJCQkqc2xvdHMgLT0gKHNpemVvZihzdHJ1Y3QgbWVpX21zZ19oZHIpICsKKwkJCQkJIE1FSV9XRF9QQVJBTVNfU0laRSArIDMpIC8gNDsKKwkJCQlkZXYtPndkX2R1ZV9jb3VudGVyID0gMDsKKwkJCX0KKworCQl9CisJfQorCWlmIChkZXYtPnN0b3ApCisJCXJldHVybiB+RU5PREVWOworCisJLyogY29tcGxldGUgY29udHJvbCB3cml0ZSBsaXN0IENCICovCisJaWYgKCFkZXYtPmN0cmxfd3JfbGlzdC5zdGF0dXMpIHsKKwkJLyogY29tcGxldGUgY29udHJvbCB3cml0ZSBsaXN0IENCICovCisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiY29tcGxldGUgY29udHJvbCB3cml0ZSBsaXN0IGNiLlxuIik7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjYl9wb3MsIGNiX25leHQsCisJCQkJJmRldi0+Y3RybF93cl9saXN0Lm1laV9jYi5jYl9saXN0LCBjYl9saXN0KSB7CisJCQljbCA9IChzdHJ1Y3QgbWVpX2NsICopCisJCQkJY2JfcG9zLT5maWxlX3ByaXZhdGU7CisJCQlpZiAoIWNsKSB7CisJCQkJbGlzdF9kZWwoJmNiX3Bvcy0+Y2JfbGlzdCk7CisJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQl9CisJCQlzd2l0Y2ggKGNiX3Bvcy0+bWFqb3JfZmlsZV9vcGVyYXRpb25zKSB7CisJCQljYXNlIE1FSV9DTE9TRToKKwkJCQkvKiBzZW5kIGRpc2Nvbm5lY3QgbWVzc2FnZSAqLworCQkJCXJldCA9IF9tZWlfaXJxX3RocmVhZF9jbG9zZShkZXYsIHNsb3RzLAorCQkJCQkJICAgICBjYl9wb3MsIGNsLCBjbXBsX2xpc3QpOworCQkJCWlmIChyZXQpCisJCQkJCXJldHVybiByZXQ7CisKKwkJCQlicmVhazsKKwkJCWNhc2UgTUVJX1JFQUQ6CisJCQkJLyogc2VuZCBmbG93IGNvbnRyb2wgbWVzc2FnZSAqLworCQkJCXJldCA9IF9tZWlfaXJxX3RocmVhZF9yZWFkKGRldiwgc2xvdHMsCisJCQkJCQkgICAgY2JfcG9zLCBjbCwgY21wbF9saXN0KTsKKwkJCQlpZiAocmV0KQorCQkJCQlyZXR1cm4gcmV0OworCisJCQkJYnJlYWs7CisJCQljYXNlIE1FSV9JT0NUTDoKKwkJCQkvKiBjb25uZWN0IG1lc3NhZ2UgKi8KKwkJCQlpZiAoIW1laV9vdGhlcl9jbGllbnRfaXNfY29ubmVjdGluZyhkZXYsCisJCQkJCQljbCkpCisJCQkJCWNvbnRpbnVlOworCQkJCXJldCA9IF9tZWlfaXJxX3RocmVhZF9pb2N0bChkZXYsIHNsb3RzLAorCQkJCQkJICAgICBjYl9wb3MsIGNsLCBjbXBsX2xpc3QpOworCQkJCWlmIChyZXQpCisJCQkJCXJldHVybiByZXQ7CisKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlCVUcoKTsKKwkJCX0KKworCQl9CisJfQorCS8qIGNvbXBsZXRlICB3cml0ZSBsaXN0IENCICovCisJaWYgKCFkZXYtPndyaXRlX2xpc3Quc3RhdHVzICYmCisJICAgICFsaXN0X2VtcHR5KCZkZXYtPndyaXRlX2xpc3QubWVpX2NiLmNiX2xpc3QpKSB7CisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiY29tcGxldGUgd3JpdGUgbGlzdCBjYi5cbiIpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2JfcG9zLCBjYl9uZXh0LAorCQkJCSZkZXYtPndyaXRlX2xpc3QubWVpX2NiLmNiX2xpc3QsIGNiX2xpc3QpIHsKKwkJCWNsID0gKHN0cnVjdCBtZWlfY2wgKiljYl9wb3MtPmZpbGVfcHJpdmF0ZTsKKworCQkJaWYgKGNsKSB7CisJCQkJaWYgKGNsICE9ICZkZXYtPmlhbXRoaWZfY2wpIHsKKwkJCQkJaWYgKCFtZWlfZmxvd19jdHJsX2NyZWRzKGRldiwKKwkJCQkJCWNsKSkgeworCQkJCQkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsCisJCQkJCQkJIk5vIGZsb3cgY29udHJvbCIKKwkJCQkJCSAgICAiIGNyZWRlbnRpYWxzIGZvciBjbGllbnQiCisJCQkJCQkgICAgIiAlZCwgbm90IHNlbmRpbmcuXG4iLAorCQkJCQkJICAgIGNsLT5ob3N0X2NsaWVudF9pZCk7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQlyZXQgPSBfbWVpX2lycV90aHJlYWRfY21wbChkZXYsIHNsb3RzLAorCQkJCQkJCSAgICBjYl9wb3MsCisJCQkJCQkJICAgIGNsLCBjbXBsX2xpc3QpOworCQkJCQlpZiAocmV0KQorCQkJCQkJcmV0dXJuIHJldDsKKworCQkJCX0gZWxzZSBpZiAoY2wgPT0gJmRldi0+aWFtdGhpZl9jbCkgeworCQkJCQkvKiBJQU1USElGIElPQ1RMICovCisJCQkJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiY29tcGxldGUgYW10aGkgd3JpdGUgY2IuXG4iKTsKKwkJCQkJaWYgKCFtZWlfZmxvd19jdHJsX2NyZWRzKGRldiwKKwkJCQkJCQljbCkpIHsKKwkJCQkJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LAorCQkJCQkJCSJObyBmbG93IGNvbnRyb2wiCisJCQkJCQkgICAgIiBjcmVkZW50aWFscyBmb3IgYW10aGkiCisJCQkJCQkgICAgIiBjbGllbnQgJWQuXG4iLAorCQkJCQkJICAgIGNsLT5ob3N0X2NsaWVudF9pZCk7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQlyZXQgPSBfbWVpX2lycV90aHJlYWRfY21wbF9pYW10aGlmKGRldiwKKwkJCQkJCQkJc2xvdHMsCisJCQkJCQkJCWNiX3BvcywKKwkJCQkJCQkJY2wsCisJCQkJCQkJCWNtcGxfbGlzdCk7CisJCQkJCWlmIChyZXQpCisJCQkJCQlyZXR1cm4gcmV0OworCisJCQkJfQorCQkJfQorCisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKworCisvKioKKyAqIG1laV90aW1lciAtIHRpbWVyIGZ1bmN0aW9uLgorICoKKyAqIEB3b3JrOiBwb2ludGVyIHRvIHRoZSB3b3JrX3N0cnVjdCBzdHJ1Y3R1cmUKKyAqCisgKiBOT1RFOiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aW1lciBpbnRlcnJ1cHQgd29yaworICovCit2b2lkIG1laV93ZF90aW1lcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCXN0cnVjdCBtZWlfY2wgKmNsX3BvcyA9IE5VTEw7CisJc3RydWN0IG1laV9jbCAqY2xfbmV4dCA9IE5VTEw7CisJc3RydWN0IGxpc3RfaGVhZCAqYW10aGlfY29tcGxldGVfbGlzdCA9IE5VTEw7CisJc3RydWN0IG1laV9jbF9jYiAgKmNiX3BvcyA9IE5VTEw7CisJc3RydWN0IG1laV9jbF9jYiAgKmNiX25leHQgPSBOVUxMOworCisJc3RydWN0IG1laV9kZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLAorCQkJCQlzdHJ1Y3QgbWVpX2RldmljZSwgd2Rfd29yay53b3JrKTsKKworCisJbXV0ZXhfbG9jaygmZGV2LT5kZXZpY2VfbG9jayk7CisJaWYgKGRldi0+bWVpX3N0YXRlICE9IE1FSV9FTkFCTEVEKSB7CisJCWlmIChkZXYtPm1laV9zdGF0ZSA9PSBNRUlfSU5JVF9DTElFTlRTKSB7CisJCQlpZiAoZGV2LT5pbml0X2NsaWVudHNfdGltZXIpIHsKKwkJCQlpZiAoLS1kZXYtPmluaXRfY2xpZW50c190aW1lciA9PSAwKSB7CisJCQkJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiSU1FSSByZXNldCBkdWUgdG8gaW5pdCBjbGllbnRzIHRpbWVvdXQgLGluaXQgY2xpZW50cyBzdGF0ZSA9ICVkLlxuIiwKKwkJCQkJCWRldi0+aW5pdF9jbGllbnRzX3N0YXRlKTsKKwkJCQkJbWVpX3Jlc2V0KGRldiwgMSk7CisJCQkJfQorCQkJfQorCQl9CisJCWdvdG8gb3V0OworCX0KKwkvKioqIGNvbm5lY3QvZGlzY29ubmVjdCB0aW1lb3V0cyAqKiovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNsX3BvcywgY2xfbmV4dCwgJmRldi0+ZmlsZV9saXN0LCBsaW5rKSB7CisJCWlmIChjbF9wb3MtPnRpbWVyX2NvdW50KSB7CisJCQlpZiAoLS1jbF9wb3MtPnRpbWVyX2NvdW50ID09IDApIHsKKwkJCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgIkhFQ0kgcmVzZXQgZHVlIHRvIGNvbm5lY3QvZGlzY29ubmVjdCB0aW1lb3V0LlxuIik7CisJCQkJbWVpX3Jlc2V0KGRldiwgMSk7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZGV2LT53ZF9jbC5zdGF0ZSAhPSBNRUlfRklMRV9DT05ORUNURUQpCisJCWdvdG8gb3V0OworCisJLyogV2F0Y2hkb2cgKi8KKwlpZiAoZGV2LT53ZF9kdWVfY291bnRlciAmJiAhZGV2LT53ZF9ieXBhc3MpIHsKKwkJaWYgKC0tZGV2LT53ZF9kdWVfY291bnRlciA9PSAwKSB7CisJCQlpZiAoZGV2LT5tZWlfaG9zdF9idWZmZXJfaXNfZW1wdHkgJiYKKwkJCSAgICBtZWlfZmxvd19jdHJsX2NyZWRzKGRldiwgJmRldi0+d2RfY2wpID4gMCkgeworCQkJCWRldi0+bWVpX2hvc3RfYnVmZmVyX2lzX2VtcHR5ID0gMDsKKwkJCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgInNlbmQgd2F0Y2hkb2cuXG4iKTsKKworCQkJCWlmIChtZWlfd2Rfc2VuZChkZXYpKQorCQkJCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgIndkIHNlbmQgZmFpbGVkLlxuIik7CisJCQkJZWxzZQorCQkJCQlpZiAobWVpX2Zsb3dfY3RybF9yZWR1Y2UoZGV2LCAmZGV2LT53ZF9jbCkpCisJCQkJCQlnb3RvIG91dDsKKworCQkJCWlmIChkZXYtPndkX3RpbWVvdXQpCisJCQkJCWRldi0+d2RfZHVlX2NvdW50ZXIgPSAyOworCQkJCWVsc2UKKwkJCQkJZGV2LT53ZF9kdWVfY291bnRlciA9IDA7CisKKwkJCX0gZWxzZQorCQkJCWRldi0+d2RfcGVuZGluZyA9IDE7CisKKwkJfQorCX0KKwlpZiAoZGV2LT5pYW10aGlmX3N0YWxsX3RpbWVyKSB7CisJCWlmICgtLWRldi0+aWFtdGhpZl9zdGFsbF90aW1lciA9PSAwKSB7CisJCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgInJlc2V0aW5nIGJlY2F1c2Ugb2YgaGFuZyB0byBhbXRoaS5cbiIpOworCQkJbWVpX3Jlc2V0KGRldiwgMSk7CisJCQlkZXYtPmlhbXRoaWZfbXNnX2J1Zl9zaXplID0gMDsKKwkJCWRldi0+aWFtdGhpZl9tc2dfYnVmX2luZGV4ID0gMDsKKwkJCWRldi0+aWFtdGhpZl9jYW5jZWxlZCA9IDA7CisJCQlkZXYtPmlhbXRoaWZfaW9jdGwgPSAxOworCQkJZGV2LT5pYW10aGlmX3N0YXRlID0gTUVJX0lBTVRISUZfSURMRTsKKwkJCWRldi0+aWFtdGhpZl90aW1lciA9IDA7CisKKwkJCWlmIChkZXYtPmlhbXRoaWZfY3VycmVudF9jYikKKwkJCQltZWlfZnJlZV9jYl9wcml2YXRlKGRldi0+aWFtdGhpZl9jdXJyZW50X2NiKTsKKworCQkJZGV2LT5pYW10aGlmX2ZpbGVfb2JqZWN0ID0gTlVMTDsKKwkJCWRldi0+aWFtdGhpZl9jdXJyZW50X2NiID0gTlVMTDsKKwkJCXJ1bl9uZXh0X2lhbXRoaWZfY21kKGRldik7CisJCX0KKwl9CisKKwlpZiAoZGV2LT5pYW10aGlmX3RpbWVyKSB7CisKKwkJdGltZW91dCA9IGRldi0+aWFtdGhpZl90aW1lciArCisJCQkJbXNlY3NfdG9famlmZmllcyhJQU1USElGX1JFQURfVElNRVIpOworCisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiZGV2LT5pYW10aGlmX3RpbWVyID0gJWxkXG4iLAorCQkJCWRldi0+aWFtdGhpZl90aW1lcik7CisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAidGltZW91dCA9ICVsZFxuIiwgdGltZW91dCk7CisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiamlmZmllcyA9ICVsZFxuIiwgamlmZmllcyk7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQkvKgorCQkJICogVXNlciBkaWRuJ3QgcmVhZCB0aGUgQU1USEkgZGF0YSBvbiB0aW1lICgxNXNlYykKKwkJCSAqIGZyZWVpbmcgQU1USEkgZm9yIG90aGVyIHJlcXVlc3RzCisJCQkgKi8KKworCQkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJmcmVlaW5nIEFNVEhJIGZvciBvdGhlciByZXF1ZXN0c1xuIik7CisKKwkJCWFtdGhpX2NvbXBsZXRlX2xpc3QgPSAmZGV2LT5hbXRoaV9yZWFkX2NvbXBsZXRlX2xpc3QuCisJCQkJCW1laV9jYi5jYl9saXN0OworCisJCQlpZiAoIWxpc3RfZW1wdHkoYW10aGlfY29tcGxldGVfbGlzdCkpIHsKKworCQkJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjYl9wb3MsIGNiX25leHQsCisJCQkJCQkJYW10aGlfY29tcGxldGVfbGlzdCwKKwkJCQkJCQljYl9saXN0KSB7CisKKwkJCQkJY2xfcG9zID0gY2JfcG9zLT5maWxlX29iamVjdC0+cHJpdmF0ZV9kYXRhOworCisJCQkJCS8qIEZpbmRpbmcgdGhlIEFNVEhJIGVudHJ5LiAqLworCQkJCQlpZiAoY2xfcG9zID09CSZkZXYtPmlhbXRoaWZfY2wpCisJCQkJCQlsaXN0X2RlbCgmY2JfcG9zLT5jYl9saXN0KTsKKwkJCQl9CisJCQl9CisJCQlpZiAoZGV2LT5pYW10aGlmX2N1cnJlbnRfY2IpCisJCQkJbWVpX2ZyZWVfY2JfcHJpdmF0ZShkZXYtPmlhbXRoaWZfY3VycmVudF9jYik7CisKKwkJCWRldi0+aWFtdGhpZl9maWxlX29iamVjdC0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwkJCWRldi0+aWFtdGhpZl9maWxlX29iamVjdCA9IE5VTEw7CisJCQlkZXYtPmlhbXRoaWZfY3VycmVudF9jYiA9IE5VTEw7CisJCQlkZXYtPmlhbXRoaWZfdGltZXIgPSAwOworCQkJcnVuX25leHRfaWFtdGhpZl9jbWQoZGV2KTsKKworCQl9CisJfQorb3V0OgorCSBzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldi0+d2Rfd29yaywgMiAqIEhaKTsKKwkgbXV0ZXhfdW5sb2NrKCZkZXYtPmRldmljZV9sb2NrKTsKK30KKworLyoqCisgKiAgbWVpX2ludGVycnVwdF90aHJlYWRfaGFuZGxlciAtIGZ1bmN0aW9uIGNhbGxlZCBhZnRlciBJU1IgdG8gaGFuZGxlIHRoZSBpbnRlcnJ1cHQKKyAqIHByb2Nlc3NpbmcuCisgKgorICogQGlycTogVGhlIGlycSBudW1iZXIKKyAqIEBkZXZfaWQ6IHBvaW50ZXIgdG8gdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiByZXR1cm5zIGlycXJldHVybl90CisgKgorICovCitpcnFyZXR1cm5fdCBtZWlfaW50ZXJydXB0X3RocmVhZF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbWVpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBtZWlfZGV2aWNlICopIGRldl9pZDsKKwlzdHJ1Y3QgbWVpX2lvX2xpc3QgY29tcGxldGVfbGlzdDsKKwlzdHJ1Y3QgbWVpX2NsX2NiICpjYl9wb3MgPSBOVUxMLCAqY2JfbmV4dCA9IE5VTEw7CisJc3RydWN0IG1laV9jbCAqY2w7CisJczMyIHNsb3RzOworCWludCByZXRzOworCWJvb2wgIGJ1c19tZXNzYWdlX3JlY2VpdmVkOworCisKKwlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgImZ1bmN0aW9uIGNhbGxlZCBhZnRlciBJU1IgdG8gaGFuZGxlIHRoZSBpbnRlcnJ1cHQgcHJvY2Vzc2luZy5cbiIpOworCS8qIGluaXRpYWxpemUgb3VyIGNvbXBsZXRlIGxpc3QgKi8KKwltdXRleF9sb2NrKCZkZXYtPmRldmljZV9sb2NrKTsKKwltZWlfaW5pdGlhbGl6ZV9saXN0KCZjb21wbGV0ZV9saXN0LCBkZXYpOworCWRldi0+aG9zdF9od19zdGF0ZSA9IG1laV9oY3NyX3JlYWQoZGV2KTsKKwlkZXYtPm1lX2h3X3N0YXRlID0gbWVpX21lY3NyX3JlYWQoZGV2KTsKKworCS8qIGNoZWNrIGlmIE1FIHdhbnRzIGEgcmVzZXQgKi8KKwlpZiAoKGRldi0+bWVfaHdfc3RhdGUgJiBNRV9SRFlfSFJBKSA9PSAwICYmCisJICAgIGRldi0+bWVpX3N0YXRlICE9IE1FSV9SRVNFVElORyAmJgorCSAgICBkZXYtPm1laV9zdGF0ZSAhPSBNRUlfSU5JVElBTElaSU5HKSB7CisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiRlcgbm90IHJlYWR5LlxuIik7CisJCW1laV9yZXNldChkZXYsIDEpOworCQltdXRleF91bmxvY2soJmRldi0+ZGV2aWNlX2xvY2spOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJLyogIGNoZWNrIGlmIHdlIG5lZWQgdG8gc3RhcnQgdGhlIGRldiAqLworCWlmICgoZGV2LT5ob3N0X2h3X3N0YXRlICYgSF9SRFkpID09IDApIHsKKwkJaWYgKChkZXYtPm1lX2h3X3N0YXRlICYgTUVfUkRZX0hSQSkgPT0gTUVfUkRZX0hSQSkgeworCQkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJ3ZSBuZWVkIHRvIHN0YXJ0IHRoZSBkZXYuXG4iKTsKKwkJCWRldi0+aG9zdF9od19zdGF0ZSB8PSAoSF9JRSB8IEhfSUcgfCBIX1JEWSk7CisJCQltZWlfaGNzcl9zZXQoZGV2KTsKKwkJCWRldi0+bWVpX3N0YXRlID0gTUVJX0lOSVRfQ0xJRU5UUzsKKwkJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAibGluayBpcyBlc3RhYmxpc2hlZCBzdGFydCBzZW5kaW5nIG1lc3NhZ2VzLlxuIik7CisJCQkvKiBsaW5rIGlzIGVzdGFibGlzaGVkCisJCQkgKiBzdGFydCBzZW5kaW5nIG1lc3NhZ2VzLgorCQkJICovCisJCQlob3N0X3N0YXJ0X21lc3NhZ2UoZGV2KTsKKwkJCW11dGV4X3VubG9jaygmZGV2LT5kZXZpY2VfbG9jayk7CisJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCX0gZWxzZSB7CisJCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgIkZXIG5vdCByZWFkeS5cbiIpOworCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJfQorCX0KKwkvKiBjaGVjayBzbG90cyBhdmFsYWJsZSBmb3IgcmVhZGluZyAqLworCXNsb3RzID0gbWVpX2NvdW50X2Z1bGxfcmVhZF9zbG90cyhkZXYpOworCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAic2xvdHMgPSUwOHggIGV4dHJhX3dyaXRlX2luZGV4ID0lMDh4LlxuIiwKKwkJc2xvdHMsIGRldi0+ZXh0cmFfd3JpdGVfaW5kZXgpOworCXdoaWxlIChzbG90cyA+IDAgJiYgIWRldi0+ZXh0cmFfd3JpdGVfaW5kZXgpIHsKKwkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJzbG90cyA9JTA4eCAgZXh0cmFfd3JpdGVfaW5kZXggPSUwOHguXG4iLAorCQkJCXNsb3RzLCBkZXYtPmV4dHJhX3dyaXRlX2luZGV4KTsKKwkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJjYWxsIG1laV9pcnFfdGhyZWFkX3JlYWRfaGFuZGxlci5cbiIpOworCQlyZXRzID0gbWVpX2lycV90aHJlYWRfcmVhZF9oYW5kbGVyKCZjb21wbGV0ZV9saXN0LCBkZXYsICZzbG90cyk7CisJCWlmIChyZXRzKQorCQkJZ290byBlbmQ7CisJfQorCXJldHMgPSBtZWlfaXJxX3RocmVhZF93cml0ZV9oYW5kbGVyKCZjb21wbGV0ZV9saXN0LCBkZXYsICZzbG90cyk7CitlbmQ6CisJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJlbmQgb2YgYm90dG9tIGhhbGYgZnVuY3Rpb24uXG4iKTsKKwlkZXYtPmhvc3RfaHdfc3RhdGUgPSBtZWlfaGNzcl9yZWFkKGRldik7CisJZGV2LT5tZWlfaG9zdF9idWZmZXJfaXNfZW1wdHkgPSBtZWlfaG9zdF9idWZmZXJfaXNfZW1wdHkoZGV2KTsKKworCWJ1c19tZXNzYWdlX3JlY2VpdmVkID0gZmFsc2U7CisJaWYgKGRldi0+cmVjdmRfbXNnICYmIHdhaXRxdWV1ZV9hY3RpdmUoJmRldi0+d2FpdF9yZWN2ZF9tc2cpKSB7CisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAicmVjZWl2ZWQgd2FpdGluZyBidXMgbWVzc2FnZVxuIik7CisJCWJ1c19tZXNzYWdlX3JlY2VpdmVkID0gdHJ1ZTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmRldmljZV9sb2NrKTsKKwlpZiAoYnVzX21lc3NhZ2VfcmVjZWl2ZWQpIHsKKwkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJ3YWtlIHVwIGRldi0+d2FpdF9yZWN2ZF9tc2dcbiIpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmRldi0+d2FpdF9yZWN2ZF9tc2cpOworCQlidXNfbWVzc2FnZV9yZWNlaXZlZCA9IGZhbHNlOworCX0KKwlpZiAoY29tcGxldGVfbGlzdC5zdGF0dXMgfHwgbGlzdF9lbXB0eSgmY29tcGxldGVfbGlzdC5tZWlfY2IuY2JfbGlzdCkpCisJCXJldHVybiBJUlFfSEFORExFRDsKKworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNiX3BvcywgY2JfbmV4dCwKKwkJCSZjb21wbGV0ZV9saXN0Lm1laV9jYi5jYl9saXN0LCBjYl9saXN0KSB7CisJCWNsID0gKHN0cnVjdCBtZWlfY2wgKiljYl9wb3MtPmZpbGVfcHJpdmF0ZTsKKwkJbGlzdF9kZWwoJmNiX3Bvcy0+Y2JfbGlzdCk7CisJCWlmIChjbCkgeworCQkJaWYgKGNsICE9ICZkZXYtPmlhbXRoaWZfY2wpIHsKKwkJCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgImNvbXBsZXRpbmcgY2FsbCBiYWNrLlxuIik7CisJCQkJX21laV9jbXBsKGNsLCBjYl9wb3MpOworCQkJCWNiX3BvcyA9IE5VTEw7CisJCQl9IGVsc2UgaWYgKGNsID09ICZkZXYtPmlhbXRoaWZfY2wpIHsKKwkJCQlfbWVpX2NtcGxfaWFtdGhpZihkZXYsIGNiX3Bvcyk7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laS9pb3J3LmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpL2lvcncuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTdhMjc3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laS9pb3J3LmMKQEAgLTAsMCArMSw2MDQgQEAKKy8qCisgKgorICogSW50ZWwgTWFuYWdlbWVudCBFbmdpbmUgSW50ZXJmYWNlIChJbnRlbCBNRUkpIExpbnV4IGRyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMTEsIEludGVsIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KKyNpbmNsdWRlIDxsaW51eC9haW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC91dWlkLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKworCisjaW5jbHVkZSAibWVpX2Rldi5oIgorI2luY2x1ZGUgImh3LmgiCisjaW5jbHVkZSAibWVpLmgiCisjaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibWVpX3ZlcnNpb24uaCIKKworCisKKy8qKgorICogbWVpX2lvY3RsX2Nvbm5lY3RfY2xpZW50IC0gdGhlIGNvbm5lY3QgdG8gZncgY2xpZW50IElPQ1RMIGZ1bmN0aW9uCisgKgorICogQGRldjogdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBkYXRhOiBJT0NUTCBjb25uZWN0IGRhdGEsIGlucHV0IGFuZCBvdXRwdXQgcGFyYW1ldGVycworICogQGZpbGU6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QKKyAqCisgKiBMb2NraW5nOiBjYWxsZWQgdW5kZXIgImRldi0+ZGV2aWNlX2xvY2siIGxvY2sKKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgPDAgb24gZmFpbHVyZS4KKyAqLworaW50IG1laV9pb2N0bF9jb25uZWN0X2NsaWVudChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCXN0cnVjdCBtZWlfY29ubmVjdF9jbGllbnRfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgbWVpX2RldmljZSAqZGV2OworCXN0cnVjdCBtZWlfY2xfY2IgKmNiOworCXN0cnVjdCBtZWlfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IG1laV9jbCAqY2w7CisJc3RydWN0IG1laV9jbCAqY2xfcG9zID0gTlVMTDsKKwlzdHJ1Y3QgbWVpX2NsICpjbF9uZXh0ID0gTlVMTDsKKwlsb25nIHRpbWVvdXQgPSBDT05ORUNUX1RJTUVPVVQ7CisJaW50IGk7CisJaW50IGVycjsKKwlpbnQgcmV0czsKKworCWNsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWlmIChXQVJOX09OKCFjbCB8fCAhY2wtPmRldikpCisJCXJldHVybiAtRU5PREVWOworCisJZGV2ID0gY2wtPmRldjsKKworCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAibWVpX2lvY3RsX2Nvbm5lY3RfY2xpZW50KCkgRW50cnlcbiIpOworCisKKwkvKiBidWZmZXJlZCBpb2N0bCBjYiAqLworCWNiID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1laV9jbF9jYiksIEdGUF9LRVJORUwpOworCWlmICghY2IpIHsKKwkJcmV0cyA9IC1FTk9NRU07CisJCWdvdG8gZW5kOworCX0KKwlJTklUX0xJU1RfSEVBRCgmY2ItPmNiX2xpc3QpOworCisJY2ItPm1ham9yX2ZpbGVfb3BlcmF0aW9ucyA9IE1FSV9JT0NUTDsKKworCWlmIChkZXYtPm1laV9zdGF0ZSAhPSBNRUlfRU5BQkxFRCkgeworCQlyZXRzID0gLUVOT0RFVjsKKwkJZ290byBlbmQ7CisJfQorCWlmIChjbC0+c3RhdGUgIT0gTUVJX0ZJTEVfSU5JVElBTElaSU5HICYmCisJICAgIGNsLT5zdGF0ZSAhPSBNRUlfRklMRV9ESVNDT05ORUNURUQpIHsKKwkJcmV0cyA9IC1FQlVTWTsKKwkJZ290byBlbmQ7CisJfQorCisJLyogZmluZCBNRSBjbGllbnQgd2UncmUgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gKi8KKwlpID0gbWVpX2ZpbmRfbWVfY2xpZW50X2luZGV4KGRldiwgZGF0YS0+aW5fY2xpZW50X3V1aWQpOworCWlmIChpID49IDAgJiYgIWRldi0+bWVfY2xpZW50c1tpXS5wcm9wcy5maXhlZF9hZGRyZXNzKSB7CisJCWNsLT5tZV9jbGllbnRfaWQgPSBkZXYtPm1lX2NsaWVudHNbaV0uY2xpZW50X2lkOworCQljbC0+c3RhdGUgPSBNRUlfRklMRV9DT05ORUNUSU5HOworCX0KKworCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiQ29ubmVjdCB0byBGVyBDbGllbnQgSUQgPSAlZFxuIiwKKwkJCWNsLT5tZV9jbGllbnRfaWQpOworCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiRlcgQ2xpZW50IC0gUHJvdG9jb2wgVmVyc2lvbiA9ICVkXG4iLAorCQkJZGV2LT5tZV9jbGllbnRzW2ldLnByb3BzLnByb3RvY29sX3ZlcnNpb24pOworCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiRlcgQ2xpZW50IC0gTWF4IE1zZyBMZW4gPSAlZFxuIiwKKwkJCWRldi0+bWVfY2xpZW50c1tpXS5wcm9wcy5tYXhfbXNnX2xlbmd0aCk7CisKKwkvKiBpZiB3ZSdyZSBjb25uZWN0aW5nIHRvIGFtdGhpIGNsaWVudCBzbyB3ZSB3aWxsIHVzZSB0aGUgZXhpc3QKKwkgKiBjb25uZWN0aW9uCisJICovCisJaWYgKHV1aWRfbGVfY21wKGRhdGEtPmluX2NsaWVudF91dWlkLCBtZWlfYW10aGlfZ3VpZCkgPT0gMCkgeworCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgIkZXIENsaWVudCBpcyBhbXRoaVxuIik7CisJCWlmIChkZXYtPmlhbXRoaWZfY2wuc3RhdGUgIT0gTUVJX0ZJTEVfQ09OTkVDVEVEKSB7CisJCQlyZXRzID0gLUVOT0RFVjsKKwkJCWdvdG8gZW5kOworCQl9CisJCWNsZWFyX2JpdChjbC0+aG9zdF9jbGllbnRfaWQsIGRldi0+aG9zdF9jbGllbnRzX21hcCk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjbF9wb3MsIGNsX25leHQsCisJCQkJCSAmZGV2LT5maWxlX2xpc3QsIGxpbmspIHsKKwkJCWlmIChtZWlfZmVfc2FtZV9pZChjbCwgY2xfcG9zKSkgeworCQkJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LAorCQkJCQkicmVtb3ZlIGZpbGUgcHJpdmF0ZSBkYXRhIG5vZGUgaG9zdCIKKwkJCQkgICAgIiBjbGllbnQgPSAlZCwgTUUgY2xpZW50ID0gJWQuXG4iLAorCQkJCSAgICBjbF9wb3MtPmhvc3RfY2xpZW50X2lkLAorCQkJCSAgICBjbF9wb3MtPm1lX2NsaWVudF9pZCk7CisJCQkJbGlzdF9kZWwoJmNsX3Bvcy0+bGluayk7CisJCQl9CisKKwkJfQorCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgImZyZWUgZmlsZSBwcml2YXRlIGRhdGEgbWVtb3J5LlxuIik7CisJCWtmcmVlKGNsKTsKKworCQljbCA9IE5VTEw7CisJCWZpbGUtPnByaXZhdGVfZGF0YSA9ICZkZXYtPmlhbXRoaWZfY2w7CisKKwkJY2xpZW50ID0gJmRhdGEtPm91dF9jbGllbnRfcHJvcGVydGllczsKKwkJY2xpZW50LT5tYXhfbXNnX2xlbmd0aCA9CisJCQlkZXYtPm1lX2NsaWVudHNbaV0ucHJvcHMubWF4X21zZ19sZW5ndGg7CisJCWNsaWVudC0+cHJvdG9jb2xfdmVyc2lvbiA9CisJCQlkZXYtPm1lX2NsaWVudHNbaV0ucHJvcHMucHJvdG9jb2xfdmVyc2lvbjsKKwkJcmV0cyA9IGRldi0+aWFtdGhpZl9jbC5zdGF0dXM7CisKKwkJZ290byBlbmQ7CisJfQorCisJaWYgKGNsLT5zdGF0ZSAhPSBNRUlfRklMRV9DT05ORUNUSU5HKSB7CisJCXJldHMgPSAtRU5PREVWOworCQlnb3RvIGVuZDsKKwl9CisKKworCS8qIHByZXBhcmUgdGhlIG91dHB1dCBidWZmZXIgKi8KKwljbGllbnQgPSAmZGF0YS0+b3V0X2NsaWVudF9wcm9wZXJ0aWVzOworCWNsaWVudC0+bWF4X21zZ19sZW5ndGggPSBkZXYtPm1lX2NsaWVudHNbaV0ucHJvcHMubWF4X21zZ19sZW5ndGg7CisJY2xpZW50LT5wcm90b2NvbF92ZXJzaW9uID0gZGV2LT5tZV9jbGllbnRzW2ldLnByb3BzLnByb3RvY29sX3ZlcnNpb247CisJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJDYW4gY29ubmVjdD9cbiIpOworCWlmIChkZXYtPm1laV9ob3N0X2J1ZmZlcl9pc19lbXB0eQorCSAgICAmJiAhbWVpX290aGVyX2NsaWVudF9pc19jb25uZWN0aW5nKGRldiwgY2wpKSB7CisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiU2VuZGluZyBDb25uZWN0IE1lc3NhZ2VcbiIpOworCQlkZXYtPm1laV9ob3N0X2J1ZmZlcl9pc19lbXB0eSA9IDA7CisJCWlmICghbWVpX2Nvbm5lY3QoZGV2LCBjbCkpIHsKKwkJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiU2VuZGluZyBjb25uZWN0IG1lc3NhZ2UgLSBmYWlsZWRcbiIpOworCQkJcmV0cyA9IC1FTk9ERVY7CisJCQlnb3RvIGVuZDsKKwkJfSBlbHNlIHsKKwkJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiU2VuZGluZyBjb25uZWN0IG1lc3NhZ2UgLSBzdWNjZWVkZWRcbiIpOworCQkJY2wtPnRpbWVyX2NvdW50ID0gTUVJX0NPTk5FQ1RfVElNRU9VVDsKKwkJCWNiLT5maWxlX3ByaXZhdGUgPSBjbDsKKwkJCWxpc3RfYWRkX3RhaWwoJmNiLT5jYl9saXN0LAorCQkJCSAgICAgICZkZXYtPmN0cmxfcmRfbGlzdC5tZWlfY2IuCisJCQkJICAgICAgY2JfbGlzdCk7CisJCX0KKworCisJfSBlbHNlIHsKKwkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJRdWV1aW5nIHRoZSBjb25uZWN0IHJlcXVlc3QgZHVlIHRvIGRldmljZSBidXN5XG4iKTsKKwkJY2ItPmZpbGVfcHJpdmF0ZSA9IGNsOworCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgImFkZCBjb25uZWN0IGNiIHRvIGNvbnRyb2wgd3JpdGUgbGlzdC5cbiIpOworCQlsaXN0X2FkZF90YWlsKCZjYi0+Y2JfbGlzdCwKKwkJCSAgICAgICZkZXYtPmN0cmxfd3JfbGlzdC5tZWlfY2IuY2JfbGlzdCk7CisJfQorCW11dGV4X3VubG9jaygmZGV2LT5kZXZpY2VfbG9jayk7CisJZXJyID0gd2FpdF9ldmVudF90aW1lb3V0KGRldi0+d2FpdF9yZWN2ZF9tc2csCisJCQkoTUVJX0ZJTEVfQ09OTkVDVEVEID09IGNsLT5zdGF0ZSB8fAorCQkJIE1FSV9GSUxFX0RJU0NPTk5FQ1RFRCA9PSBjbC0+c3RhdGUpLAorCQkJdGltZW91dCAqIEhaKTsKKworCW11dGV4X2xvY2soJmRldi0+ZGV2aWNlX2xvY2spOworCWlmIChNRUlfRklMRV9DT05ORUNURUQgPT0gY2wtPnN0YXRlKSB7CisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAic3VjY2Vzc2Z1bGx5IGNvbm5lY3RlZCB0byBGVyBjbGllbnQuXG4iKTsKKwkJcmV0cyA9IGNsLT5zdGF0dXM7CisJCWdvdG8gZW5kOworCX0gZWxzZSB7CisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiZmFpbGVkIHRvIGNvbm5lY3QgdG8gRlcgY2xpZW50LmNsLT5zdGF0ZSA9ICVkLlxuIiwKKwkJICAgIGNsLT5zdGF0ZSk7CisJCWlmICghZXJyKSB7CisJCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwKKwkJCQkid2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQgZmFpbGVkIG9uIGNsaWVudCIKKwkJCQkiIGNvbm5lY3QgbWVzc2FnZSBmdyByZXNwb25zZSBtZXNzYWdlLlxuIik7CisJCX0KKwkJcmV0cyA9IC1FRkFVTFQ7CisKKwkJbWVpX2ZsdXNoX2xpc3QoJmRldi0+Y3RybF9yZF9saXN0LCBjbCk7CisJCW1laV9mbHVzaF9saXN0KCZkZXYtPmN0cmxfd3JfbGlzdCwgY2wpOworCQlnb3RvIGVuZDsKKwl9CisJcmV0cyA9IDA7CitlbmQ6CisJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJmcmVlIGNvbm5lY3QgY2IgbWVtb3J5LiIpOworCWtmcmVlKGNiKTsKKwlyZXR1cm4gcmV0czsKK30KKworLyoqCisgKiBmaW5kX2FtdGhpX3JlYWRfbGlzdF9lbnRyeSAtIGZpbmRzIGEgYW10aGlsaXN0IGVudHJ5IGZvciBjdXJyZW50IGZpbGUKKyAqCisgKiBAZGV2OiB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICogQGZpbGU6IHBvaW50ZXIgdG8gZmlsZSBvYmplY3QKKyAqCisgKiByZXR1cm5zICAgcmV0dXJuZWQgYSBsaXN0IGVudHJ5IG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KKyAqLworc3RydWN0IG1laV9jbF9jYiAqZmluZF9hbXRoaV9yZWFkX2xpc3RfZW50cnkoCisJCXN0cnVjdCBtZWlfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBtZWlfY2wgKmNsX3RlbXA7CisJc3RydWN0IG1laV9jbF9jYiAqY2JfcG9zID0gTlVMTDsKKwlzdHJ1Y3QgbWVpX2NsX2NiICpjYl9uZXh0ID0gTlVMTDsKKworCWlmICghZGV2LT5hbXRoaV9yZWFkX2NvbXBsZXRlX2xpc3Quc3RhdHVzICYmCisJICAgICFsaXN0X2VtcHR5KCZkZXYtPmFtdGhpX3JlYWRfY29tcGxldGVfbGlzdC5tZWlfY2IuY2JfbGlzdCkpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNiX3BvcywgY2JfbmV4dCwKKwkJICAgICZkZXYtPmFtdGhpX3JlYWRfY29tcGxldGVfbGlzdC5tZWlfY2IuY2JfbGlzdCwgY2JfbGlzdCkgeworCQkJY2xfdGVtcCA9IChzdHJ1Y3QgbWVpX2NsICopY2JfcG9zLT5maWxlX3ByaXZhdGU7CisJCQlpZiAoY2xfdGVtcCAmJiBjbF90ZW1wID09ICZkZXYtPmlhbXRoaWZfY2wgJiYKKwkJCQljYl9wb3MtPmZpbGVfb2JqZWN0ID09IGZpbGUpCisJCQkJcmV0dXJuIGNiX3BvczsKKwkJfQorCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBhbXRoaV9yZWFkIC0gcmVhZCBkYXRhIGZyb20gQU1USEkgY2xpZW50CisgKgorICogQGRldjogdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBpZl9udW06ICBtaW5vciBudW1iZXIKKyAqIEBmaWxlOiBwb2ludGVyIHRvIGZpbGUgb2JqZWN0CisgKiBAKnVidWY6IHBvaW50ZXIgdG8gdXNlciBkYXRhIGluIHVzZXIgc3BhY2UKKyAqIEBsZW5ndGg6IGRhdGEgbGVuZ3RoIHRvIHJlYWQKKyAqIEBvZmZzZXQ6IGRhdGEgcmVhZCBvZmZzZXQKKyAqCisgKiBMb2NraW5nOiBjYWxsZWQgdW5kZXIgImRldi0+ZGV2aWNlX2xvY2siIGxvY2sKKyAqCisgKiByZXR1cm5zCisgKiAgcmV0dXJuZWQgZGF0YSBsZW5ndGggb24gc3VjY2VzcywKKyAqICB6ZXJvIGlmIG5vIGRhdGEgdG8gcmVhZCwKKyAqICBuZWdhdGl2ZSBvbiBmYWlsdXJlLgorICovCitpbnQgYW10aGlfcmVhZChzdHJ1Y3QgbWVpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkgICAgICBjaGFyIF9fdXNlciAqdWJ1Ziwgc2l6ZV90IGxlbmd0aCwgbG9mZl90ICpvZmZzZXQpCit7CisJaW50IHJldHM7CisJaW50IHdhaXRfcmV0OworCXN0cnVjdCBtZWlfY2xfY2IgKmNiID0gTlVMTDsKKwlzdHJ1Y3QgbWVpX2NsICpjbCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJaW50IGk7CisKKwkvKiBPbmx5IFBvc2libGUgaWYgd2UgYXJlIGluIHRpbWVvdXQgKi8KKwlpZiAoIWNsIHx8IGNsICE9ICZkZXYtPmlhbXRoaWZfY2wpIHsKKwkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJiYWQgZmlsZSBleHQuXG4iKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX21laV9tZV9jbGllbnRzOyBpKyspIHsKKwkJaWYgKGRldi0+bWVfY2xpZW50c1tpXS5jbGllbnRfaWQgPT0KKwkJICAgIGRldi0+aWFtdGhpZl9jbC5tZV9jbGllbnRfaWQpCisJCQlicmVhazsKKwl9CisKKwlpZiAoaSA9PSBkZXYtPm51bV9tZWlfbWVfY2xpZW50cykgeworCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgImFtdGhpIGNsaWVudCBub3QgZm91bmQuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWlmIChXQVJOX09OKGRldi0+bWVfY2xpZW50c1tpXS5jbGllbnRfaWQgIT0gY2wtPm1lX2NsaWVudF9pZCkpCisJCXJldHVybiAtRU5PREVWOworCisJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJjaGVja2luZyBhbXRoaSBkYXRhXG4iKTsKKwljYiA9IGZpbmRfYW10aGlfcmVhZF9saXN0X2VudHJ5KGRldiwgZmlsZSk7CisKKwkvKiBDaGVjayBmb3IgaWYgd2UgY2FuIGJsb2NrIG9yIG5vdCovCisJaWYgKGNiID09IE5VTEwgJiYgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCisJCXJldHVybiAtRUFHQUlOOworCisKKwlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgIndhaXRpbmcgZm9yIGFtdGhpIGRhdGFcbiIpOworCXdoaWxlIChjYiA9PSBOVUxMKSB7CisJCS8qIHVubG9jayB0aGUgTXV0ZXggKi8KKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmRldmljZV9sb2NrKTsKKworCQl3YWl0X3JldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkZXYtPmlhbXRoaWZfY2wud2FpdCwKKwkJCShjYiA9IGZpbmRfYW10aGlfcmVhZF9saXN0X2VudHJ5KGRldiwgZmlsZSkpKTsKKworCQlpZiAod2FpdF9yZXQpCisJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAid29rZSB1cCBmcm9tIHNsZWVwXG4iKTsKKworCQkvKiBMb2NraW5nIGFnYWluIHRoZSBNdXRleCAqLworCQltdXRleF9sb2NrKCZkZXYtPmRldmljZV9sb2NrKTsKKwl9CisKKworCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiR290IGFtdGhpIGRhdGFcbiIpOworCWRldi0+aWFtdGhpZl90aW1lciA9IDA7CisKKwlpZiAoY2IpIHsKKwkJdGltZW91dCA9IGNiLT5yZWFkX3RpbWUgKworCQkJCQltc2Vjc190b19qaWZmaWVzKElBTVRISUZfUkVBRF9USU1FUik7CisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiYW10aGkgdGltZW91dCA9ICVsdWRcbiIsCisJCQkJdGltZW91dCk7CisKKwkJaWYgICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgImFtdGhpIFRpbWUgb3V0XG4iKTsKKwkJCS8qIDE1IHNlYyBmb3IgdGhlIG1lc3NhZ2UgaGFzIGV4cGlyZWQgKi8KKwkJCWxpc3RfZGVsKCZjYi0+Y2JfbGlzdCk7CisJCQlyZXRzID0gLUVUSU1FRE9VVDsKKwkJCWdvdG8gZnJlZTsKKwkJfQorCX0KKwkvKiBpZiB0aGUgd2hvbGUgbWVzc2FnZSB3aWxsIGZpdCByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCAqLworCWlmIChjYi0+aW5mb3JtYXRpb24gPj0gKm9mZnNldCAmJgorCSAgICBsZW5ndGggPj0gKGNiLT5pbmZvcm1hdGlvbiAtICpvZmZzZXQpKQorCQlsaXN0X2RlbCgmY2ItPmNiX2xpc3QpOworCWVsc2UgaWYgKGNiLT5pbmZvcm1hdGlvbiA+IDAgJiYgY2ItPmluZm9ybWF0aW9uIDw9ICpvZmZzZXQpIHsKKwkJLyogZW5kIG9mIHRoZSBtZXNzYWdlIGhhcyBiZWVuIHJlYWNoZWQgKi8KKwkJbGlzdF9kZWwoJmNiLT5jYl9saXN0KTsKKwkJcmV0cyA9IDA7CisJCWdvdG8gZnJlZTsKKwl9CisJCS8qIGVsc2UgbWVhbnMgdGhhdCBub3QgZnVsbCBidWZmZXIgd2lsbCBiZSByZWFkIGFuZCBkbyBub3QKKwkJICogcmVtb3ZlIG1lc3NhZ2UgZnJvbSBkZWxldGlvbiBsaXN0CisJCSAqLworCisJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJhbXRoaSBjYi0+cmVzcG9uc2VfYnVmZmVyIHNpemUgLSAlZFxuIiwKKwkgICAgY2ItPnJlc3BvbnNlX2J1ZmZlci5zaXplKTsKKwlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgImFtdGhpIGNiLT5pbmZvcm1hdGlvbiAtICVsdVxuIiwKKwkgICAgY2ItPmluZm9ybWF0aW9uKTsKKworCS8qIGxlbmd0aCBpcyBiZWluZyB0dXJuY2F0ZWQgdG8gUEFHRV9TSVpFLCBob3dldmVyLAorCSAqIHRoZSBpbmZvcm1hdGlvbiBtYXkgYmUgbG9uZ2VyICovCisJbGVuZ3RoID0gbWluX3Qoc2l6ZV90LCBsZW5ndGgsIChjYi0+aW5mb3JtYXRpb24gLSAqb2Zmc2V0KSk7CisKKwlpZiAoY29weV90b191c2VyKHVidWYsCisJCQkgY2ItPnJlc3BvbnNlX2J1ZmZlci5kYXRhICsgKm9mZnNldCwKKwkJCSBsZW5ndGgpKQorCQlyZXRzID0gLUVGQVVMVDsKKwllbHNlIHsKKwkJcmV0cyA9IGxlbmd0aDsKKwkJaWYgKCgqb2Zmc2V0ICsgbGVuZ3RoKSA8IGNiLT5pbmZvcm1hdGlvbikgeworCQkJKm9mZnNldCArPSBsZW5ndGg7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KK2ZyZWU6CisJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJmcmVlIGFtdGhpIGNiIG1lbW9yeS5cbiIpOworCSpvZmZzZXQgPSAwOworCW1laV9mcmVlX2NiX3ByaXZhdGUoY2IpOworb3V0OgorCXJldHVybiByZXRzOworfQorCisvKioKKyAqIG1laV9zdGFydF9yZWFkIC0gdGhlIHN0YXJ0IHJlYWQgY2xpZW50IG1lc3NhZ2UgZnVuY3Rpb24uCisgKgorICogQGRldjogdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBpZl9udW06ICBtaW5vciBudW1iZXIKKyAqIEBjbDogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdAorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlLgorICovCitpbnQgbWVpX3N0YXJ0X3JlYWQoc3RydWN0IG1laV9kZXZpY2UgKmRldiwgc3RydWN0IG1laV9jbCAqY2wpCit7CisJc3RydWN0IG1laV9jbF9jYiAqY2I7CisJaW50IHJldHMgPSAwOworCWludCBpOworCisJaWYgKGNsLT5zdGF0ZSAhPSBNRUlfRklMRV9DT05ORUNURUQpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKGRldi0+bWVpX3N0YXRlICE9IE1FSV9FTkFCTEVEKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiY2hlY2sgaWYgcmVhZCBpcyBwZW5kaW5nLlxuIik7CisJaWYgKGNsLT5yZWFkX3BlbmRpbmcgfHwgY2wtPnJlYWRfY2IpIHsKKwkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJyZWFkIGlzIHBlbmRpbmcuXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwljYiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtZWlfY2xfY2IpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiYWxsb2NhdGlvbiBjYWxsIGJhY2sgc3VjY2Vzc2Z1bC4gaG9zdCBjbGllbnQgPSAlZCwgTUUgY2xpZW50ID0gJWRcbiIsCisJCWNsLT5ob3N0X2NsaWVudF9pZCwgY2wtPm1lX2NsaWVudF9pZCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1fbWVpX21lX2NsaWVudHM7IGkrKykgeworCQlpZiAoZGV2LT5tZV9jbGllbnRzW2ldLmNsaWVudF9pZCA9PSBjbC0+bWVfY2xpZW50X2lkKQorCQkJYnJlYWs7CisKKwl9CisKKwlpZiAoV0FSTl9PTihkZXYtPm1lX2NsaWVudHNbaV0uY2xpZW50X2lkICE9IGNsLT5tZV9jbGllbnRfaWQpKSB7CisJCXJldHMgPSAtRU5PREVWOworCQlnb3RvIHVubG9jazsKKwl9CisKKwlpZiAoaSA9PSBkZXYtPm51bV9tZWlfbWVfY2xpZW50cykgeworCQlyZXRzID0gLUVOT0RFVjsKKwkJZ290byB1bmxvY2s7CisJfQorCisJY2ItPnJlc3BvbnNlX2J1ZmZlci5zaXplID0gZGV2LT5tZV9jbGllbnRzW2ldLnByb3BzLm1heF9tc2dfbGVuZ3RoOworCWNiLT5yZXNwb25zZV9idWZmZXIuZGF0YSA9CisJICAgIGttYWxsb2MoY2ItPnJlc3BvbnNlX2J1ZmZlci5zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNiLT5yZXNwb25zZV9idWZmZXIuZGF0YSkgeworCQlyZXRzID0gLUVOT01FTTsKKwkJZ290byB1bmxvY2s7CisJfQorCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiYWxsb2NhdGlvbiBjYWxsIGJhY2sgZGF0YSBzdWNjZXNzLlxuIik7CisJY2ItPm1ham9yX2ZpbGVfb3BlcmF0aW9ucyA9IE1FSV9SRUFEOworCS8qIG1ha2Ugc3VyZSBpbmZvcm1hdGlvbiBpcyB6ZXJvIGJlZm9yZSB3ZSBzdGFydCAqLworCWNiLT5pbmZvcm1hdGlvbiA9IDA7CisJY2ItPmZpbGVfcHJpdmF0ZSA9ICh2b2lkICopIGNsOworCWNsLT5yZWFkX2NiID0gY2I7CisJaWYgKGRldi0+bWVpX2hvc3RfYnVmZmVyX2lzX2VtcHR5KSB7CisJCWRldi0+bWVpX2hvc3RfYnVmZmVyX2lzX2VtcHR5ID0gMDsKKwkJaWYgKCFtZWlfc2VuZF9mbG93X2NvbnRyb2woZGV2LCBjbCkpIHsKKwkJCXJldHMgPSAtRU5PREVWOworCQkJZ290byB1bmxvY2s7CisJCX0gZWxzZSB7CisJCQlsaXN0X2FkZF90YWlsKCZjYi0+Y2JfbGlzdCwKKwkJCQkgICAgICAmZGV2LT5yZWFkX2xpc3QubWVpX2NiLmNiX2xpc3QpOworCQl9CisJfSBlbHNlIHsKKwkJbGlzdF9hZGRfdGFpbCgmY2ItPmNiX2xpc3QsCisJCQkgICAgICAmZGV2LT5jdHJsX3dyX2xpc3QubWVpX2NiLmNiX2xpc3QpOworCX0KKwlyZXR1cm4gcmV0czsKK3VubG9jazoKKwltZWlfZnJlZV9jYl9wcml2YXRlKGNiKTsKKwlyZXR1cm4gcmV0czsKK30KKworLyoqCisgKiBhbXRoaV93cml0ZSAtIHdyaXRlIGlhbXRoaWYgZGF0YSB0byBhbXRoaSBjbGllbnQKKyAqCisgKiBAZGV2OiB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICogQGNiOiBtZWkgY2FsbCBiYWNrIHN0cnVjdAorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlLgorICovCitpbnQgYW10aGlfd3JpdGUoc3RydWN0IG1laV9kZXZpY2UgKmRldiwgc3RydWN0IG1laV9jbF9jYiAqY2IpCit7CisJc3RydWN0IG1laV9tc2dfaGRyIG1laV9oZHI7CisJaW50IHJldDsKKworCWlmICghZGV2IHx8ICFjYikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgIndyaXRlIGRhdGEgdG8gYW10aGkgY2xpZW50LlxuIik7CisKKwlkZXYtPmlhbXRoaWZfc3RhdGUgPSBNRUlfSUFNVEhJRl9XUklUSU5HOworCWRldi0+aWFtdGhpZl9jdXJyZW50X2NiID0gY2I7CisJZGV2LT5pYW10aGlmX2ZpbGVfb2JqZWN0ID0gY2ItPmZpbGVfb2JqZWN0OworCWRldi0+aWFtdGhpZl9jYW5jZWxlZCA9IDA7CisJZGV2LT5pYW10aGlmX2lvY3RsID0gMTsKKwlkZXYtPmlhbXRoaWZfbXNnX2J1Zl9zaXplID0gY2ItPnJlcXVlc3RfYnVmZmVyLnNpemU7CisJbWVtY3B5KGRldi0+aWFtdGhpZl9tc2dfYnVmLCBjYi0+cmVxdWVzdF9idWZmZXIuZGF0YSwKKwkgICAgY2ItPnJlcXVlc3RfYnVmZmVyLnNpemUpOworCisJcmV0ID0gbWVpX2Zsb3dfY3RybF9jcmVkcyhkZXYsICZkZXYtPmlhbXRoaWZfY2wpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKHJldCAmJiBkZXYtPm1laV9ob3N0X2J1ZmZlcl9pc19lbXB0eSkgeworCQlyZXQgPSAwOworCQlkZXYtPm1laV9ob3N0X2J1ZmZlcl9pc19lbXB0eSA9IDA7CisJCWlmIChjYi0+cmVxdWVzdF9idWZmZXIuc2l6ZSA+CisJCQkoKChkZXYtPmhvc3RfaHdfc3RhdGUgJiBIX0NCRCkgPj4gMjQpICogc2l6ZW9mKHUzMikpCisJCQkJLXNpemVvZihzdHJ1Y3QgbWVpX21zZ19oZHIpKSB7CisJCQltZWlfaGRyLmxlbmd0aCA9CisJCQkgICAgKCgoZGV2LT5ob3N0X2h3X3N0YXRlICYgSF9DQkQpID4+IDI0KSAqCisJCQkgICAgc2l6ZW9mKHUzMikpIC0gc2l6ZW9mKHN0cnVjdCBtZWlfbXNnX2hkcik7CisJCQltZWlfaGRyLm1zZ19jb21wbGV0ZSA9IDA7CisJCX0gZWxzZSB7CisJCQltZWlfaGRyLmxlbmd0aCA9IGNiLT5yZXF1ZXN0X2J1ZmZlci5zaXplOworCQkJbWVpX2hkci5tc2dfY29tcGxldGUgPSAxOworCQl9CisKKwkJbWVpX2hkci5ob3N0X2FkZHIgPSBkZXYtPmlhbXRoaWZfY2wuaG9zdF9jbGllbnRfaWQ7CisJCW1laV9oZHIubWVfYWRkciA9IGRldi0+aWFtdGhpZl9jbC5tZV9jbGllbnRfaWQ7CisJCW1laV9oZHIucmVzZXJ2ZWQgPSAwOworCQlkZXYtPmlhbXRoaWZfbXNnX2J1Zl9pbmRleCArPSBtZWlfaGRyLmxlbmd0aDsKKwkJaWYgKCFtZWlfd3JpdGVfbWVzc2FnZShkZXYsICZtZWlfaGRyLAorCQkJCQkodW5zaWduZWQgY2hhciAqKShkZXYtPmlhbXRoaWZfbXNnX2J1ZiksCisJCQkJCW1laV9oZHIubGVuZ3RoKSkKKwkJCXJldHVybiAtRU5PREVWOworCisJCWlmIChtZWlfaGRyLm1zZ19jb21wbGV0ZSkgeworCQkJaWYgKG1laV9mbG93X2N0cmxfcmVkdWNlKGRldiwgJmRldi0+aWFtdGhpZl9jbCkpCisJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQlkZXYtPmlhbXRoaWZfZmxvd19jb250cm9sX3BlbmRpbmcgPSAxOworCQkJZGV2LT5pYW10aGlmX3N0YXRlID0gTUVJX0lBTVRISUZfRkxPV19DT05UUk9MOworCQkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJhZGQgYW10aGkgY2IgdG8gd3JpdGUgd2FpdGluZyBsaXN0XG4iKTsKKwkJCWRldi0+aWFtdGhpZl9jdXJyZW50X2NiID0gY2I7CisJCQlkZXYtPmlhbXRoaWZfZmlsZV9vYmplY3QgPSBjYi0+ZmlsZV9vYmplY3Q7CisJCQlsaXN0X2FkZF90YWlsKCZjYi0+Y2JfbGlzdCwKKwkJCQkgICAgICAmZGV2LT53cml0ZV93YWl0aW5nX2xpc3QubWVpX2NiLmNiX2xpc3QpOworCQl9IGVsc2UgeworCQkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJtZXNzYWdlIGRvZXMgbm90IGNvbXBsZXRlLCAiCisJCQkJCSJzbyBhZGQgYW10aGkgY2IgdG8gd3JpdGUgbGlzdC5cbiIpOworCQkJbGlzdF9hZGRfdGFpbCgmY2ItPmNiX2xpc3QsCisJCQkJICAgICAgJmRldi0+d3JpdGVfbGlzdC5tZWlfY2IuY2JfbGlzdCk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoIShkZXYtPm1laV9ob3N0X2J1ZmZlcl9pc19lbXB0eSkpCisJCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgImhvc3QgYnVmZmVyIGlzIG5vdCBlbXB0eSIpOworCisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiTm8gZmxvdyBjb250cm9sIGNyZWRlbnRpYWxzLCAiCisJCQkJInNvIGFkZCBpYW10aGlmIGNiIHRvIHdyaXRlIGxpc3QuXG4iKTsKKwkJbGlzdF9hZGRfdGFpbCgmY2ItPmNiX2xpc3QsCisJCQkgICAgICAmZGV2LT53cml0ZV9saXN0Lm1laV9jYi5jYl9saXN0KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaWFtdGhpZl9pb2N0bF9zZW5kX21zZyAtIHNlbmQgY21kIGRhdGEgdG8gYW10aGkgY2xpZW50CisgKgorICogQGRldjogdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgPDAgb24gZmFpbHVyZS4KKyAqLwordm9pZCBydW5fbmV4dF9pYW10aGlmX2NtZChzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtZWlfY2wgKmNsX3RtcDsKKwlzdHJ1Y3QgbWVpX2NsX2NiICpjYl9wb3MgPSBOVUxMOworCXN0cnVjdCBtZWlfY2xfY2IgKmNiX25leHQgPSBOVUxMOworCWludCBzdGF0dXM7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuOworCisJZGV2LT5pYW10aGlmX21zZ19idWZfc2l6ZSA9IDA7CisJZGV2LT5pYW10aGlmX21zZ19idWZfaW5kZXggPSAwOworCWRldi0+aWFtdGhpZl9jYW5jZWxlZCA9IDA7CisJZGV2LT5pYW10aGlmX2lvY3RsID0gMTsKKwlkZXYtPmlhbXRoaWZfc3RhdGUgPSBNRUlfSUFNVEhJRl9JRExFOworCWRldi0+aWFtdGhpZl90aW1lciA9IDA7CisJZGV2LT5pYW10aGlmX2ZpbGVfb2JqZWN0ID0gTlVMTDsKKworCWlmIChkZXYtPmFtdGhpX2NtZF9saXN0LnN0YXR1cyA9PSAwICYmCisJICAgICFsaXN0X2VtcHR5KCZkZXYtPmFtdGhpX2NtZF9saXN0Lm1laV9jYi5jYl9saXN0KSkgeworCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgImNvbXBsZXRlIGFtdGhpIGNtZF9saXN0IGNiLlxuIik7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNiX3BvcywgY2JfbmV4dCwKKwkJICAgICZkZXYtPmFtdGhpX2NtZF9saXN0Lm1laV9jYi5jYl9saXN0LCBjYl9saXN0KSB7CisJCQlsaXN0X2RlbCgmY2JfcG9zLT5jYl9saXN0KTsKKwkJCWNsX3RtcCA9IChzdHJ1Y3QgbWVpX2NsICopY2JfcG9zLT5maWxlX3ByaXZhdGU7CisKKwkJCWlmIChjbF90bXAgJiYgY2xfdG1wID09ICZkZXYtPmlhbXRoaWZfY2wpIHsKKwkJCQlzdGF0dXMgPSBhbXRoaV93cml0ZShkZXYsIGNiX3Bvcyk7CisJCQkJaWYgKHN0YXR1cykgeworCQkJCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwKKwkJCQkJCSJhbXRoaSB3cml0ZSBmYWlsZWQgc3RhdHVzID0gJWRcbiIsCisJCQkJCQkJc3RhdHVzKTsKKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KK30KKworLyoqCisgKiBtZWlfZnJlZV9jYl9wcml2YXRlIC0gZnJlZSBtZWlfY2JfcHJpdmF0ZSByZWxhdGVkIG1lbW9yeQorICoKKyAqIEBjYjogbWVpIGNhbGxiYWNrIHN0cnVjdAorICovCit2b2lkIG1laV9mcmVlX2NiX3ByaXZhdGUoc3RydWN0IG1laV9jbF9jYiAqY2IpCit7CisJaWYgKGNiID09IE5VTEwpCisJCXJldHVybjsKKworCWtmcmVlKGNiLT5yZXF1ZXN0X2J1ZmZlci5kYXRhKTsKKwlrZnJlZShjYi0+cmVzcG9uc2VfYnVmZmVyLmRhdGEpOworCWtmcmVlKGNiKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWkvbWFpbi5jIGIvZHJpdmVycy9zdGFnaW5nL21laS9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZkMWI0NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWkvbWFpbi5jCkBAIC0wLDAgKzEsMTM0OSBAQAorLyoKKyAqCisgKiBJbnRlbCBNYW5hZ2VtZW50IEVuZ2luZSBJbnRlcmZhY2UgKEludGVsIE1FSSkgTGludXggZHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAxMSwgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KKyNpbmNsdWRlIDxsaW51eC9haW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvY2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3V1aWQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNpbmNsdWRlICJtZWlfZGV2LmgiCisjaW5jbHVkZSAibWVpLmgiCisjaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibWVpX3ZlcnNpb24uaCIKKworCisjZGVmaW5lIE1FSV9SRUFEX1RJTUVPVVQgNDUKKyNkZWZpbmUgTUVJX0RSSVZFUl9OQU1FCSJtZWkiCisjZGVmaW5lIE1FSV9ERVZfTkFNRSAibWVpIgorCisvKgorICogIG1laSBkcml2ZXIgc3RyaW5ncworICovCitzdGF0aWMgY2hhciBtZWlfZHJpdmVyX25hbWVbXSA9IE1FSV9EUklWRVJfTkFNRTsKK3N0YXRpYyBjb25zdCBjaGFyIG1laV9kcml2ZXJfc3RyaW5nW10gPSAiSW50ZWwoUikgTWFuYWdlbWVudCBFbmdpbmUgSW50ZXJmYWNlIjsKK3N0YXRpYyBjb25zdCBjaGFyIG1laV9kcml2ZXJfdmVyc2lvbltdID0gTUVJX0RSSVZFUl9WRVJTSU9OOworCisvKiBtZWkgY2hhciBkZXZpY2UgZm9yIHJlZ2lzdHJhdGlvbiAqLworc3RhdGljIHN0cnVjdCBjZGV2IG1laV9jZGV2OworCisvKiBtYWpvciBudW1iZXIgZm9yIGRldmljZSAqLworc3RhdGljIGludCBtZWlfbWFqb3I7CisvKiBUaGUgZGV2aWNlIHBvaW50ZXIgKi8KKy8qIEN1cnJlbnRseSB0aGlzIGRyaXZlciB3b3JrcyBhcyBsb25nIGFzIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgQU1UIGRldmljZS4gKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqbWVpX2RldmljZTsKKworc3RhdGljIHN0cnVjdCBjbGFzcyAqbWVpX2NsYXNzOworCisKKy8qIG1laV9wY2lfdGJsIC0gUENJIERldmljZSBJRCBUYWJsZSAqLworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKG1laV9wY2lfdGJsKSA9IHsKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBNRUlfREVWX0lEXzgyOTQ2R1opfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBNRUlfREVWX0lEXzgyRzM1KX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgTUVJX0RFVl9JRF84MlE5NjUpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBNRUlfREVWX0lEXzgyRzk2NSl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIE1FSV9ERVZfSURfODJHTTk2NSl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIE1FSV9ERVZfSURfODJHTUU5NjUpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBNRUlfREVWX0lEX0lDSDlfODJRMzUpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBNRUlfREVWX0lEX0lDSDlfODJHMzMpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBNRUlfREVWX0lEX0lDSDlfODJRMzMpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBNRUlfREVWX0lEX0lDSDlfODJYMzgpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBNRUlfREVWX0lEX0lDSDlfMzIwMCl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIE1FSV9ERVZfSURfSUNIOV82KX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgTUVJX0RFVl9JRF9JQ0g5XzcpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBNRUlfREVWX0lEX0lDSDlfOCl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIE1FSV9ERVZfSURfSUNIOV85KX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgTUVJX0RFVl9JRF9JQ0g5XzEwKX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgTUVJX0RFVl9JRF9JQ0g5TV8xKX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgTUVJX0RFVl9JRF9JQ0g5TV8yKX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgTUVJX0RFVl9JRF9JQ0g5TV8zKX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgTUVJX0RFVl9JRF9JQ0g5TV80KX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgTUVJX0RFVl9JRF9JQ0gxMF8xKX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgTUVJX0RFVl9JRF9JQ0gxMF8yKX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgTUVJX0RFVl9JRF9JQ0gxMF8zKX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgTUVJX0RFVl9JRF9JQ0gxMF80KX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgTUVJX0RFVl9JRF9JQlhQS18xKX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgTUVJX0RFVl9JRF9JQlhQS18yKX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgTUVJX0RFVl9JRF9DUFRfMSl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIE1FSV9ERVZfSURfUEJHXzEpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBNRUlfREVWX0lEX1BQVF8xKX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgTUVJX0RFVl9JRF9QUFRfMil9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIE1FSV9ERVZfSURfUFBUXzMpfSwKKworCS8qIHJlcXVpcmVkIGxhc3QgZW50cnkgKi8KKwl7MCwgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG1laV9wY2lfdGJsKTsKKworc3RhdGljIERFRklORV9NVVRFWChtZWlfbXV0ZXgpOworCisvKioKKyAqIG1laV9wcm9iZSAtIERldmljZSBJbml0aWFsaXphdGlvbiBSb3V0aW5lCisgKgorICogQHBkZXY6IFBDSSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAZW50OiBlbnRyeSBpbiBrY3NfcGNpX3RibAorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtZWlfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlzdHJ1Y3QgbWVpX2RldmljZSAqZGV2OworCWludCBlcnI7CisKKwltdXRleF9sb2NrKCZtZWlfbXV0ZXgpOworCWlmIChtZWlfZGV2aWNlKSB7CisJCWVyciA9IC1FRVhJU1Q7CisJCWdvdG8gZW5kOworCX0KKwkvKiBlbmFibGUgcGNpIGRldiAqLworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZWk6IEZhaWxlZCB0byBlbmFibGUgcGNpIGRldmljZS5cbiIpOworCQlnb3RvIGVuZDsKKwl9CisJLyogc2V0IFBDSSBob3N0IG1hc3RlcmluZyAgKi8KKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKwkvKiBwY2kgcmVxdWVzdCByZWdpb25zIGZvciBtZWkgZHJpdmVyICovCisJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBtZWlfZHJpdmVyX25hbWUpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZWk6IEZhaWxlZCB0byBnZXQgcGNpIHJlZ2lvbnMuXG4iKTsKKwkJZ290byBkaXNhYmxlX2RldmljZTsKKwl9CisJLyogYWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyB0aGUgbWVpIGRldiBzdHJ1Y3R1cmUgKi8KKwlkZXYgPSBpbml0X21laV9kZXZpY2UocGRldik7CisJaWYgKCFkZXYpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byByZWxlYXNlX3JlZ2lvbnM7CisJfQorCS8qIG1hcHBpbmcgIElPIGRldmljZSBtZW1vcnkgKi8KKwlkZXYtPm1lbV9hZGRyID0gcGNpX2lvbWFwKHBkZXYsIDAsIDApOworCWlmICghZGV2LT5tZW1fYWRkcikgeworCQlwcmludGsoS0VSTl9FUlIgIm1laTogbWFwcGluZyBJL08gZGV2aWNlIG1lbW9yeSBmYWlsdXJlLlxuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZnJlZV9kZXZpY2U7CisJfQorCS8qIHJlcXVlc3QgYW5kIGVuYWJsZSBpbnRlcnJ1cHQgICAqLworCWVyciA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHBkZXYtPmlycSwKKwkJCW1laV9pbnRlcnJ1cHRfcXVpY2tfaGFuZGxlciwKKwkJCW1laV9pbnRlcnJ1cHRfdGhyZWFkX2hhbmRsZXIsCisJCQlJUlFGX1NIQVJFRCwgbWVpX2RyaXZlcl9uYW1lLCBkZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZWk6IHJlcXVlc3RfdGhyZWFkZWRfaXJxIGZhaWx1cmUuIGlycSA9ICVkXG4iLAorCQkgICAgICAgcGRldi0+aXJxKTsKKwkJZ290byB1bm1hcF9tZW1vcnk7CisJfQorCUlOSVRfREVMQVlFRF9XT1JLKCZkZXYtPndkX3dvcmssIG1laV93ZF90aW1lcik7CisJaWYgKG1laV9od19pbml0KGRldikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZWk6IEluaXQgaHcgZmFpbHVyZS5cbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIHJlbGVhc2VfaXJxOworCX0KKwltZWlfZGV2aWNlID0gcGRldjsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldi0+d2Rfd29yaywgSFopOworCisJbXV0ZXhfdW5sb2NrKCZtZWlfbXV0ZXgpOworCisJcHJfZGVidWcoIm1laTogRHJpdmVyIGluaXRpYWxpemF0aW9uIHN1Y2Nlc3NmdWwuXG4iKTsKKworCXJldHVybiAwOworCityZWxlYXNlX2lycToKKwkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KKwlkZXYtPmhvc3RfaHdfc3RhdGUgPSBtZWlfaGNzcl9yZWFkKGRldik7CisJbWVpX2Rpc2FibGVfaW50ZXJydXB0cyhkZXYpOworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJZnJlZV9pcnEocGRldi0+aXJxLCBkZXYpOwordW5tYXBfbWVtb3J5OgorCXBjaV9pb3VubWFwKHBkZXYsIGRldi0+bWVtX2FkZHIpOworZnJlZV9kZXZpY2U6CisJa2ZyZWUoZGV2KTsKK3JlbGVhc2VfcmVnaW9uczoKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworZGlzYWJsZV9kZXZpY2U6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworZW5kOgorCW11dGV4X3VubG9jaygmbWVpX211dGV4KTsKKwlwcmludGsoS0VSTl9FUlIgIm1laTogRHJpdmVyIGluaXRpYWxpemF0aW9uIGZhaWxlZC5cbiIpOworCXJldHVybiBlcnI7Cit9CisKKy8qKgorICogbWVpX3JlbW92ZSAtIERldmljZSBSZW1vdmFsIFJvdXRpbmUKKyAqCisgKiBAcGRldjogUENJIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiBtZWlfcmVtb3ZlIGlzIGNhbGxlZCBieSB0aGUgUENJIHN1YnN5c3RlbSB0byBhbGVydCB0aGUgZHJpdmVyCisgKiB0aGF0IGl0IHNob3VsZCByZWxlYXNlIGEgUENJIGRldmljZS4KKyAqLworc3RhdGljIHZvaWQgX19kZXZleGl0IG1laV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG1laV9kZXZpY2UgKmRldjsKKworCWlmIChtZWlfZGV2aWNlICE9IHBkZXYpCisJCXJldHVybjsKKworCWRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpZiAoIWRldikKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmZGV2LT5kZXZpY2VfbG9jayk7CisKKwltZWlfd2Rfc3RvcChkZXYsIGZhbHNlKTsKKworCW1laV9kZXZpY2UgPSBOVUxMOworCisJaWYgKGRldi0+aWFtdGhpZl9jbC5zdGF0ZSA9PSBNRUlfRklMRV9DT05ORUNURUQpIHsKKwkJZGV2LT5pYW10aGlmX2NsLnN0YXRlID0gTUVJX0ZJTEVfRElTQ09OTkVDVElORzsKKwkJbWVpX2Rpc2Nvbm5lY3RfaG9zdF9jbGllbnQoZGV2LCAmZGV2LT5pYW10aGlmX2NsKTsKKwl9CisJaWYgKGRldi0+d2RfY2wuc3RhdGUgPT0gTUVJX0ZJTEVfQ09OTkVDVEVEKSB7CisJCWRldi0+d2RfY2wuc3RhdGUgPSBNRUlfRklMRV9ESVNDT05ORUNUSU5HOworCQltZWlfZGlzY29ubmVjdF9ob3N0X2NsaWVudChkZXYsICZkZXYtPndkX2NsKTsKKwl9CisKKwkvKiByZW1vdmUgZW50cnkgaWYgYWxyZWFkeSBpbiBsaXN0ICovCisJZGV2X2RiZygmcGRldi0+ZGV2LCAibGlzdCBkZWwgaWFtdGhpZiBhbmQgd2QgZmlsZSBsaXN0LlxuIik7CisJbWVpX3JlbW92ZV9jbGllbnRfZnJvbV9maWxlX2xpc3QoZGV2LCBkZXYtPndkX2NsLmhvc3RfY2xpZW50X2lkKTsKKwltZWlfcmVtb3ZlX2NsaWVudF9mcm9tX2ZpbGVfbGlzdChkZXYsIGRldi0+aWFtdGhpZl9jbC5ob3N0X2NsaWVudF9pZCk7CisKKwlkZXYtPmlhbXRoaWZfY3VycmVudF9jYiA9IE5VTEw7CisJZGV2LT5udW1fbWVpX21lX2NsaWVudHMgPSAwOworCisJbXV0ZXhfdW5sb2NrKCZkZXYtPmRldmljZV9sb2NrKTsKKworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisKKwkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KKwltZWlfZGlzYWJsZV9pbnRlcnJ1cHRzKGRldik7CisKKwlmcmVlX2lycShwZGV2LT5pcnEsIGRldik7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJaWYgKGRldi0+bWVtX2FkZHIpCisJCXBjaV9pb3VubWFwKHBkZXYsIGRldi0+bWVtX2FkZHIpOworCisJa2ZyZWUoZGV2KTsKKworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworfQorCisvKioKKyAqIG1laV9jbGVhcl9saXN0IC0gcmVtb3ZlcyBhbGwgY2FsbGJhY2tzIGFzc29jaWF0ZWQgd2l0aCBmaWxlCisgKgkJZnJvbSBtZWlfY2JfbGlzdAorICoKKyAqIEBkZXY6IGRldmljZSBzdHJ1Y3R1cmUuCisgKiBAZmlsZTogZmlsZSBzdHJ1Y3R1cmUKKyAqIEBtZWlfY2JfbGlzdDogY2FsbGJhY2tzIGxpc3QKKyAqCisgKiBtZWlfY2xlYXJfbGlzdCBpcyBjYWxsZWQgdG8gY2xlYXIgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBmaWxlCisgKiB3aGVuIGFwcGxpY2F0aW9uIGNhbGxzIGNsb3NlIGZ1bmN0aW9uIG9yIEN0cmwtQyB3YXMgcHJlc3NlZAorICoKKyAqIHJldHVybnMgdHJ1ZSBpZiBjYWxsYmFjayByZW1vdmVkIGZyb20gdGhlIGxpc3QsIGZhbHNlIG90aGVyd2lzZQorICovCitzdGF0aWMgYm9vbCBtZWlfY2xlYXJfbGlzdChzdHJ1Y3QgbWVpX2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGxpc3RfaGVhZCAqbWVpX2NiX2xpc3QpCit7CisJc3RydWN0IG1laV9jbF9jYiAqY2JfcG9zID0gTlVMTDsKKwlzdHJ1Y3QgbWVpX2NsX2NiICpjYl9uZXh0ID0gTlVMTDsKKwlzdHJ1Y3QgZmlsZSAqZmlsZV90ZW1wOworCWJvb2wgcmVtb3ZlZCA9IGZhbHNlOworCisJLyogbGlzdCBhbGwgbGlzdCBtZW1iZXIgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2JfcG9zLCBjYl9uZXh0LCBtZWlfY2JfbGlzdCwgY2JfbGlzdCkgeworCQlmaWxlX3RlbXAgPSAoc3RydWN0IGZpbGUgKiljYl9wb3MtPmZpbGVfb2JqZWN0OworCQkvKiBjaGVjayBpZiBsaXN0IG1lbWJlciBhc3NvY2lhdGVkIHdpdGggYSBmaWxlICovCisJCWlmIChmaWxlX3RlbXAgPT0gZmlsZSkgeworCQkJLyogcmVtb3ZlIG1lbWJlciBmcm9tIHRoZSBsaXN0ICovCisJCQlsaXN0X2RlbCgmY2JfcG9zLT5jYl9saXN0KTsKKwkJCS8qIGNoZWNrIGlmIGNiIGVxdWFsIHRvIGN1cnJlbnQgaWFtdGhpZiBjYiAqLworCQkJaWYgKGRldi0+aWFtdGhpZl9jdXJyZW50X2NiID09IGNiX3BvcykgeworCQkJCWRldi0+aWFtdGhpZl9jdXJyZW50X2NiID0gTlVMTDsKKwkJCQkvKiBzZW5kIGZsb3cgY29udHJvbCB0byBpYW10aGlmIGNsaWVudCAqLworCQkJCW1laV9zZW5kX2Zsb3dfY29udHJvbChkZXYsICZkZXYtPmlhbXRoaWZfY2wpOworCQkJfQorCQkJLyogZnJlZSBhbGwgYWxsb2NhdGVkIGJ1ZmZlcnMgKi8KKwkJCW1laV9mcmVlX2NiX3ByaXZhdGUoY2JfcG9zKTsKKwkJCWNiX3BvcyA9IE5VTEw7CisJCQlyZW1vdmVkID0gdHJ1ZTsKKwkJfQorCX0KKwlyZXR1cm4gcmVtb3ZlZDsKK30KKworLyoqCisgKiBtZWlfY2xlYXJfbGlzdHMgLSByZW1vdmVzIGFsbCBjYWxsYmFja3MgYXNzb2NpYXRlZCB3aXRoIGZpbGUKKyAqCisgKiBAZGV2OiBkZXZpY2Ugc3RydWN0dXJlCisgKiBAZmlsZTogZmlsZSBzdHJ1Y3R1cmUKKyAqCisgKiBtZWlfY2xlYXJfbGlzdHMgaXMgY2FsbGVkIHRvIGNsZWFyIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggZmlsZQorICogd2hlbiBhcHBsaWNhdGlvbiBjYWxscyBjbG9zZSBmdW5jdGlvbiBvciBDdHJsLUMgd2FzIHByZXNzZWQKKyAqCisgKiByZXR1cm5zIHRydWUgaWYgY2FsbGJhY2sgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0LCBmYWxzZSBvdGhlcndpc2UKKyAqLworc3RhdGljIGJvb2wgbWVpX2NsZWFyX2xpc3RzKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWJvb2wgcmVtb3ZlZCA9IGZhbHNlOworCisJLyogcmVtb3ZlIGNhbGxiYWNrcyBhc3NvY2lhdGVkIHdpdGggYSBmaWxlICovCisJbWVpX2NsZWFyX2xpc3QoZGV2LCBmaWxlLCAmZGV2LT5hbXRoaV9jbWRfbGlzdC5tZWlfY2IuY2JfbGlzdCk7CisJaWYgKG1laV9jbGVhcl9saXN0KGRldiwgZmlsZSwKKwkJCSAgICAmZGV2LT5hbXRoaV9yZWFkX2NvbXBsZXRlX2xpc3QubWVpX2NiLmNiX2xpc3QpKQorCQlyZW1vdmVkID0gdHJ1ZTsKKworCW1laV9jbGVhcl9saXN0KGRldiwgZmlsZSwgJmRldi0+Y3RybF9yZF9saXN0Lm1laV9jYi5jYl9saXN0KTsKKworCWlmIChtZWlfY2xlYXJfbGlzdChkZXYsIGZpbGUsICZkZXYtPmN0cmxfd3JfbGlzdC5tZWlfY2IuY2JfbGlzdCkpCisJCXJlbW92ZWQgPSB0cnVlOworCisJaWYgKG1laV9jbGVhcl9saXN0KGRldiwgZmlsZSwgJmRldi0+d3JpdGVfd2FpdGluZ19saXN0Lm1laV9jYi5jYl9saXN0KSkKKwkJcmVtb3ZlZCA9IHRydWU7CisKKwlpZiAobWVpX2NsZWFyX2xpc3QoZGV2LCBmaWxlLCAmZGV2LT53cml0ZV9saXN0Lm1laV9jYi5jYl9saXN0KSkKKwkJcmVtb3ZlZCA9IHRydWU7CisKKwkvKiBjaGVjayBpZiBpYW10aGlmX2N1cnJlbnRfY2Igbm90IE5VTEwgKi8KKwlpZiAoZGV2LT5pYW10aGlmX2N1cnJlbnRfY2IgJiYgIXJlbW92ZWQpIHsKKwkJLyogY2hlY2sgZmlsZSBhbmQgaWFtdGhpZiBjdXJyZW50IGNiIGFzc29jaWF0aW9uICovCisJCWlmIChkZXYtPmlhbXRoaWZfY3VycmVudF9jYi0+ZmlsZV9vYmplY3QgPT0gZmlsZSkgeworCQkJLyogcmVtb3ZlIGNiICovCisJCQltZWlfZnJlZV9jYl9wcml2YXRlKGRldi0+aWFtdGhpZl9jdXJyZW50X2NiKTsKKwkJCWRldi0+aWFtdGhpZl9jdXJyZW50X2NiID0gTlVMTDsKKwkJCXJlbW92ZWQgPSB0cnVlOworCQl9CisJfQorCXJldHVybiByZW1vdmVkOworfQorLyoqCisgKiBmaW5kX3JlYWRfbGlzdF9lbnRyeSAtIGZpbmQgcmVhZCBsaXN0IGVudHJ5CisgKgorICogQGRldjogZGV2aWNlIHN0cnVjdHVyZQorICogQGZpbGU6IHBvaW50ZXIgdG8gZmlsZSBzdHJ1Y3R1cmUKKyAqCisgKiByZXR1cm5zIGNiIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZXJyb3IKKyAqLworc3RhdGljIHN0cnVjdCBtZWlfY2xfY2IgKmZpbmRfcmVhZF9saXN0X2VudHJ5KAorCQlzdHJ1Y3QgbWVpX2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgbWVpX2NsICpjbCkKK3sKKwlzdHJ1Y3QgbWVpX2NsX2NiICpjYl9wb3MgPSBOVUxMOworCXN0cnVjdCBtZWlfY2xfY2IgKmNiX25leHQgPSBOVUxMOworCXN0cnVjdCBtZWlfY2wgKmNsX2xpc3RfdGVtcDsKKworCWlmICghZGV2LT5yZWFkX2xpc3Quc3RhdHVzICYmCisJICAgICFsaXN0X2VtcHR5KCZkZXYtPnJlYWRfbGlzdC5tZWlfY2IuY2JfbGlzdCkpIHsKKworCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgInJlbW92ZSByZWFkX2xpc3QgQ0JcbiIpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2JfcG9zLCBjYl9uZXh0LAorCQkJCSZkZXYtPnJlYWRfbGlzdC5tZWlfY2IuY2JfbGlzdCwgY2JfbGlzdCkgeworCisJCQljbF9saXN0X3RlbXAgPSAoc3RydWN0IG1laV9jbCAqKQorCQkJCWNiX3Bvcy0+ZmlsZV9wcml2YXRlOworCisJCQlpZiAoY2xfbGlzdF90ZW1wICYmCisJCQkgICAgbWVpX2ZlX3NhbWVfaWQoY2wsIGNsX2xpc3RfdGVtcCkpCisJCQkJcmV0dXJuIGNiX3BvczsKKworCQl9CisJfQorCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIG1laV9vcGVuIC0gdGhlIG9wZW4gZnVuY3Rpb24KKyAqCisgKiBAaW5vZGU6IHBvaW50ZXIgdG8gaW5vZGUgc3RydWN0dXJlCisgKiBAZmlsZTogcG9pbnRlciB0byBmaWxlIHN0cnVjdHVyZQorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBlcnJvcgorICovCitzdGF0aWMgaW50IG1laV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBtZWlfY2wgKmNsOworCWludCBpZl9udW0gPSBpbWlub3IoaW5vZGUpLCBlcnI7CisJc3RydWN0IG1laV9kZXZpY2UgKmRldjsKKworCWVyciA9IC1FTk9ERVY7CisJaWYgKCFtZWlfZGV2aWNlKQorCQlnb3RvIG91dDsKKworCWRldiA9IHBjaV9nZXRfZHJ2ZGF0YShtZWlfZGV2aWNlKTsKKwlpZiAoaWZfbnVtICE9IE1FSV9NSU5PUl9OVU1CRVIgfHwgIWRldikKKwkJZ290byBvdXQ7CisKKwltdXRleF9sb2NrKCZkZXYtPmRldmljZV9sb2NrKTsKKwllcnIgPSAtRU5PTUVNOworCWNsID0gbWVpX2FsbG9jX2ZpbGVfcHJpdmF0ZShkZXYpOworCWlmICghY2wpCisJCWdvdG8gb3V0OworCisJZXJyID0gLUVOT0RFVjsKKwlpZiAoZGV2LT5tZWlfc3RhdGUgIT0gTUVJX0VOQUJMRUQpIHsKKwkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJtZWlfc3RhdGUgIT0gTUVJX0VOQUJMRUQgIG1laV9zdGF0ZT0gJWRcbiIsCisJCSAgICBkZXYtPm1laV9zdGF0ZSk7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisJZXJyID0gLUVNRklMRTsKKwlpZiAoZGV2LT5vcGVuX2hhbmRsZV9jb3VudCA+PSBNRUlfTUFYX09QRU5fSEFORExFX0NPVU5UKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwljbC0+aG9zdF9jbGllbnRfaWQgPSBmaW5kX2ZpcnN0X3plcm9fYml0KGRldi0+aG9zdF9jbGllbnRzX21hcCwKKwkJCQkJCQlNRUlfQ0xJRU5UU19NQVgpOworCWlmIChjbC0+aG9zdF9jbGllbnRfaWQgPiBNRUlfQ0xJRU5UU19NQVgpCisJCWdvdG8gb3V0X3VubG9jazsKKworCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiY2xpZW50X2lkID0gJWRcbiIsIGNsLT5ob3N0X2NsaWVudF9pZCk7CisKKwlkZXYtPm9wZW5faGFuZGxlX2NvdW50Kys7CisJbGlzdF9hZGRfdGFpbCgmY2wtPmxpbmssICZkZXYtPmZpbGVfbGlzdCk7CisKKwlzZXRfYml0KGNsLT5ob3N0X2NsaWVudF9pZCwgZGV2LT5ob3N0X2NsaWVudHNfbWFwKTsKKwljbC0+c3RhdGUgPSBNRUlfRklMRV9JTklUSUFMSVpJTkc7CisJY2wtPnNtX3N0YXRlID0gMDsKKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGNsOworCW11dGV4X3VubG9jaygmZGV2LT5kZXZpY2VfbG9jayk7CisKKwlyZXR1cm4gMDsKKworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJmRldi0+ZGV2aWNlX2xvY2spOworCWtmcmVlKGNsKTsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIG1laV9yZWxlYXNlIC0gdGhlIHJlbGVhc2UgZnVuY3Rpb24KKyAqCisgKiBAaW5vZGU6IHBvaW50ZXIgdG8gaW5vZGUgc3RydWN0dXJlCisgKiBAZmlsZTogcG9pbnRlciB0byBmaWxlIHN0cnVjdHVyZQorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBlcnJvcgorICovCitzdGF0aWMgaW50IG1laV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBtZWlfY2wgKmNsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBtZWlfY2xfY2IgKmNiOworCXN0cnVjdCBtZWlfZGV2aWNlICpkZXY7CisJaW50IHJldHMgPSAwOworCisJaWYgKFdBUk5fT04oIWNsIHx8ICFjbC0+ZGV2KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkZXYgPSBjbC0+ZGV2OworCisJbXV0ZXhfbG9jaygmZGV2LT5kZXZpY2VfbG9jayk7CisJaWYgKGNsICE9ICZkZXYtPmlhbXRoaWZfY2wpIHsKKwkJaWYgKGNsLT5zdGF0ZSA9PSBNRUlfRklMRV9DT05ORUNURUQpIHsKKwkJCWNsLT5zdGF0ZSA9IE1FSV9GSUxFX0RJU0NPTk5FQ1RJTkc7CisJCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwKKwkJCQkiZGlzY29ubmVjdGluZyBjbGllbnQgaG9zdCBjbGllbnQgPSAlZCwgIgorCQkJICAgICJNRSBjbGllbnQgPSAlZFxuIiwKKwkJCSAgICBjbC0+aG9zdF9jbGllbnRfaWQsCisJCQkgICAgY2wtPm1lX2NsaWVudF9pZCk7CisJCQlyZXRzID0gbWVpX2Rpc2Nvbm5lY3RfaG9zdF9jbGllbnQoZGV2LCBjbCk7CisJCX0KKwkJbWVpX2ZsdXNoX3F1ZXVlcyhkZXYsIGNsKTsKKwkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJyZW1vdmUgY2xpZW50IGhvc3QgY2xpZW50ID0gJWQsIE1FIGNsaWVudCA9ICVkXG4iLAorCQkgICAgY2wtPmhvc3RfY2xpZW50X2lkLAorCQkgICAgY2wtPm1lX2NsaWVudF9pZCk7CisKKwkJaWYgKGRldi0+b3Blbl9oYW5kbGVfY291bnQgPiAwKSB7CisJCQljbGVhcl9iaXQoY2wtPmhvc3RfY2xpZW50X2lkLAorCQkJCSAgZGV2LT5ob3N0X2NsaWVudHNfbWFwKTsKKwkJCWRldi0+b3Blbl9oYW5kbGVfY291bnQtLTsKKwkJfQorCQltZWlfcmVtb3ZlX2NsaWVudF9mcm9tX2ZpbGVfbGlzdChkZXYsIGNsLT5ob3N0X2NsaWVudF9pZCk7CisKKwkJLyogZnJlZSByZWFkIGNiICovCisJCWNiID0gTlVMTDsKKwkJaWYgKGNsLT5yZWFkX2NiKSB7CisJCQljYiA9IGZpbmRfcmVhZF9saXN0X2VudHJ5KGRldiwgY2wpOworCQkJLyogUmVtb3ZlIGVudHJ5IGZyb20gcmVhZCBsaXN0ICovCisJCQlpZiAoY2IpCisJCQkJbGlzdF9kZWwoJmNiLT5jYl9saXN0KTsKKworCQkJY2IgPSBjbC0+cmVhZF9jYjsKKwkJCWNsLT5yZWFkX2NiID0gTlVMTDsKKwkJfQorCisJCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisKKwkJaWYgKGNiKSB7CisJCQltZWlfZnJlZV9jYl9wcml2YXRlKGNiKTsKKwkJCWNiID0gTlVMTDsKKwkJfQorCisJCWtmcmVlKGNsKTsKKwl9IGVsc2UgeworCQlpZiAoZGV2LT5vcGVuX2hhbmRsZV9jb3VudCA+IDApCisJCQlkZXYtPm9wZW5faGFuZGxlX2NvdW50LS07CisKKwkJaWYgKGRldi0+aWFtdGhpZl9maWxlX29iamVjdCA9PSBmaWxlICYmCisJCSAgICBkZXYtPmlhbXRoaWZfc3RhdGUgIT0gTUVJX0lBTVRISUZfSURMRSkgeworCisJCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgImFtdGhpIGNhbmNlbGVkIGlhbXRoaWYgc3RhdGUgJWRcbiIsCisJCQkgICAgZGV2LT5pYW10aGlmX3N0YXRlKTsKKwkJCWRldi0+aWFtdGhpZl9jYW5jZWxlZCA9IDE7CisJCQlpZiAoZGV2LT5pYW10aGlmX3N0YXRlID09IE1FSV9JQU1USElGX1JFQURfQ09NUExFVEUpIHsKKwkJCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgInJ1biBuZXh0IGFtdGhpIGlhbXRoaWYgY2JcbiIpOworCQkJCXJ1bl9uZXh0X2lhbXRoaWZfY21kKGRldik7CisJCQl9CisJCX0KKworCQlpZiAobWVpX2NsZWFyX2xpc3RzKGRldiwgZmlsZSkpCisJCQlkZXYtPmlhbXRoaWZfc3RhdGUgPSBNRUlfSUFNVEhJRl9JRExFOworCisJfQorCW11dGV4X3VubG9jaygmZGV2LT5kZXZpY2VfbG9jayk7CisJcmV0dXJuIHJldHM7Cit9CisKKworLyoqCisgKiBtZWlfcmVhZCAtIHRoZSByZWFkIGZ1bmN0aW9uLgorICoKKyAqIEBmaWxlOiBwb2ludGVyIHRvIGZpbGUgc3RydWN0dXJlCisgKiBAdWJ1ZjogcG9pbnRlciB0byB1c2VyIGJ1ZmZlcgorICogQGxlbmd0aDogYnVmZmVyIGxlbmd0aAorICogQG9mZnNldDogZGF0YSBvZmZzZXQgaW4gYnVmZmVyCisgKgorICogcmV0dXJucyA+PTAgZGF0YSBsZW5ndGggb24gc3VjY2VzcyAsIDwwIG9uIGVycm9yCisgKi8KK3N0YXRpYyBzc2l6ZV90IG1laV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJCSBzaXplX3QgbGVuZ3RoLCBsb2ZmX3QgKm9mZnNldCkKK3sKKwlzdHJ1Y3QgbWVpX2NsICpjbCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbWVpX2NsX2NiICpjYl9wb3MgPSBOVUxMOworCXN0cnVjdCBtZWlfY2xfY2IgKmNiID0gTlVMTDsKKwlzdHJ1Y3QgbWVpX2RldmljZSAqZGV2OworCWludCBpOworCWludCByZXRzOworCWludCBlcnI7CisKKworCWlmIChXQVJOX09OKCFjbCB8fCAhY2wtPmRldikpCisJCXJldHVybiAtRU5PREVWOworCisJZGV2ID0gY2wtPmRldjsKKworCW11dGV4X2xvY2soJmRldi0+ZGV2aWNlX2xvY2spOworCWlmIChkZXYtPm1laV9zdGF0ZSAhPSBNRUlfRU5BQkxFRCkgeworCQlyZXRzID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKChjbC0+c21fc3RhdGUgJiBNRUlfV0RfU1RBVEVfSU5ERVBFTkRFTkNFX01TR19TRU5UKSA9PSAwKSB7CisJCS8qIERvIG5vdCBhbGxvdyB0byByZWFkIHdhdGNoZG9nIGNsaWVudCAqLworCQlpID0gbWVpX2ZpbmRfbWVfY2xpZW50X2luZGV4KGRldiwgbWVpX3dkX2d1aWQpOworCQlpZiAoaSA+PSAwKSB7CisJCQlzdHJ1Y3QgbWVpX21lX2NsaWVudCAqbWVfY2xpZW50ID0gJmRldi0+bWVfY2xpZW50c1tpXTsKKworCQkJaWYgKGNsLT5tZV9jbGllbnRfaWQgPT0gbWVfY2xpZW50LT5jbGllbnRfaWQpIHsKKwkJCQlyZXRzID0gLUVCQURGOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJY2wtPnNtX3N0YXRlICY9IH5NRUlfV0RfU1RBVEVfSU5ERVBFTkRFTkNFX01TR19TRU5UOworCX0KKworCWlmIChjbCA9PSAmZGV2LT5pYW10aGlmX2NsKSB7CisJCXJldHMgPSBhbXRoaV9yZWFkKGRldiwgZmlsZSwgdWJ1ZiwgbGVuZ3RoLCBvZmZzZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoY2wtPnJlYWRfY2IgJiYgY2wtPnJlYWRfY2ItPmluZm9ybWF0aW9uID4gKm9mZnNldCkgeworCQljYiA9IGNsLT5yZWFkX2NiOworCQlnb3RvIGNvcHlfYnVmZmVyOworCX0gZWxzZSBpZiAoY2wtPnJlYWRfY2IgJiYgY2wtPnJlYWRfY2ItPmluZm9ybWF0aW9uID4gMCAmJgorCQkgICBjbC0+cmVhZF9jYi0+aW5mb3JtYXRpb24gPD0gKm9mZnNldCkgeworCQljYiA9IGNsLT5yZWFkX2NiOworCQlyZXRzID0gMDsKKwkJZ290byBmcmVlOworCX0gZWxzZSBpZiAoKCFjbC0+cmVhZF9jYiB8fCAhY2wtPnJlYWRfY2ItPmluZm9ybWF0aW9uKSAmJgorCQkgICAgKm9mZnNldCA+IDApIHsKKwkJLypPZmZzZXQgbmVlZHMgdG8gYmUgY2xlYW5lZCBmb3IgY29udGluZ291cyByZWFkcyovCisJCSpvZmZzZXQgPSAwOworCQlyZXRzID0gMDsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyID0gbWVpX3N0YXJ0X3JlYWQoZGV2LCBjbCk7CisJaWYgKGVyciAmJiBlcnIgIT0gLUVCVVNZKSB7CisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LAorCQkJIm1laSBzdGFydCByZWFkIGZhaWx1cmUgd2l0aCBzdGF0dXMgPSAlZFxuIiwgZXJyKTsKKwkJcmV0cyA9IGVycjsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKE1FSV9SRUFEX0NPTVBMRVRFICE9IGNsLT5yZWFkaW5nX3N0YXRlICYmCisJCQkhd2FpdHF1ZXVlX2FjdGl2ZSgmY2wtPnJ4X3dhaXQpKSB7CisJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQkJcmV0cyA9IC1FQUdBSU47CisJCQlnb3RvIG91dDsKKwkJfQorCisJCW11dGV4X3VubG9jaygmZGV2LT5kZXZpY2VfbG9jayk7CisKKwkJaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShjbC0+cnhfd2FpdCwKKwkJCShNRUlfUkVBRF9DT01QTEVURSA9PSBjbC0+cmVhZGluZ19zdGF0ZSB8fAorCQkJIE1FSV9GSUxFX0lOSVRJQUxJWklORyA9PSBjbC0+c3RhdGUgfHwKKwkJCSBNRUlfRklMRV9ESVNDT05ORUNURUQgPT0gY2wtPnN0YXRlIHx8CisJCQkgTUVJX0ZJTEVfRElTQ09OTkVDVElORyA9PSBjbC0+c3RhdGUpKSkgeworCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJCXJldHVybiAtRUlOVFI7CisJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCQl9CisKKwkJbXV0ZXhfbG9jaygmZGV2LT5kZXZpY2VfbG9jayk7CisJCWlmIChNRUlfRklMRV9JTklUSUFMSVpJTkcgPT0gY2wtPnN0YXRlIHx8CisJCSAgICBNRUlfRklMRV9ESVNDT05ORUNURUQgPT0gY2wtPnN0YXRlIHx8CisJCSAgICBNRUlfRklMRV9ESVNDT05ORUNUSU5HID09IGNsLT5zdGF0ZSkgeworCQkJcmV0cyA9IC1FQlVTWTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJY2IgPSBjbC0+cmVhZF9jYjsKKworCWlmICghY2IpIHsKKwkJcmV0cyA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoY2wtPnJlYWRpbmdfc3RhdGUgIT0gTUVJX1JFQURfQ09NUExFVEUpIHsKKwkJcmV0cyA9IDA7CisJCWdvdG8gb3V0OworCX0KKwkvKiBub3cgY29weSB0aGUgZGF0YSB0byB1c2VyIHNwYWNlICovCitjb3B5X2J1ZmZlcjoKKwlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgImNiLT5yZXNwb25zZV9idWZmZXIgc2l6ZSAtICVkXG4iLAorCSAgICBjYi0+cmVzcG9uc2VfYnVmZmVyLnNpemUpOworCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiY2ItPmluZm9ybWF0aW9uIC0gJWx1XG4iLAorCSAgICBjYi0+aW5mb3JtYXRpb24pOworCWlmIChsZW5ndGggPT0gMCB8fCB1YnVmID09IE5VTEwgfHwgKm9mZnNldCA+IGNiLT5pbmZvcm1hdGlvbikgeworCQlyZXRzID0gLUVNU0dTSVpFOworCQlnb3RvIGZyZWU7CisJfQorCisJLyogbGVuZ3RoIGlzIGJlaW5nIHR1cm5jYXRlZCB0byBQQUdFX1NJWkUsIGhvd2V2ZXIsICovCisJLyogaW5mb3JtYXRpb24gc2l6ZSBtYXkgYmUgbG9uZ2VyICovCisJbGVuZ3RoID0gbWluX3Qoc2l6ZV90LCBsZW5ndGgsIChjYi0+aW5mb3JtYXRpb24gLSAqb2Zmc2V0KSk7CisKKwlpZiAoY29weV90b191c2VyKHVidWYsCisJCQkgY2ItPnJlc3BvbnNlX2J1ZmZlci5kYXRhICsgKm9mZnNldCwKKwkJCSBsZW5ndGgpKSB7CisJCXJldHMgPSAtRUZBVUxUOworCQlnb3RvIGZyZWU7CisJfQorCisJcmV0cyA9IGxlbmd0aDsKKwkqb2Zmc2V0ICs9IGxlbmd0aDsKKwlpZiAoKHVuc2lnbmVkIGxvbmcpKm9mZnNldCA8IGNiLT5pbmZvcm1hdGlvbikKKwkJZ290byBvdXQ7CisKK2ZyZWU6CisJY2JfcG9zID0gZmluZF9yZWFkX2xpc3RfZW50cnkoZGV2LCBjbCk7CisJLyogUmVtb3ZlIGVudHJ5IGZyb20gcmVhZCBsaXN0ICovCisJaWYgKGNiX3BvcykKKwkJbGlzdF9kZWwoJmNiX3Bvcy0+Y2JfbGlzdCk7CisJbWVpX2ZyZWVfY2JfcHJpdmF0ZShjYik7CisJY2wtPnJlYWRpbmdfc3RhdGUgPSBNRUlfSURMRTsKKwljbC0+cmVhZF9jYiA9IE5VTEw7CisJY2wtPnJlYWRfcGVuZGluZyA9IDA7CitvdXQ6CisJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJlbmQgbWVpIHJlYWQgcmV0cz0gJWRcbiIsIHJldHMpOworCW11dGV4X3VubG9jaygmZGV2LT5kZXZpY2VfbG9jayk7CisJcmV0dXJuIHJldHM7Cit9CisKKy8qKgorICogbWVpX3dyaXRlIC0gdGhlIHdyaXRlIGZ1bmN0aW9uLgorICoKKyAqIEBmaWxlOiBwb2ludGVyIHRvIGZpbGUgc3RydWN0dXJlCisgKiBAdWJ1ZjogcG9pbnRlciB0byB1c2VyIGJ1ZmZlcgorICogQGxlbmd0aDogYnVmZmVyIGxlbmd0aAorICogQG9mZnNldDogZGF0YSBvZmZzZXQgaW4gYnVmZmVyCisgKgorICogcmV0dXJucyA+PTAgZGF0YSBsZW5ndGggb24gc3VjY2VzcyAsIDwwIG9uIGVycm9yCisgKi8KK3N0YXRpYyBzc2l6ZV90IG1laV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsCisJCQkgIHNpemVfdCBsZW5ndGgsIGxvZmZfdCAqb2Zmc2V0KQoreworCXN0cnVjdCBtZWlfY2wgKmNsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBtZWlfY2xfY2IgKndyaXRlX2NiID0gTlVMTDsKKwlzdHJ1Y3QgbWVpX21zZ19oZHIgbWVpX2hkcjsKKwlzdHJ1Y3QgbWVpX2RldmljZSAqZGV2OworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IDA7CisJaW50IHJldHM7CisJaW50IGk7CisKKwlpZiAoV0FSTl9PTighY2wgfHwgIWNsLT5kZXYpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRldiA9IGNsLT5kZXY7CisKKwltdXRleF9sb2NrKCZkZXYtPmRldmljZV9sb2NrKTsKKworCWlmIChkZXYtPm1laV9zdGF0ZSAhPSBNRUlfRU5BQkxFRCkgeworCQltdXRleF91bmxvY2soJmRldi0+ZGV2aWNlX2xvY2spOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoY2wgPT0gJmRldi0+aWFtdGhpZl9jbCkgeworCQl3cml0ZV9jYiA9IGZpbmRfYW10aGlfcmVhZF9saXN0X2VudHJ5KGRldiwgZmlsZSk7CisKKwkJaWYgKHdyaXRlX2NiKSB7CisJCQl0aW1lb3V0ID0gd3JpdGVfY2ItPnJlYWRfdGltZSArCisJCQkJCW1zZWNzX3RvX2ppZmZpZXMoSUFNVEhJRl9SRUFEX1RJTUVSKTsKKworCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkgfHwKKwkJCQkgY2wtPnJlYWRpbmdfc3RhdGUgPT0gTUVJX1JFQURfQ09NUExFVEUpIHsKKwkJCQkJKm9mZnNldCA9IDA7CisJCQkJCWxpc3RfZGVsKCZ3cml0ZV9jYi0+Y2JfbGlzdCk7CisJCQkJCW1laV9mcmVlX2NiX3ByaXZhdGUod3JpdGVfY2IpOworCQkJCQl3cml0ZV9jYiA9IE5VTEw7CisJCQl9CisJCX0KKwl9CisKKwkvKiBmcmVlIGVudHJ5IHVzZWQgaW4gcmVhZCAqLworCWlmIChjbC0+cmVhZGluZ19zdGF0ZSA9PSBNRUlfUkVBRF9DT01QTEVURSkgeworCQkqb2Zmc2V0ID0gMDsKKwkJd3JpdGVfY2IgPSBmaW5kX3JlYWRfbGlzdF9lbnRyeShkZXYsIGNsKTsKKwkJaWYgKHdyaXRlX2NiKSB7CisJCQlsaXN0X2RlbCgmd3JpdGVfY2ItPmNiX2xpc3QpOworCQkJbWVpX2ZyZWVfY2JfcHJpdmF0ZSh3cml0ZV9jYik7CisJCQl3cml0ZV9jYiA9IE5VTEw7CisJCQljbC0+cmVhZGluZ19zdGF0ZSA9IE1FSV9JRExFOworCQkJY2wtPnJlYWRfY2IgPSBOVUxMOworCQkJY2wtPnJlYWRfcGVuZGluZyA9IDA7CisJCX0KKwl9IGVsc2UgaWYgKGNsLT5yZWFkaW5nX3N0YXRlID09IE1FSV9JRExFICYmCisJCSAgICFjbC0+cmVhZF9wZW5kaW5nKQorCQkqb2Zmc2V0ID0gMDsKKworCisJd3JpdGVfY2IgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWVpX2NsX2NiKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3cml0ZV9jYikgeworCQltdXRleF91bmxvY2soJmRldi0+ZGV2aWNlX2xvY2spOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl3cml0ZV9jYi0+ZmlsZV9vYmplY3QgPSBmaWxlOworCXdyaXRlX2NiLT5maWxlX3ByaXZhdGUgPSBjbDsKKwl3cml0ZV9jYi0+cmVxdWVzdF9idWZmZXIuZGF0YSA9IGttYWxsb2MobGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwlyZXRzID0gLUVOT01FTTsKKwlpZiAoIXdyaXRlX2NiLT5yZXF1ZXN0X2J1ZmZlci5kYXRhKQorCQlnb3RvIHVubG9ja19kZXY7CisKKwlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgImxlbmd0aCA9JWRcbiIsIChpbnQpIGxlbmd0aCk7CisKKwlyZXRzID0gLUVGQVVMVDsKKwlpZiAoY29weV9mcm9tX3VzZXIod3JpdGVfY2ItPnJlcXVlc3RfYnVmZmVyLmRhdGEsIHVidWYsIGxlbmd0aCkpCisJCWdvdG8gdW5sb2NrX2RldjsKKworCWNsLT5zbV9zdGF0ZSA9IDA7CisJaWYgKGxlbmd0aCA9PSA0ICYmCisJICAgICgobWVtY21wKG1laV93ZF9zdGF0ZV9pbmRlcGVuZGVuY2VfbXNnWzBdLAorCQkJCSB3cml0ZV9jYi0+cmVxdWVzdF9idWZmZXIuZGF0YSwgNCkgPT0gMCkgfHwKKwkgICAgIChtZW1jbXAobWVpX3dkX3N0YXRlX2luZGVwZW5kZW5jZV9tc2dbMV0sCisJCQkJIHdyaXRlX2NiLT5yZXF1ZXN0X2J1ZmZlci5kYXRhLCA0KSA9PSAwKSB8fAorCSAgICAgKG1lbWNtcChtZWlfd2Rfc3RhdGVfaW5kZXBlbmRlbmNlX21zZ1syXSwKKwkJCQkgd3JpdGVfY2ItPnJlcXVlc3RfYnVmZmVyLmRhdGEsIDQpID09IDApKSkKKwkJY2wtPnNtX3N0YXRlIHw9IE1FSV9XRF9TVEFURV9JTkRFUEVOREVOQ0VfTVNHX1NFTlQ7CisKKwlJTklUX0xJU1RfSEVBRCgmd3JpdGVfY2ItPmNiX2xpc3QpOworCWlmIChjbCA9PSAmZGV2LT5pYW10aGlmX2NsKSB7CisJCXdyaXRlX2NiLT5yZXNwb25zZV9idWZmZXIuZGF0YSA9CisJCSAgICBrbWFsbG9jKGRldi0+aWFtdGhpZl9tdHUsIEdGUF9LRVJORUwpOworCQlpZiAoIXdyaXRlX2NiLT5yZXNwb25zZV9idWZmZXIuZGF0YSkgeworCQkJcmV0cyA9IC1FTk9NRU07CisJCQlnb3RvIHVubG9ja19kZXY7CisJCX0KKwkJaWYgKGRldi0+bWVpX3N0YXRlICE9IE1FSV9FTkFCTEVEKSB7CisJCQlyZXRzID0gLUVOT0RFVjsKKwkJCWdvdG8gdW5sb2NrX2RldjsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1fbWVpX21lX2NsaWVudHM7IGkrKykgeworCQkJaWYgKGRldi0+bWVfY2xpZW50c1tpXS5jbGllbnRfaWQgPT0KKwkJCQlkZXYtPmlhbXRoaWZfY2wubWVfY2xpZW50X2lkKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKFdBUk5fT04oZGV2LT5tZV9jbGllbnRzW2ldLmNsaWVudF9pZCAhPSBjbC0+bWVfY2xpZW50X2lkKSkgeworCQkJcmV0cyA9IC1FTk9ERVY7CisJCQlnb3RvIHVubG9ja19kZXY7CisJCX0KKwkJaWYgKGkgPT0gZGV2LT5udW1fbWVpX21lX2NsaWVudHMgfHwKKwkJICAgIChkZXYtPm1lX2NsaWVudHNbaV0uY2xpZW50X2lkICE9CisJCSAgICAgIGRldi0+aWFtdGhpZl9jbC5tZV9jbGllbnRfaWQpKSB7CisJCQlyZXRzID0gLUVOT0RFVjsKKwkJCWdvdG8gdW5sb2NrX2RldjsKKwkJfSBlbHNlIGlmIChsZW5ndGggPiBkZXYtPm1lX2NsaWVudHNbaV0ucHJvcHMubWF4X21zZ19sZW5ndGggfHwKKwkJCSAgIGxlbmd0aCA8PSAwKSB7CisJCQlyZXRzID0gLUVNU0dTSVpFOworCQkJZ290byB1bmxvY2tfZGV2OworCQl9CisKKwkJd3JpdGVfY2ItPnJlc3BvbnNlX2J1ZmZlci5zaXplID0gZGV2LT5pYW10aGlmX210dTsKKwkJd3JpdGVfY2ItPm1ham9yX2ZpbGVfb3BlcmF0aW9ucyA9IE1FSV9JT0NUTDsKKwkJd3JpdGVfY2ItPmluZm9ybWF0aW9uID0gMDsKKwkJd3JpdGVfY2ItPnJlcXVlc3RfYnVmZmVyLnNpemUgPSBsZW5ndGg7CisJCWlmIChkZXYtPmlhbXRoaWZfY2wuc3RhdGUgIT0gTUVJX0ZJTEVfQ09OTkVDVEVEKSB7CisJCQlyZXRzID0gLUVOT0RFVjsKKwkJCWdvdG8gdW5sb2NrX2RldjsKKwkJfQorCisJCWlmICghbGlzdF9lbXB0eSgmZGV2LT5hbXRoaV9jbWRfbGlzdC5tZWlfY2IuY2JfbGlzdCkgfHwKKwkJCQlkZXYtPmlhbXRoaWZfc3RhdGUgIT0gTUVJX0lBTVRISUZfSURMRSkgeworCQkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJhbXRoaV9zdGF0ZSA9ICVkXG4iLAorCQkJCQkoaW50KSBkZXYtPmlhbXRoaWZfc3RhdGUpOworCQkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJhZGQgYW10aGkgY2IgdG8gYW10aGkgY21kIHdhaXRpbmcgbGlzdFxuIik7CisJCQlsaXN0X2FkZF90YWlsKCZ3cml0ZV9jYi0+Y2JfbGlzdCwKKwkJCQkJJmRldi0+YW10aGlfY21kX2xpc3QubWVpX2NiLmNiX2xpc3QpOworCQkJcmV0cyA9IGxlbmd0aDsKKwkJfSBlbHNlIHsKKwkJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiY2FsbCBhbXRoaSB3cml0ZVxuIik7CisJCQlyZXRzID0gYW10aGlfd3JpdGUoZGV2LCB3cml0ZV9jYik7CisKKwkJCWlmIChyZXRzKSB7CisJCQkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJhbXRoaSB3cml0ZSBmYWlsZWQgd2l0aCBzdGF0dXMgPSAlZFxuIiwKKwkJCQkgICAgcmV0cyk7CisJCQkJZ290byB1bmxvY2tfZGV2OworCQkJfQorCQkJcmV0cyA9IGxlbmd0aDsKKwkJfQorCQltdXRleF91bmxvY2soJmRldi0+ZGV2aWNlX2xvY2spOworCQlyZXR1cm4gcmV0czsKKwl9CisKKwl3cml0ZV9jYi0+bWFqb3JfZmlsZV9vcGVyYXRpb25zID0gTUVJX1dSSVRFOworCS8qIG1ha2Ugc3VyZSBpbmZvcm1hdGlvbiBpcyB6ZXJvIGJlZm9yZSB3ZSBzdGFydCAqLworCisJd3JpdGVfY2ItPmluZm9ybWF0aW9uID0gMDsKKwl3cml0ZV9jYi0+cmVxdWVzdF9idWZmZXIuc2l6ZSA9IGxlbmd0aDsKKworCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiaG9zdCBjbGllbnQgPSAlZCwgTUUgY2xpZW50ID0gJWRcbiIsCisJICAgIGNsLT5ob3N0X2NsaWVudF9pZCwgY2wtPm1lX2NsaWVudF9pZCk7CisJaWYgKGNsLT5zdGF0ZSAhPSBNRUlfRklMRV9DT05ORUNURUQpIHsKKwkJcmV0cyA9IC1FTk9ERVY7CisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiaG9zdCBjbGllbnQgPSAlZCwgIGlzIG5vdCBjb25uZWN0ZWQgdG8gTUUgY2xpZW50ID0gJWQiLAorCQkgICAgY2wtPmhvc3RfY2xpZW50X2lkLAorCQkgICAgY2wtPm1lX2NsaWVudF9pZCk7CisJCWdvdG8gdW5sb2NrX2RldjsKKwl9CisJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX21laV9tZV9jbGllbnRzOyBpKyspIHsKKwkJaWYgKGRldi0+bWVfY2xpZW50c1tpXS5jbGllbnRfaWQgPT0KKwkJICAgIGNsLT5tZV9jbGllbnRfaWQpCisJCQlicmVhazsKKwl9CisJaWYgKFdBUk5fT04oZGV2LT5tZV9jbGllbnRzW2ldLmNsaWVudF9pZCAhPSBjbC0+bWVfY2xpZW50X2lkKSkgeworCQlyZXRzID0gLUVOT0RFVjsKKwkJZ290byB1bmxvY2tfZGV2OworCX0KKwlpZiAoaSA9PSBkZXYtPm51bV9tZWlfbWVfY2xpZW50cykgeworCQlyZXRzID0gLUVOT0RFVjsKKwkJZ290byB1bmxvY2tfZGV2OworCX0KKwlpZiAobGVuZ3RoID4gZGV2LT5tZV9jbGllbnRzW2ldLnByb3BzLm1heF9tc2dfbGVuZ3RoIHx8IGxlbmd0aCA8PSAwKSB7CisJCXJldHMgPSAtRUlOVkFMOworCQlnb3RvIHVubG9ja19kZXY7CisJfQorCXdyaXRlX2NiLT5maWxlX3ByaXZhdGUgPSBjbDsKKworCXJldHMgPSBtZWlfZmxvd19jdHJsX2NyZWRzKGRldiwgY2wpOworCWlmIChyZXRzIDwgMCkKKwkJZ290byB1bmxvY2tfZGV2OworCisJaWYgKHJldHMgJiYgZGV2LT5tZWlfaG9zdF9idWZmZXJfaXNfZW1wdHkpIHsKKwkJcmV0cyA9IDA7CisJCWRldi0+bWVpX2hvc3RfYnVmZmVyX2lzX2VtcHR5ID0gMDsKKwkJaWYgKGxlbmd0aCA+ICgoKChkZXYtPmhvc3RfaHdfc3RhdGUgJiBIX0NCRCkgPj4gMjQpICoKKwkJCXNpemVvZih1MzIpKSAtIHNpemVvZihzdHJ1Y3QgbWVpX21zZ19oZHIpKSkgeworCisJCQltZWlfaGRyLmxlbmd0aCA9CisJCQkJKCgoZGV2LT5ob3N0X2h3X3N0YXRlICYgSF9DQkQpID4+IDI0KSAqCisJCQkJc2l6ZW9mKHUzMikpIC0KKwkJCQlzaXplb2Yoc3RydWN0IG1laV9tc2dfaGRyKTsKKwkJCW1laV9oZHIubXNnX2NvbXBsZXRlID0gMDsKKwkJfSBlbHNlIHsKKwkJCW1laV9oZHIubGVuZ3RoID0gbGVuZ3RoOworCQkJbWVpX2hkci5tc2dfY29tcGxldGUgPSAxOworCQl9CisJCW1laV9oZHIuaG9zdF9hZGRyID0gY2wtPmhvc3RfY2xpZW50X2lkOworCQltZWlfaGRyLm1lX2FkZHIgPSBjbC0+bWVfY2xpZW50X2lkOworCQltZWlfaGRyLnJlc2VydmVkID0gMDsKKwkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJjYWxsIG1laV93cml0ZV9tZXNzYWdlIGhlYWRlcj0lMDh4LlxuIiwKKwkJICAgICooKHUzMiAqKSAmbWVpX2hkcikpOworCQlpZiAoIW1laV93cml0ZV9tZXNzYWdlKGRldiwgJm1laV9oZHIsCisJCQkodW5zaWduZWQgY2hhciAqKSAod3JpdGVfY2ItPnJlcXVlc3RfYnVmZmVyLmRhdGEpLAorCQkJbWVpX2hkci5sZW5ndGgpKSB7CisJCQlyZXRzID0gLUVOT0RFVjsKKwkJCWdvdG8gdW5sb2NrX2RldjsKKwkJfQorCQljbC0+d3JpdGluZ19zdGF0ZSA9IE1FSV9XUklUSU5HOworCQl3cml0ZV9jYi0+aW5mb3JtYXRpb24gPSBtZWlfaGRyLmxlbmd0aDsKKwkJaWYgKG1laV9oZHIubXNnX2NvbXBsZXRlKSB7CisJCQlpZiAobWVpX2Zsb3dfY3RybF9yZWR1Y2UoZGV2LCBjbCkpIHsKKwkJCQlyZXRzID0gLUVOT0RFVjsKKwkJCQlnb3RvIHVubG9ja19kZXY7CisJCQl9CisJCQlsaXN0X2FkZF90YWlsKCZ3cml0ZV9jYi0+Y2JfbGlzdCwKKwkJCQkgICAgICAmZGV2LT53cml0ZV93YWl0aW5nX2xpc3QubWVpX2NiLmNiX2xpc3QpOworCQl9IGVsc2UgeworCQkJbGlzdF9hZGRfdGFpbCgmd3JpdGVfY2ItPmNiX2xpc3QsCisJCQkJICAgICAgJmRldi0+d3JpdGVfbGlzdC5tZWlfY2IuY2JfbGlzdCk7CisJCX0KKworCX0gZWxzZSB7CisKKwkJd3JpdGVfY2ItPmluZm9ybWF0aW9uID0gMDsKKwkJY2wtPndyaXRpbmdfc3RhdGUgPSBNRUlfV1JJVElORzsKKwkJbGlzdF9hZGRfdGFpbCgmd3JpdGVfY2ItPmNiX2xpc3QsCisJCQkgICAgICAmZGV2LT53cml0ZV9saXN0Lm1laV9jYi5jYl9saXN0KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmRldmljZV9sb2NrKTsKKwlyZXR1cm4gbGVuZ3RoOworCit1bmxvY2tfZGV2OgorCW11dGV4X3VubG9jaygmZGV2LT5kZXZpY2VfbG9jayk7CisJbWVpX2ZyZWVfY2JfcHJpdmF0ZSh3cml0ZV9jYik7CisJcmV0dXJuIHJldHM7Cit9CisKKworLyoqCisgKiBtZWlfaW9jdGwgLSB0aGUgSU9DVEwgZnVuY3Rpb24KKyAqCisgKiBAZmlsZTogcG9pbnRlciB0byBmaWxlIHN0cnVjdHVyZQorICogQGNtZDogaW9jdGwgY29tbWFuZAorICogQGRhdGE6IHBvaW50ZXIgdG8gbWVpIG1lc3NhZ2Ugc3RydWN0dXJlCisgKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MgLCA8MCBvbiBlcnJvcgorICovCitzdGF0aWMgbG9uZyBtZWlfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgbWVpX2RldmljZSAqZGV2OworCXN0cnVjdCBtZWlfY2wgKmNsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBtZWlfY29ubmVjdF9jbGllbnRfZGF0YSAqY29ubmVjdF9kYXRhID0gTlVMTDsKKwlpbnQgcmV0czsKKworCWlmIChjbWQgIT0gSU9DVExfTUVJX0NPTk5FQ1RfQ0xJRU5UKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChXQVJOX09OKCFjbCB8fCAhY2wtPmRldikpCisJCXJldHVybiAtRU5PREVWOworCisJZGV2ID0gY2wtPmRldjsKKworCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiSU9DVEwgY21kID0gMHgleCIsIGNtZCk7CisKKwltdXRleF9sb2NrKCZkZXYtPmRldmljZV9sb2NrKTsKKwlpZiAoZGV2LT5tZWlfc3RhdGUgIT0gTUVJX0VOQUJMRUQpIHsKKwkJcmV0cyA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKworCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiOiBJT0NUTF9NRUlfQ09OTkVDVF9DTElFTlQuXG4iKTsKKworCWNvbm5lY3RfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtZWlfY29ubmVjdF9jbGllbnRfZGF0YSksCisJCQkJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFjb25uZWN0X2RhdGEpIHsKKwkJcmV0cyA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgImNvcHkgY29ubmVjdCBkYXRhIGZyb20gdXNlclxuIik7CisJaWYgKGNvcHlfZnJvbV91c2VyKGNvbm5lY3RfZGF0YSwgKGNoYXIgX191c2VyICopZGF0YSwKKwkJCQlzaXplb2Yoc3RydWN0IG1laV9jb25uZWN0X2NsaWVudF9kYXRhKSkpIHsKKwkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJmYWlsZWQgdG8gY29weSBkYXRhIGZyb20gdXNlcmxhbmRcbiIpOworCQlyZXRzID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQorCXJldHMgPSBtZWlfaW9jdGxfY29ubmVjdF9jbGllbnQoZmlsZSwgY29ubmVjdF9kYXRhKTsKKworCS8qIGlmIGFsbCBpcyBvaywgY29weWluZyB0aGUgZGF0YSBiYWNrIHRvIHVzZXIuICovCisJaWYgKHJldHMpCisJCWdvdG8gb3V0OworCisJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJjb3B5IGNvbm5lY3QgZGF0YSB0byB1c2VyXG4iKTsKKwlpZiAoY29weV90b191c2VyKChjaGFyIF9fdXNlciAqKWRhdGEsIGNvbm5lY3RfZGF0YSwKKwkJCQlzaXplb2Yoc3RydWN0IG1laV9jb25uZWN0X2NsaWVudF9kYXRhKSkpIHsKKwkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJmYWlsZWQgdG8gY29weSBkYXRhIHRvIHVzZXJsYW5kXG4iKTsKKwkJcmV0cyA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGNvbm5lY3RfZGF0YSk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmRldmljZV9sb2NrKTsKKwlyZXR1cm4gcmV0czsKK30KKworLyoqCisgKiBtZWlfY29tcGF0X2lvY3RsIC0gdGhlIGNvbXBhdCBJT0NUTCBmdW5jdGlvbgorICoKKyAqIEBmaWxlOiBwb2ludGVyIHRvIGZpbGUgc3RydWN0dXJlCisgKiBAY21kOiBpb2N0bCBjb21tYW5kCisgKiBAZGF0YTogcG9pbnRlciB0byBtZWkgbWVzc2FnZSBzdHJ1Y3R1cmUKKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcyAsIDwwIG9uIGVycm9yCisgKi8KKyNpZmRlZiBDT05GSUdfQ09NUEFUCitzdGF0aWMgbG9uZyBtZWlfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLAorCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJcmV0dXJuIG1laV9pb2N0bChmaWxlLCBjbWQsICh1bnNpZ25lZCBsb25nKWNvbXBhdF9wdHIoZGF0YSkpOworfQorI2VuZGlmCisKKworLyoqCisgKiBtZWlfcG9sbCAtIHRoZSBwb2xsIGZ1bmN0aW9uCisgKgorICogQGZpbGU6IHBvaW50ZXIgdG8gZmlsZSBzdHJ1Y3R1cmUKKyAqIEB3YWl0OiBwb2ludGVyIHRvIHBvbGxfdGFibGUgc3RydWN0dXJlCisgKgorICogcmV0dXJucyBwb2xsIG1hc2sKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBtZWlfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKK3sKKwlzdHJ1Y3QgbWVpX2NsICpjbCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbWVpX2RldmljZSAqZGV2OworCXVuc2lnbmVkIGludCBtYXNrID0gMDsKKworCWlmIChXQVJOX09OKCFjbCB8fCAhY2wtPmRldikpCisJCXJldHVybiBtYXNrOworCisJZGV2ID0gY2wtPmRldjsKKworCW11dGV4X2xvY2soJmRldi0+ZGV2aWNlX2xvY2spOworCisJaWYgKGRldi0+bWVpX3N0YXRlICE9IE1FSV9FTkFCTEVEKQorCQlnb3RvIG91dDsKKworCisJaWYgKGNsID09ICZkZXYtPmlhbXRoaWZfY2wpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJcG9sbF93YWl0KGZpbGUsICZkZXYtPmlhbXRoaWZfY2wud2FpdCwgd2FpdCk7CisJCW11dGV4X2xvY2soJmRldi0+ZGV2aWNlX2xvY2spOworCQlpZiAoZGV2LT5pYW10aGlmX3N0YXRlID09IE1FSV9JQU1USElGX1JFQURfQ09NUExFVEUgJiYKKwkJCWRldi0+aWFtdGhpZl9maWxlX29iamVjdCA9PSBmaWxlKSB7CisJCQltYXNrIHw9IChQT0xMSU4gfCBQT0xMUkROT1JNKTsKKwkJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAicnVuIG5leHQgYW10aGkgY2JcbiIpOworCQkJcnVuX25leHRfaWFtdGhpZl9jbWQoZGV2KTsKKwkJfQorCQlnb3RvIG91dDsKKwl9CisKKwltdXRleF91bmxvY2soJmRldi0+ZGV2aWNlX2xvY2spOworCXBvbGxfd2FpdChmaWxlLCAmY2wtPnR4X3dhaXQsIHdhaXQpOworCW11dGV4X2xvY2soJmRldi0+ZGV2aWNlX2xvY2spOworCWlmIChNRUlfV1JJVEVfQ09NUExFVEUgPT0gY2wtPndyaXRpbmdfc3RhdGUpCisJCW1hc2sgfD0gKFBPTExJTiB8IFBPTExSRE5PUk0pOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmRldmljZV9sb2NrKTsKKwlyZXR1cm4gbWFzazsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBtZWlfcGNpX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXZpY2UpOworCXN0cnVjdCBtZWlfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaW50IGVycjsKKworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKwltdXRleF9sb2NrKCZkZXYtPmRldmljZV9sb2NrKTsKKwkvKiBTdG9wIHdhdGNoZG9nIGlmIGV4aXN0cyAqLworCWVyciA9IG1laV93ZF9zdG9wKGRldiwgdHJ1ZSk7CisJLyogU2V0IG5ldyBtZWkgc3RhdGUgKi8KKwlpZiAoZGV2LT5tZWlfc3RhdGUgPT0gTUVJX0VOQUJMRUQgfHwKKwkgICAgZGV2LT5tZWlfc3RhdGUgPT0gTUVJX1JFQ09WRVJJTkdfRlJPTV9SRVNFVCkgeworCQlkZXYtPm1laV9zdGF0ZSA9IE1FSV9QT1dFUl9ET1dOOworCQltZWlfcmVzZXQoZGV2LCAwKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmRldmljZV9sb2NrKTsKKworCWZyZWVfaXJxKHBkZXYtPmlycSwgZGV2KTsKKworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBtZWlfcGNpX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldmljZSk7CisJc3RydWN0IG1laV9kZXZpY2UgKmRldjsKKwlpbnQgZXJyOworCisJZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIHJlcXVlc3QgYW5kIGVuYWJsZSBpbnRlcnJ1cHQgICAqLworCWVyciA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHBkZXYtPmlycSwKKwkJCW1laV9pbnRlcnJ1cHRfcXVpY2tfaGFuZGxlciwKKwkJCW1laV9pbnRlcnJ1cHRfdGhyZWFkX2hhbmRsZXIsCisJCQlJUlFGX1NIQVJFRCwgbWVpX2RyaXZlcl9uYW1lLCBkZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZWk6IFJlcXVlc3RfaXJxIGZhaWx1cmUuIGlycSA9ICVkXG4iLAorCQkgICAgICAgcGRldi0+aXJxKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwltdXRleF9sb2NrKCZkZXYtPmRldmljZV9sb2NrKTsKKwlkZXYtPm1laV9zdGF0ZSA9IE1FSV9QT1dFUl9VUDsKKwltZWlfcmVzZXQoZGV2LCAxKTsKKwltdXRleF91bmxvY2soJmRldi0+ZGV2aWNlX2xvY2spOworCisJLyogU3RhcnQgd2F0Y2hkb2cgaWYgc3RvcHBlZCBpbiBzdXNwZW5kICovCisJaWYgKGRldi0+d2RfdGltZW91dCkgeworCQltZWlfd2Rfc3RhcnRfc2V0dXAoZGV2KTsKKwkJZGV2LT53ZF9kdWVfY291bnRlciA9IDE7CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGV2LT53ZF93b3JrLCBIWik7CisJfQorCXJldHVybiBlcnI7Cit9CitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMobWVpX3BtX29wcywgbWVpX3BjaV9zdXNwZW5kLCBtZWlfcGNpX3Jlc3VtZSk7CisjZGVmaW5lIE1FSV9QTV9PUFMJKCZtZWlfcG1fb3BzKQorI2Vsc2UKKyNkZWZpbmUgTUVJX1BNX09QUwlOVUxMCisjZW5kaWYgLyogQ09ORklHX1BNICovCisvKgorICogIFBDSSBkcml2ZXIgc3RydWN0dXJlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtZWlfZHJpdmVyID0geworCS5uYW1lID0gbWVpX2RyaXZlcl9uYW1lLAorCS5pZF90YWJsZSA9IG1laV9wY2lfdGJsLAorCS5wcm9iZSA9IG1laV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AobWVpX3JlbW92ZSksCisJLnNodXRkb3duID0gX19kZXZleGl0X3AobWVpX3JlbW92ZSksCisJLmRyaXZlci5wbSA9IE1FSV9QTV9PUFMsCit9OworCisvKgorICogZmlsZSBvcGVyYXRpb25zIHN0cnVjdHVyZSB3aWxsIGJlIHVzZWQgZm9yIG1laSBjaGFyIGRldmljZS4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWVpX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLnJlYWQgPSBtZWlfcmVhZCwKKwkudW5sb2NrZWRfaW9jdGwgPSBtZWlfaW9jdGwsCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfaW9jdGwgPSBtZWlfY29tcGF0X2lvY3RsLAorI2VuZGlmCisJLm9wZW4gPSBtZWlfb3BlbiwKKwkucmVsZWFzZSA9IG1laV9yZWxlYXNlLAorCS53cml0ZSA9IG1laV93cml0ZSwKKwkucG9sbCA9IG1laV9wb2xsLAorfTsKKworLyoqCisgKiBtZWlfcmVnaXN0cmF0aW9uX2NkZXYgLSBzZXRzIHVwIHRoZSBjZGV2IHN0cnVjdHVyZSBmb3IgbWVpIGRldmljZS4KKyAqCisgKiBAZGV2OiBjaGFyIGRldmljZSBzdHJ1Y3QKKyAqIEBobWlub3I6IG1pbm9yIG51bWJlciBmb3IgcmVnaXN0cmF0aW9uIGNoYXIgZGV2aWNlCisgKiBAZm9wczogZmlsZSBvcGVyYXRpb25zIHN0cnVjdHVyZQorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IG1laV9yZWdpc3RyYXRpb25fY2RldihzdHJ1Y3QgY2RldiAqZGV2LCBpbnQgaG1pbm9yLAorCQkJCSAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wcykKK3sKKwlpbnQgcmV0LCBkZXZubyA9IE1LREVWKG1laV9tYWpvciwgaG1pbm9yKTsKKworCWNkZXZfaW5pdChkZXYsIGZvcHMpOworCWRldi0+b3duZXIgPSBUSElTX01PRFVMRTsKKwlyZXQgPSBjZGV2X2FkZChkZXYsIGRldm5vLCAxKTsKKwkvKiBGYWlsIGdyYWNlZnVsbHkgaWYgbmVlZCBiZSAqLworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX0VSUiAibWVpOiBFcnJvciAlZCByZWdpc3RlcmluZyBtZWkgZGV2aWNlICVkXG4iLAorCQkgICAgICAgcmV0LCBobWlub3IpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogbWVpX3JlZ2lzdGVyX2NkZXYgLSByZWdpc3RlcnMgbWVpIGNoYXIgZGV2aWNlCisgKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgbWVpX3JlZ2lzdGVyX2NkZXYodm9pZCkKK3sKKwlpbnQgcmV0OworCWRldl90IGRldjsKKworCS8qIHJlZ2lzdHJhdGlvbiBvZiBjaGFyIGRldmljZXMgKi8KKwlyZXQgPSBhbGxvY19jaHJkZXZfcmVnaW9uKCZkZXYsIE1FSV9NSU5PUlNfQkFTRSwgTUVJX01JTk9SU19DT1VOVCwKKwkJCQkgIE1FSV9EUklWRVJfTkFNRSk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgIm1laTogRXJyb3IgYWxsb2NhdGluZyBjaGFyIGRldmljZSByZWdpb24uXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwltZWlfbWFqb3IgPSBNQUpPUihkZXYpOworCisJcmV0ID0gbWVpX3JlZ2lzdHJhdGlvbl9jZGV2KCZtZWlfY2RldiwgTUVJX01JTk9SX05VTUJFUiwKKwkJCQkgICAgICZtZWlfZm9wcyk7CisJaWYgKHJldCkKKwkJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKE1LREVWKG1laV9tYWpvciwgTUVJX01JTk9SU19CQVNFKSwKKwkJCQkJIE1FSV9NSU5PUlNfQ09VTlQpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBtZWlfdW5yZWdpc3Rlcl9jZGV2IC0gdW5yZWdpc3RlcnMgbWVpIGNoYXIgZGV2aWNlCisgKi8KK3N0YXRpYyB2b2lkIG1laV91bnJlZ2lzdGVyX2NkZXYodm9pZCkKK3sKKwljZGV2X2RlbCgmbWVpX2NkZXYpOworCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNS0RFVihtZWlfbWFqb3IsIE1FSV9NSU5PUlNfQkFTRSksCisJCQkJIE1FSV9NSU5PUlNfQ09VTlQpOworfQorCisvKioKKyAqIG1laV9zeXNmc19kZXZpY2VfY3JlYXRlIC0gYWRkcyBkZXZpY2UgZW50cnkgdG8gc3lzZnMKKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgPDAgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBtZWlfc3lzZnNfZGV2aWNlX2NyZWF0ZSh2b2lkKQoreworCXN0cnVjdCBjbGFzcyAqY2xhc3M7CisJdm9pZCAqdG1waGRldjsKKwlpbnQgZXJyOworCisJY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsIE1FSV9EUklWRVJfTkFNRSk7CisJaWYgKElTX0VSUihjbGFzcykpIHsKKwkJZXJyID0gUFRSX0VSUihjbGFzcyk7CisJCXByaW50ayhLRVJOX0VSUiAibWVpOiBFcnJvciBjcmVhdGluZyBtZWkgY2xhc3MuXG4iKTsKKwkJZ290byBlcnJfb3V0OworCX0KKworCXRtcGhkZXYgPSBkZXZpY2VfY3JlYXRlKGNsYXNzLCBOVUxMLCBtZWlfY2Rldi5kZXYsIE5VTEwsCisJCQkJCU1FSV9ERVZfTkFNRSk7CisJaWYgKElTX0VSUih0bXBoZGV2KSkgeworCQllcnIgPSBQVFJfRVJSKHRtcGhkZXYpOworCQlnb3RvIGVycl9kZXN0cm95OworCX0KKworCW1laV9jbGFzcyA9IGNsYXNzOworCXJldHVybiAwOworCitlcnJfZGVzdHJveToKKwljbGFzc19kZXN0cm95KGNsYXNzKTsKK2Vycl9vdXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBtZWlfc3lzZnNfZGV2aWNlX3JlbW92ZSAtIHVucmVnaXN0ZXJzIHRoZSBkZXZpY2UgZW50cnkgb24gc3lzZnMKKyAqLworc3RhdGljIHZvaWQgbWVpX3N5c2ZzX2RldmljZV9yZW1vdmUodm9pZCkKK3sKKwlpZiAoSVNfRVJSX09SX05VTEwobWVpX2NsYXNzKSkKKwkJcmV0dXJuOworCisJZGV2aWNlX2Rlc3Ryb3kobWVpX2NsYXNzLCBtZWlfY2Rldi5kZXYpOworCWNsYXNzX2Rlc3Ryb3kobWVpX2NsYXNzKTsKK30KKworLyoqCisgKiBtZWlfaW5pdF9tb2R1bGUgLSBEcml2ZXIgUmVnaXN0cmF0aW9uIFJvdXRpbmUKKyAqCisgKiBtZWlfaW5pdF9tb2R1bGUgaXMgdGhlIGZpcnN0IHJvdXRpbmUgY2FsbGVkIHdoZW4gdGhlIGRyaXZlciBpcworICogbG9hZGVkLiBBbGwgaXQgZG9lcyBpcyB0byByZWdpc3RlciB3aXRoIHRoZSBQQ0kgc3Vic3lzdGVtLgorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IF9faW5pdCBtZWlfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcHJfZGVidWcoIm1laTogJXMgLSB2ZXJzaW9uICVzXG4iLAorCQltZWlfZHJpdmVyX3N0cmluZywgbWVpX2RyaXZlcl92ZXJzaW9uKTsKKwkvKiBpbml0IHBjaSBtb2R1bGUgKi8KKwlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZtZWlfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIm1laTogRXJyb3IgcmVnaXN0ZXJpbmcgZHJpdmVyLlxuIik7CisJCWdvdG8gZW5kOworCX0KKworCXJldCA9IG1laV9yZWdpc3Rlcl9jZGV2KCk7CisJaWYgKHJldCkKKwkJZ290byB1bnJlZ2lzdGVyX3BjaTsKKworCXJldCA9IG1laV9zeXNmc19kZXZpY2VfY3JlYXRlKCk7CisJaWYgKHJldCkKKwkJZ290byB1bnJlZ2lzdGVyX2NkZXY7CisKKwlyZXR1cm4gcmV0OworCit1bnJlZ2lzdGVyX2NkZXY6CisJbWVpX3VucmVnaXN0ZXJfY2RldigpOwordW5yZWdpc3Rlcl9wY2k6CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZtZWlfZHJpdmVyKTsKK2VuZDoKKwlyZXR1cm4gcmV0OworfQorCittb2R1bGVfaW5pdChtZWlfaW5pdF9tb2R1bGUpOworCisvKioKKyAqIG1laV9leGl0X21vZHVsZSAtIERyaXZlciBFeGl0IENsZWFudXAgUm91dGluZQorICoKKyAqIG1laV9leGl0X21vZHVsZSBpcyBjYWxsZWQganVzdCBiZWZvcmUgdGhlIGRyaXZlciBpcyByZW1vdmVkCisgKiBmcm9tIG1lbW9yeS4KKyAqLworc3RhdGljIHZvaWQgX19leGl0IG1laV9leGl0X21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbWVpX2RyaXZlcik7CisJbWVpX3N5c2ZzX2RldmljZV9yZW1vdmUoKTsKKwltZWlfdW5yZWdpc3Rlcl9jZGV2KCk7CisKKwlwcl9kZWJ1ZygibWVpOiBEcml2ZXIgdW5sb2FkZWQgc3VjY2Vzc2Z1bGx5LlxuIik7Cit9CisKK21vZHVsZV9leGl0KG1laV9leGl0X21vZHVsZSk7CisKKworTU9EVUxFX0FVVEhPUigiSW50ZWwgQ29ycG9yYXRpb24iKTsKK01PRFVMRV9ERVNDUklQVElPTigiSW50ZWwoUikgTWFuYWdlbWVudCBFbmdpbmUgSW50ZXJmYWNlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfVkVSU0lPTihNRUlfRFJJVkVSX1ZFUlNJT04pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laS9tZWkuaCBiL2RyaXZlcnMvc3RhZ2luZy9tZWkvbWVpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRhN2M0ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWkvbWVpLmgKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisKKyAgSW50ZWwgTWFuYWdlbWVudCBFbmdpbmUgSW50ZXJmYWNlIChJbnRlbCBNRUkpIExpbnV4IGRyaXZlcgorICBJbnRlbCBNRUkgSW50ZXJmYWNlIEhlYWRlcgorCisgIFRoaXMgZmlsZSBpcyBwcm92aWRlZCB1bmRlciBhIGR1YWwgQlNEL0dQTHYyIGxpY2Vuc2UuICBXaGVuIHVzaW5nIG9yCisgIHJlZGlzdHJpYnV0aW5nIHRoaXMgZmlsZSwgeW91IG1heSBkbyBzbyB1bmRlciBlaXRoZXIgbGljZW5zZS4KKworICBHUEwgTElDRU5TRSBTVU1NQVJZCisKKyAgQ29weXJpZ2h0KGMpIDIwMDMtMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIENvbnRhY3QgSW5mb3JtYXRpb246CisJICBJbnRlbCBDb3Jwb3JhdGlvbi4KKwkgIGxpbnV4LW1laUBsaW51eC5pbnRlbC5jb20KKwkgIGh0dHA6Ly93d3cuaW50ZWwuY29tCisKKworICBCU0QgTElDRU5TRQorCisgIENvcHlyaWdodChjKSAyMDAzLTIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgICAgZGlzdHJpYnV0aW9uLgorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisqLworCisKKyNpZm5kZWYgX0xJTlVYX01FSV9ICisjZGVmaW5lIF9MSU5VWF9NRUlfSAorCisjaW5jbHVkZSA8bGludXgvdXVpZC5oPgorCisvKgorICogVGhpcyBJT0NUTCBpcyB1c2VkIHRvIGFzc29jaWF0ZSB0aGUgY3VycmVudCBmaWxlIGRlc2NyaXB0b3Igd2l0aCBhCisgKiBGVyBDbGllbnQgKGdpdmVuIGJ5IFVVSUQpLiBUaGlzIG9wZW5zIGEgY29tbXVuaWNhdGlvbiBjaGFubmVsCisgKiBiZXR3ZWVuIGEgaG9zdCBjbGllbnQgYW5kIGEgRlcgY2xpZW50LiBGcm9tIHRoaXMgcG9pbnQgZXZlcnkgcmVhZCBhbmQgd3JpdGUKKyAqIHdpbGwgY29tbXVuaWNhdGUgd2l0aCB0aGUgYXNzb2NpYXRlZCBGVyBjbGllbnQuCisgKiBPbmx5IGluIGNsb3NlKCkgKGZpbGVfb3BlcmF0aW9uIHJlbGVhc2UoKSkgdGhlIGNvbW11bmljYXRpb24gYmV0d2VlbgorICogdGhlIGNsaWVudHMgaXMgZGlzY29ubmVjdGVkCisgKgorICogVGhlIElPQ1RMIGFyZ3VtZW50IGlzIGEgc3RydWN0IHdpdGggYSB1bmlvbiB0aGUgY29udGFpbnMKKyAqIHRoZSBpbnB1dCBwYXJhbWV0ZXIgYW5kIHRoZSBvdXRwdXQgcGFyYW1ldGVyIGZvciB0aGlzIElPQ1RMLgorICoKKyAqIFRoZSBpbnB1dCBwYXJhbWV0ZXIgaXMgVVVJRCBvZiB0aGUgRlcgQ2xpZW50LgorICogVGhlIG91dHB1dCBwYXJhbWV0ZXIgaXMgdGhlIHByb3BlcnRpZXMgb2YgdGhlIEZXIGNsaWVudAorICogKEZXIHByb3RvY29sIHZlcnNpb24gYW5kIG1heCBtZXNzYWdlIHNpemUpLgorICoKKyAqLworI2RlZmluZSBJT0NUTF9NRUlfQ09OTkVDVF9DTElFTlQgXAorCV9JT1dSKCdIJyAsIDB4MDEsIHN0cnVjdCBtZWlfY29ubmVjdF9jbGllbnRfZGF0YSkKKworLyoKKyAqIEludGVsIE1FSSBjbGllbnQgaW5mb3JtYXRpb24gc3RydWN0CisgKi8KK3N0cnVjdCBtZWlfY2xpZW50IHsKKwlfX3UzMiBtYXhfbXNnX2xlbmd0aDsKKwlfX3U4IHByb3RvY29sX3ZlcnNpb247CisJX191OCByZXNlcnZlZFszXTsKK307CisKKy8qCisgKiBJT0NUTCBDb25uZWN0IENsaWVudCBEYXRhIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgbWVpX2Nvbm5lY3RfY2xpZW50X2RhdGEgeworCXVuaW9uIHsKKwkJdXVpZF9sZSBpbl9jbGllbnRfdXVpZDsKKwkJc3RydWN0IG1laV9jbGllbnQgb3V0X2NsaWVudF9wcm9wZXJ0aWVzOworCX07Cit9OworCisjZW5kaWYgLyogX0xJTlVYX01FSV9IICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laS9tZWkudHh0IGIvZHJpdmVycy9zdGFnaW5nL21laS9tZWkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MzAyYWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpL21laS50eHQKQEAgLTAsMCArMSwxODkgQEAKK0ludGVsIE1FSQorPT09PT09PT09PT09PT09PT09PT09PT0KKworSW50cm9kdWN0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgSW50ZWwgTWFuYWdlbWVudCBFbmdpbmUgKEludGVsIE1FKSBpcyBhbiBpc29sYXRlZCBhbmQKK3Byb3RlY3RlZCBjb21wdXRpbmcgcmVzb3VyY2UgKENvcHJvY2Vzc29yKSByZXNpZGluZyBpbnNpZGUKK0ludGVsIGNoaXBzZXRzLiBUaGUgSW50ZWwgTUUgcHJvdmlkZXMgc3VwcG9ydCBmb3IgY29tcHV0ZXIvSVQKK21hbmFnZW1lbnQgZmVhdHVyZXMuCitUaGUgRmVhdHVyZSBzZXQgZGVwZW5kcyBvbiB0aGUgSW50ZWwgY2hpcHNldCBTS1UuCisKK1RoZSBJbnRlbCBNYW5hZ2VtZW50IEVuZ2luZSBJbnRlcmZhY2UgKEludGVsIE1FSSwgcHJldmlvdXNseSBrbm93bgorYXMgSEVDSSkgaXMgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBIb3N0IGFuZCBJbnRlbCBNRS4KK1RoaXMgaW50ZXJmYWNlIGlzIGV4cG9zZWQgdG8gdGhlIGhvc3QgYXMgYSBQQ0kgZGV2aWNlLgorVGhlIEludGVsIE1FSSBEcml2ZXIgaXMgaW4gY2hhcmdlIG9mIHRoZSBjb21tdW5pY2F0aW9uIGNoYW5uZWwKK2JldHdlZW4gYSBob3N0IGFwcGxpY2F0aW9uIGFuZCB0aGUgTUUgZmVhdHVyZS4KKworRWFjaCBJbnRlbCBNRSBmZWF0dXJlIChJbnRlbCBNRSBDbGllbnQpIGlzIGFkZHJlc3NlZCBieQorR1VJRC9VVUlEIGFuZCBlYWNoIGZlYXR1cmUgZGVmaW5lcyBpdHMgb3duIHByb3RvY29sLgorVGhlIHByb3RvY29sIGlzIG1lc3NhZ2UtYmFzZWQgd2l0aCBhIGhlYWRlciBhbmQgcGF5bG9hZCB1cCB0bworNTEyIGJ5dGVzLgorCitbcGxhY2UgaG9sZGVyIHRvIFVSTCB0byBwcm90b2NvbCBkZWZpbml0aW9uc10KKworUHJvbWluZW50IHVzYWdlIG9mIHRoZSBJbnRlcmZhY2UgaXMgdG8gY29tbXVuaWNhdGUgd2l0aAorSW50ZWwgQWN0aXZlIE1hbmFnZW1lbnQgVGVjaG5vbG9neSAoSW50ZWwgQU1UKQoraW1wbGVtZW50ZWQgaW4gZmlybXdhcmUgcnVubmluZyBvbiB0aGUgSW50ZWwgTUUuCisKK0ludGVsIEFNVCBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBtYW5hZ2UgYSBob3N0IHJlbW90ZWx5IG91dC1vZi1iYW5kIChPT0IpCitldmVuIHdoZW4gdGhlIGhvc3QgcHJvY2Vzc29yIGhhcyBjcmFzaGVkIG9yIGlzIGluIGEgc2xlZXAgc3RhdGUuCisKK1NvbWUgZXhhbXBsZXMgb2YgSW50ZWwgQU1UIHVzYWdlIGFyZToKKyAgIC0gTW9uaXRvcmluZyBoYXJkd2FyZSBzdGF0ZSBhbmQgcGxhdGZvcm0gY29tcG9uZW50cworICAgLSBSZW1vdGUgcG93ZXIgb2ZmL29uICh1c2VmdWwgZm9yIGdyZWVuIGNvbXB1dGluZyBvciBvdmVybmlnaHQgSVQgbWFpbnRlbmFuY2UpCisgICAtIE9TIHVwZGF0ZXMKKyAgIC0gU3RvcmFnZSBvZiB1c2VmdWwgcGxhdGZvcm0gaW5mb3JtYXRpb24gc3VjaCBhcyBzb2Z0d2FyZSBhc3NldHMKKyAgIC0gYnVpbHQtaW4gaGFyZHdhcmUgS1ZNCisgICAtIHNlbGVjdGl2ZSBuZXR3b3JrIGlzb2xhdGlvbiBvZiBFdGhlcm5ldCBhbmQgSVAgcHJvdG9jb2wgZmxvd3MgYmFzZWQgb24KKyAgICAgcG9saWNpZXMgc2V0IGJ5IGEgcmVtb3RlIG1hbmFnZW1lbnQgY29uc29sZQorICAgLSBJREUgZGV2aWNlIHJlZGlyZWN0aW9uIGZyb20gcmVtb3RlIG1hbmFnZW1lbnQgY29uc29sZQorCitJbnRlbCBBTVQgKE9PQikgY29tbXVuaWNhdGlvbiBpcyBiYXNlZCBvbiBTT0FQIChkZXByZWNhdGVkCitzdGFydGluZyB3aXRoIFJlbGVhc2UgNi4wKSBvdmVyIEhUVFAvSFRUUFMgb3IgV1MtTWFuYWdlbWVudCBwcm90b2NvbAorb3ZlciBIVFRQIGFuZCBIVFRQUyB0aGF0IGFyZSByZWNlaXZlZCBmcm9tIGEgcmVtb3RlCittYW5hZ2VtZW50IGNvbnNvbGUgYXBwbGljYXRpb24uCisKK0ZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IEludGVsIEFNVDoKK2h0dHA6Ly9zb2Z0d2FyZS5pbnRlbC5jb20vc2l0ZXMvbWFuYWdlYWJpbGl0eS9BTVRfSW1wbGVtZW50YXRpb25fYW5kX1JlZmVyZW5jZV9HdWlkZS9Xb3JkRG9jdW1lbnRzL2Fib3V0aW50ZWxhbXQuaHRtCisKKworTUVJIERyaXZlcgorPT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGRyaXZlciBleHBvc2VzIGEgY2hhcmFjdGVyIGRldmljZSBjYWxsZWQgL2Rldi9tZWkuCisKK0FuIGFwcGxpY2F0aW9uIG1haW50YWlucyBjb21tdW5pY2F0aW9uIHdpdGggYW4gTUUgZmVhdHVyZSB3aGlsZQorL2Rldi9tZWkgaXMgb3Blbi4gVGhlIGJpbmRpbmcgdG8gYSBzcGVjaWZpYyBmZWF0dXJlcyBpcyBwZXJmb3JtZWQKK2J5IGNhbGxpbmcgTUVJX0NPTk5FQ1RfQ0xJRU5UX0lPQ1RMLCB3aGljaCBwYXNzZXMgdGhlIGRlc2lyZWQgVVVJRC4KK1RoZSBudW1iZXIgb2YgaW5zdGFuY2VzIG9mIGFuIE1FIGZlYXR1cmUgdGhhdCBjYW4gYmUgb3BlbmVkCithdCB0aGUgc2FtZSB0aW1lIGRlcGVuZHMgb24gdGhlIE1FIGZlYXR1cmUsIGJ1dCBtb3N0IG9mIHRoZQorZmVhdHVyZXMgYWxsb3cgb25seSBhIHNpbmdsZSBpbnN0YW5jZS4KKworCitUaGUgSW50ZWwgQU1UIEhvc3QgSW50ZXJmYWNlIChBTVRISSkgZmVhdHVyZSByZXF1aXJlcyBtdWx0aXBsZQorc2ltdWx0YW5lb3VzIHVzZXIgYXBwbGljYXRpb25zLCB0aGVyZWZvcmUgdGhlIE1FSSBkcml2ZXIgaGFuZGxlcwordGhpcyBpbnRlcm5hbGx5IGJ5IG1haW50YWluaW5nIHJlcXVlc3QgcXVldWVzIGZvciB0aGUgYXBwbGljYXRpb25zLgorCitUaGUgZHJpdmVyIGlzIG9ibGl2aW91cyB0byBkYXRhIHRoYXQgYXJlIHBhc3NlZCBiZXR3ZWVuCisKK0JlY2F1c2Ugc29tZSBvZiB0aGUgTUUgZmVhdHVyZXMgY2FuIGNoYW5nZSB0aGUgc3lzdGVtCitjb25maWd1cmF0aW9uLCB0aGUgZHJpdmVyIGJ5IGRlZmF1bHQgYWxsb3dzIG9ubHkgcHJpdmlsZWdlZAordXNlciB0byBhY2Nlc3MgaXQuCisKK0EgQ29kZSBzbmlwcGV0IGZvciBhcHBsaWNhdGlvbiBjb21tdW5pY2F0aW5nIHdpdGggQU1USEkgY2xpZW50OgorCXN0cnVjdCBtZWlfY29ubmVjdF9jbGllbnRfZGF0YSBkYXRhOworCWZkID0gb3BlbihNRUlfREVWSUNFKTsKKworCWRhdGEuZC5pbl9jbGllbnRfdXVpZCA9IEFNVEhJX1VVSUQ7CisKKwlpb2N0bChmZCwgSU9DVExfTUVJX0NPTk5FQ1RfQ0xJRU5ULCAmZGF0YSk7CisKKwlwcmludGYo4oCcVmVyPSVkLCBNYXhMZW49JWxkXG7igJ0sCisJCQlkYXRhLmQuaW5fY2xpZW50X3V1aWQucHJvdG9jb2xfdmVyc2lvbiwKKwkJCWRhdGEuZC5pbl9jbGllbnRfdXVpZC5tYXhfbXNnX2xlbmd0aCk7CisKKwlbLi4uXQorCisJd3JpdGUoZmQsIGFtdGhpX3JlcV9kYXRhLCBhbXRoaV9yZXFfZGF0YV9sZW4pOworCisJWy4uLl0KKworCXJlYWQoZmQsICZhbXRoaV9yZXNfZGF0YSwgYW10aGlfcmVzX2RhdGFfbGVuKTsKKworCVsuLi5dCisJY2xvc2UoZmQpOworCitNRSBBcHBsaWNhdGlvbnM6Cis9PT09PT09PT09PT09PQorCisxKSBJbnRlbCBMb2NhbCBNYW5hZ2VtZW50IFNlcnZpY2UgKEludGVsIExNUykKKwlBcHBsaWNhdGlvbnMgcnVubmluZyBsb2NhbGx5IG9uIHRoZSBwbGF0Zm9ybSBjb21tdW5pY2F0ZSB3aXRoCisJSW50ZWwgQU1UIFJlbGVhc2UgMi4wIGFuZCBsYXRlciByZWxlYXNlcyBpbiB0aGUgc2FtZSB3YXkKKwl0aGF0IG5ldHdvcmsgYXBwbGljYXRpb25zIGRvIHZpYSBTT0FQIG92ZXIgSFRUUCAoZGVwcmVjYXRlZAorCXN0YXJ0aW5nIHdpdGggUmVsZWFzZSA2LjApIG9yIHdpdGggV1MtTWFuYWdlbWVudCBvdmVyIFNPQVAgb3ZlcgorCUhUVFAuIHdoaWNoIG1lYW5zIHRoYXQgc29tZSBJbnRlbCBBTVQgZmVhdHVyZSBjYW4gYmUgYWNjZXNzCisJZnJvbSBhIGxvY2FsIGFwcGxpY2F0aW9uIHVzaW5nIHNhbWUgTmV0d29yayBpbnRlcmZhY2UgYXMgZm9yCisJcmVtb3RlIGFwcGxpY2F0aW9uLgorCisJV2hlbiBhIGxvY2FsIGFwcGxpY2F0aW9uIHNlbmRzIGEgbWVzc2FnZSBhZGRyZXNzZWQgdG8gdGhlIGxvY2FsCisJSW50ZWwgQU1UIGhvc3QgbmFtZSwgdGhlIExvY2FsIE1hbmFnZWFiaWxpdHkgU2VydmljZSAoTE1TKSwKKwl3aGljaCBsaXN0ZW5zIGZvciB0cmFmZmljIGRpcmVjdGVkIHRvIHRoZSBob3N0IG5hbWUsIGludGVyY2VwdHMKKwl0aGUgbWVzc2FnZSBhbmQgcm91dGVzIGl0IHRvIHRoZSBJbnRlbCBNYW5hZ2VtZW50IEVuZ2luZSBJbnRlcmZhY2UuCisJRm9yIG1vcmUgaW5mb3JtYXRpb246CisJaHR0cDovL3NvZnR3YXJlLmludGVsLmNvbS9zaXRlcy9tYW5hZ2VhYmlsaXR5L0FNVF9JbXBsZW1lbnRhdGlvbl9hbmRfCisJUmVmZXJlbmNlX0d1aWRlL1dvcmREb2N1bWVudHMvbG9jYWxhY2Nlc3MxLmh0bQorCisJVGhlIExNUyBvcGVucyBhIGNvbm5lY3Rpb24gdXNpbmcgdGhlIE1FSSBkcml2ZXIgdG8gdGhlIExNUworCUZXIGZlYXR1cmUgdXNpbmcgYSBkZWZpbmVkIFVVSUQgYW5kIHRoZW4gY29tbXVuaWNhdGVzIHdpdGggdGhlCisJZmVhdHVyZSB1c2luZyBhIHByb3RvY29sCisJY2FsbGVkIEludGVsKFIpIEFNVCBQb3J0IEZvcndhcmRpbmcgUHJvdG9jb2wgKEFQRiBwcm90b2NvbCkuCisJVGhlIHByb3RvY29sIGlzIHVzZWQgdG8gbWFpbnRhaW4gbXVsdGlwbGUgc2Vzc2lvbnMgd2l0aAorCUludGVsIEFNVCBmcm9tIGEgc2luZ2xlIGFwcGxpY2F0aW9uLgorCVNlZSB0aGUgcHJvdG9jb2wgc3BlY2lmaWNhdGlvbiBpbgorCXRoZSBJbnRlbChSKSBBTVQgSW1wbGVtZW50YXRpb24gYW5kIFJlZmVyZW5jZSBHdWlkZQorCWh0dHA6Ly9zb2Z0d2FyZS5pbnRlbC5jb20vc2l0ZXMvbWFuYWdlYWJpbGl0eS9BTVRfSW1wbGVtZW50YXRpb25fYW5kX1JlZmVyZW5jZV9HdWlkZS9IVE1MRG9jdW1lbnRzL01QU0RvY3VtZW50cy9JbnRlbCUyMEFNVCUyMFBvcnQlMjBGb3J3YXJkaW5nJTIwUHJvdG9jb2wlMjBSZWZlcmVuY2UlMjBNYW51YWwucGRmCisKKyAgMikgSW50ZWwgQU1UIFJlbW90ZSBjb25maWd1cmF0aW9uIHVzaW5nIGEgTG9jYWwgQWdlbnQ6CisJQSBMb2NhbCBBZ2VudCBlbmFibGVzIElUIHBlcnNvbm5lbCB0byBjb25maWd1cmUgSW50ZWwgQU1UIG91dC1vZi10aGUtYm94CisJd2l0aG91dCByZXF1aXJpbmcgaW5zdGFsbGluZyBhZGRpdGlvbmFsIGRhdGEgdG8gZW5hYmxlIHNldHVwLgorCVRoZSByZW1vdGUgY29uZmlndXJhdGlvbiBwcm9jZXNzIG1heSBpbnZvbHZlIGFuIElTVi1kZXZlbG9wZWQgcmVtb3RlCisJY29uZmlndXJhdGlvbiBhZ2VudCB0aGF0IHJ1bnMgb24gdGhlIGhvc3QuCisJRm9yIG1vcmUgaW5mb3JtYXRpb246CisJaHR0cDovL3NvZnR3YXJlLmludGVsLmNvbS9zaXRlcy9tYW5hZ2VhYmlsaXR5L0FNVF9JbXBsZW1lbnRhdGlvbl9hbmRfUmVmZXJlbmNlX0d1aWRlL1dvcmREb2N1bWVudHMvcmVtb3RlY29uZmlndXJhdGlvbndpdGhhbG9jYWxhZ2VudC5odG0KKworCUhvdyB0aGUgTG9jYWwgQWdlbnQgV29ya3MgKGluY2x1ZGluZyBDb21tYW5kIHN0cnVjdHMpOgorCWh0dHA6Ly9zb2Z0d2FyZS5pbnRlbC5jb20vc2l0ZXMvbWFuYWdlYWJpbGl0eS9BTVRfSW1wbGVtZW50YXRpb25fYW5kX1JlZmVyZW5jZV9HdWlkZS9Xb3JkRG9jdW1lbnRzL2hvd3RoZWxvY2FsYWdlbnRzYW1wbGV3b3Jrcy5odG0KKworSW50ZWwgQU1UIE9TIEhlYWx0aCBXYXRjaGRvZzoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUaGUgSW50ZWwgQU1UIFdhdGNoZG9nIGlzIGFuIE9TIEhlYWx0aCAoSGFuZy9DcmFzaCkgd2F0Y2hkb2cuCitXaGVuZXZlciB0aGUgT1MgaGFuZ3Mgb3IgY3Jhc2hlcywgSW50ZWwgQU1UIHdpbGwgc2VuZCBhbiBldmVudAordG8gd2hvZXZlciBzdWJzY3JpYmVkIHRvIHRoaXMgZXZlbnQuIFRoaXMgbWVjaGFuaXNtIG1lYW5zIHRoYXQKK0lUIGtub3dzIHdoZW4gYSBwbGF0Zm9ybSBjcmFzaGVzIGV2ZW4gd2hlbiB0aGVyZSBpcyBhIGhhcmQgZmFpbHVyZQorb24gdGhlIGhvc3QuCitUaGUgQU1UIFdhdGNoZG9nIGlzIGNvbXBvc2VkIG9mIHR3byBwYXJ0czoKKwkxKSBGVyBGZWF0dXJlIC0gdGhhdCByZWNlaXZlcyB0aGUgaGVhcnRiZWF0cworCSAgIGFuZCBzZW5kcyBhbiBldmVudCB3aGVuIHRoZSBoZWFydGJlYXRzIHN0b3AuCisJMikgTUVJIGRyaXZlciDigJMgY29ubmVjdHMgdG8gdGhlIHdhdGNoZG9nIChXRCkgZmVhdHVyZSwKKwkgICBjb25maWd1cmVzIHRoZSB3YXRjaGRvZyBhbmQgc2VuZHMgdGhlIGhlYXJ0YmVhdHMuCisKK1RoZSBNRUkgZHJpdmVyIGNvbmZpZ3VyZXMgdGhlIFdhdGNoZG9nIHRvIGV4cGlyZSBieSBkZWZhdWx0CitldmVyeSAxMjBzZWMgdW5sZXNzIHNldCBieSB0aGUgdXNlciB1c2luZyBtb2R1bGUgcGFyYW1ldGVycy4KK1RoZSBEcml2ZXIgdGhlbiBzZW5kcyBoZWFydGJlYXRzIGV2ZXJ5IDJzZWMuCisKK0lmIFdEIGZlYXR1cmUgZG9lcyBub3QgZXhpc3QgKGkuZS4gdGhlIGNvbm5lY3Rpb24gZmFpbGVkKSwKK3RoZSBNRUkgZHJpdmVyIHdpbGwgZGlzYWJsZSB0aGUgc2VuZGluZyBvZiBoZWFydGJlYXRzLgorCitNb2R1bGUgUGFyYW1ldGVycworPT09PT09PT09PT09PT09PT0KK3dhdGNoZG9nX3RpbWVvdXQgLSB0aGUgdXNlciBjYW4gdXNlIHRoaXMgbW9kdWxlIHBhcmFtZXRlcgordG8gY2hhbmdlIHRoZSB3YXRjaGRvZyB0aW1lb3V0IHNldHRpbmcuCisKK1RoaXMgdmFsdWUgc2V0cyB0aGUgSW50ZWwgQU1UIHdhdGNoZG9nIHRpbWVvdXQgaW50ZXJ2YWwgaW4gc2Vjb25kczsKK3RoZSBkZWZhdWx0IHZhbHVlIGlzIDEyMHNlYy4KK2luIG9yZGVyIHRvIGRpc2FibGUgdGhlIHdhdGNoZG9nIGFjdGl2aXRlcyBzZXQgdGhlIHZhbHVlIHRvIDAuCitOb3JtYWwgdmFsdWVzIHNob3VsZCBiZSBiZXR3ZWVuIDEyMCBhbmQgNjU1MzUKKworU3VwcG9ydGVkIENoaXBzZXRzOgorPT09PT09PT09PT09PT09PT09Cis3IFNlcmllcyBDaGlwc2V0IEZhbWlseQorNiBTZXJpZXMgQ2hpcHNldCBGYW1pbHkKKzUgU2VyaWVzIENoaXBzZXQgRmFtaWx5Cis0IFNlcmllcyBDaGlwc2V0IEZhbWlseQorTW9iaWxlIDQgU2VyaWVzIENoaXBzZXQgRmFtaWx5CitJQ0g5Cis4Mjk0NkdaL0dMCis4MkczNSBFeHByZXNzCis4MlE5NjMvUTk2NQorODJQOTY1L0c5NjUKK01vYmlsZSBQTTk2NS9HTTk2NQorTW9iaWxlIEdNRTk2NS9HTEU5NjAKKzgyUTM1IEV4cHJlc3MKKzgyRzMzL0czMS9QMzUvUDMxIEV4cHJlc3MKKzgyUTMzIEV4cHJlc3MKKzgyWDM4L1g0OCBFeHByZXNzCisKKy0tLQorbGludXgtbWVpQGxpbnV4LmludGVsLmNvbQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laS9tZWlfZGV2LmggYi9kcml2ZXJzL3N0YWdpbmcvbWVpL21laV9kZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjNlYzA2OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWkvbWVpX2Rldi5oCkBAIC0wLDAgKzEsNDIyIEBACisvKgorICoKKyAqIEludGVsIE1hbmFnZW1lbnQgRW5naW5lIEludGVyZmFjZSAoSW50ZWwgTUVJKSBMaW51eCBkcml2ZXIKKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDExLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX01FSV9ERVZfSF8KKyNkZWZpbmUgX01FSV9ERVZfSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSAibWVpLmgiCisjaW5jbHVkZSAiaHcuaCIKKworLyoKKyAqIE1FSSBDaGFyIERyaXZlciBNaW5vcnMKKyAqLworI2RlZmluZSBNRUlfTUlOT1JTX0JBU0UJMQorI2RlZmluZSBNRUlfTUlOT1JTX0NPVU5UCTEKKyNkZWZpbmUgTUVJX01JTk9SX05VTUJFUgkxCisKKy8qCisgKiB3YXRjaCBkb2cgZGVmaW5pdGlvbgorICovCisjZGVmaW5lIE1FSV9XQVRDSERPR19EQVRBX1NJWkUgICAgICAgICAxNgorI2RlZmluZSBNRUlfU1RBUlRfV0RfREFUQV9TSVpFICAgICAgICAgMjAKKyNkZWZpbmUgTUVJX1dEX1BBUkFNU19TSVpFICAgICAgICAgICAgIDQKKyNkZWZpbmUgTUVJX1dEX1NUQVRFX0lOREVQRU5ERU5DRV9NU0dfU0VOVCAgICAgICAoMSA8PCAwKQorCisvKgorICogQU1USEkgQ2xpZW50IFVVSUQKKyAqLworZXh0ZXJuIGNvbnN0IHV1aWRfbGUgbWVpX2FtdGhpX2d1aWQ7CisKKy8qCisgKiBXYXRjaGRvZyBDbGllbnQgVVVJRAorICovCitleHRlcm4gY29uc3QgdXVpZF9sZSBtZWlfd2RfZ3VpZDsKKworLyoKKyAqIFdhdGNoZG9nIGluZGVwZW5kZW5jZSBzdGF0ZSBtZXNzYWdlCisgKi8KK2V4dGVybiBjb25zdCB1OCBtZWlfd2Rfc3RhdGVfaW5kZXBlbmRlbmNlX21zZ1szXVs0XTsKKworLyoKKyAqIE51bWJlciBvZiBGaWxlIGRlc2NyaXB0b3JzL2hhbmRsZXMKKyAqIHRoYXQgY2FuIGJlIG9wZW5lZCB0byB0aGUgZHJpdmVyLgorICoKKyAqIExpbWl0IHRvIDI1MzogMjU1IFRvdGFsIENsaWVudHMKKyAqIG1pbnVzIGludGVybmFsIGNsaWVudCBmb3IgQU1USEkKKyAqIG1pbnVzIGludGVybmFsIGNsaWVudCBmb3IgV2F0Y2hkb2cKKyAqLworI2RlZmluZSAgTUVJX01BWF9PUEVOX0hBTkRMRV9DT1VOVAkyNTMKKworLyoKKyAqIE51bWJlciBvZiBxdWV1ZSBsaXN0cyB1c2VkIGJ5IHRoaXMgZHJpdmVyCisgKi8KKyNkZWZpbmUgTUVJX0lPX0xJU1RTX05VTUJFUiAgICAgICAgNworCisvKgorICogTnVtYmVyIG9mIE1heGltdW0gTUVJIENsaWVudHMKKyAqLworI2RlZmluZSBNRUlfQ0xJRU5UU19NQVggMjU1CisKKy8qIEZpbGUgc3RhdGUgKi8KK2VudW0gZmlsZV9zdGF0ZSB7CisJTUVJX0ZJTEVfSU5JVElBTElaSU5HID0gMCwKKwlNRUlfRklMRV9DT05ORUNUSU5HLAorCU1FSV9GSUxFX0NPTk5FQ1RFRCwKKwlNRUlfRklMRV9ESVNDT05ORUNUSU5HLAorCU1FSV9GSUxFX0RJU0NPTk5FQ1RFRAorfTsKKworLyogTUVJIGRldmljZSBzdGF0ZXMgKi8KK2VudW0gbWVpX3N0YXRlcyB7CisJTUVJX0lOSVRJQUxJWklORyA9IDAsCisJTUVJX0lOSVRfQ0xJRU5UUywKKwlNRUlfRU5BQkxFRCwKKwlNRUlfUkVTRVRJTkcsCisJTUVJX0RJU0FCTEVELAorCU1FSV9SRUNPVkVSSU5HX0ZST01fUkVTRVQsCisJTUVJX1BPV0VSX0RPV04sCisJTUVJX1BPV0VSX1VQCit9OworCisvKiBpbml0IGNsaWVudHMgIHN0YXRlcyovCitlbnVtIG1laV9pbml0X2NsaWVudHNfc3RhdGVzIHsKKwlNRUlfU1RBUlRfTUVTU0FHRSA9IDAsCisJTUVJX0VOVU1fQ0xJRU5UU19NRVNTQUdFLAorCU1FSV9DTElFTlRfUFJPUEVSVElFU19NRVNTQUdFCit9OworCitlbnVtIGlhbXRoaWZfc3RhdGVzIHsKKwlNRUlfSUFNVEhJRl9JRExFLAorCU1FSV9JQU1USElGX1dSSVRJTkcsCisJTUVJX0lBTVRISUZfRkxPV19DT05UUk9MLAorCU1FSV9JQU1USElGX1JFQURJTkcsCisJTUVJX0lBTVRISUZfUkVBRF9DT01QTEVURQorfTsKKworZW51bSBtZWlfZmlsZV90cmFuc2FjdGlvbl9zdGF0ZXMgeworCU1FSV9JRExFLAorCU1FSV9XUklUSU5HLAorCU1FSV9XUklURV9DT01QTEVURSwKKwlNRUlfRkxPV19DT05UUk9MLAorCU1FSV9SRUFESU5HLAorCU1FSV9SRUFEX0NPTVBMRVRFCit9OworCisvKiBNRUkgQ0IgKi8KK2VudW0gbWVpX2NiX21ham9yX3R5cGVzIHsKKwlNRUlfUkVBRCA9IDAsCisJTUVJX1dSSVRFLAorCU1FSV9JT0NUTCwKKwlNRUlfT1BFTiwKKwlNRUlfQ0xPU0UKK307CisKKy8qCisgKiBJbnRlbCBNRUkgbWVzc2FnZSBkYXRhIHN0cnVjdAorICovCitzdHJ1Y3QgbWVpX21lc3NhZ2VfZGF0YSB7CisJdTMyIHNpemU7CisJY2hhciAqZGF0YTsKK30gX19wYWNrZWQ7CisKKworc3RydWN0IG1laV9jbF9jYiB7CisJc3RydWN0IGxpc3RfaGVhZCBjYl9saXN0OworCWVudW0gbWVpX2NiX21ham9yX3R5cGVzIG1ham9yX2ZpbGVfb3BlcmF0aW9uczsKKwl2b2lkICpmaWxlX3ByaXZhdGU7CisJc3RydWN0IG1laV9tZXNzYWdlX2RhdGEgcmVxdWVzdF9idWZmZXI7CisJc3RydWN0IG1laV9tZXNzYWdlX2RhdGEgcmVzcG9uc2VfYnVmZmVyOworCXVuc2lnbmVkIGxvbmcgaW5mb3JtYXRpb247CisJdW5zaWduZWQgbG9uZyByZWFkX3RpbWU7CisJc3RydWN0IGZpbGUgKmZpbGVfb2JqZWN0OworfTsKKworLyogTUVJIGNsaWVudCBpbnN0YW5jZSBjYXJyaWVkIGFzIGZpbGUtPnBpcnZhdGVfZGF0YSovCitzdHJ1Y3QgbWVpX2NsIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CisJc3RydWN0IG1laV9kZXZpY2UgKmRldjsKKwllbnVtIGZpbGVfc3RhdGUgc3RhdGU7CisJd2FpdF9xdWV1ZV9oZWFkX3QgdHhfd2FpdDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCByeF93YWl0OworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CisJaW50IHJlYWRfcGVuZGluZzsKKwlpbnQgc3RhdHVzOworCS8qIElEIG9mIGNsaWVudCBjb25uZWN0ZWQgKi8KKwl1OCBob3N0X2NsaWVudF9pZDsKKwl1OCBtZV9jbGllbnRfaWQ7CisJdTggbWVpX2Zsb3dfY3RybF9jcmVkczsKKwl1OCB0aW1lcl9jb3VudDsKKwllbnVtIG1laV9maWxlX3RyYW5zYWN0aW9uX3N0YXRlcyByZWFkaW5nX3N0YXRlOworCWVudW0gbWVpX2ZpbGVfdHJhbnNhY3Rpb25fc3RhdGVzIHdyaXRpbmdfc3RhdGU7CisJaW50IHNtX3N0YXRlOworCXN0cnVjdCBtZWlfY2xfY2IgKnJlYWRfY2I7Cit9OworCitzdHJ1Y3QgbWVpX2lvX2xpc3QgeworCXN0cnVjdCBtZWlfY2xfY2IgbWVpX2NiOworCWludCBzdGF0dXM7CisJc3RydWN0IG1laV9kZXZpY2UgKmRldmljZV9leHRlbnNpb247Cit9OworCisvKiBNRUkgcHJpdmF0ZSBkZXZpY2Ugc3RydWN0ICovCitzdHJ1Y3QgbWVpX2RldmljZSB7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CS8qIHBvaW50ZXIgdG8gcGNpIGRldmljZSBzdHJ1Y3QgKi8KKwkvKgorCSAqIGxpc3RzIG9mIHF1ZXVlcworCSAqLworCSAvKiBhcnJheSBvZiBwb2ludGVycyB0byBhaW8gbGlzdHMgKi8KKwlzdHJ1Y3QgbWVpX2lvX2xpc3QgKmlvX2xpc3RfYXJyYXlbTUVJX0lPX0xJU1RTX05VTUJFUl07CisJc3RydWN0IG1laV9pb19saXN0IHJlYWRfbGlzdDsJCS8qIGRyaXZlciByZWFkIHF1ZXVlICovCisJc3RydWN0IG1laV9pb19saXN0IHdyaXRlX2xpc3Q7CQkvKiBkcml2ZXIgd3JpdGUgcXVldWUgKi8KKwlzdHJ1Y3QgbWVpX2lvX2xpc3Qgd3JpdGVfd2FpdGluZ19saXN0OwkvKiB3cml0ZSB3YWl0aW5nIHF1ZXVlICovCisJc3RydWN0IG1laV9pb19saXN0IGN0cmxfd3JfbGlzdDsJLyogbWFuYWdlZCB3cml0ZSBJT0NUTCBsaXN0ICovCisJc3RydWN0IG1laV9pb19saXN0IGN0cmxfcmRfbGlzdDsJLyogbWFuYWdlZCByZWFkIElPQ1RMIGxpc3QgKi8KKwlzdHJ1Y3QgbWVpX2lvX2xpc3QgYW10aGlfY21kX2xpc3Q7CS8qIGFtdGhpIGxpc3QgZm9yIGNtZCB3YWl0aW5nICovCisKKwkvKiBkcml2ZXIgbWFuYWdlZCBhbXRoaSBsaXN0IGZvciByZWFkaW5nIGNvbXBsZXRlZCBhbXRoaSBjbWQgZGF0YSAqLworCXN0cnVjdCBtZWlfaW9fbGlzdCBhbXRoaV9yZWFkX2NvbXBsZXRlX2xpc3Q7CisJLyoKKwkgKiBsaXN0IG9mIGZpbGVzCisJICovCisJc3RydWN0IGxpc3RfaGVhZCBmaWxlX2xpc3Q7CisJLyoKKwkgKiBtZW1vcnkgb2YgZGV2aWNlCisJICovCisJdW5zaWduZWQgaW50IG1lbV9iYXNlOworCXVuc2lnbmVkIGludCBtZW1fbGVuZ3RoOworCXZvaWQgX19pb21lbSAqbWVtX2FkZHI7CisJLyoKKwkgKiBsb2NrIGZvciB0aGUgZGV2aWNlCisJICovCisJc3RydWN0IG11dGV4IGRldmljZV9sb2NrOyAvKiBkZXZpY2UgbG9jayAqLworCWludCByZWN2ZF9tc2c7CisJc3RydWN0IGRlbGF5ZWRfd29yayB3ZF93b3JrOwkvKiB3YXRjaCBkb2cgZGVsZXllIHdvcmsgKi8KKwkvKgorCSAqIGh3IHN0YXRlcyBvZiBob3N0IGFuZCBmdyhNRSkKKwkgKi8KKwl1MzIgaG9zdF9od19zdGF0ZTsKKwl1MzIgbWVfaHdfc3RhdGU7CisJLyoKKwkgKiB3YWl0aW5nIHF1ZXVlIGZvciByZWNlaXZlIG1lc3NhZ2UgZnJvbSBGVworCSAqLworCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfcmVjdmRfbXNnOworCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfc3RvcF93ZDsKKworCS8qCisJICogbWVpIGRldmljZSAgc3RhdGVzCisJICovCisJZW51bSBtZWlfc3RhdGVzIG1laV9zdGF0ZTsKKwllbnVtIG1laV9pbml0X2NsaWVudHNfc3RhdGVzIGluaXRfY2xpZW50c19zdGF0ZTsKKwl1MTYgaW5pdF9jbGllbnRzX3RpbWVyOworCWludCBzdG9wOworCisJdTMyIGV4dHJhX3dyaXRlX2luZGV4OworCXUzMiByZF9tc2dfYnVmWzEyOF07CS8qIHVzZWQgZm9yIGNvbnRyb2wgbWVzc2FnZXMgKi8KKwl1MzIgd3JfbXNnX2J1ZlsxMjhdOwkvKiB1c2VkIGZvciBjb250cm9sIG1lc3NhZ2VzICovCisJdTMyIGV4dF9tc2dfYnVmWzhdOwkvKiBmb3IgY29udHJvbCByZXNwb25zZXMgKi8KKwl1MzIgcmRfbXNnX2hkcjsKKworCXN0cnVjdCBoYm1fdmVyc2lvbiB2ZXJzaW9uOworCisJaW50IG1laV9ob3N0X2J1ZmZlcl9pc19lbXB0eTsKKwlzdHJ1Y3QgbWVpX2NsIHdkX2NsOworCXN0cnVjdCBtZWlfbWVfY2xpZW50ICptZV9jbGllbnRzOyAvKiBOb3RlOiBtZW1vcnkgaGFzIHRvIGJlIGFsbG9jYXRlZCAqLworCURFQ0xBUkVfQklUTUFQKG1lX2NsaWVudHNfbWFwLCBNRUlfQ0xJRU5UU19NQVgpOworCURFQ0xBUkVfQklUTUFQKGhvc3RfY2xpZW50c19tYXAsIE1FSV9DTElFTlRTX01BWCk7CisJdTggbnVtX21laV9tZV9jbGllbnRzOworCXU4IG1lX2NsaWVudF9wcmVzZW50YXRpb25fbnVtOworCXU4IG1lX2NsaWVudF9pbmRleDsKKworCWludCB3ZF9wZW5kaW5nOworCWludCB3ZF9zdG9wcGVkOworCXUxNiB3ZF90aW1lb3V0OwkvKiBzZWNvbmRzICgod2RfZGF0YVsxXSA8PCA4KSArIHdkX2RhdGFbMF0pICovCisJdW5zaWduZWQgY2hhciB3ZF9kYXRhW01FSV9TVEFSVF9XRF9EQVRBX1NJWkVdOworCisKKwl1MTYgd2RfZHVlX2NvdW50ZXI7CisJYm9vbCB3ZF9ieXBhc3M7CS8qIGlmIGZhbHNlLCBkb24ndCByZWZyZXNoIHdhdGNoZG9nIE1FIGNsaWVudCAqLworCisJc3RydWN0IGZpbGUgKmlhbXRoaWZfZmlsZV9vYmplY3Q7CisJc3RydWN0IG1laV9jbCBpYW10aGlmX2NsOworCWludCBpYW10aGlmX2lvY3RsOworCWludCBpYW10aGlmX2NhbmNlbGVkOworCWludCBpYW10aGlmX210dTsKKwl1bnNpZ25lZCBsb25nIGlhbXRoaWZfdGltZXI7CisJdTMyIGlhbXRoaWZfc3RhbGxfdGltZXI7CisJdW5zaWduZWQgY2hhciAqaWFtdGhpZl9tc2dfYnVmOyAvKiBOb3RlOiBtZW1vcnkgaGFzIHRvIGJlIGFsbG9jYXRlZCAqLworCXUzMiBpYW10aGlmX21zZ19idWZfc2l6ZTsKKwl1MzIgaWFtdGhpZl9tc2dfYnVmX2luZGV4OworCWludCBpYW10aGlmX2Zsb3dfY29udHJvbF9wZW5kaW5nOworCWVudW0gaWFtdGhpZl9zdGF0ZXMgaWFtdGhpZl9zdGF0ZTsKKwlzdHJ1Y3QgbWVpX2NsX2NiICppYW10aGlmX2N1cnJlbnRfY2I7CisJdTggd3JpdGVfaGFuZzsKKwlpbnQgbmVlZF9yZXNldDsKKwlsb25nIG9wZW5faGFuZGxlX2NvdW50OworCit9OworCisKKy8qCisgKiBtZWkgaW5pdCBmdW5jdGlvbiBwcm90b3R5cGVzCisgKi8KK3N0cnVjdCBtZWlfZGV2aWNlICppbml0X21laV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwordm9pZCBtZWlfcmVzZXQoc3RydWN0IG1laV9kZXZpY2UgKmRldiwgaW50IGludGVycnVwdHMpOworaW50IG1laV9od19pbml0KHN0cnVjdCBtZWlfZGV2aWNlICpkZXYpOworaW50IG1laV90YXNrX2luaXRpYWxpemVfY2xpZW50cyh2b2lkICpkYXRhKTsKK2ludCBtZWlfaW5pdGlhbGl6ZV9jbGllbnRzKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYpOworc3RydWN0IG1laV9jbCAqbWVpX2FsbG9jX2ZpbGVfcHJpdmF0ZShzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KTsKK2ludCBtZWlfZGlzY29ubmVjdF9ob3N0X2NsaWVudChzdHJ1Y3QgbWVpX2RldmljZSAqZGV2LCBzdHJ1Y3QgbWVpX2NsICpjbCk7Cit2b2lkIG1laV9pbml0aWFsaXplX2xpc3Qoc3RydWN0IG1laV9pb19saXN0ICpsaXN0LAorCQkJICBzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KTsKK3ZvaWQgbWVpX2ZsdXNoX2xpc3Qoc3RydWN0IG1laV9pb19saXN0ICpsaXN0LCBzdHJ1Y3QgbWVpX2NsICpjbCk7Cit2b2lkIG1laV9mbHVzaF9xdWV1ZXMoc3RydWN0IG1laV9kZXZpY2UgKmRldiwgc3RydWN0IG1laV9jbCAqY2wpOwordm9pZCBtZWlfcmVtb3ZlX2NsaWVudF9mcm9tX2ZpbGVfbGlzdChzdHJ1Y3QgbWVpX2RldmljZSAqZGV2LAorCQkJCSAgICAgICB1OCBob3N0X2NsaWVudF9pZCk7Cit2b2lkIGhvc3RfaW5pdF9pYW10aGlmKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYpOwordm9pZCBtZWlfaW5pdF9maWxlX3ByaXZhdGUoc3RydWN0IG1laV9jbCAqcHJpdiwgc3RydWN0IG1laV9kZXZpY2UgKmRldik7Cit2b2lkIGFsbG9jYXRlX21lX2NsaWVudHNfc3RvcmFnZShzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KTsKKwordm9pZCBob3N0X3N0YXJ0X21lc3NhZ2Uoc3RydWN0IG1laV9kZXZpY2UgKmRldik7Cit2b2lkIGhvc3RfZW51bV9jbGllbnRzX21lc3NhZ2Uoc3RydWN0IG1laV9kZXZpY2UgKmRldik7Cit2b2lkIGhvc3RfY2xpZW50X3Byb3BlcnRpZXMoc3RydWN0IG1laV9kZXZpY2UgKmRldik7CisKK3U4IG1laV9maW5kX21lX2NsaWVudF91cGRhdGVfZmlsZXh0KHN0cnVjdCBtZWlfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IG1laV9jbCAqcHJpdiwKKwkJCQljb25zdCB1dWlkX2xlICpjZ3VpZCwgdTggY2xpZW50X2lkKTsKKworLyoKKyAqICBpbnRlcnJ1cHQgZnVuY3Rpb25zIHByb3RvdHlwZQorICovCitpcnFyZXR1cm5fdCBtZWlfaW50ZXJydXB0X3F1aWNrX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKK2lycXJldHVybl90ICBtZWlfaW50ZXJydXB0X3RocmVhZF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7Cit2b2lkIG1laV93ZF90aW1lcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCisvKgorICogIGlucHV0IG91dHB1dCBmdW5jdGlvbiBwcm90b3R5cGUKKyAqLworaW50IG1laV9pb2N0bF9jb25uZWN0X2NsaWVudChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCXN0cnVjdCBtZWlfY29ubmVjdF9jbGllbnRfZGF0YSAqZGF0YSk7CisKK2ludCBtZWlfc3RhcnRfcmVhZChzdHJ1Y3QgbWVpX2RldmljZSAqZGV2LCBzdHJ1Y3QgbWVpX2NsICpjbCk7CisKK2ludCBhbXRoaV93cml0ZShzdHJ1Y3QgbWVpX2RldmljZSAqZGV2LCBzdHJ1Y3QgbWVpX2NsX2NiICpwcml2X2NiKTsKKworaW50IGFtdGhpX3JlYWQoc3RydWN0IG1laV9kZXZpY2UgKmRldiwgc3RydWN0IGZpbGUgKmZpbGUsCisJICAgICAgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBsZW5ndGgsIGxvZmZfdCAqb2Zmc2V0KTsKKworc3RydWN0IG1laV9jbF9jYiAqZmluZF9hbXRoaV9yZWFkX2xpc3RfZW50cnkoc3RydWN0IG1laV9kZXZpY2UgKmRldiwKKwkJCQkJCXN0cnVjdCBmaWxlICpmaWxlKTsKKwordm9pZCBydW5fbmV4dF9pYW10aGlmX2NtZChzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KTsKKwordm9pZCBtZWlfZnJlZV9jYl9wcml2YXRlKHN0cnVjdCBtZWlfY2xfY2IgKnByaXZfY2IpOworCitpbnQgbWVpX2ZpbmRfbWVfY2xpZW50X2luZGV4KGNvbnN0IHN0cnVjdCBtZWlfZGV2aWNlICpkZXYsIHV1aWRfbGUgY3V1aWQpOworCisvKgorICogUmVnaXN0ZXIgQWNjZXNzIEZ1bmN0aW9uCisgKi8KKworLyoqCisgKiBtZWlfcmVnX3JlYWQgLSBSZWFkcyAzMmJpdCBkYXRhIGZyb20gdGhlIG1laSBkZXZpY2UKKyAqCisgKiBAZGV2OiB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICogQG9mZnNldDogb2Zmc2V0IGZyb20gd2hpY2ggdG8gcmVhZCB0aGUgZGF0YQorICoKKyAqIHJldHVybnMgdGhlIGJ5dGUgcmVhZC4KKyAqLworc3RhdGljIGlubGluZSB1MzIgbWVpX3JlZ19yZWFkKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYsCisJCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJcmV0dXJuIGlvcmVhZDMyKGRldi0+bWVtX2FkZHIgKyBvZmZzZXQpOworfQorCisvKioKKyAqIG1laV9yZWdfd3JpdGUgLSBXcml0ZXMgMzJiaXQgZGF0YSB0byB0aGUgbWVpIGRldmljZQorICoKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAb2Zmc2V0OiBvZmZzZXQgZnJvbSB3aGljaCB0byB3cml0ZSB0aGUgZGF0YQorICogQHZhbHVlOiB0aGUgYnl0ZSB0byB3cml0ZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbWVpX3JlZ193cml0ZShzdHJ1Y3QgbWVpX2RldmljZSAqZGV2LAorCQkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1MzIgdmFsdWUpCit7CisJaW93cml0ZTMyKHZhbHVlLCBkZXYtPm1lbV9hZGRyICsgb2Zmc2V0KTsKK30KKworLyoqCisgKiBtZWlfaGNzcl9yZWFkIC0gUmVhZHMgMzJiaXQgZGF0YSBmcm9tIHRoZSBob3N0IENTUgorICoKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogcmV0dXJucyB0aGUgYnl0ZSByZWFkLgorICovCitzdGF0aWMgaW5saW5lIHUzMiBtZWlfaGNzcl9yZWFkKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIG1laV9yZWdfcmVhZChkZXYsIEhfQ1NSKTsKK30KKworLyoqCisgKiBtZWlfbWVjc3JfcmVhZCAtIFJlYWRzIDMyYml0IGRhdGEgZnJvbSB0aGUgTUUgQ1NSCisgKgorICogQGRldjogdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiByZXR1cm5zIE1FX0NTUl9IQSByZWdpc3RlciB2YWx1ZSAodTMyKQorICovCitzdGF0aWMgaW5saW5lIHUzMiBtZWlfbWVjc3JfcmVhZChzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KQoreworCXJldHVybiBtZWlfcmVnX3JlYWQoZGV2LCBNRV9DU1JfSEEpOworfQorCisvKioKKyAqIGdldF9tZV9jYl9ydyAtIFJlYWRzIDMyYml0IGRhdGEgZnJvbSB0aGUgbWVpIE1FX0NCX1JXIHJlZ2lzdGVyCisgKgorICogQGRldjogdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiByZXR1cm5zIE1FX0NCX1JXIHJlZ2lzdGVyIHZhbHVlICh1MzIpCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIG1laV9tZWNicndfcmVhZChzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KQoreworCXJldHVybiBtZWlfcmVnX3JlYWQoZGV2LCBNRV9DQl9SVyk7Cit9CisKKworLyoKKyAqIG1laSBpbnRlcmZhY2UgZnVuY3Rpb24gcHJvdG90eXBlcworICovCit2b2lkIG1laV9oY3NyX3NldChzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KTsKK3ZvaWQgbWVpX2Nzcl9jbGVhcl9oaXMoc3RydWN0IG1laV9kZXZpY2UgKmRldik7CisKK3ZvaWQgbWVpX2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYpOwordm9pZCBtZWlfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYpOworCisvKioKKyAqIG1laV9mZV9zYW1lX2lkIC0gdGVsbHMgaWYgZmlsZSBwcml2YXRlIGRhdGEgaGF2ZSBzYW1lIGlkCisgKgorICogQGZlMTogcHJpdmF0ZSBkYXRhIG9mIDEuIGZpbGUgb2JqZWN0CisgKiBAZmUyOiBwcml2YXRlIGRhdGEgb2YgMi4gZmlsZSBvYmplY3QKKyAqCisgKiByZXR1cm5zICE9MCAtIGlmIGlkcyBhcmUgdGhlIHNhbWUsIDAgLSBpZiBkaWZmZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG1laV9mZV9zYW1lX2lkKGNvbnN0IHN0cnVjdCBtZWlfY2wgKmZlMSwKKwkJCQkgIGNvbnN0IHN0cnVjdCBtZWlfY2wgKmZlMikKK3sKKwlyZXR1cm4gKChmZTEtPmhvc3RfY2xpZW50X2lkID09IGZlMi0+aG9zdF9jbGllbnRfaWQpICYmCisJCShmZTEtPm1lX2NsaWVudF9pZCA9PSBmZTItPm1lX2NsaWVudF9pZCkpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWkvbWVpX3ZlcnNpb24uaCBiL2RyaXZlcnMvc3RhZ2luZy9tZWkvbWVpX3ZlcnNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzViYWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laS9tZWlfdmVyc2lvbi5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKgorICogSW50ZWwgTWFuYWdlbWVudCBFbmdpbmUgSW50ZXJmYWNlIChJbnRlbCBNRUkpIExpbnV4IGRyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMTEsIEludGVsIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworCisjaWZuZGVmIE1FSV9WRVJTSU9OX0gKKyNkZWZpbmUgTUVJX1ZFUlNJT05fSAorCisjZGVmaW5lIE1BSk9SX1ZFUlNJT04JCTcKKyNkZWZpbmUgTUlOT1JfVkVSU0lPTgkJMQorI2RlZmluZSBRVUlDS19GSVhfTlVNQkVSCTIwCisjZGVmaW5lIFZFUl9CVUlMRAkJMQorCisjZGVmaW5lIE1FSV9EUlZfVkVSMSBfX3N0cmluZ2lmeShNQUpPUl9WRVJTSU9OKSAiLiIgX19zdHJpbmdpZnkoTUlOT1JfVkVSU0lPTikKKyNkZWZpbmUgTUVJX0RSVl9WRVIyIF9fc3RyaW5naWZ5KFFVSUNLX0ZJWF9OVU1CRVIpICIuIiBfX3N0cmluZ2lmeShWRVJfQlVJTEQpCisKKyNkZWZpbmUgTUVJX0RSSVZFUl9WRVJTSU9OCU1FSV9EUlZfVkVSMSAiLiIgTUVJX0RSVl9WRVIyCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laS93ZC5jIGIvZHJpdmVycy9zdGFnaW5nL21laS93ZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NjRiMDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpL3dkLmMKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgKgorICogSW50ZWwgTWFuYWdlbWVudCBFbmdpbmUgSW50ZXJmYWNlIChJbnRlbCBNRUkpIExpbnV4IGRyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMTEsIEludGVsIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKyNpbmNsdWRlICJtZWlfZGV2LmgiCisjaW5jbHVkZSAiaHcuaCIKKyNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJtZWkuaCIKKworLyoKKyAqIE1FSSBXYXRjaGRvZyBNb2R1bGUgUGFyYW1ldGVycworICovCitzdGF0aWMgdTE2IHdhdGNoZG9nX3RpbWVvdXQgPSBBTVRfV0RfVkFMVUU7Cittb2R1bGVfcGFyYW0od2F0Y2hkb2dfdGltZW91dCwgdXNob3J0LCAwKTsKK01PRFVMRV9QQVJNX0RFU0Mod2F0Y2hkb2dfdGltZW91dCwKKwkJIkludGVsKFIpIEFNVCBXYXRjaGRvZyB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMuIChkZWZhdWx0PSIKKwkJCQkJX19NT0RVTEVfU1RSSU5HKEFNVF9XRF9WQUxVRSkKKwkJCQkJIiwgZGlzYWJsZT0wKSIpOworCitzdGF0aWMgY29uc3QgdTggbWVpX3N0YXJ0X3dkX3BhcmFtc1tdID0geyAweDAyLCAweDEyLCAweDEzLCAweDEwIH07CitzdGF0aWMgY29uc3QgdTggbWVpX3N0b3Bfd2RfcGFyYW1zW10gPSB7IDB4MDIsIDB4MDIsIDB4MTQsIDB4MTAgfTsKKworY29uc3QgdTggbWVpX3dkX3N0YXRlX2luZGVwZW5kZW5jZV9tc2dbM11bNF0gPSB7CisJezB4MDUsIDB4MDIsIDB4NTEsIDB4MTB9LAorCXsweDA1LCAweDAyLCAweDUyLCAweDEwfSwKKwl7MHgwNywgMHgwMiwgMHgwMSwgMHgxMH0KK307CisKKy8qIFVVSURzIGZvciBBTVQgRi9XIGNsaWVudHMgKi8KK2NvbnN0IHV1aWRfbGUgbWVpX3dkX2d1aWQgPSBVVUlEX0xFKDB4MDVCNzlBNkYsIDB4NDYyOCwgMHg0RDdGLCAweDg5LAorCQkJCQkJMHg5RCwgMHhBOSwgMHgxNSwgMHgxNCwgMHhDQiwKKwkJCQkJCTB4MzIsIDB4QUIpOworCisKK3ZvaWQgbWVpX3dkX3N0YXJ0X3NldHVwKHN0cnVjdCBtZWlfZGV2aWNlICpkZXYpCit7CisJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJkZXYtPndkX3RpbWVvdXQ9JWQuXG4iLCBkZXYtPndkX3RpbWVvdXQpOworCW1lbWNweShkZXYtPndkX2RhdGEsIG1laV9zdGFydF93ZF9wYXJhbXMsIE1FSV9XRF9QQVJBTVNfU0laRSk7CisJbWVtY3B5KGRldi0+d2RfZGF0YSArIE1FSV9XRF9QQVJBTVNfU0laRSwKKwkJJmRldi0+d2RfdGltZW91dCwgc2l6ZW9mKHUxNikpOworfQorCisvKioKKyAqIGhvc3RfaW5pdF93ZCAtIG1laSBpbml0aWFsaXphdGlvbiB3ZC4KKyAqCisgKiBAZGV2OiB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICovCit2b2lkIG1laV93ZF9ob3N0X2luaXQoc3RydWN0IG1laV9kZXZpY2UgKmRldikKK3sKKwltZWlfaW5pdF9maWxlX3ByaXZhdGUoJmRldi0+d2RfY2wsIGRldik7CisKKwkvKiBsb29rIGZvciBXRCBjbGllbnQgYW5kIGNvbm5lY3QgdG8gaXQgKi8KKwlkZXYtPndkX2NsLnN0YXRlID0gTUVJX0ZJTEVfRElTQ09OTkVDVEVEOworCWRldi0+d2RfdGltZW91dCA9IHdhdGNoZG9nX3RpbWVvdXQ7CisKKwlpZiAoZGV2LT53ZF90aW1lb3V0ID4gMCkgeworCQltZWlfd2Rfc3RhcnRfc2V0dXAoZGV2KTsKKwkJLyogZmluZCBNRSBXRCBjbGllbnQgKi8KKwkJbWVpX2ZpbmRfbWVfY2xpZW50X3VwZGF0ZV9maWxleHQoZGV2LCAmZGV2LT53ZF9jbCwKKwkJCQkJJm1laV93ZF9ndWlkLCBNRUlfV0RfSE9TVF9DTElFTlRfSUQpOworCisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiY2hlY2sgd2RfY2xcbiIpOworCQlpZiAoTUVJX0ZJTEVfQ09OTkVDVElORyA9PSBkZXYtPndkX2NsLnN0YXRlKSB7CisJCQlpZiAoIW1laV9jb25uZWN0KGRldiwgJmRldi0+d2RfY2wpKSB7CisJCQkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJGYWlsZWQgdG8gY29ubmVjdCB0byBXRCBjbGllbnRcbiIpOworCQkJCWRldi0+d2RfY2wuc3RhdGUgPSBNRUlfRklMRV9ESVNDT05ORUNURUQ7CisJCQkJZGV2LT53ZF9jbC5ob3N0X2NsaWVudF9pZCA9IDA7CisJCQkJaG9zdF9pbml0X2lhbXRoaWYoZGV2KSA7CisJCQl9IGVsc2UgeworCQkJCWRldi0+d2RfY2wudGltZXJfY291bnQgPSBDT05ORUNUX1RJTUVPVVQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgIkZhaWxlZCB0byBmaW5kIFdEIGNsaWVudFxuIik7CisJCQlob3N0X2luaXRfaWFtdGhpZihkZXYpIDsKKwkJfQorCX0gZWxzZSB7CisJCWRldi0+d2RfYnlwYXNzID0gdHJ1ZTsKKwkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJXRCByZXF1ZXN0ZWQgdG8gYmUgZGlzYWJsZWRcbiIpOworCQlob3N0X2luaXRfaWFtdGhpZihkZXYpIDsKKwl9Cit9CisKKy8qKgorICogbWVpX3dkX3NlbmQgLSBzZW5kcyB3YXRjaCBkb2cgbWVzc2FnZSB0byBmdy4KKyAqCisgKiBAZGV2OiB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIHJldHVybnMgMCBpZiBzdWNjZXNzLAorICoJLUVJTyB3aGVuIG1lc3NhZ2Ugc2VuZCBmYWlscworICoJLUVJTlZBTCB3aGVuIGludmFsaWQgbWVzc2FnZSBpcyB0byBiZSBzZW50CisgKi8KK2ludCBtZWlfd2Rfc2VuZChzdHJ1Y3QgbWVpX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtZWlfbXNnX2hkciAqbWVpX2hkcjsKKworCW1laV9oZHIgPSAoc3RydWN0IG1laV9tc2dfaGRyICopICZkZXYtPndyX21zZ19idWZbMF07CisJbWVpX2hkci0+aG9zdF9hZGRyID0gZGV2LT53ZF9jbC5ob3N0X2NsaWVudF9pZDsKKwltZWlfaGRyLT5tZV9hZGRyID0gZGV2LT53ZF9jbC5tZV9jbGllbnRfaWQ7CisJbWVpX2hkci0+bXNnX2NvbXBsZXRlID0gMTsKKwltZWlfaGRyLT5yZXNlcnZlZCA9IDA7CisKKwlpZiAoIW1lbWNtcChkZXYtPndkX2RhdGEsIG1laV9zdGFydF93ZF9wYXJhbXMsIE1FSV9XRF9QQVJBTVNfU0laRSkpCisJCW1laV9oZHItPmxlbmd0aCA9IE1FSV9TVEFSVF9XRF9EQVRBX1NJWkU7CisJZWxzZSBpZiAoIW1lbWNtcChkZXYtPndkX2RhdGEsIG1laV9zdG9wX3dkX3BhcmFtcywgTUVJX1dEX1BBUkFNU19TSVpFKSkKKwkJbWVpX2hkci0+bGVuZ3RoID0gTUVJX1dEX1BBUkFNU19TSVpFOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobWVpX3dyaXRlX21lc3NhZ2UoZGV2LCBtZWlfaGRyLCBkZXYtPndkX2RhdGEsIG1laV9oZHItPmxlbmd0aCkpCisJCXJldHVybiAwOworCXJldHVybiAtRUlPOworfQorCitpbnQgbWVpX3dkX3N0b3Aoc3RydWN0IG1laV9kZXZpY2UgKmRldiwgYm9vbCBwcmVzZXJ2ZSkKK3sKKwlpbnQgcmV0OworCXUxNiB3ZF90aW1lb3V0ID0gZGV2LT53ZF90aW1lb3V0OworCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmZGV2LT53ZF93b3JrKTsKKwlpZiAoZGV2LT53ZF9jbC5zdGF0ZSAhPSBNRUlfRklMRV9DT05ORUNURUQgfHwgIWRldi0+d2RfdGltZW91dCkKKwkJcmV0dXJuIDA7CisKKwlkZXYtPndkX3RpbWVvdXQgPSAwOworCWRldi0+d2RfZHVlX2NvdW50ZXIgPSAwOworCW1lbWNweShkZXYtPndkX2RhdGEsIG1laV9zdG9wX3dkX3BhcmFtcywgTUVJX1dEX1BBUkFNU19TSVpFKTsKKwlkZXYtPnN0b3AgPSAxOworCisJcmV0ID0gbWVpX2Zsb3dfY3RybF9jcmVkcyhkZXYsICZkZXYtPndkX2NsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAocmV0ICYmIGRldi0+bWVpX2hvc3RfYnVmZmVyX2lzX2VtcHR5KSB7CisJCXJldCA9IDA7CisJCWRldi0+bWVpX2hvc3RfYnVmZmVyX2lzX2VtcHR5ID0gMDsKKworCQlpZiAoIW1laV93ZF9zZW5kKGRldikpIHsKKwkJCXJldCA9IG1laV9mbG93X2N0cmxfcmVkdWNlKGRldiwgJmRldi0+d2RfY2wpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIG91dDsKKwkJfSBlbHNlIHsKKwkJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAic2VuZCBzdG9wIFdEIGZhaWxlZFxuIik7CisJCX0KKworCQlkZXYtPndkX3BlbmRpbmcgPSAwOworCX0gZWxzZSB7CisJCWRldi0+d2RfcGVuZGluZyA9IDE7CisJfQorCWRldi0+d2Rfc3RvcHBlZCA9IDA7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmRldmljZV9sb2NrKTsKKworCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGRldi0+d2FpdF9zdG9wX3dkLAorCQkJCQlkZXYtPndkX3N0b3BwZWQsIDEwICogSFopOworCW11dGV4X2xvY2soJmRldi0+ZGV2aWNlX2xvY2spOworCWlmICghZGV2LT53ZF9zdG9wcGVkKQorCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgInN0b3Agd2QgZmFpbGVkIHRvIGNvbXBsZXRlLlxuIik7CisJZWxzZQorCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgInN0b3Agd2QgY29tcGxldGUuXG4iKTsKKworCWlmIChwcmVzZXJ2ZSkKKwkJZGV2LT53ZF90aW1lb3V0ID0gd2RfdGltZW91dDsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9udmVjL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvbnZlYy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4N2FkNDgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbnZlYy9LY29uZmlnCkBAIC0wLDAgKzEsMjcgQEAKK2NvbmZpZyBNRkRfTlZFQworCWJvb2wgIk5WIFRlZ3JhIEVtYmVkZGVkIENvbnRyb2xsZXIgU01CdXMgSW50ZXJmYWNlIgorCWRlcGVuZHMgb24gSTJDICYmIEdQSU9MSUIgJiYgQVJDSF9URUdSQQorCWhlbHAKKwkgICAgU2F5IFkgaGVyZSB0byBlbmFibGUgc3VwcG9ydCBmb3IgYSBuVmlkaWEgY29tcGxpYW50IGVtYmVkZGVkCisJICAgIGNvbnRyb2xsZXIuCisKK2NvbmZpZyBLRVlCT0FSRF9OVkVDCisJYm9vbCAiS2V5Ym9hcmQgb24gblZpZGlhIGNvbXBsaWFudCBFQyIKKwlkZXBlbmRzIG9uIE1GRF9OVkVDCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgc3VwcG9ydCBmb3IgYSBrZXlib2FyZCBjb25uZWN0ZWQgdG8gCisJICBhIG5WaWRpYSBjb21wbGlhbnQgZW1iZWRkZWQgY29udHJvbGxlci4KKworY29uZmlnIFNFUklPX05WRUNfUFMyCisJYm9vbCAiUFMyIG9uIG5WaWRpYSBFQyIKKwlkZXBlbmRzIG9uIE1GRF9OVkVDCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgc3VwcG9ydCBmb3IgYSBUb3VjaHBhZCAvIE1vdXNlIGNvbm5lY3RlZAorCSAgdG8gYSBuVmlkaWEgY29tcGxpYW50IGVtYmVkZGVkIGNvbnRyb2xsZXIuCisKK2NvbmZpZyBOVkVDX1BPV0VSCisJYm9vbCAiTlZFQyBjaGFyZ2VyIGFuZCBiYXR0ZXJ5IgorCWRlcGVuZHMgb24gTUZEX05WRUMKKwloZWxwCisJICBTYXkgWSB0byBlbmFibGUgc3VwcG9ydCBmb3IgYmF0dGVyeSBhbmQgY2hhcmdlciBpbnRlcmZhY2UgZm9yCisJICBuVmlkaWEgY29tcGxpYW50IGVtYmVkZGVkIGNvbnRyb2xsZXJzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL252ZWMvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvbnZlYy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjVmY2VjMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9udmVjL01ha2VmaWxlCkBAIC0wLDAgKzEsNCBAQAorb2JqLSQoQ09ORklHX1NFUklPX05WRUNfUFMyKQkrPSBudmVjX3BzMi5vCitvYmotJChDT05GSUdfTUZEX05WRUMpCQkrPSBudmVjLm8KK29iai0kKENPTkZJR19OVkVDX1BPV0VSKSAJKz0gbnZlY19wb3dlci5vCitvYmotJChDT05GSUdfS0VZQk9BUkRfTlZFQykgCSs9IG52ZWNfa2JkLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9udmVjL1JFQURNRSBiL2RyaXZlcnMvc3RhZ2luZy9udmVjL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTMyMGI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL252ZWMvUkVBRE1FCkBAIC0wLDAgKzEsMTQgQEAKK05WRUM6IEFuIE5WaWRpYSBjb21wbGlhbnQgRW1iZWRkZWQgQ29udHJvbGxlciBQcm90b2NvbCBJbXBsZW1lbmF0aW9uCisKK1RoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIE5WRUMgcHJvdG9jb2wgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIGFuCitlbWJlZGRlZCBjb250cm9sbGVyIChFQykgdmlhIEkyQyBidXMuIFRoZSBFQyBpcyBhbiBJMkMgbWFzdGVyIHdoaWxlIHRoZSBob3N0Citwcm9jZXNzb3IgaXMgdGhlIEkyQyBzbGF2ZS4gUmVxdWVzdHMgZnJvbSB0aGUgaG9zdCBwcm9jZXNzb3IgdG8gdGhlIEVDIGFyZQorc3RhcnRlZCBieSB0cmlnZ2VyaW5nIGEgZ3BpbyBsaW5lLgorCitUaGVyZSBpcyBubyB3cml0dGVuIGRvY3VtZW50YXRpb24gb2YgdGhlIHByb3RvY29sIGF2YWlsYWJsZSB0byB0aGUgcHVibGljLAorYnV0IHRoZSBzb3VyY2UgY29kZVsxXSBvZiB0aGUgcHVibGlzaGVkIG52ZWMgcmVmZXJlbmNlIGRyaXZlcnMgY2FuIGJlIGEgZ3VpZGUuCitUaGlzIGRyaXZlciBpcyBjdXJyZW50bHkgb25seSB1c2VkIGJ5IHRoZSBBQzEwMCBwcm9qZWN0WzJdLCBidXQgaXQgaXMgbGlrZWx5LAordGhhdCBvdGhlciBUZWdyYSBib2FyZHMgKG5vdCB5ZXQgbWFpbmxpbmVkLCBpZiBldmVyKSBhbHNvIHVzZSBpdC4KKworWzFdIGUuZy4gaHR0cDovL252LXRlZ3JhLm52aWRpYS5jb20vZ2l0d2ViLz9wPWxpbnV4LTIuNi5naXQ7YT10cmVlO2Y9YXJjaC9hcm0vbWFjaC10ZWdyYS9udmVjO2hiPWFuZHJvaWQtdGVncmEtMi42LjMyCitbMl0gaHR0cDovL2dpdG9yaW91cy5vcmcvYWMxMDAsIGh0dHA6Ly9sYXVuY2hwYWQubmV0L2FjMTAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbnZlYy9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL252ZWMvVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2I0N2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL252ZWMvVE9ETwpAQCAtMCwwICsxLDggQEAKK1RvRG8gbGlzdCAoaW5jb21wbGV0ZSwgdW5vcmRlcmVkKQorCS0gY29udmVydCBtb3VzZSwga2V5Ym9hcmQsIGFuZCBwb3dlciB0byBwbGF0Zm9ybSBkZXZpY2VzCisJLSBhZGQgY29weXJpZ2h0IC8gZHJpdmVyIGF1dGhvciAvIGxpY2Vuc2UKKwktIGFkZCBjb21waWxlIGFzIG1vZHVsZSBzdXBwb3J0CisJLSBtb3ZlIG52ZWMgZGV2aWNlcyB0byBtZmQgY2VsbHM/CisJLSBhZGp1c3QgdG8ga2VybmVsIHN0eWxlCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL252ZWMvbnZlYy1rZXl0YWJsZS5oIGIvZHJpdmVycy9zdGFnaW5nL252ZWMvbnZlYy1rZXl0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMWM0ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbnZlYy9udmVjLWtleXRhYmxlLmgKQEAgLTAsMCArMSwyNjYgQEAKKy8qCisgKiBkcml2ZXJzL2lucHV0L2tleWJvYXJkL3RlZ3JhLW52ZWMuYworICoKKyAqIEtleWJvYXJkIGNsYXNzIGlucHV0IGRyaXZlciBmb3Iga2V5Ym9hcmRzIGNvbm5lY3RlZCB0byBhbiBOdkVjIGNvbXBsaWFudAorICogZW1iZWRkZWQgY29udHJvbGxlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgTlZJRElBIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgY29kZV90YWJfMTAydXNbXSA9IHsKKwlLRVlfR1JBVkUsCS8vIDB4MDAKKwlLRVlfRVNDLAorCUtFWV8xLAorCUtFWV8yLAorCUtFWV8zLAorCUtFWV80LAorCUtFWV81LAorCUtFWV82LAorCUtFWV83LAorCUtFWV84LAorCUtFWV85LAorCUtFWV8wLAorCUtFWV9NSU5VUywKKwlLRVlfRVFVQUwsCisJS0VZX0JBQ0tTUEFDRSwKKwlLRVlfVEFCLAorCUtFWV9RLAkJLy8gMHgxMAorCUtFWV9XLAorCUtFWV9FLAorCUtFWV9SLAorCUtFWV9ULAorCUtFWV9ZLAorCUtFWV9VLAorCUtFWV9JLAorCUtFWV9PLAorCUtFWV9QLAorCUtFWV9MRUZUQlJBQ0UsCisJS0VZX1JJR0hUQlJBQ0UsCisJS0VZX0VOVEVSLAorCUtFWV9MRUZUQ1RSTCwKKwlLRVlfQSwKKwlLRVlfUywKKwlLRVlfRCwJCS8vIDB4MjAKKwlLRVlfRiwKKwlLRVlfRywKKwlLRVlfSCwKKwlLRVlfSiwKKwlLRVlfSywKKwlLRVlfTCwKKwlLRVlfU0VNSUNPTE9OLAorCUtFWV9BUE9TVFJPUEhFLAorCUtFWV9HUkFWRSwKKwlLRVlfTEVGVFNISUZULAorCUtFWV9CQUNLU0xBU0gsCisJS0VZX1osCisJS0VZX1gsCisJS0VZX0MsCisJS0VZX1YsCisJS0VZX0IsCQkvLyAweDMwCisJS0VZX04sCisJS0VZX00sCisJS0VZX0NPTU1BLAorCUtFWV9ET1QsCisJS0VZX1NMQVNILAorCUtFWV9SSUdIVFNISUZULAorCUtFWV9LUEFTVEVSSVNLLAorCUtFWV9MRUZUQUxULAorCUtFWV9TUEFDRSwKKwlLRVlfQ0FQU0xPQ0ssCisJS0VZX0YxLAorCUtFWV9GMiwKKwlLRVlfRjMsCisJS0VZX0Y0LAorCUtFWV9GNSwKKwlLRVlfRjYsCQkvLyAweDQwCisJS0VZX0Y3LAorCUtFWV9GOCwKKwlLRVlfRjksCisJS0VZX0YxMCwKKwlLRVlfRk4sCisJMCwJCS8vVktfU0NST0xMCisJS0VZX0tQNywKKwlLRVlfS1A4LAorCUtFWV9LUDksCisJS0VZX0tQTUlOVVMsCisJS0VZX0tQNCwKKwlLRVlfS1A1LAorCUtFWV9LUDYsCisJS0VZX0tQUExVUywKKwlLRVlfS1AxLAorCUtFWV9LUDIsCS8vIDB4NTAKKwlLRVlfS1AzLAorCUtFWV9LUDAsCisJS0VZX0tQRE9ULAorCUtFWV9NRU5VLAkJLy9WS19TTkFQU0hPVAorCUtFWV9QT1dFUiwKKwlLRVlfMTAyTkQsCQkvL1ZLX09FTV8xMDIgICBoZW5yeSsgMHgyQiAoNDMpIEJBQ0tTTEFTSCBoYXZlIGJlZW4gdXNlZCxjaGFuZ2UgdG8gdXNlIDBYNTYgKDg2KQorCUtFWV9GMTEsCQkvL1ZLX0YxMQorCUtFWV9GMTIsCQkvL1ZLX0YxMgorCTAsIAorCTAsIAorCTAsIAorCTAsIAorCTAsIAorCTAsIAorCTAsIAorCTAsIC8vIDYwIAorCTAsCisJMCwKKwlLRVlfU0VBUkNILCAvLyBhZGQgc2VhcmNoIGtleSBtYXAgCisJMCwJCQorCTAsCisJMCwKKwkwLAkKKwkwLAkJCisJMCwgCisJMCwgCisJMCwgCisJMCwgCisJMCwgCisJMCwgCisJMCwgCisJMCwgLy8gNzAgCisJMCwKKwkwLAorCUtFWV9LUDUsICAvLzczIGZvciBKUCBrZXlib2FyZCAnXCcga2V5LCByZXBvcnQgMHg0YworCTAsCQkKKwkwLAorCTAsCisJMCwJCisJMCwJCQorCTAsIAorCTAsIAorICAgIDAsIAorCTAsIAorCUtFWV9LUDksIC8vN2QgIGZvciBKUCBrZXlib2FyZCAnfCcga2V5LCByZXBvcnQgMHg0OQorfTsKKworc3RhdGljIHVuc2lnbmVkIHNob3J0IGV4dGNvZGVfdGFiX3VzMTAyW10gPSB7CisJMCwKKwkwLAorCTAsCisJMCwKKwkwLAorCTAsCisJMCwKKwkwLAorCTAsCisJMCwKKwkwLAorCTAsCisJMCwKKwkwLAorCTAsCisJMCwKKwkwLAkJLy8gMHhFMCAweDEwCisJMCwKKwkwLAorCTAsCisJMCwKKwkwLAorCTAsCisJMCwKKwkwLAorCTAsCQkvL1ZLX01FRElBX05FWFRfVFJBQ0ssCisJMCwKKwkwLAorCTAsCQkvL1ZLX1JFVFVSTiwKKwlLRVlfUklHSFRDVFJMLAkJLy9WS19SQ09OVFJPTCwKKwkwLAorCTAsCisJS0VZX01VVEUsCS8vIDB4RTAgMHgyMAorCTAsCQkvL1ZLX0xBVU5DSF9BUFAxCisJMCwJCS8vVktfTUVESUFfUExBWV9QQVVTRQorCTAsCisJMCwJCS8vVktfTUVESUFfU1RPUAorCTAsCisJMCwKKwkwLAorCTAsCisJMCwKKwkwLAorCTAsCisJMCwKKwkwLAorCTAsCisJMCwKKwlLRVlfVk9MVU1FVVAsCS8vIDB4RTAgMHgzMAorCTAsCisJMCwJCS8vVktfQlJPV1NFUl9IT01FCisJMCwKKwkwLAorCUtFWV9LUFNMQVNILAkvL1ZLX0RJVklERQorCTAsCisJS0VZX1NZU1JRLAkJLy9WS19TTkFQU0hPVAorCUtFWV9SSUdIVEFMVCwJCS8vVktfUk1FTlUKKwkwLAkJLy9WS19PRU1fTlZfQkFDS0xJR0hUX1VQCisJMCwJCS8vVktfT0VNX05WX0JBQ0tMSUdIVF9ETgorCTAsCQkvL1ZLX09FTV9OVl9CQUNLTElHSFRfQVVUT1RPR0dMRQorCTAsCQkvL1ZLX09FTV9OVl9QT1dFUl9JTkZPCisJMCwJCS8vVktfT0VNX05WX1dJRklfVE9HR0xFCisJMCwJCS8vVktfT0VNX05WX0RJU1BMQVlfU0VMRUNUCisJMCwJCS8vVktfT0VNX05WX0FJUlBMQU5FX1RPR0dMRQorCTAsCQkvLzB4RTAgMHg0MAorCUtFWV9MRUZULAkJLy9WS19PRU1fTlZfUkVTRVJWRUQgICAgaGVucnkrIGZvciBKUCBrZXlib2FyZAorCTAsCQkvL1ZLX09FTV9OVl9SRVNFUlZFRAorCTAsCQkvL1ZLX09FTV9OVl9SRVNFUlZFRAorCTAsCQkvL1ZLX09FTV9OVl9SRVNFUlZFRAorCTAsCQkvL1ZLX09FTV9OVl9SRVNFUlZFRAorCUtFWV9DQU5DRUwsCisJS0VZX0hPTUUsCisJS0VZX1VQLAorCUtFWV9QQUdFVVAsCQkvL1ZLX1BSSU9SCisJMCwKKwlLRVlfTEVGVCwKKwkwLAorCUtFWV9SSUdIVCwKKwkwLAorCUtFWV9FTkQsCisJS0VZX0RPV04sCS8vIDB4RTAgMHg1MAorCUtFWV9QQUdFRE9XTiwJCS8vVktfTkVYVAorCUtFWV9JTlNFUlQsCisJS0VZX0RFTEVURSwKKwkwLAorCTAsCisJMCwKKwkwLAorCTAsCisJMCwKKwkwLAorCUtFWV9MRUZUTUVUQSwJLy9WS19MV0lOCisJMCwJCS8vVktfUldJTgorCUtFWV9FU0MsCS8vVktfQVBQUworCUtFWV9LUE1JTlVTLCAvL2ZvciBwb3dlciBidXR0b24gd29ya2Fyb3VuZAorCTAsIAorCTAsCisJMCwKKwkwLAorCTAsCisJMCwKKwkwLAkJLy9WS19CUk9XU0VSX1NFQVJDSAorCTAsCQkvL1ZLX0JST1dTRVJfRkFWT1JJVEVTCisJMCwJCS8vVktfQlJPV1NFUl9SRUZSRVNICisJMCwJCS8vVktfQlJPV1NFUl9TVE9QCisJMCwJCS8vVktfQlJPV1NFUl9GT1JXQVJECisJMCwJCS8vVktfQlJPV1NFUl9CQUNLCisJMCwJCS8vVktfTEFVTkNIX0FQUDIKKwkwLAkJLy9WS19MQVVOQ0hfTUFJTAorCTAsCQkvL1ZLX0xBVU5DSF9NRURJQV9TRUxFQ1QKK307CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCogY29kZV90YWJzW10gPSB7Y29kZV90YWJfMTAydXMsIGV4dGNvZGVfdGFiX3VzMTAyIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbnZlYy9udmVjLmMgYi9kcml2ZXJzL3N0YWdpbmcvbnZlYy9udmVjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE5NDM2NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9udmVjL252ZWMuYwpAQCAtMCwwICsxLDQ2OCBAQAorLy8gI2RlZmluZSBERUJVRworCisvKiBUb0RvIGxpc3QgKGluY29tcGxldGUsIHVub3JkZXJkKQorCS0gY29udmVydCBtb3VzZSwga2V5Ym9hcmQsIGFuZCBwb3dlciB0byBwbGF0Zm9ybSBkZXZpY2VzCisqLworCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPG1hY2gvaW9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgIm52ZWMuaCIKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgRUNfRElTQUJMRV9FVkVOVF9SRVBPUlRJTkdbXSA9CXsnXHgwNCcsJ1x4MDAnLCdceDAwJ307CitzdGF0aWMgdW5zaWduZWQgY2hhciBFQ19FTkFCTEVfRVZFTlRfUkVQT1JUSU5HW10gPQl7J1x4MDQnLCdceDAwJywnXHgwMSd9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgRUNfR0VUX0ZJUk1XQVJFX1ZFUlNJT05bXSA9CXsnXHgwNycsJ1x4MTUnfTsKKworc3RhdGljIHN0cnVjdCBudmVjX2NoaXAgKm52ZWNfcG93ZXJfaGFuZGxlOworCitpbnQgbnZlY19yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3QgbnZlY19jaGlwICpudmVjLCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorCQkJCXVuc2lnbmVkIGludCBldmVudHMpCit7CisJcmV0dXJuIGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmbnZlYy0+bm90aWZpZXJfbGlzdCwgbmIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobnZlY19yZWdpc3Rlcl9ub3RpZmllcik7CisKK3N0YXRpYyBpbnQgbnZlY19zdGF0dXNfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBldmVudF90eXBlLAorCQkJCXZvaWQgKmRhdGEpCit7CisJdW5zaWduZWQgY2hhciAqbXNnID0gKHVuc2lnbmVkIGNoYXIgKilkYXRhOworCWludCBpOworCisJaWYoZXZlbnRfdHlwZSAhPSBOVkVDX0NOVEwpCisJCXJldHVybiBOT1RJRllfRE9ORTsKKworCXByaW50aygidW5oYW5kbGVkIG1zZyB0eXBlICVsZCwgcGF5bG9hZDogIiwgZXZlbnRfdHlwZSk7CisJZm9yIChpID0gMDsgaSA8IG1zZ1sxXTsgaSsrKQorCQlwcmludGsoIiUweCAiLCBtc2dbaSsyXSk7CisJcHJpbnRrKCJcbiIpOworCisJcmV0dXJuIE5PVElGWV9PSzsKK30KKwordm9pZCBudmVjX3dyaXRlX2FzeW5jKHN0cnVjdCBudmVjX2NoaXAgKm52ZWMsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNob3J0IHNpemUpCit7CisJc3RydWN0IG52ZWNfbXNnICptc2cgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbnZlY19tc2cpLCBHRlBfTk9XQUlUKTsKKworCW1zZy0+ZGF0YSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX05PV0FJVCk7CisJbXNnLT5kYXRhWzBdID0gc2l6ZTsKKwltZW1jcHkobXNnLT5kYXRhICsgMSwgZGF0YSwgc2l6ZSk7CisJbXNnLT5zaXplID0gc2l6ZSArIDE7CisJbXNnLT5wb3MgPSAwOworCUlOSVRfTElTVF9IRUFEKCZtc2ctPm5vZGUpOworCisJbGlzdF9hZGRfdGFpbCgmbXNnLT5ub2RlLCAmbnZlYy0+dHhfZGF0YSk7CisKKwlncGlvX3NldF92YWx1ZShudmVjLT5ncGlvLCAwKTsKK30KK0VYUE9SVF9TWU1CT0wobnZlY193cml0ZV9hc3luYyk7CisKK3N0YXRpYyB2b2lkIG52ZWNfcmVxdWVzdF9tYXN0ZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBudmVjX2NoaXAgKm52ZWMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG52ZWNfY2hpcCwgdHhfd29yayk7CisKKwlpZighbGlzdF9lbXB0eSgmbnZlYy0+dHhfZGF0YSkpIHsKKwkJZ3Bpb19zZXRfdmFsdWUobnZlYy0+Z3BpbywgMCk7CisJfQorfQorCitzdGF0aWMgaW50IHBhcnNlX21zZyhzdHJ1Y3QgbnZlY19jaGlwICpudmVjLCBzdHJ1Y3QgbnZlY19tc2cgKm1zZykKK3sKKwlpbnQgaTsKKworCWlmKChtc2ctPmRhdGFbMF0gJiAxPDw3KSA9PSAwICYmIG1zZy0+ZGF0YVszXSkgeworCQlkZXZfZXJyKG52ZWMtPmRldiwgImVjIHJlc3BvbmRlZCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLCBtc2ctPmRhdGFbMF0sCisJCQltc2ctPmRhdGFbMV0sIG1zZy0+ZGF0YVsyXSwgbXNnLT5kYXRhWzNdKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKChtc2ctPmRhdGFbMF0gPj4gNyApID09IDEgJiYgKG1zZy0+ZGF0YVswXSAmIDB4MGYpID09IDUpCisJeworCQlkZXZfd2FybihudmVjLT5kZXYsICJlYyBzeXN0ZW0gZXZlbnQgIik7CisJCWZvciAoaT0wOyBpIDwgbXNnLT5kYXRhWzFdOyBpKyspCisJCQlkZXZfd2FybihudmVjLT5kZXYsICIlMDJ4ICIsIG1zZy0+ZGF0YVsyK2ldKTsKKwkJZGV2X3dhcm4obnZlYy0+ZGV2LCAiXG4iKTsKKwl9CisKKwlhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmbnZlYy0+bm90aWZpZXJfbGlzdCwgbXNnLT5kYXRhWzBdICYgMHg4ZiwgbXNnLT5kYXRhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG52ZWNfbXNnICpudmVjX3dyaXRlX3N5bmMoc3RydWN0IG52ZWNfY2hpcCAqbnZlYywgdW5zaWduZWQgY2hhciAqZGF0YSwgc2hvcnQgc2l6ZSkKK3sKKwlkb3duKCZudmVjLT5zeW5jX3dyaXRlX211dGV4KTsKKworCW52ZWMtPnN5bmNfd3JpdGVfcGVuZGluZyA9IChkYXRhWzFdIDw8IDgpICsgZGF0YVswXTsKKwludmVjX3dyaXRlX2FzeW5jKG52ZWMsIGRhdGEsIHNpemUpOworCisJZGV2X2RiZyhudmVjLT5kZXYsICJudmVjX3N5bmNfd3JpdGU6IDB4JTA0eFxuIiwgbnZlYy0+c3luY193cml0ZV9wZW5kaW5nKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZudmVjLT5zeW5jX3dyaXRlKTsKKwlkZXZfZGJnKG52ZWMtPmRldiwgIm52ZWNfc3luY193cml0ZTogcG9uZyFcbiIpOworCisJdXAoJm52ZWMtPnN5bmNfd3JpdGVfbXV0ZXgpOworCisJcmV0dXJuIG52ZWMtPmxhc3Rfc3luY19tc2c7Cit9CisKKy8qIFJYIHdvcmtlciAqLworc3RhdGljIHZvaWQgbnZlY19kaXNwYXRjaChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG52ZWNfY2hpcCAqbnZlYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbnZlY19jaGlwLCByeF93b3JrKTsKKwlzdHJ1Y3QgbnZlY19tc2cgKm1zZzsKKworCXdoaWxlKCFsaXN0X2VtcHR5KCZudmVjLT5yeF9kYXRhKSkKKwl7CisJCW1zZyA9IGxpc3RfZmlyc3RfZW50cnkoJm52ZWMtPnJ4X2RhdGEsIHN0cnVjdCBudmVjX21zZywgbm9kZSk7CisJCWxpc3RfZGVsX2luaXQoJm1zZy0+bm9kZSk7CisKKwkJaWYobnZlYy0+c3luY193cml0ZV9wZW5kaW5nID09IChtc2ctPmRhdGFbMl0gPDwgOCkgKyBtc2ctPmRhdGFbMF0pCisJCXsKKwkJCWRldl9kYmcobnZlYy0+ZGV2LCAic3luYyB3cml0ZSBjb21wbGV0ZWQhXG4iKTsKKwkJCW52ZWMtPnN5bmNfd3JpdGVfcGVuZGluZyA9IDA7CisJCQludmVjLT5sYXN0X3N5bmNfbXNnID0gbXNnOworCQkJY29tcGxldGUoJm52ZWMtPnN5bmNfd3JpdGUpOworCQl9IGVsc2UgeworCQkJcGFyc2VfbXNnKG52ZWMsIG1zZyk7CisJCQlpZigoIW1zZykgfHwgKCFtc2ctPmRhdGEpKQorCQkJCWRldl93YXJuKG52ZWMtPmRldiwgImF0dGVtcHQgYWNjZXNzIHplcm8gcG9pbnRlciIpOworCQkJZWxzZSB7CisJCQkJa2ZyZWUobXNnLT5kYXRhKTsKKwkJCQlrZnJlZShtc2cpOworCQkJfQorCQl9CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaTJjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyByZWNlaXZlZDsKKwl1bnNpZ25lZCBjaGFyIHRvX3NlbmQ7CisJc3RydWN0IG52ZWNfbXNnICptc2c7CisJc3RydWN0IG52ZWNfY2hpcCAqbnZlYyA9IChzdHJ1Y3QgbnZlY19jaGlwICopZGV2OworCXVuc2lnbmVkIGNoYXIgKmkyY19yZWdzID0gbnZlYy0+aTJjX3JlZ3M7CisKKwlzdGF0dXMgPSByZWFkbChpMmNfcmVncyArIEkyQ19TTF9TVEFUVVMpOworCisJaWYoIShzdGF0dXMgJiBJMkNfU0xfSVJRKSkKKwl7CisJCWRldl93YXJuKG52ZWMtPmRldiwgIm52ZWMgU3B1cmlvdXMgSVJRXG4iKTsKKwkJLy9ZdXAsIGhhbmRsZWQuIGFodW0uCisJCWdvdG8gaGFuZGxlZDsKKwl9CisJaWYoc3RhdHVzICYgRU5EX1RSQU5TICYmICEoc3RhdHVzICYgUkNWRCkpCisJeworCQkvL1JlZW5hYmxlIElSUSBvbmx5IHdoZW4gZXZlbiBoYXMgYmVlbiBzZW50CisJCS8vcHJpbnRrKCJXcml0ZSBzZXF1ZW5jZSBlbmRlZCAhXG4iKTsKKyAgICAgICAgICAgICAgICAvL3BhcnNlX21zZyhudmVjKTsKKwkJbnZlYy0+c3RhdGUgPSBOVkVDX1dBSVQ7CisJCWlmKG52ZWMtPnJ4LT5zaXplID4gMSkKKwkJeworCQkJbGlzdF9hZGRfdGFpbCgmbnZlYy0+cngtPm5vZGUsICZudmVjLT5yeF9kYXRhKTsKKwkJCXNjaGVkdWxlX3dvcmsoJm52ZWMtPnJ4X3dvcmspOworCQl9IGVsc2UgeworCQkJa2ZyZWUobnZlYy0+cngtPmRhdGEpOworCQkJa2ZyZWUobnZlYy0+cngpOworCQl9CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9IGVsc2UgaWYoc3RhdHVzICYgUk5XKQorCXsKKwkJLy8gV29yayBhcm91bmQgZm9yIEFQMjAgTmV3IFNsYXZlIEh3IEJ1Zy4gR2l2ZSAxdXMgZXh0cmEuCisJCS8vIG52ZWMvc21idXMvbnZlY19pMmNfdHJhbnNwb3J0LmMgaW4gTlZgcyBjcmFwIGZvciByZWZlcmVuY2UKKwkJaWYoc3RhdHVzICYgUkNWRCkKKwkJCXVkZWxheSgzKTsKKworCQlpZihzdGF0dXMgJiBSQ1ZEKQorCQl7CisJCQludmVjLT5zdGF0ZSA9IE5WRUNfV1JJVEU7CisJCQkvL01hc3RlciB3YW50cyBzb21ldGhpbmcgZnJvbSB1cy4gTmV3IGNvbW11bmljYXRpb24KKy8vCQkJZGV2X2RiZyhudmVjLT5kZXYsICJOZXcgcmVhZCBjb21tIVxuIik7CisJCX0gZWxzZSB7CisJCQkvL01hc3RlciB3YW50cyBzb21ldGhpbmcgZnJvbSB1cyBmcm9tIGEgY29tbXVuaWNhdGlvbiB3ZSd2ZSBhbHJlYWR5IHN0YXJ0ZWQKKy8vCQkJZGV2X2RiZyhudmVjLT5kZXYsICJSZWFkIGNvbW0gY29udCAhXG4iKTsKKwkJfQorCQkvL2lmKG1zZ19wb3M8bXNnX3NpemUpIHsKKwkJaWYobGlzdF9lbXB0eSgmbnZlYy0+dHhfZGF0YSkpCisJCXsKKwkJCWRldl9lcnIobnZlYy0+ZGV2LCAibnZlYyBlbXB0eSB0eCAtIHNlbmRpbmcgbm8tb3BcbiIpOworCQkJdG9fc2VuZCA9IDB4OGE7CisJCQludmVjX3dyaXRlX2FzeW5jKG52ZWMsICJceDA3XHgwMiIsIDIpOworLy8JCQl0b19zZW5kID0gMHgwMTsKKwkJfSBlbHNlIHsKKwkJCW1zZyA9IGxpc3RfZmlyc3RfZW50cnkoJm52ZWMtPnR4X2RhdGEsIHN0cnVjdCBudmVjX21zZywgbm9kZSk7CisJCQlpZihtc2ctPnBvcyA8IG1zZy0+c2l6ZSkgeworCQkJCXRvX3NlbmQgPSBtc2ctPmRhdGFbbXNnLT5wb3NdOworCQkJCW1zZy0+cG9zKys7CisJCQl9IGVsc2UgeworCQkJCWRldl9lcnIobnZlYy0+ZGV2LCAibnZlYyBjcmFwISAlZFxuIiwgbXNnLT5zaXplKTsKKwkJCQl0b19zZW5kID0gMHgwMTsKKwkJCX0KKworCQkJaWYobXNnLT5wb3MgPj0gbXNnLT5zaXplKQorCQkJeworCQkJCWxpc3RfZGVsX2luaXQoJm1zZy0+bm9kZSk7CisJCQkJa2ZyZWUobXNnLT5kYXRhKTsKKwkJCQlrZnJlZShtc2cpOworCQkJCXNjaGVkdWxlX3dvcmsoJm52ZWMtPnR4X3dvcmspOworCQkJCW52ZWMtPnN0YXRlID0gTlZFQ19XQUlUOworCQkJfQorCQl9CisJCXdyaXRlbCh0b19zZW5kLCBpMmNfcmVncyArIEkyQ19TTF9SQ1ZEKTsKKworCQlncGlvX3NldF92YWx1ZShudmVjLT5ncGlvLCAxKTsKKworCQlkZXZfZGJnKG52ZWMtPmRldiwgIm52ZWMgc2VudCAleFxuIiwgdG9fc2VuZCk7CisKKwkJZ290byBoYW5kbGVkOworCX0gZWxzZSB7CisJCXJlY2VpdmVkID0gcmVhZGwoaTJjX3JlZ3MgKyBJMkNfU0xfUkNWRCk7CisJCS8vV29ya2Fyb3VuZD8KKwkJaWYoc3RhdHVzICYgUkNWRCkgeworCQkJd3JpdGVsKDAsIGkyY19yZWdzICsgSTJDX1NMX1JDVkQpOworCQkJZ290byBoYW5kbGVkOworCQl9CisKKwkJaWYgKG52ZWMtPnN0YXRlID09IE5WRUNfV0FJVCkKKwkJeworCQkJbnZlYy0+c3RhdGUgPSBOVkVDX1JFQUQ7CisJCQltc2cgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbnZlY19tc2cpLCBHRlBfTk9XQUlUKTsKKwkJCW1zZy0+ZGF0YSA9IGt6YWxsb2MoMzIsIEdGUF9OT1dBSVQpOworCQkJSU5JVF9MSVNUX0hFQUQoJm1zZy0+bm9kZSk7CisJCQludmVjLT5yeCA9IG1zZzsKKwkJfSBlbHNlCisJCQltc2cgPSBudmVjLT5yeDsKKworCQlCVUdfT04obXNnLT5wb3MgPiAzMik7CisKKwkJbXNnLT5kYXRhW21zZy0+cG9zXSA9IHJlY2VpdmVkOworCQltc2ctPnBvcysrOworCQltc2ctPnNpemUgPSBtc2ctPnBvczsKKwkJZGV2X2RiZyhudmVjLT5kZXYsICJHb3QgJTAybHggZnJvbSBNYXN0ZXIgKHBvczogJWQpIVxuIiwgcmVjZWl2ZWQsIG1zZy0+cG9zKTsKKwl9CitoYW5kbGVkOgorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgbnZlY19hZGRfc3ViZGV2KHN0cnVjdCBudmVjX2NoaXAgKm52ZWMsIHN0cnVjdCBudmVjX3N1YmRldiAqc3ViZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisKKwlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKHN1YmRldi0+bmFtZSwgc3ViZGV2LT5pZCk7CisJcGRldi0+ZGV2LnBhcmVudCA9IG52ZWMtPmRldjsKKwlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IHN1YmRldi0+cGxhdGZvcm1fZGF0YTsKKworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOworfQorCitzdGF0aWMgdm9pZCB0ZWdyYV9pbml0X2kyY19zbGF2ZShzdHJ1Y3QgbnZlY19wbGF0Zm9ybV9kYXRhICpwZGF0YSwgdW5zaWduZWQgY2hhciAqaTJjX3JlZ3MsCisJCQkJCXN0cnVjdCBjbGsgKmkyY19jbGspCit7CisJdTMyIHZhbDsKKworCWNsa19lbmFibGUoaTJjX2Nsayk7CisJdGVncmFfcGVyaXBoX3Jlc2V0X2Fzc2VydChpMmNfY2xrKTsKKwl1ZGVsYXkoMik7CisJdGVncmFfcGVyaXBoX3Jlc2V0X2RlYXNzZXJ0KGkyY19jbGspOworCisJd3JpdGVsKHBkYXRhLT5pMmNfYWRkcj4+MSwgaTJjX3JlZ3MgKyBJMkNfU0xfQUREUjEpOworCXdyaXRlbCgwLCBpMmNfcmVncyArIEkyQ19TTF9BRERSMik7CisKKwl3cml0ZWwoMHgxRSwgaTJjX3JlZ3MgKyBJMkNfU0xfREVMQVlfQ09VTlQpOworCXZhbCA9IEkyQ19DTkZHX05FV19NQVNURVJfU0ZNIHwgSTJDX0NORkdfUEFDS0VUX01PREVfRU4gfAorCQkoMHgyIDw8IEkyQ19DTkZHX0RFQk9VTkNFX0NOVF9TSElGVCk7CisJd3JpdGVsKHZhbCwgaTJjX3JlZ3MgKyBJMkNfQ05GRyk7CisJd3JpdGVsKEkyQ19TTF9ORVdMLCBpMmNfcmVncyArIEkyQ19TTF9DTkZHKTsKKworCWNsa19kaXNhYmxlKGkyY19jbGspOworfQorCitzdGF0aWMgdm9pZCBudmVjX3Bvd2VyX29mZih2b2lkKQoreworCW52ZWNfd3JpdGVfYXN5bmMobnZlY19wb3dlcl9oYW5kbGUsIEVDX0RJU0FCTEVfRVZFTlRfUkVQT1JUSU5HLCAzKTsKKwludmVjX3dyaXRlX2FzeW5jKG52ZWNfcG93ZXJfaGFuZGxlLCAiXHgwNFx4MDEiLCAyKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgdGVncmFfbnZlY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCBlcnIsIGksIHJldDsKKwlzdHJ1Y3QgY2xrICppMmNfY2xrOworCXN0cnVjdCBudmVjX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG52ZWNfY2hpcCAqbnZlYzsKKwlzdHJ1Y3QgbnZlY19tc2cgKm1zZzsKKwl1bnNpZ25lZCBjaGFyICppMmNfcmVnczsKKworCW52ZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbnZlY19jaGlwKSwgR0ZQX0tFUk5FTCk7CisJaWYobnZlYyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZXNlcnZlIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBudmVjKTsKKwludmVjLT5kZXYgPSAmcGRldi0+ZGV2OworCW52ZWMtPmdwaW8gPSBwZGF0YS0+Z3BpbzsKKwludmVjLT5pcnEgPSBwZGF0YS0+aXJxOworCisvKgorCWkyY19jbGs9Y2xrX2dldF9zeXMoTlVMTCwgImkyYyIpOworCWlmKElTX0VSUl9PUl9OVUxMKGkyY19jbGspKQorCQlwcmludGsoS0VSTl9FUlIiTm8gc3VjaCBjbG9jayB0ZWdyYS1pMmMuMlxuIik7CisJZWxzZQorCQljbGtfZW5hYmxlKGkyY19jbGspOworKi8KKwlpMmNfcmVncyA9IGlvcmVtYXAocGRhdGEtPmJhc2UsIHBkYXRhLT5zaXplKTsKKwlpZighaTJjX3JlZ3MpIHsKKwkJZGV2X2VycihudmVjLT5kZXYsICJmYWlsZWQgdG8gaW9yZW1hcCByZWdpc3RlcnNcbiIpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwludmVjLT5pMmNfcmVncyA9IGkyY19yZWdzOworCisJaTJjX2NsayA9IGNsa19nZXRfc3lzKHBkYXRhLT5jbG9jaywgTlVMTCk7CisJaWYoSVNfRVJSX09SX05VTEwoaTJjX2NsaykpIHsKKwkJZGV2X2VycihudmVjLT5kZXYsICJmYWlsZWQgdG8gZ2V0IGNsb2NrIHRlZ3JhLWkyYy4yXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJdGVncmFfaW5pdF9pMmNfc2xhdmUocGRhdGEsIGkyY19yZWdzLCBpMmNfY2xrKTsKKworCWVyciA9IHJlcXVlc3RfaXJxKG52ZWMtPmlycSwgaTJjX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgIm52ZWMiLCBudmVjKTsKKwlpZihlcnIpIHsKKwkJZGV2X2VycihudmVjLT5kZXYsICJjb3VsZG4ndCByZXF1ZXN0IGlycSIpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwljbGtfZW5hYmxlKGkyY19jbGspOworCWNsa19zZXRfcmF0ZShpMmNfY2xrLCA4KjgwMDAwKTsKKworCS8qIFNldCB0aGUgZ3BpbyB0byBsb3cgd2hlbiB3ZSd2ZSBnb3Qgc29tZXRoaW5nIHRvIHNheSAqLworCWVyciA9IGdwaW9fcmVxdWVzdChudmVjLT5ncGlvLCAibnZlYyBncGlvIik7CisJaWYoZXJyIDwgMCkKKwkJZGV2X2VycihudmVjLT5kZXYsICJjb3VsZG4ndCByZXF1ZXN0IGdwaW9cbiIpOworCisJdGVncmFfZ3Bpb19lbmFibGUobnZlYy0+Z3Bpbyk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KG52ZWMtPmdwaW8sIDEpOworCWdwaW9fc2V0X3ZhbHVlKG52ZWMtPmdwaW8sIDEpOworCisJQVRPTUlDX0lOSVRfTk9USUZJRVJfSEVBRCgmbnZlYy0+bm90aWZpZXJfbGlzdCk7CisKKwlpbml0X2NvbXBsZXRpb24oJm52ZWMtPnN5bmNfd3JpdGUpOworCXNlbWFfaW5pdCgmbnZlYy0+c3luY193cml0ZV9tdXRleCwgMSk7CisJSU5JVF9MSVNUX0hFQUQoJm52ZWMtPnR4X2RhdGEpOworCUlOSVRfTElTVF9IRUFEKCZudmVjLT5yeF9kYXRhKTsKKwlJTklUX1dPUksoJm52ZWMtPnJ4X3dvcmssIG52ZWNfZGlzcGF0Y2gpOworCUlOSVRfV09SSygmbnZlYy0+dHhfd29yaywgbnZlY19yZXF1ZXN0X21hc3Rlcik7CisKKwkvKiBlbmFibGUgZXZlbnQgcmVwb3J0aW5nICovCisJbnZlY193cml0ZV9hc3luYyhudmVjLCBFQ19FTkFCTEVfRVZFTlRfUkVQT1JUSU5HLAorCQkJCXNpemVvZihFQ19FTkFCTEVfRVZFTlRfUkVQT1JUSU5HKSk7CisKKwludmVjX2tiZF9pbml0KG52ZWMpOworI2lmZGVmIENPTkZJR19TRVJJT19OVkVDX1BTMgorCW52ZWNfcHMyKG52ZWMpOworI2VuZGlmCisKKyAgICAgICAgLyogc2V0dXAgc3ViZGV2cyAqLworCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX3N1YmRldnM7IGkrKykgeworCQlyZXQgPSBudmVjX2FkZF9zdWJkZXYobnZlYywgJnBkYXRhLT5zdWJkZXZzW2ldKTsKKwl9CisKKwludmVjLT5udmVjX3N0YXR1c19ub3RpZmllci5ub3RpZmllcl9jYWxsID0gbnZlY19zdGF0dXNfbm90aWZpZXI7CisJbnZlY19yZWdpc3Rlcl9ub3RpZmllcihudmVjLCAmbnZlYy0+bnZlY19zdGF0dXNfbm90aWZpZXIsIDApOworCisJbnZlY19wb3dlcl9oYW5kbGUgPSBudmVjOworCXBtX3Bvd2VyX29mZiA9IG52ZWNfcG93ZXJfb2ZmOworCisJLyogR2V0IEZpcm13YXJlIFZlcnNpb24gKi8KKwltc2cgPSBudmVjX3dyaXRlX3N5bmMobnZlYywgRUNfR0VUX0ZJUk1XQVJFX1ZFUlNJT04sCisJCXNpemVvZihFQ19HRVRfRklSTVdBUkVfVkVSU0lPTikpOworCisJZGV2X3dhcm4obnZlYy0+ZGV2LCAiZWMgZmlybXdhcmUgdmVyc2lvbiAlMDJ4LiUwMnguJTAyeCAvICUwMnhcbiIsCisJCQltc2ctPmRhdGFbNF0sIG1zZy0+ZGF0YVs1XSwgbXNnLT5kYXRhWzZdLCBtc2ctPmRhdGFbN10pOworCisJa2ZyZWUobXNnLT5kYXRhKTsKKwlrZnJlZShtc2cpOworCisJLyogdW5tdXRlIHNwZWFrZXJzPyAqLworCW52ZWNfd3JpdGVfYXN5bmMobnZlYywgIlx4MGRceDEwXHg1OVx4OTQiLCA0KTsKKworCS8qIGVuYWJsZSBsaWQgc3dpdGNoIGV2ZW50ICovCisJbnZlY193cml0ZV9hc3luYyhudmVjLCAiXHgwMVx4MDFceDAxXHgwMFx4MDBceDAyXHgwMCIsIDcpOworCisJLyogZW5hYmxlIHBvd2VyIGJ1dHRvbiBldmVudCAqLworCW52ZWNfd3JpdGVfYXN5bmMobnZlYywgIlx4MDFceDAxXHgwMVx4MDBceDAwXHg4MFx4MDAiLCA3KTsKKworCXJldHVybiAwOworCitmYWlsZWQ6CisJa2ZyZWUobnZlYyk7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHRlZ3JhX252ZWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJLy8gVE9ETzogdW5yZWdpc3RlcgorCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCisKK3N0YXRpYyBpbnQgdGVncmFfbnZlY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgbnZlY19jaGlwICpudmVjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlkZXZfZGJnKG52ZWMtPmRldiwgInN1c3BlbmRpbmdcbiIpOworCW52ZWNfd3JpdGVfYXN5bmMobnZlYywgRUNfRElTQUJMRV9FVkVOVF9SRVBPUlRJTkcsIDMpOworCW52ZWNfd3JpdGVfYXN5bmMobnZlYywgIlx4MDRceDAyIiwgMik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZWdyYV9udmVjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KSB7CisKKwlzdHJ1Y3QgbnZlY19jaGlwICpudmVjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlkZXZfZGJnKG52ZWMtPmRldiwgInJlc3VtaW5nXG4iKTsKKwludmVjX3dyaXRlX2FzeW5jKG52ZWMsIEVDX0VOQUJMRV9FVkVOVF9SRVBPUlRJTkcsIDMpOworCisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisjZGVmaW5lIHRlZ3JhX252ZWNfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHRlZ3JhX252ZWNfcmVzdW1lIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBudmVjX2RldmljZV9kcml2ZXIgPQoreworCS5wcm9iZSA9IHRlZ3JhX252ZWNfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHRlZ3JhX252ZWNfcmVtb3ZlKSwKKwkuc3VzcGVuZCA9IHRlZ3JhX252ZWNfc3VzcGVuZCwKKwkucmVzdW1lID0gdGVncmFfbnZlY19yZXN1bWUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAibnZlYyIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IHRlZ3JhX252ZWNfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm52ZWNfZGV2aWNlX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHRlZ3JhX252ZWNfaW5pdCk7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOm52ZWMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9udmVjL252ZWMuaCBiL2RyaXZlcnMvc3RhZ2luZy9udmVjL252ZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmQ4MmRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL252ZWMvbnZlYy5oCkBAIC0wLDAgKzEsMTEwIEBACisjaWZuZGVmIF9fTElOVVhfTUZEX05WRUMKKyNkZWZpbmUgX19MSU5VWF9NRkRfTlZFQworCisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CisKK3R5cGVkZWYgZW51bSB7CisJTlZFQ18yQllURVMsCisJTlZFQ18zQllURVMsCisJTlZFQ19WQVJfU0laRQorfSBudmVjX3NpemU7CisKK3R5cGVkZWYgZW51bSB7CisJTk9UX1JFQUxMWSwKKwlZRVMsCisJTk9UX0FUX0FMTCwKK30gaG93X2NhcmU7CisKK3R5cGVkZWYgZW51bSB7CisJTlZFQ19TWVM9MSwKKwlOVkVDX0JBVCwKKwlOVkVDX0tCRCA9IDUsCisJTlZFQ19QUzIsCisJTlZFQ19DTlRMLAorCU5WRUNfS0JfRVZUID0gMHg4MCwKKwlOVkVDX1BTMl9FVlQKK30gbnZlY19ldmVudDsKKwordHlwZWRlZiBlbnVtIHsKKyAgICAgICBOVkVDX1dBSVQsCisgICAgICAgTlZFQ19SRUFELAorICAgICAgIE5WRUNfV1JJVEUKK30gbnZlY19zdGF0ZTsKKworc3RydWN0IG52ZWNfbXNnIHsKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworCXVuc2lnbmVkIHNob3J0IHNpemU7CisJdW5zaWduZWQgc2hvcnQgcG9zOworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKK307CisKK3N0cnVjdCBudmVjX3N1YmRldiB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl2b2lkICpwbGF0Zm9ybV9kYXRhOworCWludCBpZDsKK307CisKK3N0cnVjdCBudmVjX3BsYXRmb3JtX2RhdGEgeworCWludCBudW1fc3ViZGV2czsKKwlpbnQgaTJjX2FkZHI7CisJaW50IGdwaW87CisJaW50IGlycTsKKwlpbnQgYmFzZTsKKwlpbnQgc2l6ZTsKKwljaGFyIGNsb2NrWzE2XTsKKwlzdHJ1Y3QgbnZlY19zdWJkZXYgKnN1YmRldnM7Cit9OworCitzdHJ1Y3QgbnZlY19jaGlwIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJaW50IGdwaW87CisJaW50IGlycTsKKwl1bnNpZ25lZCBjaGFyICppMmNfcmVnczsKKwludmVjX3N0YXRlIHN0YXRlOworCXN0cnVjdCBhdG9taWNfbm90aWZpZXJfaGVhZCBub3RpZmllcl9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgcnhfZGF0YSwgdHhfZGF0YTsKKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbnZlY19zdGF0dXNfbm90aWZpZXI7CisJc3RydWN0IHdvcmtfc3RydWN0IHJ4X3dvcmssIHR4X3dvcms7CisJc3RydWN0IG52ZWNfbXNnICpyeCwgKnR4OworCisvKiBzeW5jIHdyaXRlIHN0dWZmICovCisJc3RydWN0IHNlbWFwaG9yZSBzeW5jX3dyaXRlX211dGV4OworCXN0cnVjdCBjb21wbGV0aW9uIHN5bmNfd3JpdGU7CisJdTE2IHN5bmNfd3JpdGVfcGVuZGluZzsKKwlzdHJ1Y3QgbnZlY19tc2cgKmxhc3Rfc3luY19tc2c7Cit9OworCitleHRlcm4gdm9pZCBudmVjX3dyaXRlX2FzeW5jKHN0cnVjdCBudmVjX2NoaXAgKm52ZWMsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNob3J0IHNpemUpOworCitleHRlcm4gaW50IG52ZWNfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG52ZWNfY2hpcCAqbnZlYywKKwkJIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGludCBldmVudHMpOworCitleHRlcm4gaW50IG52ZWNfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGludCBldmVudHMpOworCitjb25zdCBjaGFyICpudmVjX3NlbmRfbXNnKHVuc2lnbmVkIGNoYXIgKnNyYywgdW5zaWduZWQgY2hhciAqZHN0X3NpemUsIGhvd19jYXJlIGNhcmVfcmVzcCwgdm9pZCAoKnJ0X2hhbmRsZXIpKHVuc2lnbmVkIGNoYXIgKmRhdGEpKTsKKworZXh0ZXJuIGludCBudmVjX3BzMihzdHJ1Y3QgbnZlY19jaGlwICpudmVjKTsKK2V4dGVybiBpbnQgbnZlY19rYmRfaW5pdChzdHJ1Y3QgbnZlY19jaGlwICpudmVjKTsKKworI2RlZmluZSBJMkNfQ05GRwkJCTB4MDAKKyNkZWZpbmUgSTJDX0NORkdfUEFDS0VUX01PREVfRU4JCSgxPDwxMCkKKyNkZWZpbmUgSTJDX0NORkdfTkVXX01BU1RFUl9TRk0JCSgxPDwxMSkKKyNkZWZpbmUgSTJDX0NORkdfREVCT1VOQ0VfQ05UX1NISUZUCTEyCisKKyNkZWZpbmUgSTJDX1NMX0NORkcJCTB4MjAKKyNkZWZpbmUgSTJDX1NMX05FV0wJCSgxPDwyKQorI2RlZmluZSBJMkNfU0xfTkFDSwkJKDE8PDEpCisjZGVmaW5lIEkyQ19TTF9SRVNQCQkoMTw8MCkKKyNkZWZpbmUgSTJDX1NMX0lSUQkJKDE8PDMpCisjZGVmaW5lIEVORF9UUkFOUwkJKDE8PDQpCisjZGVmaW5lIFJDVkQJCQkoMTw8MikKKyNkZWZpbmUgUk5XCQkJKDE8PDEpCisKKyNkZWZpbmUgSTJDX1NMX1JDVkQJCTB4MjQKKyNkZWZpbmUgSTJDX1NMX1NUQVRVUwkJMHgyOAorI2RlZmluZSBJMkNfU0xfQUREUjEJCTB4MmMKKyNkZWZpbmUgSTJDX1NMX0FERFIyCQkweDMwCisjZGVmaW5lIEkyQ19TTF9ERUxBWV9DT1VOVAkweDNjCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL252ZWMvbnZlY19rYmQuYyBiL2RyaXZlcnMvc3RhZ2luZy9udmVjL252ZWNfa2JkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE5ODUwNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9udmVjL252ZWNfa2JkLmMKQEAgLTAsMCArMSwxMjIgQEAKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgIm52ZWMta2V5dGFibGUuaCIKKyNpbmNsdWRlICJudmVjLmgiCisKKyNkZWZpbmUgQUNLX0tCRF9FVkVOVCB7J1x4MDUnLCdceGVkJywnXHgwMSd9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGtleWNvZGVzW0FSUkFZX1NJWkUoY29kZV90YWJfMTAydXMpCisJCQkrIEFSUkFZX1NJWkUoZXh0Y29kZV90YWJfdXMxMDIpXTsKKworc3RydWN0IG52ZWNfa2V5cyB7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CisJc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG5vdGlmaWVyOworCXN0cnVjdCBudmVjX2NoaXAgKm52ZWM7Cit9OworCitzdGF0aWMgc3RydWN0IG52ZWNfa2V5cyBrZXlzX2RldjsKKworc3RhdGljIGludCBudmVjX2tleXNfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKKwkJCQl1bnNpZ25lZCBsb25nIGV2ZW50X3R5cGUsIHZvaWQgKmRhdGEpCit7CisJaW50IGNvZGUsIHN0YXRlOworCXVuc2lnbmVkIGNoYXIgKm1zZyA9ICh1bnNpZ25lZCBjaGFyICopZGF0YTsKKworCWlmIChldmVudF90eXBlID09IE5WRUNfS0JfRVZUKSB7CisJCW52ZWNfc2l6ZSBfc2l6ZSA9IChtc2dbMF0gJiAoMyA8PCA1KSkgPj4gNTsKKworLyogcG93ZXIgb24vb2ZmIGJ1dHRvbiAqLworCQlpZihfc2l6ZSA9PSBOVkVDX1ZBUl9TSVpFKQorCQkJcmV0dXJuIE5PVElGWV9TVE9QOworCisJCWlmKF9zaXplID09IE5WRUNfM0JZVEVTKQorCQkJbXNnKys7CisKKwkJY29kZSA9IG1zZ1sxXSAmIDB4N2Y7CisJCXN0YXRlID0gbXNnWzFdICYgMHg4MDsKKworCQlpbnB1dF9yZXBvcnRfa2V5KGtleXNfZGV2LmlucHV0LCBjb2RlX3RhYnNbX3NpemVdW2NvZGVdLCAhc3RhdGUpOworCQlpbnB1dF9zeW5jKGtleXNfZGV2LmlucHV0KTsKKworCQlyZXR1cm4gTk9USUZZX1NUT1A7CisJfQorCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgaW50IG52ZWNfa2JkX2V2ZW50KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdW5zaWduZWQgaW50IHR5cGUsCisJCQkJdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZltdID0gQUNLX0tCRF9FVkVOVDsKKwlzdHJ1Y3QgbnZlY19jaGlwICpudmVjID0ga2V5c19kZXYubnZlYzsKKworCWlmKHR5cGU9PUVWX1JFUCkKKwkJcmV0dXJuIDA7CisKKwlpZih0eXBlIT1FVl9MRUQpCisJCXJldHVybiAtMTsKKworCWlmKGNvZGUhPUxFRF9DQVBTTCkKKwkJcmV0dXJuIC0xOworCisJYnVmWzJdID0gISF2YWx1ZTsKKwludmVjX3dyaXRlX2FzeW5jKG52ZWMsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBfX2luaXQgbnZlY19rYmRfaW5pdChzdHJ1Y3QgbnZlY19jaGlwICpudmVjKQoreworCWludCBpLCBqLCBlcnI7CisJc3RydWN0IGlucHV0X2RldiAqaWRldjsKKworCWogPSAwOworCisJZm9yKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb2RlX3RhYl8xMDJ1cyk7ICsraSkKKwkJa2V5Y29kZXNbaisrXSA9IGNvZGVfdGFiXzEwMnVzW2ldOworCisJZm9yKGkgPSAwOyBpIDwgQVJSQVlfU0laRShleHRjb2RlX3RhYl91czEwMik7ICsraSkKKwkJa2V5Y29kZXNbaisrXT1leHRjb2RlX3RhYl91czEwMltpXTsKKworCWlkZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZGV2LT5uYW1lID0gIlRlZ3JhIG52ZWMga2V5Ym9hcmQiOworCWlkZXYtPnBoeXMgPSAiaTJjM19zbGF2ZS9udmVjIjsKKwlpZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9SRVApIHwgQklUX01BU0soRVZfTEVEKTsKKwlpZGV2LT5sZWRiaXRbMF0gPSBCSVRfTUFTSyhMRURfQ0FQU0wpOworCWlkZXYtPmV2ZW50ID0gbnZlY19rYmRfZXZlbnQ7CisJaWRldi0+a2V5Y29kZSA9IGtleWNvZGVzOworCWlkZXYtPmtleWNvZGVzaXplID0gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpOworCWlkZXYtPmtleWNvZGVtYXggPSBBUlJBWV9TSVpFKGtleWNvZGVzKTsKKworCWZvciggaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGtleWNvZGVzKTsgKytpKQorCQlzZXRfYml0KGtleWNvZGVzW2ldLCBpZGV2LT5rZXliaXQpOworCisJY2xlYXJfYml0KDAsIGlkZXYtPmtleWJpdCk7CisJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlkZXYpOworCWlmKGVycikKKwkJZ290byBmYWlsOworCisJa2V5c19kZXYuaW5wdXQgPSBpZGV2OworCWtleXNfZGV2Lm5vdGlmaWVyLm5vdGlmaWVyX2NhbGwgPSBudmVjX2tleXNfbm90aWZpZXI7CisJa2V5c19kZXYubnZlYyA9IG52ZWM7CisJbnZlY19yZWdpc3Rlcl9ub3RpZmllcihudmVjLCAma2V5c19kZXYubm90aWZpZXIsIDApOworCisJLyogRW5hYmxlIGtleWJvYXJkICovCisJbnZlY193cml0ZV9hc3luYyhudmVjLCAiXHgwNVx4ZjQiLCAyKTsKKworCS8qIGtleWJvYXJkIHJlc2V0PyAqLworCW52ZWNfd3JpdGVfYXN5bmMobnZlYywgIlx4MDVceDAzXHgwMVx4MDEiLCA0KTsKKwludmVjX3dyaXRlX2FzeW5jKG52ZWMsICJceDA1XHgwNFx4MDEiLCAzKTsKKwludmVjX3dyaXRlX2FzeW5jKG52ZWMsICJceDA2XHgwMVx4ZmZceDAzIiwgNCk7CisvKglGSVhNRQorCXdhaXQgdW50aWwga2V5Ym9hcmQgcmVzZXQgaXMgZmluaXNoZWQKKwlvciB1bnRpbCB3ZSBoYXZlIGEgc3luYyB3cml0ZSAqLworCW1kZWxheSgxMDAwKTsKKworCXJldHVybiAwOworCitmYWlsOgorCWlucHV0X2ZyZWVfZGV2aWNlKGlkZXYpOworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbnZlYy9udmVjX3Bvd2VyLmMgYi9kcml2ZXJzL3N0YWdpbmcvbnZlYy9udmVjX3Bvd2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYxNjRhZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9udmVjL252ZWNfcG93ZXIuYwpAQCAtMCwwICsxLDQxOCBAQAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3Bvd2VyX3N1cHBseS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgIm52ZWMuaCIKKworc3RydWN0IG52ZWNfcG93ZXIKK3sKKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbm90aWZpZXI7CisJc3RydWN0IGRlbGF5ZWRfd29yayBwb2xsZXI7CisJc3RydWN0IG52ZWNfY2hpcCAqbnZlYzsKKwlpbnQgb247CisJaW50IGJhdF9wcmVzZW50OworCWludCBiYXRfc3RhdHVzOworCWludCBiYXRfdm9sdGFnZV9ub3c7CisJaW50IGJhdF9jdXJyZW50X25vdzsKKwlpbnQgYmF0X2N1cnJlbnRfYXZnOworCWludCB0aW1lX3JlbWFpbjsKKwlpbnQgY2hhcmdlX2Z1bGxfZGVzaWduOworCWludCBjaGFyZ2VfbGFzdF9mdWxsOworCWludCBjcml0aWNhbF9jYXBhY2l0eTsKKwlpbnQgY2FwYWNpdHlfcmVtYWluOworCWludCBiYXRfdGVtcGVyYXR1cmU7CisJaW50IGJhdF9jYXA7CisJaW50IGJhdF90eXBlX2VudW07CisJY2hhciBiYXRfbWFudVszMF07CisJY2hhciBiYXRfbW9kZWxbMzBdOworCWNoYXIgYmF0X3R5cGVbMzBdOworfTsKKworZW51bSB7CisJU0xPVF9TVEFUVVMsCisJVk9MVEFHRSwKKwlUSU1FX1JFTUFJTklORywKKwlDVVJSRU5ULAorCUFWRVJBR0VfQ1VSUkVOVCwKKwlBVkVSQUdJTkdfVElNRV9JTlRFUlZBTCwKKwlDQVBBQ0lUWV9SRU1BSU5JTkcsCisJTEFTVF9GVUxMX0NIQVJHRV9DQVBBQ0lUWSwKKwlERVNJR05fQ0FQQUNJVFksCisJQ1JJVElDQUxfQ0FQQUNJVFksCisJVEVNUEVSQVRVUkUsCisJTUFOVUZBQ1RVUkVSLAorCU1PREVMLAorCVRZUEUsCit9OworCitlbnVtIHsKKwlBQywKKwlCQVQsCit9OworCitzdHJ1Y3QgYmF0X3Jlc3BvbnNlIHsKKwl1OCBldmVudF90eXBlOworCXU4IGxlbmd0aDsKKwl1OCBzdWJfdHlwZTsKKwl1OCBzdGF0dXM7CisJdW5pb24geyAvKiBwYXlsb2FkICovCisJCWNoYXIgcGxjWzMwXTsKKwkJdTE2IHBsdTsKKwkJczE2IHBsczsKKwl9OworfTsKKworc3RhdGljIHN0cnVjdCBwb3dlcl9zdXBwbHkgbnZlY19iYXRfcHN5Oworc3RhdGljIHN0cnVjdCBwb3dlcl9zdXBwbHkgbnZlY19wc3k7CisKK3N0YXRpYyBpbnQgbnZlY19wb3dlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorCQkJCSB1bnNpZ25lZCBsb25nIGV2ZW50X3R5cGUsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG52ZWNfcG93ZXIgKnBvd2VyID0gY29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgbnZlY19wb3dlciwgbm90aWZpZXIpOworCXN0cnVjdCBiYXRfcmVzcG9uc2UgKnJlcyA9IChzdHJ1Y3QgYmF0X3Jlc3BvbnNlICopZGF0YTsKKworCWlmIChldmVudF90eXBlICE9IE5WRUNfU1lTKQorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisKKwlpZihyZXMtPnN1Yl90eXBlID09IDApCisJeworCQlpZiAocG93ZXItPm9uICE9IHJlcy0+cGx1KQorCQl7CisJCQlwb3dlci0+b24gPSByZXMtPnBsdTsKKwkJCXBvd2VyX3N1cHBseV9jaGFuZ2VkKCZudmVjX3BzeSk7CisJCX0KKwkJcmV0dXJuIE5PVElGWV9TVE9QOworCX0KKwlyZXR1cm4gTk9USUZZX09LOworfQorCitzdGF0aWMgY29uc3QgaW50IGJhdF9pbml0W10gPQoreworCUxBU1RfRlVMTF9DSEFSR0VfQ0FQQUNJVFksIERFU0lHTl9DQVBBQ0lUWSwgQ1JJVElDQUxfQ0FQQUNJVFksCisJTUFOVUZBQ1RVUkVSLCBNT0RFTCwgVFlQRSwKK307CisKK3N0YXRpYyB2b2lkIGdldF9iYXRfbWZnX2RhdGEoc3RydWN0IG52ZWNfcG93ZXIgKnBvd2VyKQoreworCWludCBpOworCWNoYXIgYnVmW10gPSB7ICdceDAyJywgJ1x4MDAnIH07CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShiYXRfaW5pdCk7IGkrKykKKwl7CisJCWJ1ZlsxXSA9IGJhdF9pbml0W2ldOworCQludmVjX3dyaXRlX2FzeW5jKHBvd2VyLT5udmVjLCBidWYsIDIpOworCX0KK30KKworc3RhdGljIGludCBudmVjX3Bvd2VyX2JhdF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorCQkJCSB1bnNpZ25lZCBsb25nIGV2ZW50X3R5cGUsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG52ZWNfcG93ZXIgKnBvd2VyID0gY29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgbnZlY19wb3dlciwgbm90aWZpZXIpOworCXN0cnVjdCBiYXRfcmVzcG9uc2UgKnJlcyA9IChzdHJ1Y3QgYmF0X3Jlc3BvbnNlICopZGF0YTsKKwlpbnQgc3RhdHVzX2NoYW5nZWQgPSAwOworCisJaWYgKGV2ZW50X3R5cGUgIT0gTlZFQ19CQVQpCisJCXJldHVybiBOT1RJRllfRE9ORTsKKworCXN3aXRjaChyZXMtPnN1Yl90eXBlKQorCXsKKwkJY2FzZSBTTE9UX1NUQVRVUzoKKwkJCWlmIChyZXMtPnBsY1swXSAmIDEpCisJCQl7CisJCQkJaWYgKHBvd2VyLT5iYXRfcHJlc2VudCA9PSAwKQorCQkJCXsKKwkJCQkJc3RhdHVzX2NoYW5nZWQgPSAxOworCQkJCQlnZXRfYmF0X21mZ19kYXRhKHBvd2VyKTsKKwkJCQl9CisKKwkJCQlwb3dlci0+YmF0X3ByZXNlbnQgPSAxOworCisJCQkJc3dpdGNoICgocmVzLT5wbGNbMF0gPj4gMSkgJiAzKQorCQkJCXsKKwkJCQkJY2FzZSAwOgorCQkJCQkJcG93ZXItPmJhdF9zdGF0dXMgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX05PVF9DSEFSR0lORzsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDE6CisJCQkJCQlwb3dlci0+YmF0X3N0YXR1cyA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfQ0hBUkdJTkc7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSAyOgorCQkJCQkJcG93ZXItPmJhdF9zdGF0dXMgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX0RJU0NIQVJHSU5HOworCQkJCQkJYnJlYWs7CisJCQkJCWRlZmF1bHQ6CisJCQkJCQlwb3dlci0+YmF0X3N0YXR1cyA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfVU5LTk9XTjsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmIChwb3dlci0+YmF0X3ByZXNlbnQgPT0gMSkKKwkJCQkJc3RhdHVzX2NoYW5nZWQgPSAxOworCisJCQkJcG93ZXItPmJhdF9wcmVzZW50ID0gMDsKKwkJCQlwb3dlci0+YmF0X3N0YXR1cyA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfVU5LTk9XTjsKKwkJCX0KKwkJCXBvd2VyLT5iYXRfY2FwID0gcmVzLT5wbGNbMV07CisJCQlpZiAoc3RhdHVzX2NoYW5nZWQpCisJCQkJcG93ZXJfc3VwcGx5X2NoYW5nZWQoJm52ZWNfYmF0X3BzeSk7CisJCQlicmVhazsKKwkJY2FzZSBWT0xUQUdFOgorCQkJcG93ZXItPmJhdF92b2x0YWdlX25vdyA9IHJlcy0+cGx1ICogMTAwMDsKKwkJCWJyZWFrOworCQljYXNlIFRJTUVfUkVNQUlOSU5HOgorCQkJcG93ZXItPnRpbWVfcmVtYWluID0gcmVzLT5wbHUgKiAzNjAwOworCQkJYnJlYWs7CisJCWNhc2UgQ1VSUkVOVDoKKwkJCXBvd2VyLT5iYXRfY3VycmVudF9ub3cgPSByZXMtPnBscyAqIDEwMDA7CisJCQlicmVhazsKKwkJY2FzZSBBVkVSQUdFX0NVUlJFTlQ6CisJCQlwb3dlci0+YmF0X2N1cnJlbnRfYXZnID0gcmVzLT5wbHMgKiAxMDAwOworCQkJYnJlYWs7CisJCWNhc2UgQ0FQQUNJVFlfUkVNQUlOSU5HOgorCQkJcG93ZXItPmNhcGFjaXR5X3JlbWFpbiA9IHJlcy0+cGx1ICogMTAwMDsKKwkJCWJyZWFrOworCQljYXNlIExBU1RfRlVMTF9DSEFSR0VfQ0FQQUNJVFk6CisJCQlwb3dlci0+Y2hhcmdlX2xhc3RfZnVsbCA9IHJlcy0+cGx1ICogMTAwMDsKKwkJCWJyZWFrOworCQljYXNlIERFU0lHTl9DQVBBQ0lUWToKKwkJCXBvd2VyLT5jaGFyZ2VfZnVsbF9kZXNpZ24gPSByZXMtPnBsdSAqIDEwMDA7CisJCQlicmVhazsKKwkJY2FzZSBDUklUSUNBTF9DQVBBQ0lUWToKKwkJCXBvd2VyLT5jcml0aWNhbF9jYXBhY2l0eSA9IHJlcy0+cGx1ICogMTAwMDsKKwkJCWJyZWFrOworCQljYXNlIFRFTVBFUkFUVVJFOgorCQkJcG93ZXItPmJhdF90ZW1wZXJhdHVyZSA9IHJlcy0+cGx1IC0gMjczMjsKKwkJCWJyZWFrOworCQljYXNlIE1BTlVGQUNUVVJFUjoKKwkJCW1lbWNweShwb3dlci0+YmF0X21hbnUsICZyZXMtPnBsYywgcmVzLT5sZW5ndGgtMik7CisJCQlwb3dlci0+YmF0X21vZGVsW3Jlcy0+bGVuZ3RoLTJdID0gJ1wwJzsKKwkJCWJyZWFrOworCQljYXNlIE1PREVMOgorCQkJbWVtY3B5KHBvd2VyLT5iYXRfbW9kZWwsICZyZXMtPnBsYywgcmVzLT5sZW5ndGgtMik7CisJCQlwb3dlci0+YmF0X21vZGVsW3Jlcy0+bGVuZ3RoLTJdID0gJ1wwJzsKKwkJCWJyZWFrOworCQljYXNlIFRZUEU6CisJCQltZW1jcHkocG93ZXItPmJhdF90eXBlLCAmcmVzLT5wbGMsIHJlcy0+bGVuZ3RoLTIpOworCQkJcG93ZXItPmJhdF90eXBlW3Jlcy0+bGVuZ3RoLTJdID0gJ1wwJzsKKwkJCS8qIHRoaXMgZGlmZmVycyBhIGxpdHRsZSBmcm9tIHRoZSBzcGVjCisJCQkgICBmaWxsIGluIG1vcmUgaWYgeW91IGZpbmQgc29tZSAqLworCQkJaWYgKCFzdHJuY21wKHBvd2VyLT5iYXRfdHlwZSwgIkxpIiwgMzApKQorCQkJCXBvd2VyLT5iYXRfdHlwZV9lbnVtID0gUE9XRVJfU1VQUExZX1RFQ0hOT0xPR1lfTElPTjsKKwkJCWVsc2UKKwkJCQlwb3dlci0+YmF0X3R5cGVfZW51bSA9IFBPV0VSX1NVUFBMWV9URUNITk9MT0dZX1VOS05PV047CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiBOT1RJRllfU1RPUDsKKwl9CisKKwlyZXR1cm4gTk9USUZZX1NUT1A7Cit9CisKK3N0YXRpYyBpbnQgbnZlY19wb3dlcl9nZXRfcHJvcGVydHkoc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5LAorCQkJCWVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5IHBzcCwKKwkJCQl1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQoreworCXN0cnVjdCBudmVjX3Bvd2VyICpwb3dlciA9IGRldl9nZXRfZHJ2ZGF0YShwc3ktPmRldi0+cGFyZW50KTsKKwlzd2l0Y2ggKHBzcCkgeworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfT05MSU5FOgorCQl2YWwtPmludHZhbCA9IHBvd2VyLT5vbjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG52ZWNfYmF0dGVyeV9nZXRfcHJvcGVydHkoc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5LAorCQkJCWVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5IHBzcCwKKwkJCQl1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQoreworCXN0cnVjdCBudmVjX3Bvd2VyICpwb3dlciA9IGRldl9nZXRfZHJ2ZGF0YShwc3ktPmRldi0+cGFyZW50KTsKKworCXN3aXRjaChwc3ApCisJeworCQljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1NUQVRVUzoKKwkJCXZhbC0+aW50dmFsID0gcG93ZXItPmJhdF9zdGF0dXM7CisJCQlicmVhazsKKwkJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DQVBBQ0lUWToKKwkJCXZhbC0+aW50dmFsID0gcG93ZXItPmJhdF9jYXA7CisJCQlicmVhazsKKwkJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9QUkVTRU5UOgorCQkJdmFsLT5pbnR2YWwgPSBwb3dlci0+YmF0X3ByZXNlbnQ7CisJCQlicmVhazsKKwkJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVzoKKwkJCXZhbC0+aW50dmFsID0gcG93ZXItPmJhdF92b2x0YWdlX25vdzsKKwkJCWJyZWFrOworCQljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRfTk9XOgorCQkJdmFsLT5pbnR2YWwgPSBwb3dlci0+YmF0X2N1cnJlbnRfbm93OworCQkJYnJlYWs7CisJCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfQ1VSUkVOVF9BVkc6CisJCQl2YWwtPmludHZhbCA9IHBvd2VyLT5iYXRfY3VycmVudF9hdmc7CisJCQlicmVhazsKKwkJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9USU1FX1RPX0VNUFRZX05PVzoKKwkJCXZhbC0+aW50dmFsID0gcG93ZXItPnRpbWVfcmVtYWluOworCQkJYnJlYWs7CisJCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfQ0hBUkdFX0ZVTExfREVTSUdOOgorCQkJdmFsLT5pbnR2YWwgPSBwb3dlci0+Y2hhcmdlX2Z1bGxfZGVzaWduOworCQkJYnJlYWs7CisJCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfQ0hBUkdFX0ZVTEw6CisJCQl2YWwtPmludHZhbCA9IHBvd2VyLT5jaGFyZ2VfbGFzdF9mdWxsOworCQkJYnJlYWs7CisJCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfQ0hBUkdFX0VNUFRZOgorCQkJdmFsLT5pbnR2YWwgPSBwb3dlci0+Y3JpdGljYWxfY2FwYWNpdHk7CisJCQlicmVhazsKKwkJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DSEFSR0VfTk9XOgorCQkJdmFsLT5pbnR2YWwgPSBwb3dlci0+Y2FwYWNpdHlfcmVtYWluOworCQkJYnJlYWs7CisJCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfVEVNUDoKKwkJCXZhbC0+aW50dmFsID0gcG93ZXItPmJhdF90ZW1wZXJhdHVyZTsKKwkJCWJyZWFrOworCQljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX01BTlVGQUNUVVJFUjoKKwkJCXZhbC0+c3RydmFsID0gcG93ZXItPmJhdF9tYW51OworCQkJYnJlYWs7CisJCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfTU9ERUxfTkFNRToKKwkJCXZhbC0+c3RydmFsID0gcG93ZXItPmJhdF9tb2RlbDsKKwkJCWJyZWFrOworCQljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1RFQ0hOT0xPR1k6CisJCQl2YWwtPmludHZhbCA9IHBvd2VyLT5iYXRfdHlwZV9lbnVtOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgbnZlY19wb3dlcl9wcm9wc1tdID0geworCVBPV0VSX1NVUFBMWV9QUk9QX09OTElORSwKK307CisKK3N0YXRpYyBlbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBudmVjX2JhdHRlcnlfcHJvcHNbXSA9IHsKKwlQT1dFUl9TVVBQTFlfUFJPUF9TVEFUVVMsCisJUE9XRVJfU1VQUExZX1BST1BfUFJFU0VOVCwKKwlQT1dFUl9TVVBQTFlfUFJPUF9DQVBBQ0lUWSwKKwlQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVywKKwlQT1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX05PVywKKyNpZmRlZiBFQ19GVUxMX0RJQUcKKwlQT1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX0FWRywKKwlQT1dFUl9TVVBQTFlfUFJPUF9URU1QLAorCVBPV0VSX1NVUFBMWV9QUk9QX1RJTUVfVE9fRU1QVFlfTk9XLAorI2VuZGlmCisJUE9XRVJfU1VQUExZX1BST1BfQ0hBUkdFX0ZVTExfREVTSUdOLAorCVBPV0VSX1NVUFBMWV9QUk9QX0NIQVJHRV9GVUxMLAorCVBPV0VSX1NVUFBMWV9QUk9QX0NIQVJHRV9FTVBUWSwKKwlQT1dFUl9TVVBQTFlfUFJPUF9DSEFSR0VfTk9XLAorCVBPV0VSX1NVUFBMWV9QUk9QX01BTlVGQUNUVVJFUiwKKwlQT1dFUl9TVVBQTFlfUFJPUF9NT0RFTF9OQU1FLAorCVBPV0VSX1NVUFBMWV9QUk9QX1RFQ0hOT0xPR1ksCit9OworCitzdGF0aWMgY2hhciAqbnZlY19wb3dlcl9zdXBwbGllZF90b1tdID0geworCSJiYXR0ZXJ5IiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcG93ZXJfc3VwcGx5IG52ZWNfYmF0X3BzeSA9IHsKKwkubmFtZQkJPSAiYmF0dGVyeSIsCisJLnR5cGUJCT0gUE9XRVJfU1VQUExZX1RZUEVfQkFUVEVSWSwKKwkucHJvcGVydGllcwk9IG52ZWNfYmF0dGVyeV9wcm9wcywKKwkubnVtX3Byb3BlcnRpZXMJPSBBUlJBWV9TSVpFKG52ZWNfYmF0dGVyeV9wcm9wcyksCisJLmdldF9wcm9wZXJ0eQk9IG52ZWNfYmF0dGVyeV9nZXRfcHJvcGVydHksCit9OworCitzdGF0aWMgc3RydWN0IHBvd2VyX3N1cHBseSBudmVjX3BzeSA9IHsKKwkubmFtZSA9ICJhYyIsCisJLnR5cGUgPSBQT1dFUl9TVVBQTFlfVFlQRV9NQUlOUywKKwkuc3VwcGxpZWRfdG8gPSBudmVjX3Bvd2VyX3N1cHBsaWVkX3RvLAorCS5udW1fc3VwcGxpY2FudHMgPSBBUlJBWV9TSVpFKG52ZWNfcG93ZXJfc3VwcGxpZWRfdG8pLAorCS5wcm9wZXJ0aWVzID0gbnZlY19wb3dlcl9wcm9wcywKKwkubnVtX3Byb3BlcnRpZXMgPSBBUlJBWV9TSVpFKG52ZWNfcG93ZXJfcHJvcHMpLAorCS5nZXRfcHJvcGVydHkgPSBudmVjX3Bvd2VyX2dldF9wcm9wZXJ0eSwKK307CisKK3N0YXRpYyBpbnQgY291bnRlciA9IDA7CitzdGF0aWMgaW50IGNvbnN0IGJhdF9pdGVyW10gPQoreworCVNMT1RfU1RBVFVTLCBWT0xUQUdFLCBDVVJSRU5ULCBDQVBBQ0lUWV9SRU1BSU5JTkcsCisjaWZkZWYgRUNfRlVMTF9ESUFHCisJQVZFUkFHRV9DVVJSRU5ULCBURU1QRVJBVFVSRSwgVElNRV9SRU1BSU5JTkcsCisjZW5kaWYKK307CisKK3N0YXRpYyB2b2lkIG52ZWNfcG93ZXJfcG9sbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJY2hhciBidWZbXSA9IHsgJ1x4MDEnLCAnXHgwMCcgfTsKKwlzdHJ1Y3QgbnZlY19wb3dlciAqcG93ZXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG52ZWNfcG93ZXIsCisJCSBwb2xsZXIud29yayk7CisKKwlpZiAoY291bnRlciA+PSBBUlJBWV9TSVpFKGJhdF9pdGVyKSkKKwkJY291bnRlciA9IDA7CisKKy8qIEFDIHN0YXR1cyB2aWEgc3lzIHJlcSAqLworCW52ZWNfd3JpdGVfYXN5bmMocG93ZXItPm52ZWMsIGJ1ZiwgMik7CisJbXNsZWVwKDEwMCk7CisKKy8qIHNlbGVjdCBhIGJhdHRlcnkgcmVxdWVzdCBmdW5jdGlvbiB2aWEgcm91bmQgcm9iaW4KKyAgIGRvaW5nIGl0IGFsbCBhdCBvbmNlIHNlZW1zIHRvIG92ZXJsb2FkIHRoZSBwb3dlciBzdXBwbHkgKi8KKwlidWZbMF0gPSAnXHgwMic7IC8qIGJhdHRlcnkgKi8KKyAgICAgICAgYnVmWzFdID0gYmF0X2l0ZXJbY291bnRlcisrXTsKKwludmVjX3dyaXRlX2FzeW5jKHBvd2VyLT5udmVjLCBidWYsIDIpOworCisvLwlwcmludGsoIiUwMnggJTAyeFxuIiwgYnVmWzBdLCBidWZbMV0pOworCisJc2NoZWR1bGVfZGVsYXllZF93b3JrKHRvX2RlbGF5ZWRfd29yayh3b3JrKSwgbXNlY3NfdG9famlmZmllcyg1MDAwKSk7Cit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBudmVjX3Bvd2VyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5OworCXN0cnVjdCBudmVjX3Bvd2VyICpwb3dlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBudmVjX3Bvd2VyKSwgR0ZQX05PV0FJVCk7CisJc3RydWN0IG52ZWNfY2hpcCAqbnZlYyA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKKworCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBwb3dlcik7CisJcG93ZXItPm52ZWMgPSBudmVjOworCisJc3dpdGNoIChwZGV2LT5pZCkgeworCWNhc2UgQUM6CisJCXBzeSA9ICZudmVjX3BzeTsKKworCQlwb3dlci0+bm90aWZpZXIubm90aWZpZXJfY2FsbCA9IG52ZWNfcG93ZXJfbm90aWZpZXI7CisKKwkJSU5JVF9ERUxBWUVEX1dPUksoJnBvd2VyLT5wb2xsZXIsIG52ZWNfcG93ZXJfcG9sbCk7CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcG93ZXItPnBvbGxlciwgbXNlY3NfdG9famlmZmllcyg1MDAwKSk7CisJCWJyZWFrOworCWNhc2UgQkFUOgorCQlwc3kgPSAmbnZlY19iYXRfcHN5OworCisgICAgICAgICAgICAgICAgcG93ZXItPm5vdGlmaWVyLm5vdGlmaWVyX2NhbGwgPSBudmVjX3Bvd2VyX2JhdF9ub3RpZmllcjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJa2ZyZWUocG93ZXIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwludmVjX3JlZ2lzdGVyX25vdGlmaWVyKG52ZWMsICZwb3dlci0+bm90aWZpZXIsIE5WRUNfU1lTKTsKKworCWlmIChwZGV2LT5pZCA9PSBCQVQpCisJCWdldF9iYXRfbWZnX2RhdGEocG93ZXIpOworCisJcmV0dXJuIHBvd2VyX3N1cHBseV9yZWdpc3RlcigmcGRldi0+ZGV2LCBwc3kpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBudmVjX3Bvd2VyX2RyaXZlciA9IHsKKwkucHJvYmUgPSBudmVjX3Bvd2VyX3Byb2JlLAorLy8JLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKG52ZWNfcG93ZXJfcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJudmVjLXBvd2VyIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgbnZlY19wb3dlcl9pbml0KHZvaWQpIAoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm52ZWNfcG93ZXJfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobnZlY19wb3dlcl9pbml0KTsKKworTU9EVUxFX0FVVEhPUigiSWx5YSBQZXRyb3YgPGlseWEubXVyb21lY0BnbWFpbC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk5WRUMgYmF0dGVyeSBhbmQgQUMgZHJpdmVyIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOm52ZWMtcG93ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9udmVjL252ZWNfcHMyLmMgYi9kcml2ZXJzL3N0YWdpbmcvbnZlYy9udmVjX3BzMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYjk0MzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbnZlYy9udmVjX3BzMi5jCkBAIC0wLDAgKzEsMTAzIEBACisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlICJudmVjLmgiCisKKyNkZWZpbmUgU1RBUlRfU1RSRUFNSU5HCXsnXHgwNicsJ1x4MDMnLCdceDAxJ30KKyNkZWZpbmUgU1RPUF9TVFJFQU1JTkcJeydceDA2JywnXHgwNCd9CisjZGVmaW5lIFNFTkRfQ09NTUFORAl7J1x4MDYnLCdceDAxJywnXHhmNCcsJ1x4MDEnfQorCitzdHJ1Y3QgbnZlY19wczIKK3sKKwlzdHJ1Y3Qgc2VyaW8gKnNlcl9kZXY7CisJc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG5vdGlmaWVyOworCXN0cnVjdCBudmVjX2NoaXAgKm52ZWM7Cit9OworCitzdGF0aWMgc3RydWN0IG52ZWNfcHMyIHBzMl9kZXY7CisKK3N0YXRpYyBpbnQgcHMyX3N0YXJ0c3RyZWFtaW5nKHN0cnVjdCBzZXJpbyAqc2VyX2RldikKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZltdID0gU1RBUlRfU1RSRUFNSU5HOworCW52ZWNfd3JpdGVfYXN5bmMocHMyX2Rldi5udmVjLCBidWYsIHNpemVvZihidWYpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHMyX3N0b3BzdHJlYW1pbmcoc3RydWN0IHNlcmlvICpzZXJfZGV2KQoreworCXVuc2lnbmVkIGNoYXIgYnVmW10gPSBTVE9QX1NUUkVBTUlORzsKKwludmVjX3dyaXRlX2FzeW5jKHBzMl9kZXYubnZlYywgYnVmLCBzaXplb2YoYnVmKSk7Cit9CisKKy8qIGlzIHRoaXMgcmVhbGx5IG5lZWRlZD8KK3N0YXRpYyB2b2lkIG52ZWNfcmVzcF9oYW5kbGVyKHVuc2lnbmVkIGNoYXIgKmRhdGEpIHsKKwlzZXJpb19pbnRlcnJ1cHQoc2VyX2RldiwgZGF0YVs0XSwgMCk7Cit9CisqLworCitzdGF0aWMgaW50IHBzMl9zZW5kY29tbWFuZChzdHJ1Y3Qgc2VyaW8gKnNlcl9kZXYsIHVuc2lnbmVkIGNoYXIgY21kKQoreworCXVuc2lnbmVkIGNoYXIgYnVmW10gPSBTRU5EX0NPTU1BTkQ7CisKKwlidWZbMl0gPSBjbWQgJiAweGZmOworCisJZGV2X2RiZygmc2VyX2Rldi0+ZGV2LCAiU2VuZGluZyBwczIgY21kICUwMnhcbiIsIGNtZCk7CisJbnZlY193cml0ZV9hc3luYyhwczJfZGV2Lm52ZWMsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbnZlY19wczJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKKwkJCQl1bnNpZ25lZCBsb25nIGV2ZW50X3R5cGUsIHZvaWQgKmRhdGEpCit7CisJaW50IGk7CisJdW5zaWduZWQgY2hhciAqbXNnID0gKHVuc2lnbmVkIGNoYXIgKilkYXRhOworCisJc3dpdGNoIChldmVudF90eXBlKSB7CisJCWNhc2UgTlZFQ19QUzJfRVZUOgorCQkJc2VyaW9faW50ZXJydXB0KHBzMl9kZXYuc2VyX2RldiwgbXNnWzJdLCAwKTsKKwkJCXJldHVybiBOT1RJRllfU1RPUDsKKworCQljYXNlIE5WRUNfUFMyOgorCQkJaWYgKG1zZ1syXSA9PSAxKQorCQkJCWZvcihpID0gMDsgaSA8IChtc2dbMV0gLSAyKTsgaSsrKQorCQkJCQlzZXJpb19pbnRlcnJ1cHQocHMyX2Rldi5zZXJfZGV2LCBtc2dbaSs0XSwgMCk7CisJCQllbHNlIGlmIChtc2dbMV0gIT0gMikgLyogIWFjayAqLworCQkJeworCQkJCXByaW50aygibnZlY19wczI6IHVuaGFuZGxlZCBtb3VzZSBldmVudCAiKTsKKwkJCQlmb3IoaSA9IDA7IGkgPD0gKG1zZ1sxXSsxKTsgaSsrKQorCQkJCQlwcmludGsoIiUwMnggIiwgbXNnW2ldKTsKKwkJCQlwcmludGsoIi5cbiIpOworCQkJfQorCisJCQlyZXR1cm4gTk9USUZZX1NUT1A7CisJfQorCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCisKK2ludCBfX2luaXQgbnZlY19wczIoc3RydWN0IG52ZWNfY2hpcCAqbnZlYykKK3sKKwlzdHJ1Y3Qgc2VyaW8gKnNlcl9kZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2VyaW8pLCBHRlBfS0VSTkVMKTsKKworCXNlcl9kZXYtPmlkLnR5cGU9U0VSSU9fODA0MjsKKwlzZXJfZGV2LT53cml0ZT1wczJfc2VuZGNvbW1hbmQ7CisJc2VyX2Rldi0+b3Blbj1wczJfc3RhcnRzdHJlYW1pbmc7CisJc2VyX2Rldi0+Y2xvc2U9cHMyX3N0b3BzdHJlYW1pbmc7CisKKwlzdHJsY3B5KHNlcl9kZXYtPm5hbWUsICJOVkVDIFBTMiIsIHNpemVvZihzZXJfZGV2LT5uYW1lKSk7CisJc3RybGNweShzZXJfZGV2LT5waHlzLCAiTlZFQyBJMkMgc2xhdmUiLCBzaXplb2Yoc2VyX2Rldi0+cGh5cykpOworCisJcHMyX2Rldi5zZXJfZGV2ID0gc2VyX2RldjsKKwlwczJfZGV2Lm5vdGlmaWVyLm5vdGlmaWVyX2NhbGwgPSBudmVjX3BzMl9ub3RpZmllcjsKKwlwczJfZGV2Lm52ZWMgPSBudmVjOworCW52ZWNfcmVnaXN0ZXJfbm90aWZpZXIobnZlYywgJnBzMl9kZXYubm90aWZpZXIsIDApOworCisJc2VyaW9fcmVnaXN0ZXJfcG9ydChzZXJfZGV2KTsKKworCS8qIG1vdXNlIHJlc2V0ICovCisJbnZlY193cml0ZV9hc3luYyhudmVjLCAiXHgwNlx4MDFceGZmXHgwMyIsIDQpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1kaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5jCmluZGV4IDEwYTgyZWYuLjhhMTFmZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5jCkBAIC05MSw4ICs5MSw2IEBACiAJLnNldF9zZXR0aW5ncyA9IGN2bV9vY3Rfc2V0X3NldHRpbmdzLAogCS5ud2F5X3Jlc2V0ID0gY3ZtX29jdF9ud2F5X3Jlc2V0LAogCS5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCi0JLmdldF9zZyA9IGV0aHRvb2xfb3BfZ2V0X3NnLAotCS5nZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uX3hvXzEuYyBiL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uX3hvXzEuYwppbmRleCAyMmMwNGVhLi4yMjQ1MjEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2xwY19kY29uL29scGNfZGNvbl94b18xLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9vbHBjX2Rjb25feG9fMS5jCkBAIC0xNTMsNyArMTUzLDcgQEAKIAkgKiBBY2NvcmRpbmcgdG8gdGhlIGNzNTUzNiBzcGVjLCB0byBzZXQgR1BJTzE0IHRvIFNNQl9DTEsgd2UgbXVzdAogCSAqIHNpbXVsdGFuZW91c2x5IHNldCBBVVgxIElOL09VVCB0byBHUElPMTQ7IGRpdHRvIGZvciBTTUJfREFUQSBhbmQKIAkgKiBHUElPMTUuCi0gCSAqLworCSAqLwogCWNzNTUzNV9ncGlvX3NldChPTFBDX0dQSU9fU01CX0NMSywgR1BJT19PVVRQVVRfVkFMKTsKIAljczU1MzVfZ3Bpb19zZXQoT0xQQ19HUElPX1NNQl9EQVRBLCBHUElPX09VVFBVVF9WQUwpOwogCWNzNTUzNV9ncGlvX3NldChPTFBDX0dQSU9fU01CX0NMSywgR1BJT19PVVRQVVRfRU5BQkxFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uX3hvXzFfNS5jIGIvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9vbHBjX2Rjb25feG9fMV81LmMKaW5kZXggN2FhOWIxYS4uYTZhNmNmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9vbHBjX2Rjb25feG9fMV81LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9vbHBjX2Rjb25feG9fMV81LmMKQEAgLTI0LDkgKzI0LDggQEAKICNpbmNsdWRlICJvbHBjX2Rjb24uaCIKIAogLyogSGFyZHdhcmUgc2V0dXAgb24gdGhlIFhPIDEuNToKLSAqIAlEQ09OTE9BRCBjb25uZWN0cyB0bwotICoJCVZYODU1X0dQSU8xIChub3QgU01CQ0syKQotICogCURDT05CTEFOSyBjb25uZWN0cyB0byBWWDg1NV9HUElPOCAobm90IFNTUElDTEspICB1bnVzZWQgaW4gZHJpdmVyCisgKglEQ09OTE9BRCBjb25uZWN0cyB0byBWWDg1NV9HUElPMSAobm90IFNNQkNLMikKKyAqCURDT05CTEFOSyBjb25uZWN0cyB0byBWWDg1NV9HUElPOCAobm90IFNTUElDTEspICB1bnVzZWQgaW4gZHJpdmVyCiAgKglEQ09OU1RBVDAgY29ubmVjdHMgdG8gVlg4NTVfR1BJMTAgKG5vdCBTU1BJU0RJKQogICoJRENPTlNUQVQxIGNvbm5lY3RzIHRvIFZYODU1X0dQSTExIChub3QgblNTUElTUykKICAqCURDT05JUlEgY29ubmVjdHMgdG8gVlg4NTVfR1BJTzEyCkBAIC0zNCw5ICszMyw5IEBACiAgKglEQ09OU01CQ0xLIGNvbm5lY3RzIHRvIFZYODU1IGdyYXBoaWNzIENSVFNQQ0xLCiAgKi8KIAotI2RlZmluZSBWWDg1NV9HRU5MX1BVUlBPU0VfT1VUUFVUIDB4NDRjIC8vIFBNSU9fUng0Yy00ZgotI2RlZmluZSBWWDg1NV9HUElfU1RBVFVTX0NIRyAweDQ1MCAgLy8gUE1JT19SeDUwCi0jZGVmaW5lIFZYODU1X0dQSV9TQ0lfU01JIDB4NDUyICAvLyBQTUlPX1J4NTIKKyNkZWZpbmUgVlg4NTVfR0VOTF9QVVJQT1NFX09VVFBVVCAweDQ0YyAvKiBQTUlPX1J4NGMtNGYgKi8KKyNkZWZpbmUgVlg4NTVfR1BJX1NUQVRVU19DSEcgMHg0NTAgIC8qIFBNSU9fUng1MCAqLworI2RlZmluZSBWWDg1NV9HUElfU0NJX1NNSSAweDQ1MiAgLyogUE1JT19SeDUyICovCiAjZGVmaW5lIEJJVF9HUElPMTIgMHg0MAogCiAjZGVmaW5lIFBSRUZJWCAiT0xQQyBEQ09OOiIKQEAgLTYzLDggKzYyLDcgQEAKIAl1bnNpZ25lZCBpbnQgaXJxOwogCXVfaW50OF90IHRtcDsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKLQkKLQkKKwogCXBkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX1ZJQSwKIAkJCSAgICAgIFBDSV9ERVZJQ0VfSURfVklBX1ZYODU1LCBOVUxMKTsKIAlpZiAoIXBkZXYpIHsKQEAgLTE0OSw3ICsxNDcsNyBAQAogCSAqIHN0YXRlIG1hY2hpbmUgdG8gcmVzZXQgdG8gYSAoc2FuZSkgaW5pdGlhbCBzdGF0ZS4gIE1pdGNoIEJyYWRsZXkKIAkgKiBkaWQgc29tZSB0ZXN0aW5nIGFuZCBkaXNjb3ZlcmVkIHRoYXQgaG9sZGluZyBmb3IgMTYgU01CX0NMSyBjeWNsZXMKIAkgKiB3b3JrZWQgYSBsb3QgbW9yZSByZWxpYWJseSwgc28gdGhhdCdzIHdoYXQgd2UgZG8gaGVyZS4KLSAJICovCisJICovCiAJc2V0X2kyY19saW5lKDEsIDEpOwogCiAJZm9yICh4ID0gMDsgeCA8IDE2OyB4KyspIHsKQEAgLTE3MiwxMyArMTcwLDEzIEBACiBzdGF0aWMgdTggZGNvbl9yZWFkX3N0YXR1c194b18xXzUodm9pZCkKIHsKIAl1OCBzdGF0dXM7Ci0JCisKIAlpZiAoIWRjb25fd2FzX2lycSgpKQogCQlyZXR1cm4gLTE7CiAKLQkvLyBpIGJlbGlldmUgdGhpcyBpcyB0aGUgc2FtZSBhcyAiaW5iKDB4NDRiKSAmIDMiCisJLyogaSBiZWxpZXZlIHRoaXMgaXMgdGhlIHNhbWUgYXMgImluYigweDQ0YikgJiAzIiAqLwogCXN0YXR1cyA9IGdwaW9fZ2V0X3ZhbHVlKFZYODU1X0dQSSgxMCkpOwotCXN0YXR1cyB8PSBncGlvX2dldF92YWx1ZShWWDg1NV9HUEkoMTEpKSA8PCAxOyAKKwlzdGF0dXMgfD0gZ3Bpb19nZXRfdmFsdWUoVlg4NTVfR1BJKDExKSkgPDwgMTsKIAogCWRjb25fY2xlYXJfaXJxKCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9pbm9kZS5jIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2lub2RlLmMKaW5kZXggYzkzZWYyMDcuLmMwZjBhYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9pbm9kZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9pbm9kZS5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXRmcy5oPgogI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAKICNpbmNsdWRlICJuZXRmcy5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzYTdlNDcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotY29uZmlnIFJUMjg2MAotCXRyaXN0YXRlICJSYWxpbmsgMjg2MC8zMDkwIHdpcmVsZXNzIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgWDg2ICYmIFdMQU4KLQlzZWxlY3QgV0lSRUxFU1NfRVhUCi0Jc2VsZWN0IFdFWFRfUFJJVgotCXNlbGVjdCBDUkNfQ0NJVFQKLQlzZWxlY3QgRldfTE9BREVSCi0JLS0taGVscC0tLQotCSAgVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZHJpdmVyIGZvciB0aGUgUmFsaW5rIDI4NjAgYW5kIDMwOTAKLQkgIHdpcmVsZXNzIGNoaXBzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkZDBhYTUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLW9iai0kKENPTkZJR19SVDI4NjApCSs9IHJ0Mjg2MHN0YS5vCi0KLSMgVE9ETzogYWxsIG9mIHRoZXNlIHNob3VsZCBiZSByZW1vdmVkCi1jY2ZsYWdzLXkgOj0gLURMSU5VWCAtREFHR1JFR0FUSU9OX1NVUFBPUlQgLURQSUdHWUJBQ0tfU1VQUE9SVCAtRFdNTV9TVVBQT1JUCi1jY2ZsYWdzLXkgKz0gLURSVE1QX01BQ19QQ0kgLURSVE1QX1BDSV9TVVBQT1JUIC1EUlQyODYwCi1jY2ZsYWdzLXkgKz0gLURSVE1QX1JGX1JXX1NVUFBPUlQgLURSVE1QX0VGVVNFX1NVUFBPUlQgLURSVDMweHggLURSVDMwOTAKLWNjZmxhZ3MteSArPSAtRERCRwotCi1ydDI4NjBzdGEteSA6PQlcCi0JY29tbW9uL2NyeXB0X21kNS5vCVwKLQljb21tb24vY3J5cHRfc2hhMi5vCVwKLQljb21tb24vY3J5cHRfaG1hYy5vCVwKLQljb21tb24vbWxtZS5vCQlcCi0JY29tbW9uL2NtbV93ZXAubwlcCi0JY29tbW9uL2FjdGlvbi5vCQlcCi0JY29tbW9uL2NtbV9kYXRhLm8JXAotCWNvbW1vbi9ydG1wX2luaXQubwlcCi0JY29tbW9uL2NtbV90a2lwLm8JXAotCWNvbW1vbi9jbW1fYWVzLm8JXAotCWNvbW1vbi9jbW1fc3luYy5vCVwKLQljb21tb24vZWVwcm9tLm8JCVwKLQljb21tb24vY21tX3Nhbml0eS5vCVwKLQljb21tb24vY21tX2luZm8ubwlcCi0JY29tbW9uL2NtbV9jZmcubwlcCi0JY29tbW9uL2NtbV93cGEubwlcCi0JY29tbW9uL2Rmcy5vCQlcCi0JY29tbW9uL3NwZWN0cnVtLm8JXAotCWNvbW1vbi9ydG1wX3RpbWVyLm8JXAotCWNvbW1vbi9ydF9jaGFubmVsLm8JXAotCWNvbW1vbi9jbW1fYXNpYy5vCVwKLQlzdGEvYXNzb2MubwkJXAotCXN0YS9hdXRoLm8JCVwKLQlzdGEvYXV0aF9yc3AubwkJXAotCXN0YS9zeW5jLm8JCVwKLQlzdGEvc2FuaXR5Lm8JCVwKLQlzdGEvcnRtcF9kYXRhLm8JCVwKLQlzdGEvY29ubmVjdC5vCQlcCi0Jc3RhL3dwYS5vCQlcCi0JcnRfbGludXgubwkJXAotCXJ0X21haW5fZGV2Lm8JCVwKLQlzdGFfaW9jdGwubwkJXAotCWNvbW1vbi9iYV9hY3Rpb24ubwlcCi0JcGNpX21haW5fZGV2Lm8JCVwKLQlydF9wY2lfcmJ1cy5vCQlcCi0JY29tbW9uL2NtbV9tYWNfcGNpLm8JXAotCWNvbW1vbi9jbW1fZGF0YV9wY2kubwlcCi0JY29tbW9uL2VlX3Byb20ubwlcCi0JY29tbW9uL3J0bXBfbWN1Lm8JXAotCWNvbW1vbi9lZV9lZnVzZS5vCVwKLQljaGlwcy9ydDMweHgubwkJXAotCWNvbW1vbi9ydF9yZi5vCQlcCi0JY2hpcHMvcnQzMDkwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvVE9ETwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGUyZjZlZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL1RPRE8KKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1JJ20gaGVzaXRhbnQgdG8gYWRkIGEgVE9ETyBmaWxlIGhlcmUsIGFzIHRoZSB3aXJlbGVzcyBkZXZlbG9wZXJzIHdvdWxkCi1yZWFsbHkgaGF2ZSBwZW9wbGUgaGVscCB0aGVtIG91dCBvbiB0aGUgImNsZWFuIiBydDI4NjAgZHJpdmVyIHRoYXQgY2FuCi1iZSBmb3VuZCBhdCB0aGUgaHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tLyBzaXRlLgotCi1CdXQsIGlmIHlvdSB3aXNoIHRvIGNsZWFuIHVwIHRoaXMgZHJpdmVyIGluc3RlYWQsIGhlcmUncyBhIHNob3J0IGxpc3Qgb2YKLXRoaW5ncyB0aGF0IG5lZWQgdG8gYmUgZG9uZSB0byBnZXQgaXQgaW50byBhIG1vcmUgbWVyZ2FibGUgc2hhcGU6Ci0KLVRPRE86Ci0JLSBjaGVja3BhdGNoLnBsIGNsZWFuCi0JLSBzcGFyc2UgY2xlYW4KLQktIHBvcnQgdG8gaW4ta2VybmVsIDgwMjExIHN0YWNrIGFuZCBjb21tb24gcnQyeDAwIGluZnJhc3RydWN0dXJlCi0JLSByZXZpZXcgYnkgdGhlIHdpcmVsZXNzIGRldmVsb3BlciBjb21tdW5pdHkKLQotUGxlYXNlIHNlbmQgYW55IHBhdGNoZXMgb3IgY29tcGxhaW50cyBhYm91dCB0aGlzIGRyaXZlciB0byBHcmVnCi1Lcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4gYW5kIGRvbid0IGJvdGhlciB0aGUgdXBzdHJlYW0gd2lyZWxlc3MKLWtlcm5lbCBkZXZlbG9wZXJzIGFib3V0IGl0LCB0aGV5IHdhbnQgbm90aGluZyB0byBkbyB3aXRoIGl0LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9hcC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9hcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzM3YzBjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvYXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUmFsaW5rIFRlY2ggSW5jLgotICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAotICogSHNpbmNodSBDb3VudHkgMzAyLAotICogVGFpd2FuLCBSLk8uQy4KLSAqCi0gKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi1Nb2R1bGUgTmFtZToKLWFwLmgKLQotQWJzdHJhY3Q6Ci1NaW5pcG9ydCBnZW5lcmljIHBvcnRpb24gaGVhZGVyIGZpbGUKLQotUmV2aXNpb24gSGlzdG9yeToKLVdobyAgICAgICAgIFdoZW4gICAgICAgICAgV2hhdAotLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1QYXVsIExpbiAgICAwOC0wMS0yMDAyICAgIGNyZWF0ZWQKLUphbWVzIFRhbiAgIDA5LTA2LTIwMDIgICAgbW9kaWZpZWQgKFJldmlzZSBOVENSZWdUYWJsZSkKLUpvaG4gQ2hhbmcgIDEyLTIyLTIwMDQgICAgbW9kaWZpZWQgZm9yIFJUMjU2MS8yNjYxLiBtZXJnZSB3aXRoIFNUQSBkcml2ZXIKLSovCi0jaWZuZGVmIF9fQVBfSF9fCi0jZGVmaW5lIF9fQVBfSF9fCi0KLS8qIGFwX3dwYS5jICovCi12b2lkIFdwYVN0YXRlTWFjaGluZUluaXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJIHN0cnVjdCBydF9zdGF0ZV9tYWNoaW5lICpTbSwKLQkJCSBPVVQgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pOwotCi0jaWZkZWYgUlRNUF9NQUNfVVNCCi12b2lkIEJlYWNvblVwZGF0ZUV4ZWModm9pZCAqU3lzdGVtU3BlY2lmaWMxLAotCQkgICAgICB2b2lkICpGdW5jdGlvbkNvbnRleHQsCi0JCSAgICAgIHZvaWQgKlN5c3RlbVNwZWNpZmljMiwgdm9pZCAqU3lzdGVtU3BlY2lmaWMzKTsKLSNlbmRpZiAvKiBSVE1QX01BQ19VU0IgLy8gKi8KLQotdm9pZCBSVE1QU2V0UGlnZ3lCYWNrKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgSU4gQk9PTEVBTiBiUGlnZ3lCYWNrKTsKLQotdm9pZCBNYWNUYWJsZVJlc2V0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLXN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKk1hY1RhYmxlSW5zZXJ0RW50cnkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCSAgICAgdTggKnBBZGRyLAotCQkJCSAgICAgdTggYXBpZHgsIElOIEJPT0xFQU4gQ2xlYW5BbGwpOwotCi1CT09MRUFOIE1hY1RhYmxlRGVsZXRlRW50cnkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgIHUxNiB3Y2lkLCB1OCAqcEFkZHIpOwotCi1zdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpNYWNUYWJsZUxvb2t1cChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJCQkJCXU4ICpwQWRkcik7Ci0KLSNlbmRpZiAvKiBfX0FQX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jaGlwL21hY19wY2kuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY2hpcC9tYWNfcGNpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4ODY4YTUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jaGlwL21hY19wY2kuaAorKysgL2Rldi9udWxsCkBAIC0xLDM1NSArMCwwIEBACi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFJhbGluayBUZWNoIEluYy4KLSAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKLSAqIEhzaW5jaHUgQ291bnR5IDMwMiwKLSAqIFRhaXdhbiwgUi5PLkMuCi0gKgotICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotICAgIE1vZHVsZSBOYW1lOgotCW1hY19wY2kuaAotCi0gICAgQWJzdHJhY3Q6Ci0KLSAgICBSZXZpc2lvbiBIaXN0b3J5OgotICAgIFdobyAgICAgICAgICAJV2hlbiAgICAgICAgICAgIFdoYXQKLSAgICBKdXN0aW4gUC4gTWF0dG9jawkxMS8wNy8yMDEwCUZpeCBzb21lIHR5cG9zCi0gICAgLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLSNpZm5kZWYgX19NQUNfUENJX0hfXwotI2RlZmluZSBfX01BQ19QQ0lfSF9fCi0KLSNpbmNsdWRlICIuLi9ydG1wX3R5cGUuaCIKLSNpbmNsdWRlICJydG1wX21hYy5oIgotI2luY2x1ZGUgInJ0bXBfcGh5LmgiCi0jaW5jbHVkZSAiLi4vcnRtcF9pZmFjZS5oIgotI2luY2x1ZGUgIi4uL3J0bXBfZG90MTEuaCIKLQotLyogKi8KLS8qIERldmljZSBJRCAmIFZlbmRvciBJRCByZWxhdGVkIGRlZmluaXRpb25zLCAqLwotLyogTk9URTogeW91IHNob3VsZCBub3QgYWRkIHRoZSBuZXcgVmVuZG9ySUQvRGV2aWNlSUQgaGVyZSB1bmxlc3MgeW91IGtub3cgZm9yIHN1cmUgd2hhdCBjaGlwIGl0IGJlbG9uZ3MgdG9vLiAqLwotLyogKi8KLSNkZWZpbmUgTklDX1BDSV9WRU5ET1JfSUQJCTB4MTgxNAotI2RlZmluZSBQQ0lCVVNfSU5URUxfVkVORE9SCTB4ODA4NgotCi0jaWYgIWRlZmluZWQoUENJX0NBUF9JRF9FWFApCi0jZGVmaW5lIFBDSV9DQVBfSURfRVhQCQkJICAgIDB4MTAKLSNlbmRpZgotI2lmICFkZWZpbmVkKFBDSV9FWFBfTE5LQ1RMKQotI2RlZmluZSBQQ0lfRVhQX0xOS0NUTAkJCSAgICAweDEwCi0jZW5kaWYKLSNpZiAhZGVmaW5lZChQQ0lfQ0xBU1NfQlJJREdFX1BDSSkKLSNkZWZpbmUgUENJX0NMQVNTX0JSSURHRV9QQ0kJCTB4MDYwNAotI2VuZGlmCi0KLSNkZWZpbmUgVFhJTkZPX1NJWkUJCQkJCQkwCi0jZGVmaW5lIFJUTVBfUEtUX1RBSUxfUEFERElORwkJCTAKLSNkZWZpbmUgZlJUTVBfQURBUFRFUl9ORUVEX1NUT1BfVFgJMAotCi0jZGVmaW5lIEFVWF9DVFJMICAgICAgICAgICAweDEwYwotCi0vKiAqLwotLyogVFggZGVzY3JpcHRvciBmb3JtYXQsIFR4ICAgICByaW5nLCBNZ210IFJpbmcgKi8KLS8qICovCi1zdHJ1Y3QgUEFDS0VEIHJ0X3R4ZCB7Ci0JLyogV29yZCAwICovCi0JdTMyIFNEUHRyMDsKLQkvKiBXb3JkIDEgKi8KLQl1MzIgU0RMZW4xOjE0OwotCXUzMiBMYXN0U2VjMToxOwotCXUzMiBCdXJzdDoxOwotCXUzMiBTRExlbjA6MTQ7Ci0JdTMyIExhc3RTZWMwOjE7Ci0JdTMyIERNQURPTkU6MTsKLQkvKldvcmQyICovCi0JdTMyIFNEUHRyMTsKLQkvKldvcmQzICovCi0JdTMyIHJzdjI6MjQ7Ci0JdTMyIFdJVjoxOwkJLyogV2lyZWxlc3MgSW5mbyBWYWxpZC4gMSBpZiBEcml2ZXIgYWxyZWFkeSBmaWxsIFdJLCAgbyBpZiBETUEgbmVlZHMgdG8gY29weSBXSSB0byBjb3JyZWN0IHBvc2l0aW9uICovCi0JdTMyIFFTRUw6MjsJCS8qIHNlbGVjdCBvbi1jaGlwIEZJRk8gSUQgZm9yIDJuZC1zdGFnZSBvdXRwdXQgc2NoZWR1bGVyLjA6TUdNVCwgMTpIQ0NBIDI6RURDQSAqLwotCXUzMiByc3Y6MjsKLQl1MzIgVENPOjE7CQkvKiAqLwotCXUzMiBVQ086MTsJCS8qICovCi0JdTMyIElDTzoxOwkJLyogKi8KLX07Ci0KLS8qICovCi0vKiBSeCBkZXNjcmlwdG9yIGZvcm1hdCwgUnggUmluZyAqLwotLyogKi8KLXR5cGVkZWYgc3RydWN0IFBBQ0tFRCBydF9yeGQgewotCS8qIFdvcmQgMCAqLwotCXUzMiBTRFAwOwotCS8qIFdvcmQgMSAqLwotCXUzMiBTREwxOjE0OwotCXUzMiBSc3Y6MjsKLQl1MzIgU0RMMDoxNDsKLQl1MzIgTFMwOjE7Ci0JdTMyIERET05FOjE7Ci0JLyogV29yZCAyICovCi0JdTMyIFNEUDE7Ci0JLyogV29yZCAzICovCi0JdTMyIEJBOjE7Ci0JdTMyIERBVEE6MTsKLQl1MzIgTlVMTERBVEE6MTsKLQl1MzIgRlJBRzoxOwotCXUzMiBVMk06MTsJCS8qIDE6IHRoaXMgUlggZnJhbWUgaXMgdW5pY2FzdCB0byBtZSAqLwotCXUzMiBNY2FzdDoxOwkJLyogMTogdGhpcyBpcyBhIG11bHRpY2FzdCBmcmFtZSAqLwotCXUzMiBCY2FzdDoxOwkJLyogMTogdGhpcyBpcyBhIGJyb2FkY2FzdCBmcmFtZSAqLwotCXUzMiBNeUJzczoxOwkJLyogMTogdGhpcyBmcmFtZSBiZWxvbmdzIHRvIHRoZSBzYW1lIEJTU0lEICovCi0JdTMyIENyYzoxOwkJLyogMTogQ1JDIGVycm9yICovCi0JdTMyIENpcGhlckVycjoyOwkvKiAwOiBkZWNyeXB0aW9uIG9rYXksIDE6SUNWIGVycm9yLCAyOk1JQyBlcnJvciwgMzpLRVkgbm90IHZhbGlkICovCi0JdTMyIEFNU0RVOjE7CQkvKiByeCB3aXRoIDgwMi4zIGhlYWRlciwgbm90IDgwMi4xMSBoZWFkZXIuICovCi0JdTMyIEhUQzoxOwotCXUzMiBSU1NJOjE7Ci0JdTMyIEwyUEFEOjE7Ci0JdTMyIEFNUERVOjE7Ci0JdTMyIERlY3J5cHRlZDoxOwkvKiB0aGlzIGZyYW1lIGlzIGJlaW5nIGRlY3J5cHRlZC4gKi8KLQl1MzIgUGxjcFNpZ25hbDoxOwkvKiBUbyBiZSBtb3ZlZCAqLwotCXUzMiBQbGNwUnNzaWw6MTsJLyogVG8gYmUgbW92ZWQgKi8KLQl1MzIgUnN2MToxMzsKLX0gUlQyOFhYX1JYRF9TVFJVQywgKlBSVDI4WFhfUlhEX1NUUlVDOwotCi10eXBlZGVmIHVuaW9uIF9UWF9BVFRFTlVBVElPTl9DVFJMX1NUUlVDIHsKLQlzdHJ1Y3QgewotCQl1bnNpZ25lZCBsb25nIFJGX0lTT0xBVElPTl9FTkFCTEU6MTsKLQkJdW5zaWduZWQgbG9uZyBSZXNlcnZlMjo3OwotCQl1bnNpZ25lZCBsb25nIFBDSUVfUEhZX1RYX0FUVEVOX1ZBTFVFOjM7Ci0JCXVuc2lnbmVkIGxvbmcgUENJRV9QSFlfVFhfQVRURU5fRU46MTsKLQkJdW5zaWduZWQgbG9uZyBSZXNlcnZlMToyMDsKLQl9IGZpZWxkOwotCi0JdW5zaWduZWQgbG9uZyB3b3JkOwotfSBUWF9BVFRFTlVBVElPTl9DVFJMX1NUUlVDLCAqUFRYX0FUVEVOVUFUSU9OX0NUUkxfU1RSVUM7Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tIEVFUFJPTSBSZWxhdGVkIE1BQ1JPIC0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIDgwNTEgZmlybXdhcmUgaW1hZ2UgZm9yIFJUMjg2MCAtIGJhc2UgYWRkcmVzcyA9IDB4NDAwMCAqLwotI2RlZmluZSBGSVJNV0FSRV9JTUFHRV9CQVNFICAgICAweDIwMDAKLSNkZWZpbmUgTUFYX0ZJUk1XQVJFX0lNQUdFX1NJWkUgMHgyMDAwCS8qIDhrYnl0ZSAqLwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLSBGcmltd2FyZSBSZWxhdGVkIE1BQ1JPIC0tLS0tLS0tLS0tLS0tLS0tICovCi0jZGVmaW5lIFJUTVBfV1JJVEVfRklSTVdBUkUoX3BBZCwgX3BGd0ltYWdlLCBfRndMZW4pCQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJdW5zaWduZWQgbG9uZwlfaSwgX2Zpcm07CQkJCQlcCi0JCVJUTVBfSU9fV1JJVEUzMihfcEFkLCBQQkZfU1lTX0NUUkwsIDB4MTAwMDApOwkJXAotCQkJCQkJCQkJXAotCQlmb3IgKF9pID0gMDsgX2kgPCBfRndMZW47IF9pICs9IDQpIHsJCQkJXAotCQkJCV9maXJtID0gX3BGd0ltYWdlW19pXSArCQkJCVwKLQkJCSAgIChfcEZ3SW1hZ2VbX2krM10gPDwgMjQpICsJCQlcCi0JCQkgICAoX3BGd0ltYWdlW19pKzJdIDw8IDE2KSArCQkJXAotCQkJICAgKF9wRndJbWFnZVtfaSsxXSA8PCA4KTsJCQlcCi0JCQlSVE1QX0lPX1dSSVRFMzIoX3BBZCwgRklSTVdBUkVfSU1BR0VfQkFTRSArIF9pLCBfZmlybSk7CVwKLQkJfQkJCQkJCQlcCi0JCVJUTVBfSU9fV1JJVEUzMihfcEFkLCBQQkZfU1lTX0NUUkwsIDB4MDAwMDApOwkJXAotCQlSVE1QX0lPX1dSSVRFMzIoX3BBZCwgUEJGX1NZU19DVFJMLCAweDAwMDAxKTsJCVwKLQkJCQkJCQkJCVwKLQkJLyogaW5pdGlhbGl6ZSBCQlAgUi9XIGFjY2VzcyBhZ2VudCAqLwkJCVwKLQkJUlRNUF9JT19XUklURTMyKF9wQWQsIEgyTV9CQlBfQUdFTlQsIDApOwkJXAotCQlSVE1QX0lPX1dSSVRFMzIoX3BBZCwgSDJNX01BSUxCT1hfQ1NSLCAwKTsJCVwKLQl9IHdoaWxlICgwKQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLSBUWCBSZWxhdGVkIE1BQ1JPIC0tLS0tLS0tLS0tLS0tLS0tICovCi0jZGVmaW5lIFJUTVBfU1RBUlRfREVRVUVVRShwQWQsIFF1ZUlkeCwgaXJxRmxhZ3MpCQlkbyB7fSB3aGlsZSAoMCkKLSNkZWZpbmUgUlRNUF9TVE9QX0RFUVVFVUUocEFkLCBRdWVJZHgsIGlycUZsYWdzKQkJZG8ge30gd2hpbGUgKDApCi0KLSNkZWZpbmUgUlRNUF9IQVNfRU5PVUdIX0ZSRUVfREVTQyhwQWQsIHBUeEJsaywgZnJlZU51bSwgcFBhY2tldCkgXAotCQkoKGZyZWVOdW0pID49ICh1bnNpZ25lZCBsb25nKShwVHhCbGstPlRvdGFsRnJhZ051bSArIFJUTVBfR0VUX1BBQ0tFVF9GUkFHTUVOVFMocFBhY2tldCkgKyAzKSkJLyogcm91Z2ggZXN0aW1hdGUgd2Ugd2lsbCB1c2UgMyBtb3JlIGRlc2NyaXB0b3IuICovCi0jZGVmaW5lIFJUTVBfUkVMRUFTRV9ERVNDX1JFU09VUkNFKHBBZCwgUXVlSWR4KQkJCWRvIHt9IHdoaWxlICgwKQotCi0jZGVmaW5lIE5FRURfUVVFVUVfQkFDS19GT1JfQUdHKHBBZCwgUXVlSWR4LCBmcmVlTnVtLCBfVHhGcmFtZVR5cGUpIFwKLQkJKCgoZnJlZU51bSAhPSAoVFhfUklOR19TSVpFLTEpKSAmJiBcCi0JCShwQWQtPlR4U3dRdWV1ZVtRdWVJZHhdLk51bWJlciA9PSAwKSkgfHwgKGZyZWVOdW0gPCAzKSkKLQotI2RlZmluZSBIQUxfS2lja091dE1nbXRUeChfcEFkLCBfUXVlSWR4LCBfcFBhY2tldCwgX3BTcmNCdWZWQSwgX1NyY0J1ZkxlbikJXAotCQkJUnRtcFBDSU1nbXRLaWNrT3V0KF9wQWQsIF9RdWVJZHgsIF9wUGFja2V0LCBfcFNyY0J1ZlZBLCBfU3JjQnVmTGVuKQotCi0jZGVmaW5lIEhBTF9Xcml0ZVN1YlR4UmVzb3VyY2UocEFkLCBwVHhCbGssIGJJc0xhc3QsIHBGcmVlTnVtYmVyKQlcCi0JCQkJLyogUnRtcFBDSV9Xcml0ZVN1YlR4UmVzb3VyY2UocEFkLCBwVHhCbGssIGJJc0xhc3QsIHBGcmVlTnVtYmVyKSAqLwotCi0jZGVmaW5lIEhBTF9Xcml0ZVR4UmVzb3VyY2UocEFkLCBwVHhCbGssIGJJc0xhc3QsIHBGcmVlTnVtYmVyKQlcCi0JCQlSdG1wUENJX1dyaXRlU2luZ2xlVHhSZXNvdXJjZShwQWQsIHBUeEJsaywgYklzTGFzdCwgcEZyZWVOdW1iZXIpCi0KLSNkZWZpbmUgSEFMX1dyaXRlRnJhZ1R4UmVzb3VyY2UocEFkLCBwVHhCbGssIGZyYWdOdW0sIHBGcmVlTnVtYmVyKSBcCi0JCQlSdG1wUENJX1dyaXRlRnJhZ1R4UmVzb3VyY2UocEFkLCBwVHhCbGssIGZyYWdOdW0sIHBGcmVlTnVtYmVyKQotCi0jZGVmaW5lIEhBTF9Xcml0ZU11bHRpVHhSZXNvdXJjZShwQWQsIHBUeEJsaywgZnJhbWVOdW0sIHBGcmVlTnVtYmVyKSBcCi0JCQlSdG1wUENJX1dyaXRlTXVsdGlUeFJlc291cmNlKHBBZCwgcFR4QmxrLCBmcmFtZU51bSwgcEZyZWVOdW1iZXIpCi0KLSNkZWZpbmUgSEFMX0ZpbmFsV3JpdGVUeFJlc291cmNlKF9wQWQsIF9wVHhCbGssIF9Ub3RhbE1QRFVTaXplLCBfRmlyc3RUeElkeCkJXAotCQkJUnRtcFBDSV9GaW5hbFdyaXRlVHhSZXNvdXJjZShfcEFkLCBfcFR4QmxrLCBfVG90YWxNUERVU2l6ZSwgX0ZpcnN0VHhJZHgpCi0KLSNkZWZpbmUgSEFMX0xhc3RUeElkeChfcEFkLCBfUXVlSWR4LCBfTGFzdFR4SWR4KSBcCi0JCQkJLypSdG1wUENJRGF0YUxhc3RUeElkeChfcEFkLCBfUXVlSWR4LF9MYXN0VHhJZHgpICovCi0KLSNkZWZpbmUgSEFMX0tpY2tPdXRUeChfcEFkLCBfcFR4QmxrLCBfUXVlSWR4KQlcCi0JCQlSVE1QX0lPX1dSSVRFMzIoKF9wQWQpLCBUWF9DVFhfSURYMCsoKF9RdWVJZHgpKjB4MTApLCAoX3BBZCktPlR4UmluZ1soX1F1ZUlkeCldLlR4Q3B1SWR4KQotLyoJCQlSdG1wUENJRGF0YUtpY2tPdXQoX3BBZCwgX3BUeEJsaywgX1F1ZUlkeCkqLwotCi0jZGVmaW5lIEhBTF9LaWNrT3V0TnVsbEZyYW1lVHgoX3BBZCwgX1F1ZUlkeCwgX3BOdWxsRnJhbWUsIF9mcmFtZUxlbikJXAotCQkJTWluaXBvcnRNTVJlcXVlc3QoX3BBZCwgX1F1ZUlkeCwgX3BOdWxsRnJhbWUsIF9mcmFtZUxlbikKLQotI2RlZmluZSBHRVRfVFhSSU5HX0ZSRUVOTyhfcEFkLCBfUXVlSWR4KSBcCi0JKF9wQWQtPlR4UmluZ1tfUXVlSWR4XS5UeFN3RnJlZUlkeCA+IF9wQWQtPlR4UmluZ1tfUXVlSWR4XS5UeENwdUlkeCkJPyBcCi0JCQkoX3BBZC0+VHhSaW5nW19RdWVJZHhdLlR4U3dGcmVlSWR4IC0gX3BBZC0+VHhSaW5nW19RdWVJZHhdLlR4Q3B1SWR4IC0gMSkgXAotCQkJIDoJXAotCQkJKF9wQWQtPlR4UmluZ1tfUXVlSWR4XS5UeFN3RnJlZUlkeCArIFRYX1JJTkdfU0laRSAtIF9wQWQtPlR4UmluZ1tfUXVlSWR4XS5UeENwdUlkeCAtIDEpOwotCi0jZGVmaW5lIEdFVF9NR01UUklOR19GUkVFTk8oX3BBZCkgXAotCShfcEFkLT5NZ210UmluZy5UeFN3RnJlZUlkeCA+IF9wQWQtPk1nbXRSaW5nLlR4Q3B1SWR4KQk/IFwKLQkJCShfcEFkLT5NZ210UmluZy5UeFN3RnJlZUlkeCAtIF9wQWQtPk1nbXRSaW5nLlR4Q3B1SWR4IC0gMSkgXAotCQkJIDoJXAotCQkJKF9wQWQtPk1nbXRSaW5nLlR4U3dGcmVlSWR4ICsgTUdNVF9SSU5HX1NJWkUgLSBfcEFkLT5NZ210UmluZy5UeENwdUlkeCAtIDEpOwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLSBSWCBSZWxhdGVkIE1BQ1JPIC0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tIEFTSUMgUmVsYXRlZCBNQUNSTyAtLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogcmVzZXQgTUFDIG9mIGEgc3RhdGlvbiBlbnRyeSB0byAweDAwMDAwMDAwMDAwMCAqLwotI2RlZmluZSBSVE1QX1NUQV9FTlRSWV9NQUNfUkVTRVQocEFkLCBXY2lkKQlcCi0JQXNpY0RlbFdjaWRUYWIocEFkLCBXY2lkKTsKLQotLyogYWRkIHRoaXMgZW50cnkgaW50byBBU0lDIFJYIFdDSUQgc2VhcmNoIHRhYmxlICovCi0jZGVmaW5lIFJUTVBfU1RBX0VOVFJZX0FERChwQWQsIHBFbnRyeSkJCVwKLQlBc2ljVXBkYXRlUnhXQ0lEVGFibGUocEFkLCBwRW50cnktPkFpZCwgcEVudHJ5LT5BZGRyKTsKLQotLyogYWRkIGJ5IGpvaG5saSwgZml4ICJpbl9pbnRlcnJ1cHQiIGVycm9yIHdoZW4gY2FsbCAiTWFjVGFibGVEZWxldGVFbnRyeSIgaW4gUnggdGFza2xldCAqLwotLyogU2V0IE1BQyByZWdpc3RlciB2YWx1ZSBhY2NvcmRpbmcgb3BlcmF0aW9uIG1vZGUgKi8KLSNkZWZpbmUgUlRNUF9VUERBVEVfUFJPVEVDVChwQWQpCVwKLQlBc2ljVXBkYXRlUHJvdGVjdChwQWQsIDAsIChBTExOX1NFVFBST1RFQ1QpLCBUUlVFLCAwKTsKLS8qIGVuZCBqb2hubGkgKi8KLQotLyogcmVtb3ZlIFBhaXItd2lzZSBrZXkgbWF0ZXJpYWwgZnJvbSBBU0lDICovCi0jZGVmaW5lIFJUTVBfU1RBX0VOVFJZX0tFWV9ERUwocEFkLCBCc3NJZHgsIFdjaWQpCVwKLQlBc2ljUmVtb3ZlUGFpcndpc2VLZXlFbnRyeShwQWQsIEJzc0lkeCwgKHU4KVdjaWQpOwotCi0vKiBhZGQgQ2xpZW50IHNlY3VyaXR5IGluZm9ybWF0aW9uIGludG8gQVNJQyBXQ0lEIHRhYmxlIGFuZCBJVkVJViB0YWJsZSAqLwotI2RlZmluZSBSVE1QX1NUQV9TRUNVUklUWV9JTkZPX0FERChwQWQsIGFwaWR4LCBLZXlJRCwgcEVudHJ5KQkJXAotCVJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnkocEFkLCBhcGlkeCwgS2V5SUQsCQkJXAotCQkJCQkJCXBBZC0+U2hhcmVkS2V5W2FwaWR4XVtLZXlJRF0uQ2lwaGVyQWxnLCBwRW50cnkpOwotCi0jZGVmaW5lIFJUTVBfU0VDVVJJVFlfS0VZX0FERChwQWQsIGFwaWR4LCBLZXlJRCwgcEVudHJ5KQkJXAotCXsJLyogdXBkYXRlIHBhaXJ3aXNlIGtleSBpbmZvcm1hdGlvbiB0byBBU0lDIFNoYXJlZCBLZXkgVGFibGUgKi8JXAotCQlBc2ljQWRkU2hhcmVkS2V5RW50cnkocEFkLCBhcGlkeCwgS2V5SUQsCQkJCQlcCi0JCQkJCQkgIHBBZC0+U2hhcmVkS2V5W2FwaWR4XVtLZXlJRF0uQ2lwaGVyQWxnLAkJXAotCQkJCQkJICBwQWQtPlNoYXJlZEtleVthcGlkeF1bS2V5SURdLktleSwJCQkJXAotCQkJCQkJICBwQWQtPlNoYXJlZEtleVthcGlkeF1bS2V5SURdLlR4TWljLAkJCVwKLQkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbYXBpZHhdW0tleUlEXS5SeE1pYyk7CQkJXAotCQkvKiB1cGRhdGUgQVNJQyBXQ0lEIGF0dHJpYnV0ZSB0YWJsZSBhbmQgSVZFSVYgdGFibGUgKi8JCQlcCi0JCVJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnkocEFkLCBhcGlkeCwgS2V5SUQsCQkJCQlcCi0JCQkJCQkgIHBBZC0+U2hhcmVkS2V5W2FwaWR4XVtLZXlJRF0uQ2lwaGVyQWxnLAkJXAotCQkJCQkJICBwRW50cnkpOyB9Ci0KLS8qIEluc2VydCB0aGUgQkEgYml0bWFwIHRvIEFTSUMgZm9yIHRoZSBXY2lkIGVudHJ5ICovCi0jZGVmaW5lIFJUTVBfQUREX0JBX1NFU1NJT05fVE9fQVNJQyhfcEFkLCBfQWlkLCBfVElEKQlcCi0JCWRvIHsJCQkJCVwKLQkJCXUzMiBfVmFsdWUgPSAwLCBfT2Zmc2V0OwkJCQkJXAotCQkJX09mZnNldCA9IE1BQ19XQ0lEX0JBU0UgKyAoX0FpZCkgKiBIV19XQ0lEX0VOVFJZX1NJWkUgKyA0OwlcCi0JCQlSVE1QX0lPX1JFQUQzMigoX3BBZCksIF9PZmZzZXQsICZfVmFsdWUpO1wKLQkJCV9WYWx1ZSB8PSAoMHgxMDAwMDw8KF9USUQpKTsJXAotCQkJUlRNUF9JT19XUklURTMyKChfcEFkKSwgX09mZnNldCwgX1ZhbHVlKTtcCi0JCX0gd2hpbGUgKDApCi0KLS8qIFJlbW92ZSB0aGUgQkEgYml0bWFwIGZyb20gQVNJQyBmb3IgdGhlIFdjaWQgZW50cnkgKi8KLS8qICAgICAgICAgICAgICBiaXRtYXAgZmllbGQgc3RhcnRzIGF0IDB4MTAwMDAgaW4gQVNJQyBXQ0lEIHRhYmxlICovCi0jZGVmaW5lIFJUTVBfREVMX0JBX1NFU1NJT05fRlJPTV9BU0lDKF9wQWQsIF9XY2lkLCBfVElEKQkJCQlcCi0JCWRvIHsJCQkJCQkJCVwKLQkJCXUzMiBfVmFsdWUgPSAwLCBfT2Zmc2V0OwkJCQlcCi0JCQlfT2Zmc2V0ID0gTUFDX1dDSURfQkFTRSArIChfV2NpZCkgKiBIV19XQ0lEX0VOVFJZX1NJWkUgKyA0OwlcCi0JCQlSVE1QX0lPX1JFQUQzMigoX3BBZCksIF9PZmZzZXQsICZfVmFsdWUpOwkJCVwKLQkJCV9WYWx1ZSAmPSAofigweDEwMDAwIDw8IChfVElEKSkpOwkJCQlcCi0JCQlSVE1QX0lPX1dSSVRFMzIoKF9wQWQpLCBfT2Zmc2V0LCBfVmFsdWUpOwkJCVwKLQkJfSB3aGlsZSAoMCkKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0gSW50ZXJmYWNlIFJlbGF0ZWQgTUFDUk8gLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyogKi8KLS8qIEVuYWJsZSAmIERpc2FibGUgTklDIGludGVycnVwdCB2aWEgd3JpdGluZyBpbnRlcnJ1cHQgbWFzayByZWdpc3RlciAqLwotLyogU2luY2UgaXQgdXNlIEFEQVBURVIgc3RydWN0dXJlLCBpdCBoYXZlIHRvIGJlIHB1dCBhZnRlciBzdHJ1Y3R1cmUgZGVmaW5pdGlvbi4gKi8KLS8qICovCi0jZGVmaW5lIFJUTVBfQVNJQ19JTlRFUlJVUFRfRElTQUJMRShfcEFkKQkJXAotCWRvIHsJCQlcCi0JCVJUTVBfSU9fV1JJVEUzMigoX3BBZCksIElOVF9NQVNLX0NTUiwgMHgwKTsgICAgIC8qIDA6IGRpc2FibGUgKi8JXAotCQlSVE1QX0NMRUFSX0ZMQUcoKF9wQWQpLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9BQ1RJVkUpOwkJXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgUlRNUF9BU0lDX0lOVEVSUlVQVF9FTkFCTEUoX3BBZClcCi0JZG8gewkJCQlcCi0JCVJUTVBfSU9fV1JJVEUzMigoX3BBZCksIElOVF9NQVNLX0NTUiwgKF9wQWQpLT5pbnRfZW5hYmxlX3JlZyAvKkRFTEFZSU5UTUFTSyovKTsgICAgIC8qIDE6ZW5hYmxlICovCVwKLQkJUlRNUF9TRVRfRkxBRygoX3BBZCksIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0FDVElWRSk7CVwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFJUTVBfSVJRX0lOSVQocEFkKQlcCi0JewlwQWQtPmludF9lbmFibGVfcmVnID0gKChERUxBWUlOVE1BU0spIHwJCVwKLQkJCQkJKFJ4SU5UfFR4RGF0YUludHxUeE1nbXRJbnQpKSAmIH4oMHgwMyk7CVwKLQkJcEFkLT5pbnRfZGlzYWJsZV9tYXNrID0gMDsJCQkJCQlcCi0JCXBBZC0+aW50X3BlbmRpbmcgPSAwOyB9Ci0KLSNkZWZpbmUgUlRNUF9JUlFfRU5BQkxFKHBBZCkJCQkJCVwKLQl7CS8qIGNsZWFyIGdhcmJhZ2UgaW50cyAqLwkJCVwKLQkJUlRNUF9JT19XUklURTMyKHBBZCwgSU5UX1NPVVJDRV9DU1IsIDB4ZmZmZmZmZmYpO1wKLQkJUlRNUF9BU0lDX0lOVEVSUlVQVF9FTkFCTEUocEFkKTsgfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLSBNTE1FIFJlbGF0ZWQgTUFDUk8gLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSNkZWZpbmUgUlRNUF9NTE1FX0hBTkRMRVIocEFkKQkJCU1sbWVIYW5kbGVyKHBBZCkKLQotI2RlZmluZSBSVE1QX01MTUVfUFJFX1NBTklUWV9DSEVDSyhwQWQpCi0KLSNkZWZpbmUgUlRNUF9NTE1FX1NUQV9RVUlDS19SU1BfV0FLRV9VUChwQWQpCVwKLQkJUlRNUFNldFRpbWVyKCZwQWQtPlN0YUNmZy5TdGFRdWlja1Jlc3BvbmVGb3JSYXRlVXBUaW1lciwgMTAwKTsKLQotI2RlZmluZSBSVE1QX01MTUVfUkVTRVRfU1RBVEVfTUFDSElORShwQWQpCVwKLQkJTWxtZVJlc3RhcnRTdGF0ZU1hY2hpbmUocEFkKQotCi0jZGVmaW5lIFJUTVBfSEFORExFX0NPVU5URVJfTUVBU1VSRShfcEFkLCBfcEVudHJ5KVwKLQkJSGFuZGxlQ291bnRlck1lYXN1cmUoX3BBZCwgX3BFbnRyeSkKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0gUG93ZXIgU2F2ZSBSZWxhdGVkIE1BQ1JPIC0tLS0tLS0tLS0tLS0tLS0tICovCi0jZGVmaW5lIFJUTVBfUFNfUE9MTF9FTlFVRVVFKHBBZCkJCQkJRW5xdWV1ZVBzUG9sbChwQWQpCi0KLS8qIEZvciBSVE1QUENJZVBvd2VyTGlua0N0cmxSZXN0b3JlICgpIGZ1bmN0aW9uICovCi0jZGVmaW5lIFJFU1RPUkVfSEFMVAkJMQotI2RlZmluZSBSRVNUT1JFX1dBS0VVUAkJMgotI2RlZmluZSBSRVNUT1JFX0NMT1NFICAgICAgICAgICAzCi0KLSNkZWZpbmUgUG93ZXJTYWZlQ0lECQkxCi0jZGVmaW5lIFBvd2VyUmFkaW9PZmZDSUQJMgotI2RlZmluZSBQb3dlcldha2VDSUQJCTMKLSNkZWZpbmUgQ0lEME1BU0sJCTB4MDAwMDAwZmYKLSNkZWZpbmUgQ0lEMU1BU0sJCTB4MDAwMGZmMDAKLSNkZWZpbmUgQ0lEMk1BU0sJCTB4MDBmZjAwMDAKLSNkZWZpbmUgQ0lEM01BU0sJCTB4ZmYwMDAwMDAKLQotI2RlZmluZSBSVE1QX1NUQV9GT1JDRV9XQUtFVVAocEFkLCBiRnJvbVR4KSBcCi0gICAgUlQyOHh4UGNpU3RhQXNpY0ZvcmNlV2FrZXVwKHBBZCwgYkZyb21UeCk7Ci0KLSNkZWZpbmUgUlRNUF9TVEFfU0xFRVBfVEhFTl9BVVRPX1dBS0VVUChwQWQsIFRidHROdW1Ub05leHRXYWtlVXApIFwKLSAgICBSVDI4eHhQY2lTdGFBc2ljU2xlZXBUaGVuQXV0b1dha2V1cChwQWQsIFRidHROdW1Ub05leHRXYWtlVXApOwotCi0jZGVmaW5lIFJUTVBfU0VUX1BTTV9CSVQoX3BBZCwgX3ZhbCkgXAotCU1sbWVTZXRQc21CaXQoX3BBZCwgX3ZhbCk7Ci0KLSNkZWZpbmUgUlRNUF9NTE1FX1JBRElPX09OKHBBZCkgXAotICAgIFJUMjh4eFBjaU1sbWVSYWRpb09uKHBBZCk7Ci0KLSNkZWZpbmUgUlRNUF9NTE1FX1JBRElPX09GRihwQWQpIFwKLSAgICBSVDI4eHhQY2lNbG1lUmFkaW9PRkYocEFkKTsKLQotI2VuZGlmIC8qX19NQUNfUENJX0hfXyAvLyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jaGlwL21hY191c2IuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY2hpcC9tYWNfdXNiLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4MTU4ZmI1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY2hpcC9tYWNfdXNiLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNDUgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSAgICBNb2R1bGUgTmFtZToKLQkJbWFjX3VzYi5oCi0KLSAgICBBYnN0cmFjdDoKLQotICAgIFJldmlzaW9uIEhpc3Rvcnk6Ci0gICAgV2hvICAgICAgICAgIAlXaGVuICAgICAgICAgICAgV2hhdAotICAgIEp1c3RpbiBQLiBNYXR0b2NrCTExLzA3LzIwMTAJRml4IGEgdHlwbwotICAgIC0tLS0tLS0tLSAgICAtLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi0jaWZuZGVmIF9fTUFDX1VTQl9IX18KLSNkZWZpbmUgX19NQUNfVVNCX0hfXwotCi0jaW5jbHVkZSAiLi4vcnRtcF90eXBlLmgiCi0jaW5jbHVkZSAicnRtcF9tYWMuaCIKLSNpbmNsdWRlICJydG1wX3BoeS5oIgotI2luY2x1ZGUgIi4uL3J0bXBfaWZhY2UuaCIKLSNpbmNsdWRlICIuLi9ydG1wX2RvdDExLmgiCi0KLSNkZWZpbmUgVVNCX0NZQ19DRkcJCQkJMHgwMmE0Ci0KLSNkZWZpbmUgQkVBQ09OX1JJTkdfU0laRQkJMgotI2RlZmluZSBNR01UUElQRUlEWAkJCTAJLyogRVA2IGlzIGhpZ2hlc3QgcHJpb3JpdHkgKi8KLQotI2RlZmluZSBSVE1QX1BLVF9UQUlMX1BBRERJTkcJMTEJLyogMyhtYXggNCBieXRlIHBhZGRpbmcpICsgNCAobGFzdCBwYWNrZXQgcGFkZGluZykgKyA0IChNYXhCdWxrT3V0c2l6ZSBhbGlnbiBwYWRkaW5nKSAqLwotCi0jZGVmaW5lIGZSVE1QX0FEQVBURVJfTkVFRF9TVE9QX1RYCQlcCi0JCShmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QgfCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfAlcCi0JCSBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTIHwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUIHwgXAotCQkgZlJUTVBfQURBUFRFUl9SQURJT19PRkYgfCBmUlRNUF9BREFQVEVSX1JFTU9WRV9JTl9QUk9HUkVTUykKLQotLyogKi8KLS8qIFJYSU5GTyBhcHBlbmRzIGF0IHRoZSBlbmQgb2YgZWFjaCByeCBwYWNrZXQuICovCi0vKiAqLwotI2RlZmluZSBSWElORk9fU0laRQkJCQk0Ci0jZGVmaW5lIFJUMjg3MF9SWERNQUxFTl9GSUVMRF9TSVpFCTQKLQotdHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIHJ0X3J4aW5mbyB7Ci0JdTMyIEJBOjE7Ci0JdTMyIERBVEE6MTsKLQl1MzIgTlVMTERBVEE6MTsKLQl1MzIgRlJBRzoxOwotCXUzMiBVMk06MTsJCS8qIDE6IHRoaXMgUlggZnJhbWUgaXMgdW5pY2FzdCB0byBtZSAqLwotCXUzMiBNY2FzdDoxOwkJLyogMTogdGhpcyBpcyBhIG11bHRpY2FzdCBmcmFtZSAqLwotCXUzMiBCY2FzdDoxOwkJLyogMTogdGhpcyBpcyBhIGJyb2FkY2FzdCBmcmFtZSAqLwotCXUzMiBNeUJzczoxOwkJLyogMTogdGhpcyBmcmFtZSBiZWxvbmdzIHRvIHRoZSBzYW1lIEJTU0lEICovCi0JdTMyIENyYzoxOwkJLyogMTogQ1JDIGVycm9yICovCi0JdTMyIENpcGhlckVycjoyOwkvKiAwOiBkZWNyeXB0aW9uIG9rYXksIDE6SUNWIGVycm9yLCAyOk1JQyBlcnJvciwgMzpLRVkgbm90IHZhbGlkICovCi0JdTMyIEFNU0RVOjE7CQkvKiByeCB3aXRoIDgwMi4zIGhlYWRlciwgbm90IDgwMi4xMSBoZWFkZXIuICovCi0JdTMyIEhUQzoxOwotCXUzMiBSU1NJOjE7Ci0JdTMyIEwyUEFEOjE7Ci0JdTMyIEFNUERVOjE7CQkvKiBUbyBiZSBtb3ZlZCAqLwotCXUzMiBEZWNyeXB0ZWQ6MTsKLQl1MzIgUGxjcFJzc2lsOjE7Ci0JdTMyIENpcGhlckFsZzoxOwotCXUzMiBMYXN0QU1TRFU6MTsKLQl1MzIgUGxjcFNpZ25hbDoxMjsKLX0gUlQyOFhYX1JYRF9TVFJVQywgKlBSVDI4WFhfUlhEX1NUUlVDOwotCi0vKiAqLwotLyogVFhJTkZPICovCi0vKiAqLwotI2RlZmluZSBUWElORk9fU0laRQkJCQk0Ci0KLXN0cnVjdCBydF90eGluZm8gewotCS8qIFdvcmQgMCAqLwotCXUzMiBVU0JETUFUeFBrdExlbjoxNjsJLyp1c2VkIE9OTFkgaW4gVVNCIGJ1bGsgQWdncmVnYXRpb24sICBUb3RhbCBieXRlIGNvdW50cyBvZiBhbGwgc3ViLWZyYW1lLiAqLwotCXUzMiByc3Y6ODsKLQl1MzIgV0lWOjE7CQkvKiBXaXJlbGVzcyBJbmZvIFZhbGlkLiAxIGlmIERyaXZlciBhbHJlYWR5IGZpbGwgV0ksICBvIGlmIERNQSBuZWVkcyB0byBjb3B5IFdJIHRvIGNvcnJlY3QgcG9zaXRpb24gKi8KLQl1MzIgUVNFTDoyOwkJLyogc2VsZWN0IG9uLWNoaXAgRklGTyBJRCBmb3IgMm5kLXN0YWdlIG91dHB1dCBzY2hlZHVsZXIuMDpNR01ULCAxOkhDQ0EgMjpFRENBICovCi0JdTMyIFN3VXNlTGFzdFJvdW5kOjE7CS8qIFNvZnR3YXJlIHVzZS4gKi8KLQl1MzIgcnN2MjoyOwkJLyogU29mdHdhcmUgdXNlLiAqLwotCXUzMiBVU0JETUFOZXh0VkxEOjE7CS8qdXNlZCBPTkxZIGluIFVTQiBidWxrIEFnZ3JlZ2F0aW9uLCBOZXh0VmFsaWQgKi8KLQl1MzIgVVNCRE1BVHhidXJzdDoxOwkvKnVzZWQgT05MWSBpbiBVU0IgYnVsayBBZ2dyZS4gRm9yY2UgVVNCIERNQSB0cmFuc21pdCBmcmFtZSBmcm9tIGN1cnJlbnQgc2VsZWN0ZWQgZW5kcG9pbnQgKi8KLX07Ci0KLS8qICovCi0vKiBNYW5hZ2VtZW50IHJpbmcgYnVmZmVyIGZvcm1hdCAqLwotLyogKi8KLXN0cnVjdCBydF9tZ210IHsKLQlCT09MRUFOIFZhbGlkOwotCXU4ICpwQnVmZmVyOwotCXVuc2lnbmVkIGxvbmcgTGVuZ3RoOwotfTsKLQotLyovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyAqLwotLyogVGhlIHN0cnVjdCBydF90eF9idWZmZXIgc3RydWN0dXJlIGZvcm1zIHRoZSB0cmFuc21pdHRlZCBVU0IgcGFja2V0IHRvIHRoZSBkZXZpY2UgKi8KLS8qLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gKi8KLXN0cnVjdCBydF90eF9idWZmZXIgewotCXVuaW9uIHsKLQkJdTggV2lyZWxlc3NQYWNrZXRbVFhfQlVGRkVSX05PUk1TSVpFXTsKLQkJc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEgTnVsbEZyYW1lOwotCQlzdHJ1Y3QgcnRfcHNwb2xsX2ZyYW1lIFBzUG9sbFBhY2tldDsKLQkJc3RydWN0IHJ0X3J0c19mcmFtZSBSVFNGcmFtZTsKLQl9IGZpZWxkOwotCXU4IEFnZ3JlZ2F0aW9uWzRdOwkvKkJ1ZmZlciBmb3Igc2F2ZSBBZ2dyZWdhdGlvbiBzaXplLiAqLwotfTsKLQotc3RydWN0IHJ0X2h0dHhfYnVmZmVyIHsKLQl1bmlvbiB7Ci0JCXU4IFdpcmVsZXNzUGFja2V0W01BWF9UWEJVTEtfU0laRV07Ci0JCXN0cnVjdCBydF9oZWFkZXJfODAyXzExIE51bGxGcmFtZTsKLQkJc3RydWN0IHJ0X3BzcG9sbF9mcmFtZSBQc1BvbGxQYWNrZXQ7Ci0JCXN0cnVjdCBydF9ydHNfZnJhbWUgUlRTRnJhbWU7Ci0JfSBmaWVsZDsKLQl1OCBBZ2dyZWdhdGlvbls0XTsJLypCdWZmZXIgZm9yIHNhdmUgQWdncmVnYXRpb24gc2l6ZS4gKi8KLX07Ci0KLS8qIHVzZWQgdG8gdHJhY2sgZHJpdmVyLWdlbmVyYXRlZCB3cml0ZSBpcnBzICovCi1zdHJ1Y3QgcnRfdHhfY29udGV4dCB7Ci0Jdm9pZCAqcEFkOwkJLypJbml0aWFsaXplZCBpbiBNaW5pcG9ydEluaXRpYWxpemUgKi8KLQlQVVJCIHBVcmI7CQkvKkluaXRpYWxpemVkIGluIE1pbmlwb3J0SW5pdGlhbGl6ZSAqLwotCVBJUlAgcElycDsJCS8qdXNlZCB0byBjYW5jZWwgcGVuZGluZyBidWxrIG91dC4gKi8KLQkvKkluaXRpYWxpemVkIGluIE1pbmlwb3J0SW5pdGlhbGl6ZSAqLwotCXN0cnVjdCBydF90eF9idWZmZXIgKlRyYW5zZmVyQnVmZmVyOwkvKkluaXRpYWxpemVkIGluIE1pbmlwb3J0SW5pdGlhbGl6ZSAqLwotCXVuc2lnbmVkIGxvbmcgQnVsa091dFNpemU7Ci0JdTggQnVsa091dFBpcGVJZDsKLQl1OCBTZWxmSWR4OwotCUJPT0xFQU4gSW5Vc2U7Ci0JQk9PTEVBTiBiV2FpdGluZ0J1bGtPdXQ7CS8qIGF0IGxlYXN0IG9uZSBwYWNrZXQgaXMgaW4gdGhpcyBUeENvbnRleHQsIHJlYWR5IGZvciBtYWtpbmcgSVJQIGFueXRpbWUuICovCi0JQk9PTEVBTiBiRnVsbEZvckJ1bGtPdXQ7CS8qIGFsbCB0eCBidWZmZXIgYXJlIGZ1bGwgLCBzbyB3YWl0aW5nIGZvciB0eCBidWxrb3V0LiAqLwotCUJPT0xFQU4gSVJQUGVuZGluZzsKLQlCT09MRUFOIExhc3RPbmU7Ci0JQk9PTEVBTiBiQWdncmVnYXRpYmxlOwotCXU4IEhlYWRlcl84MDJfM1tMRU5HVEhfODAyXzNdOwotCXU4IFJzdlsyXTsKLQl1bnNpZ25lZCBsb25nIERhdGFPZmZzZXQ7Ci0JdTMyIFR4UmF0ZTsKLQlkbWFfYWRkcl90IGRhdGFfZG1hOwkvKiB1cmIgZG1hIG9uIGxpbnV4ICovCi0KLX07Ci0KLS8qIHVzZWQgdG8gdHJhY2sgZHJpdmVyLWdlbmVyYXRlZCB3cml0ZSBpcnBzICovCi1zdHJ1Y3QgcnRfaHRfdHhfY29udGV4dCB7Ci0Jdm9pZCAqcEFkOwkJLypJbml0aWFsaXplZCBpbiBNaW5pcG9ydEluaXRpYWxpemUgKi8KLQlQVVJCIHBVcmI7CQkvKkluaXRpYWxpemVkIGluIE1pbmlwb3J0SW5pdGlhbGl6ZSAqLwotCVBJUlAgcElycDsJCS8qdXNlZCB0byBjYW5jZWwgcGVuZGluZyBidWxrIG91dC4gKi8KLQkvKkluaXRpYWxpemVkIGluIE1pbmlwb3J0SW5pdGlhbGl6ZSAqLwotCXN0cnVjdCBydF9odHR4X2J1ZmZlciAqVHJhbnNmZXJCdWZmZXI7CS8qSW5pdGlhbGl6ZWQgaW4gTWluaXBvcnRJbml0aWFsaXplICovCi0JdW5zaWduZWQgbG9uZyBCdWxrT3V0U2l6ZTsJLyogSW5kaWNhdGUgdGhlIHRvdGFsIGJ1bGstb3V0IHNpemUgaW4gYnl0ZXMgaW4gb25lIGJ1bGstdHJhbnNtaXNzaW9uICovCi0JdTggQnVsa091dFBpcGVJZDsKLQlCT09MRUFOIElSUFBlbmRpbmc7Ci0JQk9PTEVBTiBMYXN0T25lOwotCUJPT0xFQU4gYkN1cldyaXRpbmc7Ci0JQk9PTEVBTiBiUmluZ0VtcHR5OwotCUJPT0xFQU4gYkNvcHlTYXZlUGFkOwotCXU4IFNhdmVkUGFkWzhdOwotCXU4IEhlYWRlcl84MDJfM1tMRU5HVEhfODAyXzNdOwotCXVuc2lnbmVkIGxvbmcgQ3VyV3JpdGVQb3NpdGlvbjsJLyogSW5kaWNhdGUgdGhlIGJ1ZmZlciBvZmZzZXQgd2hpY2ggcGFja2V0IHdpbGwgYmUgaW5zZXJ0ZWQgc3RhcnQgZnJvbS4gKi8KLQl1bnNpZ25lZCBsb25nIEN1cldyaXRlUmVhbFBvczsJLyogSW5kaWNhdGUgdGhlIGJ1ZmZlciBvZmZzZXQgd2hpY2ggcGFja2V0IG5vdyBhcmUgd3JpdGluZyB0by4gKi8KLQl1bnNpZ25lZCBsb25nIE5leHRCdWxrT3V0UG9zaXRpb247CS8qIEluZGljYXRlIHRoZSBidWZmZXIgc3RhcnQgb2Zmc2V0IG9mIGEgYnVsay10cmFuc21pc3Npb24gKi8KLQl1bnNpZ25lZCBsb25nIEVOZXh0QnVsa091dFBvc2l0aW9uOwkvKiBJbmRpY2F0ZSB0aGUgYnVmZmVyIGVuZCBvZmZzZXQgb2YgYSBidWxrLXRyYW5zbWlzc2lvbiAqLwotCXUzMiBUeFJhdGU7Ci0JZG1hX2FkZHJfdCBkYXRhX2RtYTsJLyogdXJiIGRtYSBvbiBsaW51eCAqLwotfTsKLQotLyogKi8KLS8qIFN0cnVjdHVyZSB0byBrZWVwIHRyYWNrIG9mIHJlY2VpdmUgcGFja2V0cyBhbmQgYnVmZmVycyB0byBpbmRpY2F0ZSAqLwotLyogcmVjZWl2ZSBkYXRhIHRvIHRoZSBwcm90b2NvbC4gKi8KLS8qICovCi1zdHJ1Y3QgcnRfcnhfY29udGV4dCB7Ci0JdTggKlRyYW5zZmVyQnVmZmVyOwotCXZvaWQgKnBBZDsKLQlQSVJQIHBJcnA7CQkvKnVzZWQgdG8gY2FuY2VsIHBlbmRpbmcgYnVsayBpbi4gKi8KLQlQVVJCIHBVcmI7Ci0JLypUaGVzZSAyIEJvb2xlYW4gc2hvdWxkbid0IGJvdGggYmUgMSBhdCB0aGUgc2FtZSB0aW1lLiAqLwotCXVuc2lnbmVkIGxvbmcgQnVsa0luT2Zmc2V0OwkvKiBudW1iZXIgb2YgcGFja2V0cyB3YWl0aW5nIGZvciByZW9yZGVyaW5nIC4gKi8KLS8qICAgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICBSZW9yZGVySW5Vc2U7ICAgLy8gQXQgbGVhc3Qgb25lIHBhY2tldCBpbiB0aGlzIGJ1ZmZlciBhcmUgaW4gcmVvcmRlcmluZyBidWZmZXIgYW5kIHdhaXQgZm9yIHJlY2VpdmUgaW5kaWNhdGlvbiAqLwotCUJPT0xFQU4gYlJ4SGFuZGxpbmc7CS8qIE5vdGlmeSB0aGlzIHBhY2tldCBpcyBiZWluZyBwcm9jZXNzIG5vdy4gKi8KLQlCT09MRUFOIEluVXNlOwkJLyogVVNCIEhhcmR3YXJlIE9jY3VwaWVkLiBXYWl0IGZvciBVU0IgSFcgdG8gcHV0IHBhY2tldC4gKi8KLQlCT09MRUFOIFJlYWRhYmxlOwkvKiBSZWNlaXZlIENvbXBsZXRlIGJhY2suIE9LIGZvciBkcml2ZXIgdG8gaW5kaWNhdGUgcmVjZWl2aW5nIHBhY2tldC4gKi8KLQlCT09MRUFOIElSUFBlbmRpbmc7CS8qIFRPRE86IFRvIGJlIHJlbW92ZWQgKi8KLQlhdG9taWNfdCBJcnBMb2NrOwotCXNwaW5sb2NrX3QgUnhDb250ZXh0TG9jazsKLQlkbWFfYWRkcl90IGRhdGFfZG1hOwkvKiB1cmIgZG1hIG9uIGxpbnV4ICovCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLQlVU0IgRnJpbXdhcmUgUmVsYXRlZCBNQUNSTwotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiA4MDUxIGZpcm13YXJlIGltYWdlIGZvciB1c2IgLSB1c2UgbGFzdC1oYWxmIGJhc2UgYWRkcmVzcyA9IDB4MzAwMCAqLwotI2RlZmluZSBGSVJNV0FSRV9JTUFHRV9CQVNFCQkJMHgzMDAwCi0jZGVmaW5lIE1BWF9GSVJNV0FSRV9JTUFHRV9TSVpFCQkweDEwMDAJLyogNGtieXRlICovCi0KLSNkZWZpbmUgUlRNUF9XUklURV9GSVJNV0FSRShfcEFkLCBfcEZ3SW1hZ2UsIF9Gd0xlbikJCVwKLQlSVFVTQkZpcm13YXJlV3JpdGUoX3BBZCwgX3BGd0ltYWdlLCBfRndMZW4pCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotCVVTQiBUWCBSZWxhdGVkIE1BQ1JPCi0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgUlRNUF9TVEFSVF9ERVFVRVVFKHBBZCwgUXVlSWR4LCBpcnFGbGFncykJCQkJXAotCQkJZG8gewkJCQkJCQkJCQkJCQlcCi0JCQkJUlRNUF9JUlFfTE9DSygmcEFkLT5EZVF1ZXVlTG9ja1tRdWVJZHhdLCBpcnFGbGFncyk7CQlcCi0JCQkJaWYgKHBBZC0+RGVRdWV1ZVJ1bm5pbmdbUXVlSWR4XSkgewkJCQkJCVwKLQkJCQkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkRlUXVldWVMb2NrW1F1ZUlkeF0sIGlycUZsYWdzKTsgXAotCQkJCQlEQkdQUklOVChSVF9ERUJVR19PRkYsICgiRGVRdWV1ZVJ1bm5pbmdbJWRdPSBUUlVFIVxuIiwgUXVlSWR4KSk7CQlcCi0JCQkJCWNvbnRpbnVlOwkJCQkJCQkJCQkJXAotCQkJCX0gZWxzZSB7CQkJCQkJCQkJCQkJXAotCQkJCQlwQWQtPkRlUXVldWVSdW5uaW5nW1F1ZUlkeF0gPSBUUlVFOwkJCQkJXAotCQkJCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+RGVRdWV1ZUxvY2tbUXVlSWR4XSwgaXJxRmxhZ3MpO1wKLQkJCQl9CQkJCQkJCQkJCQkJCQlcCi0JCQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFJUTVBfU1RPUF9ERVFVRVVFKHBBZCwgUXVlSWR4LCBpcnFGbGFncykJCQkJCQlcCi0JCQlkbyB7CQkJCQkJCQkJCQkJCVwKLQkJCQlSVE1QX0lSUV9MT0NLKCZwQWQtPkRlUXVldWVMb2NrW1F1ZUlkeF0sIGlycUZsYWdzKTsJCVwKLQkJCQlwQWQtPkRlUXVldWVSdW5uaW5nW1F1ZUlkeF0gPSBGQUxTRTsJCQkJCVwKLQkJCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+RGVRdWV1ZUxvY2tbUXVlSWR4XSwgaXJxRmxhZ3MpOwlcCi0JCQl9IHdoaWxlICgwKQotCi0jZGVmaW5lCVJUTVBfSEFTX0VOT1VHSF9GUkVFX0RFU0MocEFkLCBwVHhCbGssIGZyZWVOdW0sIHBQYWNrZXQpIFwKLQkJKFJUVVNCRnJlZURlc2NyaXB0b3JSZXF1ZXN0KHBBZCwgcFR4QmxrLT5RdWVJZHgsIChwVHhCbGstPlRvdGFsRnJhbWVMZW4gKyBHRVRfT1NfUEtUX0xFTihwUGFja2V0KSkpID09IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCi0KLSNkZWZpbmUgUlRNUF9SRUxFQVNFX0RFU0NfUkVTT1VSQ0UocEFkLCBRdWVJZHgpCQkJXAotCQlkbyB7fSB3aGlsZSAoMCkKLQotI2RlZmluZSBORUVEX1FVRVVFX0JBQ0tfRk9SX0FHRyhfcEFkLCBfUXVlSWR4LCBfZnJlZU51bSwgX1R4RnJhbWVUeXBlKQkJXAotCQkoKF9UeEZyYW1lVHlwZSA9PSBUWF9SQUxJTktfRlJBTUUpICYmIFwKLQkJKFJUVVNCTmVlZFF1ZXVlQmFja0ZvckFnZyhfcEFkLCBfUXVlSWR4KSkpCi0KLSNkZWZpbmUgSEFMX1dyaXRlU3ViVHhSZXNvdXJjZShwQWQsIHBUeEJsaywgYklzTGFzdCwgcEZyZWVOdW1iZXIpCVwKLQkJUnRtcFVTQl9Xcml0ZVN1YlR4UmVzb3VyY2UocEFkLCBwVHhCbGssIGJJc0xhc3QsIHBGcmVlTnVtYmVyKQotCi0jZGVmaW5lIEhBTF9Xcml0ZVR4UmVzb3VyY2UocEFkLCBwVHhCbGssIGJJc0xhc3QsIHBGcmVlTnVtYmVyKQlcCi0JCVJ0bXBVU0JfV3JpdGVTaW5nbGVUeFJlc291cmNlKHBBZCwgcFR4QmxrLCBiSXNMYXN0LCBwRnJlZU51bWJlcikKLQotI2RlZmluZSBIQUxfV3JpdGVGcmFnVHhSZXNvdXJjZShwQWQsIHBUeEJsaywgZnJhZ051bSwgcEZyZWVOdW1iZXIpIFwKLQkJUnRtcFVTQl9Xcml0ZUZyYWdUeFJlc291cmNlKHBBZCwgcFR4QmxrLCBmcmFnTnVtLCBwRnJlZU51bWJlcikKLQotI2RlZmluZSBIQUxfV3JpdGVNdWx0aVR4UmVzb3VyY2UocEFkLCBwVHhCbGssIGZyYW1lTnVtLCBwRnJlZU51bWJlcikJXAotCQlSdG1wVVNCX1dyaXRlTXVsdGlUeFJlc291cmNlKHBBZCwgcFR4QmxrLCBmcmFtZU51bSwgcEZyZWVOdW1iZXIpCi0KLSNkZWZpbmUgSEFMX0ZpbmFsV3JpdGVUeFJlc291cmNlKHBBZCwgcFR4QmxrLCB0b3RhbE1QRFVTaXplLCBUeElkeCkJXAotCQlSdG1wVVNCX0ZpbmFsV3JpdGVUeFJlc291cmNlKHBBZCwgcFR4QmxrLCB0b3RhbE1QRFVTaXplLCBUeElkeCkKLQotI2RlZmluZSBIQUxfTGFzdFR4SWR4KHBBZCwgUXVlSWR4LCBUeElkeCkgXAotCQkJCS8qUnRtcFVTQkRhdGFMYXN0VHhJZHgocEFkLCBRdWVJZHgsVHhJZHgpICovCi0KLSNkZWZpbmUgSEFMX0tpY2tPdXRUeChwQWQsIHBUeEJsaywgUXVlSWR4KQlcCi0JCQlSdG1wVVNCRGF0YUtpY2tPdXQocEFkLCBwVHhCbGssIFF1ZUlkeCkKLQotI2RlZmluZSBIQUxfS2lja091dE1nbXRUeChwQWQsIFF1ZUlkeCwgcFBhY2tldCwgcFNyY0J1ZlZBLCBTcmNCdWZMZW4pCVwKLQkJCVJ0bXBVU0JNZ210S2lja091dChwQWQsIFF1ZUlkeCwgcFBhY2tldCwgcFNyY0J1ZlZBLCBTcmNCdWZMZW4pCi0KLSNkZWZpbmUgSEFMX0tpY2tPdXROdWxsRnJhbWVUeChfcEFkLCBfUXVlSWR4LCBfcE51bGxGcmFtZSwgX2ZyYW1lTGVuKQlcCi0JCQlSdG1wVVNCTnVsbEZyYW1lS2lja091dChfcEFkLCBfUXVlSWR4LCBfcE51bGxGcmFtZSwgX2ZyYW1lTGVuKQotCi0jZGVmaW5lIEdFVF9UWFJJTkdfRlJFRU5PKF9wQWQsIF9RdWVJZHgpCShfUXVlSWR4KQkvKihfcEFkLT5UeFJpbmdbX1F1ZUlkeF0uVHhTd0ZyZWVJZHgpICovCi0jZGVmaW5lIEdFVF9NR01UUklOR19GUkVFTk8oX3BBZCkJCQkoX3BBZC0+TWdtdFJpbmcuVHhTd0ZyZWVJZHgpCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tIFJYIFJlbGF0ZWQgTUFDUk8gLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAgKglEZXZpY2UgSGFyZHdhcmUgSW50ZXJmYWNlIFJlbGF0ZWQgTUFDUk8KLSAgKi8KLSNkZWZpbmUgUlRNUF9JUlFfSU5JVChwQWQpCQkJCWRvIHt9IHdoaWxlICgwKQotI2RlZmluZSBSVE1QX0lSUV9FTkFCTEUocEFkKQkJCWRvIHt9IHdoaWxlICgwKQotCi0vKgotICAqCU1MTUUgUmVsYXRlZCBNQUNSTwotICAqLwotI2RlZmluZSBSVE1QX01MTUVfSEFORExFUihwQWQpCQkJUlRVU0JNbG1lVXAocEFkKQotCi0jZGVmaW5lIFJUTVBfTUxNRV9QUkVfU0FOSVRZX0NIRUNLKHBBZCkJCQkJCQkJCVwKLQl7CWlmICgocEFkLT5Db21tb25DZmcuYkhhcmR3YXJlUmFkaW8gPT0gVFJVRSkgJiYJCQkJCVwKLQkJCSghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSAmJgkJXAotCQkJKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUykpKSB7CVwKLQkJCVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKHBBZCwgQ01EVEhSRUFEX0NIRUNLX0dQSU8sIE5VTEwsIDApOyB9IH0KLQotI2RlZmluZSBSVE1QX01MTUVfU1RBX1FVSUNLX1JTUF9XQUtFX1VQKHBBZCkJXAotCXsJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBDTURUSFJFQURfUUtFUklPRElDX0VYRUNVVCwgTlVMTCwgMCk7CVwKLQkJUlRVU0JNbG1lVXAocEFkKTsgfQotCi0jZGVmaW5lIFJUTVBfTUxNRV9SRVNFVF9TVEFURV9NQUNISU5FKHBBZCkJXAotCXsJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX1JFU0VUX0NPTkYsIDAsIE5VTEwpOwlcCi0JCVJUVVNCTWxtZVVwKHBBZCk7IH0KLQotI2RlZmluZSBSVE1QX0hBTkRMRV9DT1VOVEVSX01FQVNVUkUoX3BBZCwgX3BFbnRyeSkJCVwKLQl7CVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKF9wQWQsIENNRFRIUkVBRF84MDJfMTFfQ09VTlRFUl9NRUFTVVJFLCBfcEVudHJ5LCBzaXplb2Yoc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSkpOwlcCi0JCVJUVVNCTWxtZVVwKF9wQWQpOwkJCQkJCQkJCVwKLQl9Ci0KLS8qCi0gICoJUG93ZXIgU2F2ZSBSZWxhdGVkIE1BQ1JPCi0gICovCi0jZGVmaW5lIFJUTVBfUFNfUE9MTF9FTlFVRVVFKHBBZCkJCQkJCQlcCi0JewlSVFVTQl9TRVRfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX1BTUE9MTCk7CVwKLQkJUlRVU0JLaWNrQnVsa091dChwQWQpOyB9Ci0KLSNkZWZpbmUgUlRNUF9TVEFfRk9SQ0VfV0FLRVVQKF9wQWQsIGJGcm9tVHgpIFwKLQlSVDI4eHhVc2JTdGFBc2ljRm9yY2VXYWtldXAoX3BBZCwgYkZyb21UeCk7Ci0KLSNkZWZpbmUgUlRNUF9TVEFfU0xFRVBfVEhFTl9BVVRPX1dBS0VVUChwQWQsIFRidHROdW1Ub05leHRXYWtlVXApIFwKLSAgICBSVDI4eHhVc2JTdGFBc2ljU2xlZXBUaGVuQXV0b1dha2V1cChwQWQsIFRidHROdW1Ub05leHRXYWtlVXApOwotCi0jZGVmaW5lIFJUTVBfU0VUX1BTTV9CSVQoX3BBZCwgX3ZhbCkgXAotCXtcCi0JCWlmICgoX3BBZCktPlN0YUNmZy5XaW5kb3dzUG93ZXJNb2RlID09IE5kaXM4MDJfMTFQb3dlck1vZGVGYXN0X1BTUCkgXAotCQkJTWxtZVNldFBzbUJpdChfcEFkLCBfdmFsKTtcCi0JCWVsc2UgeyBcCi0JCQl1MTYgX3BzbV92YWw7IFwKLQkJCV9wc21fdmFsID0gX3ZhbDsgXAotCQkJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQoX3BBZCwgQ01EVEhSRUFEX1NFVF9QU01fQklULCAmKF9wc21fdmFsKSwgc2l6ZW9mKHUxNikpOyBcCi0JCX0gXAotCX0KLQotI2RlZmluZSBSVE1QX01MTUVfUkFESU9fT04ocEFkKSBcCi0gICAgUlQyOHh4VXNiTWxtZVJhZGlvT24ocEFkKTsKLQotI2RlZmluZSBSVE1QX01MTUVfUkFESU9fT0ZGKHBBZCkgXAotICAgIFJUMjh4eFVzYk1sbWVSYWRpb09GRihwQWQpOwotCi0jZW5kaWYgLypfX01BQ19VU0JfSF9fIC8vICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NoaXAvcnQyODYwLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NoaXAvcnQyODYwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzMGI4MDguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jaGlwL3J0Mjg2MC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKi8KLQotI2lmbmRlZiBfX1JUMjg2MF9IX18KLSNkZWZpbmUgX19SVDI4NjBfSF9fCi0KLSNpbmNsdWRlICJtYWNfcGNpLmgiCi0KLSNpZm5kZWYgUlRNUF9QQ0lfU1VQUE9SVAotI2Vycm9yICJGb3IgUlQyODYwLCB5b3Ugc2hvdWxkIGRlZmluZSB0aGUgY29tcGlsZSBmbGFnIC1EUlRNUF9QQ0lfU1VQUE9SVCIKLSNlbmRpZgotCi0jaWZuZGVmIFJUTVBfTUFDX1BDSQotI2Vycm9yICJGb3IgUlQyODgwLCB5b3Ugc2hvdWxkIGRlZmluZSB0aGUgY29tcGlsZSBmbGFnIC1EUlRNUF9NQUNfUENJIgotI2VuZGlmCi0KLS8qICovCi0vKiBEZXZpY2UgSUQgJiBWZW5kb3IgSUQsIHRoZXNlIHZhbHVlcyBzaG91bGQgbWF0Y2ggRUVQUk9NIHZhbHVlICovCi0vKiAqLwotI2RlZmluZSBOSUMyODYwX1BDSV9ERVZJQ0VfSUQJMHgwNjAxCi0jZGVmaW5lIE5JQzI4NjBfUENJZV9ERVZJQ0VfSUQJMHgwNjgxCi0jZGVmaW5lIE5JQzI3NjBfUENJX0RFVklDRV9JRAkweDA3MDEJLyogMVQvMlIgQ2FyZGJ1cyA/Pz8gKi8KLSNkZWZpbmUgTklDMjc5MF9QQ0llX0RFVklDRV9JRCAgMHgwNzgxCS8qIDFULzJSIG1pbmlDYXJkICovCi0KLSNkZWZpbmUgVkVOX0FXVF9QQ0llX0RFVklDRV9JRAkweDEwNTkKLSNkZWZpbmUgVkVOX0FXVF9QQ0lfVkVORE9SX0lECQkweDFBM0IKLQotI2RlZmluZSBFRElNQVhfUENJX1ZFTkRPUl9JRAkJMHgxNDMyCi0KLSNlbmRpZiAvKl9fUlQyODYwX0hfXyAvLyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jaGlwL3J0Mjg3MC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jaGlwL3J0Mjg3MC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjYzZjFiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY2hpcC9ydDI4NzAuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUmFsaW5rIFRlY2ggSW5jLgotICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAotICogSHNpbmNodSBDb3VudHkgMzAyLAotICogVGFpd2FuLCBSLk8uQy4KLSAqCi0gKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICovCi0jaWZuZGVmIF9fUlQyODcwX0hfXwotI2RlZmluZSBfX1JUMjg3MF9IX18KLQotI2lmZGVmIFJUMjg3MAotCi0jaWZuZGVmIFJUTVBfVVNCX1NVUFBPUlQKLSNlcnJvciAiRm9yIFJUMjg3MCwgeW91IHNob3VsZCBkZWZpbmUgdGhlIGNvbXBpbGUgZmxhZyAtRFJUTVBfVVNCX1NVUFBPUlQiCi0jZW5kaWYKLQotI2lmbmRlZiBSVE1QX01BQ19VU0IKLSNlcnJvciAiRm9yIFJUMjg3MCwgeW91IHNob3VsZCBkZWZpbmUgdGhlIGNvbXBpbGUgZmxhZyAtRFJUTVBfTUFDX1VTQiIKLSNlbmRpZgotCi0jaW5jbHVkZSAiLi4vcnRtcF90eXBlLmgiCi0jaW5jbHVkZSAibWFjX3VzYi5oIgotCi0vKiNkZWZpbmUgUlRNUF9DSElQX05BTUUgICAgICAgICAgICAgICAgIlJUMjg3MCIgKi8KLQotI2VuZGlmIC8qIFJUMjg3MCAvLyAqLwotI2VuZGlmIC8qX19SVDI4NzBfSF9fIC8vICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NoaXAvcnQzMDcwLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NoaXAvcnQzMDcwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3MmNlNzAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jaGlwL3J0MzA3MC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSAgICBNb2R1bGUgTmFtZToKLQlydDMwNzAuaAotCi0gICAgQWJzdHJhY3Q6Ci0KLSAgICBSZXZpc2lvbiBIaXN0b3J5OgotICAgIFdobyAgICAgICAgICBXaGVuICAgICAgICAgIFdoYXQKLSAgICAtLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotI2lmbmRlZiBfX1JUMzA3MF9IX18KLSNkZWZpbmUgX19SVDMwNzBfSF9fCi0KLSNpZmRlZiBSVDMwNzAKLQotI2lmbmRlZiBSVE1QX1VTQl9TVVBQT1JUCi0jZXJyb3IgIkZvciBSVDMwNzAsIHlvdSBzaG91bGQgZGVmaW5lIHRoZSBjb21waWxlIGZsYWcgLURSVE1QX1VTQl9TVVBQT1JUIgotI2VuZGlmCi0KLSNpZm5kZWYgUlRNUF9NQUNfVVNCCi0jZXJyb3IgIkZvciBSVDMwNzAsIHlvdSBzaG91bGQgZGVmaW5lIHRoZSBjb21waWxlIGZsYWcgLURSVE1QX01BQ19VU0IiCi0jZW5kaWYKLQotI2lmbmRlZiBSVE1QX1JGX1JXX1NVUFBPUlQKLSNlcnJvciAiRm9yIFJUMzA3MCwgeW91IHNob3VsZCBkZWZpbmUgdGhlIGNvbXBpbGUgZmxhZyAtRFJUTVBfUkZfUldfU1VQUE9SVCIKLSNlbmRpZgotCi0jaWZuZGVmIFJUMzB4eAotI2Vycm9yICJGb3IgUlQzMDcwLCB5b3Ugc2hvdWxkIGRlZmluZSB0aGUgY29tcGlsZSBmbGFnIC1EUlQzMHh4IgotI2VuZGlmCi0KLSNpbmNsdWRlICJtYWNfdXNiLmgiCi0jaW5jbHVkZSAicnQzMHh4LmgiCi0KLS8qICovCi0vKiBEZXZpY2UgSUQgJiBWZW5kb3IgSUQsIHRoZXNlIHZhbHVlcyBzaG91bGQgbWF0Y2ggRUVQUk9NIHZhbHVlICovCi0vKiAqLwotCi0jZW5kaWYgLyogUlQzMDcwIC8vICovCi0KLSNlbmRpZiAvKl9fUlQzMDcwX0hfXyAvLyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jaGlwL3J0MzA5MC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jaGlwL3J0MzA5MC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDJiOTM4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY2hpcC9ydDMwOTAuaAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUmFsaW5rIFRlY2ggSW5jLgotICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAotICogSHNpbmNodSBDb3VudHkgMzAyLAotICogVGFpd2FuLCBSLk8uQy4KLSAqCi0gKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0gICAgTW9kdWxlIE5hbWU6Ci0JcnQzMDkwLmgKLQotICAgIEFic3RyYWN0OgotCi0gICAgUmV2aXNpb24gSGlzdG9yeToKLSAgICBXaG8gICAgICAgICAgV2hlbiAgICAgICAgICBXaGF0Ci0gICAgLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLSNpZm5kZWYgX19SVDMwOTBfSF9fCi0jZGVmaW5lIF9fUlQzMDkwX0hfXwotCi0jaWZkZWYgUlQzMDkwCi0KLSNpZm5kZWYgUlRNUF9QQ0lfU1VQUE9SVAotI2Vycm9yICJGb3IgUlQzMDkwLCB5b3Ugc2hvdWxkIGRlZmluZSB0aGUgY29tcGlsZSBmbGFnIC1EUlRNUF9QQ0lfU1VQUE9SVCIKLSNlbmRpZgotCi0jaWZuZGVmIFJUTVBfTUFDX1BDSQotI2Vycm9yICJGb3IgUlQzMDkwLCB5b3Ugc2hvdWxkIGRlZmluZSB0aGUgY29tcGlsZSBmbGFnIC1EUlRNUF9NQUNfUENJIgotI2VuZGlmCi0KLSNpZm5kZWYgUlRNUF9SRl9SV19TVVBQT1JUCi0jZXJyb3IgIkZvciBSVDMwOTAsIHlvdSBzaG91bGQgZGVmaW5lIHRoZSBjb21waWxlIGZsYWcgLURSVE1QX1JGX1JXX1NVUFBPUlQiCi0jZW5kaWYKLQotI2lmbmRlZiBSVDMweHgKLSNlcnJvciAiRm9yIFJUMzA5MCwgeW91IHNob3VsZCBkZWZpbmUgdGhlIGNvbXBpbGUgZmxhZyAtRFJUMzB4eCIKLSNlbmRpZgotCi0jZGVmaW5lIFBDSUVfUFNfU1VQUE9SVAotCi0jaW5jbHVkZSAibWFjX3BjaS5oIgotI2luY2x1ZGUgInJ0MzB4eC5oIgotCi0vKiAqLwotLyogRGV2aWNlIElEICYgVmVuZG9yIElELCB0aGVzZSB2YWx1ZXMgc2hvdWxkIG1hdGNoIEVFUFJPTSB2YWx1ZSAqLwotLyogKi8KLSNkZWZpbmUgTklDMzA5MF9QQ0llX0RFVklDRV9JRCAgMHgzMDkwCS8qIDFULzFSIG1pbmlDYXJkICovCi0jZGVmaW5lIE5JQzMwOTFfUENJZV9ERVZJQ0VfSUQgIDB4MzA5MQkvKiAxVC8yUiBtaW5pQ2FyZCAqLwotI2RlZmluZSBOSUMzMDkyX1BDSWVfREVWSUNFX0lEICAweDMwOTIJLyogMlQvMlIgbWluaUNhcmQgKi8KLQotI2VuZGlmIC8qIFJUMzA5MCAvLyAqLwotCi0jZW5kaWYgLypfX1JUMzA5MF9IX18gLy8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY2hpcC9ydDMweHguaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY2hpcC9ydDMweHguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJlMWQ3Mi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NoaXAvcnQzMHh4LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFJhbGluayBUZWNoIEluYy4KLSAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKLSAqIEhzaW5jaHUgQ291bnR5IDMwMiwKLSAqIFRhaXdhbiwgUi5PLkMuCi0gKgotICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotICAgIE1vZHVsZSBOYW1lOgotCXJ0MzB4eC5oCi0KLSAgICBBYnN0cmFjdDoKLQotICAgIFJldmlzaW9uIEhpc3Rvcnk6Ci0gICAgV2hvICAgICAgICAgIFdoZW4gICAgICAgICAgV2hhdAotICAgIC0tLS0tLS0tLSAgICAtLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi0jaWZuZGVmIF9fUlQzMFhYX0hfXwotI2RlZmluZSBfX1JUMzBYWF9IX18KLQotI2lmZGVmIFJUMzB4eAotCi1leHRlcm4gc3RydWN0IHJ0X3JlZ19wYWlyIFJUMzB4eF9SRlJlZ1RhYmxlW107Ci1leHRlcm4gdTggTlVNX1JGX1JFR19QQVJNUzsKLQotI2VuZGlmIC8qIFJUMzB4eCAvLyAqLwotCi0jZW5kaWYgLypfX1JUMzBYWF9IX18gLy8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY2hpcC9ydG1wX21hYy5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jaGlwL3J0bXBfbWFjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkMWU0OTEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jaGlwL3J0bXBfbWFjLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzA4ICswLDAgQEAKLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUmFsaW5rIFRlY2ggSW5jLgotICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAotICogSHNpbmNodSBDb3VudHkgMzAyLAotICogVGFpd2FuLCBSLk8uQy4KLSAqCi0gKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0JTW9kdWxlIE5hbWU6Ci0JcnRtcF9tYWMuaAotCi0JQWJzdHJhY3Q6Ci0JUmFsaW5rIFdpcmVsZXNzIENoaXAgTUFDIHJlbGF0ZWQgZGVmaW5pdGlvbiAmIHN0cnVjdHVyZXMKLQotCVJldmlzaW9uIEhpc3Rvcnk6Ci0JV2hvCQkJV2hlbgkJICBXaGF0Ci0JSnVzdGluIFAuIE1hdHRvY2sJMTEvMDcvMjAxMAkgIEZpeCBhIGNvbW1lbnRzLCBhbmQgdHlwb3MKLQktLS0tLS0tLQktLS0tLS0tLS0tCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQotI2lmbmRlZiBfX1JUTVBfTUFDX0hfXwotI2RlZmluZSBfX1JUTVBfTUFDX0hfXwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLS8qIFRYIC8gUlggcmluZyBkZXNjcmlwdG9yIGZvcm1hdCAqLwotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0KLS8qIHRoZSBmaXJzdCAyNC1ieXRlIGluIFRYRCBpcyBjYWxsZWQgVFhJTkZPIGFuZCB3aWxsIGJlIERNQWVkIHRvIE1BQyBibG9jayB0aHJvdWdoIFRYRklGTy4gKi8KLS8qIE1BQyBibG9jayB1c2VzIHRoaXMgVFhJTkZPIHRvIGNvbnRyb2wgdGhlIHRyYW5zbWlzc2lvbiBiZWhhdmlvciBvZiB0aGlzIGZyYW1lLiAqLwotI2RlZmluZSBGSUZPX01HTVQgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgRklGT19IQ0NBICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIEZJRk9fRURDQSAgICAgICAgICAgICAgICAgMgotCi0vKiAqLwotLyogVFhEIFdpcmVsZXNzIEluZm9ybWF0aW9uIGZvcm1hdCBmb3IgVHggcmluZyBhbmQgTWdtdCBSaW5nICovCi0vKiAqLwotLyp0eG9wIDogZm9yIHR4b3AgbW9kZSAqLwotLyogMDp0eG9wIGZvciB0aGUgTVBEVSBmcmFtZSB3aWxsIGJlIGhhbmRsZXMgYnkgQVNJQyBieSByZWdpc3RlciAqLwotLyogMS8yLzM6dGhlIE1QRFUgZnJhbWUgaXMgc2VuZCBhZnRlciBQSUZTL2JhY2tvZmYvU0lGUyAqLwotc3RydWN0IFBBQ0tFRCBydF90eHdpIHsKLQkvKiBXb3JkIDAgKi8KLQkvKiBleDogMDAgMDMgMDAgNDAgbWVhbnMgdHhvcCA9IDMsIFBIWU1PREUgPSAxICovCi0JdTMyIEZSQUc6MTsJCS8qIDEgdG8gaW5mb3JtIFRLSVAgZW5naW5lIHRoaXMgaXMgYSBmcmFnbWVudC4gKi8KLQl1MzIgTUlNT3BzOjE7CS8qIHRoZSByZW1vdGUgcGVlciBpcyBpbiBkeW5hbWljIE1JTU8tUFMgbW9kZSAqLwotCXUzMiBDRkFDSzoxOwotCXUzMiBUUzoxOwotCi0JdTMyIEFNUERVOjE7Ci0JdTMyIE1wZHVEZW5zaXR5OjM7Ci0JdTMyIHR4b3A6MjsJCS8qRk9SICJUSElTIiBmcmFtZS4gMDpIVCBUWE9QIHJ1bGUgLCAxOlBJRlMgVFggLDI6QmFja29mZiwgMzpzaWZzIG9ubHkgd2hlbiBwcmV2aW91cyBmcmFtZSBleGNoYW5nZSBpcyBzdWNjZXNzZnVsLiAqLwotCXUzMiByc3Y6NjsKLQotCXUzMiBNQ1M6NzsKLQl1MzIgQlc6MTsJCS8qY2hhbm5lbCBiYW5kd2lkdGggMjBNSHogb3IgNDAgTUh6ICovCi0JdTMyIFNob3J0R0k6MTsKLQl1MzIgU1RCQzoyOwkJLyogMTogU1RCQyBzdXBwb3J0IE1DUyA9MC03LCAgIDIsMyA6IFJFU0VSVkUgKi8KLQl1MzIgSWZzOjE7CQkvKiAqLwotLyogICAgICB1MzIgICAgICAgICAgcnN2MjoyOyAvL2NoYW5uZWwgYmFuZHdpZHRoIDIwTUh6IG9yIDQwIE1IeiAqLwotCXUzMiByc3YyOjE7Ci0JdTMyIFR4QkY6MTsJCS8qIDMqMyAqLwotCXUzMiBQSFlNT0RFOjI7Ci0JLyogV29yZDEgKi8KLQkvKiBleDogIDFjIGZmIDM4IDAwIG1lYW5zIEFDSz0wLCBCQVdpblNpemU9NywgTVBEVXRvdGFsQnl0ZUNvdW50ID0gMHgzOCAqLwotCXUzMiBBQ0s6MTsKLQl1MzIgTlNFUToxOwotCXUzMiBCQVdpblNpemU6NjsKLQl1MzIgV2lyZWxlc3NDbGlJRDo4OwotCXUzMiBNUERVdG90YWxCeXRlQ291bnQ6MTI7Ci0JdTMyIFBhY2tldElkOjQ7Ci0JLypXb3JkMiAqLwotCXUzMiBJVjsKLQkvKldvcmQzICovCi0JdTMyIEVJVjsKLX07Ci0KLS8qICovCi0vKiBSWFdJIHdpcmVsZXNzIGluZm9ybWF0aW9uIGZvcm1hdCwgaW4gUEJGLiBpbnZpc2libGUgaW4gZHJpdmVyLiAqLwotLyogKi8KLXN0cnVjdCBQQUNLRUQgcnRfcnh3aSB7Ci0JLyogV29yZCAwICovCi0JdTMyIFdpcmVsZXNzQ2xpSUQ6ODsKLQl1MzIgS2V5SW5kZXg6MjsKLQl1MzIgQlNTSUQ6MzsKLQl1MzIgVURGOjM7Ci0JdTMyIE1QRFV0b3RhbEJ5dGVDb3VudDoxMjsKLQl1MzIgVElEOjQ7Ci0JLyogV29yZCAxICovCi0JdTMyIEZSQUc6NDsKLQl1MzIgU0VRVUVOQ0U6MTI7Ci0JdTMyIE1DUzo3OwotCXUzMiBCVzoxOwotCXUzMiBTaG9ydEdJOjE7Ci0JdTMyIFNUQkM6MjsKLQl1MzIgcnN2OjM7Ci0JdTMyIFBIWU1PREU6MjsJLyogMTogdGhpcyBSWCBmcmFtZSBpcyB1bmljYXN0IHRvIG1lICovCi0JLypXb3JkMiAqLwotCXUzMiBSU1NJMDo4OwotCXUzMiBSU1NJMTo4OwotCXUzMiBSU1NJMjo4OwotCXUzMiByc3YxOjg7Ci0JLypXb3JkMyAqLwotCXUzMiBTTlIwOjg7Ci0JdTMyIFNOUjE6ODsKLQl1MzIgRk9GRlNFVDo4OwkvKiBSVDM1eHggKi8KLQl1MzIgcnN2Mjo4OwotCS8qdTMyICAgICAgICAgICAgICAgIHJzdjI6MTY7ICovCi19OwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLS8qIFJlZ2lzdGVyIGZvcm1hdCAqLwotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0KLS8qICovCi0vKiBTQ0gvRE1BIHJlZ2lzdGVycyAtIGJhc2UgYWRkcmVzcyAweDAyMDAgKi8KLS8qICovCi0vKiBJTlRfU09VUkNFX0NTUjogSW50ZXJydXB0IHNvdXJjZSByZWdpc3Rlci4gV3JpdGUgb25lIHRvIGNsZWFyIGNvcnJlc3BvbmRpbmcgYml0ICovCi0vKiAqLwotI2RlZmluZSBETUFfQ1NSMAkJMHgyMDAKLSNkZWZpbmUgSU5UX1NPVVJDRV9DU1IJCTB4MjAwCi10eXBlZGVmIHVuaW9uIF9JTlRfU09VUkNFX0NTUl9TVFJVQyB7Ci0Jc3RydWN0IHsKLQkJdTMyIFJ4RGVsYXlJTlQ6MTsKLQkJdTMyIFR4RGVsYXlJTlQ6MTsKLQkJdTMyIFJ4RG9uZToxOwotCQl1MzIgQWMwRG1hRG9uZToxOwkvKjQgKi8KLQkJdTMyIEFjMURtYURvbmU6MTsKLQkJdTMyIEFjMkRtYURvbmU6MTsKLQkJdTMyIEFjM0RtYURvbmU6MTsKLQkJdTMyIEhjY2FEbWFEb25lOjE7CS8qIGJpdDcgKi8KLQkJdTMyIE1nbXREbWFEb25lOjE7Ci0JCXUzMiBNQ1VDb21tYW5kSU5UOjE7CS8qYml0IDkgKi8KLQkJdTMyIFJ4VHhDb2hlcmVudDoxOwotCQl1MzIgVEJUVEludDoxOwotCQl1MzIgUHJlVEJUVDoxOwotCQl1MzIgVFhGaWZvU3RhdHVzSW50OjE7CS8qRklGTyBTdGF0aXN0aWNzIGlzIGZ1bGwsIHN3IHNob3VsZCByZWFkIDB4MTcxYyAqLwotCQl1MzIgQXV0b1dha2V1cDoxOwkvKmJpdDE0ICovCi0JCXUzMiBHUFRpbWVyOjE7Ci0JCXUzMiBSeENvaGVyZW50OjE7CS8qYml0MTYgKi8KLQkJdTMyIFR4Q29oZXJlbnQ6MTsKLQkJdTMyOiAxNDsKLQl9IGZpZWxkOwotCXUzMiB3b3JkOwotfSBJTlRfU09VUkNFX0NTUl9TVFJVQywgKlBJTlRfU09VUkNFX0NTUl9TVFJVQzsKLQotLyogKi8KLS8qIElOVF9NQVNLX0NTUjogICBJbnRlcnJ1cHQgTUFTSyByZWdpc3Rlci4gICAxOiB0aGUgaW50ZXJydXB0IGlzIG1hc2sgT0ZGICovCi0vKiAqLwotI2RlZmluZSBJTlRfTUFTS19DU1IgICAgICAgIDB4MjA0Ci10eXBlZGVmIHVuaW9uIF9JTlRfTUFTS19DU1JfU1RSVUMgewotCXN0cnVjdCB7Ci0JCXUzMiBSWERlbGF5X0lOVF9NU0s6MTsKLQkJdTMyIFR4RGVsYXk6MTsKLQkJdTMyIFJ4RG9uZToxOwotCQl1MzIgQWMwRG1hRG9uZToxOwotCQl1MzIgQWMxRG1hRG9uZToxOwotCQl1MzIgQWMyRG1hRG9uZToxOwotCQl1MzIgQWMzRG1hRG9uZToxOwotCQl1MzIgSGNjYURtYURvbmU6MTsKLQkJdTMyIE1nbXREbWFEb25lOjE7Ci0JCXUzMiBNQ1VDb21tYW5kSU5UOjE7Ci0JCXUzMjogMjA7Ci0JCXUzMiBSeENvaGVyZW50OjE7Ci0JCXUzMiBUeENvaGVyZW50OjE7Ci0JfSBmaWVsZDsKLQl1MzIgd29yZDsKLX0gSU5UX01BU0tfQ1NSX1NUUlVDLCAqUElOVF9NQVNLX0NTUl9TVFJVQzsKLQotI2RlZmluZSBXUERNQV9HTE9fQ0ZHCTB4MjA4Ci10eXBlZGVmIHVuaW9uIF9XUERNQV9HTE9fQ0ZHX1NUUlVDIHsKLQlzdHJ1Y3QgewotCQl1MzIgRW5hYmxlVHhETUE6MTsKLQkJdTMyIFR4RE1BQnVzeToxOwotCQl1MzIgRW5hYmxlUnhETUE6MTsKLQkJdTMyIFJ4RE1BQnVzeToxOwotCQl1MzIgV1BETUFCdXJzdFNJWkU6MjsKLQkJdTMyIEVuVFhXcml0ZUJhY2tERE9ORToxOwotCQl1MzIgQmlnRW5kaWFuOjE7Ci0JCXUzMiBSWEhkclNjYXRlcjo4OwotCQl1MzIgSERSX1NFR19MRU46MTY7Ci0JfSBmaWVsZDsKLQl1MzIgd29yZDsKLX0gV1BETUFfR0xPX0NGR19TVFJVQywgKlBXUERNQV9HTE9fQ0ZHX1NUUlVDOwotCi0jZGVmaW5lIFdQRE1BX1JTVF9JRFgJMHgyMGMKLXR5cGVkZWYgdW5pb24gX1dQRE1BX1JTVF9JRFhfU1RSVUMgewotCXN0cnVjdCB7Ci0JCXUzMiBSU1RfRFRYX0lEWDA6MTsKLQkJdTMyIFJTVF9EVFhfSURYMToxOwotCQl1MzIgUlNUX0RUWF9JRFgyOjE7Ci0JCXUzMiBSU1RfRFRYX0lEWDM6MTsKLQkJdTMyIFJTVF9EVFhfSURYNDoxOwotCQl1MzIgUlNUX0RUWF9JRFg1OjE7Ci0JCXUzMiByc3Y6MTA7Ci0JCXUzMiBSU1RfRFJYX0lEWDA6MTsKLQkJdTMyOiAxNTsKLQl9IGZpZWxkOwotCXUzMiB3b3JkOwotfSBXUERNQV9SU1RfSURYX1NUUlVDLCAqUFdQRE1BX1JTVF9JRFhfU1RSVUM7Ci0jZGVmaW5lIERFTEFZX0lOVF9DRkcgIDB4MDIxMAotdHlwZWRlZiB1bmlvbiBfREVMQVlfSU5UX0NGR19TVFJVQyB7Ci0Jc3RydWN0IHsKLQkJdTMyIFJYTUFYX1BUSU1FOjg7Ci0JCXUzMiBSWE1BWF9QSU5UOjc7Ci0JCXUzMiBSWERMWV9JTlRfRU46MTsKLQkJdTMyIFRYTUFYX1BUSU1FOjg7Ci0JCXUzMiBUWE1BWF9QSU5UOjc7Ci0JCXUzMiBUWERMWV9JTlRfRU46MTsKLQl9IGZpZWxkOwotCXUzMiB3b3JkOwotfSBERUxBWV9JTlRfQ0ZHX1NUUlVDLCAqUERFTEFZX0lOVF9DRkdfU1RSVUM7Ci0jZGVmaW5lIFdNTV9BSUZTTl9DRkcgICAweDAyMTQKLXR5cGVkZWYgdW5pb24gX0FJRlNOX0NTUl9TVFJVQyB7Ci0Jc3RydWN0IHsKLQkJdTMyIEFpZnNuMDo0OwkvKiBmb3IgQUNfQkUgKi8KLQkJdTMyIEFpZnNuMTo0OwkvKiBmb3IgQUNfQksgKi8KLQkJdTMyIEFpZnNuMjo0OwkvKiBmb3IgQUNfVkkgKi8KLQkJdTMyIEFpZnNuMzo0OwkvKiBmb3IgQUNfVk8gKi8KLQkJdTMyIFJzdjoxNjsKLQl9IGZpZWxkOwotCXUzMiB3b3JkOwotfSBBSUZTTl9DU1JfU1RSVUMsICpQQUlGU05fQ1NSX1NUUlVDOwotLyogKi8KLS8qIENXTUlOX0NTUjogQ1dtaW4gZm9yIGVhY2ggRURDQSBBQyAqLwotLyogKi8KLSNkZWZpbmUgV01NX0NXTUlOX0NGRyAgIDB4MDIxOAotdHlwZWRlZiB1bmlvbiBfQ1dNSU5fQ1NSX1NUUlVDIHsKLQlzdHJ1Y3QgewotCQl1MzIgQ3dtaW4wOjQ7CS8qIGZvciBBQ19CRSAqLwotCQl1MzIgQ3dtaW4xOjQ7CS8qIGZvciBBQ19CSyAqLwotCQl1MzIgQ3dtaW4yOjQ7CS8qIGZvciBBQ19WSSAqLwotCQl1MzIgQ3dtaW4zOjQ7CS8qIGZvciBBQ19WTyAqLwotCQl1MzIgUnN2OjE2OwotCX0gZmllbGQ7Ci0JdTMyIHdvcmQ7Ci19IENXTUlOX0NTUl9TVFJVQywgKlBDV01JTl9DU1JfU1RSVUM7Ci0KLS8qICovCi0vKiBDV01BWF9DU1I6IENXbWluIGZvciBlYWNoIEVEQ0EgQUMgKi8KLS8qICovCi0jZGVmaW5lIFdNTV9DV01BWF9DRkcgICAweDAyMWMKLXR5cGVkZWYgdW5pb24gX0NXTUFYX0NTUl9TVFJVQyB7Ci0Jc3RydWN0IHsKLQkJdTMyIEN3bWF4MDo0OwkvKiBmb3IgQUNfQkUgKi8KLQkJdTMyIEN3bWF4MTo0OwkvKiBmb3IgQUNfQksgKi8KLQkJdTMyIEN3bWF4Mjo0OwkvKiBmb3IgQUNfVkkgKi8KLQkJdTMyIEN3bWF4Mzo0OwkvKiBmb3IgQUNfVk8gKi8KLQkJdTMyIFJzdjoxNjsKLQl9IGZpZWxkOwotCXUzMiB3b3JkOwotfSBDV01BWF9DU1JfU1RSVUMsICpQQ1dNQVhfQ1NSX1NUUlVDOwotCi0vKiAqLwotLyogQUNfVFhPUF9DU1IwOiBBQ19CSy9BQ19CRSBUWE9QIHJlZ2lzdGVyICovCi0vKiAqLwotI2RlZmluZSBXTU1fVFhPUDBfQ0ZHICAgIDB4MDIyMAotdHlwZWRlZiB1bmlvbiBfQUNfVFhPUF9DU1IwX1NUUlVDIHsKLQlzdHJ1Y3QgewotCQl1MTYgQWMwVHhvcDsJLyogZm9yIEFDX0JLLCBpbiB1bml0IG9mIDMydXMgKi8KLQkJdTE2IEFjMVR4b3A7CS8qIGZvciBBQ19CRSwgaW4gdW5pdCBvZiAzMnVzICovCi0JfSBmaWVsZDsKLQl1MzIgd29yZDsKLX0gQUNfVFhPUF9DU1IwX1NUUlVDLCAqUEFDX1RYT1BfQ1NSMF9TVFJVQzsKLQotLyogKi8KLS8qIEFDX1RYT1BfQ1NSMTogQUNfVk8vQUNfVkkgVFhPUCByZWdpc3RlciAqLwotLyogKi8KLSNkZWZpbmUgV01NX1RYT1AxX0NGRyAgICAweDAyMjQKLXR5cGVkZWYgdW5pb24gX0FDX1RYT1BfQ1NSMV9TVFJVQyB7Ci0Jc3RydWN0IHsKLQkJdTE2IEFjMlR4b3A7CS8qIGZvciBBQ19WSSwgaW4gdW5pdCBvZiAzMnVzICovCi0JCXUxNiBBYzNUeG9wOwkvKiBmb3IgQUNfVk8sIGluIHVuaXQgb2YgMzJ1cyAqLwotCX0gZmllbGQ7Ci0JdTMyIHdvcmQ7Ci19IEFDX1RYT1BfQ1NSMV9TVFJVQywgKlBBQ19UWE9QX0NTUjFfU1RSVUM7Ci0KLSNkZWZpbmUgUklOR1JFR19ESUZGCQkJMHgxMAotI2RlZmluZSBHUElPX0NUUkxfQ0ZHICAgIDB4MDIyOAkvKk1BQ19DU1IxMyAqLwotI2RlZmluZSBNQ1VfQ01EX0NGRyAgICAweDAyMmMKLSNkZWZpbmUgVFhfQkFTRV9QVFIwICAgICAweDAyMzAJLypBQ19CSyBiYXNlIGFkZHJlc3MgKi8KLSNkZWZpbmUgVFhfTUFYX0NOVDAgICAgICAweDAyMzQKLSNkZWZpbmUgVFhfQ1RYX0lEWDAgICAgICAgMHgwMjM4Ci0jZGVmaW5lIFRYX0RUWF9JRFgwICAgICAgMHgwMjNjCi0jZGVmaW5lIFRYX0JBU0VfUFRSMSAgICAgMHgwMjQwCS8qQUNfQkUgYmFzZSBhZGRyZXNzICovCi0jZGVmaW5lIFRYX01BWF9DTlQxICAgICAgMHgwMjQ0Ci0jZGVmaW5lIFRYX0NUWF9JRFgxICAgICAgIDB4MDI0OAotI2RlZmluZSBUWF9EVFhfSURYMSAgICAgIDB4MDI0YwotI2RlZmluZSBUWF9CQVNFX1BUUjIgICAgIDB4MDI1MAkvKkFDX1ZJIGJhc2UgYWRkcmVzcyAqLwotI2RlZmluZSBUWF9NQVhfQ05UMiAgICAgIDB4MDI1NAotI2RlZmluZSBUWF9DVFhfSURYMiAgICAgICAweDAyNTgKLSNkZWZpbmUgVFhfRFRYX0lEWDIgICAgICAweDAyNWMKLSNkZWZpbmUgVFhfQkFTRV9QVFIzICAgICAweDAyNjAJLypBQ19WTyBiYXNlIGFkZHJlc3MgKi8KLSNkZWZpbmUgVFhfTUFYX0NOVDMgICAgICAweDAyNjQKLSNkZWZpbmUgVFhfQ1RYX0lEWDMgICAgICAgMHgwMjY4Ci0jZGVmaW5lIFRYX0RUWF9JRFgzICAgICAgMHgwMjZjCi0jZGVmaW5lIFRYX0JBU0VfUFRSNCAgICAgMHgwMjcwCS8qSENDQSBiYXNlIGFkZHJlc3MgKi8KLSNkZWZpbmUgVFhfTUFYX0NOVDQgICAgICAweDAyNzQKLSNkZWZpbmUgVFhfQ1RYX0lEWDQgICAgICAgMHgwMjc4Ci0jZGVmaW5lIFRYX0RUWF9JRFg0ICAgICAgMHgwMjdjCi0jZGVmaW5lIFRYX0JBU0VfUFRSNSAgICAgMHgwMjgwCS8qTUdNVCBiYXNlIGFkZHJlc3MgKi8KLSNkZWZpbmUgIFRYX01BWF9DTlQ1ICAgICAweDAyODQKLSNkZWZpbmUgVFhfQ1RYX0lEWDUgICAgICAgMHgwMjg4Ci0jZGVmaW5lIFRYX0RUWF9JRFg1ICAgICAgMHgwMjhjCi0jZGVmaW5lIFRYX01HTVRNQVhfQ05UICAgICAgVFhfTUFYX0NOVDUKLSNkZWZpbmUgVFhfTUdNVENUWF9JRFggICAgICAgVFhfQ1RYX0lEWDUKLSNkZWZpbmUgVFhfTUdNVERUWF9JRFggICAgICBUWF9EVFhfSURYNQotI2RlZmluZSBSWF9CQVNFX1BUUiAgICAgMHgwMjkwCS8qUlggYmFzZSBhZGRyZXNzICovCi0jZGVmaW5lIFJYX01BWF9DTlQgICAgICAweDAyOTQKLSNkZWZpbmUgUlhfQ1JYX0lEWCAgICAgICAweDAyOTgKLSNkZWZpbmUgUlhfRFJYX0lEWCAgICAgIDB4MDI5YwotCi0jZGVmaW5lIFVTQl9ETUFfQ0ZHICAgICAgMHgwMmEwCi10eXBlZGVmIHVuaW9uIF9VU0JfRE1BX0NGR19TVFJVQyB7Ci0Jc3RydWN0IHsKLQkJdTMyIFJ4QnVsa0FnZ1RPdXQ6ODsJLypSeCBCdWxrIEFnZ3JlZ2F0aW9uIFRpbWVPdXQgIGluIHVuaXQgb2YgMzNucyAqLwotCQl1MzIgUnhCdWxrQWdnTG10Ojg7CS8qUnggQnVsayBBZ2dyZWdhdGlvbiBMaW1pdCAgaW4gdW5pdCBvZiAyNTYgYnl0ZXMgKi8KLQkJdTMyIHBoeWNsZWFyOjE7CS8qcGh5IHdhdGNoIGRvZyBlbmFibGUuIHdyaXRlIDEgKi8KLQkJdTMyIHJzdjoyOwotCQl1MzIgVHhDbGVhcjoxOwkvKkNsZWFyIFVTQiBETUEgVFggcGF0aCAqLwotCQl1MzIgVHhvcEhhbHQ6MTsJLypIYWx0IFRYT1AgY291bnQgZG93biB3aGVuIFRYIGJ1ZmZlciBpcyBmdWxsLiAqLwotCQl1MzIgUnhCdWxrQWdnRW46MTsJLypFbmFibGUgUnggQnVsayBBZ2dyZWdhdGlvbiAqLwotCQl1MzIgUnhCdWxrRW46MTsJLypFbmFibGUgVVNCIERNQSBSeCAqLwotCQl1MzIgVHhCdWxrRW46MTsJLypFbmFibGUgVVNCIERNQSBUeCAqLwotCQl1MzIgRXBvdXRWYWxpZDo2OwkvKk9VVCBlbmRwb2ludCBkYXRhIHZhbGlkICovCi0JCXUzMiBSeEJ1c3k6MTsJLypVU0IgRE1BIFJYIEZTTSBidXN5ICovCi0JCXUzMiBUeEJ1c3k6MTsJLypVU0IgRE1BIFRYIEZTTSBidXN5ICovCi0JfSBmaWVsZDsKLQl1MzIgd29yZDsKLX0gVVNCX0RNQV9DRkdfU1RSVUMsICpQVVNCX0RNQV9DRkdfU1RSVUM7Ci0KLS8qICovCi0vKiAgMyAgUEJGICByZWdpc3RlcnMgKi8KLS8qICovCi0vKiAqLwotLyogTW9zdCBhcmUgZm9yIGRlYnVnLiBEcml2ZXIgZG9lc24ndCB0b3VjaCBQQkYgcmVnaXN0ZXIuICovCi0jZGVmaW5lIFBCRl9TWVNfQ1RSTAkgMHgwNDAwCi0jZGVmaW5lIFBCRl9DRkcgICAgICAgICAgICAgICAgIDB4MDQwOAotI2RlZmluZSBQQkZfTUFYX1BDTlQJIDB4MDQwQwotI2RlZmluZSBQQkZfQ1RSTAkJMHgwNDEwCi0jZGVmaW5lIFBCRl9JTlRfU1RBCSAweDA0MTQKLSNkZWZpbmUgUEJGX0lOVF9FTkEJIDB4MDQxOAotI2RlZmluZSBUWFJYUV9QQ05UCSAweDA0MzgKLSNkZWZpbmUgUEJGX0RCRwkJCSAweDA0M2MKLSNkZWZpbmUgUEJGX0NBUF9DVFJMICAgICAweDA0NDAKLQotI2lmZGVmIFJUMzB4eAotI2lmZGVmIFJUTVBfRUZVU0VfU1VQUE9SVAotLyogZUZ1c2UgcmVnaXN0ZXJzICovCi0jZGVmaW5lIEVGVVNFX0NUUkwJCQkJMHgwNTgwCi0jZGVmaW5lIEVGVVNFX0RBVEEwCQkJCTB4MDU5MAotI2RlZmluZSBFRlVTRV9EQVRBMQkJCQkweDA1OTQKLSNkZWZpbmUgRUZVU0VfREFUQTIJCQkJMHgwNTk4Ci0jZGVmaW5lIEVGVVNFX0RBVEEzCQkJCTB4MDU5YwotI2VuZGlmIC8qIFJUTVBfRUZVU0VfU1VQUE9SVCAvLyAqLwotI2VuZGlmIC8qIFJUMzB4eCAvLyAqLwotCi0jZGVmaW5lIE9TQ19DVFJMCQkweDVhNAotI2RlZmluZSBQQ0lFX1BIWV9UWF9BVFRFTlVBVElPTl9DVFJMCTB4MDVDOAotI2RlZmluZSBMRE9fQ0ZHMAkJCQkweDA1ZDQKLSNkZWZpbmUgR1BJT19TV0lUQ0gJCQkJMHgwNWRjCi0KLS8qICovCi0vKiAgNCAgTUFDICByZWdpc3RlcnMgKi8KLS8qICovCi0vKiAqLwotLyogIDQuMSBNQUMgU1lTVEVNICBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAob2Zmc2V0OjB4MTAwMCkgKi8KLS8qICovCi0jZGVmaW5lIE1BQ19DU1IwICAgICAgICAgICAgMHgxMDAwCi10eXBlZGVmIHVuaW9uIF9BU0lDX1ZFUl9JRF9TVFJVQyB7Ci0Jc3RydWN0IHsKLQkJdTE2IEFTSUNSZXY7CS8qIHJldmVyc2lvbiAgOiAwICovCi0JCXUxNiBBU0lDVmVyOwkvKiB2ZXJzaW9uIDogMjg2MCAqLwotCX0gZmllbGQ7Ci0JdTMyIHdvcmQ7Ci19IEFTSUNfVkVSX0lEX1NUUlVDLCAqUEFTSUNfVkVSX0lEX1NUUlVDOwotI2RlZmluZSBNQUNfU1lTX0NUUkwgICAgICAgICAgICAweDEwMDQJLypNQUNfQ1NSMSAqLwotI2RlZmluZSBNQUNfQUREUl9EVzAJCQkJMHgxMDA4CS8qIE1BQyBBRERSIERXMCAqLwotI2RlZmluZSBNQUNfQUREUl9EVzEJCQkgMHgxMDBjCS8qIE1BQyBBRERSIERXMSAqLwotLyogKi8KLS8qIE1BQ19DU1IyOiBTVEEgTUFDIHJlZ2lzdGVyIDAgKi8KLS8qICovCi10eXBlZGVmIHVuaW9uIF9NQUNfRFcwX1NUUlVDIHsKLQlzdHJ1Y3QgewotCQl1OCBCeXRlMDsJLyogTUFDIGFkZHJlc3MgYnl0ZSAwICovCi0JCXU4IEJ5dGUxOwkvKiBNQUMgYWRkcmVzcyBieXRlIDEgKi8KLQkJdTggQnl0ZTI7CS8qIE1BQyBhZGRyZXNzIGJ5dGUgMiAqLwotCQl1OCBCeXRlMzsJLyogTUFDIGFkZHJlc3MgYnl0ZSAzICovCi0JfSBmaWVsZDsKLQl1MzIgd29yZDsKLX0gTUFDX0RXMF9TVFJVQywgKlBNQUNfRFcwX1NUUlVDOwotCi0vKiAqLwotLyogTUFDX0NTUjM6IFNUQSBNQUMgcmVnaXN0ZXIgMSAqLwotLyogKi8KLXR5cGVkZWYgdW5pb24gX01BQ19EVzFfU1RSVUMgewotCXN0cnVjdCB7Ci0JCXU4IEJ5dGU0OwkvKiBNQUMgYWRkcmVzcyBieXRlIDQgKi8KLQkJdTggQnl0ZTU7CS8qIE1BQyBhZGRyZXNzIGJ5dGUgNSAqLwotCQl1OCBVMk1lTWFzazsKLQkJdTggUnN2ZDE7Ci0JfSBmaWVsZDsKLQl1MzIgd29yZDsKLX0gTUFDX0RXMV9TVFJVQywgKlBNQUNfRFcxX1NUUlVDOwotCi0jZGVmaW5lIE1BQ19CU1NJRF9EVzAJCQkJMHgxMDEwCS8qIE1BQyBCU1NJRCBEVzAgKi8KLSNkZWZpbmUgTUFDX0JTU0lEX0RXMQkJCQkweDEwMTQJLyogTUFDIEJTU0lEIERXMSAqLwotCi0vKiAqLwotLyogTUFDX0NTUjU6IEJTU0lEIHJlZ2lzdGVyIDEgKi8KLS8qICovCi10eXBlZGVmIHVuaW9uIF9NQUNfQ1NSNV9TVFJVQyB7Ci0Jc3RydWN0IHsKLQkJdTggQnl0ZTQ7CS8qIEJTU0lEIGJ5dGUgNCAqLwotCQl1OCBCeXRlNTsJLyogQlNTSUQgYnl0ZSA1ICovCi0JCXUxNiBCc3NJZE1hc2s6MjsJLyogMDogb25lIEJTU0lELCAxMDogNCBCU1NJRCwgIDAxOiAyIEJTU0lEICwgMTE6IDhCU1NJRCAqLwotCQl1MTYgTUJzc0Jjbk51bTozOwotCQl1MTYgUnN2ZDoxMTsKLQl9IGZpZWxkOwotCXUzMiB3b3JkOwotfSBNQUNfQ1NSNV9TVFJVQywgKlBNQUNfQ1NSNV9TVFJVQzsKLQotI2RlZmluZSBNQVhfTEVOX0NGRyAgICAgICAgICAgICAgMHgxMDE4CS8qIHJ0Mjg2MGIgbWF4IDE2ayBieXRlcy4gYml0MTI6MTMgTWF4aW11bSBQU0RVIGxlbmd0aCAocG93ZXIgZmFjdG9yKSAwOjJeMTMsIDE6Ml4xNCwgMjoyXjE1LCAzOjJeMTYgKi8KLSNkZWZpbmUgQkJQX0NTUl9DRkcJCQkweDEwMWMJLyogKi8KLS8qICovCi0vKiBCQlBfQ1NSX0NGRzogQkJQIHNlcmlhbCBjb250cm9sIHJlZ2lzdGVyICovCi0vKiAqLwotdHlwZWRlZiB1bmlvbiBfQkJQX0NTUl9DRkdfU1RSVUMgewotCXN0cnVjdCB7Ci0JCXUzMiBWYWx1ZTo4OwkvKiBSZWdpc3RlciAgICAgdmFsdWUgdG8gcHJvZ3JhbSBpbnRvIEJCUCAqLwotCQl1MzIgUmVnTnVtOjg7CS8qIFNlbGVjdGVkICAgICBCQlAgICAgIHJlZ2lzdGVyICovCi0JCXUzMiBmUmVhZDoxOwkvKiAwOiBXcml0ZSBCQlAsIDE6IFJlYWQgQkJQICovCi0JCXUzMiBCdXN5OjE7CS8qIDE6IEFTSUMgaXMgYnVzeSBleGVjdXRlIEJCUCBwcm9ncmFtbWluZy4gKi8KLQkJdTMyIEJCUF9QQVJfRFVSOjE7CS8qIDA6IDQgTUFDIGNsb2NrIGN5Y2xlcyAgMTogOCBNQUMgY2xvY2sgY3ljbGVzICovCi0JCXUzMiBCQlBfUldfTU9ERToxOwkvKiAwOiB1c2Ugc2VyaWFsIG1vZGUgIDE6cGFyYWxsZWwgKi8KLQkJdTMyOiAxMjsKLQl9IGZpZWxkOwotCXUzMiB3b3JkOwotfSBCQlBfQ1NSX0NGR19TVFJVQywgKlBCQlBfQ1NSX0NGR19TVFJVQzsKLSNkZWZpbmUgUkZfQ1NSX0NGRzAJCQkweDEwMjAKLS8qICovCi0vKiBSRl9DU1JfQ0ZHOiBSRiBjb250cm9sIHJlZ2lzdGVyICovCi0vKiAqLwotdHlwZWRlZiB1bmlvbiBfUkZfQ1NSX0NGRzBfU1RSVUMgewotCXN0cnVjdCB7Ci0JCXUzMiBSZWdJZEFuZENvbnRlbnQ6MjQ7CS8qIFJlZ2lzdGVyIHZhbHVlIHRvIHByb2dyYW0gaW50byBCQlAgKi8KLQkJdTMyIGJpdHdpZHRoOjU7CS8qIFNlbGVjdGVkIEJCUCByZWdpc3RlciAqLwotCQl1MzIgU3RhbmRieU1vZGU6MTsJLyogMDogaGlnaCB3aGVuIHN0YW5kIGJ5IDE6IGxvdyB3aGVuIHN0YW5kYnkgKi8KLQkJdTMyIFNlbDoxOwkvKiAwOlJGX0xFMCBhY3RpdmF0ZSAgMTpSRl9MRTEgYWN0aXZhdGUgKi8KLQkJdTMyIEJ1c3k6MTsJLyogMDogaWRsZSAxOiA4YnVzeSAqLwotCX0gZmllbGQ7Ci0JdTMyIHdvcmQ7Ci19IFJGX0NTUl9DRkcwX1NUUlVDLCAqUFJGX0NTUl9DRkcwX1NUUlVDOwotI2RlZmluZSBSRl9DU1JfQ0ZHMQkJCTB4MTAyNAotdHlwZWRlZiB1bmlvbiBfUkZfQ1NSX0NGRzFfU1RSVUMgewotCXN0cnVjdCB7Ci0JCXUzMiBSZWdJZEFuZENvbnRlbnQ6MjQ7CS8qIFJlZ2lzdGVyIHZhbHVlIHRvIHByb2dyYW0gaW50byBCQlAgKi8KLQkJdTMyIFJGR2FwOjU7CS8qIEdhcCBiZXR3ZWVuIEJCX0NPTlRST0xfUkYgYW5kIFJGX0xFLiAwOiAzIHN5c3RlbSBjbG9jayBjeWNsZSAoMzcuNXVzZWMpIDE6IDUgc3lzdGVtIGNsb2NrIGN5Y2xlICg2Mi41dXNlYykgKi8KLQkJdTMyIHJzdjo3OwkvKiAwOiBpZGxlIDE6IDhidXN5ICovCi0JfSBmaWVsZDsKLQl1MzIgd29yZDsKLX0gUkZfQ1NSX0NGRzFfU1RSVUMsICpQUkZfQ1NSX0NGRzFfU1RSVUM7Ci0jZGVmaW5lIFJGX0NTUl9DRkcyCQkJMHgxMDI4CS8qICovCi10eXBlZGVmIHVuaW9uIF9SRl9DU1JfQ0ZHMl9TVFJVQyB7Ci0Jc3RydWN0IHsKLQkJdTMyIFJlZ0lkQW5kQ29udGVudDoyNDsJLyogUmVnaXN0ZXIgdmFsdWUgdG8gcHJvZ3JhbSBpbnRvIEJCUCAqLwotCQl1MzIgcnN2Ojg7CS8qIDA6IGlkbGUgMTogOGJ1c3kgKi8KLQl9IGZpZWxkOwotCXUzMiB3b3JkOwotfSBSRl9DU1JfQ0ZHMl9TVFJVQywgKlBSRl9DU1JfQ0ZHMl9TVFJVQzsKLSNkZWZpbmUgTEVEX0NGRwkJCQkweDEwMmMJLyogIE1BQ19DU1IxNCAqLwotdHlwZWRlZiB1bmlvbiBfTEVEX0NGR19TVFJVQyB7Ci0Jc3RydWN0IHsKLQkJdTMyIE9uUGVyaW9kOjg7CS8qIGJsaW5raW5nIG9uIHBlcmlvZCB1bml0IDFtcyAqLwotCQl1MzIgT2ZmUGVyaW9kOjg7CS8qIGJsaW5raW5nIG9mZiBwZXJpb2QgdW5pdCAxbXMgKi8KLQkJdTMyIFNsb3dCbGlua1BlcmlvZDo2OwkvKiBzbG93IGJsaW5raW5nIHBlcmlvZC4gdW5pdDoxbXMgKi8KLQkJdTMyIHJzdjoyOwotCQl1MzIgUkxlZE1vZGU6MjsJLyogcmVkIExlZCBNb2RlIDA6IG9mZjE6IGJsaW5raW5nIHVwb24gVFgyOiBwZXJpb2RpYyBzbG93IGJsaW5raW5nMzogYWx3YXlzIG9uICovCi0JCXUzMiBHTGVkTW9kZToyOwkvKiBncmVlbiBMZWQgTW9kZSAqLwotCQl1MzIgWUxlZE1vZGU6MjsJLyogeWVsbG93IExlZCBNb2RlICovCi0JCXUzMiBMZWRQb2xhcjoxOwkvKiBMZWQgUG9sYXJpdHkuICAwOiBhY3RpdmUgbG93MTogYWN0aXZlIGhpZ2ggKi8KLQkJdTMyOiAxOwotCX0gZmllbGQ7Ci0JdTMyIHdvcmQ7Ci19IExFRF9DRkdfU1RSVUMsICpQTEVEX0NGR19TVFJVQzsKLS8qICovCi0vKiAgNC4yIE1BQyBUSU1JTkcgIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIChvZmZzZXQ6MHgxMTAwKSAqLwotLyogKi8KLSNkZWZpbmUgWElGU19USU1FX0NGRyAgICAgICAgICAgICAweDExMDAJLyogTUFDX0NTUjggIE1BQ19DU1I5ICovCi10eXBlZGVmIHVuaW9uIF9JRlNfU0xPVF9DRkdfU1RSVUMgewotCXN0cnVjdCB7Ci0JCXUzMiBDY2ttU2lmc1RpbWU6ODsJLyogIHVuaXQgMXVzLiBBcHBsaWVkIGFmdGVyIENDSyBSWC9UWCAqLwotCQl1MzIgT2ZkbVNpZnNUaW1lOjg7CS8qICB1bml0IDF1cy4gQXBwbGllZCBhZnRlciBPRkRNIFJYL1RYICovCi0JCXUzMiBPZmRtWGlmc1RpbWU6NDsJLypPRkRNIFNJRlMuIHVuaXQgMXVzLiBBcHBsaWVkIGFmdGVyIE9GRE0gUlggd2hlbiBNQUMgZG9lc24ndCByZWZlcmVuY2UgQkJQIHNpZ25hbCBCQlJYRU5EICovCi0JCXUzMiBFSUZTOjk7CS8qICB1bml0IDF1cyAqLwotCQl1MzIgQkJSeGVuZEVuYWJsZToxOwkvKiAgcmVmZXJlbmNlIFJYRU5EIHNpZ25hbCB0byBiZWdpbiBYSUZTIGRlZmVyICovCi0JCXUzMiByc3Y6MjsKLQl9IGZpZWxkOwotCXUzMiB3b3JkOwotfSBJRlNfU0xPVF9DRkdfU1RSVUMsICpQSUZTX1NMT1RfQ0ZHX1NUUlVDOwotCi0jZGVmaW5lIEJLT0ZGX1NMT1RfQ0ZHICAgICAgICAgICAgIDB4MTEwNAkvKiAgbWFjX2NzcjkgbGFzdCA4IGJpdHMgKi8KLSNkZWZpbmUgTkFWX1RJTUVfQ0ZHICAgICAgICAgICAgIDB4MTEwOAkvKiBOQVYgIChNQUNfQ1NSMTUpICovCi0jZGVmaW5lIENIX1RJTUVfQ0ZHICAgICAgICAgICAgIDB4MTEwQwkvKiBDb3VudCBhcyBjaGFubmVsIGJ1c3kgKi8KLSNkZWZpbmUgUEJGX0xJRkVfVElNRVIgICAgICAgICAgICAgMHgxMTEwCS8qVFgvUlggTVBEVSB0aW1lc3RhbXAgdGltZXIgKGZyZWUgcnVuKVVuaXQ6IDF1cyAqLwotI2RlZmluZSBCQ05fVElNRV9DRkcgICAgICAgICAgICAgMHgxMTE0CS8qIFRYUlhfQ1NSOSAqLwotCi0jZGVmaW5lIEJDTl9PRkZTRVQwCQkJCTB4MDQyQwotI2RlZmluZSBCQ05fT0ZGU0VUMQkJCQkweDA0MzAKLQotLyogKi8KLS8qIEJDTl9USU1FX0NGRyA6IFN5bmNocm9uaXphdGlvbiBjb250cm9sIHJlZ2lzdGVyICovCi0vKiAqLwotdHlwZWRlZiB1bmlvbiBfQkNOX1RJTUVfQ0ZHX1NUUlVDIHsKLQlzdHJ1Y3QgewotCQl1MzIgQmVhY29uSW50ZXJ2YWw6MTY7CS8qIGluIHVuaXQgb2YgMS8xNiBUVSAqLwotCQl1MzIgYlRzZlRpY2tpbmc6MTsJLyogRW5hYmxlIFRTRiBhdXRvIGNvdW50aW5nICovCi0JCXUzMiBUc2ZTeW5jTW9kZToyOwkvKiBFbmFibGUgVFNGIHN5bmMsIDAwOiBkaXNhYmxlLCAwMTogaW5mcmEgbW9kZSwgMTA6IGFkLWhvYyBtb2RlICovCi0JCXUzMiBiVEJUVEVuYWJsZToxOwotCQl1MzIgYkJlYWNvbkdlbjoxOwkvKiBFbmFibGUgYmVhY29uIGdlbmVyYXRvciAqLwotCQl1MzI6IDM7Ci0JCXUzMiBUeFRpbWVzdGFtcENvbXBlbnNhdGU6ODsKLQl9IGZpZWxkOwotCXUzMiB3b3JkOwotfSBCQ05fVElNRV9DRkdfU1RSVUMsICpQQkNOX1RJTUVfQ0ZHX1NUUlVDOwotI2RlZmluZSBUQlRUX1NZTkNfQ0ZHICAgICAgICAgICAgMHgxMTE4CS8qIHR4cnhfY3NyMTAgKi8KLSNkZWZpbmUgVFNGX1RJTUVSX0RXMCAgICAgICAgICAgICAweDExMUMJLyogTG9jYWwgVFNGIHRpbWVyIGxzYiAzMiBiaXRzLiBSZWFkLW9ubHkgKi8KLSNkZWZpbmUgVFNGX1RJTUVSX0RXMSAgICAgICAgICAgICAweDExMjAJLyogbXNiIDMyIGJpdHMuIFJlYWQtb25seS4gKi8KLSNkZWZpbmUgVEJUVF9USU1FUgkJMHgxMTI0CS8qIFRJbWVyIHJlbWFpbnMgdGlsbCBuZXh0IFRCVFQuIFJlYWQtb25seS4gIFRYUlhfQ1NSMTQgKi8KLSNkZWZpbmUgSU5UX1RJTUVSX0NGRwkJCTB4MTEyOAkvKiAqLwotI2RlZmluZSBJTlRfVElNRVJfRU4JCQkweDExMmMJLyogIEdQLXRpbWVyIGFuZCBwcmUtdGJ0dCBJbnQgZW5hYmxlICovCi0jZGVmaW5lIENIX0lETEVfU1RBCQkJMHgxMTMwCS8qICBjaGFubmVsIGlkbGUgdGltZSAqLwotI2RlZmluZSBDSF9CVVNZX1NUQQkJCTB4MTEzNAkvKiAgY2hhbm5sZSBidXN5IHRpbWUgKi8KLS8qICovCi0vKiAgNC4yIE1BQyBQT1dFUiAgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgKG9mZnNldDoweDEyMDApICovCi0vKiAqLwotI2RlZmluZSBNQUNfU1RBVFVTX0NGRyAgICAgICAgICAgICAweDEyMDAJLyogb2xkIE1BQ19DU1IxMiAqLwotI2RlZmluZSBQV1JfUElOX0NGRyAgICAgICAgICAgICAweDEyMDQJLyogb2xkIE1BQ19DU1IxMiAqLwotI2RlZmluZSBBVVRPX1dBS0VVUF9DRkcgICAgICAgICAgICAgMHgxMjA4CS8qIG9sZCBNQUNfQ1NSMTAgKi8KLS8qICovCi0vKiBBVVRPX1dBS0VVUF9DRkc6IE1hbnVhbCBwb3dlciBjb250cm9sIC8gc3RhdHVzIHJlZ2lzdGVyICovCi0vKiAqLwotdHlwZWRlZiB1bmlvbiBfQVVUT19XQUtFVVBfU1RSVUMgewotCXN0cnVjdCB7Ci0JCXUzMiBBdXRvTGVhZFRpbWU6ODsKLQkJdTMyIE51bW9mU2xlZXBpbmdUYnR0Ojc7CS8qIEZvcmNlV2FrZSBoYXMgaGlnaCBwcml2aWxlZ2UgdGhhbiBQdXRUb1NsZWVwIHdoZW4gYm90aCBzZXQgKi8KLQkJdTMyIEVuYWJsZUF1dG9XYWtldXA6MTsJLyogMDpzbGVlcCwgMTphd2FrZSAqLwotCQl1MzI6IDE2OwotCX0gZmllbGQ7Ci0JdTMyIHdvcmQ7Ci19IEFVVE9fV0FLRVVQX1NUUlVDLCAqUEFVVE9fV0FLRVVQX1NUUlVDOwotLyogKi8KLS8qICA0LjMgTUFDIFRYICBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAob2Zmc2V0OjB4MTMwMCkgKi8KLS8qICovCi0KLSNkZWZpbmUgRURDQV9BQzBfQ0ZHCTB4MTMwMAkvKkFDX1RYT1BfQ1NSMCAweDM0NzQgKi8KLSNkZWZpbmUgRURDQV9BQzFfQ0ZHCTB4MTMwNAotI2RlZmluZSBFRENBX0FDMl9DRkcJMHgxMzA4Ci0jZGVmaW5lIEVEQ0FfQUMzX0NGRwkweDEzMGMKLXR5cGVkZWYgdW5pb24gX0VEQ0FfQUNfQ0ZHX1NUUlVDIHsKLQlzdHJ1Y3QgewotCQl1MzIgQWNUeG9wOjg7CS8qICBpbiB1bml0IG9mIDMydXMgKi8KLQkJdTMyIEFpZnNuOjQ7CS8qICMgb2Ygc2xvdCB0aW1lICovCi0JCXUzMiBDd21pbjo0OwkvKiAqLwotCQl1MzIgQ3dtYXg6NDsJLyp1bml0IHBvd2VyIG9mIDIgKi8KLQkJdTMyOiAxMjsJLyogKi8KLQl9IGZpZWxkOwotCXUzMiB3b3JkOwotfSBFRENBX0FDX0NGR19TVFJVQywgKlBFRENBX0FDX0NGR19TVFJVQzsKLQotI2RlZmluZSBFRENBX1RJRF9BQ19NQVAJMHgxMzEwCi0jZGVmaW5lIFRYX1BXUl9DRkdfMAkweDEzMTQKLSNkZWZpbmUgVFhfUFdSX0NGR18xCTB4MTMxOAotI2RlZmluZSBUWF9QV1JfQ0ZHXzIJMHgxMzFDCi0jZGVmaW5lIFRYX1BXUl9DRkdfMwkweDEzMjAKLSNkZWZpbmUgVFhfUFdSX0NGR180CTB4MTMyNAotI2RlZmluZSBUWF9QSU5fQ0ZHCQkweDEzMjgKLSNkZWZpbmUgVFhfQkFORF9DRkcJMHgxMzJjCS8qIDB4MSB1c2UgdXBwZXIgMjBNSHouIDAganVzZSBsb3dlciAyME1IeiAqLwotI2RlZmluZSBUWF9TV19DRkcwCQkweDEzMzAKLSNkZWZpbmUgVFhfU1dfQ0ZHMQkJMHgxMzM0Ci0jZGVmaW5lIFRYX1NXX0NGRzIJCTB4MTMzOAotI2RlZmluZSBUWE9QX1RIUkVTX0NGRwkJMHgxMzNjCi0jZGVmaW5lIFRYT1BfQ1RSTF9DRkcJCTB4MTM0MAotI2RlZmluZSBUWF9SVFNfQ0ZHCQkweDEzNDQKLQotdHlwZWRlZiB1bmlvbiBfVFhfUlRTX0NGR19TVFJVQyB7Ci0Jc3RydWN0IHsKLQkJdTMyIEF1dG9SdHNSZXRyeUxpbWl0Ojg7Ci0JCXUzMiBSdHNUaHJlczoxNjsJLyogdW5pdDpieXRlICovCi0JCXUzMiBSdHNGYmtFbjoxOwkvKiBlbmFibGUgcnRzIHJhdGUgZmFsbGJhY2sgKi8KLQkJdTMyIHJzdjo3OwkvKiAxOiBIVCBub24tU1RCQyBjb250cm9sIGZyYW1lIGVuYWJsZSAqLwotCX0gZmllbGQ7Ci0JdTMyIHdvcmQ7Ci19IFRYX1JUU19DRkdfU1RSVUMsICpQVFhfUlRTX0NGR19TVFJVQzsKLSNkZWZpbmUgVFhfVElNRU9VVF9DRkcJMHgxMzQ4Ci10eXBlZGVmIHVuaW9uIF9UWF9USU1FT1VUX0NGR19TVFJVQyB7Ci0Jc3RydWN0IHsKLQkJdTMyIHJzdjo0OwotCQl1MzIgTXBkdUxpZmVUaW1lOjQ7CS8qICBleHBpcmF0aW9uIHRpbWUgPSAyXig5K01QRFUgTElGRSBUSU1FKSAgdXMgKi8KLQkJdTMyIFJ4QWNrVGltZW91dDo4OwkvKiB1bml0OnNsb3QuIFVzZWQgZm9yIFRYIHByZWNlZHVyZSAqLwotCQl1MzIgVHhvcFRpbWVvdXQ6ODsJLypUWE9QIHRpbWVvdXQgdmFsdWUgZm9yIFRYT1AgdHJ1bmNhdGlvbi4gIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgKFNMT1RfVElNRSkgPiAoVFhfT1BfVElNRU9VVCkgPiAoUlhfQUNLX1RJTUVPVVQpICovCi0JCXUzMiByc3YyOjg7CS8qIDE6IEhUIG5vbi1TVEJDIGNvbnRyb2wgZnJhbWUgZW5hYmxlICovCi0JfSBmaWVsZDsKLQl1MzIgd29yZDsKLX0gVFhfVElNRU9VVF9DRkdfU1RSVUMsICpQVFhfVElNRU9VVF9DRkdfU1RSVUM7Ci0jZGVmaW5lIFRYX1JUWV9DRkcJMHgxMzRjCi10eXBlZGVmIHVuaW9uIFBBQ0tFRCBfVFhfUlRZX0NGR19TVFJVQyB7Ci0Jc3RydWN0IHsKLQkJdTMyIFNob3J0UnR5TGltaXQ6ODsJLyogc2hvcnQgcmV0cnkgbGltaXQgKi8KLQkJdTMyIExvbmdSdHlMaW1pdDo4OwkvKiBsb25nIHJldHJ5IGxpbWl0ICovCi0JCXUzMiBMb25nUnR5VGhyZToxMjsJLyogTG9uZyByZXRyeSB0aHJlc2hvbGQgKi8KLQkJdTMyIE5vbkFnZ1J0eU1vZGU6MTsJLyogTm9uLUFnZ3JlZ2F0ZSBNUERVIHJldHJ5IG1vZGUuICAwOmV4cGlyZWQgYnkgcmV0cnkgbGltaXQsIDE6IGV4cGlyZWQgYnkgbXBkdSBsaWZlIHRpbWVyICovCi0JCXUzMiBBZ2dSdHlNb2RlOjE7CS8qIEFnZ3JlZ2F0ZSBNUERVIHJldHJ5IG1vZGUuICAwOmV4cGlyZWQgYnkgcmV0cnkgbGltaXQsIDE6IGV4cGlyZWQgYnkgbXBkdSBsaWZlIHRpbWVyICovCi0JCXUzMiBUeGF1dG9GQkVuYWJsZToxOwkvKiBUeCByZXRyeSBQSFkgcmF0ZSBhdXRvIGZhbGxiYWNrIGVuYWJsZSAqLwotCQl1MzIgcnN2OjE7CS8qIDE6IEhUIG5vbi1TVEJDIGNvbnRyb2wgZnJhbWUgZW5hYmxlICovCi0JfSBmaWVsZDsKLQl1MzIgd29yZDsKLX0gVFhfUlRZX0NGR19TVFJVQywgKlBUWF9SVFlfQ0ZHX1NUUlVDOwotI2RlZmluZSBUWF9MSU5LX0NGRwkweDEzNTAKLXR5cGVkZWYgdW5pb24gUEFDS0VEIF9UWF9MSU5LX0NGR19TVFJVQyB7Ci0Jc3RydWN0IFBBQ0tFRCB7Ci0JCXUzMiBSZW1vdGVNRkJMaWZlVGltZTo4OwkvKnJlbW90ZSBNRkIgbGlmZSB0aW1lLiB1bml0IDogMzJ1cyAqLwotCQl1MzIgTUZCRW5hYmxlOjE7CS8qICBUWCBhcHBseSByZW1vdGUgTUZCIDE6ZW5hYmxlICovCi0JCXUzMiBSZW1vdGVVTUZTRW5hYmxlOjE7CS8qICByZW1vdGUgdW5zb2xpY2l0ICBNRkIgZW5hYmxlLiAgMDogbm90IGFwcGx5IHJlbW90ZSByZW1vdGUgdW5zb2xpY2l0IChNRlM9NykgKi8KLQkJdTMyIFR4TVJRRW46MTsJLyogIE1DUyByZXF1ZXN0IFRYIGVuYWJsZSAqLwotCQl1MzIgVHhSREdFbjoxOwkvKiBSREcgVFggZW5hYmxlICovCi0JCXUzMiBUeENGQWNrRW46MTsJLyogICBQaWdneWJhY2sgQ0YtQUNLIGVuYWJsZSAqLwotCQl1MzIgcnN2OjM7CS8qICovCi0JCXUzMiBSZW1vdE1GQjo4OwkvKiAgcmVtb3RlIE1DUyBmZWVkYmFjayAqLwotCQl1MzIgUmVtb3RNRlM6ODsJLypyZW1vdGUgTUNTIGZlZWRiYWNrIHNlcXVlbmNlIG51bWJlciAqLwotCX0gZmllbGQ7Ci0JdTMyIHdvcmQ7Ci19IFRYX0xJTktfQ0ZHX1NUUlVDLCAqUFRYX0xJTktfQ0ZHX1NUUlVDOwotI2RlZmluZSBIVF9GQktfQ0ZHMAkweDEzNTQKLXR5cGVkZWYgdW5pb24gUEFDS0VEIF9IVF9GQktfQ0ZHMF9TVFJVQyB7Ci0Jc3RydWN0IHsKLQkJdTMyIEhUTUNTMEZCSzo0OwotCQl1MzIgSFRNQ1MxRkJLOjQ7Ci0JCXUzMiBIVE1DUzJGQks6NDsKLQkJdTMyIEhUTUNTM0ZCSzo0OwotCQl1MzIgSFRNQ1M0RkJLOjQ7Ci0JCXUzMiBIVE1DUzVGQks6NDsKLQkJdTMyIEhUTUNTNkZCSzo0OwotCQl1MzIgSFRNQ1M3RkJLOjQ7Ci0JfSBmaWVsZDsKLQl1MzIgd29yZDsKLX0gSFRfRkJLX0NGRzBfU1RSVUMsICpQSFRfRkJLX0NGRzBfU1RSVUM7Ci0jZGVmaW5lIEhUX0ZCS19DRkcxCTB4MTM1OAotdHlwZWRlZiB1bmlvbiBfSFRfRkJLX0NGRzFfU1RSVUMgewotCXN0cnVjdCB7Ci0JCXUzMiBIVE1DUzhGQks6NDsKLQkJdTMyIEhUTUNTOUZCSzo0OwotCQl1MzIgSFRNQ1MxMEZCSzo0OwotCQl1MzIgSFRNQ1MxMUZCSzo0OwotCQl1MzIgSFRNQ1MxMkZCSzo0OwotCQl1MzIgSFRNQ1MxM0ZCSzo0OwotCQl1MzIgSFRNQ1MxNEZCSzo0OwotCQl1MzIgSFRNQ1MxNUZCSzo0OwotCX0gZmllbGQ7Ci0JdTMyIHdvcmQ7Ci19IEhUX0ZCS19DRkcxX1NUUlVDLCAqUEhUX0ZCS19DRkcxX1NUUlVDOwotI2RlZmluZSBMR19GQktfQ0ZHMAkweDEzNWMKLXR5cGVkZWYgdW5pb24gX0xHX0ZCS19DRkcwX1NUUlVDIHsKLQlzdHJ1Y3QgewotCQl1MzIgT0ZETU1DUzBGQks6NDsJLyppbml0aWFsIHZhbHVlIGlzIDAgKi8KLQkJdTMyIE9GRE1NQ1MxRkJLOjQ7CS8qaW5pdGlhbCB2YWx1ZSBpcyAwICovCi0JCXUzMiBPRkRNTUNTMkZCSzo0OwkvKmluaXRpYWwgdmFsdWUgaXMgMSAqLwotCQl1MzIgT0ZETU1DUzNGQks6NDsJLyppbml0aWFsIHZhbHVlIGlzIDIgKi8KLQkJdTMyIE9GRE1NQ1M0RkJLOjQ7CS8qaW5pdGlhbCB2YWx1ZSBpcyAzICovCi0JCXUzMiBPRkRNTUNTNUZCSzo0OwkvKmluaXRpYWwgdmFsdWUgaXMgNCAqLwotCQl1MzIgT0ZETU1DUzZGQks6NDsJLyppbml0aWFsIHZhbHVlIGlzIDUgKi8KLQkJdTMyIE9GRE1NQ1M3RkJLOjQ7CS8qaW5pdGlhbCB2YWx1ZSBpcyA2ICovCi0JfSBmaWVsZDsKLQl1MzIgd29yZDsKLX0gTEdfRkJLX0NGRzBfU1RSVUMsICpQTEdfRkJLX0NGRzBfU1RSVUM7Ci0jZGVmaW5lIExHX0ZCS19DRkcxCQkweDEzNjAKLXR5cGVkZWYgdW5pb24gX0xHX0ZCS19DRkcxX1NUUlVDIHsKLQlzdHJ1Y3QgewotCQl1MzIgQ0NLTUNTMEZCSzo0OwkvKmluaXRpYWwgdmFsdWUgaXMgMCAqLwotCQl1MzIgQ0NLTUNTMUZCSzo0OwkvKmluaXRpYWwgdmFsdWUgaXMgMCAqLwotCQl1MzIgQ0NLTUNTMkZCSzo0OwkvKmluaXRpYWwgdmFsdWUgaXMgMSAqLwotCQl1MzIgQ0NLTUNTM0ZCSzo0OwkvKmluaXRpYWwgdmFsdWUgaXMgMiAqLwotCQl1MzIgcnN2OjE2OwotCX0gZmllbGQ7Ci0JdTMyIHdvcmQ7Ci19IExHX0ZCS19DRkcxX1NUUlVDLCAqUExHX0ZCS19DRkcxX1NUUlVDOwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLS8qPT09PT09PT09PT09PT09PSBQcm90ZWN0aW9uIFBhcmFtYXRlcj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLSNkZWZpbmUgQ0NLX1BST1RfQ0ZHCTB4MTM2NAkvKkNDSyBQcm90ZWN0aW9uICovCi0jZGVmaW5lIEFTSUNfU0hPUlROQVYJCTEKLSNkZWZpbmUgQVNJQ19sb25nTkFWCQkyCi0jZGVmaW5lIEFTSUNfUlRTCQkxCi0jZGVmaW5lIEFTSUNfQ1RTCQkyCi10eXBlZGVmIHVuaW9uIF9QUk9UX0NGR19TVFJVQyB7Ci0Jc3RydWN0IHsKLQkJdTMyIFByb3RlY3RSYXRlOjE2OwkvKlByb3RlY3Rpb24gY29udHJvbCBmcmFtZSByYXRlIGZvciBDQ0sgVFgoUlRTL0NUUy9DRkVuZCkuICovCi0JCXUzMiBQcm90ZWN0Q3RybDoyOwkvKlByb3RlY3Rpb24gY29udHJvbCBmcmFtZSB0eXBlIGZvciBDQ0sgVFguIDE6UlRTL0NUUywgMjpDVFMtdG8tc2VsZiwgMDpOb25lLCAzOnJzdiAqLwotCQl1MzIgUHJvdGVjdE5hdjoyOwkvKlRYT1AgcHJvdGVjdGlvbiB0eXBlIGZvciBDQ0sgVFguIDA6Tm9uZSwgMTpTaG9ydE5BVnByb3RlY3QsICAyOkxvbmdOQVZQcm90ZWN0LCAzOnJzdiAqLwotCQl1MzIgVHhvcEFsbG93Q2NrOjE7CS8qQ0NLIFRYT1AgYWxsb3dhbmNlLjA6ZGlzYWxsb3cuICovCi0JCXUzMiBUeG9wQWxsb3dPZmRtOjE7CS8qQ0NLIFRYT1AgYWxsb3dhbmNlLjA6ZGlzYWxsb3cuICovCi0JCXUzMiBUeG9wQWxsb3dNTTIwOjE7CS8qQ0NLIFRYT1AgYWxsb3dhbmNlLiAwOmRpc2FsbG93LiAqLwotCQl1MzIgVHhvcEFsbG93TU00MDoxOwkvKkNDSyBUWE9QIGFsbG93YW5jZS4wOmRpc2FsbG93LiAqLwotCQl1MzIgVHhvcEFsbG93R0YyMDoxOwkvKkNDSyBUWE9QIGFsbG93YW5jZS4wOmRpc2FsbG93LiAqLwotCQl1MzIgVHhvcEFsbG93R0Y0MDoxOwkvKkNDSyBUWE9QIGFsbG93YW5jZS4wOmRpc2FsbG93LiAqLwotCQl1MzIgUlRTVGhFbjoxOwkvKlJUUyB0aHJlc2hvbGQgZW5hYmxlIG9uIENDSyBUWCAqLwotCQl1MzIgcnN2OjU7Ci0JfSBmaWVsZDsKLQl1MzIgd29yZDsKLX0gUFJPVF9DRkdfU1RSVUMsICpQUFJPVF9DRkdfU1RSVUM7Ci0KLSNkZWZpbmUgT0ZETV9QUk9UX0NGRwkweDEzNjgJLypPRkRNIFByb3RlY3Rpb24gKi8KLSNkZWZpbmUgTU0yMF9QUk9UX0NGRwkweDEzNkMJLypNTTIwIFByb3RlY3Rpb24gKi8KLSNkZWZpbmUgTU00MF9QUk9UX0NGRwkweDEzNzAJLypNTTQwIFByb3RlY3Rpb24gKi8KLSNkZWZpbmUgR0YyMF9QUk9UX0NGRwkweDEzNzQJLypHRjIwIFByb3RlY3Rpb24gKi8KLSNkZWZpbmUgR0Y0MF9QUk9UX0NGRwkweDEzNzgJLypHUjQwIFByb3RlY3Rpb24gKi8KLSNkZWZpbmUgRVhQX0NUU19USU1FCTB4MTM3QwkvKiAqLwotI2RlZmluZSBFWFBfQUNLX1RJTUUJMHgxMzgwCS8qICovCi0KLS8qICovCi0vKiAgNC40IE1BQyBSWCBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAob2Zmc2V0OjB4MTQwMCkgKi8KLS8qICovCi0jZGVmaW5lIFJYX0ZJTFRSX0NGRwkweDE0MDAJLypUWFJYX0NTUjAgKi8KLSNkZWZpbmUgQVVUT19SU1BfQ0ZHCTB4MTQwNAkvKlRYUlhfQ1NSNCAqLwotLyogKi8KLS8qIFRYUlhfQ1NSNDogQXV0by1SZXNwb25kZXIvICovCi0vKiAqLwotdHlwZWRlZiB1bmlvbiBfQVVUT19SU1BfQ0ZHX1NUUlVDIHsKLQlzdHJ1Y3QgewotCQl1MzIgQXV0b1Jlc3BvbmRlckVuYWJsZToxOwotCQl1MzIgQkFDQWNrUG9saWN5RW5hYmxlOjE7CS8qIDA6bG9uZywgMTpzaG9ydCBwcmVhbWJsZSAqLwotCQl1MzIgQ1RTNDBNTW9kZToxOwkvKiBSZXNwb25zZSBDVFMgNDBNSHogZHVwbGljYXRlIG1vZGUgKi8KLQkJdTMyIENUUzQwTVJlZjoxOwkvKiBSZXNwb25zZSBDVFMgNDBNSHogZHVwbGljYXRlIG1vZGUgKi8KLQkJdTMyIEF1dG9SZXNwb25kZXJQcmVhbWJsZToxOwkvKiAwOmxvbmcsIDE6c2hvcnQgcHJlYW1ibGUgKi8KLQkJdTMyIHJzdjoxOwkvKiBQb3dlciBiaXQgdmFsdWUgaW4gY29ucnRyb2wgZnJhbWUgKi8KLQkJdTMyIER1YWxDVFNFbjoxOwkvKiBQb3dlciBiaXQgdmFsdWUgaW4gY29ucnRyb2wgZnJhbWUgKi8KLQkJdTMyIEFja0N0c1BzbUJpdDoxOwkvKiBQb3dlciBiaXQgdmFsdWUgaW4gY29ucnRyb2wgZnJhbWUgKi8KLQkJdTMyOiAyNDsKLQl9IGZpZWxkOwotCXUzMiB3b3JkOwotfSBBVVRPX1JTUF9DRkdfU1RSVUMsICpQQVVUT19SU1BfQ0ZHX1NUUlVDOwotCi0jZGVmaW5lIExFR0FDWV9CQVNJQ19SQVRFCTB4MTQwOAkvKiAgVFhSWF9DU1I1ICAgICAgICAgICAweDMwNTQgKi8KLSNkZWZpbmUgSFRfQkFTSUNfUkFURQkJMHgxNDBjCi0jZGVmaW5lIEhUX0NUUkxfQ0ZHCQkweDE0MTAKLSNkZWZpbmUgU0lGU19DT1NUX0NGRwkJMHgxNDE0Ci0jZGVmaW5lIFJYX1BBUlNFUl9DRkcJCTB4MTQxOAkvKlNldCBOQVYgZm9yIGFsbCByZWNlaXZlZCBmcmFtZXMgKi8KLQotLyogKi8KLS8qICA0LjUgTUFDIFNlY3VyaXR5IGNvbmZpZ3VyYXRpb24gKG9mZnNldDoweDE1MDApICovCi0vKiAqLwotI2RlZmluZSBUWF9TRUNfQ05UMAkJMHgxNTAwCS8qICovCi0jZGVmaW5lIFJYX1NFQ19DTlQwCQkweDE1MDQJLyogKi8KLSNkZWZpbmUgQ0NNUF9GQ19NVVRFCQkweDE1MDgJLyogKi8KLS8qICovCi0vKiAgNC42IEhDQ0EvUFNNUCAob2Zmc2V0OjB4MTYwMCkgKi8KLS8qICovCi0jZGVmaW5lIFRYT1BfSExEUl9BRERSMAkJMHgxNjAwCi0jZGVmaW5lIFRYT1BfSExEUl9BRERSMQkJMHgxNjA0Ci0jZGVmaW5lIFRYT1BfSExEUl9FVAkJMHgxNjA4Ci0jZGVmaW5lIFFPU19DRlBPTExfUkFfRFcwCQkweDE2MGMKLSNkZWZpbmUgUU9TX0NGUE9MTF9BMV9EVzEJCTB4MTYxMAotI2RlZmluZSBRT1NfQ0ZQT0xMX1FDCQkweDE2MTQKLS8qICovCi0vKiAgNC43IE1BQyBTdGF0aXN0aXMgcmVnaXN0ZXJzIChvZmZzZXQ6MHgxNzAwKSAqLwotLyogKi8KLSNkZWZpbmUgUlhfU1RBX0NOVDAJCTB4MTcwMAkvKiAqLwotI2RlZmluZSBSWF9TVEFfQ05UMQkJMHgxNzA0CS8qICovCi0jZGVmaW5lIFJYX1NUQV9DTlQyCQkweDE3MDgJLyogKi8KLQotLyogKi8KLS8qIFJYX1NUQV9DTlQwX1NUUlVDOiBSWCBQTENQIGVycm9yIGNvdW50ICYgUlggQ1JDIGVycm9yIGNvdW50ICovCi0vKiAqLwotdHlwZWRlZiB1bmlvbiBfUlhfU1RBX0NOVDBfU1RSVUMgewotCXN0cnVjdCB7Ci0JCXUxNiBDcmNFcnI7Ci0JCXUxNiBQaHlFcnI7Ci0JfSBmaWVsZDsKLQl1MzIgd29yZDsKLX0gUlhfU1RBX0NOVDBfU1RSVUMsICpQUlhfU1RBX0NOVDBfU1RSVUM7Ci0KLS8qICovCi0vKiBSWF9TVEFfQ05UMV9TVFJVQzogUlggRmFsc2UgQ0NBIGNvdW50ICYgUlggbG9uZyBmcmFtZSBjb3VudCAqLwotLyogKi8KLXR5cGVkZWYgdW5pb24gX1JYX1NUQV9DTlQxX1NUUlVDIHsKLQlzdHJ1Y3QgewotCQl1MTYgRmFsc2VDY2E7Ci0JCXUxNiBQbGNwRXJyOwotCX0gZmllbGQ7Ci0JdTMyIHdvcmQ7Ci19IFJYX1NUQV9DTlQxX1NUUlVDLCAqUFJYX1NUQV9DTlQxX1NUUlVDOwotCi0vKiAqLwotLyogUlhfU1RBX0NOVDJfU1RSVUM6ICovCi0vKiAqLwotdHlwZWRlZiB1bmlvbiBfUlhfU1RBX0NOVDJfU1RSVUMgewotCXN0cnVjdCB7Ci0JCXUxNiBSeER1cGxpQ291bnQ7Ci0JCXUxNiBSeEZpZm9PdmVyZmxvd0NvdW50OwotCX0gZmllbGQ7Ci0JdTMyIHdvcmQ7Ci19IFJYX1NUQV9DTlQyX1NUUlVDLCAqUFJYX1NUQV9DTlQyX1NUUlVDOwotI2RlZmluZSBUWF9TVEFfQ05UMAkJMHgxNzBDCS8qICovCi0vKiAqLwotLyogU1RBX0NTUjM6IFRYIEJlYWNvbiBjb3VudCAqLwotLyogKi8KLXR5cGVkZWYgdW5pb24gX1RYX1NUQV9DTlQwX1NUUlVDIHsKLQlzdHJ1Y3QgewotCQl1MTYgVHhGYWlsQ291bnQ7Ci0JCXUxNiBUeEJlYWNvbkNvdW50OwotCX0gZmllbGQ7Ci0JdTMyIHdvcmQ7Ci19IFRYX1NUQV9DTlQwX1NUUlVDLCAqUFRYX1NUQV9DTlQwX1NUUlVDOwotI2RlZmluZSBUWF9TVEFfQ05UMQkJMHgxNzEwCS8qICovCi0vKiAqLwotLyogVFhfU1RBX0NOVDE6IFRYIHR4IGNvdW50ICovCi0vKiAqLwotdHlwZWRlZiB1bmlvbiBfVFhfU1RBX0NOVDFfU1RSVUMgewotCXN0cnVjdCB7Ci0JCXUxNiBUeFN1Y2Nlc3M7Ci0JCXUxNiBUeFJldHJhbnNtaXQ7Ci0JfSBmaWVsZDsKLQl1MzIgd29yZDsKLX0gVFhfU1RBX0NOVDFfU1RSVUMsICpQVFhfU1RBX0NOVDFfU1RSVUM7Ci0jZGVmaW5lIFRYX1NUQV9DTlQyCQkweDE3MTQJLyogKi8KLS8qICovCi0vKiBUWF9TVEFfQ05UMjogVFggdHggY291bnQgKi8KLS8qICovCi10eXBlZGVmIHVuaW9uIF9UWF9TVEFfQ05UMl9TVFJVQyB7Ci0Jc3RydWN0IHsKLQkJdTE2IFR4WmVyb0xlbkNvdW50OwotCQl1MTYgVHhVbmRlckZsb3dDb3VudDsKLQl9IGZpZWxkOwotCXUzMiB3b3JkOwotfSBUWF9TVEFfQ05UMl9TVFJVQywgKlBUWF9TVEFfQ05UMl9TVFJVQzsKLSNkZWZpbmUgVFhfU1RBX0ZJRk8JCTB4MTcxOAkvKiAqLwotLyogKi8KLS8qIFRYX1NUQV9GSUZPX1NUUlVDOiBUWCBSZXN1bHQgZm9yIHNwZWNpZmljIFBJRCBzdGF0dXMgZmlmbyByZWdpc3RlciAqLwotLyogKi8KLXR5cGVkZWYgdW5pb24gUEFDS0VEIF9UWF9TVEFfRklGT19TVFJVQyB7Ci0Jc3RydWN0IHsKLQkJdTMyIGJWYWxpZDoxOwkvKiAxOlRoaXMgcmVnaXN0ZXIgY29udGFpbnMgYSB2YWxpZCBUWCByZXN1bHQgKi8KLQkJdTMyIFBpZFR5cGU6NDsKLQkJdTMyIFR4U3VjY2VzczoxOwkvKiBUeCBObyByZXRyeSBzdWNjZXNzICovCi0JCXUzMiBUeEFnZ3JlOjE7CS8qIFR4IFJldHJ5IFN1Y2Nlc3MgKi8KLQkJdTMyIFR4QWNrUmVxdWlyZWQ6MTsJLyogVHggZmFpbCAqLwotCQl1MzIgd2NpZDo4OwkvKndpcmVsZXNzIGNsaWVudCBpbmRleCAqLwotLyogICAgICAgICAgICAgIHUzMiAgICAgICAgICBTdWNjZXNzUmF0ZToxNjsgLy9pbmNsdWRlIE1DUywgbW9kZSAsc2hvcnRHSSwgQlcgc2V0dGluZ1NhbWUgZm9ybWF0IGFzIFRYV0kgV29yZCAwIEJpdCAzMS0xNi4gKi8KLQkJdTMyIFN1Y2Nlc3NSYXRlOjEzOwkvKmluY2x1ZGUgTUNTLCBtb2RlICxzaG9ydEdJLCBCVyBzZXR0aW5nU2FtZSBmb3JtYXQgYXMgVFhXSSBXb3JkIDAgQml0IDMxLTE2LiAqLwotCQl1MzIgVHhCRjoxOwotCQl1MzIgUmVzZXJ2ZToyOwotCX0gZmllbGQ7Ci0JdTMyIHdvcmQ7Ci19IFRYX1NUQV9GSUZPX1NUUlVDLCAqUFRYX1NUQV9GSUZPX1NUUlVDOwotLyogRGVidWcgY291bnRlciAqLwotI2RlZmluZSBUWF9BR0dfQ05UCTB4MTcxYwotdHlwZWRlZiB1bmlvbiBfVFhfQUdHX0NOVF9TVFJVQyB7Ci0Jc3RydWN0IHsKLQkJdTE2IE5vbkFnZ1R4Q291bnQ7Ci0JCXUxNiBBZ2dUeENvdW50OwotCX0gZmllbGQ7Ci0JdTMyIHdvcmQ7Ci19IFRYX0FHR19DTlRfU1RSVUMsICpQVFhfQUdHX0NOVF9TVFJVQzsKLS8qIERlYnVnIGNvdW50ZXIgKi8KLSNkZWZpbmUgVFhfQUdHX0NOVDAJMHgxNzIwCi10eXBlZGVmIHVuaW9uIF9UWF9BR0dfQ05UMF9TVFJVQyB7Ci0Jc3RydWN0IHsKLQkJdTE2IEFnZ1NpemUxQ291bnQ7Ci0JCXUxNiBBZ2dTaXplMkNvdW50OwotCX0gZmllbGQ7Ci0JdTMyIHdvcmQ7Ci19IFRYX0FHR19DTlQwX1NUUlVDLCAqUFRYX0FHR19DTlQwX1NUUlVDOwotLyogRGVidWcgY291bnRlciAqLwotI2RlZmluZSBUWF9BR0dfQ05UMQkweDE3MjQKLXR5cGVkZWYgdW5pb24gX1RYX0FHR19DTlQxX1NUUlVDIHsKLQlzdHJ1Y3QgewotCQl1MTYgQWdnU2l6ZTNDb3VudDsKLQkJdTE2IEFnZ1NpemU0Q291bnQ7Ci0JfSBmaWVsZDsKLQl1MzIgd29yZDsKLX0gVFhfQUdHX0NOVDFfU1RSVUMsICpQVFhfQUdHX0NOVDFfU1RSVUM7Ci0jZGVmaW5lIFRYX0FHR19DTlQyCTB4MTcyOAotdHlwZWRlZiB1bmlvbiBfVFhfQUdHX0NOVDJfU1RSVUMgewotCXN0cnVjdCB7Ci0JCXUxNiBBZ2dTaXplNUNvdW50OwotCQl1MTYgQWdnU2l6ZTZDb3VudDsKLQl9IGZpZWxkOwotCXUzMiB3b3JkOwotfSBUWF9BR0dfQ05UMl9TVFJVQywgKlBUWF9BR0dfQ05UMl9TVFJVQzsKLS8qIERlYnVnIGNvdW50ZXIgKi8KLSNkZWZpbmUgVFhfQUdHX0NOVDMJMHgxNzJjCi10eXBlZGVmIHVuaW9uIF9UWF9BR0dfQ05UM19TVFJVQyB7Ci0Jc3RydWN0IHsKLQkJdTE2IEFnZ1NpemU3Q291bnQ7Ci0JCXUxNiBBZ2dTaXplOENvdW50OwotCX0gZmllbGQ7Ci0JdTMyIHdvcmQ7Ci19IFRYX0FHR19DTlQzX1NUUlVDLCAqUFRYX0FHR19DTlQzX1NUUlVDOwotLyogRGVidWcgY291bnRlciAqLwotI2RlZmluZSBUWF9BR0dfQ05UNAkweDE3MzAKLXR5cGVkZWYgdW5pb24gX1RYX0FHR19DTlQ0X1NUUlVDIHsKLQlzdHJ1Y3QgewotCQl1MTYgQWdnU2l6ZTlDb3VudDsKLQkJdTE2IEFnZ1NpemUxMENvdW50OwotCX0gZmllbGQ7Ci0JdTMyIHdvcmQ7Ci19IFRYX0FHR19DTlQ0X1NUUlVDLCAqUFRYX0FHR19DTlQ0X1NUUlVDOwotI2RlZmluZSBUWF9BR0dfQ05UNQkweDE3MzQKLXR5cGVkZWYgdW5pb24gX1RYX0FHR19DTlQ1X1NUUlVDIHsKLQlzdHJ1Y3QgewotCQl1MTYgQWdnU2l6ZTExQ291bnQ7Ci0JCXUxNiBBZ2dTaXplMTJDb3VudDsKLQl9IGZpZWxkOwotCXUzMiB3b3JkOwotfSBUWF9BR0dfQ05UNV9TVFJVQywgKlBUWF9BR0dfQ05UNV9TVFJVQzsKLSNkZWZpbmUgVFhfQUdHX0NOVDYJCTB4MTczOAotdHlwZWRlZiB1bmlvbiBfVFhfQUdHX0NOVDZfU1RSVUMgewotCXN0cnVjdCB7Ci0JCXUxNiBBZ2dTaXplMTNDb3VudDsKLQkJdTE2IEFnZ1NpemUxNENvdW50OwotCX0gZmllbGQ7Ci0JdTMyIHdvcmQ7Ci19IFRYX0FHR19DTlQ2X1NUUlVDLCAqUFRYX0FHR19DTlQ2X1NUUlVDOwotI2RlZmluZSBUWF9BR0dfQ05UNwkJMHgxNzNjCi10eXBlZGVmIHVuaW9uIF9UWF9BR0dfQ05UN19TVFJVQyB7Ci0Jc3RydWN0IHsKLQkJdTE2IEFnZ1NpemUxNUNvdW50OwotCQl1MTYgQWdnU2l6ZTE2Q291bnQ7Ci0JfSBmaWVsZDsKLQl1MzIgd29yZDsKLX0gVFhfQUdHX0NOVDdfU1RSVUMsICpQVFhfQUdHX0NOVDdfU1RSVUM7Ci0jZGVmaW5lIE1QRFVfREVOU0lUWV9DTlQJCTB4MTc0MAotdHlwZWRlZiB1bmlvbiBfTVBEVV9ERU5fQ05UX1NUUlVDIHsKLQlzdHJ1Y3QgewotCQl1MTYgVFhaZXJvRGVsQ291bnQ7CS8qVFggemVybyBsZW5ndGggZGVsaW1pdGVyIGNvdW50ICovCi0JCXUxNiBSWFplcm9EZWxDb3VudDsJLypSWCB6ZXJvIGxlbmd0aCBkZWxpbWl0ZXIgY291bnQgKi8KLQl9IGZpZWxkOwotCXUzMiB3b3JkOwotfSBNUERVX0RFTl9DTlRfU1RSVUMsICpQTVBEVV9ERU5fQ05UX1NUUlVDOwotLyogKi8KLS8qIFRYUlggY29udHJvbCByZWdpc3RlcnMgLSBiYXNlIGFkZHJlc3MgMHgzMDAwICovCi0vKiAqLwotLyogcnQyODYwYiAgVU5LTk9XTiByZWcgdXNlIFIvTyBSZWcgQWRkciAweDc3ZDAgZmlyc3QuLiAqLwotI2RlZmluZSBUWFJYX0NTUjEgICAgICAgICAgIDB4NzdkMAotCi0vKiAqLwotLyogU2VjdXJpdHkga2V5IHRhYmxlIG1lbW9yeSwgYmFzZSBhZGRyZXNzID0gMHgxMDAwICovCi0vKiAqLwotI2RlZmluZSBNQUNfV0NJRF9CQVNFCQkweDE4MDAJLyo4LWJ5dGVzKHVzZSBvbmx5IDYtYnl0ZXMpICogMjU2IGVudHJ5ID0gKi8KLSNkZWZpbmUgSFdfV0NJRF9FTlRSWV9TSVpFICAgOAotI2RlZmluZSBQQUlSV0lTRV9LRVlfVEFCTEVfQkFTRSAgICAgMHg0MDAwCS8qIDMyLWJ5dGUgKiAyNTYtZW50cnkgPSAgLWJ5dGUgKi8KLSNkZWZpbmUgSFdfS0VZX0VOVFJZX1NJWkUgICAgICAgICAgIDB4MjAKLSNkZWZpbmUgUEFJUldJU0VfSVZFSVZfVEFCTEVfQkFTRSAgICAgMHg2MDAwCS8qIDgtYnl0ZSAqIDI1Ni1lbnRyeSA9ICAtYnl0ZSAqLwotI2RlZmluZSBNQUNfSVZFSVZfVEFCTEVfQkFTRSAgICAgMHg2MDAwCS8qIDgtYnl0ZSAqIDI1Ni1lbnRyeSA9ICAtYnl0ZSAqLwotI2RlZmluZSBIV19JVkVJVl9FTlRSWV9TSVpFICAgOAotI2RlZmluZSBNQUNfV0NJRF9BVFRSSUJVVEVfQkFTRSAgICAgMHg2ODAwCS8qIDQtYnl0ZSAqIDI1Ni1lbnRyeSA9ICAtYnl0ZSAqLwotI2RlZmluZSBIV19XQ0lEX0FUVFJJX1NJWkUgICA0Ci0jZGVmaW5lIFdDSURfUkVTRVJWRUQJCQkweDZiZmMKLSNkZWZpbmUgU0hBUkVEX0tFWV9UQUJMRV9CQVNFICAgICAgIDB4NmMwMAkvKiAzMi1ieXRlICogMTYtZW50cnkgPSA1MTItYnl0ZSAqLwotI2RlZmluZSBTSEFSRURfS0VZX01PREVfQkFTRSAgICAgICAweDcwMDAJLyogMzItYnl0ZSAqIDE2LWVudHJ5ID0gNTEyLWJ5dGUgKi8KLSNkZWZpbmUgSFdfU0hBUkVEX0tFWV9NT0RFX1NJWkUgICA0Ci0jZGVmaW5lIFNIQVJFREtFWVRBQkxFCQkJMAotI2RlZmluZSBQQUlSV0lTRUtFWVRBQkxFCQkJMQotCi10eXBlZGVmIHVuaW9uIF9TSEFSRURLRVlfTU9ERV9TVFJVQyB7Ci0Jc3RydWN0IHsKLQkJdTMyIEJzczBLZXkwQ2lwaGVyQWxnOjM7Ci0JCXUzMjogMTsKLQkJdTMyIEJzczBLZXkxQ2lwaGVyQWxnOjM7Ci0JCXUzMjogMTsKLQkJdTMyIEJzczBLZXkyQ2lwaGVyQWxnOjM7Ci0JCXUzMjogMTsKLQkJdTMyIEJzczBLZXkzQ2lwaGVyQWxnOjM7Ci0JCXUzMjogMTsKLQkJdTMyIEJzczFLZXkwQ2lwaGVyQWxnOjM7Ci0JCXUzMjogMTsKLQkJdTMyIEJzczFLZXkxQ2lwaGVyQWxnOjM7Ci0JCXUzMjogMTsKLQkJdTMyIEJzczFLZXkyQ2lwaGVyQWxnOjM7Ci0JCXUzMjogMTsKLQkJdTMyIEJzczFLZXkzQ2lwaGVyQWxnOjM7Ci0JCXUzMjogMTsKLQl9IGZpZWxkOwotCXUzMiB3b3JkOwotfSBTSEFSRURLRVlfTU9ERV9TVFJVQywgKlBTSEFSRURLRVlfTU9ERV9TVFJVQzsKLQotLyogOC1ieXRlIHBlciBlbnRyeSwgNjQtZW50cnkgZm9yIHBhaXJ3aXNlIGtleSB0YWJsZSAqLwotc3RydWN0IHJ0X2h3X3djaWRfZW50cnkgewotCXU4IEFkZHJlc3NbNl07Ci0JdTggUnN2WzJdOwotfTsKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0vKiBXQ0lEICBmb3JtYXQgKi8KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotLyo3LjEgICBXQ0lEICBFTlRSWSAgZm9ybWF0ICA6IDhieXRlcyAqLwotc3RydWN0IHJ0X3djaWRfZW50cnkgewotCXU4IFJYQkFCaXRtYXA3OwkvKiBiaXQwIGZvciBUSUQ4LCBiaXQ3IGZvciBUSUQgMTUgKi8KLQl1OCBSWEJBQml0bWFwMDsJLyogYml0MCBmb3IgVElEMCwgYml0NyBmb3IgVElEIDcgKi8KLQl1OCBNQUNbNl07CQkvKiAwIGZvciBzaGFyZWQga2V5IHRhYmxlLiAgMSBmb3IgcGFpcndpc2Uga2V5IHRhYmxlICovCi19OwotCi0vKjguMS4xIFNFQ1VSSVRZICBLRVkgIGZvcm1hdCAgOiA4RFcgKi8KLS8qIDMyLWJ5dGUgcGVyIGVudHJ5LCB0b3RhbCAxNi1lbnRyeSBmb3Igc2hhcmVkIGtleSB0YWJsZSwgNjQtZW50cnkgZm9yIHBhaXJ3aXNlIGtleSB0YWJsZSAqLwotc3RydWN0IHJ0X2h3X2tleV9lbnRyeSB7Ci0JdTggS2V5WzE2XTsKLQl1OCBUeE1pY1s4XTsKLQl1OCBSeE1pY1s4XTsKLX07Ci0KLS8qOC4xLjIgSVYvRUlWICBmb3JtYXQgIDogMkRXICovCi0KLS8qOC4xLjMgUlggYXR0cmlidXRlIGVudHJ5IGZvcm1hdCAgOiAxRFcgKi8KLXN0cnVjdCBydF9tYWNfYXR0cmlidXRlIHsKLQl1MzIgS2V5VGFiOjE7CS8qIDAgZm9yIHNoYXJlZCBrZXkgdGFibGUuICAxIGZvciBwYWlyd2lzZSBrZXkgdGFibGUgKi8KLQl1MzIgUGFpcktleU1vZGU6MzsKLQl1MzIgQlNTSURJZHg6MzsJLyptdWx0aXBsZUJTUyBpbmRleCBmb3IgdGhlIFdDSUQgKi8KLQl1MzIgUlhXSVVERjozOwotCXUzMiByc3Y6MjI7Ci19OwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLS8qIEhPU1QtTUNVIGNvbW11bmljYXRpb24gZGF0YSBzdHJ1Y3R1cmUgKi8KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi0vKiAqLwotLyogSDJNX01BSUxCT1hfQ1NSOiBIb3N0LXRvLU1DVSBNYWlsYm94ICovCi0vKiAqLwotdHlwZWRlZiB1bmlvbiBfSDJNX01BSUxCT1hfU1RSVUMgewotCXN0cnVjdCB7Ci0JCXUzMiBMb3dCeXRlOjg7Ci0JCXUzMiBIaWdoQnl0ZTo4OwotCQl1MzIgQ21kVG9rZW46ODsKLQkJdTMyIE93bmVyOjg7Ci0JfSBmaWVsZDsKLQl1MzIgd29yZDsKLX0gSDJNX01BSUxCT1hfU1RSVUMsICpQSDJNX01BSUxCT1hfU1RSVUM7Ci0KLS8qICovCi0vKiBNMkhfQ01EX0RPTkVfQ1NSOiBNQ1UtdG8tSG9zdCBjb21tYW5kIGNvbXBsZXRlIGluZGljYXRpb24gKi8KLS8qICovCi10eXBlZGVmIHVuaW9uIF9NMkhfQ01EX0RPTkVfU1RSVUMgewotCXN0cnVjdCB7Ci0JCXUzMiBDbWRUb2tlbjA7Ci0JCXUzMiBDbWRUb2tlbjE7Ci0JCXUzMiBDbWRUb2tlbjI7Ci0JCXUzMiBDbWRUb2tlbjM7Ci0JfSBmaWVsZDsKLQl1MzIgd29yZDsKLX0gTTJIX0NNRF9ET05FX1NUUlVDLCAqUE0ySF9DTURfRE9ORV9TVFJVQzsKLQotLypOQVZfVElNRV9DRkcgOk5BViAqLwotdHlwZWRlZiB1bmlvbiBfTkFWX1RJTUVfQ0ZHX1NUUlVDIHsKLQlzdHJ1Y3QgewotCQl1OCBTaWZzOwkvKiBpbiB1bml0IG9mIDEtdXMgKi8KLQkJdTggU2xvdFRpbWU7CS8qIGluIHVuaXQgb2YgMS11cyAqLwotCQl1MTYgRWlmczo5OwkvKiBpbiB1bml0IG9mIDEtdXMgKi8KLQkJdTE2IFplcm9TaWZzOjE7CS8qIEFwcGxpZWQgemVybyBTSUZTIHRpbWVyIGFmdGVyIE9GRE0gUlggMDogZGlzYWJsZSAqLwotCQl1MTYgcnN2OjY7Ci0JfSBmaWVsZDsKLQl1MzIgd29yZDsKLX0gTkFWX1RJTUVfQ0ZHX1NUUlVDLCAqUE5BVl9USU1FX0NGR19TVFJVQzsKLQotLyogKi8KLS8qIFJYX0ZJTFRSX0NGRzogIC9SWCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCi0vKiAqLwotdHlwZWRlZiB1bmlvbiBfUlhfRklMVFJfQ0ZHX1NUUlVDIHsKLQlzdHJ1Y3QgewotCQl1MzIgRHJvcENSQ0VycjoxOwkvKiBEcm9wIENSQyBlcnJvciAqLwotCQl1MzIgRHJvcFBoeUVycjoxOwkvKiBEcm9wIHBoeXNpY2FsIGVycm9yICovCi0JCXUzMiBEcm9wTm90VG9NZToxOwkvKiBEcm9wIG5vdCB0byBtZSB1bmljYXN0IGZyYW1lICovCi0JCXUzMiBEcm9wTm90TXlCU1NJRDoxOwkvKiBEcm9wIGZyYW0gVG9EcyBiaXQgaXMgdHJ1ZSAqLwotCi0JCXUzMiBEcm9wVmVyRXJyOjE7CS8qIERyb3AgdmVyc2lvbiBlcnJvciBmcmFtZSAqLwotCQl1MzIgRHJvcE1jYXN0OjE7CS8qIERyb3AgbXVsdGljYXN0IGZyYW1lcyAqLwotCQl1MzIgRHJvcEJjYXN0OjE7CS8qIERyb3AgYnJvYWRjYXN0IGZyYW1lcyAqLwotCQl1MzIgRHJvcER1cGxpY2F0ZToxOwkvKiBEcm9wIGR1cGxpY2F0ZSBmcmFtZSAqLwotCi0JCXUzMiBEcm9wQ0ZFbmRBY2s6MTsJLyogRHJvcCBQcy1Qb2xsICovCi0JCXUzMiBEcm9wQ0ZFbmQ6MTsJLyogRHJvcCBQcy1Qb2xsICovCi0JCXUzMiBEcm9wQWNrOjE7CS8qIERyb3AgUHMtUG9sbCAqLwotCQl1MzIgRHJvcEN0czoxOwkvKiBEcm9wIFBzLVBvbGwgKi8KLQotCQl1MzIgRHJvcFJ0czoxOwkvKiBEcm9wIFBzLVBvbGwgKi8KLQkJdTMyIERyb3BQc1BvbGw6MTsJLyogRHJvcCBQcy1Qb2xsICovCi0JCXUzMiBEcm9wQkE6MTsJLyogKi8KLQkJdTMyIERyb3BCQVI6MTsJLyogKi8KLQotCQl1MzIgRHJvcFJzdkNudGxUeXBlOjE7Ci0JCXUzMjogMTU7Ci0JfSBmaWVsZDsKLQl1MzIgd29yZDsKLX0gUlhfRklMVFJfQ0ZHX1NUUlVDLCAqUFJYX0ZJTFRSX0NGR19TVFJVQzsKLQotLyogKi8KLS8qIFBIWV9DU1I0OiBSRiBzZXJpYWwgY29udHJvbCByZWdpc3RlciAqLwotLyogKi8KLXR5cGVkZWYgdW5pb24gX1BIWV9DU1I0X1NUUlVDIHsKLQlzdHJ1Y3QgewotCQl1MzIgUkZSZWdWYWx1ZToyNDsJLyogUmVnaXN0ZXIgICAgIHZhbHVlIChpbmNsdWRlIHJlZ2lzdGVyIGlkKSAgICAgc2VyaWFsIG91dCB0byBSRi9JRiAgICAgY2hpcC4gKi8KLQkJdTMyIE51bWJlck9mQml0czo1OwkvKiBOdW1iZXIgb2YgYml0cyB1c2VkIGluIFJGUmVnVmFsdWUgKEk6MjAsICAgICBSRk1EOjIyKSAqLwotCQl1MzIgSUZTZWxlY3Q6MTsJLyogMTogc2VsZWN0IElGIHRvIHByb2dyYW0sICAgICAwOiBzZWxlY3QgUkYgdG8gcHJvZ3JhbSAqLwotCQl1MzIgUExMX0xEOjE7CS8qIFJGIFBMTF9MRCBzdGF0dXMgKi8KLQkJdTMyIEJ1c3k6MTsJLyogMTogQVNJQyBpcyBidXN5IGV4ZWN1dGUgUkYgcHJvZ3JhbW1pbmcuICovCi0JfSBmaWVsZDsKLQl1MzIgd29yZDsKLX0gUEhZX0NTUjRfU1RSVUMsICpQUEhZX0NTUjRfU1RSVUM7Ci0KLS8qICovCi0vKiBTRUNfQ1NSNTogc2hhcmVkIGtleSB0YWJsZSBzZWN1cml0eSBtb2RlIHJlZ2lzdGVyICovCi0vKiAqLwotdHlwZWRlZiB1bmlvbiBfU0VDX0NTUjVfU1RSVUMgewotCXN0cnVjdCB7Ci0JCXUzMiBCc3MyS2V5MENpcGhlckFsZzozOwotCQl1MzI6IDE7Ci0JCXUzMiBCc3MyS2V5MUNpcGhlckFsZzozOwotCQl1MzI6IDE7Ci0JCXUzMiBCc3MyS2V5MkNpcGhlckFsZzozOwotCQl1MzI6IDE7Ci0JCXUzMiBCc3MyS2V5M0NpcGhlckFsZzozOwotCQl1MzI6IDE7Ci0JCXUzMiBCc3MzS2V5MENpcGhlckFsZzozOwotCQl1MzI6IDE7Ci0JCXUzMiBCc3MzS2V5MUNpcGhlckFsZzozOwotCQl1MzI6IDE7Ci0JCXUzMiBCc3MzS2V5MkNpcGhlckFsZzozOwotCQl1MzI6IDE7Ci0JCXUzMiBCc3MzS2V5M0NpcGhlckFsZzozOwotCQl1MzI6IDE7Ci0JfSBmaWVsZDsKLQl1MzIgd29yZDsKLX0gU0VDX0NTUjVfU1RSVUMsICpQU0VDX0NTUjVfU1RSVUM7Ci0KLS8qICovCi0vKiBIT1NUX0NNRF9DU1I6IEZvciBIT1NUIHRvIGludGVycnVwdCBlbWJlZGRlZCBwcm9jZXNzb3IgKi8KLS8qICovCi10eXBlZGVmIHVuaW9uIF9IT1NUX0NNRF9DU1JfU1RSVUMgewotCXN0cnVjdCB7Ci0JCXUzMiBIb3N0Q29tbWFuZDo4OwotCQl1MzIgUnN2OjI0OwotCX0gZmllbGQ7Ci0JdTMyIHdvcmQ7Ci19IEhPU1RfQ01EX0NTUl9TVFJVQywgKlBIT1NUX0NNRF9DU1JfU1RSVUM7Ci0KLS8qICovCi0vKiBBSUZTTl9DU1I6IEFJRlNOIGZvciBlYWNoIEVEQ0EgQUMgKi8KLS8qICovCi0KLS8qICovCi0vKiBFMlBST01fQ1NSOiBFRVBST00gY29udHJvbCByZWdpc3RlciAqLwotLyogKi8KLXR5cGVkZWYgdW5pb24gX0UyUFJPTV9DU1JfU1RSVUMgewotCXN0cnVjdCB7Ci0JCXUzMiBSZWxvYWQ6MTsJLyogUmVsb2FkIEVFUFJPTSBjb250ZW50LCB3cml0ZSBvbmUgdG8gcmVsb2FkLCBzZWxmLWNsZWFyZWQuICovCi0JCXUzMiBFZXByb21TSzoxOwotCQl1MzIgRWVwcm9tQ1M6MTsKLQkJdTMyIEVlcHJvbURJOjE7Ci0JCXUzMiBFZXByb21ETzoxOwotCQl1MzIgVHlwZToxOwkvKiAxOiA5M0M0NiwgMDo5M0M2NiAqLwotCQl1MzIgTG9hZFN0YXR1czoxOwkvKiAxOmxvYWRpbmcsIDA6ZG9uZSAqLwotCQl1MzIgUnN2ZDoyNTsKLQl9IGZpZWxkOwotCXUzMiB3b3JkOwotfSBFMlBST01fQ1NSX1NUUlVDLCAqUEUyUFJPTV9DU1JfU1RSVUM7Ci0KLS8qICovCi0vKiBRT1NfQ1NSMDogVFhPUCBob2xkZXIgYWRkcmVzczAgcmVnaXN0ZXIgKi8KLS8qICovCi10eXBlZGVmIHVuaW9uIF9RT1NfQ1NSMF9TVFJVQyB7Ci0Jc3RydWN0IHsKLQkJdTggQnl0ZTA7CS8qIE1BQyBhZGRyZXNzIGJ5dGUgMCAqLwotCQl1OCBCeXRlMTsJLyogTUFDIGFkZHJlc3MgYnl0ZSAxICovCi0JCXU4IEJ5dGUyOwkvKiBNQUMgYWRkcmVzcyBieXRlIDIgKi8KLQkJdTggQnl0ZTM7CS8qIE1BQyBhZGRyZXNzIGJ5dGUgMyAqLwotCX0gZmllbGQ7Ci0JdTMyIHdvcmQ7Ci19IFFPU19DU1IwX1NUUlVDLCAqUFFPU19DU1IwX1NUUlVDOwotCi0vKiAqLwotLyogUU9TX0NTUjE6IFRYT1AgaG9sZGVyIGFkZHJlc3MxIHJlZ2lzdGVyICovCi0vKiAqLwotdHlwZWRlZiB1bmlvbiBfUU9TX0NTUjFfU1RSVUMgewotCXN0cnVjdCB7Ci0JCXU4IEJ5dGU0OwkvKiBNQUMgYWRkcmVzcyBieXRlIDQgKi8KLQkJdTggQnl0ZTU7CS8qIE1BQyBhZGRyZXNzIGJ5dGUgNSAqLwotCQl1OCBSc3ZkMDsKLQkJdTggUnN2ZDE7Ci0JfSBmaWVsZDsKLQl1MzIgd29yZDsKLX0gUU9TX0NTUjFfU1RSVUMsICpQUU9TX0NTUjFfU1RSVUM7Ci0KLSNkZWZpbmUJUkZfQ1NSX0NGRwkweDUwMAotdHlwZWRlZiB1bmlvbiBfUkZfQ1NSX0NGR19TVFJVQyB7Ci0Jc3RydWN0IHsKLQkJdTMyIFJGX0NTUl9EQVRBOjg7CS8qIERBVEEgKi8KLQkJdTMyIFRFU1RDU1JfUkZBQ0NfUkVHTlVNOjU7CS8qIFJGIHJlZ2lzdGVyIElEICovCi0JCXUzMiBSc3ZkMjozOwkvKiBSZXNlcnZlZCAqLwotCQl1MzIgUkZfQ1NSX1dSOjE7CS8qIDA6IHJlYWQgIDE6IHdyaXRlICovCi0JCXUzMiBSRl9DU1JfS0lDSzoxOwkvKiBraWNrIFJGIHJlZ2lzdGVyIHJlYWQvd3JpdGUgKi8KLQkJdTMyIFJzdmQxOjE0OwkvKiBSZXNlcnZlZCAqLwotCX0gZmllbGQ7Ci0JdTMyIHdvcmQ7Ci19IFJGX0NTUl9DRkdfU1RSVUMsICpQUkZfQ1NSX0NGR19TVFJVQzsKLQotLyogKi8KLS8qIE90aGVyIG9uLWNoaXAgc2hhcmVkIG1lbW9yeSBzcGFjZSwgYmFzZSA9IDB4MjAwMCAqLwotLyogKi8KLQotLyogQ0lTIHNwYWNlIC0gYmFzZSBhZGRyZXNzID0gMHgyMDAwICovCi0jZGVmaW5lIEhXX0NJU19CQVNFICAgICAgICAgICAgIDB4MjAwMAotCi0vKiBDYXJyaWVyLXNlbnNlIENUUyBmcmFtZSBiYXNlIGFkZHJlc3MuIEl0J3Mgd2hlcmUgbWFjIHN0b3JlcyBjYXJyaWVyLXNlbnNlIGZyYW1lIGZvciBjYXJyaWVyLXNlbnNlIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIV19DU19DVFNfQkFTRQkJCTB4NzcwMAotLyogREZTIENUUyBmcmFtZSBiYXNlIGFkZHJlc3MuIEl0J3Mgd2hlcmUgbWFjIHN0b3JlcyBDVFMgZnJhbWUgZm9yIERGUy4gKi8KLSNkZWZpbmUgSFdfREZTX0NUU19CQVNFCQkJMHg3NzgwCi0jZGVmaW5lIEhXX0NUU19GUkFNRV9TSVpFCQkweDgwCi0KLS8qIDIwMDQtMTEtMDggam9obiAtIHNpbmNlIE5VTEwgZnJhbWUgd29uJ3QgYmUgdGhhdCBsb25nICgyNTYgYnl0ZSkuIFdlIHN0ZWFsIDE2IHRhaWwgYnl0ZXMgKi8KLS8qIHRvIHNhdmUgZGVidWdnaW5nIHNldHRpbmdzICovCi0jZGVmaW5lIEhXX0RFQlVHX1NFVFRJTkdfQkFTRSAgIDB4NzdmMAkvKiAweDc3ZjB+MHg3N2ZmIHRvdGFsIDE2IGJ5dGVzICovCi0jZGVmaW5lIEhXX0RFQlVHX1NFVFRJTkdfQkFTRTIgICAweDc3NzAJLyogMHg3N2YwfjB4NzdmZiB0b3RhbCAxNiBieXRlcyAqLwotCi0vKiBJbiBvcmRlciB0byBzdXBwb3J0IG1heGltdW0gOCBNQlNTIGFuZCBpdHMgbWF4aW11bSBsZW5ndGggaXMgNTEyIGZvciBlYWNoIGJlYWNvbiAqLwotLyogVGhyZWUgc2VjdGlvbiBkaXNjb250aW51ZSBtZW1vcnkgc2VnbWVudHMgd2lsbCBiZSB1c2VkLiAqLwotLyogMS4gVGhlIG9yaWdpbmFsIHJlZ2lvbiBmb3IgQkNOIDB+MyAqLwotLyogMi4gRXh0cmFjdCBtZW1vcnkgZnJvbSBGQ0UgdGFibGUgZm9yIEJDTiA0fjUgKi8KLS8qIDMuIEV4dHJhY3QgbWVtb3J5IGZyb20gUGFpci13aXNlIGtleSB0YWJsZSBmb3IgQkNOIDZ+NyAqLwotLyogICAgICAgIEl0IG9jY3VwaWVkIHRob3NlIG1lbW9yeSBvZiB3Y2lkIDIzOH4yNTMgZm9yIEJDTiA2ICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgd2NpZCAyMjJ+MjM3IGZvciBCQ04gNyAqLwotI2RlZmluZSBIV19CRUFDT05fTUFYX1NJWkUgICAgICAweDEwMDAJLyogdW5pdDogYnl0ZSAqLwotI2RlZmluZSBIV19CRUFDT05fQkFTRTAgICAgICAgICAweDc4MDAKLSNkZWZpbmUgSFdfQkVBQ09OX0JBU0UxICAgICAgICAgMHg3QTAwCi0jZGVmaW5lIEhXX0JFQUNPTl9CQVNFMiAgICAgICAgIDB4N0MwMAotI2RlZmluZSBIV19CRUFDT05fQkFTRTMgICAgICAgICAweDdFMDAKLSNkZWZpbmUgSFdfQkVBQ09OX0JBU0U0ICAgICAgICAgMHg3MjAwCi0jZGVmaW5lIEhXX0JFQUNPTl9CQVNFNSAgICAgICAgIDB4NzQwMAotI2RlZmluZSBIV19CRUFDT05fQkFTRTYgICAgICAgICAweDVEQzAKLSNkZWZpbmUgSFdfQkVBQ09OX0JBU0U3ICAgICAgICAgMHg1QkMwCi0KLSNkZWZpbmUgSFdfQkVBQ09OX01BWF9DT1VOVCAgICAgOAotI2RlZmluZSBIV19CRUFDT05fT0ZGU0VUCQkweDAyMDAKLSNkZWZpbmUgSFdfQkVBQ09OX0NPTlRFTlRfTEVOCShIV19CRUFDT05fT0ZGU0VUIC0gVFhXSV9TSVpFKQotCi0vKiBIT1NULU1DVSBzaGFyZWQgbWVtb3J5IC0gYmFzZSBhZGRyZXNzID0gMHgyMTAwICovCi0jZGVmaW5lIEhPU1RfQ01EX0NTUgkJMHg0MDQKLSNkZWZpbmUgSDJNX01BSUxCT1hfQ1NSICAgICAgICAgMHg3MDEwCi0jZGVmaW5lIEgyTV9NQUlMQk9YX0NJRCAgICAgICAgIDB4NzAxNAotI2RlZmluZSBIMk1fTUFJTEJPWF9TVEFUVVMgICAgICAweDcwMWMKLSNkZWZpbmUgSDJNX0lOVF9TUkMgICAgICAgICAgICAgMHg3MDI0Ci0jZGVmaW5lIEgyTV9CQlBfQUdFTlQgICAgICAgICAgIDB4NzAyOAotI2RlZmluZSBNMkhfQ01EX0RPTkVfQ1NSICAgICAgICAweDAwMGMKLSNkZWZpbmUgTUNVX1RYT1BfQVJSQVlfQkFTRSAgICAgMHgwMDBjCS8qIFRPRE86IHRvIGJlIHByb3ZpZGVkIGJ5IEFsYmVydCAqLwotI2RlZmluZSBNQ1VfVFhPUF9FTlRSWV9TSVpFICAgICAzMgkvKiBUT0RPOiB0byBiZSBwcm92aWRlZCBieSBBbGJlcnQgKi8KLSNkZWZpbmUgTUFYX05VTV9PRl9UWE9QX0VOVFJZICAgMTYJLyogVE9ETzogbXVzdCBiZSBzYW1lIHdpdGggODA1MSBmaXJtd2FyZSAqLwotI2RlZmluZSBNQ1VfTUJPWF9WRVJTSU9OICAgICAgICAweDAxCS8qIFRPRE86IHRvIGJlIGNvbmZpcm1lZCBieSBBbGJlcnQgKi8KLSNkZWZpbmUgTUNVX01CT1hfVkVSU0lPTl9PRkZTRVQgNQkvKiBUT0RPOiB0byBiZSBwcm92aWRlZCBieSBBbGJlcnQgKi8KLQotLyogKi8KLS8qIEhvc3QgRE1BIHJlZ2lzdGVycyAtIGJhc2UgYWRkcmVzcyAweDIwMCAuICBUWDAtMz1FRENBUWlkMC0zLCBUWDQ9SENDQSwgVFg1PU1HTVQsICovCi0vKiAqLwotLyogKi8KLS8qICBETUEgUklORyBERVNDUklQVE9SICovCi0vKiAqLwotI2RlZmluZSBFMlBST01fQ1NSICAgICAgICAgIDB4MDAwNAotI2RlZmluZSBJT19DTlRMX0NTUiAgICAgICAgIDB4NzdkMAotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0vKiBUeCAvIFJ4IC8gTWdtdCByaW5nIGRlc2NyaXB0b3IgZGVmaW5pdGlvbiAqLwotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi0vKiB0aGUgZm9sbG93aW5nIFBJRCB2YWx1ZXMgYXJlIHVzZWQgdG8gbWFyayBvdXRnb2luZyBmcmFtZSB0eXBlIGluIFRYRC0+UElEIHNvIHRoYXQgKi8KLS8qIHByb3BlciBUWCBzdGF0aXN0aWNzIGNhbiBiZSBjb2xsZWN0ZWQgYmFzZWQgb24gdGhlc2UgY2F0ZWdvcmllcyAqLwotLyogYjMtMiBvZiBQSUQgZmllbGQgLSAqLwotI2RlZmluZSBQSURfTUdNVAkJCTB4MDUKLSNkZWZpbmUgUElEX0JFQUNPTgkJCTB4MGMKLSNkZWZpbmUgUElEX0RBVEFfTk9STUFMVUNBU1QJCTB4MDIKLSNkZWZpbmUgUElEX0RBVEFfQU1QRFUJCTB4MDQKLSNkZWZpbmUgUElEX0RBVEFfTk9fQUNLCQkweDA4Ci0jZGVmaW5lIFBJRF9EQVRBX05PVF9OT1JNX0FDSwkJMHgwMwotLyogdmFsdWUgZG9tYWluIG9mIHBUeEQtPkhvc3RRSWQgKDQtYml0OiAwfjE1KSAqLwotI2RlZmluZSBRSURfQUNfQksgICAgICAgICAgICAgICAxCS8qIG1lZXQgQUNJIGRlZmluaXRpb24gaW4gODAyLjExZSAqLwotI2RlZmluZSBRSURfQUNfQkUgICAgICAgICAgICAgICAwCS8qIG1lZXQgQUNJIGRlZmluaXRpb24gaW4gODAyLjExZSAqLwotI2RlZmluZSBRSURfQUNfVkkgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFFJRF9BQ19WTyAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUUlEX0hDQ0EgICAgICAgICAgICAgICAgNAotI2RlZmluZSBOVU1fT0ZfVFhfUklORyAgICAgICAgICA0Ci0jZGVmaW5lIFFJRF9NR01UICAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFFJRF9SWCAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFFJRF9PVEhFUiAgICAgICAgICAgICAgIDE1Ci0KLSNlbmRpZiAvKiBfX1JUTVBfTUFDX0hfXyAvLyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jaGlwL3J0bXBfcGh5LmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NoaXAvcnRtcF9waHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUyMjIxZi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NoaXAvcnRtcF9waHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDUxNiArMCwwIEBACi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFJhbGluayBUZWNoIEluYy4KLSAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKLSAqIEhzaW5jaHUgQ291bnR5IDMwMiwKLSAqIFRhaXdhbiwgUi5PLkMuCi0gKgotICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotCU1vZHVsZSBOYW1lOgotCXJ0bXBfcGh5LmgKLQotCUFic3RyYWN0OgotCVJhbGluayBXaXJlbGVzcyBDaGlwIFBIWShCQlAvUkYpIHJlbGF0ZWQgZGVmaW5pdGlvbiAmIHN0cnVjdHVyZXMKLQotCVJldmlzaW9uIEhpc3Rvcnk6Ci0JV2hvCQkJV2hlbgkJICBXaGF0Ci0JLS0tLS0tLS0JLS0tLS0tLS0tLQkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSovCi0KLSNpZm5kZWYgX19SVE1QX1BIWV9IX18KLSNkZWZpbmUgX19SVE1QX1BIWV9IX18KLQotLyoKLQlSRiBzZWN0aW9ucwotKi8KLSNkZWZpbmUgUkZfUjAwCQkJMAotI2RlZmluZSBSRl9SMDEJCQkxCi0jZGVmaW5lIFJGX1IwMgkJCTIKLSNkZWZpbmUgUkZfUjAzCQkJMwotI2RlZmluZSBSRl9SMDQJCQk0Ci0jZGVmaW5lIFJGX1IwNQkJCTUKLSNkZWZpbmUgUkZfUjA2CQkJNgotI2RlZmluZSBSRl9SMDcJCQk3Ci0jZGVmaW5lIFJGX1IwOAkJCTgKLSNkZWZpbmUgUkZfUjA5CQkJOQotI2RlZmluZSBSRl9SMTAJCQkxMAotI2RlZmluZSBSRl9SMTEJCQkxMQotI2RlZmluZSBSRl9SMTIJCQkxMgotI2RlZmluZSBSRl9SMTMJCQkxMwotI2RlZmluZSBSRl9SMTQJCQkxNAotI2RlZmluZSBSRl9SMTUJCQkxNQotI2RlZmluZSBSRl9SMTYJCQkxNgotI2RlZmluZSBSRl9SMTcJCQkxNwotI2RlZmluZSBSRl9SMTgJCQkxOAotI2RlZmluZSBSRl9SMTkJCQkxOQotI2RlZmluZSBSRl9SMjAJCQkyMAotI2RlZmluZSBSRl9SMjEJCQkyMQotI2RlZmluZSBSRl9SMjIJCQkyMgotI2RlZmluZSBSRl9SMjMJCQkyMwotI2RlZmluZSBSRl9SMjQJCQkyNAotI2RlZmluZSBSRl9SMjUJCQkyNQotI2RlZmluZSBSRl9SMjYJCQkyNgotI2RlZmluZSBSRl9SMjcJCQkyNwotI2RlZmluZSBSRl9SMjgJCQkyOAotI2RlZmluZSBSRl9SMjkJCQkyOQotI2RlZmluZSBSRl9SMzAJCQkzMAotI2RlZmluZSBSRl9SMzEJCQkzMQotCi0vKiB2YWx1ZSBkb21haW4gb2YgcEFkLT5SZkljVHlwZSAqLwotI2RlZmluZSBSRklDXzI4MjAgICAgICAgICAgICAgICAgICAgMQkvKiAyLjRHIDJUM1IgKi8KLSNkZWZpbmUgUkZJQ18yODUwICAgICAgICAgICAgICAgICAgIDIJLyogMi40Ry81RyAyVDNSICovCi0jZGVmaW5lIFJGSUNfMjcyMCAgICAgICAgICAgICAgICAgICAzCS8qIDIuNEcgMVQyUiAqLwotI2RlZmluZSBSRklDXzI3NTAgICAgICAgICAgICAgICAgICAgNAkvKiAyLjRHLzVHIDFUMlIgKi8KLSNkZWZpbmUgUkZJQ18zMDIwICAgICAgICAgICAgICAgICAgIDUJLyogMi40RyAxVDFSICovCi0jZGVmaW5lIFJGSUNfMjAyMCAgICAgICAgICAgICAgICAgICA2CS8qIDIuNEcgQi9HICovCi0jZGVmaW5lIFJGSUNfMzAyMSAgICAgICAgICAgICAgICAgICA3CS8qIDIuNEcgMVQyUiAqLwotI2RlZmluZSBSRklDXzMwMjIgICAgICAgICAgICAgICAgICAgOAkvKiAyLjRHIDJUMlIgKi8KLSNkZWZpbmUgUkZJQ18zMDUyICAgICAgICAgICAgICAgICAgIDkJLyogMi40Ry81RyAyVDJSICovCi0KLS8qCi0JQkJQIHNlY3Rpb25zCi0qLwotI2RlZmluZSBCQlBfUjAJCQkwCS8qIHZlcnNpb24gKi8KLSNkZWZpbmUgQkJQX1IxCQkJMQkvKiBUU1NJICovCi0jZGVmaW5lIEJCUF9SMgkJCTIJLyogVFggY29uZmlndXJlICovCi0jZGVmaW5lIEJCUF9SMwkJCTMKLSNkZWZpbmUgQkJQX1I0CQkJNAotI2RlZmluZSBCQlBfUjUJCQk1Ci0jZGVmaW5lIEJCUF9SNgkJCTYKLSNkZWZpbmUgQkJQX1IxNAkJCTE0CS8qIFJYIGNvbmZpZ3VyZSAqLwotI2RlZmluZSBCQlBfUjE2CQkJMTYKLSNkZWZpbmUgQkJQX1IxNwkJCTE3CS8qIFJYIHNlbnNpYmlsaXR5ICovCi0jZGVmaW5lIEJCUF9SMTgJCQkxOAotI2RlZmluZSBCQlBfUjIxCQkJMjEKLSNkZWZpbmUgQkJQX1IyMgkJCTIyCi0jZGVmaW5lIEJCUF9SMjQJCQkyNAotI2RlZmluZSBCQlBfUjI1CQkJMjUKLSNkZWZpbmUgQkJQX1IyNgkJCTI2Ci0jZGVmaW5lIEJCUF9SMjcJCQkyNwotI2RlZmluZSBCQlBfUjMxCQkJMzEKLSNkZWZpbmUgQkJQX1I0OQkJCTQ5CS8qVFNTSSAqLwotI2RlZmluZSBCQlBfUjUwCQkJNTAKLSNkZWZpbmUgQkJQX1I1MQkJCTUxCi0jZGVmaW5lIEJCUF9SNTIJCQk1MgotI2RlZmluZSBCQlBfUjU1CQkJNTUKLSNkZWZpbmUgQkJQX1I2MgkJCTYyCS8qIFJ4IFNRMCBUaHJlc2hvbGQgSElHSCAqLwotI2RlZmluZSBCQlBfUjYzCQkJNjMKLSNkZWZpbmUgQkJQX1I2NAkJCTY0Ci0jZGVmaW5lIEJCUF9SNjUJCQk2NQotI2RlZmluZSBCQlBfUjY2CQkJNjYKLSNkZWZpbmUgQkJQX1I2NwkJCTY3Ci0jZGVmaW5lIEJCUF9SNjgJCQk2OAotI2RlZmluZSBCQlBfUjY5CQkJNjkKLSNkZWZpbmUgQkJQX1I3MAkJCTcwCS8qIFJ4IEFHQyBTUSBDQ0sgWGNvcnIgdGhyZXNob2xkICovCi0jZGVmaW5lIEJCUF9SNzMJCQk3MwotI2RlZmluZSBCQlBfUjc1CQkJNzUKLSNkZWZpbmUgQkJQX1I3NwkJCTc3Ci0jZGVmaW5lIEJCUF9SNzgJCQk3OAotI2RlZmluZSBCQlBfUjc5CQkJNzkKLSNkZWZpbmUgQkJQX1I4MAkJCTgwCi0jZGVmaW5lIEJCUF9SODEJCQk4MQotI2RlZmluZSBCQlBfUjgyCQkJODIKLSNkZWZpbmUgQkJQX1I4MwkJCTgzCi0jZGVmaW5lIEJCUF9SODQJCQk4NAotI2RlZmluZSBCQlBfUjg2CQkJODYKLSNkZWZpbmUgQkJQX1I5MQkJCTkxCi0jZGVmaW5lIEJCUF9SOTIJCQk5MgotI2RlZmluZSBCQlBfUjk0CQkJOTQJLyogVHggR2FpbiBDb250cm9sICovCi0jZGVmaW5lIEJCUF9SMTAzCQkxMDMKLSNkZWZpbmUgQkJQX1IxMDUJCTEwNQotI2RlZmluZSBCQlBfUjEwNgkJMTA2Ci0jZGVmaW5lIEJCUF9SMTEzCQkxMTMKLSNkZWZpbmUgQkJQX1IxMTQJCTExNAotI2RlZmluZSBCQlBfUjExNQkJMTE1Ci0jZGVmaW5lIEJCUF9SMTE2CQkxMTYKLSNkZWZpbmUgQkJQX1IxMTcJCTExNwotI2RlZmluZSBCQlBfUjExOAkJMTE4Ci0jZGVmaW5lIEJCUF9SMTE5CQkxMTkKLSNkZWZpbmUgQkJQX1IxMjAJCTEyMAotI2RlZmluZSBCQlBfUjEyMQkJMTIxCi0jZGVmaW5lIEJCUF9SMTIyCQkxMjIKLSNkZWZpbmUgQkJQX1IxMjMJCTEyMwotI2lmZGVmIFJUMzB4eAotI2RlZmluZSBCQlBfUjEzOAkJMTM4CS8qIGFkZCBieSBqb2hubGksIFJGIHBvd2VyIHNlcXVlbmNlIHNldHVwLCBBREMgZHluYW1pYyBvbi9vZmYgY29udHJvbCAqLwotI2VuZGlmIC8qIFJUMzB4eCAvLyAqLwotCi0jZGVmaW5lIEJCUFI5NF9ERUZBVUxUCTB4MDYJLyogQWRkIDEgdmFsdWUgd2lsbCBnYWluIDFkYiAqLwotCi0vKiAqLwotLyogQkJQICYgUkYgYXJlIHVzaW5nIGluZGlyZWN0IGFjY2Vzcy4gQmVmb3JlIHdyaXRlIGFueSB2YWx1ZSBpbnRvIGl0LiAqLwotLyogV2UgaGF2ZSB0byBtYWtlIHN1cmUgdGhlcmUgaXMgbm8gb3V0c3RhbmRpbmcgY29tbWFuZCBwZW5kaW5nIHZpYSBjaGVja2luZyBidXN5IGJpdC4gKi8KLS8qICovCi0jZGVmaW5lIE1BWF9CVVNZX0NPVU5UICAxMDAJLyogTnVtYmVyIG9mIHJldHJ5IGJlZm9yZSBmYWlsaW5nIGFjY2VzcyBCQlAgJiBSRiBpbmRpcmVjdCByZWdpc3RlciAqLwotCi0vKiNkZWZpbmUgUEhZX1RSX1NXSVRDSF9USU1FICAgICAgICAgIDUgIC8vIHVzZWMgKi8KLQotLyojZGVmaW5lIEJCUF9SMTdfTE9XX1NFTlNJQklMSVRZICAgICAweDUwICovCi0vKiNkZWZpbmUgQkJQX1IxN19NSURfU0VOU0lCSUxJVFkgICAgIDB4NDEgKi8KLS8qI2RlZmluZSBCQlBfUjE3X0RZTkFNSUNfVVBfQk9VTkQgICAgMHg0MCAqLwotCi0jZGVmaW5lIFJTU0lfRk9SX1ZFUllfTE9XX1NFTlNJQklMSVRZICAgLTM1Ci0jZGVmaW5lIFJTU0lfRk9SX0xPV19TRU5TSUJJTElUWQkJLTU4Ci0jZGVmaW5lIFJTU0lfRk9SX01JRF9MT1dfU0VOU0lCSUxJVFkJLTgwCi0jZGVmaW5lIFJTU0lfRk9SX01JRF9TRU5TSUJJTElUWQkJLTkwCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCVJGIHJlZ2lzdGVyIFJlYWQvV3JpdGUgbWFyY28gZGVmaW5pdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmZGVmIFJUTVBfTUFDX1BDSQotI2RlZmluZSBSVE1QX1JGX0lPX1dSSVRFMzIoX0EsIF9WKSAgICAgICAgICAgICAgICAgIFwKLXsJCQkJCQkJCQkJCVwKLQlpZiAoKF9BKS0+YlBDSWNsa09mZiA9PSBGQUxTRSkgewkJCQlcCi0JCVBIWV9DU1I0X1NUUlVDICBfdmFsdWU7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCXVuc2lnbmVkIGxvbmcgICAgICAgICAgIF9idXN5Q250ID0gMDsgICAgICAgICAgICAgICAgICAgIFwKLQkJCQkJCQkJCQkJXAotCQlkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQlSVE1QX0lPX1JFQUQzMigoX0EpLCBSRl9DU1JfQ0ZHMCwgJl92YWx1ZS53b3JkKTsgIFwKLQkJCWlmIChfdmFsdWUuZmllbGQuQnVzeSA9PSBJRExFKSAgICAgICAgICAgICAgIFwKLQkJCQlicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJX2J1c3lDbnQrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQl9IHdoaWxlIChfYnVzeUNudCA8IE1BWF9CVVNZX0NPVU5UKTsJCQlcCi0JCWlmIChfYnVzeUNudCA8IE1BWF9CVVNZX0NPVU5UKSB7CQkJXAotCQkJUlRNUF9JT19XUklURTMyKChfQSksIFJGX0NTUl9DRkcwLCAoX1YpKTsgICAgICAgICAgXAotCQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JfQkJCQkJCQkJXAotfQotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotI2lmZGVmIFJUTVBfTUFDX1VTQgotI2RlZmluZSBSVE1QX1JGX0lPX1dSSVRFMzIoX0EsIF9WKSAgICAgICAgICAgICAgICAgUlRVU0JXcml0ZVJGUmVnaXN0ZXIoX0EsIF9WKQotI2VuZGlmIC8qIFJUTVBfTUFDX1VTQiAvLyAqLwotCi0jaWZkZWYgUlQzMHh4Ci0jZGVmaW5lIFJUTVBfUkZfSU9fUkVBRDhfQllfUkVHX0lEKF9BLCBfSSwgX3BWKSAgICBSVDMweHhSZWFkUkZSZWdpc3RlcihfQSwgX0ksIF9wVikKLSNkZWZpbmUgUlRNUF9SRl9JT19XUklURThfQllfUkVHX0lEKF9BLCBfSSwgX1YpICAgIFJUMzB4eFdyaXRlUkZSZWdpc3RlcihfQSwgX0ksIF9WKQotI2VuZGlmIC8qIFJUMzB4eCAvLyAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQlCQlAgcmVnaXN0ZXIgUmVhZC9Xcml0ZSBtYXJjbyBkZWZpbml0aW9ucy4KLQl3ZSByZWFkL3dyaXRlIHRoZSBiYnAgdmFsdWUgYnkgcmVnaXN0ZXIncyBJRC4KLQlHZW5lcmF0ZSBQRVIgdG8gdGVzdCBCQQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmZGVmIFJUTVBfTUFDX1BDSQotLyoKLQliYXNpYyBtYXJjbyBmb3IgQkJQIHJlYWQgb3BlcmF0aW9uLgotCV9wQWQ6IHRoZSBkYXRhIHN0cnVjdHVyZSBwb2ludGVyIG9mIHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIKLQlfYmJwSUQgOiB0aGUgYmJwIHJlZ2lzdGVyIElECi0JX3BWOiBkYXRhIHBvaW50ZXIgdXNlZCB0byBzYXZlIHRoZSB2YWx1ZSBvZiBxdWVyaWVkIGJicCByZWdpc3Rlci4KLQlfYlZpYU1DVTogaWYgd2UgbmVlZCBhY2Nlc3MgdGhlIGJicCB2aWEgdGhlIE1DVS4KLSovCi0jZGVmaW5lIFJUTVBfQkJQX0lPX1JFQUQ4KF9wQWQsIF9iYnBJRCwgX3BWLCBfYlZpYU1DVSkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQlCQlBfQ1NSX0NGR19TVFJVQyAgQmJwQ3NyOwkJCQlcCi0JCWludCAgIF9idXN5Q250LCBfc2VjQ250LCBfcmVnSUQ7CQkJXAotCQkJCQkJCQkJXAotCQlfcmVnSUQgPSAoKF9iVmlhTUNVKSA9PSBUUlVFID8gSDJNX0JCUF9BR0VOVCA6IEJCUF9DU1JfQ0ZHKTsgXAotCQlmb3IgKF9idXN5Q250ID0gMDsgX2J1c3lDbnQgPCBNQVhfQlVTWV9DT1VOVDsgX2J1c3lDbnQrKykgeyBcCi0JCQlSVE1QX0lPX1JFQUQzMihfcEFkLCBfcmVnSUQsICZCYnBDc3Iud29yZCk7CVwKLQkJCWlmIChCYnBDc3IuZmllbGQuQnVzeSA9PSBCVVNZKSAgICAgICAgICAgICAgICAgIFwKLQkJCQljb250aW51ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJQmJwQ3NyLndvcmQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJQmJwQ3NyLmZpZWxkLmZSZWFkID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJQmJwQ3NyLmZpZWxkLkJCUF9SV19NT0RFID0gMTsgICAgICAgICAgICAgICAgICAgXAotCQkJQmJwQ3NyLmZpZWxkLkJ1c3kgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJQmJwQ3NyLmZpZWxkLlJlZ051bSA9IF9iYnBJRDsgICAgICAgICAgICAgICAgICAgXAotCQkJUlRNUF9JT19XUklURTMyKF9wQWQsIF9yZWdJRCwgQmJwQ3NyLndvcmQpOyAgICAgXAotCQkJaWYgKChfYlZpYU1DVSkgPT0gVFJVRSkgewkJCVwKLQkJCSAgICBBc2ljU2VuZENvbW1hbmRUb01jdShfcEFkLCAweDgwLCAweGZmLCAweDAsIDB4MCk7IFwKLQkJCSAgICBSVE1QdXNlY0RlbGF5KDEwMDApOwlcCi0JCQl9CQkJCQkJXAotCQkJZm9yIChfc2VjQ250ID0gMDsgX3NlY0NudCA8IE1BWF9CVVNZX0NPVU5UOyBfc2VjQ250KyspIHsgXAotCQkJCVJUTVBfSU9fUkVBRDMyKF9wQWQsIF9yZWdJRCwgJkJicENzci53b3JkKTsgXAotCQkJCWlmIChCYnBDc3IuZmllbGQuQnVzeSA9PSBJRExFKQkJXAotCQkJCQlicmVhazsJCQkJXAotCQkJfQkJCQkJCVwKLQkJCWlmICgoQmJwQ3NyLmZpZWxkLkJ1c3kgPT0gSURMRSkgJiYJCVwKLQkJCQkoQmJwQ3NyLmZpZWxkLlJlZ051bSA9PSBfYmJwSUQpKSB7CVwKLQkJCQkqKF9wVikgPSAodTgpQmJwQ3NyLmZpZWxkLlZhbHVlOwlcCi0JCQkJYnJlYWs7CQkJCQlcCi0JCQl9CQkJCQkJXAotCQl9CQkJCQkJCVwKLQkJaWYgKEJicENzci5maWVsZC5CdXN5ID09IEJVU1kpIHsJCQlcCi0JCQlEQkdQUklOVF9FUlIoIkJCUCh2aWFNQ1U9JWQpIHJlYWQgUiVkIGZhaWxcbiIsIChfYlZpYU1DVSksIF9iYnBJRCk7CVwKLQkJCSooX3BWKSA9IChfcEFkKS0+QmJwV3JpdGVMYXRjaFtfYmJwSURdOyAgICAgICAgICAgICAgIFwKLQkJCWlmICgoX2JWaWFNQ1UpID09IFRSVUUpIHsJCQlcCi0JCQkJUlRNUF9JT19SRUFEMzIoX3BBZCwgX3JlZ0lELCAmQmJwQ3NyLndvcmQpOwkJCQlcCi0JCQkJQmJwQ3NyLmZpZWxkLkJ1c3kgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJCVJUTVBfSU9fV1JJVEUzMihfcEFkLCBfcmVnSUQsIEJicENzci53b3JkKTsJCQkJXAotCQkJfQkJCQlcCi0JCX0JCQkJCQkJCQkJCQkJXAotCX0gd2hpbGUgKDApCi0KLS8qCi0JVGhpcyBtYXJjbyB1c2VkIGZvciB0aGUgQkJQIHJlYWQgb3BlcmF0aW9uIHdoaWNoIGRpZG4ndCBuZWVkIHZpYSBNQ1UuCi0qLwotI2RlZmluZSBCQlBfSU9fUkVBRDhfQllfUkVHX0lEKF9BLCBfSSwgX3BWKQkJCVwKLQlSVE1QX0JCUF9JT19SRUFEOCgoX0EpLCAoX0kpLCAoX3BWKSwgRkFMU0UpCi0KLS8qCi0JVGhpcyBtYXJjbyB1c2VkIGZvciB0aGUgQkJQIHJlYWQgb3BlcmF0aW9uIHdoaWNoIG5lZWQgdmlhIE1DVS4KLQlCdXQgZm9yIHNvbWUgY2hpcHNldCB3aGljaCBkaWRuJ3QgaGF2ZSBtY3UgKGUuZy4sIFJCVVMgYmFzZWQgY2hpcHNldCksIHdlCi0Jd2lsbCB1c2UgdGhpcyBmdW5jdGlvbiB0b28gYW5kIGRpZG4ndCBhY2Nlc3MgdGhlIGJicCByZWdpc3RlciB2aWEgdGhlIE1DVS4KLSovCi0vKiBSZWFkIEJCUCByZWdpc3RlciBieSByZWdpc3RlcidzIElELiBHZW5lcmF0ZSBQRVIgdG8gdGVzdCBCQSAqLwotI2RlZmluZSBSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQoX0EsIF9JLCBfcFYpCQkJCQkJXAotewkJCQkJCQkJCQkJCQkJCQkJCVwKLQlCQlBfQ1NSX0NGR19TVFJVQwlCYnBDc3I7CQkJCQkJCQkJCQlcCi0JaW50CQkJCQlpLCBrOwkJCVwKLQlCT09MRUFOCQkJCQlicmM7CQkJXAotCUJicENzci5maWVsZC5CdXN5ID0gSURMRTsJCQlcCi0JaWYgKChJU19SVDMwOTAoKF9BKSkgfHwgSVNfUlQzNTcyKChfQSkpIHx8IElTX1JUMzM5MCgoX0EpKSkgIFwKLQkJJiYgKChfQSktPlN0YUNmZy5QU0NvbnRyb2wuZmllbGQucnQzMHh4UG93ZXJNb2RlID09IDMpCVwKLQkJJiYgKChfQSktPlN0YUNmZy5QU0NvbnRyb2wuZmllbGQuRW5hYmxlTmV3UFMgPT0gVFJVRSkJXAotCQkmJiAoKF9BKS0+YlBDSWNsa09mZiA9PSBGQUxTRSkJXAotCQkmJiAoKF9BKS0+YnJ0MzB4eEJhbk1jdUNtZCA9PSBGQUxTRSkpIHsJCQlcCi0JCWZvciAoaSA9IDA7IGkgPCBNQVhfQlVTWV9DT1VOVDsgaSsrKSB7CQkJXAotCQkJUlRNUF9JT19SRUFEMzIoX0EsIEgyTV9CQlBfQUdFTlQsICZCYnBDc3Iud29yZCk7IFwKLQkJCWlmIChCYnBDc3IuZmllbGQuQnVzeSA9PSBCVVNZKSB7CQlcCi0JCQkJY29udGludWU7CQkJCVwKLQkJCX0JCQkJCQlcCi0JCQlCYnBDc3Iud29yZCA9IDA7CQkJCVwKLQkJCUJicENzci5maWVsZC5mUmVhZCA9IDE7CQkJCVwKLQkJCUJicENzci5maWVsZC5CQlBfUldfTU9ERSA9IDE7CQkJXAotCQkJQmJwQ3NyLmZpZWxkLkJ1c3kgPSAxOwkJCQlcCi0JCQlCYnBDc3IuZmllbGQuUmVnTnVtID0gX0k7CQkJXAotCQkJUlRNUF9JT19XUklURTMyKF9BLCBIMk1fQkJQX0FHRU5ULCBCYnBDc3Iud29yZCk7IFwKLQkJCWJyYyA9IEFzaWNTZW5kQ29tbWFuZFRvTWN1KF9BLCAweDgwLCAweGZmLCAweDAsIDB4MCk7IFwKLQkJCWlmIChicmMgPT0gVFJVRSkgewkJCQlcCi0JCQkJZm9yIChrID0gMDsgayA8IE1BWF9CVVNZX0NPVU5UOyBrKyspIHsJXAotCQkJCQlSVE1QX0lPX1JFQUQzMihfQSwgSDJNX0JCUF9BR0VOVCwgJkJicENzci53b3JkKTsgXAotCQkJCQlpZiAoQmJwQ3NyLmZpZWxkLkJ1c3kgPT0gSURMRSkJXAotCQkJCQkJYnJlYWs7CQkJXAotCQkJCX0JCQkJCVwKLQkJCQlpZiAoKEJicENzci5maWVsZC5CdXN5ID09IElETEUpICYmCVwKLQkJCQkJKEJicENzci5maWVsZC5SZWdOdW0gPT0gX0kpKSB7CVwKLQkJCQkJKihfcFYpID0gKHU4KUJicENzci5maWVsZC5WYWx1ZTsgXAotCQkJCQlicmVhazsJCQkJXAotCQkJCX0JCQkJCVwKLQkJCX0gZWxzZSB7CQkJCQlcCi0JCQkJQmJwQ3NyLmZpZWxkLkJ1c3kgPSAwOwkJCQkJCQkJCQkJXAotCQkJCVJUTVBfSU9fV1JJVEUzMihfQSwgSDJNX0JCUF9BR0VOVCwgQmJwQ3NyLndvcmQpOwkJCQlcCi0JCQl9CQkJCQkJCQkJCQkJCQkJCVwKLQkJfQkJCQkJCQkJCQkJCQkJCQkJXAotCX0JXAotCWVsc2UgaWYgKCEoKElTX1JUMzA5MCgoX0EpKSB8fCBJU19SVDM1NzIoKF9BKSkgfHwgSVNfUlQzMzkwKChfQSkpKSAmJiAoKF9BKS0+U3RhQ2ZnLlBTQ29udHJvbC5maWVsZC5ydDMweHhQb3dlck1vZGUgPT0gMykJXAotCQkmJiAoKF9BKS0+U3RhQ2ZnLlBTQ29udHJvbC5maWVsZC5FbmFibGVOZXdQUyA9PSBUUlVFKSkJXAotCQkmJiAoKF9BKS0+YlBDSWNsa09mZiA9PSBGQUxTRSkpIHsJCQlcCi0JCWZvciAoaSA9IDA7IGkgPCBNQVhfQlVTWV9DT1VOVDsgaSsrKSB7CQkJXAotCQkJUlRNUF9JT19SRUFEMzIoX0EsIEgyTV9CQlBfQUdFTlQsICZCYnBDc3Iud29yZCk7IFwKLQkJCWlmIChCYnBDc3IuZmllbGQuQnVzeSA9PSBCVVNZKSB7CQlcCi0JCQkJY29udGludWU7CQkJCVwKLQkJCX0JCQkJCQlcCi0JCQlCYnBDc3Iud29yZCA9IDA7CQkJCVwKLQkJCUJicENzci5maWVsZC5mUmVhZCA9IDE7CQkJCVwKLQkJCUJicENzci5maWVsZC5CQlBfUldfTU9ERSA9IDE7CQkJXAotCQkJQmJwQ3NyLmZpZWxkLkJ1c3kgPSAxOwkJCQlcCi0JCQlCYnBDc3IuZmllbGQuUmVnTnVtID0gX0k7CQkJXAotCQkJUlRNUF9JT19XUklURTMyKF9BLCBIMk1fQkJQX0FHRU5ULCBCYnBDc3Iud29yZCk7IFwKLQkJCUFzaWNTZW5kQ29tbWFuZFRvTWN1KF9BLCAweDgwLCAweGZmLCAweDAsIDB4MCk7CVwKLQkJCWZvciAoayA9IDA7IGsgPCBNQVhfQlVTWV9DT1VOVDsgaysrKSB7CQlcCi0JCQkJUlRNUF9JT19SRUFEMzIoX0EsIEgyTV9CQlBfQUdFTlQsICZCYnBDc3Iud29yZCk7IFwKLQkJCQlpZiAoQmJwQ3NyLmZpZWxkLkJ1c3kgPT0gSURMRSkJCVwKLQkJCQkJYnJlYWs7CQkJCVwKLQkJCX0JCQkJCQlcCi0JCQlpZiAoKEJicENzci5maWVsZC5CdXN5ID09IElETEUpICYmCQlcCi0JCQkJKEJicENzci5maWVsZC5SZWdOdW0gPT0gX0kpKSB7CQlcCi0JCQkJKihfcFYpID0gKHU4KUJicENzci5maWVsZC5WYWx1ZTsJXAotCQkJCWJyZWFrOwkJCQkJXAotCQkJfQkJCQkJCVwKLQkJfQkJCQkJCQlcCi0JfSBlbHNlIHsJCQkJCQkJXAotCQlEQkdQUklOVF9FUlIoIiAsIGJydDMweHhCYW5NY3VDbWQgPSAlZCwgUmVhZCBCQlAgJWQgXG4iLCAoX0EpLT5icnQzMHh4QmFuTWN1Q21kLCAoX0kpKTsJXAotCQkqKF9wVikgPSAoX0EpLT5CYnBXcml0ZUxhdGNoW19JXTsJCQlcCi0JfQkJCQkJCQkJXAotCWlmICgoQmJwQ3NyLmZpZWxkLkJ1c3kgPT0gQlVTWSkgfHwgKChfQSktPmJQQ0ljbGtPZmYgPT0gVFJVRSkpIHsgXAotCQlEQkdQUklOVF9FUlIoIkJCUCByZWFkIFIlZD0weCV4IGZhaWxcbiIsIF9JLCBCYnBDc3Iud29yZCk7IFwKLQkJKihfcFYpID0gKF9BKS0+QmJwV3JpdGVMYXRjaFtfSV07CQkJXAotCX0JCQkJCQkJCVwKLX0KLQotLyoKLQliYXNpYyBtYXJjbyBmb3IgQkJQIHdyaXRlIG9wZXJhdGlvbi4KLQlfcEFkOiB0aGUgZGF0YSBzdHJ1Y3R1cmUgcG9pbnRlciBvZiBzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyCi0JX2JicElEIDogdGhlIGJicCByZWdpc3RlciBJRAotCV9wVjogZGF0YSB1c2VkIHRvIHNhdmUgdGhlIHZhbHVlIG9mIHF1ZXJpZWQgYmJwIHJlZ2lzdGVyLgotCV9iVmlhTUNVOiBpZiB3ZSBuZWVkIGFjY2VzcyB0aGUgYmJwIHZpYSB0aGUgTUNVLgotKi8KLSNkZWZpbmUgUlRNUF9CQlBfSU9fV1JJVEU4KF9wQWQsIF9iYnBJRCwgX3BWLCBfYlZpYU1DVSkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQlCQlBfQ1NSX0NGR19TVFJVQyAgQmJwQ3NyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQlpbnQgICAgICAgICAgICAgX2J1c3lDbnQsIF9yZWdJRDsJCQlcCi0JCQkJCQkJCQlcCi0JCV9yZWdJRCA9ICgoX2JWaWFNQ1UpID09IFRSVUUgPyBIMk1fQkJQX0FHRU5UIDogQkJQX0NTUl9DRkcpOwlcCi0JCWZvciAoX2J1c3lDbnQgPSAwOyBfYnVzeUNudCA8IE1BWF9CVVNZX0NPVU5UOyBfYnVzeUNudCsrKSB7IFwKLQkJCVJUTVBfSU9fUkVBRDMyKChfcEFkKSwgQkJQX0NTUl9DRkcsICZCYnBDc3Iud29yZCk7ICAgICBcCi0JCQlpZiAoQmJwQ3NyLmZpZWxkLkJ1c3kgPT0gQlVTWSkJCQlcCi0JCQkJY29udGludWU7CQkJCVwKLQkJCUJicENzci53b3JkID0gMDsJCQkJXAotCQkJQmJwQ3NyLmZpZWxkLmZSZWFkID0gMDsJCQkJXAotCQkJQmJwQ3NyLmZpZWxkLkJCUF9SV19NT0RFID0gMTsJCQlcCi0JCQlCYnBDc3IuZmllbGQuQnVzeSA9IDE7CQkJCVwKLQkJCUJicENzci5maWVsZC5WYWx1ZSA9IF9wVjsJCQlcCi0JCQlCYnBDc3IuZmllbGQuUmVnTnVtID0gX2JicElEOwkJCVwKLQkJCVJUTVBfSU9fV1JJVEUzMigoX3BBZCksIEJCUF9DU1JfQ0ZHLCBCYnBDc3Iud29yZCk7IFwKLQkJCWlmICgoX2JWaWFNQ1UpID09IFRSVUUpIHsJCQlcCi0JCQkJQXNpY1NlbmRDb21tYW5kVG9NY3UoX3BBZCwgMHg4MCwgMHhmZiwgMHgwLCAweDApOyBcCi0JCQkJaWYgKChfcEFkKS0+T3BNb2RlID09IE9QTU9ERV9BUCkJXAotCQkJCQlSVE1QdXNlY0RlbGF5KDEwMDApOwkJXAotCQkJfQkJCQkJCVwKLQkJCShfcEFkKS0+QmJwV3JpdGVMYXRjaFtfYmJwSURdID0gX3BWOwkJXAotCQkJYnJlYWs7CQkJCQkJXAotCQl9CQkJCQkJCVwKLQkJaWYgKF9idXN5Q250ID09IE1BWF9CVVNZX0NPVU5UKSB7CQkJXAotCQkJREJHUFJJTlRfRVJSKCJCQlAgd3JpdGUgUiVkIGZhaWxcbiIsIF9iYnBJRCk7CVwKLQkJCWlmICgoX2JWaWFNQ1UpID09IFRSVUUpIHsJCQlcCi0JCQkJUlRNUF9JT19SRUFEMzIoX3BBZCwgSDJNX0JCUF9BR0VOVCwgJkJicENzci53b3JkKTsJXAotCQkJCUJicENzci5maWVsZC5CdXN5ID0gMDsJCQlcCi0JCQkJUlRNUF9JT19XUklURTMyKF9wQWQsIEgyTV9CQlBfQUdFTlQsIEJicENzci53b3JkKTsJXAotCQkJfQkJCQkJCVwKLQkJfQkJCQkJCQlcCi0JfSB3aGlsZSAoMCkKLQotLyoKLQlUaGlzIG1hcmNvIHVzZWQgZm9yIHRoZSBCQlAgd3JpdGUgb3BlcmF0aW9uIHdoaWNoIGRpZG4ndCBuZWVkIHZpYSBNQ1UuCi0qLwotI2RlZmluZSBCQlBfSU9fV1JJVEU4X0JZX1JFR19JRChfQSwgX0ksIF9wVikJCQlcCi0JUlRNUF9CQlBfSU9fV1JJVEU4KChfQSksIChfSSksIChfcFYpLCBGQUxTRSkKLQotLyoKLQlUaGlzIG1hcmNvIHVzZWQgZm9yIHRoZSBCQlAgd3JpdGUgb3BlcmF0aW9uIHdoaWNoIG5lZWQgdmlhIE1DVS4KLQlCdXQgZm9yIHNvbWUgY2hpcHNldCB3aGljaCBkaWRuJ3QgaGF2ZSBtY3UgKGUuZy4sIFJCVVMgYmFzZWQgY2hpcHNldCksIHdlCi0Jd2lsbCB1c2UgdGhpcyBmdW5jdGlvbiB0b28gYW5kIGRpZG4ndCBhY2Nlc3MgdGhlIGJicCByZWdpc3RlciB2aWEgdGhlIE1DVS4KLSovCi0vKiBXcml0ZSBCQlAgcmVnaXN0ZXIgYnkgcmVnaXN0ZXIncyBJRCAmIHZhbHVlICovCi0jZGVmaW5lIFJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQoX0EsIF9JLCBfVikJCQlcCi17CQkJCQkJCQkJXAotCUJCUF9DU1JfQ0ZHX1NUUlVDCUJicENzcjsJCQkJCVwKLQlpbnQJCQkJCUJ1c3lDbnQgPSAwOwkJXAotCUJPT0xFQU4JCQkJCWJyYzsJCQlcCi0JaWYgKF9JIDwgTUFYX05VTV9PRl9CQlBfTEFUQ0gpIHsJCQkJXAotCQlpZiAoKElTX1JUMzA5MCgoX0EpKSB8fCBJU19SVDM1NzIoKF9BKSkgfHwgSVNfUlQzMzkwKChfQSkpKSBcCi0JCQkmJiAoKF9BKS0+U3RhQ2ZnLlBTQ29udHJvbC5maWVsZC5ydDMweHhQb3dlck1vZGUgPT0gMykJXAotCQkJJiYgKChfQSktPlN0YUNmZy5QU0NvbnRyb2wuZmllbGQuRW5hYmxlTmV3UFMgPT0gVFJVRSkJXAotCQkJJiYgKChfQSktPmJQQ0ljbGtPZmYgPT0gRkFMU0UpCVwKLQkJCSYmICgoX0EpLT5icnQzMHh4QmFuTWN1Q21kID09IEZBTFNFKSkgewkJXAotCQkJaWYgKF9BLT5BY2Nlc3NCQlBGYWlsQ291bnQgPiAyMCkgewkJXAotCQkJCUFzaWNSZXNldEJCUEFnZW50KF9BKTsJCQlcCi0JCQkJX0EtPkFjY2Vzc0JCUEZhaWxDb3VudCA9IDA7CQlcCi0JCQl9CQkJCQkJXAotCQkJZm9yIChCdXN5Q250ID0gMDsgQnVzeUNudCA8IE1BWF9CVVNZX0NPVU5UOyBCdXN5Q250KyspIHsgXAotCQkJCVJUTVBfSU9fUkVBRDMyKF9BLCBIMk1fQkJQX0FHRU5ULCAmQmJwQ3NyLndvcmQpOwkJCQlcCi0JCQkJaWYgKEJicENzci5maWVsZC5CdXN5ID09IEJVU1kpCQkJCQkJCQkJXAotCQkJCQljb250aW51ZTsJCQkJCQkJCQkJCQkJXAotCQkJCUJicENzci53b3JkID0gMDsJCQkJCQkJCQkJCQlcCi0JCQkJQmJwQ3NyLmZpZWxkLmZSZWFkID0gMDsJCQkJCQkJCQkJCVwKLQkJCQlCYnBDc3IuZmllbGQuQkJQX1JXX01PREUgPSAxOwkJCQkJCQkJCVwKLQkJCQlCYnBDc3IuZmllbGQuQnVzeSA9IDE7CQkJCQkJCQkJCQlcCi0JCQkJQmJwQ3NyLmZpZWxkLlZhbHVlID0gX1Y7CQkJCQkJCQkJCVwKLQkJCQlCYnBDc3IuZmllbGQuUmVnTnVtID0gX0k7CQkJCQkJCQkJCVwKLQkJCQlSVE1QX0lPX1dSSVRFMzIoX0EsIEgyTV9CQlBfQUdFTlQsIEJicENzci53b3JkKTsJCQkJXAotCQkJCWJyYyA9IEFzaWNTZW5kQ29tbWFuZFRvTWN1KF9BLCAweDgwLCAweGZmLCAweDAsIDB4MCk7CQkJCQlcCi0JCQkJaWYgKGJyYyA9PSBUUlVFKSB7CQkJXAotCQkJCQkoX0EpLT5CYnBXcml0ZUxhdGNoW19JXSA9IF9WOwkJCQkJCQkJCVwKLQkJCQl9IGVsc2UgewkJCQlcCi0JCQkJCUJicENzci5maWVsZC5CdXN5ID0gMDsJCQkJCQkJCQkJCVwKLQkJCQkJUlRNUF9JT19XUklURTMyKF9BLCBIMk1fQkJQX0FHRU5ULCBCYnBDc3Iud29yZCk7CQkJCVwKLQkJCQl9CQkJCQkJCQkJCQkJCQkJCVwKLQkJCQlicmVhazsJCQkJCQkJCQkJCQkJCQlcCi0JCQl9CQkJCQkJCQkJCQkJCQkJCQlcCi0JCX0JCQkJCQkJCQkJCQkJCQkJCVwKLQkJZWxzZSBpZiAoISgoSVNfUlQzMDkwKChfQSkpIHx8IElTX1JUMzU3MigoX0EpKSB8fCBJU19SVDMzOTAoKF9BKSkpIFwKLQkJCSYmICgoX0EpLT5TdGFDZmcuUFNDb250cm9sLmZpZWxkLnJ0MzB4eFBvd2VyTW9kZSA9PSAzKQlcCi0JCQkmJiAoKF9BKS0+U3RhQ2ZnLlBTQ29udHJvbC5maWVsZC5FbmFibGVOZXdQUyA9PSBUUlVFKSkJXAotCQkJJiYgKChfQSktPmJQQ0ljbGtPZmYgPT0gRkFMU0UpKSB7IAkJXAotCQkJaWYgKF9BLT5BY2Nlc3NCQlBGYWlsQ291bnQgPiAyMCkgewkJXAotCQkJCUFzaWNSZXNldEJCUEFnZW50KF9BKTsJCQlcCi0JCQkJX0EtPkFjY2Vzc0JCUEZhaWxDb3VudCA9IDA7CQlcCi0JCQl9CQkJCQkJXAotCQkJZm9yIChCdXN5Q250ID0gMDsgQnVzeUNudCA8IE1BWF9CVVNZX0NPVU5UOyBCdXN5Q250KyspIHsgXAotCQkJCVJUTVBfSU9fUkVBRDMyKF9BLCBIMk1fQkJQX0FHRU5ULCAmQmJwQ3NyLndvcmQpOwkJCQlcCi0JCQkJaWYgKEJicENzci5maWVsZC5CdXN5ID09IEJVU1kpCQkJCQkJCQkJXAotCQkJCQljb250aW51ZTsJCQkJCQkJCQkJCQkJXAotCQkJCUJicENzci53b3JkID0gMDsJCQkJCQkJCQkJCQlcCi0JCQkJQmJwQ3NyLmZpZWxkLmZSZWFkID0gMDsJCQkJCQkJCQkJCVwKLQkJCQlCYnBDc3IuZmllbGQuQkJQX1JXX01PREUgPSAxOwkJCQkJCQkJCVwKLQkJCQlCYnBDc3IuZmllbGQuQnVzeSA9IDE7CQkJCQkJCQkJCQlcCi0JCQkJQmJwQ3NyLmZpZWxkLlZhbHVlID0gX1Y7CQkJCQkJCQkJCVwKLQkJCQlCYnBDc3IuZmllbGQuUmVnTnVtID0gX0k7CQkJCQkJCQkJCVwKLQkJCQlSVE1QX0lPX1dSSVRFMzIoX0EsIEgyTV9CQlBfQUdFTlQsIEJicENzci53b3JkKTsJCQkJXAotCQkJCUFzaWNTZW5kQ29tbWFuZFRvTWN1KF9BLCAweDgwLCAweGZmLCAweDAsIDB4MCk7CQkJCQlcCi0JCQkJKF9BKS0+QmJwV3JpdGVMYXRjaFtfSV0gPSBfVjsJCQkJCQkJCQlcCi0JCQkJYnJlYWs7CQkJCQkJCQkJCQkJCQkJXAotCQkJfQkJCQkJCQkJCQkJCQkJCQkJXAotCQl9IGVsc2UgewkJCQkJCVwKLQkJCURCR1BSSU5UX0VSUigiICBicnQzMHh4QmFuTWN1Q21kID0gJWQuIFdyaXRlIEJCUCAlZCBcbiIsICAoX0EpLT5icnQzMHh4QmFuTWN1Q21kLCAoX0kpKTsJXAotCQl9CQkJCQkJCQkJCQkJCQkJCQlcCi0JCWlmICgoQnVzeUNudCA9PSBNQVhfQlVTWV9DT1VOVCkgfHwgKChfQSktPmJQQ0ljbGtPZmYgPT0gVFJVRSkpIHsgXAotCQkJaWYgKEJ1c3lDbnQgPT0gTUFYX0JVU1lfQ09VTlQpCQkJCVwKLQkJCQkoX0EpLT5BY2Nlc3NCQlBGYWlsQ291bnQrKzsJCQkJCVwKLQkJCURCR1BSSU5UX0VSUigiQkJQIHdyaXRlIFIlZD0weCV4IGZhaWwuIEJ1c3lDbnQ9ICVkLmJQQ0ljbGtPZmYgPSAlZC4gXG4iLCBfSSwgQmJwQ3NyLndvcmQsIEJ1c3lDbnQsIChfQSktPmJQQ0ljbGtPZmYpOwlcCi0JCX0JCQkJCQkJCQkJCQkJCQkJCVwKLQl9IGVsc2UgewkJCQkJCQlcCi0JCURCR1BSSU5UX0VSUigiKioqKioqIEJCUF9Xcml0ZV9MYXRjaCBCdWZmZXIgZXhjZWVkcyBtYXggYm91bmRhcnkgKioqKioqIFxuIik7CVwKLQl9CQkJCQkJCQkJCQkJCQkJCQkJXAotfQotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotCi0jaWZkZWYgUlRNUF9NQUNfVVNCCi0jZGVmaW5lIFJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChfQSwgX0ksIF9wVikgICBSVFVTQlJlYWRCQlBSZWdpc3RlcihfQSwgX0ksIF9wVikKLSNkZWZpbmUgUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChfQSwgX0ksIF9WKSAgIFJUVVNCV3JpdGVCQlBSZWdpc3RlcihfQSwgX0ksIF9WKQotCi0jZGVmaW5lIEJCUF9JT19XUklURThfQllfUkVHX0lEKF9BLCBfSSwgX1YpCQkJUlRVU0JXcml0ZUJCUFJlZ2lzdGVyKF9BLCBfSSwgX1YpCi0jZGVmaW5lIEJCUF9JT19SRUFEOF9CWV9SRUdfSUQoX0EsIF9JLCBfcFYpCQlSVFVTQlJlYWRCQlBSZWdpc3RlcihfQSwgX0ksIF9wVikKLSNlbmRpZiAvKiBSVE1QX01BQ19VU0IgLy8gKi8KLQotI2lmZGVmIFJUMzB4eAotI2RlZmluZSBSVE1QX0FTSUNfTU1QU19ESVNBQkxFKF9wQWQpCQkJCQkJCVwKLQlkbyB7CQkJCQkJCQkJCQkJCQkJXAotCQl1MzIgX21hY0RhdGE7IFwKLQkJdTggX2JicERhdGEgPSAwOyBcCi0JCS8qIGRpc2FibGUgTU1QUyBCQlAgY29udHJvbCByZWdpc3RlciAqLwkJCQkJCVwKLQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKF9wQWQsIEJCUF9SMywgJl9iYnBEYXRhKTsJXAotCQlfYmJwRGF0YSAmPSB+KDB4MDQpOwkvKmJpdCAyKi8JCQkJCQkJCVwKLQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChfcEFkLCBCQlBfUjMsIF9iYnBEYXRhKTsJXAotCQkJCQkJCQkJCQkJCQkJCVwKLQkJLyogZGlzYWJsZSBNTVBTIE1BQyBjb250cm9sIHJlZ2lzdGVyICovCQkJCQkJXAotCQlSVE1QX0lPX1JFQUQzMihfcEFkLCAweDEyMTAsICZfbWFjRGF0YSk7CQkJCVwKLQkJX21hY0RhdGEgJj0gfigweDA5KTsJLypiaXQgMCwgMyovCQkJCQkJCVwKLQkJUlRNUF9JT19XUklURTMyKF9wQWQsIDB4MTIxMCwgX21hY0RhdGEpOwkJCQlcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBSVE1QX0FTSUNfTU1QU19FTkFCTEUoX3BBZCkJCQkJCQkJXAotCWRvIHsJCQkJCQkJCQkJCQkJCQlcCi0JCXUzMiBfbWFjRGF0YTsgXAotCQl1OCBfYmJwRGF0YSA9IDA7IFwKLQkJLyogZW5hYmxlIE1NUFMgQkJQIGNvbnRyb2wgcmVnaXN0ZXIgKi8JCQkJCQlcCi0JCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChfcEFkLCBCQlBfUjMsICZfYmJwRGF0YSk7CVwKLQkJX2JicERhdGEgfD0gKDB4MDQpOwkvKmJpdCAyKi8JCQkJCQkJCVwKLQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChfcEFkLCBCQlBfUjMsIF9iYnBEYXRhKTsJXAotCQkJCQkJCQkJCQkJCQkJCVwKLQkJLyogZW5hYmxlIE1NUFMgTUFDIGNvbnRyb2wgcmVnaXN0ZXIgKi8JCQkJCQlcCi0JCVJUTVBfSU9fUkVBRDMyKF9wQWQsIDB4MTIxMCwgJl9tYWNEYXRhKTsJCQkJXAotCQlfbWFjRGF0YSB8PSAoMHgwOSk7CS8qYml0IDAsIDMqLwkJCQkJCQlcCi0JCVJUTVBfSU9fV1JJVEUzMihfcEFkLCAweDEyMTAsIF9tYWNEYXRhKTsJCQkJXAotCX0gd2hpbGUgKDApCi0KLSNlbmRpZiAvKiBSVDMweHggLy8gKi8KLQotI2VuZGlmIC8qIF9fUlRNUF9QSFlfSF9fIC8vICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NoaXBzL3J0MzA3MC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jaGlwcy9ydDMwNzAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ExN2ZkMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NoaXBzL3J0MzA3MC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUmFsaW5rIFRlY2ggSW5jLgotICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAotICogSHNpbmNodSBDb3VudHkgMzAyLAotICogVGFpd2FuLCBSLk8uQy4KLSAqCi0gKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0JTW9kdWxlIE5hbWU6Ci0JcnQzMDcwLmMKLQotCUFic3RyYWN0OgotCVNwZWNpZmljIGZ1bmNpdG9ucyBhbmQgdmFyaWFibGVzIGZvciBSVDMwNzAKLQotCVJldmlzaW9uIEhpc3Rvcnk6Ci0JV2hvICAgICAgICAgV2hlbiAgICAgICAgICBXaGF0Ci0JLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotCi0jaWZkZWYgUlQzMDcwCi0KLSNpbmNsdWRlICIuLi9ydF9jb25maWcuaCIKLQotI2lmbmRlZiBSVE1QX1JGX1JXX1NVUFBPUlQKLSNlcnJvciAiWW91IFNob3VsZCBFbmFibGUgY29tcGlsZSBmbGFnIFJUTVBfUkZfUldfU1VQUE9SVCBmb3IgdGhpcyBjaGlwIgotI2VuZGlmIC8qIFJUTVBfUkZfUldfU1VQUE9SVCAvLyAqLwotCi12b2lkIE5JQ0luaXRSVDMwNzBSRlJlZ2lzdGVycyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0JaW50IGk7Ci0JdTggUkZWYWx1ZTsKLQotCS8qIERyaXZlciBtdXN0IHJlYWQgRUVQUk9NIHRvIGdldCBSZkljVHlwZSBiZWZvcmUgaW5pdGlhbCBSRiByZWdpc3RlcnMgKi8KLQkvKiBJbml0aWFsaXplIFJGIHJlZ2lzdGVyIHRvIGRlZmF1bHQgdmFsdWUgKi8KLQlpZiAoSVNfUlQzMDcwKHBBZCkgfHwgSVNfUlQzMDcxKHBBZCkpIHsKLQkJLyogSW5pdCBSRiBjYWxpYnJhdGlvbiAqLwotCQkvKiBEcml2ZXIgc2hvdWxkIHRvZ2dsZSBSRiBSMzAgYml0NyBiZWZvcmUgaW5pdCBSRiByZWdpc3RlcnMgKi8KLQkJdTMyIFJmUmVnID0gMDsKLQkJdTMyIGRhdGE7Ci0KLQkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMzAsICh1OCAqKSZSZlJlZyk7Ci0JCVJmUmVnIHw9IDB4ODA7Ci0JCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IzMCwgKHU4KVJmUmVnKTsKLQkJUlRNUHVzZWNEZWxheSgxMDAwKTsKLQkJUmZSZWcgJj0gMHg3RjsKLQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjMwLCAodTgpUmZSZWcpOwotCi0JCS8qIEluaXRpYWxpemUgUkYgcmVnaXN0ZXIgdG8gZGVmYXVsdCB2YWx1ZSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgTlVNX1JGX1JFR19QQVJNUzsgaSsrKSB7Ci0JCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLAotCQkJCQkgICAgICBSVDMweHhfUkZSZWdUYWJsZVtpXS5SZWdpc3RlciwKLQkJCQkJICAgICAgUlQzMHh4X1JGUmVnVGFibGVbaV0uVmFsdWUpOwotCQl9Ci0KLQkJLyogYWRkIGJ5IGpvaG5saSAqLwotCQlpZiAoSVNfUlQzMDcwKHBBZCkpIHsKLQkJCS8qICovCi0JCQkvKiBUaGUgREFDIGlzc3VlKExET19DRkcwKSBoYXMgYmVlbiBmaXhlZCBpbiBSVDMwNzAoRikuICovCi0JCQkvKiBUaGUgdm9sdGFnZSByYWlzaW5nIHBhdGNoIGlzIG5vIGxvbmdlciBuZWVkZWQgZm9yIFJUMzA3MChGKSAqLwotCQkJLyogKi8KLQkJCWlmICgocEFkLT5NQUNWZXJzaW9uICYgMHhmZmZmKSA8IDB4MDIwMSkgewotCQkJCS8qICBVcGRhdGUgTUFDIDB4MDVENCBmcm9tIDAxeHh4eHh4IHRvIDBEeHh4eHh4ICh2b2x0YWdlIDEuMlYgdG8gMS4zNVYpIGZvciBSVDMwNzAgdG8gaW1wcm92ZSB5aWVsZCByYXRlICovCi0JCQkJUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBMRE9fQ0ZHMCwgJmRhdGEpOwotCQkJCWRhdGEgPSAoKGRhdGEgJiAweEYwRkZGRkZGKSB8IDB4MEQwMDAwMDApOwotCQkJCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIExET19DRkcwLCBkYXRhKTsKLQkJCX0KLQkJfSBlbHNlIGlmIChJU19SVDMwNzEocEFkKSkgewotCQkJLyogRHJpdmVyIHNob3VsZCBzZXQgUkYgUjYgYml0NiBvbiBiZWZvcmUgaW5pdCBSRiByZWdpc3RlcnMgKi8KLQkJCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjA2LCAodTggKikmUmZSZWcpOwotCQkJUmZSZWcgfD0gMHg0MDsKLQkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IwNiwgKHU4KVJmUmVnKTsKLQotCQkJLyogaW5pdCBSMzEgKi8KLQkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IzMSwgMHgxNCk7Ci0KLQkJCS8qIFJUMzA3MSB2ZXJzaW9uIEUgaGFzIGZpeGVkIHRoaXMgaXNzdWUgKi8KLQkJCWlmICgocEFkLT5OaWNDb25maWcyLmZpZWxkLkRBQ1Rlc3RCaXQgPT0gMSkKLQkJCSAgICAmJiAoKHBBZC0+TUFDVmVyc2lvbiAmIDB4ZmZmZikgPCAweDAyMTEpKSB7Ci0JCQkJLyogcGF0Y2ggdHggRVZNIGlzc3VlIHRlbXBvcmFyaWx5ICovCi0JCQkJUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBMRE9fQ0ZHMCwgJmRhdGEpOwotCQkJCWRhdGEgPSAoKGRhdGEgJiAweEUwRkZGRkZGKSB8IDB4MEQwMDAwMDApOwotCQkJCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIExET19DRkcwLCBkYXRhKTsKLQkJCX0gZWxzZSB7Ci0JCQkJUlRNUF9JT19SRUFEMzIocEFkLCBMRE9fQ0ZHMCwgJmRhdGEpOwotCQkJCWRhdGEgPSAoKGRhdGEgJiAweEUwRkZGRkZGKSB8IDB4MDEwMDAwMDApOwotCQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIExET19DRkcwLCBkYXRhKTsKLQkJCX0KLQotCQkJLyogcGF0Y2ggTE5BX1BFX0cxIGZhaWxlZCBpc3N1ZSAqLwotCQkJUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBHUElPX1NXSVRDSCwgJmRhdGEpOwotCQkJZGF0YSAmPSB+KDB4MjApOwotCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgR1BJT19TV0lUQ0gsIGRhdGEpOwotCQl9Ci0JCS8qRm9yIFJGIGZpbHRlciBDYWxpYnJhdGlvbiAqLwotCQlSVE1QRmlsdGVyQ2FsaWJyYXRpb24ocEFkKTsKLQotCQkvKiBJbml0aWFsaXplIFJGIFIyNyByZWdpc3Rlciwgc2V0IFJGIFIyNyBtdXN0IGJlIGJlaGluZCBSVE1QRmlsdGVyQ2FsaWJyYXRpb24oKSAqLwotCQkvKiAqLwotCQkvKiBUWCB0byBSWCBJUSBnbGl0Y2goUkZfUjI3KSBoYXMgYmVlbiBmaXhlZCBpbiBSVDMwNzAoRikuICovCi0JCS8qIFJhaXNpbmcgUkYgdm9sdGFnZSBpcyBubyBsb25nZXIgbmVlZGVkIGZvciBSVDMwNzAoRikgKi8KLQkJLyogKi8KLQkJaWYgKChJU19SVDMwNzAocEFkKSkgJiYgKChwQWQtPk1BQ1ZlcnNpb24gJiAweGZmZmYpIDwgMHgwMjAxKSkgewotCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjI3LCAweDMpOwotCQl9IGVsc2UgaWYgKChJU19SVDMwNzEocEFkKSkKLQkJCSAgICYmICgocEFkLT5NQUNWZXJzaW9uICYgMHhmZmZmKSA8IDB4MDIxMSkpIHsKLQkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IyNywgMHgzKTsKLQkJfQotCQkvKiBzZXQgbGVkIG9wZW4gZHJhaW4gZW5hYmxlICovCi0JCVJUVVNCUmVhZE1BQ1JlZ2lzdGVyKHBBZCwgT1BUXzE0LCAmZGF0YSk7Ci0JCWRhdGEgfD0gMHgwMTsKLQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgT1BUXzE0LCBkYXRhKTsKLQotCQkvKiBtb3ZlIGZyb20gUlQzMHh4TG9hZFJGTm9ybWFsTW9kZVNldHVwIGJlY2F1c2UgaXQncyBuZWVkZWQgZm9yIGJvdGggUlQzMDcwIGFuZCBSVDMwNzEgKi8KLQkJLyogVFhfTE8xX2VuLCBSRiBSMTcgcmVnaXN0ZXIgQml0IDMgdG8gMCAqLwotCQlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IxNywgJlJGVmFsdWUpOwotCQlSRlZhbHVlICY9ICh+MHgwOCk7Ci0JCS8qIHRvIGZpeCByeCBsb25nIHJhbmdlIGlzc3VlICovCi0JCWlmIChwQWQtPk5pY0NvbmZpZzIuZmllbGQuRXh0ZXJuYWxMTkFGb3JHID09IDApIHsKLQkJCWlmICgoSVNfUlQzMDcxKHBBZCkKLQkJCSAgICAgJiYgKChwQWQtPk1BQ1ZlcnNpb24gJiAweGZmZmYpID49IDB4MDIxMSkpCi0JCQkgICAgfHwgSVNfUlQzMDcwKHBBZCkpIHsKLQkJCQlSRlZhbHVlIHw9IDB4MjA7Ci0JCQl9Ci0JCX0KLQkJLyogc2V0IFJGX1IxN19iaXRbMjowXSBlcXVhbCB0byBFRVBST00gc2V0dGluZyBhdCAweDQ4aCAqLwotCQlpZiAocEFkLT5UeE1peGVyR2FpbjI0RyA+PSAxKSB7Ci0JCQlSRlZhbHVlICY9ICh+MHg3KTsJLyogY2xlYW4gYml0IFsyOjBdICovCi0JCQlSRlZhbHVlIHw9IHBBZC0+VHhNaXhlckdhaW4yNEc7Ci0JCX0KLQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjE3LCBSRlZhbHVlKTsKLQotCQlpZiAoSVNfUlQzMDcxKHBBZCkpIHsKLQkJCS8qIGFkZCBieSBqb2hubGksIFJGIHBvd2VyIHNlcXVlbmNlIHNldHVwLCBsb2FkIFJGIG5vcm1hbCBvcGVyYXRpb24tbW9kZSBzZXR1cCAqLwotCQkJUlQzMHh4TG9hZFJGTm9ybWFsTW9kZVNldHVwKHBBZCk7Ci0JCX0gZWxzZSBpZiAoSVNfUlQzMDcwKHBBZCkpIHsKLQkJCS8qIGFkZCBieSBqb2hubGksIHJlc2V0IFJGX1IyNyB3aGVuIGludGVyZmFjZSBkb3duICYgdXAgdG8gZml4IHRocm91Z2hwdXQgcHJvYmxlbSAqLwotCQkJLyogTERPUkZfVkMsIFJGIFIyNyByZWdpc3RlciBCaXQgMiB0byAwICovCi0JCQlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IyNywgJlJGVmFsdWUpOwotCQkJLyogVFggdG8gUlggSVEgZ2xpdGNoKFJGX1IyNykgaGFzIGJlZW4gZml4ZWQgaW4gUlQzMDcwKEYpLiAqLwotCQkJLyogUmFpc2luZyBSRiB2b2x0YWdlIGlzIG5vIGxvbmdlciBuZWVkZWQgZm9yIFJUMzA3MChGKSAqLwotCQkJaWYgKChwQWQtPk1BQ1ZlcnNpb24gJiAweGZmZmYpIDwgMHgwMjAxKQotCQkJCVJGVmFsdWUgPSAoUkZWYWx1ZSAmICh+MHg3NykpIHwgMHgzOwotCQkJZWxzZQotCQkJCVJGVmFsdWUgPSAoUkZWYWx1ZSAmICh+MHg3NykpOwotCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjI3LCBSRlZhbHVlKTsKLQkJCS8qIGVuZCBqb2hubGkgKi8KLQkJfQotCX0KLQotfQotI2VuZGlmIC8qIFJUMzA3MCAvLyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jaGlwcy9ydDMwOTAuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY2hpcHMvcnQzMDkwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzNDcyMGUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jaGlwcy9ydDMwOTAuYworKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFJhbGluayBUZWNoIEluYy4KLSAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKLSAqIEhzaW5jaHUgQ291bnR5IDMwMiwKLSAqIFRhaXdhbiwgUi5PLkMuCi0gKgotICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotCU1vZHVsZSBOYW1lOgotCXJ0MzA5MC5jCi0KLQlBYnN0cmFjdDoKLQlTcGVjaWZpYyBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBmb3IgUlQzMDcwCi0KLQlSZXZpc2lvbiBIaXN0b3J5OgotCVdobyAgICAgICAgIAkJV2hlbiAgICAgICAgICAgIFdoYXQKLQlKdXN0aW4gUC4gTWF0dG9jawkxMS8wNy8yMDEwCUZpeCBhIHR5cG8KLQktLS0tLS0tLSAgICAtLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSovCi0KLSNpZmRlZiBSVDMwOTAKLQotI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgotCi0jaWZuZGVmIFJUTVBfUkZfUldfU1VQUE9SVAotI2Vycm9yICJZb3UgU2hvdWxkIEVuYWJsZSBjb21waWxlIGZsYWcgUlRNUF9SRl9SV19TVVBQT1JUIGZvciB0aGlzIGNoaXAiCi0jZW5kaWYgLyogUlRNUF9SRl9SV19TVVBQT1JUIC8vICovCi0KLXZvaWQgTklDSW5pdFJUMzA5MFJGUmVnaXN0ZXJzKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlpbnQgaTsKLQkvKiBEcml2ZXIgbXVzdCByZWFkIEVFUFJPTSB0byBnZXQgUmZJY1R5cGUgYmVmb3JlIGluaXRpYWwgUkYgcmVnaXN0ZXJzICovCi0JLyogSW5pdGlhbGl6ZSBSRiByZWdpc3RlciB0byBkZWZhdWx0IHZhbHVlICovCi0JaWYgKElTX1JUMzA5MChwQWQpKSB7Ci0JCS8qIEluaXQgUkYgY2FsaWJyYXRpb24gKi8KLQkJLyogRHJpdmVyIHNob3VsZCB0b2dnbGUgUkYgUjMwIGJpdDcgYmVmb3JlIGluaXQgUkYgcmVnaXN0ZXJzICovCi0JCXU4IFJmUmVnOwotCQl1MzIgZGF0YTsKLQotCQlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IzMCwgKHU4ICopJlJmUmVnKTsKLQkJUmZSZWcgfD0gMHg4MDsKLQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjMwLCAodTgpUmZSZWcpOwotCQlSVE1QdXNlY0RlbGF5KDEwMDApOwotCQlSZlJlZyAmPSAweDdGOwotCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMzAsICh1OClSZlJlZyk7Ci0KLQkJLyogaW5pdCBSMjQsIFIzMSAqLwotCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMjQsIDB4MEYpOwotCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMzEsIDB4MEYpOwotCi0JCS8qIFJUMzA5eCB2ZXJzaW9uIEUgaGFzIGZpeGVkIHRoaXMgaXNzdWUgKi8KLQkJaWYgKChwQWQtPk5pY0NvbmZpZzIuZmllbGQuREFDVGVzdEJpdCA9PSAxKQotCQkgICAgJiYgKChwQWQtPk1BQ1ZlcnNpb24gJiAweGZmZmYpIDwgMHgwMjExKSkgewotCQkJLyogcGF0Y2ggdHggRVZNIGlzc3VlIHRlbXBvcmFyaWx5ICovCi0JCQlSVE1QX0lPX1JFQUQzMihwQWQsIExET19DRkcwLCAmZGF0YSk7Ci0JCQlkYXRhID0gKChkYXRhICYgMHhFMEZGRkZGRikgfCAweDBEMDAwMDAwKTsKLQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIExET19DRkcwLCBkYXRhKTsKLQkJfSBlbHNlIHsKLQkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTERPX0NGRzAsICZkYXRhKTsKLQkJCWRhdGEgPSAoKGRhdGEgJiAweEUwRkZGRkZGKSB8IDB4MDEwMDAwMDApOwotCQkJUlRNUF9JT19XUklURTMyKHBBZCwgTERPX0NGRzAsIGRhdGEpOwotCQl9Ci0KLQkJLyogcGF0Y2ggTE5BX1BFX0cxIGZhaWxlZCBpc3N1ZSAqLwotCQlSVE1QX0lPX1JFQUQzMihwQWQsIEdQSU9fU1dJVENILCAmZGF0YSk7Ci0JCWRhdGEgJj0gfigweDIwKTsKLQkJUlRNUF9JT19XUklURTMyKHBBZCwgR1BJT19TV0lUQ0gsIGRhdGEpOwotCi0JCS8qIEluaXRpYWxpemUgUkYgcmVnaXN0ZXIgdG8gZGVmYXVsdCB2YWx1ZSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgTlVNX1JGX1JFR19QQVJNUzsgaSsrKSB7Ci0JCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLAotCQkJCQkgICAgICBSVDMweHhfUkZSZWdUYWJsZVtpXS5SZWdpc3RlciwKLQkJCQkJICAgICAgUlQzMHh4X1JGUmVnVGFibGVbaV0uVmFsdWUpOwotCQl9Ci0KLQkJLyogRHJpdmVyIHNob3VsZCBzZXQgUkYgUjYgYml0NiBvbiBiZWZvcmUgY2FsaWJyYXRpb24gKi8KLQkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMDYsICh1OCAqKSZSZlJlZyk7Ci0JCVJmUmVnIHw9IDB4NDA7Ci0JCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IwNiwgKHU4KVJmUmVnKTsKLQotCQkvKkZvciBSRiBmaWx0ZXIgQ2FsaWJyYXRpb24gKi8KLQkJUlRNUEZpbHRlckNhbGlicmF0aW9uKHBBZCk7Ci0KLQkJLyogSW5pdGlhbGl6ZSBSRiBSMjcgcmVnaXN0ZXIsIHNldCBSRiBSMjcgbXVzdCBiZSBiZWhpbmQgUlRNUEZpbHRlckNhbGlicmF0aW9uKCkgKi8KLQkJaWYgKChwQWQtPk1BQ1ZlcnNpb24gJiAweGZmZmYpIDwgMHgwMjExKQotCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjI3LCAweDMpOwotCi0JCS8qIHNldCBsZWQgb3BlbiBkcmFpbiBlbmFibGUgKi8KLQkJUlRNUF9JT19SRUFEMzIocEFkLCBPUFRfMTQsICZkYXRhKTsKLQkJZGF0YSB8PSAweDAxOwotCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBPUFRfMTQsIGRhdGEpOwotCi0JCS8qIHNldCBkZWZhdWx0IGFudGVubmEgYXMgbWFpbiAqLwotCQlpZiAocEFkLT5SZkljVHlwZSA9PSBSRklDXzMwMjApCi0JCQlBc2ljU2V0UnhBbnQocEFkLCBwQWQtPlJ4QW50LlBhaXIxUHJpbWFyeVJ4QW50KTsKLQotCQkvKiBhZGQgYnkgam9obmxpLCBSRiBwb3dlciBzZXF1ZW5jZSBzZXR1cCwgbG9hZCBSRiBub3JtYWwgb3BlcmF0aW9uLW1vZGUgc2V0dXAgKi8KLQkJUlQzMHh4TG9hZFJGTm9ybWFsTW9kZVNldHVwKHBBZCk7Ci0JfQotCi19Ci0KLSNlbmRpZiAvKiBSVDMwOTAgLy8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY2hpcHMvcnQzMHh4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NoaXBzL3J0MzB4eC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTRkZWJmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY2hpcHMvcnQzMHh4LmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MTYgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLQlNb2R1bGUgTmFtZToKLQlydDMweHguYwotCi0JQWJzdHJhY3Q6Ci0JU3BlY2lmaWMgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgZm9yIFJUMzB4eC4KLQotCVJldmlzaW9uIEhpc3Rvcnk6Ci0JV2hvICAgICAgICAgCQlXaGVuICAgICAgICAgICAgV2hhdAotCUp1c3RpbiBQLiBNYXR0b2NrCTExLzA3LzIwMTAJRml4IHNvbWUgdHlwb3MKLQktLS0tLS0tLSAgICAtLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSovCi0KLSNpZmRlZiBSVDMweHgKLQotI2lmbmRlZiBSVE1QX1JGX1JXX1NVUFBPUlQKLSNlcnJvciAiWW91IFNob3VsZCBFbmFibGUgY29tcGlsZSBmbGFnIFJUTVBfUkZfUldfU1VQUE9SVCBmb3IgdGhpcyBjaGlwIgotI2VuZGlmIC8qIFJUTVBfUkZfUldfU1VQUE9SVCAvLyAqLwotCi0jaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCi0KLS8qICovCi0vKiBSRiByZWdpc3RlciBpbml0aWFsaXphdGlvbiBzZXQgKi8KLS8qICovCi1zdHJ1Y3QgcnRfcmVnX3BhaXIgUlQzMHh4X1JGUmVnVGFibGVbXSA9IHsKLQl7UkZfUjA0LCAweDQwfQotCSwKLQl7UkZfUjA1LCAweDAzfQotCSwKLQl7UkZfUjA2LCAweDAyfQotCSwKLQl7UkZfUjA3LCAweDYwfQotCSwKLQl7UkZfUjA5LCAweDBGfQotCSwKLQl7UkZfUjEwLCAweDQxfQotCSwKLQl7UkZfUjExLCAweDIxfQotCSwKLQl7UkZfUjEyLCAweDdCfQotCSwKLQl7UkZfUjE0LCAweDkwfQotCSwKLQl7UkZfUjE1LCAweDU4fQotCSwKLQl7UkZfUjE2LCAweEIzfQotCSwKLQl7UkZfUjE3LCAweDkyfQotCSwKLQl7UkZfUjE4LCAweDJDfQotCSwKLQl7UkZfUjE5LCAweDAyfQotCSwKLQl7UkZfUjIwLCAweEJBfQotCSwKLQl7UkZfUjIxLCAweERCfQotCSwKLQl7UkZfUjI0LCAweDE2fQotCSwKLQl7UkZfUjI1LCAweDAxfQotCSwKLQl7UkZfUjI5LCAweDFGfQotCSwKLX07Ci0KLXU4IE5VTV9SRl9SRUdfUEFSTVMgPSAoc2l6ZW9mKFJUMzB4eF9SRlJlZ1RhYmxlKSAvIHNpemVvZihzdHJ1Y3QgcnRfcmVnX3BhaXIpKTsKLQotLyogQW50ZW5uYSBkaXZlcnNpdHkgdXNlIEdQSU8zIGFuZCBFRVNLIHBpbiBmb3IgY29udHJvbCAqLwotLyogQW50ZW5uYSBhbmQgRUVQUk9NIGFjY2VzcyBhcmUgYm90aCB1c2luZyBFRVNLIHBpbiwgKi8KLS8qIFRoZXJlZm9yIHdlIHNob3VsZCBhdm9pZCBhY2Nlc3NpbmcgRUVTSyBhdCB0aGUgc2FtZSB0aW1lICovCi0vKiBUaGVuIHJlc3RvcmUgYW50ZW5uYSBhZnRlciBFRVBST00gYWNjZXNzICovCi0vKiBUaGUgb3JpZ2luYWwgbmFtZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIEFzaWNTZXRSeEFudCgpLCBub3cgY2hhbmdlIHRvICovCi0vKnZvaWQgQXNpY1NldFJ4QW50KCAqLwotdm9pZCBSVDMweHhTZXRSeEFudChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHU4IEFudCkKLXsKLQl1MzIgVmFsdWU7Ci0jaWZkZWYgUlRNUF9NQUNfUENJCi0JdTMyIHg7Ci0jZW5kaWYKLQotCWlmICgocEFkLT5FZXByb21BY2Nlc3MpIHx8Ci0JICAgIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MpKSB8fAotCSAgICAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpKSB8fAotCSAgICAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JBRElPX09GRikpIHx8Ci0JICAgIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKSB7Ci0JCXJldHVybjsKLQl9Ci0JLyogdGhlIGFudGVubmEgc2VsZWN0aW9uIGlzIHRocm91Z2ggZmlybXdhcmUgYW5kIE1BQyByZWdpc3RlcihHUElPMykgKi8KLQlpZiAoQW50ID09IDApIHsKLQkJLyogTWFpbiBhbnRlbm5hICovCi0jaWZkZWYgUlRNUF9NQUNfUENJCi0JCVJUTVBfSU9fUkVBRDMyKHBBZCwgRTJQUk9NX0NTUiwgJngpOwotCQl4IHw9IChFRVNLKTsKLQkJUlRNUF9JT19XUklURTMyKHBBZCwgRTJQUk9NX0NTUiwgeCk7Ci0jZWxzZQotCQlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4NzMsIDB4RkYsIDB4MSwgMHgwKTsKLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLQotCQlSVE1QX0lPX1JFQUQzMihwQWQsIEdQSU9fQ1RSTF9DRkcsICZWYWx1ZSk7Ci0JCVZhbHVlICY9IH4oMHgwODA4KTsKLQkJUlRNUF9JT19XUklURTMyKHBBZCwgR1BJT19DVFJMX0NGRywgVmFsdWUpOwotCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsCi0JCQkgICAgICgiQXNpY1NldFJ4QW50LCBzd2l0Y2ggdG8gbWFpbiBhbnRlbm5hXG4iKSk7Ci0JfSBlbHNlIHsKLQkJLyogQXV4IGFudGVubmEgKi8KLSNpZmRlZiBSVE1QX01BQ19QQ0kKLQkJUlRNUF9JT19SRUFEMzIocEFkLCBFMlBST01fQ1NSLCAmeCk7Ci0JCXggJj0gfihFRVNLKTsKLQkJUlRNUF9JT19XUklURTMyKHBBZCwgRTJQUk9NX0NTUiwgeCk7Ci0jZWxzZQotCQlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4NzMsIDB4RkYsIDB4MCwgMHgwKTsKLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLQkJUlRNUF9JT19SRUFEMzIocEFkLCBHUElPX0NUUkxfQ0ZHLCAmVmFsdWUpOwotCQlWYWx1ZSAmPSB+KDB4MDgwOCk7Ci0JCVZhbHVlIHw9IDB4MDg7Ci0JCVJUTVBfSU9fV1JJVEUzMihwQWQsIEdQSU9fQ1RSTF9DRkcsIFZhbHVlKTsKLQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLAotCQkJICAgICAoIkFzaWNTZXRSeEFudCwgc3dpdGNoIHRvIGF1eCBhbnRlbm5hXG4iKSk7Ci0JfQotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQkJRm9yIFJGIGZpbHRlciBjYWxpYnJhdGlvbiBwdXJwb3NlCi0KLQlBcmd1bWVudHM6Ci0JCXBBZCAgICAgICAgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byBvdXIgYWRhcHRlcgotCi0JUmV0dXJuIFZhbHVlOgotCQlOb25lCi0KLQlJUlFMID0gUEFTU0lWRV9MRVZFTAotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBSVE1QRmlsdGVyQ2FsaWJyYXRpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCXU4IFI1NXggPSAwLCB2YWx1ZSwgRmlsdGVyVGFyZ2V0ID0gMHgxRSwgQkJQVmFsdWUgPSAwOwotCXUzMiBsb29wID0gMCwgY291bnQgPSAwLCBsb29wY250ID0gMCwgUmVUcnkgPSAwOwotCXU4IFJGX1IyNF9WYWx1ZSA9IDA7Ci0KLQkvKiBHaXZlIGJicCBmaWx0ZXIgaW5pdGlhbCB2YWx1ZSAqLwotCXBBZC0+TWxtZS5DYWxpQlcyMFJmUjI0ID0gMHgxRjsKLQlwQWQtPk1sbWUuQ2FsaUJXNDBSZlIyNCA9IDB4MkY7CS8qQml0WzVdIG11c3QgYmUgMSBmb3IgQlcgNDAgKi8KLQotCWRvIHsKLQkJaWYgKGxvb3AgPT0gMSkgewkvKkJhbmRXaWR0aCA9IDQwIE1IeiAqLwotCQkJLyogV3JpdGUgMHgyNyB0byBSRl9SMjQgdG8gcHJvZ3JhbSBmaWx0ZXIgKi8KLQkJCVJGX1IyNF9WYWx1ZSA9IDB4Mjc7Ci0JCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMjQsIFJGX1IyNF9WYWx1ZSk7Ci0JCQlpZiAoSVNfUlQzMDkwKHBBZCkgfHwgSVNfUlQzNTcyKHBBZCkgfHwgSVNfUlQzMzkwKHBBZCkpCi0JCQkJRmlsdGVyVGFyZ2V0ID0gMHgxNTsKLQkJCWVsc2UKLQkJCQlGaWx0ZXJUYXJnZXQgPSAweDE5OwotCi0JCQkvKiB3aGVuIGNhbGlicmF0ZSBCVzQwLCBCQlAgbWFzayBtdXN0IHNldCB0byBCVzQwLiAqLwotCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCAmQkJQVmFsdWUpOwotCQkJQkJQVmFsdWUgJj0gKH4weDE4KTsKLQkJCUJCUFZhbHVlIHw9ICgweDEwKTsKLQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsIEJCUFZhbHVlKTsKLQotCQkJLyogc2V0IHRvIEJXNDAgKi8KLQkJCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjMxLCAmdmFsdWUpOwotCQkJdmFsdWUgfD0gMHgyMDsKLQkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IzMSwgdmFsdWUpOwotCQl9IGVsc2UgewkvKkJhbmRXaWR0aCA9IDIwIE1IeiAqLwotCQkJLyogV3JpdGUgMHgwNyB0byBSRl9SMjQgdG8gcHJvZ3JhbSBmaWx0ZXIgKi8KLQkJCVJGX1IyNF9WYWx1ZSA9IDB4MDc7Ci0JCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMjQsIFJGX1IyNF9WYWx1ZSk7Ci0JCQlpZiAoSVNfUlQzMDkwKHBBZCkgfHwgSVNfUlQzNTcyKHBBZCkgfHwgSVNfUlQzMzkwKHBBZCkpCi0JCQkJRmlsdGVyVGFyZ2V0ID0gMHgxMzsKLQkJCWVsc2UKLQkJCQlGaWx0ZXJUYXJnZXQgPSAweDE2OwotCi0JCQkvKiBzZXQgdG8gQlcyMCAqLwotCQkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMzEsICZ2YWx1ZSk7Ci0JCQl2YWx1ZSAmPSAofjB4MjApOwotCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjMxLCB2YWx1ZSk7Ci0JCX0KLQotCQkvKiBXcml0ZSAweDAxIHRvIFJGX1IyMiB0byBlbmFibGUgYmFzZWJhbmQgbG9vcGJhY2sgbW9kZSAqLwotCQlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IyMiwgJnZhbHVlKTsKLQkJdmFsdWUgfD0gMHgwMTsKLQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjIyLCB2YWx1ZSk7Ci0KLQkJLyogV3JpdGUgMHgwMCB0byBCQlBfUjI0IHRvIHNldCBwb3dlciAmIGZyZXF1ZW5jeSBvZiBwYXNzYmFuZCB0ZXN0IHRvbmUgKi8KLQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMjQsIDApOwotCi0JCWRvIHsKLQkJCS8qIFdyaXRlIDB4OTAgdG8gQkJQX1IyNSB0byB0cmFuc21pdCB0ZXN0IHRvbmUgKi8KLQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjI1LCAweDkwKTsKLQotCQkJUlRNUHVzZWNEZWxheSgxMDAwKTsKLQkJCS8qIFJlYWQgQkJQX1I1NVs2OjBdIGZvciByZWNlaXZlZCBwb3dlciwgc2V0IFI1NXggPSBCQlBfUjU1WzY6MF0gKi8KLQkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNTUsICZ2YWx1ZSk7Ci0JCQlSNTV4ID0gdmFsdWUgJiAweEZGOwotCi0JCX0gd2hpbGUgKChSZVRyeSsrIDwgMTAwKSAmJiAoUjU1eCA9PSAwKSk7Ci0KLQkJLyogV3JpdGUgMHgwNiB0byBCQlBfUjI0IHRvIHNldCBwb3dlciAmIGZyZXF1ZW5jeSBvZiBzdG9wYmFuZCB0ZXN0IHRvbmUgKi8KLQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMjQsIDB4MDYpOwotCi0JCXdoaWxlIChUUlVFKSB7Ci0JCQkvKiBXcml0ZSAweDkwIHRvIEJCUF9SMjUgdG8gdHJhbnNtaXQgdGVzdCB0b25lICovCi0JCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IyNSwgMHg5MCk7Ci0KLQkJCS8qV2UgbmVlZCB0byB3YWl0IGZvciBjYWxpYnJhdGlvbiAqLwotCQkJUlRNUHVzZWNEZWxheSgxMDAwKTsKLQkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNTUsICZ2YWx1ZSk7Ci0JCQl2YWx1ZSAmPSAweEZGOwotCQkJaWYgKChSNTV4IC0gdmFsdWUpIDwgRmlsdGVyVGFyZ2V0KSB7Ci0JCQkJUkZfUjI0X1ZhbHVlKys7Ci0JCQl9IGVsc2UgaWYgKChSNTV4IC0gdmFsdWUpID09IEZpbHRlclRhcmdldCkgewotCQkJCVJGX1IyNF9WYWx1ZSsrOwotCQkJCWNvdW50Kys7Ci0JCQl9IGVsc2UgewotCQkJCWJyZWFrOwotCQkJfQotCi0JCQkvKiBwcmV2ZW50IGluZmluaXRlIGxvb3A7IGNhdXNlcyBkcml2ZXIgaGFuZy4gKi8KLQkJCWlmIChsb29wY250KysgPiAxMDApIHsKLQkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCQkJICgiUlRNUEZpbHRlckNhbGlicmF0aW9uIC0gY2FuJ3QgZmluZCBhIHZhbGlkIHZhbHVlLCBsb29wY250PSVkIHN0b3AgY2FsaWJyYXRpbmciLAotCQkJCQkgIGxvb3BjbnQpKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCS8qIFdyaXRlIFJGX1IyNCB0byBwcm9ncmFtIGZpbHRlciAqLwotCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjI0LCBSRl9SMjRfVmFsdWUpOwotCQl9Ci0KLQkJaWYgKGNvdW50ID4gMCkgewotCQkJUkZfUjI0X1ZhbHVlID0gUkZfUjI0X1ZhbHVlIC0gKChjb3VudCkgPyAoMSkgOiAoMCkpOwotCQl9Ci0JCS8qIFN0b3JlIGZvciBmdXR1cmUgdXNhZ2UgKi8KLQkJaWYgKGxvb3BjbnQgPCAxMDApIHsKLQkJCWlmIChsb29wKysgPT0gMCkgewotCQkJCS8qQmFuZFdpZHRoID0gMjAgTUh6ICovCi0JCQkJcEFkLT5NbG1lLkNhbGlCVzIwUmZSMjQgPSAodTgpUkZfUjI0X1ZhbHVlOwotCQkJfSBlbHNlIHsKLQkJCQkvKkJhbmRXaWR0aCA9IDQwIE1IeiAqLwotCQkJCXBBZC0+TWxtZS5DYWxpQlc0MFJmUjI0ID0gKHU4KVJGX1IyNF9WYWx1ZTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfSBlbHNlCi0JCQlicmVhazsKLQotCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMjQsIFJGX1IyNF9WYWx1ZSk7Ci0KLQkJLyogcmVzZXQgY291bnQgKi8KLQkJY291bnQgPSAwOwotCX0gd2hpbGUgKFRSVUUpOwotCi0JLyogKi8KLQkvKiBTZXQgYmFjayB0byBpbml0aWFsIHN0YXRlICovCi0JLyogKi8KLQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IyNCwgMCk7Ci0KLQlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IyMiwgJnZhbHVlKTsKLQl2YWx1ZSAmPSB+KDB4MDEpOwotCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IyMiwgdmFsdWUpOwotCi0JLyogc2V0IEJCUCBiYWNrIHRvIEJXMjAgKi8KLQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsICZCQlBWYWx1ZSk7Ci0JQkJQVmFsdWUgJj0gKH4weDE4KTsKLQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCBCQlBWYWx1ZSk7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJICgiUlRNUEZpbHRlckNhbGlicmF0aW9uIC0gQ2FsaUJXMjBSZlIyND0weCV4LCBDYWxpQlc0MFJmUjI0PTB4JXhcbiIsCi0JCSAgcEFkLT5NbG1lLkNhbGlCVzIwUmZSMjQsIHBBZC0+TWxtZS5DYWxpQlc0MFJmUjI0KSk7Ci19Ci0KLS8qIGFkZCBieSBqb2hubGksIFJGIHBvd2VyIHNlcXVlbmNlIHNldHVwICovCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0KLQlMb2FkIFJGIG5vcm1hbCBvcGVyYXRpb24tbW9kZSBzZXR1cAotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotdm9pZCBSVDMweHhMb2FkUkZOb3JtYWxNb2RlU2V0dXAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCXU4IFJGVmFsdWU7Ci0KLQkvKiBSWDBfUEQgJiBUWDBfUEQsIFJGIFIxIHJlZ2lzdGVyIEJpdCAyICYgQml0IDMgdG8gMCBhbmQgUkZfQkxPQ0tfZW4sUlgxX1BEICYgVFgxX1BELCBCaXQwLCBCaXQgNCAmIEJpdDUgdG8gMSAqLwotCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjAxLCAmUkZWYWx1ZSk7Ci0JUkZWYWx1ZSA9IChSRlZhbHVlICYgKH4weDBDKSkgfCAweDMxOwotCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IwMSwgUkZWYWx1ZSk7Ci0KLQkvKiBUWF9MTzJfZW4sIFJGIFIxNSByZWdpc3RlciBCaXQgMyB0byAwICovCi0JUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMTUsICZSRlZhbHVlKTsKLQlSRlZhbHVlICY9ICh+MHgwOCk7Ci0JUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjE1LCBSRlZhbHVlKTsKLQotCS8qIG1vdmUgdG8gTklDSW5pdFJUMzB4eFJGUmVnaXN0ZXJzCi0JICAgLy8gVFhfTE8xX2VuLCBSRiBSMTcgcmVnaXN0ZXIgQml0IDMgdG8gMAotCSAgIFJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjE3LCAmUkZWYWx1ZSk7Ci0JICAgUkZWYWx1ZSAmPSAofjB4MDgpOwotCSAgIC8vIHRvIGZpeCByeCBsb25nIHJhbmdlIGlzc3VlCi0JICAgaWYgKCgocEFkLT5NQUNWZXJzaW9uICYgMHhmZmZmKSA+PSAweDAyMTEpICYmIChwQWQtPk5pY0NvbmZpZzIuZmllbGQuRXh0ZXJuYWxMTkFGb3JHID09IDApKQotCSAgIHsKLQkgICBSRlZhbHVlIHw9IDB4MjA7Ci0JICAgfQotCSAgIC8vIHNldCBSRl9SMTdfYml0WzI6MF0gZXF1YWwgdG8gRUVQUk9NIHNldHRpbmcgYXQgMHg0OGgKLQkgICBpZiAocEFkLT5UeE1peGVyR2FpbjI0RyA+PSAyKQotCSAgIHsKLQkgICBSRlZhbHVlICY9ICh+MHg3KTsgIC8vIGNsZWFuIGJpdCBbMjowXQotCSAgIFJGVmFsdWUgfD0gcEFkLT5UeE1peGVyR2FpbjI0RzsKLQkgICB9Ci0JICAgUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjE3LCBSRlZhbHVlKTsKLQkgKi8KLQotCS8qIFJYX0xPMV9lbiwgUkYgUjIwIHJlZ2lzdGVyIEJpdCAzIHRvIDAgKi8KLQlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IyMCwgJlJGVmFsdWUpOwotCVJGVmFsdWUgJj0gKH4weDA4KTsKLQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMjAsIFJGVmFsdWUpOwotCi0JLyogUlhfTE8yX2VuLCBSRiBSMjEgcmVnaXN0ZXIgQml0IDMgdG8gMCAqLwotCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjIxLCAmUkZWYWx1ZSk7Ci0JUkZWYWx1ZSAmPSAofjB4MDgpOwotCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IyMSwgUkZWYWx1ZSk7Ci0KLQkvKiBhZGQgYnkgam9obmxpLCByZXNldCBSRl9SMjcgd2hlbiBpbnRlcmZhY2UgZG93biAmIHVwIHRvIGZpeCB0aHJvdWdocHV0IHByb2JsZW0gKi8KLQkvKiBMRE9SRl9WQywgUkYgUjI3IHJlZ2lzdGVyIEJpdCAyIHRvIDAgKi8KLQlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IyNywgJlJGVmFsdWUpOwotCS8qIFRYIHRvIFJYIElRIGdsaXRjaChSRl9SMjcpIGhhcyBiZWVuIGZpeGVkIGluIFJUMzA3MChGKS4gKi8KLQkvKiBSYWlzaW5nIFJGIHZvbHRhZ2UgaXMgbm8gbG9uZ2VyIG5lZWRlZCBmb3IgUlQzMDcwKEYpICovCi0JaWYgKElTX1JUMzA5MChwQWQpKSB7CS8qIFJUMzA5eCBhbmQgUlQzMDcxLzcyICovCi0JCWlmICgocEFkLT5NQUNWZXJzaW9uICYgMHhmZmZmKSA8IDB4MDIxMSkKLQkJCVJGVmFsdWUgPSAoUkZWYWx1ZSAmICh+MHg3NykpIHwgMHgzOwotCQllbHNlCi0JCQlSRlZhbHVlID0gKFJGVmFsdWUgJiAofjB4NzcpKTsKLQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjI3LCBSRlZhbHVlKTsKLQl9Ci0JLyogZW5kIGpvaG5saSAqLwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0KLQlMb2FkIFJGIHNsZWVwLW1vZGUgc2V0dXAKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgUlQzMHh4TG9hZFJGU2xlZXBNb2RlU2V0dXAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCXU4IFJGVmFsdWU7Ci0JdTMyIE1BQ1ZhbHVlOwotCi0jaWZkZWYgUlRNUF9NQUNfVVNCCi0JaWYgKCFJU19SVDM1NzIocEFkKSkKLSNlbmRpZiAvKiBSVE1QX01BQ19VU0IgLy8gKi8KLQl7Ci0JCS8qIFJGX0JMT0NLX2VuLiBSRiBSMSByZWdpc3RlciBCaXQgMCB0byAwICovCi0JCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjAxLCAmUkZWYWx1ZSk7Ci0JCVJGVmFsdWUgJj0gKH4weDAxKTsKLQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjAxLCBSRlZhbHVlKTsKLQotCQkvKiBWQ09fSUMsIFJGIFI3IHJlZ2lzdGVyIEJpdCA0ICYgQml0IDUgdG8gMCAqLwotCQlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IwNywgJlJGVmFsdWUpOwotCQlSRlZhbHVlICY9ICh+MHgzMCk7Ci0JCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IwNywgUkZWYWx1ZSk7Ci0KLQkJLyogSWRvaCwgUkYgUjkgcmVnaXN0ZXIgQml0IDEsIEJpdCAyICYgQml0IDMgdG8gMCAqLwotCQlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IwOSwgJlJGVmFsdWUpOwotCQlSRlZhbHVlICY9ICh+MHgwRSk7Ci0JCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IwOSwgUkZWYWx1ZSk7Ci0KLQkJLyogUlhfQ1RCX2VuLCBSRiBSMjEgcmVnaXN0ZXIgQml0IDcgdG8gMCAqLwotCQlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IyMSwgJlJGVmFsdWUpOwotCQlSRlZhbHVlICY9ICh+MHg4MCk7Ci0JCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IyMSwgUkZWYWx1ZSk7Ci0JfQotCi0JaWYgKElTX1JUMzA5MChwQWQpIHx8CS8qIElTX1JUMzA5MCBpbmNsdWRpbmcgUlQzMDl4IGFuZCBSVDMwNzEvNzIgKi8KLQkgICAgSVNfUlQzNTcyKHBBZCkgfHwKLQkgICAgKElTX1JUMzA3MChwQWQpICYmICgocEFkLT5NQUNWZXJzaW9uICYgMHhmZmZmKSA8IDB4MDIwMSkpKSB7Ci0jaWZkZWYgUlRNUF9NQUNfVVNCCi0JCWlmICghSVNfUlQzNTcyKHBBZCkpCi0jZW5kaWYgLyogUlRNUF9NQUNfVVNCIC8vICovCi0JCXsKLQkJCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjI3LCAmUkZWYWx1ZSk7Ci0JCQlSRlZhbHVlIHw9IDB4Nzc7Ci0JCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMjcsIFJGVmFsdWUpOwotCQl9Ci0KLQkJUlRNUF9JT19SRUFEMzIocEFkLCBMRE9fQ0ZHMCwgJk1BQ1ZhbHVlKTsKLQkJTUFDVmFsdWUgfD0gMHgxRDAwMDAwMDsKLQkJUlRNUF9JT19XUklURTMyKHBBZCwgTERPX0NGRzAsIE1BQ1ZhbHVlKTsKLQl9Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQotCVJldmVyc2UgUkYgc2xlZXAtbW9kZSBzZXR1cAotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotdm9pZCBSVDMweHhSZXZlcnNlUkZTbGVlcE1vZGVTZXR1cChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0JdTggUkZWYWx1ZTsKLQl1MzIgTUFDVmFsdWU7Ci0KLSNpZmRlZiBSVE1QX01BQ19VU0IKLQlpZiAoIUlTX1JUMzU3MihwQWQpKQotI2VuZGlmIC8qIFJUTVBfTUFDX1VTQiAvLyAqLwotCXsKLQkJLyogUkZfQkxPQ0tfZW4sIFJGIFIxIHJlZ2lzdGVyIEJpdCAwIHRvIDEgKi8KLQkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMDEsICZSRlZhbHVlKTsKLQkJUkZWYWx1ZSB8PSAweDAxOwotCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMDEsIFJGVmFsdWUpOwotCi0JCS8qIFZDT19JQywgUkYgUjcgcmVnaXN0ZXIgQml0IDQgJiBCaXQgNSB0byAxICovCi0JCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjA3LCAmUkZWYWx1ZSk7Ci0JCVJGVmFsdWUgfD0gMHgyMDsKLQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjA3LCBSRlZhbHVlKTsKLQotCQkvKiBJZG9oLCBSRiBSOSByZWdpc3RlciBCaXQgMSwgQml0IDIgJiBCaXQgMyB0byAxICovCi0JCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjA5LCAmUkZWYWx1ZSk7Ci0JCVJGVmFsdWUgfD0gMHgwRTsKLQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjA5LCBSRlZhbHVlKTsKLQotCQkvKiBSWF9DVEJfZW4sIFJGIFIyMSByZWdpc3RlciBCaXQgNyB0byAxICovCi0JCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjIxLCAmUkZWYWx1ZSk7Ci0JCVJGVmFsdWUgfD0gMHg4MDsKLQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjIxLCBSRlZhbHVlKTsKLQl9Ci0KLQlpZiAoSVNfUlQzMDkwKHBBZCkgfHwJLyogSVNfUlQzMDkwIGluY2x1ZGluZyBSVDMwOXggYW5kIFJUMzA3MS83MiAqLwotCSAgICBJU19SVDM1NzIocEFkKSB8fAotCSAgICBJU19SVDMzOTAocEFkKSB8fAotCSAgICAoSVNfUlQzMDcwKHBBZCkgJiYgKChwQWQtPk1BQ1ZlcnNpb24gJiAweGZmZmYpIDwgMHgwMjAxKSkpIHsKLSNpZmRlZiBSVE1QX01BQ19VU0IKLQkJaWYgKCFJU19SVDM1NzIocEFkKSkKLSNlbmRpZiAvKiBSVE1QX01BQ19VU0IgLy8gKi8KLQkJewotCQkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMjcsICZSRlZhbHVlKTsKLQkJCWlmICgocEFkLT5NQUNWZXJzaW9uICYgMHhmZmZmKSA8IDB4MDIxMSkKLQkJCQlSRlZhbHVlID0gKFJGVmFsdWUgJiAofjB4NzcpKSB8IDB4MzsKLQkJCWVsc2UKLQkJCQlSRlZhbHVlID0gKFJGVmFsdWUgJiAofjB4NzcpKTsKLQkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IyNywgUkZWYWx1ZSk7Ci0JCX0KLQkJLyogUlQzMDcxIHZlcnNpb24gRSBoYXMgZml4ZWQgdGhpcyBpc3N1ZSAqLwotCQlpZiAoKHBBZC0+TmljQ29uZmlnMi5maWVsZC5EQUNUZXN0Qml0ID09IDEpCi0JCSAgICAmJiAoKHBBZC0+TUFDVmVyc2lvbiAmIDB4ZmZmZikgPCAweDAyMTEpKSB7Ci0JCQkvKiBwYXRjaCB0eCBFVk0gaXNzdWUgdGVtcG9yYXJpbHkgKi8KLQkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTERPX0NGRzAsICZNQUNWYWx1ZSk7Ci0JCQlNQUNWYWx1ZSA9ICgoTUFDVmFsdWUgJiAweEUwRkZGRkZGKSB8IDB4MEQwMDAwMDApOwotCQkJUlRNUF9JT19XUklURTMyKHBBZCwgTERPX0NGRzAsIE1BQ1ZhbHVlKTsKLQkJfSBlbHNlIHsKLQkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTERPX0NGRzAsICZNQUNWYWx1ZSk7Ci0JCQlNQUNWYWx1ZSA9ICgoTUFDVmFsdWUgJiAweEUwRkZGRkZGKSB8IDB4MDEwMDAwMDApOwotCQkJUlRNUF9JT19XUklURTMyKHBBZCwgTERPX0NGRzAsIE1BQ1ZhbHVlKTsKLQkJfQotCX0KLQotCWlmIChJU19SVDM1NzIocEFkKSkKLQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjA4LCAweDgwKTsKLX0KLQotLyogZW5kIGpvaG5saSAqLwotCi12b2lkIFJUMzB4eEhhbHRBY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCXUzMiBUeFBpbkNmZyA9IDB4MDAwNTBGMEY7Ci0KLQkvKiAqLwotCS8qIFR1cm4gb2ZmIExOQV9QRSBvciBUUlNXX1BPTCAqLwotCS8qICovCi0JaWYgKElTX1JUMzA3MChwQWQpIHx8IElTX1JUMzA3MShwQWQpIHx8IElTX1JUMzU3MihwQWQpKSB7Ci0JCWlmICgoSVNfUlQzMDcxKHBBZCkgfHwgSVNfUlQzNTcyKHBBZCkpCi0jaWZkZWYgUlRNUF9FRlVTRV9TVVBQT1JUCi0JCSAgICAmJiAocEFkLT5iVXNlRWZ1c2UpCi0jZW5kaWYgLyogUlRNUF9FRlVTRV9TVVBQT1JUIC8vICovCi0JCSAgICApIHsKLQkJCVR4UGluQ2ZnICY9IDB4RkZGQkYwRjA7CS8qIGJpdDE4IG9mZiAqLwotCQl9IGVsc2UgewotCQkJVHhQaW5DZmcgJj0gMHhGRkZGRjBGMDsKLQkJfQotCi0JCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX1BJTl9DRkcsIFR4UGluQ2ZnKTsKLQl9Ci19Ci0KLSNlbmRpZiAvKiBSVDMweHggLy8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY2hsaXN0LmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NobGlzdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjMxZTY5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY2hsaXN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLQlNb2R1bGUgTmFtZToKLQljaGxpc3QuYwotCi0JQWJzdHJhY3Q6Ci0KLQlSZXZpc2lvbiBIaXN0b3J5OgotCVdobyAgICAgICAgIFdoZW4gICAgICAgICAgV2hhdAotCS0tLS0tLS0tICAgIC0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCUZvbmNoaSBXdSAgIDIwMDctMTItMTkgICAgY3JlYXRlZAotKi8KLQotI2lmbmRlZiBfX0NITElTVF9IX18KLSNkZWZpbmUgX19DSExJU1RfSF9fCi0KLSNpbmNsdWRlICJydG1wX3R5cGUuaCIKLSNpbmNsdWRlICJydG1wX2RlZi5oIgotCi0jZGVmaW5lIE9ET1IJCQkwCi0jZGVmaW5lIElET1IJCQkxCi0jZGVmaW5lIEJPVEgJCQkyCi0KLSNkZWZpbmUgQkFORF81RyAgICAgICAgIDAKLSNkZWZpbmUgQkFORF8yNEcgICAgICAgIDEKLSNkZWZpbmUgQkFORF9CT1RIICAgICAgIDIKLQotc3RydWN0IHJ0X2NoX2Rlc3AgewotCXU4IEZpcnN0Q2hhbm5lbDsKLQl1OCBOdW1PZkNoOwotCWNoYXIgTWF4VHhQd3I7CQkvKiBkQm0gKi8KLQl1OCBHZW9ncmFwaHk7CS8qIDA6b3V0IGRvb3IsIDE6aW4gZG9vciwgMjpib3RoICovCi0JQk9PTEVBTiBEZnNSZXE7CQkvKiBEZnMgcmVxdWlyZSwgMDogTm8sIDE6IHllcy4gKi8KLX07Ci0KLXN0cnVjdCBydF9jaF9yZWdpb24gewotCXU4IENvdW50UmVnWzNdOwotCXU4IERmc1R5cGU7CQkvKiAwOiBDRSwgMTogRkNDLCAyOiBKQVAsIDM6SkFQX1c1MywgSkFQX1c1NiAqLwotCXN0cnVjdCBydF9jaF9kZXNwIENoRGVzcFsxMF07Ci19OwotCi1leHRlcm4gc3RydWN0IHJ0X2NoX3JlZ2lvbiBDaFJlZ2lvbltdOwotCi1zdHJ1Y3QgcnRfY2hfZnJlcV9tYXAgewotCXUxNiBjaGFubmVsOwotCXUxNiBmcmVxS0h6OwotfTsKLQotZXh0ZXJuIHN0cnVjdCBydF9jaF9mcmVxX21hcCBDSF9IWl9JRF9NQVBbXTsKLWV4dGVybiBpbnQgQ0hfSFpfSURfTUFQX05VTTsKLQotI2RlZmluZSAgICAgTUFQX0NIQU5ORUxfSURfVE9fS0haKF9jaCwgX2toeikJCVwKLQkJZG8gewkJCQkJCQlcCi0JCQlpbnQgX2NoSWR4OwkJCQkJXAotCQkJZm9yIChfY2hJZHggPSAwOyBfY2hJZHggPCBDSF9IWl9JRF9NQVBfTlVNOyBfY2hJZHgrKykge1wKLQkJCQlpZiAoKF9jaCkgPT0gQ0hfSFpfSURfTUFQW19jaElkeF0uY2hhbm5lbCkgeyBcCi0JCQkJCShfa2h6KSA9IENIX0haX0lEX01BUFtfY2hJZHhdLmZyZXFLSHogKiAxMDAwO1wKLQkJCQkJYnJlYWs7CQkJCVwKLQkJCQl9CQkJCQlcCi0JCQl9CQkJCQkJXAotCQkJaWYgKF9jaElkeCA9PSBDSF9IWl9JRF9NQVBfTlVNKQlcCi0JCQkJKF9raHopID0gMjQxMjAwMDsJCVwKLQkJfSB3aGlsZSAoMCkKLQotI2RlZmluZSAgICAgTUFQX0tIWl9UT19DSEFOTkVMX0lEKF9raHosIF9jaCkgICAgICAgICAgICAgICAgIFwKLQkJZG8gewkJCQkJCQlcCi0JCQlpbnQgX2NoSWR4OwkJCQlcCi0JCQlmb3IgKF9jaElkeCA9IDA7IF9jaElkeCA8IENIX0haX0lEX01BUF9OVU07IF9jaElkeCsrKSB7XAotCQkJCWlmICgoX2toeikgPT0gQ0hfSFpfSURfTUFQW19jaElkeF0uZnJlcUtIeikge1wKLQkJCQkJKF9jaCkgPSBDSF9IWl9JRF9NQVBbX2NoSWR4XS5jaGFubmVsOyBcCi0JCQkJCWJyZWFrOwkJCVwKLQkJCQl9CQkJCQlcCi0JCQl9CQkJCQkJXAotCQkJaWYgKF9jaElkeCA9PSBDSF9IWl9JRF9NQVBfTlVNKQkJCVwKLQkJCQkoX2NoKSA9IDE7CQkJCVwKLQkJfSB3aGlsZSAoMCkKLQotdm9pZCBCdWlsZENoYW5uZWxMaXN0RXgoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotdm9pZCBCdWlsZEJlYWNvbkNoTGlzdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgICAgICB1OCAqcEJ1ZiwgdW5zaWduZWQgbG9uZyAqcEJ1Zkxlbik7Ci0KLXZvaWQgTl9DaGFubmVsQ2hlY2soc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotdm9pZCBOX1NldENlbkNoKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLXU4IEdldEN1bnRyeU1heFR4UHdyKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggY2hhbm5lbCk7Ci0KLSNlbmRpZiAvKiBfX0NITElTVF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2FjdGlvbi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vYWN0aW9uLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YWQyMzYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vYWN0aW9uLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MDYgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSAgICBNb2R1bGUgTmFtZToKLQlhY3Rpb24uYwotCi0gICAgQWJzdHJhY3Q6Ci0gICAgSGFuZGxlIGFzc29jaWF0aW9uIHJlbGF0ZWQgcmVxdWVzdHMgZWl0aGVyIGZyb20gV1NUQSBvciBmcm9tIGxvY2FsIE1MTUUKLQotICAgIFJldmlzaW9uIEhpc3Rvcnk6Ci0gICAgV2hvICAgICAgICAgV2hlbiAgICAgICAgICBXaGF0Ci0gICAgLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JSmFuIExlZQkJMjAwNgkgIAljcmVhdGVkIGZvciBydDI4NjAKLSAqLwotCi0jaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCi0jaW5jbHVkZSAiYWN0aW9uLmgiCi0KLXN0YXRpYyB2b2lkIFJlc2VydmVkQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSk7Ci0KLS8qCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBEZXNjcmlwdGlvbjoKLSAgICAgICAgYXNzb2NpYXRpb24gc3RhdGUgbWFjaGluZSBpbml0LCBpbmNsdWRpbmcgc3RhdGUgdHJhbnNpdGlvbiBhbmQgdGltZXIgaW5pdAotICAgIFBhcmFtZXRlcnM6Ci0gICAgICAgIFMgLSBwb2ludGVyIHRvIHRoZSBhc3NvY2lhdGlvbiBzdGF0ZSBtYWNoaW5lCi0gICAgTm90ZToKLSAgICAgICAgVGhlIHN0YXRlIG1hY2hpbmUgbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU09DX0lETEUKLSAgICAgICAgTVQyX01MTUVfRElTQVNTT0NfUkVRICAgIG1sbWVfZGlzYXNzb2NfcmVxX2FjdGlvbgotICAgICAgICBNVDJfUEVFUl9ESVNBU1NPQ19SRVEgICAgcGVlcl9kaXNhc3NvY19hY3Rpb24KLSAgICAgICAgTVQyX1BFRVJfQVNTT0NfUkVRICAgICAgIGRyb3AKLSAgICAgICAgTVQyX1BFRVJfUkVBU1NPQ19SRVEgICAgIGRyb3AKLSAgICAgICAgTVQyX0NMUzNFUlIgICAgICAgICAgICAgIGNsczNlcnJfYWN0aW9uCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotdm9pZCBBY3Rpb25TdGF0ZU1hY2hpbmVJbml0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICBzdHJ1Y3QgcnRfc3RhdGVfbWFjaGluZSAqUywKLQkJCSAgICBPVVQgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pCi17Ci0JU3RhdGVNYWNoaW5lSW5pdChTLCAoU1RBVEVfTUFDSElORV9GVU5DICopIFRyYW5zLCBNQVhfQUNUX1NUQVRFLAotCQkJIE1BWF9BQ1RfTVNHLCAoU1RBVEVfTUFDSElORV9GVU5DKSBEcm9wLCBBQ1RfSURMRSwKLQkJCSBBQ1RfTUFDSElORV9CQVNFKTsKLQotCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBQ1RfSURMRSwgTVQyX1BFRVJfU1BFQ1RSVU1fQ0FURSwKLQkJCSAgICAgIChTVEFURV9NQUNISU5FX0ZVTkMpIFBlZXJTcGVjdHJ1bUFjdGlvbik7Ci0JU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFDVF9JRExFLCBNVDJfUEVFUl9RT1NfQ0FURSwKLQkJCSAgICAgIChTVEFURV9NQUNISU5FX0ZVTkMpIFBlZXJRT1NBY3Rpb24pOwotCi0JU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFDVF9JRExFLCBNVDJfUEVFUl9ETFNfQ0FURSwKLQkJCSAgICAgIChTVEFURV9NQUNISU5FX0ZVTkMpIFJlc2VydmVkQWN0aW9uKTsKLQotCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBQ1RfSURMRSwgTVQyX1BFRVJfQkFfQ0FURSwKLQkJCSAgICAgIChTVEFURV9NQUNISU5FX0ZVTkMpIFBlZXJCQUFjdGlvbik7Ci0JU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFDVF9JRExFLCBNVDJfUEVFUl9IVF9DQVRFLAotCQkJICAgICAgKFNUQVRFX01BQ0hJTkVfRlVOQykgUGVlckhUQWN0aW9uKTsKLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQUNUX0lETEUsIE1UMl9NTE1FX0FERF9CQV9DQVRFLAotCQkJICAgICAgKFNUQVRFX01BQ0hJTkVfRlVOQykgTWxtZUFEREJBQWN0aW9uKTsKLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQUNUX0lETEUsIE1UMl9NTE1FX09SSV9ERUxCQV9DQVRFLAotCQkJICAgICAgKFNUQVRFX01BQ0hJTkVfRlVOQykgTWxtZURFTEJBQWN0aW9uKTsKLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQUNUX0lETEUsIE1UMl9NTE1FX1JFQ19ERUxCQV9DQVRFLAotCQkJICAgICAgKFNUQVRFX01BQ0hJTkVfRlVOQykgTWxtZURFTEJBQWN0aW9uKTsKLQotCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBQ1RfSURMRSwgTVQyX1BFRVJfUFVCTElDX0NBVEUsCi0JCQkgICAgICAoU1RBVEVfTUFDSElORV9GVU5DKSBQZWVyUHVibGljQWN0aW9uKTsKLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQUNUX0lETEUsIE1UMl9QRUVSX1JNX0NBVEUsCi0JCQkgICAgICAoU1RBVEVfTUFDSElORV9GVU5DKSBQZWVyUk1BY3Rpb24pOwotCi0JU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFDVF9JRExFLCBNVDJfTUxNRV9RT1NfQ0FURSwKLQkJCSAgICAgIChTVEFURV9NQUNISU5FX0ZVTkMpIE1sbWVRT1NBY3Rpb24pOwotCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBQ1RfSURMRSwgTVQyX01MTUVfRExTX0NBVEUsCi0JCQkgICAgICAoU1RBVEVfTUFDSElORV9GVU5DKSBNbG1lRExTQWN0aW9uKTsKLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQUNUX0lETEUsIE1UMl9BQ1RfSU5WQUxJRCwKLQkJCSAgICAgIChTVEFURV9NQUNISU5FX0ZVTkMpIE1sbWVJbnZhbGlkQWN0aW9uKTsKLX0KLQotdm9pZCBNbG1lQUREQkFBY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKQotewotCXN0cnVjdCBydF9tbG1lX2FkZGJhX3JlcSAqcEluZm87Ci0JdTggQWRkcls2XTsKLQl1OCAqcE91dEJ1ZmZlciA9IE5VTEw7Ci0JaW50IE5TdGF0dXM7Ci0JdW5zaWduZWQgbG9uZyBJZHg7Ci0Jc3RydWN0IHJ0X2ZyYW1lX2FkZGJhX3JlcSBGcmFtZTsKLQl1bnNpZ25lZCBsb25nIEZyYW1lTGVuOwotCXN0cnVjdCBydF9iYV9vcmlfZW50cnkgKnBCQUVudHJ5ID0gTlVMTDsKLQotCXBJbmZvID0gKHN0cnVjdCBydF9tbG1lX2FkZGJhX3JlcSAqKUVsZW0tPk1zZzsKLQlOZGlzWmVyb01lbW9yeSgmRnJhbWUsIHNpemVvZihzdHJ1Y3QgcnRfZnJhbWVfYWRkYmFfcmVxKSk7Ci0KLQlpZiAoTWxtZUFkZEJBUmVxU2FuaXR5KHBBZCwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4sIEFkZHIpKSB7Ci0JCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7CS8qR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkgKi8KLQkJaWYgKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykgewotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiQkEgLSBNbG1lQUREQkFBY3Rpb24oKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIFxuIikpOwotCQkJcmV0dXJuOwotCQl9Ci0JCS8qIDEuIGZpbmQgZW50cnkgKi8KLQkJSWR4ID0KLQkJICAgIHBBZC0+TWFjVGFiLkNvbnRlbnRbcEluZm8tPldjaWRdLkJBT3JpV2NpZEFycmF5W3BJbmZvLT5USURdOwotCQlpZiAoSWR4ID09IDApIHsKLQkJCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCQkgKCJCQSAtIE1sbWVBRERCQUFjdGlvbigpIGNhbid0IGZpbmQgQkFPcmlFbnRyeSBcbiIpKTsKLQkJCXJldHVybjsKLQkJfSBlbHNlIHsKLQkJCXBCQUVudHJ5ID0gJnBBZC0+QkFUYWJsZS5CQU9yaUVudHJ5W0lkeF07Ci0JCX0KLQotCQl7Ci0JCQlpZiAoQURIT0NfT04ocEFkKSkKLQkJCQlBY3RIZWFkZXJJbml0KHBBZCwgJkZyYW1lLkhkciwgcEluZm8tPnBBZGRyLAotCQkJCQkgICAgICBwQWQtPkN1cnJlbnRBZGRyZXNzLAotCQkJCQkgICAgICBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7Ci0JCQllbHNlCi0JCQkJQWN0SGVhZGVySW5pdChwQWQsICZGcmFtZS5IZHIsCi0JCQkJCSAgICAgIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLAotCQkJCQkgICAgICBwQWQtPkN1cnJlbnRBZGRyZXNzLAotCQkJCQkgICAgICBwSW5mby0+cEFkZHIpOwotCQl9Ci0KLQkJRnJhbWUuQ2F0ZWdvcnkgPSBDQVRFR09SWV9CQTsKLQkJRnJhbWUuQWN0aW9uID0gQUREQkFfUkVROwotCQlGcmFtZS5CYVBhcm0uQU1TRFVTdXBwb3J0ZWQgPSAwOwotCQlGcmFtZS5CYVBhcm0uQkFQb2xpY3kgPSBJTU1FRF9CQTsKLQkJRnJhbWUuQmFQYXJtLlRJRCA9IHBJbmZvLT5USUQ7Ci0JCUZyYW1lLkJhUGFybS5CdWZTaXplID0gcEluZm8tPkJhQnVmU2l6ZTsKLQkJRnJhbWUuVG9rZW4gPSBwSW5mby0+VG9rZW47Ci0JCUZyYW1lLlRpbWVPdXRWYWx1ZSA9IHBJbmZvLT5UaW1lT3V0VmFsdWU7Ci0JCUZyYW1lLkJhU3RhcnRTZXEuZmllbGQuRnJhZ051bSA9IDA7Ci0JCUZyYW1lLkJhU3RhcnRTZXEuZmllbGQuU3RhcnRTZXEgPQotCQkgICAgcEFkLT5NYWNUYWIuQ29udGVudFtwSW5mby0+V2NpZF0uVHhTZXFbcEluZm8tPlRJRF07Ci0KLQkJKih1MTYgKikgKCZGcmFtZS5CYVBhcm0pID0KLQkJICAgIGNwdTJsZTE2KCoodTE2ICopICgmRnJhbWUuQmFQYXJtKSk7Ci0JCUZyYW1lLlRpbWVPdXRWYWx1ZSA9IGNwdTJsZTE2KEZyYW1lLlRpbWVPdXRWYWx1ZSk7Ci0JCUZyYW1lLkJhU3RhcnRTZXEud29yZCA9IGNwdTJsZTE2KEZyYW1lLkJhU3RhcnRTZXEud29yZCk7Ci0KLQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwgJkZyYW1lTGVuLAotCQkJCSAgc2l6ZW9mKHN0cnVjdCBydF9mcmFtZV9hZGRiYV9yZXEpLCAmRnJhbWUsIEVORF9PRl9BUkdTKTsKLQotCQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsCi0JCQkJICAoTUdNVF9VU0VfUVVFVUVfRkxBRyB8Ci0JCQkJICAgTWFwVXNlclByaW9yaXR5VG9BY2Nlc3NDYXRlZ29yeVtwSW5mby0+VElEXSksCi0JCQkJICBwT3V0QnVmZmVyLCBGcmFtZUxlbik7Ci0KLQkJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKLQotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIkJBIC0gU2VuZCBBRERCQSByZXF1ZXN0LiBTdGFydFNlcSA9ICV4LCAgRnJhbWVMZW4gPSAlbGQuIEJ1ZlNpemUgPSAlZFxuIiwKLQkJCSAgRnJhbWUuQmFTdGFydFNlcS5maWVsZC5TdGFydFNlcSwgRnJhbWVMZW4sCi0JCQkgIEZyYW1lLkJhUGFybS5CdWZTaXplKSk7Ci0JfQotfQotCi0vKgotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgRGVzY3JpcHRpb246Ci0gICAgICAgIHNlbmQgREVMQkEgYW5kIGRlbGV0ZSBCYUVudHJ5IGlmIGFueQotICAgIFBhcmFtZXRyczoKLSAgICAgICAgRWxlbSAtIE1MTUUgbWVzc2FnZSBzdHJ1Y3QgcnRfbWxtZV9kZWxiYV9yZXEKLQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotdm9pZCBNbG1lREVMQkFBY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKQotewotCXN0cnVjdCBydF9tbG1lX2RlbGJhX3JlcSAqcEluZm87Ci0JdTggKnBPdXRCdWZmZXIgPSBOVUxMOwotCXU4ICpwT3V0QnVmZmVyMiA9IE5VTEw7Ci0JaW50IE5TdGF0dXM7Ci0JdW5zaWduZWQgbG9uZyBJZHg7Ci0Jc3RydWN0IHJ0X2ZyYW1lX2RlbGJhX3JlcSBGcmFtZTsKLQl1bnNpZ25lZCBsb25nIEZyYW1lTGVuOwotCXN0cnVjdCBydF9mcmFtZV9iYXIgRnJhbWVCYXI7Ci0KLQlwSW5mbyA9IChzdHJ1Y3QgcnRfbWxtZV9kZWxiYV9yZXEgKilFbGVtLT5Nc2c7Ci0JLyogbXVzdCBzZW5kIGJhY2sgREVMQkEgKi8KLQlOZGlzWmVyb01lbW9yeSgmRnJhbWUsIHNpemVvZihzdHJ1Y3QgcnRfZnJhbWVfZGVsYmFfcmVxKSk7Ci0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIj09PiBNbG1lREVMQkFBY3Rpb24oKSwgSW5pdGlhdG9yKCVkKSBcbiIsIHBJbmZvLT5Jbml0aWF0b3IpKTsKLQotCWlmIChNbG1lRGVsQkFSZXFTYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbikpIHsKLQkJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsJLypHZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeSAqLwotCQlpZiAoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKSB7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCQkgKCJCQSAtIE1sbWVERUxCQUFjdGlvbigpIGFsbG9jYXRlIG1lbW9yeSBmYWlsZWQgMS4gXG4iKSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIyKTsJLypHZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeSAqLwotCQlpZiAoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKSB7Ci0JCQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOwotCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkJICgiQkEgLSBNbG1lREVMQkFBY3Rpb24oKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIDIuIFxuIikpOwotCQkJcmV0dXJuOwotCQl9Ci0JCS8qIFNFTkQgQkFSIChTZW5kIEJBUiB0byByZWZyZXNoIHBlZXIgcmVvcmRlcmluZyBidWZmZXIuKSAqLwotCQlJZHggPQotCQkgICAgcEFkLT5NYWNUYWIuQ29udGVudFtwSW5mby0+V2NpZF0uQkFPcmlXY2lkQXJyYXlbcEluZm8tPlRJRF07Ci0KLQkJQmFySGVhZGVySW5pdChwQWQsICZGcmFtZUJhciwKLQkJCSAgICAgIHBBZC0+TWFjVGFiLkNvbnRlbnRbcEluZm8tPldjaWRdLkFkZHIsCi0JCQkgICAgICBwQWQtPkN1cnJlbnRBZGRyZXNzKTsKLQotCQlGcmFtZUJhci5TdGFydGluZ1NlcS5maWVsZC5GcmFnTnVtID0gMDsJLyogbWFrZSBzdXJlIHNlcXVlbmNlIG5vdCBjbGVhciBpbiBERUwgZnVuY2l0b24uICovCi0JCUZyYW1lQmFyLlN0YXJ0aW5nU2VxLmZpZWxkLlN0YXJ0U2VxID0gcEFkLT5NYWNUYWIuQ29udGVudFtwSW5mby0+V2NpZF0uVHhTZXFbcEluZm8tPlRJRF07CS8qIG1ha2Ugc3VyZSBzZXF1ZW5jZSBub3QgY2xlYXIgaW4gREVMIGZ1bmNpdG9uLiAqLwotCQlGcmFtZUJhci5CYXJDb250cm9sLlRJRCA9IHBJbmZvLT5USUQ7CS8qIG1ha2Ugc3VyZSBzZXF1ZW5jZSBub3QgY2xlYXIgaW4gREVMIGZ1bmNpdG9uLiAqLwotCQlGcmFtZUJhci5CYXJDb250cm9sLkFDS1BvbGljeSA9IElNTUVEX0JBOwkvKiBtYWtlIHN1cmUgc2VxdWVuY2Ugbm90IGNsZWFyIGluIERFTCBmdW5jaXRvbi4gKi8KLQkJRnJhbWVCYXIuQmFyQ29udHJvbC5Db21wcmVzc2VkID0gMTsJLyogbWFrZSBzdXJlIHNlcXVlbmNlIG5vdCBjbGVhciBpbiBERUwgZnVuY2l0b24uICovCi0JCUZyYW1lQmFyLkJhckNvbnRyb2wuTVRJRCA9IDA7CS8qIG1ha2Ugc3VyZSBzZXF1ZW5jZSBub3QgY2xlYXIgaW4gREVMIGZ1bmNpdG9uLiAqLwotCi0JCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIyLCAmRnJhbWVMZW4sCi0JCQkJICBzaXplb2Yoc3RydWN0IHJ0X2ZyYW1lX2JhciksICZGcmFtZUJhciwgRU5EX09GX0FSR1MpOwotCQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIFFJRF9BQ19CRSwgcE91dEJ1ZmZlcjIsIEZyYW1lTGVuKTsKLQkJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyMik7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiQkEgLSBNbG1lREVMQkFBY3Rpb24oKSAuIFNlbmQgQkFSIHRvIHJlZnJlc2ggcGVlciByZW9yZGVyaW5nIGJ1ZmZlciBcbiIpKTsKLQotCQkvKiBTRU5EIERFTEJBIEZSQU1FICovCi0JCUZyYW1lTGVuID0gMDsKLQotCQl7Ci0JCQlpZiAoQURIT0NfT04ocEFkKSkKLQkJCQlBY3RIZWFkZXJJbml0KHBBZCwgJkZyYW1lLkhkciwKLQkJCQkJICAgICAgcEFkLT5NYWNUYWIuQ29udGVudFtwSW5mby0+V2NpZF0uCi0JCQkJCSAgICAgIEFkZHIsIHBBZC0+Q3VycmVudEFkZHJlc3MsCi0JCQkJCSAgICAgIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKLQkJCWVsc2UKLQkJCQlBY3RIZWFkZXJJbml0KHBBZCwgJkZyYW1lLkhkciwKLQkJCQkJICAgICAgcEFkLT5Db21tb25DZmcuQnNzaWQsCi0JCQkJCSAgICAgIHBBZC0+Q3VycmVudEFkZHJlc3MsCi0JCQkJCSAgICAgIHBBZC0+TWFjVGFiLkNvbnRlbnRbcEluZm8tPldjaWRdLgotCQkJCQkgICAgICBBZGRyKTsKLQkJfQotCi0JCUZyYW1lLkNhdGVnb3J5ID0gQ0FURUdPUllfQkE7Ci0JCUZyYW1lLkFjdGlvbiA9IERFTEJBOwotCQlGcmFtZS5EZWxiYVBhcm0uSW5pdGlhdG9yID0gcEluZm8tPkluaXRpYXRvcjsKLQkJRnJhbWUuRGVsYmFQYXJtLlRJRCA9IHBJbmZvLT5USUQ7Ci0JCUZyYW1lLlJlYXNvbkNvZGUgPSAzOTsJLyogVGltZSBPdXQgKi8KLQkJKih1MTYgKikgKCZGcmFtZS5EZWxiYVBhcm0pID0KLQkJICAgIGNwdTJsZTE2KCoodTE2ICopICgmRnJhbWUuRGVsYmFQYXJtKSk7Ci0JCUZyYW1lLlJlYXNvbkNvZGUgPSBjcHUybGUxNihGcmFtZS5SZWFzb25Db2RlKTsKLQotCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAmRnJhbWVMZW4sCi0JCQkJICBzaXplb2Yoc3RydWN0IHJ0X2ZyYW1lX2RlbGJhX3JlcSksICZGcmFtZSwgRU5EX09GX0FSR1MpOwotCQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIFFJRF9BQ19CRSwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOwotCQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOwotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIkJBIC0gTWxtZURFTEJBQWN0aW9uKCkgLiAzIERFTEJBIHNlbnQuIEluaXRpYXRvciglZClcbiIsCi0JCQkgIHBJbmZvLT5Jbml0aWF0b3IpKTsKLQl9Ci19Ci0KLXZvaWQgTWxtZVFPU0FjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pCi17Ci19Ci0KLXZvaWQgTWxtZURMU0FjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pCi17Ci19Ci0KLXZvaWQgTWxtZUludmFsaWRBY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKQotewotCS8qdTggKiAgICAgICAgICAgICAgICAgIHBPdXRCdWZmZXIgPSBOVUxMOyAqLwotCS8qUmV0dXJuIHRoZSByZWNlaXZpbmcgZnJhbWUgZXhjZXB0IHRoZSBNU0Igb2YgY2F0ZWdvcnkgZmlsZWQgc2V0IHRvIDEuICA3LjMuMS4xMSAqLwotfQotCi12b2lkIFBlZXJRT1NBY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKQotewotfQotCi12b2lkIFBlZXJCQUFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pCi17Ci0JdTggQWN0aW9uID0gRWxlbS0+TXNnW0xFTkdUSF84MDJfMTEgKyAxXTsKLQotCXN3aXRjaCAoQWN0aW9uKSB7Ci0JY2FzZSBBRERCQV9SRVE6Ci0JCVBlZXJBZGRCQVJlcUFjdGlvbihwQWQsIEVsZW0pOwotCQlicmVhazsKLQljYXNlIEFEREJBX1JFU1A6Ci0JCVBlZXJBZGRCQVJzcEFjdGlvbihwQWQsIEVsZW0pOwotCQlicmVhazsKLQljYXNlIERFTEJBOgotCQlQZWVyRGVsQkFBY3Rpb24ocEFkLCBFbGVtKTsKLQkJYnJlYWs7Ci0JfQotfQotCi12b2lkIFBlZXJQdWJsaWNBY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKQotewotCWlmIChFbGVtLT5XY2lkID49IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKQotCQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIFJlc2VydmVkQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSkKLXsKLQl1OCBDYXRlZ29yeTsKLQotCWlmIChFbGVtLT5Nc2dMZW4gPD0gTEVOR1RIXzgwMl8xMSkgewotCQlyZXR1cm47Ci0JfQotCi0JQ2F0ZWdvcnkgPSBFbGVtLT5Nc2dbTEVOR1RIXzgwMl8xMV07Ci0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIlJjdiByZXNlcnZlZCBjYXRlZ29yeSglZCkgQWN0aW9uIEZyYW1lXG4iLCBDYXRlZ29yeSkpOwotCWhleF9kdW1wKCJSZXNlcnZlZCBBY3Rpb24gRnJhbWUiLCAmRWxlbS0+TXNnWzBdLCBFbGVtLT5Nc2dMZW4pOwotfQotCi12b2lkIFBlZXJSTUFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pCi17Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCByZXNwb25kX2h0X2luZm9ybWF0aW9uX2V4Y2hhbmdlX2FjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJCQkgICBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKQotewotCXU4ICpwT3V0QnVmZmVyID0gTlVMTDsKLQlpbnQgTlN0YXR1czsKLQl1bnNpZ25lZCBsb25nIEZyYW1lTGVuOwotCXN0cnVjdCBydF9mcmFtZV9odF9pbmZvIEhUSU5GT2ZyYW1lLCAqcEZyYW1lOwotCXU4ICpwQWRkcjsKLQotCS8qIDIuIEFsd2F5cyBzZW5kIGJhY2sgQUREQkEgUmVzcG9uc2UgKi8KLQlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOwkvKkdldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5ICovCi0KLQlpZiAoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiQUNUSU9OIC0gcmVzcG9uZF9odF9pbmZvcm1hdGlvbl9leGNoYW5nZV9hY3Rpb24oKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIFxuIikpOwotCQlyZXR1cm47Ci0JfQotCS8qIGdldCBSQSAqLwotCXBGcmFtZSA9IChzdHJ1Y3QgcnRfZnJhbWVfaHRfaW5mbyAqKSAmIEVsZW0tPk1zZ1swXTsKLQlwQWRkciA9IHBGcmFtZS0+SGRyLkFkZHIyOwotCi0JTmRpc1plcm9NZW1vcnkoJkhUSU5GT2ZyYW1lLCBzaXplb2Yoc3RydWN0IHJ0X2ZyYW1lX2h0X2luZm8pKTsKLQkvKiAyLTEuIFByZXBhcmUgQUREQkEgUmVzcG9uc2UgZnJhbWUuICovCi0JewotCQlpZiAoQURIT0NfT04ocEFkKSkKLQkJCUFjdEhlYWRlckluaXQocEFkLCAmSFRJTkZPZnJhbWUuSGRyLCBwQWRkciwKLQkJCQkgICAgICBwQWQtPkN1cnJlbnRBZGRyZXNzLAotCQkJCSAgICAgIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKLQkJZWxzZQotCQkJQWN0SGVhZGVySW5pdChwQWQsICZIVElORk9mcmFtZS5IZHIsCi0JCQkJICAgICAgcEFkLT5Db21tb25DZmcuQnNzaWQsIHBBZC0+Q3VycmVudEFkZHJlc3MsCi0JCQkJICAgICAgcEFkZHIpOwotCX0KLQotCUhUSU5GT2ZyYW1lLkNhdGVnb3J5ID0gQ0FURUdPUllfSFQ7Ci0JSFRJTkZPZnJhbWUuQWN0aW9uID0gSFRfSU5GT19FWENIQU5HRTsKLQlIVElORk9mcmFtZS5IVF9JbmZvLlJlcXVlc3QgPSAwOwotCUhUSU5GT2ZyYW1lLkhUX0luZm8uRm9ydHlfTUh6X0ludG9sZXJhbnQgPQotCSAgICBwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkZvcnR5X01oel9JbnRvbGVyYW50OwotCUhUSU5GT2ZyYW1lLkhUX0luZm8uU1RBX0NoYW5uZWxfV2lkdGggPQotCSAgICBwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8uQWRkSHRJbmZvLlJlY29tV2lkdGg7Ci0KLQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAmRnJhbWVMZW4sCi0JCQkgIHNpemVvZihzdHJ1Y3QgcnRfZnJhbWVfaHRfaW5mbyksICZIVElORk9mcmFtZSwgRU5EX09GX0FSR1MpOwotCi0JTWluaXBvcnRNTVJlcXVlc3QocEFkLCBRSURfQUNfQkUsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKLQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOwotfQotCi12b2lkIFBlZXJIVEFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pCi17Ci0JdTggQWN0aW9uID0gRWxlbS0+TXNnW0xFTkdUSF84MDJfMTEgKyAxXTsKLQotCWlmIChFbGVtLT5XY2lkID49IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKQotCQlyZXR1cm47Ci0KLQlzd2l0Y2ggKEFjdGlvbikgewotCWNhc2UgTk9USUZZX0JXX0FDVElPTjoKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJBQ1RJT04gLSBIVCBOb3RpZnkgQ2hhbm5lbCBiYW5kd2lkdGggYWN0aW9uLS0tLT4gXG4iKSk7Ci0KLQkJaWYgKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uYkh0RW5hYmxlID09IEZBTFNFKSB7Ci0JCQkvKiBOb3RlLCB0aGlzIGlzIHRvIHBhdGNoIERJUi0xMzUzIEFQLiBXaGVuIHRoZSBBUCBzZXQgdG8gV2VwLCBpdCB3aWxsIHVzZSBsZWdhY3kgbW9kZS4gQnV0IEFQIHN0aWxsIGtlZXBzICovCi0JCQkvKiBzZW5kaW5nIEJXX05vdGlmeSBBY3Rpb24gZnJhbWUsIGFuZCBjYXVzZSB1cyB0byBsaW5rdXAgYW5kIGxpbmtkb3duLiAqLwotCQkJLyogSW4gbGVnYWN5IG1vZGUsIGRvbid0IG5lZWQgdG8gcGFyc2UgSFQgYWN0aW9uIGZyYW1lLiAqLwotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiQUNUSU9OIC1JZ25vcmUgSFQgTm90aWZ5IENoYW5uZWwgQlcgd2hlbiBsaW5rIGFzIGxlZ2FjeSBtb2RlLiBCVyA9ICVkLS0tPiBcbiIsCi0JCQkJICBFbGVtLT5Nc2dbTEVOR1RIXzgwMl8xMSArIDJdKSk7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChFbGVtLT5Nc2dbTEVOR1RIXzgwMl8xMSArIDJdID09IDApCS8qIDcuNC44LjIuIGlmIHZhbHVlIGlzIDEsIGtlZXAgdGhlIHNhbWUgYXMgc3VwcG9ydGVkIGNoYW5uZWwgYmFuZHdpZHRoLiAqLwotCQkJcEFkLT5NYWNUYWIuQ29udGVudFtFbGVtLT5XY2lkXS5IVFBoeU1vZGUuZmllbGQuQlcgPSAwOwotCi0JCWJyZWFrOwotCWNhc2UgU01QU19BQ1RJT046Ci0JCS8qIDcuMy4xLjI1ICovCi0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFDVElPTiAtIFNNUFMgYWN0aW9uLS0tLT4gXG4iKSk7Ci0JCWlmICgoKEVsZW0tPk1zZ1tMRU5HVEhfODAyXzExICsgMl0gJiAweDEpID09IDApKSB7Ci0JCQlwQWQtPk1hY1RhYi5Db250ZW50W0VsZW0tPldjaWRdLk1tcHNNb2RlID0gTU1QU19FTkFCTEU7Ci0JCX0gZWxzZSBpZiAoKChFbGVtLT5Nc2dbTEVOR1RIXzgwMl8xMSArIDJdICYgMHgyKSA9PSAwKSkgewotCQkJcEFkLT5NYWNUYWIuQ29udGVudFtFbGVtLT5XY2lkXS5NbXBzTW9kZSA9IE1NUFNfU1RBVElDOwotCQl9IGVsc2UgewotCQkJcEFkLT5NYWNUYWIuQ29udGVudFtFbGVtLT5XY2lkXS5NbXBzTW9kZSA9IE1NUFNfRFlOQU1JQzsKLQkJfQotCi0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiQWlkKCVkKSBNSU1PIFBTID0gJWRcbiIsIEVsZW0tPldjaWQsCi0JCQkgIHBBZC0+TWFjVGFiLkNvbnRlbnRbRWxlbS0+V2NpZF0uTW1wc01vZGUpKTsKLQkJLyogcnQyODYwYyA6IGFkZCBzb21ldGhpbmcgZm9yIHNtcHMgY2hhbmdlLiAqLwotCQlicmVhazsKLQotCWNhc2UgU0VUUENPX0FDVElPTjoKLQkJYnJlYWs7Ci0JY2FzZSBNSU1PX0NIQV9NRUFTVVJFX0FDVElPTjoKLQkJYnJlYWs7Ci0JY2FzZSBIVF9JTkZPX0VYQ0hBTkdFOgotCQl7Ci0JCQlzdHJ1Y3QgcnRfaHRfaW5mb3JtYXRpb25fb2N0ZXQgKnBIVF9pbmZvOwotCi0JCQlwSFRfaW5mbyA9Ci0JCQkgICAgKHN0cnVjdCBydF9odF9pbmZvcm1hdGlvbl9vY3RldCAqKSAmIEVsZW0tPk1zZ1tMRU5HVEhfODAyXzExICsKLQkJCQkJCQkJIDJdOwotCQkJLyogNy40LjguMTAgKi8KLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAoIkFDVElPTiAtIEhUIEluZm9ybWF0aW9uIEV4Y2hhbmdlIGFjdGlvbi0tLS0+IFxuIikpOwotCQkJaWYgKHBIVF9pbmZvLT5SZXF1ZXN0KSB7Ci0JCQkJcmVzcG9uZF9odF9pbmZvcm1hdGlvbl9leGNoYW5nZV9hY3Rpb24ocEFkLAotCQkJCQkJCQkgICAgICAgRWxlbSk7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JfQotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JCVJldHJ5IHNlbmRpbmcgQUREQkEgUmVxZXN0LgotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQlQYXJhbWV0cnM6Ci0JcDgwMjNIZWFkZXI6IGlmIHRoaXMgaXMgYWxyZWFkeSA4MDIuMyBmb3JtYXQsIHA4MDIzSGVhZGVyIGlzIE5VTEwKLQotCVJldHVybgk6IFRSVUUgaWYgcHV0IGludG8gcnggcmVvcmRlcmluZyBidWZmZXIsIHNob3VsZG4ndCBpbmRpY2F0ZXJ4aGVyZS4KLQkJCQlGQUxTRSAsIHRoZW4gY29udGludWUgaW5kaWNhdGVyeCBhdCB0aGlzIG1vbWVudC4KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi12b2lkIE9SSUJBVGltZXJUaW1lb3V0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwRW50cnk7Ci0JaW50IGksIHRvdGFsOwotCXU4IFRJRDsKLQotCXRvdGFsID0gcEFkLT5NYWNUYWIuU2l6ZSAqIE5VTV9PRl9USUQ7Ci0KLQlmb3IgKGkgPSAxOyAoKGkgPCBNQVhfTEVOX09GX0JBX09SSV9UQUJMRSkgJiYgKHRvdGFsID4gMCkpOyBpKyspIHsKLQkJaWYgKHBBZC0+QkFUYWJsZS5CQU9yaUVudHJ5W2ldLk9SSV9CQV9TdGF0dXMgPT0gT3JpZ2luYXRvcl9Eb25lKSB7Ci0JCQlwRW50cnkgPQotCQkJICAgICZwQWQtPk1hY1RhYi5Db250ZW50W3BBZC0+QkFUYWJsZS5CQU9yaUVudHJ5W2ldLgotCQkJCQkJIFdjaWRdOwotCQkJVElEID0gcEFkLT5CQVRhYmxlLkJBT3JpRW50cnlbaV0uVElEOwotCi0JCQlBU1NFUlQocEFkLT5CQVRhYmxlLkJBT3JpRW50cnlbaV0uV2NpZCA8Ci0JCQkgICAgICAgTUFYX0xFTl9PRl9NQUNfVEFCTEUpOwotCQl9Ci0JCXRvdGFsLS07Ci0JfQotfQotCi12b2lkIFNlbmRSZWZyZXNoQkFSKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcEVudHJ5KQotewotCXN0cnVjdCBydF9mcmFtZV9iYXIgRnJhbWVCYXI7Ci0JdW5zaWduZWQgbG9uZyBGcmFtZUxlbjsKLQlpbnQgTlN0YXR1czsKLQl1OCAqcE91dEJ1ZmZlciA9IE5VTEw7Ci0JdTE2IFNlcXVlbmNlOwotCXU4IGksIFRJRDsKLQl1MTYgaWR4OwotCXN0cnVjdCBydF9iYV9vcmlfZW50cnkgKnBCQUVudHJ5OwotCi0JZm9yIChpID0gMDsgaSA8IE5VTV9PRl9USUQ7IGkrKykgewotCQlpZHggPSBwRW50cnktPkJBT3JpV2NpZEFycmF5W2ldOwotCQlpZiAoaWR4ID09IDApIHsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCXBCQUVudHJ5ID0gJnBBZC0+QkFUYWJsZS5CQU9yaUVudHJ5W2lkeF07Ci0KLQkJaWYgKHBCQUVudHJ5LT5PUklfQkFfU3RhdHVzID09IE9yaWdpbmF0b3JfRG9uZSkgewotCQkJVElEID0gcEJBRW50cnktPlRJRDsKLQotCQkJQVNTRVJUKHBCQUVudHJ5LT5XY2lkIDwgTUFYX0xFTl9PRl9NQUNfVEFCTEUpOwotCi0JCQlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOwkvKkdldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5ICovCi0JCQlpZiAoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKSB7Ci0JCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkJCSAoIkJBIC0gTWxtZUFEREJBQWN0aW9uKCkgYWxsb2NhdGUgbWVtb3J5IGZhaWxlZCBcbiIpKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0KLQkJCVNlcXVlbmNlID0gcEVudHJ5LT5UeFNlcVtUSURdOwotCi0JCQlCYXJIZWFkZXJJbml0KHBBZCwgJkZyYW1lQmFyLCBwRW50cnktPkFkZHIsCi0JCQkJICAgICAgcEFkLT5DdXJyZW50QWRkcmVzcyk7Ci0KLQkJCUZyYW1lQmFyLlN0YXJ0aW5nU2VxLmZpZWxkLkZyYWdOdW0gPSAwOwkvKiBtYWtlIHN1cmUgc2VxdWVuY2Ugbm90IGNsZWFyIGluIERFTCBmdW5jdGlvbi4gKi8KLQkJCUZyYW1lQmFyLlN0YXJ0aW5nU2VxLmZpZWxkLlN0YXJ0U2VxID0gU2VxdWVuY2U7CS8qIG1ha2Ugc3VyZSBzZXF1ZW5jZSBub3QgY2xlYXIgaW4gREVMIGZ1bmNpdG9uLiAqLwotCQkJRnJhbWVCYXIuQmFyQ29udHJvbC5USUQgPSBUSUQ7CS8qIG1ha2Ugc3VyZSBzZXF1ZW5jZSBub3QgY2xlYXIgaW4gREVMIGZ1bmNpdG9uLiAqLwotCi0JCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAmRnJhbWVMZW4sCi0JCQkJCSAgc2l6ZW9mKHN0cnVjdCBydF9mcmFtZV9iYXIpLCAmRnJhbWVCYXIsCi0JCQkJCSAgRU5EX09GX0FSR1MpOwotCQkJLyppZiAoIShDTElFTlRfU1RBVFVTX1RFU1RfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1JBTElOS19DSElQU0VUKSkpICovCi0JCQlpZiAoMSkJLyogTm93IHdlIGFsd2F5cyBzZW5kIEJBUi4gKi8KLQkJCXsKLQkJCQkvKk1pbmlwb3J0TU1SZXF1ZXN0VW5sb2NrKHBBZCwgMCwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOyAqLwotCQkJCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwKLQkJCQkJCSAgKE1HTVRfVVNFX1FVRVVFX0ZMQUcgfAotCQkJCQkJICAgTWFwVXNlclByaW9yaXR5VG9BY2Nlc3NDYXRlZ29yeQotCQkJCQkJICAgW1RJRF0pLCBwT3V0QnVmZmVyLAotCQkJCQkJICBGcmFtZUxlbik7Ci0KLQkJCX0KLQkJCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7Ci0JCX0KLQl9Ci19Ci0KLXZvaWQgQWN0SGVhZGVySW5pdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgIHN0cnVjdCBydF9oZWFkZXJfODAyXzExICogcEhkcjgwMjExLAotCQkgICB1OCAqQWRkcjEsIHU4ICpBZGRyMiwgdTggKkFkZHIzKQotewotCU5kaXNaZXJvTWVtb3J5KHBIZHI4MDIxMSwgc2l6ZW9mKHN0cnVjdCBydF9oZWFkZXJfODAyXzExKSk7Ci0JcEhkcjgwMjExLT5GQy5UeXBlID0gQlRZUEVfTUdNVDsKLQlwSGRyODAyMTEtPkZDLlN1YlR5cGUgPSBTVUJUWVBFX0FDVElPTjsKLQotCUNPUFlfTUFDX0FERFIocEhkcjgwMjExLT5BZGRyMSwgQWRkcjEpOwotCUNPUFlfTUFDX0FERFIocEhkcjgwMjExLT5BZGRyMiwgQWRkcjIpOwotCUNPUFlfTUFDX0FERFIocEhkcjgwMjExLT5BZGRyMywgQWRkcjMpOwotfQotCi12b2lkIEJhckhlYWRlckluaXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICBzdHJ1Y3QgcnRfZnJhbWVfYmFyICogcENudGxCYXIsIHU4ICpwREEsIHU4ICpwU0EpCi17Ci0JTmRpc1plcm9NZW1vcnkocENudGxCYXIsIHNpemVvZihzdHJ1Y3QgcnRfZnJhbWVfYmFyKSk7Ci0JcENudGxCYXItPkZDLlR5cGUgPSBCVFlQRV9DTlRMOwotCXBDbnRsQmFyLT5GQy5TdWJUeXBlID0gU1VCVFlQRV9CTE9DS19BQ0tfUkVROwotCXBDbnRsQmFyLT5CYXJDb250cm9sLk1USUQgPSAwOwotCXBDbnRsQmFyLT5CYXJDb250cm9sLkNvbXByZXNzZWQgPSAxOwotCXBDbnRsQmFyLT5CYXJDb250cm9sLkFDS1BvbGljeSA9IDA7Ci0KLQlwQ250bEJhci0+RHVyYXRpb24gPQotCSAgICAxNiArIFJUTVBDYWxjRHVyYXRpb24ocEFkLCBSQVRFXzEsIHNpemVvZihzdHJ1Y3QgcnRfZnJhbWVfYmEpKTsKLQotCUNPUFlfTUFDX0FERFIocENudGxCYXItPkFkZHIxLCBwREEpOwotCUNPUFlfTUFDX0FERFIocENudGxCYXItPkFkZHIyLCBwU0EpOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JCUluc2VydCBDYXRlZ29yeSBhbmQgYWN0aW9uIGNvZGUgaW50byB0aGUgYWN0aW9uIGZyYW1lLgotCi0JUGFyYW1ldHJzOgotCQkxLiBmcmFtZSBidWZmZXIgcG9pbnRlci4KLQkJMi4gZnJhbWUgbGVuZ3RoLgotCQkzLiBjYXRlZ29yeSBjb2RlIG9mIHRoZSBmcmFtZS4KLQkJNC4gYWN0aW9uIGNvZGUgb2YgdGhlIGZyYW1lLgotCi0JUmV0dXJuCTogTm9uZS4KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi12b2lkIEluc2VydEFjdEZpZWxkKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgIHU4ICpwRnJhbWVCdWYsCi0JCSAgICB1bnNpZ25lZCBsb25nICpwRnJhbWVMZW4sIHU4IENhdGVnb3J5LCB1OCBBY3RDb2RlKQotewotCXVuc2lnbmVkIGxvbmcgVGVtcExlbjsKLQotCU1ha2VPdXRnb2luZ0ZyYW1lKHBGcmFtZUJ1ZiwgJlRlbXBMZW4sCi0JCQkgIDEsICZDYXRlZ29yeSwgMSwgJkFjdENvZGUsIEVORF9PRl9BUkdTKTsKLQotCSpwRnJhbWVMZW4gPSAqcEZyYW1lTGVuICsgVGVtcExlbjsKLQotCXJldHVybjsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2FjdGlvbi5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vYWN0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3NGY4YjguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vYWN0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFJhbGluayBUZWNoIEluYy4KLSAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKLSAqIEhzaW5jaHUgQ291bnR5IDMwMiwKLSAqIFRhaXdhbiwgUi5PLkMuCi0gKgotICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotCU1vZHVsZSBOYW1lOgotCWFpcm9uZXQuaAotCi0JQWJzdHJhY3Q6Ci0KLQlSZXZpc2lvbiBIaXN0b3J5OgotCVdobwkJCVdoZW4JCQlXaGF0Ci0JLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCU5hbWUJCURhdGUJCQlNb2RpZmljYXRpb24gbG9ncwotCVBhdWwgTGluCTA0LTA2LTE1CQlJbml0aWFsCi0qLwotCi0jaWZuZGVmCV9fQUNUSU9OX0hfXwotI2RlZmluZQlfX0FDVElPTl9IX18KLQotc3RydWN0IFBBQ0tFRCBydF9odF9pbmZvcm1hdGlvbl9vY3RldCB7Ci0JdTggUmVxdWVzdDoxOwotCXU4IEZvcnR5X01Iel9JbnRvbGVyYW50OjE7Ci0JdTggU1RBX0NoYW5uZWxfV2lkdGg6MTsKLQl1OCBSZXNlcnZlZDo1OwotfTsKLQotc3RydWN0IFBBQ0tFRCBydF9mcmFtZV9odF9pbmZvIHsKLQlzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSBIZHI7Ci0JdTggQ2F0ZWdvcnk7Ci0JdTggQWN0aW9uOwotCXN0cnVjdCBydF9odF9pbmZvcm1hdGlvbl9vY3RldCBIVF9JbmZvOwotfTsKLQotI2VuZGlmIC8qIF9fQUNUSU9OX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vYmFfYWN0aW9uLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9iYV9hY3Rpb24uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTMzYmMxYi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9iYV9hY3Rpb24uYworKysgL2Rldi9udWxsCkBAIC0xLDE2NTAgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKi8KLQotI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotCi0jZGVmaW5lIEJBX09SSV9JTklUX1NFUQkJKHBFbnRyeS0+VHhTZXFbVElEXSkJLyoxICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5pdGlhbCBzZXF1ZW5jZSBudW1iZXIgb2YgQkEgc2Vzc2lvbiAqLwotCi0jZGVmaW5lIE9SSV9TRVNTSU9OX01BWF9SRVRSWQk4Ci0jZGVmaW5lIE9SSV9CQV9TRVNTSU9OX1RJTUVPVVQJKDIwMDApCS8qIG1zICovCi0jZGVmaW5lIFJFQ19CQV9TRVNTSU9OX0lETEVfVElNRU9VVAkoMTAwMCkJLyogbXMgKi8KLQotI2RlZmluZSBSRU9SREVSSU5HX1BBQ0tFVF9USU1FT1VUCQkoKDEwMCAqIE9TX0haKS8xMDAwKQkvKiBzeXN0ZW0gdGlja3MgLS0gMTAwIG1zICovCi0jZGVmaW5lIE1BWF9SRU9SREVSSU5HX1BBQ0tFVF9USU1FT1VUCSgoMzAwMCAqIE9TX0haKS8xMDAwKQkvKiBzeXN0ZW0gdGlja3MgLS0gMTAwIG1zICovCi0KLSNkZWZpbmUgUkVTRVRfUkNWX1NFUQkJKDB4RkZGRikKLQotc3RhdGljIHZvaWQgYmFfbXBkdV9ibGtfZnJlZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgIHN0cnVjdCByZW9yZGVyaW5nX21wZHUgKm1wZHVfYmxrKTsKLQotc3RydWN0IHJ0X2JhX29yaV9lbnRyeSAqQkFUYWJsZUFsbG9jT3JpRW50cnkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1MTYgKiBJZHgpOwotCi1zdHJ1Y3QgcnRfYmFfcmVjX2VudHJ5ICpCQVRhYmxlQWxsb2NSZWNFbnRyeShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHUxNiAqIElkeCk7Ci0KLXZvaWQgQkFPcmlTZXNzaW9uU2V0dXBUaW1lb3V0KHZvaWQgKlN5c3RlbVNwZWNpZmljMSwKLQkJCSAgICAgIHZvaWQgKkZ1bmN0aW9uQ29udGV4dCwKLQkJCSAgICAgIHZvaWQgKlN5c3RlbVNwZWNpZmljMiwKLQkJCSAgICAgIHZvaWQgKlN5c3RlbVNwZWNpZmljMyk7Ci0KLXZvaWQgQkFSZWNTZXNzaW9uSWRsZVRpbWVvdXQodm9pZCAqU3lzdGVtU3BlY2lmaWMxLAotCQkJICAgICB2b2lkICpGdW5jdGlvbkNvbnRleHQsCi0JCQkgICAgIHZvaWQgKlN5c3RlbVNwZWNpZmljMiwKLQkJCSAgICAgdm9pZCAqU3lzdGVtU3BlY2lmaWMzKTsKLQotQlVJTERfVElNRVJfRlVOQ1RJT04oQkFPcmlTZXNzaW9uU2V0dXBUaW1lb3V0KTsKLUJVSUxEX1RJTUVSX0ZVTkNUSU9OKEJBUmVjU2Vzc2lvbklkbGVUaW1lb3V0KTsKLQotI2RlZmluZSBBTk5PVU5DRV9SRU9SREVSSU5HX1BBQ0tFVChfcEFkLCBfbXBkdV9ibGspCVwKLQkJCUFubm91bmNlX1Jlb3JkZXJpbmdfUGFja2V0KF9wQWQsIF9tcGR1X2Jsayk7Ci0KLXZvaWQgQkFfTWF4V2luU2l6ZVJlYXNpZ24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICBzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwRW50cnlQZWVyLCB1OCAqIHBXaW5TaXplKQotewotCXU4IE1heFNpemU7Ci0KLQlpZiAocEFkLT5NQUNWZXJzaW9uID49IFJBTElOS18yODgzX1ZFUlNJT04pCS8qIDMqMyAqLwotCXsKLQkJaWYgKHBBZC0+TUFDVmVyc2lvbiA+PSBSQUxJTktfMzA3MF9WRVJTSU9OKSB7Ci0JCQlpZiAocEVudHJ5UGVlci0+V2VwU3RhdHVzICE9Ci0JCQkgICAgTmRpczgwMl8xMUVuY3J5cHRpb25EaXNhYmxlZCkKLQkJCQlNYXhTaXplID0gNzsJLyogZm9yIG5vbi1vcGVuIG1vZGUgKi8KLQkJCWVsc2UKLQkJCQlNYXhTaXplID0gMTM7Ci0JCX0gZWxzZQotCQkJTWF4U2l6ZSA9IDMxOwotCX0gZWxzZSBpZiAocEFkLT5NQUNWZXJzaW9uID49IFJBTElOS18yODgwRV9WRVJTSU9OKQkvKiAyODgwIGUgKi8KLQl7Ci0JCWlmIChwRW50cnlQZWVyLT5XZXBTdGF0dXMgIT0gTmRpczgwMl8xMUVuY3J5cHRpb25EaXNhYmxlZCkKLQkJCU1heFNpemUgPSA3OwkvKiBmb3Igbm9uLW9wZW4gbW9kZSAqLwotCQllbHNlCi0JCQlNYXhTaXplID0gMTM7Ci0JfSBlbHNlCi0JCU1heFNpemUgPSA3OwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiYmE+IFdpbiBTaXplID0gJWQsIE1heCBTaXplID0gJWRcbiIsCi0JCQkJICAqcFdpblNpemUsIE1heFNpemUpKTsKLQotCWlmICgoKnBXaW5TaXplKSA+IE1heFNpemUpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJiYT4gcmVhc3NpZ24gbWF4IHdpbiBzaXplIGZyb20gJWQgdG8gJWRcbiIsCi0JCQkgICpwV2luU2l6ZSwgTWF4U2l6ZSkpOwotCi0JCSpwV2luU2l6ZSA9IE1heFNpemU7Ci0JfQotfQotCi12b2lkIEFubm91bmNlX1Jlb3JkZXJpbmdfUGFja2V0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQlJTiBzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICptcGR1KQotewotCXZvaWQgKnBQYWNrZXQ7Ci0KLQlwUGFja2V0ID0gbXBkdS0+cFBhY2tldDsKLQotCWlmIChtcGR1LT5iQU1TRFUpIHsKLQkJQVNTRVJUKDApOwotCQlCQV9SZW9yZGVyX0FNU0RVX0Fubm91bmNlKHBBZCwgcFBhY2tldCk7Ci0JfSBlbHNlIHsKLQkJLyogKi8KLQkJLyogcGFzcyB0aGlzIDgwMi4zIHBhY2tldCB0byB1cHBlciBsYXllciBvciBmb3J3YXJkIHRoaXMgcGFja2V0IHRvIFdNIGRpcmVjdGx5ICovCi0JCS8qICovCi0KLQkJQU5OT1VOQ0VfT1JfRk9SV0FSRF84MDJfM19QQUNLRVQocEFkLCBwUGFja2V0LAotCQkJCQkJIFJUTVBfR0VUX1BBQ0tFVF9JRihwUGFja2V0KSk7Ci0JfQotfQotCi0vKgotICogSW5zZXJ0IGEgcmVvcmRlcmluZyBtcGR1IGludG8gc29ydGVkIGxpbmtlZCBsaXN0IGJ5IHNlcXVlbmNlIG5vLgotICovCi1CT09MRUFOIGJhX3Jlb3JkZXJpbmdfbXBkdV9pbnNlcnRzb3J0ZWQoc3RydWN0IHJlb3JkZXJpbmdfbGlzdCAqbGlzdCwKLQkJCQkJc3RydWN0IHJlb3JkZXJpbmdfbXBkdSAqbXBkdSkKLXsKLQotCXN0cnVjdCByZW9yZGVyaW5nX21wZHUgKipwcFNjYW4gPSAmbGlzdC0+bmV4dDsKLQotCXdoaWxlICgqcHBTY2FuICE9IE5VTEwpIHsKLQkJaWYgKFNFUV9TTUFMTEVSKCgqcHBTY2FuKS0+U2VxdWVuY2UsIG1wZHUtPlNlcXVlbmNlLCBNQVhTRVEpKSB7Ci0JCQlwcFNjYW4gPSAmKCpwcFNjYW4pLT5uZXh0OwotCQl9IGVsc2UgaWYgKCgqcHBTY2FuKS0+U2VxdWVuY2UgPT0gbXBkdS0+U2VxdWVuY2UpIHsKLQkJCS8qIGdpdmUgdXAgdGhpcyBkdXBsaWNhdGVkIGZyYW1lICovCi0JCQlyZXR1cm4gKEZBTFNFKTsKLQkJfSBlbHNlIHsKLQkJCS8qIGZpbmQgcG9zaXRpb24gKi8KLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JbXBkdS0+bmV4dCA9ICpwcFNjYW47Ci0JKnBwU2NhbiA9IG1wZHU7Ci0JbGlzdC0+cWxlbisrOwotCXJldHVybiBUUlVFOwotfQotCi0vKgotICogY2FsbGVyIGxvY2sgY3JpdGljYWwgc2VjdGlvbiBpZiBuZWNlc3NhcnkKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGJhX2VucXVldWUoc3RydWN0IHJlb3JkZXJpbmdfbGlzdCAqbGlzdCwKLQkJCSAgICAgIHN0cnVjdCByZW9yZGVyaW5nX21wZHUgKm1wZHVfYmxrKQotewotCWxpc3QtPnFsZW4rKzsKLQltcGR1X2Jsay0+bmV4dCA9IGxpc3QtPm5leHQ7Ci0JbGlzdC0+bmV4dCA9IG1wZHVfYmxrOwotfQotCi0vKgotICogY2FsbGVyIGxvY2sgY3JpdGljYWwgc2VjdGlvbiBpZiBuZWNlc3NhcnkKLSAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICpiYV9kZXF1ZXVlKHN0cnVjdCByZW9yZGVyaW5nX2xpc3QgKmxpc3QpCi17Ci0Jc3RydWN0IHJlb3JkZXJpbmdfbXBkdSAqbXBkdV9ibGsgPSBOVUxMOwotCi0JQVNTRVJUKGxpc3QpOwotCi0JaWYgKGxpc3QtPnFsZW4pIHsKLQkJbGlzdC0+cWxlbi0tOwotCQltcGR1X2JsayA9IGxpc3QtPm5leHQ7Ci0JCWlmIChtcGR1X2JsaykgewotCQkJbGlzdC0+bmV4dCA9IG1wZHVfYmxrLT5uZXh0OwotCQkJbXBkdV9ibGstPm5leHQgPSBOVUxMOwotCQl9Ci0JfQotCXJldHVybiBtcGR1X2JsazsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICpiYV9yZW9yZGVyaW5nX21wZHVfZGVxdWV1ZShzdHJ1Y3QKLQkJCQkJCQkJIHJlb3JkZXJpbmdfbGlzdAotCQkJCQkJCQkgKmxpc3QpCi17Ci0JcmV0dXJuIChiYV9kZXF1ZXVlKGxpc3QpKTsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICpiYV9yZW9yZGVyaW5nX21wZHVfcHJvYmUoc3RydWN0Ci0JCQkJCQkJICAgICAgIHJlb3JkZXJpbmdfbGlzdAotCQkJCQkJCSAgICAgICAqbGlzdCkKLXsKLQlBU1NFUlQobGlzdCk7Ci0KLQlyZXR1cm4gKGxpc3QtPm5leHQpOwotfQotCi0vKgotICogZnJlZSBhbGwgcmVzb3VyY2UgZm9yIHJlb3JkZXJpbmcgbWVjaGFuaXNtCi0gKi8KLXZvaWQgYmFfcmVvcmRlcmluZ19yZXNvdXJjZV9yZWxlYXNlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlzdHJ1Y3QgcnRfYmFfdGFibGUgKlRhYjsKLQlzdHJ1Y3QgcnRfYmFfcmVjX2VudHJ5ICpwQkFFbnRyeTsKLQlzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICptcGR1X2JsazsKLQlpbnQgaTsKLQotCVRhYiA9ICZwQWQtPkJBVGFibGU7Ci0KLQkvKiBJLiAgcmVsZWFzZSBhbGwgcGVuZGluZyByZW9yZGVyaW5nIHBhY2tldCAqLwotCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+QkFUYWJMb2NrKTsKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0xFTl9PRl9CQV9SRUNfVEFCTEU7IGkrKykgewotCQlwQkFFbnRyeSA9ICZUYWItPkJBUmVjRW50cnlbaV07Ci0JCWlmIChwQkFFbnRyeS0+UkVDX0JBX1N0YXR1cyAhPSBSZWNpcGllbnRfTk9ORSkgewotCQkJd2hpbGUgKChtcGR1X2JsayA9Ci0JCQkJYmFfcmVvcmRlcmluZ19tcGR1X2RlcXVldWUoJnBCQUVudHJ5LT5saXN0KSkpIHsKLQkJCQlBU1NFUlQobXBkdV9ibGstPnBQYWNrZXQpOwotCQkJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBtcGR1X2Jsay0+cFBhY2tldCwKLQkJCQkJCSAgICBORElTX1NUQVRVU19GQUlMVVJFKTsKLQkJCQliYV9tcGR1X2Jsa19mcmVlKHBBZCwgbXBkdV9ibGspOwotCQkJfQotCQl9Ci0JfQotCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+QkFUYWJMb2NrKTsKLQotCUFTU0VSVChwQkFFbnRyeS0+bGlzdC5xbGVuID09IDApOwotCS8qIElJLiBmcmVlIG1lbW9yeSBvZiByZW9yZGVyaW5nIG1wZHUgdGFibGUgKi8KLQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPm1wZHVfYmxrX3Bvb2wubG9jayk7Ci0Jb3NfZnJlZV9tZW0ocEFkLCBwQWQtPm1wZHVfYmxrX3Bvb2wubWVtKTsKLQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPm1wZHVfYmxrX3Bvb2wubG9jayk7Ci19Ci0KLS8qCi0gKiBBbGxvY2F0ZSBhbGwgcmVzb3VyY2UgZm9yIHJlb3JkZXJpbmcgbWVjaGFuaXNtCi0gKi8KLUJPT0xFQU4gYmFfcmVvcmRlcmluZ19yZXNvdXJjZV9pbml0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgaW50IG51bSkKLXsKLQlpbnQgaTsKLQl1OCAqbWVtOwotCXN0cnVjdCByZW9yZGVyaW5nX21wZHUgKm1wZHVfYmxrOwotCXN0cnVjdCByZW9yZGVyaW5nX2xpc3QgKmZyZWVsaXN0OwotCi0JLyogYWxsb2NhdGUgc3BpbmxvY2sgKi8KLQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5tcGR1X2Jsa19wb29sLmxvY2spOwotCi0JLyogaW5pdGlhbGl6ZSBmcmVlbGlzdCAqLwotCWZyZWVsaXN0ID0gJnBBZC0+bXBkdV9ibGtfcG9vbC5mcmVlbGlzdDsKLQlmcmVlbGlzdC0+bmV4dCA9IE5VTEw7Ci0JZnJlZWxpc3QtPnFsZW4gPSAwOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIkFsbG9jYXRlICVkIG1lbW9yeSBmb3IgQkEgcmVvcmRlcmluZ1xuIiwKLQkJICAodTMyKShudW0gKiBzaXplb2Yoc3RydWN0IHJlb3JkZXJpbmdfbXBkdSkpKSk7Ci0KLQkvKiBhbGxvY2F0ZSBudW1iZXIgb2YgbXBkdV9ibGsgbWVtb3J5ICovCi0Jb3NfYWxsb2NfbWVtKHBBZCwgKHU4ICoqKSAmIG1lbSwKLQkJICAgICAobnVtICogc2l6ZW9mKHN0cnVjdCByZW9yZGVyaW5nX21wZHUpKSk7Ci0KLQlwQWQtPm1wZHVfYmxrX3Bvb2wubWVtID0gbWVtOwotCi0JaWYgKG1lbSA9PSBOVUxMKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJICgiQ2FuJ3QgQWxsb2NhdGUgTWVtb3J5IGZvciBCQSBSZW9yZGVyaW5nXG4iKSk7Ci0JCXJldHVybiAoRkFMU0UpOwotCX0KLQotCS8qIGJ1aWxkIG1wZHVfYmxrIGZyZWUgbGlzdCAqLwotCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewotCQkvKiBnZXQgbXBkdV9ibGsgKi8KLQkJbXBkdV9ibGsgPSAoc3RydWN0IHJlb3JkZXJpbmdfbXBkdSAqKW1lbTsKLQkJLyogaW5pdGlhbCBtcGR1X2JsayAqLwotCQlOZGlzWmVyb01lbW9yeShtcGR1X2Jsaywgc2l6ZW9mKHN0cnVjdCByZW9yZGVyaW5nX21wZHUpKTsKLQkJLyogbmV4dCBtcGR1X2JsayAqLwotCQltZW0gKz0gc2l6ZW9mKHN0cnVjdCByZW9yZGVyaW5nX21wZHUpOwotCQkvKiBpbnNlcnQgbXBkdV9ibGsgaW50byBmcmVlbGlzdCAqLwotCQliYV9lbnF1ZXVlKGZyZWVsaXN0LCBtcGR1X2Jsayk7Ci0JfQotCi0JcmV0dXJuIChUUlVFKTsKLX0KLQotLypzdGF0aWMgaW50IGJsa19jb3VudD0wOyAvLyBzYW1wbGUgdGFrZSBvZmYsIG5vIHVzZSAqLwotCi1zdGF0aWMgc3RydWN0IHJlb3JkZXJpbmdfbXBkdSAqYmFfbXBkdV9ibGtfYWxsb2Moc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCXN0cnVjdCByZW9yZGVyaW5nX21wZHUgKm1wZHVfYmxrOwotCi0JTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5tcGR1X2Jsa19wb29sLmxvY2spOwotCW1wZHVfYmxrID0gYmFfZGVxdWV1ZSgmcEFkLT5tcGR1X2Jsa19wb29sLmZyZWVsaXN0KTsKLQlpZiAobXBkdV9ibGspIHsKLS8qICAgICAgICAgICAgICBibGtfY291bnQrKzsgKi8KLQkJLyogcmVzZXQgbXBkdV9ibGsgKi8KLQkJTmRpc1plcm9NZW1vcnkobXBkdV9ibGssIHNpemVvZihzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1KSk7Ci0JfQotCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+bXBkdV9ibGtfcG9vbC5sb2NrKTsKLQlyZXR1cm4gbXBkdV9ibGs7Ci19Ci0KLXN0YXRpYyB2b2lkIGJhX21wZHVfYmxrX2ZyZWUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgICBzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICptcGR1X2JsaykKLXsKLQlBU1NFUlQobXBkdV9ibGspOwotCi0JTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5tcGR1X2Jsa19wb29sLmxvY2spOwotLyogICAgICBibGtfY291bnQtLTsgKi8KLQliYV9lbnF1ZXVlKCZwQWQtPm1wZHVfYmxrX3Bvb2wuZnJlZWxpc3QsIG1wZHVfYmxrKTsKLQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPm1wZHVfYmxrX3Bvb2wubG9jayk7Ci19Ci0KLXN0YXRpYyB1MTYgYmFfaW5kaWNhdGVfcmVvcmRlcmluZ19tcGR1c19pbl9vcmRlcihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJCQkgICAgc3RydWN0IHJ0X2JhX3JlY19lbnRyeSAqcEJBRW50cnksCi0JCQkJCQkgICAgdTE2IFN0YXJ0U2VxKQotewotCXN0cnVjdCByZW9yZGVyaW5nX21wZHUgKm1wZHVfYmxrOwotCXUxNiBMYXN0SW5kU2VxID0gUkVTRVRfUkNWX1NFUTsKLQotCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBCQUVudHJ5LT5SeFJlUmluZ0xvY2spOwotCi0Jd2hpbGUgKChtcGR1X2JsayA9IGJhX3Jlb3JkZXJpbmdfbXBkdV9wcm9iZSgmcEJBRW50cnktPmxpc3QpKSkgewotCQkvKiBmaW5kIGluLW9yZGVyIGZyYW1lICovCi0JCWlmICghU0VRX1NURVBPTkUobXBkdV9ibGstPlNlcXVlbmNlLCBTdGFydFNlcSwgTUFYU0VRKSkgewotCQkJYnJlYWs7Ci0JCX0KLQkJLyogZGVxdWV1ZSBpbi1vcmRlciBmcmFtZSBmcm9tIHJlb2RlcmluZyBsaXN0ICovCi0JCW1wZHVfYmxrID0gYmFfcmVvcmRlcmluZ19tcGR1X2RlcXVldWUoJnBCQUVudHJ5LT5saXN0KTsKLQkJLyogcGFzcyB0aGlzIGZyYW1lIHVwICovCi0JCUFOTk9VTkNFX1JFT1JERVJJTkdfUEFDS0VUKHBBZCwgbXBkdV9ibGspOwotCQkvKiBtb3ZlIHRvIG5leHQgc2VxdWVuY2UgKi8KLQkJU3RhcnRTZXEgPSBtcGR1X2Jsay0+U2VxdWVuY2U7Ci0JCUxhc3RJbmRTZXEgPSBTdGFydFNlcTsKLQkJLyogZnJlZSBtcGR1X2JsayAqLwotCQliYV9tcGR1X2Jsa19mcmVlKHBBZCwgbXBkdV9ibGspOwotCX0KLQotCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBCQUVudHJ5LT5SeFJlUmluZ0xvY2spOwotCi0JLyogdXBkYXRlIGxhc3QgaW5kaWNhdGVkIHNlcXVlbmNlICovCi0JcmV0dXJuIExhc3RJbmRTZXE7Ci19Ci0KLXN0YXRpYyB2b2lkIGJhX2luZGljYXRlX3Jlb3JkZXJpbmdfbXBkdXNfbGVfc2VxKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkJCXN0cnVjdCBydF9iYV9yZWNfZW50cnkgKnBCQUVudHJ5LAotCQkJCQkJdTE2IFNlcXVlbmNlKQotewotCXN0cnVjdCByZW9yZGVyaW5nX21wZHUgKm1wZHVfYmxrOwotCi0JTmRpc0FjcXVpcmVTcGluTG9jaygmcEJBRW50cnktPlJ4UmVSaW5nTG9jayk7Ci0Jd2hpbGUgKChtcGR1X2JsayA9IGJhX3Jlb3JkZXJpbmdfbXBkdV9wcm9iZSgmcEJBRW50cnktPmxpc3QpKSkgewotCQkvKiBmaW5kIGluLW9yZGVyIGZyYW1lICovCi0JCWlmICgobXBkdV9ibGstPlNlcXVlbmNlID09IFNlcXVlbmNlKQotCQkgICAgfHwgU0VRX1NNQUxMRVIobXBkdV9ibGstPlNlcXVlbmNlLCBTZXF1ZW5jZSwgTUFYU0VRKSkgewotCQkJLyogZGVxdWV1ZSBpbi1vcmRlciBmcmFtZSBmcm9tIHJlb2RlcmluZyBsaXN0ICovCi0JCQltcGR1X2JsayA9IGJhX3Jlb3JkZXJpbmdfbXBkdV9kZXF1ZXVlKCZwQkFFbnRyeS0+bGlzdCk7Ci0JCQkvKiBwYXNzIHRoaXMgZnJhbWUgdXAgKi8KLQkJCUFOTk9VTkNFX1JFT1JERVJJTkdfUEFDS0VUKHBBZCwgbXBkdV9ibGspOwotCQkJLyogZnJlZSBtcGR1X2JsayAqLwotCQkJYmFfbXBkdV9ibGtfZnJlZShwQWQsIG1wZHVfYmxrKTsKLQkJfSBlbHNlIHsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBCQUVudHJ5LT5SeFJlUmluZ0xvY2spOwotfQotCi1zdGF0aWMgdm9pZCBiYV9yZWZyZXNoX3Jlb3JkZXJpbmdfbXBkdXMoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCQlzdHJ1Y3QgcnRfYmFfcmVjX2VudHJ5ICpwQkFFbnRyeSkKLXsKLQlzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICptcGR1X2JsazsKLQotCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBCQUVudHJ5LT5SeFJlUmluZ0xvY2spOwotCi0JLyogZGVxdWV1ZSBpbi1vcmRlciBmcmFtZSBmcm9tIHJlb2RlcmluZyBsaXN0ICovCi0Jd2hpbGUgKChtcGR1X2JsayA9IGJhX3Jlb3JkZXJpbmdfbXBkdV9kZXF1ZXVlKCZwQkFFbnRyeS0+bGlzdCkpKSB7Ci0JCS8qIHBhc3MgdGhpcyBmcmFtZSB1cCAqLwotCQlBTk5PVU5DRV9SRU9SREVSSU5HX1BBQ0tFVChwQWQsIG1wZHVfYmxrKTsKLQotCQlwQkFFbnRyeS0+TGFzdEluZFNlcSA9IG1wZHVfYmxrLT5TZXF1ZW5jZTsKLQkJYmFfbXBkdV9ibGtfZnJlZShwQWQsIG1wZHVfYmxrKTsKLQotCQkvKiB1cGRhdGUgbGFzdCBpbmRpY2F0ZWQgc2VxdWVuY2UgKi8KLQl9Ci0JQVNTRVJUKHBCQUVudHJ5LT5saXN0LnFsZW4gPT0gMCk7Ci0JcEJBRW50cnktPkxhc3RJbmRTZXEgPSBSRVNFVF9SQ1ZfU0VROwotCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBCQUVudHJ5LT5SeFJlUmluZ0xvY2spOwotfQotCi0vKnN0YXRpYyAqLwotdm9pZCBiYV9mbHVzaF9yZW9yZGVyaW5nX3RpbWVvdXRfbXBkdXMoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCSAgICAgICBzdHJ1Y3QgcnRfYmFfcmVjX2VudHJ5ICpwQkFFbnRyeSwKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBOb3czMikKLXsKLQl1MTYgU2VxdWVuY2U7Ci0KLS8qICAgICAgaWYgKChSVE1QX1RJTUVfQUZURVIoKHVuc2lnbmVkIGxvbmcpTm93MzIsICh1bnNpZ25lZCBsb25nKShwQkFFbnRyeS0+TGFzdEluZFNlcUF0VGltZXIrUkVPUkRFUklOR19QQUNLRVRfVElNRU9VVCkpICYmICovCi0vKiAgICAgICAgICAgICAgIChwQkFFbnRyeS0+bGlzdC5xbGVuID4gKChwQkFFbnRyeS0+QkFXaW5TaXplKjcpLzgpKSkgLy98fCAqLwotLyogICAgICAgICAgICAgIChSVE1QX1RJTUVfQUZURVIoKHVuc2lnbmVkIGxvbmcpTm93MzIsICh1bnNpZ25lZCBsb25nKShwQkFFbnRyeS0+TGFzdEluZFNlcUF0VGltZXIrKDEwKlJFT1JERVJJTkdfUEFDS0VUX1RJTUVPVVQpKSkgJiYgKi8KLS8qICAgICAgICAgICAgICAgKHBCQUVudHJ5LT5saXN0LnFsZW4gPiAocEJBRW50cnktPkJBV2luU2l6ZS84KSkpICovCi0JaWYgKFJUTVBfVElNRV9BRlRFUgotCSAgICAoKHVuc2lnbmVkIGxvbmcpTm93MzIsCi0JICAgICAodW5zaWduZWQgbG9uZykocEJBRW50cnktPkxhc3RJbmRTZXFBdFRpbWVyICsKLQkJCSAgICAgKE1BWF9SRU9SREVSSU5HX1BBQ0tFVF9USU1FT1VUIC8gNikpKQotCSAgICAmJiAocEJBRW50cnktPmxpc3QucWxlbiA+IDEpCi0JICAgICkgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoInRpbWVvdXRbJWRdICglMDhseC0lMDhseCA9ICVkID4gJWQpOiAleCwgZmx1c2ggYWxsIVxuICIsCi0JCQkgIHBCQUVudHJ5LT5saXN0LnFsZW4sIE5vdzMyLAotCQkJICAocEJBRW50cnktPkxhc3RJbmRTZXFBdFRpbWVyKSwKLQkJCSAgKGludCkoKGxvbmcpTm93MzIgLQotCQkJCShsb25nKShwQkFFbnRyeS0+TGFzdEluZFNlcUF0VGltZXIpKSwKLQkJCSAgTUFYX1JFT1JERVJJTkdfUEFDS0VUX1RJTUVPVVQsIHBCQUVudHJ5LT5MYXN0SW5kU2VxKSk7Ci0JCWJhX3JlZnJlc2hfcmVvcmRlcmluZ19tcGR1cyhwQWQsIHBCQUVudHJ5KTsKLQkJcEJBRW50cnktPkxhc3RJbmRTZXFBdFRpbWVyID0gTm93MzI7Ci0JfSBlbHNlCi0JICAgIGlmIChSVE1QX1RJTUVfQUZURVIKLQkJKCh1bnNpZ25lZCBsb25nKU5vdzMyLAotCQkgKHVuc2lnbmVkIGxvbmcpKHBCQUVudHJ5LT5MYXN0SW5kU2VxQXRUaW1lciArCi0JCQkJIChSRU9SREVSSU5HX1BBQ0tFVF9USU1FT1VUKSkpCi0JCSYmIChwQkFFbnRyeS0+bGlzdC5xbGVuID4gMCkKLQkgICAgKSB7Ci0JCS8qICovCi0JCS8qIGZvcmNlIExhc3RJbmRTZXEgdG8gc2hpZnQgdG8gTGFzdEluZFNlcSsxICovCi0JCS8qICovCi0JCVNlcXVlbmNlID0gKHBCQUVudHJ5LT5MYXN0SW5kU2VxICsgMSkgJiBNQVhTRVE7Ci0JCWJhX2luZGljYXRlX3Jlb3JkZXJpbmdfbXBkdXNfbGVfc2VxKHBBZCwgcEJBRW50cnksIFNlcXVlbmNlKTsKLQkJcEJBRW50cnktPkxhc3RJbmRTZXFBdFRpbWVyID0gTm93MzI7Ci0JCXBCQUVudHJ5LT5MYXN0SW5kU2VxID0gU2VxdWVuY2U7Ci0JCS8qICovCi0JCS8qIGluZGljYXRlIGluLW9yZGVyIG1wZHVzICovCi0JCS8qICovCi0JCVNlcXVlbmNlID0KLQkJICAgIGJhX2luZGljYXRlX3Jlb3JkZXJpbmdfbXBkdXNfaW5fb3JkZXIocEFkLCBwQkFFbnRyeSwKLQkJCQkJCQkgIFNlcXVlbmNlKTsKLQkJaWYgKFNlcXVlbmNlICE9IFJFU0VUX1JDVl9TRVEpIHsKLQkJCXBCQUVudHJ5LT5MYXN0SW5kU2VxID0gU2VxdWVuY2U7Ci0JCX0KLQotCQlEQkdQUklOVChSVF9ERUJVR19PRkYsCi0JCQkgKCIleCwgZmx1c2ggb25lIVxuIiwgcEJBRW50cnktPkxhc3RJbmRTZXEpKTsKLQotCX0KLX0KLQotLyoKLSAqIGdlbmVyYXRlIEFEREJBIHJlcXVlc3QgdG8KLSAqIHNldCB1cCBCQSBhZ3JlZW1lbnQKLSAqLwotdm9pZCBCQU9yaVNlc3Npb25TZXRVcChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgICAgICBzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwRW50cnksCi0JCSAgICAgICB1OCBUSUQsCi0JCSAgICAgICB1MTYgVGltZU91dCwKLQkJICAgICAgIHVuc2lnbmVkIGxvbmcgRGVsYXlUaW1lLCBJTiBCT09MRUFOIGlzRm9yY2VkKQotewotCS8qc3RydWN0IHJ0X21sbWVfYWRkYmFfcmVxIEFkZGJhUmVxOyAqLwotCXN0cnVjdCBydF9iYV9vcmlfZW50cnkgKnBCQUVudHJ5ID0gTlVMTDsKLQl1MTYgSWR4OwotCUJPT0xFQU4gQ2FuY2VsbGVkOwotCi0JaWYgKChwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuQXV0b0JBICE9IFRSVUUpCi0JICAgICYmIChpc0ZvcmNlZCA9PSBGQUxTRSkpCi0JCXJldHVybjsKLQotCS8qIGlmIHRoaXMgZW50cnkgaXMgbGltaXRlZCB0byB1c2UgbGVnYWN5IHR4IG1vZGUsIGl0IGRvZXNuJ3QgZ2VuZXJhdGUgQkEuICovCi0JaWYgKFJUTVBTdGFGaXhlZFR4TW9kZShwQWQsIHBFbnRyeSkgIT0gRklYRURfVFhNT0RFX0hUKQotCQlyZXR1cm47Ci0KLQlpZiAoKHBFbnRyeS0+QkFEZWNsaW5lQml0bWFwICYgKDEgPDwgVElEKSkgJiYgKGlzRm9yY2VkID09IEZBTFNFKSkgewotCQkvKiB0cnkgYWdhaW4gYWZ0ZXIgMyBzZWNzICovCi0JCURlbGF5VGltZSA9IDMwMDA7Ci0vKiAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiRGVDbGluZSBCQSBmcm9tIFBlZXJcbiIpKTsgKi8KLS8qICAgICAgICAgICAgICByZXR1cm47ICovCi0JfQotCi0JSWR4ID0gcEVudHJ5LT5CQU9yaVdjaWRBcnJheVtUSURdOwotCWlmIChJZHggPT0gMCkgewotCQkvKiBhbGxvY2F0ZSBhIEJBIHNlc3Npb24gKi8KLQkJcEJBRW50cnkgPSBCQVRhYmxlQWxsb2NPcmlFbnRyeShwQWQsICZJZHgpOwotCQlpZiAocEJBRW50cnkgPT0gTlVMTCkgewotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiQUREQkEgLSBNbG1lQUREQkFBY3Rpb24oKSBhbGxvY2F0ZSBCQSBzZXNzaW9uIGZhaWxlZCBcbiIpKTsKLQkJCXJldHVybjsKLQkJfQotCX0gZWxzZSB7Ci0JCXBCQUVudHJ5ID0gJnBBZC0+QkFUYWJsZS5CQU9yaUVudHJ5W0lkeF07Ci0JfQotCi0JaWYgKHBCQUVudHJ5LT5PUklfQkFfU3RhdHVzID49IE9yaWdpbmF0b3JfV2FpdFJlcykgewotCQlyZXR1cm47Ci0JfQotCi0JcEVudHJ5LT5CQU9yaVdjaWRBcnJheVtUSURdID0gSWR4OwotCi0JLyogSW5pdGlhbGl6ZSBCQSBzZXNzaW9uICovCi0JcEJBRW50cnktPk9SSV9CQV9TdGF0dXMgPSBPcmlnaW5hdG9yX1dhaXRSZXM7Ci0JcEJBRW50cnktPldjaWQgPSBwRW50cnktPkFpZDsKLQlwQkFFbnRyeS0+QkFXaW5TaXplID0gcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlJ4QkFXaW5MaW1pdDsKLQlwQkFFbnRyeS0+U2VxdWVuY2UgPSBCQV9PUklfSU5JVF9TRVE7Ci0JcEJBRW50cnktPlRva2VuID0gMTsJLyogKDIwMDgtMDEtMjEpIEphbiBMZWUgcmVjb21tZW5kcyBpdCAtIHRoaXMgdG9rZW4gY2FuJ3QgYmUgMCAqLwotCXBCQUVudHJ5LT5USUQgPSBUSUQ7Ci0JcEJBRW50cnktPlRpbWVPdXRWYWx1ZSA9IFRpbWVPdXQ7Ci0JcEJBRW50cnktPnBBZGFwdGVyID0gcEFkOwotCi0JaWYgKCEocEVudHJ5LT5UWEJBYml0bWFwICYgKDEgPDwgVElEKSkpIHsKLQkJUlRNUEluaXRUaW1lcihwQWQsICZwQkFFbnRyeS0+T1JJQkFUaW1lciwKLQkJCSAgICAgIEdFVF9USU1FUl9GVU5DVElPTihCQU9yaVNlc3Npb25TZXR1cFRpbWVvdXQpLAotCQkJICAgICAgcEJBRW50cnksIEZBTFNFKTsKLQl9IGVsc2UKLQkJUlRNUENhbmNlbFRpbWVyKCZwQkFFbnRyeS0+T1JJQkFUaW1lciwgJkNhbmNlbGxlZCk7Ci0KLQkvKiBzZXQgdGltZXIgdG8gc2VuZCBBRERCQSByZXF1ZXN0ICovCi0JUlRNUFNldFRpbWVyKCZwQkFFbnRyeS0+T1JJQkFUaW1lciwgRGVsYXlUaW1lKTsKLX0KLQotdm9pZCBCQU9yaVNlc3Npb25BZGQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICAgIHN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKnBFbnRyeSwgc3RydWN0IHJ0X2ZyYW1lX2FkZGJhX3JzcCAqIHBGcmFtZSkKLXsKLQlzdHJ1Y3QgcnRfYmFfb3JpX2VudHJ5ICpwQkFFbnRyeSA9IE5VTEw7Ci0JQk9PTEVBTiBDYW5jZWxsZWQ7Ci0JdTggVElEOwotCXUxNiBJZHg7Ci0JdTggKnBPdXRCdWZmZXIyID0gTlVMTDsKLQlpbnQgTlN0YXR1czsKLQl1bnNpZ25lZCBsb25nIEZyYW1lTGVuOwotCXN0cnVjdCBydF9mcmFtZV9iYXIgRnJhbWVCYXI7Ci0KLQlUSUQgPSBwRnJhbWUtPkJhUGFybS5USUQ7Ci0JSWR4ID0gcEVudHJ5LT5CQU9yaVdjaWRBcnJheVtUSURdOwotCXBCQUVudHJ5ID0gJnBBZC0+QkFUYWJsZS5CQU9yaUVudHJ5W0lkeF07Ci0KLQkvKiBTdGFydCBmaWxsIGluIHBhcmFtZXRlcnMuICovCi0JaWYgKChJZHggIT0gMCkgJiYgKHBCQUVudHJ5LT5USUQgPT0gVElEKQotCSAgICAmJiAocEJBRW50cnktPk9SSV9CQV9TdGF0dXMgPT0gT3JpZ2luYXRvcl9XYWl0UmVzKSkgewotCQlwQkFFbnRyeS0+QkFXaW5TaXplID0KLQkJICAgIG1pbihwQkFFbnRyeS0+QkFXaW5TaXplLCAoKHU4KXBGcmFtZS0+QmFQYXJtLkJ1ZlNpemUpKTsKLQkJQkFfTWF4V2luU2l6ZVJlYXNpZ24ocEFkLCBwRW50cnksICZwQkFFbnRyeS0+QkFXaW5TaXplKTsKLQotCQlwQkFFbnRyeS0+VGltZU91dFZhbHVlID0gcEZyYW1lLT5UaW1lT3V0VmFsdWU7Ci0JCXBCQUVudHJ5LT5PUklfQkFfU3RhdHVzID0gT3JpZ2luYXRvcl9Eb25lOwotCQlwQWQtPkJBVGFibGUubnVtRG9uZU9yaWdpbmF0b3IrKzsKLQotCQkvKiByZXNldCBzZXF1ZW5jZSBudW1iZXIgKi8KLQkJcEJBRW50cnktPlNlcXVlbmNlID0gQkFfT1JJX0lOSVRfU0VROwotCQkvKiBTZXQgQml0bWFwIGZsYWcuICovCi0JCXBFbnRyeS0+VFhCQWJpdG1hcCB8PSAoMSA8PCBUSUQpOwotCQlSVE1QQ2FuY2VsVGltZXIoJnBCQUVudHJ5LT5PUklCQVRpbWVyLCAmQ2FuY2VsbGVkKTsKLQotCQlwQkFFbnRyeS0+T1JJQkFUaW1lci5UaW1lclZhbHVlID0gMDsJLypwRnJhbWUtPlRpbWVPdXRWYWx1ZTsgKi8KLQotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIiVzIDogVFhCQWJpdG1hcCA9ICV4LCBCQVdpblNpemUgPSAlZCwgVGltZU91dCA9ICVsZFxuIiwKLQkJCSAgX19mdW5jX18sIHBFbnRyeS0+VFhCQWJpdG1hcCwgcEJBRW50cnktPkJBV2luU2l6ZSwKLQkJCSAgcEJBRW50cnktPk9SSUJBVGltZXIuVGltZXJWYWx1ZSkpOwotCi0JCS8qIFNFTkQgQkFSIDsgKi8KLQkJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyMik7CS8qR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkgKi8KLQkJaWYgKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykgewotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiQkEgLSBCQU9yaVNlc3Npb25BZGQoKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIFxuIikpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJQmFySGVhZGVySW5pdChwQWQsICZGcmFtZUJhciwKLQkJCSAgICAgIHBBZC0+TWFjVGFiLkNvbnRlbnRbcEJBRW50cnktPldjaWRdLkFkZHIsCi0JCQkgICAgICBwQWQtPkN1cnJlbnRBZGRyZXNzKTsKLQotCQlGcmFtZUJhci5TdGFydGluZ1NlcS5maWVsZC5GcmFnTnVtID0gMDsJLyogbWFrZSBzdXJlIHNlcXVlbmNlIG5vdCBjbGVhciBpbiBERUwgZnVuY3Rpb24uICovCi0JCUZyYW1lQmFyLlN0YXJ0aW5nU2VxLmZpZWxkLlN0YXJ0U2VxID0gcEJBRW50cnktPlNlcXVlbmNlOwkvKiBtYWtlIHN1cmUgc2VxdWVuY2Ugbm90IGNsZWFyIGluIERFTCBmdW5jaXRvbi4gKi8KLQkJRnJhbWVCYXIuQmFyQ29udHJvbC5USUQgPSBwQkFFbnRyeS0+VElEOwkvKiBtYWtlIHN1cmUgc2VxdWVuY2Ugbm90IGNsZWFyIGluIERFTCBmdW5jaXRvbi4gKi8KLQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlcjIsICZGcmFtZUxlbiwKLQkJCQkgIHNpemVvZihzdHJ1Y3QgcnRfZnJhbWVfYmFyKSwgJkZyYW1lQmFyLCBFTkRfT0ZfQVJHUyk7Ci0JCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgUUlEX0FDX0JFLCBwT3V0QnVmZmVyMiwgRnJhbWVMZW4pOwotCQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIyKTsKLQotCQlpZiAocEJBRW50cnktPk9SSUJBVGltZXIuVGltZXJWYWx1ZSkKLQkJCVJUTVBTZXRUaW1lcigmcEJBRW50cnktPk9SSUJBVGltZXIsIHBCQUVudHJ5LT5PUklCQVRpbWVyLlRpbWVyVmFsdWUpOwkvKiBpbiBtU2VjICovCi0JfQotfQotCi1CT09MRUFOIEJBUmVjU2Vzc2lvbkFkZChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQlzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwRW50cnksIHN0cnVjdCBydF9mcmFtZV9hZGRiYV9yZXEgKiBwRnJhbWUpCi17Ci0Jc3RydWN0IHJ0X2JhX3JlY19lbnRyeSAqcEJBRW50cnkgPSBOVUxMOwotCUJPT0xFQU4gU3RhdHVzID0gVFJVRTsKLQlCT09MRUFOIENhbmNlbGxlZDsKLQl1MTYgSWR4OwotCXU4IFRJRDsKLQl1OCBCQVdpblNpemU7Ci0JLyp1MzIgICAgICAgICAgICAgICAgICBWYWx1ZTsgKi8KLQkvKnUzMiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OyAqLwotCi0JQVNTRVJUKHBFbnRyeSk7Ci0KLQkvKiBmaW5kIFRJRCAqLwotCVRJRCA9IHBGcmFtZS0+QmFQYXJtLlRJRDsKLQotCUJBV2luU2l6ZSA9Ci0JICAgIG1pbigoKHU4KXBGcmFtZS0+QmFQYXJtLkJ1ZlNpemUpLAotCQkodTgpcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlJ4QkFXaW5MaW1pdCk7Ci0KLQkvKiBJbnRlbCBwYXRjaCAqLwotCWlmIChCQVdpblNpemUgPT0gMCkgewotCQlCQVdpblNpemUgPSA2NDsKLQl9Ci0KLQlJZHggPSBwRW50cnktPkJBUmVjV2NpZEFycmF5W1RJRF07Ci0KLQlpZiAoSWR4ID09IDApIHsKLQkJcEJBRW50cnkgPSBCQVRhYmxlQWxsb2NSZWNFbnRyeShwQWQsICZJZHgpOwotCX0gZWxzZSB7Ci0JCXBCQUVudHJ5ID0gJnBBZC0+QkFUYWJsZS5CQVJlY0VudHJ5W0lkeF07Ci0JCS8qIGZsdXNoIGFsbCBwZW5kaW5nIHJlb3JkZXJpbmcgbXBkdXMgKi8KLQkJYmFfcmVmcmVzaF9yZW9yZGVyaW5nX21wZHVzKHBBZCwgcEJBRW50cnkpOwotCX0KLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCIlcyglbGQpOiBJZHggPSAlZCwgQkFXaW5TaXplKHJlcSAlZCkgPSAlZFxuIiwgX19mdW5jX18sCi0JCSAgcEFkLT5CQVRhYmxlLm51bUFzUmVjaXBpZW50LCBJZHgsIHBGcmFtZS0+QmFQYXJtLkJ1ZlNpemUsCi0JCSAgQkFXaW5TaXplKSk7Ci0KLQkvKiBTdGFydCBmaWxsIGluIHBhcmFtZXRlcnMuICovCi0JaWYgKHBCQUVudHJ5ICE9IE5VTEwpIHsKLQkJQVNTRVJUKHBCQUVudHJ5LT5saXN0LnFsZW4gPT0gMCk7Ci0KLQkJcEJBRW50cnktPlJFQ19CQV9TdGF0dXMgPSBSZWNpcGllbnRfSGFuZGxlUmVzOwotCQlwQkFFbnRyeS0+QkFXaW5TaXplID0gQkFXaW5TaXplOwotCQlwQkFFbnRyeS0+V2NpZCA9IHBFbnRyeS0+QWlkOwotCQlwQkFFbnRyeS0+VElEID0gVElEOwotCQlwQkFFbnRyeS0+VGltZU91dFZhbHVlID0gcEZyYW1lLT5UaW1lT3V0VmFsdWU7Ci0JCXBCQUVudHJ5LT5SRUNfQkFfU3RhdHVzID0gUmVjaXBpZW50X0FjY2VwdDsKLQkJLyogaW5pdGlhbCBzZXF1ZW5jZSBudW1iZXIgKi8KLQkJcEJBRW50cnktPkxhc3RJbmRTZXEgPSBSRVNFVF9SQ1ZfU0VROwkvKnBGcmFtZS0+QmFTdGFydFNlcS5maWVsZC5TdGFydFNlcTsgKi8KLQotCQlEQkdQUklOVChSVF9ERUJVR19PRkYsCi0JCQkgKCJTdGFydCBTZXEgPSAlMDh4XG4iLAotCQkJICBwRnJhbWUtPkJhU3RhcnRTZXEuZmllbGQuU3RhcnRTZXEpKTsKLQotCQlpZiAocEVudHJ5LT5SWEJBYml0bWFwICYgKDEgPDwgVElEKSkgewotCQkJUlRNUENhbmNlbFRpbWVyKCZwQkFFbnRyeS0+UkVDQkFUaW1lciwgJkNhbmNlbGxlZCk7Ci0JCX0gZWxzZSB7Ci0JCQlSVE1QSW5pdFRpbWVyKHBBZCwgJnBCQUVudHJ5LT5SRUNCQVRpbWVyLAotCQkJCSAgICAgIEdFVF9USU1FUl9GVU5DVElPTgotCQkJCSAgICAgIChCQVJlY1Nlc3Npb25JZGxlVGltZW91dCksIHBCQUVudHJ5LAotCQkJCSAgICAgIFRSVUUpOwotCQl9Ci0KLQkJLyogU2V0IEJpdG1hcCBmbGFnLiAqLwotCQlwRW50cnktPlJYQkFiaXRtYXAgfD0gKDEgPDwgVElEKTsKLQkJcEVudHJ5LT5CQVJlY1djaWRBcnJheVtUSURdID0gSWR4OwotCi0JCXBFbnRyeS0+QkFEZWNsaW5lQml0bWFwICY9IH4oMSA8PCBUSUQpOwotCi0JCS8qIFNldCBCQSBzZXNzaW9uIG1hc2sgaW4gV0NJRCB0YWJsZS4gKi8KLQkJUlRNUF9BRERfQkFfU0VTU0lPTl9UT19BU0lDKHBBZCwgcEVudHJ5LT5BaWQsIFRJRCk7Ci0KLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJNQUNFbnRyeVslZF1SWEJBYml0bWFwID0gMHgleC4gQkFSZWNXY2lkQXJyYXk9JWRcbiIsCi0JCQkgIHBFbnRyeS0+QWlkLCBwRW50cnktPlJYQkFiaXRtYXAsCi0JCQkgIHBFbnRyeS0+QkFSZWNXY2lkQXJyYXlbVElEXSkpOwotCX0gZWxzZSB7Ci0JCVN0YXR1cyA9IEZBTFNFOwotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSgiQ2FuJ3QgQWNjZXB0IEFEREJBIGZvciAlcE0gVElEID0gJWRcbiIsCi0JCQkJcEVudHJ5LT5BZGRyLCBUSUQpKTsKLQl9Ci0JcmV0dXJuIChTdGF0dXMpOwotfQotCi1zdHJ1Y3QgcnRfYmFfcmVjX2VudHJ5ICpCQVRhYmxlQWxsb2NSZWNFbnRyeShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHUxNiAqIElkeCkKLXsKLQlpbnQgaTsKLQlzdHJ1Y3QgcnRfYmFfcmVjX2VudHJ5ICpwQkFFbnRyeSA9IE5VTEw7Ci0KLQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPkJBVGFiTG9jayk7Ci0KLQlpZiAocEFkLT5CQVRhYmxlLm51bUFzUmVjaXBpZW50ID49IE1BWF9CQVJFQ0lfU0VTU0lPTikgewotCQlEQkdQUklOVChSVF9ERUJVR19PRkYsICgiQkEgUmVjaXBlaW50IFNlc3Npb24gKCVsZCkgPiAlZFxuIiwKLQkJCQkJcEFkLT5CQVRhYmxlLm51bUFzUmVjaXBpZW50LAotCQkJCQlNQVhfQkFSRUNJX1NFU1NJT04pKTsKLQkJZ290byBkb25lOwotCX0KLQkvKiByZXNlcnZlIGlkeCAwIHRvIGlkZW50aWZ5IEJBV2NpZEFycmF5W1RJRF0gYXMgZW1wdHkgKi8KLQlmb3IgKGkgPSAxOyBpIDwgTUFYX0xFTl9PRl9CQV9SRUNfVEFCTEU7IGkrKykgewotCQlwQkFFbnRyeSA9ICZwQWQtPkJBVGFibGUuQkFSZWNFbnRyeVtpXTsKLQkJaWYgKChwQkFFbnRyeS0+UkVDX0JBX1N0YXR1cyA9PSBSZWNpcGllbnRfTk9ORSkpIHsKLQkJCS8qIGdldCBvbmUgKi8KLQkJCXBBZC0+QkFUYWJsZS5udW1Bc1JlY2lwaWVudCsrOwotCQkJcEJBRW50cnktPlJFQ19CQV9TdGF0dXMgPSBSZWNpcGllbnRfVVNFRDsKLQkJCSpJZHggPSBpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLWRvbmU6Ci0JTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5CQVRhYkxvY2spOwotCXJldHVybiBwQkFFbnRyeTsKLX0KLQotc3RydWN0IHJ0X2JhX29yaV9lbnRyeSAqQkFUYWJsZUFsbG9jT3JpRW50cnkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1MTYgKiBJZHgpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IHJ0X2JhX29yaV9lbnRyeSAqcEJBRW50cnkgPSBOVUxMOwotCi0JTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5CQVRhYkxvY2spOwotCi0JaWYgKHBBZC0+QkFUYWJsZS5udW1Bc09yaWdpbmF0b3IgPj0gKE1BWF9MRU5fT0ZfQkFfT1JJX1RBQkxFKSkgewotCQlnb3RvIGRvbmU7Ci0JfQotCS8qIHJlc2VydmUgaWR4IDAgdG8gaWRlbnRpZnkgQkFXY2lkQXJyYXlbVElEXSBhcyBlbXB0eSAqLwotCWZvciAoaSA9IDE7IGkgPCBNQVhfTEVOX09GX0JBX09SSV9UQUJMRTsgaSsrKSB7Ci0JCXBCQUVudHJ5ID0gJnBBZC0+QkFUYWJsZS5CQU9yaUVudHJ5W2ldOwotCQlpZiAoKHBCQUVudHJ5LT5PUklfQkFfU3RhdHVzID09IE9yaWdpbmF0b3JfTk9ORSkpIHsKLQkJCS8qIGdldCBvbmUgKi8KLQkJCXBBZC0+QkFUYWJsZS5udW1Bc09yaWdpbmF0b3IrKzsKLQkJCXBCQUVudHJ5LT5PUklfQkFfU3RhdHVzID0gT3JpZ2luYXRvcl9VU0VEOwotCQkJcEJBRW50cnktPnBBZGFwdGVyID0gcEFkOwotCQkJKklkeCA9IGk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotZG9uZToKLQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPkJBVGFiTG9jayk7Ci0JcmV0dXJuIHBCQUVudHJ5OwotfQotCi12b2lkIEJBVGFibGVGcmVlT3JpRW50cnkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1bnNpZ25lZCBsb25nIElkeCkKLXsKLQlzdHJ1Y3QgcnRfYmFfb3JpX2VudHJ5ICpwQkFFbnRyeSA9IE5VTEw7Ci0Jc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcEVudHJ5OwotCi0JaWYgKChJZHggPT0gMCkgfHwgKElkeCA+PSBNQVhfTEVOX09GX0JBX09SSV9UQUJMRSkpCi0JCXJldHVybjsKLQotCXBCQUVudHJ5ID0gJnBBZC0+QkFUYWJsZS5CQU9yaUVudHJ5W0lkeF07Ci0KLQlpZiAocEJBRW50cnktPk9SSV9CQV9TdGF0dXMgIT0gT3JpZ2luYXRvcl9OT05FKSB7Ci0JCXBFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W3BCQUVudHJ5LT5XY2lkXTsKLQkJcEVudHJ5LT5CQU9yaVdjaWRBcnJheVtwQkFFbnRyeS0+VElEXSA9IDA7Ci0KLQkJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5CQVRhYkxvY2spOwotCQlpZiAocEJBRW50cnktPk9SSV9CQV9TdGF0dXMgPT0gT3JpZ2luYXRvcl9Eb25lKSB7Ci0JCQlwQWQtPkJBVGFibGUubnVtRG9uZU9yaWdpbmF0b3IgLT0gMTsKLQkJCXBFbnRyeS0+VFhCQWJpdG1hcCAmPSAofigxIDw8IChwQkFFbnRyeS0+VElEKSkpOwotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiQkFUYWJsZUZyZWVPcmlFbnRyeSBudW1Bc09yaWdpbmF0b3I9ICVsZFxuIiwKLQkJCQkgIHBBZC0+QkFUYWJsZS5udW1Bc1JlY2lwaWVudCkpOwotCQkJLyogRXJhc2UgQml0bWFwIGZsYWcuICovCi0JCX0KLQotCQlBU1NFUlQocEFkLT5CQVRhYmxlLm51bUFzT3JpZ2luYXRvciAhPSAwKTsKLQotCQlwQWQtPkJBVGFibGUubnVtQXNPcmlnaW5hdG9yIC09IDE7Ci0KLQkJcEJBRW50cnktPk9SSV9CQV9TdGF0dXMgPSBPcmlnaW5hdG9yX05PTkU7Ci0JCXBCQUVudHJ5LT5Ub2tlbiA9IDA7Ci0JCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+QkFUYWJMb2NrKTsKLQl9Ci19Ci0KLXZvaWQgQkFUYWJsZUZyZWVSZWNFbnRyeShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHVuc2lnbmVkIGxvbmcgSWR4KQotewotCXN0cnVjdCBydF9iYV9yZWNfZW50cnkgKnBCQUVudHJ5ID0gTlVMTDsKLQlzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwRW50cnk7Ci0KLQlpZiAoKElkeCA9PSAwKSB8fCAoSWR4ID49IE1BWF9MRU5fT0ZfQkFfUkVDX1RBQkxFKSkKLQkJcmV0dXJuOwotCi0JcEJBRW50cnkgPSAmcEFkLT5CQVRhYmxlLkJBUmVjRW50cnlbSWR4XTsKLQotCWlmIChwQkFFbnRyeS0+UkVDX0JBX1N0YXR1cyAhPSBSZWNpcGllbnRfTk9ORSkgewotCQlwRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFtwQkFFbnRyeS0+V2NpZF07Ci0JCXBFbnRyeS0+QkFSZWNXY2lkQXJyYXlbcEJBRW50cnktPlRJRF0gPSAwOwotCi0JCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+QkFUYWJMb2NrKTsKLQotCQlBU1NFUlQocEFkLT5CQVRhYmxlLm51bUFzUmVjaXBpZW50ICE9IDApOwotCi0JCXBBZC0+QkFUYWJsZS5udW1Bc1JlY2lwaWVudCAtPSAxOwotCi0JCXBCQUVudHJ5LT5SRUNfQkFfU3RhdHVzID0gUmVjaXBpZW50X05PTkU7Ci0JCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+QkFUYWJMb2NrKTsKLQl9Ci19Ci0KLXZvaWQgQkFPcmlTZXNzaW9uVGVhckRvd24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICB1OCBXY2lkLAotCQkJICB1OCBUSUQsCi0JCQkgIElOIEJPT0xFQU4gYlBhc3NpdmUsIElOIEJPT0xFQU4gYkZvcmNlU2VuZCkKLXsKLQl1bnNpZ25lZCBsb25nIElkeCA9IDA7Ci0Jc3RydWN0IHJ0X2JhX29yaV9lbnRyeSAqcEJBRW50cnk7Ci0JQk9PTEVBTiBDYW5jZWxsZWQ7Ci0KLQlpZiAoV2NpZCA+PSBNQVhfTEVOX09GX01BQ19UQUJMRSkgewotCQlyZXR1cm47Ci0JfQotCS8qICovCi0JLyogTG9jYXRlIGNvcnJlc3BvbmRpbmcgQkEgT3JpZ2luYXRvciBFbnRyeSBpbiBCQSBUYWJsZSB3aXRoIHRoZSAocEFkZHIsVElEKS4gKi8KLQkvKiAqLwotCUlkeCA9IHBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0uQkFPcmlXY2lkQXJyYXlbVElEXTsKLQlpZiAoKElkeCA9PSAwKSB8fCAoSWR4ID49IE1BWF9MRU5fT0ZfQkFfT1JJX1RBQkxFKSkgewotCQlpZiAoYkZvcmNlU2VuZCA9PSBUUlVFKSB7Ci0JCQkvKiBmb3JjZSBzZW5kIHNwZWNpZmllZCBUSUQgRGVsQkEgKi8KLQkJCXN0cnVjdCBydF9tbG1lX2RlbGJhX3JlcSBEZWxiYVJlcTsKLQkJCXN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0gPQotCQkJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0pLAotCQkJCQlNRU1fQUxMT0NfRkxBRyk7Ci0JCQlpZiAoRWxlbSAhPSBOVUxMKSB7Ci0JCQkJTmRpc1plcm9NZW1vcnkoJkRlbGJhUmVxLCBzaXplb2YoRGVsYmFSZXEpKTsKLQkJCQlOZGlzWmVyb01lbW9yeShFbGVtLCBzaXplb2Yoc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSkpOwotCi0JCQkJQ09QWV9NQUNfQUREUihEZWxiYVJlcS5BZGRyLAotCQkJCQkgICAgICBwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdLkFkZHIpOwotCQkJCURlbGJhUmVxLldjaWQgPSBXY2lkOwotCQkJCURlbGJhUmVxLlRJRCA9IFRJRDsKLQkJCQlEZWxiYVJlcS5Jbml0aWF0b3IgPSBPUklHSU5BVE9SOwotCQkJCUVsZW0tPk1zZ0xlbiA9IHNpemVvZihEZWxiYVJlcSk7Ci0JCQkJTmRpc01vdmVNZW1vcnkoRWxlbS0+TXNnLCAmRGVsYmFSZXEsCi0JCQkJCSAgICAgICBzaXplb2YoRGVsYmFSZXEpKTsKLQkJCQlNbG1lREVMQkFBY3Rpb24ocEFkLCBFbGVtKTsKLQkJCQlrZnJlZShFbGVtKTsKLQkJCX0gZWxzZSB7Ci0JCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkJCSAoIiVzKGJGb3JjZVNlbmQpOmFsbG9jIG1lbW9yeSBmYWlsZWQhXG4iLAotCQkJCQkgIF9fZnVuY19fKSk7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm47Ci0JfQotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIiVzPT09PldjaWQ9JWQuVElEPSVkIFxuIiwgX19mdW5jX18sIFdjaWQsIFRJRCkpOwotCi0JcEJBRW50cnkgPSAmcEFkLT5CQVRhYmxlLkJBT3JpRW50cnlbSWR4XTsKLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJICgiXHQ9PT0+SWR4ID0gJWxkLCBXY2lkPSVkLlRJRD0lZCwgT1JJX0JBX1N0YXR1cyA9ICVkIFxuIiwgSWR4LAotCQkgIFdjaWQsIFRJRCwgcEJBRW50cnktPk9SSV9CQV9TdGF0dXMpKTsKLQkvKiAqLwotCS8qIFByZXBhcmUgRGVsQkEgYWN0aW9uIGZyYW1lIGFuZCBzZW5kIHRvIHRoZSBwZWVyLiAqLwotCS8qICovCi0JaWYgKChiUGFzc2l2ZSA9PSBGQUxTRSkgJiYgKFRJRCA9PSBwQkFFbnRyeS0+VElEKQotCSAgICAmJiAocEJBRW50cnktPk9SSV9CQV9TdGF0dXMgPT0gT3JpZ2luYXRvcl9Eb25lKSkgewotCQlzdHJ1Y3QgcnRfbWxtZV9kZWxiYV9yZXEgRGVsYmFSZXE7Ci0JCXN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0gPQotCQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSksCi0JCQkJTUVNX0FMTE9DX0ZMQUcpOwotCQlpZiAoRWxlbSAhPSBOVUxMKSB7Ci0JCQlOZGlzWmVyb01lbW9yeSgmRGVsYmFSZXEsIHNpemVvZihEZWxiYVJlcSkpOwotCQkJTmRpc1plcm9NZW1vcnkoRWxlbSwgc2l6ZW9mKHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0pKTsKLQotCQkJQ09QWV9NQUNfQUREUihEZWxiYVJlcS5BZGRyLAotCQkJCSAgICAgIHBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0uQWRkcik7Ci0JCQlEZWxiYVJlcS5XY2lkID0gV2NpZDsKLQkJCURlbGJhUmVxLlRJRCA9IHBCQUVudHJ5LT5USUQ7Ci0JCQlEZWxiYVJlcS5Jbml0aWF0b3IgPSBPUklHSU5BVE9SOwotCQkJRWxlbS0+TXNnTGVuID0gc2l6ZW9mKERlbGJhUmVxKTsKLQkJCU5kaXNNb3ZlTWVtb3J5KEVsZW0tPk1zZywgJkRlbGJhUmVxLCBzaXplb2YoRGVsYmFSZXEpKTsKLQkJCU1sbWVERUxCQUFjdGlvbihwQWQsIEVsZW0pOwotCQkJa2ZyZWUoRWxlbSk7Ci0JCX0gZWxzZSB7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCQkgKCIlcygpOmFsbG9jIG1lbW9yeSBmYWlsZWQhXG4iLCBfX2Z1bmNfXykpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCVJUTVBDYW5jZWxUaW1lcigmcEJBRW50cnktPk9SSUJBVGltZXIsICZDYW5jZWxsZWQpOwotCUJBVGFibGVGcmVlT3JpRW50cnkocEFkLCBJZHgpOwotCi0JaWYgKGJQYXNzaXZlKSB7Ci0JCS8qQkFPcmlTZXNzaW9uU2V0VXAocEFkLCAmcEFkLT5NYWNUYWIuQ29udGVudFtXY2lkXSwgVElELCAwLCAxMDAwMCwgVFJVRSk7ICovCi0JfQotfQotCi12b2lkIEJBUmVjU2Vzc2lvblRlYXJEb3duKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgdTggV2NpZCwgdTggVElELCBJTiBCT09MRUFOIGJQYXNzaXZlKQotewotCXVuc2lnbmVkIGxvbmcgSWR4ID0gMDsKLQlzdHJ1Y3QgcnRfYmFfcmVjX2VudHJ5ICpwQkFFbnRyeTsKLQotCWlmIChXY2lkID49IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKSB7Ci0JCXJldHVybjsKLQl9Ci0JLyogKi8KLQkvKiAgTG9jYXRlIGNvcnJlc3BvbmRpbmcgQkEgT3JpZ2luYXRvciBFbnRyeSBpbiBCQSBUYWJsZSB3aXRoIHRoZSAocEFkZHIsVElEKS4gKi8KLQkvKiAqLwotCUlkeCA9IHBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0uQkFSZWNXY2lkQXJyYXlbVElEXTsKLQlpZiAoSWR4ID09IDApCi0JCXJldHVybjsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCIlcz09PT5XY2lkPSVkLlRJRD0lZCBcbiIsIF9fZnVuY19fLCBXY2lkLCBUSUQpKTsKLQotCXBCQUVudHJ5ID0gJnBBZC0+QkFUYWJsZS5CQVJlY0VudHJ5W0lkeF07Ci0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIlx0PT09PklkeCA9ICVsZCwgV2NpZD0lZC5USUQ9JWQsIFJFQ19CQV9TdGF0dXMgPSAlZCBcbiIsIElkeCwKLQkJICBXY2lkLCBUSUQsIHBCQUVudHJ5LT5SRUNfQkFfU3RhdHVzKSk7Ci0JLyogKi8KLQkvKiBQcmVwYXJlIERlbEJBIGFjdGlvbiBmcmFtZSBhbmQgc2VuZCB0byB0aGUgcGVlci4gKi8KLQkvKiAqLwotCWlmICgoVElEID09IHBCQUVudHJ5LT5USUQpCi0JICAgICYmIChwQkFFbnRyeS0+UkVDX0JBX1N0YXR1cyA9PSBSZWNpcGllbnRfQWNjZXB0KSkgewotCQlzdHJ1Y3QgcnRfbWxtZV9kZWxiYV9yZXEgRGVsYmFSZXE7Ci0JCUJPT0xFQU4gQ2FuY2VsbGVkOwotCQkvKnVuc2lnbmVkIGxvbmcgICBvZmZzZXQ7ICovCi0JCS8qdTMyICBWQUxVRTsgKi8KLQotCQlSVE1QQ2FuY2VsVGltZXIoJnBCQUVudHJ5LT5SRUNCQVRpbWVyLCAmQ2FuY2VsbGVkKTsKLQotCQkvKiAqLwotCQkvKiAxLiBTZW5kIERFTEJBIEFjdGlvbiBGcmFtZSAqLwotCQkvKiAqLwotCQlpZiAoYlBhc3NpdmUgPT0gRkFMU0UpIHsKLQkJCXN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0gPQotCQkJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0pLAotCQkJCQlNRU1fQUxMT0NfRkxBRyk7Ci0JCQlpZiAoRWxlbSAhPSBOVUxMKSB7Ci0JCQkJTmRpc1plcm9NZW1vcnkoJkRlbGJhUmVxLCBzaXplb2YoRGVsYmFSZXEpKTsKLQkJCQlOZGlzWmVyb01lbW9yeShFbGVtLCBzaXplb2Yoc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSkpOwotCi0JCQkJQ09QWV9NQUNfQUREUihEZWxiYVJlcS5BZGRyLAotCQkJCQkgICAgICBwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdLkFkZHIpOwotCQkJCURlbGJhUmVxLldjaWQgPSBXY2lkOwotCQkJCURlbGJhUmVxLlRJRCA9IFRJRDsKLQkJCQlEZWxiYVJlcS5Jbml0aWF0b3IgPSBSRUNJUElFTlQ7Ci0JCQkJRWxlbS0+TXNnTGVuID0gc2l6ZW9mKERlbGJhUmVxKTsKLQkJCQlOZGlzTW92ZU1lbW9yeShFbGVtLT5Nc2csICZEZWxiYVJlcSwKLQkJCQkJICAgICAgIHNpemVvZihEZWxiYVJlcSkpOwotCQkJCU1sbWVERUxCQUFjdGlvbihwQWQsIEVsZW0pOwotCQkJCWtmcmVlKEVsZW0pOwotCQkJfSBlbHNlIHsKLQkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCQkJICgiJXMoKTphbGxvYyBtZW1vcnkgZmFpbGVkIVxuIiwKLQkJCQkJICBfX2Z1bmNfXykpOwotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCi0JCS8qICovCi0JCS8qIDIuIEZyZWUgcmVzb3VyY2Ugb2YgQkEgc2Vzc2lvbiAqLwotCQkvKiAqLwotCQkvKiBmbHVzaCBhbGwgcGVuZGluZyByZW9yZGVyaW5nIG1wZHVzICovCi0JCWJhX3JlZnJlc2hfcmVvcmRlcmluZ19tcGR1cyhwQWQsIHBCQUVudHJ5KTsKLQotCQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPkJBVGFiTG9jayk7Ci0KLQkJLyogRXJhc2UgQml0bWFwIGZsYWcuICovCi0JCXBCQUVudHJ5LT5MYXN0SW5kU2VxID0gUkVTRVRfUkNWX1NFUTsKLQkJcEJBRW50cnktPkJBV2luU2l6ZSA9IDA7Ci0JCS8qIEVyYXNlIEJpdG1hcCBmbGFnIGF0IHNvZnR3YXJlIG1hY3RhYmxlICovCi0JCXBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0uUlhCQWJpdG1hcCAmPQotCQkgICAgKH4oMSA8PCAocEJBRW50cnktPlRJRCkpKTsKLQkJcEFkLT5NYWNUYWIuQ29udGVudFtXY2lkXS5CQVJlY1djaWRBcnJheVtUSURdID0gMDsKLQotCQlSVE1QX0RFTF9CQV9TRVNTSU9OX0ZST01fQVNJQyhwQWQsIFdjaWQsIFRJRCk7Ci0KLQkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5CQVRhYkxvY2spOwotCi0JfQotCi0JQkFUYWJsZUZyZWVSZWNFbnRyeShwQWQsIElkeCk7Ci19Ci0KLXZvaWQgQkFTZXNzaW9uVGVhckRvd25BTEwoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1OCBXY2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IE5VTV9PRl9USUQ7IGkrKykgewotCQlCQU9yaVNlc3Npb25UZWFyRG93bihwQWQsIFdjaWQsIGksIEZBTFNFLCBGQUxTRSk7Ci0JCUJBUmVjU2Vzc2lvblRlYXJEb3duKHBBZCwgV2NpZCwgaSwgRkFMU0UpOwotCX0KLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlSZXRyeSBzZW5kaW5nIEFEREJBIFJlcWVzdC4KLQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0JUGFyYW1ldHJzOgotCXA4MDIzSGVhZGVyOiBpZiB0aGlzIGlzIGFscmVhZHkgODAyLjMgZm9ybWF0LCBwODAyM0hlYWRlciBpcyBOVUxMCi0KLQlSZXR1cm4JOiBUUlVFIGlmIHB1dCBpbnRvIHJ4IHJlb3JkZXJpbmcgYnVmZmVyLCBzaG91bGRuJ3QgaW5kaWNhdGVyeGhlcmUuCi0JCQkJRkFMU0UgLCB0aGVuIGNvbnRpbnVlIGluZGljYXRlcnggYXQgdGhpcyBtb21lbnQuCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotdm9pZCBCQU9yaVNlc3Npb25TZXR1cFRpbWVvdXQodm9pZCAqU3lzdGVtU3BlY2lmaWMxLAotCQkJICAgICAgdm9pZCAqRnVuY3Rpb25Db250ZXh0LAotCQkJICAgICAgdm9pZCAqU3lzdGVtU3BlY2lmaWMyLAotCQkJICAgICAgdm9pZCAqU3lzdGVtU3BlY2lmaWMzKQotewotCXN0cnVjdCBydF9iYV9vcmlfZW50cnkgKnBCQUVudHJ5ID0gKHN0cnVjdCBydF9iYV9vcmlfZW50cnkgKilGdW5jdGlvbkNvbnRleHQ7Ci0Jc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcEVudHJ5OwotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZDsKLQotCWlmIChwQkFFbnRyeSA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlwQWQgPSBwQkFFbnRyeS0+cEFkYXB0ZXI7Ci0KLQl7Ci0JCS8qIERvIG5vdGhpbmcgaWYgbW9uaXRvciBtb2RlIGlzIG9uICovCi0JCWlmIChNT05JVE9SX09OKHBBZCkpCi0JCQlyZXR1cm47Ci0JfQotCi0JcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbcEJBRW50cnktPldjaWRdOwotCi0JaWYgKChwQkFFbnRyeS0+T1JJX0JBX1N0YXR1cyA9PSBPcmlnaW5hdG9yX1dhaXRSZXMpCi0JICAgICYmIChwQkFFbnRyeS0+VG9rZW4gPCBPUklfU0VTU0lPTl9NQVhfUkVUUlkpKSB7Ci0JCXN0cnVjdCBydF9tbG1lX2FkZGJhX3JlcSBBZGRiYVJlcTsKLQotCQlOZGlzWmVyb01lbW9yeSgmQWRkYmFSZXEsIHNpemVvZihBZGRiYVJlcSkpOwotCQlDT1BZX01BQ19BRERSKEFkZGJhUmVxLnBBZGRyLCBwRW50cnktPkFkZHIpOwotCQlBZGRiYVJlcS5XY2lkID0gKHU4KShwRW50cnktPkFpZCk7Ci0JCUFkZGJhUmVxLlRJRCA9IHBCQUVudHJ5LT5USUQ7Ci0JCUFkZGJhUmVxLkJhQnVmU2l6ZSA9Ci0JCSAgICBwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuUnhCQVdpbkxpbWl0OwotCQlBZGRiYVJlcS5UaW1lT3V0VmFsdWUgPSAwOwotCQlBZGRiYVJlcS5Ub2tlbiA9IHBCQUVudHJ5LT5Ub2tlbjsKLQkJTWxtZUVucXVldWUocEFkLCBBQ1RJT05fU1RBVEVfTUFDSElORSwgTVQyX01MTUVfQUREX0JBX0NBVEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBydF9tbG1lX2FkZGJhX3JlcSksICh2b2lkICopJiBBZGRiYVJlcSk7Ci0JCVJUTVBfTUxNRV9IQU5ETEVSKHBBZCk7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiQkEgT3JpIFNlc3Npb24gVGltZW91dCglZCkgOiBTZW5kIEFERCBCQSBhZ2FpblxuIiwKLQkJCSAgcEJBRW50cnktPlRva2VuKSk7Ci0KLQkJcEJBRW50cnktPlRva2VuKys7Ci0JCVJUTVBTZXRUaW1lcigmcEJBRW50cnktPk9SSUJBVGltZXIsIE9SSV9CQV9TRVNTSU9OX1RJTUVPVVQpOwotCX0gZWxzZSB7Ci0JCUJBVGFibGVGcmVlT3JpRW50cnkocEFkLCBwRW50cnktPkJBT3JpV2NpZEFycmF5W3BCQUVudHJ5LT5USURdKTsKLQl9Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJUmV0cnkgc2VuZGluZyBBRERCQSBSZXFlc3QuCi0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCVBhcmFtZXRyczoKLQlwODAyM0hlYWRlcjogaWYgdGhpcyBpcyBhbHJlYWR5IDgwMi4zIGZvcm1hdCwgcDgwMjNIZWFkZXIgaXMgTlVMTAotCi0JUmV0dXJuCTogVFJVRSBpZiBwdXQgaW50byByeCByZW9yZGVyaW5nIGJ1ZmZlciwgc2hvdWxkbid0IGluZGljYXRlcnhoZXJlLgotCQkJCUZBTFNFICwgdGhlbiBjb250aW51ZSBpbmRpY2F0ZXJ4IGF0IHRoaXMgbW9tZW50LgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgQkFSZWNTZXNzaW9uSWRsZVRpbWVvdXQodm9pZCAqU3lzdGVtU3BlY2lmaWMxLAotCQkJICAgICB2b2lkICpGdW5jdGlvbkNvbnRleHQsCi0JCQkgICAgIHZvaWQgKlN5c3RlbVNwZWNpZmljMiwgdm9pZCAqU3lzdGVtU3BlY2lmaWMzKQotewotCi0Jc3RydWN0IHJ0X2JhX3JlY19lbnRyeSAqcEJBRW50cnkgPSAoc3RydWN0IHJ0X2JhX3JlY19lbnRyeSAqKUZ1bmN0aW9uQ29udGV4dDsKLQlzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQ7Ci0JdW5zaWduZWQgbG9uZyBOb3czMjsKLQotCWlmIChwQkFFbnRyeSA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlpZiAoKHBCQUVudHJ5LT5SRUNfQkFfU3RhdHVzID09IFJlY2lwaWVudF9BY2NlcHQpKSB7Ci0JCU5kaXNHZXRTeXN0ZW1VcFRpbWUoJk5vdzMyKTsKLQotCQlpZiAoUlRNUF9USU1FX0FGVEVSCi0JCSAgICAoKHVuc2lnbmVkIGxvbmcpTm93MzIsCi0JCSAgICAgKHVuc2lnbmVkIGxvbmcpKHBCQUVudHJ5LT5MYXN0SW5kU2VxQXRUaW1lciArCi0JCQkJICAgICBSRUNfQkFfU0VTU0lPTl9JRExFX1RJTUVPVVQpKSkgewotCQkJcEFkID0gcEJBRW50cnktPnBBZGFwdGVyOwotCQkJLyogZmx1c2ggYWxsIHBlbmRpbmcgcmVvcmRlcmluZyBtcGR1cyAqLwotCQkJYmFfcmVmcmVzaF9yZW9yZGVyaW5nX21wZHVzKHBBZCwgcEJBRW50cnkpOwotCQkJREJHUFJJTlQoUlRfREVCVUdfT0ZGLAotCQkJCSAoIiVsZDogUkVDIEJBIHNlc3Npb24gVGltZW91dFxuIiwgTm93MzIpKTsKLQkJfQotCX0KLX0KLQotdm9pZCBQZWVyQWRkQkFSZXFBY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKQotewotCS8qICAgICAgNy40LjQuMSAqLwotCS8qdW5zaWduZWQgbG9uZyBJZHg7ICovCi0JdTggU3RhdHVzID0gMTsKLQl1OCBwQWRkcls2XTsKLQlzdHJ1Y3QgcnRfZnJhbWVfYWRkYmFfcnNwIEFERGZyYW1lOwotCXU4ICpwT3V0QnVmZmVyID0gTlVMTDsKLQlpbnQgTlN0YXR1czsKLQlzdHJ1Y3QgcnRfZnJhbWVfYWRkYmFfcmVxICogcEFkZHJlcUZyYW1lID0gTlVMTDsKLQkvKnU4ICAgICAgICAgQnVmU2l6ZTsgKi8KLQl1bnNpZ25lZCBsb25nIEZyYW1lTGVuOwotCXVuc2lnbmVkIGxvbmcgKnB0ZW1wOwotCXN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKnBNYWNFbnRyeTsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCIlcyA9PT4gKFdjaWQgPSAlZClcbiIsIF9fZnVuY19fLCBFbGVtLT5XY2lkKSk7Ci0KLQkvKmhleF9kdW1wKCJBZGRCQVJlcSIsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuKTsgKi8KLQotCS8qQUREQkEgUmVxdWVzdCBmcm9tIHVua25vd24gcGVlciwgaWdub3JlIHRoaXMuICovCi0JaWYgKEVsZW0tPldjaWQgPj0gTUFYX0xFTl9PRl9NQUNfVEFCTEUpCi0JCXJldHVybjsKLQotCXBNYWNFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W0VsZW0tPldjaWRdOwotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkJBIC0gUGVlckFkZEJBUmVxQWN0aW9uLS0tLT4gXG4iKSk7Ci0JcHRlbXAgPSAodW5zaWduZWQgbG9uZyAqKUVsZW0tPk1zZzsKLQkvKkRCR1BSSU5UX1JBVyhSVF9ERUJVR19FTVUsICgiJTA4eDo6ICUwOHg6OiAlMDh4OjogJTA4eDo6ICUwOHg6OiAlMDh4OjogJTA4eDo6ICUwOHg6OiAlMDh4XG4iLCAqKHB0ZW1wKSwgKihwdGVtcCsxKSwgKihwdGVtcCsyKSwgKihwdGVtcCszKSwgKihwdGVtcCs0KSwgKihwdGVtcCs1KSwgKihwdGVtcCs2KSwgKihwdGVtcCs3KSwgKihwdGVtcCs4KSkpOyAqLwotCi0JaWYgKFBlZXJBZGRCQVJlcUFjdGlvblNhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuLCBwQWRkcikpIHsKLQotCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLmJCQURlY2xpbmUgPT0gRkFMU0UpCi0JCSAgICAmJiBJU19IVF9TVEEocE1hY0VudHJ5KSkgewotCQkJcEFkZHJlcUZyYW1lID0gKHN0cnVjdCBydF9mcmFtZV9hZGRiYV9yZXEgKikgKCZFbGVtLT5Nc2dbMF0pOwotCQkJREJHUFJJTlQoUlRfREVCVUdfT0ZGLAotCQkJCSAoIlJjdiBXY2lkKCVkKSBBZGRCQVJlcVxuIiwgRWxlbS0+V2NpZCkpOwotCQkJaWYgKEJBUmVjU2Vzc2lvbkFkZAotCQkJICAgIChwQWQsICZwQWQtPk1hY1RhYi5Db250ZW50W0VsZW0tPldjaWRdLAotCQkJICAgICBwQWRkcmVxRnJhbWUpKQotCQkJCVN0YXR1cyA9IDA7Ci0JCQllbHNlCi0JCQkJU3RhdHVzID0gMzg7CS8qIG1vcmUgcGFyYW1ldGVycyBoYXZlIGludmFsaWQgdmFsdWVzICovCi0JCX0gZWxzZSB7Ci0JCQlTdGF0dXMgPSAzNzsJLyogdGhlIHJlcXVlc3QgaGFzIGJlZW4gZGVjbGluZWQuICovCi0JCX0KLQl9Ci0KLQlpZiAocEFkLT5NYWNUYWIuQ29udGVudFtFbGVtLT5XY2lkXS5WYWxpZEFzQ0xJKQotCQlBU1NFUlQocEFkLT5NYWNUYWIuQ29udGVudFtFbGVtLT5XY2lkXS5Tc3QgPT0gU1NUX0FTU09DKTsKLQotCXBBZGRyZXFGcmFtZSA9IChzdHJ1Y3QgcnRfZnJhbWVfYWRkYmFfcmVxICopICgmRWxlbS0+TXNnWzBdKTsKLQkvKiAyLiBBbHdheXMgc2VuZCBiYWNrIEFEREJBIFJlc3BvbnNlICovCi0JTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsJLypHZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeSAqLwotCWlmIChOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJBQ1RJT04gLSBQZWVyQkFBY3Rpb24oKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIFxuIikpOwotCQlyZXR1cm47Ci0JfQotCi0JTmRpc1plcm9NZW1vcnkoJkFERGZyYW1lLCBzaXplb2Yoc3RydWN0IHJ0X2ZyYW1lX2FkZGJhX3JzcCkpOwotCi0JLyogMi0xLiBQcmVwYXJlIEFEREJBIFJlc3BvbnNlIGZyYW1lLiAqLwotCXsKLQkJaWYgKEFESE9DX09OKHBBZCkpCi0JCQlBY3RIZWFkZXJJbml0KHBBZCwgJkFERGZyYW1lLkhkciwgcEFkZHIsCi0JCQkJICAgICAgcEFkLT5DdXJyZW50QWRkcmVzcywKLQkJCQkgICAgICBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7Ci0JCWVsc2UKLQkJCUFjdEhlYWRlckluaXQocEFkLCAmQUREZnJhbWUuSGRyLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwKLQkJCQkgICAgICBwQWQtPkN1cnJlbnRBZGRyZXNzLCBwQWRkcik7Ci0JfQotCi0JQUREZnJhbWUuQ2F0ZWdvcnkgPSBDQVRFR09SWV9CQTsKLQlBRERmcmFtZS5BY3Rpb24gPSBBRERCQV9SRVNQOwotCUFERGZyYW1lLlRva2VuID0gcEFkZHJlcUZyYW1lLT5Ub2tlbjsKLQkvKiBXaGF0IGlzIHRoZSBTdGF0dXMgY29kZT8/ICBuZWVkIHRvIGNoZWNrLiAqLwotCUFERGZyYW1lLlN0YXR1c0NvZGUgPSBTdGF0dXM7Ci0JQUREZnJhbWUuQmFQYXJtLkJBUG9saWN5ID0gSU1NRURfQkE7Ci0JQUREZnJhbWUuQmFQYXJtLkFNU0RVU3VwcG9ydGVkID0gMDsKLQlBRERmcmFtZS5CYVBhcm0uVElEID0gcEFkZHJlcUZyYW1lLT5CYVBhcm0uVElEOwotCUFERGZyYW1lLkJhUGFybS5CdWZTaXplID0KLQkgICAgbWluKCgodTgpcEFkZHJlcUZyYW1lLT5CYVBhcm0uQnVmU2l6ZSksCi0JCSh1OClwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuUnhCQVdpbkxpbWl0KTsKLQlpZiAoQUREZnJhbWUuQmFQYXJtLkJ1ZlNpemUgPT0gMCkgewotCQlBRERmcmFtZS5CYVBhcm0uQnVmU2l6ZSA9IDY0OwotCX0KLQlBRERmcmFtZS5UaW1lT3V0VmFsdWUgPSAwOwkvKnBBZGRyZXFGcmFtZS0+VGltZU91dFZhbHVlOyAqLwotCi0JKih1MTYgKikgKCZBRERmcmFtZS5CYVBhcm0pID0KLQkgICAgY3B1MmxlMTYoKih1MTYgKikgKCZBRERmcmFtZS5CYVBhcm0pKTsKLQlBRERmcmFtZS5TdGF0dXNDb2RlID0gY3B1MmxlMTYoQUREZnJhbWUuU3RhdHVzQ29kZSk7Ci0JQUREZnJhbWUuVGltZU91dFZhbHVlID0gY3B1MmxlMTYoQUREZnJhbWUuVGltZU91dFZhbHVlKTsKLQotCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICZGcmFtZUxlbiwKLQkJCSAgc2l6ZW9mKHN0cnVjdCBydF9mcmFtZV9hZGRiYV9yc3ApLCAmQUREZnJhbWUsIEVORF9PRl9BUkdTKTsKLQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIFFJRF9BQ19CRSwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOwotCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJICgiJXMoJWQpOiBUSUQoJWQpLCBCdWZTaXplKCVkKSA8PT0gXG4iLCBfX2Z1bmNfXywgRWxlbS0+V2NpZCwKLQkJICBBRERmcmFtZS5CYVBhcm0uVElELCBBRERmcmFtZS5CYVBhcm0uQnVmU2l6ZSkpOwotfQotCi12b2lkIFBlZXJBZGRCQVJzcEFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pCi17Ci0JLyp1OCAgICAgICAgIElkeCwgaTsgKi8KLQkvKnU4ICogICAgICAgICAgICAgICAgICBwT3V0QnVmZmVyID0gTlVMTDsgKi8KLQlzdHJ1Y3QgcnRfZnJhbWVfYWRkYmFfcnNwICogcEZyYW1lID0gTlVMTDsKLQkvKnN0cnVjdCBydF9iYV9vcmlfZW50cnkgKnBCQUVudHJ5OyAqLwotCi0JLypBRERCQSBSZXNwb25zZSBmcm9tIHVua25vd24gcGVlciwgaWdub3JlIHRoaXMuICovCi0JaWYgKEVsZW0tPldjaWQgPj0gTUFYX0xFTl9PRl9NQUNfVEFCTEUpCi0JCXJldHVybjsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzID09PiBXY2lkKCVkKVxuIiwgX19mdW5jX18sIEVsZW0tPldjaWQpKTsKLQotCS8qaGV4X2R1bXAoIlBlZXJBZGRCQVJzcEFjdGlvbigpIiwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4pOyAqLwotCi0JaWYgKFBlZXJBZGRCQVJzcEFjdGlvblNhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuKSkgewotCQlwRnJhbWUgPSAoc3RydWN0IHJ0X2ZyYW1lX2FkZGJhX3JzcCAqKSAoJkVsZW0tPk1zZ1swXSk7Ci0KLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJcdFx0IFN0YXR1c0NvZGUgPSAlZFxuIiwgcEZyYW1lLT5TdGF0dXNDb2RlKSk7Ci0JCXN3aXRjaCAocEZyYW1lLT5TdGF0dXNDb2RlKSB7Ci0JCWNhc2UgMDoKLQkJCS8qIEkgd2FudCBhIEJBc2Vzc2lvbiB3aXRoIHRoaXMgcGVlciBhcyBhbiBvcmlnaW5hdG9yLiAqLwotCQkJQkFPcmlTZXNzaW9uQWRkKHBBZCwgJnBBZC0+TWFjVGFiLkNvbnRlbnRbRWxlbS0+V2NpZF0sCi0JCQkJCXBGcmFtZSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCS8qIGNoZWNrIHN0YXR1cyA9PSBVU0VEID8/PyAqLwotCQkJQkFPcmlTZXNzaW9uVGVhckRvd24ocEFkLCBFbGVtLT5XY2lkLAotCQkJCQkgICAgIHBGcmFtZS0+QmFQYXJtLlRJRCwgVFJVRSwgRkFMU0UpOwotCQkJYnJlYWs7Ci0JCX0KLQkJLyogUmN2IERlY2xpbmUgU3RhdHVzQ29kZSAqLwotCQlpZiAoKHBGcmFtZS0+U3RhdHVzQ29kZSA9PSAzNykKLQkJICAgIHx8ICgocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkgJiYgU1RBX1RHTl9XSUZJX09OKHBBZCkKLQkJCSYmIChwRnJhbWUtPlN0YXR1c0NvZGUgIT0gMCkpCi0JCSAgICApIHsKLQkJCXBBZC0+TWFjVGFiLkNvbnRlbnRbRWxlbS0+V2NpZF0uQkFEZWNsaW5lQml0bWFwIHw9Ci0JCQkgICAgMSA8PCBwRnJhbWUtPkJhUGFybS5USUQ7Ci0JCX0KLQl9Ci19Ci0KLXZvaWQgUGVlckRlbEJBQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSkKLXsKLQkvKnU4ICAgICAgICAgICAgICAgICAgICAgICAgIElkeDsgKi8KLQkvKnU4ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcE91dEJ1ZmZlciA9IE5VTEw7ICovCi0Jc3RydWN0IHJ0X2ZyYW1lX2RlbGJhX3JlcSAqIHBEZWxGcmFtZSA9IE5VTEw7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlcyA9PT5cbiIsIF9fZnVuY19fKSk7Ci0JLypERUxCQSBSZXF1ZXN0IGZyb20gdW5rbm93biBwZWVyLCBpZ25vcmUgdGhpcy4gKi8KLQlpZiAoUGVlckRlbEJBQWN0aW9uU2FuaXR5KHBBZCwgRWxlbS0+V2NpZCwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4pKSB7Ci0JCXBEZWxGcmFtZSA9IChzdHJ1Y3QgcnRfZnJhbWVfZGVsYmFfcmVxICopICgmRWxlbS0+TXNnWzBdKTsKLQkJaWYgKHBEZWxGcmFtZS0+RGVsYmFQYXJtLkluaXRpYXRvciA9PSBPUklHSU5BVE9SKSB7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCJCQSAtIFBlZXJEZWxCQUFjdGlvbi0tLS0+IE9SSUdJTkFUT1JcbiIpKTsKLQkJCUJBUmVjU2Vzc2lvblRlYXJEb3duKHBBZCwgRWxlbS0+V2NpZCwKLQkJCQkJICAgICBwRGVsRnJhbWUtPkRlbGJhUGFybS5USUQsIFRSVUUpOwotCQl9IGVsc2UgewotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiQkEgLSBQZWVyRGVsQkFBY3Rpb24tLS0tPiBSRUNJUElFTlQsIFJlYXNvbiA9ICVkXG4iLAotCQkJCSAgcERlbEZyYW1lLT5SZWFzb25Db2RlKSk7Ci0JCQkvKmhleF9kdW1wKCJEZWxCQSBGcmFtZSIsIHBEZWxGcmFtZSwgRWxlbS0+TXNnTGVuKTsgKi8KLQkJCUJBT3JpU2Vzc2lvblRlYXJEb3duKHBBZCwgRWxlbS0+V2NpZCwKLQkJCQkJICAgICBwRGVsRnJhbWUtPkRlbGJhUGFybS5USUQsIFRSVUUsCi0JCQkJCSAgICAgRkFMU0UpOwotCQl9Ci0JfQotfQotCi1CT09MRUFOIENudGxFbnF1ZXVlRm9yUmVjdihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICB1bnNpZ25lZCBsb25nIFdjaWQsCi0JCQkgICB1bnNpZ25lZCBsb25nIE1zZ0xlbiwgc3RydWN0IHJ0X2ZyYW1lX2JhX3JlcSAqIHBNc2cpCi17Ci0Jc3RydWN0IHJ0X2ZyYW1lX2JhX3JlcSAqIHBGcmFtZSA9IHBNc2c7Ci0JLypQUlRNUF9SRU9SREVSQlVGICAgICAgcEJ1ZmZlcjsgKi8KLQkvKlBSVE1QX1JFT1JERVJCVUYgICAgICBwRG1hQnVmOyAqLwotCXN0cnVjdCBydF9iYV9yZWNfZW50cnkgKnBCQUVudHJ5OwotCS8qQk9PTEVBTiAgICAgICBSZXN1bHQ7ICovCi0JdW5zaWduZWQgbG9uZyBJZHg7Ci0JLyp1OCBOdW1SeFBrdDsgKi8KLQl1OCBUSUQ7CQkvKiwgaTsgKi8KLQotCVRJRCA9ICh1OClwRnJhbWUtPkJBUkNvbnRyb2wuVElEOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIiVzKCk6IEJBUi1XY2lkKCVsZCksIFRpZCAoJWQpXG4iLCBfX2Z1bmNfXywgV2NpZCwgVElEKSk7Ci0JLypoZXhfZHVtcCgiQkFSIiwgKGNoYXIgKilwRnJhbWUsIE1zZ0xlbik7ICovCi0JLyogRG8gbm90aGluZyBpZiB0aGUgZHJpdmVyIGlzIHN0YXJ0aW5nIGhhbHQgc3RhdGUuICovCi0JLyogVGhpcyBtaWdodCBoYXBwZW4gd2hlbiB0aW1lciBhbHJlYWR5IGJlZW4gZmlyZWQgYmVmb3JlIGNhbmNlbCB0aW1lciB3aXRoIG1sbWVoYWx0ICovCi0JaWYgKFJUTVBfVEVTVF9GTEFHCi0JICAgIChwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8IGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpCi0JCXJldHVybiBGQUxTRTsKLQotCS8qIEZpcnN0IGNoZWNrIHRoZSBzaXplLCBpdCBNVVNUIG5vdCBleGNlZWQgdGhlIG1sbWUgcXVldWUgc2l6ZSAqLwotCWlmIChNc2dMZW4gPiBNR01UX0RNQV9CVUZGRVJfU0laRSkgewotCQlEQkdQUklOVF9FUlIoIkNudGxFbnF1ZXVlRm9yUmVjdjogZnJhbWUgdG9vIGxhcmdlLCBzaXplID0gJWxkIFxuIiwgTXNnTGVuKTsKLQkJcmV0dXJuIEZBTFNFOwotCX0gZWxzZSBpZiAoTXNnTGVuICE9IHNpemVvZihzdHJ1Y3QgcnRfZnJhbWVfYmFfcmVxKSkgewotCQlEQkdQUklOVF9FUlIoIkNudGxFbnF1ZXVlRm9yUmVjdjogQmxvY2tBY2sgUmVxdWVzdCBmcmFtZSBsZW5ndGggc2l6ZSA9ICVsZCBpbmNvcnJlY3RcbiIsIE1zZ0xlbik7Ci0JCXJldHVybiBGQUxTRTsKLQl9IGVsc2UgaWYgKE1zZ0xlbiAhPSBzaXplb2Yoc3RydWN0IHJ0X2ZyYW1lX2JhX3JlcSkpIHsKLQkJREJHUFJJTlRfRVJSKCJDbnRsRW5xdWV1ZUZvclJlY3Y6IEJsb2NrQWNrIFJlcXVlc3QgZnJhbWUgbGVuZ3RoIHNpemUgPSAlbGQgaW5jb3JyZWN0XG4iLCBNc2dMZW4pOwotCQlyZXR1cm4gRkFMU0U7Ci0JfQotCi0JaWYgKChXY2lkIDwgTUFYX0xFTl9PRl9NQUNfVEFCTEUpICYmIChUSUQgPCA4KSkgewotCQkvKiBpZiB0aGlzIHJlY2VpdmluZyBwYWNrZXQgaXMgZnJvbSBTQSB0aGF0IGlzIGluIG91ciBPcmlFbnRyeS4gU2luY2UgV0NJRCA8OSBoYXMgZGlyZWN0IG1hcHBpbmcuIG5vIG5lZWQgc2VhcmNoLiAqLwotCQlJZHggPSBwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdLkJBUmVjV2NpZEFycmF5W1RJRF07Ci0JCXBCQUVudHJ5ID0gJnBBZC0+QkFUYWJsZS5CQVJlY0VudHJ5W0lkeF07Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIEZBTFNFOwotCX0KLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCJCQVIoJWxkKSA6IFRpZCAoJWQpIC0gJTA0eDolMDR4XG4iLCBXY2lkLCBUSUQsCi0JCSAgcEZyYW1lLT5CQVN0YXJ0aW5nU2VxLmZpZWxkLlN0YXJ0U2VxLCBwQkFFbnRyeS0+TGFzdEluZFNlcSkpOwotCi0JaWYgKFNFUV9TTUFMTEVSCi0JICAgIChwQkFFbnRyeS0+TGFzdEluZFNlcSwgcEZyYW1lLT5CQVN0YXJ0aW5nU2VxLmZpZWxkLlN0YXJ0U2VxLAotCSAgICAgTUFYU0VRKSkgewotCQkvKkRCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkJBUiBTZXEgPSAleCwgTGFzdEluZFNlcSA9ICV4XG4iLCBwRnJhbWUtPkJBU3RhcnRpbmdTZXEuZmllbGQuU3RhcnRTZXEsIHBCQUVudHJ5LT5MYXN0SW5kU2VxKSk7ICovCi0JCWJhX2luZGljYXRlX3Jlb3JkZXJpbmdfbXBkdXNfbGVfc2VxKHBBZCwgcEJBRW50cnksCi0JCQkJCQkgICAgcEZyYW1lLT5CQVN0YXJ0aW5nU2VxLmZpZWxkLgotCQkJCQkJICAgIFN0YXJ0U2VxKTsKLQkJcEJBRW50cnktPkxhc3RJbmRTZXEgPQotCQkgICAgKHBGcmFtZS0+QkFTdGFydGluZ1NlcS5maWVsZC5TdGFydFNlcSA9PQotCQkgICAgIDApID8gTUFYU0VRIDogKHBGcmFtZS0+QkFTdGFydGluZ1NlcS5maWVsZC5TdGFydFNlcSAtIDEpOwotCX0KLQkvKmJhX3JlZnJlc2hfcmVvcmRlcmluZ19tcGR1cyhwQWQsIHBCQUVudHJ5KTsgKi8KLQlyZXR1cm4gVFJVRTsKLX0KLQotLyoKLURlc2NyaXB0aW9uIDogU2VuZCBQU01QIEFjdGlvbiBmcmFtZSBJZiBQU01QIG1vZGUgc3dpdGNoZXMuCi0qLwotdm9pZCBTZW5kUFNNUEFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHU4IFdjaWQsIHU4IFBzbXApCi17Ci0JdTggKnBPdXRCdWZmZXIgPSBOVUxMOwotCWludCBOU3RhdHVzOwotCS8qdW5zaWduZWQgbG9uZyAgICAgICAgICAgSWR4OyAqLwotCXN0cnVjdCBydF9mcmFtZV9wc21wX2FjdGlvbiBGcmFtZTsKLQl1bnNpZ25lZCBsb25nIEZyYW1lTGVuOwotCi0JTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsJLypHZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeSAqLwotCWlmIChOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkgKCJCQSAtIE1sbWVBRERCQUFjdGlvbigpIGFsbG9jYXRlIG1lbW9yeSBmYWlsZWQgXG4iKSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlBY3RIZWFkZXJJbml0KHBBZCwgJkZyYW1lLkhkciwgcEFkLT5Db21tb25DZmcuQnNzaWQsCi0JCSAgICAgIHBBZC0+Q3VycmVudEFkZHJlc3MsIHBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0uQWRkcik7Ci0KLQlGcmFtZS5DYXRlZ29yeSA9IENBVEVHT1JZX0hUOwotCUZyYW1lLkFjdGlvbiA9IFNNUFNfQUNUSU9OOwotCXN3aXRjaCAoUHNtcCkgewotCWNhc2UgTU1QU19FTkFCTEU6Ci0jaWZkZWYgUlQzMHh4Ci0JCWlmIChJU19SVDMweHgocEFkKQotCQkgICAgJiYgKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPiAxCi0JCQl8fCBwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoID4gMSkpIHsKLQkJCVJUTVBfQVNJQ19NTVBTX0RJU0FCTEUocEFkKTsKLQkJfQotI2VuZGlmIC8qIFJUMzB4eCAvLyAqLwotCQlGcmFtZS5Qc21wID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSBNTVBTX0RZTkFNSUM6Ci0JCUZyYW1lLlBzbXAgPSAzOwotCQlicmVhazsKLQljYXNlIE1NUFNfU1RBVElDOgotI2lmZGVmIFJUMzB4eAotCQlpZiAoSVNfUlQzMHh4KHBBZCkKLQkJICAgICYmIChwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID4gMQotCQkJfHwgcEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCA+IDEpKSB7Ci0JCQlSVE1QX0FTSUNfTU1QU19FTkFCTEUocEFkKTsKLQkJfQotI2VuZGlmIC8qIFJUMzB4eCAvLyAqLwotCQlGcmFtZS5Qc21wID0gMTsKLQkJYnJlYWs7Ci0JfQotCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICZGcmFtZUxlbiwKLQkJCSAgc2l6ZW9mKHN0cnVjdCBydF9mcmFtZV9wc21wX2FjdGlvbiksICZGcmFtZSwgRU5EX09GX0FSR1MpOwotCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgUUlEX0FDX0JFLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7Ci0JTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKLQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJIVCAtIFNlbmRQU01QQWN0aW9uKCAlZCApICBcbiIsIEZyYW1lLlBzbXApKTsKLX0KLQotI2RlZmluZSBSQURJT19NRUFTVVJFTUVOVF9SRVFVRVNUX0FDVElPTgkwCi0KLXN0cnVjdCBQQUNLRUQgcnRfYmVhY29uX3JlcXVlc3QgewotCXU4IFJlZ3VsYXRvcnlDbGFzczsKLQl1OCBDaGFubmVsTnVtYmVyOwotCXUxNiBSYW5kb21JbnRlcnZhbDsKLQl1MTYgTWVhc3VyZW1lbnREdXJhdGlvbjsKLQl1OCBNZWFzdXJlbWVudE1vZGU7Ci0JdTggQlNTSURbTUFDX0FERFJfTEVOXTsKLQl1OCBSZXBvcnRpbmdDb25kaXRpb247Ci0JdTggVGhyZXNob2xkOwotCXU4IFNTSURJRVsyXTsJLyogMiBieXRlICovCi19OwotCi1zdHJ1Y3QgUEFDS0VEIHJ0X21lYXN1cmVtZW50X3JlcSB7Ci0JdTggSUQ7Ci0JdTggTGVuZ3RoOwotCXU4IFRva2VuOwotCXU4IFJlcXVlc3RNb2RlOwotCXU4IFR5cGU7Ci19OwotCi12b2lkIGNvbnZlcnRfcmVvcmRlcmluZ19wYWNrZXRfdG9fcHJlQU1TRFVfb3JfODAyXzNfcGFja2V0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkJCQkgICBzdHJ1Y3QgcnRfcnhfYmxrICpwUnhCbGssCi0JCQkJCQkJICAgdTgKLQkJCQkJCQkgICBGcm9tV2hpY2hCU1NJRCkKLXsKLQl2b2lkICpwUnhQa3Q7Ci0JdTggSGVhZGVyODAyXzNbTEVOR1RIXzgwMl8zXTsKLQotCS8qIDEuIGdldCA4MDIuMyBIZWFkZXIgKi8KLQkvKiAyLiByZW1vdmUgTExDICovCi0JLyogICAgICAgICAgICAgIGEuIHBvaW50ZXIgcFJ4QmxrLT5wRGF0YSB0byBwYXlsb2FkICovCi0JLyogICAgICBiLiBtb2RpZnkgcFJ4QmxrLT5EYXRhU2l6ZSAqLwotCi0JUlRNUF84MDJfMTFfUkVNT1ZFX0xMQ19BTkRfQ09OVkVSVF9UT184MDJfMyhwUnhCbGssIEhlYWRlcjgwMl8zKTsKLQotCUFTU0VSVChwUnhCbGstPnBSeFBhY2tldCk7Ci0JcFJ4UGt0ID0gUlRQS1RfVE9fT1NQS1QocFJ4QmxrLT5wUnhQYWNrZXQpOwotCi0JU0VUX09TX1BLVF9ORVRERVYocFJ4UGt0LCBnZXRfbmV0ZGV2X2Zyb21fYnNzaWQocEFkLCBGcm9tV2hpY2hCU1NJRCkpOwotCVNFVF9PU19QS1RfREFUQVBUUihwUnhQa3QsIHBSeEJsay0+cERhdGEpOwotCVNFVF9PU19QS1RfTEVOKHBSeFBrdCwgcFJ4QmxrLT5EYXRhU2l6ZSk7Ci0JU0VUX09TX1BLVF9EQVRBVEFJTChwUnhQa3QsIHBSeEJsay0+cERhdGEsIHBSeEJsay0+RGF0YVNpemUpOwotCi0JLyogKi8KLQkvKiBjb3B5IDgwMi4zIGhlYWRlciwgaWYgbmVjZXNzYXJ5ICovCi0JLyogKi8KLQlpZiAoIVJYX0JMS19URVNUX0ZMQUcocFJ4QmxrLCBmUlhfQU1TRFUpKSB7Ci0JCXsKLSNpZmRlZiBMSU5VWAotCQkJTmRpc01vdmVNZW1vcnkoc2tiX3B1c2gocFJ4UGt0LCBMRU5HVEhfODAyXzMpLAotCQkJCSAgICAgICBIZWFkZXI4MDJfMywgTEVOR1RIXzgwMl8zKTsKLSNlbmRpZgotCQl9Ci0JfQotfQotCi0jZGVmaW5lIElORElDQVRFX0xFR0FDWV9PUl9BTVNEVShfcEFkLCBfcFJ4QmxrLCBfZnJvbVdoaWNoQlNTSUQpCQlcCi0JZG8JCQkJCQkJCQkJCQkJCQkJCVwKLQl7CQkJCQkJCQkJCQkJCQkJCQlcCi0gICAgCWlmIChSWF9CTEtfVEVTVF9GTEFHKF9wUnhCbGssIGZSWF9BTVNEVSkpCQkJCQkJXAotICAgIAl7CQkJCQkJCQkJCQkJCQkJCVwKLSAgICAJCUluZGljYXRlX0FNU0RVX1BhY2tldChfcEFkLCBfcFJ4QmxrLCBfZnJvbVdoaWNoQlNTSUQpOwkJXAotICAgIAl9CQkJCQkJCQkJCQkJCQkJCVwKLQkJZWxzZSBpZiAoUlhfQkxLX1RFU1RfRkxBRyhfcFJ4QmxrLCBmUlhfRUFQKSkJCQkJCVwKLQkJewkJCQkJCQkJCQkJCQkJCQlcCi0JCQlJbmRpY2F0ZV9FQVBPTF9QYWNrZXQoX3BBZCwgX3BSeEJsaywgX2Zyb21XaGljaEJTU0lEKTsJCVwKLQkJfQkJCQkJCQkJCQkJCQkJCQlcCi0gICAgCWVsc2UJCQkJCQkJCQkJCQkJCQlcCi0gICAgCXsJCQkJCQkJCQkJCQkJCQkJXAotICAgIAkJSW5kaWNhdGVfTGVnYWN5X1BhY2tldChfcEFkLCBfcFJ4QmxrLCBfZnJvbVdoaWNoQlNTSUQpOwkJXAotICAgIAl9CQkJCQkJCQkJCQkJCQkJCVwKLQl9IHdoaWxlICgwKTsKLQotc3RhdGljIHZvaWQgYmFfZW5xdWV1ZV9yZW9yZGVyaW5nX3BhY2tldChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJCSBzdHJ1Y3QgcnRfYmFfcmVjX2VudHJ5ICpwQkFFbnRyeSwKLQkJCQkJIHN0cnVjdCBydF9yeF9ibGsgKnBSeEJsaywKLQkJCQkJIHU4IEZyb21XaGljaEJTU0lEKQotewotCXN0cnVjdCByZW9yZGVyaW5nX21wZHUgKm1wZHVfYmxrOwotCXUxNiBTZXF1ZW5jZSA9ICh1MTYpcFJ4QmxrLT5wSGVhZGVyLT5TZXF1ZW5jZTsKLQotCW1wZHVfYmxrID0gYmFfbXBkdV9ibGtfYWxsb2MocEFkKTsKLQlpZiAoKG1wZHVfYmxrICE9IE5VTEwpICYmICghUlhfQkxLX1RFU1RfRkxBRyhwUnhCbGssIGZSWF9FQVApKSkgewotCQkvKiBXcml0ZSBSeEQgYnVmZmVyIGFkZHJlc3MgJiBhbGxvY2F0ZWQgYnVmZmVyIGxlbmd0aCAqLwotCQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQkFFbnRyeS0+UnhSZVJpbmdMb2NrKTsKLQotCQltcGR1X2Jsay0+U2VxdWVuY2UgPSBTZXF1ZW5jZTsKLQotCQltcGR1X2Jsay0+YkFNU0RVID0gUlhfQkxLX1RFU1RfRkxBRyhwUnhCbGssIGZSWF9BTVNEVSk7Ci0KLQkJY29udmVydF9yZW9yZGVyaW5nX3BhY2tldF90b19wcmVBTVNEVV9vcl84MDJfM19wYWNrZXQocEFkLAotCQkJCQkJCQkgICAgICBwUnhCbGssCi0JCQkJCQkJCSAgICAgIEZyb21XaGljaEJTU0lEKTsKLQotCQlTVEFUU19JTkNfUlhfUEFDS0VUUyhwQWQsIEZyb21XaGljaEJTU0lEKTsKLQotCQkvKiAqLwotCQkvKiBpdCBpcyBuZWNlc3NhcnkgZm9yIHJlb3JkZXJpbmcgcGFja2V0IHRvIHJlY29yZCAqLwotCQkvKiB3aGljaCBCU1MgaXQgY29tZSBmcm9tICovCi0JCS8qICovCi0JCVJUTVBfU0VUX1BBQ0tFVF9JRihwUnhCbGstPnBSeFBhY2tldCwgRnJvbVdoaWNoQlNTSUQpOwotCi0JCW1wZHVfYmxrLT5wUGFja2V0ID0gcFJ4QmxrLT5wUnhQYWNrZXQ7Ci0KLQkJaWYgKGJhX3Jlb3JkZXJpbmdfbXBkdV9pbnNlcnRzb3J0ZWQoJnBCQUVudHJ5LT5saXN0LCBtcGR1X2JsaykKLQkJICAgID09IEZBTFNFKSB7Ci0JCQkvKiBoYWQgYmVlbiBhbHJlYWR5IHdpdGhpbiByZW9yZGVyaW5nIGxpc3QgKi8KLQkJCS8qIGRvbid0IGluZGljYXRlICovCi0JCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4QmxrLT5wUnhQYWNrZXQsCi0JCQkJCSAgICBORElTX1NUQVRVU19TVUNDRVNTKTsKLQkJCWJhX21wZHVfYmxrX2ZyZWUocEFkLCBtcGR1X2Jsayk7Ci0JCX0KLQotCQlBU1NFUlQoKDAgPD0gcEJBRW50cnktPmxpc3QucWxlbikKLQkJICAgICAgICYmIChwQkFFbnRyeS0+bGlzdC5xbGVuIDw9IHBCQUVudHJ5LT5CQVdpblNpemUpKTsKLQkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEJBRW50cnktPlJ4UmVSaW5nTG9jayk7Ci0JfSBlbHNlIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkgKCIgKCVkKSBDYW4ndCBhbGxvY2F0ZSByZW9yZGVyaW5nIG1wZHUgYmxrXG4iLAotCQkJICBwQkFFbnRyeS0+bGlzdC5xbGVuKSk7Ci0KLQkJLyoKLQkJICogZmx1c2ggYWxsIHBlbmRpbmcgcmVvcmRlcmluZyBtcGR1cwotCQkgKiBhbmQgcmVjZWl2aW5nIG1wZHUgdG8gdXBwZXIgbGF5ZXIKLQkJICogbWFrZSB0Y3AvaXAgdG8gdGFrZSBjYXJlIHJlb3JkZXJpbmcgbWVjaGFuaXNtCi0JCSAqLwotCQkvKmJhX3JlZnJlc2hfcmVvcmRlcmluZ19tcGR1cyhwQWQsIHBCQUVudHJ5KTsgKi8KLQkJYmFfaW5kaWNhdGVfcmVvcmRlcmluZ19tcGR1c19sZV9zZXEocEFkLCBwQkFFbnRyeSwgU2VxdWVuY2UpOwotCi0JCXBCQUVudHJ5LT5MYXN0SW5kU2VxID0gU2VxdWVuY2U7Ci0JCUlORElDQVRFX0xFR0FDWV9PUl9BTVNEVShwQWQsIHBSeEJsaywgRnJvbVdoaWNoQlNTSUQpOwotCX0KLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlJbmRpY2F0ZSB0aGlzIHBhY2tldCB0byB1cHBlciBsYXllciBvciBwdXQgaXQgaW50byByZW9yZGVyaW5nIGJ1ZmZlcgotCi0JUGFyYW1ldHJzOgotCQlwUnhCbGsgICAgICAgICA6IGNhcnJ5IG5lY2Vzc2FyeSBwYWNrZXQgaW5mbyA4MDIuMTEgZm9ybWF0Ci0JCUZyb21XaGljaEJTU0lEIDogdGhlIHBhY2tldCByZWNlaXZlZCBmcm9tIHdoaWNoIEJTUwotCi0JUmV0dXJuCToKLQkJCSAgbm9uZQotCi0JTm90ZSAgICA6Ci0JICAgICAgICAgIHRoZSBwYWNrZXQgcXVldWVkIGludG8gcmVvcmRlcmluZyBidWZmZXIgbmVlZCB0byBjb3ZlciB0byA4MDIuMyBmb3JtYXQKLQkJCSAgb3IgcHJlX0FNU0RVIGZvcm1hdAotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotdm9pZCBJbmRpY2F0ZV9BTVBEVV9QYWNrZXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgc3RydWN0IHJ0X3J4X2JsayAqcFJ4QmxrLCB1OCBGcm9tV2hpY2hCU1NJRCkKLXsKLQl1MTYgSWR4OwotCXN0cnVjdCBydF9iYV9yZWNfZW50cnkgKnBCQUVudHJ5ID0gTlVMTDsKLQl1MTYgU2VxdWVuY2UgPSBwUnhCbGstPnBIZWFkZXItPlNlcXVlbmNlOwotCXVuc2lnbmVkIGxvbmcgTm93MzI7Ci0JdTggV2NpZCA9IHBSeEJsay0+cFJ4V0ktPldpcmVsZXNzQ2xpSUQ7Ci0JdTggVElEID0gcFJ4QmxrLT5wUnhXSS0+VElEOwotCi0JaWYgKCFSWF9CTEtfVEVTVF9GTEFHKHBSeEJsaywgZlJYX0FNU0RVKQotCSAgICAmJiAocFJ4QmxrLT5EYXRhU2l6ZSA+IE1BWF9SWF9QS1RfTEVOKSkgewotCQkvKiByZWxlYXNlIHBhY2tldCAqLwotCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4QmxrLT5wUnhQYWNrZXQsCi0JCQkJICAgIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKFdjaWQgPCBNQVhfTEVOX09GX01BQ19UQUJMRSkgewotCQlJZHggPSBwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdLkJBUmVjV2NpZEFycmF5W1RJRF07Ci0JCWlmIChJZHggPT0gMCkgewotCQkJLyogUmVjIEJBIFNlc3Npb24gaGFkIGJlZW4gdG9ybiBkb3duICovCi0JCQlJTkRJQ0FURV9MRUdBQ1lfT1JfQU1TRFUocEFkLCBwUnhCbGssIEZyb21XaGljaEJTU0lEKTsKLQkJCXJldHVybjsKLQkJfQotCQlwQkFFbnRyeSA9ICZwQWQtPkJBVGFibGUuQkFSZWNFbnRyeVtJZHhdOwotCX0gZWxzZSB7Ci0JCS8qIGltcG9zc2libGUgISAqLwotCQlBU1NFUlQoMCk7Ci0JCS8qIHJlbGVhc2UgcGFja2V0ICovCi0JCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhCbGstPnBSeFBhY2tldCwKLQkJCQkgICAgTkRJU19TVEFUVVNfRkFJTFVSRSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlBU1NFUlQocEJBRW50cnkpOwotCi0JLyogdXBkYXRlIGxhc3QgcnggdGltZSAqLwotCU5kaXNHZXRTeXN0ZW1VcFRpbWUoJk5vdzMyKTsKLQotCXBCQUVudHJ5LT5yY3ZTZXEgPSBTZXF1ZW5jZTsKLQotCWJhX2ZsdXNoX3Jlb3JkZXJpbmdfdGltZW91dF9tcGR1cyhwQWQsIHBCQUVudHJ5LCBOb3czMik7Ci0JcEJBRW50cnktPkxhc3RJbmRTZXFBdFRpbWVyID0gTm93MzI7Ci0KLQkvKiAqLwotCS8qIFJlc2V0IExhc3QgSW5kaWNhdGUgU2VxdWVuY2UgKi8KLQkvKiAqLwotCWlmIChwQkFFbnRyeS0+TGFzdEluZFNlcSA9PSBSRVNFVF9SQ1ZfU0VRKSB7Ci0JCUFTU0VSVCgocEJBRW50cnktPmxpc3QucWxlbiA9PSAwKQotCQkgICAgICAgJiYgKHBCQUVudHJ5LT5saXN0Lm5leHQgPT0gTlVMTCkpOwotCi0JCS8qIHJlc2V0IHJjdiBzZXF1ZW5jZSBvZiBCQSBzZXNzaW9uICovCi0JCXBCQUVudHJ5LT5MYXN0SW5kU2VxID0gU2VxdWVuY2U7Ci0JCXBCQUVudHJ5LT5MYXN0SW5kU2VxQXRUaW1lciA9IE5vdzMyOwotCQlJTkRJQ0FURV9MRUdBQ1lfT1JfQU1TRFUocEFkLCBwUnhCbGssIEZyb21XaGljaEJTU0lEKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qICovCi0JLyogSS4gQ2hlY2sgaWYgaW4gb3JkZXIuICovCi0JLyogKi8KLQlpZiAoU0VRX1NURVBPTkUoU2VxdWVuY2UsIHBCQUVudHJ5LT5MYXN0SW5kU2VxLCBNQVhTRVEpKSB7Ci0JCXUxNiBMYXN0SW5kU2VxOwotCi0JCXBCQUVudHJ5LT5MYXN0SW5kU2VxID0gU2VxdWVuY2U7Ci0JCUlORElDQVRFX0xFR0FDWV9PUl9BTVNEVShwQWQsIHBSeEJsaywgRnJvbVdoaWNoQlNTSUQpOwotCQlMYXN0SW5kU2VxID0KLQkJICAgIGJhX2luZGljYXRlX3Jlb3JkZXJpbmdfbXBkdXNfaW5fb3JkZXIocEFkLCBwQkFFbnRyeSwKLQkJCQkJCQkgIHBCQUVudHJ5LT5MYXN0SW5kU2VxKTsKLQkJaWYgKExhc3RJbmRTZXEgIT0gUkVTRVRfUkNWX1NFUSkgewotCQkJcEJBRW50cnktPkxhc3RJbmRTZXEgPSBMYXN0SW5kU2VxOwotCQl9Ci0JCXBCQUVudHJ5LT5MYXN0SW5kU2VxQXRUaW1lciA9IE5vdzMyOwotCX0KLQkvKiAqLwotCS8qIElJLiBEcm9wIER1cGxpY2F0ZWQgUGFja2V0ICovCi0JLyogKi8KLQllbHNlIGlmIChTZXF1ZW5jZSA9PSBwQkFFbnRyeS0+TGFzdEluZFNlcSkgewotCi0JCS8qIGRyb3AgYW5kIHJlbGVhc2UgcGFja2V0ICovCi0JCXBCQUVudHJ5LT5uRHJvcFBhY2tldCsrOwotCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4QmxrLT5wUnhQYWNrZXQsCi0JCQkJICAgIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOwotCX0KLQkvKiAqLwotCS8qIElJSS4gRHJvcCBPbGQgUmVjZWl2ZWQgUGFja2V0ICovCi0JLyogKi8KLQllbHNlIGlmIChTRVFfU01BTExFUihTZXF1ZW5jZSwgcEJBRW50cnktPkxhc3RJbmRTZXEsIE1BWFNFUSkpIHsKLQotCQkvKiBkcm9wIGFuZCByZWxlYXNlIHBhY2tldCAqLwotCQlwQkFFbnRyeS0+bkRyb3BQYWNrZXQrKzsKLQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeEJsay0+cFJ4UGFja2V0LAotCQkJCSAgICBORElTX1NUQVRVU19GQUlMVVJFKTsKLQl9Ci0JLyogKi8KLQkvKiBJVi4gUmVjZWl2ZSBTZXF1ZW5jZSB3aXRoaW4gV2luZG93IFNpemUgKi8KLQkvKiAqLwotCWVsc2UgaWYgKFNFUV9TTUFMTEVSCi0JCSAoU2VxdWVuY2UsCi0JCSAgKCgocEJBRW50cnktPkxhc3RJbmRTZXEgKyBwQkFFbnRyeS0+QkFXaW5TaXplICsgMSkpICYgTUFYU0VRKSwKLQkJICBNQVhTRVEpKSB7Ci0JCWJhX2VucXVldWVfcmVvcmRlcmluZ19wYWNrZXQocEFkLCBwQkFFbnRyeSwgcFJ4QmxrLAotCQkJCQkgICAgIEZyb21XaGljaEJTU0lEKTsKLQl9Ci0JLyogKi8KLQkvKiBWLiBSZWNlaXZlIHNlcSBzdXJwYXNzZXMgV2luKGxhc3RzZXEgKyBuTVNEVSkuIFNvIHJlZnJlc2ggYWxsIHJlb3JkZXIgYnVmZmVyICovCi0JLyogKi8KLQllbHNlIHsKLQkJbG9uZyBXaW5TdGFydFNlcSwgVG1wU2VxOwotCi0JCVRtcFNlcSA9IFNlcXVlbmNlIC0gKHBCQUVudHJ5LT5CQVdpblNpemUpIC0gMTsKLQkJaWYgKFRtcFNlcSA8IDApIHsKLQkJCVRtcFNlcSA9IChNQVhTRVEgKyAxKSArIFRtcFNlcTsKLQkJfQotCQlXaW5TdGFydFNlcSA9IChUbXBTZXEgKyAxKSAmIE1BWFNFUTsKLQkJYmFfaW5kaWNhdGVfcmVvcmRlcmluZ19tcGR1c19sZV9zZXEocEFkLCBwQkFFbnRyeSwgV2luU3RhcnRTZXEpOwotCQlwQkFFbnRyeS0+TGFzdEluZFNlcSA9IFdpblN0YXJ0U2VxOwkvKlRtcFNlcTsgKi8KLQotCQlwQkFFbnRyeS0+TGFzdEluZFNlcUF0VGltZXIgPSBOb3czMjsKLQotCQliYV9lbnF1ZXVlX3Jlb3JkZXJpbmdfcGFja2V0KHBBZCwgcEJBRW50cnksIHBSeEJsaywKLQkJCQkJICAgICBGcm9tV2hpY2hCU1NJRCk7Ci0KLQkJVG1wU2VxID0KLQkJICAgIGJhX2luZGljYXRlX3Jlb3JkZXJpbmdfbXBkdXNfaW5fb3JkZXIocEFkLCBwQkFFbnRyeSwKLQkJCQkJCQkgIHBCQUVudHJ5LT5MYXN0SW5kU2VxKTsKLQkJaWYgKFRtcFNlcSAhPSBSRVNFVF9SQ1ZfU0VRKSB7Ci0JCQlwQkFFbnRyeS0+TGFzdEluZFNlcSA9IFRtcFNlcTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9hZXMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9hZXMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDcwZDIyOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fYWVzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzExICswLDAgQEAKLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUmFsaW5rIFRlY2ggSW5jLgotICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAotICogSHNpbmNodSBDb3VudHkgMzAyLAotICogVGFpd2FuLCBSLk8uQy4KLSAqCi0gKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0JTW9kdWxlIE5hbWU6Ci0JY21tX2Flcy5jCi0KLQlBYnN0cmFjdDoKLQotCVJldmlzaW9uIEhpc3Rvcnk6Ci0JV2hvCQkJV2hlbgkJCVdoYXQKLQktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JUGF1bCBXdQkJMDItMjUtMDIJCUluaXRpYWwKLSovCi0KLSNpbmNsdWRlCSIuLi9ydF9jb25maWcuaCIKLQotc3RydWN0IGFlc19jb250ZXh0IHsKLQl1MzIgZXJrWzY0XTsJCS8qIGVuY3J5cHRpb24gcm91bmQga2V5cyAqLwotCXUzMiBkcmtbNjRdOwkJLyogZGVjcnlwdGlvbiByb3VuZCBrZXlzICovCi0JaW50IG5yOwkJCS8qIG51bWJlciBvZiByb3VuZHMgKi8KLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKioqKioqKiBTQk9YIFRhYmxlICoqKioqKioqKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotdTggU2JveFRhYmxlWzI1Nl0gPSB7Ci0JMHg2MywgMHg3YywgMHg3NywgMHg3YiwgMHhmMiwgMHg2YiwgMHg2ZiwgMHhjNSwKLQkweDMwLCAweDAxLCAweDY3LCAweDJiLCAweGZlLCAweGQ3LCAweGFiLCAweDc2LAotCTB4Y2EsIDB4ODIsIDB4YzksIDB4N2QsIDB4ZmEsIDB4NTksIDB4NDcsIDB4ZjAsCi0JMHhhZCwgMHhkNCwgMHhhMiwgMHhhZiwgMHg5YywgMHhhNCwgMHg3MiwgMHhjMCwKLQkweGI3LCAweGZkLCAweDkzLCAweDI2LCAweDM2LCAweDNmLCAweGY3LCAweGNjLAotCTB4MzQsIDB4YTUsIDB4ZTUsIDB4ZjEsIDB4NzEsIDB4ZDgsIDB4MzEsIDB4MTUsCi0JMHgwNCwgMHhjNywgMHgyMywgMHhjMywgMHgxOCwgMHg5NiwgMHgwNSwgMHg5YSwKLQkweDA3LCAweDEyLCAweDgwLCAweGUyLCAweGViLCAweDI3LCAweGIyLCAweDc1LAotCTB4MDksIDB4ODMsIDB4MmMsIDB4MWEsIDB4MWIsIDB4NmUsIDB4NWEsIDB4YTAsCi0JMHg1MiwgMHgzYiwgMHhkNiwgMHhiMywgMHgyOSwgMHhlMywgMHgyZiwgMHg4NCwKLQkweDUzLCAweGQxLCAweDAwLCAweGVkLCAweDIwLCAweGZjLCAweGIxLCAweDViLAotCTB4NmEsIDB4Y2IsIDB4YmUsIDB4MzksIDB4NGEsIDB4NGMsIDB4NTgsIDB4Y2YsCi0JMHhkMCwgMHhlZiwgMHhhYSwgMHhmYiwgMHg0MywgMHg0ZCwgMHgzMywgMHg4NSwKLQkweDQ1LCAweGY5LCAweDAyLCAweDdmLCAweDUwLCAweDNjLCAweDlmLCAweGE4LAotCTB4NTEsIDB4YTMsIDB4NDAsIDB4OGYsIDB4OTIsIDB4OWQsIDB4MzgsIDB4ZjUsCi0JMHhiYywgMHhiNiwgMHhkYSwgMHgyMSwgMHgxMCwgMHhmZiwgMHhmMywgMHhkMiwKLQkweGNkLCAweDBjLCAweDEzLCAweGVjLCAweDVmLCAweDk3LCAweDQ0LCAweDE3LAotCTB4YzQsIDB4YTcsIDB4N2UsIDB4M2QsIDB4NjQsIDB4NWQsIDB4MTksIDB4NzMsCi0JMHg2MCwgMHg4MSwgMHg0ZiwgMHhkYywgMHgyMiwgMHgyYSwgMHg5MCwgMHg4OCwKLQkweDQ2LCAweGVlLCAweGI4LCAweDE0LCAweGRlLCAweDVlLCAweDBiLCAweGRiLAotCTB4ZTAsIDB4MzIsIDB4M2EsIDB4MGEsIDB4NDksIDB4MDYsIDB4MjQsIDB4NWMsCi0JMHhjMiwgMHhkMywgMHhhYywgMHg2MiwgMHg5MSwgMHg5NSwgMHhlNCwgMHg3OSwKLQkweGU3LCAweGM4LCAweDM3LCAweDZkLCAweDhkLCAweGQ1LCAweDRlLCAweGE5LAotCTB4NmMsIDB4NTYsIDB4ZjQsIDB4ZWEsIDB4NjUsIDB4N2EsIDB4YWUsIDB4MDgsCi0JMHhiYSwgMHg3OCwgMHgyNSwgMHgyZSwgMHgxYywgMHhhNiwgMHhiNCwgMHhjNiwKLQkweGU4LCAweGRkLCAweDc0LCAweDFmLCAweDRiLCAweGJkLCAweDhiLCAweDhhLAotCTB4NzAsIDB4M2UsIDB4YjUsIDB4NjYsIDB4NDgsIDB4MDMsIDB4ZjYsIDB4MGUsCi0JMHg2MSwgMHgzNSwgMHg1NywgMHhiOSwgMHg4NiwgMHhjMSwgMHgxZCwgMHg5ZSwKLQkweGUxLCAweGY4LCAweDk4LCAweDExLCAweDY5LCAweGQ5LCAweDhlLCAweDk0LAotCTB4OWIsIDB4MWUsIDB4ODcsIDB4ZTksIDB4Y2UsIDB4NTUsIDB4MjgsIDB4ZGYsCi0JMHg4YywgMHhhMSwgMHg4OSwgMHgwZCwgMHhiZiwgMHhlNiwgMHg0MiwgMHg2OCwKLQkweDQxLCAweDk5LCAweDJkLCAweDBmLCAweGIwLCAweDU0LCAweGJiLCAweDE2Ci19OwotCi12b2lkIHhvcl8zMih1OCAqYSwgdTggKmIsIHU4ICpvdXQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCW91dFtpXSA9IGFbaV0gXiBiW2ldOwotCX0KLX0KLQotdm9pZCB4b3JfMTI4KHU4ICphLCB1OCAqYiwgdTggKm91dCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCW91dFtpXSA9IGFbaV0gXiBiW2ldOwotCX0KLX0KLQotdTggUlRNUENraXBTYm94KHU4IGEpCi17Ci0JcmV0dXJuIFNib3hUYWJsZVsoaW50KWFdOwotfQotCi12b2lkIG5leHRfa2V5KHU4ICprZXksIGludCByb3VuZCkKLXsKLQl1OCByY29uOwotCXU4IHNib3hfa2V5WzRdOwotCXU4IHJjb25fdGFibGVbMTJdID0gewotCQkweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLAotCQkweDFiLCAweDM2LCAweDM2LCAweDM2Ci0JfTsKLQotCXNib3hfa2V5WzBdID0gUlRNUENraXBTYm94KGtleVsxM10pOwotCXNib3hfa2V5WzFdID0gUlRNUENraXBTYm94KGtleVsxNF0pOwotCXNib3hfa2V5WzJdID0gUlRNUENraXBTYm94KGtleVsxNV0pOwotCXNib3hfa2V5WzNdID0gUlRNUENraXBTYm94KGtleVsxMl0pOwotCi0JcmNvbiA9IHJjb25fdGFibGVbcm91bmRdOwotCi0JeG9yXzMyKCZrZXlbMF0sIHNib3hfa2V5LCAma2V5WzBdKTsKLQlrZXlbMF0gPSBrZXlbMF0gXiByY29uOwotCi0JeG9yXzMyKCZrZXlbNF0sICZrZXlbMF0sICZrZXlbNF0pOwotCXhvcl8zMigma2V5WzhdLCAma2V5WzRdLCAma2V5WzhdKTsKLQl4b3JfMzIoJmtleVsxMl0sICZrZXlbOF0sICZrZXlbMTJdKTsKLX0KLQotdm9pZCBieXRlX3N1Yih1OCAqaW4sIHU4ICpvdXQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQlvdXRbaV0gPSBSVE1QQ2tpcFNib3goaW5baV0pOwotCX0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIGJpdHdpc2VfeG9yKCkgICAgICAgICAgICAgICAgICAgICovCi0vKiBBIDEyOCBiaXQsIGJpdHdpc2UgZXhjbHVzaXZlIG9yICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotdm9pZCBiaXR3aXNlX3hvcih1bnNpZ25lZCBjaGFyICppbmEsIHVuc2lnbmVkIGNoYXIgKmluYiwgdW5zaWduZWQgY2hhciAqb3V0KQotewotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCW91dFtpXSA9IGluYVtpXSBeIGluYltpXTsKLQl9Ci19Ci0KLXZvaWQgc2hpZnRfcm93KHU4ICppbiwgdTggKm91dCkKLXsKLQlvdXRbMF0gPSBpblswXTsKLQlvdXRbMV0gPSBpbls1XTsKLQlvdXRbMl0gPSBpblsxMF07Ci0Jb3V0WzNdID0gaW5bMTVdOwotCW91dFs0XSA9IGluWzRdOwotCW91dFs1XSA9IGluWzldOwotCW91dFs2XSA9IGluWzE0XTsKLQlvdXRbN10gPSBpblszXTsKLQlvdXRbOF0gPSBpbls4XTsKLQlvdXRbOV0gPSBpblsxM107Ci0Jb3V0WzEwXSA9IGluWzJdOwotCW91dFsxMV0gPSBpbls3XTsKLQlvdXRbMTJdID0gaW5bMTJdOwotCW91dFsxM10gPSBpblsxXTsKLQlvdXRbMTRdID0gaW5bNl07Ci0Jb3V0WzE1XSA9IGluWzExXTsKLX0KLQotdm9pZCBtaXhfY29sdW1uKHU4ICppbiwgdTggKm91dCkKLXsKLQlpbnQgaTsKLQl1OCBhZGQxYls0XTsKLQl1OCBhZGQxYmY3WzRdOwotCXU4IHJvdGxbNF07Ci0JdTggc3dhcF9oYWxmc1s0XTsKLQl1OCBhbmRmN1s0XTsKLQl1OCByb3RyWzRdOwotCXU4IHRlbXBbNF07Ci0JdTggdGVtcGJbNF07Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCWlmICgoaW5baV0gJiAweDgwKSA9PSAweDgwKQotCQkJYWRkMWJbaV0gPSAweDFiOwotCQllbHNlCi0JCQlhZGQxYltpXSA9IDB4MDA7Ci0JfQotCi0Jc3dhcF9oYWxmc1swXSA9IGluWzJdOwkvKiBTd2FwIGhhbGZzICovCi0Jc3dhcF9oYWxmc1sxXSA9IGluWzNdOwotCXN3YXBfaGFsZnNbMl0gPSBpblswXTsKLQlzd2FwX2hhbGZzWzNdID0gaW5bMV07Ci0KLQlyb3RsWzBdID0gaW5bM107CS8qIFJvdGF0ZSBsZWZ0IDggYml0cyAqLwotCXJvdGxbMV0gPSBpblswXTsKLQlyb3RsWzJdID0gaW5bMV07Ci0Jcm90bFszXSA9IGluWzJdOwotCi0JYW5kZjdbMF0gPSBpblswXSAmIDB4N2Y7Ci0JYW5kZjdbMV0gPSBpblsxXSAmIDB4N2Y7Ci0JYW5kZjdbMl0gPSBpblsyXSAmIDB4N2Y7Ci0JYW5kZjdbM10gPSBpblszXSAmIDB4N2Y7Ci0KLQlmb3IgKGkgPSAzOyBpID4gMDsgaS0tKSB7CS8qIGxvZ2ljYWwgc2hpZnQgbGVmdCAxIGJpdCAqLwotCQlhbmRmN1tpXSA9IGFuZGY3W2ldIDw8IDE7Ci0JCWlmICgoYW5kZjdbaSAtIDFdICYgMHg4MCkgPT0gMHg4MCkgewotCQkJYW5kZjdbaV0gPSAoYW5kZjdbaV0gfCAweDAxKTsKLQkJfQotCX0KLQlhbmRmN1swXSA9IGFuZGY3WzBdIDw8IDE7Ci0JYW5kZjdbMF0gPSBhbmRmN1swXSAmIDB4ZmU7Ci0KLQl4b3JfMzIoYWRkMWIsIGFuZGY3LCBhZGQxYmY3KTsKLQotCXhvcl8zMihpbiwgYWRkMWJmNywgcm90cik7Ci0KLQl0ZW1wWzBdID0gcm90clswXTsJLyogUm90YXRlIHJpZ2h0IDggYml0cyAqLwotCXJvdHJbMF0gPSByb3RyWzFdOwotCXJvdHJbMV0gPSByb3RyWzJdOwotCXJvdHJbMl0gPSByb3RyWzNdOwotCXJvdHJbM10gPSB0ZW1wWzBdOwotCi0JeG9yXzMyKGFkZDFiZjcsIHJvdHIsIHRlbXApOwotCXhvcl8zMihzd2FwX2hhbGZzLCByb3RsLCB0ZW1wYik7Ci0JeG9yXzMyKHRlbXAsIHRlbXBiLCBvdXQpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogY29uc3RydWN0X21pY19oZWFkZXIxKCkgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIEJ1aWxkcyB0aGUgZmlyc3QgTUlDIGhlYWRlciBibG9jayBmcm9tICAgICAgICovCi0vKiBoZWFkZXIgZmllbGRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotdm9pZCBjb25zdHJ1Y3RfbWljX2hlYWRlcjEodW5zaWduZWQgY2hhciAqbWljX2hlYWRlcjEsCi0JCQkgICBpbnQgaGVhZGVyX2xlbmd0aCwgdW5zaWduZWQgY2hhciAqbXBkdSkKLXsKLQltaWNfaGVhZGVyMVswXSA9ICh1bnNpZ25lZCBjaGFyKSgoaGVhZGVyX2xlbmd0aCAtIDIpIC8gMjU2KTsKLQltaWNfaGVhZGVyMVsxXSA9ICh1bnNpZ25lZCBjaGFyKSgoaGVhZGVyX2xlbmd0aCAtIDIpICUgMjU2KTsKLQltaWNfaGVhZGVyMVsyXSA9IG1wZHVbMF0gJiAweGNmOwkvKiBNdXRlIENGIHBvbGwgJiBDRiBhY2sgYml0cyAqLwotCW1pY19oZWFkZXIxWzNdID0gbXBkdVsxXSAmIDB4Yzc7CS8qIE11dGUgcmV0cnksIG1vcmUgZGF0YSBhbmQgcHdyIG1ndCBiaXRzICovCi0JbWljX2hlYWRlcjFbNF0gPSBtcGR1WzRdOwkvKiBBMSAqLwotCW1pY19oZWFkZXIxWzVdID0gbXBkdVs1XTsKLQltaWNfaGVhZGVyMVs2XSA9IG1wZHVbNl07Ci0JbWljX2hlYWRlcjFbN10gPSBtcGR1WzddOwotCW1pY19oZWFkZXIxWzhdID0gbXBkdVs4XTsKLQltaWNfaGVhZGVyMVs5XSA9IG1wZHVbOV07Ci0JbWljX2hlYWRlcjFbMTBdID0gbXBkdVsxMF07CS8qIEEyICovCi0JbWljX2hlYWRlcjFbMTFdID0gbXBkdVsxMV07Ci0JbWljX2hlYWRlcjFbMTJdID0gbXBkdVsxMl07Ci0JbWljX2hlYWRlcjFbMTNdID0gbXBkdVsxM107Ci0JbWljX2hlYWRlcjFbMTRdID0gbXBkdVsxNF07Ci0JbWljX2hlYWRlcjFbMTVdID0gbXBkdVsxNV07Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBjb25zdHJ1Y3RfbWljX2hlYWRlcjIoKSAgICAgICAgICAgICAgICAgICAgICAqLwotLyogQnVpbGRzIHRoZSBsYXN0IE1JQyBoZWFkZXIgYmxvY2sgZnJvbSAgICAgICAgKi8KLS8qIGhlYWRlciBmaWVsZHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi12b2lkIGNvbnN0cnVjdF9taWNfaGVhZGVyMih1bnNpZ25lZCBjaGFyICptaWNfaGVhZGVyMiwKLQkJCSAgIHVuc2lnbmVkIGNoYXIgKm1wZHUsIGludCBhNF9leGlzdHMsIGludCBxY19leGlzdHMpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKLQkJbWljX2hlYWRlcjJbaV0gPSAweDAwOwotCi0JbWljX2hlYWRlcjJbMF0gPSBtcGR1WzE2XTsJLyogQTMgKi8KLQltaWNfaGVhZGVyMlsxXSA9IG1wZHVbMTddOwotCW1pY19oZWFkZXIyWzJdID0gbXBkdVsxOF07Ci0JbWljX2hlYWRlcjJbM10gPSBtcGR1WzE5XTsKLQltaWNfaGVhZGVyMls0XSA9IG1wZHVbMjBdOwotCW1pY19oZWFkZXIyWzVdID0gbXBkdVsyMV07Ci0KLQkvKiBJbiBTZXF1ZW5jZSBDb250cm9sIGZpZWxkLCBtdXRlIHNlcXVlbmNlIG51bWVyIGJpdHMgKDEyLWJpdCkgKi8KLQltaWNfaGVhZGVyMls2XSA9IG1wZHVbMjJdICYgMHgwZjsJLyogU0MgKi8KLQltaWNfaGVhZGVyMls3XSA9IDB4MDA7CS8qIG1wZHVbMjNdOyAqLwotCi0JaWYgKCghcWNfZXhpc3RzKSAmJiBhNF9leGlzdHMpIHsKLQkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKLQkJCW1pY19oZWFkZXIyWzggKyBpXSA9IG1wZHVbMjQgKyBpXTsJLyogQTQgKi8KLQotCX0KLQotCWlmIChxY19leGlzdHMgJiYgKCFhNF9leGlzdHMpKSB7Ci0JCW1pY19oZWFkZXIyWzhdID0gbXBkdVsyNF0gJiAweDBmOwkvKiBtdXRlIGJpdHMgMTUgLSA0ICovCi0JCW1pY19oZWFkZXIyWzldID0gbXBkdVsyNV0gJiAweDAwOwotCX0KLQotCWlmIChxY19leGlzdHMgJiYgYTRfZXhpc3RzKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCi0JCQltaWNfaGVhZGVyMls4ICsgaV0gPSBtcGR1WzI0ICsgaV07CS8qIEE0ICovCi0KLQkJbWljX2hlYWRlcjJbMTRdID0gbXBkdVszMF0gJiAweDBmOwotCQltaWNfaGVhZGVyMlsxNV0gPSBtcGR1WzMxXSAmIDB4MDA7Ci0JfQotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogY29uc3RydWN0X21pY19pdigpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIEJ1aWxkcyB0aGUgTUlDIElWIGZyb20gaGVhZGVyIGZpZWxkcyBhbmQgUE4gICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi12b2lkIGNvbnN0cnVjdF9taWNfaXYodW5zaWduZWQgY2hhciAqbWljX2l2LAotCQkgICAgICBpbnQgcWNfZXhpc3RzLAotCQkgICAgICBpbnQgYTRfZXhpc3RzLAotCQkgICAgICB1bnNpZ25lZCBjaGFyICptcGR1LAotCQkgICAgICB1bnNpZ25lZCBpbnQgcGF5bG9hZF9sZW5ndGgsIHVuc2lnbmVkIGNoYXIgKnBuX3ZlY3RvcikKLXsKLQlpbnQgaTsKLQotCW1pY19pdlswXSA9IDB4NTk7Ci0JaWYgKHFjX2V4aXN0cyAmJiBhNF9leGlzdHMpCi0JCW1pY19pdlsxXSA9IG1wZHVbMzBdICYgMHgwZjsJLyogUW9TX1RDICAgICAgICAgICAqLwotCWlmIChxY19leGlzdHMgJiYgIWE0X2V4aXN0cykKLQkJbWljX2l2WzFdID0gbXBkdVsyNF0gJiAweDBmOwkvKiBtdXRlIGJpdHMgNy00ICAgICovCi0JaWYgKCFxY19leGlzdHMpCi0JCW1pY19pdlsxXSA9IDB4MDA7Ci0JZm9yIChpID0gMjsgaSA8IDg7IGkrKykKLQkJbWljX2l2W2ldID0gbXBkdVtpICsgOF07CS8qIG1pY19pdlsyOjddID0gQTJbMDo1XSA9IG1wZHVbMTA6MTVdICovCi0jaWZkZWYgQ09OU0lTVEVOVF9QTl9PUkRFUgotCWZvciAoaSA9IDg7IGkgPCAxNDsgaSsrKQotCQltaWNfaXZbaV0gPSBwbl92ZWN0b3JbaSAtIDhdOwkvKiBtaWNfaXZbODoxM10gPSBQTlswOjVdICovCi0jZWxzZQotCWZvciAoaSA9IDg7IGkgPCAxNDsgaSsrKQotCQltaWNfaXZbaV0gPSBwbl92ZWN0b3JbMTMgLSBpXTsJLyogbWljX2l2Wzg6MTNdID0gUE5bNTowXSAqLwotI2VuZGlmCi0JbWljX2l2WzE0XSA9ICh1bnNpZ25lZCBjaGFyKShwYXlsb2FkX2xlbmd0aCAvIDI1Nik7Ci0JbWljX2l2WzE1XSA9ICh1bnNpZ25lZCBjaGFyKShwYXlsb2FkX2xlbmd0aCAlIDI1Nik7Ci0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBhZXMxMjhrMTI4ZCgpICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIFBlcmZvcm1zIGEgMTI4IGJpdCBBRVMgZW5jcnlwdCB3aXRoICAqLwotLyogMTI4IGJpdCBkYXRhLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQgYWVzMTI4azEyOGQodW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBjaGFyICpkYXRhLAotCQkgdW5zaWduZWQgY2hhciAqY2lwaGVydGV4dCkKLXsKLQlpbnQgcm91bmQ7Ci0JaW50IGk7Ci0JdW5zaWduZWQgY2hhciBpbnRlcm1lZGlhdGVhWzE2XTsKLQl1bnNpZ25lZCBjaGFyIGludGVybWVkaWF0ZWJbMTZdOwotCXVuc2lnbmVkIGNoYXIgcm91bmRfa2V5WzE2XTsKLQotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQotCQlyb3VuZF9rZXlbaV0gPSBrZXlbaV07Ci0KLQlmb3IgKHJvdW5kID0gMDsgcm91bmQgPCAxMTsgcm91bmQrKykgewotCQlpZiAocm91bmQgPT0gMCkgewotCQkJeG9yXzEyOChyb3VuZF9rZXksIGRhdGEsIGNpcGhlcnRleHQpOwotCQkJbmV4dF9rZXkocm91bmRfa2V5LCByb3VuZCk7Ci0JCX0gZWxzZSBpZiAocm91bmQgPT0gMTApIHsKLQkJCWJ5dGVfc3ViKGNpcGhlcnRleHQsIGludGVybWVkaWF0ZWEpOwotCQkJc2hpZnRfcm93KGludGVybWVkaWF0ZWEsIGludGVybWVkaWF0ZWIpOwotCQkJeG9yXzEyOChpbnRlcm1lZGlhdGViLCByb3VuZF9rZXksIGNpcGhlcnRleHQpOwotCQl9IGVsc2UgewkvKiAxIC0gOSAqLwotCi0JCQlieXRlX3N1YihjaXBoZXJ0ZXh0LCBpbnRlcm1lZGlhdGVhKTsKLQkJCXNoaWZ0X3JvdyhpbnRlcm1lZGlhdGVhLCBpbnRlcm1lZGlhdGViKTsKLQkJCW1peF9jb2x1bW4oJmludGVybWVkaWF0ZWJbMF0sICZpbnRlcm1lZGlhdGVhWzBdKTsKLQkJCW1peF9jb2x1bW4oJmludGVybWVkaWF0ZWJbNF0sICZpbnRlcm1lZGlhdGVhWzRdKTsKLQkJCW1peF9jb2x1bW4oJmludGVybWVkaWF0ZWJbOF0sICZpbnRlcm1lZGlhdGVhWzhdKTsKLQkJCW1peF9jb2x1bW4oJmludGVybWVkaWF0ZWJbMTJdLCAmaW50ZXJtZWRpYXRlYVsxMl0pOwotCQkJeG9yXzEyOChpbnRlcm1lZGlhdGVhLCByb3VuZF9rZXksIGNpcGhlcnRleHQpOwotCQkJbmV4dF9rZXkocm91bmRfa2V5LCByb3VuZCk7Ci0JCX0KLQl9Ci0KLX0KLQotdm9pZCBjb25zdHJ1Y3RfY3RyX3ByZWxvYWQodW5zaWduZWQgY2hhciAqY3RyX3ByZWxvYWQsCi0JCQkgICBpbnQgYTRfZXhpc3RzLAotCQkJICAgaW50IHFjX2V4aXN0cywKLQkJCSAgIHVuc2lnbmVkIGNoYXIgKm1wZHUsIHVuc2lnbmVkIGNoYXIgKnBuX3ZlY3RvciwgaW50IGMpCi17Ci0KLQlpbnQgaSA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCi0JCWN0cl9wcmVsb2FkW2ldID0gMHgwMDsKLQlpID0gMDsKLQotCWN0cl9wcmVsb2FkWzBdID0gMHgwMTsJLyogZmxhZyAqLwotCWlmIChxY19leGlzdHMgJiYgYTRfZXhpc3RzKQotCQljdHJfcHJlbG9hZFsxXSA9IG1wZHVbMzBdICYgMHgwZjsJLyogUW9DX0NvbnRyb2wgICovCi0JaWYgKHFjX2V4aXN0cyAmJiAhYTRfZXhpc3RzKQotCQljdHJfcHJlbG9hZFsxXSA9IG1wZHVbMjRdICYgMHgwZjsKLQotCWZvciAoaSA9IDI7IGkgPCA4OyBpKyspCi0JCWN0cl9wcmVsb2FkW2ldID0gbXBkdVtpICsgOF07CS8qIGN0cl9wcmVsb2FkWzI6N10gPSBBMlswOjVdID0gbXBkdVsxMDoxNV0gKi8KLSNpZmRlZiBDT05TSVNURU5UX1BOX09SREVSCi0JZm9yIChpID0gODsgaSA8IDE0OyBpKyspCi0JCWN0cl9wcmVsb2FkW2ldID0gcG5fdmVjdG9yW2kgLSA4XTsJLyogY3RyX3ByZWxvYWRbODoxM10gPSBQTlswOjVdICovCi0jZWxzZQotCWZvciAoaSA9IDg7IGkgPCAxNDsgaSsrKQotCQljdHJfcHJlbG9hZFtpXSA9IHBuX3ZlY3RvclsxMyAtIGldOwkvKiBjdHJfcHJlbG9hZFs4OjEzXSA9IFBOWzU6MF0gKi8KLSNlbmRpZgotCWN0cl9wcmVsb2FkWzE0XSA9ICh1bnNpZ25lZCBjaGFyKShjIC8gMjU2KTsJLyogQ3RyICovCi0JY3RyX3ByZWxvYWRbMTVdID0gKHVuc2lnbmVkIGNoYXIpKGMgJSAyNTYpOwotCi19Ci0KLUJPT0xFQU4gUlRNUFNvZnREZWNyeXB0QUVTKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgIHU4ICpwRGF0YSwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgRGF0YUJ5dGVDbnQsIHN0cnVjdCBydF9jaXBoZXJfa2V5ICpwV3BhS2V5KQotewotCXU4IEtleUlEOwotCXUzMiBIZWFkZXJMZW47Ci0JdTggUE5bNl07Ci0JdTMyIHBheWxvYWRfbGVuOwotCXUzMiBudW1fYmxvY2tzOwotCXUzMiBwYXlsb2FkX3JlbWFpbmRlcjsKLQl1MTYgZmM7Ci0JdTggZmMwOwotCXU4IGZjMTsKLQl1MzIgZnJhbWVfdHlwZTsKLQl1MzIgZnJhbWVfc3VidHlwZTsKLQl1MzIgZnJvbV9kczsKLQl1MzIgdG9fZHM7Ci0JaW50IGE0X2V4aXN0czsKLQlpbnQgcWNfZXhpc3RzOwotCXU4IGFlc19vdXRbMTZdOwotCWludCBwYXlsb2FkX2luZGV4OwotCXUzMiBpOwotCXU4IGN0cl9wcmVsb2FkWzE2XTsKLQl1OCBjaGFpbl9idWZmZXJbMTZdOwotCXU4IHBhZGRlZF9idWZmZXJbMTZdOwotCXU4IG1pY19pdlsxNl07Ci0JdTggbWljX2hlYWRlcjFbMTZdOwotCXU4IG1pY19oZWFkZXIyWzE2XTsKLQl1OCBNSUNbOF07Ci0JdTggVHJhaWxNSUNbOF07Ci0KLQlmYzAgPSAqcERhdGE7Ci0JZmMxID0gKihwRGF0YSArIDEpOwotCi0JZmMgPSAqKCh1MTYgKilwRGF0YSk7Ci0KLQlmcmFtZV90eXBlID0gKChmYzAgPj4gMikgJiAweDAzKTsKLQlmcmFtZV9zdWJ0eXBlID0gKChmYzAgPj4gNCkgJiAweDBmKTsKLQotCWZyb21fZHMgPSAoZmMxICYgMHgyKSA+PiAxOwotCXRvX2RzID0gKGZjMSAmIDB4MSk7Ci0KLQlhNF9leGlzdHMgPSAoZnJvbV9kcyAmIHRvX2RzKTsKLQlxY19leGlzdHMgPSAoKGZyYW1lX3N1YnR5cGUgPT0gMHgwOCkgfHwJLyogQXNzdW1lZCBRb1Mgc3VidHlwZXMgKi8KLQkJICAgICAoZnJhbWVfc3VidHlwZSA9PSAweDA5KSB8fAkvKiBMaWtlbHkgdG8gY2hhbmdlLiAgICAqLwotCQkgICAgIChmcmFtZV9zdWJ0eXBlID09IDB4MGEpIHx8IChmcmFtZV9zdWJ0eXBlID09IDB4MGIpCi0JICAgICk7Ci0KLQlIZWFkZXJMZW4gPSAyNDsKLQlpZiAoYTRfZXhpc3RzKQotCQlIZWFkZXJMZW4gKz0gNjsKLQotCUtleUlEID0gKigodTggKikocERhdGEgKyBIZWFkZXJMZW4gKyAzKSk7Ci0JS2V5SUQgPSBLZXlJRCA+PiA2OwotCi0JaWYgKHBXcGFLZXlbS2V5SURdLktleUxlbiA9PSAwKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiUlRNUFNvZnREZWNyeXB0QUVTIGZhaWxlZCEoS2V5SURbJWRdIExlbmd0aCBjYW4gbm90IGJlIDApXG4iLAotCQkJICBLZXlJRCkpOwotCQlyZXR1cm4gRkFMU0U7Ci0JfQotCi0JUE5bMF0gPSAqKHBEYXRhICsgSGVhZGVyTGVuKTsKLQlQTlsxXSA9ICoocERhdGEgKyBIZWFkZXJMZW4gKyAxKTsKLQlQTlsyXSA9ICoocERhdGEgKyBIZWFkZXJMZW4gKyA0KTsKLQlQTlszXSA9ICoocERhdGEgKyBIZWFkZXJMZW4gKyA1KTsKLQlQTls0XSA9ICoocERhdGEgKyBIZWFkZXJMZW4gKyA2KTsKLQlQTls1XSA9ICoocERhdGEgKyBIZWFkZXJMZW4gKyA3KTsKLQotCXBheWxvYWRfbGVuID0gRGF0YUJ5dGVDbnQgLSBIZWFkZXJMZW4gLSA4IC0gODsJLyogOCBieXRlcyBmb3IgQ0NNUCBoZWFkZXIgLCA4IGJ5dGVzIGZvciBNSUMgKi8KLQlwYXlsb2FkX3JlbWFpbmRlciA9IChwYXlsb2FkX2xlbikgJSAxNjsKLQludW1fYmxvY2tzID0gKHBheWxvYWRfbGVuKSAvIDE2OwotCi0JLyogRmluZCBzdGFydCBvZiBwYXlsb2FkICovCi0JcGF5bG9hZF9pbmRleCA9IEhlYWRlckxlbiArIDg7CS8qSVYrRUlWICovCi0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX2Jsb2NrczsgaSsrKSB7Ci0JCWNvbnN0cnVjdF9jdHJfcHJlbG9hZChjdHJfcHJlbG9hZCwKLQkJCQkgICAgICBhNF9leGlzdHMsIHFjX2V4aXN0cywgcERhdGEsIFBOLCBpICsgMSk7Ci0KLQkJYWVzMTI4azEyOGQocFdwYUtleVtLZXlJRF0uS2V5LCBjdHJfcHJlbG9hZCwgYWVzX291dCk7Ci0KLQkJYml0d2lzZV94b3IoYWVzX291dCwgcERhdGEgKyBwYXlsb2FkX2luZGV4LCBjaGFpbl9idWZmZXIpOwotCQlOZGlzTW92ZU1lbW9yeShwRGF0YSArIHBheWxvYWRfaW5kZXggLSA4LCBjaGFpbl9idWZmZXIsIDE2KTsKLQkJcGF5bG9hZF9pbmRleCArPSAxNjsKLQl9Ci0KLQkvKiAqLwotCS8qIElmIHRoZXJlIGlzIGEgc2hvcnQgZmluYWwgYmxvY2ssIHRoZW4gcGFkIGl0ICovCi0JLyogZW5jcnlwdCBpdCBhbmQgY29weSB0aGUgdW5wYWRkZWQgcGFydCBiYWNrICovCi0JLyogKi8KLQlpZiAocGF5bG9hZF9yZW1haW5kZXIgPiAwKSB7Ci0JCWNvbnN0cnVjdF9jdHJfcHJlbG9hZChjdHJfcHJlbG9hZCwKLQkJCQkgICAgICBhNF9leGlzdHMsCi0JCQkJICAgICAgcWNfZXhpc3RzLCBwRGF0YSwgUE4sIG51bV9ibG9ja3MgKyAxKTsKLQotCQlOZGlzWmVyb01lbW9yeShwYWRkZWRfYnVmZmVyLCAxNik7Ci0JCU5kaXNNb3ZlTWVtb3J5KHBhZGRlZF9idWZmZXIsIHBEYXRhICsgcGF5bG9hZF9pbmRleCwKLQkJCSAgICAgICBwYXlsb2FkX3JlbWFpbmRlcik7Ci0KLQkJYWVzMTI4azEyOGQocFdwYUtleVtLZXlJRF0uS2V5LCBjdHJfcHJlbG9hZCwgYWVzX291dCk7Ci0KLQkJYml0d2lzZV94b3IoYWVzX291dCwgcGFkZGVkX2J1ZmZlciwgY2hhaW5fYnVmZmVyKTsKLQkJTmRpc01vdmVNZW1vcnkocERhdGEgKyBwYXlsb2FkX2luZGV4IC0gOCwgY2hhaW5fYnVmZmVyLAotCQkJICAgICAgIHBheWxvYWRfcmVtYWluZGVyKTsKLQkJcGF5bG9hZF9pbmRleCArPSBwYXlsb2FkX3JlbWFpbmRlcjsKLQl9Ci0JLyogKi8KLQkvKiBEZXNjcnlwdCB0aGUgTUlDICovCi0JLyogKi8KLQljb25zdHJ1Y3RfY3RyX3ByZWxvYWQoY3RyX3ByZWxvYWQsIGE0X2V4aXN0cywgcWNfZXhpc3RzLCBwRGF0YSwgUE4sIDApOwotCU5kaXNaZXJvTWVtb3J5KHBhZGRlZF9idWZmZXIsIDE2KTsKLQlOZGlzTW92ZU1lbW9yeShwYWRkZWRfYnVmZmVyLCBwRGF0YSArIHBheWxvYWRfaW5kZXgsIDgpOwotCi0JYWVzMTI4azEyOGQocFdwYUtleVtLZXlJRF0uS2V5LCBjdHJfcHJlbG9hZCwgYWVzX291dCk7Ci0KLQliaXR3aXNlX3hvcihhZXNfb3V0LCBwYWRkZWRfYnVmZmVyLCBjaGFpbl9idWZmZXIpOwotCi0JTmRpc01vdmVNZW1vcnkoVHJhaWxNSUMsIGNoYWluX2J1ZmZlciwgOCk7Ci0KLQkvKiAqLwotCS8qIENhbGN1bGF0ZSBNSUMgKi8KLQkvKiAqLwotCi0JLypGb3JjZSB0aGUgcHJvdGVjdGVkIGZyYW1lIGJpdCBvbiAqLwotCSoocERhdGEgKyAxKSA9ICoocERhdGEgKyAxKSB8IDB4NDA7Ci0KLQkvKiBGaW5kIHN0YXJ0IG9mIHBheWxvYWQgKi8KLQkvKiBCZWNhdXNlIHRoZSBDQ01QIGhlYWRlciBoYXMgYmVlbiByZW1vdmVkICovCi0JcGF5bG9hZF9pbmRleCA9IEhlYWRlckxlbjsKLQotCWNvbnN0cnVjdF9taWNfaXYobWljX2l2LCBxY19leGlzdHMsIGE0X2V4aXN0cywgcERhdGEsIHBheWxvYWRfbGVuLCBQTik7Ci0KLQljb25zdHJ1Y3RfbWljX2hlYWRlcjEobWljX2hlYWRlcjEsIEhlYWRlckxlbiwgcERhdGEpOwotCi0JY29uc3RydWN0X21pY19oZWFkZXIyKG1pY19oZWFkZXIyLCBwRGF0YSwgYTRfZXhpc3RzLCBxY19leGlzdHMpOwotCi0JYWVzMTI4azEyOGQocFdwYUtleVtLZXlJRF0uS2V5LCBtaWNfaXYsIGFlc19vdXQpOwotCWJpdHdpc2VfeG9yKGFlc19vdXQsIG1pY19oZWFkZXIxLCBjaGFpbl9idWZmZXIpOwotCWFlczEyOGsxMjhkKHBXcGFLZXlbS2V5SURdLktleSwgY2hhaW5fYnVmZmVyLCBhZXNfb3V0KTsKLQliaXR3aXNlX3hvcihhZXNfb3V0LCBtaWNfaGVhZGVyMiwgY2hhaW5fYnVmZmVyKTsKLQlhZXMxMjhrMTI4ZChwV3BhS2V5W0tleUlEXS5LZXksIGNoYWluX2J1ZmZlciwgYWVzX291dCk7Ci0KLQkvKiBpdGVyYXRlIHRocm91Z2ggZWFjaCAxNiBieXRlIHBheWxvYWQgYmxvY2sgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX2Jsb2NrczsgaSsrKSB7Ci0JCWJpdHdpc2VfeG9yKGFlc19vdXQsIHBEYXRhICsgcGF5bG9hZF9pbmRleCwgY2hhaW5fYnVmZmVyKTsKLQkJcGF5bG9hZF9pbmRleCArPSAxNjsKLQkJYWVzMTI4azEyOGQocFdwYUtleVtLZXlJRF0uS2V5LCBjaGFpbl9idWZmZXIsIGFlc19vdXQpOwotCX0KLQotCS8qIEFkZCBvbiB0aGUgZmluYWwgcGF5bG9hZCBibG9jayBpZiBpdCBuZWVkcyBwYWRkaW5nICovCi0JaWYgKHBheWxvYWRfcmVtYWluZGVyID4gMCkgewotCQlOZGlzWmVyb01lbW9yeShwYWRkZWRfYnVmZmVyLCAxNik7Ci0JCU5kaXNNb3ZlTWVtb3J5KHBhZGRlZF9idWZmZXIsIHBEYXRhICsgcGF5bG9hZF9pbmRleCwKLQkJCSAgICAgICBwYXlsb2FkX3JlbWFpbmRlcik7Ci0KLQkJYml0d2lzZV94b3IoYWVzX291dCwgcGFkZGVkX2J1ZmZlciwgY2hhaW5fYnVmZmVyKTsKLQkJYWVzMTI4azEyOGQocFdwYUtleVtLZXlJRF0uS2V5LCBjaGFpbl9idWZmZXIsIGFlc19vdXQpOwotCX0KLQkvKiBhZXNfb3V0IGNvbnRhaW5zIHBhZGRlZCBtaWMsIGRpc2NhcmQgbW9zdCBzaWduaWZpY2FudCAqLwotCS8qIDggYnl0ZXMgdG8gZ2VuZXJhdGUgNjQgYml0IE1JQyAqLwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCU1JQ1tpXSA9IGFlc19vdXRbaV07Ci0KLQlpZiAoIU5kaXNFcXVhbE1lbW9yeShNSUMsIFRyYWlsTUlDLCA4KSkgewotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJSVE1QU29mdERlY3J5cHRBRVMsIE1JQyBFcnJvciAhXG4iKSk7CS8qTUlDIGVycm9yLiAqLwotCQlyZXR1cm4gRkFMU0U7Ci0JfQotCi0JcmV0dXJuIFRSVUU7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT0gIEFFUyBFbi9EZWNyeXB0aW9uID09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0jaWZuZGVmCXVpbnQ4Ci0jZGVmaW5lCXVpbnQ4ICB1bnNpZ25lZAljaGFyCi0jZW5kaWYKLQotI2lmbmRlZgl1aW50MzIKLSNkZWZpbmUJdWludDMyIHVuc2lnbmVkCWludAotI2VuZGlmCi0KLS8qIGZvcndhcmQgUy1ib3ggKi8KLXN0YXRpYyB1aW50MzIgRlNiWzI1Nl0gPSB7Ci0JMHg2MywgMHg3QywgMHg3NywgMHg3QiwgMHhGMiwgMHg2QiwgMHg2RiwgMHhDNSwKLQkweDMwLCAweDAxLCAweDY3LCAweDJCLCAweEZFLCAweEQ3LCAweEFCLCAweDc2LAotCTB4Q0EsIDB4ODIsIDB4QzksIDB4N0QsIDB4RkEsIDB4NTksIDB4NDcsIDB4RjAsCi0JMHhBRCwgMHhENCwgMHhBMiwgMHhBRiwgMHg5QywgMHhBNCwgMHg3MiwgMHhDMCwKLQkweEI3LCAweEZELCAweDkzLCAweDI2LCAweDM2LCAweDNGLCAweEY3LCAweENDLAotCTB4MzQsIDB4QTUsIDB4RTUsIDB4RjEsIDB4NzEsIDB4RDgsIDB4MzEsIDB4MTUsCi0JMHgwNCwgMHhDNywgMHgyMywgMHhDMywgMHgxOCwgMHg5NiwgMHgwNSwgMHg5QSwKLQkweDA3LCAweDEyLCAweDgwLCAweEUyLCAweEVCLCAweDI3LCAweEIyLCAweDc1LAotCTB4MDksIDB4ODMsIDB4MkMsIDB4MUEsIDB4MUIsIDB4NkUsIDB4NUEsIDB4QTAsCi0JMHg1MiwgMHgzQiwgMHhENiwgMHhCMywgMHgyOSwgMHhFMywgMHgyRiwgMHg4NCwKLQkweDUzLCAweEQxLCAweDAwLCAweEVELCAweDIwLCAweEZDLCAweEIxLCAweDVCLAotCTB4NkEsIDB4Q0IsIDB4QkUsIDB4MzksIDB4NEEsIDB4NEMsIDB4NTgsIDB4Q0YsCi0JMHhEMCwgMHhFRiwgMHhBQSwgMHhGQiwgMHg0MywgMHg0RCwgMHgzMywgMHg4NSwKLQkweDQ1LCAweEY5LCAweDAyLCAweDdGLCAweDUwLCAweDNDLCAweDlGLCAweEE4LAotCTB4NTEsIDB4QTMsIDB4NDAsIDB4OEYsIDB4OTIsIDB4OUQsIDB4MzgsIDB4RjUsCi0JMHhCQywgMHhCNiwgMHhEQSwgMHgyMSwgMHgxMCwgMHhGRiwgMHhGMywgMHhEMiwKLQkweENELCAweDBDLCAweDEzLCAweEVDLCAweDVGLCAweDk3LCAweDQ0LCAweDE3LAotCTB4QzQsIDB4QTcsIDB4N0UsIDB4M0QsIDB4NjQsIDB4NUQsIDB4MTksIDB4NzMsCi0JMHg2MCwgMHg4MSwgMHg0RiwgMHhEQywgMHgyMiwgMHgyQSwgMHg5MCwgMHg4OCwKLQkweDQ2LCAweEVFLCAweEI4LCAweDE0LCAweERFLCAweDVFLCAweDBCLCAweERCLAotCTB4RTAsIDB4MzIsIDB4M0EsIDB4MEEsIDB4NDksIDB4MDYsIDB4MjQsIDB4NUMsCi0JMHhDMiwgMHhEMywgMHhBQywgMHg2MiwgMHg5MSwgMHg5NSwgMHhFNCwgMHg3OSwKLQkweEU3LCAweEM4LCAweDM3LCAweDZELCAweDhELCAweEQ1LCAweDRFLCAweEE5LAotCTB4NkMsIDB4NTYsIDB4RjQsIDB4RUEsIDB4NjUsIDB4N0EsIDB4QUUsIDB4MDgsCi0JMHhCQSwgMHg3OCwgMHgyNSwgMHgyRSwgMHgxQywgMHhBNiwgMHhCNCwgMHhDNiwKLQkweEU4LCAweERELCAweDc0LCAweDFGLCAweDRCLCAweEJELCAweDhCLCAweDhBLAotCTB4NzAsIDB4M0UsIDB4QjUsIDB4NjYsIDB4NDgsIDB4MDMsIDB4RjYsIDB4MEUsCi0JMHg2MSwgMHgzNSwgMHg1NywgMHhCOSwgMHg4NiwgMHhDMSwgMHgxRCwgMHg5RSwKLQkweEUxLCAweEY4LCAweDk4LCAweDExLCAweDY5LCAweEQ5LCAweDhFLCAweDk0LAotCTB4OUIsIDB4MUUsIDB4ODcsIDB4RTksIDB4Q0UsIDB4NTUsIDB4MjgsIDB4REYsCi0JMHg4QywgMHhBMSwgMHg4OSwgMHgwRCwgMHhCRiwgMHhFNiwgMHg0MiwgMHg2OCwKLQkweDQxLCAweDk5LCAweDJELCAweDBGLCAweEIwLCAweDU0LCAweEJCLCAweDE2Ci19OwotCi0vKiBmb3J3YXJkIHRhYmxlICovCi0jZGVmaW5lCUZUIFwKLVwKLQlWKEM2LDYzLDYzLEE1KSwJVihGOCw3Qyw3Qyw4NCksCVYoRUUsNzcsNzcsOTkpLAlWKEY2LDdCLDdCLDhEKSwJXAotCVYoRkYsRjIsRjIsMEQpLAlWKEQ2LDZCLDZCLEJEKSwJVihERSw2Riw2RixCMSksCVYoOTEsQzUsQzUsNTQpLAlcCi0JVig2MCwzMCwzMCw1MCksCVYoMDIsMDEsMDEsMDMpLAlWKENFLDY3LDY3LEE5KSwJVig1NiwyQiwyQiw3RCksCVwKLQlWKEU3LEZFLEZFLDE5KSwJVihCNSxENyxENyw2MiksCVYoNEQsQUIsQUIsRTYpLAlWKEVDLDc2LDc2LDlBKSwJXAotCVYoOEYsQ0EsQ0EsNDUpLAlWKDFGLDgyLDgyLDlEKSwJVig4OSxDOSxDOSw0MCksCVYoRkEsN0QsN0QsODcpLAlcCi0JVihFRixGQSxGQSwxNSksCVYoQjIsNTksNTksRUIpLAlWKDhFLDQ3LDQ3LEM5KSwJVihGQixGMCxGMCwwQiksCVwKLQlWKDQxLEFELEFELEVDKSwJVihCMyxENCxENCw2NyksCVYoNUYsQTIsQTIsRkQpLAlWKDQ1LEFGLEFGLEVBKSwJXAotCVYoMjMsOUMsOUMsQkYpLAlWKDUzLEE0LEE0LEY3KSwJVihFNCw3Miw3Miw5NiksCVYoOUIsQzAsQzAsNUIpLAlcCi0JVig3NSxCNyxCNyxDMiksCVYoRTEsRkQsRkQsMUMpLAlWKDNELDkzLDkzLEFFKSwJVig0QywyNiwyNiw2QSksCVwKLQlWKDZDLDM2LDM2LDVBKSwJVig3RSwzRiwzRiw0MSksCVYoRjUsRjcsRjcsMDIpLAlWKDgzLENDLENDLDRGKSwJXAotCVYoNjgsMzQsMzQsNUMpLAlWKDUxLEE1LEE1LEY0KSwJVihEMSxFNSxFNSwzNCksCVYoRjksRjEsRjEsMDgpLAlcCi0JVihFMiw3MSw3MSw5MyksCVYoQUIsRDgsRDgsNzMpLAlWKDYyLDMxLDMxLDUzKSwJVigyQSwxNSwxNSwzRiksCVwKLQlWKDA4LDA0LDA0LDBDKSwJVig5NSxDNyxDNyw1MiksCVYoNDYsMjMsMjMsNjUpLAlWKDlELEMzLEMzLDVFKSwJXAotCVYoMzAsMTgsMTgsMjgpLAlWKDM3LDk2LDk2LEExKSwJVigwQSwwNSwwNSwwRiksCVYoMkYsOUEsOUEsQjUpLAlcCi0JVigwRSwwNywwNywwOSksCVYoMjQsMTIsMTIsMzYpLAlWKDFCLDgwLDgwLDlCKSwJVihERixFMixFMiwzRCksCVwKLQlWKENELEVCLEVCLDI2KSwJVig0RSwyNywyNyw2OSksCVYoN0YsQjIsQjIsQ0QpLAlWKEVBLDc1LDc1LDlGKSwJXAotCVYoMTIsMDksMDksMUIpLAlWKDFELDgzLDgzLDlFKSwJVig1OCwyQywyQyw3NCksCVYoMzQsMUEsMUEsMkUpLAlcCi0JVigzNiwxQiwxQiwyRCksCVYoREMsNkUsNkUsQjIpLAlWKEI0LDVBLDVBLEVFKSwJVig1QixBMCxBMCxGQiksCVwKLQlWKEE0LDUyLDUyLEY2KSwJVig3NiwzQiwzQiw0RCksCVYoQjcsRDYsRDYsNjEpLAlWKDdELEIzLEIzLENFKSwJXAotCVYoNTIsMjksMjksN0IpLAlWKERELEUzLEUzLDNFKSwJVig1RSwyRiwyRiw3MSksCVYoMTMsODQsODQsOTcpLAlcCi0JVihBNiw1Myw1MyxGNSksCVYoQjksRDEsRDEsNjgpLAlWKDAwLDAwLDAwLDAwKSwJVihDMSxFRCxFRCwyQyksCVwKLQlWKDQwLDIwLDIwLDYwKSwJVihFMyxGQyxGQywxRiksCVYoNzksQjEsQjEsQzgpLAlWKEI2LDVCLDVCLEVEKSwJXAotCVYoRDQsNkEsNkEsQkUpLAlWKDhELENCLENCLDQ2KSwJVig2NyxCRSxCRSxEOSksCVYoNzIsMzksMzksNEIpLAlcCi0JVig5NCw0QSw0QSxERSksCVYoOTgsNEMsNEMsRDQpLAlWKEIwLDU4LDU4LEU4KSwJVig4NSxDRixDRiw0QSksCVwKLQlWKEJCLEQwLEQwLDZCKSwJVihDNSxFRixFRiwyQSksCVYoNEYsQUEsQUEsRTUpLAlWKEVELEZCLEZCLDE2KSwJXAotCVYoODYsNDMsNDMsQzUpLAlWKDlBLDRELDRELEQ3KSwJVig2NiwzMywzMyw1NSksCVYoMTEsODUsODUsOTQpLAlcCi0JVig4QSw0NSw0NSxDRiksCVYoRTksRjksRjksMTApLAlWKDA0LDAyLDAyLDA2KSwJVihGRSw3Riw3Riw4MSksCVwKLQlWKEEwLDUwLDUwLEYwKSwJVig3OCwzQywzQyw0NCksCVYoMjUsOUYsOUYsQkEpLAlWKDRCLEE4LEE4LEUzKSwJXAotCVYoQTIsNTEsNTEsRjMpLAlWKDVELEEzLEEzLEZFKSwJVig4MCw0MCw0MCxDMCksCVYoMDUsOEYsOEYsOEEpLAlcCi0JVigzRiw5Miw5MixBRCksCVYoMjEsOUQsOUQsQkMpLAlWKDcwLDM4LDM4LDQ4KSwJVihGMSxGNSxGNSwwNCksCVwKLQlWKDYzLEJDLEJDLERGKSwJVig3NyxCNixCNixDMSksCVYoQUYsREEsREEsNzUpLAlWKDQyLDIxLDIxLDYzKSwJXAotCVYoMjAsMTAsMTAsMzApLAlWKEU1LEZGLEZGLDFBKSwJVihGRCxGMyxGMywwRSksCVYoQkYsRDIsRDIsNkQpLAlcCi0JVig4MSxDRCxDRCw0QyksCVYoMTgsMEMsMEMsMTQpLAlWKDI2LDEzLDEzLDM1KSwJVihDMyxFQyxFQywyRiksCVwKLQlWKEJFLDVGLDVGLEUxKSwJVigzNSw5Nyw5NyxBMiksCVYoODgsNDQsNDQsQ0MpLAlWKDJFLDE3LDE3LDM5KSwJXAotCVYoOTMsQzQsQzQsNTcpLAlWKDU1LEE3LEE3LEYyKSwJVihGQyw3RSw3RSw4MiksCVYoN0EsM0QsM0QsNDcpLAlcCi0JVihDOCw2NCw2NCxBQyksCVYoQkEsNUQsNUQsRTcpLAlWKDMyLDE5LDE5LDJCKSwJVihFNiw3Myw3Myw5NSksCVwKLQlWKEMwLDYwLDYwLEEwKSwJVigxOSw4MSw4MSw5OCksCVYoOUUsNEYsNEYsRDEpLAlWKEEzLERDLERDLDdGKSwJXAotCVYoNDQsMjIsMjIsNjYpLAlWKDU0LDJBLDJBLDdFKSwJVigzQiw5MCw5MCxBQiksCVYoMEIsODgsODgsODMpLAlcCi0JVig4Qyw0Niw0NixDQSksCVYoQzcsRUUsRUUsMjkpLAlWKDZCLEI4LEI4LEQzKSwJVigyOCwxNCwxNCwzQyksCVwKLQlWKEE3LERFLERFLDc5KSwJVihCQyw1RSw1RSxFMiksCVYoMTYsMEIsMEIsMUQpLAlWKEFELERCLERCLDc2KSwJXAotCVYoREIsRTAsRTAsM0IpLAlWKDY0LDMyLDMyLDU2KSwJVig3NCwzQSwzQSw0RSksCVYoMTQsMEEsMEEsMUUpLAlcCi0JVig5Miw0OSw0OSxEQiksCVYoMEMsMDYsMDYsMEEpLAlWKDQ4LDI0LDI0LDZDKSwJVihCOCw1Qyw1QyxFNCksCVwKLQlWKDlGLEMyLEMyLDVEKSwJVihCRCxEMyxEMyw2RSksCVYoNDMsQUMsQUMsRUYpLAlWKEM0LDYyLDYyLEE2KSwJXAotCVYoMzksOTEsOTEsQTgpLAlWKDMxLDk1LDk1LEE0KSwJVihEMyxFNCxFNCwzNyksCVYoRjIsNzksNzksOEIpLAlcCi0JVihENSxFNyxFNywzMiksCVYoOEIsQzgsQzgsNDMpLAlWKDZFLDM3LDM3LDU5KSwJVihEQSw2RCw2RCxCNyksCVwKLQlWKDAxLDhELDhELDhDKSwJVihCMSxENSxENSw2NCksCVYoOUMsNEUsNEUsRDIpLAlWKDQ5LEE5LEE5LEUwKSwJXAotCVYoRDgsNkMsNkMsQjQpLAlWKEFDLDU2LDU2LEZBKSwJVihGMyxGNCxGNCwwNyksCVYoQ0YsRUEsRUEsMjUpLAlcCi0JVihDQSw2NSw2NSxBRiksCVYoRjQsN0EsN0EsOEUpLAlWKDQ3LEFFLEFFLEU5KSwJVigxMCwwOCwwOCwxOCksCVwKLQlWKDZGLEJBLEJBLEQ1KSwJVihGMCw3OCw3OCw4OCksCVYoNEEsMjUsMjUsNkYpLAlWKDVDLDJFLDJFLDcyKSwJXAotCVYoMzgsMUMsMUMsMjQpLAlWKDU3LEE2LEE2LEYxKSwJVig3MyxCNCxCNCxDNyksCVYoOTcsQzYsQzYsNTEpLAlcCi0JVihDQixFOCxFOCwyMyksCVYoQTEsREQsREQsN0MpLAlWKEU4LDc0LDc0LDlDKSwJVigzRSwxRiwxRiwyMSksCVwKLQlWKDk2LDRCLDRCLEREKSwJVig2MSxCRCxCRCxEQyksCVYoMEQsOEIsOEIsODYpLAlWKDBGLDhBLDhBLDg1KSwJXAotCVYoRTAsNzAsNzAsOTApLAlWKDdDLDNFLDNFLDQyKSwJVig3MSxCNSxCNSxDNCksCVYoQ0MsNjYsNjYsQUEpLAlcCi0JVig5MCw0OCw0OCxEOCksCVYoMDYsMDMsMDMsMDUpLAlWKEY3LEY2LEY2LDAxKSwJVigxQywwRSwwRSwxMiksCVwKLQlWKEMyLDYxLDYxLEEzKSwJVig2QSwzNSwzNSw1RiksCVYoQUUsNTcsNTcsRjkpLAlWKDY5LEI5LEI5LEQwKSwJXAotCVYoMTcsODYsODYsOTEpLAlWKDk5LEMxLEMxLDU4KSwJVigzQSwxRCwxRCwyNyksCVYoMjcsOUUsOUUsQjkpLAlcCi0JVihEOSxFMSxFMSwzOCksCVYoRUIsRjgsRjgsMTMpLAlWKDJCLDk4LDk4LEIzKSwJVigyMiwxMSwxMSwzMyksCVwKLQlWKEQyLDY5LDY5LEJCKSwJVihBOSxEOSxEOSw3MCksCVYoMDcsOEUsOEUsODkpLAlWKDMzLDk0LDk0LEE3KSwJXAotCVYoMkQsOUIsOUIsQjYpLAlWKDNDLDFFLDFFLDIyKSwJVigxNSw4Nyw4Nyw5MiksCVYoQzksRTksRTksMjApLAlcCi0JVig4NyxDRSxDRSw0OSksCVYoQUEsNTUsNTUsRkYpLAlWKDUwLDI4LDI4LDc4KSwJVihBNSxERixERiw3QSksCVwKLQlWKDAzLDhDLDhDLDhGKSwJVig1OSxBMSxBMSxGOCksCVYoMDksODksODksODApLAlWKDFBLDBELDBELDE3KSwJXAotCVYoNjUsQkYsQkYsREEpLAlWKEQ3LEU2LEU2LDMxKSwJVig4NCw0Miw0MixDNiksCVYoRDAsNjgsNjgsQjgpLAlcCi0JVig4Miw0MSw0MSxDMyksCVYoMjksOTksOTksQjApLAlWKDVBLDJELDJELDc3KSwJVigxRSwwRiwwRiwxMSksCVwKLQlWKDdCLEIwLEIwLENCKSwJVihBOCw1NCw1NCxGQyksCVYoNkQsQkIsQkIsRDYpLAlWKDJDLDE2LDE2LDNBKQotCi0jZGVmaW5lCVYoYSxiLGMsZCkgMHgjI2EjI2IjI2MjI2QKLXN0YXRpYyB1aW50MzIgRlQwWzI1Nl0gPSB7IEZUIH07Ci0KLSN1bmRlZiBWCi0KLSNkZWZpbmUJVihhLGIsYyxkKSAweCMjZCMjYSMjYiMjYwotc3RhdGljIHVpbnQzMiBGVDFbMjU2XSA9IHsgRlQgfTsKLQotI3VuZGVmIFYKLQotI2RlZmluZQlWKGEsYixjLGQpIDB4IyNjIyNkIyNhIyNiCi1zdGF0aWMgdWludDMyIEZUMlsyNTZdID0geyBGVCB9OwotCi0jdW5kZWYgVgotCi0jZGVmaW5lCVYoYSxiLGMsZCkgMHgjI2IjI2MjI2QjI2EKLXN0YXRpYyB1aW50MzIgRlQzWzI1Nl0gPSB7IEZUIH07Ci0KLSN1bmRlZiBWCi0KLSN1bmRlZiBGVAotCi0vKiByZXZlcnNlIFMtYm94ICovCi0KLXN0YXRpYyB1aW50MzIgUlNiWzI1Nl0gPSB7Ci0JMHg1MiwgMHgwOSwgMHg2QSwgMHhENSwgMHgzMCwgMHgzNiwgMHhBNSwgMHgzOCwKLQkweEJGLCAweDQwLCAweEEzLCAweDlFLCAweDgxLCAweEYzLCAweEQ3LCAweEZCLAotCTB4N0MsIDB4RTMsIDB4MzksIDB4ODIsIDB4OUIsIDB4MkYsIDB4RkYsIDB4ODcsCi0JMHgzNCwgMHg4RSwgMHg0MywgMHg0NCwgMHhDNCwgMHhERSwgMHhFOSwgMHhDQiwKLQkweDU0LCAweDdCLCAweDk0LCAweDMyLCAweEE2LCAweEMyLCAweDIzLCAweDNELAotCTB4RUUsIDB4NEMsIDB4OTUsIDB4MEIsIDB4NDIsIDB4RkEsIDB4QzMsIDB4NEUsCi0JMHgwOCwgMHgyRSwgMHhBMSwgMHg2NiwgMHgyOCwgMHhEOSwgMHgyNCwgMHhCMiwKLQkweDc2LCAweDVCLCAweEEyLCAweDQ5LCAweDZELCAweDhCLCAweEQxLCAweDI1LAotCTB4NzIsIDB4RjgsIDB4RjYsIDB4NjQsIDB4ODYsIDB4NjgsIDB4OTgsIDB4MTYsCi0JMHhENCwgMHhBNCwgMHg1QywgMHhDQywgMHg1RCwgMHg2NSwgMHhCNiwgMHg5MiwKLQkweDZDLCAweDcwLCAweDQ4LCAweDUwLCAweEZELCAweEVELCAweEI5LCAweERBLAotCTB4NUUsIDB4MTUsIDB4NDYsIDB4NTcsIDB4QTcsIDB4OEQsIDB4OUQsIDB4ODQsCi0JMHg5MCwgMHhEOCwgMHhBQiwgMHgwMCwgMHg4QywgMHhCQywgMHhEMywgMHgwQSwKLQkweEY3LCAweEU0LCAweDU4LCAweDA1LCAweEI4LCAweEIzLCAweDQ1LCAweDA2LAotCTB4RDAsIDB4MkMsIDB4MUUsIDB4OEYsIDB4Q0EsIDB4M0YsIDB4MEYsIDB4MDIsCi0JMHhDMSwgMHhBRiwgMHhCRCwgMHgwMywgMHgwMSwgMHgxMywgMHg4QSwgMHg2QiwKLQkweDNBLCAweDkxLCAweDExLCAweDQxLCAweDRGLCAweDY3LCAweERDLCAweEVBLAotCTB4OTcsIDB4RjIsIDB4Q0YsIDB4Q0UsIDB4RjAsIDB4QjQsIDB4RTYsIDB4NzMsCi0JMHg5NiwgMHhBQywgMHg3NCwgMHgyMiwgMHhFNywgMHhBRCwgMHgzNSwgMHg4NSwKLQkweEUyLCAweEY5LCAweDM3LCAweEU4LCAweDFDLCAweDc1LCAweERGLCAweDZFLAotCTB4NDcsIDB4RjEsIDB4MUEsIDB4NzEsIDB4MUQsIDB4MjksIDB4QzUsIDB4ODksCi0JMHg2RiwgMHhCNywgMHg2MiwgMHgwRSwgMHhBQSwgMHgxOCwgMHhCRSwgMHgxQiwKLQkweEZDLCAweDU2LCAweDNFLCAweDRCLCAweEM2LCAweEQyLCAweDc5LCAweDIwLAotCTB4OUEsIDB4REIsIDB4QzAsIDB4RkUsIDB4NzgsIDB4Q0QsIDB4NUEsIDB4RjQsCi0JMHgxRiwgMHhERCwgMHhBOCwgMHgzMywgMHg4OCwgMHgwNywgMHhDNywgMHgzMSwKLQkweEIxLCAweDEyLCAweDEwLCAweDU5LCAweDI3LCAweDgwLCAweEVDLCAweDVGLAotCTB4NjAsIDB4NTEsIDB4N0YsIDB4QTksIDB4MTksIDB4QjUsIDB4NEEsIDB4MEQsCi0JMHgyRCwgMHhFNSwgMHg3QSwgMHg5RiwgMHg5MywgMHhDOSwgMHg5QywgMHhFRiwKLQkweEEwLCAweEUwLCAweDNCLCAweDRELCAweEFFLCAweDJBLCAweEY1LCAweEIwLAotCTB4QzgsIDB4RUIsIDB4QkIsIDB4M0MsIDB4ODMsIDB4NTMsIDB4OTksIDB4NjEsCi0JMHgxNywgMHgyQiwgMHgwNCwgMHg3RSwgMHhCQSwgMHg3NywgMHhENiwgMHgyNiwKLQkweEUxLCAweDY5LCAweDE0LCAweDYzLCAweDU1LCAweDIxLCAweDBDLCAweDdECi19OwotCi0vKiByZXZlcnNlIHRhYmxlICovCi0KLSNkZWZpbmUJUlQgXAotXAotCVYoNTEsRjQsQTcsNTApLAlWKDdFLDQxLDY1LDUzKSwJVigxQSwxNyxBNCxDMyksCVYoM0EsMjcsNUUsOTYpLAlcCi0JVigzQixBQiw2QixDQiksCVYoMUYsOUQsNDUsRjEpLAlWKEFDLEZBLDU4LEFCKSwJVig0QixFMywwMyw5MyksCVwKLQlWKDIwLDMwLEZBLDU1KSwJVihBRCw3Niw2RCxGNiksCVYoODgsQ0MsNzYsOTEpLAlWKEY1LDAyLDRDLDI1KSwJXAotCVYoNEYsRTUsRDcsRkMpLAlWKEM1LDJBLENCLEQ3KSwJVigyNiwzNSw0NCw4MCksCVYoQjUsNjIsQTMsOEYpLAlcCi0JVihERSxCMSw1QSw0OSksCVYoMjUsQkEsMUIsNjcpLAlWKDQ1LEVBLDBFLDk4KSwJVig1RCxGRSxDMCxFMSksCVwKLQlWKEMzLDJGLDc1LDAyKSwJVig4MSw0QyxGMCwxMiksCVYoOEQsNDYsOTcsQTMpLAlWKDZCLEQzLEY5LEM2KSwJXAotCVYoMDMsOEYsNUYsRTcpLAlWKDE1LDkyLDlDLDk1KSwJVihCRiw2RCw3QSxFQiksCVYoOTUsNTIsNTksREEpLAlcCi0JVihENCxCRSw4MywyRCksCVYoNTgsNzQsMjEsRDMpLAlWKDQ5LEUwLDY5LDI5KSwJVig4RSxDOSxDOCw0NCksCVwKLQlWKDc1LEMyLDg5LDZBKSwJVihGNCw4RSw3OSw3OCksCVYoOTksNTgsM0UsNkIpLAlWKDI3LEI5LDcxLEREKSwJXAotCVYoQkUsRTEsNEYsQjYpLAlWKEYwLDg4LEFELDE3KSwJVihDOSwyMCxBQyw2NiksCVYoN0QsQ0UsM0EsQjQpLAlcCi0JVig2MyxERiw0QSwxOCksCVYoRTUsMUEsMzEsODIpLAlWKDk3LDUxLDMzLDYwKSwJVig2Miw1Myw3Riw0NSksCVwKLQlWKEIxLDY0LDc3LEUwKSwJVihCQiw2QixBRSw4NCksCVYoRkUsODEsQTAsMUMpLAlWKEY5LDA4LDJCLDk0KSwJXAotCVYoNzAsNDgsNjgsNTgpLAlWKDhGLDQ1LEZELDE5KSwJVig5NCxERSw2Qyw4NyksCVYoNTIsN0IsRjgsQjcpLAlcCi0JVihBQiw3MyxEMywyMyksCVYoNzIsNEIsMDIsRTIpLAlWKEUzLDFGLDhGLDU3KSwJVig2Niw1NSxBQiwyQSksCVwKLQlWKEIyLEVCLDI4LDA3KSwJVigyRixCNSxDMiwwMyksCVYoODYsQzUsN0IsOUEpLAlWKEQzLDM3LDA4LEE1KSwJXAotCVYoMzAsMjgsODcsRjIpLAlWKDIzLEJGLEE1LEIyKSwJVigwMiwwMyw2QSxCQSksCVYoRUQsMTYsODIsNUMpLAlcCi0JVig4QSxDRiwxQywyQiksCVYoQTcsNzksQjQsOTIpLAlWKEYzLDA3LEYyLEYwKSwJVig0RSw2OSxFMixBMSksCVwKLQlWKDY1LERBLEY0LENEKSwJVigwNiwwNSxCRSxENSksCVYoRDEsMzQsNjIsMUYpLAlWKEM0LEE2LEZFLDhBKSwJXAotCVYoMzQsMkUsNTMsOUQpLAlWKEEyLEYzLDU1LEEwKSwJVigwNSw4QSxFMSwzMiksCVYoQTQsRjYsRUIsNzUpLAlcCi0JVigwQiw4MyxFQywzOSksCVYoNDAsNjAsRUYsQUEpLAlWKDVFLDcxLDlGLDA2KSwJVihCRCw2RSwxMCw1MSksCVwKLQlWKDNFLDIxLDhBLEY5KSwJVig5NixERCwwNiwzRCksCVYoREQsM0UsMDUsQUUpLAlWKDRELEU2LEJELDQ2KSwJXAotCVYoOTEsNTQsOEQsQjUpLAlWKDcxLEM0LDVELDA1KSwJVigwNCwwNixENCw2RiksCVYoNjAsNTAsMTUsRkYpLAlcCi0JVigxOSw5OCxGQiwyNCksCVYoRDYsQkQsRTksOTcpLAlWKDg5LDQwLDQzLENDKSwJVig2NyxEOSw5RSw3NyksCVwKLQlWKEIwLEU4LDQyLEJEKSwJVigwNyw4OSw4Qiw4OCksCVYoRTcsMTksNUIsMzgpLAlWKDc5LEM4LEVFLERCKSwJXAotCVYoQTEsN0MsMEEsNDcpLAlWKDdDLDQyLDBGLEU5KSwJVihGOCw4NCwxRSxDOSksCVYoMDAsMDAsMDAsMDApLAlcCi0JVigwOSw4MCw4Niw4MyksCVYoMzIsMkIsRUQsNDgpLAlWKDFFLDExLDcwLEFDKSwJVig2Qyw1QSw3Miw0RSksCVwKLQlWKEZELDBFLEZGLEZCKSwJVigwRiw4NSwzOCw1NiksCVYoM0QsQUUsRDUsMUUpLAlWKDM2LDJELDM5LDI3KSwJXAotCVYoMEEsMEYsRDksNjQpLAlWKDY4LDVDLEE2LDIxKSwJVig5Qiw1Qiw1NCxEMSksCVYoMjQsMzYsMkUsM0EpLAlcCi0JVigwQywwQSw2NyxCMSksCVYoOTMsNTcsRTcsMEYpLAlWKEI0LEVFLDk2LEQyKSwJVigxQiw5Qiw5MSw5RSksCVwKLQlWKDgwLEMwLEM1LDRGKSwJVig2MSxEQywyMCxBMiksCVYoNUEsNzcsNEIsNjkpLAlWKDFDLDEyLDFBLDE2KSwJXAotCVYoRTIsOTMsQkEsMEEpLAlWKEMwLEEwLDJBLEU1KSwJVigzQywyMixFMCw0MyksCVYoMTIsMUIsMTcsMUQpLAlcCi0JVigwRSwwOSwwRCwwQiksCVYoRjIsOEIsQzcsQUQpLAlWKDJELEI2LEE4LEI5KSwJVigxNCwxRSxBOSxDOCksCVwKLQlWKDU3LEYxLDE5LDg1KSwJVihBRiw3NSwwNyw0QyksCVYoRUUsOTksREQsQkIpLAlWKEEzLDdGLDYwLEZEKSwJXAotCVYoRjcsMDEsMjYsOUYpLAlWKDVDLDcyLEY1LEJDKSwJVig0NCw2NiwzQixDNSksCVYoNUIsRkIsN0UsMzQpLAlcCi0JVig4Qiw0MywyOSw3NiksCVYoQ0IsMjMsQzYsREMpLAlWKEI2LEVELEZDLDY4KSwJVihCOCxFNCxGMSw2MyksCVwKLQlWKEQ3LDMxLERDLENBKSwJVig0Miw2Myw4NSwxMCksCVYoMTMsOTcsMjIsNDApLAlWKDg0LEM2LDExLDIwKSwJXAotCVYoODUsNEEsMjQsN0QpLAlWKEQyLEJCLDNELEY4KSwJVihBRSxGOSwzMiwxMSksCVYoQzcsMjksQTEsNkQpLAlcCi0JVigxRCw5RSwyRiw0QiksCVYoREMsQjIsMzAsRjMpLAlWKDBELDg2LDUyLEVDKSwJVig3NyxDMSxFMyxEMCksCVwKLQlWKDJCLEIzLDE2LDZDKSwJVihBOSw3MCxCOSw5OSksCVYoMTEsOTQsNDgsRkEpLAlWKDQ3LEU5LDY0LDIyKSwJXAotCVYoQTgsRkMsOEMsQzQpLAlWKEEwLEYwLDNGLDFBKSwJVig1Niw3RCwyQyxEOCksCVYoMjIsMzMsOTAsRUYpLAlcCi0JVig4Nyw0OSw0RSxDNyksCVYoRDksMzgsRDEsQzEpLAlWKDhDLENBLEEyLEZFKSwJVig5OCxENCwwQiwzNiksCVwKLQlWKEE2LEY1LDgxLENGKSwJVihBNSw3QSxERSwyOCksCVYoREEsQjcsOEUsMjYpLAlWKDNGLEFELEJGLEE0KSwJXAotCVYoMkMsM0EsOUQsRTQpLAlWKDUwLDc4LDkyLDBEKSwJVig2QSw1RixDQyw5QiksCVYoNTQsN0UsNDYsNjIpLAlcCi0JVihGNiw4RCwxMyxDMiksCVYoOTAsRDgsQjgsRTgpLAlWKDJFLDM5LEY3LDVFKSwJVig4MixDMyxBRixGNSksCVwKLQlWKDlGLDVELDgwLEJFKSwJVig2OSxEMCw5Myw3QyksCVYoNkYsRDUsMkQsQTkpLAlWKENGLDI1LDEyLEIzKSwJXAotCVYoQzgsQUMsOTksM0IpLAlWKDEwLDE4LDdELEE3KSwJVihFOCw5Qyw2Myw2RSksCVYoREIsM0IsQkIsN0IpLAlcCi0JVihDRCwyNiw3OCwwOSksCVYoNkUsNTksMTgsRjQpLAlWKEVDLDlBLEI3LDAxKSwJVig4Myw0Riw5QSxBOCksCVwKLQlWKEU2LDk1LDZFLDY1KSwJVihBQSxGRixFNiw3RSksCVYoMjEsQkMsQ0YsMDgpLAlWKEVGLDE1LEU4LEU2KSwJXAotCVYoQkEsRTcsOUIsRDkpLAlWKDRBLDZGLDM2LENFKSwJVihFQSw5RiwwOSxENCksCVYoMjksQjAsN0MsRDYpLAlcCi0JVigzMSxBNCxCMixBRiksCVYoMkEsM0YsMjMsMzEpLAlWKEM2LEE1LDk0LDMwKSwJVigzNSxBMiw2NixDMCksCVwKLQlWKDc0LDRFLEJDLDM3KSwJVihGQyw4MixDQSxBNiksCVYoRTAsOTAsRDAsQjApLAlWKDMzLEE3LEQ4LDE1KSwJXAotCVYoRjEsMDQsOTgsNEEpLAlWKDQxLEVDLERBLEY3KSwJVig3RixDRCw1MCwwRSksCVYoMTcsOTEsRjYsMkYpLAlcCi0JVig3Niw0RCxENiw4RCksCVYoNDMsRUYsQjAsNEQpLAlWKENDLEFBLDRELDU0KSwJVihFNCw5NiwwNCxERiksCVwKLQlWKDlFLEQxLEI1LEUzKSwJVig0Qyw2QSw4OCwxQiksCVYoQzEsMkMsMUYsQjgpLAlWKDQ2LDY1LDUxLDdGKSwJXAotCVYoOUQsNUUsRUEsMDQpLAlWKDAxLDhDLDM1LDVEKSwJVihGQSw4Nyw3NCw3MyksCVYoRkIsMEIsNDEsMkUpLAlcCi0JVihCMyw2NywxRCw1QSksCVYoOTIsREIsRDIsNTIpLAlWKEU5LDEwLDU2LDMzKSwJVig2RCxENiw0NywxMyksCVwKLQlWKDlBLEQ3LDYxLDhDKSwJVigzNyxBMSwwQyw3QSksCVYoNTksRjgsMTQsOEUpLAlWKEVCLDEzLDNDLDg5KSwJXAotCVYoQ0UsQTksMjcsRUUpLAlWKEI3LDYxLEM5LDM1KSwJVihFMSwxQyxFNSxFRCksCVYoN0EsNDcsQjEsM0MpLAlcCi0JVig5QyxEMixERiw1OSksCVYoNTUsRjIsNzMsM0YpLAlWKDE4LDE0LENFLDc5KSwJVig3MyxDNywzNyxCRiksCVwKLQlWKDUzLEY3LENELEVBKSwJVig1RixGRCxBQSw1QiksCVYoREYsM0QsNkYsMTQpLAlWKDc4LDQ0LERCLDg2KSwJXAotCVYoQ0EsQUYsRjMsODEpLAlWKEI5LDY4LEM0LDNFKSwJVigzOCwyNCwzNCwyQyksCVYoQzIsQTMsNDAsNUYpLAlcCi0JVigxNiwxRCxDMyw3MiksCVYoQkMsRTIsMjUsMEMpLAlWKDI4LDNDLDQ5LDhCKSwJVihGRiwwRCw5NSw0MSksCVwKLQlWKDM5LEE4LDAxLDcxKSwJVigwOCwwQyxCMyxERSksCVYoRDgsQjQsRTQsOUMpLAlWKDY0LDU2LEMxLDkwKSwJXAotCVYoN0IsQ0IsODQsNjEpLAlWKEQ1LDMyLEI2LDcwKSwJVig0OCw2Qyw1Qyw3NCksCVYoRDAsQjgsNTcsNDIpCi0KLSNkZWZpbmUJVihhLGIsYyxkKSAweCMjYSMjYiMjYyMjZAotc3RhdGljIHVpbnQzMiBSVDBbMjU2XSA9IHsgUlQgfTsKLQotI3VuZGVmIFYKLQotI2RlZmluZQlWKGEsYixjLGQpIDB4IyNkIyNhIyNiIyNjCi1zdGF0aWMgdWludDMyIFJUMVsyNTZdID0geyBSVCB9OwotCi0jdW5kZWYgVgotCi0jZGVmaW5lCVYoYSxiLGMsZCkgMHgjI2MjI2QjI2EjI2IKLXN0YXRpYyB1aW50MzIgUlQyWzI1Nl0gPSB7IFJUIH07Ci0KLSN1bmRlZiBWCi0KLSNkZWZpbmUJVihhLGIsYyxkKSAweCMjYiMjYyMjZCMjYQotc3RhdGljIHVpbnQzMiBSVDNbMjU2XSA9IHsgUlQgfTsKLQotI3VuZGVmIFYKLQotI3VuZGVmIFJUCi0KLS8qIHJvdW5kIGNvbnN0YW50cyAqLwotCi1zdGF0aWMgdWludDMyIFJDT05bMTBdID0gewotCTB4MDEwMDAwMDAsIDB4MDIwMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDgwMDAwMDAsCi0JMHgxMDAwMDAwMCwgMHgyMDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg4MDAwMDAwMCwKLQkweDFCMDAwMDAwLCAweDM2MDAwMDAwCi19OwotCi0vKiBrZXkgc2NoZWR1bGUJdGFibGVzICovCi0KLXN0YXRpYyBpbnQgS1RfaW5pdCA9IDE7Ci0KLXN0YXRpYyB1aW50MzIgS1QwWzI1Nl07Ci1zdGF0aWMgdWludDMyIEtUMVsyNTZdOwotc3RhdGljIHVpbnQzMiBLVDJbMjU2XTsKLXN0YXRpYyB1aW50MzIgS1QzWzI1Nl07Ci0KLS8qIHBsYXRmb3JtLWluZGVwZW5kZW50CTMyLWJpdCBpbnRlZ2VyIG1hbmlwdWxhdGlvbgltYWNyb3MgKi8KLQotI2RlZmluZQlHRVRfVUlOVDMyKG4sYixpKQkJCQkJCVwKLXsJCQkJCQkJCQkJCQlcCi0JKG4pCT0gKAkodWludDMyKSAoYilbKGkpCV0gPDwgMjQJKQkJXAotCQl8ICgJKHVpbnQzMikgKGIpWyhpKSArIDFdIDw8IDE2CSkJCVwKLQkJfCAoCSh1aW50MzIpIChiKVsoaSkgKyAyXSA8PCAgOAkpCQlcCi0JCXwgKAkodWludDMyKSAoYilbKGkpICsgM10JCSk7CQlcCi19Ci0KLSNkZWZpbmUJUFVUX1VJTlQzMihuLGIsaSkJCQkJCQlcCi17CQkJCQkJCQkJCQkJXAotCShiKVsoaSkJICAgXSA9ICh1aW50OCkgKCAobikgPj4JMjQgKTsJCVwKLQkoYilbKGkpCSsgMV0gPSAodWludDgpICggKG4pID4+CTE2ICk7CQlcCi0JKGIpWyhpKQkrIDJdID0gKHVpbnQ4KSAoIChuKSA+PgkgOCApOwkJXAotCShiKVsoaSkJKyAzXSA9ICh1aW50OCkgKCAobikJICAgKTsJCVwKLX0KLQotaW50IHJ0X2Flc19zZXRfa2V5KHN0cnVjdCBhZXNfY29udGV4dCAqIGN0eCwgdWludDggKiBrZXksIGludCBuYml0cykKLXsKLQlpbnQgaTsKLQl1aW50MzIgKlJLLCAqU0s7Ci0KLQlzd2l0Y2ggKG5iaXRzKSB7Ci0JY2FzZSAxMjg6Ci0JCWN0eC0+bnIgPSAxMDsKLQkJYnJlYWs7Ci0JY2FzZSAxOTI6Ci0JCWN0eC0+bnIgPSAxMjsKLQkJYnJlYWs7Ci0JY2FzZSAyNTY6Ci0JCWN0eC0+bnIgPSAxNDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuICgxKTsKLQl9Ci0KLQlSSyA9ICh1aW50MzIgKikgY3R4LT5lcms7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgKG5iaXRzID4+IDUpOyBpKyspIHsKLQkJR0VUX1VJTlQzMihSS1tpXSwga2V5LCBpICogNCk7Ci0JfQotCi0JLyogc2V0dXAgZW5jcnlwdGlvbiAgICAgcm91bmQga2V5cyAqLwotCi0Jc3dpdGNoIChuYml0cykgewotCWNhc2UgMTI4OgotCi0JCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrLCBSSyArPSA0KSB7Ci0JCQlSS1s0XSA9IFJLWzBdIF4gUkNPTltpXSBeCi0JCQkgICAgKEZTYlsodWludDgpIChSS1szXSA+PiAxNildIDw8IDI0KSBeCi0JCQkgICAgKEZTYlsodWludDgpIChSS1szXSA+PiA4KV0gPDwgMTYpIF4KLQkJCSAgICAoRlNiWyh1aW50OCkgKFJLWzNdKV0gPDwgOCkgXgotCQkJICAgIChGU2JbKHVpbnQ4KSAoUktbM10gPj4gMjQpXSk7Ci0KLQkJCVJLWzVdID0gUktbMV0gXiBSS1s0XTsKLQkJCVJLWzZdID0gUktbMl0gXiBSS1s1XTsKLQkJCVJLWzddID0gUktbM10gXiBSS1s2XTsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgMTkyOgotCi0JCWZvciAoaSA9IDA7IGkgPCA4OyBpKyssIFJLICs9IDYpIHsKLQkJCVJLWzZdID0gUktbMF0gXiBSQ09OW2ldIF4KLQkJCSAgICAoRlNiWyh1aW50OCkgKFJLWzVdID4+IDE2KV0gPDwgMjQpIF4KLQkJCSAgICAoRlNiWyh1aW50OCkgKFJLWzVdID4+IDgpXSA8PCAxNikgXgotCQkJICAgIChGU2JbKHVpbnQ4KSAoUktbNV0pXSA8PCA4KSBeCi0JCQkgICAgKEZTYlsodWludDgpIChSS1s1XSA+PiAyNCldKTsKLQotCQkJUktbN10gPSBSS1sxXSBeIFJLWzZdOwotCQkJUktbOF0gPSBSS1syXSBeIFJLWzddOwotCQkJUktbOV0gPSBSS1szXSBeIFJLWzhdOwotCQkJUktbMTBdID0gUktbNF0gXiBSS1s5XTsKLQkJCVJLWzExXSA9IFJLWzVdIF4gUktbMTBdOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSAyNTY6Ci0KLQkJZm9yIChpID0gMDsgaSA8IDc7IGkrKywgUksgKz0gOCkgewotCQkJUktbOF0gPSBSS1swXSBeIFJDT05baV0gXgotCQkJICAgIChGU2JbKHVpbnQ4KSAoUktbN10gPj4gMTYpXSA8PCAyNCkgXgotCQkJICAgIChGU2JbKHVpbnQ4KSAoUktbN10gPj4gOCldIDw8IDE2KSBeCi0JCQkgICAgKEZTYlsodWludDgpIChSS1s3XSldIDw8IDgpIF4KLQkJCSAgICAoRlNiWyh1aW50OCkgKFJLWzddID4+IDI0KV0pOwotCi0JCQlSS1s5XSA9IFJLWzFdIF4gUktbOF07Ci0JCQlSS1sxMF0gPSBSS1syXSBeIFJLWzldOwotCQkJUktbMTFdID0gUktbM10gXiBSS1sxMF07Ci0KLQkJCVJLWzEyXSA9IFJLWzRdIF4KLQkJCSAgICAoRlNiWyh1aW50OCkgKFJLWzExXSA+PiAyNCldIDw8IDI0KSBeCi0JCQkgICAgKEZTYlsodWludDgpIChSS1sxMV0gPj4gMTYpXSA8PCAxNikgXgotCQkJICAgIChGU2JbKHVpbnQ4KSAoUktbMTFdID4+IDgpXSA8PCA4KSBeCi0JCQkgICAgKEZTYlsodWludDgpIChSS1sxMV0pXSk7Ci0KLQkJCVJLWzEzXSA9IFJLWzVdIF4gUktbMTJdOwotCQkJUktbMTRdID0gUktbNl0gXiBSS1sxM107Ci0JCQlSS1sxNV0gPSBSS1s3XSBeIFJLWzE0XTsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQkvKiBzZXR1cCBkZWNyeXB0aW9uICAgICByb3VuZCBrZXlzICovCi0KLQlpZiAoS1RfaW5pdCkgewotCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLQkJCUtUMFtpXSA9IFJUMFtGU2JbaV1dOwotCQkJS1QxW2ldID0gUlQxW0ZTYltpXV07Ci0JCQlLVDJbaV0gPSBSVDJbRlNiW2ldXTsKLQkJCUtUM1tpXSA9IFJUM1tGU2JbaV1dOwotCQl9Ci0KLQkJS1RfaW5pdCA9IDA7Ci0JfQotCi0JU0sgPSAodWludDMyICopIGN0eC0+ZHJrOwotCi0JKlNLKysgPSAqUksrKzsKLQkqU0srKyA9ICpSSysrOwotCSpTSysrID0gKlJLKys7Ci0JKlNLKysgPSAqUksrKzsKLQotCWZvciAoaSA9IDE7IGkgPCBjdHgtPm5yOyBpKyspIHsKLQkJUksgLT0gODsKLQotCQkqU0srKyA9IEtUMFsodWludDgpICgqUksgPj4gMjQpXSBeCi0JCSAgICBLVDFbKHVpbnQ4KSAoKlJLID4+IDE2KV0gXgotCQkgICAgS1QyWyh1aW50OCkgKCpSSyA+PiA4KV0gXiBLVDNbKHVpbnQ4KSAoKlJLKV07Ci0JCVJLKys7Ci0KLQkJKlNLKysgPSBLVDBbKHVpbnQ4KSAoKlJLID4+IDI0KV0gXgotCQkgICAgS1QxWyh1aW50OCkgKCpSSyA+PiAxNildIF4KLQkJICAgIEtUMlsodWludDgpICgqUksgPj4gOCldIF4gS1QzWyh1aW50OCkgKCpSSyldOwotCQlSSysrOwotCi0JCSpTSysrID0gS1QwWyh1aW50OCkgKCpSSyA+PiAyNCldIF4KLQkJICAgIEtUMVsodWludDgpICgqUksgPj4gMTYpXSBeCi0JCSAgICBLVDJbKHVpbnQ4KSAoKlJLID4+IDgpXSBeIEtUM1sodWludDgpICgqUkspXTsKLQkJUksrKzsKLQotCQkqU0srKyA9IEtUMFsodWludDgpICgqUksgPj4gMjQpXSBeCi0JCSAgICBLVDFbKHVpbnQ4KSAoKlJLID4+IDE2KV0gXgotCQkgICAgS1QyWyh1aW50OCkgKCpSSyA+PiA4KV0gXiBLVDNbKHVpbnQ4KSAoKlJLKV07Ci0JCVJLKys7Ci0JfQotCi0JUksgLT0gODsKLQotCSpTSysrID0gKlJLKys7Ci0JKlNLKysgPSAqUksrKzsKLQkqU0srKyA9ICpSSysrOwotCSpTSysrID0gKlJLKys7Ci0KLQlyZXR1cm4gKDApOwotfQotCi0vKiBBRVMgMTI4LWJpdCBibG9jayBlbmNyeXB0aW9uCXJvdXRpbmUJKi8KLQotdm9pZCBydF9hZXNfZW5jcnlwdChzdHJ1Y3QgYWVzX2NvbnRleHQgKiBjdHgsIHVpbnQ4IGlucHV0WzE2XSwgdWludDggb3V0cHV0WzE2XSkKLXsKLQl1aW50MzIgKlJLLCBYMCwgWDEsIFgyLCBYMywgWTAsIFkxLCBZMiwgWTM7Ci0KLQlSSyA9ICh1aW50MzIgKikgY3R4LT5lcms7Ci0JR0VUX1VJTlQzMihYMCwgaW5wdXQsIDApOwotCVgwIF49IFJLWzBdOwotCUdFVF9VSU5UMzIoWDEsIGlucHV0LCA0KTsKLQlYMSBePSBSS1sxXTsKLQlHRVRfVUlOVDMyKFgyLCBpbnB1dCwgOCk7Ci0JWDIgXj0gUktbMl07Ci0JR0VUX1VJTlQzMihYMywgaW5wdXQsIDEyKTsKLQlYMyBePSBSS1szXTsKLQotI2RlZmluZQlBRVNfRlJPVU5EKFgwLFgxLFgyLFgzLFkwLFkxLFkyLFkzKQkJXAotewkJCQkJCQkJCQkJCVwKLQlSSyArPSA0OwkJCQkJCQkJCVwKLQkJCQkJCQkJCQkJCVwKLQlYMCA9IFJLWzBdIF4gRlQwWyAodWludDgpICgJWTAgPj4gMjQgKSBdIF4JXAotCQkJCSBGVDFbICh1aW50OCkgKAlZMSA+PiAxNiApIF0gXglcCi0JCQkJIEZUMlsgKHVpbnQ4KSAoCVkyID4+ICA4ICkgXSBeCVwKLQkJCQkgRlQzWyAodWludDgpICgJWTMJCSApIF07CVwKLQkJCQkJCQkJCQkJCVwKLQlYMSA9IFJLWzFdIF4gRlQwWyAodWludDgpICgJWTEgPj4gMjQgKSBdIF4JXAotCQkJCSBGVDFbICh1aW50OCkgKAlZMiA+PiAxNiApIF0gXglcCi0JCQkJIEZUMlsgKHVpbnQ4KSAoCVkzID4+ICA4ICkgXSBeCVwKLQkJCQkgRlQzWyAodWludDgpICgJWTAJCSApIF07CVwKLQkJCQkJCQkJCQkJCVwKLQlYMiA9IFJLWzJdIF4gRlQwWyAodWludDgpICgJWTIgPj4gMjQgKSBdIF4JXAotCQkJCSBGVDFbICh1aW50OCkgKAlZMyA+PiAxNiApIF0gXglcCi0JCQkJIEZUMlsgKHVpbnQ4KSAoCVkwID4+ICA4ICkgXSBeCVwKLQkJCQkgRlQzWyAodWludDgpICgJWTEJCSApIF07CVwKLQkJCQkJCQkJCQkJCVwKLQlYMyA9IFJLWzNdIF4gRlQwWyAodWludDgpICgJWTMgPj4gMjQgKSBdIF4JXAotCQkJCSBGVDFbICh1aW50OCkgKAlZMCA+PiAxNiApIF0gXglcCi0JCQkJIEZUMlsgKHVpbnQ4KSAoCVkxID4+ICA4ICkgXSBeCVwKLQkJCQkgRlQzWyAodWludDgpICgJWTIJCSApIF07CVwKLX0KLQotCUFFU19GUk9VTkQoWTAsIFkxLCBZMiwgWTMsIFgwLCBYMSwgWDIsIFgzKTsJLyogcm91bmQgMSAqLwotCUFFU19GUk9VTkQoWDAsIFgxLCBYMiwgWDMsIFkwLCBZMSwgWTIsIFkzKTsJLyogcm91bmQgMiAqLwotCUFFU19GUk9VTkQoWTAsIFkxLCBZMiwgWTMsIFgwLCBYMSwgWDIsIFgzKTsJLyogcm91bmQgMyAqLwotCUFFU19GUk9VTkQoWDAsIFgxLCBYMiwgWDMsIFkwLCBZMSwgWTIsIFkzKTsJLyogcm91bmQgNCAqLwotCUFFU19GUk9VTkQoWTAsIFkxLCBZMiwgWTMsIFgwLCBYMSwgWDIsIFgzKTsJLyogcm91bmQgNSAqLwotCUFFU19GUk9VTkQoWDAsIFgxLCBYMiwgWDMsIFkwLCBZMSwgWTIsIFkzKTsJLyogcm91bmQgNiAqLwotCUFFU19GUk9VTkQoWTAsIFkxLCBZMiwgWTMsIFgwLCBYMSwgWDIsIFgzKTsJLyogcm91bmQgNyAqLwotCUFFU19GUk9VTkQoWDAsIFgxLCBYMiwgWDMsIFkwLCBZMSwgWTIsIFkzKTsJLyogcm91bmQgOCAqLwotCUFFU19GUk9VTkQoWTAsIFkxLCBZMiwgWTMsIFgwLCBYMSwgWDIsIFgzKTsJLyogcm91bmQgOSAqLwotCi0JaWYgKGN0eC0+bnIgPiAxMCkgewotCQlBRVNfRlJPVU5EKFgwLCBYMSwgWDIsIFgzLCBZMCwgWTEsIFkyLCBZMyk7CS8qIHJvdW5kIDEwICAgICAqLwotCQlBRVNfRlJPVU5EKFkwLCBZMSwgWTIsIFkzLCBYMCwgWDEsIFgyLCBYMyk7CS8qIHJvdW5kIDExICAgICAqLwotCX0KLQotCWlmIChjdHgtPm5yID4gMTIpIHsKLQkJQUVTX0ZST1VORChYMCwgWDEsIFgyLCBYMywgWTAsIFkxLCBZMiwgWTMpOwkvKiByb3VuZCAxMiAgICAgKi8KLQkJQUVTX0ZST1VORChZMCwgWTEsIFkyLCBZMywgWDAsIFgxLCBYMiwgWDMpOwkvKiByb3VuZCAxMyAgICAgKi8KLQl9Ci0KLQkvKiBsYXN0IHJvdW5kICovCi0KLQlSSyArPSA0OwotCi0JWDAgPSBSS1swXSBeIChGU2JbKHVpbnQ4KSAoWTAgPj4gMjQpXSA8PCAyNCkgXgotCSAgICAoRlNiWyh1aW50OCkgKFkxID4+IDE2KV0gPDwgMTYpIF4KLQkgICAgKEZTYlsodWludDgpIChZMiA+PiA4KV0gPDwgOCkgXiAoRlNiWyh1aW50OCkgKFkzKV0pOwotCi0JWDEgPSBSS1sxXSBeIChGU2JbKHVpbnQ4KSAoWTEgPj4gMjQpXSA8PCAyNCkgXgotCSAgICAoRlNiWyh1aW50OCkgKFkyID4+IDE2KV0gPDwgMTYpIF4KLQkgICAgKEZTYlsodWludDgpIChZMyA+PiA4KV0gPDwgOCkgXiAoRlNiWyh1aW50OCkgKFkwKV0pOwotCi0JWDIgPSBSS1syXSBeIChGU2JbKHVpbnQ4KSAoWTIgPj4gMjQpXSA8PCAyNCkgXgotCSAgICAoRlNiWyh1aW50OCkgKFkzID4+IDE2KV0gPDwgMTYpIF4KLQkgICAgKEZTYlsodWludDgpIChZMCA+PiA4KV0gPDwgOCkgXiAoRlNiWyh1aW50OCkgKFkxKV0pOwotCi0JWDMgPSBSS1szXSBeIChGU2JbKHVpbnQ4KSAoWTMgPj4gMjQpXSA8PCAyNCkgXgotCSAgICAoRlNiWyh1aW50OCkgKFkwID4+IDE2KV0gPDwgMTYpIF4KLQkgICAgKEZTYlsodWludDgpIChZMSA+PiA4KV0gPDwgOCkgXiAoRlNiWyh1aW50OCkgKFkyKV0pOwotCi0JUFVUX1VJTlQzMihYMCwgb3V0cHV0LCAwKTsKLQlQVVRfVUlOVDMyKFgxLCBvdXRwdXQsIDQpOwotCVBVVF9VSU5UMzIoWDIsIG91dHB1dCwgOCk7Ci0JUFVUX1VJTlQzMihYMywgb3V0cHV0LCAxMik7Ci19Ci0KLS8qIEFFUyAxMjgtYml0IGJsb2NrIGRlY3J5cHRpb24Jcm91dGluZQkqLwotCi12b2lkIHJ0X2Flc19kZWNyeXB0KHN0cnVjdCBhZXNfY29udGV4dCAqIGN0eCwgdWludDggaW5wdXRbMTZdLCB1aW50OCBvdXRwdXRbMTZdKQotewotCXVpbnQzMiAqUkssIFgwLCBYMSwgWDIsIFgzLCBZMCwgWTEsIFkyLCBZMzsKLQotCVJLID0gKHVpbnQzMiAqKSBjdHgtPmRyazsKLQotCUdFVF9VSU5UMzIoWDAsIGlucHV0LCAwKTsKLQlYMCBePSBSS1swXTsKLQlHRVRfVUlOVDMyKFgxLCBpbnB1dCwgNCk7Ci0JWDEgXj0gUktbMV07Ci0JR0VUX1VJTlQzMihYMiwgaW5wdXQsIDgpOwotCVgyIF49IFJLWzJdOwotCUdFVF9VSU5UMzIoWDMsIGlucHV0LCAxMik7Ci0JWDMgXj0gUktbM107Ci0KLSNkZWZpbmUJQUVTX1JST1VORChYMCxYMSxYMixYMyxZMCxZMSxZMixZMykJCVwKLXsJCQkJCQkJCQkJCQlcCi0JUksgKz0gNDsJCQkJCQkJCQlcCi0JCQkJCQkJCQkJCQlcCi0JWDAgPSBSS1swXSBeIFJUMFsgKHVpbnQ4KSAoCVkwID4+IDI0ICkgXSBeCVwKLQkJCQkgUlQxWyAodWludDgpICgJWTMgPj4gMTYgKSBdIF4JXAotCQkJCSBSVDJbICh1aW50OCkgKAlZMiA+PiAgOCApIF0gXglcCi0JCQkJIFJUM1sgKHVpbnQ4KSAoCVkxCQkgKSBdOwlcCi0JCQkJCQkJCQkJCQlcCi0JWDEgPSBSS1sxXSBeIFJUMFsgKHVpbnQ4KSAoCVkxID4+IDI0ICkgXSBeCVwKLQkJCQkgUlQxWyAodWludDgpICgJWTAgPj4gMTYgKSBdIF4JXAotCQkJCSBSVDJbICh1aW50OCkgKAlZMyA+PiAgOCApIF0gXglcCi0JCQkJIFJUM1sgKHVpbnQ4KSAoCVkyCQkgKSBdOwlcCi0JCQkJCQkJCQkJCQlcCi0JWDIgPSBSS1syXSBeIFJUMFsgKHVpbnQ4KSAoCVkyID4+IDI0ICkgXSBeCVwKLQkJCQkgUlQxWyAodWludDgpICgJWTEgPj4gMTYgKSBdIF4JXAotCQkJCSBSVDJbICh1aW50OCkgKAlZMCA+PiAgOCApIF0gXglcCi0JCQkJIFJUM1sgKHVpbnQ4KSAoCVkzCQkgKSBdOwlcCi0JCQkJCQkJCQkJCQlcCi0JWDMgPSBSS1szXSBeIFJUMFsgKHVpbnQ4KSAoCVkzID4+IDI0ICkgXSBeCVwKLQkJCQkgUlQxWyAodWludDgpICgJWTIgPj4gMTYgKSBdIF4JXAotCQkJCSBSVDJbICh1aW50OCkgKAlZMSA+PiAgOCApIF0gXglcCi0JCQkJIFJUM1sgKHVpbnQ4KSAoCVkwCQkgKSBdOwlcCi19Ci0KLQlBRVNfUlJPVU5EKFkwLCBZMSwgWTIsIFkzLCBYMCwgWDEsIFgyLCBYMyk7CS8qIHJvdW5kIDEgKi8KLQlBRVNfUlJPVU5EKFgwLCBYMSwgWDIsIFgzLCBZMCwgWTEsIFkyLCBZMyk7CS8qIHJvdW5kIDIgKi8KLQlBRVNfUlJPVU5EKFkwLCBZMSwgWTIsIFkzLCBYMCwgWDEsIFgyLCBYMyk7CS8qIHJvdW5kIDMgKi8KLQlBRVNfUlJPVU5EKFgwLCBYMSwgWDIsIFgzLCBZMCwgWTEsIFkyLCBZMyk7CS8qIHJvdW5kIDQgKi8KLQlBRVNfUlJPVU5EKFkwLCBZMSwgWTIsIFkzLCBYMCwgWDEsIFgyLCBYMyk7CS8qIHJvdW5kIDUgKi8KLQlBRVNfUlJPVU5EKFgwLCBYMSwgWDIsIFgzLCBZMCwgWTEsIFkyLCBZMyk7CS8qIHJvdW5kIDYgKi8KLQlBRVNfUlJPVU5EKFkwLCBZMSwgWTIsIFkzLCBYMCwgWDEsIFgyLCBYMyk7CS8qIHJvdW5kIDcgKi8KLQlBRVNfUlJPVU5EKFgwLCBYMSwgWDIsIFgzLCBZMCwgWTEsIFkyLCBZMyk7CS8qIHJvdW5kIDggKi8KLQlBRVNfUlJPVU5EKFkwLCBZMSwgWTIsIFkzLCBYMCwgWDEsIFgyLCBYMyk7CS8qIHJvdW5kIDkgKi8KLQotCWlmIChjdHgtPm5yID4gMTApIHsKLQkJQUVTX1JST1VORChYMCwgWDEsIFgyLCBYMywgWTAsIFkxLCBZMiwgWTMpOwkvKiByb3VuZCAxMCAgICAgKi8KLQkJQUVTX1JST1VORChZMCwgWTEsIFkyLCBZMywgWDAsIFgxLCBYMiwgWDMpOwkvKiByb3VuZCAxMSAgICAgKi8KLQl9Ci0KLQlpZiAoY3R4LT5uciA+IDEyKSB7Ci0JCUFFU19SUk9VTkQoWDAsIFgxLCBYMiwgWDMsIFkwLCBZMSwgWTIsIFkzKTsJLyogcm91bmQgMTIgICAgICovCi0JCUFFU19SUk9VTkQoWTAsIFkxLCBZMiwgWTMsIFgwLCBYMSwgWDIsIFgzKTsJLyogcm91bmQgMTMgICAgICovCi0JfQotCi0JLyogbGFzdCByb3VuZCAqLwotCi0JUksgKz0gNDsKLQotCVgwID0gUktbMF0gXiAoUlNiWyh1aW50OCkgKFkwID4+IDI0KV0gPDwgMjQpIF4KLQkgICAgKFJTYlsodWludDgpIChZMyA+PiAxNildIDw8IDE2KSBeCi0JICAgIChSU2JbKHVpbnQ4KSAoWTIgPj4gOCldIDw8IDgpIF4gKFJTYlsodWludDgpIChZMSldKTsKLQotCVgxID0gUktbMV0gXiAoUlNiWyh1aW50OCkgKFkxID4+IDI0KV0gPDwgMjQpIF4KLQkgICAgKFJTYlsodWludDgpIChZMCA+PiAxNildIDw8IDE2KSBeCi0JICAgIChSU2JbKHVpbnQ4KSAoWTMgPj4gOCldIDw8IDgpIF4gKFJTYlsodWludDgpIChZMildKTsKLQotCVgyID0gUktbMl0gXiAoUlNiWyh1aW50OCkgKFkyID4+IDI0KV0gPDwgMjQpIF4KLQkgICAgKFJTYlsodWludDgpIChZMSA+PiAxNildIDw8IDE2KSBeCi0JICAgIChSU2JbKHVpbnQ4KSAoWTAgPj4gOCldIDw8IDgpIF4gKFJTYlsodWludDgpIChZMyldKTsKLQotCVgzID0gUktbM10gXiAoUlNiWyh1aW50OCkgKFkzID4+IDI0KV0gPDwgMjQpIF4KLQkgICAgKFJTYlsodWludDgpIChZMiA+PiAxNildIDw8IDE2KSBeCi0JICAgIChSU2JbKHVpbnQ4KSAoWTEgPj4gOCldIDw8IDgpIF4gKFJTYlsodWludDgpIChZMCldKTsKLQotCVBVVF9VSU5UMzIoWDAsIG91dHB1dCwgMCk7Ci0JUFVUX1VJTlQzMihYMSwgb3V0cHV0LCA0KTsKLQlQVVRfVUlOVDMyKFgyLCBvdXRwdXQsIDgpOwotCVBVVF9VSU5UMzIoWDMsIG91dHB1dCwgMTIpOwotfQotCi0vKgotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgRGVzY3JpcHRpb246Ci0gICAgICAgIEVOQ1JZUFQgQUVTIEdUSyBiZWZvcmUgc2VuZGluZyBpbiBFQVBPTCBmcmFtZS4KLSAgICAgICAgQUVTIEdUSyBsZW5ndGggPSAxMjggYml0LCAgc28gZml4IGJsb2NrcyBmb3IgYWVzLWtleS13cmFwIGFzIDIgaW4gdGhpcyBmdW5jdGlvbi4KLSAgICAgICAgVGhpcyBmdW5jdGlvbiByZWZlcmVuY2VzIHRvIFJGQyAzMzk0IGZvciBhZXMga2V5IHdyYXAgYWxnb3JpdGhtLgotICAgIFJldHVybjoKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgQUVTX0dUS19LRVlfV1JBUCh1OCAqIGtleSwKLQkJICAgICAgdTggKiBwbGFpbnRleHQsCi0JCSAgICAgIHUzMiBwX2xlbiwgdTggKiBjaXBoZXJ0ZXh0KQotewotCXU4IEFbOF0sIEJJTlsxNl0sIEJPVVRbMTZdOwotCXU4IFJbNTEyXTsKLQlpbnQgbnVtX2Jsb2NrcyA9IHBfbGVuIC8gODsJLyogdW5pdDo2NGJpdHMgKi8KLQlpbnQgaSwgajsKLQlzdHJ1Y3QgYWVzX2NvbnRleHQgYWVzY3R4OwotCXU4IHhvcjsKLQotCXJ0X2Flc19zZXRfa2V5KCZhZXNjdHgsIGtleSwgMTI4KTsKLQotCS8qIEluaXQgSUEgKi8KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQlBW2ldID0gMHhhNjsKLQotCS8qSW5wdXQgcGxhaW50ZXh0ICovCi0JZm9yIChpID0gMDsgaSA8IG51bV9ibG9ja3M7IGkrKykgewotCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKQotCQkJUls4ICogKGkgKyAxKSArIGpdID0gcGxhaW50ZXh0WzggKiBpICsgal07Ci0JfQotCi0JLyogS2V5IE1peCAqLwotCWZvciAoaiA9IDA7IGogPCA2OyBqKyspIHsKLQkJZm9yIChpID0gMTsgaSA8PSBudW1fYmxvY2tzOyBpKyspIHsKLQkJCS8qcGhhc2UgMSAqLwotCQkJTmRpc01vdmVNZW1vcnkoQklOLCBBLCA4KTsKLQkJCU5kaXNNb3ZlTWVtb3J5KCZCSU5bOF0sICZSWzggKiBpXSwgOCk7Ci0JCQlydF9hZXNfZW5jcnlwdCgmYWVzY3R4LCBCSU4sIEJPVVQpOwotCi0JCQlOZGlzTW92ZU1lbW9yeShBLCAmQk9VVFswXSwgOCk7Ci0JCQl4b3IgPSBudW1fYmxvY2tzICogaiArIGk7Ci0JCQlBWzddID0gQk9VVFs3XSBeIHhvcjsKLQkJCU5kaXNNb3ZlTWVtb3J5KCZSWzggKiBpXSwgJkJPVVRbOF0sIDgpOwotCQl9Ci0JfQotCi0JLyogT3V0cHV0IGNpcGhlcnRleHQgKi8KLQlOZGlzTW92ZU1lbW9yeShjaXBoZXJ0ZXh0LCBBLCA4KTsKLQotCWZvciAoaSA9IDE7IGkgPD0gbnVtX2Jsb2NrczsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCA4OyBqKyspCi0JCQljaXBoZXJ0ZXh0WzggKiBpICsgal0gPSBSWzggKiBpICsgal07Ci0JfQotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQkJTWlzYyBmdW5jdGlvbiB0byBkZWNyeXB0IEFFUyBib2R5Ci0KLQlBcmd1bWVudHM6Ci0KLQlSZXR1cm4gVmFsdWU6Ci0KLQlOb3RlOgotCQlUaGlzIGZ1bmN0aW9uIHJlZmVyZW5jZXMgdG8JUkZDCTMzOTQgZm9yIGFlcyBrZXkgdW53cmFwIGFsZ29yaXRobS4KLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgQUVTX0dUS19LRVlfVU5XUkFQKHU4ICoga2V5LAotCQkJdTggKiBwbGFpbnRleHQsCi0JCQl1MzIgY19sZW4sIHU4ICogY2lwaGVydGV4dCkKLXsKLQl1OCBBWzhdLCBCSU5bMTZdLCBCT1VUWzE2XTsKLQl1OCB4b3I7Ci0JaW50IGksIGo7Ci0Jc3RydWN0IGFlc19jb250ZXh0IGFlc2N0eDsKLQl1OCAqUjsKLQlpbnQgbnVtX2Jsb2NrcyA9IGNfbGVuIC8gODsJLyogdW5pdDo2NGJpdHMgKi8KLQotCW9zX2FsbG9jX21lbShOVUxMLCAodTggKiopICYgUiwgNTEyKTsKLQotCWlmIChSID09IE5VTEwpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkgKCJBRVNfR1RLX0tFWV9VTldSQVA6IG5vIG1lbW9yeSFcbiIpKTsKLQkJcmV0dXJuOwotCX0KLQkvKiBFbmQgb2YgaWYgKi8KLQkvKiBJbml0aWFsaXplICovCi0JTmRpc01vdmVNZW1vcnkoQSwgY2lwaGVydGV4dCwgOCk7Ci0JLypJbnB1dCBwbGFpbnRleHQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgKGNfbGVuIC0gOCk7IGkrKykgewotCQlSW2ldID0gY2lwaGVydGV4dFtpICsgOF07Ci0JfQotCi0JcnRfYWVzX3NldF9rZXkoJmFlc2N0eCwga2V5LCAxMjgpOwotCi0JZm9yIChqID0gNTsgaiA+PSAwOyBqLS0pIHsKLQkJZm9yIChpID0gKG51bV9ibG9ja3MgLSAxKTsgaSA+IDA7IGktLSkgewotCQkJeG9yID0gKG51bV9ibG9ja3MgLSAxKSAqIGogKyBpOwotCQkJTmRpc01vdmVNZW1vcnkoQklOLCBBLCA4KTsKLQkJCUJJTls3XSA9IEFbN10gXiB4b3I7Ci0JCQlOZGlzTW92ZU1lbW9yeSgmQklOWzhdLCAmUlsoaSAtIDEpICogOF0sIDgpOwotCQkJcnRfYWVzX2RlY3J5cHQoJmFlc2N0eCwgQklOLCBCT1VUKTsKLQkJCU5kaXNNb3ZlTWVtb3J5KEEsICZCT1VUWzBdLCA4KTsKLQkJCU5kaXNNb3ZlTWVtb3J5KCZSWyhpIC0gMSkgKiA4XSwgJkJPVVRbOF0sIDgpOwotCQl9Ci0JfQotCi0JLyogT1VUUFVUICovCi0JZm9yIChpID0gMDsgaSA8IGNfbGVuOyBpKyspIHsKLQkJcGxhaW50ZXh0W2ldID0gUltpXTsKLQl9Ci0KLQlvc19mcmVlX21lbShOVUxMLCBSKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9hc2ljLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fYXNpYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDc3ZTgzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9hc2ljLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNTY1ICswLDAgQEAKLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUmFsaW5rIFRlY2ggSW5jLgotICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAotICogSHNpbmNodSBDb3VudHkgMzAyLAotICogVGFpd2FuLCBSLk8uQy4KLSAqCi0gKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0JTW9kdWxlIE5hbWU6Ci0JY21tX2FzaWMuYwotCi0JQWJzdHJhY3Q6Ci0JRnVuY3Rpb25zIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBBU0lDCi0KLQlSZXZpc2lvbiBIaXN0b3J5OgotCVdobwkJCVdoZW4JCQlXaGF0Ci0JLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQotI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgotCi0vKiBSZXNldCB0aGUgUkZJQyBzZXR0aW5nIHRvIG5ldyBzZXJpZXMgKi8KLXN0cnVjdCBydF9ydG1wX3JmX3JlZ3MgUkYyODUwUmVnVGFibGVbXSA9IHsKLS8qICAgICAgICAgICAgICBjaCAgICAgICBSMSAgICAgICAgICAgICAgUjIgICAgICAgICAgICAgIFIzKFRYMH40PTApIFI0ICovCi0JezEsIDB4OTg0MDJlY2MsIDB4OTg0YzA3ODYsIDB4OTgxNmI0NTUsIDB4OTgwMDUxMGJ9Ci0JLAotCXsyLCAweDk4NDAyZWNjLCAweDk4NGMwNzg2LCAweDk4MTY4YTU1LCAweDk4MDA1MTlmfQotCSwKLQl7MywgMHg5ODQwMmVjYywgMHg5ODRjMDc4YSwgMHg5ODE2OGE1NSwgMHg5ODAwNTE4Yn0KLQksCi0JezQsIDB4OTg0MDJlY2MsIDB4OTg0YzA3OGEsIDB4OTgxNjhhNTUsIDB4OTgwMDUxOWZ9Ci0JLAotCXs1LCAweDk4NDAyZWNjLCAweDk4NGMwNzhlLCAweDk4MTY4YTU1LCAweDk4MDA1MThifQotCSwKLQl7NiwgMHg5ODQwMmVjYywgMHg5ODRjMDc4ZSwgMHg5ODE2OGE1NSwgMHg5ODAwNTE5Zn0KLQksCi0JezcsIDB4OTg0MDJlY2MsIDB4OTg0YzA3OTIsIDB4OTgxNjhhNTUsIDB4OTgwMDUxOGJ9Ci0JLAotCXs4LCAweDk4NDAyZWNjLCAweDk4NGMwNzkyLCAweDk4MTY4YTU1LCAweDk4MDA1MTlmfQotCSwKLQl7OSwgMHg5ODQwMmVjYywgMHg5ODRjMDc5NiwgMHg5ODE2OGE1NSwgMHg5ODAwNTE4Yn0KLQksCi0JezEwLCAweDk4NDAyZWNjLCAweDk4NGMwNzk2LCAweDk4MTY4YTU1LCAweDk4MDA1MTlmfQotCSwKLQl7MTEsIDB4OTg0MDJlY2MsIDB4OTg0YzA3OWEsIDB4OTgxNjhhNTUsIDB4OTgwMDUxOGJ9Ci0JLAotCXsxMiwgMHg5ODQwMmVjYywgMHg5ODRjMDc5YSwgMHg5ODE2OGE1NSwgMHg5ODAwNTE5Zn0KLQksCi0JezEzLCAweDk4NDAyZWNjLCAweDk4NGMwNzllLCAweDk4MTY4YTU1LCAweDk4MDA1MThifQotCSwKLQl7MTQsIDB4OTg0MDJlY2MsIDB4OTg0YzA3YTIsIDB4OTgxNjhhNTUsIDB4OTgwMDUxOTN9Ci0JLAotCi0JLyogODAyLjExIFVOSSAvIEh5cGVyTGFuIDIgKi8KLQl7MzYsIDB4OTg0MDJlY2MsIDB4OTg0YzA5OWEsIDB4OTgxNThhNTUsIDB4OTgwZWQxYTN9Ci0JLAotCXszOCwgMHg5ODQwMmVjYywgMHg5ODRjMDk5ZSwgMHg5ODE1OGE1NSwgMHg5ODBlZDE5M30KLQksCi0JezQwLCAweDk4NDAyZWM4LCAweDk4NGMwNjgyLCAweDk4MTU4YTU1LCAweDk4MGVkMTgzfQotCSwKLQl7NDQsIDB4OTg0MDJlYzgsIDB4OTg0YzA2ODIsIDB4OTgxNThhNTUsIDB4OTgwZWQxYTN9Ci0JLAotCXs0NiwgMHg5ODQwMmVjOCwgMHg5ODRjMDY4NiwgMHg5ODE1OGE1NSwgMHg5ODBlZDE4Yn0KLQksCi0JezQ4LCAweDk4NDAyZWM4LCAweDk4NGMwNjg2LCAweDk4MTU4YTU1LCAweDk4MGVkMTlifQotCSwKLQl7NTIsIDB4OTg0MDJlYzgsIDB4OTg0YzA2OGEsIDB4OTgxNThhNTUsIDB4OTgwZWQxOTN9Ci0JLAotCXs1NCwgMHg5ODQwMmVjOCwgMHg5ODRjMDY4YSwgMHg5ODE1OGE1NSwgMHg5ODBlZDFhM30KLQksCi0JezU2LCAweDk4NDAyZWM4LCAweDk4NGMwNjhlLCAweDk4MTU4YTU1LCAweDk4MGVkMThifQotCSwKLQl7NjAsIDB4OTg0MDJlYzgsIDB4OTg0YzA2OTIsIDB4OTgxNThhNTUsIDB4OTgwZWQxODN9Ci0JLAotCXs2MiwgMHg5ODQwMmVjOCwgMHg5ODRjMDY5MiwgMHg5ODE1OGE1NSwgMHg5ODBlZDE5M30KLQksCi0JezY0LCAweDk4NDAyZWM4LCAweDk4NGMwNjkyLCAweDk4MTU4YTU1LCAweDk4MGVkMWEzfQotCSwJCQkvKiBQbHVnZmVzdCM0LCBEYXk0LCBjaGFuZ2UgUkZSMyBsZWZ0NHRoIDktPjUuICovCi0KLQkvKiA4MDIuMTEgSHlwZXJMYW4gMiAqLwotCXsxMDAsIDB4OTg0MDJlYzgsIDB4OTg0YzA2YjIsIDB4OTgxNzhhNTUsIDB4OTgwZWQ3ODN9Ci0JLAotCi0JLyogMjAwOC4wNC4zMCBtb2RpZmllZCAqLwotCS8qIFRoZSBzeXN0ZW0gdGVhbSBoYXMgQU4gdG8gaW1wcm92ZSB0aGUgRVZNIHZhbHVlICovCi0JLyogZm9yIGNoYW5uZWwgMTAyIHRvIDEwOCBmb3IgdGhlIFJUMjg1MC9SVDI3NTAgZHVhbCBiYW5kIHNvbHV0aW9uLiAqLwotCXsxMDIsIDB4OTg0MDJlYzgsIDB4OTg1YzA2YjIsIDB4OTg1NzhhNTUsIDB4OTgwZWQ3OTN9Ci0JLAotCXsxMDQsIDB4OTg0MDJlYzgsIDB4OTg1YzA2YjIsIDB4OTg1NzhhNTUsIDB4OTgwZWQxYTN9Ci0JLAotCXsxMDgsIDB4OTg0MDJlY2MsIDB4OTg1YzBhMzIsIDB4OTg1NzhhNTUsIDB4OTgwZWQxOTN9Ci0JLAotCi0JezExMCwgMHg5ODQwMmVjYywgMHg5ODRjMGEzNiwgMHg5ODE3OGE1NSwgMHg5ODBlZDE4M30KLQksCi0JezExMiwgMHg5ODQwMmVjYywgMHg5ODRjMGEzNiwgMHg5ODE3OGE1NSwgMHg5ODBlZDE5Yn0KLQksCi0JezExNiwgMHg5ODQwMmVjYywgMHg5ODRjMGEzYSwgMHg5ODE3OGE1NSwgMHg5ODBlZDFhM30KLQksCi0JezExOCwgMHg5ODQwMmVjYywgMHg5ODRjMGEzZSwgMHg5ODE3OGE1NSwgMHg5ODBlZDE5M30KLQksCi0JezEyMCwgMHg5ODQwMmVjNCwgMHg5ODRjMDM4MiwgMHg5ODE3OGE1NSwgMHg5ODBlZDE4M30KLQksCi0JezEyNCwgMHg5ODQwMmVjNCwgMHg5ODRjMDM4MiwgMHg5ODE3OGE1NSwgMHg5ODBlZDE5M30KLQksCi0JezEyNiwgMHg5ODQwMmVjNCwgMHg5ODRjMDM4MiwgMHg5ODE3OGE1NSwgMHg5ODBlZDE1Yn0KLQksCQkJLyogMHg5ODBlZDFiYi0+MHg5ODBlZDE1YiByZXF1aXJlZCBieSBSb3J5IDIwMDcwOTI3ICovCi0JezEyOCwgMHg5ODQwMmVjNCwgMHg5ODRjMDM4MiwgMHg5ODE3OGE1NSwgMHg5ODBlZDFhM30KLQksCi0JezEzMiwgMHg5ODQwMmVjNCwgMHg5ODRjMDM4NiwgMHg5ODE3OGE1NSwgMHg5ODBlZDE4Yn0KLQksCi0JezEzNCwgMHg5ODQwMmVjNCwgMHg5ODRjMDM4NiwgMHg5ODE3OGE1NSwgMHg5ODBlZDE5M30KLQksCi0JezEzNiwgMHg5ODQwMmVjNCwgMHg5ODRjMDM4NiwgMHg5ODE3OGE1NSwgMHg5ODBlZDE5Yn0KLQksCi0JezE0MCwgMHg5ODQwMmVjNCwgMHg5ODRjMDM4YSwgMHg5ODE3OGE1NSwgMHg5ODBlZDE4M30KLQksCi0KLQkvKiA4MDIuMTEgVU5JSSAqLwotCXsxNDksIDB4OTg0MDJlYzQsIDB4OTg0YzAzOGEsIDB4OTgxNzhhNTUsIDB4OTgwZWQxYTd9Ci0JLAotCXsxNTEsIDB4OTg0MDJlYzQsIDB4OTg0YzAzOGUsIDB4OTgxNzhhNTUsIDB4OTgwZWQxODd9Ci0JLAotCXsxNTMsIDB4OTg0MDJlYzQsIDB4OTg0YzAzOGUsIDB4OTgxNzhhNTUsIDB4OTgwZWQxOGZ9Ci0JLAotCXsxNTcsIDB4OTg0MDJlYzQsIDB4OTg0YzAzOGUsIDB4OTgxNzhhNTUsIDB4OTgwZWQxOWZ9Ci0JLAotCXsxNTksIDB4OTg0MDJlYzQsIDB4OTg0YzAzOGUsIDB4OTgxNzhhNTUsIDB4OTgwZWQxYTd9Ci0JLAotCXsxNjEsIDB4OTg0MDJlYzQsIDB4OTg0YzAzOTIsIDB4OTgxNzhhNTUsIDB4OTgwZWQxODd9Ci0JLAotCXsxNjUsIDB4OTg0MDJlYzQsIDB4OTg0YzAzOTIsIDB4OTgxNzhhNTUsIDB4OTgwZWQxOTd9Ci0JLAotCXsxNjcsIDB4OTg0MDJlYzQsIDB4OTg0YzAzZDIsIDB4OTgxNzk4NTUsIDB4OTgxNTUzMWZ9Ci0JLAotCXsxNjksIDB4OTg0MDJlYzQsIDB4OTg0YzAzZDIsIDB4OTgxNzk4NTUsIDB4OTgxNTUzMjd9Ci0JLAotCXsxNzEsIDB4OTg0MDJlYzQsIDB4OTg0YzAzZDYsIDB4OTgxNzk4NTUsIDB4OTgxNTUzMDd9Ci0JLAotCXsxNzMsIDB4OTg0MDJlYzQsIDB4OTg0YzAzZDYsIDB4OTgxNzk4NTUsIDB4OTgxNTUzMGZ9Ci0JLAotCi0JLyogSmFwYW4gKi8KLQl7MTg0LCAweDk1MDAyY2NjLCAweDk1MDA0OTFlLCAweDk1MDliZTU1LCAweDk1MGMwYTBifQotCSwKLQl7MTg4LCAweDk1MDAyY2NjLCAweDk1MDA0OTIyLCAweDk1MDliZTU1LCAweDk1MGMwYTEzfQotCSwKLQl7MTkyLCAweDk1MDAyY2NjLCAweDk1MDA0OTI2LCAweDk1MDliZTU1LCAweDk1MGMwYTFifQotCSwKLQl7MTk2LCAweDk1MDAyY2NjLCAweDk1MDA0OTJhLCAweDk1MDliZTU1LCAweDk1MGMwYTIzfQotCSwKLQl7MjA4LCAweDk1MDAyY2NjLCAweDk1MDA0OTNhLCAweDk1MDliZTU1LCAweDk1MGMwYTEzfQotCSwKLQl7MjEyLCAweDk1MDAyY2NjLCAweDk1MDA0OTNlLCAweDk1MDliZTU1LCAweDk1MGMwYTFifQotCSwKLQl7MjE2LCAweDk1MDAyY2NjLCAweDk1MDA0OTgyLCAweDk1MDliZTU1LCAweDk1MGMwYTIzfQotCSwKLQotCS8qIHN0aWxsIGxhY2sgb2YgTU1BQyhKYXBhbikgY2ggMzQsMzgsNDIsNDYgKi8KLX07Ci0KLXU4IE5VTV9PRl8yODUwX0NITkwgPSAoc2l6ZW9mKFJGMjg1MFJlZ1RhYmxlKSAvIHNpemVvZihzdHJ1Y3QgcnRfcnRtcF9yZl9yZWdzKSk7Ci0KLXN0cnVjdCBydF9mcmVxdWVuY3lfaXRlbSBGcmVxSXRlbXMzMDIwW10gPSB7Ci0JLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCS8qIElTTSA6IDIuNCB0byAyLjQ4MyBHSHogICAgICAgICAgICAgICAgICAgICAgICAgLy8gKi8KLQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JLyogMTFnICovCi0JLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCS8qLUNILS0tTi0tLS0tLS1SLS0tSy0tLS0tLS0tLS0tICovCi0JezEsIDI0MSwgMiwgMn0KLQksCi0JezIsIDI0MSwgMiwgN30KLQksCi0JezMsIDI0MiwgMiwgMn0KLQksCi0JezQsIDI0MiwgMiwgN30KLQksCi0JezUsIDI0MywgMiwgMn0KLQksCi0JezYsIDI0MywgMiwgN30KLQksCi0JezcsIDI0NCwgMiwgMn0KLQksCi0JezgsIDI0NCwgMiwgN30KLQksCi0JezksIDI0NSwgMiwgMn0KLQksCi0JezEwLCAyNDUsIDIsIDd9Ci0JLAotCXsxMSwgMjQ2LCAyLCAyfQotCSwKLQl7MTIsIDI0NiwgMiwgN30KLQksCi0JezEzLCAyNDcsIDIsIDJ9Ci0JLAotCXsxNCwgMjQ4LCAyLCA0fQotCSwKLX07Ci0KLXU4IE5VTV9PRl8zMDIwX0NITkwgPSAoc2l6ZW9mKEZyZXFJdGVtczMwMjApIC8gc2l6ZW9mKHN0cnVjdCBydF9mcmVxdWVuY3lfaXRlbSkpOwotCi12b2lkIEFzaWNVcGRhdGVBdXRvRmFsbEJhY2tUYWJsZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHU4ICpwUmF0ZVRhYmxlKQotewotCXU4IGk7Ci0JSFRfRkJLX0NGRzBfU1RSVUMgSHRDZmcwOwotCUhUX0ZCS19DRkcxX1NUUlVDIEh0Q2ZnMTsKLQlMR19GQktfQ0ZHMF9TVFJVQyBMZ0NmZzA7Ci0JTEdfRkJLX0NGRzFfU1RSVUMgTGdDZmcxOwotCXN0cnVjdCBydF9ydG1wX3R4X3JhdGVfc3dpdGNoICpwQ3VyclR4UmF0ZSwgKnBOZXh0VHhSYXRlOwotCi0JLyogc2V0IHRvIGluaXRpYWwgdmFsdWUgKi8KLQlIdENmZzAud29yZCA9IDB4NjU0MzIxMDA7Ci0JSHRDZmcxLndvcmQgPSAweGVkY2JhOTg4OwotCUxnQ2ZnMC53b3JkID0gMHhlZGNiYTk4ODsKLQlMZ0NmZzEud29yZCA9IDB4MDAwMDIxMDA7Ci0KLQlwTmV4dFR4UmF0ZSA9IChzdHJ1Y3QgcnRfcnRtcF90eF9yYXRlX3N3aXRjaCAqKSBwUmF0ZVRhYmxlICsgMTsKLQlmb3IgKGkgPSAxOyBpIDwgKigodTggKilwUmF0ZVRhYmxlKTsgaSsrKSB7Ci0JCXBDdXJyVHhSYXRlID0gKHN0cnVjdCBydF9ydG1wX3R4X3JhdGVfc3dpdGNoICopIHBSYXRlVGFibGUgKyAxICsgaTsKLQkJc3dpdGNoIChwQ3VyclR4UmF0ZS0+TW9kZSkgewotCQljYXNlIDA6CS8qQ0NLICovCi0JCQlicmVhazsKLQkJY2FzZSAxOgkvKk9GRE0gKi8KLQkJCXsKLQkJCQlzd2l0Y2ggKHBDdXJyVHhSYXRlLT5DdXJyTUNTKSB7Ci0JCQkJY2FzZSAwOgotCQkJCQlMZ0NmZzAuZmllbGQuT0ZETU1DUzBGQksgPQotCQkJCQkgICAgKHBOZXh0VHhSYXRlLT5Nb2RlID09Ci0JCQkJCSAgICAgTU9ERV9PRkRNKSA/IChwTmV4dFR4UmF0ZS0+Ci0JCQkJCQkJICAgQ3Vyck1DUyArCi0JCQkJCQkJICAgOCkgOiBwTmV4dFR4UmF0ZS0+Ci0JCQkJCSAgICBDdXJyTUNTOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDE6Ci0JCQkJCUxnQ2ZnMC5maWVsZC5PRkRNTUNTMUZCSyA9Ci0JCQkJCSAgICAocE5leHRUeFJhdGUtPk1vZGUgPT0KLQkJCQkJICAgICBNT0RFX09GRE0pID8gKHBOZXh0VHhSYXRlLT4KLQkJCQkJCQkgICBDdXJyTUNTICsKLQkJCQkJCQkgICA4KSA6IHBOZXh0VHhSYXRlLT4KLQkJCQkJICAgIEN1cnJNQ1M7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgMjoKLQkJCQkJTGdDZmcwLmZpZWxkLk9GRE1NQ1MyRkJLID0KLQkJCQkJICAgIChwTmV4dFR4UmF0ZS0+TW9kZSA9PQotCQkJCQkgICAgIE1PREVfT0ZETSkgPyAocE5leHRUeFJhdGUtPgotCQkJCQkJCSAgIEN1cnJNQ1MgKwotCQkJCQkJCSAgIDgpIDogcE5leHRUeFJhdGUtPgotCQkJCQkgICAgQ3Vyck1DUzsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAzOgotCQkJCQlMZ0NmZzAuZmllbGQuT0ZETU1DUzNGQksgPQotCQkJCQkgICAgKHBOZXh0VHhSYXRlLT5Nb2RlID09Ci0JCQkJCSAgICAgTU9ERV9PRkRNKSA/IChwTmV4dFR4UmF0ZS0+Ci0JCQkJCQkJICAgQ3Vyck1DUyArCi0JCQkJCQkJICAgOCkgOiBwTmV4dFR4UmF0ZS0+Ci0JCQkJCSAgICBDdXJyTUNTOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDQ6Ci0JCQkJCUxnQ2ZnMC5maWVsZC5PRkRNTUNTNEZCSyA9Ci0JCQkJCSAgICAocE5leHRUeFJhdGUtPk1vZGUgPT0KLQkJCQkJICAgICBNT0RFX09GRE0pID8gKHBOZXh0VHhSYXRlLT4KLQkJCQkJCQkgICBDdXJyTUNTICsKLQkJCQkJCQkgICA4KSA6IHBOZXh0VHhSYXRlLT4KLQkJCQkJICAgIEN1cnJNQ1M7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgNToKLQkJCQkJTGdDZmcwLmZpZWxkLk9GRE1NQ1M1RkJLID0KLQkJCQkJICAgIChwTmV4dFR4UmF0ZS0+TW9kZSA9PQotCQkJCQkgICAgIE1PREVfT0ZETSkgPyAocE5leHRUeFJhdGUtPgotCQkJCQkJCSAgIEN1cnJNQ1MgKwotCQkJCQkJCSAgIDgpIDogcE5leHRUeFJhdGUtPgotCQkJCQkgICAgQ3Vyck1DUzsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSA2OgotCQkJCQlMZ0NmZzAuZmllbGQuT0ZETU1DUzZGQksgPQotCQkJCQkgICAgKHBOZXh0VHhSYXRlLT5Nb2RlID09Ci0JCQkJCSAgICAgTU9ERV9PRkRNKSA/IChwTmV4dFR4UmF0ZS0+Ci0JCQkJCQkJICAgQ3Vyck1DUyArCi0JCQkJCQkJICAgOCkgOiBwTmV4dFR4UmF0ZS0+Ci0JCQkJCSAgICBDdXJyTUNTOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDc6Ci0JCQkJCUxnQ2ZnMC5maWVsZC5PRkRNTUNTN0ZCSyA9Ci0JCQkJCSAgICAocE5leHRUeFJhdGUtPk1vZGUgPT0KLQkJCQkJICAgICBNT0RFX09GRE0pID8gKHBOZXh0VHhSYXRlLT4KLQkJCQkJCQkgICBDdXJyTUNTICsKLQkJCQkJCQkgICA4KSA6IHBOZXh0VHhSYXRlLT4KLQkJCQkJICAgIEN1cnJNQ1M7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIDI6CS8qSFQtTUlYICovCi0JCWNhc2UgMzoJLypIVC1HRiAqLwotCQkJewotCQkJCWlmICgocE5leHRUeFJhdGUtPk1vZGUgPj0gTU9ERV9IVE1JWCkKLQkJCQkgICAgJiYgKHBDdXJyVHhSYXRlLT5DdXJyTUNTICE9Ci0JCQkJCXBOZXh0VHhSYXRlLT5DdXJyTUNTKSkgewotCQkJCQlzd2l0Y2ggKHBDdXJyVHhSYXRlLT5DdXJyTUNTKSB7Ci0JCQkJCWNhc2UgMDoKLQkJCQkJCUh0Q2ZnMC5maWVsZC5IVE1DUzBGQksgPQotCQkJCQkJICAgIHBOZXh0VHhSYXRlLT5DdXJyTUNTOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgMToKLQkJCQkJCUh0Q2ZnMC5maWVsZC5IVE1DUzFGQksgPQotCQkJCQkJICAgIHBOZXh0VHhSYXRlLT5DdXJyTUNTOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgMjoKLQkJCQkJCUh0Q2ZnMC5maWVsZC5IVE1DUzJGQksgPQotCQkJCQkJICAgIHBOZXh0VHhSYXRlLT5DdXJyTUNTOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgMzoKLQkJCQkJCUh0Q2ZnMC5maWVsZC5IVE1DUzNGQksgPQotCQkJCQkJICAgIHBOZXh0VHhSYXRlLT5DdXJyTUNTOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgNDoKLQkJCQkJCUh0Q2ZnMC5maWVsZC5IVE1DUzRGQksgPQotCQkJCQkJICAgIHBOZXh0VHhSYXRlLT5DdXJyTUNTOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgNToKLQkJCQkJCUh0Q2ZnMC5maWVsZC5IVE1DUzVGQksgPQotCQkJCQkJICAgIHBOZXh0VHhSYXRlLT5DdXJyTUNTOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgNjoKLQkJCQkJCUh0Q2ZnMC5maWVsZC5IVE1DUzZGQksgPQotCQkJCQkJICAgIHBOZXh0VHhSYXRlLT5DdXJyTUNTOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgNzoKLQkJCQkJCUh0Q2ZnMC5maWVsZC5IVE1DUzdGQksgPQotCQkJCQkJICAgIHBOZXh0VHhSYXRlLT5DdXJyTUNTOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgODoKLQkJCQkJCUh0Q2ZnMS5maWVsZC5IVE1DUzhGQksgPQotCQkJCQkJICAgIHBOZXh0VHhSYXRlLT5DdXJyTUNTOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgOToKLQkJCQkJCUh0Q2ZnMS5maWVsZC5IVE1DUzlGQksgPQotCQkJCQkJICAgIHBOZXh0VHhSYXRlLT5DdXJyTUNTOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgMTA6Ci0JCQkJCQlIdENmZzEuZmllbGQuSFRNQ1MxMEZCSyA9Ci0JCQkJCQkgICAgcE5leHRUeFJhdGUtPkN1cnJNQ1M7Ci0JCQkJCQlicmVhazsKLQkJCQkJY2FzZSAxMToKLQkJCQkJCUh0Q2ZnMS5maWVsZC5IVE1DUzExRkJLID0KLQkJCQkJCSAgICBwTmV4dFR4UmF0ZS0+Q3Vyck1DUzsKLQkJCQkJCWJyZWFrOwotCQkJCQljYXNlIDEyOgotCQkJCQkJSHRDZmcxLmZpZWxkLkhUTUNTMTJGQksgPQotCQkJCQkJICAgIHBOZXh0VHhSYXRlLT5DdXJyTUNTOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgMTM6Ci0JCQkJCQlIdENmZzEuZmllbGQuSFRNQ1MxM0ZCSyA9Ci0JCQkJCQkgICAgcE5leHRUeFJhdGUtPkN1cnJNQ1M7Ci0JCQkJCQlicmVhazsKLQkJCQkJY2FzZSAxNDoKLQkJCQkJCUh0Q2ZnMS5maWVsZC5IVE1DUzE0RkJLID0KLQkJCQkJCSAgICBwTmV4dFR4UmF0ZS0+Q3Vyck1DUzsKLQkJCQkJCWJyZWFrOwotCQkJCQljYXNlIDE1OgotCQkJCQkJSHRDZmcxLmZpZWxkLkhUTUNTMTVGQksgPQotCQkJCQkJICAgIHBOZXh0VHhSYXRlLT5DdXJyTUNTOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWRlZmF1bHQ6Ci0JCQkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCQkJCQkgKCJBc2ljVXBkYXRlQXV0b0ZhbGxCYWNrVGFibGU6IG5vdCBzdXBwb3J0IEN1cnJNQ1M9JWRcbiIsCi0JCQkJCQkJICBwQ3VyclR4UmF0ZS0+Ci0JCQkJCQkJICBDdXJyTUNTKSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCi0JCXBOZXh0VHhSYXRlID0gcEN1cnJUeFJhdGU7Ci0JfQotCi0JUlRNUF9JT19XUklURTMyKHBBZCwgSFRfRkJLX0NGRzAsIEh0Q2ZnMC53b3JkKTsKLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBIVF9GQktfQ0ZHMSwgSHRDZmcxLndvcmQpOwotCVJUTVBfSU9fV1JJVEUzMihwQWQsIExHX0ZCS19DRkcwLCBMZ0NmZzAud29yZCk7Ci0JUlRNUF9JT19XUklURTMyKHBBZCwgTEdfRkJLX0NGRzEsIExnQ2ZnMS53b3JkKTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JCVNldCBNQUMgcmVnaXN0ZXIgdmFsdWUgYWNjb3JkaW5nIG9wZXJhdGlvbiBtb2RlLgotCQlPcGVyYXRpb25Nb2RlIEFORCBiTm9uR0ZFeGlzdCBhcmUgZm9yIE1NIGFuZCBHRiBQcm90ZWNpdG9uLgotCQlJZiBNTSBvciBHRiBtYXNrIGlzIG5vdCBzZXQsIHRob3NlIHBhc3NpbmcgYXJndW1lbnQgZG9lc24ndCBub3QgdGFrZSBlZmZlY3QuCi0KLQkJT3BlcmF0aW9uIG1vZGUgbWVhbmluZzoKLQkJPSAwIDogUHVyZSBIVCwgbm8gcHJlb3RlY3Rpb24uCi0JCT0gMHgwMTsgdGhlcmUgbWF5IGJlIG5vbi1IVCBkZXZpY2VzIGluIGJvdGggdGhlIGNvbnRyb2wgYW5kIGV4dGVuc2lvbiBjaGFubmVsLCBwcm90ZWN0aW9uIGlzIG9wdGlvbmFsIGluIEJTUy4KLQkJPSAweDEwOiBObyBUcmFuc21pc3Npb24gaW4gNDBNIGlzIHByb3RlY3RlZC4KLQkJPSAweDExOiBUcmFuc21pc3Npb24gaW4gYm90aCA0ME0gYW5kIDIwTSBzaGFsbCBiZSBwcm90ZWN0ZWQKLQkJaWYgKGJOb25HRkV4aXN0KQotCQkJd2Ugc2hvdWxkIGNob29zZSBub3QgdG8gdXNlIEdGLiBCdXQgc3RpbGwgc2V0IGNvcnJlY3QgQVNJQyByZWdpc3RlcnMuCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBBc2ljVXBkYXRlUHJvdGVjdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgICAgICB1MTYgT3BlcmF0aW9uTW9kZSwKLQkJICAgICAgIHU4IFNldE1hc2ssCi0JCSAgICAgICBJTiBCT09MRUFOIGJEaXNhYmxlQkdQcm90ZWN0LCBJTiBCT09MRUFOIGJOb25HRkV4aXN0KQotewotCVBST1RfQ0ZHX1NUUlVDIFByb3RDZmcsIFByb3RDZmc0OwotCXUzMiBQcm90ZWN0WzZdOwotCXUxNiBvZmZzZXQ7Ci0JdTggaTsKLQl1MzIgTWFjUmVnID0gMDsKLQotCWlmICghKHBBZC0+Q29tbW9uQ2ZnLmJIVFByb3RlY3QpICYmIChPcGVyYXRpb25Nb2RlICE9IDgpKSB7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAocEFkLT5CQVRhYmxlLm51bURvbmVPcmlnaW5hdG9yKSB7Ci0JCS8qICovCi0JCS8qIGVuYWJsZSB0aGUgUlRTL0NUUyB0byBhdm9pZCBjaGFubmVsIGNvbGxpc2lvbiAqLwotCQkvKiAqLwotCQlTZXRNYXNrID0gQUxMTl9TRVRQUk9URUNUOwotCQlPcGVyYXRpb25Nb2RlID0gODsKLQl9Ci0JLyogQ29uZmlnIEFTSUMgUlRTIHRocmVzaG9sZCByZWdpc3RlciAqLwotCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfUlRTX0NGRywgJk1hY1JlZyk7Ci0JTWFjUmVnICY9IDB4RkYwMDAwRkY7Ci0JLyogSWYgdGhlIHVzZXIgd2FudCBkaXNhYmxlIFJ0c1RocmVzaG9sZCBhbmQgZW5hYmxlIEFtc2R1L1JhbGluay1BZ2dyZWdhdGlvbiwgc2V0IHRoZSBSdHNUaHJlc2hvbGQgYXMgNDA5NiAqLwotCWlmICgoKHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BbXNkdUVuYWJsZSkgfHwKLQkgICAgIChwQWQtPkNvbW1vbkNmZy5iQWdncmVnYXRpb25DYXBhYmxlID09IFRSVUUpKQotCSAgICAmJiBwQWQtPkNvbW1vbkNmZy5SdHNUaHJlc2hvbGQgPT0gTUFYX1JUU19USFJFU0hPTEQpIHsKLQkJTWFjUmVnIHw9ICgweDEwMDAgPDwgOCk7Ci0JfSBlbHNlIHsKLQkJTWFjUmVnIHw9IChwQWQtPkNvbW1vbkNmZy5SdHNUaHJlc2hvbGQgPDwgOCk7Ci0JfQotCi0JUlRNUF9JT19XUklURTMyKHBBZCwgVFhfUlRTX0NGRywgTWFjUmVnKTsKLQotCS8qIEluaXRpYWwgY29tbW9uIHByb3RlY3Rpb24gc2V0dGluZ3MgKi8KLQlSVE1QWmVyb01lbW9yeShQcm90ZWN0LCBzaXplb2YoUHJvdGVjdCkpOwotCVByb3RDZmc0LndvcmQgPSAwOwotCVByb3RDZmcud29yZCA9IDA7Ci0JUHJvdENmZy5maWVsZC5UeG9wQWxsb3dHRjQwID0gMTsKLQlQcm90Q2ZnLmZpZWxkLlR4b3BBbGxvd0dGMjAgPSAxOwotCVByb3RDZmcuZmllbGQuVHhvcEFsbG93TU00MCA9IDE7Ci0JUHJvdENmZy5maWVsZC5UeG9wQWxsb3dNTTIwID0gMTsKLQlQcm90Q2ZnLmZpZWxkLlR4b3BBbGxvd09mZG0gPSAxOwotCVByb3RDZmcuZmllbGQuVHhvcEFsbG93Q2NrID0gMTsKLQlQcm90Q2ZnLmZpZWxkLlJUU1RoRW4gPSAxOwotCVByb3RDZmcuZmllbGQuUHJvdGVjdE5hdiA9IEFTSUNfU0hPUlROQVY7Ci0KLQkvKiB1cGRhdGUgUEhZIG1vZGUgYW5kIHJhdGUgKi8KLQlpZiAocEFkLT5Db21tb25DZmcuQ2hhbm5lbCA+IDE0KQotCQlQcm90Q2ZnLmZpZWxkLlByb3RlY3RSYXRlID0gMHg0MDAwOwotCVByb3RDZmcuZmllbGQuUHJvdGVjdFJhdGUgfD0gcEFkLT5Db21tb25DZmcuUnRzUmF0ZTsKLQotCS8qIEhhbmRsZSBsZWdhY3koQi9HKSBwcm90ZWN0aW9uICovCi0JaWYgKGJEaXNhYmxlQkdQcm90ZWN0KSB7Ci0JCS8qUHJvdENmZy5maWVsZC5Qcm90ZWN0UmF0ZSA9IHBBZC0+Q29tbW9uQ2ZnLlJ0c1JhdGU7ICovCi0JCVByb3RDZmcuZmllbGQuUHJvdGVjdEN0cmwgPSAwOwotCQlQcm90ZWN0WzBdID0gUHJvdENmZy53b3JkOwotCQlQcm90ZWN0WzFdID0gUHJvdENmZy53b3JkOwotCQlwQWQtPkZsZ0N0c0VuYWJsZWQgPSAwOwkvKiBDVFMtc2VsZiBpcyBub3QgdXNlZCAqLwotCX0gZWxzZSB7Ci0JCS8qUHJvdENmZy5maWVsZC5Qcm90ZWN0UmF0ZSA9IHBBZC0+Q29tbW9uQ2ZnLlJ0c1JhdGU7ICovCi0JCVByb3RDZmcuZmllbGQuUHJvdGVjdEN0cmwgPSAwOwkvKiBDQ0sgZG8gbm90IG5lZWQgdG8gYmUgcHJvdGVjdGVkICovCi0JCVByb3RlY3RbMF0gPSBQcm90Q2ZnLndvcmQ7Ci0JCVByb3RDZmcuZmllbGQuUHJvdGVjdEN0cmwgPSBBU0lDX0NUUzsJLyogT0ZETSBuZWVkcyB1c2luZyBDQ0sgdG8gcHJvdGVjdCAqLwotCQlQcm90ZWN0WzFdID0gUHJvdENmZy53b3JkOwotCQlwQWQtPkZsZ0N0c0VuYWJsZWQgPSAxOwkvKiBDVFMtc2VsZiBpcyB1c2VkICovCi0JfQotCi0JLyogRGVjaWRlIEhUIGZyYW1lIHByb3RlY3Rpb24uICovCi0JaWYgKChTZXRNYXNrICYgQUxMTl9TRVRQUk9URUNUKSAhPSAwKSB7Ci0JCXN3aXRjaCAoT3BlcmF0aW9uTW9kZSkgewotCQljYXNlIDB4MDoKLQkJCS8qIE5PIFBST1RFQ1QgKi8KLQkJCS8qIDEuQWxsIFNUQXMgaW4gdGhlIEJTUyBhcmUgMjAvNDAgTUh6IEhUICovCi0JCQkvKiAyLiBpbiBhaSAyMC80ME1IeiBCU1MgKi8KLQkJCS8qIDMuIGFsbCBTVEFzIGFyZSAyME1IeiBpbiBhIDIwTUh6IEJTUyAqLwotCQkJLyogUHVyZSBIVC4gbm8gcHJvdGVjdGlvbi4gKi8KLQotCQkJLyogTU0yMF9QUk9UX0NGRyAqLwotCQkJLyogICAgICBSZXNlcnZlZCAoMzE6MjcpICovCi0JCQkvKiAgICAgIFBST1RfVFhPUCgyNToyMCkgLS0gMDEwMTExICovCi0JCQkvKiAgICAgIFBST1RfTkFWKDE5OjE4KSAgLS0gMDEgKFNob3J0IE5BViBwcm90ZWN0aW9uKSAqLwotCQkJLyogIFBST1RfQ1RSTCgxNzoxNikgLS0gMDAgKE5vbmUpICovCi0JCQkvKiAgICAgIFBST1RfUkFURSgxNTowKSAgLS0gMHg0MDA0IChPRkRNIDI0TSkgKi8KLQkJCVByb3RlY3RbMl0gPSAweDAxNzQ0MDA0OwotCi0JCQkvKiBNTTQwX1BST1RfQ0ZHICovCi0JCQkvKiAgICAgIFJlc2VydmVkICgzMToyNykgKi8KLQkJCS8qICAgICAgUFJPVF9UWE9QKDI1OjIwKSAtLSAxMTExMTEgKi8KLQkJCS8qICAgICAgUFJPVF9OQVYoMTk6MTgpICAtLSAwMSAoU2hvcnQgTkFWIHByb3RlY3Rpb24pICovCi0JCQkvKiAgUFJPVF9DVFJMKDE3OjE2KSAtLSAwMCAoTm9uZSkgKi8KLQkJCS8qICAgICAgUFJPVF9SQVRFKDE1OjApICAtLSAweDQwODQgKGR1cGxpY2F0ZSBPRkRNIDI0TSkgKi8KLQkJCVByb3RlY3RbM10gPSAweDAzZjQ0MDg0OwotCi0JCQkvKiBDRjIwX1BST1RfQ0ZHICovCi0JCQkvKiAgICAgIFJlc2VydmVkICgzMToyNykgKi8KLQkJCS8qICAgICAgUFJPVF9UWE9QKDI1OjIwKSAtLSAwMTAxMTEgKi8KLQkJCS8qICAgICAgUFJPVF9OQVYoMTk6MTgpICAtLSAwMSAoU2hvcnQgTkFWIHByb3RlY3Rpb24pICovCi0JCQkvKiAgUFJPVF9DVFJMKDE3OjE2KSAtLSAwMCAoTm9uZSkgKi8KLQkJCS8qICAgICAgUFJPVF9SQVRFKDE1OjApICAtLSAweDQwMDQgKE9GRE0gMjRNKSAqLwotCQkJUHJvdGVjdFs0XSA9IDB4MDE3NDQwMDQ7Ci0KLQkJCS8qIENGNDBfUFJPVF9DRkcgKi8KLQkJCS8qICAgICAgUmVzZXJ2ZWQgKDMxOjI3KSAqLwotCQkJLyogICAgICBQUk9UX1RYT1AoMjU6MjApIC0tIDExMTExMSAqLwotCQkJLyogICAgICBQUk9UX05BVigxOToxOCkgIC0tIDAxIChTaG9ydCBOQVYgcHJvdGVjdGlvbikgKi8KLQkJCS8qICBQUk9UX0NUUkwoMTc6MTYpIC0tIDAwIChOb25lKSAqLwotCQkJLyogICAgICBQUk9UX1JBVEUoMTU6MCkgIC0tIDB4NDA4NCAoZHVwbGljYXRlIE9GRE0gMjRNKSAqLwotCQkJUHJvdGVjdFs1XSA9IDB4MDNmNDQwODQ7Ci0KLQkJCWlmIChiTm9uR0ZFeGlzdCkgewotCQkJCS8qIFBST1RfTkFWKDE5OjE4KSAgLS0gMDEgKFNob3J0IE5BViBwcm90ZWN0aWlvbikgKi8KLQkJCQkvKiBQUk9UX0NUUkwoMTc6MTYpIC0tIDAxIChSVFMvQ1RTKSAqLwotCQkJCVByb3RlY3RbNF0gPSAweDAxNzU0MDA0OwotCQkJCVByb3RlY3RbNV0gPSAweDAzZjU0MDg0OwotCQkJfQotCQkJcEFkLT5Db21tb25DZmcuSU9UZXN0UGFybS5iUlRTTG9uZ1Byb3RPbiA9IEZBTFNFOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSAxOgotCQkJLyogVGhpcyBpcyAiSFQgbm9uLW1lbWJlciBwcm90ZWN0aW9uIG1vZGUuIiAqLwotCQkJLyogSWYgdGhlcmUgbWF5IGJlIG5vbi1IVCBTVEFzIG15IEJTUyAqLwotCQkJUHJvdENmZy53b3JkID0gMHgwMTc0NDAwNDsJLyogUFJPVF9DVFJMKDE3OjE2KSA6IDAgKE5vbmUpICovCi0JCQlQcm90Q2ZnNC53b3JkID0gMHgwM2Y0NDA4NDsJLyogZHVwbGljYWV0IGxlZ2FjeSAyNE0uIEJXIHNldCAxLiAqLwotCQkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRwotCQkJICAgIChwQWQsIGZPUF9TVEFUVVNfQkdfUFJPVEVDVElPTl9JTlVTRUQpKSB7Ci0JCQkJUHJvdENmZy53b3JkID0gMHgwMTc0MDAwMzsJLypFUlAgdXNlIFByb3RlY3Rpb24gYml0IGlzIHNldCwgdXNlIHByb3RlY3Rpb24gcmF0ZSBhdCBDbGF1c2UgMTguLiAqLwotCQkJCVByb3RDZmc0LndvcmQgPSAweDAzZjQwMDAzOwkvKiBEb24ndCBkdXBsaWNhdGUgUlRTL0NUUyBpbiBDQ0sgbW9kZS4gMHgwM2Y0MDA4MzsgKi8KLQkJCX0KLQkJCS8qQXNzaWduIFByb3RlY3Rpb24gbWV0aG9kIGZvciAyMCY0MCBNSHogcGFja2V0cyAqLwotCQkJUHJvdENmZy5maWVsZC5Qcm90ZWN0Q3RybCA9IEFTSUNfUlRTOwotCQkJUHJvdENmZy5maWVsZC5Qcm90ZWN0TmF2ID0gQVNJQ19TSE9SVE5BVjsKLQkJCVByb3RDZmc0LmZpZWxkLlByb3RlY3RDdHJsID0gQVNJQ19SVFM7Ci0JCQlQcm90Q2ZnNC5maWVsZC5Qcm90ZWN0TmF2ID0gQVNJQ19TSE9SVE5BVjsKLQkJCVByb3RlY3RbMl0gPSBQcm90Q2ZnLndvcmQ7Ci0JCQlQcm90ZWN0WzNdID0gUHJvdENmZzQud29yZDsKLQkJCVByb3RlY3RbNF0gPSBQcm90Q2ZnLndvcmQ7Ci0JCQlQcm90ZWN0WzVdID0gUHJvdENmZzQud29yZDsKLQkJCXBBZC0+Q29tbW9uQ2ZnLklPVGVzdFBhcm0uYlJUU0xvbmdQcm90T24gPSBUUlVFOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSAyOgotCQkJLyogSWYgb25seSBIVCBTVEFzIGFyZSBpbiBCU1MuIGF0IGxlYXN0IG9uZSBpcyAyME1Iei4gT25seSBwcm90ZWN0IDQwTUh6IHBhY2tldHMgKi8KLQkJCVByb3RDZmcud29yZCA9IDB4MDE3NDQwMDQ7CS8qIFBST1RfQ1RSTCgxNzoxNikgOiAwIChOb25lKSAqLwotCQkJUHJvdENmZzQud29yZCA9IDB4MDNmNDQwODQ7CS8qIGR1cGxpY2FldCBsZWdhY3kgMjRNLiBCVyBzZXQgMS4gKi8KLQotCQkJLypBc3NpZ24gUHJvdGVjdGlvbiBtZXRob2QgZm9yIDQwTUh6IHBhY2tldHMgKi8KLQkJCVByb3RDZmc0LmZpZWxkLlByb3RlY3RDdHJsID0gQVNJQ19SVFM7Ci0JCQlQcm90Q2ZnNC5maWVsZC5Qcm90ZWN0TmF2ID0gQVNJQ19TSE9SVE5BVjsKLQkJCVByb3RlY3RbMl0gPSBQcm90Q2ZnLndvcmQ7Ci0JCQlQcm90ZWN0WzNdID0gUHJvdENmZzQud29yZDsKLQkJCWlmIChiTm9uR0ZFeGlzdCkgewotCQkJCVByb3RDZmcuZmllbGQuUHJvdGVjdEN0cmwgPSBBU0lDX1JUUzsKLQkJCQlQcm90Q2ZnLmZpZWxkLlByb3RlY3ROYXYgPSBBU0lDX1NIT1JUTkFWOwotCQkJfQotCQkJUHJvdGVjdFs0XSA9IFByb3RDZmcud29yZDsKLQkJCVByb3RlY3RbNV0gPSBQcm90Q2ZnNC53b3JkOwotCi0JCQlwQWQtPkNvbW1vbkNmZy5JT1Rlc3RQYXJtLmJSVFNMb25nUHJvdE9uID0gRkFMU0U7Ci0JCQlicmVhazsKLQotCQljYXNlIDM6Ci0JCQkvKiBIVCBtaXhlZCBtb2RlLiAgICAgICAgUFJPVEVDVCBBTEwhICovCi0JCQkvKiBBc3NpZ24gUmF0ZSAqLwotCQkJUHJvdENmZy53b3JkID0gMHgwMTc0NDAwNDsJLypkdXBsaWNhZXQgbGVnYWN5IDI0TS4gQlcgc2V0IDEuICovCi0JCQlQcm90Q2ZnNC53b3JkID0gMHgwM2Y0NDA4NDsKLQkJCS8qIGJvdGggMjBNSHogYW5kIDQwTUh6IGFyZSBwcm90ZWN0ZWQuIFdoZXRoZXIgdXNlIFJUUyBvciBDVFMtdG8tc2VsZiBkZXBlbmRzIG9uIHRoZSAqLwotCQkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRwotCQkJICAgIChwQWQsIGZPUF9TVEFUVVNfQkdfUFJPVEVDVElPTl9JTlVTRUQpKSB7Ci0JCQkJUHJvdENmZy53b3JkID0gMHgwMTc0MDAwMzsJLypFUlAgdXNlIFByb3RlY3Rpb24gYml0IGlzIHNldCwgdXNlIHByb3RlY3Rpb24gcmF0ZSBhdCBDbGF1c2UgMTguLiAqLwotCQkJCVByb3RDZmc0LndvcmQgPSAweDAzZjQwMDAzOwkvKiBEb24ndCBkdXBsaWNhdGUgUlRTL0NUUyBpbiBDQ0sgbW9kZS4gMHgwM2Y0MDA4MyAqLwotCQkJfQotCQkJLypBc3NpZ24gUHJvdGVjdGlvbiBtZXRob2QgZm9yIDIwJjQwIE1IeiBwYWNrZXRzICovCi0JCQlQcm90Q2ZnLmZpZWxkLlByb3RlY3RDdHJsID0gQVNJQ19SVFM7Ci0JCQlQcm90Q2ZnLmZpZWxkLlByb3RlY3ROYXYgPSBBU0lDX1NIT1JUTkFWOwotCQkJUHJvdENmZzQuZmllbGQuUHJvdGVjdEN0cmwgPSBBU0lDX1JUUzsKLQkJCVByb3RDZmc0LmZpZWxkLlByb3RlY3ROYXYgPSBBU0lDX1NIT1JUTkFWOwotCQkJUHJvdGVjdFsyXSA9IFByb3RDZmcud29yZDsKLQkJCVByb3RlY3RbM10gPSBQcm90Q2ZnNC53b3JkOwotCQkJUHJvdGVjdFs0XSA9IFByb3RDZmcud29yZDsKLQkJCVByb3RlY3RbNV0gPSBQcm90Q2ZnNC53b3JkOwotCQkJcEFkLT5Db21tb25DZmcuSU9UZXN0UGFybS5iUlRTTG9uZ1Byb3RPbiA9IFRSVUU7Ci0JCQlicmVhazsKLQotCQljYXNlIDg6Ci0JCQkvKiBTcGVjaWFsIG9uIGZvciBBdGhlcm9zIHByb2JsZW0gbiBjaGlwLiAqLwotCQkJUHJvdGVjdFsyXSA9IDB4MDE3NTQwMDQ7Ci0JCQlQcm90ZWN0WzNdID0gMHgwM2Y1NDA4NDsKLQkJCVByb3RlY3RbNF0gPSAweDAxNzU0MDA0OwotCQkJUHJvdGVjdFs1XSA9IDB4MDNmNTQwODQ7Ci0JCQlwQWQtPkNvbW1vbkNmZy5JT1Rlc3RQYXJtLmJSVFNMb25nUHJvdE9uID0gVFJVRTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0Jb2Zmc2V0ID0gQ0NLX1BST1RfQ0ZHOwotCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKLQkJaWYgKChTZXRNYXNrICYgKDEgPDwgaSkpKSB7Ci0JCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBvZmZzZXQgKyBpICogNCwgUHJvdGVjdFtpXSk7Ci0JCX0KLQl9Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQotCUlSUUwgPSBQQVNTSVZFX0xFVkVMCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi12b2lkIEFzaWNTd2l0Y2hDaGFubmVsKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggQ2hhbm5lbCwgSU4gQk9PTEVBTiBiU2NhbikKLXsKLQl1bnNpZ25lZCBsb25nIFIyID0gMCwgUjMgPSBERUZBVUxUX1JGX1RYX1BPV0VSLCBSNCA9IDA7Ci0JY2hhciBUeFB3ZXIgPSAwLCBUeFB3ZXIyID0gREVGQVVMVF9SRl9UWF9QT1dFUjsJLypCYnA5NCA9IEJCUFI5NF9ERUZBVUxULCBUeFB3ZXIyID0gREVGQVVMVF9SRl9UWF9QT1dFUjsgKi8KLQl1OCBpbmRleDsKLQl1MzIgVmFsdWUgPSAwOwkvKkJicFJlZywgVmFsdWU7ICovCi0Jc3RydWN0IHJ0X3J0bXBfcmZfcmVncyAqUkZSZWdUYWJsZTsKLQl1OCBSRlZhbHVlOwotCi0JUkZWYWx1ZSA9IDA7Ci0JLyogU2VhcmNoIFR4IHBvd2VyIHZhbHVlICovCi0JLyogV2UgY2FuJ3QgdXNlIENoYW5uZWxMaXN0IHRvIHNlYXJjaCBjaGFubmVsLCBzaW5jZSBzb21lIGNlbnRyYWwgY2hhbm5sJ3MgdHhwb3dyIGRvZXNuJ3QgbGlzdCAqLwotCS8qIGluIENoYW5uZWxMaXN0LCBzbyB1c2UgVHhQb3dlciBhcnJheSBpbnN0ZWFkLiAqLwotCS8qICovCi0JZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTUFYX05VTV9PRl9DSEFOTkVMUzsgaW5kZXgrKykgewotCQlpZiAoQ2hhbm5lbCA9PSBwQWQtPlR4UG93ZXJbaW5kZXhdLkNoYW5uZWwpIHsKLQkJCVR4UHdlciA9IHBBZC0+VHhQb3dlcltpbmRleF0uUG93ZXI7Ci0JCQlUeFB3ZXIyID0gcEFkLT5UeFBvd2VyW2luZGV4XS5Qb3dlcjI7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmIChpbmRleCA9PSBNQVhfTlVNX09GX0NIQU5ORUxTKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJICgiQXNpY1N3aXRjaENoYW5uZWw6IENhbid0IGZpbmQgdGhlIENoYW5uZWwjJWQgXG4iLAotCQkJICBDaGFubmVsKSk7Ci0JfQotI2lmZGVmIFJUMzB4eAotCS8qIFRoZSBSRiBwcm9ncmFtbWluZyBzZXF1ZW5jZSBpcyBkaWZmZXJlbmNlIGJldHdlZW4gM3h4eCBhbmQgMnh4eCAqLwotCWlmICgoSVNfUlQzMDcwKHBBZCkgfHwgSVNfUlQzMDkwKHBBZCkgfHwgSVNfUlQzMzkwKHBBZCkpCi0JICAgICYmICgocEFkLT5SZkljVHlwZSA9PSBSRklDXzMwMjApIHx8IChwQWQtPlJmSWNUeXBlID09IFJGSUNfMjAyMCkKLQkJfHwgKHBBZC0+UmZJY1R5cGUgPT0gUkZJQ18zMDIxKQotCQl8fCAocEFkLT5SZkljVHlwZSA9PSBSRklDXzMwMjIpKSkgewotCQkvKiBtb2RpZnkgYnkgV1kgZm9yIFJlYWQgUkYgUmVnLiBlcnJvciAqLwotCi0JCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE5VTV9PRl8zMDIwX0NITkw7IGluZGV4KyspIHsKLQkJCWlmIChDaGFubmVsID09IEZyZXFJdGVtczMwMjBbaW5kZXhdLkNoYW5uZWwpIHsKLQkJCQkvKiBQcm9ncmFtbWluZyBjaGFubmVsIHBhcmFtZXRlcnMgKi8KLQkJCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMDIsCi0JCQkJCQkgICAgICBGcmVxSXRlbXMzMDIwW2luZGV4XS5OKTsKLQkJCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMDMsCi0JCQkJCQkgICAgICBGcmVxSXRlbXMzMDIwW2luZGV4XS5LKTsKLQkJCQlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IwNiwgJlJGVmFsdWUpOwotCQkJCVJGVmFsdWUgPQotCQkJCSAgICAoUkZWYWx1ZSAmIDB4RkMpIHwgRnJlcUl0ZW1zMzAyMFtpbmRleF0uUjsKLQkJCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMDYsIFJGVmFsdWUpOwotCi0JCQkJLyogU2V0IFR4MCBQb3dlciAqLwotCQkJCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjEyLCAmUkZWYWx1ZSk7Ci0JCQkJUkZWYWx1ZSA9IChSRlZhbHVlICYgMHhFMCkgfCBUeFB3ZXI7Ci0JCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjEyLCBSRlZhbHVlKTsKLQotCQkJCS8qIFNldCBUeDEgUG93ZXIgKi8KLQkJCQlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IxMywgJlJGVmFsdWUpOwotCQkJCVJGVmFsdWUgPSAoUkZWYWx1ZSAmIDB4RTApIHwgVHhQd2VyMjsKLQkJCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMTMsIFJGVmFsdWUpOwotCi0JCQkJLyogVHgvUnggU3RyZWFtIHNldHRpbmcgKi8KLQkJCQlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IwMSwgJlJGVmFsdWUpOwotCQkJCS8qaWYgKElTX1JUMzA5MChwQWQpKSAqLwotCQkJCS8qICAgICAgUkZWYWx1ZSB8PSAweDAxOyAvLyBFbmFibGUgUkYgYmxvY2suICovCi0JCQkJUkZWYWx1ZSAmPSAweDAzOwkvKmNsZWFyIGJpdFs3fjJdICovCi0JCQkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGggPT0gMSkKLQkJCQkJUkZWYWx1ZSB8PSAweEEwOwotCQkJCWVsc2UgaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGggPT0gMikKLQkJCQkJUkZWYWx1ZSB8PSAweDgwOwotCQkJCWlmIChwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID09IDEpCi0JCQkJCVJGVmFsdWUgfD0gMHg1MDsKLQkJCQllbHNlIGlmIChwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID09IDIpCi0JCQkJCVJGVmFsdWUgfD0gMHg0MDsKLQkJCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMDEsIFJGVmFsdWUpOwotCi0JCQkJLyogU2V0IFJGIG9mZnNldCAqLwotCQkJCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjIzLCAmUkZWYWx1ZSk7Ci0JCQkJUkZWYWx1ZSA9IChSRlZhbHVlICYgMHg4MCkgfCBwQWQtPlJmRnJlcU9mZnNldDsKLQkJCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMjMsIFJGVmFsdWUpOwotCi0JCQkJLyogU2V0IEJXICovCi0JCQkJaWYgKCFiU2NhbgotCQkJCSAgICAmJiAocEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXID09IEJXXzQwKSkgewotCQkJCQlSRlZhbHVlID0gcEFkLT5NbG1lLkNhbGlCVzQwUmZSMjQ7Ci0JCQkJCS8qRElTQUJMRV8xMU5fQ0hFQ0socEFkKTsgKi8KLQkJCQl9IGVsc2UgewotCQkJCQlSRlZhbHVlID0gcEFkLT5NbG1lLkNhbGlCVzIwUmZSMjQ7Ci0JCQkJfQotCQkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IyNCwgUkZWYWx1ZSk7Ci0JCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjMxLCBSRlZhbHVlKTsKLQotCQkJCS8qIEVuYWJsZSBSRiB0dW5pbmcgKi8KLQkJCQlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IwNywgJlJGVmFsdWUpOwotCQkJCVJGVmFsdWUgPSBSRlZhbHVlIHwgMHgxOwotCQkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IwNywgUkZWYWx1ZSk7Ci0KLQkJCQkvKiBsYXRjaCBjaGFubmVsIGZvciBmdXR1cmUgdXNhZ2UuICovCi0JCQkJcEFkLT5MYXRjaFJmUmVncy5DaGFubmVsID0gQ2hhbm5lbDsKLQotCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkgKCJTd2l0Y2hDaGFubmVsIyVkKFJGPSVkLCBQd3IwPSVkLCBQd3IxPSVkLCAlZFQpLCBOPTB4JTAyWCwgSz0weCUwMlgsIFI9MHglMDJYXG4iLAotCQkJCQkgIENoYW5uZWwsIHBBZC0+UmZJY1R5cGUsIFR4UHdlciwKLQkJCQkJICBUeFB3ZXIyLCBwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoLAotCQkJCQkgIEZyZXFJdGVtczMwMjBbaW5kZXhdLk4sCi0JCQkJCSAgRnJlcUl0ZW1zMzAyMFtpbmRleF0uSywKLQkJCQkJICBGcmVxSXRlbXMzMDIwW2luZGV4XS5SKSk7Ci0KLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0gZWxzZQotI2VuZGlmIC8qIFJUMzB4eCAvLyAqLwotCXsKLQkJUkZSZWdUYWJsZSA9IFJGMjg1MFJlZ1RhYmxlOwotCQlzd2l0Y2ggKHBBZC0+UmZJY1R5cGUpIHsKLQkJY2FzZSBSRklDXzI4MjA6Ci0JCWNhc2UgUkZJQ18yODUwOgotCQljYXNlIFJGSUNfMjcyMDoKLQkJY2FzZSBSRklDXzI3NTA6Ci0KLQkJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE5VTV9PRl8yODUwX0NITkw7IGluZGV4KyspIHsKLQkJCQlpZiAoQ2hhbm5lbCA9PSBSRlJlZ1RhYmxlW2luZGV4XS5DaGFubmVsKSB7Ci0JCQkJCVIyID0gUkZSZWdUYWJsZVtpbmRleF0uUjI7Ci0JCQkJCWlmIChwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoID09IDEpIHsKLQkJCQkJCVIyIHw9IDB4NDAwMDsJLyogSWYgVFhwYXRoIGlzIDEsIGJpdCAxNCA9IDE7ICovCi0JCQkJCX0KLQotCQkJCQlpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA9PSAyKSB7Ci0JCQkJCQlSMiB8PSAweDQwOwkvKiB3cml0ZSAxIHRvIG9mZiBSeHBhdGguICovCi0JCQkJCX0gZWxzZSBpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA9PQotCQkJCQkJICAgMSkgewotCQkJCQkJUjIgfD0gMHgyMDA0MDsJLyogd3JpdGUgMSB0byBvZmYgUnhQYXRoICovCi0JCQkJCX0KLQotCQkJCQlpZiAoQ2hhbm5lbCA+IDE0KSB7Ci0JCQkJCQkvKiBpbml0aWFsaXplIFIzLCBSNCAqLwotCQkJCQkJUjMgPSAoUkZSZWdUYWJsZVtpbmRleF0uCi0JCQkJCQkgICAgICBSMyAmIDB4ZmZmZmMxZmYpOwotCQkJCQkJUjQgPSAoUkZSZWdUYWJsZVtpbmRleF0uCi0JCQkJCQkgICAgICBSNCAmICh+MHgwMDFmODdjMCkpIHwKLQkJCQkJCSAgICAocEFkLT5SZkZyZXFPZmZzZXQgPDwgMTUpOwotCi0JCQkJCQkvKiA1RyBiYW5kIHBvd2VyIHJhbmdlOiAweEY5fjBYMEYsIFRYMCBSZWczIGJpdDkvVFgxIFJlZzQgYml0Nj0iMCIgbWVhbnMgdGhlIFRYIHBvd2VyIHJlZHVjZSA3ZEIgKi8KLQkJCQkJCS8qIFIzICovCi0JCQkJCQlpZiAoKFR4UHdlciA+PSAtNykKLQkJCQkJCSAgICAmJiAoVHhQd2VyIDwgMCkpIHsKLQkJCQkJCQlUeFB3ZXIgPSAoNyArIFR4UHdlcik7Ci0JCQkJCQkJVHhQd2VyID0KLQkJCQkJCQkgICAgKFR4UHdlciA+Ci0JCQkJCQkJICAgICAweEYpID8gKDB4RikKLQkJCQkJCQkgICAgOiAoVHhQd2VyKTsKLQkJCQkJCQlSMyB8PSAoVHhQd2VyIDw8IDEwKTsKLQkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCQkJCQkJICgiQXNpY1N3aXRjaENoYW5uZWw6IFR4UHdlcj0lZCBcbiIsCi0JCQkJCQkJCSAgVHhQd2VyKSk7Ci0JCQkJCQl9IGVsc2UgewotCQkJCQkJCVR4UHdlciA9Ci0JCQkJCQkJICAgIChUeFB3ZXIgPgotCQkJCQkJCSAgICAgMHhGKSA/ICgweEYpCi0JCQkJCQkJICAgIDogKFR4UHdlcik7Ci0JCQkJCQkJUjMgfD0KLQkJCQkJCQkgICAgKFR4UHdlciA8PCAxMCkgfCAoMQotCQkJCQkJCQkJICAgICAgPDwKLQkJCQkJCQkJCSAgICAgIDkpOwotCQkJCQkJfQotCi0JCQkJCQkvKiBSNCAqLwotCQkJCQkJaWYgKChUeFB3ZXIyID49IC03KQotCQkJCQkJICAgICYmIChUeFB3ZXIyIDwgMCkpIHsKLQkJCQkJCQlUeFB3ZXIyID0gKDcgKyBUeFB3ZXIyKTsKLQkJCQkJCQlUeFB3ZXIyID0KLQkJCQkJCQkgICAgKFR4UHdlcjIgPgotCQkJCQkJCSAgICAgMHhGKSA/ICgweEYpCi0JCQkJCQkJICAgIDogKFR4UHdlcjIpOwotCQkJCQkJCVI0IHw9IChUeFB3ZXIyIDw8IDcpOwotCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJCQkJCQkgKCJBc2ljU3dpdGNoQ2hhbm5lbDogVHhQd2VyMj0lZCBcbiIsCi0JCQkJCQkJCSAgVHhQd2VyMikpOwotCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQlUeFB3ZXIyID0KLQkJCQkJCQkgICAgKFR4UHdlcjIgPgotCQkJCQkJCSAgICAgMHhGKSA/ICgweEYpCi0JCQkJCQkJICAgIDogKFR4UHdlcjIpOwotCQkJCQkJCVI0IHw9Ci0JCQkJCQkJICAgIChUeFB3ZXIyIDw8IDcpIHwgKDEKLQkJCQkJCQkJCSAgICAgIDw8Ci0JCQkJCQkJCQkgICAgICA2KTsKLQkJCQkJCX0KLQkJCQkJfSBlbHNlIHsKLQkJCQkJCVIzID0gKFJGUmVnVGFibGVbaW5kZXhdLlIzICYgMHhmZmZmYzFmZikgfCAoVHhQd2VyIDw8IDkpOwkvKiBzZXQgVFggcG93ZXIwICovCi0JCQkJCQlSNCA9IChSRlJlZ1RhYmxlW2luZGV4XS5SNCAmICh+MHgwMDFmODdjMCkpIHwgKHBBZC0+UmZGcmVxT2Zmc2V0IDw8IDE1KSB8IChUeFB3ZXIyIDw8IDYpOwkvKiBTZXQgZnJlcSBPZmZzZXQgJiBUeFB3cjEgKi8KLQkJCQkJfQotCi0JCQkJCS8qIEJhc2VkIG9uIEJCUCBjdXJyZW50IG1vZGUgYmVmb3JlIGNoYW5naW5nIFJGIGNoYW5uZWwuICovCi0JCQkJCWlmICghYlNjYW4KLQkJCQkJICAgICYmIChwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPT0KLQkJCQkJCUJXXzQwKSkgewotCQkJCQkJUjQgfD0gMHgyMDAwMDA7Ci0JCQkJCX0KLQkJCQkJLyogVXBkYXRlIHZhcmlhYmxlcyAqLwotCQkJCQlwQWQtPkxhdGNoUmZSZWdzLkNoYW5uZWwgPSBDaGFubmVsOwotCQkJCQlwQWQtPkxhdGNoUmZSZWdzLlIxID0KLQkJCQkJICAgIFJGUmVnVGFibGVbaW5kZXhdLlIxOwotCQkJCQlwQWQtPkxhdGNoUmZSZWdzLlIyID0gUjI7Ci0JCQkJCXBBZC0+TGF0Y2hSZlJlZ3MuUjMgPSBSMzsKLQkJCQkJcEFkLT5MYXRjaFJmUmVncy5SNCA9IFI0OwotCi0JCQkJCS8qIFNldCBSRiB2YWx1ZSAxJ3Mgc2V0IFIzW2JpdDJdID0gWzBdICovCi0JCQkJCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsCi0JCQkJCQkJICAgcEFkLT5MYXRjaFJmUmVncy5SMSk7Ci0JCQkJCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsCi0JCQkJCQkJICAgcEFkLT5MYXRjaFJmUmVncy5SMik7Ci0JCQkJCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsCi0JCQkJCQkJICAgKHBBZC0+TGF0Y2hSZlJlZ3MuCi0JCQkJCQkJICAgIFIzICYgKH4weDA0KSkpOwotCQkJCQlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLAotCQkJCQkJCSAgIHBBZC0+TGF0Y2hSZlJlZ3MuUjQpOwotCi0JCQkJCVJUTVB1c2VjRGVsYXkoMjAwKTsKLQotCQkJCQkvKiBTZXQgUkYgdmFsdWUgMidzIHNldCBSM1tiaXQyXSA9IFsxXSAqLwotCQkJCQlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLAotCQkJCQkJCSAgIHBBZC0+TGF0Y2hSZlJlZ3MuUjEpOwotCQkJCQlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLAotCQkJCQkJCSAgIHBBZC0+TGF0Y2hSZlJlZ3MuUjIpOwotCQkJCQlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLAotCQkJCQkJCSAgIChwQWQtPkxhdGNoUmZSZWdzLgotCQkJCQkJCSAgICBSMyB8IDB4MDQpKTsKLQkJCQkJUlRNUF9SRl9JT19XUklURTMyKHBBZCwKLQkJCQkJCQkgICBwQWQtPkxhdGNoUmZSZWdzLlI0KTsKLQotCQkJCQlSVE1QdXNlY0RlbGF5KDIwMCk7Ci0KLQkJCQkJLyogU2V0IFJGIHZhbHVlIDMncyBzZXQgUjNbYml0Ml0gPSBbMF0gKi8KLQkJCQkJUlRNUF9SRl9JT19XUklURTMyKHBBZCwKLQkJCQkJCQkgICBwQWQtPkxhdGNoUmZSZWdzLlIxKTsKLQkJCQkJUlRNUF9SRl9JT19XUklURTMyKHBBZCwKLQkJCQkJCQkgICBwQWQtPkxhdGNoUmZSZWdzLlIyKTsKLQkJCQkJUlRNUF9SRl9JT19XUklURTMyKHBBZCwKLQkJCQkJCQkgICAocEFkLT5MYXRjaFJmUmVncy4KLQkJCQkJCQkgICAgUjMgJiAofjB4MDQpKSk7Ci0JCQkJCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsCi0JCQkJCQkJICAgcEFkLT5MYXRjaFJmUmVncy5SNCk7Ci0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0KLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJTd2l0Y2hDaGFubmVsIyVkKFJGPSVkLCBQd3IwPSVsdSwgUHdyMT0lbHUsICVkVCkgdG8gLCBSMT0weCUwOGx4LCBSMj0weCUwOGx4LCBSMz0weCUwOGx4LCBSND0weCUwOGx4XG4iLAotCQkJICBDaGFubmVsLCBwQWQtPlJmSWNUeXBlLCAoUjMgJiAweDAwMDAzZTAwKSA+PiA5LAotCQkJICAoUjQgJiAweDAwMDAwN2MwKSA+PiA2LCBwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoLAotCQkJICBwQWQtPkxhdGNoUmZSZWdzLlIxLCBwQWQtPkxhdGNoUmZSZWdzLlIyLAotCQkJICBwQWQtPkxhdGNoUmZSZWdzLlIzLCBwQWQtPkxhdGNoUmZSZWdzLlI0KSk7Ci0JfQotCi0JLyogQ2hhbmdlIEJCUCBzZXR0aW5nIGR1cmluZyBzaXd0Y2ggZnJvbSBhLT5nLCBnLT5hICovCi0JaWYgKENoYW5uZWwgPD0gMTQpIHsKLQkJdW5zaWduZWQgbG9uZyBUeFBpbkNmZyA9IDB4MDAwNTBGMEE7CS8qR2FyeSAyMDA3LzA4LzA5IDB4MDUwQTBBICovCi0KLQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjIsCi0JCQkJCSAgICAgKDB4MzcgLSBHRVRfTE5BX0dBSU4ocEFkKSkpOwotCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2MywKLQkJCQkJICAgICAoMHgzNyAtIEdFVF9MTkFfR0FJTihwQWQpKSk7Ci0JCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY0LAotCQkJCQkgICAgICgweDM3IC0gR0VUX0xOQV9HQUlOKHBBZCkpKTsKLQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SODYsIDApOwkvKigweDQ0IC0gR0VUX0xOQV9HQUlOKHBBZCkpKTsgICAgLy8gQWNjb3JkaW5nIHRoZSBSb3J5J3Mgc3VnZ2VzdGlvbiB0byBzb2x2ZSB0aGUgbWlkZGxlIHJhbmdlIGlzc3VlLiAqLwotCQkvKlJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjgyLCAweDYyKTsgKi8KLQotCQkvKiBSeCBIaWdoIHBvd2VyIFZHQSBvZmZzZXQgZm9yIExOQSBzZWxlY3QgKi8KLQkJaWYgKHBBZC0+TmljQ29uZmlnMi5maWVsZC5FeHRlcm5hbExOQUZvckcpIHsKLQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjgyLCAweDYyKTsKLQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjc1LCAweDQ2KTsKLQkJfSBlbHNlIHsKLQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjgyLCAweDg0KTsKLQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjc1LCAweDUwKTsKLQkJfQotCi0JCS8qIDVHIGJhbmQgc2VsZWN0aW9uIFBJTiwgYml0MSBhbmQgYml0MiBhcmUgY29tcGxlbWVudCAqLwotCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0JBTkRfQ0ZHLCAmVmFsdWUpOwotCQlWYWx1ZSAmPSAofjB4Nik7Ci0JCVZhbHVlIHw9ICgweDA0KTsKLQkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfQkFORF9DRkcsIFZhbHVlKTsKLQotCQkvKiBUdXJuIG9mZiB1bnVzZWQgUEEgb3IgTE5BIHdoZW4gb25seSAxVCBvciAxUiAqLwotCQlpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCA9PSAxKSB7Ci0JCQlUeFBpbkNmZyAmPSAweEZGRkZGRkYzOwotCQl9Ci0JCWlmIChwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID09IDEpIHsKLQkJCVR4UGluQ2ZnICY9IDB4RkZGRkYzRkY7Ci0JCX0KLQotCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9QSU5fQ0ZHLCBUeFBpbkNmZyk7Ci0KLSNpZiBkZWZpbmVkKFJUMzA5MCkgfHwgZGVmaW5lZChSVDMzOTApCi0JCS8qIFBDSWUgUEhZIFRyYW5zbWl0IGF0dGVudWF0aW9uIGFkanVzdG1lbnQgKi8KLQkJaWYgKElTX1JUMzA5MEEocEFkKSB8fCBJU19SVDMzOTAocEFkKSkgewotCQkJVFhfQVRURU5VQVRJT05fQ1RSTF9TVFJVQyBUeEF0dGVudWF0aW9uQ3RybCA9IHsKLQkJCS53b3JkID0gMH07Ci0KLQkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgUENJRV9QSFlfVFhfQVRURU5VQVRJT05fQ1RSTCwKLQkJCQkgICAgICAgJlR4QXR0ZW51YXRpb25DdHJsLndvcmQpOwotCi0JCQlpZiAoQ2hhbm5lbCA9PSAxNCkJLyogQ2hhbm5lbCAjMTQgKi8KLQkJCXsKLQkJCQlUeEF0dGVudWF0aW9uQ3RybC5maWVsZC5QQ0lFX1BIWV9UWF9BVFRFTl9FTiA9IDE7CS8qIEVuYWJsZSBQQ0llIFBIWSBUeCBhdHRlbnVhdGlvbiAqLwotCQkJCVR4QXR0ZW51YXRpb25DdHJsLmZpZWxkLlBDSUVfUEhZX1RYX0FUVEVOX1ZBTFVFID0gNDsJLyogOS8xNiBmdWxsIGRyaXZlIGxldmVsICovCi0JCQl9IGVsc2UJLyogQ2hhbm5lbCAjMX4jMTMgKi8KLQkJCXsKLQkJCQlUeEF0dGVudWF0aW9uQ3RybC5maWVsZC5QQ0lFX1BIWV9UWF9BVFRFTl9FTiA9IDA7CS8qIERpc2FibGUgUENJZSBQSFkgVHggYXR0ZW51YXRpb24gKi8KLQkJCQlUeEF0dGVudWF0aW9uQ3RybC5maWVsZC5QQ0lFX1BIWV9UWF9BVFRFTl9WQUxVRSA9IDA7CS8qIG4vYSAqLwotCQkJfQotCi0JCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBQQ0lFX1BIWV9UWF9BVFRFTlVBVElPTl9DVFJMLAotCQkJCQlUeEF0dGVudWF0aW9uQ3RybC53b3JkKTsKLQkJfQotI2VuZGlmCi0JfSBlbHNlIHsKLQkJdW5zaWduZWQgbG9uZyBUeFBpbkNmZyA9IDB4MDAwNTBGMDU7CS8qR2FyeSAyMDA3LzgvOSAweDA1MDUwNSAqLwotCi0JCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjYyLAotCQkJCQkgICAgICgweDM3IC0gR0VUX0xOQV9HQUlOKHBBZCkpKTsKLQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjMsCi0JCQkJCSAgICAgKDB4MzcgLSBHRVRfTE5BX0dBSU4ocEFkKSkpOwotCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2NCwKLQkJCQkJICAgICAoMHgzNyAtIEdFVF9MTkFfR0FJTihwQWQpKSk7Ci0JCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjg2LCAwKTsJLyooMHg0NCAtIEdFVF9MTkFfR0FJTihwQWQpKSk7ICAgLy8gQWNjb3JkaW5nIHRoZSBSb3J5J3Mgc3VnZ2VzdGlvbiB0byBzb2x2ZSB0aGUgbWlkZGxlIHJhbmdlIGlzc3VlLiAqLwotCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I4MiwgMHhGMik7Ci0KLQkJLyogUnggSGlnaCBwb3dlciBWR0Egb2Zmc2V0IGZvciBMTkEgc2VsZWN0ICovCi0JCWlmIChwQWQtPk5pY0NvbmZpZzIuZmllbGQuRXh0ZXJuYWxMTkFGb3JBKSB7Ci0JCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3NSwgMHg0Nik7Ci0JCX0gZWxzZSB7Ci0JCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3NSwgMHg1MCk7Ci0JCX0KLQotCQkvKiA1RyBiYW5kIHNlbGVjdGlvbiBQSU4sIGJpdDEgYW5kIGJpdDIgYXJlIGNvbXBsZW1lbnQgKi8KLQkJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9CQU5EX0NGRywgJlZhbHVlKTsKLQkJVmFsdWUgJj0gKH4weDYpOwotCQlWYWx1ZSB8PSAoMHgwMik7Ci0JCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX0JBTkRfQ0ZHLCBWYWx1ZSk7Ci0KLQkJLyogVHVybiBvZmYgdW51c2VkIFBBIG9yIExOQSB3aGVuIG9ubHkgMVQgb3IgMVIgKi8KLQkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGggPT0gMSkgewotCQkJVHhQaW5DZmcgJj0gMHhGRkZGRkZGMzsKLQkJfQotCQlpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA9PSAxKSB7Ci0JCQlUeFBpbkNmZyAmPSAweEZGRkZGM0ZGOwotCQl9Ci0KLQkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfUElOX0NGRywgVHhQaW5DZmcpOwotCi0JfQotCi0JLyogUjY2IHNob3VsZCBiZSBzZXQgYWNjb3JkaW5nIHRvIENoYW5uZWwgYW5kIHVzZSAyME1IeiB3aGVuIHNjYW5uaW5nICovCi0JLypSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2NiwgKDB4MkUgKyBHRVRfTE5BX0dBSU4ocEFkKSkpOyAqLwotCWlmIChiU2NhbikKLQkJUlRNUFNldEFHQ0luaXRWYWx1ZShwQWQsIEJXXzIwKTsKLQllbHNlCi0JCVJUTVBTZXRBR0NJbml0VmFsdWUocEFkLCBwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcpOwotCi0JLyogKi8KLQkvKiBPbiAxMUEsIFdlIHNob3VsZCBkZWxheSBhbmQgd2FpdCBSRi9CQlAgdG8gYmUgc3RhYmxlICovCi0JLyogYW5kIHRoZSBhcHByb3ByaWF0ZSB0aW1lIHNob3VsZCBiZSAxMDAwIG1pY3JvIHNlY29uZHMgKi8KLQkvKiAyMDA1LzA2LzA1IC0gT24gMTFHLCBXZSBhbHNvIG5lZWQgdGhpcyBkZWxheSB0aW1lLiBPdGhlcndpc2UgaXQncyBkaWZmaWN1bHQgdG8gcGFzcyB0aGUgV0hRTC4gKi8KLQkvKiAqLwotCVJUTVB1c2VjRGVsYXkoMTAwMCk7Ci19Ci0KLXZvaWQgQXNpY1Jlc2V0QkJQQWdlbnQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCUJCUF9DU1JfQ0ZHX1NUUlVDIEJicENzcjsKLQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJSZXNldCBCQlAgQWdlbnQgYnVzeSBiaXQhXG4iKSk7Ci0JLyogU3RpbGwgbmVlZCB0byBmaW5kIHdoeSBCQlAgYWdlbnQga2VlcHMgYnVzeSwgYnV0IGluIGZhY3QsIGhhcmR3YXJlIHN0aWxsIGZ1bmN0aW9uIG9rLiBOb3cgY2xlYXIgYnVzeSBmaXJzdC4gKi8KLQlSVE1QX0lPX1JFQUQzMihwQWQsIEgyTV9CQlBfQUdFTlQsICZCYnBDc3Iud29yZCk7Ci0JQmJwQ3NyLmZpZWxkLkJ1c3kgPSAwOwotCVJUTVBfSU9fV1JJVEUzMihwQWQsIEgyTV9CQlBfQUdFTlQsIEJicENzci53b3JkKTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlUaGlzIGZ1bmN0aW9uIGlzIHJlcXVpcmVkIGZvciAyNDIxIG9ubHksIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgZHVyaW5nCi0JCXNpdGUgc3VydmV5LiBJdCdzIG9ubHkgcmVxdWlyZWQgYWZ0ZXIgTklDIGRlY2lkZWQgdG8gc3RheSBhdCBhIGNoYW5uZWwKLQkJZm9yIGEgbG9uZ2VyIHBlcmlvZC4KLQkJV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgaXQncyBhbHdheXMgYWZ0ZXIgQXNpY1N3aXRjaENoYW5uZWwoKS4KLQotCUlSUUwgPSBQQVNTSVZFX0xFVkVMCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi12b2lkIEFzaWNMb2NrQ2hhbm5lbChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHU4IENoYW5uZWwpCi17Ci19Ci0KLXZvaWQgQXNpY1JmVHVuaW5nRXhlYyh2b2lkICpTeXN0ZW1TcGVjaWZpYzEsCi0JCSAgICAgIHZvaWQgKkZ1bmN0aW9uQ29udGV4dCwKLQkJICAgICAgdm9pZCAqU3lzdGVtU3BlY2lmaWMyLCB2b2lkICpTeXN0ZW1TcGVjaWZpYzMpCi17Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJR2l2ZXMgQ0NLIFRYIHJhdGUgMiBtb3JlIGRCIFRYIHBvd2VyLgotCQlUaGlzIHJvdXRpbmUgd29ya3Mgb25seSBpbiBMSU5LIFVQIGluIElORlJBU1RSVUNUVVJFIG1vZGUuCi0KLQkJY2FsY3VsYXRlIGRlc2lyZWQgVHggcG93ZXIgaW4gUkYgUjMuVHgwfjUsCXNob3VsZCBjb25zaWRlciAtCi0JCTAuIGlmIGN1cnJlbnQgcmFkaW8gaXMgYSBub2lzeSBlbnZpcm9ubWVudCAocEFkLT5EcnNDb3VudGVycy5mTm9pc3lFbnZpcm9ubWVudCkKLQkJMS4gVHhQb3dlclBlcmNlbnRhZ2UKLQkJMi4gYXV0byBjYWxpYnJhdGlvbiBiYXNlZCBvbiBUU1NJIGZlZWRiYWNrCi0JCTMuIGV4dHJhIDIgZGIgZm9yIENDSwotCQk0LiAtMTAgZGIgdXBvbiB2ZXJ5LXNob3J0IGRpc3RhbmNlIChBdmdSU1NJID49IC00MGRiKSB0byBBUAotCi0JTk9URTogU2luY2UgdGhpcyByb3V0aW5lIHJlcXVpcmVzIHRoZSB2YWx1ZSBvZiAocEFkLT5EcnNDb3VudGVycy5mTm9pc3lFbnZpcm9ubWVudCksCi0JCWl0IHNob3VsZCBiZSBjYWxsZWQgQUZURVIgTWxtZUR5bmFtaWNUeFJhdFN3aXRjaGluZygpCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotdm9pZCBBc2ljQWRqdXN0VHhQb3dlcihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0JaW50IGksIGo7Ci0JY2hhciBEZWx0YVB3ciA9IDA7Ci0JQk9PTEVBTiBiQXV0b1R4QWdjID0gRkFMU0U7Ci0JdTggVHNzaVJlZiwgKnBUc3NpTWludXNCb3VuZGFyeSwgKnBUc3NpUGx1c0JvdW5kYXJ5LCBUeEFnY1N0ZXA7Ci0JdTggQmJwUjEgPSAwLCBCYnBSNDkgPSAwLCBpZHg7Ci0JY2hhciAqcFR4QWdjQ29tcGVuc2F0ZTsKLQl1bnNpZ25lZCBsb25nIFR4UHdyWzVdOwotCWNoYXIgVmFsdWU7Ci0JY2hhciBSc3NpID0gLTEyNzsKLQotCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpIHx8Ci0jaWZkZWYgUlRNUF9NQUNfUENJCi0JICAgIChwQWQtPmJQQ0ljbGtPZmYgPT0gVFJVRSkgfHwKLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLQkgICAgUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0lETEVfUkFESU9fT0ZGKSB8fAotCSAgICBSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MpKQotCQlyZXR1cm47Ci0KLQlSc3NpID0gUlRNUE1heFJzc2kocEFkLAotCQkJICAgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMCwKLQkJCSAgIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTEsCi0JCQkgICBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkF2Z1Jzc2kyKTsKLQotCWlmIChwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPT0gQldfNDApIHsKLQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsID4gMTQpIHsKLQkJCVR4UHdyWzBdID0gcEFkLT5UeDQwTVB3ckNmZ0FCYW5kWzBdOwotCQkJVHhQd3JbMV0gPSBwQWQtPlR4NDBNUHdyQ2ZnQUJhbmRbMV07Ci0JCQlUeFB3clsyXSA9IHBBZC0+VHg0ME1Qd3JDZmdBQmFuZFsyXTsKLQkJCVR4UHdyWzNdID0gcEFkLT5UeDQwTVB3ckNmZ0FCYW5kWzNdOwotCQkJVHhQd3JbNF0gPSBwQWQtPlR4NDBNUHdyQ2ZnQUJhbmRbNF07Ci0JCX0gZWxzZSB7Ci0JCQlUeFB3clswXSA9IHBBZC0+VHg0ME1Qd3JDZmdHQmFuZFswXTsKLQkJCVR4UHdyWzFdID0gcEFkLT5UeDQwTVB3ckNmZ0dCYW5kWzFdOwotCQkJVHhQd3JbMl0gPSBwQWQtPlR4NDBNUHdyQ2ZnR0JhbmRbMl07Ci0JCQlUeFB3clszXSA9IHBBZC0+VHg0ME1Qd3JDZmdHQmFuZFszXTsKLQkJCVR4UHdyWzRdID0gcEFkLT5UeDQwTVB3ckNmZ0dCYW5kWzRdOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPiAxNCkgewotCQkJVHhQd3JbMF0gPSBwQWQtPlR4MjBNUHdyQ2ZnQUJhbmRbMF07Ci0JCQlUeFB3clsxXSA9IHBBZC0+VHgyME1Qd3JDZmdBQmFuZFsxXTsKLQkJCVR4UHdyWzJdID0gcEFkLT5UeDIwTVB3ckNmZ0FCYW5kWzJdOwotCQkJVHhQd3JbM10gPSBwQWQtPlR4MjBNUHdyQ2ZnQUJhbmRbM107Ci0JCQlUeFB3cls0XSA9IHBBZC0+VHgyME1Qd3JDZmdBQmFuZFs0XTsKLQkJfSBlbHNlIHsKLQkJCVR4UHdyWzBdID0gcEFkLT5UeDIwTVB3ckNmZ0dCYW5kWzBdOwotCQkJVHhQd3JbMV0gPSBwQWQtPlR4MjBNUHdyQ2ZnR0JhbmRbMV07Ci0JCQlUeFB3clsyXSA9IHBBZC0+VHgyME1Qd3JDZmdHQmFuZFsyXTsKLQkJCVR4UHdyWzNdID0gcEFkLT5UeDIwTVB3ckNmZ0dCYW5kWzNdOwotCQkJVHhQd3JbNF0gPSBwQWQtPlR4MjBNUHdyQ2ZnR0JhbmRbNF07Ci0JCX0KLQl9Ci0KLQkvKiBUWCBwb3dlciBjb21wZW5zYXRpb24gZm9yIHRlbXBlcmF0dXJlIHZhcmlhdGlvbiBiYXNlZCBvbiBUU1NJLiB0cnkgZXZlcnkgNCBzZWNvbmQgKi8KLQlpZiAocEFkLT5NbG1lLk9uZVNlY1BlcmlvZGljUm91bmQgJSA0ID09IDApIHsKLQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPD0gMTQpIHsKLQkJCS8qIGJnIGNoYW5uZWwgKi8KLQkJCWJBdXRvVHhBZ2MgPSBwQWQtPmJBdXRvVHhBZ2NHOwotCQkJVHNzaVJlZiA9IHBBZC0+VHNzaVJlZkc7Ci0JCQlwVHNzaU1pbnVzQm91bmRhcnkgPSAmcEFkLT5Uc3NpTWludXNCb3VuZGFyeUdbMF07Ci0JCQlwVHNzaVBsdXNCb3VuZGFyeSA9ICZwQWQtPlRzc2lQbHVzQm91bmRhcnlHWzBdOwotCQkJVHhBZ2NTdGVwID0gcEFkLT5UeEFnY1N0ZXBHOwotCQkJcFR4QWdjQ29tcGVuc2F0ZSA9ICZwQWQtPlR4QWdjQ29tcGVuc2F0ZUc7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBhIGNoYW5uZWwgKi8KLQkJCWJBdXRvVHhBZ2MgPSBwQWQtPmJBdXRvVHhBZ2NBOwotCQkJVHNzaVJlZiA9IHBBZC0+VHNzaVJlZkE7Ci0JCQlwVHNzaU1pbnVzQm91bmRhcnkgPSAmcEFkLT5Uc3NpTWludXNCb3VuZGFyeUFbMF07Ci0JCQlwVHNzaVBsdXNCb3VuZGFyeSA9ICZwQWQtPlRzc2lQbHVzQm91bmRhcnlBWzBdOwotCQkJVHhBZ2NTdGVwID0gcEFkLT5UeEFnY1N0ZXBBOwotCQkJcFR4QWdjQ29tcGVuc2F0ZSA9ICZwQWQtPlR4QWdjQ29tcGVuc2F0ZUE7Ci0JCX0KLQotCQlpZiAoYkF1dG9UeEFnYykgewotCQkJLyogQmJwUjEgaXMgdW5zaWduZWQgY2hhciAqLwotCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I0OSwgJkJicFI0OSk7Ci0KLQkJCS8qIChwKSBUc3NpUGx1c0JvdW5kYXJ5R1swXSA9IDAgPSAobSkgVHNzaU1pbnVzQm91bmRhcnlHWzBdICovCi0JCQkvKiBjb21wZW5zYXRlOiArNCAgICAgKzMgICArMiAgICsxICAgIDAgICAtMSAgIC0yICAgLTMgICAtNCAqIHN0ZXBzICovCi0JCQkvKiBzdGVwIHZhbHVlIGlzIGRlZmluZWQgaW4gcEFkLT5UeEFnY1N0ZXBHIGZvciB0eCBwb3dlciB2YWx1ZSAqLwotCi0JCQkvKiBbNF0rMStbNF0gICBwNCAgICAgcDMgICBwMiAgIHAxICAgbzEgICBtMSAgIG0yICAgbTMgICBtNCAqLwotCQkJLyogZXg6ICAgICAgICAgMHgwMCAweDE1IDB4MjUgMHg0NSAweDg4IDB4QTAgMHhCNSAweEQwIDB4RjAKLQkJCSAgIGFib3ZlIHZhbHVlIGFyZSBleGFtaW5lZCBpbiBtYXNzIGZhY3RvcnkgcHJvZHVjdGlvbiAqLwotCQkJLyogICAgICAgICAgICAgWzRdICAgIFszXSAgWzJdICBbMV0gIFswXSAgWzFdICBbMl0gIFszXSAgWzRdICovCi0KLQkJCS8qIHBsdXMgKCspIGlzIDB4MDAgfiAweDQ1LCBtaW51cyAoLSkgaXMgMHhhMCB+IDB4ZjAgKi8KLQkJCS8qIGlmIHZhbHVlIGlzIGJldHdlZW4gcDEgfiBvMSBvciBvMSB+IHMxLCBubyBuZWVkIHRvIGFkanVzdCB0eCBwb3dlciAqLwotCQkJLyogaWYgdmFsdWUgaXMgMHhhNSwgdHggcG93ZXIgd2lsbCBiZSAtPSBUeEFnY1N0ZXAqKDItMSkgKi8KLQotCQkJaWYgKEJicFI0OSA+IHBUc3NpTWludXNCb3VuZGFyeVsxXSkgewotCQkJCS8qIFJlYWRpbmcgaXMgbGFyZ2VyIHRoYW4gdGhlIHJlZmVyZW5jZSB2YWx1ZSAqLwotCQkJCS8qIGNoZWNrIGZvciBob3cgbGFyZ2Ugd2UgbmVlZCB0byBkZWNyZWFzZSB0aGUgVHggcG93ZXIgKi8KLQkJCQlmb3IgKGlkeCA9IDE7IGlkeCA8IDU7IGlkeCsrKSB7Ci0JCQkJCWlmIChCYnBSNDkgPD0gcFRzc2lNaW51c0JvdW5kYXJ5W2lkeF0pCS8qIEZvdW5kIHRoZSByYW5nZSAqLwotCQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCS8qIFRoZSBpbmRleCBpcyB0aGUgc3RlcCB3ZSBzaG91bGQgZGVjcmVhc2UsIGlkeCA9IDAgbWVhbnMgdGhlcmUgaXMgbm90aGluZyB0byBjb21wZW5zYXRlICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSMyA+ICh1bnNpZ25lZCBsb25nKShUeEFnY1N0ZXAgKiAoaWR4LTEpKSkgKi8KLQkJCQkqcFR4QWdjQ29tcGVuc2F0ZSA9IC0oVHhBZ2NTdGVwICogKGlkeCAtIDEpKTsKLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwVHhBZ2NDb21wZW5zYXRlID0gLSgodTgpUjMpOyAqLwotCi0JCQkJRGVsdGFQd3IgKz0gKCpwVHhBZ2NDb21wZW5zYXRlKTsKLQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkJICgiLS0gVHggUG93ZXIsIEJCUCBSMT0leCwgVHNzaVJlZj0leCwgVHhBZ2NTdGVwPSV4LCBzdGVwID0gLSVkXG4iLAotCQkJCQkgIEJicFI0OSwgVHNzaVJlZiwgVHhBZ2NTdGVwLCBpZHggLSAxKSk7Ci0JCQl9IGVsc2UgaWYgKEJicFI0OSA8IHBUc3NpUGx1c0JvdW5kYXJ5WzFdKSB7Ci0JCQkJLyogUmVhZGluZyBpcyBzbWFsbGVyIHRoYW4gdGhlIHJlZmVyZW5jZSB2YWx1ZSAqLwotCQkJCS8qIGNoZWNrIGZvciBob3cgbGFyZ2Ugd2UgbmVlZCB0byBpbmNyZWFzZSB0aGUgVHggcG93ZXIgKi8KLQkJCQlmb3IgKGlkeCA9IDE7IGlkeCA8IDU7IGlkeCsrKSB7Ci0JCQkJCWlmIChCYnBSNDkgPj0gcFRzc2lQbHVzQm91bmRhcnlbaWR4XSkJLyogRm91bmQgdGhlIHJhbmdlICovCi0JCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJLyogVGhlIGluZGV4IGlzIHRoZSBzdGVwIHdlIHNob3VsZCBpbmNyZWFzZSwgaWR4ID0gMCBtZWFucyB0aGVyZSBpcyBub3RoaW5nIHRvIGNvbXBlbnNhdGUgKi8KLQkJCQkqcFR4QWdjQ29tcGVuc2F0ZSA9IFR4QWdjU3RlcCAqIChpZHggLSAxKTsKLQkJCQlEZWx0YVB3ciArPSAoKnBUeEFnY0NvbXBlbnNhdGUpOwotCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkgKCIrKyBUeCBQb3dlciwgQkJQIFIxPSV4LCBUc3NpUmVmPSV4LCBUeEFnY1N0ZXA9JXgsIHN0ZXAgPSArJWRcbiIsCi0JCQkJCSAgQmJwUjQ5LCBUc3NpUmVmLCBUeEFnY1N0ZXAsIGlkeCAtIDEpKTsKLQkJCX0gZWxzZSB7Ci0JCQkJKnBUeEFnY0NvbXBlbnNhdGUgPSAwOwotCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkgKCIgICBUeCBQb3dlciwgQkJQIFI0OT0leCwgVHNzaVJlZj0leCwgVHhBZ2NTdGVwPSV4LCBzdGVwID0gKyVkXG4iLAotCQkJCQkgIEJicFI0OSwgVHNzaVJlZiwgVHhBZ2NTdGVwLCAwKSk7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAocEFkLT5Db21tb25DZmcuQ2hhbm5lbCA8PSAxNCkgewotCQkJYkF1dG9UeEFnYyA9IHBBZC0+YkF1dG9UeEFnY0c7Ci0JCQlwVHhBZ2NDb21wZW5zYXRlID0gJnBBZC0+VHhBZ2NDb21wZW5zYXRlRzsKLQkJfSBlbHNlIHsKLQkJCWJBdXRvVHhBZ2MgPSBwQWQtPmJBdXRvVHhBZ2NBOwotCQkJcFR4QWdjQ29tcGVuc2F0ZSA9ICZwQWQtPlR4QWdjQ29tcGVuc2F0ZUE7Ci0JCX0KLQotCQlpZiAoYkF1dG9UeEFnYykKLQkJCURlbHRhUHdyICs9ICgqcFR4QWdjQ29tcGVuc2F0ZSk7Ci0JfQotCi0JUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IxLCAmQmJwUjEpOwotCUJicFIxICY9IDB4RkM7Ci0KLQkvKiBjYWxjdWxhdGUgZGVsdGEgcG93ZXIgYmFzZWQgb24gdGhlIHBlcmNlbnRhZ2Ugc3BlY2lmaWVkIGZyb20gVUkgKi8KLQkvKiBFMlBST00gc2V0dGluZyBpcyBjYWxpYnJhdGVkIGZvciBtYXhpbXVtIFRYIHBvd2VyIChpLmUuIDEwMCUpICovCi0JLyogV2UgbG93ZXIgVFggcG93ZXIgaGVyZSBhY2NvcmRpbmcgdG8gdGhlIHBlcmNlbnRhZ2Ugc3BlY2lmaWVkIGZyb20gVUkgKi8KLQlpZiAocEFkLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UgPT0gMHhmZmZmZmZmZikJLyogQVVUTyBUWCBQT1dFUiBjb250cm9sICovCi0JewotCQl7Ci0JCQkvKiB0byBwYXRjaCBoaWdoIHBvd2VyIGlzc3VlIHdpdGggc29tZSBBUHMsIGxpa2UgQmVsa2luIE4xLiAqLwotCQkJaWYgKFJzc2kgPiAtMzUpIHsKLQkJCQlCYnBSMSB8PSAweDAyOwkvKiBEZWx0YVB3ciAtPSAxMjsgKi8KLQkJCX0gZWxzZSBpZiAoUnNzaSA+IC00MCkgewotCQkJCUJicFIxIHw9IDB4MDE7CS8qIERlbHRhUHdyIC09IDY7ICovCi0JCQl9IGVsc2U7Ci0JCX0KLQl9IGVsc2UgaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID4gOTApCS8qIDkxIH4gMTAwJSAmIEFVVE8sIHRyZWF0IGFzIDEwMCUgaW4gdGVybXMgb2YgbVcgKi8KLQkJOwotCWVsc2UgaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID4gNjApCS8qIDYxIH4gOTAlLCB0cmVhdCBhcyA3NSUgaW4gdGVybXMgb2YgbVcgICAgICAgICAgICAgICAvLyBEZWx0YVB3ciAtPSAxOyAqLwotCXsKLQkJRGVsdGFQd3IgLT0gMTsKLQl9IGVsc2UgaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID4gMzApCS8qIDMxIH4gNjAlLCB0cmVhdCBhcyA1MCUgaW4gdGVybXMgb2YgbVcgICAgICAgICAgICAgICAvLyBEZWx0YVB3ciAtPSAzOyAqLwotCXsKLQkJRGVsdGFQd3IgLT0gMzsKLQl9IGVsc2UgaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID4gMTUpCS8qIDE2IH4gMzAlLCB0cmVhdCBhcyAyNSUgaW4gdGVybXMgb2YgbVcgICAgICAgICAgICAgICAvLyBEZWx0YVB3ciAtPSA2OyAqLwotCXsKLQkJQmJwUjEgfD0gMHgwMTsKLQl9IGVsc2UgaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID4gOSkJLyogMTAgfiAxNSUsIHRyZWF0IGFzIDEyLjUlIGluIHRlcm1zIG9mIG1XICAgICAgICAgICAgIC8vIERlbHRhUHdyIC09IDk7ICovCi0JewotCQlCYnBSMSB8PSAweDAxOwotCQlEZWx0YVB3ciAtPSAzOwotCX0gZWxzZQkJCS8qIDAgfiA5ICUsIHRyZWF0IGFzIE1JTih+MyUpIGluIHRlcm1zIG9mIG1XICAgICAgICAgICAgIC8vIERlbHRhUHdyIC09IDEyOyAqLwotCXsKLQkJQmJwUjEgfD0gMHgwMjsKLQl9Ci0KLQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IxLCBCYnBSMSk7Ci0KLQkvKiByZXNldCBkaWZmZXJlbnQgbmV3IHR4IHBvd2VyIGZvciBkaWZmZXJlbnQgVFggcmF0ZSAqLwotCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKLQkJaWYgKFR4UHdyW2ldICE9IDB4ZmZmZmZmZmYpIHsKLQkJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspIHsKLQkJCQlWYWx1ZSA9IChjaGFyKSgoVHhQd3JbaV0gPj4gaiAqIDQpICYgMHgwRik7CS8qIDAgfiAxNSAqLwotCi0JCQkJaWYgKChWYWx1ZSArIERlbHRhUHdyKSA8IDApIHsKLQkJCQkJVmFsdWUgPSAwOwkvKiBtaW4gKi8KLQkJCQl9IGVsc2UgaWYgKChWYWx1ZSArIERlbHRhUHdyKSA+IDB4RikgewotCQkJCQlWYWx1ZSA9IDB4RjsJLyogbWF4ICovCi0JCQkJfSBlbHNlIHsKLQkJCQkJVmFsdWUgKz0gRGVsdGFQd3I7CS8qIHRlbXBlcmF0dXJlIGNvbXBlbnNhdGlvbiAqLwotCQkJCX0KLQotCQkJCS8qIGZpbGwgbmV3IHZhbHVlIHRvIENTUiBvZmZzZXQgKi8KLQkJCQlUeFB3cltpXSA9Ci0JCQkJICAgIChUeFB3cltpXSAmIH4oMHgwMDAwMDAwRiA8PCBqICogNCkpIHwgKFZhbHVlCi0JCQkJCQkJCQkgICA8PCBqCi0JCQkJCQkJCQkgICAqIDQpOwotCQkJfQotCi0JCQkvKiB3cml0ZSB0eCBwb3dlciB2YWx1ZSB0byBDU1IgKi8KLQkJCS8qIFRYX1BXUl9DRkdfMCAoOCB0eCByYXRlKSBmb3IgVFggcG93ZXIgZm9yIE9GRE0gMTJNLzE4TQotCQkJICAgVFggcG93ZXIgZm9yIE9GRE0gNk0vOU0KLQkJCSAgIFRYIHBvd2VyIGZvciBDQ0s1LjVNLzExTQotCQkJICAgVFggcG93ZXIgZm9yIENDSzFNLzJNICovCi0JCQkvKiBUWF9QV1JfQ0ZHXzEgfiBUWF9QV1JfQ0ZHXzQgKi8KLQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX1BXUl9DRkdfMCArIGkgKiA0LCBUeFB3cltpXSk7Ci0JCX0KLQl9Ci0KLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlwdXQgUEhZIHRvIHNsZWVwIGhlcmUsIGFuZCBzZXQgbmV4dCB3YWtldXAgdGltZXIuIFBIWSBkb2Vzbid0IG5vdCB3YWtldXAKLQkJYXV0b21hdGljYWxseS4gSW5zdGVhZCwgTUNVIHdpbGwgaXNzdWUgYSBUd2FrZVVwSW50ZXJydXB0IHRvIGhvc3QgYWZ0ZXIKLQkJdGhlIHdha2V1cCB0aW1lciB0aW1lb3V0LiBEcml2ZXIgaGFzIHRvIGlzc3VlIGEgc2VwYXJhdGUgY29tbWFuZCB0byB3YWtlCi0JCVBIWSB1cC4KLQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotdm9pZCBBc2ljU2xlZXBUaGVuQXV0b1dha2V1cChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgIHUxNiBUYnR0TnVtVG9OZXh0V2FrZVVwKQotewotCVJUTVBfU1RBX1NMRUVQX1RIRU5fQVVUT19XQUtFVVAocEFkLCBUYnR0TnVtVG9OZXh0V2FrZVVwKTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlBc2ljRm9yY2VXYWtldXAoKSBpcyB1c2VkIHdoZW5ldmVyIG1hbnVhbCB3YWtldXAgaXMgcmVxdWlyZWQKLQkJQXNpY0ZvcmNlU2xlZXAoKSBzaG91bGQgb25seSBiZSB1c2VkIHdoZW4gbm90IGluIElORlJBIEJTUy4gV2hlbgotCQlpbiBJTkZSQSBCU1MsIHdlIHNob3VsZCB1c2UgQXNpY1NsZWVwVGhlbkF1dG9XYWtldXAoKSBpbnN0ZWFkLgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgQXNpY0ZvcmNlU2xlZXAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCi19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJQXNpY0ZvcmNlV2FrZXVwKCkgaXMgdXNlZCB3aGVuZXZlciBUd2FrZXVwIHRpbWVyIChzZXQgdmlhIEFzaWNTbGVlcFRoZW5BdXRvV2FrZXVwKQotCQlleHBpcmVkLgotCi0JSVJRTCA9IFBBU1NJVkVfTEVWRUwKLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi12b2lkIEFzaWNGb3JjZVdha2V1cChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIElOIEJPT0xFQU4gYkZyb21UeCkKLXsKLQlEQkdQUklOVChSVF9ERUJVR19JTkZPLCAoIi0tPiBBc2ljRm9yY2VXYWtldXAgXG4iKSk7Ci0JUlRNUF9TVEFfRk9SQ0VfV0FLRVVQKHBBZCwgYkZyb21UeCk7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJU2V0IE15IEJTU0lECi0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgQXNpY1NldEJzc2lkKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggKnBCc3NpZCkKLXsKLQl1bnNpZ25lZCBsb25nIEFkZHI0OwotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCI9PT09PT09PT09PT09PT4gQXNpY1NldEJzc2lkICV4OiV4OiV4OiV4OiV4OiV4XG4iLCBwQnNzaWRbMF0sCi0JCSAgcEJzc2lkWzFdLCBwQnNzaWRbMl0sIHBCc3NpZFszXSwgcEJzc2lkWzRdLCBwQnNzaWRbNV0pKTsKLQotCUFkZHI0ID0gKHVuc2lnbmVkIGxvbmcpKHBCc3NpZFswXSkgfAotCSAgICAodW5zaWduZWQgbG9uZykocEJzc2lkWzFdIDw8IDgpIHwKLQkgICAgKHVuc2lnbmVkIGxvbmcpKHBCc3NpZFsyXSA8PCAxNikgfCAodW5zaWduZWQgbG9uZykocEJzc2lkWzNdIDw8IDI0KTsKLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfQlNTSURfRFcwLCBBZGRyNCk7Ci0KLQlBZGRyNCA9IDA7Ci0JLyogYWx3YXlzIG9uZSBCU1NJRCBpbiBTVEEgbW9kZSAqLwotCUFkZHI0ID0gKHVuc2lnbmVkIGxvbmcpKHBCc3NpZFs0XSkgfCAodW5zaWduZWQgbG9uZykocEJzc2lkWzVdIDw8IDgpOwotCi0JUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX0JTU0lEX0RXMSwgQWRkcjQpOwotfQotCi12b2lkIEFzaWNTZXRNY2FzdFdDKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFtNQ0FTVF9XQ0lEXTsKLQl1MTYgb2Zmc2V0OwotCi0JcEVudHJ5LT5Tc3QgPSBTU1RfQVNTT0M7Ci0JcEVudHJ5LT5BaWQgPSBNQ0FTVF9XQ0lEOwkvKiBTb2Z0YXAgc3VwcG9ydHMgMSBCU1NJRCBhbmQgdXNlIFdDSUQ9MCBhcyBtdWx0aWNhc3QgV2NpZCBpbmRleCAqLwotCXBFbnRyeS0+UHNNb2RlID0gUFdSX0FDVElWRTsKLQlwRW50cnktPkN1cnJUeFJhdGUgPSBwQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZTsKLQlvZmZzZXQgPSBNQUNfV0NJRF9CQVNFICsgQlNTME1jYXN0X1dDSUQgKiBIV19XQ0lEX0VOVFJZX1NJWkU7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotdm9pZCBBc2ljRGVsV2NpZFRhYihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHU4IFdjaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBBZGRyMCA9IDB4MCwgQWRkcjEgPSAweDA7Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQ7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBc2ljRGVsV2NpZFRhYj09PldjaWQgPSAweCV4XG4iLCBXY2lkKSk7Ci0Jb2Zmc2V0ID0gTUFDX1dDSURfQkFTRSArIFdjaWQgKiBIV19XQ0lEX0VOVFJZX1NJWkU7Ci0JUlRNUF9JT19XUklURTMyKHBBZCwgb2Zmc2V0LCBBZGRyMCk7Ci0Jb2Zmc2V0ICs9IDQ7Ci0JUlRNUF9JT19XUklURTMyKHBBZCwgb2Zmc2V0LCBBZGRyMSk7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotdm9pZCBBc2ljRW5hYmxlUkRHKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlUWF9MSU5LX0NGR19TVFJVQyBUeExpbmtDZmc7Ci0JdTMyIERhdGEgPSAwOwotCi0JUlRNUF9JT19SRUFEMzIocEFkLCBUWF9MSU5LX0NGRywgJlR4TGlua0NmZy53b3JkKTsKLQlUeExpbmtDZmcuZmllbGQuVHhSREdFbiA9IDE7Ci0JUlRNUF9JT19XUklURTMyKHBBZCwgVFhfTElOS19DRkcsIFR4TGlua0NmZy53b3JkKTsKLQotCVJUTVBfSU9fUkVBRDMyKHBBZCwgRURDQV9BQzBfQ0ZHLCAmRGF0YSk7Ci0JRGF0YSAmPSAweEZGRkZGRjAwOwotCURhdGEgfD0gMHg4MDsKLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBFRENBX0FDMF9DRkcsIERhdGEpOwotCi0JLypPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19BR0dSRUdBVElPTl9JTlVTRUQpOyAqLwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgQXNpY0Rpc2FibGVSREcoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCVRYX0xJTktfQ0ZHX1NUUlVDIFR4TGlua0NmZzsKLQl1MzIgRGF0YSA9IDA7Ci0KLQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0xJTktfQ0ZHLCAmVHhMaW5rQ2ZnLndvcmQpOwotCVR4TGlua0NmZy5maWVsZC5UeFJER0VuID0gMDsKLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9MSU5LX0NGRywgVHhMaW5rQ2ZnLndvcmQpOwotCi0JUlRNUF9JT19SRUFEMzIocEFkLCBFRENBX0FDMF9DRkcsICZEYXRhKTsKLQotCURhdGEgJj0gMHhGRkZGRkYwMDsKLQkvKkRhdGEgIHw9IDB4MjA7ICovCi0jaWZuZGVmIFdJRklfVEVTVAotCS8qaWYgKCBwQWQtPkNvbW1vbkNmZy5iRW5hYmxlVHhCdXJzdCApICovCi0JLyogICAgICBEYXRhIHw9IDB4NjA7IC8vIGZvciBwZXJmb3JtYW5jZSBpc3N1ZSBub3Qgc2V0IHRoZSBUWE9QIHRvIDAgKi8KLSNlbmRpZgotCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfRFlOQU1JQ19CRV9UWE9QX0FDVElWRSkKLQkgICAgJiYgKHBBZC0+TWFjVGFiLmZBbnlTdGF0aW9uTUlNT1BTRHluYW1pYyA9PSBGQUxTRSkKLQkgICAgKSB7Ci0JCS8qIEZvciBDV0MgdGVzdCwgY2hhbmdlIHR4b3AgZnJvbSAweDMwIHRvIDB4MjAgaW4gVHhCdXJzdCBtb2RlICovCi0JCWlmIChwQWQtPkNvbW1vbkNmZy5iRW5hYmxlVHhCdXJzdCkKLQkJCURhdGEgfD0gMHgyMDsKLQl9Ci0JUlRNUF9JT19XUklURTMyKHBBZCwgRURDQV9BQzBfQ0ZHLCBEYXRhKTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCi0JSVJRTCA9IFBBU1NJVkVfTEVWRUwKLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgQXNpY0Rpc2FibGVTeW5jKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlCQ05fVElNRV9DRkdfU1RSVUMgY3NyOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0tPkRpc2FibGUgVFNGIHN5bmNocm9uaXphdGlvblxuIikpOwotCi0JLyogMjAwMy0xMi0yMCBkaXNhYmxlIFRTRiBhbmQgVEJUVCB3aGlsZSBOSUMgaW4gcG93ZXItc2F2aW5nIGhhdmUgc2lkZSBlZmZlY3QgKi8KLQkvKiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgTklDIHdpbGwgbmV2ZXIgd2FrZXMgdXAgYmVjYXVzZSBUU0Ygc3RvcHMgYW5kIG5vIG1vcmUgKi8KLQkvKiAgICAgICAgICAgICAgICAgICAgICAgIFRCVFQgaW50ZXJydXB0cyAqLwotCXBBZC0+VGJ0dFRpY2tDb3VudCA9IDA7Ci0JUlRNUF9JT19SRUFEMzIocEFkLCBCQ05fVElNRV9DRkcsICZjc3Iud29yZCk7Ci0JY3NyLmZpZWxkLmJCZWFjb25HZW4gPSAwOwotCWNzci5maWVsZC5iVEJUVEVuYWJsZSA9IDA7Ci0JY3NyLmZpZWxkLlRzZlN5bmNNb2RlID0gMDsKLQljc3IuZmllbGQuYlRzZlRpY2tpbmcgPSAwOwotCVJUTVBfSU9fV1JJVEUzMihwQWQsIEJDTl9USU1FX0NGRywgY3NyLndvcmQpOwotCi19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotdm9pZCBBc2ljRW5hYmxlQnNzU3luYyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0JQkNOX1RJTUVfQ0ZHX1NUUlVDIGNzcjsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tLT5Bc2ljRW5hYmxlQnNzU3luYyhJTkZSQSBtb2RlKVxuIikpOwotCi0JUlRNUF9JT19SRUFEMzIocEFkLCBCQ05fVElNRV9DRkcsICZjc3Iud29yZCk7Ci0vKiAgICAgIFJUTVBfSU9fV1JJVEUzMihwQWQsIEJDTl9USU1FX0NGRywgMHgwMDAwMDAwMCk7ICovCi0JewotCQljc3IuZmllbGQuQmVhY29uSW50ZXJ2YWwgPSBwQWQtPkNvbW1vbkNmZy5CZWFjb25QZXJpb2QgPDwgNDsJLyogQVNJQyByZWdpc3RlciBpbiB1bml0cyBvZiAxLzE2IFRVICovCi0JCWNzci5maWVsZC5iVHNmVGlja2luZyA9IDE7Ci0JCWNzci5maWVsZC5Uc2ZTeW5jTW9kZSA9IDE7CS8qIHN5bmMgVFNGIGluIElORlJBU1RSVUNUVVJFIG1vZGUgKi8KLQkJY3NyLmZpZWxkLmJCZWFjb25HZW4gPSAwOwkvKiBkbyBOT1QgZ2VuZXJhdGUgQkVBQ09OICovCi0JCWNzci5maWVsZC5iVEJUVEVuYWJsZSA9IDE7Ci0JfQotCVJUTVBfSU9fV1JJVEUzMihwQWQsIEJDTl9USU1FX0NGRywgY3NyLndvcmQpOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JTm90ZToKLQkJQkVBQ09OIGZyYW1lIGluIHNoYXJlZCBtZW1vcnkgc2hvdWxkIGJlIGJ1aWx0IG9rIGJlZm9yZSB0aGlzIHJvdXRpbmUKLQkJY2FuIGJlIGNhbGxlZC4gT3RoZXJ3aXNlLCBhIGdhcmJhZ2UgZnJhbWUgbWF5YmUgdHJhbnNtaXR0ZWQgb3V0IGV2ZXJ5Ci0JCUJlYWNvbiBwZXJpb2QuCi0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgQXNpY0VuYWJsZUlic3NTeW5jKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlCQ05fVElNRV9DRkdfU1RSVUMgY3NyOTsKLQl1OCAqcHRyOwotCXUzMiBpOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIi0tLT5Bc2ljRW5hYmxlSWJzc1N5bmMoQURIT0MgbW9kZS4gTVBEVXRvdGFsQnl0ZUNvdW50ID0gJWQpXG4iLAotCQkgIHBBZC0+QmVhY29uVHhXSS5NUERVdG90YWxCeXRlQ291bnQpKTsKLQotCVJUTVBfSU9fUkVBRDMyKHBBZCwgQkNOX1RJTUVfQ0ZHLCAmY3NyOS53b3JkKTsKLQljc3I5LmZpZWxkLmJCZWFjb25HZW4gPSAwOwotCWNzcjkuZmllbGQuYlRCVFRFbmFibGUgPSAwOwotCWNzcjkuZmllbGQuYlRzZlRpY2tpbmcgPSAwOwotCVJUTVBfSU9fV1JJVEUzMihwQWQsIEJDTl9USU1FX0NGRywgY3NyOS53b3JkKTsKLQotI2lmZGVmIFJUTVBfTUFDX1BDSQotCS8qIG1vdmUgQkVBQ09OIFRYRCBhbmQgZnJhbWUgY29udGVudCB0byBvbi1jaGlwIG1lbW9yeSAqLwotCXB0ciA9ICh1OCAqKSYgcEFkLT5CZWFjb25UeFdJOwotCWZvciAoaSA9IDA7IGkgPCBUWFdJX1NJWkU7IGkgKz0gNCkJLyogMTYtYnl0ZSBUWFdJIGZpZWxkICovCi0JewotCQl1MzIgbG9uZ3B0ciA9Ci0JCSAgICAqcHRyICsgKCoocHRyICsgMSkgPDwgOCkgKyAoKihwdHIgKyAyKSA8PCAxNikgKwotCQkgICAgKCoocHRyICsgMykgPDwgMjQpOwotCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBIV19CRUFDT05fQkFTRTAgKyBpLCBsb25ncHRyKTsKLQkJcHRyICs9IDQ7Ci0JfQotCi0JLyogc3RhcnQgcmlnaHQgYWZ0ZXIgdGhlIDE2LWJ5dGUgVFhXSSBmaWVsZCAqLwotCXB0ciA9IHBBZC0+QmVhY29uQnVmOwotCWZvciAoaSA9IDA7IGkgPCBwQWQtPkJlYWNvblR4V0kuTVBEVXRvdGFsQnl0ZUNvdW50OyBpICs9IDQpIHsKLQkJdTMyIGxvbmdwdHIgPQotCQkgICAgKnB0ciArICgqKHB0ciArIDEpIDw8IDgpICsgKCoocHRyICsgMikgPDwgMTYpICsKLQkJICAgICgqKHB0ciArIDMpIDw8IDI0KTsKLQkJUlRNUF9JT19XUklURTMyKHBBZCwgSFdfQkVBQ09OX0JBU0UwICsgVFhXSV9TSVpFICsgaSwgbG9uZ3B0cik7Ci0JCXB0ciArPSA0OwotCX0KLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLSNpZmRlZiBSVE1QX01BQ19VU0IKLQkvKiBtb3ZlIEJFQUNPTiBUWEQgYW5kIGZyYW1lIGNvbnRlbnQgdG8gb24tY2hpcCBtZW1vcnkgKi8KLQlwdHIgPSAodTggKikmIHBBZC0+QmVhY29uVHhXSTsKLQlmb3IgKGkgPSAwOyBpIDwgVFhXSV9TSVpFOyBpICs9IDIpCS8qIDE2LWJ5dGUgVFhXSSBmaWVsZCAqLwotCXsKLQkJLyp1MzIgbG9uZ3B0ciA9ICAqcHRyICsgKCoocHRyKzEpPDw4KSArICgqKHB0cisyKTw8MTYpICsgKCoocHRyKzMpPDwyNCk7ICovCi0JCS8qUlRNUF9JT19XUklURTMyKHBBZCwgSFdfQkVBQ09OX0JBU0UwICsgaSwgbG9uZ3B0cik7ICovCi0JCVJUVVNCTXVsdGlXcml0ZShwQWQsIEhXX0JFQUNPTl9CQVNFMCArIGksIHB0ciwgMik7Ci0JCXB0ciArPSAyOwotCX0KLQotCS8qIHN0YXJ0IHJpZ2h0IGFmdGVyIHRoZSAxNi1ieXRlIFRYV0kgZmllbGQgKi8KLQlwdHIgPSBwQWQtPkJlYWNvbkJ1ZjsKLQlmb3IgKGkgPSAwOyBpIDwgcEFkLT5CZWFjb25UeFdJLk1QRFV0b3RhbEJ5dGVDb3VudDsgaSArPSAyKSB7Ci0JCS8qdTMyIGxvbmdwdHIgPSAgKnB0ciArICgqKHB0cisxKTw8OCkgKyAoKihwdHIrMik8PDE2KSArICgqKHB0ciszKTw8MjQpOyAqLwotCQkvKlJUTVBfSU9fV1JJVEUzMihwQWQsIEhXX0JFQUNPTl9CQVNFMCArIFRYV0lfU0laRSArIGksIGxvbmdwdHIpOyAqLwotCQlSVFVTQk11bHRpV3JpdGUocEFkLCBIV19CRUFDT05fQkFTRTAgKyBUWFdJX1NJWkUgKyBpLCBwdHIsIDIpOwotCQlwdHIgKz0gMjsKLQl9Ci0jZW5kaWYgLyogUlRNUF9NQUNfVVNCIC8vICovCi0KLQkvKiAqLwotCS8qIEZvciBXaS1GaSBmYWlseSBnZW5lcmF0ZWQgYmVhY29ucyBiZXR3ZWVuIHBhcnRpY2lwYXRpbmcgc3RhdGlvbnMuICovCi0JLyogU2V0IFRCVFQgcGhhc2UgYWRhcHRpdmUgYWRqdXN0bWVudCBzdGVwIHRvIDh1cyAoZGVmYXVsdCAxNnVzKSAqLwotCS8qIGRvbid0IGNoYW5nZSBzZXR0aW5ncyAyMDA2LTUtIGJ5IEplcnJ5ICovCi0JLypSVE1QX0lPX1dSSVRFMzIocEFkLCBUQlRUX1NZTkNfQ0ZHLCAweDAwMDAxMDEwKTsgKi8KLQotCS8qIHN0YXJ0IHNlbmRpbmcgQkVBQ09OICovCi0JY3NyOS5maWVsZC5CZWFjb25JbnRlcnZhbCA9IHBBZC0+Q29tbW9uQ2ZnLkJlYWNvblBlcmlvZCA8PCA0OwkvKiBBU0lDIHJlZ2lzdGVyIGluIHVuaXRzIG9mIDEvMTYgVFUgKi8KLQljc3I5LmZpZWxkLmJUc2ZUaWNraW5nID0gMTsKLQljc3I5LmZpZWxkLlRzZlN5bmNNb2RlID0gMjsJLyogc3luYyBUU0YgaW4gSUJTUyBtb2RlICovCi0JY3NyOS5maWVsZC5iVEJUVEVuYWJsZSA9IDE7Ci0JY3NyOS5maWVsZC5iQmVhY29uR2VuID0gMTsKLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBCQ05fVElNRV9DRkcsIGNzcjkud29yZCk7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQotCUlSUUwgPSBQQVNTSVZFX0xFVkVMCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi12b2lkIEFzaWNTZXRFZGNhUGFybShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9lZGNhX3Bhcm0gKnBFZGNhUGFybSkKLXsKLQlFRENBX0FDX0NGR19TVFJVQyBBYzBDZmcsIEFjMUNmZywgQWMyQ2ZnLCBBYzNDZmc7Ci0JQUNfVFhPUF9DU1IwX1NUUlVDIGNzcjA7Ci0JQUNfVFhPUF9DU1IxX1NUUlVDIGNzcjE7Ci0JQUlGU05fQ1NSX1NUUlVDIEFpZnNuQ3NyOwotCUNXTUlOX0NTUl9TVFJVQyBDd21pbkNzcjsKLQlDV01BWF9DU1JfU1RSVUMgQ3dtYXhDc3I7Ci0JaW50IGk7Ci0KLQlBYzBDZmcud29yZCA9IDA7Ci0JQWMxQ2ZnLndvcmQgPSAwOwotCUFjMkNmZy53b3JkID0gMDsKLQlBYzNDZmcud29yZCA9IDA7Ci0JaWYgKChwRWRjYVBhcm0gPT0gTlVMTCkgfHwgKHBFZGNhUGFybS0+YlZhbGlkID09IEZBTFNFKSkgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBc2ljU2V0RWRjYVBhcm1cbiIpKTsKLQkJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfV01NX0lOVVNFRCk7Ci0JCWZvciAoaSA9IDA7IGkgPCBNQVhfTEVOX09GX01BQ19UQUJMRTsgaSsrKSB7Ci0JCQlpZiAocEFkLT5NYWNUYWIuQ29udGVudFtpXS5WYWxpZEFzQ0xJCi0JCQkgICAgfHwgcEFkLT5NYWNUYWIuQ29udGVudFtpXS5WYWxpZEFzQXBDbGkpCi0JCQkJQ0xJRU5UX1NUQVRVU19DTEVBUl9GTEFHKCZwQWQtPk1hY1RhYi4KLQkJCQkJCQkgQ29udGVudFtpXSwKLQkJCQkJCQkgZkNMSUVOVF9TVEFUVVNfV01NX0NBUEFCTEUpOwotCQl9Ci0KLQkJLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCQkvKiAgICAgIE1BQyBSZWdpc3RlciBoYXMgYSBjb3B5IC4gKi8KLQkJLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotLyojaWZuZGVmIFdJRklfVEVTVCAqLwotCQlpZiAocEFkLT5Db21tb25DZmcuYkVuYWJsZVR4QnVyc3QpIHsKLQkJCS8qIEZvciBDV0MgdGVzdCwgY2hhbmdlIHR4b3AgZnJvbSAweDMwIHRvIDB4MjAgaW4gVHhCdXJzdCBtb2RlICovCi0JCQlBYzBDZmcuZmllbGQuQWNUeG9wID0gMHgyMDsJLyogU3VnZ2VzdCBieSBKb2huIGZvciBUeEJ1cnN0IGluIEhUIE1vZGUgKi8KLQkJfSBlbHNlCi0JCQlBYzBDZmcuZmllbGQuQWNUeG9wID0gMDsJLyogUUlEX0FDX0JFICovCi0vKiNlbHNlICovCi0vKiAgICAgICAgICAgICAgQWMwQ2ZnLmZpZWxkLkFjVHhvcCA9IDA7ICAgICAgICAvLyBRSURfQUNfQkUgKi8KLS8qI2VuZGlmICovCi0JCUFjMENmZy5maWVsZC5Dd21pbiA9IENXX01JTl9JTl9CSVRTOwotCQlBYzBDZmcuZmllbGQuQ3dtYXggPSBDV19NQVhfSU5fQklUUzsKLQkJQWMwQ2ZnLmZpZWxkLkFpZnNuID0gMjsKLQkJUlRNUF9JT19XUklURTMyKHBBZCwgRURDQV9BQzBfQ0ZHLCBBYzBDZmcud29yZCk7Ci0KLQkJQWMxQ2ZnLmZpZWxkLkFjVHhvcCA9IDA7CS8qIFFJRF9BQ19CSyAqLwotCQlBYzFDZmcuZmllbGQuQ3dtaW4gPSBDV19NSU5fSU5fQklUUzsKLQkJQWMxQ2ZnLmZpZWxkLkN3bWF4ID0gQ1dfTUFYX0lOX0JJVFM7Ci0JCUFjMUNmZy5maWVsZC5BaWZzbiA9IDI7Ci0JCVJUTVBfSU9fV1JJVEUzMihwQWQsIEVEQ0FfQUMxX0NGRywgQWMxQ2ZnLndvcmQpOwotCi0JCWlmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUIpIHsKLQkJCUFjMkNmZy5maWVsZC5BY1R4b3AgPSAxOTI7CS8qIEFDX1ZJOiAxOTIqMzJ1cyB+PSA2bXMgKi8KLQkJCUFjM0NmZy5maWVsZC5BY1R4b3AgPSA5NjsJLyogQUNfVk86IDk2KjMydXMgIH49IDNtcyAqLwotCQl9IGVsc2UgewotCQkJQWMyQ2ZnLmZpZWxkLkFjVHhvcCA9IDk2OwkvKiBBQ19WSTogOTYqMzJ1cyB+PSAzbXMgKi8KLQkJCUFjM0NmZy5maWVsZC5BY1R4b3AgPSA0ODsJLyogQUNfVk86IDQ4KjMydXMgfj0gMS41bXMgKi8KLQkJfQotCQlBYzJDZmcuZmllbGQuQ3dtaW4gPSBDV19NSU5fSU5fQklUUzsKLQkJQWMyQ2ZnLmZpZWxkLkN3bWF4ID0gQ1dfTUFYX0lOX0JJVFM7Ci0JCUFjMkNmZy5maWVsZC5BaWZzbiA9IDI7Ci0JCVJUTVBfSU9fV1JJVEUzMihwQWQsIEVEQ0FfQUMyX0NGRywgQWMyQ2ZnLndvcmQpOwotCQlBYzNDZmcuZmllbGQuQ3dtaW4gPSBDV19NSU5fSU5fQklUUzsKLQkJQWMzQ2ZnLmZpZWxkLkN3bWF4ID0gQ1dfTUFYX0lOX0JJVFM7Ci0JCUFjM0NmZy5maWVsZC5BaWZzbiA9IDI7Ci0JCVJUTVBfSU9fV1JJVEUzMihwQWQsIEVEQ0FfQUMzX0NGRywgQWMzQ2ZnLndvcmQpOwotCi0JCS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQkJLyogICAgICBETUEgUmVnaXN0ZXIgaGFzIGEgY29weSB0b28uICovCi0JCS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQkJY3NyMC5maWVsZC5BYzBUeG9wID0gMDsJLyogUUlEX0FDX0JFICovCi0JCWNzcjAuZmllbGQuQWMxVHhvcCA9IDA7CS8qIFFJRF9BQ19CSyAqLwotCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBXTU1fVFhPUDBfQ0ZHLCBjc3IwLndvcmQpOwotCQlpZiAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFCKSB7Ci0JCQljc3IxLmZpZWxkLkFjMlR4b3AgPSAxOTI7CS8qIEFDX1ZJOiAxOTIqMzJ1cyB+PSA2bXMgKi8KLQkJCWNzcjEuZmllbGQuQWMzVHhvcCA9IDk2OwkvKiBBQ19WTzogOTYqMzJ1cyAgfj0gM21zICovCi0JCX0gZWxzZSB7Ci0JCQljc3IxLmZpZWxkLkFjMlR4b3AgPSA5NjsJLyogQUNfVkk6IDk2KjMydXMgfj0gM21zICovCi0JCQljc3IxLmZpZWxkLkFjM1R4b3AgPSA0ODsJLyogQUNfVk86IDQ4KjMydXMgfj0gMS41bXMgKi8KLQkJfQotCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBXTU1fVFhPUDFfQ0ZHLCBjc3IxLndvcmQpOwotCi0JCUN3bWluQ3NyLndvcmQgPSAwOwotCQlDd21pbkNzci5maWVsZC5Dd21pbjAgPSBDV19NSU5fSU5fQklUUzsKLQkJQ3dtaW5Dc3IuZmllbGQuQ3dtaW4xID0gQ1dfTUlOX0lOX0JJVFM7Ci0JCUN3bWluQ3NyLmZpZWxkLkN3bWluMiA9IENXX01JTl9JTl9CSVRTOwotCQlDd21pbkNzci5maWVsZC5Dd21pbjMgPSBDV19NSU5fSU5fQklUUzsKLQkJUlRNUF9JT19XUklURTMyKHBBZCwgV01NX0NXTUlOX0NGRywgQ3dtaW5Dc3Iud29yZCk7Ci0KLQkJQ3dtYXhDc3Iud29yZCA9IDA7Ci0JCUN3bWF4Q3NyLmZpZWxkLkN3bWF4MCA9IENXX01BWF9JTl9CSVRTOwotCQlDd21heENzci5maWVsZC5Dd21heDEgPSBDV19NQVhfSU5fQklUUzsKLQkJQ3dtYXhDc3IuZmllbGQuQ3dtYXgyID0gQ1dfTUFYX0lOX0JJVFM7Ci0JCUN3bWF4Q3NyLmZpZWxkLkN3bWF4MyA9IENXX01BWF9JTl9CSVRTOwotCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBXTU1fQ1dNQVhfQ0ZHLCBDd21heENzci53b3JkKTsKLQotCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBXTU1fQUlGU05fQ0ZHLCAweDAwMDAyMjIyKTsKLQotCQlOZGlzWmVyb01lbW9yeSgmcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybSwgc2l6ZW9mKHN0cnVjdCBydF9lZGNhX3Bhcm0pKTsKLQl9IGVsc2UgewotCQlPUFNUQVRVU19TRVRfRkxBRyhwQWQsIGZPUF9TVEFUVVNfV01NX0lOVVNFRCk7Ci0JCS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQkJLyogICAgICBNQUMgUmVnaXN0ZXIgaGFzIGEgY29weS4gKi8KLQkJLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCQkvKiAqLwotCQkvKiBNb2RpZnkgQ3dtaW4vQ3dtYXgvVHhvcCBvbiBxdWV1ZVtRSURfQUNfVkldLCBSZWNvbW1lbmQgYnkgSmVycnkgMjAwNS8wNy8yNyAqLwotCQkvKiBUbyBkZWdyYWRlIG91ciBWSURPIFF1ZXVlJ3MgdGhyb3VnaHB1dCBmb3IgV2lGaSBXTU0gUzNUMDcgSXNzdWUuICovCi0JCS8qICovCi0JCS8qcEVkY2FQYXJtLT5UeG9wW1FJRF9BQ19WSV0gPSBwRWRjYVBhcm0tPlR4b3BbUUlEX0FDX1ZJXSAqIDcgLyAxMDsgLy8gcnQyODYwYyBuZWVkIHRoaXMgKi8KLQotCQlBYzBDZmcuZmllbGQuQWNUeG9wID0gcEVkY2FQYXJtLT5UeG9wW1FJRF9BQ19CRV07Ci0JCUFjMENmZy5maWVsZC5Dd21pbiA9IHBFZGNhUGFybS0+Q3dtaW5bUUlEX0FDX0JFXTsKLQkJQWMwQ2ZnLmZpZWxkLkN3bWF4ID0gcEVkY2FQYXJtLT5Dd21heFtRSURfQUNfQkVdOwotCQlBYzBDZmcuZmllbGQuQWlmc24gPSBwRWRjYVBhcm0tPkFpZnNuW1FJRF9BQ19CRV07CS8qKzE7ICovCi0KLQkJQWMxQ2ZnLmZpZWxkLkFjVHhvcCA9IHBFZGNhUGFybS0+VHhvcFtRSURfQUNfQktdOwotCQlBYzFDZmcuZmllbGQuQ3dtaW4gPSBwRWRjYVBhcm0tPkN3bWluW1FJRF9BQ19CS107CS8qKzI7ICovCi0JCUFjMUNmZy5maWVsZC5Dd21heCA9IHBFZGNhUGFybS0+Q3dtYXhbUUlEX0FDX0JLXTsKLQkJQWMxQ2ZnLmZpZWxkLkFpZnNuID0gcEVkY2FQYXJtLT5BaWZzbltRSURfQUNfQktdOwkvKisxOyAqLwotCi0JCUFjMkNmZy5maWVsZC5BY1R4b3AgPSAocEVkY2FQYXJtLT5UeG9wW1FJRF9BQ19WSV0gKiA2KSAvIDEwOwotCQlpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCA9PSAxKSB7Ci0JCQlBYzJDZmcuZmllbGQuQ3dtaW4gPSBwRWRjYVBhcm0tPkN3bWluW1FJRF9BQ19WSV0gKyAxOwotCQkJQWMyQ2ZnLmZpZWxkLkN3bWF4ID0gcEVkY2FQYXJtLT5Dd21heFtRSURfQUNfVkldICsgMTsKLQkJfSBlbHNlIHsKLQkJCUFjMkNmZy5maWVsZC5Dd21pbiA9IHBFZGNhUGFybS0+Q3dtaW5bUUlEX0FDX1ZJXTsKLQkJCUFjMkNmZy5maWVsZC5Dd21heCA9IHBFZGNhUGFybS0+Q3dtYXhbUUlEX0FDX1ZJXTsKLQkJfQotCQlBYzJDZmcuZmllbGQuQWlmc24gPSBwRWRjYVBhcm0tPkFpZnNuW1FJRF9BQ19WSV0gKyAxOwotI2lmZGVmIFJUTVBfTUFDX1VTQgotCQlBYzJDZmcuZmllbGQuQWlmc24gPSBwRWRjYVBhcm0tPkFpZnNuW1FJRF9BQ19WSV0gKyAzOwotI2VuZGlmIC8qIFJUTVBfTUFDX1VTQiAvLyAqLwotCi0JCXsKLQkJCS8qIFR1bmluZyBmb3IgV2ktRmkgV01NIFMwNiAqLwotCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXaUZpVGVzdCAmJgotCQkJICAgIHBFZGNhUGFybS0+QWlmc25bUUlEX0FDX1ZJXSA9PSAxMCkKLQkJCQlBYzJDZmcuZmllbGQuQWlmc24gLT0gMTsKLQotCQkJLyogVHVuaW5nIGZvciBUR24gV2ktRmkgNS4yLjMyICovCi0JCQkvKiBTVEEgVGVzdEJlZCBjaGFuZ2VzIGluIHRoaXMgaXRlbTogY29uZXhhbnQgbGVnYWN5IHN0YSA9PT4gYnJvYWRjb20gMTFuIHN0YSAqLwotCQkJaWYgKFNUQV9UR05fV0lGSV9PTihwQWQpICYmCi0JCQkgICAgcEVkY2FQYXJtLT5BaWZzbltRSURfQUNfVkldID09IDEwKSB7Ci0JCQkJQWMwQ2ZnLmZpZWxkLkFpZnNuID0gMzsKLQkJCQlBYzJDZmcuZmllbGQuQWNUeG9wID0gNTsKLQkJCX0KLSNpZmRlZiBSVDMweHgKLQkJCWlmIChwQWQtPlJmSWNUeXBlID09IFJGSUNfMzAyMAotCQkJICAgIHx8IHBBZC0+UmZJY1R5cGUgPT0gUkZJQ18yMDIwKSB7Ci0JCQkJLyogVHVuaW5nIGZvciBXaUZpIFdNTSBTMy1UMDc6IGNvbm5leGFudCBsZWdhY3kgc3RhID09PiBicm9hZGNvbSAxMW4gc3RhLiAqLwotCQkJCUFjMkNmZy5maWVsZC5BaWZzbiA9IDU7Ci0JCQl9Ci0jZW5kaWYgLyogUlQzMHh4IC8vICovCi0JCX0KLQotCQlBYzNDZmcuZmllbGQuQWNUeG9wID0gcEVkY2FQYXJtLT5UeG9wW1FJRF9BQ19WT107Ci0JCUFjM0NmZy5maWVsZC5Dd21pbiA9IHBFZGNhUGFybS0+Q3dtaW5bUUlEX0FDX1ZPXTsKLQkJQWMzQ2ZnLmZpZWxkLkN3bWF4ID0gcEVkY2FQYXJtLT5Dd21heFtRSURfQUNfVk9dOwotCQlBYzNDZmcuZmllbGQuQWlmc24gPSBwRWRjYVBhcm0tPkFpZnNuW1FJRF9BQ19WT107Ci0KLS8qI2lmZGVmIFdJRklfVEVTVCAqLwotCQlpZiAocEFkLT5Db21tb25DZmcuYldpRmlUZXN0KSB7Ci0JCQlpZiAoQWMzQ2ZnLmZpZWxkLkFjVHhvcCA9PSAxMDIpIHsKLQkJCQlBYzBDZmcuZmllbGQuQWNUeG9wID0KLQkJCQkgICAgcEVkY2FQYXJtLT5UeG9wW1FJRF9BQ19CRV0gPyBwRWRjYVBhcm0tPgotCQkJCSAgICBUeG9wW1FJRF9BQ19CRV0gOiAxMDsKLQkJCQlBYzBDZmcuZmllbGQuQWlmc24gPSBwRWRjYVBhcm0tPkFpZnNuW1FJRF9BQ19CRV0gLSAxOwkvKiBBSUZTTiBtdXN0ID49IDEgKi8KLQkJCQlBYzFDZmcuZmllbGQuQWNUeG9wID0KLQkJCQkgICAgcEVkY2FQYXJtLT5UeG9wW1FJRF9BQ19CS107Ci0JCQkJQWMxQ2ZnLmZpZWxkLkFpZnNuID0KLQkJCQkgICAgcEVkY2FQYXJtLT5BaWZzbltRSURfQUNfQktdOwotCQkJCUFjMkNmZy5maWVsZC5BY1R4b3AgPQotCQkJCSAgICBwRWRjYVBhcm0tPlR4b3BbUUlEX0FDX1ZJXTsKLQkJCX0JLyogRW5kIG9mIGlmICovCi0JCX0KLS8qI2VuZGlmIC8vIFdJRklfVEVTVCAvLyAqLwotCi0JCVJUTVBfSU9fV1JJVEUzMihwQWQsIEVEQ0FfQUMwX0NGRywgQWMwQ2ZnLndvcmQpOwotCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBFRENBX0FDMV9DRkcsIEFjMUNmZy53b3JkKTsKLQkJUlRNUF9JT19XUklURTMyKHBBZCwgRURDQV9BQzJfQ0ZHLCBBYzJDZmcud29yZCk7Ci0JCVJUTVBfSU9fV1JJVEUzMihwQWQsIEVEQ0FfQUMzX0NGRywgQWMzQ2ZnLndvcmQpOwotCi0JCS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQkJLyogICAgICBETUEgUmVnaXN0ZXIgaGFzIGEgY29weSB0b28uICovCi0JCS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQkJY3NyMC5maWVsZC5BYzBUeG9wID0gQWMwQ2ZnLmZpZWxkLkFjVHhvcDsKLQkJY3NyMC5maWVsZC5BYzFUeG9wID0gQWMxQ2ZnLmZpZWxkLkFjVHhvcDsKLQkJUlRNUF9JT19XUklURTMyKHBBZCwgV01NX1RYT1AwX0NGRywgY3NyMC53b3JkKTsKLQotCQljc3IxLmZpZWxkLkFjMlR4b3AgPSBBYzJDZmcuZmllbGQuQWNUeG9wOwotCQljc3IxLmZpZWxkLkFjM1R4b3AgPSBBYzNDZmcuZmllbGQuQWNUeG9wOwotCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBXTU1fVFhPUDFfQ0ZHLCBjc3IxLndvcmQpOwotCi0JCUN3bWluQ3NyLndvcmQgPSAwOwotCQlDd21pbkNzci5maWVsZC5Dd21pbjAgPSBwRWRjYVBhcm0tPkN3bWluW1FJRF9BQ19CRV07Ci0JCUN3bWluQ3NyLmZpZWxkLkN3bWluMSA9IHBFZGNhUGFybS0+Q3dtaW5bUUlEX0FDX0JLXTsKLQkJQ3dtaW5Dc3IuZmllbGQuQ3dtaW4yID0gcEVkY2FQYXJtLT5Dd21pbltRSURfQUNfVkldOwotCQlDd21pbkNzci5maWVsZC5Dd21pbjMgPSBwRWRjYVBhcm0tPkN3bWluW1FJRF9BQ19WT10gLSAxOwkvKmZvciBUR24gd2lmaSB0ZXN0ICovCi0JCVJUTVBfSU9fV1JJVEUzMihwQWQsIFdNTV9DV01JTl9DRkcsIEN3bWluQ3NyLndvcmQpOwotCi0JCUN3bWF4Q3NyLndvcmQgPSAwOwotCQlDd21heENzci5maWVsZC5Dd21heDAgPSBwRWRjYVBhcm0tPkN3bWF4W1FJRF9BQ19CRV07Ci0JCUN3bWF4Q3NyLmZpZWxkLkN3bWF4MSA9IHBFZGNhUGFybS0+Q3dtYXhbUUlEX0FDX0JLXTsKLQkJQ3dtYXhDc3IuZmllbGQuQ3dtYXgyID0gcEVkY2FQYXJtLT5Dd21heFtRSURfQUNfVkldOwotCQlDd21heENzci5maWVsZC5Dd21heDMgPSBwRWRjYVBhcm0tPkN3bWF4W1FJRF9BQ19WT107Ci0JCVJUTVBfSU9fV1JJVEUzMihwQWQsIFdNTV9DV01BWF9DRkcsIEN3bWF4Q3NyLndvcmQpOwotCi0JCUFpZnNuQ3NyLndvcmQgPSAwOwotCQlBaWZzbkNzci5maWVsZC5BaWZzbjAgPSBBYzBDZmcuZmllbGQuQWlmc247CS8qcEVkY2FQYXJtLT5BaWZzbltRSURfQUNfQkVdOyAqLwotCQlBaWZzbkNzci5maWVsZC5BaWZzbjEgPSBBYzFDZmcuZmllbGQuQWlmc247CS8qcEVkY2FQYXJtLT5BaWZzbltRSURfQUNfQktdOyAqLwotCQlBaWZzbkNzci5maWVsZC5BaWZzbjIgPSBBYzJDZmcuZmllbGQuQWlmc247CS8qcEVkY2FQYXJtLT5BaWZzbltRSURfQUNfVkldOyAqLwotCi0JCXsKLQkJCS8qIFR1bmluZyBmb3IgV2ktRmkgV01NIFMwNiAqLwotCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXaUZpVGVzdCAmJgotCQkJICAgIHBFZGNhUGFybS0+QWlmc25bUUlEX0FDX1ZJXSA9PSAxMCkKLQkJCQlBaWZzbkNzci5maWVsZC5BaWZzbjIgPSBBYzJDZmcuZmllbGQuQWlmc24gLSA0OwotCi0JCQkvKiBUdW5pbmcgZm9yIFRHbiBXaS1GaSA1LjIuMzIgKi8KLQkJCS8qIFNUQSBUZXN0QmVkIGNoYW5nZXMgaW4gdGhpcyBpdGVtOiBjb25uZXhhbnQgbGVnYWN5IHN0YSA9PT4gYnJvYWRjb20gMTFuIHN0YSAqLwotCQkJaWYgKFNUQV9UR05fV0lGSV9PTihwQWQpICYmCi0JCQkgICAgcEVkY2FQYXJtLT5BaWZzbltRSURfQUNfVkldID09IDEwKSB7Ci0JCQkJQWlmc25Dc3IuZmllbGQuQWlmc24wID0gMzsKLQkJCQlBaWZzbkNzci5maWVsZC5BaWZzbjIgPSA3OwotCQkJfQotCi0JCQlpZiAoSU5GUkFfT04ocEFkKSkKLQkJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKCZwQWQtPk1hY1RhYi4KLQkJCQkJCSAgICAgICBDb250ZW50W0JTU0lEX1dDSURdLAotCQkJCQkJICAgICAgIGZDTElFTlRfU1RBVFVTX1dNTV9DQVBBQkxFKTsKLQkJfQotCi0JCXsKLQkJCUFpZnNuQ3NyLmZpZWxkLkFpZnNuMyA9IEFjM0NmZy5maWVsZC5BaWZzbiAtIDE7CS8qcEVkY2FQYXJtLT5BaWZzbltRSURfQUNfVk9dOyAvL2ZvciBUR24gd2lmaSB0ZXN0ICovCi0jaWZkZWYgUlQzMHh4Ci0JCQkvKiBUT0RPOiBTaGlhbmcsIHRoaXMgbW9kaWZpY2F0aW9uIGFsc28gc3VpdGFibGUgZm9yIFJUMzA1Mi9SVDMwNTAgPz8/ICovCi0JCQlpZiAocEFkLT5SZkljVHlwZSA9PSBSRklDXzMwMjAKLQkJCSAgICB8fCBwQWQtPlJmSWNUeXBlID09IFJGSUNfMjAyMCkgewotCQkJCUFpZnNuQ3NyLmZpZWxkLkFpZnNuMiA9IDB4MjsJLypwRWRjYVBhcm0tPkFpZnNuW1FJRF9BQ19WSV07IC8vZm9yIFdpRmkgV01NIFM0LVQwNC4gKi8KLQkJCX0KLSNlbmRpZiAvKiBSVDMweHggLy8gKi8KLQkJfQotCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBXTU1fQUlGU05fQ0ZHLCBBaWZzbkNzci53b3JkKTsKLQotCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybSwgcEVkY2FQYXJtLAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcnRfZWRjYV9wYXJtKSk7Ci0JCWlmICghQURIT0NfT04ocEFkKSkgewotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiRURDQSBbIyVkXTogQUlGU04gQ1dtaW4gQ1dtYXggIFRYT1AodXMpICBBQ01cbiIsCi0JCQkJICBwRWRjYVBhcm0tPkVkY2FVcGRhdGVDb3VudCkpOwotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiICAgICBBQ19CRSAgICAgICUyZCAgICAgJTJkICAgICAlMmQgICAgICAlNGQgICAgICVkXG4iLAotCQkJCSAgcEVkY2FQYXJtLT5BaWZzblswXSwgcEVkY2FQYXJtLT5Dd21pblswXSwKLQkJCQkgIHBFZGNhUGFybS0+Q3dtYXhbMF0sIHBFZGNhUGFybS0+VHhvcFswXSA8PCA1LAotCQkJCSAgcEVkY2FQYXJtLT5iQUNNWzBdKSk7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCIgICAgIEFDX0JLICAgICAgJTJkICAgICAlMmQgICAgICUyZCAgICAgICU0ZCAgICAgJWRcbiIsCi0JCQkJICBwRWRjYVBhcm0tPkFpZnNuWzFdLCBwRWRjYVBhcm0tPkN3bWluWzFdLAotCQkJCSAgcEVkY2FQYXJtLT5Dd21heFsxXSwgcEVkY2FQYXJtLT5UeG9wWzFdIDw8IDUsCi0JCQkJICBwRWRjYVBhcm0tPmJBQ01bMV0pKTsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAoIiAgICAgQUNfVkkgICAgICAlMmQgICAgICUyZCAgICAgJTJkICAgICAgJTRkICAgICAlZFxuIiwKLQkJCQkgIHBFZGNhUGFybS0+QWlmc25bMl0sIHBFZGNhUGFybS0+Q3dtaW5bMl0sCi0JCQkJICBwRWRjYVBhcm0tPkN3bWF4WzJdLCBwRWRjYVBhcm0tPlR4b3BbMl0gPDwgNSwKLQkJCQkgIHBFZGNhUGFybS0+YkFDTVsyXSkpOwotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiICAgICBBQ19WTyAgICAgICUyZCAgICAgJTJkICAgICAlMmQgICAgICAlNGQgICAgICVkXG4iLAotCQkJCSAgcEVkY2FQYXJtLT5BaWZzblszXSwgcEVkY2FQYXJtLT5Dd21pblszXSwKLQkJCQkgIHBFZGNhUGFybS0+Q3dtYXhbM10sIHBFZGNhUGFybS0+VHhvcFszXSA8PCA1LAotCQkJCSAgcEVkY2FQYXJtLT5iQUNNWzNdKSk7Ci0JCX0KLQl9Ci0KLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCi0JSVJRTCA9IFBBU1NJVkVfTEVWRUwKLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgQXNpY1NldFNsb3RUaW1lKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgSU4gQk9PTEVBTiBiVXNlU2hvcnRTbG90VGltZSkKLXsKLQl1bnNpZ25lZCBsb25nIFNsb3RUaW1lOwotCXUzMiBSZWdWYWx1ZSA9IDA7Ci0KLQlpZiAocEFkLT5Db21tb25DZmcuQ2hhbm5lbCA+IDE0KQotCQliVXNlU2hvcnRTbG90VGltZSA9IFRSVUU7Ci0KLQlpZiAoYlVzZVNob3J0U2xvdFRpbWUKLQkgICAgJiYgT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19TSE9SVF9TTE9UX0lOVVNFRCkpCi0JCXJldHVybjsKLQllbHNlIGlmICgoIWJVc2VTaG9ydFNsb3RUaW1lKQotCQkgJiYgKCFPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1NIT1JUX1NMT1RfSU5VU0VEKSkpCi0JCXJldHVybjsKLQotCWlmIChiVXNlU2hvcnRTbG90VGltZSkKLQkJT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1NIT1JUX1NMT1RfSU5VU0VEKTsKLQllbHNlCi0JCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1NIT1JUX1NMT1RfSU5VU0VEKTsKLQotCVNsb3RUaW1lID0gKGJVc2VTaG9ydFNsb3RUaW1lKSA/IDkgOiAyMDsKLQotCXsKLQkJLyogZm9yY2UgdXNpbmcgc2hvcnQgU0xPVCB0aW1lIGZvciBGQUUgdG8gZGVtbyBwZXJmb3JtYW5jZSB3aGVuIFR4QnVyc3QgaXMgT04gKi8KLQkJaWYgKCgocEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5iSHRFbmFibGUgPT0gRkFMU0UpCi0JCSAgICAgJiYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfV01NX0lOVVNFRCkpKQotCQkgICAgfHwgKChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLmJIdEVuYWJsZSA9PSBUUlVFKQotCQkJJiYgKHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5Qb2xpY3kgPT0KLQkJCSAgICBCQV9OT1RVU0UpKQotCQkgICAgKSB7Ci0JCQkvKiBJbiB0aGlzIGNhc2UsIHdlIHdpbGwgdGhpbmsgaXQgaXMgZG9pbmcgV2ktRmkgdGVzdCAqLwotCQkJLyogQW5kIHdlIHdpbGwgbm90IHNldCB0byBzaG9ydCBzbG90IHdoZW4gYkVuYWJsZVR4QnVyc3QgaXMgVFJVRS4gKi8KLQkJfSBlbHNlIGlmIChwQWQtPkNvbW1vbkNmZy5iRW5hYmxlVHhCdXJzdCkgewotCQkJT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1NIT1JUX1NMT1RfSU5VU0VEKTsKLQkJCVNsb3RUaW1lID0gOTsKLQkJfQotCX0KLQotCS8qICovCi0JLyogRm9yIHNvbWUgcmVhc29ucywgYWx3YXlzIHNldCBpdCB0byBzaG9ydCBzbG90IHRpbWUuICovCi0JLyogKi8KLQkvKiBUb0RvOiBTaG91bGQgY29uc2lkZXIgY2FwYWJpbGl0eSB3aXRoIDExQiAqLwotCS8qICovCi0JewotCQlpZiAocEFkLT5TdGFDZmcuQnNzVHlwZSA9PSBCU1NfQURIT0MpIHsKLQkJCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1NIT1JUX1NMT1RfSU5VU0VEKTsKLQkJCVNsb3RUaW1lID0gMjA7Ci0JCX0KLQl9Ci0KLQlSVE1QX0lPX1JFQUQzMihwQWQsIEJLT0ZGX1NMT1RfQ0ZHLCAmUmVnVmFsdWUpOwotCVJlZ1ZhbHVlID0gUmVnVmFsdWUgJiAweEZGRkZGRjAwOwotCi0JUmVnVmFsdWUgfD0gU2xvdFRpbWU7Ci0KLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBCS09GRl9TTE9UX0NGRywgUmVnVmFsdWUpOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlBZGQgU2hhcmVkIGtleSBpbmZvcm1hdGlvbiBpbnRvIEFTSUMuCi0JCVVwZGF0ZSBzaGFyZWQga2V5LCBUeE1pYyBhbmQgUnhNaWMgdG8gQXNpYyBTaGFyZWQga2V5IHRhYmxlCi0JCVVwZGF0ZSBpdHMgY2lwaGVyQWxnIHRvIEFzaWMgU2hhcmVkIGtleSBNb2RlLgotCi0gICAgUmV0dXJuOgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgQXNpY0FkZFNoYXJlZEtleUVudHJ5KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgIHU4IEJzc0luZGV4LAotCQkJICAgdTggS2V5SWR4LAotCQkJICAgdTggQ2lwaGVyQWxnLAotCQkJICAgdTggKnBLZXksIHU4ICpwVHhNaWMsIHU4ICpwUnhNaWMpCi17Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQ7CQkvKiwgY3NyMDsgKi8KLQlTSEFSRURLRVlfTU9ERV9TVFJVQyBjc3IxOwotI2lmZGVmIFJUTVBfTUFDX1BDSQotCWludCBpOwotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIkFzaWNBZGRTaGFyZWRLZXlFbnRyeSBCc3NJbmRleD0lZCwgS2V5SWR4PSVkXG4iLCBCc3NJbmRleCwKLQkJICBLZXlJZHgpKTsKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCJBc2ljQWRkU2hhcmVkS2V5RW50cnk6ICVzIGtleSAjJWRcbiIsIENpcGhlck5hbWVbQ2lwaGVyQWxnXSwKLQkJICBCc3NJbmRleCAqIDQgKyBLZXlJZHgpKTsKLQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsCi0JCSAgICAgKCIJCUtleSA9ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCi0JCSAgICAgIHBLZXlbMF0sIHBLZXlbMV0sIHBLZXlbMl0sIHBLZXlbM10sIHBLZXlbNF0sCi0JCSAgICAgIHBLZXlbNV0sIHBLZXlbNl0sIHBLZXlbN10sIHBLZXlbOF0sIHBLZXlbOV0sCi0JCSAgICAgIHBLZXlbMTBdLCBwS2V5WzExXSwgcEtleVsxMl0sIHBLZXlbMTNdLCBwS2V5WzE0XSwKLQkJICAgICAgcEtleVsxNV0pKTsKLQlpZiAocFJ4TWljKSB7Ci0JCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwKLQkJCSAgICAgKCIJCVJ4IE1JQyBLZXkgPSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCi0JCQkgICAgICBwUnhNaWNbMF0sIHBSeE1pY1sxXSwgcFJ4TWljWzJdLCBwUnhNaWNbM10sCi0JCQkgICAgICBwUnhNaWNbNF0sIHBSeE1pY1s1XSwgcFJ4TWljWzZdLCBwUnhNaWNbN10pKTsKLQl9Ci0JaWYgKHBUeE1pYykgewotCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsCi0JCQkgICAgICgiCQlUeCBNSUMgS2V5ID0gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAotCQkJICAgICAgcFR4TWljWzBdLCBwVHhNaWNbMV0sIHBUeE1pY1syXSwgcFR4TWljWzNdLAotCQkJICAgICAgcFR4TWljWzRdLCBwVHhNaWNbNV0sIHBUeE1pY1s2XSwgcFR4TWljWzddKSk7Ci0JfQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCS8qICovCi0JLyogZmlsbCBrZXkgbWF0ZXJpYWwgLSBrZXkgKyBUWCBNSUMgKyBSWCBNSUMgKi8KLQkvKiAqLwotI2lmZGVmIFJUTVBfTUFDX1BDSQotCW9mZnNldCA9Ci0JICAgIFNIQVJFRF9LRVlfVEFCTEVfQkFTRSArICg0ICogQnNzSW5kZXggKyBLZXlJZHgpICogSFdfS0VZX0VOVFJZX1NJWkU7Ci0JZm9yIChpID0gMDsgaSA8IE1BWF9MRU5fT0ZfU0hBUkVfS0VZOyBpKyspIHsKLQkJUlRNUF9JT19XUklURTgocEFkLCBvZmZzZXQgKyBpLCBwS2V5W2ldKTsKLQl9Ci0KLQlvZmZzZXQgKz0gTUFYX0xFTl9PRl9TSEFSRV9LRVk7Ci0JaWYgKHBUeE1pYykgewotCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCQlSVE1QX0lPX1dSSVRFOChwQWQsIG9mZnNldCArIGksIHBUeE1pY1tpXSk7Ci0JCX0KLQl9Ci0KLQlvZmZzZXQgKz0gODsKLQlpZiAocFJ4TWljKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJCVJUTVBfSU9fV1JJVEU4KHBBZCwgb2Zmc2V0ICsgaSwgcFJ4TWljW2ldKTsKLQkJfQotCX0KLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLSNpZmRlZiBSVE1QX01BQ19VU0IKLQl7Ci0JCW9mZnNldCA9Ci0JCSAgICBTSEFSRURfS0VZX1RBQkxFX0JBU0UgKyAoNCAqIEJzc0luZGV4ICsKLQkJCQkJICAgICBLZXlJZHgpICogSFdfS0VZX0VOVFJZX1NJWkU7Ci0JCVJUVVNCTXVsdGlXcml0ZShwQWQsIG9mZnNldCwgcEtleSwgTUFYX0xFTl9PRl9TSEFSRV9LRVkpOwotCi0JCW9mZnNldCArPSBNQVhfTEVOX09GX1NIQVJFX0tFWTsKLQkJaWYgKHBUeE1pYykgewotCQkJUlRVU0JNdWx0aVdyaXRlKHBBZCwgb2Zmc2V0LCBwVHhNaWMsIDgpOwotCQl9Ci0KLQkJb2Zmc2V0ICs9IDg7Ci0JCWlmIChwUnhNaWMpIHsKLQkJCVJUVVNCTXVsdGlXcml0ZShwQWQsIG9mZnNldCwgcFJ4TWljLCA4KTsKLQkJfQotCX0KLSNlbmRpZiAvKiBSVE1QX01BQ19VU0IgLy8gKi8KLQotCS8qICovCi0JLyogVXBkYXRlIGNpcGhlciBhbGdvcml0aG0uIFdTVEEgYWx3YXlzIHVzZSBCU1MwICovCi0JLyogKi8KLQlSVE1QX0lPX1JFQUQzMihwQWQsIFNIQVJFRF9LRVlfTU9ERV9CQVNFICsgNCAqIChCc3NJbmRleCAvIDIpLAotCQkgICAgICAgJmNzcjEud29yZCk7Ci0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIlJlYWQ6IFNIQVJFRF9LRVlfTU9ERV9CQVNFIGF0IHRoaXMgQnNzWyVkXSBLZXlJZHhbJWRdPSAweCV4IFxuIiwKLQkJICBCc3NJbmRleCwgS2V5SWR4LCBjc3IxLndvcmQpKTsKLQlpZiAoKEJzc0luZGV4ICUgMikgPT0gMCkgewotCQlpZiAoS2V5SWR4ID09IDApCi0JCQljc3IxLmZpZWxkLkJzczBLZXkwQ2lwaGVyQWxnID0gQ2lwaGVyQWxnOwotCQllbHNlIGlmIChLZXlJZHggPT0gMSkKLQkJCWNzcjEuZmllbGQuQnNzMEtleTFDaXBoZXJBbGcgPSBDaXBoZXJBbGc7Ci0JCWVsc2UgaWYgKEtleUlkeCA9PSAyKQotCQkJY3NyMS5maWVsZC5Cc3MwS2V5MkNpcGhlckFsZyA9IENpcGhlckFsZzsKLQkJZWxzZQotCQkJY3NyMS5maWVsZC5Cc3MwS2V5M0NpcGhlckFsZyA9IENpcGhlckFsZzsKLQl9IGVsc2UgewotCQlpZiAoS2V5SWR4ID09IDApCi0JCQljc3IxLmZpZWxkLkJzczFLZXkwQ2lwaGVyQWxnID0gQ2lwaGVyQWxnOwotCQllbHNlIGlmIChLZXlJZHggPT0gMSkKLQkJCWNzcjEuZmllbGQuQnNzMUtleTFDaXBoZXJBbGcgPSBDaXBoZXJBbGc7Ci0JCWVsc2UgaWYgKEtleUlkeCA9PSAyKQotCQkJY3NyMS5maWVsZC5Cc3MxS2V5MkNpcGhlckFsZyA9IENpcGhlckFsZzsKLQkJZWxzZQotCQkJY3NyMS5maWVsZC5Cc3MxS2V5M0NpcGhlckFsZyA9IENpcGhlckFsZzsKLQl9Ci0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIldyaXRlOiBTSEFSRURfS0VZX01PREVfQkFTRSBhdCB0aGlzIEJzc1slZF0gPSAweCV4IFxuIiwKLQkJICBCc3NJbmRleCwgY3NyMS53b3JkKSk7Ci0JUlRNUF9JT19XUklURTMyKHBBZCwgU0hBUkVEX0tFWV9NT0RFX0JBU0UgKyA0ICogKEJzc0luZGV4IC8gMiksCi0JCQljc3IxLndvcmQpOwotCi19Ci0KLS8qICAgICAgSVJRTCA9IERJU1BBVENIX0xFVkVMICovCi12b2lkIEFzaWNSZW1vdmVTaGFyZWRLZXlFbnRyeShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgICB1OCBCc3NJbmRleCwgdTggS2V5SWR4KQotewotCS8qdW5zaWduZWQgbG9uZyBTZWNDc3IwOyAqLwotCVNIQVJFREtFWV9NT0RFX1NUUlVDIGNzcjE7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJICgiQXNpY1JlbW92ZVNoYXJlZEtleUVudHJ5OiAjJWQgXG4iLCBCc3NJbmRleCAqIDQgKyBLZXlJZHgpKTsKLQotCVJUTVBfSU9fUkVBRDMyKHBBZCwgU0hBUkVEX0tFWV9NT0RFX0JBU0UgKyA0ICogKEJzc0luZGV4IC8gMiksCi0JCSAgICAgICAmY3NyMS53b3JkKTsKLQlpZiAoKEJzc0luZGV4ICUgMikgPT0gMCkgewotCQlpZiAoS2V5SWR4ID09IDApCi0JCQljc3IxLmZpZWxkLkJzczBLZXkwQ2lwaGVyQWxnID0gMDsKLQkJZWxzZSBpZiAoS2V5SWR4ID09IDEpCi0JCQljc3IxLmZpZWxkLkJzczBLZXkxQ2lwaGVyQWxnID0gMDsKLQkJZWxzZSBpZiAoS2V5SWR4ID09IDIpCi0JCQljc3IxLmZpZWxkLkJzczBLZXkyQ2lwaGVyQWxnID0gMDsKLQkJZWxzZQotCQkJY3NyMS5maWVsZC5Cc3MwS2V5M0NpcGhlckFsZyA9IDA7Ci0JfSBlbHNlIHsKLQkJaWYgKEtleUlkeCA9PSAwKQotCQkJY3NyMS5maWVsZC5Cc3MxS2V5MENpcGhlckFsZyA9IDA7Ci0JCWVsc2UgaWYgKEtleUlkeCA9PSAxKQotCQkJY3NyMS5maWVsZC5Cc3MxS2V5MUNpcGhlckFsZyA9IDA7Ci0JCWVsc2UgaWYgKEtleUlkeCA9PSAyKQotCQkJY3NyMS5maWVsZC5Cc3MxS2V5MkNpcGhlckFsZyA9IDA7Ci0JCWVsc2UKLQkJCWNzcjEuZmllbGQuQnNzMUtleTNDaXBoZXJBbGcgPSAwOwotCX0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJICgiV3JpdGU6IFNIQVJFRF9LRVlfTU9ERV9CQVNFIGF0IHRoaXMgQnNzWyVkXSA9IDB4JXggXG4iLAotCQkgIEJzc0luZGV4LCBjc3IxLndvcmQpKTsKLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBTSEFSRURfS0VZX01PREVfQkFTRSArIDQgKiAoQnNzSW5kZXggLyAyKSwKLQkJCWNzcjEud29yZCk7Ci0JQVNTRVJUKEJzc0luZGV4IDwgNCk7Ci0JQVNTRVJUKEtleUlkeCA8IDQpOwotCi19Ci0KLXZvaWQgQXNpY1VwZGF0ZVdDSURBdHRyaWJ1dGUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgICB1MTYgV0NJRCwKLQkJCSAgICAgdTggQnNzSW5kZXgsCi0JCQkgICAgIHU4IENpcGhlckFsZywKLQkJCSAgICAgSU4gQk9PTEVBTiBiVXNlUGFpcmV3aXNlS2V5VGFibGUpCi17Ci0JdW5zaWduZWQgbG9uZyBXQ0lEQXR0cmkgPSAwLCBvZmZzZXQ7Ci0KLQkvKiAqLwotCS8qIFVwZGF0ZSBXQ0lEIGF0dHJpYnV0ZS4gKi8KLQkvKiBPbmx5IFR4S2V5IGNvdWxkIHVwZGF0ZSBXQ0lEIGF0dHJpYnV0ZS4gKi8KLQkvKiAqLwotCW9mZnNldCA9IE1BQ19XQ0lEX0FUVFJJQlVURV9CQVNFICsgKFdDSUQgKiBIV19XQ0lEX0FUVFJJX1NJWkUpOwotCVdDSURBdHRyaSA9Ci0JICAgIChCc3NJbmRleCA8PCA0KSB8IChDaXBoZXJBbGcgPDwgMSkgfCAoYlVzZVBhaXJld2lzZUtleVRhYmxlKTsKLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBvZmZzZXQsIFdDSURBdHRyaSk7Ci19Ci0KLXZvaWQgQXNpY1VwZGF0ZVdDSURJVkVJVihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgdTE2IFdDSUQsIHVuc2lnbmVkIGxvbmcgdUlWLCB1bnNpZ25lZCBsb25nIHVFSVYpCi17Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQ7Ci0KLQlvZmZzZXQgPSBNQUNfSVZFSVZfVEFCTEVfQkFTRSArIChXQ0lEICogSFdfSVZFSVZfRU5UUllfU0laRSk7Ci0KLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBvZmZzZXQsIHVJVik7Ci0JUlRNUF9JT19XUklURTMyKHBBZCwgb2Zmc2V0ICsgNCwgdUVJVik7Ci19Ci0KLXZvaWQgQXNpY1VwZGF0ZVJ4V0NJRFRhYmxlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgIHUxNiBXQ0lELCB1OCAqcEFkZHIpCi17Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQ7Ci0JdW5zaWduZWQgbG9uZyBBZGRyOwotCi0Jb2Zmc2V0ID0gTUFDX1dDSURfQkFTRSArIChXQ0lEICogSFdfV0NJRF9FTlRSWV9TSVpFKTsKLQlBZGRyID0gcEFkZHJbMF0gKyAocEFkZHJbMV0gPDwgOCkgKyAocEFkZHJbMl0gPDwgMTYpICsgKHBBZGRyWzNdIDw8IDI0KTsKLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBvZmZzZXQsIEFkZHIpOwotCUFkZHIgPSBwQWRkcls0XSArIChwQWRkcls1XSA8PCA4KTsKLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBvZmZzZXQgKyA0LCBBZGRyKTsKLX0KLQotLyoKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgIFJvdXRpbmUgRGVzY3JpcHRpb246Ci0gICAgICAgIFNldCBDaXBoZXIgS2V5LCBDaXBoZXIgYWxnb3JpdGhtLCBJVi9FSVYgdG8gQXNpYwotCi0gICAgQXJndW1lbnRzOgotICAgICAgICBwQWQgICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIG91ciBhZGFwdGVyCi0gICAgICAgIFdDSUQgICAgICAgICAgICAgICAgICAgIFdDSUQgRW50cnkgbnVtYmVyLgotICAgICAgICBCc3NJbmRleCAgICAgICAgICAgICAgICBCU1NJRCBpbmRleCwgc3RhdGlvbiBvciBub25lIG11bHRpcGxlIEJTU0lEIHN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyB2YWx1ZSBzaG91bGQgYmUgMC4KLSAgICAgICAgS2V5SWR4ICAgICAgICAgICAgICAgICAgVGhpcyBLZXlJZHggd2lsbCBzZXQgdG8gSVYncyBLZXlJRCBpZiBiVHhLZXkgZW5hYmxlZAotICAgICAgICBwQ2lwaGVyS2V5ICAgICAgICAgICAgICBQb2ludGVyIHRvIENpcGhlciBLZXkuCi0gICAgICAgIGJVc2VQYWlyZXdpc2VLZXlUYWJsZSAgIFRSVUUgbWVhbnMgc2F2ZWQgdGhlIGtleSBpbiBTaGFyZWRLZXkgdGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSBQYWlyZXdpc2VLZXkgdGFibGUKLSAgICAgICAgYlR4S2V5ICAgICAgICAgICAgICAgICAgVGhpcyBpcyB0aGUgdHJhbnNtaXQga2V5IGlmIGVuYWJsZWQuCi0KLSAgICBSZXR1cm4gVmFsdWU6Ci0gICAgICAgIE5vbmUKLQotICAgIE5vdGU6Ci0gICAgICAgIFRoaXMgcm91dGluZSB3aWxsIHNldCB0aGUgcmVsYXRpdmUga2V5IHN0dWZmIHRvIEFzaWMgaW5jbHVkaW5nIFdDSUQgYXR0cmlidXRlLAotICAgICAgICBDaXBoZXIgS2V5LCBDaXBoZXIgYWxnb3JpdGhtIGFuZCBJVi9FSVYuCi0KLSAgICAgICAgSVYvRUlWIHdpbGwgYmUgdXBkYXRlIGlmIHRoaXMgQ2lwaGVyS2V5IGlzIHRoZSB0cmFuc21pc3Npb24ga2V5IGJlY2F1c2UKLSAgICAgICAgQVNJQyB3aWxsIGJhc2Ugb24gSVYncyBLZXlJRCB2YWx1ZSB0byBzZWxlY3QgQ2lwaGVyIEtleS4KLQotICAgICAgICBJZiBiVHhLZXkgc2V0cyB0byBGQUxTRSwgdGhpcyBpcyBub3QgdGhlIFRYIGtleSwgYnV0IGl0IGNvdWxkIGJlCi0gICAgICAgIFJYIGtleQotCi0JRm9yIEFQIG1vZGUgYlR4S2V5IG11c3QgYmUgYWx3YXlzIHNldCB0byBUUlVFLgotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgQXNpY0FkZEtleUVudHJ5KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgICB1MTYgV0NJRCwKLQkJICAgICB1OCBCc3NJbmRleCwKLQkJICAgICB1OCBLZXlJZHgsCi0JCSAgICAgc3RydWN0IHJ0X2NpcGhlcl9rZXkgKnBDaXBoZXJLZXksCi0JCSAgICAgSU4gQk9PTEVBTiBiVXNlUGFpcmV3aXNlS2V5VGFibGUsIElOIEJPT0xFQU4gYlR4S2V5KQotewotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwotLyogICAgICB1bnNpZ25lZCBsb25nICAgV0NJREF0dHJpID0gMDsgKi8KLQl1OCBJVjQgPSAwOwotCXU4ICpwS2V5ID0gcENpcGhlcktleS0+S2V5OwotLyogICAgICB1bnNpZ25lZCBsb25nICAgICAgICAgICBLZXlMZW4gPSBwQ2lwaGVyS2V5LT5LZXlMZW47ICovCi0JdTggKnBUeE1pYyA9IHBDaXBoZXJLZXktPlR4TWljOwotCXU4ICpwUnhNaWMgPSBwQ2lwaGVyS2V5LT5SeE1pYzsKLQl1OCAqcFR4dHNjID0gcENpcGhlcktleS0+VHhUc2M7Ci0JdTggQ2lwaGVyQWxnID0gcENpcGhlcktleS0+Q2lwaGVyQWxnOwotCVNIQVJFREtFWV9NT0RFX1NUUlVDIGNzcjE7Ci0jaWZkZWYgUlRNUF9NQUNfUENJCi0JdTggaTsKLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLQotLyogICAgICBBU1NFUlQoS2V5TGVuIDw9IE1BWF9MRU5fT0ZfUEVFUl9LRVkpOyAqLwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT0+IEFzaWNBZGRLZXlFbnRyeVxuIikpOwotCS8qICovCi0JLyogMS4pIGRlY2lkZSBrZXkgdGFibGUgb2Zmc2V0ICovCi0JLyogKi8KLQlpZiAoYlVzZVBhaXJld2lzZUtleVRhYmxlKQotCQlvZmZzZXQgPSBQQUlSV0lTRV9LRVlfVEFCTEVfQkFTRSArIChXQ0lEICogSFdfS0VZX0VOVFJZX1NJWkUpOwotCWVsc2UKLQkJb2Zmc2V0ID0KLQkJICAgIFNIQVJFRF9LRVlfVEFCTEVfQkFTRSArICg0ICogQnNzSW5kZXggKwotCQkJCQkgICAgIEtleUlkeCkgKiBIV19LRVlfRU5UUllfU0laRTsKLQotCS8qICovCi0JLyogMi4pIFNldCBLZXkgdG8gQXNpYyAqLwotCS8qICovCi0JLypmb3IgKGkgPSAwOyBpIDwgS2V5TGVuOyBpKyspICovCi0jaWZkZWYgUlRNUF9NQUNfUENJCi0JZm9yIChpID0gMDsgaSA8IE1BWF9MRU5fT0ZfUEVFUl9LRVk7IGkrKykgewotCQlSVE1QX0lPX1dSSVRFOChwQWQsIG9mZnNldCArIGksIHBLZXlbaV0pOwotCX0KLQlvZmZzZXQgKz0gTUFYX0xFTl9PRl9QRUVSX0tFWTsKLQotCS8qICovCi0JLyogMy4pIFNldCBNSUMga2V5IGlmIGF2YWlsYWJsZSAqLwotCS8qICovCi0JaWYgKHBUeE1pYykgewotCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCQlSVE1QX0lPX1dSSVRFOChwQWQsIG9mZnNldCArIGksIHBUeE1pY1tpXSk7Ci0JCX0KLQl9Ci0Jb2Zmc2V0ICs9IExFTl9US0lQX1RYTUlDSzsKLQotCWlmIChwUnhNaWMpIHsKLQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQkJUlRNUF9JT19XUklURTgocEFkLCBvZmZzZXQgKyBpLCBwUnhNaWNbaV0pOwotCQl9Ci0JfQotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotI2lmZGVmIFJUTVBfTUFDX1VTQgotCVJUVVNCTXVsdGlXcml0ZShwQWQsIG9mZnNldCwgcEtleSwgTUFYX0xFTl9PRl9QRUVSX0tFWSk7Ci0Jb2Zmc2V0ICs9IE1BWF9MRU5fT0ZfUEVFUl9LRVk7Ci0KLQkvKiAqLwotCS8qIDMuKSBTZXQgTUlDIGtleSBpZiBhdmFpbGFibGUgKi8KLQkvKiAqLwotCWlmIChwVHhNaWMpIHsKLQkJUlRVU0JNdWx0aVdyaXRlKHBBZCwgb2Zmc2V0LCBwVHhNaWMsIDgpOwotCX0KLQlvZmZzZXQgKz0gTEVOX1RLSVBfVFhNSUNLOwotCi0JaWYgKHBSeE1pYykgewotCQlSVFVTQk11bHRpV3JpdGUocEFkLCBvZmZzZXQsIHBSeE1pYywgOCk7Ci0JfQotI2VuZGlmIC8qIFJUTVBfTUFDX1VTQiAvLyAqLwotCi0JLyogKi8KLQkvKiA0LikgTW9kaWZ5IElWL0VJViBpZiBuZWVkcyAqLwotCS8qICAgICBUaGlzIHdpbGwgZm9yY2UgQXNpYyB0byB1c2UgdGhpcyBrZXkgSUQgYnkgc2V0dGluZyBJVi4gKi8KLQkvKiAqLwotCWlmIChiVHhLZXkpIHsKLSNpZmRlZiBSVE1QX01BQ19QQ0kKLQkJb2Zmc2V0ID0gTUFDX0lWRUlWX1RBQkxFX0JBU0UgKyAoV0NJRCAqIEhXX0lWRUlWX0VOVFJZX1NJWkUpOwotCQkvKiAqLwotCQkvKiBXcml0ZSBJViAqLwotCQkvKiAqLwotCQlSVE1QX0lPX1dSSVRFOChwQWQsIG9mZnNldCwgcFR4dHNjWzFdKTsKLQkJUlRNUF9JT19XUklURTgocEFkLCBvZmZzZXQgKyAxLCAoKHBUeHRzY1sxXSB8IDB4MjApICYgMHg3ZikpOwotCQlSVE1QX0lPX1dSSVRFOChwQWQsIG9mZnNldCArIDIsIHBUeHRzY1swXSk7Ci0KLQkJSVY0ID0gKEtleUlkeCA8PCA2KTsKLQkJaWYgKChDaXBoZXJBbGcgPT0gQ0lQSEVSX1RLSVApCi0JCSAgICB8fCAoQ2lwaGVyQWxnID09IENJUEhFUl9US0lQX05PX01JQykKLQkJICAgIHx8IChDaXBoZXJBbGcgPT0gQ0lQSEVSX0FFUykpCi0JCQlJVjQgfD0gMHgyMDsJLyogdHVybiBvbiBleHRlbnNpb24gYml0IG1lYW5zIEVJViBleGlzdGVuY2UgKi8KLQotCQlSVE1QX0lPX1dSSVRFOChwQWQsIG9mZnNldCArIDMsIElWNCk7Ci0KLQkJLyogKi8KLQkJLyogV3JpdGUgRUlWICovCi0JCS8qICovCi0JCW9mZnNldCArPSA0OwotCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCQlSVE1QX0lPX1dSSVRFOChwQWQsIG9mZnNldCArIGksIHBUeHRzY1tpICsgMl0pOwotCQl9Ci0jZW5kaWYgLyogUlRNUF9NQUNfUENJIC8vICovCi0jaWZkZWYgUlRNUF9NQUNfVVNCCi0JCXUzMiB0bXBWYWw7Ci0KLQkJLyogKi8KLQkJLyogV3JpdGUgSVYgKi8KLQkJLyogKi8KLQkJSVY0ID0gKEtleUlkeCA8PCA2KTsKLQkJaWYgKChDaXBoZXJBbGcgPT0gQ0lQSEVSX1RLSVApCi0JCSAgICB8fCAoQ2lwaGVyQWxnID09IENJUEhFUl9US0lQX05PX01JQykKLQkJICAgIHx8IChDaXBoZXJBbGcgPT0gQ0lQSEVSX0FFUykpCi0JCQlJVjQgfD0gMHgyMDsJLyogdHVybiBvbiBleHRlbnNpb24gYml0IG1lYW5zIEVJViBleGlzdGVuY2UgKi8KLQotCQl0bXBWYWwgPQotCQkgICAgcFR4dHNjWzFdICsgKCgocFR4dHNjWzFdIHwgMHgyMCkgJiAweDdmKSA8PCA4KSArCi0JCSAgICAocFR4dHNjWzBdIDw8IDE2KSArIChJVjQgPDwgMjQpOwotCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBvZmZzZXQsIHRtcFZhbCk7Ci0KLQkJLyogKi8KLQkJLyogV3JpdGUgRUlWICovCi0JCS8qICovCi0JCW9mZnNldCArPSA0OwotCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBvZmZzZXQsICoodTMyICopJiBwQ2lwaGVyS2V5LT5UeFRzY1syXSk7Ci0jZW5kaWYgLyogUlRNUF9NQUNfVVNCIC8vICovCi0KLQkJQXNpY1VwZGF0ZVdDSURBdHRyaWJ1dGUocEFkLCBXQ0lELCBCc3NJbmRleCwgQ2lwaGVyQWxnLAotCQkJCQliVXNlUGFpcmV3aXNlS2V5VGFibGUpOwotCX0KLQotCWlmICghYlVzZVBhaXJld2lzZUtleVRhYmxlKSB7Ci0JCS8qICovCi0JCS8qIE9ubHkgdXBkYXRlIHRoZSBzaGFyZWQga2V5IHNlY3VyaXR5IG1vZGUgKi8KLQkJLyogKi8KLQkJUlRNUF9JT19SRUFEMzIocEFkLCBTSEFSRURfS0VZX01PREVfQkFTRSArIDQgKiAoQnNzSW5kZXggLyAyKSwKLQkJCSAgICAgICAmY3NyMS53b3JkKTsKLQkJaWYgKChCc3NJbmRleCAlIDIpID09IDApIHsKLQkJCWlmIChLZXlJZHggPT0gMCkKLQkJCQljc3IxLmZpZWxkLkJzczBLZXkwQ2lwaGVyQWxnID0gQ2lwaGVyQWxnOwotCQkJZWxzZSBpZiAoS2V5SWR4ID09IDEpCi0JCQkJY3NyMS5maWVsZC5Cc3MwS2V5MUNpcGhlckFsZyA9IENpcGhlckFsZzsKLQkJCWVsc2UgaWYgKEtleUlkeCA9PSAyKQotCQkJCWNzcjEuZmllbGQuQnNzMEtleTJDaXBoZXJBbGcgPSBDaXBoZXJBbGc7Ci0JCQllbHNlCi0JCQkJY3NyMS5maWVsZC5Cc3MwS2V5M0NpcGhlckFsZyA9IENpcGhlckFsZzsKLQkJfSBlbHNlIHsKLQkJCWlmIChLZXlJZHggPT0gMCkKLQkJCQljc3IxLmZpZWxkLkJzczFLZXkwQ2lwaGVyQWxnID0gQ2lwaGVyQWxnOwotCQkJZWxzZSBpZiAoS2V5SWR4ID09IDEpCi0JCQkJY3NyMS5maWVsZC5Cc3MxS2V5MUNpcGhlckFsZyA9IENpcGhlckFsZzsKLQkJCWVsc2UgaWYgKEtleUlkeCA9PSAyKQotCQkJCWNzcjEuZmllbGQuQnNzMUtleTJDaXBoZXJBbGcgPSBDaXBoZXJBbGc7Ci0JCQllbHNlCi0JCQkJY3NyMS5maWVsZC5Cc3MxS2V5M0NpcGhlckFsZyA9IENpcGhlckFsZzsKLQkJfQotCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBTSEFSRURfS0VZX01PREVfQkFTRSArIDQgKiAoQnNzSW5kZXggLyAyKSwKLQkJCQljc3IxLndvcmQpOwotCX0KLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjw9PSBBc2ljQWRkS2V5RW50cnlcbiIpKTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJQWRkIFBhaXItd2lzZSBrZXkgbWF0ZXJpYWwgaW50byBBU0lDLgotCQlVcGRhdGUgcGFpcndpc2Uga2V5LCBUeE1pYyBhbmQgUnhNaWMgdG8gQXNpYyBQYWlyLXdpc2Uga2V5IHRhYmxlCi0KLSAgICBSZXR1cm46Ci0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBBc2ljQWRkUGFpcndpc2VLZXlFbnRyeShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgIHU4ICpwQWRkciwKLQkJCSAgICAgdTggV0NJRCwgc3RydWN0IHJ0X2NpcGhlcl9rZXkgKnBDaXBoZXJLZXkpCi17Ci0JaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQ7Ci0JdTggKnBLZXkgPSBwQ2lwaGVyS2V5LT5LZXk7Ci0JdTggKnBUeE1pYyA9IHBDaXBoZXJLZXktPlR4TWljOwotCXU4ICpwUnhNaWMgPSBwQ2lwaGVyS2V5LT5SeE1pYzsKLSNpZmRlZiBEQkcKLQl1OCBDaXBoZXJBbGcgPSBwQ2lwaGVyS2V5LT5DaXBoZXJBbGc7Ci0jZW5kaWYgLyogREJHIC8vICovCi0KLQkvKiBFS0VZICovCi0Jb2Zmc2V0ID0gUEFJUldJU0VfS0VZX1RBQkxFX0JBU0UgKyAoV0NJRCAqIEhXX0tFWV9FTlRSWV9TSVpFKTsKLSNpZmRlZiBSVE1QX01BQ19QQ0kKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0xFTl9PRl9QRUVSX0tFWTsgaSsrKSB7Ci0JCVJUTVBfSU9fV1JJVEU4KHBBZCwgb2Zmc2V0ICsgaSwgcEtleVtpXSk7Ci0JfQotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotI2lmZGVmIFJUTVBfTUFDX1VTQgotCVJUVVNCTXVsdGlXcml0ZShwQWQsIG9mZnNldCwgJnBDaXBoZXJLZXktPktleVswXSwgTUFYX0xFTl9PRl9QRUVSX0tFWSk7Ci0jZW5kaWYgLyogUlRNUF9NQUNfVVNCIC8vICovCi0JZm9yIChpID0gMDsgaSA8IE1BWF9MRU5fT0ZfUEVFUl9LRVk7IGkgKz0gNCkgewotCQl1MzIgVmFsdWU7Ci0JCVJUTVBfSU9fUkVBRDMyKHBBZCwgb2Zmc2V0ICsgaSwgJlZhbHVlKTsKLQl9Ci0KLQlvZmZzZXQgKz0gTUFYX0xFTl9PRl9QRUVSX0tFWTsKLQotCS8qICBNSUMgS0VZICovCi0JaWYgKHBUeE1pYykgewotI2lmZGVmIFJUTVBfTUFDX1BDSQotCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCQlSVE1QX0lPX1dSSVRFOChwQWQsIG9mZnNldCArIGksIHBUeE1pY1tpXSk7Ci0JCX0KLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLSNpZmRlZiBSVE1QX01BQ19VU0IKLQkJUlRVU0JNdWx0aVdyaXRlKHBBZCwgb2Zmc2V0LCAmcENpcGhlcktleS0+VHhNaWNbMF0sIDgpOwotI2VuZGlmIC8qIFJUTVBfTUFDX1VTQiAvLyAqLwotCX0KLQlvZmZzZXQgKz0gODsKLQlpZiAocFJ4TWljKSB7Ci0jaWZkZWYgUlRNUF9NQUNfUENJCi0JCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJCVJUTVBfSU9fV1JJVEU4KHBBZCwgb2Zmc2V0ICsgaSwgcFJ4TWljW2ldKTsKLQkJfQotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotI2lmZGVmIFJUTVBfTUFDX1VTQgotCQlSVFVTQk11bHRpV3JpdGUocEFkLCBvZmZzZXQsICZwQ2lwaGVyS2V5LT5SeE1pY1swXSwgOCk7Ci0jZW5kaWYgLyogUlRNUF9NQUNfVVNCIC8vICovCi0JfQotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIkFzaWNBZGRQYWlyd2lzZUtleUVudHJ5OiBXQ0lEICMlZCBBbGc9JXNcbiIsIFdDSUQsCi0JCSAgQ2lwaGVyTmFtZVtDaXBoZXJBbGddKSk7Ci0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIglLZXkgPSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAotCQkgIHBLZXlbMF0sIHBLZXlbMV0sIHBLZXlbMl0sIHBLZXlbM10sIHBLZXlbNF0sIHBLZXlbNV0sCi0JCSAgcEtleVs2XSwgcEtleVs3XSwgcEtleVs4XSwgcEtleVs5XSwgcEtleVsxMF0sIHBLZXlbMTFdLAotCQkgIHBLZXlbMTJdLCBwS2V5WzEzXSwgcEtleVsxNF0sIHBLZXlbMTVdKSk7Ci0JaWYgKHBSeE1pYykgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIglSeCBNSUMgS2V5ID0gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAotCQkJICBwUnhNaWNbMF0sIHBSeE1pY1sxXSwgcFJ4TWljWzJdLCBwUnhNaWNbM10sCi0JCQkgIHBSeE1pY1s0XSwgcFJ4TWljWzVdLCBwUnhNaWNbNl0sIHBSeE1pY1s3XSkpOwotCX0KLQlpZiAocFR4TWljKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiCVR4IE1JQyBLZXkgPSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCi0JCQkgIHBUeE1pY1swXSwgcFR4TWljWzFdLCBwVHhNaWNbMl0sIHBUeE1pY1szXSwKLQkJCSAgcFR4TWljWzRdLCBwVHhNaWNbNV0sIHBUeE1pY1s2XSwgcFR4TWljWzddKSk7Ci0JfQotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlSZW1vdmUgUGFpci13aXNlIGtleSBtYXRlcmlhbCBmcm9tIEFTSUMuCi0KLSAgICBSZXR1cm46Ci0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBBc2ljUmVtb3ZlUGFpcndpc2VLZXlFbnRyeShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJdTggQnNzSWR4LCB1OCBXY2lkKQotewotCXVuc2lnbmVkIGxvbmcgV0NJREF0dHJpOwotCXUxNiBvZmZzZXQ7Ci0KLQkvKiByZS1zZXQgdGhlIGVudHJ5J3MgV0NJRCBhdHRyaWJ1dGUgYXMgT1BFTi1OT05FLiAqLwotCW9mZnNldCA9IE1BQ19XQ0lEX0FUVFJJQlVURV9CQVNFICsgKFdjaWQgKiBIV19XQ0lEX0FUVFJJX1NJWkUpOwotCVdDSURBdHRyaSA9IChCc3NJZHggPDwgNCkgfCBQQUlSV0lTRUtFWVRBQkxFOwotCVJUTVBfSU9fV1JJVEUzMihwQWQsIG9mZnNldCwgV0NJREF0dHJpKTsKLX0KLQotQk9PTEVBTiBBc2ljU2VuZENvbW1hbmRUb01jdShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgIHU4IENvbW1hbmQsCi0JCQkgICAgIHU4IFRva2VuLCB1OCBBcmcwLCB1OCBBcmcxKQotewotCi0JaWYgKHBBZC0+Y2hpcE9wcy5zZW5kQ29tbWFuZFRvTWN1KQotCQlwQWQtPmNoaXBPcHMuc2VuZENvbW1hbmRUb01jdShwQWQsIENvbW1hbmQsIFRva2VuLCBBcmcwLCBBcmcxKTsKLQotCXJldHVybiBUUlVFOwotfQotCi12b2lkIEFzaWNTZXRSeEFudChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHU4IEFudCkKLXsKLSNpZmRlZiBSVDMweHgKLQkvKiBSVDM1NzIgQVRFIG5lZWQgbm90IHRvIGRvIHRoaXMuICovCi0JUlQzMHh4U2V0UnhBbnQocEFkLCBBbnQpOwotI2VuZGlmIC8qIFJUMzB4eCAvLyAqLwotfQotCi12b2lkIEFzaWNUdXJuT2ZmUkZDbGsoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1OCBDaGFubmVsKQotewotCWlmIChwQWQtPmNoaXBPcHMuQXNpY1JmVHVybk9mZikgewotCQlwQWQtPmNoaXBPcHMuQXNpY1JmVHVybk9mZihwQWQpOwotCX0gZWxzZSB7Ci0JCS8qIFJGIFIyIGJpdCAxOCA9IDAgKi8KLQkJdTMyIFIxID0gMCwgUjIgPSAwLCBSMyA9IDA7Ci0JCXU4IGluZGV4OwotCQlzdHJ1Y3QgcnRfcnRtcF9yZl9yZWdzICpSRlJlZ1RhYmxlOwotCi0JCVJGUmVnVGFibGUgPSBSRjI4NTBSZWdUYWJsZTsKLQotCQlzd2l0Y2ggKHBBZC0+UmZJY1R5cGUpIHsKLQkJY2FzZSBSRklDXzI4MjA6Ci0JCWNhc2UgUkZJQ18yODUwOgotCQljYXNlIFJGSUNfMjcyMDoKLQkJY2FzZSBSRklDXzI3NTA6Ci0KLQkJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE5VTV9PRl8yODUwX0NITkw7IGluZGV4KyspIHsKLQkJCQlpZiAoQ2hhbm5lbCA9PSBSRlJlZ1RhYmxlW2luZGV4XS5DaGFubmVsKSB7Ci0JCQkJCVIxID0gUkZSZWdUYWJsZVtpbmRleF0uUjEgJiAweGZmZmZkZmZmOwotCQkJCQlSMiA9IFJGUmVnVGFibGVbaW5kZXhdLlIyICYgMHhmZmZiZmZmZjsKLQkJCQkJUjMgPSBSRlJlZ1RhYmxlW2luZGV4XS5SMyAmIDB4ZmZmM2ZmZmY7Ci0KLQkJCQkJUlRNUF9SRl9JT19XUklURTMyKHBBZCwgUjEpOwotCQkJCQlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCBSMik7Ci0KLQkJCQkJLyogUHJvZ3JhbSBSMWIxMyB0byAxLCBSMy9iMTgsMTkgdG8gMCwgUjJiMTggdG8gMC4gKi8KLQkJCQkJLyogU2V0IFJGIFIyIGJpdDE4PTAsIFIzIGJpdFsxODoxOV09MCAqLwotCQkJCQkvKmlmIChwQWQtPlN0YUNmZy5iUmFkaW8gPT0gRkFMU0UpICovCi0JCQkJCWlmICgxKSB7Ci0JCQkJCQlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCBSMyk7Ci0KLQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkJCSAoIkFzaWNUdXJuT2ZmUkZDbGsjJWQoUkY9JWQsICkgLCBSMj0weCUwOHgsICBSMyA9IDB4JTA4eCBcbiIsCi0JCQkJCQkJICBDaGFubmVsLAotCQkJCQkJCSAgcEFkLT5SZkljVHlwZSwgUjIsCi0JCQkJCQkJICBSMykpOwotCQkJCQl9IGVsc2UKLQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkJCSAoIkFzaWNUdXJuT2ZmUkZDbGsjJWQoUkY9JWQsICkgLCBSMj0weCUwOHggXG4iLAotCQkJCQkJCSAgQ2hhbm5lbCwKLQkJCQkJCQkgIHBBZC0+UmZJY1R5cGUsIFIyKSk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCX0KLX0KLQotdm9pZCBBc2ljVHVybk9uUkZDbGsoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1OCBDaGFubmVsKQotewotCS8qIFJGIFIyIGJpdCAxOCA9IDAgKi8KLQl1MzIgUjEgPSAwLCBSMiA9IDAsIFIzID0gMDsKLQl1OCBpbmRleDsKLQlzdHJ1Y3QgcnRfcnRtcF9yZl9yZWdzICpSRlJlZ1RhYmxlOwotCi0jaWZkZWYgUENJRV9QU19TVVBQT1JUCi0JLyogVGhlIFJGIHByb2dyYW1taW5nIHNlcXVlbmNlIGlzIGRpZmZlcmVuY2UgYmV0d2VlbiAzeHh4IGFuZCAyeHh4ICovCi0JaWYgKChJU19SVDMwOTAocEFkKSB8fCBJU19SVDM1NzIocEFkKSB8fCBJU19SVDMzOTAocEFkKSkpIHsKLQkJcmV0dXJuOwotCX0KLSNlbmRpZiAvKiBQQ0lFX1BTX1NVUFBPUlQgLy8gKi8KLQotCVJGUmVnVGFibGUgPSBSRjI4NTBSZWdUYWJsZTsKLQotCXN3aXRjaCAocEFkLT5SZkljVHlwZSkgewotCWNhc2UgUkZJQ18yODIwOgotCWNhc2UgUkZJQ18yODUwOgotCWNhc2UgUkZJQ18yNzIwOgotCWNhc2UgUkZJQ18yNzUwOgotCi0JCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE5VTV9PRl8yODUwX0NITkw7IGluZGV4KyspIHsKLQkJCWlmIChDaGFubmVsID09IFJGUmVnVGFibGVbaW5kZXhdLkNoYW5uZWwpIHsKLQkJCQlSMyA9IHBBZC0+TGF0Y2hSZlJlZ3MuUjM7Ci0JCQkJUjMgJj0gMHhmZmYzZmZmZjsKLQkJCQlSMyB8PSAweDAwMDgwMDAwOwotCQkJCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsIFIzKTsKLQotCQkJCVIxID0gUkZSZWdUYWJsZVtpbmRleF0uUjE7Ci0JCQkJUlRNUF9SRl9JT19XUklURTMyKHBBZCwgUjEpOwotCi0JCQkJUjIgPSBSRlJlZ1RhYmxlW2luZGV4XS5SMjsKLQkJCQlpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCA9PSAxKSB7Ci0JCQkJCVIyIHw9IDB4NDAwMDsJLyogSWYgVFhwYXRoIGlzIDEsIGJpdCAxNCA9IDE7ICovCi0JCQkJfQotCi0JCQkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMikgewotCQkJCQlSMiB8PSAweDQwOwkvKiB3cml0ZSAxIHRvIG9mZiBSeHBhdGguICovCi0JCQkJfSBlbHNlIGlmIChwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID09IDEpIHsKLQkJCQkJUjIgfD0gMHgyMDA0MDsJLyogd3JpdGUgMSB0byBvZmYgUnhQYXRoICovCi0JCQkJfQotCQkJCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsIFIyKTsKLQotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQXNpY1R1cm5PblJGQ2xrIyVkKFJGPSVkLCApICwgUjI9MHglMDh4XG4iLAotCQkJCSAgQ2hhbm5lbCwgcEFkLT5SZkljVHlwZSwgUjIpKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9jZmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9jZmcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI3Zjc5OTIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2NmZy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjU4ICswLDAgQEAKLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUmFsaW5rIFRlY2ggSW5jLgotICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAotICogSHNpbmNodSBDb3VudHkgMzAyLAotICogVGFpd2FuLCBSLk8uQy4KLSAqCi0gKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0gICAgTW9kdWxlIE5hbWU6Ci0JY21tX2NmZy5jCi0KLSAgICBBYnN0cmFjdDoKLSAgICBSYWxpbmsgV2lGaSBEcml2ZXIgY29uZmlndXJhdGlvbiByZWxhdGVkIHN1YnJvdXRpbmVzCi0KLSAgICBSZXZpc2lvbiBIaXN0b3J5OgotICAgIFdobyAgICAgICAgICBXaGVuICAgICAgICAgIFdoYXQKLSAgICAtLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotCi0jaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCi0KLWNoYXIgKkdldFBoeU1vZGUoaW50IE1vZGUpCi17Ci0Jc3dpdGNoIChNb2RlKSB7Ci0JY2FzZSBNT0RFX0NDSzoKLQkJcmV0dXJuICJDQ0siOwotCi0JY2FzZSBNT0RFX09GRE06Ci0JCXJldHVybiAiT0ZETSI7Ci0JY2FzZSBNT0RFX0hUTUlYOgotCQlyZXR1cm4gIkhUTUlYIjsKLQotCWNhc2UgTU9ERV9IVEdSRUVORklFTEQ6Ci0JCXJldHVybiAiR1JFRU4iOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAiTi9BIjsKLQl9Ci19Ci0KLWNoYXIgKkdldEJXKGludCBCVykKLXsKLQlzd2l0Y2ggKEJXKSB7Ci0JY2FzZSBCV18xMDoKLQkJcmV0dXJuICIxME0iOwotCi0JY2FzZSBCV18yMDoKLQkJcmV0dXJuICIyME0iOwotCWNhc2UgQldfNDA6Ci0JCXJldHVybiAiNDBNIjsKLQlkZWZhdWx0OgotCQlyZXR1cm4gIk4vQSI7Ci0JfQotfQotCi0vKgotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgRGVzY3JpcHRpb246Ci0gICAgICAgIFNldCBDb3VudHJ5IFJlZ2lvbiB0byBwQWQtPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uLgotICAgICAgICBUaGlzIGNvbW1hbmQgd2lsbCBub3Qgd29yaywgaWYgdGhlIGZpZWxkIG9mIENvdW50cnlSZWdpb24gaW4gZWVwcm9tIGlzIHByb2dyYW1tZWQuCi0KLSAgICBSZXR1cm46Ci0gICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLWludCBSVF9DZmdTZXRDb3VudHJ5UmVnaW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgY2hhciAqYXJnLCBpbnQgYmFuZCkKLXsKLQlsb25nIHJlZ2lvbiwgcmVnaW9uTWF4OwotCXU4ICpwQ291bnRyeVJlZ2lvbjsKLQotCXJlZ2lvbiA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7Ci0KLQlpZiAoYmFuZCA9PSBCQU5EXzI0RykgewotCQlwQ291bnRyeVJlZ2lvbiA9ICZwQWQtPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uOwotCQlyZWdpb25NYXggPSBSRUdJT05fTUFYSU1VTV9CR19CQU5EOwotCX0gZWxzZSB7Ci0JCXBDb3VudHJ5UmVnaW9uID0gJnBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlSZWdpb25Gb3JBQmFuZDsKLQkJcmVnaW9uTWF4ID0gUkVHSU9OX01BWElNVU1fQV9CQU5EOwotCX0KLQotCS8qIFRPRE86IElzIGl0IG5lY2Nlc2F5IGZvciBmb2xsb3dpbmcgY2hlY2s/Pz8gKi8KLQkvKiBDb3VudHJ5IGNhbiBiZSBzZXQgb25seSB3aGVuIEVFUFJPTSBub3QgcHJvZ3JhbW1lZCAqLwotCWlmICgqcENvdW50cnlSZWdpb24gJiAweDgwKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJICgiQ2ZnU2V0Q291bnRyeVJlZ2lvbigpOkNvdW50cnlSZWdpb24gaW4gZWVwcm9tIHdhcyBwcm9ncmFtbWVkXG4iKSk7Ci0JCXJldHVybiBGQUxTRTsKLQl9Ci0KLQlpZiAoKHJlZ2lvbiA+PSAwKSAmJiAocmVnaW9uIDw9IFJFR0lPTl9NQVhJTVVNX0JHX0JBTkQpKSB7Ci0JCSpwQ291bnRyeVJlZ2lvbiA9ICh1OClyZWdpb247Ci0JfSBlbHNlIGlmICgocmVnaW9uID09IFJFR0lPTl8zMV9CR19CQU5EKSAmJiAoYmFuZCA9PSBCQU5EXzI0RykpIHsKLQkJKnBDb3VudHJ5UmVnaW9uID0gKHU4KXJlZ2lvbjsKLQl9IGVsc2UgewotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCSAoIkNmZ1NldENvdW50cnlSZWdpb24oKTpyZWdpb24oJWxkKSBvdXQgb2YgcmFuZ2UhXG4iLAotCQkJICByZWdpb24pKTsKLQkJcmV0dXJuIEZBTFNFOwotCX0KLQotCXJldHVybiBUUlVFOwotCi19Ci0KLS8qCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBEZXNjcmlwdGlvbjoKLSAgICAgICAgU2V0IFdpcmVsZXNzIE1vZGUKLSAgICBSZXR1cm46Ci0gICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLWludCBSVF9DZmdTZXRXaXJlbGVzc01vZGUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBjaGFyICphcmcpCi17Ci0JaW50IE1heFBoeU1vZGUgPSBQSFlfMTFHOwotCWxvbmcgV2lyZWxlc3NNb2RlOwotCi0JTWF4UGh5TW9kZSA9IFBIWV8xMU5fNUc7Ci0KLQlXaXJlbGVzc01vZGUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOwotCWlmIChXaXJlbGVzc01vZGUgPD0gTWF4UGh5TW9kZSkgewotCQlwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID0gV2lyZWxlc3NNb2RlOwotCQlyZXR1cm4gVFJVRTsKLQl9Ci0KLQlyZXR1cm4gRkFMU0U7Ci0KLX0KLQotaW50IFJUX0NmZ1NldFNob3J0U2xvdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIGNoYXIgKmFyZykKLXsKLQlsb25nIFNob3J0U2xvdDsKLQotCVNob3J0U2xvdCA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7Ci0KLQlpZiAoU2hvcnRTbG90ID09IDEpCi0JCXBBZC0+Q29tbW9uQ2ZnLmJVc2VTaG9ydFNsb3RUaW1lID0gVFJVRTsKLQllbHNlIGlmIChTaG9ydFNsb3QgPT0gMCkKLQkJcEFkLT5Db21tb25DZmcuYlVzZVNob3J0U2xvdFRpbWUgPSBGQUxTRTsKLQllbHNlCi0JCXJldHVybiBGQUxTRTsJLypJbnZhbGlkIGFyZ3VtZW50ICovCi0KLQlyZXR1cm4gVFJVRTsKLX0KLQotLyoKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIERlc2NyaXB0aW9uOgotICAgICAgICBTZXQgV0VQIEtFWSBiYXNlIG9uIEtleUlkeAotICAgIFJldHVybjoKLSAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotaW50IFJUX0NmZ1NldFdlcEtleShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgICBjaGFyICprZXlTdHJpbmcsCi0JCSAgICBzdHJ1Y3QgcnRfY2lwaGVyX2tleSAqcFNoYXJlZEtleSwgaW50IGtleUlkeCkKLXsKLQlpbnQgS2V5TGVuOwotCWludCBpOwotCXU4IENpcGhlckFsZyA9IENJUEhFUl9OT05FOwotCUJPT0xFQU4gYktleUlzSGV4ID0gRkFMU0U7Ci0KLQkvKiBUT0RPOiBTaGFsbCB3ZSBkbyBtZW1zZXQgZm9yIHRoZSBvcmlnaW5hbCBrZXkgaW5mbz8/ICovCi0JbWVtc2V0KHBTaGFyZWRLZXksIDAsIHNpemVvZihzdHJ1Y3QgcnRfY2lwaGVyX2tleSkpOwotCUtleUxlbiA9IHN0cmxlbihrZXlTdHJpbmcpOwotCXN3aXRjaCAoS2V5TGVuKSB7Ci0JY2FzZSA1OgkJLyp3ZXAgNDAgQXNjaWkgdHlwZSAqLwotCWNhc2UgMTM6CQkvKndlcCAxMDQgQXNjaWkgdHlwZSAqLwotCQliS2V5SXNIZXggPSBGQUxTRTsKLQkJcFNoYXJlZEtleS0+S2V5TGVuID0gS2V5TGVuOwotCQlOZGlzTW92ZU1lbW9yeShwU2hhcmVkS2V5LT5LZXksIGtleVN0cmluZywgS2V5TGVuKTsKLQkJYnJlYWs7Ci0KLQljYXNlIDEwOgkJLyp3ZXAgNDAgSGV4IHR5cGUgKi8KLQljYXNlIDI2OgkJLyp3ZXAgMTA0IEhleCB0eXBlICovCi0JCWZvciAoaSA9IDA7IGkgPCBLZXlMZW47IGkrKykgewotCQkJaWYgKCFpc3hkaWdpdCgqKGtleVN0cmluZyArIGkpKSkKLQkJCQlyZXR1cm4gRkFMU0U7CS8qTm90IEhleCB2YWx1ZTsgKi8KLQkJfQotCQliS2V5SXNIZXggPSBUUlVFOwotCQlwU2hhcmVkS2V5LT5LZXlMZW4gPSBLZXlMZW4gLyAyOwotCQlBdG9IKGtleVN0cmluZywgcFNoYXJlZEtleS0+S2V5LCBwU2hhcmVkS2V5LT5LZXlMZW4pOwotCQlicmVhazsKLQotCWRlZmF1bHQ6CQkvKkludmFsaWQgYXJndW1lbnQgKi8KLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJSVF9DZmdTZXRXZXBLZXkoa2V5SWR4PSVkKTpJbnZhbGlkIGFyZ3VtZW50IChhcmc9JXMpXG4iLAotCQkJICBrZXlJZHgsIGtleVN0cmluZykpOwotCQlyZXR1cm4gRkFMU0U7Ci0JfQotCi0JcFNoYXJlZEtleS0+Q2lwaGVyQWxnID0gKChLZXlMZW4gJSA1KSA/IENJUEhFUl9XRVAxMjggOiBDSVBIRVJfV0VQNjQpOwotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCJSVF9DZmdTZXRXZXBLZXk6KEtleUlkeD0lZCx0eXBlPSVzLCBBbGc9JXMpXG4iLCBrZXlJZHgsCi0JCSAgKGJLZXlJc0hleCA9PSBGQUxTRSA/ICJBc2NpaSIgOiAiSGV4IiksCi0JCSAgQ2lwaGVyTmFtZVtDaXBoZXJBbGddKSk7Ci0KLQlyZXR1cm4gVFJVRTsKLX0KLQotLyoKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIERlc2NyaXB0aW9uOgotICAgICAgICBTZXQgV1BBIFBTSyBrZXkKLQotICAgIEFyZ3VtZW50czoKLSAgICAgICAgcEFkYXB0ZXIJUG9pbnRlciB0byBvdXIgYWRhcHRlcgotICAgICAgICBrZXlTdHJpbmcJV1BBIHByZS1zaGFyZWQga2V5IHN0cmluZwotICAgICAgICBwSGFzaFN0cglTdHJpbmcgdXNlZCBmb3IgcGFzc3dvcmQgaGFzaCBmdW5jdGlvbgotICAgICAgICBoYXNoU3RyTGVuCUxlbmd0aCBvZiB0aGUgaGFzaCBzdHJpbmcKLSAgICAgICAgcFBNS0J1ZgkJT3V0cHV0IGJ1ZmZlciBvZiBXUEFQU0sga2V5Ci0KLSAgICBSZXR1cm46Ci0gICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLWludCBSVF9DZmdTZXRXUEFQU0tLZXkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICAgICAgY2hhciAqa2V5U3RyaW5nLAotCQkgICAgICAgdTggKiBwSGFzaFN0ciwKLQkJICAgICAgIGludCBoYXNoU3RyTGVuLCB1OCAqcFBNS0J1ZikKLXsKLQlpbnQga2V5TGVuOwotCXU4IGtleU1hdGVyaWFsWzQwXTsKLQotCWtleUxlbiA9IHN0cmxlbihrZXlTdHJpbmcpOwotCWlmICgoa2V5TGVuIDwgOCkgfHwgKGtleUxlbiA+IDY0KSkgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIldQQVBTSyBLZXkgbGVuZ3RoKCVkKSBlcnJvciwgcmVxdWlyZWQgOCB+IDY0IGNoYXJhY3RlcnMhKGtleVN0cj0lcylcbiIsCi0JCQkgIGtleUxlbiwga2V5U3RyaW5nKSk7Ci0JCXJldHVybiBGQUxTRTsKLQl9Ci0KLQltZW1zZXQocFBNS0J1ZiwgMCwgMzIpOwotCWlmIChrZXlMZW4gPT0gNjQpIHsKLQkJQXRvSChrZXlTdHJpbmcsIHBQTUtCdWYsIDMyKTsKLQl9IGVsc2UgewotCQlQYXNzd29yZEhhc2goa2V5U3RyaW5nLCBwSGFzaFN0ciwgaGFzaFN0ckxlbiwga2V5TWF0ZXJpYWwpOwotCQlOZGlzTW92ZU1lbW9yeShwUE1LQnVmLCBrZXlNYXRlcmlhbCwgMzIpOwotCX0KLQotCXJldHVybiBUUlVFOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGEuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9kYXRhLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzNzk5ZTEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGEuYworKysgL2Rldi9udWxsCkBAIC0xLDIzNjEgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qLwotCi0jaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCi0KLXU4IFNOQVBfODAyXzFIW10gPSB7IDB4YWEsIDB4YWEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAgfTsKLXU4IFNOQVBfQlJJREdFX1RVTk5FTFtdID0geyAweGFhLCAweGFhLCAweDAzLCAweDAwLCAweDAwLCAweGY4IH07Ci0KLS8qIEFkZCBDaXNjbyBBaXJvbmV0IFNOQVAgaGVhZGUgZm9yIENDWDIgc3VwcG9ydCAqLwotdTggU05BUF9BSVJPTkVUW10gPSB7IDB4YWEsIDB4YWEsIDB4MDMsIDB4MDAsIDB4NDAsIDB4OTYsIDB4MDAsIDB4MDAgfTsKLXU4IENLSVBfTExDX1NOQVBbXSA9IHsgMHhhYSwgMHhhYSwgMHgwMywgMHgwMCwgMHg0MCwgMHg5NiwgMHgwMCwgMHgwMiB9OwotdTggRUFQT0xfTExDX1NOQVBbXSA9IHsgMHhhYSwgMHhhYSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4ZSB9OwotdTggRUFQT0xbXSA9IHsgMHg4OCwgMHg4ZSB9OwotdTggVFBJRFtdID0geyAweDgxLCAweDAwIH07CS8qIFZMQU4gcmVsYXRlZCAqLwotCi11OCBJUFhbXSA9IHsgMHg4MSwgMHgzNyB9OwotdTggQVBQTEVfVEFMS1tdID0geyAweDgwLCAweGYzIH07Ci0KLXU4IFJhdGVJZFRvUGxjcFNpZ25hbFsxMl0gPSB7Ci0JMCwgLyogUkFURV8xICovIDEsIC8qIFJBVEVfMiAqLyAyLCAvKiBSQVRFXzVfNSAqLyAzLAkvKiBSQVRFXzExICovLyogc2VlIEJCUCBzcGVjICovCi0JMTEsIC8qIFJBVEVfNiAqLyAxNSwgLyogUkFURV85ICovIDEwLCAvKiBSQVRFXzEyICovIDE0LAkvKiBSQVRFXzE4ICovLyogc2VlIElFRUU4MDIuMTFhLTE5OTkgcC4xNCAqLwotCTksIC8qIFJBVEVfMjQgKi8gMTMsIC8qIFJBVEVfMzYgKi8gOCwgLyogUkFURV80OCAqLyAxMiAvKiBSQVRFXzU0ICovCi19OwkJCQkvKiBzZWUgSUVFRTgwMi4xMWEtMTk5OSBwLjE0ICovCi0KLXU4IE9mZG1TaWduYWxUb1JhdGVJZFsxNl0gPSB7Ci0JUkFURV81NCwgUkFURV81NCwgUkFURV81NCwgUkFURV81NCwJLyogT0ZETSBQTENQIFNpZ25hbCA9IDAsICAxLCAgMiwgIDMgcmVzcGVjdGl2ZWx5ICovCi0JUkFURV81NCwgUkFURV81NCwgUkFURV81NCwgUkFURV81NCwJLyogT0ZETSBQTENQIFNpZ25hbCA9IDQsICA1LCAgNiwgIDcgcmVzcGVjdGl2ZWx5ICovCi0JUkFURV80OCwgUkFURV8yNCwgUkFURV8xMiwgUkFURV82LAkvKiBPRkRNIFBMQ1AgU2lnbmFsID0gOCwgIDksICAxMCwgMTEgcmVzcGVjdGl2ZWx5ICovCi0JUkFURV81NCwgUkFURV8zNiwgUkFURV8xOCwgUkFURV85LAkvKiBPRkRNIFBMQ1AgU2lnbmFsID0gMTIsIDEzLCAxNCwgMTUgcmVzcGVjdGl2ZWx5ICovCi19OwotCi11OCBPZmRtUmF0ZVRvUnh3aU1DU1sxMl0gPSB7Ci0JMCwgMCwgMCwgMCwKLQkwLCAxLCAyLCAzLAkJLyogT0ZETSByYXRlIDYsOSwxMiwxOCA9IHJ4d2kgbWNzIDAsMSwyLDMgKi8KLQk0LCA1LCA2LCA3LAkJLyogT0ZETSByYXRlIDI0LDM2LDQ4LDU0ID0gcnh3aSBtY3MgNCw1LDYsNyAqLwotfTsKLQotdTggUnh3aU1DU1RvT2ZkbVJhdGVbMTJdID0gewotCVJBVEVfNiwgUkFURV85LCBSQVRFXzEyLCBSQVRFXzE4LAotCVJBVEVfMjQsIFJBVEVfMzYsIFJBVEVfNDgsIFJBVEVfNTQsCS8qIE9GRE0gcmF0ZSA2LDksMTIsMTggPSByeHdpIG1jcyAwLDEsMiwzICovCi0JNCwgNSwgNiwgNywJCS8qIE9GRE0gcmF0ZSAyNCwzNiw0OCw1NCA9IHJ4d2kgbWNzIDQsNSw2LDcgKi8KLX07Ci0KLWNoYXIgKk1DU1RvTWJwc1tdID0KLSAgICB7ICIxTWJwcyIsICIyTWJwcyIsICI1LjVNYnBzIiwgIjExTWJwcyIsICIwNk1icHMiLCAiMDlNYnBzIiwgIjEyTWJwcyIsCi0iMThNYnBzIiwgIjI0TWJwcyIsICIzNk1icHMiLCAiNDhNYnBzIiwgIjU0TWJwcyIsICJNTS0wIiwgIk1NLTEiLCAiTU0tMiIsICJNTS0zIiwKLSJNTS00IiwgIk1NLTUiLCAiTU0tNiIsICJNTS03IiwgIk1NLTgiLCAiTU0tOSIsICJNTS0xMCIsICJNTS0xMSIsICJNTS0xMiIsICJNTS0xMyIsCi0iTU0tMTQiLCAiTU0tMTUiLCAiTU0tMzIiLCAiZWUxIiwgImVlMiIsICJlZTMiIH07Ci0KLXU4IGRlZmF1bHRfY3dtaW5bXSA9Ci0gICAgeyBDV19NSU5fSU5fQklUUywgQ1dfTUlOX0lOX0JJVFMsIENXX01JTl9JTl9CSVRTIC0gMSwgQ1dfTUlOX0lOX0JJVFMgLSAyIH07Ci0vKnU4IGRlZmF1bHRfY3dtYXhbXT17Q1dfTUFYX0lOX0JJVFMsIENXX01BWF9JTl9CSVRTLCBDV19NSU5fSU5fQklUUywgQ1dfTUlOX0lOX0JJVFMtMX07ICovCi11OCBkZWZhdWx0X3N0YV9haWZzbltdID0geyAzLCA3LCAyLCAyIH07Ci0KLXU4IE1hcFVzZXJQcmlvcml0eVRvQWNjZXNzQ2F0ZWdvcnlbOF0gPQotICAgIHsgUUlEX0FDX0JFLCBRSURfQUNfQkssIFFJRF9BQ19CSywgUUlEX0FDX0JFLCBRSURfQUNfVkksIFFJRF9BQ19WSSwKLVFJRF9BQ19WTywgUUlEX0FDX1ZPIH07Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCQlBUEkgZm9yIE1MTUUgdG8gdHJhbnNtaXQgbWFuYWdlbWVudCBmcmFtZSB0byBBUCAoQlNTIE1vZGUpCi0Jb3Igc3RhdGlvbiAoSUJTUyBNb2RlKQotCi0JQXJndW1lbnRzOgotCQlwQWQgUG9pbnRlciB0byBvdXIgYWRhcHRlcgotCQlwRGF0YQkJUG9pbnRlciB0byB0aGUgb3V0Z29pbmcgODAyLjExIGZyYW1lCi0JCUxlbmd0aAkJU2l6ZSBvZiBvdXRnb2luZyBtYW5hZ2VtZW50IGZyYW1lCi0KLQlSZXR1cm4gVmFsdWU6Ci0JCU5ESVNfU1RBVFVTX0ZBSUxVUkUKLQkJTkRJU19TVEFUVVNfUEVORElORwotCQlORElTX1NUQVRVU19TVUNDRVNTCi0KLQlJUlFMID0gUEFTU0lWRV9MRVZFTAotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0JTm90ZToKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLWludCBNaW5pcG9ydE1NUmVxdWVzdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgICB1OCBRdWVJZHgsIHU4ICpwRGF0YSwgdTMyIExlbmd0aCkKLXsKLQl2b2lkICpwUGFja2V0OwotCWludCBTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOwotCXVuc2lnbmVkIGxvbmcgRnJlZU51bTsKLQl1OCBydG1wSHdIZHJbVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkVdOwkvKlJUTVBfSFdfSERSX0xFTl07ICovCi0jaWZkZWYgUlRNUF9NQUNfUENJCi0JdW5zaWduZWQgbG9uZyBJcnFGbGFncyA9IDA7Ci0JdTggSXJxU3RhdGU7Ci0jZW5kaWYgLyogUlRNUF9NQUNfUENJIC8vICovCi0JQk9PTEVBTiBiVXNlRGF0YVEgPSBGQUxTRTsKLQlpbnQgcmV0cnlDbnQgPSAwOwotCi0JQVNTRVJUKExlbmd0aCA8PSBNR01UX0RNQV9CVUZGRVJfU0laRSk7Ci0KLQlpZiAoKFF1ZUlkeCAmIE1HTVRfVVNFX1FVRVVFX0ZMQUcpID09IE1HTVRfVVNFX1FVRVVFX0ZMQUcpIHsKLQkJYlVzZURhdGFRID0gVFJVRTsKLQkJUXVlSWR4ICY9ICh+TUdNVF9VU0VfUVVFVUVfRkxBRyk7Ci0JfQotI2lmZGVmIFJUTVBfTUFDX1BDSQotCS8qIDI4NjBDIHVzZSBUeCBSaW5nICovCi0JSXJxU3RhdGUgPSBwQWQtPmlycV9kaXNhYmxlZDsKLQlpZiAocEFkLT5NQUNWZXJzaW9uID09IDB4Mjg2MDAxMDApIHsKLQkJUXVlSWR4ID0gKGJVc2VEYXRhUSA9PSBUUlVFID8gUXVlSWR4IDogMyk7Ci0JCWJVc2VEYXRhUSA9IFRSVUU7Ci0JfQotCWlmIChiVXNlRGF0YVEgJiYgKCFJcnFTdGF0ZSkpCi0JCVJUTVBfSVJRX0xPQ0soJnBBZC0+aXJxX2xvY2ssIElycUZsYWdzKTsKLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLQotCWRvIHsKLQkJLyogUmVzZXQgaXMgaW4gcHJvZ3Jlc3MsIHN0b3AgaW1tZWRpYXRlbHkgKi8KLQkJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUykgfHwKLQkJICAgIFJUTVBfVEVTVF9GTEFHKHBBZCwKLQkJCQkgICBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfAotCQkJCSAgIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkKLQkJICAgIHx8ICFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfU1RBUlRfVVApKSB7Ci0JCQlTdGF0dXMgPSBORElTX1NUQVRVU19GQUlMVVJFOwotCQkJYnJlYWs7Ci0JCX0KLQkJLyogQ2hlY2sgRnJlZSBwcmlvcml0eSBxdWV1ZSAqLwotCQkvKiBTaW5jZSB3ZSB1c2UgUEJGIFF1ZXVlMiBmb3IgbWFuYWdlbWVudCBmcmFtZS4gIEl0cyBjb3JyZXNwb25kaW5nIERNQSByaW5nIHNob3VsZCBiZSB1c2luZyBUeFJpbmcuICovCi0jaWZkZWYgUlRNUF9NQUNfUENJCi0JCWlmIChiVXNlRGF0YVEpIHsKLQkJCXJldHJ5Q250ID0gTUFYX0RBVEFNTV9SRVRSWTsKLQkJCS8qIGZyZWUgVHgoUXVlSWR4KSByZXNvdXJjZXMgKi8KLQkJCVJUTVBGcmVlVFhEVXBvblR4RG1hRG9uZShwQWQsIFF1ZUlkeCk7Ci0JCQlGcmVlTnVtID0gR0VUX1RYUklOR19GUkVFTk8ocEFkLCBRdWVJZHgpOwotCQl9IGVsc2UKLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLQkJewotCQkJRnJlZU51bSA9IEdFVF9NR01UUklOR19GUkVFTk8ocEFkKTsKLQkJfQotCi0JCWlmICgoRnJlZU51bSA+IDApKSB7Ci0JCQkvKiBXZSBuZWVkIHRvIHJlc2VydmUgc3BhY2UgZm9yIHJ0bXAgaGFyZHdhcmUgaGVhZGVyLiBpLmUuLCBUeFdJIGZvciBSVDI4NjAgYW5kIFR4SW5mbytUeFdJIGZvciBSVDI4NzAgKi8KLQkJCU5kaXNaZXJvTWVtb3J5KCZydG1wSHdIZHIsIChUWElORk9fU0laRSArIFRYV0lfU0laRSkpOwotCQkJU3RhdHVzID0KLQkJCSAgICBSVE1QQWxsb2NhdGVOZGlzUGFja2V0KHBBZCwgJnBQYWNrZXQsCi0JCQkJCQkgICAodTggKikmIHJ0bXBId0hkciwKLQkJCQkJCSAgIChUWElORk9fU0laRSArIFRYV0lfU0laRSksCi0JCQkJCQkgICBwRGF0YSwgTGVuZ3RoKTsKLQkJCWlmIChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykgewotCQkJCURCR1BSSU5UKFJUX0RFQlVHX1dBUk4sCi0JCQkJCSAoIk1pbmlwb3J0TU1SZXF1ZXN0IChlcnJvcjo6IGNhbid0IGFsbG9jYXRlIE5ESVMgUEFDS0VUKVxuIikpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJLypwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTU9ERSA9IE1PREVfQ0NLOyAqLwotCQkJLypwQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZSA9IFJBVEVfMjsgKi8KLQotI2lmZGVmIFJUTVBfTUFDX1BDSQotCQkJaWYgKGJVc2VEYXRhUSkgewotCQkJCVN0YXR1cyA9Ci0JCQkJICAgIE1sbWVEYXRhSGFyZFRyYW5zbWl0KHBBZCwgUXVlSWR4LCBwUGFja2V0KTsKLQkJCQlyZXRyeUNudC0tOwotCQkJfSBlbHNlCi0jZW5kaWYgLyogUlRNUF9NQUNfUENJIC8vICovCi0JCQkJU3RhdHVzID0gTWxtZUhhcmRUcmFuc21pdChwQWQsIFF1ZUlkeCwgcFBhY2tldCk7Ci0JCQlpZiAoU3RhdHVzID09IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCi0JCQkJcmV0cnlDbnQgPSAwOwotCQkJZWxzZQotCQkJCVJUTVBGcmVlTmRpc1BhY2tldChwQWQsIHBQYWNrZXQpOwotCQl9IGVsc2UgewotCQkJcEFkLT5SYWxpbmtDb3VudGVycy5NZ210UmluZ0Z1bGxDb3VudCsrOwotI2lmZGVmIFJUTVBfTUFDX1BDSQotCQkJaWYgKGJVc2VEYXRhUSkgewotCQkJCXJldHJ5Q250LS07Ci0JCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJCSAoInJldHJ5Q250ICVkXG4iLCByZXRyeUNudCkpOwotCQkJCWlmIChyZXRyeUNudCA9PSAwKSB7Ci0JCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJCQkJICgiUWlkeCglZCksIG5vdCBlbm91Z2ggc3BhY2UgaW4gRGF0YVJpbmcsIE1nbXRSaW5nRnVsbENvdW50PSVsZCFcbiIsCi0JCQkJCQkgIFF1ZUlkeCwKLQkJCQkJCSAgcEFkLT5SYWxpbmtDb3VudGVycy4KLQkJCQkJCSAgTWdtdFJpbmdGdWxsQ291bnQpKTsKLQkJCQl9Ci0JCQl9Ci0jZW5kaWYgLyogUlRNUF9NQUNfUENJIC8vICovCi0JCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCQkgKCJRaWR4KCVkKSwgbm90IGVub3VnaCBzcGFjZSBpbiBNZ210UmluZywgTWdtdFJpbmdGdWxsQ291bnQ9JWxkIVxuIiwKLQkJCQkgIFF1ZUlkeCwKLQkJCQkgIHBBZC0+UmFsaW5rQ291bnRlcnMuTWdtdFJpbmdGdWxsQ291bnQpKTsKLQkJfQotCX0gd2hpbGUgKHJldHJ5Q250ID4gMCk7Ci0KLSNpZmRlZiBSVE1QX01BQ19QQ0kKLQlpZiAoYlVzZURhdGFRICYmICghSXJxU3RhdGUpKQotCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+aXJxX2xvY2ssIElycUZsYWdzKTsKLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLQotCXJldHVybiBTdGF0dXM7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCQlDb3B5IGZyYW1lIGZyb20gd2FpdGluZyBxdWV1ZSBpbnRvIHJlbGF0aXZlIHJpbmcgYnVmZmVyIGFuZCBzZXQKLQlhcHByb3ByaWF0ZSBBU0lDIHJlZ2lzdGVyIHRvIGtpY2sgaGFyZHdhcmUgdHJhbnNtaXQgZnVuY3Rpb24KLQotCUFyZ3VtZW50czoKLQkJcEFkIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKLQkJcEJ1ZmZlciAJUG9pbnRlciB0bwltZW1vcnkgb2Ygb3V0Z29pbmcgZnJhbWUKLQkJTGVuZ3RoCQlTaXplIG9mIG91dGdvaW5nIG1hbmFnZW1lbnQgZnJhbWUKLQotCVJldHVybiBWYWx1ZToKLQkJTkRJU19TVEFUVVNfRkFJTFVSRQotCQlORElTX1NUQVRVU19QRU5ESU5HCi0JCU5ESVNfU1RBVFVTX1NVQ0NFU1MKLQotCUlSUUwgPSBQQVNTSVZFX0xFVkVMCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotaW50IE1sbWVIYXJkVHJhbnNtaXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgICB1OCBRdWVJZHgsIHZvaWQgKnBQYWNrZXQpCi17Ci0Jc3RydWN0IHJ0X3BhY2tldF9pbmZvIFBhY2tldEluZm87Ci0JdTggKnBTcmNCdWZWQTsKLQl1MzIgU3JjQnVmTGVuOwotCXN0cnVjdCBydF9oZWFkZXJfODAyXzExICogcEhlYWRlcl84MDJfMTE7Ci0KLQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LlJETW9kZSAhPSBSRF9OT1JNQUxfTU9ERSkKLQkgICAgKSB7Ci0JCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOwotCX0KLQotCVJUTVBfUXVlcnlQYWNrZXRJbmZvKHBQYWNrZXQsICZQYWNrZXRJbmZvLCAmcFNyY0J1ZlZBLCAmU3JjQnVmTGVuKTsKLQlpZiAocFNyY0J1ZlZBID09IE5VTEwpCi0JCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOwotCi0JcEhlYWRlcl84MDJfMTEgPSAoc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEgKikgKHBTcmNCdWZWQSArIFRYSU5GT19TSVpFICsgVFhXSV9TSVpFKTsKLQotI2lmZGVmIFJUTVBfTUFDX1BDSQotCWlmIChwQWQtPk1BQ1ZlcnNpb24gPT0gMHgyODYwMDEwMCkKLQkJcmV0dXJuIE1sbWVIYXJkVHJhbnNtaXRUeFJpbmcocEFkLCBRdWVJZHgsIHBQYWNrZXQpOwotCWVsc2UKLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLQkJcmV0dXJuIE1sbWVIYXJkVHJhbnNtaXRNZ210UmluZyhwQWQsIFF1ZUlkeCwgcFBhY2tldCk7Ci0KLX0KLQotaW50IE1sbWVIYXJkVHJhbnNtaXRNZ210UmluZyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJICAgICB1OCBRdWVJZHgsIHZvaWQgKnBQYWNrZXQpCi17Ci0Jc3RydWN0IHJ0X3BhY2tldF9pbmZvIFBhY2tldEluZm87Ci0JdTggKnBTcmNCdWZWQTsKLQl1MzIgU3JjQnVmTGVuOwotCXN0cnVjdCBydF9oZWFkZXJfODAyXzExICogcEhlYWRlcl84MDJfMTE7Ci0JQk9PTEVBTiBiQWNrUmVxdWlyZWQsIGJJbnNlcnRUaW1lc3RhbXA7Ci0JdTggTWxtZVJhdGU7Ci0Jc3RydWN0IHJ0X3R4d2kgKiBwRmlyc3RUeFdJOwotCXN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKnBNYWNFbnRyeSA9IE5VTEw7Ci0JdTggUElEOwotCi0JUlRNUF9RdWVyeVBhY2tldEluZm8ocFBhY2tldCwgJlBhY2tldEluZm8sICZwU3JjQnVmVkEsICZTcmNCdWZMZW4pOwotCi0JLyogTWFrZSBzdXJlIE1HTVQgcmluZyByZXNvdXJjZSB3b24ndCBiZSB1c2VkIGJ5IG90aGVyIHRocmVhZHMgKi8KLQlSVE1QX1NFTV9MT0NLKCZwQWQtPk1nbXRSaW5nTG9jayk7Ci0JaWYgKHBTcmNCdWZWQSA9PSBOVUxMKSB7Ci0JCS8qIFRoZSBidWZmZXIgc2hvdWxkbid0IGJlIE5VTEwgKi8KLQkJUlRNUF9TRU1fVU5MT0NLKCZwQWQtPk1nbXRSaW5nTG9jayk7Ci0JCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOwotCX0KLQotCXsKLQkJLyogb3V0Z29pbmcgZnJhbWUgYWx3YXlzIHdha2V1cCBQSFkgdG8gcHJldmVudCBmcmFtZSBsb3N0ICovCi0JCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpKQotCQkJQXNpY0ZvcmNlV2FrZXVwKHBBZCwgVFJVRSk7Ci0JfQotCi0JcEZpcnN0VHhXSSA9IChzdHJ1Y3QgcnRfdHh3aSAqKSAocFNyY0J1ZlZBICsgVFhJTkZPX1NJWkUpOwotCXBIZWFkZXJfODAyXzExID0gKHN0cnVjdCBydF9oZWFkZXJfODAyXzExICopIChwU3JjQnVmVkEgKyBUWElORk9fU0laRSArIFRYV0lfU0laRSk7CS8qVFhXSV9TSVpFKTsgKi8KLQotCWlmIChwSGVhZGVyXzgwMl8xMS0+QWRkcjFbMF0gJiAweDAxKSB7Ci0JCU1sbWVSYXRlID0gcEFkLT5Db21tb25DZmcuQmFzaWNNbG1lUmF0ZTsKLQl9IGVsc2UgewotCQlNbG1lUmF0ZSA9IHBBZC0+Q29tbW9uQ2ZnLk1sbWVSYXRlOwotCX0KLQotCS8qIFZlcmlmeSBNbG1lIHJhdGUgZm9yIGEgLyBnIGJhbmRzLiAqLwotCWlmICgocEFkLT5MYXRjaFJmUmVncy5DaGFubmVsID4gMTQpICYmIChNbG1lUmF0ZSA8IFJBVEVfNikpCS8qIDExQSBiYW5kICovCi0JCU1sbWVSYXRlID0gUkFURV82OwotCi0JaWYgKChwSGVhZGVyXzgwMl8xMS0+RkMuVHlwZSA9PSBCVFlQRV9EQVRBKSAmJgotCSAgICAocEhlYWRlcl84MDJfMTEtPkZDLlN1YlR5cGUgPT0gU1VCVFlQRV9RT1NfTlVMTCkpIHsKLQkJcE1hY0VudHJ5ID0gTWFjVGFibGVMb29rdXAocEFkLCBwSGVhZGVyXzgwMl8xMS0+QWRkcjEpOwotCX0KLQotCXsKLQkJLyogRml4ZWQgVzUyIHdpdGggQWN0aXZpdHkgc2NhbiBpc3N1ZSBpbiBBQkdfTUlYRUQgYW5kIEFCR05fTUlYRUQgbW9kZS4gKi8KLQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQUJHX01JWEVECi0JCSAgICB8fCBwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUFCR05fTUlYRUQpIHsKLQkJCWlmIChwQWQtPkxhdGNoUmZSZWdzLkNoYW5uZWwgPiAxNCkKLQkJCQlwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTU9ERSA9IDE7Ci0JCQllbHNlCi0JCQkJcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1PREUgPSAwOwotCQl9Ci0JfQotCi0JLyogKi8KLQkvKiBTaG91bGQgbm90IGJlIGhhcmQgY29kZSB0byBzZXQgUHdyTWdtdCB0byAwIChQV1JfQUNUSVZFKSAqLwotCS8qIFNuaWNlIGl0J3MgYmVlbiBzZXQgdG8gMCB3aGlsZSBvbiBNZ3RNYWNIZWFkZXJJbml0ICovCi0JLyogQnkgdGhlIHdheSB0aGlzIHdpbGwgY2F1c2UgZnJhbWUgdG8gYmUgc2VuZCBvbiBQV1JfU0FWRSBmYWlsZWQuICovCi0JLyogKi8KLQlwSGVhZGVyXzgwMl8xMS0+RkMuUHdyTWdtdCA9IFBXUl9BQ1RJVkU7CS8qIChwQWQtPlN0YUNmZy5Qc20gPT0gUFdSX1NBVkUpOyAqLwotCi0JLyogKi8KLQkvKiBJbiBXTU0tVUFQU0QsIG1sbWUgZnJhbWUgc2hvdWxkIGJlIHNldCBwc20gYXMgcG93ZXIgc2F2aW5nIGJ1dCBwcm9iZSByZXF1ZXN0IGZyYW1lICovCi0JLyogRGF0YS1OdWxsIHBhY2tldHMgYWxzbyBwYXNzIHRocm91Z2ggTU1SZXF1ZXN0IGluIFJUMjg2MCwgaG93ZXZlciwgd2UgaG9wZSBjb250cm9sIHRoZSBwc20gYml0IHRvIHBhc3MgQVBTRCAqLwotLyogICAgICBpZiAoKHBIZWFkZXJfODAyXzExLT5GQy5UeXBlICE9IEJUWVBFX0RBVEEpICYmIChwSGVhZGVyXzgwMl8xMS0+RkMuVHlwZSAhPSBCVFlQRV9DTlRMKSkgKi8KLQl7Ci0JCWlmICgocEhlYWRlcl84MDJfMTEtPkZDLlN1YlR5cGUgPT0gU1VCVFlQRV9BQ1RJT04pIHx8Ci0JCSAgICAoKHBIZWFkZXJfODAyXzExLT5GQy5UeXBlID09IEJUWVBFX0RBVEEpICYmCi0JCSAgICAgKChwSGVhZGVyXzgwMl8xMS0+RkMuU3ViVHlwZSA9PSBTVUJUWVBFX1FPU19OVUxMKSB8fAotCQkgICAgICAocEhlYWRlcl84MDJfMTEtPkZDLlN1YlR5cGUgPT0gU1VCVFlQRV9OVUxMX0ZVTkMpKSkpIHsKLQkJCWlmIChwQWQtPlN0YUNmZy5Qc20gPT0gUFdSX1NBVkUpCi0JCQkJcEhlYWRlcl84MDJfMTEtPkZDLlB3ck1nbXQgPSBQV1JfU0FWRTsKLQkJCWVsc2UKLQkJCQlwSGVhZGVyXzgwMl8xMS0+RkMuUHdyTWdtdCA9Ci0JCQkJICAgIHBBZC0+Q29tbW9uQ2ZnLmJBUFNERm9yY2VQb3dlclNhdmU7Ci0JCX0KLQl9Ci0KLQliSW5zZXJ0VGltZXN0YW1wID0gRkFMU0U7Ci0JaWYgKHBIZWFkZXJfODAyXzExLT5GQy5UeXBlID09IEJUWVBFX0NOVEwpCS8qIG11c3QgYmUgUFMtUE9MTCAqLwotCXsKLQkJLypTZXQgUE0gYml0IGluIHBzLXBvbGwsIHRvIGZpeCBXTEsgMS4yICBQb3dlclNhdmVNb2RlX2V4dCBmYWlsdXJlIGlzc3VlLiAqLwotCQlpZiAoKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpCi0JCSAgICAmJiAocEhlYWRlcl84MDJfMTEtPkZDLlN1YlR5cGUgPT0gU1VCVFlQRV9QU19QT0xMKSkgewotCQkJcEhlYWRlcl84MDJfMTEtPkZDLlB3ck1nbXQgPSBQV1JfU0FWRTsKLQkJfQotCQliQWNrUmVxdWlyZWQgPSBGQUxTRTsKLQl9IGVsc2UJCQkvKiBCVFlQRV9NR01UIG9yIEJUWVBFX0RBVEEobXVzdCBiZSBOVUxMIGZyYW1lKSAqLwotCXsKLQkJLypwQWQtPlNlcXVlbmNlKys7ICovCi0JCS8qcEhlYWRlcl84MDJfMTEtPlNlcXVlbmNlID0gcEFkLT5TZXF1ZW5jZTsgKi8KLQotCQlpZiAocEhlYWRlcl84MDJfMTEtPkFkZHIxWzBdICYgMHgwMSkJLyogTVVMVElDQVNULCBCUk9BRENBU1QgKi8KLQkJewotCQkJYkFja1JlcXVpcmVkID0gRkFMU0U7Ci0JCQlwSGVhZGVyXzgwMl8xMS0+RHVyYXRpb24gPSAwOwotCQl9IGVsc2UgewotCQkJYkFja1JlcXVpcmVkID0gVFJVRTsKLQkJCXBIZWFkZXJfODAyXzExLT5EdXJhdGlvbiA9Ci0JCQkgICAgUlRNUENhbGNEdXJhdGlvbihwQWQsIE1sbWVSYXRlLCAxNCk7Ci0JCQlpZiAoKHBIZWFkZXJfODAyXzExLT5GQy5TdWJUeXBlID09IFNVQlRZUEVfUFJPQkVfUlNQKQotCQkJICAgICYmIChwSGVhZGVyXzgwMl8xMS0+RkMuVHlwZSA9PSBCVFlQRV9NR01UKSkgewotCQkJCWJJbnNlcnRUaW1lc3RhbXAgPSBUUlVFOwotCQkJCWJBY2tSZXF1aXJlZCA9IEZBTFNFOwkvKiBEaXNhYmxlIEFDSyB0byBwcmV2ZW50IHJldHJ5IDB4MWYgZm9yIFByb2JlIFJlc3BvbnNlICovCi0JCQl9IGVsc2UKLQkJCSAgICBpZiAoKHBIZWFkZXJfODAyXzExLT5GQy5TdWJUeXBlID09Ci0JCQkJIFNVQlRZUEVfUFJPQkVfUkVRKQotCQkJCSYmIChwSGVhZGVyXzgwMl8xMS0+RkMuVHlwZSA9PSBCVFlQRV9NR01UKSkgewotCQkJCWJBY2tSZXF1aXJlZCA9IEZBTFNFOwkvKiBEaXNhYmxlIEFDSyB0byBwcmV2ZW50IHJldHJ5IDB4MWYgZm9yIFByb2JlIFJlcXVlc3QgKi8KLQkJCX0KLQkJfQotCX0KLQotCXBIZWFkZXJfODAyXzExLT5TZXF1ZW5jZSA9IHBBZC0+U2VxdWVuY2UrKzsKLQlpZiAocEFkLT5TZXF1ZW5jZSA+IDB4ZmZmKQotCQlwQWQtPlNlcXVlbmNlID0gMDsKLQotCS8qIEJlZm9yZSByYWRhciBkZXRlY3Rpb24gZG9uZSwgbWdtdCBmcmFtZSBjYW4gbm90IGJlIHNlbnQgYnV0IHByb2JlIHJlcSAqLwotCS8qIEJlY2F1c2Ugd2UgbmVlZCB0byB1c2UgcHJvYmUgcmVxIHRvIHRyaWdnZXIgZHJpdmVyIHRvIHNlbmQgcHJvYmUgcmVxIGluIHBhc3NpdmUgc2NhbiAqLwotCWlmICgocEhlYWRlcl84MDJfMTEtPkZDLlN1YlR5cGUgIT0gU1VCVFlQRV9QUk9CRV9SRVEpCi0JICAgICYmIChwQWQtPkNvbW1vbkNmZy5iSUVFRTgwMjExSCA9PSAxKQotCSAgICAmJiAocEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkRNb2RlICE9IFJEX05PUk1BTF9NT0RFKSkgewotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCSAoIk1sbWVIYXJkVHJhbnNtaXQgLS0+IHJhZGFyIGRldGVjdCBub3QgaW4gbm9ybWFsIG1vZGUhXG4iKSk7Ci0vKiAgICAgICAgICAgICAgaWYgKCFJcnFTdGF0ZSkgKi8KLQkJUlRNUF9TRU1fVU5MT0NLKCZwQWQtPk1nbXRSaW5nTG9jayk7Ci0JCXJldHVybiAoTkRJU19TVEFUVVNfRkFJTFVSRSk7Ci0JfQotCi0JLyogKi8KLQkvKiBmaWxsIHNjYXR0ZXItYW5kLWdhdGhlciBidWZmZXIgbGlzdCBpbnRvIFRYRC4gSW50ZXJuYWxseSBjcmVhdGVkIE5ESVMgUEFDS0VUICovCi0JLyogc2hvdWxkIGFsd2F5cyBoYXMgb25seSBvbmUgcGh5c2ljYWwgYnVmZmVyLCBhbmQgdGhlIHdob2xlIGZyYW1lIHNpemUgZXF1YWxzICovCi0JLyogdG8gdGhlIGZpcnN0IHNjYXR0ZXIgYnVmZmVyIHNpemUgKi8KLQkvKiAqLwotCi0JLyogSW5pdGlhbGl6ZSBUWCBEZXNjcmlwdG9yICovCi0JLyogRm9yIGludGVyLWZyYW1lIGdhcCwgdGhlIG51bWJlciBpcyBmb3IgdGhpcyBmcmFtZSBhbmQgbmV4dCBmcmFtZSAqLwotCS8qIEZvciBNTE1FIHJhdGUsIHdlIHdpbGwgZml4IGFzIDJNYiB0byBtYXRjaCBvdGhlciB2ZW5kb3IncyBpbXBsZW1lbnQgKi8KLS8qICAgICAgcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1PREUgPSAxOyAqLwotCi0vKiBtYW5hZ2VtZW50IGZyYW1lIGRvZXNuJ3QgbmVlZCBlbmNyeXB0aW9uLiBzbyB1c2UgUkVTRVJWRURfV0NJRCBubyBtYXR0ZXIgdSBhcmUgc2VuZGluZyB0byBzcGVjaWZpYyB3Y2lkIG9yIG5vdC4gKi8KLQlQSUQgPSBQSURfTUdNVDsKLQotCWlmIChwTWFjRW50cnkgPT0gTlVMTCkgewotCQlSVE1QV3JpdGVUeFdJKHBBZCwgcEZpcnN0VHhXSSwgRkFMU0UsIEZBTFNFLCBiSW5zZXJ0VGltZXN0YW1wLAotCQkJICAgICAgRkFMU0UsIGJBY2tSZXF1aXJlZCwgRkFMU0UsIDAsIFJFU0VSVkVEX1dDSUQsCi0JCQkgICAgICAoU3JjQnVmTGVuIC0gVFhJTkZPX1NJWkUgLSBUWFdJX1NJWkUpLCBQSUQsIDAsCi0JCQkgICAgICAodTgpcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1DUywKLQkJCSAgICAgIElGU19CQUNLT0ZGLCBGQUxTRSwgJnBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdCk7Ci0JfSBlbHNlIHsKLQkJLyogZG9udCB1c2UgbG93IHJhdGUgdG8gc2VuZCBRb1MgTnVsbCBkYXRhIGZyYW1lICovCi0JCVJUTVBXcml0ZVR4V0kocEFkLCBwRmlyc3RUeFdJLCBGQUxTRSwgRkFMU0UsCi0JCQkgICAgICBiSW5zZXJ0VGltZXN0YW1wLCBGQUxTRSwgYkFja1JlcXVpcmVkLCBGQUxTRSwKLQkJCSAgICAgIDAsIHBNYWNFbnRyeS0+QWlkLAotCQkJICAgICAgKFNyY0J1ZkxlbiAtIFRYSU5GT19TSVpFIC0gVFhXSV9TSVpFKSwKLQkJCSAgICAgIHBNYWNFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1DUywgMCwKLQkJCSAgICAgICh1OClwTWFjRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MsCi0JCQkgICAgICBJRlNfQkFDS09GRiwgRkFMU0UsICZwTWFjRW50cnktPk1heEhUUGh5TW9kZSk7Ci0JfQotCi0JLyogTm93IGRvIGhhcmR3YXJlLWRlcGVuZWQga2ljayBvdXQuICovCi0JSEFMX0tpY2tPdXRNZ210VHgocEFkLCBRdWVJZHgsIHBQYWNrZXQsIHBTcmNCdWZWQSwgU3JjQnVmTGVuKTsKLQotCS8qIE1ha2Ugc3VyZSB0byByZWxlYXNlIE1HTVQgcmluZyByZXNvdXJjZSAqLwotLyogICAgICBpZiAoIUlycVN0YXRlKSAqLwotCVJUTVBfU0VNX1VOTE9DSygmcEFkLT5NZ210UmluZ0xvY2spOwotCXJldHVybiBORElTX1NUQVRVU19TVUNDRVNTOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotCU5ldyBEZVF1ZXVlIFByb2NlZHVyZXMuCi0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBERVFVRVVFX0xPQ0sobG9jaywgYkludENvbnRleHQsIElycUZsYWdzKSAJCQkJXAotCQkJZG97CQkJCQkJCQkJCQkJCVwKLQkJCQlpZiAoYkludENvbnRleHQgPT0gRkFMU0UpCQkJCQkJXAotCQkJCVJUTVBfSVJRX0xPQ0soKGxvY2spLCBJcnFGbGFncyk7CQlcCi0JCQl9d2hpbGUoMCkKLQotI2RlZmluZSBERVFVRVVFX1VOTE9DSyhsb2NrLCBiSW50Q29udGV4dCwgSXJxRmxhZ3MpCQkJCVwKLQkJCWRvewkJCQkJCQkJCQkJCQlcCi0JCQkJaWYgKGJJbnRDb250ZXh0ID09IEZBTFNFKQkJCQkJCVwKLQkJCQkJUlRNUF9JUlFfVU5MT0NLKChsb2NrKSwgSXJxRmxhZ3MpOwlcCi0JCQl9d2hpbGUoMCkKLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlUeCBQYXRoIGRlc2lnbiBhbGdvcml0aG06Ci0JCUJhc2ljYWxseSwgd2UgZGl2aWRlIHRoZSBwYWNrZXRzIGludG8gZm91ciB0eXBlcywgQnJvYWRjYXN0L011bHRpY2FzdCwgMTFOIFJhdGUoQU1QRFUsIEFNU0RVLCBOb3JtYWwpLCBCL0cgUmF0ZShBUkFMSU5LLCBOb3JtYWwpLAotCQlTcGVjaWZpYyBQYWNrZXQgVHlwZS4gRm9sbG93aW5nIHNob3cgdGhlIGNsYXNzaWZpY2F0aW9uIHJ1bGUgYW5kIHBvbGljeSBmb3IgZWFjaCBraW5kcyBvZiBwYWNrZXRzLgotCQkJCUNsYXNzaWZpY2F0aW9uIFJ1bGU9PgotCQkJCQlNdWx0aWNhc3Q6ICgqYWRkcjEgJiAweDAxKSA9PSAweDAxCi0JCQkJCVNwZWNpZmljIDogYkRIQ1BGcmFtZSwgYkFSUEZyYW1lLCBiRUFQT0xGcmFtZSwgZXRjLgotCQkJCQkxMU4gUmF0ZSA6IElmIHBlZXIgc3VwcG9ydCBIVAotCQkJCQkJCQkoMSkuQU1QRFUgIC0tIElmIFRYQkEgaXMgbmVnb3RpYXRlZC4KLQkJCQkJCQkJKDIpLkFNU0RVICAtLSBJZiBBTVNEVSBpcyBjYXBhYmxlIGZvciBib3RoIHBlZXIgYW5kIG91cnNlbGYuCi0JCQkJCQkJCQkJCSopLiBBTVNEVSBjYW4gZW1iZWRkZWQgaW4gYSBBTVBEVSwgYnV0IG5vdyB3ZSBkaWRuJ3Qgc3VwcG9ydCBpdC4KLQkJCQkJCQkJKDMpLk5vcm1hbCAtLSBPdGhlciBwYWNrZXRzIHdoaWNoIHNlbmQgYXMgMTFuIHJhdGUuCi0KLQkJCQkJQi9HIFJhdGUgOiBJZiBwZWVyIGlzIGIvZyBvbmx5LgotCQkJCQkJCQkoMSkuQVJBTElOSy0tIElmIGJvdGggb2YgcGVlci91cyBzdXBwcm90IFJhbGluayBwcm9wcmlldGFyeSBBZ2dyZWdhdGlvbiBhbmQgdGhlIFR4UmF0ZSBpcyBsYXJnZSB0aGFuIFJBVEVfNgotCQkJCQkJCQkoMikuTm9ybWFsIC0tIE90aGVyIHBhY2tldHMgd2hpY2ggc2VuZCBhcyBiL2cgcmF0ZS4KLQkJCQkJRnJhZ21lbnQ6Ci0JCQkJCQkJCVRoZSBwYWNrZXQgbXVzdCBiZSB1bmljYXN0LCBOT1QgQS1SQUxJTkssIE5PVCBBLU1TRFUsIE5PVCAxMW4sIHRoZW4gY2FuIGNvbnNpZGVyIGFib3V0IGZyYWdtZW50LgotCi0JCQkJQ2xhc3NpZmllZCBQYWNrZXQgSGFuZGxlIFJ1bGU9PgotCQkJCQlNdWx0aWNhc3Q6Ci0JCQkJCQkJCU5vIEFDSywgCQkvL3BUeEJsay0+YkFja1JlcXVpcmVkID0gRkFMU0U7Ci0JCQkJCQkJCU5vIFdNTSwgCQkvL3BUeEJsay0+YldNTSA9IEZBTFNFOwotCQkJCQkJCQlObyBwaWdneWJhY2ssICAgLy9wVHhCbGstPmJQaWdneUJhY2sgPSBGQUxTRTsKLQkJCQkJCQkJRm9yY2UgTG93UmF0ZSwgIC8vcFR4QmxrLT5iRm9yY2VMb3dSYXRlID0gVFJVRTsKLQkJCQkJU3BlY2lmaWMgOglCYXNpY2FsbHksIGZvciBzcGVjaWZpYyBwYWNrZXQsIHdlIHNob3VsZCBoYW5kbGUgaXQgc3BlY2lmaWNhbGx5LCBidXQgbm93IGFsbCBzcGVjaWZpYyBwYWNrZXRzIGFyZSB1c2UKLQkJCQkJCQkJCXRoZSBzYW1lIHBvbGljeSB0byBoYW5kbGUgaXQuCi0JCQkJCQkJCUZvcmNlIExvd1JhdGUsICAvL3BUeEJsay0+YkZvcmNlTG93UmF0ZSA9IFRSVUU7Ci0KLQkJCQkJMTFOIFJhdGUgOgotCQkJCQkJCQlObyBwaWdneWJhY2ssCS8vcFR4QmxrLT5iUGlnZ3lCYWNrID0gRkFMU0U7Ci0KLQkJCQkJCQkJKDEpLkFNU0RVCi0JCQkJCQkJCQlwVHhCbGstPmJXTU0gPSBUUlVFOwotCQkJCQkJCQkoMikuQU1QRFUKLQkJCQkJCQkJCXBUeEJsay0+YldNTSA9IFRSVUU7Ci0JCQkJCQkJCSgzKS5Ob3JtYWwKLQotCQkJCQlCL0cgUmF0ZSA6Ci0JCQkJCQkJCSgxKS5BUkFMSU5LCi0KLQkJCQkJCQkJKDIpLk5vcm1hbAotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXN0YXRpYyB1OCBUeFBrdENsYXNzaWZpY2F0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdm9pZCAqcFBhY2tldCkKLXsKLQl1OCBUeEZyYW1lVHlwZSA9IFRYX1VOS09XTl9GUkFNRTsKLQl1OCBXY2lkOwotCXN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKnBNYWNFbnRyeSA9IE5VTEw7Ci0JQk9PTEVBTiBiSFRSYXRlID0gRkFMU0U7Ci0KLQlXY2lkID0gUlRNUF9HRVRfUEFDS0VUX1dDSUQocFBhY2tldCk7Ci0JaWYgKFdjaWQgPT0gTUNBU1RfV0NJRCkgewkvKiBIYW5kbGUgZm9yIFJBIGlzIEJyb2FkY2FzdC9NdWx0aWNhc3QgQWRkcmVzcy4gKi8KLQkJcmV0dXJuIFRYX01DQVNUX0ZSQU1FOwotCX0KLQkvKiBIYW5kbGUgZm9yIHVuaWNhc3QgcGFja2V0cyAqLwotCXBNYWNFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdOwotCWlmIChSVE1QX0dFVF9QQUNLRVRfTE9XUkFURShwUGFja2V0KSkgewkvKiBJdCdzIGEgc3BlY2lmaWMgcGFja2V0IG5lZWQgdG8gZm9yY2UgbG93IHJhdGUsIGkuZS4sIGJESENQRnJhbWUsIGJFQVBPTEZyYW1lLCBiV0FJRnJhbWUgKi8KLQkJVHhGcmFtZVR5cGUgPSBUWF9MRUdBQ1lfRlJBTUU7Ci0JfSBlbHNlIGlmIChJU19IVF9SQVRFKHBNYWNFbnRyeSkpIHsJLyogaXQncyBhIDExbiBjYXBhYmxlIHBhY2tldCAqLwotCi0JCS8qIERlcGVuZHMgb24gSFRQaHlNb2RlIHRvIGNoZWNrIGlmIHRoZSBwZWVyIHN1cHBvcnQgdGhlIEhUUmF0ZSB0cmFuc21pc3Npb24uICovCi0JCS8qICAgICAgQ3VycmVudGx5IGRpZG4ndCBzdXBwb3J0IEEtTVNEVSBlbWJlZGRlZCBpbiBBLU1QRFUgKi8KLQkJYkhUUmF0ZSA9IFRSVUU7Ci0JCWlmIChSVE1QX0dFVF9QQUNLRVRfTU9SRURBVEEocFBhY2tldCkKLQkJICAgIHx8IChwTWFjRW50cnktPlBzTW9kZSA9PSBQV1JfU0FWRSkpCi0JCQlUeEZyYW1lVHlwZSA9IFRYX0xFR0FDWV9GUkFNRTsKLQkJZWxzZSBpZiAoKHBNYWNFbnRyeS0+Ci0JCQkgIFRYQkFiaXRtYXAgJiAoMSA8PCAoUlRNUF9HRVRfUEFDS0VUX1VQKHBQYWNrZXQpKSkpICE9Ci0JCQkgMCkKLQkJCXJldHVybiBUWF9BTVBEVV9GUkFNRTsKLQkJZWxzZSBpZiAoQ0xJRU5UX1NUQVRVU19URVNUX0ZMQUcKLQkJCSAocE1hY0VudHJ5LCBmQ0xJRU5UX1NUQVRVU19BTVNEVV9JTlVTRUQpKQotCQkJcmV0dXJuIFRYX0FNU0RVX0ZSQU1FOwotCQllbHNlCi0JCQlUeEZyYW1lVHlwZSA9IFRYX0xFR0FDWV9GUkFNRTsKLQl9IGVsc2UgewkJLyogaXQncyBhIGxlZ2FjeSBiL2cgcGFja2V0LiAqLwotCQlpZiAoKENMSUVOVF9TVEFUVVNfVEVTVF9GTEFHKHBNYWNFbnRyeSwgZkNMSUVOVF9TVEFUVVNfQUdHUkVHQVRJT05fQ0FQQUJMRSkgJiYgcEFkLT5Db21tb25DZmcuYkFnZ3JlZ2F0aW9uQ2FwYWJsZSkgJiYgKFJUTVBfR0VUX1BBQ0tFVF9UWFJBVEUocFBhY2tldCkgPj0gUkFURV82KSAmJiAoIShPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1dNTV9JTlVTRUQpICYmIENMSUVOVF9TVEFUVVNfVEVTVF9GTEFHKHBNYWNFbnRyeSwgZkNMSUVOVF9TVEFUVVNfV01NX0NBUEFCTEUpKSkpIHsJLyogaWYgcGVlciBzdXBwb3J0IFJhbGluayBBZ2dyZWdhdGlvbiwgd2UgdXNlIGl0LiAqLwotCQkJVHhGcmFtZVR5cGUgPSBUWF9SQUxJTktfRlJBTUU7Ci0JCX0gZWxzZSB7Ci0JCQlUeEZyYW1lVHlwZSA9IFRYX0xFR0FDWV9GUkFNRTsKLQkJfQotCX0KLQotCS8qIEN1cnJlbnRseSwgb3VyIGZyYWdtZW50IG9ubHkgc3VwcG9ydCB3aGVuIGEgdW5pY2FzdCBwYWNrZXQgc2VuZCBhcyBOT1QtQVJBTElOSywgTk9ULUFNU0RVIGFuZCBOT1QtQU1QRFUuICovCi0JaWYgKChSVE1QX0dFVF9QQUNLRVRfRlJBR01FTlRTKHBQYWNrZXQpID4gMSkKLQkgICAgJiYgKFR4RnJhbWVUeXBlID09IFRYX0xFR0FDWV9GUkFNRSkpCi0JCVR4RnJhbWVUeXBlID0gVFhfRlJBR19GUkFNRTsKLQotCXJldHVybiBUeEZyYW1lVHlwZTsKLX0KLQotQk9PTEVBTiBSVE1QX0ZpbGxUeEJsa0luZm8oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfdHhfYmxrICpwVHhCbGspCi17Ci0Jc3RydWN0IHJ0X3BhY2tldF9pbmZvIFBhY2tldEluZm87Ci0Jdm9pZCAqcFBhY2tldDsKLQlzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwTWFjRW50cnkgPSBOVUxMOwotCi0JcFBhY2tldCA9IHBUeEJsay0+cFBhY2tldDsKLQlSVE1QX1F1ZXJ5UGFja2V0SW5mbyhwUGFja2V0LCAmUGFja2V0SW5mbywgJnBUeEJsay0+cFNyY0J1ZkhlYWRlciwKLQkJCSAgICAgJnBUeEJsay0+U3JjQnVmTGVuKTsKLQotCXBUeEJsay0+V2NpZCA9IFJUTVBfR0VUX1BBQ0tFVF9XQ0lEKHBQYWNrZXQpOwotCXBUeEJsay0+YXBpZHggPSBSVE1QX0dFVF9QQUNLRVRfSUYocFBhY2tldCk7Ci0JcFR4QmxrLT5Vc2VyUHJpb3JpdHkgPSBSVE1QX0dFVF9QQUNLRVRfVVAocFBhY2tldCk7Ci0JcFR4QmxrLT5GcmFtZUdhcCA9IElGU19IVFRYT1A7CS8qIEFTSUMgZGV0ZXJtaW5lIEZyYW1lIEdhcCAqLwotCi0JaWYgKFJUTVBfR0VUX1BBQ0tFVF9DTEVBUl9FQVBfRlJBTUUocFR4QmxrLT5wUGFja2V0KSkKLQkJVFhfQkxLX1NFVF9GTEFHKHBUeEJsaywgZlRYX2JDbGVhckVBUEZyYW1lKTsKLQllbHNlCi0JCVRYX0JMS19DTEVBUl9GTEFHKHBUeEJsaywgZlRYX2JDbGVhckVBUEZyYW1lKTsKLQotCS8qIERlZmF1bHQgdG8gY2xlYXIgdGhpcyBmbGFnICovCi0JVFhfQkxLX0NMRUFSX0ZMQUcocFR4QmxrLCBmVFhfYkZvcmNlTm9uUW9TKTsKLQotCWlmIChwVHhCbGstPldjaWQgPT0gTUNBU1RfV0NJRCkgewotCQlwVHhCbGstPnBNYWNFbnRyeSA9IE5VTEw7Ci0JCXsKLQkJCXBUeEJsay0+cFRyYW5zbWl0ID0KLQkJCSAgICAmcEFkLT5NYWNUYWIuQ29udGVudFtNQ0FTVF9XQ0lEXS5IVFBoeU1vZGU7Ci0JCX0KLQotCQlUWF9CTEtfQ0xFQVJfRkxBRyhwVHhCbGssIGZUWF9iQWNrUmVxdWlyZWQpOwkvKiBBY2tSZXF1aXJlZCA9IEZBTFNFLCB3aGVuIGJyb2FkY2FzdCBwYWNrZXQgaW4gQWRob2MgbW9kZS4gKi8KLQkJLypUWF9CTEtfU0VUX0ZMQUcocFR4QmxrLCBmVFhfYkZvcmNlTG93UmF0ZSk7ICovCi0JCVRYX0JMS19DTEVBUl9GTEFHKHBUeEJsaywgZlRYX2JBbGxvd0ZyYWcpOwotCQlUWF9CTEtfQ0xFQVJfRkxBRyhwVHhCbGssIGZUWF9iV01NKTsKLQkJaWYgKFJUTVBfR0VUX1BBQ0tFVF9NT1JFREFUQShwUGFja2V0KSkgewotCQkJVFhfQkxLX1NFVF9GTEFHKHBUeEJsaywgZlRYX2JNb3JlRGF0YSk7Ci0JCX0KLQotCX0gZWxzZSB7Ci0JCXBUeEJsay0+cE1hY0VudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbcFR4QmxrLT5XY2lkXTsKLQkJcFR4QmxrLT5wVHJhbnNtaXQgPSAmcFR4QmxrLT5wTWFjRW50cnktPkhUUGh5TW9kZTsKLQotCQlwTWFjRW50cnkgPSBwVHhCbGstPnBNYWNFbnRyeTsKLQotCQkvKiBGb3IgYWxsIHVuaWNhc3QgcGFja2V0cywgbmVlZCBBY2sgdW5sZXNzIHRoZSBBY2sgUG9saWN5IGlzIG5vdCBzZXQgYXMgTk9STUFMX0FDSy4gKi8KLQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkFja1BvbGljeVtwVHhCbGstPlF1ZUlkeF0gIT0gTk9STUFMX0FDSykKLQkJCVRYX0JMS19DTEVBUl9GTEFHKHBUeEJsaywgZlRYX2JBY2tSZXF1aXJlZCk7Ci0JCWVsc2UKLQkJCVRYX0JMS19TRVRfRkxBRyhwVHhCbGssIGZUWF9iQWNrUmVxdWlyZWQpOwotCi0JCWlmICgocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkgJiYKLQkJICAgIChBREhPQ19PTihwQWQpKSAmJgotCQkgICAgKFJYX0ZJTFRFUl9URVNUX0ZMQUcocEFkLCBmUlhfRklMVEVSX0FDQ0VQVF9QUk9NSVNDVU9VUykpKSB7Ci0JCQlpZiAocEFkLT5Db21tb25DZmcuUFNQWGxpbmspCi0JCQkJVFhfQkxLX0NMRUFSX0ZMQUcocFR4QmxrLCBmVFhfYkFja1JlcXVpcmVkKTsKLQkJfQotCi0JCXsKLQkJCXsKLQotCQkJCS8qIElmIHN1cHBvcnQgV01NLCBlbmFibGUgaXQuICovCi0JCQkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRwotCQkJCSAgICAocEFkLCBmT1BfU1RBVFVTX1dNTV9JTlVTRUQpCi0JCQkJICAgICYmIENMSUVOVF9TVEFUVVNfVEVTVF9GTEFHKHBNYWNFbnRyeSwKLQkJCQkJCQkgICAgICAgZkNMSUVOVF9TVEFUVVNfV01NX0NBUEFCTEUpKQotCQkJCQlUWF9CTEtfU0VUX0ZMQUcocFR4QmxrLCBmVFhfYldNTSk7Ci0KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBBZC0+U3RhQ2ZnLmJBdXRvVHhSYXRlU3dpdGNoKSAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRYX0JMS19TRVRfRkxBRyhwVHhCbGssIGZUWF9BdXRvUmF0ZVN3aXRjaCk7ICovCi0JCQl9Ci0JCX0KLQotCQlpZiAocFR4QmxrLT5UeEZyYW1lVHlwZSA9PSBUWF9MRUdBQ1lfRlJBTUUpIHsKLQkJCWlmICgoUlRNUF9HRVRfUEFDS0VUX0xPV1JBVEUocFBhY2tldCkpIHx8ICgocEFkLT5PcE1vZGUgPT0gT1BNT0RFX0FQKSAmJiAocE1hY0VudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTU9ERSA9PSBNT0RFX0NDSykgJiYgKHBNYWNFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1DUyA9PSBSQVRFXzEpKSkgewkvKiBTcGVjaWZpYyBwYWNrZXQsIGkuZS4sIGJESENQRnJhbWUsIGJFQVBPTEZyYW1lLCBiV0FJRnJhbWUsIG5lZWQgZm9yY2UgbG93IHJhdGUuICovCi0JCQkJcFR4QmxrLT5wVHJhbnNtaXQgPQotCQkJCSAgICAmcEFkLT5NYWNUYWIuQ29udGVudFtNQ0FTVF9XQ0lEXS5IVFBoeU1vZGU7Ci0KLQkJCQkvKiBNb2RpZnkgdGhlIFdNTSBiaXQgZm9yIElDViBpc3N1ZS4gSWYgd2UgaGF2ZSBhIHBhY2tldCB3aXRoIEVPU1AgZmllbGQgbmVlZCB0byBzZXQgYXMgMSwgaG93IHRvIGhhbmRsZSBpdD8/PyAqLwotCQkJCWlmIChJU19IVF9TVEEocFR4QmxrLT5wTWFjRW50cnkpICYmCi0JCQkJICAgIChDTElFTlRfU1RBVFVTX1RFU1RfRkxBRwotCQkJCSAgICAgKHBNYWNFbnRyeSwgZkNMSUVOVF9TVEFUVVNfUkFMSU5LX0NISVBTRVQpKQotCQkJCSAgICAmJiAoKHBBZC0+Q29tbW9uQ2ZnLmJSZGcgPT0gVFJVRSkKLQkJCQkJJiYgQ0xJRU5UX1NUQVRVU19URVNUX0ZMQUcocE1hY0VudHJ5LAotCQkJCQkJCQkgICBmQ0xJRU5UX1NUQVRVU19SREdfQ0FQQUJMRSkpKQotCQkJCXsKLQkJCQkJVFhfQkxLX0NMRUFSX0ZMQUcocFR4QmxrLCBmVFhfYldNTSk7Ci0JCQkJCVRYX0JMS19TRVRfRkxBRyhwVHhCbGssCi0JCQkJCQkJZlRYX2JGb3JjZU5vblFvUyk7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAoKElTX0hUX1JBVEUocE1hY0VudHJ5KSA9PSBGQUxTRSkgJiYgKENMSUVOVF9TVEFUVVNfVEVTVF9GTEFHKHBNYWNFbnRyeSwgZkNMSUVOVF9TVEFUVVNfUElHR1lCQUNLX0NBUEFCTEUpKSkgewkvKiBDdXJyZW50bHkgcGlnZ3ktYmFjayBvbmx5IHN1cHBvcnQgd2hlbiBwZWVyIGlzIG9wZXJhdGUgaW4gYi9nIG1vZGUuICovCi0JCQkJVFhfQkxLX1NFVF9GTEFHKHBUeEJsaywgZlRYX2JQaWdneUJhY2spOwotCQkJfQotCi0JCQlpZiAoUlRNUF9HRVRfUEFDS0VUX01PUkVEQVRBKHBQYWNrZXQpKSB7Ci0JCQkJVFhfQkxLX1NFVF9GTEFHKHBUeEJsaywgZlRYX2JNb3JlRGF0YSk7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAocFR4QmxrLT5UeEZyYW1lVHlwZSA9PSBUWF9GUkFHX0ZSQU1FKSB7Ci0JCQlUWF9CTEtfU0VUX0ZMQUcocFR4QmxrLCBmVFhfYkFsbG93RnJhZyk7Ci0JCX0KLQotCQlwTWFjRW50cnktPkRlYnVnVHhDb3VudCsrOwotCX0KLQotCXJldHVybiBUUlVFOwotfQotCi1CT09MRUFOIENhbkRvQWdncmVnYXRlVHJhbnNtaXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgICAgIGNoYXIgKiBwUGFja2V0LCBzdHJ1Y3QgcnRfdHhfYmxrICpwVHhCbGspCi17Ci0KLQkvKkRCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNoZWNrIGlmIGNhbiBkbyBhZ2dyZWdhdGlvbiEgVHhGcmFtZVR5cGU9JWQhXG4iLCBwVHhCbGstPlR4RnJhbWVUeXBlKSk7ICovCi0KLQlpZiAoUlRNUF9HRVRfUEFDS0VUX1dDSUQocFBhY2tldCkgPT0gTUNBU1RfV0NJRCkKLQkJcmV0dXJuIEZBTFNFOwotCi0JaWYgKFJUTVBfR0VUX1BBQ0tFVF9ESENQKHBQYWNrZXQpIHx8Ci0JICAgIFJUTVBfR0VUX1BBQ0tFVF9FQVBPTChwUGFja2V0KSB8fCBSVE1QX0dFVF9QQUNLRVRfV0FJKHBQYWNrZXQpKQotCQlyZXR1cm4gRkFMU0U7Ci0KLQlpZiAoKHBUeEJsay0+VHhGcmFtZVR5cGUgPT0gVFhfQU1TRFVfRlJBTUUpICYmICgocFR4QmxrLT5Ub3RhbEZyYW1lTGVuICsgR0VUX09TX1BLVF9MRU4ocFBhY2tldCkpID4gKFJYX0JVRkZFUl9BR0dSRVNJWkUgLSAxMDApKSkgewkvKiBGb3IgQU1TRFUsIGFsbG93IHRoZSBwYWNrZXRzIHdpdGggdG90YWwgbGVuZ3RoIDwgbWF4LWFtc2R1IHNpemUgKi8KLQkJcmV0dXJuIEZBTFNFOwotCX0KLQotCWlmICgocFR4QmxrLT5UeEZyYW1lVHlwZSA9PSBUWF9SQUxJTktfRlJBTUUpICYmIChwVHhCbGstPlR4UGFja2V0TGlzdC5OdW1iZXIgPT0gMikpIHsJLyogRm9yIFJBTElOSy1BZ2dyZWdhdGlvbiwgYWxsb3cgdHdvIGZyYW1lcyBpbiBvbmUgYmF0Y2guICovCi0JCXJldHVybiBGQUxTRTsKLQl9Ci0KLQlpZiAoKElORlJBX09OKHBBZCkpICYmIChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKSkJLyogbXVzdCBiZSB1bmljYXN0IHRvIEFQICovCi0JCXJldHVybiBUUlVFOwotCWVsc2UKLQkJcmV0dXJuIEZBTFNFOwotCi19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCQlUbyBkbyB0aGUgZW5xdWV1ZSBvcGVyYXRpb24gYW5kIGV4dHJhY3QgdGhlIGZpcnN0IGl0ZW0gb2Ygd2FpdGluZwotCQlsaXN0LiBJZiBhIG51bWJlciBvZiBhdmFpbGFibGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50cyBjb3VsZCBtZWV0Ci0JCXRoZSByZXF1ZXN0IG9mIGV4dHJhY3RlZCBpdGVtLCB0aGUgZXh0cmFjdGVkIGl0ZW0gd2lsbCBiZSBmcmFnbWVudGVkCi0JCWludG8gc2hhcmVkIG1lbW9yeSBzZWdtZW50cy4KLQotCUFyZ3VtZW50czoKLQkJcEFkIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKLQkJcFF1ZXVlCQlQb2ludGVyIHRvIFdhaXRpbmcgUXVldWUKLQotCVJldHVybiBWYWx1ZToKLQkJTm9uZQotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBSVE1QRGVRdWV1ZVBhY2tldChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIElOIEJPT0xFQU4gYkludENvbnRleHQsIHU4IFFJZHgsCS8qIEJ1bGtPdXRQaXBlSWQgKi8KLQkJICAgICAgIHU4IE1heF9UeF9QYWNrZXRzKQotewotCXN0cnVjdCBydF9xdWV1ZV9lbnRyeSAqcEVudHJ5ID0gTlVMTDsKLQl2b2lkICpwUGFja2V0OwotCWludCBTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOwotCXU4IENvdW50ID0gMDsKLQlzdHJ1Y3QgcnRfcXVldWVfaGVhZGVyICpwUXVldWU7Ci0JdW5zaWduZWQgbG9uZyBGcmVlTnVtYmVyW05VTV9PRl9UWF9SSU5HXTsKLQl1OCBRdWVJZHgsIHNRSWR4LCBlUUlkeDsKLQl1bnNpZ25lZCBsb25nIElycUZsYWdzID0gMDsKLQlCT09MRUFOIGhhc1R4RGVzYyA9IEZBTFNFOwotCXN0cnVjdCBydF90eF9ibGsgVHhCbGs7Ci0Jc3RydWN0IHJ0X3R4X2JsayAqcFR4QmxrOwotCi0JaWYgKFFJZHggPT0gTlVNX09GX1RYX1JJTkcpIHsKLQkJc1FJZHggPSAwOwotCQllUUlkeCA9IDM7CS8qIDQgQUNzLCBzdGFydCBmcm9tIDAuICovCi0JfSBlbHNlIHsKLQkJc1FJZHggPSBlUUlkeCA9IFFJZHg7Ci0JfQotCi0JZm9yIChRdWVJZHggPSBzUUlkeDsgUXVlSWR4IDw9IGVRSWR4OyBRdWVJZHgrKykgewotCQlDb3VudCA9IDA7Ci0KLQkJUlRNUF9TVEFSVF9ERVFVRVVFKHBBZCwgUXVlSWR4LCBJcnFGbGFncyk7Ci0KLQkJd2hpbGUgKDEpIHsKLQkJCWlmICgoUlRNUF9URVNUX0ZMQUcKLQkJCSAgICAgKHBBZCwKLQkJCSAgICAgIChmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTIHwKLQkJCSAgICAgICBmUlRNUF9BREFQVEVSX1JBRElPX09GRiB8Ci0JCQkgICAgICAgZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUyB8Ci0JCQkgICAgICAgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwKLQkJCSAgICAgICBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSkpIHsKLQkJCQlSVE1QX1NUT1BfREVRVUVVRShwQWQsIFF1ZUlkeCwgSXJxRmxhZ3MpOwotCQkJCXJldHVybjsKLQkJCX0KLQotCQkJaWYgKENvdW50ID49IE1heF9UeF9QYWNrZXRzKQotCQkJCWJyZWFrOwotCi0JCQlERVFVRVVFX0xPQ0soJnBBZC0+aXJxX2xvY2ssIGJJbnRDb250ZXh0LCBJcnFGbGFncyk7Ci0JCQlpZiAoJnBBZC0+VHhTd1F1ZXVlW1F1ZUlkeF0gPT0gTlVMTCkgewotCQkJCURFUVVFVUVfVU5MT0NLKCZwQWQtPmlycV9sb2NrLCBiSW50Q29udGV4dCwKLQkJCQkJICAgICAgIElycUZsYWdzKTsKLQkJCQlicmVhazsKLQkJCX0KLSNpZmRlZiBSVE1QX01BQ19QQ0kKLQkJCUZyZWVOdW1iZXJbUXVlSWR4XSA9IEdFVF9UWFJJTkdfRlJFRU5PKHBBZCwgUXVlSWR4KTsKLQotCQkJaWYgKEZyZWVOdW1iZXJbUXVlSWR4XSA8PSA1KSB7Ci0JCQkJLyogZnJlZSBUeChRdWVJZHgpIHJlc291cmNlcyAqLwotCQkJCVJUTVBGcmVlVFhEVXBvblR4RG1hRG9uZShwQWQsIFF1ZUlkeCk7Ci0JCQkJRnJlZU51bWJlcltRdWVJZHhdID0KLQkJCQkgICAgR0VUX1RYUklOR19GUkVFTk8ocEFkLCBRdWVJZHgpOwotCQkJfQotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotCi0JCQkvKiBwcm9iZSB0aGUgUXVldWUgSGVhZCAqLwotCQkJcFF1ZXVlID0gJnBBZC0+VHhTd1F1ZXVlW1F1ZUlkeF07Ci0JCQlwRW50cnkgPSBwUXVldWUtPkhlYWQ7Ci0JCQlpZiAocEVudHJ5ID09IE5VTEwpIHsKLQkJCQlERVFVRVVFX1VOTE9DSygmcEFkLT5pcnFfbG9jaywgYkludENvbnRleHQsCi0JCQkJCSAgICAgICBJcnFGbGFncyk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCXBUeEJsayA9ICZUeEJsazsKLQkJCU5kaXNaZXJvTWVtb3J5KCh1OCAqKXBUeEJsaywgc2l6ZW9mKHN0cnVjdCBydF90eF9ibGspKTsKLQkJCS8qSW5pdGlhbGl6ZVF1ZXVlSGVhZGVyKCZwVHhCbGstPlR4UGFja2V0TGlzdCk7ICAgICAgICAgLy8gRGlkbid0IG5lZWQgaXQgYmVjYXVzZSB3ZSBhbHJlYWR5IG1lbXplcm8gaXQuICovCi0JCQlwVHhCbGstPlF1ZUlkeCA9IFF1ZUlkeDsKLQotCQkJcFBhY2tldCA9IFFVRVVFX0VOVFJZX1RPX1BBQ0tFVChwRW50cnkpOwotCi0JCQkvKiBFYXJseSBjaGVjayB0byBtYWtlIHN1cmUgd2UgaGF2ZSBlbm9ndWggVHggUmVzb3VyY2UuICovCi0JCQloYXNUeERlc2MgPQotCQkJICAgIFJUTVBfSEFTX0VOT1VHSF9GUkVFX0RFU0MocEFkLCBwVHhCbGssCi0JCQkJCQkgICAgICBGcmVlTnVtYmVyW1F1ZUlkeF0sCi0JCQkJCQkgICAgICBwUGFja2V0KTsKLQkJCWlmICghaGFzVHhEZXNjKSB7Ci0JCQkJcEFkLT5Qcml2YXRlSW5mby5UeFJpbmdGdWxsQ250Kys7Ci0KLQkJCQlERVFVRVVFX1VOTE9DSygmcEFkLT5pcnFfbG9jaywgYkludENvbnRleHQsCi0JCQkJCSAgICAgICBJcnFGbGFncyk7Ci0KLQkJCQlicmVhazsKLQkJCX0KLQotCQkJcFR4QmxrLT5UeEZyYW1lVHlwZSA9IFR4UGt0Q2xhc3NpZmljYXRpb24ocEFkLCBwUGFja2V0KTsKLQkJCXBFbnRyeSA9IFJlbW92ZUhlYWRRdWV1ZShwUXVldWUpOwotCQkJcFR4QmxrLT5Ub3RhbEZyYW1lTnVtKys7Ci0JCQlwVHhCbGstPlRvdGFsRnJhZ051bSArPSBSVE1QX0dFVF9QQUNLRVRfRlJBR01FTlRTKHBQYWNrZXQpOwkvKiBUaGUgcmVhbCBmcmFnbWVudCBudW1iZXIgbWF5YmUgdmFyeSAqLwotCQkJcFR4QmxrLT5Ub3RhbEZyYW1lTGVuICs9IEdFVF9PU19QS1RfTEVOKHBQYWNrZXQpOwotCQkJcFR4QmxrLT5wUGFja2V0ID0gcFBhY2tldDsKLQkJCUluc2VydFRhaWxRdWV1ZSgmcFR4QmxrLT5UeFBhY2tldExpc3QsCi0JCQkJCVBBQ0tFVF9UT19RVUVVRV9FTlRSWShwUGFja2V0KSk7Ci0KLQkJCWlmIChwVHhCbGstPlR4RnJhbWVUeXBlID09IFRYX1JBTElOS19GUkFNRQotCQkJICAgIHx8IHBUeEJsay0+VHhGcmFtZVR5cGUgPT0gVFhfQU1TRFVfRlJBTUUpIHsKLQkJCQkvKiBFbmhhbmNlIFNXIEFnZ3JlZ2F0aW9uIE1lY2hhbmlzbSAqLwotCQkJCWlmIChORUVEX1FVRVVFX0JBQ0tfRk9SX0FHRwotCQkJCSAgICAocEFkLCBRdWVJZHgsIEZyZWVOdW1iZXJbUXVlSWR4XSwKLQkJCQkgICAgIHBUeEJsay0+VHhGcmFtZVR5cGUpKSB7Ci0JCQkJCUluc2VydEhlYWRRdWV1ZShwUXVldWUsCi0JCQkJCQkJUEFDS0VUX1RPX1FVRVVFX0VOVFJZCi0JCQkJCQkJKHBQYWNrZXQpKTsKLQkJCQkJREVRVUVVRV9VTkxPQ0soJnBBZC0+aXJxX2xvY2ssCi0JCQkJCQkgICAgICAgYkludENvbnRleHQsIElycUZsYWdzKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQkJZG8gewotCQkJCQlwRW50cnkgPSBwUXVldWUtPkhlYWQ7Ci0JCQkJCWlmIChwRW50cnkgPT0gTlVMTCkKLQkJCQkJCWJyZWFrOwotCi0JCQkJCS8qIEZvciBUWF9BTVNEVV9GUkFNRS9UWF9SQUxJTktfRlJBTUUsIE5lZWQgdG8gY2hlY2sgaWYgbmV4dCBwYWtjZXQgY2FuIGRvIGFnZ3JlZ2F0aW9uLiAqLwotCQkJCQlwUGFja2V0ID0gUVVFVUVfRU5UUllfVE9fUEFDS0VUKHBFbnRyeSk7Ci0JCQkJCUZyZWVOdW1iZXJbUXVlSWR4XSA9Ci0JCQkJCSAgICBHRVRfVFhSSU5HX0ZSRUVOTyhwQWQsIFF1ZUlkeCk7Ci0JCQkJCWhhc1R4RGVzYyA9Ci0JCQkJCSAgICBSVE1QX0hBU19FTk9VR0hfRlJFRV9ERVNDKHBBZCwKLQkJCQkJCQkJICAgICAgcFR4QmxrLAotCQkJCQkJCQkgICAgICBGcmVlTnVtYmVyCi0JCQkJCQkJCSAgICAgIFtRdWVJZHhdLAotCQkJCQkJCQkgICAgICBwUGFja2V0KTsKLQkJCQkJaWYgKChoYXNUeERlc2MgPT0gRkFMU0UpCi0JCQkJCSAgICB8fAotCQkJCQkgICAgKENhbkRvQWdncmVnYXRlVHJhbnNtaXQKLQkJCQkJICAgICAocEFkLCBwUGFja2V0LCBwVHhCbGspID09IEZBTFNFKSkKLQkJCQkJCWJyZWFrOwotCi0JCQkJCS8qUmVtb3ZlIHRoZSBwYWNrZXQgZnJvbSB0aGUgVHhTd1F1ZXVlIGFuZCBpbnNlcnQgaW50byBwVHhCbGsgKi8KLQkJCQkJcEVudHJ5ID0gUmVtb3ZlSGVhZFF1ZXVlKHBRdWV1ZSk7Ci0JCQkJCUFTU0VSVChwRW50cnkpOwotCQkJCQlwUGFja2V0ID0gUVVFVUVfRU5UUllfVE9fUEFDS0VUKHBFbnRyeSk7Ci0JCQkJCXBUeEJsay0+VG90YWxGcmFtZU51bSsrOwotCQkJCQlwVHhCbGstPlRvdGFsRnJhZ051bSArPSBSVE1QX0dFVF9QQUNLRVRfRlJBR01FTlRTKHBQYWNrZXQpOwkvKiBUaGUgcmVhbCBmcmFnbWVudCBudW1iZXIgbWF5YmUgdmFyeSAqLwotCQkJCQlwVHhCbGstPlRvdGFsRnJhbWVMZW4gKz0KLQkJCQkJICAgIEdFVF9PU19QS1RfTEVOKHBQYWNrZXQpOwotCQkJCQlJbnNlcnRUYWlsUXVldWUoJnBUeEJsay0+VHhQYWNrZXRMaXN0LAotCQkJCQkJCVBBQ0tFVF9UT19RVUVVRV9FTlRSWQotCQkJCQkJCShwUGFja2V0KSk7Ci0JCQkJfSB3aGlsZSAoMSk7Ci0KLQkJCQlpZiAocFR4QmxrLT5UeFBhY2tldExpc3QuTnVtYmVyID09IDEpCi0JCQkJCXBUeEJsay0+VHhGcmFtZVR5cGUgPSBUWF9MRUdBQ1lfRlJBTUU7Ci0JCQl9Ci0jaWZkZWYgUlRNUF9NQUNfVVNCCi0JCQlERVFVRVVFX1VOTE9DSygmcEFkLT5pcnFfbG9jaywgYkludENvbnRleHQsIElycUZsYWdzKTsKLSNlbmRpZiAvKiBSVE1QX01BQ19VU0IgLy8gKi8KLQkJCUNvdW50ICs9IHBUeEJsay0+VHhQYWNrZXRMaXN0Lk51bWJlcjsKLQotCQkJLyogRG8gSGFyZFRyYW5zbWl0IG5vdy4gKi8KLQkJCVN0YXR1cyA9IFNUQUhhcmRUcmFuc21pdChwQWQsIHBUeEJsaywgUXVlSWR4KTsKLQotI2lmZGVmIFJUTVBfTUFDX1BDSQotCQkJREVRVUVVRV9VTkxPQ0soJnBBZC0+aXJxX2xvY2ssIGJJbnRDb250ZXh0LCBJcnFGbGFncyk7Ci0JCQkvKiBzdGF0aWMgcmF0ZSBhbHNvIG5lZWQgTklDVXBkYXRlRmlmb1N0YUNvdW50ZXJzKCkgZnVuY3Rpb24uICovCi0JCQkvKmlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1RYX1JBVEVfU1dJVENIX0VOQUJMRUQpKSAqLwotCQkJTklDVXBkYXRlRmlmb1N0YUNvdW50ZXJzKHBBZCk7Ci0jZW5kaWYgLyogUlRNUF9NQUNfUENJIC8vICovCi0KLQkJfQotCi0JCVJUTVBfU1RPUF9ERVFVRVVFKHBBZCwgUXVlSWR4LCBJcnFGbGFncyk7Ci0KLSNpZmRlZiBSVE1QX01BQ19VU0IKLQkJaWYgKCFoYXNUeERlc2MpCi0JCQlSVFVTQktpY2tCdWxrT3V0KHBBZCk7Ci0jZW5kaWYgLyogUlRNUF9NQUNfVVNCIC8vICovCi0JfQotCi19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCQlDYWxjdWxhdGVzIHRoZSBkdXJhdGlvbiB3aGljaCBpcyByZXF1aXJlZCB0byB0cmFuc21pdCBvdXQgZnJhbWVzCi0Jd2l0aCBnaXZlbiBzaXplIGFuZCBzcGVjaWZpZWQgcmF0ZS4KLQotCUFyZ3VtZW50czoKLQkJcEFkIAlQb2ludGVyIHRvIG91ciBhZGFwdGVyCi0JCVJhdGUJCQlUcmFuc21pdCByYXRlCi0JCVNpemUJCQlGcmFtZSBzaXplIGluIHVuaXRzIG9mIGJ5dGUKLQotCVJldHVybiBWYWx1ZToKLQkJRHVyYXRpb24gbnVtYmVyIGluIHVuaXRzIG9mIHVzZWMKLQotCUlSUUwgPSBQQVNTSVZFX0xFVkVMCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdTE2IFJUTVBDYWxjRHVyYXRpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1OCBSYXRlLCB1bnNpZ25lZCBsb25nIFNpemUpCi17Ci0JdW5zaWduZWQgbG9uZyBEdXJhdGlvbiA9IDA7Ci0KLQlpZiAoUmF0ZSA8IFJBVEVfRklSU1RfT0ZETV9SQVRFKQkvKiBDQ0sgKi8KLQl7Ci0JCWlmICgoUmF0ZSA+IFJBVEVfMSkKLQkJICAgICYmIE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsCi0JCQkJCSAgZk9QX1NUQVRVU19TSE9SVF9QUkVBTUJMRV9JTlVTRUQpKQotCQkJRHVyYXRpb24gPSA5NjsJLyogNzIrMjQgcHJlYW1ibGUrcGxjcCAqLwotCQllbHNlCi0JCQlEdXJhdGlvbiA9IDE5MjsJLyogMTQ0KzQ4IHByZWFtYmxlK3BsY3AgKi8KLQotCQlEdXJhdGlvbiArPSAodTE2KSgoU2l6ZSA8PCA0KSAvIFJhdGVJZFRvNTAwS2Jwc1tSYXRlXSk7Ci0JCWlmICgoU2l6ZSA8PCA0KSAlIFJhdGVJZFRvNTAwS2Jwc1tSYXRlXSkKLQkJCUR1cmF0aW9uKys7Ci0JfSBlbHNlIGlmIChSYXRlIDw9IFJBVEVfTEFTVF9PRkRNX1JBVEUpCS8qIE9GRE0gcmF0ZXMgKi8KLQl7Ci0JCUR1cmF0aW9uID0gMjAgKyA2OwkvKiAxNis0IHByZWFtYmxlK3BsY3AgKyBTaWduYWwgRXh0ZW5zaW9uICovCi0JCUR1cmF0aW9uICs9Ci0JCSAgICA0ICogKHUxNikoKDExICsgU2l6ZSAqIDQpIC8gUmF0ZUlkVG81MDBLYnBzW1JhdGVdKTsKLQkJaWYgKCgxMSArIFNpemUgKiA0KSAlIFJhdGVJZFRvNTAwS2Jwc1tSYXRlXSkKLQkJCUR1cmF0aW9uICs9IDQ7Ci0JfSBlbHNlCQkJLyptaW1vIHJhdGUgKi8KLQl7Ci0JCUR1cmF0aW9uID0gMjAgKyA2OwkvKiAxNis0IHByZWFtYmxlK3BsY3AgKyBTaWduYWwgRXh0ZW5zaW9uICovCi0JfQotCi0JcmV0dXJuICh1MTYpRHVyYXRpb247Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCQlDYWxjdWxhdGVzIHRoZSBkdXJhdGlvbiB3aGljaCBpcyByZXF1aXJlZCB0byB0cmFuc21pdCBvdXQgZnJhbWVzCi0Jd2l0aCBnaXZlbiBzaXplIGFuZCBzcGVjaWZpZWQgcmF0ZS4KLQotCUFyZ3VtZW50czoKLQkJcFR4V0kJCVBvaW50ZXIgdG8gaGVhZCBvZiBlYWNoIE1QRFUgdG8gSFcuCi0JCUFjayAJCVNldHRpbmcgZm9yIEFjayByZXF1aXJlbWVudCBiaXQKLQkJRnJhZ21lbnQJU2V0dGluZyBmb3IgRnJhZ21lbnQgYml0Ci0JCVJldHJ5TW9kZQlTZXR0aW5nIGZvciByZXRyeSBtb2RlCi0JCUlmcyAJCVNldHRpbmcgZm9yIElGUyBnYXAKLQkJUmF0ZQkJU2V0dGluZyBmb3IgdHJhbnNtaXQgcmF0ZQotCQlTZXJ2aWNlIAlTZXR0aW5nIGZvciBzZXJ2aWNlCi0JCUxlbmd0aAkJRnJhbWUgbGVuZ3RoCi0JCVR4UHJlYW1ibGUJU2hvcnQgb3IgTG9uZyBwcmVhbWJsZSB3aGVuIHVzaW5nIENDSyByYXRlcwotCQlRdWVJZHggLSAwLTMsIGFjY29yZGluZyB0byA4MDIuMTFlL2Q0LjQgSnVuZS8yMDAzCi0KLQlSZXR1cm4gVmFsdWU6Ci0JCU5vbmUKLQotCUlSUUwgPSBQQVNTSVZFX0xFVkVMCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLSAgICBTZWUgYWxzbyA6IEJBU21hcnRIYXJkVHJhbnNtaXQoKSAgICAhCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFJUTVBXcml0ZVR4V0koc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfdHh3aSAqIHBPdXRUeFdJLCBJTiBCT09MRUFOIEZSQUcsIElOIEJPT0xFQU4gQ0ZBQ0ssIElOIEJPT0xFQU4gSW5zVGltZXN0YW1wLCBJTiBCT09MRUFOIEFNUERVLCBJTiBCT09MRUFOIEFjaywgSU4gQk9PTEVBTiBOU2VxLAkvKiBIVyBuZXcgYSBzZXF1ZW5jZS4gKi8KLQkJICAgdTggQkFTaXplLAotCQkgICB1OCBXQ0lELAotCQkgICB1bnNpZ25lZCBsb25nIExlbmd0aCwKLQkJICAgdTggUElELAotCQkgICB1OCBUSUQsCi0JCSAgIHU4IFR4UmF0ZSwKLQkJICAgdTggVHhvcG1vZGUsCi0JCSAgIElOIEJPT0xFQU4gQ2ZBY2ssIElOIEhUVFJBTlNNSVRfU0VUVElORyAqIHBUcmFuc21pdCkKLXsKLQlzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwTWFjID0gTlVMTDsKLQlzdHJ1Y3QgcnRfdHh3aSBUeFdJOwotCXN0cnVjdCBydF90eHdpICogcFR4V0k7Ci0KLQlpZiAoV0NJRCA8IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKQotCQlwTWFjID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbV0NJRF07Ci0KLQkvKiAqLwotCS8qIEFsd2F5cyB1c2UgTG9uZyBwcmVhbWJsZSBiZWZvcmUgdmVyaWZpYXRpb24gc2hvcnQgcHJlYW1ibGUgZnVuY3Rpb25hbGl0eSB3b3JrcyB3ZWxsLiAqLwotCS8qIFRvZG86IHJlbW92ZSB0aGUgZm9sbG93aW5nIGxpbmUgaWYgc2hvcnQgcHJlYW1ibGUgZnVuY3Rpb25hbGl0eSB3b3JrcyAqLwotCS8qICovCi0JT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfU0hPUlRfUFJFQU1CTEVfSU5VU0VEKTsKLQlOZGlzWmVyb01lbW9yeSgmVHhXSSwgVFhXSV9TSVpFKTsKLQlwVHhXSSA9ICZUeFdJOwotCi0JcFR4V0ktPkZSQUcgPSBGUkFHOwotCi0JcFR4V0ktPkNGQUNLID0gQ0ZBQ0s7Ci0JcFR4V0ktPlRTID0gSW5zVGltZXN0YW1wOwotCXBUeFdJLT5BTVBEVSA9IEFNUERVOwotCXBUeFdJLT5BQ0sgPSBBY2s7Ci0JcFR4V0ktPnR4b3AgPSBUeG9wbW9kZTsKLQotCXBUeFdJLT5OU0VRID0gTlNlcTsKLQkvKiBKb2huIHR1bmUgdGhlIHBlcmZvcm1hY2Ugd2l0aCBJbnRlbCBDbGllbnQgaW4gMjAgTUh6IHBlcmZvcm1hbmNlICovCi0JQkFTaXplID0gcEFkLT5Db21tb25DZmcuVHhCQVNpemU7Ci0JaWYgKHBBZC0+TUFDVmVyc2lvbiA9PSAweDI4NzIwMjAwKSB7Ci0JCWlmIChCQVNpemUgPiAxMykKLQkJCUJBU2l6ZSA9IDEzOwotCX0gZWxzZSB7Ci0JCWlmIChCQVNpemUgPiA3KQotCQkJQkFTaXplID0gNzsKLQl9Ci0JcFR4V0ktPkJBV2luU2l6ZSA9IEJBU2l6ZTsKLQlwVHhXSS0+U2hvcnRHSSA9IHBUcmFuc21pdC0+ZmllbGQuU2hvcnRHSTsKLQlwVHhXSS0+U1RCQyA9IHBUcmFuc21pdC0+ZmllbGQuU1RCQzsKLQotCXBUeFdJLT5XaXJlbGVzc0NsaUlEID0gV0NJRDsKLQlwVHhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50ID0gTGVuZ3RoOwotCXBUeFdJLT5QYWNrZXRJZCA9IFBJRDsKLQotCS8qIElmIENDSyBvciBPRkRNLCBCVyBtdXN0IGJlIDIwICovCi0JcFR4V0ktPkJXID0KLQkgICAgKHBUcmFuc21pdC0+ZmllbGQuTU9ERSA8PQotCSAgICAgTU9ERV9PRkRNKSA/IChCV18yMCkgOiAocFRyYW5zbWl0LT5maWVsZC5CVyk7Ci0KLQlwVHhXSS0+TUNTID0gcFRyYW5zbWl0LT5maWVsZC5NQ1M7Ci0JcFR4V0ktPlBIWU1PREUgPSBwVHJhbnNtaXQtPmZpZWxkLk1PREU7Ci0JcFR4V0ktPkNGQUNLID0gQ2ZBY2s7Ci0KLQlpZiAocE1hYykgewotCQlpZiAocEFkLT5Db21tb25DZmcuYk1JTU9QU0VuYWJsZSkgewotCQkJaWYgKChwTWFjLT5NbXBzTW9kZSA9PSBNTVBTX0RZTkFNSUMpCi0JCQkgICAgJiYgKHBUcmFuc21pdC0+ZmllbGQuTUNTID4gNykpIHsKLQkJCQkvKiBEeW5hbWljIE1JTU8gUG93ZXIgU2F2ZSBNb2RlICovCi0JCQkJcFR4V0ktPk1JTU9wcyA9IDE7Ci0JCQl9IGVsc2UgaWYgKHBNYWMtPk1tcHNNb2RlID09IE1NUFNfU1RBVElDKSB7Ci0JCQkJLyogU3RhdGljIE1JTU8gUG93ZXIgU2F2ZSBNb2RlICovCi0JCQkJaWYgKHBUcmFuc21pdC0+ZmllbGQuTU9ERSA+PSBNT0RFX0hUTUlYCi0JCQkJICAgICYmIHBUcmFuc21pdC0+ZmllbGQuTUNTID4gNykgewotCQkJCQlwVHhXSS0+TUNTID0gNzsKLQkJCQkJcFR4V0ktPk1JTU9wcyA9IDA7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCS8qcFR4V0ktPk1JTU9wcyA9IChwTWFjLT5Qc01vZGUgPT0gUFdSX01NUFMpPyAxOjA7ICovCi0JCWlmIChwTWFjLT5iSUFtQmFkQXRoZXJvcwotCQkgICAgJiYgKHBNYWMtPldlcFN0YXR1cyAhPSBOZGlzODAyXzExV0VQRGlzYWJsZWQpKSB7Ci0JCQlwVHhXSS0+TXBkdURlbnNpdHkgPSA3OwotCQl9IGVsc2UgewotCQkJcFR4V0ktPk1wZHVEZW5zaXR5ID0gcE1hYy0+TXBkdURlbnNpdHk7Ci0JCX0KLQl9Ci0KLQlwVHhXSS0+UGFja2V0SWQgPSBwVHhXSS0+TUNTOwotCU5kaXNNb3ZlTWVtb3J5KHBPdXRUeFdJLCAmVHhXSSwgc2l6ZW9mKHN0cnVjdCBydF90eHdpKSk7Ci19Ci0KLXZvaWQgUlRNUFdyaXRlVHhXSV9EYXRhKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCXN0cnVjdCBydF90eHdpICogcFR4V0ksIHN0cnVjdCBydF90eF9ibGsgKnBUeEJsaykKLXsKLQlIVFRSQU5TTUlUX1NFVFRJTkcgKnBUcmFuc21pdDsKLQlzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwTWFjRW50cnk7Ci0JdTggQkFTaXplOwotCi0JQVNTRVJUKHBUeFdJKTsKLQotCXBUcmFuc21pdCA9IHBUeEJsay0+cFRyYW5zbWl0OwotCXBNYWNFbnRyeSA9IHBUeEJsay0+cE1hY0VudHJ5OwotCi0JLyogKi8KLQkvKiBBbHdheXMgdXNlIExvbmcgcHJlYW1ibGUgYmVmb3JlIHZlcmlmaWF0aW9uIHNob3J0IHByZWFtYmxlIGZ1bmN0aW9uYWxpdHkgd29ya3Mgd2VsbC4gKi8KLQkvKiBUb2RvOiByZW1vdmUgdGhlIGZvbGxvd2luZyBsaW5lIGlmIHNob3J0IHByZWFtYmxlIGZ1bmN0aW9uYWxpdHkgd29ya3MgKi8KLQkvKiAqLwotCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1NIT1JUX1BSRUFNQkxFX0lOVVNFRCk7Ci0JTmRpc1plcm9NZW1vcnkocFR4V0ksIFRYV0lfU0laRSk7Ci0KLQlwVHhXSS0+RlJBRyA9IFRYX0JMS19URVNUX0ZMQUcocFR4QmxrLCBmVFhfYkFsbG93RnJhZyk7Ci0JcFR4V0ktPkFDSyA9IFRYX0JMS19URVNUX0ZMQUcocFR4QmxrLCBmVFhfYkFja1JlcXVpcmVkKTsKLQlwVHhXSS0+dHhvcCA9IHBUeEJsay0+RnJhbWVHYXA7Ci0KLQlwVHhXSS0+V2lyZWxlc3NDbGlJRCA9IHBUeEJsay0+V2NpZDsKLQotCXBUeFdJLT5NUERVdG90YWxCeXRlQ291bnQgPSBwVHhCbGstPk1wZHVIZWFkZXJMZW4gKyBwVHhCbGstPlNyY0J1ZkxlbjsKLQlwVHhXSS0+Q0ZBQ0sgPSBUWF9CTEtfVEVTVF9GTEFHKHBUeEJsaywgZlRYX2JQaWdneUJhY2spOwotCi0JLyogSWYgQ0NLIG9yIE9GRE0sIEJXIG11c3QgYmUgMjAgKi8KLQlwVHhXSS0+QlcgPQotCSAgICAocFRyYW5zbWl0LT5maWVsZC5NT0RFIDw9Ci0JICAgICBNT0RFX09GRE0pID8gKEJXXzIwKSA6IChwVHJhbnNtaXQtPmZpZWxkLkJXKTsKLQlwVHhXSS0+QU1QRFUgPSAoKHBUeEJsay0+VHhGcmFtZVR5cGUgPT0gVFhfQU1QRFVfRlJBTUUpID8gVFJVRSA6IEZBTFNFKTsKLQotCS8qIEpvaG4gdHVuZSB0aGUgcGVyZm9ybWFjZSB3aXRoIEludGVsIENsaWVudCBpbiAyMCBNSHogcGVyZm9ybWFuY2UgKi8KLQlCQVNpemUgPSBwQWQtPkNvbW1vbkNmZy5UeEJBU2l6ZTsKLQlpZiAoKHBUeEJsay0+VHhGcmFtZVR5cGUgPT0gVFhfQU1QRFVfRlJBTUUpICYmIChwTWFjRW50cnkpKSB7Ci0JCXU4IFJBQkFPcmlJZHggPSAwOwkvKlRoZSBSQSdzIEJBIE9yaWdpbmF0b3IgdGFibGUgaW5kZXguICovCi0KLQkJUkFCQU9yaUlkeCA9Ci0JCSAgICBwVHhCbGstPnBNYWNFbnRyeS0+QkFPcmlXY2lkQXJyYXlbcFR4QmxrLT5Vc2VyUHJpb3JpdHldOwotCQlCQVNpemUgPSBwQWQtPkJBVGFibGUuQkFPcmlFbnRyeVtSQUJBT3JpSWR4XS5CQVdpblNpemU7Ci0JfQotCi0JcFR4V0ktPlR4QkYgPSBwVHJhbnNtaXQtPmZpZWxkLlR4QkY7Ci0JcFR4V0ktPkJBV2luU2l6ZSA9IEJBU2l6ZTsKLQlwVHhXSS0+U2hvcnRHSSA9IHBUcmFuc21pdC0+ZmllbGQuU2hvcnRHSTsKLQlwVHhXSS0+U1RCQyA9IHBUcmFuc21pdC0+ZmllbGQuU1RCQzsKLQotCXBUeFdJLT5NQ1MgPSBwVHJhbnNtaXQtPmZpZWxkLk1DUzsKLQlwVHhXSS0+UEhZTU9ERSA9IHBUcmFuc21pdC0+ZmllbGQuTU9ERTsKLQotCWlmIChwTWFjRW50cnkpIHsKLQkJaWYgKChwTWFjRW50cnktPk1tcHNNb2RlID09IE1NUFNfRFlOQU1JQykKLQkJICAgICYmIChwVHJhbnNtaXQtPmZpZWxkLk1DUyA+IDcpKSB7Ci0JCQkvKiBEeW5hbWljIE1JTU8gUG93ZXIgU2F2ZSBNb2RlICovCi0JCQlwVHhXSS0+TUlNT3BzID0gMTsKLQkJfSBlbHNlIGlmIChwTWFjRW50cnktPk1tcHNNb2RlID09IE1NUFNfU1RBVElDKSB7Ci0JCQkvKiBTdGF0aWMgTUlNTyBQb3dlciBTYXZlIE1vZGUgKi8KLQkJCWlmIChwVHJhbnNtaXQtPmZpZWxkLk1PREUgPj0gTU9ERV9IVE1JWAotCQkJICAgICYmIHBUcmFuc21pdC0+ZmllbGQuTUNTID4gNykgewotCQkJCXBUeFdJLT5NQ1MgPSA3OwotCQkJCXBUeFdJLT5NSU1PcHMgPSAwOwotCQkJfQotCQl9Ci0KLQkJaWYgKHBNYWNFbnRyeS0+YklBbUJhZEF0aGVyb3MKLQkJICAgICYmIChwTWFjRW50cnktPldlcFN0YXR1cyAhPSBOZGlzODAyXzExV0VQRGlzYWJsZWQpKSB7Ci0JCQlwVHhXSS0+TXBkdURlbnNpdHkgPSA3OwotCQl9IGVsc2UgewotCQkJcFR4V0ktPk1wZHVEZW5zaXR5ID0gcE1hY0VudHJ5LT5NcGR1RGVuc2l0eTsKLQkJfQotCX0KLQotCS8qIGZvciByYXRlIGFkYXBhdGlvbiAqLwotCXBUeFdJLT5QYWNrZXRJZCA9IHBUeFdJLT5NQ1M7Ci19Ci0KLXZvaWQgUlRNUFdyaXRlVHhXSV9DYWNoZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgc3RydWN0IHJ0X3R4d2kgKiBwVHhXSSwgc3RydWN0IHJ0X3R4X2JsayAqcFR4QmxrKQotewotCVBIVFRSQU5TTUlUX1NFVFRJTkcgLypwVHhIVFBoeU1vZGUsICovIHBUcmFuc21pdDsKLQlzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwTWFjRW50cnk7Ci0KLQkvKiAqLwotCS8qIHVwZGF0ZSBUWFdJICovCi0JLyogKi8KLQlwTWFjRW50cnkgPSBwVHhCbGstPnBNYWNFbnRyeTsKLQlwVHJhbnNtaXQgPSBwVHhCbGstPnBUcmFuc21pdDsKLQotCS8qaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfVFhfUkFURV9TV0lUQ0hfRU5BQkxFRCkpICovCi0JLyppZiAoUlRNUENoZWNrRW50cnlFbmFibGVBdXRvUmF0ZVN3aXRjaChwQWQsIHBNYWNFbnRyeSkpICovCi0JLyppZiAoVFhfQkxLX1RFU1RfRkxBRyhwVHhCbGssIGZUWF9BdXRvUmF0ZVN3aXRjaCkpICovCi0JaWYgKHBNYWNFbnRyeS0+YkF1dG9UeFJhdGVTd2l0Y2gpIHsKLQkJcFR4V0ktPnR4b3AgPSBJRlNfSFRUWE9QOwotCi0JCS8qIElmIENDSyBvciBPRkRNLCBCVyBtdXN0IGJlIDIwICovCi0JCXBUeFdJLT5CVyA9Ci0JCSAgICAocFRyYW5zbWl0LT5maWVsZC5NT0RFIDw9Ci0JCSAgICAgTU9ERV9PRkRNKSA/IChCV18yMCkgOiAocFRyYW5zbWl0LT5maWVsZC5CVyk7Ci0JCXBUeFdJLT5TaG9ydEdJID0gcFRyYW5zbWl0LT5maWVsZC5TaG9ydEdJOwotCQlwVHhXSS0+U1RCQyA9IHBUcmFuc21pdC0+ZmllbGQuU1RCQzsKLQotCQlwVHhXSS0+TUNTID0gcFRyYW5zbWl0LT5maWVsZC5NQ1M7Ci0JCXBUeFdJLT5QSFlNT0RFID0gcFRyYW5zbWl0LT5maWVsZC5NT0RFOwotCi0JCS8qIHNldCBQSUQgZm9yIFR4UmF0ZVN3aXRjaGluZyAqLwotCQlwVHhXSS0+UGFja2V0SWQgPSBwVHJhbnNtaXQtPmZpZWxkLk1DUzsKLQl9Ci0KLQlwVHhXSS0+QU1QRFUgPSAoKHBNYWNFbnRyeS0+Tm9CQURhdGFDb3VudERvd24gPT0gMCkgPyBUUlVFIDogRkFMU0UpOwotCXBUeFdJLT5NSU1PcHMgPSAwOwotCi0JaWYgKHBBZC0+Q29tbW9uQ2ZnLmJNSU1PUFNFbmFibGUpIHsKLQkJLyogTUlNTyBQb3dlciBTYXZlIE1vZGUgKi8KLQkJaWYgKChwTWFjRW50cnktPk1tcHNNb2RlID09IE1NUFNfRFlOQU1JQykKLQkJICAgICYmIChwVHJhbnNtaXQtPmZpZWxkLk1DUyA+IDcpKSB7Ci0JCQkvKiBEeW5hbWljIE1JTU8gUG93ZXIgU2F2ZSBNb2RlICovCi0JCQlwVHhXSS0+TUlNT3BzID0gMTsKLQkJfSBlbHNlIGlmIChwTWFjRW50cnktPk1tcHNNb2RlID09IE1NUFNfU1RBVElDKSB7Ci0JCQkvKiBTdGF0aWMgTUlNTyBQb3dlciBTYXZlIE1vZGUgKi8KLQkJCWlmICgocFRyYW5zbWl0LT5maWVsZC5NT0RFID49IE1PREVfSFRNSVgpCi0JCQkgICAgJiYgKHBUcmFuc21pdC0+ZmllbGQuTUNTID4gNykpIHsKLQkJCQlwVHhXSS0+TUNTID0gNzsKLQkJCQlwVHhXSS0+TUlNT3BzID0gMDsKLQkJCX0KLQkJfQotCX0KLQotCXBUeFdJLT5NUERVdG90YWxCeXRlQ291bnQgPSBwVHhCbGstPk1wZHVIZWFkZXJMZW4gKyBwVHhCbGstPlNyY0J1ZkxlbjsKLQotfQotCi0vKiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgd2hlbiAtICovCi0vKiAxLiBNRUFESUFfQ09OTkVDVEVEICovCi0vKiAyLiBBR0dSRUdBVElPTl9JTl9VU0VEICovCi0vKiAzLiBGcmFnbWVudGF0aW9uIG5vdCBpbiB1c2VkICovCi0vKiA0LiBlaXRoZXIgbm8gcHJldmlvdXMgZnJhbWUgKHBQcmV2QWRkcjE9TlVMTCkgLk9SLiBwcmV2aW91ZCBmcmFtZSBpcyBhZ2dyZWdhdGlibGUgKi8KLUJPT0xFQU4gVHhGcmFtZUlzQWdncmVnYXRpYmxlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICAgIHU4ICpwUHJldkFkZHIxLCB1OCAqcDgwMjNoZHIpCi17Ci0KLQkvKiBjYW4ndCBhZ2dyZWdhdGUgRUFQT0wgKDgwMi4xeCkgZnJhbWUgKi8KLQlpZiAoKHA4MDIzaGRyWzEyXSA9PSAweDg4KSAmJiAocDgwMjNoZHJbMTNdID09IDB4OGUpKQotCQlyZXR1cm4gRkFMU0U7Ci0KLQkvKiBjYW4ndCBhZ2dyZWdhdGUgbXVsdGljYXN0L2Jyb2FkY2FzdCBmcmFtZSAqLwotCWlmIChwODAyM2hkclswXSAmIDB4MDEpCi0JCXJldHVybiBGQUxTRTsKLQotCWlmIChJTkZSQV9PTihwQWQpKQkvKiBtdXN0IGJlIHVuaWNhc3QgdG8gQVAgKi8KLQkJcmV0dXJuIFRSVUU7Ci0JZWxzZSBpZiAoKHBQcmV2QWRkcjEgPT0gTlVMTCkgfHwgTUFDX0FERFJfRVFVQUwocFByZXZBZGRyMSwgcDgwMjNoZHIpKQkvKiB1bmljYXN0IHRvIHNhbWUgU1RBICovCi0JCXJldHVybiBUUlVFOwotCWVsc2UKLQkJcmV0dXJuIEZBTFNFOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQkgICBDaGVjayB0aGUgTVNEVSBBZ2dyZWdhdGlvbiBwb2xpY3kKLQkxLkhUIGFnZ3JlZ2F0aW9uIGlzIEEtTVNEVQotCTIubGVnYWFjeSByYXRlIGFnZ3JlZ2F0aW9uIGlzIHNvZnR3YXJlIGFnZ3JlZ2F0aW9uIGJ5IFJhbGluay4KLQotCUFyZ3VtZW50czoKLQotCVJldHVybiBWYWx1ZToKLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi1CT09MRUFOIFBlZXJJc0FnZ3JlT24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICAgICB1bnNpZ25lZCBsb25nIFR4UmF0ZSwgc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcE1hY0VudHJ5KQotewotCXVuc2lnbmVkIGxvbmcgQUZsYWdzID0KLQkgICAgKGZDTElFTlRfU1RBVFVTX0FNU0RVX0lOVVNFRCB8IGZDTElFTlRfU1RBVFVTX0FHR1JFR0FUSU9OX0NBUEFCTEUpOwotCi0JaWYgKHBNYWNFbnRyeSAhPSBOVUxMICYmIENMSUVOVF9TVEFUVVNfVEVTVF9GTEFHKHBNYWNFbnRyeSwgQUZsYWdzKSkgewotCQlpZiAocE1hY0VudHJ5LT5IVFBoeU1vZGUuZmllbGQuTU9ERSA+PSBNT0RFX0hUTUlYKSB7Ci0JCQlyZXR1cm4gVFJVRTsKLQkJfQotI2lmZGVmIEFHR1JFR0FUSU9OX1NVUFBPUlQKLQkJaWYgKFR4UmF0ZSA+PSBSQVRFXzYgJiYgcEFkLT5Db21tb25DZmcuYkFnZ3JlZ2F0aW9uQ2FwYWJsZSAmJiAoIShPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1dNTV9JTlVTRUQpICYmIENMSUVOVF9TVEFUVVNfVEVTVF9GTEFHKHBNYWNFbnRyeSwgZkNMSUVOVF9TVEFUVVNfV01NX0NBUEFCTEUpKSkpIHsJLyogbGVnYWN5ICBSYWxpbmsgQWdncmVnYXRpb24gc3VwcG9ydCAqLwotCQkJcmV0dXJuIFRSVUU7Ci0JCX0KLSNlbmRpZiAvKiBBR0dSRUdBVElPTl9TVVBQT1JUIC8vICovCi0JfQotCi0JcmV0dXJuIEZBTFNFOwotCi19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCQlDaGVjayBhbmQgZmluZSB0aGUgcGFja2V0IHdhaXRpbmcgaW4gU1cgcXVldWUgd2l0aCBoaWdoZXN0IHByaW9yaXR5Ci0KLQlBcmd1bWVudHM6Ci0JCXBBZCBQb2ludGVyIHRvIG91ciBhZGFwdGVyCi0KLQlSZXR1cm4gVmFsdWU6Ci0JCXBRdWV1ZQkJUG9pbnRlciB0byBXYWl0aW5nIFF1ZXVlCi0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi1zdHJ1Y3QgcnRfcXVldWVfaGVhZGVyICpSVE1QQ2hlY2tUeFN3UXVldWUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1OCAqcFF1ZUlkeCkKLXsKLQotCXVuc2lnbmVkIGxvbmcgTnVtYmVyOwotCS8qIDIwMDQtMTEtMTUgdG8gYmUgcmVtb3ZlZC4gdGVzdCBhZ2dyZWdhdGlvbiBvbmx5ICovCi0vKiAgICAgIGlmICgoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19BR0dSRUdBVElPTl9JTlVTRUQpKSAmJiAoKnBOdW1iZXIgPCAyKSkgKi8KLS8qICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICovCi0KLQlOdW1iZXIgPSBwQWQtPlR4U3dRdWV1ZVtRSURfQUNfQktdLk51bWJlcgotCSAgICArIHBBZC0+VHhTd1F1ZXVlW1FJRF9BQ19CRV0uTnVtYmVyCi0JICAgICsgcEFkLT5UeFN3UXVldWVbUUlEX0FDX1ZJXS5OdW1iZXIKLQkgICAgKyBwQWQtPlR4U3dRdWV1ZVtRSURfQUNfVk9dLk51bWJlcjsKLQotCWlmIChwQWQtPlR4U3dRdWV1ZVtRSURfQUNfVk9dLkhlYWQgIT0gTlVMTCkgewotCQkqcFF1ZUlkeCA9IFFJRF9BQ19WTzsKLQkJcmV0dXJuICgmcEFkLT5UeFN3UXVldWVbUUlEX0FDX1ZPXSk7Ci0JfSBlbHNlIGlmIChwQWQtPlR4U3dRdWV1ZVtRSURfQUNfVkldLkhlYWQgIT0gTlVMTCkgewotCQkqcFF1ZUlkeCA9IFFJRF9BQ19WSTsKLQkJcmV0dXJuICgmcEFkLT5UeFN3UXVldWVbUUlEX0FDX1ZJXSk7Ci0JfSBlbHNlIGlmIChwQWQtPlR4U3dRdWV1ZVtRSURfQUNfQkVdLkhlYWQgIT0gTlVMTCkgewotCQkqcFF1ZUlkeCA9IFFJRF9BQ19CRTsKLQkJcmV0dXJuICgmcEFkLT5UeFN3UXVldWVbUUlEX0FDX0JFXSk7Ci0JfSBlbHNlIGlmIChwQWQtPlR4U3dRdWV1ZVtRSURfQUNfQktdLkhlYWQgIT0gTlVMTCkgewotCQkqcFF1ZUlkeCA9IFFJRF9BQ19CSzsKLQkJcmV0dXJuICgmcEFkLT5UeFN3UXVldWVbUUlEX0FDX0JLXSk7Ci0JfQotCS8qIE5vIHBhY2tldCBwZW5kaW5nIGluIFR4IFN3IHF1ZXVlICovCi0JKnBRdWVJZHggPSBRSURfQUNfQks7Ci0KLQlyZXR1cm4gKE5VTEwpOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQkJU3VzcGVuZCBNU0RVIHRyYW5zbWlzc2lvbgotCi0JQXJndW1lbnRzOgotCQlwQWQgCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKLQotCVJldHVybiBWYWx1ZToKLQkJTm9uZQotCi0JTm90ZToKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgUlRNUFN1c3BlbmRNc2R1VHJhbnNtaXNzaW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTQ0FOTklORywgc3VzcGVuZCBNU0RVIHRyYW5zbWlzc2lvbiAuLi5cbiIpKTsKLQotCS8qICovCi0JLyogQmVmb3JlIEJTU19TQ0FOX0lOX1BST0dSRVNTLCB3ZSBuZWVkIHRvIGtlZXAgQ3VycmVudCBSNjYgdmFsdWUgYW5kICovCi0JLyogdXNlIExvd2JvdW5kIGFzIFI2NiB2YWx1ZSBvbiBTY2FuTmV4dENoYW5uZWwoLi4uKSAqLwotCS8qICovCi0JUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I2NiwKLQkJCQkgICAgJnBBZC0+QmJwVHVuaW5nLlI2NkN1cnJlbnRWYWx1ZSk7Ci0KLQkvKiBzZXQgQkJQX1I2NiB0byAweDMwLzB4NDAgd2hlbiBzY2FubmluZyAoQXNpY1N3aXRjaENoYW5uZWwgd2lsbCBzZXQgUjY2IGFjY29yZGluZyB0byBjaGFubmVsIHdoZW4gc2Nhbm5pbmcpICovCi0JLypSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2NiwgKDB4MjYgKyBHRVRfTE5BX0dBSU4ocEFkKSkpOyAqLwotCVJUTVBTZXRBR0NJbml0VmFsdWUocEFkLCBCV18yMCk7Ci0KLQlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUyk7Ci0JLypSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9DTlRMX0NTUiwgMHgwMDBmMDAwMCk7ICAgICAgICAgICAgICAgIC8vIGFib3J0IGFsbCBUWCByaW5ncyAqLwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQkJUmVzdW1lIE1TRFUgdHJhbnNtaXNzaW9uCi0KLQlBcmd1bWVudHM6Ci0JCXBBZCAJUG9pbnRlciB0byBvdXIgYWRhcHRlcgotCi0JUmV0dXJuIFZhbHVlOgotCQlOb25lCi0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFJUTVBSZXN1bWVNc2R1VHJhbnNtaXNzaW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLS8qICAgIHU4ICAgICAgICAgICAgICAgICAgICAgSXJxU3RhdGU7ICovCi0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTQ0FOIGRvbmUsIHJlc3VtZSBNU0RVIHRyYW5zbWlzc2lvbiAuLi5cbiIpKTsKLQotCS8qIEFmdGVyIGZpbmlzaCBCU1NfU0NBTl9JTl9QUk9HUkVTUywgd2UgbmVlZCB0byByZXN0b3JlIEN1cnJlbnQgUjY2IHZhbHVlICovCi0JLyogUjY2IHNob3VsZCBub3QgYmUgMCAqLwotCWlmIChwQWQtPkJicFR1bmluZy5SNjZDdXJyZW50VmFsdWUgPT0gMCkgewotCQlwQWQtPkJicFR1bmluZy5SNjZDdXJyZW50VmFsdWUgPSAweDM4OwotCQlEQkdQUklOVF9FUlIoIlJUTVBSZXN1bWVNc2R1VHJhbnNtaXNzaW9uLCBSNjZDdXJyZW50VmFsdWU9MC4uLlxuIik7Ci0JfQotCi0JUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsCi0JCQkJICAgICBwQWQtPkJicFR1bmluZy5SNjZDdXJyZW50VmFsdWUpOwotCi0JUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUyk7Ci0vKiBzYW1wbGUsIGZvciBJUlEgTE9DSyB0byBTRU0gTE9DSyAqLwotLyogICAgSXJxU3RhdGUgPSBwQWQtPmlycV9kaXNhYmxlZDsgKi8KLS8qICAgICAgaWYgKElycVN0YXRlKSAqLwotLyogICAgICAgICAgICAgIFJUTVBEZVF1ZXVlUGFja2V0KHBBZCwgVFJVRSwgTlVNX09GX1RYX1JJTkcsIE1BWF9UWF9QUk9DRVNTKTsgKi8KLS8qICAgIGVsc2UgKi8KLQlSVE1QRGVRdWV1ZVBhY2tldChwQWQsIEZBTFNFLCBOVU1fT0ZfVFhfUklORywgTUFYX1RYX1BST0NFU1MpOwotfQotCi11MzIgZGVhZ2dyZWdhdGVfQU1TRFVfYW5ub3VuY2Uoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCXZvaWQgKnBQYWNrZXQsCi0JCQkJdTggKnBEYXRhLCB1bnNpZ25lZCBsb25nIERhdGFTaXplKQotewotCXUxNiBQYXlsb2FkU2l6ZTsKLQl1MTYgU3ViRnJhbWVTaXplOwotCXN0cnVjdCBydF9oZWFkZXJfODAyXzMgKiBwQU1TRFVzdWJoZWFkZXI7Ci0JdTMyIG5NU0RVOwotCXU4IEhlYWRlcjgwMl8zWzE0XTsKLQotCXU4ICpwUGF5bG9hZCwgKnBEQSwgKnBTQSwgKnBSZW1vdmVkTExDU05BUDsKLQl2b2lkICpwQ2xvbmVQYWNrZXQ7Ci0KLQluTVNEVSA9IDA7Ci0KLQl3aGlsZSAoRGF0YVNpemUgPiBMRU5HVEhfODAyXzMpIHsKLQotCQluTVNEVSsrOwotCi0JCS8qaGV4X2R1bXAoInN1YmhlYWRlciIsIHBEYXRhLCA2NCk7ICovCi0JCXBBTVNEVXN1YmhlYWRlciA9IChzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8zICopIHBEYXRhOwotCQkvKnBEYXRhICs9IExFTkdUSF84MDJfMzsgKi8KLQkJUGF5bG9hZFNpemUgPQotCQkgICAgcEFNU0RVc3ViaGVhZGVyLT5PY3RldFsxXSArCi0JCSAgICAocEFNU0RVc3ViaGVhZGVyLT5PY3RldFswXSA8PCA4KTsKLQkJU3ViRnJhbWVTaXplID0gUGF5bG9hZFNpemUgKyBMRU5HVEhfODAyXzM7Ci0KLQkJaWYgKChEYXRhU2l6ZSA8IFN1YkZyYW1lU2l6ZSkgfHwgKFBheWxvYWRTaXplID4gMTUxOCkpIHsKLQkJCWJyZWFrOwotCQl9Ci0JCS8qREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCIlZCBzdWJmcmFtZTogU2l6ZSA9ICVkXG4iLCAgbk1TRFUsIFBheWxvYWRTaXplKSk7ICovCi0KLQkJcFBheWxvYWQgPSBwRGF0YSArIExFTkdUSF84MDJfMzsKLQkJcERBID0gcERhdGE7Ci0JCXBTQSA9IHBEYXRhICsgTUFDX0FERFJfTEVOOwotCi0JCS8qIGNvbnZlcnQgdG8gODAyLjMgaGVhZGVyICovCi0JCUNPTlZFUlRfVE9fODAyXzMoSGVhZGVyODAyXzMsIHBEQSwgcFNBLCBwUGF5bG9hZCwgUGF5bG9hZFNpemUsCi0JCQkJIHBSZW1vdmVkTExDU05BUCk7Ci0KLQkJaWYgKChIZWFkZXI4MDJfM1sxMl0gPT0gMHg4OCkgJiYgKEhlYWRlcjgwMl8zWzEzXSA9PSAweDhFKSkgewotCQkJLyogYXZvaWQgbG9jYWwgaGVhcCBvdmVyZmxvdywgdXNlIGR5YW5hbWljIGFsbG9jYXRpb24gKi8KLQkJCXN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0gPQotCQkJICAgIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0pLAotCQkJCQkJCU1FTV9BTExPQ19GTEFHKTsKLQkJCWlmIChFbGVtICE9IE5VTEwpIHsKLQkJCQltZW1tb3ZlKEVsZW0tPk1zZyArCi0JCQkJCShMRU5HVEhfODAyXzExICsgTEVOR1RIXzgwMl8xX0gpLAotCQkJCQlwUGF5bG9hZCwgUGF5bG9hZFNpemUpOwotCQkJCUVsZW0tPk1zZ0xlbiA9Ci0JCQkJICAgIExFTkdUSF84MDJfMTEgKyBMRU5HVEhfODAyXzFfSCArCi0JCQkJICAgIFBheWxvYWRTaXplOwotCQkJCS8qV3BhRUFQT0xLZXlBY3Rpb24ocEFkLCBFbGVtKTsgKi8KLQkJCQlSRVBPUlRfTUdNVF9GUkFNRV9UT19NTE1FKHBBZCwgQlNTSURfV0NJRCwKLQkJCQkJCQkgIEVsZW0tPk1zZywKLQkJCQkJCQkgIEVsZW0tPk1zZ0xlbiwgMCwgMCwgMCwKLQkJCQkJCQkgIDApOwotCQkJCWtmcmVlKEVsZW0pOwotCQkJfQotCQl9Ci0KLQkJewotCQkJaWYgKHBSZW1vdmVkTExDU05BUCkgewotCQkJCXBQYXlsb2FkIC09IExFTkdUSF84MDJfMzsKLQkJCQlQYXlsb2FkU2l6ZSArPSBMRU5HVEhfODAyXzM7Ci0JCQkJTmRpc01vdmVNZW1vcnkocFBheWxvYWQsICZIZWFkZXI4MDJfM1swXSwKLQkJCQkJICAgICAgIExFTkdUSF84MDJfMyk7Ci0JCQl9Ci0JCX0KLQotCQlwQ2xvbmVQYWNrZXQgPSBDbG9uZVBhY2tldChwQWQsIHBQYWNrZXQsIHBQYXlsb2FkLCBQYXlsb2FkU2l6ZSk7Ci0JCWlmIChwQ2xvbmVQYWNrZXQpIHsKLQkJCUFOTk9VTkNFX09SX0ZPUldBUkRfODAyXzNfUEFDS0VUKHBBZCwgcENsb25lUGFja2V0LAotCQkJCQkJCSBSVE1QX0dFVF9QQUNLRVRfSUYKLQkJCQkJCQkgKHBQYWNrZXQpKTsKLQkJfQotCi0JCS8qIEEtTVNEVSBoYXMgcGFkZGluZyB0byBtdWx0aXBsZSBvZiA0IGluY2x1ZGluZyBzdWJmcmFtZSBoZWFkZXIuICovCi0JCS8qIGFsaWduIFN1YkZyYW1lU2l6ZSB1cCB0byBtdWx0aXBsZSBvZiA0ICovCi0JCVN1YkZyYW1lU2l6ZSA9IChTdWJGcmFtZVNpemUgKyAzKSAmICh+MHgzKTsKLQotCQlpZiAoU3ViRnJhbWVTaXplID4gMTUyOCB8fCBTdWJGcmFtZVNpemUgPCAzMikgewotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoRGF0YVNpemUgPiBTdWJGcmFtZVNpemUpIHsKLQkJCXBEYXRhICs9IFN1YkZyYW1lU2l6ZTsKLQkJCURhdGFTaXplIC09IFN1YkZyYW1lU2l6ZTsKLQkJfSBlbHNlIHsKLQkJCS8qIGVuZCBvZiBBLU1TRFUgKi8KLQkJCURhdGFTaXplID0gMDsKLQkJfQotCX0KLQotCS8qIGZpbmFsbHkgcmVsZWFzZSBvcmlnaW5hbCByeCBwYWNrZXQgKi8KLQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFBhY2tldCwgTkRJU19TVEFUVVNfU1VDQ0VTUyk7Ci0KLQlyZXR1cm4gbk1TRFU7Ci19Ci0KLXUzMiBCQV9SZW9yZGVyX0FNU0RVX0Fubm91bmNlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdm9pZCAqcFBhY2tldCkKLXsKLQl1OCAqcERhdGE7Ci0JdTE2IERhdGFTaXplOwotCXUzMiBuTVNEVSA9IDA7Ci0KLQlwRGF0YSA9ICh1OCAqKUdFVF9PU19QS1RfREFUQVBUUihwUGFja2V0KTsKLQlEYXRhU2l6ZSA9ICh1MTYpR0VUX09TX1BLVF9MRU4ocFBhY2tldCk7Ci0KLQluTVNEVSA9IGRlYWdncmVnYXRlX0FNU0RVX2Fubm91bmNlKHBBZCwgcFBhY2tldCwgcERhdGEsIERhdGFTaXplKTsKLQotCXJldHVybiBuTVNEVTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlMb29rIHVwIHRoZSBNQUMgYWRkcmVzcyBpbiB0aGUgTUFDIHRhYmxlLiBSZXR1cm4gTlVMTCBpZiBub3QgZm91bmQuCi0JUmV0dXJuOgotCQlwRW50cnkgLSBwb2ludGVyIHRvIHRoZSBNQUMgZW50cnk7IE5VTEwgaXMgbm90IGZvdW5kCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi1zdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpNYWNUYWJsZUxvb2t1cChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHU4ICpwQWRkcikKLXsKLQl1bnNpZ25lZCBsb25nIEhhc2hJZHg7Ci0Jc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcEVudHJ5ID0gTlVMTDsKLQotCUhhc2hJZHggPSBNQUNfQUREUl9IQVNIX0lOREVYKHBBZGRyKTsKLQlwRW50cnkgPSBwQWQtPk1hY1RhYi5IYXNoW0hhc2hJZHhdOwotCi0Jd2hpbGUgKHBFbnRyeQotCSAgICAgICAmJiAocEVudHJ5LT5WYWxpZEFzQ0xJIHx8IHBFbnRyeS0+VmFsaWRBc1dEUwotCQkgICB8fCBwRW50cnktPlZhbGlkQXNBcENsaSB8fCBwRW50cnktPlZhbGlkQXNNZXNoKSkgewotCQlpZiAoTUFDX0FERFJfRVFVQUwocEVudHJ5LT5BZGRyLCBwQWRkcikpIHsKLQkJCWJyZWFrOwotCQl9IGVsc2UKLQkJCXBFbnRyeSA9IHBFbnRyeS0+cE5leHQ7Ci0JfQotCi0JcmV0dXJuIHBFbnRyeTsKLX0KLQotc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqTWFjVGFibGVJbnNlcnRFbnRyeShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJICAgICB1OCAqcEFkZHIsCi0JCQkJICAgICB1OCBhcGlkeCwgSU4gQk9PTEVBTiBDbGVhbkFsbCkKLXsKLQl1OCBIYXNoSWR4OwotCWludCBpLCBGaXJzdFdjaWQ7Ci0Jc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcEVudHJ5ID0gTlVMTCwgKnBDdXJyRW50cnk7Ci0vKiAgICAgIHUxNiAgb2Zmc2V0OyAqLwotLyogICAgICB1bnNpZ25lZCBsb25nICAgYWRkcjsgKi8KLQotCS8qIGlmIEZVTEwsIHJldHVybiAqLwotCWlmIChwQWQtPk1hY1RhYi5TaXplID49IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKQotCQlyZXR1cm4gTlVMTDsKLQotCUZpcnN0V2NpZCA9IDE7Ci0KLQlpZiAocEFkLT5TdGFDZmcuQnNzVHlwZSA9PSBCU1NfSU5GUkEpCi0JCUZpcnN0V2NpZCA9IDI7Ci0KLQkvKiBhbGxvY2F0ZSBvbmUgTUFDIGVudHJ5ICovCi0JTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5NYWNUYWJMb2NrKTsKLQlmb3IgKGkgPSBGaXJzdFdjaWQ7IGkgPCBNQVhfTEVOX09GX01BQ19UQUJMRTsgaSsrKQkvKiBza2lwIGVudHJ5IzAgc28gdGhhdCAiZW50cnkgaW5kZXggPT0gQUlEIiBmb3IgZmFzdCBsb29rdXAgKi8KLQl7Ci0JCS8qIHBpY2sgdXAgdGhlIGZpcnN0IGF2YWlsYWJsZSB2YWNhbmN5ICovCi0JCWlmICgocEFkLT5NYWNUYWIuQ29udGVudFtpXS5WYWxpZEFzQ0xJID09IEZBTFNFKSAmJgotCQkgICAgKHBBZC0+TWFjVGFiLkNvbnRlbnRbaV0uVmFsaWRBc1dEUyA9PSBGQUxTRSkgJiYKLQkJICAgIChwQWQtPk1hY1RhYi5Db250ZW50W2ldLlZhbGlkQXNBcENsaSA9PSBGQUxTRSkgJiYKLQkJICAgIChwQWQtPk1hY1RhYi5Db250ZW50W2ldLlZhbGlkQXNNZXNoID09IEZBTFNFKQotCQkgICAgKSB7Ci0JCQlwRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFtpXTsKLQkJCWlmIChDbGVhbkFsbCA9PSBUUlVFKSB7Ci0JCQkJcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xMTsKLQkJCQlwRW50cnktPkN1cnJUeFJhdGUgPSBSQVRFXzExOwotCQkJCU5kaXNaZXJvTWVtb3J5KHBFbnRyeSwgc2l6ZW9mKHN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkpKTsKLQkJCQlwRW50cnktPlBhaXJ3aXNlS2V5LktleUxlbiA9IDA7Ci0JCQkJcEVudHJ5LT5QYWlyd2lzZUtleS5DaXBoZXJBbGcgPSBDSVBIRVJfTk9ORTsKLQkJCX0KLQkJCXsKLQkJCQl7Ci0JCQkJCXBFbnRyeS0+VmFsaWRBc0NMSSA9IFRSVUU7Ci0JCQkJCXBFbnRyeS0+VmFsaWRBc1dEUyA9IEZBTFNFOwotCQkJCQlwRW50cnktPlZhbGlkQXNBcENsaSA9IEZBTFNFOwotCQkJCQlwRW50cnktPlZhbGlkQXNNZXNoID0gRkFMU0U7Ci0JCQkJCXBFbnRyeS0+VmFsaWRBc0RscyA9IEZBTFNFOwotCQkJCX0KLQkJCX0KLQotCQkJcEVudHJ5LT5iSUFtQmFkQXRoZXJvcyA9IEZBTFNFOwotCQkJcEVudHJ5LT5wQWQgPSBwQWQ7Ci0JCQlwRW50cnktPkNNVGltZXJSdW5uaW5nID0gRkFMU0U7Ci0JCQlwRW50cnktPkVucXVldWVFYXBvbFN0YXJ0VGltZXJSdW5uaW5nID0KLQkJCSAgICBFQVBPTF9TVEFSVF9ESVNBQkxFOwotCQkJcEVudHJ5LT5SU05JRV9MZW4gPSAwOwotCQkJTmRpc1plcm9NZW1vcnkocEVudHJ5LT5SX0NvdW50ZXIsCi0JCQkJICAgICAgIHNpemVvZihwRW50cnktPlJfQ291bnRlcikpOwotCQkJcEVudHJ5LT5SZVRyeUNvdW50ZXIgPSBQRUVSX01TRzFfUkVUUllfVElNRVJfQ1RSOwotCi0JCQlpZiAocEVudHJ5LT5WYWxpZEFzTWVzaCkKLQkJCQlwRW50cnktPmFwaWR4ID0KLQkJCQkgICAgKGFwaWR4IC0gTUlOX05FVF9ERVZJQ0VfRk9SX01FU0gpOwotCQkJZWxzZSBpZiAocEVudHJ5LT5WYWxpZEFzQXBDbGkpCi0JCQkJcEVudHJ5LT5hcGlkeCA9Ci0JCQkJICAgIChhcGlkeCAtIE1JTl9ORVRfREVWSUNFX0ZPUl9BUENMSSk7Ci0JCQllbHNlIGlmIChwRW50cnktPlZhbGlkQXNXRFMpCi0JCQkJcEVudHJ5LT5hcGlkeCA9Ci0JCQkJICAgIChhcGlkeCAtIE1JTl9ORVRfREVWSUNFX0ZPUl9XRFMpOwotCQkJZWxzZQotCQkJCXBFbnRyeS0+YXBpZHggPSBhcGlkeDsKLQotCQkJewotCQkJCXsKLQkJCQkJcEVudHJ5LT5BdXRoTW9kZSA9IHBBZC0+U3RhQ2ZnLkF1dGhNb2RlOwotCQkJCQlwRW50cnktPldlcFN0YXR1cyA9Ci0JCQkJCSAgICBwQWQtPlN0YUNmZy5XZXBTdGF0dXM7Ci0JCQkJCXBFbnRyeS0+UHJpdmFjeUZpbHRlciA9Ci0JCQkJCSAgICBOZGlzODAyXzExUHJpdkZpbHRlckFjY2VwdEFsbDsKLSNpZmRlZiBSVE1QX01BQ19QQ0kKLQkJCQkJQXNpY1JlbW92ZVBhaXJ3aXNlS2V5RW50cnkocEFkLAotCQkJCQkJCQkgICBwRW50cnktPgotCQkJCQkJCQkgICBhcGlkeCwKLQkJCQkJCQkJICAgKHU4KWkpOwotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotCQkJCX0KLQkJCX0KLQotCQkJcEVudHJ5LT5HVEtTdGF0ZSA9IFJFS0VZX05FR09USUFUSU5HOwotCQkJcEVudHJ5LT5QYWlyd2lzZUtleS5LZXlMZW4gPSAwOwotCQkJcEVudHJ5LT5QYWlyd2lzZUtleS5DaXBoZXJBbGcgPSBDSVBIRVJfTk9ORTsKLQkJCXBFbnRyeS0+UG9ydFNlY3VyZWQgPSBXUEFfODAyXzFYX1BPUlRfTk9UX1NFQ1VSRUQ7Ci0KLQkJCXBFbnRyeS0+UE1LSURfQ2FjaGVJZHggPSBFTlRSWV9OT1RfRk9VTkQ7Ci0JCQlDT1BZX01BQ19BRERSKHBFbnRyeS0+QWRkciwgcEFkZHIpOwotCQkJcEVudHJ5LT5Tc3QgPSBTU1RfTk9UX0FVVEg7Ci0JCQlwRW50cnktPkF1dGhTdGF0ZSA9IEFTX05PVF9BVVRIOwotCQkJcEVudHJ5LT5BaWQgPSAodTE2KWk7CS8qMDsgKi8KLQkJCXBFbnRyeS0+Q2FwYWJpbGl0eUluZm8gPSAwOwotCQkJcEVudHJ5LT5Qc01vZGUgPSBQV1JfQUNUSVZFOwotCQkJcEVudHJ5LT5Qc1FJZGxlQ291bnQgPSAwOwotCQkJcEVudHJ5LT5Ob0RhdGFJZGxlQ291bnQgPSAwOwotCQkJcEVudHJ5LT5Bc3NvY0RlYWRMaW5lID0gTUFDX1RBQkxFX0FTU09DX1RJTUVPVVQ7Ci0JCQlwRW50cnktPkNvbnRpbnVlVHhGYWlsQ250ID0gMDsKLQkJCUluaXRpYWxpemVRdWV1ZUhlYWRlcigmcEVudHJ5LT5Qc1F1ZXVlKTsKLQotCQkJcEFkLT5NYWNUYWIuU2l6ZSsrOwotCQkJLyogQWRkIHRoaXMgZW50cnkgaW50byBBU0lDIFJYIFdDSUQgc2VhcmNoIHRhYmxlICovCi0JCQlSVE1QX1NUQV9FTlRSWV9BREQocEFkLCBwRW50cnkpOwotCi0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCJNYWNUYWJsZUluc2VydEVudHJ5IC0gYWxsb2NhdGUgZW50cnkgIyVkLCBUb3RhbD0gJWRcbiIsCi0JCQkJICBpLCBwQWQtPk1hY1RhYi5TaXplKSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCS8qIGFkZCB0aGlzIE1BQyBlbnRyeSBpbnRvIEhBU0ggdGFibGUgKi8KLQlpZiAocEVudHJ5KSB7Ci0JCUhhc2hJZHggPSBNQUNfQUREUl9IQVNIX0lOREVYKHBBZGRyKTsKLQkJaWYgKHBBZC0+TWFjVGFiLkhhc2hbSGFzaElkeF0gPT0gTlVMTCkgewotCQkJcEFkLT5NYWNUYWIuSGFzaFtIYXNoSWR4XSA9IHBFbnRyeTsKLQkJfSBlbHNlIHsKLQkJCXBDdXJyRW50cnkgPSBwQWQtPk1hY1RhYi5IYXNoW0hhc2hJZHhdOwotCQkJd2hpbGUgKHBDdXJyRW50cnktPnBOZXh0ICE9IE5VTEwpCi0JCQkJcEN1cnJFbnRyeSA9IHBDdXJyRW50cnktPnBOZXh0OwotCQkJcEN1cnJFbnRyeS0+cE5leHQgPSBwRW50cnk7Ci0JCX0KLQl9Ci0KLQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPk1hY1RhYkxvY2spOwotCXJldHVybiBwRW50cnk7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJRGVsZXRlIGEgc3BlY2lmaWVkIGNsaWVudCBmcm9tIE1BQyB0YWJsZQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLUJPT0xFQU4gTWFjVGFibGVEZWxldGVFbnRyeShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgdTE2IHdjaWQsIHU4ICpwQWRkcikKLXsKLQl1MTYgSGFzaElkeDsKLQlzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwRW50cnksICpwUHJldkVudHJ5LCAqcFByb2JlRW50cnk7Ci0JQk9PTEVBTiBDYW5jZWxsZWQ7Ci0JLyp1MTYgICAgICAgIG9mZnNldDsgLy8gdW51c2VkIHZhcmlhYmxlICovCi0JLyp1OCBqOyAgICAgICAgICAgICAgICAgICAgICAvLyB1bnVzZWQgdmFyaWFibGUgKi8KLQotCWlmICh3Y2lkID49IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKQotCQlyZXR1cm4gRkFMU0U7Ci0KLQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPk1hY1RhYkxvY2spOwotCi0JSGFzaElkeCA9IE1BQ19BRERSX0hBU0hfSU5ERVgocEFkZHIpOwotCS8qcEVudHJ5ID0gcEFkLT5NYWNUYWIuSGFzaFtIYXNoSWR4XTsgKi8KLQlwRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFt3Y2lkXTsKLQotCWlmIChwRW50cnkKLQkgICAgJiYgKHBFbnRyeS0+VmFsaWRBc0NMSSB8fCBwRW50cnktPlZhbGlkQXNBcENsaSB8fCBwRW50cnktPlZhbGlkQXNXRFMKLQkJfHwgcEVudHJ5LT5WYWxpZEFzTWVzaCkpIHsKLQkJaWYgKE1BQ19BRERSX0VRVUFMKHBFbnRyeS0+QWRkciwgcEFkZHIpKSB7Ci0KLQkJCS8qIERlbGV0ZSB0aGlzIGVudHJ5IGZyb20gQVNJQyBvbi1jaGlwIFdDSUQgVGFibGUgKi8KLQkJCVJUTVBfU1RBX0VOVFJZX01BQ19SRVNFVChwQWQsIHdjaWQpOwotCi0JCQkvKiBmcmVlIHJlc291cmNlcyBvZiBCQSAqLwotCQkJQkFTZXNzaW9uVGVhckRvd25BTEwocEFkLCBwRW50cnktPkFpZCk7Ci0KLQkJCXBQcmV2RW50cnkgPSBOVUxMOwotCQkJcFByb2JlRW50cnkgPSBwQWQtPk1hY1RhYi5IYXNoW0hhc2hJZHhdOwotCQkJQVNTRVJUKHBQcm9iZUVudHJ5KTsKLQotCQkJLyogdXBkYXRlIEhhc2ggbGlzdCAqLwotCQkJZG8gewotCQkJCWlmIChwUHJvYmVFbnRyeSA9PSBwRW50cnkpIHsKLQkJCQkJaWYgKHBQcmV2RW50cnkgPT0gTlVMTCkgewotCQkJCQkJcEFkLT5NYWNUYWIuSGFzaFtIYXNoSWR4XSA9Ci0JCQkJCQkgICAgcEVudHJ5LT5wTmV4dDsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXBQcmV2RW50cnktPnBOZXh0ID0KLQkJCQkJCSAgICBwRW50cnktPnBOZXh0OwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJCXBQcmV2RW50cnkgPSBwUHJvYmVFbnRyeTsKLQkJCQlwUHJvYmVFbnRyeSA9IHBQcm9iZUVudHJ5LT5wTmV4dDsKLQkJCX0gd2hpbGUgKHBQcm9iZUVudHJ5KTsKLQotCQkJLyogbm90IGZvdW5kICEgKi8KLQkJCUFTU0VSVChwUHJvYmVFbnRyeSAhPSBOVUxMKTsKLQotCQkJUlRNUF9TVEFfRU5UUllfS0VZX0RFTChwQWQsIEJTUzAsIHdjaWQpOwotCi0JCQlpZiAocEVudHJ5LT5FbnF1ZXVlRWFwb2xTdGFydFRpbWVyUnVubmluZyAhPQotCQkJICAgIEVBUE9MX1NUQVJUX0RJU0FCTEUpIHsKLQkJCQlSVE1QQ2FuY2VsVGltZXIoJnBFbnRyeS0+Ci0JCQkJCQlFbnF1ZXVlU3RhcnRGb3JQU0tUaW1lciwKLQkJCQkJCSZDYW5jZWxsZWQpOwotCQkJCXBFbnRyeS0+RW5xdWV1ZUVhcG9sU3RhcnRUaW1lclJ1bm5pbmcgPQotCQkJCSAgICBFQVBPTF9TVEFSVF9ESVNBQkxFOwotCQkJfQotCi0JCQlOZGlzWmVyb01lbW9yeShwRW50cnksIHNpemVvZihzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5KSk7Ci0JCQlwQWQtPk1hY1RhYi5TaXplLS07Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCJNYWNUYWJsZURlbGV0ZUVudHJ5MSAtIFRvdGFsPSAlZFxuIiwKLQkJCQkgIHBBZC0+TWFjVGFiLlNpemUpKTsKLQkJfSBlbHNlIHsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX09GRiwKLQkJCQkgKCJcbiVzOiBJbXBvc3NpYmxlIFdjaWQgPSAlZCAhXG4iLAotCQkJCSAgX19mdW5jX18sIHdjaWQpKTsKLQkJfQotCX0KLQotCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+TWFjVGFiTG9jayk7Ci0KLQkvKlJlc2V0IG9wZXJhdGluZyBtb2RlIHdoZW4gbm8gU3RhLiAqLwotCWlmIChwQWQtPk1hY1RhYi5TaXplID09IDApIHsKLQkJcEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLkFkZEh0SW5mbzIuT3BlcmFpb25Nb2RlID0gMDsKLQkJUlRNUF9VUERBVEVfUFJPVEVDVChwQWQpOwkvKiBlZGl0IGJ5IGpvaG5saSwgZml4ICJpbl9pbnRlcnJ1cHQiIGVycm9yIHdoZW4gY2FsbCAiTWFjVGFibGVEZWxldGVFbnRyeSIgaW4gUnggdGFza2xldCAqLwotCX0KLQotCXJldHVybiBUUlVFOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JCVRoaXMgcm91dGluZSByZXNldCB0aGUgZW50aXJlIE1BQyB0YWJsZS4gQWxsIHBhY2tldHMgcGVuZGluZyBpbgotCQl0aGUgcG93ZXItc2F2aW5nIHF1ZXVlcyBhcmUgZnJlZWQgaGVyZS4KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi12b2lkIE1hY1RhYmxlUmVzZXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCWludCBpOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTWFjVGFibGVSZXNldFxuIikpOwotCS8qTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5NYWNUYWJMb2NrKTsgKi8KLQotCWZvciAoaSA9IDE7IGkgPCBNQVhfTEVOX09GX01BQ19UQUJMRTsgaSsrKSB7Ci0jaWZkZWYgUlRNUF9NQUNfUENJCi0JCVJUTVBfU1RBX0VOVFJZX01BQ19SRVNFVChwQWQsIGkpOwotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotCQlpZiAocEFkLT5NYWNUYWIuQ29udGVudFtpXS5WYWxpZEFzQ0xJID09IFRSVUUpIHsKLQotCQkJLyogZnJlZSByZXNvdXJjZXMgb2YgQkEgKi8KLQkJCUJBU2Vzc2lvblRlYXJEb3duQUxMKHBBZCwgaSk7Ci0KLQkJCXBBZC0+TWFjVGFiLkNvbnRlbnRbaV0uVmFsaWRBc0NMSSA9IEZBTFNFOwotCi0jaWZkZWYgUlRNUF9NQUNfVVNCCi0JCQlOZGlzWmVyb01lbW9yeShwQWQtPk1hY1RhYi5Db250ZW50W2ldLkFkZHIsIDYpOwotCQkJUlRNUF9TVEFfRU5UUllfTUFDX1JFU0VUKHBBZCwgaSk7Ci0jZW5kaWYgLyogUlRNUF9NQUNfVVNCIC8vICovCi0KLQkJCS8qQXNpY0RlbFdjaWRUYWIocEFkLCBpKTsgKi8KLQkJfQotCX0KLQotCXJldHVybjsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgQXNzb2NQYXJtRmlsbChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgIHN0cnVjdCBydF9tbG1lX2Fzc29jX3JlcSAqQXNzb2NSZXEsCi0JCSAgIHU4ICpwQWRkciwKLQkJICAgdTE2IENhcGFiaWxpdHlJbmZvLAotCQkgICB1bnNpZ25lZCBsb25nIFRpbWVvdXQsIHUxNiBMaXN0ZW5JbnR2KQotewotCUNPUFlfTUFDX0FERFIoQXNzb2NSZXEtPkFkZHIsIHBBZGRyKTsKLQkvKiBBZGQgbWFzayB0byBzdXBwb3J0IDgwMi4xMWIgbW9kZSBvbmx5ICovCi0JQXNzb2NSZXEtPkNhcGFiaWxpdHlJbmZvID0gQ2FwYWJpbGl0eUluZm8gJiBTVVBQT1JURURfQ0FQQUJJTElUWV9JTkZPOwkvKiBub3QgY2YtcG9sbGFibGUsIG5vdCBjZi1wb2xsLXJlcXVlc3QgKi8KLQlBc3NvY1JlcS0+VGltZW91dCA9IFRpbWVvdXQ7Ci0JQXNzb2NSZXEtPkxpc3RlbkludHYgPSBMaXN0ZW5JbnR2OwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBEaXNhc3NvY1Bhcm1GaWxsKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgICAgc3RydWN0IHJ0X21sbWVfZGlzYXNzb2NfcmVxICpEaXNhc3NvY1JlcSwKLQkJICAgICAgdTggKnBBZGRyLCB1MTYgUmVhc29uKQotewotCUNPUFlfTUFDX0FERFIoRGlzYXNzb2NSZXEtPkFkZHIsIHBBZGRyKTsKLQlEaXNhc3NvY1JlcS0+UmVhc29uID0gUmVhc29uOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQkJQ2hlY2sgdGhlIG91dCBnb2luZyBmcmFtZSwgaWYgdGhpcyBpcyBhbiBESENQIG9yIEFSUCBkYXRhZ3JhbQotCXdpbGwgYmUgZHVwbGljYXRlIGFub3RoZXIgZnJhbWUgYXQgbG93IGRhdGEgcmF0ZSB0cmFuc21pdC4KLQotCUFyZ3VtZW50czoKLQkJcEFkIAkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgotCQlwUGFja2V0IAlQb2ludGVyIHRvIG91dGdvaW5nIE5kaXMgZnJhbWUKLQotCVJldHVybiBWYWx1ZToKLQkJVFJVRQkJVG8gYmUgZHVwbGljYXRlIGF0IExvdyBkYXRhIHJhdGUgdHJhbnNtaXQuICgxbWIpCi0JCUZBTFNFCQlEbyBub3RoaW5nLgotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQlOb3RlOgotCi0JCU1BQyBoZWFkZXIgKyBJUCBIZWFkZXIgKyBVRFAgSGVhZGVyCi0JCSAgMTQgQnl0ZXMJICAyMCBCeXRlcwotCi0JCVVEUCBIZWFkZXIKLQkJMDB8MDF8MDJ8MDN8MDR8MDV8MDZ8MDd8MDh8MDl8MTB8MTF8MTJ8MTN8MTR8MTV8Ci0JCQkJCQlTb3VyY2UgUG9ydAotCQkxNnwxN3wxOHwxOXwyMHwyMXwyMnwyM3wyNHwyNXwyNnwyN3wyOHwyOXwzMHwzMXwKLQkJCQkJRGVzdGluYXRpb24gUG9ydAotCi0JCXBvcnQgMHg0MyBtZWFucyBCb290c3RyYXAgUHJvdG9jb2wsIHNlcnZlci4KLQkJUG9ydCAweDQ0IG1lYW5zIEJvb3RzdHJhcCBQcm90b2NvbCwgY2xpZW50LgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotCi1CT09MRUFOIFJUTVBDaGVja0RIQ1BGcmFtZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHZvaWQgKnBQYWNrZXQpCi17Ci0Jc3RydWN0IHJ0X3BhY2tldF9pbmZvIFBhY2tldEluZm87Ci0JdW5zaWduZWQgbG9uZyBOdW1iZXJPZkJ5dGVzUmVhZCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBDdXJyZW50T2Zmc2V0ID0gMDsKLQl2b2lkICpwVmlydHVhbEFkZHJlc3MgPSBOVUxMOwotCXUzMiBOZGlzQnVmZmVyTGVuZ3RoOwotCXU4ICpwU3JjOwotCXUxNiBQcm90b2NvbDsKLQl1OCBCeXRlT2Zmc2V0MzYgPSAwOwotCXU4IEJ5dGVPZmZzZXQzOCA9IDA7Ci0JQk9PTEVBTiBSZWFkRmlyc3RQYXJtID0gVFJVRTsKLQotCVJUTVBfUXVlcnlQYWNrZXRJbmZvKHBQYWNrZXQsICZQYWNrZXRJbmZvLCAodTggKiopICYgcFZpcnR1YWxBZGRyZXNzLAotCQkJICAgICAmTmRpc0J1ZmZlckxlbmd0aCk7Ci0KLQlOdW1iZXJPZkJ5dGVzUmVhZCArPSBOZGlzQnVmZmVyTGVuZ3RoOwotCXBTcmMgPSAodTggKilwVmlydHVhbEFkZHJlc3M7Ci0JUHJvdG9jb2wgPSAqKHBTcmMgKyAxMikgKiAyNTYgKyAqKHBTcmMgKyAxMyk7Ci0KLQkvKiAqLwotCS8qIENoZWNrIERIQ1AgJiBCT09UUCBwcm90b2NvbCAqLwotCS8qICovCi0Jd2hpbGUgKE51bWJlck9mQnl0ZXNSZWFkIDw9IFBhY2tldEluZm8uVG90YWxQYWNrZXRMZW5ndGgpIHsKLQkJaWYgKChOdW1iZXJPZkJ5dGVzUmVhZCA+PSAzNSkgJiYgKFJlYWRGaXJzdFBhcm0gPT0gVFJVRSkpIHsKLQkJCUN1cnJlbnRPZmZzZXQgPQotCQkJICAgIDM1IC0gKE51bWJlck9mQnl0ZXNSZWFkIC0gTmRpc0J1ZmZlckxlbmd0aCk7Ci0JCQlCeXRlT2Zmc2V0MzYgPSAqKHBTcmMgKyBDdXJyZW50T2Zmc2V0KTsKLQkJCVJlYWRGaXJzdFBhcm0gPSBGQUxTRTsKLQkJfQotCi0JCWlmIChOdW1iZXJPZkJ5dGVzUmVhZCA+PSAzNykgewotCQkJQ3VycmVudE9mZnNldCA9Ci0JCQkgICAgMzcgLSAoTnVtYmVyT2ZCeXRlc1JlYWQgLSBOZGlzQnVmZmVyTGVuZ3RoKTsKLQkJCUJ5dGVPZmZzZXQzOCA9ICoocFNyYyArIEN1cnJlbnRPZmZzZXQpOwotCQkJLypFbmQgb2YgUmVhZCAqLwotCQkJYnJlYWs7Ci0JCX0KLQkJcmV0dXJuIEZBTFNFOwotCX0KLQotCS8qIENoZWNrIGZvciBESENQICYgQk9PVFAgcHJvdG9jb2wgKi8KLQlpZiAoKEJ5dGVPZmZzZXQzNiAhPSAweDQ0KSB8fCAoQnl0ZU9mZnNldDM4ICE9IDB4NDMpKSB7Ci0JCS8qICovCi0JCS8qIDIwNTQgKGhleCAwODA2KSBmb3IgQVJQIGRhdGFncmFtcyAqLwotCQkvKiBpZiB0aGlzIHBhY2tldCBpcyBub3QgQVJQIGRhdGFncmFtcywgdGhlbiBkbyBub3RoaW5nICovCi0JCS8qIEFSUCBkYXRhZ3JhbXMgd2lsbCBhbHNvIGJlIGR1cGxpY2F0ZSBhdCAxbWIgYnJvYWRjYXN0IGZyYW1lcyAqLwotCQkvKiAqLwotCQlpZiAoUHJvdG9jb2wgIT0gMHgwODA2KQotCQkJcmV0dXJuIEZBTFNFOwotCX0KLQotCXJldHVybiBUUlVFOwotfQotCi1CT09MRUFOIFJUTVBDaGVja0V0aGVyVHlwZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHZvaWQgKnBQYWNrZXQpCi17Ci0JdTE2IFR5cGVMZW47Ci0JdTggQnl0ZTAsIEJ5dGUxOwotCXU4ICpwU3JjQnVmOwotCXUzMiBwa3RMZW47Ci0JdTE2IHNyY1BvcnQsIGRzdFBvcnQ7Ci0JQk9PTEVBTiBzdGF0dXMgPSBUUlVFOwotCi0JcFNyY0J1ZiA9IEdFVF9PU19QS1RfREFUQVBUUihwUGFja2V0KTsKLQlwa3RMZW4gPSBHRVRfT1NfUEtUX0xFTihwUGFja2V0KTsKLQotCUFTU0VSVChwU3JjQnVmKTsKLQotCVJUTVBfU0VUX1BBQ0tFVF9TUEVDSUZJQyhwUGFja2V0LCAwKTsKLQotCS8qIGdldCBFdGhlcm5ldCBwcm90b2NvbCBmaWVsZCAqLwotCVR5cGVMZW4gPSAocFNyY0J1ZlsxMl0gPDwgOCkgfCBwU3JjQnVmWzEzXTsKLQotCXBTcmNCdWYgKz0gTEVOR1RIXzgwMl8zOwkvKiBTa2lwIHRoZSBFdGhlcm5ldCBIZWFkZXIuICovCi0KLQlpZiAoVHlwZUxlbiA8PSAxNTAwKSB7CS8qIDgwMi4zLCA4MDIuMyBMTEMgKi8KLQkJLyoKLQkJICAgRGVzdE1BQyg2KSArIFNyY01BQyg2KSArIExlbmd0aCgyKSArCi0JCSAgIERTQVAoMSkgKyBTU0FQKDEpICsgQ29udHJvbCgxKSArCi0JCSAgIGlmIHRoZSBEU0FQID0gMHhBQSwgU1NBUD0weEFBLCBDb250b3JsID0gMHgwMywgaXQgaGFzIGEgNS1ieXRlcyBTTkFQIGhlYWRlci4KLQkJICAgPT4gKyBTTkFQICg1LCBPcmlnaW5hdGlvbklEKDMpICsgZXRoZXJUeXBlKDIpKQotCQkgKi8KLQkJaWYgKHBTcmNCdWZbMF0gPT0gMHhBQSAmJiBwU3JjQnVmWzFdID09IDB4QUEKLQkJICAgICYmIHBTcmNCdWZbMl0gPT0gMHgwMykgewotCQkJU25pZmYyQnl0ZXNGcm9tTmRpc0J1ZmZlcigoY2hhciAqKXBTcmNCdWYsIDYsCi0JCQkJCQkgICZCeXRlMCwgJkJ5dGUxKTsKLQkJCVJUTVBfU0VUX1BBQ0tFVF9MTENTTkFQKHBQYWNrZXQsIDEpOwotCQkJVHlwZUxlbiA9ICh1MTYpKChCeXRlMCA8PCA4KSArIEJ5dGUxKTsKLQkJCXBTcmNCdWYgKz0gODsJLyogU2tpcCB0aGlzIExMQy9TTkFQIGhlYWRlciAqLwotCQl9IGVsc2UgewotCQkJLypJdCBqdXN0IGhhcyAzLWJ5dGUgTExDIGhlYWRlciwgbWF5YmUgYSBsZWdhY3kgZXRoZXIgdHlwZSBmcmFtZS4gd2UgZGlkbid0IGhhbmRsZSBpdC4gKi8KLQkJfQotCX0KLQkvKiBJZiBpdCdzIGEgVkxBTiBwYWNrZXQsIGdldCB0aGUgcmVhbCBUeXBlL0xlbmd0aCBmaWVsZC4gKi8KLQlpZiAoVHlwZUxlbiA9PSAweDgxMDApIHsKLQkJLyogMHg4MTAwIG1lYW5zIFZMQU4gcGFja2V0cyAqLwotCi0JCS8qIERlc3QuIE1BQyBBZGRyZXNzICg2LWJ5dGVzKSArCi0JCSAgIFNvdXJjZSBNQUMgQWRkcmVzcyAoNi1ieXRlcykgKwotCQkgICBMZW5ndGgvVHlwZSA9IDgwMi4xUSBUYWcgVHlwZSAoMi1ieXRlKSArCi0JCSAgIFRhZyBDb250cm9sIEluZm9ybWF0aW9uICgyLWJ5dGVzKSArCi0JCSAgIExlbmd0aCAvIFR5cGUgKDItYnl0ZXMpICsKLQkJICAgZGF0YSBwYXlsb2FkICgwLW4gYnl0ZXMpICsKLQkJICAgUGFkICgwLXAgYnl0ZXMpICsKLQkJICAgRnJhbWUgQ2hlY2sgU2VxdWVuY2UgKDQtYnl0ZXMpICovCi0KLQkJUlRNUF9TRVRfUEFDS0VUX1ZMQU4ocFBhY2tldCwgMSk7Ci0JCVNuaWZmMkJ5dGVzRnJvbU5kaXNCdWZmZXIoKGNoYXIgKilwU3JjQnVmLCAyLCAmQnl0ZTAsCi0JCQkJCSAgJkJ5dGUxKTsKLQkJVHlwZUxlbiA9ICh1MTYpKChCeXRlMCA8PCA4KSArIEJ5dGUxKTsKLQotCQlwU3JjQnVmICs9IDQ7CS8qIFNraXAgdGhlIFZMQU4gSGVhZGVyLiAqLwotCX0KLQotCXN3aXRjaCAoVHlwZUxlbikgewotCWNhc2UgMHgwODAwOgotCQl7Ci0JCQlBU1NFUlQoKHBrdExlbiA+IDM0KSk7Ci0JCQlpZiAoKihwU3JjQnVmICsgOSkgPT0gMHgxMSkgewkvKiB1ZHAgcGFja2V0ICovCi0JCQkJQVNTRVJUKChwa3RMZW4gPiAzNCkpOwkvKiAxNCBmb3IgZXRoZXJuZXQgaGVhZGVyLCAyMCBmb3IgSVAgaGVhZGVyICovCi0KLQkJCQlwU3JjQnVmICs9IDIwOwkvKiBTa2lwIHRoZSBJUCBoZWFkZXIgKi8KLQkJCQlzcmNQb3J0ID0KLQkJCQkgICAgT1NfTlRPSFMoZ2V0X3VuYWxpZ25lZAotCQkJCQkgICAgICgodTE2ICopKHBTcmNCdWYpKSk7Ci0JCQkJZHN0UG9ydCA9Ci0JCQkJICAgIE9TX05UT0hTKGdldF91bmFsaWduZWQKLQkJCQkJICAgICAoKHUxNiAqKShwU3JjQnVmICsgMikpKTsKLQotCQkJCWlmICgoc3JjUG9ydCA9PSAweDQ0ICYmIGRzdFBvcnQgPT0gMHg0MykgfHwgKHNyY1BvcnQgPT0gMHg0MyAmJiBkc3RQb3J0ID09IDB4NDQpKSB7CS8qSXQncyBhIEJPT1RQL0RIQ1AgcGFja2V0ICovCi0JCQkJCVJUTVBfU0VUX1BBQ0tFVF9ESENQKHBQYWNrZXQsIDEpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlicmVhazsKLQljYXNlIDB4MDgwNjoKLQkJewotCQkJLypBUlAgUGFja2V0LiAqLwotCQkJUlRNUF9TRVRfUEFDS0VUX0RIQ1AocFBhY2tldCwgMSk7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSAweDg4OGU6Ci0JCXsKLQkJCS8qIEVBUE9MIFBhY2tldC4gKi8KLQkJCVJUTVBfU0VUX1BBQ0tFVF9FQVBPTChwUGFja2V0LCAxKTsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlzdGF0dXMgPSBGQUxTRTsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHN0YXR1czsKLQotfQotCi12b2lkIFVwZGF0ZV9Sc3NpX1NhbXBsZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQlzdHJ1Y3QgcnRfcnNzaV9zYW1wbGUgKnBSc3NpLCBzdHJ1Y3QgcnRfcnh3aSAqIHBSeFdJKQotewotCWNoYXIgcnNzaTAgPSBwUnhXSS0+UlNTSTA7Ci0JY2hhciByc3NpMSA9IHBSeFdJLT5SU1NJMTsKLQljaGFyIHJzc2kyID0gcFJ4V0ktPlJTU0kyOwotCi0JaWYgKHJzc2kwICE9IDApIHsKLQkJcFJzc2ktPkxhc3RSc3NpMCA9IENvbnZlcnRUb1Jzc2kocEFkLCAoY2hhcilyc3NpMCwgUlNTSV8wKTsKLQkJcFJzc2ktPkF2Z1Jzc2kwWDggPQotCQkgICAgKHBSc3NpLT5BdmdSc3NpMFg4IC0gcFJzc2ktPkF2Z1Jzc2kwKSArIHBSc3NpLT5MYXN0UnNzaTA7Ci0JCXBSc3NpLT5BdmdSc3NpMCA9IHBSc3NpLT5BdmdSc3NpMFg4ID4+IDM7Ci0JfQotCi0JaWYgKHJzc2kxICE9IDApIHsKLQkJcFJzc2ktPkxhc3RSc3NpMSA9IENvbnZlcnRUb1Jzc2kocEFkLCAoY2hhcilyc3NpMSwgUlNTSV8xKTsKLQkJcFJzc2ktPkF2Z1Jzc2kxWDggPQotCQkgICAgKHBSc3NpLT5BdmdSc3NpMVg4IC0gcFJzc2ktPkF2Z1Jzc2kxKSArIHBSc3NpLT5MYXN0UnNzaTE7Ci0JCXBSc3NpLT5BdmdSc3NpMSA9IHBSc3NpLT5BdmdSc3NpMVg4ID4+IDM7Ci0JfQotCi0JaWYgKHJzc2kyICE9IDApIHsKLQkJcFJzc2ktPkxhc3RSc3NpMiA9IENvbnZlcnRUb1Jzc2kocEFkLCAoY2hhcilyc3NpMiwgUlNTSV8yKTsKLQkJcFJzc2ktPkF2Z1Jzc2kyWDggPQotCQkgICAgKHBSc3NpLT5BdmdSc3NpMlg4IC0gcFJzc2ktPkF2Z1Jzc2kyKSArIHBSc3NpLT5MYXN0UnNzaTI7Ci0JCXBSc3NpLT5BdmdSc3NpMiA9IHBSc3NpLT5BdmdSc3NpMlg4ID4+IDM7Ci0JfQotfQotCi0vKiBOb3JtYWwgbGVnYWN5IFJ4IHBhY2tldCBpbmRpY2F0aW9uICovCi12b2lkIEluZGljYXRlX0xlZ2FjeV9QYWNrZXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgIHN0cnVjdCBydF9yeF9ibGsgKnBSeEJsaywgdTggRnJvbVdoaWNoQlNTSUQpCi17Ci0Jdm9pZCAqcFJ4UGFja2V0ID0gcFJ4QmxrLT5wUnhQYWNrZXQ7Ci0JdTggSGVhZGVyODAyXzNbTEVOR1RIXzgwMl8zXTsKLQotCS8qIDEuIGdldCA4MDIuMyBIZWFkZXIgKi8KLQkvKiAyLiByZW1vdmUgTExDICovCi0JLyogICAgICAgICAgICAgIGEuIHBvaW50ZXIgcFJ4QmxrLT5wRGF0YSB0byBwYXlsb2FkICovCi0JLyogICAgICBiLiBtb2RpZnkgcFJ4QmxrLT5EYXRhU2l6ZSAqLwotCVJUTVBfODAyXzExX1JFTU9WRV9MTENfQU5EX0NPTlZFUlRfVE9fODAyXzMocFJ4QmxrLCBIZWFkZXI4MDJfMyk7Ci0KLQlpZiAocFJ4QmxrLT5EYXRhU2l6ZSA+IE1BWF9SWF9QS1RfTEVOKSB7Ci0KLQkJLyogcmVsZWFzZSBwYWNrZXQgKi8KLQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlTVEFUU19JTkNfUlhfUEFDS0VUUyhwQWQsIEZyb21XaGljaEJTU0lEKTsKLQotI2lmZGVmIFJUTVBfTUFDX1VTQgotCWlmIChwQWQtPkNvbW1vbkNmZy5iRGlzYWJsZVJlb3JkZXJpbmcgPT0gMCkgewotCQlzdHJ1Y3QgcnRfYmFfcmVjX2VudHJ5ICpwQkFFbnRyeTsKLQkJdW5zaWduZWQgbG9uZyBOb3czMjsKLQkJdTggV2NpZCA9IHBSeEJsay0+cFJ4V0ktPldpcmVsZXNzQ2xpSUQ7Ci0JCXU4IFRJRCA9IHBSeEJsay0+cFJ4V0ktPlRJRDsKLQkJdTE2IElkeDsKLQotI2RlZmluZSBSRU9SREVSSU5HX1BBQ0tFVF9USU1FT1VUCQkoKDEwMCAqIE9TX0haKS8xMDAwKQkvKiBzeXN0ZW0gdGlja3MgLS0gMTAwIG1zICovCi0KLQkJaWYgKFdjaWQgPCBNQVhfTEVOX09GX01BQ19UQUJMRSkgewotCQkJSWR4ID0gcEFkLT5NYWNUYWIuQ29udGVudFtXY2lkXS5CQVJlY1djaWRBcnJheVtUSURdOwotCQkJaWYgKElkeCAhPSAwKSB7Ci0JCQkJcEJBRW50cnkgPSAmcEFkLT5CQVRhYmxlLkJBUmVjRW50cnlbSWR4XTsKLQkJCQkvKiB1cGRhdGUgbGFzdCByeCB0aW1lICovCi0JCQkJTmRpc0dldFN5c3RlbVVwVGltZSgmTm93MzIpOwotCQkJCWlmICgocEJBRW50cnktPmxpc3QucWxlbiA+IDApICYmCi0JCQkJICAgIFJUTVBfVElNRV9BRlRFUigodW5zaWduZWQgbG9uZylOb3czMiwKLQkJCQkJCSAgICAodW5zaWduZWQgbG9uZykocEJBRW50cnktPgotCQkJCQkJCQkgICAgTGFzdEluZFNlcUF0VGltZXIKLQkJCQkJCQkJICAgICsKLQkJCQkJCQkJICAgIChSRU9SREVSSU5HX1BBQ0tFVF9USU1FT1VUKSkpCi0JCQkJICAgICkgewotCQkJCQlEQkdQUklOVChSVF9ERUJVR19PRkYsCi0JCQkJCQkgKCJJbmRpY2F0ZV9MZWdhY3lfUGFja2V0KCk6Zmx1c2ggcmVvcmRlcmluZ190aW1lb3V0X21wZHVzISBSeFdJLT5GbGFncz0lZCwgcFJ4V0kuVElEPSVkLCBSeEQtPkFNUERVPSVkIVxuIiwKLQkJCQkJCSAgcFJ4QmxrLT5GbGFncywKLQkJCQkJCSAgcFJ4QmxrLT5wUnhXSS0+VElELAotCQkJCQkJICBwUnhCbGstPlJ4RC5BTVBEVSkpOwotCQkJCQloZXhfZHVtcCgiRHVtcCB0aGUgbGVnYWN5IFBhY2tldDoiLAotCQkJCQkJIEdFVF9PU19QS1RfREFUQVBUUihwUnhCbGstPgotCQkJCQkJCQkgICAgcFJ4UGFja2V0KSwKLQkJCQkJCSA2NCk7Ci0JCQkJCWJhX2ZsdXNoX3Jlb3JkZXJpbmdfdGltZW91dF9tcGR1cyhwQWQsCi0JCQkJCQkJCQkgIHBCQUVudHJ5LAotCQkJCQkJCQkJICBOb3czMik7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotI2VuZGlmIC8qIFJUTVBfTUFDX1VTQiAvLyAqLwotCi0Jd2xhbl84MDJfMTFfdG9fODAyXzNfcGFja2V0KHBBZCwgcFJ4QmxrLCBIZWFkZXI4MDJfMywgRnJvbVdoaWNoQlNTSUQpOwotCi0JLyogKi8KLQkvKiBwYXNzIHRoaXMgODAyLjMgcGFja2V0IHRvIHVwcGVyIGxheWVyIG9yIGZvcndhcmQgdGhpcyBwYWNrZXQgdG8gV00gZGlyZWN0bHkgKi8KLQkvKiAqLwotCUFOTk9VTkNFX09SX0ZPUldBUkRfODAyXzNfUEFDS0VUKHBBZCwgcFJ4UGFja2V0LCBGcm9tV2hpY2hCU1NJRCk7Ci19Ci0KLS8qIE5vcm1hbCwgQU1QRFUgb3IgQU1TRFUgKi8KLXZvaWQgQ21tUnhub25SYWxpbmtGcmFtZUluZGljYXRlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkgc3RydWN0IHJ0X3J4X2JsayAqcFJ4QmxrLCB1OCBGcm9tV2hpY2hCU1NJRCkKLXsKLQlpZiAoUlhfQkxLX1RFU1RfRkxBRyhwUnhCbGssIGZSWF9BTVBEVSkKLQkgICAgJiYgKHBBZC0+Q29tbW9uQ2ZnLmJEaXNhYmxlUmVvcmRlcmluZyA9PSAwKSkgewotCQlJbmRpY2F0ZV9BTVBEVV9QYWNrZXQocEFkLCBwUnhCbGssIEZyb21XaGljaEJTU0lEKTsKLQl9IGVsc2UgewotCQlpZiAoUlhfQkxLX1RFU1RfRkxBRyhwUnhCbGssIGZSWF9BTVNEVSkpIHsKLQkJCS8qIGhhbmRsZSBBLU1TRFUgKi8KLQkJCUluZGljYXRlX0FNU0RVX1BhY2tldChwQWQsIHBSeEJsaywgRnJvbVdoaWNoQlNTSUQpOwotCQl9IGVsc2UgewotCQkJSW5kaWNhdGVfTGVnYWN5X1BhY2tldChwQWQsIHBSeEJsaywgRnJvbVdoaWNoQlNTSUQpOwotCQl9Ci0JfQotfQotCi12b2lkIENtbVJ4UmFsaW5rRnJhbWVJbmRpY2F0ZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgICBzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwRW50cnksCi0JCQkgICAgICBzdHJ1Y3QgcnRfcnhfYmxrICpwUnhCbGssIHU4IEZyb21XaGljaEJTU0lEKQotewotCXU4IEhlYWRlcjgwMl8zW0xFTkdUSF84MDJfM107Ci0JdTE2IE1zZHUyU2l6ZTsKLQl1MTYgUGF5bG9hZDFTaXplLCBQYXlsb2FkMlNpemU7Ci0JdTggKnBEYXRhMjsKLQl2b2lkICpwUGFja2V0MiA9IE5VTEw7Ci0KLQlNc2R1MlNpemUgPSAqKHBSeEJsay0+cERhdGEpICsgKCoocFJ4QmxrLT5wRGF0YSArIDEpIDw8IDgpOwotCi0JaWYgKChNc2R1MlNpemUgPD0gMTUzNikgJiYgKE1zZHUyU2l6ZSA8IHBSeEJsay0+RGF0YVNpemUpKSB7Ci0JCS8qIHNraXAgdHdvIGJ5dGUgTVNEVTIgbGVuICovCi0JCXBSeEJsay0+cERhdGEgKz0gMjsKLQkJcFJ4QmxrLT5EYXRhU2l6ZSAtPSAyOwotCX0gZWxzZSB7Ci0JCS8qIHJlbGVhc2UgcGFja2V0ICovCi0JCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhCbGstPnBSeFBhY2tldCwKLQkJCQkgICAgTkRJU19TVEFUVVNfRkFJTFVSRSk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBnZXQgODAyLjMgSGVhZGVyIGFuZCAgcmVtb3ZlIExMQyAqLwotCVJUTVBfODAyXzExX1JFTU9WRV9MTENfQU5EX0NPTlZFUlRfVE9fODAyXzMocFJ4QmxrLCBIZWFkZXI4MDJfMyk7Ci0KLQlBU1NFUlQocFJ4QmxrLT5wUnhQYWNrZXQpOwotCi0JLyogUmFsaW5rIEFnZ3JlZ2F0aW9uIGZyYW1lICovCi0JcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNSeEFnZ3JlZ2F0aW9uQ291bnQrKzsKLQlQYXlsb2FkMVNpemUgPSBwUnhCbGstPkRhdGFTaXplIC0gTXNkdTJTaXplOwotCVBheWxvYWQyU2l6ZSA9IE1zZHUyU2l6ZSAtIExFTkdUSF84MDJfMzsKLQotCXBEYXRhMiA9IHBSeEJsay0+cERhdGEgKyBQYXlsb2FkMVNpemUgKyBMRU5HVEhfODAyXzM7Ci0KLQlwUGFja2V0MiA9Ci0JICAgIGR1cGxpY2F0ZV9wa3QocEFkLCAocERhdGEyIC0gTEVOR1RIXzgwMl8zKSwgTEVOR1RIXzgwMl8zLCBwRGF0YTIsCi0JCQkgIFBheWxvYWQyU2l6ZSwgRnJvbVdoaWNoQlNTSUQpOwotCi0JaWYgKCFwUGFja2V0MikgewotCQkvKiByZWxlYXNlIHBhY2tldCAqLwotCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4QmxrLT5wUnhQYWNrZXQsCi0JCQkJICAgIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOwotCQlyZXR1cm47Ci0JfQotCS8qIHVwZGF0ZSBwYXlsb2FkIHNpemUgb2YgMXN0IHBhY2tldCAqLwotCXBSeEJsay0+RGF0YVNpemUgPSBQYXlsb2FkMVNpemU7Ci0Jd2xhbl84MDJfMTFfdG9fODAyXzNfcGFja2V0KHBBZCwgcFJ4QmxrLCBIZWFkZXI4MDJfMywgRnJvbVdoaWNoQlNTSUQpOwotCi0JQU5OT1VOQ0VfT1JfRk9SV0FSRF84MDJfM19QQUNLRVQocEFkLCBwUnhCbGstPnBSeFBhY2tldCwKLQkJCQkJIEZyb21XaGljaEJTU0lEKTsKLQotCWlmIChwUGFja2V0MikgewotCQlBTk5PVU5DRV9PUl9GT1JXQVJEXzgwMl8zX1BBQ0tFVChwQWQsIHBQYWNrZXQyLCBGcm9tV2hpY2hCU1NJRCk7Ci0JfQotfQotCi0jZGVmaW5lIFJFU0VUX0ZSQUdGUkFNRShfZnJhZ0ZyYW1lKSBcCi0JewkJCQkJCQkJXAotCQlfZnJhZ0ZyYW1lLlJ4U2l6ZSA9IDA7CQlcCi0JCV9mcmFnRnJhbWUuU2VxdWVuY2UgPSAwOwlcCi0JCV9mcmFnRnJhbWUuTGFzdEZyYWcgPSAwOwlcCi0JCV9mcmFnRnJhbWUuRmxhZ3MgPSAwOwkJXAotCX0KLQotdm9pZCAqUlRNUERlRnJhZ21lbnREYXRhRnJhbWUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfcnhfYmxrICpwUnhCbGspCi17Ci0Jc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEgKiBwSGVhZGVyID0gcFJ4QmxrLT5wSGVhZGVyOwotCXZvaWQgKnBSeFBhY2tldCA9IHBSeEJsay0+cFJ4UGFja2V0OwotCXU4ICpwRGF0YSA9IHBSeEJsay0+cERhdGE7Ci0JdTE2IERhdGFTaXplID0gcFJ4QmxrLT5EYXRhU2l6ZTsKLQl2b2lkICpwUmV0UGFja2V0ID0gTlVMTDsKLQl1OCAqcEZyYWdCdWZmZXIgPSBOVUxMOwotCUJPT0xFQU4gYlJlYXNzRG9uZSA9IEZBTFNFOwotCXU4IEhlYWRlclJvb20gPSAwOwotCi0JQVNTRVJUKHBIZWFkZXIpOwotCi0JSGVhZGVyUm9vbSA9IHBEYXRhIC0gKHU4ICopIHBIZWFkZXI7Ci0KLQkvKiBSZS1hc3NlbWJsZSB0aGUgZnJhZ21lbnRlZCBwYWNrZXRzICovCi0JaWYgKHBIZWFkZXItPkZyYWcgPT0gMCkJLyogRnJhZy4gTnVtYmVyIGlzIDAgOiBGaXJzdCBmcmFnIG9yIG9ubHkgb25lIHBrdCAqLwotCXsKLQkJLyogdGhlIGZpcnN0IHBrdCBvZiBmcmFnbWVudCwgcmVjb3JkIGl0LiAqLwotCQlpZiAocEhlYWRlci0+RkMuTW9yZUZyYWcpIHsKLQkJCUFTU0VSVChwQWQtPkZyYWdGcmFtZS5wRnJhZ1BhY2tldCk7Ci0JCQlwRnJhZ0J1ZmZlciA9Ci0JCQkgICAgR0VUX09TX1BLVF9EQVRBUFRSKHBBZC0+RnJhZ0ZyYW1lLnBGcmFnUGFja2V0KTsKLQkJCXBBZC0+RnJhZ0ZyYW1lLlJ4U2l6ZSA9IERhdGFTaXplICsgSGVhZGVyUm9vbTsKLQkJCU5kaXNNb3ZlTWVtb3J5KHBGcmFnQnVmZmVyLCBwSGVhZGVyLAotCQkJCSAgICAgICBwQWQtPkZyYWdGcmFtZS5SeFNpemUpOwotCQkJcEFkLT5GcmFnRnJhbWUuU2VxdWVuY2UgPSBwSGVhZGVyLT5TZXF1ZW5jZTsKLQkJCXBBZC0+RnJhZ0ZyYW1lLkxhc3RGcmFnID0gcEhlYWRlci0+RnJhZzsJLyogU2hvdWxkIGJlIDAgKi8KLQkJCUFTU0VSVChwQWQtPkZyYWdGcmFtZS5MYXN0RnJhZyA9PSAwKTsKLQkJCWdvdG8gZG9uZTsJLyogZW5kIG9mIHByb2Nlc3NpbmcgdGhpcyBmcmFtZSAqLwotCQl9Ci0JfSBlbHNlCQkJLypNaWRkbGUgJiBFbmQgb2YgZnJhZ21lbnQgKi8KLQl7Ci0JCWlmICgocEhlYWRlci0+U2VxdWVuY2UgIT0gcEFkLT5GcmFnRnJhbWUuU2VxdWVuY2UpIHx8Ci0JCSAgICAocEhlYWRlci0+RnJhZyAhPSAocEFkLT5GcmFnRnJhbWUuTGFzdEZyYWcgKyAxKSkpIHsKLQkJCS8qIEZyYWdtZW50IGlzIG5vdCB0aGUgc2FtZSBzZXF1ZW5jZSBvciBvdXQgb2YgZnJhZ21lbnQgbnVtYmVyIG9yZGVyICovCi0JCQkvKiBSZXNldCBGcmFnbWVudCBjb250cm9sIGJsayAqLwotCQkJUkVTRVRfRlJBR0ZSQU1FKHBBZC0+RnJhZ0ZyYW1lKTsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJCSAoIkZyYWdtZW50IGlzIG5vdCB0aGUgc2FtZSBzZXF1ZW5jZSBvciBvdXQgb2YgZnJhZ21lbnQgbnVtYmVyIG9yZGVyLlxuIikpOwotCQkJZ290byBkb25lOwkvKiBnaXZlIHVwIHRoaXMgZnJhbWUgKi8KLQkJfSBlbHNlIGlmICgocEFkLT5GcmFnRnJhbWUuUnhTaXplICsgRGF0YVNpemUpID4gTUFYX0ZSQU1FX1NJWkUpIHsKLQkJCS8qIEZyYWdtZW50IGZyYW1lIGlzIHRvbyBsYXJnZSwgaXQgZXhlZWRzIHRoZSBtYXhpbXVtIGZyYW1lIHNpemUuICovCi0JCQkvKiBSZXNldCBGcmFnbWVudCBjb250cm9sIGJsayAqLwotCQkJUkVTRVRfRlJBR0ZSQU1FKHBBZC0+RnJhZ0ZyYW1lKTsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJCSAoIkZyYWdtZW50IGZyYW1lIGlzIHRvbyBsYXJnZSwgaXQgZXhlZWRzIHRoZSBtYXhpbXVtIGZyYW1lIHNpemUuXG4iKSk7Ci0JCQlnb3RvIGRvbmU7CS8qIGdpdmUgdXAgdGhpcyBmcmFtZSAqLwotCQl9Ci0JCS8qICovCi0JCS8qIEJyb2FkY29tIEFQKEJDTTk0NzA0QUdSKSB3aWxsIHNlbmQgb3V0IExMQyBpbiBmcmFnbWVudCdzIHBhY2tldCwgTExDIG9ubHkgY2FuIGFjY3BldCBhdCBmaXJzdCBmcmFnbWVudC4gKi8KLQkJLyogSW4gdGhpcyBjYXNlLCB3ZSB3aWxsIGRyb3B0IGl0LiAqLwotCQkvKiAqLwotCQlpZiAoTmRpc0VxdWFsTWVtb3J5KHBEYXRhLCBTTkFQXzgwMl8xSCwgc2l6ZW9mKFNOQVBfODAyXzFIKSkpIHsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJCSAoIkZpbmQgYW5vdGhlciBMTEMgYXQgTWlkZGxlIG9yIEVuZCBmcmFnbWVudChTTj0lZCwgRnJhZz0lZClcbiIsCi0JCQkJICBwSGVhZGVyLT5TZXF1ZW5jZSwgcEhlYWRlci0+RnJhZykpOwotCQkJZ290byBkb25lOwkvKiBnaXZlIHVwIHRoaXMgZnJhbWUgKi8KLQkJfQotCi0JCXBGcmFnQnVmZmVyID0gR0VUX09TX1BLVF9EQVRBUFRSKHBBZC0+RnJhZ0ZyYW1lLnBGcmFnUGFja2V0KTsKLQotCQkvKiBjb25jYXRlbmF0ZSB0aGlzIGZyYWdtZW50IGludG8gdGhlIHJlLWFzc2VtYmx5IGJ1ZmZlciAqLwotCQlOZGlzTW92ZU1lbW9yeSgocEZyYWdCdWZmZXIgKyBwQWQtPkZyYWdGcmFtZS5SeFNpemUpLCBwRGF0YSwKLQkJCSAgICAgICBEYXRhU2l6ZSk7Ci0JCXBBZC0+RnJhZ0ZyYW1lLlJ4U2l6ZSArPSBEYXRhU2l6ZTsKLQkJcEFkLT5GcmFnRnJhbWUuTGFzdEZyYWcgPSBwSGVhZGVyLT5GcmFnOwkvKiBVcGRhdGUgZnJhZ21lbnQgbnVtYmVyICovCi0KLQkJLyogTGFzdCBmcmFnbWVudCAqLwotCQlpZiAocEhlYWRlci0+RkMuTW9yZUZyYWcgPT0gRkFMU0UpIHsKLQkJCWJSZWFzc0RvbmUgPSBUUlVFOwotCQl9Ci0JfQotCi1kb25lOgotCS8qIGFsd2F5cyByZWxlYXNlIHJ4IGZyYWdtZW50ZWQgcGFja2V0ICovCi0JUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7Ci0KLQkvKiByZXR1cm4gZGVmcmFnbWVudGVkIHBhY2tldCBpZiBwYWNrZXQgaXMgcmVhc3NlbWJsZWQgY29tcGxldGVseSAqLwotCS8qIG90aGVyd2lzZSByZXR1cm4gTlVMTCAqLwotCWlmIChiUmVhc3NEb25lKSB7Ci0JCXZvaWQgKnBOZXdGcmFnUGFja2V0OwotCi0JCS8qIGFsbG9jYXRlIGEgbmV3IHBhY2tldCBidWZmZXIgZm9yIGZyYWdtZW50ICovCi0JCXBOZXdGcmFnUGFja2V0ID0KLQkJICAgIFJUTVBfQWxsb2NhdGVGcmFnUGFja2V0QnVmZmVyKHBBZCwgUlhfQlVGRkVSX05PUk1TSVpFKTsKLQkJaWYgKHBOZXdGcmFnUGFja2V0KSB7Ci0JCQkvKiB1cGRhdGUgUnhCbGsgKi8KLQkJCXBSZXRQYWNrZXQgPSBwQWQtPkZyYWdGcmFtZS5wRnJhZ1BhY2tldDsKLQkJCXBBZC0+RnJhZ0ZyYW1lLnBGcmFnUGFja2V0ID0gcE5ld0ZyYWdQYWNrZXQ7Ci0JCQlwUnhCbGstPnBIZWFkZXIgPQotCQkJICAgIChzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSAqKSBHRVRfT1NfUEtUX0RBVEFQVFIocFJldFBhY2tldCk7Ci0JCQlwUnhCbGstPnBEYXRhID0gKHU4ICopIHBSeEJsay0+cEhlYWRlciArIEhlYWRlclJvb207Ci0JCQlwUnhCbGstPkRhdGFTaXplID0gcEFkLT5GcmFnRnJhbWUuUnhTaXplIC0gSGVhZGVyUm9vbTsKLQkJCXBSeEJsay0+cFJ4UGFja2V0ID0gcFJldFBhY2tldDsKLQkJfSBlbHNlIHsKLQkJCVJFU0VUX0ZSQUdGUkFNRShwQWQtPkZyYWdGcmFtZSk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcFJldFBhY2tldDsKLX0KLQotdm9pZCBJbmRpY2F0ZV9BTVNEVV9QYWNrZXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgc3RydWN0IHJ0X3J4X2JsayAqcFJ4QmxrLCB1OCBGcm9tV2hpY2hCU1NJRCkKLXsKLQl1MzIgbk1TRFU7Ci0KLQl1cGRhdGVfb3NfcGFja2V0X2luZm8ocEFkLCBwUnhCbGssIEZyb21XaGljaEJTU0lEKTsKLQlSVE1QX1NFVF9QQUNLRVRfSUYocFJ4QmxrLT5wUnhQYWNrZXQsIEZyb21XaGljaEJTU0lEKTsKLQluTVNEVSA9Ci0JICAgIGRlYWdncmVnYXRlX0FNU0RVX2Fubm91bmNlKHBBZCwgcFJ4QmxrLT5wUnhQYWNrZXQsIHBSeEJsay0+cERhdGEsCi0JCQkJICAgICAgIHBSeEJsay0+RGF0YVNpemUpOwotfQotCi12b2lkIEluZGljYXRlX0VBUE9MX1BhY2tldChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICBzdHJ1Y3QgcnRfcnhfYmxrICpwUnhCbGssIHU4IEZyb21XaGljaEJTU0lEKQotewotCXN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKnBFbnRyeSA9IE5VTEw7Ci0KLQl7Ci0JCXBFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdOwotCQlTVEFSeEVBUE9MRnJhbWVJbmRpY2F0ZShwQWQsIHBFbnRyeSwgcFJ4QmxrLCBGcm9tV2hpY2hCU1NJRCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAocEVudHJ5ID09IE5VTEwpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfV0FSTiwKLQkJCSAoIkluZGljYXRlX0VBUE9MX1BhY2tldDogZHJvcCBhbmQgcmVsZWFzZSB0aGUgaW52YWxpZCBwYWNrZXQuXG4iKSk7Ci0JCS8qIHJlbGVhc2UgcGFja2V0ICovCi0JCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhCbGstPnBSeFBhY2tldCwKLQkJCQkgICAgTkRJU19TVEFUVVNfRkFJTFVSRSk7Ci0JCXJldHVybjsKLQl9Ci19Ci0KLSNkZWZpbmUgQkNOX1RCVFRfT0ZGU0VUCQk2NAkvKmRlZmVyIDY0IHVzICovCi12b2lkIFJlU3luY0JlYWNvblRpbWUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCi0JdTMyIE9mZnNldDsKLQotCU9mZnNldCA9IChwQWQtPlRidHRUaWNrQ291bnQpICUgKEJDTl9UQlRUX09GRlNFVCk7Ci0KLQlwQWQtPlRidHRUaWNrQ291bnQrKzsKLQotCS8qICovCi0JLyogVGhlIHVwZGF0ZWQgQmVhY29uSW50ZXJ2YWwgVmFsdWUgd2lsbCBhZmZlY3QgQmVhY29uIEludGVydmFsIGFmdGVyIHR3byBUQlRUICovCi0JLyogYmVhY2FzdWUgdGhlIG9yaWdpbmFsIEJlYWNvbkludGVydmFsIGhhZCBiZWVuIGxvYWRlZCBpbnRvIG5leHQgVEJUVF9USU1FUiAqLwotCS8qICovCi0JaWYgKE9mZnNldCA9PSAoQkNOX1RCVFRfT0ZGU0VUIC0gMikpIHsKLQkJQkNOX1RJTUVfQ0ZHX1NUUlVDIGNzcjsKLQkJUlRNUF9JT19SRUFEMzIocEFkLCBCQ05fVElNRV9DRkcsICZjc3Iud29yZCk7Ci0JCWNzci5maWVsZC5CZWFjb25JbnRlcnZhbCA9IChwQWQtPkNvbW1vbkNmZy5CZWFjb25QZXJpb2QgPDwgNCkgLSAxOwkvKiBBU0lDIHJlZ2lzdGVyIGluIHVuaXRzIG9mIDEvMTYgVFUgPSA2NHVzICovCi0JCVJUTVBfSU9fV1JJVEUzMihwQWQsIEJDTl9USU1FX0NGRywgY3NyLndvcmQpOwotCX0gZWxzZSB7Ci0JCWlmIChPZmZzZXQgPT0gKEJDTl9UQlRUX09GRlNFVCAtIDEpKSB7Ci0JCQlCQ05fVElNRV9DRkdfU1RSVUMgY3NyOwotCi0JCQlSVE1QX0lPX1JFQUQzMihwQWQsIEJDTl9USU1FX0NGRywgJmNzci53b3JkKTsKLQkJCWNzci5maWVsZC5CZWFjb25JbnRlcnZhbCA9IChwQWQtPkNvbW1vbkNmZy5CZWFjb25QZXJpb2QpIDw8IDQ7CS8qIEFTSUMgcmVnaXN0ZXIgaW4gdW5pdHMgb2YgMS8xNiBUVSAqLwotCQkJUlRNUF9JT19XUklURTMyKHBBZCwgQkNOX1RJTUVfQ0ZHLCBjc3Iud29yZCk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YV9wY2kuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9kYXRhX3BjaS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDFhNTFjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9kYXRhX3BjaS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA5NiArMCwwIEBACi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFJhbGluayBUZWNoIEluYy4KLSAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKLSAqIEhzaW5jaHUgQ291bnR5IDMwMiwKLSAqIFRhaXdhbiwgUi5PLkMuCi0gKgotICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqLwotCi0vKgotICAgQWxsIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgbXVzdCBiZSBQQ0ktZGVwZW5kZWQsIG9yIHlvdSBzaG91bGQgb3V0IHlvdXIgZnVuY3Rpb24KLQlpbiBvdGhlciBmaWxlcy4KLQotKi8KLSNpbmNsdWRlCSIuLi9ydF9jb25maWcuaCIKLQotdTE2IFJ0bXBQQ0lfV3JpdGVUeFJlc291cmNlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICAgICBzdHJ1Y3QgcnRfdHhfYmxrICpwVHhCbGssCi0JCQkgICAgICAgSU4gQk9PTEVBTiBiSXNMYXN0LCB1MTYgKiBGcmVlTnVtYmVyKQotewotCi0JdTggKnBETUFIZWFkZXJCdWZWQTsKLQl1MTYgVHhJZHgsIFJldFR4SWR4OwotCXN0cnVjdCBydF90eGQgKiBwVHhEOwotCXUzMiBCdWZCYXNlUGFMb3c7Ci0Jc3RydWN0IHJ0X3J0bXBfdHhfcmluZyAqcFR4UmluZzsKLQl1MTYgaHdIZWFkZXJMZW47Ci0KLQkvKiAqLwotCS8qIGdldCBUeCBSaW5nIFJlc291cmNlICovCi0JLyogKi8KLQlwVHhSaW5nID0gJnBBZC0+VHhSaW5nW3BUeEJsay0+UXVlSWR4XTsKLQlUeElkeCA9IHBBZC0+VHhSaW5nW3BUeEJsay0+UXVlSWR4XS5UeENwdUlkeDsKLQlwRE1BSGVhZGVyQnVmVkEgPSAodTggKilwVHhSaW5nLT5DZWxsW1R4SWR4XS5EbWFCdWYuQWxsb2NWYTsKLQlCdWZCYXNlUGFMb3cgPQotCSAgICBSVE1QX0dldFBoeXNpY2FsQWRkcmVzc0xvdyhwVHhSaW5nLT5DZWxsW1R4SWR4XS5EbWFCdWYuQWxsb2NQYSk7Ci0KLQkvKiBjb3B5IFRYSU5GTyArIFRYV0kgKyBXTEFOIEhlYWRlciArIExMQyBpbnRvIERNQSBIZWFkZXIgQnVmZmVyICovCi0JaWYgKHBUeEJsay0+VHhGcmFtZVR5cGUgPT0gVFhfQU1TRFVfRlJBTUUpIHsKLQkJLypod0hlYWRlckxlbiA9IFJPVU5EX1VQKHBUeEJsay0+TXBkdUhlYWRlckxlbi1MRU5HVEhfQU1TRFVfU1VCRlJBTUVIRUFELCA0KStMRU5HVEhfQU1TRFVfU1VCRlJBTUVIRUFEOyAqLwotCQlod0hlYWRlckxlbiA9Ci0JCSAgICBwVHhCbGstPk1wZHVIZWFkZXJMZW4gLSBMRU5HVEhfQU1TRFVfU1VCRlJBTUVIRUFEICsKLQkJICAgIHBUeEJsay0+SGRyUGFkTGVuICsgTEVOR1RIX0FNU0RVX1NVQkZSQU1FSEVBRDsKLQl9IGVsc2UgewotCQkvKmh3SGVhZGVyTGVuID0gUk9VTkRfVVAocFR4QmxrLT5NcGR1SGVhZGVyTGVuLCA0KTsgKi8KLQkJaHdIZWFkZXJMZW4gPSBwVHhCbGstPk1wZHVIZWFkZXJMZW4gKyBwVHhCbGstPkhkclBhZExlbjsKLQl9Ci0JTmRpc01vdmVNZW1vcnkocERNQUhlYWRlckJ1ZlZBLCBwVHhCbGstPkhlYWRlckJ1ZiwKLQkJICAgICAgIFRYSU5GT19TSVpFICsgVFhXSV9TSVpFICsgaHdIZWFkZXJMZW4pOwotCi0JcFR4UmluZy0+Q2VsbFtUeElkeF0ucE5kaXNQYWNrZXQgPSBwVHhCbGstPnBQYWNrZXQ7Ci0JcFR4UmluZy0+Q2VsbFtUeElkeF0ucE5leHROZGlzUGFja2V0ID0gTlVMTDsKLQotCS8qICovCi0JLyogYnVpbGQgVHggRGVzY3JpcHRvciAqLwotCS8qICovCi0KLQlwVHhEID0gKHN0cnVjdCBydF90eGQgKikgcFR4UmluZy0+Q2VsbFtUeElkeF0uQWxsb2NWYTsKLQlOZGlzWmVyb01lbW9yeShwVHhELCBUWERfU0laRSk7Ci0KLQlwVHhELT5TRFB0cjAgPSBCdWZCYXNlUGFMb3c7Ci0JcFR4RC0+U0RMZW4wID0gVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkUgKyBod0hlYWRlckxlbjsJLyogaW5jbHVkZSBwYWRkaW5nICovCi0JcFR4RC0+U0RQdHIxID0gUENJX01BUF9TSU5HTEUocEFkLCBwVHhCbGssIDAsIDEsIFBDSV9ETUFfVE9ERVZJQ0UpOwotCXBUeEQtPlNETGVuMSA9IHBUeEJsay0+U3JjQnVmTGVuOwotCXBUeEQtPkxhc3RTZWMwID0gMDsKLQlwVHhELT5MYXN0U2VjMSA9IChiSXNMYXN0KSA/IDEgOiAwOwotCi0JUlRNUFdyaXRlVHhEZXNjcmlwdG9yKHBBZCwgcFR4RCwgRkFMU0UsIEZJRk9fRURDQSk7Ci0KLQlSZXRUeElkeCA9IFR4SWR4OwotCS8qICovCi0JLyogVXBkYXRlIFR4IGluZGV4ICovCi0JLyogKi8KLQlJTkNfUklOR19JTkRFWChUeElkeCwgVFhfUklOR19TSVpFKTsKLQlwVHhSaW5nLT5UeENwdUlkeCA9IFR4SWR4OwotCi0JKkZyZWVOdW1iZXIgLT0gMTsKLQotCXJldHVybiBSZXRUeElkeDsKLX0KLQotdTE2IFJ0bXBQQ0lfV3JpdGVTaW5nbGVUeFJlc291cmNlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkgICAgIHN0cnVjdCBydF90eF9ibGsgKnBUeEJsaywKLQkJCQkgICAgIElOIEJPT0xFQU4gYklzTGFzdCwKLQkJCQkgICAgIHUxNiAqIEZyZWVOdW1iZXIpCi17Ci0KLQl1OCAqcERNQUhlYWRlckJ1ZlZBOwotCXUxNiBUeElkeCwgUmV0VHhJZHg7Ci0Jc3RydWN0IHJ0X3R4ZCAqIHBUeEQ7Ci0JdTMyIEJ1ZkJhc2VQYUxvdzsKLQlzdHJ1Y3QgcnRfcnRtcF90eF9yaW5nICpwVHhSaW5nOwotCXUxNiBod0hlYWRlckxlbjsKLQotCS8qICovCi0JLyogZ2V0IFR4IFJpbmcgUmVzb3VyY2UgKi8KLQkvKiAqLwotCXBUeFJpbmcgPSAmcEFkLT5UeFJpbmdbcFR4QmxrLT5RdWVJZHhdOwotCVR4SWR4ID0gcEFkLT5UeFJpbmdbcFR4QmxrLT5RdWVJZHhdLlR4Q3B1SWR4OwotCXBETUFIZWFkZXJCdWZWQSA9ICh1OCAqKXBUeFJpbmctPkNlbGxbVHhJZHhdLkRtYUJ1Zi5BbGxvY1ZhOwotCUJ1ZkJhc2VQYUxvdyA9Ci0JICAgIFJUTVBfR2V0UGh5c2ljYWxBZGRyZXNzTG93KHBUeFJpbmctPkNlbGxbVHhJZHhdLkRtYUJ1Zi5BbGxvY1BhKTsKLQotCS8qIGNvcHkgVFhJTkZPICsgVFhXSSArIFdMQU4gSGVhZGVyICsgTExDIGludG8gRE1BIEhlYWRlciBCdWZmZXIgKi8KLQkvKmh3SGVhZGVyTGVuID0gUk9VTkRfVVAocFR4QmxrLT5NcGR1SGVhZGVyTGVuLCA0KTsgKi8KLQlod0hlYWRlckxlbiA9IHBUeEJsay0+TXBkdUhlYWRlckxlbiArIHBUeEJsay0+SGRyUGFkTGVuOwotCi0JTmRpc01vdmVNZW1vcnkocERNQUhlYWRlckJ1ZlZBLCBwVHhCbGstPkhlYWRlckJ1ZiwKLQkJICAgICAgIFRYSU5GT19TSVpFICsgVFhXSV9TSVpFICsgaHdIZWFkZXJMZW4pOwotCi0JcFR4UmluZy0+Q2VsbFtUeElkeF0ucE5kaXNQYWNrZXQgPSBwVHhCbGstPnBQYWNrZXQ7Ci0JcFR4UmluZy0+Q2VsbFtUeElkeF0ucE5leHROZGlzUGFja2V0ID0gTlVMTDsKLQotCS8qICovCi0JLyogYnVpbGQgVHggRGVzY3JpcHRvciAqLwotCS8qICovCi0JcFR4RCA9IChzdHJ1Y3QgcnRfdHhkICopIHBUeFJpbmctPkNlbGxbVHhJZHhdLkFsbG9jVmE7Ci0JTmRpc1plcm9NZW1vcnkocFR4RCwgVFhEX1NJWkUpOwotCi0JcFR4RC0+U0RQdHIwID0gQnVmQmFzZVBhTG93OwotCXBUeEQtPlNETGVuMCA9IFRYSU5GT19TSVpFICsgVFhXSV9TSVpFICsgaHdIZWFkZXJMZW47CS8qIGluY2x1ZGUgcGFkZGluZyAqLwotCXBUeEQtPlNEUHRyMSA9IFBDSV9NQVBfU0lOR0xFKHBBZCwgcFR4QmxrLCAwLCAxLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQlwVHhELT5TRExlbjEgPSBwVHhCbGstPlNyY0J1ZkxlbjsKLQlwVHhELT5MYXN0U2VjMCA9IDA7Ci0JcFR4RC0+TGFzdFNlYzEgPSAoYklzTGFzdCkgPyAxIDogMDsKLQotCVJUTVBXcml0ZVR4RGVzY3JpcHRvcihwQWQsIHBUeEQsIEZBTFNFLCBGSUZPX0VEQ0EpOwotCi0JUmV0VHhJZHggPSBUeElkeDsKLQkvKiAqLwotCS8qIFVwZGF0ZSBUeCBpbmRleCAqLwotCS8qICovCi0JSU5DX1JJTkdfSU5ERVgoVHhJZHgsIFRYX1JJTkdfU0laRSk7Ci0JcFR4UmluZy0+VHhDcHVJZHggPSBUeElkeDsKLQotCSpGcmVlTnVtYmVyIC09IDE7Ci0KLQlyZXR1cm4gUmV0VHhJZHg7Ci19Ci0KLXUxNiBSdG1wUENJX1dyaXRlTXVsdGlUeFJlc291cmNlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkgICAgc3RydWN0IHJ0X3R4X2JsayAqcFR4QmxrLAotCQkJCSAgICB1OCBmcmFtZU51bSwgdTE2ICogRnJlZU51bWJlcikKLXsKLQlCT09MRUFOIGJJc0xhc3Q7Ci0JdTggKnBETUFIZWFkZXJCdWZWQTsKLQl1MTYgVHhJZHgsIFJldFR4SWR4OwotCXN0cnVjdCBydF90eGQgKiBwVHhEOwotCXUzMiBCdWZCYXNlUGFMb3c7Ci0Jc3RydWN0IHJ0X3J0bXBfdHhfcmluZyAqcFR4UmluZzsKLQl1MTYgaHdIZHJMZW47Ci0JdTMyIGZpcnN0RE1BTGVuOwotCi0JYklzTGFzdCA9ICgoZnJhbWVOdW0gPT0gKHBUeEJsay0+VG90YWxGcmFtZU51bSAtIDEpKSA/IDEgOiAwKTsKLQotCS8qICovCi0JLyogZ2V0IFR4IFJpbmcgUmVzb3VyY2UgKi8KLQkvKiAqLwotCXBUeFJpbmcgPSAmcEFkLT5UeFJpbmdbcFR4QmxrLT5RdWVJZHhdOwotCVR4SWR4ID0gcEFkLT5UeFJpbmdbcFR4QmxrLT5RdWVJZHhdLlR4Q3B1SWR4OwotCXBETUFIZWFkZXJCdWZWQSA9ICh1OCAqKXBUeFJpbmctPkNlbGxbVHhJZHhdLkRtYUJ1Zi5BbGxvY1ZhOwotCUJ1ZkJhc2VQYUxvdyA9Ci0JICAgIFJUTVBfR2V0UGh5c2ljYWxBZGRyZXNzTG93KHBUeFJpbmctPkNlbGxbVHhJZHhdLkRtYUJ1Zi5BbGxvY1BhKTsKLQotCWlmIChmcmFtZU51bSA9PSAwKSB7Ci0JCS8qIGNvcHkgVFhJTkZPICsgVFhXSSArIFdMQU4gSGVhZGVyICsgTExDIGludG8gRE1BIEhlYWRlciBCdWZmZXIgKi8KLQkJaWYgKHBUeEJsay0+VHhGcmFtZVR5cGUgPT0gVFhfQU1TRFVfRlJBTUUpCi0JCQkvKmh3SGRyTGVuID0gUk9VTkRfVVAocFR4QmxrLT5NcGR1SGVhZGVyTGVuLUxFTkdUSF9BTVNEVV9TVUJGUkFNRUhFQUQsIDQpK0xFTkdUSF9BTVNEVV9TVUJGUkFNRUhFQUQ7ICovCi0JCQlod0hkckxlbiA9Ci0JCQkgICAgcFR4QmxrLT5NcGR1SGVhZGVyTGVuIC0gTEVOR1RIX0FNU0RVX1NVQkZSQU1FSEVBRCArCi0JCQkgICAgcFR4QmxrLT5IZHJQYWRMZW4gKyBMRU5HVEhfQU1TRFVfU1VCRlJBTUVIRUFEOwotCQllbHNlIGlmIChwVHhCbGstPlR4RnJhbWVUeXBlID09IFRYX1JBTElOS19GUkFNRSkKLQkJCS8qaHdIZHJMZW4gPSBST1VORF9VUChwVHhCbGstPk1wZHVIZWFkZXJMZW4tTEVOR1RIX0FSQUxJTktfSEVBREVSX0ZJRUxELCA0KStMRU5HVEhfQVJBTElOS19IRUFERVJfRklFTEQ7ICovCi0JCQlod0hkckxlbiA9Ci0JCQkgICAgcFR4QmxrLT5NcGR1SGVhZGVyTGVuIC0KLQkJCSAgICBMRU5HVEhfQVJBTElOS19IRUFERVJfRklFTEQgKyBwVHhCbGstPkhkclBhZExlbiArCi0JCQkgICAgTEVOR1RIX0FSQUxJTktfSEVBREVSX0ZJRUxEOwotCQllbHNlCi0JCQkvKmh3SGRyTGVuID0gUk9VTkRfVVAocFR4QmxrLT5NcGR1SGVhZGVyTGVuLCA0KTsgKi8KLQkJCWh3SGRyTGVuID0gcFR4QmxrLT5NcGR1SGVhZGVyTGVuICsgcFR4QmxrLT5IZHJQYWRMZW47Ci0KLQkJZmlyc3RETUFMZW4gPSBUWElORk9fU0laRSArIFRYV0lfU0laRSArIGh3SGRyTGVuOwotCX0gZWxzZSB7Ci0JCWZpcnN0RE1BTGVuID0gcFR4QmxrLT5NcGR1SGVhZGVyTGVuOwotCX0KLQotCU5kaXNNb3ZlTWVtb3J5KHBETUFIZWFkZXJCdWZWQSwgcFR4QmxrLT5IZWFkZXJCdWYsIGZpcnN0RE1BTGVuKTsKLQotCXBUeFJpbmctPkNlbGxbVHhJZHhdLnBOZGlzUGFja2V0ID0gcFR4QmxrLT5wUGFja2V0OwotCXBUeFJpbmctPkNlbGxbVHhJZHhdLnBOZXh0TmRpc1BhY2tldCA9IE5VTEw7Ci0KLQkvKiAqLwotCS8qIGJ1aWxkIFR4IERlc2NyaXB0b3IgKi8KLQkvKiAqLwotCXBUeEQgPSAoc3RydWN0IHJ0X3R4ZCAqKSBwVHhSaW5nLT5DZWxsW1R4SWR4XS5BbGxvY1ZhOwotCU5kaXNaZXJvTWVtb3J5KHBUeEQsIFRYRF9TSVpFKTsKLQotCXBUeEQtPlNEUHRyMCA9IEJ1ZkJhc2VQYUxvdzsKLQlwVHhELT5TRExlbjAgPSBmaXJzdERNQUxlbjsJLyogaW5jbHVkZSBwYWRkaW5nICovCi0JcFR4RC0+U0RQdHIxID0gUENJX01BUF9TSU5HTEUocEFkLCBwVHhCbGssIDAsIDEsIFBDSV9ETUFfVE9ERVZJQ0UpOwotCXBUeEQtPlNETGVuMSA9IHBUeEJsay0+U3JjQnVmTGVuOwotCXBUeEQtPkxhc3RTZWMwID0gMDsKLQlwVHhELT5MYXN0U2VjMSA9IChiSXNMYXN0KSA/IDEgOiAwOwotCi0JUlRNUFdyaXRlVHhEZXNjcmlwdG9yKHBBZCwgcFR4RCwgRkFMU0UsIEZJRk9fRURDQSk7Ci0KLQlSZXRUeElkeCA9IFR4SWR4OwotCS8qICovCi0JLyogVXBkYXRlIFR4IGluZGV4ICovCi0JLyogKi8KLQlJTkNfUklOR19JTkRFWChUeElkeCwgVFhfUklOR19TSVpFKTsKLQlwVHhSaW5nLT5UeENwdUlkeCA9IFR4SWR4OwotCi0JKkZyZWVOdW1iZXIgLT0gMTsKLQotCXJldHVybiBSZXRUeElkeDsKLQotfQotCi12b2lkIFJ0bXBQQ0lfRmluYWxXcml0ZVR4UmVzb3VyY2Uoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCSAgc3RydWN0IHJ0X3R4X2JsayAqcFR4QmxrLAotCQkJCSAgdTE2IHRvdGFsTVBEVVNpemUsIHUxNiBGaXJzdFR4SWR4KQotewotCi0Jc3RydWN0IHJ0X3R4d2kgKiBwVHhXSTsKLQlzdHJ1Y3QgcnRfcnRtcF90eF9yaW5nICpwVHhSaW5nOwotCi0JLyogKi8KLQkvKiBnZXQgVHggUmluZyBSZXNvdXJjZSAqLwotCS8qICovCi0JcFR4UmluZyA9ICZwQWQtPlR4UmluZ1twVHhCbGstPlF1ZUlkeF07Ci0JcFR4V0kgPSAoc3RydWN0IHJ0X3R4d2kgKikgcFR4UmluZy0+Q2VsbFtGaXJzdFR4SWR4XS5EbWFCdWYuQWxsb2NWYTsKLQlwVHhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50ID0gdG90YWxNUERVU2l6ZTsKLQotfQotCi12b2lkIFJ0bXBQQ0lEYXRhTGFzdFR4SWR4KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgdTggUXVlSWR4LCB1MTYgTGFzdFR4SWR4KQotewotCXN0cnVjdCBydF90eGQgKiBwVHhEOwotCXN0cnVjdCBydF9ydG1wX3R4X3JpbmcgKnBUeFJpbmc7Ci0KLQkvKiAqLwotCS8qIGdldCBUeCBSaW5nIFJlc291cmNlICovCi0JLyogKi8KLQlwVHhSaW5nID0gJnBBZC0+VHhSaW5nW1F1ZUlkeF07Ci0KLQkvKiAqLwotCS8qIGJ1aWxkIFR4IERlc2NyaXB0b3IgKi8KLQkvKiAqLwotCXBUeEQgPSAoc3RydWN0IHJ0X3R4ZCAqKSBwVHhSaW5nLT5DZWxsW0xhc3RUeElkeF0uQWxsb2NWYTsKLQotCXBUeEQtPkxhc3RTZWMxID0gMTsKLQotfQotCi11MTYgUnRtcFBDSV9Xcml0ZUZyYWdUeFJlc291cmNlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkgICBzdHJ1Y3QgcnRfdHhfYmxrICpwVHhCbGssCi0JCQkJICAgdTggZnJhZ051bSwgdTE2ICogRnJlZU51bWJlcikKLXsKLQl1OCAqcERNQUhlYWRlckJ1ZlZBOwotCXUxNiBUeElkeCwgUmV0VHhJZHg7Ci0Jc3RydWN0IHJ0X3R4ZCAqIHBUeEQ7Ci0JdTMyIEJ1ZkJhc2VQYUxvdzsKLQlzdHJ1Y3QgcnRfcnRtcF90eF9yaW5nICpwVHhSaW5nOwotCXUxNiBod0hlYWRlckxlbjsKLQl1MzIgZmlyc3RETUFMZW47Ci0KLQkvKiAqLwotCS8qIEdldCBUeCBSaW5nIFJlc291cmNlICovCi0JLyogKi8KLQlwVHhSaW5nID0gJnBBZC0+VHhSaW5nW3BUeEJsay0+UXVlSWR4XTsKLQlUeElkeCA9IHBBZC0+VHhSaW5nW3BUeEJsay0+UXVlSWR4XS5UeENwdUlkeDsKLQlwRE1BSGVhZGVyQnVmVkEgPSAodTggKilwVHhSaW5nLT5DZWxsW1R4SWR4XS5EbWFCdWYuQWxsb2NWYTsKLQlCdWZCYXNlUGFMb3cgPQotCSAgICBSVE1QX0dldFBoeXNpY2FsQWRkcmVzc0xvdyhwVHhSaW5nLT5DZWxsW1R4SWR4XS5EbWFCdWYuQWxsb2NQYSk7Ci0KLQkvKiAqLwotCS8qIENvcHkgVFhJTkZPICsgVFhXSSArIFdMQU4gSGVhZGVyICsgTExDIGludG8gRE1BIEhlYWRlciBCdWZmZXIgKi8KLQkvKiAqLwotCS8qaHdIZWFkZXJMZW4gPSBST1VORF9VUChwVHhCbGstPk1wZHVIZWFkZXJMZW4sIDQpOyAqLwotCWh3SGVhZGVyTGVuID0gcFR4QmxrLT5NcGR1SGVhZGVyTGVuICsgcFR4QmxrLT5IZHJQYWRMZW47Ci0KLQlmaXJzdERNQUxlbiA9IFRYSU5GT19TSVpFICsgVFhXSV9TSVpFICsgaHdIZWFkZXJMZW47Ci0JTmRpc01vdmVNZW1vcnkocERNQUhlYWRlckJ1ZlZBLCBwVHhCbGstPkhlYWRlckJ1ZiwgZmlyc3RETUFMZW4pOwotCi0JLyogKi8KLQkvKiBCdWlsZCBUeCBEZXNjcmlwdG9yICovCi0JLyogKi8KLQlwVHhEID0gKHN0cnVjdCBydF90eGQgKikgcFR4UmluZy0+Q2VsbFtUeElkeF0uQWxsb2NWYTsKLQlOZGlzWmVyb01lbW9yeShwVHhELCBUWERfU0laRSk7Ci0KLQlpZiAoZnJhZ051bSA9PSBwVHhCbGstPlRvdGFsRnJhZ051bSkgewotCQlwVHhSaW5nLT5DZWxsW1R4SWR4XS5wTmRpc1BhY2tldCA9IHBUeEJsay0+cFBhY2tldDsKLQkJcFR4UmluZy0+Q2VsbFtUeElkeF0ucE5leHROZGlzUGFja2V0ID0gTlVMTDsKLQl9Ci0KLQlwVHhELT5TRFB0cjAgPSBCdWZCYXNlUGFMb3c7Ci0JcFR4RC0+U0RMZW4wID0gZmlyc3RETUFMZW47CS8qIGluY2x1ZGUgcGFkZGluZyAqLwotCXBUeEQtPlNEUHRyMSA9IFBDSV9NQVBfU0lOR0xFKHBBZCwgcFR4QmxrLCAwLCAxLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQlwVHhELT5TRExlbjEgPSBwVHhCbGstPlNyY0J1ZkxlbjsKLQlwVHhELT5MYXN0U2VjMCA9IDA7Ci0JcFR4RC0+TGFzdFNlYzEgPSAxOwotCi0JUlRNUFdyaXRlVHhEZXNjcmlwdG9yKHBBZCwgcFR4RCwgRkFMU0UsIEZJRk9fRURDQSk7Ci0KLQlSZXRUeElkeCA9IFR4SWR4OwotCXBUeEJsay0+UHJpdiArPSBwVHhCbGstPlNyY0J1ZkxlbjsKLQotCS8qICovCi0JLyogVXBkYXRlIFR4IGluZGV4ICovCi0JLyogKi8KLQlJTkNfUklOR19JTkRFWChUeElkeCwgVFhfUklOR19TSVpFKTsKLQlwVHhSaW5nLT5UeENwdUlkeCA9IFR4SWR4OwotCi0JKkZyZWVOdW1iZXIgLT0gMTsKLQotCXJldHVybiBSZXRUeElkeDsKLQotfQotCi0vKgotCU11c3QgYmUgcnVuIGluIEludGVycnVwdCBjb250ZXh0Ci0JVGhpcyBmdW5jdGlvbiBoYW5kbGUgUENJIHNwZWNpZmljIFR4RGVzYyBhbmQgY3B1IGluZGV4IHVwZGF0ZSBhbmQga2ljayB0aGUgcGFja2V0IG91dC4KLSAqLwotaW50IFJ0bXBQQ0lNZ210S2lja091dChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgICAgICB1OCBRdWVJZHgsCi0JCSAgICAgICB2b2lkICpwUGFja2V0LAotCQkgICAgICAgdTggKnBTcmNCdWZWQSwgdTMyIFNyY0J1ZkxlbikKLXsKLQlzdHJ1Y3QgcnRfdHhkICogcFR4RDsKLQl1bnNpZ25lZCBsb25nIFN3SWR4ID0gcEFkLT5NZ210UmluZy5UeENwdUlkeDsKLQotCXBUeEQgPSAoc3RydWN0IHJ0X3R4ZCAqKSBwQWQtPk1nbXRSaW5nLkNlbGxbU3dJZHhdLkFsbG9jVmE7Ci0KLQlwQWQtPk1nbXRSaW5nLkNlbGxbU3dJZHhdLnBOZGlzUGFja2V0ID0gcFBhY2tldDsKLQlwQWQtPk1nbXRSaW5nLkNlbGxbU3dJZHhdLnBOZXh0TmRpc1BhY2tldCA9IE5VTEw7Ci0KLQlSVE1QV3JpdGVUeERlc2NyaXB0b3IocEFkLCBwVHhELCBUUlVFLCBGSUZPX01HTVQpOwotCXBUeEQtPkxhc3RTZWMwID0gMTsKLQlwVHhELT5MYXN0U2VjMSA9IDE7Ci0JcFR4RC0+RE1BRE9ORSA9IDA7Ci0JcFR4RC0+U0RMZW4xID0gMDsKLQlwVHhELT5TRFB0cjAgPQotCSAgICBQQ0lfTUFQX1NJTkdMRShwQWQsIHBTcmNCdWZWQSwgU3JjQnVmTGVuLCAwLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQlwVHhELT5TRExlbjAgPSBTcmNCdWZMZW47Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0vKglEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiTUxNRUhhcmRUcmFuc21pdFxuIikpOwotCWZvciAoaSA9IDA7IGkgPCAoVFhXSV9TSVpFKzI0KTsgaSsrKQotCXsKLQotCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiJXg6IiwgKihwU3JjQnVmVkEraSkpKTsKLQkJaWYgKCBpJTQgPT0gMykKLQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCIgOjogIikpOwotCQlpZiAoIGklMTYgPT0gMTUpCi0JCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiXG4gICAgICAiKSk7Ci0JfQotCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCJcbiAgICAgICIpKTsqLwotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi0JcEFkLT5SYWxpbmtDb3VudGVycy5LaWNrVHhDb3VudCsrOwotCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhEb25lQ291bnQrKzsKLQotCS8qIEluY3JlYXNlIFRYX0NUWF9JRFgsIGJ1dCB3cml0ZSB0byByZWdpc3RlciBsYXRlci4gKi8KLQlJTkNfUklOR19JTkRFWChwQWQtPk1nbXRSaW5nLlR4Q3B1SWR4LCBNR01UX1JJTkdfU0laRSk7Ci0KLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9NR01UQ1RYX0lEWCwgcEFkLT5NZ210UmluZy5UeENwdUlkeCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JCUNoZWNrIFJ4IGRlc2NyaXB0b3IsIHJldHVybiBORElTX1NUQVRVU19GQUlMVVJFIGlmIGFueSBlcnJvciBkb3VuZAotCi0JQXJndW1lbnRzOgotCQlwUnhECQlQb2ludGVyIHRvIHRoZSBSeCBkZXNjcmlwdG9yCi0KLQlSZXR1cm4gVmFsdWU6Ci0JCU5ESVNfU1RBVFVTX1NVQ0NFU1MJTm8gZXJyCi0JCU5ESVNfU1RBVFVTX0ZBSUxVUkUJRXJyb3IKLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi1pbnQgUlRNUENoZWNrUnhFcnJvcihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgIHN0cnVjdCBydF9oZWFkZXJfODAyXzExICogcEhlYWRlciwKLQkJCSAgICAgc3RydWN0IHJ0X3J4d2kgKiBwUnhXSSwgSU4gUFJUMjhYWF9SWERfU1RSVUMgcFJ4RCkKLXsKLQlzdHJ1Y3QgcnRfY2lwaGVyX2tleSAqcFdwYUtleTsKLQlpbnQgZEJtOwotCi0JLyogUGh5IGVycm9ycyAmIENSQyBlcnJvcnMgKi8KLQlpZiAoIC8qKHBSeEQtPlBoeUVycikgfHwgKi8gKHBSeEQtPkNyYykpIHsKLQkJLyogQ2hlY2sgUlNTSSBmb3IgTm9pc2UgSGlzdCBzdGF0aXN0aWMgY29sbGVjdGlvbi4gKi8KLQkJZEJtID0gKGludCkocFJ4V0ktPlJTU0kwKSAtIHBBZC0+QmJwUnNzaVRvRGJtRGVsdGE7Ci0JCWlmIChkQm0gPD0gLTg3KQotCQkJcEFkLT5TdGFDZmcuUlBJRGVuc2l0eVswXSArPSAxOwotCQllbHNlIGlmIChkQm0gPD0gLTgyKQotCQkJcEFkLT5TdGFDZmcuUlBJRGVuc2l0eVsxXSArPSAxOwotCQllbHNlIGlmIChkQm0gPD0gLTc3KQotCQkJcEFkLT5TdGFDZmcuUlBJRGVuc2l0eVsyXSArPSAxOwotCQllbHNlIGlmIChkQm0gPD0gLTcyKQotCQkJcEFkLT5TdGFDZmcuUlBJRGVuc2l0eVszXSArPSAxOwotCQllbHNlIGlmIChkQm0gPD0gLTY3KQotCQkJcEFkLT5TdGFDZmcuUlBJRGVuc2l0eVs0XSArPSAxOwotCQllbHNlIGlmIChkQm0gPD0gLTYyKQotCQkJcEFkLT5TdGFDZmcuUlBJRGVuc2l0eVs1XSArPSAxOwotCQllbHNlIGlmIChkQm0gPD0gLTU3KQotCQkJcEFkLT5TdGFDZmcuUlBJRGVuc2l0eVs2XSArPSAxOwotCQllbHNlIGlmIChkQm0gPiAtNTcpCi0JCQlwQWQtPlN0YUNmZy5SUElEZW5zaXR5WzddICs9IDE7Ci0KLQkJcmV0dXJuIChORElTX1NUQVRVU19GQUlMVVJFKTsKLQl9Ci0JLyogQWRkIFJ4IHNpemUgdG8gY2hhbm5lbCBsb2FkIGNvdW50ZXIsIHdlIHNob3VsZCBpZ25vcmUgZXJyb3IgY291bnRzICovCi0JcEFkLT5TdGFDZmcuQ0xCdXN5Qnl0ZXMgKz0gKHBSeEQtPlNETDAgKyAxNCk7Ci0KLQkvKiBEcm9wIFRvRHMgcHJvbWlzY3VvdXMgZnJhbWUsIGl0IGlzIG9wZW5lZCBkdWUgdG8gQ0NYIDIgY2hhbm5lbCBsb2FkIHN0YXRpc3RpY3MgKi8KLQlpZiAocEhlYWRlciAhPSBOVUxMKSB7Ci0JCWlmIChwSGVhZGVyLT5GQy5Ub0RzKSB7Ci0JCQlyZXR1cm4gKE5ESVNfU1RBVFVTX0ZBSUxVUkUpOwotCQl9Ci0JfQotCS8qIERyb3Agbm90IFUyTSBmcmFtZXMsIGNhbid0IGRyb3AgaGVyZSBiZWNhdXNlIHdlIHdpbGwgZHJvcCBiZWFjb24gaW4gdGhpcyBjYXNlICovCi0JLyogSSBhbSBraW5kIG9mIGRvdWJ0aW5nIHRoZSBVMk0gYml0IG9wZXJhdGlvbiAqLwotCS8qIGlmIChwUnhELT5VMk0gPT0gMCkgKi8KLQkvKiAgICAgIHJldHVybihORElTX1NUQVRVU19GQUlMVVJFKTsgKi8KLQotCS8qIGRyb3AgZGVjeXB0aW9uIGZhaWwgZnJhbWUgKi8KLQlpZiAocFJ4RC0+Q2lwaGVyRXJyKSB7Ci0JCWlmIChwUnhELT5DaXBoZXJFcnIgPT0gMikgewotCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAgICAgKCJwUnhEIEVSUk9SOiBJQ1Ygb2sgYnV0IE1JQ0VyciAiKSk7Ci0JCX0gZWxzZSBpZiAocFJ4RC0+Q2lwaGVyRXJyID09IDEpIHsKLQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCJwUnhEIEVSUk9SOiBJQ1YgRXJyICIpKTsKLQkJfSBlbHNlIGlmIChwUnhELT5DaXBoZXJFcnIgPT0gMykKLQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwKLQkJCQkgICAgICgicFJ4RCBFUlJPUjogS2V5IG5vdCB2YWxpZCAiKSk7Ci0KLQkJaWYgKCgocFJ4RC0+Q2lwaGVyRXJyICYgMSkgPT0gMSkKLQkJICAgICYmIHBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50ICYmIElORlJBX09OKHBBZCkpCi0JCQlSVE1QU2VuZFdpcmVsZXNzRXZlbnQocEFkLCBJV19JQ1ZfRVJST1JfRVZFTlRfRkxBRywKLQkJCQkJICAgICAgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS4KLQkJCQkJICAgICAgQWRkciwgQlNTMCwgMCk7Ci0KLQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLAotCQkJICAgICAoIiAlZCAobGVuPSVkLCBNY2FzdD0lZCwgTXlCc3M9JWQsIFdjaWQ9JWQsIEtleUlkPSVkKVxuIiwKLQkJCSAgICAgIHBSeEQtPkNpcGhlckVyciwgcFJ4RC0+U0RMMCwKLQkJCSAgICAgIHBSeEQtPk1jYXN0IHwgcFJ4RC0+QmNhc3QsIHBSeEQtPk15QnNzLAotCQkJICAgICAgcFJ4V0ktPldpcmVsZXNzQ2xpSUQsCi0vKiAgICAgICAgICAgICAgICAgICAgICBDaXBoZXJOYW1lW3BSeEQtPkNpcGhlckFsZ10sICovCi0JCQkgICAgICBwUnhXSS0+S2V5SW5kZXgpKTsKLQotCQkvKiAqLwotCQkvKiBNSUMgRXJyb3IgKi8KLQkJLyogKi8KLQkJaWYgKHBSeEQtPkNpcGhlckVyciA9PSAyKSB7Ci0JCQlwV3BhS2V5ID0gJnBBZC0+U2hhcmVkS2V5W0JTUzBdW3BSeFdJLT5LZXlJbmRleF07Ci0JCQlpZiAocEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQKQotCQkJCVdwYVNlbmRNaWNGYWlsdXJlVG9XcGFTdXBwbGljYW50KHBBZCwKLQkJCQkJCQkJIChwV3BhS2V5LT4KLQkJCQkJCQkJICBUeXBlID09Ci0JCQkJCQkJCSAgUEFJUldJU0VLRVkpID8KLQkJCQkJCQkJIFRSVUUgOiBGQUxTRSk7Ci0JCQllbHNlCi0JCQkJUlRNUFJlcG9ydE1pY0Vycm9yKHBBZCwgcFdwYUtleSk7Ci0KLQkJCWlmICgoKHBSeEQtPkNpcGhlckVyciAmIDIpID09IDIpCi0JCQkgICAgJiYgcEFkLT5Db21tb25DZmcuYldpcmVsZXNzRXZlbnQgJiYgSU5GUkFfT04ocEFkKSkKLQkJCQlSVE1QU2VuZFdpcmVsZXNzRXZlbnQocEFkLAotCQkJCQkJICAgICAgSVdfTUlDX0VSUk9SX0VWRU5UX0ZMQUcsCi0JCQkJCQkgICAgICBwQWQtPk1hY1RhYi4KLQkJCQkJCSAgICAgIENvbnRlbnRbQlNTSURfV0NJRF0uQWRkciwKLQkJCQkJCSAgICAgIEJTUzAsIDApOwotCi0JCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICgiUnggTUlDIFZhbHVlIGVycm9yXG4iKSk7Ci0JCX0KLQotCQlpZiAocEhlYWRlciA9PSBOVUxMKQotCQkJcmV0dXJuIChORElTX1NUQVRVU19TVUNDRVNTKTsKLQkJLyppZiAoKHBSeEQtPkNpcGhlckFsZyA9PSBDSVBIRVJfQUVTKSAmJgotCQkgICAocEhlYWRlci0+U2VxdWVuY2UgPT0gcEFkLT5GcmFnRnJhbWUuU2VxdWVuY2UpKQotCQkgICB7Ci0JCSAgIC8vCi0JCSAgIC8vIEFjY2VwdGFibGUgc2luY2UgdGhlIEZpcnN0IEZyYWdGcmFtZSBubyBDaXBoZXJFcnIgcHJvYmxlbS4KLQkJICAgLy8KLQkJICAgcmV0dXJuKE5ESVNfU1RBVFVTX1NVQ0NFU1MpOwotCQkgICB9ICovCi0KLQkJcmV0dXJuIChORElTX1NUQVRVU19GQUlMVVJFKTsKLQl9Ci0KLQlyZXR1cm4gKE5ESVNfU1RBVFVTX1NVQ0NFU1MpOwotfQotCi1CT09MRUFOIFJUTVBGcmVlVFhEVXBvblR4RG1hRG9uZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHU4IFF1ZUlkeCkKLXsKLQlzdHJ1Y3QgcnRfcnRtcF90eF9yaW5nICpwVHhSaW5nOwotCXN0cnVjdCBydF90eGQgKiBwVHhEOwotCXZvaWQgKnBQYWNrZXQ7Ci0JdTggRlJFRSA9IDA7Ci0Jc3RydWN0IHJ0X3R4ZCBUeEQsICpwT3JpVHhEOwotCS8qdW5zaWduZWQgbG9uZyAgICAgICAgIElycUZsYWdzOyAqLwotCUJPT0xFQU4gYlJlc2NoZWR1bGUgPSBGQUxTRTsKLQotCUFTU0VSVChRdWVJZHggPCBOVU1fT0ZfVFhfUklORyk7Ci0JcFR4UmluZyA9ICZwQWQtPlR4UmluZ1tRdWVJZHhdOwotCi0JUlRNUF9JT19SRUFEMzIocEFkLCBUWF9EVFhfSURYMCArIFF1ZUlkeCAqIFJJTkdSRUdfRElGRiwKLQkJICAgICAgICZwVHhSaW5nLT5UeERtYUlkeCk7Ci0Jd2hpbGUgKHBUeFJpbmctPlR4U3dGcmVlSWR4ICE9IHBUeFJpbmctPlR4RG1hSWR4KSB7Ci0vKiAgICAgICAgICAgICAgUlRNUF9JUlFfTE9DSygmcEFkLT5pcnFfbG9jaywgSXJxRmxhZ3MpOyAqLwotCi0JCS8qIHN0YXRpYyByYXRlIGFsc28gbmVlZCBOSUNVcGRhdGVGaWZvU3RhQ291bnRlcnMoKSBmdW5jdGlvbi4gKi8KLQkJLyppZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19UWF9SQVRFX1NXSVRDSF9FTkFCTEVEKSkgKi8KLQkJTklDVXBkYXRlRmlmb1N0YUNvdW50ZXJzKHBBZCk7Ci0KLQkJLyogTm90ZSA6IElmIChwQWQtPmF0ZS5iUUFUeFN0YXJ0ID09IFRSVUUpLCB3ZSB3aWxsIG5ldmVyIHJlYWNoIGhlcmUuICovCi0JCUZSRUUrKzsKLQkJcFR4RCA9Ci0JCSAgICAoc3RydWN0IHJ0X3R4ZCAqKSAocFR4UmluZy0+Q2VsbFtwVHhSaW5nLT5UeFN3RnJlZUlkeF0uQWxsb2NWYSk7Ci0JCXBPcmlUeEQgPSBwVHhEOwotCQlOZGlzTW92ZU1lbW9yeSgmVHhELCBwVHhELCBzaXplb2Yoc3RydWN0IHJ0X3R4ZCkpOwotCQlwVHhEID0gJlR4RDsKLQotCQlwVHhELT5ETUFET05FID0gMDsKLQotCQl7Ci0JCQlwUGFja2V0ID0KLQkJCSAgICBwVHhSaW5nLT5DZWxsW3BUeFJpbmctPlR4U3dGcmVlSWR4XS5wTmRpc1BhY2tldDsKLQkJCWlmIChwUGFja2V0KSB7Ci0JCQkJUENJX1VOTUFQX1NJTkdMRShwQWQsIHBUeEQtPlNEUHRyMSwKLQkJCQkJCSBwVHhELT5TRExlbjEsCi0JCQkJCQkgUENJX0RNQV9UT0RFVklDRSk7Ci0JCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBQYWNrZXQsCi0JCQkJCQkgICAgTkRJU19TVEFUVVNfU1VDQ0VTUyk7Ci0JCQl9Ci0JCQkvKkFsd2F5cyBhc3NpZ24gcE5kaXNQYWNrZXQgYXMgTlVMTCBhZnRlciBjbGVhciAqLwotCQkJcFR4UmluZy0+Q2VsbFtwVHhSaW5nLT5UeFN3RnJlZUlkeF0ucE5kaXNQYWNrZXQgPSBOVUxMOwotCi0JCQlwUGFja2V0ID0KLQkJCSAgICBwVHhSaW5nLT5DZWxsW3BUeFJpbmctPlR4U3dGcmVlSWR4XS5wTmV4dE5kaXNQYWNrZXQ7Ci0KLQkJCUFTU0VSVChwUGFja2V0ID09IE5VTEwpOwotCQkJaWYgKHBQYWNrZXQpIHsKLQkJCQlQQ0lfVU5NQVBfU0lOR0xFKHBBZCwgcFR4RC0+U0RQdHIxLAotCQkJCQkJIHBUeEQtPlNETGVuMSwKLQkJCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFBhY2tldCwKLQkJCQkJCSAgICBORElTX1NUQVRVU19TVUNDRVNTKTsKLQkJCX0KLQkJCS8qQWx3YXlzIGFzc2lnbiBwTmV4dE5kaXNQYWNrZXQgYXMgTlVMTCBhZnRlciBjbGVhciAqLwotCQkJcFR4UmluZy0+Q2VsbFtwVHhSaW5nLT5UeFN3RnJlZUlkeF0ucE5leHROZGlzUGFja2V0ID0KLQkJCSAgICBOVUxMOwotCQl9Ci0KLQkJcEFkLT5SYWxpbmtDb3VudGVycy5UcmFuc21pdHRlZEJ5dGVDb3VudCArPQotCQkgICAgKHBUeEQtPlNETGVuMSArIHBUeEQtPlNETGVuMCk7Ci0JCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjRG1hRG9uZUNvdW50W1F1ZUlkeF0rKzsKLQkJSU5DX1JJTkdfSU5ERVgocFR4UmluZy0+VHhTd0ZyZWVJZHgsIFRYX1JJTkdfU0laRSk7Ci0JCS8qIGdldCB0eF90ZHhfaWR4IGFnYWluICovCi0JCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfRFRYX0lEWDAgKyBRdWVJZHggKiBSSU5HUkVHX0RJRkYsCi0JCQkgICAgICAgJnBUeFJpbmctPlR4RG1hSWR4KTsKLQkJTmRpc01vdmVNZW1vcnkocE9yaVR4RCwgcFR4RCwgc2l6ZW9mKHN0cnVjdCBydF90eGQpKTsKLQotLyogICAgICAgICBSVE1QX0lSUV9VTkxPQ0soJnBBZC0+aXJxX2xvY2ssIElycUZsYWdzKTsgKi8KLQl9Ci0KLQlyZXR1cm4gYlJlc2NoZWR1bGU7Ci0KLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JCVByb2Nlc3MgVFggUmluZ3MgRE1BIERvbmUgaW50ZXJydXB0LCBydW5uaW5nIGluIERQQyBsZXZlbAotCi0JQXJndW1lbnRzOgotCQlBZGFwdGVyCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCi0KLQlSZXR1cm4gVmFsdWU6Ci0JCU5vbmUKLQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotQk9PTEVBTiBSVE1QSGFuZGxlVHhSaW5nRG1hRG9uZUludGVycnVwdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJCSBJTlRfU09VUkNFX0NTUl9TVFJVQyBUeFJpbmdCaXRtYXApCi17Ci0vKiAgICAgIHU4ICAgICAgICAgICAgICAgICAgIENvdW50ID0gMDsgKi8KLQl1bnNpZ25lZCBsb25nIElycUZsYWdzOwotCUJPT0xFQU4gYlJlc2NoZWR1bGUgPSBGQUxTRTsKLQotCS8qIE1ha2Ugc3VyZSBUeCByaW5nIHJlc291cmNlIHdvbid0IGJlIHVzZWQgYnkgb3RoZXIgdGhyZWFkcyAqLwotCS8qTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5UeFJpbmdMb2NrKTsgKi8KLQotCVJUTVBfSVJRX0xPQ0soJnBBZC0+aXJxX2xvY2ssIElycUZsYWdzKTsKLQotCWlmIChUeFJpbmdCaXRtYXAuZmllbGQuQWMwRG1hRG9uZSkKLQkJYlJlc2NoZWR1bGUgPSBSVE1QRnJlZVRYRFVwb25UeERtYURvbmUocEFkLCBRSURfQUNfQkUpOwotCi0JaWYgKFR4UmluZ0JpdG1hcC5maWVsZC5BYzNEbWFEb25lKQotCQliUmVzY2hlZHVsZSB8PSBSVE1QRnJlZVRYRFVwb25UeERtYURvbmUocEFkLCBRSURfQUNfVk8pOwotCi0JaWYgKFR4UmluZ0JpdG1hcC5maWVsZC5BYzJEbWFEb25lKQotCQliUmVzY2hlZHVsZSB8PSBSVE1QRnJlZVRYRFVwb25UeERtYURvbmUocEFkLCBRSURfQUNfVkkpOwotCi0JaWYgKFR4UmluZ0JpdG1hcC5maWVsZC5BYzFEbWFEb25lKQotCQliUmVzY2hlZHVsZSB8PSBSVE1QRnJlZVRYRFVwb25UeERtYURvbmUocEFkLCBRSURfQUNfQkspOwotCi0JLyogTWFrZSBzdXJlIHRvIHJlbGVhc2UgVHggcmluZyByZXNvdXJjZSAqLwotCS8qTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5UeFJpbmdMb2NrKTsgKi8KLQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+aXJxX2xvY2ssIElycUZsYWdzKTsKLQotCS8qIERlcXVldWUgb3V0Z29pbmcgZnJhbWVzIGZyb20gVHhTd1F1ZXVlW10gYW5kIHByb2Nlc3MgaXQgKi8KLQlSVE1QRGVRdWV1ZVBhY2tldChwQWQsIEZBTFNFLCBOVU1fT0ZfVFhfUklORywgTUFYX1RYX1BST0NFU1MpOwotCi0JcmV0dXJuIGJSZXNjaGVkdWxlOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQkJUHJvY2VzcyBNR01UIHJpbmcgRE1BIGRvbmUgaW50ZXJydXB0LCBydW5uaW5nIGluIERQQyBsZXZlbAotCi0JQXJndW1lbnRzOgotCQlwQWQJUG9pbnRlciB0byBvdXIgYWRhcHRlcgotCi0JUmV0dXJuIFZhbHVlOgotCQlOb25lCi0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFJUTVBIYW5kbGVNZ210UmluZ0RtYURvbmVJbnRlcnJ1cHQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCXN0cnVjdCBydF90eGQgKiBwVHhEOwotCXZvaWQgKnBQYWNrZXQ7Ci0vKiAgICAgIGludCAgICAgICAgICAgICAgaTsgKi8KLQl1OCBGUkVFID0gMDsKLQlzdHJ1Y3QgcnRfcnRtcF9tZ210X3JpbmcgKnBNZ210UmluZyA9ICZwQWQtPk1nbXRSaW5nOwotCi0JTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5NZ210UmluZ0xvY2spOwotCi0JUlRNUF9JT19SRUFEMzIocEFkLCBUWF9NR01URFRYX0lEWCwgJnBNZ210UmluZy0+VHhEbWFJZHgpOwotCXdoaWxlIChwTWdtdFJpbmctPlR4U3dGcmVlSWR4ICE9IHBNZ210UmluZy0+VHhEbWFJZHgpIHsKLQkJRlJFRSsrOwotCQlwVHhEID0KLQkJICAgIChzdHJ1Y3QgcnRfdHhkICopIChwTWdtdFJpbmctPkNlbGxbcEFkLT5NZ210UmluZy5UeFN3RnJlZUlkeF0uCi0JCQkJICBBbGxvY1ZhKTsKLQkJcFR4RC0+RE1BRE9ORSA9IDA7Ci0JCXBQYWNrZXQgPSBwTWdtdFJpbmctPkNlbGxbcE1nbXRSaW5nLT5UeFN3RnJlZUlkeF0ucE5kaXNQYWNrZXQ7Ci0KLQkJaWYgKHBQYWNrZXQpIHsKLQkJCVBDSV9VTk1BUF9TSU5HTEUocEFkLCBwVHhELT5TRFB0cjAsIHBUeEQtPlNETGVuMCwKLQkJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBQYWNrZXQsIE5ESVNfU1RBVFVTX1NVQ0NFU1MpOwotCQl9Ci0JCXBNZ210UmluZy0+Q2VsbFtwTWdtdFJpbmctPlR4U3dGcmVlSWR4XS5wTmRpc1BhY2tldCA9IE5VTEw7Ci0KLQkJcFBhY2tldCA9Ci0JCSAgICBwTWdtdFJpbmctPkNlbGxbcE1nbXRSaW5nLT5UeFN3RnJlZUlkeF0ucE5leHROZGlzUGFja2V0OwotCQlpZiAocFBhY2tldCkgewotCQkJUENJX1VOTUFQX1NJTkdMRShwQWQsIHBUeEQtPlNEUHRyMSwgcFR4RC0+U0RMZW4xLAotCQkJCQkgUENJX0RNQV9UT0RFVklDRSk7Ci0JCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFBhY2tldCwgTkRJU19TVEFUVVNfU1VDQ0VTUyk7Ci0JCX0KLQkJcE1nbXRSaW5nLT5DZWxsW3BNZ210UmluZy0+VHhTd0ZyZWVJZHhdLnBOZXh0TmRpc1BhY2tldCA9IE5VTEw7Ci0JCUlOQ19SSU5HX0lOREVYKHBNZ210UmluZy0+VHhTd0ZyZWVJZHgsIE1HTVRfUklOR19TSVpFKTsKLQotCX0KLQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPk1nbXRSaW5nTG9jayk7Ci0KLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JQXJndW1lbnRzOgotCQlBZGFwdGVyCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyLiBEZXF1ZXVlIGFsbCBwb3dlciBzYWZlIGRlbGF5ZWQgYnJhb2RjYXN0IGZyYW1lcyBhZnRlciBiZWFjb24uCi0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgUlRNUEhhbmRsZVRCVFRJbnRlcnJ1cHQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCXsKLQkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSkpIHsKLQkJfQotCX0KLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JQXJndW1lbnRzOgotCQlwQWQJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIuIFJld3JpdGUgYmVhY29uIGNvbnRlbnQgYmVmb3JlIG5leHQgc2VuZC1vdXQuCi0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgUlRNUEhhbmRsZVByZVRCVFRJbnRlcnJ1cHQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCXsKLQkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSkpIHsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAoIlJUTVBIYW5kbGVQcmVUQlRUSW50ZXJydXB0Li4uXG4iKSk7Ci0JCX0KLQl9Ci0KLX0KLQotdm9pZCBSVE1QSGFuZGxlUnhDb2hlcmVudEludGVycnVwdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0JV1BETUFfR0xPX0NGR19TVFJVQyBHbG9DZmc7Ci0KLQlpZiAocEFkID09IE5VTEwpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PT4gcEFkIGlzIE5VTEwsIHJldHVybi5cbiIpKTsKLQkJcmV0dXJuOwotCX0KLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PiBSVE1QSGFuZGxlUnhDb2hlcmVudEludGVycnVwdCBcbiIpKTsKLQotCVJUTVBfSU9fUkVBRDMyKHBBZCwgV1BETUFfR0xPX0NGRywgJkdsb0NmZy53b3JkKTsKLQotCUdsb0NmZy5maWVsZC5FblRYV3JpdGVCYWNrRERPTkUgPSAwOwotCUdsb0NmZy5maWVsZC5FbmFibGVSeERNQSA9IDA7Ci0JR2xvQ2ZnLmZpZWxkLkVuYWJsZVR4RE1BID0gMDsKLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBXUERNQV9HTE9fQ0ZHLCBHbG9DZmcud29yZCk7Ci0KLQlSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfQUNfQkUpOwotCVJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9BQ19CSyk7Ci0JUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0FDX1ZJKTsKLQlSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfQUNfVk8pOwotCVJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9NR01UKTsKLQlSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfUlgpOwotCi0JUlRNUEVuYWJsZVJ4VHgocEFkKTsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjw9PSBSVE1QSGFuZGxlUnhDb2hlcmVudEludGVycnVwdCBcbiIpKTsKLX0KLQotdm9pZCAqR2V0UGFja2V0RnJvbVJ4UmluZyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJIE9VVCBQUlQyOFhYX1JYRF9TVFJVQyBwU2F2ZVJ4RCwKLQkJCQkgT1VUIEJPT0xFQU4gKiBwYlJlc2NoZWR1bGUsCi0JCQkJIElOIHUzMiAqIHBSeFBlbmRpbmcpCi17Ci0Jc3RydWN0IHJ0X3J4ZCAqIHBSeEQ7Ci0Jdm9pZCAqcFJ4UGFja2V0ID0gTlVMTDsKLQl2b2lkICpwTmV3UGFja2V0OwotCXZvaWQgKkFsbG9jVmE7Ci0JZG1hX2FkZHJfdCBBbGxvY1BhOwotCUJPT0xFQU4gYlJlc2NoZWR1bGUgPSBGQUxTRTsKLQlzdHJ1Y3QgcnRfcnRtcF9kbWFjYiAqcFJ4Q2VsbDsKLQotCVJUTVBfU0VNX0xPQ0soJnBBZC0+UnhSaW5nTG9jayk7Ci0KLQlpZiAoKnBSeFBlbmRpbmcgPT0gMCkgewotCQkvKiBHZXQgaG93IG1heSBwYWNrZXRzIGhhZCBiZWVuIHJlY2VpdmVkICovCi0JCVJUTVBfSU9fUkVBRDMyKHBBZCwgUlhfRFJYX0lEWCwgJnBBZC0+UnhSaW5nLlJ4RG1hSWR4KTsKLQotCQlpZiAocEFkLT5SeFJpbmcuUnhTd1JlYWRJZHggPT0gcEFkLT5SeFJpbmcuUnhEbWFJZHgpIHsKLQkJCS8qIG5vIG1vcmUgcnggcGFja2V0cyAqLwotCQkJYlJlc2NoZWR1bGUgPSBGQUxTRTsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCQkvKiBnZXQgcnggcGVuZGluZyBjb3VudCAqLwotCQlpZiAocEFkLT5SeFJpbmcuUnhEbWFJZHggPiBwQWQtPlJ4UmluZy5SeFN3UmVhZElkeCkKLQkJCSpwUnhQZW5kaW5nID0KLQkJCSAgICBwQWQtPlJ4UmluZy5SeERtYUlkeCAtIHBBZC0+UnhSaW5nLlJ4U3dSZWFkSWR4OwotCQllbHNlCi0JCQkqcFJ4UGVuZGluZyA9Ci0JCQkgICAgcEFkLT5SeFJpbmcuUnhEbWFJZHggKyBSWF9SSU5HX1NJWkUgLQotCQkJICAgIHBBZC0+UnhSaW5nLlJ4U3dSZWFkSWR4OwotCi0JfQotCi0JcFJ4Q2VsbCA9ICZwQWQtPlJ4UmluZy5DZWxsW3BBZC0+UnhSaW5nLlJ4U3dSZWFkSWR4XTsKLQotCS8qIFBvaW50IHRvIFJ4IGluZGV4ZWQgcnggcmluZyBkZXNjcmlwdG9yICovCi0JcFJ4RCA9IChzdHJ1Y3QgcnRfcnhkICopIHBSeENlbGwtPkFsbG9jVmE7Ci0KLQlpZiAocFJ4RC0+RERPTkUgPT0gMCkgewotCQkqcFJ4UGVuZGluZyA9IDA7Ci0JCS8qIERNQUluZHggaGFkIGRvbmUgYnV0IERET05FIGJpdCBub3QgcmVhZHkgKi8KLQkJYlJlc2NoZWR1bGUgPSBUUlVFOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JLyogcmV0dXJuIHJ4IGRlc2NyaXB0b3IgKi8KLQlOZGlzTW92ZU1lbW9yeShwU2F2ZVJ4RCwgcFJ4RCwgUlhEX1NJWkUpOwotCi0JcE5ld1BhY2tldCA9Ci0JICAgIFJUTVBfQWxsb2NhdGVSeFBhY2tldEJ1ZmZlcihwQWQsIFJYX0JVRkZFUl9BR0dSRVNJWkUsIEZBTFNFLAotCQkJCQkmQWxsb2NWYSwgJkFsbG9jUGEpOwotCi0JaWYgKHBOZXdQYWNrZXQpIHsKLQkJLyogdW5tYXAgdGhlIHJ4IGJ1ZmZlciAqLwotCQlQQ0lfVU5NQVBfU0lOR0xFKHBBZCwgcFJ4Q2VsbC0+RG1hQnVmLkFsbG9jUGEsCi0JCQkJIHBSeENlbGwtPkRtYUJ1Zi5BbGxvY1NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCXBSeFBhY2tldCA9IHBSeENlbGwtPnBOZGlzUGFja2V0OwotCi0JCXBSeENlbGwtPkRtYUJ1Zi5BbGxvY1NpemUgPSBSWF9CVUZGRVJfQUdHUkVTSVpFOwotCQlwUnhDZWxsLT5wTmRpc1BhY2tldCA9ICh2b2lkICopcE5ld1BhY2tldDsKLQkJcFJ4Q2VsbC0+RG1hQnVmLkFsbG9jVmEgPSBBbGxvY1ZhOwotCQlwUnhDZWxsLT5EbWFCdWYuQWxsb2NQYSA9IEFsbG9jUGE7Ci0JCS8qIHVwZGF0ZSBTRFAwIHRvIG5ldyBidWZmZXIgb2YgcnggcGFja2V0ICovCi0JCXBSeEQtPlNEUDAgPSBBbGxvY1BhOwotCX0gZWxzZSB7Ci0JCS8qREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJObyBSeCBCdWZmZXJcbiIpKTsgKi8KLQkJcFJ4UGFja2V0ID0gTlVMTDsKLQkJYlJlc2NoZWR1bGUgPSBUUlVFOwotCX0KLQotCXBSeEQtPkRET05FID0gMDsKLQotCS8qIGhhZCBoYW5kbGVkIG9uZSByeCBwYWNrZXQgKi8KLQkqcFJ4UGVuZGluZyA9ICpwUnhQZW5kaW5nIC0gMTsKLQotCS8qIHVwZGF0ZSByeCBkZXNjcmlwdG9yIGFuZCBraWNrIHJ4ICovCi0JSU5DX1JJTkdfSU5ERVgocEFkLT5SeFJpbmcuUnhTd1JlYWRJZHgsIFJYX1JJTkdfU0laRSk7Ci0KLQlwQWQtPlJ4UmluZy5SeENwdUlkeCA9Ci0JICAgIChwQWQtPlJ4UmluZy5SeFN3UmVhZElkeCA9PQotCSAgICAgMCkgPyAoUlhfUklOR19TSVpFIC0gMSkgOiAocEFkLT5SeFJpbmcuUnhTd1JlYWRJZHggLSAxKTsKLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBSWF9DUlhfSURYLCBwQWQtPlJ4UmluZy5SeENwdUlkeCk7Ci0KLWRvbmU6Ci0JUlRNUF9TRU1fVU5MT0NLKCZwQWQtPlJ4UmluZ0xvY2spOwotCSpwYlJlc2NoZWR1bGUgPSBiUmVzY2hlZHVsZTsKLQlyZXR1cm4gcFJ4UGFja2V0OwotfQotCi1pbnQgTWxtZUhhcmRUcmFuc21pdFR4UmluZyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJICAgdTggUXVlSWR4LCB2b2lkICpwUGFja2V0KQotewotCXN0cnVjdCBydF9wYWNrZXRfaW5mbyBQYWNrZXRJbmZvOwotCXU4ICpwU3JjQnVmVkE7Ci0JdTMyIFNyY0J1ZkxlbjsKLQlzdHJ1Y3QgcnRfdHhkICogcFR4RDsKLQlzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSAqIHBIZWFkZXJfODAyXzExOwotCUJPT0xFQU4gYkFja1JlcXVpcmVkLCBiSW5zZXJ0VGltZXN0YW1wOwotCXVuc2lnbmVkIGxvbmcgU3JjQnVmUEE7Ci0JLyp1OCAgICAgICAgICAgICAgICAgVHhCdWZJZHg7ICovCi0JdTggTWxtZVJhdGU7Ci0JdW5zaWduZWQgbG9uZyBTd0lkeCA9IHBBZC0+VHhSaW5nW1F1ZUlkeF0uVHhDcHVJZHg7Ci0Jc3RydWN0IHJ0X3R4d2kgKiBwRmlyc3RUeFdJOwotCS8qdW5zaWduZWQgbG9uZyBpOyAqLwotCS8qSFRUUkFOU01JVF9TRVRUSU5HICAgIE1sbWVUcmFuc21pdDsgICAvL1JhdGUgZm9yIHRoaXMgTUdNVCBmcmFtZS4gKi8KLQl1bnNpZ25lZCBsb25nIEZyZWVOdW07Ci0Jc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcE1hY0VudHJ5ID0gTlVMTDsKLQotCVJUTVBfUXVlcnlQYWNrZXRJbmZvKHBQYWNrZXQsICZQYWNrZXRJbmZvLCAmcFNyY0J1ZlZBLCAmU3JjQnVmTGVuKTsKLQotCWlmIChwU3JjQnVmVkEgPT0gTlVMTCkgewotCQkvKiBUaGUgYnVmZmVyIHNob3VsZG4ndCBiZSBOVUxMICovCi0JCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOwotCX0KLQkvKiBNYWtlIHN1cmUgTUdNVCByaW5nIHJlc291cmNlIHdvbid0IGJlIHVzZWQgYnkgb3RoZXIgdGhyZWFkcyAqLwotCS8qTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5UeFJpbmdMb2NrKTsgKi8KLQotCUZyZWVOdW0gPSBHRVRfVFhSSU5HX0ZSRUVOTyhwQWQsIFF1ZUlkeCk7Ci0KLQlpZiAoRnJlZU51bSA9PSAwKSB7Ci0JCS8qTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5UeFJpbmdMb2NrKTsgKi8KLQkJcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7Ci0JfQotCi0JU3dJZHggPSBwQWQtPlR4UmluZ1tRdWVJZHhdLlR4Q3B1SWR4OwotCi0JcFR4RCA9IChzdHJ1Y3QgcnRfdHhkICopIHBBZC0+VHhSaW5nW1F1ZUlkeF0uQ2VsbFtTd0lkeF0uQWxsb2NWYTsKLQotCWlmIChwQWQtPlR4UmluZ1tRdWVJZHhdLkNlbGxbU3dJZHhdLnBOZGlzUGFja2V0KSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX09GRiwgKCJNbG1lSGFyZFRyYW5zbWl0IEVycm9yXG4iKSk7Ci0JCS8qTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5UeFJpbmdMb2NrKTsgKi8KLQkJcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7Ci0JfQotCi0JewotCQkvKiBvdXRnb2luZyBmcmFtZSBhbHdheXMgd2FrZXVwIFBIWSB0byBwcmV2ZW50IGZyYW1lIGxvc3QgKi8KLQkJLyogaWYgKHBBZC0+U3RhQ2ZnLlBzbSA9PSBQV1JfU0FWRSkgKi8KLQkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSkpCi0JCQlBc2ljRm9yY2VXYWtldXAocEFkLCBUUlVFKTsKLQl9Ci0JcEZpcnN0VHhXSSA9IChzdHJ1Y3QgcnRfdHh3aSAqKSBwU3JjQnVmVkE7Ci0KLQlwSGVhZGVyXzgwMl8xMSA9IChzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSAqKSAocFNyY0J1ZlZBICsgVFhXSV9TSVpFKTsKLQlpZiAocEhlYWRlcl84MDJfMTEtPkFkZHIxWzBdICYgMHgwMSkgewotCQlNbG1lUmF0ZSA9IHBBZC0+Q29tbW9uQ2ZnLkJhc2ljTWxtZVJhdGU7Ci0JfSBlbHNlIHsKLQkJTWxtZVJhdGUgPSBwQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZTsKLQl9Ci0KLQlpZiAoKHBIZWFkZXJfODAyXzExLT5GQy5UeXBlID09IEJUWVBFX0RBVEEpICYmCi0JICAgIChwSGVhZGVyXzgwMl8xMS0+RkMuU3ViVHlwZSA9PSBTVUJUWVBFX1FPU19OVUxMKSkgewotCQlwTWFjRW50cnkgPSBNYWNUYWJsZUxvb2t1cChwQWQsIHBIZWFkZXJfODAyXzExLT5BZGRyMSk7Ci0JfQotCS8qIFZlcmlmeSBNbG1lIHJhdGUgZm9yIGEgLyBnIGJhbmRzLiAqLwotCWlmICgocEFkLT5MYXRjaFJmUmVncy5DaGFubmVsID4gMTQpICYmIChNbG1lUmF0ZSA8IFJBVEVfNikpCS8qIDExQSBiYW5kICovCi0JCU1sbWVSYXRlID0gUkFURV82OwotCi0JLyogKi8KLQkvKiBTaG91bGQgbm90IGJlIGhhcmQgY29kZSB0byBzZXQgUHdyTWdtdCB0byAwIChQV1JfQUNUSVZFKSAqLwotCS8qIFNuaWNlIGl0J3MgYmVlbiBzZXQgdG8gMCB3aGlsZSBvbiBNZ3RNYWNIZWFkZXJJbml0ICovCi0JLyogQnkgdGhlIHdheSB0aGlzIHdpbGwgY2F1c2UgZnJhbWUgdG8gYmUgc2VuZCBvbiBQV1JfU0FWRSBmYWlsZWQuICovCi0JLyogKi8KLQkvKiAqLwotCS8qIEluIFdNTS1VQVBTRCwgbWxtZSBmcmFtZSBzaG91bGQgYmUgc2V0IHBzbSBhcyBwb3dlciBzYXZpbmcgYnV0IHByb2JlIHJlcXVlc3QgZnJhbWUgKi8KLQkvKiBEYXRhLU51bGwgcGFja2V0cyBhbHNvIHBhc3MgdGhyb3VnaCBNTVJlcXVlc3QgaW4gUlQyODYwLCBob3dldmVyLCB3ZSBob3BlIGNvbnRyb2wgdGhlIHBzbSBiaXQgdG8gcGFzcyBBUFNEICovCi0JaWYgKHBIZWFkZXJfODAyXzExLT5GQy5UeXBlICE9IEJUWVBFX0RBVEEpIHsKLQkJaWYgKChwSGVhZGVyXzgwMl8xMS0+RkMuU3ViVHlwZSA9PSBTVUJUWVBFX1BST0JFX1JFUSkKLQkJICAgIHx8ICEocEFkLT5Db21tb25DZmcuYkFQU0RDYXBhYmxlCi0JCQkgJiYgcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5iQVBTRENhcGFibGUpKSB7Ci0JCQlwSGVhZGVyXzgwMl8xMS0+RkMuUHdyTWdtdCA9IFBXUl9BQ1RJVkU7Ci0JCX0gZWxzZSB7Ci0JCQlwSGVhZGVyXzgwMl8xMS0+RkMuUHdyTWdtdCA9Ci0JCQkgICAgcEFkLT5Db21tb25DZmcuYkFQU0RGb3JjZVBvd2VyU2F2ZTsKLQkJfQotCX0KLQotCWJJbnNlcnRUaW1lc3RhbXAgPSBGQUxTRTsKLQlpZiAocEhlYWRlcl84MDJfMTEtPkZDLlR5cGUgPT0gQlRZUEVfQ05UTCkJLyogbXVzdCBiZSBQUy1QT0xMICovCi0JewotCQliQWNrUmVxdWlyZWQgPSBGQUxTRTsKLQl9IGVsc2UJCQkvKiBCVFlQRV9NR01UIG9yIEJUWVBFX0RBVEEobXVzdCBiZSBOVUxMIGZyYW1lKSAqLwotCXsKLQkJaWYgKHBIZWFkZXJfODAyXzExLT5BZGRyMVswXSAmIDB4MDEpCS8qIE1VTFRJQ0FTVCwgQlJPQURDQVNUICovCi0JCXsKLQkJCWJBY2tSZXF1aXJlZCA9IEZBTFNFOwotCQkJcEhlYWRlcl84MDJfMTEtPkR1cmF0aW9uID0gMDsKLQkJfSBlbHNlIHsKLQkJCWJBY2tSZXF1aXJlZCA9IFRSVUU7Ci0JCQlwSGVhZGVyXzgwMl8xMS0+RHVyYXRpb24gPQotCQkJICAgIFJUTVBDYWxjRHVyYXRpb24ocEFkLCBNbG1lUmF0ZSwgMTQpOwotCQkJaWYgKHBIZWFkZXJfODAyXzExLT5GQy5TdWJUeXBlID09IFNVQlRZUEVfUFJPQkVfUlNQKSB7Ci0JCQkJYkluc2VydFRpbWVzdGFtcCA9IFRSVUU7Ci0JCQl9Ci0JCX0KLQl9Ci0JcEhlYWRlcl84MDJfMTEtPlNlcXVlbmNlID0gcEFkLT5TZXF1ZW5jZSsrOwotCWlmIChwQWQtPlNlcXVlbmNlID4gMHhmZmYpCi0JCXBBZC0+U2VxdWVuY2UgPSAwOwotCS8qIEJlZm9yZSByYWRhciBkZXRlY3Rpb24gZG9uZSwgbWdtdCBmcmFtZSBjYW4gbm90IGJlIHNlbnQgYnV0IHByb2JlIHJlcSAqLwotCS8qIEJlY2F1c2Ugd2UgbmVlZCB0byB1c2UgcHJvYmUgcmVxIHRvIHRyaWdnZXIgZHJpdmVyIHRvIHNlbmQgcHJvYmUgcmVxIGluIHBhc3NpdmUgc2NhbiAqLwotCWlmICgocEhlYWRlcl84MDJfMTEtPkZDLlN1YlR5cGUgIT0gU1VCVFlQRV9QUk9CRV9SRVEpCi0JICAgICYmIChwQWQtPkNvbW1vbkNmZy5iSUVFRTgwMjExSCA9PSAxKQotCSAgICAmJiAocEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkRNb2RlICE9IFJEX05PUk1BTF9NT0RFKSkgewotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCSAoIk1sbWVIYXJkVHJhbnNtaXQgLS0+IHJhZGFyIGRldGVjdCBub3QgaW4gbm9ybWFsIG1vZGUhXG4iKSk7Ci0JCS8qTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5UeFJpbmdMb2NrKTsgKi8KLQkJcmV0dXJuIChORElTX1NUQVRVU19GQUlMVVJFKTsKLQl9Ci0JLyogKi8KLQkvKiBmaWxsIHNjYXR0ZXItYW5kLWdhdGhlciBidWZmZXIgbGlzdCBpbnRvIFRYRC4gSW50ZXJuYWxseSBjcmVhdGVkIE5ESVMgUEFDS0VUICovCi0JLyogc2hvdWxkIGFsd2F5cyBoYXMgb25seSBvbmUgb2h5c2ljYWwgYnVmZmVyLCBhbmQgdGhlIHdob2xlIGZyYW1lIHNpemUgZXF1YWxzICovCi0JLyogdG8gdGhlIGZpcnN0IHNjYXR0ZXIgYnVmZmVyIHNpemUgKi8KLQkvKiAqLwotCi0JLyogSW5pdGlhbGl6ZSBUWCBEZXNjcmlwdG9yICovCi0JLyogRm9yIGludGVyLWZyYW1lIGdhcCwgdGhlIG51bWJlciBpcyBmb3IgdGhpcyBmcmFtZSBhbmQgbmV4dCBmcmFtZSAqLwotCS8qIEZvciBNTE1FIHJhdGUsIHdlIHdpbGwgZml4IGFzIDJNYiB0byBtYXRjaCBvdGhlciB2ZW5kb3IncyBpbXBsZW1lbnQgKi8KLS8qICAgICAgcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1PREUgPSAxOyAqLwotCi0vKiBtYW5hZ2VtZW50IGZyYW1lIGRvZXNuJ3QgbmVlZCBlbmNyeXB0aW9uLiBzbyB1c2UgUkVTRVJWRURfV0NJRCBubyBtYXR0ZXIgdSBhcmUgc2VuZGluZyB0byBzcGVjaWZpYyB3Y2lkIG9yIG5vdC4gKi8KLQkvKiBPbmx5IGJlYWNvbiB1c2UgTnNlcT1UUlVFLiBTbyBoZXJlIHdlIHVzZSBOc2VxPUZBTFNFLiAqLwotCWlmIChwTWFjRW50cnkgPT0gTlVMTCkgewotCQlSVE1QV3JpdGVUeFdJKHBBZCwgcEZpcnN0VHhXSSwgRkFMU0UsIEZBTFNFLCBiSW5zZXJ0VGltZXN0YW1wLAotCQkJICAgICAgRkFMU0UsIGJBY2tSZXF1aXJlZCwgRkFMU0UsIDAsIFJFU0VSVkVEX1dDSUQsCi0JCQkgICAgICAoU3JjQnVmTGVuIC0gVFhXSV9TSVpFKSwgUElEX01HTVQsIDAsCi0JCQkgICAgICAodTgpcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1DUywKLQkJCSAgICAgIElGU19CQUNLT0ZGLCBGQUxTRSwgJnBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdCk7Ci0JfSBlbHNlIHsKLQkJUlRNUFdyaXRlVHhXSShwQWQsIHBGaXJzdFR4V0ksIEZBTFNFLCBGQUxTRSwKLQkJCSAgICAgIGJJbnNlcnRUaW1lc3RhbXAsIEZBTFNFLCBiQWNrUmVxdWlyZWQsIEZBTFNFLAotCQkJICAgICAgMCwgcE1hY0VudHJ5LT5BaWQsIChTcmNCdWZMZW4gLSBUWFdJX1NJWkUpLAotCQkJICAgICAgcE1hY0VudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTUNTLCAwLAotCQkJICAgICAgKHU4KXBNYWNFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1DUywKLQkJCSAgICAgIElGU19CQUNLT0ZGLCBGQUxTRSwgJnBNYWNFbnRyeS0+TWF4SFRQaHlNb2RlKTsKLQl9Ci0KLQlwQWQtPlR4UmluZ1tRdWVJZHhdLkNlbGxbU3dJZHhdLnBOZGlzUGFja2V0ID0gcFBhY2tldDsKLQlwQWQtPlR4UmluZ1tRdWVJZHhdLkNlbGxbU3dJZHhdLnBOZXh0TmRpc1BhY2tldCA9IE5VTEw7Ci0vKiAgICAgIHBGaXJzdFR4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudCA9IFNyY0J1ZkxlbiAtIFRYV0lfU0laRTsgKi8KLQlTcmNCdWZQQSA9Ci0JICAgIFBDSV9NQVBfU0lOR0xFKHBBZCwgcFNyY0J1ZlZBLCBTcmNCdWZMZW4sIDAsIFBDSV9ETUFfVE9ERVZJQ0UpOwotCi0JUlRNUFdyaXRlVHhEZXNjcmlwdG9yKHBBZCwgcFR4RCwgVFJVRSwgRklGT19FRENBKTsKLQlwVHhELT5MYXN0U2VjMCA9IDE7Ci0JcFR4RC0+TGFzdFNlYzEgPSAxOwotCXBUeEQtPlNETGVuMCA9IFNyY0J1ZkxlbjsKLQlwVHhELT5TRExlbjEgPSAwOwotCXBUeEQtPlNEUHRyMCA9IFNyY0J1ZlBBOwotCXBUeEQtPkRNQURPTkUgPSAwOwotCi0JcEFkLT5SYWxpbmtDb3VudGVycy5LaWNrVHhDb3VudCsrOwotCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhEb25lQ291bnQrKzsKLQotCS8qIEluY3JlYXNlIFRYX0NUWF9JRFgsIGJ1dCB3cml0ZSB0byByZWdpc3RlciBsYXRlci4gKi8KLQlJTkNfUklOR19JTkRFWChwQWQtPlR4UmluZ1tRdWVJZHhdLlR4Q3B1SWR4LCBUWF9SSU5HX1NJWkUpOwotCi0JUlRNUF9JT19XUklURTMyKHBBZCwgVFhfQ1RYX0lEWDAgKyBRdWVJZHggKiAweDEwLAotCQkJcEFkLT5UeFJpbmdbUXVlSWR4XS5UeENwdUlkeCk7Ci0KLQkvKiBNYWtlIHN1cmUgdG8gcmVsZWFzZSBNR01UIHJpbmcgcmVzb3VyY2UgKi8KLS8qICAgICAgTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5UeFJpbmdMb2NrKTsgKi8KLQotCXJldHVybiBORElTX1NUQVRVU19TVUNDRVNTOwotfQotCi1pbnQgTWxtZURhdGFIYXJkVHJhbnNtaXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCSB1OCBRdWVJZHgsIHZvaWQgKnBQYWNrZXQpCi17Ci0JaWYgKChwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5SRE1vZGUgIT0gUkRfTk9STUFMX01PREUpCi0JICAgICkgewotCQlyZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKLQl9Ci0KLQlyZXR1cm4gTWxtZUhhcmRUcmFuc21pdFR4UmluZyhwQWQsIFF1ZUlkeCwgcFBhY2tldCk7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCQlDYWxjdWxhdGVzIHRoZSBkdXJhdGlvbiB3aGljaCBpcyByZXF1aXJlZCB0byB0cmFuc21pdCBvdXQgZnJhbWVzCi0Jd2l0aCBnaXZlbiBzaXplIGFuZCBzcGVjaWZpZWQgcmF0ZS4KLQotCUFyZ3VtZW50czoKLQkJcFR4RAkJUG9pbnRlciB0byB0cmFuc21pdCBkZXNjcmlwdG9yCi0JCUFjawkJU2V0dGluZyBmb3IgQWNrIHJlcXVpcmVtZW50IGJpdAotCQlGcmFnbWVudAlTZXR0aW5nIGZvciBGcmFnbWVudCBiaXQKLQkJUmV0cnlNb2RlCVNldHRpbmcgZm9yIHJldHJ5IG1vZGUKLQkJSWZzCQlTZXR0aW5nIGZvciBJRlMgZ2FwCi0JCVJhdGUJCVNldHRpbmcgZm9yIHRyYW5zbWl0IHJhdGUKLQkJU2VydmljZQkJU2V0dGluZyBmb3Igc2VydmljZQotCQlMZW5ndGgJCUZyYW1lIGxlbmd0aAotCQlUeFByZWFtYmxlCVNob3J0IG9yIExvbmcgcHJlYW1ibGUgd2hlbiB1c2luZyBDQ0sgcmF0ZXMKLQkJUXVlSWR4IC0gMC0zLCBhY2NvcmRpbmcgdG8gODAyLjExZS9kNC40IEp1bmUvMjAwMwotCi0JUmV0dXJuIFZhbHVlOgotCQlOb25lCi0KLQlJUlFMID0gUEFTU0lWRV9MRVZFTAotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBSVE1QV3JpdGVUeERlc2NyaXB0b3Ioc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgc3RydWN0IHJ0X3R4ZCAqIHBUeEQsCi0JCQkgICBJTiBCT09MRUFOIGJXSVYsIHU4IFF1ZXVlU0VMKQotewotCS8qICovCi0JLyogQWx3YXlzIHVzZSBMb25nIHByZWFtYmxlIGJlZm9yZSB2ZXJpZmlhdGlvbiBzaG9ydCBwcmVhbWJsZSBmdW5jdGlvbmFsaXR5IHdvcmtzIHdlbGwuICovCi0JLyogVG9kbzogcmVtb3ZlIHRoZSBmb2xsb3dpbmcgbGluZSBpZiBzaG9ydCBwcmVhbWJsZSBmdW5jdGlvbmFsaXR5IHdvcmtzICovCi0JLyogKi8KLQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19TSE9SVF9QUkVBTUJMRV9JTlVTRUQpOwotCi0JcFR4RC0+V0lWID0gKGJXSVYpID8gMSA6IDA7Ci0JcFR4RC0+UVNFTCA9IChRdWV1ZVNFTCk7Ci0JLypSVDI4NjBjPz8gIGZpeGVkIHVzaW5nIEVEQ0EgcXVldWUgZm9yIHRlc3QuLi4gIFdlIGRvdWJ0IFF1ZXVlMSBoYXMgcHJvYmxlbS4gIDIwMDYtMDktMjYgSmFuICovCi0JLypwVHhELT5RU0VMPSBGSUZPX0VEQ0E7ICovCi0JcFR4RC0+RE1BRE9ORSA9IDA7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YV91c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9kYXRhX3VzYi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2E2MmZhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9kYXRhX3VzYi5jCisrKyAvZGV2L251bGwKQEAgLTEsOTUxICswLDAgQEAKLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUmFsaW5rIFRlY2ggSW5jLgotICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAotICogSHNpbmNodSBDb3VudHkgMzAyLAotICogVGFpd2FuLCBSLk8uQy4KLSAqCi0gKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKi8KLQotLyoKLSAgIEFsbCBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIG11c3QgYmUgVVNCLWRlcGVuZGVkLCBvciB5b3Ugc2hvdWxkIG91dCB5b3VyIGZ1bmN0aW9uCi0JaW4gb3RoZXIgZmlsZXMuCi0KLSovCi0KLSNpZmRlZiBSVE1QX01BQ19VU0IKLQotI2luY2x1ZGUJIi4uL3J0X2NvbmZpZy5oIgotCi0vKgotCVdlIGNhbiBkbyBjb3B5IHRoZSBmcmFtZSBpbnRvIHBUeENvbnRleHQgd2hlbiBtYXRjaCBmb2xsb3dpbmcgY29uZGl0aW9ucy4KLQkJPT4KLQkJPT4KLQkJPT4KLSovCi1zdGF0aWMgaW5saW5lIGludCBSdG1wVVNCQ2FuRG9Xcml0ZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJCSAgICB1OCBRdWVJZHgsCi0JCQkJCSAgICBzdHJ1Y3QgcnRfaHRfdHhfY29udGV4dCAqcEhUVFhDb250ZXh0KQotewotCWludCBjYW5Xcml0ZSA9IE5ESVNfU1RBVFVTX1JFU09VUkNFUzsKLQotCWlmICgoKHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbikgPAotCSAgICAgcEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uKQotCSAgICAmJiAocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uICsgTE9DQUxfVFhCVUZfU0laRSkgPgotCSAgICBwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24pIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiUnRtcFVTQkNhbkRvV3JpdGUgYzEhXG4iKSk7Ci0JCVJUVVNCX1NFVF9CVUxLX0ZMQUcocEFkLAotCQkJCSAgICAoZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMIDw8IFF1ZUlkeCkpOwotCX0gZWxzZSBpZiAoKHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiA9PSA4KQotCQkgICAmJiAocEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uIDwgTE9DQUxfVFhCVUZfU0laRSkpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiUnRtcFVTQkNhbkRvV3JpdGUgYzIhXG4iKSk7Ci0JCVJUVVNCX1NFVF9CVUxLX0ZMQUcocEFkLAotCQkJCSAgICAoZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMIDw8IFF1ZUlkeCkpOwotCX0gZWxzZSBpZiAocEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZyA9PSBUUlVFKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlJ0bXBVU0JDYW5Eb1dyaXRlIGMzIVxuIikpOwotCX0gZWxzZSB7Ci0JCWNhbldyaXRlID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKLQl9Ci0KLQlyZXR1cm4gY2FuV3JpdGU7Ci19Ci0KLXUxNiBSdG1wVVNCX1dyaXRlU3ViVHhSZXNvdXJjZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJICBzdHJ1Y3QgcnRfdHhfYmxrICpwVHhCbGssCi0JCQkJICBJTiBCT09MRUFOIGJJc0xhc3QsIHUxNiAqIEZyZWVOdW1iZXIpCi17Ci0KLQkvKiBEdW1teSBmdW5jdGlvbi4gU2hvdWxkIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gKi8KLQlyZXR1cm4gMDsKLQotfQotCi11MTYgUnRtcFVTQl9Xcml0ZUZyYWdUeFJlc291cmNlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkgICBzdHJ1Y3QgcnRfdHhfYmxrICpwVHhCbGssCi0JCQkJICAgdTggZnJhZ051bSwgdTE2ICogRnJlZU51bWJlcikKLXsKLQlzdHJ1Y3QgcnRfaHRfdHhfY29udGV4dCAqcEhUVFhDb250ZXh0OwotCXUxNiBod0hkckxlbjsJLyogVGhlIGh3SGRyTGVuIGNvbnNpc3Qgb2YgODAyLjExIGhlYWRlciBsZW5ndGggcGx1cyB0aGUgaGVhZGVyIHBhZGRpbmcgbGVuZ3RoLiAqLwotCXUzMiBmaWxsT2Zmc2V0OwotCXN0cnVjdCBydF90eGluZm8gKnBUeEluZm87Ci0Jc3RydWN0IHJ0X3R4d2kgKnBUeFdJOwotCXU4ICpwV2lyZWxlc3NQYWNrZXQgPSBOVUxMOwotCXU4IFF1ZUlkeDsKLQlpbnQgU3RhdHVzOwotCXVuc2lnbmVkIGxvbmcgSXJxRmxhZ3M7Ci0JdTMyIFVTQkRNQXBrdExlbiA9IDAsIERNQUhkckxlbiwgcGFkZGluZzsKLQlCT09MRUFOIFR4UUxhc3RSb3VuZCA9IEZBTFNFOwotCi0JLyogKi8KLQkvKiBnZXQgVHggUmluZyBSZXNvdXJjZSAmIERtYSBCdWZmZXIgYWRkcmVzcyAqLwotCS8qICovCi0JUXVlSWR4ID0gcFR4QmxrLT5RdWVJZHg7Ci0JcEhUVFhDb250ZXh0ID0gJnBBZC0+VHhDb250ZXh0W1F1ZUlkeF07Ci0KLQlSVE1QX0lSUV9MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tRdWVJZHhdLCBJcnFGbGFncyk7Ci0KLQlwSFRUWENvbnRleHQgPSAmcEFkLT5UeENvbnRleHRbUXVlSWR4XTsKLQlmaWxsT2Zmc2V0ID0gcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uOwotCi0JaWYgKGZyYWdOdW0gPT0gMCkgewotCQkvKiBDaGVjayBpZiB3ZSBoYXZlIGVub3VnaCBzcGFjZSBmb3IgdGhpcyBidWxrLW91dCBiYXRjaC4gKi8KLQkJU3RhdHVzID0gUnRtcFVTQkNhbkRvV3JpdGUocEFkLCBRdWVJZHgsIHBIVFRYQ29udGV4dCk7Ci0JCWlmIChTdGF0dXMgPT0gTkRJU19TVEFUVVNfU1VDQ0VTUykgewotCQkJcEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZyA9IFRSVUU7Ci0KLQkJCS8qIFJlc2VydmUgc3BhY2UgZm9yIDggYnl0ZXMgcGFkZGluZy4gKi8KLQkJCWlmICgocEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9PQotCQkJICAgICBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24pKSB7Ci0JCQkJcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiArPSA4OwotCQkJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiArPSA4OwotCQkJCWZpbGxPZmZzZXQgKz0gODsKLQkJCX0KLQkJCXBUeEJsay0+UHJpdiA9IDA7Ci0JCQlwSFRUWENvbnRleHQtPkN1cldyaXRlUmVhbFBvcyA9Ci0JCQkgICAgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uOwotCQl9IGVsc2UgewotCQkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tRdWVJZHhdLAotCQkJCQlJcnFGbGFncyk7Ci0KLQkJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwVHhCbGstPnBQYWNrZXQsCi0JCQkJCSAgICBORElTX1NUQVRVU19GQUlMVVJFKTsKLQkJCXJldHVybiAoU3RhdHVzKTsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIEZvciBzdWItc2VxdWVudCBmcmFtZXMgb2YgdGhpcyBidWxrLW91dCBiYXRjaC4gSnVzdCBjb3B5IGl0IHRvIG91ciBidWxrLW91dCBidWZmZXIuICovCi0JCVN0YXR1cyA9Ci0JCSAgICAoKHBIVFRYQ29udGV4dC0+YkN1cldyaXRpbmcgPT0KLQkJICAgICAgVFJVRSkgPyBORElTX1NUQVRVU19TVUNDRVNTIDogTkRJU19TVEFUVVNfRkFJTFVSRSk7Ci0JCWlmIChTdGF0dXMgPT0gTkRJU19TVEFUVVNfU1VDQ0VTUykgewotCQkJZmlsbE9mZnNldCArPSBwVHhCbGstPlByaXY7Ci0JCX0gZWxzZSB7Ci0JCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW1F1ZUlkeF0sCi0JCQkJCUlycUZsYWdzKTsKLQotCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBUeEJsay0+cFBhY2tldCwKLQkJCQkJICAgIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOwotCQkJcmV0dXJuIChTdGF0dXMpOwotCQl9Ci0JfQotCi0JTmRpc1plcm9NZW1vcnkoKHU4ICopKCZwVHhCbGstPkhlYWRlckJ1ZlswXSksIFRYSU5GT19TSVpFKTsKLQlwVHhJbmZvID0gKHN0cnVjdCBydF90eGluZm8gKikoJnBUeEJsay0+SGVhZGVyQnVmWzBdKTsKLQlwVHhXSSA9IChzdHJ1Y3QgcnRfdHh3aSAqKSAoJnBUeEJsay0+SGVhZGVyQnVmW1RYSU5GT19TSVpFXSk7Ci0KLQlwV2lyZWxlc3NQYWNrZXQgPQotCSAgICAmcEhUVFhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlci0+ZmllbGQuV2lyZWxlc3NQYWNrZXRbZmlsbE9mZnNldF07Ci0KLQkvKiBjb3B5IFRYV0kgKyBXTEFOIEhlYWRlciArIExMQyBpbnRvIERNQSBIZWFkZXIgQnVmZmVyICovCi0JLypod0hkckxlbiA9IFJPVU5EX1VQKHBUeEJsay0+TXBkdUhlYWRlckxlbiwgNCk7ICovCi0JaHdIZHJMZW4gPSBwVHhCbGstPk1wZHVIZWFkZXJMZW4gKyBwVHhCbGstPkhkclBhZExlbjsKLQotCS8qIEJ1aWxkIG91ciBVUkIgZm9yIFVTQkQgKi8KLQlETUFIZHJMZW4gPSBUWFdJX1NJWkUgKyBod0hkckxlbjsKLQlVU0JETUFwa3RMZW4gPSBETUFIZHJMZW4gKyBwVHhCbGstPlNyY0J1ZkxlbjsKLQlwYWRkaW5nID0gKDQgLSAoVVNCRE1BcGt0TGVuICUgNCkpICYgMHgwMzsJLyogcm91bmQgdXAgdG8gNCBieXRlIGFsaWdubWVudCAqLwotCVVTQkRNQXBrdExlbiArPSBwYWRkaW5nOwotCi0JcFR4QmxrLT5Qcml2ICs9IChUWElORk9fU0laRSArIFVTQkRNQXBrdExlbik7Ci0KLQkvKiBGb3IgVHhJbmZvLCB0aGUgbGVuZ3RoIG9mIFVTQkRNQXBrdExlbiA9IFRYV0lfU0laRSArIDgwMi4xMSBoZWFkZXIgKyBwYXlsb2FkICovCi0JUlRNUFdyaXRlVHhJbmZvKHBBZCwgcFR4SW5mbywgKHUxNikoVVNCRE1BcGt0TGVuKSwgRkFMU0UsIEZJRk9fRURDQSwKLQkJCUZBTFNFIC8qTmV4dFZhbGlkICovICwgRkFMU0UpOwotCi0JaWYgKGZyYWdOdW0gPT0gcFR4QmxrLT5Ub3RhbEZyYWdOdW0pIHsKLQkJcFR4SW5mby0+VVNCRE1BVHhidXJzdCA9IDA7Ci0JCWlmICgocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uICsgcFR4QmxrLT5Qcml2ICsgMzkwNikgPgotCQkgICAgTUFYX1RYQlVMS19MSU1JVCkgewotCQkJcFR4SW5mby0+U3dVc2VMYXN0Um91bmQgPSAxOwotCQkJVHhRTGFzdFJvdW5kID0gVFJVRTsKLQkJfQotCX0gZWxzZSB7Ci0JCXBUeEluZm8tPlVTQkRNQVR4YnVyc3QgPSAxOwotCX0KLQotCU5kaXNNb3ZlTWVtb3J5KHBXaXJlbGVzc1BhY2tldCwgcFR4QmxrLT5IZWFkZXJCdWYsCi0JCSAgICAgICBUWElORk9fU0laRSArIFRYV0lfU0laRSArIGh3SGRyTGVuKTsKLQlwV2lyZWxlc3NQYWNrZXQgKz0gKFRYSU5GT19TSVpFICsgVFhXSV9TSVpFICsgaHdIZHJMZW4pOwotCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVSZWFsUG9zICs9IChUWElORk9fU0laRSArIFRYV0lfU0laRSArIGh3SGRyTGVuKTsKLQotCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbUXVlSWR4XSwgSXJxRmxhZ3MpOwotCi0JTmRpc01vdmVNZW1vcnkocFdpcmVsZXNzUGFja2V0LCBwVHhCbGstPnBTcmNCdWZEYXRhLCBwVHhCbGstPlNyY0J1Zkxlbik7Ci0KLQkvKiAgICAgIFplcm8gdGhlIGxhc3QgcGFkZGluZy4gKi8KLQlwV2lyZWxlc3NQYWNrZXQgKz0gcFR4QmxrLT5TcmNCdWZMZW47Ci0JTmRpc1plcm9NZW1vcnkocFdpcmVsZXNzUGFja2V0LCBwYWRkaW5nICsgOCk7Ci0KLQlpZiAoZnJhZ051bSA9PSBwVHhCbGstPlRvdGFsRnJhZ051bSkgewotCQlSVE1QX0lSUV9MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tRdWVJZHhdLCBJcnFGbGFncyk7Ci0KLQkJLyogVXBkYXRlIHRoZSBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24uIDM5MDYgdXNlZCB0byBwcmV2ZW50IHRoZSBOZXh0QnVsa091dCBpcyBhIEEtUkFMSU5LL0EtTVNEVSBGcmFtZS4gKi8KLQkJcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uICs9IHBUeEJsay0+UHJpdjsKLQkJaWYgKFR4UUxhc3RSb3VuZCA9PSBUUlVFKQotCQkJcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uID0gODsKLQkJcEhUVFhDb250ZXh0LT5DdXJXcml0ZVJlYWxQb3MgPSBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb247Ci0KLQkJLyogRmluYWxseSwgc2V0IGJDdXJXcml0aW5nIGFzIEZBTFNFICovCi0JCXBIVFRYQ29udGV4dC0+YkN1cldyaXRpbmcgPSBGQUxTRTsKLQotCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW1F1ZUlkeF0sIElycUZsYWdzKTsKLQotCQkvKiBzdWNjZWVkIGFuZCByZWxlYXNlIHRoZSBza2IgYnVmZmVyICovCi0JCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwVHhCbGstPnBQYWNrZXQsIE5ESVNfU1RBVFVTX1NVQ0NFU1MpOwotCX0KLQotCXJldHVybiAoU3RhdHVzKTsKLQotfQotCi11MTYgUnRtcFVTQl9Xcml0ZVNpbmdsZVR4UmVzb3VyY2Uoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCSAgICAgc3RydWN0IHJ0X3R4X2JsayAqcFR4QmxrLAotCQkJCSAgICAgSU4gQk9PTEVBTiBiSXNMYXN0LAotCQkJCSAgICAgdTE2ICogRnJlZU51bWJlcikKLXsKLQlzdHJ1Y3QgcnRfaHRfdHhfY29udGV4dCAqcEhUVFhDb250ZXh0OwotCXUxNiBod0hkckxlbjsKLQl1MzIgZmlsbE9mZnNldDsKLQlzdHJ1Y3QgcnRfdHhpbmZvICpwVHhJbmZvOwotCXN0cnVjdCBydF90eHdpICpwVHhXSTsKLQl1OCAqcFdpcmVsZXNzUGFja2V0OwotCXU4IFF1ZUlkeDsKLQl1bnNpZ25lZCBsb25nIElycUZsYWdzOwotCWludCBTdGF0dXM7Ci0JdTMyIFVTQkRNQXBrdExlbiA9IDAsIERNQUhkckxlbiwgcGFkZGluZzsKLQlCT09MRUFOIGJUeFFMYXN0Um91bmQgPSBGQUxTRTsKLQotCS8qIEZvciBVU0IsIGRpZG4ndCBuZWVkIFBDSV9NQVBfU0lOR0xFKCkgKi8KLQkvKlNyY0J1ZlBBID0gUENJX01BUF9TSU5HTEUocEFkLCAoY2hhciAqKSBwVHhCbGstPnBTcmNCdWZEYXRhLCBwVHhCbGstPlNyY0J1ZkxlbiwgUENJX0RNQV9UT0RFVklDRSk7ICovCi0KLQkvKiAqLwotCS8qIGdldCBUeCBSaW5nIFJlc291cmNlICYgRG1hIEJ1ZmZlciBhZGRyZXNzICovCi0JLyogKi8KLQlRdWVJZHggPSBwVHhCbGstPlF1ZUlkeDsKLQotCVJUTVBfSVJRX0xPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW1F1ZUlkeF0sIElycUZsYWdzKTsKLQlwSFRUWENvbnRleHQgPSAmcEFkLT5UeENvbnRleHRbUXVlSWR4XTsKLQlmaWxsT2Zmc2V0ID0gcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uOwotCi0JLyogQ2hlY2sgcmluZyBmdWxsLiAqLwotCVN0YXR1cyA9IFJ0bXBVU0JDYW5Eb1dyaXRlKHBBZCwgUXVlSWR4LCBwSFRUWENvbnRleHQpOwotCWlmIChTdGF0dXMgPT0gTkRJU19TVEFUVVNfU1VDQ0VTUykgewotCQlwSFRUWENvbnRleHQtPmJDdXJXcml0aW5nID0gVFJVRTsKLQotCQlwVHhJbmZvID0gKHN0cnVjdCBydF90eGluZm8gKikoJnBUeEJsay0+SGVhZGVyQnVmWzBdKTsKLQkJcFR4V0kgPSAoc3RydWN0IHJ0X3R4d2kgKikgKCZwVHhCbGstPkhlYWRlckJ1ZltUWElORk9fU0laRV0pOwotCi0JCS8qIFJlc2VydmUgc3BhY2UgZm9yIDggYnl0ZXMgcGFkZGluZy4gKi8KLQkJaWYgKChwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uID09Ci0JCSAgICAgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uKSkgewotCQkJcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiArPSA4OwotCQkJcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uICs9IDg7Ci0JCQlmaWxsT2Zmc2V0ICs9IDg7Ci0JCX0KLQkJcEhUVFhDb250ZXh0LT5DdXJXcml0ZVJlYWxQb3MgPSBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb247Ci0KLQkJcFdpcmVsZXNzUGFja2V0ID0KLQkJICAgICZwSFRUWENvbnRleHQtPlRyYW5zZmVyQnVmZmVyLT5maWVsZC4KLQkJICAgIFdpcmVsZXNzUGFja2V0W2ZpbGxPZmZzZXRdOwotCi0JCS8qIGNvcHkgVFhXSSArIFdMQU4gSGVhZGVyICsgTExDIGludG8gRE1BIEhlYWRlciBCdWZmZXIgKi8KLQkJLypod0hkckxlbiA9IFJPVU5EX1VQKHBUeEJsay0+TXBkdUhlYWRlckxlbiwgNCk7ICovCi0JCWh3SGRyTGVuID0gcFR4QmxrLT5NcGR1SGVhZGVyTGVuICsgcFR4QmxrLT5IZHJQYWRMZW47Ci0KLQkJLyogQnVpbGQgb3VyIFVSQiBmb3IgVVNCRCAqLwotCQlETUFIZHJMZW4gPSBUWFdJX1NJWkUgKyBod0hkckxlbjsKLQkJVVNCRE1BcGt0TGVuID0gRE1BSGRyTGVuICsgcFR4QmxrLT5TcmNCdWZMZW47Ci0JCXBhZGRpbmcgPSAoNCAtIChVU0JETUFwa3RMZW4gJSA0KSkgJiAweDAzOwkvKiByb3VuZCB1cCB0byA0IGJ5dGUgYWxpZ25tZW50ICovCi0JCVVTQkRNQXBrdExlbiArPSBwYWRkaW5nOwotCi0JCXBUeEJsay0+UHJpdiA9IChUWElORk9fU0laRSArIFVTQkRNQXBrdExlbik7Ci0KLQkJLyogRm9yIFR4SW5mbywgdGhlIGxlbmd0aCBvZiBVU0JETUFwa3RMZW4gPSBUWFdJX1NJWkUgKyA4MDIuMTEgaGVhZGVyICsgcGF5bG9hZCAqLwotCQlSVE1QV3JpdGVUeEluZm8ocEFkLCBwVHhJbmZvLCAodTE2KShVU0JETUFwa3RMZW4pLCBGQUxTRSwKLQkJCQlGSUZPX0VEQ0EsIEZBTFNFIC8qTmV4dFZhbGlkICovICwgRkFMU0UpOwotCi0JCWlmICgocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uICsgMzkwNiArIHBUeEJsay0+UHJpdikgPgotCQkgICAgTUFYX1RYQlVMS19MSU1JVCkgewotCQkJcFR4SW5mby0+U3dVc2VMYXN0Um91bmQgPSAxOwotCQkJYlR4UUxhc3RSb3VuZCA9IFRSVUU7Ci0JCX0KLQkJTmRpc01vdmVNZW1vcnkocFdpcmVsZXNzUGFja2V0LCBwVHhCbGstPkhlYWRlckJ1ZiwKLQkJCSAgICAgICBUWElORk9fU0laRSArIFRYV0lfU0laRSArIGh3SGRyTGVuKTsKLQkJcFdpcmVsZXNzUGFja2V0ICs9IChUWElORk9fU0laRSArIFRYV0lfU0laRSArIGh3SGRyTGVuKTsKLQotCQkvKiBXZSB1bmxvY2sgaXQgaGVyZSB0byBwcmV2ZW50IHRoZSBmaXJzdCA4IGJ5dGVzIG1heWJlIG92ZXItd3JpdGVkIGlzc3VlLiAqLwotCQkvKiAgICAgIDEuIEZpcnN0IHdlIGdvdCBDdXJXcml0ZVBvc2l0aW9uIGJ1dCB0aGUgZmlyc3QgOCBieXRlcyBzdGlsbCBub3Qgd3JpdGUgdG8gdGhlIHBUeGNvbnRleHQuICovCi0JCS8qICAgICAgMi4gQW4gaW50ZXJydXB0IGJyZWFrIG91ciByb3V0aW5lIGFuZCBoYW5kbGUgYnVsay1vdXQgY29tcGxldGUuICovCi0JCS8qICAgICAgMy4gSW4gdGhlIGJ1bGstb3V0IGNvbXBsbGV0ZSwgaXQgbmVlZCB0byBkbyBhbm90aGVyIGJ1bGstb3V0LCAqLwotCQkvKiAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgRU5leHRCdWxrT3V0UG9zaXRpb24gaXMganVzdCB0aGUgc2FtZSBhcyBDdXJXcml0ZVBvc2l0aW9uLCBpdCB3aWxsIHNhdmUgdGhlIGZpcnN0IDggYnl0ZXMgZnJvbSBDdXJXcml0ZVBvc2l0aW9uLCAqLwotCQkvKiAgICAgICAgICAgICAgICAgICAgICBidXQgdGhlIHBheWxvYWQgc3RpbGwgbm90IGNvcHllZC4gdGhlIHBUeENvbnRleHQtPlNhdmVkUGFkW10gd2lsbCBzYXZlIGFzIGFsbHplcm8uIGFuZCBzZXQgdGhlIGJDb3B5UGFkID0gVFJVRS4gKi8KLQkJLyogICAgICA0LiBJbnRlcnJ1cHQgY29tcGxldGUuICovCi0JCS8qICA1LiBPdXIgaW50ZXJydXB0ZWQgcm91dGluZSBnbyBiYWNrIGFuZCBmaWxsIHRoZSBmaXJzdCA4IGJ5dGVzIHRvIHBUeENvbnRleHQuICovCi0JCS8qICAgICAgNi4gTmV4dCB0aW1lIHdoZW4gZG8gYnVsay1vdXQsIGl0IGZvdW5kIHRoZSBiQ29weVBhZD09VFJVRSBhbmQgd2lsbCBjb3B5IHRoZSBTYXZlZFBhZFtdIHRvIHBUeENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24uICovCi0JCS8qICAgICAgICAgICAgICBhbmQgdGhlIHBhY2tldCB3aWxsIHdyb25nLiAqLwotCQlwSFRUWENvbnRleHQtPkN1cldyaXRlUmVhbFBvcyArPQotCQkgICAgKFRYSU5GT19TSVpFICsgVFhXSV9TSVpFICsgaHdIZHJMZW4pOwotCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW1F1ZUlkeF0sIElycUZsYWdzKTsKLQotCQlOZGlzTW92ZU1lbW9yeShwV2lyZWxlc3NQYWNrZXQsIHBUeEJsay0+cFNyY0J1ZkRhdGEsCi0JCQkgICAgICAgcFR4QmxrLT5TcmNCdWZMZW4pOwotCQlwV2lyZWxlc3NQYWNrZXQgKz0gcFR4QmxrLT5TcmNCdWZMZW47Ci0JCU5kaXNaZXJvTWVtb3J5KHBXaXJlbGVzc1BhY2tldCwgcGFkZGluZyArIDgpOwotCi0JCVJUTVBfSVJRX0xPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW1F1ZUlkeF0sIElycUZsYWdzKTsKLQotCQlwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gKz0gcFR4QmxrLT5Qcml2OwotCQlpZiAoYlR4UUxhc3RSb3VuZCkKLQkJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiA9IDg7Ci0JCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVSZWFsUG9zID0gcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uOwotCi0JCXBIVFRYQ29udGV4dC0+YkN1cldyaXRpbmcgPSBGQUxTRTsKLQl9Ci0KLQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW1F1ZUlkeF0sIElycUZsYWdzKTsKLQotCS8qIHN1Y2NlZWQgYW5kIHJlbGVhc2UgdGhlIHNrYiBidWZmZXIgKi8KLQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFR4QmxrLT5wUGFja2V0LCBORElTX1NUQVRVU19TVUNDRVNTKTsKLQotCXJldHVybiAoU3RhdHVzKTsKLQotfQotCi11MTYgUnRtcFVTQl9Xcml0ZU11bHRpVHhSZXNvdXJjZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJICAgIHN0cnVjdCBydF90eF9ibGsgKnBUeEJsaywKLQkJCQkgICAgdTggZnJhbWVOdW0sIHUxNiAqIEZyZWVOdW1iZXIpCi17Ci0Jc3RydWN0IHJ0X2h0X3R4X2NvbnRleHQgKnBIVFRYQ29udGV4dDsKLQl1MTYgaHdIZHJMZW47CS8qIFRoZSBod0hkckxlbiBjb25zaXN0IG9mIDgwMi4xMSBoZWFkZXIgbGVuZ3RoIHBsdXMgdGhlIGhlYWRlciBwYWRkaW5nIGxlbmd0aC4gKi8KLQl1MzIgZmlsbE9mZnNldDsKLQlzdHJ1Y3QgcnRfdHhpbmZvICpwVHhJbmZvOwotCXN0cnVjdCBydF90eHdpICpwVHhXSTsKLQl1OCAqcFdpcmVsZXNzUGFja2V0ID0gTlVMTDsKLQl1OCBRdWVJZHg7Ci0JaW50IFN0YXR1czsKLQl1bnNpZ25lZCBsb25nIElycUZsYWdzOwotCS8qdTMyICAgICAgICAgICAgICAgICAgICAgICAgVVNCRE1BcGt0TGVuID0gMCwgRE1BSGRyTGVuLCBwYWRkaW5nOyAqLwotCi0JLyogKi8KLQkvKiBnZXQgVHggUmluZyBSZXNvdXJjZSAmIERtYSBCdWZmZXIgYWRkcmVzcyAqLwotCS8qICovCi0JUXVlSWR4ID0gcFR4QmxrLT5RdWVJZHg7Ci0JcEhUVFhDb250ZXh0ID0gJnBBZC0+VHhDb250ZXh0W1F1ZUlkeF07Ci0KLQlSVE1QX0lSUV9MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tRdWVJZHhdLCBJcnFGbGFncyk7Ci0KLQlpZiAoZnJhbWVOdW0gPT0gMCkgewotCQkvKiBDaGVjayBpZiB3ZSBoYXZlIGVub3VnaCBzcGFjZSBmb3IgdGhpcyBidWxrLW91dCBiYXRjaC4gKi8KLQkJU3RhdHVzID0gUnRtcFVTQkNhbkRvV3JpdGUocEFkLCBRdWVJZHgsIHBIVFRYQ29udGV4dCk7Ci0JCWlmIChTdGF0dXMgPT0gTkRJU19TVEFUVVNfU1VDQ0VTUykgewotCQkJcEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZyA9IFRSVUU7Ci0KLQkJCXBUeEluZm8gPSAoc3RydWN0IHJ0X3R4aW5mbyAqKSgmcFR4QmxrLT5IZWFkZXJCdWZbMF0pOwotCQkJcFR4V0kgPSAoc3RydWN0IHJ0X3R4d2kgKikgKCZwVHhCbGstPkhlYWRlckJ1ZltUWElORk9fU0laRV0pOwotCi0JCQkvKiBSZXNlcnZlIHNwYWNlIGZvciA4IGJ5dGVzIHBhZGRpbmcuICovCi0JCQlpZiAoKHBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gPT0KLQkJCSAgICAgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uKSkgewotCi0JCQkJcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uICs9IDg7Ci0JCQkJcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiArPSA4OwotCQkJfQotCQkJZmlsbE9mZnNldCA9IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbjsKLQkJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVSZWFsUG9zID0KLQkJCSAgICBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb247Ci0KLQkJCXBXaXJlbGVzc1BhY2tldCA9Ci0JCQkgICAgJnBIVFRYQ29udGV4dC0+VHJhbnNmZXJCdWZmZXItPmZpZWxkLgotCQkJICAgIFdpcmVsZXNzUGFja2V0W2ZpbGxPZmZzZXRdOwotCi0JCQkvKiAqLwotCQkJLyogQ29weSBUWElORk8gKyBUWFdJICsgV0xBTiBIZWFkZXIgKyBMTEMgaW50byBETUEgSGVhZGVyIEJ1ZmZlciAqLwotCQkJLyogKi8KLQkJCWlmIChwVHhCbGstPlR4RnJhbWVUeXBlID09IFRYX0FNU0RVX0ZSQU1FKQotCQkJCS8qaHdIZHJMZW4gPSBST1VORF9VUChwVHhCbGstPk1wZHVIZWFkZXJMZW4tTEVOR1RIX0FNU0RVX1NVQkZSQU1FSEVBRCwgNCkrTEVOR1RIX0FNU0RVX1NVQkZSQU1FSEVBRDsgKi8KLQkJCQlod0hkckxlbiA9Ci0JCQkJICAgIHBUeEJsay0+TXBkdUhlYWRlckxlbiAtCi0JCQkJICAgIExFTkdUSF9BTVNEVV9TVUJGUkFNRUhFQUQgKwotCQkJCSAgICBwVHhCbGstPkhkclBhZExlbiArCi0JCQkJICAgIExFTkdUSF9BTVNEVV9TVUJGUkFNRUhFQUQ7Ci0JCQllbHNlIGlmIChwVHhCbGstPlR4RnJhbWVUeXBlID09IFRYX1JBTElOS19GUkFNRSkKLQkJCQkvKmh3SGRyTGVuID0gUk9VTkRfVVAocFR4QmxrLT5NcGR1SGVhZGVyTGVuLUxFTkdUSF9BUkFMSU5LX0hFQURFUl9GSUVMRCwgNCkrTEVOR1RIX0FSQUxJTktfSEVBREVSX0ZJRUxEOyAqLwotCQkJCWh3SGRyTGVuID0KLQkJCQkgICAgcFR4QmxrLT5NcGR1SGVhZGVyTGVuIC0KLQkJCQkgICAgTEVOR1RIX0FSQUxJTktfSEVBREVSX0ZJRUxEICsKLQkJCQkgICAgcFR4QmxrLT5IZHJQYWRMZW4gKwotCQkJCSAgICBMRU5HVEhfQVJBTElOS19IRUFERVJfRklFTEQ7Ci0JCQllbHNlCi0JCQkJLypod0hkckxlbiA9IFJPVU5EX1VQKHBUeEJsay0+TXBkdUhlYWRlckxlbiwgNCk7ICovCi0JCQkJaHdIZHJMZW4gPQotCQkJCSAgICBwVHhCbGstPk1wZHVIZWFkZXJMZW4gKyBwVHhCbGstPkhkclBhZExlbjsKLQotCQkJLyogVXBkYXRlIHRoZSBwVHhCbGstPlByaXYuICovCi0JCQlwVHhCbGstPlByaXYgPSBUWElORk9fU0laRSArIFRYV0lfU0laRSArIGh3SGRyTGVuOwotCi0JCQkvKiAgICAgIHBUeEluZm8tPlVTQkRNQXBrdExlbiBub3cganVzdCBhIHRlbXAgdmFsdWUgYW5kIHdpbGwgdG8gY29ycmVjdCBsYXR0ZXIuICovCi0JCQlSVE1QV3JpdGVUeEluZm8ocEFkLCBwVHhJbmZvLCAodTE2KShwVHhCbGstPlByaXYpLAotCQkJCQlGQUxTRSwgRklGT19FRENBLCBGQUxTRSAvKk5leHRWYWxpZCAqLyAsCi0JCQkJCUZBTFNFKTsKLQotCQkJLyogQ29weSBpdC4gKi8KLQkJCU5kaXNNb3ZlTWVtb3J5KHBXaXJlbGVzc1BhY2tldCwgcFR4QmxrLT5IZWFkZXJCdWYsCi0JCQkJICAgICAgIHBUeEJsay0+UHJpdik7Ci0JCQlwSFRUWENvbnRleHQtPkN1cldyaXRlUmVhbFBvcyArPSBwVHhCbGstPlByaXY7Ci0JCQlwV2lyZWxlc3NQYWNrZXQgKz0gcFR4QmxrLT5Qcml2OwotCQl9Ci0JfSBlbHNlIHsJCS8qIEZvciBzdWItc2VxdWVudCBmcmFtZXMgb2YgdGhpcyBidWxrLW91dCBiYXRjaC4gSnVzdCBjb3B5IGl0IHRvIG91ciBidWxrLW91dCBidWZmZXIuICovCi0KLQkJU3RhdHVzID0KLQkJICAgICgocEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZyA9PQotCQkgICAgICBUUlVFKSA/IE5ESVNfU1RBVFVTX1NVQ0NFU1MgOiBORElTX1NUQVRVU19GQUlMVVJFKTsKLQkJaWYgKFN0YXR1cyA9PSBORElTX1NUQVRVU19TVUNDRVNTKSB7Ci0JCQlmaWxsT2Zmc2V0ID0KLQkJCSAgICAocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uICsgcFR4QmxrLT5Qcml2KTsKLQkJCXBXaXJlbGVzc1BhY2tldCA9Ci0JCQkgICAgJnBIVFRYQ29udGV4dC0+VHJhbnNmZXJCdWZmZXItPmZpZWxkLgotCQkJICAgIFdpcmVsZXNzUGFja2V0W2ZpbGxPZmZzZXRdOwotCi0JCQkvKmh3SGRyTGVuID0gcFR4QmxrLT5NcGR1SGVhZGVyTGVuOyAqLwotCQkJTmRpc01vdmVNZW1vcnkocFdpcmVsZXNzUGFja2V0LCBwVHhCbGstPkhlYWRlckJ1ZiwKLQkJCQkgICAgICAgcFR4QmxrLT5NcGR1SGVhZGVyTGVuKTsKLQkJCXBXaXJlbGVzc1BhY2tldCArPSAocFR4QmxrLT5NcGR1SGVhZGVyTGVuKTsKLQkJCXBUeEJsay0+UHJpdiArPSBwVHhCbGstPk1wZHVIZWFkZXJMZW47Ci0JCX0gZWxzZSB7CS8qIEl0IHNob3VsZCBub3QgaGFwcGVuZWQgbm93IHVubGVzcyB3ZSBhcmUgZ29pbmcgdG8gc2h1dGRvd24uICovCi0JCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCQkgKCJXcml0ZU11bHRpVHhSZXNvdXJjZSgpOmJDdXJXcml0aW5nIGlzIEZBTFNFIHdoZW4gaGFuZGxlIHN1Yi1zZXF1ZW50IGZyYW1lcy5cbiIpKTsKLQkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7Ci0JCX0KLQl9Ci0KLQkvKiBXZSB1bmxvY2sgaXQgaGVyZSB0byBwcmV2ZW50IHRoZSBmaXJzdCA4IGJ5dGVzIG1heWJlIG92ZXItd3JpdGUgaXNzdWUuICovCi0JLyogICAgICAxLiBGaXJzdCB3ZSBnb3QgQ3VyV3JpdGVQb3NpdGlvbiBidXQgdGhlIGZpcnN0IDggYnl0ZXMgc3RpbGwgbm90IHdyaXRlIHRvIHRoZSBwVHhDb250ZXh0LiAqLwotCS8qICAgICAgMi4gQW4gaW50ZXJydXB0IGJyZWFrIG91ciByb3V0aW5lIGFuZCBoYW5kbGUgYnVsay1vdXQgY29tcGxldGUuICovCi0JLyogICAgICAzLiBJbiB0aGUgYnVsay1vdXQgY29tcGxsZXRlLCBpdCBuZWVkIHRvIGRvIGFub3RoZXIgYnVsay1vdXQsICovCi0JLyogICAgICAgICAgICAgICAgICAgICAgaWYgdGhlIEVOZXh0QnVsa091dFBvc2l0aW9uIGlzIGp1c3QgdGhlIHNhbWUgYXMgQ3VyV3JpdGVQb3NpdGlvbiwgaXQgd2lsbCBzYXZlIHRoZSBmaXJzdCA4IGJ5dGVzIGZyb20gQ3VyV3JpdGVQb3NpdGlvbiwgKi8KLQkvKiAgICAgICAgICAgICAgICAgICAgICBidXQgdGhlIHBheWxvYWQgc3RpbGwgbm90IGNvcHllZC4gdGhlIHBUeENvbnRleHQtPlNhdmVkUGFkW10gd2lsbCBzYXZlIGFzIGFsbHplcm8uIGFuZCBzZXQgdGhlIGJDb3B5UGFkID0gVFJVRS4gKi8KLQkvKiAgICAgIDQuIEludGVycnVwdCBjb21wbGV0ZS4gKi8KLQkvKiAgNS4gT3VyIGludGVycnVwdGVkIHJvdXRpbmUgZ28gYmFjayBhbmQgZmlsbCB0aGUgZmlyc3QgOCBieXRlcyB0byBwVHhDb250ZXh0LiAqLwotCS8qICAgICAgNi4gTmV4dCB0aW1lIHdoZW4gZG8gYnVsay1vdXQsIGl0IGZvdW5kIHRoZSBiQ29weVBhZD09VFJVRSBhbmQgd2lsbCBjb3B5IHRoZSBTYXZlZFBhZFtdIHRvIHBUeENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24uICovCi0JLyogICAgICAgICAgICAgIGFuZCB0aGUgcGFja2V0IHdpbGwgd3JvbmcuICovCi0JUlRNUF9JUlFfVU5MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tRdWVJZHhdLCBJcnFGbGFncyk7Ci0KLQlpZiAoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkgKCJXcml0ZU11bHRpVHhSZXNvdXJjZTogQ1dQb3MgPSAlbGQsIE5CT3V0UG9zID0gJWxkLlxuIiwKLQkJCSAgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uLAotCQkJICBwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24pKTsKLQkJZ290byBkb25lOwotCX0KLQkvKiBDb3B5IHRoZSBmcmFtZSBjb250ZW50IGludG8gRE1BIGJ1ZmZlciBhbmQgdXBkYXRlIHRoZSBwVHhCbGstPlByaXYgKi8KLQlOZGlzTW92ZU1lbW9yeShwV2lyZWxlc3NQYWNrZXQsIHBUeEJsay0+cFNyY0J1ZkRhdGEsIHBUeEJsay0+U3JjQnVmTGVuKTsKLQlwV2lyZWxlc3NQYWNrZXQgKz0gcFR4QmxrLT5TcmNCdWZMZW47Ci0JcFR4QmxrLT5Qcml2ICs9IHBUeEJsay0+U3JjQnVmTGVuOwotCi1kb25lOgotCS8qIFJlbGVhc2UgdGhlIHNrYiBidWZmZXIgaGVyZSAqLwotCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwVHhCbGstPnBQYWNrZXQsIE5ESVNfU1RBVFVTX1NVQ0NFU1MpOwotCi0JcmV0dXJuIChTdGF0dXMpOwotCi19Ci0KLXZvaWQgUnRtcFVTQl9GaW5hbFdyaXRlVHhSZXNvdXJjZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJICBzdHJ1Y3QgcnRfdHhfYmxrICpwVHhCbGssCi0JCQkJICB1MTYgdG90YWxNUERVU2l6ZSwgdTE2IFR4SWR4KQotewotCXU4IFF1ZUlkeDsKLQlzdHJ1Y3QgcnRfaHRfdHhfY29udGV4dCAqcEhUVFhDb250ZXh0OwotCXUzMiBmaWxsT2Zmc2V0OwotCXN0cnVjdCBydF90eGluZm8gKnBUeEluZm87Ci0Jc3RydWN0IHJ0X3R4d2kgKnBUeFdJOwotCXUzMiBVU0JETUFwa3RMZW4sIHBhZGRpbmc7Ci0JdW5zaWduZWQgbG9uZyBJcnFGbGFnczsKLQl1OCAqcFdpcmVsZXNzUGFja2V0OwotCi0JUXVlSWR4ID0gcFR4QmxrLT5RdWVJZHg7Ci0JcEhUVFhDb250ZXh0ID0gJnBBZC0+VHhDb250ZXh0W1F1ZUlkeF07Ci0KLQlSVE1QX0lSUV9MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tRdWVJZHhdLCBJcnFGbGFncyk7Ci0KLQlpZiAocEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZyA9PSBUUlVFKSB7Ci0JCWZpbGxPZmZzZXQgPSBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb247Ci0JCWlmICgoKHBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gPT0KLQkJICAgICAgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uKQotCQkgICAgIHx8ICgocEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiAtIDgpID09Ci0JCQkgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uKSkKLQkJICAgICYmIChwSFRUWENvbnRleHQtPmJDb3B5U2F2ZVBhZCA9PSBUUlVFKSkKLQkJCXBXaXJlbGVzc1BhY2tldCA9ICh1OCAqKSgmcEhUVFhDb250ZXh0LT5TYXZlZFBhZFswXSk7Ci0JCWVsc2UKLQkJCXBXaXJlbGVzc1BhY2tldCA9Ci0JCQkgICAgKHU4ICopKCZwSFRUWENvbnRleHQtPlRyYW5zZmVyQnVmZmVyLT5maWVsZC4KLQkJCQkgICAgICBXaXJlbGVzc1BhY2tldFtmaWxsT2Zmc2V0XSk7Ci0KLQkJLyogKi8KLQkJLyogVXBkYXRlIFR4SW5mby0+VVNCRE1BcGt0TGVuICwgKi8KLQkJLyogICAgICAgICAgICAgIHRoZSBsZW5ndGggPSBUWFdJX1NJWkUgKyA4MDIuMTFfaGRyICsgODAyLjExX2hkcl9wYWQgKyBwYXlsb2FkX29mX2FsbF9iYXRjaF9mcmFtZXMgKyBCdWxrLU91dC1wYWRkaW5nICovCi0JCS8qICovCi0JCXBUeEluZm8gPSAoc3RydWN0IHJ0X3R4aW5mbyAqKShwV2lyZWxlc3NQYWNrZXQpOwotCi0JCS8qIENhbGN1bGF0ZSB0aGUgYnVsay1vdXQgcGFkZGluZyAqLwotCQlVU0JETUFwa3RMZW4gPSBwVHhCbGstPlByaXYgLSBUWElORk9fU0laRTsKLQkJcGFkZGluZyA9ICg0IC0gKFVTQkRNQXBrdExlbiAlIDQpKSAmIDB4MDM7CS8qIHJvdW5kIHVwIHRvIDQgYnl0ZSBhbGlnbm1lbnQgKi8KLQkJVVNCRE1BcGt0TGVuICs9IHBhZGRpbmc7Ci0KLQkJcFR4SW5mby0+VVNCRE1BVHhQa3RMZW4gPSBVU0JETUFwa3RMZW47Ci0KLQkJLyogKi8KLQkJLyogVXBkYXRlIFRYV0ktPk1QRFV0b3RhbEJ5dGVDb3VudCAsICovCi0JCS8qICAgICAgICAgICAgICB0aGUgbGVuZ3RoID0gODAyLjExIGhlYWRlciArIHBheWxvYWRfb2ZfYWxsX2JhdGNoX2ZyYW1lcyAqLwotCQlwVHhXSSA9IChzdHJ1Y3QgcnRfdHh3aSAqKSAocFdpcmVsZXNzUGFja2V0ICsgVFhJTkZPX1NJWkUpOwotCQlwVHhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50ID0gdG90YWxNUERVU2l6ZTsKLQotCQkvKiAqLwotCQkvKiBVcGRhdGUgdGhlIHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiAqLwotCQkvKiAqLwotCQlwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gKz0gKFRYSU5GT19TSVpFICsgVVNCRE1BcGt0TGVuKTsKLQkJaWYgKChwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gKyAzOTA2KSA+IE1BWF9UWEJVTEtfTElNSVQpIHsJLyogQWRkIDM5MDYgZm9yIHByZXZlbnQgdGhlIE5leHRCdWxrT3V0IHBhY2tldCBzaXplIGlzIGEgQS1SQUxJTksvQS1NU0RVIEZyYW1lLiAqLwotCQkJcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uID0gODsKLQkJCXBUeEluZm8tPlN3VXNlTGFzdFJvdW5kID0gMTsKLQkJfQotCQlwSFRUWENvbnRleHQtPkN1cldyaXRlUmVhbFBvcyA9IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbjsKLQotCQkvKiAqLwotCQkvKiAgICAgIFplcm8gdGhlIGxhc3QgcGFkZGluZy4gKi8KLQkJLyogKi8KLQkJcFdpcmVsZXNzUGFja2V0ID0KLQkJICAgICgmcEhUVFhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlci0+ZmllbGQuCi0JCSAgICAgV2lyZWxlc3NQYWNrZXRbZmlsbE9mZnNldCArIHBUeEJsay0+UHJpdl0pOwotCQlOZGlzWmVyb01lbW9yeShwV2lyZWxlc3NQYWNrZXQsIHBhZGRpbmcgKyA4KTsKLQotCQkvKiBGaW5hbGx5LCBzZXQgYkN1cldyaXRpbmcgYXMgRkFMU0UgKi8KLQkJcEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZyA9IEZBTFNFOwotCi0JfSBlbHNlIHsJCS8qIEl0IHNob3VsZCBub3QgaGFwcGVuZWQgbm93IHVubGVzcyB3ZSBhcmUgZ29pbmcgdG8gc2h1dGRvd24uICovCi0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJICgiRmluYWxXcml0ZVR4UmVzb3VyY2UoKTpiQ3VyV3JpdGluZyBpcyBGQUxTRSB3aGVuIGhhbmRsZSBsYXN0IGZyYW1lcy5cbiIpKTsKLQl9Ci0KLQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW1F1ZUlkeF0sIElycUZsYWdzKTsKLQotfQotCi12b2lkIFJ0bXBVU0JEYXRhTGFzdFR4SWR4KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgdTggUXVlSWR4LCB1MTYgVHhJZHgpCi17Ci0JLyogRE8gbm90aGluZyBmb3IgVVNCLiAqLwotfQotCi0vKgotCVdoZW4gY2FuIGRvIGJ1bGstb3V0OgotCQkxLiBUeFN3RnJlZUlkeCA8IFRYX1JJTkdfU0laRTsKLQkJCUl0IG1lYW5zIGhhcyBhdCBsZWFzdCBvbmUgUmluZyBlbnRpdHkgaXMgcmVhZHkgZm9yIGJ1bGstb3V0LCBraWNrIGl0IG91dC4KLQkJMi4gSWYgVHhTd0ZyZWVJZHggPT0gVFhfUklOR19TSVpFCi0JCQlDaGVjayBpZiB0aGUgQ3VyV3JpdGluZyBmbGFnIGlzIEZBTFNFLCBpZiBpdCdzIEZBTFNFLCB3ZSBjYW4gZG8ga2ljayBvdXQuCi0KLSovCi12b2lkIFJ0bXBVU0JEYXRhS2lja091dChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQlzdHJ1Y3QgcnRfdHhfYmxrICpwVHhCbGssIHU4IFF1ZUlkeCkKLXsKLQlSVFVTQl9TRVRfQlVMS19GTEFHKHBBZCwgKGZSVFVTQl9CVUxLX09VVF9EQVRBX05PUk1BTCA8PCBRdWVJZHgpKTsKLQlSVFVTQktpY2tCdWxrT3V0KHBBZCk7Ci0KLX0KLQotLyoKLQlNdXN0IGJlIHJ1biBpbiBJbnRlcnJ1cHQgY29udGV4dAotCVRoaXMgZnVuY3Rpb24gaGFuZGxlIFJUMjg3MCBzcGVjaWZpYyBUeERlc2MgYW5kIGNwdSBpbmRleCB1cGRhdGUgYW5kIGtpY2sgdGhlIHBhY2tldCBvdXQuCi0gKi8KLWludCBSdG1wVVNCTWdtdEtpY2tPdXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICAgICAgdTggUXVlSWR4LAotCQkgICAgICAgdm9pZCAqcFBhY2tldCwKLQkJICAgICAgIHU4ICpwU3JjQnVmVkEsIHUzMiBTcmNCdWZMZW4pCi17Ci0Jc3RydWN0IHJ0X3R4aW5mbyAqcFR4SW5mbzsKLQl1bnNpZ25lZCBsb25nIEJ1bGtPdXRTaXplOwotCXU4IHBhZExlbjsKLQl1OCAqcERlc3Q7Ci0JdW5zaWduZWQgbG9uZyBTd0lkeCA9IHBBZC0+TWdtdFJpbmcuVHhDcHVJZHg7Ci0Jc3RydWN0IHJ0X3R4X2NvbnRleHQgKnBNTE1FQ29udGV4dCA9Ci0JICAgIChzdHJ1Y3QgcnRfdHhfY29udGV4dCAqKXBBZC0+TWdtdFJpbmcuQ2VsbFtTd0lkeF0uQWxsb2NWYTsKLQl1bnNpZ25lZCBsb25nIElycUZsYWdzOwotCi0JcFR4SW5mbyA9IChzdHJ1Y3QgcnRfdHhpbmZvICopKHBTcmNCdWZWQSk7Ci0KLQkvKiBCdWlsZCBvdXIgVVJCIGZvciBVU0JEICovCi0JQnVsa091dFNpemUgPSBTcmNCdWZMZW47Ci0JQnVsa091dFNpemUgPSAoQnVsa091dFNpemUgKyAzKSAmICh+Myk7Ci0JUlRNUFdyaXRlVHhJbmZvKHBBZCwgcFR4SW5mbywgKHUxNikoQnVsa091dFNpemUgLSBUWElORk9fU0laRSksCi0JCQlUUlVFLCBFcFRvUXVldWVbTUdNVFBJUEVJRFhdLCBGQUxTRSwgRkFMU0UpOwotCi0JQnVsa091dFNpemUgKz0gNDsJLyogQWx3YXlzIGFkZCA0IGV4dHJhIGJ5dGVzIGF0IGV2ZXJ5IHBhY2tldC4gKi8KLQotCS8qIElmIEJ1bGtPdXRTaXplIGlzIG11bHRpcGxlIG9mIEJ1bGtPdXRNYXhQYWNrZXRTaXplLCBhZGQgZXh0cmEgNCBieXRlcyBhZ2Fpbi4gKi8KLQlpZiAoKEJ1bGtPdXRTaXplICUgcEFkLT5CdWxrT3V0TWF4UGFja2V0U2l6ZSkgPT0gMCkKLQkJQnVsa091dFNpemUgKz0gNDsKLQotCXBhZExlbiA9IEJ1bGtPdXRTaXplIC0gU3JjQnVmTGVuOwotCUFTU0VSVCgocGFkTGVuIDw9IFJUTVBfUEtUX1RBSUxfUEFERElORykpOwotCi0JLyogTm93IG1lbXplcm8gYWxsIGV4dHJhIHBhZGRpbmcgYnl0ZXMuICovCi0JcERlc3QgPSAodTggKikocFNyY0J1ZlZBICsgU3JjQnVmTGVuKTsKLQlza2JfcHV0KEdFVF9PU19QS1RfVFlQRShwUGFja2V0KSwgcGFkTGVuKTsKLQlOZGlzWmVyb01lbW9yeShwRGVzdCwgcGFkTGVuKTsKLQotCVJUTVBfSVJRX0xPQ0soJnBBZC0+TUxNRUJ1bGtPdXRMb2NrLCBJcnFGbGFncyk7Ci0KLQlwQWQtPk1nbXRSaW5nLkNlbGxbcEFkLT5NZ210UmluZy5UeENwdUlkeF0ucE5kaXNQYWNrZXQgPSBwUGFja2V0OwotCXBNTE1FQ29udGV4dC0+VHJhbnNmZXJCdWZmZXIgPQotCSAgICAoc3RydWN0IHJ0X3R4X2J1ZmZlciAqKShHRVRfT1NfUEtUX0RBVEFQVFIocFBhY2tldCkpOwotCi0JLyogTGVuZ3RoIGluIFR4SW5mbyBzaG91bGQgYmUgOCBsZXNzIHRoYW4gYnVsa291dCBzaXplLiAqLwotCXBNTE1FQ29udGV4dC0+QnVsa091dFNpemUgPSBCdWxrT3V0U2l6ZTsKLQlwTUxNRUNvbnRleHQtPkluVXNlID0gVFJVRTsKLQlwTUxNRUNvbnRleHQtPmJXYWl0aW5nQnVsa091dCA9IFRSVUU7Ci0KLQkvKmZvciBkZWJ1ZyAqLwotCS8qaGV4X2R1bXAoIlJ0bXBVU0JNZ210S2lja091dCIsICZwTUxNRUNvbnRleHQtPlRyYW5zZmVyQnVmZmVyLT5maWVsZC5XaXJlbGVzc1BhY2tldFswXSwgKHBNTE1FQ29udGV4dC0+QnVsa091dFNpemUgPiAxNiA/IDE2IDogcE1MTUVDb250ZXh0LT5CdWxrT3V0U2l6ZSkpOyAqLwotCi0JLypwQWQtPlJhbGlua0NvdW50ZXJzLktpY2tUeENvdW50Kys7ICovCi0JLypwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4RG9uZUNvdW50Kys7ICovCi0KLQkvKmlmIChwQWQtPk1nbXRSaW5nLlR4U3dGcmVlSWR4ID09IE1HTVRfUklOR19TSVpFKSAqLwotCS8qICAgICAgbmVlZEtpY2tPdXQgPSBUUlVFOyAqLwotCi0JLyogRGVjcmVhc2UgdGhlIFR4U3dGcmVlSWR4IGFuZCBJbmNyZWFzZSB0aGUgVFhfQ1RYX0lEWCAqLwotCXBBZC0+TWdtdFJpbmcuVHhTd0ZyZWVJZHgtLTsKLQlJTkNfUklOR19JTkRFWChwQWQtPk1nbXRSaW5nLlR4Q3B1SWR4LCBNR01UX1JJTkdfU0laRSk7Ci0KLQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+TUxNRUJ1bGtPdXRMb2NrLCBJcnFGbGFncyk7Ci0KLQlSVFVTQl9TRVRfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX01MTUUpOwotCS8qaWYgKG5lZWRLaWNrT3V0KSAqLwotCVJUVVNCS2lja0J1bGtPdXQocEFkKTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIFJ0bXBVU0JOdWxsRnJhbWVLaWNrT3V0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICAgdTggUXVlSWR4LAotCQkJICAgICB1OCAqIHBOdWxsRnJhbWUsIHUzMiBmcmFtZUxlbikKLXsKLQlpZiAocEFkLT5OdWxsQ29udGV4dC5JblVzZSA9PSBGQUxTRSkgewotCQlzdHJ1Y3QgcnRfdHhfY29udGV4dCAqcE51bGxDb250ZXh0OwotCQlzdHJ1Y3QgcnRfdHhpbmZvICpwVHhJbmZvOwotCQlzdHJ1Y3QgcnRfdHh3aSAqIHBUeFdJOwotCQl1OCAqcFdpcmVsZXNzUGt0OwotCi0JCXBOdWxsQ29udGV4dCA9ICYocEFkLT5OdWxsQ29udGV4dCk7Ci0KLQkJLyogU2V0IHRoZSBpbiB1c2UgYml0ICovCi0JCXBOdWxsQ29udGV4dC0+SW5Vc2UgPSBUUlVFOwotCQlwV2lyZWxlc3NQa3QgPQotCQkgICAgKHU4ICopJiBwTnVsbENvbnRleHQtPlRyYW5zZmVyQnVmZmVyLT5maWVsZC4KLQkJICAgIFdpcmVsZXNzUGFja2V0WzBdOwotCi0JCVJUTVBaZXJvTWVtb3J5KCZwV2lyZWxlc3NQa3RbMF0sIDEwMCk7Ci0JCXBUeEluZm8gPSAoc3RydWN0IHJ0X3R4aW5mbyAqKSYgcFdpcmVsZXNzUGt0WzBdOwotCQlSVE1QV3JpdGVUeEluZm8ocEFkLCBwVHhJbmZvLAotCQkJCSh1MTYpKHNpemVvZihzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSkgKyBUWFdJX1NJWkUpLAotCQkJCVRSVUUsIEVwVG9RdWV1ZVtNR01UUElQRUlEWF0sIEZBTFNFLCBGQUxTRSk7Ci0JCXBUeEluZm8tPlFTRUwgPSBGSUZPX0VEQ0E7Ci0JCXBUeFdJID0gKHN0cnVjdCBydF90eHdpICopICYgcFdpcmVsZXNzUGt0W1RYSU5GT19TSVpFXTsKLQkJUlRNUFdyaXRlVHhXSShwQWQsIHBUeFdJLCBGQUxTRSwgRkFMU0UsIEZBTFNFLCBGQUxTRSwgVFJVRSwKLQkJCSAgICAgIEZBTFNFLCAwLCBCU1NJRF9XQ0lELCAoc2l6ZW9mKHN0cnVjdCBydF9oZWFkZXJfODAyXzExKSksIDAsCi0JCQkgICAgICAwLCAodTgpcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1DUywKLQkJCSAgICAgIElGU19IVFRYT1AsIEZBTFNFLCAmcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0KTsKLQotCQlSVE1QTW92ZU1lbW9yeSgmcFdpcmVsZXNzUGt0W1RYV0lfU0laRSArIFRYSU5GT19TSVpFXSwKLQkJCSAgICAgICAmcEFkLT5OdWxsRnJhbWUsIHNpemVvZihzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSkpOwotCQlwQWQtPk51bGxDb250ZXh0LkJ1bGtPdXRTaXplID0KLQkJICAgIFRYSU5GT19TSVpFICsgVFhXSV9TSVpFICsgc2l6ZW9mKHBBZC0+TnVsbEZyYW1lKSArIDQ7Ci0KLQkJLyogRmlsbCBvdXQgZnJhbWUgbGVuZ3RoIGluZm9ybWF0aW9uIGZvciBnbG9iYWwgQnVsayBvdXQgYXJiaXRvciAqLwotCQkvKnBOdWxsQ29udGV4dC0+QnVsa091dFNpemUgPSBUcmFuc2ZlckJ1ZmZlckxlbmd0aDsgKi8KLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJTWU5DIC0gc2VuZCBOVUxMIEZyYW1lIEAlZCBNYnBzLi4uXG4iLAotCQkJICBSYXRlSWRUb01icHNbcEFkLT5Db21tb25DZmcuVHhSYXRlXSkpOwotCQlSVFVTQl9TRVRfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX0RBVEFfTlVMTCk7Ci0KLQkJLyogS2ljayBidWxrIG91dCAqLwotCQlSVFVTQktpY2tCdWxrT3V0KHBBZCk7Ci0JfQotCi19Ci0KLS8qCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLVJvdXRpbmUgRGVzY3JpcHRpb246Ci0gICAgR2V0IGEgcmVjZWl2ZWQgcGFja2V0LgotCi1Bcmd1bWVudHM6Ci0JcEFkCQkJCQlkZXZpY2UgY29udHJvbCBibG9jawotCXBTYXZlUnhECQkJcmVjZWl2ZSBkZXNjcmlwdG9yIGluZm9ybWF0aW9uCi0JKnBiUmVzY2hlZHVsZQkJbmVlZCByZXNjaGVkdWxlIGZsYWcKLQkqcFJ4UGVuZGluZwkJCXBlbmRpbmcgcmVjZWl2ZWQgcGFja2V0IGZsYWcKLQotUmV0dXJuIFZhbHVlOgotICAgIHRoZSByZWNlaXZlZCBwYWNrZXQKLQotTm90ZToKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgKkdldFBhY2tldEZyb21SeFJpbmcoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCSBPVVQgUFJUMjhYWF9SWERfU1RSVUMgcFNhdmVSeEQsCi0JCQkJIE9VVCBCT09MRUFOICogcGJSZXNjaGVkdWxlLAotCQkJCSBJTiB1MzIgKiBwUnhQZW5kaW5nKQotewotCXN0cnVjdCBydF9yeF9jb250ZXh0ICpwUnhDb250ZXh0OwotCXZvaWQgKnBTa2I7Ci0JdTggKnBEYXRhOwotCXVuc2lnbmVkIGxvbmcgVGhpc0ZyYW1lTGVuOwotCXVuc2lnbmVkIGxvbmcgUnhCdWZmZXJMZW5ndGg7Ci0Jc3RydWN0IHJ0X3J4d2kgKiBwUnhXSTsKLQotCXBSeENvbnRleHQgPSAmcEFkLT5SeENvbnRleHRbcEFkLT5OZXh0UnhCdWxrSW5SZWFkSW5kZXhdOwotCWlmICgocFJ4Q29udGV4dC0+UmVhZGFibGUgPT0gRkFMU0UpIHx8IChwUnhDb250ZXh0LT5JblVzZSA9PSBUUlVFKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlSeEJ1ZmZlckxlbmd0aCA9IHBSeENvbnRleHQtPkJ1bGtJbk9mZnNldCAtIHBBZC0+UmVhZFBvc2l0aW9uOwotCWlmIChSeEJ1ZmZlckxlbmd0aCA8Ci0JICAgIChSVDI4NzBfUlhETUFMRU5fRklFTERfU0laRSArIHNpemVvZihzdHJ1Y3QgcnRfcnh3aSkgKwotCSAgICAgc2l6ZW9mKHN0cnVjdCBydF9yeGluZm8pKSkgewotCQlnb3RvIGxhYmVsX251bGw7Ci0JfQotCi0JcERhdGEgPSAmcFJ4Q29udGV4dC0+VHJhbnNmZXJCdWZmZXJbcEFkLT5SZWFkUG9zaXRpb25dOwkvKiA0S0IgKi8KLQkvKiBUaGUgUlhETUEgZmllbGQgaXMgNCBieXRlcywgbm93IGp1c3QgdXNlIHRoZSBmaXJzdCAyIGJ5dGVzLiBUaGUgTGVuZ3RoIGluY2x1ZGluZyB0aGUgKFJYV0kgKyBNU0RVICsgUGFkZGluZykgKi8KLQlUaGlzRnJhbWVMZW4gPSAqcERhdGEgKyAoKihwRGF0YSArIDEpIDw8IDgpOwotCWlmIChUaGlzRnJhbWVMZW4gPT0gMCkgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIkJJUklkeCglZCk6IFJYRE1BTGVuIGlzIHplcm8uWyVsZF0sIEJ1bGtJbkJ1ZkxlbiA9ICVsZClcbiIsCi0JCQkgIHBBZC0+TmV4dFJ4QnVsa0luUmVhZEluZGV4LCBUaGlzRnJhbWVMZW4sCi0JCQkgIHBSeENvbnRleHQtPkJ1bGtJbk9mZnNldCkpOwotCQlnb3RvIGxhYmVsX251bGw7Ci0JfQotCWlmICgoVGhpc0ZyYW1lTGVuICYgMHgzKSAhPSAwKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJICgiQklSSWR4KCVkKTogUlhETUFMZW4gbm90IG11bHRpcGxlIG9mIDQuWyVsZF0sIEJ1bGtJbkJ1ZkxlbiA9ICVsZClcbiIsCi0JCQkgIHBBZC0+TmV4dFJ4QnVsa0luUmVhZEluZGV4LCBUaGlzRnJhbWVMZW4sCi0JCQkgIHBSeENvbnRleHQtPkJ1bGtJbk9mZnNldCkpOwotCQlnb3RvIGxhYmVsX251bGw7Ci0JfQotCi0JaWYgKChUaGlzRnJhbWVMZW4gKyA4KSA+IFJ4QnVmZmVyTGVuZ3RoKQkvKiA4IGZvciAoUlQyODcwX1JYRE1BTEVOX0ZJRUxEX1NJWkUgKyBzaXplb2Yoc3RydWN0IHJ0X3J4aW5mbykpICovCi0JewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIkJJUklkeCglZCk6RnJhbWVMZW4oMHglbHgpIG91dHJhbmdlcy4gQnVsa0luTGVuPTB4JWx4LCByZW1haW5pbmcgUnhCdWZMZW49MHglbHgsIFJlYWRQb3M9MHglbHhcbiIsCi0JCQkgIHBBZC0+TmV4dFJ4QnVsa0luUmVhZEluZGV4LCBUaGlzRnJhbWVMZW4sCi0JCQkgIHBSeENvbnRleHQtPkJ1bGtJbk9mZnNldCwgUnhCdWZmZXJMZW5ndGgsCi0JCQkgIHBBZC0+UmVhZFBvc2l0aW9uKSk7Ci0KLQkJLyogZXJyb3IgZnJhbWUuIGZpbmlzaCB0aGlzIGxvb3AgKi8KLQkJZ290byBsYWJlbF9udWxsOwotCX0KLQkvKiBza2lwIFVTQiBmcmFtZSBsZW5ndGggZmllbGQgKi8KLQlwRGF0YSArPSBSVDI4NzBfUlhETUFMRU5fRklFTERfU0laRTsKLQlwUnhXSSA9IChzdHJ1Y3QgcnRfcnh3aSAqKSBwRGF0YTsKLQlpZiAocFJ4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudCA+IFRoaXNGcmFtZUxlbikgewotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCSAoIiVzKCk6cFJ4V0lNUERVdG90YWxCeXRlQ291bnQoJWQpIGxhcmdlIHRoYW4gUnhETUFMZW4oJWxkKVxuIiwKLQkJCSAgX19GVU5DVElPTl9fLCBwUnhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50LAotCQkJICBUaGlzRnJhbWVMZW4pKTsKLQkJZ290byBsYWJlbF9udWxsOwotCX0KLQkvKiBhbGxvY2F0ZSBhIHJ4IHBhY2tldCAqLwotCXBTa2IgPSBkZXZfYWxsb2Nfc2tiKFRoaXNGcmFtZUxlbik7Ci0JaWYgKHBTa2IgPT0gTlVMTCkgewotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCSAoIiVzKCk6Q2Fubm90IEFsbG9jYXRlIHNrIGJ1ZmZlciBmb3IgdGhpcyBCdWxrLUluIGJ1ZmZlciFcbiIsCi0JCQkgIF9fRlVOQ1RJT05fXykpOwotCQlnb3RvIGxhYmVsX251bGw7Ci0JfQotCS8qIGNvcHkgdGhlIHJ4IHBhY2tldCAqLwotCW1lbWNweShza2JfcHV0KHBTa2IsIFRoaXNGcmFtZUxlbiksIHBEYXRhLCBUaGlzRnJhbWVMZW4pOwotCVJUUEtUX1RPX09TUEtUKHBTa2IpLT5kZXYgPSBnZXRfbmV0ZGV2X2Zyb21fYnNzaWQocEFkLCBCU1MwKTsKLQlSVE1QX1NFVF9QQUNLRVRfU09VUkNFKE9TUEtUX1RPX1JUUEtUKHBTa2IpLCBQS1RTUkNfTkRJUyk7Ci0KLQkvKiBjb3B5IFJ4RCAqLwotCSpwU2F2ZVJ4RCA9ICooc3RydWN0IHJ0X3J4aW5mbyAqKSAocERhdGEgKyBUaGlzRnJhbWVMZW4pOwotCi0JLyogdXBkYXRlIG5leHQgcGFja2V0IHJlYWQgcG9zaXRpb24uICovCi0JcEFkLT5SZWFkUG9zaXRpb24gKz0gKFRoaXNGcmFtZUxlbiArIFJUMjg3MF9SWERNQUxFTl9GSUVMRF9TSVpFICsgUlhJTkZPX1NJWkUpOwkvKiA4IGZvciAoUlQyODcwX1JYRE1BTEVOX0ZJRUxEX1NJWkUgKyBzaXplb2Yoc3RydWN0IHJ0X3J4aW5mbykpICovCi0KLQlyZXR1cm4gcFNrYjsKLQotbGFiZWxfbnVsbDoKLQotCXJldHVybiBOVUxMOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZQlEZXNjcmlwdGlvbjoKLQkJQ2hlY2sgUnggZGVzY3JpcHRvciwgcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkUgaWYgYW55IGVycm9yIGRvdW5kCi0KLQlBcmd1bWVudHM6Ci0JCXBSeEQJCVBvaW50ZXIJdG8gdGhlIFJ4IGRlc2NyaXB0b3IKLQotCVJldHVybiBWYWx1ZToKLQkJTkRJU19TVEFUVVNfU1VDQ0VTUwkJTm8gZXJyCi0JCU5ESVNfU1RBVFVTX0ZBSUxVUkUJCUVycm9yCi0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotaW50IFJUTVBDaGVja1J4RXJyb3Ioc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgICBzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSAqIHBIZWFkZXIsCi0JCQkgICAgIHN0cnVjdCBydF9yeHdpICogcFJ4V0ksIElOIFBSVDI4WFhfUlhEX1NUUlVDIHBSeElORk8pCi17Ci0Jc3RydWN0IHJ0X2NpcGhlcl9rZXkgKnBXcGFLZXk7Ci0JaW50IGRCbTsKLQotCWlmIChwQWQtPmJQcm9taXNjdW91cyA9PSBUUlVFKQotCQlyZXR1cm4gKE5ESVNfU1RBVFVTX1NVQ0NFU1MpOwotCWlmIChwUnhJTkZPID09IE5VTEwpCi0JCXJldHVybiAoTkRJU19TVEFUVVNfRkFJTFVSRSk7Ci0KLQkvKiBQaHkgZXJyb3JzICYgQ1JDIGVycm9ycyAqLwotCWlmIChwUnhJTkZPLT5DcmMpIHsKLQkJLyogQ2hlY2sgUlNTSSBmb3IgTm9pc2UgSGlzdCBzdGF0aXN0aWMgY29sbGVjdGlvbi4gKi8KLQkJZEJtID0gKGludCkocFJ4V0ktPlJTU0kwKSAtIHBBZC0+QmJwUnNzaVRvRGJtRGVsdGE7Ci0JCWlmIChkQm0gPD0gLTg3KQotCQkJcEFkLT5TdGFDZmcuUlBJRGVuc2l0eVswXSArPSAxOwotCQllbHNlIGlmIChkQm0gPD0gLTgyKQotCQkJcEFkLT5TdGFDZmcuUlBJRGVuc2l0eVsxXSArPSAxOwotCQllbHNlIGlmIChkQm0gPD0gLTc3KQotCQkJcEFkLT5TdGFDZmcuUlBJRGVuc2l0eVsyXSArPSAxOwotCQllbHNlIGlmIChkQm0gPD0gLTcyKQotCQkJcEFkLT5TdGFDZmcuUlBJRGVuc2l0eVszXSArPSAxOwotCQllbHNlIGlmIChkQm0gPD0gLTY3KQotCQkJcEFkLT5TdGFDZmcuUlBJRGVuc2l0eVs0XSArPSAxOwotCQllbHNlIGlmIChkQm0gPD0gLTYyKQotCQkJcEFkLT5TdGFDZmcuUlBJRGVuc2l0eVs1XSArPSAxOwotCQllbHNlIGlmIChkQm0gPD0gLTU3KQotCQkJcEFkLT5TdGFDZmcuUlBJRGVuc2l0eVs2XSArPSAxOwotCQllbHNlIGlmIChkQm0gPiAtNTcpCi0JCQlwQWQtPlN0YUNmZy5SUElEZW5zaXR5WzddICs9IDE7Ci0KLQkJcmV0dXJuIChORElTX1NUQVRVU19GQUlMVVJFKTsKLQl9Ci0JLyogQWRkIFJ4IHNpemUgdG8gY2hhbm5lbCBsb2FkIGNvdW50ZXIsIHdlIHNob3VsZCBpZ25vcmUgZXJyb3IgY291bnRzICovCi0JcEFkLT5TdGFDZmcuQ0xCdXN5Qnl0ZXMgKz0gKHBSeFdJLT5NUERVdG90YWxCeXRlQ291bnQgKyAxNCk7Ci0KLQkvKiBEcm9wIFRvRHMgcHJvbWlzY3VvdXMgZnJhbWUsIGl0IGlzIG9wZW5lZCBkdWUgdG8gQ0NYIDIgY2hhbm5lbCBsb2FkIHN0YXRpc3RpY3MgKi8KLQlpZiAocEhlYWRlci0+RkMuVG9EcykgewotCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICgiRXJyO0ZDLlRvRHNcbiIpKTsKLQkJcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7Ci0JfQotCS8qIFBhdWwgMDQtMDMgZm9yIE9GRE0gUnggbGVuZ3RoIGlzc3VlICovCi0JaWYgKHBSeFdJLT5NUERVdG90YWxCeXRlQ291bnQgPiBNQVhfQUdHUkVHQVRJT05fU0laRSkgewotCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICgicmVjZWl2ZWQgcGFja2V0IHRvbyBsb25nXG4iKSk7Ci0JCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOwotCX0KLQkvKiBEcm9wIG5vdCBVMk0gZnJhbWVzLCBjYW4ndCBkcm9wIGhlcmUgYmVjYXVzZSB3ZSB3aWxsIGRyb3AgYmVhY29uIGluIHRoaXMgY2FzZSAqLwotCS8qIEkgYW0ga2luZCBvZiBkb3VidGluZyB0aGUgVTJNIGJpdCBvcGVyYXRpb24gKi8KLQkvKiBpZiAocFJ4RC0+VTJNID09IDApICovCi0JLyogICAgICByZXR1cm4oTkRJU19TVEFUVVNfRkFJTFVSRSk7ICovCi0KLQkvKiBkcm9wIGRlY3lwdGlvbiBmYWlsIGZyYW1lICovCi0JaWYgKHBSeElORk8tPkRlY3J5cHRlZCAmJiBwUnhJTkZPLT5DaXBoZXJFcnIpIHsKLQotCQlpZiAoKChwUnhJTkZPLT5DaXBoZXJFcnIgJiAxKSA9PSAxKQotCQkgICAgJiYgcEFkLT5Db21tb25DZmcuYldpcmVsZXNzRXZlbnQgJiYgSU5GUkFfT04ocEFkKSkKLQkJCVJUTVBTZW5kV2lyZWxlc3NFdmVudChwQWQsIElXX0lDVl9FUlJPUl9FVkVOVF9GTEFHLAotCQkJCQkgICAgICBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLgotCQkJCQkgICAgICBBZGRyLCBCU1MwLCAwKTsKLQotCQlpZiAoKChwUnhJTkZPLT5DaXBoZXJFcnIgJiAyKSA9PSAyKQotCQkgICAgJiYgcEFkLT5Db21tb25DZmcuYldpcmVsZXNzRXZlbnQgJiYgSU5GUkFfT04ocEFkKSkKLQkJCVJUTVBTZW5kV2lyZWxlc3NFdmVudChwQWQsIElXX01JQ19FUlJPUl9FVkVOVF9GTEFHLAotCQkJCQkgICAgICBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLgotCQkJCQkgICAgICBBZGRyLCBCU1MwLCAwKTsKLQkJLyogKi8KLQkJLyogTUlDIEVycm9yICovCi0JCS8qICovCi0JCWlmICgocFJ4SU5GTy0+Q2lwaGVyRXJyID09IDIpICYmIHBSeElORk8tPk15QnNzKSB7Ci0JCQlwV3BhS2V5ID0gJnBBZC0+U2hhcmVkS2V5W0JTUzBdW3BSeFdJLT5LZXlJbmRleF07Ci0JCQlSVE1QUmVwb3J0TWljRXJyb3IocEFkLCBwV3BhS2V5KTsKLQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJSeCBNSUMgVmFsdWUgZXJyb3JcbiIpKTsKLQkJfQotCi0JCWlmIChwUnhJTkZPLT5EZWNyeXB0ZWQgJiYKLQkJICAgIChwQWQtPlNoYXJlZEtleVtCU1MwXVtwUnhXSS0+S2V5SW5kZXhdLkNpcGhlckFsZyA9PQotCQkgICAgIENJUEhFUl9BRVMpCi0JCSAgICAmJiAocEhlYWRlci0+U2VxdWVuY2UgPT0gcEFkLT5GcmFnRnJhbWUuU2VxdWVuY2UpKSB7Ci0JCQkvKiAqLwotCQkJLyogQWNjZXB0YWJsZSBzaW5jZSB0aGUgRmlyc3QgRnJhZ0ZyYW1lIG5vIENpcGhlckVyciBwcm9ibGVtLiAqLwotCQkJLyogKi8KLQkJCXJldHVybiAoTkRJU19TVEFUVVNfU1VDQ0VTUyk7Ci0JCX0KLQotCQlyZXR1cm4gKE5ESVNfU1RBVFVTX0ZBSUxVUkUpOwotCX0KLQotCXJldHVybiAoTkRJU19TVEFUVVNfU1VDQ0VTUyk7Ci19Ci0KLXZvaWQgUnRtcFVzYlN0YUFzaWNGb3JjZVdha2V1cFRpbWVvdXQodm9pZCAqU3lzdGVtU3BlY2lmaWMxLAotCQkJCSAgICAgIHZvaWQgKkZ1bmN0aW9uQ29udGV4dCwKLQkJCQkgICAgICB2b2lkICpTeXN0ZW1TcGVjaWZpYzIsCi0JCQkJICAgICAgdm9pZCAqU3lzdGVtU3BlY2lmaWMzKQotewotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCA9IChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICopRnVuY3Rpb25Db250ZXh0OwotCi0JaWYgKHBBZCAmJiBwQWQtPk1sbWUuQXV0b1dha2V1cFRpbWVyUnVubmluZykgewotCQlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4MzEsIDB4ZmYsIDB4MDAsIDB4MDIpOwotCi0JCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpOwotCQlwQWQtPk1sbWUuQXV0b1dha2V1cFRpbWVyUnVubmluZyA9IEZBTFNFOwotCX0KLX0KLQotdm9pZCBSVDI4eHhVc2JTdGFBc2ljRm9yY2VXYWtldXAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBJTiBCT09MRUFOIGJGcm9tVHgpCi17Ci0JQk9PTEVBTiBDYW5jZWxlZDsKLQotCWlmIChwQWQtPk1sbWUuQXV0b1dha2V1cFRpbWVyUnVubmluZykKLQkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWUuQXV0b1dha2V1cFRpbWVyLCAmQ2FuY2VsZWQpOwotCi0JQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDMxLCAweGZmLCAweDAwLCAweDAyKTsKLQotCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpOwotfQotCi12b2lkIFJUMjh4eFVzYlN0YUFzaWNTbGVlcFRoZW5BdXRvV2FrZXVwKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkJIHUxNiBUYnR0TnVtVG9OZXh0V2FrZVVwKQotewotCi0JLyogd2UgaGF2ZSBkZWNpZGVkIHRvIFNMRUVQLCBzbyBhdCBsZWFzdCBkbyBpdCBmb3IgYSBCRUFDT04gcGVyaW9kLiAqLwotCWlmIChUYnR0TnVtVG9OZXh0V2FrZVVwID09IDApCi0JCVRidHROdW1Ub05leHRXYWtlVXAgPSAxOwotCi0JUlRNUFNldFRpbWVyKCZwQWQtPk1sbWUuQXV0b1dha2V1cFRpbWVyLCBBVVRPX1dBS0VVUF9USU1FT1VUKTsKLQlwQWQtPk1sbWUuQXV0b1dha2V1cFRpbWVyUnVubmluZyA9IFRSVUU7Ci0KLQlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4MzAsIDB4ZmYsIDB4ZmYsIDB4MDIpOwkvKiBzZW5kIFBPV0VSLVNBVkUgY29tbWFuZCB0byBNQ1UuIFRpbWVvdXQgNDB1cy4gKi8KLQotCU9QU1RBVFVTX1NFVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKTsKLQotfQotCi0jZW5kaWYgLyogUlRNUF9NQUNfVVNCIC8vICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1faW5mby5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2luZm8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjUzMDJlOC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1faW5mby5jCisrKyAvZGV2L251bGwKQEAgLTEsOTU1ICswLDAgQEAKLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUmFsaW5rIFRlY2ggSW5jLgotICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAotICogSHNpbmNodSBDb3VudHkgMzAyLAotICogVGFpd2FuLCBSLk8uQy4KLSAqCi0gKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQkJUmVtb3ZlIFdQQSBLZXkgcHJvY2VzcwotCi0JQXJndW1lbnRzOgotCQlwQWQgCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCi0JCXBCdWYJCQkJCQkJUG9pbnRlciB0byB0aGUgd2hlcmUgdGhlIGtleSBzdG9yZWQKLQotCVJldHVybiBWYWx1ZToKLQkJTkRJU19TVUNDRVNTCQkJCQlBZGQga2V5IHN1Y2Nlc3NmdWxseQotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBSVE1QU2V0RGVzaXJlZFJhdGVzKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZGFwdGVyLCBsb25nIFJhdGVzKQotewotCU5ESVNfODAyXzExX1JBVEVTIGFyeVJhdGVzOwotCi0JbWVtc2V0KCZhcnlSYXRlcywgMHgwMCwgc2l6ZW9mKE5ESVNfODAyXzExX1JBVEVTKSk7Ci0Jc3dpdGNoIChwQWRhcHRlci0+Q29tbW9uQ2ZnLlBoeU1vZGUpIHsKLQljYXNlIFBIWV8xMUE6CQkvKiBBIG9ubHkgKi8KLQkJc3dpdGNoIChSYXRlcykgewotCQljYXNlIDYwMDAwMDA6CS8qNk0gKi8KLQkJCWFyeVJhdGVzWzBdID0gMHgwYzsJLyogNk0gKi8KLQkJCXBBZGFwdGVyLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPQotCQkJICAgIE1DU18wOwotCQkJYnJlYWs7Ci0JCWNhc2UgOTAwMDAwMDoJLyo5TSAqLwotCQkJYXJ5UmF0ZXNbMF0gPSAweDEyOwkvKiA5TSAqLwotCQkJcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9Ci0JCQkgICAgTUNTXzE7Ci0JCQlicmVhazsKLQkJY2FzZSAxMjAwMDAwMDoJLyoxMk0gKi8KLQkJCWFyeVJhdGVzWzBdID0gMHgxODsJLyogMTJNICovCi0JCQlwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0KLQkJCSAgICBNQ1NfMjsKLQkJCWJyZWFrOwotCQljYXNlIDE4MDAwMDAwOgkvKjE4TSAqLwotCQkJYXJ5UmF0ZXNbMF0gPSAweDI0OwkvKiAxOE0gKi8KLQkJCXBBZGFwdGVyLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPQotCQkJICAgIE1DU18zOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjQwMDAwMDA6CS8qMjRNICovCi0JCQlhcnlSYXRlc1swXSA9IDB4MzA7CS8qIDI0TSAqLwotCQkJcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9Ci0JCQkgICAgTUNTXzQ7Ci0JCQlicmVhazsKLQkJY2FzZSAzNjAwMDAwMDoJLyozNk0gKi8KLQkJCWFyeVJhdGVzWzBdID0gMHg0ODsJLyogMzZNICovCi0JCQlwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0KLQkJCSAgICBNQ1NfNTsKLQkJCWJyZWFrOwotCQljYXNlIDQ4MDAwMDAwOgkvKjQ4TSAqLwotCQkJYXJ5UmF0ZXNbMF0gPSAweDYwOwkvKiA0OE0gKi8KLQkJCXBBZGFwdGVyLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPQotCQkJICAgIE1DU182OwotCQkJYnJlYWs7Ci0JCWNhc2UgNTQwMDAwMDA6CS8qNTRNICovCi0JCQlhcnlSYXRlc1swXSA9IDB4NmM7CS8qIDU0TSAqLwotCQkJcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9Ci0JCQkgICAgTUNTXzc7Ci0JCQlicmVhazsKLQkJY2FzZSAtMToJLypBdXRvICovCi0JCWRlZmF1bHQ6Ci0JCQlhcnlSYXRlc1swXSA9IDB4NmM7CS8qIDU0TWJwcyAqLwotCQkJYXJ5UmF0ZXNbMV0gPSAweDYwOwkvKiA0OE1icHMgKi8KLQkJCWFyeVJhdGVzWzJdID0gMHg0ODsJLyogMzZNYnBzICovCi0JCQlhcnlSYXRlc1szXSA9IDB4MzA7CS8qIDI0TWJwcyAqLwotCQkJYXJ5UmF0ZXNbNF0gPSAweDI0OwkvKiAxOE0gKi8KLQkJCWFyeVJhdGVzWzVdID0gMHgxODsJLyogMTJNICovCi0JCQlhcnlSYXRlc1s2XSA9IDB4MTI7CS8qIDlNICovCi0JCQlhcnlSYXRlc1s3XSA9IDB4MGM7CS8qIDZNICovCi0JCQlwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0KLQkJCSAgICBNQ1NfQVVUTzsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgUEhZXzExQkdfTUlYRUQ6CS8qIEIvRyBNaXhlZCAqLwotCWNhc2UgUEhZXzExQjoJCS8qIEIgb25seSAqLwotCWNhc2UgUEhZXzExQUJHX01JWEVEOgkvKiBBL0IvRyBNaXhlZCAqLwotCWRlZmF1bHQ6Ci0JCXN3aXRjaCAoUmF0ZXMpIHsKLQkJY2FzZSAxMDAwMDAwOgkvKjFNICovCi0JCQlhcnlSYXRlc1swXSA9IDB4MDI7Ci0JCQlwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0KLQkJCSAgICBNQ1NfMDsKLQkJCWJyZWFrOwotCQljYXNlIDIwMDAwMDA6CS8qMk0gKi8KLQkJCWFyeVJhdGVzWzBdID0gMHgwNDsKLQkJCXBBZGFwdGVyLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPQotCQkJICAgIE1DU18xOwotCQkJYnJlYWs7Ci0JCWNhc2UgNTAwMDAwMDoJLyo1LjVNICovCi0JCQlhcnlSYXRlc1swXSA9IDB4MGI7CS8qIDUuNU0gKi8KLQkJCXBBZGFwdGVyLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPQotCQkJICAgIE1DU18yOwotCQkJYnJlYWs7Ci0JCWNhc2UgMTEwMDAwMDA6CS8qMTFNICovCi0JCQlhcnlSYXRlc1swXSA9IDB4MTY7CS8qIDExTSAqLwotCQkJcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9Ci0JCQkgICAgTUNTXzM7Ci0JCQlicmVhazsKLQkJY2FzZSA2MDAwMDAwOgkvKjZNICovCi0JCQlhcnlSYXRlc1swXSA9IDB4MGM7CS8qIDZNICovCi0JCQlwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0KLQkJCSAgICBNQ1NfMDsKLQkJCWJyZWFrOwotCQljYXNlIDkwMDAwMDA6CS8qOU0gKi8KLQkJCWFyeVJhdGVzWzBdID0gMHgxMjsJLyogOU0gKi8KLQkJCXBBZGFwdGVyLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPQotCQkJICAgIE1DU18xOwotCQkJYnJlYWs7Ci0JCWNhc2UgMTIwMDAwMDA6CS8qMTJNICovCi0JCQlhcnlSYXRlc1swXSA9IDB4MTg7CS8qIDEyTSAqLwotCQkJcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9Ci0JCQkgICAgTUNTXzI7Ci0JCQlicmVhazsKLQkJY2FzZSAxODAwMDAwMDoJLyoxOE0gKi8KLQkJCWFyeVJhdGVzWzBdID0gMHgyNDsJLyogMThNICovCi0JCQlwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0KLQkJCSAgICBNQ1NfMzsKLQkJCWJyZWFrOwotCQljYXNlIDI0MDAwMDAwOgkvKjI0TSAqLwotCQkJYXJ5UmF0ZXNbMF0gPSAweDMwOwkvKiAyNE0gKi8KLQkJCXBBZGFwdGVyLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPQotCQkJICAgIE1DU180OwotCQkJYnJlYWs7Ci0JCWNhc2UgMzYwMDAwMDA6CS8qMzZNICovCi0JCQlhcnlSYXRlc1swXSA9IDB4NDg7CS8qIDM2TSAqLwotCQkJcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9Ci0JCQkgICAgTUNTXzU7Ci0JCQlicmVhazsKLQkJY2FzZSA0ODAwMDAwMDoJLyo0OE0gKi8KLQkJCWFyeVJhdGVzWzBdID0gMHg2MDsJLyogNDhNICovCi0JCQlwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0KLQkJCSAgICBNQ1NfNjsKLQkJCWJyZWFrOwotCQljYXNlIDU0MDAwMDAwOgkvKjU0TSAqLwotCQkJYXJ5UmF0ZXNbMF0gPSAweDZjOwkvKiA1NE0gKi8KLQkJCXBBZGFwdGVyLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPQotCQkJICAgIE1DU183OwotCQkJYnJlYWs7Ci0JCWNhc2UgLTE6CS8qQXV0byAqLwotCQlkZWZhdWx0OgotCQkJaWYgKHBBZGFwdGVyLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFCKSB7CS8qQiBPbmx5ICovCi0JCQkJYXJ5UmF0ZXNbMF0gPSAweDE2OwkvKiAxMU1icHMgKi8KLQkJCQlhcnlSYXRlc1sxXSA9IDB4MGI7CS8qIDUuNU1icHMgKi8KLQkJCQlhcnlSYXRlc1syXSA9IDB4MDQ7CS8qIDJNYnBzICovCi0JCQkJYXJ5UmF0ZXNbM10gPSAweDAyOwkvKiAxTWJwcyAqLwotCQkJfSBlbHNlIHsJLyooQi9HKSBNaXhlZCBvciAoQS9CL0cpIE1peGVkICovCi0JCQkJYXJ5UmF0ZXNbMF0gPSAweDZjOwkvKiA1NE1icHMgKi8KLQkJCQlhcnlSYXRlc1sxXSA9IDB4NjA7CS8qIDQ4TWJwcyAqLwotCQkJCWFyeVJhdGVzWzJdID0gMHg0ODsJLyogMzZNYnBzICovCi0JCQkJYXJ5UmF0ZXNbM10gPSAweDMwOwkvKiAyNE1icHMgKi8KLQkJCQlhcnlSYXRlc1s0XSA9IDB4MTY7CS8qIDExTWJwcyAqLwotCQkJCWFyeVJhdGVzWzVdID0gMHgwYjsJLyogNS41TWJwcyAqLwotCQkJCWFyeVJhdGVzWzZdID0gMHgwNDsJLyogMk1icHMgKi8KLQkJCQlhcnlSYXRlc1s3XSA9IDB4MDI7CS8qIDFNYnBzICovCi0JCQl9Ci0JCQlwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0KLQkJCSAgICBNQ1NfQVVUTzsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCU5kaXNaZXJvTWVtb3J5KHBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlUmF0ZSwKLQkJICAgICAgIE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTKTsKLQlOZGlzTW92ZU1lbW9yeShwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGUsICZhcnlSYXRlcywKLQkJICAgICAgIHNpemVvZihORElTXzgwMl8xMV9SQVRFUykpOwotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCIgUlRNUFNldERlc2lyZWRSYXRlcyAoJTAyeCwlMDJ4LCUwMngsJTAyeCwlMDJ4LCUwMngsJTAyeCwlMDJ4KVxuIiwKLQkJICBwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbMF0sCi0JCSAgcEFkYXB0ZXItPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzFdLAotCQkgIHBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlUmF0ZVsyXSwKLQkJICBwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbM10sCi0JCSAgcEFkYXB0ZXItPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzRdLAotCQkgIHBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlUmF0ZVs1XSwKLQkJICBwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbNl0sCi0JCSAgcEFkYXB0ZXItPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzddKSk7Ci0JLyogQ2hhbmdpbmcgRGVzaXJlZFJhdGUgbWF5IGFmZmVjdCB0aGUgTUFYIFRYIHJhdGUgd2UgdXNlZCB0byBUWCBmcmFtZXMgb3V0ICovCi0JTWxtZVVwZGF0ZVR4UmF0ZXMocEFkYXB0ZXIsIEZBTFNFLCAwKTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JCVJlbW92ZSBBbGwgV1BBIEtleXMKLQotCUFyZ3VtZW50czoKLQkJcEFkIAkJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgotCi0JUmV0dXJuIFZhbHVlOgotCQlOb25lCi0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFJUTVBXUEFSZW1vdmVBbGxLZXlzKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQotCXU4IGk7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJICgiUlRNUFdQQVJlbW92ZUFsbEtleXMoQXV0aE1vZGU9JWQsIFdlcFN0YXR1cz0lZClcbiIsCi0JCSAgcEFkLT5TdGFDZmcuQXV0aE1vZGUsIHBBZC0+U3RhQ2ZnLldlcFN0YXR1cykpOwotCVJUTVBfQ0xFQVJfUFNGTEFHKHBBZCwgZlJUTVBfUFNfQ0FOX0dPX1NMRUVQKTsKLQkvKiBGb3IgV0VQL0NLSVAsIHRoZXJlIGlzIG5vIG5lZWQgdG8gcmVtb3ZlIGl0LCBzaW5jZSBXaW5YUCB3b24ndCBzZXQgaXQgYWdhaW4gYWZ0ZXIgKi8KLQkvKiBMaW5rIHVwLiBBbmQgaXQgd2lsbCBiZSByZXBsYWNlZCBpZiB1c2VyIGNoYW5nZWQgaXQuICovCi0JaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlIDwgTmRpczgwMl8xMUF1dGhNb2RlV1BBKQotCQlyZXR1cm47Ci0KLQkvKiBGb3IgV1BBLU5vbmUsIHRoZXJlIGlzIG5vIG5lZWQgdG8gcmVtb3ZlIGl0LCBzaW5jZSBXaW5YUCB3b24ndCBzZXQgaXQgYWdhaW4gYWZ0ZXIgKi8KLQkvKiBMaW5rIHVwLiBBbmQgaXQgd2lsbCBiZSByZXBsYWNlZCBpZiB1c2VyIGNoYW5nZWQgaXQuICovCi0JaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmUpCi0JCXJldHVybjsKLQotCS8qIHNldCBCU1NJRCB3Y2lkIGVudHJ5IG9mIHRoZSBQYWlyLXdpc2UgS2V5IHRhYmxlIGFzIG5vLXNlY3VyaXR5IG1vZGUgKi8KLQlBc2ljUmVtb3ZlUGFpcndpc2VLZXlFbnRyeShwQWQsIEJTUzAsIEJTU0lEX1dDSUQpOwotCi0JLyogc2V0IGFsbCBzaGFyZWQga2V5IG1vZGUgYXMgbm8tc2VjdXJpdHkuICovCi0JZm9yIChpID0gMDsgaSA8IFNIQVJFX0tFWV9OVU07IGkrKykgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoInJlbW92ZSAlcyBrZXkgIyVkXG4iLAotCQkJICBDaXBoZXJOYW1lW3BBZC0+U2hhcmVkS2V5W0JTUzBdW2ldLkNpcGhlckFsZ10sIGkpKTsKLQkJTmRpc1plcm9NZW1vcnkoJnBBZC0+U2hhcmVkS2V5W0JTUzBdW2ldLCBzaXplb2Yoc3RydWN0IHJ0X2NpcGhlcl9rZXkpKTsKLQotCQlBc2ljUmVtb3ZlU2hhcmVkS2V5RW50cnkocEFkLCBCU1MwLCBpKTsKLQl9Ci0JUlRNUF9TRVRfUFNGTEFHKHBBZCwgZlJUTVBfUFNfQ0FOX0dPX1NMRUVQKTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JCUFzIFNUQSdzIEJTU0lEIGlzIGEgV0MgdG9vLCBpdCB1c2VzIHNoYXJlZCBrZXkgdGFibGUuCi0JCVRoaXMgZnVuY3Rpb24gd3JpdGUgY29ycmVjdCB1bmljYXN0IFRYIGtleSB0byBBU0lDIFdDSUQuCi0JCUFuZCB3ZSBzdGlsbCBtYWtlIGEgY29weSBpbiBvdXIgTWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uUGFpcndpc2VLZXkuCi0JCUNhbGxlciBndWFyYW50ZWUgVEtJUC9BRVMgYWx3YXlzIGhhcyBrZXlpZHggPSAwLiAocGFpcndpc2Uga2V5KQotCQlDYWxsZXIgZ3VhcmFudGVlIFdFUCBjYWxscyB0aGlzIGZ1bmN0aW9uIHdoZW4gc2V0IFR4a2V5LCAgZGVmYXVsdCBrZXkgaW5kZXg9MH4zLgotCi0JQXJndW1lbnRzOgotCQlwQWQJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKLQkJcEtleQkJCQkJCQlQb2ludGVyIHRvIHRoZSB3aGVyZSB0aGUga2V5IHN0b3JlZAotCi0JUmV0dXJuIFZhbHVlOgotCQlORElTX1NVQ0NFU1MJCQkJCUFkZCBrZXkgc3VjY2Vzc2Z1bGx5Ci0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JCUNoYW5nZSBOSUMgUEhZIG1vZGUuIFJlLWFzc29jaWF0aW9uIG1heSBiZSBuZWNlc3NhcnkuIHBvc3NpYmxlIHNldHRpbmdzCi0JCWluY2x1ZGUgLSBQSFlfMTFCLCBQSFlfMTFCR19NSVhFRCwgUEhZXzExQSwgYW5kIFBIWV8xMUFCR19NSVhFRAotCi0JQXJndW1lbnRzOgotCQlwQWQgLSBQb2ludGVyIHRvIG91ciBhZGFwdGVyCi0JCXBoeW1vZGUgIC0KLQotCUlSUUwgPSBQQVNTSVZFX0xFVkVMCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFJUTVBTZXRQaHlNb2RlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdW5zaWduZWQgbG9uZyBwaHltb2RlKQotewotCWludCBpOwotCS8qIHRoZSBzZWxlY3RlZCBwaHltb2RlIG11c3QgYmUgc3VwcG9ydGVkIGJ5IHRoZSBSRiBJQyBlbmNvZGVkIGluIEUyUFJPTSAqLwotCi0JLyogaWYgbm8gY2hhbmdlLCBkbyBub3RoaW5nICovCi0JLyogYnVnIGZpeAotCSAgIGlmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IHBoeW1vZGUpCi0JICAgcmV0dXJuOwotCSAqLwotCXBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPSAodTgpcGh5bW9kZTsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCJSVE1QU2V0UGh5TW9kZSA6IFBoeU1vZGU9JWQsIGNoYW5uZWw9JWQgXG4iLAotCQkgIHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpKTsKLQotCUJ1aWxkQ2hhbm5lbExpc3QocEFkKTsKLQotCS8qIHNhbml0eSBjaGVjayB1c2VyIHNldHRpbmcgKi8KLQlmb3IgKGkgPSAwOyBpIDwgcEFkLT5DaGFubmVsTGlzdE51bTsgaSsrKSB7Ci0JCWlmIChwQWQtPkNvbW1vbkNmZy5DaGFubmVsID09IHBBZC0+Q2hhbm5lbExpc3RbaV0uQ2hhbm5lbCkKLQkJCWJyZWFrOwotCX0KLQotCWlmIChpID09IHBBZC0+Q2hhbm5lbExpc3ROdW0pIHsKLQkJcEFkLT5Db21tb25DZmcuQ2hhbm5lbCA9IEZpcnN0Q2hhbm5lbChwQWQpOwotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCSAoIlJUTVBTZXRQaHlNb2RlOiBjaGFubmVsIGlzIG91dCBvZiByYW5nZSwgdXNlIGZpcnN0IGNoYW5uZWw9JWQgXG4iLAotCQkJICBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKSk7Ci0JfQotCi0JTmRpc1plcm9NZW1vcnkocEFkLT5Db21tb25DZmcuU3VwUmF0ZSwgTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVMpOwotCU5kaXNaZXJvTWVtb3J5KHBBZC0+Q29tbW9uQ2ZnLkV4dFJhdGUsIE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTKTsKLQlOZGlzWmVyb01lbW9yeShwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlLCBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUyk7Ci0Jc3dpdGNoIChwaHltb2RlKSB7Ci0JY2FzZSBQSFlfMTFCOgotCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlWzBdID0gMHg4MjsJLyogMSBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcywgYmFzaWMgcmF0ZSAqLwotCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlWzFdID0gMHg4NDsJLyogMiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcywgYmFzaWMgcmF0ZSAqLwotCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlWzJdID0gMHg4QjsJLyogNS41IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzLCBiYXNpYyByYXRlICovCi0JCXBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVbM10gPSAweDk2OwkvKiAxMSBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcywgYmFzaWMgcmF0ZSAqLwotCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlTGVuID0gNDsKLQkJcEFkLT5Db21tb25DZmcuRXh0UmF0ZUxlbiA9IDA7Ci0JCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbMF0gPSAyOwkvKiAxIG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzICovCi0JCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbMV0gPSA0OwkvKiAyIG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzICovCi0JCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbMl0gPSAxMTsJLyogNS41IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzICovCi0JCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbM10gPSAyMjsJLyogMTEgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMgKi8KLQkJLypwQWQtPkNvbW1vbkNmZy5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfQ0NLOyAvLyBUaGlzIE1PREUgaXMgb25seSBGWUkuIG5vdCB1c2UgKi8KLQkJYnJlYWs7Ci0KLQljYXNlIFBIWV8xMUc6Ci0JY2FzZSBQSFlfMTFCR19NSVhFRDoKLQljYXNlIFBIWV8xMUFCR19NSVhFRDoKLQljYXNlIFBIWV8xMU5fMl80RzoKLQljYXNlIFBIWV8xMUFCR05fTUlYRUQ6Ci0JY2FzZSBQSFlfMTFCR05fTUlYRUQ6Ci0JY2FzZSBQSFlfMTFHTl9NSVhFRDoKLQkJcEFkLT5Db21tb25DZmcuU3VwUmF0ZVswXSA9IDB4ODI7CS8qIDEgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMsIGJhc2ljIHJhdGUgKi8KLQkJcEFkLT5Db21tb25DZmcuU3VwUmF0ZVsxXSA9IDB4ODQ7CS8qIDIgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMsIGJhc2ljIHJhdGUgKi8KLQkJcEFkLT5Db21tb25DZmcuU3VwUmF0ZVsyXSA9IDB4OEI7CS8qIDUuNSBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcywgYmFzaWMgcmF0ZSAqLwotCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlWzNdID0gMHg5NjsJLyogMTEgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMsIGJhc2ljIHJhdGUgKi8KLQkJcEFkLT5Db21tb25DZmcuU3VwUmF0ZVs0XSA9IDB4MTI7CS8qIDkgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMgKi8KLQkJcEFkLT5Db21tb25DZmcuU3VwUmF0ZVs1XSA9IDB4MjQ7CS8qIDE4IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzICovCi0JCXBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVbNl0gPSAweDQ4OwkvKiAzNiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcyAqLwotCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlWzddID0gMHg2YzsJLyogNTQgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMgKi8KLQkJcEFkLT5Db21tb25DZmcuU3VwUmF0ZUxlbiA9IDg7Ci0JCXBBZC0+Q29tbW9uQ2ZnLkV4dFJhdGVbMF0gPSAweDBDOwkvKiA2IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzICovCi0JCXBBZC0+Q29tbW9uQ2ZnLkV4dFJhdGVbMV0gPSAweDE4OwkvKiAxMiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcyAqLwotCQlwQWQtPkNvbW1vbkNmZy5FeHRSYXRlWzJdID0gMHgzMDsJLyogMjQgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMgKi8KLQkJcEFkLT5Db21tb25DZmcuRXh0UmF0ZVszXSA9IDB4NjA7CS8qIDQ4IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzICovCi0JCXBBZC0+Q29tbW9uQ2ZnLkV4dFJhdGVMZW4gPSA0OwotCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzBdID0gMjsJLyogMSBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcyAqLwotCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzFdID0gNDsJLyogMiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcyAqLwotCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzJdID0gMTE7CS8qIDUuNSBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcyAqLwotCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzNdID0gMjI7CS8qIDExIG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzICovCi0JCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbNF0gPSAxMjsJLyogNiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcyAqLwotCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzVdID0gMTg7CS8qIDkgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMgKi8KLQkJcEFkLT5Db21tb25DZmcuRGVzaXJlUmF0ZVs2XSA9IDI0OwkvKiAxMiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcyAqLwotCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzddID0gMzY7CS8qIDE4IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzICovCi0JCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbOF0gPSA0ODsJLyogMjQgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMgKi8KLQkJcEFkLT5Db21tb25DZmcuRGVzaXJlUmF0ZVs5XSA9IDcyOwkvKiAzNiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcyAqLwotCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzEwXSA9IDk2OwkvKiA0OCBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcyAqLwotCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzExXSA9IDEwODsJLyogNTQgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMgKi8KLQkJYnJlYWs7Ci0KLQljYXNlIFBIWV8xMUE6Ci0JY2FzZSBQSFlfMTFBTl9NSVhFRDoKLQljYXNlIFBIWV8xMUFHTl9NSVhFRDoKLQljYXNlIFBIWV8xMU5fNUc6Ci0JCXBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVbMF0gPSAweDhDOwkvKiA2IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzLCBiYXNpYyByYXRlICovCi0JCXBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVbMV0gPSAweDEyOwkvKiA5IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzICovCi0JCXBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVbMl0gPSAweDk4OwkvKiAxMiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcywgYmFzaWMgcmF0ZSAqLwotCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlWzNdID0gMHgyNDsJLyogMTggbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMgKi8KLQkJcEFkLT5Db21tb25DZmcuU3VwUmF0ZVs0XSA9IDB4YjA7CS8qIDI0IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzLCBiYXNpYyByYXRlICovCi0JCXBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVbNV0gPSAweDQ4OwkvKiAzNiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcyAqLwotCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlWzZdID0gMHg2MDsJLyogNDggbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMgKi8KLQkJcEFkLT5Db21tb25DZmcuU3VwUmF0ZVs3XSA9IDB4NmM7CS8qIDU0IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzICovCi0JCXBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVMZW4gPSA4OwotCQlwQWQtPkNvbW1vbkNmZy5FeHRSYXRlTGVuID0gMDsKLQkJcEFkLT5Db21tb25DZmcuRGVzaXJlUmF0ZVswXSA9IDEyOwkvKiA2IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzICovCi0JCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbMV0gPSAxODsJLyogOSBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcyAqLwotCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzJdID0gMjQ7CS8qIDEyIG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzICovCi0JCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbM10gPSAzNjsJLyogMTggbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMgKi8KLQkJcEFkLT5Db21tb25DZmcuRGVzaXJlUmF0ZVs0XSA9IDQ4OwkvKiAyNCBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcyAqLwotCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzVdID0gNzI7CS8qIDM2IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzICovCi0JCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbNl0gPSA5NjsJLyogNDggbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMgKi8KLQkJcEFkLT5Db21tb25DZmcuRGVzaXJlUmF0ZVs3XSA9IDEwODsJLyogNTQgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMgKi8KLQkJLypwQWQtPkNvbW1vbkNmZy5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfT0ZETTsgLy8gVGhpcyBNT0RFIGlzIG9ubHkgRllJLiBub3QgdXNlICovCi0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JcEFkLT5Db21tb25DZmcuQmFuZFN0YXRlID0gVU5LTk9XTl9CQU5EOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JCUNhbGxlciBlbnN1cmVzIHdlIGhhcyA4MDIuMTFuIHN1cHBvcnQuCi0JCUNhbGxzIGF0IHNldHRpbmcgSFQgZnJvbSBBUC9TVEFTZXRpbmZvcm1hdGlvbgotCi0JQXJndW1lbnRzOgotCQlwQWQgLSBQb2ludGVyIHRvIG91ciBhZGFwdGVyCi0JCXBoeW1vZGUgIC0KLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgUlRNUFNldEhUKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X29pZF9zZXRfaHRfcGh5bW9kZSAqcEhUUGh5TW9kZSkKLXsKLQkvKnVuc2lnbmVkIGxvbmcgKnBtY3M7ICovCi0JdTMyIFZhbHVlID0gMDsKLQl1OCBCQlBWYWx1ZSA9IDA7Ci0JdTggQkJQM1ZhbHVlID0gMDsKLQl1OCBSeFN0cmVhbSA9IHBBZC0+Q29tbW9uQ2ZnLlJ4U3RyZWFtOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIlJUTVBTZXRIVCA6IEhUX21vZGUoJWQpLCBFeHRPZmZzZXQoJWQpLCBNQ1MoJWQpLCBCVyglZCksIFNUQkMoJWQpLCBTSE9SVEdJKCVkKVxuIiwKLQkJICBwSFRQaHlNb2RlLT5IdE1vZGUsIHBIVFBoeU1vZGUtPkV4dE9mZnNldCwgcEhUUGh5TW9kZS0+TUNTLAotCQkgIHBIVFBoeU1vZGUtPkJXLCBwSFRQaHlNb2RlLT5TVEJDLCBwSFRQaHlNb2RlLT5TSE9SVEdJKSk7Ci0KLQkvKiBEb24ndCB6ZXJvIHN1cHBvcnRlZEh5UGh5IHN0cnVjdHVyZS4gKi8KLQlSVE1QWmVyb01lbW9yeSgmcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5LAotCQkgICAgICAgc2l6ZW9mKHBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eSkpOwotCVJUTVBaZXJvTWVtb3J5KCZwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8sCi0JCSAgICAgICBzaXplb2YocEFkLT5Db21tb25DZmcuQWRkSFRJbmZvKSk7Ci0JUlRNUFplcm9NZW1vcnkoJnBBZC0+Q29tbW9uQ2ZnLk5ld0V4dENoYW5PZmZzZXQsCi0JCSAgICAgICBzaXplb2YocEFkLT5Db21tb25DZmcuTmV3RXh0Q2hhbk9mZnNldCkpOwotCVJUTVBaZXJvTWVtb3J5KCZwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHksCi0JCSAgICAgICBzaXplb2YocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5KSk7Ci0KLQlpZiAocEFkLT5Db21tb25DZmcuYlJkZykgewotCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuRXh0SHRDYXBJbmZvLlBsdXNIVEMgPSAxOwotCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuRXh0SHRDYXBJbmZvLlJER1N1cHBvcnQgPSAxOwotCX0gZWxzZSB7Ci0JCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5FeHRIdENhcEluZm8uUGx1c0hUQyA9IDA7Ci0JCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5FeHRIdENhcEluZm8uUkRHU3VwcG9ydCA9IDA7Ci0JfQotCi0JcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwUGFybS5NYXhSQW1wZHVGYWN0b3IgPSAzOwotCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5NYXhSQW1wZHVGYWN0b3IgPSAzOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIlJUTVBTZXRIVCA6IFJ4QkFXaW5MaW1pdCA9ICVkXG4iLAotCQkgIHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5SeEJBV2luTGltaXQpKTsKLQotCS8qIE1pbW8gcG93ZXIgc2F2ZSwgQS1NU0RVIHNpemUsICovCi0JcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkFtc2R1RW5hYmxlID0KLQkgICAgKHUxNilwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuQW1zZHVFbmFibGU7Ci0JcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkFtc2R1U2l6ZSA9Ci0JICAgICh1OClwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuQW1zZHVTaXplOwotCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5NaW1vUHMgPQotCSAgICAodTgpcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1NUFNtb2RlOwotCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5NcGR1RGVuc2l0eSA9Ci0JICAgICh1OClwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTXBkdURlbnNpdHk7Ci0KLQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkFNc2R1U2l6ZSA9Ci0JICAgICh1MTYpcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLkFtc2R1U2l6ZTsKLQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLk1pbW9QcyA9Ci0JICAgICh1MTYpcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1NUFNtb2RlOwotCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcFBhcm0uTXBkdURlbnNpdHkgPQotCSAgICAodTgpcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1wZHVEZW5zaXR5OwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIlJUTVBTZXRIVCA6IEFNc2R1U2l6ZSA9ICVkLCBNaW1vUHMgPSAlZCwgTXBkdURlbnNpdHkgPSAlZCwgTWF4UkFtcGR1RmFjdG9yID0gJWRcbiIsCi0JCSAgcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkFtc2R1U2l6ZSwKLQkJICBwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuTWltb1BzLAotCQkgIHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5NcGR1RGVuc2l0eSwKLQkJICBwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuTWF4UkFtcGR1RmFjdG9yKSk7Ci0KLQlpZiAocEhUUGh5TW9kZS0+SHRNb2RlID09IEhUTU9ERV9HRikgewotCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkdGID0gMTsKLQkJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkdGID0gMTsKLQl9IGVsc2UKLQkJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkdGID0gMDsKLQotCS8qIERlY2lkZSBSeCBNQ1NTZXQgKi8KLQlzd2l0Y2ggKFJ4U3RyZWFtKSB7Ci0JY2FzZSAxOgotCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuTUNTU2V0WzBdID0gMHhmZjsKLQkJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lk1DU1NldFsxXSA9IDB4MDA7Ci0JCWJyZWFrOwotCi0JY2FzZSAyOgotCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuTUNTU2V0WzBdID0gMHhmZjsKLQkJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lk1DU1NldFsxXSA9IDB4ZmY7Ci0JCWJyZWFrOwotCi0JY2FzZSAzOgkJLyogMyozICovCi0JCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5NQ1NTZXRbMF0gPSAweGZmOwotCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuTUNTU2V0WzFdID0gMHhmZjsKLQkJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lk1DU1NldFsyXSA9IDB4ZmY7Ci0JCWJyZWFrOwotCX0KLQotCWlmIChwQWQtPkNvbW1vbkNmZy5iRm9ydHlfTWh6X0ludG9sZXJhbnQKLQkgICAgJiYgKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPD0gMTQpICYmIChwSFRQaHlNb2RlLT5CVyA9PSBCV180MCkpIHsKLQkJcEhUUGh5TW9kZS0+QlcgPSBCV18yMDsKLQkJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5Gb3J0eV9NaHpfSW50b2xlcmFudCA9IDE7Ci0JfQotCi0JaWYgKHBIVFBoeU1vZGUtPkJXID09IEJXXzQwKSB7Ci0JCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5NQ1NTZXRbNF0gPSAweDE7CS8qIE1DUyAzMiAqLwotCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkNoYW5uZWxXaWR0aCA9IDE7Ci0JCWlmIChwQWQtPkNvbW1vbkNmZy5DaGFubmVsIDw9IDE0KQotCQkJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5DQ0ttb2RlaW40MCA9IDE7Ci0KLQkJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkNoYW5uZWxXaWR0aCA9IDE7Ci0JCXBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mby5BZGRIdEluZm8uUmVjb21XaWR0aCA9IDE7Ci0JCXBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mby5BZGRIdEluZm8uRXh0Q2hhbk9mZnNldCA9Ci0JCSAgICAocEhUUGh5TW9kZS0+RXh0T2Zmc2V0ID09Ci0JCSAgICAgRVhUQ0hBX0JFTE9XKSA/IChFWFRDSEFfQkVMT1cpIDogRVhUQ0hBX0FCT1ZFOwotCQkvKiBTZXQgUmVnc2l0ZXIgZm9yIGV4dGVuc2lvbiBjaGFubmVsIHBvc2l0aW9uLiAqLwotCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0JBTkRfQ0ZHLCAmVmFsdWUpOwotCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsICZCQlAzVmFsdWUpOwotCQlpZiAoKHBIVFBoeU1vZGUtPkV4dE9mZnNldCA9PSBFWFRDSEFfQkVMT1cpKSB7Ci0JCQlWYWx1ZSB8PSAweDE7Ci0JCQlCQlAzVmFsdWUgfD0gKDB4MjApOwotCQkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfQkFORF9DRkcsIFZhbHVlKTsKLQkJfSBlbHNlIGlmICgocEhUUGh5TW9kZS0+RXh0T2Zmc2V0ID09IEVYVENIQV9BQk9WRSkpIHsKLQkJCVZhbHVlICY9IDB4ZmU7Ci0JCQlCQlAzVmFsdWUgJj0gKH4weDIwKTsKLQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX0JBTkRfQ0ZHLCBWYWx1ZSk7Ci0JCX0KLQkJLyogVHVybiBvbiBCQlAgNDBNSHogbW9kZSBub3cgb25seSBhcyBBUCAuICovCi0JCS8qIFN0YSBjYW4gdHVybiBvbiBCQlAgNDBNSHogYWZ0ZXIgY29ubmVjdGlvbiB3aXRoIDQwTUh6IEFQLiBTdGEgb25seSBicm9hZGNhc3QgNDBNSHogY2FwYWJpbGl0eSBiZWZvcmUgY29ubmVjdGlvbi4gKi8KLQkJaWYgKChwQWQtPk9wTW9kZSA9PSBPUE1PREVfQVApIHx8IElORlJBX09OKHBBZCkgfHwgQURIT0NfT04ocEFkKQotCQkgICAgKSB7Ci0JCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsICZCQlBWYWx1ZSk7Ci0JCQlCQlBWYWx1ZSAmPSAofjB4MTgpOwotCQkJQkJQVmFsdWUgfD0gMHgxMDsKLQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsIEJCUFZhbHVlKTsKLQotCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgQkJQM1ZhbHVlKTsKLQkJCXBBZC0+Q29tbW9uQ2ZnLkJCUEN1cnJlbnRCVyA9IEJXXzQwOwotCQl9Ci0JfSBlbHNlIHsKLQkJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5DaGFubmVsV2lkdGggPSAwOwotCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQ2hhbm5lbFdpZHRoID0gMDsKLQkJcEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLkFkZEh0SW5mby5SZWNvbVdpZHRoID0gMDsKLQkJcEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLkFkZEh0SW5mby5FeHRDaGFuT2Zmc2V0ID0gRVhUQ0hBX05PTkU7Ci0JCXBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsID0gcEFkLT5Db21tb25DZmcuQ2hhbm5lbDsKLQkJLyogVHVybiBvbiBCQlAgMjBNSHogbW9kZSBieSByZXF1ZXN0IGhlcmUuICovCi0JCXsKLQkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJkJCUFZhbHVlKTsKLQkJCUJCUFZhbHVlICY9ICh+MHgxOCk7Ci0JCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCBCQlBWYWx1ZSk7Ci0JCQlwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPSBCV18yMDsKLQkJfQotCX0KLQotCWlmIChwSFRQaHlNb2RlLT5TVEJDID09IFNUQkNfVVNFKSB7Ci0JCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uVHhTVEJDID0gMTsKLQkJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlR4U1RCQyA9IDE7Ci0JCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uUnhTVEJDID0gMTsKLQkJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlJ4U1RCQyA9IDE7Ci0JfSBlbHNlIHsKLQkJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlR4U1RCQyA9IDA7Ci0JCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5SeFNUQkMgPSAwOwotCX0KLQotCWlmIChwSFRQaHlNb2RlLT5TSE9SVEdJID09IEdJXzQwMCkgewotCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLlNob3J0R0lmb3IyMCA9IDE7Ci0JCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uU2hvcnRHSWZvcjQwID0gMTsKLQkJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlNob3J0R0lmb3IyMCA9IDE7Ci0JCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5TaG9ydEdJZm9yNDAgPSAxOwotCX0gZWxzZSB7Ci0JCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uU2hvcnRHSWZvcjIwID0gMDsKLQkJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5TaG9ydEdJZm9yNDAgPSAwOwotCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuU2hvcnRHSWZvcjIwID0gMDsKLQkJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlNob3J0R0lmb3I0MCA9IDA7Ci0JfQotCi0JLyogV2Ugc3VwcG9ydCBsaW5rIGFkYXB0YXRpb24gZm9yIHVuc29saWNpdCBNQ1MgZmVlZGJhY2ssIHNldCB0byAyLiAqLwotCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5FeHRIdENhcEluZm8uTUNTRmVlZGJhY2sgPSBNQ1NGQktfTk9ORTsJLypNQ1NGQktfVU5TT0xJQ0lUOyAqLwotCXBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mby5Db250cm9sQ2hhbiA9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWw7Ci0JLyogMSwgdGhlIGV4dGVuc2lvbiBjaGFubmVsIGFib3ZlIHRoZSBjb250cm9sIGNoYW5uZWwuICovCi0KLQkvKiBFRENBIHBhcmFtZXRlcnMgdXNlZCBmb3IgQVAncyBvd24gdHJhbnNtaXNzaW9uICovCi0JaWYgKHBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uYlZhbGlkID09IEZBTFNFKSB7Ci0JCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uYlZhbGlkID0gVFJVRTsKLQkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5BaWZzblswXSA9IDM7Ci0JCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQWlmc25bMV0gPSA3OwotCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLkFpZnNuWzJdID0gMTsKLQkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5BaWZzblszXSA9IDE7Ci0KLQkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5Dd21pblswXSA9IDQ7Ci0JCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQ3dtaW5bMV0gPSA0OwotCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLkN3bWluWzJdID0gMzsKLQkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5Dd21pblszXSA9IDI7Ci0KLQkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5Dd21heFswXSA9IDY7Ci0JCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQ3dtYXhbMV0gPSAxMDsKLQkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5Dd21heFsyXSA9IDQ7Ci0JCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQ3dtYXhbM10gPSAzOwotCi0JCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uVHhvcFswXSA9IDA7Ci0JCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uVHhvcFsxXSA9IDA7Ci0JCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uVHhvcFsyXSA9IDk0OwotCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLlR4b3BbM10gPSA0NzsKLQl9Ci0JQXNpY1NldEVkY2FQYXJtKHBBZCwgJnBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0pOwotCi0JewotCQlSVE1QU2V0SW5kaXZpZHVhbEhUKHBBZCwgMCk7Ci0JfQotCi19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQkJQ2FsbGVyIGVuc3VyZXMgd2UgaGFzIDgwMi4xMW4gc3VwcG9ydC4KLQkJQ2FsbHMgYXQgc2V0dGluZyBIVCBmcm9tIEFQL1NUQVNldGluZm9ybWF0aW9uCi0KLQlBcmd1bWVudHM6Ci0JCXBBZCAtIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKLQkJcGh5bW9kZSAgLQotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBSVE1QU2V0SW5kaXZpZHVhbEhUKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggYXBpZHgpCi17Ci0Jc3RydWN0IHJ0X2h0X3BoeV9pbmZvICpwRGVzaXJlZF9odF9waHkgPSBOVUxMOwotCXU4IFR4U3RyZWFtID0gcEFkLT5Db21tb25DZmcuVHhTdHJlYW07Ci0JdTggRGVzaXJlZE1jcyA9IE1DU19BVVRPOwotCi0JZG8gewotCQl7Ci0JCQlwRGVzaXJlZF9odF9waHkgPSAmcEFkLT5TdGFDZmcuRGVzaXJlZEh0UGh5SW5mbzsKLQkJCURlc2lyZWRNY3MgPQotCQkJICAgIHBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTOwotCQkJLypwQWQtPlN0YUNmZy5iQXV0b1R4UmF0ZVN3aXRjaCA9IChEZXNpcmVkTWNzID09IE1DU19BVVRPKSA/IFRSVUUgOiBGQUxTRTsgKi8KLQkJCWJyZWFrOwotCQl9Ci0JfSB3aGlsZSAoRkFMU0UpOwotCi0JaWYgKHBEZXNpcmVkX2h0X3BoeSA9PSBOVUxMKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJICgiUlRNUFNldEluZGl2aWR1YWxIVDogaW52YWxpZCBhcGlkeCglZClcbiIsIGFwaWR4KSk7Ci0JCXJldHVybjsKLQl9Ci0JUlRNUFplcm9NZW1vcnkocERlc2lyZWRfaHRfcGh5LCBzaXplb2Yoc3RydWN0IHJ0X2h0X3BoeV9pbmZvKSk7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJICgiUlRNUFNldEluZGl2aWR1YWxIVCA6IERlc2lyZWQgTUNTID0gJWRcbiIsIERlc2lyZWRNY3MpKTsKLQkvKiBDaGVjayB0aGUgdmFsaWRpdHkgb2YgTUNTICovCi0JaWYgKChUeFN0cmVhbSA9PSAxKQotCSAgICAmJiAoKERlc2lyZWRNY3MgPj0gTUNTXzgpICYmIChEZXNpcmVkTWNzIDw9IE1DU18xNSkpKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1dBUk4sCi0JCQkgKCJSVE1QU2V0SW5kaXZpZHVhbEhUOiBNQ1MoJWQpIGlzIGludmFsaWQgaW4gMVMsIHJlc2V0IGl0IGFzIE1DU183XG4iLAotCQkJICBEZXNpcmVkTWNzKSk7Ci0JCURlc2lyZWRNY3MgPSBNQ1NfNzsKLQl9Ci0KLQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5DaGFubmVsV2lkdGggPT0gQldfMjApCi0JICAgICYmIChEZXNpcmVkTWNzID09IE1DU18zMikpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfV0FSTiwKLQkJCSAoIlJUTVBTZXRJbmRpdmlkdWFsSFQ6IE1DU18zMiBpcyBvbmx5IHN1cHBvcnRlZCBpbiA0MC1NSHosIHJlc2V0IGl0IGFzIE1DU18wXG4iKSk7Ci0JCURlc2lyZWRNY3MgPSBNQ1NfMDsKLQl9Ci0KLQlwRGVzaXJlZF9odF9waHktPmJIdEVuYWJsZSA9IFRSVUU7Ci0KLQkvKiBEZWNpZGUgZGVzaXJlZCBUeCBNQ1MgKi8KLQlzd2l0Y2ggKFR4U3RyZWFtKSB7Ci0JY2FzZSAxOgotCQlpZiAoRGVzaXJlZE1jcyA9PSBNQ1NfQVVUTykgewotCQkJcERlc2lyZWRfaHRfcGh5LT5NQ1NTZXRbMF0gPSAweGZmOwotCQkJcERlc2lyZWRfaHRfcGh5LT5NQ1NTZXRbMV0gPSAweDAwOwotCQl9IGVsc2UgaWYgKERlc2lyZWRNY3MgPD0gTUNTXzcpIHsKLQkJCXBEZXNpcmVkX2h0X3BoeS0+TUNTU2V0WzBdID0gMSA8PCBEZXNpcmVkTWNzOwotCQkJcERlc2lyZWRfaHRfcGh5LT5NQ1NTZXRbMV0gPSAweDAwOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSAyOgotCQlpZiAoRGVzaXJlZE1jcyA9PSBNQ1NfQVVUTykgewotCQkJcERlc2lyZWRfaHRfcGh5LT5NQ1NTZXRbMF0gPSAweGZmOwotCQkJcERlc2lyZWRfaHRfcGh5LT5NQ1NTZXRbMV0gPSAweGZmOwotCQl9IGVsc2UgaWYgKERlc2lyZWRNY3MgPD0gTUNTXzE1KSB7Ci0JCQl1bnNpZ25lZCBsb25nIG1vZGU7Ci0KLQkJCW1vZGUgPSBEZXNpcmVkTWNzIC8gODsKLQkJCWlmIChtb2RlIDwgMikKLQkJCQlwRGVzaXJlZF9odF9waHktPk1DU1NldFttb2RlXSA9Ci0JCQkJICAgICgxIDw8IChEZXNpcmVkTWNzIC0gbW9kZSAqIDgpKTsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgMzoJCS8qIDMqMyAqLwotCQlpZiAoRGVzaXJlZE1jcyA9PSBNQ1NfQVVUTykgewotCQkJLyogTUNTMCB+IE1DUzIzLCAzIGJ5dGVzICovCi0JCQlwRGVzaXJlZF9odF9waHktPk1DU1NldFswXSA9IDB4ZmY7Ci0JCQlwRGVzaXJlZF9odF9waHktPk1DU1NldFsxXSA9IDB4ZmY7Ci0JCQlwRGVzaXJlZF9odF9waHktPk1DU1NldFsyXSA9IDB4ZmY7Ci0JCX0gZWxzZSBpZiAoRGVzaXJlZE1jcyA8PSBNQ1NfMjMpIHsKLQkJCXVuc2lnbmVkIGxvbmcgbW9kZTsKLQotCQkJbW9kZSA9IERlc2lyZWRNY3MgLyA4OwotCQkJaWYgKG1vZGUgPCAzKQotCQkJCXBEZXNpcmVkX2h0X3BoeS0+TUNTU2V0W21vZGVdID0KLQkJCQkgICAgKDEgPDwgKERlc2lyZWRNY3MgLSBtb2RlICogOCkpOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCWlmIChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQ2hhbm5lbFdpZHRoID09IEJXXzQwKSB7Ci0JCWlmIChEZXNpcmVkTWNzID09IE1DU19BVVRPIHx8IERlc2lyZWRNY3MgPT0gTUNTXzMyKQotCQkJcERlc2lyZWRfaHRfcGh5LT5NQ1NTZXRbNF0gPSAweDE7Ci0JfQotCS8qIHVwZGF0ZSBIVCBSYXRlIHNldHRpbmcgKi8KLQlpZiAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkKLQkJTWxtZVVwZGF0ZUh0VHhSYXRlcyhwQWQsIEJTUzApOwotCWVsc2UKLQkJTWxtZVVwZGF0ZUh0VHhSYXRlcyhwQWQsIGFwaWR4KTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCQlVcGRhdGUgSFQgSUUgZnJvbSBvdXIgY2FwYWJpbGl0eS4KLQotCUFyZ3VtZW50czoKLQkJU2VuZCBhbGwgSFQgSUUgaW4gYmVhY29uL3Byb2JlIHJzcC9hc3NvYyByc3AvYWN0aW9uIGZyYW1lLgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBSVE1QVXBkYXRlSFRJRShzdHJ1Y3QgcnRfaHRfY2FwYWJpbGl0eSAqcFJ0SHQsCi0JCSAgICB1OCAqIHBNY3NTZXQsCi0JCSAgICBzdHJ1Y3QgcnRfaHRfY2FwYWJpbGl0eV9pZSAqIHBIdENhcGFiaWxpdHksCi0JCSAgICBzdHJ1Y3QgcnRfYWRkX2h0X2luZm9faWUgKiBwQWRkSHRJbmZvKQotewotCVJUTVBaZXJvTWVtb3J5KHBIdENhcGFiaWxpdHksIHNpemVvZihzdHJ1Y3QgcnRfaHRfY2FwYWJpbGl0eV9pZSkpOwotCVJUTVBaZXJvTWVtb3J5KHBBZGRIdEluZm8sIHNpemVvZihzdHJ1Y3QgcnRfYWRkX2h0X2luZm9faWUpKTsKLQotCXBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5DaGFubmVsV2lkdGggPSBwUnRIdC0+Q2hhbm5lbFdpZHRoOwotCXBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5NaW1vUHMgPSBwUnRIdC0+TWltb1BzOwotCXBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5HRiA9IHBSdEh0LT5HRjsKLQlwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uU2hvcnRHSWZvcjIwID0gcFJ0SHQtPlNob3J0R0lmb3IyMDsKLQlwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uU2hvcnRHSWZvcjQwID0gcFJ0SHQtPlNob3J0R0lmb3I0MDsKLQlwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uVHhTVEJDID0gcFJ0SHQtPlR4U1RCQzsKLQlwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uUnhTVEJDID0gcFJ0SHQtPlJ4U1RCQzsKLQlwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uQU1zZHVTaXplID0gcFJ0SHQtPkFtc2R1U2l6ZTsKLQlwSHRDYXBhYmlsaXR5LT5IdENhcFBhcm0uTWF4UkFtcGR1RmFjdG9yID0gcFJ0SHQtPk1heFJBbXBkdUZhY3RvcjsKLQlwSHRDYXBhYmlsaXR5LT5IdENhcFBhcm0uTXBkdURlbnNpdHkgPSBwUnRIdC0+TXBkdURlbnNpdHk7Ci0KLQlwQWRkSHRJbmZvLT5BZGRIdEluZm8uRXh0Q2hhbk9mZnNldCA9IHBSdEh0LT5FeHRDaGFuT2Zmc2V0OwotCXBBZGRIdEluZm8tPkFkZEh0SW5mby5SZWNvbVdpZHRoID0gcFJ0SHQtPlJlY29tV2lkdGg7Ci0JcEFkZEh0SW5mby0+QWRkSHRJbmZvMi5PcGVyYWlvbk1vZGUgPSBwUnRIdC0+T3BlcmFpb25Nb2RlOwotCXBBZGRIdEluZm8tPkFkZEh0SW5mbzIuTm9uR2ZQcmVzZW50ID0gcFJ0SHQtPk5vbkdmUHJlc2VudDsKLQlSVE1QTW92ZU1lbW9yeShwQWRkSHRJbmZvLT5NQ1NTZXQsIC8qcFJ0SHQtPk1DU1NldCAqLyBwTWNzU2V0LCA0KTsJLyogcnQyODYwIG9ubHkgc3VwcG9ydCBNQ1MgbWF4PTMyLCBubyBuZWVkIHRvIGNvcHkgYWxsIDE2IHVjaGFyLiAqLwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRNUFVwZGF0ZUhUSUUgPD09IFxuIikpOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlBZGQgQ2xpZW50IHNlY3VyaXR5IGluZm9ybWF0aW9uIGludG8gQVNJQyBXQ0lEIHRhYmxlIGFuZCBJVkVJViB0YWJsZS4KLSAgICBSZXR1cm46Ci0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICAgICB1OCBCc3NJZHgsCi0JCQkgICAgICAgdTggS2V5SWR4LAotCQkJICAgICAgIHU4IENpcGhlckFsZywgc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcEVudHJ5KQotewotCXUzMiBXQ0lEQXR0cmkgPSAwOwotCXUxNiBvZmZzZXQ7Ci0JdTggSVZFSVYgPSAwOwotCXUxNiBXY2lkID0gMDsKLQotCXsKLQkJewotCQkJaWYgKEJzc0lkeCA+IEJTUzApIHsKLQkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCQkJICgiUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeTogVGhlIEJTUy1pbmRleCglZCkgaXMgb3V0IG9mIHJhbmdlIGZvciBJbmZyYSBsaW5rLiBcbiIsCi0JCQkJCSAgQnNzSWR4KSk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJLyogMS4gICBJbiBBREhPQyBtb2RlLCB0aGUgQUlEIGlzIHdjaWQgbnVtYmVyLiBBbmQgTk8gbWVzaCBsaW5rIGV4aXN0cy4gKi8KLQkJCS8qIDIuICAgSW4gSW5mcmEgbW9kZSwgdGhlIEFJRDoxIE1VU1QgYmUgd2NpZCBvZiBpbmZyYSBTVEEuICovCi0JCQkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIEFJRDoyfiBhc3NpZ24gdG8gbWVzaCBsaW5rIGVudHJ5LiAqLwotCQkJaWYgKHBFbnRyeSkKLQkJCQlXY2lkID0gcEVudHJ5LT5BaWQ7Ci0JCQllbHNlCi0JCQkJV2NpZCA9IE1DQVNUX1dDSUQ7Ci0JCX0KLQl9Ci0KLQkvKiBVcGRhdGUgV0NJRCBhdHRyaWJ1dGUgdGFibGUgKi8KLQlvZmZzZXQgPSBNQUNfV0NJRF9BVFRSSUJVVEVfQkFTRSArIChXY2lkICogSFdfV0NJRF9BVFRSSV9TSVpFKTsKLQotCXsKLQkJaWYgKHBFbnRyeSAmJiBwRW50cnktPlZhbGlkQXNNZXNoKQotCQkJV0NJREF0dHJpID0gKENpcGhlckFsZyA8PCAxKSB8IFBBSVJXSVNFS0VZVEFCTEU7Ci0JCWVsc2UKLQkJCVdDSURBdHRyaSA9IChDaXBoZXJBbGcgPDwgMSkgfCBTSEFSRURLRVlUQUJMRTsKLQl9Ci0KLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBvZmZzZXQsIFdDSURBdHRyaSk7Ci0KLQkvKiBVcGRhdGUgSVYvRUlWIHRhYmxlICovCi0Jb2Zmc2V0ID0gTUFDX0lWRUlWX1RBQkxFX0JBU0UgKyAoV2NpZCAqIEhXX0lWRUlWX0VOVFJZX1NJWkUpOwotCi0JLyogV1BBIG1vZGUgKi8KLQlpZiAoKENpcGhlckFsZyA9PSBDSVBIRVJfVEtJUCkgfHwgKENpcGhlckFsZyA9PSBDSVBIRVJfVEtJUF9OT19NSUMpCi0JICAgIHx8IChDaXBoZXJBbGcgPT0gQ0lQSEVSX0FFUykpIHsKLQkJLyogRWl2IGJpdCBvbi4ga2V5aWQgYWx3YXlzIGlzIDAgZm9yIHBhaXJ3aXNlIGtleSAqLwotCQlJVkVJViA9IChLZXlJZHggPDwgNikgfCAweDIwOwotCX0gZWxzZSB7Ci0JCS8qIFdFUCBLZXlJZHggaXMgZGVmYXVsdCB0eCBrZXkuICovCi0JCUlWRUlWID0gKEtleUlkeCA8PCA2KTsKLQl9Ci0KLQkvKiBGb3Iga2V5IGluZGV4IGFuZCBleHQgSVYgYml0LCBzbyBvbmx5IG5lZWQgdG8gdXBkYXRlIHRoZSBwb3NpdGlvbihvZmZzZXQrMykuICovCi0jaWZkZWYgUlRNUF9NQUNfUENJCi0JUlRNUF9JT19XUklURTgocEFkLCBvZmZzZXQgKyAzLCBJVkVJVik7Ci0jZW5kaWYgLyogUlRNUF9NQUNfUENJIC8vICovCi0jaWZkZWYgUlRNUF9NQUNfVVNCCi0JUlRVU0JNdWx0aVdyaXRlX09uZUJ5dGUocEFkLCBvZmZzZXQgKyAzLCAmSVZFSVYpOwotI2VuZGlmIC8qIFJUTVBfTUFDX1VTQiAvLyAqLwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIlJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnk6IFdDSUQgIyVkLCBLZXlJbmRleCAjJWQsIEFsZz0lc1xuIiwKLQkJICBXY2lkLCBLZXlJZHgsIENpcGhlck5hbWVbQ2lwaGVyQWxnXSkpOwotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIglXQ0lEQXR0cmkgPSAweCV4IFxuIiwgV0NJREF0dHJpKSk7Ci0KLX0KLQotLyoKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIERlc2NyaXB0aW9uOgotICAgICAgICBQYXJzZSBlbmNyeXB0aW9uIHR5cGUKLUFyZ3VtZW50czoKLSAgICBwQWRhcHRlciAgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byBvdXIgYWRhcHRlcgotICAgIHdycSAgICAgICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBpb2N0bCBhcmd1bWVudAotCi0gICAgUmV0dXJuIFZhbHVlOgotICAgICAgICBOb25lCi0KLSAgICBOb3RlOgotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotY2hhciAqR2V0RW5jcnlwdFR5cGUoY2hhciBlbmMpCi17Ci0JaWYgKGVuYyA9PSBOZGlzODAyXzExV0VQRGlzYWJsZWQpCi0JCXJldHVybiAiTk9ORSI7Ci0JaWYgKGVuYyA9PSBOZGlzODAyXzExV0VQRW5hYmxlZCkKLQkJcmV0dXJuICJXRVAiOwotCWlmIChlbmMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkKLQkJcmV0dXJuICJUS0lQIjsKLQlpZiAoZW5jID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCi0JCXJldHVybiAiQUVTIjsKLQlpZiAoZW5jID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uNEVuYWJsZWQpCi0JCXJldHVybiAiVEtJUEFFUyI7Ci0JZWxzZQotCQlyZXR1cm4gIlVOS05PVyI7Ci19Ci0KLWNoYXIgKkdldEF1dGhNb2RlKGNoYXIgYXV0aCkKLXsKLQlpZiAoYXV0aCA9PSBOZGlzODAyXzExQXV0aE1vZGVPcGVuKQotCQlyZXR1cm4gIk9QRU4iOwotCWlmIChhdXRoID09IE5kaXM4MDJfMTFBdXRoTW9kZVNoYXJlZCkKLQkJcmV0dXJuICJTSEFSRUQiOwotCWlmIChhdXRoID09IE5kaXM4MDJfMTFBdXRoTW9kZUF1dG9Td2l0Y2gpCi0JCXJldHVybiAiQVVUT1dFUCI7Ci0JaWYgKGF1dGggPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKQotCQlyZXR1cm4gIldQQSI7Ci0JaWYgKGF1dGggPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLKQotCQlyZXR1cm4gIldQQVBTSyI7Ci0JaWYgKGF1dGggPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZSkKLQkJcmV0dXJuICJXUEFOT05FIjsKLQlpZiAoYXV0aCA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyKQotCQlyZXR1cm4gIldQQTIiOwotCWlmIChhdXRoID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spCi0JCXJldHVybiAiV1BBMlBTSyI7Ci0JaWYgKGF1dGggPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMVdQQTIpCi0JCXJldHVybiAiV1BBMVdQQTIiOwotCWlmIChhdXRoID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTFQU0tXUEEyUFNLKQotCQlyZXR1cm4gIldQQTFQU0tXUEEyUFNLIjsKLQotCXJldHVybiAiVU5LTk9XIjsKLX0KLQotaW50IFNldENvbW1vbkhUKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlzdHJ1Y3QgcnRfb2lkX3NldF9odF9waHltb2RlIFNldEhUOwotCi0JaWYgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPCBQSFlfMTFBQkdOX01JWEVEKQotCQlyZXR1cm4gRkFMU0U7Ci0KLQlTZXRIVC5QaHlNb2RlID0gcEFkLT5Db21tb25DZmcuUGh5TW9kZTsKLQlTZXRIVC5UcmFuc21pdE5vID0gKCh1OClwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoKTsKLQlTZXRIVC5IdE1vZGUgPSAodTgpcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkhUTU9ERTsKLQlTZXRIVC5FeHRPZmZzZXQgPQotCSAgICAodTgpcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkVYVENIQTsKLQlTZXRIVC5NQ1MgPSBNQ1NfQVVUTzsKLQlTZXRIVC5CVyA9ICh1OClwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlc7Ci0JU2V0SFQuU1RCQyA9ICh1OClwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuU1RCQzsKLQlTZXRIVC5TSE9SVEdJID0gKHU4KXBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5TaG9ydEdJOwotCi0JUlRNUFNldEhUKHBBZCwgJlNldEhUKTsKLQotCXJldHVybiBUUlVFOwotfQotCi1jaGFyICpSVE1QR2V0UmFsaW5rRW5jcnlNb2RlU3RyKHUxNiBlbmNyeU1vZGUpCi17Ci0Jc3dpdGNoIChlbmNyeU1vZGUpIHsKLQljYXNlIE5kaXM4MDJfMTFXRVBEaXNhYmxlZDoKLQkJcmV0dXJuICJOT05FIjsKLQljYXNlIE5kaXM4MDJfMTFXRVBFbmFibGVkOgotCQlyZXR1cm4gIldFUCI7Ci0JY2FzZSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOgotCQlyZXR1cm4gIlRLSVAiOwotCWNhc2UgTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZDoKLQkJcmV0dXJuICJBRVMiOwotCWNhc2UgTmRpczgwMl8xMUVuY3J5cHRpb240RW5hYmxlZDoKLQkJcmV0dXJuICJUS0lQQUVTIjsKLQlkZWZhdWx0OgotCQlyZXR1cm4gIlVOS05PVyI7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX21hY19wY2kuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9tYWNfcGNpLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwNmYwYTYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX21hY19wY2kuYworKysgL2Rldi9udWxsCkBAIC0xLDE2NjEgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qLwotCi0jaWZkZWYgUlRNUF9NQUNfUENJCi0jaW5jbHVkZQkiLi4vcnRfY29uZmlnLmgiCi0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCQlBbGxvY2F0ZSBETUEgbWVtb3J5IGJsb2NrcyBmb3Igc2VuZCwgcmVjZWl2ZQotCi0JQXJndW1lbnRzOgotCQlBZGFwdGVyCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCi0KLQlSZXR1cm4gVmFsdWU6Ci0JCU5ESVNfU1RBVFVTX1NVQ0NFU1MKLQkJTkRJU19TVEFUVVNfRkFJTFVSRQotCQlORElTX1NUQVRVU19SRVNPVVJDRVMKLQotCUlSUUwgPSBQQVNTSVZFX0xFVkVMCi0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotaW50IFJUTVBBbGxvY1R4UnhSaW5nTWVtb3J5KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlpbnQgU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKLQl1bnNpZ25lZCBsb25nIFJpbmdCYXNlUGFIaWdoOwotCXVuc2lnbmVkIGxvbmcgUmluZ0Jhc2VQYUxvdzsKLQl2b2lkICpSaW5nQmFzZVZhOwotCWludCBpbmRleCwgbnVtOwotCXN0cnVjdCBydF90eGQgKiBwVHhEOwotCXN0cnVjdCBydF9yeGQgKiBwUnhEOwotCXVuc2lnbmVkIGxvbmcgRXJyb3JWYWx1ZSA9IDA7Ci0Jc3RydWN0IHJ0X3J0bXBfdHhfcmluZyAqcFR4UmluZzsKLQlzdHJ1Y3QgcnRfcnRtcF9kbWFidWYgKnBEbWFCdWY7Ci0Jdm9pZCAqcFBhY2tldDsKLS8qICAgICAgUFJUTVBfUkVPUkRFUkJVRiAgICAgICAgcFJlb3JkZXJCdWY7ICovCi0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gUlRNUEFsbG9jVHhSeFJpbmdNZW1vcnlcbiIpKTsKLQlkbyB7Ci0JCS8qICovCi0JCS8qIEFsbG9jYXRlIGFsbCByaW5nIGRlc2NyaXB0b3JzLCBpbmNsdWRlIFR4RCwgUnhELCBNZ210RC4gKi8KLQkJLyogQWx0aG91Z2ggZWFjaCBzaXplIGlzIGRpZmZlcmVudCwgdG8gcHJldmVudCBjYWNoZWxpbmUgYW5kIGFsaWdubWVudCAqLwotCQkvKiBpc3N1ZSwgSSBpbnRlbnRpb25hbCBzZXQgdGhlbSBhbGwgdG8gNjQgYnl0ZXMuICovCi0JCS8qICovCi0JCWZvciAobnVtID0gMDsgbnVtIDwgTlVNX09GX1RYX1JJTkc7IG51bSsrKSB7Ci0JCQl1bnNpZ25lZCBsb25nIEJ1ZkJhc2VQYUhpZ2g7Ci0JCQl1bnNpZ25lZCBsb25nIEJ1ZkJhc2VQYUxvdzsKLQkJCXZvaWQgKkJ1ZkJhc2VWYTsKLQotCQkJLyogKi8KLQkJCS8qIEFsbG9jYXRlIFR4IHJpbmcgZGVzY3JpcHRvcidzIG1lbW9yeSAoNSBUWCByaW5ncyA9IDQgQUNzICsgMSBIQ0NBKSAqLwotCQkJLyogKi8KLQkJCXBBZC0+VHhEZXNjUmluZ1tudW1dLkFsbG9jU2l6ZSA9Ci0JCQkgICAgVFhfUklOR19TSVpFICogVFhEX1NJWkU7Ci0JCQlSVE1QX0FsbG9jYXRlVHhEZXNjTWVtb3J5KHBBZCwgbnVtLAotCQkJCQkJICBwQWQtPlR4RGVzY1JpbmdbbnVtXS4KLQkJCQkJCSAgQWxsb2NTaXplLCBGQUxTRSwKLQkJCQkJCSAgJnBBZC0+VHhEZXNjUmluZ1tudW1dLkFsbG9jVmEsCi0JCQkJCQkgICZwQWQtPlR4RGVzY1JpbmdbbnVtXS4KLQkJCQkJCSAgQWxsb2NQYSk7Ci0KLQkJCWlmIChwQWQtPlR4RGVzY1JpbmdbbnVtXS5BbGxvY1ZhID09IE5VTEwpIHsKLQkJCQlFcnJvclZhbHVlID0gRVJSTE9HX09VVF9PRl9TSEFSRURfTUVNT1JZOwotCQkJCURCR1BSSU5UX0VSUigiRmFpbGVkIHRvIGFsbG9jYXRlIGEgYmlnIGJ1ZmZlclxuIik7Ci0JCQkJU3RhdHVzID0gTkRJU19TVEFUVVNfUkVTT1VSQ0VTOwotCQkJCWJyZWFrOwotCQkJfQotCQkJLyogWmVybyBpbml0IHRoaXMgbWVtb3J5IGJsb2NrICovCi0JCQlOZGlzWmVyb01lbW9yeShwQWQtPlR4RGVzY1JpbmdbbnVtXS5BbGxvY1ZhLAotCQkJCSAgICAgICBwQWQtPlR4RGVzY1JpbmdbbnVtXS5BbGxvY1NpemUpOwotCi0JCQkvKiBTYXZlIFBBICYgVkEgZm9yIGZ1cnRoZXIgb3BlcmF0aW9uICovCi0JCQlSaW5nQmFzZVBhSGlnaCA9Ci0JCQkgICAgUlRNUF9HZXRQaHlzaWNhbEFkZHJlc3NIaWdoKHBBZC0+VHhEZXNjUmluZ1tudW1dLgotCQkJCQkJCUFsbG9jUGEpOwotCQkJUmluZ0Jhc2VQYUxvdyA9Ci0JCQkgICAgUlRNUF9HZXRQaHlzaWNhbEFkZHJlc3NMb3cocEFkLT5UeERlc2NSaW5nW251bV0uCi0JCQkJCQkgICAgICAgQWxsb2NQYSk7Ci0JCQlSaW5nQmFzZVZhID0gcEFkLT5UeERlc2NSaW5nW251bV0uQWxsb2NWYTsKLQotCQkJLyogKi8KLQkJCS8qIEFsbG9jYXRlIGFsbCAxc3QgVFhCdWYncyBtZW1vcnkgZm9yIHRoaXMgVHhSaW5nICovCi0JCQkvKiAqLwotCQkJcEFkLT5UeEJ1ZlNwYWNlW251bV0uQWxsb2NTaXplID0KLQkJCSAgICBUWF9SSU5HX1NJWkUgKiBUWF9ETUFfMVNUX0JVRkZFUl9TSVpFOwotCQkJUlRNUF9BbGxvY2F0ZUZpcnN0VHhCdWZmZXIocEFkLCBudW0sCi0JCQkJCQkgICBwQWQtPlR4QnVmU3BhY2VbbnVtXS4KLQkJCQkJCSAgIEFsbG9jU2l6ZSwgRkFMU0UsCi0JCQkJCQkgICAmcEFkLT5UeEJ1ZlNwYWNlW251bV0uCi0JCQkJCQkgICBBbGxvY1ZhLAotCQkJCQkJICAgJnBBZC0+VHhCdWZTcGFjZVtudW1dLgotCQkJCQkJICAgQWxsb2NQYSk7Ci0KLQkJCWlmIChwQWQtPlR4QnVmU3BhY2VbbnVtXS5BbGxvY1ZhID09IE5VTEwpIHsKLQkJCQlFcnJvclZhbHVlID0gRVJSTE9HX09VVF9PRl9TSEFSRURfTUVNT1JZOwotCQkJCURCR1BSSU5UX0VSUigiRmFpbGVkIHRvIGFsbG9jYXRlIGEgYmlnIGJ1ZmZlclxuIik7Ci0JCQkJU3RhdHVzID0gTkRJU19TVEFUVVNfUkVTT1VSQ0VTOwotCQkJCWJyZWFrOwotCQkJfQotCQkJLyogWmVybyBpbml0IHRoaXMgbWVtb3J5IGJsb2NrICovCi0JCQlOZGlzWmVyb01lbW9yeShwQWQtPlR4QnVmU3BhY2VbbnVtXS5BbGxvY1ZhLAotCQkJCSAgICAgICBwQWQtPlR4QnVmU3BhY2VbbnVtXS5BbGxvY1NpemUpOwotCi0JCQkvKiBTYXZlIFBBICYgVkEgZm9yIGZ1cnRoZXIgb3BlcmF0aW9uICovCi0JCQlCdWZCYXNlUGFIaWdoID0KLQkJCSAgICBSVE1QX0dldFBoeXNpY2FsQWRkcmVzc0hpZ2gocEFkLT5UeEJ1ZlNwYWNlW251bV0uCi0JCQkJCQkJQWxsb2NQYSk7Ci0JCQlCdWZCYXNlUGFMb3cgPQotCQkJICAgIFJUTVBfR2V0UGh5c2ljYWxBZGRyZXNzTG93KHBBZC0+VHhCdWZTcGFjZVtudW1dLgotCQkJCQkJICAgICAgIEFsbG9jUGEpOwotCQkJQnVmQmFzZVZhID0gcEFkLT5UeEJ1ZlNwYWNlW251bV0uQWxsb2NWYTsKLQotCQkJLyogKi8KLQkJCS8qIEluaXRpYWxpemUgVHggUmluZyBEZXNjcmlwdG9yIGFuZCBhc3NvY2lhdGVkIGJ1ZmZlciBtZW1vcnkgKi8KLQkJCS8qICovCi0JCQlwVHhSaW5nID0gJnBBZC0+VHhSaW5nW251bV07Ci0JCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBUWF9SSU5HX1NJWkU7IGluZGV4KyspIHsKLQkJCQlwVHhSaW5nLT5DZWxsW2luZGV4XS5wTmRpc1BhY2tldCA9IE5VTEw7Ci0JCQkJcFR4UmluZy0+Q2VsbFtpbmRleF0ucE5leHROZGlzUGFja2V0ID0gTlVMTDsKLQkJCQkvKiBJbml0IFR4IFJpbmcgU2l6ZSwgVmEsIFBhIHZhcmlhYmxlcyAqLwotCQkJCXBUeFJpbmctPkNlbGxbaW5kZXhdLkFsbG9jU2l6ZSA9IFRYRF9TSVpFOwotCQkJCXBUeFJpbmctPkNlbGxbaW5kZXhdLkFsbG9jVmEgPSBSaW5nQmFzZVZhOwotCQkJCVJUTVBfU2V0UGh5c2ljYWxBZGRyZXNzSGlnaChwVHhSaW5nLT4KLQkJCQkJCQkgICAgQ2VsbFtpbmRleF0uQWxsb2NQYSwKLQkJCQkJCQkgICAgUmluZ0Jhc2VQYUhpZ2gpOwotCQkJCVJUTVBfU2V0UGh5c2ljYWxBZGRyZXNzTG93KHBUeFJpbmctPkNlbGxbaW5kZXhdLgotCQkJCQkJCSAgIEFsbG9jUGEsCi0JCQkJCQkJICAgUmluZ0Jhc2VQYUxvdyk7Ci0KLQkJCQkvKiBTZXR1cCBUeCBCdWZmZXIgc2l6ZSAmIGFkZHJlc3MuIG9ubHkgODAyLjExIGhlYWRlciB3aWxsIHN0b3JlIGluIHRoaXMgc3BhY2UgKi8KLQkJCQlwRG1hQnVmID0gJnBUeFJpbmctPkNlbGxbaW5kZXhdLkRtYUJ1ZjsKLQkJCQlwRG1hQnVmLT5BbGxvY1NpemUgPSBUWF9ETUFfMVNUX0JVRkZFUl9TSVpFOwotCQkJCXBEbWFCdWYtPkFsbG9jVmEgPSBCdWZCYXNlVmE7Ci0JCQkJUlRNUF9TZXRQaHlzaWNhbEFkZHJlc3NIaWdoKHBEbWFCdWYtPkFsbG9jUGEsCi0JCQkJCQkJICAgIEJ1ZkJhc2VQYUhpZ2gpOwotCQkJCVJUTVBfU2V0UGh5c2ljYWxBZGRyZXNzTG93KHBEbWFCdWYtPkFsbG9jUGEsCi0JCQkJCQkJICAgQnVmQmFzZVBhTG93KTsKLQotCQkJCS8qIGxpbmsgdGhlIHByZS1hbGxvY2F0ZWQgVHhCdWYgdG8gVFhEICovCi0JCQkJcFR4RCA9Ci0JCQkJICAgIChzdHJ1Y3QgcnRfdHhkICopIHBUeFJpbmctPkNlbGxbaW5kZXhdLkFsbG9jVmE7Ci0JCQkJcFR4RC0+U0RQdHIwID0gQnVmQmFzZVBhTG93OwotCQkJCS8qIGFkdmFuY2UgdG8gbmV4dCByaW5nIGRlc2NyaXB0b3IgYWRkcmVzcyAqLwotCQkJCXBUeEQtPkRNQURPTkUgPSAxOwotCQkJCVJpbmdCYXNlUGFMb3cgKz0gVFhEX1NJWkU7Ci0JCQkJUmluZ0Jhc2VWYSA9ICh1OCAqKVJpbmdCYXNlVmEgKyBUWERfU0laRTsKLQotCQkJCS8qIGFkdmFuY2UgdG8gbmV4dCBUeEJ1ZiBhZGRyZXNzICovCi0JCQkJQnVmQmFzZVBhTG93ICs9IFRYX0RNQV8xU1RfQlVGRkVSX1NJWkU7Ci0JCQkJQnVmQmFzZVZhID0KLQkJCQkgICAgKHU4ICopQnVmQmFzZVZhICsgVFhfRE1BXzFTVF9CVUZGRVJfU0laRTsKLQkJCX0KLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAoIlR4UmluZ1slZF06IHRvdGFsICVkIGVudHJ5IGFsbG9jYXRlZFxuIiwgbnVtLAotCQkJCSAgaW5kZXgpKTsKLQkJfQotCQlpZiAoU3RhdHVzID09IE5ESVNfU1RBVFVTX1JFU09VUkNFUykKLQkJCWJyZWFrOwotCi0JCS8qICovCi0JCS8qIEFsbG9jYXRlIE1HTVQgcmluZyBkZXNjcmlwdG9yJ3MgbWVtb3J5IGV4Y2VwdCBUeCByaW5nIHdoaWNoIGFsbG9jYXRlZCBlYXJpbGVyICovCi0JCS8qICovCi0JCXBBZC0+TWdtdERlc2NSaW5nLkFsbG9jU2l6ZSA9IE1HTVRfUklOR19TSVpFICogVFhEX1NJWkU7Ci0JCVJUTVBfQWxsb2NhdGVNZ210RGVzY01lbW9yeShwQWQsCi0JCQkJCSAgICBwQWQtPk1nbXREZXNjUmluZy5BbGxvY1NpemUsCi0JCQkJCSAgICBGQUxTRSwKLQkJCQkJICAgICZwQWQtPk1nbXREZXNjUmluZy5BbGxvY1ZhLAotCQkJCQkgICAgJnBBZC0+TWdtdERlc2NSaW5nLkFsbG9jUGEpOwotCi0JCWlmIChwQWQtPk1nbXREZXNjUmluZy5BbGxvY1ZhID09IE5VTEwpIHsKLQkJCUVycm9yVmFsdWUgPSBFUlJMT0dfT1VUX09GX1NIQVJFRF9NRU1PUlk7Ci0JCQlEQkdQUklOVF9FUlIoIkZhaWxlZCB0byBhbGxvY2F0ZSBhIGJpZyBidWZmZXJcbiIpOwotCQkJU3RhdHVzID0gTkRJU19TVEFUVVNfUkVTT1VSQ0VTOwotCQkJYnJlYWs7Ci0JCX0KLQkJLyogWmVybyBpbml0IHRoaXMgbWVtb3J5IGJsb2NrICovCi0JCU5kaXNaZXJvTWVtb3J5KHBBZC0+TWdtdERlc2NSaW5nLkFsbG9jVmEsCi0JCQkgICAgICAgcEFkLT5NZ210RGVzY1JpbmcuQWxsb2NTaXplKTsKLQotCQkvKiBTYXZlIFBBICYgVkEgZm9yIGZ1cnRoZXIgb3BlcmF0aW9uICovCi0JCVJpbmdCYXNlUGFIaWdoID0KLQkJICAgIFJUTVBfR2V0UGh5c2ljYWxBZGRyZXNzSGlnaChwQWQtPk1nbXREZXNjUmluZy5BbGxvY1BhKTsKLQkJUmluZ0Jhc2VQYUxvdyA9Ci0JCSAgICBSVE1QX0dldFBoeXNpY2FsQWRkcmVzc0xvdyhwQWQtPk1nbXREZXNjUmluZy5BbGxvY1BhKTsKLQkJUmluZ0Jhc2VWYSA9IHBBZC0+TWdtdERlc2NSaW5nLkFsbG9jVmE7Ci0KLQkJLyogKi8KLQkJLyogSW5pdGlhbGl6ZSBNR01UIFJpbmcgYW5kIGFzc29jaWF0ZWQgYnVmZmVyIG1lbW9yeSAqLwotCQkvKiAqLwotCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBNR01UX1JJTkdfU0laRTsgaW5kZXgrKykgewotCQkJcEFkLT5NZ210UmluZy5DZWxsW2luZGV4XS5wTmRpc1BhY2tldCA9IE5VTEw7Ci0JCQlwQWQtPk1nbXRSaW5nLkNlbGxbaW5kZXhdLnBOZXh0TmRpc1BhY2tldCA9IE5VTEw7Ci0JCQkvKiBJbml0IE1HTVQgUmluZyBTaXplLCBWYSwgUGEgdmFyaWFibGVzICovCi0JCQlwQWQtPk1nbXRSaW5nLkNlbGxbaW5kZXhdLkFsbG9jU2l6ZSA9IFRYRF9TSVpFOwotCQkJcEFkLT5NZ210UmluZy5DZWxsW2luZGV4XS5BbGxvY1ZhID0gUmluZ0Jhc2VWYTsKLQkJCVJUTVBfU2V0UGh5c2ljYWxBZGRyZXNzSGlnaChwQWQtPk1nbXRSaW5nLkNlbGxbaW5kZXhdLgotCQkJCQkJICAgIEFsbG9jUGEsIFJpbmdCYXNlUGFIaWdoKTsKLQkJCVJUTVBfU2V0UGh5c2ljYWxBZGRyZXNzTG93KHBBZC0+TWdtdFJpbmcuQ2VsbFtpbmRleF0uCi0JCQkJCQkgICBBbGxvY1BhLCBSaW5nQmFzZVBhTG93KTsKLQotCQkJLyogT2Zmc2V0IHRvIG5leHQgcmluZyBkZXNjcmlwdG9yIGFkZHJlc3MgKi8KLQkJCVJpbmdCYXNlUGFMb3cgKz0gVFhEX1NJWkU7Ci0JCQlSaW5nQmFzZVZhID0gKHU4ICopUmluZ0Jhc2VWYSArIFRYRF9TSVpFOwotCi0JCQkvKiBsaW5rIHRoZSBwcmUtYWxsb2NhdGVkIFR4QnVmIHRvIFRYRCAqLwotCQkJcFR4RCA9IChzdHJ1Y3QgcnRfdHhkICopIHBBZC0+TWdtdFJpbmcuQ2VsbFtpbmRleF0uQWxsb2NWYTsKLQkJCXBUeEQtPkRNQURPTkUgPSAxOwotCi0JCQkvKiBubyBwcmUtYWxsb2NhdGVkIGJ1ZmZlciByZXF1aXJlZCBpbiBNZ210UmluZyBmb3Igc2NhdHRlci1nYXRoZXIgY2FzZSAqLwotCQl9Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiTUdNVCBSaW5nOiB0b3RhbCAlZCBlbnRyeSBhbGxvY2F0ZWRcbiIsIGluZGV4KSk7Ci0KLQkJLyogKi8KLQkJLyogQWxsb2NhdGUgUlggcmluZyBkZXNjcmlwdG9yJ3MgbWVtb3J5IGV4Y2VwdCBUeCByaW5nIHdoaWNoIGFsbG9jYXRlZCBlYXJpbGVyICovCi0JCS8qICovCi0JCXBBZC0+UnhEZXNjUmluZy5BbGxvY1NpemUgPSBSWF9SSU5HX1NJWkUgKiBSWERfU0laRTsKLQkJUlRNUF9BbGxvY2F0ZVJ4RGVzY01lbW9yeShwQWQsCi0JCQkJCSAgcEFkLT5SeERlc2NSaW5nLkFsbG9jU2l6ZSwKLQkJCQkJICBGQUxTRSwKLQkJCQkJICAmcEFkLT5SeERlc2NSaW5nLkFsbG9jVmEsCi0JCQkJCSAgJnBBZC0+UnhEZXNjUmluZy5BbGxvY1BhKTsKLQotCQlpZiAocEFkLT5SeERlc2NSaW5nLkFsbG9jVmEgPT0gTlVMTCkgewotCQkJRXJyb3JWYWx1ZSA9IEVSUkxPR19PVVRfT0ZfU0hBUkVEX01FTU9SWTsKLQkJCURCR1BSSU5UX0VSUigiRmFpbGVkIHRvIGFsbG9jYXRlIGEgYmlnIGJ1ZmZlclxuIik7Ci0JCQlTdGF0dXMgPSBORElTX1NUQVRVU19SRVNPVVJDRVM7Ci0JCQlicmVhazsKLQkJfQotCQkvKiBaZXJvIGluaXQgdGhpcyBtZW1vcnkgYmxvY2sgKi8KLQkJTmRpc1plcm9NZW1vcnkocEFkLT5SeERlc2NSaW5nLkFsbG9jVmEsCi0JCQkgICAgICAgcEFkLT5SeERlc2NSaW5nLkFsbG9jU2l6ZSk7Ci0KLQkJREJHUFJJTlQoUlRfREVCVUdfT0ZGLAotCQkJICgiUlggREVTQyAlcCAgc2l6ZSA9ICVsZFxuIiwgcEFkLT5SeERlc2NSaW5nLkFsbG9jVmEsCi0JCQkgIHBBZC0+UnhEZXNjUmluZy5BbGxvY1NpemUpKTsKLQotCQkvKiBTYXZlIFBBICYgVkEgZm9yIGZ1cnRoZXIgb3BlcmF0aW9uICovCi0JCVJpbmdCYXNlUGFIaWdoID0KLQkJICAgIFJUTVBfR2V0UGh5c2ljYWxBZGRyZXNzSGlnaChwQWQtPlJ4RGVzY1JpbmcuQWxsb2NQYSk7Ci0JCVJpbmdCYXNlUGFMb3cgPQotCQkgICAgUlRNUF9HZXRQaHlzaWNhbEFkZHJlc3NMb3cocEFkLT5SeERlc2NSaW5nLkFsbG9jUGEpOwotCQlSaW5nQmFzZVZhID0gcEFkLT5SeERlc2NSaW5nLkFsbG9jVmE7Ci0KLQkJLyogKi8KLQkJLyogSW5pdGlhbGl6ZSBSeCBSaW5nIGFuZCBhc3NvY2lhdGVkIGJ1ZmZlciBtZW1vcnkgKi8KLQkJLyogKi8KLQkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgUlhfUklOR19TSVpFOyBpbmRleCsrKSB7Ci0JCQkvKiBJbml0IFJYIFJpbmcgU2l6ZSwgVmEsIFBhIHZhcmlhYmxlcyAqLwotCQkJcEFkLT5SeFJpbmcuQ2VsbFtpbmRleF0uQWxsb2NTaXplID0gUlhEX1NJWkU7Ci0JCQlwQWQtPlJ4UmluZy5DZWxsW2luZGV4XS5BbGxvY1ZhID0gUmluZ0Jhc2VWYTsKLQkJCVJUTVBfU2V0UGh5c2ljYWxBZGRyZXNzSGlnaChwQWQtPlJ4UmluZy5DZWxsW2luZGV4XS4KLQkJCQkJCSAgICBBbGxvY1BhLCBSaW5nQmFzZVBhSGlnaCk7Ci0JCQlSVE1QX1NldFBoeXNpY2FsQWRkcmVzc0xvdyhwQWQtPlJ4UmluZy5DZWxsW2luZGV4XS4KLQkJCQkJCSAgIEFsbG9jUGEsIFJpbmdCYXNlUGFMb3cpOwotCi0JCQkvKk5kaXNaZXJvTWVtb3J5KFJpbmdCYXNlVmEsIFJYRF9TSVpFKTsgKi8KLQotCQkJLyogT2Zmc2V0IHRvIG5leHQgcmluZyBkZXNjcmlwdG9yIGFkZHJlc3MgKi8KLQkJCVJpbmdCYXNlUGFMb3cgKz0gUlhEX1NJWkU7Ci0JCQlSaW5nQmFzZVZhID0gKHU4ICopUmluZ0Jhc2VWYSArIFJYRF9TSVpFOwotCi0JCQkvKiBTZXR1cCBSeCBhc3NvY2lhdGVkIEJ1ZmZlciBzaXplICYgYWxsb2NhdGUgc2hhcmUgbWVtb3J5ICovCi0JCQlwRG1hQnVmID0gJnBBZC0+UnhSaW5nLkNlbGxbaW5kZXhdLkRtYUJ1ZjsKLQkJCXBEbWFCdWYtPkFsbG9jU2l6ZSA9IFJYX0JVRkZFUl9BR0dSRVNJWkU7Ci0JCQlwUGFja2V0ID0gUlRNUF9BbGxvY2F0ZVJ4UGFja2V0QnVmZmVyKHBBZCwKLQkJCQkJCQkgICAgICBwRG1hQnVmLT4KLQkJCQkJCQkgICAgICBBbGxvY1NpemUsIEZBTFNFLAotCQkJCQkJCSAgICAgICZwRG1hQnVmLT5BbGxvY1ZhLAotCQkJCQkJCSAgICAgICZwRG1hQnVmLT4KLQkJCQkJCQkgICAgICBBbGxvY1BhKTsKLQotCQkJLyoga2VlcCBhbGxvY2F0ZWQgcnggcGFja2V0ICovCi0JCQlwQWQtPlJ4UmluZy5DZWxsW2luZGV4XS5wTmRpc1BhY2tldCA9IHBQYWNrZXQ7Ci0KLQkJCS8qIEVycm9yIGhhbmRsaW5nICovCi0JCQlpZiAocERtYUJ1Zi0+QWxsb2NWYSA9PSBOVUxMKSB7Ci0JCQkJRXJyb3JWYWx1ZSA9IEVSUkxPR19PVVRfT0ZfU0hBUkVEX01FTU9SWTsKLQkJCQlEQkdQUklOVF9FUlIoIkZhaWxlZCB0byBhbGxvY2F0ZSBSeFJpbmcncyAxc3QgYnVmZmVyXG4iKTsKLQkJCQlTdGF0dXMgPSBORElTX1NUQVRVU19SRVNPVVJDRVM7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQkvKiBaZXJvIGluaXQgdGhpcyBtZW1vcnkgYmxvY2sgKi8KLQkJCU5kaXNaZXJvTWVtb3J5KHBEbWFCdWYtPkFsbG9jVmEsIHBEbWFCdWYtPkFsbG9jU2l6ZSk7Ci0KLQkJCS8qIFdyaXRlIFJ4RCBidWZmZXIgYWRkcmVzcyAmIGFsbG9jYXRlZCBidWZmZXIgbGVuZ3RoICovCi0JCQlwUnhEID0gKHN0cnVjdCBydF9yeGQgKikgcEFkLT5SeFJpbmcuQ2VsbFtpbmRleF0uQWxsb2NWYTsKLQkJCXBSeEQtPlNEUDAgPQotCQkJICAgIFJUTVBfR2V0UGh5c2ljYWxBZGRyZXNzTG93KHBEbWFCdWYtPkFsbG9jUGEpOwotCQkJcFJ4RC0+RERPTkUgPSAwOwotCi0JCX0KLQotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIlJ4IFJpbmc6IHRvdGFsICVkIGVudHJ5IGFsbG9jYXRlZFxuIiwgaW5kZXgpKTsKLQotCX0gd2hpbGUgKEZBTFNFKTsKLQotCU5kaXNaZXJvTWVtb3J5KCZwQWQtPkZyYWdGcmFtZSwgc2l6ZW9mKHN0cnVjdCBydF9mcmFnbWVudF9mcmFtZSkpOwotCXBBZC0+RnJhZ0ZyYW1lLnBGcmFnUGFja2V0ID0KLQkgICAgUlRNUF9BbGxvY2F0ZUZyYWdQYWNrZXRCdWZmZXIocEFkLCBSWF9CVUZGRVJfTk9STVNJWkUpOwotCi0JaWYgKHBBZC0+RnJhZ0ZyYW1lLnBGcmFnUGFja2V0ID09IE5VTEwpIHsKLQkJU3RhdHVzID0gTkRJU19TVEFUVVNfUkVTT1VSQ0VTOwotCX0KLQotCWlmIChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykgewotCQkvKiBMb2cgZXJyb3IgaW5mb3JhbXRpb24gKi8KLQkJTmRpc1dyaXRlRXJyb3JMb2dFbnRyeShwQWQtPkFkYXB0ZXJIYW5kbGUsCi0JCQkJICAgICAgIE5ESVNfRVJST1JfQ09ERV9PVVRfT0ZfUkVTT1VSQ0VTLAotCQkJCSAgICAgICAxLCBFcnJvclZhbHVlKTsKLQl9Ci0JLyogRm9sbG93aW5nIGNvZGUgc2VnbWVudCBnZXQgZnJvbSBvcmlnaW5hbCBmdW5jOk5JQ0luaXRUeFJ4UmluZ0FuZEJhY2tsb2dRdWV1ZSgpLCBub3cgc2hvdWxkIGludGVncmF0ZSBpdCB0byBoZXJlLiAqLwotCXsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCItLT4gTklDSW5pdFR4UnhSaW5nQW5kQmFja2xvZ1F1ZXVlXG4iKSk7Ci0KLS8qCi0JCS8vIERpc2FibGUgRE1BLgotCQlSVE1QX0lPX1JFQUQzMihwQWQsIFdQRE1BX0dMT19DRkcsICZHbG9DZmcud29yZCk7Ci0JCUdsb0NmZy53b3JkICY9IDB4ZmYwOwotCQlHbG9DZmcuZmllbGQuRW5UWFdyaXRlQmFja0RET05FID0xOwotCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBXUERNQV9HTE9fQ0ZHLCBHbG9DZmcud29yZCk7Ci0qLwotCi0JCS8qIEluaXRpYWxpemUgYWxsIHRyYW5zbWl0IHJlbGF0ZWQgc29mdHdhcmUgcXVldWVzICovCi0JCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE5VTV9PRl9UWF9SSU5HOyBpbmRleCsrKSB7Ci0JCQlJbml0aWFsaXplUXVldWVIZWFkZXIoJnBBZC0+VHhTd1F1ZXVlW2luZGV4XSk7Ci0JCQkvKiBJbml0IFRYIHJpbmdzIGluZGV4IHBvaW50ZXIgKi8KLQkJCXBBZC0+VHhSaW5nW2luZGV4XS5UeFN3RnJlZUlkeCA9IDA7Ci0JCQlwQWQtPlR4UmluZ1tpbmRleF0uVHhDcHVJZHggPSAwOwotCQkJLypSVE1QX0lPX1dSSVRFMzIocEFkLCAoVFhfQ1RYX0lEWDAgKyBpICogMHgxMCkgLCAgcEFkLT5UeFJpbmdbaV0uVFhfQ1RYX0lEWCk7ICovCi0JCX0KLQotCQkvKiBJbml0IFJYIFJpbmcgaW5kZXggcG9pbnRlciAqLwotCQlwQWQtPlJ4UmluZy5SeFN3UmVhZElkeCA9IDA7Ci0JCXBBZC0+UnhSaW5nLlJ4Q3B1SWR4ID0gUlhfUklOR19TSVpFIC0gMTsKLQkJLypSVE1QX0lPX1dSSVRFMzIocEFkLCBSWF9DUlhfSURYLCBwQWQtPlJ4UmluZy5SWF9DUlhfSURYMCk7ICovCi0KLQkJLyogaW5pdCBNR01UIHJpbmcgaW5kZXggcG9pbnRlciAqLwotCQlwQWQtPk1nbXRSaW5nLlR4U3dGcmVlSWR4ID0gMDsKLQkJcEFkLT5NZ210UmluZy5UeENwdUlkeCA9IDA7Ci0KLQkJcEFkLT5Qcml2YXRlSW5mby5UeFJpbmdGdWxsQ250ID0gMDsKLQotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIjwtLSBOSUNJbml0VHhSeFJpbmdBbmRCYWNrbG9nUXVldWVcbiIpKTsKLQl9Ci0KLQlEQkdQUklOVF9TKFN0YXR1cywKLQkJICAgKCI8LS0gUlRNUEFsbG9jVHhSeFJpbmdNZW1vcnksIFN0YXR1cz0leFxuIiwgU3RhdHVzKSk7Ci0JcmV0dXJuIFN0YXR1czsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JCVJlc2V0IE5JQyBBc2ljcy4gQ2FsbCBhZnRlciByZXN0IERNQS4gU28gcmVzZXQgVFhfQ1RYX0lEWCB0byB6ZXJvLgotCi0JQXJndW1lbnRzOgotCQlBZGFwdGVyCQkJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgotCi0JUmV0dXJuIFZhbHVlOgotCQlOb25lCi0KLQlJUlFMID0gUEFTU0lWRV9MRVZFTAotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0JTm90ZToKLQkJUmVzZXQgTklDIHRvIGluaXRpYWwgc3RhdGUgQVMgSVMgc3lzdGVtIGJvb3QgdXAgdGltZS4KLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgUlRNUFJpbmdDbGVhblVwKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggUmluZ1R5cGUpCi17Ci0Jc3RydWN0IHJ0X3R4ZCAqIHBUeEQ7Ci0Jc3RydWN0IHJ0X3J4ZCAqIHBSeEQ7Ci0Jc3RydWN0IHJ0X3F1ZXVlX2VudHJ5ICpwRW50cnk7Ci0Jdm9pZCAqcFBhY2tldDsKLQlpbnQgaTsKLQlzdHJ1Y3QgcnRfcnRtcF90eF9yaW5nICpwVHhSaW5nOwotCXVuc2lnbmVkIGxvbmcgSXJxRmxhZ3M7Ci0JLyp1MzIgICAgICAgICAgICAgICAgICAgICAgICBSeFN3UmVhZElkeDsgKi8KLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCJSVE1QUmluZ0NsZWFuVXAoUmluZ0lkeD0lZCwgUGVuZGluZy1ORElTPSVsZClcbiIsIFJpbmdUeXBlLAotCQkgIHBBZC0+UmFsaW5rQ291bnRlcnMuUGVuZGluZ05kaXNQYWNrZXRDb3VudCkpOwotCXN3aXRjaCAoUmluZ1R5cGUpIHsKLQljYXNlIFFJRF9BQ19CSzoKLQljYXNlIFFJRF9BQ19CRToKLQljYXNlIFFJRF9BQ19WSToKLQljYXNlIFFJRF9BQ19WTzoKLQotCQlwVHhSaW5nID0gJnBBZC0+VHhSaW5nW1JpbmdUeXBlXTsKLQotCQlSVE1QX0lSUV9MT0NLKCZwQWQtPmlycV9sb2NrLCBJcnFGbGFncyk7Ci0JCS8qIFdlIGhhdmUgdG8gY2xlYW4gYWxsIGRlc2NyaXB0b3JzIGluIGNhc2Ugc29tZSBlcnJvciBoYXBwZW5lZCB3aXRoIHJlc2V0ICovCi0JCWZvciAoaSA9IDA7IGkgPCBUWF9SSU5HX1NJWkU7IGkrKykJLyogV2UgaGF2ZSB0byBzY2FuIGFsbCBUWCByaW5nICovCi0JCXsKLQkJCXBUeEQgPSAoc3RydWN0IHJ0X3R4ZCAqKSBwVHhSaW5nLT5DZWxsW2ldLkFsbG9jVmE7Ci0KLQkJCXBQYWNrZXQgPSAodm9pZCAqKXBUeFJpbmctPkNlbGxbaV0ucE5kaXNQYWNrZXQ7Ci0JCQkvKiByZWxlYXNlIHNjYXR0ZXItYW5kLWdhdGhlciBjaGFyICovCi0JCQlpZiAocFBhY2tldCkgewotCQkJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUGFja2V0LAotCQkJCQkJICAgIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOwotCQkJCXBUeFJpbmctPkNlbGxbaV0ucE5kaXNQYWNrZXQgPSBOVUxMOwotCQkJfQotCi0JCQlwUGFja2V0ID0KLQkJCSAgICAodm9pZCAqKXBUeFJpbmctPkNlbGxbaV0ucE5leHROZGlzUGFja2V0OwotCQkJLyogcmVsZWFzZSBzY2F0dGVyLWFuZC1nYXRoZXIgY2hhciAqLwotCQkJaWYgKHBQYWNrZXQpIHsKLQkJCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFBhY2tldCwKLQkJCQkJCSAgICBORElTX1NUQVRVU19GQUlMVVJFKTsKLQkJCQlwVHhSaW5nLT5DZWxsW2ldLnBOZXh0TmRpc1BhY2tldCA9IE5VTEw7Ci0JCQl9Ci0JCX0KLQotCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0RUWF9JRFgwICsgUmluZ1R5cGUgKiAweDEwLAotCQkJICAgICAgICZwVHhSaW5nLT5UeERtYUlkeCk7Ci0JCXBUeFJpbmctPlR4U3dGcmVlSWR4ID0gcFR4UmluZy0+VHhEbWFJZHg7Ci0JCXBUeFJpbmctPlR4Q3B1SWR4ID0gcFR4UmluZy0+VHhEbWFJZHg7Ci0JCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX0NUWF9JRFgwICsgUmluZ1R5cGUgKiAweDEwLAotCQkJCXBUeFJpbmctPlR4Q3B1SWR4KTsKLQotCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+aXJxX2xvY2ssIElycUZsYWdzKTsKLQotCQlSVE1QX0lSUV9MT0NLKCZwQWQtPmlycV9sb2NrLCBJcnFGbGFncyk7Ci0JCXdoaWxlIChwQWQtPlR4U3dRdWV1ZVtSaW5nVHlwZV0uSGVhZCAhPSBOVUxMKSB7Ci0JCQlwRW50cnkgPSBSZW1vdmVIZWFkUXVldWUoJnBBZC0+VHhTd1F1ZXVlW1JpbmdUeXBlXSk7Ci0JCQlwUGFja2V0ID0gUVVFVUVfRU5UUllfVE9fUEFDS0VUKHBFbnRyeSk7Ci0JCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCJSZWxlYXNlIDEgTkRJUyBwYWNrZXQgZnJvbSBzL3cgYmFja2xvZyBxdWV1ZVxuIikpOwotCQl9Ci0JCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5pcnFfbG9jaywgSXJxRmxhZ3MpOwotCQlicmVhazsKLQotCWNhc2UgUUlEX01HTVQ6Ci0JCS8qIFdlIGhhdmUgdG8gY2xlYW4gYWxsIGRlc2NyaXB0b3JzIGluIGNhc2Ugc29tZSBlcnJvciBoYXBwZW5lZCB3aXRoIHJlc2V0ICovCi0JCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+TWdtdFJpbmdMb2NrKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgTUdNVF9SSU5HX1NJWkU7IGkrKykgewotCQkJcFR4RCA9IChzdHJ1Y3QgcnRfdHhkICopIHBBZC0+TWdtdFJpbmcuQ2VsbFtpXS5BbGxvY1ZhOwotCi0JCQlwUGFja2V0ID0KLQkJCSAgICAodm9pZCAqKXBBZC0+TWdtdFJpbmcuQ2VsbFtpXS5wTmRpc1BhY2tldDsKLQkJCS8qIHJsZWFzZSBzY2F0dGVyLWFuZC1nYXRoZXIgY2hhciAqLwotCQkJaWYgKHBQYWNrZXQpIHsKLQkJCQlQQ0lfVU5NQVBfU0lOR0xFKHBBZCwgcFR4RC0+U0RQdHIwLAotCQkJCQkJIHBUeEQtPlNETGVuMCwKLQkJCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFBhY2tldCwKLQkJCQkJCSAgICBORElTX1NUQVRVU19GQUlMVVJFKTsKLQkJCX0KLQkJCXBBZC0+TWdtdFJpbmcuQ2VsbFtpXS5wTmRpc1BhY2tldCA9IE5VTEw7Ci0KLQkJCXBQYWNrZXQgPQotCQkJICAgICh2b2lkICopcEFkLT5NZ210UmluZy5DZWxsW2ldLgotCQkJICAgIHBOZXh0TmRpc1BhY2tldDsKLQkJCS8qIHJlbGVhc2Ugc2NhdHRlci1hbmQtZ2F0aGVyIGNoYXIgKi8KLQkJCWlmIChwUGFja2V0KSB7Ci0JCQkJUENJX1VOTUFQX1NJTkdMRShwQWQsIHBUeEQtPlNEUHRyMSwKLQkJCQkJCSBwVHhELT5TRExlbjEsCi0JCQkJCQkgUENJX0RNQV9UT0RFVklDRSk7Ci0JCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBQYWNrZXQsCi0JCQkJCQkgICAgTkRJU19TVEFUVVNfRkFJTFVSRSk7Ci0JCQl9Ci0JCQlwQWQtPk1nbXRSaW5nLkNlbGxbaV0ucE5leHROZGlzUGFja2V0ID0gTlVMTDsKLQotCQl9Ci0KLQkJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9NR01URFRYX0lEWCwgJnBBZC0+TWdtdFJpbmcuVHhEbWFJZHgpOwotCQlwQWQtPk1nbXRSaW5nLlR4U3dGcmVlSWR4ID0gcEFkLT5NZ210UmluZy5UeERtYUlkeDsKLQkJcEFkLT5NZ210UmluZy5UeENwdUlkeCA9IHBBZC0+TWdtdFJpbmcuVHhEbWFJZHg7Ci0JCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX01HTVRDVFhfSURYLCBwQWQtPk1nbXRSaW5nLlR4Q3B1SWR4KTsKLQotCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPk1nbXRSaW5nTG9jayk7Ci0JCXBBZC0+UmFsaW5rQ291bnRlcnMuTWdtdFJpbmdGdWxsQ291bnQgPSAwOwotCQlicmVhazsKLQotCWNhc2UgUUlEX1JYOgotCQkvKiBXZSBoYXZlIHRvIGNsZWFuIGFsbCBkZXNjcmlwdG9ycyBpbiBjYXNlIHNvbWUgZXJyb3IgaGFwcGVuZWQgd2l0aCByZXNldCAqLwotCQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPlJ4UmluZ0xvY2spOwotCi0JCWZvciAoaSA9IDA7IGkgPCBSWF9SSU5HX1NJWkU7IGkrKykgewotCQkJcFJ4RCA9IChzdHJ1Y3QgcnRfcnhkICopIHBBZC0+UnhSaW5nLkNlbGxbaV0uQWxsb2NWYTsKLQkJCXBSeEQtPkRET05FID0gMDsKLQkJfQotCi0JCVJUTVBfSU9fUkVBRDMyKHBBZCwgUlhfRFJYX0lEWCwgJnBBZC0+UnhSaW5nLlJ4RG1hSWR4KTsKLQkJcEFkLT5SeFJpbmcuUnhTd1JlYWRJZHggPSBwQWQtPlJ4UmluZy5SeERtYUlkeDsKLQkJcEFkLT5SeFJpbmcuUnhDcHVJZHggPQotCQkgICAgKChwQWQtPlJ4UmluZy5SeERtYUlkeCA9PQotCQkgICAgICAwKSA/IChSWF9SSU5HX1NJWkUgLSAxKSA6IChwQWQtPlJ4UmluZy5SeERtYUlkeCAtIDEpKTsKLQkJUlRNUF9JT19XUklURTMyKHBBZCwgUlhfQ1JYX0lEWCwgcEFkLT5SeFJpbmcuUnhDcHVJZHgpOwotCi0JCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+UnhSaW5nTG9jayk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotfQotCi12b2lkIFJUTVBGcmVlVHhSeFJpbmdNZW1vcnkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCWludCBpbmRleCwgbnVtLCBqOwotCXN0cnVjdCBydF9ydG1wX3R4X3JpbmcgKnBUeFJpbmc7Ci0Jc3RydWN0IHJ0X3R4ZCAqIHBUeEQ7Ci0Jdm9pZCAqcFBhY2tldDsKLQl1bnNpZ25lZCBpbnQgSXJxRmxhZ3M7Ci0KLQkvKnN0cnVjdCBvc19jb29raWUgKnBPYmogPShzdHJ1Y3Qgb3NfY29va2llICopcEFkLT5PU19Db29raWU7ICovCi0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gUlRNUEZyZWVUeFJ4UmluZ01lbW9yeVxuIikpOwotCi0JLyogRnJlZSBUeFN3UXVldWUgUGFja2V0ICovCi0JZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTlVNX09GX1RYX1JJTkc7IGluZGV4KyspIHsKLQkJc3RydWN0IHJ0X3F1ZXVlX2VudHJ5ICpwRW50cnk7Ci0JCXZvaWQgKnBQYWNrZXQ7Ci0JCXN0cnVjdCBydF9xdWV1ZV9oZWFkZXIgKnBRdWV1ZTsKLQotCQlSVE1QX0lSUV9MT0NLKCZwQWQtPmlycV9sb2NrLCBJcnFGbGFncyk7Ci0JCXBRdWV1ZSA9ICZwQWQtPlR4U3dRdWV1ZVtpbmRleF07Ci0JCXdoaWxlIChwUXVldWUtPkhlYWQpIHsKLQkJCXBFbnRyeSA9IFJlbW92ZUhlYWRRdWV1ZShwUXVldWUpOwotCQkJcFBhY2tldCA9IFFVRVVFX0VOVFJZX1RPX1BBQ0tFVChwRW50cnkpOwotCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOwotCQl9Ci0JCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5pcnFfbG9jaywgSXJxRmxhZ3MpOwotCX0KLQotCS8qIEZyZWUgVHggUmluZyBQYWNrZXQgKi8KLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBOVU1fT0ZfVFhfUklORzsgaW5kZXgrKykgewotCQlwVHhSaW5nID0gJnBBZC0+VHhSaW5nW2luZGV4XTsKLQotCQlmb3IgKGogPSAwOyBqIDwgVFhfUklOR19TSVpFOyBqKyspIHsKLQkJCXBUeEQgPSAoc3RydWN0IHJ0X3R4ZCAqKSAocFR4UmluZy0+Q2VsbFtqXS5BbGxvY1ZhKTsKLQkJCXBQYWNrZXQgPSBwVHhSaW5nLT5DZWxsW2pdLnBOZGlzUGFja2V0OwotCi0JCQlpZiAocFBhY2tldCkgewotCQkJCVBDSV9VTk1BUF9TSU5HTEUocEFkLCBwVHhELT5TRFB0cjAsCi0JCQkJCQkgcFR4RC0+U0RMZW4wLAotCQkJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQkJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUGFja2V0LAotCQkJCQkJICAgIE5ESVNfU1RBVFVTX1NVQ0NFU1MpOwotCQkJfQotCQkJLypBbHdheXMgYXNzaWduIHBOZGlzUGFja2V0IGFzIE5VTEwgYWZ0ZXIgY2xlYXIgKi8KLQkJCXBUeFJpbmctPkNlbGxbal0ucE5kaXNQYWNrZXQgPSBOVUxMOwotCi0JCQlwUGFja2V0ID0gcFR4UmluZy0+Q2VsbFtqXS5wTmV4dE5kaXNQYWNrZXQ7Ci0KLQkJCWlmIChwUGFja2V0KSB7Ci0JCQkJUENJX1VOTUFQX1NJTkdMRShwQWQsIHBUeEQtPlNEUHRyMSwKLQkJCQkJCSBwVHhELT5TRExlbjEsCi0JCQkJCQkgUENJX0RNQV9UT0RFVklDRSk7Ci0JCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBQYWNrZXQsCi0JCQkJCQkgICAgTkRJU19TVEFUVVNfU1VDQ0VTUyk7Ci0JCQl9Ci0JCQkvKkFsd2F5cyBhc3NpZ24gcE5leHROZGlzUGFja2V0IGFzIE5VTEwgYWZ0ZXIgY2xlYXIgKi8KLQkJCXBUeFJpbmctPkNlbGxbcFR4UmluZy0+VHhTd0ZyZWVJZHhdLnBOZXh0TmRpc1BhY2tldCA9Ci0JCQkgICAgTlVMTDsKLQotCQl9Ci0JfQotCi0JZm9yIChpbmRleCA9IFJYX1JJTkdfU0laRSAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pIHsKLQkJaWYgKChwQWQtPlJ4UmluZy5DZWxsW2luZGV4XS5EbWFCdWYuQWxsb2NWYSkKLQkJICAgICYmIChwQWQtPlJ4UmluZy5DZWxsW2luZGV4XS5wTmRpc1BhY2tldCkpIHsKLQkJCVBDSV9VTk1BUF9TSU5HTEUocEFkLAotCQkJCQkgcEFkLT5SeFJpbmcuQ2VsbFtpbmRleF0uRG1hQnVmLkFsbG9jUGEsCi0JCQkJCSBwQWQtPlJ4UmluZy5DZWxsW2luZGV4XS5EbWFCdWYuCi0JCQkJCSBBbGxvY1NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwKLQkJCQkJICAgIHBBZC0+UnhSaW5nLkNlbGxbaW5kZXhdLnBOZGlzUGFja2V0LAotCQkJCQkgICAgTkRJU19TVEFUVVNfU1VDQ0VTUyk7Ci0JCX0KLQl9Ci0JTmRpc1plcm9NZW1vcnkocEFkLT5SeFJpbmcuQ2VsbCwgUlhfUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCBydF9ydG1wX2RtYWNiKSk7Ci0KLQlpZiAocEFkLT5SeERlc2NSaW5nLkFsbG9jVmEpIHsKLQkJUlRNUF9GcmVlRGVzY01lbW9yeShwQWQsIHBBZC0+UnhEZXNjUmluZy5BbGxvY1NpemUsCi0JCQkJICAgIHBBZC0+UnhEZXNjUmluZy5BbGxvY1ZhLAotCQkJCSAgICBwQWQtPlJ4RGVzY1JpbmcuQWxsb2NQYSk7Ci0JfQotCU5kaXNaZXJvTWVtb3J5KCZwQWQtPlJ4RGVzY1JpbmcsIHNpemVvZihzdHJ1Y3QgcnRfcnRtcF9kbWFidWYpKTsKLQotCWlmIChwQWQtPk1nbXREZXNjUmluZy5BbGxvY1ZhKSB7Ci0JCVJUTVBfRnJlZURlc2NNZW1vcnkocEFkLCBwQWQtPk1nbXREZXNjUmluZy5BbGxvY1NpemUsCi0JCQkJICAgIHBBZC0+TWdtdERlc2NSaW5nLkFsbG9jVmEsCi0JCQkJICAgIHBBZC0+TWdtdERlc2NSaW5nLkFsbG9jUGEpOwotCX0KLQlOZGlzWmVyb01lbW9yeSgmcEFkLT5NZ210RGVzY1JpbmcsIHNpemVvZihzdHJ1Y3QgcnRfcnRtcF9kbWFidWYpKTsKLQotCWZvciAobnVtID0gMDsgbnVtIDwgTlVNX09GX1RYX1JJTkc7IG51bSsrKSB7Ci0JCWlmIChwQWQtPlR4QnVmU3BhY2VbbnVtXS5BbGxvY1ZhKSB7Ci0JCQlSVE1QX0ZyZWVGaXJzdFR4QnVmZmVyKHBBZCwKLQkJCQkJICAgICAgIHBBZC0+VHhCdWZTcGFjZVtudW1dLkFsbG9jU2l6ZSwKLQkJCQkJICAgICAgIEZBTFNFLAotCQkJCQkgICAgICAgcEFkLT5UeEJ1ZlNwYWNlW251bV0uQWxsb2NWYSwKLQkJCQkJICAgICAgIHBBZC0+VHhCdWZTcGFjZVtudW1dLkFsbG9jUGEpOwotCQl9Ci0JCU5kaXNaZXJvTWVtb3J5KCZwQWQtPlR4QnVmU3BhY2VbbnVtXSwgc2l6ZW9mKHN0cnVjdCBydF9ydG1wX2RtYWJ1ZikpOwotCi0JCWlmIChwQWQtPlR4RGVzY1JpbmdbbnVtXS5BbGxvY1ZhKSB7Ci0JCQlSVE1QX0ZyZWVEZXNjTWVtb3J5KHBBZCwgcEFkLT5UeERlc2NSaW5nW251bV0uQWxsb2NTaXplLAotCQkJCQkgICAgcEFkLT5UeERlc2NSaW5nW251bV0uQWxsb2NWYSwKLQkJCQkJICAgIHBBZC0+VHhEZXNjUmluZ1tudW1dLkFsbG9jUGEpOwotCQl9Ci0JCU5kaXNaZXJvTWVtb3J5KCZwQWQtPlR4RGVzY1JpbmdbbnVtXSwgc2l6ZW9mKHN0cnVjdCBydF9ydG1wX2RtYWJ1ZikpOwotCX0KLQotCWlmIChwQWQtPkZyYWdGcmFtZS5wRnJhZ1BhY2tldCkKLQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBBZC0+RnJhZ0ZyYW1lLnBGcmFnUGFja2V0LAotCQkJCSAgICBORElTX1NUQVRVU19TVUNDRVNTKTsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLSBSVE1QRnJlZVR4UnhSaW5nTWVtb3J5XG4iKSk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgKgotICAqCXJlZ2lzdGVyIHJlbGF0ZWQgcHJvY2VkdXJlcy4KLSAgKgotICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLVJvdXRpbmUgRGVzY3JpcHRpb246Ci0gICAgRGlzYWJsZSBETUEuCi0KLUFyZ3VtZW50czoKLQkqcEFkCQkJCXRoZSByYXh4IGludGVyZmFjZSBkYXRhIHBvaW50ZXIKLQotUmV0dXJuIFZhbHVlOgotCU5vbmUKLQotTm90ZToKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgUlQyOFhYRE1BRGlzYWJsZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0JV1BETUFfR0xPX0NGR19TVFJVQyBHbG9DZmc7Ci0KLQlSVE1QX0lPX1JFQUQzMihwQWQsIFdQRE1BX0dMT19DRkcsICZHbG9DZmcud29yZCk7Ci0JR2xvQ2ZnLndvcmQgJj0gMHhmZjA7Ci0JR2xvQ2ZnLmZpZWxkLkVuVFhXcml0ZUJhY2tERE9ORSA9IDE7Ci0JUlRNUF9JT19XUklURTMyKHBBZCwgV1BETUFfR0xPX0NGRywgR2xvQ2ZnLndvcmQpOwotfQotCi0vKgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Sb3V0aW5lIERlc2NyaXB0aW9uOgotICAgIEVuYWJsZSBETUEuCi0KLUFyZ3VtZW50czoKLQkqcEFkCQkJCXRoZSByYXh4IGludGVyZmFjZSBkYXRhIHBvaW50ZXIKLQotUmV0dXJuIFZhbHVlOgotCU5vbmUKLQotTm90ZToKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgUlQyOFhYRE1BRW5hYmxlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlXUERNQV9HTE9fQ0ZHX1NUUlVDIEdsb0NmZzsKLQlpbnQgaSA9IDA7Ci0KLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIDB4NCk7Ci0JZG8gewotCQlSVE1QX0lPX1JFQUQzMihwQWQsIFdQRE1BX0dMT19DRkcsICZHbG9DZmcud29yZCk7Ci0JCWlmICgoR2xvQ2ZnLmZpZWxkLlR4RE1BQnVzeSA9PSAwKQotCQkgICAgJiYgKEdsb0NmZy5maWVsZC5SeERNQUJ1c3kgPT0gMCkpCi0JCQlicmVhazsKLQotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT4gIERNQUJ1c3lcbiIpKTsKLQkJUlRNUHVzZWNEZWxheSgxMDAwKTsKLQkJaSsrOwotCX0gd2hpbGUgKGkgPCAyMDApOwotCi0JUlRNUHVzZWNEZWxheSg1MCk7Ci0KLQlHbG9DZmcuZmllbGQuRW5UWFdyaXRlQmFja0RET05FID0gMTsKLQlHbG9DZmcuZmllbGQuV1BETUFCdXJzdFNJWkUgPSAyOwotCUdsb0NmZy5maWVsZC5FbmFibGVSeERNQSA9IDE7Ci0JR2xvQ2ZnLmZpZWxkLkVuYWJsZVR4RE1BID0gMTsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCI8PT0gV1JJVEUgRE1BIG9mZnNldCAweDIwOCA9IDB4JXhcbiIsIEdsb0NmZy53b3JkKSk7Ci0JUlRNUF9JT19XUklURTMyKHBBZCwgV1BETUFfR0xPX0NGRywgR2xvQ2ZnLndvcmQpOwotCi19Ci0KLUJPT0xFQU4gQXNpY0NoZWNrQ29tbWFuT2soc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1OCBDb21tYW5kKQotewotCXUzMiBDbWRTdGF0dXMgPSAwLCBDSUQgPSAwLCBpOwotCXUzMiBUaGlzQ0lETWFzayA9IDA7Ci0KLQlpID0gMDsKLQlkbyB7Ci0JCVJUTVBfSU9fUkVBRDMyKHBBZCwgSDJNX01BSUxCT1hfQ0lELCAmQ0lEKTsKLQkJLyogRmluZCB3aGVyZSB0aGUgY29tbWFuZCBpcy4gQmVjYXVzZSB0aGlzIGlzIHJhbmRvbWx5IHNwZWNpZmllZCBieSBmaXJtd2FyZS4gKi8KLQkJaWYgKChDSUQgJiBDSUQwTUFTSykgPT0gQ29tbWFuZCkgewotCQkJVGhpc0NJRE1hc2sgPSBDSUQwTUFTSzsKLQkJCWJyZWFrOwotCQl9IGVsc2UgaWYgKCgoKENJRCAmIENJRDFNQVNLKSA+PiA4KSAmIDB4ZmYpID09IENvbW1hbmQpIHsKLQkJCVRoaXNDSURNYXNrID0gQ0lEMU1BU0s7Ci0JCQlicmVhazsKLQkJfSBlbHNlIGlmICgoKChDSUQgJiBDSUQyTUFTSykgPj4gMTYpICYgMHhmZikgPT0gQ29tbWFuZCkgewotCQkJVGhpc0NJRE1hc2sgPSBDSUQyTUFTSzsKLQkJCWJyZWFrOwotCQl9IGVsc2UgaWYgKCgoKENJRCAmIENJRDNNQVNLKSA+PiAyNCkgJiAweGZmKSA9PSBDb21tYW5kKSB7Ci0JCQlUaGlzQ0lETWFzayA9IENJRDNNQVNLOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlSVE1QdXNlY0RlbGF5KDEwMCk7Ci0JCWkrKzsKLQl9IHdoaWxlIChpIDwgMjAwKTsKLQotCS8qIEdldCBDb21tYW5kU3RhdHVzIFZhbHVlICovCi0JUlRNUF9JT19SRUFEMzIocEFkLCBIMk1fTUFJTEJPWF9TVEFUVVMsICZDbWRTdGF0dXMpOwotCi0JLyogVGhpcyBjb21tYW5kJ3Mgc3RhdHVzIGlzIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGFzIGNvbW1hbmQuIFNvIEFORCBjb21tYW5kIHBvc2l0aW9uJ3MgYml0bWFzayB0byByZWFkIHN0YXR1cy4gKi8KLQlpZiAoaSA8IDIwMCkgewotCQkvKiBJZiBTdGF0dXMgaXMgMSwgdGhlIGNvbW1hbmQgaXMgc3VjY2Vzcy4gKi8KLQkJaWYgKCgoQ21kU3RhdHVzICYgVGhpc0NJRE1hc2spID09IDB4MSkKLQkJICAgIHx8ICgoQ21kU3RhdHVzICYgVGhpc0NJRE1hc2spID09IDB4MTAwKQotCQkgICAgfHwgKChDbWRTdGF0dXMgJiBUaGlzQ0lETWFzaykgPT0gMHgxMDAwMCkKLQkJICAgIHx8ICgoQ21kU3RhdHVzICYgVGhpc0NJRE1hc2spID09IDB4MTAwMDAwMCkpIHsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAoIi0tPiBBc2ljQ2hlY2tDb21tYW5PayBDSUQgPSAweCV4LCBDbWRTdGF0dXM9IDB4JXggXG4iLAotCQkJCSAgQ0lELCBDbWRTdGF0dXMpKTsKLQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIEgyTV9NQUlMQk9YX1NUQVRVUywgMHhmZmZmZmZmZik7Ci0JCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBIMk1fTUFJTEJPWF9DSUQsIDB4ZmZmZmZmZmYpOwotCQkJcmV0dXJuIFRSVUU7Ci0JCX0KLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCItLT4gQXNpY0NoZWNrQ29tbWFuRmFpbDEgQ0lEID0gMHgleCwgQ21kU3RhdHVzPSAweCV4IFxuIiwKLQkJCSAgQ0lELCBDbWRTdGF0dXMpKTsKLQl9IGVsc2UgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIi0tPiBBc2ljQ2hlY2tDb21tYW5GYWlsMiBUaW1lb3V0IENvbW1hbmQgPSAlZCwgQ21kU3RhdHVzPSAweCV4IFxuIiwKLQkJCSAgQ29tbWFuZCwgQ21kU3RhdHVzKSk7Ci0JfQotCS8qIENsZWFyIENvbW1hbmQgYW5kIFN0YXR1cy4gKi8KLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBIMk1fTUFJTEJPWF9TVEFUVVMsIDB4ZmZmZmZmZmYpOwotCVJUTVBfSU9fV1JJVEUzMihwQWQsIEgyTV9NQUlMQk9YX0NJRCwgMHhmZmZmZmZmZik7Ci0KLQlyZXR1cm4gRkFMU0U7Ci19Ci0KLS8qCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLVJvdXRpbmUgRGVzY3JpcHRpb246Ci0gICAgV3JpdGUgQmVhY29uIGJ1ZmZlciB0byBBc2ljLgotCi1Bcmd1bWVudHM6Ci0JKnBBZAkJCQl0aGUgcmF4eCBpbnRlcmZhY2UgZGF0YSBwb2ludGVyCi0KLVJldHVybiBWYWx1ZToKLQlOb25lCi0KLU5vdGU6Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFJUMjh4eF9VcGRhdGVCZWFjb25Ub0FzaWMoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgICAgIGludCBhcGlkeCwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIEZyYW1lTGVuLCB1bnNpZ25lZCBsb25nIFVwZGF0ZVBvcykKLXsKLQl1bnNpZ25lZCBsb25nIENhcEluZm9Qb3MgPSAwOwotCXU4ICpwdHIsICpwdHJfdXBkYXRlLCAqcHRyX2NhcGluZm87Ci0JdTMyIGk7Ci0JQk9PTEVBTiBiQmNuUmVxID0gRkFMU0U7Ci0JdTggYmNuX2lkeCA9IDA7Ci0KLQl7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJICgiJXMoKSA6IE5vIHZhbGlkIEludGVyZmFjZSBiZSBmb3VuZC5cbiIsIF9fZnVuY19fKSk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKmlmICgocEFkLT5XZHNUYWIuTW9kZSA9PSBXRFNfQlJJREdFX01PREUpICovCi0JLyogICAgICB8fCAoKHBBZC0+QXBDZmcuTUJTU0lEW2FwaWR4XS5NU1NJRERldiA9PSBOVUxMKSAqLwotCS8qICAgICAgICAgICAgICB8fCAhKHBBZC0+QXBDZmcuTUJTU0lEW2FwaWR4XS5NU1NJRERldi0+ZmxhZ3MgJiBJRkZfVVApKSAqLwotCS8qICAgICAgKSAqLwotCWlmIChiQmNuUmVxID09IEZBTFNFKSB7Ci0JCS8qIHdoZW4gdGhlIHJhIGludGVyZmFjZSBpcyBkb3duLCBkbyBub3Qgc2VuZCBpdHMgYmVhY29uIGZyYW1lICovCi0JCS8qIGNsZWFyIGFsbCB6ZXJvICovCi0JCWZvciAoaSA9IDA7IGkgPCBUWFdJX1NJWkU7IGkgKz0gNCkKLQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIHBBZC0+QmVhY29uT2Zmc2V0W2Jjbl9pZHhdICsgaSwKLQkJCQkJMHgwMCk7Ci0JfSBlbHNlIHsKLQkJcHRyID0gKHU4ICopJiBwQWQtPkJlYWNvblR4V0k7Ci0JCWZvciAoaSA9IDA7IGkgPCBUWFdJX1NJWkU7IGkgKz0gNCkJLyogMTYtYnl0ZSBUWFdJIGZpZWxkICovCi0JCXsKLQkJCXUzMiBsb25ncHRyID0KLQkJCSAgICAqcHRyICsgKCoocHRyICsgMSkgPDwgOCkgKyAoKihwdHIgKyAyKSA8PCAxNikgKwotCQkJICAgICgqKHB0ciArIDMpIDw8IDI0KTsKLQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIHBBZC0+QmVhY29uT2Zmc2V0W2Jjbl9pZHhdICsgaSwKLQkJCQkJbG9uZ3B0cik7Ci0JCQlwdHIgKz0gNDsKLQkJfQotCi0JCS8qIFVwZGF0ZSBDYXBhYmlsaXR5SW5mbyBpbiBCZWFjb24gKi8KLQkJZm9yIChpID0gQ2FwSW5mb1BvczsgaSA8IChDYXBJbmZvUG9zICsgMik7IGkrKykgewotCQkJUlRNUF9JT19XUklURTgocEFkLAotCQkJCSAgICAgICBwQWQtPkJlYWNvbk9mZnNldFtiY25faWR4XSArIFRYV0lfU0laRSArCi0JCQkJICAgICAgIGksICpwdHJfY2FwaW5mbyk7Ci0JCQlwdHJfY2FwaW5mbysrOwotCQl9Ci0KLQkJaWYgKEZyYW1lTGVuID4gVXBkYXRlUG9zKSB7Ci0JCQlmb3IgKGkgPSBVcGRhdGVQb3M7IGkgPCAoRnJhbWVMZW4pOyBpKyspIHsKLQkJCQlSVE1QX0lPX1dSSVRFOChwQWQsCi0JCQkJCSAgICAgICBwQWQtPkJlYWNvbk9mZnNldFtiY25faWR4XSArCi0JCQkJCSAgICAgICBUWFdJX1NJWkUgKyBpLCAqcHRyX3VwZGF0ZSk7Ci0JCQkJcHRyX3VwZGF0ZSsrOwotCQkJfQotCQl9Ci0KLQl9Ci0KLX0KLQotdm9pZCBSVDI4eHhQY2lTdGFBc2ljRm9yY2VXYWtldXAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBJTiBCT09MRUFOIGJGcm9tVHgpCi17Ci0JQVVUT19XQUtFVVBfU1RSVUMgQXV0b1dha2V1cENmZzsKLQotCWlmICghT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKSkKLQkJcmV0dXJuOwotCi0JaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfV0FLRVVQX05PVykpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgid2FraW5nIHVwIG5vdyFcbiIpKTsKLQkJcmV0dXJuOwotCX0KLQotCU9QU1RBVFVTX1NFVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19XQUtFVVBfTk9XKTsKLQotCVJUTVBfQ0xFQVJfUFNGTEFHKHBBZCwgZlJUTVBfUFNfR09fVE9fU0xFRVBfTk9XKTsKLQotCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1BDSUVfREVWSUNFKQotCSAgICAmJiBwQWQtPlN0YUNmZy5QU0NvbnRyb2wuZmllbGQuRW5hYmxlTmV3UFMgPT0gVFJVRSkgewotCQkvKiBTdXBwb3J0IFBDSWUgQWR2YW5jZSBQb3dlciBTYXZlICovCi0JCWlmIChiRnJvbVR4ID09IFRSVUUgJiYgKHBBZC0+TWxtZS5iUHNQb2xsVGltZXJSdW5uaW5nID09IFRSVUUpKSB7Ci0JCQlwQWQtPk1sbWUuYlBzUG9sbFRpbWVyUnVubmluZyA9IEZBTFNFOwotCQkJUlRNUFBDSWVMaW5rQ3RybFZhbHVlUmVzdG9yZShwQWQsIFJFU1RPUkVfV0FLRVVQKTsKLQkJCVJUTVB1c2VjRGVsYXkoMzAwMCk7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCI9PT09PT09QXNpY0ZvcmNlV2FrZXVwPT09YkZyb21UeFxuIikpOwotCQl9Ci0KLQkJQXV0b1dha2V1cENmZy53b3JkID0gMDsKLQkJUlRNUF9JT19XUklURTMyKHBBZCwgQVVUT19XQUtFVVBfQ0ZHLCBBdXRvV2FrZXVwQ2ZnLndvcmQpOwotCi0JCWlmIChSVDI4eHhQY2lBc2ljUmFkaW9PbihwQWQsIERPVDExUE9XRVJTQVZFKSkgewotI2lmZGVmIFBDSUVfUFNfU1VQUE9SVAotCQkJLyogYWRkIGJ5IGpvaG5saSwgUkYgcG93ZXIgc2VxdWVuY2Ugc2V0dXAsIGxvYWQgUkYgbm9ybWFsIG9wZXJhdGlvbi1tb2RlIHNldHVwICovCi0JCQlpZiAoKElTX1JUMzA5MChwQWQpIHx8IElTX1JUMzU3MihwQWQpIHx8IElTX1JUMzM5MChwQWQpKQotCQkJICAgICYmIElTX1ZFUlNJT05fQUZURVJfRihwQWQpKSB7Ci0JCQkJc3RydWN0IHJ0X3J0bXBfY2hpcF9vcCAqcENoaXBPcHMgPSAmcEFkLT5jaGlwT3BzOwotCi0JCQkJaWYgKHBDaGlwT3BzLT5Bc2ljUmV2ZXJzZVJmRnJvbVNsZWVwTW9kZSkKLQkJCQkJcENoaXBPcHMtPgotCQkJCQkgICAgQXNpY1JldmVyc2VSZkZyb21TbGVlcE1vZGUocEFkKTsKLQkJCX0gZWxzZQotI2VuZGlmIC8qIFBDSUVfUFNfU1VQUE9SVCAvLyAqLwotCQkJewotCQkJCS8qIGVuZCBqb2hubGkgKi8KLQkJCQkvKiBJbiBSYWRpbyBPZmYsIHdlIHR1cm4gb2ZmIFJGIGNsaywgU28gbm93IG5lZWQgdG8gY2FsbCBBU0lDU3dpdGNoQ2hhbm5lbCBhZ2Fpbi4gKi8KLQkJCQlpZiAoSU5GUkFfT04ocEFkKQotCQkJCSAgICAmJiAocEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgIT0KLQkJCQkJcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkKLQkJCQkgICAgJiYgKHBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLgotCQkJCQlDaGFubmVsV2lkdGggPT0gQldfNDApKSB7Ci0JCQkJCS8qIE11c3QgdXNpbmcgNDBNSHouICovCi0JCQkJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwKLQkJCQkJCQkgIHBBZC0+Q29tbW9uQ2ZnLgotCQkJCQkJCSAgQ2VudHJhbENoYW5uZWwsCi0JCQkJCQkJICBGQUxTRSk7Ci0JCQkJCUFzaWNMb2NrQ2hhbm5lbChwQWQsCi0JCQkJCQkJcEFkLT5Db21tb25DZmcuCi0JCQkJCQkJQ2VudHJhbENoYW5uZWwpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCS8qIE11c3QgdXNpbmcgMjBNSHouICovCi0JCQkJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwKLQkJCQkJCQkgIHBBZC0+Q29tbW9uQ2ZnLgotCQkJCQkJCSAgQ2hhbm5lbCwgRkFMU0UpOwotCQkJCQlBc2ljTG9ja0NoYW5uZWwocEFkLAotCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpOwotCQkJCX0KLQkJCX0KLQkJfQotI2lmZGVmIFBDSUVfUFNfU1VQUE9SVAotCQkvKiAzMDkwIE1DVSBXYWtldXAgY29tbWFuZCBuZWVkcyBtb3JlIHRpbWUgdG8gYmUgc3RhYmxlLiAqLwotCQkvKiBCZWZvcmUgc3RhYmxlLCBkb24ndCBpc3N1ZSBvdGhlciBNQ1UgY29tbWFuZCB0byBwcmV2ZW50IGZyb20gZmlybXdhcmUgZXJyb3IuICovCi0JCWlmICgoKElTX1JUMzA5MChwQWQpIHx8IElTX1JUMzU3MihwQWQpIHx8IElTX1JUMzM5MChwQWQpKQotCQkgICAgICYmIElTX1ZFUlNJT05fQUZURVJfRihwQWQpKSAmJiBJU19WRVJTSU9OX0FGVEVSX0YocEFkKQotCQkgICAgJiYgKHBBZC0+U3RhQ2ZnLlBTQ29udHJvbC5maWVsZC5ydDMweHhQb3dlck1vZGUgPT0gMykKLQkJICAgICYmIChwQWQtPlN0YUNmZy5QU0NvbnRyb2wuZmllbGQuRW5hYmxlTmV3UFMgPT0gVFJVRSkpIHsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAoIjw9PVJUMjh4eFBjaVN0YUFzaWNGb3JjZVdha2V1cDo6UmVsZWFzZSB0aGUgTUNVIExvY2soMzA5MClcbiIpKTsKLQkJCVJUTVBfU0VNX0xPQ0soJnBBZC0+TWN1Q21kTG9jayk7Ci0JCQlwQWQtPmJydDMweHhCYW5NY3VDbWQgPSBGQUxTRTsKLQkJCVJUTVBfU0VNX1VOTE9DSygmcEFkLT5NY3VDbWRMb2NrKTsKLQkJfQotI2VuZGlmIC8qIFBDSUVfUFNfU1VQUE9SVCAvLyAqLwotCX0gZWxzZSB7Ci0JCS8qIFBDSSwgMjg2MC1QQ0llICovCi0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiPD09UlQyOHh4UGNpU3RhQXNpY0ZvcmNlV2FrZXVwOjpPcmlnaW5hbCBQQ0kgUG93ZXIgU2F2aW5nXG4iKSk7Ci0JCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHgzMSwgMHhmZiwgMHgwMCwgMHgwMik7Ci0JCUF1dG9XYWtldXBDZmcud29yZCA9IDA7Ci0JCVJUTVBfSU9fV1JJVEUzMihwQWQsIEFVVE9fV0FLRVVQX0NGRywgQXV0b1dha2V1cENmZy53b3JkKTsKLQl9Ci0KLQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKTsKLQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19XQUtFVVBfTk9XKTsKLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8PT09PT09PVJUMjh4eFBjaVN0YUFzaWNGb3JjZVdha2V1cFxuIikpOwotfQotCi12b2lkIFJUMjh4eFBjaVN0YUFzaWNTbGVlcFRoZW5BdXRvV2FrZXVwKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkJIHUxNiBUYnR0TnVtVG9OZXh0V2FrZVVwKQotewotCUJPT0xFQU4gYnJjOwotCi0JaWYgKHBBZC0+U3RhQ2ZnLmJSYWRpbyA9PSBGQUxTRSkgewotCQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19QQ0lFX0RFVklDRSkKLQkgICAgJiYgcEFkLT5TdGFDZmcuUFNDb250cm9sLmZpZWxkLkVuYWJsZU5ld1BTID09IFRSVUUpIHsKLQkJdW5zaWduZWQgbG9uZyBOb3cgPSAwOwotCQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19XQUtFVVBfTk9XKSkgewotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgid2FraW5nIHVwIG5vdyFcbiIpKTsKLQkJCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJTmRpc0dldFN5c3RlbVVwVGltZSgmTm93KTsKLQkJLyogSWYgbGFzdCBzZW5kIE5VTEwgZnJhbSB0aW1lIGlzIHRvbyBjbG9zZSB0byB0aGlzIHJlY2VpdmluZyBiZWFjb24gKHdpdGhpbiA4bXMpLCBkb24ndCBnbyB0byBzbGVlcCBmb3IgdGhpcyBEVE0uICovCi0JCS8qIEJlY2F1c2UgU29tZSBBUCBjYW4ndCBxdWV1aW5nIG91dGdvaW5nIGZyYW1lcyBpbW1lZGlhdGVseS4gKi8KLQkJaWYgKCgocEFkLT5NbG1lLkxhc3RTZW5kTlVMTHBzbVRpbWUgKyA4KSA+PSBOb3cpCi0JCSAgICAmJiAocEFkLT5NbG1lLkxhc3RTZW5kTlVMTHBzbVRpbWUgPD0gTm93KSkgewotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiTm93ID0gJWx1LCBMYXN0U2VuZE5VTExwc21UaW1lPSVsdSA6ICBSeENvdW50U2luY2VMYXN0TlVMTCA9ICVsdS4gXG4iLAotCQkJCSAgTm93LCBwQWQtPk1sbWUuTGFzdFNlbmROVUxMcHNtVGltZSwKLQkJCQkgIHBBZC0+UmFsaW5rQ291bnRlcnMuUnhDb3VudFNpbmNlTGFzdE5VTEwpKTsKLQkJCXJldHVybjsKLQkJfSBlbHNlIGlmICgocEFkLT5SYWxpbmtDb3VudGVycy5SeENvdW50U2luY2VMYXN0TlVMTCA+IDApCi0JCQkgICAmJgotCQkJICAgKChwQWQtPk1sbWUuTGFzdFNlbmROVUxMcHNtVGltZSArCi0JCQkgICAgIHBBZC0+Q29tbW9uQ2ZnLkJlYWNvblBlcmlvZCkgPj0gTm93KSkgewotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiTm93ID0gJWx1LCBMYXN0U2VuZE5VTExwc21UaW1lPSVsdTogUnhDb3VudFNpbmNlTGFzdE5VTEwgPSAlbHUgPiAwIFxuIiwKLQkJCQkgIE5vdywgcEFkLT5NbG1lLkxhc3RTZW5kTlVMTHBzbVRpbWUsCi0JCQkJICBwQWQtPlJhbGlua0NvdW50ZXJzLlJ4Q291bnRTaW5jZUxhc3ROVUxMKSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlicmMgPQotCQkgICAgUlQyOHh4UGNpQXNpY1JhZGlvT2ZmKHBBZCwgRE9UMTFQT1dFUlNBVkUsCi0JCQkJCSAgVGJ0dE51bVRvTmV4dFdha2VVcCk7Ci0JCWlmIChicmMgPT0gVFJVRSkKLQkJCU9QU1RBVFVTX1NFVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKTsKLQl9IGVsc2UgewotCQlBVVRPX1dBS0VVUF9TVFJVQyBBdXRvV2FrZXVwQ2ZnOwotCQkvKiB3ZSBoYXZlIGRlY2lkZWQgdG8gU0xFRVAsIHNvIGF0IGxlYXN0IGRvIGl0IGZvciBhIEJFQUNPTiBwZXJpb2QuICovCi0JCWlmIChUYnR0TnVtVG9OZXh0V2FrZVVwID09IDApCi0JCQlUYnR0TnVtVG9OZXh0V2FrZVVwID0gMTsKLQotCQkvKlJUTVBfSU9fV1JJVEUzMihwQWQsIElOVF9NQVNLX0NTUiwgQXV0b1dha2V1cEludCk7ICovCi0KLQkJQXV0b1dha2V1cENmZy53b3JkID0gMDsKLQkJUlRNUF9JT19XUklURTMyKHBBZCwgQVVUT19XQUtFVVBfQ0ZHLCBBdXRvV2FrZXVwQ2ZnLndvcmQpOwotCQlBdXRvV2FrZXVwQ2ZnLmZpZWxkLk51bW9mU2xlZXBpbmdUYnR0ID0gVGJ0dE51bVRvTmV4dFdha2VVcCAtIDE7Ci0JCUF1dG9XYWtldXBDZmcuZmllbGQuRW5hYmxlQXV0b1dha2V1cCA9IDE7Ci0JCUF1dG9XYWtldXBDZmcuZmllbGQuQXV0b0xlYWRUaW1lID0gNTsKLQkJUlRNUF9JT19XUklURTMyKHBBZCwgQVVUT19XQUtFVVBfQ0ZHLCBBdXRvV2FrZXVwQ2ZnLndvcmQpOwotCQlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4MzAsIDB4ZmYsIDB4ZmYsIDB4MDApOwkvKiBzZW5kIFBPV0VSLVNBVkUgY29tbWFuZCB0byBNQ1UuIFRpbWVvdXQgNDB1cy4gKi8KLQkJT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpOwotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIjwtLSAlcywgVGJ0dE51bVRvTmV4dFdha2VVcD0lZCBcbiIsIF9fZnVuY19fLAotCQkJICBUYnR0TnVtVG9OZXh0V2FrZVVwKSk7Ci0JfQotCi19Ci0KLXZvaWQgUHNQb2xsV2FrZUV4ZWModm9pZCAqU3lzdGVtU3BlY2lmaWMxLAotCQkgICAgdm9pZCAqRnVuY3Rpb25Db250ZXh0LAotCQkgICAgdm9pZCAqU3lzdGVtU3BlY2lmaWMyLCB2b2lkICpTeXN0ZW1TcGVjaWZpYzMpCi17Ci0Jc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkID0gKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKilGdW5jdGlvbkNvbnRleHQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPlBzUG9sbFdha2VFeGVjIFxuIikpOwotCVJUTVBfSU5UX0xPQ0soJnBBZC0+aXJxX2xvY2ssIGZsYWdzKTsKLQlpZiAocEFkLT5NbG1lLmJQc1BvbGxUaW1lclJ1bm5pbmcpIHsKLQkJUlRNUFBDSWVMaW5rQ3RybFZhbHVlUmVzdG9yZShwQWQsIFJFU1RPUkVfV0FLRVVQKTsKLQl9Ci0JcEFkLT5NbG1lLmJQc1BvbGxUaW1lclJ1bm5pbmcgPSBGQUxTRTsKLQlSVE1QX0lOVF9VTkxPQ0soJnBBZC0+aXJxX2xvY2ssIGZsYWdzKTsKLSNpZmRlZiBQQ0lFX1BTX1NVUFBPUlQKLQkvKiBGb3IgcnQzMHh4IHBvd2VyIHNvbHV0aW9uIDMsIFVzZSBzb2Z0d2FyZSB0aW1lciB0byB3YWtlIHVwIGluIHBzbS4gU28gY2FsbCAqLwotCS8qIEFzaWNGb3JjZVdha2V1cCBoZXJlIGluc3RlYWQgb2YgaGFuZGxpbmcgdHdha2V1cCBpbnRlcnJ1cHQuICovCi0JaWYgKCgoSVNfUlQzMDkwKHBBZCkgfHwgSVNfUlQzNTcyKHBBZCkgfHwgSVNfUlQzMzkwKHBBZCkpCi0JICAgICAmJiBJU19WRVJTSU9OX0FGVEVSX0YocEFkKSkKLQkgICAgJiYgKHBBZC0+U3RhQ2ZnLlBTQ29udHJvbC5maWVsZC5ydDMweHhQb3dlck1vZGUgPT0gMykKLQkgICAgJiYgKHBBZC0+U3RhQ2ZnLlBTQ29udHJvbC5maWVsZC5FbmFibGVOZXdQUyA9PSBUUlVFKSkgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIjwtLVBzUG9sbFdha2VFeGVjOjozMDkwIGNhbGxzIEFzaWNGb3JjZVdha2V1cChwQWQsIERPVDExUE9XRVJTQVZFKSBpbiBhZHZhbmNlIFxuIikpOwotCQlBc2ljRm9yY2VXYWtldXAocEFkLCBET1QxMVBPV0VSU0FWRSk7Ci0JfQotI2VuZGlmIC8qIFBDSUVfUFNfU1VQUE9SVCAvLyAqLwotfQotCi12b2lkIFJhZGlvT25FeGVjKHZvaWQgKlN5c3RlbVNwZWNpZmljMSwKLQkJIHZvaWQgKkZ1bmN0aW9uQ29udGV4dCwKLQkJIHZvaWQgKlN5c3RlbVNwZWNpZmljMiwgdm9pZCAqU3lzdGVtU3BlY2lmaWMzKQotewotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCA9IChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICopRnVuY3Rpb25Db250ZXh0OwotCXN0cnVjdCBydF9ydG1wX2NoaXBfb3AgKnBDaGlwT3BzID0gJnBBZC0+Y2hpcE9wczsKLQlXUERNQV9HTE9fQ0ZHX1NUUlVDIERtYUNmZzsKLQlCT09MRUFOIENhbmNlbGxlZDsKLQotCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiLS0+UmFkaW9PbkV4ZWMoKSByZXR1cm4gb24gZk9QX1NUQVRVU19ET1pFID09IFRSVUU7IFxuIikpOwotLypLSCBEZWJ1ZzogQWRkIHRoZSBjb21waWxlIGZsYWcgIlJUMjg2MCBhbmQgY29uZGl0aW9uICovCi0jaWZkZWYgUlRNUF9QQ0lfU1VQUE9SVAotCQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19QQ0lFX0RFVklDRSkKLQkJICAgICYmIHBBZC0+U3RhQ2ZnLlBTQ29udHJvbC5maWVsZC5FbmFibGVOZXdQUyA9PSBUUlVFKQotCQkJUlRNUFNldFRpbWVyKCZwQWQtPk1sbWUuUmFkaW9Pbk9mZlRpbWVyLCAxMCk7Ci0jZW5kaWYgLyogUlRNUF9QQ0lfU1VQUE9SVCAvLyAqLwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUykpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCItLT5SYWRpb09uRXhlYygpIHJldHVybiBvbiBTQ0FOX0lOX1BST0dSRVNTOyBcbiIpKTsKLSNpZmRlZiBSVE1QX1BDSV9TVVBQT1JUCi0JCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1BDSUVfREVWSUNFKQotCQkgICAgJiYgcEFkLT5TdGFDZmcuUFNDb250cm9sLmZpZWxkLkVuYWJsZU5ld1BTID09IFRSVUUpCi0JCQlSVE1QU2V0VGltZXIoJnBBZC0+TWxtZS5SYWRpb09uT2ZmVGltZXIsIDEwKTsKLSNlbmRpZiAvKiBSVE1QX1BDSV9TVVBQT1JUIC8vICovCi0JCXJldHVybjsKLQl9Ci0vKktIIERlYnVnOiBuZWVkIHRvIGNoZWNrLiBJIGFkZCB0aGUgY29tcGlsZSBmbGFnICJDT05GSUdfU1RBX1NVUFBPUlQiIHRvIGVuY2xvc2UgdGhlIGZvbGxvd2luZyBjb2Rlcy4gKi8KLSNpZmRlZiBSVE1QX1BDSV9TVVBQT1JUCi0JaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfUENJRV9ERVZJQ0UpCi0JICAgICYmIHBBZC0+U3RhQ2ZnLlBTQ29udHJvbC5maWVsZC5FbmFibGVOZXdQUyA9PSBUUlVFKSB7Ci0JCXBBZC0+TWxtZS5iUHNQb2xsVGltZXJSdW5uaW5nID0gRkFMU0U7Ci0JCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lLlBzUG9sbFRpbWVyLCAmQ2FuY2VsbGVkKTsKLQl9Ci0jZW5kaWYgLyogUlRNUF9QQ0lfU1VQUE9SVCAvLyAqLwotCWlmIChwQWQtPlN0YUNmZy5iUmFkaW8gPT0gVFJVRSkgewotCQlwQWQtPmJQQ0ljbGtPZmYgPSBGQUxTRTsKLQkJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0FDX0JLKTsKLQkJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0FDX0JFKTsKLQkJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0FDX1ZJKTsKLQkJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0FDX1ZPKTsKLQkJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX01HTVQpOwotCQlSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfUlgpOwotCi0JCS8qIDIuIFNlbmQgd2FrZSB1cCBjb21tYW5kLiAqLwotCQlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4MzEsIFBvd2VyV2FrZUNJRCwgMHgwMCwgMHgwMik7Ci0JCS8qIDItMS4gd2FpdCBjb21tYW5kIG9rLiAqLwotCQlBc2ljQ2hlY2tDb21tYW5PayhwQWQsIFBvd2VyV2FrZUNJRCk7Ci0KLQkJLyogV2hlbiBQQ0kgY2xvY2sgaXMgb2ZmLCBkb24ndCB3YW50IHRvIHNlcnZpY2UgaW50ZXJydXB0LiBTbyB3aGVuIGJhY2sgdG8gY2xvY2sgb24sIGVuYWJsZSBpbnRlcnJ1cHQuICovCi0JCS8qUlRNUF9JT19XUklURTMyKHBBZCwgSU5UX01BU0tfQ1NSLCAoREVMQVlJTlRNQVNLfFJ4SU5UKSk7ICovCi0JCVJUTVBfQVNJQ19JTlRFUlJVUFRfRU5BQkxFKHBBZCk7Ci0KLQkJLyogMy4gRW5hYmxlIFR4IERNQS4gKi8KLQkJUlRNUF9JT19SRUFEMzIocEFkLCBXUERNQV9HTE9fQ0ZHLCAmRG1hQ2ZnLndvcmQpOwotCQlEbWFDZmcuZmllbGQuRW5hYmxlVHhETUEgPSAxOwotCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBXUERNQV9HTE9fQ0ZHLCBEbWFDZmcud29yZCk7Ci0KLQkJLyogSW4gUmFkaW8gT2ZmLCB3ZSB0dXJuIG9mZiBSRiBjbGssIFNvIG5vdyBuZWVkIHRvIGNhbGwgQVNJQ1N3aXRjaENoYW5uZWwgYWdhaW4uICovCi0JCWlmIChJTkZSQV9PTihwQWQpCi0JCSAgICAmJiAocEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgIT0gcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkKLQkJICAgICYmIChwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5DaGFubmVsV2lkdGggPT0KLQkJCUJXXzQwKSkgewotCQkJLyogTXVzdCB1c2luZyA0ME1Iei4gKi8KLQkJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwsCi0JCQkJCSAgRkFMU0UpOwotCQkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwpOwotCQl9IGVsc2UgewotCQkJLyogTXVzdCB1c2luZyAyME1Iei4gKi8KLQkJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCwgRkFMU0UpOwotCQkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7Ci0JCX0KLQotLypLSCBEZWJ1ZzpUaGUgZm9sbG93aW5nIGNvZGVzIHNob3VsZCBiZSBlbmNsb3NlZCBieSBSVDMwOTAgY29tcGlsZSBmbGFnICovCi0JCWlmIChwQ2hpcE9wcy0+QXNpY1JldmVyc2VSZkZyb21TbGVlcE1vZGUpCi0JCQlwQ2hpcE9wcy0+QXNpY1JldmVyc2VSZkZyb21TbGVlcE1vZGUocEFkKTsKLQotI2lmZGVmIFBDSUVfUFNfU1VQUE9SVAotLyogMzA5MCBNQ1UgV2FrZXVwIGNvbW1hbmQgbmVlZHMgbW9yZSB0aW1lIHRvIGJlIHN0YWJsZS4gKi8KLS8qIEJlZm9yZSBzdGFibGUsIGRvbid0IGlzc3VlIG90aGVyIE1DVSBjb21tYW5kIHRvIHByZXZlbnQgZnJvbSBmaXJtd2FyZSBlcnJvci4gKi8KLQkJaWYgKChJU19SVDMwOTAocEFkKSB8fCBJU19SVDM1NzIocEFkKSB8fCBJU19SVDMzOTAocEFkKSkKLQkJICAgICYmIElTX1ZFUlNJT05fQUZURVJfRihwQWQpCi0JCSAgICAmJiAocEFkLT5TdGFDZmcuUFNDb250cm9sLmZpZWxkLnJ0MzB4eFBvd2VyTW9kZSA9PSAzKQotCQkgICAgJiYgKHBBZC0+U3RhQ2ZnLlBTQ29udHJvbC5maWVsZC5FbmFibGVOZXdQUyA9PSBUUlVFKSkgewotCQkJUlRNUF9TRU1fTE9DSygmcEFkLT5NY3VDbWRMb2NrKTsKLQkJCXBBZC0+YnJ0MzB4eEJhbk1jdUNtZCA9IEZBTFNFOwotCQkJUlRNUF9TRU1fVU5MT0NLKCZwQWQtPk1jdUNtZExvY2spOwotCQl9Ci0jZW5kaWYgLyogUENJRV9QU19TVVBQT1JUIC8vICovCi0KLQkJLyogQ2xlYXIgUmFkaW8gb2ZmIGZsYWcgKi8KLQkJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SQURJT19PRkYpOwotCi0JCS8qIFNldCBMRUQgKi8KLQkJUlRNUFNldExFRChwQWQsIExFRF9SQURJT19PTik7Ci0KLQkJaWYgKHBBZC0+U3RhQ2ZnLlBzbSA9PSBQV1JfQUNUSVZFKSB7Ci0JCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLAotCQkJCQkJICAgICBwQWQtPlN0YUNmZy5CQlBSMyk7Ci0JCX0KLQl9IGVsc2UgewotCQlSVDI4eHhQY2lBc2ljUmFkaW9PZmYocEFkLCBHVUlSQURJT19PRkYsIDApOwotCX0KLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlUaGlzIHJvdXRpbmUgc2VuZHMgY29tbWFuZCB0byBmaXJtd2FyZSBhbmQgdHVybiBvdXIgY2hpcCB0byB3YWtlIHVwIG1vZGUgZnJvbSBwb3dlciBzYXZlIG1vZGUuCi0JCUJvdGggUmFkaW9PbiBhbmQgLjExIHBvd2VyIHNhdmUgZnVuY3Rpb24gbmVlZHMgdG8gY2FsbCB0aGlzIHJvdXRpbmUuCi0JSW5wdXQ6Ci0JCUxldmVsID0gR1VJUkFESU9fT0ZGIDogY2FsbCB0aGlzIGZ1bmN0aW9uIGlzIGZyb20gUmFkaW8gT2ZmIHRvIFJhZGlvIE9uLiAgTmVlZCB0byByZXN0b3JlIFBDSSBob3N0IHZhbHVlLgotCQlMZXZlbCA9IG90aGVyIHZhbHVlIDogbm9ybWFsIHdha2UgdXAgZnVuY3Rpb24uCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi1CT09MRUFOIFJUMjh4eFBjaUFzaWNSYWRpb09uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggTGV2ZWwpCi17Ci0JLypXUERNQV9HTE9fQ0ZHX1NUUlVDICAgICAgIERtYUNmZzsgKi8KLQlCT09MRUFOIENhbmNlbGxlZDsKLQkvKnUzMiAgICAgICAgICAgICAgICAgICAgICAgIE1BQ1ZhbHVlOyAqLwotCi0JaWYgKHBBZC0+T3BNb2RlID09IE9QTU9ERV9BUCAmJiBMZXZlbCA9PSBET1QxMVBPV0VSU0FWRSkKLQkJcmV0dXJuIEZBTFNFOwotCi0JaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfUENJRV9ERVZJQ0UpKSB7Ci0JCWlmIChwQWQtPlN0YUNmZy5QU0NvbnRyb2wuZmllbGQuRW5hYmxlTmV3UFMgPT0gVFJVRSkgewotCQkJcEFkLT5NbG1lLmJQc1BvbGxUaW1lclJ1bm5pbmcgPSBGQUxTRTsKLQkJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lLlBzUG9sbFRpbWVyLCAmQ2FuY2VsbGVkKTsKLQkJfQotCQlpZiAoKHBBZC0+U3RhQ2ZnLlBTQ29udHJvbC5maWVsZC5FbmFibGVOZXdQUyA9PSBUUlVFICYmCi0JCSAgICAgKExldmVsID09IEdVSVJBRElPX09GRiB8fCBMZXZlbCA9PSBHVUlfSURMRV9QT1dFUl9TQVZFKSkgfHwKLQkJICAgIFJUTVBfVEVTVF9QU0ZMQUcocEFkLCBmUlRNUF9QU19TRVRfUENJX0NMS19PRkZfQ09NTUFORCkpIHsKLQkJCS8qIFNvbWUgY2hpcHMgZG9uJ3QgbmVlZCB0byBkZWxheSA2bXMsIHNvIGNvcHkgUlRNUFBDSWVQb3dlckxpbmtDdHJsUmVzdG9yZSAqLwotCQkJLyogcmV0dXJuIGNvbmRpdGlvbiBoZXJlLiAqLwotCQkJLyoKLQkJCSAgIGlmICgoKHBBZC0+TUFDVmVyc2lvbiYweGZmZmYwMDAwKSAhPSAweDI4NjAwMDAwKQotCQkJICAgJiYgKChwQWQtPkRldmljZUlEID09IE5JQzI4NjBfUENJZV9ERVZJQ0VfSUQpCi0JCQkgICB8fChwQWQtPkRldmljZUlEID09IE5JQzI3OTBfUENJZV9ERVZJQ0VfSUQpKSkKLQkJCSAqLwotCQkJewotCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkgKCJSVDI4eHhQY2lBc2ljUmFkaW9PbiAoKVxuIikpOwotCQkJCS8qIDEuIFNldCBQQ0kgTGluayBDb250cm9sIGluIENvbmZpZ3VyYXRpb24gU3BhY2UuICovCi0JCQkJUlRNUFBDSWVMaW5rQ3RybFZhbHVlUmVzdG9yZShwQWQsCi0JCQkJCQkJICAgICBSRVNUT1JFX1dBS0VVUCk7Ci0JCQkJUlRNUHVzZWNEZWxheSg2MDAwKTsKLQkJCX0KLQkJfQotCX0KLSNpZmRlZiBQQ0lFX1BTX1NVUFBPUlQKLQlpZiAoIQotCSAgICAoKChJU19SVDMwOTAocEFkKSB8fCBJU19SVDM1NzIocEFkKSB8fCBJU19SVDMzOTAocEFkKSkKLQkgICAgICAmJiBJU19WRVJTSU9OX0FGVEVSX0YocEFkKQotCSAgICAgICYmIChwQWQtPlN0YUNmZy5QU0NvbnRyb2wuZmllbGQucnQzMHh4UG93ZXJNb2RlID09IDMpCi0JICAgICAgJiYgKHBBZC0+U3RhQ2ZnLlBTQ29udHJvbC5maWVsZC5FbmFibGVOZXdQUyA9PSBUUlVFKSkpKQotI2VuZGlmIC8qIFBDSUVfUFNfU1VQUE9SVCAvLyAqLwotCXsKLQkJcEFkLT5iUENJY2xrT2ZmID0gRkFMU0U7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiUFNNIDozMDl4YlBDSWNsa09mZiA9PSAlZFxuIiwgcEFkLT5iUENJY2xrT2ZmKSk7Ci0JfQotCS8qIDIuIFNlbmQgd2FrZSB1cCBjb21tYW5kLiAqLwotCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHgzMSwgUG93ZXJXYWtlQ0lELCAweDAwLCAweDAyKTsKLQlwQWQtPmJQQ0ljbGtPZmYgPSBGQUxTRTsKLQkvKiAyLTEuIHdhaXQgY29tbWFuZCBvay4gKi8KLQlBc2ljQ2hlY2tDb21tYW5PayhwQWQsIFBvd2VyV2FrZUNJRCk7Ci0JUlRNUF9BU0lDX0lOVEVSUlVQVF9FTkFCTEUocEFkKTsKLQotCVJUTVBfQ0xFQVJfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSURMRV9SQURJT19PRkYpOwotCWlmIChMZXZlbCA9PSBHVUlfSURMRV9QT1dFUl9TQVZFKSB7Ci0jaWZkZWYgIFBDSUVfUFNfU1VQUE9SVAotCi0JCS8qIGFkZCBieSBqb2hubGksIFJGIHBvd2VyIHNlcXVlbmNlIHNldHVwLCBsb2FkIFJGIG5vcm1hbCBvcGVyYXRpb24tbW9kZSBzZXR1cCAqLwotCQlpZiAoKElTX1JUMzA5MChwQWQpIHx8IElTX1JUMzU3MihwQWQpIHx8IElTX1JUMzM5MChwQWQpKSkgewotCQkJc3RydWN0IHJ0X3J0bXBfY2hpcF9vcCAqcENoaXBPcHMgPSAmcEFkLT5jaGlwT3BzOwotCi0JCQlpZiAocENoaXBPcHMtPkFzaWNSZXZlcnNlUmZGcm9tU2xlZXBNb2RlKQotCQkJCXBDaGlwT3BzLT5Bc2ljUmV2ZXJzZVJmRnJvbVNsZWVwTW9kZShwQWQpOwotCQkJLyogMzA5MCBNQ1UgV2FrZXVwIGNvbW1hbmQgbmVlZHMgbW9yZSB0aW1lIHRvIGJlIHN0YWJsZS4gKi8KLQkJCS8qIEJlZm9yZSBzdGFibGUsIGRvbid0IGlzc3VlIG90aGVyIE1DVSBjb21tYW5kIHRvIHByZXZlbnQgZnJvbSBmaXJtd2FyZSBlcnJvci4gKi8KLQkJCWlmICgoSVNfUlQzMDkwKHBBZCkgfHwgSVNfUlQzNTcyKHBBZCkgfHwgSVNfUlQzMzkwKHBBZCkpCi0JCQkgICAgJiYgSVNfVkVSU0lPTl9BRlRFUl9GKHBBZCkKLQkJCSAgICAmJiAocEFkLT5TdGFDZmcuUFNDb250cm9sLmZpZWxkLnJ0MzB4eFBvd2VyTW9kZSA9PQotCQkJCTMpCi0JCQkgICAgJiYgKHBBZC0+U3RhQ2ZnLlBTQ29udHJvbC5maWVsZC5FbmFibGVOZXdQUyA9PQotCQkJCVRSVUUpKSB7Ci0JCQkJUlRNUF9TRU1fTE9DSygmcEFkLT5NY3VDbWRMb2NrKTsKLQkJCQlwQWQtPmJydDMweHhCYW5NY3VDbWQgPSBGQUxTRTsKLQkJCQlSVE1QX1NFTV9VTkxPQ0soJnBBZC0+TWN1Q21kTG9jayk7Ci0JCQl9Ci0JCX0gZWxzZQotCQkJLyogZW5kIGpvaG5saSAqLwotI2VuZGlmIC8qIFBDSUVfUFNfU1VQUE9SVCAvLyAqLwotCQl7Ci0JCQkvKiBJbiBSYWRpbyBPZmYsIHdlIHR1cm4gb2ZmIFJGIGNsaywgU28gbm93IG5lZWQgdG8gY2FsbCBBU0lDU3dpdGNoQ2hhbm5lbCBhZ2Fpbi4gKi8KLQkJCXsKLQkJCQlpZiAoSU5GUkFfT04ocEFkKQotCQkJCSAgICAmJiAocEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgIT0KLQkJCQkJcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkKLQkJCQkgICAgJiYgKHBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLgotCQkJCQlDaGFubmVsV2lkdGggPT0gQldfNDApKSB7Ci0JCQkJCS8qIE11c3QgdXNpbmcgNDBNSHouICovCi0JCQkJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwKLQkJCQkJCQkgIHBBZC0+Q29tbW9uQ2ZnLgotCQkJCQkJCSAgQ2VudHJhbENoYW5uZWwsCi0JCQkJCQkJICBGQUxTRSk7Ci0JCQkJCUFzaWNMb2NrQ2hhbm5lbChwQWQsCi0JCQkJCQkJcEFkLT5Db21tb25DZmcuCi0JCQkJCQkJQ2VudHJhbENoYW5uZWwpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCS8qIE11c3QgdXNpbmcgMjBNSHouICovCi0JCQkJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwKLQkJCQkJCQkgIHBBZC0+Q29tbW9uQ2ZnLgotCQkJCQkJCSAgQ2hhbm5lbCwgRkFMU0UpOwotCQkJCQlBc2ljTG9ja0NoYW5uZWwocEFkLAotCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpOwotCQkJCX0KLQkJCX0KLQotCQl9Ci0JfQotCXJldHVybiBUUlVFOwotCi19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJVGhpcyByb3V0aW5lIHNlbmRzIGNvbW1hbmQgdG8gZmlybXdhcmUgYW5kIHR1cm4gb3VyIGNoaXAgdG8gcG93ZXIgc2F2ZSBtb2RlLgotCQlCb3RoIFJhZGlvT2ZmIGFuZCAuMTEgcG93ZXIgc2F2ZSBmdW5jdGlvbiBuZWVkcyB0byBjYWxsIHRoaXMgcm91dGluZS4KLQlJbnB1dDoKLQkJTGV2ZWwgPSBHVUlSQURJT19PRkYgIDogR1VJIFJhZGlvIE9mZiBtb2RlCi0JCUxldmVsID0gRE9UMTFQT1dFUlNBVkUgIDogODAyLjExIHBvd2VyIHNhdmUgbW9kZQotCQlMZXZlbCA9IFJUTVBfSEFMVCAgOiBXaGVuIERpc2FibGUgZGV2aWNlLgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotQk9PTEVBTiBSVDI4eHhQY2lBc2ljUmFkaW9PZmYoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgICAgdTggTGV2ZWwsIHUxNiBUYnR0TnVtVG9OZXh0V2FrZVVwKQotewotCVdQRE1BX0dMT19DRkdfU1RSVUMgRG1hQ2ZnOwotCXU4IGksIHRlbXBCQlBfUjMgPSAwOwotCUJPT0xFQU4gYnJjID0gRkFMU0UsIENhbmNlbGxlZDsKLQl1MzIgVGJUVFRpbWUgPSAwOwotCXUzMiBQc1BvbGxUaW1lID0gMCAvKiwgTUFDVmFsdWUgKi8gOwotCXVuc2lnbmVkIGxvbmcgQmVhY29uUGVyaW9kVGltZTsKLQl1MzIgUnhEbWFJZHgsIFJ4Q3B1SWR4OwotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCJBc2ljUmFkaW9PZmYgPT09PiBMdj0gJWQsIFR4Q3B1SWR4ID0gJWQsIFR4RG1hSWR4ID0gJWQuIFJ4Q3B1SWR4ID0gJWQsIFJ4RG1hSWR4ID0gJWQuXG4iLAotCQkgIExldmVsLCBwQWQtPlR4UmluZ1swXS5UeENwdUlkeCwgcEFkLT5UeFJpbmdbMF0uVHhEbWFJZHgsCi0JCSAgcEFkLT5SeFJpbmcuUnhDcHVJZHgsIHBBZC0+UnhSaW5nLlJ4RG1hSWR4KSk7Ci0KLQlpZiAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX0FQICYmIExldmVsID09IERPVDExUE9XRVJTQVZFKQotCQlyZXR1cm4gRkFMU0U7Ci0KLQkvKiBDaGVjayBSeCBETUEgYnVzeSBzdGF0dXMsIGlmIG1vcmUgdGhhbiBoYWxmIGlzIG9jY3VwaWVkLCBnaXZlIHVwIHRoaXMgcmFkaW8gb2ZmLiAqLwotCVJUTVBfSU9fUkVBRDMyKHBBZCwgUlhfRFJYX0lEWCwgJlJ4RG1hSWR4KTsKLQlSVE1QX0lPX1JFQUQzMihwQWQsIFJYX0NSWF9JRFgsICZSeENwdUlkeCk7Ci0JaWYgKChSeERtYUlkeCA+IFJ4Q3B1SWR4KSAmJiAoKFJ4RG1hSWR4IC0gUnhDcHVJZHgpID4gUlhfUklOR19TSVpFIC8gMykpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJBc2ljUmFkaW9PZmYgPT09PiByZXR1cm4xLiBSeERtYUlkeCA9ICVkICwgIFJ4Q3B1SWR4ID0gJWQuIFxuIiwKLQkJCSAgUnhEbWFJZHgsIFJ4Q3B1SWR4KSk7Ci0JCXJldHVybiBGQUxTRTsKLQl9IGVsc2UgaWYgKChSeENwdUlkeCA+PSBSeERtYUlkeCkKLQkJICAgJiYgKChSeENwdUlkeCAtIFJ4RG1hSWR4KSA8IFJYX1JJTkdfU0laRSAvIDMpKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiQXNpY1JhZGlvT2ZmID09PT4gcmV0dXJuMi4gIFJ4Q3B1SWR4ID0gJWQuIFJ4RG1hSWR4ID0gJWQgLCAgXG4iLAotCQkJICBSeENwdUlkeCwgUnhEbWFJZHgpKTsKLQkJcmV0dXJuIEZBTFNFOwotCX0KLQkvKiBPbmNlIGdvIGludG8gdGhpcyBmdW5jdGlvbiwgZGlzYWJsZSB0eCBiZWNhdXNlIGRvbid0IHdhbnQgdG9vIG1hbnkgcGFja2V0cyBpbiBxdWV1ZSB0byBwcmV2ZW50IEhXIHN0b3BzLiAqLwotCS8qcEFkLT5iUENJY2xrT2ZmRGlzYWJsZVR4ID0gVFJVRTsgKi8KLQlSVE1QX1NFVF9QU0ZMQUcocEFkLCBmUlRNUF9QU19ESVNBQkxFX1RYKTsKLQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19QQ0lFX0RFVklDRSkKLQkgICAgJiYgcEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQQotCSAgICAmJiBwQWQtPlN0YUNmZy5QU0NvbnRyb2wuZmllbGQuRW5hYmxlTmV3UFMgPT0gVFJVRSkgewotCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZS5SYWRpb09uT2ZmVGltZXIsICZDYW5jZWxsZWQpOwotCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZS5Qc1BvbGxUaW1lciwgJkNhbmNlbGxlZCk7Ci0KLQkJaWYgKExldmVsID09IERPVDExUE9XRVJTQVZFKSB7Ci0JCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRCVFRfVElNRVIsICZUYlRUVGltZSk7Ci0JCQlUYlRUVGltZSAmPSAweDFmZmZmOwotCQkJLyogMDAuIGNoZWNrIGlmIG5lZWQgdG8gZG8gc2xlZXAgaW4gdGhpcyBEVElNIHBlcmlvZC4gICBJZiBuZXh0IGJlYWNvbiB3aWxsIGFycml2ZSB3aXRoaW4gMzBtcyAsIC4uLmRvZXNuJ3QgbmVjZXNzYXJpbHkgc2xlZXAuICovCi0JCQkvKiBUYlRUVGltZSB1aW50ID0gNjR1cywgTEVBRF9USU1FIHVuaXQgPSAxMDI0dXMsIFBzUG9sbFRpbWUgdW5pdCA9IDFtcyAqLwotCQkJaWYgKCgoNjQgKiBUYlRUVGltZSkgPCAoKExFQURfVElNRSAqIDEwMjQpICsgNDAwMDApKQotCQkJICAgICYmIChUYnR0TnVtVG9OZXh0V2FrZVVwID09IDApKSB7Ci0JCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJCSAoIlRiVFRUaW1lID0gMHgleCAsIGdpdmUgdXAgdGhpcyBzbGVlcC4gXG4iLAotCQkJCQkgIFRiVFRUaW1lKSk7Ci0JCQkJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSk7Ci0JCQkJLypwQWQtPmJQQ0ljbGtPZmZEaXNhYmxlVHggPSBGQUxTRTsgKi8KLQkJCQlSVE1QX0NMRUFSX1BTRkxBRyhwQWQsIGZSVE1QX1BTX0RJU0FCTEVfVFgpOwotCQkJCXJldHVybiBGQUxTRTsKLQkJCX0gZWxzZSB7Ci0JCQkJUHNQb2xsVGltZSA9Ci0JCQkJICAgICg2NCAqIFRiVFRUaW1lIC0gTEVBRF9USU1FICogMTAyNCkgLyAxMDAwOwotI2lmZGVmIFBDSUVfUFNfU1VQUE9SVAotCQkJCWlmICgoSVNfUlQzMDkwKHBBZCkgfHwgSVNfUlQzNTcyKHBBZCkKLQkJCQkgICAgIHx8IElTX1JUMzM5MChwQWQpKQotCQkJCSAgICAmJiBJU19WRVJTSU9OX0FGVEVSX0YocEFkKQotCQkJCSAgICAmJiAocEFkLT5TdGFDZmcuUFNDb250cm9sLmZpZWxkLgotCQkJCQlydDMweHhQb3dlck1vZGUgPT0gMykKLQkJCQkgICAgJiYgKHBBZC0+U3RhQ2ZnLlBTQ29udHJvbC5maWVsZC4KLQkJCQkJRW5hYmxlTmV3UFMgPT0gVFJVRSkpIHsKLQkJCQkJUHNQb2xsVGltZSAtPSA1OwotCQkJCX0gZWxzZQotI2VuZGlmIC8qIFBDSUVfUFNfU1VQUE9SVCAvLyAqLwotCQkJCQlQc1BvbGxUaW1lIC09IDM7Ci0KLQkJCQlCZWFjb25QZXJpb2RUaW1lID0KLQkJCQkgICAgcEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kICogMTAyIC8gMTAwOwotCQkJCWlmIChUYnR0TnVtVG9OZXh0V2FrZVVwID4gMCkKLQkJCQkJUHNQb2xsVGltZSArPQotCQkJCQkgICAgKChUYnR0TnVtVG9OZXh0V2FrZVVwIC0KLQkJCQkJICAgICAgMSkgKiBCZWFjb25QZXJpb2RUaW1lKTsKLQotCQkJCXBBZC0+TWxtZS5iUHNQb2xsVGltZXJSdW5uaW5nID0gVFJVRTsKLQkJCQlSVE1QU2V0VGltZXIoJnBBZC0+TWxtZS5Qc1BvbGxUaW1lciwKLQkJCQkJICAgICBQc1BvbGxUaW1lKTsKLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiUlQyOHh4UGNpQXNpY1JhZGlvT2ZmOjpMZXZlbCE9RE9UMTFQT1dFUlNBVkUgXG4iKSk7Ci0JfQotCi0JcEFkLT5iUENJY2xrT2ZmRGlzYWJsZVR4ID0gRkFMU0U7Ci0KLQlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9JRExFX1JBRElPX09GRik7Ci0KLQkvKiBTZXQgdG8gMVIuICovCi0JaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPiAxICYmIHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpIHsKLQkJdGVtcEJCUF9SMyA9IChwQWQtPlN0YUNmZy5CQlBSMyAmIDB4RTcpOwotCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCB0ZW1wQkJQX1IzKTsKLQl9Ci0JLyogSW4gUmFkaW8gT2ZmLCB3ZSB0dXJuIG9mZiBSRiBjbGssIFNvIG5vdyBuZWVkIHRvIGNhbGwgQVNJQ1N3aXRjaENoYW5uZWwgYWdhaW4uICovCi0JaWYgKChJTkZSQV9PTihwQWQpIHx8IHBBZC0+T3BNb2RlID09IE9QTU9ERV9BUCkKLQkgICAgJiYgKHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsICE9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpCi0JICAgICYmIChwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5DaGFubmVsV2lkdGggPT0gQldfNDApKSB7Ci0JCS8qIE11c3QgdXNpbmcgNDBNSHouICovCi0JCUFzaWNUdXJuT2ZmUkZDbGsocEFkLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCk7Ci0JfSBlbHNlIHsKLQkJLyogTXVzdCB1c2luZyAyME1Iei4gKi8KLQkJQXNpY1R1cm5PZmZSRkNsayhwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpOwotCX0KLQotCWlmIChMZXZlbCAhPSBSVE1QX0hBTFQpIHsKLQkJLyogQ2hhbmdlIEludGVycnVwdCBiaXRtYXNrLiAqLwotCQkvKiBXaGVuIFBDSSBjbG9jayBpcyBvZmYsIGRvbid0IHdhbnQgdG8gc2VydmljZSBpbnRlcnJ1cHQuICovCi0JCVJUTVBfSU9fV1JJVEUzMihwQWQsIElOVF9NQVNLX0NTUiwgQXV0b1dha2V1cEludCk7Ci0JfSBlbHNlIHsKLQkJUlRNUF9BU0lDX0lOVEVSUlVQVF9ESVNBQkxFKHBBZCk7Ci0JfQotCi0JUlRNUF9JT19XUklURTMyKHBBZCwgUlhfQ1JYX0lEWCwgcEFkLT5SeFJpbmcuUnhDcHVJZHgpOwotCS8qICAyLiBTZW5kIFNsZWVwIGNvbW1hbmQgKi8KLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBIMk1fTUFJTEJPWF9TVEFUVVMsIDB4ZmZmZmZmZmYpOwotCVJUTVBfSU9fV1JJVEUzMihwQWQsIEgyTV9NQUlMQk9YX0NJRCwgMHhmZmZmZmZmZik7Ci0JLyogc2VuZCBQT1dFUi1TQVZFIGNvbW1hbmQgdG8gTUNVLiBoaWdoLWJ5dGUgPSAxIHNhdmUgcG93ZXIgYXMgbXVjaCBhcyBwb3NzaWJsZS4gaGlnaCBieXRlID0gMCBzYXZlIGxlc3MgcG93ZXIgKi8KLQlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4MzAsIFBvd2VyU2FmZUNJRCwgMHhmZiwgMHgxKTsKLQkvKiAgMi0xLiBXYWl0IGNvbW1hbmQgc3VjY2VzcyAqLwotCS8qIFN0YXR1cyA9IDEgOiBzdWNjZXNzLCBTdGF0dXMgPSAyLCBhbHJlYWR5IHNsZWVwLCBTdGF0dXMgPSAzLCBNYXliZSBNQUMgaXMgYnVzeSBzbyBjYW4ndCBmaW5pc2ggdGhpcyB0YXNrLiAqLwotCWJyYyA9IEFzaWNDaGVja0NvbW1hbk9rKHBBZCwgUG93ZXJTYWZlQ0lEKTsKLQotCS8qICAzLiBBZnRlciAweDMwIGNvbW1hbmQgaXMgb2ssIHNlbmQgcmFkaW8gb2ZmIGNvbW1hbmQuIGxvd2J5dGUgPSAwIGZvciBwb3dlciBzYWZlLiAqLwotCS8qIElmIDB4MzAgY29tbWFuZCBpcyBub3Qgb2sgdGhpcyB0aW1lLCB3ZSBjYW4gaWdub3JlIDB4MzUgY29tbWFuZC4gSXQgd2lsbCBtYWtlIHN1cmUgbm90IGNhdXNlIGZpcm13YXJlJ3IgcHJvYmxlbS4gKi8KLQlpZiAoKExldmVsID09IERPVDExUE9XRVJTQVZFKSAmJiAoYnJjID09IFRSVUUpKSB7Ci0JCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHgzNSwgUG93ZXJSYWRpb09mZkNJRCwgMCwgMHgwMCk7CS8qIGxvd2J5dGUgPSAwIG1lYW5zIHRvIGRvIHBvd2VyIHNhZmUsIE5PVCB0dXJuIG9mZiByYWRpby4gKi8KLQkJLyogIDMtMS4gV2FpdCBjb21tYW5kIHN1Y2Nlc3MgKi8KLQkJQXNpY0NoZWNrQ29tbWFuT2socEFkLCBQb3dlclJhZGlvT2ZmQ0lEKTsKLQl9IGVsc2UgaWYgKGJyYyA9PSBUUlVFKSB7Ci0JCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHgzNSwgUG93ZXJSYWRpb09mZkNJRCwgMSwgMHgwMCk7CS8qIGxvd2J5dGUgPSAwIG1lYW5zIHRvIGRvIHBvd2VyIHNhZmUsIE5PVCB0dXJuIG9mZiByYWRpby4gKi8KLQkJLyogIDMtMS4gV2FpdCBjb21tYW5kIHN1Y2Nlc3MgKi8KLQkJQXNpY0NoZWNrQ29tbWFuT2socEFkLCBQb3dlclJhZGlvT2ZmQ0lEKTsKLQl9Ci0JLyogMS4gV2FpdCBETUEgbm90IGJ1c3kgKi8KLQlpID0gMDsKLQlkbyB7Ci0JCVJUTVBfSU9fUkVBRDMyKHBBZCwgV1BETUFfR0xPX0NGRywgJkRtYUNmZy53b3JkKTsKLQkJaWYgKChEbWFDZmcuZmllbGQuUnhETUFCdXN5ID09IDApCi0JCSAgICAmJiAoRG1hQ2ZnLmZpZWxkLlR4RE1BQnVzeSA9PSAwKSkKLQkJCWJyZWFrOwotCQlSVE1QdXNlY0RlbGF5KDIwKTsKLQkJaSsrOwotCX0gd2hpbGUgKGkgPCA1MCk7Ci0KLQkvKgotCSAgIGlmIChpID49IDUwKQotCSAgIHsKLQkgICBwQWQtPkNoZWNrRG1hQnVzeUNvdW50Kys7Ci0JICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiRE1BIFJ4IGtlZXBzIGJ1c3kuICByZXR1cm4gb24gQXNpY1JhZGlvT2ZmICgpIENoZWNrRG1hQnVzeUNvdW50ID0gJWQgXG4iLCBwQWQtPkNoZWNrRG1hQnVzeUNvdW50KSk7Ci0JICAgfQotCSAgIGVsc2UKLQkgICB7Ci0JICAgcEFkLT5DaGVja0RtYUJ1c3lDb3VudCA9IDA7Ci0JICAgfQotCSAqLwotLypLSCBEZWJ1ZzpNeSBvcmlnaW5hbCBjb2RlcyBoYXZlIHRoZSBmb2xsb3dpbmcgY29kZXMsIGJ1dCBjdXJyZWNudCBjb2RlcyBkbyBub3QgaGF2ZSBpdC4gKi8KLS8qIERpc2FibGUgZm9yIHN0YWJpbGl0eS4gSWYgUENJRSBMaW5rIENvbnRyb2wgaXMgbW9kaWZpZWQgZm9yIGFkdmFuY2UgcG93ZXIgc2F2ZSwgcmUtY292ZXJ5IHRoaXMgY29kZSBzZWdtZW50LiAqLwotCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9TWVNfQ1RSTCwgMHgxMjgwKTsKLS8qT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0NMS1NFTEVDVF80ME1IWik7ICovCi0KLSNpZmRlZiBQQ0lFX1BTX1NVUFBPUlQKLQlpZiAoKElTX1JUMzA5MChwQWQpIHx8IElTX1JUMzU3MihwQWQpIHx8IElTX1JUMzM5MChwQWQpKQotCSAgICAmJiBJU19WRVJTSU9OX0FGVEVSX0YocEFkKQotCSAgICAmJiAocEFkLT5TdGFDZmcuUFNDb250cm9sLmZpZWxkLnJ0MzB4eFBvd2VyTW9kZSA9PSAzKQotCSAgICAmJiAocEFkLT5TdGFDZmcuUFNDb250cm9sLmZpZWxkLkVuYWJsZU5ld1BTID09IFRSVUUpKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiUlQyOHh4UGNpQXNpY1JhZGlvT2ZmOjozMDkwIHJldHVybiB0byBza2lwIHRoZSBmb2xsb3dpbmcgVGJ0dE51bVRvTmV4dFdha2VVcCBzZXR0aW5nIGZvciAyNzl4XG4iKSk7Ci0JCXBBZC0+YlBDSWNsa09mZiA9IFRSVUU7Ci0JCVJUTVBfQ0xFQVJfUFNGTEFHKHBBZCwgZlJUTVBfUFNfRElTQUJMRV9UWCk7Ci0JCS8qIEZvciB0aGlzIGNhc2UsIGRvZXNuJ3QgbmVlZCB0byBiZWxvdyBhY3Rpb25zLCBzbyByZXR1cm4gaGVyZS4gKi8KLQkJcmV0dXJuIGJyYzsKLQl9Ci0jZW5kaWYgLyogUENJRV9QU19TVVBQT1JUIC8vICovCi0KLQlpZiAoTGV2ZWwgPT0gRE9UMTFQT1dFUlNBVkUpIHsKLQkJQVVUT19XQUtFVVBfU1RSVUMgQXV0b1dha2V1cENmZzsKLQkJLypSVE1QU2V0VGltZXIoJnBBZC0+TWxtZS5Qc1BvbGxUaW1lciwgOTApOyAqLwotCi0JCS8qIHdlIGhhdmUgZGVjaWRlZCB0byBTTEVFUCwgc28gYXQgbGVhc3QgZG8gaXQgZm9yIGEgQkVBQ09OIHBlcmlvZC4gKi8KLQkJaWYgKFRidHROdW1Ub05leHRXYWtlVXAgPT0gMCkKLQkJCVRidHROdW1Ub05leHRXYWtlVXAgPSAxOwotCi0JCUF1dG9XYWtldXBDZmcud29yZCA9IDA7Ci0JCVJUTVBfSU9fV1JJVEUzMihwQWQsIEFVVE9fV0FLRVVQX0NGRywgQXV0b1dha2V1cENmZy53b3JkKTsKLQotCQkvKiAxLiBTZXQgYXV0byB3YWtlIHVwIHRpbWVyLiAqLwotCQlBdXRvV2FrZXVwQ2ZnLmZpZWxkLk51bW9mU2xlZXBpbmdUYnR0ID0gVGJ0dE51bVRvTmV4dFdha2VVcCAtIDE7Ci0JCUF1dG9XYWtldXBDZmcuZmllbGQuRW5hYmxlQXV0b1dha2V1cCA9IDE7Ci0JCUF1dG9XYWtldXBDZmcuZmllbGQuQXV0b0xlYWRUaW1lID0gTEVBRF9USU1FOwotCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBBVVRPX1dBS0VVUF9DRkcsIEF1dG9XYWtldXBDZmcud29yZCk7Ci0JfQotCS8qICA0LTEuIElmIGl0J3MgdG8gZGlzYWJsZSBvdXIgZGV2aWNlLiBOZWVkIHRvIHJlc3RvcmUgUENJIENvbmZpZ3VyYXRpb24gU3BhY2UgdG8gaXRzIG9yaWdpbmFsIHZhbHVlLiAqLwotCWlmIChMZXZlbCA9PSBSVE1QX0hBTFQgJiYgcEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkgewotCQlpZiAoKGJyYyA9PSBUUlVFKSAmJiAoaSA8IDUwKSkKLQkJCVJUTVBQQ0llTGlua0N0cmxTZXR0aW5nKHBBZCwgMSk7Ci0JfQotCS8qICA0LiBTZXQgUENJIGNvbmZpZ3VyYXRpb24gU3BhY2UgTGluayBDb210cm9sIGZpZWxkcy4gIE9ubHkgUmFkaW8gT2ZmIG5lZWRzIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiAqLwotCWVsc2UgaWYgKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpIHsKLQkJaWYgKChicmMgPT0gVFJVRSkgJiYgKGkgPCA1MCkpCi0JCQlSVE1QUENJZUxpbmtDdHJsU2V0dGluZyhwQWQsIDMpOwotCX0KLQkvKnBBZC0+YlBDSWNsa09mZkRpc2FibGVUeCA9IEZBTFNFOyAqLwotCVJUTVBfQ0xFQVJfUFNGTEFHKHBBZCwgZlJUTVBfUFNfRElTQUJMRV9UWCk7Ci0JcmV0dXJuIFRSVUU7Ci19Ci0KLXZvaWQgUlQyOHh4UGNpTWxtZVJhZGlvT24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCWlmICghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JBRElPX09GRikpCi0JCXJldHVybjsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzPT09PlxuIiwgX19mdW5jX18pKTsKLQotCWlmICgocEFkLT5PcE1vZGUgPT0gT1BNT0RFX0FQKSB8fCAoKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpCi0JCQkJCSAgICYmCi0JCQkJCSAgICghT1BTVEFUVVNfVEVTVF9GTEFHCi0JCQkJCSAgICAocEFkLCBmT1BfU1RBVFVTX1BDSUVfREVWSUNFKQotCQkJCQkgICAgfHwgcEFkLT5TdGFDZmcuUFNDb250cm9sLmZpZWxkLgotCQkJCQkgICAgRW5hYmxlTmV3UFMgPT0gRkFMU0UpKSkgewotCQlSVDI4eHhQY2lBc2ljUmFkaW9PbihwQWQsIEdVSV9JRExFX1BPV0VSX1NBVkUpOwotCQkvKk5JQ1Jlc2V0RnJvbUVycm9yKHBBZCk7ICovCi0KLQkJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0FDX0JLKTsKLQkJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0FDX0JFKTsKLQkJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0FDX1ZJKTsKLQkJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0FDX1ZPKTsKLQkJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX01HTVQpOwotCQlSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfUlgpOwotCi0JCS8qIEVuYWJsZSBUeC9SeCAqLwotCQlSVE1QRW5hYmxlUnhUeChwQWQpOwotCi0JCS8qIENsZWFyIFJhZGlvIG9mZiBmbGFnICovCi0JCVJUTVBfQ0xFQVJfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkFESU9fT0ZGKTsKLQotCQlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0lETEVfUkFESU9fT0ZGKTsKLQotCQkvKiBTZXQgTEVEICovCi0JCVJUTVBTZXRMRUQocEFkLCBMRURfUkFESU9fT04pOwotCX0KLQotCWlmICgocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkgJiYKLQkgICAgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfUENJRV9ERVZJQ0UpKQotCSAgICAmJiAocEFkLT5TdGFDZmcuUFNDb250cm9sLmZpZWxkLkVuYWJsZU5ld1BTID09IFRSVUUpKSB7Ci0JCUJPT0xFQU4gQ2FuY2VsbGVkOwotCi0JCVJUTVBQQ0llTGlua0N0cmxWYWx1ZVJlc3RvcmUocEFkLCBSRVNUT1JFX1dBS0VVUCk7Ci0KLQkJcEFkLT5NbG1lLmJQc1BvbGxUaW1lclJ1bm5pbmcgPSBGQUxTRTsKLQkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWUuUHNQb2xsVGltZXIsICZDYW5jZWxsZWQpOwotCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZS5SYWRpb09uT2ZmVGltZXIsICZDYW5jZWxsZWQpOwotCQlSVE1QU2V0VGltZXIoJnBBZC0+TWxtZS5SYWRpb09uT2ZmVGltZXIsIDQwKTsKLQl9Ci19Ci0KLXZvaWQgUlQyOHh4UGNpTWxtZVJhZGlvT0ZGKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlCT09MRUFOIGJyYyA9IFRSVUU7Ci0KLQlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JBRElPX09GRikpCi0JCXJldHVybjsKLQotCS8qIExpbmsgZG93biBmaXJzdCBpZiBhbnkgYXNzb2NpYXRpb24gZXhpc3RzICovCi0JaWYgKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpIHsKLQkJaWYgKElORlJBX09OKHBBZCkgfHwgQURIT0NfT04ocEFkKSkgewotCQkJc3RydWN0IHJ0X21sbWVfZGlzYXNzb2NfcmVxIERpc1JlcTsKLQkJCXN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKnBNc2dFbGVtID0KLQkJCSAgICBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtKSwKLQkJCQkJCQlNRU1fQUxMT0NfRkxBRyk7Ci0KLQkJCWlmIChwTXNnRWxlbSkgewotCQkJCUNPUFlfTUFDX0FERFIoJkRpc1JlcS5BZGRyLAotCQkJCQkgICAgICBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7Ci0JCQkJRGlzUmVxLlJlYXNvbiA9IFJFQVNPTl9ESVNBU1NPQ19TVEFfTEVBVklORzsKLQotCQkJCXBNc2dFbGVtLT5NYWNoaW5lID0gQVNTT0NfU1RBVEVfTUFDSElORTsKLQkJCQlwTXNnRWxlbS0+TXNnVHlwZSA9IE1UMl9NTE1FX0RJU0FTU09DX1JFUTsKLQkJCQlwTXNnRWxlbS0+TXNnTGVuID0KLQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBydF9tbG1lX2Rpc2Fzc29jX3JlcSk7Ci0JCQkJTmRpc01vdmVNZW1vcnkocE1zZ0VsZW0tPk1zZywgJkRpc1JlcSwKLQkJCQkJICAgICAgIHNpemVvZgotCQkJCQkgICAgICAgKHN0cnVjdCBydF9tbG1lX2Rpc2Fzc29jX3JlcSkpOwotCi0JCQkJTWxtZURpc2Fzc29jUmVxQWN0aW9uKHBBZCwgcE1zZ0VsZW0pOwotCQkJCWtmcmVlKHBNc2dFbGVtKTsKLQotCQkJCVJUTVB1c2VjRGVsYXkoMTAwMCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlcz09PT5cbiIsIF9fZnVuY19fKSk7Ci0KLQkvKiBTZXQgUmFkaW8gb2ZmIGZsYWcgKi8KLQlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SQURJT19PRkYpOwotCi0JewotCQlCT09MRUFOIENhbmNlbGxlZDsKLQkJaWYgKHBBZC0+U3RhQ2ZnLlBTQ29udHJvbC5maWVsZC5FbmFibGVOZXdQUyA9PSBUUlVFKSB7Ci0JCQlpZiAoUlRNUF9URVNUX0ZMQUcKLQkJCSAgICAocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKSkgewotCQkJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LlNjYW5UaW1lciwKLQkJCQkJCSZDYW5jZWxsZWQpOwotCQkJCVJUTVBfQ0xFQVJfRkxBRyhwQWQsCi0JCQkJCQlmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKTsKLQkJCX0KLQkJCS8qIElmIGR1cmluZyBwb3dlciBzYWZlIG1vZGUuICovCi0JCQlpZiAocEFkLT5TdGFDZmcuYlJhZGlvID09IFRSVUUpIHsKLQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkJICgiLS0+TWxtZVJhZGlvT2ZmKCkgcmV0dXJuIG9uIGJSYWRpbyA9PSBUUlVFOyBcbiIpKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQkvKiBBbHdheXMgcmFkaW8gb24gc2luY2UgdGhlIE5JQyBuZWVkcyB0byBzZXQgdGhlIE1DVSBjb21tYW5kIChMRURfUkFESU9fT0ZGKS4gKi8KLQkJCWlmIChJRExFX09OKHBBZCkgJiYKLQkJCSAgICAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0lETEVfUkFESU9fT0ZGKSkpCi0JCQl7Ci0JCQkJUlQyOHh4UGNpQXNpY1JhZGlvT24ocEFkLCBHVUlfSURMRV9QT1dFUl9TQVZFKTsKLQkJCX0KLQkJCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1BDSUVfREVWSUNFKSkgewotCQkJCUJPT0xFQU4gQ2FuY2VsbGVkOwotCQkJCXBBZC0+TWxtZS5iUHNQb2xsVGltZXJSdW5uaW5nID0gRkFMU0U7Ci0JCQkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWUuUHNQb2xsVGltZXIsCi0JCQkJCQkmQ2FuY2VsbGVkKTsKLQkJCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZS5SYWRpb09uT2ZmVGltZXIsCi0JCQkJCQkmQ2FuY2VsbGVkKTsKLQkJCX0KLQkJfQotCQkvKiBMaW5rIGRvd24gZmlyc3QgaWYgYW55IGFzc29jaWF0aW9uIGV4aXN0cyAqLwotCQlpZiAoSU5GUkFfT04ocEFkKSB8fCBBREhPQ19PTihwQWQpKQotCQkJTGlua0Rvd24ocEFkLCBGQUxTRSk7Ci0JCVJUTVB1c2VjRGVsYXkoMTAwMDApOwotCQkvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCQkvKiBDbGVhbiB1cCBvbGQgYnNzIHRhYmxlICovCi0JCUJzc1RhYmxlSW5pdCgmcEFkLT5TY2FuVGFiKTsKLQotCQkvKgotCQkgICBpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19QQ0lFX0RFVklDRSkpCi0JCSAgIHsKLQkJICAgUlRNUFNldFRpbWVyKCZwQWQtPk1sbWUuUmFkaW9Pbk9mZlRpbWVyLCAxMCk7Ci0JCSAgIHJldHVybjsKLQkJICAgfQotCQkgKi8KLQl9Ci0KLQkvKiBTZXQgTEVELk1vdmUgdG8gaGVyZSBmb3IgZml4aW5nIExFRCBidWcuIFRoaXMgZmxhZyBtdXN0IGJlIGNhbGxlZCBhZnRlciBMaW5rRG93biAqLwotCVJUTVBTZXRMRUQocEFkLCBMRURfUkFESU9fT0ZGKTsKLQotLypLSCBEZWJ1ZzpBbGwgUENJZSBkZXZpY2VzIG5lZWQgdG8gdXNlIHRpbWVyIHRvIGV4ZWN1dGUgcmFkaW8gb2ZmIGZ1bmN0aW9uLCBvciB0aGUgUENJZSYmRW5hYmxlTmV3UFMgbmVlZHMuICovCi0vKktIIEFuczpJdCBpcyByaWdodCwgYmVjYXVzZSBvbmx5IHdoZW4gdGhlIFBDSWUgYW5kIEVuYWJsZU5ld1BzIGlzIHRydWUsIHdlIG5lZWQgdG8gZGVsYXkgdGhlIFJhZGlvT2ZmVGltZXIgKi8KLS8qdG8gYXZvaWQgdGhlIGRlYWRsb2NrIHdpdGggUENJZSBQb3dlciBzYXZpbmcgZnVuY3Rpb24uICovCi0JaWYgKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEgJiYKLQkgICAgT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19QQ0lFX0RFVklDRSkgJiYKLQkgICAgcEFkLT5TdGFDZmcuUFNDb250cm9sLmZpZWxkLkVuYWJsZU5ld1BTID09IFRSVUUpIHsKLQkJUlRNUFNldFRpbWVyKCZwQWQtPk1sbWUuUmFkaW9Pbk9mZlRpbWVyLCAxMCk7Ci0JfSBlbHNlIHsKLQkJYnJjID0gUlQyOHh4UGNpQXNpY1JhZGlvT2ZmKHBBZCwgR1VJUkFESU9fT0ZGLCAwKTsKLQotCQlpZiAoYnJjID09IEZBTFNFKSB7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCQkgKCIlcyBjYWxsIFJUMjh4eFBjaUFzaWNSYWRpb09mZiBmYWlsIVxuIiwKLQkJCQkgIF9fZnVuY19fKSk7Ci0JCX0KLQl9Ci0vKgotKi8KLX0KLQotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX21hY191c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9tYWNfdXNiLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0YTY1YTQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX21hY191c2IuYworKysgL2Rldi9udWxsCkBAIC0xLDExNjIgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qLwotCi0jaWZkZWYgUlRNUF9NQUNfVVNCCi0KLSNpbmNsdWRlCSIuLi9ydF9jb25maWcuaCIKLQotLyoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotUm91dGluZSBEZXNjcmlwdGlvbjoKLSAgICBJbml0aWFsaXplIHJlY2VpdmUgZGF0YSBzdHJ1Y3R1cmVzLgotCi1Bcmd1bWVudHM6Ci0gICAgcEFkCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCi0KLVJldHVybiBWYWx1ZToKLQlORElTX1NUQVRVU19TVUNDRVNTCi0JTkRJU19TVEFUVVNfUkVTT1VSQ0VTCi0KLU5vdGU6Ci0JSW5pdGlhbGl6ZSBhbGwgcmVjZWl2ZSByZWxlYXRlZCBwcml2YXRlIGJ1ZmZlciwgaW5jbHVkZSB0aG9zZSBkZWZpbmUKLQlpbiBzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyIHN0cnVjdHVyZSBhbmQgYWxsIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzLiBUaGUgbWFob3IKLQl3b3JrIGlzIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgZWFjaCBwYWNrZXQgYW5kIGNoYWluIGJ1ZmZlciB0bwotCU5ESVMgcGFja2V0IGRlc2NyaXB0b3IuCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi1pbnQgTklDSW5pdFJlY3Yoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCXU4IGk7Ci0JaW50IFN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7Ci0Jc3RydWN0IG9zX2Nvb2tpZSAqcE9iaiA9IChzdHJ1Y3Qgb3NfY29va2llICopcEFkLT5PU19Db29raWU7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gTklDSW5pdFJlY3ZcbiIpKTsKLQlwT2JqID0gcE9iajsKLQotCS8qSW50ZXJsb2NrZWRFeGNoYW5nZSgmcEFkLT5QZW5kaW5nUngsIDApOyAqLwotCXBBZC0+UGVuZGluZ1J4ID0gMDsKLQlwQWQtPk5leHRSeEJ1bGtJblJlYWRJbmRleCA9IDA7CS8qIE5leHQgUnggUmVhZCBpbmRleCAqLwotCXBBZC0+TmV4dFJ4QnVsa0luSW5kZXggPSAwOwkvKlJYX1JJTkdfU0laRSAtMTsgLy8gUnggQnVsayBwb2ludGVyICovCi0JcEFkLT5OZXh0UnhCdWxrSW5Qb3NpdGlvbiA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgKFJYX1JJTkdfU0laRSk7IGkrKykgewotCQlzdHJ1Y3QgcnRfcnhfY29udGV4dCAqcFJ4Q29udGV4dCA9ICYocEFkLT5SeENvbnRleHRbaV0pOwotCi0JCS8qQWxsb2NhdGUgVVJCICovCi0JCXBSeENvbnRleHQtPnBVcmIgPSBSVFVTQl9BTExPQ19VUkIoMCk7Ci0JCWlmIChwUnhDb250ZXh0LT5wVXJiID09IE5VTEwpIHsKLQkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1JFU09VUkNFUzsKLQkJCWdvdG8gb3V0MTsKLQkJfQotCQkvKiBBbGxvY2F0ZSB0cmFuc2ZlciBidWZmZXIgKi8KLQkJcFJ4Q29udGV4dC0+VHJhbnNmZXJCdWZmZXIgPQotCQkgICAgUlRVU0JfVVJCX0FMTE9DX0JVRkZFUihwT2JqLT5wVXNiX0RldiwgTUFYX1JYQlVMS19TSVpFLAotCQkJCQkgICAmcFJ4Q29udGV4dC0+ZGF0YV9kbWEpOwotCQlpZiAocFJ4Q29udGV4dC0+VHJhbnNmZXJCdWZmZXIgPT0gTlVMTCkgewotCQkJU3RhdHVzID0gTkRJU19TVEFUVVNfUkVTT1VSQ0VTOwotCQkJZ290byBvdXQxOwotCQl9Ci0KLQkJTmRpc1plcm9NZW1vcnkocFJ4Q29udGV4dC0+VHJhbnNmZXJCdWZmZXIsIE1BWF9SWEJVTEtfU0laRSk7Ci0KLQkJcFJ4Q29udGV4dC0+cEFkID0gcEFkOwotCQlwUnhDb250ZXh0LT5wSXJwID0gTlVMTDsKLQkJcFJ4Q29udGV4dC0+SW5Vc2UgPSBGQUxTRTsKLQkJcFJ4Q29udGV4dC0+SVJQUGVuZGluZyA9IEZBTFNFOwotCQlwUnhDb250ZXh0LT5SZWFkYWJsZSA9IEZBTFNFOwotCQkvKnBSeENvbnRleHQtPlJlb3JkZXJJblVzZSA9IEZBTFNFOyAqLwotCQlwUnhDb250ZXh0LT5iUnhIYW5kbGluZyA9IEZBTFNFOwotCQlwUnhDb250ZXh0LT5CdWxrSW5PZmZzZXQgPSAwOwotCX0KLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLSBOSUNJbml0UmVjdihTdGF0dXM9JWQpXG4iLCBTdGF0dXMpKTsKLQlyZXR1cm4gU3RhdHVzOwotCi1vdXQxOgotCWZvciAoaSA9IDA7IGkgPCAoUlhfUklOR19TSVpFKTsgaSsrKSB7Ci0JCXN0cnVjdCBydF9yeF9jb250ZXh0ICpwUnhDb250ZXh0ID0gJihwQWQtPlJ4Q29udGV4dFtpXSk7Ci0KLQkJaWYgKE5VTEwgIT0gcFJ4Q29udGV4dC0+VHJhbnNmZXJCdWZmZXIpIHsKLQkJCVJUVVNCX1VSQl9GUkVFX0JVRkZFUihwT2JqLT5wVXNiX0RldiwgTUFYX1JYQlVMS19TSVpFLAotCQkJCQkgICAgICBwUnhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlciwKLQkJCQkJICAgICAgcFJ4Q29udGV4dC0+ZGF0YV9kbWEpOwotCQkJcFJ4Q29udGV4dC0+VHJhbnNmZXJCdWZmZXIgPSBOVUxMOwotCQl9Ci0KLQkJaWYgKE5VTEwgIT0gcFJ4Q29udGV4dC0+cFVyYikgewotCQkJUlRVU0JfVU5MSU5LX1VSQihwUnhDb250ZXh0LT5wVXJiKTsKLQkJCVJUVVNCX0ZSRUVfVVJCKHBSeENvbnRleHQtPnBVcmIpOwotCQkJcFJ4Q29udGV4dC0+cFVyYiA9IE5VTEw7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gU3RhdHVzOwotfQotCi0vKgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Sb3V0aW5lIERlc2NyaXB0aW9uOgotICAgIEluaXRpYWxpemUgdHJhbnNtaXQgZGF0YSBzdHJ1Y3R1cmVzLgotCi1Bcmd1bWVudHM6Ci0gICAgcEFkCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCi0KLVJldHVybiBWYWx1ZToKLQlORElTX1NUQVRVU19TVUNDRVNTCi0JTkRJU19TVEFUVVNfUkVTT1VSQ0VTCi0KLU5vdGU6Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi1pbnQgTklDSW5pdFRyYW5zbWl0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLSNkZWZpbmUgTE1fVVNCX0FMTE9DKHBPYmosIENvbnRleHQsIFRCX1R5cGUsIEJ1ZmZlclNpemUsIFN0YXR1cywgbXNnMSwgZXJyMSwgbXNnMiwgZXJyMikJXAotCUNvbnRleHQtPnBVcmIgPSBSVFVTQl9BTExPQ19VUkIoMCk7CQlcCi0JaWYgKENvbnRleHQtPnBVcmIgPT0gTlVMTCkgewkJCVwKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsIG1zZzEpOwkJXAotCQlTdGF0dXMgPSBORElTX1NUQVRVU19SRVNPVVJDRVM7CQlcCi0JCWdvdG8gZXJyMTsgfQkJCQkJCVwKLQkJCQkJCQkJCQkJXAotCUNvbnRleHQtPlRyYW5zZmVyQnVmZmVyID0JCQkJXAotCQkoVEJfVHlwZSlSVFVTQl9VUkJfQUxMT0NfQlVGRkVSKHBPYmotPnBVc2JfRGV2LCBCdWZmZXJTaXplLCAmQ29udGV4dC0+ZGF0YV9kbWEpOwlcCi0JaWYgKENvbnRleHQtPlRyYW5zZmVyQnVmZmVyID09IE5VTEwpIHsJXAotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgbXNnMik7CQlcCi0JCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1JFU09VUkNFUzsJCVwKLQkJZ290byBlcnIyOyB9Ci0KLSNkZWZpbmUgTE1fVVJCX0ZSRUUocE9iaiwgQ29udGV4dCwgQnVmZmVyU2l6ZSkJCQkJXAotCWlmIChOVUxMICE9IENvbnRleHQtPnBVcmIpIHsJCQkJCQkJXAotCQlSVFVTQl9VTkxJTktfVVJCKENvbnRleHQtPnBVcmIpOwkJCQkJXAotCQlSVFVTQl9GUkVFX1VSQihDb250ZXh0LT5wVXJiKTsJCQkJCQlcCi0JCUNvbnRleHQtPnBVcmIgPSBOVUxMOyB9CQkJCQkJCQlcCi0JaWYgKE5VTEwgIT0gQ29udGV4dC0+VHJhbnNmZXJCdWZmZXIpIHsJCQkJXAotCQlSVFVTQl9VUkJfRlJFRV9CVUZGRVIocE9iai0+cFVzYl9EZXYsIEJ1ZmZlclNpemUsCVwKLQkJCQkJCQkJQ29udGV4dC0+VHJhbnNmZXJCdWZmZXIsCVwKLQkJCQkJCQkJQ29udGV4dC0+ZGF0YV9kbWEpOwkJCVwKLQkJQ29udGV4dC0+VHJhbnNmZXJCdWZmZXIgPSBOVUxMOyB9Ci0KLQl1OCBpLCBhY2lkeDsKLQlpbnQgU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKLQlzdHJ1Y3QgcnRfdHhfY29udGV4dCAqcE51bGxDb250ZXh0ID0gJihwQWQtPk51bGxDb250ZXh0KTsKLQlzdHJ1Y3QgcnRfdHhfY29udGV4dCAqcFBzUG9sbENvbnRleHQgPSAmKHBBZC0+UHNQb2xsQ29udGV4dCk7Ci0Jc3RydWN0IHJ0X3R4X2NvbnRleHQgKnBSVFNDb250ZXh0ID0gJihwQWQtPlJUU0NvbnRleHQpOwotCXN0cnVjdCBydF90eF9jb250ZXh0ICpwTUxNRUNvbnRleHQgPSBOVUxMOwotLyogICAgICBzdHJ1Y3QgcnRfaHRfdHhfY29udGV4dCAqcEhUVFhDb250ZXh0ID0gTlVMTDsgKi8KLQlzdHJ1Y3Qgb3NfY29va2llICpwT2JqID0gKHN0cnVjdCBvc19jb29raWUgKilwQWQtPk9TX0Nvb2tpZTsKLQl2b2lkICpSaW5nQmFzZVZhOwotLyogICAgICBzdHJ1Y3QgcnRfcnRtcF90eF9yaW5nICpwVHhSaW5nOyAqLwotCXN0cnVjdCBydF9ydG1wX21nbXRfcmluZyAqcE1nbXRSaW5nOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0+IE5JQ0luaXRUcmFuc21pdFxuIikpOwotCXBPYmogPSBwT2JqOwotCi0JLyogSW5pdCA0IHNldCBvZiBUeCBwYXJhbWV0ZXJzICovCi0JZm9yIChhY2lkeCA9IDA7IGFjaWR4IDwgTlVNX09GX1RYX1JJTkc7IGFjaWR4KyspIHsKLQkJLyogSW5pdGlhbGl6ZSBhbGwgVHJhbnNtaXQgcmVsZWF0ZWQgcXVldWVzICovCi0JCUluaXRpYWxpemVRdWV1ZUhlYWRlcigmcEFkLT5UeFN3UXVldWVbYWNpZHhdKTsKLQotCQkvKiBOZXh0IExvY2FsIHR4IHJpbmcgcG9pbnRlciB3YWl0aW5nIGZvciBidWNrIG91dCAqLwotCQlwQWQtPk5leHRCdWxrT3V0SW5kZXhbYWNpZHhdID0gYWNpZHg7Ci0JCXBBZC0+QnVsa091dFBlbmRpbmdbYWNpZHhdID0gRkFMU0U7CS8qIEJ1Y2sgT3V0IGNvbnRyb2wgZmxhZyAqLwotCQkvKnBBZC0+RGF0YUJ1bGtEb25lSWR4W2FjaWR4XSA9IDA7ICovCi0JfQotCi0JLypwQWQtPk5leHRNTE1FSW5kZXggICAgPSAwOyAqLwotCS8qcEFkLT5QdXNoTWdtdEluZGV4ICAgID0gMDsgKi8KLQkvKnBBZC0+UG9wTWdtdEluZGV4ICAgICA9IDA7ICovCi0JLypJbnRlcmxvY2tlZEV4Y2hhbmdlKCZwQWQtPk1nbXRRdWV1ZVNpemUsIDApOyAqLwotCS8qSW50ZXJsb2NrZWRFeGNoYW5nZSgmcEFkLT5UeENvdW50LCAwKTsgKi8KLQotCS8qcEFkLT5QcmlvUmluZ0ZpcnN0SW5kZXggICAgICAgPSAwOyAqLwotCS8qcEFkLT5QcmlvUmluZ1R4Q250ICAgICAgICAgICAgPSAwOyAqLwotCi0JZG8gewotCQkvKiAqLwotCQkvKiBUWF9SSU5HX1NJWkUsIDQgQUNzICovCi0JCS8qICovCi0JCWZvciAoYWNpZHggPSAwOyBhY2lkeCA8IDQ7IGFjaWR4KyspIHsKLQkJCXN0cnVjdCBydF9odF90eF9jb250ZXh0ICpwSFRUWENvbnRleHQgPSAmKHBBZC0+VHhDb250ZXh0W2FjaWR4XSk7Ci0KLQkJCU5kaXNaZXJvTWVtb3J5KHBIVFRYQ29udGV4dCwgc2l6ZW9mKHN0cnVjdCBydF9odF90eF9jb250ZXh0KSk7Ci0JCQkvKkFsbG9jYXRlIFVSQiAqLwotCQkJTE1fVVNCX0FMTE9DKHBPYmosIHBIVFRYQ29udGV4dCwgc3RydWN0IHJ0X2h0dHhfYnVmZmVyICosCi0JCQkJICAgICBzaXplb2Yoc3RydWN0IHJ0X2h0dHhfYnVmZmVyKSwgU3RhdHVzLAotCQkJCSAgICAgKCI8LS0gRVJST1IgaW4gQWxsb2MgVFggVHhDb250ZXh0WyVkXSB1cmIhXG4iLAotCQkJCSAgICAgIGFjaWR4KSwgZG9uZSwKLQkJCQkgICAgICgiPC0tIEVSUk9SIGluIEFsbG9jIFRYIFR4Q29udGV4dFslZF0gc3RydWN0IHJ0X2h0dHhfYnVmZmVyIVxuIiwKLQkJCQkgICAgICBhY2lkeCksIG91dDEpOwotCi0JCQlOZGlzWmVyb01lbW9yeShwSFRUWENvbnRleHQtPlRyYW5zZmVyQnVmZmVyLT4KLQkJCQkgICAgICAgQWdncmVnYXRpb24sIDQpOwotCQkJcEhUVFhDb250ZXh0LT5wQWQgPSBwQWQ7Ci0JCQlwSFRUWENvbnRleHQtPnBJcnAgPSBOVUxMOwotCQkJcEhUVFhDb250ZXh0LT5JUlBQZW5kaW5nID0gRkFMU0U7Ci0JCQlwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24gPSAwOwotCQkJcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9IDA7Ci0JCQlwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gPSAwOwotCQkJcEhUVFhDb250ZXh0LT5DdXJXcml0ZVJlYWxQb3MgPSAwOwotCQkJcEhUVFhDb250ZXh0LT5CdWxrT3V0U2l6ZSA9IDA7Ci0JCQlwSFRUWENvbnRleHQtPkJ1bGtPdXRQaXBlSWQgPSBhY2lkeDsKLQkJCXBIVFRYQ29udGV4dC0+YlJpbmdFbXB0eSA9IFRSVUU7Ci0JCQlwSFRUWENvbnRleHQtPmJDb3B5U2F2ZVBhZCA9IEZBTFNFOwotCQkJcEFkLT5CdWxrT3V0UGVuZGluZ1thY2lkeF0gPSBGQUxTRTsKLQkJfQotCi0JCS8qICovCi0JCS8qIE1HTVRfUklOR19TSVpFICovCi0JCS8qICovCi0KLQkJLyogQWxsb2NhdGUgTUdNVCByaW5nIGRlc2NyaXB0b3IncyBtZW1vcnkgKi8KLQkJcEFkLT5NZ210RGVzY1JpbmcuQWxsb2NTaXplID0KLQkJICAgIE1HTVRfUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCBydF90eF9jb250ZXh0KTsKLQkJb3NfYWxsb2NfbWVtKHBBZCwgKHU4ICoqKSAoJnBBZC0+TWdtdERlc2NSaW5nLkFsbG9jVmEpLAotCQkJICAgICBwQWQtPk1nbXREZXNjUmluZy5BbGxvY1NpemUpOwotCQlpZiAocEFkLT5NZ210RGVzY1JpbmcuQWxsb2NWYSA9PSBOVUxMKSB7Ci0JCQlEQkdQUklOVF9FUlIoIkZhaWxlZCB0byBhbGxvY2F0ZSBhIGJpZyBidWZmZXIgZm9yIE1nbXREZXNjUmluZyFcbiIpOwotCQkJU3RhdHVzID0gTkRJU19TVEFUVVNfUkVTT1VSQ0VTOwotCQkJZ290byBvdXQxOwotCQl9Ci0JCU5kaXNaZXJvTWVtb3J5KHBBZC0+TWdtdERlc2NSaW5nLkFsbG9jVmEsCi0JCQkgICAgICAgcEFkLT5NZ210RGVzY1JpbmcuQWxsb2NTaXplKTsKLQkJUmluZ0Jhc2VWYSA9IHBBZC0+TWdtdERlc2NSaW5nLkFsbG9jVmE7Ci0KLQkJLyogSW5pdGlhbGl6ZSBNR01UIFJpbmcgYW5kIGFzc29jaWF0ZWQgYnVmZmVyIG1lbW9yeSAqLwotCQlwTWdtdFJpbmcgPSAmcEFkLT5NZ210UmluZzsKLQkJZm9yIChpID0gMDsgaSA8IE1HTVRfUklOR19TSVpFOyBpKyspIHsKLQkJCS8qIGxpbmsgdGhlIHByZS1hbGxvY2F0ZWQgTWdtdCBidWZmZXIgdG8gTWdtdFJpbmcuQ2VsbCAqLwotCQkJcE1nbXRSaW5nLT5DZWxsW2ldLkFsbG9jU2l6ZSA9IHNpemVvZihzdHJ1Y3QgcnRfdHhfY29udGV4dCk7Ci0JCQlwTWdtdFJpbmctPkNlbGxbaV0uQWxsb2NWYSA9IFJpbmdCYXNlVmE7Ci0JCQlwTWdtdFJpbmctPkNlbGxbaV0ucE5kaXNQYWNrZXQgPSBOVUxMOwotCQkJcE1nbXRSaW5nLT5DZWxsW2ldLnBOZXh0TmRpc1BhY2tldCA9IE5VTEw7Ci0KLQkJCS8qQWxsb2NhdGUgVVJCIGZvciBNTE1FQ29udGV4dCAqLwotCQkJcE1MTUVDb250ZXh0ID0KLQkJCSAgICAoc3RydWN0IHJ0X3R4X2NvbnRleHQgKilwQWQtPk1nbXRSaW5nLkNlbGxbaV0uQWxsb2NWYTsKLQkJCXBNTE1FQ29udGV4dC0+cFVyYiA9IFJUVVNCX0FMTE9DX1VSQigwKTsKLQkJCWlmIChwTUxNRUNvbnRleHQtPnBVcmIgPT0gTlVMTCkgewotCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJCQkgKCI8LS0gRVJST1IgaW4gQWxsb2MgVFggTUxNRUNvbnRleHRbJWRdIHVyYiFcbiIsCi0JCQkJCSAgaSkpOwotCQkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1JFU09VUkNFUzsKLQkJCQlnb3RvIG91dDI7Ci0JCQl9Ci0JCQlwTUxNRUNvbnRleHQtPnBBZCA9IHBBZDsKLQkJCXBNTE1FQ29udGV4dC0+cElycCA9IE5VTEw7Ci0JCQlwTUxNRUNvbnRleHQtPlRyYW5zZmVyQnVmZmVyID0gTlVMTDsKLQkJCXBNTE1FQ29udGV4dC0+SW5Vc2UgPSBGQUxTRTsKLQkJCXBNTE1FQ29udGV4dC0+SVJQUGVuZGluZyA9IEZBTFNFOwotCQkJcE1MTUVDb250ZXh0LT5iV2FpdGluZ0J1bGtPdXQgPSBGQUxTRTsKLQkJCXBNTE1FQ29udGV4dC0+QnVsa091dFNpemUgPSAwOwotCQkJcE1MTUVDb250ZXh0LT5TZWxmSWR4ID0gaTsKLQotCQkJLyogT2Zmc2V0IHRvIG5leHQgcmluZyBkZXNjcmlwdG9yIGFkZHJlc3MgKi8KLQkJCVJpbmdCYXNlVmEgPSAodTggKilSaW5nQmFzZVZhICsgc2l6ZW9mKHN0cnVjdCBydF90eF9jb250ZXh0KTsKLQkJfQotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIk1HTVQgUmluZzogdG90YWwgJWQgZW50cnkgYWxsb2NhdGVkXG4iLCBpKSk7Ci0KLQkJLypwQWQtPk1nbXRSaW5nLlR4U3dGcmVlSWR4ID0gKE1HTVRfUklOR19TSVpFIC0gMSk7ICovCi0JCXBBZC0+TWdtdFJpbmcuVHhTd0ZyZWVJZHggPSBNR01UX1JJTkdfU0laRTsKLQkJcEFkLT5NZ210UmluZy5UeENwdUlkeCA9IDA7Ci0JCXBBZC0+TWdtdFJpbmcuVHhEbWFJZHggPSAwOwotCi0JCS8qICovCi0JCS8qIEJFQUNPTl9SSU5HX1NJWkUgKi8KLQkJLyogKi8KLQkJZm9yIChpID0gMDsgaSA8IEJFQUNPTl9SSU5HX1NJWkU7IGkrKykJLyogMiAqLwotCQl7Ci0JCQlzdHJ1Y3QgcnRfdHhfY29udGV4dCAqcEJlYWNvbkNvbnRleHQgPSAmKHBBZC0+QmVhY29uQ29udGV4dFtpXSk7Ci0KLQkJCU5kaXNaZXJvTWVtb3J5KHBCZWFjb25Db250ZXh0LCBzaXplb2Yoc3RydWN0IHJ0X3R4X2NvbnRleHQpKTsKLQotCQkJLypBbGxvY2F0ZSBVUkIgKi8KLQkJCUxNX1VTQl9BTExPQyhwT2JqLCBwQmVhY29uQ29udGV4dCwgc3RydWN0IHJ0X3R4X2J1ZmZlciAqLAotCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBydF90eF9idWZmZXIpLCBTdGF0dXMsCi0JCQkJICAgICAoIjwtLSBFUlJPUiBpbiBBbGxvYyBUWCBCZWFjb25Db250ZXh0WyVkXSB1cmIhXG4iLAotCQkJCSAgICAgIGkpLCBvdXQyLAotCQkJCSAgICAgKCI8LS0gRVJST1IgaW4gQWxsb2MgVFggQmVhY29uQ29udGV4dFslZF0gc3RydWN0IHJ0X3R4X2J1ZmZlciFcbiIsCi0JCQkJICAgICAgaSksIG91dDMpOwotCi0JCQlwQmVhY29uQ29udGV4dC0+cEFkID0gcEFkOwotCQkJcEJlYWNvbkNvbnRleHQtPnBJcnAgPSBOVUxMOwotCQkJcEJlYWNvbkNvbnRleHQtPkluVXNlID0gRkFMU0U7Ci0JCQlwQmVhY29uQ29udGV4dC0+SVJQUGVuZGluZyA9IEZBTFNFOwotCQl9Ci0KLQkJLyogKi8KLQkJLyogTnVsbENvbnRleHQgKi8KLQkJLyogKi8KLQkJTmRpc1plcm9NZW1vcnkocE51bGxDb250ZXh0LCBzaXplb2Yoc3RydWN0IHJ0X3R4X2NvbnRleHQpKTsKLQotCQkvKkFsbG9jYXRlIFVSQiAqLwotCQlMTV9VU0JfQUxMT0MocE9iaiwgcE51bGxDb250ZXh0LCBzdHJ1Y3QgcnRfdHhfYnVmZmVyICosIHNpemVvZihzdHJ1Y3QgcnRfdHhfYnVmZmVyKSwKLQkJCSAgICAgU3RhdHVzLAotCQkJICAgICAoIjwtLSBFUlJPUiBpbiBBbGxvYyBUWCBOdWxsQ29udGV4dCB1cmIhXG4iKSwKLQkJCSAgICAgb3V0MywKLQkJCSAgICAgKCI8LS0gRVJST1IgaW4gQWxsb2MgVFggTnVsbENvbnRleHQgc3RydWN0IHJ0X3R4X2J1ZmZlciFcbiIpLAotCQkJICAgICBvdXQ0KTsKLQotCQlwTnVsbENvbnRleHQtPnBBZCA9IHBBZDsKLQkJcE51bGxDb250ZXh0LT5wSXJwID0gTlVMTDsKLQkJcE51bGxDb250ZXh0LT5JblVzZSA9IEZBTFNFOwotCQlwTnVsbENvbnRleHQtPklSUFBlbmRpbmcgPSBGQUxTRTsKLQotCQkvKiAqLwotCQkvKiBSVFNDb250ZXh0ICovCi0JCS8qICovCi0JCU5kaXNaZXJvTWVtb3J5KHBSVFNDb250ZXh0LCBzaXplb2Yoc3RydWN0IHJ0X3R4X2NvbnRleHQpKTsKLQotCQkvKkFsbG9jYXRlIFVSQiAqLwotCQlMTV9VU0JfQUxMT0MocE9iaiwgcFJUU0NvbnRleHQsIHN0cnVjdCBydF90eF9idWZmZXIgKiwgc2l6ZW9mKHN0cnVjdCBydF90eF9idWZmZXIpLAotCQkJICAgICBTdGF0dXMsCi0JCQkgICAgICgiPC0tIEVSUk9SIGluIEFsbG9jIFRYIFJUU0NvbnRleHQgdXJiIVxuIiksCi0JCQkgICAgIG91dDQsCi0JCQkgICAgICgiPC0tIEVSUk9SIGluIEFsbG9jIFRYIFJUU0NvbnRleHQgc3RydWN0IHJ0X3R4X2J1ZmZlciFcbiIpLAotCQkJICAgICBvdXQ1KTsKLQotCQlwUlRTQ29udGV4dC0+cEFkID0gcEFkOwotCQlwUlRTQ29udGV4dC0+cElycCA9IE5VTEw7Ci0JCXBSVFNDb250ZXh0LT5JblVzZSA9IEZBTFNFOwotCQlwUlRTQ29udGV4dC0+SVJQUGVuZGluZyA9IEZBTFNFOwotCi0JCS8qICovCi0JCS8qIFBzUG9sbENvbnRleHQgKi8KLQkJLyogKi8KLQkJLypOZGlzWmVyb01lbW9yeShwUHNQb2xsQ29udGV4dCwgc2l6ZW9mKHN0cnVjdCBydF90eF9jb250ZXh0KSk7ICovCi0JCS8qQWxsb2NhdGUgVVJCICovCi0JCUxNX1VTQl9BTExPQyhwT2JqLCBwUHNQb2xsQ29udGV4dCwgc3RydWN0IHJ0X3R4X2J1ZmZlciAqLAotCQkJICAgICBzaXplb2Yoc3RydWN0IHJ0X3R4X2J1ZmZlciksIFN0YXR1cywKLQkJCSAgICAgKCI8LS0gRVJST1IgaW4gQWxsb2MgVFggUHNQb2xsQ29udGV4dCB1cmIhXG4iKSwKLQkJCSAgICAgb3V0NSwKLQkJCSAgICAgKCI8LS0gRVJST1IgaW4gQWxsb2MgVFggUHNQb2xsQ29udGV4dCBzdHJ1Y3QgcnRfdHhfYnVmZmVyIVxuIiksCi0JCQkgICAgIG91dDYpOwotCi0JCXBQc1BvbGxDb250ZXh0LT5wQWQgPSBwQWQ7Ci0JCXBQc1BvbGxDb250ZXh0LT5wSXJwID0gTlVMTDsKLQkJcFBzUG9sbENvbnRleHQtPkluVXNlID0gRkFMU0U7Ci0JCXBQc1BvbGxDb250ZXh0LT5JUlBQZW5kaW5nID0gRkFMU0U7Ci0JCXBQc1BvbGxDb250ZXh0LT5iQWdncmVnYXRpYmxlID0gRkFMU0U7Ci0JCXBQc1BvbGxDb250ZXh0LT5MYXN0T25lID0gVFJVRTsKLQotCX0gd2hpbGUgKEZBTFNFKTsKLQotZG9uZToKLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8LS0gTklDSW5pdFRyYW5zbWl0KFN0YXR1cz0lZClcbiIsIFN0YXR1cykpOwotCi0JcmV0dXJuIFN0YXR1czsKLQotCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFUlJPUiBIQU5ETEUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1vdXQ2OgotCUxNX1VSQl9GUkVFKHBPYmosIHBQc1BvbGxDb250ZXh0LCBzaXplb2Yoc3RydWN0IHJ0X3R4X2J1ZmZlcikpOwotCi1vdXQ1OgotCUxNX1VSQl9GUkVFKHBPYmosIHBSVFNDb250ZXh0LCBzaXplb2Yoc3RydWN0IHJ0X3R4X2J1ZmZlcikpOwotCi1vdXQ0OgotCUxNX1VSQl9GUkVFKHBPYmosIHBOdWxsQ29udGV4dCwgc2l6ZW9mKHN0cnVjdCBydF90eF9idWZmZXIpKTsKLQotb3V0MzoKLQlmb3IgKGkgPSAwOyBpIDwgQkVBQ09OX1JJTkdfU0laRTsgaSsrKSB7Ci0JCXN0cnVjdCBydF90eF9jb250ZXh0ICpwQmVhY29uQ29udGV4dCA9ICYocEFkLT5CZWFjb25Db250ZXh0W2ldKTsKLQkJaWYgKHBCZWFjb25Db250ZXh0KQotCQkJTE1fVVJCX0ZSRUUocE9iaiwgcEJlYWNvbkNvbnRleHQsIHNpemVvZihzdHJ1Y3QgcnRfdHhfYnVmZmVyKSk7Ci0JfQotCi1vdXQyOgotCWlmIChwQWQtPk1nbXREZXNjUmluZy5BbGxvY1ZhKSB7Ci0JCXBNZ210UmluZyA9ICZwQWQtPk1nbXRSaW5nOwotCQlmb3IgKGkgPSAwOyBpIDwgTUdNVF9SSU5HX1NJWkU7IGkrKykgewotCQkJcE1MTUVDb250ZXh0ID0KLQkJCSAgICAoc3RydWN0IHJ0X3R4X2NvbnRleHQgKilwQWQtPk1nbXRSaW5nLkNlbGxbaV0uQWxsb2NWYTsKLQkJCWlmIChwTUxNRUNvbnRleHQpCi0JCQkJTE1fVVJCX0ZSRUUocE9iaiwgcE1MTUVDb250ZXh0LAotCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBydF90eF9idWZmZXIpKTsKLQkJfQotCQlvc19mcmVlX21lbShwQWQsIHBBZC0+TWdtdERlc2NSaW5nLkFsbG9jVmEpOwotCQlwQWQtPk1nbXREZXNjUmluZy5BbGxvY1ZhID0gTlVMTDsKLQl9Ci0KLW91dDE6Ci0JZm9yIChhY2lkeCA9IDA7IGFjaWR4IDwgNDsgYWNpZHgrKykgewotCQlzdHJ1Y3QgcnRfaHRfdHhfY29udGV4dCAqcFR4Q29udGV4dCA9ICYocEFkLT5UeENvbnRleHRbYWNpZHhdKTsKLQkJaWYgKHBUeENvbnRleHQpCi0JCQlMTV9VUkJfRlJFRShwT2JqLCBwVHhDb250ZXh0LCBzaXplb2Yoc3RydWN0IHJ0X2h0dHhfYnVmZmVyKSk7Ci0JfQotCi0JLyogSGVyZSB3ZSBkaWRuJ3QgaGF2ZSBhbnkgcHJlLWFsbG9jYXRlZCBtZW1vcnkgbmVlZCB0byBmcmVlLiAqLwotCi0JcmV0dXJuIFN0YXR1czsKLX0KLQotLyoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotUm91dGluZSBEZXNjcmlwdGlvbjoKLSAgICBBbGxvY2F0ZSBETUEgbWVtb3J5IGJsb2NrcyBmb3Igc2VuZCwgcmVjZWl2ZS4KLQotQXJndW1lbnRzOgotICAgIHBBZAkJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgotCi1SZXR1cm4gVmFsdWU6Ci0JTkRJU19TVEFUVVNfU1VDQ0VTUwotCU5ESVNfU1RBVFVTX0ZBSUxVUkUKLQlORElTX1NUQVRVU19SRVNPVVJDRVMKLQotTm90ZToKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLWludCBSVE1QQWxsb2NUeFJ4UmluZ01lbW9yeShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0vKiAgICAgIHN0cnVjdCBydF9jb3VudGVyXzgwMl8xMSAgcENvdW50ZXIgPSAmcEFkLT5XbGFuQ291bnRlcnM7ICovCi0JaW50IFN0YXR1czsKLQlpbnQgbnVtOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0+IFJUTVBBbGxvY1R4UnhSaW5nTWVtb3J5XG4iKSk7Ci0KLQlkbyB7Ci0JCS8qIEluaXQgdGhlIHN0cnVjdCBydF9jbWRxIGFuZCBDbWRRTG9jayAqLwotCQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5DbWRRTG9jayk7Ci0JCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+Q21kUUxvY2spOwotCQlSVFVTQkluaXRpYWxpemVDbWRRKCZwQWQtPkNtZFEpOwotCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPkNtZFFMb2NrKTsKLQotCQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5NTE1FQnVsa091dExvY2spOwotCQkvKk5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPk1MTUVXYWl0UXVldWVMb2NrKTsgKi8KLQkJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+QnVsa091dExvY2tbMF0pOwotCQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5CdWxrT3V0TG9ja1sxXSk7Ci0JCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPkJ1bGtPdXRMb2NrWzJdKTsKLQkJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+QnVsa091dExvY2tbM10pOwotCQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5CdWxrT3V0TG9ja1s0XSk7Ci0JCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPkJ1bGtPdXRMb2NrWzVdKTsKLQkJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+QnVsa0luTG9jayk7Ci0KLQkJZm9yIChudW0gPSAwOyBudW0gPCBOVU1fT0ZfVFhfUklORzsgbnVtKyspIHsKLQkJCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tudW1dKTsKLQkJfQotCi0vKiAgICAgICAgICAgICAgTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+TWVtTG9jayk7ICAgIC8vIE5vdCB1c2VkIGluIFJUMjhYWCAqLwotCi0vKiAgICAgICAgICAgICAgTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+TWFjVGFiTG9jayk7IC8vIGluaXQgaXQgaW4gVXNlckNmZ0luaXQoKSAqLwotLyogICAgICAgICAgICAgIE5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPkJBVGFiTG9jayk7IC8vIGluaXQgaXQgaW4gQkFUYWJsZUluaXQoKSAqLwotCi0vKiAgICAgICAgICAgICAgZm9yKG51bT0wOyBudW08TUFYX0xFTl9PRl9CQV9SRUNfVEFCTEU7IG51bSsrKSAqLwotLyogICAgICAgICAgICAgIHsgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgIE5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPkJBVGFibGUuQkFSZWNFbnRyeVtudW1dLlJ4UmVSaW5nTG9jayk7ICovCi0vKiAgICAgICAgICAgICAgfSAqLwotCi0JCS8qICovCi0JCS8qIEluaXQgTWFjIFRhYmxlICovCi0JCS8qICovCi0vKiAgICAgICAgICAgICAgTWFjVGFibGVJbml0aWFsaXplKHBBZCk7ICovCi0KLQkJLyogKi8KLQkJLyogSW5pdCBzZW5kIGRhdGEgc3RydWN0dXJlcyBhbmQgcmVsYXRlZCBwYXJhbWV0ZXJzICovCi0JCS8qICovCi0JCVN0YXR1cyA9IE5JQ0luaXRUcmFuc21pdChwQWQpOwotCQlpZiAoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCi0JCQlicmVhazsKLQotCQkvKiAqLwotCQkvKiBJbml0IHJlY2VpdmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCByZWxhdGVkIHBhcmFtZXRlcnMgKi8KLQkJLyogKi8KLQkJU3RhdHVzID0gTklDSW5pdFJlY3YocEFkKTsKLQkJaWYgKFN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQotCQkJYnJlYWs7Ci0KLQkJcEFkLT5QZW5kaW5nSW9Db3VudCA9IDE7Ci0KLQl9IHdoaWxlIChGQUxTRSk7Ci0KLQlOZGlzWmVyb01lbW9yeSgmcEFkLT5GcmFnRnJhbWUsIHNpemVvZihzdHJ1Y3QgcnRfZnJhZ21lbnRfZnJhbWUpKTsKLQlwQWQtPkZyYWdGcmFtZS5wRnJhZ1BhY2tldCA9Ci0JICAgIFJUTVBfQWxsb2NhdGVGcmFnUGFja2V0QnVmZmVyKHBBZCwgUlhfQlVGRkVSX05PUk1TSVpFKTsKLQotCWlmIChwQWQtPkZyYWdGcmFtZS5wRnJhZ1BhY2tldCA9PSBOVUxMKSB7Ci0JCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1JFU09VUkNFUzsKLQl9Ci0KLQlEQkdQUklOVF9TKFN0YXR1cywKLQkJICAgKCI8LS0gUlRNUEFsbG9jVHhSeFJpbmdNZW1vcnksIFN0YXR1cz0leFxuIiwgU3RhdHVzKSk7Ci0JcmV0dXJuIFN0YXR1czsKLX0KLQotLyoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotUm91dGluZSBEZXNjcmlwdGlvbjoKLQlDYWxscyBVU0JfSW50ZXJmYWNlU3RvcCBhbmQgZnJlZXMgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIFVSQnMKLSAgICBjYWxscyBOZGlzTURlcmVnaXN0ZXJEZXZpY2UgYW5kIGZyZWVzIHRoZSBtZW1vcnkKLSAgICBhbGxvY2F0ZWQgaW4gVk5ldEluaXRpYWxpemUgZm9yIHRoZSBBZGFwdGVyIE9iamVjdAotCi1Bcmd1bWVudHM6Ci0JKnBBZAkJCQl0aGUgcmF4eCBpbnRlcmZhY2UgZGF0YSBwb2ludGVyCi0KLVJldHVybiBWYWx1ZToKLQlOb25lCi0KLU5vdGU6Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFJUTVBGcmVlVHhSeFJpbmdNZW1vcnkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotI2RlZmluZSBMTV9VUkJfRlJFRShwT2JqLCBDb250ZXh0LCBCdWZmZXJTaXplKQkJCQlcCi0JaWYgKE5VTEwgIT0gQ29udGV4dC0+cFVyYikgewkJCQkJCQlcCi0JCVJUVVNCX1VOTElOS19VUkIoQ29udGV4dC0+cFVyYik7CQkJCQlcCi0JCVJUVVNCX0ZSRUVfVVJCKENvbnRleHQtPnBVcmIpOwkJCQkJCVwKLQkJQ29udGV4dC0+cFVyYiA9IE5VTEw7IH0JCQkJCQkJCVwKLQlpZiAoTlVMTCAhPSBDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlcikgewkJCQkJXAotCQlSVFVTQl9VUkJfRlJFRV9CVUZGRVIocE9iai0+cFVzYl9EZXYsIEJ1ZmZlclNpemUsCVwKLQkJCQkJCQkJQ29udGV4dC0+VHJhbnNmZXJCdWZmZXIsCVwKLQkJCQkJCQkJQ29udGV4dC0+ZGF0YV9kbWEpOwkJCVwKLQkJQ29udGV4dC0+VHJhbnNmZXJCdWZmZXIgPSBOVUxMOyB9Ci0KLQl1MzIgaSwgYWNpZHg7Ci0Jc3RydWN0IHJ0X3R4X2NvbnRleHQgKnBOdWxsQ29udGV4dCA9ICZwQWQtPk51bGxDb250ZXh0OwotCXN0cnVjdCBydF90eF9jb250ZXh0ICpwUHNQb2xsQ29udGV4dCA9ICZwQWQtPlBzUG9sbENvbnRleHQ7Ci0Jc3RydWN0IHJ0X3R4X2NvbnRleHQgKnBSVFNDb250ZXh0ID0gJnBBZC0+UlRTQ29udGV4dDsKLS8qICAgICAgc3RydWN0IHJ0X2h0X3R4X2NvbnRleHQgKnBIVFRYQ29udGV4dDsgKi8KLQkvKlBSVE1QX1JFT1JERVJCVUYgICAgICBwUmVvcmRlckJ1ZjsgKi8KLQlzdHJ1Y3Qgb3NfY29va2llICpwT2JqID0gKHN0cnVjdCBvc19jb29raWUgKilwQWQtPk9TX0Nvb2tpZTsKLS8qICAgICAgc3RydWN0IHJ0X3J0bXBfdHhfcmluZyAqcFR4UmluZzsgKi8KLQotCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIi0tLT4gUlRNUEZyZWVUeFJ4UmluZ01lbW9yeVxuIikpOwotCXBPYmogPSBwT2JqOwotCi0JLyogRnJlZSBhbGwgcmVzb3VyY2VzIGZvciB0aGUgUkVDRUlWRSBidWZmZXIgcXVldWUuICovCi0JZm9yIChpID0gMDsgaSA8IChSWF9SSU5HX1NJWkUpOyBpKyspIHsKLQkJc3RydWN0IHJ0X3J4X2NvbnRleHQgKnBSeENvbnRleHQgPSAmKHBBZC0+UnhDb250ZXh0W2ldKTsKLQkJaWYgKHBSeENvbnRleHQpCi0JCQlMTV9VUkJfRlJFRShwT2JqLCBwUnhDb250ZXh0LCBNQVhfUlhCVUxLX1NJWkUpOwotCX0KLQotCS8qIEZyZWUgUHNQb2xsIGZyYW1lIHJlc291cmNlICovCi0JTE1fVVJCX0ZSRUUocE9iaiwgcFBzUG9sbENvbnRleHQsIHNpemVvZihzdHJ1Y3QgcnRfdHhfYnVmZmVyKSk7Ci0KLQkvKiBGcmVlIE5VTEwgZnJhbWUgcmVzb3VyY2UgKi8KLQlMTV9VUkJfRlJFRShwT2JqLCBwTnVsbENvbnRleHQsIHNpemVvZihzdHJ1Y3QgcnRfdHhfYnVmZmVyKSk7Ci0KLQkvKiBGcmVlIFJUUyBmcmFtZSByZXNvdXJjZSAqLwotCUxNX1VSQl9GUkVFKHBPYmosIHBSVFNDb250ZXh0LCBzaXplb2Yoc3RydWN0IHJ0X3R4X2J1ZmZlcikpOwotCi0JLyogRnJlZSBiZWFjb24gZnJhbWUgcmVzb3VyY2UgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQkVBQ09OX1JJTkdfU0laRTsgaSsrKSB7Ci0JCXN0cnVjdCBydF90eF9jb250ZXh0ICpwQmVhY29uQ29udGV4dCA9ICYocEFkLT5CZWFjb25Db250ZXh0W2ldKTsKLQkJaWYgKHBCZWFjb25Db250ZXh0KQotCQkJTE1fVVJCX0ZSRUUocE9iaiwgcEJlYWNvbkNvbnRleHQsIHNpemVvZihzdHJ1Y3QgcnRfdHhfYnVmZmVyKSk7Ci0JfQotCi0JLyogRnJlZSBtZ210IGZyYW1lIHJlc291cmNlICovCi0JZm9yIChpID0gMDsgaSA8IE1HTVRfUklOR19TSVpFOyBpKyspIHsKLQkJc3RydWN0IHJ0X3R4X2NvbnRleHQgKnBNTE1FQ29udGV4dCA9Ci0JCSAgICAoc3RydWN0IHJ0X3R4X2NvbnRleHQgKilwQWQtPk1nbXRSaW5nLkNlbGxbaV0uQWxsb2NWYTsKLQkJLypMTV9VUkJfRlJFRShwT2JqLCBwTUxNRUNvbnRleHQsIHNpemVvZihzdHJ1Y3QgcnRfdHhfYnVmZmVyKSk7ICovCi0JCWlmIChOVUxMICE9IHBBZC0+TWdtdFJpbmcuQ2VsbFtpXS5wTmRpc1BhY2tldCkgewotCQkJUlRNUEZyZWVOZGlzUGFja2V0KHBBZCwKLQkJCQkJICAgcEFkLT5NZ210UmluZy5DZWxsW2ldLnBOZGlzUGFja2V0KTsKLQkJCXBBZC0+TWdtdFJpbmcuQ2VsbFtpXS5wTmRpc1BhY2tldCA9IE5VTEw7Ci0JCQlwTUxNRUNvbnRleHQtPlRyYW5zZmVyQnVmZmVyID0gTlVMTDsKLQkJfQotCi0JCWlmIChwTUxNRUNvbnRleHQpIHsKLQkJCWlmIChOVUxMICE9IHBNTE1FQ29udGV4dC0+cFVyYikgewotCQkJCVJUVVNCX1VOTElOS19VUkIocE1MTUVDb250ZXh0LT5wVXJiKTsKLQkJCQlSVFVTQl9GUkVFX1VSQihwTUxNRUNvbnRleHQtPnBVcmIpOwotCQkJCXBNTE1FQ29udGV4dC0+cFVyYiA9IE5VTEw7Ci0JCQl9Ci0JCX0KLQl9Ci0JaWYgKHBBZC0+TWdtdERlc2NSaW5nLkFsbG9jVmEpCi0JCW9zX2ZyZWVfbWVtKHBBZCwgcEFkLT5NZ210RGVzY1JpbmcuQWxsb2NWYSk7Ci0KLQkvKiBGcmVlIFR4IGZyYW1lIHJlc291cmNlICovCi0JZm9yIChhY2lkeCA9IDA7IGFjaWR4IDwgNDsgYWNpZHgrKykgewotCQlzdHJ1Y3QgcnRfaHRfdHhfY29udGV4dCAqcEhUVFhDb250ZXh0ID0gJihwQWQtPlR4Q29udGV4dFthY2lkeF0pOwotCQlpZiAocEhUVFhDb250ZXh0KQotCQkJTE1fVVJCX0ZSRUUocE9iaiwgcEhUVFhDb250ZXh0LCBzaXplb2Yoc3RydWN0IHJ0X2h0dHhfYnVmZmVyKSk7Ci0JfQotCi0JaWYgKHBBZC0+RnJhZ0ZyYW1lLnBGcmFnUGFja2V0KQotCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcEFkLT5GcmFnRnJhbWUucEZyYWdQYWNrZXQsCi0JCQkJICAgIE5ESVNfU1RBVFVTX1NVQ0NFU1MpOwotCi0JZm9yIChpID0gMDsgaSA8IDY7IGkrKykgewotCQlOZGlzRnJlZVNwaW5Mb2NrKCZwQWQtPkJ1bGtPdXRMb2NrW2ldKTsKLQl9Ci0KLQlOZGlzRnJlZVNwaW5Mb2NrKCZwQWQtPkJ1bGtJbkxvY2spOwotCU5kaXNGcmVlU3BpbkxvY2soJnBBZC0+TUxNRUJ1bGtPdXRMb2NrKTsKLQotCU5kaXNGcmVlU3BpbkxvY2soJnBBZC0+Q21kUUxvY2spOwotCS8qIENsZWFyIGFsbCBwZW5kaW5nIGJ1bGstb3V0IHJlcXVlc3QgZmxhZ3MuICovCi0JUlRVU0JfQ0xFQVJfQlVMS19GTEFHKHBBZCwgMHhmZmZmZmZmZik7Ci0KLS8qICAgICAgTmRpc0ZyZWVTcGluTG9jaygmcEFkLT5NYWNUYWJMb2NrKTsgKi8KLQotLyogICAgICBmb3IoaT0wOyBpPE1BWF9MRU5fT0ZfQkFfUkVDX1RBQkxFOyBpKyspICovCi0vKiAgICAgIHsgKi8KLS8qICAgICAgICAgICAgICBOZGlzRnJlZVNwaW5Mb2NrKCZwQWQtPkJBVGFibGUuQkFSZWNFbnRyeVtpXS5SeFJlUmluZ0xvY2spOyAqLwotLyogICAgICB9ICovCi0KLQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCI8LS0tIFJUTVBGcmVlVHhSeFJpbmdNZW1vcnlcbiIpKTsKLX0KLQotLyoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotUm91dGluZSBEZXNjcmlwdGlvbjoKLSAgICBXcml0ZSBXTEFOIE1BQyBhZGRyZXNzIHRvIFVTQiAyODcwLgotCi1Bcmd1bWVudHM6Ci0gICAgcEFkCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCi0KLVJldHVybiBWYWx1ZToKLQlORElTX1NUQVRVU19TVUNDRVNTCi0KLU5vdGU6Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi1pbnQgUlRVU0JXcml0ZUhXTUFDQWRkcmVzcyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0JTUFDX0RXMF9TVFJVQyBTdGFNYWNSZWcwOwotCU1BQ19EVzFfU1RSVUMgU3RhTWFjUmVnMTsKLQlpbnQgU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKLQlMQVJHRV9JTlRFR0VSIE5PVzsKLQotCS8qIGluaXRpYWxpemUgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yICovCi0JUlRNUF9HZXRDdXJyZW50U3lzdGVtVGltZSgmTk9XKTsKLQotCWlmIChwQWQtPmJMb2NhbEFkbWluTUFDICE9IFRSVUUpIHsKLQkJcEFkLT5DdXJyZW50QWRkcmVzc1swXSA9IHBBZC0+UGVybWFuZW50QWRkcmVzc1swXTsKLQkJcEFkLT5DdXJyZW50QWRkcmVzc1sxXSA9IHBBZC0+UGVybWFuZW50QWRkcmVzc1sxXTsKLQkJcEFkLT5DdXJyZW50QWRkcmVzc1syXSA9IHBBZC0+UGVybWFuZW50QWRkcmVzc1syXTsKLQkJcEFkLT5DdXJyZW50QWRkcmVzc1szXSA9IHBBZC0+UGVybWFuZW50QWRkcmVzc1szXTsKLQkJcEFkLT5DdXJyZW50QWRkcmVzc1s0XSA9IHBBZC0+UGVybWFuZW50QWRkcmVzc1s0XTsKLQkJcEFkLT5DdXJyZW50QWRkcmVzc1s1XSA9IHBBZC0+UGVybWFuZW50QWRkcmVzc1s1XTsKLQl9Ci0JLyogV3JpdGUgTmV3IE1BQyBhZGRyZXNzIHRvIE1BQ19DU1IyICYgTUFDX0NTUjMgJiBsZXQgQVNJQyBrbm93IG91ciBuZXcgTUFDICovCi0JU3RhTWFjUmVnMC5maWVsZC5CeXRlMCA9IHBBZC0+Q3VycmVudEFkZHJlc3NbMF07Ci0JU3RhTWFjUmVnMC5maWVsZC5CeXRlMSA9IHBBZC0+Q3VycmVudEFkZHJlc3NbMV07Ci0JU3RhTWFjUmVnMC5maWVsZC5CeXRlMiA9IHBBZC0+Q3VycmVudEFkZHJlc3NbMl07Ci0JU3RhTWFjUmVnMC5maWVsZC5CeXRlMyA9IHBBZC0+Q3VycmVudEFkZHJlc3NbM107Ci0JU3RhTWFjUmVnMS5maWVsZC5CeXRlNCA9IHBBZC0+Q3VycmVudEFkZHJlc3NbNF07Ci0JU3RhTWFjUmVnMS5maWVsZC5CeXRlNSA9IHBBZC0+Q3VycmVudEFkZHJlc3NbNV07Ci0JU3RhTWFjUmVnMS5maWVsZC5VMk1lTWFzayA9IDB4ZmY7Ci0JREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLAotCQkoIkxvY2FsIE1BQyA9ICVwTVxuIiwgcEFkLT5DdXJyZW50QWRkcmVzcykpOwotCi0JUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgTUFDX0FERFJfRFcwLCBTdGFNYWNSZWcwLndvcmQpOwotCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIE1BQ19BRERSX0RXMSwgU3RhTWFjUmVnMS53b3JkKTsKLQlyZXR1cm4gU3RhdHVzOwotfQotCi0vKgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Sb3V0aW5lIERlc2NyaXB0aW9uOgotICAgIERpc2FibGUgRE1BLgotCi1Bcmd1bWVudHM6Ci0JKnBBZAkJCQl0aGUgcmF4eCBpbnRlcmZhY2UgZGF0YSBwb2ludGVyCi0KLVJldHVybiBWYWx1ZToKLQlOb25lCi0KLU5vdGU6Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFJUMjhYWERNQURpc2FibGUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCS8qIG5vIHVzZSAqLwotfQotCi0vKgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Sb3V0aW5lIERlc2NyaXB0aW9uOgotICAgIEVuYWJsZSBETUEuCi0KLUFyZ3VtZW50czoKLQkqcEFkCQkJCXRoZSByYXh4IGludGVyZmFjZSBkYXRhIHBvaW50ZXIKLQotUmV0dXJuIFZhbHVlOgotCU5vbmUKLQotTm90ZToKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgUlQyOFhYRE1BRW5hYmxlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlXUERNQV9HTE9fQ0ZHX1NUUlVDIEdsb0NmZzsKLQlVU0JfRE1BX0NGR19TVFJVQyBVc2JDZmc7Ci0JaW50IGkgPSAwOwotCi0JUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCAweDQpOwotCWRvIHsKLQkJUlRNUF9JT19SRUFEMzIocEFkLCBXUERNQV9HTE9fQ0ZHLCAmR2xvQ2ZnLndvcmQpOwotCQlpZiAoKEdsb0NmZy5maWVsZC5UeERNQUJ1c3kgPT0gMCkKLQkJICAgICYmIChHbG9DZmcuZmllbGQuUnhETUFCdXN5ID09IDApKQotCQkJYnJlYWs7Ci0KLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT0+ICBETUFCdXN5XG4iKSk7Ci0JCVJUTVB1c2VjRGVsYXkoMTAwMCk7Ci0JCWkrKzsKLQl9IHdoaWxlIChpIDwgMjAwKTsKLQotCVJUTVB1c2VjRGVsYXkoNTApOwotCUdsb0NmZy5maWVsZC5FblRYV3JpdGVCYWNrRERPTkUgPSAxOwotCUdsb0NmZy5maWVsZC5FbmFibGVSeERNQSA9IDE7Ci0JR2xvQ2ZnLmZpZWxkLkVuYWJsZVR4RE1BID0gMTsKLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJICgiPD09IFdSSVRFIERNQSBvZmZzZXQgMHgyMDggPSAweCV4XG4iLCBHbG9DZmcud29yZCkpOwotCVJUTVBfSU9fV1JJVEUzMihwQWQsIFdQRE1BX0dMT19DRkcsIEdsb0NmZy53b3JkKTsKLQotCVVzYkNmZy53b3JkID0gMDsKLQlVc2JDZmcuZmllbGQucGh5Y2xlYXIgPSAwOwotCS8qIHVzYiB2ZXJzaW9uIGlzIDEuMSxkbyBub3QgdXNlIGJ1bGsgaW4gYWdncmVnYXRpb24gKi8KLQlpZiAocEFkLT5CdWxrSW5NYXhQYWNrZXRTaXplID09IDUxMikKLQkJVXNiQ2ZnLmZpZWxkLlJ4QnVsa0FnZ0VuID0gMTsKLQkvKiBmb3IgbGFzdCBwYWNrZXQsIFBCRiBtaWdodCB1c2UgbW9yZSB0aGFuIGxpbWl0ZWQsIHNvIG1pbnVzIDIgdG8gcHJldmVudCBmcm9tIGVycm9yICovCi0JVXNiQ2ZnLmZpZWxkLlJ4QnVsa0FnZ0xtdCA9IChNQVhfUlhCVUxLX1NJWkUgLyAxMDI0KSAtIDM7Ci0JVXNiQ2ZnLmZpZWxkLlJ4QnVsa0FnZ1RPdXQgPSAweDgwOwkvKiAyMDA2LTEwLTE4ICovCi0JVXNiQ2ZnLmZpZWxkLlJ4QnVsa0VuID0gMTsKLQlVc2JDZmcuZmllbGQuVHhCdWxrRW4gPSAxOwotCi0JUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgVVNCX0RNQV9DRkcsIFVzYkNmZy53b3JkKTsKLQotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgKgotICAqCTI4NzAgQmVhY29uIFVwZGF0ZSBSZWxhdGVkIGZ1bmN0aW9ucy4KLSAgKgotICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotUm91dGluZSBEZXNjcmlwdGlvbjoKLSAgICBXcml0ZSBCZWFjb24gYnVmZmVyIHRvIEFzaWMuCi0KLUFyZ3VtZW50czoKLQkqcEFkCQkJCXRoZSByYXh4IGludGVyZmFjZSBkYXRhIHBvaW50ZXIKLQotUmV0dXJuIFZhbHVlOgotCU5vbmUKLQotTm90ZToKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgUlQyOHh4X1VwZGF0ZUJlYWNvblRvQXNpYyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgICAgaW50IGFwaWR4LAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgRnJhbWVMZW4sIHVuc2lnbmVkIGxvbmcgVXBkYXRlUG9zKQotewotCXU4ICpwQmVhY29uRnJhbWUgPSBOVUxMOwotCXU4ICpwdHI7Ci0JdTMyIGksIHBhZGRpbmc7Ci0Jc3RydWN0IHJ0X2JlYWNvbl9zeW5jICpwQmVhY29uU3luYyA9IHBBZC0+Q29tbW9uQ2ZnLnBCZWFjb25TeW5jOwotCXUzMiBsb25nVmFsdWU7Ci0vKiAgICAgIHUxNiAgICAgICAgICAgICAgICAgIHNob3J0VmFsdWU7ICovCi0JQk9PTEVBTiBiQmNuUmVxID0gRkFMU0U7Ci0JdTggYmNuX2lkeCA9IDA7Ci0KLQlpZiAocEJlYWNvbkZyYW1lID09IE5VTEwpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgicEJlYWNvbkZyYW1lIGlzIE5VTEwhXG4iKSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAocEJlYWNvblN5bmMgPT0gTlVMTCkgewotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJwQmVhY29uU3luYyBpcyBOVUxMIVxuIikpOwotCQlyZXR1cm47Ci0JfQotCS8qaWYgKChwQWQtPldkc1RhYi5Nb2RlID09IFdEU19CUklER0VfTU9ERSkgfHwgKi8KLQkvKiAgICAgICgocEFkLT5BcENmZy5NQlNTSURbYXBpZHhdLk1TU0lERGV2ID09IE5VTEwpIHx8ICEocEFkLT5BcENmZy5NQlNTSURbYXBpZHhdLk1TU0lERGV2LT5mbGFncyAmIElGRl9VUCkpICovCi0JLyogICAgICApICovCi0JaWYgKGJCY25SZXEgPT0gRkFMU0UpIHsKLQkJLyogd2hlbiB0aGUgcmEgaW50ZXJmYWNlIGlzIGRvd24sIGRvIG5vdCBzZW5kIGl0cyBiZWFjb24gZnJhbWUgKi8KLQkJLyogY2xlYXIgYWxsIHplcm8gKi8KLQkJZm9yIChpID0gMDsgaSA8IFRYV0lfU0laRTsgaSArPSA0KSB7Ci0JCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBwQWQtPkJlYWNvbk9mZnNldFtiY25faWR4XSArIGksCi0JCQkJCTB4MDApOwotCQl9Ci0JCXBCZWFjb25TeW5jLT5CZWFjb25CaXRNYXAgJj0KLQkJICAgICh+KEJFQUNPTl9CSVRNQVBfTUFTSyAmICgxIDw8IGJjbl9pZHgpKSk7Ci0JCU5kaXNaZXJvTWVtb3J5KHBCZWFjb25TeW5jLT5CZWFjb25UeFdJW2Jjbl9pZHhdLCBUWFdJX1NJWkUpOwotCX0gZWxzZSB7Ci0JCXB0ciA9ICh1OCAqKSYgcEFkLT5CZWFjb25UeFdJOwotCQlpZiAoTmRpc0VxdWFsTWVtb3J5KHBCZWFjb25TeW5jLT5CZWFjb25UeFdJW2Jjbl9pZHhdLCAmcEFkLT5CZWFjb25UeFdJLCBUWFdJX1NJWkUpID09IEZBTFNFKSB7CS8qIElmIEJlYWNvblR4V0kgY2hhbmdlZCwgd2UgbmVlZCB0byByZXdyaXRlIHRoZSBUeFdJIGZvciB0aGUgQmVhY29uIGZyYW1lcy4gKi8KLQkJCXBCZWFjb25TeW5jLT5CZWFjb25CaXRNYXAgJj0KLQkJCSAgICAofihCRUFDT05fQklUTUFQX01BU0sgJiAoMSA8PCBiY25faWR4KSkpOwotCQkJTmRpc01vdmVNZW1vcnkocEJlYWNvblN5bmMtPkJlYWNvblR4V0lbYmNuX2lkeF0sCi0JCQkJICAgICAgICZwQWQtPkJlYWNvblR4V0ksIFRYV0lfU0laRSk7Ci0JCX0KLQotCQlpZiAoKHBCZWFjb25TeW5jLT5CZWFjb25CaXRNYXAgJiAoMSA8PCBiY25faWR4KSkgIT0KLQkJICAgICgxIDw8IGJjbl9pZHgpKSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgVFhXSV9TSVpFOyBpICs9IDQpCS8qIDE2LWJ5dGUgVFhXSSBmaWVsZCAqLwotCQkJewotCQkJCWxvbmdWYWx1ZSA9Ci0JCQkJICAgICpwdHIgKyAoKihwdHIgKyAxKSA8PCA4KSArCi0JCQkJICAgICgqKHB0ciArIDIpIDw8IDE2KSArICgqKHB0ciArIDMpIDw8IDI0KTsKLQkJCQlSVE1QX0lPX1dSSVRFMzIocEFkLAotCQkJCQkJcEFkLT5CZWFjb25PZmZzZXRbYmNuX2lkeF0gKyBpLAotCQkJCQkJbG9uZ1ZhbHVlKTsKLQkJCQlwdHIgKz0gNDsKLQkJCX0KLQkJfQotCi0JCXB0ciA9IHBCZWFjb25TeW5jLT5CZWFjb25CdWZbYmNuX2lkeF07Ci0JCXBhZGRpbmcgPSAoRnJhbWVMZW4gJiAweDAxKTsKLQkJTmRpc1plcm9NZW1vcnkoKHU4ICopKHBCZWFjb25GcmFtZSArIEZyYW1lTGVuKSwgcGFkZGluZyk7Ci0JCUZyYW1lTGVuICs9IHBhZGRpbmc7Ci0JCWZvciAoaSA9IDA7IGkgPCBGcmFtZUxlbiAvKkhXX0JFQUNPTl9PRkZTRVQgKi8gOyBpICs9IDIpIHsKLQkJCWlmIChOZGlzRXF1YWxNZW1vcnkocHRyLCBwQmVhY29uRnJhbWUsIDIpID09IEZBTFNFKSB7Ci0JCQkJTmRpc01vdmVNZW1vcnkocHRyLCBwQmVhY29uRnJhbWUsIDIpOwotCQkJCS8qc2hvcnRWYWx1ZSA9ICpwdHIgKyAoKihwdHIrMSk8PDgpOyAqLwotCQkJCS8qUlRNUF9JT19XUklURTgocEFkLCBwQWQtPkJlYWNvbk9mZnNldFtiY25faWR4XSArIFRYV0lfU0laRSArIGksIHNob3J0VmFsdWUpOyAqLwotCQkJCVJUVVNCTXVsdGlXcml0ZShwQWQsCi0JCQkJCQlwQWQtPkJlYWNvbk9mZnNldFtiY25faWR4XSArCi0JCQkJCQlUWFdJX1NJWkUgKyBpLCBwdHIsIDIpOwotCQkJfQotCQkJcHRyICs9IDI7Ci0JCQlwQmVhY29uRnJhbWUgKz0gMjsKLQkJfQotCi0JCXBCZWFjb25TeW5jLT5CZWFjb25CaXRNYXAgfD0gKDEgPDwgYmNuX2lkeCk7Ci0KLQkJLyogRm9yIEFQIGludGVyZmFjZSwgc2V0IHRoZSBEdGltQml0T24gc28gdGhhdCB3ZSBjYW4gc2VuZCBCY2FzdC9NY2FzdCBmcmFtZSBvdXQgYWZ0ZXIgdGhpcyBiZWFjb24gZnJhbWUuICovCi0JfQotCi19Ci0KLXZvaWQgUlRVU0JCc3NCZWFjb25TdG9wKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlzdHJ1Y3QgcnRfYmVhY29uX3N5bmMgKnBCZWFjb25TeW5jOwotCWludCBpLCBvZmZzZXQ7Ci0JQk9PTEVBTiBDYW5jZWxsZWQgPSBUUlVFOwotCi0JcEJlYWNvblN5bmMgPSBwQWQtPkNvbW1vbkNmZy5wQmVhY29uU3luYzsKLQlpZiAocEJlYWNvblN5bmMgJiYgcEJlYWNvblN5bmMtPkVuYWJsZUJlYWNvbikgewotCQlpbnQgTnVtT2ZCY247Ci0KLQkJewotCQkJTnVtT2ZCY24gPSBNQVhfTUVTSF9OVU07Ci0JCX0KLQotCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+Q29tbW9uQ2ZnLkJlYWNvblVwZGF0ZVRpbWVyLCAmQ2FuY2VsbGVkKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgTnVtT2ZCY247IGkrKykgewotCQkJTmRpc1plcm9NZW1vcnkocEJlYWNvblN5bmMtPkJlYWNvbkJ1ZltpXSwKLQkJCQkgICAgICAgSFdfQkVBQ09OX09GRlNFVCk7Ci0JCQlOZGlzWmVyb01lbW9yeShwQmVhY29uU3luYy0+QmVhY29uVHhXSVtpXSwgVFhXSV9TSVpFKTsKLQotCQkJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBIV19CRUFDT05fT0ZGU0VUOyBvZmZzZXQgKz0gNCkKLQkJCQlSVE1QX0lPX1dSSVRFMzIocEFkLAotCQkJCQkJcEFkLT5CZWFjb25PZmZzZXRbaV0gKyBvZmZzZXQsCi0JCQkJCQkweDAwKTsKLQotCQkJcEJlYWNvblN5bmMtPkNhcGFiaWxpdHlJbmZvTG9jYXRpb25JbkJlYWNvbltpXSA9IDA7Ci0JCQlwQmVhY29uU3luYy0+VGltSUVMb2NhdGlvbkluQmVhY29uW2ldID0gMDsKLQkJfQotCQlwQmVhY29uU3luYy0+QmVhY29uQml0TWFwID0gMDsKLQkJcEJlYWNvblN5bmMtPkR0aW1CaXRPbiA9IDA7Ci0JfQotfQotCi12b2lkIFJUVVNCQnNzQmVhY29uU3RhcnQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCWludCBhcGlkeDsKLQlzdHJ1Y3QgcnRfYmVhY29uX3N5bmMgKnBCZWFjb25TeW5jOwotLyogICAgICBMQVJHRV9JTlRFR0VSICAgdHNmVGltZSwgZGVsdGFUaW1lOyAqLwotCi0JcEJlYWNvblN5bmMgPSBwQWQtPkNvbW1vbkNmZy5wQmVhY29uU3luYzsKLQlpZiAocEJlYWNvblN5bmMgJiYgcEJlYWNvblN5bmMtPkVuYWJsZUJlYWNvbikgewotCQlpbnQgTnVtT2ZCY247Ci0KLQkJewotCQkJTnVtT2ZCY24gPSBNQVhfTUVTSF9OVU07Ci0JCX0KLQotCQlmb3IgKGFwaWR4ID0gMDsgYXBpZHggPCBOdW1PZkJjbjsgYXBpZHgrKykgewotCQkJdTggQ2FwYWJpbGl0eUluZm9Mb2NhdGlvbkluQmVhY29uID0gMDsKLQkJCXU4IFRpbUlFTG9jYXRpb25JbkJlYWNvbiA9IDA7Ci0KLQkJCU5kaXNaZXJvTWVtb3J5KHBCZWFjb25TeW5jLT5CZWFjb25CdWZbYXBpZHhdLAotCQkJCSAgICAgICBIV19CRUFDT05fT0ZGU0VUKTsKLQkJCXBCZWFjb25TeW5jLT5DYXBhYmlsaXR5SW5mb0xvY2F0aW9uSW5CZWFjb25bYXBpZHhdID0KLQkJCSAgICBDYXBhYmlsaXR5SW5mb0xvY2F0aW9uSW5CZWFjb247Ci0JCQlwQmVhY29uU3luYy0+VGltSUVMb2NhdGlvbkluQmVhY29uW2FwaWR4XSA9Ci0JCQkgICAgVGltSUVMb2NhdGlvbkluQmVhY29uOwotCQkJTmRpc1plcm9NZW1vcnkocEJlYWNvblN5bmMtPkJlYWNvblR4V0lbYXBpZHhdLAotCQkJCSAgICAgICBUWFdJX1NJWkUpOwotCQl9Ci0JCXBCZWFjb25TeW5jLT5CZWFjb25CaXRNYXAgPSAwOwotCQlwQmVhY29uU3luYy0+RHRpbUJpdE9uID0gMDsKLQkJcEFkLT5Db21tb25DZmcuQmVhY29uVXBkYXRlVGltZXIuUmVwZWF0ID0gVFJVRTsKLQotCQlwQWQtPkNvbW1vbkNmZy5CZWFjb25BZGp1c3QgPSAwOwotCQlwQWQtPkNvbW1vbkNmZy5CZWFjb25GYWN0b3IgPQotCQkgICAgMHhmZmZmZmZmZiAvIChwQWQtPkNvbW1vbkNmZy5CZWFjb25QZXJpb2QgPDwgMTApOwotCQlwQWQtPkNvbW1vbkNmZy5CZWFjb25SZW1haW4gPQotCQkgICAgKDB4ZmZmZmZmZmYgJSAocEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kIDw8IDEwKSkgKyAxOwotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIlJUVVNCQnNzQmVhY29uU3RhcnQ6QmVhY29uRmFjdG9yPSVkLCBCZWFjb25SZW1haW49JWQhXG4iLAotCQkJICBwQWQtPkNvbW1vbkNmZy5CZWFjb25GYWN0b3IsCi0JCQkgIHBBZC0+Q29tbW9uQ2ZnLkJlYWNvblJlbWFpbikpOwotCQlSVE1QU2V0VGltZXIoJnBBZC0+Q29tbW9uQ2ZnLkJlYWNvblVwZGF0ZVRpbWVyLAotCQkJICAgICAxMCAvKnBBZC0+Q29tbW9uQ2ZnLkJlYWNvblBlcmlvZCAqLyApOwotCi0JfQotfQotCi12b2lkIFJUVVNCQnNzQmVhY29uSW5pdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0Jc3RydWN0IHJ0X2JlYWNvbl9zeW5jICpwQmVhY29uU3luYzsKLQlpbnQgaTsKLQotCW9zX2FsbG9jX21lbShwQWQsICh1OCAqKikgKCZwQWQtPkNvbW1vbkNmZy5wQmVhY29uU3luYyksCi0JCSAgICAgc2l6ZW9mKHN0cnVjdCBydF9iZWFjb25fc3luYykpOwotCS8qTmRpc0FsbG9jTWVtb3J5KHBBZC0+Q29tbW9uQ2ZnLnBCZWFjb25TeW5jLCBzaXplb2Yoc3RydWN0IHJ0X2JlYWNvbl9zeW5jKSwgTUVNX0FMTE9DX0ZMQUcpOyAqLwotCWlmIChwQWQtPkNvbW1vbkNmZy5wQmVhY29uU3luYykgewotCQlwQmVhY29uU3luYyA9IHBBZC0+Q29tbW9uQ2ZnLnBCZWFjb25TeW5jOwotCQlOZGlzWmVyb01lbW9yeShwQmVhY29uU3luYywgc2l6ZW9mKHN0cnVjdCBydF9iZWFjb25fc3luYykpOwotCQlmb3IgKGkgPSAwOyBpIDwgSFdfQkVBQ09OX01BWF9DT1VOVDsgaSsrKSB7Ci0JCQlOZGlzWmVyb01lbW9yeShwQmVhY29uU3luYy0+QmVhY29uQnVmW2ldLAotCQkJCSAgICAgICBIV19CRUFDT05fT0ZGU0VUKTsKLQkJCXBCZWFjb25TeW5jLT5DYXBhYmlsaXR5SW5mb0xvY2F0aW9uSW5CZWFjb25baV0gPSAwOwotCQkJcEJlYWNvblN5bmMtPlRpbUlFTG9jYXRpb25JbkJlYWNvbltpXSA9IDA7Ci0JCQlOZGlzWmVyb01lbW9yeShwQmVhY29uU3luYy0+QmVhY29uVHhXSVtpXSwgVFhXSV9TSVpFKTsKLQkJfQotCQlwQmVhY29uU3luYy0+QmVhY29uQml0TWFwID0gMDsKLQotCQkvKlJUTVBJbml0VGltZXIocEFkLCAmcEFkLT5Db21tb25DZmcuQmVhY29uVXBkYXRlVGltZXIsIEdFVF9USU1FUl9GVU5DVElPTihCZWFjb25VcGRhdGVFeGVjKSwgcEFkLCBUUlVFKTsgKi8KLQkJcEJlYWNvblN5bmMtPkVuYWJsZUJlYWNvbiA9IFRSVUU7Ci0JfQotfQotCi12b2lkIFJUVVNCQnNzQmVhY29uRXhpdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0Jc3RydWN0IHJ0X2JlYWNvbl9zeW5jICpwQmVhY29uU3luYzsKLQlCT09MRUFOIENhbmNlbGxlZCA9IFRSVUU7Ci0JaW50IGk7Ci0KLQlpZiAocEFkLT5Db21tb25DZmcucEJlYWNvblN5bmMpIHsKLQkJcEJlYWNvblN5bmMgPSBwQWQtPkNvbW1vbkNmZy5wQmVhY29uU3luYzsKLQkJcEJlYWNvblN5bmMtPkVuYWJsZUJlYWNvbiA9IEZBTFNFOwotCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+Q29tbW9uQ2ZnLkJlYWNvblVwZGF0ZVRpbWVyLCAmQ2FuY2VsbGVkKTsKLQkJcEJlYWNvblN5bmMtPkJlYWNvbkJpdE1hcCA9IDA7Ci0KLQkJZm9yIChpID0gMDsgaSA8IEhXX0JFQUNPTl9NQVhfQ09VTlQ7IGkrKykgewotCQkJTmRpc1plcm9NZW1vcnkocEJlYWNvblN5bmMtPkJlYWNvbkJ1ZltpXSwKLQkJCQkgICAgICAgSFdfQkVBQ09OX09GRlNFVCk7Ci0JCQlwQmVhY29uU3luYy0+Q2FwYWJpbGl0eUluZm9Mb2NhdGlvbkluQmVhY29uW2ldID0gMDsKLQkJCXBCZWFjb25TeW5jLT5UaW1JRUxvY2F0aW9uSW5CZWFjb25baV0gPSAwOwotCQkJTmRpc1plcm9NZW1vcnkocEJlYWNvblN5bmMtPkJlYWNvblR4V0lbaV0sIFRYV0lfU0laRSk7Ci0JCX0KLQotCQlvc19mcmVlX21lbShwQWQsIHBBZC0+Q29tbW9uQ2ZnLnBCZWFjb25TeW5jKTsKLQkJcEFkLT5Db21tb25DZmcucEJlYWNvblN5bmMgPSBOVUxMOwotCX0KLX0KLQotLyoKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBSb3V0aW5lIERlc2NyaXB0aW9uOgotICAgICAgICBGb3IgZGV2aWNlIHdvcmsgYXMgQVAgbW9kZSBidXQgZGlkbid0IGhhdmUgVEJUVCBpbnRlcnJ1cHQgZXZlbnQsIHdlIG5lZWQgYSBtZWNoYW5pc20KLSAgICAgICAgdG8gdXBkYXRlIHRoZSBiZWFjb24gY29udGV4dCBpbiBlYWNoIEJlYWNvbiBpbnRlcnZhbC4gSGVyZSB3ZSB1c2UgYSBwZXJpb2RpY2FsIHRpbWVyCi0gICAgICAgIHRvIHNpbXVsYXRlIHRoZSBUQlRUIGludGVycnVwdCB0byBoYW5kbGUgdGhlIGJlYWNvbiBjb250ZXh0IHVwZGF0ZS4KLQotICAgIEFyZ3VtZW50czoKLSAgICAgICAgU3lzdGVtU3BlY2lmaWMxICAgICAgICAgLSBOb3QgdXNlZC4KLSAgICAgICAgRnVuY3Rpb25Db250ZXh0ICAgICAgICAgLSBQb2ludGVyIHRvIG91ciBBZGFwdGVyIGNvbnRleHQuCi0gICAgICAgIFN5c3RlbVNwZWNpZmljMiAgICAgICAgIC0gTm90IHVzZWQuCi0gICAgICAgIFN5c3RlbVNwZWNpZmljMyAgICAgICAgIC0gTm90IHVzZWQuCi0KLSAgICBSZXR1cm4gVmFsdWU6Ci0gICAgICAgIE5vbmUKLQotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgQmVhY29uVXBkYXRlRXhlYyh2b2lkICpTeXN0ZW1TcGVjaWZpYzEsCi0JCSAgICAgIHZvaWQgKkZ1bmN0aW9uQ29udGV4dCwKLQkJICAgICAgdm9pZCAqU3lzdGVtU3BlY2lmaWMyLCB2b2lkICpTeXN0ZW1TcGVjaWZpYzMpCi17Ci0Jc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkID0gKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKilGdW5jdGlvbkNvbnRleHQ7Ci0JTEFSR0VfSU5URUdFUiB0c2ZUaW1lX2E7CS8qLCB0c2ZUaW1lX2IsIGRlbHRhVGltZV9leHAsIGRlbHRhVGltZV9hYjsgKi8KLQl1MzIgZGVsdGEsIGRlbHRhMk1TLCBwZXJpb2QyVVMsIHJlbWFpbiwgcmVtYWluX2xvdywgcmVtYWluX2hpZ2g7Ci0vKiAgICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgIHBvc2l0aXZlOyAqLwotCi0JaWYgKHBBZC0+Q29tbW9uQ2ZnLklzVXBkYXRlQmVhY29uID09IFRSVUUpIHsKLQkJUmVTeW5jQmVhY29uVGltZShwQWQpOwotCi0JfQotCi0JUlRNUF9JT19SRUFEMzIocEFkLCBUU0ZfVElNRVJfRFcwLCAmdHNmVGltZV9hLnUuTG93UGFydCk7Ci0JUlRNUF9JT19SRUFEMzIocEFkLCBUU0ZfVElNRVJfRFcxLCAmdHNmVGltZV9hLnUuSGlnaFBhcnQpOwotCi0JLypwb3NpdGl2ZT1nZXREZWx0YVRpbWUodHNmVGltZV9hLCBleHBlY3RlZFRpbWUsICZkZWx0YVRpbWVfZXhwKTsgKi8KLQlwZXJpb2QyVVMgPSAocEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kIDw8IDEwKTsKLQlyZW1haW5faGlnaCA9IHBBZC0+Q29tbW9uQ2ZnLkJlYWNvblJlbWFpbiAqIHRzZlRpbWVfYS51LkhpZ2hQYXJ0OwotCXJlbWFpbl9sb3cgPSB0c2ZUaW1lX2EudS5Mb3dQYXJ0ICUgKHBBZC0+Q29tbW9uQ2ZnLkJlYWNvblBlcmlvZCA8PCAxMCk7Ci0JcmVtYWluID0KLQkgICAgKHJlbWFpbl9oaWdoICsgcmVtYWluX2xvdykgJSAocEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kIDw8IDEwKTsKLQlkZWx0YSA9IChwQWQtPkNvbW1vbkNmZy5CZWFjb25QZXJpb2QgPDwgMTApIC0gcmVtYWluOwotCi0JZGVsdGEyTVMgPSAoZGVsdGEgPj4gMTApOwotCWlmIChkZWx0YTJNUyA+IDE1MCkgewotCQlwQWQtPkNvbW1vbkNmZy5CZWFjb25VcGRhdGVUaW1lci5UaW1lclZhbHVlID0gMTAwOwotCQlwQWQtPkNvbW1vbkNmZy5Jc1VwZGF0ZUJlYWNvbiA9IEZBTFNFOwotCX0gZWxzZSB7Ci0JCXBBZC0+Q29tbW9uQ2ZnLkJlYWNvblVwZGF0ZVRpbWVyLlRpbWVyVmFsdWUgPSBkZWx0YTJNUyArIDEwOwotCQlwQWQtPkNvbW1vbkNmZy5Jc1VwZGF0ZUJlYWNvbiA9IFRSVUU7Ci0JfQotCi19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqCi0gICoJMjg3MCBSYWRpbyBvbi9vZmYgUmVsYXRlZCBmdW5jdGlvbnMuCi0gICoKLSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkIFJUMjh4eFVzYk1sbWVSYWRpb09uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlzdHJ1Y3QgcnRfcnRtcF9jaGlwX29wICpwQ2hpcE9wcyA9ICZwQWQtPmNoaXBPcHM7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSVDI4eHhVc2JNbG1lUmFkaW9PbigpXG4iKSk7Ci0KLQlpZiAoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SQURJT19PRkYpKQotCQlyZXR1cm47Ci0KLQl7Ci0JCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHgzMSwgMHhmZiwgMHgwMCwgMHgwMik7Ci0JCVJUTVB1c2VjRGVsYXkoMTAwMDApOwotCX0KLQkvKk5JQ1Jlc2V0RnJvbUVycm9yKHBBZCk7ICovCi0KLQkvKiBFbmFibGUgVHgvUnggKi8KLQlSVE1QRW5hYmxlUnhUeChwQWQpOwotCi0JaWYgKHBDaGlwT3BzLT5Bc2ljUmV2ZXJzZVJmRnJvbVNsZWVwTW9kZSkKLQkJcENoaXBPcHMtPkFzaWNSZXZlcnNlUmZGcm9tU2xlZXBNb2RlKHBBZCk7Ci0KLQkvKiBDbGVhciBSYWRpbyBvZmYgZmxhZyAqLwotCVJUTVBfQ0xFQVJfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkFESU9fT0ZGKTsKLQotCVJUVVNCQnVsa1JlY2VpdmUocEFkKTsKLQotCS8qIFNldCBMRUQgKi8KLQlSVE1QU2V0TEVEKHBBZCwgTEVEX1JBRElPX09OKTsKLX0KLQotdm9pZCBSVDI4eHhVc2JNbG1lUmFkaW9PRkYoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCVdQRE1BX0dMT19DRkdfU1RSVUMgR2xvQ2ZnOwotCXUzMiBWYWx1ZSwgaTsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJUMjh4eFVzYk1sbWVSYWRpb09GRigpXG4iKSk7Ci0KLQlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JBRElPX09GRikpCi0JCXJldHVybjsKLQotCS8qIENsZWFyIFBNS0lEIGNhY2hlLiAqLwotCXBBZC0+U3RhQ2ZnLlNhdmVkUE1LTnVtID0gMDsKLQlSVE1QWmVyb01lbW9yeShwQWQtPlN0YUNmZy5TYXZlZFBNSywgKFBNS0lEX05PICogc2l6ZW9mKHN0cnVjdCBydF9ic3NpZF9pbmZvKSkpOwotCi0JLyogTGluayBkb3duIGZpcnN0IGlmIGFueSBhc3NvY2lhdGlvbiBleGlzdHMgKi8KLQlpZiAoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkgewotCQlpZiAoSU5GUkFfT04ocEFkKSB8fCBBREhPQ19PTihwQWQpKSB7Ci0JCQlzdHJ1Y3QgcnRfbWxtZV9kaXNhc3NvY19yZXEgRGlzUmVxOwotCQkJc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqcE1zZ0VsZW0gPQotCQkJICAgIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0pLAotCQkJCQkJCU1FTV9BTExPQ19GTEFHKTsKLQotCQkJaWYgKHBNc2dFbGVtKSB7Ci0JCQkJQ09QWV9NQUNfQUREUigmRGlzUmVxLkFkZHIsCi0JCQkJCSAgICAgIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKLQkJCQlEaXNSZXEuUmVhc29uID0gUkVBU09OX0RJU0FTU09DX1NUQV9MRUFWSU5HOwotCi0JCQkJcE1zZ0VsZW0tPk1hY2hpbmUgPSBBU1NPQ19TVEFURV9NQUNISU5FOwotCQkJCXBNc2dFbGVtLT5Nc2dUeXBlID0gTVQyX01MTUVfRElTQVNTT0NfUkVROwotCQkJCXBNc2dFbGVtLT5Nc2dMZW4gPQotCQkJCSAgICBzaXplb2Yoc3RydWN0IHJ0X21sbWVfZGlzYXNzb2NfcmVxKTsKLQkJCQlOZGlzTW92ZU1lbW9yeShwTXNnRWxlbS0+TXNnLCAmRGlzUmVxLAotCQkJCQkgICAgICAgc2l6ZW9mCi0JCQkJCSAgICAgICAoc3RydWN0IHJ0X21sbWVfZGlzYXNzb2NfcmVxKSk7Ci0KLQkJCQlNbG1lRGlzYXNzb2NSZXFBY3Rpb24ocEFkLCBwTXNnRWxlbSk7Ci0JCQkJa2ZyZWUocE1zZ0VsZW0pOwotCi0JCQkJUlRNUHVzZWNEZWxheSgxMDAwKTsKLQkJCX0KLQkJfQotCX0KLQkvKiBTZXQgUmFkaW8gb2ZmIGZsYWcgKi8KLQlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SQURJT19PRkYpOwotCi0JewotCQkvKiBMaW5rIGRvd24gZmlyc3QgaWYgYW55IGFzc29jaWF0aW9uIGV4aXN0cyAqLwotCQlpZiAoSU5GUkFfT04ocEFkKSB8fCBBREhPQ19PTihwQWQpKQotCQkJTGlua0Rvd24ocEFkLCBGQUxTRSk7Ci0JCVJUTVB1c2VjRGVsYXkoMTAwMDApOwotCi0JCS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0JCS8qIENsZWFuIHVwIG9sZCBic3MgdGFibGUgKi8KLQkJQnNzVGFibGVJbml0KCZwQWQtPlNjYW5UYWIpOwotCX0KLQotCS8qIFNldCBMRUQgKi8KLQlSVE1QU2V0TEVEKHBBZCwgTEVEX1JBRElPX09GRik7Ci0KLQlpZiAocEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXID09IEJXXzQwKSB7Ci0JCS8qIE11c3QgdXNpbmcgNDBNSHouICovCi0JCUFzaWNUdXJuT2ZmUkZDbGsocEFkLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCk7Ci0JfSBlbHNlIHsKLQkJLyogTXVzdCB1c2luZyAyME1Iei4gKi8KLQkJQXNpY1R1cm5PZmZSRkNsayhwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpOwotCX0KLQotCS8qIERpc2FibGUgVHgvUnggRE1BICovCi0JUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBXUERNQV9HTE9fQ0ZHLCAmR2xvQ2ZnLndvcmQpOwkvKiBkaXNhYmxlIERNQSAqLwotCUdsb0NmZy5maWVsZC5FbmFibGVUeERNQSA9IDA7Ci0JR2xvQ2ZnLmZpZWxkLkVuYWJsZVJ4RE1BID0gMDsKLQlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBXUERNQV9HTE9fQ0ZHLCBHbG9DZmcud29yZCk7CS8qIGFib3J0IGFsbCBUWCByaW5ncyAqLwotCi0JLyogV2FpdGluZyBmb3IgRE1BIGlkbGUgKi8KLQlpID0gMDsKLQlkbyB7Ci0JCVJUTVBfSU9fUkVBRDMyKHBBZCwgV1BETUFfR0xPX0NGRywgJkdsb0NmZy53b3JkKTsKLQkJaWYgKChHbG9DZmcuZmllbGQuVHhETUFCdXN5ID09IDApCi0JCSAgICAmJiAoR2xvQ2ZnLmZpZWxkLlJ4RE1BQnVzeSA9PSAwKSkKLQkJCWJyZWFrOwotCi0JCVJUTVB1c2VjRGVsYXkoMTAwMCk7Ci0JfSB3aGlsZSAoaSsrIDwgMTAwKTsKLQotCS8qIERpc2FibGUgTUFDIFR4L1J4ICovCi0JUlRNUF9JT19SRUFEMzIocEFkLCBNQUNfU1lTX0NUUkwsICZWYWx1ZSk7Ci0JVmFsdWUgJj0gKDB4ZmZmZmZmZjMpOwotCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgVmFsdWUpOwotCi0JewotCQlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4MzAsIDB4ZmYsIDB4ZmYsIDB4MDIpOwotCX0KLX0KLQotI2VuZGlmIC8qIFJUTVBfTUFDX1VTQiAvLyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX3Nhbml0eS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX3Nhbml0eS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmZiNGFkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9zYW5pdHkuYworKysgL2Rldi9udWxsCkBAIC0xLDEyMDUgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLQlNb2R1bGUgTmFtZToKLQlzYW5pdHkuYwotCi0JQWJzdHJhY3Q6Ci0KLQlSZXZpc2lvbiBIaXN0b3J5OgotCVdobwkJCVdoZW4JCQlXaGF0Ci0JLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCUpvaG4gQ2hhbmcgIDIwMDQtMDktMDEgICAgICBhZGQgV01NIHN1cHBvcnQKLSovCi0jaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCi0KLWV4dGVybiB1OCBDSVNDT19PVUlbXTsKLQotZXh0ZXJuIHU4IFdQQV9PVUlbXTsKLWV4dGVybiB1OCBSU05fT1VJW107Ci1leHRlcm4gdTggV01FX0lORk9fRUxFTVtdOwotZXh0ZXJuIHU4IFdNRV9QQVJNX0VMRU1bXTsKLWV4dGVybiB1OCBDY3gyUW9zSW5mb1tdOwotZXh0ZXJuIHU4IFJBTElOS19PVUlbXTsKLWV4dGVybiB1OCBCUk9BRENPTV9PVUlbXTsKLWV4dGVybiB1OCBXUFNfT1VJW107Ci0KLS8qCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBEZXNjcmlwdGlvbjoKLSAgICAgICAgTUxNRSBtZXNzYWdlIHNhbml0eSBjaGVjawotICAgIFJldHVybjoKLSAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi1CT09MRUFOIE1sbWVBZGRCQVJlcVNhbml0eShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICB2b2lkICogTXNnLCB1bnNpZ25lZCBsb25nIE1zZ0xlbiwgdTggKnBBZGRyMikKLXsKLQlzdHJ1Y3QgcnRfbWxtZV9hZGRiYV9yZXEgKnBJbmZvOwotCi0JcEluZm8gPSAoc3RydWN0IHJ0X21sbWVfYWRkYmFfcmVxICopTXNnOwotCi0JaWYgKChNc2dMZW4gIT0gc2l6ZW9mKHN0cnVjdCBydF9tbG1lX2FkZGJhX3JlcSkpKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiTWxtZUFkZEJBUmVxU2FuaXR5IGZhaWwgLSBtZXNzYWdlIGxlbmd0aCBub3QgY29ycmVjdC5cbiIpKTsKLQkJcmV0dXJuIEZBTFNFOwotCX0KLQotCWlmICgocEluZm8tPldjaWQgPj0gTUFYX0xFTl9PRl9NQUNfVEFCTEUpKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiTWxtZUFkZEJBUmVxU2FuaXR5IGZhaWwgLSBUaGUgcGVlciBNYWMgaXMgbm90IGFzc29jaWF0ZWQgeWV0LlxuIikpOwotCQlyZXR1cm4gRkFMU0U7Ci0JfQotCi0JaWYgKChwSW5mby0+cEFkZHJbMF0gJiAweDAxKSA9PSAweDAxKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiTWxtZUFkZEJBUmVxU2FuaXR5IGZhaWwgLSBicm9hZGNhc3QgYWRkcmVzcyBub3Qgc3VwcG9ydCBCQVxuIikpOwotCQlyZXR1cm4gRkFMU0U7Ci0JfQotCi0JcmV0dXJuIFRSVUU7Ci19Ci0KLS8qCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBEZXNjcmlwdGlvbjoKLSAgICAgICAgTUxNRSBtZXNzYWdlIHNhbml0eSBjaGVjawotICAgIFJldHVybjoKLSAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi1CT09MRUFOIE1sbWVEZWxCQVJlcVNhbml0eShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHZvaWQgKiBNc2csIHVuc2lnbmVkIGxvbmcgTXNnTGVuKQotewotCXN0cnVjdCBydF9tbG1lX2RlbGJhX3JlcSAqcEluZm87Ci0JcEluZm8gPSAoc3RydWN0IHJ0X21sbWVfZGVsYmFfcmVxICopTXNnOwotCi0JaWYgKChNc2dMZW4gIT0gc2l6ZW9mKHN0cnVjdCBydF9tbG1lX2RlbGJhX3JlcSkpKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJICgiTWxtZURlbEJBUmVxU2FuaXR5IGZhaWwgLSBtZXNzYWdlIGxlbmd0aCBub3QgY29ycmVjdC5cbiIpKTsKLQkJcmV0dXJuIEZBTFNFOwotCX0KLQotCWlmICgocEluZm8tPldjaWQgPj0gTUFYX0xFTl9PRl9NQUNfVEFCTEUpKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJICgiTWxtZURlbEJBUmVxU2FuaXR5IGZhaWwgLSBUaGUgcGVlciBNYWMgaXMgbm90IGFzc29jaWF0ZWQgeWV0LlxuIikpOwotCQlyZXR1cm4gRkFMU0U7Ci0JfQotCi0JaWYgKChwSW5mby0+VElEICYgMHhmMCkpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkgKCJNbG1lRGVsQkFSZXFTYW5pdHkgZmFpbCAtIFRoZSBwZWVyIFRJRCBpcyBpbmNvcnJlY3QuXG4iKSk7Ci0JCXJldHVybiBGQUxTRTsKLQl9Ci0KLQlpZiAoTmRpc0VxdWFsTWVtb3J5Ci0JICAgIChwQWQtPk1hY1RhYi5Db250ZW50W3BJbmZvLT5XY2lkXS5BZGRyLCBwSW5mby0+QWRkciwKLQkgICAgIE1BQ19BRERSX0xFTikgPT0gMCkgewotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCSAoIk1sbWVEZWxCQVJlcVNhbml0eSBmYWlsIC0gdGhlIHBlZXIgYWRkciBkb3Nlbid0IGV4aXN0LlxuIikpOwotCQlyZXR1cm4gRkFMU0U7Ci0JfQotCi0JcmV0dXJuIFRSVUU7Ci19Ci0KLUJPT0xFQU4gUGVlckFkZEJBUmVxQWN0aW9uU2FuaXR5KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkgdm9pZCAqIHBNc2csCi0JCQkJIHVuc2lnbmVkIGxvbmcgTXNnTGVuLCB1OCAqcEFkZHIyKQotewotCXN0cnVjdCBydF9mcmFtZV84MDJfMTEgKiBwRnJhbWUgPSAoc3RydWN0IHJ0X2ZyYW1lXzgwMl8xMSAqKSBwTXNnOwotCXN0cnVjdCBydF9mcmFtZV9hZGRiYV9yZXEgKiBwQWRkRnJhbWU7Ci0JcEFkZEZyYW1lID0gKHN0cnVjdCBydF9mcmFtZV9hZGRiYV9yZXEgKikgKHBNc2cpOwotCWlmIChNc2dMZW4gPCAoc2l6ZW9mKHN0cnVjdCBydF9mcmFtZV9hZGRiYV9yZXEpKSkgewotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCSAoIlBlZXJBZGRCQVJlcUFjdGlvblNhbml0eTogQUREQkEgUmVxdWVzdCBmcmFtZSBsZW5ndGggc2l6ZSA9ICVsZCBpbmNvcnJlY3RcbiIsCi0JCQkgIE1zZ0xlbikpOwotCQlyZXR1cm4gRkFMU0U7Ci0JfQotCS8qIHdlIHN1cHBvcnQgaW1tZWRpYXRlIEJBLiAqLwotCSoodTE2ICopICgmcEFkZEZyYW1lLT5CYVBhcm0pID0KLQkgICAgY3B1MmxlMTYoKih1MTYgKikgKCZwQWRkRnJhbWUtPkJhUGFybSkpOwotCXBBZGRGcmFtZS0+VGltZU91dFZhbHVlID0gY3B1MmxlMTYocEFkZEZyYW1lLT5UaW1lT3V0VmFsdWUpOwotCXBBZGRGcmFtZS0+QmFTdGFydFNlcS53b3JkID0gY3B1MmxlMTYocEFkZEZyYW1lLT5CYVN0YXJ0U2VxLndvcmQpOwotCi0JaWYgKHBBZGRGcmFtZS0+QmFQYXJtLkJBUG9saWN5ICE9IElNTUVEX0JBKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJICgiUGVlckFkZEJBUmVxQWN0aW9uU2FuaXR5OiBBRERCQSBSZXF1ZXN0IEJhIFBvbGljeVslZF0gbm90IHN1cHBvcnRcbiIsCi0JCQkgIHBBZGRGcmFtZS0+QmFQYXJtLkJBUG9saWN5KSk7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJICgiQUREQkEgUmVxdWVzdC4gdGlkPSV4LCBCdWZzaXplPSV4LCBBTVNEVVN1cHBvcnRlZD0leCBcbiIsCi0JCQkgIHBBZGRGcmFtZS0+QmFQYXJtLlRJRCwgcEFkZEZyYW1lLT5CYVBhcm0uQnVmU2l6ZSwKLQkJCSAgcEFkZEZyYW1lLT5CYVBhcm0uQU1TRFVTdXBwb3J0ZWQpKTsKLQkJcmV0dXJuIEZBTFNFOwotCX0KLQkvKiB3ZSBzdXBwb3J0IGltbWVkaWF0ZSBCQS4gKi8KLQlpZiAocEFkZEZyYW1lLT5CYVBhcm0uVElEICYgMHhmZmYwKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJICgiUGVlckFkZEJBUmVxQWN0aW9uU2FuaXR5OiBBRERCQSBSZXF1ZXN0IGluY29ycmVjdCBUSUQgPSAlZFxuIiwKLQkJCSAgcEFkZEZyYW1lLT5CYVBhcm0uVElEKSk7Ci0JCXJldHVybiBGQUxTRTsKLQl9Ci0JQ09QWV9NQUNfQUREUihwQWRkcjIsIHBGcmFtZS0+SGRyLkFkZHIyKTsKLQlyZXR1cm4gVFJVRTsKLX0KLQotQk9PTEVBTiBQZWVyQWRkQkFSc3BBY3Rpb25TYW5pdHkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCSB2b2lkICogcE1zZywgdW5zaWduZWQgbG9uZyBNc2dMZW4pCi17Ci0Jc3RydWN0IHJ0X2ZyYW1lX2FkZGJhX3JzcCAqIHBBZGRGcmFtZTsKLQotCXBBZGRGcmFtZSA9IChzdHJ1Y3QgcnRfZnJhbWVfYWRkYmFfcnNwICopIChwTXNnKTsKLQlpZiAoTXNnTGVuIDwgKHNpemVvZihzdHJ1Y3QgcnRfZnJhbWVfYWRkYmFfcnNwKSkpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkgKCJQZWVyQWRkQkFSc3BBY3Rpb25TYW5pdHk6IEFEREJBIFJlc3BvbnNlIGZyYW1lIGxlbmd0aCBzaXplID0gJWxkIGluY29ycmVjdFxuIiwKLQkJCSAgTXNnTGVuKSk7Ci0JCXJldHVybiBGQUxTRTsKLQl9Ci0JLyogd2Ugc3VwcG9ydCBpbW1lZGlhdGUgQkEuICovCi0JKih1MTYgKikgKCZwQWRkRnJhbWUtPkJhUGFybSkgPQotCSAgICBjcHUybGUxNigqKHUxNiAqKSAoJnBBZGRGcmFtZS0+QmFQYXJtKSk7Ci0JcEFkZEZyYW1lLT5TdGF0dXNDb2RlID0gY3B1MmxlMTYocEFkZEZyYW1lLT5TdGF0dXNDb2RlKTsKLQlwQWRkRnJhbWUtPlRpbWVPdXRWYWx1ZSA9IGNwdTJsZTE2KHBBZGRGcmFtZS0+VGltZU91dFZhbHVlKTsKLQotCWlmIChwQWRkRnJhbWUtPkJhUGFybS5CQVBvbGljeSAhPSBJTU1FRF9CQSkgewotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCSAoIlBlZXJBZGRCQVJlcUFjdGlvblNhbml0eTogQUREQkEgUmVzcG9uc2UgQmEgUG9saWN5WyVkXSBub3Qgc3VwcG9ydFxuIiwKLQkJCSAgcEFkZEZyYW1lLT5CYVBhcm0uQkFQb2xpY3kpKTsKLQkJcmV0dXJuIEZBTFNFOwotCX0KLQkvKiB3ZSBzdXBwb3J0IGltbWVkaWF0ZSBCQS4gKi8KLQlpZiAocEFkZEZyYW1lLT5CYVBhcm0uVElEICYgMHhmZmYwKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJICgiUGVlckFkZEJBUnNwQWN0aW9uU2FuaXR5OiBBRERCQSBSZXNwb25zZSBpbmNvcnJlY3QgVElEID0gJWRcbiIsCi0JCQkgIHBBZGRGcmFtZS0+QmFQYXJtLlRJRCkpOwotCQlyZXR1cm4gRkFMU0U7Ci0JfQotCXJldHVybiBUUlVFOwotCi19Ci0KLUJPT0xFQU4gUGVlckRlbEJBQWN0aW9uU2FuaXR5KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICAgIHU4IFdjaWQsIHZvaWQgKiBwTXNnLCB1bnNpZ25lZCBsb25nIE1zZ0xlbikKLXsKLQkvKnN0cnVjdCBydF9mcmFtZV84MDJfMTEgKiBwRnJhbWUgPSAoc3RydWN0IHJ0X2ZyYW1lXzgwMl8xMSAqKXBNc2c7ICovCi0Jc3RydWN0IHJ0X2ZyYW1lX2RlbGJhX3JlcSAqIHBEZWxGcmFtZTsKLQlpZiAoTXNnTGVuICE9IChzaXplb2Yoc3RydWN0IHJ0X2ZyYW1lX2RlbGJhX3JlcSkpKQotCQlyZXR1cm4gRkFMU0U7Ci0KLQlpZiAoV2NpZCA+PSBNQVhfTEVOX09GX01BQ19UQUJMRSkKLQkJcmV0dXJuIEZBTFNFOwotCi0JcERlbEZyYW1lID0gKHN0cnVjdCBydF9mcmFtZV9kZWxiYV9yZXEgKikgKHBNc2cpOwotCi0JKih1MTYgKikgKCZwRGVsRnJhbWUtPkRlbGJhUGFybSkgPQotCSAgICBjcHUybGUxNigqKHUxNiAqKSAoJnBEZWxGcmFtZS0+RGVsYmFQYXJtKSk7Ci0JcERlbEZyYW1lLT5SZWFzb25Db2RlID0gY3B1MmxlMTYocERlbEZyYW1lLT5SZWFzb25Db2RlKTsKLQotCWlmIChwRGVsRnJhbWUtPkRlbGJhUGFybS5USUQgJiAweGZmZjApCi0JCXJldHVybiBGQUxTRTsKLQotCXJldHVybiBUUlVFOwotfQotCi0vKgotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgRGVzY3JpcHRpb246Ci0gICAgICAgIE1MTUUgbWVzc2FnZSBzYW5pdHkgY2hlY2sKLSAgICBSZXR1cm46Ci0gICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKLQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotQk9PTEVBTiBQZWVyQmVhY29uQW5kUHJvYmVSc3BTYW5pdHkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB2b2lkICogTXNnLCB1bnNpZ25lZCBsb25nIE1zZ0xlbiwgdTggTXNnQ2hhbm5lbCwgdTggKnBBZGRyMiwgdTggKnBCc3NpZCwgY2hhciBTc2lkW10sIHU4ICogcFNzaWRMZW4sIHU4ICogcEJzc1R5cGUsIHUxNiAqIHBCZWFjb25QZXJpb2QsIHU4ICogcENoYW5uZWwsIHU4ICogcE5ld0NoYW5uZWwsIE9VVCBMQVJHRV9JTlRFR0VSICogcFRpbWVzdGFtcCwgc3RydWN0IHJ0X2NmX3Bhcm0gKiBwQ2ZQYXJtLCB1MTYgKiBwQXRpbVdpbiwgdTE2ICogcENhcGFiaWxpdHlJbmZvLCB1OCAqIHBFcnAsIHU4ICogcER0aW1Db3VudCwgdTggKiBwRHRpbVBlcmlvZCwgdTggKiBwQmNhc3RGbGFnLCB1OCAqIHBNZXNzYWdlVG9NZSwgdTggU3VwUmF0ZVtdLCB1OCAqIHBTdXBSYXRlTGVuLCB1OCBFeHRSYXRlW10sIHU4ICogcEV4dFJhdGVMZW4sIHU4ICogcENraXBGbGFnLCB1OCAqIHBBaXJvbmV0Q2VsbFBvd2VyTGltaXQsIHN0cnVjdCBydF9lZGNhX3Bhcm0gKnBFZGNhUGFybSwgc3RydWN0IHJ0X3Fic3NfbG9hZF9wYXJtICpwUWJzc0xvYWQsIHN0cnVjdCBydF9xb3NfY2FwYWJpbGl0eV9wYXJtICpwUW9zQ2FwYWJpbGl0eSwgdW5zaWduZWQgbG9uZyAqIHBSYWxpbmtJZSwgdTggKiBwSHRDYXBhYmlsaXR5TGVuLCB1OCAqIHBQcmVOSHRDYXBhYmlsaXR5TGVuLCBzdHJ1Y3QgcnRfaHRfY2FwYWJpbGl0eV9pZSAqIHBIdENhcGFiaWxpdHksIHU4ICogQWRkSHRJbmZvTGVuLCBzdHJ1Y3QgcnRfYWRkX2h0X2luZm9faWUgKiBBZGRIdEluZm8sIHU4ICogTmV3RXh0Q2hhbm5lbE9mZnNldCwJLyogSHQgZXh0ZW5zaW9uIGNoYW5uZWwgb2Zmc2V0KGFib3ZlIG9yIGJlbG93KSAqLwotCQkJCSAgICB1MTYgKiBMZW5ndGhWSUUsCi0JCQkJICAgIHN0cnVjdCBydF9uZGlzXzgwMl8xMV92YXJpYWJsZV9pZXMgKnBWSUUpCi17Ci0JdTggKlB0cjsKLQl1OCBUaW1MZW47Ci0Jc3RydWN0IHJ0X2ZyYW1lXzgwMl8xMSAqIHBGcmFtZTsKLQlzdHJ1Y3QgcnRfZWlkICogcEVpZDsKLQl1OCBTdWJUeXBlOwotCXU4IFNhbml0eTsKLQkvKnU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFQ1dNaW4sIEVDV01heDsgKi8KLQkvKk1BQ19DU1I5X1NUUlVDICAgICAgICAgICAgQ3NyOTsgKi8KLQl1bnNpZ25lZCBsb25nIExlbmd0aCA9IDA7Ci0KLQkvKiBGb3Igc29tZSAxMWEgQVAgd2hpY2ggZGlkbid0IGhhdmUgRFNfSUUsIHdlIHVzZSB0d28gY29uZGl0aW9ucyB0byBkZWNpZGUgdGhlIGNoYW5uZWwgKi8KLQkvKiAgICAgIDEuIElmIHRoZSBBUCBpcyAxMW4gZW5hYmxlZCwgdGhlbiBjaGVjayB0aGUgY29udHJvbCBjaGFubmVsLiAqLwotCS8qICAgICAgMi4gSWYgdGhlIEFQIGRpZG4ndCBoYXZlIGFueSBpbmZvIGFib3V0IGNoYW5uZWwsIHVzZSB0aGUgY2hhbm5lbCB3ZSByZWNlaXZlZCB0aGlzIGZyYW1lIGFzIHRoZSBjaGFubmVsLiAoTWF5IGluYWNjdXJhY3khKSAqLwotCXU4IEN0cmxDaGFubmVsID0gMDsKLQotCS8qIEFkZCBmb3IgMyBuZWNlc3NhcnkgRUlEIGZpZWxkIGNoZWNrICovCi0JU2FuaXR5ID0gMDsKLQotCSpwQXRpbVdpbiA9IDA7Ci0JKnBFcnAgPSAwOwotCSpwRHRpbUNvdW50ID0gMDsKLQkqcER0aW1QZXJpb2QgPSAwOwotCSpwQmNhc3RGbGFnID0gMDsKLQkqcE1lc3NhZ2VUb01lID0gMDsKLQkqcEV4dFJhdGVMZW4gPSAwOwotCSpwQ2tpcEZsYWcgPSAwOwkJLyogRGVmYXVsdCBvZiBDa2lwRmxhZyBpcyAwICovCi0JKnBBaXJvbmV0Q2VsbFBvd2VyTGltaXQgPSAweEZGOwkvKiBEZWZhdWx0IG9mIEFpcm9uZXRDZWxsUG93ZXJMaW1pdCBpcyAweEZGICovCi0JKkxlbmd0aFZJRSA9IDA7CQkvKiBTZXQgdGhlIGxlbmd0aCBvZiBWSUUgdG8gaW5pdCB2YWx1ZSAwICovCi0JKnBIdENhcGFiaWxpdHlMZW4gPSAwOwkvKiBTZXQgdGhlIGxlbmd0aCBvZiBWSUUgdG8gaW5pdCB2YWx1ZSAwICovCi0JaWYgKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpCi0JCSpwUHJlTkh0Q2FwYWJpbGl0eUxlbiA9IDA7CS8qIFNldCB0aGUgbGVuZ3RoIG9mIFZJRSB0byBpbml0IHZhbHVlIDAgKi8KLQkqQWRkSHRJbmZvTGVuID0gMDsJLyogU2V0IHRoZSBsZW5ndGggb2YgVklFIHRvIGluaXQgdmFsdWUgMCAqLwotCSpwUmFsaW5rSWUgPSAwOwotCSpwTmV3Q2hhbm5lbCA9IDA7Ci0JKk5ld0V4dENoYW5uZWxPZmZzZXQgPSAweGZmOwkvKkRlZmF1bHQgMHhmZiBtZWFucyBubyBzdWNoIElFICovCi0JcENmUGFybS0+YlZhbGlkID0gRkFMU0U7CS8qIGRlZmF1bHQ6IG5vIElFX0NGIGZvdW5kICovCi0JcFFic3NMb2FkLT5iVmFsaWQgPSBGQUxTRTsJLyogZGVmYXVsdDogbm8gSUVfUUJTU19MT0FEIGZvdW5kICovCi0JcEVkY2FQYXJtLT5iVmFsaWQgPSBGQUxTRTsJLyogZGVmYXVsdDogbm8gSUVfRURDQV9QQVJBTUVURVIgZm91bmQgKi8KLQlwUW9zQ2FwYWJpbGl0eS0+YlZhbGlkID0gRkFMU0U7CS8qIGRlZmF1bHQ6IG5vIElFX1FPU19DQVBBQklMSVRZIGZvdW5kICovCi0KLQlwRnJhbWUgPSAoc3RydWN0IHJ0X2ZyYW1lXzgwMl8xMSAqKSBNc2c7Ci0KLQkvKiBnZXQgc3VidHlwZSBmcm9tIGhlYWRlciAqLwotCVN1YlR5cGUgPSAodTgpcEZyYW1lLT5IZHIuRkMuU3ViVHlwZTsKLQotCS8qIGdldCBBZGRyMiBhbmQgQlNTSUQgZnJvbSBoZWFkZXIgKi8KLQlDT1BZX01BQ19BRERSKHBBZGRyMiwgcEZyYW1lLT5IZHIuQWRkcjIpOwotCUNPUFlfTUFDX0FERFIocEJzc2lkLCBwRnJhbWUtPkhkci5BZGRyMyk7Ci0KLQlQdHIgPSBwRnJhbWUtPk9jdGV0OwotCUxlbmd0aCArPSBMRU5HVEhfODAyXzExOwotCi0JLyogZ2V0IHRpbWVzdGFtcCBmcm9tIHBheWxvYWQgYW5kIGFkdmFuY2UgdGhlIHBvaW50ZXIgKi8KLQlOZGlzTW92ZU1lbW9yeShwVGltZXN0YW1wLCBQdHIsIFRJTUVTVEFNUF9MRU4pOwotCi0JcFRpbWVzdGFtcC0+dS5Mb3dQYXJ0ID0gY3B1MmxlMzIocFRpbWVzdGFtcC0+dS5Mb3dQYXJ0KTsKLQlwVGltZXN0YW1wLT51LkhpZ2hQYXJ0ID0gY3B1MmxlMzIocFRpbWVzdGFtcC0+dS5IaWdoUGFydCk7Ci0KLQlQdHIgKz0gVElNRVNUQU1QX0xFTjsKLQlMZW5ndGggKz0gVElNRVNUQU1QX0xFTjsKLQotCS8qIGdldCBiZWFjb24gaW50ZXJ2YWwgZnJvbSBwYXlsb2FkIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVyICovCi0JTmRpc01vdmVNZW1vcnkocEJlYWNvblBlcmlvZCwgUHRyLCAyKTsKLQlQdHIgKz0gMjsKLQlMZW5ndGggKz0gMjsKLQotCS8qIGdldCBjYXBhYmlsaXR5IGluZm8gZnJvbSBwYXlsb2FkIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVyICovCi0JTmRpc01vdmVNZW1vcnkocENhcGFiaWxpdHlJbmZvLCBQdHIsIDIpOwotCVB0ciArPSAyOwotCUxlbmd0aCArPSAyOwotCi0JaWYgKENBUF9JU19FU1NfT04oKnBDYXBhYmlsaXR5SW5mbykpCi0JCSpwQnNzVHlwZSA9IEJTU19JTkZSQTsKLQllbHNlCi0JCSpwQnNzVHlwZSA9IEJTU19BREhPQzsKLQotCXBFaWQgPSAoc3RydWN0IHJ0X2VpZCAqKSBQdHI7Ci0KLQkvKiBnZXQgdmFyaWFibGUgZmllbGRzIGZyb20gcGF5bG9hZCBhbmQgYWR2YW5jZSB0aGUgcG9pbnRlciAqLwotCXdoaWxlICgoTGVuZ3RoICsgMiArIHBFaWQtPkxlbikgPD0gTXNnTGVuKSB7Ci0JCS8qICovCi0JCS8qIFNlY3VyZSBjb3B5IFZJRSB0byBWYXJJRVtNQVhfVklFX0xFTl0gZGlkbid0IG92ZXJmbG93LiAqLwotCQkvKiAqLwotCQlpZiAoKCpMZW5ndGhWSUUgKyBwRWlkLT5MZW4gKyAyKSA+PSBNQVhfVklFX0xFTikgewotCQkJREJHUFJJTlQoUlRfREVCVUdfV0FSTiwKLQkJCQkgKCJQZWVyQmVhY29uQW5kUHJvYmVSc3BTYW5pdHkgLSBWYXJpYWJsZSBJRXMgb3V0IG9mIHJlc291cmNlIFtsZW4oPSVkKSA+IE1BWF9WSUVfTEVOKD0lZCldXG4iLAotCQkJCSAgKCpMZW5ndGhWSUUgKyBwRWlkLT5MZW4gKyAyKSwgTUFYX1ZJRV9MRU4pKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJc3dpdGNoIChwRWlkLT5FaWQpIHsKLQkJY2FzZSBJRV9TU0lEOgotCQkJLyogQWxyZWFkeSBoYXMgb25lIFNTSUQgRUlEIGluIHRoaXMgYmVhY29uLCBpZ25vcmUgdGhlIHNlY29uZCBvbmUgKi8KLQkJCWlmIChTYW5pdHkgJiAweDEpCi0JCQkJYnJlYWs7Ci0JCQlpZiAocEVpZC0+TGVuIDw9IE1BWF9MRU5fT0ZfU1NJRCkgewotCQkJCU5kaXNNb3ZlTWVtb3J5KFNzaWQsIHBFaWQtPk9jdGV0LCBwRWlkLT5MZW4pOwotCQkJCSpwU3NpZExlbiA9IHBFaWQtPkxlbjsKLQkJCQlTYW5pdHkgfD0gMHgxOwotCQkJfSBlbHNlIHsKLQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkJICgiUGVlckJlYWNvbkFuZFByb2JlUnNwU2FuaXR5IC0gd3JvbmcgSUVfU1NJRCAobGVuPSVkKVxuIiwKLQkJCQkJICBwRWlkLT5MZW4pKTsKLQkJCQlyZXR1cm4gRkFMU0U7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQljYXNlIElFX1NVUFBfUkFURVM6Ci0JCQlpZiAocEVpZC0+TGVuIDw9IE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTKSB7Ci0JCQkJU2FuaXR5IHw9IDB4MjsKLQkJCQlOZGlzTW92ZU1lbW9yeShTdXBSYXRlLCBwRWlkLT5PY3RldCwgcEVpZC0+TGVuKTsKLQkJCQkqcFN1cFJhdGVMZW4gPSBwRWlkLT5MZW47Ci0KLQkJCQkvKiBUT0RPOiAyMDA0LTA5LTE0IG5vdCBhIGdvb2QgZGVzaWduIGhlcmUsIGNhdXNlIGl0IGV4Y2x1ZGUgZXh0cmEgcmF0ZXMgKi8KLQkJCQkvKiBmcm9tIFNjYW5UYWIuIFdlIHNob3VsZCByZXBvcnQgYXMgaXMuIEFuZCBmaWx0ZXIgb3V0IHVuc3VwcG9ydGVkICovCi0JCQkJLyogcmF0ZXMgaW4gTWxtZUF1eC4gKi8KLQkJCQkvKiBDaGVjayBhZ2FpbnN0IHRoZSBzdXBwb3J0ZWQgcmF0ZXMgKi8KLQkJCQkvKiBSVE1QQ2hlY2tSYXRlcyhwQWQsIFN1cFJhdGUsIHBTdXBSYXRlTGVuKTsgKi8KLQkJCX0gZWxzZSB7Ci0JCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJCSAoIlBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eSAtIHdyb25nIElFX1NVUFBfUkFURVMgKGxlbj0lZClcbiIsCi0JCQkJCSAgcEVpZC0+TGVuKSk7Ci0JCQkJcmV0dXJuIEZBTFNFOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBJRV9IVF9DQVA6Ci0JCQlpZiAocEVpZC0+TGVuID49IFNJWkVfSFRfQ0FQX0lFKQkvKk5vdGU6IGFsbG93IGV4dGVuc2lvbiEgKi8KLQkJCXsKLQkJCQlOZGlzTW92ZU1lbW9yeShwSHRDYXBhYmlsaXR5LCBwRWlkLT5PY3RldCwKLQkJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcnRfaHRfY2FwYWJpbGl0eV9pZSkpOwotCQkJCSpwSHRDYXBhYmlsaXR5TGVuID0gU0laRV9IVF9DQVBfSUU7CS8qIE5ub3cgd2Ugb25seSBzdXBwb3J0IDI2IGJ5dGVzLiAqLwotCi0JCQkJKih1MTYgKikgKCZwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8pID0KLQkJCQkgICAgY3B1MmxlMTYoKih1MTYgKikKLQkJCQkJICAgICAoJnBIdENhcGFiaWxpdHktPkh0Q2FwSW5mbykpOwotCQkJCSoodTE2ICopICgmcEh0Q2FwYWJpbGl0eS0+RXh0SHRDYXBJbmZvKSA9Ci0JCQkJICAgIGNwdTJsZTE2KCoodTE2ICopCi0JCQkJCSAgICAgKCZwSHRDYXBhYmlsaXR5LT5FeHRIdENhcEluZm8pKTsKLQotCQkJCXsKLQkJCQkJKnBQcmVOSHRDYXBhYmlsaXR5TGVuID0gMDsJLyogTm5vdyB3ZSBvbmx5IHN1cHBvcnQgMjYgYnl0ZXMuICovCi0KLQkJCQkJUHRyID0gKHU4ICopcFZJRTsKLQkJCQkJTmRpc01vdmVNZW1vcnkoUHRyICsgKkxlbmd0aFZJRSwKLQkJCQkJCSAgICAgICAmcEVpZC0+RWlkLAotCQkJCQkJICAgICAgIHBFaWQtPkxlbiArIDIpOwotCQkJCQkqTGVuZ3RoVklFICs9IChwRWlkLT5MZW4gKyAyKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCURCR1BSSU5UKFJUX0RFQlVHX1dBUk4sCi0JCQkJCSAoIlBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eSAtIHdyb25nIElFX0hUX0NBUC4gcEVpZC0+TGVuID0gJWRcbiIsCi0JCQkJCSAgcEVpZC0+TGVuKSk7Ci0JCQl9Ci0KLQkJCWJyZWFrOwotCQljYXNlIElFX0FERF9IVDoKLQkJCWlmIChwRWlkLT5MZW4gPj0gc2l6ZW9mKHN0cnVjdCBydF9hZGRfaHRfaW5mb19pZSkpIHsKLQkJCQkvKiBUaGlzIElFIGFsbG93cyBleHRlbnNpb24sIGJ1dCB3ZSBjYW4gaWdub3JlIGV4dHJhIGJ5dGVzIGJleW9uZCBvdXIga25vd2xlZGdlICwgc28gb25seSAqLwotCQkJCS8qIGNvcHkgZmlyc3Qgc2l6ZW9mKHN0cnVjdCBydF9hZGRfaHRfaW5mb19pZSkgKi8KLQkJCQlOZGlzTW92ZU1lbW9yeShBZGRIdEluZm8sIHBFaWQtPk9jdGV0LAotCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBydF9hZGRfaHRfaW5mb19pZSkpOwotCQkJCSpBZGRIdEluZm9MZW4gPSBTSVpFX0FERF9IVF9JTkZPX0lFOwotCi0JCQkJQ3RybENoYW5uZWwgPSBBZGRIdEluZm8tPkNvbnRyb2xDaGFuOwotCi0JCQkJKih1MTYgKikgKCZBZGRIdEluZm8tPkFkZEh0SW5mbzIpID0KLQkJCQkgICAgY3B1MmxlMTYoKih1MTYgKikKLQkJCQkJICAgICAoJkFkZEh0SW5mby0+QWRkSHRJbmZvMikpOwotCQkJCSoodTE2ICopICgmQWRkSHRJbmZvLT5BZGRIdEluZm8zKSA9Ci0JCQkJICAgIGNwdTJsZTE2KCoodTE2ICopCi0JCQkJCSAgICAgKCZBZGRIdEluZm8tPkFkZEh0SW5mbzMpKTsKLQotCQkJCXsKLQkJCQkJUHRyID0gKHU4ICopcFZJRTsKLQkJCQkJTmRpc01vdmVNZW1vcnkoUHRyICsgKkxlbmd0aFZJRSwKLQkJCQkJCSAgICAgICAmcEVpZC0+RWlkLAotCQkJCQkJICAgICAgIHBFaWQtPkxlbiArIDIpOwotCQkJCQkqTGVuZ3RoVklFICs9IChwRWlkLT5MZW4gKyAyKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCURCR1BSSU5UKFJUX0RFQlVHX1dBUk4sCi0JCQkJCSAoIlBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eSAtIHdyb25nIElFX0FERF9IVC4gXG4iKSk7Ci0JCQl9Ci0KLQkJCWJyZWFrOwotCQljYXNlIElFX1NFQ09OREFSWV9DSF9PRkZTRVQ6Ci0JCQlpZiAocEVpZC0+TGVuID09IDEpIHsKLQkJCQkqTmV3RXh0Q2hhbm5lbE9mZnNldCA9IHBFaWQtPk9jdGV0WzBdOwotCQkJfSBlbHNlIHsKLQkJCQlEQkdQUklOVChSVF9ERUJVR19XQVJOLAotCQkJCQkgKCJQZWVyQmVhY29uQW5kUHJvYmVSc3BTYW5pdHkgLSB3cm9uZyBJRV9TRUNPTkRBUllfQ0hfT0ZGU0VULiBcbiIpKTsKLQkJCX0KLQotCQkJYnJlYWs7Ci0JCWNhc2UgSUVfRkhfUEFSTToKLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAoIlBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eShJRV9GSF9QQVJNKSBcbiIpKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgSUVfRFNfUEFSTToKLQkJCWlmIChwRWlkLT5MZW4gPT0gMSkgewotCQkJCSpwQ2hhbm5lbCA9ICpwRWlkLT5PY3RldDsKLQotCQkJCXsKLQkJCQkJaWYgKENoYW5uZWxTYW5pdHkocEFkLCAqcENoYW5uZWwpID09IDApIHsKLQotCQkJCQkJcmV0dXJuIEZBTFNFOwotCQkJCQl9Ci0JCQkJfQotCi0JCQkJU2FuaXR5IHw9IDB4NDsKLQkJCX0gZWxzZSB7Ci0JCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJCSAoIlBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eSAtIHdyb25nIElFX0RTX1BBUk0gKGxlbj0lZClcbiIsCi0JCQkJCSAgcEVpZC0+TGVuKSk7Ci0JCQkJcmV0dXJuIEZBTFNFOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBJRV9DRl9QQVJNOgotCQkJaWYgKHBFaWQtPkxlbiA9PSA2KSB7Ci0JCQkJcENmUGFybS0+YlZhbGlkID0gVFJVRTsKLQkJCQlwQ2ZQYXJtLT5DZnBDb3VudCA9IHBFaWQtPk9jdGV0WzBdOwotCQkJCXBDZlBhcm0tPkNmcFBlcmlvZCA9IHBFaWQtPk9jdGV0WzFdOwotCQkJCXBDZlBhcm0tPkNmcE1heER1cmF0aW9uID0KLQkJCQkgICAgcEVpZC0+T2N0ZXRbMl0gKyAyNTYgKiBwRWlkLT5PY3RldFszXTsKLQkJCQlwQ2ZQYXJtLT5DZnBEdXJSZW1haW5pbmcgPQotCQkJCSAgICBwRWlkLT5PY3RldFs0XSArIDI1NiAqIHBFaWQtPk9jdGV0WzVdOwotCQkJfSBlbHNlIHsKLQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkJICgiUGVlckJlYWNvbkFuZFByb2JlUnNwU2FuaXR5IC0gd3JvbmcgSUVfQ0ZfUEFSTVxuIikpOwotCQkJCXJldHVybiBGQUxTRTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgSUVfSUJTU19QQVJNOgotCQkJaWYgKHBFaWQtPkxlbiA9PSAyKSB7Ci0JCQkJTmRpc01vdmVNZW1vcnkocEF0aW1XaW4sIHBFaWQtPk9jdGV0LAotCQkJCQkgICAgICAgcEVpZC0+TGVuKTsKLQkJCX0gZWxzZSB7Ci0JCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJCSAoIlBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eSAtIHdyb25nIElFX0lCU1NfUEFSTVxuIikpOwotCQkJCXJldHVybiBGQUxTRTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgSUVfVElNOgotCQkJaWYgKElORlJBX09OKHBBZCkgJiYgU3ViVHlwZSA9PSBTVUJUWVBFX0JFQUNPTikgewotCQkJCUdldFRpbUJpdCgoY2hhciAqKXBFaWQsIHBBZC0+U3RhQWN0aXZlLkFpZCwKLQkJCQkJICAmVGltTGVuLCBwQmNhc3RGbGFnLCBwRHRpbUNvdW50LAotCQkJCQkgIHBEdGltUGVyaW9kLCBwTWVzc2FnZVRvTWUpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgSUVfQ0hBTk5FTF9TV0lUQ0hfQU5OT1VOQ0VNRU5UOgotCQkJaWYgKHBFaWQtPkxlbiA9PSAzKSB7Ci0JCQkJKnBOZXdDaGFubmVsID0gcEVpZC0+T2N0ZXRbMV07CS8qZXh0cmFjdCBuZXcgY2hhbm5lbCBudW1iZXIgKi8KLQkJCX0KLQkJCWJyZWFrOwotCi0JCQkvKiBOZXcgZm9yIFdQQSAqLwotCQkJLyogQ0NYIHYyIGhhcyB0aGUgc2FtZSBJRSwgd2UgbmVlZCB0byBwYXJzZSB0aGF0IHRvbyAqLwotCQkJLyogV2lmaSBXTU0gdXNlIHRoZSBzYW1lIElFIHZhbGUsIG5lZWQgdG8gcGFyc2UgdGhhdCB0b28gKi8KLQkJCS8qIGNhc2UgSUVfV1BBOiAqLwotCQljYXNlIElFX1ZFTkRPUl9TUEVDSUZJQzoKLQkJCS8qIENoZWNrIEJyb2FkY29tL0F0aGVyb3MgODAyLjExbiBPVUkgdmVyc2lvbiwgZm9yIEhUIENhcGFiaWxpdHkgSUUuICovCi0JCQkvKiBUaGlzIEhUIElFIGlzIGJlZm9yZSBJRUVFIGRyYWZ0IHNldCBIVCBJRSB2YWx1ZS4yMDA2LTA5LTI4IGJ5IEphbi4gKi8KLQkJCS8qaWYgKE5kaXNFcXVhbE1lbW9yeShwRWlkLT5PY3RldCwgQlJPQURDT01fT1VJLCAzKSAmJiAocEVpZC0+TGVuID49IDQpKQotCQkJICAgewotCQkJICAgaWYgKChwRWlkLT5PY3RldFszXSA9PSBPVUlfQlJPQURDT01fSFQpICYmIChwRWlkLT5MZW4gPj0gMzApKQotCQkJICAgewotCQkJICAgewotCQkJICAgTmRpc01vdmVNZW1vcnkocEh0Q2FwYWJpbGl0eSwgJnBFaWQtPk9jdGV0WzRdLCBzaXplb2Yoc3RydWN0IHJ0X2h0X2NhcGFiaWxpdHlfaWUpKTsKLQkJCSAgICpwSHRDYXBhYmlsaXR5TGVuID0gU0laRV9IVF9DQVBfSUU7ICAvLyBObm93IHdlIG9ubHkgc3VwcG9ydCAyNiBieXRlcy4KLQkJCSAgIH0KLQkJCSAgIH0KLQkJCSAgIGlmICgocEVpZC0+T2N0ZXRbM10gPT0gT1VJX0JST0FEQ09NX0hUKSAmJiAocEVpZC0+TGVuID49IDI2KSkKLQkJCSAgIHsKLQkJCSAgIHsKLQkJCSAgIE5kaXNNb3ZlTWVtb3J5KEFkZEh0SW5mbywgJnBFaWQtPk9jdGV0WzRdLCBzaXplb2Yoc3RydWN0IHJ0X2FkZF9odF9pbmZvX2llKSk7Ci0JCQkgICAqQWRkSHRJbmZvTGVuID0gU0laRV9BRERfSFRfSU5GT19JRTsgLy8gTm5vdyB3ZSBvbmx5IHN1cHBvcnQgMjYgYnl0ZXMuCi0JCQkgICB9Ci0JCQkgICB9Ci0JCQkgICB9Ci0JCQkgKi8KLQkJCS8qIENoZWNrIHRoZSBPVUkgdmVyc2lvbiwgZmlsdGVyIG91dCBub24tc3RhbmRhcmQgdXNhZ2UgKi8KLQkJCWlmIChOZGlzRXF1YWxNZW1vcnkocEVpZC0+T2N0ZXQsIFJBTElOS19PVUksIDMpCi0JCQkgICAgJiYgKHBFaWQtPkxlbiA9PSA3KSkgewotCQkJCS8qKnBSYWxpbmtJZSA9IHBFaWQtPk9jdGV0WzNdOyAqLwotCQkJCWlmIChwRWlkLT5PY3RldFszXSAhPSAwKQotCQkJCQkqcFJhbGlua0llID0gcEVpZC0+T2N0ZXRbM107Ci0JCQkJZWxzZQotCQkJCQkqcFJhbGlua0llID0gMHhmMDAwMDAwMDsJLyogU2V0IHRvIG5vbi16ZXJvIHZhbHVlIChjYW4ndCBzZXQgYml0MC0yKSB0byByZXByZXNlbnQgdGhpcyBpcyBSYWxpbmsgQ2hpcC4gU28gYXQgbGlua3VwLCB3ZSB3aWxsIHNldCByYWxpbmtjaGlwIGZsYWcuICovCi0JCQl9Ci0JCQkvKiBUaGlzIEhUIElFIGlzIGJlZm9yZSBJRUVFIGRyYWZ0IHNldCBIVCBJRSB2YWx1ZS4yMDA2LTA5LTI4IGJ5IEphbi4gKi8KLQotCQkJLyogT3RoZXIgdmVuZG9ycyBoYWQgcHJvZHVjdGlvbiBiZWZvcmUgSUVfSFRfQ0FQIHZhbHVlIGlzIGFzc2lnbmVkLiBUbyBiYWNrd2FyZCBzdXBwb3J0IHRob3NlIG9sZC1maXJtd2FyZSBBUCwgKi8KLQkJCS8qIENoZWNrIGJyb2FkY29tLWRlZmllbmQgcHJlLTgwMi4xMW5EMS4wIE9VSSBmb3IgSFQgcmVsYXRlZCBJRSwgaW5jbHVkaW5nIEhUIENhcGF0aWxpdGllcyBJRSBhbmQgSFQgSW5mb3JtYXRpb24gSUUgKi8KLQkJCWVsc2UgaWYgKCgqcEh0Q2FwYWJpbGl0eUxlbiA9PSAwKQotCQkJCSAmJiBOZGlzRXF1YWxNZW1vcnkocEVpZC0+T2N0ZXQsIFBSRV9OX0hUX09VSSwKLQkJCQkJCSAgICAzKSAmJiAocEVpZC0+TGVuID49IDQpCi0JCQkJICYmIChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKSkgewotCQkJCWlmICgocEVpZC0+T2N0ZXRbM10gPT0gT1VJX1BSRU5fSFRfQ0FQKQotCQkJCSAgICAmJiAocEVpZC0+TGVuID49IDMwKQotCQkJCSAgICAmJiAoKnBIdENhcGFiaWxpdHlMZW4gPT0gMCkpIHsKLQkJCQkJTmRpc01vdmVNZW1vcnkocEh0Q2FwYWJpbGl0eSwKLQkJCQkJCSAgICAgICAmcEVpZC0+T2N0ZXRbNF0sCi0JCQkJCQkgICAgICAgc2l6ZW9mCi0JCQkJCQkgICAgICAgKHN0cnVjdCBydF9odF9jYXBhYmlsaXR5X2llKSk7Ci0JCQkJCSpwUHJlTkh0Q2FwYWJpbGl0eUxlbiA9IFNJWkVfSFRfQ0FQX0lFOwotCQkJCX0KLQotCQkJCWlmICgocEVpZC0+T2N0ZXRbM10gPT0gT1VJX1BSRU5fQUREX0hUKQotCQkJCSAgICAmJiAocEVpZC0+TGVuID49IDI2KSkgewotCQkJCQlOZGlzTW92ZU1lbW9yeShBZGRIdEluZm8sCi0JCQkJCQkgICAgICAgJnBFaWQtPk9jdGV0WzRdLAotCQkJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcnRfYWRkX2h0X2luZm9faWUpKTsKLQkJCQkJKkFkZEh0SW5mb0xlbiA9IFNJWkVfQUREX0hUX0lORk9fSUU7Ci0JCQkJfQotCQkJfSBlbHNlIGlmIChOZGlzRXF1YWxNZW1vcnkocEVpZC0+T2N0ZXQsIFdQQV9PVUksIDQpKSB7Ci0JCQkJLyogQ29weSB0byBwVklFIHdoaWNoIHdpbGwgcmVwb3J0IHRvIG1pY3Jvc29mdCBic3NpZCBsaXN0LiAqLwotCQkJCVB0ciA9ICh1OCAqKXBWSUU7Ci0JCQkJTmRpc01vdmVNZW1vcnkoUHRyICsgKkxlbmd0aFZJRSwgJnBFaWQtPkVpZCwKLQkJCQkJICAgICAgIHBFaWQtPkxlbiArIDIpOwotCQkJCSpMZW5ndGhWSUUgKz0gKHBFaWQtPkxlbiArIDIpOwotCQkJfSBlbHNlCi0JCQkgICAgaWYgKE5kaXNFcXVhbE1lbW9yeShwRWlkLT5PY3RldCwgV01FX1BBUk1fRUxFTSwgNikKLQkJCQkmJiAocEVpZC0+TGVuID09IDI0KSkgewotCQkJCXU4ICpwdHI7Ci0JCQkJaW50IGk7Ci0KLQkJCQkvKiBwYXJzaW5nIEVEQ0EgcGFyYW1ldGVycyAqLwotCQkJCXBFZGNhUGFybS0+YlZhbGlkID0gVFJVRTsKLQkJCQlwRWRjYVBhcm0tPmJRQWNrID0gRkFMU0U7CS8qIHBFaWQtPk9jdGV0WzBdICYgMHgxMDsgKi8KLQkJCQlwRWRjYVBhcm0tPmJRdWV1ZVJlcXVlc3QgPSBGQUxTRTsJLyogcEVpZC0+T2N0ZXRbMF0gJiAweDIwOyAqLwotCQkJCXBFZGNhUGFybS0+YlR4b3BSZXF1ZXN0ID0gRkFMU0U7CS8qIHBFaWQtPk9jdGV0WzBdICYgMHg0MDsgKi8KLQkJCQlwRWRjYVBhcm0tPkVkY2FVcGRhdGVDb3VudCA9Ci0JCQkJICAgIHBFaWQtPk9jdGV0WzZdICYgMHgwZjsKLQkJCQlwRWRjYVBhcm0tPmJBUFNEQ2FwYWJsZSA9Ci0JCQkJICAgIChwRWlkLT5PY3RldFs2XSAmIDB4ODApID8gMSA6IDA7Ci0JCQkJcHRyID0gJnBFaWQtPk9jdGV0WzhdOwotCQkJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJCQkJdTggYWNpID0gKCpwdHIgJiAweDYwKSA+PiA1OwkvKiBiNX42IGlzIEFDIElOREVYICovCi0JCQkJCXBFZGNhUGFybS0+YkFDTVthY2ldID0gKCgoKnB0cikgJiAweDEwKSA9PSAweDEwKTsJLyogYjUgaXMgQUNNICovCi0JCQkJCXBFZGNhUGFybS0+QWlmc25bYWNpXSA9ICgqcHRyKSAmIDB4MGY7CS8qIGIwfjMgaXMgQUlGU04gKi8KLQkJCQkJcEVkY2FQYXJtLT5Dd21pblthY2ldID0gKihwdHIgKyAxKSAmIDB4MGY7CS8qIGIwfjQgaXMgQ3dtaW4gKi8KLQkJCQkJcEVkY2FQYXJtLT5Dd21heFthY2ldID0gKihwdHIgKyAxKSA+PiA0OwkvKiBiNX44IGlzIEN3bWF4ICovCi0JCQkJCXBFZGNhUGFybS0+VHhvcFthY2ldID0gKihwdHIgKyAyKSArIDI1NiAqICgqKHB0ciArIDMpKTsJLyogaW4gdW5pdCBvZiAzMi11cyAqLwotCQkJCQlwdHIgKz0gNDsJLyogcG9pbnQgdG8gbmV4dCBBQyAqLwotCQkJCX0KLQkJCX0gZWxzZQotCQkJICAgIGlmIChOZGlzRXF1YWxNZW1vcnkocEVpZC0+T2N0ZXQsIFdNRV9JTkZPX0VMRU0sIDYpCi0JCQkJJiYgKHBFaWQtPkxlbiA9PSA3KSkgewotCQkJCS8qIHBhcnNpbmcgRURDQSBwYXJhbWV0ZXJzICovCi0JCQkJcEVkY2FQYXJtLT5iVmFsaWQgPSBUUlVFOwotCQkJCXBFZGNhUGFybS0+YlFBY2sgPSBGQUxTRTsJLyogcEVpZC0+T2N0ZXRbMF0gJiAweDEwOyAqLwotCQkJCXBFZGNhUGFybS0+YlF1ZXVlUmVxdWVzdCA9IEZBTFNFOwkvKiBwRWlkLT5PY3RldFswXSAmIDB4MjA7ICovCi0JCQkJcEVkY2FQYXJtLT5iVHhvcFJlcXVlc3QgPSBGQUxTRTsJLyogcEVpZC0+T2N0ZXRbMF0gJiAweDQwOyAqLwotCQkJCXBFZGNhUGFybS0+RWRjYVVwZGF0ZUNvdW50ID0KLQkJCQkgICAgcEVpZC0+T2N0ZXRbNl0gJiAweDBmOwotCQkJCXBFZGNhUGFybS0+YkFQU0RDYXBhYmxlID0KLQkJCQkgICAgKHBFaWQtPk9jdGV0WzZdICYgMHg4MCkgPyAxIDogMDsKLQotCQkJCS8qIHVzZSBkZWZhdWx0IEVEQ0EgcGFyYW1ldGVyICovCi0JCQkJcEVkY2FQYXJtLT5iQUNNW1FJRF9BQ19CRV0gPSAwOwotCQkJCXBFZGNhUGFybS0+QWlmc25bUUlEX0FDX0JFXSA9IDM7Ci0JCQkJcEVkY2FQYXJtLT5Dd21pbltRSURfQUNfQkVdID0gQ1dfTUlOX0lOX0JJVFM7Ci0JCQkJcEVkY2FQYXJtLT5Dd21heFtRSURfQUNfQkVdID0gQ1dfTUFYX0lOX0JJVFM7Ci0JCQkJcEVkY2FQYXJtLT5UeG9wW1FJRF9BQ19CRV0gPSAwOwotCi0JCQkJcEVkY2FQYXJtLT5iQUNNW1FJRF9BQ19CS10gPSAwOwotCQkJCXBFZGNhUGFybS0+QWlmc25bUUlEX0FDX0JLXSA9IDc7Ci0JCQkJcEVkY2FQYXJtLT5Dd21pbltRSURfQUNfQktdID0gQ1dfTUlOX0lOX0JJVFM7Ci0JCQkJcEVkY2FQYXJtLT5Dd21heFtRSURfQUNfQktdID0gQ1dfTUFYX0lOX0JJVFM7Ci0JCQkJcEVkY2FQYXJtLT5UeG9wW1FJRF9BQ19CS10gPSAwOwotCi0JCQkJcEVkY2FQYXJtLT5iQUNNW1FJRF9BQ19WSV0gPSAwOwotCQkJCXBFZGNhUGFybS0+QWlmc25bUUlEX0FDX1ZJXSA9IDI7Ci0JCQkJcEVkY2FQYXJtLT5Dd21pbltRSURfQUNfVkldID0KLQkJCQkgICAgQ1dfTUlOX0lOX0JJVFMgLSAxOwotCQkJCXBFZGNhUGFybS0+Q3dtYXhbUUlEX0FDX1ZJXSA9IENXX01BWF9JTl9CSVRTOwotCQkJCXBFZGNhUGFybS0+VHhvcFtRSURfQUNfVkldID0gOTY7CS8qIEFDX1ZJOiA5NiozMnVzIH49IDNtcyAqLwotCi0JCQkJcEVkY2FQYXJtLT5iQUNNW1FJRF9BQ19WT10gPSAwOwotCQkJCXBFZGNhUGFybS0+QWlmc25bUUlEX0FDX1ZPXSA9IDI7Ci0JCQkJcEVkY2FQYXJtLT5Dd21pbltRSURfQUNfVk9dID0KLQkJCQkgICAgQ1dfTUlOX0lOX0JJVFMgLSAyOwotCQkJCXBFZGNhUGFybS0+Q3dtYXhbUUlEX0FDX1ZPXSA9Ci0JCQkJICAgIENXX01BWF9JTl9CSVRTIC0gMTsKLQkJCQlwRWRjYVBhcm0tPlR4b3BbUUlEX0FDX1ZPXSA9IDQ4OwkvKiBBQ19WTzogNDgqMzJ1cyB+PSAxLjVtcyAqLwotCQkJfQotCi0JCQlicmVhazsKLQotCQljYXNlIElFX0VYVF9TVVBQX1JBVEVTOgotCQkJaWYgKHBFaWQtPkxlbiA8PSBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUykgewotCQkJCU5kaXNNb3ZlTWVtb3J5KEV4dFJhdGUsIHBFaWQtPk9jdGV0LCBwRWlkLT5MZW4pOwotCQkJCSpwRXh0UmF0ZUxlbiA9IHBFaWQtPkxlbjsKLQotCQkJCS8qIFRPRE86IDIwMDQtMDktMTQgbm90IGEgZ29vZCBkZXNpZ24gaGVyZSwgY2F1c2UgaXQgZXhjbHVkZSBleHRyYSByYXRlcyAqLwotCQkJCS8qIGZyb20gU2NhblRhYi4gV2Ugc2hvdWxkIHJlcG9ydCBhcyBpcy4gQW5kIGZpbHRlciBvdXQgdW5zdXBwb3J0ZWQgKi8KLQkJCQkvKiByYXRlcyBpbiBNbG1lQXV4LiAqLwotCQkJCS8qIENoZWNrIGFnYWluc3QgdGhlIHN1cHBvcnRlZCByYXRlcyAqLwotCQkJCS8qIFJUTVBDaGVja1JhdGVzKHBBZCwgRXh0UmF0ZSwgcEV4dFJhdGVMZW4pOyAqLwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBJRV9FUlA6Ci0JCQlpZiAocEVpZC0+TGVuID09IDEpIHsKLQkJCQkqcEVycCA9ICh1OClwRWlkLT5PY3RldFswXTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgSUVfQUlST05FVF9DS0lQOgotCQkJLyogMC4gQ2hlY2sgQWlyb25ldCBJRSBsZW5ndGgsIGl0IG11c3QgYmUgbGFyZ2VyIG9yIGVxdWFsIHRvIDI4ICovCi0JCQkvKiBDaXNjbyBBUDM1MCB1c2VkIGxlbmd0aCBhcyAyOCAqLwotCQkJLyogQ2lzY28gQVAxMlhYIHVzZWQgbGVuZ3RoIGFzIDMwICovCi0JCQlpZiAocEVpZC0+TGVuIDwgKENLSVBfTkVHT1RJQVRJT05fTEVOR1RIIC0gMikpCi0JCQkJYnJlYWs7Ci0KLQkJCS8qIDEuIENvcHkgQ0tJUCBmbGFnIGJ5dGUgdG8gYnVmZmVyIGZvciBwcm9jZXNzICovCi0JCQkqcENraXBGbGFnID0gKihwRWlkLT5PY3RldCArIDgpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBJRV9BUF9UWF9QT1dFUjoKLQkJCS8qIEFQIENvbnRyb2wgb2YgQ2xpZW50IFRyYW5zbWl0IFBvd2VyICovCi0JCQkvKjAuIENoZWNrIEFpcm9uZXQgSUUgbGVuZ3RoLCBpdCBtdXN0IGJlIDYgKi8KLQkJCWlmIChwRWlkLT5MZW4gIT0gMHgwNikKLQkJCQlicmVhazsKLQotCQkJLyogR2V0IGNlbGwgcG93ZXIgbGltaXQgaW4gZEJtICovCi0JCQlpZiAoTmRpc0VxdWFsTWVtb3J5KHBFaWQtPk9jdGV0LCBDSVNDT19PVUksIDMpID09IDEpCi0JCQkJKnBBaXJvbmV0Q2VsbFBvd2VyTGltaXQgPSAqKHBFaWQtPk9jdGV0ICsgNCk7Ci0JCQlicmVhazsKLQotCQkJLyogV1BBMiAmIDgwMi4xMWkgUlNOICovCi0JCWNhc2UgSUVfUlNOOgotCQkJLyogVGhlcmUgaXMgbm8gT1VJIGZvciB2ZXJzaW9uIGFueW1vcmUsIGNoZWNrIHRoZSBncm91cCBjaXBoZXIgT1VJIGJlZm9yZSBjb3B5aW5nICovCi0JCQlpZiAoUlRNUEVxdWFsTWVtb3J5KHBFaWQtPk9jdGV0ICsgMiwgUlNOX09VSSwgMykpIHsKLQkJCQkvKiBDb3B5IHRvIHBWSUUgd2hpY2ggd2lsbCByZXBvcnQgdG8gbWljcm9zb2Z0IGJzc2lkIGxpc3QuICovCi0JCQkJUHRyID0gKHU4ICopcFZJRTsKLQkJCQlOZGlzTW92ZU1lbW9yeShQdHIgKyAqTGVuZ3RoVklFLCAmcEVpZC0+RWlkLAotCQkJCQkgICAgICAgcEVpZC0+TGVuICsgMik7Ci0JCQkJKkxlbmd0aFZJRSArPSAocEVpZC0+TGVuICsgMik7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQotCQlMZW5ndGggPSBMZW5ndGggKyAyICsgcEVpZC0+TGVuOwkvKiBFaWRbMV0gKyBMZW5bMV0rIGNvbnRlbnRbTGVuXSAqLwotCQlwRWlkID0gKHN0cnVjdCBydF9laWQgKikgKCh1OCAqKSBwRWlkICsgMiArIHBFaWQtPkxlbik7Ci0JfQotCi0JLyogRm9yIHNvbWUgMTFhIEFQLiBpdCBkaWQgbm90IGhhdmUgdGhlIGNoYW5uZWwgRUlELCBwYXRjaCBoZXJlICovCi0JewotCQl1OCBMYXRjaFJmQ2hhbm5lbCA9IE1zZ0NoYW5uZWw7Ci0JCWlmICgocEFkLT5MYXRjaFJmUmVncy5DaGFubmVsID4gMTQpICYmICgoU2FuaXR5ICYgMHg0KSA9PSAwKSkgewotCQkJaWYgKEN0cmxDaGFubmVsICE9IDApCi0JCQkJKnBDaGFubmVsID0gQ3RybENoYW5uZWw7Ci0JCQllbHNlCi0JCQkJKnBDaGFubmVsID0gTGF0Y2hSZkNoYW5uZWw7Ci0JCQlTYW5pdHkgfD0gMHg0OwotCQl9Ci0JfQotCi0JaWYgKFNhbml0eSAhPSAweDcpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfTE9VRCwKLQkJCSAoIlBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eSAtIG1pc3NpbmcgZmllbGQsIFNhbml0eT0weCUwMnhcbiIsCi0JCQkgIFNhbml0eSkpOwotCQlyZXR1cm4gRkFMU0U7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIFRSVUU7Ci0JfQotCi19Ci0KLS8qCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBEZXNjcmlwdGlvbjoKLSAgICAgICAgTUxNRSBtZXNzYWdlIHNhbml0eSBjaGVjawotICAgIFJldHVybjoKLSAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLUJPT0xFQU4gTWxtZVNjYW5SZXFTYW5pdHkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICB2b2lkICogTXNnLAotCQkJICB1bnNpZ25lZCBsb25nIE1zZ0xlbiwKLQkJCSAgdTggKiBwQnNzVHlwZSwKLQkJCSAgY2hhciBTc2lkW10sCi0JCQkgIHU4ICogcFNzaWRMZW4sIHU4ICogcFNjYW5UeXBlKQotewotCXN0cnVjdCBydF9tbG1lX3NjYW5fcmVxICpJbmZvOwotCi0JSW5mbyA9IChzdHJ1Y3QgcnRfbWxtZV9zY2FuX3JlcSAqKShNc2cpOwotCSpwQnNzVHlwZSA9IEluZm8tPkJzc1R5cGU7Ci0JKnBTc2lkTGVuID0gSW5mby0+U3NpZExlbjsKLQlOZGlzTW92ZU1lbW9yeShTc2lkLCBJbmZvLT5Tc2lkLCAqcFNzaWRMZW4pOwotCSpwU2NhblR5cGUgPSBJbmZvLT5TY2FuVHlwZTsKLQotCWlmICgoKnBCc3NUeXBlID09IEJTU19JTkZSQSB8fCAqcEJzc1R5cGUgPT0gQlNTX0FESE9DCi0JICAgICB8fCAqcEJzc1R5cGUgPT0gQlNTX0FOWSkKLQkgICAgJiYgKCpwU2NhblR5cGUgPT0gU0NBTl9BQ1RJVkUgfHwgKnBTY2FuVHlwZSA9PSBTQ0FOX1BBU1NJVkUpKSB7Ci0JCXJldHVybiBUUlVFOwotCX0gZWxzZSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiTWxtZVNjYW5SZXFTYW5pdHkgZmFpbCAtIHdyb25nIEJzc1R5cGUgb3IgU2NhblR5cGVcbiIpKTsKLQkJcmV0dXJuIEZBTFNFOwotCX0KLX0KLQotLyogSVJRTCA9IERJU1BBVENIX0xFVkVMICovCi11OCBDaGFubmVsU2FuaXR5KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggY2hhbm5lbCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBwQWQtPkNoYW5uZWxMaXN0TnVtOyBpKyspIHsKLQkJaWYgKGNoYW5uZWwgPT0gcEFkLT5DaGFubmVsTGlzdFtpXS5DaGFubmVsKQotCQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKgotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgRGVzY3JpcHRpb246Ci0gICAgICAgIE1MTUUgbWVzc2FnZSBzYW5pdHkgY2hlY2sKLSAgICBSZXR1cm46Ci0gICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKLQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotQk9PTEVBTiBQZWVyRGVhdXRoU2FuaXR5KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSB2b2lkICogTXNnLAotCQkJIHVuc2lnbmVkIGxvbmcgTXNnTGVuLAotCQkJIHU4ICpwQWRkcjIsIHUxNiAqIHBSZWFzb24pCi17Ci0Jc3RydWN0IHJ0X2ZyYW1lXzgwMl8xMSAqIHBGcmFtZSA9IChzdHJ1Y3QgcnRfZnJhbWVfODAyXzExICopIE1zZzsKLQotCUNPUFlfTUFDX0FERFIocEFkZHIyLCBwRnJhbWUtPkhkci5BZGRyMik7Ci0JTmRpc01vdmVNZW1vcnkocFJlYXNvbiwgJnBGcmFtZS0+T2N0ZXRbMF0sIDIpOwotCi0JcmV0dXJuIFRSVUU7Ci19Ci0KLS8qCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBEZXNjcmlwdGlvbjoKLSAgICAgICAgTUxNRSBtZXNzYWdlIHNhbml0eSBjaGVjawotICAgIFJldHVybjoKLSAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi1CT09MRUFOIFBlZXJBdXRoU2FuaXR5KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgICAgIHZvaWQgKiBNc2csCi0JCSAgICAgICB1bnNpZ25lZCBsb25nIE1zZ0xlbiwKLQkJICAgICAgIHU4ICpwQWRkciwKLQkJICAgICAgIHUxNiAqIHBBbGcsCi0JCSAgICAgICB1MTYgKiBwU2VxLAotCQkgICAgICAgdTE2ICogcFN0YXR1cywgY2hhciAqIHBDaGxnVGV4dCkKLXsKLQlzdHJ1Y3QgcnRfZnJhbWVfODAyXzExICogcEZyYW1lID0gKHN0cnVjdCBydF9mcmFtZV84MDJfMTEgKikgTXNnOwotCi0JQ09QWV9NQUNfQUREUihwQWRkciwgcEZyYW1lLT5IZHIuQWRkcjIpOwotCU5kaXNNb3ZlTWVtb3J5KHBBbGcsICZwRnJhbWUtPk9jdGV0WzBdLCAyKTsKLQlOZGlzTW92ZU1lbW9yeShwU2VxLCAmcEZyYW1lLT5PY3RldFsyXSwgMik7Ci0JTmRpc01vdmVNZW1vcnkocFN0YXR1cywgJnBGcmFtZS0+T2N0ZXRbNF0sIDIpOwotCi0JaWYgKCpwQWxnID09IEFVVEhfTU9ERV9PUEVOKSB7Ci0JCWlmICgqcFNlcSA9PSAxIHx8ICpwU2VxID09IDIpIHsKLQkJCXJldHVybiBUUlVFOwotCQl9IGVsc2UgewotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiUGVlckF1dGhTYW5pdHkgZmFpbCAtIHdyb25nIFNlZyNcbiIpKTsKLQkJCXJldHVybiBGQUxTRTsKLQkJfQotCX0gZWxzZSBpZiAoKnBBbGcgPT0gQVVUSF9NT0RFX0tFWSkgewotCQlpZiAoKnBTZXEgPT0gMSB8fCAqcFNlcSA9PSA0KSB7Ci0JCQlyZXR1cm4gVFJVRTsKLQkJfSBlbHNlIGlmICgqcFNlcSA9PSAyIHx8ICpwU2VxID09IDMpIHsKLQkJCU5kaXNNb3ZlTWVtb3J5KHBDaGxnVGV4dCwgJnBGcmFtZS0+T2N0ZXRbOF0sCi0JCQkJICAgICAgIENJUEhFUl9URVhUX0xFTik7Ci0JCQlyZXR1cm4gVFJVRTsKLQkJfSBlbHNlIHsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAoIlBlZXJBdXRoU2FuaXR5IGZhaWwgLSB3cm9uZyBTZWcjXG4iKSk7Ci0JCQlyZXR1cm4gRkFMU0U7Ci0JCX0KLQl9IGVsc2UgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIlBlZXJBdXRoU2FuaXR5IGZhaWwgLSB3cm9uZyBhbGdvcml0aG1cbiIpKTsKLQkJcmV0dXJuIEZBTFNFOwotCX0KLX0KLQotLyoKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIERlc2NyaXB0aW9uOgotICAgICAgICBNTE1FIG1lc3NhZ2Ugc2FuaXR5IGNoZWNrCi0gICAgUmV0dXJuOgotICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotQk9PTEVBTiBNbG1lQXV0aFJlcVNhbml0eShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgIHZvaWQgKiBNc2csCi0JCQkgIHVuc2lnbmVkIGxvbmcgTXNnTGVuLAotCQkJICB1OCAqcEFkZHIsCi0JCQkgIHVuc2lnbmVkIGxvbmcgKiBwVGltZW91dCwgdTE2ICogcEFsZykKLXsKLQlzdHJ1Y3QgcnRfbWxtZV9hdXRoX3JlcSAqcEluZm87Ci0KLQlwSW5mbyA9IChzdHJ1Y3QgcnRfbWxtZV9hdXRoX3JlcSAqKU1zZzsKLQlDT1BZX01BQ19BRERSKHBBZGRyLCBwSW5mby0+QWRkcik7Ci0JKnBUaW1lb3V0ID0gcEluZm8tPlRpbWVvdXQ7Ci0JKnBBbGcgPSBwSW5mby0+QWxnOwotCi0JaWYgKCgoKnBBbGcgPT0gQVVUSF9NT0RFX0tFWSkgfHwgKCpwQWxnID09IEFVVEhfTU9ERV9PUEVOKQotCSAgICApICYmICgoKnBBZGRyICYgMHgwMSkgPT0gMCkpIHsKLQkJcmV0dXJuIFRSVUU7Ci0JfSBlbHNlIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJNbG1lQXV0aFJlcVNhbml0eSBmYWlsIC0gd3JvbmcgYWxnb3JpdGhtXG4iKSk7Ci0JCXJldHVybiBGQUxTRTsKLQl9Ci19Ci0KLS8qCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBEZXNjcmlwdGlvbjoKLSAgICAgICAgTUxNRSBtZXNzYWdlIHNhbml0eSBjaGVjawotICAgIFJldHVybjoKLSAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi1CT09MRUFOIE1sbWVBc3NvY1JlcVNhbml0eShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICB2b2lkICogTXNnLAotCQkJICAgdW5zaWduZWQgbG9uZyBNc2dMZW4sCi0JCQkgICB1OCAqcEFwQWRkciwKLQkJCSAgIHUxNiAqIHBDYXBhYmlsaXR5SW5mbywKLQkJCSAgIHVuc2lnbmVkIGxvbmcgKiBwVGltZW91dCwgdTE2ICogcExpc3RlbkludHYpCi17Ci0Jc3RydWN0IHJ0X21sbWVfYXNzb2NfcmVxICpwSW5mbzsKLQotCXBJbmZvID0gKHN0cnVjdCBydF9tbG1lX2Fzc29jX3JlcSAqKU1zZzsKLQkqcFRpbWVvdXQgPSBwSW5mby0+VGltZW91dDsJLyogdGltZW91dCAqLwotCUNPUFlfTUFDX0FERFIocEFwQWRkciwgcEluZm8tPkFkZHIpOwkvKiBBUCBhZGRyZXNzICovCi0JKnBDYXBhYmlsaXR5SW5mbyA9IHBJbmZvLT5DYXBhYmlsaXR5SW5mbzsJLyogY2FwYWJpbGl0eSBpbmZvICovCi0JKnBMaXN0ZW5JbnR2ID0gcEluZm8tPkxpc3RlbkludHY7Ci0KLQlyZXR1cm4gVFJVRTsKLX0KLQotLyoKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIERlc2NyaXB0aW9uOgotICAgICAgICBNTE1FIG1lc3NhZ2Ugc2FuaXR5IGNoZWNrCi0gICAgUmV0dXJuOgotICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCi0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLUJPT0xFQU4gUGVlckRpc2Fzc29jU2FuaXR5KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgIHZvaWQgKiBNc2csCi0JCQkgICB1bnNpZ25lZCBsb25nIE1zZ0xlbiwKLQkJCSAgIHU4ICpwQWRkcjIsIHUxNiAqIHBSZWFzb24pCi17Ci0Jc3RydWN0IHJ0X2ZyYW1lXzgwMl8xMSAqIHBGcmFtZSA9IChzdHJ1Y3QgcnRfZnJhbWVfODAyXzExICopIE1zZzsKLQotCUNPUFlfTUFDX0FERFIocEFkZHIyLCBwRnJhbWUtPkhkci5BZGRyMik7Ci0JTmRpc01vdmVNZW1vcnkocFJlYXNvbiwgJnBGcmFtZS0+T2N0ZXRbMF0sIDIpOwotCi0JcmV0dXJuIFRSVUU7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQkJU2FuaXR5IGNoZWNrIE5ldHdvcmtUeXBlICgxMWIsIDExZyBvciAxMWEpCi0KLQlBcmd1bWVudHM6Ci0JCXBCc3MgLSBQb2ludGVyIHRvIEJTUyB0YWJsZS4KLQotCVJldHVybiBWYWx1ZToKLSAgICAgICAgTmRpczgwMl8xMURTIC4uLi4uLi4oMTFiKQotICAgICAgICBOZGlzODAyXzExT0ZETTI0Li4uLigxMWcpCi0gICAgICAgIE5kaXM4MDJfMTFPRkRNNS4uLi4uKDExYSkKLQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotTkRJU184MDJfMTFfTkVUV09SS19UWVBFIE5ldHdvcmtUeXBlSW5Vc2VTYW5pdHkoc3RydWN0IHJ0X2Jzc19lbnRyeSAqcEJzcykKLXsKLQlORElTXzgwMl8xMV9ORVRXT1JLX1RZUEUgTmV0V29ya1R5cGU7Ci0JdTggcmF0ZSwgaTsKLQotCU5ldFdvcmtUeXBlID0gTmRpczgwMl8xMURTOwotCi0JaWYgKHBCc3MtPkNoYW5uZWwgPD0gMTQpIHsKLQkJLyogKi8KLQkJLyogRmlyc3QgY2hlY2sgc3VwcG9ydCBSYXRlLiAqLwotCQkvKiAqLwotCQlmb3IgKGkgPSAwOyBpIDwgcEJzcy0+U3VwUmF0ZUxlbjsgaSsrKSB7Ci0JCQlyYXRlID0gcEJzcy0+U3VwUmF0ZVtpXSAmIDB4N2Y7CS8qIE1hc2sgb3V0IGJhc2ljIHJhdGUgc2V0IGJpdCAqLwotCQkJaWYgKChyYXRlID09IDIpIHx8IChyYXRlID09IDQpIHx8IChyYXRlID09IDExKQotCQkJICAgIHx8IChyYXRlID09IDIyKSkgewotCQkJCWNvbnRpbnVlOwotCQkJfSBlbHNlIHsKLQkJCQkvKiAqLwotCQkJCS8qIE90aGVyd2lzZSAoZXZlbiByYXRlID4gMTA4KSBtZWFucyBOZGlzODAyXzExT0ZETTI0ICovCi0JCQkJLyogKi8KLQkJCQlOZXRXb3JrVHlwZSA9IE5kaXM4MDJfMTFPRkRNMjQ7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQkvKiAqLwotCQkvKiBTZWNvbmQgY2hlY2sgRXh0ZW5kIFJhdGUuICovCi0JCS8qICovCi0JCWlmIChOZXRXb3JrVHlwZSAhPSBOZGlzODAyXzExT0ZETTI0KSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgcEJzcy0+RXh0UmF0ZUxlbjsgaSsrKSB7Ci0JCQkJcmF0ZSA9IHBCc3MtPlN1cFJhdGVbaV0gJiAweDdmOwkvKiBNYXNrIG91dCBiYXNpYyByYXRlIHNldCBiaXQgKi8KLQkJCQlpZiAoKHJhdGUgPT0gMikgfHwgKHJhdGUgPT0gNCkgfHwgKHJhdGUgPT0gMTEpCi0JCQkJICAgIHx8IChyYXRlID09IDIyKSkgewotCQkJCQljb250aW51ZTsKLQkJCQl9IGVsc2UgewotCQkJCQkvKiAqLwotCQkJCQkvKiBPdGhlcndpc2UgKGV2ZW4gcmF0ZSA+IDEwOCkgbWVhbnMgTmRpczgwMl8xMU9GRE0yNCAqLwotCQkJCQkvKiAqLwotCQkJCQlOZXRXb3JrVHlwZSA9IE5kaXM4MDJfMTFPRkRNMjQ7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCU5ldFdvcmtUeXBlID0gTmRpczgwMl8xMU9GRE01OwotCX0KLQotCWlmIChwQnNzLT5IdENhcGFiaWxpdHlMZW4gIT0gMCkgewotCQlpZiAoTmV0V29ya1R5cGUgPT0gTmRpczgwMl8xMU9GRE01KQotCQkJTmV0V29ya1R5cGUgPSBOZGlzODAyXzExT0ZETTVfTjsKLQkJZWxzZQotCQkJTmV0V29ya1R5cGUgPSBOZGlzODAyXzExT0ZETTI0X047Ci0JfQotCi0JcmV0dXJuIE5ldFdvcmtUeXBlOwotfQotCi0vKgotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgRGVzY3JpcHRpb246Ci0gICAgICAgIENoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgcmVjZWl2ZWQgRUFQb0wgZnJhbWUKLSAgICBSZXR1cm46Ci0gICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLAotICAgICAgICBGQUxTRSBvdGhlcndpc2UKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi1CT09MRUFOIFBlZXJXcGFNZXNzYWdlU2FuaXR5KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICAgc3RydWN0IHJ0X2VhcG9sX3BhY2tldCAqIHBNc2csCi0JCQkgICAgIHVuc2lnbmVkIGxvbmcgTXNnTGVuLAotCQkJICAgICB1OCBNc2dUeXBlLCBzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwRW50cnkpCi17Ci0JdTggbWljW0xFTl9LRVlfREVTQ19NSUNdLCBkaWdlc3RbODBdLCBLRVlEQVRBW01BWF9MRU5fT0ZfUlNOSUVdOwotCUJPT0xFQU4gYlJlcGxheURpZmYgPSBGQUxTRTsKLQlCT09MRUFOIGJXUEEyID0gRkFMU0U7Ci0Jc3RydWN0IHJ0X2tleV9pbmZvIEVhcG9sS2V5SW5mbzsKLQl1OCBHcm91cEtleUluZGV4ID0gMDsKLQotCU5kaXNaZXJvTWVtb3J5KG1pYywgc2l6ZW9mKG1pYykpOwotCU5kaXNaZXJvTWVtb3J5KGRpZ2VzdCwgc2l6ZW9mKGRpZ2VzdCkpOwotCU5kaXNaZXJvTWVtb3J5KEtFWURBVEEsIHNpemVvZihLRVlEQVRBKSk7Ci0JTmRpc1plcm9NZW1vcnkoKHU4ICopJiBFYXBvbEtleUluZm8sIHNpemVvZihFYXBvbEtleUluZm8pKTsKLQotCU5kaXNNb3ZlTWVtb3J5KCh1OCAqKSYgRWFwb2xLZXlJbmZvLAotCQkgICAgICAgKHU4ICopJiBwTXNnLT5LZXlEZXNjLktleUluZm8sIHNpemVvZihzdHJ1Y3QgcnRfa2V5X2luZm8pKTsKLQotCSooKHUxNiAqKSAmIEVhcG9sS2V5SW5mbykgPSBjcHUybGUxNigqKCh1MTYgKikgJiBFYXBvbEtleUluZm8pKTsKLQotCS8qIENob29zZSBXUEEyIG9yIG5vdCAqLwotCWlmICgocEVudHJ5LT5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyKQotCSAgICB8fCAocEVudHJ5LT5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLKSkKLQkJYldQQTIgPSBUUlVFOwotCi0JLyogMC4gQ2hlY2sgTXNnVHlwZSAqLwotCWlmICgoTXNnVHlwZSA+IEVBUE9MX0dST1VQX01TR18yKSB8fCAoTXNnVHlwZSA8IEVBUE9MX1BBSVJfTVNHXzEpKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJICgiVGhlIG1lc3NhZ2UgdHlwZSBpcyBpbnZhbGlkKCVkKSEgXG4iLCBNc2dUeXBlKSk7Ci0JCXJldHVybiBGQUxTRTsKLQl9Ci0JLyogMS4gUmVwbGF5IGNvdW50ZXIgY2hlY2sgKi8KLQlpZiAoTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18xIHx8IE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMyB8fCBNc2dUeXBlID09IEVBUE9MX0dST1VQX01TR18xKQkvKiBGb3Igc3VwcGxpY2FudCAqLwotCXsKLQkJLyogRmlyc3QgdmFsaWRhdGUgcmVwbGF5IGNvdW50ZXIsIG9ubHkgYWNjZXB0IG1lc3NhZ2Ugd2l0aCBsYXJnZXIgcmVwbGF5IGNvdW50ZXIuICovCi0JCS8qIExldCBlcXVhbCBwYXNzLCBzb21lIEFQIHN0YXJ0IHdpdGggYWxsIHplcm8gcmVwbGF5IGNvdW50ZXIgKi8KLQkJdTggWmVyb1JlcGxheVtMRU5fS0VZX0RFU0NfUkVQTEFZXTsKLQotCQlOZGlzWmVyb01lbW9yeShaZXJvUmVwbGF5LCBMRU5fS0VZX0RFU0NfUkVQTEFZKTsKLQkJaWYgKChSVE1QQ29tcGFyZU1lbW9yeQotCQkgICAgIChwTXNnLT5LZXlEZXNjLlJlcGxheUNvdW50ZXIsIHBFbnRyeS0+Ul9Db3VudGVyLAotCQkgICAgICBMRU5fS0VZX0RFU0NfUkVQTEFZKSAhPSAxKQotCQkgICAgJiYKLQkJICAgIChSVE1QQ29tcGFyZU1lbW9yeQotCQkgICAgIChwTXNnLT5LZXlEZXNjLlJlcGxheUNvdW50ZXIsIFplcm9SZXBsYXksCi0JCSAgICAgIExFTl9LRVlfREVTQ19SRVBMQVkpICE9IDApKSB7Ci0JCQliUmVwbGF5RGlmZiA9IFRSVUU7Ci0JCX0KLQl9IGVsc2UgaWYgKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMiB8fCBNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzQgfHwgTXNnVHlwZSA9PSBFQVBPTF9HUk9VUF9NU0dfMikJLyogRm9yIGF1dGhlbnRpY2F0b3IgKi8KLQl7Ci0JCS8qIGNoZWNrIFJlcGxheSBDb3VudGVyIGNvcmVzcG9uZHMgdG8gTVNHIGZyb20gYXV0aGVudGljYXRvciwgb3RoZXJ3aXNlIGRpc2NhcmQgKi8KLQkJaWYgKCFOZGlzRXF1YWxNZW1vcnkKLQkJICAgIChwTXNnLT5LZXlEZXNjLlJlcGxheUNvdW50ZXIsIHBFbnRyeS0+Ul9Db3VudGVyLAotCQkgICAgIExFTl9LRVlfREVTQ19SRVBMQVkpKSB7Ci0JCQliUmVwbGF5RGlmZiA9IFRSVUU7Ci0JCX0KLQl9Ci0JLyogUmVwbGF5IENvdW50ZXIgZGlmZmVyZW50IGNvbmRpdGlvbiAqLwotCWlmIChiUmVwbGF5RGlmZikgewotCQkvKiBzZW5kIHdpcmVsZXNzIGV2ZW50IC0gZm9yIHJlcGxheSBjb3VudGVyIGRpZmZlcmVudCAqLwotCQlpZiAocEFkLT5Db21tb25DZmcuYldpcmVsZXNzRXZlbnQpCi0JCQlSVE1QU2VuZFdpcmVsZXNzRXZlbnQocEFkLAotCQkJCQkgICAgICBJV19SRVBMQVlfQ09VTlRFUl9ESUZGX0VWRU5UX0ZMQUcsCi0JCQkJCSAgICAgIHBFbnRyeS0+QWRkciwgcEVudHJ5LT5hcGlkeCwgMCk7Ci0KLQkJaWYgKE1zZ1R5cGUgPCBFQVBPTF9HUk9VUF9NU0dfMSkgewotCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkJICgiUmVwbGF5IENvdW50ZXIgRGlmZmVyZW50IGluIHBhaXJ3aXNlIG1zZyAlZCBvZiA0LXdheSBoYW5kc2hha2UhXG4iLAotCQkJCSAgTXNnVHlwZSkpOwotCQl9IGVsc2UgewotCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkJICgiUmVwbGF5IENvdW50ZXIgRGlmZmVyZW50IGluIGdyb3VwIG1zZyAlZCBvZiAyLXdheSBoYW5kc2hha2UhXG4iLAotCQkJCSAgKE1zZ1R5cGUgLSBFQVBPTF9QQUlSX01TR180KSkpOwotCQl9Ci0KLQkJaGV4X2R1bXAoIlJlY2VpdmUgcmVwbGF5IGNvdW50ZXIgIiwgcE1zZy0+S2V5RGVzYy5SZXBsYXlDb3VudGVyLAotCQkJIExFTl9LRVlfREVTQ19SRVBMQVkpOwotCQloZXhfZHVtcCgiQ3VycmVudCByZXBsYXkgY291bnRlciAiLCBwRW50cnktPlJfQ291bnRlciwKLQkJCSBMRU5fS0VZX0RFU0NfUkVQTEFZKTsKLQkJcmV0dXJuIEZBTFNFOwotCX0KLQkvKiAyLiBWZXJpZnkgTUlDIGV4Y2VwdCBQYWlyd2lzZSBNc2cxICovCi0JaWYgKE1zZ1R5cGUgIT0gRUFQT0xfUEFJUl9NU0dfMSkgewotCQl1OCByY3ZkX21pY1tMRU5fS0VZX0RFU0NfTUlDXTsKLQotCQkvKiBSZWNvcmQgdGhlIHJlY2VpdmVkIE1JQyBmb3IgY2hlY2sgbGF0ZXIgKi8KLQkJTmRpc01vdmVNZW1vcnkocmN2ZF9taWMsIHBNc2ctPktleURlc2MuS2V5TWljLAotCQkJICAgICAgIExFTl9LRVlfREVTQ19NSUMpOwotCQlOZGlzWmVyb01lbW9yeShwTXNnLT5LZXlEZXNjLktleU1pYywgTEVOX0tFWV9ERVNDX01JQyk7Ci0KLQkJaWYgKEVhcG9sS2V5SW5mby5LZXlEZXNjVmVyID09IERFU0NfVFlQRV9US0lQKQkvKiBUS0lQICovCi0JCXsKLQkJCUhNQUNfTUQ1KHBFbnRyeS0+UFRLLCBMRU5fRUFQX01JQ0ssICh1OCAqKXBNc2csCi0JCQkJIE1zZ0xlbiwgbWljLCBNRDVfRElHRVNUX1NJWkUpOwotCQl9IGVsc2UgaWYgKEVhcG9sS2V5SW5mby5LZXlEZXNjVmVyID09IERFU0NfVFlQRV9BRVMpCS8qIEFFUyAqLwotCQl7Ci0JCQlITUFDX1NIQTEocEVudHJ5LT5QVEssIExFTl9FQVBfTUlDSywgKHU4ICopcE1zZywKLQkJCQkgIE1zZ0xlbiwgZGlnZXN0LCBTSEExX0RJR0VTVF9TSVpFKTsKLQkJCU5kaXNNb3ZlTWVtb3J5KG1pYywgZGlnZXN0LCBMRU5fS0VZX0RFU0NfTUlDKTsKLQkJfQotCi0JCWlmICghTmRpc0VxdWFsTWVtb3J5KHJjdmRfbWljLCBtaWMsIExFTl9LRVlfREVTQ19NSUMpKSB7Ci0JCQkvKiBzZW5kIHdpcmVsZXNzIGV2ZW50IC0gZm9yIE1JQyBkaWZmZXJlbnQgKi8KLQkJCWlmIChwQWQtPkNvbW1vbkNmZy5iV2lyZWxlc3NFdmVudCkKLQkJCQlSVE1QU2VuZFdpcmVsZXNzRXZlbnQocEFkLAotCQkJCQkJICAgICAgSVdfTUlDX0RJRkZfRVZFTlRfRkxBRywKLQkJCQkJCSAgICAgIHBFbnRyeS0+QWRkciwKLQkJCQkJCSAgICAgIHBFbnRyeS0+YXBpZHgsIDApOwotCi0JCQlpZiAoTXNnVHlwZSA8IEVBUE9MX0dST1VQX01TR18xKSB7Ci0JCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkJCSAoIk1JQyBEaWZmZXJlbnQgaW4gcGFpcndpc2UgbXNnICVkIG9mIDQtd2F5IGhhbmRzaGFrZSFcbiIsCi0JCQkJCSAgTXNnVHlwZSkpOwotCQkJfSBlbHNlIHsKLQkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCQkJICgiTUlDIERpZmZlcmVudCBpbiBncm91cCBtc2cgJWQgb2YgMi13YXkgaGFuZHNoYWtlIVxuIiwKLQkJCQkJICAoTXNnVHlwZSAtIEVBUE9MX1BBSVJfTVNHXzQpKSk7Ci0JCQl9Ci0KLQkJCWhleF9kdW1wKCJSZWNlaXZlZCBNSUMiLCByY3ZkX21pYywgTEVOX0tFWV9ERVNDX01JQyk7Ci0JCQloZXhfZHVtcCgiRGVzaXJlZCAgTUlDIiwgbWljLCBMRU5fS0VZX0RFU0NfTUlDKTsKLQotCQkJcmV0dXJuIEZBTFNFOwotCQl9Ci0JfQotCS8qIDEuIERlY3J5cHQgdGhlIEtleSBEYXRhIGZpZWxkIGlmIEdUSyBpcyBpbmNsdWRlZC4gKi8KLQkvKiAyLiBFeHRyYWN0IHRoZSBjb250ZXh0IG9mIHRoZSBLZXkgRGF0YSBmaWVsZCBpZiBpdCBleGlzdC4gKi8KLQkvKiBUaGUgZmllbGQgaW4gcGFpcndpc2VfbXNnXzJfV1BBMShXUEEyKSAmIHBhaXJ3aXNlX21zZ18zX1dQQTEgaXMgY2xlYXIuICovCi0JLyogVGhlIGZpZWxkIGluIGdyb3VwX21zZ18xX1dQQTEoV1BBMikgJiBwYWlyd2lzZV9tc2dfM19XUEEyIGlzIGVuY3J5cHRlZC4gKi8KLQlpZiAoQ09OVl9BUlJBUllfVE9fdTE2KHBNc2ctPktleURlc2MuS2V5RGF0YUxlbikgPiAwKSB7Ci0JCS8qIERlY3J5cHQgdGhpcyBmaWVsZCAqLwotCQlpZiAoKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMyAmJiBiV1BBMikKLQkJICAgIHx8IChNc2dUeXBlID09IEVBUE9MX0dST1VQX01TR18xKSkgewotCQkJaWYgKChFYXBvbEtleUluZm8uS2V5RGVzY1ZlciA9PSBERVNDX1RZUEVfQUVTKSkgewotCQkJCS8qIEFFUyAqLwotCQkJCUFFU19HVEtfS0VZX1VOV1JBUCgmcEVudHJ5LT5QVEtbMTZdLCBLRVlEQVRBLAotCQkJCQkJICAgQ09OVl9BUlJBUllfVE9fdTE2KHBNc2ctPgotCQkJCQkJCQkJIEtleURlc2MuCi0JCQkJCQkJCQkgS2V5RGF0YUxlbiksCi0JCQkJCQkgICBwTXNnLT5LZXlEZXNjLktleURhdGEpOwotCQkJfSBlbHNlIHsKLQkJCQlpbnQgaTsKLQkJCQl1OCBLZXlbMzJdOwotCQkJCS8qIERlY3J5cHQgVEtJUCBHVEsgKi8KLQkJCQkvKiBDb25zdHJ1Y3QgMzIgYnl0ZXMgUkM0IEtleSAqLwotCQkJCU5kaXNNb3ZlTWVtb3J5KEtleSwgcE1zZy0+S2V5RGVzYy5LZXlJdiwgMTYpOwotCQkJCU5kaXNNb3ZlTWVtb3J5KCZLZXlbMTZdLCAmcEVudHJ5LT5QVEtbMTZdLCAxNik7Ci0JCQkJQVJDRk9VUl9JTklUKCZwQWQtPlByaXZhdGVJbmZvLldFUENPTlRFWFQsIEtleSwKLQkJCQkJICAgICAzMik7Ci0JCQkJLypkaXNjYXJkIGZpcnN0IDI1NiBieXRlcyAqLwotCQkJCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKLQkJCQkJQVJDRk9VUl9CWVRFKCZwQWQtPlByaXZhdGVJbmZvLgotCQkJCQkJICAgICBXRVBDT05URVhUKTsKLQkJCQkvKiBEZWNyeXB0IEdUSy4gQmVjYXJlZnVsLCB0aGVyZSBpcyBubyBJQ1YgdG8gY2hlY2sgdGhlIHJlc3VsdCBpcyBjb3JyZWN0IG9yIG5vdCAqLwotCQkJCUFSQ0ZPVVJfREVDUllQVCgmcEFkLT5Qcml2YXRlSW5mby5XRVBDT05URVhULAotCQkJCQkJS0VZREFUQSwgcE1zZy0+S2V5RGVzYy5LZXlEYXRhLAotCQkJCQkJQ09OVl9BUlJBUllfVE9fdTE2KHBNc2ctPgotCQkJCQkJCQkgICAgICBLZXlEZXNjLgotCQkJCQkJCQkgICAgICBLZXlEYXRhTGVuKSk7Ci0JCQl9Ci0KLQkJCWlmICghYldQQTIgJiYgKE1zZ1R5cGUgPT0gRUFQT0xfR1JPVVBfTVNHXzEpKQotCQkJCUdyb3VwS2V5SW5kZXggPSBFYXBvbEtleUluZm8uS2V5SW5kZXg7Ci0KLQkJfSBlbHNlIGlmICgoTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18yKQotCQkJICAgfHwgKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMyAmJiAhYldQQTIpKSB7Ci0JCQlOZGlzTW92ZU1lbW9yeShLRVlEQVRBLCBwTXNnLT5LZXlEZXNjLktleURhdGEsCi0JCQkJICAgICAgIENPTlZfQVJSQVJZX1RPX3UxNihwTXNnLT5LZXlEZXNjLgotCQkJCQkJCSAgICAgS2V5RGF0YUxlbikpOwotCQl9IGVsc2UgewotCi0JCQlyZXR1cm4gVFJVRTsKLQkJfQotCi0JCS8qIFBhcnNlIEtleSBEYXRhIGZpZWxkIHRvICovCi0JCS8qIDEuIHZlcmlmeSBSU04gSUUgZm9yIHBhaXJ3aXNlX21zZ18yX1dQQTEoV1BBMikgLHBhaXJ3aXNlX21zZ18zX1dQQTEoV1BBMikgKi8KLQkJLyogMi4gdmVyaWZ5IEtERSBmb3JtYXQgZm9yIHBhaXJ3aXNlX21zZ18zX1dQQTIsIGdyb3VwX21zZ18xX1dQQTIgKi8KLQkJLyogMy4gdXBkYXRlIHNoYXJlZCBrZXkgZm9yIHBhaXJ3aXNlX21zZ18zX1dQQTIsIGdyb3VwX21zZ18xX1dQQTEoV1BBMikgKi8KLQkJaWYgKCFSVE1QUGFyc2VFYXBvbEtleURhdGEocEFkLCBLRVlEQVRBLAotCQkJCQkgICBDT05WX0FSUkFSWV9UT191MTYocE1zZy0+S2V5RGVzYy4KLQkJCQkJCQkJIEtleURhdGFMZW4pLAotCQkJCQkgICBHcm91cEtleUluZGV4LCBNc2dUeXBlLCBiV1BBMiwKLQkJCQkJICAgcEVudHJ5KSkgewotCQkJcmV0dXJuIEZBTFNFOwotCQl9Ci0JfQotCi0JcmV0dXJuIFRSVUU7Ci0KLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9zeW5jLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fc3luYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWZlMWI3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9zeW5jLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MTggKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLQlNb2R1bGUgTmFtZToKLQljbW1fc3luYy5jCi0KLQlBYnN0cmFjdDoKLQotCVJldmlzaW9uIEhpc3Rvcnk6Ci0JV2hvCQkJV2hlbgkJCVdoYXQKLQktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JSm9obiBDaGFuZwkyMDA0LTA5LTAxICAgICAgbW9kaWZpZWQgZm9yIHJ0MjU2MS8yNjYxCi0qLwotI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgotCi0vKiAyLjQgR2h6IGNoYW5uZWwgcGxhbiBpbmRleCBpbiB0aGUgVHhQb3dlciBhcnJheXMuICovCi0jZGVmaW5lCUJHX0JBTkRfUkVHSU9OXzBfU1RBUlQJMAkvKiAxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSAqLwotI2RlZmluZQlCR19CQU5EX1JFR0lPTl8wX1NJWkUJMTEKLSNkZWZpbmUJQkdfQkFORF9SRUdJT05fMV9TVEFSVAkwCS8qIDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzICovCi0jZGVmaW5lCUJHX0JBTkRfUkVHSU9OXzFfU0laRQkxMwotI2RlZmluZQlCR19CQU5EX1JFR0lPTl8yX1NUQVJUCTkJLyogMTAsMTEgKi8KLSNkZWZpbmUJQkdfQkFORF9SRUdJT05fMl9TSVpFCTIKLSNkZWZpbmUJQkdfQkFORF9SRUdJT05fM19TVEFSVAk5CS8qIDEwLDExLDEyLDEzICovCi0jZGVmaW5lCUJHX0JBTkRfUkVHSU9OXzNfU0laRQk0Ci0jZGVmaW5lCUJHX0JBTkRfUkVHSU9OXzRfU1RBUlQJMTMJLyogMTQgKi8KLSNkZWZpbmUJQkdfQkFORF9SRUdJT05fNF9TSVpFCTEKLSNkZWZpbmUJQkdfQkFORF9SRUdJT05fNV9TVEFSVAkwCS8qIDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0ICovCi0jZGVmaW5lCUJHX0JBTkRfUkVHSU9OXzVfU0laRQkxNAotI2RlZmluZQlCR19CQU5EX1JFR0lPTl82X1NUQVJUCTIJLyogMyw0LDUsNiw3LDgsOSAqLwotI2RlZmluZQlCR19CQU5EX1JFR0lPTl82X1NJWkUJNwotI2RlZmluZQlCR19CQU5EX1JFR0lPTl83X1NUQVJUCTQJLyogNSw2LDcsOCw5LDEwLDExLDEyLDEzICovCi0jZGVmaW5lCUJHX0JBTkRfUkVHSU9OXzdfU0laRQk5Ci0jZGVmaW5lCUJHX0JBTkRfUkVHSU9OXzMxX1NUQVJUCTAJLyogMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQgKi8KLSNkZWZpbmUJQkdfQkFORF9SRUdJT05fMzFfU0laRQkxNAotCi0vKiA1IEdoeiBjaGFubmVsIHBsYW4gaW5kZXggaW4gdGhlIFR4UG93ZXIgYXJyYXlzLiAqLwotdTggQV9CQU5EX1JFR0lPTl8wX0NIQU5ORUxfTElTVFtdID0KLSAgICB7IDM2LCA0MCwgNDQsIDQ4LCA1MiwgNTYsIDYwLCA2NCwgMTQ5LCAxNTMsIDE1NywgMTYxLCAxNjUgfTsKLXU4IEFfQkFORF9SRUdJT05fMV9DSEFOTkVMX0xJU1RbXSA9Ci0gICAgeyAzNiwgNDAsIDQ0LCA0OCwgNTIsIDU2LCA2MCwgNjQsIDEwMCwgMTA0LCAxMDgsIDExMiwgMTE2LCAxMjAsIDEyNCwgMTI4LAotMTMyLCAxMzYsIDE0MCB9OwotdTggQV9CQU5EX1JFR0lPTl8yX0NIQU5ORUxfTElTVFtdID0geyAzNiwgNDAsIDQ0LCA0OCwgNTIsIDU2LCA2MCwgNjQgfTsKLXU4IEFfQkFORF9SRUdJT05fM19DSEFOTkVMX0xJU1RbXSA9IHsgNTIsIDU2LCA2MCwgNjQsIDE0OSwgMTUzLCAxNTcsIDE2MSB9OwotdTggQV9CQU5EX1JFR0lPTl80X0NIQU5ORUxfTElTVFtdID0geyAxNDksIDE1MywgMTU3LCAxNjEsIDE2NSB9OwotdTggQV9CQU5EX1JFR0lPTl81X0NIQU5ORUxfTElTVFtdID0geyAxNDksIDE1MywgMTU3LCAxNjEgfTsKLXU4IEFfQkFORF9SRUdJT05fNl9DSEFOTkVMX0xJU1RbXSA9IHsgMzYsIDQwLCA0NCwgNDggfTsKLXU4IEFfQkFORF9SRUdJT05fN19DSEFOTkVMX0xJU1RbXSA9Ci0gICAgeyAzNiwgNDAsIDQ0LCA0OCwgNTIsIDU2LCA2MCwgNjQsIDEwMCwgMTA0LCAxMDgsIDExMiwgMTE2LCAxMjAsIDEyNCwgMTI4LAotMTMyLCAxMzYsIDE0MCwgMTQ5LCAxNTMsIDE1NywgMTYxLCAxNjUsIDE2OSwgMTczIH07Ci11OCBBX0JBTkRfUkVHSU9OXzhfQ0hBTk5FTF9MSVNUW10gPSB7IDUyLCA1NiwgNjAsIDY0IH07Ci11OCBBX0JBTkRfUkVHSU9OXzlfQ0hBTk5FTF9MSVNUW10gPQotICAgIHsgMzYsIDQwLCA0NCwgNDgsIDUyLCA1NiwgNjAsIDY0LCAxMDAsIDEwNCwgMTA4LCAxMTIsIDExNiwgMTMyLCAxMzYsIDE0MCwKLTE0OSwgMTUzLCAxNTcsIDE2MSwgMTY1IH07Ci11OCBBX0JBTkRfUkVHSU9OXzEwX0NIQU5ORUxfTElTVFtdID0KLSAgICB7IDM2LCA0MCwgNDQsIDQ4LCAxNDksIDE1MywgMTU3LCAxNjEsIDE2NSB9OwotdTggQV9CQU5EX1JFR0lPTl8xMV9DSEFOTkVMX0xJU1RbXSA9Ci0gICAgeyAzNiwgNDAsIDQ0LCA0OCwgNTIsIDU2LCA2MCwgNjQsIDEwMCwgMTA0LCAxMDgsIDExMiwgMTE2LCAxMjAsIDE0OSwgMTUzLAotMTU3LCAxNjEgfTsKLXU4IEFfQkFORF9SRUdJT05fMTJfQ0hBTk5FTF9MSVNUW10gPQotICAgIHsgMzYsIDQwLCA0NCwgNDgsIDUyLCA1NiwgNjAsIDY0LCAxMDAsIDEwNCwgMTA4LCAxMTIsIDExNiwgMTIwLCAxMjQsIDEyOCwKLTEzMiwgMTM2LCAxNDAgfTsKLXU4IEFfQkFORF9SRUdJT05fMTNfQ0hBTk5FTF9MSVNUW10gPQotICAgIHsgNTIsIDU2LCA2MCwgNjQsIDEwMCwgMTA0LCAxMDgsIDExMiwgMTE2LCAxMjAsIDEyNCwgMTI4LCAxMzIsIDEzNiwgMTQwLAotMTQ5LCAxNTMsIDE1NywgMTYxIH07Ci11OCBBX0JBTkRfUkVHSU9OXzE0X0NIQU5ORUxfTElTVFtdID0KLSAgICB7IDM2LCA0MCwgNDQsIDQ4LCA1MiwgNTYsIDYwLCA2NCwgMTAwLCAxMDQsIDEwOCwgMTEyLCAxMTYsIDEzNiwgMTQwLCAxNDksCi0xNTMsIDE1NywgMTYxLCAxNjUgfTsKLXU4IEFfQkFORF9SRUdJT05fMTVfQ0hBTk5FTF9MSVNUW10gPSB7IDE0OSwgMTUzLCAxNTcsIDE2MSwgMTY1LCAxNjksIDE3MyB9OwotCi0vKkJhU2l6ZUFycmF5IGZvbGxvd3MgdGhlIDgwMi4xMW4gZGVmaW5pdGlvbiBhcyBNYXhSeEZhY3Rvci4gIDJeKDEzK2ZhY3RvcikgYnl0ZXMuIFdoZW4gZmFjdG9yID0wLCBpdCdzIGFib3V0IEJhIGJ1ZmZlciBzaXplID04LiAqLwotdTggQmFTaXplQXJyYXlbNF0gPSB7IDgsIDE2LCAzMiwgNjQgfTsKLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlVcGRhdGUgU3RhQ2ZnLT5DaGFubmVsTGlzdFtdIGFjY29yZGluZyB0byAxKSBDb3VudHJ5IFJlZ2lvbiAyKSBSRiBJQyB0eXBlLAotCQlhbmQgMykgUEhZLW1vZGUgdXNlciBzZWxlY3RlZC4KLQkJVGhlIG91dGNvbWUgaXMgdXNlZCBieSBkcml2ZXIgd2hlbiBkb2luZyBzaXRlIHN1cnZleS4KLQotCUlSUUwgPSBQQVNTSVZFX0xFVkVMCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi12b2lkIEJ1aWxkQ2hhbm5lbExpc3Qoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCXU4IGksIGosIGluZGV4ID0gMCwgbnVtID0gMDsKLQl1OCAqcENoYW5uZWxMaXN0ID0gTlVMTDsKLQotCU5kaXNaZXJvTWVtb3J5KHBBZC0+Q2hhbm5lbExpc3QsCi0JCSAgICAgICBNQVhfTlVNX09GX0NIQU5ORUxTICogc2l6ZW9mKHN0cnVjdCBydF9jaGFubmVsX3R4X3Bvd2VyKSk7Ci0KLQkvKiBpZiBub3QgMTFhLW9ubHkgbW9kZSwgY2hhbm5lbCBsaXN0IHN0YXJ0cyBmcm9tIDIuNEdoeiBiYW5kICovCi0JaWYgKChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlICE9IFBIWV8xMUEpCi0JICAgICYmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlICE9IFBIWV8xMUFOX01JWEVEKQotCSAgICAmJiAocEFkLT5Db21tb25DZmcuUGh5TW9kZSAhPSBQSFlfMTFOXzVHKQotCSAgICApIHsKLQkJc3dpdGNoIChwQWQtPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uICYgMHg3ZikgewotCQljYXNlIFJFR0lPTl8wX0JHX0JBTkQ6CS8qIDEgLTExICovCi0JCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5DaGFubmVsTGlzdFtpbmRleF0sCi0JCQkJICAgICAgICZwQWQtPlR4UG93ZXJbQkdfQkFORF9SRUdJT05fMF9TVEFSVF0sCi0JCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcnRfY2hhbm5lbF90eF9wb3dlcikgKgotCQkJCSAgICAgICBCR19CQU5EX1JFR0lPTl8wX1NJWkUpOwotCQkJaW5kZXggKz0gQkdfQkFORF9SRUdJT05fMF9TSVpFOwotCQkJYnJlYWs7Ci0JCWNhc2UgUkVHSU9OXzFfQkdfQkFORDoJLyogMSAtIDEzICovCi0JCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5DaGFubmVsTGlzdFtpbmRleF0sCi0JCQkJICAgICAgICZwQWQtPlR4UG93ZXJbQkdfQkFORF9SRUdJT05fMV9TVEFSVF0sCi0JCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcnRfY2hhbm5lbF90eF9wb3dlcikgKgotCQkJCSAgICAgICBCR19CQU5EX1JFR0lPTl8xX1NJWkUpOwotCQkJaW5kZXggKz0gQkdfQkFORF9SRUdJT05fMV9TSVpFOwotCQkJYnJlYWs7Ci0JCWNhc2UgUkVHSU9OXzJfQkdfQkFORDoJLyogMTAgLSAxMSAqLwotCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+Q2hhbm5lbExpc3RbaW5kZXhdLAotCQkJCSAgICAgICAmcEFkLT5UeFBvd2VyW0JHX0JBTkRfUkVHSU9OXzJfU1RBUlRdLAotCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHJ0X2NoYW5uZWxfdHhfcG93ZXIpICoKLQkJCQkgICAgICAgQkdfQkFORF9SRUdJT05fMl9TSVpFKTsKLQkJCWluZGV4ICs9IEJHX0JBTkRfUkVHSU9OXzJfU0laRTsKLQkJCWJyZWFrOwotCQljYXNlIFJFR0lPTl8zX0JHX0JBTkQ6CS8qIDEwIC0gMTMgKi8KLQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPkNoYW5uZWxMaXN0W2luZGV4XSwKLQkJCQkgICAgICAgJnBBZC0+VHhQb3dlcltCR19CQU5EX1JFR0lPTl8zX1NUQVJUXSwKLQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBydF9jaGFubmVsX3R4X3Bvd2VyKSAqCi0JCQkJICAgICAgIEJHX0JBTkRfUkVHSU9OXzNfU0laRSk7Ci0JCQlpbmRleCArPSBCR19CQU5EX1JFR0lPTl8zX1NJWkU7Ci0JCQlicmVhazsKLQkJY2FzZSBSRUdJT05fNF9CR19CQU5EOgkvKiAxNCAqLwotCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+Q2hhbm5lbExpc3RbaW5kZXhdLAotCQkJCSAgICAgICAmcEFkLT5UeFBvd2VyW0JHX0JBTkRfUkVHSU9OXzRfU1RBUlRdLAotCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHJ0X2NoYW5uZWxfdHhfcG93ZXIpICoKLQkJCQkgICAgICAgQkdfQkFORF9SRUdJT05fNF9TSVpFKTsKLQkJCWluZGV4ICs9IEJHX0JBTkRfUkVHSU9OXzRfU0laRTsKLQkJCWJyZWFrOwotCQljYXNlIFJFR0lPTl81X0JHX0JBTkQ6CS8qIDEgLSAxNCAqLwotCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+Q2hhbm5lbExpc3RbaW5kZXhdLAotCQkJCSAgICAgICAmcEFkLT5UeFBvd2VyW0JHX0JBTkRfUkVHSU9OXzVfU1RBUlRdLAotCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHJ0X2NoYW5uZWxfdHhfcG93ZXIpICoKLQkJCQkgICAgICAgQkdfQkFORF9SRUdJT05fNV9TSVpFKTsKLQkJCWluZGV4ICs9IEJHX0JBTkRfUkVHSU9OXzVfU0laRTsKLQkJCWJyZWFrOwotCQljYXNlIFJFR0lPTl82X0JHX0JBTkQ6CS8qIDMgLSA5ICovCi0JCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5DaGFubmVsTGlzdFtpbmRleF0sCi0JCQkJICAgICAgICZwQWQtPlR4UG93ZXJbQkdfQkFORF9SRUdJT05fNl9TVEFSVF0sCi0JCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcnRfY2hhbm5lbF90eF9wb3dlcikgKgotCQkJCSAgICAgICBCR19CQU5EX1JFR0lPTl82X1NJWkUpOwotCQkJaW5kZXggKz0gQkdfQkFORF9SRUdJT05fNl9TSVpFOwotCQkJYnJlYWs7Ci0JCWNhc2UgUkVHSU9OXzdfQkdfQkFORDoJLyogNSAtIDEzICovCi0JCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5DaGFubmVsTGlzdFtpbmRleF0sCi0JCQkJICAgICAgICZwQWQtPlR4UG93ZXJbQkdfQkFORF9SRUdJT05fN19TVEFSVF0sCi0JCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcnRfY2hhbm5lbF90eF9wb3dlcikgKgotCQkJCSAgICAgICBCR19CQU5EX1JFR0lPTl83X1NJWkUpOwotCQkJaW5kZXggKz0gQkdfQkFORF9SRUdJT05fN19TSVpFOwotCQkJYnJlYWs7Ci0JCWNhc2UgUkVHSU9OXzMxX0JHX0JBTkQ6CS8qIDEgLSAxNCAqLwotCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+Q2hhbm5lbExpc3RbaW5kZXhdLAotCQkJCSAgICAgICAmcEFkLT5UeFBvd2VyW0JHX0JBTkRfUkVHSU9OXzMxX1NUQVJUXSwKLQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBydF9jaGFubmVsX3R4X3Bvd2VyKSAqCi0JCQkJICAgICAgIEJHX0JBTkRfUkVHSU9OXzMxX1NJWkUpOwotCQkJaW5kZXggKz0gQkdfQkFORF9SRUdJT05fMzFfU0laRTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgkvKiBFcnJvci4gc2hvdWxkIG5ldmVyIGhhcHBlbiAqLwotCQkJYnJlYWs7Ci0JCX0KLQkJZm9yIChpID0gMDsgaSA8IGluZGV4OyBpKyspCi0JCQlwQWQtPkNoYW5uZWxMaXN0W2ldLk1heFR4UHdyID0gMjA7Ci0JfQotCi0JaWYgKChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUEpCi0JICAgIHx8IChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUFCR19NSVhFRCkKLQkgICAgfHwgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQUJHTl9NSVhFRCkKLQkgICAgfHwgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQU5fTUlYRUQpCi0JICAgIHx8IChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUFHTl9NSVhFRCkKLQkgICAgfHwgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExTl81RykKLQkgICAgKSB7Ci0JCXN3aXRjaCAocEFkLT5Db21tb25DZmcuQ291bnRyeVJlZ2lvbkZvckFCYW5kICYgMHg3ZikgewotCQljYXNlIFJFR0lPTl8wX0FfQkFORDoKLQkJCW51bSA9Ci0JCQkgICAgc2l6ZW9mKEFfQkFORF9SRUdJT05fMF9DSEFOTkVMX0xJU1QpIC8KLQkJCSAgICBzaXplb2YodTgpOwotCQkJcENoYW5uZWxMaXN0ID0gQV9CQU5EX1JFR0lPTl8wX0NIQU5ORUxfTElTVDsKLQkJCWJyZWFrOwotCQljYXNlIFJFR0lPTl8xX0FfQkFORDoKLQkJCW51bSA9Ci0JCQkgICAgc2l6ZW9mKEFfQkFORF9SRUdJT05fMV9DSEFOTkVMX0xJU1QpIC8KLQkJCSAgICBzaXplb2YodTgpOwotCQkJcENoYW5uZWxMaXN0ID0gQV9CQU5EX1JFR0lPTl8xX0NIQU5ORUxfTElTVDsKLQkJCWJyZWFrOwotCQljYXNlIFJFR0lPTl8yX0FfQkFORDoKLQkJCW51bSA9Ci0JCQkgICAgc2l6ZW9mKEFfQkFORF9SRUdJT05fMl9DSEFOTkVMX0xJU1QpIC8KLQkJCSAgICBzaXplb2YodTgpOwotCQkJcENoYW5uZWxMaXN0ID0gQV9CQU5EX1JFR0lPTl8yX0NIQU5ORUxfTElTVDsKLQkJCWJyZWFrOwotCQljYXNlIFJFR0lPTl8zX0FfQkFORDoKLQkJCW51bSA9Ci0JCQkgICAgc2l6ZW9mKEFfQkFORF9SRUdJT05fM19DSEFOTkVMX0xJU1QpIC8KLQkJCSAgICBzaXplb2YodTgpOwotCQkJcENoYW5uZWxMaXN0ID0gQV9CQU5EX1JFR0lPTl8zX0NIQU5ORUxfTElTVDsKLQkJCWJyZWFrOwotCQljYXNlIFJFR0lPTl80X0FfQkFORDoKLQkJCW51bSA9Ci0JCQkgICAgc2l6ZW9mKEFfQkFORF9SRUdJT05fNF9DSEFOTkVMX0xJU1QpIC8KLQkJCSAgICBzaXplb2YodTgpOwotCQkJcENoYW5uZWxMaXN0ID0gQV9CQU5EX1JFR0lPTl80X0NIQU5ORUxfTElTVDsKLQkJCWJyZWFrOwotCQljYXNlIFJFR0lPTl81X0FfQkFORDoKLQkJCW51bSA9Ci0JCQkgICAgc2l6ZW9mKEFfQkFORF9SRUdJT05fNV9DSEFOTkVMX0xJU1QpIC8KLQkJCSAgICBzaXplb2YodTgpOwotCQkJcENoYW5uZWxMaXN0ID0gQV9CQU5EX1JFR0lPTl81X0NIQU5ORUxfTElTVDsKLQkJCWJyZWFrOwotCQljYXNlIFJFR0lPTl82X0FfQkFORDoKLQkJCW51bSA9Ci0JCQkgICAgc2l6ZW9mKEFfQkFORF9SRUdJT05fNl9DSEFOTkVMX0xJU1QpIC8KLQkJCSAgICBzaXplb2YodTgpOwotCQkJcENoYW5uZWxMaXN0ID0gQV9CQU5EX1JFR0lPTl82X0NIQU5ORUxfTElTVDsKLQkJCWJyZWFrOwotCQljYXNlIFJFR0lPTl83X0FfQkFORDoKLQkJCW51bSA9Ci0JCQkgICAgc2l6ZW9mKEFfQkFORF9SRUdJT05fN19DSEFOTkVMX0xJU1QpIC8KLQkJCSAgICBzaXplb2YodTgpOwotCQkJcENoYW5uZWxMaXN0ID0gQV9CQU5EX1JFR0lPTl83X0NIQU5ORUxfTElTVDsKLQkJCWJyZWFrOwotCQljYXNlIFJFR0lPTl84X0FfQkFORDoKLQkJCW51bSA9Ci0JCQkgICAgc2l6ZW9mKEFfQkFORF9SRUdJT05fOF9DSEFOTkVMX0xJU1QpIC8KLQkJCSAgICBzaXplb2YodTgpOwotCQkJcENoYW5uZWxMaXN0ID0gQV9CQU5EX1JFR0lPTl84X0NIQU5ORUxfTElTVDsKLQkJCWJyZWFrOwotCQljYXNlIFJFR0lPTl85X0FfQkFORDoKLQkJCW51bSA9Ci0JCQkgICAgc2l6ZW9mKEFfQkFORF9SRUdJT05fOV9DSEFOTkVMX0xJU1QpIC8KLQkJCSAgICBzaXplb2YodTgpOwotCQkJcENoYW5uZWxMaXN0ID0gQV9CQU5EX1JFR0lPTl85X0NIQU5ORUxfTElTVDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUkVHSU9OXzEwX0FfQkFORDoKLQkJCW51bSA9Ci0JCQkgICAgc2l6ZW9mKEFfQkFORF9SRUdJT05fMTBfQ0hBTk5FTF9MSVNUKSAvCi0JCQkgICAgc2l6ZW9mKHU4KTsKLQkJCXBDaGFubmVsTGlzdCA9IEFfQkFORF9SRUdJT05fMTBfQ0hBTk5FTF9MSVNUOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBSRUdJT05fMTFfQV9CQU5EOgotCQkJbnVtID0KLQkJCSAgICBzaXplb2YoQV9CQU5EX1JFR0lPTl8xMV9DSEFOTkVMX0xJU1QpIC8KLQkJCSAgICBzaXplb2YodTgpOwotCQkJcENoYW5uZWxMaXN0ID0gQV9CQU5EX1JFR0lPTl8xMV9DSEFOTkVMX0xJU1Q7Ci0JCQlicmVhazsKLQkJY2FzZSBSRUdJT05fMTJfQV9CQU5EOgotCQkJbnVtID0KLQkJCSAgICBzaXplb2YoQV9CQU5EX1JFR0lPTl8xMl9DSEFOTkVMX0xJU1QpIC8KLQkJCSAgICBzaXplb2YodTgpOwotCQkJcENoYW5uZWxMaXN0ID0gQV9CQU5EX1JFR0lPTl8xMl9DSEFOTkVMX0xJU1Q7Ci0JCQlicmVhazsKLQkJY2FzZSBSRUdJT05fMTNfQV9CQU5EOgotCQkJbnVtID0KLQkJCSAgICBzaXplb2YoQV9CQU5EX1JFR0lPTl8xM19DSEFOTkVMX0xJU1QpIC8KLQkJCSAgICBzaXplb2YodTgpOwotCQkJcENoYW5uZWxMaXN0ID0gQV9CQU5EX1JFR0lPTl8xM19DSEFOTkVMX0xJU1Q7Ci0JCQlicmVhazsKLQkJY2FzZSBSRUdJT05fMTRfQV9CQU5EOgotCQkJbnVtID0KLQkJCSAgICBzaXplb2YoQV9CQU5EX1JFR0lPTl8xNF9DSEFOTkVMX0xJU1QpIC8KLQkJCSAgICBzaXplb2YodTgpOwotCQkJcENoYW5uZWxMaXN0ID0gQV9CQU5EX1JFR0lPTl8xNF9DSEFOTkVMX0xJU1Q7Ci0JCQlicmVhazsKLQkJY2FzZSBSRUdJT05fMTVfQV9CQU5EOgotCQkJbnVtID0KLQkJCSAgICBzaXplb2YoQV9CQU5EX1JFR0lPTl8xNV9DSEFOTkVMX0xJU1QpIC8KLQkJCSAgICBzaXplb2YodTgpOwotCQkJcENoYW5uZWxMaXN0ID0gQV9CQU5EX1JFR0lPTl8xNV9DSEFOTkVMX0xJU1Q7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoJLyogRXJyb3IuIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KLQkJCURCR1BSSU5UKFJUX0RFQlVHX1dBUk4sCi0JCQkJICgiY291bnRyeXJlZ2lvbj0lZCBub3Qgc3VwcG9ydCIsCi0JCQkJICBwQWQtPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uRm9yQUJhbmQpKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKG51bSAhPSAwKSB7Ci0JCQl1OCBSYWRhckNoWzE1XSA9Ci0JCQkgICAgeyA1MiwgNTYsIDYwLCA2NCwgMTAwLCAxMDQsIDEwOCwgMTEyLCAxMTYsIDEyMCwgMTI0LAotCQkgICAgMTI4LCAxMzIsIDEzNiwgMTQwIH07Ci0JCQlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKLQkJCQlmb3IgKGogPSAwOyBqIDwgTUFYX05VTV9PRl9DSEFOTkVMUzsgaisrKSB7Ci0JCQkJCWlmIChwQ2hhbm5lbExpc3RbaV0gPT0KLQkJCQkJICAgIHBBZC0+VHhQb3dlcltqXS5DaGFubmVsKQotCQkJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+Ci0JCQkJCQkJICAgICAgIENoYW5uZWxMaXN0W2luZGV4Ci0JCQkJCQkJCQkgICArIGldLAotCQkJCQkJCSAgICAgICAmcEFkLT5UeFBvd2VyW2pdLAotCQkJCQkJCSAgICAgICBzaXplb2YKLQkJCQkJCQkgICAgICAgKHN0cnVjdCBydF9jaGFubmVsX3R4X3Bvd2VyKSk7Ci0JCQkJfQotCQkJCWZvciAoaiA9IDA7IGogPCAxNTsgaisrKSB7Ci0JCQkJCWlmIChwQ2hhbm5lbExpc3RbaV0gPT0gUmFkYXJDaFtqXSkKLQkJCQkJCXBBZC0+Q2hhbm5lbExpc3RbaW5kZXggKwotCQkJCQkJCQkgaV0uRGZzUmVxID0KLQkJCQkJCSAgICBUUlVFOwotCQkJCX0KLQkJCQlwQWQtPkNoYW5uZWxMaXN0W2luZGV4ICsgaV0uTWF4VHhQd3IgPSAyMDsKLQkJCX0KLQkJCWluZGV4ICs9IG51bTsKLQkJfQotCX0KLQotCXBBZC0+Q2hhbm5lbExpc3ROdW0gPSBpbmRleDsKLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJICgiY291bnRyeSBjb2RlPSVkLyVkLCBSRklDPSVkLCBQSFkgbW9kZT0lZCwgc3VwcG9ydCAlZCBjaGFubmVsc1xuIiwKLQkJICBwQWQtPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uLAotCQkgIHBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlSZWdpb25Gb3JBQmFuZCwgcEFkLT5SZkljVHlwZSwKLQkJICBwQWQtPkNvbW1vbkNmZy5QaHlNb2RlLCBwQWQtPkNoYW5uZWxMaXN0TnVtKSk7Ci0jaWZkZWYgREJHCi0JZm9yIChpID0gMDsgaSA8IHBBZC0+Q2hhbm5lbExpc3ROdW07IGkrKykgewotCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsCi0JCQkgICAgICgiQnVpbGRDaGFubmVsICMgJWQgOjogUHdyMCA9ICVkLCBQd3IxID0lZCwgXG4gIiwKLQkJCSAgICAgIHBBZC0+Q2hhbm5lbExpc3RbaV0uQ2hhbm5lbCwKLQkJCSAgICAgIHBBZC0+Q2hhbm5lbExpc3RbaV0uUG93ZXIsCi0JCQkgICAgICBwQWQtPkNoYW5uZWxMaXN0W2ldLlBvd2VyMikpOwotCX0KLSNlbmRpZgotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JCVRoaXMgcm91dGluZSByZXR1cm4gdGhlIGZpcnN0IGNoYW5uZWwgbnVtYmVyIGFjY29yZGluZyB0byB0aGUgY291bnRyeQotCQljb2RlIHNlbGVjdGlvbiBhbmQgUkYgSUMgc2VsZWN0aW9uIChzaWduYWwgYmFuZCBvciBkdWFsIGJhbmQpLiBJdCBpcyBjYWxsZWQKLQkJd2hlbmV2ZXIgZHJpdmVyIG5lZWQgdG8gc3RhcnQgYSBzaXRlIHN1cnZleSBvZiBhbGwgc3VwcG9ydGVkIGNoYW5uZWxzLgotCVJldHVybjoKLQkJY2ggLSB0aGUgZmlyc3QgY2hhbm5lbCBudW1iZXIgb2YgY3VycmVudCBjb3VudHJ5IGNvZGUgc2V0dGluZwotCi0JSVJRTCA9IFBBU1NJVkVfTEVWRUwKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXU4IEZpcnN0Q2hhbm5lbChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0JcmV0dXJuIHBBZC0+Q2hhbm5lbExpc3RbMF0uQ2hhbm5lbDsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgbmV4dCBjaGFubmVsIG51bWJlci4gVGhpcyByb3V0aW5lIGlzIGNhbGxlZAotCQlkdXJpbmcgZHJpdmVyIG5lZWQgdG8gc3RhcnQgYSBzaXRlIHN1cnZleSBvZiBhbGwgc3VwcG9ydGVkIGNoYW5uZWxzLgotCVJldHVybjoKLQkJbmV4dF9jaGFubmVsIC0gdGhlIG5leHQgY2hhbm5lbCBudW1iZXIgdmFsaWQgaW4gY3VycmVudCBjb3VudHJ5IGNvZGUgc2V0dGluZy4KLQlOb3RlOgotCQlyZXR1cm4gMCBpZiBubyBtb3JlIG5leHQgY2hhbm5lbAotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXU4IE5leHRDaGFubmVsKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggY2hhbm5lbCkKLXsKLQlpbnQgaTsKLQl1OCBuZXh0X2NoYW5uZWwgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IChwQWQtPkNoYW5uZWxMaXN0TnVtIC0gMSk7IGkrKykKLQkJaWYgKGNoYW5uZWwgPT0gcEFkLT5DaGFubmVsTGlzdFtpXS5DaGFubmVsKSB7Ci0JCQluZXh0X2NoYW5uZWwgPSBwQWQtPkNoYW5uZWxMaXN0W2kgKyAxXS5DaGFubmVsOwotCQkJYnJlYWs7Ci0JCX0KLQlyZXR1cm4gbmV4dF9jaGFubmVsOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JCVRoaXMgcm91dGluZSBpcyBmb3IgQ2lzY28gQ29tcGF0aWJsZSBFeHRlbnNpb25zIDIuWAotCQlTcGVjMzEuIEFQIENvbnRyb2wgb2YgQ2xpZW50IFRyYW5zbWl0IFBvd2VyCi0JUmV0dXJuOgotCQlOb25lCi0JTm90ZToKLQkgICBSZXF1aXJlZCBieSBBaXJvbmV0IGRCbShtVykKLQkJICAgMGRCbSgxbVcpLCAgIDFkQm0oNW1XKSwgMTNkQm0oMjBtVyksIDE1ZEJtKDMwbVcpLAotCQkgIDE3ZEJtKDUwbXcpLCAyMGRCbSgxMDBtVykKLQotCSAgIFdlIHN1cHBvcnRlZAotCQkgICAzZEJtKExvd2VzdCksIDZkQm0oMTAlKSwgOWRCbSgyNSUpLCAxMmRCbSg1MCUpLAotCQkgIDE0ZEJtKDc1JSksICAgMTVkQm0oMTAwJSkKLQotCQlUaGUgY2xpZW50IHN0YXRpb24ncyBhY3R1YWwgdHJhbnNtaXQgcG93ZXIgc2hhbGwgYmUgd2l0aGluICsvLSA1ZEIgb2YKLQkJdGhlIG1pbmltdW0gdmFsdWUgb3IgbmV4dCBsb3dlciB2YWx1ZS4KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi12b2lkIENoYW5nZVRvQ2VsbFBvd2VyTGltaXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgIHU4IEFpcm9uZXRDZWxsUG93ZXJMaW1pdCkKLXsKLQkvKnZhbHVkIDB4RkYgbWVhbnMgdGhhdCBoYXNuJ3QgZm91bmQgcG93ZXIgbGltaXQgaW5mb3JtYXRpb24gKi8KLQkvKmZyb20gdGhlIEFQJ3MgQmVhY29uL1Byb2JlIHJlc3BvbnNlLiAqLwotCWlmIChBaXJvbmV0Q2VsbFBvd2VyTGltaXQgPT0gMHhGRikKLQkJcmV0dXJuOwotCi0JaWYgKEFpcm9uZXRDZWxsUG93ZXJMaW1pdCA8IDYpCS8qVXNlZCBMb3dlc3QgUG93ZXIgUGVyY2VudGFnZS4gKi8KLQkJcEFkLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UgPSA2OwotCWVsc2UgaWYgKEFpcm9uZXRDZWxsUG93ZXJMaW1pdCA8IDkpCi0JCXBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID0gMTA7Ci0JZWxzZSBpZiAoQWlyb25ldENlbGxQb3dlckxpbWl0IDwgMTIpCi0JCXBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID0gMjU7Ci0JZWxzZSBpZiAoQWlyb25ldENlbGxQb3dlckxpbWl0IDwgMTQpCi0JCXBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID0gNTA7Ci0JZWxzZSBpZiAoQWlyb25ldENlbGxQb3dlckxpbWl0IDwgMTUpCi0JCXBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID0gNzU7Ci0JZWxzZQotCQlwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA9IDEwMDsJLyplbHNlIHVzZWQgbWF4aW11bSAqLwotCi0JaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID4gcEFkLT5Db21tb25DZmcuVHhQb3dlckRlZmF1bHQpCi0JCXBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID0KLQkJICAgIHBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJEZWZhdWx0OwotCi19Ci0KLWNoYXIgQ29udmVydFRvUnNzaShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIGNoYXIgUnNzaSwgdTggUnNzaU51bWJlcikKLXsKLQl1OCBSc3NpT2Zmc2V0LCBMTkFHYWluOwotCi0JLyogUnNzaSBlcXVhbHMgdG8gemVybyBzaG91bGQgYmUgYW4gaW52YWxpZCB2YWx1ZSAqLwotCWlmIChSc3NpID09IDApCi0JCXJldHVybiAtOTk7Ci0KLQlMTkFHYWluID0gR0VUX0xOQV9HQUlOKHBBZCk7Ci0JaWYgKHBBZC0+TGF0Y2hSZlJlZ3MuQ2hhbm5lbCA+IDE0KSB7Ci0JCWlmIChSc3NpTnVtYmVyID09IDApCi0JCQlSc3NpT2Zmc2V0ID0gcEFkLT5BUnNzaU9mZnNldDA7Ci0JCWVsc2UgaWYgKFJzc2lOdW1iZXIgPT0gMSkKLQkJCVJzc2lPZmZzZXQgPSBwQWQtPkFSc3NpT2Zmc2V0MTsKLQkJZWxzZQotCQkJUnNzaU9mZnNldCA9IHBBZC0+QVJzc2lPZmZzZXQyOwotCX0gZWxzZSB7Ci0JCWlmIChSc3NpTnVtYmVyID09IDApCi0JCQlSc3NpT2Zmc2V0ID0gcEFkLT5CR1Jzc2lPZmZzZXQwOwotCQllbHNlIGlmIChSc3NpTnVtYmVyID09IDEpCi0JCQlSc3NpT2Zmc2V0ID0gcEFkLT5CR1Jzc2lPZmZzZXQxOwotCQllbHNlCi0JCQlSc3NpT2Zmc2V0ID0gcEFkLT5CR1Jzc2lPZmZzZXQyOwotCX0KLQotCXJldHVybiAoLTEyIC0gUnNzaU9mZnNldCAtIExOQUdhaW4gLSBSc3NpKTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlTY2FuIG5leHQgY2hhbm5lbAotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgU2Nhbk5leHRDaGFubmVsKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSBIZHI4MDIxMTsKLQl1OCAqcE91dEJ1ZmZlciA9IE5VTEw7Ci0JaW50IE5TdGF0dXM7Ci0JdW5zaWduZWQgbG9uZyBGcmFtZUxlbiA9IDA7Ci0JdTggU3NpZExlbiA9IDAsIFNjYW5UeXBlID0gcEFkLT5NbG1lQXV4LlNjYW5UeXBlLCBCQlBWYWx1ZSA9IDA7Ci0JdTE2IFN0YXR1czsKLQlzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSAqIHBIZHI4MDIxMTsKLQl1MzIgU2NhblRpbWVJbjVnQ2hhbm5lbCA9IFNIT1JUX0NIQU5ORUxfVElNRTsKLQotCXsKLQkJaWYgKE1PTklUT1JfT04ocEFkKSkKLQkJCXJldHVybjsKLQl9Ci0KLQlpZiAocEFkLT5NbG1lQXV4LkNoYW5uZWwgPT0gMCkgewotCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLkJCUEN1cnJlbnRCVyA9PSBCV180MCkKLQkJICAgICYmIChJTkZSQV9PTihwQWQpCi0JCQl8fCAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX0FQKSkKLQkJICAgICkgewotCQkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCwKLQkJCQkJICBGQUxTRSk7Ci0JCQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCk7Ci0JCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsICZCQlBWYWx1ZSk7Ci0JCQlCQlBWYWx1ZSAmPSAofjB4MTgpOwotCQkJQkJQVmFsdWUgfD0gMHgxMDsKLQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsIEJCUFZhbHVlKTsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAoIlNZTkMgLSBFbmQgb2YgU0NBTiwgcmVzdG9yZSB0byA0ME1IeiBjaGFubmVsICVkLCBUb3RhbCBCU1NbJTAyZF1cbiIsCi0JCQkJICBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCwKLQkJCQkgIHBBZC0+U2NhblRhYi5Cc3NOcikpOwotCQl9IGVsc2UgewotCQkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsLCBGQUxTRSk7Ci0JCQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKTsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAoIlNZTkMgLSBFbmQgb2YgU0NBTiwgcmVzdG9yZSB0byBjaGFubmVsICVkLCBUb3RhbCBCU1NbJTAyZF1cbiIsCi0JCQkJICBwQWQtPkNvbW1vbkNmZy5DaGFubmVsLCBwQWQtPlNjYW5UYWIuQnNzTnIpKTsKLQkJfQotCi0JCXsKLQkJCS8qICovCi0JCQkvKiBUbyBwcmV2ZW50IGRhdGEgbG9zdC4gKi8KLQkJCS8qIFNlbmQgYW4gTlVMTCBkYXRhIHdpdGggdHVybmVkIFBTTSBiaXQgb24gdG8gY3VycmVudCBhc3NvY2lhdGVkIEFQIGJlZm9yZSBTQ0FOIHByb2dyZXNzLiAqLwotCQkJLyogTm93LCB3ZSBuZWVkIHRvIHNlbmQgYW4gTlVMTCBkYXRhIHdpdGggdHVybmVkIFBTTSBiaXQgb2ZmIHRvIEFQLCB3aGVuIHNjYW4gcHJvZ3Jlc3MgZG9uZSAqLwotCQkJLyogKi8KLQkJCWlmIChPUFNUQVRVU19URVNUX0ZMQUcKLQkJCSAgICAocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkKLQkJCSAgICAmJiAoSU5GUkFfT04ocEFkKSkpIHsKLQkJCQlOU3RhdHVzID0KLQkJCQkgICAgTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwKLQkJCQkJCSAgICAgICAodm9pZCAqKSYgcE91dEJ1ZmZlcik7Ci0JCQkJaWYgKE5TdGF0dXMgPT0gTkRJU19TVEFUVVNfU1VDQ0VTUykgewotCQkJCQlwSGRyODAyMTEgPSAoc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEgKikgcE91dEJ1ZmZlcjsKLQkJCQkJTWd0TWFjSGVhZGVySW5pdChwQWQsIHBIZHI4MDIxMSwKLQkJCQkJCQkgU1VCVFlQRV9OVUxMX0ZVTkMsIDEsCi0JCQkJCQkJIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLAotCQkJCQkJCSBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7Ci0JCQkJCXBIZHI4MDIxMS0+RHVyYXRpb24gPSAwOwotCQkJCQlwSGRyODAyMTEtPkZDLlR5cGUgPSBCVFlQRV9EQVRBOwotCQkJCQlwSGRyODAyMTEtPkZDLlB3ck1nbXQgPQotCQkJCQkgICAgKHBBZC0+U3RhQ2ZnLlBzbSA9PSBQV1JfU0FWRSk7Ci0KLQkJCQkJLyogU2VuZCB1c2luZyBwcmlvcml0eSBxdWV1ZSAqLwotCQkJCQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIHBPdXRCdWZmZXIsCi0JCQkJCQkJICBzaXplb2YKLQkJCQkJCQkgIChzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSkpOwotCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkJCSAoIk1sbWVTY2FuUmVxQWN0aW9uIC0tIFNlbmQgUFNNIERhdGEgZnJhbWVcbiIpKTsKLQkJCQkJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKLQkJCQkJUlRNUHVzZWNEZWxheSg1MDAwKTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCXBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUgPSBTWU5DX0lETEU7Ci0JCQlTdGF0dXMgPSBNTE1FX1NVQ0NFU1M7Ci0JCQlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfU0NBTl9DT05GLAotCQkJCSAgICAyLCAmU3RhdHVzKTsKLQkJfQotCi0JCVJUTVBfQ0xFQVJfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MpOwotCX0KLSNpZmRlZiBSVE1QX01BQ19VU0IKLQllbHNlIGlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkKLQkJICYmIChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKSkgewotCQlwQWQtPk1sbWUuU3luY01hY2hpbmUuQ3VyclN0YXRlID0gU1lOQ19JRExFOwotCQlNbG1lQ250bENvbmZpcm0ocEFkLCBNVDJfU0NBTl9DT05GLCBNTE1FX0ZBSUxfTk9fUkVTT1VSQ0UpOwotCX0KLSNlbmRpZiAvKiBSVE1QX01BQ19VU0IgLy8gKi8KLQllbHNlIHsKLQkJewotCQkJLyogQkJQIGFuZCBSRiBhcmUgbm90IGFjY2Vzc2libGUgaW4gUFMgbW9kZSwgd2UgaGFzIHRvIHdha2UgdGhlbSB1cCBmaXJzdCAqLwotCQkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSkpCi0JCQkJQXNpY0ZvcmNlV2FrZXVwKHBBZCwgVFJVRSk7Ci0KLQkJCS8qIGxlYXZlIFBTTSBkdXJpbmcgc2Nhbm5pbmcuIG90aGVyd2lzZSB3ZSBtYXkgbG9zdCBQcm9iZVJzcCAmIEJFQUNPTiAqLwotCQkJaWYgKHBBZC0+U3RhQ2ZnLlBzbSA9PSBQV1JfU0FWRSkKLQkJCQlSVE1QX1NFVF9QU01fQklUKHBBZCwgUFdSX0FDVElWRSk7Ci0JCX0KLQotCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBBZC0+TWxtZUF1eC5DaGFubmVsLCBUUlVFKTsKLQkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5NbG1lQXV4LkNoYW5uZWwpOwotCi0JCXsKLQkJCWlmIChwQWQtPk1sbWVBdXguQ2hhbm5lbCA+IDE0KSB7Ci0JCQkJaWYgKChwQWQtPkNvbW1vbkNmZy5iSUVFRTgwMjExSCA9PSAxKQotCQkJCSAgICAmJiBSYWRhckNoYW5uZWxDaGVjayhwQWQsCi0JCQkJCQkJIHBBZC0+TWxtZUF1eC4KLQkJCQkJCQkgQ2hhbm5lbCkpIHsKLQkJCQkJU2NhblR5cGUgPSBTQ0FOX1BBU1NJVkU7Ci0JCQkJCVNjYW5UaW1lSW41Z0NoYW5uZWwgPSBNSU5fQ0hBTk5FTF9USU1FOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCS8qR2xvYmFsIGNvdW50cnkgZG9tYWluKGNoMS0xMTphY3RpdmUgc2NhbiwgY2gxMi0xNCBwYXNzaXZlIHNjYW4pICovCi0JCWlmICgocEFkLT5NbG1lQXV4LkNoYW5uZWwgPD0gMTQpICYmIChwQWQtPk1sbWVBdXguQ2hhbm5lbCA+PSAxMikKLQkJICAgICYmICgocEFkLT5Db21tb25DZmcuQ291bnRyeVJlZ2lvbiAmIDB4N2YpID09Ci0JCQlSRUdJT05fMzFfQkdfQkFORCkpIHsKLQkJCVNjYW5UeXBlID0gU0NBTl9QQVNTSVZFOwotCQl9Ci0JCS8qIFdlIG5lZWQgdG8gc2hvcnRlbiBhY3RpdmUgc2NhbiB0aW1lIGluIG9yZGVyIGZvciBXWkMgY29ubmVjdCBpc3N1ZSAqLwotCQkvKiBDaG5hZ2UgdGhlIGNoYW5uZWwgc2NhbiB0aW1lIGZvciBDSVNDTyBzdHVmZiBiYXNlZCBvbiBpdHMgSUFQUCBhbm5vdW5jZW1lbnQgKi8KLQkJaWYgKFNjYW5UeXBlID09IEZBU1RfU0NBTl9BQ1RJVkUpCi0JCQlSVE1QU2V0VGltZXIoJnBBZC0+TWxtZUF1eC5TY2FuVGltZXIsCi0JCQkJICAgICBGQVNUX0FDVElWRV9TQ0FOX1RJTUUpOwotCQllbHNlCQkvKiBtdXN0IGJlIFNDQU5fUEFTU0lWRSBvciBTQ0FOX0FDVElWRSAqLwotCQl7Ci0JCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQUJHX01JWEVEKQotCQkJICAgIHx8IChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUFCR05fTUlYRUQpCi0JCQkgICAgfHwgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQUdOX01JWEVEKQotCQkJICAgICkgewotCQkJCWlmIChwQWQtPk1sbWVBdXguQ2hhbm5lbCA+IDE0KQotCQkJCQlSVE1QU2V0VGltZXIoJnBBZC0+TWxtZUF1eC5TY2FuVGltZXIsCi0JCQkJCQkgICAgIFNjYW5UaW1lSW41Z0NoYW5uZWwpOwotCQkJCWVsc2UKLQkJCQkJUlRNUFNldFRpbWVyKCZwQWQtPk1sbWVBdXguU2NhblRpbWVyLAotCQkJCQkJICAgICBNSU5fQ0hBTk5FTF9USU1FKTsKLQkJCX0gZWxzZQotCQkJCVJUTVBTZXRUaW1lcigmcEFkLT5NbG1lQXV4LlNjYW5UaW1lciwKLQkJCQkJICAgICBNQVhfQ0hBTk5FTF9USU1FKTsKLQkJfQotCi0JCWlmICgoU2NhblR5cGUgPT0gU0NBTl9BQ1RJVkUpCi0JCSAgICB8fCAoU2NhblR5cGUgPT0gRkFTVF9TQ0FOX0FDVElWRSkKLQkJICAgICkgewotCQkJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsJLypHZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeSAqLwotCQkJaWYgKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykgewotCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkgKCJTWU5DIC0gU2Nhbk5leHRDaGFubmVsKCkgYWxsb2NhdGUgbWVtb3J5IGZhaWxcbiIpKTsKLQotCQkJCXsKLQkJCQkJcEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSA9Ci0JCQkJCSAgICBTWU5DX0lETEU7Ci0JCQkJCVN0YXR1cyA9IE1MTUVfRkFJTF9OT19SRVNPVVJDRTsKLQkJCQkJTWxtZUVucXVldWUocEFkLAotCQkJCQkJICAgIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLAotCQkJCQkJICAgIE1UMl9TQ0FOX0NPTkYsIDIsICZTdGF0dXMpOwotCQkJCX0KLQotCQkJCXJldHVybjsKLQkJCX0KLQkJCS8qIFRoZXJlIGlzIG5vIG5lZWQgdG8gc2VuZCBicm9hZGNhc3QgcHJvYmUgcmVxdWVzdCBpZiBhY3RpdmUgc2NhbiBpcyBpbiBlZmZlY3QuICovCi0JCQlpZiAoKFNjYW5UeXBlID09IFNDQU5fQUNUSVZFKQotCQkJICAgIHx8IChTY2FuVHlwZSA9PSBGQVNUX1NDQU5fQUNUSVZFKQotCQkJICAgICkKLQkJCQlTc2lkTGVuID0gcEFkLT5NbG1lQXV4LlNzaWRMZW47Ci0JCQllbHNlCi0JCQkJU3NpZExlbiA9IDA7Ci0KLQkJCU1ndE1hY0hlYWRlckluaXQocEFkLCAmSGRyODAyMTEsIFNVQlRZUEVfUFJPQkVfUkVRLCAwLAotCQkJCQkgQlJPQURDQVNUX0FERFIsIEJST0FEQ0FTVF9BRERSKTsKLQkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICZGcmFtZUxlbiwKLQkJCQkJICBzaXplb2Yoc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEpLCAmSGRyODAyMTEsIDEsCi0JCQkJCSAgJlNzaWRJZSwgMSwgJlNzaWRMZW4sIFNzaWRMZW4sCi0JCQkJCSAgcEFkLT5NbG1lQXV4LlNzaWQsIDEsICZTdXBSYXRlSWUsIDEsCi0JCQkJCSAgJnBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVMZW4sCi0JCQkJCSAgcEFkLT5Db21tb25DZmcuU3VwUmF0ZUxlbiwKLQkJCQkJICBwQWQtPkNvbW1vbkNmZy5TdXBSYXRlLCBFTkRfT0ZfQVJHUyk7Ci0KLQkJCWlmIChwQWQtPkNvbW1vbkNmZy5FeHRSYXRlTGVuKSB7Ci0JCQkJdW5zaWduZWQgbG9uZyBUbXA7Ci0JCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAmVG1wLAotCQkJCQkJICAxLCAmRXh0UmF0ZUllLAotCQkJCQkJICAxLCAmcEFkLT5Db21tb25DZmcuRXh0UmF0ZUxlbiwKLQkJCQkJCSAgcEFkLT5Db21tb25DZmcuRXh0UmF0ZUxlbiwKLQkJCQkJCSAgcEFkLT5Db21tb25DZmcuRXh0UmF0ZSwKLQkJCQkJCSAgRU5EX09GX0FSR1MpOwotCQkJCUZyYW1lTGVuICs9IFRtcDsKLQkJCX0KLQotCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPj0gUEhZXzExQUJHTl9NSVhFRCkgewotCQkJCXVuc2lnbmVkIGxvbmcgVG1wOwotCQkJCXU4IEh0TGVuOwotCQkJCXU4IEJST0FEQ09NWzRdID0geyAweDAsIDB4OTAsIDB4NGMsIDB4MzMgfTsKLQotCQkJCWlmIChwQWQtPmJCcm9hZENvbUhUID09IFRSVUUpIHsKLQkJCQkJSHRMZW4gPQotCQkJCQkgICAgcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eUxlbiArIDQ7Ci0KLQkJCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLAotCQkJCQkJCSAgJlRtcCwgMSwgJldwYUllLCAxLAotCQkJCQkJCSAgJkh0TGVuLCA0LAotCQkJCQkJCSAgJkJST0FEQ09NWzBdLAotCQkJCQkJCSAgcEFkLT5NbG1lQXV4LgotCQkJCQkJCSAgSHRDYXBhYmlsaXR5TGVuLAotCQkJCQkJCSAgJnBBZC0+TWxtZUF1eC4KLQkJCQkJCQkgIEh0Q2FwYWJpbGl0eSwKLQkJCQkJCQkgIEVORF9PRl9BUkdTKTsKLQkJCQl9IGVsc2UgewotCQkJCQlIdExlbiA9IHBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHlMZW47Ci0KLQkJCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLAotCQkJCQkJCSAgJlRtcCwgMSwgJkh0Q2FwSWUsIDEsCi0JCQkJCQkJICAmSHRMZW4sIEh0TGVuLAotCQkJCQkJCSAgJnBBZC0+Q29tbW9uQ2ZnLgotCQkJCQkJCSAgSHRDYXBhYmlsaXR5LAotCQkJCQkJCSAgRU5EX09GX0FSR1MpOwotCQkJCX0KLQkJCQlGcmFtZUxlbiArPSBUbXA7Ci0JCQl9Ci0KLQkJCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgMCwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOwotCQkJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKLQkJfQotCQkvKiBGb3IgU0NBTl9DSVNDT19QQVNTSVZFLCBkbyBub3RoaW5nIGFuZCBzaWxlbnRseSB3YWl0IGZvciBiZWFjb24gb3Igb3RoZXIgcHJvYmUgcmVzcG9uc2UgKi8KLQotCQlwQWQtPk1sbWUuU3luY01hY2hpbmUuQ3VyclN0YXRlID0gU0NBTl9MSVNURU47Ci0JfQotfQotCi12b2lkIE1ndFByb2JSZXFNYWNIZWFkZXJJbml0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICAgc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEgKiBwSGRyODAyMTEsCi0JCQkgICAgIHU4IFN1YlR5cGUsCi0JCQkgICAgIHU4IFRvRHMsIHU4ICpwREEsIHU4ICpwQnNzaWQpCi17Ci0JTmRpc1plcm9NZW1vcnkocEhkcjgwMjExLCBzaXplb2Yoc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEpKTsKLQotCXBIZHI4MDIxMS0+RkMuVHlwZSA9IEJUWVBFX01HTVQ7Ci0JcEhkcjgwMjExLT5GQy5TdWJUeXBlID0gU3ViVHlwZTsKLQlpZiAoU3ViVHlwZSA9PSBTVUJUWVBFX0FDSykKLQkJcEhkcjgwMjExLT5GQy5UeXBlID0gQlRZUEVfQ05UTDsKLQlwSGRyODAyMTEtPkZDLlRvRHMgPSBUb0RzOwotCUNPUFlfTUFDX0FERFIocEhkcjgwMjExLT5BZGRyMSwgcERBKTsKLQlDT1BZX01BQ19BRERSKHBIZHI4MDIxMS0+QWRkcjIsIHBBZC0+Q3VycmVudEFkZHJlc3MpOwotCUNPUFlfTUFDX0FERFIocEhkcjgwMjExLT5BZGRyMywgcEJzc2lkKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV90a2lwLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fdGtpcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODgxZWY5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV90a2lwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MzMgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLQlNb2R1bGUgTmFtZToKLQljbW1fdGtpcC5jCi0KLQlBYnN0cmFjdDoKLQotCVJldmlzaW9uIEhpc3Rvcnk6Ci0JV2hvCQkJV2hlbgkJCVdoYXQKLQktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JUGF1bCBXdQkJMDItMjUtMDIJCUluaXRpYWwKLSovCi0KLSNpbmNsdWRlCSIuLi9ydF9jb25maWcuaCIKLQotLyogUm90YXRpb24gZnVuY3Rpb25zIG9uIDMyIGJpdCB2YWx1ZXMgKi8KLSNkZWZpbmUgUk9MMzIoIEEsIG4gKSBcCi0JKCAoKEEpIDw8IChuKSkgfCAoICgoQSk+PigzMi0obikpKSAmICggKDFVTCA8PCAobikpIC0gMSApICkgKQotI2RlZmluZSBST1IzMiggQSwgbiApIFJPTDMyKCAoQSksIDMyLShuKSApCi0KLXUzMiBUa2lwX1Nib3hfTG93ZXJbMjU2XSA9IHsKLQkweEE1LCAweDg0LCAweDk5LCAweDhELCAweDBELCAweEJELCAweEIxLCAweDU0LAotCTB4NTAsIDB4MDMsIDB4QTksIDB4N0QsIDB4MTksIDB4NjIsIDB4RTYsIDB4OUEsCi0JMHg0NSwgMHg5RCwgMHg0MCwgMHg4NywgMHgxNSwgMHhFQiwgMHhDOSwgMHgwQiwKLQkweEVDLCAweDY3LCAweEZELCAweEVBLCAweEJGLCAweEY3LCAweDk2LCAweDVCLAotCTB4QzIsIDB4MUMsIDB4QUUsIDB4NkEsIDB4NUEsIDB4NDEsIDB4MDIsIDB4NEYsCi0JMHg1QywgMHhGNCwgMHgzNCwgMHgwOCwgMHg5MywgMHg3MywgMHg1MywgMHgzRiwKLQkweDBDLCAweDUyLCAweDY1LCAweDVFLCAweDI4LCAweEExLCAweDBGLCAweEI1LAotCTB4MDksIDB4MzYsIDB4OUIsIDB4M0QsIDB4MjYsIDB4NjksIDB4Q0QsIDB4OUYsCi0JMHgxQiwgMHg5RSwgMHg3NCwgMHgyRSwgMHgyRCwgMHhCMiwgMHhFRSwgMHhGQiwKLQkweEY2LCAweDRELCAweDYxLCAweENFLCAweDdCLCAweDNFLCAweDcxLCAweDk3LAotCTB4RjUsIDB4NjgsIDB4MDAsIDB4MkMsIDB4NjAsIDB4MUYsIDB4QzgsIDB4RUQsCi0JMHhCRSwgMHg0NiwgMHhEOSwgMHg0QiwgMHhERSwgMHhENCwgMHhFOCwgMHg0QSwKLQkweDZCLCAweDJBLCAweEU1LCAweDE2LCAweEM1LCAweEQ3LCAweDU1LCAweDk0LAotCTB4Q0YsIDB4MTAsIDB4MDYsIDB4ODEsIDB4RjAsIDB4NDQsIDB4QkEsIDB4RTMsCi0JMHhGMywgMHhGRSwgMHhDMCwgMHg4QSwgMHhBRCwgMHhCQywgMHg0OCwgMHgwNCwKLQkweERGLCAweEMxLCAweDc1LCAweDYzLCAweDMwLCAweDFBLCAweDBFLCAweDZELAotCTB4NEMsIDB4MTQsIDB4MzUsIDB4MkYsIDB4RTEsIDB4QTIsIDB4Q0MsIDB4MzksCi0JMHg1NywgMHhGMiwgMHg4MiwgMHg0NywgMHhBQywgMHhFNywgMHgyQiwgMHg5NSwKLQkweEEwLCAweDk4LCAweEQxLCAweDdGLCAweDY2LCAweDdFLCAweEFCLCAweDgzLAotCTB4Q0EsIDB4MjksIDB4RDMsIDB4M0MsIDB4NzksIDB4RTIsIDB4MUQsIDB4NzYsCi0JMHgzQiwgMHg1NiwgMHg0RSwgMHgxRSwgMHhEQiwgMHgwQSwgMHg2QywgMHhFNCwKLQkweDVELCAweDZFLCAweEVGLCAweEE2LCAweEE4LCAweEE0LCAweDM3LCAweDhCLAotCTB4MzIsIDB4NDMsIDB4NTksIDB4QjcsIDB4OEMsIDB4NjQsIDB4RDIsIDB4RTAsCi0JMHhCNCwgMHhGQSwgMHgwNywgMHgyNSwgMHhBRiwgMHg4RSwgMHhFOSwgMHgxOCwKLQkweEQ1LCAweDg4LCAweDZGLCAweDcyLCAweDI0LCAweEYxLCAweEM3LCAweDUxLAotCTB4MjMsIDB4N0MsIDB4OUMsIDB4MjEsIDB4REQsIDB4REMsIDB4ODYsIDB4ODUsCi0JMHg5MCwgMHg0MiwgMHhDNCwgMHhBQSwgMHhEOCwgMHgwNSwgMHgwMSwgMHgxMiwKLQkweEEzLCAweDVGLCAweEY5LCAweEQwLCAweDkxLCAweDU4LCAweDI3LCAweEI5LAotCTB4MzgsIDB4MTMsIDB4QjMsIDB4MzMsIDB4QkIsIDB4NzAsIDB4ODksIDB4QTcsCi0JMHhCNiwgMHgyMiwgMHg5MiwgMHgyMCwgMHg0OSwgMHhGRiwgMHg3OCwgMHg3QSwKLQkweDhGLCAweEY4LCAweDgwLCAweDE3LCAweERBLCAweDMxLCAweEM2LCAweEI4LAotCTB4QzMsIDB4QjAsIDB4NzcsIDB4MTEsIDB4Q0IsIDB4RkMsIDB4RDYsIDB4M0EKLX07Ci0KLXUzMiBUa2lwX1Nib3hfVXBwZXJbMjU2XSA9IHsKLQkweEM2LCAweEY4LCAweEVFLCAweEY2LCAweEZGLCAweEQ2LCAweERFLCAweDkxLAotCTB4NjAsIDB4MDIsIDB4Q0UsIDB4NTYsIDB4RTcsIDB4QjUsIDB4NEQsIDB4RUMsCi0JMHg4RiwgMHgxRiwgMHg4OSwgMHhGQSwgMHhFRiwgMHhCMiwgMHg4RSwgMHhGQiwKLQkweDQxLCAweEIzLCAweDVGLCAweDQ1LCAweDIzLCAweDUzLCAweEU0LCAweDlCLAotCTB4NzUsIDB4RTEsIDB4M0QsIDB4NEMsIDB4NkMsIDB4N0UsIDB4RjUsIDB4ODMsCi0JMHg2OCwgMHg1MSwgMHhEMSwgMHhGOSwgMHhFMiwgMHhBQiwgMHg2MiwgMHgyQSwKLQkweDA4LCAweDk1LCAweDQ2LCAweDlELCAweDMwLCAweDM3LCAweDBBLCAweDJGLAotCTB4MEUsIDB4MjQsIDB4MUIsIDB4REYsIDB4Q0QsIDB4NEUsIDB4N0YsIDB4RUEsCi0JMHgxMiwgMHgxRCwgMHg1OCwgMHgzNCwgMHgzNiwgMHhEQywgMHhCNCwgMHg1QiwKLQkweEE0LCAweDc2LCAweEI3LCAweDdELCAweDUyLCAweERELCAweDVFLCAweDEzLAotCTB4QTYsIDB4QjksIDB4MDAsIDB4QzEsIDB4NDAsIDB4RTMsIDB4NzksIDB4QjYsCi0JMHhENCwgMHg4RCwgMHg2NywgMHg3MiwgMHg5NCwgMHg5OCwgMHhCMCwgMHg4NSwKLQkweEJCLCAweEM1LCAweDRGLCAweEVELCAweDg2LCAweDlBLCAweDY2LCAweDExLAotCTB4OEEsIDB4RTksIDB4MDQsIDB4RkUsIDB4QTAsIDB4NzgsIDB4MjUsIDB4NEIsCi0JMHhBMiwgMHg1RCwgMHg4MCwgMHgwNSwgMHgzRiwgMHgyMSwgMHg3MCwgMHhGMSwKLQkweDYzLCAweDc3LCAweEFGLCAweDQyLCAweDIwLCAweEU1LCAweEZELCAweEJGLAotCTB4ODEsIDB4MTgsIDB4MjYsIDB4QzMsIDB4QkUsIDB4MzUsIDB4ODgsIDB4MkUsCi0JMHg5MywgMHg1NSwgMHhGQywgMHg3QSwgMHhDOCwgMHhCQSwgMHgzMiwgMHhFNiwKLQkweEMwLCAweDE5LCAweDlFLCAweEEzLCAweDQ0LCAweDU0LCAweDNCLCAweDBCLAotCTB4OEMsIDB4QzcsIDB4NkIsIDB4MjgsIDB4QTcsIDB4QkMsIDB4MTYsIDB4QUQsCi0JMHhEQiwgMHg2NCwgMHg3NCwgMHgxNCwgMHg5MiwgMHgwQywgMHg0OCwgMHhCOCwKLQkweDlGLCAweEJELCAweDQzLCAweEM0LCAweDM5LCAweDMxLCAweEQzLCAweEYyLAotCTB4RDUsIDB4OEIsIDB4NkUsIDB4REEsIDB4MDEsIDB4QjEsIDB4OUMsIDB4NDksCi0JMHhEOCwgMHhBQywgMHhGMywgMHhDRiwgMHhDQSwgMHhGNCwgMHg0NywgMHgxMCwKLQkweDZGLCAweEYwLCAweDRBLCAweDVDLCAweDM4LCAweDU3LCAweDczLCAweDk3LAotCTB4Q0IsIDB4QTEsIDB4RTgsIDB4M0UsIDB4OTYsIDB4NjEsIDB4MEQsIDB4MEYsCi0JMHhFMCwgMHg3QywgMHg3MSwgMHhDQywgMHg5MCwgMHgwNiwgMHhGNywgMHgxQywKLQkweEMyLCAweDZBLCAweEFFLCAweDY5LCAweDE3LCAweDk5LCAweDNBLCAweDI3LAotCTB4RDksIDB4RUIsIDB4MkIsIDB4MjIsIDB4RDIsIDB4QTksIDB4MDcsIDB4MzMsCi0JMHgyRCwgMHgzQywgMHgxNSwgMHhDOSwgMHg4NywgMHhBQSwgMHg1MCwgMHhBNSwKLQkweDAzLCAweDU5LCAweDA5LCAweDFBLCAweDY1LCAweEQ3LCAweDg0LCAweEQwLAotCTB4ODIsIDB4MjksIDB4NUEsIDB4MUUsIDB4N0IsIDB4QTgsIDB4NkQsIDB4MkMKLX07Ci0KLS8qICovCi0vKiBFeHBhbmRlZCBJViBmb3IgVEtJUCBmdW5jdGlvbi4gKi8KLS8qICovCi1zdHJ1Y3QgUEFDS0VEIHJ0X3RraXBfaXYgewotCXVuaW9uIFBBQ0tFRCB7Ci0JCXN0cnVjdCBQQUNLRUQgewotCQkJdTggcmMwOwotCQkJdTggcmMxOwotCQkJdTggcmMyOwotCi0JCQl1bmlvbiBQQUNLRUQgewotCQkJCXN0cnVjdCBQQUNLRUQgewotCQkJCQl1OCBSc3ZkOjU7Ci0JCQkJCXU4IEV4dElWOjE7Ci0JCQkJCXU4IEtleUlEOjI7Ci0JCQkJfSBmaWVsZDsKLQkJCQl1OCBCeXRlOwotCQkJfSBDT05UUk9MOwotCQl9IGZpZWxkOwotCi0JCXVuc2lnbmVkIGxvbmcgd29yZDsKLQl9IElWMTY7Ci0KLQl1bnNpZ25lZCBsb25nIElWMzI7Ci19OwotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZQlEZXNjcmlwdGlvbjoKLQkJQ29udmVydCBmcm9tIHU4W10gdG8gdW5zaWduZWQgbG9uZyBpbiBhIHBvcnRhYmxlIHdheQotCi0JQXJndW1lbnRzOgotICAgICAgcE1JQ0tleQkJcG9pbnRlciB0byBNSUMgS2V5Ci0KLQlSZXR1cm4gVmFsdWU6Ci0JCU5vbmUKLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi11bnNpZ25lZCBsb25nIFJUTVBUa2lwR2V0VUludDMyKHU4ICpwTUlDS2V5KQotewotCXVuc2lnbmVkIGxvbmcgcmVzID0gMDsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJcmVzIHw9ICgqcE1JQ0tleSsrKSA8PCAoOCAqIGkpOwotCX0KLQotCXJldHVybiByZXM7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lCURlc2NyaXB0aW9uOgotCQlDb252ZXJ0IGZyb20gdW5zaWduZWQgbG9uZyB0byB1OFtdIGluIGEgcG9ydGFibGUgd2F5Ci0KLQlBcmd1bWVudHM6Ci0gICAgICBwRHN0CQkJcG9pbnRlciB0byBkZXN0aW5hdGlvbiBmb3IgY29udmVydCB1bnNpZ25lZCBsb25nIHRvIHU4W10KLSAgICAgIHZhbAkJCXRoZSB2YWx1ZSBmb3IgY29udmVydAotCi0JUmV0dXJuIFZhbHVlOgotCQlOb25lCi0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFJUTVBUa2lwUHV0VUludDMyKElOIHU4ICpwRHN0LCB1bnNpZ25lZCBsb25nIHZhbCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJKnBEc3QrKyA9ICh1OCkodmFsICYgMHhmZik7Ci0JCXZhbCA+Pj0gODsKLQl9Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lCURlc2NyaXB0aW9uOgotCQlTZXQgdGhlIE1JQyBLZXkuCi0KLQlBcmd1bWVudHM6Ci0gICAgICBwQWQJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKLSAgICAgIHBNSUNLZXkJCXBvaW50ZXIgdG8gTUlDIEtleQotCi0JUmV0dXJuIFZhbHVlOgotCQlOb25lCi0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFJUTVBUa2lwU2V0TUlDS2V5KHN0cnVjdCBydF90a2lwX2tleV9pbmZvICpwVGtpcCwgdTggKnBNSUNLZXkpCi17Ci0JLyogU2V0IHRoZSBrZXkgKi8KLQlwVGtpcC0+SzAgPSBSVE1QVGtpcEdldFVJbnQzMihwTUlDS2V5KTsKLQlwVGtpcC0+SzEgPSBSVE1QVGtpcEdldFVJbnQzMihwTUlDS2V5ICsgNCk7Ci0JLyogYW5kIHJlc2V0IHRoZSBtZXNzYWdlICovCi0JcFRraXAtPkwgPSBwVGtpcC0+SzA7Ci0JcFRraXAtPlIgPSBwVGtpcC0+SzE7Ci0JcFRraXAtPm5CeXRlc0luTSA9IDA7Ci0JcFRraXAtPk0gPSAwOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZQlEZXNjcmlwdGlvbjoKLQkJQ2FsY3VsYXRlIHRoZSBNSUMgVmFsdWUuCi0KLQlBcmd1bWVudHM6Ci0gICAgICBwQWQJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKLSAgICAgIHVDaGFyCQkJQXBwZW5kIHRoaXMgdUNoYXIKLQotCVJldHVybiBWYWx1ZToKLQkJTm9uZQotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBSVE1QVGtpcEFwcGVuZEJ5dGUoc3RydWN0IHJ0X3RraXBfa2V5X2luZm8gKnBUa2lwLCB1OCB1Q2hhcikKLXsKLQkvKiBBcHBlbmQgdGhlIGJ5dGUgdG8gb3VyIHdvcmQtc2l6ZWQgYnVmZmVyICovCi0JcFRraXAtPk0gfD0gKHVDaGFyIDw8ICg4ICogcFRraXAtPm5CeXRlc0luTSkpOwotCXBUa2lwLT5uQnl0ZXNJbk0rKzsKLQkvKiBQcm9jZXNzIHRoZSB3b3JkIGlmIGl0IGlzIGZ1bGwuICovCi0JaWYgKHBUa2lwLT5uQnl0ZXNJbk0gPj0gNCkgewotCQlwVGtpcC0+TCBePSBwVGtpcC0+TTsKLQkJcFRraXAtPlIgXj0gUk9MMzIocFRraXAtPkwsIDE3KTsKLQkJcFRraXAtPkwgKz0gcFRraXAtPlI7Ci0JCXBUa2lwLT5SIF49Ci0JCSAgICAoKHBUa2lwLT5MICYgMHhmZjAwZmYwMCkgPj4gOCkgfCAoKHBUa2lwLT4KLQkJCQkJCSAgICAgICBMICYgMHgwMGZmMDBmZikgPDwgOCk7Ci0JCXBUa2lwLT5MICs9IHBUa2lwLT5SOwotCQlwVGtpcC0+UiBePSBST0wzMihwVGtpcC0+TCwgMyk7Ci0JCXBUa2lwLT5MICs9IHBUa2lwLT5SOwotCQlwVGtpcC0+UiBePSBST1IzMihwVGtpcC0+TCwgMik7Ci0JCXBUa2lwLT5MICs9IHBUa2lwLT5SOwotCQkvKiBDbGVhciB0aGUgYnVmZmVyICovCi0JCXBUa2lwLT5NID0gMDsKLQkJcFRraXAtPm5CeXRlc0luTSA9IDA7Ci0JfQotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZQlEZXNjcmlwdGlvbjoKLQkJQ2FsY3VsYXRlIHRoZSBNSUMgVmFsdWUuCi0KLQlBcmd1bWVudHM6Ci0gICAgICBwQWQJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKLSAgICAgIHBTcmMJCQlQb2ludGVyIHRvIHNvdXJjZSBkYXRhIGZvciBDYWxjdWxhdGUgTUlDIFZhbHVlCi0gICAgICBMZW4JCQlJbmRpY2F0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBzb3VyY2UgZGF0YQotCi0JUmV0dXJuIFZhbHVlOgotCQlOb25lCi0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFJUTVBUa2lwQXBwZW5kKHN0cnVjdCBydF90a2lwX2tleV9pbmZvICpwVGtpcCwgdTggKnBTcmMsIHUzMiBuQnl0ZXMpCi17Ci0JLyogVGhpcyBpcyBzaW1wbGUgKi8KLQl3aGlsZSAobkJ5dGVzID4gMCkgewotCQlSVE1QVGtpcEFwcGVuZEJ5dGUocFRraXAsICpwU3JjKyspOwotCQluQnl0ZXMtLTsKLQl9Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lCURlc2NyaXB0aW9uOgotCQlHZXQgdGhlIE1JQyBWYWx1ZS4KLQotCUFyZ3VtZW50czoKLSAgICAgIHBBZAkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgotCi0JUmV0dXJuIFZhbHVlOgotCQlOb25lCi0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCU5vdGU6Ci0JCXRoZSBNSUMgVmFsdWUgaXMgc3RvcmUgaW4gcEFkLT5Qcml2YXRlSW5mby5NSUMKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFJUTVBUa2lwR2V0TUlDKHN0cnVjdCBydF90a2lwX2tleV9pbmZvICpwVGtpcCkKLXsKLQkvKiBBcHBlbmQgdGhlIG1pbmltdW0gcGFkZGluZyAqLwotCVJUTVBUa2lwQXBwZW5kQnl0ZShwVGtpcCwgMHg1YSk7Ci0JUlRNUFRraXBBcHBlbmRCeXRlKHBUa2lwLCAwKTsKLQlSVE1QVGtpcEFwcGVuZEJ5dGUocFRraXAsIDApOwotCVJUTVBUa2lwQXBwZW5kQnl0ZShwVGtpcCwgMCk7Ci0JUlRNUFRraXBBcHBlbmRCeXRlKHBUa2lwLCAwKTsKLQkvKiBhbmQgdGhlbiB6ZXJvZXMgdW50aWwgdGhlIGxlbmd0aCBpcyBhIG11bHRpcGxlIG9mIDQgKi8KLQl3aGlsZSAocFRraXAtPm5CeXRlc0luTSAhPSAwKSB7Ci0JCVJUTVBUa2lwQXBwZW5kQnl0ZShwVGtpcCwgMCk7Ci0JfQotCS8qIFRoZSBhcHBlbmRCeXRlIGZ1bmN0aW9uIGhhcyBhbHJlYWR5IGNvbXB1dGVkIHRoZSByZXN1bHQuICovCi0JUlRNUFRraXBQdXRVSW50MzIocFRraXAtPk1JQywgcFRraXAtPkwpOwotCVJUTVBUa2lwUHV0VUludDMyKHBUa2lwLT5NSUMgKyA0LCBwVGtpcC0+Uik7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lCURlc2NyaXB0aW9uOgotCQlJbml0IFRraXAgZnVuY3Rpb24uCi0KLQlBcmd1bWVudHM6Ci0gICAgICBwQWQJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKLQkJcFRLZXkgICAgICAgUG9pbnRlciB0byB0aGUgVGVtcG9yYWwgS2V5IChUSyksIFRLIHNoYWxsIGJlIDEyOGJpdHMuCi0JCUtleUlkCQlUSyBLZXkgSUQKLQkJcFRBCQkJUG9pbnRlciB0byB0cmFuc21pdHRlciBhZGRyZXNzCi0JCXBNSUNLZXkJCXBvaW50ZXIgdG8gTUlDIEtleQotCi0JUmV0dXJuIFZhbHVlOgotCQlOb25lCi0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFJUTVBJbml0VGtpcEVuZ2luZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQl1OCAqcEtleSwKLQkJCXU4IEtleUlkLAotCQkJdTggKnBUQSwKLQkJCXU4ICpwTUlDS2V5LAotCQkJdTggKnBUU0MsIHVuc2lnbmVkIGxvbmcgKnBJVjE2LCB1bnNpZ25lZCBsb25nICpwSVYzMikKLXsKLQlzdHJ1Y3QgcnRfdGtpcF9pdiB0a2lwSXY7Ci0KLQkvKiBQcmVwYXJlIDggYnl0ZXMgVEtJUCBlbmNhcHN1bGF0aW9uIGZvciBNUERVICovCi0JTmRpc1plcm9NZW1vcnkoJnRraXBJdiwgc2l6ZW9mKHN0cnVjdCBydF90a2lwX2l2KSk7Ci0JdGtpcEl2LklWMTYuZmllbGQucmMwID0gKihwVFNDICsgMSk7Ci0JdGtpcEl2LklWMTYuZmllbGQucmMxID0gKHRraXBJdi5JVjE2LmZpZWxkLnJjMCB8IDB4MjApICYgMHg3ZjsKLQl0a2lwSXYuSVYxNi5maWVsZC5yYzIgPSAqcFRTQzsKLQl0a2lwSXYuSVYxNi5maWVsZC5DT05UUk9MLmZpZWxkLkV4dElWID0gMTsJLyogMDogbm9uLWV4dGVuZGVkIElWLCAxOiBhbiBleHRlbmRlZCBJViAqLwotCXRraXBJdi5JVjE2LmZpZWxkLkNPTlRST0wuZmllbGQuS2V5SUQgPSBLZXlJZDsKLS8qICAgICAgdGtpcEl2LklWMzIgPSAqKHVuc2lnbmVkIGxvbmcgKikocFRTQyArIDIpOyAqLwotCU5kaXNNb3ZlTWVtb3J5KCZ0a2lwSXYuSVYzMiwgKHBUU0MgKyAyKSwgNCk7CS8qIENvcHkgSVYgKi8KLQotCSpwSVYxNiA9IHRraXBJdi5JVjE2LndvcmQ7Ci0JKnBJVjMyID0gdGtpcEl2LklWMzI7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lCURlc2NyaXB0aW9uOgotCQlJbml0IE1JQyBWYWx1ZSBjYWxjdWxhdGlvbiBmdW5jdGlvbiB3aGljaCBpbmNsdWRlIHNldCBNSUMga2V5ICYKLQkJY2FsY3VsYXRlIGZpcnN0IDE2IGJ5dGVzIChEQSArIFNBICsgcHJpb3JpdHkgKyAgMCkKLQotCUFyZ3VtZW50czoKLSAgICAgIHBBZAkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgotCQlwVEtleSAgICAgICBQb2ludGVyIHRvIHRoZSBUZW1wb3JhbCBLZXkgKFRLKSwgVEsgc2hhbGwgYmUgMTI4Yml0cy4KLQkJcERBCQkJUG9pbnRlciB0byBEQSBhZGRyZXNzCi0JCXBTQQkJCVBvaW50ZXIgdG8gU0EgYWRkcmVzcwotCQlwTUlDS2V5CQlwb2ludGVyIHRvIE1JQyBLZXkKLQotCVJldHVybiBWYWx1ZToKLQkJTm9uZQotCi0JTm90ZToKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgUlRNUEluaXRNSUNFbmdpbmUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICAgICAgdTggKnBLZXksCi0JCSAgICAgICB1OCAqcERBLAotCQkgICAgICAgdTggKnBTQSwgdTggVXNlclByaW9yaXR5LCB1OCAqcE1JQ0tleSkKLXsKLQl1bnNpZ25lZCBsb25nIFByaW9yaXR5ID0gVXNlclByaW9yaXR5OwotCi0JLyogSW5pdCBNSUMgdmFsdWUgY2FsY3VsYXRpb24gKi8KLQlSVE1QVGtpcFNldE1JQ0tleSgmcEFkLT5Qcml2YXRlSW5mby5UeCwgcE1JQ0tleSk7Ci0JLyogREEgKi8KLQlSVE1QVGtpcEFwcGVuZCgmcEFkLT5Qcml2YXRlSW5mby5UeCwgcERBLCBNQUNfQUREUl9MRU4pOwotCS8qIFNBICovCi0JUlRNUFRraXBBcHBlbmQoJnBBZC0+UHJpdmF0ZUluZm8uVHgsIHBTQSwgTUFDX0FERFJfTEVOKTsKLQkvKiBQcmlvcml0eSArIDMgYnl0ZXMgb2YgMCAqLwotCVJUTVBUa2lwQXBwZW5kKCZwQWQtPlByaXZhdGVJbmZvLlR4LCAodTggKikmIFByaW9yaXR5LCA0KTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUJRGVzY3JpcHRpb246Ci0JCUNvbXBhcmUgTUlDIHZhbHVlIG9mIHJlY2VpdmVkIE1TRFUKLQotCUFyZ3VtZW50czoKLQkJcEFkCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKLQkJcFNyYyAgICAgICAgUG9pbnRlciB0byB0aGUgcmVjZWl2ZWQgUGxhaW4gdGV4dCBkYXRhCi0JCXBEQQkJCVBvaW50ZXIgdG8gREEgYWRkcmVzcwotCQlwU0EJCQlQb2ludGVyIHRvIFNBIGFkZHJlc3MKLQkJcE1JQ0tleQkJcG9pbnRlciB0byBNSUMgS2V5Ci0JCUxlbiAgICAgICAgIHRoZSBsZW5ndGggb2YgdGhlIHJlY2VpdmVkIHBsYWluIHRleHQgZGF0YSBleGNsdWRlIE1JQyB2YWx1ZQotCi0JUmV0dXJuIFZhbHVlOgotCQlUUlVFICAgICAgICBNSUMgdmFsdWUgbWF0Y2hlZAotCQlGQUxTRSAgICAgICBNSUMgdmFsdWUgbWlzbWF0Y2hlZAotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotQk9PTEVBTiBSVE1QVGtpcENvbXBhcmVNSUNWYWx1ZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJdTggKnBTcmMsCi0JCQkJdTggKnBEQSwKLQkJCQl1OCAqcFNBLAotCQkJCXU4ICpwTUlDS2V5LAotCQkJCXU4IFVzZXJQcmlvcml0eSwgdTMyIExlbikKLXsKLQl1OCBPbGRNaWNbOF07Ci0JdW5zaWduZWQgbG9uZyBQcmlvcml0eSA9IFVzZXJQcmlvcml0eTsKLQotCS8qIEluaXQgTUlDIHZhbHVlIGNhbGN1bGF0aW9uICovCi0JUlRNUFRraXBTZXRNSUNLZXkoJnBBZC0+UHJpdmF0ZUluZm8uUngsIHBNSUNLZXkpOwotCS8qIERBICovCi0JUlRNUFRraXBBcHBlbmQoJnBBZC0+UHJpdmF0ZUluZm8uUngsIHBEQSwgTUFDX0FERFJfTEVOKTsKLQkvKiBTQSAqLwotCVJUTVBUa2lwQXBwZW5kKCZwQWQtPlByaXZhdGVJbmZvLlJ4LCBwU0EsIE1BQ19BRERSX0xFTik7Ci0JLyogUHJpb3JpdHkgKyAzIGJ5dGVzIG9mIDAgKi8KLQlSVE1QVGtpcEFwcGVuZCgmcEFkLT5Qcml2YXRlSW5mby5SeCwgKHU4ICopJiBQcmlvcml0eSwgNCk7Ci0KLQkvKiBDYWxjdWxhdGUgTUlDIHZhbHVlIGZyb20gcGxhaW4gdGV4dCBkYXRhICovCi0JUlRNUFRraXBBcHBlbmQoJnBBZC0+UHJpdmF0ZUluZm8uUngsIHBTcmMsIExlbik7Ci0KLQkvKiBHZXQgTUlDIHZhbHVkZSBmcm9tIHJlY2VpdmVkIGZyYW1lICovCi0JTmRpc01vdmVNZW1vcnkoT2xkTWljLCBwU3JjICsgTGVuLCA4KTsKLQotCS8qIEdldCBNSUMgdmFsdWUgZnJvbSBkZWNyeXB0ZWQgcGxhaW4gZGF0YSAqLwotCVJUTVBUa2lwR2V0TUlDKCZwQWQtPlByaXZhdGVJbmZvLlJ4KTsKLQotCS8qIE1vdmUgTUlDIHZhbHVlIGZyb20gTVNEVSwgdGhpcyBzdGVwcyBzaG91bGQgbW92ZSB0byBkYXRhIHBhdGguICovCi0JLyogU2luY2UgdGhlIE1JQyB2YWx1ZSBtaWdodCBjcm9zcyBNUERVcy4gKi8KLQlpZiAoIU5kaXNFcXVhbE1lbW9yeShwQWQtPlByaXZhdGVJbmZvLlJ4Lk1JQywgT2xkTWljLCA4KSkgewotCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICgiUlRNUFRraXBDb21wYXJlTUlDVmFsdWUoKTogVEtJUCBNSUMgRXJyb3IgIVxuIikpOwkvKk1JQyBlcnJvci4gKi8KLQotCQlyZXR1cm4gKEZBTFNFKTsKLQl9Ci0JcmV0dXJuIChUUlVFKTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUJRGVzY3JpcHRpb246Ci0JCUNvcHkgZnJhbWUgZnJvbSB3YWl0aW5nIHF1ZXVlIGludG8gcmVsYXRpdmUgcmluZyBidWZmZXIgYW5kIHNldAotCWFwcHJvcHJpYXRlIEFTSUMgcmVnaXN0ZXIgdG8ga2ljayBoYXJkd2FyZSB0cmFuc21pdCBmdW5jdGlvbgotCi0JQXJndW1lbnRzOgotCQlwQWQJCVBvaW50ZXIJdG8gb3VyIGFkYXB0ZXIKLQkJdm9pZCAqCVBvaW50ZXIgdG8gTmRpcyBQYWNrZXQgZm9yIE1JQyBjYWxjdWxhdGlvbgotCQlwRW5jYXAJCQlQb2ludGVyIHRvIExMQyBlbmNhcCBkYXRhCi0JCUxlbkVuY2FwCQlUb3RhbCBlbmNhcCBsZW5ndGgsIG1pZ2h0IGJlIDAgd2hpY2ggaW5kaWNhdGVzIG5vIGVuY2FwCi0KLQlSZXR1cm4gVmFsdWU6Ci0JCU5vbmUKLQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0JTm90ZToKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgUlRNUENhbGN1bGF0ZU1JQ1ZhbHVlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgIHZvaWQgKnBQYWNrZXQsCi0JCQkgICB1OCAqcEVuY2FwLAotCQkJICAgc3RydWN0IHJ0X2NpcGhlcl9rZXkgKnBLZXksIHU4IGFwaWR4KQotewotCXN0cnVjdCBydF9wYWNrZXRfaW5mbyBQYWNrZXRJbmZvOwotCXU4ICpwU3JjQnVmVkE7Ci0JdTMyIFNyY0J1ZkxlbjsKLQl1OCAqcFNyYzsKLQl1OCBVc2VyUHJpb3JpdHk7Ci0JdTggdmxhbl9vZmZzZXQgPSAwOwotCi0JUlRNUF9RdWVyeVBhY2tldEluZm8ocFBhY2tldCwgJlBhY2tldEluZm8sICZwU3JjQnVmVkEsICZTcmNCdWZMZW4pOwotCi0JVXNlclByaW9yaXR5ID0gUlRNUF9HRVRfUEFDS0VUX1VQKHBQYWNrZXQpOwotCXBTcmMgPSBwU3JjQnVmVkE7Ci0KLQkvKiBkZXRlcm1pbmUgaWYgdGhpcyBpcyBhIHZsYW4gcGFja2V0ICovCi0JaWYgKCgoKihwU3JjICsgMTIpIDw8IDgpICsgKihwU3JjICsgMTMpKSA9PSAweDgxMDApCi0JCXZsYW5fb2Zmc2V0ID0gNDsKLQotCXsKLQkJUlRNUEluaXRNSUNFbmdpbmUocEFkLAotCQkJCSAgcEtleS0+S2V5LAotCQkJCSAgcFNyYywgcFNyYyArIDYsIFVzZXJQcmlvcml0eSwgcEtleS0+VHhNaWMpOwotCX0KLQotCWlmIChwRW5jYXAgIT0gTlVMTCkgewotCQkvKiBMTEMgZW5jYXBzdWxhdGlvbiAqLwotCQlSVE1QVGtpcEFwcGVuZCgmcEFkLT5Qcml2YXRlSW5mby5UeCwgcEVuY2FwLCA2KTsKLQkJLyogUHJvdG9jb2wgVHlwZSAqLwotCQlSVE1QVGtpcEFwcGVuZCgmcEFkLT5Qcml2YXRlSW5mby5UeCwgcFNyYyArIDEyICsgdmxhbl9vZmZzZXQsCi0JCQkgICAgICAgMik7Ci0JfQotCVNyY0J1ZkxlbiAtPSAoMTQgKyB2bGFuX29mZnNldCk7Ci0JcFNyYyArPSAoMTQgKyB2bGFuX29mZnNldCk7Ci0JZG8gewotCQlpZiAoU3JjQnVmTGVuID4gMCkgewotCQkJUlRNUFRraXBBcHBlbmQoJnBBZC0+UHJpdmF0ZUluZm8uVHgsIHBTcmMsIFNyY0J1Zkxlbik7Ci0JCX0KLQotCQlicmVhazsJCS8qIE5vIG5lZWQgaGFuZGxlIG5leHQgcGFja2V0ICovCi0KLQl9IHdoaWxlIChUUlVFKTsJCS8qIEVuZCBvZiBjb3B5aW5nIHBheWxvYWQgKi8KLQotCS8qIENvbXB1dGUgdGhlIGZpbmFsIE1JQyBWYWx1ZSAqLwotCVJUTVBUa2lwR2V0TUlDKCZwQWQtPlByaXZhdGVJbmZvLlR4KTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIHRraXBfc2JveCgpCQkJCQkJCQkJCQkJCQkJCSovCi0vKiBSZXR1cm5zIGEgMTYgYml0IHZhbHVlIGZyb20gYSA2NEsgZW50cnkgdGFibGUuIFRoZSBUYWJsZSAqLwotLyogaXMgc3ludGhlc2l6ZWQgZnJvbSB0d28gMjU2IGVudHJ5IGJ5dGUgd2lkZSB0YWJsZXMuCQkqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotdTMyIHRraXBfc2JveCh1MzIgaW5kZXgpCi17Ci0JdTMyIGluZGV4X2xvdzsKLQl1MzIgaW5kZXhfaGlnaDsKLQl1MzIgbGVmdCwgcmlnaHQ7Ci0KLQlpbmRleF9sb3cgPSAoaW5kZXggJSAyNTYpOwotCWluZGV4X2hpZ2ggPSAoKGluZGV4ID4+IDgpICUgMjU2KTsKLQotCWxlZnQgPSBUa2lwX1Nib3hfTG93ZXJbaW5kZXhfbG93XSArIChUa2lwX1Nib3hfVXBwZXJbaW5kZXhfbG93XSAqIDI1Nik7Ci0JcmlnaHQgPQotCSAgICBUa2lwX1Nib3hfVXBwZXJbaW5kZXhfaGlnaF0gKyAoVGtpcF9TYm94X0xvd2VyW2luZGV4X2hpZ2hdICogMjU2KTsKLQotCXJldHVybiAobGVmdCBeIHJpZ2h0KTsKLX0KLQotdTMyIHJvdHIxKHUzMiBhKQotewotCXVuc2lnbmVkIGludCBiOwotCi0JaWYgKChhICYgMHgwMSkgPT0gMHgwMSkgewotCQliID0gKGEgPj4gMSkgfCAweDgwMDA7Ci0JfSBlbHNlIHsKLQkJYiA9IChhID4+IDEpICYgMHg3ZmZmOwotCX0KLQliID0gYiAlIDY1NTM2OwotCXJldHVybiBiOwotfQotCi12b2lkIFJUTVBUa2lwTWl4S2V5KHU4ICoga2V5LCB1OCAqIHRhLCB1bnNpZ25lZCBsb25nIHBubCwJLyogTGVhc3Qgc2lnbmlmaWNhbnQgMTYgYml0cyBvZiBQTiAqLwotCQkgICAgdW5zaWduZWQgbG9uZyBwbmgsCS8qIE1vc3Qgc2lnbmlmaWNhbnQgMzIgYml0cyBvZiBQTiAqLwotCQkgICAgdTggKiByYzRrZXksIHUzMiAqIHAxaykKLXsKLQotCXUzMiB0c2MwOwotCXUzMiB0c2MxOwotCXUzMiB0c2MyOwotCi0JdTMyIHBwazA7Ci0JdTMyIHBwazE7Ci0JdTMyIHBwazI7Ci0JdTMyIHBwazM7Ci0JdTMyIHBwazQ7Ci0JdTMyIHBwazU7Ci0KLQlpbnQgaTsKLQlpbnQgajsKLQotCXRzYzAgPSAodW5zaWduZWQgaW50KSgocG5oID4+IDE2KSAlIDY1NTM2KTsJLyogbXNiICovCi0JdHNjMSA9ICh1bnNpZ25lZCBpbnQpKHBuaCAlIDY1NTM2KTsKLQl0c2MyID0gKHVuc2lnbmVkIGludCkocG5sICUgNjU1MzYpOwkvKiBsc2IgKi8KLQotCS8qIFBoYXNlIDEsIHN0ZXAgMSAqLwotCXAxa1swXSA9IHRzYzE7Ci0JcDFrWzFdID0gdHNjMDsKLQlwMWtbMl0gPSAodTMyKSh0YVswXSArICh0YVsxXSAqIDI1NikpOwotCXAxa1szXSA9ICh1MzIpKHRhWzJdICsgKHRhWzNdICogMjU2KSk7Ci0JcDFrWzRdID0gKHUzMikodGFbNF0gKyAodGFbNV0gKiAyNTYpKTsKLQotCS8qIFBoYXNlIDEsIHN0ZXAgMiAqLwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJaiA9IDIgKiAoaSAmIDEpOwotCQlwMWtbMF0gPQotCQkgICAgKHAxa1swXSArCi0JCSAgICAgdGtpcF9zYm94KChwMWtbNF0gXiAoKDI1NiAqIGtleVsxICsgal0pICsga2V5W2pdKSkgJQotCQkJICAgICAgIDY1NTM2KSkgJSA2NTUzNjsKLQkJcDFrWzFdID0KLQkJICAgIChwMWtbMV0gKwotCQkgICAgIHRraXBfc2JveCgocDFrWzBdIF4gKCgyNTYgKiBrZXlbNSArIGpdKSArIGtleVs0ICsgal0pKSAlCi0JCQkgICAgICAgNjU1MzYpKSAlIDY1NTM2OwotCQlwMWtbMl0gPQotCQkgICAgKHAxa1syXSArCi0JCSAgICAgdGtpcF9zYm94KChwMWtbMV0gXiAoKDI1NiAqIGtleVs5ICsgal0pICsga2V5WzggKyBqXSkpICUKLQkJCSAgICAgICA2NTUzNikpICUgNjU1MzY7Ci0JCXAxa1szXSA9Ci0JCSAgICAocDFrWzNdICsKLQkJICAgICB0a2lwX3Nib3goKHAxa1syXSBeICgoMjU2ICoga2V5WzEzICsgal0pICsga2V5WzEyICsgal0pKSAlCi0JCQkgICAgICAgNjU1MzYpKSAlIDY1NTM2OwotCQlwMWtbNF0gPQotCQkgICAgKHAxa1s0XSArCi0JCSAgICAgdGtpcF9zYm94KChwMWtbM10gXiAoKCgyNTYgKiBrZXlbMSArIGpdKSArIGtleVtqXSkpKSAlCi0JCQkgICAgICAgNjU1MzYpKSAlIDY1NTM2OwotCQlwMWtbNF0gPSAocDFrWzRdICsgaSkgJSA2NTUzNjsKLQl9Ci0KLQkvKiBQaGFzZSAyLCBTdGVwIDEgKi8KLQlwcGswID0gcDFrWzBdOwotCXBwazEgPSBwMWtbMV07Ci0JcHBrMiA9IHAxa1syXTsKLQlwcGszID0gcDFrWzNdOwotCXBwazQgPSBwMWtbNF07Ci0JcHBrNSA9IChwMWtbNF0gKyB0c2MyKSAlIDY1NTM2OwotCi0JLyogUGhhc2UyLCBTdGVwIDIgKi8KLQlwcGswID0gcHBrMCArIHRraXBfc2JveCgocHBrNSBeICgoMjU2ICoga2V5WzFdKSArIGtleVswXSkpICUgNjU1MzYpOwotCXBwazEgPSBwcGsxICsgdGtpcF9zYm94KChwcGswIF4gKCgyNTYgKiBrZXlbM10pICsga2V5WzJdKSkgJSA2NTUzNik7Ci0JcHBrMiA9IHBwazIgKyB0a2lwX3Nib3goKHBwazEgXiAoKDI1NiAqIGtleVs1XSkgKyBrZXlbNF0pKSAlIDY1NTM2KTsKLQlwcGszID0gcHBrMyArIHRraXBfc2JveCgocHBrMiBeICgoMjU2ICoga2V5WzddKSArIGtleVs2XSkpICUgNjU1MzYpOwotCXBwazQgPSBwcGs0ICsgdGtpcF9zYm94KChwcGszIF4gKCgyNTYgKiBrZXlbOV0pICsga2V5WzhdKSkgJSA2NTUzNik7Ci0JcHBrNSA9IHBwazUgKyB0a2lwX3Nib3goKHBwazQgXiAoKDI1NiAqIGtleVsxMV0pICsga2V5WzEwXSkpICUgNjU1MzYpOwotCi0JcHBrMCA9IHBwazAgKyByb3RyMShwcGs1IF4gKCgyNTYgKiBrZXlbMTNdKSArIGtleVsxMl0pKTsKLQlwcGsxID0gcHBrMSArIHJvdHIxKHBwazAgXiAoKDI1NiAqIGtleVsxNV0pICsga2V5WzE0XSkpOwotCXBwazIgPSBwcGsyICsgcm90cjEocHBrMSk7Ci0JcHBrMyA9IHBwazMgKyByb3RyMShwcGsyKTsKLQlwcGs0ID0gcHBrNCArIHJvdHIxKHBwazMpOwotCXBwazUgPSBwcGs1ICsgcm90cjEocHBrNCk7Ci0KLQkvKiBQaGFzZSAyLCBTdGVwIDMgKi8KLQkvKiBQaGFzZSAyLCBTdGVwIDMgKi8KLQotCXRzYzAgPSAodW5zaWduZWQgaW50KSgocG5oID4+IDE2KSAlIDY1NTM2KTsJLyogbXNiICovCi0JdHNjMSA9ICh1bnNpZ25lZCBpbnQpKHBuaCAlIDY1NTM2KTsKLQl0c2MyID0gKHVuc2lnbmVkIGludCkocG5sICUgNjU1MzYpOwkvKiBsc2IgKi8KLQotCXJjNGtleVswXSA9ICh0c2MyID4+IDgpICUgMjU2OwotCXJjNGtleVsxXSA9ICgoKHRzYzIgPj4gOCkgJSAyNTYpIHwgMHgyMCkgJiAweDdmOwotCXJjNGtleVsyXSA9IHRzYzIgJSAyNTY7Ci0JcmM0a2V5WzNdID0gKChwcGs1IF4gKCgyNTYgKiBrZXlbMV0pICsga2V5WzBdKSkgPj4gMSkgJSAyNTY7Ci0KLQlyYzRrZXlbNF0gPSBwcGswICUgMjU2OwotCXJjNGtleVs1XSA9IChwcGswID4+IDgpICUgMjU2OwotCi0JcmM0a2V5WzZdID0gcHBrMSAlIDI1NjsKLQlyYzRrZXlbN10gPSAocHBrMSA+PiA4KSAlIDI1NjsKLQotCXJjNGtleVs4XSA9IHBwazIgJSAyNTY7Ci0JcmM0a2V5WzldID0gKHBwazIgPj4gOCkgJSAyNTY7Ci0KLQlyYzRrZXlbMTBdID0gcHBrMyAlIDI1NjsKLQlyYzRrZXlbMTFdID0gKHBwazMgPj4gOCkgJSAyNTY7Ci0KLQlyYzRrZXlbMTJdID0gcHBrNCAlIDI1NjsKLQlyYzRrZXlbMTNdID0gKHBwazQgPj4gOCkgJSAyNTY7Ci0KLQlyYzRrZXlbMTRdID0gcHBrNSAlIDI1NjsKLQlyYzRrZXlbMTVdID0gKHBwazUgPj4gOCkgJSAyNTY7Ci19Ci0KLS8qICovCi0vKiBUUlVFOiBTdWNjZXNzISAqLwotLyogRkFMU0U6IERlY3J5cHQgRXJyb3IhICovCi0vKiAqLwotQk9PTEVBTiBSVE1QU29mdERlY3J5cHRUS0lQKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICB1OCAqcERhdGEsCi0JCQkgICAgdW5zaWduZWQgbG9uZyBEYXRhQnl0ZUNudCwKLQkJCSAgICB1OCBVc2VyUHJpb3JpdHksIHN0cnVjdCBydF9jaXBoZXJfa2V5ICpwV3BhS2V5KQotewotCXU4IEtleUlEOwotCXUzMiBIZWFkZXJMZW47Ci0JdTggZmMwOwotCXU4IGZjMTsKLQl1MTYgZmM7Ci0JdTMyIGZyYW1lX3R5cGU7Ci0JdTMyIGZyYW1lX3N1YnR5cGU7Ci0JdTMyIGZyb21fZHM7Ci0JdTMyIHRvX2RzOwotCWludCBhNF9leGlzdHM7Ci0JaW50IHFjX2V4aXN0czsKLQl1MTYgZHVyYXRpb247Ci0JdTE2IHNlcV9jb250cm9sOwotCXUxNiBxb3NfY29udHJvbDsKLQl1OCBUQVtNQUNfQUREUl9MRU5dOwotCXU4IERBW01BQ19BRERSX0xFTl07Ci0JdTggU0FbTUFDX0FERFJfTEVOXTsKLQl1OCBSQzRLZXlbMTZdOwotCXUzMiBwMWtbNV07CQkvKmZvciBtaXhfa2V5OyAqLwotCXVuc2lnbmVkIGxvbmcgcG5sOwkJLyogTGVhc3Qgc2lnbmlmaWNhbnQgMTYgYml0cyBvZiBQTiAqLwotCXVuc2lnbmVkIGxvbmcgcG5oOwkJLyogTW9zdCBzaWduaWZpY2FudCAzMiBiaXRzIG9mIFBOICovCi0JdTMyIG51bV9ibG9ja3M7Ci0JdTMyIHBheWxvYWRfcmVtYWluZGVyOwotCXN0cnVjdCBydF9hcmNmb3VyY29udGV4dCBBcmNGb3VyQ29udGV4dDsKLQl1MzIgY3JjMzIgPSAwOwotCXUzMiB0cmFpbGZjcyA9IDA7Ci0JdTggTUlDWzhdOwotCXU4IFRyYWlsTUlDWzhdOwotCi0JZmMwID0gKnBEYXRhOwotCWZjMSA9ICoocERhdGEgKyAxKTsKLQotCWZjID0gKigodTE2ICopcERhdGEpOwotCi0JZnJhbWVfdHlwZSA9ICgoZmMwID4+IDIpICYgMHgwMyk7Ci0JZnJhbWVfc3VidHlwZSA9ICgoZmMwID4+IDQpICYgMHgwZik7Ci0KLQlmcm9tX2RzID0gKGZjMSAmIDB4MikgPj4gMTsKLQl0b19kcyA9IChmYzEgJiAweDEpOwotCi0JYTRfZXhpc3RzID0gKGZyb21fZHMgJiB0b19kcyk7Ci0JcWNfZXhpc3RzID0gKChmcmFtZV9zdWJ0eXBlID09IDB4MDgpIHx8CS8qIEFzc3VtZWQgUW9TIHN1YnR5cGVzICovCi0JCSAgICAgKGZyYW1lX3N1YnR5cGUgPT0gMHgwOSkgfHwJLyogTGlrZWx5IHRvIGNoYW5nZS4gICAgKi8KLQkJICAgICAoZnJhbWVfc3VidHlwZSA9PSAweDBhKSB8fCAoZnJhbWVfc3VidHlwZSA9PSAweDBiKQotCSAgICApOwotCi0JSGVhZGVyTGVuID0gMjQ7Ci0JaWYgKGE0X2V4aXN0cykKLQkJSGVhZGVyTGVuICs9IDY7Ci0KLQlLZXlJRCA9ICooKHU4ICopKHBEYXRhICsgSGVhZGVyTGVuICsgMykpOwotCUtleUlEID0gS2V5SUQgPj4gNjsKLQotCWlmIChwV3BhS2V5W0tleUlEXS5LZXlMZW4gPT0gMCkgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIlJUTVBTb2Z0RGVjcnlwdFRLSVAgZmFpbGVkIShLZXlJRFslZF0gTGVuZ3RoIGNhbiBub3QgYmUgMClcbiIsCi0JCQkgIEtleUlEKSk7Ci0JCXJldHVybiBGQUxTRTsKLQl9Ci0KLQlkdXJhdGlvbiA9ICooKHUxNiAqKShwRGF0YSArIDIpKTsKLQotCXNlcV9jb250cm9sID0gKigodTE2ICopKHBEYXRhICsgMjIpKTsKLQotCWlmIChxY19leGlzdHMpIHsKLQkJaWYgKGE0X2V4aXN0cykgewotCQkJcW9zX2NvbnRyb2wgPSAqKCh1MTYgKikocERhdGEgKyAzMCkpOwotCQl9IGVsc2UgewotCQkJcW9zX2NvbnRyb2wgPSAqKCh1MTYgKikocERhdGEgKyAyNCkpOwotCQl9Ci0JfQotCi0JaWYgKHRvX2RzID09IDAgJiYgZnJvbV9kcyA9PSAxKSB7Ci0JCU5kaXNNb3ZlTWVtb3J5KERBLCBwRGF0YSArIDQsIE1BQ19BRERSX0xFTik7Ci0JCU5kaXNNb3ZlTWVtb3J5KFNBLCBwRGF0YSArIDE2LCBNQUNfQUREUl9MRU4pOwotCQlOZGlzTW92ZU1lbW9yeShUQSwgcERhdGEgKyAxMCwgTUFDX0FERFJfTEVOKTsJLypCU1NJRCAqLwotCX0gZWxzZSBpZiAodG9fZHMgPT0gMCAmJiBmcm9tX2RzID09IDApIHsKLQkJTmRpc01vdmVNZW1vcnkoVEEsIHBEYXRhICsgMTAsIE1BQ19BRERSX0xFTik7Ci0JCU5kaXNNb3ZlTWVtb3J5KERBLCBwRGF0YSArIDQsIE1BQ19BRERSX0xFTik7Ci0JCU5kaXNNb3ZlTWVtb3J5KFNBLCBwRGF0YSArIDEwLCBNQUNfQUREUl9MRU4pOwotCX0gZWxzZSBpZiAodG9fZHMgPT0gMSAmJiBmcm9tX2RzID09IDApIHsKLQkJTmRpc01vdmVNZW1vcnkoU0EsIHBEYXRhICsgMTAsIE1BQ19BRERSX0xFTik7Ci0JCU5kaXNNb3ZlTWVtb3J5KFRBLCBwRGF0YSArIDEwLCBNQUNfQUREUl9MRU4pOwotCQlOZGlzTW92ZU1lbW9yeShEQSwgcERhdGEgKyAxNiwgTUFDX0FERFJfTEVOKTsKLQl9IGVsc2UgaWYgKHRvX2RzID09IDEgJiYgZnJvbV9kcyA9PSAxKSB7Ci0JCU5kaXNNb3ZlTWVtb3J5KFRBLCBwRGF0YSArIDEwLCBNQUNfQUREUl9MRU4pOwotCQlOZGlzTW92ZU1lbW9yeShEQSwgcERhdGEgKyAxNiwgTUFDX0FERFJfTEVOKTsKLQkJTmRpc01vdmVNZW1vcnkoU0EsIHBEYXRhICsgMjIsIE1BQ19BRERSX0xFTik7Ci0JfQotCi0JbnVtX2Jsb2NrcyA9IChEYXRhQnl0ZUNudCAtIDE2KSAvIDE2OwotCXBheWxvYWRfcmVtYWluZGVyID0gKERhdGFCeXRlQ250IC0gMTYpICUgMTY7Ci0KLQlwbmwgPSAoKihwRGF0YSArIEhlYWRlckxlbikpICogMjU2ICsgKihwRGF0YSArIEhlYWRlckxlbiArIDIpOwotCXBuaCA9ICooKHVuc2lnbmVkIGxvbmcgKikocERhdGEgKyBIZWFkZXJMZW4gKyA0KSk7Ci0JcG5oID0gY3B1MmxlMzIocG5oKTsKLQlSVE1QVGtpcE1peEtleShwV3BhS2V5W0tleUlEXS5LZXksIFRBLCBwbmwsIHBuaCwgUkM0S2V5LCBwMWspOwotCi0JQVJDRk9VUl9JTklUKCZBcmNGb3VyQ29udGV4dCwgUkM0S2V5LCAxNik7Ci0KLQlBUkNGT1VSX0RFQ1JZUFQoJkFyY0ZvdXJDb250ZXh0LCBwRGF0YSArIEhlYWRlckxlbiwKLQkJCXBEYXRhICsgSGVhZGVyTGVuICsgOCwgRGF0YUJ5dGVDbnQgLSBIZWFkZXJMZW4gLSA4KTsKLQlOZGlzTW92ZU1lbW9yeSgmdHJhaWxmY3MsIHBEYXRhICsgRGF0YUJ5dGVDbnQgLSA4IC0gNCwgNCk7Ci0JY3JjMzIgPSBSVE1QX0NBTENfRkNTMzIoUFBQSU5JVEZDUzMyLCBwRGF0YSArIEhlYWRlckxlbiwgRGF0YUJ5dGVDbnQgLSBIZWFkZXJMZW4gLSA4IC0gNCk7CS8qU2tpcCBJVitFSVYgOCBieXRlcyAmIFNraXAgbGFzdCA0IGJ5dGVzKEZDUykuICovCi0JY3JjMzIgXj0gMHhmZmZmZmZmZjsJLyogY29tcGxlbWVudCAqLwotCi0JaWYgKGNyYzMyICE9IGNwdTJsZTMyKHRyYWlsZmNzKSkgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSVE1QU29mdERlY3J5cHRUS0lQLCBXRVAgRGF0YSBJQ1YgRXJyb3IgIVxuIikpOwkvKklDViBlcnJvci4gKi8KLQotCQlyZXR1cm4gKEZBTFNFKTsKLQl9Ci0KLQlOZGlzTW92ZU1lbW9yeShUcmFpbE1JQywgcERhdGEgKyBEYXRhQnl0ZUNudCAtIDggLSA4IC0gNCwgOCk7Ci0JUlRNUEluaXRNSUNFbmdpbmUocEFkLCBwV3BhS2V5W0tleUlEXS5LZXksIERBLCBTQSwgVXNlclByaW9yaXR5LAotCQkJICBwV3BhS2V5W0tleUlEXS5SeE1pYyk7Ci0JUlRNUFRraXBBcHBlbmQoJnBBZC0+UHJpdmF0ZUluZm8uVHgsIHBEYXRhICsgSGVhZGVyTGVuLAotCQkgICAgICAgRGF0YUJ5dGVDbnQgLSBIZWFkZXJMZW4gLSA4IC0gMTIpOwotCVJUTVBUa2lwR2V0TUlDKCZwQWQtPlByaXZhdGVJbmZvLlR4KTsKLQlOZGlzTW92ZU1lbW9yeShNSUMsIHBBZC0+UHJpdmF0ZUluZm8uVHguTUlDLCA4KTsKLQotCWlmICghTmRpc0VxdWFsTWVtb3J5KE1JQywgVHJhaWxNSUMsIDgpKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlJUTVBTb2Z0RGVjcnlwdFRLSVAsIFdFUCBEYXRhIE1JQyBFcnJvciAhXG4iKSk7CS8qTUlDIGVycm9yLiAqLwotCQkvKlJUTVBSZXBvcnRNaWNFcnJvcihwQWQsICZwV3BhS2V5W0tleUlEXSk7ICAgICAvLyBtYXJrZWQgYnkgQWxiZXJ0WSBAIDIwMDYwNjMwICovCi0JCXJldHVybiAoRkFMU0UpOwotCX0KLQkvKkRCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiUlRNUFNvZnREZWNyeXB0VEtJUCBEZWNyaXB0IGRvbmUhXG4iKTsgKi8KLQlyZXR1cm4gVFJVRTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV93ZXAuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV93ZXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZmODgwYy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fd2VwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NzMgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLQlNb2R1bGUgTmFtZToKLQlydG1wX3dlcC5jCi0KLQlBYnN0cmFjdDoKLQotCVJldmlzaW9uIEhpc3Rvcnk6Ci0JV2hvCQkJV2hlbgkJCVdoYXQKLQktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JUGF1bCBXdQkJMTAtMjgtMDIJCUluaXRpYWwKLSovCi0KLSNpbmNsdWRlCSIuLi9ydF9jb25maWcuaCIKLQotdTMyIEZDU1RBQl8zMlsyNTZdID0gewotCTB4MDAwMDAwMDAsIDB4NzcwNzMwOTYsIDB4ZWUwZTYxMmMsIDB4OTkwOTUxYmEsCi0JMHgwNzZkYzQxOSwgMHg3MDZhZjQ4ZiwgMHhlOTYzYTUzNSwgMHg5ZTY0OTVhMywKLQkweDBlZGI4ODMyLCAweDc5ZGNiOGE0LCAweGUwZDVlOTFlLCAweDk3ZDJkOTg4LAotCTB4MDliNjRjMmIsIDB4N2ViMTdjYmQsIDB4ZTdiODJkMDcsIDB4OTBiZjFkOTEsCi0JMHgxZGI3MTA2NCwgMHg2YWIwMjBmMiwgMHhmM2I5NzE0OCwgMHg4NGJlNDFkZSwKLQkweDFhZGFkNDdkLCAweDZkZGRlNGViLCAweGY0ZDRiNTUxLCAweDgzZDM4NWM3LAotCTB4MTM2Yzk4NTYsIDB4NjQ2YmE4YzAsIDB4ZmQ2MmY5N2EsIDB4OGE2NWM5ZWMsCi0JMHgxNDAxNWM0ZiwgMHg2MzA2NmNkOSwgMHhmYTBmM2Q2MywgMHg4ZDA4MGRmNSwKLQkweDNiNmUyMGM4LCAweDRjNjkxMDVlLCAweGQ1NjA0MWU0LCAweGEyNjc3MTcyLAotCTB4M2MwM2U0ZDEsIDB4NGIwNGQ0NDcsIDB4ZDIwZDg1ZmQsIDB4YTUwYWI1NmIsCi0JMHgzNWI1YThmYSwgMHg0MmIyOTg2YywgMHhkYmJiYzlkNiwgMHhhY2JjZjk0MCwKLQkweDMyZDg2Y2UzLCAweDQ1ZGY1Yzc1LCAweGRjZDYwZGNmLCAweGFiZDEzZDU5LAotCTB4MjZkOTMwYWMsIDB4NTFkZTAwM2EsIDB4YzhkNzUxODAsIDB4YmZkMDYxMTYsCi0JMHgyMWI0ZjRiNSwgMHg1NmIzYzQyMywgMHhjZmJhOTU5OSwgMHhiOGJkYTUwZiwKLQkweDI4MDJiODllLCAweDVmMDU4ODA4LCAweGM2MGNkOWIyLCAweGIxMGJlOTI0LAotCTB4MmY2ZjdjODcsIDB4NTg2ODRjMTEsIDB4YzE2MTFkYWIsIDB4YjY2NjJkM2QsCi0JMHg3NmRjNDE5MCwgMHgwMWRiNzEwNiwgMHg5OGQyMjBiYywgMHhlZmQ1MTAyYSwKLQkweDcxYjE4NTg5LCAweDA2YjZiNTFmLCAweDlmYmZlNGE1LCAweGU4YjhkNDMzLAotCTB4NzgwN2M5YTIsIDB4MGYwMGY5MzQsIDB4OTYwOWE4OGUsIDB4ZTEwZTk4MTgsCi0JMHg3ZjZhMGRiYiwgMHgwODZkM2QyZCwgMHg5MTY0NmM5NywgMHhlNjYzNWMwMSwKLQkweDZiNmI1MWY0LCAweDFjNmM2MTYyLCAweDg1NjUzMGQ4LCAweGYyNjIwMDRlLAotCTB4NmMwNjk1ZWQsIDB4MWIwMWE1N2IsIDB4ODIwOGY0YzEsIDB4ZjUwZmM0NTcsCi0JMHg2NWIwZDljNiwgMHgxMmI3ZTk1MCwgMHg4YmJlYjhlYSwgMHhmY2I5ODg3YywKLQkweDYyZGQxZGRmLCAweDE1ZGEyZDQ5LCAweDhjZDM3Y2YzLCAweGZiZDQ0YzY1LAotCTB4NGRiMjYxNTgsIDB4M2FiNTUxY2UsIDB4YTNiYzAwNzQsIDB4ZDRiYjMwZTIsCi0JMHg0YWRmYTU0MSwgMHgzZGQ4OTVkNywgMHhhNGQxYzQ2ZCwgMHhkM2Q2ZjRmYiwKLQkweDQzNjllOTZhLCAweDM0NmVkOWZjLCAweGFkNjc4ODQ2LCAweGRhNjBiOGQwLAotCTB4NDQwNDJkNzMsIDB4MzMwMzFkZTUsIDB4YWEwYTRjNWYsIDB4ZGQwZDdjYzksCi0JMHg1MDA1NzEzYywgMHgyNzAyNDFhYSwgMHhiZTBiMTAxMCwgMHhjOTBjMjA4NiwKLQkweDU3NjhiNTI1LCAweDIwNmY4NWIzLCAweGI5NjZkNDA5LCAweGNlNjFlNDlmLAotCTB4NWVkZWY5MGUsIDB4MjlkOWM5OTgsIDB4YjBkMDk4MjIsIDB4YzdkN2E4YjQsCi0JMHg1OWIzM2QxNywgMHgyZWI0MGQ4MSwgMHhiN2JkNWMzYiwgMHhjMGJhNmNhZCwKLQkweGVkYjg4MzIwLCAweDlhYmZiM2I2LCAweDAzYjZlMjBjLCAweDc0YjFkMjlhLAotCTB4ZWFkNTQ3MzksIDB4OWRkMjc3YWYsIDB4MDRkYjI2MTUsIDB4NzNkYzE2ODMsCi0JMHhlMzYzMGIxMiwgMHg5NDY0M2I4NCwgMHgwZDZkNmEzZSwgMHg3YTZhNWFhOCwKLQkweGU0MGVjZjBiLCAweDkzMDlmZjlkLCAweDBhMDBhZTI3LCAweDdkMDc5ZWIxLAotCTB4ZjAwZjkzNDQsIDB4ODcwOGEzZDIsIDB4MWUwMWYyNjgsIDB4NjkwNmMyZmUsCi0JMHhmNzYyNTc1ZCwgMHg4MDY1NjdjYiwgMHgxOTZjMzY3MSwgMHg2ZTZiMDZlNywKLQkweGZlZDQxYjc2LCAweDg5ZDMyYmUwLCAweDEwZGE3YTVhLCAweDY3ZGQ0YWNjLAotCTB4ZjliOWRmNmYsIDB4OGViZWVmZjksIDB4MTdiN2JlNDMsIDB4NjBiMDhlZDUsCi0JMHhkNmQ2YTNlOCwgMHhhMWQxOTM3ZSwgMHgzOGQ4YzJjNCwgMHg0ZmRmZjI1MiwKLQkweGQxYmI2N2YxLCAweGE2YmM1NzY3LCAweDNmYjUwNmRkLCAweDQ4YjIzNjRiLAotCTB4ZDgwZDJiZGEsIDB4YWYwYTFiNGMsIDB4MzYwMzRhZjYsIDB4NDEwNDdhNjAsCi0JMHhkZjYwZWZjMywgMHhhODY3ZGY1NSwgMHgzMTZlOGVlZiwgMHg0NjY5YmU3OSwKLQkweGNiNjFiMzhjLCAweGJjNjY4MzFhLCAweDI1NmZkMmEwLCAweDUyNjhlMjM2LAotCTB4Y2MwYzc3OTUsIDB4YmIwYjQ3MDMsIDB4MjIwMjE2YjksIDB4NTUwNTI2MmYsCi0JMHhjNWJhM2JiZSwgMHhiMmJkMGIyOCwgMHgyYmI0NWE5MiwgMHg1Y2IzNmEwNCwKLQkweGMyZDdmZmE3LCAweGI1ZDBjZjMxLCAweDJjZDk5ZThiLCAweDViZGVhZTFkLAotCTB4OWI2NGMyYjAsIDB4ZWM2M2YyMjYsIDB4NzU2YWEzOWMsIDB4MDI2ZDkzMGEsCi0JMHg5YzA5MDZhOSwgMHhlYjBlMzYzZiwgMHg3MjA3Njc4NSwgMHgwNTAwNTcxMywKLQkweDk1YmY0YTgyLCAweGUyYjg3YTE0LCAweDdiYjEyYmFlLCAweDBjYjYxYjM4LAotCTB4OTJkMjhlOWIsIDB4ZTVkNWJlMGQsIDB4N2NkY2VmYjcsIDB4MGJkYmRmMjEsCi0JMHg4NmQzZDJkNCwgMHhmMWQ0ZTI0MiwgMHg2OGRkYjNmOCwgMHgxZmRhODM2ZSwKLQkweDgxYmUxNmNkLCAweGY2YjkyNjViLCAweDZmYjA3N2UxLCAweDE4Yjc0Nzc3LAotCTB4ODgwODVhZTYsIDB4ZmYwZjZhNzAsIDB4NjYwNjNiY2EsIDB4MTEwMTBiNWMsCi0JMHg4ZjY1OWVmZiwgMHhmODYyYWU2OSwgMHg2MTZiZmZkMywgMHgxNjZjY2Y0NSwKLQkweGEwMGFlMjc4LCAweGQ3MGRkMmVlLCAweDRlMDQ4MzU0LCAweDM5MDNiM2MyLAotCTB4YTc2NzI2NjEsIDB4ZDA2MDE2ZjcsIDB4NDk2OTQ3NGQsIDB4M2U2ZTc3ZGIsCi0JMHhhZWQxNmE0YSwgMHhkOWQ2NWFkYywgMHg0MGRmMGI2NiwgMHgzN2Q4M2JmMCwKLQkweGE5YmNhZTUzLCAweGRlYmI5ZWM1LCAweDQ3YjJjZjdmLCAweDMwYjVmZmU5LAotCTB4YmRiZGYyMWMsIDB4Y2FiYWMyOGEsIDB4NTNiMzkzMzAsIDB4MjRiNGEzYTYsCi0JMHhiYWQwMzYwNSwgMHhjZGQ3MDY5MywgMHg1NGRlNTcyOSwgMHgyM2Q5NjdiZiwKLQkweGIzNjY3YTJlLCAweGM0NjE0YWI4LCAweDVkNjgxYjAyLCAweDJhNmYyYjk0LAotCTB4YjQwYmJlMzcsIDB4YzMwYzhlYTEsIDB4NWEwNWRmMWIsIDB4MmQwMmVmOGQKLX07Ci0KLS8qCi11OCAgIFdFUEtFWVtdID0gewotCQkvL0lWCi0JCTB4MDAsIDB4MTEsIDB4MjIsCi0JCS8vV0VQIEtFWQotCQkweDAwLCAweDExLCAweDIyLCAweDMzLCAweDQ0LCAweDU1LCAweDY2LCAweDc3LCAweDg4LCAweDk5LCAweEFBLCAweEJCLCAweENDCi0JfTsKLSAqLwotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZQlEZXNjcmlwdGlvbjoKLQkJSW5pdCBXRVAgZnVuY3Rpb24uCi0KLQlBcmd1bWVudHM6Ci0gICAgICBwQWQJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKLQkJcEtleSAgICAgICAgUG9pbnRlciB0byB0aGUgV0VQIEtFWQotCQlLZXlJZAkJICAgV0VQIEtleSBJRAotCQlLZXlMZW4gICAgICB0aGUgbGVuZ3RoIG9mIFdFUCBLRVkKLQkJcERlc3QgICAgICAgUG9pbnRlciB0byB0aGUgZGVzdGluYXRpb24gd2hpY2ggRW5jcnlwdGlvbiBkYXRhIHdpbGwgc3RvcmUgaW4uCi0KLQlSZXR1cm4gVmFsdWU6Ci0JCU5vbmUKLQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0JTm90ZToKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgUlRNUEluaXRXZXBFbmdpbmUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICAgICAgdTggKnBLZXksCi0JCSAgICAgICB1OCBLZXlJZCwgdTggS2V5TGVuLCBJTiB1OCAqcERlc3QpCi17Ci0JdTMyIGk7Ci0JdTggV0VQS0VZW10gPSB7Ci0JCS8qSVYgKi8KLQkJMHgwMCwgMHgxMSwgMHgyMiwKLQkJLypXRVAgS0VZICovCi0JCTB4MDAsIDB4MTEsIDB4MjIsIDB4MzMsIDB4NDQsIDB4NTUsIDB4NjYsIDB4NzcsIDB4ODgsIDB4OTksCi0JCSAgICAweEFBLCAweEJCLCAweENDCi0JfTsKLQotCXBBZC0+UHJpdmF0ZUluZm8uRkNTQ1JDMzIgPSBQUFBJTklURkNTMzI7CS8qSW5pdCBjcmMzMi4gKi8KLQotCXsKLQkJTmRpc01vdmVNZW1vcnkoV0VQS0VZICsgMywgcEtleSwgS2V5TGVuKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQotCQkJV0VQS0VZW2ldID0gUmFuZG9tQnl0ZShwQWQpOwkvKkNhbGwgbWxtZSBSYW5kb21CeXRlKCkgZnVuY3Rpb24uICovCi0JCUFSQ0ZPVVJfSU5JVCgmcEFkLT5Qcml2YXRlSW5mby5XRVBDT05URVhULCBXRVBLRVksIEtleUxlbiArIDMpOwkvKklOSVQgU0JPWCwgS0VZTEVOKzMoSVYpICovCi0KLQkJTmRpc01vdmVNZW1vcnkocERlc3QsIFdFUEtFWSwgMyk7CS8qQXBwZW5kIEluaXQgVmVjdG9yICovCi0JfQotCSoocERlc3QgKyAzKSA9IChLZXlJZCA8PCA2KTsJLypBcHBlbmQgS0VZSUQgKi8KLQotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZQlEZXNjcmlwdGlvbjoKLQkJRW5jcnlwdCB0cmFuc2ltaXR0ZWQgZGF0YQotCi0JQXJndW1lbnRzOgotICAgICAgcEFkCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCi0gICAgICBwU3JjICAgICAgICBQb2ludGVyIHRvIHRoZSB0cmFuc2ltaXR0ZWQgc291cmNlIGRhdGEgdGhhdCB3aWxsIGJlIGVuY3J5cHQKLSAgICAgIHBEZXN0ICAgICAgIFBvaW50ZXIgdG8gdGhlIGRlc3RpbmF0aW9uIHdoZXJlIGVudHJ5cHRpb24gZGF0YSB3aWxsIGJlIHN0b3JlIGluLgotICAgICAgTGVuCQkJSW5kaWNhdGUgdGhlIGxlbmd0aCBvZiB0aGUgc291cmNlIGRhdGEKLQotCVJldHVybiBWYWx1ZToKLSAgICAgIE5vbmUKLQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0JTm90ZToKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgUlRNUEVuY3J5cHREYXRhKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgICB1OCAqcFNyYywgdTggKnBEZXN0LCB1MzIgTGVuKQotewotCXBBZC0+UHJpdmF0ZUluZm8uRkNTQ1JDMzIgPQotCSAgICBSVE1QX0NBTENfRkNTMzIocEFkLT5Qcml2YXRlSW5mby5GQ1NDUkMzMiwgcFNyYywgTGVuKTsKLQlBUkNGT1VSX0VOQ1JZUFQoJnBBZC0+UHJpdmF0ZUluZm8uV0VQQ09OVEVYVCwgcERlc3QsIHBTcmMsIExlbik7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lCURlc2NyaXB0aW9uOgotCQlEZWNyeXB0IHJlY2VpdmVkIFdFUCBkYXRhCi0KLQlBcmd1bWVudHM6Ci0JCXBBZGFwdGVyCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCi0JCXBTcmMgICAgICAgIFBvaW50ZXIgdG8gdGhlIHJlY2VpdmVkIGRhdGEKLQkJTGVuICAgICAgICAgdGhlIGxlbmd0aCBvZiB0aGUgcmVjZWl2ZWQgZGF0YQotCi0JUmV0dXJuIFZhbHVlOgotCQlUUlVFICAgICAgICBEZWNyeXB0IFdFUCBkYXRhIHN1Y2Nlc3MKLQkJRkFMU0UgICAgICAgRGVjcnlwdCBXRVAgZGF0YSBmYWlsZWQKLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi1CT09MRUFOIFJUTVBTb2Z0RGVjcnlwdFdFUChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICB1OCAqcERhdGEsCi0JCQkgICB1bnNpZ25lZCBsb25nIERhdGFCeXRlQ250LCBzdHJ1Y3QgcnRfY2lwaGVyX2tleSAqcEdyb3VwS2V5KQotewotCXUzMiB0cmFpbGZjczsKLQl1MzIgY3JjMzI7Ci0JdTggS2V5SWR4OwotCXU4IFdFUEtFWVtdID0gewotCQkvKklWICovCi0JCTB4MDAsIDB4MTEsIDB4MjIsCi0JCS8qV0VQIEtFWSAqLwotCQkweDAwLCAweDExLCAweDIyLCAweDMzLCAweDQ0LCAweDU1LCAweDY2LCAweDc3LCAweDg4LCAweDk5LAotCQkgICAgMHhBQSwgMHhCQiwgMHhDQwotCX07Ci0JdTggKnBQYXlsb2FkID0gKHU4ICopIHBEYXRhICsgTEVOR1RIXzgwMl8xMTsKLQl1bnNpZ25lZCBsb25nIHBheWxvYWRfbGVuID0gRGF0YUJ5dGVDbnQgLSBMRU5HVEhfODAyXzExOwotCi0JTmRpc01vdmVNZW1vcnkoV0VQS0VZLCBwUGF5bG9hZCwgMyk7CS8qR2V0IFdFUCBJViAqLwotCi0JS2V5SWR4ID0gKCoocFBheWxvYWQgKyAzKSAmIDB4YzApID4+IDY7Ci0JaWYgKHBHcm91cEtleVtLZXlJZHhdLktleUxlbiA9PSAwKQotCQlyZXR1cm4gKEZBTFNFKTsKLQotCU5kaXNNb3ZlTWVtb3J5KFdFUEtFWSArIDMsIHBHcm91cEtleVtLZXlJZHhdLktleSwKLQkJICAgICAgIHBHcm91cEtleVtLZXlJZHhdLktleUxlbik7Ci0JQVJDRk9VUl9JTklUKCZwQWQtPlByaXZhdGVJbmZvLldFUENPTlRFWFQsIFdFUEtFWSwKLQkJICAgICBwR3JvdXBLZXlbS2V5SWR4XS5LZXlMZW4gKyAzKTsKLQlBUkNGT1VSX0RFQ1JZUFQoJnBBZC0+UHJpdmF0ZUluZm8uV0VQQ09OVEVYVCwgcFBheWxvYWQsIHBQYXlsb2FkICsgNCwKLQkJCXBheWxvYWRfbGVuIC0gNCk7Ci0JTmRpc01vdmVNZW1vcnkoJnRyYWlsZmNzLCBwUGF5bG9hZCArIHBheWxvYWRfbGVuIC0gOCwgNCk7Ci0JY3JjMzIgPSBSVE1QX0NBTENfRkNTMzIoUFBQSU5JVEZDUzMyLCBwUGF5bG9hZCwgcGF5bG9hZF9sZW4gLSA4KTsJLypTa2lwIGxhc3QgNCBieXRlcyhGQ1MpLiAqLwotCWNyYzMyIF49IDB4ZmZmZmZmZmY7CS8qIGNvbXBsZW1lbnQgKi8KLQotCWlmIChjcmMzMiAhPSBjcHUybGUzMih0cmFpbGZjcykpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiV0VQIERhdGEgQ1JDIEVycm9yIVxuIikpOwkvKkNSQyBlcnJvci4gKi8KLQkJcmV0dXJuIChGQUxTRSk7Ci0JfQotCXJldHVybiAoVFJVRSk7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lCURlc2NyaXB0aW9uOgotCQlUaGUgU3RyZWFtIENpcGhlciBFbmNyeXB0aW9uIEFsZ29yaXRobSAic3RydWN0IHJ0X2FyY2ZvdXIiIGluaXRpYWxpemUKLQotCUFyZ3VtZW50czoKLQkgICBDdHggICAgICAgICBQb2ludGVyIHRvIHN0cnVjdCBydF9hcmNmb3VyIENPTlRFWFQgKFNCT1gpCi0JCXBLZXkgICAgICAgIFBvaW50ZXIgdG8gdGhlIFdFUCBLRVkKLQkJS2V5TGVuICAgICAgSW5kaWNhdGUgdGhlIGxlbmd0aCBmbyB0aGUgV0VQIEtFWQotCi0JUmV0dXJuIFZhbHVlOgotCSAgIE5vbmUKLQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0JTm90ZToKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgQVJDRk9VUl9JTklUKHN0cnVjdCBydF9hcmNmb3VyY29udGV4dCAqQ3R4LCB1OCAqcEtleSwgdTMyIEtleUxlbikKLXsKLQl1OCB0LCB1OwotCXUzMiBrZXlpbmRleDsKLQl1MzIgc3RhdGVpbmRleDsKLQl1OCAqc3RhdGU7Ci0JdTMyIGNvdW50ZXI7Ci0KLQlzdGF0ZSA9IEN0eC0+U1RBVEU7Ci0JQ3R4LT5YID0gMDsKLQlDdHgtPlkgPSAwOwotCWZvciAoY291bnRlciA9IDA7IGNvdW50ZXIgPCAyNTY7IGNvdW50ZXIrKykKLQkJc3RhdGVbY291bnRlcl0gPSAodTgpY291bnRlcjsKLQlrZXlpbmRleCA9IDA7Ci0Jc3RhdGVpbmRleCA9IDA7Ci0JZm9yIChjb3VudGVyID0gMDsgY291bnRlciA8IDI1NjsgY291bnRlcisrKSB7Ci0JCXQgPSBzdGF0ZVtjb3VudGVyXTsKLQkJc3RhdGVpbmRleCA9IChzdGF0ZWluZGV4ICsgcEtleVtrZXlpbmRleF0gKyB0KSAmIDB4ZmY7Ci0JCXUgPSBzdGF0ZVtzdGF0ZWluZGV4XTsKLQkJc3RhdGVbc3RhdGVpbmRleF0gPSB0OwotCQlzdGF0ZVtjb3VudGVyXSA9IHU7Ci0JCWlmICgrK2tleWluZGV4ID49IEtleUxlbikKLQkJCWtleWluZGV4ID0gMDsKLQl9Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lCURlc2NyaXB0aW9uOgotCQlHZXQgYnl0ZXMgZnJvbSBzdHJ1Y3QgcnRfYXJjZm91ciBDT05URVhUIChTLUJPWCkKLQotCUFyZ3VtZW50czoKLQkgICBDdHggICAgICAgICBQb2ludGVyIHRvIHN0cnVjdCBydF9hcmNmb3VyIENPTlRFWFQgKFNCT1gpCi0KLQlSZXR1cm4gVmFsdWU6Ci0JICAgdTggIC0gdGhlIHZhbHVlIG9mIHRoZSBzdHJ1Y3QgcnRfYXJjZm91ciBDT05URVhUIChTLUJPWCkKLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi11OCBBUkNGT1VSX0JZVEUoc3RydWN0IHJ0X2FyY2ZvdXJjb250ZXh0ICpDdHgpCi17Ci0JdTMyIHg7Ci0JdTMyIHk7Ci0JdTggc3gsIHN5OwotCXU4ICpzdGF0ZTsKLQotCXN0YXRlID0gQ3R4LT5TVEFURTsKLQl4ID0gKEN0eC0+WCArIDEpICYgMHhmZjsKLQlzeCA9IHN0YXRlW3hdOwotCXkgPSAoc3ggKyBDdHgtPlkpICYgMHhmZjsKLQlzeSA9IHN0YXRlW3ldOwotCUN0eC0+WCA9IHg7Ci0JQ3R4LT5ZID0geTsKLQlzdGF0ZVt5XSA9IHN4OwotCXN0YXRlW3hdID0gc3k7Ci0KLQlyZXR1cm4gKHN0YXRlWyhzeCArIHN5KSAmIDB4ZmZdKTsKLQotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZQlEZXNjcmlwdGlvbjoKLQkJVGhlIFN0cmVhbSBDaXBoZXIgRGVjcnlwdGlvbiBBbGdvcml0aG0KLQotCUFyZ3VtZW50czoKLQkJQ3R4ICAgICAgICAgUG9pbnRlciB0byBzdHJ1Y3QgcnRfYXJjZm91ciBDT05URVhUIChTQk9YKQotCQlwRGVzdAkJCVBvaW50ZXIgdG8gdGhlIERlc3RpbmF0aW9uCi0JCXBTcmMgICAgICAgIFBvaW50ZXIgdG8gdGhlIFNvdXJjZSBkYXRhCi0JCUxlbiAgICAgICAgIEluZGljYXRlIHRoZSBsZW5ndGggb2YgdGhlIFNvdXJjZSBkYXRhCi0KLQlSZXR1cm4gVmFsdWU6Ci0JCU5vbmUKLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIEFSQ0ZPVVJfREVDUllQVChzdHJ1Y3QgcnRfYXJjZm91cmNvbnRleHQgKkN0eCwKLQkJICAgICB1OCAqcERlc3QsIHU4ICpwU3JjLCB1MzIgTGVuKQotewotCXUzMiBpOwotCi0JZm9yIChpID0gMDsgaSA8IExlbjsgaSsrKQotCQlwRGVzdFtpXSA9IHBTcmNbaV0gXiBBUkNGT1VSX0JZVEUoQ3R4KTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUJRGVzY3JpcHRpb246Ci0JCVRoZSBTdHJlYW0gQ2lwaGVyIEVuY3J5cHRpb24gQWxnb3JpdGhtCi0KLQlBcmd1bWVudHM6Ci0JCUN0eCAgICAgICAgIFBvaW50ZXIgdG8gc3RydWN0IHJ0X2FyY2ZvdXIgQ09OVEVYVCAoU0JPWCkKLQkJcERlc3QJCQlQb2ludGVyIHRvIHRoZSBEZXN0aW5hdGlvbgotCQlwU3JjICAgICAgICBQb2ludGVyIHRvIHRoZSBTb3VyY2UgZGF0YQotCQlMZW4gICAgICAgICBJbmRpY2F0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBTb3VyY2UgZHRhCi0KLQlSZXR1cm4gVmFsdWU6Ci0JCU5vbmUKLQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0JTm90ZToKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgQVJDRk9VUl9FTkNSWVBUKHN0cnVjdCBydF9hcmNmb3VyY29udGV4dCAqQ3R4LAotCQkgICAgIHU4ICpwRGVzdCwgdTggKnBTcmMsIHUzMiBMZW4pCi17Ci0JdTMyIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTGVuOyBpKyspCi0JCXBEZXN0W2ldID0gcFNyY1tpXSBeIEFSQ0ZPVVJfQllURShDdHgpOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZQlEZXNjcmlwdGlvbjoKLQkJVGhlIFN0cmVhbSBDaXBoZXIgRW5jcnlwdGlvbiBBbGdvcml0aG0gd2hpY2ggY29uZm9ybSB0byB0aGUgc3BlY2lhbCByZXF1aXJlbWVudCB0byBlbmNyeXB0ICBHVEsuCi0KLQlBcmd1bWVudHM6Ci0JCUN0eCAgICAgICAgIFBvaW50ZXIgdG8gc3RydWN0IHJ0X2FyY2ZvdXIgQ09OVEVYVCAoU0JPWCkKLQkJcERlc3QJCQlQb2ludGVyIHRvIHRoZSBEZXN0aW5hdGlvbgotCQlwU3JjICAgICAgICBQb2ludGVyIHRvIHRoZSBTb3VyY2UgZGF0YQotCQlMZW4gICAgICAgICBJbmRpY2F0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBTb3VyY2UgZHRhCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi0KLXZvaWQgV1BBQVJDRk9VUl9FTkNSWVBUKHN0cnVjdCBydF9hcmNmb3VyY29udGV4dCAqQ3R4LAotCQkJdTggKnBEZXN0LCB1OCAqcFNyYywgdTMyIExlbikKLXsKLQl1MzIgaTsKLQkvKmRpc2NhcmQgZmlyc3QgMjU2IGJ5dGVzICovCi0JZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQotCQlBUkNGT1VSX0JZVEUoQ3R4KTsKLQotCWZvciAoaSA9IDA7IGkgPCBMZW47IGkrKykKLQkJcERlc3RbaV0gPSBwU3JjW2ldIF4gQVJDRk9VUl9CWVRFKEN0eCk7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lCURlc2NyaXB0aW9uOgotCQlDYWxjdWxhdGUgYSBuZXcgRkNTIGdpdmVuIHRoZSBjdXJyZW50IEZDUyBhbmQgdGhlIG5ldyBkYXRhLgotCi0JQXJndW1lbnRzOgotCQlGY3MJICAgICAgdGhlIG9yaWdpbmFsIEZDUyB2YWx1ZQotCQlDcCAgICAgICAgICBwb2ludGVyIHRvIHRoZSBkYXRhIHdoaWNoIHdpbGwgYmUgY2FsY3VsYXRlIHRoZSBGQ1MKLQkJTGVuICAgICAgICAgdGhlIGxlbmd0aCBvZiB0aGUgZGF0YQotCi0JUmV0dXJuIFZhbHVlOgotCQl1MzIgLSBGQ1MgMzIgYml0cwotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdTMyIFJUTVBfQ0FMQ19GQ1MzMih1MzIgRmNzLCB1OCAqQ3AsIGludCBMZW4pCi17Ci0Jd2hpbGUgKExlbi0tKQotCQlGY3MgPSAoKChGY3MpID4+IDgpIF4gRkNTVEFCXzMyWygoRmNzKSBeICgqQ3ArKykpICYgMHhmZl0pOwotCi0JcmV0dXJuIChGY3MpOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZQlEZXNjcmlwdGlvbjoKLQkJR2V0IGxhc3QgRkNTIGFuZCBlbmNyeXB0IGl0IHRvIHRoZSBkZXN0aW5hdGlvbgotCi0JQXJndW1lbnRzOgotCQlwRGVzdAkJCVBvaW50ZXIgdG8gdGhlIERlc3RpbmF0aW9uCi0KLQlSZXR1cm4gVmFsdWU6Ci0JCU5vbmUKLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFJUTVBTZXRJQ1Yoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1OCAqcERlc3QpCi17Ci0JcEFkLT5Qcml2YXRlSW5mby5GQ1NDUkMzMiBePSAweGZmZmZmZmZmOwkvKiBjb21wbGVtZW50ICovCi0JcEFkLT5Qcml2YXRlSW5mby5GQ1NDUkMzMiA9IGNwdTJsZTMyKHBBZC0+UHJpdmF0ZUluZm8uRkNTQ1JDMzIpOwotCi0JQVJDRk9VUl9FTkNSWVBUKCZwQWQtPlByaXZhdGVJbmZvLldFUENPTlRFWFQsIHBEZXN0LAotCQkJKHU4ICopJiBwQWQtPlByaXZhdGVJbmZvLkZDU0NSQzMyLCA0KTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV93cGEuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV93cGEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE2ZWJlYy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fd3BhLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMDEwICswLDAgQEAKLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUmFsaW5rIFRlY2ggSW5jLgotICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAotICogSHNpbmNodSBDb3VudHkgMzAyLAotICogVGFpd2FuLCBSLk8uQy4KLSAqCi0gKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0JTW9kdWxlIE5hbWU6Ci0Jd3BhLmMKLQotCUFic3RyYWN0OgotCi0JUmV2aXNpb24gSGlzdG9yeToKLQlXaG8JCQlXaGVuCQkJV2hhdAotCS0tLS0tLS0tCS0tLS0tLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlKYW4JTGVlCQkwMy0wNy0yMgkJSW5pdGlhbAotCVBhdWwgTGluCTAzLTExLTI4CQlNb2RpZnkgZm9yIHN1cHBsaWNhbnQKLSovCi0jaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCi0vKiBXUEEgT1VJICovCi11OCBPVUlfV1BBX05PTkVfQUtNWzRdID0geyAweDAwLCAweDUwLCAweEYyLCAweDAwIH07Ci11OCBPVUlfV1BBX1ZFUlNJT05bNF0gPSB7IDB4MDAsIDB4NTAsIDB4RjIsIDB4MDEgfTsKLXU4IE9VSV9XUEFfV0VQNDBbNF0gPSB7IDB4MDAsIDB4NTAsIDB4RjIsIDB4MDEgfTsKLXU4IE9VSV9XUEFfVEtJUFs0XSA9IHsgMHgwMCwgMHg1MCwgMHhGMiwgMHgwMiB9OwotdTggT1VJX1dQQV9DQ01QWzRdID0geyAweDAwLCAweDUwLCAweEYyLCAweDA0IH07Ci11OCBPVUlfV1BBX1dFUDEwNFs0XSA9IHsgMHgwMCwgMHg1MCwgMHhGMiwgMHgwNSB9OwotdTggT1VJX1dQQV84MDIxWF9BS01bNF0gPSB7IDB4MDAsIDB4NTAsIDB4RjIsIDB4MDEgfTsKLXU4IE9VSV9XUEFfUFNLX0FLTVs0XSA9IHsgMHgwMCwgMHg1MCwgMHhGMiwgMHgwMiB9OwotCi0vKiBXUEEyIE9VSSAqLwotdTggT1VJX1dQQTJfV0VQNDBbNF0gPSB7IDB4MDAsIDB4MEYsIDB4QUMsIDB4MDEgfTsKLXU4IE9VSV9XUEEyX1RLSVBbNF0gPSB7IDB4MDAsIDB4MEYsIDB4QUMsIDB4MDIgfTsKLXU4IE9VSV9XUEEyX0NDTVBbNF0gPSB7IDB4MDAsIDB4MEYsIDB4QUMsIDB4MDQgfTsKLXU4IE9VSV9XUEEyXzgwMjFYX0FLTVs0XSA9IHsgMHgwMCwgMHgwRiwgMHhBQywgMHgwMSB9OwotdTggT1VJX1dQQTJfUFNLX0FLTVs0XSA9IHsgMHgwMCwgMHgwRiwgMHhBQywgMHgwMiB9OwotdTggT1VJX1dQQTJfV0VQMTA0WzRdID0geyAweDAwLCAweDBGLCAweEFDLCAweDA1IH07Ci0KLXN0YXRpYyB2b2lkIENvbnN0cnVjdEVhcG9sS2V5RGF0YShzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwRW50cnksCi0JCQkJICB1OCBHcm91cEtleVdlcFN0YXR1cywKLQkJCQkgIHU4IGtleURlc2NWZXIsCi0JCQkJICB1OCBNc2dUeXBlLAotCQkJCSAgdTggRGVmYXVsdEtleUlkeCwKLQkJCQkgIHU4ICogR1RLLAotCQkJCSAgdTggKiBSU05JRSwKLQkJCQkgIHU4IFJTTklFX0xFTiwgc3RydWN0IHJ0X2VhcG9sX3BhY2tldCAqIHBNc2cpOwotCi1zdGF0aWMgdm9pZCBDYWxjdWxhdGVNSUModTggS2V5RGVzY1ZlciwKLQkJCSB1OCAqIFBUSywgc3RydWN0IHJ0X2VhcG9sX3BhY2tldCAqIHBNc2cpOwotCi1zdGF0aWMgdm9pZCBXcGFFQVBQYWNrZXRBY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKTsKLQotc3RhdGljIHZvaWQgV3BhRUFQT0xBU0ZBbGVydEFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJICAgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSk7Ci0KLXN0YXRpYyB2b2lkIFdwYUVBUE9MTG9nb2ZmQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSk7Ci0KLXN0YXRpYyB2b2lkIFdwYUVBUE9MU3RhcnRBY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCXN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pOwotCi1zdGF0aWMgdm9pZCBXcGFFQVBPTEtleUFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pOwotCi0vKgotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgRGVzY3JpcHRpb246Ci0gICAgICAgIGFzc29jaWF0aW9uIHN0YXRlIG1hY2hpbmUgaW5pdCwgaW5jbHVkaW5nIHN0YXRlIHRyYW5zaXRpb24gYW5kIHRpbWVyIGluaXQKLSAgICBQYXJhbWV0ZXJzOgotICAgICAgICBTIC0gcG9pbnRlciB0byB0aGUgYXNzb2NpYXRpb24gc3RhdGUgbWFjaGluZQotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgV3BhU3RhdGVNYWNoaW5lSW5pdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgc3RydWN0IHJ0X3N0YXRlX21hY2hpbmUgKlMsIE9VVCBTVEFURV9NQUNISU5FX0ZVTkMgVHJhbnNbXSkKLXsKLQlTdGF0ZU1hY2hpbmVJbml0KFMsIChTVEFURV9NQUNISU5FX0ZVTkMgKikgVHJhbnMsIE1BWF9XUEFfUFRLX1NUQVRFLAotCQkJIE1BWF9XUEFfTVNHLCAoU1RBVEVfTUFDSElORV9GVU5DKSBEcm9wLCBXUEFfUFRLLAotCQkJIFdQQV9NQUNISU5FX0JBU0UpOwotCi0JU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIFdQQV9QVEssIE1UMl9FQVBQYWNrZXQsCi0JCQkgICAgICAoU1RBVEVfTUFDSElORV9GVU5DKSBXcGFFQVBQYWNrZXRBY3Rpb24pOwotCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBXUEFfUFRLLCBNVDJfRUFQT0xTdGFydCwKLQkJCSAgICAgIChTVEFURV9NQUNISU5FX0ZVTkMpIFdwYUVBUE9MU3RhcnRBY3Rpb24pOwotCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBXUEFfUFRLLCBNVDJfRUFQT0xMb2dvZmYsCi0JCQkgICAgICAoU1RBVEVfTUFDSElORV9GVU5DKSBXcGFFQVBPTExvZ29mZkFjdGlvbik7Ci0JU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIFdQQV9QVEssIE1UMl9FQVBPTEtleSwKLQkJCSAgICAgIChTVEFURV9NQUNISU5FX0ZVTkMpIFdwYUVBUE9MS2V5QWN0aW9uKTsKLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgV1BBX1BUSywgTVQyX0VBUE9MQVNGQWxlcnQsCi0JCQkgICAgICAoU1RBVEVfTUFDSElORV9GVU5DKSBXcGFFQVBPTEFTRkFsZXJ0QWN0aW9uKTsKLX0KLQotLyoKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIERlc2NyaXB0aW9uOgotICAgICAgICB0aGlzIGlzIHN0YXRlIG1hY2hpbmUgZnVuY3Rpb24uCi0gICAgICAgIFdoZW4gcmVjZWl2aW5nIEVBUCBwYWNrZXRzIHdoaWNoIGlzICBmb3IgODAyLjF4IGF1dGhlbnRpY2F0aW9uIHVzZS4KLSAgICAgICAgTm90IHVzZSBpbiBQU0sgY2FzZQotICAgIFJldHVybjoKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgV3BhRUFQUGFja2V0QWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSkKLXsKLX0KLQotdm9pZCBXcGFFQVBPTEFTRkFsZXJ0QWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSkKLXsKLX0KLQotdm9pZCBXcGFFQVBPTExvZ29mZkFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pCi17Ci19Ci0KLS8qCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBEZXNjcmlwdGlvbjoKLSAgICAgICBTdGFydCA0LXdheSBIUyB3aGVuIHJjdiBFQVBPTF9TVEFSVCB3aGljaCBtYXkgY3JlYXRlIGJ5IG91ciBkcml2ZXIgaW4gYXNzb2MuYwotICAgIFJldHVybjoKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgV3BhRUFQT0xTdGFydEFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pCi17Ci0Jc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcEVudHJ5OwotCXN0cnVjdCBydF9oZWFkZXJfODAyXzExICogcEhlYWRlcjsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIldwYUVBUE9MU3RhcnRBY3Rpb24gPT09PiBcbiIpKTsKLQotCXBIZWFkZXIgPSAoc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEgKikgRWxlbS0+TXNnOwotCi0JLypGb3Igbm9ybWFvbCBQU0ssIHdlIGVucXVldWUgYW4gRUFQT0wtU3RhcnQgY29tbWFuZCB0byB0cmlnZ2VyIHRoZSBwcm9jZXNzLiAqLwotCWlmIChFbGVtLT5Nc2dMZW4gPT0gNikKLQkJcEVudHJ5ID0gTWFjVGFibGVMb29rdXAocEFkLCBFbGVtLT5Nc2cpOwotCWVsc2UgewotCQlwRW50cnkgPSBNYWNUYWJsZUxvb2t1cChwQWQsIHBIZWFkZXItPkFkZHIyKTsKLQl9Ci0KLQlpZiAocEVudHJ5KSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiIFBvcnRTZWN1cmVkKCVkKSwgV3BhU3RhdGUoJWQpLCBBdXRoTW9kZSglZCksIFBNS0lEX0NhY2hlSWR4KCVkKSBcbiIsCi0JCQkgIHBFbnRyeS0+UG9ydFNlY3VyZWQsIHBFbnRyeS0+V3BhU3RhdGUsCi0JCQkgIHBFbnRyeS0+QXV0aE1vZGUsIHBFbnRyeS0+UE1LSURfQ2FjaGVJZHgpKTsKLQotCQlpZiAoKHBFbnRyeS0+UG9ydFNlY3VyZWQgPT0gV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVEKQotCQkgICAgJiYgKHBFbnRyeS0+V3BhU3RhdGUgPCBBU19QVEtTVEFSVCkKLQkJICAgICYmICgocEVudHJ5LT5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spCi0JCQl8fCAocEVudHJ5LT5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLKQotCQkJfHwgKChwRW50cnktPkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIpCi0JCQkgICAgJiYgKHBFbnRyeS0+UE1LSURfQ2FjaGVJZHggIT0gRU5UUllfTk9UX0ZPVU5EKSkpKSB7Ci0JCQlwRW50cnktPlByaXZhY3lGaWx0ZXIgPSBOZGlzODAyXzExUHJpdkZpbHRlcjgwMjF4V0VQOwotCQkJcEVudHJ5LT5XcGFTdGF0ZSA9IEFTX0lOSVRQU0s7Ci0JCQlwRW50cnktPlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVEOwotCQkJTmRpc1plcm9NZW1vcnkocEVudHJ5LT5SX0NvdW50ZXIsCi0JCQkJICAgICAgIHNpemVvZihwRW50cnktPlJfQ291bnRlcikpOwotCQkJcEVudHJ5LT5SZVRyeUNvdW50ZXIgPSBQRUVSX01TRzFfUkVUUllfVElNRVJfQ1RSOwotCi0JCQlXUEFTdGFydDRXYXlIUyhwQWQsIHBFbnRyeSwgUEVFUl9NU0cxX1JFVFJZX0VYRUNfSU5UVik7Ci0JCX0KLQl9Ci19Ci0KLS8qCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBEZXNjcmlwdGlvbjoKLSAgICAgICAgVGhpcyBpcyBzdGF0ZSBtYWNoaW5lIGZ1bmN0aW9uLgotICAgICAgICBXaGVuIHJlY2VpdmluZyBFQVBPTCBwYWNrZXRzIHdoaWNoIGlzICBmb3IgODAyLjF4IGtleSBtYW5hZ2VtZW50LgotICAgICAgICBVc2UgYm90aCBpbiBXUEEsIGFuZCBXUEFQU0sgY2FzZS4KLSAgICAgICAgSW4gdGhpcyBmdW5jdGlvbiwgZnVydGhlciBkaXNwYXRjaCB0byBkaWZmZXJlbnQgZnVuY3Rpb25zIGFjY29yZGluZyB0byB0aGUgcmVjZWl2ZWQgcGFja2V0LiAgMyBjYXRlZ29yaWVzIGFyZSA6Ci0gICAgICAgICAgMS4gIG5vcm1hbCA0LXdheSBwYWlyd2lzZWtleSBhbmQgMi13YXkgZ3JvdXBrZXkgaGFuZHNoYWtlCi0gICAgICAgICAgMi4gIE1JQyBlcnJvciAoQ291bnRlcm1lYXN1cmVzIGF0dGFjaykgIHJlcG9ydCBwYWNrZXQgZnJvbSBTVEEuCi0gICAgICAgICAgMy4gIFJlcXVlc3QgZm9yIHBhaXJ3aXNlL2dyb3VwIGtleSB1cGRhdGUgZnJvbSBTVEEKLSAgICBSZXR1cm46Ci0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFdwYUVBUE9MS2V5QWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSkKLXsKLQlzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwRW50cnk7Ci0Jc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEgKiBwSGVhZGVyOwotCXN0cnVjdCBydF9lYXBvbF9wYWNrZXQgKiBwRWFwb2xfcGFja2V0OwotCXN0cnVjdCBydF9rZXlfaW5mbyBwZWVyS2V5SW5mbzsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIldwYUVBUE9MS2V5QWN0aW9uID09PT5cbiIpKTsKLQotCXBIZWFkZXIgPSAoc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEgKikgRWxlbS0+TXNnOwotCXBFYXBvbF9wYWNrZXQgPQotCSAgICAoc3RydWN0IHJ0X2VhcG9sX3BhY2tldCAqKSAmIEVsZW0tPk1zZ1tMRU5HVEhfODAyXzExICsgTEVOR1RIXzgwMl8xX0hdOwotCi0JTmRpc1plcm9NZW1vcnkoKHU4ICopJiBwZWVyS2V5SW5mbywgc2l6ZW9mKHBlZXJLZXlJbmZvKSk7Ci0JTmRpc01vdmVNZW1vcnkoKHU4ICopJiBwZWVyS2V5SW5mbywKLQkJICAgICAgICh1OCAqKSYgcEVhcG9sX3BhY2tldC0+S2V5RGVzYy5LZXlJbmZvLAotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBydF9rZXlfaW5mbykpOwotCi0JaGV4X2R1bXAoIlJlY2VpdmVkIEVhcG9sIGZyYW1lIiwgKHVuc2lnbmVkIGNoYXIgKilwRWFwb2xfcGFja2V0LAotCQkgKEVsZW0tPk1zZ0xlbiAtIExFTkdUSF84MDJfMTEgLSBMRU5HVEhfODAyXzFfSCkpOwotCi0JKigodTE2ICopICYgcGVlcktleUluZm8pID0gY3B1MmxlMTYoKigodTE2ICopICYgcGVlcktleUluZm8pKTsKLQotCWRvIHsKLQkJcEVudHJ5ID0gTWFjVGFibGVMb29rdXAocEFkLCBwSGVhZGVyLT5BZGRyMik7Ci0KLQkJaWYgKCFwRW50cnkKLQkJICAgIHx8ICgoIXBFbnRyeS0+VmFsaWRBc0NMSSkgJiYgKCFwRW50cnktPlZhbGlkQXNBcENsaSkpKQotCQkJYnJlYWs7Ci0KLQkJaWYgKHBFbnRyeS0+QXV0aE1vZGUgPCBOZGlzODAyXzExQXV0aE1vZGVXUEEpCi0JCQlicmVhazsKLQotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSgiUmVjZWl2ZSBFQVBvTC1LZXkgZnJhbWUgZnJvbSBTVEEgJXBNRlxuIiwKLQkJCQlwRW50cnktPkFkZHIpKTsKLQotCQlpZiAoKChwRWFwb2xfcGFja2V0LT5Qcm9WZXIgIT0gRUFQT0xfVkVSKQotCQkgICAgICYmIChwRWFwb2xfcGFja2V0LT5Qcm9WZXIgIT0gRUFQT0xfVkVSMikpCi0JCSAgICB8fCAoKHBFYXBvbF9wYWNrZXQtPktleURlc2MuVHlwZSAhPSBXUEExX0tFWV9ERVNDKQotCQkJJiYgKHBFYXBvbF9wYWNrZXQtPktleURlc2MuVHlwZSAhPSBXUEEyX0tFWV9ERVNDKSkpIHsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJCSAoIktleSBkZXNjcmlwdGVyIGRvZXMgbm90IG1hdGNoIHdpdGggV1BBIHJ1bGVcbiIpKTsKLQkJCWJyZWFrOwotCQl9Ci0JCS8qIFRoZSB2YWx1ZSAxIHNoYWxsIGJlIHVzZWQgZm9yIGFsbCBFQVBPTC1LZXkgZnJhbWVzIHRvIGFuZCBmcm9tIGEgU1RBIHdoZW4gKi8KLQkJLyogbmVpdGhlciB0aGUgZ3JvdXAgbm9yIHBhaXJ3aXNlIGNpcGhlcnMgYXJlIENDTVAgZm9yIEtleSBEZXNjcmlwdG9yIDEuICovCi0JCWlmICgocEVudHJ5LT5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkKLQkJICAgICYmIChwZWVyS2V5SW5mby5LZXlEZXNjVmVyICE9IERFU0NfVFlQRV9US0lQKSkgewotCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkJICgiS2V5IGRlc2NyaXB0ZXIgdmVyc2lvbiBub3QgbWF0Y2goVEtJUCkgXG4iKSk7Ci0JCQlicmVhazsKLQkJfQotCQkvKiBUaGUgdmFsdWUgMiBzaGFsbCBiZSB1c2VkIGZvciBhbGwgRUFQT0wtS2V5IGZyYW1lcyB0byBhbmQgZnJvbSBhIFNUQSB3aGVuICovCi0JCS8qIGVpdGhlciB0aGUgcGFpcndpc2Ugb3IgdGhlIGdyb3VwIGNpcGhlciBpcyBBRVMtQ0NNUCBmb3IgS2V5IERlc2NyaXB0b3IgMi4gKi8KLQkJZWxzZSBpZiAoKHBFbnRyeS0+V2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCi0JCQkgJiYgKHBlZXJLZXlJbmZvLktleURlc2NWZXIgIT0gREVTQ19UWVBFX0FFUykpIHsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJCSAoIktleSBkZXNjcmlwdGVyIHZlcnNpb24gbm90IG1hdGNoKEFFUykgXG4iKSk7Ci0JCQlicmVhazsKLQkJfQotCQkvKiBDaGVjayBpZiB0aGlzIFNUQSBpcyBpbiBjbGFzcyAzIHN0YXRlIGFuZCB0aGUgV1BBIHN0YXRlIGlzIHN0YXJ0ZWQgKi8KLQkJaWYgKChwRW50cnktPlNzdCA9PSBTU1RfQVNTT0MpCi0JCSAgICAmJiAocEVudHJ5LT5XcGFTdGF0ZSA+PSBBU19JTklUUFNLKSkgewotCQkJLyogQ2hlY2sgdGhlIEtleSBBY2sgKGJpdCA3KSBvZiB0aGUgS2V5IEluZm9ybWF0aW9uIHRvIGRldGVybWluZSB0aGUgQXV0aGVudGljYXRvciAqLwotCQkJLyogb3Igbm90LiAqLwotCQkJLyogQW4gRUFQT0wtS2V5IGZyYW1lIHRoYXQgaXMgc2VudCBieSB0aGUgU3VwcGxpY2FudCBpbiByZXNwb25zZSB0byBhbiBFQVBPTC0gKi8KLQkJCS8qIEtleSBmcmFtZSBmcm9tIHRoZSBBdXRoZW50aWNhdG9yIG11c3Qgbm90IGhhdmUgdGhlIEFjayBiaXQgc2V0LiAqLwotCQkJaWYgKHBlZXJLZXlJbmZvLktleUFjayA9PSAxKSB7Ci0JCQkJLyogVGhlIGZyYW1lIGlzIHNuZXQgYnkgQXV0aGVudGljYXRvci4gKi8KLQkJCQkvKiBTbyB0aGUgU3VwcGxpY2FudCBzaWRlIHNoYWxsIGhhbmRsZSB0aGlzLiAqLwotCi0JCQkJaWYgKChwZWVyS2V5SW5mby5TZWN1cmUgPT0gMCkKLQkJCQkgICAgJiYgKHBlZXJLZXlJbmZvLlJlcXVlc3QgPT0gMCkKLQkJCQkgICAgJiYgKHBlZXJLZXlJbmZvLkVycm9yID09IDApCi0JCQkJICAgICYmIChwZWVyS2V5SW5mby5LZXlUeXBlID09IFBBSVJXSVNFS0VZKSkgewotCQkJCQkvKiBQcm9jZXNzIDEuIHRoZSBtZXNzYWdlIDEgb2YgNC13YXkgSFMgaW4gV1BBIG9yIFdQQTIgKi8KLQkJCQkJLyogICAgICAgICAgICAgICAgICAgICAgICBFQVBPTC1LZXkoMCwwLDEsMCxQLDAsMCxBTm9uY2UsMCxEYXRhS0RfTTEpICovCi0JCQkJCS8qICAgICAgICAgICAgICAgICAyLiB0aGUgbWVzc2FnZSAzIG9mIDQtd2F5IEhTIGluIFdQQSAqLwotCQkJCQkvKiAgICAgICAgICAgICAgICAgICAgICAgIEVBUE9MLUtleSgwLDEsMSwxLFAsMCxLZXlSU0MsQU5vbmNlLE1JQyxEYXRhS0RfTTMpICovCi0JCQkJCWlmIChwZWVyS2V5SW5mby5LZXlNaWMgPT0gMCkKLQkJCQkJCVBlZXJQYWlyTXNnMUFjdGlvbihwQWQsIHBFbnRyeSwKLQkJCQkJCQkJICAgRWxlbSk7Ci0JCQkJCWVsc2UKLQkJCQkJCVBlZXJQYWlyTXNnM0FjdGlvbihwQWQsIHBFbnRyeSwKLQkJCQkJCQkJICAgRWxlbSk7Ci0JCQkJfSBlbHNlIGlmICgocGVlcktleUluZm8uU2VjdXJlID09IDEpCi0JCQkJCSAgICYmIChwZWVyS2V5SW5mby5LZXlNaWMgPT0gMSkKLQkJCQkJICAgJiYgKHBlZXJLZXlJbmZvLlJlcXVlc3QgPT0gMCkKLQkJCQkJICAgJiYgKHBlZXJLZXlJbmZvLkVycm9yID09IDApKSB7Ci0JCQkJCS8qIFByb2Nlc3MgMS4gdGhlIG1lc3NhZ2UgMyBvZiA0LXdheSBIUyBpbiBXUEEyICovCi0JCQkJCS8qICAgICAgICAgICAgICAgICAgICAgICAgRUFQT0wtS2V5KDEsMSwxLDEsUCwwLEtleVJTQyxBTm9uY2UsTUlDLERhdGFLRF9NMykgKi8KLQkJCQkJLyogICAgICAgICAgICAgICAgIDIuIHRoZSBtZXNzYWdlIDEgb2YgZ3JvdXAgS1MgaW4gV1BBIG9yIFdQQTIgKi8KLQkJCQkJLyogICAgICAgICAgICAgICAgICAgICAgICBFQVBPTC1LZXkoMSwxLDEsMCxHLDAsS2V5IFJTQywwLCBNSUMsR1RLW05dKSAqLwotCQkJCQlpZiAocGVlcktleUluZm8uS2V5VHlwZSA9PSBQQUlSV0lTRUtFWSkKLQkJCQkJCVBlZXJQYWlyTXNnM0FjdGlvbihwQWQsIHBFbnRyeSwKLQkJCQkJCQkJICAgRWxlbSk7Ci0JCQkJCWVsc2UKLQkJCQkJCVBlZXJHcm91cE1zZzFBY3Rpb24ocEFkLCBwRW50cnksCi0JCQkJCQkJCSAgICBFbGVtKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCS8qIFRoZSBmcmFtZSBpcyBzbmV0IGJ5IFN1cHBsaWNhbnQuICovCi0JCQkJLyogU28gdGhlIEF1dGhlbnRpY2F0b3Igc2lkZSBzaGFsbCBoYW5kbGUgdGhpcy4gKi8KLQkJCQlpZiAoKHBlZXJLZXlJbmZvLlJlcXVlc3QgPT0gMCkgJiYKLQkJCQkgICAgKHBlZXJLZXlJbmZvLkVycm9yID09IDApICYmCi0JCQkJICAgIChwZWVyS2V5SW5mby5LZXlNaWMgPT0gMSkpIHsKLQkJCQkJaWYgKHBlZXJLZXlJbmZvLlNlY3VyZSA9PSAwCi0JCQkJCSAgICAmJiBwZWVyS2V5SW5mby5LZXlUeXBlID09Ci0JCQkJCSAgICBQQUlSV0lTRUtFWSkgewotCQkJCQkJLyogRUFQT0wtS2V5KDAsMSwwLDAsUCwwLDAsU05vbmNlLE1JQyxEYXRhKSAqLwotCQkJCQkJLyogUHJvY2VzcyAxLiBtZXNzYWdlIDIgb2YgNC13YXkgSFMgaW4gV1BBIG9yIFdQQTIgKi8KLQkJCQkJCS8qICAgICAgICAgICAgICAgICAyLiBtZXNzYWdlIDQgb2YgNC13YXkgSFMgaW4gV1BBICovCi0JCQkJCQlpZiAoQ09OVl9BUlJBUllfVE9fdTE2Ci0JCQkJCQkgICAgKHBFYXBvbF9wYWNrZXQtPktleURlc2MuCi0JCQkJCQkgICAgIEtleURhdGFMZW4pID09IDApIHsKLQkJCQkJCQlQZWVyUGFpck1zZzRBY3Rpb24ocEFkLAotCQkJCQkJCQkJICAgcEVudHJ5LAotCQkJCQkJCQkJICAgRWxlbSk7Ci0JCQkJCQl9IGVsc2UgewotCQkJCQkJCVBlZXJQYWlyTXNnMkFjdGlvbihwQWQsCi0JCQkJCQkJCQkgICBwRW50cnksCi0JCQkJCQkJCQkgICBFbGVtKTsKLQkJCQkJCX0KLQkJCQkJfSBlbHNlIGlmIChwZWVyS2V5SW5mby5TZWN1cmUgPT0gMQotCQkJCQkJICAgJiYgcGVlcktleUluZm8uS2V5VHlwZSA9PQotCQkJCQkJICAgUEFJUldJU0VLRVkpIHsKLQkJCQkJCS8qIEVBUE9MLUtleSgxLDEsMCwwLFAsMCwwLDAsTUlDLDApICovCi0JCQkJCQkvKiBQcm9jZXNzIG1lc3NhZ2UgNCBvZiA0LXdheSBIUyBpbiBXUEEyICovCi0JCQkJCQlQZWVyUGFpck1zZzRBY3Rpb24ocEFkLCBwRW50cnksCi0JCQkJCQkJCSAgIEVsZW0pOwotCQkJCQl9IGVsc2UgaWYgKHBlZXJLZXlJbmZvLlNlY3VyZSA9PSAxCi0JCQkJCQkgICAmJiBwZWVyS2V5SW5mby5LZXlUeXBlID09Ci0JCQkJCQkgICBHUk9VUEtFWSkgewotCQkJCQkJLyogRUFQT0wtS2V5KDEsMSwwLDAsRywwLDAsMCxNSUMsMCkgKi8KLQkJCQkJCS8qIFByb2Nlc3MgbWVzc2FnZSAyIG9mIEdyb3VwIGtleSBIUyBpbiBXUEEgb3IgV1BBMiAqLwotCQkJCQkJUGVlckdyb3VwTXNnMkFjdGlvbihwQWQsIHBFbnRyeSwKLQkJCQkJCQkJICAgICZFbGVtLT4KLQkJCQkJCQkJICAgIE1zZwotCQkJCQkJCQkgICAgW0xFTkdUSF84MDJfMTFdLAotCQkJCQkJCQkgICAgKEVsZW0tPgotCQkJCQkJCQkgICAgIE1zZ0xlbiAtCi0JCQkJCQkJCSAgICAgTEVOR1RIXzgwMl8xMSkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JfSB3aGlsZSAoRkFMU0UpOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZQlEZXNjcmlwdGlvbjoKLQkJQ29weSBmcmFtZSBmcm9tIHdhaXRpbmcgcXVldWUgaW50byByZWxhdGl2ZSByaW5nIGJ1ZmZlciBhbmQgc2V0Ci0JYXBwcm9wcmlhdGUgQVNJQyByZWdpc3RlciB0byBraWNrIGhhcmR3YXJlIGVuY3J5cHRpb24gYmVmb3JlIHJlYWxseQotCXNlbnQgb3V0IHRvIGFpci4KLQotCUFyZ3VtZW50czoKLQkJcEFkCQlQb2ludGVyCXRvIG91ciBhZGFwdGVyCi0JCXZvaWQgKglQb2ludGVyIHRvIG91dGdvaW5nIE5kaXMgZnJhbWUKLQkJTnVtYmVyT2ZGcmFnCU51bWJlciBvZiBmcmFnbWVudCByZXF1aXJlZAotCi0JUmV0dXJuIFZhbHVlOgotCQlOb25lCi0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBSVE1QVG9XaXJlbGVzc1N0YShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgICAgICBzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwRW50cnksCi0JCSAgICAgICB1OCAqcEhlYWRlcjgwMl8zLAotCQkgICAgICAgdTMyIEhkckxlbiwKLQkJICAgICAgIHU4ICpwRGF0YSwgdTMyIERhdGFMZW4sIElOIEJPT0xFQU4gYkNsZWFyRnJhbWUpCi17Ci0Jdm9pZCAqcFBhY2tldDsKLQlpbnQgU3RhdHVzOwotCi0JaWYgKCghcEVudHJ5KSB8fCAoKCFwRW50cnktPlZhbGlkQXNDTEkpICYmICghcEVudHJ5LT5WYWxpZEFzQXBDbGkpKSkKLQkJcmV0dXJuOwotCi0JZG8gewotCQkvKiBidWlsZCBhIE5ESVMgcGFja2V0ICovCi0JCVN0YXR1cyA9Ci0JCSAgICBSVE1QQWxsb2NhdGVOZGlzUGFja2V0KHBBZCwgJnBQYWNrZXQsIHBIZWFkZXI4MDJfMywgSGRyTGVuLAotCQkJCQkgICBwRGF0YSwgRGF0YUxlbik7Ci0JCWlmIChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKLQkJCWJyZWFrOwotCi0JCWlmIChiQ2xlYXJGcmFtZSkKLQkJCVJUTVBfU0VUX1BBQ0tFVF9DTEVBUl9FQVBfRlJBTUUocFBhY2tldCwgMSk7Ci0JCWVsc2UKLQkJCVJUTVBfU0VUX1BBQ0tFVF9DTEVBUl9FQVBfRlJBTUUocFBhY2tldCwgMCk7Ci0JCXsKLQkJCVJUTVBfU0VUX1BBQ0tFVF9TT1VSQ0UocFBhY2tldCwgUEtUU1JDX05ESVMpOwotCi0JCQlSVE1QX1NFVF9QQUNLRVRfTkVUX0RFVklDRV9NQlNTSUQocFBhY2tldCwgTUFJTl9NQlNTSUQpOwkvKiBzZXQgYSBkZWZhdWx0IHZhbHVlICovCi0JCQlpZiAocEVudHJ5LT5hcGlkeCAhPSAwKQotCQkJCVJUTVBfU0VUX1BBQ0tFVF9ORVRfREVWSUNFX01CU1NJRChwUGFja2V0LAotCQkJCQkJCQkgIHBFbnRyeS0+Ci0JCQkJCQkJCSAgYXBpZHgpOwotCi0JCQlSVE1QX1NFVF9QQUNLRVRfV0NJRChwUGFja2V0LCAodTgpcEVudHJ5LT5BaWQpOwotCQkJUlRNUF9TRVRfUEFDS0VUX01PUkVEQVRBKHBQYWNrZXQsIEZBTFNFKTsKLQkJfQotCi0JCXsKLQkJCS8qIHNlbmQgb3V0IHRoZSBwYWNrZXQgKi8KLQkJCVN0YXR1cyA9IFNUQVNlbmRQYWNrZXQocEFkLCBwUGFja2V0KTsKLQkJCWlmIChTdGF0dXMgPT0gTkRJU19TVEFUVVNfU1VDQ0VTUykgewotCQkJCXU4IEluZGV4OwotCi0JCQkJLyogRGVxdWV1ZSBvbmUgZnJhbWUgZnJvbSBUeFN3UXVldWUwLi4zIHF1ZXVlIGFuZCBwcm9jZXNzIGl0ICovCi0JCQkJLyogVGhlcmUgYXJlIHRocmVlIHBsYWNlIGNhbGxpbmcgZGVxdWV1ZSBmb3IgVFggcmluZy4gKi8KLQkJCQkvKiAxLiBIZXJlLCByaWdodCBhZnRlciBxdWV1ZWluZyB0aGUgZnJhbWUuICovCi0JCQkJLyogMi4gQXQgdGhlIGVuZCBvZiBUeFJpbmdUeERvbmUgc2VydmljZSByb3V0aW5lLiAqLwotCQkJCS8qIDMuIFVwb24gTkRJUyBjYWxsIFJUTVBTZW5kUGFja2V0cyAqLwotCQkJCWlmICgoIVJUTVBfVEVTVF9GTEFHCi0JCQkJICAgICAocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKSkKLQkJCQkgICAgJiYKLQkJCQkgICAgKCFSVE1QX1RFU1RfRkxBRwotCQkJCSAgICAgKHBBZCwgZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUykpKSB7Ci0JCQkJCWZvciAoSW5kZXggPSAwOyBJbmRleCA8IDU7IEluZGV4KyspCi0JCQkJCQlpZiAocEFkLT5UeFN3UXVldWVbSW5kZXhdLgotCQkJCQkJICAgIE51bWJlciA+IDApCi0JCQkJCQkJUlRNUERlUXVldWVQYWNrZXQocEFkLAotCQkJCQkJCQkJICBGQUxTRSwKLQkJCQkJCQkJCSAgSW5kZXgsCi0JCQkJCQkJCQkgIE1BWF9UWF9QUk9DRVNTKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCX0gd2hpbGUgKEZBTFNFKTsKLX0KLQotLyoKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIERlc2NyaXB0aW9uOgotICAgICAgICBUaGlzIGlzIGEgZnVuY3Rpb24gdG8gaW5pdGlhbGl6ZSA0LXdheSBoYW5kc2hha2UKLQotICAgIFJldHVybjoKLQotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBXUEFTdGFydDRXYXlIUyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgICBzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwRW50cnksIHVuc2lnbmVkIGxvbmcgVGltZUludGVydmFsKQotewotCXU4IEhlYWRlcjgwMl8zWzE0XTsKLQlzdHJ1Y3QgcnRfZWFwb2xfcGFja2V0IEVBUE9MUEtUOwotCXU4ICpwQnNzaWQgPSBOVUxMOwotCXU4IGdyb3VwX2NpcGhlciA9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZDsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PT4gV1BBU3RhcnQ0V2F5SFNcbiIpKTsKLQotCWlmIChSVE1QX1RFU1RfRkxBRwotCSAgICAocEFkLAotCSAgICAgZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUyB8IGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUykpCi0JewotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCSAoIltFUlJPUl1XUEFTdGFydDRXYXlIUyA6IFRoZSBpbnRlcmZhY2UgaXMgY2xvc2VkLi4uXG4iKSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAocEJzc2lkID09IE5VTEwpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkgKCJbRVJST1JdV1BBU3RhcnQ0V2F5SFMgOiBObyBjb3JyZXNwb25kaW5nIEF1dGhlbnRpY2F0b3IuXG4iKSk7Ci0JCXJldHVybjsKLQl9Ci0JLyogQ2hlY2sgdGhlIHN0YXR1cyAqLwotCWlmICgocEVudHJ5LT5XcGFTdGF0ZSA+IEFTX1BUS1NUQVJUKSB8fCAocEVudHJ5LT5XcGFTdGF0ZSA8IEFTX0lOSVRQTUspKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJICgiW0VSUk9SXVdQQVN0YXJ0NFdheUhTIDogTm90IGV4cGVjdCBjYWxsaW5nXG4iKSk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBJbmNyZW1lbnQgcmVwbGF5IGNvdW50ZXIgYnkgMSAqLwotCUFERF9PTkVfVG9fNjRCSVRfVkFSKHBFbnRyeS0+Ul9Db3VudGVyKTsKLQotCS8qIFJhbmRvbWx5IGdlbmVyYXRlIEFOb25jZSAqLwotCUdlblJhbmRvbShwQWQsICh1OCAqKSBwQnNzaWQsIHBFbnRyeS0+QU5vbmNlKTsKLQotCS8qIENvbnN0cnVjdCBFQVBvTCBtZXNzYWdlIC0gUGFpcndpc2UgTXNnIDEgKi8KLQkvKiBFQVBPTC1LZXkoMCwwLDEsMCxQLDAsMCxBTm9uY2UsMCxEYXRhS0RfTTEpICovCi0JTmRpc1plcm9NZW1vcnkoJkVBUE9MUEtULCBzaXplb2Yoc3RydWN0IHJ0X2VhcG9sX3BhY2tldCkpOwotCUNvbnN0cnVjdEVhcG9sTXNnKHBFbnRyeSwgZ3JvdXBfY2lwaGVyLCBFQVBPTF9QQUlSX01TR18xLCAwLAkvKiBEZWZhdWx0IGtleSBpbmRleCAqLwotCQkJICBwRW50cnktPkFOb25jZSwgTlVMTCwJLyogVHhSU0MgKi8KLQkJCSAgTlVMTCwJLyogR1RLICovCi0JCQkgIE5VTEwsCS8qIFJTTklFICovCi0JCQkgIDAsCS8qIFJTTklFIGxlbmd0aCAqLwotCQkJICAmRUFQT0xQS1QpOwotCi0JLyogTWFrZSBvdXRnb2luZyBmcmFtZSAqLwotCU1BS0VfODAyXzNfSEVBREVSKEhlYWRlcjgwMl8zLCBwRW50cnktPkFkZHIsIHBCc3NpZCwgRUFQT0wpOwotCVJUTVBUb1dpcmVsZXNzU3RhKHBBZCwgcEVudHJ5LCBIZWFkZXI4MDJfMywKLQkJCSAgTEVOR1RIXzgwMl8zLCAodTggKikmIEVBUE9MUEtULAotCQkJICBDT05WX0FSUkFSWV9UT191MTYoRUFQT0xQS1QuQm9keV9MZW4pICsgNCwKLQkJCSAgKHBFbnRyeS0+UG9ydFNlY3VyZWQgPT0KLQkJCSAgIFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEKSA/IEZBTFNFIDogVFJVRSk7Ci0KLQkvKiBUcmlnZ2VyIFJldHJ5IFRpbWVyICovCi0JUlRNUE1vZFRpbWVyKCZwRW50cnktPlJldHJ5VGltZXIsIFRpbWVJbnRlcnZhbCk7Ci0KLQkvKiBVcGRhdGUgU3RhdGUgKi8KLQlwRW50cnktPldwYVN0YXRlID0gQVNfUFRLU1RBUlQ7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJICgiPD09PSBXUEFTdGFydDRXYXlIUzogc2VuZCBNc2cxIG9mIDQtd2F5IFxuIikpOwotCi19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCQlQcm9jZXNzIFBhaXJ3aXNlIGtleSBNc2ctMSBvZiA0LXdheSBoYW5kc2hha2luZyBhbmQgc2VuZCBNc2ctMgotCi0JQXJndW1lbnRzOgotCQlwQWQJCQlQb2ludGVyCXRvIG91ciBhZGFwdGVyCi0JCUVsZW0JCU1lc3NhZ2UgYm9keQotCi0JUmV0dXJuIFZhbHVlOgotCQlOb25lCi0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBQZWVyUGFpck1zZzFBY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcEVudHJ5LCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKQotewotCXU4IFBUS1s4MF07Ci0JdTggSGVhZGVyODAyXzNbMTRdOwotCXN0cnVjdCBydF9lYXBvbF9wYWNrZXQgKiBwTXNnMTsKLQl1MzIgTXNnTGVuOwotCXN0cnVjdCBydF9lYXBvbF9wYWNrZXQgRUFQT0xQS1Q7Ci0JdTggKnBDdXJyZW50QWRkciA9IE5VTEw7Ci0JdTggKnBta19wdHIgPSBOVUxMOwotCXU4IGdyb3VwX2NpcGhlciA9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZDsKLQl1OCAqcnNuaWVfcHRyID0gTlVMTDsKLQl1OCByc25pZV9sZW4gPSAwOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PiBQZWVyUGFpck1zZzFBY3Rpb24gXG4iKSk7Ci0KLQlpZiAoKCFwRW50cnkpIHx8ICgoIXBFbnRyeS0+VmFsaWRBc0NMSSkgJiYgKCFwRW50cnktPlZhbGlkQXNBcENsaSkpKQotCQlyZXR1cm47Ci0KLQlpZiAoRWxlbS0+TXNnTGVuIDwKLQkgICAgKExFTkdUSF84MDJfMTEgKyBMRU5HVEhfODAyXzFfSCArIExFTkdUSF9FQVBPTF9IICsKLQkgICAgIHNpemVvZihzdHJ1Y3QgcnRfa2V5X2Rlc2NyaXB0ZXIpIC0gTUFYX0xFTl9PRl9SU05JRSAtIDIpKQotCQlyZXR1cm47Ci0KLQl7Ci0JCXBDdXJyZW50QWRkciA9IHBBZC0+Q3VycmVudEFkZHJlc3M7Ci0JCXBta19wdHIgPSBwQWQtPlN0YUNmZy5QTUs7Ci0JCWdyb3VwX2NpcGhlciA9IHBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyOwotCQlyc25pZV9wdHIgPSBwQWQtPlN0YUNmZy5SU05fSUU7Ci0JCXJzbmllX2xlbiA9IHBBZC0+U3RhQ2ZnLlJTTklFX0xlbjsKLQl9Ci0KLQkvKiBTdG9yZSB0aGUgcmVjZWl2ZWQgZnJhbWUgKi8KLQlwTXNnMSA9IChzdHJ1Y3QgcnRfZWFwb2xfcGFja2V0ICopICYgRWxlbS0+TXNnW0xFTkdUSF84MDJfMTEgKyBMRU5HVEhfODAyXzFfSF07Ci0JTXNnTGVuID0gRWxlbS0+TXNnTGVuIC0gTEVOR1RIXzgwMl8xMSAtIExFTkdUSF84MDJfMV9IOwotCi0JLyogU2FuaXR5IENoZWNrIHBlZXIgUGFpcndpc2UgbWVzc2FnZSAxIC0gUmVwbGF5IENvdW50ZXIgKi8KLQlpZiAoUGVlcldwYU1lc3NhZ2VTYW5pdHkocEFkLCBwTXNnMSwgTXNnTGVuLCBFQVBPTF9QQUlSX01TR18xLCBwRW50cnkpCi0JICAgID09IEZBTFNFKQotCQlyZXR1cm47Ci0KLQkvKiBTdG9yZSBSZXBsYXkgY291bnRlciwgaXQgd2lsbCB1c2UgdG8gdmVyaWZ5IG1lc3NhZ2UgMyBhbmQgY29uc3RydWN0IG1lc3NhZ2UgMiAqLwotCU5kaXNNb3ZlTWVtb3J5KHBFbnRyeS0+Ul9Db3VudGVyLCBwTXNnMS0+S2V5RGVzYy5SZXBsYXlDb3VudGVyLAotCQkgICAgICAgTEVOX0tFWV9ERVNDX1JFUExBWSk7Ci0KLQkvKiBTdG9yZSBBTm9uY2UgKi8KLQlOZGlzTW92ZU1lbW9yeShwRW50cnktPkFOb25jZSwgcE1zZzEtPktleURlc2MuS2V5Tm9uY2UsCi0JCSAgICAgICBMRU5fS0VZX0RFU0NfTk9OQ0UpOwotCi0JLyogR2VuZXJhdGUgcmFuZG9tIFNOb25jZSAqLwotCUdlblJhbmRvbShwQWQsICh1OCAqKSBwQ3VycmVudEFkZHIsIHBFbnRyeS0+U05vbmNlKTsKLQotCXsKLQkJLyogQ2FsY3VsYXRlIFBUSyhBTm9uY2UsIFNOb25jZSkgKi8KLQkJV3BhRGVyaXZlUFRLKHBBZCwKLQkJCSAgICAgcG1rX3B0ciwKLQkJCSAgICAgcEVudHJ5LT5BTm9uY2UsCi0JCQkgICAgIHBFbnRyeS0+QWRkciwKLQkJCSAgICAgcEVudHJ5LT5TTm9uY2UsIHBDdXJyZW50QWRkciwgUFRLLCBMRU5fUFRLKTsKLQotCQkvKiBTYXZlIGtleSB0byBQVEsgZW50cnkgKi8KLQkJTmRpc01vdmVNZW1vcnkocEVudHJ5LT5QVEssIFBUSywgTEVOX1BUSyk7Ci0JfQotCi0JLyogVXBkYXRlIFdwYVN0YXRlICovCi0JcEVudHJ5LT5XcGFTdGF0ZSA9IEFTX1BUS0lOSVRfTkVHT1RJQVRJTkc7Ci0KLQkvKiBDb25zdHJ1Y3QgRUFQb0wgbWVzc2FnZSAtIFBhaXJ3aXNlIE1zZyAyICovCi0JLyogIEVBUE9MLUtleSgwLDEsMCwwLFAsMCwwLFNOb25jZSxNSUMsRGF0YUtEX00yKSAqLwotCU5kaXNaZXJvTWVtb3J5KCZFQVBPTFBLVCwgc2l6ZW9mKHN0cnVjdCBydF9lYXBvbF9wYWNrZXQpKTsKLQlDb25zdHJ1Y3RFYXBvbE1zZyhwRW50cnksIGdyb3VwX2NpcGhlciwgRUFQT0xfUEFJUl9NU0dfMiwgMCwJLyogRGVmYXVsdEtleUlkeCAqLwotCQkJICBwRW50cnktPlNOb25jZSwgTlVMTCwJLyogVHhSc2MgKi8KLQkJCSAgTlVMTCwJLyogR1RLICovCi0JCQkgICh1OCAqKSByc25pZV9wdHIsIHJzbmllX2xlbiwgJkVBUE9MUEtUKTsKLQotCS8qIE1ha2Ugb3V0Z29pbmcgZnJhbWUgKi8KLQlNQUtFXzgwMl8zX0hFQURFUihIZWFkZXI4MDJfMywgcEVudHJ5LT5BZGRyLCBwQ3VycmVudEFkZHIsIEVBUE9MKTsKLQotCVJUTVBUb1dpcmVsZXNzU3RhKHBBZCwgcEVudHJ5LAotCQkJICBIZWFkZXI4MDJfMywgc2l6ZW9mKEhlYWRlcjgwMl8zKSwgKHU4ICopJiBFQVBPTFBLVCwKLQkJCSAgQ09OVl9BUlJBUllfVE9fdTE2KEVBUE9MUEtULkJvZHlfTGVuKSArIDQsIFRSVUUpOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIjw9PT0gUGVlclBhaXJNc2cxQWN0aW9uOiBzZW5kIE1zZzIgb2YgNC13YXkgXG4iKSk7Ci19Ci0KLS8qCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBEZXNjcmlwdGlvbjoKLSAgICAgICAgV2hlbiByZWNlaXZpbmcgdGhlIHNlY29uZCBwYWNrZXQgb2YgNC13YXkgcGFpcndpc2VrZXkgaGFuZHNoYWtlLgotICAgIFJldHVybjoKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgUGVlclBhaXJNc2cyQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCXN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKnBFbnRyeSwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSkKLXsKLQl1OCBQVEtbODBdOwotCUJPT0xFQU4gQ2FuY2VsbGVkOwotCXN0cnVjdCBydF9oZWFkZXJfODAyXzExICogcEhlYWRlcjsKLQlzdHJ1Y3QgcnRfZWFwb2xfcGFja2V0IEVBUE9MUEtUOwotCXN0cnVjdCBydF9lYXBvbF9wYWNrZXQgKiBwTXNnMjsKLQl1MzIgTXNnTGVuOwotCXU4IEhlYWRlcjgwMl8zW0xFTkdUSF84MDJfM107Ci0JdTggVHhUc2NbNl07Ci0JdTggKnBCc3NpZCA9IE5VTEw7Ci0JdTggKnBta19wdHIgPSBOVUxMOwotCXU4ICpndGtfcHRyID0gTlVMTDsKLQl1OCBkZWZhdWx0X2tleSA9IDA7Ci0JdTggZ3JvdXBfY2lwaGVyID0gTmRpczgwMl8xMVdFUERpc2FibGVkOwotCXU4ICpyc25pZV9wdHIgPSBOVUxMOwotCXU4IHJzbmllX2xlbiA9IDA7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT0+IFBlZXJQYWlyTXNnMkFjdGlvbiBcbiIpKTsKLQotCWlmICgoIXBFbnRyeSkgfHwgKCFwRW50cnktPlZhbGlkQXNDTEkpKQotCQlyZXR1cm47Ci0KLQlpZiAoRWxlbS0+TXNnTGVuIDwKLQkgICAgKExFTkdUSF84MDJfMTEgKyBMRU5HVEhfODAyXzFfSCArIExFTkdUSF9FQVBPTF9IICsKLQkgICAgIHNpemVvZihzdHJ1Y3QgcnRfa2V5X2Rlc2NyaXB0ZXIpIC0gTUFYX0xFTl9PRl9SU05JRSAtIDIpKQotCQlyZXR1cm47Ci0KLQkvKiBjaGVjayBFbnRyeSBpbiB2YWxpZCBTdGF0ZSAqLwotCWlmIChwRW50cnktPldwYVN0YXRlIDwgQVNfUFRLU1RBUlQpCi0JCXJldHVybjsKLQotCS8qIHBvaW50ZXIgdG8gODAyLjExIGhlYWRlciAqLwotCXBIZWFkZXIgPSAoc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEgKikgRWxlbS0+TXNnOwotCi0JLyogc2tpcCA4MDIuMTFfaGVhZGVyKDI0LWJ5dGUpIGFuZCBMTENfaGVhZGVyKDgpICovCi0JcE1zZzIgPSAoc3RydWN0IHJ0X2VhcG9sX3BhY2tldCAqKSAmIEVsZW0tPk1zZ1tMRU5HVEhfODAyXzExICsgTEVOR1RIXzgwMl8xX0hdOwotCU1zZ0xlbiA9IEVsZW0tPk1zZ0xlbiAtIExFTkdUSF84MDJfMTEgLSBMRU5HVEhfODAyXzFfSDsKLQotCS8qIFN0b3JlIFNOb25jZSAqLwotCU5kaXNNb3ZlTWVtb3J5KHBFbnRyeS0+U05vbmNlLCBwTXNnMi0+S2V5RGVzYy5LZXlOb25jZSwKLQkJICAgICAgIExFTl9LRVlfREVTQ19OT05DRSk7Ci0KLQl7Ci0JCS8qIERlcml2ZSBQVEsgKi8KLQkJV3BhRGVyaXZlUFRLKHBBZCwgKHU4ICopIHBta19wdHIsIHBFbnRyeS0+QU5vbmNlLAkvKiBBTk9OQ0UgKi8KLQkJCSAgICAgKHU4ICopIHBCc3NpZCwgcEVudHJ5LT5TTm9uY2UsCS8qIFNOT05DRSAqLwotCQkJICAgICBwRW50cnktPkFkZHIsIFBUSywgTEVOX1BUSyk7Ci0KLQkJTmRpc01vdmVNZW1vcnkocEVudHJ5LT5QVEssIFBUSywgTEVOX1BUSyk7Ci0JfQotCi0JLyogU2FuaXR5IENoZWNrIHBlZXIgUGFpcndpc2UgbWVzc2FnZSAyIC0gUmVwbGF5IENvdW50ZXIsIE1JQywgUlNOSUUgKi8KLQlpZiAoUGVlcldwYU1lc3NhZ2VTYW5pdHkocEFkLCBwTXNnMiwgTXNnTGVuLCBFQVBPTF9QQUlSX01TR18yLCBwRW50cnkpCi0JICAgID09IEZBTFNFKQotCQlyZXR1cm47Ci0KLQlkbyB7Ci0JCS8qIGRlbGV0ZSByZXRyeSB0aW1lciAqLwotCQlSVE1QQ2FuY2VsVGltZXIoJnBFbnRyeS0+UmV0cnlUaW1lciwgJkNhbmNlbGxlZCk7Ci0KLQkJLyogQ2hhbmdlIHN0YXRlICovCi0JCXBFbnRyeS0+V3BhU3RhdGUgPSBBU19QVEtJTklUX05FR09USUFUSU5HOwotCi0JCS8qIEluY3JlbWVudCByZXBsYXkgY291bnRlciBieSAxICovCi0JCUFERF9PTkVfVG9fNjRCSVRfVkFSKHBFbnRyeS0+Ul9Db3VudGVyKTsKLQotCQkvKiBDb25zdHJ1Y3QgRUFQb0wgbWVzc2FnZSAtIFBhaXJ3aXNlIE1zZyAzICovCi0JCU5kaXNaZXJvTWVtb3J5KCZFQVBPTFBLVCwgc2l6ZW9mKHN0cnVjdCBydF9lYXBvbF9wYWNrZXQpKTsKLQkJQ29uc3RydWN0RWFwb2xNc2cocEVudHJ5LAotCQkJCSAgZ3JvdXBfY2lwaGVyLAotCQkJCSAgRUFQT0xfUEFJUl9NU0dfMywKLQkJCQkgIGRlZmF1bHRfa2V5LAotCQkJCSAgcEVudHJ5LT5BTm9uY2UsCi0JCQkJICBUeFRzYywKLQkJCQkgICh1OCAqKSBndGtfcHRyLAotCQkJCSAgKHU4ICopIHJzbmllX3B0ciwgcnNuaWVfbGVuLCAmRUFQT0xQS1QpOwotCi0JCS8qIE1ha2Ugb3V0Z29pbmcgZnJhbWUgKi8KLQkJTUFLRV84MDJfM19IRUFERVIoSGVhZGVyODAyXzMsIHBFbnRyeS0+QWRkciwgcEJzc2lkLCBFQVBPTCk7Ci0JCVJUTVBUb1dpcmVsZXNzU3RhKHBBZCwgcEVudHJ5LCBIZWFkZXI4MDJfMywgTEVOR1RIXzgwMl8zLAotCQkJCSAgKHU4ICopJiBFQVBPTFBLVCwKLQkJCQkgIENPTlZfQVJSQVJZX1RPX3UxNihFQVBPTFBLVC5Cb2R5X0xlbikgKyA0LAotCQkJCSAgKHBFbnRyeS0+UG9ydFNlY3VyZWQgPT0KLQkJCQkgICBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRCkgPyBGQUxTRSA6IFRSVUUpOwotCi0JCXBFbnRyeS0+UmVUcnlDb3VudGVyID0gUEVFUl9NU0czX1JFVFJZX1RJTUVSX0NUUjsKLQkJUlRNUFNldFRpbWVyKCZwRW50cnktPlJldHJ5VGltZXIsIFBFRVJfTVNHM19SRVRSWV9FWEVDX0lOVFYpOwotCi0JCS8qIFVwZGF0ZSBTdGF0ZSAqLwotCQlwRW50cnktPldwYVN0YXRlID0gQVNfUFRLSU5JVF9ORUdPVElBVElORzsKLQl9IHdoaWxlIChGQUxTRSk7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJICgiPD09PSBQZWVyUGFpck1zZzJBY3Rpb246IHNlbmQgTXNnMyBvZiA0LXdheSBcbiIpKTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JCVByb2Nlc3MgUGFpcndpc2Uga2V5IE1zZyAzIG9mIDQtd2F5IGhhbmRzaGFraW5nIGFuZCBzZW5kIE1zZyA0Ci0KLQlBcmd1bWVudHM6Ci0JCXBBZAlQb2ludGVyCXRvIG91ciBhZGFwdGVyCi0JCUVsZW0JCU1lc3NhZ2UgYm9keQotCi0JUmV0dXJuIFZhbHVlOgotCQlOb25lCi0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBQZWVyUGFpck1zZzNBY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcEVudHJ5LCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKQotewotCXN0cnVjdCBydF9oZWFkZXJfODAyXzExICogcEhlYWRlcjsKLQl1OCBIZWFkZXI4MDJfM1sxNF07Ci0Jc3RydWN0IHJ0X2VhcG9sX3BhY2tldCBFQVBPTFBLVDsKLQlzdHJ1Y3QgcnRfZWFwb2xfcGFja2V0ICogcE1zZzM7Ci0JdTMyIE1zZ0xlbjsKLQl1OCAqcEN1cnJlbnRBZGRyID0gTlVMTDsKLQl1OCBncm91cF9jaXBoZXIgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT0+IFBlZXJQYWlyTXNnM0FjdGlvbiBcbiIpKTsKLQotCWlmICgoIXBFbnRyeSkgfHwgKCghcEVudHJ5LT5WYWxpZEFzQ0xJKSAmJiAoIXBFbnRyeS0+VmFsaWRBc0FwQ2xpKSkpCi0JCXJldHVybjsKLQotCWlmIChFbGVtLT5Nc2dMZW4gPAotCSAgICAoTEVOR1RIXzgwMl8xMSArIExFTkdUSF84MDJfMV9IICsgTEVOR1RIX0VBUE9MX0ggKwotCSAgICAgc2l6ZW9mKHN0cnVjdCBydF9rZXlfZGVzY3JpcHRlcikgLSBNQVhfTEVOX09GX1JTTklFIC0gMikpCi0JCXJldHVybjsKLQotCXsKLQkJcEN1cnJlbnRBZGRyID0gcEFkLT5DdXJyZW50QWRkcmVzczsKLQkJZ3JvdXBfY2lwaGVyID0gcEFkLT5TdGFDZmcuR3JvdXBDaXBoZXI7Ci0KLQl9Ci0KLQkvKiBSZWNvcmQgODAyLjExIGhlYWRlciAmIHRoZSByZWNlaXZlZCBFQVBPTCBwYWNrZXQgTXNnMyAqLwotCXBIZWFkZXIgPSAoc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEgKikgRWxlbS0+TXNnOwotCXBNc2czID0gKHN0cnVjdCBydF9lYXBvbF9wYWNrZXQgKikgJiBFbGVtLT5Nc2dbTEVOR1RIXzgwMl8xMSArIExFTkdUSF84MDJfMV9IXTsKLQlNc2dMZW4gPSBFbGVtLT5Nc2dMZW4gLSBMRU5HVEhfODAyXzExIC0gTEVOR1RIXzgwMl8xX0g7Ci0KLQkvKiBTYW5pdHkgQ2hlY2sgcGVlciBQYWlyd2lzZSBtZXNzYWdlIDMgLSBSZXBsYXkgQ291bnRlciwgTUlDLCBSU05JRSAqLwotCWlmIChQZWVyV3BhTWVzc2FnZVNhbml0eShwQWQsIHBNc2czLCBNc2dMZW4sIEVBUE9MX1BBSVJfTVNHXzMsIHBFbnRyeSkKLQkgICAgPT0gRkFMU0UpCi0JCXJldHVybjsKLQotCS8qIFNhdmUgUmVwbGF5IGNvdW50ZXIsIGl0IHdpbGwgdXNlIGNvbnN0cnVjdCBtZXNzYWdlIDQgKi8KLQlOZGlzTW92ZU1lbW9yeShwRW50cnktPlJfQ291bnRlciwgcE1zZzMtPktleURlc2MuUmVwbGF5Q291bnRlciwKLQkJICAgICAgIExFTl9LRVlfREVTQ19SRVBMQVkpOwotCi0JLyogRG91YmxlIGNoZWNrIEFOb25jZSAqLwotCWlmICghTmRpc0VxdWFsTWVtb3J5Ci0JICAgIChwRW50cnktPkFOb25jZSwgcE1zZzMtPktleURlc2MuS2V5Tm9uY2UsIExFTl9LRVlfREVTQ19OT05DRSkpIHsKLQkJcmV0dXJuOwotCX0KLQkvKiBDb25zdHJ1Y3QgRUFQb0wgbWVzc2FnZSAtIFBhaXJ3aXNlIE1zZyA0ICovCi0JTmRpc1plcm9NZW1vcnkoJkVBUE9MUEtULCBzaXplb2Yoc3RydWN0IHJ0X2VhcG9sX3BhY2tldCkpOwotCUNvbnN0cnVjdEVhcG9sTXNnKHBFbnRyeSwgZ3JvdXBfY2lwaGVyLCBFQVBPTF9QQUlSX01TR180LCAwLAkvKiBncm91cCBrZXkgaW5kZXggbm90IHVzZWQgaW4gbWVzc2FnZSA0ICovCi0JCQkgIE5VTEwsCS8qIE5vbmNlIG5vdCB1c2VkIGluIG1lc3NhZ2UgNCAqLwotCQkJICBOVUxMLAkvKiBUeFJTQyBub3QgdXNlZCBpbiBtZXNzYWdlIDQgKi8KLQkJCSAgTlVMTCwJLyogR1RLIG5vdCB1c2VkIGluIG1lc3NhZ2UgNCAqLwotCQkJICBOVUxMLAkvKiBSU04gSUUgbm90IHVzZWQgaW4gbWVzc2FnZSA0ICovCi0JCQkgIDAsICZFQVBPTFBLVCk7Ci0KLQkvKiBVcGRhdGUgV3BhU3RhdGUgKi8KLQlwRW50cnktPldwYVN0YXRlID0gQVNfUFRLSU5JVERPTkU7Ci0KLQkvKiBVcGRhdGUgcGFpcndpc2Uga2V5ICovCi0JewotCQlzdHJ1Y3QgcnRfY2lwaGVyX2tleSAqcFNoYXJlZEtleTsKLQotCQlwU2hhcmVkS2V5ID0gJnBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdOwotCi0JCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLlBUSywgcEVudHJ5LT5QVEssIExFTl9QVEspOwotCi0JCS8qIFByZXBhcmUgcGFpci13aXNlIGtleSBpbmZvcm1hdGlvbiBpbnRvIHNoYXJlZCBrZXkgdGFibGUgKi8KLQkJTmRpc1plcm9NZW1vcnkocFNoYXJlZEtleSwgc2l6ZW9mKHN0cnVjdCBydF9jaXBoZXJfa2V5KSk7Ci0JCXBTaGFyZWRLZXktPktleUxlbiA9IExFTl9US0lQX0VLOwotCQlOZGlzTW92ZU1lbW9yeShwU2hhcmVkS2V5LT5LZXksICZwQWQtPlN0YUNmZy5QVEtbMzJdLAotCQkJICAgICAgIExFTl9US0lQX0VLKTsKLQkJTmRpc01vdmVNZW1vcnkocFNoYXJlZEtleS0+UnhNaWMsICZwQWQtPlN0YUNmZy5QVEtbNDhdLAotCQkJICAgICAgIExFTl9US0lQX1JYTUlDSyk7Ci0JCU5kaXNNb3ZlTWVtb3J5KHBTaGFyZWRLZXktPlR4TWljLAotCQkJICAgICAgICZwQWQtPlN0YUNmZy5QVEtbNDggKyBMRU5fVEtJUF9SWE1JQ0tdLAotCQkJICAgICAgIExFTl9US0lQX1RYTUlDSyk7Ci0KLQkJLyogRGVjaWRlIGl0cyBDaGlwZXJBbGcgKi8KLQkJaWYgKHBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkKLQkJCXBTaGFyZWRLZXktPkNpcGhlckFsZyA9IENJUEhFUl9US0lQOwotCQllbHNlIGlmIChwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCi0JCQlwU2hhcmVkS2V5LT5DaXBoZXJBbGcgPSBDSVBIRVJfQUVTOwotCQllbHNlCi0JCQlwU2hhcmVkS2V5LT5DaXBoZXJBbGcgPSBDSVBIRVJfTk9ORTsKLQotCQkvKiBVcGRhdGUgdGhlc2UgcmVsYXRlZCBpbmZvcm1hdGlvbiB0byBzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICovCi0JCXBFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdOwotCQlOZGlzTW92ZU1lbW9yeShwRW50cnktPlBhaXJ3aXNlS2V5LktleSwgJnBBZC0+U3RhQ2ZnLlBUS1szMl0sCi0JCQkgICAgICAgTEVOX1RLSVBfRUspOwotCQlOZGlzTW92ZU1lbW9yeShwRW50cnktPlBhaXJ3aXNlS2V5LlJ4TWljLCAmcEFkLT5TdGFDZmcuUFRLWzQ4XSwKLQkJCSAgICAgICBMRU5fVEtJUF9SWE1JQ0spOwotCQlOZGlzTW92ZU1lbW9yeShwRW50cnktPlBhaXJ3aXNlS2V5LlR4TWljLAotCQkJICAgICAgICZwQWQtPlN0YUNmZy5QVEtbNDggKyBMRU5fVEtJUF9SWE1JQ0tdLAotCQkJICAgICAgIExFTl9US0lQX1RYTUlDSyk7Ci0JCXBFbnRyeS0+UGFpcndpc2VLZXkuQ2lwaGVyQWxnID0gcFNoYXJlZEtleS0+Q2lwaGVyQWxnOwotCi0JCS8qIFVwZGF0ZSBwYWlyd2lzZSBrZXkgaW5mb3JtYXRpb24gdG8gQVNJQyBTaGFyZWQgS2V5IFRhYmxlICovCi0JCUFzaWNBZGRTaGFyZWRLZXlFbnRyeShwQWQsCi0JCQkJICAgICAgQlNTMCwKLQkJCQkgICAgICAwLAotCQkJCSAgICAgIHBTaGFyZWRLZXktPkNpcGhlckFsZywKLQkJCQkgICAgICBwU2hhcmVkS2V5LT5LZXksCi0JCQkJICAgICAgcFNoYXJlZEtleS0+VHhNaWMsIHBTaGFyZWRLZXktPlJ4TWljKTsKLQotCQkvKiBVcGRhdGUgQVNJQyBXQ0lEIGF0dHJpYnV0ZSB0YWJsZSBhbmQgSVZFSVYgdGFibGUgKi8KLQkJUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeShwQWQsCi0JCQkJCSAgQlNTMCwKLQkJCQkJICAwLCBwU2hhcmVkS2V5LT5DaXBoZXJBbGcsIHBFbnRyeSk7Ci0KLQl9Ci0KLQkvKiBvcGVuIDgwMi4xeCBwb3J0IGNvbnRyb2wgYW5kIHByaXZhY3kgZmlsdGVyICovCi0JaWYgKHBFbnRyeS0+QXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSyB8fAotCSAgICBwRW50cnktPkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIpIHsKLQkJcEVudHJ5LT5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOwotCQlwRW50cnktPlByaXZhY3lGaWx0ZXIgPSBOZGlzODAyXzExUHJpdkZpbHRlckFjY2VwdEFsbDsKLQotCQlTVEFfUE9SVF9TRUNVUkVEKHBBZCk7Ci0JCS8qIEluZGljYXRlIENvbm5lY3RlZCBmb3IgR1VJICovCi0JCXBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID0gTmRpc01lZGlhU3RhdGVDb25uZWN0ZWQ7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiUGVlclBhaXJNc2czQWN0aW9uOiBBdXRoTW9kZSglcykgUGFpcndpc2VDaXBoZXIoJXMpIEdyb3VwQ2lwaGVyKCVzKSBcbiIsCi0JCQkgIEdldEF1dGhNb2RlKHBFbnRyeS0+QXV0aE1vZGUpLAotCQkJICBHZXRFbmNyeXB0VHlwZShwRW50cnktPldlcFN0YXR1cyksCi0JCQkgIEdldEVuY3J5cHRUeXBlKGdyb3VwX2NpcGhlcikpKTsKLQl9IGVsc2UgewotCX0KLQotCS8qIEluaXQgODAyLjMgaGVhZGVyIGFuZCBzZW5kIG91dCAqLwotCU1BS0VfODAyXzNfSEVBREVSKEhlYWRlcjgwMl8zLCBwRW50cnktPkFkZHIsIHBDdXJyZW50QWRkciwgRUFQT0wpOwotCVJUTVBUb1dpcmVsZXNzU3RhKHBBZCwgcEVudHJ5LAotCQkJICBIZWFkZXI4MDJfMywgc2l6ZW9mKEhlYWRlcjgwMl8zKSwKLQkJCSAgKHU4ICopJiBFQVBPTFBLVCwKLQkJCSAgQ09OVl9BUlJBUllfVE9fdTE2KEVBUE9MUEtULkJvZHlfTGVuKSArIDQsIFRSVUUpOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIjw9PT0gUGVlclBhaXJNc2czQWN0aW9uOiBzZW5kIE1zZzQgb2YgNC13YXkgXG4iKSk7Ci19Ci0KLS8qCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBEZXNjcmlwdGlvbjoKLSAgICAgICAgV2hlbiByZWNlaXZpbmcgdGhlIGxhc3QgcGFja2V0IG9mIDQtd2F5IHBhaXJ3aXNla2V5IGhhbmRzaGFrZS4KLSAgICAgICAgSW5pdGlhbGl6ZSAyLXdheSBncm91cGtleSBoYW5kc2hha2UgZm9sbG93aW5nLgotICAgIFJldHVybjoKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgUGVlclBhaXJNc2c0QWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCXN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKnBFbnRyeSwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSkKLXsKLQlzdHJ1Y3QgcnRfZWFwb2xfcGFja2V0ICogcE1zZzQ7Ci0Jc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEgKiBwSGVhZGVyOwotCXUzMiBNc2dMZW47Ci0JQk9PTEVBTiBDYW5jZWxsZWQ7Ci0JdTggZ3JvdXBfY2lwaGVyID0gTmRpczgwMl8xMVdFUERpc2FibGVkOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PiBQZWVyUGFpck1zZzRBY3Rpb25cbiIpKTsKLQotCWRvIHsKLQkJaWYgKCghcEVudHJ5KSB8fCAoIXBFbnRyeS0+VmFsaWRBc0NMSSkpCi0JCQlicmVhazsKLQotCQlpZiAoRWxlbS0+TXNnTGVuIDwKLQkJICAgIChMRU5HVEhfODAyXzExICsgTEVOR1RIXzgwMl8xX0ggKyBMRU5HVEhfRUFQT0xfSCArCi0JCSAgICAgc2l6ZW9mKHN0cnVjdCBydF9rZXlfZGVzY3JpcHRlcikgLSBNQVhfTEVOX09GX1JTTklFIC0gMikpCi0JCQlicmVhazsKLQotCQlpZiAocEVudHJ5LT5XcGFTdGF0ZSA8IEFTX1BUS0lOSVRfTkVHT1RJQVRJTkcpCi0JCQlicmVhazsKLQotCQkvKiBwb2ludGVyIHRvIDgwMi4xMSBoZWFkZXIgKi8KLQkJcEhlYWRlciA9IChzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSAqKSBFbGVtLT5Nc2c7Ci0KLQkJLyogc2tpcCA4MDIuMTFfaGVhZGVyKDI0LWJ5dGUpIGFuZCBMTENfaGVhZGVyKDgpICovCi0JCXBNc2c0ID0KLQkJICAgIChzdHJ1Y3QgcnRfZWFwb2xfcGFja2V0ICopICYgRWxlbS0+TXNnW0xFTkdUSF84MDJfMTEgKyBMRU5HVEhfODAyXzFfSF07Ci0JCU1zZ0xlbiA9IEVsZW0tPk1zZ0xlbiAtIExFTkdUSF84MDJfMTEgLSBMRU5HVEhfODAyXzFfSDsKLQotCQkvKiBTYW5pdHkgQ2hlY2sgcGVlciBQYWlyd2lzZSBtZXNzYWdlIDQgLSBSZXBsYXkgQ291bnRlciwgTUlDICovCi0JCWlmIChQZWVyV3BhTWVzc2FnZVNhbml0eQotCQkgICAgKHBBZCwgcE1zZzQsIE1zZ0xlbiwgRUFQT0xfUEFJUl9NU0dfNCwgcEVudHJ5KSA9PSBGQUxTRSkKLQkJCWJyZWFrOwotCi0JCS8qIDMuIHVzZXMgdGhlIE1MTUUuU0VUS0VZUy5yZXF1ZXN0IHRvIGNvbmZpZ3VyZSBQVEsgaW50byBNQUMgKi8KLQkJTmRpc1plcm9NZW1vcnkoJnBFbnRyeS0+UGFpcndpc2VLZXksIHNpemVvZihzdHJ1Y3QgcnRfY2lwaGVyX2tleSkpOwotCi0JCS8qIHJlc2V0IElWRUlWIGluIEFzaWMgKi8KLQkJQXNpY1VwZGF0ZVdDSURJVkVJVihwQWQsIHBFbnRyeS0+QWlkLCAxLCAwKTsKLQotCQlwRW50cnktPlBhaXJ3aXNlS2V5LktleUxlbiA9IExFTl9US0lQX0VLOwotCQlOZGlzTW92ZU1lbW9yeShwRW50cnktPlBhaXJ3aXNlS2V5LktleSwgJnBFbnRyeS0+UFRLWzMyXSwKLQkJCSAgICAgICBMRU5fVEtJUF9FSyk7Ci0JCU5kaXNNb3ZlTWVtb3J5KHBFbnRyeS0+UGFpcndpc2VLZXkuUnhNaWMsCi0JCQkgICAgICAgJnBFbnRyeS0+UFRLW1RLSVBfQVBfUlhNSUNLX09GRlNFVF0sCi0JCQkgICAgICAgTEVOX1RLSVBfUlhNSUNLKTsKLQkJTmRpc01vdmVNZW1vcnkocEVudHJ5LT5QYWlyd2lzZUtleS5UeE1pYywKLQkJCSAgICAgICAmcEVudHJ5LT5QVEtbVEtJUF9BUF9UWE1JQ0tfT0ZGU0VUXSwKLQkJCSAgICAgICBMRU5fVEtJUF9UWE1JQ0spOwotCi0JCS8qIFNldCBwYWlyd2lzZSBrZXkgdG8gQXNpYyAqLwotCQl7Ci0JCQlwRW50cnktPlBhaXJ3aXNlS2V5LkNpcGhlckFsZyA9IENJUEhFUl9OT05FOwotCQkJaWYgKHBFbnRyeS0+V2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpCi0JCQkJcEVudHJ5LT5QYWlyd2lzZUtleS5DaXBoZXJBbGcgPSBDSVBIRVJfVEtJUDsKLQkJCWVsc2UgaWYgKHBFbnRyeS0+V2VwU3RhdHVzID09Ci0JCQkJIE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCi0JCQkJcEVudHJ5LT5QYWlyd2lzZUtleS5DaXBoZXJBbGcgPSBDSVBIRVJfQUVTOwotCi0JCQkvKiBBZGQgUGFpci13aXNlIGtleSB0byBBc2ljICovCi0JCQlBc2ljQWRkUGFpcndpc2VLZXlFbnRyeShwQWQsCi0JCQkJCQlwRW50cnktPkFkZHIsCi0JCQkJCQkodTgpcEVudHJ5LT5BaWQsCi0JCQkJCQkmcEVudHJ5LT5QYWlyd2lzZUtleSk7Ci0KLQkJCS8qIHVwZGF0ZSBXQ0lEIGF0dHJpYnV0ZSB0YWJsZSBhbmQgSVZFSVYgdGFibGUgZm9yIHRoaXMgZW50cnkgKi8KLQkJCVJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnkocEFkLAotCQkJCQkJICBwRW50cnktPmFwaWR4LAotCQkJCQkJICAwLAotCQkJCQkJICBwRW50cnktPlBhaXJ3aXNlS2V5LkNpcGhlckFsZywKLQkJCQkJCSAgcEVudHJ5KTsKLQkJfQotCi0JCS8qIDQuIHVwZ3JhZGUgc3RhdGUgKi8KLQkJcEVudHJ5LT5Qcml2YWN5RmlsdGVyID0gTmRpczgwMl8xMVByaXZGaWx0ZXJBY2NlcHRBbGw7Ci0JCXBFbnRyeS0+V3BhU3RhdGUgPSBBU19QVEtJTklURE9ORTsKLQkJcEVudHJ5LT5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOwotCi0JCWlmIChwRW50cnktPkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIgfHwKLQkJICAgIHBFbnRyeS0+QXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykgewotCQkJcEVudHJ5LT5HVEtTdGF0ZSA9IFJFS0VZX0VTVEFCTElTSEVEOwotCQkJUlRNUENhbmNlbFRpbWVyKCZwRW50cnktPlJldHJ5VGltZXIsICZDYW5jZWxsZWQpOwotCi0JCQkvKiBzZW5kIHdpcmVsZXNzIGV2ZW50IC0gZm9yIHNldCBrZXkgZG9uZSBXUEEyICovCi0JCQlpZiAocEFkLT5Db21tb25DZmcuYldpcmVsZXNzRXZlbnQpCi0JCQkJUlRNUFNlbmRXaXJlbGVzc0V2ZW50KHBBZCwKLQkJCQkJCSAgICAgIElXX1NFVF9LRVlfRE9ORV9XUEEyX0VWRU5UX0ZMQUcsCi0JCQkJCQkgICAgICBwRW50cnktPkFkZHIsCi0JCQkJCQkgICAgICBwRW50cnktPmFwaWR4LCAwKTsKLQotCQkJREJHUFJJTlQoUlRfREVCVUdfT0ZGLAotCQkJCSAoIkFQIFNFVEtFWVMgRE9ORSAtIFdQQTIsIEF1dGhNb2RlKCVkKT0lcywgV2VwU3RhdHVzKCVkKT0lcywgR3JvdXBXZXBTdGF0dXMoJWQpPSVzXG5cbiIsCi0JCQkJICBwRW50cnktPkF1dGhNb2RlLAotCQkJCSAgR2V0QXV0aE1vZGUocEVudHJ5LT5BdXRoTW9kZSksCi0JCQkJICBwRW50cnktPldlcFN0YXR1cywKLQkJCQkgIEdldEVuY3J5cHRUeXBlKHBFbnRyeS0+V2VwU3RhdHVzKSwKLQkJCQkgIGdyb3VwX2NpcGhlciwgR2V0RW5jcnlwdFR5cGUoZ3JvdXBfY2lwaGVyKSkpOwotCQl9IGVsc2UgewotCQkJLyogNS4gaW5pdCBHcm91cCAyLXdheSBoYW5kc2hha2UgaWYgbmVjZXNzYXJ5LiAqLwotCQkJV1BBU3RhcnQyV2F5R3JvdXBIUyhwQWQsIHBFbnRyeSk7Ci0KLQkJCXBFbnRyeS0+UmVUcnlDb3VudGVyID0gR1JPVVBfTVNHMV9SRVRSWV9USU1FUl9DVFI7Ci0JCQlSVE1QTW9kVGltZXIoJnBFbnRyeS0+UmV0cnlUaW1lciwKLQkJCQkgICAgIFBFRVJfTVNHM19SRVRSWV9FWEVDX0lOVFYpOwotCQl9Ci0JfSB3aGlsZSAoRkFMU0UpOwotCi19Ci0KLS8qCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBEZXNjcmlwdGlvbjoKLSAgICAgICAgVGhpcyBpcyBhIGZ1bmN0aW9uIHRvIHNlbmQgdGhlIGZpcnN0IHBhY2tldCBvZiAyLXdheSBncm91cGtleSBoYW5kc2hha2UKLSAgICBSZXR1cm46Ci0KLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgV1BBU3RhcnQyV2F5R3JvdXBIUyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKnBFbnRyeSkKLXsKLQl1OCBIZWFkZXI4MDJfM1sxNF07Ci0JdTggVHhUc2NbNl07Ci0Jc3RydWN0IHJ0X2VhcG9sX3BhY2tldCBFQVBPTFBLVDsKLQl1OCBncm91cF9jaXBoZXIgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7Ci0JdTggZGVmYXVsdF9rZXkgPSAwOwotCXU4ICpnbm9uY2VfcHRyID0gTlVMTDsKLQl1OCAqZ3RrX3B0ciA9IE5VTEw7Ci0JdTggKnBCc3NpZCA9IE5VTEw7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT0+IFdQQVN0YXJ0MldheUdyb3VwSFNcbiIpKTsKLQotCWlmICgoIXBFbnRyeSkgfHwgKCFwRW50cnktPlZhbGlkQXNDTEkpKQotCQlyZXR1cm47Ci0KLQlkbyB7Ci0JCS8qIEluY3JlbWVudCByZXBsYXkgY291bnRlciBieSAxICovCi0JCUFERF9PTkVfVG9fNjRCSVRfVkFSKHBFbnRyeS0+Ul9Db3VudGVyKTsKLQotCQkvKiBDb25zdHJ1Y3QgRUFQb0wgbWVzc2FnZSAtIEdyb3VwIE1zZyAxICovCi0JCU5kaXNaZXJvTWVtb3J5KCZFQVBPTFBLVCwgc2l6ZW9mKHN0cnVjdCBydF9lYXBvbF9wYWNrZXQpKTsKLQkJQ29uc3RydWN0RWFwb2xNc2cocEVudHJ5LAotCQkJCSAgZ3JvdXBfY2lwaGVyLAotCQkJCSAgRUFQT0xfR1JPVVBfTVNHXzEsCi0JCQkJICBkZWZhdWx0X2tleSwKLQkJCQkgICh1OCAqKSBnbm9uY2VfcHRyLAotCQkJCSAgVHhUc2MsICh1OCAqKSBndGtfcHRyLCBOVUxMLCAwLCAmRUFQT0xQS1QpOwotCi0JCS8qIE1ha2Ugb3V0Z29pbmcgZnJhbWUgKi8KLQkJTUFLRV84MDJfM19IRUFERVIoSGVhZGVyODAyXzMsIHBFbnRyeS0+QWRkciwgcEJzc2lkLCBFQVBPTCk7Ci0JCVJUTVBUb1dpcmVsZXNzU3RhKHBBZCwgcEVudHJ5LAotCQkJCSAgSGVhZGVyODAyXzMsIExFTkdUSF84MDJfMywKLQkJCQkgICh1OCAqKSYgRUFQT0xQS1QsCi0JCQkJICBDT05WX0FSUkFSWV9UT191MTYoRUFQT0xQS1QuQm9keV9MZW4pICsgNCwKLQkJCQkgIEZBTFNFKTsKLQotCX0gd2hpbGUgKEZBTFNFKTsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCI8PT09IFdQQVN0YXJ0MldheUdyb3VwSFMgOiBzZW5kIG91dCBHcm91cCBNZXNzYWdlIDEgXG4iKSk7Ci0KLQlyZXR1cm47Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCQlQcm9jZXNzIEdyb3VwIGtleSAyLXdheSBoYW5kc2hha2luZwotCi0JQXJndW1lbnRzOgotCQlwQWQJUG9pbnRlcgl0byBvdXIgYWRhcHRlcgotCQlFbGVtCQlNZXNzYWdlIGJvZHkKLQotCVJldHVybiBWYWx1ZToKLQkJTm9uZQotCi0JTm90ZToKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgUGVlckdyb3VwTXNnMUFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcEVudHJ5LCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKQotewotCXU4IEhlYWRlcjgwMl8zWzE0XTsKLQlzdHJ1Y3QgcnRfZWFwb2xfcGFja2V0IEVBUE9MUEtUOwotCXN0cnVjdCBydF9lYXBvbF9wYWNrZXQgKiBwR3JvdXA7Ci0JdTMyIE1zZ0xlbjsKLQlCT09MRUFOIENhbmNlbGxlZDsKLQl1OCBkZWZhdWx0X2tleSA9IDA7Ci0JdTggZ3JvdXBfY2lwaGVyID0gTmRpczgwMl8xMVdFUERpc2FibGVkOwotCXU4ICpwQ3VycmVudEFkZHIgPSBOVUxMOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PiBQZWVyR3JvdXBNc2cxQWN0aW9uIFxuIikpOwotCi0JaWYgKCghcEVudHJ5KSB8fCAoKCFwRW50cnktPlZhbGlkQXNDTEkpICYmICghcEVudHJ5LT5WYWxpZEFzQXBDbGkpKSkKLQkJcmV0dXJuOwotCi0JewotCQlwQ3VycmVudEFkZHIgPSBwQWQtPkN1cnJlbnRBZGRyZXNzOwotCQlncm91cF9jaXBoZXIgPSBwQWQtPlN0YUNmZy5Hcm91cENpcGhlcjsKLQkJZGVmYXVsdF9rZXkgPSBwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQ7Ci0JfQotCi0JLyogUHJvY2VzcyBHcm91cCBNZXNzYWdlIDEgZnJhbWUuIHNraXAgODAyLjExIGhlYWRlcigyNCkgJiBMTENfU05BUCBoZWFkZXIoOCkgKi8KLQlwR3JvdXAgPSAoc3RydWN0IHJ0X2VhcG9sX3BhY2tldCAqKSAmIEVsZW0tPk1zZ1tMRU5HVEhfODAyXzExICsgTEVOR1RIXzgwMl8xX0hdOwotCU1zZ0xlbiA9IEVsZW0tPk1zZ0xlbiAtIExFTkdUSF84MDJfMTEgLSBMRU5HVEhfODAyXzFfSDsKLQotCS8qIFNhbml0eSBDaGVjayBwZWVyIGdyb3VwIG1lc3NhZ2UgMSAtIFJlcGxheSBDb3VudGVyLCBNSUMsIFJTTklFICovCi0JaWYgKFBlZXJXcGFNZXNzYWdlU2FuaXR5KHBBZCwgcEdyb3VwLCBNc2dMZW4sIEVBUE9MX0dST1VQX01TR18xLCBwRW50cnkpCi0JICAgID09IEZBTFNFKQotCQlyZXR1cm47Ci0KLQkvKiBkZWxldGUgcmV0cnkgdGltZXIgKi8KLQlSVE1QQ2FuY2VsVGltZXIoJnBFbnRyeS0+UmV0cnlUaW1lciwgJkNhbmNlbGxlZCk7Ci0KLQkvKiBTYXZlIFJlcGxheSBjb3VudGVyLCBpdCB3aWxsIHVzZSB0byBjb25zdHJ1Y3QgbWVzc2FnZSAyICovCi0JTmRpc01vdmVNZW1vcnkocEVudHJ5LT5SX0NvdW50ZXIsIHBHcm91cC0+S2V5RGVzYy5SZXBsYXlDb3VudGVyLAotCQkgICAgICAgTEVOX0tFWV9ERVNDX1JFUExBWSk7Ci0KLQkvKiBDb25zdHJ1Y3QgRUFQb0wgbWVzc2FnZSAtIEdyb3VwIE1zZyAyICovCi0JTmRpc1plcm9NZW1vcnkoJkVBUE9MUEtULCBzaXplb2Yoc3RydWN0IHJ0X2VhcG9sX3BhY2tldCkpOwotCUNvbnN0cnVjdEVhcG9sTXNnKHBFbnRyeSwgZ3JvdXBfY2lwaGVyLCBFQVBPTF9HUk9VUF9NU0dfMiwgZGVmYXVsdF9rZXksIE5VTEwsCS8qIE5vbmNlIG5vdCB1c2VkICovCi0JCQkgIE5VTEwsCS8qIFR4UlNDIG5vdCB1c2VkICovCi0JCQkgIE5VTEwsCS8qIEdUSyBub3QgdXNlZCAqLwotCQkJICBOVUxMLAkvKiBSU04gSUUgbm90IHVzZWQgKi8KLQkJCSAgMCwgJkVBUE9MUEtUKTsKLQotCS8qIG9wZW4gODAyLjF4IHBvcnQgY29udHJvbCBhbmQgcHJpdmFjeSBmaWx0ZXIgKi8KLQlwRW50cnktPlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQ7Ci0JcEVudHJ5LT5Qcml2YWN5RmlsdGVyID0gTmRpczgwMl8xMVByaXZGaWx0ZXJBY2NlcHRBbGw7Ci0KLQlTVEFfUE9SVF9TRUNVUkVEKHBBZCk7Ci0JLyogSW5kaWNhdGUgQ29ubmVjdGVkIGZvciBHVUkgKi8KLQlwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSA9IE5kaXNNZWRpYVN0YXRlQ29ubmVjdGVkOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIlBlZXJHcm91cE1zZzFBY3Rpb246IEF1dGhNb2RlKCVzKSBQYWlyd2lzZUNpcGhlciglcykgR3JvdXBDaXBoZXIoJXMpIFxuIiwKLQkJICBHZXRBdXRoTW9kZShwRW50cnktPkF1dGhNb2RlKSwKLQkJICBHZXRFbmNyeXB0VHlwZShwRW50cnktPldlcFN0YXR1cyksCi0JCSAgR2V0RW5jcnlwdFR5cGUoZ3JvdXBfY2lwaGVyKSkpOwotCi0JLyogaW5pdCBoZWFkZXIgYW5kIEZpbGwgUGFja2V0IGFuZCBzZW5kIE1zZyAyIHRvIGF1dGhlbnRpY2F0b3IgKi8KLQlNQUtFXzgwMl8zX0hFQURFUihIZWFkZXI4MDJfMywgcEVudHJ5LT5BZGRyLCBwQ3VycmVudEFkZHIsIEVBUE9MKTsKLQlSVE1QVG9XaXJlbGVzc1N0YShwQWQsIHBFbnRyeSwKLQkJCSAgSGVhZGVyODAyXzMsIHNpemVvZihIZWFkZXI4MDJfMyksCi0JCQkgICh1OCAqKSYgRUFQT0xQS1QsCi0JCQkgIENPTlZfQVJSQVJZX1RPX3UxNihFQVBPTFBLVC5Cb2R5X0xlbikgKyA0LCBGQUxTRSk7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJICgiPD09PSBQZWVyR3JvdXBNc2cxQWN0aW9uOiBzbmVkIGdyb3VwIG1lc3NhZ2UgMlxuIikpOwotfQotCi0vKgotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgRGVzY3JpcHRpb246Ci0gICAgICAgIFdoZW4gcmVjZWl2aW5nIHRoZSBsYXN0IHBhY2tldCBvZiAyLXdheSBncm91cGtleSBoYW5kc2hha2UuCi0gICAgUmV0dXJuOgotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBQZWVyR3JvdXBNc2cyQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSBzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwRW50cnksCi0JCQkgdm9pZCAqIE1zZywgdTMyIE1zZ0xlbikKLXsKLQl1MzIgTGVuOwotCXU4ICpwRGF0YTsKLQlCT09MRUFOIENhbmNlbGxlZDsKLQlzdHJ1Y3QgcnRfZWFwb2xfcGFja2V0ICogcE1zZzI7Ci0JdTggZ3JvdXBfY2lwaGVyID0gTmRpczgwMl8xMVdFUERpc2FibGVkOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PiBQZWVyR3JvdXBNc2cyQWN0aW9uIFxuIikpOwotCi0JZG8gewotCQlpZiAoKCFwRW50cnkpIHx8ICghcEVudHJ5LT5WYWxpZEFzQ0xJKSkKLQkJCWJyZWFrOwotCi0JCWlmIChNc2dMZW4gPAotCQkgICAgKExFTkdUSF84MDJfMV9IICsgTEVOR1RIX0VBUE9MX0ggKyBzaXplb2Yoc3RydWN0IHJ0X2tleV9kZXNjcmlwdGVyKSAtCi0JCSAgICAgTUFYX0xFTl9PRl9SU05JRSAtIDIpKQotCQkJYnJlYWs7Ci0KLQkJaWYgKHBFbnRyeS0+V3BhU3RhdGUgIT0gQVNfUFRLSU5JVERPTkUpCi0JCQlicmVhazsKLQotCQlwRGF0YSA9ICh1OCAqKU1zZzsKLQkJcE1zZzIgPSAoc3RydWN0IHJ0X2VhcG9sX3BhY2tldCAqKSAocERhdGEgKyBMRU5HVEhfODAyXzFfSCk7Ci0JCUxlbiA9IE1zZ0xlbiAtIExFTkdUSF84MDJfMV9IOwotCi0JCS8qIFNhbml0eSBDaGVjayBwZWVyIGdyb3VwIG1lc3NhZ2UgMiAtIFJlcGxheSBDb3VudGVyLCBNSUMgKi8KLQkJaWYgKFBlZXJXcGFNZXNzYWdlU2FuaXR5Ci0JCSAgICAocEFkLCBwTXNnMiwgTGVuLCBFQVBPTF9HUk9VUF9NU0dfMiwgcEVudHJ5KSA9PSBGQUxTRSkKLQkJCWJyZWFrOwotCi0JCS8qIDMuICB1cGdyYWRlIHN0YXRlICovCi0KLQkJUlRNUENhbmNlbFRpbWVyKCZwRW50cnktPlJldHJ5VGltZXIsICZDYW5jZWxsZWQpOwotCQlwRW50cnktPkdUS1N0YXRlID0gUkVLRVlfRVNUQUJMSVNIRUQ7Ci0KLQkJaWYgKChwRW50cnktPkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIpCi0JCSAgICB8fCAocEVudHJ5LT5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLKSkgewotCQkJLyogc2VuZCB3aXJlbGVzcyBldmVudCAtIGZvciBzZXQga2V5IGRvbmUgV1BBMiAqLwotCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50KQotCQkJCVJUTVBTZW5kV2lyZWxlc3NFdmVudChwQWQsCi0JCQkJCQkgICAgICBJV19TRVRfS0VZX0RPTkVfV1BBMl9FVkVOVF9GTEFHLAotCQkJCQkJICAgICAgcEVudHJ5LT5BZGRyLAotCQkJCQkJICAgICAgcEVudHJ5LT5hcGlkeCwgMCk7Ci0KLQkJCURCR1BSSU5UKFJUX0RFQlVHX09GRiwKLQkJCQkgKCJBUCBTRVRLRVlTIERPTkUgLSBXUEEyLCBBdXRoTW9kZSglZCk9JXMsIFdlcFN0YXR1cyglZCk9JXMsIEdyb3VwV2VwU3RhdHVzKCVkKT0lc1xuXG4iLAotCQkJCSAgcEVudHJ5LT5BdXRoTW9kZSwKLQkJCQkgIEdldEF1dGhNb2RlKHBFbnRyeS0+QXV0aE1vZGUpLAotCQkJCSAgcEVudHJ5LT5XZXBTdGF0dXMsCi0JCQkJICBHZXRFbmNyeXB0VHlwZShwRW50cnktPldlcFN0YXR1cyksCi0JCQkJICBncm91cF9jaXBoZXIsIEdldEVuY3J5cHRUeXBlKGdyb3VwX2NpcGhlcikpKTsKLQkJfSBlbHNlIHsKLQkJCS8qIHNlbmQgd2lyZWxlc3MgZXZlbnQgLSBmb3Igc2V0IGtleSBkb25lIFdQQSAqLwotCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50KQotCQkJCVJUTVBTZW5kV2lyZWxlc3NFdmVudChwQWQsCi0JCQkJCQkgICAgICBJV19TRVRfS0VZX0RPTkVfV1BBMV9FVkVOVF9GTEFHLAotCQkJCQkJICAgICAgcEVudHJ5LT5BZGRyLAotCQkJCQkJICAgICAgcEVudHJ5LT5hcGlkeCwgMCk7Ci0KLQkJCURCR1BSSU5UKFJUX0RFQlVHX09GRiwKLQkJCQkgKCJBUCBTRVRLRVlTIERPTkUgLSBXUEExLCBBdXRoTW9kZSglZCk9JXMsIFdlcFN0YXR1cyglZCk9JXMsIEdyb3VwV2VwU3RhdHVzKCVkKT0lc1xuXG4iLAotCQkJCSAgcEVudHJ5LT5BdXRoTW9kZSwKLQkJCQkgIEdldEF1dGhNb2RlKHBFbnRyeS0+QXV0aE1vZGUpLAotCQkJCSAgcEVudHJ5LT5XZXBTdGF0dXMsCi0JCQkJICBHZXRFbmNyeXB0VHlwZShwRW50cnktPldlcFN0YXR1cyksCi0JCQkJICBncm91cF9jaXBoZXIsIEdldEVuY3J5cHRUeXBlKGdyb3VwX2NpcGhlcikpKTsKLQkJfQotCX0gd2hpbGUgKEZBTFNFKTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JCUNsYXNzaWZ5IFdQQSBFQVAgbWVzc2FnZSB0eXBlCi0KLQlBcmd1bWVudHM6Ci0JCUVBUFR5cGUJCVZhbHVlIG9mIEVBUCBtZXNzYWdlIHR5cGUKLQkJTXNnVHlwZQkJSW50ZXJuYWwgTWVzc2FnZSBkZWZpbml0aW9uIGZvciBNTE1FIHN0YXRlIG1hY2hpbmUKLQotCVJldHVybiBWYWx1ZToKLQkJVFJVRQkJRm91bmQgYXBwcm9wcmlhdGUgbWVzc2FnZSB0eXBlCi0JCUZBTFNFCQlObyBhcHByb3ByaWF0ZSBtZXNzYWdlIHR5cGUKLQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0JTm90ZToKLQkJQWxsIHRoZXNlIGNvbnN0YW50cyBhcmUgZGVmaW5lZCBpbiB3cGEuaAotCQlGb3Igc3VwcGxpY2FudCwgdGhlcmUgaXMgb25seSBFQVBPTCBLZXkgbWVzc2FnZSBhdmFpbGFibGUKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLUJPT0xFQU4gV3BhTXNnVHlwZVN1YnN0KHU4IEVBUFR5cGUsIGludCAqIE1zZ1R5cGUpCi17Ci0Jc3dpdGNoIChFQVBUeXBlKSB7Ci0JY2FzZSBFQVBQYWNrZXQ6Ci0JCSpNc2dUeXBlID0gTVQyX0VBUFBhY2tldDsKLQkJYnJlYWs7Ci0JY2FzZSBFQVBPTFN0YXJ0OgotCQkqTXNnVHlwZSA9IE1UMl9FQVBPTFN0YXJ0OwotCQlicmVhazsKLQljYXNlIEVBUE9MTG9nb2ZmOgotCQkqTXNnVHlwZSA9IE1UMl9FQVBPTExvZ29mZjsKLQkJYnJlYWs7Ci0JY2FzZSBFQVBPTEtleToKLQkJKk1zZ1R5cGUgPSBNVDJfRUFQT0xLZXk7Ci0JCWJyZWFrOwotCWNhc2UgRUFQT0xBU0ZBbGVydDoKLQkJKk1zZ1R5cGUgPSBNVDJfRUFQT0xBU0ZBbGVydDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIEZBTFNFOwotCX0KLQlyZXR1cm4gVFJVRTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JCVRoZSBwc2V1ZG8tcmFuZG9tIGZ1bmN0aW9uKFBSRikgdGhhdCBoYXNoZXMgdmFyaW91cyBpbnB1dHMgdG8KLQkJZGVyaXZlIGEgcHNldWRvLXJhbmRvbSB2YWx1ZS4gVG8gYWRkIGxpdmVuZXNzIHRvIHRoZSBwc2V1ZG8tcmFuZG9tCi0JCXZhbHVlLCBhIG5vbmNlIHNob3VsZCBiZSBvbmUgb2YgdGhlIGlucHV0cy4KLQotCQlJdCBpcyB1c2VkIHRvIGdlbmVyYXRlIFBUSywgR1RLIG9yIHNvbWUgc3BlY2lmaWMgcmFuZG9tIHZhbHVlLgotCi0JQXJndW1lbnRzOgotCQl1OAkqa2V5LAkJLQl0aGUga2V5IG1hdGVyaWFsIGZvciBITUFDX1NIQTEgdXNlCi0JCWludAkJa2V5X2xlbgkJLQl0aGUgbGVuZ3RoIG9mIGtleQotCQl1OAkqcHJlZml4CQktCWEgcHJlZml4IGxhYmVsCi0JCWludAkJcHJlZml4X2xlbgktCXRoZSBsZW5ndGggb2YgdGhlIGxhYmVsCi0JCXU4CSpkYXRhCQktCWEgc3BlY2lmaWMgZGF0YSB3aXRoIHZhcmlhYmxlIGxlbmd0aAotCQlpbnQJCWRhdGFfbGVuCS0JdGhlIGxlbmd0aCBvZiBhIHNwZWNpZmljIGRhdGEKLQkJaW50CQlsZW4JCQktCXRoZSBvdXRwdXQgbGVuZ3RoCi0KLQlSZXR1cm4gVmFsdWU6Ci0JCXU4CSpvdXRwdXQJCS0JdGhlIGNhbGN1bGF0ZWQgcmVzdWx0Ci0KLQlOb3RlOgotCQk4MDIuMTFpLTIwMDQJQW5uZXggSC4zCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFBSRih1OCAqIGtleSwKLQkgaW50IGtleV9sZW4sCi0JIHU4ICogcHJlZml4LAotCSBpbnQgcHJlZml4X2xlbiwKLQkgdTggKiBkYXRhLCBpbnQgZGF0YV9sZW4sIHU4ICogb3V0cHV0LCBpbnQgbGVuKQotewotCWludCBpOwotCXU4ICppbnB1dDsKLQlpbnQgY3VycmVudGluZGV4ID0gMDsKLQlpbnQgdG90YWxfbGVuOwotCi0JLyogQWxsb2NhdGUgbWVtb3J5IGZvciBpbnB1dCAqLwotCW9zX2FsbG9jX21lbShOVUxMLCAodTggKiopICYgaW5wdXQsIDEwMjQpOwotCi0JaWYgKGlucHV0ID09IE5VTEwpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiUFJGOiBubyBtZW1vcnkhXG4iKSk7Ci0JCXJldHVybjsKLQl9Ci0JLyogR2VuZXJhdGUgY29uY2F0ZW5hdGlvbiBpbnB1dCAqLwotCU5kaXNNb3ZlTWVtb3J5KGlucHV0LCBwcmVmaXgsIHByZWZpeF9sZW4pOwotCi0JLyogQ29uY2F0ZW5hdGUgYSBzaW5nbGUgb2N0ZXQgY29udGFpbmluZyAwICovCi0JaW5wdXRbcHJlZml4X2xlbl0gPSAwOwotCi0JLyogQ29uY2F0ZW5hdGUgc3BlY2lmaWMgZGF0YSAqLwotCU5kaXNNb3ZlTWVtb3J5KCZpbnB1dFtwcmVmaXhfbGVuICsgMV0sIGRhdGEsIGRhdGFfbGVuKTsKLQl0b3RhbF9sZW4gPSBwcmVmaXhfbGVuICsgMSArIGRhdGFfbGVuOwotCi0JLyogQ29uY2F0ZW5hdGUgYSBzaW5nbGUgb2N0ZXQgY29udGFpbmluZyAwICovCi0JLyogVGhpcyBvY3RldCBzaGFsbCBiZSB1cGRhdGUgbGF0ZXIgKi8KLQlpbnB1dFt0b3RhbF9sZW5dID0gMDsKLQl0b3RhbF9sZW4rKzsKLQotCS8qIEl0ZXJhdGUgdG8gY2FsY3VsYXRlIHRoZSByZXN1bHQgYnkgaG1hYy1zaGEtMSAqLwotCS8qIFRoZW4gY29uY2F0ZW5hdGUgdG8gbGFzdCByZXN1bHQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgKGxlbiArIDE5KSAvIDIwOyBpKyspIHsKLQkJSE1BQ19TSEExKGtleSwga2V5X2xlbiwgaW5wdXQsIHRvdGFsX2xlbiwgJm91dHB1dFtjdXJyZW50aW5kZXhdLAotCQkJICBTSEExX0RJR0VTVF9TSVpFKTsKLQkJY3VycmVudGluZGV4ICs9IDIwOwotCi0JCS8qIHVwZGF0ZSB0aGUgbGFzdCBvY3RldCAqLwotCQlpbnB1dFt0b3RhbF9sZW4gLSAxXSsrOwotCX0KLQlvc19mcmVlX21lbShOVUxMLCBpbnB1dCk7Ci19Ci0KLS8qCi0qIEYoUCwgUywgYywgaSkgPSBVMSB4b3IgVTIgeG9yIC4uLiBVYwotKiBVMSA9IFBSRihQLCBTIHx8IEludChpKSkKLSogVTIgPSBQUkYoUCwgVTEpCi0qIFVjID0gUFJGKFAsIFVjLTEpCi0qLwotCi1zdGF0aWMgdm9pZCBGKGNoYXIgKnBhc3N3b3JkLCB1bnNpZ25lZCBjaGFyICpzc2lkLCBpbnQgc3NpZGxlbmd0aCwKLQkgICAgICBpbnQgaXRlcmF0aW9ucywgaW50IGNvdW50LCB1bnNpZ25lZCBjaGFyICpvdXRwdXQpCi17Ci0JdW5zaWduZWQgY2hhciBkaWdlc3RbMzZdLCBkaWdlc3QxW1NIQTFfRElHRVNUX1NJWkVdOwotCWludCBpLCBqOwotCi0JLyogVTEgPSBQUkYoUCwgUyB8fCBpbnQoaSkpICovCi0JbWVtY3B5KGRpZ2VzdCwgc3NpZCwgc3NpZGxlbmd0aCk7Ci0JZGlnZXN0W3NzaWRsZW5ndGhdID0gKHVuc2lnbmVkIGNoYXIpKChjb3VudCA+PiAyNCkgJiAweGZmKTsKLQlkaWdlc3Rbc3NpZGxlbmd0aCArIDFdID0gKHVuc2lnbmVkIGNoYXIpKChjb3VudCA+PiAxNikgJiAweGZmKTsKLQlkaWdlc3Rbc3NpZGxlbmd0aCArIDJdID0gKHVuc2lnbmVkIGNoYXIpKChjb3VudCA+PiA4KSAmIDB4ZmYpOwotCWRpZ2VzdFtzc2lkbGVuZ3RoICsgM10gPSAodW5zaWduZWQgY2hhcikoY291bnQgJiAweGZmKTsKLQlITUFDX1NIQTEoKHVuc2lnbmVkIGNoYXIgKilwYXNzd29yZCwgKGludClzdHJsZW4ocGFzc3dvcmQpLCBkaWdlc3QsIHNzaWRsZW5ndGggKyA0LCBkaWdlc3QxLCBTSEExX0RJR0VTVF9TSVpFKTsJLyogZm9yIFdQQSB1cGRhdGUgKi8KLQotCS8qIG91dHB1dCA9IFUxICovCi0JbWVtY3B5KG91dHB1dCwgZGlnZXN0MSwgU0hBMV9ESUdFU1RfU0laRSk7Ci0KLQlmb3IgKGkgPSAxOyBpIDwgaXRlcmF0aW9uczsgaSsrKSB7Ci0JCS8qIFVuID0gUFJGKFAsIFVuLTEpICovCi0JCUhNQUNfU0hBMSgodW5zaWduZWQgY2hhciAqKXBhc3N3b3JkLCAoaW50KXN0cmxlbihwYXNzd29yZCksIGRpZ2VzdDEsIFNIQTFfRElHRVNUX1NJWkUsIGRpZ2VzdCwgU0hBMV9ESUdFU1RfU0laRSk7CS8qIGZvciBXUEEgdXBkYXRlICovCi0JCW1lbWNweShkaWdlc3QxLCBkaWdlc3QsIFNIQTFfRElHRVNUX1NJWkUpOwotCi0JCS8qIG91dHB1dCA9IG91dHB1dCB4b3IgVW4gKi8KLQkJZm9yIChqID0gMDsgaiA8IFNIQTFfRElHRVNUX1NJWkU7IGorKykgewotCQkJb3V0cHV0W2pdIF49IGRpZ2VzdFtqXTsKLQkJfQotCX0KLX0KLQotLyoKLSogcGFzc3dvcmQgLSBhc2NpaSBzdHJpbmcgdXAgdG8gNjMgY2hhcmFjdGVycyBpbiBsZW5ndGgKLSogc3NpZCAtIG9jdGV0IHN0cmluZyB1cCB0byAzMiBvY3RldHMKLSogc3NpZGxlbmd0aCAtIGxlbmd0aCBvZiBzc2lkIGluIG9jdGV0cwotKiBvdXRwdXQgbXVzdCBiZSA0MCBvY3RldHMgaW4gbGVuZ3RoIGFuZCBvdXRwdXRzIDI1NiBiaXRzIG9mIGtleQotKi8KLWludCBQYXNzd29yZEhhc2goY2hhciAqcGFzc3dvcmQsIHU4ICpzc2lkLCBpbnQgc3NpZGxlbmd0aCwgdTggKm91dHB1dCkKLXsKLQlpZiAoKHN0cmxlbihwYXNzd29yZCkgPiA2MykgfHwgKHNzaWRsZW5ndGggPiAzMikpCi0JCXJldHVybiAwOwotCi0JRihwYXNzd29yZCwgc3NpZCwgc3NpZGxlbmd0aCwgNDA5NiwgMSwgb3V0cHV0KTsKLQlGKHBhc3N3b3JkLCBzc2lkLCBzc2lkbGVuZ3RoLCA0MDk2LCAyLCAmb3V0cHV0W1NIQTFfRElHRVNUX1NJWkVdKTsKLQlyZXR1cm4gMTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JCUl0IHV0aWxpemVzIFBSRi0zODQgb3IgUFJGLTUxMiB0byBkZXJpdmUgc2Vzc2lvbi1zcGVjaWZpYyBrZXlzIGZyb20gYSBQTUsuCi0JCUl0IHNoYWxsIGJlIGNhbGxlZCBieSA0LXdheSBoYW5kc2hha2UgcHJvY2Vzc2luZy4KLQotCUFyZ3VtZW50czoKLQkJcEFkCS0JcG9pbnRlciB0byBvdXIgcEFkYXB0ZXIgY29udGV4dAotCQlQTUsJCS0JcG9pbnRlciB0byBQTUsKLQkJQU5vbmNlCS0JcG9pbnRlciB0byBBTm9uY2UKLQkJQUEJCS0JcG9pbnRlciB0byBBdXRoZW50aWNhdG9yIEFkZHJlc3MKLQkJU05vbmNlCS0JcG9pbnRlciB0byBTTm9uY2UKLQkJU0EJCS0JcG9pbnRlciB0byBTdXBwbGljYW50IEFkZHJlc3MKLQkJbGVuCQktCWluZGljYXRlIHRoZSBsZW5ndGggb2YgUFRLIChvY3RldCkKLQotCVJldHVybiBWYWx1ZToKLQkJT3V0cHV0CQlwb2ludGVyIHRvIHRoZSBQVEsKLQotCU5vdGU6Ci0JCVJlZmVyIHRvIElFRUUgODAyLjExaS0yMDA0IDguNS4xLjIKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgV3BhRGVyaXZlUFRLKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICB1OCAqIFBNSywKLQkJICB1OCAqIEFOb25jZSwKLQkJICB1OCAqIEFBLAotCQkgIHU4ICogU05vbmNlLAotCQkgIHU4ICogU0EsIHU4ICogb3V0cHV0LCB1MzIgbGVuKQotewotCXU4IGNvbmNhdGVuYXRpb25bNzZdOwotCXUzMiBDdXJyUG9zID0gMDsKLQl1OCB0ZW1wWzMyXTsKLQl1OCBQcmVmaXhbXSA9Ci0JICAgIHsgJ1AnLCAnYScsICdpJywgJ3InLCAndycsICdpJywgJ3MnLCAnZScsICcgJywgJ2snLCAnZScsICd5JywgJyAnLAotCQknZScsICd4JywgJ3AnLCAnYScsICduJywgJ3MnLCAnaScsICdvJywgJ24nCi0JfTsKLQotCS8qIGluaXRpYXRlIHRoZSBjb25jYXRlbmF0aW9uIGlucHV0ICovCi0JTmRpc1plcm9NZW1vcnkodGVtcCwgc2l6ZW9mKHRlbXApKTsKLQlOZGlzWmVyb01lbW9yeShjb25jYXRlbmF0aW9uLCA3Nik7Ci0KLQkvKiBHZXQgc21hbGxlciBhZGRyZXNzICovCi0JaWYgKFJUTVBDb21wYXJlTWVtb3J5KFNBLCBBQSwgNikgPT0gMSkKLQkJTmRpc01vdmVNZW1vcnkoY29uY2F0ZW5hdGlvbiwgQUEsIDYpOwotCWVsc2UKLQkJTmRpc01vdmVNZW1vcnkoY29uY2F0ZW5hdGlvbiwgU0EsIDYpOwotCUN1cnJQb3MgKz0gNjsKLQotCS8qIEdldCBsYXJnZXIgYWRkcmVzcyAqLwotCWlmIChSVE1QQ29tcGFyZU1lbW9yeShTQSwgQUEsIDYpID09IDEpCi0JCU5kaXNNb3ZlTWVtb3J5KCZjb25jYXRlbmF0aW9uW0N1cnJQb3NdLCBTQSwgNik7Ci0JZWxzZQotCQlOZGlzTW92ZU1lbW9yeSgmY29uY2F0ZW5hdGlvbltDdXJyUG9zXSwgQUEsIDYpOwotCi0JLyogc3RvcmUgdGhlIGxhcmdlciBtYWMgYWRkcmVzcyBmb3IgYmFja3dhcmQgY29tcGF0aWJsZSBvZiAqLwotCS8qIHJhbGluayBwcm9wcmlldGFyeSBTVEEta2V5IGlzc3VlICovCi0JTmRpc01vdmVNZW1vcnkodGVtcCwgJmNvbmNhdGVuYXRpb25bQ3VyclBvc10sIE1BQ19BRERSX0xFTik7Ci0JQ3VyclBvcyArPSA2OwotCi0JLyogR2V0IHNtYWxsZXIgTm9uY2UgKi8KLQlpZiAoUlRNUENvbXBhcmVNZW1vcnkoQU5vbmNlLCBTTm9uY2UsIDMyKSA9PSAwKQotCQlOZGlzTW92ZU1lbW9yeSgmY29uY2F0ZW5hdGlvbltDdXJyUG9zXSwgdGVtcCwgMzIpOwkvKiBwYXRjaCBmb3IgcmFsaW5rIHByb3ByaWV0YXJ5IFNUQS1rZXkgaXNzdWUgKi8KLQllbHNlIGlmIChSVE1QQ29tcGFyZU1lbW9yeShBTm9uY2UsIFNOb25jZSwgMzIpID09IDEpCi0JCU5kaXNNb3ZlTWVtb3J5KCZjb25jYXRlbmF0aW9uW0N1cnJQb3NdLCBTTm9uY2UsIDMyKTsKLQllbHNlCi0JCU5kaXNNb3ZlTWVtb3J5KCZjb25jYXRlbmF0aW9uW0N1cnJQb3NdLCBBTm9uY2UsIDMyKTsKLQlDdXJyUG9zICs9IDMyOwotCi0JLyogR2V0IGxhcmdlciBOb25jZSAqLwotCWlmIChSVE1QQ29tcGFyZU1lbW9yeShBTm9uY2UsIFNOb25jZSwgMzIpID09IDApCi0JCU5kaXNNb3ZlTWVtb3J5KCZjb25jYXRlbmF0aW9uW0N1cnJQb3NdLCB0ZW1wLCAzMik7CS8qIHBhdGNoIGZvciByYWxpbmsgcHJvcHJpZXRhcnkgU1RBLWtleSBpc3N1ZSAqLwotCWVsc2UgaWYgKFJUTVBDb21wYXJlTWVtb3J5KEFOb25jZSwgU05vbmNlLCAzMikgPT0gMSkKLQkJTmRpc01vdmVNZW1vcnkoJmNvbmNhdGVuYXRpb25bQ3VyclBvc10sIEFOb25jZSwgMzIpOwotCWVsc2UKLQkJTmRpc01vdmVNZW1vcnkoJmNvbmNhdGVuYXRpb25bQ3VyclBvc10sIFNOb25jZSwgMzIpOwotCUN1cnJQb3MgKz0gMzI7Ci0KLQloZXhfZHVtcCgiY29uY2F0ZW5hdGlvbj0iLCBjb25jYXRlbmF0aW9uLCA3Nik7Ci0KLQkvKiBVc2UgUFJGIHRvIGdlbmVyYXRlIFBUSyAqLwotCVBSRihQTUssIExFTl9NQVNURVJfS0VZLCBQcmVmaXgsIDIyLCBjb25jYXRlbmF0aW9uLCA3Niwgb3V0cHV0LCBsZW4pOwotCi19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCQlHZW5lcmF0ZSByYW5kb20gbnVtYmVyIGJ5IHNvZnR3YXJlLgotCi0JQXJndW1lbnRzOgotCQlwQWQJCS0JcG9pbnRlciB0byBvdXIgcEFkYXB0ZXIgY29udGV4dAotCQltYWNBZGRyCS0JcG9pbnRlciB0byBsb2NhbCBNQUMgYWRkcmVzcwotCi0JUmV0dXJuIFZhbHVlOgotCi0JTm90ZToKLQkJODAyLjFpaS0yMDA0ICBBbm5leCBILjUKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgR2VuUmFuZG9tKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggKiBtYWNBZGRyLCB1OCAqIHJhbmRvbSkKLXsKLQlpbnQgaSwgY3VycjsKLQl1OCBsb2NhbFs4MF0sIEtleUNvdW50ZXJbMzJdOwotCXU4IHJlc3VsdFs4MF07Ci0JdW5zaWduZWQgbG9uZyBDdXJyZW50VGltZTsKLQl1OCBwcmVmaXhbXSA9Ci0JICAgIHsgJ0knLCAnbicsICdpJywgJ3QnLCAnICcsICdDJywgJ28nLCAndScsICduJywgJ3QnLCAnZScsICdyJyB9OwotCi0JLyogWmVybyB0aGUgcmVsYXRlZCBpbmZvcm1hdGlvbiAqLwotCU5kaXNaZXJvTWVtb3J5KHJlc3VsdCwgODApOwotCU5kaXNaZXJvTWVtb3J5KGxvY2FsLCA4MCk7Ci0JTmRpc1plcm9NZW1vcnkoS2V5Q291bnRlciwgMzIpOwotCi0JZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKLQkJLyogY29weSB0aGUgbG9jYWwgTUFDIGFkZHJlc3MgKi8KLQkJQ09QWV9NQUNfQUREUihsb2NhbCwgbWFjQWRkcik7Ci0JCWN1cnIgPSBNQUNfQUREUl9MRU47Ci0KLQkJLyogY29uY2F0ZW5hdGUgdGhlIGN1cnJlbnQgdGltZSAqLwotCQlOZGlzR2V0U3lzdGVtVXBUaW1lKCZDdXJyZW50VGltZSk7Ci0JCU5kaXNNb3ZlTWVtb3J5KCZsb2NhbFtjdXJyXSwgJkN1cnJlbnRUaW1lLCBzaXplb2YoQ3VycmVudFRpbWUpKTsKLQkJY3VyciArPSBzaXplb2YoQ3VycmVudFRpbWUpOwotCi0JCS8qIGNvbmNhdGVuYXRlIHRoZSBsYXN0IHJlc3VsdCAqLwotCQlOZGlzTW92ZU1lbW9yeSgmbG9jYWxbY3Vycl0sIHJlc3VsdCwgMzIpOwotCQljdXJyICs9IDMyOwotCi0JCS8qIGNvbmNhdGVuYXRlIGEgdmFyaWFibGUgKi8KLQkJTmRpc01vdmVNZW1vcnkoJmxvY2FsW2N1cnJdLCAmaSwgMik7Ci0JCWN1cnIgKz0gMjsKLQotCQkvKiBjYWxjdWxhdGUgdGhlIHJlc3VsdCAqLwotCQlQUkYoS2V5Q291bnRlciwgMzIsIHByZWZpeCwgMTIsIGxvY2FsLCBjdXJyLCByZXN1bHQsIDMyKTsKLQl9Ci0KLQlOZGlzTW92ZU1lbW9yeShyYW5kb20sIHJlc3VsdCwgMzIpOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQkJQnVpbGQgY2lwaGVyIHN1aXRlIGluIFJTTi1JRS4KLQkJSXQgb25seSBzaGFsbCBiZSBjYWxsZWQgYnkgUlRNUE1ha2VSU05JRS4KLQotCUFyZ3VtZW50czoKLQkJcEFkCQkJLQlwb2ludGVyIHRvIG91ciBwQWRhcHRlciBjb250ZXh0Ci0JRWxlbWVudElECS0JaW5kaWNhdGUgdGhlIFdQQTEgb3IgV1BBMgotCVdlcFN0YXR1cwktCWluZGljYXRlIHRoZSBlbmNyeXB0aW9uIHR5cGUKLQkJYk1peENpcGhlcgktCWEgYm9vbGVhbiB0byBpbmRpY2F0ZSB0aGUgcGFpcndpc2UgY2lwaGVyIGFuZCBncm91cAotCQkJCQkJY2lwaGVyIGFyZSB0aGUgc2FtZSBvciBub3QKLQotCVJldHVybiBWYWx1ZToKLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi1zdGF0aWMgdm9pZCBSVE1QTWFrZVJzbkllQ2lwaGVyKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQl1OCBFbGVtZW50SUQsCi0JCQkJdTMyIFdlcFN0YXR1cywKLQkJCQlJTiBCT09MRUFOIGJNaXhDaXBoZXIsCi0JCQkJdTggRmxleGlibGVDaXBoZXIsCi0JCQkJdTggKnBSc25JZSwgdTggKiByc25fbGVuKQotewotCXU4IFBhaXJ3aXNlQ250OwotCi0JKnJzbl9sZW4gPSAwOwotCi0JLyogZGVjaWRlIFdQQTIgb3IgV1BBMSAqLwotCWlmIChFbGVtZW50SUQgPT0gV3BhMkllKSB7Ci0JCXN0cnVjdCBydF9yc25pZTIgKnBSc25pZV9jaXBoZXIgPSAoc3RydWN0IHJ0X3JzbmllMiAqKXBSc25JZTsKLQotCQkvKiBBc3NpZ24gdGhlIHZlcnNvbiBhcyAxICovCi0JCXBSc25pZV9jaXBoZXItPnZlcnNpb24gPSAxOwotCi0JCXN3aXRjaCAoV2VwU3RhdHVzKSB7Ci0JCQkvKiBUS0lQIG1vZGUgKi8KLQkJY2FzZSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOgotCQkJTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+bWNhc3QsIE9VSV9XUEEyX1RLSVAsIDQpOwotCQkJcFJzbmllX2NpcGhlci0+dWNvdW50ID0gMTsKLQkJCU5kaXNNb3ZlTWVtb3J5KHBSc25pZV9jaXBoZXItPnVjYXN0WzBdLm91aSwKLQkJCQkgICAgICAgT1VJX1dQQTJfVEtJUCwgNCk7Ci0JCQkqcnNuX2xlbiA9IHNpemVvZihzdHJ1Y3QgcnRfcnNuaWUyKTsKLQkJCWJyZWFrOwotCi0JCQkvKiBBRVMgbW9kZSAqLwotCQljYXNlIE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQ6Ci0JCQlpZiAoYk1peENpcGhlcikKLQkJCQlOZGlzTW92ZU1lbW9yeShwUnNuaWVfY2lwaGVyLT5tY2FzdCwKLQkJCQkJICAgICAgIE9VSV9XUEEyX1RLSVAsIDQpOwotCQkJZWxzZQotCQkJCU5kaXNNb3ZlTWVtb3J5KHBSc25pZV9jaXBoZXItPm1jYXN0LAotCQkJCQkgICAgICAgT1VJX1dQQTJfQ0NNUCwgNCk7Ci0JCQlwUnNuaWVfY2lwaGVyLT51Y291bnQgPSAxOwotCQkJTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+dWNhc3RbMF0ub3VpLAotCQkJCSAgICAgICBPVUlfV1BBMl9DQ01QLCA0KTsKLQkJCSpyc25fbGVuID0gc2l6ZW9mKHN0cnVjdCBydF9yc25pZTIpOwotCQkJYnJlYWs7Ci0KLQkJCS8qIFRLSVAtQUVTIG1peCBtb2RlICovCi0JCWNhc2UgTmRpczgwMl8xMUVuY3J5cHRpb240RW5hYmxlZDoKLQkJCU5kaXNNb3ZlTWVtb3J5KHBSc25pZV9jaXBoZXItPm1jYXN0LCBPVUlfV1BBMl9US0lQLCA0KTsKLQotCQkJUGFpcndpc2VDbnQgPSAxOwotCQkJLyogSW5zZXJ0IFdQQTIgVEtJUCBhcyB0aGUgZmlyc3QgcGFpcndpc2UgY2lwaGVyICovCi0JCQlpZiAoTUlYX0NJUEhFUl9XUEEyX1RLSVBfT04oRmxleGlibGVDaXBoZXIpKSB7Ci0JCQkJTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+dWNhc3RbMF0ub3VpLAotCQkJCQkgICAgICAgT1VJX1dQQTJfVEtJUCwgNCk7Ci0JCQkJLyogSW5zZXJ0IFdQQTIgQUVTIGFzIHRoZSBzZWNvbmRhcnkgcGFpcndpc2UgY2lwaGVyICovCi0JCQkJaWYgKE1JWF9DSVBIRVJfV1BBMl9BRVNfT04oRmxleGlibGVDaXBoZXIpKSB7Ci0JCQkJCU5kaXNNb3ZlTWVtb3J5KHBSc25pZV9jaXBoZXItPnVjYXN0WzBdLgotCQkJCQkJICAgICAgIG91aSArIDQsIE9VSV9XUEEyX0NDTVAsCi0JCQkJCQkgICAgICAgNCk7Ci0JCQkJCVBhaXJ3aXNlQ250ID0gMjsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCS8qIEluc2VydCBXUEEyIEFFUyBhcyB0aGUgZmlyc3QgcGFpcndpc2UgY2lwaGVyICovCi0JCQkJTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+dWNhc3RbMF0ub3VpLAotCQkJCQkgICAgICAgT1VJX1dQQTJfQ0NNUCwgNCk7Ci0JCQl9Ci0KLQkJCXBSc25pZV9jaXBoZXItPnVjb3VudCA9IFBhaXJ3aXNlQ250OwotCQkJKnJzbl9sZW4gPSBzaXplb2Yoc3RydWN0IHJ0X3JzbmllMikgKyAoNCAqIChQYWlyd2lzZUNudCAtIDEpKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKSAmJgotCQkgICAgKHBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyICE9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpICYmCi0JCSAgICAocEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgIT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkpIHsKLQkJCXUzMiBHcm91cENpcGhlciA9IHBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyOwotCQkJc3dpdGNoIChHcm91cENpcGhlcikgewotCQkJY2FzZSBOZGlzODAyXzExR3JvdXBXRVA0MEVuYWJsZWQ6Ci0JCQkJTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+bWNhc3QsCi0JCQkJCSAgICAgICBPVUlfV1BBMl9XRVA0MCwgNCk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIE5kaXM4MDJfMTFHcm91cFdFUDEwNEVuYWJsZWQ6Ci0JCQkJTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+bWNhc3QsCi0JCQkJCSAgICAgICBPVUlfV1BBMl9XRVAxMDQsIDQpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCS8qIHN3YXAgZm9yIGJpZy1lbmRpYW4gcGxhdGZvcm0gKi8KLQkJcFJzbmllX2NpcGhlci0+dmVyc2lvbiA9IGNwdTJsZTE2KHBSc25pZV9jaXBoZXItPnZlcnNpb24pOwotCQlwUnNuaWVfY2lwaGVyLT51Y291bnQgPSBjcHUybGUxNihwUnNuaWVfY2lwaGVyLT51Y291bnQpOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCBydF9yc25pZSAqcFJzbmllX2NpcGhlciA9IChzdHJ1Y3QgcnRfcnNuaWUgKilwUnNuSWU7Ci0KLQkJLyogQXNzaWduIE9VSSBhbmQgdmVyc2lvbiAqLwotCQlOZGlzTW92ZU1lbW9yeShwUnNuaWVfY2lwaGVyLT5vdWksIE9VSV9XUEFfVkVSU0lPTiwgNCk7Ci0JCXBSc25pZV9jaXBoZXItPnZlcnNpb24gPSAxOwotCi0JCXN3aXRjaCAoV2VwU3RhdHVzKSB7Ci0JCQkvKiBUS0lQIG1vZGUgKi8KLQkJY2FzZSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOgotCQkJTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+bWNhc3QsIE9VSV9XUEFfVEtJUCwgNCk7Ci0JCQlwUnNuaWVfY2lwaGVyLT51Y291bnQgPSAxOwotCQkJTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+dWNhc3RbMF0ub3VpLAotCQkJCSAgICAgICBPVUlfV1BBX1RLSVAsIDQpOwotCQkJKnJzbl9sZW4gPSBzaXplb2Yoc3RydWN0IHJ0X3JzbmllKTsKLQkJCWJyZWFrOwotCi0JCQkvKiBBRVMgbW9kZSAqLwotCQljYXNlIE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQ6Ci0JCQlpZiAoYk1peENpcGhlcikKLQkJCQlOZGlzTW92ZU1lbW9yeShwUnNuaWVfY2lwaGVyLT5tY2FzdCwKLQkJCQkJICAgICAgIE9VSV9XUEFfVEtJUCwgNCk7Ci0JCQllbHNlCi0JCQkJTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+bWNhc3QsCi0JCQkJCSAgICAgICBPVUlfV1BBX0NDTVAsIDQpOwotCQkJcFJzbmllX2NpcGhlci0+dWNvdW50ID0gMTsKLQkJCU5kaXNNb3ZlTWVtb3J5KHBSc25pZV9jaXBoZXItPnVjYXN0WzBdLm91aSwKLQkJCQkgICAgICAgT1VJX1dQQV9DQ01QLCA0KTsKLQkJCSpyc25fbGVuID0gc2l6ZW9mKHN0cnVjdCBydF9yc25pZSk7Ci0JCQlicmVhazsKLQotCQkJLyogVEtJUC1BRVMgbWl4IG1vZGUgKi8KLQkJY2FzZSBOZGlzODAyXzExRW5jcnlwdGlvbjRFbmFibGVkOgotCQkJTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+bWNhc3QsIE9VSV9XUEFfVEtJUCwgNCk7Ci0KLQkJCVBhaXJ3aXNlQ250ID0gMTsKLQkJCS8qIEluc2VydCBXUEEgVEtJUCBhcyB0aGUgZmlyc3QgcGFpcndpc2UgY2lwaGVyICovCi0JCQlpZiAoTUlYX0NJUEhFUl9XUEFfVEtJUF9PTihGbGV4aWJsZUNpcGhlcikpIHsKLQkJCQlOZGlzTW92ZU1lbW9yeShwUnNuaWVfY2lwaGVyLT51Y2FzdFswXS5vdWksCi0JCQkJCSAgICAgICBPVUlfV1BBX1RLSVAsIDQpOwotCQkJCS8qIEluc2VydCBXUEEgQUVTIGFzIHRoZSBzZWNvbmRhcnkgcGFpcndpc2UgY2lwaGVyICovCi0JCQkJaWYgKE1JWF9DSVBIRVJfV1BBX0FFU19PTihGbGV4aWJsZUNpcGhlcikpIHsKLQkJCQkJTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+dWNhc3RbMF0uCi0JCQkJCQkgICAgICAgb3VpICsgNCwgT1VJX1dQQV9DQ01QLAotCQkJCQkJICAgICAgIDQpOwotCQkJCQlQYWlyd2lzZUNudCA9IDI7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQkvKiBJbnNlcnQgV1BBIEFFUyBhcyB0aGUgZmlyc3QgcGFpcndpc2UgY2lwaGVyICovCi0JCQkJTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+dWNhc3RbMF0ub3VpLAotCQkJCQkgICAgICAgT1VJX1dQQV9DQ01QLCA0KTsKLQkJCX0KLQotCQkJcFJzbmllX2NpcGhlci0+dWNvdW50ID0gUGFpcndpc2VDbnQ7Ci0JCQkqcnNuX2xlbiA9IHNpemVvZihzdHJ1Y3QgcnRfcnNuaWUpICsgKDQgKiAoUGFpcndpc2VDbnQgLSAxKSk7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmICgocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkgJiYKLQkJICAgIChwQWQtPlN0YUNmZy5Hcm91cENpcGhlciAhPSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKSAmJgotCQkgICAgKHBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyICE9IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpKSB7Ci0JCQl1MzIgR3JvdXBDaXBoZXIgPSBwQWQtPlN0YUNmZy5Hcm91cENpcGhlcjsKLQkJCXN3aXRjaCAoR3JvdXBDaXBoZXIpIHsKLQkJCWNhc2UgTmRpczgwMl8xMUdyb3VwV0VQNDBFbmFibGVkOgotCQkJCU5kaXNNb3ZlTWVtb3J5KHBSc25pZV9jaXBoZXItPm1jYXN0LAotCQkJCQkgICAgICAgT1VJX1dQQV9XRVA0MCwgNCk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIE5kaXM4MDJfMTFHcm91cFdFUDEwNEVuYWJsZWQ6Ci0JCQkJTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+bWNhc3QsCi0JCQkJCSAgICAgICBPVUlfV1BBX1dFUDEwNCwgNCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJLyogc3dhcCBmb3IgYmlnLWVuZGlhbiBwbGF0Zm9ybSAqLwotCQlwUnNuaWVfY2lwaGVyLT52ZXJzaW9uID0gY3B1MmxlMTYocFJzbmllX2NpcGhlci0+dmVyc2lvbik7Ci0JCXBSc25pZV9jaXBoZXItPnVjb3VudCA9IGNwdTJsZTE2KHBSc25pZV9jaXBoZXItPnVjb3VudCk7Ci0JfQotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQkJQnVpbGQgQUtNIHN1aXRlIGluIFJTTi1JRS4KLQkJSXQgb25seSBzaGFsbCBiZSBjYWxsZWQgYnkgUlRNUE1ha2VSU05JRS4KLQotCUFyZ3VtZW50czoKLQkJcEFkCQkJLQlwb2ludGVyIHRvIG91ciBwQWRhcHRlciBjb250ZXh0Ci0JRWxlbWVudElECS0JaW5kaWNhdGUgdGhlIFdQQTEgb3IgV1BBMgotCUF1dGhNb2RlCS0JaW5kaWNhdGUgdGhlIGF1dGhlbnRpY2F0aW9uIG1vZGUKLQkJYXBpZHgJCS0JaW5kaWNhdGUgdGhlIGludGVyZmFjZSBpbmRleAotCi0JUmV0dXJuIFZhbHVlOgotCi0JTm90ZToKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXN0YXRpYyB2b2lkIFJUTVBNYWtlUnNuSWVBS00oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgICB1OCBFbGVtZW50SUQsCi0JCQkgICAgIHUzMiBBdXRoTW9kZSwKLQkJCSAgICAgdTggYXBpZHgsCi0JCQkgICAgIHU4ICpwUnNuSWUsIHU4ICogcnNuX2xlbikKLXsKLQlzdHJ1Y3QgcnRfcnNuaWVfYXV0aCAqcFJzbmllX2F1dGg7Ci0JdTggQWttQ250ID0gMTsJLyogZGVmYXVsdCBhcyAxICovCi0KLQlwUnNuaWVfYXV0aCA9IChzdHJ1Y3QgcnRfcnNuaWVfYXV0aCAqKSAocFJzbkllICsgKCpyc25fbGVuKSk7Ci0KLQkvKiBkZWNpZGUgV1BBMiBvciBXUEExICovCi0JaWYgKEVsZW1lbnRJRCA9PSBXcGEySWUpIHsKLQotCQlzd2l0Y2ggKEF1dGhNb2RlKSB7Ci0JCWNhc2UgTmRpczgwMl8xMUF1dGhNb2RlV1BBMjoKLQkJY2FzZSBOZGlzODAyXzExQXV0aE1vZGVXUEExV1BBMjoKLQkJCU5kaXNNb3ZlTWVtb3J5KHBSc25pZV9hdXRoLT5hdXRoWzBdLm91aSwKLQkJCQkgICAgICAgT1VJX1dQQTJfODAyMVhfQUtNLCA0KTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSzoKLQkJY2FzZSBOZGlzODAyXzExQXV0aE1vZGVXUEExUFNLV1BBMlBTSzoKLQkJCU5kaXNNb3ZlTWVtb3J5KHBSc25pZV9hdXRoLT5hdXRoWzBdLm91aSwKLQkJCQkgICAgICAgT1VJX1dQQTJfUFNLX0FLTSwgNCk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCUFrbUNudCA9IDA7Ci0JCQlicmVhazsKLQotCQl9Ci0JfSBlbHNlIHsKLQkJc3dpdGNoIChBdXRoTW9kZSkgewotCQljYXNlIE5kaXM4MDJfMTFBdXRoTW9kZVdQQToKLQkJY2FzZSBOZGlzODAyXzExQXV0aE1vZGVXUEExV1BBMjoKLQkJCU5kaXNNb3ZlTWVtb3J5KHBSc25pZV9hdXRoLT5hdXRoWzBdLm91aSwKLQkJCQkgICAgICAgT1VJX1dQQV84MDIxWF9BS00sIDQpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0s6Ci0JCWNhc2UgTmRpczgwMl8xMUF1dGhNb2RlV1BBMVBTS1dQQTJQU0s6Ci0JCQlOZGlzTW92ZU1lbW9yeShwUnNuaWVfYXV0aC0+YXV0aFswXS5vdWksCi0JCQkJICAgICAgIE9VSV9XUEFfUFNLX0FLTSwgNCk7Ci0JCQlicmVhazsKLQotCQljYXNlIE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmU6Ci0JCQlOZGlzTW92ZU1lbW9yeShwUnNuaWVfYXV0aC0+YXV0aFswXS5vdWksCi0JCQkJICAgICAgIE9VSV9XUEFfTk9ORV9BS00sIDQpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlBa21DbnQgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlwUnNuaWVfYXV0aC0+YWNvdW50ID0gQWttQ250OwotCXBSc25pZV9hdXRoLT5hY291bnQgPSBjcHUybGUxNihwUnNuaWVfYXV0aC0+YWNvdW50KTsKLQotCS8qIHVwZGF0ZSBjdXJyZW50IFJTTklFIGxlbmd0aCAqLwotCSgqcnNuX2xlbikgKz0gKHNpemVvZihzdHJ1Y3QgcnRfcnNuaWVfYXV0aCkgKyAoNCAqIChBa21DbnQgLSAxKSkpOwotCi19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCQlCdWlsZCBjYXBhYmlsaXR5IGluIFJTTi1JRS4KLQkJSXQgb25seSBzaGFsbCBiZSBjYWxsZWQgYnkgUlRNUE1ha2VSU05JRS4KLQotCUFyZ3VtZW50czoKLQkJcEFkCQkJLQlwb2ludGVyIHRvIG91ciBwQWRhcHRlciBjb250ZXh0Ci0JRWxlbWVudElECS0JaW5kaWNhdGUgdGhlIFdQQTEgb3IgV1BBMgotCQlhcGlkeAkJLQlpbmRpY2F0ZSB0aGUgaW50ZXJmYWNlIGluZGV4Ci0KLQlSZXR1cm4gVmFsdWU6Ci0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotc3RhdGljIHZvaWQgUlRNUE1ha2VSc25JZUNhcChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgIHU4IEVsZW1lbnRJRCwKLQkJCSAgICAgdTggYXBpZHgsCi0JCQkgICAgIHU4ICpwUnNuSWUsIHU4ICogcnNuX2xlbikKLXsKLQlSU05fQ0FQQUJJTElUSUVTICpwUlNOX0NhcDsKLQotCS8qIGl0IGNvdWxkIGJlIGlnbm9yZWQgaW4gV1BBMSBtb2RlICovCi0JaWYgKEVsZW1lbnRJRCA9PSBXcGFJZSkKLQkJcmV0dXJuOwotCi0JcFJTTl9DYXAgPSAoUlNOX0NBUEFCSUxJVElFUyAqKSAocFJzbkllICsgKCpyc25fbGVuKSk7Ci0KLQlwUlNOX0NhcC0+d29yZCA9IGNwdTJsZTE2KHBSU05fQ2FwLT53b3JkKTsKLQotCSgqcnNuX2xlbikgKz0gc2l6ZW9mKFJTTl9DQVBBQklMSVRJRVMpOwkvKiB1cGRhdGUgY3VycmVudCBSU05JRSBsZW5ndGggKi8KLQotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQkJQnVpbGQgUlNOIElFIGNvbnRleHQuIEl0IGlzIG5vdCBpbmNsdWRlZCBlbGVtZW50LUlEIGFuZCBsZW5ndGguCi0KLQlBcmd1bWVudHM6Ci0JCXBBZAkJCS0JcG9pbnRlciB0byBvdXIgcEFkYXB0ZXIgY29udGV4dAotCUF1dGhNb2RlCS0JaW5kaWNhdGUgdGhlIGF1dGhlbnRpY2F0aW9uIG1vZGUKLQlXZXBTdGF0dXMJLQlpbmRpY2F0ZSB0aGUgZW5jcnlwdGlvbiB0eXBlCi0JCWFwaWR4CQktCWluZGljYXRlIHRoZSBpbnRlcmZhY2UgaW5kZXgKLQotCVJldHVybiBWYWx1ZToKLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFJUTVBNYWtlUlNOSUUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICB1MzIgQXV0aE1vZGUsIHUzMiBXZXBTdGF0dXMsIHU4IGFwaWR4KQotewotCXU4ICpwUnNuSWUgPSBOVUxMOwkvKiBwcmltYXJ5IFJTTklFICovCi0JdTggKnJzbmllbGVuX2N1cl9wID0gMDsJLyogdGhlIGxlbmd0aCBvZiB0aGUgcHJpbWFyeSBSU05JRSAqLwotCXU4ICpyc25pZWxlbl9leF9jdXJfcCA9IDA7CS8qIHRoZSBsZW5ndGggb2YgdGhlIHNlY29uZGFyeSBSU05JRSAqLwotCXU4IFByaW1hcnlSc25pZTsKLQlCT09MRUFOIGJNaXhDaXBoZXIgPSBGQUxTRTsJLyogaW5kaWNhdGUgdGhlIHBhaXJ3aXNlIGFuZCBncm91cCBjaXBoZXIgYXJlIGRpZmZlcmVudCAqLwotCXU4IHBfb2Zmc2V0OwotCVdQQV9NSVhfUEFJUl9DSVBIRVIgRmxleGlibGVDaXBoZXIgPSBXUEFfVEtJUEFFU19XUEEyX1RLSVBBRVM7CS8qIGl0IHByb3ZpZGUgdGhlIG1vcmUgZmxleGlibGUgY2lwaGVyIGNvbWJpbmF0aW9uIGluIFdQQS1XUEEyIGFuZCBUS0lQQUVTIG1vZGUgKi8KLQotCXJzbmllbGVuX2N1cl9wID0gTlVMTDsKLQlyc25pZWxlbl9leF9jdXJfcCA9IE5VTEw7Ci0KLQl7Ci0JCXsKLQkJCWlmIChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgIT0KLQkJCSAgICBXUEFfU1VQUExJQ0FOVF9ESVNBQkxFKSB7Ci0JCQkJaWYgKEF1dGhNb2RlIDwgTmRpczgwMl8xMUF1dGhNb2RlV1BBKQotCQkJCQlyZXR1cm47Ci0JCQl9IGVsc2UgewotCQkJCS8qIFN1cHBvcnQgV1BBUFNLIG9yIFdQQTJQU0sgaW4gU1RBLUluZnJhIG1vZGUgKi8KLQkJCQkvKiBTdXBwb3J0IFdQQU5vbmUgaW4gU1RBLUFkaG9jIG1vZGUgKi8KLQkJCQlpZiAoKEF1dGhNb2RlICE9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykgJiYKLQkJCQkgICAgKEF1dGhNb2RlICE9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spICYmCi0JCQkJICAgIChBdXRoTW9kZSAhPSBOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lKQotCQkJCSAgICApCi0JCQkJCXJldHVybjsKLQkJCX0KLQotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT0+IFJUTVBNYWtlUlNOSUUoU1RBKVxuIikpOwotCi0JCQkvKiBaZXJvIFJTTklFIGNvbnRleHQgKi8KLQkJCXBBZC0+U3RhQ2ZnLlJTTklFX0xlbiA9IDA7Ci0JCQlOZGlzWmVyb01lbW9yeShwQWQtPlN0YUNmZy5SU05fSUUsIE1BWF9MRU5fT0ZfUlNOSUUpOwotCi0JCQkvKiBQb2ludGVyIHRvIFJTTklFICovCi0JCQlyc25pZWxlbl9jdXJfcCA9ICZwQWQtPlN0YUNmZy5SU05JRV9MZW47Ci0JCQlwUnNuSWUgPSBwQWQtPlN0YUNmZy5SU05fSUU7Ci0KLQkJCWJNaXhDaXBoZXIgPSBwQWQtPlN0YUNmZy5iTWl4Q2lwaGVyOwotCQl9Ci0JfQotCi0JLyogaW5kaWNhdGUgcHJpbWFyeSBSU05JRSBhcyBXUEEgb3IgV1BBMiAqLwotCWlmICgoQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKSB8fAotCSAgICAoQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLKSB8fAotCSAgICAoQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZSkgfHwKLQkgICAgKEF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTFXUEEyKSB8fAotCSAgICAoQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMVBTS1dQQTJQU0spKQotCQlQcmltYXJ5UnNuaWUgPSBXcGFJZTsKLQllbHNlCi0JCVByaW1hcnlSc25pZSA9IFdwYTJJZTsKLQotCXsKLQkJLyogQnVpbGQgdGhlIHByaW1hcnkgUlNOSUUgKi8KLQkJLyogMS4gaW5zZXJ0IGNpcGhlciBzdWl0ZSAqLwotCQlSVE1QTWFrZVJzbkllQ2lwaGVyKHBBZCwgUHJpbWFyeVJzbmllLCBXZXBTdGF0dXMsIGJNaXhDaXBoZXIsCi0JCQkJICAgIEZsZXhpYmxlQ2lwaGVyLCBwUnNuSWUsICZwX29mZnNldCk7Ci0KLQkJLyogMi4gaW5zZXJ0IEFLTSAqLwotCQlSVE1QTWFrZVJzbkllQUtNKHBBZCwgUHJpbWFyeVJzbmllLCBBdXRoTW9kZSwgYXBpZHgsIHBSc25JZSwKLQkJCQkgJnBfb2Zmc2V0KTsKLQotCQkvKiAzLiBpbnNlcnQgY2FwYWJpbGl0eSAqLwotCQlSVE1QTWFrZVJzbkllQ2FwKHBBZCwgUHJpbWFyeVJzbmllLCBhcGlkeCwgcFJzbkllLCAmcF9vZmZzZXQpOwotCX0KLQotCS8qIDQuIHVwZGF0ZSB0aGUgUlNOSUUgbGVuZ3RoICovCi0JKnJzbmllbGVuX2N1cl9wID0gcF9vZmZzZXQ7Ci0KLQloZXhfZHVtcCgiVGhlIHByaW1hcnkgUlNOSUUiLCBwUnNuSWUsICgqcnNuaWVsZW5fY3VyX3ApKTsKLQotfQotCi0vKgotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgRGVzY3JpcHRpb246Ci0JCUNoZWNrIHdoZXRoZXIgdGhlIHJlY2VpdmVkIGZyYW1lIGlzIEVBUCBmcmFtZS4KLQotCUFyZ3VtZW50czoKLQkJcEFkCQkJCS0JcG9pbnRlciB0byBvdXIgcEFkYXB0ZXIgY29udGV4dAotCQlwRW50cnkJCQktCXBvaW50ZXIgdG8gYWN0aXZlIGVudHJ5Ci0JCXBEYXRhCQkJLQl0aGUgcmVjZWl2ZWQgZnJhbWUKLQkJRGF0YUJ5dGVDb3VudAktCXRoZSByZWNlaXZlZCBmcmFtZSdzIGxlbmd0aAotCQlGcm9tV2hpY2hCU1NJRAktCWluZGljYXRlIHRoZSBpbnRlcmZhY2UgaW5kZXgKLQotICAgIFJldHVybjoKLSAgICAgICAgIFRSVUUJCQktCVRoaXMgZnJhbWUgaXMgRUFQIGZyYW1lCi0gICAgICAgICBGQUxTRQkJCS0Jb3RoZXJ3aXNlCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi1CT09MRUFOIFJUTVBDaGVja1dQQWZyYW1lKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcEVudHJ5LAotCQkJICB1OCAqcERhdGEsCi0JCQkgIHVuc2lnbmVkIGxvbmcgRGF0YUJ5dGVDb3VudCwgdTggRnJvbVdoaWNoQlNTSUQpCi17Ci0JdW5zaWduZWQgbG9uZyBCb2R5X2xlbjsKLQlCT09MRUFOIENhbmNlbGxlZDsKLQotCWlmIChEYXRhQnl0ZUNvdW50IDwgKExFTkdUSF84MDJfMV9IICsgTEVOR1RIX0VBUE9MX0gpKQotCQlyZXR1cm4gRkFMU0U7Ci0KLQkvKiBTa2lwIExMQyBoZWFkZXIgKi8KLQlpZiAoTmRpc0VxdWFsTWVtb3J5KFNOQVBfODAyXzFILCBwRGF0YSwgNikgfHwKLQkgICAgLyogQ2lzY28gMTIwMCBBUCBtYXkgc2VuZCBwYWNrZXQgd2l0aCBTTkFQX0JSSURHRV9UVU5ORUwgKi8KLQkgICAgTmRpc0VxdWFsTWVtb3J5KFNOQVBfQlJJREdFX1RVTk5FTCwgcERhdGEsIDYpKSB7Ci0JCXBEYXRhICs9IDY7Ci0JfQotCS8qIFNraXAgMi1ieXRlcyBFQVBvTCB0eXBlICovCi0JaWYgKE5kaXNFcXVhbE1lbW9yeShFQVBPTCwgcERhdGEsIDIpKSB7Ci0JCXBEYXRhICs9IDI7Ci0JfSBlbHNlCi0JCXJldHVybiBGQUxTRTsKLQotCXN3aXRjaCAoKihwRGF0YSArIDEpKSB7Ci0JY2FzZSBFQVBQYWNrZXQ6Ci0JCUJvZHlfbGVuID0gKCoocERhdGEgKyAyKSA8PCA4KSB8ICgqKHBEYXRhICsgMykpOwotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIlJlY2VpdmUgRUFQLVBhY2tldCBmcmFtZSwgVFlQRSA9IDAsIExlbmd0aCA9ICVsZFxuIiwKLQkJCSAgQm9keV9sZW4pKTsKLQkJYnJlYWs7Ci0JY2FzZSBFQVBPTFN0YXJ0OgotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIlJlY2VpdmUgRUFQT0wtU3RhcnQgZnJhbWUsIFRZUEUgPSAxIFxuIikpOwotCQlpZiAocEVudHJ5LT5FbnF1ZXVlRWFwb2xTdGFydFRpbWVyUnVubmluZyAhPQotCQkgICAgRUFQT0xfU1RBUlRfRElTQUJMRSkgewotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiQ2FuY2VsIHRoZSBFbnF1ZXVlRWFwb2xTdGFydFRpbWVyUnVubmluZyBcbiIpKTsKLQkJCVJUTVBDYW5jZWxUaW1lcigmcEVudHJ5LT5FbnF1ZXVlU3RhcnRGb3JQU0tUaW1lciwKLQkJCQkJJkNhbmNlbGxlZCk7Ci0JCQlwRW50cnktPkVucXVldWVFYXBvbFN0YXJ0VGltZXJSdW5uaW5nID0KLQkJCSAgICBFQVBPTF9TVEFSVF9ESVNBQkxFOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgRUFQT0xMb2dvZmY6Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiUmVjZWl2ZSBFQVBPTExvZ29mZiBmcmFtZSwgVFlQRSA9IDIgXG4iKSk7Ci0JCWJyZWFrOwotCWNhc2UgRUFQT0xLZXk6Ci0JCUJvZHlfbGVuID0gKCoocERhdGEgKyAyKSA8PCA4KSB8ICgqKHBEYXRhICsgMykpOwotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIlJlY2VpdmUgRUFQT0wtS2V5IGZyYW1lLCBUWVBFID0gMywgTGVuZ3RoID0gJWxkXG4iLAotCQkJICBCb2R5X2xlbikpOwotCQlicmVhazsKLQljYXNlIEVBUE9MQVNGQWxlcnQ6Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiUmVjZWl2ZSBFQVBPTEFTRkFsZXJ0IGZyYW1lLCBUWVBFID0gNCBcbiIpKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIEZBTFNFOwotCi0JfQotCXJldHVybiBUUlVFOwotfQotCi0vKgotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgRGVzY3JpcHRpb246Ci0JCVJlcG9ydCB0aGUgRUFQIG1lc3NhZ2UgdHlwZQotCi0JQXJndW1lbnRzOgotCQltc2cJCS0JRUFQT0xfUEFJUl9NU0dfMQotCQkJCQlFQVBPTF9QQUlSX01TR18yCi0JCQkJCUVBUE9MX1BBSVJfTVNHXzMKLQkJCQkJRUFQT0xfUEFJUl9NU0dfNAotCQkJCQlFQVBPTF9HUk9VUF9NU0dfMQotCQkJCQlFQVBPTF9HUk9VUF9NU0dfMgotCi0gICAgUmV0dXJuOgotICAgICAgICAgbWVzc2FnZSB0eXBlIHN0cmluZwotCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi1jaGFyICpHZXRFYXBvbE1zZ1R5cGUoY2hhciBtc2cpCi17Ci0JaWYgKG1zZyA9PSBFQVBPTF9QQUlSX01TR18xKQotCQlyZXR1cm4gIlBhaXJ3aXNlIE1lc3NhZ2UgMSI7Ci0JZWxzZSBpZiAobXNnID09IEVBUE9MX1BBSVJfTVNHXzIpCi0JCXJldHVybiAiUGFpcndpc2UgTWVzc2FnZSAyIjsKLQllbHNlIGlmIChtc2cgPT0gRUFQT0xfUEFJUl9NU0dfMykKLQkJcmV0dXJuICJQYWlyd2lzZSBNZXNzYWdlIDMiOwotCWVsc2UgaWYgKG1zZyA9PSBFQVBPTF9QQUlSX01TR180KQotCQlyZXR1cm4gIlBhaXJ3aXNlIE1lc3NhZ2UgNCI7Ci0JZWxzZSBpZiAobXNnID09IEVBUE9MX0dST1VQX01TR18xKQotCQlyZXR1cm4gIkdyb3VwIE1lc3NhZ2UgMSI7Ci0JZWxzZSBpZiAobXNnID09IEVBUE9MX0dST1VQX01TR18yKQotCQlyZXR1cm4gIkdyb3VwIE1lc3NhZ2UgMiI7Ci0JZWxzZQotCQlyZXR1cm4gIkludmFsaWQgTWVzc2FnZSI7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotICAgIENoZWNrIFNhbml0eSBSU04gSUUgb2YgRUFQb0wgbWVzc2FnZQotCi0JQXJndW1lbnRzOgotCi0JUmV0dXJuIFZhbHVlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotQk9PTEVBTiBSVE1QQ2hlY2tSU05JRShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgICAgICB1OCAqcERhdGEsCi0JCSAgICAgICB1OCBEYXRhTGVuLAotCQkgICAgICAgc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcEVudHJ5LCB1OCAqIE9mZnNldCkKLXsKLQl1OCAqcFZJRTsKLQl1OCBsZW47Ci0Jc3RydWN0IHJ0X2VpZCAqIHBFaWQ7Ci0JQk9PTEVBTiByZXN1bHQgPSBGQUxTRTsKLQotCXBWSUUgPSBwRGF0YTsKLQlsZW4gPSBEYXRhTGVuOwotCSpPZmZzZXQgPSAwOwotCi0Jd2hpbGUgKGxlbiA+IHNpemVvZihzdHJ1Y3QgcnRfcnNuaWUyKSkgewotCQlwRWlkID0gKHN0cnVjdCBydF9laWQgKikgcFZJRTsKLQkJLyogV1BBIFJTTiBJRSAqLwotCQlpZiAoKHBFaWQtPkVpZCA9PSBJRV9XUEEpCi0JCSAgICAmJiAoTmRpc0VxdWFsTWVtb3J5KHBFaWQtPk9jdGV0LCBXUEFfT1VJLCA0KSkpIHsKLQkJCWlmICgocEVudHJ5LT5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEKLQkJCSAgICAgfHwgcEVudHJ5LT5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spCi0JCQkgICAgJiYKLQkJCSAgICAoTmRpc0VxdWFsTWVtb3J5Ci0JCQkgICAgIChwVklFLCBwRW50cnktPlJTTl9JRSwgcEVudHJ5LT5SU05JRV9MZW4pKQotCQkJICAgICYmIChwRW50cnktPlJTTklFX0xlbiA9PSAocEVpZC0+TGVuICsgMikpKSB7Ci0JCQkJcmVzdWx0ID0gVFJVRTsKLQkJCX0KLQotCQkJKk9mZnNldCArPSAocEVpZC0+TGVuICsgMik7Ci0JCX0KLQkJLyogV1BBMiBSU04gSUUgKi8KLQkJZWxzZSBpZiAoKHBFaWQtPkVpZCA9PSBJRV9SU04pCi0JCQkgJiYgKE5kaXNFcXVhbE1lbW9yeShwRWlkLT5PY3RldCArIDIsIFJTTl9PVUksIDMpKSkgewotCQkJaWYgKChwRW50cnktPkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIKLQkJCSAgICAgfHwgcEVudHJ5LT5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLKQotCQkJICAgICYmIChwRWlkLT5FaWQgPT0gcEVudHJ5LT5SU05fSUVbMF0pCi0JCQkgICAgJiYgKChwRWlkLT5MZW4gKyAyKSA+PSBwRW50cnktPlJTTklFX0xlbikKLQkJCSAgICAmJgotCQkJICAgIChOZGlzRXF1YWxNZW1vcnkKLQkJCSAgICAgKHBFaWQtPk9jdGV0LCAmcEVudHJ5LT5SU05fSUVbMl0sCi0JCQkgICAgICBwRW50cnktPlJTTklFX0xlbiAtIDIpKSkgewotCi0JCQkJcmVzdWx0ID0gVFJVRTsKLQkJCX0KLQotCQkJKk9mZnNldCArPSAocEVpZC0+TGVuICsgMik7Ci0JCX0gZWxzZSB7Ci0JCQlicmVhazsKLQkJfQotCi0JCXBWSUUgKz0gKHBFaWQtPkxlbiArIDIpOwotCQlsZW4gLT0gKHBFaWQtPkxlbiArIDIpOwotCX0KLQotCXJldHVybiByZXN1bHQ7Ci0KLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0gICAgUGFyc2UgS0VZREFUQSBmaWVsZC4gIEtFWURBVEFbXSBNYXkgY29udGFpbiAyIFJTTiBJRSBhbmQgb3B0aW9uYWxseSBHVEsuCi0gICAgR1RLICBpcyBlbmNhcHR1bGF0ZWQgaW4gS0RFIGZvcm1hdCBhdCAgcC44MyA4MDIuMTFpIEQxMAotCi0JQXJndW1lbnRzOgotCi0JUmV0dXJuIFZhbHVlOgotCi0JTm90ZToKLSAgICAgICAgODAyLjExaSBEMTAKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLUJPT0xFQU4gUlRNUFBhcnNlRWFwb2xLZXlEYXRhKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICAgIHU4ICpwS2V5RGF0YSwKLQkJCSAgICAgIHU4IEtleURhdGFMZW4sCi0JCQkgICAgICB1OCBHcm91cEtleUluZGV4LAotCQkJICAgICAgdTggTXNnVHlwZSwKLQkJCSAgICAgIElOIEJPT0xFQU4gYldQQTIsIHN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKnBFbnRyeSkKLXsKLQlzdHJ1Y3QgcnRfa2RlX2VuY2FwICogcEtERSA9IE5VTEw7Ci0JdTggKnBNeUtleURhdGEgPSBwS2V5RGF0YTsKLQl1OCBLZXlEYXRhTGVuZ3RoID0gS2V5RGF0YUxlbjsKLQl1OCBHVEtMRU4gPSAwOwotCXU4IERlZmF1bHRJZHggPSAwOwotCXU4IHNraXBfb2Zmc2V0OwotCi0JLyogVmVyaWZ5IFRoZSBSU04gSUUgY29udGFpbmVkIGluIHBhaXJld2lzZV9tc2dfMiAmJiBwYWlyZXdpc2VfbXNnXzMgYW5kIHNraXAgaXQgKi8KLQlpZiAoTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18yIHx8IE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMykgewotCQkvKiBDaGVjayBSU04gSUUgd2hldGhlciBpdCBpcyBXUEEyL1dQQTJQU0sgKi8KLQkJaWYgKCFSVE1QQ2hlY2tSU05JRQotCQkgICAgKHBBZCwgcEtleURhdGEsIEtleURhdGFMZW4sIHBFbnRyeSwgJnNraXBfb2Zmc2V0KSkgewotCQkJLyogc2VuZCB3aXJlbGVzcyBldmVudCAtIGZvciBSU04gSUUgZGlmZmVyZW50ICovCi0JCQlpZiAocEFkLT5Db21tb25DZmcuYldpcmVsZXNzRXZlbnQpCi0JCQkJUlRNUFNlbmRXaXJlbGVzc0V2ZW50KHBBZCwKLQkJCQkJCSAgICAgIElXX1JTTklFX0RJRkZfRVZFTlRfRkxBRywKLQkJCQkJCSAgICAgIHBFbnRyeS0+QWRkciwKLQkJCQkJCSAgICAgIHBFbnRyeS0+YXBpZHgsIDApOwotCi0JCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCQkgKCJSU05fSUUgRGlmZmVyZW50IGluIG1zZyAlZCBvZiA0LXdheSBoYW5kc2hha2UhXG4iLAotCQkJCSAgTXNnVHlwZSkpOwotCQkJaGV4X2R1bXAoIlJlY2VpdmUgUlNOX0lFICIsIHBLZXlEYXRhLCBLZXlEYXRhTGVuKTsKLQkJCWhleF9kdW1wKCJEZXNpcmVkIFJTTl9JRSAiLCBwRW50cnktPlJTTl9JRSwKLQkJCQkgcEVudHJ5LT5SU05JRV9MZW4pOwotCi0JCQlyZXR1cm4gRkFMU0U7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoYldQQTIgJiYgTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18zKSB7Ci0JCQkJV3BhU2hvd0FsbHN1aXRlKHBNeUtleURhdGEsIHNraXBfb2Zmc2V0KTsKLQotCQkJCS8qIHNraXAgUlNOIElFICovCi0JCQkJcE15S2V5RGF0YSArPSBza2lwX29mZnNldDsKLQkJCQlLZXlEYXRhTGVuZ3RoIC09IHNraXBfb2Zmc2V0OwotCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkgKCJSVE1QUGFyc2VFYXBvbEtleURhdGEgPT0+IFdQQTIvV1BBMlBTSyBSU04gSUUgbWF0Y2hlZCBpbiBNc2cgMywgTGVuZ3RoKCVkKSBcbiIsCi0JCQkJCSAgc2tpcF9vZmZzZXQpKTsKLQkJCX0gZWxzZQotCQkJCXJldHVybiBUUlVFOwotCQl9Ci0JfQotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIlJUTVBQYXJzZUVhcG9sS2V5RGF0YSA9PT4gS2V5RGF0YUxlbmd0aCAlZCB3aXRob3V0IFJTTl9JRSBcbiIsCi0JCSAgS2V5RGF0YUxlbmd0aCkpOwotCS8qaGV4X2R1bXAoInJlbWFpbiBkYXRhIiwgcE15S2V5RGF0YSwgS2V5RGF0YUxlbmd0aCk7ICovCi0KLQkvKiBQYXJzZSBFS0QgZm9ybWF0IGluIHBhaXJ3aXNlX21zZ18zX1dQQTIgJiYgZ3JvdXBfbXNnXzFfV1BBMiAqLwotCWlmIChiV1BBMgotCSAgICAmJiAoTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18zIHx8IE1zZ1R5cGUgPT0gRUFQT0xfR1JPVVBfTVNHXzEpKSB7Ci0JCWlmIChLZXlEYXRhTGVuZ3RoID49IDgpCS8qIEtERSBmb3JtYXQgZXhjbHVkZSBHVEsgbGVuZ3RoICovCi0JCXsKLQkJCXBLREUgPSAoc3RydWN0IHJ0X2tkZV9lbmNhcCAqKSBwTXlLZXlEYXRhOwotCi0JCQlEZWZhdWx0SWR4ID0gcEtERS0+R1RLRW5jYXAuS2lkOwotCi0JCQkvKiBTYW5pdHkgY2hlY2sgLSBLRUQgbGVuZ3RoICovCi0JCQlpZiAoS2V5RGF0YUxlbmd0aCA8IChwS0RFLT5MZW4gKyAyKSkgewotCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJCQkgKCJFUlJPUjogVGhlIGxlbiBmcm9tIEtERSBpcyB0b28gc2hvcnQgXG4iKSk7Ci0JCQkJcmV0dXJuIEZBTFNFOwotCQkJfQotCQkJLyogR2V0IEdUSyBsZW5ndGggLSByZWZlciB0byBJRUVFIDgwMi4xMWktMjAwNCBwLjgyICovCi0JCQlHVEtMRU4gPSBwS0RFLT5MZW4gLSA2OwotCQkJaWYgKEdUS0xFTiA8IExFTl9BRVNfS0VZKSB7Ci0JCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkJCSAoIkVSUk9SOiBHVEsgS2V5IGxlbmd0aCBpcyB0b28gc2hvcnQgKCVkKSBcbiIsCi0JCQkJCSAgR1RLTEVOKSk7Ci0JCQkJcmV0dXJuIEZBTFNFOwotCQkJfQotCi0JCX0gZWxzZSB7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCQkgKCJFUlJPUjogS0RFIGZvcm1hdCBsZW5ndGggaXMgdG9vIHNob3J0IFxuIikpOwotCQkJcmV0dXJuIEZBTFNFOwotCQl9Ci0KLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJHVEsgaW4gS0RFIGZvcm1hdCAsRGVmYXVsdEtleUlEPSVkLCBLZXlMZW49JWQgXG4iLAotCQkJICBEZWZhdWx0SWR4LCBHVEtMRU4pKTsKLQkJLyogc2tpcCBpdCAqLwotCQlwTXlLZXlEYXRhICs9IDg7Ci0JCUtleURhdGFMZW5ndGggLT0gODsKLQotCX0gZWxzZSBpZiAoIWJXUEEyICYmIE1zZ1R5cGUgPT0gRUFQT0xfR1JPVVBfTVNHXzEpIHsKLQkJRGVmYXVsdElkeCA9IEdyb3VwS2V5SW5kZXg7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiR1RLIERlZmF1bHRLZXlJRD0lZCBcbiIsIERlZmF1bHRJZHgpKTsKLQl9Ci0JLyogU2FuaXR5IGNoZWNrIC0gc2hhcmVkIGtleSBpbmRleCBtdXN0IGJlIDEgfiAzICovCi0JaWYgKERlZmF1bHRJZHggPCAxIHx8IERlZmF1bHRJZHggPiAzKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJICgiRVJST1I6IEdUSyBLZXkgaW5kZXgoJWQpIGlzIGludmFsaWQgaW4gJXMgJXMgXG4iLAotCQkJICBEZWZhdWx0SWR4LCAoKGJXUEEyKSA/ICJXUEEyIiA6ICJXUEEiKSwKLQkJCSAgR2V0RWFwb2xNc2dUeXBlKE1zZ1R5cGUpKSk7Ci0JCXJldHVybiBGQUxTRTsKLQl9Ci0KLQl7Ci0JCXN0cnVjdCBydF9jaXBoZXJfa2V5ICpwU2hhcmVkS2V5OwotCi0JCS8qIHNldCBrZXkgbWF0ZXJpYWwsIFR4TWljIGFuZCBSeE1pYyAqLwotCQlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5HVEssIHBNeUtleURhdGEsIDMyKTsKLQkJcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkID0gRGVmYXVsdElkeDsKLQotCQlwU2hhcmVkS2V5ID0gJnBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF07Ci0KLQkJLyogUHJlcGFyZSBwYWlyLXdpc2Uga2V5IGluZm9ybWF0aW9uIGludG8gc2hhcmVkIGtleSB0YWJsZSAqLwotCQlOZGlzWmVyb01lbW9yeShwU2hhcmVkS2V5LCBzaXplb2Yoc3RydWN0IHJ0X2NpcGhlcl9rZXkpKTsKLQkJcFNoYXJlZEtleS0+S2V5TGVuID0gTEVOX1RLSVBfRUs7Ci0JCU5kaXNNb3ZlTWVtb3J5KHBTaGFyZWRLZXktPktleSwgcEFkLT5TdGFDZmcuR1RLLCBMRU5fVEtJUF9FSyk7Ci0JCU5kaXNNb3ZlTWVtb3J5KHBTaGFyZWRLZXktPlJ4TWljLCAmcEFkLT5TdGFDZmcuR1RLWzE2XSwKLQkJCSAgICAgICBMRU5fVEtJUF9SWE1JQ0spOwotCQlOZGlzTW92ZU1lbW9yeShwU2hhcmVkS2V5LT5UeE1pYywgJnBBZC0+U3RhQ2ZnLkdUS1syNF0sCi0JCQkgICAgICAgTEVOX1RLSVBfVFhNSUNLKTsKLQotCQkvKiBVcGRhdGUgU2hhcmVkIEtleSBDaXBoZXJBbGcgKi8KLQkJcFNoYXJlZEtleS0+Q2lwaGVyQWxnID0gQ0lQSEVSX05PTkU7Ci0JCWlmIChwQWQtPlN0YUNmZy5Hcm91cENpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKQotCQkJcFNoYXJlZEtleS0+Q2lwaGVyQWxnID0gQ0lQSEVSX1RLSVA7Ci0JCWVsc2UgaWYgKHBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID09Ci0JCQkgTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKLQkJCXBTaGFyZWRLZXktPkNpcGhlckFsZyA9IENJUEhFUl9BRVM7Ci0JCWVsc2UgaWYgKHBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID09IE5kaXM4MDJfMTFHcm91cFdFUDQwRW5hYmxlZCkKLQkJCXBTaGFyZWRLZXktPkNpcGhlckFsZyA9IENJUEhFUl9XRVA2NDsKLQkJZWxzZSBpZiAocEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPT0KLQkJCSBOZGlzODAyXzExR3JvdXBXRVAxMDRFbmFibGVkKQotCQkJcFNoYXJlZEtleS0+Q2lwaGVyQWxnID0gQ0lQSEVSX1dFUDEyODsKLQotCQkvKiBVcGRhdGUgZ3JvdXAga2V5IGluZm9ybWF0aW9uIHRvIEFTSUMgU2hhcmVkIEtleSBUYWJsZSAqLwotCQlBc2ljQWRkU2hhcmVkS2V5RW50cnkocEFkLAotCQkJCSAgICAgIEJTUzAsCi0JCQkJICAgICAgcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkLAotCQkJCSAgICAgIHBTaGFyZWRLZXktPkNpcGhlckFsZywKLQkJCQkgICAgICBwU2hhcmVkS2V5LT5LZXksCi0JCQkJICAgICAgcFNoYXJlZEtleS0+VHhNaWMsIHBTaGFyZWRLZXktPlJ4TWljKTsKLQotCQkvKiBVcGRhdGUgQVNJQyBXQ0lEIGF0dHJpYnV0ZSB0YWJsZSBhbmQgSVZFSVYgdGFibGUgKi8KLQkJUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeShwQWQsCi0JCQkJCSAgQlNTMCwKLQkJCQkJICBwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQsCi0JCQkJCSAgcFNoYXJlZEtleS0+Q2lwaGVyQWxnLCBOVUxMKTsKLQl9Ci0KLQlyZXR1cm4gVFJVRTsKLQotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQkJQ29uc3RydWN0IEVBUG9MIG1lc3NhZ2UgZm9yIFdQQSBoYW5kc2hha2luZwotCQlJdHMgZm9ybWF0IGlzIGJlbG93LAotCi0JCSstLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQkJfCBQcm90b2NvbCBWZXJzaW9uCSB8ICAxIG9jdGV0Ci0JCSstLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQkJfCBQcm90b2NvbCBUeXBlCQkgfAkxIG9jdGV0Ci0JCSstLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQkJfCBCb2R5IExlbmd0aAkJIHwgIDIgb2N0ZXRzCi0JCSstLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQkJfCBEZXNjcmlwdG9yIFR5cGUJIHwJMSBvY3RldAotCQkrLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0JCXwgS2V5IEluZm9ybWF0aW9uICAgIHwJMiBvY3RldHMKLQkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCQl8IEtleSBMZW5ndGgJICAgICB8ICAxIG9jdGV0Ci0JCSstLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQkJfCBLZXkgUmVwYWx5IENvdW50ZXIgfAk4IG9jdGV0cwotCQkrLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0JCXwgS2V5IE5vbmNlCQkgICAgIHwgIDMyIG9jdGV0cwotCQkrLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0JCXwgS2V5IElWCQkJIHwgIDE2IG9jdGV0cwotCQkrLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0JCXwgS2V5IFJTQwkJCSB8ICA4IG9jdGV0cwotCQkrLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0JCXwgS2V5IElEIG9yIFJlc2VydmVkIHwJOCBvY3RldHMKLQkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCQl8IEtleSBNSUMJCQkgfAkxNiBvY3RldHMKLQkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCQl8IEtleSBEYXRhIExlbmd0aAkgfAkyIG9jdGV0cwotCQkrLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0JCXwgS2V5IERhdGEJCQkgfAluIG9jdGV0cwotCQkrLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0KLQlBcmd1bWVudHM6Ci0JCXBBZAkJCVBvaW50ZXIJdG8gb3VyIGFkYXB0ZXIKLQotCVJldHVybiBWYWx1ZToKLQkJTm9uZQotCi0JTm90ZToKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgQ29uc3RydWN0RWFwb2xNc2coc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcEVudHJ5LAotCQkgICAgICAgdTggR3JvdXBLZXlXZXBTdGF0dXMsCi0JCSAgICAgICB1OCBNc2dUeXBlLAotCQkgICAgICAgdTggRGVmYXVsdEtleUlkeCwKLQkJICAgICAgIHU4ICogS2V5Tm9uY2UsCi0JCSAgICAgICB1OCAqIFR4UlNDLAotCQkgICAgICAgdTggKiBHVEssCi0JCSAgICAgICB1OCAqIFJTTklFLAotCQkgICAgICAgdTggUlNOSUVfTGVuLCBzdHJ1Y3QgcnRfZWFwb2xfcGFja2V0ICogcE1zZykKLXsKLQlCT09MRUFOIGJXUEEyID0gRkFMU0U7Ci0JdTggS2V5RGVzY1ZlcjsKLQotCS8qIENob29zZSBXUEEyIG9yIG5vdCAqLwotCWlmICgocEVudHJ5LT5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyKSB8fAotCSAgICAocEVudHJ5LT5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLKSkKLQkJYldQQTIgPSBUUlVFOwotCi0JLyogSW5pdCBQYWNrZXQgYW5kIEZpbGwgaGVhZGVyICovCi0JcE1zZy0+UHJvVmVyID0gRUFQT0xfVkVSOwotCXBNc2ctPlByb1R5cGUgPSBFQVBPTEtleTsKLQotCS8qIERlZmF1bHQgOTUgYnl0ZXMsIHRoZSBFQVBvTC1LZXkgZGVzY3JpcHRvciBleGNsdWRlIEtleS1kYXRhIGZpZWxkICovCi0JU0VUX3UxNl9UT19BUlJBUlkocE1zZy0+Qm9keV9MZW4sIExFTl9FQVBPTF9LRVlfTVNHKTsKLQotCS8qIEZpbGwgaW4gRUFQb0wgZGVzY3JpcHRvciAqLwotCWlmIChiV1BBMikKLQkJcE1zZy0+S2V5RGVzYy5UeXBlID0gV1BBMl9LRVlfREVTQzsKLQllbHNlCi0JCXBNc2ctPktleURlc2MuVHlwZSA9IFdQQTFfS0VZX0RFU0M7Ci0KLQkvKiBLZXkgRGVzY3JpcHRvciBWZXJzaW9uIChiaXRzIDAtMikgc3BlY2lmaWVzIHRoZSBrZXkgZGVzY3JpcHRvciB2ZXJzaW9uIHR5cGUgKi8KLQl7Ci0JCS8qIEZpbGwgaW4gS2V5IGluZm9ybWF0aW9uLCByZWZlciB0byBJRUVFIFN0ZCA4MDIuMTFpLTIwMDQgcGFnZSA3OCAqLwotCQkvKiBXaGVuIGVpdGhlciB0aGUgcGFpcndpc2Ugb3IgdGhlIGdyb3VwIGNpcGhlciBpcyBBRVMsIHRoZSBERVNDX1RZUEVfQUVTKDIpIHNoYWxsIGJlIHVzZWQuICovCi0JCUtleURlc2NWZXIgPQotCQkgICAgKCgocEVudHJ5LT5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKLQkJICAgICAgfHwgKEdyb3VwS2V5V2VwU3RhdHVzID09Ci0JCQkgIE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpKSA/IChERVNDX1RZUEVfQUVTKQotCQkgICAgIDogKERFU0NfVFlQRV9US0lQKSk7Ci0JfQotCi0JcE1zZy0+S2V5RGVzYy5LZXlJbmZvLktleURlc2NWZXIgPSBLZXlEZXNjVmVyOwotCi0JLyogU3BlY2lmeSBLZXkgVHlwZSBhcyBHcm91cCgwKSBvciBQYWlyd2lzZSgxKSAqLwotCWlmIChNc2dUeXBlID49IEVBUE9MX0dST1VQX01TR18xKQotCQlwTXNnLT5LZXlEZXNjLktleUluZm8uS2V5VHlwZSA9IEdST1VQS0VZOwotCWVsc2UKLQkJcE1zZy0+S2V5RGVzYy5LZXlJbmZvLktleVR5cGUgPSBQQUlSV0lTRUtFWTsKLQotCS8qIFNwZWNpZnkgS2V5IEluZGV4LCBvbmx5IGdyb3VwX21zZzFfV1BBMSAqLwotCWlmICghYldQQTIgJiYgKE1zZ1R5cGUgPj0gRUFQT0xfR1JPVVBfTVNHXzEpKQotCQlwTXNnLT5LZXlEZXNjLktleUluZm8uS2V5SW5kZXggPSBEZWZhdWx0S2V5SWR4OwotCi0JaWYgKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMykKLQkJcE1zZy0+S2V5RGVzYy5LZXlJbmZvLkluc3RhbGwgPSAxOwotCi0JaWYgKChNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzEpIHx8IChNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzMpCi0JICAgIHx8IChNc2dUeXBlID09IEVBUE9MX0dST1VQX01TR18xKSkKLQkJcE1zZy0+S2V5RGVzYy5LZXlJbmZvLktleUFjayA9IDE7Ci0KLQlpZiAoTXNnVHlwZSAhPSBFQVBPTF9QQUlSX01TR18xKQotCQlwTXNnLT5LZXlEZXNjLktleUluZm8uS2V5TWljID0gMTsKLQotCWlmICgoYldQQTIgJiYgKE1zZ1R5cGUgPj0gRUFQT0xfUEFJUl9NU0dfMykpIHx8Ci0JICAgICghYldQQTIgJiYgKE1zZ1R5cGUgPj0gRUFQT0xfR1JPVVBfTVNHXzEpKSkgewotCQlwTXNnLT5LZXlEZXNjLktleUluZm8uU2VjdXJlID0gMTsKLQl9Ci0KLQlpZiAoYldQQTIgJiYgKChNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzMpIHx8Ci0JCSAgICAgIChNc2dUeXBlID09IEVBUE9MX0dST1VQX01TR18xKSkpIHsKLQkJcE1zZy0+S2V5RGVzYy5LZXlJbmZvLkVLRF9ETCA9IDE7Ci0JfQotCS8qIGtleSBJbmZvcm1hdGlvbiBlbGVtZW50IGhhcyBkb25lLiAqLwotCSoodTE2ICopICgmcE1zZy0+S2V5RGVzYy5LZXlJbmZvKSA9Ci0JICAgIGNwdTJsZTE2KCoodTE2ICopICgmcE1zZy0+S2V5RGVzYy5LZXlJbmZvKSk7Ci0KLQkvKiBGaWxsIGluIEtleSBMZW5ndGggKi8KLQl7Ci0JCWlmIChNc2dUeXBlID49IEVBUE9MX0dST1VQX01TR18xKSB7Ci0JCQkvKiB0aGUgbGVuZ3RoIG9mIGdyb3VwIGtleSBjaXBoZXIgKi8KLQkJCXBNc2ctPktleURlc2MuS2V5TGVuZ3RoWzFdID0KLQkJCSAgICAoKEdyb3VwS2V5V2VwU3RhdHVzID09Ci0JCQkgICAgICBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKSA/IFRLSVBfR1RLX0xFTkdUSCA6Ci0JCQkgICAgIExFTl9BRVNfS0VZKTsKLQkJfSBlbHNlIHsKLQkJCS8qIHRoZSBsZW5ndGggb2YgcGFpcndpc2Uga2V5IGNpcGhlciAqLwotCQkJcE1zZy0+S2V5RGVzYy5LZXlMZW5ndGhbMV0gPQotCQkJICAgICgocEVudHJ5LT5XZXBTdGF0dXMgPT0KLQkJCSAgICAgIE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpID8gTEVOX1RLSVBfS0VZIDoKLQkJCSAgICAgTEVOX0FFU19LRVkpOwotCQl9Ci0JfQotCi0JLyogRmlsbCBpbiByZXBsYXkgY291bnRlciAqLwotCU5kaXNNb3ZlTWVtb3J5KHBNc2ctPktleURlc2MuUmVwbGF5Q291bnRlciwgcEVudHJ5LT5SX0NvdW50ZXIsCi0JCSAgICAgICBMRU5fS0VZX0RFU0NfUkVQTEFZKTsKLQotCS8qIEZpbGwgS2V5IE5vbmNlIGZpZWxkICovCi0JLyogQU5vbmNlIDogcGFpcndpc2VfbXNnMSAmIHBhaXJ3aXNlX21zZzMgKi8KLQkvKiBTTm9uY2UgOiBwYWlyd2lzZV9tc2cyICovCi0JLyogR05vbmNlIDogZ3JvdXBfbXNnMV93cGExICovCi0JaWYgKChNc2dUeXBlIDw9IEVBUE9MX1BBSVJfTVNHXzMpCi0JICAgIHx8ICgoIWJXUEEyICYmIChNc2dUeXBlID09IEVBUE9MX0dST1VQX01TR18xKSkpKQotCQlOZGlzTW92ZU1lbW9yeShwTXNnLT5LZXlEZXNjLktleU5vbmNlLCBLZXlOb25jZSwKLQkJCSAgICAgICBMRU5fS0VZX0RFU0NfTk9OQ0UpOwotCi0JLyogRmlsbCBrZXkgSVYgLSBXUEEyIGFzIDAsIFdQQTEgYXMgcmFuZG9tICovCi0JaWYgKCFiV1BBMiAmJiAoTXNnVHlwZSA9PSBFQVBPTF9HUk9VUF9NU0dfMSkpIHsKLQkJLyogU3VnZ2VzdCBJViBiZSByYW5kb20gbnVtYmVyIHBsdXMgc29tZSBudW1iZXIsICovCi0JCU5kaXNNb3ZlTWVtb3J5KHBNc2ctPktleURlc2MuS2V5SXYsICZLZXlOb25jZVsxNl0sCi0JCQkgICAgICAgTEVOX0tFWV9ERVNDX0lWKTsKLQkJcE1zZy0+S2V5RGVzYy5LZXlJdlsxNV0gKz0gMjsKLQl9Ci0JLyogRmlsbCBLZXkgUlNDIGZpZWxkICovCi0JLyogSXQgY29udGFpbnMgdGhlIFJTQyBmb3IgdGhlIEdUSyBiZWluZyBpbnN0YWxsZWQuICovCi0JaWYgKChNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzMgJiYgYldQQTIpCi0JICAgIHx8IChNc2dUeXBlID09IEVBUE9MX0dST1VQX01TR18xKSkgewotCQlOZGlzTW92ZU1lbW9yeShwTXNnLT5LZXlEZXNjLktleVJzYywgVHhSU0MsIDYpOwotCX0KLQkvKiBDbGVhciBLZXkgTUlDIGZpZWxkIGZvciBNSUMgY2FsY3VsYXRpb24gbGF0ZXIgKi8KLQlOZGlzWmVyb01lbW9yeShwTXNnLT5LZXlEZXNjLktleU1pYywgTEVOX0tFWV9ERVNDX01JQyk7Ci0KLQlDb25zdHJ1Y3RFYXBvbEtleURhdGEocEVudHJ5LAotCQkJICAgICAgR3JvdXBLZXlXZXBTdGF0dXMsCi0JCQkgICAgICBLZXlEZXNjVmVyLAotCQkJICAgICAgTXNnVHlwZSwKLQkJCSAgICAgIERlZmF1bHRLZXlJZHgsIEdUSywgUlNOSUUsIFJTTklFX0xlbiwgcE1zZyk7Ci0KLQkvKiBDYWxjdWxhdGUgTUlDIGFuZCBmaWxsIGluIEtleU1pYyBGaWVsZCBleGNlcHQgUGFpcndpc2UgTXNnIDEuICovCi0JaWYgKE1zZ1R5cGUgIT0gRUFQT0xfUEFJUl9NU0dfMSkgewotCQlDYWxjdWxhdGVNSUMoS2V5RGVzY1ZlciwgcEVudHJ5LT5QVEssIHBNc2cpOwotCX0KLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCI9PT0+IENvbnN0cnVjdEVhcG9sTXNnIGZvciAlcyAlc1xuIiwKLQkJICAoKGJXUEEyKSA/ICJXUEEyIiA6ICJXUEEiKSwgR2V0RWFwb2xNc2dUeXBlKE1zZ1R5cGUpKSk7Ci0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIgkgICAgIEJvZHkgbGVuZ3RoID0gJWQgXG4iLAotCQkgIENPTlZfQVJSQVJZX1RPX3UxNihwTXNnLT5Cb2R5X0xlbikpKTsKLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJICgiCSAgICAgS2V5IGxlbmd0aCAgPSAlZCBcbiIsCi0JCSAgQ09OVl9BUlJBUllfVE9fdTE2KHBNc2ctPktleURlc2MuS2V5TGVuZ3RoKSkpOwotCi19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCQlDb25zdHJ1Y3QgdGhlIEtleSBEYXRhIGZpZWxkIG9mIEVBUG9MIG1lc3NhZ2UKLQotCUFyZ3VtZW50czoKLQkJcEFkCQkJUG9pbnRlcgl0byBvdXIgYWRhcHRlcgotCQlFbGVtCQlNZXNzYWdlIGJvZHkKLQotCVJldHVybiBWYWx1ZToKLQkJTm9uZQotCi0JTm90ZToKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgQ29uc3RydWN0RWFwb2xLZXlEYXRhKHN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKnBFbnRyeSwKLQkJCSAgIHU4IEdyb3VwS2V5V2VwU3RhdHVzLAotCQkJICAgdTgga2V5RGVzY1ZlciwKLQkJCSAgIHU4IE1zZ1R5cGUsCi0JCQkgICB1OCBEZWZhdWx0S2V5SWR4LAotCQkJICAgdTggKiBHVEssCi0JCQkgICB1OCAqIFJTTklFLAotCQkJICAgdTggUlNOSUVfTEVOLCBzdHJ1Y3QgcnRfZWFwb2xfcGFja2V0ICogcE1zZykKLXsKLQl1OCAqbXBvb2wsICpLZXlfRGF0YSwgKlJjNEdUSzsKLQl1OCBla2V5WyhMRU5fS0VZX0RFU0NfSVYgKyBMRU5fRUFQX0VLKV07Ci0JdW5zaWduZWQgbG9uZyBkYXRhX29mZnNldDsKLQlCT09MRUFOIGJXUEEyQ2FwYWJsZSA9IEZBTFNFOwotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCA9IHBFbnRyeS0+cEFkOwotCUJPT0xFQU4gR1RLX0luY2x1ZGVkID0gRkFMU0U7Ci0KLQkvKiBDaG9vc2UgV1BBMiBvciBub3QgKi8KLQlpZiAoKHBFbnRyeS0+QXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMikgfHwKLQkgICAgKHBFbnRyeS0+QXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykpCi0JCWJXUEEyQ2FwYWJsZSA9IFRSVUU7Ci0KLQlpZiAoTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18xIHx8Ci0JICAgIE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfNCB8fCBNc2dUeXBlID09IEVBUE9MX0dST1VQX01TR18yKQotCQlyZXR1cm47Ci0KLQkvKiBhbGxvY2F0ZSBtZW1vcnkgcG9vbCAqLwotCW9zX2FsbG9jX21lbShOVUxMLCAodTggKiopICYgbXBvb2wsIDE1MDApOwotCi0JaWYgKG1wb29sID09IE5VTEwpCi0JCXJldHVybjsKLQotCS8qIFJjNEdUSyBMZW4gPSA1MTIgKi8KLQlSYzRHVEsgPSAodTggKikgUk9VTkRfVVAobXBvb2wsIDQpOwotCS8qIEtleV9EYXRhIExlbiA9IDUxMiAqLwotCUtleV9EYXRhID0gKHU4ICopIFJPVU5EX1VQKFJjNEdUSyArIDUxMiwgNCk7Ci0KLQlOZGlzWmVyb01lbW9yeShLZXlfRGF0YSwgNTEyKTsKLQlTRVRfdTE2X1RPX0FSUkFSWShwTXNnLT5LZXlEZXNjLktleURhdGFMZW4sIDApOwotCWRhdGFfb2Zmc2V0ID0gMDsKLQotCS8qIEVuY2Fwc3VsYXRlIFJTTklFIGluIHBhaXJ3aXNlX21zZzIgJiBwYWlyd2lzZV9tc2czICovCi0JaWYgKFJTTklFX0xFTgotCSAgICAmJiAoKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMikKLQkJfHwgKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMykpKSB7Ci0JCXU4ICpwbWtpZF9wdHIgPSBOVUxMOwotCQl1OCBwbWtpZF9sZW4gPSAwOwotCi0JCVJUTVBJbnNlcnRSU05JRSgmS2V5X0RhdGFbZGF0YV9vZmZzZXRdLAotCQkJCSZkYXRhX29mZnNldCwKLQkJCQlSU05JRSwgUlNOSUVfTEVOLCBwbWtpZF9wdHIsIHBta2lkX2xlbik7Ci0JfQotCi0JLyogRW5jYXBzdWxhdGUgS0RFIGZvcm1hdCBpbiBwYWlyd2lzZV9tc2czX1dQQTIgJiBncm91cF9tc2cxX1dQQTIgKi8KLQlpZiAoYldQQTJDYXBhYmxlCi0JICAgICYmICgoTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18zKQotCQl8fCAoTXNnVHlwZSA9PSBFQVBPTF9HUk9VUF9NU0dfMSkpKSB7Ci0JCS8qIEtleSBEYXRhIEVuY2Fwc3VsYXRpb24gKEtERSkgZm9ybWF0IC0gODAyLjExaS0yMDA0ICBGaWd1cmUtNDN3IGFuZCBUYWJsZS0yMGggKi8KLQkJS2V5X0RhdGFbZGF0YV9vZmZzZXQgKyAwXSA9IDB4REQ7Ci0KLQkJaWYgKEdyb3VwS2V5V2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpIHsKLQkJCUtleV9EYXRhW2RhdGFfb2Zmc2V0ICsgMV0gPSAweDE2OwkvKiA0KzIrMTYoT1VJK0RhdGFUeXBlK0RhdGFGaWVsZCkgKi8KLQkJfSBlbHNlIHsKLQkJCUtleV9EYXRhW2RhdGFfb2Zmc2V0ICsgMV0gPSAweDI2OwkvKiA0KzIrMzIoT1VJK0RhdGFUeXBlK0RhdGFGaWVsZCkgKi8KLQkJfQotCi0JCUtleV9EYXRhW2RhdGFfb2Zmc2V0ICsgMl0gPSAweDAwOwotCQlLZXlfRGF0YVtkYXRhX29mZnNldCArIDNdID0gMHgwRjsKLQkJS2V5X0RhdGFbZGF0YV9vZmZzZXQgKyA0XSA9IDB4QUM7Ci0JCUtleV9EYXRhW2RhdGFfb2Zmc2V0ICsgNV0gPSAweDAxOwotCi0JCS8qIEdUSyBLREUgZm9ybWF0IC0gODAyLjExaS0yMDA0ICBGaWd1cmUtNDN4ICovCi0JCUtleV9EYXRhW2RhdGFfb2Zmc2V0ICsgNl0gPSAoRGVmYXVsdEtleUlkeCAmIDB4MDMpOwotCQlLZXlfRGF0YVtkYXRhX29mZnNldCArIDddID0gMHgwMDsJLyogUmVzZXJ2ZWQgQnl0ZSAqLwotCi0JCWRhdGFfb2Zmc2V0ICs9IDg7Ci0JfQotCi0JLyogRW5jYXBzdWxhdGUgR1RLICovCi0JLyogT25seSBmb3IgcGFpcndpc2VfbXNnM19XUEEyIGFuZCBncm91cF9tc2cxICovCi0JaWYgKChNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzMgJiYgYldQQTJDYXBhYmxlKQotCSAgICB8fCAoTXNnVHlwZSA9PSBFQVBPTF9HUk9VUF9NU0dfMSkpIHsKLQkJLyogRmlsbCBpbiBHVEsgKi8KLQkJaWYgKEdyb3VwS2V5V2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpIHsKLQkJCU5kaXNNb3ZlTWVtb3J5KCZLZXlfRGF0YVtkYXRhX29mZnNldF0sIEdUSywKLQkJCQkgICAgICAgTEVOX0FFU19LRVkpOwotCQkJZGF0YV9vZmZzZXQgKz0gTEVOX0FFU19LRVk7Ci0JCX0gZWxzZSB7Ci0JCQlOZGlzTW92ZU1lbW9yeSgmS2V5X0RhdGFbZGF0YV9vZmZzZXRdLCBHVEssCi0JCQkJICAgICAgIFRLSVBfR1RLX0xFTkdUSCk7Ci0JCQlkYXRhX29mZnNldCArPSBUS0lQX0dUS19MRU5HVEg7Ci0JCX0KLQotCQlHVEtfSW5jbHVkZWQgPSBUUlVFOwotCX0KLQotCS8qIFRoaXMgd2hvbGUga2V5LWRhdGEgZmllbGQgc2hhbGwgYmUgZW5jcnlwdGVkIGlmIGEgR1RLIGlzIGluY2x1ZGVkLiAqLwotCS8qIEVuY3J5cHQgdGhlIGRhdGEgbWF0ZXJpYWwgaW4ga2V5IGRhdGEgZmllbGQgd2l0aCBLRUsgKi8KLQlpZiAoR1RLX0luY2x1ZGVkKSB7Ci0JCS8qaGV4X2R1bXAoIkdUS19JbmNsdWRlZCIsIEtleV9EYXRhLCBkYXRhX29mZnNldCk7ICovCi0KLQkJaWYgKChrZXlEZXNjVmVyID09IERFU0NfVFlQRV9BRVMpKSB7Ci0JCQl1OCByZW1haW5kZXIgPSAwOwotCQkJdTggcGFkX2xlbiA9IDA7Ci0KLQkJCS8qIEtleSBEZXNjcmlwdG9yIFZlcnNpb24gMiBvciAzOiBBRVMga2V5IHdyYXAsIGRlZmluZWQgaW4gSUVURiBSRkMgMzM5NCwgKi8KLQkJCS8qIHNoYWxsIGJlIHVzZWQgdG8gZW5jcnlwdCB0aGUgS2V5IERhdGEgZmllbGQgdXNpbmcgdGhlIEtFSyBmaWVsZCBmcm9tICovCi0JCQkvKiB0aGUgZGVyaXZlZCBQVEsuICovCi0KLQkJCS8qIElmIHRoZSBLZXkgRGF0YSBmaWVsZCB1c2VzIHRoZSBOSVNUIEFFUyBrZXkgd3JhcCwgdGhlbiB0aGUgS2V5IERhdGEgZmllbGQgKi8KLQkJCS8qIHNoYWxsIGJlIHBhZGRlZCBiZWZvcmUgZW5jcnlwdGluZyBpZiB0aGUga2V5IGRhdGEgbGVuZ3RoIGlzIGxlc3MgdGhhbiAxNiAqLwotCQkJLyogb2N0ZXRzIG9yIGlmIGl0IGlzIG5vdCBhIG11bHRpcGxlIG9mIDguIFRoZSBwYWRkaW5nIGNvbnNpc3RzIG9mIGFwcGVuZGluZyAqLwotCQkJLyogYSBzaW5nbGUgb2N0ZXQgMHhkZCBmb2xsb3dlZCBieSB6ZXJvIG9yIG1vcmUgMHgwMCBvY3RldHMuICovCi0JCQlpZiAoKHJlbWFpbmRlciA9IGRhdGFfb2Zmc2V0ICYgMHgwNykgIT0gMCkgewotCQkJCWludCBpOwotCi0JCQkJcGFkX2xlbiA9ICg4IC0gcmVtYWluZGVyKTsKLQkJCQlLZXlfRGF0YVtkYXRhX29mZnNldF0gPSAweEREOwotCQkJCWZvciAoaSA9IDE7IGkgPCBwYWRfbGVuOyBpKyspCi0JCQkJCUtleV9EYXRhW2RhdGFfb2Zmc2V0ICsgaV0gPSAwOwotCi0JCQkJZGF0YV9vZmZzZXQgKz0gcGFkX2xlbjsKLQkJCX0KLQotCQkJQUVTX0dUS19LRVlfV1JBUCgmcEVudHJ5LT5QVEtbMTZdLCBLZXlfRGF0YSwKLQkJCQkJIGRhdGFfb2Zmc2V0LCBSYzRHVEspOwotCQkJLyogQUVTIHdyYXAgZnVuY3Rpb24gd2lsbCBncm93IDggYnl0ZXMgaW4gbGVuZ3RoICovCi0JCQlkYXRhX29mZnNldCArPSA4OwotCQl9IGVsc2UgewotCQkJLyogICAgICBLZXkgRGVzY3JpcHRvciBWZXJzaW9uIDE6IEFSQzQgaXMgdXNlZCB0byBlbmNyeXB0IHRoZSBLZXkgRGF0YSBmaWVsZAotCQkJICAgdXNpbmcgdGhlIEtFSyBmaWVsZCBmcm9tIHRoZSBkZXJpdmVkIFBUSy4gKi8KLQotCQkJLyogUFJFUEFSRSBFbmNyeXB0ZWQgICJLZXkgREFUQSIgZmllbGQuICAoRW5jcnlwdCBHVEsgd2l0aCBSQzQsIHVzaW5mIFBUS1sxNl0tPlszMV0gYXMgS2V5LCBJVi1maWVsZCBhcyBJVikgKi8KLQkJCS8qIHB1dCBUeFRzYyBpbiBLZXkgUlNDIGZpZWxkICovCi0JCQlwQWQtPlByaXZhdGVJbmZvLkZDU0NSQzMyID0gUFBQSU5JVEZDUzMyOwkvKkluaXQgY3JjMzIuICovCi0KLQkJCS8qIGVrZXkgaXMgdGhlIGNvbnRhbmV0aW9uIG9mIElWLWZpZWxkLCBhbmQgUFRLWzE2XS0+UFRLWzMxXSAqLwotCQkJTmRpc01vdmVNZW1vcnkoZWtleSwgcE1zZy0+S2V5RGVzYy5LZXlJdiwKLQkJCQkgICAgICAgTEVOX0tFWV9ERVNDX0lWKTsKLQkJCU5kaXNNb3ZlTWVtb3J5KCZla2V5W0xFTl9LRVlfREVTQ19JVl0sICZwRW50cnktPlBUS1sxNl0sCi0JCQkJICAgICAgIExFTl9FQVBfRUspOwotCQkJQVJDRk9VUl9JTklUKCZwQWQtPlByaXZhdGVJbmZvLldFUENPTlRFWFQsIGVrZXksIHNpemVvZihla2V5KSk7CS8qSU5JVCBTQk9YLCBLRVlMRU4rMyhJVikgKi8KLQkJCXBBZC0+UHJpdmF0ZUluZm8uRkNTQ1JDMzIgPQotCQkJICAgIFJUTVBfQ0FMQ19GQ1MzMihwQWQtPlByaXZhdGVJbmZvLkZDU0NSQzMyLCBLZXlfRGF0YSwKLQkJCQkJICAgIGRhdGFfb2Zmc2V0KTsKLQkJCVdQQUFSQ0ZPVVJfRU5DUllQVCgmcEFkLT5Qcml2YXRlSW5mby5XRVBDT05URVhULCBSYzRHVEssCi0JCQkJCSAgIEtleV9EYXRhLCBkYXRhX29mZnNldCk7Ci0JCX0KLQotCQlOZGlzTW92ZU1lbW9yeShwTXNnLT5LZXlEZXNjLktleURhdGEsIFJjNEdUSywgZGF0YV9vZmZzZXQpOwotCX0gZWxzZSB7Ci0JCU5kaXNNb3ZlTWVtb3J5KHBNc2ctPktleURlc2MuS2V5RGF0YSwgS2V5X0RhdGEsIGRhdGFfb2Zmc2V0KTsKLQl9Ci0KLQkvKiBVcGRhdGUga2V5IGRhdGEgbGVuZ3RoIGZpZWxkIGFuZCB0b3RhbCBib2R5IGxlbmd0aCAqLwotCVNFVF91MTZfVE9fQVJSQVJZKHBNc2ctPktleURlc2MuS2V5RGF0YUxlbiwgZGF0YV9vZmZzZXQpOwotCUlOQ191MTZfVE9fQVJSQVJZKHBNc2ctPkJvZHlfTGVuLCBkYXRhX29mZnNldCk7Ci0KLQlvc19mcmVlX21lbShOVUxMLCBtcG9vbCk7Ci0KLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JCUNhbGNhdWxhdGUgTUlDLiBJdCBpcyB1c2VkIGR1cmluZyA0LXdheXMgaGFuZHNoYXJraW5nLgotCi0JQXJndW1lbnRzOgotCQlwQWQJCQktCXBvaW50ZXIgdG8gb3VyIHBBZGFwdGVyIGNvbnRleHQKLQlQZWVyV2VwU3RhdHVzCS0JaW5kaWNhdGUgdGhlIGVuY3J5cHRpb24gdHlwZQotCi0JUmV0dXJuIFZhbHVlOgotCi0JTm90ZToKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXN0YXRpYyB2b2lkIENhbGN1bGF0ZU1JQyh1OCBLZXlEZXNjVmVyLAotCQkJIHU4ICogUFRLLCBzdHJ1Y3QgcnRfZWFwb2xfcGFja2V0ICogcE1zZykKLXsKLQl1OCAqT3V0QnVmZmVyOwotCXVuc2lnbmVkIGxvbmcgRnJhbWVMZW4gPSAwOwotCXU4IG1pY1tMRU5fS0VZX0RFU0NfTUlDXTsKLQl1OCBkaWdlc3RbODBdOwotCi0JLyogYWxsb2NhdGUgbWVtb3J5IGZvciBNSUMgY2FsY3VsYXRpb24gKi8KLQlvc19hbGxvY19tZW0oTlVMTCwgKHU4ICoqKSAmIE91dEJ1ZmZlciwgNTEyKTsKLQotCWlmIChPdXRCdWZmZXIgPT0gTlVMTCkgewotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJDYWxjdWxhdGVNSUM6IG5vIG1lbW9yeSFcbiIpKTsKLQkJcmV0dXJuOwotCX0KLQkvKiBtYWtlIGEgZnJhbWUgZm9yIGNhbGN1bGF0aW5nIE1JQy4gKi8KLQlNYWtlT3V0Z29pbmdGcmFtZShPdXRCdWZmZXIsICZGcmFtZUxlbiwKLQkJCSAgQ09OVl9BUlJBUllfVE9fdTE2KHBNc2ctPkJvZHlfTGVuKSArIDQsIHBNc2csCi0JCQkgIEVORF9PRl9BUkdTKTsKLQotCU5kaXNaZXJvTWVtb3J5KG1pYywgc2l6ZW9mKG1pYykpOwotCi0JLyogQ2FsY3VsYXRlIE1JQyAqLwotCWlmIChLZXlEZXNjVmVyID09IERFU0NfVFlQRV9BRVMpIHsKLQkJSE1BQ19TSEExKFBUSywgTEVOX0VBUF9NSUNLLCBPdXRCdWZmZXIsIEZyYW1lTGVuLCBkaWdlc3QsCi0JCQkgIFNIQTFfRElHRVNUX1NJWkUpOwotCQlOZGlzTW92ZU1lbW9yeShtaWMsIGRpZ2VzdCwgTEVOX0tFWV9ERVNDX01JQyk7Ci0JfSBlbHNlIHsKLQkJSE1BQ19NRDUoUFRLLCBMRU5fRUFQX01JQ0ssIE91dEJ1ZmZlciwgRnJhbWVMZW4sIG1pYywKLQkJCSBNRDVfRElHRVNUX1NJWkUpOwotCX0KLQotCS8qIHN0b3JlIHRoZSBjYWxjdWxhdGVkIE1JQyAqLwotCU5kaXNNb3ZlTWVtb3J5KHBNc2ctPktleURlc2MuS2V5TWljLCBtaWMsIExFTl9LRVlfREVTQ19NSUMpOwotCi0Jb3NfZnJlZV9tZW0oTlVMTCwgT3V0QnVmZmVyKTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JCVNvbWUgcmVjZWl2ZWQgZnJhbWVzIGNhbid0IGRlY3J5cHQgYnkgQXNpYywgc28gZGVjcnlwdCB0aGVtIGJ5IHNvZnR3YXJlLgotCi0JQXJndW1lbnRzOgotCQlwQWQJCQktCXBvaW50ZXIgdG8gb3VyIHBBZGFwdGVyIGNvbnRleHQKLQlQZWVyV2VwU3RhdHVzCS0JaW5kaWNhdGUgdGhlIGVuY3J5cHRpb24gdHlwZQotCi0JUmV0dXJuIFZhbHVlOgotCQlORElTX1NUQVRVU19TVUNDRVNTCQktCWRlY3J5cHRpb24gc3VjY2Vzc2Z1bAotCQlORElTX1NUQVRVU19GQUlMVVJFCQktCWRlY3J5cHRpb24gZmFpbHVyZQotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotaW50IFJUTVBTb2Z0RGVjcnlwdEJyb2FkQ2FzdERhdGEoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCQkgc3RydWN0IHJ0X3J4X2JsayAqcFJ4QmxrLAotCQkJCQkgSU4gTkRJU184MDJfMTFfRU5DUllQVElPTl9TVEFUVVMKLQkJCQkJIEdyb3VwQ2lwaGVyLCBzdHJ1Y3QgcnRfY2lwaGVyX2tleSAqcFNoYXJkX2tleSkKLXsKLQlzdHJ1Y3QgcnRfcnh3aSAqIHBSeFdJID0gcFJ4QmxrLT5wUnhXSTsKLQotCS8qIGhhbmRsZSBXRVAgZGVjcnlwdGlvbiAqLwotCWlmIChHcm91cENpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkKSB7Ci0JCWlmIChSVE1QU29mdERlY3J5cHRXRVAKLQkJICAgIChwQWQsIHBSeEJsay0+cERhdGEsIHBSeFdJLT5NUERVdG90YWxCeXRlQ291bnQsCi0JCSAgICAgcFNoYXJkX2tleSkpIHsKLQotCQkJLypNaW51cyBJVls0XSAmIElDVls0XSAqLwotCQkJcFJ4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudCAtPSA4OwotCQl9IGVsc2UgewotCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkJICgiRVJST1IgOiBTb2Z0d2FyZSBkZWNyeXB0IFdFUCBkYXRhIGZhaWxzLlxuIikpOwotCQkJLyogZ2l2ZSB1cCB0aGlzIGZyYW1lICovCi0JCQlyZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKLQkJfQotCX0KLQkvKiBoYW5kbGUgVEtJUCBkZWNyeXB0aW9uICovCi0JZWxzZSBpZiAoR3JvdXBDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkgewotCQlpZiAoUlRNUFNvZnREZWNyeXB0VEtJUAotCQkgICAgKHBBZCwgcFJ4QmxrLT5wRGF0YSwgcFJ4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudCwgMCwKLQkJICAgICBwU2hhcmRfa2V5KSkgewotCi0JCQkvKk1pbnVzIDggYnl0ZXMgTUlDLCA4IGJ5dGVzIElWL0VJViwgNCBieXRlcyBJQ1YgKi8KLQkJCXBSeFdJLT5NUERVdG90YWxCeXRlQ291bnQgLT0gMjA7Ci0JCX0gZWxzZSB7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCQkgKCJFUlJPUiA6IFJUTVBTb2Z0RGVjcnlwdFRLSVAgRmFpbGVkXG4iKSk7Ci0JCQkvKiBnaXZlIHVwIHRoaXMgZnJhbWUgKi8KLQkJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOwotCQl9Ci0JfQotCS8qIGhhbmRsZSBBRVMgZGVjcnlwdGlvbiAqLwotCWVsc2UgaWYgKEdyb3VwQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpIHsKLQkJaWYgKFJUTVBTb2Z0RGVjcnlwdEFFUwotCQkgICAgKHBBZCwgcFJ4QmxrLT5wRGF0YSwgcFJ4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudCwKLQkJICAgICBwU2hhcmRfa2V5KSkgewotCi0JCQkvKjggYnl0ZXMgTUlDLCA4IGJ5dGVzIElWL0VJViAoQ0NNUCBIZWFkZXIpICovCi0JCQlwUnhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50IC09IDE2OwotCQl9IGVsc2UgewotCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkJICgiRVJST1IgOiBSVE1QU29mdERlY3J5cHRBRVMgRmFpbGVkXG4iKSk7Ci0JCQkvKiBnaXZlIHVwIHRoaXMgZnJhbWUgKi8KLQkJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogZ2l2ZSB1cCB0aGlzIGZyYW1lICovCi0JCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOwotCX0KLQotCXJldHVybiBORElTX1NUQVRVU19TVUNDRVNTOwotCi19Ci0KLXU4ICpHZXRTdWl0ZUZyb21SU05JRSh1OCAqcnNuaWUsCi0JCQkgdTMyIHJzbmllX2xlbiwgdTggdHlwZSwgdTggKiBjb3VudCkKLXsKLQlzdHJ1Y3QgcnRfZWlkICogcEVpZDsKLQlpbnQgbGVuOwotCXU4ICpwQnVmOwotCWludCBvZmZzZXQgPSAwOwotCXN0cnVjdCBydF9yc25pZV9hdXRoICpwQWttOwotCXUxNiBhY291bnQ7Ci0JQk9PTEVBTiBpc1dQQTIgPSBGQUxTRTsKLQotCXBFaWQgPSAoc3RydWN0IHJ0X2VpZCAqKSByc25pZTsKLQlsZW4gPSByc25pZV9sZW4gLSAyOwkvKiBleGNsdWRlIElFIGFuZCBsZW5ndGggKi8KLQlwQnVmID0gKHU4ICopJiBwRWlkLT5PY3RldFswXTsKLQotCS8qIHNldCBkZWZhdWx0IHZhbHVlICovCi0JKmNvdW50ID0gMDsKLQotCS8qIENoZWNrIGxlbmd0aCAqLwotCWlmICgobGVuIDw9IDApIHx8IChwRWlkLT5MZW4gIT0gbGVuKSkgewotCQlEQkdQUklOVF9FUlIoIiVzIDogVGhlIGxlbmd0aCBpcyBpbnZhbGlkXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQkvKiBDaGVjayBXUEEgb3IgV1BBMiAqLwotCWlmIChwRWlkLT5FaWQgPT0gSUVfV1BBKSB7Ci0JCXN0cnVjdCBydF9yc25pZSAqcFJzbmllID0gKHN0cnVjdCBydF9yc25pZSAqKXBCdWY7Ci0JCXUxNiB1Y291bnQ7Ci0KLQkJaWYgKGxlbiA8IHNpemVvZihzdHJ1Y3QgcnRfcnNuaWUpKSB7Ci0JCQlEQkdQUklOVF9FUlIoIiVzIDogVGhlIGxlbmd0aCBpcyB0b28gc2hvcnQgZm9yIFdQQVxuIiwgX19mdW5jX18pOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQkJLyogR2V0IHRoZSBjb3VudCBvZiBwYWlyd2lzZSBjaXBoZXIgKi8KLQkJdWNvdW50ID0gY3B1MmxlMTYocFJzbmllLT51Y291bnQpOwotCQlpZiAodWNvdW50ID4gMikgewotCQkJREJHUFJJTlRfRVJSKCIlcyA6IFRoZSBjb3VudCglZCkgb2YgcGFpcndpc2UgY2lwaGVyIGlzIGludmxhaWRcbiIsIF9fZnVuY19fLCB1Y291bnQpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQkJLyogR2V0IHRoZSBncm91cCBjaXBoZXIgKi8KLQkJaWYgKHR5cGUgPT0gR1JPVVBfU1VJVEUpIHsKLQkJCSpjb3VudCA9IDE7Ci0JCQlyZXR1cm4gcFJzbmllLT5tY2FzdDsKLQkJfQotCQkvKiBHZXQgdGhlIHBhaXJ3aXNlIGNpcGhlciBzdWl0ZSAqLwotCQllbHNlIGlmICh0eXBlID09IFBBSVJXSVNFX1NVSVRFKSB7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCIlcyA6IFRoZSBjb3VudCBvZiBwYWlyd2lzZSBjaXBoZXIgaXMgJWRcbiIsCi0JCQkJICBfX2Z1bmNfXywgdWNvdW50KSk7Ci0JCQkqY291bnQgPSB1Y291bnQ7Ci0JCQlyZXR1cm4gcFJzbmllLT51Y2FzdFswXS5vdWk7Ci0JCX0KLQotCQlvZmZzZXQgPSBzaXplb2Yoc3RydWN0IHJ0X3JzbmllKSArICg0ICogKHVjb3VudCAtIDEpKTsKLQotCX0gZWxzZSBpZiAocEVpZC0+RWlkID09IElFX1JTTikgewotCQlzdHJ1Y3QgcnRfcnNuaWUyICpwUnNuaWUgPSAoc3RydWN0IHJ0X3JzbmllMiAqKXBCdWY7Ci0JCXUxNiB1Y291bnQ7Ci0KLQkJaXNXUEEyID0gVFJVRTsKLQotCQlpZiAobGVuIDwgc2l6ZW9mKHN0cnVjdCBydF9yc25pZTIpKSB7Ci0JCQlEQkdQUklOVF9FUlIoIiVzIDogVGhlIGxlbmd0aCBpcyB0b28gc2hvcnQgZm9yIFdQQTJcbiIsIF9fZnVuY19fKTsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0JCS8qIEdldCB0aGUgY291bnQgb2YgcGFpcndpc2UgY2lwaGVyICovCi0JCXVjb3VudCA9IGNwdTJsZTE2KHBSc25pZS0+dWNvdW50KTsKLQkJaWYgKHVjb3VudCA+IDIpIHsKLQkJCURCR1BSSU5UX0VSUigiJXMgOiBUaGUgY291bnQoJWQpIG9mIHBhaXJ3aXNlIGNpcGhlciBpcyBpbnZsYWlkXG4iLCBfX2Z1bmNfXywgdWNvdW50KTsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0JCS8qIEdldCB0aGUgZ3JvdXAgY2lwaGVyICovCi0JCWlmICh0eXBlID09IEdST1VQX1NVSVRFKSB7Ci0JCQkqY291bnQgPSAxOwotCQkJcmV0dXJuIHBSc25pZS0+bWNhc3Q7Ci0JCX0KLQkJLyogR2V0IHRoZSBwYWlyd2lzZSBjaXBoZXIgc3VpdGUgKi8KLQkJZWxzZSBpZiAodHlwZSA9PSBQQUlSV0lTRV9TVUlURSkgewotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiJXMgOiBUaGUgY291bnQgb2YgcGFpcndpc2UgY2lwaGVyIGlzICVkXG4iLAotCQkJCSAgX19mdW5jX18sIHVjb3VudCkpOwotCQkJKmNvdW50ID0gdWNvdW50OwotCQkJcmV0dXJuIHBSc25pZS0+dWNhc3RbMF0ub3VpOwotCQl9Ci0KLQkJb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBydF9yc25pZTIpICsgKDQgKiAodWNvdW50IC0gMSkpOwotCi0JfSBlbHNlIHsKLQkJREJHUFJJTlRfRVJSKCIlcyA6IFVua25vd24gSUUgKCVkKVxuIiwgX19mdW5jX18sIHBFaWQtPkVpZCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCS8qIHNraXAgZ3JvdXAgY2lwaGVyIGFuZCBwYWlyd2lzZSBjaXBoZXIgc3VpdGUgKi8KLQlwQnVmICs9IG9mZnNldDsKLQlsZW4gLT0gb2Zmc2V0OwotCi0JaWYgKGxlbiA8IHNpemVvZihzdHJ1Y3QgcnRfcnNuaWVfYXV0aCkpIHsKLQkJREJHUFJJTlRfRVJSKCIlcyA6IFRoZSBsZW5ndGggb2YgUlNOSUUgaXMgdG9vIHNob3J0XG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQkvKiBwb2ludGVyIHRvIEFLTSBjb3VudCAqLwotCXBBa20gPSAoc3RydWN0IHJ0X3JzbmllX2F1dGggKilwQnVmOwotCi0JLyogR2V0IHRoZSBjb3VudCBvZiBwYWlyd2lzZSBjaXBoZXIgKi8KLQlhY291bnQgPSBjcHUybGUxNihwQWttLT5hY291bnQpOwotCWlmIChhY291bnQgPiAyKSB7Ci0JCURCR1BSSU5UX0VSUigiJXMgOiBUaGUgY291bnQoJWQpIG9mIEFLTSBpcyBpbnZsYWlkXG4iLCBfX2Z1bmNfXywgYWNvdW50KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCS8qIEdldCB0aGUgQUtNIHN1aXRlICovCi0JaWYgKHR5cGUgPT0gQUtNX1NVSVRFKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzIDogVGhlIGNvdW50IG9mIEFLTSBpcyAlZFxuIiwKLQkJCQkJICBfX2Z1bmNfXywgYWNvdW50KSk7Ci0JCSpjb3VudCA9IGFjb3VudDsKLQkJcmV0dXJuIHBBa20tPmF1dGhbMF0ub3VpOwotCX0KLQlvZmZzZXQgPSBzaXplb2Yoc3RydWN0IHJ0X3JzbmllX2F1dGgpICsgKDQgKiAoYWNvdW50IC0gMSkpOwotCi0JcEJ1ZiArPSBvZmZzZXQ7Ci0JbGVuIC09IG9mZnNldDsKLQotCS8qIFRoZSByZW1haW5pbmcgbGVuZ3RoIG11c3QgbGFyZ2VyIHRoYW4gKFJTTi1DYXBhYmlsaXR5KDIpICsgUE1LSUQtQ291bnQoMikgKyBQTUtJRCgxNn4pKSAqLwotCWlmIChsZW4gPj0gKHNpemVvZihSU05fQ0FQQUJJTElUSUVTKSArIDIgKyBMRU5fUE1LSUQpKSB7Ci0JCS8qIFNraXAgUlNOIGNhcGFiaWxpdHkgYW5kIFBNS0lELUNvdW50ICovCi0JCXBCdWYgKz0gKHNpemVvZihSU05fQ0FQQUJJTElUSUVTKSArIDIpOwotCQlsZW4gLT0gKHNpemVvZihSU05fQ0FQQUJJTElUSUVTKSArIDIpOwotCi0JCS8qIEdldCBQTUtJRCAqLwotCQlpZiAodHlwZSA9PSBQTUtJRF9MSVNUKSB7Ci0JCQkqY291bnQgPSAxOwotCQkJcmV0dXJuIHBCdWY7Ci0JCX0KLQl9IGVsc2UgewotCQlEQkdQUklOVF9FUlIoIiVzIDogaXQgY2FuJ3QgZ2V0IGFueSBtb3JlIGluZm9ybWF0aW9uIGJleW9uZCBBS00gXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCSpjb3VudCA9IDA7Ci0JLypEQkdQUklOVF9FUlIoKCIlcyA6IFRoZSB0eXBlKCVkKSBkb2Vzbid0IHN1cHBvcnQgXG4iLCBfX2Z1bmNfXywgdHlwZSkpOyAqLwotCXJldHVybiBOVUxMOwotCi19Ci0KLXZvaWQgV3BhU2hvd0FsbHN1aXRlKHU4ICpyc25pZSwgdTMyIHJzbmllX2xlbikKLXsKLQl1OCAqcFN1aXRlID0gTlVMTDsKLQl1OCBjb3VudDsKLQotCWhleF9kdW1wKCJSU05JRSIsIHJzbmllLCByc25pZV9sZW4pOwotCi0JLyogZ3JvdXAgY2lwaGVyICovCi0JcFN1aXRlID0gR2V0U3VpdGVGcm9tUlNOSUUocnNuaWUsIHJzbmllX2xlbiwgR1JPVVBfU1VJVEUsICZjb3VudCk7Ci0JaWYgKHBTdWl0ZSAhPSBOVUxMKSB7Ci0JCWhleF9kdW1wKCJncm91cCBjaXBoZXIiLCBwU3VpdGUsIDQgKiBjb3VudCk7Ci0JfQotCS8qIHBhaXJ3aXNlIGNpcGhlciAqLwotCXBTdWl0ZSA9IEdldFN1aXRlRnJvbVJTTklFKHJzbmllLCByc25pZV9sZW4sIFBBSVJXSVNFX1NVSVRFLCAmY291bnQpOwotCWlmIChwU3VpdGUgIT0gTlVMTCkgewotCQloZXhfZHVtcCgicGFpcndpc2UgY2lwaGVyIiwgcFN1aXRlLCA0ICogY291bnQpOwotCX0KLQkvKiBBS00gKi8KLQlwU3VpdGUgPSBHZXRTdWl0ZUZyb21SU05JRShyc25pZSwgcnNuaWVfbGVuLCBBS01fU1VJVEUsICZjb3VudCk7Ci0JaWYgKHBTdWl0ZSAhPSBOVUxMKSB7Ci0JCWhleF9kdW1wKCJBS00gc3VpdGUiLCBwU3VpdGUsIDQgKiBjb3VudCk7Ci0JfQotCS8qIFBNS0lEICovCi0JcFN1aXRlID0gR2V0U3VpdGVGcm9tUlNOSUUocnNuaWUsIHJzbmllX2xlbiwgUE1LSURfTElTVCwgJmNvdW50KTsKLQlpZiAocFN1aXRlICE9IE5VTEwpIHsKLQkJaGV4X2R1bXAoIlBNS0lEIiwgcFN1aXRlLCBMRU5fUE1LSUQpOwotCX0KLQotfQotCi12b2lkIFJUTVBJbnNlcnRSU05JRSh1OCAqcEZyYW1lQnVmLAotCQkgICAgIHVuc2lnbmVkIGxvbmcgKnBGcmFtZUxlbiwKLQkJICAgICB1OCAqcnNuaWVfcHRyLAotCQkgICAgIHU4IHJzbmllX2xlbiwKLQkJICAgICB1OCAqcG1raWRfcHRyLCB1OCBwbWtpZF9sZW4pCi17Ci0JdTggKnBUbXBCdWY7Ci0JdW5zaWduZWQgbG9uZyBUZW1wTGVuID0gMDsKLQl1OCBleHRyYV9sZW4gPSAwOwotCXUxNiBwbWtfY291bnQgPSAwOwotCXU4IGllX251bTsKLQl1OCB0b3RhbF9sZW4gPSAwOwotCXU4IFdQQTJfT1VJWzNdID0geyAweDAwLCAweDBGLCAweEFDIH07Ci0KLQlwVG1wQnVmID0gcEZyYW1lQnVmOwotCi0JLyogUE1LSUQtTGlzdCBNdXN0IGxhcmdlciB0aGFuIDAgYW5kIHRoZSBtdWx0aXBsZSBvZiAxNi4gKi8KLQlpZiAocG1raWRfbGVuID4gMCAmJiAoKHBta2lkX2xlbiAmIDB4MGYpID09IDApKSB7Ci0JCWV4dHJhX2xlbiA9IHNpemVvZih1MTYpKyBwbWtpZF9sZW47Ci0KLQkJcG1rX2NvdW50ID0gKHBta2lkX2xlbiA+PiA0KTsKLQkJcG1rX2NvdW50ID0gY3B1MmxlMTYocG1rX2NvdW50KTsKLQl9IGVsc2UgewotCQlEQkdQUklOVChSVF9ERUJVR19XQVJOLAotCQkJICgiJXMgOiBUaGUgbGVuZ3RoIGlzIFBNS0lELUxpc3QgaXMgaW52YWxpZCAoJWQpLCBzbyBkb24ndCBpbnNlcnQgaXQuXG4iLAotCQkJICBfX2Z1bmNfXywgcG1raWRfbGVuKSk7Ci0JfQotCi0JaWYgKHJzbmllX2xlbiAhPSAwKSB7Ci0JCWllX251bSA9IElFX1dQQTsKLQkJdG90YWxfbGVuID0gcnNuaWVfbGVuOwotCi0JCWlmIChOZGlzRXF1YWxNZW1vcnkocnNuaWVfcHRyICsgMiwgV1BBMl9PVUksIHNpemVvZihXUEEyX09VSSkpKSB7Ci0JCQlpZV9udW0gPSBJRV9SU047Ci0JCQl0b3RhbF9sZW4gKz0gZXh0cmFfbGVuOwotCQl9Ci0KLQkJLyogY29uc3RydWN0IFJTTklFIGJvZHkgKi8KLQkJTWFrZU91dGdvaW5nRnJhbWUocFRtcEJ1ZiwgJlRlbXBMZW4sCi0JCQkJICAxLCAmaWVfbnVtLAotCQkJCSAgMSwgJnRvdGFsX2xlbiwKLQkJCQkgIHJzbmllX2xlbiwgcnNuaWVfcHRyLCBFTkRfT0ZfQVJHUyk7Ci0KLQkJcFRtcEJ1ZiArPSBUZW1wTGVuOwotCQkqcEZyYW1lTGVuID0gKnBGcmFtZUxlbiArIFRlbXBMZW47Ci0KLQkJaWYgKGllX251bSA9PSBJRV9SU04pIHsKLQkJCS8qIEluc2VydCBQTUtJRC1MaXN0IGZpZWxkICovCi0JCQlpZiAoZXh0cmFfbGVuID4gMCkgewotCQkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBUbXBCdWYsICZUZW1wTGVuLAotCQkJCQkJICAyLCAmcG1rX2NvdW50LAotCQkJCQkJICBwbWtpZF9sZW4sIHBta2lkX3B0ciwKLQkJCQkJCSAgRU5EX09GX0FSR1MpOwotCi0JCQkJcFRtcEJ1ZiArPSBUZW1wTGVuOwotCQkJCSpwRnJhbWVMZW4gPSAqcEZyYW1lTGVuICsgVGVtcExlbjsKLQkJCX0KLQkJfQotCX0KLQotCXJldHVybjsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NyeXB0X2htYWMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NyeXB0X2htYWMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdhYjA4ZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jcnlwdF9obWFjLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODcgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSAiLi4vY3J5cHRfaG1hYy5oIgotCi0jaWZkZWYgSE1BQ19TSEExX1NVUFBPUlQKLS8qCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLVJvdXRpbmUgRGVzY3JpcHRpb246Ci0gICAgSE1BQyB1c2luZyBTSEExIGhhc2ggZnVuY3Rpb24KLQotQXJndW1lbnRzOgotICAgIGtleSAgICAgICAgICAgICBTZWNyZXQga2V5Ci0gICAga2V5X2xlbiAgICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIGtleSBpbiBieXRlcwotICAgIG1lc3NhZ2UgICAgICAgICBNZXNzYWdlIGNvbnRleHQKLSAgICBtZXNzYWdlX2xlbiAgICAgVGhlIGxlbmd0aCBvZiBtZXNzYWdlIGluIGJ5dGVzCi0gICAgbWFjTGVuICAgICAgICAgIFJlcXVlc3QgdGhlIGxlbmd0aCBvZiBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGNvZGUKLQotUmV0dXJuIFZhbHVlOgotICAgIG1hYyAgICAgICAgICAgICBNZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGNvZGUKLQotTm90ZToKLSAgICBOb25lCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIEhNQUNfU0hBMShJTiBjb25zdCB1OCBLZXlbXSwKLQkgICAgICAgdTMyIEtleUxlbiwKLQkgICAgICAgSU4gY29uc3QgdTggTWVzc2FnZVtdLAotCSAgICAgICB1MzIgTWVzc2FnZUxlbiwgdTggTUFDW10sIHUzMiBNQUNMZW4pCi17Ci0Jc3RydWN0IHJ0X3NoYTFfY3R4IHNoYV9jdHgxOwotCXN0cnVjdCBydF9zaGExX2N0eCBzaGFfY3R4MjsKLQl1OCBLMFtTSEExX0JMT0NLX1NJWkVdOwotCXU4IERpZ2VzdFtTSEExX0RJR0VTVF9TSVpFXTsKLQl1MzIgaW5kZXg7Ci0KLQlOZGlzWmVyb01lbW9yeSgmc2hhX2N0eDEsIHNpemVvZihzdHJ1Y3QgcnRfc2hhMV9jdHgpKTsKLQlOZGlzWmVyb01lbW9yeSgmc2hhX2N0eDIsIHNpemVvZihzdHJ1Y3QgcnRfc2hhMV9jdHgpKTsKLQkvKgotCSAqIElmIHRoZSBsZW5ndGggb2YgSyA9IEIoQmxvY2sgc2l6ZSk6IEswID0gSy4KLQkgKiBJZiB0aGUgbGVuZ3RoIG9mIEsgPiBCOiBoYXNoIEsgdG8gb2J0YWluIGFuIEwgYnl0ZSBzdHJpbmcsCi0JICogdGhlbiBhcHBlbmQgKEItTCkgemVyb3MgdG8gY3JlYXRlIGEgQi1ieXRlIHN0cmluZyBLMCAoaS5lLiwgSzAgPSBIKEspIHx8IDAwLi4uMDApLgotCSAqIElmIHRoZSBsZW5ndGggb2YgSyA8IEI6IGFwcGVuZCB6ZXJvcyB0byB0aGUgZW5kIG9mIEsgdG8gY3JlYXRlIGEgQi1ieXRlIHN0cmluZyBLMAotCSAqLwotCU5kaXNaZXJvTWVtb3J5KEswLCBTSEExX0JMT0NLX1NJWkUpOwotCWlmIChLZXlMZW4gPD0gU0hBMV9CTE9DS19TSVpFKQotCQlOZGlzTW92ZU1lbW9yeShLMCwgS2V5LCBLZXlMZW4pOwotCWVsc2UKLQkJUlRfU0hBMShLZXksIEtleUxlbiwgSzApOwotCS8qIEVuZCBvZiBpZiAqLwotCi0JLyogRXhjbHVzaXZlLU9yIEswIHdpdGggaXBhZCAqLwotCS8qIGlwYWQ6IElubmVyIHBhZDsgdGhlIGJ5dGUgeMKhwqYzNsKhwqYgcmVwZWF0ZWQgQiB0aW1lcy4gKi8KLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBTSEExX0JMT0NLX1NJWkU7IGluZGV4KyspCi0JCUswW2luZGV4XSBePSAweDM2OwotCS8qIEVuZCBvZiBmb3IgKi8KLQotCVJUX1NIQTFfSW5pdCgmc2hhX2N0eDEpOwotCS8qIEgoSzBeaXBhZCkgKi8KLQlTSEExX0FwcGVuZCgmc2hhX2N0eDEsIEswLCBzaXplb2YoSzApKTsKLQkvKiBIKChLMF5pcGFkKXx8dGV4dCkgKi8KLQlTSEExX0FwcGVuZCgmc2hhX2N0eDEsIE1lc3NhZ2UsIE1lc3NhZ2VMZW4pOwotCVNIQTFfRW5kKCZzaGFfY3R4MSwgRGlnZXN0KTsKLQotCS8qIEV4Y2x1c2l2ZS1PciBLMCB3aXRoIG9wYWQgYW5kIHJlbW92ZSBpcGFkICovCi0JLyogb3BhZDogT3V0ZXIgcGFkOyB0aGUgYnl0ZSB4wqHCpjVjwqHCpiByZXBlYXRlZCBCIHRpbWVzLiAqLwotCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IFNIQTFfQkxPQ0tfU0laRTsgaW5kZXgrKykKLQkJSzBbaW5kZXhdIF49IDB4MzYgXiAweDVjOwotCS8qIEVuZCBvZiBmb3IgKi8KLQotCVJUX1NIQTFfSW5pdCgmc2hhX2N0eDIpOwotCS8qIEgoSzBeb3BhZCkgKi8KLQlTSEExX0FwcGVuZCgmc2hhX2N0eDIsIEswLCBzaXplb2YoSzApKTsKLQkvKiBIKCAoSzBeb3BhZCkgfHwgSCgoSzBeaXBhZCl8fHRleHQpICkgKi8KLQlTSEExX0FwcGVuZCgmc2hhX2N0eDIsIERpZ2VzdCwgU0hBMV9ESUdFU1RfU0laRSk7Ci0JU0hBMV9FbmQoJnNoYV9jdHgyLCBEaWdlc3QpOwotCi0JaWYgKE1BQ0xlbiA+IFNIQTFfRElHRVNUX1NJWkUpCi0JCU5kaXNNb3ZlTWVtb3J5KE1BQywgRGlnZXN0LCBTSEExX0RJR0VTVF9TSVpFKTsKLQllbHNlCi0JCU5kaXNNb3ZlTWVtb3J5KE1BQywgRGlnZXN0LCBNQUNMZW4pOwotfQkJCQkvKiBFbmQgb2YgSE1BQ19TSEExICovCi0jZW5kaWYgLyogSE1BQ19TSEExX1NVUFBPUlQgKi8KLQotI2lmZGVmIEhNQUNfTUQ1X1NVUFBPUlQKLS8qCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLVJvdXRpbmUgRGVzY3JpcHRpb246Ci0gICAgSE1BQyB1c2luZyBNRDUgaGFzaCBmdW5jdGlvbgotCi1Bcmd1bWVudHM6Ci0gICAga2V5ICAgICAgICAgICAgIFNlY3JldCBrZXkKLSAgICBrZXlfbGVuICAgICAgICAgVGhlIGxlbmd0aCBvZiB0aGUga2V5IGluIGJ5dGVzCi0gICAgbWVzc2FnZSAgICAgICAgIE1lc3NhZ2UgY29udGV4dAotICAgIG1lc3NhZ2VfbGVuICAgICBUaGUgbGVuZ3RoIG9mIG1lc3NhZ2UgaW4gYnl0ZXMKLSAgICBtYWNMZW4gICAgICAgICAgUmVxdWVzdCB0aGUgbGVuZ3RoIG9mIG1lc3NhZ2UgYXV0aGVudGljYXRpb24gY29kZQotCi1SZXR1cm4gVmFsdWU6Ci0gICAgbWFjICAgICAgICAgICAgIE1lc3NhZ2UgYXV0aGVudGljYXRpb24gY29kZQotCi1Ob3RlOgotICAgIE5vbmUKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgSE1BQ19NRDUoSU4gY29uc3QgdTggS2V5W10sCi0JICAgICAgdTMyIEtleUxlbiwKLQkgICAgICBJTiBjb25zdCB1OCBNZXNzYWdlW10sCi0JICAgICAgdTMyIE1lc3NhZ2VMZW4sIHU4IE1BQ1tdLCB1MzIgTUFDTGVuKQotewotCXN0cnVjdCBydF9tZDVfY3R4X3N0cnVjIG1kNV9jdHgxOwotCXN0cnVjdCBydF9tZDVfY3R4X3N0cnVjIG1kNV9jdHgyOwotCXU4IEswW01ENV9CTE9DS19TSVpFXTsKLQl1OCBEaWdlc3RbTUQ1X0RJR0VTVF9TSVpFXTsKLQl1MzIgaW5kZXg7Ci0KLQlOZGlzWmVyb01lbW9yeSgmbWQ1X2N0eDEsIHNpemVvZihzdHJ1Y3QgcnRfbWQ1X2N0eF9zdHJ1YykpOwotCU5kaXNaZXJvTWVtb3J5KCZtZDVfY3R4Miwgc2l6ZW9mKHN0cnVjdCBydF9tZDVfY3R4X3N0cnVjKSk7Ci0JLyoKLQkgKiBJZiB0aGUgbGVuZ3RoIG9mIEsgPSBCKEJsb2NrIHNpemUpOiBLMCA9IEsuCi0JICogSWYgdGhlIGxlbmd0aCBvZiBLID4gQjogaGFzaCBLIHRvIG9idGFpbiBhbiBMIGJ5dGUgc3RyaW5nLAotCSAqIHRoZW4gYXBwZW5kIChCLUwpIHplcm9zIHRvIGNyZWF0ZSBhIEItYnl0ZSBzdHJpbmcgSzAgKGkuZS4sIEswID0gSChLKSB8fCAwMC4uLjAwKS4KLQkgKiBJZiB0aGUgbGVuZ3RoIG9mIEsgPCBCOiBhcHBlbmQgemVyb3MgdG8gdGhlIGVuZCBvZiBLIHRvIGNyZWF0ZSBhIEItYnl0ZSBzdHJpbmcgSzAKLQkgKi8KLQlOZGlzWmVyb01lbW9yeShLMCwgTUQ1X0JMT0NLX1NJWkUpOwotCWlmIChLZXlMZW4gPD0gTUQ1X0JMT0NLX1NJWkUpIHsKLQkJTmRpc01vdmVNZW1vcnkoSzAsIEtleSwgS2V5TGVuKTsKLQl9IGVsc2UgewotCQlSVF9NRDUoS2V5LCBLZXlMZW4sIEswKTsKLQl9Ci0KLQkvKiBFeGNsdXNpdmUtT3IgSzAgd2l0aCBpcGFkICovCi0JLyogaXBhZDogSW5uZXIgcGFkOyB0aGUgYnl0ZSB4wqHCpjM2wqHCpiByZXBlYXRlZCBCIHRpbWVzLiAqLwotCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE1ENV9CTE9DS19TSVpFOyBpbmRleCsrKQotCQlLMFtpbmRleF0gXj0gMHgzNjsKLQkvKiBFbmQgb2YgZm9yICovCi0KLQlNRDVfSW5pdCgmbWQ1X2N0eDEpOwotCS8qIEgoSzBeaXBhZCkgKi8KLQlNRDVfQXBwZW5kKCZtZDVfY3R4MSwgSzAsIHNpemVvZihLMCkpOwotCS8qIEgoKEswXmlwYWQpfHx0ZXh0KSAqLwotCU1ENV9BcHBlbmQoJm1kNV9jdHgxLCBNZXNzYWdlLCBNZXNzYWdlTGVuKTsKLQlNRDVfRW5kKCZtZDVfY3R4MSwgRGlnZXN0KTsKLQotCS8qIEV4Y2x1c2l2ZS1PciBLMCB3aXRoIG9wYWQgYW5kIHJlbW92ZSBpcGFkICovCi0JLyogb3BhZDogT3V0ZXIgcGFkOyB0aGUgYnl0ZSB4wqHCpjVjwqHCpiByZXBlYXRlZCBCIHRpbWVzLiAqLwotCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE1ENV9CTE9DS19TSVpFOyBpbmRleCsrKQotCQlLMFtpbmRleF0gXj0gMHgzNiBeIDB4NWM7Ci0JLyogRW5kIG9mIGZvciAqLwotCi0JTUQ1X0luaXQoJm1kNV9jdHgyKTsKLQkvKiBIKEswXm9wYWQpICovCi0JTUQ1X0FwcGVuZCgmbWQ1X2N0eDIsIEswLCBzaXplb2YoSzApKTsKLQkvKiBIKCAoSzBeb3BhZCkgfHwgSCgoSzBeaXBhZCl8fHRleHQpICkgKi8KLQlNRDVfQXBwZW5kKCZtZDVfY3R4MiwgRGlnZXN0LCBNRDVfRElHRVNUX1NJWkUpOwotCU1ENV9FbmQoJm1kNV9jdHgyLCBEaWdlc3QpOwotCi0JaWYgKE1BQ0xlbiA+IE1ENV9ESUdFU1RfU0laRSkKLQkJTmRpc01vdmVNZW1vcnkoTUFDLCBEaWdlc3QsIE1ENV9ESUdFU1RfU0laRSk7Ci0JZWxzZQotCQlOZGlzTW92ZU1lbW9yeShNQUMsIERpZ2VzdCwgTUFDTGVuKTsKLX0JCQkJLyogRW5kIG9mIEhNQUNfU0hBMjU2ICovCi0jZW5kaWYgLyogSE1BQ19NRDVfU1VQUE9SVCAqLwotCi0vKiBFbmQgb2YgY3J5cHRfaG1hYy5jICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jcnlwdF9tZDUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NyeXB0X21kNS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGVhYjY1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NyeXB0X21kNS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzM5ICswLDAgQEAKLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUmFsaW5rIFRlY2ggSW5jLgotICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAotICogSHNpbmNodSBDb3VudHkgMzAyLAotICogVGFpd2FuLCBSLk8uQy4KLSAqCi0gKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2luY2x1ZGUgIi4uL2NyeXB0X21kNS5oIgotCi0jaWZkZWYgTUQ1X1NVUFBPUlQKLS8qCi0gKiBGLCBHLCBIIGFuZCBJIGFyZSBiYXNpYyBNRDUgZnVuY3Rpb25zLgotICovCi0jZGVmaW5lIEYoeCwgeSwgeikgKCgoeCkgJiAoeSkpIHwgKCh+eCkgJiAoeikpKQotI2RlZmluZSBHKHgsIHksIHopICgoKHgpICYgKHopKSB8ICgoeSkgJiAofnopKSkKLSNkZWZpbmUgSCh4LCB5LCB6KSAoKHgpIF4gKHkpIF4gKHopKQotI2RlZmluZSBJKHgsIHksIHopICgoeSkgXiAoKHgpIHwgKH56KSkpCi0KLSNkZWZpbmUgUk9UTCh4LG4sdykgKCh4IDw8IG4pIHwgKHggPj4gKHcgLSBuKSkpCi0jZGVmaW5lIFJPVEwzMih4LG4pIFJPVEwoeCxuLDMyKQkvKiAzMiBiaXRzIHdvcmQgKi8KLQotI2RlZmluZSBST1VORDEoYSwgYiwgYywgZCwgeCwgcywgYWMpIHsgICAgICAgICAgXAotICAgIChhKSArPSBGKChiKSwoYyksKGQpKSArICh4KSArICh1MzIpKGFjKTsgXAotICAgIChhKSAgPSBST1RMMzIoKGEpLChzKSk7ICAgICAgICAgICAgICAgICAgICAgXAotICAgIChhKSArPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotI2RlZmluZSBST1VORDIoYSwgYiwgYywgZCwgeCwgcywgYWMpIHsgICAgICAgICAgXAotICAgIChhKSArPSBHKChiKSwoYyksKGQpKSArICh4KSArICh1MzIpKGFjKTsgXAotICAgIChhKSAgPSBST1RMMzIoKGEpLChzKSk7ICAgICAgICAgICAgICAgICAgICAgXAotICAgIChhKSArPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotI2RlZmluZSBST1VORDMoYSwgYiwgYywgZCwgeCwgcywgYWMpIHsgICAgICAgICAgXAotICAgIChhKSArPSBIKChiKSwoYyksKGQpKSArICh4KSArICh1MzIpKGFjKTsgXAotICAgIChhKSAgPSBST1RMMzIoKGEpLChzKSk7ICAgICAgICAgICAgICAgICAgICAgXAotICAgIChhKSArPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotI2RlZmluZSBST1VORDQoYSwgYiwgYywgZCwgeCwgcywgYWMpIHsgICAgICAgICAgXAotICAgIChhKSArPSBJKChiKSwoYyksKGQpKSArICh4KSArICh1MzIpKGFjKTsgXAotICAgIChhKSAgPSBST1RMMzIoKGEpLChzKSk7ICAgICAgICAgICAgICAgICAgICAgXAotICAgIChhKSArPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotc3RhdGljIGNvbnN0IHUzMiBNRDVfRGVmYXVsdEhhc2hWYWx1ZVs0XSA9IHsKLQkweDY3NDUyMzAxVUwsIDB4ZWZjZGFiODlVTCwgMHg5OGJhZGNmZVVMLCAweDEwMzI1NDc2VUwKLX07Ci0jZW5kaWYgLyogTUQ1X1NVUFBPUlQgKi8KLQotI2lmZGVmIE1ENV9TVVBQT1JUCi0vKgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Sb3V0aW5lIERlc2NyaXB0aW9uOgotICAgIEluaXRpYWwgTWQ1X0NUWF9TVFJVQwotCi1Bcmd1bWVudHM6Ci0gICAgcE1ENV9DVFggICAgICAgIFBvaW50ZXIgdG8gTWQ1X0NUWF9TVFJVQwotCi1SZXR1cm4gVmFsdWU6Ci0gICAgTm9uZQotCi1Ob3RlOgotICAgIE5vbmUKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgTUQ1X0luaXQoc3RydWN0IHJ0X21kNV9jdHhfc3RydWMgKnBNRDVfQ1RYKQotewotCU5kaXNNb3ZlTWVtb3J5KHBNRDVfQ1RYLT5IYXNoVmFsdWUsIE1ENV9EZWZhdWx0SGFzaFZhbHVlLAotCQkgICAgICAgc2l6ZW9mKE1ENV9EZWZhdWx0SGFzaFZhbHVlKSk7Ci0JTmRpc1plcm9NZW1vcnkocE1ENV9DVFgtPkJsb2NrLCBNRDVfQkxPQ0tfU0laRSk7Ci0JcE1ENV9DVFgtPkJsb2NrTGVuID0gMDsKLQlwTUQ1X0NUWC0+TWVzc2FnZUxlbiA9IDA7Ci19CQkJCS8qIEVuZCBvZiBNRDVfSW5pdCAqLwotCi0vKgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Sb3V0aW5lIERlc2NyaXB0aW9uOgotICAgIE1ENSBjb21wdXRhdGlvbiBmb3Igb25lIGJsb2NrICg1MTIgYml0cykKLQotQXJndW1lbnRzOgotICAgIHBNRDVfQ1RYICAgICAgICBQb2ludGVyIHRvIE1kNV9DVFhfU1RSVUMKLQotUmV0dXJuIFZhbHVlOgotICAgIE5vbmUKLQotTm90ZToKLSAgICBUW2ldIDo9IGZsb29yKGFicyhzaW4oaSArIDEpKSAqICgyIHBvdyAzMikpLCBpIGlzIG51bWJlciBvZiByb3VuZAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBNRDVfSGFzaChzdHJ1Y3QgcnRfbWQ1X2N0eF9zdHJ1YyAqcE1ENV9DVFgpCi17Ci0JdTMyIFhfaTsKLQl1MzIgWFsxNl07Ci0JdTMyIGEsIGIsIGMsIGQ7Ci0KLQkvKiBQcmVwYXJlIHRoZSBtZXNzYWdlIHNjaGVkdWxlLCB7WF9pfSAqLwotCU5kaXNNb3ZlTWVtb3J5KFgsIHBNRDVfQ1RYLT5CbG9jaywgTUQ1X0JMT0NLX1NJWkUpOwotCWZvciAoWF9pID0gMDsgWF9pIDwgMTY7IFhfaSsrKQotCQlYW1hfaV0gPSBjcHUybGUzMihYW1hfaV0pOwkvKiBFbmRpYW4gU3dhcCAqLwotCS8qIEVuZCBvZiBmb3IgKi8KLQotCS8qIE1ENSBoYXNoIGNvbXB1dGF0aW9uICovCi0JLyogSW5pdGlhbGl6ZSB0aGUgd29ya2luZyB2YXJpYWJsZXMgKi8KLQlhID0gcE1ENV9DVFgtPkhhc2hWYWx1ZVswXTsKLQliID0gcE1ENV9DVFgtPkhhc2hWYWx1ZVsxXTsKLQljID0gcE1ENV9DVFgtPkhhc2hWYWx1ZVsyXTsKLQlkID0gcE1ENV9DVFgtPkhhc2hWYWx1ZVszXTsKLQotCS8qCi0JICogIFJvdW5kIDEKLQkgKiAgTGV0IFthYmNkIGsgcyBpXSBkZW5vdGUgdGhlIG9wZXJhdGlvbgotCSAqICBhID0gYiArICgoYSArIEYoYixjLGQpICsgWFtrXSArIFRbaV0pIDw8PCBzKQotCSAqLwotCVJPVU5EMShhLCBiLCBjLCBkLCBYWzBdLCA3LCAweGQ3NmFhNDc4KTsJLyogMSAqLwotCVJPVU5EMShkLCBhLCBiLCBjLCBYWzFdLCAxMiwgMHhlOGM3Yjc1Nik7CS8qIDIgKi8KLQlST1VORDEoYywgZCwgYSwgYiwgWFsyXSwgMTcsIDB4MjQyMDcwZGIpOwkvKiAzICovCi0JUk9VTkQxKGIsIGMsIGQsIGEsIFhbM10sIDIyLCAweGMxYmRjZWVlKTsJLyogNCAqLwotCVJPVU5EMShhLCBiLCBjLCBkLCBYWzRdLCA3LCAweGY1N2MwZmFmKTsJLyogNSAqLwotCVJPVU5EMShkLCBhLCBiLCBjLCBYWzVdLCAxMiwgMHg0Nzg3YzYyYSk7CS8qIDYgKi8KLQlST1VORDEoYywgZCwgYSwgYiwgWFs2XSwgMTcsIDB4YTgzMDQ2MTMpOwkvKiA3ICovCi0JUk9VTkQxKGIsIGMsIGQsIGEsIFhbN10sIDIyLCAweGZkNDY5NTAxKTsJLyogOCAqLwotCVJPVU5EMShhLCBiLCBjLCBkLCBYWzhdLCA3LCAweDY5ODA5OGQ4KTsJLyogOSAqLwotCVJPVU5EMShkLCBhLCBiLCBjLCBYWzldLCAxMiwgMHg4YjQ0ZjdhZik7CS8qIDEwICovCi0JUk9VTkQxKGMsIGQsIGEsIGIsIFhbMTBdLCAxNywgMHhmZmZmNWJiMSk7CS8qIDExICovCi0JUk9VTkQxKGIsIGMsIGQsIGEsIFhbMTFdLCAyMiwgMHg4OTVjZDdiZSk7CS8qIDEyICovCi0JUk9VTkQxKGEsIGIsIGMsIGQsIFhbMTJdLCA3LCAweDZiOTAxMTIyKTsJLyogMTMgKi8KLQlST1VORDEoZCwgYSwgYiwgYywgWFsxM10sIDEyLCAweGZkOTg3MTkzKTsJLyogMTQgKi8KLQlST1VORDEoYywgZCwgYSwgYiwgWFsxNF0sIDE3LCAweGE2Nzk0MzhlKTsJLyogMTUgKi8KLQlST1VORDEoYiwgYywgZCwgYSwgWFsxNV0sIDIyLCAweDQ5YjQwODIxKTsJLyogMTYgKi8KLQotCS8qCi0JICogIFJvdW5kIDIKLQkgKiAgTGV0IFthYmNkIGsgcyBpXSBkZW5vdGUgdGhlIG9wZXJhdGlvbgotCSAqICBhID0gYiArICgoYSArIEcoYixjLGQpICsgWFtrXSArIFRbaV0pIDw8PCBzKQotCSAqLwotCVJPVU5EMihhLCBiLCBjLCBkLCBYWzFdLCA1LCAweGY2MWUyNTYyKTsJLyogMTcgKi8KLQlST1VORDIoZCwgYSwgYiwgYywgWFs2XSwgOSwgMHhjMDQwYjM0MCk7CS8qIDE4ICovCi0JUk9VTkQyKGMsIGQsIGEsIGIsIFhbMTFdLCAxNCwgMHgyNjVlNWE1MSk7CS8qIDE5ICovCi0JUk9VTkQyKGIsIGMsIGQsIGEsIFhbMF0sIDIwLCAweGU5YjZjN2FhKTsJLyogMjAgKi8KLQlST1VORDIoYSwgYiwgYywgZCwgWFs1XSwgNSwgMHhkNjJmMTA1ZCk7CS8qIDIxICovCi0JUk9VTkQyKGQsIGEsIGIsIGMsIFhbMTBdLCA5LCAweDI0NDE0NTMpOwkvKiAyMiAqLwotCVJPVU5EMihjLCBkLCBhLCBiLCBYWzE1XSwgMTQsIDB4ZDhhMWU2ODEpOwkvKiAyMyAqLwotCVJPVU5EMihiLCBjLCBkLCBhLCBYWzRdLCAyMCwgMHhlN2QzZmJjOCk7CS8qIDI0ICovCi0JUk9VTkQyKGEsIGIsIGMsIGQsIFhbOV0sIDUsIDB4MjFlMWNkZTYpOwkvKiAyNSAqLwotCVJPVU5EMihkLCBhLCBiLCBjLCBYWzE0XSwgOSwgMHhjMzM3MDdkNik7CS8qIDI2ICovCi0JUk9VTkQyKGMsIGQsIGEsIGIsIFhbM10sIDE0LCAweGY0ZDUwZDg3KTsJLyogMjcgKi8KLQlST1VORDIoYiwgYywgZCwgYSwgWFs4XSwgMjAsIDB4NDU1YTE0ZWQpOwkvKiAyOCAqLwotCVJPVU5EMihhLCBiLCBjLCBkLCBYWzEzXSwgNSwgMHhhOWUzZTkwNSk7CS8qIDI5ICovCi0JUk9VTkQyKGQsIGEsIGIsIGMsIFhbMl0sIDksIDB4ZmNlZmEzZjgpOwkvKiAzMCAqLwotCVJPVU5EMihjLCBkLCBhLCBiLCBYWzddLCAxNCwgMHg2NzZmMDJkOSk7CS8qIDMxICovCi0JUk9VTkQyKGIsIGMsIGQsIGEsIFhbMTJdLCAyMCwgMHg4ZDJhNGM4YSk7CS8qIDMyICovCi0KLQkvKgotCSAqICBSb3VuZCAzCi0JICogIExldCBbYWJjZCBrIHMgdF0gZGVub3RlIHRoZSBvcGVyYXRpb24KLQkgKiAgYSA9IGIgKyAoKGEgKyBIKGIsYyxkKSArIFhba10gKyBUW2ldKSA8PDwgcykKLQkgKi8KLQlST1VORDMoYSwgYiwgYywgZCwgWFs1XSwgNCwgMHhmZmZhMzk0Mik7CS8qIDMzICovCi0JUk9VTkQzKGQsIGEsIGIsIGMsIFhbOF0sIDExLCAweDg3NzFmNjgxKTsJLyogMzQgKi8KLQlST1VORDMoYywgZCwgYSwgYiwgWFsxMV0sIDE2LCAweDZkOWQ2MTIyKTsJLyogMzUgKi8KLQlST1VORDMoYiwgYywgZCwgYSwgWFsxNF0sIDIzLCAweGZkZTUzODBjKTsJLyogMzYgKi8KLQlST1VORDMoYSwgYiwgYywgZCwgWFsxXSwgNCwgMHhhNGJlZWE0NCk7CS8qIDM3ICovCi0JUk9VTkQzKGQsIGEsIGIsIGMsIFhbNF0sIDExLCAweDRiZGVjZmE5KTsJLyogMzggKi8KLQlST1VORDMoYywgZCwgYSwgYiwgWFs3XSwgMTYsIDB4ZjZiYjRiNjApOwkvKiAzOSAqLwotCVJPVU5EMyhiLCBjLCBkLCBhLCBYWzEwXSwgMjMsIDB4YmViZmJjNzApOwkvKiA0MCAqLwotCVJPVU5EMyhhLCBiLCBjLCBkLCBYWzEzXSwgNCwgMHgyODliN2VjNik7CS8qIDQxICovCi0JUk9VTkQzKGQsIGEsIGIsIGMsIFhbMF0sIDExLCAweGVhYTEyN2ZhKTsJLyogNDIgKi8KLQlST1VORDMoYywgZCwgYSwgYiwgWFszXSwgMTYsIDB4ZDRlZjMwODUpOwkvKiA0MyAqLwotCVJPVU5EMyhiLCBjLCBkLCBhLCBYWzZdLCAyMywgMHg0ODgxZDA1KTsJLyogNDQgKi8KLQlST1VORDMoYSwgYiwgYywgZCwgWFs5XSwgNCwgMHhkOWQ0ZDAzOSk7CS8qIDQ1ICovCi0JUk9VTkQzKGQsIGEsIGIsIGMsIFhbMTJdLCAxMSwgMHhlNmRiOTllNSk7CS8qIDQ2ICovCi0JUk9VTkQzKGMsIGQsIGEsIGIsIFhbMTVdLCAxNiwgMHgxZmEyN2NmOCk7CS8qIDQ3ICovCi0JUk9VTkQzKGIsIGMsIGQsIGEsIFhbMl0sIDIzLCAweGM0YWM1NjY1KTsJLyogNDggKi8KLQotCS8qCi0JICogIFJvdW5kIDQKLQkgKiAgTGV0IFthYmNkIGsgcyB0XSBkZW5vdGUgdGhlIG9wZXJhdGlvbgotCSAqICBhID0gYiArICgoYSArIEkoYixjLGQpICsgWFtrXSArIFRbaV0pIDw8PCBzKQotCSAqLwotCVJPVU5ENChhLCBiLCBjLCBkLCBYWzBdLCA2LCAweGY0MjkyMjQ0KTsJLyogNDkgKi8KLQlST1VORDQoZCwgYSwgYiwgYywgWFs3XSwgMTAsIDB4NDMyYWZmOTcpOwkvKiA1MCAqLwotCVJPVU5ENChjLCBkLCBhLCBiLCBYWzE0XSwgMTUsIDB4YWI5NDIzYTcpOwkvKiA1MSAqLwotCVJPVU5ENChiLCBjLCBkLCBhLCBYWzVdLCAyMSwgMHhmYzkzYTAzOSk7CS8qIDUyICovCi0JUk9VTkQ0KGEsIGIsIGMsIGQsIFhbMTJdLCA2LCAweDY1NWI1OWMzKTsJLyogNTMgKi8KLQlST1VORDQoZCwgYSwgYiwgYywgWFszXSwgMTAsIDB4OGYwY2NjOTIpOwkvKiA1NCAqLwotCVJPVU5ENChjLCBkLCBhLCBiLCBYWzEwXSwgMTUsIDB4ZmZlZmY0N2QpOwkvKiA1NSAqLwotCVJPVU5ENChiLCBjLCBkLCBhLCBYWzFdLCAyMSwgMHg4NTg0NWRkMSk7CS8qIDU2ICovCi0JUk9VTkQ0KGEsIGIsIGMsIGQsIFhbOF0sIDYsIDB4NmZhODdlNGYpOwkvKiA1NyAqLwotCVJPVU5ENChkLCBhLCBiLCBjLCBYWzE1XSwgMTAsIDB4ZmUyY2U2ZTApOwkvKiA1OCAqLwotCVJPVU5ENChjLCBkLCBhLCBiLCBYWzZdLCAxNSwgMHhhMzAxNDMxNCk7CS8qIDU5ICovCi0JUk9VTkQ0KGIsIGMsIGQsIGEsIFhbMTNdLCAyMSwgMHg0ZTA4MTFhMSk7CS8qIDYwICovCi0JUk9VTkQ0KGEsIGIsIGMsIGQsIFhbNF0sIDYsIDB4Zjc1MzdlODIpOwkvKiA2MSAqLwotCVJPVU5ENChkLCBhLCBiLCBjLCBYWzExXSwgMTAsIDB4YmQzYWYyMzUpOwkvKiA2MiAqLwotCVJPVU5ENChjLCBkLCBhLCBiLCBYWzJdLCAxNSwgMHgyYWQ3ZDJiYik7CS8qIDYzICovCi0JUk9VTkQ0KGIsIGMsIGQsIGEsIFhbOV0sIDIxLCAweGViODZkMzkxKTsJLyogNjQgKi8KLQotCS8qIENvbXB1dGUgdGhlIGledGggaW50ZXJtZWRpYXRlIGhhc2ggdmFsdWUgSF4oaSkgKi8KLQlwTUQ1X0NUWC0+SGFzaFZhbHVlWzBdICs9IGE7Ci0JcE1ENV9DVFgtPkhhc2hWYWx1ZVsxXSArPSBiOwotCXBNRDVfQ1RYLT5IYXNoVmFsdWVbMl0gKz0gYzsKLQlwTUQ1X0NUWC0+SGFzaFZhbHVlWzNdICs9IGQ7Ci0KLQlOZGlzWmVyb01lbW9yeShwTUQ1X0NUWC0+QmxvY2ssIE1ENV9CTE9DS19TSVpFKTsKLQlwTUQ1X0NUWC0+QmxvY2tMZW4gPSAwOwotfQkJCQkvKiBFbmQgb2YgTUQ1X0hhc2ggKi8KLQotLyoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotUm91dGluZSBEZXNjcmlwdGlvbjoKLSAgICBUaGUgbWVzc2FnZSBpcyBhcHBlbmRlZCB0byBibG9jay4gSWYgYmxvY2sgc2l6ZSA+IDY0IGJ5dGVzLCB0aGUgTUQ1X0hhc2gKLXdpbGwgYmUgY2FsbGVkLgotCi1Bcmd1bWVudHM6Ci0gICAgcE1ENV9DVFggICAgICAgIFBvaW50ZXIgdG8gc3RydWN0IHJ0X21kNV9jdHhfc3RydWMKLSAgICBtZXNzYWdlICAgICAgICAgTWVzc2FnZSBjb250ZXh0Ci0gICAgbWVzc2FnZUxlbiAgICAgIFRoZSBsZW5ndGggb2YgbWVzc2FnZSBpbiBieXRlcwotCi1SZXR1cm4gVmFsdWU6Ci0gICAgTm9uZQotCi1Ob3RlOgotICAgIE5vbmUKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgTUQ1X0FwcGVuZChzdHJ1Y3QgcnRfbWQ1X2N0eF9zdHJ1YyAqcE1ENV9DVFgsCi0JCUlOIGNvbnN0IHU4IE1lc3NhZ2VbXSwgdTMyIE1lc3NhZ2VMZW4pCi17Ci0JdTMyIGFwcGVuZExlbiA9IDA7Ci0JdTMyIGRpZmZMZW4gPSAwOwotCi0Jd2hpbGUgKGFwcGVuZExlbiAhPSBNZXNzYWdlTGVuKSB7Ci0JCWRpZmZMZW4gPSBNZXNzYWdlTGVuIC0gYXBwZW5kTGVuOwotCQlpZiAoKHBNRDVfQ1RYLT5CbG9ja0xlbiArIGRpZmZMZW4pIDwgTUQ1X0JMT0NLX1NJWkUpIHsKLQkJCU5kaXNNb3ZlTWVtb3J5KHBNRDVfQ1RYLT5CbG9jayArIHBNRDVfQ1RYLT5CbG9ja0xlbiwKLQkJCQkgICAgICAgTWVzc2FnZSArIGFwcGVuZExlbiwgZGlmZkxlbik7Ci0JCQlwTUQ1X0NUWC0+QmxvY2tMZW4gKz0gZGlmZkxlbjsKLQkJCWFwcGVuZExlbiArPSBkaWZmTGVuOwotCQl9IGVsc2UgewotCQkJTmRpc01vdmVNZW1vcnkocE1ENV9DVFgtPkJsb2NrICsgcE1ENV9DVFgtPkJsb2NrTGVuLAotCQkJCSAgICAgICBNZXNzYWdlICsgYXBwZW5kTGVuLAotCQkJCSAgICAgICBNRDVfQkxPQ0tfU0laRSAtIHBNRDVfQ1RYLT5CbG9ja0xlbik7Ci0JCQlhcHBlbmRMZW4gKz0gKE1ENV9CTE9DS19TSVpFIC0gcE1ENV9DVFgtPkJsb2NrTGVuKTsKLQkJCXBNRDVfQ1RYLT5CbG9ja0xlbiA9IE1ENV9CTE9DS19TSVpFOwotCQkJTUQ1X0hhc2gocE1ENV9DVFgpOwotCQl9CQkvKiBFbmQgb2YgaWYgKi8KLQl9CQkJLyogRW5kIG9mIHdoaWxlICovCi0JcE1ENV9DVFgtPk1lc3NhZ2VMZW4gKz0gTWVzc2FnZUxlbjsKLX0JCQkJLyogRW5kIG9mIE1ENV9BcHBlbmQgKi8KLQotLyoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotUm91dGluZSBEZXNjcmlwdGlvbjoKLSAgICAxLiBBcHBlbmQgYml0IDEgdG8gZW5kIG9mIHRoZSBtZXNzYWdlCi0gICAgMi4gQXBwZW5kIHRoZSBsZW5ndGggb2YgbWVzc2FnZSBpbiByaWdodG1vc3QgNjQgYml0cwotICAgIDMuIFRyYW5zZm9ybSB0aGUgSGFzaCBWYWx1ZSB0byBkaWdlc3QgbWVzc2FnZQotCi1Bcmd1bWVudHM6Ci0gICAgcE1ENV9DVFggICAgICAgIFBvaW50ZXIgdG8gc3RydWN0IHJ0X21kNV9jdHhfc3RydWMKLQotUmV0dXJuIFZhbHVlOgotICAgIGRpZ2VzdE1lc3NhZ2UgICBEaWdlc3QgbWVzc2FnZQotCi1Ob3RlOgotICAgIE5vbmUKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgTUQ1X0VuZChzdHJ1Y3QgcnRfbWQ1X2N0eF9zdHJ1YyAqcE1ENV9DVFgsIHU4IERpZ2VzdE1lc3NhZ2VbXSkKLXsKLQl1MzIgaW5kZXg7Ci0JdTY0IG1lc3NhZ2VfbGVuZ3RoX2JpdHM7Ci0KLQkvKiBhcHBlbmQgMSBiaXRzIHRvIGVuZCBvZiB0aGUgbWVzc2FnZSAqLwotCU5kaXNGaWxsTWVtb3J5KHBNRDVfQ1RYLT5CbG9jayArIHBNRDVfQ1RYLT5CbG9ja0xlbiwgMSwgMHg4MCk7Ci0KLQkvKiA1NSA9IDY0IC0gOCAtIDE6IGFwcGVuZCAxIGJpdCgxIGJ5dGUpIGFuZCBtZXNzYWdlIGxlbmd0aCAoOCBieXRlcykgKi8KLQlpZiAocE1ENV9DVFgtPkJsb2NrTGVuID4gNTUpCi0JCU1ENV9IYXNoKHBNRDVfQ1RYKTsKLQkvKiBFbmQgb2YgaWYgKi8KLQotCS8qIEFwcGVuZCB0aGUgbGVuZ3RoIG9mIG1lc3NhZ2UgaW4gcmlnaHRtb3N0IDY0IGJpdHMgKi8KLQltZXNzYWdlX2xlbmd0aF9iaXRzID0gcE1ENV9DVFgtPk1lc3NhZ2VMZW4gKiA4OwotCW1lc3NhZ2VfbGVuZ3RoX2JpdHMgPSBjcHUybGU2NChtZXNzYWdlX2xlbmd0aF9iaXRzKTsKLQlOZGlzTW92ZU1lbW9yeSgmcE1ENV9DVFgtPkJsb2NrWzU2XSwgJm1lc3NhZ2VfbGVuZ3RoX2JpdHMsIDgpOwotCU1ENV9IYXNoKHBNRDVfQ1RYKTsKLQotCS8qIFJldHVybiBtZXNzYWdlIGRpZ2VzdCwgdHJhbnNmb3JtIHRoZSB1MzIgaGFzaCB2YWx1ZSB0byBieXRlcyAqLwotCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IDQ7IGluZGV4KyspCi0JCXBNRDVfQ1RYLT5IYXNoVmFsdWVbaW5kZXhdID0KLQkJICAgIGNwdTJsZTMyKHBNRDVfQ1RYLT5IYXNoVmFsdWVbaW5kZXhdKTsKLQkvKiBFbmQgb2YgZm9yICovCi0JTmRpc01vdmVNZW1vcnkoRGlnZXN0TWVzc2FnZSwgcE1ENV9DVFgtPkhhc2hWYWx1ZSwgTUQ1X0RJR0VTVF9TSVpFKTsKLX0JCQkJLyogRW5kIG9mIE1ENV9FbmQgKi8KLQotLyoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotUm91dGluZSBEZXNjcmlwdGlvbjoKLSAgICBNRDUgYWxnb3JpdGhtCi0KLUFyZ3VtZW50czoKLSAgICBtZXNzYWdlICAgICAgICAgTWVzc2FnZSBjb250ZXh0Ci0gICAgbWVzc2FnZUxlbiAgICAgIFRoZSBsZW5ndGggb2YgbWVzc2FnZSBpbiBieXRlcwotCi1SZXR1cm4gVmFsdWU6Ci0gICAgZGlnZXN0TWVzc2FnZSAgIERpZ2VzdCBtZXNzYWdlCi0KLU5vdGU6Ci0gICAgTm9uZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBSVF9NRDUoSU4gY29uc3QgdTggTWVzc2FnZVtdLAotCSAgICB1MzIgTWVzc2FnZUxlbiwgdTggRGlnZXN0TWVzc2FnZVtdKQotewotCXN0cnVjdCBydF9tZDVfY3R4X3N0cnVjIG1kNV9jdHg7Ci0KLQlOZGlzWmVyb01lbW9yeSgmbWQ1X2N0eCwgc2l6ZW9mKHN0cnVjdCBydF9tZDVfY3R4X3N0cnVjKSk7Ci0JTUQ1X0luaXQoJm1kNV9jdHgpOwotCU1ENV9BcHBlbmQoJm1kNV9jdHgsIE1lc3NhZ2UsIE1lc3NhZ2VMZW4pOwotCU1ENV9FbmQoJm1kNV9jdHgsIERpZ2VzdE1lc3NhZ2UpOwotfQkJCQkvKiBFbmQgb2YgUlRfTUQ1ICovCi0KLSNlbmRpZiAvKiBNRDVfU1VQUE9SVCAqLwotCi0vKiBFbmQgb2YgY3J5cHRfbWQ1LmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NyeXB0X3NoYTIuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NyeXB0X3NoYTIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE4M2ZiMi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jcnlwdF9zaGEyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjkgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSAiLi4vY3J5cHRfc2hhMi5oIgotCi0vKiBCYXNpYyBvcGVyYXRpb25zICovCi0jZGVmaW5lIFNIUih4LG4pICh4ID4+IG4pCS8qIFNIUih4KV5uLCByaWdodCBzaGlmdCBuIGJpdHMgLCB4IGlzIHctYml0IHdvcmQsIDAgPD0gbiA8PSB3ICovCi0jZGVmaW5lIFJPVFIoeCxuLHcpICgoeCA+PiBuKSB8ICh4IDw8ICh3IC0gbikpKQkvKiBST1RSKHgpXm4sIGNpcmN1bGFyIHJpZ2h0IHNoaWZ0IG4gYml0cyAsIHggaXMgdy1iaXQgd29yZCwgMCA8PSBuIDw9IHcgKi8KLSNkZWZpbmUgUk9UTCh4LG4sdykgKCh4IDw8IG4pIHwgKHggPj4gKHcgLSBuKSkpCS8qIFJPVEwoeClebiwgY2lyY3VsYXIgbGVmdCBzaGlmdCBuIGJpdHMgLCB4IGlzIHctYml0IHdvcmQsIDAgPD0gbiA8PSB3ICovCi0jZGVmaW5lIFJPVFIzMih4LG4pIFJPVFIoeCxuLDMyKQkvKiAzMiBiaXRzIHdvcmQgKi8KLSNkZWZpbmUgUk9UTDMyKHgsbikgUk9UTCh4LG4sMzIpCS8qIDMyIGJpdHMgd29yZCAqLwotCi0vKiBCYXNpYyBmdW5jdGlvbnMgKi8KLSNkZWZpbmUgQ2goeCx5LHopICgoeCAmIHkpIF4gKCh+eCkgJiB6KSkKLSNkZWZpbmUgTWFqKHgseSx6KSAoKHggJiB5KSBeICh4ICYgeikgXiAoeSAmIHopKQotI2RlZmluZSBQYXJpdHkoeCx5LHopICh4IF4geSBeIHopCi0KLSNpZmRlZiBTSEExX1NVUFBPUlQKLS8qIFNIQTEgY29uc3RhbnRzICovCi0jZGVmaW5lIFNIQTFfTUFTSyAweDAwMDAwMDBmCi1zdGF0aWMgY29uc3QgdTMyIFNIQTFfS1s0XSA9IHsKLQkweDVhODI3OTk5VUwsIDB4NmVkOWViYTFVTCwgMHg4ZjFiYmNkY1VMLCAweGNhNjJjMWQ2VUwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgU0hBMV9EZWZhdWx0SGFzaFZhbHVlWzVdID0gewotCTB4Njc0NTIzMDFVTCwgMHhlZmNkYWI4OVVMLCAweDk4YmFkY2ZlVUwsIDB4MTAzMjU0NzZVTCwgMHhjM2QyZTFmMFVMCi19OwotCi0vKgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Sb3V0aW5lIERlc2NyaXB0aW9uOgotICAgIEluaXRpYWwgc3RydWN0IHJ0X3NoYTFfY3R4Ci0KLUFyZ3VtZW50czoKLSAgICBwU0hBX0NUWCAgICAgICAgUG9pbnRlciB0byBzdHJ1Y3QgcnRfc2hhMV9jdHgKLQotUmV0dXJuIFZhbHVlOgotICAgIE5vbmUKLQotTm90ZToKLSAgICBOb25lCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFJUX1NIQTFfSW5pdChzdHJ1Y3QgcnRfc2hhMV9jdHggKnBTSEFfQ1RYKQotewotCU5kaXNNb3ZlTWVtb3J5KHBTSEFfQ1RYLT5IYXNoVmFsdWUsIFNIQTFfRGVmYXVsdEhhc2hWYWx1ZSwKLQkJICAgICAgIHNpemVvZihTSEExX0RlZmF1bHRIYXNoVmFsdWUpKTsKLQlOZGlzWmVyb01lbW9yeShwU0hBX0NUWC0+QmxvY2ssIFNIQTFfQkxPQ0tfU0laRSk7Ci0JcFNIQV9DVFgtPk1lc3NhZ2VMZW4gPSAwOwotCXBTSEFfQ1RYLT5CbG9ja0xlbiA9IDA7Ci19CQkJCS8qIEVuZCBvZiBSVF9TSEExX0luaXQgKi8KLQotLyoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotUm91dGluZSBEZXNjcmlwdGlvbjoKLSAgICBTSEExIGNvbXB1dGF0aW9uIGZvciBvbmUgYmxvY2sgKDUxMiBiaXRzKQotCi1Bcmd1bWVudHM6Ci0gICAgcFNIQV9DVFggICAgICAgIFBvaW50ZXIgdG8gc3RydWN0IHJ0X3NoYTFfY3R4Ci0KLVJldHVybiBWYWx1ZToKLSAgICBOb25lCi0KLU5vdGU6Ci0gICAgTm9uZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBTSEExX0hhc2goc3RydWN0IHJ0X3NoYTFfY3R4ICpwU0hBX0NUWCkKLXsKLQl1MzIgV19pLCB0LCBzOwotCXUzMiBXWzE2XTsKLQl1MzIgYSwgYiwgYywgZCwgZSwgVCwgZl90ID0gMDsKLQotCS8qIFByZXBhcmUgdGhlIG1lc3NhZ2Ugc2NoZWR1bGUsIHtXX2l9LCAwIDwgdCA8IDE1ICovCi0JTmRpc01vdmVNZW1vcnkoVywgcFNIQV9DVFgtPkJsb2NrLCBTSEExX0JMT0NLX1NJWkUpOwotCWZvciAoV19pID0gMDsgV19pIDwgMTY7IFdfaSsrKQotCQlXW1dfaV0gPSBjcHUyYmUzMihXW1dfaV0pOwkvKiBFbmRpYW4gU3dhcCAqLwotCS8qIEVuZCBvZiBmb3IgKi8KLQotCS8qIFNIQTI1NiBoYXNoIGNvbXB1dGF0aW9uICovCi0JLyogSW5pdGlhbGl6ZSB0aGUgd29ya2luZyB2YXJpYWJsZXMgKi8KLQlhID0gcFNIQV9DVFgtPkhhc2hWYWx1ZVswXTsKLQliID0gcFNIQV9DVFgtPkhhc2hWYWx1ZVsxXTsKLQljID0gcFNIQV9DVFgtPkhhc2hWYWx1ZVsyXTsKLQlkID0gcFNIQV9DVFgtPkhhc2hWYWx1ZVszXTsKLQllID0gcFNIQV9DVFgtPkhhc2hWYWx1ZVs0XTsKLQotCS8qIDgwIHJvdW5kcyAqLwotCWZvciAodCA9IDA7IHQgPCA4MDsgdCsrKSB7Ci0JCXMgPSB0ICYgU0hBMV9NQVNLOwotCQlpZiAodCA+IDE1KSB7CS8qIFByZXBhcmUgdGhlIG1lc3NhZ2Ugc2NoZWR1bGUsIHtXX2l9LCAxNiA8IHQgPCA3OSAqLwotCQkJV1tzXSA9Ci0JCQkgICAgKFdbKHMgKyAxMykgJiBTSEExX01BU0tdKSBeIChXWyhzICsgOCkgJiBTSEExX01BU0tdKQotCQkJICAgIF4gKFdbKHMgKyAyKSAmIFNIQTFfTUFTS10pIF4gV1tzXTsKLQkJCVdbc10gPSBST1RMMzIoV1tzXSwgMSk7Ci0JCX0JCS8qIEVuZCBvZiBpZiAqLwotCQlzd2l0Y2ggKHQgLyAyMCkgewotCQljYXNlIDA6Ci0JCQlmX3QgPSBDaChiLCBjLCBkKTsKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQlmX3QgPSBQYXJpdHkoYiwgYywgZCk7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJZl90ID0gTWFqKGIsIGMsIGQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzoKLQkJCWZfdCA9IFBhcml0eShiLCBjLCBkKTsKLQkJCWJyZWFrOwotCQl9CQkvKiBFbmQgb2Ygc3dpdGNoICovCi0JCVQgPSBST1RMMzIoYSwgNSkgKyBmX3QgKyBlICsgU0hBMV9LW3QgLyAyMF0gKyBXW3NdOwotCQllID0gZDsKLQkJZCA9IGM7Ci0JCWMgPSBST1RMMzIoYiwgMzApOwotCQliID0gYTsKLQkJYSA9IFQ7Ci0JfQkJCS8qIEVuZCBvZiBmb3IgKi8KLQotCS8qIENvbXB1dGUgdGhlIGledGggaW50ZXJtZWRpYXRlIGhhc2ggdmFsdWUgSF4oaSkgKi8KLQlwU0hBX0NUWC0+SGFzaFZhbHVlWzBdICs9IGE7Ci0JcFNIQV9DVFgtPkhhc2hWYWx1ZVsxXSArPSBiOwotCXBTSEFfQ1RYLT5IYXNoVmFsdWVbMl0gKz0gYzsKLQlwU0hBX0NUWC0+SGFzaFZhbHVlWzNdICs9IGQ7Ci0JcFNIQV9DVFgtPkhhc2hWYWx1ZVs0XSArPSBlOwotCi0JTmRpc1plcm9NZW1vcnkocFNIQV9DVFgtPkJsb2NrLCBTSEExX0JMT0NLX1NJWkUpOwotCXBTSEFfQ1RYLT5CbG9ja0xlbiA9IDA7Ci19CQkJCS8qIEVuZCBvZiBTSEExX0hhc2ggKi8KLQotLyoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotUm91dGluZSBEZXNjcmlwdGlvbjoKLSAgICBUaGUgbWVzc2FnZSBpcyBhcHBlbmRlZCB0byBibG9jay4gSWYgYmxvY2sgc2l6ZSA+IDY0IGJ5dGVzLCB0aGUgU0hBMV9IYXNoCi13aWxsIGJlIGNhbGxlZC4KLQotQXJndW1lbnRzOgotICAgIHBTSEFfQ1RYICAgICAgICBQb2ludGVyIHRvIHN0cnVjdCBydF9zaGExX2N0eAotICAgIG1lc3NhZ2UgICAgICAgICBNZXNzYWdlIGNvbnRleHQKLSAgICBtZXNzYWdlTGVuICAgICAgVGhlIGxlbmd0aCBvZiBtZXNzYWdlIGluIGJ5dGVzCi0KLVJldHVybiBWYWx1ZToKLSAgICBOb25lCi0KLU5vdGU6Ci0gICAgTm9uZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBTSEExX0FwcGVuZChzdHJ1Y3QgcnRfc2hhMV9jdHggKnBTSEFfQ1RYLAotCQkgSU4gY29uc3QgdTggTWVzc2FnZVtdLCB1MzIgTWVzc2FnZUxlbikKLXsKLQl1MzIgYXBwZW5kTGVuID0gMDsKLQl1MzIgZGlmZkxlbiA9IDA7Ci0KLQl3aGlsZSAoYXBwZW5kTGVuICE9IE1lc3NhZ2VMZW4pIHsKLQkJZGlmZkxlbiA9IE1lc3NhZ2VMZW4gLSBhcHBlbmRMZW47Ci0JCWlmICgocFNIQV9DVFgtPkJsb2NrTGVuICsgZGlmZkxlbikgPCBTSEExX0JMT0NLX1NJWkUpIHsKLQkJCU5kaXNNb3ZlTWVtb3J5KHBTSEFfQ1RYLT5CbG9jayArIHBTSEFfQ1RYLT5CbG9ja0xlbiwKLQkJCQkgICAgICAgTWVzc2FnZSArIGFwcGVuZExlbiwgZGlmZkxlbik7Ci0JCQlwU0hBX0NUWC0+QmxvY2tMZW4gKz0gZGlmZkxlbjsKLQkJCWFwcGVuZExlbiArPSBkaWZmTGVuOwotCQl9IGVsc2UgewotCQkJTmRpc01vdmVNZW1vcnkocFNIQV9DVFgtPkJsb2NrICsgcFNIQV9DVFgtPkJsb2NrTGVuLAotCQkJCSAgICAgICBNZXNzYWdlICsgYXBwZW5kTGVuLAotCQkJCSAgICAgICBTSEExX0JMT0NLX1NJWkUgLSBwU0hBX0NUWC0+QmxvY2tMZW4pOwotCQkJYXBwZW5kTGVuICs9IChTSEExX0JMT0NLX1NJWkUgLSBwU0hBX0NUWC0+QmxvY2tMZW4pOwotCQkJcFNIQV9DVFgtPkJsb2NrTGVuID0gU0hBMV9CTE9DS19TSVpFOwotCQkJU0hBMV9IYXNoKHBTSEFfQ1RYKTsKLQkJfQkJLyogRW5kIG9mIGlmICovCi0JfQkJCS8qIEVuZCBvZiB3aGlsZSAqLwotCXBTSEFfQ1RYLT5NZXNzYWdlTGVuICs9IE1lc3NhZ2VMZW47Ci19CQkJCS8qIEVuZCBvZiBTSEExX0FwcGVuZCAqLwotCi0vKgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Sb3V0aW5lIERlc2NyaXB0aW9uOgotICAgIDEuIEFwcGVuZCBiaXQgMSB0byBlbmQgb2YgdGhlIG1lc3NhZ2UKLSAgICAyLiBBcHBlbmQgdGhlIGxlbmd0aCBvZiBtZXNzYWdlIGluIHJpZ2h0bW9zdCA2NCBiaXRzCi0gICAgMy4gVHJhbnNmb3JtIHRoZSBIYXNoIFZhbHVlIHRvIGRpZ2VzdCBtZXNzYWdlCi0KLUFyZ3VtZW50czoKLSAgICBwU0hBX0NUWCAgICAgICAgUG9pbnRlciB0byBzdHJ1Y3QgcnRfc2hhMV9jdHgKLQotUmV0dXJuIFZhbHVlOgotICAgIGRpZ2VzdE1lc3NhZ2UgICBEaWdlc3QgbWVzc2FnZQotCi1Ob3RlOgotICAgIE5vbmUKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgU0hBMV9FbmQoc3RydWN0IHJ0X3NoYTFfY3R4ICpwU0hBX0NUWCwgdTggRGlnZXN0TWVzc2FnZVtdKQotewotCXUzMiBpbmRleDsKLQl1NjQgbWVzc2FnZV9sZW5ndGhfYml0czsKLQotCS8qIEFwcGVuZCBiaXQgMSB0byBlbmQgb2YgdGhlIG1lc3NhZ2UgKi8KLQlOZGlzRmlsbE1lbW9yeShwU0hBX0NUWC0+QmxvY2sgKyBwU0hBX0NUWC0+QmxvY2tMZW4sIDEsIDB4ODApOwotCi0JLyogNTUgPSA2NCAtIDggLSAxOiBhcHBlbmQgMSBiaXQoMSBieXRlKSBhbmQgbWVzc2FnZSBsZW5ndGggKDggYnl0ZXMpICovCi0JaWYgKHBTSEFfQ1RYLT5CbG9ja0xlbiA+IDU1KQotCQlTSEExX0hhc2gocFNIQV9DVFgpOwotCS8qIEVuZCBvZiBpZiAqLwotCi0JLyogQXBwZW5kIHRoZSBsZW5ndGggb2YgbWVzc2FnZSBpbiByaWdodG1vc3QgNjQgYml0cyAqLwotCW1lc3NhZ2VfbGVuZ3RoX2JpdHMgPSBwU0hBX0NUWC0+TWVzc2FnZUxlbiAqIDg7Ci0JbWVzc2FnZV9sZW5ndGhfYml0cyA9IGNwdTJiZTY0KG1lc3NhZ2VfbGVuZ3RoX2JpdHMpOwotCU5kaXNNb3ZlTWVtb3J5KCZwU0hBX0NUWC0+QmxvY2tbNTZdLCAmbWVzc2FnZV9sZW5ndGhfYml0cywgOCk7Ci0JU0hBMV9IYXNoKHBTSEFfQ1RYKTsKLQotCS8qIFJldHVybiBtZXNzYWdlIGRpZ2VzdCwgdHJhbnNmb3JtIHRoZSB1MzIgaGFzaCB2YWx1ZSB0byBieXRlcyAqLwotCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IDU7IGluZGV4KyspCi0JCXBTSEFfQ1RYLT5IYXNoVmFsdWVbaW5kZXhdID0KLQkJICAgIGNwdTJiZTMyKHBTSEFfQ1RYLT5IYXNoVmFsdWVbaW5kZXhdKTsKLQkvKiBFbmQgb2YgZm9yICovCi0JTmRpc01vdmVNZW1vcnkoRGlnZXN0TWVzc2FnZSwgcFNIQV9DVFgtPkhhc2hWYWx1ZSwgU0hBMV9ESUdFU1RfU0laRSk7Ci19CQkJCS8qIEVuZCBvZiBTSEExX0VuZCAqLwotCi0vKgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Sb3V0aW5lIERlc2NyaXB0aW9uOgotICAgIFNIQTEgYWxnb3JpdGhtCi0KLUFyZ3VtZW50czoKLSAgICBtZXNzYWdlICAgICAgICAgTWVzc2FnZSBjb250ZXh0Ci0gICAgbWVzc2FnZUxlbiAgICAgIFRoZSBsZW5ndGggb2YgbWVzc2FnZSBpbiBieXRlcwotCi1SZXR1cm4gVmFsdWU6Ci0gICAgZGlnZXN0TWVzc2FnZSAgIERpZ2VzdCBtZXNzYWdlCi0KLU5vdGU6Ci0gICAgTm9uZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBSVF9TSEExKElOIGNvbnN0IHU4IE1lc3NhZ2VbXSwKLQkgICAgIHUzMiBNZXNzYWdlTGVuLCB1OCBEaWdlc3RNZXNzYWdlW10pCi17Ci0KLQlzdHJ1Y3QgcnRfc2hhMV9jdHggc2hhX2N0eDsKLQotCU5kaXNaZXJvTWVtb3J5KCZzaGFfY3R4LCBzaXplb2Yoc3RydWN0IHJ0X3NoYTFfY3R4KSk7Ci0JUlRfU0hBMV9Jbml0KCZzaGFfY3R4KTsKLQlTSEExX0FwcGVuZCgmc2hhX2N0eCwgTWVzc2FnZSwgTWVzc2FnZUxlbik7Ci0JU0hBMV9FbmQoJnNoYV9jdHgsIERpZ2VzdE1lc3NhZ2UpOwotfQkJCQkvKiBFbmQgb2YgUlRfU0hBMSAqLwotI2VuZGlmIC8qIFNIQTFfU1VQUE9SVCAqLwotCi0vKiBFbmQgb2YgY3J5cHRfc2hhMi5jICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9kZnMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2Rmcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWNiYjI2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2Rmcy5jCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSAgICBNb2R1bGUgTmFtZToKLSAgICBhcF9kZnMuYwotCi0gICAgQWJzdHJhY3Q6Ci0gICAgU3VwcG9ydCBERlMgZnVuY3Rpb24uCi0KLSAgICBSZXZpc2lvbiBIaXN0b3J5OgotICAgIFdobyAgICAgICBXaGVuICAgICAgICAgICAgV2hhdAotICAgIC0tLS0tLS0tICAtLS0tLS0tLS0tICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQotI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQkJUmFkYXIgY2hhbm5lbCBjaGVjayByb3V0aW5lCi0KLQlBcmd1bWVudHM6Ci0JCXBBZCAJUG9pbnRlciB0byBvdXIgYWRhcHRlcgotCi0JUmV0dXJuIFZhbHVlOgotCQlUUlVFCW5lZWQgdG8gZG8gcmFkYXIgZGV0ZWN0Ci0JCUZBTFNFCW5lZWQgbm90IHRvIGRvIHJhZGFyIGRldGVjdAotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotQk9PTEVBTiBSYWRhckNoYW5uZWxDaGVjayhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHU4IENoKQotewotCWludCBpOwotCUJPT0xFQU4gcmVzdWx0ID0gRkFMU0U7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcEFkLT5DaGFubmVsTGlzdE51bTsgaSsrKSB7Ci0JCWlmIChDaCA9PSBwQWQtPkNoYW5uZWxMaXN0W2ldLkNoYW5uZWwpIHsKLQkJCXJlc3VsdCA9IHBBZC0+Q2hhbm5lbExpc3RbaV0uRGZzUmVxOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vZWVfZWZ1c2UuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2VlX2VmdXNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlZDBiYTQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vZWVfZWZ1c2UuYworKysgL2Rldi9udWxsCkBAIC0xLDM1MSArMCwwIEBACi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFJhbGluayBUZWNoIEluYy4KLSAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKLSAqIEhzaW5jaHUgQ291bnR5IDMwMiwKLSAqIFRhaXdhbiwgUi5PLkMuCi0gKgotICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotCU1vZHVsZSBOYW1lOgotCWVlX2VmdXNlLmMKLQotCUFic3RyYWN0OgotCU1pbmlwb3J0IGdlbmVyaWMgcG9ydGlvbiBoZWFkZXIgZmlsZQotCi0JUmV2aXNpb24gSGlzdG9yeToKLQlXaG8gICAgICAgICBXaGVuICAgICAgICAgIFdoYXQKLQktLS0tLS0tLSAgICAtLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSovCi0KLSNpbmNsdWRlCSIuLi9ydF9jb25maWcuaCIKLQotI2RlZmluZSBFRlVTRV9VU0FHRV9NQVBfU1RBUlQJMHgyZDAKLSNkZWZpbmUgRUZVU0VfVVNBR0VfTUFQX0VORAkJMHgyZmMKLSNkZWZpbmUgRUZVU0VfVVNBR0VfTUFQX1NJWkUJNDUKLQotI2RlZmluZSBFRlVTRV9FRVBST01fREVGVUxUX0ZJTEUJIlJUMzB4eEVFUFJPTS5iaW4iCi0jZGVmaW5lIE1BWF9FRVBST01fQklOX0ZJTEVfU0laRQkxMDI0Ci0KLSNkZWZpbmUgRUZVU0VfVEFHCQkJCTB4MmZlCi0KLXR5cGVkZWYgdW5pb24gX0VGVVNFX0NUUkxfU1RSVUMgewotCXN0cnVjdCB7Ci0JCXUzMiBFRlNST01fQU9VVDo2OwotCQl1MzIgRUZTUk9NX01PREU6MjsKLQkJdTMyIEVGU1JPTV9MRE9fT0ZGX1RJTUU6NjsKLQkJdTMyIEVGU1JPTV9MRE9fT05fVElNRToyOwotCQl1MzIgRUZTUk9NX0FJTjoxMDsKLQkJdTMyIFJFU0VSVkVEOjQ7Ci0JCXUzMiBFRlNST01fS0lDSzoxOwotCQl1MzIgU0VMX0VGVVNFOjE7Ci0JfSBmaWVsZDsKLQl1MzIgd29yZDsKLX0gRUZVU0VfQ1RSTF9TVFJVQywgKlBFRlVTRV9DVFJMX1NUUlVDOwotCi0vKgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCi0JQXJndW1lbnRzOgotCi0JUmV0dXJuIFZhbHVlOgotCi0JTm90ZToKLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdTggZUZ1c2VSZWFkUmVnaXN0ZXJzKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSB1MTYgT2Zmc2V0LCB1MTYgTGVuZ3RoLCB1MTYgKiBwRGF0YSkKLXsKLQlFRlVTRV9DVFJMX1NUUlVDIGVGdXNlQ3RybFN0cnVjOwotCWludCBpOwotCXUxNiBlZnVzZURhdGFPZmZzZXQ7Ci0JdTMyIGRhdGE7Ci0KLQlSVE1QX0lPX1JFQUQzMihwQWQsIEVGVVNFX0NUUkwsICZlRnVzZUN0cmxTdHJ1Yy53b3JkKTsKLQotCS8qU3RlcDAuIFdyaXRlIDEwLWJpdCBvZiBhZGRyZXNzIHRvIEVGU1JPTV9BSU4gKDB4NTgwLCBiaXQyNTpiaXQxNikuIFRoZSBhZGRyZXNzIG11c3QgYmUgMTYtYnl0ZSBhbGlnbm1lbnQuICovCi0JLypVc2UgdGhlIGVlcHJvbSBsb2dpY2FsIGFkZHJlc3MgYW5kIGNvdmVydCB0byBhZGRyZXNzIHRvIGJsb2NrIG51bWJlciAqLwotCWVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9BSU4gPSBPZmZzZXQgJiAweGZmZjA7Ci0KLQkvKlN0ZXAxLiBXcml0ZSBFRlNST01fTU9ERSAoMHg1ODAsIGJpdDc6Yml0NikgdG8gMC4gKi8KLQllRnVzZUN0cmxTdHJ1Yy5maWVsZC5FRlNST01fTU9ERSA9IDA7Ci0KLQkvKlN0ZXAyLiBXcml0ZSBFRlNST01fS0lDSyAoMHg1ODAsIGJpdDMwKSB0byAxIHRvIGtpY2stb2ZmIHBoeXNpY2FsIHJlYWQgcHJvY2VkdXJlLiAqLwotCWVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9LSUNLID0gMTsKLQotCU5kaXNNb3ZlTWVtb3J5KCZkYXRhLCAmZUZ1c2VDdHJsU3RydWMsIDQpOwotCVJUTVBfSU9fV1JJVEUzMihwQWQsIEVGVVNFX0NUUkwsIGRhdGEpOwotCi0JLypTdGVwMy4gUG9sbGluZyBFRlNST01fS0lDSygweDU4MCwgYml0MzApIHVudGlsIGl0IGJlY29tZSAwIGFnYWluLiAqLwotCWkgPSAwOwotCXdoaWxlIChpIDwgNTAwKSB7Ci0JCS8qcnRtcC5Id01lbW9yeVJlYWREd29yZChFRlVTRV9DVFJMLCAoRFdPUkQgKikgJmVGdXNlQ3RybFN0cnVjLCA0KTsgKi8KLQkJUlRNUF9JT19SRUFEMzIocEFkLCBFRlVTRV9DVFJMLCAmZUZ1c2VDdHJsU3RydWMud29yZCk7Ci0JCWlmIChlRnVzZUN0cmxTdHJ1Yy5maWVsZC5FRlNST01fS0lDSyA9PSAwKSB7Ci0JCQlicmVhazsKLQkJfQotCQlSVE1QdXNlY0RlbGF5KDIpOwotCQlpKys7Ci0JfQotCi0JLyppZiBFRlNST01fQU9VVCBpcyBub3QgZm91bmQgaW4gcGh5c2ljYWwgYWRkcmVzcywgd3JpdGUgMHhmZmZmICovCi0JaWYgKGVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9BT1VUID09IDB4M2YpIHsKLQkJZm9yIChpID0gMDsgaSA8IExlbmd0aCAvIDI7IGkrKykKLQkJCSoocERhdGEgKyAyICogaSkgPSAweGZmZmY7Ci0JfSBlbHNlIHsKLQkJLypTdGVwNC4gUmVhZCAxNi1ieXRlIG9mIGRhdGEgZnJvbSBFRlVTRV9EQVRBMC0zICgweDU5MC0weDU5QykgKi8KLQkJZWZ1c2VEYXRhT2Zmc2V0ID0gRUZVU0VfREFUQTMgLSAoT2Zmc2V0ICYgMHhDKTsKLQkJLypkYXRhIGhvbGQgNCBieXRlcyBkYXRhLiAqLwotCQkvKkluIFJUTVBfSU9fUkVBRDMyIHdpbGwgYXV0b21hdGljYWxseSBleGVjdXRlIDMyLWJ5dGVzIHN3YXBwaW5nICovCi0JCVJUTVBfSU9fUkVBRDMyKHBBZCwgZWZ1c2VEYXRhT2Zmc2V0LCAmZGF0YSk7Ci0JCS8qRGVjaWRlIHRoZSB1cHBlciAyIGJ5dGVzIG9yIHRoZSBib3R0b20gMiBieXRlcy4gKi8KLQkJLyogTGl0dGxlLWVuZGlhbiAgICAgICAgICAgICAgICBTICAgICAgIHwgICAgICAgUyAgICAgICBCaWctZW5kaWFuICovCi0JCS8qIGFkZHIgMyAgICAgICAyICAgICAgIDEgICAgICAgMCAgICAgICB8ICAgICAgIDAgICAgICAgMSAgICAgICAyICAgICAgIDMgKi8KLQkJLyogT3JpLVYgICAgICAgIEQgICAgICAgQyAgICAgICBCICAgICAgIEEgICAgICAgfCAgICAgICBBICAgICAgIEIgICAgICAgQyAgICAgICBEICovCi0JCS8qQWZ0ZXIgc3dhcHBpbmcgKi8KLQkJLyogICAgICAgICAgICAgIEQgICAgICAgQyAgICAgICBCICAgICAgIEEgICAgICAgfCAgICAgICBEICAgICAgIEMgICAgICAgQiAgICAgICBBICovCi0JCS8qUmV0dXJuIDItYnl0ZXMgKi8KLQkJLypUaGUgcmV0dXJuIGJ5dGUgc3RhdHJzIGZyb20gUy4gVGhlcmVmb3JlLCB0aGUgbGl0dGxlLWVuZGlhbiB3aWxsIHJldHVybiBCQSwgdGhlIEJpZy1lbmRpYW4gd2lsbCByZXR1cm4gREMuICovCi0JCS8qRm9yIHJldHVybmluZyB0aGUgYm90dG9tIDIgYnl0ZXMsIHRoZSBCaWctZW5kaWFuIHNob3VsZCBzaGlmdCByaWdodCAyLWJ5dGVzLiAqLwotCQlkYXRhID0gZGF0YSA+PiAoOCAqIChPZmZzZXQgJiAweDMpKTsKLQotCQlOZGlzTW92ZU1lbW9yeShwRGF0YSwgJmRhdGEsIExlbmd0aCk7Ci0JfQotCi0JcmV0dXJuICh1OCllRnVzZUN0cmxTdHJ1Yy5maWVsZC5FRlNST01fQU9VVDsKLQotfQotCi0vKgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCi0JQXJndW1lbnRzOgotCi0JUmV0dXJuIFZhbHVlOgotCi0JTm90ZToKLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBlRnVzZVBoeXNpY2FsUmVhZFJlZ2lzdGVycyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJdTE2IE9mZnNldCwKLQkJCQl1MTYgTGVuZ3RoLCB1MTYgKiBwRGF0YSkKLXsKLQlFRlVTRV9DVFJMX1NUUlVDIGVGdXNlQ3RybFN0cnVjOwotCWludCBpOwotCXUxNiBlZnVzZURhdGFPZmZzZXQ7Ci0JdTMyIGRhdGE7Ci0KLQlSVE1QX0lPX1JFQUQzMihwQWQsIEVGVVNFX0NUUkwsICZlRnVzZUN0cmxTdHJ1Yy53b3JkKTsKLQotCS8qU3RlcDAuIFdyaXRlIDEwLWJpdCBvZiBhZGRyZXNzIHRvIEVGU1JPTV9BSU4gKDB4NTgwLCBiaXQyNTpiaXQxNikuIFRoZSBhZGRyZXNzIG11c3QgYmUgMTYtYnl0ZSBhbGlnbm1lbnQuICovCi0JZUZ1c2VDdHJsU3RydWMuZmllbGQuRUZTUk9NX0FJTiA9IE9mZnNldCAmIDB4ZmZmMDsKLQotCS8qU3RlcDEuIFdyaXRlIEVGU1JPTV9NT0RFICgweDU4MCwgYml0NzpiaXQ2KSB0byAxLiAqLwotCS8qUmVhZCBpbiBwaHlzaWNhbCB2aWV3ICovCi0JZUZ1c2VDdHJsU3RydWMuZmllbGQuRUZTUk9NX01PREUgPSAxOwotCi0JLypTdGVwMi4gV3JpdGUgRUZTUk9NX0tJQ0sgKDB4NTgwLCBiaXQzMCkgdG8gMSB0byBraWNrLW9mZiBwaHlzaWNhbCByZWFkIHByb2NlZHVyZS4gKi8KLQllRnVzZUN0cmxTdHJ1Yy5maWVsZC5FRlNST01fS0lDSyA9IDE7Ci0KLQlOZGlzTW92ZU1lbW9yeSgmZGF0YSwgJmVGdXNlQ3RybFN0cnVjLCA0KTsKLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBFRlVTRV9DVFJMLCBkYXRhKTsKLQotCS8qU3RlcDMuIFBvbGxpbmcgRUZTUk9NX0tJQ0soMHg1ODAsIGJpdDMwKSB1bnRpbCBpdCBiZWNvbWUgMCBhZ2Fpbi4gKi8KLQlpID0gMDsKLQl3aGlsZSAoaSA8IDUwMCkgewotCQlSVE1QX0lPX1JFQUQzMihwQWQsIEVGVVNFX0NUUkwsICZlRnVzZUN0cmxTdHJ1Yy53b3JkKTsKLQkJaWYgKGVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9LSUNLID09IDApCi0JCQlicmVhazsKLQkJUlRNUHVzZWNEZWxheSgyKTsKLQkJaSsrOwotCX0KLQotCS8qU3RlcDQuIFJlYWQgMTYtYnl0ZSBvZiBkYXRhIGZyb20gRUZVU0VfREFUQTAtMyAoMHg1OUMtMHg1OTApICovCi0JLypCZWNhdXNlIHRoZSBzaXplIG9mIGVhY2ggRUZVU0VfREFUQSBpcyA0IEJ5dGVzLCB0aGUgc2l6ZSBvZiBhZGRyZXNzIG9mIGVhY2ggaXMgMiBiaXRzLiAqLwotCS8qVGhlIHByZXZpb3VzIDIgYml0cyBpcyB0aGUgRUZVU0VfREFUQSBudW1iZXIsIHRoZSBsYXN0IDIgYml0cyBpcyB1c2VkIHRvIGRlY2lkZSB3aGljaCBieXRlcyAqLwotCS8qRGVjaWRlIHdoaWNoIEVGVVNFX0RBVEEgdG8gcmVhZCAqLwotCS8qNTkwOkYgRSBEIEMgKi8KLQkvKjU5NDpCIEEgOSA4ICovCi0JLyo1OTg6NyA2IDUgNCAqLwotCS8qNTlDOjMgMiAxIDAgKi8KLQllZnVzZURhdGFPZmZzZXQgPSBFRlVTRV9EQVRBMyAtIChPZmZzZXQgJiAweEMpOwotCi0JUlRNUF9JT19SRUFEMzIocEFkLCBlZnVzZURhdGFPZmZzZXQsICZkYXRhKTsKLQotCWRhdGEgPSBkYXRhID4+ICg4ICogKE9mZnNldCAmIDB4MykpOwotCi0JTmRpc01vdmVNZW1vcnkocERhdGEsICZkYXRhLCBMZW5ndGgpOwotCi19Ci0KLS8qCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0KLQlBcmd1bWVudHM6Ci0KLQlSZXR1cm4gVmFsdWU6Ci0KLQlOb3RlOgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi1zdGF0aWMgdm9pZCBlRnVzZVJlYWRQaHlzaWNhbChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgICB1MTYgKmxwSW5CdWZmZXIsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIG5JbkJ1ZmZlclNpemUsCi0JCQkgICAgICB1MTYgKmxwT3V0QnVmZmVyLCB1bnNpZ25lZCBsb25nIG5PdXRCdWZmZXJTaXplKQotewotCXUxNiAqcEluQnVmID0gKHUxNiAqKSBscEluQnVmZmVyOwotCXUxNiAqcE91dEJ1ZiA9ICh1MTYgKikgbHBPdXRCdWZmZXI7Ci0KLQl1MTYgT2Zmc2V0ID0gcEluQnVmWzBdOwkvKmFkZHIgKi8KLQl1MTYgTGVuZ3RoID0gcEluQnVmWzFdOwkvKmxlbmd0aCAqLwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IExlbmd0aDsgaSArPSAyKSB7Ci0JCWVGdXNlUGh5c2ljYWxSZWFkUmVnaXN0ZXJzKHBBZCwgT2Zmc2V0ICsgaSwgMiwgJnBPdXRCdWZbaSAvIDJdKTsKLQl9Ci19Ci0KLS8qCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0KLQlBcmd1bWVudHM6Ci0KLQlSZXR1cm4gVmFsdWU6Ci0KLQlOb3RlOgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi1pbnQgc2V0X2VGdXNlR2V0RnJlZUJsb2NrQ291bnRfUHJvYyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIGNoYXIgKmFyZykKLXsKLQl1MTYgaTsKLQl1MTYgTG9naWNhbEFkZHJlc3M7Ci0JdTE2IGVmdXNlZnJlZW51bSA9IDA7Ci0JaWYgKCFwQWQtPmJVc2VFZnVzZSkKLQkJcmV0dXJuIEZBTFNFOwotCWZvciAoaSA9IEVGVVNFX1VTQUdFX01BUF9TVEFSVDsgaSA8PSBFRlVTRV9VU0FHRV9NQVBfRU5EOyBpICs9IDIpIHsKLQkJZUZ1c2VQaHlzaWNhbFJlYWRSZWdpc3RlcnMocEFkLCBpLCAyLCAmTG9naWNhbEFkZHJlc3MpOwotCQlpZiAoKExvZ2ljYWxBZGRyZXNzICYgMHhmZikgPT0gMCkgewotCQkJZWZ1c2VmcmVlbnVtID0gKHU4KShFRlVTRV9VU0FHRV9NQVBfRU5EIC0gaSArIDEpOwotCQkJYnJlYWs7Ci0JCX0gZWxzZSBpZiAoKChMb2dpY2FsQWRkcmVzcyA+PiA4KSAmIDB4ZmYpID09IDApIHsKLQkJCWVmdXNlZnJlZW51bSA9ICh1OCkoRUZVU0VfVVNBR0VfTUFQX0VORCAtIGkpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoaSA9PSBFRlVTRV9VU0FHRV9NQVBfRU5EKQotCQkJZWZ1c2VmcmVlbnVtID0gMDsKLQl9Ci0JcHJpbnRrKEtFUk5fREVCVUcgImVmdXNlRnJlZU51bWJlciBpcyAlZFxuIiwgZWZ1c2VmcmVlbnVtKTsKLQlyZXR1cm4gVFJVRTsKLX0KLQotaW50IHNldF9lRnVzZWR1bXBfUHJvYyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIGNoYXIgKmFyZykKLXsKLQl1MTYgSW5CdWZbM107Ci0JaW50IGkgPSAwOwotCWlmICghcEFkLT5iVXNlRWZ1c2UpCi0JCXJldHVybiBGQUxTRTsKLQotCXByaW50ayhLRVJOX0RFQlVHICJCbG9jayAwOiAiKTsKLQotCWZvciAoaSA9IDA7IGkgPCBFRlVTRV9VU0FHRV9NQVBfRU5EIC8gMjsgaSsrKSB7Ci0JCUluQnVmWzBdID0gMiAqIGk7Ci0JCUluQnVmWzFdID0gMjsKLQkJSW5CdWZbMl0gPSAweDA7Ci0KLQkJZUZ1c2VSZWFkUGh5c2ljYWwocEFkLCAmSW5CdWZbMF0sIDQsICZJbkJ1ZlsyXSwgMik7Ci0JCWlmIChpICYmIGkgJSA0ID09IDApIHsKLQkJCXByaW50ayhLRVJOX0NPTlQgIlxuIik7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiQmxvY2sgJXg6IiwgaSAvIDgpOwotCQl9Ci0JCXByaW50ayhLRVJOX0NPTlQgIiUwNHggIiwgSW5CdWZbMl0pOwotCX0KLQlwcmludGsoS0VSTl9DT05UICJcbiIpOwotCi0JcmV0dXJuIFRSVUU7Ci19Ci0KLWludCBydG1wX2VlX2VmdXNlX3JlYWQxNihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgdTE2IE9mZnNldCwgdTE2ICogcFZhbHVlKQotewotCWVGdXNlUmVhZFJlZ2lzdGVycyhwQWQsIE9mZnNldCwgMiwgcFZhbHVlKTsKLQlyZXR1cm4gKCpwVmFsdWUpOwotfQotCi1pbnQgUnRtcEVmdXNlU3VwcG9ydENoZWNrKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQl1MTYgdmFsdWU7Ci0KLQlpZiAoSVNfUlQzMHh4KHBBZCkpIHsKLQkJZUZ1c2VQaHlzaWNhbFJlYWRSZWdpc3RlcnMocEFkLCBFRlVTRV9UQUcsIDIsICZ2YWx1ZSk7Ci0JCXBBZC0+RUZ1c2VUYWcgPSAodmFsdWUgJiAweGZmKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgZUZ1c2VHZXRGcmVlQmxvY2tDb3VudChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHUzMiAqRWZ1c2VGcmVlQmxvY2spCi17Ci0JdTE2IGk7Ci0JdTE2IExvZ2ljYWxBZGRyZXNzOwotCWlmICghcEFkLT5iVXNlRWZ1c2UpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJlRnVzZUdldEZyZWVCbG9ja0NvdW50IE9ubHkgc3VwcG9ydHMgZWZ1c2UgTW9kZVxuIikpOwotCQlyZXR1cm47Ci0JfQotCWZvciAoaSA9IEVGVVNFX1VTQUdFX01BUF9TVEFSVDsgaSA8PSBFRlVTRV9VU0FHRV9NQVBfRU5EOyBpICs9IDIpIHsKLQkJZUZ1c2VQaHlzaWNhbFJlYWRSZWdpc3RlcnMocEFkLCBpLCAyLCAmTG9naWNhbEFkZHJlc3MpOwotCQlpZiAoKExvZ2ljYWxBZGRyZXNzICYgMHhmZikgPT0gMCkgewotCQkJKkVmdXNlRnJlZUJsb2NrID0gKHU4KShFRlVTRV9VU0FHRV9NQVBfRU5EIC0gaSArIDEpOwotCQkJYnJlYWs7Ci0JCX0gZWxzZSBpZiAoKChMb2dpY2FsQWRkcmVzcyA+PiA4KSAmIDB4ZmYpID09IDApIHsKLQkJCSpFZnVzZUZyZWVCbG9jayA9ICh1OCkoRUZVU0VfVVNBR0VfTUFQX0VORCAtIGkpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoaSA9PSBFRlVTRV9VU0FHRV9NQVBfRU5EKQotCQkJKkVmdXNlRnJlZUJsb2NrID0gMDsKLQl9Ci0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoImVGdXNlR2V0RnJlZUJsb2NrQ291bnQgaXMgMHgleFxuIiwgKkVmdXNlRnJlZUJsb2NrKSk7Ci19Ci0KLWludCBlRnVzZV9pbml0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQl1MzIgRWZ1c2VGcmVlQmxvY2sgPSAwOwotCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkgKCJOVk0gaXMgRWZ1c2UgYW5kIGl0cyBzaXplID0leFsleC0leF0gXG4iLAotCQkgIEVGVVNFX1VTQUdFX01BUF9TSVpFLCBFRlVTRV9VU0FHRV9NQVBfU1RBUlQsCi0JCSAgRUZVU0VfVVNBR0VfTUFQX0VORCkpOwotCWVGdXNlR2V0RnJlZUJsb2NrQ291bnQocEFkLCAmRWZ1c2VGcmVlQmxvY2spOwotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9lZV9wcm9tLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9lZV9wcm9tLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwODM3NDAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vZWVfcHJvbS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTk3ICswLDAgQEAKLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUmFsaW5rIFRlY2ggSW5jLgotICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAotICogSHNpbmNodSBDb3VudHkgMzAyLAotICogVGFpd2FuLCBSLk8uQy4KLSAqCi0gKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0JTW9kdWxlIE5hbWU6Ci0JZWVfcHJvbS5jCi0KLQlBYnN0cmFjdDoKLQlNaW5pcG9ydCBnZW5lcmljIHBvcnRpb24gaGVhZGVyIGZpbGUKLQotCVJldmlzaW9uIEhpc3Rvcnk6Ci0JV2hvICAgICAgICAgV2hlbiAgICAgICAgICBXaGF0Ci0JLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotCi0jaW5jbHVkZQkiLi4vcnRfY29uZmlnLmgiCi0KLS8qIElSUUwgPSBQQVNTSVZFX0xFVkVMICovCi1zdGF0aWMgaW5saW5lIHZvaWQgUmFpc2VDbG9jayhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHUzMiAqIHgpCi17Ci0JKnggPSAqeCB8IEVFU0s7Ci0JUlRNUF9JT19XUklURTMyKHBBZCwgRTJQUk9NX0NTUiwgKngpOwotCVJUTVB1c2VjRGVsYXkoMSk7CS8qIE1heCBmcmVxdWVuY3kgPSAxTUh6IGluIFNwZWMuIGRlZmluaXRpb24gKi8KLX0KLQotLyogSVJRTCA9IFBBU1NJVkVfTEVWRUwgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBMb3dlckNsb2NrKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTMyICogeCkKLXsKLQkqeCA9ICp4ICYgfkVFU0s7Ci0JUlRNUF9JT19XUklURTMyKHBBZCwgRTJQUk9NX0NTUiwgKngpOwotCVJUTVB1c2VjRGVsYXkoMSk7Ci19Ci0KLS8qIElSUUwgPSBQQVNTSVZFX0xFVkVMICovCi1zdGF0aWMgaW5saW5lIHUxNiBTaGlmdEluQml0cyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0JdTMyIHgsIGk7Ci0JdTE2IGRhdGEgPSAwOwotCi0JUlRNUF9JT19SRUFEMzIocEFkLCBFMlBST01fQ1NSLCAmeCk7Ci0KLQl4ICY9IH4oRUVETyB8IEVFREkpOwotCi0JZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKLQkJZGF0YSA9IGRhdGEgPDwgMTsKLQkJUmFpc2VDbG9jayhwQWQsICZ4KTsKLQotCQlSVE1QX0lPX1JFQUQzMihwQWQsIEUyUFJPTV9DU1IsICZ4KTsKLQkJTG93ZXJDbG9jayhwQWQsICZ4KTsJLypwcmV2ZW50IHJlYWQgZmFpbGVkICovCi0KLQkJeCAmPSB+KEVFREkpOwotCQlpZiAoeCAmIEVFRE8pCi0JCQlkYXRhIHw9IDE7Ci0JfQotCi0JcmV0dXJuIGRhdGE7Ci19Ci0KLS8qIElSUUwgPSBQQVNTSVZFX0xFVkVMICovCi1zdGF0aWMgaW5saW5lIHZvaWQgU2hpZnRPdXRCaXRzKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQl1MTYgZGF0YSwgdTE2IGNvdW50KQotewotCXUzMiB4LCBtYXNrOwotCi0JbWFzayA9IDB4MDEgPDwgKGNvdW50IC0gMSk7Ci0JUlRNUF9JT19SRUFEMzIocEFkLCBFMlBST01fQ1NSLCAmeCk7Ci0KLQl4ICY9IH4oRUVETyB8IEVFREkpOwotCi0JZG8gewotCQl4ICY9IH5FRURJOwotCQlpZiAoZGF0YSAmIG1hc2spCi0JCQl4IHw9IEVFREk7Ci0KLQkJUlRNUF9JT19XUklURTMyKHBBZCwgRTJQUk9NX0NTUiwgeCk7Ci0KLQkJUmFpc2VDbG9jayhwQWQsICZ4KTsKLQkJTG93ZXJDbG9jayhwQWQsICZ4KTsKLQotCQltYXNrID0gbWFzayA+PiAxOwotCX0gd2hpbGUgKG1hc2spOwotCi0JeCAmPSB+RUVESTsKLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBFMlBST01fQ1NSLCB4KTsKLX0KLQotLyogSVJRTCA9IFBBU1NJVkVfTEVWRUwgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBFRXByb21DbGVhbnVwKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQl1MzIgeDsKLQotCVJUTVBfSU9fUkVBRDMyKHBBZCwgRTJQUk9NX0NTUiwgJngpOwotCi0JeCAmPSB+KEVFQ1MgfCBFRURJKTsKLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBFMlBST01fQ1NSLCB4KTsKLQotCVJhaXNlQ2xvY2socEFkLCAmeCk7Ci0JTG93ZXJDbG9jayhwQWQsICZ4KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIEVXRU4oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCXUzMiB4OwotCi0JLyogcmVzZXQgYml0cyBhbmQgc2V0IEVFQ1MgKi8KLQlSVE1QX0lPX1JFQUQzMihwQWQsIEUyUFJPTV9DU1IsICZ4KTsKLQl4ICY9IH4oRUVESSB8IEVFRE8gfCBFRVNLKTsKLQl4IHw9IEVFQ1M7Ci0JUlRNUF9JT19XUklURTMyKHBBZCwgRTJQUk9NX0NTUiwgeCk7Ci0KLQkvKiBraWNrIGEgcHVsc2UgKi8KLQlSYWlzZUNsb2NrKHBBZCwgJngpOwotCUxvd2VyQ2xvY2socEFkLCAmeCk7Ci0KLQkvKiBvdXRwdXQgdGhlIHJlYWRfb3Bjb2RlIGFuZCBzaXggcHVsc2UgaW4gdGhhdCBvcmRlciAqLwotCVNoaWZ0T3V0Qml0cyhwQWQsIEVFUFJPTV9FV0VOX09QQ09ERSwgNSk7Ci0JU2hpZnRPdXRCaXRzKHBBZCwgMCwgNik7Ci0KLQlFRXByb21DbGVhbnVwKHBBZCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBFV0RTKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQl1MzIgeDsKLQotCS8qIHJlc2V0IGJpdHMgYW5kIHNldCBFRUNTICovCi0JUlRNUF9JT19SRUFEMzIocEFkLCBFMlBST01fQ1NSLCAmeCk7Ci0JeCAmPSB+KEVFREkgfCBFRURPIHwgRUVTSyk7Ci0JeCB8PSBFRUNTOwotCVJUTVBfSU9fV1JJVEUzMihwQWQsIEUyUFJPTV9DU1IsIHgpOwotCi0JLyoga2ljayBhIHB1bHNlICovCi0JUmFpc2VDbG9jayhwQWQsICZ4KTsKLQlMb3dlckNsb2NrKHBBZCwgJngpOwotCi0JLyogb3V0cHV0IHRoZSByZWFkX29wY29kZSBhbmQgc2l4IHB1bHNlIGluIHRoYXQgb3JkZXIgKi8KLQlTaGlmdE91dEJpdHMocEFkLCBFRVBST01fRVdEU19PUENPREUsIDUpOwotCVNoaWZ0T3V0Qml0cyhwQWQsIDAsIDYpOwotCi0JRUVwcm9tQ2xlYW51cChwQWQpOwotfQotCi0vKiBJUlFMID0gUEFTU0lWRV9MRVZFTCAqLwotaW50IHJ0bXBfZWVfcHJvbV9yZWFkMTYoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJdTE2IE9mZnNldCwgdTE2ICogcFZhbHVlKQotewotCXUzMiB4OwotCXUxNiBkYXRhOwotCi0JT2Zmc2V0IC89IDI7Ci0JLyogcmVzZXQgYml0cyBhbmQgc2V0IEVFQ1MgKi8KLQlSVE1QX0lPX1JFQUQzMihwQWQsIEUyUFJPTV9DU1IsICZ4KTsKLQl4ICY9IH4oRUVESSB8IEVFRE8gfCBFRVNLKTsKLQl4IHw9IEVFQ1M7Ci0JUlRNUF9JT19XUklURTMyKHBBZCwgRTJQUk9NX0NTUiwgeCk7Ci0KLQkvKiBwYXRjaCBjYW4gbm90IGFjY2VzcyBlLUZ1c2UgaXNzdWUgKi8KLQlpZiAoIShJU19SVDMwOTAocEFkKSB8fCBJU19SVDM1NzIocEFkKSB8fCBJU19SVDMzOTAocEFkKSkpIHsKLQkJLyoga2ljayBhIHB1bHNlICovCi0JCVJhaXNlQ2xvY2socEFkLCAmeCk7Ci0JCUxvd2VyQ2xvY2socEFkLCAmeCk7Ci0JfQotCS8qIG91dHB1dCB0aGUgcmVhZF9vcGNvZGUgYW5kIHJlZ2lzdGVyIG51bWJlciBpbiB0aGF0IG9yZGVyICovCi0JU2hpZnRPdXRCaXRzKHBBZCwgRUVQUk9NX1JFQURfT1BDT0RFLCAzKTsKLQlTaGlmdE91dEJpdHMocEFkLCBPZmZzZXQsIHBBZC0+RUVQUk9NQWRkcmVzc051bSk7Ci0KLQkvKiBOb3cgcmVhZCB0aGUgZGF0YSAoMTYgYml0cykgaW4gZnJvbSB0aGUgc2VsZWN0ZWQgRUVQUk9NIHdvcmQgKi8KLQlkYXRhID0gU2hpZnRJbkJpdHMocEFkKTsKLQotCUVFcHJvbUNsZWFudXAocEFkKTsKLQotCSpwVmFsdWUgPSBkYXRhOwotCi0JcmV0dXJuIE5ESVNfU1RBVFVTX1NVQ0NFU1M7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9lZXByb20uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2VlcHJvbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDY3MDA3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2VlcHJvbS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLQlNb2R1bGUgTmFtZToKLQllZXByb20uYwotCi0JQWJzdHJhY3Q6Ci0KLQlSZXZpc2lvbiBIaXN0b3J5OgotCVdobwkJCVdoZW4JCQlXaGF0Ci0JLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCU5hbWUJCURhdGUJCQlNb2RpZmljYXRpb24gbG9ncwotKi8KLSNpbmNsdWRlICIuLi9ydF9jb25maWcuaCIKLQotaW50IFJ0bXBDaGlwT3BzRWVwcm9tSG9vayhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIGludCBpbmZUeXBlKQotewotCXN0cnVjdCBydF9ydG1wX2NoaXBfb3AgKnBDaGlwT3BzID0gJnBBZC0+Y2hpcE9wczsKLSNpZmRlZiBSVDMweHgKLSNpZmRlZiBSVE1QX0VGVVNFX1NVUFBPUlQKLQl1MzIgZUZ1c2VDdHJsLCBNYWNDc3IwOwotCWludCBpbmRleDsKLQotCWluZGV4ID0gMDsKLQlkbyB7Ci0JCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX0NTUjAsICZNYWNDc3IwKTsKLQkJcEFkLT5NQUNWZXJzaW9uID0gTWFjQ3NyMDsKLQotCQlpZiAoKHBBZC0+TUFDVmVyc2lvbiAhPSAweDAwKQotCQkgICAgJiYgKHBBZC0+TUFDVmVyc2lvbiAhPSAweEZGRkZGRkZGKSkKLQkJCWJyZWFrOwotCi0JCVJUTVB1c2VjRGVsYXkoMTApOwotCX0gd2hpbGUgKGluZGV4KysgPCAxMDApOwotCi0JcEFkLT5iVXNlRWZ1c2UgPSBGQUxTRTsKLQlSVE1QX0lPX1JFQUQzMihwQWQsIEVGVVNFX0NUUkwsICZlRnVzZUN0cmwpOwotCXBBZC0+YlVzZUVmdXNlID0gKChlRnVzZUN0cmwgJiAweDgwMDAwMDAwKSA9PSAweDgwMDAwMDAwKSA/IDEgOiAwOwotCWlmIChwQWQtPmJVc2VFZnVzZSkgewotCQlwQ2hpcE9wcy0+ZWVpbml0ID0gZUZ1c2VfaW5pdDsKLQkJcENoaXBPcHMtPmVlcmVhZCA9IHJ0bXBfZWVfZWZ1c2VfcmVhZDE2OwotCQlyZXR1cm4gMDsKLQl9IGVsc2UKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTlZNIGlzIEVFUFJPTVxuIikpOwotI2VuZGlmIC8qIFJUTVBfRUZVU0VfU1VQUE9SVCAvLyAqLwotI2VuZGlmIC8qIFJUMzB4eCAvLyAqLwotCi0Jc3dpdGNoIChpbmZUeXBlKSB7Ci0jaWZkZWYgUlRNUF9QQ0lfU1VQUE9SVAotCWNhc2UgUlRNUF9ERVZfSU5GX1BDSToKLQkJcENoaXBPcHMtPmVlaW5pdCA9IE5VTEw7Ci0JCXBDaGlwT3BzLT5lZXJlYWQgPSBydG1wX2VlX3Byb21fcmVhZDE2OwotCQlicmVhazsKLSNlbmRpZiAvKiBSVE1QX1BDSV9TVVBQT1JUIC8vICovCi0jaWZkZWYgUlRNUF9VU0JfU1VQUE9SVAotCWNhc2UgUlRNUF9ERVZfSU5GX1VTQjoKLQkJcENoaXBPcHMtPmVlaW5pdCA9IE5VTEw7Ci0JCXBDaGlwT3BzLT5lZXJlYWQgPSBSVFVTQlJlYWRFRVBST00xNjsKLQkJYnJlYWs7Ci0jZW5kaWYgLyogUlRNUF9VU0JfU1VQUE9SVCAvLyAqLwotCi0JZGVmYXVsdDoKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiUnRtcENoaXBPcHNFZXByb21Ib29rKCkgZmFpbGVkIVxuIikpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL21sbWUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL21sbWUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ4ZWFjMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9tbG1lLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MDY4ICswLDAgQEAKLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUmFsaW5rIFRlY2ggSW5jLgotICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAotICogSHNpbmNodSBDb3VudHkgMzAyLAotICogVGFpd2FuLCBSLk8uQy4KLSAqCi0gKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0JTW9kdWxlIE5hbWU6Ci0JbWxtZS5jCi0KLQlBYnN0cmFjdDoKLQotCVJldmlzaW9uIEhpc3Rvcnk6Ci0JV2hvCQkJV2hlbgkJCVdoYXQKLQktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JSm9obiBDaGFuZwkyMDA0LTA4LTI1CQlNb2RpZnkgZnJvbSBSVDI1MDAgY29kZSBiYXNlCi0JSm9obiBDaGFuZwkyMDA0LTA5LTA2CQltb2RpZmllZCBmb3IgUlQyNjAwCi0qLwotCi0jaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCi0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0KLXU4IENJU0NPX09VSVtdID0geyAweDAwLCAweDQwLCAweDk2IH07Ci0KLXU4IFdQQV9PVUlbXSA9IHsgMHgwMCwgMHg1MCwgMHhmMiwgMHgwMSB9OwotdTggUlNOX09VSVtdID0geyAweDAwLCAweDBmLCAweGFjIH07Ci11OCBXTUVfSU5GT19FTEVNW10gPSB7IDB4MDAsIDB4NTAsIDB4ZjIsIDB4MDIsIDB4MDAsIDB4MDEgfTsKLXU4IFdNRV9QQVJNX0VMRU1bXSA9IHsgMHgwMCwgMHg1MCwgMHhmMiwgMHgwMiwgMHgwMSwgMHgwMSB9OwotdTggQ2N4MlFvc0luZm9bXSA9IHsgMHgwMCwgMHg0MCwgMHg5NiwgMHgwNCB9OwotdTggUkFMSU5LX09VSVtdID0geyAweDAwLCAweDBjLCAweDQzIH07Ci11OCBCUk9BRENPTV9PVUlbXSA9IHsgMHgwMCwgMHg5MCwgMHg0YyB9OwotdTggV1BTX09VSVtdID0geyAweDAwLCAweDUwLCAweGYyLCAweDA0IH07Ci11OCBQUkVfTl9IVF9PVUlbXSA9IHsgMHgwMCwgMHg5MCwgMHg0YyB9OwotCi11OCBSYXRlU3dpdGNoVGFibGVbXSA9IHsKLS8qIEl0ZW0gTm8uICAgTW9kZSAgIEN1cnItTUNTICAgVHJhaW5VcCAgIFRyYWluRG93biAgICAgICAgICAgICAvLyBNb2RlLSBCaXQwOiBTVEJDLCBCaXQxOiBTaG9ydCBHSSwgQml0NCw1OiBNb2RlKDA6Q0NLLCAxOk9GRE0sIDI6SFQgTWl4LCAzOkhUIEdGKSAqLwotCTB4MTEsIDB4MDAsIDAsIDAsIDAsCS8qIEluaXRpYWwgdXNlZCBpdGVtIGFmdGVyIGFzc29jaWF0aW9uICovCi0JMHgwMCwgMHgwMCwgMCwgNDAsIDEwMSwKLQkweDAxLCAweDAwLCAxLCA0MCwgNTAsCi0JMHgwMiwgMHgwMCwgMiwgMzUsIDQ1LAotCTB4MDMsIDB4MDAsIDMsIDIwLCA0NSwKLQkweDA0LCAweDIxLCAwLCAzMCwgNTAsCi0JMHgwNSwgMHgyMSwgMSwgMjAsIDUwLAotCTB4MDYsIDB4MjEsIDIsIDIwLCA1MCwKLQkweDA3LCAweDIxLCAzLCAxNSwgNTAsCi0JMHgwOCwgMHgyMSwgNCwgMTUsIDMwLAotCTB4MDksIDB4MjEsIDUsIDEwLCAyNSwKLQkweDBhLCAweDIxLCA2LCA4LCAyNSwKLQkweDBiLCAweDIxLCA3LCA4LCAyNSwKLQkweDBjLCAweDIwLCAxMiwgMTUsIDMwLAotCTB4MGQsIDB4MjAsIDEzLCA4LCAyMCwKLQkweDBlLCAweDIwLCAxNCwgOCwgMjAsCi0JMHgwZiwgMHgyMCwgMTUsIDgsIDI1LAotCTB4MTAsIDB4MjIsIDE1LCA4LCAyNSwKLQkweDExLCAweDAwLCAwLCAwLCAwLAotCTB4MTIsIDB4MDAsIDAsIDAsIDAsCi0JMHgxMywgMHgwMCwgMCwgMCwgMCwKLQkweDE0LCAweDAwLCAwLCAwLCAwLAotCTB4MTUsIDB4MDAsIDAsIDAsIDAsCi0JMHgxNiwgMHgwMCwgMCwgMCwgMCwKLQkweDE3LCAweDAwLCAwLCAwLCAwLAotCTB4MTgsIDB4MDAsIDAsIDAsIDAsCi0JMHgxOSwgMHgwMCwgMCwgMCwgMCwKLQkweDFhLCAweDAwLCAwLCAwLCAwLAotCTB4MWIsIDB4MDAsIDAsIDAsIDAsCi0JMHgxYywgMHgwMCwgMCwgMCwgMCwKLQkweDFkLCAweDAwLCAwLCAwLCAwLAotCTB4MWUsIDB4MDAsIDAsIDAsIDAsCi0JMHgxZiwgMHgwMCwgMCwgMCwgMCwKLX07Ci0KLXU4IFJhdGVTd2l0Y2hUYWJsZTExQltdID0gewotLyogSXRlbSBOby4gICBNb2RlICAgQ3Vyci1NQ1MgICBUcmFpblVwICAgVHJhaW5Eb3duICAgICAgICAgICAgIC8vIE1vZGUtIEJpdDA6IFNUQkMsIEJpdDE6IFNob3J0IEdJLCBCaXQ0LDU6IE1vZGUoMDpDQ0ssIDE6T0ZETSwgMjpIVCBNaXgsIDM6SFQgR0YpICovCi0JMHgwNCwgMHgwMywgMCwgMCwgMCwJLyogSW5pdGlhbCB1c2VkIGl0ZW0gYWZ0ZXIgYXNzb2NpYXRpb24gKi8KLQkweDAwLCAweDAwLCAwLCA0MCwgMTAxLAotCTB4MDEsIDB4MDAsIDEsIDQwLCA1MCwKLQkweDAyLCAweDAwLCAyLCAzNSwgNDUsCi0JMHgwMywgMHgwMCwgMywgMjAsIDQ1LAotfTsKLQotdTggUmF0ZVN3aXRjaFRhYmxlMTFCR1tdID0gewotLyogSXRlbSBOby4gICBNb2RlICAgQ3Vyci1NQ1MgICBUcmFpblVwICAgVHJhaW5Eb3duICAgICAgICAgICAgIC8vIE1vZGUtIEJpdDA6IFNUQkMsIEJpdDE6IFNob3J0IEdJLCBCaXQ0LDU6IE1vZGUoMDpDQ0ssIDE6T0ZETSwgMjpIVCBNaXgsIDM6SFQgR0YpICovCi0JMHgwYSwgMHgwMCwgMCwgMCwgMCwJLyogSW5pdGlhbCB1c2VkIGl0ZW0gYWZ0ZXIgYXNzb2NpYXRpb24gKi8KLQkweDAwLCAweDAwLCAwLCA0MCwgMTAxLAotCTB4MDEsIDB4MDAsIDEsIDQwLCA1MCwKLQkweDAyLCAweDAwLCAyLCAzNSwgNDUsCi0JMHgwMywgMHgwMCwgMywgMjAsIDQ1LAotCTB4MDQsIDB4MTAsIDIsIDIwLCAzNSwKLQkweDA1LCAweDEwLCAzLCAxNiwgMzUsCi0JMHgwNiwgMHgxMCwgNCwgMTAsIDI1LAotCTB4MDcsIDB4MTAsIDUsIDE2LCAyNSwKLQkweDA4LCAweDEwLCA2LCAxMCwgMjUsCi0JMHgwOSwgMHgxMCwgNywgMTAsIDEzLAotfTsKLQotdTggUmF0ZVN3aXRjaFRhYmxlMTFHW10gPSB7Ci0vKiBJdGVtIE5vLiAgIE1vZGUgICBDdXJyLU1DUyAgIFRyYWluVXAgICBUcmFpbkRvd24gICAgICAgICAgICAgLy8gTW9kZS0gQml0MDogU1RCQywgQml0MTogU2hvcnQgR0ksIEJpdDQsNTogTW9kZSgwOkNDSywgMTpPRkRNLCAyOkhUIE1peCwgMzpIVCBHRikgKi8KLQkweDA4LCAweDAwLCAwLCAwLCAwLAkvKiBJbml0aWFsIHVzZWQgaXRlbSBhZnRlciBhc3NvY2lhdGlvbiAqLwotCTB4MDAsIDB4MTAsIDAsIDIwLCAxMDEsCi0JMHgwMSwgMHgxMCwgMSwgMjAsIDM1LAotCTB4MDIsIDB4MTAsIDIsIDIwLCAzNSwKLQkweDAzLCAweDEwLCAzLCAxNiwgMzUsCi0JMHgwNCwgMHgxMCwgNCwgMTAsIDI1LAotCTB4MDUsIDB4MTAsIDUsIDE2LCAyNSwKLQkweDA2LCAweDEwLCA2LCAxMCwgMjUsCi0JMHgwNywgMHgxMCwgNywgMTAsIDEzLAotfTsKLQotdTggUmF0ZVN3aXRjaFRhYmxlMTFOMVNbXSA9IHsKLS8qIEl0ZW0gTm8uICAgTW9kZSAgIEN1cnItTUNTICAgVHJhaW5VcCAgIFRyYWluRG93biAgICAgICAgICAgICAvLyBNb2RlLSBCaXQwOiBTVEJDLCBCaXQxOiBTaG9ydCBHSSwgQml0NCw1OiBNb2RlKDA6Q0NLLCAxOk9GRE0sIDI6SFQgTWl4LCAzOkhUIEdGKSAqLwotCTB4MGMsIDB4MGEsIDAsIDAsIDAsCS8qIEluaXRpYWwgdXNlZCBpdGVtIGFmdGVyIGFzc29jaWF0aW9uICovCi0JMHgwMCwgMHgwMCwgMCwgNDAsIDEwMSwKLQkweDAxLCAweDAwLCAxLCA0MCwgNTAsCi0JMHgwMiwgMHgwMCwgMiwgMjUsIDQ1LAotCTB4MDMsIDB4MjEsIDAsIDIwLCAzNSwKLQkweDA0LCAweDIxLCAxLCAyMCwgMzUsCi0JMHgwNSwgMHgyMSwgMiwgMjAsIDM1LAotCTB4MDYsIDB4MjEsIDMsIDE1LCAzNSwKLQkweDA3LCAweDIxLCA0LCAxNSwgMzAsCi0JMHgwOCwgMHgyMSwgNSwgMTAsIDI1LAotCTB4MDksIDB4MjEsIDYsIDgsIDE0LAotCTB4MGEsIDB4MjEsIDcsIDgsIDE0LAotCTB4MGIsIDB4MjMsIDcsIDgsIDE0LAotfTsKLQotdTggUmF0ZVN3aXRjaFRhYmxlMTFOMlNbXSA9IHsKLS8qIEl0ZW0gTm8uICAgTW9kZSAgIEN1cnItTUNTICAgVHJhaW5VcCAgIFRyYWluRG93biAgICAgICAgICAgICAvLyBNb2RlLSBCaXQwOiBTVEJDLCBCaXQxOiBTaG9ydCBHSSwgQml0NCw1OiBNb2RlKDA6Q0NLLCAxOk9GRE0sIDI6SFQgTWl4LCAzOkhUIEdGKSAqLwotCTB4MGUsIDB4MGMsIDAsIDAsIDAsCS8qIEluaXRpYWwgdXNlZCBpdGVtIGFmdGVyIGFzc29jaWF0aW9uICovCi0JMHgwMCwgMHgwMCwgMCwgNDAsIDEwMSwKLQkweDAxLCAweDAwLCAxLCA0MCwgNTAsCi0JMHgwMiwgMHgwMCwgMiwgMjUsIDQ1LAotCTB4MDMsIDB4MjEsIDAsIDIwLCAzNSwKLQkweDA0LCAweDIxLCAxLCAyMCwgMzUsCi0JMHgwNSwgMHgyMSwgMiwgMjAsIDM1LAotCTB4MDYsIDB4MjEsIDMsIDE1LCAzNSwKLQkweDA3LCAweDIxLCA0LCAxNSwgMzAsCi0JMHgwOCwgMHgyMCwgMTEsIDE1LCAzMCwKLQkweDA5LCAweDIwLCAxMiwgMTUsIDMwLAotCTB4MGEsIDB4MjAsIDEzLCA4LCAyMCwKLQkweDBiLCAweDIwLCAxNCwgOCwgMjAsCi0JMHgwYywgMHgyMCwgMTUsIDgsIDI1LAotCTB4MGQsIDB4MjIsIDE1LCA4LCAxNSwKLX07Ci0KLXU4IFJhdGVTd2l0Y2hUYWJsZTExTjNTW10gPSB7Ci0vKiBJdGVtIE5vLiAgICAgTW9kZSAgICBDdXJyLU1DUyAgICAgICAgVHJhaW5VcCBUcmFpbkRvd24gICAgICAgLy8gTW9kZS0gQml0MDogU1RCQywgQml0MTogU2hvcnQgR0ksIEJpdDQsNTogTW9kZSgwOkNDSywgMTpPRkRNLCAyOkhUIE1peCwgMzpIVCBHRikgKi8KLQkweDBiLCAweDAwLCAwLCAwLCAwLAkvKiAweDBhLCAweDAwLCAgMCwgIDAsICAwLCAgICAgIC8vIEluaXRpYWwgdXNlZCBpdGVtIGFmdGVyIGFzc29jaWF0aW9uICovCi0JMHgwMCwgMHgyMSwgMCwgMzAsIDEwMSwKLQkweDAxLCAweDIxLCAxLCAyMCwgNTAsCi0JMHgwMiwgMHgyMSwgMiwgMjAsIDUwLAotCTB4MDMsIDB4MjEsIDMsIDE1LCA1MCwKLQkweDA0LCAweDIxLCA0LCAxNSwgMzAsCi0JMHgwNSwgMHgyMCwgMTEsIDE1LCAzMCwJLyogUmVxdWlyZWQgYnkgU3lzdGVtLUFsYW4gQCAyMDA4MDgxMiAqLwotCTB4MDYsIDB4MjAsIDEyLCAxNSwgMzAsCS8qIDB4MDUsIDB4MjAsIDEyLCAxNSwgMzAsICovCi0JMHgwNywgMHgyMCwgMTMsIDgsIDIwLAkvKiAweDA2LCAweDIwLCAxMywgIDgsIDIwLCAqLwotCTB4MDgsIDB4MjAsIDE0LCA4LCAyMCwJLyogMHgwNywgMHgyMCwgMTQsICA4LCAyMCwgKi8KLQkweDA5LCAweDIwLCAxNSwgOCwgMjUsCS8qIDB4MDgsIDB4MjAsIDE1LCAgOCwgMjUsICovCi0JMHgwYSwgMHgyMiwgMTUsIDgsIDI1LAkvKiAweDA5LCAweDIyLCAxNSwgIDgsIDI1LCAqLwotfTsKLQotdTggUmF0ZVN3aXRjaFRhYmxlMTFOMlNGb3JBQmFuZFtdID0gewotLyogSXRlbSBOby4gICBNb2RlICAgQ3Vyci1NQ1MgICBUcmFpblVwICAgVHJhaW5Eb3duICAgICAgICAgICAgIC8vIE1vZGUtIEJpdDA6IFNUQkMsIEJpdDE6IFNob3J0IEdJLCBCaXQ0LDU6IE1vZGUoMDpDQ0ssIDE6T0ZETSwgMjpIVCBNaXgsIDM6SFQgR0YpICovCi0JMHgwYiwgMHgwOSwgMCwgMCwgMCwJLyogSW5pdGlhbCB1c2VkIGl0ZW0gYWZ0ZXIgYXNzb2NpYXRpb24gKi8KLQkweDAwLCAweDIxLCAwLCAzMCwgMTAxLAotCTB4MDEsIDB4MjEsIDEsIDIwLCA1MCwKLQkweDAyLCAweDIxLCAyLCAyMCwgNTAsCi0JMHgwMywgMHgyMSwgMywgMTUsIDUwLAotCTB4MDQsIDB4MjEsIDQsIDE1LCAzMCwKLQkweDA1LCAweDIxLCA1LCAxNSwgMzAsCi0JMHgwNiwgMHgyMCwgMTIsIDE1LCAzMCwKLQkweDA3LCAweDIwLCAxMywgOCwgMjAsCi0JMHgwOCwgMHgyMCwgMTQsIDgsIDIwLAotCTB4MDksIDB4MjAsIDE1LCA4LCAyNSwKLQkweDBhLCAweDIyLCAxNSwgOCwgMjUsCi19OwotCi11OCBSYXRlU3dpdGNoVGFibGUxMU4zU0ZvckFCYW5kW10gPSB7CS8qIDMqMyAqLwotLyogSXRlbSBOby4gICBNb2RlICAgQ3Vyci1NQ1MgICBUcmFpblVwICAgVHJhaW5Eb3duICAgICAgICAgICAgIC8vIE1vZGUtIEJpdDA6IFNUQkMsIEJpdDE6IFNob3J0IEdJLCBCaXQ0LDU6IE1vZGUoMDpDQ0ssIDE6T0ZETSwgMjpIVCBNaXgsIDM6SFQgR0YpICovCi0JMHgwYiwgMHgwOSwgMCwgMCwgMCwJLyogSW5pdGlhbCB1c2VkIGl0ZW0gYWZ0ZXIgYXNzb2NpYXRpb24gKi8KLQkweDAwLCAweDIxLCAwLCAzMCwgMTAxLAotCTB4MDEsIDB4MjEsIDEsIDIwLCA1MCwKLQkweDAyLCAweDIxLCAyLCAyMCwgNTAsCi0JMHgwMywgMHgyMSwgMywgMTUsIDUwLAotCTB4MDQsIDB4MjEsIDQsIDE1LCAzMCwKLQkweDA1LCAweDIxLCA1LCAxNSwgMzAsCi0JMHgwNiwgMHgyMCwgMTIsIDE1LCAzMCwKLQkweDA3LCAweDIwLCAxMywgOCwgMjAsCi0JMHgwOCwgMHgyMCwgMTQsIDgsIDIwLAotCTB4MDksIDB4MjAsIDE1LCA4LCAyNSwKLQkweDBhLCAweDIyLCAxNSwgOCwgMjUsCi19OwotCi11OCBSYXRlU3dpdGNoVGFibGUxMUJHTjFTW10gPSB7Ci0vKiBJdGVtIE5vLiAgIE1vZGUgICBDdXJyLU1DUyAgIFRyYWluVXAgICBUcmFpbkRvd24gICAgICAgICAgICAgLy8gTW9kZS0gQml0MDogU1RCQywgQml0MTogU2hvcnQgR0ksIEJpdDQsNTogTW9kZSgwOkNDSywgMTpPRkRNLCAyOkhUIE1peCwgMzpIVCBHRikgKi8KLQkweDBjLCAweDBhLCAwLCAwLCAwLAkvKiBJbml0aWFsIHVzZWQgaXRlbSBhZnRlciBhc3NvY2lhdGlvbiAqLwotCTB4MDAsIDB4MDAsIDAsIDQwLCAxMDEsCi0JMHgwMSwgMHgwMCwgMSwgNDAsIDUwLAotCTB4MDIsIDB4MDAsIDIsIDI1LCA0NSwKLQkweDAzLCAweDIxLCAwLCAyMCwgMzUsCi0JMHgwNCwgMHgyMSwgMSwgMjAsIDM1LAotCTB4MDUsIDB4MjEsIDIsIDIwLCAzNSwKLQkweDA2LCAweDIxLCAzLCAxNSwgMzUsCi0JMHgwNywgMHgyMSwgNCwgMTUsIDMwLAotCTB4MDgsIDB4MjEsIDUsIDEwLCAyNSwKLQkweDA5LCAweDIxLCA2LCA4LCAxNCwKLQkweDBhLCAweDIxLCA3LCA4LCAxNCwKLQkweDBiLCAweDIzLCA3LCA4LCAxNCwKLX07Ci0KLXU4IFJhdGVTd2l0Y2hUYWJsZTExQkdOMlNbXSA9IHsKLS8qIEl0ZW0gTm8uICAgTW9kZSAgIEN1cnItTUNTICAgVHJhaW5VcCAgIFRyYWluRG93biAgICAgICAgICAgICAvLyBNb2RlLSBCaXQwOiBTVEJDLCBCaXQxOiBTaG9ydCBHSSwgQml0NCw1OiBNb2RlKDA6Q0NLLCAxOk9GRE0sIDI6SFQgTWl4LCAzOkhUIEdGKSAqLwotCTB4MGUsIDB4MGMsIDAsIDAsIDAsCS8qIEluaXRpYWwgdXNlZCBpdGVtIGFmdGVyIGFzc29jaWF0aW9uICovCi0JMHgwMCwgMHgwMCwgMCwgNDAsIDEwMSwKLQkweDAxLCAweDAwLCAxLCA0MCwgNTAsCi0JMHgwMiwgMHgwMCwgMiwgMjUsIDQ1LAotCTB4MDMsIDB4MjEsIDAsIDIwLCAzNSwKLQkweDA0LCAweDIxLCAxLCAyMCwgMzUsCi0JMHgwNSwgMHgyMSwgMiwgMjAsIDM1LAotCTB4MDYsIDB4MjEsIDMsIDE1LCAzNSwKLQkweDA3LCAweDIxLCA0LCAxNSwgMzAsCi0JMHgwOCwgMHgyMCwgMTEsIDE1LCAzMCwKLQkweDA5LCAweDIwLCAxMiwgMTUsIDMwLAotCTB4MGEsIDB4MjAsIDEzLCA4LCAyMCwKLQkweDBiLCAweDIwLCAxNCwgOCwgMjAsCi0JMHgwYywgMHgyMCwgMTUsIDgsIDI1LAotCTB4MGQsIDB4MjIsIDE1LCA4LCAxNSwKLX07Ci0KLXU4IFJhdGVTd2l0Y2hUYWJsZTExQkdOM1NbXSA9IHsJLyogMyozICovCi0vKiBJdGVtIE5vLiAgIE1vZGUgICBDdXJyLU1DUyAgIFRyYWluVXAgICBUcmFpbkRvd24gICAgICAgICAgICAgLy8gTW9kZS0gQml0MDogU1RCQywgQml0MTogU2hvcnQgR0ksIEJpdDQsNTogTW9kZSgwOkNDSywgMTpPRkRNLCAyOkhUIE1peCwgMzpIVCBHRikgKi8KLQkweDBhLCAweDAwLCAwLCAwLCAwLAkvKiBJbml0aWFsIHVzZWQgaXRlbSBhZnRlciBhc3NvY2lhdGlvbiAqLwotCTB4MDAsIDB4MjEsIDAsIDMwLCAxMDEsCS8qNTAgKi8KLQkweDAxLCAweDIxLCAxLCAyMCwgNTAsCi0JMHgwMiwgMHgyMSwgMiwgMjAsIDUwLAotCTB4MDMsIDB4MjEsIDMsIDIwLCA1MCwKLQkweDA0LCAweDIxLCA0LCAxNSwgNTAsCi0JMHgwNSwgMHgyMCwgMjAsIDE1LCAzMCwKLQkweDA2LCAweDIwLCAyMSwgOCwgMjAsCi0JMHgwNywgMHgyMCwgMjIsIDgsIDIwLAotCTB4MDgsIDB4MjAsIDIzLCA4LCAyNSwKLQkweDA5LCAweDIyLCAyMywgOCwgMjUsCi19OwotCi11OCBSYXRlU3dpdGNoVGFibGUxMUJHTjJTRm9yQUJhbmRbXSA9IHsKLS8qIEl0ZW0gTm8uICAgTW9kZSAgIEN1cnItTUNTICAgVHJhaW5VcCAgIFRyYWluRG93biAgICAgICAgICAgICAvLyBNb2RlLSBCaXQwOiBTVEJDLCBCaXQxOiBTaG9ydCBHSSwgQml0NCw1OiBNb2RlKDA6Q0NLLCAxOk9GRE0sIDI6SFQgTWl4LCAzOkhUIEdGKSAqLwotCTB4MGIsIDB4MDksIDAsIDAsIDAsCS8qIEluaXRpYWwgdXNlZCBpdGVtIGFmdGVyIGFzc29jaWF0aW9uICovCi0JMHgwMCwgMHgyMSwgMCwgMzAsIDEwMSwJLyo1MCAqLwotCTB4MDEsIDB4MjEsIDEsIDIwLCA1MCwKLQkweDAyLCAweDIxLCAyLCAyMCwgNTAsCi0JMHgwMywgMHgyMSwgMywgMTUsIDUwLAotCTB4MDQsIDB4MjEsIDQsIDE1LCAzMCwKLQkweDA1LCAweDIxLCA1LCAxNSwgMzAsCi0JMHgwNiwgMHgyMCwgMTIsIDE1LCAzMCwKLQkweDA3LCAweDIwLCAxMywgOCwgMjAsCi0JMHgwOCwgMHgyMCwgMTQsIDgsIDIwLAotCTB4MDksIDB4MjAsIDE1LCA4LCAyNSwKLQkweDBhLCAweDIyLCAxNSwgOCwgMjUsCi19OwotCi11OCBSYXRlU3dpdGNoVGFibGUxMUJHTjNTRm9yQUJhbmRbXSA9IHsJLyogMyozICovCi0vKiBJdGVtIE5vLiAgIE1vZGUgICBDdXJyLU1DUyAgIFRyYWluVXAgICBUcmFpbkRvd24gICAgICAgICAgICAgLy8gTW9kZS0gQml0MDogU1RCQywgQml0MTogU2hvcnQgR0ksIEJpdDQsNTogTW9kZSgwOkNDSywgMTpPRkRNLCAyOkhUIE1peCwgMzpIVCBHRikgKi8KLQkweDBjLCAweDA5LCAwLCAwLCAwLAkvKiBJbml0aWFsIHVzZWQgaXRlbSBhZnRlciBhc3NvY2lhdGlvbiAqLwotCTB4MDAsIDB4MjEsIDAsIDMwLCAxMDEsCS8qNTAgKi8KLQkweDAxLCAweDIxLCAxLCAyMCwgNTAsCi0JMHgwMiwgMHgyMSwgMiwgMjAsIDUwLAotCTB4MDMsIDB4MjEsIDMsIDE1LCA1MCwKLQkweDA0LCAweDIxLCA0LCAxNSwgMzAsCi0JMHgwNSwgMHgyMSwgNSwgMTUsIDMwLAotCTB4MDYsIDB4MjEsIDEyLCAxNSwgMzAsCi0JMHgwNywgMHgyMCwgMjAsIDE1LCAzMCwKLQkweDA4LCAweDIwLCAyMSwgOCwgMjAsCi0JMHgwOSwgMHgyMCwgMjIsIDgsIDIwLAotCTB4MGEsIDB4MjAsIDIzLCA4LCAyNSwKLQkweDBiLCAweDIyLCAyMywgOCwgMjUsCi19OwotCi1leHRlcm4gdTggT2ZkbVJhdGVUb1J4d2lNQ1NbXTsKLS8qIHNpbmNlIFJUNjEgaGFzIGJldHRlciBSWCBzZW5zaWJpbGl0eSwgd2UgaGF2ZSB0byBsaW1pdCBUWCBBQ0sgcmF0ZSBub3QgdG8gZXhjZWVkIG91ciBub3JtYWwgZGF0YSBUWCByYXRlLiAqLwotLyogb3RoZXJ3aXNlIHRoZSBXTEFOIHBlZXIgbWF5IG5vdCBiZSBhYmxlIHRvIHJlY2VpdmUgdGhlIEFDSyB0aHVzIGRvd25ncmFkZSBpdHMgZGF0YSBUWCByYXRlICovCi11bnNpZ25lZCBsb25nIEJhc2ljUmF0ZU1hc2tbMTJdID0KLSAgICB7IDB4ZmZmZmYwMDEgLyogMS1NYnBzICovICwgMHhmZmZmZjAwMyAvKiAyIE1icHMgKi8gLCAweGZmZmZmMDA3IC8qIDUuNSAqLyAsCi0weGZmZmZmMDBmIC8qIDExICovICwKLQkweGZmZmZmMDFmIC8qIDYgKi8gLCAweGZmZmZmMDNmIC8qIDkgKi8gLCAweGZmZmZmMDdmIC8qIDEyICovICwKLQkgICAgMHhmZmZmZjBmZiAvKiAxOCAqLyAsCi0JMHhmZmZmZjFmZiAvKiAyNCAqLyAsIDB4ZmZmZmYzZmYgLyogMzYgKi8gLCAweGZmZmZmN2ZmIC8qIDQ4ICovICwKLQkgICAgMHhmZmZmZmZmZiAvKiA1NCAqLwotfTsKLQotdTggQlJPQURDQVNUX0FERFJbTUFDX0FERFJfTEVOXSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OwotdTggWkVST19NQUNfQUREUltNQUNfQUREUl9MRU5dID0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLS8qIGUuZy4gUnNzaVNhZmVMZXZlbEZvclR4UmF0ZVtSQVRFXzM2XSIgbWVhbnMgaWYgdGhlIGN1cnJlbnQgUlNTSSBpcyBncmVhdGVyIHRoYW4gKi8KLS8qICAgICAgICAgICAgICB0aGlzIHZhbHVlLCB0aGVuIGl0J3MgcXVhcmFudGVlZCBjYXBhYmxlIG9mIG9wZXJhdGluZyBpbiAzNiBtYnBzIFRYIHJhdGUgaW4gKi8KLS8qICAgICAgICAgICAgICBjbGVhbiBlbnZpcm9ubWVudC4gKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR4UmF0ZTogMSAgIDIgICA1LjUgICAxMSAgICAgICA2ICAgICAgICA5ICAgIDEyICAgICAgIDE4ICAgICAgIDI0ICAgMzYgICA0OCAgIDU0ICAgICAgIDcyICAxMDAgKi8KLWNoYXIgUnNzaVNhZmVMZXZlbEZvclR4UmF0ZVtdID0KLSAgICB7IC05MiwgLTkxLCAtOTAsIC04NywgLTg4LCAtODYsIC04NSwgLTgzLCAtODEsIC03OCwgLTcyLCAtNzEsIC00MCwgLTQwIH07Ci0KLXU4IFJhdGVJZFRvTWJwc1tdID0geyAxLCAyLCA1LCAxMSwgNiwgOSwgMTIsIDE4LCAyNCwgMzYsIDQ4LCA1NCwgNzIsIDEwMCB9OwotdTE2IFJhdGVJZFRvNTAwS2Jwc1tdID0KLSAgICB7IDIsIDQsIDExLCAyMiwgMTIsIDE4LCAyNCwgMzYsIDQ4LCA3MiwgOTYsIDEwOCwgMTQ0LCAyMDAgfTsKLQotdTggU3NpZEllID0gSUVfU1NJRDsKLXU4IFN1cFJhdGVJZSA9IElFX1NVUFBfUkFURVM7Ci11OCBFeHRSYXRlSWUgPSBJRV9FWFRfU1VQUF9SQVRFUzsKLXU4IEh0Q2FwSWUgPSBJRV9IVF9DQVA7Ci11OCBBZGRIdEluZm9JZSA9IElFX0FERF9IVDsKLXU4IE5ld0V4dENoYW5JZSA9IElFX1NFQ09OREFSWV9DSF9PRkZTRVQ7Ci11OCBFcnBJZSA9IElFX0VSUDsKLXU4IERzSWUgPSBJRV9EU19QQVJNOwotdTggVGltSWUgPSBJRV9USU07Ci11OCBXcGFJZSA9IElFX1dQQTsKLXU4IFdwYTJJZSA9IElFX1dQQTI7Ci11OCBJYnNzSWUgPSBJRV9JQlNTX1BBUk07Ci0KLWV4dGVybiB1OCBXUEFfT1VJW107Ci0KLXU4IFNFU19PVUlbXSA9IHsgMHgwMCwgMHg5MCwgMHg0YyB9OwotCi11OCBaZXJvU3NpZFszMl0gPQotICAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAotfTsKLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlpbml0aWFsaXplIHRoZSBNTE1FIHRhc2sgYW5kIGl0cyBkYXRhIHN0cnVjdHVyZSAocXVldWUsIHNwaW5sb2NrLAotCQl0aW1lciwgc3RhdGUgbWFjaGluZXMpLgotCi0JSVJRTCA9IFBBU1NJVkVfTEVWRUwKLQotCVJldHVybjoKLQkJYWx3YXlzIHJldHVybiBORElTX1NUQVRVU19TVUNDRVNTCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLWludCBNbG1lSW5pdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0JaW50IFN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gTUxNRSBJbml0aWFsaXplXG4iKSk7Ci0KLQlkbyB7Ci0JCVN0YXR1cyA9IE1sbWVRdWV1ZUluaXQoJnBBZC0+TWxtZS5RdWV1ZSk7Ci0JCWlmIChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKLQkJCWJyZWFrOwotCi0JCXBBZC0+TWxtZS5iUnVubmluZyA9IEZBTFNFOwotCQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5NbG1lLlRhc2tMb2NrKTsKLQotCQl7Ci0JCQlCc3NUYWJsZUluaXQoJnBBZC0+U2NhblRhYik7Ci0KLQkJCS8qIGluaXQgU1RBIHN0YXRlIG1hY2hpbmVzICovCi0JCQlBc3NvY1N0YXRlTWFjaGluZUluaXQocEFkLCAmcEFkLT5NbG1lLkFzc29jTWFjaGluZSwKLQkJCQkJICAgICAgcEFkLT5NbG1lLkFzc29jRnVuYyk7Ci0JCQlBdXRoU3RhdGVNYWNoaW5lSW5pdChwQWQsICZwQWQtPk1sbWUuQXV0aE1hY2hpbmUsCi0JCQkJCSAgICAgcEFkLT5NbG1lLkF1dGhGdW5jKTsKLQkJCUF1dGhSc3BTdGF0ZU1hY2hpbmVJbml0KHBBZCwgJnBBZC0+TWxtZS5BdXRoUnNwTWFjaGluZSwKLQkJCQkJCXBBZC0+TWxtZS5BdXRoUnNwRnVuYyk7Ci0JCQlTeW5jU3RhdGVNYWNoaW5lSW5pdChwQWQsICZwQWQtPk1sbWUuU3luY01hY2hpbmUsCi0JCQkJCSAgICAgcEFkLT5NbG1lLlN5bmNGdW5jKTsKLQotCQkJLyogU2luY2Ugd2UgYXJlIHVzaW5nIHN3aXRjaC9jYXNlIHRvIGltcGxlbWVudCBpdCwgdGhlIGluaXQgaXMgZGlmZmVyZW50IGZyb20gdGhlIGFib3ZlICovCi0JCQkvKiBzdGF0ZSBtYWNoaW5lIGluaXQgKi8KLQkJCU1sbWVDbnRsSW5pdChwQWQsICZwQWQtPk1sbWUuQ250bE1hY2hpbmUsIE5VTEwpOwotCQl9Ci0KLQkJV3BhU3RhdGVNYWNoaW5lSW5pdChwQWQsICZwQWQtPk1sbWUuV3BhTWFjaGluZSwKLQkJCQkgICAgcEFkLT5NbG1lLldwYUZ1bmMpOwotCi0JCUFjdGlvblN0YXRlTWFjaGluZUluaXQocEFkLCAmcEFkLT5NbG1lLkFjdE1hY2hpbmUsCi0JCQkJICAgICAgIHBBZC0+TWxtZS5BY3RGdW5jKTsKLQotCQkvKiBJbml0IG1sbWUgcGVyaW9kaWMgdGltZXIgKi8KLQkJUlRNUEluaXRUaW1lcihwQWQsICZwQWQtPk1sbWUuUGVyaW9kaWNUaW1lciwKLQkJCSAgICAgIEdFVF9USU1FUl9GVU5DVElPTihNbG1lUGVyaW9kaWNFeGVjKSwgcEFkLCBUUlVFKTsKLQotCQkvKiBTZXQgbWxtZSBwZXJpb2RpYyB0aW1lciAqLwotCQlSVE1QU2V0VGltZXIoJnBBZC0+TWxtZS5QZXJpb2RpY1RpbWVyLCBNTE1FX1RBU0tfRVhFQ19JTlRWKTsKLQotCQkvKiBzb2Z0d2FyZS1iYXNlZCBSWCBBbnRlbm5hIGRpdmVyc2l0eSAqLwotCQlSVE1QSW5pdFRpbWVyKHBBZCwgJnBBZC0+TWxtZS5SeEFudEV2YWxUaW1lciwKLQkJCSAgICAgIEdFVF9USU1FUl9GVU5DVElPTihBc2ljUnhBbnRFdmFsVGltZW91dCksIHBBZCwKLQkJCSAgICAgIEZBTFNFKTsKLQotCQl7Ci0jaWZkZWYgUlRNUF9QQ0lfU1VQUE9SVAotCQkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfUENJRV9ERVZJQ0UpKSB7Ci0JCQkJLyogb25seSBQQ0llIGNhcmRzIG5lZWQgdGhlc2UgdHdvIHRpbWVycyAqLwotCQkJCVJUTVBJbml0VGltZXIocEFkLCAmcEFkLT5NbG1lLlBzUG9sbFRpbWVyLAotCQkJCQkgICAgICBHRVRfVElNRVJfRlVOQ1RJT04KLQkJCQkJICAgICAgKFBzUG9sbFdha2VFeGVjKSwgcEFkLCBGQUxTRSk7Ci0JCQkJUlRNUEluaXRUaW1lcihwQWQsICZwQWQtPk1sbWUuUmFkaW9Pbk9mZlRpbWVyLAotCQkJCQkgICAgICBHRVRfVElNRVJfRlVOQ1RJT04oUmFkaW9PbkV4ZWMpLAotCQkJCQkgICAgICBwQWQsIEZBTFNFKTsKLQkJCX0KLSNlbmRpZiAvKiBSVE1QX1BDSV9TVVBQT1JUIC8vICovCi0KLQkJCVJUTVBJbml0VGltZXIocEFkLCAmcEFkLT5NbG1lLkxpbmtEb3duVGltZXIsCi0JCQkJICAgICAgR0VUX1RJTUVSX0ZVTkNUSU9OKExpbmtEb3duRXhlYyksIHBBZCwKLQkJCQkgICAgICBGQUxTRSk7Ci0KLSNpZmRlZiBSVE1QX01BQ19VU0IKLQkJCVJUTVBJbml0VGltZXIocEFkLCAmcEFkLT5NbG1lLkF1dG9XYWtldXBUaW1lciwKLQkJCQkgICAgICBHRVRfVElNRVJfRlVOQ1RJT04KLQkJCQkgICAgICAoUnRtcFVzYlN0YUFzaWNGb3JjZVdha2V1cFRpbWVvdXQpLCBwQWQsCi0JCQkJICAgICAgRkFMU0UpOwotCQkJcEFkLT5NbG1lLkF1dG9XYWtldXBUaW1lclJ1bm5pbmcgPSBGQUxTRTsKLSNlbmRpZiAvKiBSVE1QX01BQ19VU0IgLy8gKi8KLQkJfQotCi0JfSB3aGlsZSAoRkFMU0UpOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPC0tIE1MTUUgSW5pdGlhbGl6ZVxuIikpOwotCi0JcmV0dXJuIFN0YXR1czsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQltYWluIGxvb3Agb2YgdGhlIE1MTUUKLQlQcmU6Ci0JCU1sbWUgaGFzIHRvIGJlIGluaXRpYWxpemVkLCBhbmQgdGhlcmUgYXJlIHNvbWV0aGluZyBpbnNpZGUgdGhlIHF1ZXVlCi0JTm90ZToKLQkJVGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIGZyb20gTVBTZXRJbmZvcm1hdGlvbiBhbmQgTVBSZWNlaXZlOwotCQlUaGlzIHRhc2sgZ3VhcmFudGVlIG9ubHkgb25lIE1sbWVIYW5kbGVyIHdpbGwgcnVuLgotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi12b2lkIE1sbWVIYW5kbGVyKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtID0gTlVMTDsKLQotCS8qIE9ubHkgYWNjZXB0IE1MTUUgYW5kIEZyYW1lIGZyb20gcGVlciBzaWRlLCBubyBvdGhlciAoY29udHJvbC9kYXRhKSBmcmFtZSBzaG91bGQgKi8KLQkvKiBnZXQgaW50byB0aGlzIHN0YXRlIG1hY2hpbmUgKi8KLQotCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+TWxtZS5UYXNrTG9jayk7Ci0JaWYgKHBBZC0+TWxtZS5iUnVubmluZykgewotCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPk1sbWUuVGFza0xvY2spOwotCQlyZXR1cm47Ci0JfSBlbHNlIHsKLQkJcEFkLT5NbG1lLmJSdW5uaW5nID0gVFJVRTsKLQl9Ci0JTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5NbG1lLlRhc2tMb2NrKTsKLQotCXdoaWxlICghTWxtZVF1ZXVlRW1wdHkoJnBBZC0+TWxtZS5RdWV1ZSkpIHsKLQkJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9NTE1FX1JFU0VUX0lOX1BST0dSRVNTKSB8fAotCQkgICAgUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpIHx8Ci0JCSAgICBSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpIHsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAoIkRldmljZSBIYWx0ZWQgb3IgUmVtb3ZlZCBvciBNbG1lUmVzdCwgZXhpdCBNbG1lSGFuZGxlciEgKHF1ZXVlIG51bSA9ICVsZClcbiIsCi0JCQkJICBwQWQtPk1sbWUuUXVldWUuTnVtKSk7Ci0JCQlicmVhazsKLQkJfQotCQkvKkZyb20gbWVzc2FnZSB0eXBlLCBkZXRlcm1pbmUgd2hpY2ggc3RhdGUgbWFjaGluZSBJIHNob3VsZCBkcml2ZSAqLwotCQlpZiAoTWxtZURlcXVldWUoJnBBZC0+TWxtZS5RdWV1ZSwgJkVsZW0pKSB7Ci0jaWZkZWYgUlRNUF9NQUNfVVNCCi0JCQlpZiAoRWxlbS0+TXNnVHlwZSA9PSBNVDJfUkVTRVRfQ09ORikgewotCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwKLQkJCQkJICAgICAoInJlc2V0IE1MTUUgc3RhdGUgbWFjaGluZSFcbiIpKTsKLQkJCQlNbG1lUmVzdGFydFN0YXRlTWFjaGluZShwQWQpOwotCQkJCUVsZW0tPk9jY3VwaWVkID0gRkFMU0U7Ci0JCQkJRWxlbS0+TXNnTGVuID0gMDsKLQkJCQljb250aW51ZTsKLQkJCX0KLSNlbmRpZiAvKiBSVE1QX01BQ19VU0IgLy8gKi8KLQotCQkJLyogaWYgZGVxdWV1ZSBzdWNjZXNzICovCi0JCQlzd2l0Y2ggKEVsZW0tPk1hY2hpbmUpIHsKLQkJCQkvKiBTVEEgc3RhdGUgbWFjaGluZXMgKi8KLQkJCWNhc2UgQVNTT0NfU1RBVEVfTUFDSElORToKLQkJCQlTdGF0ZU1hY2hpbmVQZXJmb3JtQWN0aW9uKHBBZCwKLQkJCQkJCQkgICZwQWQtPk1sbWUuCi0JCQkJCQkJICBBc3NvY01hY2hpbmUsIEVsZW0pOwotCQkJCWJyZWFrOwotCQkJY2FzZSBBVVRIX1NUQVRFX01BQ0hJTkU6Ci0JCQkJU3RhdGVNYWNoaW5lUGVyZm9ybUFjdGlvbihwQWQsCi0JCQkJCQkJICAmcEFkLT5NbG1lLgotCQkJCQkJCSAgQXV0aE1hY2hpbmUsIEVsZW0pOwotCQkJCWJyZWFrOwotCQkJY2FzZSBBVVRIX1JTUF9TVEFURV9NQUNISU5FOgotCQkJCVN0YXRlTWFjaGluZVBlcmZvcm1BY3Rpb24ocEFkLAotCQkJCQkJCSAgJnBBZC0+TWxtZS4KLQkJCQkJCQkgIEF1dGhSc3BNYWNoaW5lLCBFbGVtKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgU1lOQ19TVEFURV9NQUNISU5FOgotCQkJCVN0YXRlTWFjaGluZVBlcmZvcm1BY3Rpb24ocEFkLAotCQkJCQkJCSAgJnBBZC0+TWxtZS4KLQkJCQkJCQkgIFN5bmNNYWNoaW5lLCBFbGVtKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkU6Ci0JCQkJTWxtZUNudGxNYWNoaW5lUGVyZm9ybUFjdGlvbihwQWQsCi0JCQkJCQkJICAgICAmcEFkLT5NbG1lLgotCQkJCQkJCSAgICAgQ250bE1hY2hpbmUsIEVsZW0pOwotCQkJCWJyZWFrOwotCQkJY2FzZSBXUEFfUFNLX1NUQVRFX01BQ0hJTkU6Ci0JCQkJU3RhdGVNYWNoaW5lUGVyZm9ybUFjdGlvbihwQWQsCi0JCQkJCQkJICAmcEFkLT5NbG1lLgotCQkJCQkJCSAgV3BhUHNrTWFjaGluZSwgRWxlbSk7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgQUNUSU9OX1NUQVRFX01BQ0hJTkU6Ci0JCQkJU3RhdGVNYWNoaW5lUGVyZm9ybUFjdGlvbihwQWQsCi0JCQkJCQkJICAmcEFkLT5NbG1lLkFjdE1hY2hpbmUsCi0JCQkJCQkJICBFbGVtKTsKLQkJCQlicmVhazsKLQotCQkJY2FzZSBXUEFfU1RBVEVfTUFDSElORToKLQkJCQlTdGF0ZU1hY2hpbmVQZXJmb3JtQWN0aW9uKHBBZCwKLQkJCQkJCQkgICZwQWQtPk1sbWUuV3BhTWFjaGluZSwKLQkJCQkJCQkgIEVsZW0pOwotCQkJCWJyZWFrOwotCi0JCQlkZWZhdWx0OgotCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkgKCJFUlJPUjogSWxsZWdhbCBtYWNoaW5lICVsZCBpbiBNbG1lSGFuZGxlcigpXG4iLAotCQkJCQkgIEVsZW0tPk1hY2hpbmUpKTsKLQkJCQlicmVhazsKLQkJCX0JLyogZW5kIG9mIHN3aXRjaCAqLwotCi0JCQkvKiBmcmVlIE1MTUUgZWxlbWVudCAqLwotCQkJRWxlbS0+T2NjdXBpZWQgPSBGQUxTRTsKLQkJCUVsZW0tPk1zZ0xlbiA9IDA7Ci0KLQkJfSBlbHNlIHsKLQkJCURCR1BSSU5UX0VSUigiTWxtZUhhbmRsZXI6IE1sbWVRdWV1ZSBlbXB0eVxuIik7Ci0JCX0KLQl9Ci0KLQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPk1sbWUuVGFza0xvY2spOwotCXBBZC0+TWxtZS5iUnVubmluZyA9IEZBTFNFOwotCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+TWxtZS5UYXNrTG9jayk7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJRGVzdHJ1Y3RvciBvZiBNTE1FIChEZXN0cm95IHF1ZXVlLCBzdGF0ZSBtYWNoaW5lLCBzcGluIGxvY2sgYW5kIHRpbWVyKQotCVBhcmFtZXRlcnM6Ci0JCUFkYXB0ZXIgLSBOSUMgQWRhcHRlciBwb2ludGVyCi0JUG9zdDoKLQkJVGhlIE1MTUUgdGFzayB3aWxsIG5vIGxvbmdlciB3b3JrIHByb3Blcmx5Ci0KLQlJUlFMID0gUEFTU0lWRV9MRVZFTAotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotdm9pZCBNbG1lSGFsdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0JQk9PTEVBTiBDYW5jZWxsZWQ7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT4gTWxtZUhhbHRcbiIpKTsKLQotCWlmICghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSB7Ci0JCS8qIGRpc2FibGUgQkVBQ09OIGdlbmVyYXRpb24gYW5kIG90aGVyIEJFQUNPTiByZWxhdGVkIGhhcmR3YXJlIHRpbWVycyAqLwotCQlBc2ljRGlzYWJsZVN5bmMocEFkKTsKLQl9Ci0KLQl7Ci0JCS8qIENhbmNlbCBwZW5kaW5nIHRpbWVycyAqLwotCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5Bc3NvY1RpbWVyLCAmQ2FuY2VsbGVkKTsKLQkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguUmVhc3NvY1RpbWVyLCAmQ2FuY2VsbGVkKTsKLQkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguRGlzYXNzb2NUaW1lciwgJkNhbmNlbGxlZCk7Ci0JCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkF1dGhUaW1lciwgJkNhbmNlbGxlZCk7Ci0JCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkJlYWNvblRpbWVyLCAmQ2FuY2VsbGVkKTsKLQkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguU2NhblRpbWVyLCAmQ2FuY2VsbGVkKTsKLQotI2lmZGVmIFJUTVBfTUFDX1BDSQotCQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19QQ0lFX0RFVklDRSkKLQkJICAgICYmIChwQWQtPlN0YUNmZy5QU0NvbnRyb2wuZmllbGQuRW5hYmxlTmV3UFMgPT0gVFJVRSkpIHsKLQkJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lLlBzUG9sbFRpbWVyLCAmQ2FuY2VsbGVkKTsKLQkJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lLlJhZGlvT25PZmZUaW1lciwgJkNhbmNlbGxlZCk7Ci0JCX0KLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLQotCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZS5MaW5rRG93blRpbWVyLCAmQ2FuY2VsbGVkKTsKLQotI2lmZGVmIFJUTVBfTUFDX1VTQgotCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZS5BdXRvV2FrZXVwVGltZXIsICZDYW5jZWxsZWQpOwotI2VuZGlmIC8qIFJUTVBfTUFDX1VTQiAvLyAqLwotCX0KLQotCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lLlBlcmlvZGljVGltZXIsICZDYW5jZWxsZWQpOwotCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lLlJ4QW50RXZhbFRpbWVyLCAmQ2FuY2VsbGVkKTsKLQotCWlmICghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSB7Ci0JCXN0cnVjdCBydF9ydG1wX2NoaXBfb3AgKnBDaGlwT3BzID0gJnBBZC0+Y2hpcE9wczsKLQotCQkvKiBTZXQgTEVEICovCi0JCVJUTVBTZXRMRUQocEFkLCBMRURfSEFMVCk7Ci0JCVJUTVBTZXRTaWduYWxMRUQocEFkLCAtMTAwKTsJLyogRm9yY2Ugc2lnbmFsIHN0cmVuZ3RoIExlZCB0byBiZSB0dXJuZWQgb2ZmLCBmaXJtd2FyZSBpcyBub3QgZG9uZSBpdC4gKi8KLSNpZmRlZiBSVE1QX01BQ19VU0IKLQkJewotCQkJTEVEX0NGR19TVFJVQyBMZWRDZmc7Ci0JCQlSVE1QX0lPX1JFQUQzMihwQWQsIExFRF9DRkcsICZMZWRDZmcud29yZCk7Ci0JCQlMZWRDZmcuZmllbGQuTGVkUG9sYXIgPSAwOwotCQkJTGVkQ2ZnLmZpZWxkLlJMZWRNb2RlID0gMDsKLQkJCUxlZENmZy5maWVsZC5HTGVkTW9kZSA9IDA7Ci0JCQlMZWRDZmcuZmllbGQuWUxlZE1vZGUgPSAwOwotCQkJUlRNUF9JT19XUklURTMyKHBBZCwgTEVEX0NGRywgTGVkQ2ZnLndvcmQpOwotCQl9Ci0jZW5kaWYgLyogUlRNUF9NQUNfVVNCIC8vICovCi0KLQkJaWYgKHBDaGlwT3BzLT5Bc2ljSGFsdEFjdGlvbikKLQkJCXBDaGlwT3BzLT5Bc2ljSGFsdEFjdGlvbihwQWQpOwotCX0KLQotCVJUTVB1c2VjRGVsYXkoNTAwMCk7CS8qICA1IG1zZWMgdG8gZ3VhcmFudGVlIEFudCBEaXZlcnNpdHkgdGltZXIgY2FuY2VsZWQgKi8KLQotCU1sbWVRdWV1ZURlc3Ryb3koJnBBZC0+TWxtZS5RdWV1ZSk7Ci0JTmRpc0ZyZWVTcGluTG9jaygmcEFkLT5NbG1lLlRhc2tMb2NrKTsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjw9PSBNbG1lSGFsdFxuIikpOwotfQotCi12b2lkIE1sbWVSZXNldFJhbGlua0NvdW50ZXJzKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlwQWQtPlJhbGlua0NvdW50ZXJzLkxhc3RPbmVTZWNSeE9rRGF0YUNudCA9Ci0JICAgIHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjUnhPa0RhdGFDbnQ7Ci0JLyogY2xlYXIgYWxsIE9uZVNlY3h4eCBjb3VudGVycy4gKi8KLQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY0JlYWNvblNlbnRDbnQgPSAwOwotCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjRmFsc2VDQ0FDbnQgPSAwOwotCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjUnhGY3NFcnJDbnQgPSAwOwotCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjUnhPa0NudCA9IDA7Ci0JcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeEZhaWxDb3VudCA9IDA7Ci0JcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeE5vUmV0cnlPa0NvdW50ID0gMDsKLQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4UmV0cnlPa0NvdW50ID0gMDsKLQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1J4T2tEYXRhQ250ID0gMDsKLQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1JlY2VpdmVkQnl0ZUNvdW50ID0gMDsKLQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1RyYW5zbWl0dGVkQnl0ZUNvdW50ID0gMDsKLQotCS8qIFRPRE86IGZvciBkZWJ1ZyBvbmx5LiB0byBiZSByZW1vdmVkICovCi0JcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNPc1R4Q291bnRbUUlEX0FDX0JFXSA9IDA7Ci0JcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNPc1R4Q291bnRbUUlEX0FDX0JLXSA9IDA7Ci0JcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNPc1R4Q291bnRbUUlEX0FDX1ZJXSA9IDA7Ci0JcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNPc1R4Q291bnRbUUlEX0FDX1ZPXSA9IDA7Ci0JcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNEbWFEb25lQ291bnRbUUlEX0FDX0JFXSA9IDA7Ci0JcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNEbWFEb25lQ291bnRbUUlEX0FDX0JLXSA9IDA7Ci0JcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNEbWFEb25lQ291bnRbUUlEX0FDX1ZJXSA9IDA7Ci0JcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNEbWFEb25lQ291bnRbUUlEX0FDX1ZPXSA9IDA7Ci0JcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeERvbmVDb3VudCA9IDA7Ci0JcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNSeENvdW50ID0gMDsKLQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4QWdncmVnYXRpb25Db3VudCA9IDA7Ci0JcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNSeEFnZ3JlZ2F0aW9uQ291bnQgPSAwOwotCi0JcmV0dXJuOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JCVRoaXMgcm91dGluZSBpcyBleGVjdXRlZCBwZXJpb2RpY2FsbHkgdG8gLQotCQkxLiBEZWNpZGUgaWYgaXQncyBhIHJpZ2h0IHRpbWUgdG8gdHVybiBvbiBQd3JNZ210IGJpdCBvZiBhbGwKLQkJICAgb3V0Z29paW5nIGZyYW1lcwotCQkyLiBDYWxjdWxhdGUgQ2hhbm5lbFF1YWxpdHkgYmFzZWQgb24gc3RhdGlzdGljcyBvZiB0aGUgbGFzdAotCQkgICBwZXJpb2QsIHNvIHRoYXQgVFggcmF0ZSB3b24ndCB0b2dnbGluZyB2ZXJ5IGZyZXF1ZW50bHkgYmV0d2VlbiBhCi0JCSAgIHN1Y2Nlc3NmdWwgVFggYW5kIGEgZmFpbGVkIFRYLgotCQkzLiBJZiB0aGUgY2FsY3VsYXRlZCBDaGFubmVsUXVhbGl0eSBpbmRpY2F0ZWQgY3VycmVudCBjb25uZWN0aW9uIG5vdAotCQkgICBoZWFsdGh5LCB0aGVuIGEgUk9BTWluZyBhdHRlbXB0IGlzIHRyaWVkIGhlcmUuCi0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLSNkZWZpbmUgQURIT0NfQkVBQ09OX0xPU1RfVElNRQkJKDgqT1NfSFopCS8qIDggc2VjICovCi12b2lkIE1sbWVQZXJpb2RpY0V4ZWModm9pZCAqU3lzdGVtU3BlY2lmaWMxLAotCQkgICAgICB2b2lkICpGdW5jdGlvbkNvbnRleHQsCi0JCSAgICAgIHZvaWQgKlN5c3RlbVNwZWNpZmljMiwgdm9pZCAqU3lzdGVtU3BlY2lmaWMzKQotewotCXVuc2lnbmVkIGxvbmcgVHhUb3RhbENudDsKLQlzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQgPSAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqKUZ1bmN0aW9uQ29udGV4dDsKLQotI2lmZGVmIFJUTVBfTUFDX1BDSQotCXsKLQkJLyogSWYgSGFyZHdhcmUgY29udHJvbGxlZCBSYWRpbyBlbmFibGVkLCB3ZSBoYXZlIHRvIGNoZWNrIEdQSU8gcGluMiBldmVyeSAyIHNlY29uZC4gKi8KLQkJLyogTW92ZSBjb2RlIHRvIGhlcmUsIGJlY2F1c2UgZm9sbG93aW5nIGNvZGUgd2lsbCByZXR1cm4gd2hlbiByYWRpbyBpcyBvZmYgKi8KLQkJaWYgKChwQWQtPk1sbWUuUGVyaW9kaWNSb3VuZCAlIChNTE1FX1RBU0tfRVhFQ19NVUxUSVBMRSAqIDIpID09Ci0JCSAgICAgMCkgJiYgKHBBZC0+U3RhQ2ZnLmJIYXJkd2FyZVJhZGlvID09IFRSVUUpCi0JCSAgICAmJiAoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkKLQkJICAgICYmICghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpKQotCQkgICAgLyomJihwQWQtPmJQQ0ljbGtPZmYgPT0gRkFMU0UpICovCi0JCSAgICApIHsKLQkJCXUzMiBkYXRhID0gMDsKLQotCQkJLyogUmVhZCBHUElPIHBpbjIgYXMgSGFyZHdhcmUgY29udHJvbGxlZCByYWRpbyBzdGF0ZSAqLwotI2lmbmRlZiBSVDMwOTAKLQkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgR1BJT19DVFJMX0NGRywgJmRhdGEpOwotI2VuZGlmIC8qIFJUMzA5MCAvLyAqLwotLypLSChQQ0lFIFBTKTpBZGRlZCBiYXNlZCBvbiBKYW5lPC0tICovCi0jaWZkZWYgUlQzMDkwCi0vKiBSZWFkIEdQSU8gcGluMiBhcyBIYXJkd2FyZSBjb250cm9sbGVkIHJhZGlvIHN0YXRlICovCi0vKiBXZSBuZWVkIHRvIFJlYWQgR1BJTyBpZiBIVyBzYWlkIHNvIG5vIG1hdGVyIHdoYXQgYWR2YW5jZSBwb3dlciBzYXZpbmcgKi8KLQkJCWlmICgocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkgJiYgKElETEVfT04ocEFkKSkKLQkJCSAgICAmJgotCQkJICAgIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSURMRV9SQURJT19PRkYpKQotCQkJICAgICYmIChwQWQtPlN0YUNmZy5QU0NvbnRyb2wuZmllbGQuRW5hYmxlUFNpbklkbGUgPT0KLQkJCQlUUlVFKSkgewotCQkJCS8qIFdhbnQgdG8gbWFrZSBzdXJlIGRldmljZSBnb2VzIHRvIEwwIHN0YXRlIGJlZm9yZSByZWFkaW5nIHJlZ2lzdGVyLiAqLwotCQkJCVJUTVBQQ0llTGlua0N0cmxWYWx1ZVJlc3RvcmUocEFkLCAwKTsKLQkJCQlSVE1QX0lPX0ZPUkNFX1JFQUQzMihwQWQsIEdQSU9fQ1RSTF9DRkcsICZkYXRhKTsKLQkJCQlSVE1QUENJZUxpbmtDdHJsU2V0dGluZyhwQWQsIDMpOwotCQkJfSBlbHNlCi0JCQkJUlRNUF9JT19GT1JDRV9SRUFEMzIocEFkLCBHUElPX0NUUkxfQ0ZHLCAmZGF0YSk7Ci0jZW5kaWYgLyogUlQzMDkwIC8vICovCi0vKktIKFBDSUUgUFMpOkFkZGVkIGJhc2VkIG9uIEphbmUtLT4gKi8KLQotCQkJaWYgKGRhdGEgJiAweDA0KSB7Ci0JCQkJcEFkLT5TdGFDZmcuYkh3UmFkaW8gPSBUUlVFOwotCQkJfSBlbHNlIHsKLQkJCQlwQWQtPlN0YUNmZy5iSHdSYWRpbyA9IEZBTFNFOwotCQkJfQotCQkJaWYgKHBBZC0+U3RhQ2ZnLmJSYWRpbyAhPQotCQkJICAgIChwQWQtPlN0YUNmZy5iSHdSYWRpbyAmJiBwQWQtPlN0YUNmZy5iU3dSYWRpbykpIHsKLQkJCQlwQWQtPlN0YUNmZy5iUmFkaW8gPSAocEFkLT5TdGFDZmcuYkh3UmFkaW8KLQkJCQkJCSAgICAgICYmIHBBZC0+U3RhQ2ZnLmJTd1JhZGlvKTsKLQkJCQlpZiAocEFkLT5TdGFDZmcuYlJhZGlvID09IFRSVUUpIHsKLQkJCQkJTWxtZVJhZGlvT24ocEFkKTsKLQkJCQkJLyogVXBkYXRlIGV4dHJhIGluZm9ybWF0aW9uICovCi0JCQkJCXBBZC0+RXh0cmFJbmZvID0gRVhUUkFfSU5GT19DTEVBUjsKLQkJCQl9IGVsc2UgewotCQkJCQlNbG1lUmFkaW9PZmYocEFkKTsKLQkJCQkJLyogVXBkYXRlIGV4dHJhIGluZm9ybWF0aW9uICovCi0JCQkJCXBBZC0+RXh0cmFJbmZvID0gSFdfUkFESU9fT0ZGOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLQotCS8qIERvIG5vdGhpbmcgaWYgdGhlIGRyaXZlciBpcyBzdGFydGluZyBoYWx0IHN0YXRlLiAqLwotCS8qIFRoaXMgbWlnaHQgaGFwcGVuIHdoZW4gdGltZXIgYWxyZWFkeSBiZWVuIGZpcmVkIGJlZm9yZSBjYW5jZWwgdGltZXIgd2l0aCBtbG1laGFsdCAqLwotCWlmICgoUlRNUF9URVNUX0ZMQUcocEFkLCAoZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwKLQkJCQkgIGZSVE1QX0FEQVBURVJfUkFESU9fT0ZGIHwKLQkJCQkgIGZSVE1QX0FEQVBURVJfUkFESU9fTUVBU1VSRU1FTlQgfAotCQkJCSAgZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUykpKSkKLQkJcmV0dXJuOwotCi0JUlRNUF9NTE1FX1BSRV9TQU5JVFlfQ0hFQ0socEFkKTsKLQotCXsKLQkJLyogRG8gbm90aGluZyBpZiBtb25pdG9yIG1vZGUgaXMgb24gKi8KLQkJaWYgKE1PTklUT1JfT04ocEFkKSkKLQkJCXJldHVybjsKLQotCQlpZiAocEFkLT5NbG1lLlBlcmlvZGljUm91bmQgJiAweDEpIHsKLQkJCS8qIFRoaXMgaXMgdGhlIGZpeCBmb3Igd2lmaSAxMW4gZXh0ZW5zaW9uIGNoYW5uZWwgb3ZlcmxhcHBpbmcgdGVzdCBjYXNlLiAgZm9yIDI4NjBEICovCi0JCQlpZiAoKChwQWQtPk1BQ1ZlcnNpb24gJiAweGZmZmYpID09IDB4MDEwMSkgJiYKLQkJCSAgICAoU1RBX1RHTl9XSUZJX09OKHBBZCkpICYmCi0JCQkgICAgKHBBZC0+Q29tbW9uQ2ZnLklPVGVzdFBhcm0uYlRvZ2dsZSA9PSBGQUxTRSkpCi0JCQl7Ci0JCQkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhPUF9DVFJMX0NGRywgMHgyNEJmKTsKLQkJCQlwQWQtPkNvbW1vbkNmZy5JT1Rlc3RQYXJtLmJUb2dnbGUgPSBUUlVFOwotCQkJfSBlbHNlIGlmICgoU1RBX1RHTl9XSUZJX09OKHBBZCkpICYmCi0JCQkJICAgKChwQWQtPk1BQ1ZlcnNpb24gJiAweGZmZmYpID09IDB4MDEwMSkpIHsKLQkJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWE9QX0NUUkxfQ0ZHLCAweDI0M2YpOwotCQkJCXBBZC0+Q29tbW9uQ2ZnLklPVGVzdFBhcm0uYlRvZ2dsZSA9IEZBTFNFOwotCQkJfQotCQl9Ci0JfQotCi0JcEFkLT5iVXBkYXRlQmNuQ250RG9uZSA9IEZBTFNFOwotCi0vKiAgICAgIFJFQ0JBVGltZXJUaW1lb3V0KFN5c3RlbVNwZWNpZmljMSxGdW5jdGlvbkNvbnRleHQsU3lzdGVtU3BlY2lmaWMyLFN5c3RlbVNwZWNpZmljMyk7ICovCi0JcEFkLT5NbG1lLlBlcmlvZGljUm91bmQrKzsKLQotI2lmZGVmIFJUTVBfTUFDX1VTQgotCS8qIGV4ZWN1dGUgZXZlcnkgMTAwbXMsIHVwZGF0ZSB0aGUgVHggRklGTyBDbnQgZm9yIHVwZGF0ZSBUeCBSYXRlLiAqLwotCU5JQ1VwZGF0ZUZpZm9TdGFDb3VudGVycyhwQWQpOwotI2VuZGlmIC8qIFJUTVBfTUFDX1VTQiAvLyAqLwotCi0JLyogZXhlY3V0ZSBldmVyeSA1MDBtcyAqLwotCWlmICgocEFkLT5NbG1lLlBlcmlvZGljUm91bmQgJSA1ID09IDApCi0JICAgICYmIFJUTVBBdXRvUmF0ZVN3aXRjaENoZWNrKHBBZCkKLQkgICAgLyooT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19UWF9SQVRFX1NXSVRDSF9FTkFCTEVEKSkgKi8gKQotCXsKLQkJLyogcGVyZm9ybSBkeW5hbWljIHR4IHJhdGUgc3dpdGNoaW5nIGJhc2VkIG9uIHBhc3QgVFggaGlzdG9yeSAqLwotCQl7Ci0JCQlpZiAoKE9QU1RBVFVTX1RFU1RfRkxBRwotCQkJICAgICAocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkKLQkJCSAgICApCi0JCQkgICAgJiYgKCFPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpKSkKLQkJCQlNbG1lRHluYW1pY1R4UmF0ZVN3aXRjaGluZyhwQWQpOwotCQl9Ci0JfQotCS8qIE5vcm1hbCAxIHNlY29uZCBNbG1lIFBlcmlvZGljRXhlYy4gKi8KLQlpZiAocEFkLT5NbG1lLlBlcmlvZGljUm91bmQgJSBNTE1FX1RBU0tfRVhFQ19NVUxUSVBMRSA9PSAwKSB7Ci0JCXBBZC0+TWxtZS5PbmVTZWNQZXJpb2RpY1JvdW5kKys7Ci0KLQkJLypPUklCQVRpbWVyVGltZW91dChwQWQpOyAqLwotCi0JCS8qIE1lZGlhIHN0YXR1cyBjaGFuZ2VkLCByZXBvcnQgdG8gTkRJUyAqLwotCQlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX01FRElBX1NUQVRFX0NIQU5HRSkpIHsKLQkJCVJUTVBfQ0xFQVJfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTUVESUFfU1RBVEVfQ0hBTkdFKTsKLQkJCWlmIChPUFNUQVRVU19URVNUX0ZMQUcKLQkJCSAgICAocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkpIHsKLQkJCQlwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSA9Ci0JCQkJICAgIE5kaXNNZWRpYVN0YXRlQ29ubmVjdGVkOwotCQkJCVJUTVBfSW5kaWNhdGVNZWRpYVN0YXRlKHBBZCk7Ci0KLQkJCX0gZWxzZSB7Ci0JCQkJcEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPQotCQkJCSAgICBOZGlzTWVkaWFTdGF0ZURpc2Nvbm5lY3RlZDsKLQkJCQlSVE1QX0luZGljYXRlTWVkaWFTdGF0ZShwQWQpOwotCQkJfQotCQl9Ci0KLQkJTmRpc0dldFN5c3RlbVVwVGltZSgmcEFkLT5NbG1lLk5vdzMyKTsKLQotCQkvKiBhZGQgdGhlIG1vc3QgdXAtdG8tZGF0ZSBoL3cgcmF3IGNvdW50ZXJzIGludG8gc29mdHdhcmUgdmFyaWFibGUsIHNvIHRoYXQgKi8KLQkJLyogdGhlIGR5bmFtaWMgdHVuaW5nIG1lY2hhbmlzbSBiZWxvdyBhcmUgYmFzZWQgb24gbW9zdCB1cC10by1kYXRlIGluZm9ybWF0aW9uICovCi0JCU5JQ1VwZGF0ZVJhd0NvdW50ZXJzKHBBZCk7Ci0KLSNpZmRlZiBSVE1QX01BQ19VU0IKLQkJUlRVU0JXYXRjaERvZyhwQWQpOwotI2VuZGlmIC8qIFJUTVBfTUFDX1VTQiAvLyAqLwotCi0JCS8qIE5lZWQgc3RhdGlzdGljcyBhZnRlciByZWFkIGNvdW50ZXIuIFNvIHB1dCBhZnRlciBOSUNVcGRhdGVSYXdDb3VudGVycyAqLwotCQlPUklCQVRpbWVyVGltZW91dChwQWQpOwotCi0JCS8qIGlmIE1HTVQgUklORyBpcyBmdWxsIG1vcmUgdGhhbiB0d2ljZSB3aXRoaW4gMSBzZWNvbmQsIHdlIGNvbnNpZGVyIHRoZXJlJ3MgKi8KLQkJLyogYSBoYXJkd2FyZSBwcm9ibGVtIHN0dWNraW5nIHRoZSBUWCBwYXRoLiBJbiB0aGlzIGNhc2UsIHRyeSBhIGhhcmR3YXJlIHJlc2V0ICovCi0JCS8qIHRvIHJlY292ZXIgdGhlIHN5c3RlbSAqLwotCQkvKiAgICAgIGlmIChwQWQtPlJhbGlua0NvdW50ZXJzLk1nbXRSaW5nRnVsbENvdW50ID49IDIpICovCi0JCS8qICAgICAgICAgICAgICBSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQVJEV0FSRV9FUlJPUik7ICovCi0JCS8qICAgICAgZWxzZSAqLwotCQkvKiAgICAgICAgICAgICAgcEFkLT5SYWxpbmtDb3VudGVycy5NZ210UmluZ0Z1bGxDb3VudCA9IDA7ICovCi0KLQkJLyogVGhlIHRpbWUgcGVyaW9kIGZvciBjaGVja2luZyBhbnRlbm5hIGlzIGFjY29yZGluZyB0byB0cmFmZmljICovCi0JCXsKLQkJCWlmIChwQWQtPk1sbWUuYkVuYWJsZUF1dG9BbnRlbm5hQ2hlY2spIHsKLQkJCQlUeFRvdGFsQ250ID0KLQkJCQkgICAgcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeE5vUmV0cnlPa0NvdW50ICsKLQkJCQkgICAgcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeFJldHJ5T2tDb3VudCArCi0JCQkJICAgIHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhGYWlsQ291bnQ7Ci0KLQkJCQkvKiBkeW5hbWljIGFkanVzdCBhbnRlbm5hIGV2YWx1YXRpb24gcGVyaW9kIGFjY29yZGluZyB0byB0aGUgdHJhZmZpYyAqLwotCQkJCWlmIChUeFRvdGFsQ250ID4gNTApIHsKLQkJCQkJaWYgKHBBZC0+TWxtZS5PbmVTZWNQZXJpb2RpY1JvdW5kICUKLQkJCQkJICAgIDEwID09IDApIHsKLQkJCQkJCUFzaWNFdmFsdWF0ZVJ4QW50KHBBZCk7Ci0JCQkJCX0KLQkJCQl9IGVsc2UgewotCQkJCQlpZiAocEFkLT5NbG1lLk9uZVNlY1BlcmlvZGljUm91bmQgJSAzID09Ci0JCQkJCSAgICAwKSB7Ci0JCQkJCQlBc2ljRXZhbHVhdGVSeEFudChwQWQpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJU1RBTWxtZVBlcmlvZGljRXhlYyhwQWQpOwotCi0JCU1sbWVSZXNldFJhbGlua0NvdW50ZXJzKHBBZCk7Ci0KLQkJewotI2lmZGVmIFJUTVBfTUFDX1BDSQotCQkJaWYgKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkKLQkJCSAgICAmJiAocEFkLT5iUENJY2xrT2ZmID09IEZBTFNFKSkKLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLQkJCXsKLQkJCQkvKiBXaGVuIEFkaG9jIGJlYWNvbiBpcyBlbmFibGVkIGFuZCBSVFMvQ1RTIGlzIGVuYWJsZWQsIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgaGFyZHdhcmUgTUFDIEZTTSB3aWxsIHJ1biBpbnRvIGEgZGVhZGxvY2sgKi8KLQkJCQkvKiBhbmQgc2VuZGluZyBDVFMtdG8tc2VsZiBvdmVyIGFuZCBvdmVyLiAqLwotCQkJCS8qIFNvZnR3YXJlIFBhdGNoIFNvbHV0aW9uOiAqLwotCQkJCS8qIDEuIFBvbGxpbmcgZGVidWcgc3RhdGUgcmVnaXN0ZXIgMHgxMEY0IGV2ZXJ5IG9uZSBzZWNvbmQuICovCi0JCQkJLyogMi4gSWYgaW4gMHgxMEY0IHRoZSAoKGJpdDI5PT0xKSAmJiAoYml0Nz09MSkpIE9SICgoYml0Mjk9PTEpICYmIChiaXQ1PT0xKSksIGl0IG1lYW5zIHRoZSBkZWFkbG9jayBoYXMgb2NjdXJyZWQuICovCi0JCQkJLyogMy4gSWYgdGhlIGRlYWRsb2NrIG9jY3VycmVkLCByZXNldCBNQUMvQkJQIGJ5IHNldHRpbmcgMHgxMDA0IHRvIDB4MDAwMSBmb3IgYSB3aGlsZSB0aGVuIHNldHRpbmcgaXQgYmFjayB0byAweDAwMEMgYWdhaW4uICovCi0KLQkJCQl1MzIgTWFjUmVnID0gMDsKLQotCQkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgMHgxMEY0LCAmTWFjUmVnKTsKLQkJCQlpZiAoKChNYWNSZWcgJiAweDIwMDAwMDAwKSAmJiAoTWFjUmVnICYgMHg4MCkpCi0JCQkJICAgIHx8ICgoTWFjUmVnICYgMHgyMDAwMDAwMCkKLQkJCQkJJiYgKE1hY1JlZyAmIDB4MjApKSkgewotCQkJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIDB4MSk7Ci0JCQkJCVJUTVB1c2VjRGVsYXkoMSk7Ci0JCQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgMHhDKTsKLQotCQkJCQlEQkdQUklOVChSVF9ERUJVR19XQVJOLAotCQkJCQkJICgiV2FybmluZywgTUFDIHNwZWNpZmljIGNvbmRpdGlvbiBvY2N1cnMgXG4iKSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJUlRNUF9NTE1FX0hBTkRMRVIocEFkKTsKLQl9Ci0KLQlwQWQtPmJVcGRhdGVCY25DbnREb25lID0gRkFMU0U7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlWYWxpZGF0ZSBTU0lEIGZvciBjb25uZWN0aW9uIHRyeSBhbmQgcmVzY2FuIHB1cnBvc2UKLQlWYWxpZCBTU0lEIHdpbGwgaGF2ZSB2aXNpYmxlIGNoYXJzIG9ubHkuCi0JVGhlIHZhbGlkIGxlbmd0aCBpcyBmcm9tIDAgdG8gMzIuCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotQk9PTEVBTiBNbG1lVmFsaWRhdGVTU0lEKHU4ICpwU3NpZCwgdTggU3NpZExlbikKLXsKLQlpbnQgaW5kZXg7Ci0KLQlpZiAoU3NpZExlbiA+IE1BWF9MRU5fT0ZfU1NJRCkKLQkJcmV0dXJuIChGQUxTRSk7Ci0KLQkvKiBDaGVjayBlYWNoIGNoYXJhY3RlciB2YWx1ZSAqLwotCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IFNzaWRMZW47IGluZGV4KyspIHsKLQkJaWYgKHBTc2lkW2luZGV4XSA8IDB4MjApCi0JCQlyZXR1cm4gKEZBTFNFKTsKLQl9Ci0KLQkvKiBBbGwgY2hlY2tlZCAqLwotCXJldHVybiAoVFJVRSk7Ci19Ci0KLXZvaWQgTWxtZVNlbGVjdFR4UmF0ZVRhYmxlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgIHN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKnBFbnRyeSwKLQkJCSAgIHU4ICoqIHBwVGFibGUsCi0JCQkgICB1OCAqcFRhYmxlU2l6ZSwgdTggKnBJbml0VHhSYXRlSWR4KQotewotCWRvIHsKLQkJLyogZGVjaWRlIHRoZSByYXRlIHRhYmxlIGZvciB0dW5pbmcgKi8KLQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZVRhYmxlU2l6ZSA+IDApIHsKLQkJCSpwcFRhYmxlID0gUmF0ZVN3aXRjaFRhYmxlOwotCQkJKnBUYWJsZVNpemUgPSBSYXRlU3dpdGNoVGFibGVbMF07Ci0JCQkqcEluaXRUeFJhdGVJZHggPSBSYXRlU3dpdGNoVGFibGVbMV07Ci0KLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKSAmJiBBREhPQ19PTihwQWQpKSB7Ci0JCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPj0gUEhZXzExQUJHTl9NSVhFRCkgJiYgKHBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFswXSA9PSAweGZmKSAmJiAoKHBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFsxXSA9PSAweDAwKSB8fCAocEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCA9PSAxKSkpIHsJLyogMTFOIDFTIEFkaG9jICovCi0JCQkJKnBwVGFibGUgPSBSYXRlU3dpdGNoVGFibGUxMU4xUzsKLQkJCQkqcFRhYmxlU2l6ZSA9IFJhdGVTd2l0Y2hUYWJsZTExTjFTWzBdOwotCQkJCSpwSW5pdFR4UmF0ZUlkeCA9IFJhdGVTd2l0Y2hUYWJsZTExTjFTWzFdOwotCi0JCQl9IGVsc2UgaWYgKChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpICYmIChwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMF0gPT0gMHhmZikgJiYgKHBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFsxXSA9PSAweGZmKSAmJiAocEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCA9PSAyKSkgewkvKiAxMU4gMlMgQWRob2MgKi8KLQkJCQlpZiAocEFkLT5MYXRjaFJmUmVncy5DaGFubmVsIDw9IDE0KSB7Ci0JCQkJCSpwcFRhYmxlID0gUmF0ZVN3aXRjaFRhYmxlMTFOMlM7Ci0JCQkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFOMlNbMF07Ci0JCQkJCSpwSW5pdFR4UmF0ZUlkeCA9Ci0JCQkJCSAgICBSYXRlU3dpdGNoVGFibGUxMU4yU1sxXTsKLQkJCQl9IGVsc2UgewotCQkJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExTjJTRm9yQUJhbmQ7Ci0JCQkJCSpwVGFibGVTaXplID0KLQkJCQkJICAgIFJhdGVTd2l0Y2hUYWJsZTExTjJTRm9yQUJhbmRbMF07Ci0JCQkJCSpwSW5pdFR4UmF0ZUlkeCA9Ci0JCQkJCSAgICBSYXRlU3dpdGNoVGFibGUxMU4yU0ZvckFCYW5kWzFdOwotCQkJCX0KLQotCQkJfSBlbHNlIGlmICgocEVudHJ5LT5SYXRlTGVuID09IDQpCi0JCQkJICAgJiYgKHBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFswXSA9PSAwKQotCQkJCSAgICYmIChwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMV0gPT0gMCkKLQkJCSAgICApIHsKLQkJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExQjsKLQkJCQkqcFRhYmxlU2l6ZSA9IFJhdGVTd2l0Y2hUYWJsZTExQlswXTsKLQkJCQkqcEluaXRUeFJhdGVJZHggPSBSYXRlU3dpdGNoVGFibGUxMUJbMV07Ci0KLQkJCX0gZWxzZSBpZiAocEFkLT5MYXRjaFJmUmVncy5DaGFubmVsIDw9IDE0KSB7Ci0JCQkJKnBwVGFibGUgPSBSYXRlU3dpdGNoVGFibGUxMUJHOwotCQkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFCR1swXTsKLQkJCQkqcEluaXRUeFJhdGVJZHggPSBSYXRlU3dpdGNoVGFibGUxMUJHWzFdOwotCi0JCQl9IGVsc2UgewotCQkJCSpwcFRhYmxlID0gUmF0ZVN3aXRjaFRhYmxlMTFHOwotCQkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFHWzBdOwotCQkJCSpwSW5pdFR4UmF0ZUlkeCA9IFJhdGVTd2l0Y2hUYWJsZTExR1sxXTsKLQotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQkJLyppZiAoKHBBZC0+U3RhQWN0aXZlLlN1cFJhdGVMZW4gKyBwQWQtPlN0YUFjdGl2ZS5FeHRSYXRlTGVuID09IDEyKSAmJiAocEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5NQ1NTZXRbMF0gPT0gMHhmZikgJiYgKi8KLQkJLyogICAgICAoKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uTUNTU2V0WzFdID09IDB4MDApIHx8IChwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoID09IDEpKSkgKi8KLQkJaWYgKCgocEVudHJ5LT5SYXRlTGVuID09IDEyKSB8fCAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkpICYmIChwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMF0gPT0gMHhmZikgJiYgKChwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMV0gPT0gMHgwMCkgfHwgKHBBZC0+Q29tbW9uQ2ZnLlR4U3RyZWFtID09IDEpKSkgewkvKiAxMUJHTiAxUyBBUCAqLwotCQkJKnBwVGFibGUgPSBSYXRlU3dpdGNoVGFibGUxMUJHTjFTOwotCQkJKnBUYWJsZVNpemUgPSBSYXRlU3dpdGNoVGFibGUxMUJHTjFTWzBdOwotCQkJKnBJbml0VHhSYXRlSWR4ID0gUmF0ZVN3aXRjaFRhYmxlMTFCR04xU1sxXTsKLQotCQkJYnJlYWs7Ci0JCX0KLQkJLyplbHNlIGlmICgocEFkLT5TdGFBY3RpdmUuU3VwUmF0ZUxlbiArIHBBZC0+U3RhQWN0aXZlLkV4dFJhdGVMZW4gPT0gMTIpICYmIChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldFswXSA9PSAweGZmKSAmJiAqLwotCQkvKiAgICAgIChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldFsxXSA9PSAweGZmKSAmJiAocEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCA9PSAyKSkgKi8KLQkJaWYgKCgocEVudHJ5LT5SYXRlTGVuID09IDEyKSB8fCAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkpICYmIChwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMF0gPT0gMHhmZikgJiYgKHBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFsxXSA9PSAweGZmKSAmJiAocEFkLT5Db21tb25DZmcuVHhTdHJlYW0gPT0gMikpIHsJLyogMTFCR04gMlMgQVAgKi8KLQkJCWlmIChwQWQtPkxhdGNoUmZSZWdzLkNoYW5uZWwgPD0gMTQpIHsKLQkJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExQkdOMlM7Ci0JCQkJKnBUYWJsZVNpemUgPSBSYXRlU3dpdGNoVGFibGUxMUJHTjJTWzBdOwotCQkJCSpwSW5pdFR4UmF0ZUlkeCA9IFJhdGVTd2l0Y2hUYWJsZTExQkdOMlNbMV07Ci0KLQkJCX0gZWxzZSB7Ci0JCQkJKnBwVGFibGUgPSBSYXRlU3dpdGNoVGFibGUxMUJHTjJTRm9yQUJhbmQ7Ci0JCQkJKnBUYWJsZVNpemUgPSBSYXRlU3dpdGNoVGFibGUxMUJHTjJTRm9yQUJhbmRbMF07Ci0JCQkJKnBJbml0VHhSYXRlSWR4ID0KLQkJCQkgICAgUmF0ZVN3aXRjaFRhYmxlMTFCR04yU0ZvckFCYW5kWzFdOwotCi0JCQl9Ci0JCQlicmVhazsKLQkJfQotCQkvKmVsc2UgaWYgKChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldFswXSA9PSAweGZmKSAmJiAoKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uTUNTU2V0WzFdID09IDB4MDApIHx8IChwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoID09IDEpKSkgKi8KLQkJaWYgKChwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMF0gPT0gMHhmZikgJiYgKChwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMV0gPT0gMHgwMCkgfHwgKHBBZC0+Q29tbW9uQ2ZnLlR4U3RyZWFtID09IDEpKSkgewkvKiAxMU4gMVMgQVAgKi8KLQkJCSpwcFRhYmxlID0gUmF0ZVN3aXRjaFRhYmxlMTFOMVM7Ci0JCQkqcFRhYmxlU2l6ZSA9IFJhdGVTd2l0Y2hUYWJsZTExTjFTWzBdOwotCQkJKnBJbml0VHhSYXRlSWR4ID0gUmF0ZVN3aXRjaFRhYmxlMTFOMVNbMV07Ci0KLQkJCWJyZWFrOwotCQl9Ci0JCS8qZWxzZSBpZiAoKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uTUNTU2V0WzBdID09IDB4ZmYpICYmIChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldFsxXSA9PSAweGZmKSAmJiAocEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCA9PSAyKSkgKi8KLQkJaWYgKChwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMF0gPT0gMHhmZikgJiYgKHBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFsxXSA9PSAweGZmKSAmJiAocEFkLT5Db21tb25DZmcuVHhTdHJlYW0gPT0gMikpIHsJLyogMTFOIDJTIEFQICovCi0JCQlpZiAocEFkLT5MYXRjaFJmUmVncy5DaGFubmVsIDw9IDE0KSB7Ci0JCQkJKnBwVGFibGUgPSBSYXRlU3dpdGNoVGFibGUxMU4yUzsKLQkJCQkqcFRhYmxlU2l6ZSA9IFJhdGVTd2l0Y2hUYWJsZTExTjJTWzBdOwotCQkJCSpwSW5pdFR4UmF0ZUlkeCA9IFJhdGVTd2l0Y2hUYWJsZTExTjJTWzFdOwotCQkJfSBlbHNlIHsKLQkJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExTjJTRm9yQUJhbmQ7Ci0JCQkJKnBUYWJsZVNpemUgPSBSYXRlU3dpdGNoVGFibGUxMU4yU0ZvckFCYW5kWzBdOwotCQkJCSpwSW5pdFR4UmF0ZUlkeCA9Ci0JCQkJICAgIFJhdGVTd2l0Y2hUYWJsZTExTjJTRm9yQUJhbmRbMV07Ci0JCQl9Ci0KLQkJCWJyZWFrOwotCQl9Ci0JCS8qZWxzZSBpZiAoKHBBZC0+U3RhQWN0aXZlLlN1cFJhdGVMZW4gPT0gNCkgJiYgKHBBZC0+U3RhQWN0aXZlLkV4dFJhdGVMZW4gPT0gMCkgJiYgKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uTUNTU2V0WzBdID09IDApICYmIChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldFsxXSA9PSAwKSkgKi8KLQkJaWYgKChwRW50cnktPlJhdGVMZW4gPT0gNCB8fCBwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUIpCi0JCSAgICAvKkl2ZXJzb24gbWFyayBmb3IgQWRob2MgYiBtb2RlLHN0YSB3aWxsIHVzZSByYXRlIDU0ICBNYnBzIHdoZW4gY29ubmVjdCB3aXRoIHN0YSBiL2cvbiBtb2RlICovCi0JCSAgICAvKiAmJiAocEVudHJ5LT5IVENhcGFiaWxpdHkuTUNTU2V0WzBdID09IDApICYmIChwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMV0gPT0gMCkgKi8KLQkJICAgICkgewkJLyogQiBvbmx5IEFQICovCi0JCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExQjsKLQkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFCWzBdOwotCQkJKnBJbml0VHhSYXRlSWR4ID0gUmF0ZVN3aXRjaFRhYmxlMTFCWzFdOwotCi0JCQlicmVhazsKLQkJfQotCQkvKmVsc2UgaWYgKChwQWQtPlN0YUFjdGl2ZS5TdXBSYXRlTGVuICsgcEFkLT5TdGFBY3RpdmUuRXh0UmF0ZUxlbiA+IDgpICYmIChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldFswXSA9PSAwKSAmJiAocEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5NQ1NTZXRbMV0gPT0gMCkpICovCi0JCWlmICgocEVudHJ5LT5SYXRlTGVuID4gOCkKLQkJICAgICYmIChwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMF0gPT0gMCkKLQkJICAgICYmIChwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMV0gPT0gMCkKLQkJICAgICkgewkJLyogQi9HICBtaXhlZCBBUCAqLwotCQkJKnBwVGFibGUgPSBSYXRlU3dpdGNoVGFibGUxMUJHOwotCQkJKnBUYWJsZVNpemUgPSBSYXRlU3dpdGNoVGFibGUxMUJHWzBdOwotCQkJKnBJbml0VHhSYXRlSWR4ID0gUmF0ZVN3aXRjaFRhYmxlMTFCR1sxXTsKLQotCQkJYnJlYWs7Ci0JCX0KLQkJLyplbHNlIGlmICgocEFkLT5TdGFBY3RpdmUuU3VwUmF0ZUxlbiArIHBBZC0+U3RhQWN0aXZlLkV4dFJhdGVMZW4gPT0gOCkgJiYgKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uTUNTU2V0WzBdID09IDApICYmIChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldFsxXSA9PSAwKSkgKi8KLQkJaWYgKChwRW50cnktPlJhdGVMZW4gPT0gOCkKLQkJICAgICYmIChwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMF0gPT0gMCkKLQkJICAgICYmIChwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMV0gPT0gMCkKLQkJICAgICkgewkJLyogRyBvbmx5IEFQICovCi0JCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExRzsKLQkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFHWzBdOwotCQkJKnBJbml0VHhSYXRlSWR4ID0gUmF0ZVN3aXRjaFRhYmxlMTFHWzFdOwotCi0JCQlicmVhazsKLQkJfQotCi0JCXsKLQkJCS8qZWxzZSBpZiAoKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uTUNTU2V0WzBdID09IDApICYmIChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldFsxXSA9PSAwKSkgKi8KLQkJCWlmICgocEVudHJ5LT5IVENhcGFiaWxpdHkuTUNTU2V0WzBdID09IDApICYmIChwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMV0gPT0gMCkpIHsJLyogTGVnYWN5IG1vZGUgKi8KLQkJCQlpZiAocEFkLT5Db21tb25DZmcuTWF4VHhSYXRlIDw9IFJBVEVfMTEpIHsKLQkJCQkJKnBwVGFibGUgPSBSYXRlU3dpdGNoVGFibGUxMUI7Ci0JCQkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFCWzBdOwotCQkJCQkqcEluaXRUeFJhdGVJZHggPSBSYXRlU3dpdGNoVGFibGUxMUJbMV07Ci0JCQkJfSBlbHNlIGlmICgocEFkLT5Db21tb25DZmcuTWF4VHhSYXRlID4gUkFURV8xMSkKLQkJCQkJICAgJiYgKHBBZC0+Q29tbW9uQ2ZnLk1pblR4UmF0ZSA+Ci0JCQkJCSAgICAgICBSQVRFXzExKSkgewotCQkJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExRzsKLQkJCQkJKnBUYWJsZVNpemUgPSBSYXRlU3dpdGNoVGFibGUxMUdbMF07Ci0JCQkJCSpwSW5pdFR4UmF0ZUlkeCA9IFJhdGVTd2l0Y2hUYWJsZTExR1sxXTsKLQotCQkJCX0gZWxzZSB7Ci0JCQkJCSpwcFRhYmxlID0gUmF0ZVN3aXRjaFRhYmxlMTFCRzsKLQkJCQkJKnBUYWJsZVNpemUgPSBSYXRlU3dpdGNoVGFibGUxMUJHWzBdOwotCQkJCQkqcEluaXRUeFJhdGVJZHggPQotCQkJCQkgICAgUmF0ZVN3aXRjaFRhYmxlMTFCR1sxXTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAocEFkLT5MYXRjaFJmUmVncy5DaGFubmVsIDw9IDE0KSB7Ci0JCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4U3RyZWFtID09IDEpIHsKLQkJCQkJKnBwVGFibGUgPSBSYXRlU3dpdGNoVGFibGUxMU4xUzsKLQkJCQkJKnBUYWJsZVNpemUgPSBSYXRlU3dpdGNoVGFibGUxMU4xU1swXTsKLQkJCQkJKnBJbml0VHhSYXRlSWR4ID0KLQkJCQkJICAgIFJhdGVTd2l0Y2hUYWJsZTExTjFTWzFdOwotCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsCi0JCQkJCQkgICAgICgiRFJTOiB1bmtub3duIG1vZGUsZGVmYXVsdCB1c2UgMTFOIDFTIEFQIFxuIikpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCSpwcFRhYmxlID0gUmF0ZVN3aXRjaFRhYmxlMTFOMlM7Ci0JCQkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFOMlNbMF07Ci0JCQkJCSpwSW5pdFR4UmF0ZUlkeCA9Ci0JCQkJCSAgICBSYXRlU3dpdGNoVGFibGUxMU4yU1sxXTsKLQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLAotCQkJCQkJICAgICAoIkRSUzogdW5rbm93biBtb2RlLGRlZmF1bHQgdXNlIDExTiAyUyBBUCBcbiIpKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCWlmIChwQWQtPkNvbW1vbkNmZy5UeFN0cmVhbSA9PSAxKSB7Ci0JCQkJCSpwcFRhYmxlID0gUmF0ZVN3aXRjaFRhYmxlMTFOMVM7Ci0JCQkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFOMVNbMF07Ci0JCQkJCSpwSW5pdFR4UmF0ZUlkeCA9Ci0JCQkJCSAgICBSYXRlU3dpdGNoVGFibGUxMU4xU1sxXTsKLQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLAotCQkJCQkJICAgICAoIkRSUzogdW5rbm93biBtb2RlLGRlZmF1bHQgdXNlIDExTiAxUyBBUCBcbiIpKTsKLQkJCQl9IGVsc2UgewotCQkJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExTjJTRm9yQUJhbmQ7Ci0JCQkJCSpwVGFibGVTaXplID0KLQkJCQkJICAgIFJhdGVTd2l0Y2hUYWJsZTExTjJTRm9yQUJhbmRbMF07Ci0JCQkJCSpwSW5pdFR4UmF0ZUlkeCA9Ci0JCQkJCSAgICBSYXRlU3dpdGNoVGFibGUxMU4yU0ZvckFCYW5kWzFdOwotCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsCi0JCQkJCQkgICAgICgiRFJTOiB1bmtub3duIG1vZGUsZGVmYXVsdCB1c2UgMTFOIDJTIEFQIFxuIikpOwotCQkJCX0KLQkJCX0KLQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwKLQkJCQkgICAgICgiRFJTOiB1bmtub3duIG1vZGUgKFN1cFJhdGVMZW49JWQsIEV4dFJhdGVMZW49JWQsIE1DU1NldFswXT0weCV4LCBNQ1NTZXRbMV09MHgleClcbiIsCi0JCQkJICAgICAgcEFkLT5TdGFBY3RpdmUuU3VwUmF0ZUxlbiwKLQkJCQkgICAgICBwQWQtPlN0YUFjdGl2ZS5FeHRSYXRlTGVuLAotCQkJCSAgICAgIHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uTUNTU2V0WzBdLAotCQkJCSAgICAgIHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uCi0JCQkJICAgICAgTUNTU2V0WzFdKSk7Ci0JCX0KLQl9IHdoaWxlIChGQUxTRSk7Ci19Ci0KLXZvaWQgU1RBTWxtZVBlcmlvZGljRXhlYyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0JdW5zaWduZWQgbG9uZyBUeFRvdGFsQ250OwotCWludCBpOwotCi0JLyoKLQkgICBXZSByZXR1cm4gaGVyZSBpbiBBVEUgbW9kZSwgYmVjYXVzZSB0aGUgc3RhdGlzdGljcwotCSAgIHRoYXQgQVRFIG5lZWQgYXJlIG5vdCBjb2xsZWN0ZWQgdmlhIHRoaXMgcm91dGluZS4KLQkgKi8KLSNpZiBkZWZpbmVkKFJUMzA1eCl8fGRlZmluZWQoUlQzMDcwKQotCS8qIHJlcXVlc3QgYnkgR2FyeSwgaWYgUnNzaTAgPiAtNDIsIEJCUCA4MiBuZWVkIHRvIGJlIGNoYW5nZWQgZnJvbSAweDYyIHRvIDB4NDIsICwgYmJwIDY3IG5lZWQgdG8gYmUgY2hhbmdlZCBmcm9tIDB4MjAgdG8gMHgxOCAqLwotCWlmICghcEFkLT5Db21tb25DZmcuSGlnaFBvd2VyUGF0Y2hEaXNhYmxlZCkgewotI2lmZGVmIFJUMzA3MAotCQlpZiAoKElTX1JUMzA3MChwQWQpICYmICgocEFkLT5NQUNWZXJzaW9uICYgMHhmZmZmKSA8IDB4MDIwMSkpKQotI2VuZGlmIC8qIFJUMzA3MCAvLyAqLwotCQl7Ci0JCQlpZiAoKHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTAgIT0gMCkKLQkJCSAgICAmJiAocEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMCA+Ci0JCQkJKHBBZC0+QmJwUnNzaVRvRGJtRGVsdGEgLSAzNSkpKSB7Ci0JCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjI3LCAweDIwKTsKLQkJCX0gZWxzZSB7Ci0JCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjI3LCAweDIzKTsKLQkJCX0KLQkJfQotCX0KLSNlbmRpZgotI2lmZGVmIFBDSUVfUFNfU1VQUE9SVAotLyogZG9uJ3QgcGVyZm9ybSBpZGxlLXBvd2VyLXNhdmUgbWVjaGFuaXNtIHdpdGhpbiAzIG1pbiBhZnRlciBkcml2ZXIgaW5pdGlhbGl6YXRpb24uICovCi0vKiBUaGlzIGNhbiBtYWtlIHJlYm9vdGVyIHRlc3QgbW9yZSByb2J1c3QgKi8KLQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19QQ0lFX0RFVklDRSkpIHsKLQkJaWYgKChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKSAmJiAoSURMRV9PTihwQWQpKQotCQkgICAgJiYgKHBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUgPT0gU1lOQ19JRExFKQotCQkgICAgJiYgKHBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPT0gQ05UTF9JRExFKQotCQkgICAgJiYgKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSURMRV9SQURJT19PRkYpKSkgewotCQkJaWYgKElTX1JUMzA5MChwQWQpIHx8IElTX1JUMzU3MihwQWQpIHx8IElTX1JUMzM5MChwQWQpKSB7Ci0JCQkJaWYgKHBBZC0+U3RhQ2ZnLlBTQ29udHJvbC5maWVsZC5FbmFibGVOZXdQUyA9PQotCQkJCSAgICBUUlVFKSB7Ci0JCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkJICgiJXNcbiIsIF9fZnVuY19fKSk7Ci0JCQkJCVJUMjh4eFBjaUFzaWNSYWRpb09mZihwQWQsCi0JCQkJCQkJICAgICAgR1VJX0lETEVfUE9XRVJfU0FWRSwKLQkJCQkJCQkgICAgICAwKTsKLQkJCQl9IGVsc2UgewotCQkJCQlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4MzAsCi0JCQkJCQkJICAgICBQb3dlclNhZmVDSUQsIDB4ZmYsCi0JCQkJCQkJICAgICAweDIpOwotCQkJCQkvKiBXYWl0IGNvbW1hbmQgc3VjY2VzcyAqLwotCQkJCQlBc2ljQ2hlY2tDb21tYW5PayhwQWQsIFBvd2VyU2FmZUNJRCk7Ci0JCQkJCVJUTVBfU0VUX0ZMQUcocEFkLAotCQkJCQkJICAgICAgZlJUTVBfQURBUFRFUl9JRExFX1JBRElPX09GRik7Ci0JCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkJICgiUFNNIC0gcnQzMHh4IElzc3VlIFNsZWVwIGNvbW1hbmQpXG4iKSk7Ci0JCQkJfQotCQkJfSBlbHNlIGlmIChwQWQtPk1sbWUuT25lU2VjUGVyaW9kaWNSb3VuZCA+IDE4MCkgewotCQkJCWlmIChwQWQtPlN0YUNmZy5QU0NvbnRyb2wuZmllbGQuRW5hYmxlTmV3UFMgPT0KLQkJCQkgICAgVFJVRSkgewotCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkJCSAoIiVzXG4iLCBfX2Z1bmNfXykpOwotCQkJCQlSVDI4eHhQY2lBc2ljUmFkaW9PZmYocEFkLAotCQkJCQkJCSAgICAgIEdVSV9JRExFX1BPV0VSX1NBVkUsCi0JCQkJCQkJICAgICAgMCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDMwLAotCQkJCQkJCSAgICAgUG93ZXJTYWZlQ0lELCAweGZmLAotCQkJCQkJCSAgICAgMHgwMik7Ci0JCQkJCS8qIFdhaXQgY29tbWFuZCBzdWNjZXNzICovCi0JCQkJCUFzaWNDaGVja0NvbW1hbk9rKHBBZCwgUG93ZXJTYWZlQ0lEKTsKLQkJCQkJUlRNUF9TRVRfRkxBRyhwQWQsCi0JCQkJCQkgICAgICBmUlRNUF9BREFQVEVSX0lETEVfUkFESU9fT0ZGKTsKLQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJCQkgKCJQU00gLSAgcnQyOHh4IElzc3VlIFNsZWVwIGNvbW1hbmQpXG4iKSk7Ci0JCQkJfQotCQkJfQotCQl9IGVsc2UgewotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiU1RBTWxtZVBlcmlvZGljRXhlYyBNTUNISyAtIENvbW1vbkNmZy5Tc2lkWyVkXT0lYyVjJWMlYy4uLiBNbG1lQXV4LlNzaWRbJWRdPSVjJWMlYyVjLi4uXG4iLAotCQkJCSAgcEFkLT5Db21tb25DZmcuU3NpZExlbiwKLQkJCQkgIHBBZC0+Q29tbW9uQ2ZnLlNzaWRbMF0sCi0JCQkJICBwQWQtPkNvbW1vbkNmZy5Tc2lkWzFdLAotCQkJCSAgcEFkLT5Db21tb25DZmcuU3NpZFsyXSwKLQkJCQkgIHBBZC0+Q29tbW9uQ2ZnLlNzaWRbM10sIHBBZC0+TWxtZUF1eC5Tc2lkTGVuLAotCQkJCSAgcEFkLT5NbG1lQXV4LlNzaWRbMF0sIHBBZC0+TWxtZUF1eC5Tc2lkWzFdLAotCQkJCSAgcEFkLT5NbG1lQXV4LlNzaWRbMl0sIHBBZC0+TWxtZUF1eC5Tc2lkWzNdKSk7Ci0JCX0KLQl9Ci0jZW5kaWYgLyogUENJRV9QU19TVVBQT1JUIC8vICovCi0KLQlpZiAocEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQID09IFdQQV9TVVBQTElDQU5UX0RJU0FCTEUpIHsKLQkJLyogV1BBIE1JQyBlcnJvciBzaG91bGQgYmxvY2sgYXNzb2NpYXRpb24gYXR0ZW1wdCBmb3IgNjAgc2Vjb25kcyAqLwotCQlpZiAocEFkLT5TdGFDZmcuYkJsb2NrQXNzb2MgJiYKLQkJICAgIFJUTVBfVElNRV9BRlRFUihwQWQtPk1sbWUuTm93MzIsCi0JCQkJICAgIHBBZC0+U3RhQ2ZnLkxhc3RNaWNFcnJvclRpbWUgKwotCQkJCSAgICAoNjAgKiBPU19IWikpKQotCQkJcEFkLT5TdGFDZmcuYkJsb2NrQXNzb2MgPSBGQUxTRTsKLQl9Ci0KLQlpZiAoKHBBZC0+UHJlTWVkaWFTdGF0ZSAhPSBwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSkKLQkgICAgJiYgKHBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50KSkgewotCQlpZiAocEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPT0gTmRpc01lZGlhU3RhdGVDb25uZWN0ZWQpIHsKLQkJCVJUTVBTZW5kV2lyZWxlc3NFdmVudChwQWQsIElXX1NUQV9MSU5LVVBfRVZFTlRfRkxBRywKLQkJCQkJICAgICAgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS4KLQkJCQkJICAgICAgQWRkciwgQlNTMCwgMCk7Ci0JCX0KLQkJcEFkLT5QcmVNZWRpYVN0YXRlID0gcEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGU7Ci0JfQotCi0JaWYgKHBBZC0+Q29tbW9uQ2ZnLlBTUFhsaW5rICYmIEFESE9DX09OKHBBZCkpIHsKLQl9IGVsc2UgewotCQlBc2ljU3RhQmJwVHVuaW5nKHBBZCk7Ci0JfQotCi0JVHhUb3RhbENudCA9IHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhOb1JldHJ5T2tDb3VudCArCi0JICAgIHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhSZXRyeU9rQ291bnQgKwotCSAgICBwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4RmFpbENvdW50OwotCi0JaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSkgewotCQkvKiB1cGRhdGUgY2hhbm5lbCBxdWFsaXR5IGZvciBSb2FtaW5nIGFuZCBVSSBMaW5rUXVhbGl0eSBkaXNwbGF5ICovCi0JCU1sbWVDYWxjdWxhdGVDaGFubmVsUXVhbGl0eShwQWQsIE5VTEwsIHBBZC0+TWxtZS5Ob3czMik7Ci0JfQotCS8qIG11c3QgYmUgQUZURVIgTWxtZUR5bmFtaWNUeFJhdGVTd2l0Y2hpbmcoKSBiZWNhdXNlIGl0IG5lZWRzIHRvIGtub3cgaWYgKi8KLQkvKiBSYWRpbyBpcyBjdXJyZW50bHkgaW4gbm9pc3kgZW52aXJvbm1lbnQgKi8KLQlpZiAoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUykpCi0JCUFzaWNBZGp1c3RUeFBvd2VyKHBBZCk7Ci0KLQlpZiAoSU5GUkFfT04ocEFkKSkgewotCi0JCS8qIElzIFBTTSBiaXQgY29uc2lzdGVudCB3aXRoIHVzZXIgcG93ZXIgbWFuYWdlbWVudCBwb2xpY3k/ICovCi0JCS8qIFRoaXMgaXMgdGhlIG9ubHkgcGxhY2UgdGhhdCB3aWxsIHNldCBQU00gYml0IE9OLiAqLwotCQlpZiAoIU9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSkpCi0JCQlNbG1lQ2hlY2tQc21DaGFuZ2UocEFkLCBwQWQtPk1sbWUuTm93MzIpOwotCi0JCXBBZC0+UmFsaW5rQ291bnRlcnMuTGFzdE9uZVNlY1RvdGFsVHhDb3VudCA9IFR4VG90YWxDbnQ7Ci0KLQkJaWYgKChSVE1QX1RJTUVfQUZURVIKLQkJICAgICAocEFkLT5NbG1lLk5vdzMyLAotCQkgICAgICBwQWQtPlN0YUNmZy5MYXN0QmVhY29uUnhUaW1lICsgKDEgKiBPU19IWikpKQotCQkgICAgJiYKLQkJICAgICghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKSkKLQkJICAgICYmCi0JCSAgICAoKChUeFRvdGFsQ250ICsgcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNSeE9rQ250KSA8Ci0JCSAgICAgIDYwMCkpKSB7Ci0JCQlSVE1QU2V0QUdDSW5pdFZhbHVlKHBBZCwgQldfMjApOwotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiTU1DSEsgLSBObyBCRUFDT04uIHJlc3RvcmUgUjY2IHRvIHRoZSBsb3cgYm91bmQoJWQpIFxuIiwKLQkJCQkgICgweDJFICsgR0VUX0xOQV9HQUlOKHBBZCkpKSk7Ci0JCX0KLQkJLyppZiAoKHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhOb1JldHJ5T2tDb3VudCA9PSAwKSAmJiAqLwotCQkvKiAgICAocEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeFJldHJ5T2tDb3VudCA9PSAwKSkgKi8KLQkJewotCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQ2FwYWJsZQotCQkJICAgICYmIHBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uYkFQU0RDYXBhYmxlKSB7Ci0JCQkJLyogV2hlbiBBUFNEIGlzIGVuYWJsZWQsIHRoZSBwZXJpb2QgY2hhbmdlcyBhcyAyMCBzZWMgKi8KLQkJCQlpZiAoKHBBZC0+TWxtZS5PbmVTZWNQZXJpb2RpY1JvdW5kICUgMjApID09IDgpCi0JCQkJCVJUTVBTZW5kTnVsbEZyYW1lKHBBZCwKLQkJCQkJCQkgIHBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZSwKLQkJCQkJCQkgIFRSVUUpOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBTZW5kIG91dCBhIE5VTEwgZnJhbWUgZXZlcnkgMTAgc2VjIHRvIGluZm9ybSBBUCB0aGF0IFNUQSBpcyBzdGlsbCBhbGl2ZSAoQXZvaWQgYmVpbmcgYWdlIG91dCkgKi8KLQkJCQlpZiAoKHBBZC0+TWxtZS5PbmVTZWNQZXJpb2RpY1JvdW5kICUgMTApID09IDgpIHsKLQkJCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXbW1DYXBhYmxlKQotCQkJCQkJUlRNUFNlbmROdWxsRnJhbWUocEFkLAotCQkJCQkJCQkgIHBBZC0+Ci0JCQkJCQkJCSAgQ29tbW9uQ2ZnLgotCQkJCQkJCQkgIFR4UmF0ZSwgVFJVRSk7Ci0JCQkJCWVsc2UKLQkJCQkJCVJUTVBTZW5kTnVsbEZyYW1lKHBBZCwKLQkJCQkJCQkJICBwQWQtPgotCQkJCQkJCQkgIENvbW1vbkNmZy4KLQkJCQkJCQkJICBUeFJhdGUsCi0JCQkJCQkJCSAgRkFMU0UpOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCWlmIChDUUlfSVNfREVBRChwQWQtPk1sbWUuQ2hhbm5lbFF1YWxpdHkpKSB7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCJNTUNISyAtIE5vIEJFQUNPTi4gRGVhZCBDUUkuIEF1dG8gUmVjb3ZlcnkgYXR0ZW1wdCAjJWxkXG4iLAotCQkJCSAgcEFkLT5SYWxpbmtDb3VudGVycy5CYWRDUUlBdXRvUmVjb3ZlcnlDb3VudCkpOwotCi0JCQkvKiBMb3N0IEFQLCBzZW5kIGRpc2Nvbm5lY3QgJiBsaW5rIGRvd24gZXZlbnQgKi8KLQkJCUxpbmtEb3duKHBBZCwgRkFMU0UpOwotCi0JCQlSdG1wT1NXcmllbGVzc0V2ZW50U2VuZChwQWQsIFNJT0NHSVdBUCwgLTEsIE5VTEwsIE5VTEwsCi0JCQkJCQkwKTsKLQotCQkJLyogUlRNUFBhdGNoTWFjQmJwQnVnKHBBZCk7ICovCi0JCQlNbG1lQXV0b1JlY29ubmVjdExhc3RTU0lEKHBBZCk7Ci0JCX0gZWxzZSBpZiAoQ1FJX0lTX0JBRChwQWQtPk1sbWUuQ2hhbm5lbFF1YWxpdHkpKSB7Ci0JCQlwQWQtPlJhbGlua0NvdW50ZXJzLkJhZENRSUF1dG9SZWNvdmVyeUNvdW50Kys7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCJNTUNISyAtIEJhZCBDUUkuIEF1dG8gUmVjb3ZlcnkgYXR0ZW1wdCAjJWxkXG4iLAotCQkJCSAgcEFkLT5SYWxpbmtDb3VudGVycy5CYWRDUUlBdXRvUmVjb3ZlcnlDb3VudCkpOwotCQkJTWxtZUF1dG9SZWNvbm5lY3RMYXN0U1NJRChwQWQpOwotCQl9Ci0KLQkJaWYgKHBBZC0+U3RhQ2ZnLmJBdXRvUm9hbWluZykgewotCQkJQk9PTEVBTiBydiA9IEZBTFNFOwotCQkJY2hhciBkQm1Ub1JvYW0gPSBwQWQtPlN0YUNmZy5kQm1Ub1JvYW07Ci0JCQljaGFyIE1heFJzc2kgPSBSVE1QTWF4UnNzaShwQWQsCi0JCQkJCQkgICBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLgotCQkJCQkJICAgTGFzdFJzc2kwLAotCQkJCQkJICAgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS4KLQkJCQkJCSAgIExhc3RSc3NpMSwKLQkJCQkJCSAgIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuCi0JCQkJCQkgICBMYXN0UnNzaTIpOwotCi0JCQkvKiBTY2FubmluZywgaWdub3JlIFJvYW1pbmcgKi8KLQkJCWlmICghUlRNUF9URVNUX0ZMQUcKLQkJCSAgICAocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKQotCQkJICAgICYmIChwQWQtPk1sbWUuU3luY01hY2hpbmUuQ3VyclN0YXRlID09IFNZTkNfSURMRSkKLQkJCSAgICAmJiAoTWF4UnNzaSA8PSBkQm1Ub1JvYW0pKSB7Ci0JCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJCSAoIlJzc2k9JWQsIGRCbVRvUm9hbT0lZFxuIiwgTWF4UnNzaSwKLQkJCQkJICAoY2hhcilkQm1Ub1JvYW0pKTsKLQotCQkJCS8qIEFkZCBhdXRvIHNlYW1sZXNzIHJvYW1pbmcgKi8KLQkJCQlpZiAocnYgPT0gRkFMU0UpCi0JCQkJCXJ2ID0gTWxtZUNoZWNrRm9yRmFzdFJvYW1pbmcocEFkKTsKLQotCQkJCWlmIChydiA9PSBGQUxTRSkgewotCQkJCQlpZiAoKHBBZC0+U3RhQ2ZnLkxhc3RTY2FuVGltZSArCi0JCQkJCSAgICAgMTAgKiBPU19IWikgPCBwQWQtPk1sbWUuTm93MzIpIHsKLQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkJCSAoIk1NQ0hLIC0gUm9hbWluZywgTm8gZWxpZ2libGUgZW50cnksIHRyeSBuZXcgc2NhbiFcbiIpKTsKLQkJCQkJCXBBZC0+U3RhQ2ZnLlNjYW5DbnQgPSAyOwotCQkJCQkJcEFkLT5TdGFDZmcuTGFzdFNjYW5UaW1lID0KLQkJCQkJCSAgICBwQWQtPk1sbWUuTm93MzI7Ci0JCQkJCQlNbG1lQXV0b1NjYW4ocEFkKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCX0gZWxzZSBpZiAoQURIT0NfT04ocEFkKSkgewotCQkvKiBJZiBhbGwgcGVlcnMgbGVhdmUsIGFuZCB0aGlzIFNUQSBiZWNvbWVzIHRoZSBsYXN0IG9uZSBpbiB0aGlzIElCU1MsIHRoZW4gY2hhbmdlIE1lZGlhU3RhdGUgKi8KLQkJLyogdG8gRElTQ09OTkVDVEVELiBCdXQgc3RpbGwgaG9sZGluZyB0aGlzIElCU1MgKGkuZS4gc2VuZGluZyBCRUFDT04pIHNvIHRoYXQgb3RoZXIgU1RBcyBjYW4gKi8KLQkJLyogam9pbiBsYXRlci4gKi8KLQkJaWYgKFJUTVBfVElNRV9BRlRFUgotCQkgICAgKHBBZC0+TWxtZS5Ob3czMiwKLQkJICAgICBwQWQtPlN0YUNmZy5MYXN0QmVhY29uUnhUaW1lICsgQURIT0NfQkVBQ09OX0xPU1RfVElNRSkKLQkJICAgICYmIE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsCi0JCQkJCSAgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpKSB7Ci0JCQlzdHJ1Y3QgcnRfbWxtZV9zdGFydF9yZXEgU3RhcnRSZXE7Ci0KLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAoIk1NQ0hLIC0gZXhjZXNzaXZlIEJFQUNPTiBsb3N0LCBsYXN0IFNUQSBpbiB0aGlzIElCU1MsIE1lZGlhU3RhdGU9RGlzY29ubmVjdGVkXG4iKSk7Ci0JCQlMaW5rRG93bihwQWQsIEZBTFNFKTsKLQotCQkJU3RhcnRQYXJtRmlsbChwQWQsICZTdGFydFJlcSwKLQkJCQkgICAgICAoY2hhciAqKSBwQWQtPk1sbWVBdXguU3NpZCwKLQkJCQkgICAgICBwQWQtPk1sbWVBdXguU3NpZExlbik7Ci0JCQlNbG1lRW5xdWV1ZShwQWQsIFNZTkNfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfU1RBUlRfUkVRLAotCQkJCSAgICBzaXplb2Yoc3RydWN0IHJ0X21sbWVfc3RhcnRfcmVxKSwgJlN0YXJ0UmVxKTsKLQkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfU1RBUlQ7Ci0JCX0KLQotCQlmb3IgKGkgPSAxOyBpIDwgTUFYX0xFTl9PRl9NQUNfVEFCTEU7IGkrKykgewotCQkJc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbaV07Ci0KLQkJCWlmIChwRW50cnktPlZhbGlkQXNDTEkgPT0gRkFMU0UpCi0JCQkJY29udGludWU7Ci0KLQkJCWlmIChSVE1QX1RJTUVfQUZURVIKLQkJCSAgICAocEFkLT5NbG1lLk5vdzMyLAotCQkJICAgICBwRW50cnktPkxhc3RCZWFjb25SeFRpbWUgKyBBREhPQ19CRUFDT05fTE9TVF9USU1FKSkKLQkJCQlNYWNUYWJsZURlbGV0ZUVudHJ5KHBBZCwgcEVudHJ5LT5BaWQsCi0JCQkJCQkgICAgcEVudHJ5LT5BZGRyKTsKLQkJfQotCX0gZWxzZQkJCS8qIG5vIElORlJBIG5vciBBREhPQyBjb25uZWN0aW9uICovCi0JewotCi0JCWlmIChwQWQtPlN0YUNmZy5iU2NhblJlcUlzRnJvbVdlYlVJICYmCi0JCSAgICBSVE1QX1RJTUVfQkVGT1JFKHBBZC0+TWxtZS5Ob3czMiwKLQkJCQkgICAgIHBBZC0+U3RhQ2ZnLkxhc3RTY2FuVGltZSArICgzMCAqIE9TX0haKSkpCi0JCQlnb3RvIFNLSVBfQVVUT19TQ0FOX0NPTk47Ci0JCWVsc2UKLQkJCXBBZC0+U3RhQ2ZnLmJTY2FuUmVxSXNGcm9tV2ViVUkgPSBGQUxTRTsKLQotCQlpZiAoKHBBZC0+U3RhQ2ZnLmJBdXRvUmVjb25uZWN0ID09IFRSVUUpCi0JCSAgICAmJiBSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfU1RBUlRfVVApCi0JCSAgICAmJgotCQkgICAgKE1sbWVWYWxpZGF0ZVNTSUQKLQkJICAgICAocEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkLAotCQkgICAgICBwQWQtPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWRMZW4pID09IFRSVUUpKSB7Ci0JCQlpZiAoKHBBZC0+U2NhblRhYi5Cc3NOciA9PSAwKQotCQkJICAgICYmIChwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID09IENOVExfSURMRSkpIHsKLQkJCQlzdHJ1Y3QgcnRfbWxtZV9zY2FuX3JlcSBTY2FuUmVxOwotCi0JCQkJaWYgKFJUTVBfVElNRV9BRlRFUgotCQkJCSAgICAocEFkLT5NbG1lLk5vdzMyLAotCQkJCSAgICAgcEFkLT5TdGFDZmcuTGFzdFNjYW5UaW1lICsgKDEwICogT1NfSFopKSkgewotCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkJCSAoIlNUQU1sbWVQZXJpb2RpY0V4ZWMoKTpDTlRMIC0gU2NhblRhYi5Cc3NOcj09MCwgc3RhcnQgYSBuZXcgQUNUSVZFIHNjYW4gU1NJRFslc11cbiIsCi0JCQkJCQkgIHBBZC0+TWxtZUF1eC4KLQkJCQkJCSAgQXV0b1JlY29ubmVjdFNzaWQpKTsKLQkJCQkJU2NhblBhcm1GaWxsKHBBZCwgJlNjYW5SZXEsCi0JCQkJCQkgICAgIChjaGFyICopcEFkLT5NbG1lQXV4LgotCQkJCQkJICAgICBBdXRvUmVjb25uZWN0U3NpZCwKLQkJCQkJCSAgICAgcEFkLT5NbG1lQXV4LgotCQkJCQkJICAgICBBdXRvUmVjb25uZWN0U3NpZExlbiwKLQkJCQkJCSAgICAgQlNTX0FOWSwgU0NBTl9BQ1RJVkUpOwotCQkJCQlNbG1lRW5xdWV1ZShwQWQsIFNZTkNfU1RBVEVfTUFDSElORSwKLQkJCQkJCSAgICBNVDJfTUxNRV9TQ0FOX1JFUSwKLQkJCQkJCSAgICBzaXplb2YKLQkJCQkJCSAgICAoc3RydWN0IHJ0X21sbWVfc2Nhbl9yZXEpLAotCQkJCQkJICAgICZTY2FuUmVxKTsKLQkJCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9Ci0JCQkJCSAgICBDTlRMX1dBSVRfT0lEX0xJU1RfU0NBTjsKLQkJCQkJLyogUmVzZXQgTWlzc2VkIHNjYW4gbnVtYmVyICovCi0JCQkJCXBBZC0+U3RhQ2ZnLkxhc3RTY2FuVGltZSA9Ci0JCQkJCSAgICBwQWQtPk1sbWUuTm93MzI7Ci0JCQkJfSBlbHNlIGlmIChwQWQtPlN0YUNmZy5Cc3NUeXBlID09IEJTU19BREhPQykJLyogUXVpdCB0aGUgZm9yZXZlciBzY2FuIHdoZW4gaW4gYSB2ZXJ5IGNsZWFuIHJvb20gKi8KLQkJCQkJTWxtZUF1dG9SZWNvbm5lY3RMYXN0U1NJRChwQWQpOwotCQkJfSBlbHNlIGlmIChwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID09IENOVExfSURMRSkgewotCQkJCWlmICgocEFkLT5NbG1lLk9uZVNlY1BlcmlvZGljUm91bmQgJSA3KSA9PSAwKSB7Ci0JCQkJCU1sbWVBdXRvU2NhbihwQWQpOwotCQkJCQlwQWQtPlN0YUNmZy5MYXN0U2NhblRpbWUgPQotCQkJCQkgICAgcEFkLT5NbG1lLk5vdzMyOwotCQkJCX0gZWxzZSB7Ci0JCQkJCU1sbWVBdXRvUmVjb25uZWN0TGFzdFNTSUQocEFkKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLVNLSVBfQVVUT19TQ0FOX0NPTk46Ci0KLQlpZiAoKHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uVFhCQWJpdG1hcCAhPSAwKQotCSAgICAmJiAocEFkLT5NYWNUYWIuZkFueUJBU2Vzc2lvbiA9PSBGQUxTRSkpIHsKLQkJcEFkLT5NYWNUYWIuZkFueUJBU2Vzc2lvbiA9IFRSVUU7Ci0JCUFzaWNVcGRhdGVQcm90ZWN0KHBBZCwgSFRfRk9SQ0VSVFNDVFMsIEFMTE5fU0VUUFJPVEVDVCwgRkFMU0UsCi0JCQkJICBGQUxTRSk7Ci0JfSBlbHNlIGlmICgocEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5UWEJBYml0bWFwID09IDApCi0JCSAgICYmIChwQWQtPk1hY1RhYi5mQW55QkFTZXNzaW9uID09IFRSVUUpKSB7Ci0JCXBBZC0+TWFjVGFiLmZBbnlCQVNlc3Npb24gPSBGQUxTRTsKLQkJQXNpY1VwZGF0ZVByb3RlY3QocEFkLAotCQkJCSAgcEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8yLgotCQkJCSAgT3BlcmFpb25Nb2RlLCBBTExOX1NFVFBST1RFQ1QsIEZBTFNFLCBGQUxTRSk7Ci0JfQotCi0JcmV0dXJuOwotfQotCi0vKiBMaW5rIGRvd24gcmVwb3J0ICovCi12b2lkIExpbmtEb3duRXhlYyh2b2lkICpTeXN0ZW1TcGVjaWZpYzEsCi0JCSAgdm9pZCAqRnVuY3Rpb25Db250ZXh0LAotCQkgIHZvaWQgKlN5c3RlbVNwZWNpZmljMiwgdm9pZCAqU3lzdGVtU3BlY2lmaWMzKQotewotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCA9IChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICopRnVuY3Rpb25Db250ZXh0OwotCi0JaWYgKHBBZCAhPSBOVUxMKSB7Ci0JCXN0cnVjdCBydF9tbG1lX2Rpc2Fzc29jX3JlcSBEaXNhc3NvY1JlcTsKLQotCQlpZiAoKHBBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkID09IFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRCkgJiYKLQkJICAgIChJTkZSQV9PTihwQWQpKSkgewotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiTGlua0Rvd25FeGVjKCk6IGRpc2Fzc29jaWF0ZSB3aXRoIGN1cnJlbnQgQVAuLi5cbiIpKTsKLQkJCURpc2Fzc29jUGFybUZpbGwocEFkLCAmRGlzYXNzb2NSZXEsCi0JCQkJCSBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwKLQkJCQkJIFJFQVNPTl9ESVNBU1NPQ19TVEFfTEVBVklORyk7Ci0JCQlNbG1lRW5xdWV1ZShwQWQsIEFTU09DX1NUQVRFX01BQ0hJTkUsCi0JCQkJICAgIE1UMl9NTE1FX0RJU0FTU09DX1JFUSwKLQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBydF9tbG1lX2Rpc2Fzc29jX3JlcSksCi0JCQkJICAgICZEaXNhc3NvY1JlcSk7Ci0JCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9XQUlUX0RJU0FTU09DOwotCi0JCQlwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSA9IE5kaXNNZWRpYVN0YXRlRGlzY29ubmVjdGVkOwotCQkJUlRNUF9JbmRpY2F0ZU1lZGlhU3RhdGUocEFkKTsKLQkJCXBBZC0+RXh0cmFJbmZvID0gR0VORVJBTF9MSU5LX0RPV047Ci0JCX0KLQl9Ci19Ci0KLS8qIElSUUwgPSBESVNQQVRDSF9MRVZFTCAqLwotdm9pZCBNbG1lQXV0b1NjYW4oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCS8qIGNoZWNrIENudGxNYWNoaW5lLkN1cnJTdGF0ZSB0byBhdm9pZCBjb2xsaXNpb24gd2l0aCBORElTIFNldE9JRCByZXF1ZXN0ICovCi0JaWYgKHBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPT0gQ05UTF9JRExFKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1NQ0hLIC0gRHJpdmVyIGF1dG8gc2NhblxuIikpOwotCQlNbG1lRW5xdWV1ZShwQWQsCi0JCQkgICAgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsCi0JCQkgICAgT0lEXzgwMl8xMV9CU1NJRF9MSVNUX1NDQU4sCi0JCQkgICAgcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuLAotCQkJICAgIHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZCk7Ci0JCVJUTVBfTUxNRV9IQU5ETEVSKHBBZCk7Ci0JfQotfQotCi0vKiBJUlFMID0gRElTUEFUQ0hfTEVWRUwgKi8KLXZvaWQgTWxtZUF1dG9SZWNvbm5lY3RMYXN0U1NJRChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0JaWYgKHBBZC0+U3RhQ2ZnLmJBdXRvQ29ubmVjdEJ5QnNzaWQpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkoIkRyaXZlciBhdXRvIHJlY29ubmVjdCB0byBsYXN0IE9JRF84MDJfMTFfQlNTSUQgIgotCQkJCSJzZXR0aW5nIC0gJXBNXG4iLCBwQWQtPk1sbWVBdXguQnNzaWQpKTsKLQotCQlwQWQtPk1sbWVBdXguQ2hhbm5lbCA9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWw7Ci0JCU1sbWVFbnF1ZXVlKHBBZCwKLQkJCSAgICBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwKLQkJCSAgICBPSURfODAyXzExX0JTU0lELCBNQUNfQUREUl9MRU4sIHBBZC0+TWxtZUF1eC5Cc3NpZCk7Ci0KLQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfSURMRTsKLQotCQlSVE1QX01MTUVfSEFORExFUihwQWQpOwotCX0KLQkvKiBjaGVjayBDbnRsTWFjaGluZS5DdXJyU3RhdGUgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggTkRJUyBTZXRPSUQgcmVxdWVzdCAqLwotCWVsc2UgaWYgKChwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID09IENOVExfSURMRSkgJiYKLQkJIChNbG1lVmFsaWRhdGVTU0lECi0JCSAgKHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZCwKLQkJICAgcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuKSA9PSBUUlVFKSkgewotCQlzdHJ1Y3QgcnRfbmRpc184MDJfMTFfc3NpZCBPaWRTc2lkOwotCQlPaWRTc2lkLlNzaWRMZW5ndGggPSBwQWQtPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWRMZW47Ci0JCU5kaXNNb3ZlTWVtb3J5KE9pZFNzaWQuU3NpZCwgcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkLAotCQkJICAgICAgIHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZExlbik7Ci0KLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJEcml2ZXIgYXV0byByZWNvbm5lY3QgdG8gbGFzdCBPSURfODAyXzExX1NTSUQgc2V0dGluZyAtICVzLCBsZW4gLSAlZFxuIiwKLQkJCSAgcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkLAotCQkJICBwQWQtPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWRMZW4pKTsKLQkJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgT0lEXzgwMl8xMV9TU0lELAotCQkJICAgIHNpemVvZihzdHJ1Y3QgcnRfbmRpc184MDJfMTFfc3NpZCksICZPaWRTc2lkKTsKLQkJUlRNUF9NTE1FX0hBTkRMRVIocEFkKTsKLQl9Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJVGhpcyByb3V0aW5lIGNoZWNrcyBpZiB0aGVyZSdyZSBvdGhlciBBUHMgb3V0IHRoZXJlIGNhcGFibGUgZm9yCi0JCXJvYW1pbmcuIENhbGxlciBzaG91bGQgY2FsbCB0aGlzIHJvdXRpbmUgb25seSB3aGVuIExpbmsgdXAgaW4gSU5GUkEgbW9kZQotCQlhbmQgY2hhbm5lbCBxdWFsaXR5IGlzIGJlbG93IENRSV9HT09EX1RIUkVTSE9MRC4KLQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0JT3V0cHV0OgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgTWxtZUNoZWNrRm9yUm9hbWluZyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHVuc2lnbmVkIGxvbmcgTm93MzIpCi17Ci0JdTE2IGk7Ci0Jc3RydWN0IHJ0X2Jzc190YWJsZSAqcFJvYW1UYWIgPSAmcEFkLT5NbG1lQXV4LlJvYW1UYWI7Ci0Jc3RydWN0IHJ0X2Jzc19lbnRyeSAqcEJzczsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PiBNbG1lQ2hlY2tGb3JSb2FtaW5nXG4iKSk7Ci0JLyogcHV0IGFsbCByb2FtaW5nIGNhbmRpZGF0ZXMgaW50byBSb2FtVGFiLCBhbmQgc29ydCBpbiBSU1NJIG9yZGVyICovCi0JQnNzVGFibGVJbml0KHBSb2FtVGFiKTsKLQlmb3IgKGkgPSAwOyBpIDwgcEFkLT5TY2FuVGFiLkJzc05yOyBpKyspIHsKLQkJcEJzcyA9ICZwQWQtPlNjYW5UYWIuQnNzRW50cnlbaV07Ci0KLQkJaWYgKChwQnNzLT5MYXN0QmVhY29uUnhUaW1lICsgcEFkLT5TdGFDZmcuQmVhY29uTG9zdFRpbWUpIDwKLQkJICAgIE5vdzMyKQotCQkJY29udGludWU7CS8qIEFQIGRpc2FwcGVhciAqLwotCQlpZiAocEJzcy0+UnNzaSA8PSBSU1NJX1RIUkVTSE9MRF9GT1JfUk9BTUlORykKLQkJCWNvbnRpbnVlOwkvKiBSU1NJIHRvbyB3ZWFrLiBmb3JnZXQgaXQuICovCi0JCWlmIChNQUNfQUREUl9FUVVBTChwQnNzLT5Cc3NpZCwgcEFkLT5Db21tb25DZmcuQnNzaWQpKQotCQkJY29udGludWU7CS8qIHNraXAgY3VycmVudCBBUCAqLwotCQlpZiAocEJzcy0+UnNzaSA8Ci0JCSAgICAocEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTAgKyBSU1NJX0RFTFRBKSkKLQkJCWNvbnRpbnVlOwkvKiBvbmx5IEFQIHdpdGggc3Ryb25nZXIgUlNTSSBpcyBlbGlnaWJsZSBmb3Igcm9hbWluZyAqLwotCi0JCS8qIEFQIHBhc3NpbmcgYWxsIGFib3ZlIHJ1bGVzIGlzIHB1dCBpbnRvIHJvYW1pbmcgY2FuZGlkYXRlIHRhYmxlICovCi0JCU5kaXNNb3ZlTWVtb3J5KCZwUm9hbVRhYi0+QnNzRW50cnlbcFJvYW1UYWItPkJzc05yXSwgcEJzcywKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHJ0X2Jzc19lbnRyeSkpOwotCQlwUm9hbVRhYi0+QnNzTnIgKz0gMTsKLQl9Ci0KLQlpZiAocFJvYW1UYWItPkJzc05yID4gMCkgewotCQkvKiBjaGVjayBDbnRsTWFjaGluZS5DdXJyU3RhdGUgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggTkRJUyBTZXRPSUQgcmVxdWVzdCAqLwotCQlpZiAocEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9PSBDTlRMX0lETEUpIHsKLQkJCXBBZC0+UmFsaW5rQ291bnRlcnMuUG9vckNRSVJvYW1pbmdDb3VudCsrOwotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiTU1DSEsgLSBSb2FtaW5nIGF0dGVtcHQgIyVsZFxuIiwKLQkJCQkgIHBBZC0+UmFsaW5rQ291bnRlcnMuUG9vckNRSVJvYW1pbmdDb3VudCkpOwotCQkJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwKLQkJCQkgICAgTVQyX01MTUVfUk9BTUlOR19SRVEsIDAsIE5VTEwpOwotCQkJUlRNUF9NTE1FX0hBTkRMRVIocEFkKTsKLQkJfQotCX0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJICgiPD09IE1sbWVDaGVja0ZvclJvYW1pbmcoIyBvZiBjYW5kaWRhdGU9ICVkKVxuIiwKLQkJICBwUm9hbVRhYi0+QnNzTnIpKTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlUaGlzIHJvdXRpbmUgY2hlY2tzIGlmIHRoZXJlJ3JlIG90aGVyIEFQcyBvdXQgdGhlcmUgY2FwYWJsZSBmb3IKLQkJcm9hbWluZy4gQ2FsbGVyIHNob3VsZCBjYWxsIHRoaXMgcm91dGluZSBvbmx5IHdoZW4gbGluayB1cCBpbiBJTkZSQSBtb2RlCi0JCWFuZCBjaGFubmVsIHF1YWxpdHkgaXMgYmVsb3cgQ1FJX0dPT0RfVEhSRVNIT0xELgotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQlPdXRwdXQ6Ci0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotQk9PTEVBTiBNbG1lQ2hlY2tGb3JGYXN0Um9hbWluZyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0JdTE2IGk7Ci0Jc3RydWN0IHJ0X2Jzc190YWJsZSAqcFJvYW1UYWIgPSAmcEFkLT5NbG1lQXV4LlJvYW1UYWI7Ci0Jc3RydWN0IHJ0X2Jzc19lbnRyeSAqcEJzczsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PiBNbG1lQ2hlY2tGb3JGYXN0Um9hbWluZ1xuIikpOwotCS8qIHB1dCBhbGwgcm9hbWluZyBjYW5kaWRhdGVzIGludG8gUm9hbVRhYiwgYW5kIHNvcnQgaW4gUlNTSSBvcmRlciAqLwotCUJzc1RhYmxlSW5pdChwUm9hbVRhYik7Ci0JZm9yIChpID0gMDsgaSA8IHBBZC0+U2NhblRhYi5Cc3NOcjsgaSsrKSB7Ci0JCXBCc3MgPSAmcEFkLT5TY2FuVGFiLkJzc0VudHJ5W2ldOwotCi0JCWlmICgocEJzcy0+UnNzaSA8PSAtNTApCi0JCSAgICAmJiAocEJzcy0+Q2hhbm5lbCA9PSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKSkKLQkJCWNvbnRpbnVlOwkvKiBSU1NJIHRvbyB3ZWFrLiBmb3JnZXQgaXQuICovCi0JCWlmIChNQUNfQUREUl9FUVVBTChwQnNzLT5Cc3NpZCwgcEFkLT5Db21tb25DZmcuQnNzaWQpKQotCQkJY29udGludWU7CS8qIHNraXAgY3VycmVudCBBUCAqLwotCQlpZiAoIVNTSURfRVFVQUwKLQkJICAgIChwQnNzLT5Tc2lkLCBwQnNzLT5Tc2lkTGVuLCBwQWQtPkNvbW1vbkNmZy5Tc2lkLAotCQkgICAgIHBBZC0+Q29tbW9uQ2ZnLlNzaWRMZW4pKQotCQkJY29udGludWU7CS8qIHNraXAgZGlmZmVyZW50IFNTSUQgKi8KLQkJaWYgKHBCc3MtPlJzc2kgPAotCQkgICAgKFJUTVBNYXhSc3NpCi0JCSAgICAgKHBBZCwgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTAsCi0JCSAgICAgIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kxLAotCQkgICAgICBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMikgKyBSU1NJX0RFTFRBKSkKLQkJCWNvbnRpbnVlOwkvKiBza2lwIEFQIHdpdGhvdXQgYmV0dGVyIFJTU0kgKi8KLQotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIkxhc3RSc3NpMCA9ICVkLCBwQnNzLT5Sc3NpID0gJWRcbiIsCi0JCQkgIFJUTVBNYXhSc3NpKHBBZCwgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTAsCi0JCQkJICAgICAgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTEsCi0JCQkJICAgICAgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTIpLAotCQkJICBwQnNzLT5Sc3NpKSk7Ci0JCS8qIEFQIHBhc3NpbmcgYWxsIGFib3ZlIHJ1bGVzIGlzIHB1dCBpbnRvIHJvYW1pbmcgY2FuZGlkYXRlIHRhYmxlICovCi0JCU5kaXNNb3ZlTWVtb3J5KCZwUm9hbVRhYi0+QnNzRW50cnlbcFJvYW1UYWItPkJzc05yXSwgcEJzcywKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHJ0X2Jzc19lbnRyeSkpOwotCQlwUm9hbVRhYi0+QnNzTnIgKz0gMTsKLQl9Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJICgiPD09IE1sbWVDaGVja0ZvckZhc3RSb2FtaW5nIChCc3NOcj0lZClcbiIsIHBSb2FtVGFiLT5Cc3NOcikpOwotCWlmIChwUm9hbVRhYi0+QnNzTnIgPiAwKSB7Ci0JCS8qIGNoZWNrIENudGxNYWNoaW5lLkN1cnJTdGF0ZSB0byBhdm9pZCBjb2xsaXNpb24gd2l0aCBORElTIFNldE9JRCByZXF1ZXN0ICovCi0JCWlmIChwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID09IENOVExfSURMRSkgewotCQkJcEFkLT5SYWxpbmtDb3VudGVycy5Qb29yQ1FJUm9hbWluZ0NvdW50Kys7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCJNTUNISyAtIFJvYW1pbmcgYXR0ZW1wdCAjJWxkXG4iLAotCQkJCSAgcEFkLT5SYWxpbmtDb3VudGVycy5Qb29yQ1FJUm9hbWluZ0NvdW50KSk7Ci0JCQlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLAotCQkJCSAgICBNVDJfTUxNRV9ST0FNSU5HX1JFUSwgMCwgTlVMTCk7Ci0JCQlSVE1QX01MTUVfSEFORExFUihwQWQpOwotCQkJcmV0dXJuIFRSVUU7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gRkFMU0U7Ci19Ci0KLXZvaWQgTWxtZVNldFR4UmF0ZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgIHN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKnBFbnRyeSwgc3RydWN0IHJ0X3J0bXBfdHhfcmF0ZV9zd2l0Y2ggKiBwVHhSYXRlKQotewotCXU4IE1heE1vZGUgPSBNT0RFX09GRE07Ci0KLQlNYXhNb2RlID0gTU9ERV9IVEdSRUVORklFTEQ7Ci0KLQlpZiAocFR4UmF0ZS0+U1RCQyAmJiAocEFkLT5TdGFDZmcuTWF4SFRQaHlNb2RlLmZpZWxkLlNUQkMpCi0JICAgICYmIChwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoID09IDIpKQotCQlwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuU1RCQyA9IFNUQkNfVVNFOwotCWVsc2UKLQkJcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLlNUQkMgPSBTVEJDX05PTkU7Ci0KLQlpZiAocFR4UmF0ZS0+Q3Vyck1DUyA8IE1DU19BVVRPKQotCQlwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTUNTID0gcFR4UmF0ZS0+Q3Vyck1DUzsKLQotCWlmIChwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTUNTID4gNykKLQkJcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLlNUQkMgPSBTVEJDX05PTkU7Ci0KLQlpZiAoQURIT0NfT04ocEFkKSkgewotCQkvKiBJZiBwZWVyIGFkaG9jIGlzIGItb25seSBtb2RlLCB3ZSBjYW4ndCBzZW5kIDExZyByYXRlLiAqLwotCQlwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuU2hvcnRHSSA9IEdJXzgwMDsKLQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuU1RCQyA9IFNUQkNfTk9ORTsKLQotCQkvKiAqLwotCQkvKiBGb3IgQWRob2MgTU9ERV9DQ0ssIGRyaXZlciB3aWxsIHVzZSBBZGhvY0JPbmx5Sm9pbmVkIGZsYWcgdG8gcm9sbCBiYWNrIHRvIEIgb25seSBpZiBuZWNlc3NhcnkgKi8KLQkJLyogKi8KLQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IHBUeFJhdGUtPk1vZGU7Ci0JCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLlNob3J0R0kgPQotCQkgICAgcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLlNob3J0R0k7Ci0JCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1DUyA9IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NQ1M7Ci0KLQkJLyogUGF0Y2ggc3BlZWQgZXJyb3IgaW4gc3RhdHVzIHBhZ2UgKi8KLQkJcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1PREUgPSBwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NT0RFOwotCX0gZWxzZSB7Ci0JCWlmIChwVHhSYXRlLT5Nb2RlIDw9IE1heE1vZGUpCi0JCQlwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IHBUeFJhdGUtPk1vZGU7Ci0KLQkJaWYgKHBUeFJhdGUtPlNob3J0R0kKLQkJICAgICYmIChwQWQtPlN0YUNmZy5NYXhIVFBoeU1vZGUuZmllbGQuU2hvcnRHSSkpCi0JCQlwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuU2hvcnRHSSA9IEdJXzQwMDsKLQkJZWxzZQotCQkJcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLlNob3J0R0kgPSBHSV84MDA7Ci0KLQkJLyogUmVleGFtIGVhY2ggYmFuZHdpZHRoJ3MgU0dJIHN1cHBvcnQuICovCi0JCWlmIChwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuU2hvcnRHSSA9PSBHSV80MDApIHsKLQkJCWlmICgocEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuQlcgPT0gQldfMjApCi0JCQkgICAgJiYKLQkJCSAgICAoIUNMSUVOVF9TVEFUVVNfVEVTVF9GTEFHCi0JCQkgICAgIChwRW50cnksIGZDTElFTlRfU1RBVFVTX1NHSTIwX0NBUEFCTEUpKSkKLQkJCQlwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuU2hvcnRHSSA9IEdJXzgwMDsKLQkJCWlmICgocEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuQlcgPT0gQldfNDApCi0JCQkgICAgJiYKLQkJCSAgICAoIUNMSUVOVF9TVEFUVVNfVEVTVF9GTEFHCi0JCQkgICAgIChwRW50cnksIGZDTElFTlRfU1RBVFVTX1NHSTQwX0NBUEFCTEUpKSkKLQkJCQlwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuU2hvcnRHSSA9IEdJXzgwMDsKLQkJfQotCQkvKiBUdXJuIFJUUy9DVFMgcmF0ZSB0byA2TWJwcy4gKi8KLQkJaWYgKChwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MgPT0gMCkKLQkJICAgICYmIChwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTUNTICE9IDApKSB7Ci0JCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MgPQotCQkJICAgIHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NQ1M7Ci0JCQlpZiAocEFkLT5NYWNUYWIuZkFueUJBU2Vzc2lvbikgewotCQkJCUFzaWNVcGRhdGVQcm90ZWN0KHBBZCwgSFRfRk9SQ0VSVFNDVFMsCi0JCQkJCQkgIEFMTE5fU0VUUFJPVEVDVCwgVFJVRSwKLQkJCQkJCSAgKEJPT0xFQU4pIHBBZC0+TWxtZUF1eC4KLQkJCQkJCSAgQWRkSHRJbmZvLkFkZEh0SW5mbzIuCi0JCQkJCQkgIE5vbkdmUHJlc2VudCk7Ci0JCQl9IGVsc2UgewotCQkJCUFzaWNVcGRhdGVQcm90ZWN0KHBBZCwKLQkJCQkJCSAgcEFkLT5NbG1lQXV4LkFkZEh0SW5mby4KLQkJCQkJCSAgQWRkSHRJbmZvMi5PcGVyYWlvbk1vZGUsCi0JCQkJCQkgIEFMTE5fU0VUUFJPVEVDVCwgVFJVRSwKLQkJCQkJCSAgKEJPT0xFQU4pIHBBZC0+TWxtZUF1eC4KLQkJCQkJCSAgQWRkSHRJbmZvLkFkZEh0SW5mbzIuCi0JCQkJCQkgIE5vbkdmUHJlc2VudCk7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoKHBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1DUyA9PSA4KQotCQkJICAgJiYgKHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NQ1MgIT0gOCkpIHsKLQkJCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1DUyA9Ci0JCQkgICAgcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1DUzsKLQkJCWlmIChwQWQtPk1hY1RhYi5mQW55QkFTZXNzaW9uKSB7Ci0JCQkJQXNpY1VwZGF0ZVByb3RlY3QocEFkLCBIVF9GT1JDRVJUU0NUUywKLQkJCQkJCSAgQUxMTl9TRVRQUk9URUNULCBUUlVFLAotCQkJCQkJICAoQk9PTEVBTikgcEFkLT5NbG1lQXV4LgotCQkJCQkJICBBZGRIdEluZm8uQWRkSHRJbmZvMi4KLQkJCQkJCSAgTm9uR2ZQcmVzZW50KTsKLQkJCX0gZWxzZSB7Ci0JCQkJQXNpY1VwZGF0ZVByb3RlY3QocEFkLAotCQkJCQkJICBwQWQtPk1sbWVBdXguQWRkSHRJbmZvLgotCQkJCQkJICBBZGRIdEluZm8yLk9wZXJhaW9uTW9kZSwKLQkJCQkJCSAgQUxMTl9TRVRQUk9URUNULCBUUlVFLAotCQkJCQkJICAoQk9PTEVBTikgcEFkLT5NbG1lQXV4LgotCQkJCQkJICBBZGRIdEluZm8uQWRkSHRJbmZvMi4KLQkJCQkJCSAgTm9uR2ZQcmVzZW50KTsKLQkJCX0KLQkJfSBlbHNlIGlmICgocEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTUNTICE9IDApCi0JCQkgICAmJiAocEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1DUyA9PSAwKSkgewotCQkJQXNpY1VwZGF0ZVByb3RlY3QocEFkLCBIVF9SVFNDVFNfNk0sIEFMTE5fU0VUUFJPVEVDVCwKLQkJCQkJICBUUlVFLAotCQkJCQkgIChCT09MRUFOKSBwQWQtPk1sbWVBdXguQWRkSHRJbmZvLgotCQkJCQkgIEFkZEh0SW5mbzIuTm9uR2ZQcmVzZW50KTsKLQotCQl9IGVsc2UgaWYgKChwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MgIT0gOCkKLQkJCSAgICYmIChwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTUNTID09IDgpKSB7Ci0JCQlBc2ljVXBkYXRlUHJvdGVjdChwQWQsIEhUX1JUU0NUU182TSwgQUxMTl9TRVRQUk9URUNULAotCQkJCQkgIFRSVUUsCi0JCQkJCSAgKEJPT0xFQU4pIHBBZC0+TWxtZUF1eC5BZGRIdEluZm8uCi0JCQkJCSAgQWRkSHRJbmZvMi5Ob25HZlByZXNlbnQpOwotCQl9Ci0KLQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuU1RCQyA9IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5TVEJDOwotCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5TaG9ydEdJID0KLQkJICAgIHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5TaG9ydEdJOwotCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTUNTOwotCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NT0RFID0gcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1PREU7Ci0JCWlmICgocEFkLT5TdGFDZmcuTWF4SFRQaHlNb2RlLmZpZWxkLk1PREUgPT0gTU9ERV9IVEdSRUVORklFTEQpCi0JCSAgICAmJiBwQWQtPldJRkl0ZXN0YmVkLmJHcmVlbkZpZWxkKQotCQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfSFRHUkVFTkZJRUxEOwotCX0KLQotCXBBZC0+TGFzdFR4UmF0ZSA9ICh1MTYpKHBFbnRyeS0+SFRQaHlNb2RlLndvcmQpOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JCVRoaXMgcm91dGluZSBjYWxjdWxhdGVzIHRoZSBhY3VtdWxhdGVkIFR4UEVSIG9mIGVheGggVHhSYXRlLiBBbmQKLQkJYWNjb3JkaW5nIHRvIHRoZSBjYWxjdWxhdGlvbiByZXN1bHQsIGNoYW5nZSBDb21tb25DZmcuVHhSYXRlIHdoaWNoCi0JCWlzIHRoZSBzdGFibGUgVFggUmF0ZSB3ZSBleHBlY3QgdGhlIFJhZGlvIHNpdHVhdGlvbiBjb3VsZCBzdXN0YWluZWQuCi0KLQkJQ29tbW9uQ2ZnLlR4UmF0ZSB3aWxsIGNoYW5nZSBkeW5hbWljYWxseSB3aXRoaW4ge1JBVEVfMS9SQVRFXzYsIE1heFR4UmF0ZX0KLQlPdXRwdXQ6Ci0JCUNvbW1vbkNmZy5UeFJhdGUgLQotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQlOT1RFOgotCQljYWxsIHRoaXMgcm91dGluZSBldmVyeSBzZWNvbmQKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi12b2lkIE1sbWVEeW5hbWljVHhSYXRlU3dpdGNoaW5nKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQl1OCBVcFJhdGVJZHggPSAwLCBEb3duUmF0ZUlkeCA9IDAsIEN1cnJSYXRlSWR4OwotCXVuc2lnbmVkIGxvbmcgaSwgQWNjdVR4VG90YWxDbnQgPSAwLCBUeFRvdGFsQ250OwotCXVuc2lnbmVkIGxvbmcgVHhFcnJvclJhdGlvID0gMDsKLQlCT09MRUFOIGJUeFJhdGVDaGFuZ2VkID0gRkFMU0UsIGJVcGdyYWRlUXVhbGl0eSA9IEZBTFNFOwotCXN0cnVjdCBydF9ydG1wX3R4X3JhdGVfc3dpdGNoICpwQ3VyclR4UmF0ZSwgKnBOZXh0VHhSYXRlID0gTlVMTDsKLQl1OCAqcFRhYmxlOwotCXU4IFRhYmxlU2l6ZSA9IDA7Ci0JdTggSW5pdFR4UmF0ZUlkeCA9IDAsIFRyYWluVXAsIFRyYWluRG93bjsKLQljaGFyIFJzc2ksIFJzc2lPZmZzZXQgPSAwOwotCVRYX1NUQV9DTlQxX1NUUlVDIFN0YVR4MTsKLQlUWF9TVEFfQ05UMF9TVFJVQyBUeFN0YUNudDA7Ci0JdW5zaWduZWQgbG9uZyBUeFJldHJhbnNtaXQgPSAwLCBUeFN1Y2Nlc3MgPSAwLCBUeEZhaWxDb3VudCA9IDA7Ci0Jc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcEVudHJ5OwotCXN0cnVjdCBydF9yc3NpX3NhbXBsZSAqcFJzc2kgPSAmcEFkLT5TdGFDZmcuUnNzaVNhbXBsZTsKLQotCS8qICovCi0JLyogd2FsayB0aHJvdWdoIE1BQyB0YWJsZSwgc2VlIGlmIG5lZWQgdG8gY2hhbmdlIEFQJ3MgVFggcmF0ZSB0b3dhcmQgZWFjaCBlbnRyeSAqLwotCS8qICovCi0JZm9yIChpID0gMTsgaSA8IE1BWF9MRU5fT0ZfTUFDX1RBQkxFOyBpKyspIHsKLQkJcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbaV07Ci0KLQkJLyogY2hlY2sgaWYgdGhpcyBlbnRyeSBuZWVkIHRvIHN3aXRjaCByYXRlIGF1dG9tYXRpY2FsbHkgKi8KLQkJaWYgKFJUTVBDaGVja0VudHJ5RW5hYmxlQXV0b1JhdGVTd2l0Y2gocEFkLCBwRW50cnkpID09IEZBTFNFKQotCQkJY29udGludWU7Ci0KLQkJaWYgKChwQWQtPk1hY1RhYi5TaXplID09IDEpIHx8IChwRW50cnktPlZhbGlkQXNEbHMpKSB7Ci0JCQlSc3NpID0gUlRNUE1heFJzc2kocEFkLAotCQkJCQkgICBwUnNzaS0+QXZnUnNzaTAsCi0JCQkJCSAgIHBSc3NpLT5BdmdSc3NpMSwgcFJzc2ktPkF2Z1Jzc2kyKTsKLQotCQkJLyogVXBkYXRlIHN0YXRpc3RpYyBjb3VudGVyICovCi0JCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX1NUQV9DTlQwLCAmVHhTdGFDbnQwLndvcmQpOwotCQkJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9TVEFfQ05UMSwgJlN0YVR4MS53b3JkKTsKLQkJCXBBZC0+YlVwZGF0ZUJjbkNudERvbmUgPSBUUlVFOwotCQkJVHhSZXRyYW5zbWl0ID0gU3RhVHgxLmZpZWxkLlR4UmV0cmFuc21pdDsKLQkJCVR4U3VjY2VzcyA9IFN0YVR4MS5maWVsZC5UeFN1Y2Nlc3M7Ci0JCQlUeEZhaWxDb3VudCA9IFR4U3RhQ250MC5maWVsZC5UeEZhaWxDb3VudDsKLQkJCVR4VG90YWxDbnQgPSBUeFJldHJhbnNtaXQgKyBUeFN1Y2Nlc3MgKyBUeEZhaWxDb3VudDsKLQotCQkJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeFJldHJ5T2tDb3VudCArPQotCQkJICAgIFN0YVR4MS5maWVsZC5UeFJldHJhbnNtaXQ7Ci0JCQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4Tm9SZXRyeU9rQ291bnQgKz0KLQkJCSAgICBTdGFUeDEuZmllbGQuVHhTdWNjZXNzOwotCQkJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeEZhaWxDb3VudCArPQotCQkJICAgIFR4U3RhQ250MC5maWVsZC5UeEZhaWxDb3VudDsKLQkJCXBBZC0+V2xhbkNvdW50ZXJzLlRyYW5zbWl0dGVkRnJhZ21lbnRDb3VudC51Lkxvd1BhcnQgKz0KLQkJCSAgICBTdGFUeDEuZmllbGQuVHhTdWNjZXNzOwotCQkJcEFkLT5XbGFuQ291bnRlcnMuUmV0cnlDb3VudC51Lkxvd1BhcnQgKz0KLQkJCSAgICBTdGFUeDEuZmllbGQuVHhSZXRyYW5zbWl0OwotCQkJcEFkLT5XbGFuQ291bnRlcnMuRmFpbGVkQ291bnQudS5Mb3dQYXJ0ICs9Ci0JCQkgICAgVHhTdGFDbnQwLmZpZWxkLlR4RmFpbENvdW50OwotCi0JCQkvKiBpZiBubyB0cmFmZmljIGluIHRoZSBwYXN0IDEtc2VjIHBlcmlvZCwgZG9uJ3QgY2hhbmdlIFRYIHJhdGUsICovCi0JCQkvKiBidXQgY2xlYXIgYWxsIGJhZCBoaXN0b3J5LiBiZWNhdXNlIHRoZSBiYWQgaGlzdG9yeSBtYXkgYWZmZWN0IHRoZSBuZXh0ICovCi0JCQkvKiBDaGFyaW90IHRocm91Z2hwdXQgdGVzdCAqLwotCQkJQWNjdVR4VG90YWxDbnQgPQotCQkJICAgIHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhOb1JldHJ5T2tDb3VudCArCi0JCQkgICAgcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeFJldHJ5T2tDb3VudCArCi0JCQkgICAgcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeEZhaWxDb3VudDsKLQotCQkJaWYgKFR4VG90YWxDbnQpCi0JCQkJVHhFcnJvclJhdGlvID0KLQkJCQkgICAgKChUeFJldHJhbnNtaXQgKwotCQkJCSAgICAgIFR4RmFpbENvdW50KSAqIDEwMCkgLyBUeFRvdGFsQ250OwotCQl9IGVsc2UgewotCQkJaWYgKElORlJBX09OKHBBZCkgJiYgKGkgPT0gMSkpCi0JCQkJUnNzaSA9IFJUTVBNYXhSc3NpKHBBZCwKLQkJCQkJCSAgIHBSc3NpLT5BdmdSc3NpMCwKLQkJCQkJCSAgIHBSc3NpLT5BdmdSc3NpMSwKLQkJCQkJCSAgIHBSc3NpLT5BdmdSc3NpMik7Ci0JCQllbHNlCi0JCQkJUnNzaSA9IFJUTVBNYXhSc3NpKHBBZCwKLQkJCQkJCSAgIHBFbnRyeS0+UnNzaVNhbXBsZS5BdmdSc3NpMCwKLQkJCQkJCSAgIHBFbnRyeS0+UnNzaVNhbXBsZS5BdmdSc3NpMSwKLQkJCQkJCSAgIHBFbnRyeS0+UnNzaVNhbXBsZS5BdmdSc3NpMik7Ci0KLQkJCVR4VG90YWxDbnQgPSBwRW50cnktPk9uZVNlY1R4Tm9SZXRyeU9rQ291bnQgKwotCQkJICAgIHBFbnRyeS0+T25lU2VjVHhSZXRyeU9rQ291bnQgKwotCQkJICAgIHBFbnRyeS0+T25lU2VjVHhGYWlsQ291bnQ7Ci0KLQkJCWlmIChUeFRvdGFsQ250KQotCQkJCVR4RXJyb3JSYXRpbyA9Ci0JCQkJICAgICgocEVudHJ5LT5PbmVTZWNUeFJldHJ5T2tDb3VudCArCi0JCQkJICAgICAgcEVudHJ5LT5PbmVTZWNUeEZhaWxDb3VudCkgKiAxMDApIC8KLQkJCQkgICAgVHhUb3RhbENudDsKLQkJfQotCi0JCWlmIChUeFRvdGFsQ250KSB7Ci0JCQkvKgotCQkJICAgVGhyZWUgQWRIb2MgY29ubmVjdGlvbnMgY2FuIG5vdCB3b3JrIG5vcm1hbGx5IGlmIG9uZSBBZEhvYyBjb25uZWN0aW9uIGlzIGRpc2FwcGVhcmVkIGZyb20gYSBoZWF2eSB0cmFmZmljIGVudmlyb25tZW50IGdlbmVyYXRlZCBieSBwaW5nIHRvb2wKLQkJCSAgIFdlIGZvcmNlIHRvIHNldCBMb25nUnR5TGltaXQgYW5kIFNob3J0UnR5TGltaXQgdG8gMCB0byBzdG9wIHJldHJhbnNtaXR0aW5nIHBhY2tldCwgYWZ0ZXIgYSB3aGlsZSwgcmVzb3Jpbmcgb3JpZ2luYWwgc2V0dGluZ3MKLQkJCSAqLwotCQkJaWYgKFR4RXJyb3JSYXRpbyA9PSAxMDApIHsKLQkJCQlUWF9SVFlfQ0ZHX1NUUlVDIFR4UnR5Q2ZnLCBUeFJ0eUNmZ3RtcDsKLQkJCQl1bnNpZ25lZCBsb25nIEluZGV4OwotCQkJCXVuc2lnbmVkIGxvbmcgTUFDVmFsdWU7Ci0KLQkJCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX1JUWV9DRkcsICZUeFJ0eUNmZy53b3JkKTsKLQkJCQlUeFJ0eUNmZ3RtcC53b3JkID0gVHhSdHlDZmcud29yZDsKLQkJCQlUeFJ0eUNmZy5maWVsZC5Mb25nUnR5TGltaXQgPSAweDA7Ci0JCQkJVHhSdHlDZmcuZmllbGQuU2hvcnRSdHlMaW1pdCA9IDB4MDsKLQkJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9SVFlfQ0ZHLCBUeFJ0eUNmZy53b3JkKTsKLQotCQkJCVJUTVB1c2VjRGVsYXkoMSk7Ci0KLQkJCQlJbmRleCA9IDA7Ci0JCQkJTUFDVmFsdWUgPSAwOwotCQkJCWRvIHsKLQkJCQkJUlRNUF9JT19SRUFEMzIocEFkLCBUWFJYUV9QQ05ULAotCQkJCQkJICAgICAgICZNQUNWYWx1ZSk7Ci0JCQkJCWlmICgoTUFDVmFsdWUgJiAweGZmZmZmZikgPT0gMCkKLQkJCQkJCWJyZWFrOwotCQkJCQlJbmRleCsrOwotCQkJCQlSVE1QdXNlY0RlbGF5KDEwMDApOwotCQkJCX0gd2hpbGUgKChJbmRleCA8IDMzMCkKLQkJCQkJICYmCi0JCQkJCSAoIVJUTVBfVEVTVF9GTEFHCi0JCQkJCSAgKHBBZCwKLQkJCQkJICAgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKSkpOwotCi0JCQkJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9SVFlfQ0ZHLCAmVHhSdHlDZmcud29yZCk7Ci0JCQkJVHhSdHlDZmcuZmllbGQuTG9uZ1J0eUxpbWl0ID0KLQkJCQkgICAgVHhSdHlDZmd0bXAuZmllbGQuTG9uZ1J0eUxpbWl0OwotCQkJCVR4UnR5Q2ZnLmZpZWxkLlNob3J0UnR5TGltaXQgPQotCQkJCSAgICBUeFJ0eUNmZ3RtcC5maWVsZC5TaG9ydFJ0eUxpbWl0OwotCQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX1JUWV9DRkcsIFR4UnR5Q2ZnLndvcmQpOwotCQkJfQotCQl9Ci0KLQkJQ3VyclJhdGVJZHggPSBwRW50cnktPkN1cnJUeFJhdGVJbmRleDsKLQotCQlNbG1lU2VsZWN0VHhSYXRlVGFibGUocEFkLCBwRW50cnksICZwVGFibGUsICZUYWJsZVNpemUsCi0JCQkJICAgICAgJkluaXRUeFJhdGVJZHgpOwotCi0JCWlmIChDdXJyUmF0ZUlkeCA+PSBUYWJsZVNpemUpIHsKLQkJCUN1cnJSYXRlSWR4ID0gVGFibGVTaXplIC0gMTsKLQkJfQotCQkvKiBXaGVuIHN3aXRjaCBmcm9tIEZpeGVkIHJhdGUgLT4gYXV0byByYXRlLCB0aGUgUkVBTCBUWCByYXRlIG1pZ2h0IGJlIGRpZmZlcmVudCBmcm9tIHBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZUluZGV4LiAqLwotCQkvKiBTbyBuZWVkIHRvIHN5bmMgaGVyZS4gKi8KLQkJcEN1cnJUeFJhdGUgPQotCQkgICAgKHN0cnVjdCBydF9ydG1wX3R4X3JhdGVfc3dpdGNoICopICYgcFRhYmxlWyhDdXJyUmF0ZUlkeCArIDEpICogNV07Ci0JCWlmICgocEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTUNTICE9IHBDdXJyVHhSYXRlLT5DdXJyTUNTKQotCQkgICAgLyomJiAocEFkLT5TdGFDZmcuYkF1dG9UeFJhdGVTd2l0Y2ggPT0gVFJVRSkgKi8KLQkJICAgICkgewotCi0JCQkvKiBOZWVkIHRvIHN5bmMgUmVhbCBUeCByYXRlIGFuZCBvdXIgcmVjb3JkLiAqLwotCQkJLyogVGhlbiByZXR1cm4gZm9yIG5leHQgRFJTLiAqLwotCQkJcEN1cnJUeFJhdGUgPQotCQkJICAgIChzdHJ1Y3QgcnRfcnRtcF90eF9yYXRlX3N3aXRjaCAqKSAmIHBUYWJsZVsoSW5pdFR4UmF0ZUlkeCArIDEpCi0JCQkJCQkJICAgICogNV07Ci0JCQlwRW50cnktPkN1cnJUeFJhdGVJbmRleCA9IEluaXRUeFJhdGVJZHg7Ci0JCQlNbG1lU2V0VHhSYXRlKHBBZCwgcEVudHJ5LCBwQ3VyclR4UmF0ZSk7Ci0KLQkJCS8qIHJlc2V0IGFsbCBPbmVTZWNUeCBjb3VudGVycyAqLwotCQkJUkVTRVRfT05FX1NFQ19UWF9DTlQocEVudHJ5KTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCS8qIGRlY2lkZSB0aGUgbmV4dCB1cGdyYWRlIHJhdGUgYW5kIGRvd25ncmFkZSByYXRlLCBpZiBhbnkgKi8KLQkJaWYgKChDdXJyUmF0ZUlkeCA+IDApICYmIChDdXJyUmF0ZUlkeCA8IChUYWJsZVNpemUgLSAxKSkpIHsKLQkJCVVwUmF0ZUlkeCA9IEN1cnJSYXRlSWR4ICsgMTsKLQkJCURvd25SYXRlSWR4ID0gQ3VyclJhdGVJZHggLSAxOwotCQl9IGVsc2UgaWYgKEN1cnJSYXRlSWR4ID09IDApIHsKLQkJCVVwUmF0ZUlkeCA9IEN1cnJSYXRlSWR4ICsgMTsKLQkJCURvd25SYXRlSWR4ID0gQ3VyclJhdGVJZHg7Ci0JCX0gZWxzZSBpZiAoQ3VyclJhdGVJZHggPT0gKFRhYmxlU2l6ZSAtIDEpKSB7Ci0JCQlVcFJhdGVJZHggPSBDdXJyUmF0ZUlkeDsKLQkJCURvd25SYXRlSWR4ID0gQ3VyclJhdGVJZHggLSAxOwotCQl9Ci0KLQkJcEN1cnJUeFJhdGUgPQotCQkgICAgKHN0cnVjdCBydF9ydG1wX3R4X3JhdGVfc3dpdGNoICopICYgcFRhYmxlWyhDdXJyUmF0ZUlkeCArIDEpICogNV07Ci0KLQkJaWYgKChSc3NpID4gLTY1KSAmJiAocEN1cnJUeFJhdGUtPk1vZGUgPj0gTU9ERV9IVE1JWCkpIHsKLQkJCVRyYWluVXAgPQotCQkJICAgIChwQ3VyclR4UmF0ZS0+VHJhaW5VcCArCi0JCQkgICAgIChwQ3VyclR4UmF0ZS0+VHJhaW5VcCA+PiAxKSk7Ci0JCQlUcmFpbkRvd24gPQotCQkJICAgIChwQ3VyclR4UmF0ZS0+VHJhaW5Eb3duICsKLQkJCSAgICAgKHBDdXJyVHhSYXRlLT5UcmFpbkRvd24gPj4gMSkpOwotCQl9IGVsc2UgewotCQkJVHJhaW5VcCA9IHBDdXJyVHhSYXRlLT5UcmFpblVwOwotCQkJVHJhaW5Eb3duID0gcEN1cnJUeFJhdGUtPlRyYWluRG93bjsKLQkJfQotCi0JCS8qcEFkLT5EcnNDb3VudGVycy5MYXN0VGltZVR4UmF0ZUNoYW5nZUFjdGlvbiA9IHBBZC0+RHJzQ291bnRlcnMuTGFzdFNlY1R4UmF0ZUNoYW5nZUFjdGlvbjsgKi8KLQotCQkvKiAqLwotCQkvKiBLZWVwIHRoZSBsYXN0IHRpbWUgVHhSYXRlQ2hhbmdlQWN0aW9uIHN0YXR1cy4gKi8KLQkJLyogKi8KLQkJcEVudHJ5LT5MYXN0VGltZVR4UmF0ZUNoYW5nZUFjdGlvbiA9Ci0JCSAgICBwRW50cnktPkxhc3RTZWNUeFJhdGVDaGFuZ2VBY3Rpb247Ci0KLQkJLyogKi8KLQkJLyogQ0FTRSAxLiB3aGVuIFRYIHNhbXBsZXMgYXJlIGZld2VyIHRoYW4gMTUsIHRoZW4gZGVjaWRlIFRYIHJhdGUgc29sZWx5IG9uIFJTU0kgKi8KLQkJLyogICAgICAgICAoY3JpdGVyaWEgY29waWVkIGZyb20gUlQyNTAwIGZvciBOZXRvcGlhIGNhc2UpICovCi0JCS8qICovCi0JCWlmIChUeFRvdGFsQ250IDw9IDE1KSB7Ci0JCQljaGFyIGlkeCA9IDA7Ci0JCQl1OCBUeFJhdGVJZHg7Ci0JCQl1OCBNQ1MwID0gMCwgTUNTMSA9IDAsIE1DUzIgPSAwLCBNQ1MzID0gMCwgTUNTNCA9Ci0JCQkgICAgMCwgTUNTNSA9IDAsIE1DUzYgPSAwLCBNQ1M3ID0gMDsKLQkJCXU4IE1DUzEyID0gMCwgTUNTMTMgPSAwLCBNQ1MxNCA9IDAsIE1DUzE1ID0gMDsKLQkJCXU4IE1DUzIwID0gMCwgTUNTMjEgPSAwLCBNQ1MyMiA9IDAsIE1DUzIzID0gMDsJLyogMyozICovCi0KLQkJCS8qIGNoZWNrIHRoZSBleGlzdGVuY2UgYW5kIGluZGV4IG9mIGVhY2ggbmVlZGVkIE1DUyAqLwotCQkJd2hpbGUgKGlkeCA8IHBUYWJsZVswXSkgewotCQkJCXBDdXJyVHhSYXRlID0KLQkJCQkgICAgKHN0cnVjdCBydF9ydG1wX3R4X3JhdGVfc3dpdGNoICopICYgcFRhYmxlWyhpZHggKyAxKSAqCi0JCQkJCQkJCSAgICA1XTsKLQotCQkJCWlmIChwQ3VyclR4UmF0ZS0+Q3Vyck1DUyA9PSBNQ1NfMCkgewotCQkJCQlNQ1MwID0gaWR4OwotCQkJCX0gZWxzZSBpZiAocEN1cnJUeFJhdGUtPkN1cnJNQ1MgPT0gTUNTXzEpIHsKLQkJCQkJTUNTMSA9IGlkeDsKLQkJCQl9IGVsc2UgaWYgKHBDdXJyVHhSYXRlLT5DdXJyTUNTID09IE1DU18yKSB7Ci0JCQkJCU1DUzIgPSBpZHg7Ci0JCQkJfSBlbHNlIGlmIChwQ3VyclR4UmF0ZS0+Q3Vyck1DUyA9PSBNQ1NfMykgewotCQkJCQlNQ1MzID0gaWR4OwotCQkJCX0gZWxzZSBpZiAocEN1cnJUeFJhdGUtPkN1cnJNQ1MgPT0gTUNTXzQpIHsKLQkJCQkJTUNTNCA9IGlkeDsKLQkJCQl9IGVsc2UgaWYgKHBDdXJyVHhSYXRlLT5DdXJyTUNTID09IE1DU181KSB7Ci0JCQkJCU1DUzUgPSBpZHg7Ci0JCQkJfSBlbHNlIGlmIChwQ3VyclR4UmF0ZS0+Q3Vyck1DUyA9PSBNQ1NfNikgewotCQkJCQlNQ1M2ID0gaWR4OwotCQkJCX0KLQkJCQkvKmVsc2UgaWYgKHBDdXJyVHhSYXRlLT5DdXJyTUNTID09IE1DU183KSAqLwotCQkJCWVsc2UgaWYgKChwQ3VyclR4UmF0ZS0+Q3Vyck1DUyA9PSBNQ1NfNykgJiYgKHBDdXJyVHhSYXRlLT5TaG9ydEdJID09IEdJXzgwMCkpCS8qIHByZXZlbnQgdGhlIGhpZ2hlc3QgTUNTIHVzaW5nIHNob3J0IEdJIHdoZW4gMVQgYW5kIGxvdyB0aHJvdWdocHV0ICovCi0JCQkJewotCQkJCQlNQ1M3ID0gaWR4OwotCQkJCX0gZWxzZSBpZiAocEN1cnJUeFJhdGUtPkN1cnJNQ1MgPT0gTUNTXzEyKSB7Ci0JCQkJCU1DUzEyID0gaWR4OwotCQkJCX0gZWxzZSBpZiAocEN1cnJUeFJhdGUtPkN1cnJNQ1MgPT0gTUNTXzEzKSB7Ci0JCQkJCU1DUzEzID0gaWR4OwotCQkJCX0gZWxzZSBpZiAocEN1cnJUeFJhdGUtPkN1cnJNQ1MgPT0gTUNTXzE0KSB7Ci0JCQkJCU1DUzE0ID0gaWR4OwotCQkJCX0KLQkJCQllbHNlIGlmICgocEN1cnJUeFJhdGUtPkN1cnJNQ1MgPT0gTUNTXzE1KSAmJiAocEN1cnJUeFJhdGUtPlNob3J0R0kgPT0gR0lfODAwKSkJLyp3ZSBob3BlIHRvIHVzZSBTaG9ydEdJIGFzIGluaXRpYWwgcmF0ZSwgaG93ZXZlciBBdGhlcm9zJ3MgY2hpcCBoYXMgYnVncyB3aGVuIHNob3J0IEdJICovCi0JCQkJewotCQkJCQlNQ1MxNSA9IGlkeDsKLQkJCQl9IGVsc2UgaWYgKHBDdXJyVHhSYXRlLT5DdXJyTUNTID09IE1DU18yMCkJLyogMyozICovCi0JCQkJewotCQkJCQlNQ1MyMCA9IGlkeDsKLQkJCQl9IGVsc2UgaWYgKHBDdXJyVHhSYXRlLT5DdXJyTUNTID09IE1DU18yMSkgewotCQkJCQlNQ1MyMSA9IGlkeDsKLQkJCQl9IGVsc2UgaWYgKHBDdXJyVHhSYXRlLT5DdXJyTUNTID09IE1DU18yMikgewotCQkJCQlNQ1MyMiA9IGlkeDsKLQkJCQl9IGVsc2UgaWYgKHBDdXJyVHhSYXRlLT5DdXJyTUNTID09IE1DU18yMykgewotCQkJCQlNQ1MyMyA9IGlkeDsKLQkJCQl9Ci0JCQkJaWR4Kys7Ci0JCQl9Ci0KLQkJCWlmIChwQWQtPkxhdGNoUmZSZWdzLkNoYW5uZWwgPD0gMTQpIHsKLQkJCQlpZiAocEFkLT5OaWNDb25maWcyLmZpZWxkLkV4dGVybmFsTE5BRm9yRykgewotCQkJCQlSc3NpT2Zmc2V0ID0gMjsKLQkJCQl9IGVsc2UgewotCQkJCQlSc3NpT2Zmc2V0ID0gNTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCWlmIChwQWQtPk5pY0NvbmZpZzIuZmllbGQuRXh0ZXJuYWxMTkFGb3JBKSB7Ci0JCQkJCVJzc2lPZmZzZXQgPSA1OwotCQkJCX0gZWxzZSB7Ci0JCQkJCVJzc2lPZmZzZXQgPSA4OwotCQkJCX0KLQkJCX0KLQotCQkJLyppZiAoTUNTMTUpICovCi0JCQlpZiAoKHBUYWJsZSA9PSBSYXRlU3dpdGNoVGFibGUxMUJHTjNTKSB8fCAocFRhYmxlID09IFJhdGVTd2l0Y2hUYWJsZTExTjNTKSB8fCAocFRhYmxlID09IFJhdGVTd2l0Y2hUYWJsZSkpIHsJLyogTiBtb2RlIHdpdGggMyBzdHJlYW0gLy8gMyozICovCi0JCQkJaWYgKE1DUzIzICYmIChSc3NpID49IC03MCkpCi0JCQkJCVR4UmF0ZUlkeCA9IE1DUzIzOwotCQkJCWVsc2UgaWYgKE1DUzIyICYmIChSc3NpID49IC03MikpCi0JCQkJCVR4UmF0ZUlkeCA9IE1DUzIyOwotCQkJCWVsc2UgaWYgKE1DUzIxICYmIChSc3NpID49IC03NikpCi0JCQkJCVR4UmF0ZUlkeCA9IE1DUzIxOwotCQkJCWVsc2UgaWYgKE1DUzIwICYmIChSc3NpID49IC03OCkpCi0JCQkJCVR4UmF0ZUlkeCA9IE1DUzIwOwotCQkJCWVsc2UgaWYgKE1DUzQgJiYgKFJzc2kgPj0gLTgyKSkKLQkJCQkJVHhSYXRlSWR4ID0gTUNTNDsKLQkJCQllbHNlIGlmIChNQ1MzICYmIChSc3NpID49IC04NCkpCi0JCQkJCVR4UmF0ZUlkeCA9IE1DUzM7Ci0JCQkJZWxzZSBpZiAoTUNTMiAmJiAoUnNzaSA+PSAtODYpKQotCQkJCQlUeFJhdGVJZHggPSBNQ1MyOwotCQkJCWVsc2UgaWYgKE1DUzEgJiYgKFJzc2kgPj0gLTg4KSkKLQkJCQkJVHhSYXRlSWR4ID0gTUNTMTsKLQkJCQllbHNlCi0JCQkJCVR4UmF0ZUlkeCA9IE1DUzA7Ci0JCQl9Ci0vKiAgICAgICAgICAgICAgZWxzZSBpZiAoKHBUYWJsZSA9PSBSYXRlU3dpdGNoVGFibGUxMUJHTjJTKSB8fCAocFRhYmxlID09IFJhdGVTd2l0Y2hUYWJsZTExQkdOMlNGb3JBQmFuZCkgfHwocFRhYmxlID09IFJhdGVTd2l0Y2hUYWJsZTExTjJTKSB8fChwVGFibGUgPT0gUmF0ZVN3aXRjaFRhYmxlMTFOMlNGb3JBQmFuZCkgfHwgKHBUYWJsZSA9PSBSYXRlU3dpdGNoVGFibGUpKSAqLwotCQkJZWxzZSBpZiAoKHBUYWJsZSA9PSBSYXRlU3dpdGNoVGFibGUxMUJHTjJTKSB8fCAocFRhYmxlID09IFJhdGVTd2l0Y2hUYWJsZTExQkdOMlNGb3JBQmFuZCkgfHwgKHBUYWJsZSA9PSBSYXRlU3dpdGNoVGFibGUxMU4yUykgfHwgKHBUYWJsZSA9PSBSYXRlU3dpdGNoVGFibGUxMU4yU0ZvckFCYW5kKSkJLyogMyozICovCi0JCQl7CS8qIE4gbW9kZSB3aXRoIDIgc3RyZWFtICovCi0JCQkJaWYgKE1DUzE1ICYmIChSc3NpID49ICgtNzAgKyBSc3NpT2Zmc2V0KSkpCi0JCQkJCVR4UmF0ZUlkeCA9IE1DUzE1OwotCQkJCWVsc2UgaWYgKE1DUzE0ICYmIChSc3NpID49ICgtNzIgKyBSc3NpT2Zmc2V0KSkpCi0JCQkJCVR4UmF0ZUlkeCA9IE1DUzE0OwotCQkJCWVsc2UgaWYgKE1DUzEzICYmIChSc3NpID49ICgtNzYgKyBSc3NpT2Zmc2V0KSkpCi0JCQkJCVR4UmF0ZUlkeCA9IE1DUzEzOwotCQkJCWVsc2UgaWYgKE1DUzEyICYmIChSc3NpID49ICgtNzggKyBSc3NpT2Zmc2V0KSkpCi0JCQkJCVR4UmF0ZUlkeCA9IE1DUzEyOwotCQkJCWVsc2UgaWYgKE1DUzQgJiYgKFJzc2kgPj0gKC04MiArIFJzc2lPZmZzZXQpKSkKLQkJCQkJVHhSYXRlSWR4ID0gTUNTNDsKLQkJCQllbHNlIGlmIChNQ1MzICYmIChSc3NpID49ICgtODQgKyBSc3NpT2Zmc2V0KSkpCi0JCQkJCVR4UmF0ZUlkeCA9IE1DUzM7Ci0JCQkJZWxzZSBpZiAoTUNTMiAmJiAoUnNzaSA+PSAoLTg2ICsgUnNzaU9mZnNldCkpKQotCQkJCQlUeFJhdGVJZHggPSBNQ1MyOwotCQkJCWVsc2UgaWYgKE1DUzEgJiYgKFJzc2kgPj0gKC04OCArIFJzc2lPZmZzZXQpKSkKLQkJCQkJVHhSYXRlSWR4ID0gTUNTMTsKLQkJCQllbHNlCi0JCQkJCVR4UmF0ZUlkeCA9IE1DUzA7Ci0JCQl9IGVsc2UgaWYgKChwVGFibGUgPT0gUmF0ZVN3aXRjaFRhYmxlMTFCR04xUykgfHwgKHBUYWJsZSA9PSBSYXRlU3dpdGNoVGFibGUxMU4xUykpIHsJLyogTiBtb2RlIHdpdGggMSBzdHJlYW0gKi8KLQkJCQlpZiAoTUNTNyAmJiAoUnNzaSA+ICgtNzIgKyBSc3NpT2Zmc2V0KSkpCi0JCQkJCVR4UmF0ZUlkeCA9IE1DUzc7Ci0JCQkJZWxzZSBpZiAoTUNTNiAmJiAoUnNzaSA+ICgtNzQgKyBSc3NpT2Zmc2V0KSkpCi0JCQkJCVR4UmF0ZUlkeCA9IE1DUzY7Ci0JCQkJZWxzZSBpZiAoTUNTNSAmJiAoUnNzaSA+ICgtNzcgKyBSc3NpT2Zmc2V0KSkpCi0JCQkJCVR4UmF0ZUlkeCA9IE1DUzU7Ci0JCQkJZWxzZSBpZiAoTUNTNCAmJiAoUnNzaSA+ICgtNzkgKyBSc3NpT2Zmc2V0KSkpCi0JCQkJCVR4UmF0ZUlkeCA9IE1DUzQ7Ci0JCQkJZWxzZSBpZiAoTUNTMyAmJiAoUnNzaSA+ICgtODEgKyBSc3NpT2Zmc2V0KSkpCi0JCQkJCVR4UmF0ZUlkeCA9IE1DUzM7Ci0JCQkJZWxzZSBpZiAoTUNTMiAmJiAoUnNzaSA+ICgtODMgKyBSc3NpT2Zmc2V0KSkpCi0JCQkJCVR4UmF0ZUlkeCA9IE1DUzI7Ci0JCQkJZWxzZSBpZiAoTUNTMSAmJiAoUnNzaSA+ICgtODYgKyBSc3NpT2Zmc2V0KSkpCi0JCQkJCVR4UmF0ZUlkeCA9IE1DUzE7Ci0JCQkJZWxzZQotCQkJCQlUeFJhdGVJZHggPSBNQ1MwOwotCQkJfSBlbHNlIHsJLyogTGVnYWN5IG1vZGUgKi8KLQkJCQlpZiAoTUNTNyAmJiAoUnNzaSA+IC03MCkpCi0JCQkJCVR4UmF0ZUlkeCA9IE1DUzc7Ci0JCQkJZWxzZSBpZiAoTUNTNiAmJiAoUnNzaSA+IC03NCkpCi0JCQkJCVR4UmF0ZUlkeCA9IE1DUzY7Ci0JCQkJZWxzZSBpZiAoTUNTNSAmJiAoUnNzaSA+IC03OCkpCi0JCQkJCVR4UmF0ZUlkeCA9IE1DUzU7Ci0JCQkJZWxzZSBpZiAoTUNTNCAmJiAoUnNzaSA+IC04MikpCi0JCQkJCVR4UmF0ZUlkeCA9IE1DUzQ7Ci0JCQkJZWxzZSBpZiAoTUNTNCA9PSAwKQkvKiBmb3IgQi1vbmx5IG1vZGUgKi8KLQkJCQkJVHhSYXRlSWR4ID0gTUNTMzsKLQkJCQllbHNlIGlmIChNQ1MzICYmIChSc3NpID4gLTg1KSkKLQkJCQkJVHhSYXRlSWR4ID0gTUNTMzsKLQkJCQllbHNlIGlmIChNQ1MyICYmIChSc3NpID4gLTg3KSkKLQkJCQkJVHhSYXRlSWR4ID0gTUNTMjsKLQkJCQllbHNlIGlmIChNQ1MxICYmIChSc3NpID4gLTkwKSkKLQkJCQkJVHhSYXRlSWR4ID0gTUNTMTsKLQkJCQllbHNlCi0JCQkJCVR4UmF0ZUlkeCA9IE1DUzA7Ci0JCQl9Ci0KLQkJCS8qICAgICAgICAgICAgICBpZiAoVHhSYXRlSWR4ICE9IHBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZUluZGV4KSAqLwotCQkJewotCQkJCXBFbnRyeS0+Q3VyclR4UmF0ZUluZGV4ID0gVHhSYXRlSWR4OwotCQkJCXBOZXh0VHhSYXRlID0KLQkJCQkgICAgKHN0cnVjdCBydF9ydG1wX3R4X3JhdGVfc3dpdGNoICopICYKLQkJCQkgICAgcFRhYmxlWyhwRW50cnktPkN1cnJUeFJhdGVJbmRleCArIDEpICogNV07Ci0JCQkJTWxtZVNldFR4UmF0ZShwQWQsIHBFbnRyeSwgcE5leHRUeFJhdGUpOwotCQkJfQotCi0JCQlOZGlzWmVyb01lbW9yeShwRW50cnktPlR4UXVhbGl0eSwKLQkJCQkgICAgICAgc2l6ZW9mKHUxNikqCi0JCQkJICAgICAgIE1BWF9TVEVQX09GX1RYX1JBVEVfU1dJVENIKTsKLQkJCU5kaXNaZXJvTWVtb3J5KHBFbnRyeS0+UEVSLAotCQkJCSAgICAgICBzaXplb2YodTgpKgotCQkJCSAgICAgICBNQVhfU1RFUF9PRl9UWF9SQVRFX1NXSVRDSCk7Ci0JCQlwRW50cnktPmZMYXN0U2VjQWNjb3JkaW5nUlNTSSA9IFRSVUU7Ci0JCQkvKiByZXNldCBhbGwgT25lU2VjVHggY291bnRlcnMgKi8KLQkJCVJFU0VUX09ORV9TRUNfVFhfQ05UKHBFbnRyeSk7Ci0KLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKHBFbnRyeS0+Zkxhc3RTZWNBY2NvcmRpbmdSU1NJID09IFRSVUUpIHsKLQkJCXBFbnRyeS0+Zkxhc3RTZWNBY2NvcmRpbmdSU1NJID0gRkFMU0U7Ci0JCQlwRW50cnktPkxhc3RTZWNUeFJhdGVDaGFuZ2VBY3Rpb24gPSAwOwotCQkJLyogcmVzZXQgYWxsIE9uZVNlY1R4IGNvdW50ZXJzICovCi0JCQlSRVNFVF9PTkVfU0VDX1RYX0NOVChwRW50cnkpOwotCi0JCQljb250aW51ZTsKLQkJfQotCi0JCWRvIHsKLQkJCUJPT0xFQU4gYlRyYWluVXBEb3duID0gRkFMU0U7Ci0KLQkJCXBFbnRyeS0+Q3VyclR4UmF0ZVN0YWJsZVRpbWUrKzsKLQotCQkJLyogZG93bmdyYWRlIFRYIHF1YWxpdHkgaWYgUEVSID49IFJhdGUtRG93biB0aHJlc2hvbGQgKi8KLQkJCWlmIChUeEVycm9yUmF0aW8gPj0gVHJhaW5Eb3duKSB7Ci0JCQkJYlRyYWluVXBEb3duID0gVFJVRTsKLQkJCQlwRW50cnktPlR4UXVhbGl0eVtDdXJyUmF0ZUlkeF0gPQotCQkJCSAgICBEUlNfVFhfUVVBTElUWV9XT1JTVF9CT1VORDsKLQkJCX0KLQkJCS8qIHVwZ3JhZGUgVFggcXVhbGl0eSBpZiBQRVIgPD0gUmF0ZS1VcCB0aHJlc2hvbGQgKi8KLQkJCWVsc2UgaWYgKFR4RXJyb3JSYXRpbyA8PSBUcmFpblVwKSB7Ci0JCQkJYlRyYWluVXBEb3duID0gVFJVRTsKLQkJCQliVXBncmFkZVF1YWxpdHkgPSBUUlVFOwotCQkJCWlmIChwRW50cnktPlR4UXVhbGl0eVtDdXJyUmF0ZUlkeF0pCi0JCQkJCXBFbnRyeS0+VHhRdWFsaXR5W0N1cnJSYXRlSWR4XS0tOwkvKiBxdWFsaXR5IHZlcnkgZ29vZCBpbiBDdXJyUmF0ZSAqLwotCi0JCQkJaWYgKHBFbnRyeS0+VHhSYXRlVXBQZW5hbHR5KQotCQkJCQlwRW50cnktPlR4UmF0ZVVwUGVuYWx0eS0tOwotCQkJCWVsc2UgaWYgKHBFbnRyeS0+VHhRdWFsaXR5W1VwUmF0ZUlkeF0pCi0JCQkJCXBFbnRyeS0+VHhRdWFsaXR5W1VwUmF0ZUlkeF0tLTsJLyogbWF5IGltcHJvdmUgbmV4dCBVUCByYXRlJ3MgcXVhbGl0eSAqLwotCQkJfQotCi0JCQlwRW50cnktPlBFUltDdXJyUmF0ZUlkeF0gPSAodTgpVHhFcnJvclJhdGlvOwotCi0JCQlpZiAoYlRyYWluVXBEb3duKSB7Ci0JCQkJLyogcGVyZm9ybSBEUlMgLSBjb25zaWRlciBUeFJhdGUgRG93biBmaXJzdCwgdGhlbiByYXRlIHVwLiAqLwotCQkJCWlmICgoQ3VyclJhdGVJZHggIT0gRG93blJhdGVJZHgpCi0JCQkJICAgICYmIChwRW50cnktPlR4UXVhbGl0eVtDdXJyUmF0ZUlkeF0gPj0KLQkJCQkJRFJTX1RYX1FVQUxJVFlfV09SU1RfQk9VTkQpKSB7Ci0JCQkJCXBFbnRyeS0+Q3VyclR4UmF0ZUluZGV4ID0gRG93blJhdGVJZHg7Ci0JCQkJfSBlbHNlIGlmICgoQ3VyclJhdGVJZHggIT0gVXBSYXRlSWR4KQotCQkJCQkgICAmJiAocEVudHJ5LT5UeFF1YWxpdHlbVXBSYXRlSWR4XSA8PQotCQkJCQkgICAgICAgMCkpIHsKLQkJCQkJcEVudHJ5LT5DdXJyVHhSYXRlSW5kZXggPSBVcFJhdGVJZHg7Ci0JCQkJfQotCQkJfQotCQl9IHdoaWxlIChGQUxTRSk7Ci0KLQkJLyogaWYgcmF0ZS11cCBoYXBwZW4sIGNsZWFyIGFsbCBiYWQgaGlzdG9yeSBvZiBhbGwgVFggcmF0ZXMgKi8KLQkJaWYgKHBFbnRyeS0+Q3VyclR4UmF0ZUluZGV4ID4gQ3VyclJhdGVJZHgpIHsKLQkJCXBFbnRyeS0+Q3VyclR4UmF0ZVN0YWJsZVRpbWUgPSAwOwotCQkJcEVudHJ5LT5UeFJhdGVVcFBlbmFsdHkgPSAwOwotCQkJcEVudHJ5LT5MYXN0U2VjVHhSYXRlQ2hhbmdlQWN0aW9uID0gMTsJLyogcmF0ZSBVUCAqLwotCQkJTmRpc1plcm9NZW1vcnkocEVudHJ5LT5UeFF1YWxpdHksCi0JCQkJICAgICAgIHNpemVvZih1MTYpKgotCQkJCSAgICAgICBNQVhfU1RFUF9PRl9UWF9SQVRFX1NXSVRDSCk7Ci0JCQlOZGlzWmVyb01lbW9yeShwRW50cnktPlBFUiwKLQkJCQkgICAgICAgc2l6ZW9mKHU4KSoKLQkJCQkgICAgICAgTUFYX1NURVBfT0ZfVFhfUkFURV9TV0lUQ0gpOwotCi0JCQkvKiAqLwotCQkJLyogRm9yIFR4UmF0ZSBmYXN0IHRyYWluIHVwICovCi0JCQkvKiAqLwotCQkJaWYgKCFwQWQtPlN0YUNmZy5TdGFRdWlja1Jlc3BvbmVGb3JSYXRlVXBUaW1lclJ1bm5pbmcpIHsKLQkJCQlSVE1QU2V0VGltZXIoJnBBZC0+U3RhQ2ZnLgotCQkJCQkgICAgIFN0YVF1aWNrUmVzcG9uZUZvclJhdGVVcFRpbWVyLAotCQkJCQkgICAgIDEwMCk7Ci0KLQkJCQlwQWQtPlN0YUNmZy4KLQkJCQkgICAgU3RhUXVpY2tSZXNwb25lRm9yUmF0ZVVwVGltZXJSdW5uaW5nID0gVFJVRTsKLQkJCX0KLQkJCWJUeFJhdGVDaGFuZ2VkID0gVFJVRTsKLQkJfQotCQkvKiBpZiByYXRlLWRvd24gaGFwcGVuLCBvbmx5IGNsZWFyIERvd25SYXRlJ3MgYmFkIGhpc3RvcnkgKi8KLQkJZWxzZSBpZiAocEVudHJ5LT5DdXJyVHhSYXRlSW5kZXggPCBDdXJyUmF0ZUlkeCkgewotCQkJcEVudHJ5LT5DdXJyVHhSYXRlU3RhYmxlVGltZSA9IDA7Ci0JCQlwRW50cnktPlR4UmF0ZVVwUGVuYWx0eSA9IDA7CS8qIG5vIHBlbmFsdHkgKi8KLQkJCXBFbnRyeS0+TGFzdFNlY1R4UmF0ZUNoYW5nZUFjdGlvbiA9IDI7CS8qIHJhdGUgRE9XTiAqLwotCQkJcEVudHJ5LT5UeFF1YWxpdHlbcEVudHJ5LT5DdXJyVHhSYXRlSW5kZXhdID0gMDsKLQkJCXBFbnRyeS0+UEVSW3BFbnRyeS0+Q3VyclR4UmF0ZUluZGV4XSA9IDA7Ci0KLQkJCS8qICovCi0JCQkvKiBGb3IgVHhSYXRlIGZhc3QgdHJhaW4gZG93biAqLwotCQkJLyogKi8KLQkJCWlmICghcEFkLT5TdGFDZmcuU3RhUXVpY2tSZXNwb25lRm9yUmF0ZVVwVGltZXJSdW5uaW5nKSB7Ci0JCQkJUlRNUFNldFRpbWVyKCZwQWQtPlN0YUNmZy4KLQkJCQkJICAgICBTdGFRdWlja1Jlc3BvbmVGb3JSYXRlVXBUaW1lciwKLQkJCQkJICAgICAxMDApOwotCi0JCQkJcEFkLT5TdGFDZmcuCi0JCQkJICAgIFN0YVF1aWNrUmVzcG9uZUZvclJhdGVVcFRpbWVyUnVubmluZyA9IFRSVUU7Ci0JCQl9Ci0JCQliVHhSYXRlQ2hhbmdlZCA9IFRSVUU7Ci0JCX0gZWxzZSB7Ci0JCQlwRW50cnktPkxhc3RTZWNUeFJhdGVDaGFuZ2VBY3Rpb24gPSAwOwkvKiByYXRlIG5vIGNoYW5nZSAqLwotCQkJYlR4UmF0ZUNoYW5nZWQgPSBGQUxTRTsKLQkJfQotCi0JCXBFbnRyeS0+TGFzdFR4T2tDb3VudCA9IFR4U3VjY2VzczsKLQkJewotCQkJdTggdG1wVHhSYXRlOwotCi0JCQkvKiB0byBmaXggdGNwIGFjayBpc3N1ZSAqLwotCQkJaWYgKCFiVHhSYXRlQ2hhbmdlZAotCQkJICAgICYmIChwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1JlY2VpdmVkQnl0ZUNvdW50ID4KLQkJCQkocEFkLT5SYWxpbmtDb3VudGVycy4KLQkJCQkgT25lU2VjVHJhbnNtaXR0ZWRCeXRlQ291bnQgKiA1KSkpIHsKLQkJCQl0bXBUeFJhdGUgPSBEb3duUmF0ZUlkeDsKLQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsCi0JCQkJCSAgICAgKCJEUlM6IFJ4KCVkKSBpcyA1IHRpbWVzIGxhcmdlciB0aGFuIFR4KCVkKSwgdXNlIGxvdyByYXRlIChjdXJyPSVkLCB0bXA9JWQpXG4iLAotCQkJCQkgICAgICBwQWQtPlJhbGlua0NvdW50ZXJzLgotCQkJCQkgICAgICBPbmVTZWNSZWNlaXZlZEJ5dGVDb3VudCwKLQkJCQkJICAgICAgcEFkLT5SYWxpbmtDb3VudGVycy4KLQkJCQkJICAgICAgT25lU2VjVHJhbnNtaXR0ZWRCeXRlQ291bnQsCi0JCQkJCSAgICAgIHBFbnRyeS0+Q3VyclR4UmF0ZUluZGV4LAotCQkJCQkgICAgICB0bXBUeFJhdGUpKTsKLQkJCX0gZWxzZSB7Ci0JCQkJdG1wVHhSYXRlID0gcEVudHJ5LT5DdXJyVHhSYXRlSW5kZXg7Ci0JCQl9Ci0KLQkJCXBOZXh0VHhSYXRlID0KLQkJCSAgICAoc3RydWN0IHJ0X3J0bXBfdHhfcmF0ZV9zd2l0Y2ggKikgJiBwVGFibGVbKHRtcFR4UmF0ZSArIDEpICoKLQkJCQkJCQkgICAgNV07Ci0JCX0KLQkJaWYgKGJUeFJhdGVDaGFuZ2VkICYmIHBOZXh0VHhSYXRlKSB7Ci0JCQlNbG1lU2V0VHhSYXRlKHBBZCwgcEVudHJ5LCBwTmV4dFR4UmF0ZSk7Ci0JCX0KLQkJLyogcmVzZXQgYWxsIE9uZVNlY1R4IGNvdW50ZXJzICovCi0JCVJFU0VUX09ORV9TRUNfVFhfQ05UKHBFbnRyeSk7Ci0JfQotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JCVN0YXRpb24gc2lkZSwgQXV0byBUeFJhdGUgZmFzdGVyIHRyYWluIHVwIHRpbWVyIGNhbGwgYmFjayBmdW5jdGlvbi4KLQotCUFyZ3VtZW50czoKLQkJU3lzdGVtU3BlY2lmaWMxCQkJLSBOb3QgdXNlZC4KLQkJRnVuY3Rpb25Db250ZXh0CQkJLSBQb2ludGVyIHRvIG91ciBBZGFwdGVyIGNvbnRleHQuCi0JCVN5c3RlbVNwZWNpZmljMgkJCS0gTm90IHVzZWQuCi0JCVN5c3RlbVNwZWNpZmljMwkJCS0gTm90IHVzZWQuCi0KLQlSZXR1cm4gVmFsdWU6Ci0JCU5vbmUKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgU3RhUXVpY2tSZXNwb25lRm9yUmF0ZVVwRXhlYyh2b2lkICpTeXN0ZW1TcGVjaWZpYzEsCi0JCQkJICB2b2lkICpGdW5jdGlvbkNvbnRleHQsCi0JCQkJICB2b2lkICpTeXN0ZW1TcGVjaWZpYzIsCi0JCQkJICB2b2lkICpTeXN0ZW1TcGVjaWZpYzMpCi17Ci0Jc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkID0gKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKilGdW5jdGlvbkNvbnRleHQ7Ci0JdTggVXBSYXRlSWR4ID0gMCwgRG93blJhdGVJZHggPSAwLCBDdXJyUmF0ZUlkeCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBUeFRvdGFsQ250OwotCXVuc2lnbmVkIGxvbmcgVHhFcnJvclJhdGlvID0gMDsKLQlCT09MRUFOIGJUeFJhdGVDaGFuZ2VkOwkvKiwgYlVwZ3JhZGVRdWFsaXR5ID0gRkFMU0U7ICovCi0Jc3RydWN0IHJ0X3J0bXBfdHhfcmF0ZV9zd2l0Y2ggKnBDdXJyVHhSYXRlLCAqcE5leHRUeFJhdGUgPSBOVUxMOwotCXU4ICpwVGFibGU7Ci0JdTggVGFibGVTaXplID0gMDsKLQl1OCBJbml0VHhSYXRlSWR4ID0gMCwgVHJhaW5VcCwgVHJhaW5Eb3duOwotCVRYX1NUQV9DTlQxX1NUUlVDIFN0YVR4MTsKLQlUWF9TVEFfQ05UMF9TVFJVQyBUeFN0YUNudDA7Ci0JY2hhciBSc3NpLCByYXRpbzsKLQl1bnNpZ25lZCBsb25nIFR4UmV0cmFuc21pdCA9IDAsIFR4U3VjY2VzcyA9IDAsIFR4RmFpbENvdW50ID0gMDsKLQlzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwRW50cnk7Ci0JdW5zaWduZWQgbG9uZyBpOwotCi0JcEFkLT5TdGFDZmcuU3RhUXVpY2tSZXNwb25lRm9yUmF0ZVVwVGltZXJSdW5uaW5nID0gRkFMU0U7Ci0KLQkvKiAqLwotCS8qIHdhbGsgdGhyb3VnaCBNQUMgdGFibGUsIHNlZSBpZiBuZWVkIHRvIGNoYW5nZSBBUCdzIFRYIHJhdGUgdG93YXJkIGVhY2ggZW50cnkgKi8KLQkvKiAqLwotCWZvciAoaSA9IDE7IGkgPCBNQVhfTEVOX09GX01BQ19UQUJMRTsgaSsrKSB7Ci0JCXBFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W2ldOwotCi0JCS8qIGNoZWNrIGlmIHRoaXMgZW50cnkgbmVlZCB0byBzd2l0Y2ggcmF0ZSBhdXRvbWF0aWNhbGx5ICovCi0JCWlmIChSVE1QQ2hlY2tFbnRyeUVuYWJsZUF1dG9SYXRlU3dpdGNoKHBBZCwgcEVudHJ5KSA9PSBGQUxTRSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChJTkZSQV9PTihwQWQpICYmIChpID09IDEpKQotCQkJUnNzaSA9IFJUTVBNYXhSc3NpKHBBZCwKLQkJCQkJICAgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMCwKLQkJCQkJICAgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMSwKLQkJCQkJICAgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMik7Ci0JCWVsc2UKLQkJCVJzc2kgPSBSVE1QTWF4UnNzaShwQWQsCi0JCQkJCSAgIHBFbnRyeS0+UnNzaVNhbXBsZS5BdmdSc3NpMCwKLQkJCQkJICAgcEVudHJ5LT5Sc3NpU2FtcGxlLkF2Z1Jzc2kxLAotCQkJCQkgICBwRW50cnktPlJzc2lTYW1wbGUuQXZnUnNzaTIpOwotCi0JCUN1cnJSYXRlSWR4ID0gcEFkLT5Db21tb25DZmcuVHhSYXRlSW5kZXg7Ci0KLQkJTWxtZVNlbGVjdFR4UmF0ZVRhYmxlKHBBZCwgcEVudHJ5LCAmcFRhYmxlLCAmVGFibGVTaXplLAotCQkJCSAgICAgICZJbml0VHhSYXRlSWR4KTsKLQotCQkvKiBkZWNpZGUgdGhlIG5leHQgdXBncmFkZSByYXRlIGFuZCBkb3duZ3JhZGUgcmF0ZSwgaWYgYW55ICovCi0JCWlmICgoQ3VyclJhdGVJZHggPiAwKSAmJiAoQ3VyclJhdGVJZHggPCAoVGFibGVTaXplIC0gMSkpKSB7Ci0JCQlVcFJhdGVJZHggPSBDdXJyUmF0ZUlkeCArIDE7Ci0JCQlEb3duUmF0ZUlkeCA9IEN1cnJSYXRlSWR4IC0gMTsKLQkJfSBlbHNlIGlmIChDdXJyUmF0ZUlkeCA9PSAwKSB7Ci0JCQlVcFJhdGVJZHggPSBDdXJyUmF0ZUlkeCArIDE7Ci0JCQlEb3duUmF0ZUlkeCA9IEN1cnJSYXRlSWR4OwotCQl9IGVsc2UgaWYgKEN1cnJSYXRlSWR4ID09IChUYWJsZVNpemUgLSAxKSkgewotCQkJVXBSYXRlSWR4ID0gQ3VyclJhdGVJZHg7Ci0JCQlEb3duUmF0ZUlkeCA9IEN1cnJSYXRlSWR4IC0gMTsKLQkJfQotCi0JCXBDdXJyVHhSYXRlID0KLQkJICAgIChzdHJ1Y3QgcnRfcnRtcF90eF9yYXRlX3N3aXRjaCAqKSAmIHBUYWJsZVsoQ3VyclJhdGVJZHggKyAxKSAqIDVdOwotCi0JCWlmICgoUnNzaSA+IC02NSkgJiYgKHBDdXJyVHhSYXRlLT5Nb2RlID49IE1PREVfSFRNSVgpKSB7Ci0JCQlUcmFpblVwID0KLQkJCSAgICAocEN1cnJUeFJhdGUtPlRyYWluVXAgKwotCQkJICAgICAocEN1cnJUeFJhdGUtPlRyYWluVXAgPj4gMSkpOwotCQkJVHJhaW5Eb3duID0KLQkJCSAgICAocEN1cnJUeFJhdGUtPlRyYWluRG93biArCi0JCQkgICAgIChwQ3VyclR4UmF0ZS0+VHJhaW5Eb3duID4+IDEpKTsKLQkJfSBlbHNlIHsKLQkJCVRyYWluVXAgPSBwQ3VyclR4UmF0ZS0+VHJhaW5VcDsKLQkJCVRyYWluRG93biA9IHBDdXJyVHhSYXRlLT5UcmFpbkRvd247Ci0JCX0KLQotCQlpZiAocEFkLT5NYWNUYWIuU2l6ZSA9PSAxKSB7Ci0JCQkvKiBVcGRhdGUgc3RhdGlzdGljIGNvdW50ZXIgKi8KLQkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfU1RBX0NOVDAsICZUeFN0YUNudDAud29yZCk7Ci0JCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX1NUQV9DTlQxLCAmU3RhVHgxLndvcmQpOwotCi0JCQlUeFJldHJhbnNtaXQgPSBTdGFUeDEuZmllbGQuVHhSZXRyYW5zbWl0OwotCQkJVHhTdWNjZXNzID0gU3RhVHgxLmZpZWxkLlR4U3VjY2VzczsKLQkJCVR4RmFpbENvdW50ID0gVHhTdGFDbnQwLmZpZWxkLlR4RmFpbENvdW50OwotCQkJVHhUb3RhbENudCA9IFR4UmV0cmFuc21pdCArIFR4U3VjY2VzcyArIFR4RmFpbENvdW50OwotCi0JCQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4UmV0cnlPa0NvdW50ICs9Ci0JCQkgICAgU3RhVHgxLmZpZWxkLlR4UmV0cmFuc21pdDsKLQkJCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhOb1JldHJ5T2tDb3VudCArPQotCQkJICAgIFN0YVR4MS5maWVsZC5UeFN1Y2Nlc3M7Ci0JCQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4RmFpbENvdW50ICs9Ci0JCQkgICAgVHhTdGFDbnQwLmZpZWxkLlR4RmFpbENvdW50OwotCQkJcEFkLT5XbGFuQ291bnRlcnMuVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50LnUuTG93UGFydCArPQotCQkJICAgIFN0YVR4MS5maWVsZC5UeFN1Y2Nlc3M7Ci0JCQlwQWQtPldsYW5Db3VudGVycy5SZXRyeUNvdW50LnUuTG93UGFydCArPQotCQkJICAgIFN0YVR4MS5maWVsZC5UeFJldHJhbnNtaXQ7Ci0JCQlwQWQtPldsYW5Db3VudGVycy5GYWlsZWRDb3VudC51Lkxvd1BhcnQgKz0KLQkJCSAgICBUeFN0YUNudDAuZmllbGQuVHhGYWlsQ291bnQ7Ci0KLQkJCWlmIChUeFRvdGFsQ250KQotCQkJCVR4RXJyb3JSYXRpbyA9Ci0JCQkJICAgICgoVHhSZXRyYW5zbWl0ICsKLQkJCQkgICAgICBUeEZhaWxDb3VudCkgKiAxMDApIC8gVHhUb3RhbENudDsKLQkJfSBlbHNlIHsKLQkJCVR4VG90YWxDbnQgPSBwRW50cnktPk9uZVNlY1R4Tm9SZXRyeU9rQ291bnQgKwotCQkJICAgIHBFbnRyeS0+T25lU2VjVHhSZXRyeU9rQ291bnQgKwotCQkJICAgIHBFbnRyeS0+T25lU2VjVHhGYWlsQ291bnQ7Ci0KLQkJCWlmIChUeFRvdGFsQ250KQotCQkJCVR4RXJyb3JSYXRpbyA9Ci0JCQkJICAgICgocEVudHJ5LT5PbmVTZWNUeFJldHJ5T2tDb3VudCArCi0JCQkJICAgICAgcEVudHJ5LT5PbmVTZWNUeEZhaWxDb3VudCkgKiAxMDApIC8KLQkJCQkgICAgVHhUb3RhbENudDsKLQkJfQotCi0JCS8qICovCi0JCS8qIENBU0UgMS4gd2hlbiBUWCBzYW1wbGVzIGFyZSBmZXdlciB0aGFuIDE1LCB0aGVuIGRlY2lkZSBUWCByYXRlIHNvbGVseSBvbiBSU1NJICovCi0JCS8qICAgICAgICAgKGNyaXRlcmlhIGNvcGllZCBmcm9tIFJUMjUwMCBmb3IgTmV0b3BpYSBjYXNlKSAqLwotCQkvKiAqLwotCQlpZiAoVHhUb3RhbENudCA8PSAxMikgewotCQkJTmRpc1plcm9NZW1vcnkocEFkLT5EcnNDb3VudGVycy5UeFF1YWxpdHksCi0JCQkJICAgICAgIHNpemVvZih1MTYpKgotCQkJCSAgICAgICBNQVhfU1RFUF9PRl9UWF9SQVRFX1NXSVRDSCk7Ci0JCQlOZGlzWmVyb01lbW9yeShwQWQtPkRyc0NvdW50ZXJzLlBFUiwKLQkJCQkgICAgICAgc2l6ZW9mKHU4KSoKLQkJCQkgICAgICAgTUFYX1NURVBfT0ZfVFhfUkFURV9TV0lUQ0gpOwotCi0JCQlpZiAoKHBBZC0+RHJzQ291bnRlcnMuTGFzdFNlY1R4UmF0ZUNoYW5nZUFjdGlvbiA9PSAxKQotCQkJICAgICYmIChDdXJyUmF0ZUlkeCAhPSBEb3duUmF0ZUlkeCkpIHsKLQkJCQlwQWQtPkNvbW1vbkNmZy5UeFJhdGVJbmRleCA9IERvd25SYXRlSWR4OwotCQkJCXBBZC0+RHJzQ291bnRlcnMuVHhRdWFsaXR5W0N1cnJSYXRlSWR4XSA9Ci0JCQkJICAgIERSU19UWF9RVUFMSVRZX1dPUlNUX0JPVU5EOwotCQkJfSBlbHNlCi0JCQkgICAgaWYgKChwQWQtPkRyc0NvdW50ZXJzLkxhc3RTZWNUeFJhdGVDaGFuZ2VBY3Rpb24gPT0KLQkJCQkgMikgJiYgKEN1cnJSYXRlSWR4ICE9IFVwUmF0ZUlkeCkpIHsKLQkJCQlwQWQtPkNvbW1vbkNmZy5UeFJhdGVJbmRleCA9IFVwUmF0ZUlkeDsKLQkJCX0KLQotCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAgICAgKCJRdWlja0RSUzogVHhUb3RhbENudCA8PSAxNSwgdHJhaW4gYmFjayB0byBvcmlnaW5hbCByYXRlIFxuIikpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJZG8gewotCQkJdW5zaWduZWQgbG9uZyBPbmVTZWNUeE5vUmV0cnlPS1JhdGlvbkNvdW50OwotCi0JCQlpZiAocEFkLT5EcnNDb3VudGVycy5MYXN0VGltZVR4UmF0ZUNoYW5nZUFjdGlvbiA9PSAwKQotCQkJCXJhdGlvID0gNTsKLQkJCWVsc2UKLQkJCQlyYXRpbyA9IDQ7Ci0KLQkJCS8qIGRvd25ncmFkZSBUWCBxdWFsaXR5IGlmIFBFUiA+PSBSYXRlLURvd24gdGhyZXNob2xkICovCi0JCQlpZiAoVHhFcnJvclJhdGlvID49IFRyYWluRG93bikgewotCQkJCXBBZC0+RHJzQ291bnRlcnMuVHhRdWFsaXR5W0N1cnJSYXRlSWR4XSA9Ci0JCQkJICAgIERSU19UWF9RVUFMSVRZX1dPUlNUX0JPVU5EOwotCQkJfQotCi0JCQlwQWQtPkRyc0NvdW50ZXJzLlBFUltDdXJyUmF0ZUlkeF0gPQotCQkJICAgICh1OClUeEVycm9yUmF0aW87Ci0KLQkJCU9uZVNlY1R4Tm9SZXRyeU9LUmF0aW9uQ291bnQgPSAoVHhTdWNjZXNzICogcmF0aW8pOwotCi0JCQkvKiBwZXJmb3JtIERSUyAtIGNvbnNpZGVyIFR4UmF0ZSBEb3duIGZpcnN0LCB0aGVuIHJhdGUgdXAuICovCi0JCQlpZiAoKHBBZC0+RHJzQ291bnRlcnMuTGFzdFNlY1R4UmF0ZUNoYW5nZUFjdGlvbiA9PSAxKQotCQkJICAgICYmIChDdXJyUmF0ZUlkeCAhPSBEb3duUmF0ZUlkeCkpIHsKLQkJCQlpZiAoKHBBZC0+RHJzQ291bnRlcnMuTGFzdFR4T2tDb3VudCArIDIpID49Ci0JCQkJICAgIE9uZVNlY1R4Tm9SZXRyeU9LUmF0aW9uQ291bnQpIHsKLQkJCQkJcEFkLT5Db21tb25DZmcuVHhSYXRlSW5kZXggPQotCQkJCQkgICAgRG93blJhdGVJZHg7Ci0JCQkJCXBBZC0+RHJzQ291bnRlcnMuCi0JCQkJCSAgICBUeFF1YWxpdHlbQ3VyclJhdGVJZHhdID0KLQkJCQkJICAgIERSU19UWF9RVUFMSVRZX1dPUlNUX0JPVU5EOwotCi0JCQkJfQotCi0JCQl9IGVsc2UKLQkJCSAgICBpZiAoKHBBZC0+RHJzQ291bnRlcnMuTGFzdFNlY1R4UmF0ZUNoYW5nZUFjdGlvbiA9PQotCQkJCSAyKSAmJiAoQ3VyclJhdGVJZHggIT0gVXBSYXRlSWR4KSkgewotCQkJCWlmICgoVHhFcnJvclJhdGlvID49IDUwKQotCQkJCSAgICB8fCAoVHhFcnJvclJhdGlvID49IFRyYWluRG93bikpIHsKLQotCQkJCX0gZWxzZSBpZiAoKHBBZC0+RHJzQ291bnRlcnMuTGFzdFR4T2tDb3VudCArIDIpCi0JCQkJCSAgID49IE9uZVNlY1R4Tm9SZXRyeU9LUmF0aW9uQ291bnQpIHsKLQkJCQkJcEFkLT5Db21tb25DZmcuVHhSYXRlSW5kZXggPSBVcFJhdGVJZHg7Ci0JCQkJfQotCQkJfQotCQl9IHdoaWxlIChGQUxTRSk7Ci0KLQkJLyogaWYgcmF0ZS11cCBoYXBwZW4sIGNsZWFyIGFsbCBiYWQgaGlzdG9yeSBvZiBhbGwgVFggcmF0ZXMgKi8KLQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZUluZGV4ID4gQ3VyclJhdGVJZHgpIHsKLQkJCXBBZC0+RHJzQ291bnRlcnMuVHhSYXRlVXBQZW5hbHR5ID0gMDsKLQkJCU5kaXNaZXJvTWVtb3J5KHBBZC0+RHJzQ291bnRlcnMuVHhRdWFsaXR5LAotCQkJCSAgICAgICBzaXplb2YodTE2KSoKLQkJCQkgICAgICAgTUFYX1NURVBfT0ZfVFhfUkFURV9TV0lUQ0gpOwotCQkJTmRpc1plcm9NZW1vcnkocEFkLT5EcnNDb3VudGVycy5QRVIsCi0JCQkJICAgICAgIHNpemVvZih1OCkqCi0JCQkJICAgICAgIE1BWF9TVEVQX09GX1RYX1JBVEVfU1dJVENIKTsKLQkJCWJUeFJhdGVDaGFuZ2VkID0gVFJVRTsKLQkJfQotCQkvKiBpZiByYXRlLWRvd24gaGFwcGVuLCBvbmx5IGNsZWFyIERvd25SYXRlJ3MgYmFkIGhpc3RvcnkgKi8KLQkJZWxzZSBpZiAocEFkLT5Db21tb25DZmcuVHhSYXRlSW5kZXggPCBDdXJyUmF0ZUlkeCkgewotCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAgICAgKCJRdWlja0RSUzogLS1UWCByYXRlIGZyb20gJWQgdG8gJWQgXG4iLAotCQkJCSAgICAgIEN1cnJSYXRlSWR4LCBwQWQtPkNvbW1vbkNmZy5UeFJhdGVJbmRleCkpOwotCi0JCQlwQWQtPkRyc0NvdW50ZXJzLlR4UmF0ZVVwUGVuYWx0eSA9IDA7CS8qIG5vIHBlbmFsdHkgKi8KLQkJCXBBZC0+RHJzQ291bnRlcnMuVHhRdWFsaXR5W3BBZC0+Q29tbW9uQ2ZnLlR4UmF0ZUluZGV4XSA9Ci0JCQkgICAgMDsKLQkJCXBBZC0+RHJzQ291bnRlcnMuUEVSW3BBZC0+Q29tbW9uQ2ZnLlR4UmF0ZUluZGV4XSA9IDA7Ci0JCQliVHhSYXRlQ2hhbmdlZCA9IFRSVUU7Ci0JCX0gZWxzZSB7Ci0JCQliVHhSYXRlQ2hhbmdlZCA9IEZBTFNFOwotCQl9Ci0KLQkJcE5leHRUeFJhdGUgPQotCQkgICAgKHN0cnVjdCBydF9ydG1wX3R4X3JhdGVfc3dpdGNoICopICYKLQkJICAgIHBUYWJsZVsocEFkLT5Db21tb25DZmcuVHhSYXRlSW5kZXggKyAxKSAqIDVdOwotCQlpZiAoYlR4UmF0ZUNoYW5nZWQgJiYgcE5leHRUeFJhdGUpIHsKLQkJCU1sbWVTZXRUeFJhdGUocEFkLCBwRW50cnksIHBOZXh0VHhSYXRlKTsKLQkJfQotCX0KLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlUaGlzIHJvdXRpbmUgaXMgZXhlY3V0ZWQgcGVyaW9kaWNhbGx5IGluc2lkZSBNbG1lUGVyaW9kaWNFeGVjKCkgYWZ0ZXIKLQkJYXNzb2NpYXRpb24gd2l0aCBhbiBBUC4KLQkJSXQgY2hlY2tzIGlmIFN0YUNmZy5Qc20gaXMgY29uc2lzdGVudCB3aXRoIHVzZXIgcG9saWN5IChyZWNvcmRlZCBpbgotCQlTdGFDZmcuV2luZG93c1Bvd2VyTW9kZSkuIElmIG5vdCwgZW5mb3JjZSB1c2VyIHBvbGljeS4gSG93ZXZlciwKLQkJdGhlcmUncmUgc29tZSBjb25kaXRpb25zIHRvIGNvbnNpZGVyOgotCQkxLiB3ZSBkb24ndCBzdXBwb3J0IHBvd2VyLXNhdmluZyBpbiBBREhPQyBtb2RlLCBzbyBQc209UFdSX0FDVElWRSBhbGwKLQkJICAgdGhlIHRpbWUgd2hlbiBNaWJzcz09VFJVRQotCQkyLiBXaGVuIGxpbmsgdXAgaW4gSU5GUkEgbW9kZSwgUHNtIHNob3VsZCBub3QgYmUgc3dpdGNoIHRvIFBXUl9TQVZFCi0JCSAgIGlmIG91dGdvaW5nIHRyYWZmaWMgYXZhaWxhYmxlIGluIFR4UmluZyBvciBNZ210UmluZy4KLQlPdXRwdXQ6Ci0JCTEuIGNoYW5nZSBwQWQtPlN0YUNmZy5Qc20gdG8gUFdSX1NBVkUgb3IgbGVhdmUgaXQgdW50b3VjaGVkCi0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgTWxtZUNoZWNrUHNtQ2hhbmdlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdW5zaWduZWQgbG9uZyBOb3czMikKLXsKLQl1bnNpZ25lZCBsb25nIFBvd2VyTW9kZTsKLQotCS8qIGNvbmRpdGlvbiAtICovCi0JLyogMS4gUHNtIG1heWJlIE9OIG9ubHkgaGFwcGVuIGluIElORlJBU1RSVUNUVVJFIG1vZGUgKi8KLQkvKiAyLiB1c2VyIHdhbnRzIGVpdGhlciBNQVhfUFNQIG9yIEZBU1RfUFNQICovCi0JLyogMy4gYnV0IGN1cnJlbnQgcHNtIGlzIG5vdCBpbiBQV1JfU0FWRSAqLwotCS8qIDQuIENOVEwgc3RhdGUgbWFjaGluZSBpcyBub3QgZG9pbmcgU0NBTm5pbmcgKi8KLQkvKiA1LiBubyBUWCBTVUNDRVNTIGV2ZW50IGZvciB0aGUgcGFzdCAxLXNlYyBwZXJpb2QgKi8KLQlQb3dlck1vZGUgPSBwQWQtPlN0YUNmZy5XaW5kb3dzUG93ZXJNb2RlOwotCi0JaWYgKElORlJBX09OKHBBZCkgJiYKLQkgICAgKFBvd2VyTW9kZSAhPSBOZGlzODAyXzExUG93ZXJNb2RlQ0FNKSAmJgotCSAgICAocEFkLT5TdGFDZmcuUHNtID09IFBXUl9BQ1RJVkUpICYmCi0vKiAgICAgICAgICAgICAgKCEgUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKSkgKi8KLQkgICAgKHBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPT0gQ05UTF9JRExFKSAmJgotCSAgICBSVE1QX1RFU1RfUFNGTEFHKHBBZCwgZlJUTVBfUFNfQ0FOX0dPX1NMRUVQKQotCSAgICAvKiYmCi0JICAgICAgIChwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4Tm9SZXRyeU9rQ291bnQgPT0gMCkgJiYKLQkgICAgICAgKHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhSZXRyeU9rQ291bnQgPT0gMCkgKi8KLQkgICAgKSB7Ci0JCU5kaXNHZXRTeXN0ZW1VcFRpbWUoJnBBZC0+TWxtZS5MYXN0U2VuZE5VTExwc21UaW1lKTsKLQkJcEFkLT5SYWxpbmtDb3VudGVycy5SeENvdW50U2luY2VMYXN0TlVMTCA9IDA7Ci0JCVJUTVBfU0VUX1BTTV9CSVQocEFkLCBQV1JfU0FWRSk7Ci0JCWlmICghCi0JCSAgICAocEFkLT5Db21tb25DZmcuYkFQU0RDYXBhYmxlCi0JCSAgICAgJiYgcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5iQVBTRENhcGFibGUpKSB7Ci0JCQlSVE1QU2VuZE51bGxGcmFtZShwQWQsIHBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZSwgRkFMU0UpOwotCQl9IGVsc2UgewotCQkJUlRNUFNlbmROdWxsRnJhbWUocEFkLCBwQWQtPkNvbW1vbkNmZy5UeFJhdGUsIFRSVUUpOwotCQl9Ci0JfQotfQotCi0vKiBJUlFMID0gUEFTU0lWRV9MRVZFTCAqLwotLyogSVJRTCA9IERJU1BBVENIX0xFVkVMICovCi12b2lkIE1sbWVTZXRQc21CaXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1MTYgcHNtKQotewotCUFVVE9fUlNQX0NGR19TVFJVQyBjc3I0OwotCi0JcEFkLT5TdGFDZmcuUHNtID0gcHNtOwotCVJUTVBfSU9fUkVBRDMyKHBBZCwgQVVUT19SU1BfQ0ZHLCAmY3NyNC53b3JkKTsKLQljc3I0LmZpZWxkLkFja0N0c1BzbUJpdCA9IChwc20gPT0gUFdSX1NBVkUpID8gMSA6IDA7Ci0JUlRNUF9JT19XUklURTMyKHBBZCwgQVVUT19SU1BfQ0ZHLCBjc3I0LndvcmQpOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTWxtZVNldFBzbUJpdCA9ICVkXG4iLCBwc20pKTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlUaGlzIHJvdXRpbmUgY2FsY3VsYXRlcyBUeFBFUiwgUnhQRVIgb2YgdGhlIHBhc3QgTi1zZWMgcGVyaW9kLiBBbmQKLQkJYWNjb3JkaW5nIHRvIHRoZSBjYWxjdWxhdGlvbiByZXN1bHQsIENoYW5uZWxRdWFsaXR5IGlzIGNhbGN1bGF0ZWQgaGVyZQotCQl0byBkZWNpZGUgaWYgY3VycmVudCBBUCBpcyBzdGlsbCBkb2luZyB0aGUgam9iLgotCi0JCUlmIENoYW5uZWxRdWFsaXR5IGlzIG5vdCBnb29kLCBhIFJPQU1pbmcgYXR0ZW1wdCBtYXkgYmUgdHJpZWQgbGF0ZXIuCi0JT3V0cHV0OgotCQlTdGFDZmcuQ2hhbm5lbFF1YWxpdHkgLSAwLi4xMDAKLQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0JTk9URTogVGhpcyByb3V0aW5lIGRlY2lkZSBjaGFubmxlIHF1YWxpdHkgYmFzZWQgb24gUlggQ1JDIGVycm9yIHJhdGlvLgotCQlDYWxsZXIgc2hvdWxkIG1ha2Ugc3VyZSBhIGZ1bmN0aW9uIGNhbGwgdG8gTklDVXBkYXRlUmF3Q291bnRlcnMocEFkKQotCQlpcyBwZXJmb3JtZWQgcmlnaHQgYmVmb3JlIHRoaXMgcm91dGluZSwgc28gdGhhdCB0aGlzIHJvdXRpbmUgY2FuIGRlY2lkZQotCQljaGFubmVsIHF1YWxpdHkgYmFzZWQgb24gdGhlIG1vc3QgdXAtdG8tZGF0ZSBpbmZvcm1hdGlvbgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgTWxtZUNhbGN1bGF0ZUNoYW5uZWxRdWFsaXR5KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkgc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcE1hY0VudHJ5LCB1bnNpZ25lZCBsb25nIE5vdzMyKQotewotCXVuc2lnbmVkIGxvbmcgVHhPa0NudCwgVHhDbnQsIFR4UEVSLCBUeFBSUjsKLQl1bnNpZ25lZCBsb25nIFJ4Q250LCBSeFBFUjsKLQl1OCBOb3JSc3NpOwotCWNoYXIgTWF4UnNzaTsKLQlzdHJ1Y3QgcnRfcnNzaV9zYW1wbGUgKnBSc3NpU2FtcGxlID0gTlVMTDsKLQl1MzIgT25lU2VjVHhOb1JldHJ5T2tDb3VudCA9IDA7Ci0JdTMyIE9uZVNlY1R4UmV0cnlPa0NvdW50ID0gMDsKLQl1MzIgT25lU2VjVHhGYWlsQ291bnQgPSAwOwotCXUzMiBPbmVTZWNSeE9rQ250ID0gMDsKLQl1MzIgT25lU2VjUnhGY3NFcnJDbnQgPSAwOwotCXVuc2lnbmVkIGxvbmcgQ2hhbm5lbFF1YWxpdHkgPSAwOwkvKiAwLi4xMDAsIENoYW5uZWwgUXVhbGl0eSBJbmRpY2F0aW9uIGZvciBSb2FtaW5nICovCi0JdW5zaWduZWQgbG9uZyBCZWFjb25Mb3N0VGltZSA9IHBBZC0+U3RhQ2ZnLkJlYWNvbkxvc3RUaW1lOwotCi0JaWYgKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpIHsKLQkJcFJzc2lTYW1wbGUgPSAmcEFkLT5TdGFDZmcuUnNzaVNhbXBsZTsKLQkJT25lU2VjVHhOb1JldHJ5T2tDb3VudCA9Ci0JCSAgICBwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4Tm9SZXRyeU9rQ291bnQ7Ci0JCU9uZVNlY1R4UmV0cnlPa0NvdW50ID0gcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeFJldHJ5T2tDb3VudDsKLQkJT25lU2VjVHhGYWlsQ291bnQgPSBwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4RmFpbENvdW50OwotCQlPbmVTZWNSeE9rQ250ID0gcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNSeE9rQ250OwotCQlPbmVTZWNSeEZjc0VyckNudCA9IHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjUnhGY3NFcnJDbnQ7Ci0JfQotCi0JTWF4UnNzaSA9IFJUTVBNYXhSc3NpKHBBZCwgcFJzc2lTYW1wbGUtPkxhc3RSc3NpMCwKLQkJCSAgICAgIHBSc3NpU2FtcGxlLT5MYXN0UnNzaTEsIHBSc3NpU2FtcGxlLT5MYXN0UnNzaTIpOwotCi0JLyogKi8KLQkvKiBjYWxjdWxhdGUgVFggcGFja2V0IGVycm9yIHJhdGlvIGFuZCBUWCByZXRyeSByYXRpbyAtIGlmIHRvbyBmZXcgVFggc2FtcGxlcywgc2tpcCBUWCByZWxhdGVkIHN0YXRpc3RpY3MgKi8KLQkvKiAqLwotCVR4T2tDbnQgPSBPbmVTZWNUeE5vUmV0cnlPa0NvdW50ICsgT25lU2VjVHhSZXRyeU9rQ291bnQ7Ci0JVHhDbnQgPSBUeE9rQ250ICsgT25lU2VjVHhGYWlsQ291bnQ7Ci0JaWYgKFR4Q250IDwgNSkgewotCQlUeFBFUiA9IDA7Ci0JCVR4UFJSID0gMDsKLQl9IGVsc2UgewotCQlUeFBFUiA9IChPbmVTZWNUeEZhaWxDb3VudCAqIDEwMCkgLyBUeENudDsKLQkJVHhQUlIgPSAoKFR4Q250IC0gT25lU2VjVHhOb1JldHJ5T2tDb3VudCkgKiAxMDApIC8gVHhDbnQ7Ci0JfQotCi0JLyogKi8KLQkvKiBjYWxjdWxhdGUgUlggUEVSIC0gZG9uJ3QgdGFrZSBSeFBFUiBpbnRvIGNvbnNpZGVyYXRpb24gaWYgdG9vIGZldyBzYW1wbGUgKi8KLQkvKiAqLwotCVJ4Q250ID0gT25lU2VjUnhPa0NudCArIE9uZVNlY1J4RmNzRXJyQ250OwotCWlmIChSeENudCA8IDUpCi0JCVJ4UEVSID0gMDsKLQllbHNlCi0JCVJ4UEVSID0gKE9uZVNlY1J4RmNzRXJyQ250ICogMTAwKSAvIFJ4Q250OwotCi0JLyogKi8KLQkvKiBkZWNpZGUgQ2hhbm5lbFF1YWxpdHkgYmFzZWQgb246IDEpbGFzdCBCRUFDT04gcmVjZWl2ZWQgdGltZSwgMilsYXN0IFJTU0ksIDMpVHhQRVIsIGFuZCA0KVJ4UEVSICovCi0JLyogKi8KLQlpZiAoKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpICYmIElORlJBX09OKHBBZCkgJiYgKE9uZVNlY1R4Tm9SZXRyeU9rQ291bnQgPCAyKSAmJgkvKiBubyBoZWF2eSB0cmFmZmljICovCi0JICAgICgocEFkLT5TdGFDZmcuTGFzdEJlYWNvblJ4VGltZSArIEJlYWNvbkxvc3RUaW1lKSA8IE5vdzMyKSkgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIkJFQUNPTiBsb3N0ID4gJWxkIG1zZWMgd2l0aCBUeE9rQ250PSVsZCAtPiBDUUk9MFxuIiwKLQkJCSAgQmVhY29uTG9zdFRpbWUsIFR4T2tDbnQpKTsKLQkJQ2hhbm5lbFF1YWxpdHkgPSAwOwotCX0gZWxzZSB7Ci0JCS8qIE5vcm1hbGl6ZSBSc3NpICovCi0JCWlmIChNYXhSc3NpID4gLTQwKQotCQkJTm9yUnNzaSA9IDEwMDsKLQkJZWxzZSBpZiAoTWF4UnNzaSA8IC05MCkKLQkJCU5vclJzc2kgPSAwOwotCQllbHNlCi0JCQlOb3JSc3NpID0gKE1heFJzc2kgKyA5MCkgKiAyOwotCi0JCS8qIENoYW5uZWxRdWFsaXR5ID0gVzEqUlNTSSArIFcyKlR4UFJSICsgVzMqUnhQRVIgICAgICAgIChSU1NJIDAuLjEwMCksIChUeFBFUiAxMDAuLjApLCAoUnhQRVIgMTAwLi4wKSAqLwotCQlDaGFubmVsUXVhbGl0eSA9IChSU1NJX1dFSUdIVElORyAqIE5vclJzc2kgKwotCQkJCSAgVFhfV0VJR0hUSU5HICogKDEwMCAtIFR4UFJSKSArCi0JCQkJICBSWF9XRUlHSFRJTkcgKiAoMTAwIC0gUnhQRVIpKSAvIDEwMDsKLQl9Ci0KLQlpZiAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkKLQkJcEFkLT5NbG1lLkNoYW5uZWxRdWFsaXR5ID0KLQkJICAgIChDaGFubmVsUXVhbGl0eSA+IDEwMCkgPyAxMDAgOiBDaGFubmVsUXVhbGl0eTsKLQotfQotCi0vKiBJUlFMID0gRElTUEFUQ0hfTEVWRUwgKi8KLXZvaWQgTWxtZVNldFR4UHJlYW1ibGUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1MTYgVHhQcmVhbWJsZSkKLXsKLQlBVVRPX1JTUF9DRkdfU1RSVUMgY3NyNDsKLQotCS8qICovCi0JLyogQWx3YXlzIHVzZSBMb25nIHByZWFtYmxlIGJlZm9yZSB2ZXJpZmlhdGlvbiBzaG9ydCBwcmVhbWJsZSBmdW5jdGlvbmFsaXR5IHdvcmtzIHdlbGwuICovCi0JLyogVG9kbzogcmVtb3ZlIHRoZSBmb2xsb3dpbmcgbGluZSBpZiBzaG9ydCBwcmVhbWJsZSBmdW5jdGlvbmFsaXR5IHdvcmtzICovCi0JLyogKi8KLQkvKlR4UHJlYW1ibGUgPSBSdDgwMl8xMVByZWFtYmxlTG9uZzsgKi8KLQotCVJUTVBfSU9fUkVBRDMyKHBBZCwgQVVUT19SU1BfQ0ZHLCAmY3NyNC53b3JkKTsKLQlpZiAoVHhQcmVhbWJsZSA9PSBSdDgwMl8xMVByZWFtYmxlTG9uZykgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIk1sbWVTZXRUeFByZWFtYmxlICg9IGxvbmcgUFJFQU1CTEUpXG4iKSk7Ci0JCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1NIT1JUX1BSRUFNQkxFX0lOVVNFRCk7Ci0JCWNzcjQuZmllbGQuQXV0b1Jlc3BvbmRlclByZWFtYmxlID0gMDsKLQl9IGVsc2UgewotCQkvKiBOT1RFOiAxTWJwcyBzaG91bGQgYWx3YXlzIHVzZSBsb25nIHByZWFtYmxlICovCi0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiTWxtZVNldFR4UHJlYW1ibGUgKD0gc2hvcnQgUFJFQU1CTEUpXG4iKSk7Ci0JCU9QU1RBVFVTX1NFVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19TSE9SVF9QUkVBTUJMRV9JTlVTRUQpOwotCQljc3I0LmZpZWxkLkF1dG9SZXNwb25kZXJQcmVhbWJsZSA9IDE7Ci0JfQotCi0JUlRNUF9JT19XUklURTMyKHBBZCwgQVVUT19SU1BfQ0ZHLCBjc3I0LndvcmQpOwotfQotCi0vKgotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgRGVzY3JpcHRpb246Ci0gICAgICAgIFVwZGF0ZSBiYXNpYyByYXRlIGJpdG1hcAotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotdm9pZCBVcGRhdGVCYXNpY1JhdGVCaXRtYXAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkYXB0ZXIpCi17Ci0JaW50IGksIGo7Ci0JLyogMSAgMiAgNS41LCAxMSwgIDYsICA5LCAxMiwgMTgsIDI0LCAzNiwgNDgsICA1NCAqLwotCXU4IHJhdGVbXSA9IHsgMiwgNCwgMTEsIDIyLCAxMiwgMTgsIDI0LCAzNiwgNDgsIDcyLCA5NiwgMTA4IH07Ci0JdTggKnN1cF9wID0gcEFkYXB0ZXItPkNvbW1vbkNmZy5TdXBSYXRlOwotCXU4ICpleHRfcCA9IHBBZGFwdGVyLT5Db21tb25DZmcuRXh0UmF0ZTsKLQl1bnNpZ25lZCBsb25nIGJpdG1hcCA9IHBBZGFwdGVyLT5Db21tb25DZmcuQmFzaWNSYXRlQml0bWFwOwotCi0JLyogaWYgQSBtb2RlLCBhbHdheXMgdXNlIGZpeCBCYXNpY1JhdGVCaXRNYXAgKi8KLQkvKmlmIChwQWRhcHRlci0+Q29tbW9uQ2ZnLkNoYW5uZWwgPT0gUEhZXzExQSkgKi8KLQlpZiAocEFkYXB0ZXItPkNvbW1vbkNmZy5DaGFubmVsID4gMTQpCi0JCXBBZGFwdGVyLT5Db21tb25DZmcuQmFzaWNSYXRlQml0bWFwID0gMHgxNTA7CS8qIDYsIDEyLCAyNE0gKi8KLQkvKiBFbmQgb2YgaWYgKi8KLQotCWlmIChwQWRhcHRlci0+Q29tbW9uQ2ZnLkJhc2ljUmF0ZUJpdG1hcCA+IDQwOTUpIHsKLQkJLyogKDIgXiBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUykgLTEgKi8KLQkJcmV0dXJuOwotCX0KLQkvKiBFbmQgb2YgaWYgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVM7IGkrKykgewotCQlzdXBfcFtpXSAmPSAweDdmOwotCQlleHRfcFtpXSAmPSAweDdmOwotCX0JCQkvKiBFbmQgb2YgZm9yICovCi0KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVM7IGkrKykgewotCQlpZiAoYml0bWFwICYgKDEgPDwgaSkpIHsKLQkJCWZvciAoaiA9IDA7IGogPCBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUzsgaisrKSB7Ci0JCQkJaWYgKHN1cF9wW2pdID09IHJhdGVbaV0pCi0JCQkJCXN1cF9wW2pdIHw9IDB4ODA7Ci0JCQkJLyogRW5kIG9mIGlmICovCi0JCQl9CS8qIEVuZCBvZiBmb3IgKi8KLQotCQkJZm9yIChqID0gMDsgaiA8IE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTOyBqKyspIHsKLQkJCQlpZiAoZXh0X3Bbal0gPT0gcmF0ZVtpXSkKLQkJCQkJZXh0X3Bbal0gfD0gMHg4MDsKLQkJCQkvKiBFbmQgb2YgaWYgKi8KLQkJCX0JLyogRW5kIG9mIGZvciAqLwotCQl9CQkvKiBFbmQgb2YgaWYgKi8KLQl9CQkJLyogRW5kIG9mIGZvciAqLwotfQkJCQkvKiBFbmQgb2YgVXBkYXRlQmFzaWNSYXRlQml0bWFwICovCi0KLS8qIElSUUwgPSBQQVNTSVZFX0xFVkVMICovCi0vKiBJUlFMID0gRElTUEFUQ0hfTEVWRUwgKi8KLS8qIGJMaW5rVXAgaXMgdG8gaWRlbnRpZnkgdGhlIGluaXRpYWwgbGluayBzcGVlZC4gKi8KLS8qIFRSVUUgaW5kaWNhdGVzIHRoZSByYXRlIHVwZGF0ZSBhdCBsaW5rdXAsIHdlIHNob3VsZCBub3QgdHJ5IHRvIHNldCB0aGUgcmF0ZSBhdCA1NE1icHMuICovCi12b2lkIE1sbWVVcGRhdGVUeFJhdGVzKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgSU4gQk9PTEVBTiBiTGlua1VwLCB1OCBhcGlkeCkKLXsKLQlpbnQgaSwgbnVtOwotCXU4IFJhdGUgPSBSQVRFXzYsIE1heERlc2lyZSA9IFJBVEVfMSwgTWF4U3VwcG9ydCA9IFJBVEVfMTsKLQl1OCBNaW5TdXBwb3J0ID0gUkFURV81NDsKLQl1bnNpZ25lZCBsb25nIEJhc2ljUmF0ZUJpdG1hcCA9IDA7Ci0JdTggQ3VyckJhc2ljUmF0ZSA9IFJBVEVfMTsKLQl1OCAqcFN1cFJhdGUsIFN1cFJhdGVMZW4sICpwRXh0UmF0ZSwgRXh0UmF0ZUxlbjsKLQlQSFRUUkFOU01JVF9TRVRUSU5HIHBIdFBoeSA9IE5VTEw7Ci0JUEhUVFJBTlNNSVRfU0VUVElORyBwTWF4SHRQaHkgPSBOVUxMOwotCVBIVFRSQU5TTUlUX1NFVFRJTkcgcE1pbkh0UGh5ID0gTlVMTDsKLQlCT09MRUFOICphdXRvX3JhdGVfY3VyX3A7Ci0JdTggSHRNY3MgPSBNQ1NfQVVUTzsKLQotCS8qIGZpbmQgbWF4IGRlc2lyZWQgcmF0ZSAqLwotCVVwZGF0ZUJhc2ljUmF0ZUJpdG1hcChwQWQpOwotCi0JbnVtID0gMDsKLQlhdXRvX3JhdGVfY3VyX3AgPSBOVUxMOwotCWZvciAoaSA9IDA7IGkgPCBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUzsgaSsrKSB7Ci0JCXN3aXRjaCAocEFkLT5Db21tb25DZmcuRGVzaXJlUmF0ZVtpXSAmIDB4N2YpIHsKLQkJY2FzZSAyOgotCQkJUmF0ZSA9IFJBVEVfMTsKLQkJCW51bSsrOwotCQkJYnJlYWs7Ci0JCWNhc2UgNDoKLQkJCVJhdGUgPSBSQVRFXzI7Ci0JCQludW0rKzsKLQkJCWJyZWFrOwotCQljYXNlIDExOgotCQkJUmF0ZSA9IFJBVEVfNV81OwotCQkJbnVtKys7Ci0JCQlicmVhazsKLQkJY2FzZSAyMjoKLQkJCVJhdGUgPSBSQVRFXzExOwotCQkJbnVtKys7Ci0JCQlicmVhazsKLQkJY2FzZSAxMjoKLQkJCVJhdGUgPSBSQVRFXzY7Ci0JCQludW0rKzsKLQkJCWJyZWFrOwotCQljYXNlIDE4OgotCQkJUmF0ZSA9IFJBVEVfOTsKLQkJCW51bSsrOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjQ6Ci0JCQlSYXRlID0gUkFURV8xMjsKLQkJCW51bSsrOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzY6Ci0JCQlSYXRlID0gUkFURV8xODsKLQkJCW51bSsrOwotCQkJYnJlYWs7Ci0JCWNhc2UgNDg6Ci0JCQlSYXRlID0gUkFURV8yNDsKLQkJCW51bSsrOwotCQkJYnJlYWs7Ci0JCWNhc2UgNzI6Ci0JCQlSYXRlID0gUkFURV8zNjsKLQkJCW51bSsrOwotCQkJYnJlYWs7Ci0JCWNhc2UgOTY6Ci0JCQlSYXRlID0gUkFURV80ODsKLQkJCW51bSsrOwotCQkJYnJlYWs7Ci0JCWNhc2UgMTA4OgotCQkJUmF0ZSA9IFJBVEVfNTQ7Ci0JCQludW0rKzsKLQkJCWJyZWFrOwotCQkJLypkZWZhdWx0OiBSYXRlID0gUkFURV8xOyAgIGJyZWFrOyAqLwotCQl9Ci0JCWlmIChNYXhEZXNpcmUgPCBSYXRlKQotCQkJTWF4RGVzaXJlID0gUmF0ZTsKLQl9Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCXsKLQkJcEh0UGh5ID0gJnBBZC0+U3RhQ2ZnLkhUUGh5TW9kZTsKLQkJcE1heEh0UGh5ID0gJnBBZC0+U3RhQ2ZnLk1heEhUUGh5TW9kZTsKLQkJcE1pbkh0UGh5ID0gJnBBZC0+U3RhQ2ZnLk1pbkhUUGh5TW9kZTsKLQotCQlhdXRvX3JhdGVfY3VyX3AgPSAmcEFkLT5TdGFDZmcuYkF1dG9UeFJhdGVTd2l0Y2g7Ci0JCUh0TWNzID0gcEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1M7Ci0KLQkJaWYgKChwQWQtPlN0YUNmZy5Cc3NUeXBlID09IEJTU19BREhPQykgJiYKLQkJICAgIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUIpICYmCi0JCSAgICAoTWF4RGVzaXJlID4gUkFURV8xMSkpIHsKLQkJCU1heERlc2lyZSA9IFJBVEVfMTE7Ci0JCX0KLQl9Ci0KLQlwQWQtPkNvbW1vbkNmZy5NYXhEZXNpcmVkUmF0ZSA9IE1heERlc2lyZTsKLQlwTWluSHRQaHktPndvcmQgPSAwOwotCXBNYXhIdFBoeS0+d29yZCA9IDA7Ci0JcEh0UGh5LT53b3JkID0gMDsKLQotCS8qIEF1dG8gcmF0ZSBzd2l0Y2hpbmcgaXMgZW5hYmxlZCBvbmx5IGlmIG1vcmUgdGhhbiBvbmUgREVTSVJFRCBSQVRFUyBhcmUgKi8KLQkvKiBzcGVjaWZpZWQ7IG90aGVyd2lzZSBkaXNhYmxlZCAqLwotCWlmIChudW0gPD0gMSkgewotCQkvKk9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1RYX1JBVEVfU1dJVENIX0VOQUJMRUQpOyAqLwotCQkvKnBBZC0+Q29tbW9uQ2ZnLmJBdXRvVHhSYXRlU3dpdGNoICAgICAgPSBGQUxTRTsgKi8KLQkJKmF1dG9fcmF0ZV9jdXJfcCA9IEZBTFNFOwotCX0gZWxzZSB7Ci0JCS8qT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1RYX1JBVEVfU1dJVENIX0VOQUJMRUQpOyAqLwotCQkvKnBBZC0+Q29tbW9uQ2ZnLmJBdXRvVHhSYXRlU3dpdGNoICAgICAgPSBUUlVFOyAqLwotCQkqYXV0b19yYXRlX2N1cl9wID0gVFJVRTsKLQl9Ci0KLQlpZiAoSHRNY3MgIT0gTUNTX0FVVE8pIHsKLQkJLypPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19UWF9SQVRFX1NXSVRDSF9FTkFCTEVEKTsgKi8KLQkJLypwQWQtPkNvbW1vbkNmZy5iQXV0b1R4UmF0ZVN3aXRjaCAgICAgID0gRkFMU0U7ICovCi0JCSphdXRvX3JhdGVfY3VyX3AgPSBGQUxTRTsKLQl9IGVsc2UgewotCQkvKk9QU1RBVFVTX1NFVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19UWF9SQVRFX1NXSVRDSF9FTkFCTEVEKTsgKi8KLQkJLypwQWQtPkNvbW1vbkNmZy5iQXV0b1R4UmF0ZVN3aXRjaCAgICAgID0gVFJVRTsgKi8KLQkJKmF1dG9fcmF0ZV9jdXJfcCA9IFRSVUU7Ci0JfQotCi0JaWYgKChBREhPQ19PTihwQWQpIHx8IElORlJBX09OKHBBZCkpICYmIChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKSkgewotCQlwU3VwUmF0ZSA9ICZwQWQtPlN0YUFjdGl2ZS5TdXBSYXRlWzBdOwotCQlwRXh0UmF0ZSA9ICZwQWQtPlN0YUFjdGl2ZS5FeHRSYXRlWzBdOwotCQlTdXBSYXRlTGVuID0gcEFkLT5TdGFBY3RpdmUuU3VwUmF0ZUxlbjsKLQkJRXh0UmF0ZUxlbiA9IHBBZC0+U3RhQWN0aXZlLkV4dFJhdGVMZW47Ci0JfSBlbHNlIHsKLQkJcFN1cFJhdGUgPSAmcEFkLT5Db21tb25DZmcuU3VwUmF0ZVswXTsKLQkJcEV4dFJhdGUgPSAmcEFkLT5Db21tb25DZmcuRXh0UmF0ZVswXTsKLQkJU3VwUmF0ZUxlbiA9IHBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVMZW47Ci0JCUV4dFJhdGVMZW4gPSBwQWQtPkNvbW1vbkNmZy5FeHRSYXRlTGVuOwotCX0KLQotCS8qIGZpbmQgbWF4IHN1cHBvcnRlZCByYXRlICovCi0JZm9yIChpID0gMDsgaSA8IFN1cFJhdGVMZW47IGkrKykgewotCQlzd2l0Y2ggKHBTdXBSYXRlW2ldICYgMHg3ZikgewotCQljYXNlIDI6Ci0JCQlSYXRlID0gUkFURV8xOwotCQkJaWYgKHBTdXBSYXRlW2ldICYgMHg4MCkKLQkJCQlCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMDAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgNDoKLQkJCVJhdGUgPSBSQVRFXzI7Ci0JCQlpZiAocFN1cFJhdGVbaV0gJiAweDgwKQotCQkJCUJhc2ljUmF0ZUJpdG1hcCB8PSAweDAwMDI7Ci0JCQlicmVhazsKLQkJY2FzZSAxMToKLQkJCVJhdGUgPSBSQVRFXzVfNTsKLQkJCWlmIChwU3VwUmF0ZVtpXSAmIDB4ODApCi0JCQkJQmFzaWNSYXRlQml0bWFwIHw9IDB4MDAwNDsKLQkJCWJyZWFrOwotCQljYXNlIDIyOgotCQkJUmF0ZSA9IFJBVEVfMTE7Ci0JCQlpZiAocFN1cFJhdGVbaV0gJiAweDgwKQotCQkJCUJhc2ljUmF0ZUJpdG1hcCB8PSAweDAwMDg7Ci0JCQlicmVhazsKLQkJY2FzZSAxMjoKLQkJCVJhdGUgPSBSQVRFXzY7CS8qaWYgKHBTdXBSYXRlW2ldICYgMHg4MCkgKi8KLQkJCUJhc2ljUmF0ZUJpdG1hcCB8PSAweDAwMTA7Ci0JCQlicmVhazsKLQkJY2FzZSAxODoKLQkJCVJhdGUgPSBSQVRFXzk7Ci0JCQlpZiAocFN1cFJhdGVbaV0gJiAweDgwKQotCQkJCUJhc2ljUmF0ZUJpdG1hcCB8PSAweDAwMjA7Ci0JCQlicmVhazsKLQkJY2FzZSAyNDoKLQkJCVJhdGUgPSBSQVRFXzEyOwkvKmlmIChwU3VwUmF0ZVtpXSAmIDB4ODApICovCi0JCQlCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMDQwOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzY6Ci0JCQlSYXRlID0gUkFURV8xODsKLQkJCWlmIChwU3VwUmF0ZVtpXSAmIDB4ODApCi0JCQkJQmFzaWNSYXRlQml0bWFwIHw9IDB4MDA4MDsKLQkJCWJyZWFrOwotCQljYXNlIDQ4OgotCQkJUmF0ZSA9IFJBVEVfMjQ7CS8qaWYgKHBTdXBSYXRlW2ldICYgMHg4MCkgKi8KLQkJCUJhc2ljUmF0ZUJpdG1hcCB8PSAweDAxMDA7Ci0JCQlicmVhazsKLQkJY2FzZSA3MjoKLQkJCVJhdGUgPSBSQVRFXzM2OwotCQkJaWYgKHBTdXBSYXRlW2ldICYgMHg4MCkKLQkJCQlCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMjAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgOTY6Ci0JCQlSYXRlID0gUkFURV80ODsKLQkJCWlmIChwU3VwUmF0ZVtpXSAmIDB4ODApCi0JCQkJQmFzaWNSYXRlQml0bWFwIHw9IDB4MDQwMDsKLQkJCWJyZWFrOwotCQljYXNlIDEwODoKLQkJCVJhdGUgPSBSQVRFXzU0OwotCQkJaWYgKHBTdXBSYXRlW2ldICYgMHg4MCkKLQkJCQlCYXNpY1JhdGVCaXRtYXAgfD0gMHgwODAwOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlSYXRlID0gUkFURV8xOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKE1heFN1cHBvcnQgPCBSYXRlKQotCQkJTWF4U3VwcG9ydCA9IFJhdGU7Ci0KLQkJaWYgKE1pblN1cHBvcnQgPiBSYXRlKQotCQkJTWluU3VwcG9ydCA9IFJhdGU7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IEV4dFJhdGVMZW47IGkrKykgewotCQlzd2l0Y2ggKHBFeHRSYXRlW2ldICYgMHg3ZikgewotCQljYXNlIDI6Ci0JCQlSYXRlID0gUkFURV8xOwotCQkJaWYgKHBFeHRSYXRlW2ldICYgMHg4MCkKLQkJCQlCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMDAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgNDoKLQkJCVJhdGUgPSBSQVRFXzI7Ci0JCQlpZiAocEV4dFJhdGVbaV0gJiAweDgwKQotCQkJCUJhc2ljUmF0ZUJpdG1hcCB8PSAweDAwMDI7Ci0JCQlicmVhazsKLQkJY2FzZSAxMToKLQkJCVJhdGUgPSBSQVRFXzVfNTsKLQkJCWlmIChwRXh0UmF0ZVtpXSAmIDB4ODApCi0JCQkJQmFzaWNSYXRlQml0bWFwIHw9IDB4MDAwNDsKLQkJCWJyZWFrOwotCQljYXNlIDIyOgotCQkJUmF0ZSA9IFJBVEVfMTE7Ci0JCQlpZiAocEV4dFJhdGVbaV0gJiAweDgwKQotCQkJCUJhc2ljUmF0ZUJpdG1hcCB8PSAweDAwMDg7Ci0JCQlicmVhazsKLQkJY2FzZSAxMjoKLQkJCVJhdGUgPSBSQVRFXzY7CS8qaWYgKHBFeHRSYXRlW2ldICYgMHg4MCkgKi8KLQkJCUJhc2ljUmF0ZUJpdG1hcCB8PSAweDAwMTA7Ci0JCQlicmVhazsKLQkJY2FzZSAxODoKLQkJCVJhdGUgPSBSQVRFXzk7Ci0JCQlpZiAocEV4dFJhdGVbaV0gJiAweDgwKQotCQkJCUJhc2ljUmF0ZUJpdG1hcCB8PSAweDAwMjA7Ci0JCQlicmVhazsKLQkJY2FzZSAyNDoKLQkJCVJhdGUgPSBSQVRFXzEyOwkvKmlmIChwRXh0UmF0ZVtpXSAmIDB4ODApICovCi0JCQlCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMDQwOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzY6Ci0JCQlSYXRlID0gUkFURV8xODsKLQkJCWlmIChwRXh0UmF0ZVtpXSAmIDB4ODApCi0JCQkJQmFzaWNSYXRlQml0bWFwIHw9IDB4MDA4MDsKLQkJCWJyZWFrOwotCQljYXNlIDQ4OgotCQkJUmF0ZSA9IFJBVEVfMjQ7CS8qaWYgKHBFeHRSYXRlW2ldICYgMHg4MCkgKi8KLQkJCUJhc2ljUmF0ZUJpdG1hcCB8PSAweDAxMDA7Ci0JCQlicmVhazsKLQkJY2FzZSA3MjoKLQkJCVJhdGUgPSBSQVRFXzM2OwotCQkJaWYgKHBFeHRSYXRlW2ldICYgMHg4MCkKLQkJCQlCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMjAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgOTY6Ci0JCQlSYXRlID0gUkFURV80ODsKLQkJCWlmIChwRXh0UmF0ZVtpXSAmIDB4ODApCi0JCQkJQmFzaWNSYXRlQml0bWFwIHw9IDB4MDQwMDsKLQkJCWJyZWFrOwotCQljYXNlIDEwODoKLQkJCVJhdGUgPSBSQVRFXzU0OwotCQkJaWYgKHBFeHRSYXRlW2ldICYgMHg4MCkKLQkJCQlCYXNpY1JhdGVCaXRtYXAgfD0gMHgwODAwOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlSYXRlID0gUkFURV8xOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKE1heFN1cHBvcnQgPCBSYXRlKQotCQkJTWF4U3VwcG9ydCA9IFJhdGU7Ci0KLQkJaWYgKE1pblN1cHBvcnQgPiBSYXRlKQotCQkJTWluU3VwcG9ydCA9IFJhdGU7Ci0JfQotCi0JUlRNUF9JT19XUklURTMyKHBBZCwgTEVHQUNZX0JBU0lDX1JBVEUsIEJhc2ljUmF0ZUJpdG1hcCk7Ci0KLQkvKiBidWcgZml4ICovCi0JLyogcEFkLT5Db21tb25DZmcuQmFzaWNSYXRlQml0bWFwID0gQmFzaWNSYXRlQml0bWFwOyAqLwotCi0JLyogY2FsY3VsYXRlIHRoZSBleHB0ZWN0ZWQgQUNLIHJhdGUgZm9yIGVhY2ggVFggcmF0ZS4gVGhpcyBpbmZvIGlzIHVzZWQgdG8gY2FjdWxhdGUgKi8KLQkvKiB0aGUgRFVSQVRJT04gZmllbGQgb2Ygb3V0Z29pbmcgdW5paWNhc3QgREFUQS9NR01UIGZyYW1lICovCi0JZm9yIChpID0gMDsgaSA8IE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTOyBpKyspIHsKLQkJaWYgKEJhc2ljUmF0ZUJpdG1hcCAmICgweDAxIDw8IGkpKQotCQkJQ3VyckJhc2ljUmF0ZSA9ICh1OClpOwotCQlwQWQtPkNvbW1vbkNmZy5FeHBlY3RlZEFDS1JhdGVbaV0gPSBDdXJyQmFzaWNSYXRlOwotCX0KLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCJNbG1lVXBkYXRlVHhSYXRlc1tNYXhTdXBwb3J0ID0gJWRdID0gTWF4RGVzaXJlICVkIE1icHNcbiIsCi0JCSAgUmF0ZUlkVG9NYnBzW01heFN1cHBvcnRdLCBSYXRlSWRUb01icHNbTWF4RGVzaXJlXSkpOwotCS8qIG1heCB0eCByYXRlID0gbWluIHttYXggZGVzaXJlIHJhdGUsIG1heCBzdXBwb3J0ZWQgcmF0ZX0gKi8KLQlpZiAoTWF4U3VwcG9ydCA8IE1heERlc2lyZSkKLQkJcEFkLT5Db21tb25DZmcuTWF4VHhSYXRlID0gTWF4U3VwcG9ydDsKLQllbHNlCi0JCXBBZC0+Q29tbW9uQ2ZnLk1heFR4UmF0ZSA9IE1heERlc2lyZTsKLQotCXBBZC0+Q29tbW9uQ2ZnLk1pblR4UmF0ZSA9IE1pblN1cHBvcnQ7Ci0JLyogMjAwMy0wNy0zMSBqb2huIC0gMjUwMCBkb2Vzbid0IGhhdmUgZ29vZCBzZW5zaXRpdml0eSBhdCBoaWdoIE9GRE0gcmF0ZXMuIHRvIGluY3JlYXNlIHRoZSBzdWNjZXNzICovCi0JLyogcmF0aW8gb2YgaW5pdGlhbCBESENQIHBhY2tldCBleGNoYW5nZSwgVFggcmF0ZSBzdGFydHMgZnJvbSBhIGxvd2VyIHJhdGUgZGVwZW5kaW5nICovCi0JLyogb24gYXZlcmFnZSBSU1NJICovCi0JLyogICAgICAgMS4gUlNTSSA+PSAtNzBkYiwgc3RhcnQgYXQgNTQgTWJwcyAoc2hvcnQgZGlzdGFuY2UpICovCi0JLyogICAgICAgMi4gLTcwID4gUlNTSSA+PSAtNzUsIHN0YXJ0IGF0IDI0IE1icHMgKG1pZCBkaXN0YW5jZSkgKi8KLQkvKiAgICAgICAzLiAtNzUgPiBSU1NJLCBzdGFydCBhdCAxMSBNYnBzIChsb25nIGRpc3RhbmNlKSAqLwotCWlmICgqYXV0b19yYXRlX2N1cl9wKSB7Ci0JCXNob3J0IGRibSA9IDA7Ci0KLQkJZGJtID0gcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMCAtIHBBZC0+QmJwUnNzaVRvRGJtRGVsdGE7Ci0KLQkJaWYgKGJMaW5rVXAgPT0gVFJVRSkKLQkJCXBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZSA9IFJBVEVfMjQ7Ci0JCWVsc2UKLQkJCXBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZSA9IHBBZC0+Q29tbW9uQ2ZnLk1heFR4UmF0ZTsKLQotCQlpZiAoZGJtIDwgLTc1KQotCQkJcEFkLT5Db21tb25DZmcuVHhSYXRlID0gUkFURV8xMTsKLQkJZWxzZSBpZiAoZGJtIDwgLTcwKQotCQkJcEFkLT5Db21tb25DZmcuVHhSYXRlID0gUkFURV8yNDsKLQotCQkvKiBzaG91bGQgbmV2ZXIgZXhjZWVkIE1heFR4UmF0ZSAoY29uc2lkZXIgMTFCLW9ubHkgbW9kZSkgKi8KLQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZSA+IHBBZC0+Q29tbW9uQ2ZnLk1heFR4UmF0ZSkKLQkJCXBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZSA9IHBBZC0+Q29tbW9uQ2ZnLk1heFR4UmF0ZTsKLQotCQlwQWQtPkNvbW1vbkNmZy5UeFJhdGVJbmRleCA9IDA7Ci0JfSBlbHNlIHsKLQkJcEFkLT5Db21tb25DZmcuVHhSYXRlID0gcEFkLT5Db21tb25DZmcuTWF4VHhSYXRlOwotCQlwSHRQaHktPmZpZWxkLk1DUyA9Ci0JCSAgICAocEFkLT5Db21tb25DZmcuTWF4VHhSYXRlID4KLQkJICAgICAzKSA/IChwQWQtPkNvbW1vbkNmZy5NYXhUeFJhdGUgLQotCQkJICAgNCkgOiBwQWQtPkNvbW1vbkNmZy5NYXhUeFJhdGU7Ci0JCXBIdFBoeS0+ZmllbGQuTU9ERSA9Ci0JCSAgICAocEFkLT5Db21tb25DZmcuTWF4VHhSYXRlID4gMykgPyBNT0RFX09GRE0gOiBNT0RFX0NDSzsKLQotCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkhUUGh5TW9kZS5maWVsZC5TVEJDID0KLQkJICAgIHBIdFBoeS0+ZmllbGQuU1RCQzsKLQkJcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5IVFBoeU1vZGUuZmllbGQuU2hvcnRHSSA9Ci0JCSAgICBwSHRQaHktPmZpZWxkLlNob3J0R0k7Ci0JCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uSFRQaHlNb2RlLmZpZWxkLk1DUyA9Ci0JCSAgICBwSHRQaHktPmZpZWxkLk1DUzsKLQkJcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5IVFBoeU1vZGUuZmllbGQuTU9ERSA9Ci0JCSAgICBwSHRQaHktPmZpZWxkLk1PREU7Ci0JfQotCi0JaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZSA8PSBSQVRFXzExKSB7Ci0JCXBNYXhIdFBoeS0+ZmllbGQuTU9ERSA9IE1PREVfQ0NLOwotCQlwTWF4SHRQaHktPmZpZWxkLk1DUyA9IHBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZTsKLQkJcE1pbkh0UGh5LT5maWVsZC5NQ1MgPSBwQWQtPkNvbW1vbkNmZy5NaW5UeFJhdGU7Ci0JfSBlbHNlIHsKLQkJcE1heEh0UGh5LT5maWVsZC5NT0RFID0gTU9ERV9PRkRNOwotCQlwTWF4SHRQaHktPmZpZWxkLk1DUyA9IE9mZG1SYXRlVG9SeHdpTUNTW3BBZC0+Q29tbW9uQ2ZnLlR4UmF0ZV07Ci0JCWlmIChwQWQtPkNvbW1vbkNmZy5NaW5UeFJhdGUgPj0gUkFURV82Ci0JCSAgICAmJiAocEFkLT5Db21tb25DZmcuTWluVHhSYXRlIDw9IFJBVEVfNTQpKSB7Ci0JCQlwTWluSHRQaHktPmZpZWxkLk1DUyA9Ci0JCQkgICAgT2ZkbVJhdGVUb1J4d2lNQ1NbcEFkLT5Db21tb25DZmcuTWluVHhSYXRlXTsKLQkJfSBlbHNlIHsKLQkJCXBNaW5IdFBoeS0+ZmllbGQuTUNTID0gcEFkLT5Db21tb25DZmcuTWluVHhSYXRlOwotCQl9Ci0JfQotCi0JcEh0UGh5LT53b3JkID0gKHBNYXhIdFBoeS0+d29yZCk7Ci0JaWYgKGJMaW5rVXAgJiYgKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpKSB7Ci0JCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uSFRQaHlNb2RlLndvcmQgPSBwSHRQaHktPndvcmQ7Ci0JCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uTWF4SFRQaHlNb2RlLndvcmQgPQotCQkgICAgcE1heEh0UGh5LT53b3JkOwotCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLk1pbkhUUGh5TW9kZS53b3JkID0KLQkJICAgIHBNaW5IdFBoeS0+d29yZDsKLQl9IGVsc2UgewotCQlzd2l0Y2ggKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUpIHsKLQkJY2FzZSBQSFlfMTFCR19NSVhFRDoKLQkJY2FzZSBQSFlfMTFCOgotCQljYXNlIFBIWV8xMUJHTl9NSVhFRDoKLQkJCXBBZC0+Q29tbW9uQ2ZnLk1sbWVSYXRlID0gUkFURV8xOwotCQkJcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1PREUgPSBNT0RFX0NDSzsKLQkJCXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NQ1MgPSBSQVRFXzE7Ci0KLS8qI2lmZGVmICAgICAgICBXSUZJX1RFU1QgKi8KLQkJCXBBZC0+Q29tbW9uQ2ZnLlJ0c1JhdGUgPSBSQVRFXzExOwotLyojZWxzZSAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQWQtPkNvbW1vbkNmZy5SdHNSYXRlID0gUkFURV8xOyAqLwotLyojZW5kaWYgKi8KLQkJCWJyZWFrOwotCQljYXNlIFBIWV8xMUc6Ci0JCWNhc2UgUEhZXzExQToKLQkJY2FzZSBQSFlfMTFBR05fTUlYRUQ6Ci0JCWNhc2UgUEhZXzExR05fTUlYRUQ6Ci0JCWNhc2UgUEhZXzExTl8yXzRHOgotCQljYXNlIFBIWV8xMUFOX01JWEVEOgotCQljYXNlIFBIWV8xMU5fNUc6Ci0JCQlwQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZSA9IFJBVEVfNjsKLQkJCXBBZC0+Q29tbW9uQ2ZnLlJ0c1JhdGUgPSBSQVRFXzY7Ci0JCQlwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTU9ERSA9IE1PREVfT0ZETTsKLQkJCXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NQ1MgPQotCQkJICAgIE9mZG1SYXRlVG9SeHdpTUNTW3BBZC0+Q29tbW9uQ2ZnLk1sbWVSYXRlXTsKLQkJCWJyZWFrOwotCQljYXNlIFBIWV8xMUFCR19NSVhFRDoKLQkJY2FzZSBQSFlfMTFBQkdOX01JWEVEOgotCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPD0gMTQpIHsKLQkJCQlwQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZSA9IFJBVEVfMTsKLQkJCQlwQWQtPkNvbW1vbkNmZy5SdHNSYXRlID0gUkFURV8xOwotCQkJCXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NT0RFID0KLQkJCQkgICAgTU9ERV9DQ0s7Ci0JCQkJcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1DUyA9IFJBVEVfMTsKLQkJCX0gZWxzZSB7Ci0JCQkJcEFkLT5Db21tb25DZmcuTWxtZVJhdGUgPSBSQVRFXzY7Ci0JCQkJcEFkLT5Db21tb25DZmcuUnRzUmF0ZSA9IFJBVEVfNjsKLQkJCQlwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTU9ERSA9Ci0JCQkJICAgIE1PREVfT0ZETTsKLQkJCQlwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTUNTID0KLQkJCQkgICAgT2ZkbVJhdGVUb1J4d2lNQ1NbcEFkLT5Db21tb25DZmcuTWxtZVJhdGVdOwotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6CS8qIGVycm9yICovCi0JCQlwQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZSA9IFJBVEVfNjsKLQkJCXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NT0RFID0gTU9ERV9PRkRNOwotCQkJcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1DUyA9Ci0JCQkgICAgT2ZkbVJhdGVUb1J4d2lNQ1NbcEFkLT5Db21tb25DZmcuTWxtZVJhdGVdOwotCQkJcEFkLT5Db21tb25DZmcuUnRzUmF0ZSA9IFJBVEVfMTsKLQkJCWJyZWFrOwotCQl9Ci0JCS8qICovCi0JCS8qIEtlZXAgQmFzaWMgTWxtZSBSYXRlLiAqLwotCQkvKiAqLwotCQlwQWQtPk1hY1RhYi5Db250ZW50W01DQVNUX1dDSURdLkhUUGh5TW9kZS53b3JkID0KLQkJICAgIHBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC53b3JkOwotCQlpZiAocEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1PREUgPT0gTU9ERV9PRkRNKQotCQkJcEFkLT5NYWNUYWIuQ29udGVudFtNQ0FTVF9XQ0lEXS5IVFBoeU1vZGUuZmllbGQuTUNTID0KLQkJCSAgICBPZmRtUmF0ZVRvUnh3aU1DU1tSQVRFXzI0XTsKLQkJZWxzZQotCQkJcEFkLT5NYWNUYWIuQ29udGVudFtNQ0FTVF9XQ0lEXS5IVFBoeU1vZGUuZmllbGQuTUNTID0KLQkJCSAgICBSQVRFXzE7Ci0JCXBBZC0+Q29tbW9uQ2ZnLkJhc2ljTWxtZVJhdGUgPSBwQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZTsKLQl9Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJICgiIE1sbWVVcGRhdGVUeFJhdGVzIChNYXhEZXNpcmU9JWQsIE1heFN1cHBvcnQ9JWQsIE1heFR4UmF0ZT0lZCwgTWluUmF0ZT0lZCwgUmF0ZSBTd2l0Y2hpbmcgPSVkKVxuIiwKLQkJICBSYXRlSWRUb01icHNbTWF4RGVzaXJlXSwgUmF0ZUlkVG9NYnBzW01heFN1cHBvcnRdLAotCQkgIFJhdGVJZFRvTWJwc1twQWQtPkNvbW1vbkNmZy5NYXhUeFJhdGVdLAotCQkgIFJhdGVJZFRvTWJwc1twQWQtPkNvbW1vbkNmZy5NaW5UeFJhdGVdLAotCQkgIC8qT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19UWF9SQVRFX1NXSVRDSF9FTkFCTEVEKSAqLwotCQkgICphdXRvX3JhdGVfY3VyX3ApKTsKLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJICgiIE1sbWVVcGRhdGVUeFJhdGVzIChUeFJhdGU9JWQsIFJ0c1JhdGU9JWQsIEJhc2ljUmF0ZUJpdG1hcD0weCUwNGx4KVxuIiwKLQkJICBSYXRlSWRUb01icHNbcEFkLT5Db21tb25DZmcuVHhSYXRlXSwKLQkJICBSYXRlSWRUb01icHNbcEFkLT5Db21tb25DZmcuUnRzUmF0ZV0sIEJhc2ljUmF0ZUJpdG1hcCkpOwotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCJNbG1lVXBkYXRlVHhSYXRlcyAoTWxtZVRyYW5zbWl0PTB4JXgsIE1pbkhUUGh5TW9kZT0leCwgTWF4SFRQaHlNb2RlPTB4JXgsIEhUUGh5TW9kZT0weCV4KVxuIiwKLQkJICBwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQud29yZCwKLQkJICBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLk1pbkhUUGh5TW9kZS53b3JkLAotCQkgIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uTWF4SFRQaHlNb2RlLndvcmQsCi0JCSAgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5IVFBoeU1vZGUud29yZCkpOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JCVRoaXMgZnVuY3Rpb24gdXBkYXRlIEhUIFJhdGUgc2V0dGluZy4KLQkJSW5wdXQgV2NpZCB2YWx1ZSBpcyB2YWxpZCBmb3IgMiBjYXNlIDoKLQkJMS4gaXQncyB1c2VkIGZvciBTdGF0aW9uIGluIGluZnJhIG1vZGUgdGhhdCBjb3B5IEFQIHJhdGUgdG8gTWFjdGFibGUuCi0JCTIuIE9SIFN0YXRpb24JaW4gYWRob2MgbW9kZSB0byBjb3B5IHBlZXIncyBIVCByYXRlIHRvIE1hY3RhYmxlLgotCi0gSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi12b2lkIE1sbWVVcGRhdGVIdFR4UmF0ZXMoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1OCBhcGlkeCkKLXsKLQl1OCBTdGJjTWNzOwkJLypqLCBTdGJjTWNzLCBiaXRtYXNrOyAqLwotCWNoYXIgaTsJCQkvKiAzKjMgKi8KLQlzdHJ1Y3QgcnRfaHRfY2FwYWJpbGl0eSAqcFJ0SHRDYXAgPSBOVUxMOwotCXN0cnVjdCBydF9odF9waHlfaW5mbyAqcEFjdGl2ZUh0UGh5ID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIEJhc2ljTUNTOwotCXU4IGosIGJpdG1hc2s7Ci0Jc3RydWN0IHJ0X2h0X3BoeV9pbmZvICpwRGVzaXJlSHRQaHkgPSBOVUxMOwotCVBIVFRSQU5TTUlUX1NFVFRJTkcgcEh0UGh5ID0gTlVMTDsKLQlQSFRUUkFOU01JVF9TRVRUSU5HIHBNYXhIdFBoeSA9IE5VTEw7Ci0JUEhUVFJBTlNNSVRfU0VUVElORyBwTWluSHRQaHkgPSBOVUxMOwotCUJPT0xFQU4gKmF1dG9fcmF0ZV9jdXJfcDsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1sbWVVcGRhdGVIdFR4UmF0ZXM9PT0+IFxuIikpOwotCi0JYXV0b19yYXRlX2N1cl9wID0gTlVMTDsKLQotCXsKLQkJcERlc2lyZUh0UGh5ID0gJnBBZC0+U3RhQ2ZnLkRlc2lyZWRIdFBoeUluZm87Ci0JCXBBY3RpdmVIdFBoeSA9ICZwQWQtPlN0YUNmZy5EZXNpcmVkSHRQaHlJbmZvOwotCQlwSHRQaHkgPSAmcEFkLT5TdGFDZmcuSFRQaHlNb2RlOwotCQlwTWF4SHRQaHkgPSAmcEFkLT5TdGFDZmcuTWF4SFRQaHlNb2RlOwotCQlwTWluSHRQaHkgPSAmcEFkLT5TdGFDZmcuTWluSFRQaHlNb2RlOwotCi0JCWF1dG9fcmF0ZV9jdXJfcCA9ICZwQWQtPlN0YUNmZy5iQXV0b1R4UmF0ZVN3aXRjaDsKLQl9Ci0KLQlpZiAoKEFESE9DX09OKHBBZCkgfHwgSU5GUkFfT04ocEFkKSkgJiYgKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpKSB7Ci0JCWlmIChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLmJIdEVuYWJsZSA9PSBGQUxTRSkKLQkJCXJldHVybjsKLQotCQlwUnRIdENhcCA9ICZwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRIdFBoeTsKLQkJcEFjdGl2ZUh0UGh5ID0gJnBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm87Ci0JCVN0YmNNY3MgPSAodTgpcEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8zLlN0YmNNY3M7Ci0JCUJhc2ljTUNTID0KLQkJICAgIHBBZC0+TWxtZUF1eC5BZGRIdEluZm8uTUNTU2V0WzBdICsKLQkJICAgIChwQWQtPk1sbWVBdXguQWRkSHRJbmZvLk1DU1NldFsxXSA8PCA4KSArIChTdGJjTWNzIDw8IDE2KTsKLQkJaWYgKChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuVHhTVEJDKSAmJiAocFJ0SHRDYXAtPlJ4U1RCQykKLQkJICAgICYmIChwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoID09IDIpKQotCQkJcE1heEh0UGh5LT5maWVsZC5TVEJDID0gU1RCQ19VU0U7Ci0JCWVsc2UKLQkJCXBNYXhIdFBoeS0+ZmllbGQuU1RCQyA9IFNUQkNfTk9ORTsKLQl9IGVsc2UgewotCQlpZiAocERlc2lyZUh0UGh5LT5iSHRFbmFibGUgPT0gRkFMU0UpCi0JCQlyZXR1cm47Ci0KLQkJcFJ0SHRDYXAgPSAmcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5OwotCQlTdGJjTWNzID0gKHU4KXBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mby5BZGRIdEluZm8zLlN0YmNNY3M7Ci0JCUJhc2ljTUNTID0KLQkJICAgIHBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mby5NQ1NTZXRbMF0gKwotCQkgICAgKHBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mby5NQ1NTZXRbMV0gPDwgOCkgKyAoU3RiY01jcyA8PCAxNik7Ci0JCWlmICgocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlR4U1RCQykgJiYgKHBSdEh0Q2FwLT5SeFNUQkMpCi0JCSAgICAmJiAocEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCA9PSAyKSkKLQkJCXBNYXhIdFBoeS0+ZmllbGQuU1RCQyA9IFNUQkNfVVNFOwotCQllbHNlCi0JCQlwTWF4SHRQaHktPmZpZWxkLlNUQkMgPSBTVEJDX05PTkU7Ci0JfQotCi0JLyogRGVjaWRlIE1BWCBodCByYXRlLiAqLwotCWlmICgocFJ0SHRDYXAtPkdGKSAmJiAocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkdGKSkKLQkJcE1heEh0UGh5LT5maWVsZC5NT0RFID0gTU9ERV9IVEdSRUVORklFTEQ7Ci0JZWxzZQotCQlwTWF4SHRQaHktPmZpZWxkLk1PREUgPSBNT0RFX0hUTUlYOwotCi0JaWYgKChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQ2hhbm5lbFdpZHRoKQotCSAgICAmJiAocFJ0SHRDYXAtPkNoYW5uZWxXaWR0aCkpCi0JCXBNYXhIdFBoeS0+ZmllbGQuQlcgPSBCV180MDsKLQllbHNlCi0JCXBNYXhIdFBoeS0+ZmllbGQuQlcgPSBCV18yMDsKLQotCWlmIChwTWF4SHRQaHktPmZpZWxkLkJXID09IEJXXzIwKQotCQlwTWF4SHRQaHktPmZpZWxkLlNob3J0R0kgPQotCQkgICAgKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5TaG9ydEdJZm9yMjAgJiBwUnRIdENhcC0+Ci0JCSAgICAgU2hvcnRHSWZvcjIwKTsKLQllbHNlCi0JCXBNYXhIdFBoeS0+ZmllbGQuU2hvcnRHSSA9Ci0JCSAgICAocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlNob3J0R0lmb3I0MCAmIHBSdEh0Q2FwLT4KLQkJICAgICBTaG9ydEdJZm9yNDApOwotCi0JaWYgKHBEZXNpcmVIdFBoeS0+TUNTU2V0WzRdICE9IDApIHsKLQkJcE1heEh0UGh5LT5maWVsZC5NQ1MgPSAzMjsKLQl9Ci0KLQlmb3IgKGkgPSAyMzsgaSA+PSAwOyBpLS0pCS8qIDMqMyAqLwotCXsKLQkJaiA9IGkgLyA4OwotCQliaXRtYXNrID0gKDEgPDwgKGkgLSAoaiAqIDgpKSk7Ci0KLQkJaWYgKChwQWN0aXZlSHRQaHktPk1DU1NldFtqXSAmIGJpdG1hc2spCi0JCSAgICAmJiAocERlc2lyZUh0UGh5LT5NQ1NTZXRbal0gJiBiaXRtYXNrKSkgewotCQkJcE1heEh0UGh5LT5maWVsZC5NQ1MgPSBpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoaSA9PSAwKQotCQkJYnJlYWs7Ci0JfQotCi0JLyogQ29weSBNSU4gaHQgcmF0ZS4gIHJ0Mjg2MD8/PyAqLwotCXBNaW5IdFBoeS0+ZmllbGQuQlcgPSBCV18yMDsKLQlwTWluSHRQaHktPmZpZWxkLk1DUyA9IDA7Ci0JcE1pbkh0UGh5LT5maWVsZC5TVEJDID0gMDsKLQlwTWluSHRQaHktPmZpZWxkLlNob3J0R0kgPSAwOwotCS8qSWYgU1RBIGFzc2lnbnMgZml4ZWQgcmF0ZS4gdXBkYXRlIHRvIGZpeGVkIGhlcmUuICovCi0JaWYgKChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKSAmJiAocERlc2lyZUh0UGh5LT5NQ1NTZXRbMF0gIT0gMHhmZikpIHsKLQkJaWYgKHBEZXNpcmVIdFBoeS0+TUNTU2V0WzRdICE9IDApIHsKLQkJCXBNYXhIdFBoeS0+ZmllbGQuTUNTID0gMzI7Ci0JCQlwTWluSHRQaHktPmZpZWxkLk1DUyA9IDMyOwotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiTWxtZVVwZGF0ZUh0VHhSYXRlczw9PT0gVXNlIEZpeGVkIE1DUyA9ICVkXG4iLAotCQkJCSAgcE1pbkh0UGh5LT5maWVsZC5NQ1MpKTsKLQkJfQotCi0JCWZvciAoaSA9IDIzOyAoY2hhcilpID49IDA7IGktLSkJLyogMyozICovCi0JCXsKLQkJCWogPSBpIC8gODsKLQkJCWJpdG1hc2sgPSAoMSA8PCAoaSAtIChqICogOCkpKTsKLQkJCWlmICgocERlc2lyZUh0UGh5LT5NQ1NTZXRbal0gJiBiaXRtYXNrKQotCQkJICAgICYmIChwQWN0aXZlSHRQaHktPk1DU1NldFtqXSAmIGJpdG1hc2spKSB7Ci0JCQkJcE1heEh0UGh5LT5maWVsZC5NQ1MgPSBpOwotCQkJCXBNaW5IdFBoeS0+ZmllbGQuTUNTID0gaTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmIChpID09IDApCi0JCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQkvKiBEZWNpZGUgaHQgcmF0ZSAqLwotCXBIdFBoeS0+ZmllbGQuU1RCQyA9IHBNYXhIdFBoeS0+ZmllbGQuU1RCQzsKLQlwSHRQaHktPmZpZWxkLkJXID0gcE1heEh0UGh5LT5maWVsZC5CVzsKLQlwSHRQaHktPmZpZWxkLk1PREUgPSBwTWF4SHRQaHktPmZpZWxkLk1PREU7Ci0JcEh0UGh5LT5maWVsZC5NQ1MgPSBwTWF4SHRQaHktPmZpZWxkLk1DUzsKLQlwSHRQaHktPmZpZWxkLlNob3J0R0kgPSBwTWF4SHRQaHktPmZpZWxkLlNob3J0R0k7Ci0KLQkvKiB1c2UgZGVmYXVsdCBub3cuIHJ0Mjg2MCAqLwotCWlmIChwRGVzaXJlSHRQaHktPk1DU1NldFswXSAhPSAweGZmKQotCQkqYXV0b19yYXRlX2N1cl9wID0gRkFMU0U7Ci0JZWxzZQotCQkqYXV0b19yYXRlX2N1cl9wID0gVFJVRTsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCIgTWxtZVVwZGF0ZUh0VHhSYXRlczwtLS0uQU1zZHVTaXplID0gJWQgIFxuIiwKLQkJICBwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQW1zZHVTaXplKSk7Ci0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIlRYOiBNQ1NbMF0gPSAleCAoY2hvb3NlICVkKSwgQlcgPSAlZCwgU2hvcnRHSSA9ICVkLCBNT0RFID0gJWQsICBcbiIsCi0JCSAgcEFjdGl2ZUh0UGh5LT5NQ1NTZXRbMF0sIHBIdFBoeS0+ZmllbGQuTUNTLCBwSHRQaHktPmZpZWxkLkJXLAotCQkgIHBIdFBoeS0+ZmllbGQuU2hvcnRHSSwgcEh0UGh5LT5maWVsZC5NT0RFKSk7Ci0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTWxtZVVwZGF0ZUh0VHhSYXRlczw9PT0gXG4iKSk7Ci19Ci0KLXZvaWQgQkFUYWJsZUluaXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfYmFfdGFibGUgKlRhYikKLXsKLQlpbnQgaTsKLQotCVRhYi0+bnVtQXNPcmlnaW5hdG9yID0gMDsKLQlUYWItPm51bUFzUmVjaXBpZW50ID0gMDsKLQlUYWItPm51bURvbmVPcmlnaW5hdG9yID0gMDsKLQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5CQVRhYkxvY2spOwotCWZvciAoaSA9IDA7IGkgPCBNQVhfTEVOX09GX0JBX1JFQ19UQUJMRTsgaSsrKSB7Ci0JCVRhYi0+QkFSZWNFbnRyeVtpXS5SRUNfQkFfU3RhdHVzID0gUmVjaXBpZW50X05PTkU7Ci0JCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCYoVGFiLT5CQVJlY0VudHJ5W2ldLlJ4UmVSaW5nTG9jaykpOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0xFTl9PRl9CQV9PUklfVEFCTEU7IGkrKykgewotCQlUYWItPkJBT3JpRW50cnlbaV0uT1JJX0JBX1N0YXR1cyA9IE9yaWdpbmF0b3JfTk9ORTsKLQl9Ci19Ci0KLS8qIElSUUwgPSBESVNQQVRDSF9MRVZFTCAqLwotdm9pZCBNbG1lUmFkaW9PZmYoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCVJUTVBfTUxNRV9SQURJT19PRkYocEFkKTsKLX0KLQotLyogSVJRTCA9IERJU1BBVENIX0xFVkVMICovCi12b2lkIE1sbWVSYWRpb09uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlSVE1QX01MTUVfUkFESU9fT04ocEFkKTsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotLyogYnNzX3RhYmxlLmMgKi8KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQotLyohIFxicmllZiBpbml0aWFsaXplIEJTUyB0YWJsZQotICoJXHBhcmFtIHBfdGFiIHBvaW50ZXIgdG8gdGhlIHRhYmxlCi0gKglccmV0dXJuIG5vbmUKLSAqCVxwcmUKLSAqCVxwb3N0Ci0KLSBJUlFMID0gUEFTU0lWRV9MRVZFTAotIElSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0gKi8KLXZvaWQgQnNzVGFibGVJbml0KHN0cnVjdCBydF9ic3NfdGFibGUgKlRhYikKLXsKLQlpbnQgaTsKLQotCVRhYi0+QnNzTnIgPSAwOwotCVRhYi0+QnNzT3ZlcmxhcE5yID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0xFTl9PRl9CU1NfVEFCTEU7IGkrKykgewotCQlOZGlzWmVyb01lbW9yeSgmVGFiLT5Cc3NFbnRyeVtpXSwgc2l6ZW9mKHN0cnVjdCBydF9ic3NfZW50cnkpKTsKLQkJVGFiLT5Cc3NFbnRyeVtpXS5Sc3NpID0gLTEyNzsJLyogaW5pdGlhbCB0aGUgcnNzaSBhcyBhIG1pbmltdW0gdmFsdWUgKi8KLQl9Ci19Ci0KLS8qISBcYnJpZWYgc2VhcmNoIHRoZSBCU1MgdGFibGUgYnkgU1NJRAotICoJXHBhcmFtIHBfdGFiIHBvaW50ZXIgdG8gdGhlIGJzcyB0YWJsZQotICoJXHBhcmFtIHNzaWQgU1NJRCBzdHJpbmcKLSAqCVxyZXR1cm4gaW5kZXggb2YgdGhlIHRhYmxlLCBCU1NfTk9UX0ZPVU5EIGlmIG5vdCBpbiB0aGUgdGFibGUKLSAqCVxwcmUKLSAqCVxwb3N0Ci0gKglcbm90ZSBzZWFyY2ggYnkgc2VxdWVudGlhbCBzZWFyY2gKLQotIElSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0gKi8KLXVuc2lnbmVkIGxvbmcgQnNzVGFibGVTZWFyY2goc3RydWN0IHJ0X2Jzc190YWJsZSAqVGFiLCB1OCAqcEJzc2lkLCB1OCBDaGFubmVsKQotewotCXU4IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgVGFiLT5Cc3NOcjsgaSsrKSB7Ci0JCS8qICovCi0JCS8qIFNvbWUgQVAgdGhhdCBzdXBwb3J0IEEvQi9HIG1vZGUgdGhhdCBtYXkgdXNlZCB0aGUgc2FtZSBCU1NJRCBvbiAxMUEgYW5kIDExQi9HLiAqLwotCQkvKiBXZSBzaG91bGQgZGlzdGluZ3Vpc2ggdGhpcyBjYXNlLiAqLwotCQkvKiAqLwotCQlpZiAoKCgoVGFiLT5Cc3NFbnRyeVtpXS5DaGFubmVsIDw9IDE0KSAmJiAoQ2hhbm5lbCA8PSAxNCkpIHx8Ci0JCSAgICAgKChUYWItPkJzc0VudHJ5W2ldLkNoYW5uZWwgPiAxNCkgJiYgKENoYW5uZWwgPiAxNCkpKSAmJgotCQkgICAgTUFDX0FERFJfRVFVQUwoVGFiLT5Cc3NFbnRyeVtpXS5Cc3NpZCwgcEJzc2lkKSkgewotCQkJcmV0dXJuIGk7Ci0JCX0KLQl9Ci0JcmV0dXJuICh1bnNpZ25lZCBsb25nKUJTU19OT1RfRk9VTkQ7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgQnNzU3NpZFRhYmxlU2VhcmNoKHN0cnVjdCBydF9ic3NfdGFibGUgKlRhYiwKLQkJCSB1OCAqcEJzc2lkLAotCQkJIHU4ICpwU3NpZCwgdTggU3NpZExlbiwgdTggQ2hhbm5lbCkKLXsKLQl1OCBpOwotCi0JZm9yIChpID0gMDsgaSA8IFRhYi0+QnNzTnI7IGkrKykgewotCQkvKiAqLwotCQkvKiBTb21lIEFQIHRoYXQgc3VwcG9ydCBBL0IvRyBtb2RlIHRoYXQgbWF5IHVzZWQgdGhlIHNhbWUgQlNTSUQgb24gMTFBIGFuZCAxMUIvRy4gKi8KLQkJLyogV2Ugc2hvdWxkIGRpc3Rpbmd1aXNoIHRoaXMgY2FzZS4gKi8KLQkJLyogKi8KLQkJaWYgKCgoKFRhYi0+QnNzRW50cnlbaV0uQ2hhbm5lbCA8PSAxNCkgJiYgKENoYW5uZWwgPD0gMTQpKSB8fAotCQkgICAgICgoVGFiLT5Cc3NFbnRyeVtpXS5DaGFubmVsID4gMTQpICYmIChDaGFubmVsID4gMTQpKSkgJiYKLQkJICAgIE1BQ19BRERSX0VRVUFMKFRhYi0+QnNzRW50cnlbaV0uQnNzaWQsIHBCc3NpZCkgJiYKLQkJICAgIFNTSURfRVFVQUwocFNzaWQsIFNzaWRMZW4sIFRhYi0+QnNzRW50cnlbaV0uU3NpZCwKLQkJCSAgICAgICBUYWItPkJzc0VudHJ5W2ldLlNzaWRMZW4pKSB7Ci0JCQlyZXR1cm4gaTsKLQkJfQotCX0KLQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpQlNTX05PVF9GT1VORDsKLX0KLQotdW5zaWduZWQgbG9uZyBCc3NUYWJsZVNlYXJjaFdpdGhTU0lEKHN0cnVjdCBydF9ic3NfdGFibGUgKlRhYiwKLQkJCSAgICAgdTggKkJzc2lkLAotCQkJICAgICB1OCAqcFNzaWQsCi0JCQkgICAgIHU4IFNzaWRMZW4sIHU4IENoYW5uZWwpCi17Ci0JdTggaTsKLQotCWZvciAoaSA9IDA7IGkgPCBUYWItPkJzc05yOyBpKyspIHsKLQkJaWYgKCgoKFRhYi0+QnNzRW50cnlbaV0uQ2hhbm5lbCA8PSAxNCkgJiYgKENoYW5uZWwgPD0gMTQpKSB8fAotCQkgICAgICgoVGFiLT5Cc3NFbnRyeVtpXS5DaGFubmVsID4gMTQpICYmIChDaGFubmVsID4gMTQpKSkgJiYKLQkJICAgIE1BQ19BRERSX0VRVUFMKCYoVGFiLT5Cc3NFbnRyeVtpXS5Cc3NpZCksIEJzc2lkKSAmJgotCQkgICAgKFNTSURfRVFVQUwKLQkJICAgICAocFNzaWQsIFNzaWRMZW4sIFRhYi0+QnNzRW50cnlbaV0uU3NpZCwKLQkJICAgICAgVGFiLT5Cc3NFbnRyeVtpXS5Tc2lkTGVuKQotCQkgICAgIHx8IChOZGlzRXF1YWxNZW1vcnkocFNzaWQsIFplcm9Tc2lkLCBTc2lkTGVuKSkKLQkJICAgICB8fAotCQkgICAgIChOZGlzRXF1YWxNZW1vcnkKLQkJICAgICAgKFRhYi0+QnNzRW50cnlbaV0uU3NpZCwgWmVyb1NzaWQsCi0JCSAgICAgICBUYWItPkJzc0VudHJ5W2ldLlNzaWRMZW4pKSkpIHsKLQkJCXJldHVybiBpOwotCQl9Ci0JfQotCXJldHVybiAodW5zaWduZWQgbG9uZylCU1NfTk9UX0ZPVU5EOwotfQotCi11bnNpZ25lZCBsb25nIEJzc1NzaWRUYWJsZVNlYXJjaEJ5U1NJRChzdHJ1Y3QgcnRfYnNzX3RhYmxlICpUYWIsCi0JCQkgICAgICAgdTggKnBTc2lkLCB1OCBTc2lkTGVuKQotewotCXU4IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgVGFiLT5Cc3NOcjsgaSsrKSB7Ci0JCWlmIChTU0lEX0VRVUFMCi0JCSAgICAocFNzaWQsIFNzaWRMZW4sIFRhYi0+QnNzRW50cnlbaV0uU3NpZCwKLQkJICAgICBUYWItPkJzc0VudHJ5W2ldLlNzaWRMZW4pKSB7Ci0JCQlyZXR1cm4gaTsKLQkJfQotCX0KLQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpQlNTX05PVF9GT1VORDsKLX0KLQotLyogSVJRTCA9IERJU1BBVENIX0xFVkVMICovCi12b2lkIEJzc1RhYmxlRGVsZXRlRW50cnkoc3RydWN0IHJ0X2Jzc190YWJsZSAqVGFiLAotCQkJIHU4ICpwQnNzaWQsIHU4IENoYW5uZWwpCi17Ci0JdTggaSwgajsKLQotCWZvciAoaSA9IDA7IGkgPCBUYWItPkJzc05yOyBpKyspIHsKLQkJaWYgKChUYWItPkJzc0VudHJ5W2ldLkNoYW5uZWwgPT0gQ2hhbm5lbCkgJiYKLQkJICAgIChNQUNfQUREUl9FUVVBTChUYWItPkJzc0VudHJ5W2ldLkJzc2lkLCBwQnNzaWQpKSkgewotCQkJZm9yIChqID0gaTsgaiA8IFRhYi0+QnNzTnIgLSAxOyBqKyspIHsKLQkJCQlOZGlzTW92ZU1lbW9yeSgmKFRhYi0+QnNzRW50cnlbal0pLAotCQkJCQkgICAgICAgJihUYWItPkJzc0VudHJ5W2ogKyAxXSksCi0JCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHJ0X2Jzc19lbnRyeSkpOwotCQkJfQotCQkJTmRpc1plcm9NZW1vcnkoJihUYWItPkJzc0VudHJ5W1RhYi0+QnNzTnIgLSAxXSksCi0JCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcnRfYnNzX2VudHJ5KSk7Ci0JCQlUYWItPkJzc05yIC09IDE7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQkJRGVsZXRlIHRoZSBPcmlnaW5hdG9yIEVudHJ5IGluIEJBdGFibGUuIE9yIGRlY3JlYXNlIG51bUFzIE9yaWdpbmF0b3IgYnkgMSBpZiBuZWVkZWQuCi0KLQlBcmd1bWVudHM6Ci0JLy8gSVJRTCA9IERJU1BBVENIX0xFVkVMCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBCQVRhYmxlRGVsZXRlT1JJRW50cnkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgc3RydWN0IHJ0X2JhX29yaV9lbnRyeSAqcEJBT1JJRW50cnkpCi17Ci0KLQlpZiAocEJBT1JJRW50cnktPk9SSV9CQV9TdGF0dXMgIT0gT3JpZ2luYXRvcl9OT05FKSB7Ci0JCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+QkFUYWJMb2NrKTsKLQkJaWYgKHBCQU9SSUVudHJ5LT5PUklfQkFfU3RhdHVzID09IE9yaWdpbmF0b3JfRG9uZSkgewotCQkJcEFkLT5CQVRhYmxlLm51bUFzT3JpZ2luYXRvciAtPSAxOwotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiQkFUYWJsZURlbGV0ZU9SSUVudHJ5IG51bUFzT3JpZ2luYXRvcj0gJWxkXG4iLAotCQkJCSAgcEFkLT5CQVRhYmxlLm51bUFzUmVjaXBpZW50KSk7Ci0JCQkvKiBFcmFzZSBCaXRtYXAgZmxhZy4gKi8KLQkJfQotCQlwQWQtPk1hY1RhYi5Db250ZW50W3BCQU9SSUVudHJ5LT5XY2lkXS5UWEJBYml0bWFwICY9ICh+KDEgPDwgKHBCQU9SSUVudHJ5LT5USUQpKSk7CS8qIElmIFNUQSBtb2RlLCAgZXJhc2UgZmxhZyBoZXJlICovCi0JCXBBZC0+TWFjVGFiLkNvbnRlbnRbcEJBT1JJRW50cnktPldjaWRdLkJBT3JpV2NpZEFycmF5W3BCQU9SSUVudHJ5LT5USURdID0gMDsJLyogSWYgU1RBIG1vZGUsICBlcmFzZSBmbGFnIGhlcmUgKi8KLQkJcEJBT1JJRW50cnktPk9SSV9CQV9TdGF0dXMgPSBPcmlnaW5hdG9yX05PTkU7Ci0JCXBCQU9SSUVudHJ5LT5Ub2tlbiA9IDE7Ci0JCS8qIE5vdCBjbGVhciBTZXF1ZW5jZSBoZXJlLiAqLwotCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPkJBVGFiTG9jayk7Ci0JfQotfQotCi0vKiEgXGJyaWVmCi0gKglccGFyYW0KLSAqCVxyZXR1cm4KLSAqCVxwcmUKLSAqCVxwb3N0Ci0KLSBJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotICovCi12b2lkIEJzc0VudHJ5U2V0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X2Jzc19lbnRyeSAqcEJzcywgdTggKnBCc3NpZCwgY2hhciBTc2lkW10sIHU4IFNzaWRMZW4sIHU4IEJzc1R5cGUsIHUxNiBCZWFjb25QZXJpb2QsIHN0cnVjdCBydF9jZl9wYXJtICogcENmUGFybSwgdTE2IEF0aW1XaW4sIHUxNiBDYXBhYmlsaXR5SW5mbywgdTggU3VwUmF0ZVtdLCB1OCBTdXBSYXRlTGVuLCB1OCBFeHRSYXRlW10sIHU4IEV4dFJhdGVMZW4sIHN0cnVjdCBydF9odF9jYXBhYmlsaXR5X2llICogcEh0Q2FwYWJpbGl0eSwgc3RydWN0IHJ0X2FkZF9odF9pbmZvX2llICogcEFkZEh0SW5mbywJLyogQVAgbWlnaHQgdXNlIHRoaXMgYWRkaXRpb25hbCBodCBpbmZvIElFICovCi0JCSB1OCBIdENhcGFiaWxpdHlMZW4sCi0JCSB1OCBBZGRIdEluZm9MZW4sCi0JCSB1OCBOZXdFeHRDaGFuT2Zmc2V0LAotCQkgdTggQ2hhbm5lbCwKLQkJIGNoYXIgUnNzaSwKLQkJIElOIExBUkdFX0lOVEVHRVIgVGltZVN0YW1wLAotCQkgdTggQ2tpcEZsYWcsCi0JCSBzdHJ1Y3QgcnRfZWRjYV9wYXJtICpwRWRjYVBhcm0sCi0JCSBzdHJ1Y3QgcnRfcW9zX2NhcGFiaWxpdHlfcGFybSAqcFFvc0NhcGFiaWxpdHksCi0JCSBzdHJ1Y3QgcnRfcWJzc19sb2FkX3Bhcm0gKnBRYnNzTG9hZCwKLQkJIHUxNiBMZW5ndGhWSUUsIHN0cnVjdCBydF9uZGlzXzgwMl8xMV92YXJpYWJsZV9pZXMgKnBWSUUpCi17Ci0JQ09QWV9NQUNfQUREUihwQnNzLT5Cc3NpZCwgcEJzc2lkKTsKLQkvKiBEZWZhdWx0IEhpZGRlbiBTU0lEIHRvIGJlIFRSVUUsIGl0IHdpbGwgYmUgdHVybmVkIHRvIEZBTFNFIGFmdGVyIGNvcGluZyBTU0lEICovCi0JcEJzcy0+SGlkZGVuID0gMTsKLQlpZiAoU3NpZExlbiA+IDApIHsKLQkJLyogRm9yIGhpZGRlbiBTU0lEIEFQLCBpdCBtaWdodCBzZW5kIGJlYWNvbiB3aXRoIFNTSUQgbGVuIGVxdWFsIHRvIDAgKi8KLQkJLyogT3Igc2VuZCBiZWFjb24gL3Byb2JlIHJlc3BvbnNlIHdpdGggU1NJRCBsZW4gbWF0Y2hpbmcgcmVhbCBTU0lEIGxlbmd0aCwgKi8KLQkJLyogYnV0IFNTSUQgaXMgYWxsIHplcm8uIHN1Y2ggYXMgIjAwLTAwLTAwLTAwIiB3aXRoIGxlbmd0aCA0LiAqLwotCQkvKiBXZSBoYXZlIHRvIHByZXZlbnQgdGhpcyBjYXNlIG92ZXJ3cml0ZSBjb3JyZWN0IHRhYmxlICovCi0JCWlmIChOZGlzRXF1YWxNZW1vcnkoU3NpZCwgWmVyb1NzaWQsIFNzaWRMZW4pID09IDApIHsKLQkJCU5kaXNaZXJvTWVtb3J5KHBCc3MtPlNzaWQsIE1BWF9MRU5fT0ZfU1NJRCk7Ci0JCQlOZGlzTW92ZU1lbW9yeShwQnNzLT5Tc2lkLCBTc2lkLCBTc2lkTGVuKTsKLQkJCXBCc3MtPlNzaWRMZW4gPSBTc2lkTGVuOwotCQkJcEJzcy0+SGlkZGVuID0gMDsKLQkJfQotCX0gZWxzZQotCQlwQnNzLT5Tc2lkTGVuID0gMDsKLQlwQnNzLT5Cc3NUeXBlID0gQnNzVHlwZTsKLQlwQnNzLT5CZWFjb25QZXJpb2QgPSBCZWFjb25QZXJpb2Q7Ci0JaWYgKEJzc1R5cGUgPT0gQlNTX0lORlJBKSB7Ci0JCWlmIChwQ2ZQYXJtLT5iVmFsaWQpIHsKLQkJCXBCc3MtPkNmcENvdW50ID0gcENmUGFybS0+Q2ZwQ291bnQ7Ci0JCQlwQnNzLT5DZnBQZXJpb2QgPSBwQ2ZQYXJtLT5DZnBQZXJpb2Q7Ci0JCQlwQnNzLT5DZnBNYXhEdXJhdGlvbiA9IHBDZlBhcm0tPkNmcE1heER1cmF0aW9uOwotCQkJcEJzcy0+Q2ZwRHVyUmVtYWluaW5nID0gcENmUGFybS0+Q2ZwRHVyUmVtYWluaW5nOwotCQl9Ci0JfSBlbHNlIHsKLQkJcEJzcy0+QXRpbVdpbiA9IEF0aW1XaW47Ci0JfQotCi0JcEJzcy0+Q2FwYWJpbGl0eUluZm8gPSBDYXBhYmlsaXR5SW5mbzsKLQkvKiBUaGUgcHJpdmFjeSBiaXQgaW5kaWNhdGUgc2VjdXJpdHkgaXMgT04sIGl0IG1haWdodCBiZSBXRVAsIFRLSVAgb3IgQUVTICovCi0JLyogQ29tYmluZSB3aXRoIEF1dGhNb2RlLCB0aGV5IHdpbGwgZGVjaWRlIHRoZSBjb25uZWN0aW9uIG1ldGhvZHMuICovCi0JcEJzcy0+UHJpdmFjeSA9IENBUF9JU19QUklWQUNZX09OKHBCc3MtPkNhcGFiaWxpdHlJbmZvKTsKLQlBU1NFUlQoU3VwUmF0ZUxlbiA8PSBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUyk7Ci0JaWYgKFN1cFJhdGVMZW4gPD0gTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVMpCi0JCU5kaXNNb3ZlTWVtb3J5KHBCc3MtPlN1cFJhdGUsIFN1cFJhdGUsIFN1cFJhdGVMZW4pOwotCWVsc2UKLQkJTmRpc01vdmVNZW1vcnkocEJzcy0+U3VwUmF0ZSwgU3VwUmF0ZSwKLQkJCSAgICAgICBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUyk7Ci0JcEJzcy0+U3VwUmF0ZUxlbiA9IFN1cFJhdGVMZW47Ci0JQVNTRVJUKEV4dFJhdGVMZW4gPD0gTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVMpOwotCU5kaXNNb3ZlTWVtb3J5KHBCc3MtPkV4dFJhdGUsIEV4dFJhdGUsIEV4dFJhdGVMZW4pOwotCXBCc3MtPk5ld0V4dENoYW5PZmZzZXQgPSBOZXdFeHRDaGFuT2Zmc2V0OwotCXBCc3MtPkV4dFJhdGVMZW4gPSBFeHRSYXRlTGVuOwotCXBCc3MtPkNoYW5uZWwgPSBDaGFubmVsOwotCXBCc3MtPkNlbnRyYWxDaGFubmVsID0gQ2hhbm5lbDsKLQlwQnNzLT5Sc3NpID0gUnNzaTsKLQkvKiBVcGRhdGUgQ2tpcEZsYWcuIGlmIG5vdCBleGlzdHMsIHRoZSB2YWx1ZSBpcyAweDAgKi8KLQlwQnNzLT5Da2lwRmxhZyA9IENraXBGbGFnOwotCi0JLyogTmV3IGZvciBtaWNyb3NvZnQgRml4ZWQgSUVzICovCi0JTmRpc01vdmVNZW1vcnkocEJzcy0+Rml4SUVzLlRpbWVzdGFtcCwgJlRpbWVTdGFtcCwgOCk7Ci0JcEJzcy0+Rml4SUVzLkJlYWNvbkludGVydmFsID0gQmVhY29uUGVyaW9kOwotCXBCc3MtPkZpeElFcy5DYXBhYmlsaXRpZXMgPSBDYXBhYmlsaXR5SW5mbzsKLQotCS8qIE5ldyBmb3IgbWljcm9zb2Z0IFZhcmlhYmxlIElFcyAqLwotCWlmIChMZW5ndGhWSUUgIT0gMCkgewotCQlwQnNzLT5WYXJJRUxlbiA9IExlbmd0aFZJRTsKLQkJTmRpc01vdmVNZW1vcnkocEJzcy0+VmFySUVzLCBwVklFLCBwQnNzLT5WYXJJRUxlbik7Ci0JfSBlbHNlIHsKLQkJcEJzcy0+VmFySUVMZW4gPSAwOwotCX0KLQotCXBCc3MtPkFkZEh0SW5mb0xlbiA9IDA7Ci0JcEJzcy0+SHRDYXBhYmlsaXR5TGVuID0gMDsKLQlpZiAoSHRDYXBhYmlsaXR5TGVuID4gMCkgewotCQlwQnNzLT5IdENhcGFiaWxpdHlMZW4gPSBIdENhcGFiaWxpdHlMZW47Ci0JCU5kaXNNb3ZlTWVtb3J5KCZwQnNzLT5IdENhcGFiaWxpdHksIHBIdENhcGFiaWxpdHksCi0JCQkgICAgICAgSHRDYXBhYmlsaXR5TGVuKTsKLQkJaWYgKEFkZEh0SW5mb0xlbiA+IDApIHsKLQkJCXBCc3MtPkFkZEh0SW5mb0xlbiA9IEFkZEh0SW5mb0xlbjsKLQkJCU5kaXNNb3ZlTWVtb3J5KCZwQnNzLT5BZGRIdEluZm8sIHBBZGRIdEluZm8sCi0JCQkJICAgICAgIEFkZEh0SW5mb0xlbik7Ci0KLQkJCWlmICgocEFkZEh0SW5mby0+Q29udHJvbENoYW4gPiAyKQotCQkJICAgICYmIChwQWRkSHRJbmZvLT5BZGRIdEluZm8uRXh0Q2hhbk9mZnNldCA9PQotCQkJCUVYVENIQV9CRUxPVykKLQkJCSAgICAmJiAocEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLkNoYW5uZWxXaWR0aCA9PQotCQkJCUJXXzQwKSkgewotCQkJCXBCc3MtPkNlbnRyYWxDaGFubmVsID0KLQkJCQkgICAgcEFkZEh0SW5mby0+Q29udHJvbENoYW4gLSAyOwotCQkJfSBlbHNlCi0JCQkgICAgaWYgKChwQWRkSHRJbmZvLT5BZGRIdEluZm8uRXh0Q2hhbk9mZnNldCA9PQotCQkJCSBFWFRDSEFfQUJPVkUpCi0JCQkJJiYgKHBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5DaGFubmVsV2lkdGggPT0KLQkJCQkgICAgQldfNDApKSB7Ci0JCQkJcEJzcy0+Q2VudHJhbENoYW5uZWwgPQotCQkJCSAgICBwQWRkSHRJbmZvLT5Db250cm9sQ2hhbiArIDI7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlCc3NDaXBoZXJQYXJzZShwQnNzKTsKLQotCS8qIG5ldyBmb3IgUU9TICovCi0JaWYgKHBFZGNhUGFybSkKLQkJTmRpc01vdmVNZW1vcnkoJnBCc3MtPkVkY2FQYXJtLCBwRWRjYVBhcm0sIHNpemVvZihzdHJ1Y3QgcnRfZWRjYV9wYXJtKSk7Ci0JZWxzZQotCQlwQnNzLT5FZGNhUGFybS5iVmFsaWQgPSBGQUxTRTsKLQlpZiAocFFvc0NhcGFiaWxpdHkpCi0JCU5kaXNNb3ZlTWVtb3J5KCZwQnNzLT5Rb3NDYXBhYmlsaXR5LCBwUW9zQ2FwYWJpbGl0eSwKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHJ0X3Fvc19jYXBhYmlsaXR5X3Bhcm0pKTsKLQllbHNlCi0JCXBCc3MtPlFvc0NhcGFiaWxpdHkuYlZhbGlkID0gRkFMU0U7Ci0JaWYgKHBRYnNzTG9hZCkKLQkJTmRpc01vdmVNZW1vcnkoJnBCc3MtPlFic3NMb2FkLCBwUWJzc0xvYWQsCi0JCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBydF9xYnNzX2xvYWRfcGFybSkpOwotCWVsc2UKLQkJcEJzcy0+UWJzc0xvYWQuYlZhbGlkID0gRkFMU0U7Ci0KLQl7Ci0JCXN0cnVjdCBydF9laWQgKiBwRWlkOwotCQl1MTYgTGVuZ3RoID0gMDsKLQotCQlOZGlzWmVyb01lbW9yeSgmcEJzcy0+V3BhSUUuSUVbMF0sIE1BWF9DVVNUT01fTEVOKTsKLQkJTmRpc1plcm9NZW1vcnkoJnBCc3MtPlJzbklFLklFWzBdLCBNQVhfQ1VTVE9NX0xFTik7Ci0JCXBFaWQgPSAoc3RydWN0IHJ0X2VpZCAqKSBwVklFOwotCQl3aGlsZSAoKExlbmd0aCArIDIgKyAodTE2KXBFaWQtPkxlbikgPD0gTGVuZ3RoVklFKSB7Ci0JCQlzd2l0Y2ggKHBFaWQtPkVpZCkgewotCQkJY2FzZSBJRV9XUEE6Ci0JCQkJaWYgKE5kaXNFcXVhbE1lbW9yeShwRWlkLT5PY3RldCwgV1BBX09VSSwgNCkpIHsKLQkJCQkJaWYgKChwRWlkLT5MZW4gKyAyKSA+IE1BWF9DVVNUT01fTEVOKSB7Ci0JCQkJCQlwQnNzLT5XcGFJRS5JRUxlbiA9IDA7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCQlwQnNzLT5XcGFJRS5JRUxlbiA9IHBFaWQtPkxlbiArIDI7Ci0JCQkJCU5kaXNNb3ZlTWVtb3J5KHBCc3MtPldwYUlFLklFLCBwRWlkLAotCQkJCQkJICAgICAgIHBCc3MtPldwYUlFLklFTGVuKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIElFX1JTTjoKLQkJCQlpZiAoTmRpc0VxdWFsTWVtb3J5Ci0JCQkJICAgIChwRWlkLT5PY3RldCArIDIsIFJTTl9PVUksIDMpKSB7Ci0JCQkJCWlmICgocEVpZC0+TGVuICsgMikgPiBNQVhfQ1VTVE9NX0xFTikgewotCQkJCQkJcEJzcy0+UnNuSUUuSUVMZW4gPSAwOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQkJcEJzcy0+UnNuSUUuSUVMZW4gPSBwRWlkLT5MZW4gKyAyOwotCQkJCQlOZGlzTW92ZU1lbW9yeShwQnNzLT5Sc25JRS5JRSwgcEVpZCwKLQkJCQkJCSAgICAgICBwQnNzLT5Sc25JRS5JRUxlbik7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJfQotCQkJTGVuZ3RoID0gTGVuZ3RoICsgMiArICh1MTYpcEVpZC0+TGVuOwkvKiBFaWRbMV0gKyBMZW5bMV0rIGNvbnRlbnRbTGVuXSAqLwotCQkJcEVpZCA9IChzdHJ1Y3QgcnRfZWlkICopICgodTggKikgcEVpZCArIDIgKyBwRWlkLT5MZW4pOwotCQl9Ci0JfQotfQotCi0vKiEKLSAqCVxicmllZiBpbnNlcnQgYW4gZW50cnkgaW50byB0aGUgYnNzIHRhYmxlCi0gKglccGFyYW0gcF90YWIgVGhlIEJTUyB0YWJsZQotICoJXHBhcmFtIEJzc2lkIEJTU0lECi0gKglccGFyYW0gc3NpZCBTU0lECi0gKglccGFyYW0gc3NpZF9sZW4gTGVuZ3RoIG9mIFNTSUQKLSAqCVxwYXJhbSBic3NfdHlwZQotICoJXHBhcmFtIGJlYWNvbl9wZXJpb2QKLSAqCVxwYXJhbSB0aW1lc3RhbXAKLSAqCVxwYXJhbSBwX2NmCi0gKglccGFyYW0gYXRpbV93aW4KLSAqCVxwYXJhbSBjYXAKLSAqCVxwYXJhbSByYXRlcwotICoJXHBhcmFtIHJhdGVzX2xlbgotICoJXHBhcmFtIGNoYW5uZWxfaWR4Ci0gKglccmV0dXJuIG5vbmUKLSAqCVxwcmUKLSAqCVxwb3N0Ci0gKglcbm90ZSBJZiBTU0lEIGlzIGlkZW50aWNhbCwgdGhlIG9sZCBlbnRyeSB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSBuZXcgb25lCi0KLSBJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotICovCi11bnNpZ25lZCBsb25nIEJzc1RhYmxlU2V0RW50cnkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfYnNzX3RhYmxlICpUYWIsIHU4ICpwQnNzaWQsIGNoYXIgU3NpZFtdLCB1OCBTc2lkTGVuLCB1OCBCc3NUeXBlLCB1MTYgQmVhY29uUGVyaW9kLCBzdHJ1Y3QgcnRfY2ZfcGFybSAqIENmUGFybSwgdTE2IEF0aW1XaW4sIHUxNiBDYXBhYmlsaXR5SW5mbywgdTggU3VwUmF0ZVtdLCB1OCBTdXBSYXRlTGVuLCB1OCBFeHRSYXRlW10sIHU4IEV4dFJhdGVMZW4sIHN0cnVjdCBydF9odF9jYXBhYmlsaXR5X2llICogcEh0Q2FwYWJpbGl0eSwgc3RydWN0IHJ0X2FkZF9odF9pbmZvX2llICogcEFkZEh0SW5mbywJLyogQVAgbWlnaHQgdXNlIHRoaXMgYWRkaXRpb25hbCBodCBpbmZvIElFICovCi0JCSAgICAgICB1OCBIdENhcGFiaWxpdHlMZW4sCi0JCSAgICAgICB1OCBBZGRIdEluZm9MZW4sCi0JCSAgICAgICB1OCBOZXdFeHRDaGFuT2Zmc2V0LAotCQkgICAgICAgdTggQ2hhbm5lbE5vLAotCQkgICAgICAgY2hhciBSc3NpLAotCQkgICAgICAgSU4gTEFSR0VfSU5URUdFUiBUaW1lU3RhbXAsCi0JCSAgICAgICB1OCBDa2lwRmxhZywKLQkJICAgICAgIHN0cnVjdCBydF9lZGNhX3Bhcm0gKnBFZGNhUGFybSwKLQkJICAgICAgIHN0cnVjdCBydF9xb3NfY2FwYWJpbGl0eV9wYXJtICpwUW9zQ2FwYWJpbGl0eSwKLQkJICAgICAgIHN0cnVjdCBydF9xYnNzX2xvYWRfcGFybSAqcFFic3NMb2FkLAotCQkgICAgICAgdTE2IExlbmd0aFZJRSwgc3RydWN0IHJ0X25kaXNfODAyXzExX3ZhcmlhYmxlX2llcyAqcFZJRSkKLXsKLQl1bnNpZ25lZCBsb25nIElkeDsKLQotCUlkeCA9Ci0JICAgIEJzc1RhYmxlU2VhcmNoV2l0aFNTSUQoVGFiLCBwQnNzaWQsICh1OCAqKSBTc2lkLCBTc2lkTGVuLAotCQkJCSAgIENoYW5uZWxObyk7Ci0JaWYgKElkeCA9PSBCU1NfTk9UX0ZPVU5EKSB7Ci0JCWlmIChUYWItPkJzc05yID49IE1BWF9MRU5fT0ZfQlNTX1RBQkxFKSB7Ci0JCQkvKiAqLwotCQkJLyogSXQgbWF5IGhhcHBlbiB3aGVuIEJTUyBUYWJsZSB3YXMgZnVsbC4gKi8KLQkJCS8qIFRoZSBkZXNpcmVkIEFQIHdpbGwgbm90IGJlIGFkZGVkIGludG8gQlNTIFRhYmxlICovCi0JCQkvKiBJbiB0aGlzIGNhc2UsIGlmIHdlIGZvdW5kIHRoZSBkZXNpcmVkIEFQIHRoZW4gb3ZlcndyaXRlIEJTUyBUYWJsZS4gKi8KLQkJCS8qICovCi0JCQlpZiAoIU9QU1RBVFVTX1RFU1RfRkxBRwotCQkJICAgIChwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSkgewotCQkJCWlmIChNQUNfQUREUl9FUVVBTChwQWQtPk1sbWVBdXguQnNzaWQsIHBCc3NpZCkKLQkJCQkgICAgfHwgU1NJRF9FUVVBTChwQWQtPk1sbWVBdXguU3NpZCwKLQkJCQkJCSAgcEFkLT5NbG1lQXV4LlNzaWRMZW4sIFNzaWQsCi0JCQkJCQkgIFNzaWRMZW4pKSB7Ci0JCQkJCUlkeCA9IFRhYi0+QnNzT3ZlcmxhcE5yOwotCQkJCQlCc3NFbnRyeVNldChwQWQsICZUYWItPkJzc0VudHJ5W0lkeF0sCi0JCQkJCQkgICAgcEJzc2lkLCBTc2lkLCBTc2lkTGVuLAotCQkJCQkJICAgIEJzc1R5cGUsIEJlYWNvblBlcmlvZCwKLQkJCQkJCSAgICBDZlBhcm0sIEF0aW1XaW4sCi0JCQkJCQkgICAgQ2FwYWJpbGl0eUluZm8sIFN1cFJhdGUsCi0JCQkJCQkgICAgU3VwUmF0ZUxlbiwgRXh0UmF0ZSwKLQkJCQkJCSAgICBFeHRSYXRlTGVuLCBwSHRDYXBhYmlsaXR5LAotCQkJCQkJICAgIHBBZGRIdEluZm8sIEh0Q2FwYWJpbGl0eUxlbiwKLQkJCQkJCSAgICBBZGRIdEluZm9MZW4sCi0JCQkJCQkgICAgTmV3RXh0Q2hhbk9mZnNldCwgQ2hhbm5lbE5vLAotCQkJCQkJICAgIFJzc2ksIFRpbWVTdGFtcCwgQ2tpcEZsYWcsCi0JCQkJCQkgICAgcEVkY2FQYXJtLCBwUW9zQ2FwYWJpbGl0eSwKLQkJCQkJCSAgICBwUWJzc0xvYWQsIExlbmd0aFZJRSwgcFZJRSk7Ci0JCQkJCVRhYi0+QnNzT3ZlcmxhcE5yID0KLQkJCQkJICAgIChUYWItPkJzc092ZXJsYXBOcisrKSAlCi0JCQkJCSAgICBNQVhfTEVOX09GX0JTU19UQUJMRTsKLQkJCQl9Ci0JCQkJcmV0dXJuIElkeDsKLQkJCX0gZWxzZSB7Ci0JCQkJcmV0dXJuIEJTU19OT1RfRk9VTkQ7Ci0JCQl9Ci0JCX0KLQkJSWR4ID0gVGFiLT5Cc3NOcjsKLQkJQnNzRW50cnlTZXQocEFkLCAmVGFiLT5Cc3NFbnRyeVtJZHhdLCBwQnNzaWQsIFNzaWQsIFNzaWRMZW4sCi0JCQkgICAgQnNzVHlwZSwgQmVhY29uUGVyaW9kLCBDZlBhcm0sIEF0aW1XaW4sCi0JCQkgICAgQ2FwYWJpbGl0eUluZm8sIFN1cFJhdGUsIFN1cFJhdGVMZW4sIEV4dFJhdGUsCi0JCQkgICAgRXh0UmF0ZUxlbiwgcEh0Q2FwYWJpbGl0eSwgcEFkZEh0SW5mbywKLQkJCSAgICBIdENhcGFiaWxpdHlMZW4sIEFkZEh0SW5mb0xlbiwgTmV3RXh0Q2hhbk9mZnNldCwKLQkJCSAgICBDaGFubmVsTm8sIFJzc2ksIFRpbWVTdGFtcCwgQ2tpcEZsYWcsIHBFZGNhUGFybSwKLQkJCSAgICBwUW9zQ2FwYWJpbGl0eSwgcFFic3NMb2FkLCBMZW5ndGhWSUUsIHBWSUUpOwotCQlUYWItPkJzc05yKys7Ci0JfSBlbHNlIHsKLQkJLyogYXZvaWQgIEhpZGRlbiBTU0lEIGZvcm0gYmVhY29uIHRvIG92ZXJ3aXJpdGUgY29ycmVjdCBTU0lEIGZyb20gcHJvYmUgcmVzcG9uc2UgKi8KLQkJaWYgKChTU0lEX0VRVUFMCi0JCSAgICAgKFNzaWQsIFNzaWRMZW4sIFRhYi0+QnNzRW50cnlbSWR4XS5Tc2lkLAotCQkgICAgICBUYWItPkJzc0VudHJ5W0lkeF0uU3NpZExlbikpCi0JCSAgICB8fAotCQkgICAgKE5kaXNFcXVhbE1lbW9yeQotCQkgICAgIChUYWItPkJzc0VudHJ5W0lkeF0uU3NpZCwgWmVyb1NzaWQsCi0JCSAgICAgIFRhYi0+QnNzRW50cnlbSWR4XS5Tc2lkTGVuKSkpIHsKLQkJCUJzc0VudHJ5U2V0KHBBZCwgJlRhYi0+QnNzRW50cnlbSWR4XSwgcEJzc2lkLCBTc2lkLAotCQkJCSAgICBTc2lkTGVuLCBCc3NUeXBlLCBCZWFjb25QZXJpb2QsIENmUGFybSwKLQkJCQkgICAgQXRpbVdpbiwgQ2FwYWJpbGl0eUluZm8sIFN1cFJhdGUsCi0JCQkJICAgIFN1cFJhdGVMZW4sIEV4dFJhdGUsIEV4dFJhdGVMZW4sCi0JCQkJICAgIHBIdENhcGFiaWxpdHksIHBBZGRIdEluZm8sIEh0Q2FwYWJpbGl0eUxlbiwKLQkJCQkgICAgQWRkSHRJbmZvTGVuLCBOZXdFeHRDaGFuT2Zmc2V0LCBDaGFubmVsTm8sCi0JCQkJICAgIFJzc2ksIFRpbWVTdGFtcCwgQ2tpcEZsYWcsIHBFZGNhUGFybSwKLQkJCQkgICAgcFFvc0NhcGFiaWxpdHksIHBRYnNzTG9hZCwgTGVuZ3RoVklFLCBwVklFKTsKLQkJfQotCX0KLQotCXJldHVybiBJZHg7Ci19Ci0KLS8qIElSUUwgPSBESVNQQVRDSF9MRVZFTCAqLwotdm9pZCBCc3NUYWJsZVNzaWRTb3J0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgICAgc3RydWN0IHJ0X2Jzc190YWJsZSAqT3V0VGFiLCBjaGFyIFNzaWRbXSwgdTggU3NpZExlbikKLXsKLQlpbnQgaTsKLQlCc3NUYWJsZUluaXQoT3V0VGFiKTsKLQotCWZvciAoaSA9IDA7IGkgPCBwQWQtPlNjYW5UYWIuQnNzTnI7IGkrKykgewotCQlzdHJ1Y3QgcnRfYnNzX2VudHJ5ICpwSW5Cc3MgPSAmcEFkLT5TY2FuVGFiLkJzc0VudHJ5W2ldOwotCQlCT09MRUFOIGJJc0hpZGRlbkFwSW5jbHVkZWQgPSBGQUxTRTsKLQotCQlpZiAoKChwQWQtPkNvbW1vbkNmZy5iSUVFRTgwMjExSCA9PSAxKSAmJgotCQkgICAgIChwQWQtPk1sbWVBdXguQ2hhbm5lbCA+IDE0KSAmJgotCQkgICAgIFJhZGFyQ2hhbm5lbENoZWNrKHBBZCwgcEluQnNzLT5DaGFubmVsKSkKLQkJICAgICkgewotCQkJaWYgKHBJbkJzcy0+SGlkZGVuKQotCQkJCWJJc0hpZGRlbkFwSW5jbHVkZWQgPSBUUlVFOwotCQl9Ci0KLQkJaWYgKChwSW5Cc3MtPkJzc1R5cGUgPT0gcEFkLT5TdGFDZmcuQnNzVHlwZSkgJiYKLQkJICAgIChTU0lEX0VRVUFMKFNzaWQsIFNzaWRMZW4sIHBJbkJzcy0+U3NpZCwgcEluQnNzLT5Tc2lkTGVuKQotCQkgICAgIHx8IGJJc0hpZGRlbkFwSW5jbHVkZWQpKSB7Ci0JCQlzdHJ1Y3QgcnRfYnNzX2VudHJ5ICpwT3V0QnNzID0gJk91dFRhYi0+QnNzRW50cnlbT3V0VGFiLT5Cc3NOcl07Ci0KLQkJCS8qIDIuNEcvNUcgTiBvbmx5IG1vZGUgKi8KLQkJCWlmICgocEluQnNzLT5IdENhcGFiaWxpdHlMZW4gPT0gMCkgJiYKLQkJCSAgICAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExTl8yXzRHKQotCQkJICAgICB8fCAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFOXzVHKSkpIHsKLQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkJICgiU1RBIGlzIGluIE4tb25seSBNb2RlLCB0aGlzIEFQIGRvbid0IGhhdmUgSHQgY2FwYWJpbGl0eSBpbiBCZWFjb24uXG4iKSk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQkvKiBOZXcgZm9yIFdQQTIgKi8KLQkJCS8qIENoZWNrIHRoZSBBdXRobW9kZSBmaXJzdCAqLwotCQkJaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkgewotCQkJCS8qIENoZWNrIEF1dGhNb2RlIGFuZCBBdXRoTW9kZUF1eCBmb3IgbWF0Y2hpbmcsIGluIGNhc2UgQVAgc3VwcG9ydCBkdWFsLW1vZGUgKi8KLQkJCQlpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlICE9IHBJbkJzcy0+QXV0aE1vZGUpCi0JCQkJICAgICYmIChwQWQtPlN0YUNmZy5BdXRoTW9kZSAhPQotCQkJCQlwSW5Cc3MtPkF1dGhNb2RlQXV4KSkKLQkJCQkJLyogTm9uZSBtYXRjaGVkICovCi0JCQkJCWNvbnRpbnVlOwotCi0JCQkJLyogQ2hlY2sgY2lwaGVyIHN1aXRlLCBBUCBtdXN0IGhhdmUgbW9yZSBzZWN1cmVkIGNpcGhlciB0aGFuIHN0YXRpb24gc2V0dGluZyAqLwotCQkJCWlmICgocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0KLQkJCQkgICAgIE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkKLQkJCQkgICAgfHwgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09Ci0JCQkJCU5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykpIHsKLQkJCQkJLyogSWYgaXQncyBub3QgbWl4ZWQgbW9kZSwgd2Ugc2hvdWxkIG9ubHkgbGV0IEJTUyBwYXNzIHdpdGggdGhlIHNhbWUgZW5jcnlwdGlvbiAqLwotCQkJCQlpZiAocEluQnNzLT5XUEEuYk1peE1vZGUgPT0gRkFMU0UpCi0JCQkJCQlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzICE9Ci0JCQkJCQkgICAgcEluQnNzLT5XUEEuR3JvdXBDaXBoZXIpCi0JCQkJCQkJY29udGludWU7Ci0KLQkJCQkJLyogY2hlY2sgZ3JvdXAgY2lwaGVyICovCi0JCQkJCWlmICgocEFkLT5TdGFDZmcuV2VwU3RhdHVzIDwKLQkJCQkJICAgICBwSW5Cc3MtPldQQS5Hcm91cENpcGhlcikKLQkJCQkJICAgICYmIChwSW5Cc3MtPldQQS5Hcm91cENpcGhlciAhPQotCQkJCQkJTmRpczgwMl8xMUdyb3VwV0VQNDBFbmFibGVkKQotCQkJCQkgICAgJiYgKHBJbkJzcy0+V1BBLkdyb3VwQ2lwaGVyICE9Ci0JCQkJCQlOZGlzODAyXzExR3JvdXBXRVAxMDRFbmFibGVkKSkKLQkJCQkJCWNvbnRpbnVlOwotCi0JCQkJCS8qIGNoZWNrIHBhaXJ3aXNlIGNpcGhlciwgc2tpcCBpZiBub25lIG1hdGNoZWQgKi8KLQkJCQkJLyogSWYgcHJvZmlsZSBzZXQgdG8gQUVTLCBsZXQgaXQgcGFzcyB3aXRob3V0IHF1ZXN0aW9uLiAqLwotCQkJCQkvKiBJZiBwcm9maWxlIHNldCB0byBUS0lQLCB3ZSBtdXN0IGZpbmQgb25lIG1hdGVjaGVkICovCi0JCQkJCWlmICgocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09Ci0JCQkJCSAgICAgTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkKLQkJCQkJICAgICYmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgIT0KLQkJCQkJCXBJbkJzcy0+V1BBLlBhaXJDaXBoZXIpCi0JCQkJCSAgICAmJiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzICE9Ci0JCQkJCQlwSW5Cc3MtPldQQS5QYWlyQ2lwaGVyQXV4KSkKLQkJCQkJCWNvbnRpbnVlOwotCQkJCX0gZWxzZQotCQkJCSAgICBpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09Ci0JCQkJCSBOZGlzODAyXzExQXV0aE1vZGVXUEEyKQotCQkJCQl8fCAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0KLQkJCQkJICAgIE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spKSB7Ci0JCQkJCS8qIElmIGl0J3Mgbm90IG1peGVkIG1vZGUsIHdlIHNob3VsZCBvbmx5IGxldCBCU1MgcGFzcyB3aXRoIHRoZSBzYW1lIGVuY3J5cHRpb24gKi8KLQkJCQkJaWYgKHBJbkJzcy0+V1BBMi5iTWl4TW9kZSA9PSBGQUxTRSkKLQkJCQkJCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgIT0KLQkJCQkJCSAgICBwSW5Cc3MtPldQQTIuR3JvdXBDaXBoZXIpCi0JCQkJCQkJY29udGludWU7Ci0KLQkJCQkJLyogY2hlY2sgZ3JvdXAgY2lwaGVyICovCi0JCQkJCWlmICgocEFkLT5TdGFDZmcuV2VwU3RhdHVzIDwKLQkJCQkJICAgICBwSW5Cc3MtPldQQS5Hcm91cENpcGhlcikKLQkJCQkJICAgICYmIChwSW5Cc3MtPldQQTIuR3JvdXBDaXBoZXIgIT0KLQkJCQkJCU5kaXM4MDJfMTFHcm91cFdFUDQwRW5hYmxlZCkKLQkJCQkJICAgICYmIChwSW5Cc3MtPldQQTIuR3JvdXBDaXBoZXIgIT0KLQkJCQkJCU5kaXM4MDJfMTFHcm91cFdFUDEwNEVuYWJsZWQpKQotCQkJCQkJY29udGludWU7Ci0KLQkJCQkJLyogY2hlY2sgcGFpcndpc2UgY2lwaGVyLCBza2lwIGlmIG5vbmUgbWF0Y2hlZCAqLwotCQkJCQkvKiBJZiBwcm9maWxlIHNldCB0byBBRVMsIGxldCBpdCBwYXNzIHdpdGhvdXQgcXVlc3Rpb24uICovCi0JCQkJCS8qIElmIHByb2ZpbGUgc2V0IHRvIFRLSVAsIHdlIG11c3QgZmluZCBvbmUgbWF0ZWNoZWQgKi8KLQkJCQkJaWYgKChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0KLQkJCQkJICAgICBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKQotCQkJCQkgICAgJiYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAhPQotCQkJCQkJcEluQnNzLT5XUEEyLlBhaXJDaXBoZXIpCi0JCQkJCSAgICAmJiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzICE9Ci0JCQkJCQlwSW5Cc3MtPldQQTIuUGFpckNpcGhlckF1eCkpCi0JCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQl9Ci0JCQkvKiBCc3MgVHlwZSBtYXRjaGVkLCBTU0lEIG1hdGNoZWQuICovCi0JCQkvKiBXZSB3aWxsIGNoZWNrIHdlcHN0YXR1cyBmb3IgcXVhbGlmaWNhdGlvbiBCc3MgKi8KLQkJCWVsc2UgaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAhPSBwSW5Cc3MtPldlcFN0YXR1cykgewotCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkgKCJTdGFDZmcuV2VwU3RhdHVzPSVkLCB3aGlsZSBwSW5Cc3MtPldlcFN0YXR1cz0lZFxuIiwKLQkJCQkJICBwQWQtPlN0YUNmZy5XZXBTdGF0dXMsCi0JCQkJCSAgcEluQnNzLT5XZXBTdGF0dXMpKTsKLQkJCQkvKiAqLwotCQkJCS8qIEZvciB0aGUgU0VTdjIgY2FzZSwgd2Ugd2lsbCBub3QgcXVhbGlmeSBXZXBTdGF0dXMuICovCi0JCQkJLyogKi8KLQkJCQlpZiAoIXBJbkJzcy0+YlNFUykKLQkJCQkJY29udGludWU7Ci0JCQl9Ci0JCQkvKiBTaW5jZSB0aGUgQVAgaXMgdXNpbmcgaGlkZGVuIFNTSUQsIGFuZCB3ZSBhcmUgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gQU5ZICovCi0JCQkvKiBJdCBkZWZpbml0ZWx5IHdpbGwgZmFpbC4gU28sIHNraXAgaXQuICovCi0JCQkvKiBDQ1ggYWxzbyByZXF1aXJlIG5vdCBldmVuIHRyeSB0byBjb25uZWN0IGl0ISAqLwotCQkJaWYgKFNzaWRMZW4gPT0gMCkKLQkJCQljb250aW51ZTsKLQotCQkJLyogSWYgYm90aCBzdGF0aW9uIGFuZCBBUCB1c2UgNDBNSHosIHN0aWxsIG5lZWQgdG8gY2hlY2sgaWYgdGhlIDQwTUhaIGJhbmQncyBsZWdhbGl0eSBpbiBteSBjb3VudHJ5IHJlZ2lvbiAqLwotCQkJLyogSWYgdGhpcyA0ME1IeiB3aWRlYmFuZCBpcyBub3QgYWxsb3dlZCBpbiBteSBjb3VudHJ5IGxpc3QsIHVzZSBiYW5kd2lkdGggMjBNSFogaW5zdGVhZCwgKi8KLQkJCWlmICgocEluQnNzLT5DZW50cmFsQ2hhbm5lbCAhPSBwSW5Cc3MtPkNoYW5uZWwpICYmCi0JCQkgICAgKHBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5CVyA9PQotCQkJICAgICBCV180MCkpIHsKLQkJCQlpZiAoUlRNUENoZWNrQ2hhbm5lbAotCQkJCSAgICAocEFkLCBwSW5Cc3MtPkNlbnRyYWxDaGFubmVsLAotCQkJCSAgICAgcEluQnNzLT5DaGFubmVsKSA9PSBGQUxTRSkgewotCQkJCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuCi0JCQkJCSAgICBCVyA9IEJXXzIwOwotCQkJCQlTZXRDb21tb25IVChwQWQpOwotCQkJCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuCi0JCQkJCSAgICBCVyA9IEJXXzQwOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWlmIChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuCi0JCQkJCSAgICBDaGFubmVsV2lkdGggPT0gQkFORF9XSURUSF8yMCkgewotCQkJCQkJU2V0Q29tbW9uSFQocEFkKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCS8qIGNvcHkgbWF0Y2hpbmcgQlNTIGZyb20gSW5UYWIgdG8gT3V0VGFiICovCi0JCQlOZGlzTW92ZU1lbW9yeShwT3V0QnNzLCBwSW5Cc3MsIHNpemVvZihzdHJ1Y3QgcnRfYnNzX2VudHJ5KSk7Ci0KLQkJCU91dFRhYi0+QnNzTnIrKzsKLQkJfSBlbHNlIGlmICgocEluQnNzLT5Cc3NUeXBlID09IHBBZC0+U3RhQ2ZnLkJzc1R5cGUpCi0JCQkgICAmJiAoU3NpZExlbiA9PSAwKSkgewotCQkJc3RydWN0IHJ0X2Jzc19lbnRyeSAqcE91dEJzcyA9ICZPdXRUYWItPkJzc0VudHJ5W091dFRhYi0+QnNzTnJdOwotCi0JCQkvKiAyLjRHLzVHIE4gb25seSBtb2RlICovCi0JCQlpZiAoKHBJbkJzcy0+SHRDYXBhYmlsaXR5TGVuID09IDApICYmCi0JCQkgICAgKChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMU5fMl80RykKLQkJCSAgICAgfHwgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExTl81RykpKSB7Ci0JCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJCSAoIlNUQSBpcyBpbiBOLW9ubHkgTW9kZSwgdGhpcyBBUCBkb24ndCBoYXZlIEh0IGNhcGFiaWxpdHkgaW4gQmVhY29uLlxuIikpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJLyogTmV3IGZvciBXUEEyICovCi0JCQkvKiBDaGVjayB0aGUgQXV0aG1vZGUgZmlyc3QgKi8KLQkJCWlmIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpIHsKLQkJCQkvKiBDaGVjayBBdXRoTW9kZSBhbmQgQXV0aE1vZGVBdXggZm9yIG1hdGNoaW5nLCBpbiBjYXNlIEFQIHN1cHBvcnQgZHVhbC1tb2RlICovCi0JCQkJaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSAhPSBwSW5Cc3MtPkF1dGhNb2RlKQotCQkJCSAgICAmJiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgIT0KLQkJCQkJcEluQnNzLT5BdXRoTW9kZUF1eCkpCi0JCQkJCS8qIE5vbmUgbWF0Y2hlZCAqLwotCQkJCQljb250aW51ZTsKLQotCQkJCS8qIENoZWNrIGNpcGhlciBzdWl0ZSwgQVAgbXVzdCBoYXZlIG1vcmUgc2VjdXJlZCBjaXBoZXIgdGhhbiBzdGF0aW9uIHNldHRpbmcgKi8KLQkJCQlpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09Ci0JCQkJICAgICBOZGlzODAyXzExQXV0aE1vZGVXUEEpCi0JCQkJICAgIHx8IChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PQotCQkJCQlOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spKSB7Ci0JCQkJCS8qIElmIGl0J3Mgbm90IG1peGVkIG1vZGUsIHdlIHNob3VsZCBvbmx5IGxldCBCU1MgcGFzcyB3aXRoIHRoZSBzYW1lIGVuY3J5cHRpb24gKi8KLQkJCQkJaWYgKHBJbkJzcy0+V1BBLmJNaXhNb2RlID09IEZBTFNFKQotCQkJCQkJaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAhPQotCQkJCQkJICAgIHBJbkJzcy0+V1BBLkdyb3VwQ2lwaGVyKQotCQkJCQkJCWNvbnRpbnVlOwotCi0JCQkJCS8qIGNoZWNrIGdyb3VwIGNpcGhlciAqLwotCQkJCQlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzIDwKLQkJCQkJICAgIHBJbkJzcy0+V1BBLkdyb3VwQ2lwaGVyKQotCQkJCQkJY29udGludWU7Ci0KLQkJCQkJLyogY2hlY2sgcGFpcndpc2UgY2lwaGVyLCBza2lwIGlmIG5vbmUgbWF0Y2hlZCAqLwotCQkJCQkvKiBJZiBwcm9maWxlIHNldCB0byBBRVMsIGxldCBpdCBwYXNzIHdpdGhvdXQgcXVlc3Rpb24uICovCi0JCQkJCS8qIElmIHByb2ZpbGUgc2V0IHRvIFRLSVAsIHdlIG11c3QgZmluZCBvbmUgbWF0ZWNoZWQgKi8KLQkJCQkJaWYgKChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0KLQkJCQkJICAgICBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKQotCQkJCQkgICAgJiYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAhPQotCQkJCQkJcEluQnNzLT5XUEEuUGFpckNpcGhlcikKLQkJCQkJICAgICYmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgIT0KLQkJCQkJCXBJbkJzcy0+V1BBLlBhaXJDaXBoZXJBdXgpKQotCQkJCQkJY29udGludWU7Ci0JCQkJfSBlbHNlCi0JCQkJICAgIGlmICgocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0KLQkJCQkJIE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIpCi0JCQkJCXx8IChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PQotCQkJCQkgICAgTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykpIHsKLQkJCQkJLyogSWYgaXQncyBub3QgbWl4ZWQgbW9kZSwgd2Ugc2hvdWxkIG9ubHkgbGV0IEJTUyBwYXNzIHdpdGggdGhlIHNhbWUgZW5jcnlwdGlvbiAqLwotCQkJCQlpZiAocEluQnNzLT5XUEEyLmJNaXhNb2RlID09IEZBTFNFKQotCQkJCQkJaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAhPQotCQkJCQkJICAgIHBJbkJzcy0+V1BBMi5Hcm91cENpcGhlcikKLQkJCQkJCQljb250aW51ZTsKLQotCQkJCQkvKiBjaGVjayBncm91cCBjaXBoZXIgKi8KLQkJCQkJaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA8Ci0JCQkJCSAgICBwSW5Cc3MtPldQQTIuR3JvdXBDaXBoZXIpCi0JCQkJCQljb250aW51ZTsKLQotCQkJCQkvKiBjaGVjayBwYWlyd2lzZSBjaXBoZXIsIHNraXAgaWYgbm9uZSBtYXRjaGVkICovCi0JCQkJCS8qIElmIHByb2ZpbGUgc2V0IHRvIEFFUywgbGV0IGl0IHBhc3Mgd2l0aG91dCBxdWVzdGlvbi4gKi8KLQkJCQkJLyogSWYgcHJvZmlsZSBzZXQgdG8gVEtJUCwgd2UgbXVzdCBmaW5kIG9uZSBtYXRlY2hlZCAqLwotCQkJCQlpZiAoKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PQotCQkJCQkgICAgIE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpCi0JCQkJCSAgICAmJiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzICE9Ci0JCQkJCQlwSW5Cc3MtPldQQTIuUGFpckNpcGhlcikKLQkJCQkJICAgICYmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgIT0KLQkJCQkJCXBJbkJzcy0+V1BBMi5QYWlyQ2lwaGVyQXV4KSkKLQkJCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCX0KLQkJCS8qIEJzcyBUeXBlIG1hdGNoZWQsIFNTSUQgbWF0Y2hlZC4gKi8KLQkJCS8qIFdlIHdpbGwgY2hlY2sgd2Vwc3RhdHVzIGZvciBxdWFsaWZpY2F0aW9uIEJzcyAqLwotCQkJZWxzZSBpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzICE9IHBJbkJzcy0+V2VwU3RhdHVzKQotCQkJCWNvbnRpbnVlOwotCi0JCQkvKiBJZiBib3RoIHN0YXRpb24gYW5kIEFQIHVzZSA0ME1Ieiwgc3RpbGwgbmVlZCB0byBjaGVjayBpZiB0aGUgNDBNSFogYmFuZCdzIGxlZ2FsaXR5IGluIG15IGNvdW50cnkgcmVnaW9uICovCi0JCQkvKiBJZiB0aGlzIDQwTUh6IHdpZGViYW5kIGlzIG5vdCBhbGxvd2VkIGluIG15IGNvdW50cnkgbGlzdCwgdXNlIGJhbmR3aWR0aCAyME1IWiBpbnN0ZWFkLCAqLwotCQkJaWYgKChwSW5Cc3MtPkNlbnRyYWxDaGFubmVsICE9IHBJbkJzcy0+Q2hhbm5lbCkgJiYKLQkJCSAgICAocEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkJXID09Ci0JCQkgICAgIEJXXzQwKSkgewotCQkJCWlmIChSVE1QQ2hlY2tDaGFubmVsCi0JCQkJICAgIChwQWQsIHBJbkJzcy0+Q2VudHJhbENoYW5uZWwsCi0JCQkJICAgICBwSW5Cc3MtPkNoYW5uZWwpID09IEZBTFNFKSB7Ci0JCQkJCXBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC4KLQkJCQkJICAgIEJXID0gQldfMjA7Ci0JCQkJCVNldENvbW1vbkhUKHBBZCk7Ci0JCQkJCXBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC4KLQkJCQkJICAgIEJXID0gQldfNDA7Ci0JCQkJfQotCQkJfQotCQkJLyogY29weSBtYXRjaGluZyBCU1MgZnJvbSBJblRhYiB0byBPdXRUYWIgKi8KLQkJCU5kaXNNb3ZlTWVtb3J5KHBPdXRCc3MsIHBJbkJzcywgc2l6ZW9mKHN0cnVjdCBydF9ic3NfZW50cnkpKTsKLQotCQkJT3V0VGFiLT5Cc3NOcisrOwotCQl9Ci0KLQkJaWYgKE91dFRhYi0+QnNzTnIgPj0gTUFYX0xFTl9PRl9CU1NfVEFCTEUpCi0JCQlicmVhazsKLQl9Ci0KLQlCc3NUYWJsZVNvcnRCeVJzc2koT3V0VGFiKTsKLX0KLQotLyogSVJRTCA9IERJU1BBVENIX0xFVkVMICovCi12b2lkIEJzc1RhYmxlU29ydEJ5UnNzaShzdHJ1Y3QgcnRfYnNzX3RhYmxlICpPdXRUYWIpCi17Ci0JaW50IGksIGo7Ci0Jc3RydWN0IHJ0X2Jzc19lbnRyeSBUbXBCc3M7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgT3V0VGFiLT5Cc3NOciAtIDE7IGkrKykgewotCQlmb3IgKGogPSBpICsgMTsgaiA8IE91dFRhYi0+QnNzTnI7IGorKykgewotCQkJaWYgKE91dFRhYi0+QnNzRW50cnlbal0uUnNzaSA+IE91dFRhYi0+QnNzRW50cnlbaV0uUnNzaSkgewotCQkJCU5kaXNNb3ZlTWVtb3J5KCZUbXBCc3MsICZPdXRUYWItPkJzc0VudHJ5W2pdLAotCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBydF9ic3NfZW50cnkpKTsKLQkJCQlOZGlzTW92ZU1lbW9yeSgmT3V0VGFiLT5Cc3NFbnRyeVtqXSwKLQkJCQkJICAgICAgICZPdXRUYWItPkJzc0VudHJ5W2ldLAotCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBydF9ic3NfZW50cnkpKTsKLQkJCQlOZGlzTW92ZU1lbW9yeSgmT3V0VGFiLT5Cc3NFbnRyeVtpXSwgJlRtcEJzcywKLQkJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcnRfYnNzX2VudHJ5KSk7Ci0JCQl9Ci0JCX0KLQl9Ci19Ci0KLXZvaWQgQnNzQ2lwaGVyUGFyc2Uoc3RydWN0IHJ0X2Jzc19lbnRyeSAqcEJzcykKLXsKLQlzdHJ1Y3QgcnRfZWlkICogcEVpZDsKLQl1OCAqcFRtcDsKLQlzdHJ1Y3QgcnRfcnNuX2llX2hlYWRlciAqIHBSc25IZWFkZXI7Ci0Jc3RydWN0IHJ0X2NpcGhlcl9zdWl0ZV9zdHJ1Y3QgKiBwQ2lwaGVyOwotCXN0cnVjdCBydF9ha21fc3VpdGUgKiBwQUtNOwotCXUxNiBDb3VudDsKLQlpbnQgTGVuZ3RoOwotCU5ESVNfODAyXzExX0VOQ1JZUFRJT05fU1RBVFVTIFRtcENpcGhlcjsKLQotCS8qICovCi0JLyogV2VwU3RhdHVzIHdpbGwgYmUgcmVzZXQgbGF0ZXIsIGlmIEFQIGFubm91bmNlIFRLSVAgb3IgQUVTIG9uIHRoZSBiZWFjb24gZnJhbWUuICovCi0JLyogKi8KLQlpZiAocEJzcy0+UHJpdmFjeSkgewotCQlwQnNzLT5XZXBTdGF0dXMgPSBOZGlzODAyXzExV0VQRW5hYmxlZDsKLQl9IGVsc2UgewotCQlwQnNzLT5XZXBTdGF0dXMgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7Ci0JfQotCS8qIFNldCBkZWZhdWx0IHRvIGRpc2FibGUgJiBvcGVuIGF1dGhlbnRpY2F0aW9uIGJlZm9yZSBwYXJzaW5nIHZhcmlhYmxlIElFICovCi0JcEJzcy0+QXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVPcGVuOwotCXBCc3MtPkF1dGhNb2RlQXV4ID0gTmRpczgwMl8xMUF1dGhNb2RlT3BlbjsKLQotCS8qIEluaXQgV1BBIHNldHRpbmcgKi8KLQlwQnNzLT5XUEEuUGFpckNpcGhlciA9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZDsKLQlwQnNzLT5XUEEuUGFpckNpcGhlckF1eCA9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZDsKLQlwQnNzLT5XUEEuR3JvdXBDaXBoZXIgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7Ci0JcEJzcy0+V1BBLlJzbkNhcGFiaWxpdHkgPSAwOwotCXBCc3MtPldQQS5iTWl4TW9kZSA9IEZBTFNFOwotCi0JLyogSW5pdCBXUEEyIHNldHRpbmcgKi8KLQlwQnNzLT5XUEEyLlBhaXJDaXBoZXIgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7Ci0JcEJzcy0+V1BBMi5QYWlyQ2lwaGVyQXV4ID0gTmRpczgwMl8xMVdFUERpc2FibGVkOwotCXBCc3MtPldQQTIuR3JvdXBDaXBoZXIgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7Ci0JcEJzcy0+V1BBMi5Sc25DYXBhYmlsaXR5ID0gMDsKLQlwQnNzLT5XUEEyLmJNaXhNb2RlID0gRkFMU0U7Ci0KLQlMZW5ndGggPSAoaW50KXBCc3MtPlZhcklFTGVuOwotCi0Jd2hpbGUgKExlbmd0aCA+IDApIHsKLQkJLyogUGFyc2UgY2lwaGVyIHN1aXRlIGJhc2Ugb24gV1BBMSAmIFdQQTIsIHRoZXkgc2hvdWxkIGJlIHBhcnNlZCBkaWZmZXJlbnRseSAqLwotCQlwVG1wID0gKCh1OCAqKXBCc3MtPlZhcklFcykgKyBwQnNzLT5WYXJJRUxlbiAtIExlbmd0aDsKLQkJcEVpZCA9IChzdHJ1Y3QgcnRfZWlkICopIHBUbXA7Ci0JCXN3aXRjaCAocEVpZC0+RWlkKSB7Ci0JCWNhc2UgSUVfV1BBOgotCQkJaWYgKE5kaXNFcXVhbE1lbW9yeShwRWlkLT5PY3RldCwgU0VTX09VSSwgMykKLQkJCSAgICAmJiAocEVpZC0+TGVuID09IDcpKSB7Ci0JCQkJcEJzcy0+YlNFUyA9IFRSVUU7Ci0JCQkJYnJlYWs7Ci0JCQl9IGVsc2UgaWYgKE5kaXNFcXVhbE1lbW9yeShwRWlkLT5PY3RldCwgV1BBX09VSSwgNCkgIT0KLQkJCQkgICAxKSB7Ci0JCQkJLyogaWYgdW5zdXBwb3J0ZWQgdmVuZG9yIHNwZWNpZmljIElFICovCi0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQkvKiBTa2lwIE9VSSwgdmVyc2lvbiwgYW5kIG11bHRpY2FzdCBzdWl0ZSAqLwotCQkJLyogVGhpcyBwYXJ0IHNob3VsZCBiZSBpbXByb3ZlZCBpbiB0aGUgZnV0dXJlIHdoZW4gQVAgc3VwcG9ydGVkIG11bHRpcGxlIGNpcGhlciBzdWl0ZS4gKi8KLQkJCS8qIEZvciBub3csIGl0J3MgT0sgc2luY2UgYWxtb3N0IGFsbCBBUHMgaGF2ZSBmaXhlZCBjaXBoZXIgc3VpdGUgc3VwcG9ydGVkLiAqLwotCQkJLyogcFRtcCA9ICh1OCAqKXBFaWQtPk9jdGV0OyAqLwotCQkJcFRtcCArPSAxMTsKLQotCQkJLyogQ2lwaGVyIFN1aXRlIFNlbGVjdG9ycyBmcm9tIFNwZWMgUDgwMi4xMWkvRDMuMiBQMjYuICovCi0JCQkvKiAgICAgIFZhbHVlICAgICAgTWVhbmluZyAqLwotCQkJLyogICAgICAwICAgICAgICAgICAgICAgICAgICAgICBOb25lICovCi0JCQkvKiAgICAgIDEgICAgICAgICAgICAgICAgICAgICAgIFdFUC00MCAqLwotCQkJLyogICAgICAyICAgICAgICAgICAgICAgICAgICAgICBUa2lwICovCi0JCQkvKiAgICAgIDMgICAgICAgICAgICAgICAgICAgICAgIFdSQVAgKi8KLQkJCS8qICAgICAgNCAgICAgICAgICAgICAgICAgICAgICAgQUVTICovCi0JCQkvKiAgICAgIDUgICAgICAgICAgICAgICAgICAgICAgIFdFUC0xMDQgKi8KLQkJCS8qIFBhcnNlIGdyb3VwIGNpcGhlciAqLwotCQkJc3dpdGNoICgqcFRtcCkgewotCQkJY2FzZSAxOgotCQkJCXBCc3MtPldQQS5Hcm91cENpcGhlciA9Ci0JCQkJICAgIE5kaXM4MDJfMTFHcm91cFdFUDQwRW5hYmxlZDsKLQkJCQlicmVhazsKLQkJCWNhc2UgNToKLQkJCQlwQnNzLT5XUEEuR3JvdXBDaXBoZXIgPQotCQkJCSAgICBOZGlzODAyXzExR3JvdXBXRVAxMDRFbmFibGVkOwotCQkJCWJyZWFrOwotCQkJY2FzZSAyOgotCQkJCXBCc3MtPldQQS5Hcm91cENpcGhlciA9Ci0JCQkJICAgIE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDQ6Ci0JCQkJcEJzcy0+V1BBLkdyb3VwQ2lwaGVyID0KLQkJCQkgICAgTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZDsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQkvKiBudW1iZXIgb2YgdW5pY2FzdCBzdWl0ZSAqLwotCQkJcFRtcCArPSAxOwotCi0JCQkvKiBza2lwIGFsbCB1bmljYXN0IGNpcGhlciBzdWl0ZXMgKi8KLQkJCS8qQ291bnQgPSAqKHUxNiAqKXBUbXA7ICovCi0JCQlDb3VudCA9IChwVG1wWzFdIDw8IDgpICsgcFRtcFswXTsKLQkJCXBUbXAgKz0gc2l6ZW9mKHUxNik7Ci0KLQkJCS8qIFBhcnNpbmcgYWxsIHVuaWNhc3QgY2lwaGVyIHN1aXRlICovCi0JCQl3aGlsZSAoQ291bnQgPiAwKSB7Ci0JCQkJLyogU2tpcCBPVUkgKi8KLQkJCQlwVG1wICs9IDM7Ci0JCQkJVG1wQ2lwaGVyID0gTmRpczgwMl8xMVdFUERpc2FibGVkOwotCQkJCXN3aXRjaCAoKnBUbXApIHsKLQkJCQljYXNlIDE6Ci0JCQkJY2FzZSA1OgkvKiBBbHRob3VnaCBXRVAgaXMgbm90IGFsbG93ZWQgaW4gV1BBIHJlbGF0ZWQgYXV0aCBtb2RlLCB3ZSBwYXJzZSBpdCBhbnl3YXkgKi8KLQkJCQkJVG1wQ2lwaGVyID0KLQkJCQkJICAgIE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQ7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgMjoKLQkJCQkJVG1wQ2lwaGVyID0KLQkJCQkJICAgIE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgNDoKLQkJCQkJVG1wQ2lwaGVyID0KLQkJCQkJICAgIE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQ7Ci0JCQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlpZiAoVG1wQ2lwaGVyID4gcEJzcy0+V1BBLlBhaXJDaXBoZXIpIHsKLQkJCQkJLyogTW92ZSB0aGUgbG93ZXIgY2lwaGVyIHN1aXRlIHRvIFBhaXJDaXBoZXJBdXggKi8KLQkJCQkJcEJzcy0+V1BBLlBhaXJDaXBoZXJBdXggPQotCQkJCQkgICAgcEJzcy0+V1BBLlBhaXJDaXBoZXI7Ci0JCQkJCXBCc3MtPldQQS5QYWlyQ2lwaGVyID0gVG1wQ2lwaGVyOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXBCc3MtPldQQS5QYWlyQ2lwaGVyQXV4ID0gVG1wQ2lwaGVyOwotCQkJCX0KLQkJCQlwVG1wKys7Ci0JCQkJQ291bnQtLTsKLQkJCX0KLQotCQkJLyogNC4gZ2V0IEFLTSBzdWl0ZSBjb3VudHMgKi8KLQkJCS8qQ291bnQgPSAqKHUxNiAqKXBUbXA7ICovCi0JCQlDb3VudCA9IChwVG1wWzFdIDw8IDgpICsgcFRtcFswXTsKLQkJCXBUbXAgKz0gc2l6ZW9mKHUxNik7Ci0JCQlwVG1wICs9IDM7Ci0KLQkJCXN3aXRjaCAoKnBUbXApIHsKLQkJCWNhc2UgMToKLQkJCQkvKiBTZXQgQVAgc3VwcG9ydCBXUEEtZW50ZXJwcmlzZSBtb2RlICovCi0JCQkJaWYgKHBCc3MtPkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZU9wZW4pCi0JCQkJCXBCc3MtPkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBOwotCQkJCWVsc2UKLQkJCQkJcEJzcy0+QXV0aE1vZGVBdXggPQotCQkJCQkgICAgTmRpczgwMl8xMUF1dGhNb2RlV1BBOwotCQkJCWJyZWFrOwotCQkJY2FzZSAyOgotCQkJCS8qIFNldCBBUCBzdXBwb3J0IFdQQS1QU0sgbW9kZSAqLwotCQkJCWlmIChwQnNzLT5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVPcGVuKQotCQkJCQlwQnNzLT5BdXRoTW9kZSA9Ci0JCQkJCSAgICBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0s7Ci0JCQkJZWxzZQotCQkJCQlwQnNzLT5BdXRoTW9kZUF1eCA9Ci0JCQkJCSAgICBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0s7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCWJyZWFrOwotCQkJfQotCQkJcFRtcCArPSAxOwotCi0JCQkvKiBGaXhlZCBmb3IgV1BBLU5vbmUgKi8KLQkJCWlmIChwQnNzLT5Cc3NUeXBlID09IEJTU19BREhPQykgewotCQkJCXBCc3MtPkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZTsKLQkJCQlwQnNzLT5BdXRoTW9kZUF1eCA9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmU7Ci0JCQkJcEJzcy0+V2VwU3RhdHVzID0gcEJzcy0+V1BBLkdyb3VwQ2lwaGVyOwotCQkJCS8qIFBhdGNoZWQgYnVncyBmb3Igb2xkIGRyaXZlciAqLwotCQkJCWlmIChwQnNzLT5XUEEuUGFpckNpcGhlckF1eCA9PQotCQkJCSAgICBOZGlzODAyXzExV0VQRGlzYWJsZWQpCi0JCQkJCXBCc3MtPldQQS5QYWlyQ2lwaGVyQXV4ID0KLQkJCQkJICAgIHBCc3MtPldQQS5Hcm91cENpcGhlcjsKLQkJCX0gZWxzZQotCQkJCXBCc3MtPldlcFN0YXR1cyA9IHBCc3MtPldQQS5QYWlyQ2lwaGVyOwotCi0JCQkvKiBDaGVjayB0aGUgUGFpciAmIEdyb3VwLCBpZiBkaWZmZXJlbnQsIHR1cm4gb24gbWl4ZWQgbW9kZSBmbGFnICovCi0JCQlpZiAocEJzcy0+V1BBLkdyb3VwQ2lwaGVyICE9IHBCc3MtPldQQS5QYWlyQ2lwaGVyKQotCQkJCXBCc3MtPldQQS5iTWl4TW9kZSA9IFRSVUU7Ci0KLQkJCWJyZWFrOwotCi0JCWNhc2UgSUVfUlNOOgotCQkJcFJzbkhlYWRlciA9IChzdHJ1Y3QgcnRfcnNuX2llX2hlYWRlciAqKSBwVG1wOwotCi0JCQkvKiAwLiBWZXJzaW9uIG11c3QgYmUgMSAqLwotCQkJaWYgKGxlMmNwdTE2KHBSc25IZWFkZXItPlZlcnNpb24pICE9IDEpCi0JCQkJYnJlYWs7Ci0JCQlwVG1wICs9IHNpemVvZihzdHJ1Y3QgcnRfcnNuX2llX2hlYWRlcik7Ci0KLQkJCS8qIDEuIENoZWNrIGdyb3VwIGNpcGhlciAqLwotCQkJcENpcGhlciA9IChzdHJ1Y3QgcnRfY2lwaGVyX3N1aXRlX3N0cnVjdCAqKSBwVG1wOwotCQkJaWYgKCFSVE1QRXF1YWxNZW1vcnkocFRtcCwgUlNOX09VSSwgMykpCi0JCQkJYnJlYWs7Ci0KLQkJCS8qIFBhcnNlIGdyb3VwIGNpcGhlciAqLwotCQkJc3dpdGNoIChwQ2lwaGVyLT5UeXBlKSB7Ci0JCQljYXNlIDE6Ci0JCQkJcEJzcy0+V1BBMi5Hcm91cENpcGhlciA9Ci0JCQkJICAgIE5kaXM4MDJfMTFHcm91cFdFUDQwRW5hYmxlZDsKLQkJCQlicmVhazsKLQkJCWNhc2UgNToKLQkJCQlwQnNzLT5XUEEyLkdyb3VwQ2lwaGVyID0KLQkJCQkgICAgTmRpczgwMl8xMUdyb3VwV0VQMTA0RW5hYmxlZDsKLQkJCQlicmVhazsKLQkJCWNhc2UgMjoKLQkJCQlwQnNzLT5XUEEyLkdyb3VwQ2lwaGVyID0KLQkJCQkgICAgTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZDsKLQkJCQlicmVhazsKLQkJCWNhc2UgNDoKLQkJCQlwQnNzLT5XUEEyLkdyb3VwQ2lwaGVyID0KLQkJCQkgICAgTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZDsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQkvKiBzZXQgdG8gY29ycmVjdCBvZmZzZXQgZm9yIG5leHQgcGFyc2luZyAqLwotCQkJcFRtcCArPSBzaXplb2Yoc3RydWN0IHJ0X2NpcGhlcl9zdWl0ZV9zdHJ1Y3QpOwotCi0JCQkvKiAyLiBHZXQgcGFpcndpc2UgY2lwaGVyIGNvdW50cyAqLwotCQkJLypDb3VudCA9ICoodTE2ICopcFRtcDsgKi8KLQkJCUNvdW50ID0gKHBUbXBbMV0gPDwgOCkgKyBwVG1wWzBdOwotCQkJcFRtcCArPSBzaXplb2YodTE2KTsKLQotCQkJLyogMy4gR2V0IHBhaXJ3aXNlIGNpcGhlciAqLwotCQkJLyogUGFyc2luZyBhbGwgdW5pY2FzdCBjaXBoZXIgc3VpdGUgKi8KLQkJCXdoaWxlIChDb3VudCA+IDApIHsKLQkJCQkvKiBTa2lwIE9VSSAqLwotCQkJCXBDaXBoZXIgPSAoc3RydWN0IHJ0X2NpcGhlcl9zdWl0ZV9zdHJ1Y3QgKikgcFRtcDsKLQkJCQlUbXBDaXBoZXIgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7Ci0JCQkJc3dpdGNoIChwQ2lwaGVyLT5UeXBlKSB7Ci0JCQkJY2FzZSAxOgotCQkJCWNhc2UgNToJLyogQWx0aG91Z2ggV0VQIGlzIG5vdCBhbGxvd2VkIGluIFdQQSByZWxhdGVkIGF1dGggbW9kZSwgd2UgcGFyc2UgaXQgYW55d2F5ICovCi0JCQkJCVRtcENpcGhlciA9Ci0JCQkJCSAgICBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDI6Ci0JCQkJCVRtcENpcGhlciA9Ci0JCQkJCSAgICBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDQ6Ci0JCQkJCVRtcENpcGhlciA9Ci0JCQkJCSAgICBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkOwotCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0OgotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJaWYgKFRtcENpcGhlciA+IHBCc3MtPldQQTIuUGFpckNpcGhlcikgewotCQkJCQkvKiBNb3ZlIHRoZSBsb3dlciBjaXBoZXIgc3VpdGUgdG8gUGFpckNpcGhlckF1eCAqLwotCQkJCQlwQnNzLT5XUEEyLlBhaXJDaXBoZXJBdXggPQotCQkJCQkgICAgcEJzcy0+V1BBMi5QYWlyQ2lwaGVyOwotCQkJCQlwQnNzLT5XUEEyLlBhaXJDaXBoZXIgPSBUbXBDaXBoZXI7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcEJzcy0+V1BBMi5QYWlyQ2lwaGVyQXV4ID0gVG1wQ2lwaGVyOwotCQkJCX0KLQkJCQlwVG1wICs9IHNpemVvZihzdHJ1Y3QgcnRfY2lwaGVyX3N1aXRlX3N0cnVjdCk7Ci0JCQkJQ291bnQtLTsKLQkJCX0KLQotCQkJLyogNC4gZ2V0IEFLTSBzdWl0ZSBjb3VudHMgKi8KLQkJCS8qQ291bnQgPSAqKHUxNiAqKXBUbXA7ICovCi0JCQlDb3VudCA9IChwVG1wWzFdIDw8IDgpICsgcFRtcFswXTsKLQkJCXBUbXAgKz0gc2l6ZW9mKHUxNik7Ci0KLQkJCS8qIDUuIEdldCBBS00gY2lwaGVycyAqLwotCQkJLyogUGFyc2luZyBhbGwgQUtNIGNpcGhlcnMgKi8KLQkJCXdoaWxlIChDb3VudCA+IDApIHsKLQkJCQlwQUtNID0gKHN0cnVjdCBydF9ha21fc3VpdGUgKikgcFRtcDsKLQkJCQlpZiAoIVJUTVBFcXVhbE1lbW9yeShwVG1wLCBSU05fT1VJLCAzKSkKLQkJCQkJYnJlYWs7Ci0KLQkJCQlzd2l0Y2ggKHBBS00tPlR5cGUpIHsKLQkJCQljYXNlIDE6Ci0JCQkJCS8qIFNldCBBUCBzdXBwb3J0IFdQQS1lbnRlcnByaXNlIG1vZGUgKi8KLQkJCQkJaWYgKHBCc3MtPkF1dGhNb2RlID09Ci0JCQkJCSAgICBOZGlzODAyXzExQXV0aE1vZGVPcGVuKQotCQkJCQkJcEJzcy0+QXV0aE1vZGUgPQotCQkJCQkJICAgIE5kaXM4MDJfMTFBdXRoTW9kZVdQQTI7Ci0JCQkJCWVsc2UKLQkJCQkJCXBCc3MtPkF1dGhNb2RlQXV4ID0KLQkJCQkJCSAgICBOZGlzODAyXzExQXV0aE1vZGVXUEEyOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDI6Ci0JCQkJCS8qIFNldCBBUCBzdXBwb3J0IFdQQS1QU0sgbW9kZSAqLwotCQkJCQlpZiAocEJzcy0+QXV0aE1vZGUgPT0KLQkJCQkJICAgIE5kaXM4MDJfMTFBdXRoTW9kZU9wZW4pCi0JCQkJCQlwQnNzLT5BdXRoTW9kZSA9Ci0JCQkJCQkgICAgTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSzsKLQkJCQkJZWxzZQotCQkJCQkJcEJzcy0+QXV0aE1vZGVBdXggPQotCQkJCQkJICAgIE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0s7Ci0JCQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCWlmIChwQnNzLT5BdXRoTW9kZSA9PQotCQkJCQkgICAgTmRpczgwMl8xMUF1dGhNb2RlT3BlbikKLQkJCQkJCXBCc3MtPkF1dGhNb2RlID0KLQkJCQkJCSAgICBOZGlzODAyXzExQXV0aE1vZGVNYXg7Ci0JCQkJCWVsc2UKLQkJCQkJCXBCc3MtPkF1dGhNb2RlQXV4ID0KLQkJCQkJCSAgICBOZGlzODAyXzExQXV0aE1vZGVNYXg7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlwVG1wICs9IChDb3VudCAqIHNpemVvZihzdHJ1Y3QgcnRfYWttX3N1aXRlKSk7Ci0JCQkJQ291bnQtLTsKLQkJCX0KLQotCQkJLyogRml4ZWQgZm9yIFdQQS1Ob25lICovCi0JCQlpZiAocEJzcy0+QnNzVHlwZSA9PSBCU1NfQURIT0MpIHsKLQkJCQlwQnNzLT5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmU7Ci0JCQkJcEJzcy0+QXV0aE1vZGVBdXggPSBOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lOwotCQkJCXBCc3MtPldQQS5QYWlyQ2lwaGVyQXV4ID0KLQkJCQkgICAgcEJzcy0+V1BBMi5QYWlyQ2lwaGVyQXV4OwotCQkJCXBCc3MtPldQQS5Hcm91cENpcGhlciA9IHBCc3MtPldQQTIuR3JvdXBDaXBoZXI7Ci0JCQkJcEJzcy0+V2VwU3RhdHVzID0gcEJzcy0+V1BBLkdyb3VwQ2lwaGVyOwotCQkJCS8qIFBhdGNoZWQgYnVncyBmb3Igb2xkIGRyaXZlciAqLwotCQkJCWlmIChwQnNzLT5XUEEuUGFpckNpcGhlckF1eCA9PQotCQkJCSAgICBOZGlzODAyXzExV0VQRGlzYWJsZWQpCi0JCQkJCXBCc3MtPldQQS5QYWlyQ2lwaGVyQXV4ID0KLQkJCQkJICAgIHBCc3MtPldQQS5Hcm91cENpcGhlcjsKLQkJCX0KLQkJCXBCc3MtPldlcFN0YXR1cyA9IHBCc3MtPldQQTIuUGFpckNpcGhlcjsKLQotCQkJLyogNi4gR2V0IFJTTiBjYXBhYmlsaXR5ICovCi0JCQkvKnBCc3MtPldQQTIuUnNuQ2FwYWJpbGl0eSA9ICoodTE2ICopcFRtcDsgKi8KLQkJCXBCc3MtPldQQTIuUnNuQ2FwYWJpbGl0eSA9IChwVG1wWzFdIDw8IDgpICsgcFRtcFswXTsKLQkJCXBUbXAgKz0gc2l6ZW9mKHUxNik7Ci0KLQkJCS8qIENoZWNrIHRoZSBQYWlyICYgR3JvdXAsIGlmIGRpZmZlcmVudCwgdHVybiBvbiBtaXhlZCBtb2RlIGZsYWcgKi8KLQkJCWlmIChwQnNzLT5XUEEyLkdyb3VwQ2lwaGVyICE9IHBCc3MtPldQQTIuUGFpckNpcGhlcikKLQkJCQlwQnNzLT5XUEEyLmJNaXhNb2RlID0gVFJVRTsKLQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCQlMZW5ndGggLT0gKHBFaWQtPkxlbiArIDIpOwotCX0KLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotLyogbWFjX3RhYmxlLmMgKi8KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQotLyohIFxicmllZiBnZW5lcmF0ZXMgYSByYW5kb20gbWFjIGFkZHJlc3MgdmFsdWUgZm9yIElCU1MgQlNTSUQKLSAqCVxwYXJhbSBBZGRyIHRoZSBic3NpZCBsb2NhdGlvbgotICoJXHJldHVybiBub25lCi0gKglccHJlCi0gKglccG9zdAotICovCi12b2lkIE1hY0FkZHJSYW5kb21Cc3NpZChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHU4ICpwQWRkcikKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBNQUNfQUREUl9MRU47IGkrKykgewotCQlwQWRkcltpXSA9IFJhbmRvbUJ5dGUocEFkKTsKLQl9Ci0KLQlwQWRkclswXSA9IChwQWRkclswXSAmIDB4ZmUpIHwgMHgwMjsJLyogdGhlIGZpcnN0IDIgYml0cyBtdXN0IGJlIDAxeHh4eHh4eHggKi8KLX0KLQotLyohIFxicmllZiBpbml0IHRoZSBtYW5hZ2VtZW50IG1hYyBmcmFtZSBoZWFkZXIKLSAqCVxwYXJhbSBwX2hkciBtYWMgaGVhZGVyCi0gKglccGFyYW0gc3VidHlwZSBzdWJ0eXBlIG9mIHRoZSBmcmFtZQotICoJXHBhcmFtIHBfZHMgZGVzdGluYXRpb24gYWRkcmVzcywgZG9uJ3QgY2FyZSBpZiBpdCBpcyBhIGJyb2FkY2FzdCBhZGRyZXNzCi0gKglccmV0dXJuIG5vbmUKLSAqCVxwcmUgdGhlIHN0YXRpb24gaGFzIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gaW4gdGhlIHBBZC0+U3RhQ2ZnCi0gKgkgLSBic3NpZAotICoJIC0gc3RhdGlvbiBhZGRyZXNzCi0gKglccG9zdAotICoJXG5vdGUgdGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgZm9sbG93aW5nIGZpZWxkCi0KLQlJUlFMID0gUEFTU0lWRV9MRVZFTAotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0gKi8KLXZvaWQgTWd0TWFjSGVhZGVySW5pdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgICAgIHN0cnVjdCBydF9oZWFkZXJfODAyXzExICogcEhkcjgwMjExLAotCQkgICAgICB1OCBTdWJUeXBlLAotCQkgICAgICB1OCBUb0RzLCB1OCAqcERBLCB1OCAqcEJzc2lkKQotewotCU5kaXNaZXJvTWVtb3J5KHBIZHI4MDIxMSwgc2l6ZW9mKHN0cnVjdCBydF9oZWFkZXJfODAyXzExKSk7Ci0KLQlwSGRyODAyMTEtPkZDLlR5cGUgPSBCVFlQRV9NR01UOwotCXBIZHI4MDIxMS0+RkMuU3ViVHlwZSA9IFN1YlR5cGU7Ci0vKiAgICAgIGlmIChTdWJUeXBlID09IFNVQlRZUEVfQUNLKSAgICAgLy8gc2FtcGxlLCBubyB1c2UsIGl0IHdpbGwgY29uZmxpY3Qgd2l0aCBBQ1RJT04gZnJhbWUgc3ViIHR5cGUgKi8KLS8qICAgICAgICAgICAgICBwSGRyODAyMTEtPkZDLlR5cGUgPSBCVFlQRV9DTlRMOyAqLwotCXBIZHI4MDIxMS0+RkMuVG9EcyA9IFRvRHM7Ci0JQ09QWV9NQUNfQUREUihwSGRyODAyMTEtPkFkZHIxLCBwREEpOwotCUNPUFlfTUFDX0FERFIocEhkcjgwMjExLT5BZGRyMiwgcEFkLT5DdXJyZW50QWRkcmVzcyk7Ci0JQ09QWV9NQUNfQUREUihwSGRyODAyMTEtPkFkZHIzLCBwQnNzaWQpOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0vKiBtZW1fbWdtdC5jICovCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0KLS8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogVGhpcyByb3V0aW5lIGJ1aWxkIGFuIG91dGdvaW5nIGZyYW1lLCBhbmQgZmlsbCBhbGwgaW5mb3JtYXRpb24gc3BlY2lmaWVkCi0gKiBpbiBhcmd1bWVudCBsaXN0IHRvIHRoZSBmcmFtZSBib2R5LiBUaGUgYWN0dWFsIGZyYW1lIHNpemUgaXMgdGhlIHN1bW1hdGlvbgotICogb2YgYWxsIGFyZ3VtZW50cy4KLSAqIGlucHV0IHBhcmFtczoKLSAqCQlCdWZmZXIgLSBwb2ludGVyIHRvIGEgcHJlLWFsbG9jYXRlZCBtZW1vcnkgc2VnbWVudAotICoJCWFyZ3MgLSBhIGxpc3Qgb2YgPGludCBhcmdfc2l6ZSwgYXJnPiBwYWlycy4KLSAqCQlOT1RFIE5PVEUgTk9URSEgdGhlIGxhc3QgYXJndW1lbnQgbXVzdCBiZSBOVUxMLCBvdGhlcndpc2UgdGhpcwotICoJCQkJCQkgICBmdW5jdGlvbiB3aWxsIEZBSUwhCi0gKiByZXR1cm46Ci0gKgkJU2l6ZSBvZiB0aGUgYnVmZmVyCi0gKiB1c2FnZToKLSAqCQlNYWtlT3V0Z29pbmdGcmFtZShCdWZmZXIsIG91dHB1dF9sZW5ndGgsIDIsICZmYywgMiwgJmR1ciwgNiwgcF9hZGRyMSwgNixwX2FkZHIyLCBFTkRfT0ZfQVJHUyk7Ci0KLSBJUlFMID0gUEFTU0lWRV9MRVZFTAotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXVuc2lnbmVkIGxvbmcgTWFrZU91dGdvaW5nRnJhbWUodTggKiBCdWZmZXIsIHVuc2lnbmVkIGxvbmcgKiBGcmFtZUxlbiwgLi4uKQotewotCXU4ICpwOwotCWludCBsZW5nOwotCXVuc2lnbmVkIGxvbmcgVG90TGVuZzsKLQl2YV9saXN0IEFyZ3M7Ci0KLQkvKiBjYWxjdWxhdGVzIHRoZSB0b3RhbCBsZW5ndGggKi8KLQlUb3RMZW5nID0gMDsKLQl2YV9zdGFydChBcmdzLCBGcmFtZUxlbik7Ci0JZG8gewotCQlsZW5nID0gdmFfYXJnKEFyZ3MsIGludCk7Ci0JCWlmIChsZW5nID09IEVORF9PRl9BUkdTKSB7Ci0JCQlicmVhazsKLQkJfQotCQlwID0gdmFfYXJnKEFyZ3MsIHZvaWQgKik7Ci0JCU5kaXNNb3ZlTWVtb3J5KCZCdWZmZXJbVG90TGVuZ10sIHAsIGxlbmcpOwotCQlUb3RMZW5nID0gVG90TGVuZyArIGxlbmc7Ci0JfSB3aGlsZSAoVFJVRSk7Ci0KLQl2YV9lbmQoQXJncyk7CQkvKiBjbGVhbiB1cCAqLwotCSpGcmFtZUxlbiA9IFRvdExlbmc7Ci0JcmV0dXJuIFRvdExlbmc7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLS8qIG1sbWVfcXVldWUuYyAqLwotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi0vKiEgXGJyaWVmCUluaXRpYWxpemUgVGhlIE1MTUUgUXVldWUsIHVzZWQgYnkgTUxNRSBGdW5jdGlvbnMKLSAqCVxwYXJhbQkqUXVldWUJICAgVGhlIE1MTUUgUXVldWUKLSAqCVxyZXR1cm4gQWx3YXlzCSAgIFJldHVybiBORElTX1NUQVRFX1NVQ0NFU1MgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbgotICoJXHByZQotICoJXHBvc3QKLSAqCVxub3RlCUJlY2F1c2UgdGhpcyBpcyBkb25lIG9ubHkgb25jZSAoYXQgdGhlIGluaXQgc3RhZ2UpLCBubyBuZWVkIHRvIGJlIGxvY2tlZAotCi0gSVJRTCA9IFBBU1NJVkVfTEVWRUwKLQotICovCi1pbnQgTWxtZVF1ZXVlSW5pdChzdHJ1Y3QgcnRfbWxtZV9xdWV1ZSAqUXVldWUpCi17Ci0JaW50IGk7Ci0KLQlOZGlzQWxsb2NhdGVTcGluTG9jaygmUXVldWUtPkxvY2spOwotCi0JUXVldWUtPk51bSA9IDA7Ci0JUXVldWUtPkhlYWQgPSAwOwotCVF1ZXVlLT5UYWlsID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBNQVhfTEVOX09GX01MTUVfUVVFVUU7IGkrKykgewotCQlRdWV1ZS0+RW50cnlbaV0uT2NjdXBpZWQgPSBGQUxTRTsKLQkJUXVldWUtPkVudHJ5W2ldLk1zZ0xlbiA9IDA7Ci0JCU5kaXNaZXJvTWVtb3J5KFF1ZXVlLT5FbnRyeVtpXS5Nc2csIE1HTVRfRE1BX0JVRkZFUl9TSVpFKTsKLQl9Ci0KLQlyZXR1cm4gTkRJU19TVEFUVVNfU1VDQ0VTUzsKLX0KLQotLyohIFxicmllZgkgRW5xdWV1ZSBhIG1lc3NhZ2UgZm9yIG90aGVyIHRocmVhZHMsIGlmIHRoZXkgd2FudCB0byBzZW5kIG1lc3NhZ2VzIHRvIE1MTUUgdGhyZWFkCi0gKglccGFyYW0JKlF1ZXVlCSAgVGhlIE1MTUUgUXVldWUKLSAqCVxwYXJhbQkgTWFjaGluZSAgVGhlIFN0YXRlIE1hY2hpbmUgSWQKLSAqCVxwYXJhbQkgTXNnVHlwZSAgVGhlIE1lc3NhZ2UgVHlwZQotICoJXHBhcmFtCSBNc2dMZW4gICBUaGUgTWVzc2FnZSBsZW5ndGgKLSAqCVxwYXJhbQkqTXNnCSAgVGhlIG1lc3NhZ2UgcG9pbnRlcgotICoJXHJldHVybiAgVFJVRSBpZiBlbnF1ZXVlIGlzIHN1Y2Nlc3NmdWwsIEZBTFNFIGlmIHRoZSBxdWV1ZSBpcyBmdWxsCi0gKglccHJlCi0gKglccG9zdAotICoJXG5vdGUJIFRoZSBtZXNzYWdlIGhhcyB0byBiZSBpbml0aWFsaXplZAotCi0JSVJRTCA9IFBBU1NJVkVfTEVWRUwKLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotICovCi1CT09MRUFOIE1sbWVFbnF1ZXVlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgIHVuc2lnbmVkIGxvbmcgTWFjaGluZSwKLQkJICAgIHVuc2lnbmVkIGxvbmcgTXNnVHlwZSwgdW5zaWduZWQgbG9uZyBNc2dMZW4sIHZvaWQgKiBNc2cpCi17Ci0JaW50IFRhaWw7Ci0Jc3RydWN0IHJ0X21sbWVfcXVldWUgKlF1ZXVlID0gKHN0cnVjdCBydF9tbG1lX3F1ZXVlICopJiBwQWQtPk1sbWUuUXVldWU7Ci0KLQkvKiBEbyBub3RoaW5nIGlmIHRoZSBkcml2ZXIgaXMgc3RhcnRpbmcgaGFsdCBzdGF0ZS4gKi8KLQkvKiBUaGlzIG1pZ2h0IGhhcHBlbiB3aGVuIHRpbWVyIGFscmVhZHkgYmVlbiBmaXJlZCBiZWZvcmUgY2FuY2VsIHRpbWVyIHdpdGggbWxtZWhhbHQgKi8KLQlpZiAoUlRNUF9URVNUX0ZMQUcKLQkgICAgKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkKLQkJcmV0dXJuIEZBTFNFOwotCi0JLyogRmlyc3QgY2hlY2sgdGhlIHNpemUsIGl0IE1VU1Qgbm90IGV4Y2VlZCB0aGUgbWxtZSBxdWV1ZSBzaXplICovCi0JaWYgKE1zZ0xlbiA+IE1HTVRfRE1BX0JVRkZFUl9TSVpFKSB7Ci0JCURCR1BSSU5UX0VSUigiTWxtZUVucXVldWU6IG1zZyB0b28gbGFyZ2UsIHNpemUgPSAlbGQgXG4iLCBNc2dMZW4pOwotCQlyZXR1cm4gRkFMU0U7Ci0JfQotCi0JaWYgKE1sbWVRdWV1ZUZ1bGwoUXVldWUpKSB7Ci0JCXJldHVybiBGQUxTRTsKLQl9Ci0KLQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCYoUXVldWUtPkxvY2spKTsKLQlUYWlsID0gUXVldWUtPlRhaWw7Ci0JUXVldWUtPlRhaWwrKzsKLQlRdWV1ZS0+TnVtKys7Ci0JaWYgKFF1ZXVlLT5UYWlsID09IE1BWF9MRU5fT0ZfTUxNRV9RVUVVRSkgewotCQlRdWV1ZS0+VGFpbCA9IDA7Ci0JfQotCi0JUXVldWUtPkVudHJ5W1RhaWxdLldjaWQgPSBSRVNFUlZFRF9XQ0lEOwotCVF1ZXVlLT5FbnRyeVtUYWlsXS5PY2N1cGllZCA9IFRSVUU7Ci0JUXVldWUtPkVudHJ5W1RhaWxdLk1hY2hpbmUgPSBNYWNoaW5lOwotCVF1ZXVlLT5FbnRyeVtUYWlsXS5Nc2dUeXBlID0gTXNnVHlwZTsKLQlRdWV1ZS0+RW50cnlbVGFpbF0uTXNnTGVuID0gTXNnTGVuOwotCi0JaWYgKE1zZyAhPSBOVUxMKSB7Ci0JCU5kaXNNb3ZlTWVtb3J5KFF1ZXVlLT5FbnRyeVtUYWlsXS5Nc2csIE1zZywgTXNnTGVuKTsKLQl9Ci0KLQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCYoUXVldWUtPkxvY2spKTsKLQlyZXR1cm4gVFJVRTsKLX0KLQotLyohIFxicmllZgkgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHdoZW4gUmVjdiBnZXRzIGEgTUxNRSBtZXNzYWdlCi0gKglccGFyYW0JKlF1ZXVlCQkJIFRoZSBNTE1FIFF1ZXVlCi0gKglccGFyYW0JIFRpbWVTdGFtcEhpZ2gJIFRoZSB1cHBlciAzMiBiaXQgb2YgdGltZXN0YW1wCi0gKglccGFyYW0JIFRpbWVTdGFtcExvdwkgVGhlIGxvd2VyIDMyIGJpdCBvZiB0aW1lc3RhbXAKLSAqCVxwYXJhbQkgUnNzaQkJCSBUaGUgcmVjZWl2aW5nIFJTU0kgc3RyZW5ndGgKLSAqCVxwYXJhbQkgTXNnTGVuCQkJIFRoZSBsZW5ndGggb2YgdGhlIG1lc3NhZ2UKLSAqCVxwYXJhbQkqTXNnCQkJIFRoZSBtZXNzYWdlIHBvaW50ZXIKLSAqCVxyZXR1cm4gIFRSVUUgaWYgZXZlcnl0aGluZyBvaywgRkFMU0Ugb3RoZXJ3aXNlIChsaWtlIFF1ZXVlIEZ1bGwpCi0gKglccHJlCi0gKglccG9zdAotCi0gSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLSAqLwotQk9PTEVBTiBNbG1lRW5xdWV1ZUZvclJlY3Yoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgdW5zaWduZWQgbG9uZyBXY2lkLAotCQkJICAgdW5zaWduZWQgbG9uZyBUaW1lU3RhbXBIaWdoLAotCQkJICAgdW5zaWduZWQgbG9uZyBUaW1lU3RhbXBMb3csCi0JCQkgICB1OCBSc3NpMCwKLQkJCSAgIHU4IFJzc2kxLAotCQkJICAgdTggUnNzaTIsCi0JCQkgICB1bnNpZ25lZCBsb25nIE1zZ0xlbiwgdm9pZCAqIE1zZywgdTggU2lnbmFsKQotewotCWludCBUYWlsLCBNYWNoaW5lOwotCXN0cnVjdCBydF9mcmFtZV84MDJfMTEgKiBwRnJhbWUgPSAoc3RydWN0IHJ0X2ZyYW1lXzgwMl8xMSAqKSBNc2c7Ci0JaW50IE1zZ1R5cGU7Ci0Jc3RydWN0IHJ0X21sbWVfcXVldWUgKlF1ZXVlID0gKHN0cnVjdCBydF9tbG1lX3F1ZXVlICopJiBwQWQtPk1sbWUuUXVldWU7Ci0KLQkvKiBEbyBub3RoaW5nIGlmIHRoZSBkcml2ZXIgaXMgc3RhcnRpbmcgaGFsdCBzdGF0ZS4gKi8KLQkvKiBUaGlzIG1pZ2h0IGhhcHBlbiB3aGVuIHRpbWVyIGFscmVhZHkgYmVlbiBmaXJlZCBiZWZvcmUgY2FuY2VsIHRpbWVyIHdpdGggbWxtZWhhbHQgKi8KLQlpZiAoUlRNUF9URVNUX0ZMQUcKLQkgICAgKHBBZCwKLQkgICAgIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8IGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpIHsKLQkJREJHUFJJTlRfRVJSKCJNbG1lRW5xdWV1ZUZvclJlY3Y6IGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTU1xuIik7Ci0JCXJldHVybiBGQUxTRTsKLQl9Ci0JLyogRmlyc3QgY2hlY2sgdGhlIHNpemUsIGl0IE1VU1Qgbm90IGV4Y2VlZCB0aGUgbWxtZSBxdWV1ZSBzaXplICovCi0JaWYgKE1zZ0xlbiA+IE1HTVRfRE1BX0JVRkZFUl9TSVpFKSB7Ci0JCURCR1BSSU5UX0VSUigiTWxtZUVucXVldWVGb3JSZWN2OiBmcmFtZSB0b28gbGFyZ2UsIHNpemUgPSAlbGQgXG4iLCBNc2dMZW4pOwotCQlyZXR1cm4gRkFMU0U7Ci0JfQotCi0JaWYgKE1sbWVRdWV1ZUZ1bGwoUXVldWUpKSB7Ci0JCXJldHVybiBGQUxTRTsKLQl9Ci0KLQl7Ci0JCWlmICghTXNnVHlwZVN1YnN0KHBBZCwgcEZyYW1lLCAmTWFjaGluZSwgJk1zZ1R5cGUpKSB7Ci0JCQlEQkdQUklOVF9FUlIoIk1sbWVFbnF1ZXVlRm9yUmVjdjogdW4tcmVjb25nbml6ZWQgbWdtdC0+c3VidHlwZT0lZFxuIiwgcEZyYW1lLT5IZHIuRkMuU3ViVHlwZSk7Ci0JCQlyZXR1cm4gRkFMU0U7Ci0JCX0KLQl9Ci0KLQkvKiBPSywgd2UgZ290IGFsbCB0aGUgaW5mb3JtYXRpb25zLCBpdCBpcyB0aW1lIHRvIHB1dCB0aGluZ3MgaW50byBxdWV1ZSAqLwotCU5kaXNBY3F1aXJlU3BpbkxvY2soJihRdWV1ZS0+TG9jaykpOwotCVRhaWwgPSBRdWV1ZS0+VGFpbDsKLQlRdWV1ZS0+VGFpbCsrOwotCVF1ZXVlLT5OdW0rKzsKLQlpZiAoUXVldWUtPlRhaWwgPT0gTUFYX0xFTl9PRl9NTE1FX1FVRVVFKSB7Ci0JCVF1ZXVlLT5UYWlsID0gMDsKLQl9Ci0JUXVldWUtPkVudHJ5W1RhaWxdLk9jY3VwaWVkID0gVFJVRTsKLQlRdWV1ZS0+RW50cnlbVGFpbF0uTWFjaGluZSA9IE1hY2hpbmU7Ci0JUXVldWUtPkVudHJ5W1RhaWxdLk1zZ1R5cGUgPSBNc2dUeXBlOwotCVF1ZXVlLT5FbnRyeVtUYWlsXS5Nc2dMZW4gPSBNc2dMZW47Ci0JUXVldWUtPkVudHJ5W1RhaWxdLlRpbWVTdGFtcC51Lkxvd1BhcnQgPSBUaW1lU3RhbXBMb3c7Ci0JUXVldWUtPkVudHJ5W1RhaWxdLlRpbWVTdGFtcC51LkhpZ2hQYXJ0ID0gVGltZVN0YW1wSGlnaDsKLQlRdWV1ZS0+RW50cnlbVGFpbF0uUnNzaTAgPSBSc3NpMDsKLQlRdWV1ZS0+RW50cnlbVGFpbF0uUnNzaTEgPSBSc3NpMTsKLQlRdWV1ZS0+RW50cnlbVGFpbF0uUnNzaTIgPSBSc3NpMjsKLQlRdWV1ZS0+RW50cnlbVGFpbF0uU2lnbmFsID0gU2lnbmFsOwotCVF1ZXVlLT5FbnRyeVtUYWlsXS5XY2lkID0gKHU4KVdjaWQ7Ci0KLQlRdWV1ZS0+RW50cnlbVGFpbF0uQ2hhbm5lbCA9IHBBZC0+TGF0Y2hSZlJlZ3MuQ2hhbm5lbDsKLQotCWlmIChNc2cgIT0gTlVMTCkgewotCQlOZGlzTW92ZU1lbW9yeShRdWV1ZS0+RW50cnlbVGFpbF0uTXNnLCBNc2csIE1zZ0xlbik7Ci0JfQotCi0JTmRpc1JlbGVhc2VTcGluTG9jaygmKFF1ZXVlLT5Mb2NrKSk7Ci0KLQlSVE1QX01MTUVfSEFORExFUihwQWQpOwotCi0JcmV0dXJuIFRSVUU7Ci19Ci0KLS8qISBcYnJpZWYJIERlcXVldWUgYSBtZXNzYWdlIGZyb20gdGhlIE1MTUUgUXVldWUKLSAqCVxwYXJhbQkqUXVldWUJICBUaGUgTUxNRSBRdWV1ZQotICoJXHBhcmFtCSpFbGVtCSAgVGhlIG1lc3NhZ2UgZGVxdWV1ZWQgZnJvbSBNTE1FIFF1ZXVlCi0gKglccmV0dXJuICBUUlVFIGlmIHRoZSBFbGVtIGNvbnRhaW5zIHNvbWV0aGluZywgRkFMU0Ugb3RoZXJ3aXNlCi0gKglccHJlCi0gKglccG9zdAotCi0gSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLSAqLwotQk9PTEVBTiBNbG1lRGVxdWV1ZShzdHJ1Y3QgcnRfbWxtZV9xdWV1ZSAqUXVldWUsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKiogRWxlbSkKLXsKLQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCYoUXVldWUtPkxvY2spKTsKLQkqRWxlbSA9ICYoUXVldWUtPkVudHJ5W1F1ZXVlLT5IZWFkXSk7Ci0JUXVldWUtPk51bS0tOwotCVF1ZXVlLT5IZWFkKys7Ci0JaWYgKFF1ZXVlLT5IZWFkID09IE1BWF9MRU5fT0ZfTUxNRV9RVUVVRSkgewotCQlRdWV1ZS0+SGVhZCA9IDA7Ci0JfQotCU5kaXNSZWxlYXNlU3BpbkxvY2soJihRdWV1ZS0+TG9jaykpOwotCXJldHVybiBUUlVFOwotfQotCi0vKiBJUlFMID0gRElTUEFUQ0hfTEVWRUwgKi8KLXZvaWQgTWxtZVJlc3RhcnRTdGF0ZU1hY2hpbmUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotI2lmZGVmIFJUTVBfTUFDX1BDSQotCXN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0gPSBOVUxMOwotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotCUJPT0xFQU4gQ2FuY2VsbGVkOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTWxtZVJlc3RhcnRTdGF0ZU1hY2hpbmUgXG4iKSk7Ci0KLSNpZmRlZiBSVE1QX01BQ19QQ0kKLQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPk1sbWUuVGFza0xvY2spOwotCWlmIChwQWQtPk1sbWUuYlJ1bm5pbmcpIHsKLQkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5NbG1lLlRhc2tMb2NrKTsKLQkJcmV0dXJuOwotCX0gZWxzZSB7Ci0JCXBBZC0+TWxtZS5iUnVubmluZyA9IFRSVUU7Ci0JfQotCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+TWxtZS5UYXNrTG9jayk7Ci0KLQkvKiBSZW1vdmUgYWxsIE1sbWUgcXVldWVzIGVsZW1lbnRzICovCi0Jd2hpbGUgKCFNbG1lUXVldWVFbXB0eSgmcEFkLT5NbG1lLlF1ZXVlKSkgewotCQkvKkZyb20gbWVzc2FnZSB0eXBlLCBkZXRlcm1pbmUgd2hpY2ggc3RhdGUgbWFjaGluZSBJIHNob3VsZCBkcml2ZSAqLwotCQlpZiAoTWxtZURlcXVldWUoJnBBZC0+TWxtZS5RdWV1ZSwgJkVsZW0pKSB7Ci0JCQkvKiBmcmVlIE1MTUUgZWxlbWVudCAqLwotCQkJRWxlbS0+T2NjdXBpZWQgPSBGQUxTRTsKLQkJCUVsZW0tPk1zZ0xlbiA9IDA7Ci0KLQkJfSBlbHNlIHsKLQkJCURCR1BSSU5UX0VSUigiTWxtZVJlc3RhcnRTdGF0ZU1hY2hpbmU6IE1sbWVRdWV1ZSBlbXB0eVxuIik7Ci0JCX0KLQl9Ci0jZW5kaWYgLyogUlRNUF9NQUNfUENJIC8vICovCi0KLQl7Ci0JCS8qIENhbmNlbCBhbGwgdGltZXIgZXZlbnRzICovCi0JCS8qIEJlIGNhcmVmdWwgdG8gY2FuY2VsIG5ldyBhZGRlZCB0aW1lciAqLwotCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5Bc3NvY1RpbWVyLCAmQ2FuY2VsbGVkKTsKLQkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguUmVhc3NvY1RpbWVyLCAmQ2FuY2VsbGVkKTsKLQkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguRGlzYXNzb2NUaW1lciwgJkNhbmNlbGxlZCk7Ci0JCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkF1dGhUaW1lciwgJkNhbmNlbGxlZCk7Ci0JCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkJlYWNvblRpbWVyLCAmQ2FuY2VsbGVkKTsKLQkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguU2NhblRpbWVyLCAmQ2FuY2VsbGVkKTsKLQotCX0KLQotCS8qIENoYW5nZSBiYWNrIHRvIG9yaWdpbmFsIGNoYW5uZWwgaW4gY2FzZSBvZiBkb2luZyBzY2FuICovCi0JQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsLCBGQUxTRSk7Ci0JQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7Ci0KLQkvKiBSZXN1bWUgTVNEVSB3aGljaCBpcyB0dXJuZWQgb2ZmIGR1cm5pbmcgc2NhbiAqLwotCVJUTVBSZXN1bWVNc2R1VHJhbnNtaXNzaW9uKHBBZCk7Ci0KLQl7Ci0JCS8qIFNldCBhbGwgc3RhdGUgbWFjaGluZXMgYmFjayBJRExFICovCi0JCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7Ci0JCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKLQkJcEFkLT5NbG1lLkF1dGhNYWNoaW5lLkN1cnJTdGF0ZSA9IEFVVEhfUkVRX0lETEU7Ci0JCXBBZC0+TWxtZS5BdXRoUnNwTWFjaGluZS5DdXJyU3RhdGUgPSBBVVRIX1JTUF9JRExFOwotCQlwQWQtPk1sbWUuU3luY01hY2hpbmUuQ3VyclN0YXRlID0gU1lOQ19JRExFOwotCQlwQWQtPk1sbWUuQWN0TWFjaGluZS5DdXJyU3RhdGUgPSBBQ1RfSURMRTsKLQl9Ci0KLSNpZmRlZiBSVE1QX01BQ19QQ0kKLQkvKiBSZW1vdmUgcnVubmluZyBzdGF0ZSAqLwotCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+TWxtZS5UYXNrTG9jayk7Ci0JcEFkLT5NbG1lLmJSdW5uaW5nID0gRkFMU0U7Ci0JTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5NbG1lLlRhc2tMb2NrKTsKLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLX0KLQotLyohIFxicmllZgl0ZXN0IGlmIHRoZSBNTE1FIFF1ZXVlIGlzIGVtcHR5Ci0gKglccGFyYW0JKlF1ZXVlCSAgVGhlIE1MTUUgUXVldWUKLSAqCVxyZXR1cm4gVFJVRSBpZiB0aGUgUXVldWUgaXMgZW1wdHksIEZBTFNFIG90aGVyd2lzZQotICoJXHByZQotICoJXHBvc3QKLQotIElSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0gKi8KLUJPT0xFQU4gTWxtZVF1ZXVlRW1wdHkoc3RydWN0IHJ0X21sbWVfcXVldWUgKlF1ZXVlKQotewotCUJPT0xFQU4gQW5zOwotCi0JTmRpc0FjcXVpcmVTcGluTG9jaygmKFF1ZXVlLT5Mb2NrKSk7Ci0JQW5zID0gKFF1ZXVlLT5OdW0gPT0gMCk7Ci0JTmRpc1JlbGVhc2VTcGluTG9jaygmKFF1ZXVlLT5Mb2NrKSk7Ci0KLQlyZXR1cm4gQW5zOwotfQotCi0vKiEgXGJyaWVmCSB0ZXN0IGlmIHRoZSBNTE1FIFF1ZXVlIGlzIGZ1bGwKLSAqCVxwYXJhbQkgKlF1ZXVlCQkgVGhlIE1MTUUgUXVldWUKLSAqCVxyZXR1cm4gIFRSVUUgaWYgdGhlIFF1ZXVlIGlzIGVtcHR5LCBGQUxTRSBvdGhlcndpc2UKLSAqCVxwcmUKLSAqCVxwb3N0Ci0KLSBJUlFMID0gUEFTU0lWRV9MRVZFTAotIElSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0gKi8KLUJPT0xFQU4gTWxtZVF1ZXVlRnVsbChzdHJ1Y3QgcnRfbWxtZV9xdWV1ZSAqUXVldWUpCi17Ci0JQk9PTEVBTiBBbnM7Ci0KLQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCYoUXVldWUtPkxvY2spKTsKLQlBbnMgPSAoUXVldWUtPk51bSA9PSBNQVhfTEVOX09GX01MTUVfUVVFVUUKLQkgICAgICAgfHwgUXVldWUtPkVudHJ5W1F1ZXVlLT5UYWlsXS5PY2N1cGllZCk7Ci0JTmRpc1JlbGVhc2VTcGluTG9jaygmKFF1ZXVlLT5Mb2NrKSk7Ci0KLQlyZXR1cm4gQW5zOwotfQotCi0vKiEgXGJyaWVmCSBUaGUgZGVzdHJ1Y3RvciBvZiBNTE1FIFF1ZXVlCi0gKglccGFyYW0KLSAqCVxyZXR1cm4KLSAqCVxwcmUKLSAqCVxwb3N0Ci0gKglcbm90ZQlDbGVhciBNbG1lIFF1ZXVlLCBTZXQgUXVldWUtPk51bSB0byBaZXJvLgotCi0gSVJRTCA9IFBBU1NJVkVfTEVWRUwKLQotICovCi12b2lkIE1sbWVRdWV1ZURlc3Ryb3koc3RydWN0IHJ0X21sbWVfcXVldWUgKnBRdWV1ZSkKLXsKLQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCYocFF1ZXVlLT5Mb2NrKSk7Ci0JcFF1ZXVlLT5OdW0gPSAwOwotCXBRdWV1ZS0+SGVhZCA9IDA7Ci0JcFF1ZXVlLT5UYWlsID0gMDsKLQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCYocFF1ZXVlLT5Mb2NrKSk7Ci0JTmRpc0ZyZWVTcGluTG9jaygmKHBRdWV1ZS0+TG9jaykpOwotfQotCi0vKiEgXGJyaWVmCSBUbyBzdWJzdGl0dXRlIHRoZSBtZXNzYWdlIHR5cGUgaWYgdGhlIG1lc3NhZ2UgaXMgY29taW5nIGZyb20gZXh0ZXJuYWwKLSAqCVxwYXJhbQlwRnJhbWUJCSAgIFRoZSBmcmFtZSByZWNlaXZlZAotICoJXHBhcmFtCSpNYWNoaW5lCSAgIFRoZSBzdGF0ZSBtYWNoaW5lCi0gKglccGFyYW0JKk1zZ1R5cGUJICAgdGhlIG1lc3NhZ2UgdHlwZSBmb3IgdGhlIHN0YXRlIG1hY2hpbmUKLSAqCVxyZXR1cm4gVFJVRSBpZiB0aGUgc3Vic3RpdHV0aW9uIGlzIHN1Y2Nlc3NmdWwsIEZBTFNFIG90aGVyd2lzZQotICoJXHByZQotICoJXHBvc3QKLQotIElSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0gKi8KLUJPT0xFQU4gTXNnVHlwZVN1YnN0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgICBzdHJ1Y3QgcnRfZnJhbWVfODAyXzExICogcEZyYW1lLAotCQkgICAgIGludCAqIE1hY2hpbmUsIGludCAqIE1zZ1R5cGUpCi17Ci0JdTE2IFNlcSwgQWxnOwotCXU4IEVBUFR5cGU7Ci0JdTggKnBEYXRhOwotCi0JLyogUG9pbnRlciB0byBzdGFydCBvZiBkYXRhIGZyYW1lcyBpbmNsdWRpbmcgU05BUCBoZWFkZXIgKi8KLQlwRGF0YSA9ICh1OCAqKXBGcmFtZSArIExFTkdUSF84MDJfMTE7Ci0KLQkvKiBUaGUgb25seSBkYXRhIHR5cGUgd2lsbCBwYXNzIHRvIHRoaXMgZnVuY3Rpb24gaXMgRUFQT0wgZnJhbWUgKi8KLQlpZiAocEZyYW1lLT5IZHIuRkMuVHlwZSA9PSBCVFlQRV9EQVRBKSB7Ci0JCXsKLQkJCSpNYWNoaW5lID0gV1BBX1NUQVRFX01BQ0hJTkU7Ci0JCQlFQVBUeXBlID0KLQkJCSAgICAqKCh1OCAqKSBwRnJhbWUgKyBMRU5HVEhfODAyXzExICsKLQkJCSAgICAgIExFTkdUSF84MDJfMV9IICsgMSk7Ci0JCQlyZXR1cm4gKFdwYU1zZ1R5cGVTdWJzdChFQVBUeXBlLCAoaW50ICopIE1zZ1R5cGUpKTsKLQkJfQotCX0KLQotCXN3aXRjaCAocEZyYW1lLT5IZHIuRkMuU3ViVHlwZSkgewotCWNhc2UgU1VCVFlQRV9BU1NPQ19SRVE6Ci0JCSpNYWNoaW5lID0gQVNTT0NfU1RBVEVfTUFDSElORTsKLQkJKk1zZ1R5cGUgPSBNVDJfUEVFUl9BU1NPQ19SRVE7Ci0JCWJyZWFrOwotCWNhc2UgU1VCVFlQRV9BU1NPQ19SU1A6Ci0JCSpNYWNoaW5lID0gQVNTT0NfU1RBVEVfTUFDSElORTsKLQkJKk1zZ1R5cGUgPSBNVDJfUEVFUl9BU1NPQ19SU1A7Ci0JCWJyZWFrOwotCWNhc2UgU1VCVFlQRV9SRUFTU09DX1JFUToKLQkJKk1hY2hpbmUgPSBBU1NPQ19TVEFURV9NQUNISU5FOwotCQkqTXNnVHlwZSA9IE1UMl9QRUVSX1JFQVNTT0NfUkVROwotCQlicmVhazsKLQljYXNlIFNVQlRZUEVfUkVBU1NPQ19SU1A6Ci0JCSpNYWNoaW5lID0gQVNTT0NfU1RBVEVfTUFDSElORTsKLQkJKk1zZ1R5cGUgPSBNVDJfUEVFUl9SRUFTU09DX1JTUDsKLQkJYnJlYWs7Ci0JY2FzZSBTVUJUWVBFX1BST0JFX1JFUToKLQkJKk1hY2hpbmUgPSBTWU5DX1NUQVRFX01BQ0hJTkU7Ci0JCSpNc2dUeXBlID0gTVQyX1BFRVJfUFJPQkVfUkVROwotCQlicmVhazsKLQljYXNlIFNVQlRZUEVfUFJPQkVfUlNQOgotCQkqTWFjaGluZSA9IFNZTkNfU1RBVEVfTUFDSElORTsKLQkJKk1zZ1R5cGUgPSBNVDJfUEVFUl9QUk9CRV9SU1A7Ci0JCWJyZWFrOwotCWNhc2UgU1VCVFlQRV9CRUFDT046Ci0JCSpNYWNoaW5lID0gU1lOQ19TVEFURV9NQUNISU5FOwotCQkqTXNnVHlwZSA9IE1UMl9QRUVSX0JFQUNPTjsKLQkJYnJlYWs7Ci0JY2FzZSBTVUJUWVBFX0FUSU06Ci0JCSpNYWNoaW5lID0gU1lOQ19TVEFURV9NQUNISU5FOwotCQkqTXNnVHlwZSA9IE1UMl9QRUVSX0FUSU07Ci0JCWJyZWFrOwotCWNhc2UgU1VCVFlQRV9ESVNBU1NPQzoKLQkJKk1hY2hpbmUgPSBBU1NPQ19TVEFURV9NQUNISU5FOwotCQkqTXNnVHlwZSA9IE1UMl9QRUVSX0RJU0FTU09DX1JFUTsKLQkJYnJlYWs7Ci0JY2FzZSBTVUJUWVBFX0FVVEg6Ci0JCS8qIGdldCB0aGUgc2VxdWVuY2UgbnVtYmVyIGZyb20gcGF5bG9hZCAyNCBNYWMgSGVhZGVyICsgMiBieXRlcyBhbGdvcml0aG0gKi8KLQkJTmRpc01vdmVNZW1vcnkoJlNlcSwgJnBGcmFtZS0+T2N0ZXRbMl0sIHNpemVvZih1MTYpKTsKLQkJTmRpc01vdmVNZW1vcnkoJkFsZywgJnBGcmFtZS0+T2N0ZXRbMF0sIHNpemVvZih1MTYpKTsKLQkJaWYgKFNlcSA9PSAxIHx8IFNlcSA9PSAzKSB7Ci0JCQkqTWFjaGluZSA9IEFVVEhfUlNQX1NUQVRFX01BQ0hJTkU7Ci0JCQkqTXNnVHlwZSA9IE1UMl9QRUVSX0FVVEhfT0REOwotCQl9IGVsc2UgaWYgKFNlcSA9PSAyIHx8IFNlcSA9PSA0KSB7Ci0JCQlpZiAoQWxnID09IEFVVEhfTU9ERV9PUEVOIHx8IEFsZyA9PSBBVVRIX01PREVfS0VZKSB7Ci0JCQkJKk1hY2hpbmUgPSBBVVRIX1NUQVRFX01BQ0hJTkU7Ci0JCQkJKk1zZ1R5cGUgPSBNVDJfUEVFUl9BVVRIX0VWRU47Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gRkFMU0U7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBTVUJUWVBFX0RFQVVUSDoKLQkJKk1hY2hpbmUgPSBBVVRIX1JTUF9TVEFURV9NQUNISU5FOwotCQkqTXNnVHlwZSA9IE1UMl9QRUVSX0RFQVVUSDsKLQkJYnJlYWs7Ci0JY2FzZSBTVUJUWVBFX0FDVElPTjoKLQkJKk1hY2hpbmUgPSBBQ1RJT05fU1RBVEVfTUFDSElORTsKLQkJLyogIFNvbWV0aW1lcyBTdGEgd2lsbCByZXR1cm4gd2l0aCBjYXRlZ29yeSBieXRlcyB3aXRoIE1TQiA9IDEsIGlmIHRoZXkgcmVjZWl2ZSBjYXRvZ29yeSBvdXQgb2YgdGhlaXIgc3VwcG9ydCAqLwotCQlpZiAoKHBGcmFtZS0+T2N0ZXRbMF0gJiAweDdGKSA+IE1BWF9QRUVSX0NBVEVfTVNHKSB7Ci0JCQkqTXNnVHlwZSA9IE1UMl9BQ1RfSU5WQUxJRDsKLQkJfSBlbHNlIHsKLQkJCSpNc2dUeXBlID0gKHBGcmFtZS0+T2N0ZXRbMF0gJiAweDdGKTsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gRkFMU0U7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiBUUlVFOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0vKiBzdGF0ZV9tYWNoaW5lLmMgKi8KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQotLyohIFxicmllZiBJbml0aWFsaXplIHRoZSBzdGF0ZSBtYWNoaW5lLgotICoJXHBhcmFtICpTCQkJcG9pbnRlciB0byB0aGUgc3RhdGUgbWFjaGluZQotICoJXHBhcmFtCVRyYW5zCQlTdGF0ZSBtYWNoaW5lIHRyYW5zaXRpb24gZnVuY3Rpb24KLSAqCVxwYXJhbQlTdE5yCQludW1iZXIgb2Ygc3RhdGVzCi0gKglccGFyYW0JTXNnTnIJCW51bWJlciBvZiBtZXNzYWdlcwotICoJXHBhcmFtCURlZkZ1bmMJCWRlZmF1bHQgZnVuY3Rpb24sIHdoZW4gdGhlcmUgaXMgaW52YWxpZCBzdGF0ZS9tZXNzYWdlIGNvbWJpbmF0aW9uCi0gKglccGFyYW0JSW5pdFN0YXRlCWluaXRpYWwgc3RhdGUgb2YgdGhlIHN0YXRlIG1hY2hpbmUKLSAqCVxwYXJhbQlCYXNlCQlTdGF0ZU1hY2hpbmUgYmFzZSwgaW50ZXJuYWwgdXNlIG9ubHkKLSAqCVxwcmUgcF9zbSBzaG91bGQgYmUgYSBsZWdhbCBwb2ludGVyCi0gKglccG9zdAotCi0gSVJRTCA9IFBBU1NJVkVfTEVWRUwKLQotICovCi12b2lkIFN0YXRlTWFjaGluZUluaXQoc3RydWN0IHJ0X3N0YXRlX21hY2hpbmUgKlMsCi0JCSAgICAgIElOIFNUQVRFX01BQ0hJTkVfRlVOQyBUcmFuc1tdLAotCQkgICAgICB1bnNpZ25lZCBsb25nIFN0TnIsCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgTXNnTnIsCi0JCSAgICAgIElOIFNUQVRFX01BQ0hJTkVfRlVOQyBEZWZGdW5jLAotCQkgICAgICB1bnNpZ25lZCBsb25nIEluaXRTdGF0ZSwgdW5zaWduZWQgbG9uZyBCYXNlKQotewotCXVuc2lnbmVkIGxvbmcgaSwgajsKLQotCS8qIHNldCBudW1iZXIgb2Ygc3RhdGVzIGFuZCBtZXNzYWdlcyAqLwotCVMtPk5yU3RhdGUgPSBTdE5yOwotCVMtPk5yTXNnID0gTXNnTnI7Ci0JUy0+QmFzZSA9IEJhc2U7Ci0KLQlTLT5UcmFuc0Z1bmMgPSBUcmFuczsKLQotCS8qIGluaXQgYWxsIHN0YXRlIHRyYW5zaXRpb24gdG8gZGVmYXVsdCBmdW5jdGlvbiAqLwotCWZvciAoaSA9IDA7IGkgPCBTdE5yOyBpKyspIHsKLQkJZm9yIChqID0gMDsgaiA8IE1zZ05yOyBqKyspIHsKLQkJCVMtPlRyYW5zRnVuY1tpICogTXNnTnIgKyBqXSA9IERlZkZ1bmM7Ci0JCX0KLQl9Ci0KLQkvKiBzZXQgdGhlIHN0YXJ0aW5nIHN0YXRlICovCi0JUy0+Q3VyclN0YXRlID0gSW5pdFN0YXRlOwotfQotCi0vKiEgXGJyaWVmIFRoaXMgZnVuY3Rpb24gZmlsbHMgaW4gdGhlIGZ1bmN0aW9uIHBvaW50ZXIgaW50byB0aGUgY2VsbCBpbiB0aGUgc3RhdGUgbWFjaGluZQotICoJXHBhcmFtICpTCXBvaW50ZXIgdG8gdGhlIHN0YXRlIG1hY2hpbmUKLSAqCVxwYXJhbSBTdAlzdGF0ZQotICoJXHBhcmFtIE1zZwlpbmNvbWluZyBtZXNzYWdlCi0gKglccGFyYW0gZgl0aGUgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgd2hlbiAoc3RhdGUsIG1lc3NhZ2UpIGNvbWJpbmF0aW9uIG9jY3VycyBhdCB0aGUgc3RhdGUgbWFjaGluZQotICoJXHByZSAqUyBzaG91bGQgYmUgYSBsZWdhbCBwb2ludGVyIHRvIHRoZSBzdGF0ZSBtYWNoaW5lLCBzdCwgbXNnLCBzaG91bGQgYmUgYWxsIHdpdGhpbiB0aGUgcmFuZ2UsIEJhc2Ugc2hvdWxkIGJlIHNldCBpbiB0aGUgaW5pdGlhbCBzdGF0ZQotICoJXHBvc3QKLQotIElSUUwgPSBQQVNTSVZFX0xFVkVMCi0KLSAqLwotdm9pZCBTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oc3RydWN0IHJ0X3N0YXRlX21hY2hpbmUgKlMsCi0JCQkgICB1bnNpZ25lZCBsb25nIFN0LAotCQkJICAgdW5zaWduZWQgbG9uZyBNc2csIElOIFNUQVRFX01BQ0hJTkVfRlVOQyBGdW5jKQotewotCXVuc2lnbmVkIGxvbmcgTXNnSWR4OwotCi0JTXNnSWR4ID0gTXNnIC0gUy0+QmFzZTsKLQotCWlmIChTdCA8IFMtPk5yU3RhdGUgJiYgTXNnSWR4IDwgUy0+TnJNc2cpIHsKLQkJLyogYm91bmRhcnkgY2hlY2tpbmcgYmVmb3JlIHNldHRpbmcgdGhlIGFjdGlvbiAqLwotCQlTLT5UcmFuc0Z1bmNbU3QgKiBTLT5Ock1zZyArIE1zZ0lkeF0gPSBGdW5jOwotCX0KLX0KLQotLyohIFxicmllZgkgVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBzdGF0ZSB0cmFuc2l0aW9uCi0gKglccGFyYW0JICpBZGFwdGVyIHRoZSBOSUMgYWRhcHRlciBwb2ludGVyCi0gKglccGFyYW0JICpTCSAgdGhlIHN0YXRlIG1hY2hpbmUKLSAqCVxwYXJhbQkgKkVsZW0JICB0aGUgbWVzc2FnZSB0byBiZSBleGVjdXRlZAotICoJXHJldHVybiAgIE5vbmUKLQotIElSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0gKi8KLXZvaWQgU3RhdGVNYWNoaW5lUGVyZm9ybUFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgICAgc3RydWN0IHJ0X3N0YXRlX21hY2hpbmUgKlMsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pCi17Ci0JKCooUy0+VHJhbnNGdW5jW1MtPkN1cnJTdGF0ZSAqIFMtPk5yTXNnICsgRWxlbS0+TXNnVHlwZSAtIFMtPkJhc2VdKSkKLQkgICAgKHBBZCwgRWxlbSk7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJVGhlIGRyb3AgZnVuY3Rpb24sIHdoZW4gbWFjaGluZSBleGVjdXRlcyB0aGlzLCB0aGUgbWVzc2FnZSBpcyBzaW1wbHkKLQkJaWdub3JlZC4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcsIHRoZSBtZXNzYWdlIGlzIGZyZWVkIGluCi0JCVN0YXRlTWFjaGluZVBlcmZvcm1BY3Rpb24oKQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgRHJvcChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pCi17Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLS8qIGxmc3IuYyAqLwotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0KLQlJUlFMID0gUEFTU0lWRV9MRVZFTAotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotdm9pZCBMZnNySW5pdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHVuc2lnbmVkIGxvbmcgU2VlZCkKLXsKLQlpZiAoU2VlZCA9PSAwKQotCQlwQWQtPk1sbWUuU2hpZnRSZWcgPSAxOwotCWVsc2UKLQkJcEFkLT5NbG1lLlNoaWZ0UmVnID0gU2VlZDsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXU4IFJhbmRvbUJ5dGUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCXVuc2lnbmVkIGxvbmcgaTsKLQl1OCBSLCBSZXN1bHQ7Ci0KLQlSID0gMDsKLQotCWlmIChwQWQtPk1sbWUuU2hpZnRSZWcgPT0gMCkKLQkJTmRpc0dldFN5c3RlbVVwVGltZSgodW5zaWduZWQgbG9uZyAqKSAmIHBBZC0+TWxtZS5TaGlmdFJlZyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCWlmIChwQWQtPk1sbWUuU2hpZnRSZWcgJiAweDAwMDAwMDAxKSB7Ci0JCQlwQWQtPk1sbWUuU2hpZnRSZWcgPQotCQkJICAgICgocEFkLT5NbG1lLgotCQkJICAgICAgU2hpZnRSZWcgXiBMRlNSX01BU0spID4+IDEpIHwgMHg4MDAwMDAwMDsKLQkJCVJlc3VsdCA9IDE7Ci0JCX0gZWxzZSB7Ci0JCQlwQWQtPk1sbWUuU2hpZnRSZWcgPSBwQWQtPk1sbWUuU2hpZnRSZWcgPj4gMTsKLQkJCVJlc3VsdCA9IDA7Ci0JCX0KLQkJUiA9IChSIDw8IDEpIHwgUmVzdWx0OwotCX0KLQotCXJldHVybiBSOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQkJVmVyaWZ5IHRoZSBzdXBwb3J0IHJhdGUgZm9yIGRpZmZlcmVudCBQSFkgdHlwZQotCi0JQXJndW1lbnRzOgotCQlwQWQgCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKLQotCVJldHVybiBWYWx1ZToKLQkJTm9uZQotCi0JSVJRTCA9IFBBU1NJVkVfTEVWRUwKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgUlRNUENoZWNrUmF0ZXMoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICAgSU4gdTggU3VwUmF0ZVtdLCBJTiB1OCAqIFN1cFJhdGVMZW4pCi17Ci0JdTggUmF0ZUlkeCwgaSwgajsKLQl1OCBOZXdSYXRlWzEyXSwgTmV3UmF0ZUxlbjsKLQotCU5ld1JhdGVMZW4gPSAwOwotCi0JaWYgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQikKLQkJUmF0ZUlkeCA9IDQ7Ci0JZWxzZQotCQlSYXRlSWR4ID0gMTI7Ci0KLQkvKiBDaGVjayBmb3Igc3VwcG9ydCByYXRlcyBleGNsdWRlIGJhc2ljIHJhdGUgYml0ICovCi0JZm9yIChpID0gMDsgaSA8ICpTdXBSYXRlTGVuOyBpKyspCi0JCWZvciAoaiA9IDA7IGogPCBSYXRlSWR4OyBqKyspCi0JCQlpZiAoKFN1cFJhdGVbaV0gJiAweDdmKSA9PSBSYXRlSWRUbzUwMEticHNbal0pCi0JCQkJTmV3UmF0ZVtOZXdSYXRlTGVuKytdID0gU3VwUmF0ZVtpXTsKLQotCSpTdXBSYXRlTGVuID0gTmV3UmF0ZUxlbjsKLQlOZGlzTW92ZU1lbW9yeShTdXBSYXRlLCBOZXdSYXRlLCBOZXdSYXRlTGVuKTsKLX0KLQotQk9PTEVBTiBSVE1QQ2hlY2tDaGFubmVsKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSB1OCBDZW50cmFsQ2hhbm5lbCwgdTggQ2hhbm5lbCkKLXsKLQl1OCBrOwotCXU4IFVwcGVyQ2hhbm5lbCA9IDAsIExvd2VyQ2hhbm5lbCA9IDA7Ci0JdTggTm9FZmZlY3RDaGFubmVsaW5MaXN0ID0gMDsKLQotCS8qIEZpbmQgdXBwZXIgYW5kIGxvd2VyIGNoYW5uZWwgYWNjb3JkaW5nIHRvIDQwTUh6IGN1cnJlbnQgb3BlcmF0aW9uLiAqLwotCWlmIChDZW50cmFsQ2hhbm5lbCA8IENoYW5uZWwpIHsKLQkJVXBwZXJDaGFubmVsID0gQ2hhbm5lbDsKLQkJaWYgKENlbnRyYWxDaGFubmVsID4gMikKLQkJCUxvd2VyQ2hhbm5lbCA9IENlbnRyYWxDaGFubmVsIC0gMjsKLQkJZWxzZQotCQkJcmV0dXJuIEZBTFNFOwotCX0gZWxzZSBpZiAoQ2VudHJhbENoYW5uZWwgPiBDaGFubmVsKSB7Ci0JCVVwcGVyQ2hhbm5lbCA9IENlbnRyYWxDaGFubmVsICsgMjsKLQkJTG93ZXJDaGFubmVsID0gQ2hhbm5lbDsKLQl9Ci0KLQlmb3IgKGsgPSAwOyBrIDwgcEFkLT5DaGFubmVsTGlzdE51bTsgaysrKSB7Ci0JCWlmIChwQWQtPkNoYW5uZWxMaXN0W2tdLkNoYW5uZWwgPT0gVXBwZXJDaGFubmVsKSB7Ci0JCQlOb0VmZmVjdENoYW5uZWxpbkxpc3QrKzsKLQkJfQotCQlpZiAocEFkLT5DaGFubmVsTGlzdFtrXS5DaGFubmVsID09IExvd2VyQ2hhbm5lbCkgewotCQkJTm9FZmZlY3RDaGFubmVsaW5MaXN0Kys7Ci0JCX0KLQl9Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJICgiVG90YWwgQ2hhbm5lbCBpbiBDaGFubmVsIExpc3QgPSBbJWRdXG4iLAotCQkgIE5vRWZmZWN0Q2hhbm5lbGluTGlzdCkpOwotCWlmIChOb0VmZmVjdENoYW5uZWxpbkxpc3QgPT0gMikKLQkJcmV0dXJuIFRSVUU7Ci0JZWxzZQotCQlyZXR1cm4gRkFMU0U7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCQlWZXJpZnkgdGhlIHN1cHBvcnQgcmF0ZSBmb3IgSFQgcGh5IHR5cGUKLQotCUFyZ3VtZW50czoKLQkJcEFkIAkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCi0KLQlSZXR1cm4gVmFsdWU6Ci0JCUZBTFNFIGlmIHBBZC0+Q29tbW9uQ2ZnLlN1cHBvcnRlZEh0UGh5IGRvZXNuJ3QgYWNjZXB0IHRoZSBwSHRDYXBhYmlsaXR5LiAgKEFQIE1vZGUpCi0KLQlJUlFMID0gUEFTU0lWRV9MRVZFTAotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotQk9PTEVBTiBSVE1QQ2hlY2tIdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgICB1OCBXY2lkLAotCQkgICAgc3RydWN0IHJ0X2h0X2NhcGFiaWxpdHlfaWUgKiBwSHRDYXBhYmlsaXR5LAotCQkgICAgc3RydWN0IHJ0X2FkZF9odF9pbmZvX2llICogcEFkZEh0SW5mbykKLXsKLQlpZiAoV2NpZCA+PSBNQVhfTEVOX09GX01BQ19UQUJMRSkKLQkJcmV0dXJuIEZBTFNFOwotCi0JLyogSWYgdXNlIEFNU0RVLCBzZXQgZmxhZy4gKi8KLQlpZiAocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkFtc2R1RW5hYmxlKQotCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKCZwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdLAotCQkJCSAgICAgICBmQ0xJRU5UX1NUQVRVU19BTVNEVV9JTlVTRUQpOwotCS8qIFNhdmUgUGVlciBDYXBhYmlsaXR5ICovCi0JaWYgKHBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5TaG9ydEdJZm9yMjApCi0JCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcoJnBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0sCi0JCQkJICAgICAgIGZDTElFTlRfU1RBVFVTX1NHSTIwX0NBUEFCTEUpOwotCWlmIChwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uU2hvcnRHSWZvcjQwKQotCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKCZwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdLAotCQkJCSAgICAgICBmQ0xJRU5UX1NUQVRVU19TR0k0MF9DQVBBQkxFKTsKLQlpZiAocEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLlR4U1RCQykKLQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRygmcEFkLT5NYWNUYWIuQ29udGVudFtXY2lkXSwKLQkJCQkgICAgICAgZkNMSUVOVF9TVEFUVVNfVHhTVEJDX0NBUEFCTEUpOwotCWlmIChwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uUnhTVEJDKQotCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKCZwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdLAotCQkJCSAgICAgICBmQ0xJRU5UX1NUQVRVU19SeFNUQkNfQ0FQQUJMRSk7Ci0JaWYgKHBBZC0+Q29tbW9uQ2ZnLmJSZGcgJiYgcEh0Q2FwYWJpbGl0eS0+RXh0SHRDYXBJbmZvLlJER1N1cHBvcnQpIHsKLQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRygmcEFkLT5NYWNUYWIuQ29udGVudFtXY2lkXSwKLQkJCQkgICAgICAgZkNMSUVOVF9TVEFUVVNfUkRHX0NBUEFCTEUpOwotCX0KLQotCWlmIChXY2lkIDwgTUFYX0xFTl9PRl9NQUNfVEFCTEUpIHsKLQkJcEFkLT5NYWNUYWIuQ29udGVudFtXY2lkXS5NcGR1RGVuc2l0eSA9Ci0JCSAgICBwSHRDYXBhYmlsaXR5LT5IdENhcFBhcm0uTXBkdURlbnNpdHk7Ci0JfQotCS8qIFdpbGwgY2hlY2sgQ2hhbm5lbFdpZHRoIGZvciBNQ1NTZXRbNF0gYmVsb3cgKi8KLQlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lk1DU1NldFs0XSA9IDB4MTsKLQlzd2l0Y2ggKHBBZC0+Q29tbW9uQ2ZnLlJ4U3RyZWFtKSB7Ci0JY2FzZSAxOgotCQlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lk1DU1NldFswXSA9IDB4ZmY7Ci0JCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuTUNTU2V0WzFdID0gMHgwMDsKLQkJcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5NQ1NTZXRbMl0gPSAweDAwOwotCQlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lk1DU1NldFszXSA9IDB4MDA7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5NQ1NTZXRbMF0gPSAweGZmOwotCQlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lk1DU1NldFsxXSA9IDB4ZmY7Ci0JCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuTUNTU2V0WzJdID0gMHgwMDsKLQkJcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5NQ1NTZXRbM10gPSAweDAwOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuTUNTU2V0WzBdID0gMHhmZjsKLQkJcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5NQ1NTZXRbMV0gPSAweGZmOwotCQlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lk1DU1NldFsyXSA9IDB4ZmY7Ci0JCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuTUNTU2V0WzNdID0gMHgwMDsKLQkJYnJlYWs7Ci0JfQotCi0JcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQ2hhbm5lbFdpZHRoID0KLQkgICAgcEFkZEh0SW5mby0+QWRkSHRJbmZvLlJlY29tV2lkdGggJiBwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuCi0JICAgIENoYW5uZWxXaWR0aDsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCJSVE1QQ2hlY2tIdDo6IEh0Q2FwSW5mby5DaGFubmVsV2lkdGg9JWQsIFJlY29tV2lkdGg9JWQsIERlc2lyZWRIdFBoeS5DaGFubmVsV2lkdGg9JWQsIEJXNDBNQXZhaWxGb3JBL0c9JWQvJWQsIFBoeU1vZGU9JWQgXG4iLAotCQkgIHBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkNoYW5uZWxXaWR0aCwKLQkJICBwQWRkSHRJbmZvLT5BZGRIdEluZm8uUmVjb21XaWR0aCwKLQkJICBwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQ2hhbm5lbFdpZHRoLAotCQkgIHBBZC0+TmljQ29uZmlnMi5maWVsZC5CVzQwTUF2YWlsRm9yQSwKLQkJICBwQWQtPk5pY0NvbmZpZzIuZmllbGQuQlc0ME1BdmFpbEZvckcsCi0JCSAgcEFkLT5Db21tb25DZmcuUGh5TW9kZSkpOwotCi0JcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uR0YgPQotCSAgICBwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uR0YgJiBwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuR0Y7Ci0KLQkvKiBTZW5kIEFzc29jIFJlcSB3aXRoIG15IEhUIGNhcGFiaWxpdHkuICovCi0JcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQU1zZHVTaXplID0KLQkgICAgcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkFtc2R1U2l6ZTsKLQlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5NaW1vUHMgPQotCSAgICBwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuTWltb1BzOwotCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLlNob3J0R0lmb3IyMCA9Ci0JICAgIChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuU2hvcnRHSWZvcjIwKSAmIChwSHRDYXBhYmlsaXR5LT4KLQkJCQkJCQkgIEh0Q2FwSW5mby4KLQkJCQkJCQkgIFNob3J0R0lmb3IyMCk7Ci0JcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uU2hvcnRHSWZvcjQwID0KLQkgICAgKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5TaG9ydEdJZm9yNDApICYgKHBIdENhcGFiaWxpdHktPgotCQkJCQkJCSAgSHRDYXBJbmZvLgotCQkJCQkJCSAgU2hvcnRHSWZvcjQwKTsKLQlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5UeFNUQkMgPQotCSAgICAocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlR4U1RCQykgJiAocEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLgotCQkJCQkJICAgIFJ4U1RCQyk7Ci0JcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uUnhTVEJDID0KLQkgICAgKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5SeFNUQkMpICYgKHBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby4KLQkJCQkJCSAgICBUeFNUQkMpOwotCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBQYXJtLk1heFJBbXBkdUZhY3RvciA9Ci0JICAgIHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5NYXhSQW1wZHVGYWN0b3I7Ci0JcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5IdENhcFBhcm0uTXBkdURlbnNpdHkgPQotCSAgICBwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBQYXJtLk1wZHVEZW5zaXR5OwotCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuRXh0SHRDYXBJbmZvLlBsdXNIVEMgPQotCSAgICBwSHRDYXBhYmlsaXR5LT5FeHRIdENhcEluZm8uUGx1c0hUQzsKLQlwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdLkhUQ2FwYWJpbGl0eS5FeHRIdENhcEluZm8uUGx1c0hUQyA9Ci0JICAgIHBIdENhcGFiaWxpdHktPkV4dEh0Q2FwSW5mby5QbHVzSFRDOwotCWlmIChwQWQtPkNvbW1vbkNmZy5iUmRnKSB7Ci0JCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuRXh0SHRDYXBJbmZvLlJER1N1cHBvcnQgPQotCQkgICAgcEh0Q2FwYWJpbGl0eS0+RXh0SHRDYXBJbmZvLlJER1N1cHBvcnQ7Ci0JCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuRXh0SHRDYXBJbmZvLlBsdXNIVEMgPSAxOwotCX0KLQotCWlmIChwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5DaGFubmVsV2lkdGggPT0gQldfMjApCi0JCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuTUNTU2V0WzRdID0gMHgwOwkvKiBCVzIwIGNhbid0IHRyYW5zbWl0IE1DUzMyICovCi0KLQlDT1BZX0FQX0hUU0VUVElOR1NfRlJPTV9CRUFDT04ocEFkLCBwSHRDYXBhYmlsaXR5KTsKLQlyZXR1cm4gVFJVRTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JCVZlcmlmeSB0aGUgc3VwcG9ydCByYXRlIGZvciBkaWZmZXJlbnQgUEhZIHR5cGUKLQotCUFyZ3VtZW50czoKLQkJcEFkIAkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCi0KLQlSZXR1cm4gVmFsdWU6Ci0JCU5vbmUKLQotCUlSUUwgPSBQQVNTSVZFX0xFVkVMCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFJUTVBVcGRhdGVNbG1lUmF0ZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0JdTggTWluaW11bVJhdGU7Ci0JdTggUHJvcGVyTWxtZVJhdGU7CS8qPSBSQVRFXzU0OyAqLwotCXU4IGksIGosIFJhdGVJZHggPSAxMjsJLyoxLCAyLCA1LjUsIDExLCA2LCA5LCAxMiwgMTgsIDI0LCAzNiwgNDgsIDU0ICovCi0JQk9PTEVBTiBiTWF0Y2ggPSBGQUxTRTsKLQotCXN3aXRjaCAocEFkLT5Db21tb25DZmcuUGh5TW9kZSkgewotCWNhc2UgUEhZXzExQjoKLQkJUHJvcGVyTWxtZVJhdGUgPSBSQVRFXzExOwotCQlNaW5pbXVtUmF0ZSA9IFJBVEVfMTsKLQkJYnJlYWs7Ci0JY2FzZSBQSFlfMTFCR19NSVhFRDoKLQljYXNlIFBIWV8xMUFCR05fTUlYRUQ6Ci0JY2FzZSBQSFlfMTFCR05fTUlYRUQ6Ci0JCWlmICgocEFkLT5NbG1lQXV4LlN1cFJhdGVMZW4gPT0gNCkgJiYKLQkJICAgIChwQWQtPk1sbWVBdXguRXh0UmF0ZUxlbiA9PSAwKSkKLQkJCS8qIEIgb25seSBBUCAqLwotCQkJUHJvcGVyTWxtZVJhdGUgPSBSQVRFXzExOwotCQllbHNlCi0JCQlQcm9wZXJNbG1lUmF0ZSA9IFJBVEVfMjQ7Ci0KLQkJaWYgKHBBZC0+TWxtZUF1eC5DaGFubmVsIDw9IDE0KQotCQkJTWluaW11bVJhdGUgPSBSQVRFXzE7Ci0JCWVsc2UKLQkJCU1pbmltdW1SYXRlID0gUkFURV82OwotCQlicmVhazsKLQljYXNlIFBIWV8xMUE6Ci0JY2FzZSBQSFlfMTFOXzJfNEc6CS8qIHJ0Mjg2MCBuZWVkIHRvIGNoZWNrIG1sbWVyYXRlIGZvciA4MDIuMTFuICovCi0JY2FzZSBQSFlfMTFHTl9NSVhFRDoKLQljYXNlIFBIWV8xMUFHTl9NSVhFRDoKLQljYXNlIFBIWV8xMUFOX01JWEVEOgotCWNhc2UgUEhZXzExTl81RzoKLQkJUHJvcGVyTWxtZVJhdGUgPSBSQVRFXzI0OwotCQlNaW5pbXVtUmF0ZSA9IFJBVEVfNjsKLQkJYnJlYWs7Ci0JY2FzZSBQSFlfMTFBQkdfTUlYRUQ6Ci0JCVByb3Blck1sbWVSYXRlID0gUkFURV8yNDsKLQkJaWYgKHBBZC0+TWxtZUF1eC5DaGFubmVsIDw9IDE0KQotCQkJTWluaW11bVJhdGUgPSBSQVRFXzE7Ci0JCWVsc2UKLQkJCU1pbmltdW1SYXRlID0gUkFURV82OwotCQlicmVhazsKLQlkZWZhdWx0OgkJLyogZXJyb3IgKi8KLQkJUHJvcGVyTWxtZVJhdGUgPSBSQVRFXzE7Ci0JCU1pbmltdW1SYXRlID0gUkFURV8xOwotCQlicmVhazsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcEFkLT5NbG1lQXV4LlN1cFJhdGVMZW47IGkrKykgewotCQlmb3IgKGogPSAwOyBqIDwgUmF0ZUlkeDsgaisrKSB7Ci0JCQlpZiAoKHBBZC0+TWxtZUF1eC5TdXBSYXRlW2ldICYgMHg3ZikgPT0KLQkJCSAgICBSYXRlSWRUbzUwMEticHNbal0pIHsKLQkJCQlpZiAoaiA9PSBQcm9wZXJNbG1lUmF0ZSkgewotCQkJCQliTWF0Y2ggPSBUUlVFOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlpZiAoYk1hdGNoKQotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKGJNYXRjaCA9PSBGQUxTRSkgewotCQlmb3IgKGkgPSAwOyBpIDwgcEFkLT5NbG1lQXV4LkV4dFJhdGVMZW47IGkrKykgewotCQkJZm9yIChqID0gMDsgaiA8IFJhdGVJZHg7IGorKykgewotCQkJCWlmICgocEFkLT5NbG1lQXV4LkV4dFJhdGVbaV0gJiAweDdmKSA9PQotCQkJCSAgICBSYXRlSWRUbzUwMEticHNbal0pIHsKLQkJCQkJaWYgKGogPT0gUHJvcGVyTWxtZVJhdGUpIHsKLQkJCQkJCWJNYXRjaCA9IFRSVUU7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQotCQkJaWYgKGJNYXRjaCkKLQkJCQlicmVhazsKLQkJfQotCX0KLQotCWlmIChiTWF0Y2ggPT0gRkFMU0UpIHsKLQkJUHJvcGVyTWxtZVJhdGUgPSBNaW5pbXVtUmF0ZTsKLQl9Ci0KLQlwQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZSA9IE1pbmltdW1SYXRlOwotCXBBZC0+Q29tbW9uQ2ZnLlJ0c1JhdGUgPSBQcm9wZXJNbG1lUmF0ZTsKLQlpZiAocEFkLT5Db21tb25DZmcuTWxtZVJhdGUgPj0gUkFURV82KSB7Ci0JCXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NT0RFID0gTU9ERV9PRkRNOwotCQlwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTUNTID0KLQkJICAgIE9mZG1SYXRlVG9SeHdpTUNTW3BBZC0+Q29tbW9uQ2ZnLk1sbWVSYXRlXTsKLQkJcEFkLT5NYWNUYWIuQ29udGVudFtCU1MwTWNhc3RfV0NJRF0uSFRQaHlNb2RlLmZpZWxkLk1PREUgPQotCQkgICAgTU9ERV9PRkRNOwotCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTUzBNY2FzdF9XQ0lEXS5IVFBoeU1vZGUuZmllbGQuTUNTID0KLQkJICAgIE9mZG1SYXRlVG9SeHdpTUNTW3BBZC0+Q29tbW9uQ2ZnLk1sbWVSYXRlXTsKLQl9IGVsc2UgewotCQlwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTU9ERSA9IE1PREVfQ0NLOwotCQlwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTUNTID0gcEFkLT5Db21tb25DZmcuTWxtZVJhdGU7Ci0JCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTME1jYXN0X1dDSURdLkhUUGh5TW9kZS5maWVsZC5NT0RFID0KLQkJICAgIE1PREVfQ0NLOwotCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTUzBNY2FzdF9XQ0lEXS5IVFBoeU1vZGUuZmllbGQuTUNTID0KLQkJICAgIHBBZC0+Q29tbW9uQ2ZnLk1sbWVSYXRlOwotCX0KLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCJSVE1QVXBkYXRlTWxtZVJhdGUgPT0+ICAgTWxtZVRyYW5zbWl0ID0gMHgleCAgXG4iLAotCQkgIHBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC53b3JkKSk7Ci19Ci0KLWNoYXIgUlRNUE1heFJzc2koc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgY2hhciBSc3NpMCwgY2hhciBSc3NpMSwgY2hhciBSc3NpMikKLXsKLQljaGFyIGxhcmdlciA9IC0xMjc7Ci0KLQlpZiAoKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMSkgJiYgKFJzc2kwICE9IDApKSB7Ci0JCWxhcmdlciA9IFJzc2kwOwotCX0KLQotCWlmICgocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA+PSAyKSAmJiAoUnNzaTEgIT0gMCkpIHsKLQkJbGFyZ2VyID0gbWF4KFJzc2kwLCBSc3NpMSk7Ci0JfQotCi0JaWYgKChwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID09IDMpICYmIChSc3NpMiAhPSAwKSkgewotCQlsYXJnZXIgPSBtYXgobGFyZ2VyLCBSc3NpMik7Ci0JfQotCi0JaWYgKGxhcmdlciA9PSAtMTI3KQotCQlsYXJnZXIgPSAwOwotCi0JcmV0dXJuIGxhcmdlcjsKLX0KLQotLyoKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBSb3V0aW5lIERlc2NyaXB0aW9uOgotICAgICAgICBQZXJpb2RpYyBldmFsdWF0ZSBhbnRlbm5hIGxpbmsgc3RhdHVzCi0KLSAgICBBcmd1bWVudHM6Ci0gICAgICAgIHBBZCAgICAgICAgIC0gQWRhcHRlciBwb2ludGVyCi0KLSAgICBSZXR1cm4gVmFsdWU6Ci0gICAgICAgIE5vbmUKLQotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgQXNpY0V2YWx1YXRlUnhBbnQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCXU4IEJCUFIzID0gMDsKLQotCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MgfAotCQkJICAgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwKLQkJCSAgIGZSVE1QX0FEQVBURVJfUkFESU9fT0ZGIHwKLQkJCSAgIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCB8Ci0JCQkgICBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKSB8fAotCSAgICBPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpCi0jaWZkZWYgUlQzMHh4Ci0JICAgIHx8IChwQWQtPkVlcHJvbUFjY2VzcykKLSNlbmRpZiAvKiBSVDMweHggLy8gKi8KLSNpZmRlZiBSVDMwOTAKLQkgICAgfHwgKHBBZC0+YlBDSWNsa09mZiA9PSBUUlVFKQotI2VuZGlmIC8qIFJUMzA5MCAvLyAqLwotCSAgICApCi0JCXJldHVybjsKLQotCXsKLQkJLyppZiAocEFkLT5TdGFDZmcuUHNtID09IFBXUl9TQVZFKSAqLwotCQkvKiAgICAgIHJldHVybjsgKi8KLQotCQl7Ci0KLQkJCWlmIChwQWQtPlN0YUNmZy5Qc20gPT0gUFdSX1NBVkUpCi0JCQkJcmV0dXJuOwotCi0JCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsICZCQlBSMyk7Ci0JCQlCQlBSMyAmPSAofjB4MTgpOwotCQkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMykgewotCQkJCUJCUFIzIHw9ICgweDEwKTsKLQkJCX0gZWxzZSBpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA9PSAyKSB7Ci0JCQkJQkJQUjMgfD0gKDB4OCk7Ci0JCQl9IGVsc2UgaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMSkgewotCQkJCUJCUFIzIHw9ICgweDApOwotCQkJfQotCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgQkJQUjMpOwotI2lmZGVmIFJUTVBfTUFDX1BDSQotCQkJcEFkLT5TdGFDZmcuQkJQUjMgPSBCQlBSMzsKLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLQkJCWlmIChPUFNUQVRVU19URVNUX0ZMQUcKLQkJCSAgICAocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkKLQkJCSAgICApIHsKLQkJCQl1bnNpZ25lZCBsb25nIFR4VG90YWxDbnQgPQotCQkJCSAgICBwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4Tm9SZXRyeU9rQ291bnQgKwotCQkJCSAgICBwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4UmV0cnlPa0NvdW50ICsKLQkJCQkgICAgcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeEZhaWxDb3VudDsKLQotCQkJCS8qIGR5bmFtaWMgYWRqdXN0IGFudGVubmEgZXZhbHVhdGlvbiBwZXJpb2QgYWNjb3JkaW5nIHRvIHRoZSB0cmFmZmljICovCi0JCQkJaWYgKFR4VG90YWxDbnQgPiA1MCkgewotCQkJCQlSVE1QU2V0VGltZXIoJnBBZC0+TWxtZS5SeEFudEV2YWxUaW1lciwKLQkJCQkJCSAgICAgMjApOwotCQkJCQlwQWQtPk1sbWUuYkxvd1Rocm91Z2hwdXQgPSBGQUxTRTsKLQkJCQl9IGVsc2UgewotCQkJCQlSVE1QU2V0VGltZXIoJnBBZC0+TWxtZS5SeEFudEV2YWxUaW1lciwKLQkJCQkJCSAgICAgMzAwKTsKLQkJCQkJcEFkLT5NbG1lLmJMb3dUaHJvdWdocHV0ID0gVFJVRTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCX0KLQotfQotCi0vKgotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIFJvdXRpbmUgRGVzY3JpcHRpb246Ci0gICAgICAgIEFmdGVyIGV2YWx1YXRpb24sIGNoZWNrIGFudGVubmEgbGluayBzdGF0dXMKLQotICAgIEFyZ3VtZW50czoKLSAgICAgICAgcEFkICAgICAgICAgLSBBZGFwdGVyIHBvaW50ZXIKLQotICAgIFJldHVybiBWYWx1ZToKLSAgICAgICAgTm9uZQotCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBBc2ljUnhBbnRFdmFsVGltZW91dCh2b2lkICpTeXN0ZW1TcGVjaWZpYzEsCi0JCQkgIHZvaWQgKkZ1bmN0aW9uQ29udGV4dCwKLQkJCSAgdm9pZCAqU3lzdGVtU3BlY2lmaWMyLCB2b2lkICpTeXN0ZW1TcGVjaWZpYzMpCi17Ci0Jc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkID0gKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKilGdW5jdGlvbkNvbnRleHQ7Ci0JdTggQkJQUjMgPSAwOwotCWNoYXIgbGFyZ2VyID0gLTEyNywgcnNzaTAsIHJzc2kxLCByc3NpMjsKLQotCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MgfAotCQkJICAgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwKLQkJCSAgIGZSVE1QX0FEQVBURVJfUkFESU9fT0ZGIHwKLQkJCSAgIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkgfHwKLQkgICAgT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKQotI2lmZGVmIFJUMzB4eAotCSAgICB8fCAocEFkLT5FZXByb21BY2Nlc3MpCi0jZW5kaWYgLyogUlQzMHh4IC8vICovCi0jaWZkZWYgUlQzMDkwCi0JICAgIHx8IChwQWQtPmJQQ0ljbGtPZmYgPT0gVFJVRSkKLSNlbmRpZiAvKiBSVDMwOTAgLy8gKi8KLQkgICAgKQotCQlyZXR1cm47Ci0KLQl7Ci0JCS8qaWYgKHBBZC0+U3RhQ2ZnLlBzbSA9PSBQV1JfU0FWRSkgKi8KLQkJLyogICAgICByZXR1cm47ICovCi0JCXsKLQkJCWlmIChwQWQtPlN0YUNmZy5Qc20gPT0gUFdSX1NBVkUpCi0JCQkJcmV0dXJuOwotCi0JCQkvKiBpZiB0aGUgdHJhZmZpYyBpcyBsb3csIHVzZSBhdmVyYWdlIHJzc2kgYXMgdGhlIGNyaXRlcmlhICovCi0JCQlpZiAocEFkLT5NbG1lLmJMb3dUaHJvdWdocHV0ID09IFRSVUUpIHsKLQkJCQlyc3NpMCA9IHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kwOwotCQkJCXJzc2kxID0gcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTE7Ci0JCQkJcnNzaTIgPSBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMjsKLQkJCX0gZWxzZSB7Ci0JCQkJcnNzaTAgPSBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkF2Z1Jzc2kwOwotCQkJCXJzc2kxID0gcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMTsKLQkJCQlyc3NpMiA9IHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTI7Ci0JCQl9Ci0KLQkJCWlmIChwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID09IDMpIHsKLQkJCQlsYXJnZXIgPSBtYXgocnNzaTAsIHJzc2kxKTsKLQotCQkJCWlmIChsYXJnZXIgPiAocnNzaTIgKyAyMCkpCi0JCQkJCXBBZC0+TWxtZS5SZWFsUnhQYXRoID0gMjsKLQkJCQllbHNlCi0JCQkJCXBBZC0+TWxtZS5SZWFsUnhQYXRoID0gMzsKLQkJCX0gZWxzZSBpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA9PSAyKSB7Ci0JCQkJaWYgKHJzc2kwID4gKHJzc2kxICsgMjApKQotCQkJCQlwQWQtPk1sbWUuUmVhbFJ4UGF0aCA9IDE7Ci0JCQkJZWxzZQotCQkJCQlwQWQtPk1sbWUuUmVhbFJ4UGF0aCA9IDI7Ci0JCQl9Ci0KLQkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJkJCUFIzKTsKLQkJCUJCUFIzICY9ICh+MHgxOCk7Ci0JCQlpZiAocEFkLT5NbG1lLlJlYWxSeFBhdGggPT0gMykgewotCQkJCUJCUFIzIHw9ICgweDEwKTsKLQkJCX0gZWxzZSBpZiAocEFkLT5NbG1lLlJlYWxSeFBhdGggPT0gMikgewotCQkJCUJCUFIzIHw9ICgweDgpOwotCQkJfSBlbHNlIGlmIChwQWQtPk1sbWUuUmVhbFJ4UGF0aCA9PSAxKSB7Ci0JCQkJQkJQUjMgfD0gKDB4MCk7Ci0JCQl9Ci0JCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBCQlBSMyk7Ci0jaWZkZWYgUlRNUF9NQUNfUENJCi0JCQlwQWQtPlN0YUNmZy5CQlBSMyA9IEJCUFIzOwotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotCQl9Ci0JfQotCi19Ci0KLXZvaWQgQVBTRFBlcmlvZGljRXhlYyh2b2lkICpTeXN0ZW1TcGVjaWZpYzEsCi0JCSAgICAgIHZvaWQgKkZ1bmN0aW9uQ29udGV4dCwKLQkJICAgICAgdm9pZCAqU3lzdGVtU3BlY2lmaWMyLCB2b2lkICpTeXN0ZW1TcGVjaWZpYzMpCi17Ci0Jc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkID0gKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKilGdW5jdGlvbkNvbnRleHQ7Ci0KLQlpZiAoIU9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSkKLQkJcmV0dXJuOwotCi0JcEFkLT5Db21tb25DZmcuVHJpZ2dlclRpbWVyQ291bnQrKzsKLQotLyogRHJpdmVyIHNob3VsZCBub3Qgc2VuZCB0cmlnZ2VyIGZyYW1lLCBpdCBzaG91bGQgYmUgc2VuZCBieSBhcHBsaWNhdGlvbiBsYXllciAqLwotLyoKLQlpZiAocEFkLT5Db21tb25DZmcuYkFQU0RDYXBhYmxlICYmIHBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uYkFQU0RDYXBhYmxlCi0JCSYmIChwQWQtPkNvbW1vbkNmZy5iTmVlZFNlbmRUcmlnZ2VyRnJhbWUgfHwKLQkJKCgocEFkLT5Db21tb25DZmcuVHJpZ2dlclRpbWVyQ291bnQlMjApID09IDE5KSAmJiAoIXBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfQkUgfHwgIXBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfQksgfHwgIXBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfVkkgfHwgIXBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfVk8pKSkpCi0JewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlNlbmRpbmcgdHJpZ2dlciBmcmFtZSBhbmQgZW50ZXIgc2VydmljZSBwZXJpb2Qgd2hlbiBzdXBwb3J0IEFQU0RcbiIpKTsKLQkJUlRNUFNlbmROdWxsRnJhbWUocEFkLCBwQWQtPkNvbW1vbkNmZy5UeFJhdGUsIFRSVUUpOwotCQlwQWQtPkNvbW1vbkNmZy5iTmVlZFNlbmRUcmlnZ2VyRnJhbWUgPSBGQUxTRTsKLQkJcEFkLT5Db21tb25DZmcuVHJpZ2dlclRpbWVyQ291bnQgPSAwOwotCQlwQWQtPkNvbW1vbkNmZy5iSW5TZXJ2aWNlUGVyaW9kID0gVFJVRTsKLQl9Ki8KLX0KLQotLyoKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBSb3V0aW5lIERlc2NyaXB0aW9uOgotICAgICAgICBTZXQvcmVzZXQgTUFDIHJlZ2lzdGVycyBhY2NvcmRpbmcgdG8gYlBpZ2d5QmFjayBwYXJhbWV0ZXIKLQotICAgIEFyZ3VtZW50czoKLSAgICAgICAgcEFkICAgICAgICAgLSBBZGFwdGVyIHBvaW50ZXIKLSAgICAgICAgYlBpZ2d5QmFjayAgLSBFbmFibGUgLyBEaXNhYmxlIFBpZ2d5LUJhY2sKLQotICAgIFJldHVybiBWYWx1ZToKLSAgICAgICAgTm9uZQotCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBSVE1QU2V0UGlnZ3lCYWNrKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgSU4gQk9PTEVBTiBiUGlnZ3lCYWNrKQotewotCVRYX0xJTktfQ0ZHX1NUUlVDIFR4TGlua0NmZzsKLQotCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfTElOS19DRkcsICZUeExpbmtDZmcud29yZCk7Ci0KLQlUeExpbmtDZmcuZmllbGQuVHhDRkFja0VuID0gYlBpZ2d5QmFjazsKLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9MSU5LX0NGRywgVHhMaW5rQ2ZnLndvcmQpOwotfQotCi0vKgotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIFJvdXRpbmUgRGVzY3JpcHRpb246Ci0gICAgICAgIGNoZWNrIGlmIHRoaXMgZW50cnkgbmVlZCB0byBzd2l0Y2ggcmF0ZSBhdXRvbWF0aWNhbGx5Ci0KLSAgICBBcmd1bWVudHM6Ci0gICAgICAgIHBBZAotICAgICAgICBwRW50cnkKLQotICAgIFJldHVybiBWYWx1ZToKLSAgICAgICAgVFVSRQotICAgICAgICBGQUxTRQotCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotQk9PTEVBTiBSVE1QQ2hlY2tFbnRyeUVuYWJsZUF1dG9SYXRlU3dpdGNoKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkJICAgc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcEVudHJ5KQotewotCUJPT0xFQU4gcmVzdWx0ID0gVFJVRTsKLQotCXsKLQkJLyogb25seSBhc3NvY2lhdGVkIFNUQSBjb3VudHMgKi8KLQkJaWYgKHBFbnRyeSAmJiAocEVudHJ5LT5WYWxpZEFzQ0xJKQotCQkgICAgJiYgKHBFbnRyeS0+U3N0ID09IFNTVF9BU1NPQykpIHsKLQkJCXJlc3VsdCA9IHBBZC0+U3RhQ2ZnLmJBdXRvVHhSYXRlU3dpdGNoOwotCQl9IGVsc2UKLQkJCXJlc3VsdCA9IEZBTFNFOwotCX0KLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLUJPT0xFQU4gUlRNUEF1dG9SYXRlU3dpdGNoQ2hlY2soc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCXsKLQkJaWYgKHBBZC0+U3RhQ2ZnLmJBdXRvVHhSYXRlU3dpdGNoKQotCQkJcmV0dXJuIFRSVUU7Ci0JfQotCXJldHVybiBGQUxTRTsKLX0KLQotLyoKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBSb3V0aW5lIERlc2NyaXB0aW9uOgotICAgICAgICBjaGVjayBpZiB0aGlzIGVudHJ5IG5lZWQgdG8gZml4IHR4IGxlZ2FjeSByYXRlCi0KLSAgICBBcmd1bWVudHM6Ci0gICAgICAgIHBBZAotICAgICAgICBwRW50cnkKLQotICAgIFJldHVybiBWYWx1ZToKLSAgICAgICAgVFVSRQotICAgICAgICBGQUxTRQotCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdTggUlRNUFN0YUZpeGVkVHhNb2RlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcEVudHJ5KQotewotCXU4IHR4X21vZGUgPSBGSVhFRF9UWE1PREVfSFQ7Ci0KLQl7Ci0JCXR4X21vZGUgPQotCQkgICAgKHU4KXBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuCi0JCSAgICBGaXhlZFR4TW9kZTsKLQl9Ci0KLQlyZXR1cm4gdHhfbW9kZTsKLX0KLQotLyoKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBSb3V0aW5lIERlc2NyaXB0aW9uOgotICAgICAgICBPdmVyd3JpdGUgSFQgVHggTW9kZSBieSBGaXhlZCBMZWdlbmN5IFR4IE1vZGUsIGlmIHNwZWNpZmllZC4KLQotICAgIEFyZ3VtZW50czoKLSAgICAgICAgcEFkCi0gICAgICAgIHBFbnRyeQotCi0gICAgUmV0dXJuIFZhbHVlOgotICAgICAgICBUVVJFCi0gICAgICAgIEZBTFNFCi0KLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFJUTVBVcGRhdGVMZWdhY3lUeFNldHRpbmcodTggZml4ZWRfdHhfbW9kZSwgc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcEVudHJ5KQotewotCUhUVFJBTlNNSVRfU0VUVElORyBUcmFuc21pdFNldHRpbmc7Ci0KLQlpZiAoZml4ZWRfdHhfbW9kZSA9PSBGSVhFRF9UWE1PREVfSFQpCi0JCXJldHVybjsKLQotCVRyYW5zbWl0U2V0dGluZy53b3JkID0gMDsKLQotCVRyYW5zbWl0U2V0dGluZy5maWVsZC5NT0RFID0gcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTU9ERTsKLQlUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTUNTOwotCi0JaWYgKGZpeGVkX3R4X21vZGUgPT0gRklYRURfVFhNT0RFX0NDSykgewotCQlUcmFuc21pdFNldHRpbmcuZmllbGQuTU9ERSA9IE1PREVfQ0NLOwotCQkvKiBDQ0sgbW9kZSBhbGxvdyBNQ1MgMH4zICovCi0JCWlmIChUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID4gTUNTXzMpCi0JCQlUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gTUNTXzM7Ci0JfSBlbHNlIHsKLQkJVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1PREUgPSBNT0RFX09GRE07Ci0JCS8qIE9GRE0gbW9kZSBhbGxvdyBNQ1MgMH43ICovCi0JCWlmIChUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID4gTUNTXzcpCi0JCQlUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gTUNTXzc7Ci0JfQotCi0JaWYgKHBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1PREUgPj0gVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1PREUpIHsKLQkJcEVudHJ5LT5IVFBoeU1vZGUud29yZCA9IFRyYW5zbWl0U2V0dGluZy53b3JkOwotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIlJUTVBVcGRhdGVMZWdhY3lUeFNldHRpbmcgOiB3Y2lkLSVkLCBNT0RFPSVzLCBNQ1M9JWQgXG4iLAotCQkJICBwRW50cnktPkFpZCwgR2V0UGh5TW9kZShwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NT0RFKSwKLQkJCSAgcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTUNTKSk7Ci0JfQotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JCWR5bmFtaWMgdHVuZSBCQlAgUjY2IHRvIGZpbmQgYSBiYWxhbmNlIGJldHdlZW4gc2Vuc2liaWxpdHkgYW5kCi0JCW5vaXNlIGlzb2xhdGlvbgotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi12b2lkIEFzaWNTdGFCYnBUdW5pbmcoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCXU4IE9yaWdSNjZWYWx1ZSA9IDAsIFI2NjsJLyosIFI2NlVwcGVyQm91bmQgPSAweDMwLCBSNjZMb3dlckJvdW5kID0gMHgzMDsgKi8KLQljaGFyIFJzc2k7Ci0KLQkvKiAyODYwQyBkaWQgbm90IHN1cHBvcnQgRmFzZSBDQ0EsIHRoZXJlZm9yZSBjYW4ndCB0dW5lICovCi0JaWYgKHBBZC0+TUFDVmVyc2lvbiA9PSAweDI4NjAwMTAwKQotCQlyZXR1cm47Ci0KLQkvKiAqLwotCS8qIHdvcmsgYXMgYSBTVEEgKi8KLQkvKiAqLwotCWlmIChwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlICE9IENOVExfSURMRSkJLyogbm8gUjY2IHR1bmluZyB3aGVuIFNDQU5OSU5HICovCi0JCXJldHVybjsKLQotCWlmICgocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkKLQkgICAgJiYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKQotCSAgICApCi0JICAgICYmICEoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKSkKLSNpZmRlZiBSVE1QX01BQ19QQ0kKLQkgICAgJiYgKHBBZC0+YlBDSWNsa09mZiA9PSBGQUxTRSkKLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLQkgICAgKSB7Ci0JCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsICZPcmlnUjY2VmFsdWUpOwotCQlSNjYgPSBPcmlnUjY2VmFsdWU7Ci0KLQkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPiAxKQotCQkJUnNzaSA9Ci0JCQkgICAgKHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTAgKwotCQkJICAgICBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkF2Z1Jzc2kxKSA+PiAxOwotCQllbHNlCi0JCQlSc3NpID0gcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMDsKLQotCQlpZiAocEFkLT5MYXRjaFJmUmVncy5DaGFubmVsIDw9IDE0KSB7CS8qQkcgYmFuZCAqLwotI2lmZGVmIFJUMzB4eAotCQkJLyogUlQzMDcwIGlzIGEgbm8gTE5BIHNvbHV0aW9uLCBpdCBzaG91bGQgaGF2ZSBkaWZmZXJlbnQgY29udHJvbCByZWdhcmRpbmcgdG8gQUdDIGdhaW4gY29udHJvbCAqLwotCQkJLyogT3RoZXJ3aXNlLCBpdCB3aWxsIGhhdmUgc29tZSB0aHJvdWdocHV0IHNpZGUgZWZmZWN0IHdoZW4gbG93IFJTU0kgKi8KLQotCQkJaWYgKElTX1JUMzA3MChwQWQpIHx8IElTX1JUMzA5MChwQWQpIHx8IElTX1JUMzU3MihwQWQpCi0JCQkgICAgfHwgSVNfUlQzMzkwKHBBZCkpIHsKLQkJCQlpZiAoUnNzaSA+IFJTU0lfRk9SX01JRF9MT1dfU0VOU0lCSUxJVFkpIHsKLQkJCQkJUjY2ID0KLQkJCQkJICAgIDB4MUMgKyAyICogR0VUX0xOQV9HQUlOKHBBZCkgKyAweDIwOwotCQkJCQlpZiAoT3JpZ1I2NlZhbHVlICE9IFI2NikgewotCQkJCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRAotCQkJCQkJICAgIChwQWQsIEJCUF9SNjYsIFI2Nik7Ci0JCQkJCX0KLQkJCQl9IGVsc2UgewotCQkJCQlSNjYgPSAweDFDICsgMiAqIEdFVF9MTkFfR0FJTihwQWQpOwotCQkJCQlpZiAoT3JpZ1I2NlZhbHVlICE9IFI2NikgewotCQkJCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRAotCQkJCQkJICAgIChwQWQsIEJCUF9SNjYsIFI2Nik7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9IGVsc2UKLSNlbmRpZiAvKiBSVDMweHggLy8gKi8KLQkJCXsKLQkJCQlpZiAoUnNzaSA+IFJTU0lfRk9SX01JRF9MT1dfU0VOU0lCSUxJVFkpIHsKLQkJCQkJUjY2ID0gKDB4MkUgKyBHRVRfTE5BX0dBSU4ocEFkKSkgKyAweDEwOwotCQkJCQlpZiAoT3JpZ1I2NlZhbHVlICE9IFI2NikgewotCQkJCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRAotCQkJCQkJICAgIChwQWQsIEJCUF9SNjYsIFI2Nik7Ci0JCQkJCX0KLQkJCQl9IGVsc2UgewotCQkJCQlSNjYgPSAweDJFICsgR0VUX0xOQV9HQUlOKHBBZCk7Ci0JCQkJCWlmIChPcmlnUjY2VmFsdWUgIT0gUjY2KSB7Ci0JCQkJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lECi0JCQkJCQkgICAgKHBBZCwgQkJQX1I2NiwgUjY2KTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfSBlbHNlIHsJLypBIGJhbmQgKi8KLQkJCWlmIChwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPT0gQldfMjApIHsKLQkJCQlpZiAoUnNzaSA+IFJTU0lfRk9SX01JRF9MT1dfU0VOU0lCSUxJVFkpIHsKLQkJCQkJUjY2ID0KLQkJCQkJICAgIDB4MzIgKyAoR0VUX0xOQV9HQUlOKHBBZCkgKiA1KSAvIDMgKwotCQkJCQkgICAgMHgxMDsKLQkJCQkJaWYgKE9yaWdSNjZWYWx1ZSAhPSBSNjYpIHsKLQkJCQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQKLQkJCQkJCSAgICAocEFkLCBCQlBfUjY2LCBSNjYpOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJUjY2ID0KLQkJCQkJICAgIDB4MzIgKyAoR0VUX0xOQV9HQUlOKHBBZCkgKiA1KSAvIDM7Ci0JCQkJCWlmIChPcmlnUjY2VmFsdWUgIT0gUjY2KSB7Ci0JCQkJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lECi0JCQkJCQkgICAgKHBBZCwgQkJQX1I2NiwgUjY2KTsKLQkJCQkJfQotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKFJzc2kgPiBSU1NJX0ZPUl9NSURfTE9XX1NFTlNJQklMSVRZKSB7Ci0JCQkJCVI2NiA9Ci0JCQkJCSAgICAweDNBICsgKEdFVF9MTkFfR0FJTihwQWQpICogNSkgLyAzICsKLQkJCQkJICAgIDB4MTA7Ci0JCQkJCWlmIChPcmlnUjY2VmFsdWUgIT0gUjY2KSB7Ci0JCQkJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lECi0JCQkJCQkgICAgKHBBZCwgQkJQX1I2NiwgUjY2KTsKLQkJCQkJfQotCQkJCX0gZWxzZSB7Ci0JCQkJCVI2NiA9Ci0JCQkJCSAgICAweDNBICsgKEdFVF9MTkFfR0FJTihwQWQpICogNSkgLyAzOwotCQkJCQlpZiAoT3JpZ1I2NlZhbHVlICE9IFI2NikgewotCQkJCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRAotCQkJCQkJICAgIChwQWQsIEJCUF9SNjYsIFI2Nik7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCX0KLX0KLQotdm9pZCBSVE1QU2V0QUdDSW5pdFZhbHVlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggQmFuZFdpZHRoKQotewotCXU4IFI2NiA9IDB4MzA7Ci0KLQlpZiAocEFkLT5MYXRjaFJmUmVncy5DaGFubmVsIDw9IDE0KSB7CS8qIEJHIGJhbmQgKi8KLSNpZmRlZiBSVDMweHgKLQkJLyogR2FyeSB3YXMgdmVyaWZpZWQgQW1hem9uIEFQIGFuZCBmaW5kIHRoYXQgUlQzMDd4IGhhcyBCQlBfUjY2IGludmFsaWQgZGVmYXVsdCB2YWx1ZSAqLwotCi0JCWlmIChJU19SVDMwNzAocEFkKSB8fCBJU19SVDMwOTAocEFkKSB8fCBJU19SVDM1NzIocEFkKQotCQkgICAgfHwgSVNfUlQzMzkwKHBBZCkpIHsKLQkJCVI2NiA9IDB4MUMgKyAyICogR0VUX0xOQV9HQUlOKHBBZCk7Ci0JCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2NiwgUjY2KTsKLQkJfSBlbHNlCi0jZW5kaWYgLyogUlQzMHh4IC8vICovCi0JCXsKLQkJCVI2NiA9IDB4MkUgKyBHRVRfTE5BX0dBSU4ocEFkKTsKLQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY2LCBSNjYpOwotCQl9Ci0JfSBlbHNlIHsJCS8qQSBiYW5kICovCi0JCXsKLQkJCWlmIChCYW5kV2lkdGggPT0gQldfMjApIHsKLQkJCQlSNjYgPQotCQkJCSAgICAodTgpKDB4MzIgKwotCQkJCQkgICAgIChHRVRfTE5BX0dBSU4ocEFkKSAqIDUpIC8gMyk7Ci0JCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsIFI2Nik7Ci0JCQl9IGVsc2UgewotCQkJCVI2NiA9Ci0JCQkJICAgICh1OCkoMHgzQSArCi0JCQkJCSAgICAgKEdFVF9MTkFfR0FJTihwQWQpICogNSkgLyAzKTsKLQkJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2NiwgUjY2KTsKLQkJCX0KLQkJfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vcnRfY2hhbm5lbC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vcnRfY2hhbm5lbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Mzg3OTg5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL3J0X2NoYW5uZWwuYworKysgL2Rldi9udWxsCkBAIC0xLDE3MDUgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qLwotI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgotCi1zdHJ1Y3QgcnRfY2hfZnJlcV9tYXAgQ0hfSFpfSURfTUFQW10gPSB7Ci0JezEsIDI0MTJ9Ci0JLAotCXsyLCAyNDE3fQotCSwKLQl7MywgMjQyMn0KLQksCi0JezQsIDI0Mjd9Ci0JLAotCXs1LCAyNDMyfQotCSwKLQl7NiwgMjQzN30KLQksCi0JezcsIDI0NDJ9Ci0JLAotCXs4LCAyNDQ3fQotCSwKLQl7OSwgMjQ1Mn0KLQksCi0JezEwLCAyNDU3fQotCSwKLQl7MTEsIDI0NjJ9Ci0JLAotCXsxMiwgMjQ2N30KLQksCi0JezEzLCAyNDcyfQotCSwKLQl7MTQsIDI0ODR9Ci0JLAotCi0JLyogIFVOSUkgKi8KLQl7MzYsIDUxODB9Ci0JLAotCXs0MCwgNTIwMH0KLQksCi0JezQ0LCA1MjIwfQotCSwKLQl7NDgsIDUyNDB9Ci0JLAotCXs1MiwgNTI2MH0KLQksCi0JezU2LCA1MjgwfQotCSwKLQl7NjAsIDUzMDB9Ci0JLAotCXs2NCwgNTMyMH0KLQksCi0JezE0OSwgNTc0NX0KLQksCi0JezE1MywgNTc2NX0KLQksCi0JezE1NywgNTc4NX0KLQksCi0JezE2MSwgNTgwNX0KLQksCi0JezE2NSwgNTgyNX0KLQksCi0JezE2NywgNTgzNX0KLQksCi0JezE2OSwgNTg0NX0KLQksCi0JezE3MSwgNTg1NX0KLQksCi0JezE3MywgNTg2NX0KLQksCi0KLQkvKiBIaXBlckxBTjIgKi8KLQl7MTAwLCA1NTAwfQotCSwKLQl7MTA0LCA1NTIwfQotCSwKLQl7MTA4LCA1NTQwfQotCSwKLQl7MTEyLCA1NTYwfQotCSwKLQl7MTE2LCA1NTgwfQotCSwKLQl7MTIwLCA1NjAwfQotCSwKLQl7MTI0LCA1NjIwfQotCSwKLQl7MTI4LCA1NjQwfQotCSwKLQl7MTMyLCA1NjYwfQotCSwKLQl7MTM2LCA1NjgwfQotCSwKLQl7MTQwLCA1NzAwfQotCSwKLQotCS8qIEphcGFuIE1NQUMgKi8KLQl7MzQsIDUxNzB9Ci0JLAotCXszOCwgNTE5MH0KLQksCi0JezQyLCA1MjEwfQotCSwKLQl7NDYsIDUyMzB9Ci0JLAotCi0JLyogIEphcGFuICovCi0JezE4NCwgNDkyMH0KLQksCi0JezE4OCwgNDk0MH0KLQksCi0JezE5MiwgNDk2MH0KLQksCi0JezE5NiwgNDk4MH0KLQksCi0KLQl7MjA4LCA1MDQwfQotCSwJCQkvKiBKYXBhbiwgbWVhbnMgSjA4ICovCi0JezIxMiwgNTA2MH0KLQksCQkJLyogSmFwYW4sIG1lYW5zIEoxMiAqLwotCXsyMTYsIDUwODB9Ci0JLAkJCS8qIEphcGFuLCBtZWFucyBKMTYgKi8KLX07Ci0KLWludCBDSF9IWl9JRF9NQVBfTlVNID0gKHNpemVvZihDSF9IWl9JRF9NQVApIC8gc2l6ZW9mKHN0cnVjdCBydF9jaF9mcmVxX21hcCkpOwotCi1zdHJ1Y3QgcnRfY2hfcmVnaW9uIENoUmVnaW9uW10gPSB7Ci0JewkJCS8qIEFudGlndWEgYW5kIEJlcmJ1ZGEgKi8KLQkgIkFHIiwKLQkgQ0UsCi0JIHsKLQkgIHsxLCAxMywgMjAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDIuNCBHLCBjaCAxfjEzICovCi0JICB7MzYsIDQsIDIzLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMzZ+NDggKi8KLQkgIHs1MiwgNCwgMjMsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCA1Mn42NCAqLwotCSAgezEwMCwgMTEsIDMwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMTAwfjE0MCAqLwotCSAgezB9Ci0JICAsCQkJLyogZW5kICovCi0JICB9Ci0JIH0KLQksCi0KLQl7CQkJLyogQXJnZW50aW5hICovCi0JICJBUiIsCi0JIENFLAotCSB7Ci0JICB7MSwgMTMsIDIwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiAyLjQgRywgY2ggMX4xMyAqLwotCSAgezUyLCA0LCAyNCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDUyfjY0ICovCi0JICB7MTQ5LCA0LCAzMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDE0OX4xNjEgKi8KLQkgIHswfQotCSAgLAkJCS8qIGVuZCAqLwotCSAgfQotCSB9Ci0JLAotCi0JewkJCS8qIEFydWJhICovCi0JICJBVyIsCi0JIENFLAotCSB7Ci0JICB7MSwgMTMsIDIwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiAyLjQgRywgY2ggMX4xMyAqLwotCSAgezM2LCA0LCAyMywgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDM2fjQ4ICovCi0JICB7NTIsIDQsIDIzLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggNTJ+NjQgKi8KLQkgIHsxMDAsIDExLCAzMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDEwMH4xNDAgKi8KLQkgIHswfQotCSAgLAkJCS8qIGVuZCAqLwotCSAgfQotCSB9Ci0JLAotCi0JewkJCS8qIEF1c3RyYWxpYSAqLwotCSAiQVUiLAotCSBDRSwKLQkgewotCSAgezEsIDEzLCAyMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogMi40IEcsIGNoIDF+MTMgKi8KLQkgIHszNiwgNCwgMjMsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCAzNn40OCAqLwotCSAgezUyLCA0LCAyNCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDUyfjY0ICovCi0JICB7MTQ5LCA1LCAzMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDE0OX4xNjUgKi8KLQkgIHswfQotCSAgLAkJCS8qIGVuZCAqLwotCSAgfQotCSB9Ci0JLAotCi0JewkJCS8qIEF1c3RyaWEgKi8KLQkgIkFUIiwKLQkgQ0UsCi0JIHsKLQkgIHsxLCAxMywgMjAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDIuNCBHLCBjaCAxfjEzICovCi0JICB7MzYsIDQsIDIzLCBJRE9SLCBUUlVFfQotCSAgLAkJCS8qIDVHLCBjaCAzNn40OCAqLwotCSAgezUyLCA0LCAyMywgSURPUiwgVFJVRX0KLQkgICwJCQkvKiA1RywgY2ggNTJ+NjQgKi8KLQkgIHsxMDAsIDExLCAzMCwgQk9USCwgVFJVRX0KLQkgICwJCQkvKiA1RywgY2ggMTAwfjE0MCAqLwotCSAgezB9Ci0JICAsCQkJLyogZW5kICovCi0JICB9Ci0JIH0KLQksCi0KLQl7CQkJLyogQmFoYW1hcyAqLwotCSAiQlMiLAotCSBDRSwKLQkgewotCSAgezEsIDEzLCAyMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogMi40IEcsIGNoIDF+MTMgKi8KLQkgIHszNiwgNCwgMjMsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCAzNn40OCAqLwotCSAgezUyLCA0LCAyNCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDUyfjY0ICovCi0JICB7MTQ5LCA1LCAzMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDE0OX4xNjUgKi8KLQkgIHswfQotCSAgLAkJCS8qIGVuZCAqLwotCSAgfQotCSB9Ci0JLAotCi0JewkJCS8qIEJhcmJhZG9zICovCi0JICJCQiIsCi0JIENFLAotCSB7Ci0JICB7MSwgMTMsIDIwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiAyLjQgRywgY2ggMX4xMyAqLwotCSAgezM2LCA0LCAyMywgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDM2fjQ4ICovCi0JICB7NTIsIDQsIDI0LCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggNTJ+NjQgKi8KLQkgIHsxMDAsIDExLCAzMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDEwMH4xNDAgKi8KLQkgIHswfQotCSAgLAkJCS8qIGVuZCAqLwotCSAgfQotCSB9Ci0JLAotCi0JewkJCS8qIEJlcm11ZGEgKi8KLQkgIkJNIiwKLQkgQ0UsCi0JIHsKLQkgIHsxLCAxMywgMjAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDIuNCBHLCBjaCAxfjEzICovCi0JICB7MzYsIDQsIDIzLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMzZ+NDggKi8KLQkgIHs1MiwgNCwgMjQsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCA1Mn42NCAqLwotCSAgezEwMCwgMTEsIDMwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMTAwfjE0MCAqLwotCSAgezB9Ci0JICAsCQkJLyogZW5kICovCi0JICB9Ci0JIH0KLQksCi0KLQl7CQkJLyogQnJhemlsICovCi0JICJCUiIsCi0JIENFLAotCSB7Ci0JICB7MSwgMTMsIDIwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiAyLjQgRywgY2ggMX4xMyAqLwotCSAgezM2LCA0LCAyMywgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDM2fjQ4ICovCi0JICB7NTIsIDQsIDI0LCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggNTJ+NjQgKi8KLQkgIHsxMDAsIDExLCAyNCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDEwMH4xNDAgKi8KLQkgIHsxNDksIDUsIDMwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMTAwfjE0MCAqLwotCSAgezB9Ci0JICAsCQkJLyogZW5kICovCi0JICB9Ci0JIH0KLQksCi0KLQl7CQkJLyogQmVsZ2l1bSAqLwotCSAiQkUiLAotCSBDRSwKLQkgewotCSAgezEsIDEzLCAyMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogMi40IEcsIGNoIDF+MTMgKi8KLQkgIHszNiwgNCwgMTgsIElET1IsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCAzNn40OCAqLwotCSAgezUyLCA0LCAxOCwgSURPUiwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDUyfjY0ICovCi0JICB7MH0KLQkgICwJCQkvKiBlbmQgKi8KLQkgIH0KLQkgfQotCSwKLQotCXsJCQkvKiBCdWxnYXJpYSAqLwotCSAiQkciLAotCSBDRSwKLQkgewotCSAgezEsIDEzLCAyMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogMi40IEcsIGNoIDF+MTMgKi8KLQkgIHszNiwgNCwgMjMsIElET1IsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCAzNn40OCAqLwotCSAgezUyLCA0LCAyMywgSURPUiwgVFJVRX0KLQkgICwJCQkvKiA1RywgY2ggNTJ+NjQgKi8KLQkgIHsxMDAsIDExLCAzMCwgT0RPUiwgVFJVRX0KLQkgICwJCQkvKiA1RywgY2ggMTAwfjE0MCAqLwotCSAgezB9Ci0JICAsCQkJLyogZW5kICovCi0JICB9Ci0JIH0KLQksCi0KLQl7CQkJLyogQ2FuYWRhICovCi0JICJDQSIsCi0JIENFLAotCSB7Ci0JICB7MSwgMTMsIDIwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiAyLjQgRywgY2ggMX4xMyAqLwotCSAgezM2LCA0LCAyMywgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDM2fjQ4ICovCi0JICB7NTIsIDQsIDIzLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggNTJ+NjQgKi8KLQkgIHsxNDksIDUsIDMwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMTQ5fjE2NSAqLwotCSAgezB9Ci0JICAsCQkJLyogZW5kICovCi0JICB9Ci0JIH0KLQksCi0KLQl7CQkJLyogQ2F5bWFuIElzTGFuZHMgKi8KLQkgIktZIiwKLQkgQ0UsCi0JIHsKLQkgIHsxLCAxMywgMjAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDIuNCBHLCBjaCAxfjEzICovCi0JICB7MzYsIDQsIDIzLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMzZ+NDggKi8KLQkgIHs1MiwgNCwgMjQsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCA1Mn42NCAqLwotCSAgezEwMCwgMTEsIDMwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMTAwfjE0MCAqLwotCSAgezB9Ci0JICAsCQkJLyogZW5kICovCi0JICB9Ci0JIH0KLQksCi0KLQl7CQkJLyogQ2hpbGUgKi8KLQkgIkNMIiwKLQkgQ0UsCi0JIHsKLQkgIHsxLCAxMywgMjAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDIuNCBHLCBjaCAxfjEzICovCi0JICB7MzYsIDQsIDIwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMzZ+NDggKi8KLQkgIHs1MiwgNCwgMjAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCA1Mn42NCAqLwotCSAgezE0OSwgNSwgMjAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCAxNDl+MTY1ICovCi0JICB7MH0KLQkgICwJCQkvKiBlbmQgKi8KLQkgIH0KLQkgfQotCSwKLQotCXsJCQkvKiBDaGluYSAqLwotCSAiQ04iLAotCSBDRSwKLQkgewotCSAgezEsIDEzLCAyMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogMi40IEcsIGNoIDF+MTMgKi8KLQkgIHsxNDksIDQsIDI3LCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMTQ5fjE2MSAqLwotCSAgezB9Ci0JICAsCQkJLyogZW5kICovCi0JICB9Ci0JIH0KLQksCi0KLQl7CQkJLyogQ29sb21iaWEgKi8KLQkgIkNPIiwKLQkgQ0UsCi0JIHsKLQkgIHsxLCAxMywgMjAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDIuNCBHLCBjaCAxfjEzICovCi0JICB7MzYsIDQsIDE3LCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMzZ+NDggKi8KLQkgIHs1MiwgNCwgMjQsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCA1Mn42NCAqLwotCSAgezEwMCwgMTEsIDMwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMTAwfjE0MCAqLwotCSAgezE0OSwgNSwgMzAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCAxNDl+MTY1ICovCi0JICB7MH0KLQkgICwJCQkvKiBlbmQgKi8KLQkgIH0KLQkgfQotCSwKLQotCXsJCQkvKiBDb3N0YSBSaWNhICovCi0JICJDUiIsCi0JIENFLAotCSB7Ci0JICB7MSwgMTMsIDIwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiAyLjQgRywgY2ggMX4xMyAqLwotCSAgezM2LCA0LCAxNywgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDM2fjQ4ICovCi0JICB7NTIsIDQsIDI0LCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggNTJ+NjQgKi8KLQkgIHsxNDksIDQsIDMwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMTQ5fjE2MSAqLwotCSAgezB9Ci0JICAsCQkJLyogZW5kICovCi0JICB9Ci0JIH0KLQksCi0KLQl7CQkJLyogQ3lwcnVzICovCi0JICJDWSIsCi0JIENFLAotCSB7Ci0JICB7MSwgMTMsIDIwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiAyLjQgRywgY2ggMX4xMyAqLwotCSAgezM2LCA0LCAyMywgSURPUiwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDM2fjQ4ICovCi0JICB7NTIsIDQsIDI0LCBJRE9SLCBUUlVFfQotCSAgLAkJCS8qIDVHLCBjaCA1Mn42NCAqLwotCSAgezEwMCwgMTEsIDMwLCBCT1RILCBUUlVFfQotCSAgLAkJCS8qIDVHLCBjaCAxMDB+MTQwICovCi0JICB7MH0KLQkgICwJCQkvKiBlbmQgKi8KLQkgIH0KLQkgfQotCSwKLQotCXsJCQkvKiBDemVjaF9SZXB1YmxpYyAqLwotCSAiQ1oiLAotCSBDRSwKLQkgewotCSAgezEsIDEzLCAyMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogMi40IEcsIGNoIDF+MTMgKi8KLQkgIHszNiwgNCwgMjMsIElET1IsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCAzNn40OCAqLwotCSAgezUyLCA0LCAyMywgSURPUiwgVFJVRX0KLQkgICwJCQkvKiA1RywgY2ggNTJ+NjQgKi8KLQkgIHswfQotCSAgLAkJCS8qIGVuZCAqLwotCSAgfQotCSB9Ci0JLAotCi0JewkJCS8qIERlbm1hcmsgKi8KLQkgIkRLIiwKLQkgQ0UsCi0JIHsKLQkgIHsxLCAxMywgMjAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDIuNCBHLCBjaCAxfjEzICovCi0JICB7MzYsIDQsIDIzLCBJRE9SLCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMzZ+NDggKi8KLQkgIHs1MiwgNCwgMjMsIElET1IsIFRSVUV9Ci0JICAsCQkJLyogNUcsIGNoIDUyfjY0ICovCi0JICB7MTAwLCAxMSwgMzAsIEJPVEgsIFRSVUV9Ci0JICAsCQkJLyogNUcsIGNoIDEwMH4xNDAgKi8KLQkgIHswfQotCSAgLAkJCS8qIGVuZCAqLwotCSAgfQotCSB9Ci0JLAotCi0JewkJCS8qIERvbWluaWNhbiBSZXB1YmxpYyAqLwotCSAiRE8iLAotCSBDRSwKLQkgewotCSAgezEsIDAsIDIwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiAyLjQgRywgY2ggMCAqLwotCSAgezE0OSwgNCwgMjAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCAxNDl+MTYxICovCi0JICB7MH0KLQkgICwJCQkvKiBlbmQgKi8KLQkgIH0KLQkgfQotCSwKLQotCXsJCQkvKiBFcXVhZG9yICovCi0JICJFQyIsCi0JIENFLAotCSB7Ci0JICB7MSwgMTMsIDIwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiAyLjQgRywgY2ggMX4xMyAqLwotCSAgezEwMCwgMTEsIDI3LCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMTAwfjE0MCAqLwotCSAgezB9Ci0JICAsCQkJLyogZW5kICovCi0JICB9Ci0JIH0KLQksCi0KLQl7CQkJLyogRWwgU2FsdmFkb3IgKi8KLQkgIlNWIiwKLQkgQ0UsCi0JIHsKLQkgIHsxLCAxMywgMjAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDIuNCBHLCBjaCAxfjEzICovCi0JICB7MzYsIDQsIDIzLCBJRE9SLCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMzZ+NDggKi8KLQkgIHs1MiwgNCwgMzAsIEJPVEgsIFRSVUV9Ci0JICAsCQkJLyogNUcsIGNoIDUyfjY0ICovCi0JICB7MTQ5LCA0LCAzNiwgQk9USCwgVFJVRX0KLQkgICwJCQkvKiA1RywgY2ggMTQ5fjE2NSAqLwotCSAgezB9Ci0JICAsCQkJLyogZW5kICovCi0JICB9Ci0JIH0KLQksCi0KLQl7CQkJLyogRmlubGFuZCAqLwotCSAiRkkiLAotCSBDRSwKLQkgewotCSAgezEsIDEzLCAyMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogMi40IEcsIGNoIDF+MTMgKi8KLQkgIHszNiwgNCwgMjMsIElET1IsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCAzNn40OCAqLwotCSAgezUyLCA0LCAyMywgSURPUiwgVFJVRX0KLQkgICwJCQkvKiA1RywgY2ggNTJ+NjQgKi8KLQkgIHsxMDAsIDExLCAzMCwgQk9USCwgVFJVRX0KLQkgICwJCQkvKiA1RywgY2ggMTAwfjE0MCAqLwotCSAgezB9Ci0JICAsCQkJLyogZW5kICovCi0JICB9Ci0JIH0KLQksCi0KLQl7CQkJLyogRnJhbmNlICovCi0JICJGUiIsCi0JIENFLAotCSB7Ci0JICB7MSwgMTMsIDIwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiAyLjQgRywgY2ggMX4xMyAqLwotCSAgezM2LCA0LCAyMywgSURPUiwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDM2fjQ4ICovCi0JICB7NTIsIDQsIDIzLCBJRE9SLCBUUlVFfQotCSAgLAkJCS8qIDVHLCBjaCA1Mn42NCAqLwotCSAgezB9Ci0JICAsCQkJLyogZW5kICovCi0JICB9Ci0JIH0KLQksCi0KLQl7CQkJLyogR2VybWFueSAqLwotCSAiREUiLAotCSBDRSwKLQkgewotCSAgezEsIDEzLCAyMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogMi40IEcsIGNoIDF+MTMgKi8KLQkgIHszNiwgNCwgMjMsIElET1IsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCAzNn40OCAqLwotCSAgezUyLCA0LCAyMywgSURPUiwgVFJVRX0KLQkgICwJCQkvKiA1RywgY2ggNTJ+NjQgKi8KLQkgIHsxMDAsIDExLCAzMCwgQk9USCwgVFJVRX0KLQkgICwJCQkvKiA1RywgY2ggMTAwfjE0MCAqLwotCSAgezB9Ci0JICAsCQkJLyogZW5kICovCi0JICB9Ci0JIH0KLQksCi0KLQl7CQkJLyogR3JlZWNlICovCi0JICJHUiIsCi0JIENFLAotCSB7Ci0JICB7MSwgMTMsIDIwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiAyLjQgRywgY2ggMX4xMyAqLwotCSAgezM2LCA0LCAyMywgSURPUiwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDM2fjQ4ICovCi0JICB7NTIsIDQsIDIzLCBJRE9SLCBUUlVFfQotCSAgLAkJCS8qIDVHLCBjaCA1Mn42NCAqLwotCSAgezEwMCwgMTEsIDMwLCBPRE9SLCBUUlVFfQotCSAgLAkJCS8qIDVHLCBjaCAxMDB+MTQwICovCi0JICB7MH0KLQkgICwJCQkvKiBlbmQgKi8KLQkgIH0KLQkgfQotCSwKLQotCXsJCQkvKiBHdWFtICovCi0JICJHVSIsCi0JIENFLAotCSB7Ci0JICB7MSwgMTEsIDIwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiAyLjQgRywgY2ggMX4xMSAqLwotCSAgezM2LCA0LCAxNywgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDM2fjQ4ICovCi0JICB7NTIsIDQsIDI0LCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggNTJ+NjQgKi8KLQkgIHsxMDAsIDExLCAzMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDEwMH4xNDAgKi8KLQkgIHsxNDksIDUsIDMwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMTQ5fjE2NSAqLwotCSAgezB9Ci0JICAsCQkJLyogZW5kICovCi0JICB9Ci0JIH0KLQksCi0KLQl7CQkJLyogR3VhdGVtYWxhICovCi0JICJHVCIsCi0JIENFLAotCSB7Ci0JICB7MSwgMTMsIDIwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiAyLjQgRywgY2ggMX4xMyAqLwotCSAgezM2LCA0LCAxNywgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDM2fjQ4ICovCi0JICB7NTIsIDQsIDI0LCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggNTJ+NjQgKi8KLQkgIHsxNDksIDQsIDMwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMTQ5fjE2MSAqLwotCSAgezB9Ci0JICAsCQkJLyogZW5kICovCi0JICB9Ci0JIH0KLQksCi0KLQl7CQkJLyogSGFpdGkgKi8KLQkgIkhUIiwKLQkgQ0UsCi0JIHsKLQkgIHsxLCAxMywgMjAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDIuNCBHLCBjaCAxfjEzICovCi0JICB7MzYsIDQsIDE3LCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMzZ+NDggKi8KLQkgIHs1MiwgNCwgMjQsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCA1Mn42NCAqLwotCSAgezE0OSwgNCwgMzAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCAxNDl+MTYxICovCi0JICB7MH0KLQkgICwJCQkvKiBlbmQgKi8KLQkgIH0KLQkgfQotCSwKLQotCXsJCQkvKiBIb25kdXJhcyAqLwotCSAiSE4iLAotCSBDRSwKLQkgewotCSAgezEsIDEzLCAyMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogMi40IEcsIGNoIDF+MTMgKi8KLQkgIHsxNDksIDQsIDI3LCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMTQ5fjE2MSAqLwotCSAgezB9Ci0JICAsCQkJLyogZW5kICovCi0JICB9Ci0JIH0KLQksCi0KLQl7CQkJLyogSG9uZyBLb25nICovCi0JICJISyIsCi0JIENFLAotCSB7Ci0JICB7MSwgMTMsIDIwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiAyLjQgRywgY2ggMX4xMyAqLwotCSAgezM2LCA0LCAyMywgSURPUiwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDM2fjQ4ICovCi0JICB7NTIsIDQsIDIzLCBJRE9SLCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggNTJ+NjQgKi8KLQkgIHsxNDksIDQsIDMwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMTQ5fjE2MSAqLwotCSAgezB9Ci0JICAsCQkJLyogZW5kICovCi0JICB9Ci0JIH0KLQksCi0KLQl7CQkJLyogSHVuZ2FyeSAqLwotCSAiSFUiLAotCSBDRSwKLQkgewotCSAgezEsIDEzLCAyMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogMi40IEcsIGNoIDF+MTMgKi8KLQkgIHszNiwgNCwgMjMsIElET1IsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCAzNn40OCAqLwotCSAgezUyLCA0LCAyMywgSURPUiwgVFJVRX0KLQkgICwJCQkvKiA1RywgY2ggNTJ+NjQgKi8KLQkgIHswfQotCSAgLAkJCS8qIGVuZCAqLwotCSAgfQotCSB9Ci0JLAotCi0JewkJCS8qIEljZWxhbmQgKi8KLQkgIklTIiwKLQkgQ0UsCi0JIHsKLQkgIHsxLCAxMywgMjAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDIuNCBHLCBjaCAxfjEzICovCi0JICB7MzYsIDQsIDIzLCBJRE9SLCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMzZ+NDggKi8KLQkgIHs1MiwgNCwgMjMsIElET1IsIFRSVUV9Ci0JICAsCQkJLyogNUcsIGNoIDUyfjY0ICovCi0JICB7MTAwLCAxMSwgMzAsIEJPVEgsIFRSVUV9Ci0JICAsCQkJLyogNUcsIGNoIDEwMH4xNDAgKi8KLQkgIHswfQotCSAgLAkJCS8qIGVuZCAqLwotCSAgfQotCSB9Ci0JLAotCi0JewkJCS8qIEluZGlhICovCi0JICJJTiIsCi0JIENFLAotCSB7Ci0JICB7MSwgMTMsIDIwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiAyLjQgRywgY2ggMX4xMyAqLwotCSAgezE0OSwgNCwgMjQsIElET1IsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCAxNDl+MTYxICovCi0JICB7MH0KLQkgICwJCQkvKiBlbmQgKi8KLQkgIH0KLQkgfQotCSwKLQotCXsJCQkvKiBJbmRvbmVzaWEgKi8KLQkgIklEIiwKLQkgQ0UsCi0JIHsKLQkgIHsxLCAxMywgMjAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDIuNCBHLCBjaCAxfjEzICovCi0JICB7MTQ5LCA0LCAyNywgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDE0OX4xNjEgKi8KLQkgIHswfQotCSAgLAkJCS8qIGVuZCAqLwotCSAgfQotCSB9Ci0JLAotCi0JewkJCS8qIElyZWxhbmQgKi8KLQkgIklFIiwKLQkgQ0UsCi0JIHsKLQkgIHsxLCAxMywgMjAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDIuNCBHLCBjaCAxfjEzICovCi0JICB7MzYsIDQsIDIzLCBJRE9SLCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMzZ+NDggKi8KLQkgIHs1MiwgNCwgMjMsIElET1IsIFRSVUV9Ci0JICAsCQkJLyogNUcsIGNoIDUyfjY0ICovCi0JICB7MTAwLCAxMSwgMzAsIE9ET1IsIFRSVUV9Ci0JICAsCQkJLyogNUcsIGNoIDEwMH4xNDAgKi8KLQkgIHswfQotCSAgLAkJCS8qIGVuZCAqLwotCSAgfQotCSB9Ci0JLAotCi0JewkJCS8qIElzcmFlbCAqLwotCSAiSUwiLAotCSBDRSwKLQkgewotCSAgezEsIDMsIDIwLCBJRE9SLCBGQUxTRX0KLQkgICwJCQkvKiAyLjQgRywgY2ggMX4zICovCi0JICB7NCwgNiwgMjAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDIuNCBHLCBjaCA0fjkgKi8KLQkgIHsxMCwgNCwgMjAsIElET1IsIEZBTFNFfQotCSAgLAkJCS8qIDIuNCBHLCBjaCAxMH4xMyAqLwotCSAgezB9Ci0JICAsCQkJLyogZW5kICovCi0JICB9Ci0JIH0KLQksCi0KLQl7CQkJLyogSXRhbHkgKi8KLQkgIklUIiwKLQkgQ0UsCi0JIHsKLQkgIHsxLCAxMywgMjAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDIuNCBHLCBjaCAxfjEzICovCi0JICB7MzYsIDQsIDIzLCBJRE9SLCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMzZ+NDggKi8KLQkgIHs1MiwgNCwgMjMsIElET1IsIFRSVUV9Ci0JICAsCQkJLyogNUcsIGNoIDUyfjY0ICovCi0JICB7MTAwLCAxMSwgMzAsIE9ET1IsIFRSVUV9Ci0JICAsCQkJLyogNUcsIGNoIDEwMH4xNDAgKi8KLQkgIHswfQotCSAgLAkJCS8qIGVuZCAqLwotCSAgfQotCSB9Ci0JLAotCi0JewkJCS8qIEphcGFuICovCi0JICJKUCIsCi0JIEpBUCwKLQkgewotCSAgezEsIDE0LCAyMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogMi40IEcsIGNoIDF+MTQgKi8KLQkgIHszNiwgNCwgMjMsIElET1IsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCAzNn40OCAqLwotCSAgezB9Ci0JICAsCQkJLyogZW5kICovCi0JICB9Ci0JIH0KLQksCi0KLQl7CQkJLyogSm9yZGFuICovCi0JICJKTyIsCi0JIENFLAotCSB7Ci0JICB7MSwgMTMsIDIwLCBJRE9SLCBGQUxTRX0KLQkgICwJCQkvKiAyLjQgRywgY2ggMX4xMyAqLwotCSAgezM2LCA0LCAyMywgSURPUiwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDM2fjQ4ICovCi0JICB7MTQ5LCA0LCAyMywgSURPUiwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDE0OX4xNjEgKi8KLQkgIHswfQotCSAgLAkJCS8qIGVuZCAqLwotCSAgfQotCSB9Ci0JLAotCi0JewkJCS8qIExhdHZpYSAqLwotCSAiTFYiLAotCSBDRSwKLQkgewotCSAgezEsIDEzLCAyMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogMi40IEcsIGNoIDF+MTMgKi8KLQkgIHszNiwgNCwgMjMsIElET1IsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCAzNn40OCAqLwotCSAgezUyLCA0LCAyMywgSURPUiwgVFJVRX0KLQkgICwJCQkvKiA1RywgY2ggNTJ+NjQgKi8KLQkgIHsxMDAsIDExLCAzMCwgQk9USCwgVFJVRX0KLQkgICwJCQkvKiA1RywgY2ggMTAwfjE0MCAqLwotCSAgezB9Ci0JICAsCQkJLyogZW5kICovCi0JICB9Ci0JIH0KLQksCi0KLQl7CQkJLyogTGllY2h0ZW5zdGVpbiAqLwotCSAiTEkiLAotCSBDRSwKLQkgewotCSAgezEsIDEzLCAyMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogMi40IEcsIGNoIDF+MTMgKi8KLQkgIHs1MiwgNCwgMjMsIElET1IsIFRSVUV9Ci0JICAsCQkJLyogNUcsIGNoIDUyfjY0ICovCi0JICB7MTAwLCAxMSwgMzAsIEJPVEgsIFRSVUV9Ci0JICAsCQkJLyogNUcsIGNoIDEwMH4xNDAgKi8KLQkgIHswfQotCSAgLAkJCS8qIGVuZCAqLwotCSAgfQotCSB9Ci0JLAotCi0JewkJCS8qIExpdGh1YW5pYSAqLwotCSAiTFQiLAotCSBDRSwKLQkgewotCSAgezEsIDEzLCAyMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogMi40IEcsIGNoIDF+MTMgKi8KLQkgIHszNiwgNCwgMjMsIElET1IsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCAzNn40OCAqLwotCSAgezUyLCA0LCAyMywgSURPUiwgVFJVRX0KLQkgICwJCQkvKiA1RywgY2ggNTJ+NjQgKi8KLQkgIHsxMDAsIDExLCAzMCwgQk9USCwgVFJVRX0KLQkgICwJCQkvKiA1RywgY2ggMTAwfjE0MCAqLwotCSAgezB9Ci0JICAsCQkJLyogZW5kICovCi0JICB9Ci0JIH0KLQksCi0KLQl7CQkJLyogTHV4ZW1idXJnICovCi0JICJMVSIsCi0JIENFLAotCSB7Ci0JICB7MSwgMTMsIDIwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiAyLjQgRywgY2ggMX4xMyAqLwotCSAgezM2LCA0LCAyMywgSURPUiwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDM2fjQ4ICovCi0JICB7NTIsIDQsIDIzLCBJRE9SLCBUUlVFfQotCSAgLAkJCS8qIDVHLCBjaCA1Mn42NCAqLwotCSAgezEwMCwgMTEsIDMwLCBCT1RILCBUUlVFfQotCSAgLAkJCS8qIDVHLCBjaCAxMDB+MTQwICovCi0JICB7MH0KLQkgICwJCQkvKiBlbmQgKi8KLQkgIH0KLQkgfQotCSwKLQotCXsJCQkvKiBNYWxheXNpYSAqLwotCSAiTVkiLAotCSBDRSwKLQkgewotCSAgezM2LCA0LCAyMywgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDM2fjQ4ICovCi0JICB7NTIsIDQsIDIzLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggNTJ+NjQgKi8KLQkgIHsxNDksIDUsIDIwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMTQ5fjE2NSAqLwotCSAgezB9Ci0JICAsCQkJLyogZW5kICovCi0JICB9Ci0JIH0KLQksCi0KLQl7CQkJLyogTWFsdGEgKi8KLQkgIk1UIiwKLQkgQ0UsCi0JIHsKLQkgIHsxLCAxMywgMjAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDIuNCBHLCBjaCAxfjEzICovCi0JICB7MzYsIDQsIDIzLCBJRE9SLCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMzZ+NDggKi8KLQkgIHs1MiwgNCwgMjMsIElET1IsIFRSVUV9Ci0JICAsCQkJLyogNUcsIGNoIDUyfjY0ICovCi0JICB7MTAwLCAxMSwgMzAsIEJPVEgsIFRSVUV9Ci0JICAsCQkJLyogNUcsIGNoIDEwMH4xNDAgKi8KLQkgIHswfQotCSAgLAkJCS8qIGVuZCAqLwotCSAgfQotCSB9Ci0JLAotCi0JewkJCS8qIE1hcm9jY28gKi8KLQkgIk1BIiwKLQkgQ0UsCi0JIHsKLQkgIHsxLCAxMywgMjAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDIuNCBHLCBjaCAxfjEzICovCi0JICB7MzYsIDQsIDI0LCBJRE9SLCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMzZ+NDggKi8KLQkgIHswfQotCSAgLAkJCS8qIGVuZCAqLwotCSAgfQotCSB9Ci0JLAotCi0JewkJCS8qIE1leGljbyAqLwotCSAiTVgiLAotCSBDRSwKLQkgewotCSAgezEsIDEzLCAyMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogMi40IEcsIGNoIDF+MTMgKi8KLQkgIHszNiwgNCwgMjMsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCAzNn40OCAqLwotCSAgezUyLCA0LCAyNCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDUyfjY0ICovCi0JICB7MTQ5LCA1LCAzMCwgSURPUiwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDE0OX4xNjUgKi8KLQkgIHswfQotCSAgLAkJCS8qIGVuZCAqLwotCSAgfQotCSB9Ci0JLAotCi0JewkJCS8qIE5ldGhlcmxhbmRzICovCi0JICJOTCIsCi0JIENFLAotCSB7Ci0JICB7MSwgMTMsIDIwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiAyLjQgRywgY2ggMX4xMyAqLwotCSAgezM2LCA0LCAyMywgSURPUiwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDM2fjQ4ICovCi0JICB7NTIsIDQsIDI0LCBJRE9SLCBUUlVFfQotCSAgLAkJCS8qIDVHLCBjaCA1Mn42NCAqLwotCSAgezEwMCwgMTEsIDMwLCBCT1RILCBUUlVFfQotCSAgLAkJCS8qIDVHLCBjaCAxMDB+MTQwICovCi0JICB7MH0KLQkgICwJCQkvKiBlbmQgKi8KLQkgIH0KLQkgfQotCSwKLQotCXsJCQkvKiBOZXcgWmVhbGFuZCAqLwotCSAiTloiLAotCSBDRSwKLQkgewotCSAgezEsIDEzLCAyMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogMi40IEcsIGNoIDF+MTMgKi8KLQkgIHszNiwgNCwgMjQsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCAzNn40OCAqLwotCSAgezUyLCA0LCAyNCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDUyfjY0ICovCi0JICB7MTQ5LCA0LCAzMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDE0OX4xNjEgKi8KLQkgIHswfQotCSAgLAkJCS8qIGVuZCAqLwotCSAgfQotCSB9Ci0JLAotCi0JewkJCS8qIE5vcndheSAqLwotCSAiTk8iLAotCSBDRSwKLQkgewotCSAgezEsIDEzLCAyMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogMi40IEcsIGNoIDF+MTMgKi8KLQkgIHszNiwgNCwgMjQsIElET1IsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCAzNn40OCAqLwotCSAgezUyLCA0LCAyNCwgSURPUiwgVFJVRX0KLQkgICwJCQkvKiA1RywgY2ggNTJ+NjQgKi8KLQkgIHsxMDAsIDExLCAzMCwgQk9USCwgVFJVRX0KLQkgICwJCQkvKiA1RywgY2ggMTQ5fjE2MSAqLwotCSAgezB9Ci0JICAsCQkJLyogZW5kICovCi0JICB9Ci0JIH0KLQksCi0KLQl7CQkJLyogUGVydSAqLwotCSAiUEUiLAotCSBDRSwKLQkgewotCSAgezEsIDEzLCAyMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogMi40IEcsIGNoIDF+MTMgKi8KLQkgIHsxNDksIDQsIDI3LCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMTQ5fjE2MSAqLwotCSAgezB9Ci0JICAsCQkJLyogZW5kICovCi0JICB9Ci0JIH0KLQksCi0KLQl7CQkJLyogUG9ydHVnYWwgKi8KLQkgIlBUIiwKLQkgQ0UsCi0JIHsKLQkgIHsxLCAxMywgMjAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDIuNCBHLCBjaCAxfjEzICovCi0JICB7MzYsIDQsIDIzLCBJRE9SLCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMzZ+NDggKi8KLQkgIHs1MiwgNCwgMjMsIElET1IsIFRSVUV9Ci0JICAsCQkJLyogNUcsIGNoIDUyfjY0ICovCi0JICB7MTAwLCAxMSwgMzAsIEJPVEgsIFRSVUV9Ci0JICAsCQkJLyogNUcsIGNoIDEwMH4xNDAgKi8KLQkgIHswfQotCSAgLAkJCS8qIGVuZCAqLwotCSAgfQotCSB9Ci0JLAotCi0JewkJCS8qIFBvbGFuZCAqLwotCSAiUEwiLAotCSBDRSwKLQkgewotCSAgezEsIDEzLCAyMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogMi40IEcsIGNoIDF+MTMgKi8KLQkgIHszNiwgNCwgMjMsIElET1IsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCAzNn40OCAqLwotCSAgezUyLCA0LCAyMywgSURPUiwgVFJVRX0KLQkgICwJCQkvKiA1RywgY2ggNTJ+NjQgKi8KLQkgIHsxMDAsIDExLCAzMCwgQk9USCwgVFJVRX0KLQkgICwJCQkvKiA1RywgY2ggMTAwfjE0MCAqLwotCSAgezB9Ci0JICAsCQkJLyogZW5kICovCi0JICB9Ci0JIH0KLQksCi0KLQl7CQkJLyogUm9tYW5pYSAqLwotCSAiUk8iLAotCSBDRSwKLQkgewotCSAgezEsIDEzLCAyMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogMi40IEcsIGNoIDF+MTMgKi8KLQkgIHszNiwgNCwgMjMsIElET1IsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCAzNn40OCAqLwotCSAgezUyLCA0LCAyMywgSURPUiwgVFJVRX0KLQkgICwJCQkvKiA1RywgY2ggNTJ+NjQgKi8KLQkgIHsxMDAsIDExLCAzMCwgQk9USCwgVFJVRX0KLQkgICwJCQkvKiA1RywgY2ggMTAwfjE0MCAqLwotCSAgezB9Ci0JICAsCQkJLyogZW5kICovCi0JICB9Ci0JIH0KLQksCi0KLQl7CQkJLyogUnVzc2lhICovCi0JICJSVSIsCi0JIENFLAotCSB7Ci0JICB7MSwgMTMsIDIwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiAyLjQgRywgY2ggMX4xMyAqLwotCSAgezE0OSwgNCwgMjAsIElET1IsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCAxNDl+MTYxICovCi0JICB7MH0KLQkgICwJCQkvKiBlbmQgKi8KLQkgIH0KLQkgfQotCSwKLQotCXsJCQkvKiBTYXVkaSBBcmFiaWEgKi8KLQkgIlNBIiwKLQkgQ0UsCi0JIHsKLQkgIHsxLCAxMywgMjAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDIuNCBHLCBjaCAxfjEzICovCi0JICB7MzYsIDQsIDIzLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMzZ+NDggKi8KLQkgIHs1MiwgNCwgMjMsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCA1Mn42NCAqLwotCSAgezE0OSwgNCwgMjMsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCAxNDl+MTYxICovCi0JICB7MH0KLQkgICwJCQkvKiBlbmQgKi8KLQkgIH0KLQkgfQotCSwKLQotCXsJCQkvKiBTZXJiaWFfYW5kX01vbnRlbmVncm8gKi8KLQkgIkNTIiwKLQkgQ0UsCi0JIHsKLQkgIHsxLCAxMywgMjAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDIuNCBHLCBjaCAxfjEzICovCi0JICB7MH0KLQkgICwJCQkvKiBlbmQgKi8KLQkgIH0KLQkgfQotCSwKLQotCXsJCQkvKiBTaW5nYXBvcmUgKi8KLQkgIlNHIiwKLQkgQ0UsCi0JIHsKLQkgIHsxLCAxMywgMjAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDIuNCBHLCBjaCAxfjEzICovCi0JICB7MzYsIDQsIDIzLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMzZ+NDggKi8KLQkgIHs1MiwgNCwgMjMsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCA1Mn42NCAqLwotCSAgezE0OSwgNCwgMjAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCAxNDl+MTYxICovCi0JICB7MH0KLQkgICwJCQkvKiBlbmQgKi8KLQkgIH0KLQkgfQotCSwKLQotCXsJCQkvKiBTbG92YWtpYSAqLwotCSAiU0siLAotCSBDRSwKLQkgewotCSAgezEsIDEzLCAyMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogMi40IEcsIGNoIDF+MTMgKi8KLQkgIHszNiwgNCwgMjMsIElET1IsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCAzNn40OCAqLwotCSAgezUyLCA0LCAyMywgSURPUiwgVFJVRX0KLQkgICwJCQkvKiA1RywgY2ggNTJ+NjQgKi8KLQkgIHsxMDAsIDExLCAzMCwgQk9USCwgVFJVRX0KLQkgICwJCQkvKiA1RywgY2ggMTAwfjE0MCAqLwotCSAgezB9Ci0JICAsCQkJLyogZW5kICovCi0JICB9Ci0JIH0KLQksCi0KLQl7CQkJLyogU2xvdmVuaWEgKi8KLQkgIlNJIiwKLQkgQ0UsCi0JIHsKLQkgIHsxLCAxMywgMjAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDIuNCBHLCBjaCAxfjEzICovCi0JICB7MzYsIDQsIDIzLCBJRE9SLCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMzZ+NDggKi8KLQkgIHs1MiwgNCwgMjMsIElET1IsIFRSVUV9Ci0JICAsCQkJLyogNUcsIGNoIDUyfjY0ICovCi0JICB7MH0KLQkgICwJCQkvKiBlbmQgKi8KLQkgIH0KLQkgfQotCSwKLQotCXsJCQkvKiBTb3V0aCBBZnJpY2EgKi8KLQkgIlpBIiwKLQkgQ0UsCi0JIHsKLQkgIHsxLCAxMywgMjAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDIuNCBHLCBjaCAxfjEzICovCi0JICB7MzYsIDQsIDIzLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMzZ+NDggKi8KLQkgIHs1MiwgNCwgMjMsIElET1IsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCA1Mn42NCAqLwotCSAgezEwMCwgMTEsIDMwLCBCT1RILCBUUlVFfQotCSAgLAkJCS8qIDVHLCBjaCAxMDB+MTQwICovCi0JICB7MTQ5LCA0LCAzMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDE0OX4xNjEgKi8KLQkgIHswfQotCSAgLAkJCS8qIGVuZCAqLwotCSAgfQotCSB9Ci0JLAotCi0JewkJCS8qIFNvdXRoIEtvcmVhICovCi0JICJLUiIsCi0JIENFLAotCSB7Ci0JICB7MSwgMTMsIDIwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiAyLjQgRywgY2ggMX4xMyAqLwotCSAgezM2LCA0LCAyMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDM2fjQ4ICovCi0JICB7NTIsIDQsIDIwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggNTJ+NjQgKi8KLQkgIHsxMDAsIDgsIDIwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMTAwfjEyOCAqLwotCSAgezE0OSwgNCwgMjAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCAxNDl+MTYxICovCi0JICB7MH0KLQkgICwJCQkvKiBlbmQgKi8KLQkgIH0KLQkgfQotCSwKLQotCXsJCQkvKiBTcGFpbiAqLwotCSAiRVMiLAotCSBDRSwKLQkgewotCSAgezEsIDEzLCAyMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogMi40IEcsIGNoIDF+MTMgKi8KLQkgIHszNiwgNCwgMTcsIElET1IsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCAzNn40OCAqLwotCSAgezUyLCA0LCAyMywgSURPUiwgVFJVRX0KLQkgICwJCQkvKiA1RywgY2ggNTJ+NjQgKi8KLQkgIHsxMDAsIDExLCAzMCwgQk9USCwgVFJVRX0KLQkgICwJCQkvKiA1RywgY2ggMTAwfjE0MCAqLwotCSAgezB9Ci0JICAsCQkJLyogZW5kICovCi0JICB9Ci0JIH0KLQksCi0KLQl7CQkJLyogU3dlZGVuICovCi0JICJTRSIsCi0JIENFLAotCSB7Ci0JICB7MSwgMTMsIDIwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiAyLjQgRywgY2ggMX4xMyAqLwotCSAgezM2LCA0LCAyMywgSURPUiwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDM2fjQ4ICovCi0JICB7NTIsIDQsIDIzLCBJRE9SLCBUUlVFfQotCSAgLAkJCS8qIDVHLCBjaCA1Mn42NCAqLwotCSAgezEwMCwgMTEsIDMwLCBCT1RILCBUUlVFfQotCSAgLAkJCS8qIDVHLCBjaCAxMDB+MTQwICovCi0JICB7MH0KLQkgICwJCQkvKiBlbmQgKi8KLQkgIH0KLQkgfQotCSwKLQotCXsJCQkvKiBTd2l0emVybGFuZCAqLwotCSAiQ0giLAotCSBDRSwKLQkgewotCSAgezEsIDEzLCAyMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogMi40IEcsIGNoIDF+MTMgKi8KLQkgIHszNiwgNCwgMjMsIElET1IsIFRSVUV9Ci0JICAsCQkJLyogNUcsIGNoIDM2fjQ4ICovCi0JICB7NTIsIDQsIDIzLCBJRE9SLCBUUlVFfQotCSAgLAkJCS8qIDVHLCBjaCA1Mn42NCAqLwotCSAgezB9Ci0JICAsCQkJLyogZW5kICovCi0JICB9Ci0JIH0KLQksCi0KLQl7CQkJLyogVGFpd2FuICovCi0JICJUVyIsCi0JIENFLAotCSB7Ci0JICB7MSwgMTEsIDMwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiAyLjQgRywgY2ggMX4xMSAqLwotCSAgezUyLCA0LCAyMywgSURPUiwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDUyfjY0ICovCi0JICB7MH0KLQkgICwJCQkvKiBlbmQgKi8KLQkgIH0KLQkgfQotCSwKLQotCXsJCQkvKiBUdXJrZXkgKi8KLQkgIlRSIiwKLQkgQ0UsCi0JIHsKLQkgIHsxLCAxMywgMjAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDIuNCBHLCBjaCAxfjExICovCi0JICB7MzYsIDQsIDIzLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMzZ+NDggKi8KLQkgIHs1MiwgNCwgMjMsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCA1Mn42NCAqLwotCSAgezB9Ci0JICAsCQkJLyogZW5kICovCi0JICB9Ci0JIH0KLQksCi0KLQl7CQkJLyogVUsgKi8KLQkgIkdCIiwKLQkgQ0UsCi0JIHsKLQkgIHsxLCAxMywgMjAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDIuNCBHLCBjaCAxfjExICovCi0JICB7MzYsIDQsIDIzLCBJRE9SLCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggNTJ+NjQgKi8KLQkgIHs1MiwgNCwgMjMsIElET1IsIFRSVUV9Ci0JICAsCQkJLyogNUcsIGNoIDUyfjY0ICovCi0JICB7MTAwLCAxMSwgMzAsIEJPVEgsIFRSVUV9Ci0JICAsCQkJLyogNUcsIGNoIDEwMH4xNDAgKi8KLQkgIHswfQotCSAgLAkJCS8qIGVuZCAqLwotCSAgfQotCSB9Ci0JLAotCi0JewkJCS8qIFVrcmFpbmUgKi8KLQkgIlVBIiwKLQkgQ0UsCi0JIHsKLQkgIHsxLCAxMywgMjAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDIuNCBHLCBjaCAxfjExICovCi0JICB7MH0KLQkgICwJCQkvKiBlbmQgKi8KLQkgIH0KLQkgfQotCSwKLQotCXsJCQkvKiBVbml0ZWRfQXJhYl9FbWlyYXRlcyAqLwotCSAiQUUiLAotCSBDRSwKLQkgewotCSAgezEsIDEzLCAyMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogMi40IEcsIGNoIDF+MTEgKi8KLQkgIHswfQotCSAgLAkJCS8qIGVuZCAqLwotCSAgfQotCSB9Ci0JLAotCi0JewkJCS8qIFVuaXRlZF9TdGF0ZXMgKi8KLQkgIlVTIiwKLQkgQ0UsCi0JIHsKLQkgIHsxLCAxMSwgMzAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDIuNCBHLCBjaCAxfjExICovCi0JICB7MzYsIDQsIDE3LCBJRE9SLCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggNTJ+NjQgKi8KLQkgIHs1MiwgNCwgMjQsIEJPVEgsIFRSVUV9Ci0JICAsCQkJLyogNUcsIGNoIDUyfjY0ICovCi0JICB7MTAwLCAxMSwgMzAsIEJPVEgsIFRSVUV9Ci0JICAsCQkJLyogNUcsIGNoIDEwMH4xNDAgKi8KLQkgIHsxNDksIDUsIDMwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiA1RywgY2ggMTQ5fjE2NSAqLwotCSAgezB9Ci0JICAsCQkJLyogZW5kICovCi0JICB9Ci0JIH0KLQksCi0KLQl7CQkJLyogVmVuZXp1ZWxhICovCi0JICJWRSIsCi0JIENFLAotCSB7Ci0JICB7MSwgMTMsIDIwLCBCT1RILCBGQUxTRX0KLQkgICwJCQkvKiAyLjQgRywgY2ggMX4xMSAqLwotCSAgezE0OSwgNCwgMjcsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCAxNDl+MTYxICovCi0JICB7MH0KLQkgICwJCQkvKiBlbmQgKi8KLQkgIH0KLQkgfQotCSwKLQotCXsJCQkvKiBEZWZhdWx0ICovCi0JICIiLAotCSBDRSwKLQkgewotCSAgezEsIDExLCAyMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogMi40IEcsIGNoIDF+MTEgKi8KLQkgIHszNiwgNCwgMjAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCA1Mn42NCAqLwotCSAgezUyLCA0LCAyMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDUyfjY0ICovCi0JICB7MTAwLCAxMSwgMjAsIEJPVEgsIEZBTFNFfQotCSAgLAkJCS8qIDVHLCBjaCAxMDB+MTQwICovCi0JICB7MTQ5LCA1LCAyMCwgQk9USCwgRkFMU0V9Ci0JICAsCQkJLyogNUcsIGNoIDE0OX4xNjUgKi8KLQkgIHswfQotCSAgLAkJCS8qIGVuZCAqLwotCSAgfQotCSB9Ci0JLAotfTsKLQotc3RhdGljIHN0cnVjdCBydF9jaF9yZWdpb24gKkdldENoUmVnaW9uKHU4ICpDbnRyeUNvZGUpCi17Ci0JaW50IGxvb3AgPSAwOwotCXN0cnVjdCBydF9jaF9yZWdpb24gKnBDaFJlZ2lvbiA9IE5VTEw7Ci0KLQl3aGlsZSAoc3RyY21wKChjaGFyICopQ2hSZWdpb25bbG9vcF0uQ291bnRSZWcsICIiKSAhPSAwKSB7Ci0JCWlmIChzdHJuY21wCi0JCSAgICAoKGNoYXIgKilDaFJlZ2lvbltsb29wXS5Db3VudFJlZywgKGNoYXIgKilDbnRyeUNvZGUsCi0JCSAgICAgMikgPT0gMCkgewotCQkJcENoUmVnaW9uID0gJkNoUmVnaW9uW2xvb3BdOwotCQkJYnJlYWs7Ci0JCX0KLQkJbG9vcCsrOwotCX0KLQotCWlmIChwQ2hSZWdpb24gPT0gTlVMTCkKLQkJcENoUmVnaW9uID0gJkNoUmVnaW9uW2xvb3BdOwotCXJldHVybiBwQ2hSZWdpb247Ci19Ci0KLXN0YXRpYyB2b2lkIENoQmFuZENoZWNrKHU4IFBoeU1vZGUsIHU4ICpwQ2hUeXBlKQotewotCXN3aXRjaCAoUGh5TW9kZSkgewotCWNhc2UgUEhZXzExQToKLQljYXNlIFBIWV8xMUFOX01JWEVEOgotCQkqcENoVHlwZSA9IEJBTkRfNUc7Ci0JCWJyZWFrOwotCWNhc2UgUEhZXzExQUJHX01JWEVEOgotCWNhc2UgUEhZXzExQUdOX01JWEVEOgotCWNhc2UgUEhZXzExQUJHTl9NSVhFRDoKLQkJKnBDaFR5cGUgPSBCQU5EX0JPVEg7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJKnBDaFR5cGUgPSBCQU5EXzI0RzsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgdTggRmlsbENoTGlzdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQlzdHJ1Y3QgcnRfY2hfZGVzcCAqcENoRGVzcCwKLQkJCXU4IE9mZnNldCwgdTggaW5jcmVtZW50KQotewotCWludCBpLCBqLCBsOwotCXU4IGNoYW5uZWw7Ci0KLQlqID0gT2Zmc2V0OwotCWZvciAoaSA9IDA7IGkgPCBwQ2hEZXNwLT5OdW1PZkNoOyBpKyspIHsKLQkJY2hhbm5lbCA9IHBDaERlc3AtPkZpcnN0Q2hhbm5lbCArIGkgKiBpbmNyZW1lbnQ7Ci0JCWZvciAobCA9IDA7IGwgPCBNQVhfTlVNX09GX0NIQU5ORUxTOyBsKyspIHsKLQkJCWlmIChjaGFubmVsID09IHBBZC0+VHhQb3dlcltsXS5DaGFubmVsKSB7Ci0JCQkJcEFkLT5DaGFubmVsTGlzdFtqXS5Qb3dlciA9Ci0JCQkJICAgIHBBZC0+VHhQb3dlcltsXS5Qb3dlcjsKLQkJCQlwQWQtPkNoYW5uZWxMaXN0W2pdLlBvd2VyMiA9Ci0JCQkJICAgIHBBZC0+VHhQb3dlcltsXS5Qb3dlcjI7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKGwgPT0gTUFYX05VTV9PRl9DSEFOTkVMUykKLQkJCWNvbnRpbnVlOwotCi0JCXBBZC0+Q2hhbm5lbExpc3Rbal0uQ2hhbm5lbCA9Ci0JCSAgICBwQ2hEZXNwLT5GaXJzdENoYW5uZWwgKyBpICogaW5jcmVtZW50OwotCQlwQWQtPkNoYW5uZWxMaXN0W2pdLk1heFR4UHdyID0gcENoRGVzcC0+TWF4VHhQd3I7Ci0JCXBBZC0+Q2hhbm5lbExpc3Rbal0uRGZzUmVxID0gcENoRGVzcC0+RGZzUmVxOwotCQlqKys7Ci0JfQotCXBBZC0+Q2hhbm5lbExpc3ROdW0gPSBqOwotCi0JcmV0dXJuIGo7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBDcmVhdGVDaExpc3Qoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCXN0cnVjdCBydF9jaF9yZWdpb24gKnBDaFJlZ2lvbiwgdTggR2VvZ3JhcGh5KQotewotCWludCBpOwotCXU4IG9mZnNldCA9IDA7Ci0Jc3RydWN0IHJ0X2NoX2Rlc3AgKnBDaERlc3A7Ci0JdTggQ2hUeXBlOwotCXU4IGluY3JlbWVudDsKLQotCWlmIChwQ2hSZWdpb24gPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JQ2hCYW5kQ2hlY2socEFkLT5Db21tb25DZmcuUGh5TW9kZSwgJkNoVHlwZSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewotCQlwQ2hEZXNwID0gJnBDaFJlZ2lvbi0+Q2hEZXNwW2ldOwotCQlpZiAocENoRGVzcC0+Rmlyc3RDaGFubmVsID09IDApCi0JCQlicmVhazsKLQotCQlpZiAoQ2hUeXBlID09IEJBTkRfNUcpIHsKLQkJCWlmIChwQ2hEZXNwLT5GaXJzdENoYW5uZWwgPD0gMTQpCi0JCQkJY29udGludWU7Ci0JCX0gZWxzZSBpZiAoQ2hUeXBlID09IEJBTkRfMjRHKSB7Ci0JCQlpZiAocENoRGVzcC0+Rmlyc3RDaGFubmVsID4gMTQpCi0JCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoKHBDaERlc3AtPkdlb2dyYXBoeSA9PSBCT1RIKQotCQkgICAgfHwgKHBDaERlc3AtPkdlb2dyYXBoeSA9PSBHZW9ncmFwaHkpKSB7Ci0JCQlpZiAocENoRGVzcC0+Rmlyc3RDaGFubmVsID4gMTQpCi0JCQkJaW5jcmVtZW50ID0gNDsKLQkJCWVsc2UKLQkJCQlpbmNyZW1lbnQgPSAxOwotCQkJb2Zmc2V0ID0gRmlsbENoTGlzdChwQWQsIHBDaERlc3AsIG9mZnNldCwgaW5jcmVtZW50KTsKLQkJfQotCX0KLX0KLQotdm9pZCBCdWlsZENoYW5uZWxMaXN0RXgoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCXN0cnVjdCBydF9jaF9yZWdpb24gKnBDaFJlZzsKLQotCXBDaFJlZyA9IEdldENoUmVnaW9uKHBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlDb2RlKTsKLQlDcmVhdGVDaExpc3QocEFkLCBwQ2hSZWcsIHBBZC0+Q29tbW9uQ2ZnLkdlb2dyYXBoeSk7Ci19Ci0KLXZvaWQgQnVpbGRCZWFjb25DaExpc3Qoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICAgICAgdTggKnBCdWYsIHVuc2lnbmVkIGxvbmcgKnBCdWZMZW4pCi17Ci0JaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBUbXBMZW47Ci0Jc3RydWN0IHJ0X2NoX3JlZ2lvbiAqcENoUmVnaW9uOwotCXN0cnVjdCBydF9jaF9kZXNwICpwQ2hEZXNwOwotCXU4IENoVHlwZTsKLQotCXBDaFJlZ2lvbiA9IEdldENoUmVnaW9uKHBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlDb2RlKTsKLQotCWlmIChwQ2hSZWdpb24gPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JQ2hCYW5kQ2hlY2socEFkLT5Db21tb25DZmcuUGh5TW9kZSwgJkNoVHlwZSk7Ci0JKnBCdWZMZW4gPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKLQkJcENoRGVzcCA9ICZwQ2hSZWdpb24tPkNoRGVzcFtpXTsKLQkJaWYgKHBDaERlc3AtPkZpcnN0Q2hhbm5lbCA9PSAwKQotCQkJYnJlYWs7Ci0KLQkJaWYgKENoVHlwZSA9PSBCQU5EXzVHKSB7Ci0JCQlpZiAocENoRGVzcC0+Rmlyc3RDaGFubmVsIDw9IDE0KQotCQkJCWNvbnRpbnVlOwotCQl9IGVsc2UgaWYgKENoVHlwZSA9PSBCQU5EXzI0RykgewotCQkJaWYgKHBDaERlc3AtPkZpcnN0Q2hhbm5lbCA+IDE0KQotCQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKChwQ2hEZXNwLT5HZW9ncmFwaHkgPT0gQk9USCkKLQkJICAgIHx8IChwQ2hEZXNwLT5HZW9ncmFwaHkgPT0gcEFkLT5Db21tb25DZmcuR2VvZ3JhcGh5KSkgewotCQkJTWFrZU91dGdvaW5nRnJhbWUocEJ1ZiArICpwQnVmTGVuLCAmVG1wTGVuLAotCQkJCQkgIDEsICZwQ2hEZXNwLT5GaXJzdENoYW5uZWwsCi0JCQkJCSAgMSwgJnBDaERlc3AtPk51bU9mQ2gsCi0JCQkJCSAgMSwgJnBDaERlc3AtPk1heFR4UHdyLCBFTkRfT0ZfQVJHUyk7Ci0JCQkqcEJ1ZkxlbiArPSBUbXBMZW47Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyBCT09MRUFOIElzVmFsaWRDaGFubmVsKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggY2hhbm5lbCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBwQWQtPkNoYW5uZWxMaXN0TnVtOyBpKyspIHsKLQkJaWYgKHBBZC0+Q2hhbm5lbExpc3RbaV0uQ2hhbm5lbCA9PSBjaGFubmVsKQotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKGkgPT0gcEFkLT5DaGFubmVsTGlzdE51bSkKLQkJcmV0dXJuIEZBTFNFOwotCWVsc2UKLQkJcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB1OCBHZXRFeHRDaCh1OCBDaGFubmVsLCB1OCBEaXJlY3Rpb24pCi17Ci0JY2hhciBFeHRDaDsKLQotCWlmIChEaXJlY3Rpb24gPT0gRVhUQ0hBX0FCT1ZFKQotCQlFeHRDaCA9IENoYW5uZWwgKyA0OwotCWVsc2UKLQkJRXh0Q2ggPSAoQ2hhbm5lbCAtIDQpID4gMCA/IChDaGFubmVsIC0gNCkgOiAwOwotCi0JcmV0dXJuIEV4dENoOwotfQotCi12b2lkIE5fQ2hhbm5lbENoZWNrKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQkvKnU4IENoYW5uZWxOdW0gPSBwQWQtPkNoYW5uZWxMaXN0TnVtOyAqLwotCXU4IENoYW5uZWwgPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsOwotCi0JaWYgKChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpCi0JICAgICYmIChwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlcgPT0gQldfNDApKSB7Ci0JCWlmIChDaGFubmVsID4gMTQpIHsKLQkJCWlmICgoQ2hhbm5lbCA9PSAzNikgfHwgKENoYW5uZWwgPT0gNDQpCi0JCQkgICAgfHwgKENoYW5uZWwgPT0gNTIpIHx8IChDaGFubmVsID09IDYwKQotCQkJICAgIHx8IChDaGFubmVsID09IDEwMCkgfHwgKENoYW5uZWwgPT0gMTA4KQotCQkJICAgIHx8IChDaGFubmVsID09IDExNikgfHwgKENoYW5uZWwgPT0gMTI0KQotCQkJICAgIHx8IChDaGFubmVsID09IDEzMikgfHwgKENoYW5uZWwgPT0gMTQ5KQotCQkJICAgIHx8IChDaGFubmVsID09IDE1NykpIHsKLQkJCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuRVhUQ0hBID0KLQkJCQkgICAgRVhUQ0hBX0FCT1ZFOwotCQkJfSBlbHNlIGlmICgoQ2hhbm5lbCA9PSA0MCkgfHwgKENoYW5uZWwgPT0gNDgpCi0JCQkJICAgfHwgKENoYW5uZWwgPT0gNTYpIHx8IChDaGFubmVsID09IDY0KQotCQkJCSAgIHx8IChDaGFubmVsID09IDEwNCkgfHwgKENoYW5uZWwgPT0gMTEyKQotCQkJCSAgIHx8IChDaGFubmVsID09IDEyMCkgfHwgKENoYW5uZWwgPT0gMTI4KQotCQkJCSAgIHx8IChDaGFubmVsID09IDEzNikgfHwgKENoYW5uZWwgPT0gMTUzKQotCQkJCSAgIHx8IChDaGFubmVsID09IDE2MSkpIHsKLQkJCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuRVhUQ0hBID0KLQkJCQkgICAgRVhUQ0hBX0JFTE9XOwotCQkJfSBlbHNlIHsKLQkJCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlcgPQotCQkJCSAgICBCV18yMDsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWRvIHsKLQkJCQl1OCBFeHRDaDsKLQkJCQl1OCBEaXIgPQotCQkJCSAgICBwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuCi0JCQkJICAgIEVYVENIQTsKLQkJCQlFeHRDaCA9IEdldEV4dENoKENoYW5uZWwsIERpcik7Ci0JCQkJaWYgKElzVmFsaWRDaGFubmVsKHBBZCwgRXh0Q2gpKQotCQkJCQlicmVhazsKLQotCQkJCURpciA9Ci0JCQkJICAgIChEaXIgPT0KLQkJCQkgICAgIEVYVENIQV9BQk9WRSkgPyBFWFRDSEFfQkVMT1cgOgotCQkJCSAgICBFWFRDSEFfQUJPVkU7Ci0JCQkJRXh0Q2ggPSBHZXRFeHRDaChDaGFubmVsLCBEaXIpOwotCQkJCWlmIChJc1ZhbGlkQ2hhbm5lbChwQWQsIEV4dENoKSkgewotCQkJCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuCi0JCQkJCSAgICBFWFRDSEEgPSBEaXI7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlcgPQotCQkJCSAgICBCV18yMDsKLQkJCX0gd2hpbGUgKEZBTFNFKTsKLQotCQkJaWYgKENoYW5uZWwgPT0gMTQpIHsKLQkJCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlcgPQotCQkJCSAgICBCV18yMDsKLQkJCQkvKnBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5FWFRDSEEgPSBFWFRDSEFfTk9ORTsgLy8gV2UgZGlkbid0IHNldCB0aGUgRXh0Q2ggYXMgTk9ORSBkdWUgdG8gaXQnbGwgc2V0IGluIFJUTVBTZXRIVCgpICovCi0JCQl9Ci0JCX0KLQl9Ci0KLX0KLQotdm9pZCBOX1NldENlbkNoKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlpZiAocEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkJXID09IEJXXzQwKSB7Ci0JCWlmIChwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuRVhUQ0hBID09Ci0JCSAgICBFWFRDSEFfQUJPVkUpIHsKLQkJCXBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsID0KLQkJCSAgICBwQWQtPkNvbW1vbkNmZy5DaGFubmVsICsgMjsKLQkJfSBlbHNlIHsKLQkJCWlmIChwQWQtPkNvbW1vbkNmZy5DaGFubmVsID09IDE0KQotCQkJCXBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsID0KLQkJCQkgICAgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCAtIDE7Ci0JCQllbHNlCi0JCQkJcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPQotCQkJCSAgICBwQWQtPkNvbW1vbkNmZy5DaGFubmVsIC0gMjsKLQkJfQotCX0gZWxzZSB7Ci0JCXBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsID0gcEFkLT5Db21tb25DZmcuQ2hhbm5lbDsKLQl9Ci19Ci0KLXU4IEdldEN1bnRyeU1heFR4UHdyKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggY2hhbm5lbCkKLXsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgcEFkLT5DaGFubmVsTGlzdE51bTsgaSsrKSB7Ci0JCWlmIChwQWQtPkNoYW5uZWxMaXN0W2ldLkNoYW5uZWwgPT0gY2hhbm5lbCkKLQkJCWJyZWFrOwotCX0KLQotCWlmIChpID09IHBBZC0+Q2hhbm5lbExpc3ROdW0pCi0JCXJldHVybiAweGZmOwotCWVsc2UKLQkJcmV0dXJuIHBBZC0+Q2hhbm5lbExpc3RbaV0uTWF4VHhQd3I7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9ydF9yZi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vcnRfcmYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg5NTQ0Ny4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9ydF9yZi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTg3ICswLDAgQEAKLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUmFsaW5rIFRlY2ggSW5jLgotICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAotICogSHNpbmNodSBDb3VudHkgMzAyLAotICogVGFpd2FuLCBSLk8uQy4KLSAqCi0gKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0JTW9kdWxlIE5hbWU6Ci0JcnRfcmYuYwotCi0JQWJzdHJhY3Q6Ci0JUmFsaW5rIFdpcmVsZXNzIGRyaXZlciBSRiByZWxhdGVkIGZ1bmN0aW9ucwotCi0JUmV2aXNpb24gSGlzdG9yeToKLQlXaG8gICAgICAgICBXaGVuICAgICAgICAgIFdoYXQKLQktLS0tLS0tLSAgICAtLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSovCi0KLSNpbmNsdWRlICIuLi9ydF9jb25maWcuaCIKLQotI2lmZGVmIFJUTVBfUkZfUldfU1VQUE9SVAotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246IFdyaXRlIFJUMzB4eCBSRiByZWdpc3RlciB0aHJvdWdoIE1BQwotCi0JQXJndW1lbnRzOgotCi0JUmV0dXJuIFZhbHVlOgotCi0JSVJRTCA9Ci0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotaW50IFJUMzB4eFdyaXRlUkZSZWdpc3RlcihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJICB1OCByZWdJRCwgdTggdmFsdWUpCi17Ci0JUkZfQ1NSX0NGR19TVFJVQyByZmNzcjsKLQl1MzIgaSA9IDA7Ci0KLQlkbyB7Ci0JCVJUTVBfSU9fUkVBRDMyKHBBZCwgUkZfQ1NSX0NGRywgJnJmY3NyLndvcmQpOwotCi0JCWlmICghcmZjc3IuZmllbGQuUkZfQ1NSX0tJQ0spCi0JCQlicmVhazsKLQkJaSsrOwotCX0KLQl3aGlsZSAoKGkgPCBSRVRSWV9MSU1JVCkKLQkgICAgICAgJiYgKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKTsKLQotCWlmICgoaSA9PSBSRVRSWV9MSU1JVCkKLQkgICAgfHwgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpIHsKLQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLAotCQkJICAgICAoIlJldHJ5IGNvdW50IGV4aGF1c3RlZCBvciBkZXZpY2UgcmVtb3ZlZCFcbiIpKTsKLQkJcmV0dXJuIFNUQVRVU19VTlNVQ0NFU1NGVUw7Ci0JfQotCi0JcmZjc3IuZmllbGQuUkZfQ1NSX1dSID0gMTsKLQlyZmNzci5maWVsZC5SRl9DU1JfS0lDSyA9IDE7Ci0JcmZjc3IuZmllbGQuVEVTVENTUl9SRkFDQ19SRUdOVU0gPSByZWdJRDsKLQlyZmNzci5maWVsZC5SRl9DU1JfREFUQSA9IHZhbHVlOwotCi0JUlRNUF9JT19XUklURTMyKHBBZCwgUkZfQ1NSX0NGRywgcmZjc3Iud29yZCk7Ci0KLQlyZXR1cm4gTkRJU19TVEFUVVNfU1VDQ0VTUzsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246IFJlYWQgUlQzMHh4IFJGIHJlZ2lzdGVyIHRocm91Z2ggTUFDCi0KLQlBcmd1bWVudHM6Ci0KLQlSZXR1cm4gVmFsdWU6Ci0KLQlJUlFMID0KLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi1pbnQgUlQzMHh4UmVhZFJGUmVnaXN0ZXIoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCSB1OCByZWdJRCwgdTggKnBWYWx1ZSkKLXsKLQlSRl9DU1JfQ0ZHX1NUUlVDIHJmY3NyOwotCXUzMiBpID0gMCwgayA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0JVU1lfQ09VTlQ7IGkrKykgewotCQlSVE1QX0lPX1JFQUQzMihwQWQsIFJGX0NTUl9DRkcsICZyZmNzci53b3JkKTsKLQotCQlpZiAocmZjc3IuZmllbGQuUkZfQ1NSX0tJQ0sgPT0gQlVTWSkgewotCQkJY29udGludWU7Ci0JCX0KLQkJcmZjc3Iud29yZCA9IDA7Ci0JCXJmY3NyLmZpZWxkLlJGX0NTUl9XUiA9IDA7Ci0JCXJmY3NyLmZpZWxkLlJGX0NTUl9LSUNLID0gMTsKLQkJcmZjc3IuZmllbGQuVEVTVENTUl9SRkFDQ19SRUdOVU0gPSByZWdJRDsKLQkJUlRNUF9JT19XUklURTMyKHBBZCwgUkZfQ1NSX0NGRywgcmZjc3Iud29yZCk7Ci0JCWZvciAoayA9IDA7IGsgPCBNQVhfQlVTWV9DT1VOVDsgaysrKSB7Ci0JCQlSVE1QX0lPX1JFQUQzMihwQWQsIFJGX0NTUl9DRkcsICZyZmNzci53b3JkKTsKLQotCQkJaWYgKHJmY3NyLmZpZWxkLlJGX0NTUl9LSUNLID09IElETEUpCi0JCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKChyZmNzci5maWVsZC5SRl9DU1JfS0lDSyA9PSBJRExFKSAmJgotCQkgICAgKHJmY3NyLmZpZWxkLlRFU1RDU1JfUkZBQ0NfUkVHTlVNID09IHJlZ0lEKSkgewotCQkJKnBWYWx1ZSA9ICh1OClyZmNzci5maWVsZC5SRl9DU1JfREFUQTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmIChyZmNzci5maWVsZC5SRl9DU1JfS0lDSyA9PSBCVVNZKSB7Ci0JCURCR1BSSU5UX0VSUigiUkYgcmVhZCBSJWQ9MHgleCBmYWlsLCBpWyVkXSwga1slZF1cbiIsIHJlZ0lELCByZmNzci53b3JkLCBpLCBrKTsKLQkJcmV0dXJuIFNUQVRVU19VTlNVQ0NFU1NGVUw7Ci0JfQotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi12b2lkIE5JQ0luaXRSRlJlZ2lzdGVycyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0JaWYgKHBBZC0+Y2hpcE9wcy5Bc2ljUmZJbml0KQotCQlwQWQtPmNoaXBPcHMuQXNpY1JmSW5pdChwQWQpOwotfQotCi12b2lkIFJ0bXBDaGlwT3BzUkZIb29rKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlzdHJ1Y3QgcnRfcnRtcF9jaGlwX29wICpwQ2hpcE9wcyA9ICZwQWQtPmNoaXBPcHM7Ci0KLQlwQ2hpcE9wcy0+cFJGUmVnVGFibGUgPSBOVUxMOwotCXBDaGlwT3BzLT5Bc2ljUmZJbml0ID0gTlVMTDsKLQlwQ2hpcE9wcy0+QXNpY1JmVHVybk9uID0gTlVMTDsKLQlwQ2hpcE9wcy0+QXNpY1JmVHVybk9mZiA9IE5VTEw7Ci0JcENoaXBPcHMtPkFzaWNSZXZlcnNlUmZGcm9tU2xlZXBNb2RlID0gTlVMTDsKLQlwQ2hpcE9wcy0+QXNpY0hhbHRBY3Rpb24gPSBOVUxMOwotCS8qIFdlIGRlcGVuZHMgb24gUmZJQ1R5cGUgYW5kIE1BQ1ZlcnNpb24gdG8gYXNzaWduIHRoZSBjb3JyZXNwb25kaW5nIG9wZXJhdGlvbiBjYWxsYmFja3MuICovCi0KLSNpZmRlZiBSVDMweHgKLQlpZiAoSVNfUlQzMHh4KHBBZCkpIHsKLQkJcENoaXBPcHMtPnBSRlJlZ1RhYmxlID0gUlQzMHh4X1JGUmVnVGFibGU7Ci0JCXBDaGlwT3BzLT5Bc2ljSGFsdEFjdGlvbiA9IFJUMzB4eEhhbHRBY3Rpb247Ci0jaWZkZWYgUlQzMDcwCi0JCWlmICgoSVNfUlQzMDcwKHBBZCkgfHwgSVNfUlQzMDcxKHBBZCkpCi0JCSAgICAmJiAocEFkLT5pbmZUeXBlID09IFJUTVBfREVWX0lORl9VU0IpKSB7Ci0JCQlwQ2hpcE9wcy0+QXNpY1JmSW5pdCA9IE5JQ0luaXRSVDMwNzBSRlJlZ2lzdGVyczsKLQkJCWlmIChJU19SVDMwNzEocEFkKSkgewotCQkJCXBDaGlwT3BzLT5Bc2ljUmZUdXJuT2ZmID0KLQkJCQkgICAgUlQzMHh4TG9hZFJGU2xlZXBNb2RlU2V0dXA7Ci0JCQkJcENoaXBPcHMtPkFzaWNSZXZlcnNlUmZGcm9tU2xlZXBNb2RlID0KLQkJCQkgICAgUlQzMHh4UmV2ZXJzZVJGU2xlZXBNb2RlU2V0dXA7Ci0JCQl9Ci0JCX0KLSNlbmRpZiAvKiBSVDMwNzAgLy8gKi8KLSNpZmRlZiBSVDMwOTAKLQkJaWYgKElTX1JUMzA5MChwQWQpICYmIChwQWQtPmluZlR5cGUgPT0gUlRNUF9ERVZfSU5GX1BDSSkpIHsKLQkJCXBDaGlwT3BzLT5Bc2ljUmZUdXJuT2ZmID0gUlQzMHh4TG9hZFJGU2xlZXBNb2RlU2V0dXA7Ci0JCQlwQ2hpcE9wcy0+QXNpY1JmSW5pdCA9IE5JQ0luaXRSVDMwOTBSRlJlZ2lzdGVyczsKLQkJCXBDaGlwT3BzLT5Bc2ljUmV2ZXJzZVJmRnJvbVNsZWVwTW9kZSA9Ci0JCQkgICAgUlQzMHh4UmV2ZXJzZVJGU2xlZXBNb2RlU2V0dXA7Ci0JCX0KLSNlbmRpZiAvKiBSVDMwOTAgLy8gKi8KLQl9Ci0jZW5kaWYgLyogUlQzMHh4IC8vICovCi19Ci0KLSNlbmRpZiAvKiBSVE1QX1JGX1JXX1NVUFBPUlQgLy8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL3J0bXBfaW5pdC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vcnRtcF9pbml0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmYTE5M2UuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vcnRtcF9pbml0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNTM2ICswLDAgQEAKLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUmFsaW5rIFRlY2ggSW5jLgotICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAotICogSHNpbmNodSBDb3VudHkgMzAyLAotICogVGFpd2FuLCBSLk8uQy4KLSAqCi0gKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0JTW9kdWxlIE5hbWU6Ci0JcnRtcF9pbml0LmMKLQotCUFic3RyYWN0OgotCU1pbmlwb3J0IGdlbmVyaWMgcG9ydGlvbiBoZWFkZXIgZmlsZQotCi0JUmV2aXNpb24gSGlzdG9yeToKLQlXaG8gICAgICAgICBXaGVuICAgICAgICAgIFdoYXQKLQktLS0tLS0tLSAgICAtLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSovCi0jaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCi0KLXU4IEJJVDhbXSA9IHsgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCB9OwotY2hhciAqQ2lwaGVyTmFtZVtdID0KLSAgICB7ICJub25lIiwgIndlcDY0IiwgIndlcDEyOCIsICJUS0lQIiwgIkFFUyIsICJDS0lQNjQiLCAiQ0tJUDEyOCIgfTsKLQotLyogKi8KLS8qIEJCUCByZWdpc3RlciBpbml0aWFsaXphdGlvbiBzZXQgKi8KLS8qICovCi1zdHJ1Y3QgcnRfcmVnX3BhaXIgQkJQUmVnVGFibGVbXSA9IHsKLQl7QkJQX1I2NSwgMHgyQ30sCS8qIGZpeCByc3NpIGlzc3VlICovCi0Je0JCUF9SNjYsIDB4Mzh9LAkvKiBBbHNvIHNldCB0aGlzIGRlZmF1bHQgdmFsdWUgdG8gcEFkLT5CYnBUdW5pbmcuUjY2Q3VycmVudFZhbHVlIGF0IGluaXRpYWwgKi8KLQl7QkJQX1I2OSwgMHgxMn0sCi0Je0JCUF9SNzAsIDB4YX0sCQkvKiBCQlBfUjcwIHdpbGwgY2hhbmdlIHRvIDB4OCBpbiBBcFN0YXJ0VXAgYW5kIExpbmtVcCBmb3IgcnQyODYwQywgb3RoZXJ3aXNlIHZhbHVlIGlzIDB4YSAqLwotCXtCQlBfUjczLCAweDEwfSwKLQl7QkJQX1I4MSwgMHgzN30sCi0Je0JCUF9SODIsIDB4NjJ9LAotCXtCQlBfUjgzLCAweDZBfSwKLQl7QkJQX1I4NCwgMHg5OX0sCS8qIDB4MTkgaXMgZm9yIHJ0Mjg2MEUgYW5kIGFmdGVyLiBUaGlzIGlzIGZvciBleHRlbnNpb24gY2hhbm5lbCBvdmVybGFwcGluZyBJT1QuIDB4OTkgaXMgZm9yIHJ0Mjg2MEQgYW5kIGJlZm9yZSAqLwotCXtCQlBfUjg2LCAweDAwfSwJLyogbWlkZGxlIHJhbmdlIGlzc3VlLCBSb3J5IEAyMDA4LTAxLTI4ICovCi0Je0JCUF9SOTEsIDB4MDR9LAkvKiBtaWRkbGUgcmFuZ2UgaXNzdWUsIFJvcnkgQDIwMDgtMDEtMjggKi8KLQl7QkJQX1I5MiwgMHgwMH0sCS8qIG1pZGRsZSByYW5nZSBpc3N1ZSwgUm9yeSBAMjAwOC0wMS0yOCAqLwotCXtCQlBfUjEwMywgMHgwMH0sCS8qIG5lYXIgcmFuZ2UgaGlnaC1wb3dlciBpc3N1ZSwgcmVxdWVzdGVkIGZyb20gR2FyeSBAMjAwOC0wNTI4ICovCi0Je0JCUF9SMTA1LCAweDA1fSwJLyogMHgwNSBpcyBmb3IgcnQyODYwRSB0byB0dXJuIG9uIEZFUSBjb250cm9sLiBJdCBpcyBzYWZlIGZvciBydDI4NjBEIGFuZCBiZWZvcmUsIGJlY2F1c2UgQml0IDc6MiBhcmUgcmVzZXJ2ZWQgaW4gcnQyODYwRCBhbmQgYmVmb3JlLiAqLwotCXtCQlBfUjEwNiwgMHgzNX0sCS8qIGZvciBTaG9ydEdJIHRocm91Z2hwdXQgKi8KLX07Ci0KLSNkZWZpbmUJTlVNX0JCUF9SRUdfUEFSTVMJKHNpemVvZihCQlBSZWdUYWJsZSkgLyBzaXplb2Yoc3RydWN0IHJ0X3JlZ19wYWlyKSkKLQotLyogKi8KLS8qIEFTSUMgcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24gc2V0cyAqLwotLyogKi8KLQotc3RydWN0IHJ0X3J0bXBfcmVnX3BhaXIgTUFDUmVnVGFibGVbXSA9IHsKLSNpZiBkZWZpbmVkKEhXX0JFQUNPTl9PRkZTRVQpICYmIChIV19CRUFDT05fT0ZGU0VUID09IDB4MjAwKQotCXtCQ05fT0ZGU0VUMCwgMHhmOGYwZThlMH0sCS8qIDB4MzgwMChlMCksIDB4M0EwMChlOCksIDB4M0MwMChmMCksIDB4M0UwMChmOCksIDUxMkIgZm9yIGVhY2ggYmVhY29uICovCi0Je0JDTl9PRkZTRVQxLCAweDZmNzdkMGM4fSwJLyogMHgzMjAwKGM4KSwgMHgzNDAwKGQwKSwgMHgxREMwKDc3KSwgMHgxQkMwKDZmKSwgNTEyQiBmb3IgZWFjaCBiZWFjb24gKi8KLSNlbGlmIGRlZmluZWQoSFdfQkVBQ09OX09GRlNFVCkgJiYgKEhXX0JFQUNPTl9PRkZTRVQgPT0gMHgxMDApCi0Je0JDTl9PRkZTRVQwLCAweGVjZThlNGUwfSwJLyogMHgzODAwLCAweDNBMDAsIDB4M0MwMCwgMHgzRTAwLCA1MTJCIGZvciBlYWNoIGJlYWNvbiAqLwotCXtCQ05fT0ZGU0VUMSwgMHhmY2Y4ZjRmMH0sCS8qIDB4MzgwMCwgMHgzQTAwLCAweDNDMDAsIDB4M0UwMCwgNTEyQiBmb3IgZWFjaCBiZWFjb24gKi8KLSNlbHNlCi0jZXJyb3IgWW91IG11c3QgcmUtY2FsY3VsYXRlIG5ldyB2YWx1ZSBmb3IgQkNOX09GRlNFVDAgJiBCQ05fT0ZGU0VUMSBpbiBNQUNSZWdUYWJsZVtdIQotI2VuZGlmIC8qIEhXX0JFQUNPTl9PRkZTRVQgLy8gKi8KLQotCXtMRUdBQ1lfQkFTSUNfUkFURSwgMHgwMDAwMDEzZn0sCS8qICBCYXNpYyByYXRlIHNldCBiaXRtYXAgKi8KLQl7SFRfQkFTSUNfUkFURSwgMHgwMDAwODAwM30sCS8qIEJhc2ljIEhUIHJhdGUgc2V0ICwgMjBNLCBNQ1M9MywgTU0uIEZvcm1hdCBpcyB0aGUgc2FtZSBhcyBpbiBUWFdJLiAqLwotCXtNQUNfU1lTX0NUUkwsIDB4MDB9LAkvKiAweDEwMDQsICwgZGVmYXVsdCBEaXNhYmxlIFJYICovCi0Je1JYX0ZJTFRSX0NGRywgMHgxN2Y5N30sCS8qMHgxNDAwICAsIFJYIGZpbHRlciBjb250cm9sLCAqLwotCXtCS09GRl9TTE9UX0NGRywgMHgyMDl9LAkvKiBkZWZhdWx0IHNldCBzaG9ydCBzbG90IHRpbWUsIENDX0RFTEFZX1RJTUUgc2hvdWxkIGJlIDIgKi8KLQkvKntUWF9TV19DRkcwLCAgICAgICAgICAweDQwYTA2fSwgLy8gR2FyeSwyMDA2LTA4LTIzICovCi0Je1RYX1NXX0NGRzAsIDB4MH0sCS8qIEdhcnksMjAwOC0wNS0yMSBmb3IgQ1dDIHRlc3QgKi8KLQl7VFhfU1dfQ0ZHMSwgMHg4MDYwNn0sCS8qIEdhcnksMjAwNi0wOC0yMyAqLwotCXtUWF9MSU5LX0NGRywgMHgxMDIwfSwJLyogR2FyeSwyMDA2LTA4LTIzICovCi0JLyp7VFhfVElNRU9VVF9DRkcsICAgICAgMHgwMDE4MjA5MH0sICAgIC8vIENDSyBoYXMgc29tZSBwcm9ibGVtLiBTbyBpbmNyZWFzZSB0aW1pZW91dCB2YWx1ZS4gMjAwNi0xMC0wOS8vIE1BcnZlayBSVCAqLwotCXtUWF9USU1FT1VUX0NGRywgMHgwMDBhMjA5MH0sCS8qIENDSyBoYXMgc29tZSBwcm9ibGVtLiBTbyBpbmNyZWFzZSB0aW1pZW91dCB2YWx1ZS4gMjAwNi0xMC0wOS8vIE1BcnZlayBSVCAsIE1vZGlmeSBmb3IgMjg2MEUgLDIwMDctMDgtMDEgKi8KLQl7TUFYX0xFTl9DRkcsIE1BWF9BR0dSRUdBVElPTl9TSVpFIHwgMHgwMDAwMTAwMH0sCS8qIDB4MzAxOCwgTUFYIGZyYW1lIGxlbmd0aC4gTWF4IFBTRFUgPSAxNmtieXRlcy4gKi8KLQl7TEVEX0NGRywgMHg3ZjAzMWU0Nn0sCS8qIEdhcnksIDIwMDYtMDgtMjMgKi8KLQotCXtQQkZfTUFYX1BDTlQsIDB4MUYzRkJGOUZ9LAkvKjB4MUYzZjdmOWZ9LCAgICAgICAgICAvL0phbiwgMjAwNi8wNC8yMCAqLwotCi0Je1RYX1JUWV9DRkcsIDB4NDdkMDFmMGZ9LAkvKiBKYW4sIDIwMDYvMTEvMTYsIFNldCBUeFdJLT5BQ0sgPTAgaW4gUHJvYmUgUnNwIE1vZGlmeSBmb3IgMjg2MEUgLDIwMDctMDgtMDMgKi8KLQotCXtBVVRPX1JTUF9DRkcsIDB4MDAwMDAwMTN9LAkvKiBJbml0aWFsIEF1dG9fUmVzcG9uZGVyLCBiZWNhdXNlIFFBIHdpbGwgdHVybiBvZmYgQXV0by1SZXNwb25kZXIgKi8KLQl7Q0NLX1BST1RfQ0ZHLCAweDA1NzQwMDAzIC8qMHgwMTc0MDAwMyAqLyB9LAkvKiBJbml0aWFsIEF1dG9fUmVzcG9uZGVyLCBiZWNhdXNlIFFBIHdpbGwgdHVybiBvZmYgQXV0by1SZXNwb25kZXIuIEFuZCBSVFMgdGhyZXNob2xkIGlzIGVuYWJsZWQuICovCi0Je09GRE1fUFJPVF9DRkcsIDB4MDU3NDAwMDMgLyoweDAxNzQwMDAzICovIH0sCS8qIEluaXRpYWwgQXV0b19SZXNwb25kZXIsIGJlY2F1c2UgUUEgd2lsbCB0dXJuIG9mZiBBdXRvLVJlc3BvbmRlci4gQW5kIFJUUyB0aHJlc2hvbGQgaXMgZW5hYmxlZC4gKi8KLSNpZmRlZiBSVE1QX01BQ19VU0IKLQl7UEJGX0NGRywgMHhmNDAwMDZ9LAkvKiBPbmx5IGVuYWJsZSBRdWV1ZSAyICovCi0Je01NNDBfUFJPVF9DRkcsIDB4M0Y0NDA4NH0sCS8qIEluaXRpYWwgQXV0b19SZXNwb25kZXIsIGJlY2F1c2UgUUEgd2lsbCB0dXJuIG9mZiBBdXRvLVJlc3BvbmRlciAqLwotCXtXUERNQV9HTE9fQ0ZHLCAweDAwMDAwMDMwfSwKLSNlbmRpZiAvKiBSVE1QX01BQ19VU0IgLy8gKi8KLQl7R0YyMF9QUk9UX0NGRywgMHgwMTc0NDAwNH0sCS8qIHNldCAxOToxOCAtLT4gU2hvcnQgTkFWIGZvciBNSU1PIFBTICovCi0Je0dGNDBfUFJPVF9DRkcsIDB4MDNGNDQwODR9LAotCXtNTTIwX1BST1RfQ0ZHLCAweDAxNzQ0MDA0fSwKLSNpZmRlZiBSVE1QX01BQ19QQ0kKLQl7TU00MF9QUk9UX0NGRywgMHgwM0Y1NDA4NH0sCi0jZW5kaWYgLyogUlRNUF9NQUNfUENJIC8vICovCi0Je1RYT1BfQ1RSTF9DRkcsIDB4MDAwMDU4M2YsIC8qMHgwMDAwMjQzZiAqLy8qMHgwMDAwMjRiZiAqLyB9LAkvKkV4dGVuc2lvbiBjaGFubmVsIGJhY2tvZmYuICovCi0Je1RYX1JUU19DRkcsIDB4MDAwOTJiMjB9LAotCXtFWFBfQUNLX1RJTUUsIDB4MDAyNDAwY2F9LAkvKiBkZWZhdWx0IHZhbHVlICovCi0KLQl7VFhPUF9ITERSX0VULCAweDAwMDAwMDAyfSwKLQotCS8qIEplcnJ5IGNvbW1lbnRzIDIwMDgvMDEvMTY6IHdlIHVzZSBTSUZTID0gMTB1cyBpbiBDQ0sgZGVmYXVsdGx5LCBidXQgaXQgc2VlbXMgdGhhdCAxMHVzCi0JICAgaXMgdG9vIHNtYWxsIGZvciBJTlRFTCAyMjAwYmcgY2FyZCwgc28gaW4gTUJTUyBtb2RlLCB0aGUgZGVsdGEgdGltZSBiZXR3ZWVuIGJlYWNvbjAKLQkgICBhbmQgYmVhY29uMSBpcyBTSUZTICgxMHVzKSwgc28gaWYgSU5URUwgMjIwMGJnIGNhcmQgY29ubmVjdHMgdG8gQlNTMCwgdGhlIHBpbmcKLQkgICB3aWxsIGFsd2F5cyBsb3N0LiBTbyB3ZSBjaGFuZ2UgdGhlIFNJRlMgb2YgQ0NLIGZyb20gMTB1cyB0byAxNnVzLiAqLwotCXtYSUZTX1RJTUVfQ0ZHLCAweDMzYTQxMDEwfSwKLQl7UFdSX1BJTl9DRkcsIDB4MDAwMDAwMDN9LAkvKiBwYXRjaCBmb3IgMjg4MC1FICovCi19OwotCi1zdHJ1Y3QgcnRfcnRtcF9yZWdfcGFpciBTVEFNQUNSZWdUYWJsZVtdID0gewotCXtXTU1fQUlGU05fQ0ZHLCAweDAwMDAyMjczfSwKLQl7V01NX0NXTUlOX0NGRywgMHgwMDAwMjM0NH0sCi0Je1dNTV9DV01BWF9DRkcsIDB4MDAwMDM0YWF9LAotfTsKLQotI2RlZmluZQlOVU1fTUFDX1JFR19QQVJNUwkJKHNpemVvZihNQUNSZWdUYWJsZSkgLyBzaXplb2Yoc3RydWN0IHJ0X3J0bXBfcmVnX3BhaXIpKQotI2RlZmluZQlOVU1fU1RBX01BQ19SRUdfUEFSTVMJKHNpemVvZihTVEFNQUNSZWdUYWJsZSkgLyBzaXplb2Yoc3RydWN0IHJ0X3J0bXBfcmVnX3BhaXIpKQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQkJQWxsb2NhdGUgc3RydWN0IHJ0X3J0bXBfYWRhcHRlciBkYXRhIGJsb2NrIGFuZCBkbyBzb21lIGluaXRpYWxpemF0aW9uCi0KLQlBcmd1bWVudHM6Ci0JCUFkYXB0ZXIJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKLQotCVJldHVybiBWYWx1ZToKLQkJTkRJU19TVEFUVVNfU1VDQ0VTUwotCQlORElTX1NUQVRVU19GQUlMVVJFCi0KLQlJUlFMID0gUEFTU0lWRV9MRVZFTAotCi0JTm90ZToKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLWludCBSVE1QQWxsb2NBZGFwdGVyQmxvY2sodm9pZCAqaGFuZGxlLAotCQkJCSAgc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqICogcHBBZGFwdGVyKQotewotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZDsKLQlpbnQgU3RhdHVzOwotCWludCBpbmRleDsKLQl1OCAqcEJlYWNvbkJ1ZiA9IE5VTEw7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gUlRNUEFsbG9jQWRhcHRlckJsb2NrXG4iKSk7Ci0KLQkqcHBBZGFwdGVyID0gTlVMTDsKLQotCWRvIHsKLQkJLyogQWxsb2NhdGUgc3RydWN0IHJ0X3J0bXBfYWRhcHRlciBtZW1vcnkgYmxvY2sgKi8KLQkJcEJlYWNvbkJ1ZiA9IGttYWxsb2MoTUFYX0JFQUNPTl9TSVpFLCBNRU1fQUxMT0NfRkxBRyk7Ci0JCWlmIChwQmVhY29uQnVmID09IE5VTEwpIHsKLQkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7Ci0JCQlEQkdQUklOVF9FUlIoIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgLSBCZWFjb25CdWYhXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0JCU5kaXNaZXJvTWVtb3J5KHBCZWFjb25CdWYsIE1BWF9CRUFDT05fU0laRSk7Ci0KLQkJU3RhdHVzID0gQWRhcHRlckJsb2NrQWxsb2NhdGVNZW1vcnkoaGFuZGxlLCAodm9pZCAqKikgJiBwQWQpOwotCQlpZiAoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCURCR1BSSU5UX0VSUigiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSAtIEFEQVBURVJcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQkJcEFkLT5CZWFjb25CdWYgPSBwQmVhY29uQnVmOwotCQlEQkdQUklOVChSVF9ERUJVR19PRkYsCi0JCQkgKCI9PT0gcEFkID0gJXAsIHNpemUgPSAlZCA9PT1cbiIsIHBBZCwKLQkJCSAgKHUzMilzaXplb2Yoc3RydWN0IHJ0X3J0bXBfYWRhcHRlcikpKTsKLQotCQkvKiBJbml0IHNwaW4gbG9ja3MgKi8KLQkJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+TWdtdFJpbmdMb2NrKTsKLSNpZmRlZiBSVE1QX01BQ19QQ0kKLQkJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+UnhSaW5nTG9jayk7Ci0jaWZkZWYgUlQzMDkwCi0JCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPk1jdUNtZExvY2spOwotI2VuZGlmIC8qIFJUMzA5MCAvLyAqLwotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotCi0JCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE5VTV9PRl9UWF9SSU5HOyBpbmRleCsrKSB7Ci0JCQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5UeFN3UXVldWVMb2NrW2luZGV4XSk7Ci0JCQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5EZVF1ZXVlTG9ja1tpbmRleF0pOwotCQkJcEFkLT5EZVF1ZXVlUnVubmluZ1tpbmRleF0gPSBGQUxTRTsKLQkJfQotCi0JCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPmlycV9sb2NrKTsKLQotCX0gd2hpbGUgKEZBTFNFKTsKLQotCWlmICgoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpICYmIChwQmVhY29uQnVmKSkKLQkJa2ZyZWUocEJlYWNvbkJ1Zik7Ci0KLQkqcHBBZGFwdGVyID0gcEFkOwotCi0JREJHUFJJTlRfUyhTdGF0dXMsICgiPC0tIFJUTVBBbGxvY0FkYXB0ZXJCbG9jaywgU3RhdHVzPSV4XG4iLCBTdGF0dXMpKTsKLQlyZXR1cm4gU3RhdHVzOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQkJUmVhZCBpbml0aWFsIFR4IHBvd2VyIHBlciBNQ1MgYW5kIEJXIGZyb20gRUVQUk9NCi0KLQlBcmd1bWVudHM6Ci0JCUFkYXB0ZXIJCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCi0KLQlSZXR1cm4gVmFsdWU6Ci0JCU5vbmUKLQotCUlSUUwgPSBQQVNTSVZFX0xFVkVMCi0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBSVE1QUmVhZFR4UHdyUGVyUmF0ZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0JdW5zaWduZWQgbG9uZyBkYXRhLCBBZGF0YSwgR2RhdGE7Ci0JdTE2IGksIHZhbHVlLCB2YWx1ZTI7Ci0JaW50IEFwd3JkZWx0YSwgR3B3cmRlbHRhOwotCXU4IHQxLCB0MiwgdDMsIHQ0OwotCUJPT0xFQU4gYkFwd3JkZWx0YU1pbnVzID0gVFJVRSwgYkdwd3JkZWx0YU1pbnVzID0gVFJVRTsKLQotCS8qICovCi0JLyogR2V0IHBvd2VyIGRlbHRhIGZvciAyME1IeiBhbmQgNDBNSHouICovCi0JLyogKi8KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJUeHBvd2VyIHBlciBSYXRlXG4iKSk7Ci0JUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fVFhQT1dFUl9ERUxUQSwgdmFsdWUyKTsKLQlBcHdyZGVsdGEgPSAwOwotCUdwd3JkZWx0YSA9IDA7Ci0KLQlpZiAoKHZhbHVlMiAmIDB4ZmYpICE9IDB4ZmYpIHsKLQkJaWYgKCh2YWx1ZTIgJiAweDgwKSkKLQkJCUdwd3JkZWx0YSA9ICh2YWx1ZTIgJiAweGYpOwotCi0JCWlmICgodmFsdWUyICYgMHg0MCkpCi0JCQliR3B3cmRlbHRhTWludXMgPSBGQUxTRTsKLQkJZWxzZQotCQkJYkdwd3JkZWx0YU1pbnVzID0gVFJVRTsKLQl9Ci0JaWYgKCh2YWx1ZTIgJiAweGZmMDApICE9IDB4ZmYwMCkgewotCQlpZiAoKHZhbHVlMiAmIDB4ODAwMCkpCi0JCQlBcHdyZGVsdGEgPSAoKHZhbHVlMiAmIDB4ZjAwKSA+PiA4KTsKLQotCQlpZiAoKHZhbHVlMiAmIDB4NDAwMCkpCi0JCQliQXB3cmRlbHRhTWludXMgPSBGQUxTRTsKLQkJZWxzZQotCQkJYkFwd3JkZWx0YU1pbnVzID0gVFJVRTsKLQl9Ci0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIkdwd3JkZWx0YSA9ICV4LCBBcHdyZGVsdGEgPSAleCAuXG4iLCBHcHdyZGVsdGEsIEFwd3JkZWx0YSkpOwotCi0JLyogKi8KLQkvKiBHZXQgVHhwb3dlciBwZXIgTUNTIGZvciAyME1IeiBpbiAyLjRHLiAqLwotCS8qICovCi0JZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewotCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsCi0JCQkJICAgICBFRVBST01fVFhQT1dFUl9CWVJBVEVfMjBNSFpfMl80RyArIGkgKiA0LAotCQkJCSAgICAgdmFsdWUpOwotCQlkYXRhID0gdmFsdWU7Ci0JCWlmIChiQXB3cmRlbHRhTWludXMgPT0gRkFMU0UpIHsKLQkJCXQxID0gKHZhbHVlICYgMHhmKSArIChBcHdyZGVsdGEpOwotCQkJaWYgKHQxID4gMHhmKQotCQkJCXQxID0gMHhmOwotCQkJdDIgPSAoKHZhbHVlICYgMHhmMCkgPj4gNCkgKyAoQXB3cmRlbHRhKTsKLQkJCWlmICh0MiA+IDB4ZikKLQkJCQl0MiA9IDB4ZjsKLQkJCXQzID0gKCh2YWx1ZSAmIDB4ZjAwKSA+PiA4KSArIChBcHdyZGVsdGEpOwotCQkJaWYgKHQzID4gMHhmKQotCQkJCXQzID0gMHhmOwotCQkJdDQgPSAoKHZhbHVlICYgMHhmMDAwKSA+PiAxMikgKyAoQXB3cmRlbHRhKTsKLQkJCWlmICh0NCA+IDB4ZikKLQkJCQl0NCA9IDB4ZjsKLQkJfSBlbHNlIHsKLQkJCWlmICgodmFsdWUgJiAweGYpID4gQXB3cmRlbHRhKQotCQkJCXQxID0gKHZhbHVlICYgMHhmKSAtIChBcHdyZGVsdGEpOwotCQkJZWxzZQotCQkJCXQxID0gMDsKLQkJCWlmICgoKHZhbHVlICYgMHhmMCkgPj4gNCkgPiBBcHdyZGVsdGEpCi0JCQkJdDIgPSAoKHZhbHVlICYgMHhmMCkgPj4gNCkgLSAoQXB3cmRlbHRhKTsKLQkJCWVsc2UKLQkJCQl0MiA9IDA7Ci0JCQlpZiAoKCh2YWx1ZSAmIDB4ZjAwKSA+PiA4KSA+IEFwd3JkZWx0YSkKLQkJCQl0MyA9ICgodmFsdWUgJiAweGYwMCkgPj4gOCkgLSAoQXB3cmRlbHRhKTsKLQkJCWVsc2UKLQkJCQl0MyA9IDA7Ci0JCQlpZiAoKCh2YWx1ZSAmIDB4ZjAwMCkgPj4gMTIpID4gQXB3cmRlbHRhKQotCQkJCXQ0ID0gKCh2YWx1ZSAmIDB4ZjAwMCkgPj4gMTIpIC0gKEFwd3JkZWx0YSk7Ci0JCQllbHNlCi0JCQkJdDQgPSAwOwotCQl9Ci0JCUFkYXRhID0gdDEgKyAodDIgPDwgNCkgKyAodDMgPDwgOCkgKyAodDQgPDwgMTIpOwotCQlpZiAoYkdwd3JkZWx0YU1pbnVzID09IEZBTFNFKSB7Ci0JCQl0MSA9ICh2YWx1ZSAmIDB4ZikgKyAoR3B3cmRlbHRhKTsKLQkJCWlmICh0MSA+IDB4ZikKLQkJCQl0MSA9IDB4ZjsKLQkJCXQyID0gKCh2YWx1ZSAmIDB4ZjApID4+IDQpICsgKEdwd3JkZWx0YSk7Ci0JCQlpZiAodDIgPiAweGYpCi0JCQkJdDIgPSAweGY7Ci0JCQl0MyA9ICgodmFsdWUgJiAweGYwMCkgPj4gOCkgKyAoR3B3cmRlbHRhKTsKLQkJCWlmICh0MyA+IDB4ZikKLQkJCQl0MyA9IDB4ZjsKLQkJCXQ0ID0gKCh2YWx1ZSAmIDB4ZjAwMCkgPj4gMTIpICsgKEdwd3JkZWx0YSk7Ci0JCQlpZiAodDQgPiAweGYpCi0JCQkJdDQgPSAweGY7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKHZhbHVlICYgMHhmKSA+IEdwd3JkZWx0YSkKLQkJCQl0MSA9ICh2YWx1ZSAmIDB4ZikgLSAoR3B3cmRlbHRhKTsKLQkJCWVsc2UKLQkJCQl0MSA9IDA7Ci0JCQlpZiAoKCh2YWx1ZSAmIDB4ZjApID4+IDQpID4gR3B3cmRlbHRhKQotCQkJCXQyID0gKCh2YWx1ZSAmIDB4ZjApID4+IDQpIC0gKEdwd3JkZWx0YSk7Ci0JCQllbHNlCi0JCQkJdDIgPSAwOwotCQkJaWYgKCgodmFsdWUgJiAweGYwMCkgPj4gOCkgPiBHcHdyZGVsdGEpCi0JCQkJdDMgPSAoKHZhbHVlICYgMHhmMDApID4+IDgpIC0gKEdwd3JkZWx0YSk7Ci0JCQllbHNlCi0JCQkJdDMgPSAwOwotCQkJaWYgKCgodmFsdWUgJiAweGYwMDApID4+IDEyKSA+IEdwd3JkZWx0YSkKLQkJCQl0NCA9ICgodmFsdWUgJiAweGYwMDApID4+IDEyKSAtIChHcHdyZGVsdGEpOwotCQkJZWxzZQotCQkJCXQ0ID0gMDsKLQkJfQotCQlHZGF0YSA9IHQxICsgKHQyIDw8IDQpICsgKHQzIDw8IDgpICsgKHQ0IDw8IDEyKTsKLQotCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsCi0JCQkJICAgICBFRVBST01fVFhQT1dFUl9CWVJBVEVfMjBNSFpfMl80RyArIGkgKiA0ICsKLQkJCQkgICAgIDIsIHZhbHVlKTsKLQkJaWYgKGJBcHdyZGVsdGFNaW51cyA9PSBGQUxTRSkgewotCQkJdDEgPSAodmFsdWUgJiAweGYpICsgKEFwd3JkZWx0YSk7Ci0JCQlpZiAodDEgPiAweGYpCi0JCQkJdDEgPSAweGY7Ci0JCQl0MiA9ICgodmFsdWUgJiAweGYwKSA+PiA0KSArIChBcHdyZGVsdGEpOwotCQkJaWYgKHQyID4gMHhmKQotCQkJCXQyID0gMHhmOwotCQkJdDMgPSAoKHZhbHVlICYgMHhmMDApID4+IDgpICsgKEFwd3JkZWx0YSk7Ci0JCQlpZiAodDMgPiAweGYpCi0JCQkJdDMgPSAweGY7Ci0JCQl0NCA9ICgodmFsdWUgJiAweGYwMDApID4+IDEyKSArIChBcHdyZGVsdGEpOwotCQkJaWYgKHQ0ID4gMHhmKQotCQkJCXQ0ID0gMHhmOwotCQl9IGVsc2UgewotCQkJaWYgKCh2YWx1ZSAmIDB4ZikgPiBBcHdyZGVsdGEpCi0JCQkJdDEgPSAodmFsdWUgJiAweGYpIC0gKEFwd3JkZWx0YSk7Ci0JCQllbHNlCi0JCQkJdDEgPSAwOwotCQkJaWYgKCgodmFsdWUgJiAweGYwKSA+PiA0KSA+IEFwd3JkZWx0YSkKLQkJCQl0MiA9ICgodmFsdWUgJiAweGYwKSA+PiA0KSAtIChBcHdyZGVsdGEpOwotCQkJZWxzZQotCQkJCXQyID0gMDsKLQkJCWlmICgoKHZhbHVlICYgMHhmMDApID4+IDgpID4gQXB3cmRlbHRhKQotCQkJCXQzID0gKCh2YWx1ZSAmIDB4ZjAwKSA+PiA4KSAtIChBcHdyZGVsdGEpOwotCQkJZWxzZQotCQkJCXQzID0gMDsKLQkJCWlmICgoKHZhbHVlICYgMHhmMDAwKSA+PiAxMikgPiBBcHdyZGVsdGEpCi0JCQkJdDQgPSAoKHZhbHVlICYgMHhmMDAwKSA+PiAxMikgLSAoQXB3cmRlbHRhKTsKLQkJCWVsc2UKLQkJCQl0NCA9IDA7Ci0JCX0KLQkJQWRhdGEgfD0gKCh0MSA8PCAxNikgKyAodDIgPDwgMjApICsgKHQzIDw8IDI0KSArICh0NCA8PCAyOCkpOwotCQlpZiAoYkdwd3JkZWx0YU1pbnVzID09IEZBTFNFKSB7Ci0JCQl0MSA9ICh2YWx1ZSAmIDB4ZikgKyAoR3B3cmRlbHRhKTsKLQkJCWlmICh0MSA+IDB4ZikKLQkJCQl0MSA9IDB4ZjsKLQkJCXQyID0gKCh2YWx1ZSAmIDB4ZjApID4+IDQpICsgKEdwd3JkZWx0YSk7Ci0JCQlpZiAodDIgPiAweGYpCi0JCQkJdDIgPSAweGY7Ci0JCQl0MyA9ICgodmFsdWUgJiAweGYwMCkgPj4gOCkgKyAoR3B3cmRlbHRhKTsKLQkJCWlmICh0MyA+IDB4ZikKLQkJCQl0MyA9IDB4ZjsKLQkJCXQ0ID0gKCh2YWx1ZSAmIDB4ZjAwMCkgPj4gMTIpICsgKEdwd3JkZWx0YSk7Ci0JCQlpZiAodDQgPiAweGYpCi0JCQkJdDQgPSAweGY7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKHZhbHVlICYgMHhmKSA+IEdwd3JkZWx0YSkKLQkJCQl0MSA9ICh2YWx1ZSAmIDB4ZikgLSAoR3B3cmRlbHRhKTsKLQkJCWVsc2UKLQkJCQl0MSA9IDA7Ci0JCQlpZiAoKCh2YWx1ZSAmIDB4ZjApID4+IDQpID4gR3B3cmRlbHRhKQotCQkJCXQyID0gKCh2YWx1ZSAmIDB4ZjApID4+IDQpIC0gKEdwd3JkZWx0YSk7Ci0JCQllbHNlCi0JCQkJdDIgPSAwOwotCQkJaWYgKCgodmFsdWUgJiAweGYwMCkgPj4gOCkgPiBHcHdyZGVsdGEpCi0JCQkJdDMgPSAoKHZhbHVlICYgMHhmMDApID4+IDgpIC0gKEdwd3JkZWx0YSk7Ci0JCQllbHNlCi0JCQkJdDMgPSAwOwotCQkJaWYgKCgodmFsdWUgJiAweGYwMDApID4+IDEyKSA+IEdwd3JkZWx0YSkKLQkJCQl0NCA9ICgodmFsdWUgJiAweGYwMDApID4+IDEyKSAtIChHcHdyZGVsdGEpOwotCQkJZWxzZQotCQkJCXQ0ID0gMDsKLQkJfQotCQlHZGF0YSB8PSAoKHQxIDw8IDE2KSArICh0MiA8PCAyMCkgKyAodDMgPDwgMjQpICsgKHQ0IDw8IDI4KSk7Ci0JCWRhdGEgfD0gKHZhbHVlIDw8IDE2KTsKLQotCQkvKiBGb3IgMjBNLzQwTSBQb3dlciBEZWx0YSBpc3N1ZSAqLwotCQlwQWQtPlR4MjBNUHdyQ2ZnQUJhbmRbaV0gPSBkYXRhOwotCQlwQWQtPlR4MjBNUHdyQ2ZnR0JhbmRbaV0gPSBkYXRhOwotCQlwQWQtPlR4NDBNUHdyQ2ZnQUJhbmRbaV0gPSBBZGF0YTsKLQkJcEFkLT5UeDQwTVB3ckNmZ0dCYW5kW2ldID0gR2RhdGE7Ci0KLQkJaWYgKGRhdGEgIT0gMHhmZmZmZmZmZikKLQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX1BXUl9DRkdfMCArIGkgKiA0LCBkYXRhKTsKLQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLAotCQkJICAgICAoIjIwTUh6IEJXLCAyLjRHIGJhbmQtJWx4LCAgQWRhdGEgPSAlbHgsICBHZGF0YSA9ICVseCBcbiIsCi0JCQkgICAgICBkYXRhLCBBZGF0YSwgR2RhdGEpKTsKLQl9Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCQlSZWFkIGluaXRpYWwgY2hhbm5lbCBwb3dlciBwYXJhbWV0ZXJzIGZyb20gRUVQUk9NCi0KLQlBcmd1bWVudHM6Ci0JCUFkYXB0ZXIJCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCi0KLQlSZXR1cm4gVmFsdWU6Ci0JCU5vbmUKLQotCUlSUUwgPSBQQVNTSVZFX0xFVkVMCi0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBSVE1QUmVhZENoYW5uZWxQd3Ioc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCXU4IGksIGNob2Zmc2V0OwotCUVFUFJPTV9UWF9QV1JfU1RSVUMgUG93ZXI7Ci0JRUVQUk9NX1RYX1BXUl9TVFJVQyBQb3dlcjI7Ci0KLQkvKiBSZWFkIFR4IHBvd2VyIHZhbHVlIGZvciBhbGwgY2hhbm5lbHMgKi8KLQkvKiBWYWx1ZSBmcm9tIDEgLSAweDdmLiBEZWZhdWx0IHZhbHVlIGlzIDI0LiAqLwotCS8qIFBvd2VyIHZhbHVlIDogMi40RyAweDAwICgwKSB+IDB4MUYgKDMxKSAqLwotCS8qICAgICAgICAgICAgIDogNS41RyAweEY5ICgtNykgfiAweDBGICgxNSkgKi8KLQotCS8qIDAuIDExYi9nLCBjaDEgLSBjaCAxNCAqLwotCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHsKLQkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fR19UWF9QV1JfT0ZGU0VUICsgaSAqIDIsCi0JCQkJICAgICBQb3dlci53b3JkKTsKLQkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fR19UWDJfUFdSX09GRlNFVCArIGkgKiAyLAotCQkJCSAgICAgUG93ZXIyLndvcmQpOwotCQlwQWQtPlR4UG93ZXJbaSAqIDJdLkNoYW5uZWwgPSBpICogMiArIDE7Ci0JCXBBZC0+VHhQb3dlcltpICogMiArIDFdLkNoYW5uZWwgPSBpICogMiArIDI7Ci0KLQkJaWYgKChQb3dlci5maWVsZC5CeXRlMCA+IDMxKSB8fCAoUG93ZXIuZmllbGQuQnl0ZTAgPCAwKSkKLQkJCXBBZC0+VHhQb3dlcltpICogMl0uUG93ZXIgPSBERUZBVUxUX1JGX1RYX1BPV0VSOwotCQllbHNlCi0JCQlwQWQtPlR4UG93ZXJbaSAqIDJdLlBvd2VyID0gUG93ZXIuZmllbGQuQnl0ZTA7Ci0KLQkJaWYgKChQb3dlci5maWVsZC5CeXRlMSA+IDMxKSB8fCAoUG93ZXIuZmllbGQuQnl0ZTEgPCAwKSkKLQkJCXBBZC0+VHhQb3dlcltpICogMiArIDFdLlBvd2VyID0gREVGQVVMVF9SRl9UWF9QT1dFUjsKLQkJZWxzZQotCQkJcEFkLT5UeFBvd2VyW2kgKiAyICsgMV0uUG93ZXIgPSBQb3dlci5maWVsZC5CeXRlMTsKLQotCQlpZiAoKFBvd2VyMi5maWVsZC5CeXRlMCA+IDMxKSB8fCAoUG93ZXIyLmZpZWxkLkJ5dGUwIDwgMCkpCi0JCQlwQWQtPlR4UG93ZXJbaSAqIDJdLlBvd2VyMiA9IERFRkFVTFRfUkZfVFhfUE9XRVI7Ci0JCWVsc2UKLQkJCXBBZC0+VHhQb3dlcltpICogMl0uUG93ZXIyID0gUG93ZXIyLmZpZWxkLkJ5dGUwOwotCi0JCWlmICgoUG93ZXIyLmZpZWxkLkJ5dGUxID4gMzEpIHx8IChQb3dlcjIuZmllbGQuQnl0ZTEgPCAwKSkKLQkJCXBBZC0+VHhQb3dlcltpICogMiArIDFdLlBvd2VyMiA9IERFRkFVTFRfUkZfVFhfUE9XRVI7Ci0JCWVsc2UKLQkJCXBBZC0+VHhQb3dlcltpICogMiArIDFdLlBvd2VyMiA9IFBvd2VyMi5maWVsZC5CeXRlMTsKLQl9Ci0KLQkvKiAxLiBVLU5JSSBsb3dlci9taWRkbGUgYmFuZDogMzYsIDM4LCA0MDsgNDQsIDQ2LCA0ODsgNTIsIDU0LCA1NjsgNjAsIDYyLCA2NCAoaW5jbHVkaW5nIGNlbnRyYWwgZnJlcXVlbmN5IGluIEJXIDQwTUh6KSAqLwotCS8qIDEuMSBGaWxsIHVwIGNoYW5uZWwgKi8KLQljaG9mZnNldCA9IDE0OwotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAwXS5DaGFubmVsID0gMzYgKyBpICogOCArIDA7Ci0JCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMF0uUG93ZXIgPSBERUZBVUxUX1JGX1RYX1BPV0VSOwotCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDBdLlBvd2VyMiA9IERFRkFVTFRfUkZfVFhfUE9XRVI7Ci0KLQkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAxXS5DaGFubmVsID0gMzYgKyBpICogOCArIDI7Ci0JCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMV0uUG93ZXIgPSBERUZBVUxUX1JGX1RYX1BPV0VSOwotCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDFdLlBvd2VyMiA9IERFRkFVTFRfUkZfVFhfUE9XRVI7Ci0KLQkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAyXS5DaGFubmVsID0gMzYgKyBpICogOCArIDQ7Ci0JCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMl0uUG93ZXIgPSBERUZBVUxUX1JGX1RYX1BPV0VSOwotCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDJdLlBvd2VyMiA9IERFRkFVTFRfUkZfVFhfUE9XRVI7Ci0JfQotCi0JLyogMS4yIEZpbGwgdXAgcG93ZXIgKi8KLQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7Ci0JCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX0FfVFhfUFdSX09GRlNFVCArIGkgKiAyLAotCQkJCSAgICAgUG93ZXIud29yZCk7Ci0JCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX0FfVFgyX1BXUl9PRkZTRVQgKyBpICogMiwKLQkJCQkgICAgIFBvd2VyMi53b3JkKTsKLQotCQlpZiAoKFBvd2VyLmZpZWxkLkJ5dGUwIDwgMTYpICYmIChQb3dlci5maWVsZC5CeXRlMCA+PSAtNykpCi0JCQlwQWQtPlR4UG93ZXJbaSAqIDIgKyBjaG9mZnNldCArIDBdLlBvd2VyID0KLQkJCSAgICBQb3dlci5maWVsZC5CeXRlMDsKLQotCQlpZiAoKFBvd2VyLmZpZWxkLkJ5dGUxIDwgMTYpICYmIChQb3dlci5maWVsZC5CeXRlMSA+PSAtNykpCi0JCQlwQWQtPlR4UG93ZXJbaSAqIDIgKyBjaG9mZnNldCArIDFdLlBvd2VyID0KLQkJCSAgICBQb3dlci5maWVsZC5CeXRlMTsKLQotCQlpZiAoKFBvd2VyMi5maWVsZC5CeXRlMCA8IDE2KSAmJiAoUG93ZXIyLmZpZWxkLkJ5dGUwID49IC03KSkKLQkJCXBBZC0+VHhQb3dlcltpICogMiArIGNob2Zmc2V0ICsgMF0uUG93ZXIyID0KLQkJCSAgICBQb3dlcjIuZmllbGQuQnl0ZTA7Ci0KLQkJaWYgKChQb3dlcjIuZmllbGQuQnl0ZTEgPCAxNikgJiYgKFBvd2VyMi5maWVsZC5CeXRlMSA+PSAtNykpCi0JCQlwQWQtPlR4UG93ZXJbaSAqIDIgKyBjaG9mZnNldCArIDFdLlBvd2VyMiA9Ci0JCQkgICAgUG93ZXIyLmZpZWxkLkJ5dGUxOwotCX0KLQotCS8qIDIuIEhpcHBlckxBTiAyIDEwMCwgMTAyICwxMDQ7IDEwOCwgMTEwLCAxMTI7IDExNiwgMTE4LCAxMjA7IDEyNCwgMTI2LCAxMjg7IDEzMiwgMTM0LCAxMzY7IDE0MCAoaW5jbHVkaW5nIGNlbnRyYWwgZnJlcXVlbmN5IGluIEJXIDQwTUh6KSAqLwotCS8qIDIuMSBGaWxsIHVwIGNoYW5uZWwgKi8KLQljaG9mZnNldCA9IDE0ICsgMTI7Ci0JZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewotCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDBdLkNoYW5uZWwgPSAxMDAgKyBpICogOCArIDA7Ci0JCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMF0uUG93ZXIgPSBERUZBVUxUX1JGX1RYX1BPV0VSOwotCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDBdLlBvd2VyMiA9IERFRkFVTFRfUkZfVFhfUE9XRVI7Ci0KLQkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAxXS5DaGFubmVsID0gMTAwICsgaSAqIDggKyAyOwotCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDFdLlBvd2VyID0gREVGQVVMVF9SRl9UWF9QT1dFUjsKLQkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAxXS5Qb3dlcjIgPSBERUZBVUxUX1JGX1RYX1BPV0VSOwotCi0JCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMl0uQ2hhbm5lbCA9IDEwMCArIGkgKiA4ICsgNDsKLQkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAyXS5Qb3dlciA9IERFRkFVTFRfUkZfVFhfUE9XRVI7Ci0JCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMl0uUG93ZXIyID0gREVGQVVMVF9SRl9UWF9QT1dFUjsKLQl9Ci0JcEFkLT5UeFBvd2VyWzMgKiA1ICsgY2hvZmZzZXQgKyAwXS5DaGFubmVsID0gMTQwOwotCXBBZC0+VHhQb3dlclszICogNSArIGNob2Zmc2V0ICsgMF0uUG93ZXIgPSBERUZBVUxUX1JGX1RYX1BPV0VSOwotCXBBZC0+VHhQb3dlclszICogNSArIGNob2Zmc2V0ICsgMF0uUG93ZXIyID0gREVGQVVMVF9SRl9UWF9QT1dFUjsKLQotCS8qIDIuMiBGaWxsIHVwIHBvd2VyICovCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsCi0JCQkJICAgICBFRVBST01fQV9UWF9QV1JfT0ZGU0VUICsgKGNob2Zmc2V0IC0gMTQpICsKLQkJCQkgICAgIGkgKiAyLCBQb3dlci53b3JkKTsKLQkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLAotCQkJCSAgICAgRUVQUk9NX0FfVFgyX1BXUl9PRkZTRVQgKyAoY2hvZmZzZXQgLSAxNCkgKwotCQkJCSAgICAgaSAqIDIsIFBvd2VyMi53b3JkKTsKLQotCQlpZiAoKFBvd2VyLmZpZWxkLkJ5dGUwIDwgMTYpICYmIChQb3dlci5maWVsZC5CeXRlMCA+PSAtNykpCi0JCQlwQWQtPlR4UG93ZXJbaSAqIDIgKyBjaG9mZnNldCArIDBdLlBvd2VyID0KLQkJCSAgICBQb3dlci5maWVsZC5CeXRlMDsKLQotCQlpZiAoKFBvd2VyLmZpZWxkLkJ5dGUxIDwgMTYpICYmIChQb3dlci5maWVsZC5CeXRlMSA+PSAtNykpCi0JCQlwQWQtPlR4UG93ZXJbaSAqIDIgKyBjaG9mZnNldCArIDFdLlBvd2VyID0KLQkJCSAgICBQb3dlci5maWVsZC5CeXRlMTsKLQotCQlpZiAoKFBvd2VyMi5maWVsZC5CeXRlMCA8IDE2KSAmJiAoUG93ZXIyLmZpZWxkLkJ5dGUwID49IC03KSkKLQkJCXBBZC0+VHhQb3dlcltpICogMiArIGNob2Zmc2V0ICsgMF0uUG93ZXIyID0KLQkJCSAgICBQb3dlcjIuZmllbGQuQnl0ZTA7Ci0KLQkJaWYgKChQb3dlcjIuZmllbGQuQnl0ZTEgPCAxNikgJiYgKFBvd2VyMi5maWVsZC5CeXRlMSA+PSAtNykpCi0JCQlwQWQtPlR4UG93ZXJbaSAqIDIgKyBjaG9mZnNldCArIDFdLlBvd2VyMiA9Ci0JCQkgICAgUG93ZXIyLmZpZWxkLkJ5dGUxOwotCX0KLQotCS8qIDMuIFUtTklJIHVwcGVyIGJhbmQ6IDE0OSwgMTUxLCAxNTM7IDE1NywgMTU5LCAxNjE7IDE2NSwgMTY3LCAxNjk7IDE3MSwgMTczIChpbmNsdWRpbmcgY2VudHJhbCBmcmVxdWVuY3kgaW4gQlcgNDBNSHopICovCi0JLyogMy4xIEZpbGwgdXAgY2hhbm5lbCAqLwotCWNob2Zmc2V0ID0gMTQgKyAxMiArIDE2OwotCS8qZm9yIChpID0gMDsgaSA8IDI7IGkrKykgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMF0uQ2hhbm5lbCA9IDE0OSArIGkgKiA4ICsgMDsKLQkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAwXS5Qb3dlciA9IERFRkFVTFRfUkZfVFhfUE9XRVI7Ci0JCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMF0uUG93ZXIyID0gREVGQVVMVF9SRl9UWF9QT1dFUjsKLQotCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDFdLkNoYW5uZWwgPSAxNDkgKyBpICogOCArIDI7Ci0JCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMV0uUG93ZXIgPSBERUZBVUxUX1JGX1RYX1BPV0VSOwotCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDFdLlBvd2VyMiA9IERFRkFVTFRfUkZfVFhfUE9XRVI7Ci0KLQkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAyXS5DaGFubmVsID0gMTQ5ICsgaSAqIDggKyA0OwotCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDJdLlBvd2VyID0gREVGQVVMVF9SRl9UWF9QT1dFUjsKLQkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAyXS5Qb3dlcjIgPSBERUZBVUxUX1JGX1RYX1BPV0VSOwotCX0KLQlwQWQtPlR4UG93ZXJbMyAqIDMgKyBjaG9mZnNldCArIDBdLkNoYW5uZWwgPSAxNzE7Ci0JcEFkLT5UeFBvd2VyWzMgKiAzICsgY2hvZmZzZXQgKyAwXS5Qb3dlciA9IERFRkFVTFRfUkZfVFhfUE9XRVI7Ci0JcEFkLT5UeFBvd2VyWzMgKiAzICsgY2hvZmZzZXQgKyAwXS5Qb3dlcjIgPSBERUZBVUxUX1JGX1RYX1BPV0VSOwotCi0JcEFkLT5UeFBvd2VyWzMgKiAzICsgY2hvZmZzZXQgKyAxXS5DaGFubmVsID0gMTczOwotCXBBZC0+VHhQb3dlclszICogMyArIGNob2Zmc2V0ICsgMV0uUG93ZXIgPSBERUZBVUxUX1JGX1RYX1BPV0VSOwotCXBBZC0+VHhQb3dlclszICogMyArIGNob2Zmc2V0ICsgMV0uUG93ZXIyID0gREVGQVVMVF9SRl9UWF9QT1dFUjsKLQotCS8qIDMuMiBGaWxsIHVwIHBvd2VyICovCi0JLypmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSAqLwotCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKLQkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLAotCQkJCSAgICAgRUVQUk9NX0FfVFhfUFdSX09GRlNFVCArIChjaG9mZnNldCAtIDE0KSArCi0JCQkJICAgICBpICogMiwgUG93ZXIud29yZCk7Ci0JCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwKLQkJCQkgICAgIEVFUFJPTV9BX1RYMl9QV1JfT0ZGU0VUICsgKGNob2Zmc2V0IC0gMTQpICsKLQkJCQkgICAgIGkgKiAyLCBQb3dlcjIud29yZCk7Ci0KLQkJaWYgKChQb3dlci5maWVsZC5CeXRlMCA8IDE2KSAmJiAoUG93ZXIuZmllbGQuQnl0ZTAgPj0gLTcpKQotCQkJcEFkLT5UeFBvd2VyW2kgKiAyICsgY2hvZmZzZXQgKyAwXS5Qb3dlciA9Ci0JCQkgICAgUG93ZXIuZmllbGQuQnl0ZTA7Ci0KLQkJaWYgKChQb3dlci5maWVsZC5CeXRlMSA8IDE2KSAmJiAoUG93ZXIuZmllbGQuQnl0ZTEgPj0gLTcpKQotCQkJcEFkLT5UeFBvd2VyW2kgKiAyICsgY2hvZmZzZXQgKyAxXS5Qb3dlciA9Ci0JCQkgICAgUG93ZXIuZmllbGQuQnl0ZTE7Ci0KLQkJaWYgKChQb3dlcjIuZmllbGQuQnl0ZTAgPCAxNikgJiYgKFBvd2VyMi5maWVsZC5CeXRlMCA+PSAtNykpCi0JCQlwQWQtPlR4UG93ZXJbaSAqIDIgKyBjaG9mZnNldCArIDBdLlBvd2VyMiA9Ci0JCQkgICAgUG93ZXIyLmZpZWxkLkJ5dGUwOwotCi0JCWlmICgoUG93ZXIyLmZpZWxkLkJ5dGUxIDwgMTYpICYmIChQb3dlcjIuZmllbGQuQnl0ZTEgPj0gLTcpKQotCQkJcEFkLT5UeFBvd2VyW2kgKiAyICsgY2hvZmZzZXQgKyAxXS5Qb3dlcjIgPQotCQkJICAgIFBvd2VyMi5maWVsZC5CeXRlMTsKLQl9Ci0KLQkvKiA0LiBQcmludCBhbmQgRGVidWcgKi8KLQkvKmNob2Zmc2V0ID0gMTQgKyAxMiArIDE2ICsgNzsgKi8KLQljaG9mZnNldCA9IDE0ICsgMTIgKyAxNiArIDExOwotCi19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCQlSZWFkIHRoZSBmb2xsb3dpbmcgZnJvbSB0aGUgcmVnaXN0cnkKLQkJMS4gQWxsIHRoZSBwYXJhbWV0ZXJzCi0JCTIuIE5ldHdvcmtBZGRyZXMKLQotCUFyZ3VtZW50czoKLQkJQWRhcHRlcgkJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKLQkJV3JhcHBlckNvbmZpZ3VyYXRpb25Db250ZXh0CUZvciB1c2UgYnkgTmRpc09wZW5Db25maWd1cmF0aW9uCi0KLQlSZXR1cm4gVmFsdWU6Ci0JCU5ESVNfU1RBVFVTX1NVQ0NFU1MKLQkJTkRJU19TVEFUVVNfRkFJTFVSRQotCQlORElTX1NUQVRVU19SRVNPVVJDRVMKLQotCUlSUUwgPSBQQVNTSVZFX0xFVkVMCi0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotaW50IE5JQ1JlYWRSZWdQYXJhbWV0ZXJzKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkgdm9pZCAqV3JhcHBlckNvbmZpZ3VyYXRpb25Db250ZXh0KQotewotCWludCBTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOwotCURCR1BSSU5UX1MoU3RhdHVzLCAoIjwtLSBOSUNSZWFkUmVnUGFyYW1ldGVycywgU3RhdHVzPSV4XG4iLCBTdGF0dXMpKTsKLQlyZXR1cm4gU3RhdHVzOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQkJUmVhZCBpbml0aWFsIHBhcmFtZXRlcnMgZnJvbSBFRVBST00KLQotCUFyZ3VtZW50czoKLQkJQWRhcHRlcgkJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKLQotCVJldHVybiBWYWx1ZToKLQkJTm9uZQotCi0JSVJRTCA9IFBBU1NJVkVfTEVWRUwKLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIE5JQ1JlYWRFRVBST01QYXJhbWV0ZXJzKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggKm1hY19hZGRyKQotewotCXUzMiBkYXRhID0gMDsKLQl1MTYgaSwgdmFsdWUsIHZhbHVlMjsKLQl1OCBUbXBQaHk7Ci0JRUVQUk9NX1RYX1BXUl9TVFJVQyBQb3dlcjsKLQlFRVBST01fVkVSU0lPTl9TVFJVQyBWZXJzaW9uOwotCUVFUFJPTV9BTlRFTk5BX1NUUlVDIEFudGVubmE7Ci0JRUVQUk9NX05JQ19DT05GSUcyX1NUUlVDIE5pY0NvbmZpZzI7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gTklDUmVhZEVFUFJPTVBhcmFtZXRlcnNcbiIpKTsKLQotCWlmIChwQWQtPmNoaXBPcHMuZWVpbml0KQotCQlwQWQtPmNoaXBPcHMuZWVpbml0KHBBZCk7Ci0KLQkvKiBJbml0IEVFUFJPTSBBZGRyZXNzIE51bWJlciwgYmVmb3JlIGFjY2VzcyBFRVBST007IGlmIDkzYzQ2LCBFRVBST01BZGRyZXNzTnVtPTYsIGVsc2UgaWYgOTNjNjYsIEVFUFJPTUFkZHJlc3NOdW09OCAqLwotCVJUTVBfSU9fUkVBRDMyKHBBZCwgRTJQUk9NX0NTUiwgJmRhdGEpOwotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPiBFMlBST01fQ1NSID0gMHgleFxuIiwgZGF0YSkpOwotCi0JaWYgKChkYXRhICYgMHgzMCkgPT0gMCkKLQkJcEFkLT5FRVBST01BZGRyZXNzTnVtID0gNjsJLyogOTNDNDYgKi8KLQllbHNlIGlmICgoZGF0YSAmIDB4MzApID09IDB4MTApCi0JCXBBZC0+RUVQUk9NQWRkcmVzc051bSA9IDg7CS8qIDkzQzY2ICovCi0JZWxzZQotCQlwQWQtPkVFUFJPTUFkZHJlc3NOdW0gPSA4OwkvKiA5M0M4NiAqLwotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCItLT4gRUVQUk9NQWRkcmVzc051bSA9ICVkXG4iLCBwQWQtPkVFUFJPTUFkZHJlc3NOdW0pKTsKLQotCS8qIFJUMjg2MCBNQUMgbm8gbG9uZ2VyIGF1dG8gbG9hZCBNQUMgYWRkcmVzcyBmcm9tIEUyUFJPTS4gRHJpdmVyIGhhcyB0byBpbml0aWFsaXplICovCi0JLyogTUFDIGFkZHJlc3MgcmVnaXN0ZXJzIGFjY29yZGluZyB0byBFMlBST00gc2V0dGluZyAqLwotCWlmIChtYWNfYWRkciA9PSBOVUxMIHx8Ci0JICAgIHN0cmxlbigoY2hhciAqKW1hY19hZGRyKSAhPSAxNyB8fAotCSAgICBtYWNfYWRkclsyXSAhPSAnOicgfHwgbWFjX2FkZHJbNV0gIT0gJzonIHx8IG1hY19hZGRyWzhdICE9ICc6JyB8fAotCSAgICBtYWNfYWRkclsxMV0gIT0gJzonIHx8IG1hY19hZGRyWzE0XSAhPSAnOicpIHsKLQkJdTE2IEFkZHIwMSwgQWRkcjIzLCBBZGRyNDU7Ci0KLQkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAweDA0LCBBZGRyMDEpOwotCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIDB4MDYsIEFkZHIyMyk7Ci0JCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgMHgwOCwgQWRkcjQ1KTsKLQotCQlwQWQtPlBlcm1hbmVudEFkZHJlc3NbMF0gPSAodTgpKEFkZHIwMSAmIDB4ZmYpOwotCQlwQWQtPlBlcm1hbmVudEFkZHJlc3NbMV0gPSAodTgpKEFkZHIwMSA+PiA4KTsKLQkJcEFkLT5QZXJtYW5lbnRBZGRyZXNzWzJdID0gKHU4KShBZGRyMjMgJiAweGZmKTsKLQkJcEFkLT5QZXJtYW5lbnRBZGRyZXNzWzNdID0gKHU4KShBZGRyMjMgPj4gOCk7Ci0JCXBBZC0+UGVybWFuZW50QWRkcmVzc1s0XSA9ICh1OCkoQWRkcjQ1ICYgMHhmZik7Ci0JCXBBZC0+UGVybWFuZW50QWRkcmVzc1s1XSA9ICh1OCkoQWRkcjQ1ID4+IDgpOwotCi0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiSW5pdGlhbGl6ZSBNQUMgQWRkcmVzcyBmcm9tIEUyUFJPTSBcbiIpKTsKLQl9IGVsc2UgewotCQlpbnQgajsKLQkJY2hhciAqbWFjcHRyOwotCi0JCW1hY3B0ciA9IChjaGFyICopbWFjX2FkZHI7Ci0KLQkJZm9yIChqID0gMDsgaiA8IE1BQ19BRERSX0xFTjsgaisrKSB7Ci0JCQlBdG9IKG1hY3B0ciwgJnBBZC0+UGVybWFuZW50QWRkcmVzc1tqXSwgMSk7Ci0JCQltYWNwdHIgPSBtYWNwdHIgKyAzOwotCQl9Ci0KLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJJbml0aWFsaXplIE1BQyBBZGRyZXNzIGZyb20gbW9kdWxlIHBhcmFtZXRlciBcbiIpKTsKLQl9Ci0KLQl7Ci0JCS8qbW9yZSBjb252ZW5pbmV0IHRvIHRlc3QgbWJzc2lkLCBzbyBhcCdzIGJzc2lkICYweGYxICovCi0JCWlmIChwQWQtPlBlcm1hbmVudEFkZHJlc3NbMF0gPT0gMHhmZikKLQkJCXBBZC0+UGVybWFuZW50QWRkcmVzc1swXSA9IFJhbmRvbUJ5dGUocEFkKSAmIDB4Zjg7Ci0KLQkJLyppZiAocEFkLT5QZXJtYW5lbnRBZGRyZXNzWzVdID09IDB4ZmYpICovCi0JCS8qICAgICAgcEFkLT5QZXJtYW5lbnRBZGRyZXNzWzVdID0gUmFuZG9tQnl0ZShwQWQpJjB4Zjg7ICovCi0KLQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLAotCQkJKCJFMlBST00gTUFDOiA9JXBNXG4iLCBwQWQtPlBlcm1hbmVudEFkZHJlc3MpKTsKLQkJaWYgKHBBZC0+YkxvY2FsQWRtaW5NQUMgPT0gRkFMU0UpIHsKLQkJCU1BQ19EVzBfU1RSVUMgY3NyMjsKLQkJCU1BQ19EVzFfU1RSVUMgY3NyMzsKLQkJCUNPUFlfTUFDX0FERFIocEFkLT5DdXJyZW50QWRkcmVzcywKLQkJCQkgICAgICBwQWQtPlBlcm1hbmVudEFkZHJlc3MpOwotCQkJY3NyMi5maWVsZC5CeXRlMCA9IHBBZC0+Q3VycmVudEFkZHJlc3NbMF07Ci0JCQljc3IyLmZpZWxkLkJ5dGUxID0gcEFkLT5DdXJyZW50QWRkcmVzc1sxXTsKLQkJCWNzcjIuZmllbGQuQnl0ZTIgPSBwQWQtPkN1cnJlbnRBZGRyZXNzWzJdOwotCQkJY3NyMi5maWVsZC5CeXRlMyA9IHBBZC0+Q3VycmVudEFkZHJlc3NbM107Ci0JCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfQUREUl9EVzAsIGNzcjIud29yZCk7Ci0JCQljc3IzLndvcmQgPSAwOwotCQkJY3NyMy5maWVsZC5CeXRlNCA9IHBBZC0+Q3VycmVudEFkZHJlc3NbNF07Ci0JCQljc3IzLmZpZWxkLkJ5dGU1ID0gcEFkLT5DdXJyZW50QWRkcmVzc1s1XTsKLQkJCWNzcjMuZmllbGQuVTJNZU1hc2sgPSAweGZmOwotCQkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX0FERFJfRFcxLCBjc3IzLndvcmQpOwotCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLAotCQkJCSgiRTJQUk9NIE1BQzogPSVwTVxuIiwKLQkJCQkJcEFkLT5QZXJtYW5lbnRBZGRyZXNzKSk7Ci0JCX0KLQl9Ci0KLQkvKiBpZiBub3QgcmV0dXJuIGVhcmx5LiBjYXVzZSBmYWlsIGF0IGVtdWxhdGlvbi4gKi8KLQkvKiBJbml0IHRoZSBjaGFubmVsIG51bWJlciBmb3IgVFggY2hhbm5lbCBwb3dlciAqLwotCVJUTVBSZWFkQ2hhbm5lbFB3cihwQWQpOwotCi0JLyogaWYgRTJQUk9NIHZlcnNpb24gbWlzbWF0Y2ggd2l0aCBkcml2ZXIncyBleHBlY3RhdGlvbiwgdGhlbiBza2lwICovCi0JLyogYWxsIHN1YnNlcXVlbnQgRTJSUE9NIHJldGlldmFsIGFuZCBzZXQgYSBzeXN0ZW0gZXJyb3IgYml0IHRvIG5vdGlmeSBHVUkgKi8KLQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9WRVJTSU9OX09GRlNFVCwgVmVyc2lvbi53b3JkKTsKLQlwQWQtPkVlcHJvbVZlcnNpb24gPQotCSAgICBWZXJzaW9uLmZpZWxkLlZlcnNpb24gKyBWZXJzaW9uLmZpZWxkLkZhZVJlbGVhc2VOdW1iZXIgKiAyNTY7Ci0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIkUyUFJPTTogVmVyc2lvbiA9ICVkLCBGQUUgcmVsZWFzZSAjJWRcbiIsCi0JCSAgVmVyc2lvbi5maWVsZC5WZXJzaW9uLCBWZXJzaW9uLmZpZWxkLkZhZVJlbGVhc2VOdW1iZXIpKTsKLQotCWlmIChWZXJzaW9uLmZpZWxkLlZlcnNpb24gPiBWQUxJRF9FRVBST01fVkVSU0lPTikgewotCQlEQkdQUklOVF9FUlIoIkUyUFJPTTogV1JPTkcgVkVSU0lPTiAweCV4LCBzaG91bGQgYmUgJWRcbiIsIFZlcnNpb24uZmllbGQuVmVyc2lvbiwgVkFMSURfRUVQUk9NX1ZFUlNJT04pOwotCQkvKnBBZC0+U3lzdGVtRXJyb3JCaXRtYXAgfD0gMHgwMDAwMDAwMTsKLQotCQkgICAvLyBoYXJkLWNvZGUgZGVmYXVsdCB2YWx1ZSB3aGVuIG5vIHByb3BlciBFMlBST00gaW5zdGFsbGVkCi0JCSAgIHBBZC0+YkF1dG9UeEFnY0EgPSBGQUxTRTsKLQkJICAgcEFkLT5iQXV0b1R4QWdjRyA9IEZBTFNFOwotCi0JCSAgIC8vIERlZmF1bHQgdGhlIGNoYW5uZWwgcG93ZXIKLQkJICAgZm9yIChpID0gMDsgaSA8IE1BWF9OVU1fT0ZfQ0hBTk5FTFM7IGkrKykKLQkJICAgcEFkLT5UeFBvd2VyW2ldLlBvd2VyID0gREVGQVVMVF9SRl9UWF9QT1dFUjsKLQotCQkgICAvLyBEZWZhdWx0IHRoZSBjaGFubmVsIHBvd2VyCi0JCSAgIGZvciAoaSA9IDA7IGkgPCBNQVhfTlVNX09GXzExSkNIQU5ORUxTOyBpKyspCi0JCSAgIHBBZC0+VHhQb3dlcjExSltpXS5Qb3dlciA9IERFRkFVTFRfUkZfVFhfUE9XRVI7Ci0KLQkJICAgZm9yKGkgPSAwOyBpIDwgTlVNX0VFUFJPTV9CQlBfUEFSTVM7IGkrKykKLQkJICAgcEFkLT5FRVBST01EZWZhdWx0VmFsdWVbaV0gPSAweGZmZmY7Ci0JCSAgIHJldHVybjsgICovCi0JfQotCS8qIFJlYWQgQkJQIGRlZmF1bHQgdmFsdWUgZnJvbSBFRVBST00gYW5kIHN0b3JlIHRvIGFycmF5KEVFUFJPTURlZmF1bHRWYWx1ZSkgaW4gcEFkICovCi0JUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fTklDMV9PRkZTRVQsIHZhbHVlKTsKLQlwQWQtPkVFUFJPTURlZmF1bHRWYWx1ZVswXSA9IHZhbHVlOwotCi0JUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fTklDMl9PRkZTRVQsIHZhbHVlKTsKLQlwQWQtPkVFUFJPTURlZmF1bHRWYWx1ZVsxXSA9IHZhbHVlOwotCi0JUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAweDM4LCB2YWx1ZSk7CS8qIENvdW50cnkgUmVnaW9uICovCi0JcEFkLT5FRVBST01EZWZhdWx0VmFsdWVbMl0gPSB2YWx1ZTsKLQotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fQkJQX0JBU0VfT0ZGU0VUICsgaSAqIDIsCi0JCQkJICAgICB2YWx1ZSk7Ci0JCXBBZC0+RUVQUk9NRGVmYXVsdFZhbHVlW2kgKyAzXSA9IHZhbHVlOwotCX0KLQotCS8qIFdlIGhhdmUgdG8gcGFyc2UgTklDIGNvbmZpZ3VyYXRpb24gMCBhdCBoZXJlLiAqLwotCS8qIElmIFRTU0kgZGlkIG5vdCBoYXZlIHByZWxvYWRlZCB2YWx1ZSwgaXQgc2hvdWxkIHJlc2V0IHRoZSBUeEF1dG9BZ2MgdG8gZmFsc2UgKi8KLQkvKiBUaGVyZWZvcmUsIHdlIGhhdmUgdG8gcmVhZCBUeEF1dG9BZ2MgY29udHJvbCBiZWZvcmVoYW5kLiAqLwotCS8qIFJlYWQgVHggQUdDIGNvbnRyb2wgYml0ICovCi0JQW50ZW5uYS53b3JkID0gcEFkLT5FRVBST01EZWZhdWx0VmFsdWVbMF07Ci0JaWYgKEFudGVubmEud29yZCA9PSAweEZGRkYpIHsKLSNpZmRlZiBSVDMweHgKLQkJaWYgKElTX1JUMzA5MChwQWQpIHx8IElTX1JUMzM5MChwQWQpKSB7Ci0JCQlBbnRlbm5hLndvcmQgPSAwOwotCQkJQW50ZW5uYS5maWVsZC5SZkljVHlwZSA9IFJGSUNfMzAyMDsKLQkJCUFudGVubmEuZmllbGQuVHhQYXRoID0gMTsKLQkJCUFudGVubmEuZmllbGQuUnhQYXRoID0gMTsKLQkJfSBlbHNlCi0jZW5kaWYgLyogUlQzMHh4IC8vICovCi0JCXsKLQotCQkJQW50ZW5uYS53b3JkID0gMDsKLQkJCUFudGVubmEuZmllbGQuUmZJY1R5cGUgPSBSRklDXzI4MjA7Ci0JCQlBbnRlbm5hLmZpZWxkLlR4UGF0aCA9IDE7Ci0JCQlBbnRlbm5hLmZpZWxkLlJ4UGF0aCA9IDI7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19XQVJOLAotCQkJCSAoIkUyUFJPTSBlcnJvciwgaGFyZCBjb2RlIGFzIDB4JTA0eFxuIiwKLQkJCQkgIEFudGVubmEud29yZCkpOwotCQl9Ci0JfQotCS8qIENob29zZSB0aGUgZGVzaXJlZCBUeCZSeCBzdHJlYW0uICovCi0JaWYgKChwQWQtPkNvbW1vbkNmZy5UeFN0cmVhbSA9PSAwKQotCSAgICB8fCAocEFkLT5Db21tb25DZmcuVHhTdHJlYW0gPiBBbnRlbm5hLmZpZWxkLlR4UGF0aCkpCi0JCXBBZC0+Q29tbW9uQ2ZnLlR4U3RyZWFtID0gQW50ZW5uYS5maWVsZC5UeFBhdGg7Ci0KLQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLlJ4U3RyZWFtID09IDApCi0JICAgIHx8IChwQWQtPkNvbW1vbkNmZy5SeFN0cmVhbSA+IEFudGVubmEuZmllbGQuUnhQYXRoKSkgewotCQlwQWQtPkNvbW1vbkNmZy5SeFN0cmVhbSA9IEFudGVubmEuZmllbGQuUnhQYXRoOwotCi0JCWlmICgocEFkLT5NQUNWZXJzaW9uIDwgUkFMSU5LXzI4ODNfVkVSU0lPTikgJiYKLQkJICAgIChwQWQtPkNvbW1vbkNmZy5SeFN0cmVhbSA+IDIpKSB7Ci0JCQkvKiBvbmx5IDIgUnggc3RyZWFtcyBmb3IgUlQyODYwIHNlcmllcyAqLwotCQkJcEFkLT5Db21tb25DZmcuUnhTdHJlYW0gPSAyOwotCQl9Ci0JfQotCS8qIDMqMyAqLwotCS8qIHJlYWQgdmFsdWUgZnJvbSBFRVBST00gYW5kIHNldCB0aGVtIHRvIENTUjE3NCB+IDE3NyBpbiBjaGFpbjAgfiBjaGFpbjIgKi8KLQkvKiB5ZXQgaW1wbGVtZW50ICovCi0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewotCX0KLQotCU5pY0NvbmZpZzIud29yZCA9IHBBZC0+RUVQUk9NRGVmYXVsdFZhbHVlWzFdOwotCi0JewotCQlpZiAoKE5pY0NvbmZpZzIud29yZCAmIDB4MDBmZikgPT0gMHhmZikgewotCQkJTmljQ29uZmlnMi53b3JkICY9IDB4ZmYwMDsKLQkJfQotCi0JCWlmICgoTmljQ29uZmlnMi53b3JkID4+IDgpID09IDB4ZmYpIHsKLQkJCU5pY0NvbmZpZzIud29yZCAmPSAweDAwZmY7Ci0JCX0KLQl9Ci0KLQlpZiAoTmljQ29uZmlnMi5maWVsZC5EeW5hbWljVHhBZ2NDb250cm9sID09IDEpCi0JCXBBZC0+YkF1dG9UeEFnY0EgPSBwQWQtPmJBdXRvVHhBZ2NHID0gVFJVRTsKLQllbHNlCi0JCXBBZC0+YkF1dG9UeEFnY0EgPSBwQWQtPmJBdXRvVHhBZ2NHID0gRkFMU0U7Ci0KLQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsCi0JCSAgICAgKCJOSUNSZWFkRUVQUk9NUGFyYW1ldGVyczogUnhQYXRoID0gJWQsIFR4UGF0aCA9ICVkXG4iLAotCQkgICAgICBBbnRlbm5hLmZpZWxkLlJ4UGF0aCwgQW50ZW5uYS5maWVsZC5UeFBhdGgpKTsKLQotCS8qIFNhdmUgdGhlIGFudGVubmEgZm9yIGZ1dHVyZSB1c2UgKi8KLQlwQWQtPkFudGVubmEud29yZCA9IEFudGVubmEud29yZDsKLQotCS8qIFNldCB0aGUgUmZJQ1R5cGUgaGVyZSwgdGhlbiB3ZSBjYW4gaW5pdGlhbGl6ZSBSRklDIHJlbGF0ZWQgb3BlcmF0aW9uIGNhbGxiYWNrcyAqLwotCXBBZC0+TWxtZS5SZWFsUnhQYXRoID0gKHU4KUFudGVubmEuZmllbGQuUnhQYXRoOwotCXBBZC0+UmZJY1R5cGUgPSAodTgpQW50ZW5uYS5maWVsZC5SZkljVHlwZTsKLQotI2lmZGVmIFJUTVBfUkZfUldfU1VQUE9SVAotCVJ0bXBDaGlwT3BzUkZIb29rKHBBZCk7Ci0jZW5kaWYgLyogUlRNUF9SRl9SV19TVVBQT1JUIC8vICovCi0KLSNpZmRlZiBSVE1QX01BQ19QQ0kKLQlzcHJpbnRmKChjaGFyICopcEFkLT5uaWNrbmFtZSwgIlJUMjg2MFNUQSIpOwotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotCi0JLyogKi8KLQkvKiBSZXNldCBQaHlNb2RlIGlmIHdlIGRvbid0IHN1cHBvcnQgODAyLjExYSAqLwotCS8qIE9ubHkgUkZJQ18yODUwICYgUkZJQ18yNzUwIHN1cHBvcnQgODAyLjExYSAqLwotCS8qICovCi0JaWYgKChBbnRlbm5hLmZpZWxkLlJmSWNUeXBlICE9IFJGSUNfMjg1MCkKLQkgICAgJiYgKEFudGVubmEuZmllbGQuUmZJY1R5cGUgIT0gUkZJQ18yNzUwKQotCSAgICAmJiAoQW50ZW5uYS5maWVsZC5SZkljVHlwZSAhPSBSRklDXzMwNTIpKSB7Ci0JCWlmICgocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFBQkdfTUlYRUQpIHx8Ci0JCSAgICAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFBKSkKLQkJCXBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPSBQSFlfMTFCR19NSVhFRDsKLQkJZWxzZSBpZiAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQUJHTl9NSVhFRCkgfHwKLQkJCSAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFBTl9NSVhFRCkgfHwKLQkJCSAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFBR05fTUlYRUQpIHx8Ci0JCQkgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExTl81RykpCi0JCQlwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID0gUEhZXzExQkdOX01JWEVEOwotCX0KLQkvKiBSZWFkIFRTU0kgcmVmZXJlbmNlIGFuZCBUU1NJIGJvdW5kYXJ5IGZvciB0ZW1wZXJhdHVyZSBjb21wZW5zYXRpb24uIFRoaXMgaXMgdWdseSAqLwotCS8qIDAuIDExYi9nICovCi0JewotCQkvKiB0aGVzZSBhcmUgdGVtcGF0dXJlIHJlZmVyZW5jZSB2YWx1ZSAoMHgwMCB+IDB4RkUpCi0JCSAgIGV4OiAweDAwIDB4MTUgMHgyNSAweDQ1IDB4ODggMHhBMCAweEI1IDB4RDAgMHhGMAotCQkgICBUc3NpUGx1c0JvdW5kYXJ5RyBbNF0gWzNdIFsyXSBbMV0gWzBdIChzbWFsbGVyKSArCi0JCSAgIFRzc2lNaW51c0JvdW5kYXJ5R1swXSBbMV0gWzJdIFszXSBbNF0gKGxhcmdlcikgKi8KLQkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAweDZFLCBQb3dlci53b3JkKTsKLQkJcEFkLT5Uc3NpTWludXNCb3VuZGFyeUdbNF0gPSBQb3dlci5maWVsZC5CeXRlMDsKLQkJcEFkLT5Uc3NpTWludXNCb3VuZGFyeUdbM10gPSBQb3dlci5maWVsZC5CeXRlMTsKLQkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAweDcwLCBQb3dlci53b3JkKTsKLQkJcEFkLT5Uc3NpTWludXNCb3VuZGFyeUdbMl0gPSBQb3dlci5maWVsZC5CeXRlMDsKLQkJcEFkLT5Uc3NpTWludXNCb3VuZGFyeUdbMV0gPSBQb3dlci5maWVsZC5CeXRlMTsKLQkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAweDcyLCBQb3dlci53b3JkKTsKLQkJcEFkLT5Uc3NpUmVmRyA9IFBvd2VyLmZpZWxkLkJ5dGUwOwkvKiByZWZlcmVuY2UgdmFsdWUgWzBdICovCi0JCXBBZC0+VHNzaVBsdXNCb3VuZGFyeUdbMV0gPSBQb3dlci5maWVsZC5CeXRlMTsKLQkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAweDc0LCBQb3dlci53b3JkKTsKLQkJcEFkLT5Uc3NpUGx1c0JvdW5kYXJ5R1syXSA9IFBvd2VyLmZpZWxkLkJ5dGUwOwotCQlwQWQtPlRzc2lQbHVzQm91bmRhcnlHWzNdID0gUG93ZXIuZmllbGQuQnl0ZTE7Ci0JCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgMHg3NiwgUG93ZXIud29yZCk7Ci0JCXBBZC0+VHNzaVBsdXNCb3VuZGFyeUdbNF0gPSBQb3dlci5maWVsZC5CeXRlMDsKLQkJcEFkLT5UeEFnY1N0ZXBHID0gUG93ZXIuZmllbGQuQnl0ZTE7Ci0JCXBBZC0+VHhBZ2NDb21wZW5zYXRlRyA9IDA7Ci0JCXBBZC0+VHNzaU1pbnVzQm91bmRhcnlHWzBdID0gcEFkLT5Uc3NpUmVmRzsKLQkJcEFkLT5Uc3NpUGx1c0JvdW5kYXJ5R1swXSA9IHBBZC0+VHNzaVJlZkc7Ci0KLQkJLyogRGlzYWJsZSBUeEFnYyBpZiB0aGUgYmFzZWQgdmFsdWUgaXMgbm90IHJpZ2h0ICovCi0JCWlmIChwQWQtPlRzc2lSZWZHID09IDB4ZmYpCi0JCQlwQWQtPmJBdXRvVHhBZ2NHID0gRkFMU0U7Ci0KLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJFMlBST006IEcgVHNzaVstNCAuLiArNF0gPSAlZCAlZCAlZCAlZCAtICVkIC0lZCAlZCAlZCAlZCwgc3RlcD0lZCwgdHVuaW5nPSVkXG4iLAotCQkJICBwQWQtPlRzc2lNaW51c0JvdW5kYXJ5R1s0XSwKLQkJCSAgcEFkLT5Uc3NpTWludXNCb3VuZGFyeUdbM10sCi0JCQkgIHBBZC0+VHNzaU1pbnVzQm91bmRhcnlHWzJdLAotCQkJICBwQWQtPlRzc2lNaW51c0JvdW5kYXJ5R1sxXSwgcEFkLT5Uc3NpUmVmRywKLQkJCSAgcEFkLT5Uc3NpUGx1c0JvdW5kYXJ5R1sxXSwgcEFkLT5Uc3NpUGx1c0JvdW5kYXJ5R1syXSwKLQkJCSAgcEFkLT5Uc3NpUGx1c0JvdW5kYXJ5R1szXSwgcEFkLT5Uc3NpUGx1c0JvdW5kYXJ5R1s0XSwKLQkJCSAgcEFkLT5UeEFnY1N0ZXBHLCBwQWQtPmJBdXRvVHhBZ2NHKSk7Ci0JfQotCS8qIDEuIDExYSAqLwotCXsKLQkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAweEQ0LCBQb3dlci53b3JkKTsKLQkJcEFkLT5Uc3NpTWludXNCb3VuZGFyeUFbNF0gPSBQb3dlci5maWVsZC5CeXRlMDsKLQkJcEFkLT5Uc3NpTWludXNCb3VuZGFyeUFbM10gPSBQb3dlci5maWVsZC5CeXRlMTsKLQkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAweEQ2LCBQb3dlci53b3JkKTsKLQkJcEFkLT5Uc3NpTWludXNCb3VuZGFyeUFbMl0gPSBQb3dlci5maWVsZC5CeXRlMDsKLQkJcEFkLT5Uc3NpTWludXNCb3VuZGFyeUFbMV0gPSBQb3dlci5maWVsZC5CeXRlMTsKLQkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAweEQ4LCBQb3dlci53b3JkKTsKLQkJcEFkLT5Uc3NpUmVmQSA9IFBvd2VyLmZpZWxkLkJ5dGUwOwotCQlwQWQtPlRzc2lQbHVzQm91bmRhcnlBWzFdID0gUG93ZXIuZmllbGQuQnl0ZTE7Ci0JCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgMHhEQSwgUG93ZXIud29yZCk7Ci0JCXBBZC0+VHNzaVBsdXNCb3VuZGFyeUFbMl0gPSBQb3dlci5maWVsZC5CeXRlMDsKLQkJcEFkLT5Uc3NpUGx1c0JvdW5kYXJ5QVszXSA9IFBvd2VyLmZpZWxkLkJ5dGUxOwotCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIDB4REMsIFBvd2VyLndvcmQpOwotCQlwQWQtPlRzc2lQbHVzQm91bmRhcnlBWzRdID0gUG93ZXIuZmllbGQuQnl0ZTA7Ci0JCXBBZC0+VHhBZ2NTdGVwQSA9IFBvd2VyLmZpZWxkLkJ5dGUxOwotCQlwQWQtPlR4QWdjQ29tcGVuc2F0ZUEgPSAwOwotCQlwQWQtPlRzc2lNaW51c0JvdW5kYXJ5QVswXSA9IHBBZC0+VHNzaVJlZkE7Ci0JCXBBZC0+VHNzaVBsdXNCb3VuZGFyeUFbMF0gPSBwQWQtPlRzc2lSZWZBOwotCi0JCS8qIERpc2FibGUgVHhBZ2MgaWYgdGhlIGJhc2VkIHZhbHVlIGlzIG5vdCByaWdodCAqLwotCQlpZiAocEFkLT5Uc3NpUmVmQSA9PSAweGZmKQotCQkJcEFkLT5iQXV0b1R4QWdjQSA9IEZBTFNFOwotCi0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiRTJQUk9NOiBBIFRzc2lbLTQgLi4gKzRdID0gJWQgJWQgJWQgJWQgLSAlZCAtJWQgJWQgJWQgJWQsIHN0ZXA9JWQsIHR1bmluZz0lZFxuIiwKLQkJCSAgcEFkLT5Uc3NpTWludXNCb3VuZGFyeUFbNF0sCi0JCQkgIHBBZC0+VHNzaU1pbnVzQm91bmRhcnlBWzNdLAotCQkJICBwQWQtPlRzc2lNaW51c0JvdW5kYXJ5QVsyXSwKLQkJCSAgcEFkLT5Uc3NpTWludXNCb3VuZGFyeUFbMV0sIHBBZC0+VHNzaVJlZkEsCi0JCQkgIHBBZC0+VHNzaVBsdXNCb3VuZGFyeUFbMV0sIHBBZC0+VHNzaVBsdXNCb3VuZGFyeUFbMl0sCi0JCQkgIHBBZC0+VHNzaVBsdXNCb3VuZGFyeUFbM10sIHBBZC0+VHNzaVBsdXNCb3VuZGFyeUFbNF0sCi0JCQkgIHBBZC0+VHhBZ2NTdGVwQSwgcEFkLT5iQXV0b1R4QWdjQSkpOwotCX0KLQlwQWQtPkJicFJzc2lUb0RibURlbHRhID0gMHgwOwotCi0JLyogUmVhZCBmcmVxdWVuY3kgb2Zmc2V0IHNldHRpbmcgZm9yIFJGICovCi0JUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fRlJFUV9PRkZTRVQsIHZhbHVlKTsKLQlpZiAoKHZhbHVlICYgMHgwMEZGKSAhPSAweDAwRkYpCi0JCXBBZC0+UmZGcmVxT2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpKHZhbHVlICYgMHgwMEZGKTsKLQllbHNlCi0JCXBBZC0+UmZGcmVxT2Zmc2V0ID0gMDsKLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJICgiRTJQUk9NOiBSRiBGcmVxT2Zmc2V0PTB4JWx4IFxuIiwgcEFkLT5SZkZyZXFPZmZzZXQpKTsKLQotCS8qQ291bnRyeVJlZ2lvbiBieXRlIG9mZnNldCAoMzhoKSAqLwotCXZhbHVlID0gcEFkLT5FRVBST01EZWZhdWx0VmFsdWVbMl0gPj4gODsJLyogMi40RyBiYW5kICovCi0JdmFsdWUyID0gcEFkLT5FRVBST01EZWZhdWx0VmFsdWVbMl0gJiAweDAwRkY7CS8qIDVHIGJhbmQgKi8KLQotCWlmICgodmFsdWUgPD0gUkVHSU9OX01BWElNVU1fQkdfQkFORCkKLQkgICAgJiYgKHZhbHVlMiA8PSBSRUdJT05fTUFYSU1VTV9BX0JBTkQpKSB7Ci0JCXBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlSZWdpb24gPSAoKHU4KXZhbHVlKSB8IDB4ODA7Ci0JCXBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlSZWdpb25Gb3JBQmFuZCA9ICgodTgpdmFsdWUyKSB8IDB4ODA7Ci0JCVRtcFBoeSA9IHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGU7Ci0JCXBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPSAweGZmOwotCQlSVE1QU2V0UGh5TW9kZShwQWQsIFRtcFBoeSk7Ci0JCVNldENvbW1vbkhUKHBBZCk7Ci0JfQotCS8qICovCi0JLyogR2V0IFJTU0kgT2Zmc2V0IG9uIEVFUFJPTSAweDlBaCAmIDB4OUNoLiAqLwotCS8qIFRoZSB2YWxpZCB2YWx1ZSBhcmUgKC0xMCB+IDEwKSAqLwotCS8qICovCi0JUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fUlNTSV9CR19PRkZTRVQsIHZhbHVlKTsKLQlwQWQtPkJHUnNzaU9mZnNldDAgPSB2YWx1ZSAmIDB4MDBmZjsKLQlwQWQtPkJHUnNzaU9mZnNldDEgPSAodmFsdWUgPj4gOCk7Ci0JUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fUlNTSV9CR19PRkZTRVQgKyAyLCB2YWx1ZSk7Ci0JcEFkLT5CR1Jzc2lPZmZzZXQyID0gdmFsdWUgJiAweDAwZmY7Ci0JcEFkLT5BTE5BR2FpbjEgPSAodmFsdWUgPj4gOCk7Ci0JUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fTE5BX09GRlNFVCwgdmFsdWUpOwotCXBBZC0+QkxOQUdhaW4gPSB2YWx1ZSAmIDB4MDBmZjsKLQlwQWQtPkFMTkFHYWluMCA9ICh2YWx1ZSA+PiA4KTsKLQotCS8qIFZhbGlkYXRlIDExYi9nIFJTU0lfMCBvZmZzZXQuICovCi0JaWYgKChwQWQtPkJHUnNzaU9mZnNldDAgPCAtMTApIHx8IChwQWQtPkJHUnNzaU9mZnNldDAgPiAxMCkpCi0JCXBBZC0+QkdSc3NpT2Zmc2V0MCA9IDA7Ci0KLQkvKiBWYWxpZGF0ZSAxMWIvZyBSU1NJXzEgb2Zmc2V0LiAqLwotCWlmICgocEFkLT5CR1Jzc2lPZmZzZXQxIDwgLTEwKSB8fCAocEFkLT5CR1Jzc2lPZmZzZXQxID4gMTApKQotCQlwQWQtPkJHUnNzaU9mZnNldDEgPSAwOwotCi0JLyogVmFsaWRhdGUgMTFiL2cgUlNTSV8yIG9mZnNldC4gKi8KLQlpZiAoKHBBZC0+QkdSc3NpT2Zmc2V0MiA8IC0xMCkgfHwgKHBBZC0+QkdSc3NpT2Zmc2V0MiA+IDEwKSkKLQkJcEFkLT5CR1Jzc2lPZmZzZXQyID0gMDsKLQotCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX1JTU0lfQV9PRkZTRVQsIHZhbHVlKTsKLQlwQWQtPkFSc3NpT2Zmc2V0MCA9IHZhbHVlICYgMHgwMGZmOwotCXBBZC0+QVJzc2lPZmZzZXQxID0gKHZhbHVlID4+IDgpOwotCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgKEVFUFJPTV9SU1NJX0FfT0ZGU0VUICsgMiksIHZhbHVlKTsKLQlwQWQtPkFSc3NpT2Zmc2V0MiA9IHZhbHVlICYgMHgwMGZmOwotCXBBZC0+QUxOQUdhaW4yID0gKHZhbHVlID4+IDgpOwotCi0JaWYgKCgodTgpcEFkLT5BTE5BR2FpbjEgPT0gMHhGRikgfHwgKHBBZC0+QUxOQUdhaW4xID09IDB4MDApKQotCQlwQWQtPkFMTkFHYWluMSA9IHBBZC0+QUxOQUdhaW4wOwotCWlmICgoKHU4KXBBZC0+QUxOQUdhaW4yID09IDB4RkYpIHx8IChwQWQtPkFMTkFHYWluMiA9PSAweDAwKSkKLQkJcEFkLT5BTE5BR2FpbjIgPSBwQWQtPkFMTkFHYWluMDsKLQotCS8qIFZhbGlkYXRlIDExYSBSU1NJXzAgb2Zmc2V0LiAqLwotCWlmICgocEFkLT5BUnNzaU9mZnNldDAgPCAtMTApIHx8IChwQWQtPkFSc3NpT2Zmc2V0MCA+IDEwKSkKLQkJcEFkLT5BUnNzaU9mZnNldDAgPSAwOwotCi0JLyogVmFsaWRhdGUgMTFhIFJTU0lfMSBvZmZzZXQuICovCi0JaWYgKChwQWQtPkFSc3NpT2Zmc2V0MSA8IC0xMCkgfHwgKHBBZC0+QVJzc2lPZmZzZXQxID4gMTApKQotCQlwQWQtPkFSc3NpT2Zmc2V0MSA9IDA7Ci0KLQkvKlZhbGlkYXRlIDExYSBSU1NJXzIgb2Zmc2V0LiAqLwotCWlmICgocEFkLT5BUnNzaU9mZnNldDIgPCAtMTApIHx8IChwQWQtPkFSc3NpT2Zmc2V0MiA+IDEwKSkKLQkJcEFkLT5BUnNzaU9mZnNldDIgPSAwOwotCi0jaWZkZWYgUlQzMHh4Ci0JLyogKi8KLQkvKiBHZXQgVFggbWl4ZXIgZ2FpbiBzZXR0aW5nICovCi0JLyogMHhmZiBhcmUgaW52YWxpZCB2YWx1ZSAqLwotCS8qIE5vdGU6IFJUMzB4WCBkZWZhdWx0IHZhbHVlIGlzIDB4MDAgYW5kIHdpbGwgcHJvZ3JhbSB0byBSRl9SMTcgb25seSB3aGVuIHRoaXMgdmFsdWUgaXMgbm90IHplcm8uICovCi0JLyogICAgICAgUlQzNTlYIGRlZmF1bHQgdmFsdWUgaXMgMHgwMiAqLwotCS8qICovCi0JaWYgKElTX1JUMzB4eChwQWQpIHx8IElTX1JUMzU3MihwQWQpKSB7Ci0JCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX1RYTUlYRVJfR0FJTl8yXzRHLCB2YWx1ZSk7Ci0JCXBBZC0+VHhNaXhlckdhaW4yNEcgPSAwOwotCQl2YWx1ZSAmPSAweDAwZmY7Ci0JCWlmICh2YWx1ZSAhPSAweGZmKSB7Ci0JCQl2YWx1ZSAmPSAweDA3OwotCQkJcEFkLT5UeE1peGVyR2FpbjI0RyA9ICh1OCl2YWx1ZTsKLQkJfQotCX0KLSNlbmRpZiAvKiBSVDMweHggLy8gKi8KLQotCS8qICovCi0JLyogR2V0IExFRCBTZXR0aW5nLiAqLwotCS8qICovCi0JUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAweDNhLCB2YWx1ZSk7Ci0JcEFkLT5MZWRDbnRsLndvcmQgPSAodmFsdWUgPj4gOCk7Ci0JUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fTEVEMV9PRkZTRVQsIHZhbHVlKTsKLQlwQWQtPkxlZDEgPSB2YWx1ZTsKLQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9MRUQyX09GRlNFVCwgdmFsdWUpOwotCXBBZC0+TGVkMiA9IHZhbHVlOwotCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX0xFRDNfT0ZGU0VULCB2YWx1ZSk7Ci0JcEFkLT5MZWQzID0gdmFsdWU7Ci0KLQlSVE1QUmVhZFR4UHdyUGVyUmF0ZShwQWQpOwotCi0jaWZkZWYgUlQzMHh4Ci0jaWZkZWYgUlRNUF9FRlVTRV9TVVBQT1JUCi0JUnRtcEVmdXNlU3VwcG9ydENoZWNrKHBBZCk7Ci0jZW5kaWYgLyogUlRNUF9FRlVTRV9TVVBQT1JUIC8vICovCi0jZW5kaWYgLyogUlQzMHh4IC8vICovCi0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8LS0gTklDUmVhZEVFUFJPTVBhcmFtZXRlcnNcbiIpKTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JCVNldCBkZWZhdWx0IHZhbHVlIGZyb20gRUVQUk9NCi0KLQlBcmd1bWVudHM6Ci0JCUFkYXB0ZXIJCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCi0KLQlSZXR1cm4gVmFsdWU6Ci0JCU5vbmUKLQotCUlSUUwgPSBQQVNTSVZFX0xFVkVMCi0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBOSUNJbml0QXNpY0Zyb21FRVBST00oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCXUzMiBkYXRhID0gMDsKLQl1OCBCQlBSMSA9IDA7Ci0JdTE2IGk7Ci0vKiAgICAgIEVFUFJPTV9BTlRFTk5BX1NUUlVDICAgIEFudGVubmE7ICovCi0JRUVQUk9NX05JQ19DT05GSUcyX1NUUlVDIE5pY0NvbmZpZzI7Ci0JdTggQkJQUjMgPSAwOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0+IE5JQ0luaXRBc2ljRnJvbUVFUFJPTVxuIikpOwotCWZvciAoaSA9IDM7IGkgPCBOVU1fRUVQUk9NX0JCUF9QQVJNUzsgaSsrKSB7Ci0JCXU4IEJicFJlZ0lkeCwgQmJwVmFsdWU7Ci0KLQkJaWYgKChwQWQtPkVFUFJPTURlZmF1bHRWYWx1ZVtpXSAhPSAweEZGRkYpCi0JCSAgICAmJiAocEFkLT5FRVBST01EZWZhdWx0VmFsdWVbaV0gIT0gMCkpIHsKLQkJCUJicFJlZ0lkeCA9ICh1OCkocEFkLT5FRVBST01EZWZhdWx0VmFsdWVbaV0gPj4gOCk7Ci0JCQlCYnBWYWx1ZSA9ICh1OCkocEFkLT5FRVBST01EZWZhdWx0VmFsdWVbaV0gJiAweGZmKTsKLQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCYnBSZWdJZHgsIEJicFZhbHVlKTsKLQkJfQotCX0KLQotCU5pY0NvbmZpZzIud29yZCA9IHBBZC0+RUVQUk9NRGVmYXVsdFZhbHVlWzFdOwotCi0JewotCQlpZiAoKE5pY0NvbmZpZzIud29yZCAmIDB4MDBmZikgPT0gMHhmZikgewotCQkJTmljQ29uZmlnMi53b3JkICY9IDB4ZmYwMDsKLQkJfQotCi0JCWlmICgoTmljQ29uZmlnMi53b3JkID4+IDgpID09IDB4ZmYpIHsKLQkJCU5pY0NvbmZpZzIud29yZCAmPSAweDAwZmY7Ci0JCX0KLQl9Ci0KLQkvKiBTYXZlIHRoZSBhbnRlbm5hIGZvciBmdXR1cmUgdXNlICovCi0JcEFkLT5OaWNDb25maWcyLndvcmQgPSBOaWNDb25maWcyLndvcmQ7Ci0KLSNpZmRlZiBSVDMweHgKLQkvKiBzZXQgZGVmYXVsdCBhbnRlbm5hIGFzIG1haW4gKi8KLQlpZiAocEFkLT5SZkljVHlwZSA9PSBSRklDXzMwMjApCi0JCUFzaWNTZXRSeEFudChwQWQsIHBBZC0+UnhBbnQuUGFpcjFQcmltYXJ5UnhBbnQpOwotI2VuZGlmIC8qIFJUMzB4eCAvLyAqLwotCi0JLyogKi8KLQkvKiBTZW5kIExFRCBTZXR0aW5nIHRvIE1DVS4gKi8KLQkvKiAqLwotCWlmIChwQWQtPkxlZENudGwud29yZCA9PSAweEZGKSB7Ci0JCXBBZC0+TGVkQ250bC53b3JkID0gMHgwMTsKLQkJcEFkLT5MZWQxID0gMHg1NTU1OwotCQlwQWQtPkxlZDIgPSAweDIyMjE7Ci0KLSNpZmRlZiBSVE1QX01BQ19QQ0kKLQkJcEFkLT5MZWQzID0gMHhBOUY4OwotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotI2lmZGVmIFJUTVBfTUFDX1VTQgotCQlwQWQtPkxlZDMgPSAweDU2Mjc7Ci0jZW5kaWYgLyogUlRNUF9NQUNfVVNCIC8vICovCi0JfQotCi0JQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDUyLCAweGZmLCAodTgpcEFkLT5MZWQxLAotCQkJICAgICAodTgpKHBBZC0+TGVkMSA+PiA4KSk7Ci0JQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDUzLCAweGZmLCAodTgpcEFkLT5MZWQyLAotCQkJICAgICAodTgpKHBBZC0+TGVkMiA+PiA4KSk7Ci0JQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDU0LCAweGZmLCAodTgpcEFkLT5MZWQzLAotCQkJICAgICAodTgpKHBBZC0+TGVkMyA+PiA4KSk7Ci0JQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDUxLCAweGZmLCAwLCBwQWQtPkxlZENudGwuZmllbGQuUG9sYXJpdHkpOwotCi0JcEFkLT5MZWRJbmRpY2F0b3JTdHJlbmd0aCA9IDB4RkY7Ci0JUlRNUFNldFNpZ25hbExFRChwQWQsIC0xMDApOwkvKiBGb3JjZSBzaWduYWwgc3RyZW5ndGggTGVkIHRvIGJlIHR1cm5lZCBvZmYsIGJlZm9yZSBsaW5rIHVwICovCi0KLQl7Ci0JCS8qIFJlYWQgSGFyZHdhcmUgY29udHJvbGxlZCBSYWRpbyBzdGF0ZSBlbmFibGUgYml0ICovCi0JCWlmIChOaWNDb25maWcyLmZpZWxkLkhhcmR3YXJlUmFkaW9Db250cm9sID09IDEpIHsKLQkJCXBBZC0+U3RhQ2ZnLmJIYXJkd2FyZVJhZGlvID0gVFJVRTsKLQotCQkJLyogUmVhZCBHUElPIHBpbjIgYXMgSGFyZHdhcmUgY29udHJvbGxlZCByYWRpbyBzdGF0ZSAqLwotCQkJUlRNUF9JT19SRUFEMzIocEFkLCBHUElPX0NUUkxfQ0ZHLCAmZGF0YSk7Ci0JCQlpZiAoKGRhdGEgJiAweDA0KSA9PSAwKSB7Ci0JCQkJcEFkLT5TdGFDZmcuYkh3UmFkaW8gPSBGQUxTRTsKLQkJCQlwQWQtPlN0YUNmZy5iUmFkaW8gPSBGQUxTRTsKLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRNUF9JT19XUklURTMyKHBBZCwgUFdSX1BJTl9DRkcsIDB4MDAwMDE4MTgpOyAqLwotCQkJCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JBRElPX09GRik7Ci0JCQl9Ci0JCX0gZWxzZQotCQkJcEFkLT5TdGFDZmcuYkhhcmR3YXJlUmFkaW8gPSBGQUxTRTsKLQotCQlpZiAocEFkLT5TdGFDZmcuYlJhZGlvID09IEZBTFNFKSB7Ci0JCQlSVE1QU2V0TEVEKHBBZCwgTEVEX1JBRElPX09GRik7Ci0JCX0gZWxzZSB7Ci0JCQlSVE1QU2V0TEVEKHBBZCwgTEVEX1JBRElPX09OKTsKLSNpZmRlZiBSVE1QX01BQ19QQ0kKLSNpZmRlZiBSVDMwOTAKLQkJCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHgzMCwgUG93ZXJSYWRpb09mZkNJRCwgMHhmZiwKLQkJCQkJICAgICAweDAyKTsKLQkJCUFzaWNDaGVja0NvbW1hbk9rKHBBZCwgUG93ZXJSYWRpb09mZkNJRCk7Ci0jZW5kaWYgLyogUlQzMDkwIC8vICovCi0jaWZuZGVmIFJUMzA5MAotCQkJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDMwLCAweGZmLCAweGZmLCAweDAyKTsKLSNlbmRpZiAvKiBSVDMwOTAgLy8gKi8KLQkJCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHgzMSwgUG93ZXJXYWtlQ0lELCAweDAwLAotCQkJCQkgICAgIDB4MDApOwotCQkJLyogMi0xLiB3YWl0IGNvbW1hbmQgb2suICovCi0JCQlBc2ljQ2hlY2tDb21tYW5PayhwQWQsIFBvd2VyV2FrZUNJRCk7Ci0jZW5kaWYgLyogUlRNUF9NQUNfUENJIC8vICovCi0JCX0KLQl9Ci0KLSNpZmRlZiBSVE1QX01BQ19QQ0kKLSNpZmRlZiBSVDMweHgKLQlpZiAoSVNfUlQzMDkwKHBBZCkgfHwgSVNfUlQzNTcyKHBBZCkgfHwgSVNfUlQzMzkwKHBBZCkpIHsKLQkJc3RydWN0IHJ0X3J0bXBfY2hpcF9vcCAqcENoaXBPcHMgPSAmcEFkLT5jaGlwT3BzOwotCQlpZiAocENoaXBPcHMtPkFzaWNSZXZlcnNlUmZGcm9tU2xlZXBNb2RlKQotCQkJcENoaXBPcHMtPkFzaWNSZXZlcnNlUmZGcm9tU2xlZXBNb2RlKHBBZCk7Ci0JfQotCS8qIDMwOTAgTUNVIFdha2V1cCBjb21tYW5kIG5lZWRzIG1vcmUgdGltZSB0byBiZSBzdGFibGUuICovCi0JLyogQmVmb3JlIHN0YWJsZSwgZG9uJ3QgaXNzdWUgb3RoZXIgTUNVIGNvbW1hbmQgdG8gcHJldmVudCBmcm9tIGZpcm13YXJlIGVycm9yLiAqLwotCi0JaWYgKChJU19SVDMwOTAocEFkKSB8fCBJU19SVDM1NzIocEFkKSB8fCBJU19SVDMzOTAocEFkKSkKLQkgICAgJiYgSVNfVkVSU0lPTl9BRlRFUl9GKHBBZCkKLQkgICAgJiYgKHBBZC0+U3RhQ2ZnLlBTQ29udHJvbC5maWVsZC5ydDMweHhQb3dlck1vZGUgPT0gMykKLQkgICAgJiYgKHBBZC0+U3RhQ2ZnLlBTQ29udHJvbC5maWVsZC5FbmFibGVOZXdQUyA9PSBUUlVFKSkgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlcywgcmVsZWFzZSBNY3UgTG9ja1xuIiwgX19mdW5jX18pKTsKLQkJUlRNUF9TRU1fTE9DSygmcEFkLT5NY3VDbWRMb2NrKTsKLQkJcEFkLT5icnQzMHh4QmFuTWN1Q21kID0gRkFMU0U7Ci0JCVJUTVBfU0VNX1VOTE9DSygmcEFkLT5NY3VDbWRMb2NrKTsKLQl9Ci0jZW5kaWYgLyogUlQzMHh4IC8vICovCi0jZW5kaWYgLyogUlRNUF9NQUNfUENJIC8vICovCi0KLQkvKiBUdXJuIG9mZiBwYXRjaGluZyBmb3IgY2FyZGJ1cyBjb250cm9sbGVyICovCi0JaWYgKE5pY0NvbmZpZzIuZmllbGQuQ2FyZGJ1c0FjY2VsZXJhdGlvbiA9PSAxKSB7Ci0vKiAgICAgICAgICAgICAgcEFkLT5iVGVzdDEgPSBUUlVFOyAqLwotCX0KLQotCWlmIChOaWNDb25maWcyLmZpZWxkLkR5bmFtaWNUeEFnY0NvbnRyb2wgPT0gMSkKLQkJcEFkLT5iQXV0b1R4QWdjQSA9IHBBZC0+YkF1dG9UeEFnY0cgPSBUUlVFOwotCWVsc2UKLQkJcEFkLT5iQXV0b1R4QWdjQSA9IHBBZC0+YkF1dG9UeEFnY0cgPSBGQUxTRTsKLQkvKiAqLwotCS8qIFNpbmNlIEJCUCBoYXMgYmVlbiBwcm9nYW1lZCwgdG8gbWFrZSBzdXJlIEJCUCBzZXR0aW5nIHdpbGwgYmUgKi8KLQkvKiB1cGF0ZSBpbnNpZGUgb2YgQXNpY0FudGVubmFTZWxlY3QsIHNvIHJlc2V0IHRvIFVOS05PV05fQkFORCEgKi8KLQkvKiAqLwotCXBBZC0+Q29tbW9uQ2ZnLkJhbmRTdGF0ZSA9IFVOS05PV05fQkFORDsKLQotCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJkJCUFIzKTsKLQlCQlBSMyAmPSAofjB4MTgpOwotCWlmIChwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID09IDMpIHsKLQkJQkJQUjMgfD0gKDB4MTApOwotCX0gZWxzZSBpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA9PSAyKSB7Ci0JCUJCUFIzIHw9ICgweDgpOwotCX0gZWxzZSBpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA9PSAxKSB7Ci0JCUJCUFIzIHw9ICgweDApOwotCX0KLQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBCQlBSMyk7Ci0KLQl7Ci0JCS8qIEhhbmRsZSB0aGUgZGlmZmVyZW5jZSB3aGVuIDFUICovCi0JCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMSwgJkJCUFIxKTsKLQkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGggPT0gMSkgewotCQkJQkJQUjEgJj0gKH4weDE4KTsKLQkJfQotCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IxLCBCQlBSMSk7Ci0KLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJVc2UgSHcgUmFkaW8gQ29udHJvbCBQaW49JWQ7IGlmIHVzZWQgUGluPSVkO1xuIiwKLQkJCSAgcEFkLT5Db21tb25DZmcuYkhhcmR3YXJlUmFkaW8sCi0JCQkgIHBBZC0+Q29tbW9uQ2ZnLmJIYXJkd2FyZVJhZGlvKSk7Ci0JfQotCi0jaWZkZWYgUlRNUF9NQUNfVVNCCi0jaWZkZWYgUlQzMHh4Ci0JLyogdXBkYXRlIHJlZ2lzdGVycyBmcm9tIEVFUFJPTSBmb3IgUlQzMDcxIG9yIGxhdGVyKDM1NzIvMzU5MikuICovCi0KLQlpZiAoSVNfUlQzMDkwKHBBZCkgfHwgSVNfUlQzNTcyKHBBZCkgfHwgSVNfUlQzMzkwKHBBZCkpIHsKLQkJdTggUmVnSWR4LCBSZWdWYWx1ZTsKLQkJdTE2IHZhbHVlOwotCi0JCS8qIGFmdGVyIFJUMzA3MSwgd3JpdGUgQkJQIGZyb20gRUVQUk9NIDB4RjAgdG8gMHgxMDIgKi8KLQkJZm9yIChpID0gMHhGMDsgaSA8PSAweDEwMjsgaSA9IGkgKyAyKSB7Ci0JCQl2YWx1ZSA9IDB4RkZGRjsKLQkJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgaSwgdmFsdWUpOwotCQkJaWYgKCh2YWx1ZSAhPSAweEZGRkYpICYmICh2YWx1ZSAhPSAwKSkgewotCQkJCVJlZ0lkeCA9ICh1OCkodmFsdWUgPj4gOCk7Ci0JCQkJUmVnVmFsdWUgPSAodTgpKHZhbHVlICYgMHhmZik7Ci0JCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIFJlZ0lkeCwKLQkJCQkJCQkgICAgIFJlZ1ZhbHVlKTsKLQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkJICgiVXBkYXRlIEJCUCBSZWdpc3RlcnMgZnJvbSBFRVBST00oMHglMHgpLCBCQlAoMHgleCkgPSAweCV4XG4iLAotCQkJCQkgIGksIFJlZ0lkeCwgUmVnVmFsdWUpKTsKLQkJCX0KLQkJfQotCi0JCS8qIGFmdGVyIFJUMzA3MSwgd3JpdGUgUkYgZnJvbSBFRVBST00gMHgxMDQgdG8gMHgxMTYgKi8KLQkJZm9yIChpID0gMHgxMDQ7IGkgPD0gMHgxMTY7IGkgPSBpICsgMikgewotCQkJdmFsdWUgPSAweEZGRkY7Ci0JCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIGksIHZhbHVlKTsKLQkJCWlmICgodmFsdWUgIT0gMHhGRkZGKSAmJiAodmFsdWUgIT0gMCkpIHsKLQkJCQlSZWdJZHggPSAodTgpKHZhbHVlID4+IDgpOwotCQkJCVJlZ1ZhbHVlID0gKHU4KSh2YWx1ZSAmIDB4ZmYpOwotCQkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJlZ0lkeCwgUmVnVmFsdWUpOwotCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkgKCJVcGRhdGUgUkYgUmVnaXN0ZXJzIGZyb20gRUVQUk9NMHgleCksIEJCUCgweCV4KSA9IDB4JXhcbiIsCi0JCQkJCSAgaSwgUmVnSWR4LCBSZWdWYWx1ZSkpOwotCQkJfQotCQl9Ci0JfQotI2VuZGlmIC8qIFJUMzB4eCAvLyAqLwotI2VuZGlmIC8qIFJUTVBfTUFDX1VTQiAvLyAqLwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIlR4UGF0aCA9ICVkLCBSeFBhdGggPSAlZCwgUkZJQz0lZCwgUG9sYXIrTEVEIG1vZGU9JXhcbiIsCi0JCSAgcEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCwgcEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCwKLQkJICBwQWQtPlJmSWNUeXBlLCBwQWQtPkxlZENudGwud29yZCkpOwotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLSBOSUNJbml0QXNpY0Zyb21FRVBST01cbiIpKTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JCUluaXRpYWxpemUgTklDIGhhcmR3YXJlCi0KLQlBcmd1bWVudHM6Ci0JCUFkYXB0ZXIJCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCi0KLQlSZXR1cm4gVmFsdWU6Ci0JCU5vbmUKLQotCUlSUUwgPSBQQVNTSVZFX0xFVkVMCi0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotaW50IE5JQ0luaXRpYWxpemVBZGFwdGVyKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgSU4gQk9PTEVBTiBiSGFyZFJlc2V0KQotewotCWludCBTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOwotCVdQRE1BX0dMT19DRkdfU1RSVUMgR2xvQ2ZnOwotI2lmZGVmIFJUTVBfTUFDX1BDSQotCXUzMiBWYWx1ZTsKLQlERUxBWV9JTlRfQ0ZHX1NUUlVDIEludENmZzsKLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLS8qICAgICAgSU5UX01BU0tfQ1NSX1NUUlVDICAgICAgICAgICAgICBJbnRNYXNrOyAqLwotCXVuc2lnbmVkIGxvbmcgaSA9IDAsIGogPSAwOwotCUFDX1RYT1BfQ1NSMF9TVFJVQyBjc3IwOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0+IE5JQ0luaXRpYWxpemVBZGFwdGVyXG4iKSk7Ci0KLQkvKiAzLiBTZXQgRE1BIGdsb2JhbCBjb25maWd1cmF0aW9uIGV4Y2VwdCBUWF9ETUFfRU4gYW5kIFJYX0RNQV9FTiBiaXRzOiAqLwotcmV0cnk6Ci0JaSA9IDA7Ci0JZG8gewotCQlSVE1QX0lPX1JFQUQzMihwQWQsIFdQRE1BX0dMT19DRkcsICZHbG9DZmcud29yZCk7Ci0JCWlmICgoR2xvQ2ZnLmZpZWxkLlR4RE1BQnVzeSA9PSAwKQotCQkgICAgJiYgKEdsb0NmZy5maWVsZC5SeERNQUJ1c3kgPT0gMCkpCi0JCQlicmVhazsKLQotCQlSVE1QdXNlY0RlbGF5KDEwMDApOwotCQlpKys7Ci0JfSB3aGlsZSAoaSA8IDEwMCk7Ci0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIjw9PSBETUEgb2Zmc2V0IDB4MjA4ID0gMHgleFxuIiwgR2xvQ2ZnLndvcmQpKTsKLQlHbG9DZmcud29yZCAmPSAweGZmMDsKLQlHbG9DZmcuZmllbGQuRW5UWFdyaXRlQmFja0RET05FID0gMTsKLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBXUERNQV9HTE9fQ0ZHLCBHbG9DZmcud29yZCk7Ci0KLQkvKiBSZWNvcmQgSFcgQmVhY29uIG9mZnNldCAqLwotCXBBZC0+QmVhY29uT2Zmc2V0WzBdID0gSFdfQkVBQ09OX0JBU0UwOwotCXBBZC0+QmVhY29uT2Zmc2V0WzFdID0gSFdfQkVBQ09OX0JBU0UxOwotCXBBZC0+QmVhY29uT2Zmc2V0WzJdID0gSFdfQkVBQ09OX0JBU0UyOwotCXBBZC0+QmVhY29uT2Zmc2V0WzNdID0gSFdfQkVBQ09OX0JBU0UzOwotCXBBZC0+QmVhY29uT2Zmc2V0WzRdID0gSFdfQkVBQ09OX0JBU0U0OwotCXBBZC0+QmVhY29uT2Zmc2V0WzVdID0gSFdfQkVBQ09OX0JBU0U1OwotCXBBZC0+QmVhY29uT2Zmc2V0WzZdID0gSFdfQkVBQ09OX0JBU0U2OwotCXBBZC0+QmVhY29uT2Zmc2V0WzddID0gSFdfQkVBQ09OX0JBU0U3OwotCi0JLyogKi8KLQkvKiB3cml0ZSBhbGwgc2hhcmVkIFJpbmcncyBiYXNlIGFkZHJlc3MgaW50byBBU0lDICovCi0JLyogKi8KLQotCS8qIGFzaWMgc2ltdWxhdGlvbiBzZXF1ZW5jZSBwdXQgdGhpcyBhaGVhZCBiZWZvcmUgbG9hZGluZyBmaXJtd2FyZS4gKi8KLQkvKiBwYmYgaGFyZHdhcmUgcmVzZXQgKi8KLSNpZmRlZiBSVE1QX01BQ19QQ0kKLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBXUERNQV9SU1RfSURYLCAweDEwMDNmKTsJLyogMHgxMDAwMCBmb3IgcmVzZXQgcngsIDB4M2YgcmVzZXRzIGFsbCA2IHR4IHJpbmdzLiAqLwotCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9TWVNfQ1RSTCwgMHhlMWYpOwotCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9TWVNfQ1RSTCwgMHhlMDApOwotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotCi0JLyogSW5pdGlhbHplIEFTSUMgZm9yIFRYICYgUnggb3BlcmF0aW9uICovCi0JaWYgKE5JQ0luaXRpYWxpemVBc2ljKHBBZCwgYkhhcmRSZXNldCkgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykgewotCQlpZiAoaisrID09IDApIHsKLQkJCU5JQ0xvYWRGaXJtd2FyZShwQWQpOwotCQkJZ290byByZXRyeTsKLQkJfQotCQlyZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKLQl9Ci0KLSNpZmRlZiBSVE1QX01BQ19QQ0kKLQkvKiBXcml0ZSBBQ19CSyBiYXNlIGFkZHJlc3MgcmVnaXN0ZXIgKi8KLQlWYWx1ZSA9Ci0JICAgIFJUTVBfR2V0UGh5c2ljYWxBZGRyZXNzTG93KHBBZC0+VHhSaW5nW1FJRF9BQ19CS10uQ2VsbFswXS5BbGxvY1BhKTsKLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9CQVNFX1BUUjEsIFZhbHVlKTsKLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gVFhfQkFTRV9QVFIxIDogMHgleFxuIiwgVmFsdWUpKTsKLQotCS8qIFdyaXRlIEFDX0JFIGJhc2UgYWRkcmVzcyByZWdpc3RlciAqLwotCVZhbHVlID0KLQkgICAgUlRNUF9HZXRQaHlzaWNhbEFkZHJlc3NMb3cocEFkLT5UeFJpbmdbUUlEX0FDX0JFXS5DZWxsWzBdLkFsbG9jUGEpOwotCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX0JBU0VfUFRSMCwgVmFsdWUpOwotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPiBUWF9CQVNFX1BUUjAgOiAweCV4XG4iLCBWYWx1ZSkpOwotCi0JLyogV3JpdGUgQUNfVkkgYmFzZSBhZGRyZXNzIHJlZ2lzdGVyICovCi0JVmFsdWUgPQotCSAgICBSVE1QX0dldFBoeXNpY2FsQWRkcmVzc0xvdyhwQWQtPlR4UmluZ1tRSURfQUNfVkldLkNlbGxbMF0uQWxsb2NQYSk7Ci0JUlRNUF9JT19XUklURTMyKHBBZCwgVFhfQkFTRV9QVFIyLCBWYWx1ZSk7Ci0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0+IFRYX0JBU0VfUFRSMiA6IDB4JXhcbiIsIFZhbHVlKSk7Ci0KLQkvKiBXcml0ZSBBQ19WTyBiYXNlIGFkZHJlc3MgcmVnaXN0ZXIgKi8KLQlWYWx1ZSA9Ci0JICAgIFJUTVBfR2V0UGh5c2ljYWxBZGRyZXNzTG93KHBBZC0+VHhSaW5nW1FJRF9BQ19WT10uQ2VsbFswXS5BbGxvY1BhKTsKLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9CQVNFX1BUUjMsIFZhbHVlKTsKLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gVFhfQkFTRV9QVFIzIDogMHgleFxuIiwgVmFsdWUpKTsKLQotCS8qIFdyaXRlIE1HTVRfQkFTRV9DU1IgcmVnaXN0ZXIgKi8KLQlWYWx1ZSA9IFJUTVBfR2V0UGh5c2ljYWxBZGRyZXNzTG93KHBBZC0+TWdtdFJpbmcuQ2VsbFswXS5BbGxvY1BhKTsKLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9CQVNFX1BUUjUsIFZhbHVlKTsKLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gVFhfQkFTRV9QVFI1IDogMHgleFxuIiwgVmFsdWUpKTsKLQotCS8qIFdyaXRlIFJYX0JBU0VfQ1NSIHJlZ2lzdGVyICovCi0JVmFsdWUgPSBSVE1QX0dldFBoeXNpY2FsQWRkcmVzc0xvdyhwQWQtPlJ4UmluZy5DZWxsWzBdLkFsbG9jUGEpOwotCVJUTVBfSU9fV1JJVEUzMihwQWQsIFJYX0JBU0VfUFRSLCBWYWx1ZSk7Ci0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0+IFJYX0JBU0VfUFRSIDogMHgleFxuIiwgVmFsdWUpKTsKLQotCS8qIEluaXQgUlggUmluZyBpbmRleCBwb2ludGVyICovCi0JcEFkLT5SeFJpbmcuUnhTd1JlYWRJZHggPSAwOwotCXBBZC0+UnhSaW5nLlJ4Q3B1SWR4ID0gUlhfUklOR19TSVpFIC0gMTsKLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBSWF9DUlhfSURYLCBwQWQtPlJ4UmluZy5SeENwdUlkeCk7Ci0KLQkvKiBJbml0IFRYIHJpbmdzIGluZGV4IHBvaW50ZXIgKi8KLQl7Ci0JCWZvciAoaSA9IDA7IGkgPCBOVU1fT0ZfVFhfUklORzsgaSsrKSB7Ci0JCQlwQWQtPlR4UmluZ1tpXS5UeFN3RnJlZUlkeCA9IDA7Ci0JCQlwQWQtPlR4UmluZ1tpXS5UeENwdUlkeCA9IDA7Ci0JCQlSVE1QX0lPX1dSSVRFMzIocEFkLCAoVFhfQ1RYX0lEWDAgKyBpICogMHgxMCksCi0JCQkJCXBBZC0+VHhSaW5nW2ldLlR4Q3B1SWR4KTsKLQkJfQotCX0KLQotCS8qIGluaXQgTUdNVCByaW5nIGluZGV4IHBvaW50ZXIgKi8KLQlwQWQtPk1nbXRSaW5nLlR4U3dGcmVlSWR4ID0gMDsKLQlwQWQtPk1nbXRSaW5nLlR4Q3B1SWR4ID0gMDsKLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9NR01UQ1RYX0lEWCwgcEFkLT5NZ210UmluZy5UeENwdUlkeCk7Ci0KLQkvKiAqLwotCS8qIHNldCBlYWNoIFJpbmcncyBTSVpFICBpbnRvIEFTSUMuIERlc2NyaXB0b3IgU2l6ZSBpcyBmaXhlZCBieSBkZXNpZ24uICovCi0JLyogKi8KLQotCS8qIFdyaXRlIFRYX1JJTkdfQ1NSMCByZWdpc3RlciAqLwotCVZhbHVlID0gVFhfUklOR19TSVpFOwotCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX01BWF9DTlQwLCBWYWx1ZSk7Ci0JUlRNUF9JT19XUklURTMyKHBBZCwgVFhfTUFYX0NOVDEsIFZhbHVlKTsKLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9NQVhfQ05UMiwgVmFsdWUpOwotCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX01BWF9DTlQzLCBWYWx1ZSk7Ci0JUlRNUF9JT19XUklURTMyKHBBZCwgVFhfTUFYX0NOVDQsIFZhbHVlKTsKLQlWYWx1ZSA9IE1HTVRfUklOR19TSVpFOwotCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX01HTVRNQVhfQ05ULCBWYWx1ZSk7Ci0KLQkvKiBXcml0ZSBSWF9SSU5HX0NTUiByZWdpc3RlciAqLwotCVZhbHVlID0gUlhfUklOR19TSVpFOwotCVJUTVBfSU9fV1JJVEUzMihwQWQsIFJYX01BWF9DTlQsIFZhbHVlKTsKLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLQotCS8qIFdNTSBwYXJhbWV0ZXIgKi8KLQljc3IwLndvcmQgPSAwOwotCVJUTVBfSU9fV1JJVEUzMihwQWQsIFdNTV9UWE9QMF9DRkcsIGNzcjAud29yZCk7Ci0JaWYgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQikgewotCQljc3IwLmZpZWxkLkFjMFR4b3AgPSAxOTI7CS8qIEFDX1ZJOiAxOTIqMzJ1cyB+PSA2bXMgKi8KLQkJY3NyMC5maWVsZC5BYzFUeG9wID0gOTY7CS8qIEFDX1ZPOiA5NiozMnVzICB+PSAzbXMgKi8KLQl9IGVsc2UgewotCQljc3IwLmZpZWxkLkFjMFR4b3AgPSA5NjsJLyogQUNfVkk6IDk2KjMydXMgfj0gM21zICovCi0JCWNzcjAuZmllbGQuQWMxVHhvcCA9IDQ4OwkvKiBBQ19WTzogNDgqMzJ1cyB+PSAxLjVtcyAqLwotCX0KLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBXTU1fVFhPUDFfQ0ZHLCBjc3IwLndvcmQpOwotCi0jaWZkZWYgUlRNUF9NQUNfUENJCi0JLyogMy4gU2V0IERNQSBnbG9iYWwgY29uZmlndXJhdGlvbiBleGNlcHQgVFhfRE1BX0VOIGFuZCBSWF9ETUFfRU4gYml0czogKi8KLQlpID0gMDsKLQlkbyB7Ci0JCVJUTVBfSU9fUkVBRDMyKHBBZCwgV1BETUFfR0xPX0NGRywgJkdsb0NmZy53b3JkKTsKLQkJaWYgKChHbG9DZmcuZmllbGQuVHhETUFCdXN5ID09IDApCi0JCSAgICAmJiAoR2xvQ2ZnLmZpZWxkLlJ4RE1BQnVzeSA9PSAwKSkKLQkJCWJyZWFrOwotCi0JCVJUTVB1c2VjRGVsYXkoMTAwMCk7Ci0JCWkrKzsKLQl9IHdoaWxlIChpIDwgMTAwKTsKLQotCUdsb0NmZy53b3JkICY9IDB4ZmYwOwotCUdsb0NmZy5maWVsZC5FblRYV3JpdGVCYWNrRERPTkUgPSAxOwotCVJUTVBfSU9fV1JJVEUzMihwQWQsIFdQRE1BX0dMT19DRkcsIEdsb0NmZy53b3JkKTsKLQotCUludENmZy53b3JkID0gMDsKLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBERUxBWV9JTlRfQ0ZHLCBJbnRDZmcud29yZCk7Ci0jZW5kaWYgLyogUlRNUF9NQUNfUENJIC8vICovCi0KLQkvKiByZXNldCBhY3Rpb24gKi8KLQkvKiBMb2FkIGZpcm13YXJlICovCi0JLyogIFN0YXR1cyA9IE5JQ0xvYWRGaXJtd2FyZShwQWQpOyAqLwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPC0tIE5JQ0luaXRpYWxpemVBZGFwdGVyXG4iKSk7Ci0JcmV0dXJuIFN0YXR1czsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JCUluaXRpYWxpemUgQVNJQwotCi0JQXJndW1lbnRzOgotCQlBZGFwdGVyCQkJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgotCi0JUmV0dXJuIFZhbHVlOgotCQlOb25lCi0KLQlJUlFMID0gUEFTU0lWRV9MRVZFTAotCi0JTm90ZToKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLWludCBOSUNJbml0aWFsaXplQXNpYyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIElOIEJPT0xFQU4gYkhhcmRSZXNldCkKLXsKLQl1bnNpZ25lZCBsb25nIEluZGV4ID0gMDsKLQl1OCBSMCA9IDB4ZmY7Ci0JdTMyIE1hY0NzcjEyID0gMCwgQ291bnRlciA9IDA7Ci0jaWZkZWYgUlRNUF9NQUNfVVNCCi0JdTMyIE1hY0NzcjAgPSAwOwotCWludCBTdGF0dXM7Ci0JdTggVmFsdWUgPSAweGZmOwotI2VuZGlmIC8qIFJUTVBfTUFDX1VTQiAvLyAqLwotI2lmZGVmIFJUMzB4eAotCXU4IGJicHJlZyA9IDA7Ci0JdTggUkZWYWx1ZSA9IDA7Ci0jZW5kaWYgLyogUlQzMHh4IC8vICovCi0JdTE2IEtleUlkeDsKLQlpbnQgaSwgYXBpZHg7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gTklDSW5pdGlhbGl6ZUFzaWNcbiIpKTsKLQotI2lmZGVmIFJUTVBfTUFDX1BDSQotCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBXUl9QSU5fQ0ZHLCAweDMpOwkvKiBUbyBmaXggZHJpdmVyIGRpc2FibGUvZW5hYmxlIGhhbmcgaXNzdWUgd2hlbiByYWRpbyBvZmYgKi8KLQlpZiAoYkhhcmRSZXNldCA9PSBUUlVFKSB7Ci0JCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgMHgzKTsKLQl9IGVsc2UKLQkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCAweDEpOwotCi0JUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCAweDApOwotCS8qIEluaXRpYWxpemUgTUFDIHJlZ2lzdGVyIHRvIGRlZmF1bHQgdmFsdWUgKi8KLQlmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBOVU1fTUFDX1JFR19QQVJNUzsgSW5kZXgrKykgewotCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNSZWdUYWJsZVtJbmRleF0uUmVnaXN0ZXIsCi0JCQkJTUFDUmVnVGFibGVbSW5kZXhdLlZhbHVlKTsKLQl9Ci0KLQl7Ci0JCWZvciAoSW5kZXggPSAwOyBJbmRleCA8IE5VTV9TVEFfTUFDX1JFR19QQVJNUzsgSW5kZXgrKykgewotCQkJUlRNUF9JT19XUklURTMyKHBBZCwgU1RBTUFDUmVnVGFibGVbSW5kZXhdLlJlZ2lzdGVyLAotCQkJCQlTVEFNQUNSZWdUYWJsZVtJbmRleF0uVmFsdWUpOwotCQl9Ci0JfQotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotI2lmZGVmIFJUTVBfTUFDX1VTQgotCS8qICovCi0JLyogTWFrZSBzdXJlIE1BQyBnZXRzIHJlYWR5IGFmdGVyIE5JQ0xvYWRGaXJtd2FyZSgpLiAqLwotCS8qICovCi0JSW5kZXggPSAwOwotCi0JLypUbyBhdm9pZCBoYW5nLW9uIGlzc3VlIHdoZW4gaW50ZXJmYWNlIHVwIGluIGtlcm5lbCAyLjQsICovCi0JLyp3ZSB1c2UgYSBsb2NhbCB2YXJpYWJsZSAiTWFjQ3NyMCIgaW5zdGVhZCBvZiB1c2luZyAicEFkLT5NQUNWZXJzaW9uIiBkaXJlY3RseS4gKi8KLQlkbyB7Ci0JCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX0NTUjAsICZNYWNDc3IwKTsKLQotCQlpZiAoKE1hY0NzcjAgIT0gMHgwMCkgJiYgKE1hY0NzcjAgIT0gMHhGRkZGRkZGRikpCi0JCQlicmVhazsKLQotCQlSVE1QdXNlY0RlbGF5KDEwKTsKLQl9IHdoaWxlIChJbmRleCsrIDwgMTAwKTsKLQotCXBBZC0+TUFDVmVyc2lvbiA9IE1hY0NzcjA7Ci0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIk1BQ19DU1IwICBbIFZlcjpSZXY9MHglMDh4XVxuIiwgcEFkLT5NQUNWZXJzaW9uKSk7Ci0JLyogdHVybiBvbiBiaXQxMyAoc2V0IHRvIHplcm8pIGFmdGVyIHJ0Mjg2MEQuIFRoaXMgaXMgdG8gc29sdmUgaGlnaC1jdXJyZW50IGlzc3VlLiAqLwotCVJUTVBfSU9fUkVBRDMyKHBBZCwgUEJGX1NZU19DVFJMLCAmTWFjQ3NyMTIpOwotCU1hY0NzcjEyICY9ICh+MHgyMDAwKTsKLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBQQkZfU1lTX0NUUkwsIE1hY0NzcjEyKTsKLQotCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgMHgzKTsKLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBVU0JfRE1BX0NGRywgMHgwKTsKLQlTdGF0dXMgPSBSVFVTQlZlbmRlclJlc2V0KHBBZCk7Ci0KLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIDB4MCk7Ci0KLQkvKiBJbml0aWFsaXplIE1BQyByZWdpc3RlciB0byBkZWZhdWx0IHZhbHVlICovCi0JZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTlVNX01BQ19SRUdfUEFSTVM7IEluZGV4KyspIHsKLSNpZmRlZiBSVDMweHgKLQkJaWYgKChNQUNSZWdUYWJsZVtJbmRleF0uUmVnaXN0ZXIgPT0gVFhfU1dfQ0ZHMCkKLQkJICAgICYmIChJU19SVDMwNzAocEFkKSB8fCBJU19SVDMwNzEocEFkKSB8fCBJU19SVDM1NzIocEFkKQotCQkJfHwgSVNfUlQzMDkwKHBBZCkgfHwgSVNfUlQzMzkwKHBBZCkpKSB7Ci0JCQlNQUNSZWdUYWJsZVtJbmRleF0uVmFsdWUgPSAweDAwMDAwNDAwOwotCQl9Ci0jZW5kaWYgLyogUlQzMHh4IC8vICovCi0JCVJUTVBfSU9fV1JJVEUzMihwQWQsICh1MTYpTUFDUmVnVGFibGVbSW5kZXhdLlJlZ2lzdGVyLAotCQkJCU1BQ1JlZ1RhYmxlW0luZGV4XS5WYWx1ZSk7Ci0JfQotCi0JewotCQlmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBOVU1fU1RBX01BQ19SRUdfUEFSTVM7IEluZGV4KyspIHsKLQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsCi0JCQkJCSh1MTYpU1RBTUFDUmVnVGFibGVbSW5kZXhdLlJlZ2lzdGVyLAotCQkJCQlTVEFNQUNSZWdUYWJsZVtJbmRleF0uVmFsdWUpOwotCQl9Ci0JfQotI2VuZGlmIC8qIFJUTVBfTUFDX1VTQiAvLyAqLwotCi0jaWZkZWYgUlQzMHh4Ci0JLyogSW5pdGlhbGl6ZSBSVDMwNzAgc2VyaWFsIE1BQyByZWdpc3RlcnMgd2hpY2ggaXMgZGlmZmVyZW50IGZyb20gUlQyODcwIHNlcmlhbCAqLwotCWlmIChJU19SVDMwOTAocEFkKSB8fCBJU19SVDM1NzIocEFkKSB8fCBJU19SVDMzOTAocEFkKSkgewotCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9TV19DRkcxLCAwKTsKLQotCQkvKiBSVDMwNzEgdmVyc2lvbiBFIGhhcyBmaXhlZCB0aGlzIGlzc3VlICovCi0JCWlmICgocEFkLT5NQUNWZXJzaW9uICYgMHhmZmZmKSA8IDB4MDIxMSkgewotCQkJaWYgKHBBZC0+TmljQ29uZmlnMi5maWVsZC5EQUNUZXN0Qml0ID09IDEpIHsKLQkJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9TV19DRkcyLCAweDJDKTsJLyogVG8gZml4IHRocm91Z2hwdXQgZHJvcCBkcmFzdGljYWxseSAqLwotCQkJfSBlbHNlIHsKLQkJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9TV19DRkcyLCAweDBGKTsJLyogVG8gZml4IHRocm91Z2hwdXQgZHJvcCBkcmFzdGljYWxseSAqLwotCQkJfQotCQl9IGVsc2UgewotCQkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfU1dfQ0ZHMiwgMHgwKTsKLQkJfQotCX0gZWxzZSBpZiAoSVNfUlQzMDcwKHBBZCkpIHsKLQkJaWYgKCgocEFkLT5NQUNWZXJzaW9uICYgMHhmZmZmKSA8IDB4MDIwMSkpIHsKLQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX1NXX0NGRzEsIDApOwotCQkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfU1dfQ0ZHMiwgMHgyQyk7CS8qIFRvIGZpeCB0aHJvdWdocHV0IGRyb3AgZHJhc3RpY2FsbHkgKi8KLQkJfSBlbHNlIHsKLQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX1NXX0NGRzIsIDApOwotCQl9Ci0JfQotI2VuZGlmIC8qIFJUMzB4eCAvLyAqLwotCi0JLyogKi8KLQkvKiBCZWZvcmUgcHJvZ3JhbSBCQlAsIHdlIG5lZWQgdG8gd2FpdCBCQlAvUkYgZ2V0IHdha2UgdXAuICovCi0JLyogKi8KLQlJbmRleCA9IDA7Ci0JZG8gewotCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TVEFUVVNfQ0ZHLCAmTWFjQ3NyMTIpOwotCi0JCWlmICgoTWFjQ3NyMTIgJiAweDAzKSA9PSAwKQkvKiBpZiBCQi5SRiBpcyBzdGFibGUgKi8KLQkJCWJyZWFrOwotCi0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiQ2hlY2sgTUFDX1NUQVRVU19DRkcgID0gQnVzeSA9ICV4XG4iLCBNYWNDc3IxMikpOwotCQlSVE1QdXNlY0RlbGF5KDEwMDApOwotCX0gd2hpbGUgKEluZGV4KysgPCAxMDApOwotCi0JLyogVGhlIGNvbW1hbmRzIHRvIGZpcm13YXJlIHNob3VsZCBiZSBhZnRlciB0aGVzZSBjb21tYW5kcywgdGhlc2UgY29tbWFuZHMgd2lsbCBpbml0IGZpcm13YXJlICovCi0JLyogUENJIGFuZCBVU0IgYXJlIG5vdCB0aGUgc2FtZSBiZWNhdXNlIFBDSSBkcml2ZXIgbmVlZHMgdG8gd2FpdCBmb3IgUENJIGJ1cyByZWFkeSAqLwotCVJUTVBfSU9fV1JJVEUzMihwQWQsIEgyTV9CQlBfQUdFTlQsIDApOwkvKiBpbml0aWFsaXplIEJCUCBSL1cgYWNjZXNzIGFnZW50ICovCi0JUlRNUF9JT19XUklURTMyKHBBZCwgSDJNX01BSUxCT1hfQ1NSLCAwKTsKLSNpZmRlZiBSVDMwOTAKLQkvKjIwMDgvMTEvMjg6S0ggYWRkIHRvIGZpeCB0aGUgZGVhZCByZiBmcmVxdWVuY3kgb2Zmc2V0IGJ1ZzwtLSAqLwotCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHg3MiwgMCwgMCwgMCk7Ci0JLyoyMDA4LzExLzI4OktIIGFkZCB0byBmaXggdGhlIGRlYWQgcmYgZnJlcXVlbmN5IG9mZnNldCBidWctLT4gKi8KLSNlbmRpZiAvKiBSVDMwOTAgLy8gKi8KLQlSVE1QdXNlY0RlbGF5KDEwMDApOwotCi0JLyogUmVhZCBCQlAgcmVnaXN0ZXIsIG1ha2Ugc3VyZSBCQlAgaXMgdXAgYW5kIHJ1bm5pbmcgYmVmb3JlIHdyaXRlIG5ldyBkYXRhICovCi0JSW5kZXggPSAwOwotCWRvIHsKLQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IwLCAmUjApOwotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJCQlAgdmVyc2lvbiA9ICV4XG4iLCBSMCkpOwotCX0gd2hpbGUgKCgrK0luZGV4IDwgMjApICYmICgoUjAgPT0gMHhmZikgfHwgKFIwID09IDB4MDApKSk7Ci0JLypBU1NFUlQoSW5kZXggPCAyMCk7IC8vdGhpcyB3aWxsIGNhdXNlIEJTT0Qgb24gQ2hlY2stYnVpbGQgZHJpdmVyICovCi0KLQlpZiAoKFIwID09IDB4ZmYpIHx8IChSMCA9PSAweDAwKSkKLQkJcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7Ci0KLQkvKiBJbml0aWFsaXplIEJCUCByZWdpc3RlciB0byBkZWZhdWx0IHZhbHVlICovCi0JZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTlVNX0JCUF9SRUdfUEFSTVM7IEluZGV4KyspIHsKLQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUFJlZ1RhYmxlW0luZGV4XS5SZWdpc3RlciwKLQkJCQkJICAgICBCQlBSZWdUYWJsZVtJbmRleF0uVmFsdWUpOwotCX0KLQotI2lmZGVmIFJUTVBfTUFDX1BDSQotCS8qIFRPRE86IHNoaWFuZywgY2hlY2sgTUFDVmVyc2lvbiwgY3VycmVudGx5LCByYnVzLWJhc2VkIGNoaXAgdXNlIHRoaXMuICovCi0JaWYgKHBBZC0+TUFDVmVyc2lvbiA9PSAweDI4NzIwMjAwKSB7Ci0JCS8qdTggdmFsdWU7ICovCi0JCXVuc2lnbmVkIGxvbmcgdmFsdWUyOwotCi0JCS8qZGlzYWJsZSBNTEQgYnkgQnJ1Y2UgMjAwODA3MDQgKi8KLQkJLypCQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IxMDUsICZ2YWx1ZSk7ICovCi0JCS8qQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjEwNSwgdmFsdWUgfCA0KTsgKi8KLQotCQkvKk1heGltdW0gUFNEVSBsZW5ndGggZnJvbSAxNksgdG8gMzJLIGJ5dGVzICovCi0JCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFYX0xFTl9DRkcsICZ2YWx1ZTIpOwotCQl2YWx1ZTIgJj0gfigweDMgPDwgMTIpOwotCQl2YWx1ZTIgfD0gKDB4MiA8PCAxMik7Ci0JCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BWF9MRU5fQ0ZHLCB2YWx1ZTIpOwotCX0KLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLQotCS8qIGZvciBydDI4NjBFIGFuZCBhZnRlciwgaW5pdCBCQlBfUjg0IHdpdGggMHgxOS4gVGhpcyBpcyBmb3IgZXh0ZW5zaW9uIGNoYW5uZWwgb3ZlcmxhcHBpbmcgSU9ULiAqLwotCS8qIFJUMzA5MCBzaG91bGQgbm90IHByb2dyYW0gQkJQIFI4NCB0byAweDE5LCBvdGhlcndpc2UgVFggd2lsbCBibG9jay4gKi8KLQkvKjMwNzAvNzEvNzIsMzA5MCwzMDkwQSggYXJlIGluY2x1ZGVkIGluIFJUMzB4eCksMzU3MiwzMzkwICovCi0JaWYgKCgocEFkLT5NQUNWZXJzaW9uICYgMHhmZmZmKSAhPSAweDAxMDEpCi0JICAgICYmICEoSVNfUlQzMHh4KHBBZCkgfHwgSVNfUlQzNTcyKHBBZCkgfHwgSVNfUlQzMzkwKHBBZCkpKQotCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I4NCwgMHgxOSk7Ci0KLSNpZmRlZiBSVDMweHgKLS8qIGFkZCBieSBqb2hubGksIFJGIHBvd2VyIHNlcXVlbmNlIHNldHVwICovCi0JaWYgKElTX1JUMzB4eChwQWQpIHx8IElTX1JUMzU3MihwQWQpIHx8IElTX1JUMzM5MChwQWQpKSB7CS8qdXBkYXRlIGZvciBSVDMwNzAvNzEvNzIvOTAvOTEvOTIsMzU3MiwzMzkwLiAqLwotCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3OSwgMHgxMyk7Ci0JCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjgwLCAweDA1KTsKLQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SODEsIDB4MzMpOwotCX0KLQotCWlmIChJU19SVDMwOTAocEFkKSB8fCBJU19SVDMzOTAocEFkKSkJLyogUlQzMDl4LCBSVDMwNzEvNzIgKi8KLQl7Ci0JCS8qIGVuYWJsZSBEQyBmaWx0ZXIgKi8KLQkJaWYgKChwQWQtPk1BQ1ZlcnNpb24gJiAweGZmZmYpID49IDB4MDIxMSkgewotCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMTAzLCAweGMwKTsKLQkJfQotCQkvKiBpbXByb3ZlIHBvd2VyIGNvbnN1bXB0aW9uICovCi0JCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMTM4LCAmYmJwcmVnKTsKLQkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGggPT0gMSkgewotCQkJLyogdHVybiBvZmYgdHggREFDXzEgKi8KLQkJCWJicHJlZyA9IChiYnByZWcgfCAweDIwKTsKLQkJfQotCi0JCWlmIChwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID09IDEpIHsKLQkJCS8qIHR1cm4gb2ZmIHR4IEFEQ18xICovCi0JCQliYnByZWcgJj0gKH4weDIpOwotCQl9Ci0JCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjEzOCwgYmJwcmVnKTsKLQotCQkvKiBpbXByb3ZlIHBvd2VyIGNvbnN1bXB0aW9uIGluIFJUMzA3MSBWZXIuRSAqLwotCQlpZiAoKHBBZC0+TUFDVmVyc2lvbiAmIDB4ZmZmZikgPj0gMHgwMjExKSB7Ci0JCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMxLCAmYmJwcmVnKTsKLQkJCWJicHJlZyAmPSAofjB4Myk7Ci0JCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzMSwgYmJwcmVnKTsKLQkJfQotCX0gZWxzZSBpZiAoSVNfUlQzMDcwKHBBZCkpIHsKLQkJaWYgKChwQWQtPk1BQ1ZlcnNpb24gJiAweGZmZmYpID49IDB4MDIwMSkgewotCQkJLyogZW5hYmxlIERDIGZpbHRlciAqLwotCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMTAzLCAweGMwKTsKLQotCQkJLyogaW1wcm92ZSBwb3dlciBjb25zdW1wdGlvbiBpbiBSVDMwNzAgVmVyLkYgKi8KLQkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMzEsICZiYnByZWcpOwotCQkJYmJwcmVnICY9ICh+MHgzKTsKLQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMxLCBiYnByZWcpOwotCQl9Ci0JCS8qIFRYX0xPMV9lbiwgUkYgUjE3IHJlZ2lzdGVyIEJpdCAzIHRvIDAgKi8KLQkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMTcsICZSRlZhbHVlKTsKLQkJUkZWYWx1ZSAmPSAofjB4MDgpOwotCQkvKiB0byBmaXggcnggbG9uZyByYW5nZSBpc3N1ZSAqLwotCQlpZiAocEFkLT5OaWNDb25maWcyLmZpZWxkLkV4dGVybmFsTE5BRm9yRyA9PSAwKSB7Ci0JCQlSRlZhbHVlIHw9IDB4MjA7Ci0JCX0KLQkJLyogc2V0IFJGX1IxN19iaXRbMjowXSBlcXVhbCB0byBFRVBST00gc2V0dGluZyBhdCAweDQ4aCAqLwotCQlpZiAocEFkLT5UeE1peGVyR2FpbjI0RyA+PSAxKSB7Ci0JCQlSRlZhbHVlICY9ICh+MHg3KTsJLyogY2xlYW4gYml0IFsyOjBdICovCi0JCQlSRlZhbHVlIHw9IHBBZC0+VHhNaXhlckdhaW4yNEc7Ci0JCX0KLQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjE3LCBSRlZhbHVlKTsKLQl9Ci0vKiBlbmQgam9obmxpICovCi0jZW5kaWYgLyogUlQzMHh4IC8vICovCi0KLQlpZiAocEFkLT5NQUNWZXJzaW9uID09IDB4Mjg2MDAxMDApIHsKLQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjksIDB4MTYpOwotCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3MywgMHgxMik7Ci0JfQotCi0JaWYgKHBBZC0+TUFDVmVyc2lvbiA+PSBSQUxJTktfMjg4MEVfVkVSU0lPTiAmJiBwQWQtPk1BQ1ZlcnNpb24gPCBSQUxJTktfMzA3MF9WRVJTSU9OKQkvKiAzKjMgKi8KLQl7Ci0JCS8qIGVubGFyZ2UgTUFYX0xFTl9DRkcgKi8KLQkJdTMyIGNzcjsKLQkJUlRNUF9JT19SRUFEMzIocEFkLCBNQVhfTEVOX0NGRywgJmNzcik7Ci0JCWNzciAmPSAweEZGRjsKLQkJY3NyIHw9IDB4MjAwMDsKLQkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFYX0xFTl9DRkcsIGNzcik7Ci0JfQotI2lmZGVmIFJUTVBfTUFDX1VTQgotCXsKLQkJdTggTUFDX1ZhbHVlW10gPQotCQkgICAgeyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAwLCAwIH07Ci0KLQkJLypJbml0aWFsaXplIFdDSUQgdGFibGUgKi8KLQkJVmFsdWUgPSAweGZmOwotCQlmb3IgKEluZGV4ID0gMDsgSW5kZXggPCAyNTQ7IEluZGV4KyspIHsKLQkJCVJUVVNCTXVsdGlXcml0ZShwQWQsCi0JCQkJCSh1MTYpKE1BQ19XQ0lEX0JBU0UgKyBJbmRleCAqIDgpLAotCQkJCQlNQUNfVmFsdWUsIDgpOwotCQl9Ci0JfQotI2VuZGlmIC8qIFJUTVBfTUFDX1VTQiAvLyAqLwotCi0JLyogQWRkIHJhZGlvIG9mZiBjb250cm9sICovCi0JewotCQlpZiAocEFkLT5TdGFDZmcuYlJhZGlvID09IEZBTFNFKSB7Ci0vKiAgICAgICAgICAgICAgICAgICAgICBSVE1QX0lPX1dSSVRFMzIocEFkLCBQV1JfUElOX0NGRywgMHgwMDAwMTgxOCk7ICovCi0JCQlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SQURJT19PRkYpOwotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0IFJhZGlvIE9mZlxuIikpOwotCQl9Ci0JfQotCi0JLyogQ2xlYXIgcmF3IGNvdW50ZXJzICovCi0JUlRNUF9JT19SRUFEMzIocEFkLCBSWF9TVEFfQ05UMCwgJkNvdW50ZXIpOwotCVJUTVBfSU9fUkVBRDMyKHBBZCwgUlhfU1RBX0NOVDEsICZDb3VudGVyKTsKLQlSVE1QX0lPX1JFQUQzMihwQWQsIFJYX1NUQV9DTlQyLCAmQ291bnRlcik7Ci0JUlRNUF9JT19SRUFEMzIocEFkLCBUWF9TVEFfQ05UMCwgJkNvdW50ZXIpOwotCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfU1RBX0NOVDEsICZDb3VudGVyKTsKLQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX1NUQV9DTlQyLCAmQ291bnRlcik7Ci0KLQkvKiBBU0lDIHdpbGwga2VlcCBnYXJiYWdlIHZhbHVlIGFmdGVyIGJvb3QgKi8KLQkvKiBDbGVhciBhbGwgc2hhcmVkIGtleSB0YWJsZSB3aGVuIGluaXRpYWwgKi8KLQkvKiBUaGlzIHJvdXRpbmUgY2FuIGJlIGlnbm9yZWQgaW4gcmFkaW8tT04vT0ZGIG9wZXJhdGlvbi4gKi8KLQlpZiAoYkhhcmRSZXNldCkgewotCQlmb3IgKEtleUlkeCA9IDA7IEtleUlkeCA8IDQ7IEtleUlkeCsrKSB7Ci0JCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBTSEFSRURfS0VZX01PREVfQkFTRSArIDQgKiBLZXlJZHgsCi0JCQkJCTApOwotCQl9Ci0KLQkJLyogQ2xlYXIgYWxsIHBhaXJ3aXNlIGtleSB0YWJsZSB3aGVuIGluaXRpYWwgKi8KLQkJZm9yIChLZXlJZHggPSAwOyBLZXlJZHggPCAyNTY7IEtleUlkeCsrKSB7Ci0JCQlSVE1QX0lPX1dSSVRFMzIocEFkLAotCQkJCQlNQUNfV0NJRF9BVFRSSUJVVEVfQkFTRSArCi0JCQkJCShLZXlJZHggKiBIV19XQ0lEX0FUVFJJX1NJWkUpLCAxKTsKLQkJfQotCX0KLQkvKiBhc3NlcnQgSE9TVCByZWFkeSBiaXQgKi8KLS8qICBSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfQ1NSMSwgMHgwKTsgLy8gMjAwNC0wOS0xNCBhc2tlZCBieSBNYXJrICovCi0vKiAgUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX0NTUjEsIDB4NCk7ICovCi0KLQkvKiBJdCBpc24ndCBuZWNlc3NhcnkgdG8gY2xlYXIgdGhpcyBzcGFjZSB3aGVuIG5vdCBoYXJkIHJlc2V0LiAqLwotCWlmIChiSGFyZFJlc2V0ID09IFRSVUUpIHsKLQkJLyogY2xlYXIgYWxsIG9uLWNoaXAgQkVBQ09OIGZyYW1lIHNwYWNlICovCi0JCWZvciAoYXBpZHggPSAwOyBhcGlkeCA8IEhXX0JFQUNPTl9NQVhfQ09VTlQ7IGFwaWR4KyspIHsKLQkJCWZvciAoaSA9IDA7IGkgPCBIV19CRUFDT05fT0ZGU0VUID4+IDI7IGkgKz0gNCkKLQkJCQlSVE1QX0lPX1dSSVRFMzIocEFkLAotCQkJCQkJcEFkLT5CZWFjb25PZmZzZXRbYXBpZHhdICsgaSwKLQkJCQkJCTB4MDApOwotCQl9Ci0JfQotI2lmZGVmIFJUTVBfTUFDX1VTQgotCUFzaWNEaXNhYmxlU3luYyhwQWQpOwotCS8qIENsZWFyIHJhdyBjb3VudGVycyAqLwotCVJUTVBfSU9fUkVBRDMyKHBBZCwgUlhfU1RBX0NOVDAsICZDb3VudGVyKTsKLQlSVE1QX0lPX1JFQUQzMihwQWQsIFJYX1NUQV9DTlQxLCAmQ291bnRlcik7Ci0JUlRNUF9JT19SRUFEMzIocEFkLCBSWF9TVEFfQ05UMiwgJkNvdW50ZXIpOwotCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfU1RBX0NOVDAsICZDb3VudGVyKTsKLQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX1NUQV9DTlQxLCAmQ291bnRlcik7Ci0JUlRNUF9JT19SRUFEMzIocEFkLCBUWF9TVEFfQ05UMiwgJkNvdW50ZXIpOwotCS8qIERlZmF1bHQgUENJIGNsb2NrIGN5Y2xlIHBlciBtcyBpcyBkaWZmZXJlbnQgYXMgZGVmYXVsdCBzZXR0aW5nLCB3aGljaCBpcyBiYXNlZCBvbiBQQ0kuICovCi0JUlRNUF9JT19SRUFEMzIocEFkLCBVU0JfQ1lDX0NGRywgJkNvdW50ZXIpOwotCUNvdW50ZXIgJj0gMHhmZmZmZmYwMDsKLQlDb3VudGVyIHw9IDB4MDAwMDAxZTsKLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBVU0JfQ1lDX0NGRywgQ291bnRlcik7Ci0jZW5kaWYgLyogUlRNUF9NQUNfVVNCIC8vICovCi0KLQl7Ci0JCS8qIGZvciBydDI4NjBFIGFuZCBhZnRlciwgaW5pdCBUWE9QX0NUUkxfQ0ZHIHdpdGggMHg1ODNmLiBUaGlzIGlzIGZvciBleHRlbnNpb24gY2hhbm5lbCBvdmVybGFwcGluZyBJT1QuICovCi0JCWlmICgocEFkLT5NQUNWZXJzaW9uICYgMHhmZmZmKSAhPSAweDAxMDEpCi0JCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWE9QX0NUUkxfQ0ZHLCAweDU4M2YpOwotCX0KLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLSBOSUNJbml0aWFsaXplQXNpY1xuIikpOwotCXJldHVybiBORElTX1NUQVRVU19TVUNDRVNTOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQkJUmVzZXQgTklDIEFzaWNzCi0KLQlBcmd1bWVudHM6Ci0JCUFkYXB0ZXIJCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCi0KLQlSZXR1cm4gVmFsdWU6Ci0JCU5vbmUKLQotCUlSUUwgPSBQQVNTSVZFX0xFVkVMCi0KLQlOb3RlOgotCQlSZXNldCBOSUMgdG8gaW5pdGlhbCBzdGF0ZSBBUyBJUyBzeXN0ZW0gYm9vdCB1cCB0aW1lLgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBOSUNJc3N1ZVJlc2V0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQl1MzIgVmFsdWUgPSAwOwotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPiBOSUNJc3N1ZVJlc2V0XG4iKSk7Ci0KLQkvKiBBYm9ydCBUeCwgcHJldmVudCBBU0lDIGZyb20gd3JpdGluZyB0byBIb3N0IG1lbW9yeSAqLwotCS8qUlRNUF9JT19XUklURTMyKHBBZCwgVFhfQ05UTF9DU1IsIDB4MDAxZjAwMDApOyAqLwotCi0JLyogRGlzYWJsZSBSeCwgcmVnaXN0ZXIgdmFsdWUgc3VwcG9zZWQgd2lsbCByZW1haW4gYWZ0ZXIgcmVzZXQgKi8KLQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKLQlWYWx1ZSAmPSAoMHhmZmZmZmZmMyk7Ci0JUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBWYWx1ZSk7Ci0KLQkvKiBJc3N1ZSByZXNldCBhbmQgY2xlYXIgZnJvbSByZXNldCBzdGF0ZSAqLwotCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgMHgwMyk7CS8qIDIwMDQtMDktMTcgY2hhbmdlIGZyb20gMHgwMSAqLwotCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgMHgwMCk7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8LS0gTklDSXNzdWVSZXNldFxuIikpOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQkJQ2hlY2sgQVNJQyByZWdpc3RlcnMgYW5kIGZpbmQgYW55IHJlYXNvbiB0aGUgc3lzdGVtIG1pZ2h0IGhhbmcKLQotCUFyZ3VtZW50czoKLQkJQWRhcHRlcgkJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKLQotCVJldHVybiBWYWx1ZToKLQkJTm9uZQotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi1CT09MRUFOIE5JQ0NoZWNrRm9ySGFuZyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0JcmV0dXJuIChGQUxTRSk7Ci19Ci0KLXZvaWQgTklDVXBkYXRlRmlmb1N0YUNvdW50ZXJzKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlUWF9TVEFfRklGT19TVFJVQyBTdGFGaWZvOwotCXN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKnBFbnRyeTsKLQl1OCBpID0gMDsKLQl1OCBwaWQgPSAwLCB3Y2lkID0gMDsKLQljaGFyIHJlVHJ5OwotCXU4IHN1Y2NNQ1M7Ci0KLQlkbyB7Ci0JCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfU1RBX0ZJRk8sICZTdGFGaWZvLndvcmQpOwotCi0JCWlmIChTdGFGaWZvLmZpZWxkLmJWYWxpZCA9PSAwKQotCQkJYnJlYWs7Ci0KLQkJd2NpZCA9ICh1OClTdGFGaWZvLmZpZWxkLndjaWQ7Ci0KLQkJLyogaWdub3JlIE5vQUNLIGFuZCBNR01UIGZyYW1lIHVzZSAweEZGIGFzIFdDSUQgKi8KLQkJaWYgKChTdGFGaWZvLmZpZWxkLlR4QWNrUmVxdWlyZWQgPT0gMCkKLQkJICAgIHx8ICh3Y2lkID49IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKSkgewotCQkJaSsrOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiBQSUQgc3RvcmUgVHggTUNTIFJhdGUgKi8KLQkJcGlkID0gKHU4KVN0YUZpZm8uZmllbGQuUGlkVHlwZTsKLQotCQlwRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFt3Y2lkXTsKLQotCQlwRW50cnktPkRlYnVnRklGT0NvdW50Kys7Ci0KLQkJaWYgKFN0YUZpZm8uZmllbGQuVHhCRikJLyogMyozICovCi0JCQlwRW50cnktPlR4QkZDb3VudCsrOwotCi0JCWlmICghU3RhRmlmby5maWVsZC5UeFN1Y2Nlc3MpIHsKLQkJCXBFbnRyeS0+RklGT0NvdW50Kys7Ci0JCQlwRW50cnktPk9uZVNlY1R4RmFpbENvdW50Kys7Ci0KLQkJCWlmIChwRW50cnktPkZJRk9Db3VudCA+PSAxKSB7Ci0JCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiIyIpKTsKLQkJCQlwRW50cnktPk5vQkFEYXRhQ291bnREb3duID0gNjQ7Ci0KLQkJCQlpZiAocEVudHJ5LT5Qc01vZGUgPT0gUFdSX0FDVElWRSkgewotCQkJCQlpbnQgdGlkOwotCQkJCQlmb3IgKHRpZCA9IDA7IHRpZCA8IE5VTV9PRl9USUQ7IHRpZCsrKSB7Ci0JCQkJCQlCQU9yaVNlc3Npb25UZWFyRG93bihwQWQsCi0JCQkJCQkJCSAgICAgcEVudHJ5LT4KLQkJCQkJCQkJICAgICBBaWQsIHRpZCwKLQkJCQkJCQkJICAgICBGQUxTRSwKLQkJCQkJCQkJICAgICBGQUxTRSk7Ci0JCQkJCX0KLQotCQkJCQkvKiBVcGRhdGUgdGhlIGNvbnRpbnVvdXMgdHJhbnNtaXNzaW9uIGNvdW50ZXIgZXhjZXB0IFBTIG1vZGUgKi8KLQkJCQkJcEVudHJ5LT5Db250aW51ZVR4RmFpbENudCsrOwotCQkJCX0gZWxzZSB7Ci0JCQkJCS8qIENsZWFyIHRoZSBGSUZPQ291bnQgd2hlbiBzdGEgaW4gUG93ZXIgU2F2ZSBtb2RlLiBCYXNpY2FsbHkgd2UgYXNzdW1lICovCi0JCQkJCS8qICAgICB0aGlzIHR4IGVycm9yIGhhcHBlbmVkIGR1ZSB0byBzdGEganVzdCBnbyB0byBzbGVlcC4gKi8KLQkJCQkJcEVudHJ5LT5GSUZPQ291bnQgPSAwOwotCQkJCQlwRW50cnktPkNvbnRpbnVlVHhGYWlsQ250ID0gMDsKLQkJCQl9Ci0JCQkJLypwRW50cnktPkZJRk9Db3VudCA9IDA7ICovCi0JCQl9Ci0JCQkvKnBFbnRyeS0+YlNlbmRCQVIgPSBUUlVFOyAqLwotCQl9IGVsc2UgewotCQkJaWYgKChwRW50cnktPlBzTW9kZSAhPSBQV1JfU0FWRSkKLQkJCSAgICAmJiAocEVudHJ5LT5Ob0JBRGF0YUNvdW50RG93biA+IDApKSB7Ci0JCQkJcEVudHJ5LT5Ob0JBRGF0YUNvdW50RG93bi0tOwotCQkJCWlmIChwRW50cnktPk5vQkFEYXRhQ291bnREb3duID09IDApIHsKLQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQFxuIikpOwotCQkJCX0KLQkJCX0KLQotCQkJcEVudHJ5LT5GSUZPQ291bnQgPSAwOwotCQkJcEVudHJ5LT5PbmVTZWNUeE5vUmV0cnlPa0NvdW50Kys7Ci0JCQkvKiB1cGRhdGUgTm9EYXRhSWRsZUNvdW50IHdoZW4gc3VjY2Vzc2Z1bCBzZW5kIHBhY2tldCB0byBTVEEuICovCi0JCQlwRW50cnktPk5vRGF0YUlkbGVDb3VudCA9IDA7Ci0JCQlwRW50cnktPkNvbnRpbnVlVHhGYWlsQ250ID0gMDsKLQkJfQotCi0JCXN1Y2NNQ1MgPSBTdGFGaWZvLmZpZWxkLlN1Y2Nlc3NSYXRlICYgMHg3RjsKLQotCQlyZVRyeSA9IHBpZCAtIHN1Y2NNQ1M7Ci0KLQkJaWYgKFN0YUZpZm8uZmllbGQuVHhTdWNjZXNzKSB7Ci0JCQlwRW50cnktPlRYTUNTRXhwZWN0ZWRbcGlkXSsrOwotCQkJaWYgKHBpZCA9PSBzdWNjTUNTKSB7Ci0JCQkJcEVudHJ5LT5UWE1DU1N1Y2Nlc3NmdWxbcGlkXSsrOwotCQkJfSBlbHNlIHsKLQkJCQlwRW50cnktPlRYTUNTQXV0b0ZhbGxCYWNrW3BpZF1bc3VjY01DU10rKzsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXBFbnRyeS0+VFhNQ1NGYWlsZWRbcGlkXSsrOwotCQl9Ci0KLQkJaWYgKHJlVHJ5ID4gMCkgewotCQkJaWYgKChwaWQgPj0gMTIpICYmIHN1Y2NNQ1MgPD0gNykgewotCQkJCXJlVHJ5IC09IDQ7Ci0JCQl9Ci0JCQlwRW50cnktPk9uZVNlY1R4UmV0cnlPa0NvdW50ICs9IHJlVHJ5OwotCQl9Ci0KLQkJaSsrOwotCQkvKiBBU0lDIHN0b3JlIDE2IHN0YWNrICovCi0JfSB3aGlsZSAoaSA8ICgyICogVFhfUklOR19TSVpFKSk7Ci0KLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JCVJlYWQgc3RhdGlzdGljYWwgY291bnRlcnMgZnJvbSBoYXJkd2FyZSByZWdpc3RlcnMgYW5kIHJlY29yZCB0aGVtCi0JCWluIHNvZnR3YXJlIHZhcmlhYmxlcyBmb3IgbGF0ZXIgb24gcXVlcnkKLQotCUFyZ3VtZW50czoKLQkJcEFkCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCi0KLQlSZXR1cm4gVmFsdWU6Ci0JCU5vbmUKLQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBOSUNVcGRhdGVSYXdDb3VudGVycyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0JdTMyIE9sZFZhbHVlOwkvKiwgVmFsdWUyOyAqLwotCS8qdW5zaWduZWQgbG9uZyBQYWdlU3VtLCBPbmVTZWNUcmFuc21pdENvdW50OyAqLwotCS8qdW5zaWduZWQgbG9uZyBUeEVycm9yUmF0aW8sIFJldHJ5LCBGYWlsOyAqLwotCVJYX1NUQV9DTlQwX1NUUlVDIFJ4U3RhQ250MDsKLQlSWF9TVEFfQ05UMV9TVFJVQyBSeFN0YUNudDE7Ci0JUlhfU1RBX0NOVDJfU1RSVUMgUnhTdGFDbnQyOwotCVRYX1NUQV9DTlQwX1NUUlVDIFR4U3RhQ250MDsKLQlUWF9TVEFfQ05UMV9TVFJVQyBTdGFUeDE7Ci0JVFhfU1RBX0NOVDJfU1RSVUMgU3RhVHgyOwotCVRYX0FHR19DTlRfU1RSVUMgVHhBZ2dDbnQ7Ci0JVFhfQUdHX0NOVDBfU1RSVUMgVHhBZ2dDbnQwOwotCVRYX0FHR19DTlQxX1NUUlVDIFR4QWdnQ250MTsKLQlUWF9BR0dfQ05UMl9TVFJVQyBUeEFnZ0NudDI7Ci0JVFhfQUdHX0NOVDNfU1RSVUMgVHhBZ2dDbnQzOwotCVRYX0FHR19DTlQ0X1NUUlVDIFR4QWdnQ250NDsKLQlUWF9BR0dfQ05UNV9TVFJVQyBUeEFnZ0NudDU7Ci0JVFhfQUdHX0NOVDZfU1RSVUMgVHhBZ2dDbnQ2OwotCVRYX0FHR19DTlQ3X1NUUlVDIFR4QWdnQ250NzsKLQlzdHJ1Y3QgcnRfY291bnRlcl9yYWxpbmsgKnBSYWxpbmtDb3VudGVyczsKLQotCXBSYWxpbmtDb3VudGVycyA9ICZwQWQtPlJhbGlua0NvdW50ZXJzOwotCi0JUlRNUF9JT19SRUFEMzIocEFkLCBSWF9TVEFfQ05UMCwgJlJ4U3RhQ250MC53b3JkKTsKLQlSVE1QX0lPX1JFQUQzMihwQWQsIFJYX1NUQV9DTlQyLCAmUnhTdGFDbnQyLndvcmQpOwotCi0JewotCQlSVE1QX0lPX1JFQUQzMihwQWQsIFJYX1NUQV9DTlQxLCAmUnhTdGFDbnQxLndvcmQpOwotCQkvKiBVcGRhdGUgUlggUExDUCBlcnJvciBjb3VudGVyICovCi0JCXBBZC0+UHJpdmF0ZUluZm8uUGh5UnhFcnJDbnQgKz0gUnhTdGFDbnQxLmZpZWxkLlBsY3BFcnI7Ci0JCS8qIFVwZGF0ZSBGYWxzZSBDQ0EgY291bnRlciAqLwotCQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY0ZhbHNlQ0NBQ250ICs9Ci0JCSAgICBSeFN0YUNudDEuZmllbGQuRmFsc2VDY2E7Ci0JfQotCi0JLyogVXBkYXRlIEZDUyBjb3VudGVycyAqLwotCU9sZFZhbHVlID0gcEFkLT5XbGFuQ291bnRlcnMuRkNTRXJyb3JDb3VudC51Lkxvd1BhcnQ7Ci0JcEFkLT5XbGFuQ291bnRlcnMuRkNTRXJyb3JDb3VudC51Lkxvd1BhcnQgKz0gKFJ4U3RhQ250MC5maWVsZC5DcmNFcnIpOwkvKiA+PiA3KTsgKi8KLQlpZiAocEFkLT5XbGFuQ291bnRlcnMuRkNTRXJyb3JDb3VudC51Lkxvd1BhcnQgPCBPbGRWYWx1ZSkKLQkJcEFkLT5XbGFuQ291bnRlcnMuRkNTRXJyb3JDb3VudC51LkhpZ2hQYXJ0Kys7Ci0KLQkvKiBBZGQgRkNTIGVycm9yIGNvdW50IHRvIHByaXZhdGUgY291bnRlcnMgKi8KLQlwUmFsaW5rQ291bnRlcnMtPk9uZVNlY1J4RmNzRXJyQ250ICs9IFJ4U3RhQ250MC5maWVsZC5DcmNFcnI7Ci0JT2xkVmFsdWUgPSBwUmFsaW5rQ291bnRlcnMtPlJlYWxGY3NFcnJDb3VudC51Lkxvd1BhcnQ7Ci0JcFJhbGlua0NvdW50ZXJzLT5SZWFsRmNzRXJyQ291bnQudS5Mb3dQYXJ0ICs9IFJ4U3RhQ250MC5maWVsZC5DcmNFcnI7Ci0JaWYgKHBSYWxpbmtDb3VudGVycy0+UmVhbEZjc0VyckNvdW50LnUuTG93UGFydCA8IE9sZFZhbHVlKQotCQlwUmFsaW5rQ291bnRlcnMtPlJlYWxGY3NFcnJDb3VudC51LkhpZ2hQYXJ0Kys7Ci0KLQkvKiBVcGRhdGUgRHVwbGljYXRlIFJjdiBjaGVjayAqLwotCXBSYWxpbmtDb3VudGVycy0+RHVwbGljYXRlUmN2ICs9IFJ4U3RhQ250Mi5maWVsZC5SeER1cGxpQ291bnQ7Ci0JcEFkLT5XbGFuQ291bnRlcnMuRnJhbWVEdXBsaWNhdGVDb3VudC51Lkxvd1BhcnQgKz0KLQkgICAgUnhTdGFDbnQyLmZpZWxkLlJ4RHVwbGlDb3VudDsKLQkvKiBVcGRhdGUgUlggT3ZlcmZsb3cgY291bnRlciAqLwotCXBBZC0+Q291bnRlcnM4MDIzLlJ4Tm9CdWZmZXIgKz0gKFJ4U3RhQ250Mi5maWVsZC5SeEZpZm9PdmVyZmxvd0NvdW50KTsKLQotCS8qcEFkLT5SYWxpbmtDb3VudGVycy5SeENvdW50ID0gMDsgKi8KLSNpZmRlZiBSVE1QX01BQ19VU0IKLQlpZiAocFJhbGlua0NvdW50ZXJzLT5SeENvdW50ICE9IHBBZC0+d2F0Y2hEb2dSeENudCkgewotCQlwQWQtPndhdGNoRG9nUnhDbnQgPSBwUmFsaW5rQ291bnRlcnMtPlJ4Q291bnQ7Ci0JCXBBZC0+d2F0Y2hEb2dSeE92ZXJGbG93Q250ID0gMDsKLQl9IGVsc2UgewotCQlpZiAoUnhTdGFDbnQyLmZpZWxkLlJ4Rmlmb092ZXJmbG93Q291bnQpCi0JCQlwQWQtPndhdGNoRG9nUnhPdmVyRmxvd0NudCsrOwotCQllbHNlCi0JCQlwQWQtPndhdGNoRG9nUnhPdmVyRmxvd0NudCA9IDA7Ci0JfQotI2VuZGlmIC8qIFJUTVBfTUFDX1VTQiAvLyAqLwotCi0JLyppZiAoIU9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfVFhfUkFURV9TV0lUQ0hfRU5BQkxFRCkgfHwgKi8KLQkvKiAgICAgIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1RYX1JBVEVfU1dJVENIX0VOQUJMRUQpICYmIChwQWQtPk1hY1RhYi5TaXplICE9IDEpKSkgKi8KLQlpZiAoIXBBZC0+YlVwZGF0ZUJjbkNudERvbmUpIHsKLQkJLyogVXBkYXRlIEJFQUNPTiBzZW50IGNvdW50ICovCi0JCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfU1RBX0NOVDAsICZUeFN0YUNudDAud29yZCk7Ci0JCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfU1RBX0NOVDEsICZTdGFUeDEud29yZCk7Ci0JCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfU1RBX0NOVDIsICZTdGFUeDIud29yZCk7Ci0JCXBSYWxpbmtDb3VudGVycy0+T25lU2VjQmVhY29uU2VudENudCArPQotCQkgICAgVHhTdGFDbnQwLmZpZWxkLlR4QmVhY29uQ291bnQ7Ci0JCXBSYWxpbmtDb3VudGVycy0+T25lU2VjVHhSZXRyeU9rQ291bnQgKz0KLQkJICAgIFN0YVR4MS5maWVsZC5UeFJldHJhbnNtaXQ7Ci0JCXBSYWxpbmtDb3VudGVycy0+T25lU2VjVHhOb1JldHJ5T2tDb3VudCArPQotCQkgICAgU3RhVHgxLmZpZWxkLlR4U3VjY2VzczsKLQkJcFJhbGlua0NvdW50ZXJzLT5PbmVTZWNUeEZhaWxDb3VudCArPQotCQkgICAgVHhTdGFDbnQwLmZpZWxkLlR4RmFpbENvdW50OwotCQlwQWQtPldsYW5Db3VudGVycy5UcmFuc21pdHRlZEZyYWdtZW50Q291bnQudS5Mb3dQYXJ0ICs9Ci0JCSAgICBTdGFUeDEuZmllbGQuVHhTdWNjZXNzOwotCQlwQWQtPldsYW5Db3VudGVycy5SZXRyeUNvdW50LnUuTG93UGFydCArPQotCQkgICAgU3RhVHgxLmZpZWxkLlR4UmV0cmFuc21pdDsKLQkJcEFkLT5XbGFuQ291bnRlcnMuRmFpbGVkQ291bnQudS5Mb3dQYXJ0ICs9Ci0JCSAgICBUeFN0YUNudDAuZmllbGQuVHhGYWlsQ291bnQ7Ci0JfQotCi0JLyppZiAocEFkLT5iU3RhRmlmb1Rlc3QgPT0gVFJVRSkgKi8KLQl7Ci0JCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfQUdHX0NOVCwgJlR4QWdnQ250LndvcmQpOwotCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0FHR19DTlQwLCAmVHhBZ2dDbnQwLndvcmQpOwotCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0FHR19DTlQxLCAmVHhBZ2dDbnQxLndvcmQpOwotCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0FHR19DTlQyLCAmVHhBZ2dDbnQyLndvcmQpOwotCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0FHR19DTlQzLCAmVHhBZ2dDbnQzLndvcmQpOwotCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0FHR19DTlQ0LCAmVHhBZ2dDbnQ0LndvcmQpOwotCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0FHR19DTlQ1LCAmVHhBZ2dDbnQ1LndvcmQpOwotCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0FHR19DTlQ2LCAmVHhBZ2dDbnQ2LndvcmQpOwotCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0FHR19DTlQ3LCAmVHhBZ2dDbnQ3LndvcmQpOwotCQlwUmFsaW5rQ291bnRlcnMtPlR4QWdnQ291bnQgKz0gVHhBZ2dDbnQuZmllbGQuQWdnVHhDb3VudDsKLQkJcFJhbGlua0NvdW50ZXJzLT5UeE5vbkFnZ0NvdW50ICs9IFR4QWdnQ250LmZpZWxkLk5vbkFnZ1R4Q291bnQ7Ci0JCXBSYWxpbmtDb3VudGVycy0+VHhBZ2cxTVBEVUNvdW50ICs9Ci0JCSAgICBUeEFnZ0NudDAuZmllbGQuQWdnU2l6ZTFDb3VudDsKLQkJcFJhbGlua0NvdW50ZXJzLT5UeEFnZzJNUERVQ291bnQgKz0KLQkJICAgIFR4QWdnQ250MC5maWVsZC5BZ2dTaXplMkNvdW50OwotCi0JCXBSYWxpbmtDb3VudGVycy0+VHhBZ2czTVBEVUNvdW50ICs9Ci0JCSAgICBUeEFnZ0NudDEuZmllbGQuQWdnU2l6ZTNDb3VudDsKLQkJcFJhbGlua0NvdW50ZXJzLT5UeEFnZzRNUERVQ291bnQgKz0KLQkJICAgIFR4QWdnQ250MS5maWVsZC5BZ2dTaXplNENvdW50OwotCQlwUmFsaW5rQ291bnRlcnMtPlR4QWdnNU1QRFVDb3VudCArPQotCQkgICAgVHhBZ2dDbnQyLmZpZWxkLkFnZ1NpemU1Q291bnQ7Ci0JCXBSYWxpbmtDb3VudGVycy0+VHhBZ2c2TVBEVUNvdW50ICs9Ci0JCSAgICBUeEFnZ0NudDIuZmllbGQuQWdnU2l6ZTZDb3VudDsKLQotCQlwUmFsaW5rQ291bnRlcnMtPlR4QWdnN01QRFVDb3VudCArPQotCQkgICAgVHhBZ2dDbnQzLmZpZWxkLkFnZ1NpemU3Q291bnQ7Ci0JCXBSYWxpbmtDb3VudGVycy0+VHhBZ2c4TVBEVUNvdW50ICs9Ci0JCSAgICBUeEFnZ0NudDMuZmllbGQuQWdnU2l6ZThDb3VudDsKLQkJcFJhbGlua0NvdW50ZXJzLT5UeEFnZzlNUERVQ291bnQgKz0KLQkJICAgIFR4QWdnQ250NC5maWVsZC5BZ2dTaXplOUNvdW50OwotCQlwUmFsaW5rQ291bnRlcnMtPlR4QWdnMTBNUERVQ291bnQgKz0KLQkJICAgIFR4QWdnQ250NC5maWVsZC5BZ2dTaXplMTBDb3VudDsKLQotCQlwUmFsaW5rQ291bnRlcnMtPlR4QWdnMTFNUERVQ291bnQgKz0KLQkJICAgIFR4QWdnQ250NS5maWVsZC5BZ2dTaXplMTFDb3VudDsKLQkJcFJhbGlua0NvdW50ZXJzLT5UeEFnZzEyTVBEVUNvdW50ICs9Ci0JCSAgICBUeEFnZ0NudDUuZmllbGQuQWdnU2l6ZTEyQ291bnQ7Ci0JCXBSYWxpbmtDb3VudGVycy0+VHhBZ2cxM01QRFVDb3VudCArPQotCQkgICAgVHhBZ2dDbnQ2LmZpZWxkLkFnZ1NpemUxM0NvdW50OwotCQlwUmFsaW5rQ291bnRlcnMtPlR4QWdnMTRNUERVQ291bnQgKz0KLQkJICAgIFR4QWdnQ250Ni5maWVsZC5BZ2dTaXplMTRDb3VudDsKLQotCQlwUmFsaW5rQ291bnRlcnMtPlR4QWdnMTVNUERVQ291bnQgKz0KLQkJICAgIFR4QWdnQ250Ny5maWVsZC5BZ2dTaXplMTVDb3VudDsKLQkJcFJhbGlua0NvdW50ZXJzLT5UeEFnZzE2TVBEVUNvdW50ICs9Ci0JCSAgICBUeEFnZ0NudDcuZmllbGQuQWdnU2l6ZTE2Q291bnQ7Ci0KLQkJLyogQ2FsY3VsYXRlIHRoZSB0cmFuc21pdHRlZCBBLU1QRFUgY291bnQgKi8KLQkJcFJhbGlua0NvdW50ZXJzLT5UcmFuc21pdHRlZEFNUERVQ291bnQudS5Mb3dQYXJ0ICs9Ci0JCSAgICBUeEFnZ0NudDAuZmllbGQuQWdnU2l6ZTFDb3VudDsKLQkJcFJhbGlua0NvdW50ZXJzLT5UcmFuc21pdHRlZEFNUERVQ291bnQudS5Mb3dQYXJ0ICs9Ci0JCSAgICAoVHhBZ2dDbnQwLmZpZWxkLkFnZ1NpemUyQ291bnQgLyAyKTsKLQotCQlwUmFsaW5rQ291bnRlcnMtPlRyYW5zbWl0dGVkQU1QRFVDb3VudC51Lkxvd1BhcnQgKz0KLQkJICAgIChUeEFnZ0NudDEuZmllbGQuQWdnU2l6ZTNDb3VudCAvIDMpOwotCQlwUmFsaW5rQ291bnRlcnMtPlRyYW5zbWl0dGVkQU1QRFVDb3VudC51Lkxvd1BhcnQgKz0KLQkJICAgIChUeEFnZ0NudDEuZmllbGQuQWdnU2l6ZTRDb3VudCAvIDQpOwotCi0JCXBSYWxpbmtDb3VudGVycy0+VHJhbnNtaXR0ZWRBTVBEVUNvdW50LnUuTG93UGFydCArPQotCQkgICAgKFR4QWdnQ250Mi5maWVsZC5BZ2dTaXplNUNvdW50IC8gNSk7Ci0JCXBSYWxpbmtDb3VudGVycy0+VHJhbnNtaXR0ZWRBTVBEVUNvdW50LnUuTG93UGFydCArPQotCQkgICAgKFR4QWdnQ250Mi5maWVsZC5BZ2dTaXplNkNvdW50IC8gNik7Ci0KLQkJcFJhbGlua0NvdW50ZXJzLT5UcmFuc21pdHRlZEFNUERVQ291bnQudS5Mb3dQYXJ0ICs9Ci0JCSAgICAoVHhBZ2dDbnQzLmZpZWxkLkFnZ1NpemU3Q291bnQgLyA3KTsKLQkJcFJhbGlua0NvdW50ZXJzLT5UcmFuc21pdHRlZEFNUERVQ291bnQudS5Mb3dQYXJ0ICs9Ci0JCSAgICAoVHhBZ2dDbnQzLmZpZWxkLkFnZ1NpemU4Q291bnQgLyA4KTsKLQotCQlwUmFsaW5rQ291bnRlcnMtPlRyYW5zbWl0dGVkQU1QRFVDb3VudC51Lkxvd1BhcnQgKz0KLQkJICAgIChUeEFnZ0NudDQuZmllbGQuQWdnU2l6ZTlDb3VudCAvIDkpOwotCQlwUmFsaW5rQ291bnRlcnMtPlRyYW5zbWl0dGVkQU1QRFVDb3VudC51Lkxvd1BhcnQgKz0KLQkJICAgIChUeEFnZ0NudDQuZmllbGQuQWdnU2l6ZTEwQ291bnQgLyAxMCk7Ci0KLQkJcFJhbGlua0NvdW50ZXJzLT5UcmFuc21pdHRlZEFNUERVQ291bnQudS5Mb3dQYXJ0ICs9Ci0JCSAgICAoVHhBZ2dDbnQ1LmZpZWxkLkFnZ1NpemUxMUNvdW50IC8gMTEpOwotCQlwUmFsaW5rQ291bnRlcnMtPlRyYW5zbWl0dGVkQU1QRFVDb3VudC51Lkxvd1BhcnQgKz0KLQkJICAgIChUeEFnZ0NudDUuZmllbGQuQWdnU2l6ZTEyQ291bnQgLyAxMik7Ci0KLQkJcFJhbGlua0NvdW50ZXJzLT5UcmFuc21pdHRlZEFNUERVQ291bnQudS5Mb3dQYXJ0ICs9Ci0JCSAgICAoVHhBZ2dDbnQ2LmZpZWxkLkFnZ1NpemUxM0NvdW50IC8gMTMpOwotCQlwUmFsaW5rQ291bnRlcnMtPlRyYW5zbWl0dGVkQU1QRFVDb3VudC51Lkxvd1BhcnQgKz0KLQkJICAgIChUeEFnZ0NudDYuZmllbGQuQWdnU2l6ZTE0Q291bnQgLyAxNCk7Ci0KLQkJcFJhbGlua0NvdW50ZXJzLT5UcmFuc21pdHRlZEFNUERVQ291bnQudS5Mb3dQYXJ0ICs9Ci0JCSAgICAoVHhBZ2dDbnQ3LmZpZWxkLkFnZ1NpemUxNUNvdW50IC8gMTUpOwotCQlwUmFsaW5rQ291bnRlcnMtPlRyYW5zbWl0dGVkQU1QRFVDb3VudC51Lkxvd1BhcnQgKz0KLQkJICAgIChUeEFnZ0NudDcuZmllbGQuQWdnU2l6ZTE2Q291bnQgLyAxNik7Ci0JfQotCi19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCQlSZXNldCBOSUMgZnJvbSBlcnJvcgotCi0JQXJndW1lbnRzOgotCQlBZGFwdGVyCQkJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgotCi0JUmV0dXJuIFZhbHVlOgotCQlOb25lCi0KLQlJUlFMID0gUEFTU0lWRV9MRVZFTAotCi0JTm90ZToKLQkJUmVzZXQgTklDIGZyb20gZXJyb3Igc3RhdGUKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgTklDUmVzZXRGcm9tRXJyb3Ioc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCS8qIFJlc2V0IEJCUCAoYWNjb3JkaW5nIHRvIGFsZXgsIHJlc2V0IEFTSUMgd2lsbCBmb3JjZSByZXNldCBCQlAgKi8KLQkvKiBUaGVyZWZvcmUsIHNraXAgdGhlIHJlc2V0IEJCUCAqLwotCS8qIFJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19DU1IxLCAweDIpOyAqLwotCi0JUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCAweDEpOwotCS8qIFJlbW92ZSBBU0lDIGZyb20gcmVzZXQgc3RhdGUgKi8KLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIDB4MCk7Ci0KLQlOSUNJbml0aWFsaXplQWRhcHRlcihwQWQsIEZBTFNFKTsKLQlOSUNJbml0QXNpY0Zyb21FRVBST00ocEFkKTsKLQotCS8qIFN3aXRjaCB0byBjdXJyZW50IGNoYW5uZWwsIHNpbmNlIGR1cmluZyByZXNldCBwcm9jZXNzLCB0aGUgY29ubmVjdGlvbiBzaG91bGQgcmVtYWlucyBvbi4gKi8KLQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsLCBGQUxTRSk7Ci0JQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwpOwotfQotCi1pbnQgTklDTG9hZEZpcm13YXJlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlpbnQgc3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKLQlpZiAocEFkLT5jaGlwT3BzLmxvYWRGaXJtd2FyZSkKLQkJc3RhdHVzID0gcEFkLT5jaGlwT3BzLmxvYWRGaXJtd2FyZShwQWQpOwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JCWVyYXNlIDgwNTEgZmlybXdhcmUgaW1hZ2UgaW4gTUFDIEFTSUMKLQotCUFyZ3VtZW50czoKLQkJQWRhcHRlcgkJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKLQotCUlSUUwgPSBQQVNTSVZFX0xFVkVMCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIE5JQ0VyYXNlRmlybXdhcmUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCWlmIChwQWQtPmNoaXBPcHMuZXJhc2VGaXJtd2FyZSkKLQkJcEFkLT5jaGlwT3BzLmVyYXNlRmlybXdhcmUocEFkKTsKLQotfQkJCQkvKiBFbmQgb2YgTklDRXJhc2VGaXJtd2FyZSAqLwotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQkJTG9hZCBUeCByYXRlIHN3aXRjaGluZyBwYXJhbWV0ZXJzCi0KLQlBcmd1bWVudHM6Ci0JCUFkYXB0ZXIJCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCi0KLQlSZXR1cm4gVmFsdWU6Ci0JCU5ESVNfU1RBVFVTX1NVQ0NFU1MgICAgICAgICBmaXJtd2FyZSBpbWFnZSBsb2FkIG9rCi0JCU5ESVNfU1RBVFVTX0ZBSUxVUkUgICAgICAgICBpbWFnZSBub3QgZm91bmQKLQotCUlSUUwgPSBQQVNTSVZFX0xFVkVMCi0KLQlSYXRlIFRhYmxlIEZvcm1hdDoKLQkJMS4gKEIwOiBWYWxpZCBJdGVtIG51bWJlcikgKEIxOkluaXRpYWwgaXRlbSBmcm9tIHplcm8pCi0JCTIuIEl0ZW0gTnVtYmVyKERlYykgICAgICBNb2RlKEhleCkgICAgIEN1cnJlbnQgTUNTKERlYykgICAgVHJhaW5VcChEZWMpICAgIFRyYWluRG93bihEZWMpCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi1pbnQgTklDTG9hZFJhdGVTd2l0Y2hpbmdQYXJhbXMoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCXJldHVybiBORElTX1NUQVRVU19TVUNDRVNTOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQkJQ29tcGFyZSB0d28gbWVtb3J5IGJsb2NrCi0KLQlBcmd1bWVudHM6Ci0JCXBTcmMxCQlQb2ludGVyIHRvIGZpcnN0IG1lbW9yeSBhZGRyZXNzCi0JCXBTcmMyCQlQb2ludGVyIHRvIHNlY29uZCBtZW1vcnkgYWRkcmVzcwotCi0JUmV0dXJuIFZhbHVlOgotCQkwOgkJCW1lbW9yeSBpcyBlcXVhbAotCQkxOgkJCXBTcmMxIG1lbW9yeSBpcyBsYXJnZXIKLQkJMjoJCQlwU3JjMiBtZW1vcnkgaXMgbGFyZ2VyCi0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi11bnNpZ25lZCBsb25nIFJUTVBDb21wYXJlTWVtb3J5KHZvaWQgKnBTcmMxLCB2b2lkICpwU3JjMiwgdW5zaWduZWQgbG9uZyBMZW5ndGgpCi17Ci0JdTggKnBNZW0xOwotCXU4ICpwTWVtMjsKLQl1bnNpZ25lZCBsb25nIEluZGV4ID0gMDsKLQotCXBNZW0xID0gKHU4ICopcFNyYzE7Ci0JcE1lbTIgPSAodTggKilwU3JjMjsKLQotCWZvciAoSW5kZXggPSAwOyBJbmRleCA8IExlbmd0aDsgSW5kZXgrKykgewotCQlpZiAocE1lbTFbSW5kZXhdID4gcE1lbTJbSW5kZXhdKQotCQkJcmV0dXJuICgxKTsKLQkJZWxzZSBpZiAocE1lbTFbSW5kZXhdIDwgcE1lbTJbSW5kZXhdKQotCQkJcmV0dXJuICgyKTsKLQl9Ci0KLQkvKiBFcXVhbCAqLwotCXJldHVybiAoMCk7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCQlaZXJvIG91dCBtZW1vcnkgYmxvY2sKLQotCUFyZ3VtZW50czoKLQkJcFNyYzEJCVBvaW50ZXIgdG8gbWVtb3J5IGFkZHJlc3MKLQkJTGVuZ3RoCQlTaXplCi0KLQlSZXR1cm4gVmFsdWU6Ci0JCU5vbmUKLQotCUlSUUwgPSBQQVNTSVZFX0xFVkVMCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBSVE1QWmVyb01lbW9yeSh2b2lkICpwU3JjLCB1bnNpZ25lZCBsb25nIExlbmd0aCkKLXsKLQl1OCAqcE1lbTsKLQl1bnNpZ25lZCBsb25nIEluZGV4ID0gMDsKLQotCXBNZW0gPSAodTggKilwU3JjOwotCi0JZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTGVuZ3RoOyBJbmRleCsrKSB7Ci0JCXBNZW1bSW5kZXhdID0gMHgwMDsKLQl9Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCQlDb3B5IGRhdGEgZnJvbSBtZW1vcnkgYmxvY2sgMSB0byBtZW1vcnkgYmxvY2sgMgotCi0JQXJndW1lbnRzOgotCQlwRGVzdAkJUG9pbnRlciB0byBkZXN0aW5hdGlvbiBtZW1vcnkgYWRkcmVzcwotCQlwU3JjCQlQb2ludGVyIHRvIHNvdXJjZSBtZW1vcnkgYWRkcmVzcwotCQlMZW5ndGgJCUNvcHkgc2l6ZQotCi0JUmV0dXJuIFZhbHVlOgotCQlOb25lCi0KLQlJUlFMID0gUEFTU0lWRV9MRVZFTAotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0JTm90ZToKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgUlRNUE1vdmVNZW1vcnkodm9pZCAqcERlc3QsIHZvaWQgKnBTcmMsIHVuc2lnbmVkIGxvbmcgTGVuZ3RoKQotewotCXU4ICpwTWVtMTsKLQl1OCAqcE1lbTI7Ci0JdTMyIEluZGV4OwotCi0JQVNTRVJUKChMZW5ndGggPT0gMCkgfHwgKHBEZXN0ICYmIHBTcmMpKTsKLQotCXBNZW0xID0gKHU4ICopcERlc3Q7Ci0JcE1lbTIgPSAodTggKilwU3JjOwotCi0JZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTGVuZ3RoOyBJbmRleCsrKSB7Ci0JCXBNZW0xW0luZGV4XSA9IHBNZW0yW0luZGV4XTsKLQl9Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCQlJbml0aWFsaXplIHBvcnQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUKLQotCUFyZ3VtZW50czoKLQkJQWRhcHRlcgkJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKLQotCVJldHVybiBWYWx1ZToKLQkJTm9uZQotCi0JSVJRTCA9IFBBU1NJVkVfTEVWRUwKLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFVzZXJDZmdJbml0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQl1MzIga2V5X2luZGV4LCBic3NfaW5kZXg7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gVXNlckNmZ0luaXRcbiIpKTsKLQotCS8qICovCi0JLyogIHBhcnQgSS4gaW5pdGlhbGl6ZSBjb21tb24gY29uZmlndXJhdGlvbiAqLwotCS8qICovCi0jaWZkZWYgUlRNUF9NQUNfVVNCCi0JcEFkLT5CdWxrT3V0UmVxID0gMDsKLQotCXBBZC0+QnVsa091dENvbXBsZXRlID0gMDsKLQlwQWQtPkJ1bGtPdXRDb21wbGV0ZU90aGVyID0gMDsKLQlwQWQtPkJ1bGtPdXRDb21wbGV0ZUNhbmNlbCA9IDA7Ci0JcEFkLT5CdWxrSW5SZXEgPSAwOwotCXBBZC0+QnVsa0luQ29tcGxldGUgPSAwOwotCXBBZC0+QnVsa0luQ29tcGxldGVGYWlsID0gMDsKLQotCS8qcEFkLT5RdWlja1RpbWVyUCA9IDEwMDsgKi8KLQkvKnBBZC0+VHVybkFnZ3JCdWxrSW5Db3VudCA9IDA7ICovCi0JcEFkLT5iVXNiVHhCdWxrQWdncmUgPSAwOwotCi0JLyogaW5pdCBhcyB1bnVzZWQgdmFsdWUgdG8gZW5zdXJlIGRyaXZlciB3aWxsIHNldCB0byBNQ1Ugb25jZS4gKi8KLQlwQWQtPkxlZEluZGljYXRvclN0cmVuZ3RoID0gMHhGRjsKLQotCXBBZC0+Q29tbW9uQ2ZnLk1heFBrdE9uZVR4QnVsayA9IDI7Ci0JcEFkLT5Db21tb25DZmcuVHhCdWxrRmFjdG9yID0gMTsKLQlwQWQtPkNvbW1vbkNmZy5SeEJ1bGtGYWN0b3IgPSAxOwotCi0JcEFkLT5Db21tb25DZmcuVHhQb3dlciA9IDEwMDsJLyptVyAqLwotCi0JTmRpc1plcm9NZW1vcnkoJnBBZC0+Q29tbW9uQ2ZnLklPVGVzdFBhcm0sCi0JCSAgICAgICBzaXplb2YocEFkLT5Db21tb25DZmcuSU9UZXN0UGFybSkpOwotI2VuZGlmIC8qIFJUTVBfTUFDX1VTQiAvLyAqLwotCi0JZm9yIChrZXlfaW5kZXggPSAwOyBrZXlfaW5kZXggPCBTSEFSRV9LRVlfTlVNOyBrZXlfaW5kZXgrKykgewotCQlmb3IgKGJzc19pbmRleCA9IDA7IGJzc19pbmRleCA8IE1BWF9NQlNTSURfTlVNOyBic3NfaW5kZXgrKykgewotCQkJcEFkLT5TaGFyZWRLZXlbYnNzX2luZGV4XVtrZXlfaW5kZXhdLktleUxlbiA9IDA7Ci0JCQlwQWQtPlNoYXJlZEtleVtic3NfaW5kZXhdW2tleV9pbmRleF0uQ2lwaGVyQWxnID0KLQkJCSAgICBDSVBIRVJfTk9ORTsKLQkJfQotCX0KLQotCXBBZC0+RWVwcm9tQWNjZXNzID0gRkFMU0U7Ci0KLQlwQWQtPkFudGVubmEud29yZCA9IDA7Ci0JcEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXID0gQldfMjA7Ci0KLQlwQWQtPkxlZENudGwud29yZCA9IDA7Ci0jaWZkZWYgUlRNUF9NQUNfUENJCi0JcEFkLT5MZWRJbmRpY2F0b3JTdHJlbmd0aCA9IDA7Ci0JcEFkLT5STG5rQ3RybE9mZnNldCA9IDA7Ci0JcEFkLT5Ib3N0TG5rQ3RybE9mZnNldCA9IDA7Ci0JcEFkLT5TdGFDZmcuUFNDb250cm9sLmZpZWxkLkVuYWJsZU5ld1BTID0gVFJVRTsKLQlwQWQtPkNoZWNrRG1hQnVzeUNvdW50ID0gMDsKLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLQotCXBBZC0+YkF1dG9UeEFnY0EgPSBGQUxTRTsJLyogRGVmYXVsdCBpcyBPRkYgKi8KLQlwQWQtPmJBdXRvVHhBZ2NHID0gRkFMU0U7CS8qIERlZmF1bHQgaXMgT0ZGICovCi0JcEFkLT5SZkljVHlwZSA9IFJGSUNfMjgyMDsKLQotCS8qIEluaXQgdGltZXIgZm9yIHJlc2V0IGNvbXBsZXRlIGV2ZW50ICovCi0JcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPSAxOwotCXBBZC0+YkZvcmNlUHJpbnRUWCA9IEZBTFNFOwotCXBBZC0+YkZvcmNlUHJpbnRSWCA9IEZBTFNFOwotCXBBZC0+YlN0YUZpZm9UZXN0ID0gRkFMU0U7Ci0JcEFkLT5iUHJvdGVjdGlvblRlc3QgPSBGQUxTRTsKLQlwQWQtPkNvbW1vbkNmZy5Ec2lmcyA9IDEwOwkvKiBpbiB1bml0cyBvZiB1c2VjICovCi0JcEFkLT5Db21tb25DZmcuVHhQb3dlciA9IDEwMDsJLyptVyAqLwotCXBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID0gMHhmZmZmZmZmZjsJLyogQVVUTyAqLwotCXBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJEZWZhdWx0ID0gMHhmZmZmZmZmZjsJLyogQVVUTyAqLwotCXBBZC0+Q29tbW9uQ2ZnLlR4UHJlYW1ibGUgPSBSdDgwMl8xMVByZWFtYmxlQXV0bzsJLyogdXNlIExvbmcgcHJlYW1ibGUgb24gVFggYnkgZGVmYXV0ICovCi0JcEFkLT5Db21tb25DZmcuYlVzZVplcm9Ub0Rpc2FibGVGcmFnbWVudCA9IEZBTFNFOwotCXBBZC0+Q29tbW9uQ2ZnLlJ0c1RocmVzaG9sZCA9IDIzNDc7Ci0JcEFkLT5Db21tb25DZmcuRnJhZ21lbnRUaHJlc2hvbGQgPSAyMzQ2OwotCXBBZC0+Q29tbW9uQ2ZnLlVzZUJHUHJvdGVjdGlvbiA9IDA7CS8qIDA6IEFVVE8gKi8KLQlwQWQtPkNvbW1vbkNmZy5iRW5hYmxlVHhCdXJzdCA9IFRSVUU7CS8qMDsgKi8KLQlwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID0gMHhmZjsJLyogdW5rbm93biAqLwotCXBBZC0+Q29tbW9uQ2ZnLkJhbmRTdGF0ZSA9IFVOS05PV05fQkFORDsKLQlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5DU1BlcmlvZCA9IDEwOwotCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LkNTQ291bnQgPSAwOwotCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LlJETW9kZSA9IFJEX05PUk1BTF9NT0RFOwotCi0JcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuQ2hNb3ZpbmdUaW1lID0gNjU7Ci0JcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuTG9uZ1B1bHNlUmFkYXJUaCA9IDM7Ci0JcEFkLT5Db21tb25DZmcuYkFQU0RDYXBhYmxlID0gRkFMU0U7Ci0JcEFkLT5Db21tb25DZmcuYk5lZWRTZW5kVHJpZ2dlckZyYW1lID0gRkFMU0U7Ci0JcEFkLT5Db21tb25DZmcuVHJpZ2dlclRpbWVyQ291bnQgPSAwOwotCXBBZC0+Q29tbW9uQ2ZnLmJBUFNERm9yY2VQb3dlclNhdmUgPSBGQUxTRTsKLQlwQWQtPkNvbW1vbkNmZy5iQ291bnRyeUZsYWcgPSBGQUxTRTsKLQlwQWQtPkNvbW1vbkNmZy5UeFN0cmVhbSA9IDA7Ci0JcEFkLT5Db21tb25DZmcuUnhTdHJlYW0gPSAwOwotCi0JTmRpc1plcm9NZW1vcnkoJnBBZC0+QmVhY29uVHhXSSwgc2l6ZW9mKHBBZC0+QmVhY29uVHhXSSkpOwotCi0JTmRpc1plcm9NZW1vcnkoJnBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eSwKLQkJICAgICAgIHNpemVvZihwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkpKTsKLQlwQWQtPkhUQ0VuYWJsZSA9IEZBTFNFOwotCXBBZC0+YkJyb2FkQ29tSFQgPSBGQUxTRTsKLQlwQWQtPkNvbW1vbkNmZy5iUmRnID0gRkFMU0U7Ci0KLQlOZGlzWmVyb01lbW9yeSgmcEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLAotCQkgICAgICAgc2l6ZW9mKHBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mbykpOwotCXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5NTVBTbW9kZSA9IE1NUFNfRU5BQkxFOwotCXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5NcGR1RGVuc2l0eSA9IDA7Ci0JcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlBvbGljeSA9IElNTUVEX0JBOwotCXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5SeEJBV2luTGltaXQgPSA2NDsJLyozMjsgKi8KLQlwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuVHhCQVdpbkxpbWl0ID0gNjQ7CS8qMzI7ICovCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIi0tPiBVc2VyQ2ZnSW5pdC4gQkFDYXBhYmlsaXR5ID0gMHgleFxuIiwKLQkJICBwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkud29yZCkpOwotCi0JcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLkF1dG9CQSA9IEZBTFNFOwotCUJBVGFibGVJbml0KHBBZCwgJnBBZC0+QkFUYWJsZSk7Ci0KLQlwQWQtPkNvbW1vbkNmZy5iRXh0Q2hhbm5lbFN3aXRjaEFubm91bmNlbWVudCA9IDE7Ci0JcEFkLT5Db21tb25DZmcuYkhUUHJvdGVjdCA9IDE7Ci0JcEFkLT5Db21tb25DZmcuYk1JTU9QU0VuYWJsZSA9IFRSVUU7Ci0JLyoyMDA4LzExLzA1OktIIGFkZCB0byBzdXBwb3J0IEFudGVubmEgcG93ZXItc2F2aW5nIG9mIEFQPC0tICovCi0JcEFkLT5Db21tb25DZmcuYkdyZWVuQVBFbmFibGUgPSBGQUxTRTsKLQkvKjIwMDgvMTEvMDU6S0ggYWRkIHRvIHN1cHBvcnQgQW50ZW5uYSBwb3dlci1zYXZpbmcgb2YgQVAtLT4gKi8KLQlwQWQtPkNvbW1vbkNmZy5iQkFEZWNsaW5lID0gRkFMU0U7Ci0JcEFkLT5Db21tb25DZmcuYkRpc2FibGVSZW9yZGVyaW5nID0gRkFMU0U7Ci0KLQlpZiAocEFkLT5NQUNWZXJzaW9uID09IDB4Mjg3MjAyMDApIHsKLQkJcEFkLT5Db21tb25DZmcuVHhCQVNpemUgPSAxMzsJLypieSBKZXJyeSByZWNvbW1lbmQgKi8KLQl9IGVsc2UgewotCQlwQWQtPkNvbW1vbkNmZy5UeEJBU2l6ZSA9IDc7Ci0JfQotCi0JcEFkLT5Db21tb25DZmcuUkVHQkFDYXBhYmlsaXR5LndvcmQgPSBwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkud29yZDsKLQotCS8qcEFkLT5Db21tb25DZmcuSFRQaHlNb2RlLmZpZWxkLkJXID0gQldfMjA7ICovCi0JLypwQWQtPkNvbW1vbkNmZy5IVFBoeU1vZGUuZmllbGQuTUNTID0gTUNTX0FVVE87ICovCi0JLypwQWQtPkNvbW1vbkNmZy5IVFBoeU1vZGUuZmllbGQuU2hvcnRHSSA9IEdJXzgwMDsgKi8KLQkvKnBBZC0+Q29tbW9uQ2ZnLkhUUGh5TW9kZS5maWVsZC5TVEJDID0gU1RCQ19OT05FOyAqLwotCXBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZSA9IFJBVEVfNjsKLQotCXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NQ1MgPSBNQ1NfUkFURV82OwotCXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5CVyA9IEJXXzIwOwotCXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NT0RFID0gTU9ERV9PRkRNOwotCi0JcEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kID0gMTAwOwkvKiBpbiBtU2VjICovCi0KLQkvKiAqLwotCS8qIHBhcnQgSUkuIGluaXRpYWxpemUgU1RBIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gKi8KLQkvKiAqLwotCXsKLQkJUlhfRklMVEVSX1NFVF9GTEFHKHBBZCwgZlJYX0ZJTFRFUl9BQ0NFUFRfRElSRUNUKTsKLQkJUlhfRklMVEVSX0NMRUFSX0ZMQUcocEFkLCBmUlhfRklMVEVSX0FDQ0VQVF9NVUxUSUNBU1QpOwotCQlSWF9GSUxURVJfU0VUX0ZMQUcocEFkLCBmUlhfRklMVEVSX0FDQ0VQVF9CUk9BRENBU1QpOwotCQlSWF9GSUxURVJfU0VUX0ZMQUcocEFkLCBmUlhfRklMVEVSX0FDQ0VQVF9BTExfTVVMVElDQVNUKTsKLQotCQlwQWQtPlN0YUNmZy5Qc20gPSBQV1JfQUNUSVZFOwotCi0JCXBBZC0+U3RhQ2ZnLk9yaWdXZXBTdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbkRpc2FibGVkOwotCQlwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb25EaXNhYmxlZDsKLQkJcEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbkRpc2FibGVkOwotCQlwQWQtPlN0YUNmZy5iTWl4Q2lwaGVyID0gRkFMU0U7Ci0JCXBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCA9IDA7Ci0KLQkJLyogODAyLjF4IHBvcnQgY29udHJvbCAqLwotCQlwQWQtPlN0YUNmZy5Qcml2YWN5RmlsdGVyID0gTmRpczgwMl8xMVByaXZGaWx0ZXI4MDIxeFdFUDsKLQkJcEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQgPSBXUEFfODAyXzFYX1BPUlRfTk9UX1NFQ1VSRUQ7Ci0JCXBBZC0+U3RhQ2ZnLkxhc3RNaWNFcnJvclRpbWUgPSAwOwotCQlwQWQtPlN0YUNmZy5NaWNFcnJDbnQgPSAwOwotCQlwQWQtPlN0YUNmZy5iQmxvY2tBc3NvYyA9IEZBTFNFOwotCQlwQWQtPlN0YUNmZy5XcGFTdGF0ZSA9IFNTX05PVFVTRTsKLQotCQlwQWQtPkNvbW1vbkNmZy5OZGlzUmFkaW9TdGF0ZU9mZiA9IEZBTFNFOwkvKiBOZXcgdG8gc3VwcG9ydCBtaWNyb3NvZnQgZGlzYWJsZSByYWRpbyB3aXRoIE9JRCBjb21tYW5kICovCi0KLQkJcEFkLT5TdGFDZmcuUnNzaVRyaWdnZXIgPSAwOwotCQlOZGlzWmVyb01lbW9yeSgmcEFkLT5TdGFDZmcuUnNzaVNhbXBsZSwgc2l6ZW9mKHN0cnVjdCBydF9yc3NpX3NhbXBsZSkpOwotCQlwQWQtPlN0YUNmZy5Sc3NpVHJpZ2dlck1vZGUgPQotCQkgICAgUlNTSV9UUklHR0VSRURfVVBPTl9CRUxPV19USFJFU0hPTEQ7Ci0JCXBBZC0+U3RhQ2ZnLkF0aW1XaW4gPSAwOwotCQlwQWQtPlN0YUNmZy5EZWZhdWx0TGlzdGVuQ291bnQgPSAzOwkvKmRlZmF1bHQgbGlzdGVuIGNvdW50OyAqLwotCQlwQWQtPlN0YUNmZy5Cc3NUeXBlID0gQlNTX0lORlJBOwkvKiBCU1NfSU5GUkEgb3IgQlNTX0FESE9DIG9yIEJTU19NT05JVE9SICovCi0JCXBBZC0+U3RhQ2ZnLmJTY2FuUmVxSXNGcm9tV2ViVUkgPSBGQUxTRTsKLQkJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSk7Ci0JCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1dBS0VVUF9OT1cpOwotCi0JCXBBZC0+U3RhQ2ZnLmJBdXRvVHhSYXRlU3dpdGNoID0gVFJVRTsKLQkJcEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPSBNQ1NfQVVUTzsKLQl9Ci0KLSNpZmRlZiBQQ0lFX1BTX1NVUFBPUlQKLQlwQWQtPmJydDMweHhCYW5NY3VDbWQgPSBGQUxTRTsKLQlwQWQtPmIzMDkwRVNwZWNpYWxDaGlwID0gRkFMU0U7Ci0vKktIIERlYnVnOnRoZSBmb2xsb3dpbmcgbXVzdCBiZSByZW1vdmVkICovCi0JcEFkLT5TdGFDZmcuUFNDb250cm9sLmZpZWxkLnJ0MzB4eFBvd2VyTW9kZSA9IDM7Ci0JcEFkLT5TdGFDZmcuUFNDb250cm9sLmZpZWxkLnJ0MzB4eEZvcmNlQVNQTVRlc3QgPSAwOwotCXBBZC0+U3RhQ2ZnLlBTQ29udHJvbC5maWVsZC5ydDMweHhGb2xsb3dIb3N0QVNQTSA9IDE7Ci0jZW5kaWYgLyogUENJRV9QU19TVVBQT1JUIC8vICovCi0KLQkvKiBnbG9iYWwgdmFyaWFibGVzIG1YWFhYIHVzZWQgaW4gTUFDIHByb3RvY29sIHN0YXRlIG1hY2hpbmVzICovCi0JT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1JFQ0VJVkVfRFRJTSk7Ci0JT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQURIT0NfT04pOwotCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0lORlJBX09OKTsKLQotCS8qIFBIWSBzcGVjaWZpY2F0aW9uICovCi0JcEFkLT5Db21tb25DZmcuUGh5TW9kZSA9IFBIWV8xMUJHX01JWEVEOwkvKiBkZWZhdWx0IFBIWSBtb2RlICovCi0JT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfU0hPUlRfUFJFQU1CTEVfSU5VU0VEKTsJLyogQ0NLIHVzZSBsb25nIHByZWFtYmxlICovCi0KLQl7Ci0JCS8qIHVzZXIgZGVzaXJlZCBwb3dlciBtb2RlICovCi0JCXBBZC0+U3RhQ2ZnLldpbmRvd3NQb3dlck1vZGUgPSBOZGlzODAyXzExUG93ZXJNb2RlQ0FNOwotCQlwQWQtPlN0YUNmZy5XaW5kb3dzQmF0dGVyeVBvd2VyTW9kZSA9IE5kaXM4MDJfMTFQb3dlck1vZGVDQU07Ci0JCXBBZC0+U3RhQ2ZnLmJXaW5kb3dzQUNDQU1FbmFibGUgPSBGQUxTRTsKLQotCQlSVE1QSW5pdFRpbWVyKHBBZCwgJnBBZC0+U3RhQ2ZnLlN0YVF1aWNrUmVzcG9uZUZvclJhdGVVcFRpbWVyLAotCQkJICAgICAgR0VUX1RJTUVSX0ZVTkNUSU9OKFN0YVF1aWNrUmVzcG9uZUZvclJhdGVVcEV4ZWMpLAotCQkJICAgICAgcEFkLCBGQUxTRSk7Ci0JCXBBZC0+U3RhQ2ZnLlN0YVF1aWNrUmVzcG9uZUZvclJhdGVVcFRpbWVyUnVubmluZyA9IEZBTFNFOwotCi0JCS8qIFBhdGNoIGZvciBOZHRlc3QgKi8KLQkJcEFkLT5TdGFDZmcuU2NhbkNudCA9IDA7Ci0KLQkJcEFkLT5TdGFDZmcuYkh3UmFkaW8gPSBUUlVFOwkvKiBEZWZhdWx0IEhhcmR3YXJlIFJhZGlvIHN0YXR1cyBpcyBPbiAqLwotCQlwQWQtPlN0YUNmZy5iU3dSYWRpbyA9IFRSVUU7CS8qIERlZmF1bHQgU29mdHdhcmUgUmFkaW8gc3RhdHVzIGlzIE9uICovCi0JCXBBZC0+U3RhQ2ZnLmJSYWRpbyA9IFRSVUU7CS8qIGJId1JhZGlvICYmIGJTd1JhZGlvICovCi0JCXBBZC0+U3RhQ2ZnLmJIYXJkd2FyZVJhZGlvID0gRkFMU0U7CS8qIERlZmF1bHQgaXMgT0ZGICovCi0JCXBBZC0+U3RhQ2ZnLmJTaG93SGlkZGVuU1NJRCA9IEZBTFNFOwkvKiBEZWZhdWx0IG5vIHNob3cgKi8KLQotCQkvKiBOaXRybyBtb2RlIGNvbnRyb2wgKi8KLQkJcEFkLT5TdGFDZmcuYkF1dG9SZWNvbm5lY3QgPSBUUlVFOwotCi0JCS8qIFNhdmUgdGhlIGluaXQgdGltZSBhcyBsYXN0IHNjYW4gdGltZSwgdGhlIHN5c3RlbSBzaG91bGQgZG8gc2NhbiBhZnRlciAyIHNlY29uZHMuICovCi0JCS8qIFRoaXMgcGF0Y2ggaXMgZm9yIGRyaXZlciB3YWtlIHVwIGZyb20gc3RhbmRieSBtb2RlLCBzeXN0ZW0gd2lsbCBkbyBzY2FuIHJpZ2h0IGF3YXkuICovCi0JCU5kaXNHZXRTeXN0ZW1VcFRpbWUoJnBBZC0+U3RhQ2ZnLkxhc3RTY2FuVGltZSk7Ci0JCWlmIChwQWQtPlN0YUNmZy5MYXN0U2NhblRpbWUgPiAxMCAqIE9TX0haKQotCQkJcEFkLT5TdGFDZmcuTGFzdFNjYW5UaW1lIC09ICgxMCAqIE9TX0haKTsKLQotCQlOZGlzWmVyb01lbW9yeShwQWQtPm5pY2tuYW1lLCBJV19FU1NJRF9NQVhfU0laRSArIDEpOwotI2lmZGVmIFJUTVBfTUFDX1BDSQotCQlzcHJpbnRmKChjaGFyICopcEFkLT5uaWNrbmFtZSwgIlJUMjg2MFNUQSIpOwotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotI2lmZGVmIFJUTVBfTUFDX1VTQgotCQlzcHJpbnRmKChjaGFyICopcEFkLT5uaWNrbmFtZSwgIlJUMjg3MFNUQSIpOwotI2VuZGlmIC8qIFJUTVBfTUFDX1VTQiAvLyAqLwotCQlSVE1QSW5pdFRpbWVyKHBBZCwgJnBBZC0+U3RhQ2ZnLldwYURpc2Fzc29jQW5kQmxvY2tBc3NvY1RpbWVyLAotCQkJICAgICAgR0VUX1RJTUVSX0ZVTkNUSU9OKFdwYURpc2Fzc29jQXBBbmRCbG9ja0Fzc29jKSwKLQkJCSAgICAgIHBBZCwgRkFMU0UpOwotCQlwQWQtPlN0YUNmZy5JRUVFODAyMVggPSBGQUxTRTsKLQkJcEFkLT5TdGFDZmcuSUVFRTgwMjF4X3JlcXVpcmVkX2tleXMgPSBGQUxTRTsKLQkJcEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQID0gV1BBX1NVUFBMSUNBTlRfRElTQUJMRTsKLQkJcEFkLT5TdGFDZmcuYlJTTl9JRV9Gcm9tV3BhU3VwcGxpY2FudCA9IEZBTFNFOwotCQlwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgPSBXUEFfU1VQUExJQ0FOVF9FTkFCTEU7Ci0KLQkJTmRpc1plcm9NZW1vcnkocEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlciwgOCk7Ci0KLQkJcEFkLT5TdGFDZmcuYkF1dG9Db25uZWN0QnlCc3NpZCA9IEZBTFNFOwotCQlwQWQtPlN0YUNmZy5CZWFjb25Mb3N0VGltZSA9IEJFQUNPTl9MT1NUX1RJTUU7Ci0JCU5kaXNaZXJvTWVtb3J5KHBBZC0+U3RhQ2ZnLldwYVBhc3NQaHJhc2UsIDY0KTsKLQkJcEFkLT5TdGFDZmcuV3BhUGFzc1BocmFzZUxlbiA9IDA7Ci0JCXBBZC0+U3RhQ2ZnLmJBdXRvUm9hbWluZyA9IEZBTFNFOwotCQlwQWQtPlN0YUNmZy5iRm9yY2VUeEJ1cnN0ID0gRkFMU0U7Ci0JfQotCi0JLyogRGVmYXVsdCBmb3IgZXh0cmEgaW5mb3JtYXRpb24gaXMgbm90IHZhbGlkICovCi0JcEFkLT5FeHRyYUluZm8gPSBFWFRSQV9JTkZPX0NMRUFSOwotCi0JLyogRGVmYXVsdCBDb25maWcgY2hhbmdlIGZsYWcgKi8KLQlwQWQtPmJDb25maWdDaGFuZ2VkID0gRkFMU0U7Ci0KLQkvKiAqLwotCS8qIHBhcnQgSUlJLiBBUCBjb25maWd1cmF0aW9ucyAqLwotCS8qICovCi0KLQkvKiAqLwotCS8qIHBhcnQgSVYuIG90aGVycyAqLwotCS8qICovCi0JLyogZHluYW1pYyBCQlAgUjY2OnNlbnNpYml0eSB0dW5pbmcgdG8gb3ZlcmNvbWUgYmFja2dyb3VuZCBub2lzZSAqLwotCXBBZC0+QmJwVHVuaW5nLmJFbmFibGUgPSBUUlVFOwotCXBBZC0+QmJwVHVuaW5nLkZhbHNlQ2NhTG93ZXJUaHJlc2hvbGQgPSAxMDA7Ci0JcEFkLT5CYnBUdW5pbmcuRmFsc2VDY2FVcHBlclRocmVzaG9sZCA9IDUxMjsKLQlwQWQtPkJicFR1bmluZy5SNjZEZWx0YSA9IDQ7Ci0JcEFkLT5NbG1lLmJFbmFibGVBdXRvQW50ZW5uYUNoZWNrID0gVFJVRTsKLQotCS8qICovCi0JLyogQWxzbyBpbml0aWFsIFI2NkN1cnJlbnRWYWx1ZSwgUlRVU0JSZXN1bWVNc2R1VHJhbnNtaXNzaW9uIG1pZ2h0IHVzZSB0aGlzIHZhbHVlLiAqLwotCS8qIGlmIG5vdCBpbml0aWFsIHRoaXMgdmFsdWUsIHRoZSBkZWZhdWx0IHZhbHVlIHdpbGwgYmUgMC4gKi8KLQkvKiAqLwotCXBBZC0+QmJwVHVuaW5nLlI2NkN1cnJlbnRWYWx1ZSA9IDB4Mzg7Ci0KLQlwQWQtPkJicDk0ID0gQkJQUjk0X0RFRkFVTFQ7Ci0JcEFkLT5CYnBGb3JDQ0sgPSBGQUxTRTsKLQotCS8qIERlZmF1bHQgaXMgRkFMU0UgZm9yIHRlc3QgYml0IDEgKi8KLQkvKnBBZC0+YlRlc3QxID0gRkFMU0U7ICovCi0KLQkvKiBpbml0aWFsaXplIE1BQyB0YWJsZSBhbmQgYWxsb2NhdGUgc3BpbiBsb2NrICovCi0JTmRpc1plcm9NZW1vcnkoJnBBZC0+TWFjVGFiLCBzaXplb2Yoc3RydWN0IHJ0X21hY190YWJsZSkpOwotCUluaXRpYWxpemVRdWV1ZUhlYWRlcigmcEFkLT5NYWNUYWIuTWNhc3RQc1F1ZXVlKTsKLQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5NYWNUYWJMb2NrKTsKLQotCS8qUlRNUEluaXRUaW1lcihwQWQsICZwQWQtPlJFQ0JBVGltZXIsIFJFQ0JBVGltZXJUaW1lb3V0LCBwQWQsIFRSVUUpOyAqLwotCS8qUlRNUFNldFRpbWVyKCZwQWQtPlJFQ0JBVGltZXIsIFJFT1JERVJfRVhFQ19JTlRWKTsgKi8KLQotCXBBZC0+Q29tbW9uQ2ZnLmJXaUZpVGVzdCA9IEZBTFNFOwotI2lmZGVmIFJUTVBfTUFDX1BDSQotCXBBZC0+YlBDSWNsa09mZiA9IEZBTFNFOwotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotCi0JUlRNUF9TRVRfUFNGTEFHKHBBZCwgZlJUTVBfUFNfQ0FOX0dPX1NMRUVQKTsKLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8LS0gVXNlckNmZ0luaXRcbiIpKTsKLX0KLQotLyogSVJRTCA9IFBBU1NJVkVfTEVWRUwgKi8KLS8qICovCi0vKiAgRlVOQ1RJT046IEF0b0goY2hhciAqLCB1OCAqLCBpbnQpICovCi0vKiAqLwotLyogIFBVUlBPU0U6ICBDb252ZXJ0cyBhc2NpaSBzdHJpbmcgdG8gbmV0d29yayBvcmRlciBoZXggKi8KLS8qICovCi0vKiAgUEFSQU1FVEVSUzogKi8KLS8qICAgIHNyYyAgICAtIHBvaW50ZXIgdG8gaW5wdXQgYXNjaWkgc3RyaW5nICovCi0vKiAgICBkZXN0ICAgLSBwb2ludGVyIHRvIG91dHB1dCBoZXggKi8KLS8qICAgIGRlc3RsZW4gLSBzaXplIG9mIGRlc3QgKi8KLS8qICovCi0vKiAgQ09NTUVOVFM6ICovCi0vKiAqLwotLyogICAgMiBhc2NpaSBieXRlcyBtYWtlIGEgaGV4IGJ5dGUgc28gbXVzdCBwdXQgMXN0IGFzY2lpIGJ5dGUgb2YgcGFpciAqLwotLyogICAgaW50byB1cHBlciBuaWJibGUgYW5kIDJuZCBhc2NpaSBieXRlIG9mIHBhaXIgaW50byBsb3dlciBuaWJibGUuICovCi0vKiAqLwotLyogSVJRTCA9IFBBU1NJVkVfTEVWRUwgKi8KLQotdm9pZCBBdG9IKGNoYXIgKnNyYywgdTggKmRlc3QsIGludCBkZXN0bGVuKQotewotCWNoYXIgKnNyY3B0cjsKLQl1OCAqZGVzdFRlbXA7Ci0KLQlzcmNwdHIgPSBzcmM7Ci0JZGVzdFRlbXAgPSAodTggKilkZXN0OwotCi0Jd2hpbGUgKGRlc3RsZW4tLSkgewotCQkqZGVzdFRlbXAgPSBoZXhfdG9fYmluKCpzcmNwdHIrKykgPDwgNDsJLyogUHV0IDFzdCBhc2NpaSBieXRlIGluIHVwcGVyIG5pYmJsZS4gKi8KLQkJKmRlc3RUZW1wICs9IGhleF90b19iaW4oKnNyY3B0cisrKTsJLyogQWRkIDJuZCBhc2NpaSBieXRlIHRvIGFib3ZlLiAqLwotCQlkZXN0VGVtcCsrOwotCX0KLX0KLQotLyorKytNYXJrIGJ5IHNoaWFuZywgbm90IHVzZSBub3csIG5lZWQgdG8gcmVtb3ZlIGFmdGVyIGNvbmZpcm0gKi8KLS8qLS0tTWFyayBieSBzaGlhbmcsIG5vdCB1c2Ugbm93LCBuZWVkIHRvIHJlbW92ZSBhZnRlciBjb25maXJtICovCi0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCQlJbml0IHRpbWVyIG9iamVjdHMKLQotCUFyZ3VtZW50czoKLQkJcEFkCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgotCQlwVGltZXIJCQkJVGltZXIgc3RydWN0dXJlCi0JCXBUaW1lckZ1bmMJCQlGdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGltZXIgZXhwaXJlZAotCQlSZXBlYXQJCQkJVHVyZSBmb3IgcGVyaW9kIHRpbWVyCi0KLQlSZXR1cm4gVmFsdWU6Ci0JCU5vbmUKLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFJUTVBJbml0VGltZXIoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICBzdHJ1Y3QgcnRfcmFsaW5rX3RpbWVyICpwVGltZXIsCi0JCSAgIHZvaWQgKnBUaW1lckZ1bmMsIHZvaWQgKnBEYXRhLCBJTiBCT09MRUFOIFJlcGVhdCkKLXsKLQkvKiAqLwotCS8qIFNldCBWYWxpZCB0byBUUlVFIGZvciBsYXRlciB1c2VkLiAqLwotCS8qIEl0IHdpbGwgY3Jhc2ggaWYgd2UgY2FuY2VsIGEgdGltZXIgb3Igc2V0IGEgdGltZXIgKi8KLQkvKiB0aGF0IHdlIGhhdmVuJ3QgaW5pdGlhbGl6ZSBiZWZvcmUuICovCi0JLyogKi8KLQlwVGltZXItPlZhbGlkID0gVFJVRTsKLQotCXBUaW1lci0+UGVyaW9kaWNUeXBlID0gUmVwZWF0OwotCXBUaW1lci0+U3RhdGUgPSBGQUxTRTsKLQlwVGltZXItPmNvb2tpZSA9ICh1bnNpZ25lZCBsb25nKXBEYXRhOwotCi0jaWZkZWYgUlRNUF9USU1FUl9UQVNLX1NVUFBPUlQKLQlwVGltZXItPnBBZCA9IHBBZDsKLSNlbmRpZiAvKiBSVE1QX1RJTUVSX1RBU0tfU1VQUE9SVCAvLyAqLwotCi0JUlRNUF9PU19Jbml0X1RpbWVyKHBBZCwgJnBUaW1lci0+VGltZXJPYmosIHBUaW1lckZ1bmMsICh2b2lkICopcFRpbWVyKTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JCUluaXQgdGltZXIgb2JqZWN0cwotCi0JQXJndW1lbnRzOgotCQlwVGltZXIJCQkJVGltZXIgc3RydWN0dXJlCi0JCVZhbHVlCQkJCVRpbWVyIHZhbHVlIGluIG1pbGxpc2Vjb25kcwotCi0JUmV0dXJuIFZhbHVlOgotCQlOb25lCi0KLQlOb3RlOgotCQlUbyB1c2UgdGhpcyByb3V0aW5lLCBtdXN0IGNhbGwgUlRNUEluaXRUaW1lciBiZWZvcmUuCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFJUTVBTZXRUaW1lcihzdHJ1Y3QgcnRfcmFsaW5rX3RpbWVyICpwVGltZXIsIHVuc2lnbmVkIGxvbmcgVmFsdWUpCi17Ci0JaWYgKHBUaW1lci0+VmFsaWQpIHsKLQkJcFRpbWVyLT5UaW1lclZhbHVlID0gVmFsdWU7Ci0JCXBUaW1lci0+U3RhdGUgPSBGQUxTRTsKLQkJaWYgKHBUaW1lci0+UGVyaW9kaWNUeXBlID09IFRSVUUpIHsKLQkJCXBUaW1lci0+UmVwZWF0ID0gVFJVRTsKLQkJCVJUTVBfU2V0UGVyaW9kaWNUaW1lcigmcFRpbWVyLT5UaW1lck9iaiwgVmFsdWUpOwotCQl9IGVsc2UgewotCQkJcFRpbWVyLT5SZXBlYXQgPSBGQUxTRTsKLQkJCVJUTVBfT1NfQWRkX1RpbWVyKCZwVGltZXItPlRpbWVyT2JqLCBWYWx1ZSk7Ci0JCX0KLQl9IGVsc2UgewotCQlEQkdQUklOVF9FUlIoIlJUTVBTZXRUaW1lciBmYWlsZWQsIFRpbWVyIGhhc24ndCBiZWVuIGluaXRpYWxpemUhXG4iKTsKLQl9Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCQlJbml0IHRpbWVyIG9iamVjdHMKLQotCUFyZ3VtZW50czoKLQkJcFRpbWVyCQkJCVRpbWVyIHN0cnVjdHVyZQotCQlWYWx1ZQkJCQlUaW1lciB2YWx1ZSBpbiBtaWxsaXNlY29uZHMKLQotCVJldHVybiBWYWx1ZToKLQkJTm9uZQotCi0JTm90ZToKLQkJVG8gdXNlIHRoaXMgcm91dGluZSwgbXVzdCBjYWxsIFJUTVBJbml0VGltZXIgYmVmb3JlLgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBSVE1QTW9kVGltZXIoc3RydWN0IHJ0X3JhbGlua190aW1lciAqcFRpbWVyLCB1bnNpZ25lZCBsb25nIFZhbHVlKQotewotCUJPT0xFQU4gQ2FuY2VsOwotCi0JaWYgKHBUaW1lci0+VmFsaWQpIHsKLQkJcFRpbWVyLT5UaW1lclZhbHVlID0gVmFsdWU7Ci0JCXBUaW1lci0+U3RhdGUgPSBGQUxTRTsKLQkJaWYgKHBUaW1lci0+UGVyaW9kaWNUeXBlID09IFRSVUUpIHsKLQkJCVJUTVBDYW5jZWxUaW1lcihwVGltZXIsICZDYW5jZWwpOwotCQkJUlRNUFNldFRpbWVyKHBUaW1lciwgVmFsdWUpOwotCQl9IGVsc2UgewotCQkJUlRNUF9PU19Nb2RfVGltZXIoJnBUaW1lci0+VGltZXJPYmosIFZhbHVlKTsKLQkJfQotCX0gZWxzZSB7Ci0JCURCR1BSSU5UX0VSUigiUlRNUE1vZFRpbWVyIGZhaWxlZCwgVGltZXIgaGFzbid0IGJlZW4gaW5pdGlhbGl6ZSFcbiIpOwotCX0KLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JCUNhbmNlbCB0aW1lciBvYmplY3RzCi0KLQlBcmd1bWVudHM6Ci0JCUFkYXB0ZXIJCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCi0KLQlSZXR1cm4gVmFsdWU6Ci0JCU5vbmUKLQotCUlSUUwgPSBQQVNTSVZFX0xFVkVMCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQlOb3RlOgotCQkxLikgVG8gdXNlIHRoaXMgcm91dGluZSwgbXVzdCBjYWxsIFJUTVBJbml0VGltZXIgYmVmb3JlLgotCQkyLikgUmVzZXQgTklDIHRvIGluaXRpYWwgc3RhdGUgQVMgSVMgc3lzdGVtIGJvb3QgdXAgdGltZS4KLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgUlRNUENhbmNlbFRpbWVyKHN0cnVjdCBydF9yYWxpbmtfdGltZXIgKnBUaW1lciwgT1VUIEJPT0xFQU4gKiBwQ2FuY2VsbGVkKQotewotCWlmIChwVGltZXItPlZhbGlkKSB7Ci0JCWlmIChwVGltZXItPlN0YXRlID09IEZBTFNFKQotCQkJcFRpbWVyLT5SZXBlYXQgPSBGQUxTRTsKLQotCQlSVE1QX09TX0RlbF9UaW1lcigmcFRpbWVyLT5UaW1lck9iaiwgcENhbmNlbGxlZCk7Ci0KLQkJaWYgKCpwQ2FuY2VsbGVkID09IFRSVUUpCi0JCQlwVGltZXItPlN0YXRlID0gVFJVRTsKLQotI2lmZGVmIFJUTVBfVElNRVJfVEFTS19TVVBQT1JUCi0JCS8qIFdlIG5lZWQgdG8gZ28tdGhyb3VnaCB0aGUgVGltZXJRIHRvIGZpbmRvdXQgdGhpcyB0aW1lciBoYW5kbGVyIGFuZCByZW1vdmUgaXQgaWYgKi8KLQkJLyogICAgICAgICAgICAgIGl0J3Mgc3RpbGwgd2FpdGluZyBmb3IgZXhlY3V0aW9uLiAqLwotCQlSdG1wVGltZXJRUmVtb3ZlKHBUaW1lci0+cEFkLCBwVGltZXIpOwotI2VuZGlmIC8qIFJUTVBfVElNRVJfVEFTS19TVVBQT1JUIC8vICovCi0JfSBlbHNlIHsKLQkJREJHUFJJTlRfRVJSKCJSVE1QQ2FuY2VsVGltZXIgZmFpbGVkLCBUaW1lciBoYXNuJ3QgYmVlbiBpbml0aWFsaXplIVxuIik7Ci0JfQotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQkJU2V0IExFRCBTdGF0dXMKLQotCUFyZ3VtZW50czoKLQkJcEFkCQkJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgotCQlTdGF0dXMJCQkJCUxFRCBTdGF0dXMKLQotCVJldHVybiBWYWx1ZToKLQkJTm9uZQotCi0JSVJRTCA9IFBBU1NJVkVfTEVWRUwKLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFJUTVBTZXRMRUQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1OCBTdGF0dXMpCi17Ci0JLyp1bnNpZ25lZCBsb25nICAgICAgICAgICAgICAgICBkYXRhOyAqLwotCXU4IEhpZ2hCeXRlID0gMDsKLQl1OCBMb3dCeXRlOwotCi0JTG93Qnl0ZSA9IHBBZC0+TGVkQ250bC5maWVsZC5MZWRNb2RlICYgMHg3ZjsKLQlzd2l0Y2ggKFN0YXR1cykgewotCWNhc2UgTEVEX0xJTktfRE9XTjoKLQkJSGlnaEJ5dGUgPSAweDIwOwotCQlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4NTAsIDB4ZmYsIExvd0J5dGUsIEhpZ2hCeXRlKTsKLQkJcEFkLT5MZWRJbmRpY2F0b3JTdHJlbmd0aCA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgTEVEX0xJTktfVVA6Ci0JCWlmIChwQWQtPkNvbW1vbkNmZy5DaGFubmVsID4gMTQpCi0JCQlIaWdoQnl0ZSA9IDB4YTA7Ci0JCWVsc2UKLQkJCUhpZ2hCeXRlID0gMHg2MDsKLQkJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDUwLCAweGZmLCBMb3dCeXRlLCBIaWdoQnl0ZSk7Ci0JCWJyZWFrOwotCWNhc2UgTEVEX1JBRElPX09OOgotCQlIaWdoQnl0ZSA9IDB4MjA7Ci0JCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHg1MCwgMHhmZiwgTG93Qnl0ZSwgSGlnaEJ5dGUpOwotCQlicmVhazsKLQljYXNlIExFRF9IQUxUOgotCQlMb3dCeXRlID0gMDsJLyogRHJpdmVyIHNldHMgTUFDIHJlZ2lzdGVyIGFuZCBNQUMgY29udHJvbHMgTEVEICovCi0JY2FzZSBMRURfUkFESU9fT0ZGOgotCQlIaWdoQnl0ZSA9IDA7Ci0JCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHg1MCwgMHhmZiwgTG93Qnl0ZSwgSGlnaEJ5dGUpOwotCQlicmVhazsKLQljYXNlIExFRF9XUFM6Ci0JCUhpZ2hCeXRlID0gMHgxMDsKLQkJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDUwLCAweGZmLCBMb3dCeXRlLCBIaWdoQnl0ZSk7Ci0JCWJyZWFrOwotCWNhc2UgTEVEX09OX1NJVEVfU1VSVkVZOgotCQlIaWdoQnl0ZSA9IDB4MDg7Ci0JCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHg1MCwgMHhmZiwgTG93Qnl0ZSwgSGlnaEJ5dGUpOwotCQlicmVhazsKLQljYXNlIExFRF9QT1dFUl9VUDoKLQkJSGlnaEJ5dGUgPSAweDA0OwotCQlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4NTAsIDB4ZmYsIExvd0J5dGUsIEhpZ2hCeXRlKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJREJHUFJJTlQoUlRfREVCVUdfV0FSTiwKLQkJCSAoIlJUTVBTZXRMRUQ6OlVua25vd24gU3RhdHVzICVkXG4iLCBTdGF0dXMpKTsKLQkJYnJlYWs7Ci0JfQotCi0JLyogKi8KLQkvKiBLZWVwIExFRCBzdGF0dXMgZm9yIExFRCBTaXRlU3VydmV5IG1vZGUuICovCi0JLyogQWZ0ZXIgU2l0ZVN1cnZleSwgd2Ugd2lsbCBzZXQgdGhlIExFRCBtb2RlIHRvIHByZXZpb3VzIHN0YXR1cy4gKi8KLQkvKiAqLwotCWlmICgoU3RhdHVzICE9IExFRF9PTl9TSVRFX1NVUlZFWSkgJiYgKFN0YXR1cyAhPSBMRURfUE9XRVJfVVApKQotCQlwQWQtPkxlZFN0YXR1cyA9IFN0YXR1czsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCJSVE1QU2V0TEVEOjpNb2RlPSVkLEhpZ2hCeXRlPTB4JTAyeCxMb3dCeXRlPTB4JTAyeFxuIiwKLQkJICBwQWQtPkxlZENudGwuZmllbGQuTGVkTW9kZSwgSGlnaEJ5dGUsIExvd0J5dGUpKTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JCVNldCBMRUQgU2lnbmFsIFN0cmVuZ3RoCi0KLQlBcmd1bWVudHM6Ci0JCXBBZAkJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKLQkJRGJtCQkJCQkJU2lnbmFsIFN0cmVuZ3RoCi0KLQlSZXR1cm4gVmFsdWU6Ci0JCU5vbmUKLQotCUlSUUwgPSBQQVNTSVZFX0xFVkVMCi0KLQlOb3RlOgotCQlDYW4gYmUgcnVuIG9uIGFueSBJUlFMIGxldmVsLgotCi0JCUFjY29yZGluZyB0byBNaWNyb3NvZnQgWmVybyBDb25maWcgV2lyZWxlc3MgU2lnbmFsIFN0cmVuZ3RoIGRlZmluaXRpb24gYXMgYmVsb3dzLgotCQk8PSAtOTAgIE5vIFNpZ25hbAotCQk8PSAtODEgIFZlcnkgTG93Ci0JCTw9IC03MSAgTG93Ci0JCTw9IC02NyAgR29vZAotCQk8PSAtNTcgIFZlcnkgR29vZAotCQkgPiAtNTcgIEV4Y2VsbGVudAotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgUlRNUFNldFNpZ25hbExFRChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIElOIE5ESVNfODAyXzExX1JTU0kgRGJtKQotewotCXU4IG5MZWQgPSAwOwotCi0JaWYgKHBBZC0+TGVkQ250bC5maWVsZC5MZWRNb2RlID09IExFRF9NT0RFX1NJR05BTF9TVFJFR1RIKSB7Ci0JCWlmIChEYm0gPD0gLTkwKQotCQkJbkxlZCA9IDA7Ci0JCWVsc2UgaWYgKERibSA8PSAtODEpCi0JCQluTGVkID0gMTsKLQkJZWxzZSBpZiAoRGJtIDw9IC03MSkKLQkJCW5MZWQgPSAzOwotCQllbHNlIGlmIChEYm0gPD0gLTY3KQotCQkJbkxlZCA9IDc7Ci0JCWVsc2UgaWYgKERibSA8PSAtNTcpCi0JCQluTGVkID0gMTU7Ci0JCWVsc2UKLQkJCW5MZWQgPSAzMTsKLQotCQkvKiAqLwotCQkvKiBVcGRhdGUgU2lnbmFsIFN0cmVuZ3RoIHRvIGZpcm13YXJlIGlmIGNoYW5nZWQuICovCi0JCS8qICovCi0JCWlmIChwQWQtPkxlZEluZGljYXRvclN0cmVuZ3RoICE9IG5MZWQpIHsKLQkJCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHg1MSwgMHhmZiwgbkxlZCwKLQkJCQkJICAgICBwQWQtPkxlZENudGwuZmllbGQuUG9sYXJpdHkpOwotCQkJcEFkLT5MZWRJbmRpY2F0b3JTdHJlbmd0aCA9IG5MZWQ7Ci0JCX0KLQl9Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCQlFbmFibGUgUlgKLQotCUFyZ3VtZW50czoKLQkJcEFkCQkJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgotCi0JUmV0dXJuIFZhbHVlOgotCQlOb25lCi0KLQlJUlFMIDw9IERJU1BBVENIX0xFVkVMCi0KLQlOb3RlOgotCQlCZWZvcmUgRW5hYmxlIFJYLCBtYWtlIHN1cmUgeW91IGhhdmUgZW5hYmxlZCBJbnRlcnJ1cHQuCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBSVE1QRW5hYmxlUnhUeChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0vKiAgICAgIFdQRE1BX0dMT19DRkdfU1RSVUMgICAgIEdsb0NmZzsgKi8KLS8qICAgICAgdW5zaWduZWQgbG9uZyAgIGkgPSAwOyAqLwotCXUzMiByeF9maWx0ZXJfZmxhZzsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PiBSVE1QRW5hYmxlUnhUeFxuIikpOwotCi0JLyogRW5hYmxlIFJ4IERNQS4gKi8KLQlSVDI4WFhETUFFbmFibGUocEFkKTsKLQotCS8qIGVuYWJsZSBSWCBvZiBNQUMgYmxvY2sgKi8KLQlpZiAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX0FQKSB7Ci0JCXJ4X2ZpbHRlcl9mbGFnID0gQVBOT1JNQUw7Ci0KLQkJUlRNUF9JT19XUklURTMyKHBBZCwgUlhfRklMVFJfQ0ZHLCByeF9maWx0ZXJfZmxhZyk7CS8qIGVuYWJsZSBSWCBvZiBETUEgYmxvY2sgKi8KLQl9IGVsc2UgewotCQlpZiAocEFkLT5Db21tb25DZmcuUFNQWGxpbmspCi0JCQlyeF9maWx0ZXJfZmxhZyA9IFBTUFhMSU5LOwotCQllbHNlCi0JCQlyeF9maWx0ZXJfZmxhZyA9IFNUQU5PUk1BTDsJLyogU3RhdGlvbiBub3QgZHJvcCBjb250cm9sIGZyYW1lIHdpbGwgZmFpbCBXaUZpIENlcnRpZmljYXRpb24uICovCi0JCVJUTVBfSU9fV1JJVEUzMihwQWQsIFJYX0ZJTFRSX0NGRywgcnhfZmlsdGVyX2ZsYWcpOwotCX0KLQotCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgMHhjKTsKLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8PT0gUlRNUEVuYWJsZVJ4VHhcbiIpKTsKLX0KLQotLyorKytBZGQgYnkgc2hpYW5nLCBtb3ZlIGZyb20gb3MvbGludXgvcnRfbWFpbl9kZXYuYyAqLwotdm9pZCBDZmdJbml0SG9vayhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0JcEFkLT5iQnJvYWRDb21IVCA9IFRSVUU7Ci19Ci0KLWludCBydDI4eHhfaW5pdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCWNoYXIgKnBEZWZhdWx0TWFjLCBjaGFyICpwSG9zdE5hbWUpCi17Ci0JdTMyIGluZGV4OwotCXU4IFRtcFBoeTsKLQlpbnQgU3RhdHVzOwotCXUzMiBNYWNDc3IwID0gMDsKLQotI2lmZGVmIFJUTVBfTUFDX1BDSQotCXsKLQkJLyogSWYgZGlydmVyIGRvZXNuJ3Qgd2FrZSB1cCBmaXJtd2FyZSBoZXJlLCAqLwotCQkvKiBOSUNMb2FkRmlybXdhcmUgd2lsbCBoYW5nIGZvcmV2ZXIgd2hlbiBpbnRlcmZhY2UgaXMgdXAgYWdhaW4uICovCi0JCS8qIFJUMjg2MCBQQ0kgKi8KLQkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSkgJiYKLQkJICAgIE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfUENJRV9ERVZJQ0UpKSB7Ci0JCQlBVVRPX1dBS0VVUF9TVFJVQyBBdXRvV2FrZXVwQ2ZnOwotCQkJQXNpY0ZvcmNlV2FrZXVwKHBBZCwgVFJVRSk7Ci0JCQlBdXRvV2FrZXVwQ2ZnLndvcmQgPSAwOwotCQkJUlRNUF9JT19XUklURTMyKHBBZCwgQVVUT19XQUtFVVBfQ0ZHLAotCQkJCQlBdXRvV2FrZXVwQ2ZnLndvcmQpOwotCQkJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSk7Ci0JCX0KLQl9Ci0jZW5kaWYgLyogUlRNUF9NQUNfUENJIC8vICovCi0KLQkvKiByZXNldCBBZGFwdGVyIGZsYWdzICovCi0JUlRNUF9DTEVBUl9GTEFHUyhwQWQpOwotCi0JLyogSW5pdCBCc3NUYWIgJiBDaGFubmVsSW5mbyB0YWJibGVzIGZvciBhdXRvIGNoYW5uZWwgc2VsZWN0LiAqLwotCi0JLyogQWxsb2NhdGUgQkEgUmVvcmRlcmluZyBtZW1vcnkgKi8KLQliYV9yZW9yZGVyaW5nX3Jlc291cmNlX2luaXQocEFkLCBNQVhfUkVPUkRFUklOR19NUERVX05VTSk7Ci0KLQkvKiBNYWtlIHN1cmUgTUFDIGdldHMgcmVhZHkuICovCi0JaW5kZXggPSAwOwotCWRvIHsKLQkJUlRNUF9JT19SRUFEMzIocEFkLCBNQUNfQ1NSMCwgJk1hY0NzcjApOwotCQlwQWQtPk1BQ1ZlcnNpb24gPSBNYWNDc3IwOwotCi0JCWlmICgocEFkLT5NQUNWZXJzaW9uICE9IDB4MDApCi0JCSAgICAmJiAocEFkLT5NQUNWZXJzaW9uICE9IDB4RkZGRkZGRkYpKQotCQkJYnJlYWs7Ci0KLQkJUlRNUHVzZWNEZWxheSgxMCk7Ci0JfSB3aGlsZSAoaW5kZXgrKyA8IDEwMCk7Ci0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIk1BQ19DU1IwICBbIFZlcjpSZXY9MHglMDh4XVxuIiwgcEFkLT5NQUNWZXJzaW9uKSk7Ci0KLSNpZmRlZiBSVE1QX01BQ19QQ0kKLSNpZmRlZiBQQ0lFX1BTX1NVUFBPUlQKLQkvKkl2ZXJzb24gcGF0Y2ggUENJRSBMMSBpc3N1ZSB0byBtYWtlIHN1cmUgdGhhdCBkcml2ZXIgY2FuIGJlIHJlYWQsd3JpdGUgLEJCUCBhbmQgUkYgcmVnaXN0ZXIgIGF0IHBjaWUgTC4xIGxldmVsICovCi0JaWYgKChJU19SVDMwOTAocEFkKSB8fCBJU19SVDM1NzIocEFkKSB8fCBJU19SVDMzOTAocEFkKSkKLQkgICAgJiYgT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19QQ0lFX0RFVklDRSkpIHsKLQkJUlRNUF9JT19SRUFEMzIocEFkLCBBVVhfQ1RSTCwgJk1hY0NzcjApOwotCQlNYWNDc3IwIHw9IDB4NDAyOwotCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBBVVhfQ1RSTCwgTWFjQ3NyMCk7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFVWF9DVFJMID0gMHgleFxuIiwgTWFjQ3NyMCkpOwotCX0KLSNlbmRpZiAvKiBQQ0lFX1BTX1NVUFBPUlQgLy8gKi8KLQotCS8qIFRvIGZpeCBkcml2ZXIgZGlzYWJsZS9lbmFibGUgaGFuZyBpc3N1ZSB3aGVuIHJhZGlvIG9mZiAqLwotCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBXUl9QSU5fQ0ZHLCAweDIpOwotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotCi0JLyogRGlzYWJsZSBETUEgKi8KLQlSVDI4WFhETUFEaXNhYmxlKHBBZCk7Ci0KLQkvKiBMb2FkIDgwNTEgZmlybXdhcmUgKi8KLQlTdGF0dXMgPSBOSUNMb2FkRmlybXdhcmUocEFkKTsKLQlpZiAoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpIHsKLQkJREJHUFJJTlRfRVJSKCJOSUNMb2FkRmlybXdhcmUgZmFpbGVkLCBTdGF0dXNbPTB4JTA4eF1cbiIsIFN0YXR1cyk7Ci0JCWdvdG8gZXJyMTsKLQl9Ci0KLQlOSUNMb2FkUmF0ZVN3aXRjaGluZ1BhcmFtcyhwQWQpOwotCi0JLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGhlcmUgd2hpY2ggaXMgYXMgc29vbiBhcyBwb3NzaWJsZSAqLwotCS8qIFRoaXMgc3RhdGVtZW50IHNob3VsZCBuZXZlciBiZSB0cnVlLiBXZSBtaWdodCBjb25zaWRlciB0byByZW1vdmUgaXQgbGF0ZXIgKi8KLSNpZmRlZiBSVE1QX01BQ19QQ0kKLQlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9BQ1RJVkUpKSB7Ci0JCVJUTVBfQVNJQ19JTlRFUlJVUFRfRElTQUJMRShwQWQpOwotCX0KLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLQotCVN0YXR1cyA9IFJUTVBBbGxvY1R4UnhSaW5nTWVtb3J5KHBBZCk7Ci0JaWYgKFN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKSB7Ci0JCURCR1BSSU5UX0VSUigiUlRNUEFsbG9jRE1BTWVtb3J5IGZhaWxlZCwgU3RhdHVzWz0weCUwOHhdXG4iLCBTdGF0dXMpOwotCQlnb3RvIGVycjE7Ci0JfQotCi0JUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSk7Ci0KLQkvKiBpbml0aWFsaXplIE1MTUUgKi8KLQkvKiAqLwotCi0JU3RhdHVzID0gUnRtcE1nbXRUYXNrSW5pdChwQWQpOwotCWlmIChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKLQkJZ290byBlcnIyOwotCi0JU3RhdHVzID0gTWxtZUluaXQocEFkKTsKLQlpZiAoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpIHsKLQkJREJHUFJJTlRfRVJSKCJNbG1lSW5pdCBmYWlsZWQsIFN0YXR1c1s9MHglMDh4XVxuIiwgU3RhdHVzKTsKLQkJZ290byBlcnIyOwotCX0KLQkvKiBJbml0aWFsaXplIHBBZC0+U3RhQ2ZnLCBwQWQtPkFwQ2ZnLCBwQWQtPkNvbW1vbkNmZyB0byBtYW51ZmFjdHVyZSBkZWZhdWx0ICovCi0JLyogKi8KLQlVc2VyQ2ZnSW5pdChwQWQpOwotCVN0YXR1cyA9IFJ0bXBOZXRUYXNrSW5pdChwQWQpOwotCWlmIChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKLQkJZ290byBlcnIzOwotCi0vKiAgICAgIENPUFlfTUFDX0FERFIocEFkLT5BcENmZy5NQlNTSURbYXBpZHhdLkJzc2lkLCBuZXRpZi0+aHdhZGRyKTsgKi8KLS8qICAgICAgcEFkLT5iRm9yY2VQcmludFRYID0gVFJVRTsgKi8KLQotCUNmZ0luaXRIb29rKHBBZCk7Ci0KLQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5NYWNUYWJMb2NrKTsKLQotCU1lYXN1cmVSZXFUYWJJbml0KHBBZCk7Ci0JVHBjUmVxVGFiSW5pdChwQWQpOwotCi0JLyogKi8KLQkvKiBJbml0IHRoZSBoYXJkd2FyZSwgd2UgbmVlZCB0byBpbml0IGFzaWMgYmVmb3JlIHJlYWQgcmVnaXN0cnksIG90aGVyd2lzZSBtYWMgcmVnaXN0ZXIgd2lsbCBiZSByZXNldCAqLwotCS8qICovCi0JU3RhdHVzID0gTklDSW5pdGlhbGl6ZUFkYXB0ZXIocEFkLCBUUlVFKTsKLQlpZiAoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpIHsKLQkJREJHUFJJTlRfRVJSKCJOSUNJbml0aWFsaXplQWRhcHRlciBmYWlsZWQsIFN0YXR1c1s9MHglMDh4XVxuIiwgU3RhdHVzKTsKLQkJaWYgKFN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQotCQkJZ290byBlcnIzOwotCX0KLQotCURCR1BSSU5UKFJUX0RFQlVHX09GRiwgKCIxLiBQaHkgTW9kZSA9ICVkXG4iLCBwQWQtPkNvbW1vbkNmZy5QaHlNb2RlKSk7Ci0KLSNpZmRlZiBSVE1QX01BQ19VU0IKLQlwQWQtPkNvbW1vbkNmZy5iTXVsdGlwbGVJUlAgPSBGQUxTRTsKLQotCWlmIChwQWQtPkNvbW1vbkNmZy5iTXVsdGlwbGVJUlApCi0JCXBBZC0+Q29tbW9uQ2ZnLk51bU9mQnVsa0luSVJQID0gUlhfUklOR19TSVpFOwotCWVsc2UKLQkJcEFkLT5Db21tb25DZmcuTnVtT2ZCdWxrSW5JUlAgPSAxOwotI2VuZGlmIC8qIFJUTVBfTUFDX1VTQiAvLyAqLwotCi0JLypJbml0IEJhIENhcGFiaWxpdHkgcGFyYW1ldGVycy4gKi8KLS8qICAgICAgUlQyOFhYX0JBX0lOSVQocEFkKTsgKi8KLQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuTXBkdURlbnNpdHkgPQotCSAgICAodTgpcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1wZHVEZW5zaXR5OwotCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5BbXNkdUVuYWJsZSA9Ci0JICAgICh1MTYpcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLkFtc2R1RW5hYmxlOwotCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5BbXNkdVNpemUgPQotCSAgICAodTE2KXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BbXNkdVNpemU7Ci0JcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5Lk1pbW9QcyA9Ci0JICAgICh1MTYpcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1NUFNtb2RlOwotCS8qIFVQZGF0YSB0byBIVCBJRSAqLwotCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uTWltb1BzID0KLQkgICAgKHUxNilwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTU1QU21vZGU7Ci0JcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5BTXNkdVNpemUgPQotCSAgICAodTE2KXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BbXNkdVNpemU7Ci0JcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwUGFybS5NcGR1RGVuc2l0eSA9Ci0JICAgICh1OClwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTXBkdURlbnNpdHk7Ci0KLQkvKiBhZnRlciByZWFkaW5nIFJlZ2lzdHJ5LCB3ZSBub3cga25vdyBpZiBpbiBBUCBtb2RlIG9yIFNUQSBtb2RlICovCi0KLQkvKiBMb2FkIDgwNTEgZmlybXdhcmU7IGNyYXNoIHdoZW4gRlcgaW1hZ2Ugbm90IGV4aXN0ZW50ICovCi0JLyogU3RhdHVzID0gTklDTG9hZEZpcm13YXJlKHBBZCk7ICovCi0JLyogaWYgKFN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKSAqLwotCS8qICAgIGJyZWFrOyAqLwotCi0JREJHUFJJTlQoUlRfREVCVUdfT0ZGLCAoIjIuIFBoeSBNb2RlID0gJWRcbiIsIHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUpKTsKLQotCS8qIFdlIHNob3VsZCByZWFkIEVFUFJPTSBmb3IgYWxsIGNhc2VzLiAgcnQyODYwYiAqLwotCU5JQ1JlYWRFRVBST01QYXJhbWV0ZXJzKHBBZCwgKHU4ICopcERlZmF1bHRNYWMpOwotCi0JREJHUFJJTlQoUlRfREVCVUdfT0ZGLCAoIjMuIFBoeSBNb2RlID0gJWRcbiIsIHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUpKTsKLQotCU5JQ0luaXRBc2ljRnJvbUVFUFJPTShwQWQpOwkvKnJ0Mjg2MGIgKi8KLQotCS8qIFNldCBQSFkgdG8gYXBwcm9wcmlhdGUgbW9kZSAqLwotCVRtcFBoeSA9IHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGU7Ci0JcEFkLT5Db21tb25DZmcuUGh5TW9kZSA9IDB4ZmY7Ci0JUlRNUFNldFBoeU1vZGUocEFkLCBUbXBQaHkpOwotCVNldENvbW1vbkhUKHBBZCk7Ci0KLQkvKiBObyB2YWxpZCBjaGFubmVscy4gKi8KLQlpZiAocEFkLT5DaGFubmVsTGlzdE51bSA9PSAwKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJICgiV3JvbmcgY29uZmlndXJhdGlvbi4gTm8gdmFsaWQgY2hhbm5lbCBmb3VuZC4gQ2hlY2sgXCJDb250cnlDb2RlXCIgYW5kIFwiQ2hhbm5lbEdlb2dyYXBoeVwiIHNldHRpbmcuXG4iKSk7Ci0JCWdvdG8gZXJyNDsKLQl9Ci0KLQlEQkdQUklOVChSVF9ERUJVR19PRkYsCi0JCSAoIk1DUyBTZXQgPSAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCi0JCSAgcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lk1DU1NldFswXSwKLQkJICBwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuTUNTU2V0WzFdLAotCQkgIHBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5NQ1NTZXRbMl0sCi0JCSAgcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lk1DU1NldFszXSwKLQkJICBwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuTUNTU2V0WzRdKSk7Ci0KLSNpZmRlZiBSVE1QX1JGX1JXX1NVUFBPUlQKLQkvKkluaXQgUlQzMHh4IFJGUmVnaXN0ZXJzIGFmdGVyIHJlYWQgUkZJQyB0eXBlIGZyb20gRUVQUk9NICovCi0JTklDSW5pdFJGUmVnaXN0ZXJzKHBBZCk7Ci0jZW5kaWYgLyogUlRNUF9SRl9SV19TVVBQT1JUIC8vICovCi0KLS8qICAgICAgICAgICAgICBBUEluaXRpYWxpemUocEFkKTsgKi8KLQotCS8qICovCi0JLyogSW5pdGlhbGl6ZSBSRiByZWdpc3RlciB0byBkZWZhdWx0IHZhbHVlICovCi0JLyogKi8KLQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwsIEZBTFNFKTsKLQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKTsKLQotCS8qIDgwNTEgZmlybXdhcmUgcmVxdWlyZSB0aGUgc2lnbmFsIGR1cmluZyBib290aW5nIHRpbWUuICovCi0JLyoyMDA4LzExLzI4OktIIG1hcmtlZCB0aGUgZm9sbG93aW5nIGNvZGVzIHRvIHBhdGNoIEZyZXF1ZW5jeSBvZmZzZXQgYnVnICovCi0JLypBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4NzIsIDB4RkYsIDB4MDAsIDB4MDApOyAqLwotCi0JaWYgKHBBZCAmJiAoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpKSB7Ci0JCS8qICovCi0JCS8qIFVuZG8gZXZlcnl0aGluZyBpZiBpdCBmYWlsZWQgKi8KLQkJLyogKi8KLQkJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKSkgewotLyogICAgICAgICAgICAgICAgICAgICAgTmRpc01EZXJlZ2lzdGVySW50ZXJydXB0KCZwQWQtPkludGVycnVwdCk7ICovCi0JCQlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpOwotCQl9Ci0vKiAgICAgICAgICAgICAgUlRNUEZyZWVBZGFwdGVyKHBBZCk7IC8vIHdlIHdpbGwgZnJlZSBpdCBpbiBkaXNjb25uZWN0KCkgKi8KLQl9IGVsc2UgaWYgKHBBZCkgewotCQkvKiBNaWNyb3NvZnQgSENUIHJlcXVpcmUgZHJpdmVyIHNlbmQgYSBkaXNjb25uZWN0IGV2ZW50IGFmdGVyIGRyaXZlciBpbml0aWFsaXphdGlvbi4gKi8KLQkJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKTsKLS8qICAgICAgICAgICAgICBwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSA9IE5kaXNNZWRpYVN0YXRlRGlzY29ubmVjdGVkOyAqLwotCQlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9NRURJQV9TVEFURV9DSEFOR0UpOwotCi0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiTkRJU19TVEFUVVNfTUVESUFfRElTQ09OTkVDVCBFdmVudCBCIVxuIikpOwotCi0jaWZkZWYgUlRNUF9NQUNfVVNCCi0JCVJUTVBfQ0xFQVJfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MpOwotCQlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JFTU9WRV9JTl9QUk9HUkVTUyk7Ci0KLQkJLyogKi8KLQkJLyogU3VwcG9ydCBtdWx0aXBsZSBCdWxrSW4gSVJQLCAqLwotCQkvKiB0aGUgdmFsdWUgb24gcEFkLT5Db21tb25DZmcuTnVtT2ZCdWxrSW5JUlAgbWF5IGJlIGxhcmdlIHRoYW4gMS4gKi8KLQkJLyogKi8KLQkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcEFkLT5Db21tb25DZmcuTnVtT2ZCdWxrSW5JUlA7IGluZGV4KyspIHsKLQkJCVJUVVNCQnVsa1JlY2VpdmUocEFkKTsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJUVVNCQnVsa1JlY2VpdmUhXG4iKSk7Ci0JCX0KLSNlbmRpZiAvKiBSVE1QX01BQ19VU0IgLy8gKi8KLQl9CQkJLyogZW5kIG9mIGVsc2UgKi8KLQotCS8qIFNldCB1cCB0aGUgTWFjIGFkZHJlc3MgKi8KLQlSdG1wT1NOZXREZXZBZGRyU2V0KHBBZC0+bmV0X2RldiwgJnBBZC0+Q3VycmVudEFkZHJlc3NbMF0pOwotCi0JREJHUFJJTlRfUyhTdGF0dXMsICgiPD09PT0gcnQyOHh4X2luaXQsIFN0YXR1cz0leFxuIiwgU3RhdHVzKSk7Ci0KLQlyZXR1cm4gVFJVRTsKLQotZXJyNDoKLWVycjM6Ci0JTWxtZUhhbHQocEFkKTsKLWVycjI6Ci0JUlRNUEZyZWVUeFJ4UmluZ01lbW9yeShwQWQpOwotZXJyMToKLQotCW9zX2ZyZWVfbWVtKHBBZCwgcEFkLT5tcGR1X2Jsa19wb29sLm1lbSk7CS8qIGZyZWUgQkEgcG9vbCAqLwotCi0JLyogc2hhbGwgbm90IHNldCBwcml2IHRvIE5VTEwgaGVyZSBiZWNhdXNlIHRoZSBwcml2IGRpZG4ndCBiZWVuIGZyZWUgeWV0LiAqLwotCS8qbmV0X2Rldi0+bWxfcHJpdiA9IDA7ICovCi0jaWZkZWYgU1QKLWVycjA6Ci0jZW5kaWYgLyogU1QgLy8gKi8KLQotCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoInJ0Mjh4eCBJbml0aWFsaXplZCBmYWlsIVxuIikpOwotCXJldHVybiBGQUxTRTsKLX0KLQotLyotLS1BZGQgYnkgc2hpYW5nLCBtb3ZlIGZyb20gb3MvbGludXgvcnRfbWFpbl9kZXYuYyAqLwotCi1zdGF0aWMgaW50IFJ0bXBDaGlwT3BzUmVnaXN0ZXIoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBpbnQgaW5mVHlwZSkKLXsKLQlzdHJ1Y3QgcnRfcnRtcF9jaGlwX29wICpwQ2hpcE9wcyA9ICZwQWQtPmNoaXBPcHM7Ci0JaW50IHN0YXR1czsKLQotCW1lbXNldChwQ2hpcE9wcywgMCwgc2l6ZW9mKHN0cnVjdCBydF9ydG1wX2NoaXBfb3ApKTsKLQotCS8qIHNldCBlZXByb20gcmVsYXRlZCBob29rIGZ1bmN0aW9ucyAqLwotCXN0YXR1cyA9IFJ0bXBDaGlwT3BzRWVwcm9tSG9vayhwQWQsIGluZlR5cGUpOwotCi0JLyogc2V0IG1jdSByZWxhdGVkIGhvb2sgZnVuY3Rpb25zICovCi0Jc3dpdGNoIChpbmZUeXBlKSB7Ci0jaWZkZWYgUlRNUF9QQ0lfU1VQUE9SVAotCWNhc2UgUlRNUF9ERVZfSU5GX1BDSToKLQkJcENoaXBPcHMtPmxvYWRGaXJtd2FyZSA9IFJ0bXBBc2ljTG9hZEZpcm13YXJlOwotCQlwQ2hpcE9wcy0+ZXJhc2VGaXJtd2FyZSA9IFJ0bXBBc2ljRXJhc2VGaXJtd2FyZTsKLQkJcENoaXBPcHMtPnNlbmRDb21tYW5kVG9NY3UgPSBSdG1wQXNpY1NlbmRDb21tYW5kVG9NY3U7Ci0JCWJyZWFrOwotI2VuZGlmIC8qIFJUTVBfUENJX1NVUFBPUlQgLy8gKi8KLSNpZmRlZiBSVE1QX1VTQl9TVVBQT1JUCi0JY2FzZSBSVE1QX0RFVl9JTkZfVVNCOgotCQlwQ2hpcE9wcy0+bG9hZEZpcm13YXJlID0gUnRtcEFzaWNMb2FkRmlybXdhcmU7Ci0JCXBDaGlwT3BzLT5zZW5kQ29tbWFuZFRvTWN1ID0gUnRtcEFzaWNTZW5kQ29tbWFuZFRvTWN1OwotCQlicmVhazsKLSNlbmRpZiAvKiBSVE1QX1VTQl9TVVBQT1JUIC8vICovCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotaW50IFJ0bXBSYURldkN0cmxJbml0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgSU4gUlRNUF9JTkZfVFlQRSBpbmZUeXBlKQotewotCS8qdm9pZCAgKmhhbmRsZTsgKi8KLQotCS8qIEFzc2lnbiB0aGUgaW50ZXJmYWNlIHR5cGUuIFdlIG5lZWQgdXNlIGl0IHdoZW4gZG8gcmVnaXN0ZXIvRUVQUk9NIGFjY2Vzcy4gKi8KLQlwQWQtPmluZlR5cGUgPSBpbmZUeXBlOwotCi0JcEFkLT5PcE1vZGUgPSBPUE1PREVfU1RBOwotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCJTVEEgRHJpdmVyIHZlcnNpb24tJXNcbiIsIFNUQV9EUklWRVJfVkVSU0lPTikpOwotCi0jaWZkZWYgUlRNUF9NQUNfVVNCCi0Jc2VtYV9pbml0KCYocEFkLT5Vc2JWZW5kb3JSZXFfc2VtYXBob3JlKSwgMSk7Ci0Jb3NfYWxsb2NfbWVtKHBBZCwgKHU4ICoqKSAmIHBBZC0+VXNiVmVuZG9yUmVxQnVmLAotCQkgICAgIE1BWF9QQVJBTV9CVUZGRVJfU0laRSAtIDEpOwotCWlmIChwQWQtPlVzYlZlbmRvclJlcUJ1ZiA9PSBOVUxMKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJICgiQWxsb2NhdGUgdmVuZG9yIHJlcXVlc3QgdGVtcCBidWZmZXIgZmFpbGVkIVxuIikpOwotCQlyZXR1cm4gRkFMU0U7Ci0JfQotI2VuZGlmIC8qIFJUTVBfTUFDX1VTQiAvLyAqLwotCi0JUnRtcENoaXBPcHNSZWdpc3RlcihwQWQsIGluZlR5cGUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLUJPT0xFQU4gUnRtcFJhRGV2Q3RybEV4aXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCi0JUlRNUEZyZWVBZGFwdGVyKHBBZCk7Ci0KLQlyZXR1cm4gVFJVRTsKLX0KLQotLyogbm90IHlldCBzdXBwb3J0IE1CU1MgKi8KLXN0cnVjdCBuZXRfZGV2aWNlICpnZXRfbmV0ZGV2X2Zyb21fYnNzaWQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1OCBGcm9tV2hpY2hCU1NJRCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X3AgPSBOVUxMOwotCi0JewotCQlkZXZfcCA9IHBBZC0+bmV0X2RldjsKLQl9Ci0KLQlBU1NFUlQoZGV2X3ApOwotCXJldHVybiBkZXZfcDsJCS8qIHJldHVybiBvbmUgb2YgTUJTUyAqLwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vcnRtcF9tY3UuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL3J0bXBfbWN1LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwZmE0MTYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vcnRtcF9tY3UuYworKysgL2Rldi9udWxsCkBAIC0xLDMzNiArMCwwIEBACi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFJhbGluayBUZWNoIEluYy4KLSAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKLSAqIEhzaW5jaHUgQ291bnR5IDMwMiwKLSAqIFRhaXdhbiwgUi5PLkMuCi0gKgotICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotCU1vZHVsZSBOYW1lOgotCXJ0bXBfbWN1LmMKLQotCUFic3RyYWN0OgotCU1pbmlwb3J0IGdlbmVyaWMgcG9ydGlvbiBoZWFkZXIgZmlsZQotCi0JUmV2aXNpb24gSGlzdG9yeToKLQlXaG8gICAgICAgICBXaGVuICAgICAgICAgIFdoYXQKLQktLS0tLS0tLSAgICAtLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSovCi0KLSNpbmNsdWRlCSIuLi9ydF9jb25maWcuaCIKLQotI2luY2x1ZGUgPGxpbnV4L2NyYy1jY2l0dC5oPgotI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+Ci0KLSNpZmRlZiBSVE1QX01BQ19VU0IKLQotI2RlZmluZSBGSVJNV0FSRUlNQUdFX0xFTkdUSAkJMHgxMDAwCi0KLSNkZWZpbmUgRklSTVdBUkVfMjg3MF9NSU5fVkVSU0lPTgkxMgotI2RlZmluZSBGSVJNV0FSRV8yODcwX0ZJTEVOQU1FCQkicnQyODcwLmJpbiIKLU1PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV8yODcwX0ZJTEVOQU1FKTsKLQotI2RlZmluZSBGSVJNV0FSRV8zMDcwX01JTl9WRVJTSU9OCTE3Ci0jZGVmaW5lIEZJUk1XQVJFXzMwNzBfRklMRU5BTUUJCSJydDMwNzAuYmluIgotTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFXzMwNzBfRklMRU5BTUUpOwotCi0jZGVmaW5lIEZJUk1XQVJFXzMwNzFfTUlOX1ZFUlNJT04JMTcKLSNkZWZpbmUgRklSTVdBUkVfMzA3MV9GSUxFTkFNRQkJInJ0MzA3MS5iaW4iCS8qIGZvciBSVDMwNzEvUlQzMDcyICovCi1NT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfMzA3MV9GSUxFTkFNRSk7Ci0KLSNlbHNlIC8qIFJUTVBfTUFDX1BDSSAqLwotCi0jZGVmaW5lIEZJUk1XQVJFSU1BR0VfTEVOR1RICQkweDIwMDAKLQotI2RlZmluZSBGSVJNV0FSRV8yODYwX01JTl9WRVJTSU9OCTExCi0jZGVmaW5lIEZJUk1XQVJFXzI4NjBfRklMRU5BTUUJCSJydDI4NjAuYmluIgotTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFXzI4NjBfRklMRU5BTUUpOwotCi0jZGVmaW5lIEZJUk1XQVJFXzMwOTBfTUlOX1ZFUlNJT04JMTkKLSNkZWZpbmUgRklSTVdBUkVfMzA5MF9GSUxFTkFNRQkJInJ0MzA5MC5iaW4iCS8qIGZvciBSVDMwOTAvUlQzMzkwICovCi1NT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfMzA5MF9GSUxFTkFNRSk7Ci0KLSNlbmRpZgotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQkJZXJhc2UgODA1MSBmaXJtd2FyZSBpbWFnZSBpbiBNQUMgQVNJQwotCi0JQXJndW1lbnRzOgotCQlBZGFwdGVyCQkJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgotCi0JSVJRTCA9IFBBU1NJVkVfTEVWRUwKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLWludCBSdG1wQXNpY0VyYXNlRmlybXdhcmUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCXVuc2lnbmVkIGxvbmcgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBNQVhfRklSTVdBUkVfSU1BR0VfU0laRTsgaSArPSA0KQotCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBGSVJNV0FSRV9JTUFHRV9CQVNFICsgaSwgMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqcnRtcF9nZXRfZmlybXdhcmUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqYWRhcHRlcikKLXsKLQljb25zdCBjaGFyICpuYW1lOwotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncgPSBOVUxMOwotCXU4IG1pbl92ZXJzaW9uOwotCXN0cnVjdCBkZXZpY2UgKmRldjsKLQlpbnQgZXJyOwotCi0JaWYgKGFkYXB0ZXItPmZpcm13YXJlKQotCQlyZXR1cm4gYWRhcHRlci0+ZmlybXdhcmU7Ci0KLSNpZmRlZiBSVE1QX01BQ19VU0IKLQlpZiAoSVNfUlQzMDcxKGFkYXB0ZXIpKSB7Ci0JCW5hbWUgPSBGSVJNV0FSRV8zMDcxX0ZJTEVOQU1FOwotCQltaW5fdmVyc2lvbiA9IEZJUk1XQVJFXzMwNzFfTUlOX1ZFUlNJT047Ci0JfSBlbHNlIGlmIChJU19SVDMwNzAoYWRhcHRlcikpIHsKLQkJbmFtZSA9IEZJUk1XQVJFXzMwNzBfRklMRU5BTUU7Ci0JCW1pbl92ZXJzaW9uID0gRklSTVdBUkVfMzA3MF9NSU5fVkVSU0lPTjsKLQl9IGVsc2UgewotCQluYW1lID0gRklSTVdBUkVfMjg3MF9GSUxFTkFNRTsKLQkJbWluX3ZlcnNpb24gPSBGSVJNV0FSRV8yODcwX01JTl9WRVJTSU9OOwotCX0KLQlkZXYgPSAmKChzdHJ1Y3Qgb3NfY29va2llICopYWRhcHRlci0+T1NfQ29va2llKS0+cFVzYl9EZXYtPmRldjsKLSNlbHNlIC8qIFJUTVBfTUFDX1BDSSAqLwotCWlmIChJU19SVDMwOTAoYWRhcHRlcikgfHwgSVNfUlQzMzkwKGFkYXB0ZXIpKSB7Ci0JCW5hbWUgPSBGSVJNV0FSRV8zMDkwX0ZJTEVOQU1FOwotCQltaW5fdmVyc2lvbiA9IEZJUk1XQVJFXzMwOTBfTUlOX1ZFUlNJT047Ci0JfSBlbHNlIHsKLQkJbmFtZSA9IEZJUk1XQVJFXzI4NjBfRklMRU5BTUU7Ci0JCW1pbl92ZXJzaW9uID0gRklSTVdBUkVfMjg2MF9NSU5fVkVSU0lPTjsKLQl9Ci0JZGV2ID0gJigoc3RydWN0IG9zX2Nvb2tpZSAqKWFkYXB0ZXItPk9TX0Nvb2tpZSktPnBjaV9kZXYtPmRldjsKLSNlbmRpZgotCi0JZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIG5hbWUsIGRldik7Ci0JaWYgKGVycikgewotCQlkZXZfZXJyKGRldiwgImZpcm13YXJlIGZpbGUgJXMgcmVxdWVzdCBmYWlsZWQgKCVkKVxuIiwKLQkJCW5hbWUsIGVycik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWlmIChmdy0+c2l6ZSA8IEZJUk1XQVJFSU1BR0VfTEVOR1RIKSB7Ci0JCWRldl9lcnIoZGV2LCAiZmlybXdhcmUgZmlsZSAlcyBzaXplIGlzIGludmFsaWRcbiIsIG5hbWUpOwotCQlnb3RvIGludmFsaWQ7Ci0JfQotCi0JLyogaXMgaXQgbmV3IGVub3VnaD8gKi8KLQlhZGFwdGVyLT5GaXJtd2FyZVZlcnNpb24gPSBmdy0+ZGF0YVtGSVJNV0FSRUlNQUdFX0xFTkdUSCAtIDNdOwotCWlmIChhZGFwdGVyLT5GaXJtd2FyZVZlcnNpb24gPCBtaW5fdmVyc2lvbikgewotCQlkZXZfZXJyKGRldiwKLQkJCSJmaXJtd2FyZSBmaWxlICVzIGlzIHRvbyBvbGQ7IgotCQkJIiBkcml2ZXIgcmVxdWlyZXMgdiVkIG9yIGxhdGVyXG4iLAotCQkJbmFtZSwgbWluX3ZlcnNpb24pOwotCQlnb3RvIGludmFsaWQ7Ci0JfQotCi0JLyogaXMgdGhlIGludGVybmFsIENSQyBjb3JyZWN0PyAqLwotCWlmIChjcmNfY2NpdHQoMHhmZmZmLCBmdy0+ZGF0YSwgRklSTVdBUkVJTUFHRV9MRU5HVEggLSAyKSAhPQotCSAgICAoZnctPmRhdGFbRklSTVdBUkVJTUFHRV9MRU5HVEggLSAyXSB8Ci0JICAgICAoZnctPmRhdGFbRklSTVdBUkVJTUFHRV9MRU5HVEggLSAxXSA8PCA4KSkpIHsKLQkJZGV2X2VycihkZXYsICJmaXJtd2FyZSBmaWxlICVzIGZhaWxlZCBpbnRlcm5hbCBDUkNcbiIsIG5hbWUpOwotCQlnb3RvIGludmFsaWQ7Ci0JfQotCi0JYWRhcHRlci0+ZmlybXdhcmUgPSBmdzsKLQlyZXR1cm4gZnc7Ci0KLWludmFsaWQ6Ci0JcmVsZWFzZV9maXJtd2FyZShmdyk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCQlMb2FkIDgwNTEgZmlybXdhcmUgZmlsZSBpbnRvIE1BQyBBU0lDCi0KLQlBcmd1bWVudHM6Ci0JCUFkYXB0ZXIJCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCi0KLQlSZXR1cm4gVmFsdWU6Ci0JCU5ESVNfU1RBVFVTX1NVQ0NFU1MgICAgICAgICBmaXJtd2FyZSBpbWFnZSBsb2FkIG9rCi0JCU5ESVNfU1RBVFVTX0ZBSUxVUkUgICAgICAgICBpbWFnZSBub3QgZm91bmQKLQotCUlSUUwgPSBQQVNTSVZFX0xFVkVMCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi1pbnQgUnRtcEFzaWNMb2FkRmlybXdhcmUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7Ci0JaW50IFN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7Ci0JdW5zaWduZWQgbG9uZyBJbmRleDsKLQl1MzIgTWFjUmVnID0gMDsKLQotCWZ3ID0gcnRtcF9nZXRfZmlybXdhcmUocEFkKTsKLQlpZiAoIWZ3KQotCQlyZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKLQotCVJUTVBfV1JJVEVfRklSTVdBUkUocEFkLCBmdy0+ZGF0YSwgRklSTVdBUkVJTUFHRV9MRU5HVEgpOwotCi0JLyogY2hlY2sgaWYgTUNVIGlzIHJlYWR5ICovCi0JSW5kZXggPSAwOwotCWRvIHsKLQkJUlRNUF9JT19SRUFEMzIocEFkLCBQQkZfU1lTX0NUUkwsICZNYWNSZWcpOwotCi0JCWlmIChNYWNSZWcgJiAweDgwKQotCQkJYnJlYWs7Ci0KLQkJUlRNUHVzZWNEZWxheSgxMDAwKTsKLQl9IHdoaWxlIChJbmRleCsrIDwgMTAwMCk7Ci0KLQlpZiAoSW5kZXggPiAxMDAwKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJICgiTklDTG9hZEZpcm13YXJlOiBNQ1UgaXMgbm90IHJlYWR5XG4iKSk7Ci0JCVN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7Ci0JfQotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPD09PSAlcyAoc3RhdHVzPSVkKVxuIiwgX19mdW5jX18sIFN0YXR1cykpOwotCi0JcmV0dXJuIFN0YXR1czsKLX0KLQotaW50IFJ0bXBBc2ljU2VuZENvbW1hbmRUb01jdShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgIHU4IENvbW1hbmQsCi0JCQkgICAgIHU4IFRva2VuLCB1OCBBcmcwLCB1OCBBcmcxKQotewotCUhPU1RfQ01EX0NTUl9TVFJVQyBIMk1DbWQ7Ci0JSDJNX01BSUxCT1hfU1RSVUMgSDJNTWFpbGJveDsKLQl1bnNpZ25lZCBsb25nIGkgPSAwOwotCi0jaWZkZWYgUENJRV9QU19TVVBQT1JUCi0JLyogMzA5MEYgcG93ZXIgc29sdXRpb24gMyBoYXMgaHcgbGltaXRhdGlvbiB0aGF0IG5lZWRzIHRvIGJhbiBhbGwgbWN1IGNvbW1hbmQgKi8KLQkvKiB3aGVuIGZpcm13YXJlIGlzIGluIHJhZGlvIHN0YXRlLiAgRm9yIG90aGVyIGNoaXAgZG9lc24ndCBoYXZlIHRoaXMgbGltaXRhdGlvbi4gKi8KLQlpZiAoKChJU19SVDMwOTAocEFkKSB8fCBJU19SVDM1NzIocEFkKSB8fCBJU19SVDMzOTAocEFkKSkKLQkgICAgICYmIElTX1ZFUlNJT05fQUZURVJfRihwQWQpKSAmJiBJU19WRVJTSU9OX0FGVEVSX0YocEFkKQotCSAgICAmJiAocEFkLT5TdGFDZmcuUFNDb250cm9sLmZpZWxkLnJ0MzB4eFBvd2VyTW9kZSA9PSAzKQotCSAgICAmJiAocEFkLT5TdGFDZmcuUFNDb250cm9sLmZpZWxkLkVuYWJsZU5ld1BTID09IFRSVUUpKSB7Ci0JCVJUTVBfU0VNX0xPQ0soJnBBZC0+TWN1Q21kTG9jayk7Ci0JCWlmICgocEFkLT5icnQzMHh4QmFuTWN1Q21kID09IFRSVUUpCi0JCSAgICAmJiAoQ29tbWFuZCAhPSBXQUtFX01DVV9DTUQpICYmIChDb21tYW5kICE9IFJGT0ZGX01DVV9DTUQpKSB7Ci0JCQlSVE1QX1NFTV9VTkxPQ0soJnBBZC0+TWN1Q21kTG9jayk7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCIgQmFuIE1jdSBDbWQgJXggaW4gc2xlZXAgbW9kZVxuIiwgQ29tbWFuZCkpOwotCQkJcmV0dXJuIEZBTFNFOwotCQl9IGVsc2UgaWYgKChDb21tYW5kID09IFNMRUVQX01DVV9DTUQpCi0JCQkgICB8fCAoQ29tbWFuZCA9PSBSRk9GRl9NQ1VfQ01EKSkgewotCQkJcEFkLT5icnQzMHh4QmFuTWN1Q21kID0gVFJVRTsKLQkJfSBlbHNlIGlmIChDb21tYW5kICE9IFdBS0VfTUNVX0NNRCkgewotCQkJcEFkLT5icnQzMHh4QmFuTWN1Q21kID0gRkFMU0U7Ci0JCX0KLQotCQlSVE1QX1NFTV9VTkxPQ0soJnBBZC0+TWN1Q21kTG9jayk7Ci0KLQl9Ci0JaWYgKCgoSVNfUlQzMDkwKHBBZCkgfHwgSVNfUlQzNTcyKHBBZCkgfHwgSVNfUlQzMzkwKHBBZCkpCi0JICAgICAmJiBJU19WRVJTSU9OX0FGVEVSX0YocEFkKSkgJiYgSVNfVkVSU0lPTl9BRlRFUl9GKHBBZCkKLQkgICAgJiYgKHBBZC0+U3RhQ2ZnLlBTQ29udHJvbC5maWVsZC5ydDMweHhQb3dlck1vZGUgPT0gMykKLQkgICAgJiYgKHBBZC0+U3RhQ2ZnLlBTQ29udHJvbC5maWVsZC5FbmFibGVOZXdQUyA9PSBUUlVFKQotCSAgICAmJiAoQ29tbWFuZCA9PSBXQUtFX01DVV9DTUQpKSB7Ci0KLQkJZG8gewotCQkJUlRNUF9JT19GT1JDRV9SRUFEMzIocEFkLCBIMk1fTUFJTEJPWF9DU1IsCi0JCQkJCSAgICAgJkgyTU1haWxib3gud29yZCk7Ci0JCQlpZiAoSDJNTWFpbGJveC5maWVsZC5Pd25lciA9PSAwKQotCQkJCWJyZWFrOwotCi0JCQlSVE1QdXNlY0RlbGF5KDIpOwotCQkJREJHUFJJTlQoUlRfREVCVUdfSU5GTywKLQkJCQkgKCJBc2ljU2VuZENvbW1hblRvTWN1OjpNYWlsIGJveCBpcyBidXN5XG4iKSk7Ci0JCX0gd2hpbGUgKGkrKyA8IDEwMCk7Ci0KLQkJaWYgKGkgPiAxMDApIHsKLQkJCURCR1BSSU5UX0VSUigiSDJNX01BSUxCT1ggc3RpbGwgaG9sZCBieSBNQ1UuIGNvbW1hbmQgZmFpbFxuIik7Ci0JCQlyZXR1cm4gRkFMU0U7Ci0JCX0KLQotCQlIMk1NYWlsYm94LmZpZWxkLk93bmVyID0gMTsJLyogcGFzcyBvd25lcnNoaXAgdG8gTUNVICovCi0JCUgyTU1haWxib3guZmllbGQuQ21kVG9rZW4gPSBUb2tlbjsKLQkJSDJNTWFpbGJveC5maWVsZC5IaWdoQnl0ZSA9IEFyZzE7Ci0JCUgyTU1haWxib3guZmllbGQuTG93Qnl0ZSA9IEFyZzA7Ci0JCVJUTVBfSU9fRk9SQ0VfV1JJVEUzMihwQWQsIEgyTV9NQUlMQk9YX0NTUiwgSDJNTWFpbGJveC53b3JkKTsKLQotCQlIMk1DbWQud29yZCA9IDA7Ci0JCUgyTUNtZC5maWVsZC5Ib3N0Q29tbWFuZCA9IENvbW1hbmQ7Ci0JCVJUTVBfSU9fRk9SQ0VfV1JJVEUzMihwQWQsIEhPU1RfQ01EX0NTUiwgSDJNQ21kLndvcmQpOwotCi0JfSBlbHNlCi0jZW5kaWYgLyogUENJRV9QU19TVVBQT1JUIC8vICovCi0JewotCQlkbyB7Ci0JCQlSVE1QX0lPX1JFQUQzMihwQWQsIEgyTV9NQUlMQk9YX0NTUiwgJkgyTU1haWxib3gud29yZCk7Ci0JCQlpZiAoSDJNTWFpbGJveC5maWVsZC5Pd25lciA9PSAwKQotCQkJCWJyZWFrOwotCi0JCQlSVE1QdXNlY0RlbGF5KDIpOwotCQl9IHdoaWxlIChpKysgPCAxMDApOwotCi0JCWlmIChpID4gMTAwKSB7Ci0jaWZkZWYgUlRNUF9NQUNfUENJCi0jZW5kaWYgLyogUlRNUF9NQUNfUENJIC8vICovCi0JCQl7Ci0JCQkJREJHUFJJTlRfRVJSKCJIMk1fTUFJTEJPWCBzdGlsbCBob2xkIGJ5IE1DVS4gY29tbWFuZCBmYWlsXG4iKTsKLQkJCX0KLQkJCXJldHVybiBGQUxTRTsKLQkJfQotI2lmZGVmIFJUTVBfTUFDX1BDSQotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotCi0JCUgyTU1haWxib3guZmllbGQuT3duZXIgPSAxOwkvKiBwYXNzIG93bmVyc2hpcCB0byBNQ1UgKi8KLQkJSDJNTWFpbGJveC5maWVsZC5DbWRUb2tlbiA9IFRva2VuOwotCQlIMk1NYWlsYm94LmZpZWxkLkhpZ2hCeXRlID0gQXJnMTsKLQkJSDJNTWFpbGJveC5maWVsZC5Mb3dCeXRlID0gQXJnMDsKLQkJUlRNUF9JT19XUklURTMyKHBBZCwgSDJNX01BSUxCT1hfQ1NSLCBIMk1NYWlsYm94LndvcmQpOwotCi0JCUgyTUNtZC53b3JkID0gMDsKLQkJSDJNQ21kLmZpZWxkLkhvc3RDb21tYW5kID0gQ29tbWFuZDsKLQkJUlRNUF9JT19XUklURTMyKHBBZCwgSE9TVF9DTURfQ1NSLCBIMk1DbWQud29yZCk7Ci0KLQkJaWYgKENvbW1hbmQgIT0gMHg4MCkgewotCQl9Ci0JfQotI2lmZGVmIFBDSUVfUFNfU1VQUE9SVAotCS8qIDMwOTAgTUNVIFdha2V1cCBjb21tYW5kIG5lZWRzIG1vcmUgdGltZSB0byBiZSBzdGFibGUuICovCi0JLyogQmVmb3JlIHN0YWJsZSwgZG9uJ3QgaXNzdWUgb3RoZXIgTUNVIGNvbW1hbmQgdG8gcHJldmVudCBmcm9tIGZpcm13YXJlIGVycm9yLiAqLwotCWlmICgoKElTX1JUMzA5MChwQWQpIHx8IElTX1JUMzU3MihwQWQpIHx8IElTX1JUMzM5MChwQWQpKQotCSAgICAgJiYgSVNfVkVSU0lPTl9BRlRFUl9GKHBBZCkpICYmIElTX1ZFUlNJT05fQUZURVJfRihwQWQpCi0JICAgICYmIChwQWQtPlN0YUNmZy5QU0NvbnRyb2wuZmllbGQucnQzMHh4UG93ZXJNb2RlID09IDMpCi0JICAgICYmIChwQWQtPlN0YUNmZy5QU0NvbnRyb2wuZmllbGQuRW5hYmxlTmV3UFMgPT0gVFJVRSkKLQkgICAgJiYgKENvbW1hbmQgPT0gV0FLRV9NQ1VfQ01EKSkgewotCQlSVE1QdXNlY0RlbGF5KDIwMDApOwotCQkvKlB1dCB0aGlzIGlzIGFmdGVyIFJGIHByb2dyYW1taW5nLiAqLwotCQkvKk5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+TWN1Q21kTG9jayk7ICovCi0JCS8qcEFkLT5icnQzMHh4QmFuTWN1Q21kID0gRkFMU0U7ICovCi0JCS8qTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5NY3VDbWRMb2NrKTsgKi8KLQl9Ci0jZW5kaWYgLyogUENJRV9QU19TVVBQT1JUIC8vICovCi0KLQlyZXR1cm4gVFJVRTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL3J0bXBfdGltZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL3J0bXBfdGltZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWI1MjA5MC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9ydG1wX3RpbWVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMDIgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSAgICBNb2R1bGUgTmFtZToKLSAgICBydG1wX3RpbWVyLmMKLQotICAgIEFic3RyYWN0OgotICAgIHRhc2sgZm9yIHRpbWVyIGhhbmRsaW5nCi0KLSAgICBSZXZpc2lvbiBIaXN0b3J5OgotICAgIFdobyAgICAgICAgIFdoZW4gICAgICAgICAgICBXaGF0Ci0gICAgLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBOYW1lICAgICAgICAgIERhdGUgICAgICAgICAgICBNb2RpZmljYXRpb24gbG9ncwotICAgIFNoaWFuZyBUdQkwOC0yOC0yMDA4ICAgaW5pdCB2ZXJzaW9uCi0KLSovCi0KLSNpbmNsdWRlICIuLi9ydF9jb25maWcuaCIKLQotQlVJTERfVElNRVJfRlVOQ1RJT04oTWxtZVBlcmlvZGljRXhlYyk7Ci0vKkJVSUxEX1RJTUVSX0ZVTkNUSU9OKE1sbWVSc3NpUmVwb3J0RXhlYyk7ICovCi1CVUlMRF9USU1FUl9GVU5DVElPTihBc2ljUnhBbnRFdmFsVGltZW91dCk7Ci1CVUlMRF9USU1FUl9GVU5DVElPTihBUFNEUGVyaW9kaWNFeGVjKTsKLUJVSUxEX1RJTUVSX0ZVTkNUSU9OKEFzaWNSZlR1bmluZ0V4ZWMpOwotI2lmZGVmIFJUTVBfTUFDX1VTQgotQlVJTERfVElNRVJfRlVOQ1RJT04oQmVhY29uVXBkYXRlRXhlYyk7Ci0jZW5kaWYgLyogUlRNUF9NQUNfVVNCIC8vICovCi0KLUJVSUxEX1RJTUVSX0ZVTkNUSU9OKEJlYWNvblRpbWVvdXQpOwotQlVJTERfVElNRVJfRlVOQ1RJT04oU2NhblRpbWVvdXQpOwotQlVJTERfVElNRVJfRlVOQ1RJT04oQXV0aFRpbWVvdXQpOwotQlVJTERfVElNRVJfRlVOQ1RJT04oQXNzb2NUaW1lb3V0KTsKLUJVSUxEX1RJTUVSX0ZVTkNUSU9OKFJlYXNzb2NUaW1lb3V0KTsKLUJVSUxEX1RJTUVSX0ZVTkNUSU9OKERpc2Fzc29jVGltZW91dCk7Ci1CVUlMRF9USU1FUl9GVU5DVElPTihMaW5rRG93bkV4ZWMpOwotQlVJTERfVElNRVJfRlVOQ1RJT04oU3RhUXVpY2tSZXNwb25lRm9yUmF0ZVVwRXhlYyk7Ci1CVUlMRF9USU1FUl9GVU5DVElPTihXcGFEaXNhc3NvY0FwQW5kQmxvY2tBc3NvYyk7Ci0jaWZkZWYgUlRNUF9NQUNfUENJCi1CVUlMRF9USU1FUl9GVU5DVElPTihQc1BvbGxXYWtlRXhlYyk7Ci1CVUlMRF9USU1FUl9GVU5DVElPTihSYWRpb09uRXhlYyk7Ci0jZW5kaWYgLyogUlRNUF9NQUNfUENJIC8vICovCi0jaWZkZWYgUlRNUF9NQUNfVVNCCi1CVUlMRF9USU1FUl9GVU5DVElPTihSdG1wVXNiU3RhQXNpY0ZvcmNlV2FrZXVwVGltZW91dCk7Ci0jZW5kaWYgLyogUlRNUF9NQUNfVVNCIC8vICovCi0KLSNpZiBkZWZpbmVkKEFQX0xFRCkgfHwgZGVmaW5lZChTVEFfTEVEKQotZXh0ZXJuIHZvaWQgTGVkQ3RybE1haW4odm9pZCAqU3lzdGVtU3BlY2lmaWMxLAotCQkJdm9pZCAqRnVuY3Rpb25Db250ZXh0LAotCQkJdm9pZCAqU3lzdGVtU3BlY2lmaWMyLCB2b2lkICpTeXN0ZW1TcGVjaWZpYzMpOwotQlVJTERfVElNRVJfRlVOQ1RJT04oTGVkQ3RybE1haW4pOwotI2VuZGlmCi0KLSNpZmRlZiBSVE1QX1RJTUVSX1RBU0tfU1VQUE9SVAotc3RhdGljIHZvaWQgUnRtcFRpbWVyUUhhbmRsZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0jaWZuZGVmIEtUSFJFQURfU1VQUE9SVAotCWludCBzdGF0dXM7Ci0jZW5kaWYKLQlzdHJ1Y3QgcnRfcmFsaW5rX3RpbWVyICpwVGltZXI7Ci0Jc3RydWN0IHJ0X3J0bXBfdGltZXJfdGFza19lbnRyeSAqcEVudHJ5OwotCXVuc2lnbmVkIGxvbmcgaXJxRmxhZzsKLQlzdHJ1Y3QgcnRfcnRtcF9vc190YXNrICpwVGFzazsKLQotCXBUYXNrID0gJnBBZC0+dGltZXJUYXNrOwotCXdoaWxlICghcFRhc2stPnRhc2tfa2lsbGVkKSB7Ci0JCXBUaW1lciA9IE5VTEw7Ci0KLSNpZmRlZiBLVEhSRUFEX1NVUFBPUlQKLQkJUlRNUF9XQUlUX0VWRU5UX0lOVEVSUlVQVElCTEUocEFkLCBwVGFzayk7Ci0jZWxzZQotCQlSVE1QX1NFTV9FVkVOVF9XQUlUKCYocFRhc2stPnRhc2tTZW1hKSwgc3RhdHVzKTsKLSNlbmRpZgotCi0JCWlmIChwQWQtPlRpbWVyUS5zdGF0dXMgPT0gUlRNUF9UQVNLX1NUQVRfU1RPUEVEKQotCQkJYnJlYWs7Ci0KLQkJLyogZXZlbnQgaGFwcGVuZWQuICovCi0JCXdoaWxlIChwQWQtPlRpbWVyUS5wUUhlYWQpIHsKLQkJCVJUTVBfSU5UX0xPQ0soJnBBZC0+VGltZXJRTG9jaywgaXJxRmxhZyk7Ci0JCQlwRW50cnkgPSBwQWQtPlRpbWVyUS5wUUhlYWQ7Ci0JCQlpZiAocEVudHJ5KSB7Ci0JCQkJcFRpbWVyID0gcEVudHJ5LT5wUmFUaW1lcjsKLQotCQkJCS8qIHVwZGF0ZSBwUUhlYWQgKi8KLQkJCQlwQWQtPlRpbWVyUS5wUUhlYWQgPSBwRW50cnktPnBOZXh0OwotCQkJCWlmIChwRW50cnkgPT0gcEFkLT5UaW1lclEucFFUYWlsKQotCQkJCQlwQWQtPlRpbWVyUS5wUVRhaWwgPSBOVUxMOwotCi0JCQkJLyogcmV0dXJuIHRoaXMgcXVldWUgZW50cnkgdG8gdGltZXJRRnJlZUxpc3QuICovCi0JCQkJcEVudHJ5LT5wTmV4dCA9IHBBZC0+VGltZXJRLnBRUG9sbEZyZWVMaXN0OwotCQkJCXBBZC0+VGltZXJRLnBRUG9sbEZyZWVMaXN0ID0gcEVudHJ5OwotCQkJfQotCQkJUlRNUF9JTlRfVU5MT0NLKCZwQWQtPlRpbWVyUUxvY2ssIGlycUZsYWcpOwotCi0JCQlpZiAocFRpbWVyKSB7Ci0JCQkJaWYgKChwVGltZXItPmhhbmRsZSAhPSBOVUxMKQotCQkJCSAgICAmJiAoIXBBZC0+UE1fRmxnU3VzcGVuZCkpCi0JCQkJCXBUaW1lci0+aGFuZGxlKE5VTEwsCi0JCQkJCQkgICAgICAgKHZvaWQgKilwVGltZXItPmNvb2tpZSwKLQkJCQkJCSAgICAgICBOVUxMLCBwVGltZXIpOwotCQkJCWlmICgocFRpbWVyLT5SZXBlYXQpCi0JCQkJICAgICYmIChwVGltZXItPlN0YXRlID09IEZBTFNFKSkKLQkJCQkJUlRNUF9PU19BZGRfVGltZXIoJnBUaW1lci0+VGltZXJPYmosCi0JCQkJCQkJICBwVGltZXItPlRpbWVyVmFsdWUpOwotCQkJfQotCQl9Ci0KLSNpZm5kZWYgS1RIUkVBRF9TVVBQT1JUCi0JCWlmIChzdGF0dXMgIT0gMCkgewotCQkJcEFkLT5UaW1lclEuc3RhdHVzID0gUlRNUF9UQVNLX1NUQVRfU1RPUEVEOwotCQkJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyk7Ci0JCQlicmVhazsKLQkJfQotI2VuZGlmCi0JfQotfQotCi1pbnQgUnRtcFRpbWVyUVRocmVhZChJTiB2b2lkICpDb250ZXh0KQotewotCXN0cnVjdCBydF9ydG1wX29zX3Rhc2sgKnBUYXNrOwotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZDsKLQotCXBUYXNrID0gQ29udGV4dDsKLQlwQWQgPSBwVGFzay0+cHJpdjsKLQotCVJ0bXBPU1Rhc2tDdXN0b21pemUocFRhc2spOwotCi0JUnRtcFRpbWVyUUhhbmRsZShwQWQpOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPC0tLSVzXG4iLCBfX2Z1bmNfXykpOwotI2lmbmRlZiBLVEhSRUFEX1NVUFBPUlQKLQlwVGFzay0+dGFza1BJRCA9IFRIUkVBRF9QSURfSU5JVF9WQUxVRTsKLSNlbmRpZgotCS8qIG5vdGlmeSB0aGUgZXhpdCByb3V0aW5lIHRoYXQgd2UncmUgYWN0dWFsbHkgZXhpdGluZyBub3cKLQkgKgotCSAqIGNvbXBsZXRlKCkvd2FpdF9mb3JfY29tcGxldGlvbigpIGlzIHNpbWlsYXIgdG8gdXAoKS9kb3duKCksCi0JICogZXhjZXB0IHRoYXQgY29tcGxldGUoKSBpcyBzYWZlIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBzdHJ1Y3R1cmUKLQkgKiBpcyBnZXR0aW5nIGRlbGV0ZWQgaW4gYSBwYXJhbGxlbCBtb2RlIG9mIGV4ZWN1dGlvbiAoaS5lLiBqdXN0Ci0JICogYWZ0ZXIgdGhlIGRvd24oKSAtLSB0aGF0J3MgbmVjZXNzYXJ5IGZvciB0aGUgdGhyZWFkLXNodXRkb3duCi0JICogY2FzZS4KLQkgKgotCSAqIGNvbXBsZXRlX2FuZF9leGl0KCkgZ29lcyBldmVuIGZ1cnRoZXIgdGhhbiB0aGlzIC0tIGl0IGlzIHNhZmUgaW4KLQkgKiB0aGUgY2FzZSB0aGF0IHRoZSB0aHJlYWQgb2YgdGhlIGNhbGxlciBpcyBnb2luZyBhd2F5IChub3QganVzdAotCSAqIHRoZSBzdHJ1Y3R1cmUpIC0tIHRoaXMgaXMgbmVjZXNzYXJ5IGZvciB0aGUgbW9kdWxlLXJlbW92ZSBjYXNlLgotCSAqIFRoaXMgaXMgaW1wb3J0YW50IGluIHByZWVtcHRpb24ga2VybmVscywgd2hpY2ggdHJhbnNmZXIgdGhlIGZsb3cKLQkgKiBvZiBleGVjdXRpb24gaW1tZWRpYXRlbHkgdXBvbiBhIGNvbXBsZXRlKCkuCi0JICovCi0JUnRtcE9TVGFza05vdGlmeVRvRXhpdChwVGFzayk7Ci0KLQlyZXR1cm4gMDsKLQotfQotCi1zdHJ1Y3QgcnRfcnRtcF90aW1lcl90YXNrX2VudHJ5ICpSdG1wVGltZXJRSW5zZXJ0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkJc3RydWN0IHJ0X3JhbGlua190aW1lciAqcFRpbWVyKQotewotCXN0cnVjdCBydF9ydG1wX3RpbWVyX3Rhc2tfZW50cnkgKnBRTm9kZSA9IE5VTEwsICpwUVRhaWw7Ci0JdW5zaWduZWQgbG9uZyBpcnFGbGFnczsKLQlzdHJ1Y3QgcnRfcnRtcF9vc190YXNrICpwVGFzayA9ICZwQWQtPnRpbWVyVGFzazsKLQotCVJUTVBfSU5UX0xPQ0soJnBBZC0+VGltZXJRTG9jaywgaXJxRmxhZ3MpOwotCWlmIChwQWQtPlRpbWVyUS5zdGF0dXMgJiBSVE1QX1RBU0tfQ0FOX0RPX0lOU0VSVCkgewotCQlpZiAocEFkLT5UaW1lclEucFFQb2xsRnJlZUxpc3QpIHsKLQkJCXBRTm9kZSA9IHBBZC0+VGltZXJRLnBRUG9sbEZyZWVMaXN0OwotCQkJcEFkLT5UaW1lclEucFFQb2xsRnJlZUxpc3QgPSBwUU5vZGUtPnBOZXh0OwotCi0JCQlwUU5vZGUtPnBSYVRpbWVyID0gcFRpbWVyOwotCQkJcFFOb2RlLT5wTmV4dCA9IE5VTEw7Ci0KLQkJCXBRVGFpbCA9IHBBZC0+VGltZXJRLnBRVGFpbDsKLQkJCWlmIChwQWQtPlRpbWVyUS5wUVRhaWwgIT0gTlVMTCkKLQkJCQlwUVRhaWwtPnBOZXh0ID0gcFFOb2RlOwotCQkJcEFkLT5UaW1lclEucFFUYWlsID0gcFFOb2RlOwotCQkJaWYgKHBBZC0+VGltZXJRLnBRSGVhZCA9PSBOVUxMKQotCQkJCXBBZC0+VGltZXJRLnBRSGVhZCA9IHBRTm9kZTsKLQkJfQotCX0KLQlSVE1QX0lOVF9VTkxPQ0soJnBBZC0+VGltZXJRTG9jaywgaXJxRmxhZ3MpOwotCi0JaWYgKHBRTm9kZSkgewotI2lmZGVmIEtUSFJFQURfU1VQUE9SVAotCQlXQUtFX1VQKHBUYXNrKTsKLSNlbHNlCi0JCVJUTVBfU0VNX0VWRU5UX1VQKCZwVGFzay0+dGFza1NlbWEpOwotI2VuZGlmCi0JfQotCi0JcmV0dXJuIHBRTm9kZTsKLX0KLQotQk9PTEVBTiBSdG1wVGltZXJRUmVtb3ZlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X3JhbGlua190aW1lciAqcFRpbWVyKQotewotCXN0cnVjdCBydF9ydG1wX3RpbWVyX3Rhc2tfZW50cnkgKnBOb2RlLCAqcFByZXYgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgaXJxRmxhZ3M7Ci0KLQlSVE1QX0lOVF9MT0NLKCZwQWQtPlRpbWVyUUxvY2ssIGlycUZsYWdzKTsKLQlpZiAocEFkLT5UaW1lclEuc3RhdHVzID49IFJUTVBfVEFTS19TVEFUX0lOSVRFRCkgewotCQlwTm9kZSA9IHBBZC0+VGltZXJRLnBRSGVhZDsKLQkJd2hpbGUgKHBOb2RlKSB7Ci0JCQlpZiAocE5vZGUtPnBSYVRpbWVyID09IHBUaW1lcikKLQkJCQlicmVhazsKLQkJCXBQcmV2ID0gcE5vZGU7Ci0JCQlwTm9kZSA9IHBOb2RlLT5wTmV4dDsKLQkJfQotCi0JCS8qIE5vdyBtb3ZlIGl0IHRvIGZyZWVMaXN0IHF1ZXVlLiAqLwotCQlpZiAocE5vZGUpIHsKLQkJCWlmIChwTm9kZSA9PSBwQWQtPlRpbWVyUS5wUUhlYWQpCi0JCQkJcEFkLT5UaW1lclEucFFIZWFkID0gcE5vZGUtPnBOZXh0OwotCQkJaWYgKHBOb2RlID09IHBBZC0+VGltZXJRLnBRVGFpbCkKLQkJCQlwQWQtPlRpbWVyUS5wUVRhaWwgPSBwUHJldjsKLQkJCWlmIChwUHJldiAhPSBOVUxMKQotCQkJCXBQcmV2LT5wTmV4dCA9IHBOb2RlLT5wTmV4dDsKLQotCQkJLyogcmV0dXJuIHRoaXMgcXVldWUgZW50cnkgdG8gdGltZXJRRnJlZUxpc3QuICovCi0JCQlwTm9kZS0+cE5leHQgPSBwQWQtPlRpbWVyUS5wUVBvbGxGcmVlTGlzdDsKLQkJCXBBZC0+VGltZXJRLnBRUG9sbEZyZWVMaXN0ID0gcE5vZGU7Ci0JCX0KLQl9Ci0JUlRNUF9JTlRfVU5MT0NLKCZwQWQtPlRpbWVyUUxvY2ssIGlycUZsYWdzKTsKLQotCXJldHVybiBUUlVFOwotfQotCi12b2lkIFJ0bXBUaW1lclFFeGl0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlzdHJ1Y3QgcnRfcnRtcF90aW1lcl90YXNrX2VudHJ5ICpwVGltZXJROwotCXVuc2lnbmVkIGxvbmcgaXJxRmxhZ3M7Ci0KLQlSVE1QX0lOVF9MT0NLKCZwQWQtPlRpbWVyUUxvY2ssIGlycUZsYWdzKTsKLQl3aGlsZSAocEFkLT5UaW1lclEucFFIZWFkKSB7Ci0JCXBUaW1lclEgPSBwQWQtPlRpbWVyUS5wUUhlYWQ7Ci0JCXBBZC0+VGltZXJRLnBRSGVhZCA9IHBUaW1lclEtPnBOZXh0OwotCQkvKiByZW1vdmUgdGhlIHRpbWVRICovCi0JfQotCXBBZC0+VGltZXJRLnBRUG9sbEZyZWVMaXN0ID0gTlVMTDsKLQlvc19mcmVlX21lbShwQWQsIHBBZC0+VGltZXJRLnBUaW1lclFQb2xsKTsKLQlwQWQtPlRpbWVyUS5wUVRhaWwgPSBOVUxMOwotCXBBZC0+VGltZXJRLnBRSGVhZCA9IE5VTEw7Ci0jaWZuZGVmIEtUSFJFQURfU1VQUE9SVAotCXBBZC0+VGltZXJRLnN0YXR1cyA9IFJUTVBfVEFTS19TVEFUX1NUT1BFRDsKLSNlbmRpZgotCVJUTVBfSU5UX1VOTE9DSygmcEFkLT5UaW1lclFMb2NrLCBpcnFGbGFncyk7Ci0KLX0KLQotdm9pZCBSdG1wVGltZXJRSW5pdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IHJ0X3J0bXBfdGltZXJfdGFza19lbnRyeSAqcFFOb2RlLCAqcEVudHJ5OwotCXVuc2lnbmVkIGxvbmcgaXJxRmxhZ3M7Ci0KLQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5UaW1lclFMb2NrKTsKLQotCU5kaXNaZXJvTWVtb3J5KCZwQWQtPlRpbWVyUSwgc2l6ZW9mKHBBZC0+VGltZXJRKSk7Ci0KLQlvc19hbGxvY19tZW0ocEFkLCAmcEFkLT5UaW1lclEucFRpbWVyUVBvbGwsCi0JCSAgICAgc2l6ZW9mKHN0cnVjdCBydF9ydG1wX3RpbWVyX3Rhc2tfZW50cnkpICogVElNRVJfUVVFVUVfU0laRV9NQVgpOwotCWlmIChwQWQtPlRpbWVyUS5wVGltZXJRUG9sbCkgewotCQlwRW50cnkgPSBOVUxMOwotCQlwUU5vZGUgPSAoc3RydWN0IHJ0X3J0bXBfdGltZXJfdGFza19lbnRyeSAqKXBBZC0+VGltZXJRLnBUaW1lclFQb2xsOwotCQlOZGlzWmVyb01lbW9yeShwQWQtPlRpbWVyUS5wVGltZXJRUG9sbCwKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHJ0X3J0bXBfdGltZXJfdGFza19lbnRyeSkgKgotCQkJICAgICAgIFRJTUVSX1FVRVVFX1NJWkVfTUFYKTsKLQotCQlSVE1QX0lOVF9MT0NLKCZwQWQtPlRpbWVyUUxvY2ssIGlycUZsYWdzKTsKLQkJZm9yIChpID0gMDsgaSA8IFRJTUVSX1FVRVVFX1NJWkVfTUFYOyBpKyspIHsKLQkJCXBRTm9kZS0+cE5leHQgPSBwRW50cnk7Ci0JCQlwRW50cnkgPSBwUU5vZGU7Ci0JCQlwUU5vZGUrKzsKLQkJfQotCQlwQWQtPlRpbWVyUS5wUVBvbGxGcmVlTGlzdCA9IHBFbnRyeTsKLQkJcEFkLT5UaW1lclEucFFIZWFkID0gTlVMTDsKLQkJcEFkLT5UaW1lclEucFFUYWlsID0gTlVMTDsKLQkJcEFkLT5UaW1lclEuc3RhdHVzID0gUlRNUF9UQVNLX1NUQVRfSU5JVEVEOwotCQlSVE1QX0lOVF9VTkxPQ0soJnBBZC0+VGltZXJRTG9jaywgaXJxRmxhZ3MpOwotCX0KLX0KLSNlbmRpZiAvKiBSVE1QX1RJTUVSX1RBU0tfU1VQUE9SVCAvLyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vc3BlY3RydW0uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL3NwZWN0cnVtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlYjYyMmQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vc3BlY3RydW0uYworKysgL2Rldi9udWxsCkBAIC0xLDIyMDUgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSAgICBNb2R1bGUgTmFtZToKLQlhY3Rpb24uYwotCi0gICAgQWJzdHJhY3Q6Ci0gICAgSGFuZGxlIGFzc29jaWF0aW9uIHJlbGF0ZWQgcmVxdWVzdHMgZWl0aGVyIGZyb20gV1NUQSBvciBmcm9tIGxvY2FsIE1MTUUKLQotICAgIFJldmlzaW9uIEhpc3Rvcnk6Ci0gICAgV2hvICAgICAgICAgIFdoZW4gICAgICAgICAgV2hhdAotICAgIC0tLS0tLS0tLSAgICAtLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlGb25jaGkgV3UgICAgMjAwOAkgIAkgICBjcmVhdGVkIGZvciA4MDIuMTFoCi0gKi8KLQotI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgotI2luY2x1ZGUgImFjdGlvbi5oIgotCi0vKiBUaGUgcmVndWxhdG9yeSBpbmZvcm1hdGlvbiBpbiB0aGUgVVNBIChVUykgKi8KLXN0cnVjdCBydF9kb3QxMV9yZWd1bGF0b3J5X2luZm9ybWF0aW9uIFVTQVJlZ3VsYXRvcnlJbmZvW10gPSB7Ci0vKiAgInJlZ3VsYXRvcnkgY2xhc3MiICAibnVtYmVyIG9mIGNoYW5uZWxzIiAgIk1heCBUeCBQd3IiICAiY2hhbm5lbCBsaXN0IiAqLwotCXswLCB7MCwgMCwgezB9Ci0JICAgICB9Ci0JIH0KLQksCQkJLyogSW52bGlkIGVudHJ5ICovCi0JezEsIHs0LCAxNiwgezM2LCA0MCwgNDQsIDQ4fQotCSAgICAgfQotCSB9Ci0JLAotCXsyLCB7NCwgMjMsIHs1MiwgNTYsIDYwLCA2NH0KLQkgICAgIH0KLQkgfQotCSwKLQl7MywgezQsIDI5LCB7MTQ5LCAxNTMsIDE1NywgMTYxfQotCSAgICAgfQotCSB9Ci0JLAotCXs0LCB7MTEsIDIzLCB7MTAwLCAxMDQsIDEwOCwgMTEyLCAxMTYsIDEyMCwgMTI0LCAxMjgsIDEzMiwgMTM2LCAxNDB9Ci0JICAgICB9Ci0JIH0KLQksCi0JezUsIHs1LCAzMCwgezE0OSwgMTUzLCAxNTcsIDE2MSwgMTY1fQotCSAgICAgfQotCSB9Ci0JLAotCXs2LCB7MTAsIDE0LCB7MSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTB9Ci0JICAgICB9Ci0JIH0KLQksCi0JezcsIHsxMCwgMjcsIHsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMH0KLQkgICAgIH0KLQkgfQotCSwKLQl7OCwgezUsIDE3LCB7MTEsIDEzLCAxNSwgMTcsIDE5fQotCSAgICAgfQotCSB9Ci0JLAotCXs5LCB7NSwgMzAsIHsxMSwgMTMsIDE1LCAxNywgMTl9Ci0JICAgICB9Ci0JIH0KLQksCi0JezEwLCB7MiwgMjAsIHsyMSwgMjV9Ci0JICAgICAgfQotCSB9Ci0JLAotCXsxMSwgezIsIDMzLCB7MjEsIDI1fQotCSAgICAgIH0KLQkgfQotCSwKLQl7MTIsIHsxMSwgMzAsIHsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTF9Ci0JICAgICAgfQotCSB9Ci19OwotCi0jZGVmaW5lIFVTQV9SRUdVTEFUT1JZX0lORk9fU0laRSAoc2l6ZW9mKFVTQVJlZ3VsYXRvcnlJbmZvKSAvIHNpemVvZihzdHJ1Y3QgcnRfZG90MTFfcmVndWxhdG9yeV9pbmZvcm1hdGlvbikpCi0KLS8qIFRoZSByZWd1bGF0b3J5IGluZm9ybWF0aW9uIGluIEV1cm9wZSAqLwotc3RydWN0IHJ0X2RvdDExX3JlZ3VsYXRvcnlfaW5mb3JtYXRpb24gRXVyb3BlUmVndWxhdG9yeUluZm9bXSA9IHsKLS8qICAicmVndWxhdG9yeSBjbGFzcyIgICJudW1iZXIgb2YgY2hhbm5lbHMiICAiTWF4IFR4IFB3ciIgICJjaGFubmVsIGxpc3QiICovCi0JezAsIHswLCAwLCB7MH0KLQkgICAgIH0KLQkgfQotCSwJCQkvKiBJbnZhbGlkIGVudHJ5ICovCi0JezEsIHs0LCAyMCwgezM2LCA0MCwgNDQsIDQ4fQotCSAgICAgfQotCSB9Ci0JLAotCXsyLCB7NCwgMjAsIHs1MiwgNTYsIDYwLCA2NH0KLQkgICAgIH0KLQkgfQotCSwKLQl7MywgezExLCAzMCwgezEwMCwgMTA0LCAxMDgsIDExMiwgMTE2LCAxMjAsIDEyNCwgMTI4LCAxMzIsIDEzNiwgMTQwfQotCSAgICAgfQotCSB9Ci0JLAotCXs0LCB7MTMsIDIwLCB7MSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTN9Ci0JICAgICB9Ci0JIH0KLX07Ci0KLSNkZWZpbmUgRVVfUkVHVUxBVE9SWV9JTkZPX1NJWkUgKHNpemVvZihFdXJvcGVSZWd1bGF0b3J5SW5mbykgLyBzaXplb2Yoc3RydWN0IHJ0X2RvdDExX3JlZ3VsYXRvcnlfaW5mb3JtYXRpb24pKQotCi0vKiBUaGUgcmVndWxhdG9yeSBpbmZvcm1hdGlvbiBpbiBKYXBhbiAqLwotc3RydWN0IHJ0X2RvdDExX3JlZ3VsYXRvcnlfaW5mb3JtYXRpb24gSmFwYW5SZWd1bGF0b3J5SW5mb1tdID0gewotLyogICJyZWd1bGF0b3J5IGNsYXNzIiAgIm51bWJlciBvZiBjaGFubmVscyIgICJNYXggVHggUHdyIiAgImNoYW5uZWwgbGlzdCIgKi8KLQl7MCwgezAsIDAsIHswfQotCSAgICAgfQotCSB9Ci0JLAkJCS8qIEludmFsaWQgZW50cnkgKi8KLQl7MSwgezQsIDIyLCB7MzQsIDM4LCA0MiwgNDZ9Ci0JICAgICB9Ci0JIH0KLQksCi0JezIsIHszLCAyNCwgezgsIDEyLCAxNn0KLQkgICAgIH0KLQkgfQotCSwKLQl7MywgezMsIDI0LCB7OCwgMTIsIDE2fQotCSAgICAgfQotCSB9Ci0JLAotCXs0LCB7MywgMjQsIHs4LCAxMiwgMTZ9Ci0JICAgICB9Ci0JIH0KLQksCi0JezUsIHszLCAyNCwgezgsIDEyLCAxNn0KLQkgICAgIH0KLQkgfQotCSwKLQl7NiwgezMsIDIyLCB7OCwgMTIsIDE2fQotCSAgICAgfQotCSB9Ci0JLAotCXs3LCB7NCwgMjQsIHsxODQsIDE4OCwgMTkyLCAxOTZ9Ci0JICAgICB9Ci0JIH0KLQksCi0JezgsIHs0LCAyNCwgezE4NCwgMTg4LCAxOTIsIDE5Nn0KLQkgICAgIH0KLQkgfQotCSwKLQl7OSwgezQsIDI0LCB7MTg0LCAxODgsIDE5MiwgMTk2fQotCSAgICAgfQotCSB9Ci0JLAotCXsxMCwgezQsIDI0LCB7MTg0LCAxODgsIDE5MiwgMTk2fQotCSAgICAgIH0KLQkgfQotCSwKLQl7MTEsIHs0LCAyMiwgezE4NCwgMTg4LCAxOTIsIDE5Nn0KLQkgICAgICB9Ci0JIH0KLQksCi0JezEyLCB7NCwgMjQsIHs3LCA4LCA5LCAxMX0KLQkgICAgICB9Ci0JIH0KLQksCi0JezEzLCB7NCwgMjQsIHs3LCA4LCA5LCAxMX0KLQkgICAgICB9Ci0JIH0KLQksCi0JezE0LCB7NCwgMjQsIHs3LCA4LCA5LCAxMX0KLQkgICAgICB9Ci0JIH0KLQksCi0JezE1LCB7NCwgMjQsIHs3LCA4LCA5LCAxMX0KLQkgICAgICB9Ci0JIH0KLQksCi0JezE2LCB7NiwgMjQsIHsxODMsIDE4NCwgMTg1LCAxODcsIDE4OCwgMTg5fQotCSAgICAgIH0KLQkgfQotCSwKLQl7MTcsIHs2LCAyNCwgezE4MywgMTg0LCAxODUsIDE4NywgMTg4LCAxODl9Ci0JICAgICAgfQotCSB9Ci0JLAotCXsxOCwgezYsIDI0LCB7MTgzLCAxODQsIDE4NSwgMTg3LCAxODgsIDE4OX0KLQkgICAgICB9Ci0JIH0KLQksCi0JezE5LCB7NiwgMjQsIHsxODMsIDE4NCwgMTg1LCAxODcsIDE4OCwgMTg5fQotCSAgICAgIH0KLQkgfQotCSwKLQl7MjAsIHs2LCAxNywgezE4MywgMTg0LCAxODUsIDE4NywgMTg4LCAxODl9Ci0JICAgICAgfQotCSB9Ci0JLAotCXsyMSwgezYsIDI0LCB7NiwgNywgOCwgOSwgMTAsIDExfQotCSAgICAgIH0KLQkgfQotCSwKLQl7MjIsIHs2LCAyNCwgezYsIDcsIDgsIDksIDEwLCAxMX0KLQkgICAgICB9Ci0JIH0KLQksCi0JezIzLCB7NiwgMjQsIHs2LCA3LCA4LCA5LCAxMCwgMTF9Ci0JICAgICAgfQotCSB9Ci0JLAotCXsyNCwgezYsIDI0LCB7NiwgNywgOCwgOSwgMTAsIDExfQotCSAgICAgIH0KLQkgfQotCSwKLQl7MjUsIHs4LCAyNCwgezE4MiwgMTgzLCAxODQsIDE4NSwgMTg2LCAxODcsIDE4OCwgMTg5fQotCSAgICAgIH0KLQkgfQotCSwKLQl7MjYsIHs4LCAyNCwgezE4MiwgMTgzLCAxODQsIDE4NSwgMTg2LCAxODcsIDE4OCwgMTg5fQotCSAgICAgIH0KLQkgfQotCSwKLQl7MjcsIHs4LCAyNCwgezE4MiwgMTgzLCAxODQsIDE4NSwgMTg2LCAxODcsIDE4OCwgMTg5fQotCSAgICAgIH0KLQkgfQotCSwKLQl7MjgsIHs4LCAyNCwgezE4MiwgMTgzLCAxODQsIDE4NSwgMTg2LCAxODcsIDE4OCwgMTg5fQotCSAgICAgIH0KLQkgfQotCSwKLQl7MjksIHs4LCAxNywgezE4MiwgMTgzLCAxODQsIDE4NSwgMTg2LCAxODcsIDE4OCwgMTg5fQotCSAgICAgIH0KLQkgfQotCSwKLQl7MzAsIHsxMywgMjMsIHsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxM30KLQkgICAgICB9Ci0JIH0KLQksCi0JezMxLCB7MSwgMjMsIHsxNH0KLQkgICAgICB9Ci0JIH0KLQksCi0JezMyLCB7NCwgMjIsIHs1MiwgNTYsIDYwLCA2NH0KLQkgICAgICB9Ci0JIH0KLX07Ci0KLSNkZWZpbmUgSlBfUkVHVUxBVE9SWV9JTkZPX1NJWkUgKHNpemVvZihKYXBhblJlZ3VsYXRvcnlJbmZvKSAvIHNpemVvZihzdHJ1Y3QgcnRfZG90MTFfcmVndWxhdG9yeV9pbmZvcm1hdGlvbikpCi0KLWNoYXIgUlRNUF9HZXRUeFB3cihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIElOIEhUVFJBTlNNSVRfU0VUVElORyBIVFR4TW9kZSkKLXsKLQlzdHJ1Y3QgdHhfcHdyX2NmZyB7Ci0JCXU4IE1vZGU7Ci0JCXU4IE1DUzsKLQkJdTE2IHJlcTsKLQkJdTggc2hpZnQ7Ci0JCXUzMiBCaXRNYXNrOwotCX07Ci0KLQl1MzIgVmFsdWU7Ci0JaW50IElkeDsKLQl1OCBQaHlNb2RlOwotCWNoYXIgQ3VyVHhQd3I7Ci0JdTggVHhQd3JSZWYgPSAwOwotCWNoYXIgRGFsdGFQd3I7Ci0JdW5zaWduZWQgbG9uZyBUeFB3cls1XTsKLQotCXN0cnVjdCB0eF9wd3JfY2ZnIFR4UHdyQ2ZnW10gPSB7Ci0JCXtNT0RFX0NDSywgMCwgMCwgNCwgMHgwMDAwMDBmMH0sCi0JCXtNT0RFX0NDSywgMSwgMCwgMCwgMHgwMDAwMDAwZn0sCi0JCXtNT0RFX0NDSywgMiwgMCwgMTIsIDB4MDAwMGYwMDB9LAotCQl7TU9ERV9DQ0ssIDMsIDAsIDgsIDB4MDAwMDBmMDB9LAotCi0JCXtNT0RFX09GRE0sIDAsIDAsIDIwLCAweDAwZjAwMDAwfSwKLQkJe01PREVfT0ZETSwgMSwgMCwgMTYsIDB4MDAwZjAwMDB9LAotCQl7TU9ERV9PRkRNLCAyLCAwLCAyOCwgMHhmMDAwMDAwMH0sCi0JCXtNT0RFX09GRE0sIDMsIDAsIDI0LCAweDBmMDAwMDAwfSwKLQkJe01PREVfT0ZETSwgNCwgMSwgNCwgMHgwMDAwMDBmMH0sCi0JCXtNT0RFX09GRE0sIDUsIDEsIDAsIDB4MDAwMDAwMGZ9LAotCQl7TU9ERV9PRkRNLCA2LCAxLCAxMiwgMHgwMDAwZjAwMH0sCi0JCXtNT0RFX09GRE0sIDcsIDEsIDgsIDB4MDAwMDBmMDB9Ci0JCSwge01PREVfSFRNSVgsIDAsIDEsIDIwLCAweDAwZjAwMDAwfSwKLQkJe01PREVfSFRNSVgsIDEsIDEsIDE2LCAweDAwMGYwMDAwfSwKLQkJe01PREVfSFRNSVgsIDIsIDEsIDI4LCAweGYwMDAwMDAwfSwKLQkJe01PREVfSFRNSVgsIDMsIDEsIDI0LCAweDBmMDAwMDAwfSwKLQkJe01PREVfSFRNSVgsIDQsIDIsIDQsIDB4MDAwMDAwZjB9LAotCQl7TU9ERV9IVE1JWCwgNSwgMiwgMCwgMHgwMDAwMDAwZn0sCi0JCXtNT0RFX0hUTUlYLCA2LCAyLCAxMiwgMHgwMDAwZjAwMH0sCi0JCXtNT0RFX0hUTUlYLCA3LCAyLCA4LCAweDAwMDAwZjAwfSwKLQkJe01PREVfSFRNSVgsIDgsIDIsIDIwLCAweDAwZjAwMDAwfSwKLQkJe01PREVfSFRNSVgsIDksIDIsIDE2LCAweDAwMGYwMDAwfSwKLQkJe01PREVfSFRNSVgsIDEwLCAyLCAyOCwgMHhmMDAwMDAwMH0sCi0JCXtNT0RFX0hUTUlYLCAxMSwgMiwgMjQsIDB4MGYwMDAwMDB9LAotCQl7TU9ERV9IVE1JWCwgMTIsIDMsIDQsIDB4MDAwMDAwZjB9LAotCQl7TU9ERV9IVE1JWCwgMTMsIDMsIDAsIDB4MDAwMDAwMGZ9LAotCQl7TU9ERV9IVE1JWCwgMTQsIDMsIDEyLCAweDAwMDBmMDAwfSwKLQkJe01PREVfSFRNSVgsIDE1LCAzLCA4LCAweDAwMDAwZjAwfQotCX07Ci0jZGVmaW5lIE1BWF9UWFBXUl9UQUJfU0laRSAoc2l6ZW9mKFR4UHdyQ2ZnKSAvIHNpemVvZihzdHJ1Y3QgdHhfcHdyX2NmZykpCi0KLQlDdXJUeFB3ciA9IDE5OwotCi0JLyogY2hlY2sgVHggUG93ZXIgc2V0dGluZyBmcm9tIFVJLiAqLwotCWlmIChwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA+IDkwKSA7Ci0JZWxzZSBpZiAocEFkLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UgPiA2MCkJLyogcmVkdWNlIFB3ciBmb3IgMSBkQi4gKi8KLQkJQ3VyVHhQd3IgLT0gMTsKLQllbHNlIGlmIChwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA+IDMwKQkvKiByZWR1Y2UgUHdyIGZvciAzIGRCLiAqLwotCQlDdXJUeFB3ciAtPSAzOwotCWVsc2UgaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID4gMTUpCS8qIHJlZHVjZSBQd3IgZm9yIDYgZEIuICovCi0JCUN1clR4UHdyIC09IDY7Ci0JZWxzZSBpZiAocEFkLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UgPiA5KQkvKiByZWR1Y2UgUHdyIGZvciA5IGRCLiAqLwotCQlDdXJUeFB3ciAtPSA5OwotCWVsc2UJCQkvKiByZWR1Y2UgUHdyIGZvciAxMiBkQi4gKi8KLQkJQ3VyVHhQd3IgLT0gMTI7Ci0KLQlpZiAocEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXID09IEJXXzQwKSB7Ci0JCWlmIChwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCA+IDE0KSB7Ci0JCQlUeFB3clswXSA9IHBBZC0+VHg0ME1Qd3JDZmdBQmFuZFswXTsKLQkJCVR4UHdyWzFdID0gcEFkLT5UeDQwTVB3ckNmZ0FCYW5kWzFdOwotCQkJVHhQd3JbMl0gPSBwQWQtPlR4NDBNUHdyQ2ZnQUJhbmRbMl07Ci0JCQlUeFB3clszXSA9IHBBZC0+VHg0ME1Qd3JDZmdBQmFuZFszXTsKLQkJCVR4UHdyWzRdID0gcEFkLT5UeDQwTVB3ckNmZ0FCYW5kWzRdOwotCQl9IGVsc2UgewotCQkJVHhQd3JbMF0gPSBwQWQtPlR4NDBNUHdyQ2ZnR0JhbmRbMF07Ci0JCQlUeFB3clsxXSA9IHBBZC0+VHg0ME1Qd3JDZmdHQmFuZFsxXTsKLQkJCVR4UHdyWzJdID0gcEFkLT5UeDQwTVB3ckNmZ0dCYW5kWzJdOwotCQkJVHhQd3JbM10gPSBwQWQtPlR4NDBNUHdyQ2ZnR0JhbmRbM107Ci0JCQlUeFB3cls0XSA9IHBBZC0+VHg0ME1Qd3JDZmdHQmFuZFs0XTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChwQWQtPkNvbW1vbkNmZy5DaGFubmVsID4gMTQpIHsKLQkJCVR4UHdyWzBdID0gcEFkLT5UeDIwTVB3ckNmZ0FCYW5kWzBdOwotCQkJVHhQd3JbMV0gPSBwQWQtPlR4MjBNUHdyQ2ZnQUJhbmRbMV07Ci0JCQlUeFB3clsyXSA9IHBBZC0+VHgyME1Qd3JDZmdBQmFuZFsyXTsKLQkJCVR4UHdyWzNdID0gcEFkLT5UeDIwTVB3ckNmZ0FCYW5kWzNdOwotCQkJVHhQd3JbNF0gPSBwQWQtPlR4MjBNUHdyQ2ZnQUJhbmRbNF07Ci0JCX0gZWxzZSB7Ci0JCQlUeFB3clswXSA9IHBBZC0+VHgyME1Qd3JDZmdHQmFuZFswXTsKLQkJCVR4UHdyWzFdID0gcEFkLT5UeDIwTVB3ckNmZ0dCYW5kWzFdOwotCQkJVHhQd3JbMl0gPSBwQWQtPlR4MjBNUHdyQ2ZnR0JhbmRbMl07Ci0JCQlUeFB3clszXSA9IHBBZC0+VHgyME1Qd3JDZmdHQmFuZFszXTsKLQkJCVR4UHdyWzRdID0gcEFkLT5UeDIwTVB3ckNmZ0dCYW5kWzRdOwotCQl9Ci0JfQotCi0Jc3dpdGNoIChIVFR4TW9kZS5maWVsZC5NT0RFKSB7Ci0JY2FzZSBNT0RFX0NDSzoKLQljYXNlIE1PREVfT0ZETToKLQkJVmFsdWUgPSBUeFB3clsxXTsKLQkJVHhQd3JSZWYgPSAoVmFsdWUgJiAweDAwMDAwZjAwKSA+PiA4OwotCi0JCWJyZWFrOwotCi0JY2FzZSBNT0RFX0hUTUlYOgotCWNhc2UgTU9ERV9IVEdSRUVORklFTEQ6Ci0JCWlmIChwQWQtPkNvbW1vbkNmZy5UeFN0cmVhbSA9PSAxKSB7Ci0JCQlWYWx1ZSA9IFR4UHdyWzJdOwotCQkJVHhQd3JSZWYgPSAoVmFsdWUgJiAweDAwMDAwZjAwKSA+PiA4OwotCQl9IGVsc2UgaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4U3RyZWFtID09IDIpIHsKLQkJCVZhbHVlID0gVHhQd3JbM107Ci0JCQlUeFB3clJlZiA9IChWYWx1ZSAmIDB4MDAwMDBmMDApID4+IDg7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JUGh5TW9kZSA9IChIVFR4TW9kZS5maWVsZC5NT0RFID09IE1PREVfSFRHUkVFTkZJRUxEKQotCSAgICA/IE1PREVfSFRNSVggOiBIVFR4TW9kZS5maWVsZC5NT0RFOwotCi0JZm9yIChJZHggPSAwOyBJZHggPCBNQVhfVFhQV1JfVEFCX1NJWkU7IElkeCsrKSB7Ci0JCWlmICgoVHhQd3JDZmdbSWR4XS5Nb2RlID09IFBoeU1vZGUpCi0JCSAgICAmJiAoVHhQd3JDZmdbSWR4XS5NQ1MgPT0gSFRUeE1vZGUuZmllbGQuTUNTKSkgewotCQkJVmFsdWUgPSBUeFB3cltUeFB3ckNmZ1tJZHhdLnJlcV07Ci0JCQlEYWx0YVB3ciA9Ci0JCQkgICAgVHhQd3JSZWYgLSAoY2hhcikoKFZhbHVlICYgVHhQd3JDZmdbSWR4XS5CaXRNYXNrKQotCQkJCQkgICAgICAgPj4gVHhQd3JDZmdbSWR4XS5zaGlmdCk7Ci0JCQlDdXJUeFB3ciAtPSBEYWx0YVB3cjsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmV0dXJuIEN1clR4UHdyOwotfQotCi12b2lkIE1lYXN1cmVSZXFUYWJJbml0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5Db21tb25DZmcuTWVhc3VyZVJlcVRhYkxvY2spOwotCi0JcEFkLT5Db21tb25DZmcucE1lYXN1cmVSZXFUYWIgPQotCSAgICBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcnRfbWVhc3VyZV9yZXFfdGFiKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKHBBZC0+Q29tbW9uQ2ZnLnBNZWFzdXJlUmVxVGFiKQotCQlOZGlzWmVyb01lbW9yeShwQWQtPkNvbW1vbkNmZy5wTWVhc3VyZVJlcVRhYiwKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHJ0X21lYXN1cmVfcmVxX3RhYikpOwotCWVsc2UKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkgKCIlcyBGYWlsIHRvIGFsbG9jIG1lbW9yeSBmb3IgcEFkLT5Db21tb25DZmcucE1lYXN1cmVSZXFUYWIuXG4iLAotCQkJICBfX2Z1bmNfXykpOwotCi0JcmV0dXJuOwotfQotCi12b2lkIE1lYXN1cmVSZXFUYWJFeGl0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlOZGlzRnJlZVNwaW5Mb2NrKCZwQWQtPkNvbW1vbkNmZy5NZWFzdXJlUmVxVGFiTG9jayk7Ci0KLQlrZnJlZShwQWQtPkNvbW1vbkNmZy5wTWVhc3VyZVJlcVRhYik7Ci0JcEFkLT5Db21tb25DZmcucE1lYXN1cmVSZXFUYWIgPSBOVUxMOwotCi0JcmV0dXJuOwotfQotCi1zdHJ1Y3QgcnRfbWVhc3VyZV9yZXFfZW50cnkgKk1lYXN1cmVSZXFMb29rVXAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1OCBEaWFsb2dUb2tlbikKLXsKLQl1MzIgSGFzaElkeDsKLQlzdHJ1Y3QgcnRfbWVhc3VyZV9yZXFfdGFiICpwVGFiID0gcEFkLT5Db21tb25DZmcucE1lYXN1cmVSZXFUYWI7Ci0Jc3RydWN0IHJ0X21lYXN1cmVfcmVxX2VudHJ5ICpwRW50cnkgPSBOVUxMOwotCXN0cnVjdCBydF9tZWFzdXJlX3JlcV9lbnRyeSAqcFByZXZFbnRyeSA9IE5VTEw7Ci0KLQlpZiAocFRhYiA9PSBOVUxMKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJICgiJXM6IHBNZWFzdXJlUmVxVGFiIGRvZXNuJ3QgZXhpc3QuXG4iLCBfX2Z1bmNfXykpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlSVE1QX1NFTV9MT0NLKCZwQWQtPkNvbW1vbkNmZy5NZWFzdXJlUmVxVGFiTG9jayk7Ci0KLQlIYXNoSWR4ID0gTVFfRElBTE9HVE9LRU5fSEFTSF9JTkRFWChEaWFsb2dUb2tlbik7Ci0JcEVudHJ5ID0gcFRhYi0+SGFzaFtIYXNoSWR4XTsKLQotCXdoaWxlIChwRW50cnkpIHsKLQkJaWYgKHBFbnRyeS0+RGlhbG9nVG9rZW4gPT0gRGlhbG9nVG9rZW4pCi0JCQlicmVhazsKLQkJZWxzZSB7Ci0JCQlwUHJldkVudHJ5ID0gcEVudHJ5OwotCQkJcEVudHJ5ID0gcEVudHJ5LT5wTmV4dDsKLQkJfQotCX0KLQotCVJUTVBfU0VNX1VOTE9DSygmcEFkLT5Db21tb25DZmcuTWVhc3VyZVJlcVRhYkxvY2spOwotCi0JcmV0dXJuIHBFbnRyeTsKLX0KLQotc3RydWN0IHJ0X21lYXN1cmVfcmVxX2VudHJ5ICpNZWFzdXJlUmVxSW5zZXJ0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggRGlhbG9nVG9rZW4pCi17Ci0JaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBIYXNoSWR4OwotCXN0cnVjdCBydF9tZWFzdXJlX3JlcV90YWIgKnBUYWIgPSBwQWQtPkNvbW1vbkNmZy5wTWVhc3VyZVJlcVRhYjsKLQlzdHJ1Y3QgcnRfbWVhc3VyZV9yZXFfZW50cnkgKnBFbnRyeSA9IE5VTEwsICpwQ3VyckVudHJ5OwotCXVuc2lnbmVkIGxvbmcgTm93OwotCi0JaWYgKHBUYWIgPT0gTlVMTCkgewotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCSAoIiVzOiBwTWVhc3VyZVJlcVRhYiBkb2Vzbid0IGV4aXN0LlxuIiwgX19mdW5jX18pKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JcEVudHJ5ID0gTWVhc3VyZVJlcUxvb2tVcChwQWQsIERpYWxvZ1Rva2VuKTsKLQlpZiAocEVudHJ5ID09IE5VTEwpIHsKLQkJUlRNUF9TRU1fTE9DSygmcEFkLT5Db21tb25DZmcuTWVhc3VyZVJlcVRhYkxvY2spOwotCQlmb3IgKGkgPSAwOyBpIDwgTUFYX01FQVNVUkVfUkVRX1RBQl9TSVpFOyBpKyspIHsKLQkJCU5kaXNHZXRTeXN0ZW1VcFRpbWUoJk5vdyk7Ci0JCQlwRW50cnkgPSAmcFRhYi0+Q29udGVudFtpXTsKLQotCQkJaWYgKChwRW50cnktPlZhbGlkID09IFRSVUUpCi0JCQkgICAgJiYgUlRNUF9USU1FX0FGVEVSKCh1bnNpZ25lZCBsb25nKU5vdywKLQkJCQkJICAgICAgICh1bnNpZ25lZCBsb25nKShwRW50cnktPgotCQkJCQkJCSAgICAgICBsYXN0VGltZSArCi0JCQkJCQkJICAgICAgIE1RX1JFUV9BR0VfT1VUKSkpCi0JCQl7Ci0JCQkJc3RydWN0IHJ0X21lYXN1cmVfcmVxX2VudHJ5ICpwUHJldkVudHJ5ID0gTlVMTDsKLQkJCQl1bnNpZ25lZCBsb25nIEhhc2hJZHggPQotCQkJCSAgICBNUV9ESUFMT0dUT0tFTl9IQVNIX0lOREVYKHBFbnRyeS0+Ci0JCQkJCQkJICAgICAgRGlhbG9nVG9rZW4pOwotCQkJCXN0cnVjdCBydF9tZWFzdXJlX3JlcV9lbnRyeSAqcFByb2JlRW50cnkgPQotCQkJCSAgICBwVGFiLT5IYXNoW0hhc2hJZHhdOwotCi0JCQkJLyogdXBkYXRlIEhhc2ggbGlzdCAqLwotCQkJCWRvIHsKLQkJCQkJaWYgKHBQcm9iZUVudHJ5ID09IHBFbnRyeSkgewotCQkJCQkJaWYgKHBQcmV2RW50cnkgPT0gTlVMTCkgewotCQkJCQkJCXBUYWItPkhhc2hbSGFzaElkeF0gPQotCQkJCQkJCSAgICBwRW50cnktPnBOZXh0OwotCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQlwUHJldkVudHJ5LT5wTmV4dCA9Ci0JCQkJCQkJICAgIHBFbnRyeS0+cE5leHQ7Ci0JCQkJCQl9Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCi0JCQkJCXBQcmV2RW50cnkgPSBwUHJvYmVFbnRyeTsKLQkJCQkJcFByb2JlRW50cnkgPSBwUHJvYmVFbnRyeS0+cE5leHQ7Ci0JCQkJfSB3aGlsZSAocFByb2JlRW50cnkpOwotCi0JCQkJTmRpc1plcm9NZW1vcnkocEVudHJ5LAotCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBydF9tZWFzdXJlX3JlcV9lbnRyeSkpOwotCQkJCXBUYWItPlNpemUtLTsKLQotCQkJCWJyZWFrOwotCQkJfQotCi0JCQlpZiAocEVudHJ5LT5WYWxpZCA9PSBGQUxTRSkKLQkJCQlicmVhazsKLQkJfQotCi0JCWlmIChpIDwgTUFYX01FQVNVUkVfUkVRX1RBQl9TSVpFKSB7Ci0JCQlOZGlzR2V0U3lzdGVtVXBUaW1lKCZOb3cpOwotCQkJcEVudHJ5LT5sYXN0VGltZSA9IE5vdzsKLQkJCXBFbnRyeS0+VmFsaWQgPSBUUlVFOwotCQkJcEVudHJ5LT5EaWFsb2dUb2tlbiA9IERpYWxvZ1Rva2VuOwotCQkJcFRhYi0+U2l6ZSsrOwotCQl9IGVsc2UgewotCQkJcEVudHJ5ID0gTlVMTDsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJCSAoIiVzOiBwTWVhc3VyZVJlcVRhYiB0YWIgZnVsbC5cbiIsIF9fZnVuY19fKSk7Ci0JCX0KLQotCQkvKiBhZGQgdGhpcyBOZWlnaGJvciBlbnRyeSBpbnRvIEhBU0ggdGFibGUgKi8KLQkJaWYgKHBFbnRyeSkgewotCQkJSGFzaElkeCA9IE1RX0RJQUxPR1RPS0VOX0hBU0hfSU5ERVgoRGlhbG9nVG9rZW4pOwotCQkJaWYgKHBUYWItPkhhc2hbSGFzaElkeF0gPT0gTlVMTCkgewotCQkJCXBUYWItPkhhc2hbSGFzaElkeF0gPSBwRW50cnk7Ci0JCQl9IGVsc2UgewotCQkJCXBDdXJyRW50cnkgPSBwVGFiLT5IYXNoW0hhc2hJZHhdOwotCQkJCXdoaWxlIChwQ3VyckVudHJ5LT5wTmV4dCAhPSBOVUxMKQotCQkJCQlwQ3VyckVudHJ5ID0gcEN1cnJFbnRyeS0+cE5leHQ7Ci0JCQkJcEN1cnJFbnRyeS0+cE5leHQgPSBwRW50cnk7Ci0JCQl9Ci0JCX0KLQotCQlSVE1QX1NFTV9VTkxPQ0soJnBBZC0+Q29tbW9uQ2ZnLk1lYXN1cmVSZXFUYWJMb2NrKTsKLQl9Ci0KLQlyZXR1cm4gcEVudHJ5OwotfQotCi12b2lkIE1lYXN1cmVSZXFEZWxldGUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1OCBEaWFsb2dUb2tlbikKLXsKLQlzdHJ1Y3QgcnRfbWVhc3VyZV9yZXFfdGFiICpwVGFiID0gcEFkLT5Db21tb25DZmcucE1lYXN1cmVSZXFUYWI7Ci0Jc3RydWN0IHJ0X21lYXN1cmVfcmVxX2VudHJ5ICpwRW50cnkgPSBOVUxMOwotCi0JaWYgKHBUYWIgPT0gTlVMTCkgewotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCSAoIiVzOiBwTWVhc3VyZVJlcVRhYiBkb2Vzbid0IGV4aXN0LlxuIiwgX19mdW5jX18pKTsKLQkJcmV0dXJuOwotCX0KLQkvKiBpZiBlbXB0eSwgcmV0dXJuICovCi0JaWYgKHBUYWItPlNpemUgPT0gMCkgewotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJwTWVhc3VyZVJlcVRhYiBlbXB0eS5cbiIpKTsKLQkJcmV0dXJuOwotCX0KLQotCXBFbnRyeSA9IE1lYXN1cmVSZXFMb29rVXAocEFkLCBEaWFsb2dUb2tlbik7Ci0JaWYgKHBFbnRyeSAhPSBOVUxMKSB7Ci0JCXN0cnVjdCBydF9tZWFzdXJlX3JlcV9lbnRyeSAqcFByZXZFbnRyeSA9IE5VTEw7Ci0JCXVuc2lnbmVkIGxvbmcgSGFzaElkeCA9IE1RX0RJQUxPR1RPS0VOX0hBU0hfSU5ERVgocEVudHJ5LT5EaWFsb2dUb2tlbik7Ci0JCXN0cnVjdCBydF9tZWFzdXJlX3JlcV9lbnRyeSAqcFByb2JlRW50cnkgPSBwVGFiLT5IYXNoW0hhc2hJZHhdOwotCi0JCVJUTVBfU0VNX0xPQ0soJnBBZC0+Q29tbW9uQ2ZnLk1lYXN1cmVSZXFUYWJMb2NrKTsKLQkJLyogdXBkYXRlIEhhc2ggbGlzdCAqLwotCQlkbyB7Ci0JCQlpZiAocFByb2JlRW50cnkgPT0gcEVudHJ5KSB7Ci0JCQkJaWYgKHBQcmV2RW50cnkgPT0gTlVMTCkgewotCQkJCQlwVGFiLT5IYXNoW0hhc2hJZHhdID0gcEVudHJ5LT5wTmV4dDsKLQkJCQl9IGVsc2UgewotCQkJCQlwUHJldkVudHJ5LT5wTmV4dCA9IHBFbnRyeS0+cE5leHQ7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJfQotCi0JCQlwUHJldkVudHJ5ID0gcFByb2JlRW50cnk7Ci0JCQlwUHJvYmVFbnRyeSA9IHBQcm9iZUVudHJ5LT5wTmV4dDsKLQkJfSB3aGlsZSAocFByb2JlRW50cnkpOwotCi0JCU5kaXNaZXJvTWVtb3J5KHBFbnRyeSwgc2l6ZW9mKHN0cnVjdCBydF9tZWFzdXJlX3JlcV9lbnRyeSkpOwotCQlwVGFiLT5TaXplLS07Ci0KLQkJUlRNUF9TRU1fVU5MT0NLKCZwQWQtPkNvbW1vbkNmZy5NZWFzdXJlUmVxVGFiTG9jayk7Ci0JfQotCi0JcmV0dXJuOwotfQotCi12b2lkIFRwY1JlcVRhYkluaXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPkNvbW1vbkNmZy5UcGNSZXFUYWJMb2NrKTsKLQotCXBBZC0+Q29tbW9uQ2ZnLnBUcGNSZXFUYWIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcnRfdHBjX3JlcV90YWIpLCBHRlBfQVRPTUlDKTsKLQlpZiAocEFkLT5Db21tb25DZmcucFRwY1JlcVRhYikKLQkJTmRpc1plcm9NZW1vcnkocEFkLT5Db21tb25DZmcucFRwY1JlcVRhYiwgc2l6ZW9mKHN0cnVjdCBydF90cGNfcmVxX3RhYikpOwotCWVsc2UKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkgKCIlcyBGYWlsIHRvIGFsbG9jIG1lbW9yeSBmb3IgcEFkLT5Db21tb25DZmcucFRwY1JlcVRhYi5cbiIsCi0JCQkgIF9fZnVuY19fKSk7Ci0KLQlyZXR1cm47Ci19Ci0KLXZvaWQgVHBjUmVxVGFiRXhpdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0JTmRpc0ZyZWVTcGluTG9jaygmcEFkLT5Db21tb25DZmcuVHBjUmVxVGFiTG9jayk7Ci0KLQlrZnJlZShwQWQtPkNvbW1vbkNmZy5wVHBjUmVxVGFiKTsKLQlwQWQtPkNvbW1vbkNmZy5wVHBjUmVxVGFiID0gTlVMTDsKLQotCXJldHVybjsKLX0KLQotc3RhdGljIHN0cnVjdCBydF90cGNfcmVxX2VudHJ5ICpUcGNSZXFMb29rVXAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1OCBEaWFsb2dUb2tlbikKLXsKLQl1MzIgSGFzaElkeDsKLQlzdHJ1Y3QgcnRfdHBjX3JlcV90YWIgKnBUYWIgPSBwQWQtPkNvbW1vbkNmZy5wVHBjUmVxVGFiOwotCXN0cnVjdCBydF90cGNfcmVxX2VudHJ5ICpwRW50cnkgPSBOVUxMOwotCXN0cnVjdCBydF90cGNfcmVxX2VudHJ5ICpwUHJldkVudHJ5ID0gTlVMTDsKLQotCWlmIChwVGFiID09IE5VTEwpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkgKCIlczogcFRwY1JlcVRhYiBkb2Vzbid0IGV4aXN0LlxuIiwgX19mdW5jX18pKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JUlRNUF9TRU1fTE9DSygmcEFkLT5Db21tb25DZmcuVHBjUmVxVGFiTG9jayk7Ci0KLQlIYXNoSWR4ID0gVFBDX0RJQUxPR1RPS0VOX0hBU0hfSU5ERVgoRGlhbG9nVG9rZW4pOwotCXBFbnRyeSA9IHBUYWItPkhhc2hbSGFzaElkeF07Ci0KLQl3aGlsZSAocEVudHJ5KSB7Ci0JCWlmIChwRW50cnktPkRpYWxvZ1Rva2VuID09IERpYWxvZ1Rva2VuKQotCQkJYnJlYWs7Ci0JCWVsc2UgewotCQkJcFByZXZFbnRyeSA9IHBFbnRyeTsKLQkJCXBFbnRyeSA9IHBFbnRyeS0+cE5leHQ7Ci0JCX0KLQl9Ci0KLQlSVE1QX1NFTV9VTkxPQ0soJnBBZC0+Q29tbW9uQ2ZnLlRwY1JlcVRhYkxvY2spOwotCi0JcmV0dXJuIHBFbnRyeTsKLX0KLQotc3RhdGljIHN0cnVjdCBydF90cGNfcmVxX2VudHJ5ICpUcGNSZXFJbnNlcnQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1OCBEaWFsb2dUb2tlbikKLXsKLQlpbnQgaTsKLQl1bnNpZ25lZCBsb25nIEhhc2hJZHg7Ci0Jc3RydWN0IHJ0X3RwY19yZXFfdGFiICpwVGFiID0gcEFkLT5Db21tb25DZmcucFRwY1JlcVRhYjsKLQlzdHJ1Y3QgcnRfdHBjX3JlcV9lbnRyeSAqcEVudHJ5ID0gTlVMTCwgKnBDdXJyRW50cnk7Ci0JdW5zaWduZWQgbG9uZyBOb3c7Ci0KLQlpZiAocFRhYiA9PSBOVUxMKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJICgiJXM6IHBUcGNSZXFUYWIgZG9lc24ndCBleGlzdC5cbiIsIF9fZnVuY19fKSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXBFbnRyeSA9IFRwY1JlcUxvb2tVcChwQWQsIERpYWxvZ1Rva2VuKTsKLQlpZiAocEVudHJ5ID09IE5VTEwpIHsKLQkJUlRNUF9TRU1fTE9DSygmcEFkLT5Db21tb25DZmcuVHBjUmVxVGFiTG9jayk7Ci0JCWZvciAoaSA9IDA7IGkgPCBNQVhfVFBDX1JFUV9UQUJfU0laRTsgaSsrKSB7Ci0JCQlOZGlzR2V0U3lzdGVtVXBUaW1lKCZOb3cpOwotCQkJcEVudHJ5ID0gJnBUYWItPkNvbnRlbnRbaV07Ci0KLQkJCWlmICgocEVudHJ5LT5WYWxpZCA9PSBUUlVFKQotCQkJICAgICYmIFJUTVBfVElNRV9BRlRFUigodW5zaWduZWQgbG9uZylOb3csCi0JCQkJCSAgICAgICAodW5zaWduZWQgbG9uZykocEVudHJ5LT4KLQkJCQkJCQkgICAgICAgbGFzdFRpbWUgKwotCQkJCQkJCSAgICAgICBUUENfUkVRX0FHRV9PVVQpKSkKLQkJCXsKLQkJCQlzdHJ1Y3QgcnRfdHBjX3JlcV9lbnRyeSAqcFByZXZFbnRyeSA9IE5VTEw7Ci0JCQkJdW5zaWduZWQgbG9uZyBIYXNoSWR4ID0KLQkJCQkgICAgVFBDX0RJQUxPR1RPS0VOX0hBU0hfSU5ERVgocEVudHJ5LT4KLQkJCQkJCQkgICAgICAgRGlhbG9nVG9rZW4pOwotCQkJCXN0cnVjdCBydF90cGNfcmVxX2VudHJ5ICpwUHJvYmVFbnRyeSA9Ci0JCQkJICAgIHBUYWItPkhhc2hbSGFzaElkeF07Ci0KLQkJCQkvKiB1cGRhdGUgSGFzaCBsaXN0ICovCi0JCQkJZG8gewotCQkJCQlpZiAocFByb2JlRW50cnkgPT0gcEVudHJ5KSB7Ci0JCQkJCQlpZiAocFByZXZFbnRyeSA9PSBOVUxMKSB7Ci0JCQkJCQkJcFRhYi0+SGFzaFtIYXNoSWR4XSA9Ci0JCQkJCQkJICAgIHBFbnRyeS0+cE5leHQ7Ci0JCQkJCQl9IGVsc2UgewotCQkJCQkJCXBQcmV2RW50cnktPnBOZXh0ID0KLQkJCQkJCQkgICAgcEVudHJ5LT5wTmV4dDsKLQkJCQkJCX0KLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0KLQkJCQkJcFByZXZFbnRyeSA9IHBQcm9iZUVudHJ5OwotCQkJCQlwUHJvYmVFbnRyeSA9IHBQcm9iZUVudHJ5LT5wTmV4dDsKLQkJCQl9IHdoaWxlIChwUHJvYmVFbnRyeSk7Ci0KLQkJCQlOZGlzWmVyb01lbW9yeShwRW50cnksIHNpemVvZihzdHJ1Y3QgcnRfdHBjX3JlcV9lbnRyeSkpOwotCQkJCXBUYWItPlNpemUtLTsKLQotCQkJCWJyZWFrOwotCQkJfQotCi0JCQlpZiAocEVudHJ5LT5WYWxpZCA9PSBGQUxTRSkKLQkJCQlicmVhazsKLQkJfQotCi0JCWlmIChpIDwgTUFYX1RQQ19SRVFfVEFCX1NJWkUpIHsKLQkJCU5kaXNHZXRTeXN0ZW1VcFRpbWUoJk5vdyk7Ci0JCQlwRW50cnktPmxhc3RUaW1lID0gTm93OwotCQkJcEVudHJ5LT5WYWxpZCA9IFRSVUU7Ci0JCQlwRW50cnktPkRpYWxvZ1Rva2VuID0gRGlhbG9nVG9rZW47Ci0JCQlwVGFiLT5TaXplKys7Ci0JCX0gZWxzZSB7Ci0JCQlwRW50cnkgPSBOVUxMOwotCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkJICgiJXM6IHBUcGNSZXFUYWIgdGFiIGZ1bGwuXG4iLCBfX2Z1bmNfXykpOwotCQl9Ci0KLQkJLyogYWRkIHRoaXMgTmVpZ2hib3IgZW50cnkgaW50byBIQVNIIHRhYmxlICovCi0JCWlmIChwRW50cnkpIHsKLQkJCUhhc2hJZHggPSBUUENfRElBTE9HVE9LRU5fSEFTSF9JTkRFWChEaWFsb2dUb2tlbik7Ci0JCQlpZiAocFRhYi0+SGFzaFtIYXNoSWR4XSA9PSBOVUxMKSB7Ci0JCQkJcFRhYi0+SGFzaFtIYXNoSWR4XSA9IHBFbnRyeTsKLQkJCX0gZWxzZSB7Ci0JCQkJcEN1cnJFbnRyeSA9IHBUYWItPkhhc2hbSGFzaElkeF07Ci0JCQkJd2hpbGUgKHBDdXJyRW50cnktPnBOZXh0ICE9IE5VTEwpCi0JCQkJCXBDdXJyRW50cnkgPSBwQ3VyckVudHJ5LT5wTmV4dDsKLQkJCQlwQ3VyckVudHJ5LT5wTmV4dCA9IHBFbnRyeTsKLQkJCX0KLQkJfQotCi0JCVJUTVBfU0VNX1VOTE9DSygmcEFkLT5Db21tb25DZmcuVHBjUmVxVGFiTG9jayk7Ci0JfQotCi0JcmV0dXJuIHBFbnRyeTsKLX0KLQotc3RhdGljIHZvaWQgVHBjUmVxRGVsZXRlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggRGlhbG9nVG9rZW4pCi17Ci0Jc3RydWN0IHJ0X3RwY19yZXFfdGFiICpwVGFiID0gcEFkLT5Db21tb25DZmcucFRwY1JlcVRhYjsKLQlzdHJ1Y3QgcnRfdHBjX3JlcV9lbnRyeSAqcEVudHJ5ID0gTlVMTDsKLQotCWlmIChwVGFiID09IE5VTEwpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkgKCIlczogcFRwY1JlcVRhYiBkb2Vzbid0IGV4aXN0LlxuIiwgX19mdW5jX18pKTsKLQkJcmV0dXJuOwotCX0KLQkvKiBpZiBlbXB0eSwgcmV0dXJuICovCi0JaWYgKHBUYWItPlNpemUgPT0gMCkgewotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJwVHBjUmVxVGFiIGVtcHR5LlxuIikpOwotCQlyZXR1cm47Ci0JfQotCi0JcEVudHJ5ID0gVHBjUmVxTG9va1VwKHBBZCwgRGlhbG9nVG9rZW4pOwotCWlmIChwRW50cnkgIT0gTlVMTCkgewotCQlzdHJ1Y3QgcnRfdHBjX3JlcV9lbnRyeSAqcFByZXZFbnRyeSA9IE5VTEw7Ci0JCXVuc2lnbmVkIGxvbmcgSGFzaElkeCA9IFRQQ19ESUFMT0dUT0tFTl9IQVNIX0lOREVYKHBFbnRyeS0+RGlhbG9nVG9rZW4pOwotCQlzdHJ1Y3QgcnRfdHBjX3JlcV9lbnRyeSAqcFByb2JlRW50cnkgPSBwVGFiLT5IYXNoW0hhc2hJZHhdOwotCi0JCVJUTVBfU0VNX0xPQ0soJnBBZC0+Q29tbW9uQ2ZnLlRwY1JlcVRhYkxvY2spOwotCQkvKiB1cGRhdGUgSGFzaCBsaXN0ICovCi0JCWRvIHsKLQkJCWlmIChwUHJvYmVFbnRyeSA9PSBwRW50cnkpIHsKLQkJCQlpZiAocFByZXZFbnRyeSA9PSBOVUxMKSB7Ci0JCQkJCXBUYWItPkhhc2hbSGFzaElkeF0gPSBwRW50cnktPnBOZXh0OwotCQkJCX0gZWxzZSB7Ci0JCQkJCXBQcmV2RW50cnktPnBOZXh0ID0gcEVudHJ5LT5wTmV4dDsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCXBQcmV2RW50cnkgPSBwUHJvYmVFbnRyeTsKLQkJCXBQcm9iZUVudHJ5ID0gcFByb2JlRW50cnktPnBOZXh0OwotCQl9IHdoaWxlIChwUHJvYmVFbnRyeSk7Ci0KLQkJTmRpc1plcm9NZW1vcnkocEVudHJ5LCBzaXplb2Yoc3RydWN0IHJ0X3RwY19yZXFfZW50cnkpKTsKLQkJcFRhYi0+U2l6ZS0tOwotCi0JCVJUTVBfU0VNX1VOTE9DSygmcEFkLT5Db21tb25DZmcuVHBjUmVxVGFiTG9jayk7Ci0JfQotCi0JcmV0dXJuOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JCUdldCBDdXJyZW50IFRpbWVTIHRhbXAuCi0KLQlQYXJhbWV0cnM6Ci0KLQlSZXR1cm4JOiBDdXJyZW50IFRpbWUgU3RhbXAuCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotc3RhdGljIHU2NCBHZXRDdXJyZW50VGltZVN0YW1wKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQkvKiBnZXQgY3VycmVudCB0aW1lIHN0YW1wLiAqLwotCXJldHVybiAwOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JCUdldCBDdXJyZW50IFRyYW5zbWl0IFBvd2VyLgotCi0JUGFyYW1ldHJzOgotCi0JUmV0dXJuCTogQ3VycmVudCBUaW1lIFN0YW1wLgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXN0YXRpYyB1OCBHZXRDdXJUeFB3cihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHU4IFdjaWQpCi17Ci0JcmV0dXJuIDE2OwkJLyogMTYgZEJtICovCi19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJR2V0IEN1cnJlbnQgVHJhbnNtaXQgUG93ZXIuCi0KLQlQYXJhbWV0cnM6Ci0KLQlSZXR1cm4JOiBDdXJyZW50IFRpbWUgU3RhbXAuCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotdm9pZCBJbnNlcnRDaGFubmVsUmVwSUUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJdTggKnBGcmFtZUJ1ZiwKLQkJCXVuc2lnbmVkIGxvbmcgKnBGcmFtZUxlbiwKLQkJCWNoYXIgKnBDb3VudHJ5LCB1OCBSZWd1bGF0b3J5Q2xhc3MpCi17Ci0JdW5zaWduZWQgbG9uZyBUZW1wTGVuOwotCXU4IExlbjsKLQl1OCBJRUlkID0gSUVfQVBfQ0hBTk5FTF9SRVBPUlQ7Ci0JdTggKnBDaExpc3RQdHIgPSBOVUxMOwotCi0JTGVuID0gMTsKLQlpZiAoc3RybmNtcChwQ291bnRyeSwgIlVTIiwgMikgPT0gMCkgewotCQlpZiAoUmVndWxhdG9yeUNsYXNzID49IFVTQV9SRUdVTEFUT1JZX0lORk9fU0laRSkgewotCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkJICgiJXM6IFVTQSBVbmtub3cgUmVxdWxhdG9yeSBjbGFzcyAoJWQpXG4iLAotCQkJCSAgX19mdW5jX18sIFJlZ3VsYXRvcnlDbGFzcykpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJTGVuICs9Ci0JCSAgICBVU0FSZWd1bGF0b3J5SW5mb1tSZWd1bGF0b3J5Q2xhc3NdLkNoYW5uZWxTZXQuCi0JCSAgICBOdW1iZXJPZkNoYW5uZWxzOwotCQlwQ2hMaXN0UHRyID0KLQkJICAgIFVTQVJlZ3VsYXRvcnlJbmZvW1JlZ3VsYXRvcnlDbGFzc10uQ2hhbm5lbFNldC5DaGFubmVsTGlzdDsKLQl9IGVsc2UgaWYgKHN0cm5jbXAocENvdW50cnksICJKUCIsIDIpID09IDApIHsKLQkJaWYgKFJlZ3VsYXRvcnlDbGFzcyA+PSBKUF9SRUdVTEFUT1JZX0lORk9fU0laRSkgewotCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkJICgiJXM6IEpQIFVua25vdyBSZXF1bGF0b3J5IGNsYXNzICglZClcbiIsCi0JCQkJICBfX2Z1bmNfXywgUmVndWxhdG9yeUNsYXNzKSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlMZW4gKz0KLQkJICAgIEphcGFuUmVndWxhdG9yeUluZm9bUmVndWxhdG9yeUNsYXNzXS5DaGFubmVsU2V0LgotCQkgICAgTnVtYmVyT2ZDaGFubmVsczsKLQkJcENoTGlzdFB0ciA9Ci0JCSAgICBKYXBhblJlZ3VsYXRvcnlJbmZvW1JlZ3VsYXRvcnlDbGFzc10uQ2hhbm5lbFNldC5DaGFubmVsTGlzdDsKLQl9IGVsc2UgewotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIlczogVW5rbm93IENvdW50cnkgKCVzKVxuIiwKLQkJCQkJICBfX2Z1bmNfXywgcENvdW50cnkpKTsKLQkJcmV0dXJuOwotCX0KLQotCU1ha2VPdXRnb2luZ0ZyYW1lKHBGcmFtZUJ1ZiwgJlRlbXBMZW4sCi0JCQkgIDEsICZJRUlkLAotCQkJICAxLCAmTGVuLAotCQkJICAxLCAmUmVndWxhdG9yeUNsYXNzLAotCQkJICBMZW4gLSAxLCBwQ2hMaXN0UHRyLCBFTkRfT0ZfQVJHUyk7Ci0KLQkqcEZyYW1lTGVuID0gKnBGcmFtZUxlbiArIFRlbXBMZW47Ci0KLQlyZXR1cm47Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJSW5zZXJ0IERpYWxvZyBUb2tlbiBpbnRvIGZyYW1lLgotCi0JUGFyYW1ldHJzOgotCQkxLiBmcmFtZSBidWZmZXIgcG9pbnRlci4KLQkJMi4gZnJhbWUgbGVuZ3RoLgotCQkzLiBEaWFsb2cgdG9rZW4uCi0KLQlSZXR1cm4JOiBOb25lLgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgSW5zZXJ0RGlhbG9nVG9rZW4oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICAgICAgdTggKnBGcmFtZUJ1ZiwKLQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKnBGcmFtZUxlbiwgdTggRGlhbG9nVG9rZW4pCi17Ci0JdW5zaWduZWQgbG9uZyBUZW1wTGVuOwotCU1ha2VPdXRnb2luZ0ZyYW1lKHBGcmFtZUJ1ZiwgJlRlbXBMZW4sIDEsICZEaWFsb2dUb2tlbiwgRU5EX09GX0FSR1MpOwotCi0JKnBGcmFtZUxlbiA9ICpwRnJhbWVMZW4gKyBUZW1wTGVuOwotCi0JcmV0dXJuOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JCUluc2VydCBUUEMgUmVxdWVzdCBJRSBpbnRvIGZyYW1lLgotCi0JUGFyYW1ldHJzOgotCQkxLiBmcmFtZSBidWZmZXIgcG9pbnRlci4KLQkJMi4gZnJhbWUgbGVuZ3RoLgotCi0JUmV0dXJuCTogTm9uZS4KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi1zdGF0aWMgdm9pZCBJbnNlcnRUcGNSZXFJRShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICB1OCAqcEZyYW1lQnVmLCB1bnNpZ25lZCBsb25nICpwRnJhbWVMZW4pCi17Ci0JdW5zaWduZWQgbG9uZyBUZW1wTGVuOwotCXVuc2lnbmVkIGxvbmcgTGVuID0gMDsKLQl1OCBFbGVtZW50SUQgPSBJRV9UUENfUkVRVUVTVDsKLQotCU1ha2VPdXRnb2luZ0ZyYW1lKHBGcmFtZUJ1ZiwgJlRlbXBMZW4sCi0JCQkgIDEsICZFbGVtZW50SUQsIDEsICZMZW4sIEVORF9PRl9BUkdTKTsKLQotCSpwRnJhbWVMZW4gPSAqcEZyYW1lTGVuICsgVGVtcExlbjsKLQotCXJldHVybjsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlJbnNlcnQgVFBDIFJlcG9ydCBJRSBpbnRvIGZyYW1lLgotCi0JUGFyYW1ldHJzOgotCQkxLiBmcmFtZSBidWZmZXIgcG9pbnRlci4KLQkJMi4gZnJhbWUgbGVuZ3RoLgotCQkzLiBUcmFuc21pdCBQb3dlci4KLQkJNC4gTGluayBNYXJnaW4uCi0KLQlSZXR1cm4JOiBOb25lLgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgSW5zZXJ0VHBjUmVwb3J0SUUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICAgICAgdTggKnBGcmFtZUJ1ZiwKLQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKnBGcmFtZUxlbiwKLQkJICAgICAgIHU4IFR4UHdyLCB1OCBMaW5rTWFyZ2luKQotewotCXVuc2lnbmVkIGxvbmcgVGVtcExlbjsKLQl1bnNpZ25lZCBsb25nIExlbiA9IHNpemVvZihzdHJ1Y3QgcnRfdHBjX3JlcG9ydF9pbmZvKTsKLQl1OCBFbGVtZW50SUQgPSBJRV9UUENfUkVQT1JUOwotCXN0cnVjdCBydF90cGNfcmVwb3J0X2luZm8gVHBjUmVwb3J0SUU7Ci0KLQlUcGNSZXBvcnRJRS5UeFB3ciA9IFR4UHdyOwotCVRwY1JlcG9ydElFLkxpbmtNYXJnaW4gPSBMaW5rTWFyZ2luOwotCi0JTWFrZU91dGdvaW5nRnJhbWUocEZyYW1lQnVmLCAmVGVtcExlbiwKLQkJCSAgMSwgJkVsZW1lbnRJRCwKLQkJCSAgMSwgJkxlbiwgTGVuLCAmVHBjUmVwb3J0SUUsIEVORF9PRl9BUkdTKTsKLQotCSpwRnJhbWVMZW4gPSAqcEZyYW1lTGVuICsgVGVtcExlbjsKLQotCXJldHVybjsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlJbnNlcnQgQ2hhbm5lbCBTd2l0Y2ggQW5ub3VuY2VtZW50IElFIGludG8gZnJhbWUuCi0KLQlQYXJhbWV0cnM6Ci0JCTEuIGZyYW1lIGJ1ZmZlciBwb2ludGVyLgotCQkyLiBmcmFtZSBsZW5ndGguCi0JCTMuIGNoYW5uZWwgc3dpdGNoIGFubm91bmNlbWVudCBtb2RlLgotCQk0LiBuZXcgc2VsZWN0ZWQgY2hhbm5lbC4KLQkJNS4gY2hhbm5lbCBzd2l0Y2ggYW5ub3VuY2VtZW50IGNvdW50LgotCi0JUmV0dXJuCTogTm9uZS4KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi1zdGF0aWMgdm9pZCBJbnNlcnRDaFN3QW5uSUUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgIHU4ICpwRnJhbWVCdWYsCi0JCQkgICAgdW5zaWduZWQgbG9uZyAqcEZyYW1lTGVuLAotCQkJICAgIHU4IENoU3dNb2RlLAotCQkJICAgIHU4IE5ld0NoYW5uZWwsIHU4IENoU3dDbnQpCi17Ci0JdW5zaWduZWQgbG9uZyBUZW1wTGVuOwotCXVuc2lnbmVkIGxvbmcgTGVuID0gc2l6ZW9mKHN0cnVjdCBydF9jaF9zd19hbm5faW5mbyk7Ci0JdTggRWxlbWVudElEID0gSUVfQ0hBTk5FTF9TV0lUQ0hfQU5OT1VOQ0VNRU5UOwotCXN0cnVjdCBydF9jaF9zd19hbm5faW5mbyBDaFN3QW5uSUU7Ci0KLQlDaFN3QW5uSUUuQ2hTd01vZGUgPSBDaFN3TW9kZTsKLQlDaFN3QW5uSUUuQ2hhbm5lbCA9IE5ld0NoYW5uZWw7Ci0JQ2hTd0FubklFLkNoU3dDbnQgPSBDaFN3Q250OwotCi0JTWFrZU91dGdvaW5nRnJhbWUocEZyYW1lQnVmLCAmVGVtcExlbiwKLQkJCSAgMSwgJkVsZW1lbnRJRCwgMSwgJkxlbiwgTGVuLCAmQ2hTd0FubklFLCBFTkRfT0ZfQVJHUyk7Ci0KLQkqcEZyYW1lTGVuID0gKnBGcmFtZUxlbiArIFRlbXBMZW47Ci0KLQlyZXR1cm47Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJSW5zZXJ0IE1lYXN1cmUgUmVxdWVzdCBJRSBpbnRvIGZyYW1lLgotCi0JUGFyYW1ldHJzOgotCQkxLiBmcmFtZSBidWZmZXIgcG9pbnRlci4KLQkJMi4gZnJhbWUgbGVuZ3RoLgotCQkzLiBNZWFzdXJlIFRva2VuLgotCQk0LiBNZWFzdXJlIFJlcXVlc3QgTW9kZS4KLQkJNS4gTWVhc3VyZSBSZXF1ZXN0IFR5cGUuCi0JCTYuIE1lYXN1cmUgQ2hhbm5lbC4KLQkJNy4gTWVhc3VyZSBTdGFydCB0aW1lLgotCQk4LiBNZWFzdXJlIER1cmF0aW9uLgotCi0JUmV0dXJuCTogTm9uZS4KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi1zdGF0aWMgdm9pZCBJbnNlcnRNZWFzdXJlUmVxSUUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgICAgIHU4ICpwRnJhbWVCdWYsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyAqcEZyYW1lTGVuLAotCQkJICAgICAgIHU4IExlbiwgc3RydWN0IHJ0X21lYXN1cmVfcmVxX2luZm8gKiBwTWVhc3VyZVJlcUlFKQotewotCXVuc2lnbmVkIGxvbmcgVGVtcExlbjsKLQl1OCBFbGVtZW50SUQgPSBJRV9NRUFTVVJFTUVOVF9SRVFVRVNUOwotCi0JTWFrZU91dGdvaW5nRnJhbWUocEZyYW1lQnVmLCAmVGVtcExlbiwKLQkJCSAgMSwgJkVsZW1lbnRJRCwKLQkJCSAgMSwgJkxlbiwKLQkJCSAgc2l6ZW9mKHN0cnVjdCBydF9tZWFzdXJlX3JlcV9pbmZvKSwgcE1lYXN1cmVSZXFJRSwgRU5EX09GX0FSR1MpOwotCi0JKnBGcmFtZUxlbiA9ICpwRnJhbWVMZW4gKyBUZW1wTGVuOwotCi0JcmV0dXJuOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JCUluc2VydCBNZWFzdXJlIFJlcG9ydCBJRSBpbnRvIGZyYW1lLgotCi0JUGFyYW1ldHJzOgotCQkxLiBmcmFtZSBidWZmZXIgcG9pbnRlci4KLQkJMi4gZnJhbWUgbGVuZ3RoLgotCQkzLiBNZWFzdXJlIFRva2VuLgotCQk0LiBNZWFzdXJlIFJlcXVlc3QgTW9kZS4KLQkJNS4gTWVhc3VyZSBSZXF1ZXN0IFR5cGUuCi0JCTYuIExlbmd0aCBvZiBSZXBvcnQgSW5mb3JtYXRpb24KLQkJNy4gUG9pbnRlciBvZiBSZXBvcnQgSW5mb3JtYXRpb24gQnVmZmVyLgotCi0JUmV0dXJuCTogTm9uZS4KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi1zdGF0aWMgdm9pZCBJbnNlcnRNZWFzdXJlUmVwb3J0SUUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCSAgdTggKnBGcmFtZUJ1ZiwKLQkJCQkgIHVuc2lnbmVkIGxvbmcgKnBGcmFtZUxlbiwKLQkJCQkgIHN0cnVjdCBydF9tZWFzdXJlX3JlcG9ydF9pbmZvICogcE1lYXN1cmVSZXBvcnRJRSwKLQkJCQkgIHU4IFJlcG9ydExuZm9MZW4sIHU4ICpwUmVwb3J0SW5mbykKLXsKLQl1bnNpZ25lZCBsb25nIFRlbXBMZW47Ci0JdW5zaWduZWQgbG9uZyBMZW47Ci0JdTggRWxlbWVudElEID0gSUVfTUVBU1VSRU1FTlRfUkVQT1JUOwotCi0JTGVuID0gc2l6ZW9mKHN0cnVjdCBydF9tZWFzdXJlX3JlcG9ydF9pbmZvKSArIFJlcG9ydExuZm9MZW47Ci0KLQlNYWtlT3V0Z29pbmdGcmFtZShwRnJhbWVCdWYsICZUZW1wTGVuLAotCQkJICAxLCAmRWxlbWVudElELAotCQkJICAxLCAmTGVuLCBMZW4sIHBNZWFzdXJlUmVwb3J0SUUsIEVORF9PRl9BUkdTKTsKLQotCSpwRnJhbWVMZW4gPSAqcEZyYW1lTGVuICsgVGVtcExlbjsKLQotCWlmICgoUmVwb3J0TG5mb0xlbiA+IDApICYmIChwUmVwb3J0SW5mbyAhPSBOVUxMKSkgewotCQlNYWtlT3V0Z29pbmdGcmFtZShwRnJhbWVCdWYgKyAqcEZyYW1lTGVuLCAmVGVtcExlbiwKLQkJCQkgIFJlcG9ydExuZm9MZW4sIHBSZXBvcnRJbmZvLCBFTkRfT0ZfQVJHUyk7Ci0KLQkJKnBGcmFtZUxlbiA9ICpwRnJhbWVMZW4gKyBUZW1wTGVuOwotCX0KLQlyZXR1cm47Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJUHJlcGFyZSBNZWFzdXJlbWVudCByZXF1ZXN0IGFjdGlvbiBmcmFtZSBhbmQgZW5xdWV1ZSBpdCBpbnRvCi0JCW1hbmFnZW1lbnQgcXVldWUgd2FpdGluZyBmb3IgdHJhbnNtaXRpb24uCi0KLQlQYXJhbWV0cnM6Ci0JCTEuIHRoZSBkZXN0aW5hdGlvbiBtYWMgYWRkcmVzcyBvZiB0aGUgZnJhbWUuCi0KLQlSZXR1cm4JOiBOb25lLgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgTWFrZU1lYXN1cmVtZW50UmVxRnJhbWUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgICB1OCAqcE91dEJ1ZmZlciwKLQkJCSAgICAgdW5zaWduZWQgbG9uZyAqcEZyYW1lTGVuLAotCQkJICAgICB1OCBUb3RhbExlbiwKLQkJCSAgICAgdTggQ2F0ZWdvcnksCi0JCQkgICAgIHU4IEFjdGlvbiwKLQkJCSAgICAgdTggTWVhc3VyZVRva2VuLAotCQkJICAgICB1OCBNZWFzdXJlUmVxTW9kZSwKLQkJCSAgICAgdTggTWVhc3VyZVJlcVR5cGUsIHU4IE51bU9mUmVwZXRpdGlvbnMpCi17Ci0JdW5zaWduZWQgbG9uZyBUZW1wTGVuOwotCXN0cnVjdCBydF9tZWFzdXJlX3JlcV9pbmZvIE1lYXN1cmVSZXFJRTsKLQotCUluc2VydEFjdEZpZWxkKHBBZCwgKHBPdXRCdWZmZXIgKyAqcEZyYW1lTGVuKSwgcEZyYW1lTGVuLCBDYXRlZ29yeSwKLQkJICAgICAgIEFjdGlvbik7Ci0KLQkvKiBmaWxsIERpYWxvZyBUb2tlbiAqLwotCUluc2VydERpYWxvZ1Rva2VuKHBBZCwgKHBPdXRCdWZmZXIgKyAqcEZyYW1lTGVuKSwgcEZyYW1lTGVuLAotCQkJICBNZWFzdXJlVG9rZW4pOwotCi0JLyogZmlsbCBOdW1iZXIgb2YgcmVwZXRpdGlvbnMuICovCi0JaWYgKENhdGVnb3J5ID09IENBVEVHT1JZX1JNKSB7Ci0JCU1ha2VPdXRnb2luZ0ZyYW1lKChwT3V0QnVmZmVyICsgKnBGcmFtZUxlbiksICZUZW1wTGVuLAotCQkJCSAgMiwgJk51bU9mUmVwZXRpdGlvbnMsIEVORF9PRl9BUkdTKTsKLQotCQkqcEZyYW1lTGVuICs9IFRlbXBMZW47Ci0JfQotCS8qIHByZXBhcmUgTWVhc3VyZW1lbnQgSUUuICovCi0JTmRpc1plcm9NZW1vcnkoJk1lYXN1cmVSZXFJRSwgc2l6ZW9mKHN0cnVjdCBydF9tZWFzdXJlX3JlcV9pbmZvKSk7Ci0JTWVhc3VyZVJlcUlFLlRva2VuID0gTWVhc3VyZVRva2VuOwotCU1lYXN1cmVSZXFJRS5SZXFNb2RlLndvcmQgPSBNZWFzdXJlUmVxTW9kZTsKLQlNZWFzdXJlUmVxSUUuUmVxVHlwZSA9IE1lYXN1cmVSZXFUeXBlOwotCUluc2VydE1lYXN1cmVSZXFJRShwQWQsIChwT3V0QnVmZmVyICsgKnBGcmFtZUxlbiksIHBGcmFtZUxlbiwKLQkJCSAgIFRvdGFsTGVuLCAmTWVhc3VyZVJlcUlFKTsKLQotCXJldHVybjsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlQcmVwYXJlIE1lYXN1cmVtZW50IHJlcG9ydCBhY3Rpb24gZnJhbWUgYW5kIGVucXVldWUgaXQgaW50bwotCQltYW5hZ2VtZW50IHF1ZXVlIHdhaXRpbmcgZm9yIHRyYW5zbWl0aW9uLgotCi0JUGFyYW1ldHJzOgotCQkxLiB0aGUgZGVzdGluYXRpb24gbWFjIGFkZHJlc3Mgb2YgdGhlIGZyYW1lLgotCi0JUmV0dXJuCTogTm9uZS4KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi12b2lkIEVucXVldWVNZWFzdXJlbWVudFJlcChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICB1OCAqcERBLAotCQkJICAgdTggRGlhbG9nVG9rZW4sCi0JCQkgICB1OCBNZWFzdXJlVG9rZW4sCi0JCQkgICB1OCBNZWFzdXJlUmVxTW9kZSwKLQkJCSAgIHU4IE1lYXN1cmVSZXFUeXBlLAotCQkJICAgdTggUmVwb3J0SW5mb0xlbiwgdTggKnBSZXBvcnRJbmZvKQotewotCXU4ICpwT3V0QnVmZmVyID0gTlVMTDsKLQlpbnQgTlN0YXR1czsKLQl1bnNpZ25lZCBsb25nIEZyYW1lTGVuOwotCXN0cnVjdCBydF9oZWFkZXJfODAyXzExIEFjdEhkcjsKLQlzdHJ1Y3QgcnRfbWVhc3VyZV9yZXBvcnRfaW5mbyBNZWFzdXJlUmVwSUU7Ci0KLQkvKiBidWlsZCBhY3Rpb24gZnJhbWUgaGVhZGVyLiAqLwotCU1ndE1hY0hlYWRlckluaXQocEFkLCAmQWN0SGRyLCBTVUJUWVBFX0FDVElPTiwgMCwgcERBLAotCQkJIHBBZC0+Q3VycmVudEFkZHJlc3MpOwotCi0JTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICh2b2lkICopJiBwT3V0QnVmZmVyKTsJLypHZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeSAqLwotCWlmIChOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCIlcygpIGFsbG9jYXRlIG1lbW9yeSBmYWlsZWQgXG4iLCBfX2Z1bmNfXykpOwotCQlyZXR1cm47Ci0JfQotCU5kaXNNb3ZlTWVtb3J5KHBPdXRCdWZmZXIsIChjaGFyICopJiBBY3RIZHIsIHNpemVvZihzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSkpOwotCUZyYW1lTGVuID0gc2l6ZW9mKHN0cnVjdCBydF9oZWFkZXJfODAyXzExKTsKLQotCUluc2VydEFjdEZpZWxkKHBBZCwgKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiksICZGcmFtZUxlbiwKLQkJICAgICAgIENBVEVHT1JZX1NQRUNUUlVNLCBTUEVDX01SUCk7Ci0KLQkvKiBmaWxsIERpYWxvZyBUb2tlbiAqLwotCUluc2VydERpYWxvZ1Rva2VuKHBBZCwgKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiksICZGcmFtZUxlbiwgRGlhbG9nVG9rZW4pOwotCi0JLyogcHJlcGFyZSBNZWFzdXJlbWVudCBJRS4gKi8KLQlOZGlzWmVyb01lbW9yeSgmTWVhc3VyZVJlcElFLCBzaXplb2Yoc3RydWN0IHJ0X21lYXN1cmVfcmVwb3J0X2luZm8pKTsKLQlNZWFzdXJlUmVwSUUuVG9rZW4gPSBNZWFzdXJlVG9rZW47Ci0JTWVhc3VyZVJlcElFLlJlcG9ydE1vZGUgPSBNZWFzdXJlUmVxTW9kZTsKLQlNZWFzdXJlUmVwSUUuUmVwb3J0VHlwZSA9IE1lYXN1cmVSZXFUeXBlOwotCUluc2VydE1lYXN1cmVSZXBvcnRJRShwQWQsIChwT3V0QnVmZmVyICsgRnJhbWVMZW4pLCAmRnJhbWVMZW4sCi0JCQkgICAgICAmTWVhc3VyZVJlcElFLCBSZXBvcnRJbmZvTGVuLCBwUmVwb3J0SW5mbyk7Ci0KLQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIFFJRF9BQ19CRSwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOwotCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7Ci0KLQlyZXR1cm47Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJUHJlcGFyZSBUUEMgUmVxdWVzdCBhY3Rpb24gZnJhbWUgYW5kIGVucXVldWUgaXQgaW50bwotCQltYW5hZ2VtZW50IHF1ZXVlIHdhaXRpbmcgZm9yIHRyYW5zbWl0aW9uLgotCi0JUGFyYW1ldHJzOgotCQkxLiB0aGUgZGVzdGluYXRpb24gbWFjIGFkZHJlc3Mgb2YgdGhlIGZyYW1lLgotCi0JUmV0dXJuCTogTm9uZS4KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi12b2lkIEVucXVldWVUUENSZXEoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1OCAqcERBLCB1OCBEaWFsb2dUb2tlbikKLXsKLQl1OCAqcE91dEJ1ZmZlciA9IE5VTEw7Ci0JaW50IE5TdGF0dXM7Ci0JdW5zaWduZWQgbG9uZyBGcmFtZUxlbjsKLQotCXN0cnVjdCBydF9oZWFkZXJfODAyXzExIEFjdEhkcjsKLQotCS8qIGJ1aWxkIGFjdGlvbiBmcmFtZSBoZWFkZXIuICovCi0JTWd0TWFjSGVhZGVySW5pdChwQWQsICZBY3RIZHIsIFNVQlRZUEVfQUNUSU9OLCAwLCBwREEsCi0JCQkgcEFkLT5DdXJyZW50QWRkcmVzcyk7Ci0KLQlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgKHZvaWQgKikmIHBPdXRCdWZmZXIpOwkvKkdldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5ICovCi0JaWYgKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIiVzKCkgYWxsb2NhdGUgbWVtb3J5IGZhaWxlZCBcbiIsIF9fZnVuY19fKSk7Ci0JCXJldHVybjsKLQl9Ci0JTmRpc01vdmVNZW1vcnkocE91dEJ1ZmZlciwgKGNoYXIgKikmIEFjdEhkciwgc2l6ZW9mKHN0cnVjdCBydF9oZWFkZXJfODAyXzExKSk7Ci0JRnJhbWVMZW4gPSBzaXplb2Yoc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEpOwotCi0JSW5zZXJ0QWN0RmllbGQocEFkLCAocE91dEJ1ZmZlciArIEZyYW1lTGVuKSwgJkZyYW1lTGVuLAotCQkgICAgICAgQ0FURUdPUllfU1BFQ1RSVU0sIFNQRUNfVFBDUlEpOwotCi0JLyogZmlsbCBEaWFsb2cgVG9rZW4gKi8KLQlJbnNlcnREaWFsb2dUb2tlbihwQWQsIChwT3V0QnVmZmVyICsgRnJhbWVMZW4pLCAmRnJhbWVMZW4sIERpYWxvZ1Rva2VuKTsKLQotCS8qIEluc2VydCBUUEMgUmVxdWVzdCBJRS4gKi8KLQlJbnNlcnRUcGNSZXFJRShwQWQsIChwT3V0QnVmZmVyICsgRnJhbWVMZW4pLCAmRnJhbWVMZW4pOwotCi0JTWluaXBvcnRNTVJlcXVlc3QocEFkLCBRSURfQUNfQkUsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKLQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOwotCi0JcmV0dXJuOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JCVByZXBhcmUgVFBDIFJlcG9ydCBhY3Rpb24gZnJhbWUgYW5kIGVucXVldWUgaXQgaW50bwotCQltYW5hZ2VtZW50IHF1ZXVlIHdhaXRpbmcgZm9yIHRyYW5zbWl0aW9uLgotCi0JUGFyYW1ldHJzOgotCQkxLiB0aGUgZGVzdGluYXRpb24gbWFjIGFkZHJlc3Mgb2YgdGhlIGZyYW1lLgotCi0JUmV0dXJuCTogTm9uZS4KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi12b2lkIEVucXVldWVUUENSZXAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICB1OCAqcERBLAotCQkgICB1OCBEaWFsb2dUb2tlbiwgdTggVHhQd3IsIHU4IExpbmtNYXJnaW4pCi17Ci0JdTggKnBPdXRCdWZmZXIgPSBOVUxMOwotCWludCBOU3RhdHVzOwotCXVuc2lnbmVkIGxvbmcgRnJhbWVMZW47Ci0KLQlzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSBBY3RIZHI7Ci0KLQkvKiBidWlsZCBhY3Rpb24gZnJhbWUgaGVhZGVyLiAqLwotCU1ndE1hY0hlYWRlckluaXQocEFkLCAmQWN0SGRyLCBTVUJUWVBFX0FDVElPTiwgMCwgcERBLAotCQkJIHBBZC0+Q3VycmVudEFkZHJlc3MpOwotCi0JTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICh2b2lkICopJiBwT3V0QnVmZmVyKTsJLypHZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeSAqLwotCWlmIChOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCIlcygpIGFsbG9jYXRlIG1lbW9yeSBmYWlsZWQgXG4iLCBfX2Z1bmNfXykpOwotCQlyZXR1cm47Ci0JfQotCU5kaXNNb3ZlTWVtb3J5KHBPdXRCdWZmZXIsIChjaGFyICopJiBBY3RIZHIsIHNpemVvZihzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSkpOwotCUZyYW1lTGVuID0gc2l6ZW9mKHN0cnVjdCBydF9oZWFkZXJfODAyXzExKTsKLQotCUluc2VydEFjdEZpZWxkKHBBZCwgKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiksICZGcmFtZUxlbiwKLQkJICAgICAgIENBVEVHT1JZX1NQRUNUUlVNLCBTUEVDX1RQQ1JQKTsKLQotCS8qIGZpbGwgRGlhbG9nIFRva2VuICovCi0JSW5zZXJ0RGlhbG9nVG9rZW4ocEFkLCAocE91dEJ1ZmZlciArIEZyYW1lTGVuKSwgJkZyYW1lTGVuLCBEaWFsb2dUb2tlbik7Ci0KLQkvKiBJbnNlcnQgVFBDIFJlcXVlc3QgSUUuICovCi0JSW5zZXJ0VHBjUmVwb3J0SUUocEFkLCAocE91dEJ1ZmZlciArIEZyYW1lTGVuKSwgJkZyYW1lTGVuLCBUeFB3ciwKLQkJCSAgTGlua01hcmdpbik7Ci0KLQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIFFJRF9BQ19CRSwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOwotCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7Ci0KLQlyZXR1cm47Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJUHJlcGFyZSBDaGFubmVsIFN3aXRjaCBBbm5vdW5jZW1lbnQgYWN0aW9uIGZyYW1lIGFuZCBlbnF1ZXVlIGl0IGludG8KLQkJbWFuYWdlbWVudCBxdWV1ZSB3YWl0aW5nIGZvciB0cmFuc21pdGlvbi4KLQotCVBhcmFtZXRyczoKLQkJMS4gdGhlIGRlc3RpbmF0aW9uIG1hYyBhZGRyZXNzIG9mIHRoZSBmcmFtZS4KLQkJMi4gQ2hhbm5lbCBzd2l0Y2ggYW5ub3VuY2VtZW50IG1vZGUuCi0JCTIuIGEgTmV3IHNlbGVjdGVkIGNoYW5uZWwuCi0KLQlSZXR1cm4JOiBOb25lLgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgRW5xdWV1ZUNoU3dBbm4oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICAgdTggKnBEQSwgdTggQ2hTd01vZGUsIHU4IE5ld0NoKQotewotCXU4ICpwT3V0QnVmZmVyID0gTlVMTDsKLQlpbnQgTlN0YXR1czsKLQl1bnNpZ25lZCBsb25nIEZyYW1lTGVuOwotCi0Jc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEgQWN0SGRyOwotCi0JLyogYnVpbGQgYWN0aW9uIGZyYW1lIGhlYWRlci4gKi8KLQlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkFjdEhkciwgU1VCVFlQRV9BQ1RJT04sIDAsIHBEQSwKLQkJCSBwQWQtPkN1cnJlbnRBZGRyZXNzKTsKLQotCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAodm9pZCAqKSYgcE91dEJ1ZmZlcik7CS8qR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkgKi8KLQlpZiAoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiJXMoKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIFxuIiwgX19mdW5jX18pKTsKLQkJcmV0dXJuOwotCX0KLQlOZGlzTW92ZU1lbW9yeShwT3V0QnVmZmVyLCAoY2hhciAqKSYgQWN0SGRyLCBzaXplb2Yoc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEpKTsKLQlGcmFtZUxlbiA9IHNpemVvZihzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSk7Ci0KLQlJbnNlcnRBY3RGaWVsZChwQWQsIChwT3V0QnVmZmVyICsgRnJhbWVMZW4pLCAmRnJhbWVMZW4sCi0JCSAgICAgICBDQVRFR09SWV9TUEVDVFJVTSwgU1BFQ19DSEFOTkVMX1NXSVRDSCk7Ci0KLQlJbnNlcnRDaFN3QW5uSUUocEFkLCAocE91dEJ1ZmZlciArIEZyYW1lTGVuKSwgJkZyYW1lTGVuLCBDaFN3TW9kZSwKLQkJCU5ld0NoLCAwKTsKLQotCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgUUlEX0FDX0JFLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7Ci0JTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKLQotCXJldHVybjsKLX0KLQotc3RhdGljIEJPT0xFQU4gRGZzUmVxdWlyZW1lbnRDaGVjayhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHU4IENoYW5uZWwpCi17Ci0JQk9PTEVBTiBSZXN1bHQgPSBGQUxTRTsKLQlpbnQgaTsKLQotCWRvIHsKLQkJLyogY2hlY2sgREZTIHByb2NlZHVyZSBpcyBydW5uaW5nLiAqLwotCQkvKiBtYWtlIHN1cmUgREZTIHByb2NlZHVyZSB3b24ndCBzdGFydCB0d2ljZS4gKi8KLQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LlJETW9kZSAhPSBSRF9OT1JNQUxfTU9ERSkgewotCQkJUmVzdWx0ID0gRkFMU0U7Ci0JCQlicmVhazsKLQkJfQotCQkvKiBjaGVjayB0aGUgbmV3IGNoYW5uZWwgY2FycmllZCBmcm9tIENoYW5uZWwgU3dpdGNoIEFubm91bmNlbW5ldCBpcyB2YWxpZC4gKi8KLQkJZm9yIChpID0gMDsgaSA8IHBBZC0+Q2hhbm5lbExpc3ROdW07IGkrKykgewotCQkJaWYgKChDaGFubmVsID09IHBBZC0+Q2hhbm5lbExpc3RbaV0uQ2hhbm5lbCkKLQkJCSAgICAmJiAocEFkLT5DaGFubmVsTGlzdFtpXS5SZW1haW5pbmdUaW1lRm9yVXNlID09IDApKSB7Ci0JCQkJLyogZm91bmQgcmFkYXIgc2lnbmFsIGluIHRoZSBjaGFubmVsLiB0aGUgY2hhbm5lbCBjYW4ndCB1c2UgYXQgbGVhc3QgZm9yIDMwIG1pbnV0ZXMuICovCi0JCQkJcEFkLT5DaGFubmVsTGlzdFtpXS5SZW1haW5pbmdUaW1lRm9yVXNlID0gMTgwMDsJLyozMCBtaW4gPSAxODAwIHNlYyAqLwotCQkJCVJlc3VsdCA9IFRSVUU7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9IHdoaWxlIChGQUxTRSk7Ci0KLQlyZXR1cm4gUmVzdWx0OwotfQotCi12b2lkIE5vdGlmeUNoU3dBbm5Ub1BlZXJBUHMoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgIHU4ICpwUkEsCi0JCQkgICAgdTggKnBUQSwgdTggQ2hTd01vZGUsIHU4IENoYW5uZWwpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIFN0YXJ0REZTUHJvY2VkdXJlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICAgIHU4IENoYW5uZWwsIHU4IENoU3dNb2RlKQotewotCS8qIHN0YXJ0IERGUyBwcm9jZWR1cmUgKi8KLQlwQWQtPkNvbW1vbkNmZy5DaGFubmVsID0gQ2hhbm5lbDsKLQotCU5fQ2hhbm5lbENoZWNrKHBBZCk7Ci0KLQlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5SRE1vZGUgPSBSRF9TV0lUQ0hJTkdfTU9ERTsKLQlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5DU0NvdW50ID0gMDsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlDaGFubmVsIFN3aXRjaCBBbm5vdW5jZW1lbnQgYWN0aW9uIGZyYW1lIHNhbml0eSBjaGVjay4KLQotCVBhcmFtZXRyczoKLQkJMS4gTUxNRSBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHJlY2VpdmVkIGZyYW1lCi0JCTIuIG1lc3NhZ2UgbGVuZ3RoLgotCQkzLiBDaGFubmVsIHN3aXRjaCBhbm5vdW5jZW1lbnQgaW5mb3JtYXRpb24gYnVmZmVyLgotCi0JUmV0dXJuCTogTm9uZS4KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLS8qCi0gIENoYW5uZWwgU3dpdGNoIEFubm91bmNlbWVudCBJRS4KLSAgKy0tLS0rLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKwotICB8IElEIHwgTGVuIHxDaCBTdyBNb2RlIHwgTmV3IENoIE51bSB8IENoIFN3IENudCB8Ci0gICstLS0tKy0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSsKLSAgICAxICAgIDEgICAgICAgIDEgICAgICAgICAgIDEgICAgICAgICAgICAxCi0qLwotc3RhdGljIEJPT0xFQU4gUGVlckNoU3dBbm5TYW5pdHkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCSB2b2lkICogcE1zZywKLQkJCQkgdW5zaWduZWQgbG9uZyBNc2dMZW4sCi0JCQkJIHN0cnVjdCBydF9jaF9zd19hbm5faW5mbyAqIHBDaFN3QW5uSW5mbykKLXsKLQlzdHJ1Y3QgcnRfZnJhbWVfODAyXzExICogRnIgPSAoc3RydWN0IHJ0X2ZyYW1lXzgwMl8xMSAqKSBwTXNnOwotCXU4ICpwRnJhbWVQdHIgPSBGci0+T2N0ZXQ7Ci0JQk9PTEVBTiByZXN1bHQgPSBGQUxTRTsKLQlzdHJ1Y3QgcnRfZWlkICogZWlkX3B0cjsKLQotCS8qIHNraXAgODAyLjExIGhlYWRlci4gKi8KLQlNc2dMZW4gLT0gc2l6ZW9mKHN0cnVjdCBydF9oZWFkZXJfODAyXzExKTsKLQotCS8qIHNraXAgY2F0ZWdvcnkgYW5kIGFjdGlvbiBjb2RlLiAqLwotCXBGcmFtZVB0ciArPSAyOwotCU1zZ0xlbiAtPSAyOwotCi0JaWYgKHBDaFN3QW5uSW5mbyA9PSBOVUxMKQotCQlyZXR1cm4gcmVzdWx0OwotCi0JZWlkX3B0ciA9IChzdHJ1Y3QgcnRfZWlkICopIHBGcmFtZVB0cjsKLQl3aGlsZSAoKCh1OCAqKSBlaWRfcHRyICsgZWlkX3B0ci0+TGVuICsgMSkgPAotCSAgICAgICAoKHU4ICopcEZyYW1lUHRyICsgTXNnTGVuKSkgewotCQlzd2l0Y2ggKGVpZF9wdHItPkVpZCkgewotCQljYXNlIElFX0NIQU5ORUxfU1dJVENIX0FOTk9VTkNFTUVOVDoKLQkJCU5kaXNNb3ZlTWVtb3J5KCZwQ2hTd0FubkluZm8tPkNoU3dNb2RlLCBlaWRfcHRyLT5PY3RldCwKLQkJCQkgICAgICAgMSk7Ci0JCQlOZGlzTW92ZU1lbW9yeSgmcENoU3dBbm5JbmZvLT5DaGFubmVsLAotCQkJCSAgICAgICBlaWRfcHRyLT5PY3RldCArIDEsIDEpOwotCQkJTmRpc01vdmVNZW1vcnkoJnBDaFN3QW5uSW5mby0+Q2hTd0NudCwKLQkJCQkgICAgICAgZWlkX3B0ci0+T2N0ZXQgKyAyLCAxKTsKLQotCQkJcmVzdWx0ID0gVFJVRTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCQllaWRfcHRyID0gKHN0cnVjdCBydF9laWQgKikgKCh1OCAqKSBlaWRfcHRyICsgMiArIGVpZF9wdHItPkxlbik7Ci0JfQotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlNZWFzdXJlbWVudCByZXF1ZXN0IGFjdGlvbiBmcmFtZSBzYW5pdHkgY2hlY2suCi0KLQlQYXJhbWV0cnM6Ci0JCTEuIE1MTUUgbWVzc2FnZSBjb250YWluaW5nIHRoZSByZWNlaXZlZCBmcmFtZQotCQkyLiBtZXNzYWdlIGxlbmd0aC4KLQkJMy4gTWVhc3VyZW1lbnQgcmVxdWVzdCBpbmZvcm1hdGlvbiBidWZmZXIuCi0KLQlSZXR1cm4JOiBOb25lLgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXN0YXRpYyBCT09MRUFOIFBlZXJNZWFzdXJlUmVxU2FuaXR5KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkgICAgdm9pZCAqIHBNc2csCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgTXNnTGVuLAotCQkJCSAgICB1OCAqcERpYWxvZ1Rva2VuLAotCQkJCSAgICBzdHJ1Y3QgcnRfbWVhc3VyZV9yZXFfaW5mbyAqIHBNZWFzdXJlUmVxSW5mbywKLQkJCQkgICAgc3RydWN0IHJ0X21lYXN1cmVfcmVxICogcE1lYXN1cmVSZXEpCi17Ci0Jc3RydWN0IHJ0X2ZyYW1lXzgwMl8xMSAqIEZyID0gKHN0cnVjdCBydF9mcmFtZV84MDJfMTEgKikgcE1zZzsKLQl1OCAqcEZyYW1lUHRyID0gRnItPk9jdGV0OwotCUJPT0xFQU4gcmVzdWx0ID0gRkFMU0U7Ci0Jc3RydWN0IHJ0X2VpZCAqIGVpZF9wdHI7Ci0JdTggKnB0cjsKLQl1NjQgTWVhc3VyZVN0YXJ0VGltZTsKLQl1MTYgTWVhc3VyZUR1cmF0aW9uOwotCi0JLyogc2tpcCA4MDIuMTEgaGVhZGVyLiAqLwotCU1zZ0xlbiAtPSBzaXplb2Yoc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEpOwotCi0JLyogc2tpcCBjYXRlZ29yeSBhbmQgYWN0aW9uIGNvZGUuICovCi0JcEZyYW1lUHRyICs9IDI7Ci0JTXNnTGVuIC09IDI7Ci0KLQlpZiAocE1lYXN1cmVSZXFJbmZvID09IE5VTEwpCi0JCXJldHVybiByZXN1bHQ7Ci0KLQlOZGlzTW92ZU1lbW9yeShwRGlhbG9nVG9rZW4sIHBGcmFtZVB0ciwgMSk7Ci0JcEZyYW1lUHRyICs9IDE7Ci0JTXNnTGVuIC09IDE7Ci0KLQllaWRfcHRyID0gKHN0cnVjdCBydF9laWQgKikgcEZyYW1lUHRyOwotCXdoaWxlICgoKHU4ICopIGVpZF9wdHIgKyBlaWRfcHRyLT5MZW4gKyAxKSA8Ci0JICAgICAgICgodTggKilwRnJhbWVQdHIgKyBNc2dMZW4pKSB7Ci0JCXN3aXRjaCAoZWlkX3B0ci0+RWlkKSB7Ci0JCWNhc2UgSUVfTUVBU1VSRU1FTlRfUkVRVUVTVDoKLQkJCU5kaXNNb3ZlTWVtb3J5KCZwTWVhc3VyZVJlcUluZm8tPlRva2VuLCBlaWRfcHRyLT5PY3RldCwKLQkJCQkgICAgICAgMSk7Ci0JCQlOZGlzTW92ZU1lbW9yeSgmcE1lYXN1cmVSZXFJbmZvLT5SZXFNb2RlLndvcmQsCi0JCQkJICAgICAgIGVpZF9wdHItPk9jdGV0ICsgMSwgMSk7Ci0JCQlOZGlzTW92ZU1lbW9yeSgmcE1lYXN1cmVSZXFJbmZvLT5SZXFUeXBlLAotCQkJCSAgICAgICBlaWRfcHRyLT5PY3RldCArIDIsIDEpOwotCQkJcHRyID0gKHU4ICopKGVpZF9wdHItPk9jdGV0ICsgMyk7Ci0JCQlOZGlzTW92ZU1lbW9yeSgmcE1lYXN1cmVSZXEtPkNoTnVtLCBwdHIsIDEpOwotCQkJTmRpc01vdmVNZW1vcnkoJk1lYXN1cmVTdGFydFRpbWUsIHB0ciArIDEsIDgpOwotCQkJcE1lYXN1cmVSZXEtPk1lYXN1cmVTdGFydFRpbWUgPQotCQkJICAgIFNXQVA2NChNZWFzdXJlU3RhcnRUaW1lKTsKLQkJCU5kaXNNb3ZlTWVtb3J5KCZNZWFzdXJlRHVyYXRpb24sIHB0ciArIDksIDIpOwotCQkJcE1lYXN1cmVSZXEtPk1lYXN1cmVEdXJhdGlvbiA9IFNXQVAxNihNZWFzdXJlRHVyYXRpb24pOwotCi0JCQlyZXN1bHQgPSBUUlVFOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JCWVpZF9wdHIgPSAoc3RydWN0IHJ0X2VpZCAqKSAoKHU4ICopIGVpZF9wdHIgKyAyICsgZWlkX3B0ci0+TGVuKTsKLQl9Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JCU1lYXN1cmVtZW50IHJlcG9ydCBhY3Rpb24gZnJhbWUgc2FuaXR5IGNoZWNrLgotCi0JUGFyYW1ldHJzOgotCQkxLiBNTE1FIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgcmVjZWl2ZWQgZnJhbWUKLQkJMi4gbWVzc2FnZSBsZW5ndGguCi0JCTMuIE1lYXN1cmVtZW50IHJlcG9ydCBpbmZvcm1hdGlvbiBidWZmZXIuCi0JCTQuIGJhc2ljIHJlcG9ydCBpbmZvcm1hdGlvbiBidWZmZXIuCi0KLQlSZXR1cm4JOiBOb25lLgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotLyoKLSAgTWVhc3VyZW1lbnQgUmVwb3J0IElFLgotICArLS0tLSstLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKLSAgfCBJRCB8IExlbiB8IFRva2VuIHwgUmVwb3J0IE1vZGUgfCBNZWFzdXJlIFR5cGUgfCBNZWFzdXJlIFJlcG9ydCB8Ci0gICstLS0tKy0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKwotICAgIDEgICAgIDEgICAgICAxICAgICAgICAgIDEgICAgICAgICAgICAgMSAgICAgICAgICAgIHZhcmlhYmxlCi0KLSAgQmFzaWMgUmVwb3J0LgotICArLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rCi0gIHwgQ2ggTnVtIHwgU3RhcnQgVGltZSB8IER1cmF0aW9uIHwgTWFwIHwKLSAgKy0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKwotICAgICAgMSAgICAgICAgICA4ICAgICAgICAgICAyICAgICAgICAxCi0KLSAgTWFwIEZpZWxkIEJpdCBGb3JtYXQuCi0gICstLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCi0gIHwgQnNzIHwgT0ZETSBQcmVhbWJsZSB8IFVuaWRlbnRpZmllZCBzaWduYWwgfCBSYWRhciB8IFVubWVhc3VyZWQgfCBSZXNlcnZlZCB8Ci0gICstLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCi0gICAgIDAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgIDMgICAgICAgICA0ICAgICAgICAgIDUtNwotKi8KLXN0YXRpYyBCT09MRUFOIFBlZXJNZWFzdXJlUmVwb3J0U2FuaXR5KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkgICAgICAgdm9pZCAqIHBNc2csCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgTXNnTGVuLAotCQkJCSAgICAgICB1OCAqcERpYWxvZ1Rva2VuLAotCQkJCSAgICAgICBzdHJ1Y3QgcnRfbWVhc3VyZV9yZXBvcnRfaW5mbyAqCi0JCQkJICAgICAgIHBNZWFzdXJlUmVwb3J0SW5mbywKLQkJCQkgICAgICAgdTggKnBSZXBvcnRCdWYpCi17Ci0Jc3RydWN0IHJ0X2ZyYW1lXzgwMl8xMSAqIEZyID0gKHN0cnVjdCBydF9mcmFtZV84MDJfMTEgKikgcE1zZzsKLQl1OCAqcEZyYW1lUHRyID0gRnItPk9jdGV0OwotCUJPT0xFQU4gcmVzdWx0ID0gRkFMU0U7Ci0Jc3RydWN0IHJ0X2VpZCAqIGVpZF9wdHI7Ci0JdTggKnB0cjsKLQotCS8qIHNraXAgODAyLjExIGhlYWRlci4gKi8KLQlNc2dMZW4gLT0gc2l6ZW9mKHN0cnVjdCBydF9oZWFkZXJfODAyXzExKTsKLQotCS8qIHNraXAgY2F0ZWdvcnkgYW5kIGFjdGlvbiBjb2RlLiAqLwotCXBGcmFtZVB0ciArPSAyOwotCU1zZ0xlbiAtPSAyOwotCi0JaWYgKHBNZWFzdXJlUmVwb3J0SW5mbyA9PSBOVUxMKQotCQlyZXR1cm4gcmVzdWx0OwotCi0JTmRpc01vdmVNZW1vcnkocERpYWxvZ1Rva2VuLCBwRnJhbWVQdHIsIDEpOwotCXBGcmFtZVB0ciArPSAxOwotCU1zZ0xlbiAtPSAxOwotCi0JZWlkX3B0ciA9IChzdHJ1Y3QgcnRfZWlkICopIHBGcmFtZVB0cjsKLQl3aGlsZSAoKCh1OCAqKSBlaWRfcHRyICsgZWlkX3B0ci0+TGVuICsgMSkgPAotCSAgICAgICAoKHU4ICopcEZyYW1lUHRyICsgTXNnTGVuKSkgewotCQlzd2l0Y2ggKGVpZF9wdHItPkVpZCkgewotCQljYXNlIElFX01FQVNVUkVNRU5UX1JFUE9SVDoKLQkJCU5kaXNNb3ZlTWVtb3J5KCZwTWVhc3VyZVJlcG9ydEluZm8tPlRva2VuLAotCQkJCSAgICAgICBlaWRfcHRyLT5PY3RldCwgMSk7Ci0JCQlOZGlzTW92ZU1lbW9yeSgmcE1lYXN1cmVSZXBvcnRJbmZvLT5SZXBvcnRNb2RlLAotCQkJCSAgICAgICBlaWRfcHRyLT5PY3RldCArIDEsIDEpOwotCQkJTmRpc01vdmVNZW1vcnkoJnBNZWFzdXJlUmVwb3J0SW5mby0+UmVwb3J0VHlwZSwKLQkJCQkgICAgICAgZWlkX3B0ci0+T2N0ZXQgKyAyLCAxKTsKLQkJCWlmIChwTWVhc3VyZVJlcG9ydEluZm8tPlJlcG9ydFR5cGUgPT0gUk1fQkFTSUMpIHsKLQkJCQlzdHJ1Y3QgcnRfbWVhc3VyZV9iYXNpY19yZXBvcnQgKiBwUmVwb3J0ID0KLQkJCQkgICAgKHN0cnVjdCBydF9tZWFzdXJlX2Jhc2ljX3JlcG9ydCAqKSBwUmVwb3J0QnVmOwotCQkJCXB0ciA9ICh1OCAqKShlaWRfcHRyLT5PY3RldCArIDMpOwotCQkJCU5kaXNNb3ZlTWVtb3J5KCZwUmVwb3J0LT5DaE51bSwgcHRyLCAxKTsKLQkJCQlOZGlzTW92ZU1lbW9yeSgmcFJlcG9ydC0+TWVhc3VyZVN0YXJ0VGltZSwKLQkJCQkJICAgICAgIHB0ciArIDEsIDgpOwotCQkJCU5kaXNNb3ZlTWVtb3J5KCZwUmVwb3J0LT5NZWFzdXJlRHVyYXRpb24sCi0JCQkJCSAgICAgICBwdHIgKyA5LCAyKTsKLQkJCQlOZGlzTW92ZU1lbW9yeSgmcFJlcG9ydC0+TWFwLCBwdHIgKyAxMSwgMSk7Ci0KLQkJCX0gZWxzZSBpZiAocE1lYXN1cmVSZXBvcnRJbmZvLT5SZXBvcnRUeXBlID09IFJNX0NDQSkgewotCQkJCXN0cnVjdCBydF9tZWFzdXJlX2NjYV9yZXBvcnQgKiBwUmVwb3J0ID0KLQkJCQkgICAgKHN0cnVjdCBydF9tZWFzdXJlX2NjYV9yZXBvcnQgKikgcFJlcG9ydEJ1ZjsKLQkJCQlwdHIgPSAodTggKikoZWlkX3B0ci0+T2N0ZXQgKyAzKTsKLQkJCQlOZGlzTW92ZU1lbW9yeSgmcFJlcG9ydC0+Q2hOdW0sIHB0ciwgMSk7Ci0JCQkJTmRpc01vdmVNZW1vcnkoJnBSZXBvcnQtPk1lYXN1cmVTdGFydFRpbWUsCi0JCQkJCSAgICAgICBwdHIgKyAxLCA4KTsKLQkJCQlOZGlzTW92ZU1lbW9yeSgmcFJlcG9ydC0+TWVhc3VyZUR1cmF0aW9uLAotCQkJCQkgICAgICAgcHRyICsgOSwgMik7Ci0JCQkJTmRpc01vdmVNZW1vcnkoJnBSZXBvcnQtPkNDQV9CdXN5X0ZyYWN0aW9uLAotCQkJCQkgICAgICAgcHRyICsgMTEsIDEpOwotCi0JCQl9IGVsc2UgaWYgKHBNZWFzdXJlUmVwb3J0SW5mby0+UmVwb3J0VHlwZSA9PQotCQkJCSAgIFJNX1JQSV9ISVNUT0dSQU0pIHsKLQkJCQlzdHJ1Y3QgcnRfbWVhc3VyZV9ycGlfcmVwb3J0ICogcFJlcG9ydCA9Ci0JCQkJICAgIChzdHJ1Y3QgcnRfbWVhc3VyZV9ycGlfcmVwb3J0ICopIHBSZXBvcnRCdWY7Ci0JCQkJcHRyID0gKHU4ICopKGVpZF9wdHItPk9jdGV0ICsgMyk7Ci0JCQkJTmRpc01vdmVNZW1vcnkoJnBSZXBvcnQtPkNoTnVtLCBwdHIsIDEpOwotCQkJCU5kaXNNb3ZlTWVtb3J5KCZwUmVwb3J0LT5NZWFzdXJlU3RhcnRUaW1lLAotCQkJCQkgICAgICAgcHRyICsgMSwgOCk7Ci0JCQkJTmRpc01vdmVNZW1vcnkoJnBSZXBvcnQtPk1lYXN1cmVEdXJhdGlvbiwKLQkJCQkJICAgICAgIHB0ciArIDksIDIpOwotCQkJCU5kaXNNb3ZlTWVtb3J5KCZwUmVwb3J0LT5SUElfRGVuc2l0eSwgcHRyICsgMTEsCi0JCQkJCSAgICAgICA4KTsKLQkJCX0KLQkJCXJlc3VsdCA9IFRSVUU7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQkJZWlkX3B0ciA9IChzdHJ1Y3QgcnRfZWlkICopICgodTggKikgZWlkX3B0ciArIDIgKyBlaWRfcHRyLT5MZW4pOwotCX0KLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJVFBDIFJlcXVlc3QgYWN0aW9uIGZyYW1lIHNhbml0eSBjaGVjay4KLQotCVBhcmFtZXRyczoKLQkJMS4gTUxNRSBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHJlY2VpdmVkIGZyYW1lCi0JCTIuIG1lc3NhZ2UgbGVuZ3RoLgotCQkzLiBEaWFsb2cgVG9rZW4uCi0KLQlSZXR1cm4JOiBOb25lLgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXN0YXRpYyBCT09MRUFOIFBlZXJUcGNSZXFTYW5pdHkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCXZvaWQgKiBwTXNnLAotCQkJCXVuc2lnbmVkIGxvbmcgTXNnTGVuLCB1OCAqcERpYWxvZ1Rva2VuKQotewotCXN0cnVjdCBydF9mcmFtZV84MDJfMTEgKiBGciA9IChzdHJ1Y3QgcnRfZnJhbWVfODAyXzExICopIHBNc2c7Ci0JdTggKnBGcmFtZVB0ciA9IEZyLT5PY3RldDsKLQlCT09MRUFOIHJlc3VsdCA9IEZBTFNFOwotCXN0cnVjdCBydF9laWQgKiBlaWRfcHRyOwotCi0JTXNnTGVuIC09IHNpemVvZihzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSk7Ci0KLQkvKiBza2lwIGNhdGVnb3J5IGFuZCBhY3Rpb24gY29kZS4gKi8KLQlwRnJhbWVQdHIgKz0gMjsKLQlNc2dMZW4gLT0gMjsKLQotCWlmIChwRGlhbG9nVG9rZW4gPT0gTlVMTCkKLQkJcmV0dXJuIHJlc3VsdDsKLQotCU5kaXNNb3ZlTWVtb3J5KHBEaWFsb2dUb2tlbiwgcEZyYW1lUHRyLCAxKTsKLQlwRnJhbWVQdHIgKz0gMTsKLQlNc2dMZW4gLT0gMTsKLQotCWVpZF9wdHIgPSAoc3RydWN0IHJ0X2VpZCAqKSBwRnJhbWVQdHI7Ci0Jd2hpbGUgKCgodTggKikgZWlkX3B0ciArIGVpZF9wdHItPkxlbiArIDEpIDwKLQkgICAgICAgKCh1OCAqKXBGcmFtZVB0ciArIE1zZ0xlbikpIHsKLQkJc3dpdGNoIChlaWRfcHRyLT5FaWQpIHsKLQkJY2FzZSBJRV9UUENfUkVRVUVTVDoKLQkJCXJlc3VsdCA9IFRSVUU7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQkJZWlkX3B0ciA9IChzdHJ1Y3QgcnRfZWlkICopICgodTggKikgZWlkX3B0ciArIDIgKyBlaWRfcHRyLT5MZW4pOwotCX0KLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJVFBDIFJlcG9ydCBhY3Rpb24gZnJhbWUgc2FuaXR5IGNoZWNrLgotCi0JUGFyYW1ldHJzOgotCQkxLiBNTE1FIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgcmVjZWl2ZWQgZnJhbWUKLQkJMi4gbWVzc2FnZSBsZW5ndGguCi0JCTMuIERpYWxvZyBUb2tlbi4KLQkJNC4gVFBDIFJlcG9ydCBJRS4KLQotCVJldHVybgk6IE5vbmUuCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotc3RhdGljIEJPT0xFQU4gUGVlclRwY1JlcFNhbml0eShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJdm9pZCAqIHBNc2csCi0JCQkJdW5zaWduZWQgbG9uZyBNc2dMZW4sCi0JCQkJdTggKnBEaWFsb2dUb2tlbiwKLQkJCQlzdHJ1Y3QgcnRfdHBjX3JlcG9ydF9pbmZvICogcFRwY1JlcEluZm8pCi17Ci0Jc3RydWN0IHJ0X2ZyYW1lXzgwMl8xMSAqIEZyID0gKHN0cnVjdCBydF9mcmFtZV84MDJfMTEgKikgcE1zZzsKLQl1OCAqcEZyYW1lUHRyID0gRnItPk9jdGV0OwotCUJPT0xFQU4gcmVzdWx0ID0gRkFMU0U7Ci0Jc3RydWN0IHJ0X2VpZCAqIGVpZF9wdHI7Ci0KLQlNc2dMZW4gLT0gc2l6ZW9mKHN0cnVjdCBydF9oZWFkZXJfODAyXzExKTsKLQotCS8qIHNraXAgY2F0ZWdvcnkgYW5kIGFjdGlvbiBjb2RlLiAqLwotCXBGcmFtZVB0ciArPSAyOwotCU1zZ0xlbiAtPSAyOwotCi0JaWYgKHBEaWFsb2dUb2tlbiA9PSBOVUxMKQotCQlyZXR1cm4gcmVzdWx0OwotCi0JTmRpc01vdmVNZW1vcnkocERpYWxvZ1Rva2VuLCBwRnJhbWVQdHIsIDEpOwotCXBGcmFtZVB0ciArPSAxOwotCU1zZ0xlbiAtPSAxOwotCi0JZWlkX3B0ciA9IChzdHJ1Y3QgcnRfZWlkICopIHBGcmFtZVB0cjsKLQl3aGlsZSAoKCh1OCAqKSBlaWRfcHRyICsgZWlkX3B0ci0+TGVuICsgMSkgPAotCSAgICAgICAoKHU4ICopcEZyYW1lUHRyICsgTXNnTGVuKSkgewotCQlzd2l0Y2ggKGVpZF9wdHItPkVpZCkgewotCQljYXNlIElFX1RQQ19SRVBPUlQ6Ci0JCQlOZGlzTW92ZU1lbW9yeSgmcFRwY1JlcEluZm8tPlR4UHdyLCBlaWRfcHRyLT5PY3RldCwgMSk7Ci0JCQlOZGlzTW92ZU1lbW9yeSgmcFRwY1JlcEluZm8tPkxpbmtNYXJnaW4sCi0JCQkJICAgICAgIGVpZF9wdHItPk9jdGV0ICsgMSwgMSk7Ci0JCQlyZXN1bHQgPSBUUlVFOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JCWVpZF9wdHIgPSAoc3RydWN0IHJ0X2VpZCAqKSAoKHU4ICopIGVpZF9wdHIgKyAyICsgZWlkX3B0ci0+TGVuKTsKLQl9Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JCUNoYW5uZWwgU3dpdGNoIEFubm91bmNlbWVudCBhY3Rpb24gZnJhbWUgaGFuZGxlci4KLQotCVBhcmFtZXRyczoKLQkJRWxtZSAtIE1MTUUgbWVzc2FnZSBjb250YWluaW5nIHRoZSByZWNlaXZlZCBmcmFtZQotCi0JUmV0dXJuCTogTm9uZS4KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi1zdGF0aWMgdm9pZCBQZWVyQ2hTd0FubkFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pCi17Ci0Jc3RydWN0IHJ0X2NoX3N3X2Fubl9pbmZvIENoU3dBbm5JbmZvOwotCXN0cnVjdCBydF9mcmFtZV84MDJfMTEgKiBwRnIgPSAoc3RydWN0IHJ0X2ZyYW1lXzgwMl8xMSAqKSBFbGVtLT5Nc2c7Ci0JdTggaW5kZXggPSAwLCBDaGFubmVsID0gMCwgTmV3Q2hhbm5lbCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBCc3NpZHggPSAwOwotCi0JTmRpc1plcm9NZW1vcnkoJkNoU3dBbm5JbmZvLCBzaXplb2Yoc3RydWN0IHJ0X2NoX3N3X2Fubl9pbmZvKSk7Ci0JaWYgKCFQZWVyQ2hTd0FublNhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuLCAmQ2hTd0FubkluZm8pKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiSW52YWxpZCBDaGFubmVsIFN3aXRjaCBBY3Rpb24gRnJhbWUuXG4iKSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkgewotCQlCc3NpZHggPQotCQkgICAgQnNzVGFibGVTZWFyY2goJnBBZC0+U2NhblRhYiwgcEZyLT5IZHIuQWRkcjMsCi0JCQkJICAgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7Ci0JCWlmIChCc3NpZHggPT0gQlNTX05PVF9GT1VORCkgewotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiUGVlckNoU3dBbm5BY3Rpb24gLSBCc3NpZHggaXMgbm90IGZvdW5kXG4iKSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIlxuKioqKkJzc2lkeCBpcyAlZCwgQ2hhbm5lbCA9ICVkXG4iLCBpbmRleCwKLQkJCSAgcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc2lkeF0uQ2hhbm5lbCkpOwotCQloZXhfZHVtcCgiU1NJRCIsIHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NpZHhdLkJzc2lkLCA2KTsKLQotCQlDaGFubmVsID0gcEFkLT5Db21tb25DZmcuQ2hhbm5lbDsKLQkJTmV3Q2hhbm5lbCA9IENoU3dBbm5JbmZvLkNoYW5uZWw7Ci0KLQkJaWYgKChwQWQtPkNvbW1vbkNmZy5iSUVFRTgwMjExSCA9PSAxKSAmJiAoTmV3Q2hhbm5lbCAhPSAwKQotCQkgICAgJiYgKENoYW5uZWwgIT0gTmV3Q2hhbm5lbCkpIHsKLQkJCS8qIFN3aXRjaGluZyB0byBjaGFubmVsIDEgY2FuIHByZXZlbnQgZnJvbSByZXNjYW5uaW5nIHRoZSBjdXJyZW50IGNoYW5uZWwgaW1tZWRpYXRlbHkgKGJ5IGF1dG8gcmVjb25uZWN0aW9uKS4gKi8KLQkJCS8qIEluIGFkZGl0aW9uLCBjbGVhciB0aGUgTUxNRSBxdWV1ZSBhbmQgdGhlIHNjYW4gdGFibGUgdG8gZGlzY2FyZCB0aGUgUlggcGFja2V0cyBhbmQgcHJldmlvdXMgc2Nhbm5pbmcgcmVzdWx0cy4gKi8KLQkJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgMSwgRkFMU0UpOwotCQkJQXNpY0xvY2tDaGFubmVsKHBBZCwgMSk7Ci0JCQlMaW5rRG93bihwQWQsIEZBTFNFKTsKLQkJCU1sbWVRdWV1ZUluaXQoJnBBZC0+TWxtZS5RdWV1ZSk7Ci0JCQlCc3NUYWJsZUluaXQoJnBBZC0+U2NhblRhYik7Ci0JCQlSVE1QdXNlY0RlbGF5KDEwMDAwMDApOwkvKiB1c2UgZGVsYXkgdG8gcHJldmVudCBTVEEgZG8gcmVhc3NvYyAqLwotCi0JCQkvKiBjaGFubmVsIHNhbml0eSBjaGVjayAqLwotCQkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcEFkLT5DaGFubmVsTGlzdE51bTsgaW5kZXgrKykgewotCQkJCWlmIChwQWQtPkNoYW5uZWxMaXN0W2luZGV4XS5DaGFubmVsID09Ci0JCQkJICAgIE5ld0NoYW5uZWwpIHsKLQkJCQkJcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc2lkeF0uQ2hhbm5lbCA9Ci0JCQkJCSAgICBOZXdDaGFubmVsOwotCQkJCQlwQWQtPkNvbW1vbkNmZy5DaGFubmVsID0gTmV3Q2hhbm5lbDsKLQkJCQkJQXNpY1N3aXRjaENoYW5uZWwocEFkLAotCQkJCQkJCSAgcEFkLT5Db21tb25DZmcuCi0JCQkJCQkJICBDaGFubmVsLCBGQUxTRSk7Ci0JCQkJCUFzaWNMb2NrQ2hhbm5lbChwQWQsCi0JCQkJCQkJcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7Ci0JCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkJICgiJiYmJiYmJiYmJiYmJiYmJlBlZXJDaFN3QW5uQWN0aW9uIC0gU1RBIHJlY2VpdmUgY2hhbm5lbCBzd2l0Y2ggYW5ub3VuY2VtZW50IElFIChOZXcgQ2hhbm5lbCA9JWQpXG4iLAotCQkJCQkJICBOZXdDaGFubmVsKSk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQotCQkJaWYgKGluZGV4ID49IHBBZC0+Q2hhbm5lbExpc3ROdW0pIHsKLQkJCQlEQkdQUklOVF9FUlIoIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmUGVlckNoU3dBbm5BY3Rpb24oY2FuIG5vdCBmaW5kIE5ldyBDaGFubmVsPSVkIGluIENoYW5uZWxMaXN0WyVkXVxuIiwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCwgcEFkLT5DaGFubmVsTGlzdE51bSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlyZXR1cm47Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJTWVhc3VyZW1lbnQgUmVxdWVzdCBhY3Rpb24gZnJhbWUgaGFuZGxlci4KLQotCVBhcmFtZXRyczoKLQkJRWxtZSAtIE1MTUUgbWVzc2FnZSBjb250YWluaW5nIHRoZSByZWNlaXZlZCBmcmFtZQotCi0JUmV0dXJuCTogTm9uZS4KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi1zdGF0aWMgdm9pZCBQZWVyTWVhc3VyZVJlcUFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pCi17Ci0Jc3RydWN0IHJ0X2ZyYW1lXzgwMl8xMSAqIHBGciA9IChzdHJ1Y3QgcnRfZnJhbWVfODAyXzExICopIEVsZW0tPk1zZzsKLQl1OCBEaWFsb2dUb2tlbjsKLQlzdHJ1Y3QgcnRfbWVhc3VyZV9yZXFfaW5mbyBNZWFzdXJlUmVxSW5mbzsKLQlzdHJ1Y3QgcnRfbWVhc3VyZV9yZXEgTWVhc3VyZVJlcTsKLQlNRUFTVVJFX1JFUE9SVF9NT0RFIFJlcG9ydE1vZGU7Ci0KLQlpZiAoUGVlck1lYXN1cmVSZXFTYW5pdHkKLQkgICAgKHBBZCwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4sICZEaWFsb2dUb2tlbiwgJk1lYXN1cmVSZXFJbmZvLAotCSAgICAgJk1lYXN1cmVSZXEpKSB7Ci0JCVJlcG9ydE1vZGUud29yZCA9IDA7Ci0JCVJlcG9ydE1vZGUuZmllbGQuSW5jYXBhYmxlID0gMTsKLQkJRW5xdWV1ZU1lYXN1cmVtZW50UmVwKHBBZCwgcEZyLT5IZHIuQWRkcjIsIERpYWxvZ1Rva2VuLAotCQkJCSAgICAgIE1lYXN1cmVSZXFJbmZvLlRva2VuLCBSZXBvcnRNb2RlLndvcmQsCi0JCQkJICAgICAgTWVhc3VyZVJlcUluZm8uUmVxVHlwZSwgMCwgTlVMTCk7Ci0JfQotCi0JcmV0dXJuOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JCU1lYXN1cmVtZW50IFJlcG9ydCBhY3Rpb24gZnJhbWUgaGFuZGxlci4KLQotCVBhcmFtZXRyczoKLQkJRWxtZSAtIE1MTUUgbWVzc2FnZSBjb250YWluaW5nIHRoZSByZWNlaXZlZCBmcmFtZQotCi0JUmV0dXJuCTogTm9uZS4KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi1zdGF0aWMgdm9pZCBQZWVyTWVhc3VyZVJlcG9ydEFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJICAgIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pCi17Ci0Jc3RydWN0IHJ0X21lYXN1cmVfcmVwb3J0X2luZm8gTWVhc3VyZVJlcG9ydEluZm87Ci0Jc3RydWN0IHJ0X2ZyYW1lXzgwMl8xMSAqIHBGciA9IChzdHJ1Y3QgcnRfZnJhbWVfODAyXzExICopIEVsZW0tPk1zZzsKLQl1OCBEaWFsb2dUb2tlbjsKLQl1OCAqcE1lYXN1cmVSZXBvcnRJbmZvOwotCi0vKiAgICAgIGlmIChwQWQtPkNvbW1vbkNmZy5iSUVFRTgwMjExSCAhPSBUUlVFKSAqLwotLyogICAgICAgICAgICAgIHJldHVybjsgKi8KLQotCXBNZWFzdXJlUmVwb3J0SW5mbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBydF9tZWFzdXJlX3JwaV9yZXBvcnQpLCBHRlBfQVRPTUlDKTsKLQlpZiAocE1lYXN1cmVSZXBvcnRJbmZvID09IE5VTEwpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkgKCIlcyB1bmFibGUgdG8gYWxsb2MgbWVtb3J5IGZvciBtZWFzdXJlIHJlcG9ydCBidWZmZXIgKHNpemU9JXp1KS5cbiIsCi0JCQkgIF9fZnVuY19fLCBzaXplb2Yoc3RydWN0IHJ0X21lYXN1cmVfcnBpX3JlcG9ydCkpKTsKLQkJcmV0dXJuOwotCX0KLQotCU5kaXNaZXJvTWVtb3J5KCZNZWFzdXJlUmVwb3J0SW5mbywgc2l6ZW9mKHN0cnVjdCBydF9tZWFzdXJlX3JlcG9ydF9pbmZvKSk7Ci0JTmRpc1plcm9NZW1vcnkocE1lYXN1cmVSZXBvcnRJbmZvLCBzaXplb2Yoc3RydWN0IHJ0X21lYXN1cmVfcnBpX3JlcG9ydCkpOwotCWlmIChQZWVyTWVhc3VyZVJlcG9ydFNhbml0eQotCSAgICAocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgJkRpYWxvZ1Rva2VuLCAmTWVhc3VyZVJlcG9ydEluZm8sCi0JICAgICBwTWVhc3VyZVJlcG9ydEluZm8pKSB7Ci0JCWRvIHsKLQkJCXN0cnVjdCBydF9tZWFzdXJlX3JlcV9lbnRyeSAqcEVudHJ5ID0gTlVMTDsKLQotCQkJLyogTm90IGEgYXV0b25vbW91cyBtZWFzdXJlIHJlcG9ydC4gKi8KLQkJCS8qIGNoZWNrIHRoZSBkaWFsb2cgdG9rZW4gZmllbGQuIGRyb3AgaXQgaWYgdGhlIGRpYWxvZyB0b2tlbiBkb2Vzbid0IG1hdGNoLiAqLwotCQkJaWYgKChEaWFsb2dUb2tlbiAhPSAwKQotCQkJICAgICYmICgocEVudHJ5ID0gTWVhc3VyZVJlcUxvb2tVcChwQWQsIERpYWxvZ1Rva2VuKSkgPT0KLQkJCQlOVUxMKSkKLQkJCQlicmVhazsKLQotCQkJaWYgKHBFbnRyeSAhPSBOVUxMKQotCQkJCU1lYXN1cmVSZXFEZWxldGUocEFkLCBwRW50cnktPkRpYWxvZ1Rva2VuKTsKLQotCQkJaWYgKE1lYXN1cmVSZXBvcnRJbmZvLlJlcG9ydFR5cGUgPT0gUk1fQkFTSUMpIHsKLQkJCQlzdHJ1Y3QgcnRfbWVhc3VyZV9iYXNpY19yZXBvcnQgKiBwQmFzaWNSZXBvcnQgPQotCQkJCSAgICAoc3RydWN0IHJ0X21lYXN1cmVfYmFzaWNfcmVwb3J0ICopIHBNZWFzdXJlUmVwb3J0SW5mbzsKLQkJCQlpZiAoKHBCYXNpY1JlcG9ydC0+TWFwLmZpZWxkLlJhZGFyKQotCQkJCSAgICAmJgotCQkJCSAgICAoRGZzUmVxdWlyZW1lbnRDaGVjawotCQkJCSAgICAgKHBBZCwgcEJhc2ljUmVwb3J0LT5DaE51bSkgPT0gVFJVRSkpIHsKLQkJCQkJTm90aWZ5Q2hTd0FublRvUGVlckFQcyhwQWQsCi0JCQkJCQkJICAgICAgIHBGci0+SGRyLkFkZHIxLAotCQkJCQkJCSAgICAgICBwRnItPkhkci5BZGRyMiwKLQkJCQkJCQkgICAgICAgMSwKLQkJCQkJCQkgICAgICAgcEJhc2ljUmVwb3J0LT4KLQkJCQkJCQkgICAgICAgQ2hOdW0pOwotCQkJCQlTdGFydERGU1Byb2NlZHVyZShwQWQsCi0JCQkJCQkJICBwQmFzaWNSZXBvcnQtPkNoTnVtLAotCQkJCQkJCSAgMSk7Ci0JCQkJfQotCQkJfQotCQl9IHdoaWxlIChGQUxTRSk7Ci0JfSBlbHNlCi0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiSW52YWxpZCBNZWFzdXJlbWVudCBSZXBvcnQgRnJhbWUuXG4iKSk7Ci0KLQlrZnJlZShwTWVhc3VyZVJlcG9ydEluZm8pOwotCi0JcmV0dXJuOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JCVRQQyBSZXF1ZXN0IGFjdGlvbiBmcmFtZSBoYW5kbGVyLgotCi0JUGFyYW1ldHJzOgotCQlFbG1lIC0gTUxNRSBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHJlY2VpdmVkIGZyYW1lCi0KLQlSZXR1cm4JOiBOb25lLgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXN0YXRpYyB2b2lkIFBlZXJUcGNSZXFBY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKQotewotCXN0cnVjdCBydF9mcmFtZV84MDJfMTEgKiBwRnIgPSAoc3RydWN0IHJ0X2ZyYW1lXzgwMl8xMSAqKSBFbGVtLT5Nc2c7Ci0JdTggKnBGcmFtZVB0ciA9IHBGci0+T2N0ZXQ7Ci0JdTggRGlhbG9nVG9rZW47Ci0JdTggVHhQd3IgPSBHZXRDdXJUeFB3cihwQWQsIEVsZW0tPldjaWQpOwotCXU4IExpbmtNYXJnaW4gPSAwOwotCWNoYXIgUmVhbFJzc2k7Ci0KLQkvKiBsaW5rIG1hcmdpbjogUmF0aW8gb2YgdGhlIHJlY2VpdmVkIHNpZ25hbCBwb3dlciB0byB0aGUgbWluaW11bSBkZXNpcmVkIGJ5IHRoZSBzdGF0aW9uIChTVEEpLiBUaGUgKi8KLQkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUQSBtYXkgaW5jb3Jwb3JhdGUgcmF0ZSBpbmZvcm1hdGlvbiBhbmQgY2hhbm5lbCBjb25kaXRpb25zLCBpbmNsdWRpbmcgaW50ZXJmZXJlbmNlLCBpbnRvIGl0cyBjb21wdXRhdGlvbiAqLwotCS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgbGluayBtYXJnaW4uICovCi0KLQlSZWFsUnNzaSA9IFJUTVBNYXhSc3NpKHBBZCwgQ29udmVydFRvUnNzaShwQWQsIEVsZW0tPlJzc2kwLCBSU1NJXzApLAotCQkJICAgICAgIENvbnZlcnRUb1Jzc2kocEFkLCBFbGVtLT5Sc3NpMSwgUlNTSV8xKSwKLQkJCSAgICAgICBDb252ZXJ0VG9Sc3NpKHBBZCwgRWxlbS0+UnNzaTIsIFJTU0lfMikpOwotCi0JLyogc2tpcCBDYXRlZ29yeSBhbmQgYWN0aW9uIGNvZGUuICovCi0JcEZyYW1lUHRyICs9IDI7Ci0KLQkvKiBEaWFsb2cgdG9rZW4uICovCi0JTmRpc01vdmVNZW1vcnkoJkRpYWxvZ1Rva2VuLCBwRnJhbWVQdHIsIDEpOwotCi0JTGlua01hcmdpbiA9IChSZWFsUnNzaSAvIE1JTl9SQ1ZfUFdSKTsKLQlpZiAoUGVlclRwY1JlcVNhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuLCAmRGlhbG9nVG9rZW4pKQotCQlFbnF1ZXVlVFBDUmVwKHBBZCwgcEZyLT5IZHIuQWRkcjIsIERpYWxvZ1Rva2VuLCBUeFB3ciwKLQkJCSAgICAgIExpbmtNYXJnaW4pOwotCi0JcmV0dXJuOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JCVRQQyBSZXBvcnQgYWN0aW9uIGZyYW1lIGhhbmRsZXIuCi0KLQlQYXJhbWV0cnM6Ci0JCUVsbWUgLSBNTE1FIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgcmVjZWl2ZWQgZnJhbWUKLQotCVJldHVybgk6IE5vbmUuCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotc3RhdGljIHZvaWQgUGVlclRwY1JlcEFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pCi17Ci0JdTggRGlhbG9nVG9rZW47Ci0Jc3RydWN0IHJ0X3RwY19yZXBvcnRfaW5mbyBUcGNSZXBJbmZvOwotCXN0cnVjdCBydF90cGNfcmVxX2VudHJ5ICpwRW50cnkgPSBOVUxMOwotCi0JTmRpc1plcm9NZW1vcnkoJlRwY1JlcEluZm8sIHNpemVvZihzdHJ1Y3QgcnRfdHBjX3JlcG9ydF9pbmZvKSk7Ci0JaWYgKFBlZXJUcGNSZXBTYW5pdHkKLQkgICAgKHBBZCwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4sICZEaWFsb2dUb2tlbiwgJlRwY1JlcEluZm8pKSB7Ci0JCXBFbnRyeSA9IFRwY1JlcUxvb2tVcChwQWQsIERpYWxvZ1Rva2VuKTsKLQkJaWYgKHBFbnRyeSAhPSBOVUxMKSB7Ci0JCQlUcGNSZXFEZWxldGUocEFkLCBwRW50cnktPkRpYWxvZ1Rva2VuKTsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAoIiVzOiBEaWFsb2dUb2tlbj0leCwgVHhQd3I9JWQsIExpbmtNYXJnaW49JWRcbiIsCi0JCQkJICBfX2Z1bmNfXywgRGlhbG9nVG9rZW4sIFRwY1JlcEluZm8uVHhQd3IsCi0JCQkJICBUcGNSZXBJbmZvLkxpbmtNYXJnaW4pKTsKLQkJfQotCX0KLQotCXJldHVybjsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlTcGVjdHJ1biBhY3Rpb24gZnJhbWVzIEhhbmRsZXIgc3VjaCBhcyBjaGFubmVsIHN3aXRjaCBhbm5vdWNlbWVudCwKLQkJbWVhc3VyZW1lbnQgcmVwb3J0LCBtZWFzdXJlbWVudCByZXF1ZXN0IGFjdGlvbnMgZnJhbWVzLgotCi0JUGFyYW1ldHJzOgotCQlFbG1lIC0gTUxNRSBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHJlY2VpdmVkIGZyYW1lCi0KLQlSZXR1cm4JOiBOb25lLgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgUGVlclNwZWN0cnVtQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSkKLXsKLQotCXU4IEFjdGlvbiA9IEVsZW0tPk1zZ1tMRU5HVEhfODAyXzExICsgMV07Ci0KLQlpZiAocEFkLT5Db21tb25DZmcuYklFRUU4MDIxMUggIT0gVFJVRSkKLQkJcmV0dXJuOwotCi0Jc3dpdGNoIChBY3Rpb24pIHsKLQljYXNlIFNQRUNfTVJROgotCQkvKiBjdXJyZW50IHJ0Mjg2MCB1bmFibGUgZG8gc3VjaCBtZWFzdXJlIHNwZWNpZmllZCBpbiBNZWFzdXJlbWVudCBSZXF1ZXN0LiAqLwotCQkvKiByZWplY3QgYWxsIG1lYXN1cmVtZW50IHJlcXVlc3QuICovCi0JCVBlZXJNZWFzdXJlUmVxQWN0aW9uKHBBZCwgRWxlbSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBTUEVDX01SUDoKLQkJUGVlck1lYXN1cmVSZXBvcnRBY3Rpb24ocEFkLCBFbGVtKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNQRUNfVFBDUlE6Ci0JCVBlZXJUcGNSZXFBY3Rpb24ocEFkLCBFbGVtKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNQRUNfVFBDUlA6Ci0JCVBlZXJUcGNSZXBBY3Rpb24ocEFkLCBFbGVtKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNQRUNfQ0hBTk5FTF9TV0lUQ0g6Ci0KLQkJUGVlckNoU3dBbm5BY3Rpb24ocEFkLCBFbGVtKTsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0KLQlQYXJhbWV0cnM6Ci0KLQlSZXR1cm4JOiBOb25lLgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLWludCBTZXRfTWVhc3VyZVJlcV9Qcm9jKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgY2hhciAqYXJnKQotewotCXUzMiBBaWQgPSAxOwotCXUzMiBBcmdJZHg7Ci0JY2hhciAqdGhpc0NoYXI7Ci0KLQlNRUFTVVJFX1JFUV9NT0RFIE1lYXN1cmVSZXFNb2RlOwotCXU4IE1lYXN1cmVSZXFUb2tlbiA9IFJhbmRvbUJ5dGUocEFkKTsKLQl1OCBNZWFzdXJlUmVxVHlwZSA9IFJNX0JBU0lDOwotCXU4IE1lYXN1cmVDaCA9IDE7Ci0JdTY0IE1lYXN1cmVTdGFydFRpbWUgPSBHZXRDdXJyZW50VGltZVN0YW1wKHBBZCk7Ci0Jc3RydWN0IHJ0X21lYXN1cmVfcmVxIE1lYXN1cmVSZXE7Ci0JdTggVG90YWxMZW47Ci0KLQlzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSBBY3RIZHI7Ci0JdTggKnBPdXRCdWZmZXIgPSBOVUxMOwotCWludCBOU3RhdHVzOwotCXVuc2lnbmVkIGxvbmcgRnJhbWVMZW47Ci0KLQlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgKHZvaWQgKikmIHBPdXRCdWZmZXIpOwkvKkdldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5ICovCi0JaWYgKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIiVzKCkgYWxsb2NhdGUgbWVtb3J5IGZhaWxlZCBcbiIsIF9fZnVuY19fKSk7Ci0JCWdvdG8gRU5EX09GX01FQVNVUkVfUkVROwotCX0KLQotCUFyZ0lkeCA9IDE7Ci0Jd2hpbGUgKCh0aGlzQ2hhciA9IHN0cnNlcCgoY2hhciAqKikmYXJnLCAiLSIpKSAhPSBOVUxMKSB7Ci0JCXN3aXRjaCAoQXJnSWR4KSB7Ci0JCWNhc2UgMToJLyogQWlkLiAqLwotCQkJQWlkID0gKHU4KXNpbXBsZV9zdHJ0b2wodGhpc0NoYXIsIDAsIDE2KTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgMjoJLyogTWVhc3VyZW1lbnQgUmVxdWVzdCBUeXBlLiAqLwotCQkJTWVhc3VyZVJlcVR5cGUgPSBzaW1wbGVfc3RydG9sKHRoaXNDaGFyLCAwLCAxNik7Ci0JCQlpZiAoTWVhc3VyZVJlcVR5cGUgPiAzKSB7Ci0JCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkJCSAoIiVzOiB1bmtub3cgTWVhc3VyZVJlcVR5cGUoJWQpXG4iLAotCQkJCQkgIF9fZnVuY19fLCBNZWFzdXJlUmVxVHlwZSkpOwotCQkJCWdvdG8gRU5EX09GX01FQVNVUkVfUkVROwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSAzOgkvKiBNZWFzdXJlbWVudCBjaGFubmVsLiAqLwotCQkJTWVhc3VyZUNoID0gKHU4KXNpbXBsZV9zdHJ0b2wodGhpc0NoYXIsIDAsIDE2KTsKLQkJCWJyZWFrOwotCQl9Ci0JCUFyZ0lkeCsrOwotCX0KLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCIlczo6QWlkID0gJWQsIE1lYXN1cmVSZXFUeXBlPSVkIE1lYXN1cmVDaD0lZFxuIiwgX19mdW5jX18sCi0JCSAgQWlkLCBNZWFzdXJlUmVxVHlwZSwgTWVhc3VyZUNoKSk7Ci0JaWYgKCFWQUxJRF9XQ0lEKEFpZCkpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkgKCIlczogdW5rbm93IHN0YSBvZiBBaWQoJWQpXG4iLCBfX2Z1bmNfXywgQWlkKSk7Ci0JCWdvdG8gRU5EX09GX01FQVNVUkVfUkVROwotCX0KLQotCU1lYXN1cmVSZXFNb2RlLndvcmQgPSAwOwotCU1lYXN1cmVSZXFNb2RlLmZpZWxkLkVuYWJsZSA9IDE7Ci0KLQlNZWFzdXJlUmVxSW5zZXJ0KHBBZCwgTWVhc3VyZVJlcVRva2VuKTsKLQotCS8qIGJ1aWxkIGFjdGlvbiBmcmFtZSBoZWFkZXIuICovCi0JTWd0TWFjSGVhZGVySW5pdChwQWQsICZBY3RIZHIsIFNVQlRZUEVfQUNUSU9OLCAwLAotCQkJIHBBZC0+TWFjVGFiLkNvbnRlbnRbQWlkXS5BZGRyLCBwQWQtPkN1cnJlbnRBZGRyZXNzKTsKLQotCU5kaXNNb3ZlTWVtb3J5KHBPdXRCdWZmZXIsIChjaGFyICopJiBBY3RIZHIsIHNpemVvZihzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSkpOwotCUZyYW1lTGVuID0gc2l6ZW9mKHN0cnVjdCBydF9oZWFkZXJfODAyXzExKTsKLQotCVRvdGFsTGVuID0gc2l6ZW9mKHN0cnVjdCBydF9tZWFzdXJlX3JlcV9pbmZvKSArIHNpemVvZihzdHJ1Y3QgcnRfbWVhc3VyZV9yZXEpOwotCi0JTWFrZU1lYXN1cmVtZW50UmVxRnJhbWUocEFkLCBwT3V0QnVmZmVyLCAmRnJhbWVMZW4sCi0JCQkJc2l6ZW9mKHN0cnVjdCBydF9tZWFzdXJlX3JlcV9pbmZvKSwgQ0FURUdPUllfUk0sIFJNX0JBU0lDLAotCQkJCU1lYXN1cmVSZXFUb2tlbiwgTWVhc3VyZVJlcU1vZGUud29yZCwKLQkJCQlNZWFzdXJlUmVxVHlwZSwgMCk7Ci0KLQlNZWFzdXJlUmVxLkNoTnVtID0gTWVhc3VyZUNoOwotCU1lYXN1cmVSZXEuTWVhc3VyZVN0YXJ0VGltZSA9IGNwdTJsZTY0KE1lYXN1cmVTdGFydFRpbWUpOwotCU1lYXN1cmVSZXEuTWVhc3VyZUR1cmF0aW9uID0gY3B1MmxlMTYoMjAwMCk7Ci0KLQl7Ci0JCXVuc2lnbmVkIGxvbmcgVGVtcExlbjsKLQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAmVGVtcExlbiwKLQkJCQkgIHNpemVvZihzdHJ1Y3QgcnRfbWVhc3VyZV9yZXEpLCAmTWVhc3VyZVJlcSwKLQkJCQkgIEVORF9PRl9BUkdTKTsKLQkJRnJhbWVMZW4gKz0gVGVtcExlbjsKLQl9Ci0KLQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIFFJRF9BQ19CRSwgcE91dEJ1ZmZlciwgKHUzMilGcmFtZUxlbik7Ci0KLUVORF9PRl9NRUFTVVJFX1JFUToKLQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOwotCi0JcmV0dXJuIFRSVUU7Ci19Ci0KLWludCBTZXRfVHBjUmVxX1Byb2Moc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBjaGFyICphcmcpCi17Ci0JdTMyIEFpZDsKLQotCXU4IFRwY1JlcVRva2VuID0gUmFuZG9tQnl0ZShwQWQpOwotCi0JQWlkID0gKHUzMilzaW1wbGVfc3RydG9sKGFyZywgMCwgMTYpOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXM6OkFpZCA9ICVkXG4iLCBfX2Z1bmNfXywgQWlkKSk7Ci0JaWYgKCFWQUxJRF9XQ0lEKEFpZCkpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkgKCIlczogdW5rbm93IHN0YSBvZiBBaWQoJWQpXG4iLCBfX2Z1bmNfXywgQWlkKSk7Ci0JCXJldHVybiBUUlVFOwotCX0KLQotCVRwY1JlcUluc2VydChwQWQsIFRwY1JlcVRva2VuKTsKLQotCUVucXVldWVUUENSZXEocEFkLCBwQWQtPk1hY1RhYi5Db250ZW50W0FpZF0uQWRkciwgVHBjUmVxVG9rZW4pOwotCi0JcmV0dXJuIFRSVUU7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NyeXB0X2htYWMuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY3J5cHRfaG1hYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTU2NTE1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY3J5cHRfaG1hYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICBNb2R1bGUgTmFtZToKLSAgICBITUFDCi0KLSAgICBBYnN0cmFjdDoKLSAgICBGSVBTIDE5ODogVGhlIEtleWVkLUhhc2ggTWVzc2FnZSBBdXRoZW50aWNhdGlvbiBDb2RlIChITUFDKQotCi0gICAgUmV2aXNpb24gSGlzdG9yeToKLSAgICBXaG8gICAgICAgICBXaGVuICAgICAgICAgICAgV2hhdAotICAgIC0tLS0tLS0tICAgIC0tLS0tLS0tLS0gICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBFZGR5ICAgICAgICAyMDA4LzExLzI0ICAgICAgQ3JlYXRlIEhNQUMtU0hBMSwgSE1BQy1TSEEyNTYKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZm5kZWYgX19DUllQVF9ITUFDX0hfXwotI2RlZmluZSBfX0NSWVBUX0hNQUNfSF9fCi0KLSNpZmRlZiBDUllQVF9URVNUUExBTgotI2luY2x1ZGUgImNyeXB0X3Rlc3RwbGFuLmgiCi0jZWxzZQotI2luY2x1ZGUgInJ0X2NvbmZpZy5oIgotI2VuZGlmIC8qIENSWVBUX1RFU1RQTEFOICovCi0KLSNpZmRlZiBTSEExX1NVUFBPUlQKLSNkZWZpbmUgSE1BQ19TSEExX1NVUFBPUlQKLXZvaWQgSE1BQ19TSEExKElOIGNvbnN0IHU4IEtleVtdLAotCSAgICAgICB1MzIgS2V5TGVuLAotCSAgICAgICBJTiBjb25zdCB1OCBNZXNzYWdlW10sCi0JICAgICAgIHUzMiBNZXNzYWdlTGVuLCB1OCBNQUNbXSwgdTMyIE1BQ0xlbik7Ci0jZW5kaWYgLyogU0hBMV9TVVBQT1JUICovCi0KLSNpZmRlZiBNRDVfU1VQUE9SVAotI2RlZmluZSBITUFDX01ENV9TVVBQT1JUCi12b2lkIEhNQUNfTUQ1KElOIGNvbnN0IHU4IEtleVtdLAotCSAgICAgIHUzMiBLZXlMZW4sCi0JICAgICAgSU4gY29uc3QgdTggTWVzc2FnZVtdLAotCSAgICAgIHUzMiBNZXNzYWdlTGVuLCB1OCBNQUNbXSwgdTMyIE1BQ0xlbik7Ci0jZW5kaWYgLyogTUQ1X1NVUFBPUlQgKi8KLQotI2VuZGlmIC8qIF9fQ1JZUFRfSE1BQ19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY3J5cHRfbWQ1LmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NyeXB0X21kNS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmY5NzQ1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY3J5cHRfbWQ1LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFJhbGluayBUZWNoIEluYy4KLSAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKLSAqIEhzaW5jaHUgQ291bnR5IDMwMiwKLSAqIFRhaXdhbiwgUi5PLkMuCi0gKgotICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgIE1vZHVsZSBOYW1lOgotICAgIE1ENQotCi0gICAgQWJzdHJhY3Q6Ci0gICAgUkZDMTMyMTogVGhlIE1ENSBNZXNzYWdlLURpZ2VzdCBBbGdvcml0aG0KLQotICAgIFJldmlzaW9uIEhpc3Rvcnk6Ci0gICAgV2hvICAgICAgICAgV2hlbiAgICAgICAgICAgIFdoYXQKLSAgICAtLS0tLS0tLSAgICAtLS0tLS0tLS0tICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgRWRkeSAgICAgICAgMjAwOC8xMS8yNCAgICAgIENyZWF0ZSBtZDUKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBfX0NSWVBUX01ENV9IX18KLSNkZWZpbmUgX19DUllQVF9NRDVfSF9fCi0KLSNpZmRlZiBDUllQVF9URVNUUExBTgotI2luY2x1ZGUgImNyeXB0X3Rlc3RwbGFuLmgiCi0jZWxzZQotI2luY2x1ZGUgInJ0X2NvbmZpZy5oIgotI2VuZGlmIC8qIENSWVBUX1RFU1RQTEFOICovCi0KLS8qIEFsZ29yaXRobSBvcHRpb25zICovCi0jZGVmaW5lIE1ENV9TVVBQT1JUCi0KLSNpZmRlZiBNRDVfU1VQUE9SVAotI2RlZmluZSBNRDVfQkxPQ0tfU0laRSAgICA2NAkvKiA1MTIgYml0cyA9IDY0IGJ5dGVzICovCi0jZGVmaW5lIE1ENV9ESUdFU1RfU0laRSAgIDE2CS8qIDEyOCBiaXRzID0gMTYgYnl0ZXMgKi8KLQotc3RydWN0IHJ0X21kNV9jdHhfc3RydWMgewotCXUzMiBIYXNoVmFsdWVbNF07Ci0JdTY0IE1lc3NhZ2VMZW47Ci0JdTggQmxvY2tbTUQ1X0JMT0NLX1NJWkVdOwotCXUzMiBCbG9ja0xlbjsKLX07Ci0KLXZvaWQgTUQ1X0luaXQoc3RydWN0IHJ0X21kNV9jdHhfc3RydWMgKnBNRDVfQ1RYKTsKLXZvaWQgTUQ1X0hhc2goc3RydWN0IHJ0X21kNV9jdHhfc3RydWMgKnBNRDVfQ1RYKTsKLXZvaWQgTUQ1X0FwcGVuZChzdHJ1Y3QgcnRfbWQ1X2N0eF9zdHJ1YyAqcE1ENV9DVFgsCi0JCUlOIGNvbnN0IHU4IE1lc3NhZ2VbXSwgdTMyIE1lc3NhZ2VMZW4pOwotdm9pZCBNRDVfRW5kKHN0cnVjdCBydF9tZDVfY3R4X3N0cnVjICpwTUQ1X0NUWCwgdTggRGlnZXN0TWVzc2FnZVtdKTsKLXZvaWQgUlRfTUQ1KElOIGNvbnN0IHU4IE1lc3NhZ2VbXSwKLQkgICAgdTMyIE1lc3NhZ2VMZW4sIHU4IERpZ2VzdE1lc3NhZ2VbXSk7Ci0jZW5kaWYgLyogTUQ1X1NVUFBPUlQgKi8KLQotI2VuZGlmIC8qIF9fQ1JZUFRfTUQ1X0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jcnlwdF9zaGEyLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NyeXB0X3NoYTIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBkMTFhYi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NyeXB0X3NoYTIuaAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUmFsaW5rIFRlY2ggSW5jLgotICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAotICogSHNpbmNodSBDb3VudHkgMzAyLAotICogVGFpd2FuLCBSLk8uQy4KLSAqCi0gKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAgTW9kdWxlIE5hbWU6Ci0gICAgU0hBMgotCi0gICAgQWJzdHJhY3Q6Ci0gICAgRklQUyAxODAtMjogU2VjdXJlIEhhc2ggU3RhbmRhcmQgKFNIUykKLQotICAgIFJldmlzaW9uIEhpc3Rvcnk6Ci0gICAgV2hvICAgICAgICAgV2hlbiAgICAgICAgICAgIFdoYXQKLSAgICAtLS0tLS0tLSAgICAtLS0tLS0tLS0tICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgRWRkeSAgICAgICAgMjAwOC8xMS8yNCAgICAgIENyZWF0ZSBTSEExCi0gICAgRWRkeSAgICAgICAgMjAwOC8wNy8yMyAgICAgIENyZWF0ZSBTSEEyNTYKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBfX0NSWVBUX1NIQTJfSF9fCi0jZGVmaW5lIF9fQ1JZUFRfU0hBMl9IX18KLQotI2lmZGVmIENSWVBUX1RFU1RQTEFOCi0jaW5jbHVkZSAiY3J5cHRfdGVzdHBsYW4uaCIKLSNlbHNlCi0jaW5jbHVkZSAicnRfY29uZmlnLmgiCi0jZW5kaWYgLyogQ1JZUFRfVEVTVFBMQU4gKi8KLQotLyogQWxnb3JpdGhtIG9wdGlvbnMgKi8KLSNkZWZpbmUgU0hBMV9TVVBQT1JUCi0KLSNpZmRlZiBTSEExX1NVUFBPUlQKLSNkZWZpbmUgU0hBMV9CTE9DS19TSVpFICAgIDY0CS8qIDUxMiBiaXRzID0gNjQgYnl0ZXMgKi8KLSNkZWZpbmUgU0hBMV9ESUdFU1RfU0laRSAgIDIwCS8qIDE2MCBiaXRzID0gMjAgYnl0ZXMgKi8KLXN0cnVjdCBydF9zaGExX2N0eCB7Ci0JdTMyIEhhc2hWYWx1ZVs1XTsJLyogNSA9IChTSEExX0RJR0VTVF9TSVpFIC8gMzIpICovCi0JdTY0IE1lc3NhZ2VMZW47CS8qIHRvdGFsIHNpemUgKi8KLQl1OCBCbG9ja1tTSEExX0JMT0NLX1NJWkVdOwotCXUzMiBCbG9ja0xlbjsKLX07Ci0KLXZvaWQgUlRfU0hBMV9Jbml0KHN0cnVjdCBydF9zaGExX2N0eCAqcFNIQV9DVFgpOwotdm9pZCBTSEExX0hhc2goc3RydWN0IHJ0X3NoYTFfY3R4ICpwU0hBX0NUWCk7Ci12b2lkIFNIQTFfQXBwZW5kKHN0cnVjdCBydF9zaGExX2N0eCAqcFNIQV9DVFgsCi0JCSBJTiBjb25zdCB1OCBNZXNzYWdlW10sIHUzMiBNZXNzYWdlTGVuKTsKLXZvaWQgU0hBMV9FbmQoc3RydWN0IHJ0X3NoYTFfY3R4ICpwU0hBX0NUWCwgdTggRGlnZXN0TWVzc2FnZVtdKTsKLXZvaWQgUlRfU0hBMShJTiBjb25zdCB1OCBNZXNzYWdlW10sCi0JICAgICB1MzIgTWVzc2FnZUxlbiwgdTggRGlnZXN0TWVzc2FnZVtdKTsKLSNlbmRpZiAvKiBTSEExX1NVUFBPUlQgKi8KLQotI2VuZGlmIC8qIF9fQ1JZUFRfU0hBMl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvZGZzLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2Rmcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmJhYjI1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvZGZzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFJhbGluayBUZWNoIEluYy4KLSAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKLSAqIEhzaW5jaHUgQ291bnR5IDMwMiwKLSAqIFRhaXdhbiwgUi5PLkMuCi0gKgotICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotICAgIE1vZHVsZSBOYW1lOgotICAgIGRmcy5oCi0KLSAgICBBYnN0cmFjdDoKLSAgICBTdXBwb3J0IERGUyBmdW5jdGlvbi4KLQotICAgIFJldmlzaW9uIEhpc3Rvcnk6Ci0gICAgV2hvICAgICAgIFdoZW4gICAgICAgICAgICBXaGF0Ci0gICAgLS0tLS0tLS0gIC0tLS0tLS0tLS0gICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgRm9uY2hpICAgIDAzLTEyLTIwMDcgICAgICBjcmVhdGVkCi0qLwotCi1CT09MRUFOIFJhZGFyQ2hhbm5lbENoZWNrKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggQ2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9lZXByb20uaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvZWVwcm9tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyYzhmYjkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9lZXByb20uaAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUmFsaW5rIFRlY2ggSW5jLgotICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAotICogSHNpbmNodSBDb3VudHkgMzAyLAotICogVGFpd2FuLCBSLk8uQy4KLSAqCi0gKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0JTW9kdWxlIE5hbWU6Ci0JZWVwcm9tLmgKLQotCUFic3RyYWN0OgotCU1pbmlwb3J0IGhlYWRlciBmaWxlIGZvciBlZXByb20gcmVsYXRlZCBpbmZvcm1hdGlvbgotCi0JUmV2aXNpb24gSGlzdG9yeToKLQlXaG8gICAgICAgICBXaGVuICAgICAgICAgIFdoYXQKLQktLS0tLS0tLSAgICAtLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSovCi0jaWZuZGVmIF9fRUVQUk9NX0hfXwotI2RlZmluZSBfX0VFUFJPTV9IX18KLQotI2lmZGVmIFJUTVBfUENJX1NVUFBPUlQKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICoJUHVibGljIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBmb3IgcHJvbS1iYXNlZCBjaGlwc2V0Ci0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludCBydG1wX2VlX3Byb21fcmVhZDE2KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCXUxNiBPZmZzZXQsIHUxNiAqcFZhbHVlKTsKLSNlbmRpZiAvKiBSVE1QX1BDSV9TVVBQT1JUIC8vICovCi0jaWZkZWYgUlRNUF9VU0JfU1VQUE9SVAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgKglQdWJsaWMgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGZvciB1c2ItYmFzZWQgcHJvbSBjaGlwc2V0Ci0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludCBSVFVTQlJlYWRFRVBST00xNihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICB1MTYgb2Zmc2V0LCB1MTYgKnBEYXRhKTsKLSNlbmRpZiAvKiBSVE1QX1VTQl9TVVBQT1JUIC8vICovCi0KLSNpZmRlZiBSVDMweHgKLSNpZmRlZiBSVE1QX0VGVVNFX1NVUFBPUlQKLWludCBydG1wX2VlX2VmdXNlX3JlYWQxNihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgdTE2IE9mZnNldCwgdTE2ICpwVmFsdWUpOwotI2VuZGlmIC8qIFJUTVBfRUZVU0VfU1VQUE9SVCAvLyAqLwotI2VuZGlmIC8qIFJUMzB4eCAvLyAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqCVB1YmxpYyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgZm9yIHByb20gb3BlcmF0aW9uIGNhbGxiYWNrIGZ1bmN0aW9ucyBzZXR0aW5nCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludCBSdG1wQ2hpcE9wc0VlcHJvbUhvb2soc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBpbnQgaW5mVHlwZSk7Ci0KLSNlbmRpZiAvKiBfX0VFUFJPTV9IX18gLy8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvaWZhY2UvcnRtcF9wY2kuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvaWZhY2UvcnRtcF9wY2kuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Q2NmUzOC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2lmYWNlL3J0bXBfcGNpLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFJhbGluayBUZWNoIEluYy4KLSAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKLSAqIEhzaW5jaHUgQ291bnR5IDMwMiwKLSAqIFRhaXdhbiwgUi5PLkMuCi0gKgotICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSovCi0KLSNpZm5kZWYgX19SVE1QX1BDSV9IX18KLSNkZWZpbmUgX19SVE1QX1BDSV9IX18KLQotI2RlZmluZSBSVDI4WFhfSEFORExFX0RFVl9BU1NJR04oaGFuZGxlLCBkZXZfcCkJCQkJXAotCSgoc3RydWN0IG9zX2Nvb2tpZSAqKWhhbmRsZSktPnBjaV9kZXYgPSBkZXZfcDsKLQotI2lmZGVmIExJTlVYCi0vKiBzZXQgZHJpdmVyIGRhdGEgKi8KLSNkZWZpbmUgUlQyOFhYX0RSVkRBVEFfU0VUKF9hKQkJCXBjaV9zZXRfZHJ2ZGF0YShfYSwgbmV0X2Rldik7Ci0KLSNkZWZpbmUgUlQyOFhYX1BVVF9ERVZJQ0UoZGV2X3ApCi0KLSNkZWZpbmUgU0FfU0hJUlEgSVJRRl9TSEFSRUQKLQotI2lmZGVmIFBDSV9NU0lfU1VQUE9SVAotI2RlZmluZSBSVE1QX01TSV9FTkFCTEUoX3BBZCkgXAotCXsgICAgIHN0cnVjdCBvc19jb29raWUgKl9wT2JqID0gKHN0cnVjdCBvc19jb29raWUgKikoX3BBZC0+T1NfQ29va2llKTsgXAotCQkoX3BBZCktPkhhdmVNc2kgPSBwY2lfZW5hYmxlX21zaShfcE9iai0+cGNpX2RldikgXAotCQkJCQkJCT09IDAgPyBUUlVFIDogRkFMU0U7IFwKLQl9Ci0KLSNkZWZpbmUgUlRNUF9NU0lfRElTQUJMRShfcEFkKSBcCi0JeyAgICAgc3RydWN0IG9zX2Nvb2tpZSAqX3BPYmogPSAoc3RydWN0IG9zX2Nvb2tpZSAqKShfcEFkLT5PU19Db29raWUpOyBcCi0JCWlmIChfcEFkLT5IYXZlTXNpID09IFRSVUUpIFwKLQkJCXBjaV9kaXNhYmxlX21zaShfcE9iai0+cGNpX2Rldik7IFwKLQkJX3BBZC0+SGF2ZU1zaSA9IEZBTFNFOyAgXAotCX0KLSNlbHNlCi0jZGVmaW5lIFJUTVBfTVNJX0VOQUJMRShfcEFkKQkJZG8ge30gd2hpbGUgKDApCi0jZGVmaW5lIFJUTVBfTVNJX0RJU0FCTEUoX3BBZCkJCWRvIHt9IHdoaWxlICgwKQotI2VuZGlmIC8qIFBDSV9NU0lfU1VQUE9SVCAqLwotCi0jZGVmaW5lIFJUTVBfUENJX0RFVl9VTk1BUCgpCQkJCQkJXAotewlpZiAobmV0X2Rldi0+YmFzZV9hZGRyKQl7CQkJCQlcCi0JCWlvdW5tYXAoKHZvaWQgKikobmV0X2Rldi0+YmFzZV9hZGRyKSk7CQkJXAotCQlyZWxlYXNlX21lbV9yZWdpb24ocGNpX3Jlc291cmNlX3N0YXJ0KGRldl9wLCAwKSwJXAotCQkJCQlwY2lfcmVzb3VyY2VfbGVuKGRldl9wLCAwKSk7IH0gXAotCWlmIChuZXRfZGV2LT5pcnEpIFwKLQkJcGNpX3JlbGVhc2VfcmVnaW9ucyhkZXZfcCk7IH0KLQotI2RlZmluZSBQQ0lfUkVHX1JFQURfV09SRChwY2lfZGV2LCBvZmZzZXQsIENvbmZpZ3VyYXRpb24pICAge1wKLQlpZiAocGNpX3JlYWRfY29uZmlnX3dvcmQocGNpX2Rldiwgb2Zmc2V0LCAmcmVnMTYpID09IDApICAgICBcCi0JCUNvbmZpZ3VyYXRpb24gPSBsZTJjcHUxNihyZWcxNik7ICAgICAgICAgICAgICAgICAgICAgICAgXAotCWVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJQ29uZmlndXJhdGlvbiA9IDA7IH0KLQotI2RlZmluZSBQQ0lfUkVHX1dJUlRFX1dPUkQocGNpX2Rldiwgb2Zmc2V0LCBDb25maWd1cmF0aW9uKSAge1wKLQlyZWcxNiA9IGNwdTJsZTE2KENvbmZpZ3VyYXRpb24pOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGNpX2Rldiwgb2Zmc2V0LCByZWcxNik7IH0KLQotI2VuZGlmIC8qIExJTlVYICovCi0KLSNlbmRpZiAvKiBfX1JUTVBfUENJX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9pZmFjZS9ydG1wX3VzYi5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9pZmFjZS9ydG1wX3VzYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzEyODk2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvaWZhY2UvcnRtcF91c2IuaAorKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFJhbGluayBUZWNoIEluYy4KLSAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKLSAqIEhzaW5jaHUgQ291bnR5IDMwMiwKLSAqIFRhaXdhbiwgUi5PLkMuCi0gKgotICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSovCi0KLSNpZm5kZWYgX19SVE1QX1VTQl9IX18KLSNkZWZpbmUgX19SVE1QX1VTQl9IX18KLQotI2luY2x1ZGUgIi4uL3J0dXNiX2lvLmgiCi0KLSNpZmRlZiBMSU5VWAotI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotI2VuZGlmIC8qIExJTlVYICovCi0KLWV4dGVybiB1OCBFcFRvUXVldWVbNl07Ci0KLSNkZWZpbmUgUlhCVUxLQUdHUkVfWklTRQkJCTEyCi0jZGVmaW5lIE1BWF9UWEJVTEtfTElNSVQJCShMT0NBTF9UWEJVRl9TSVpFKihCVUxLQUdHUkVfWklTRS0xKSkKLSNkZWZpbmUgTUFYX1RYQlVMS19TSVpFCQkoTE9DQUxfVFhCVUZfU0laRSpCVUxLQUdHUkVfWklTRSkKLSNkZWZpbmUgTUFYX1JYQlVMS19TSVpFCQkoTE9DQUxfVFhCVUZfU0laRSpSWEJVTEtBR0dSRV9aSVNFKQotI2RlZmluZSBNQVhfTUxNRV9IQU5ETEVSX01FTU9SWSAyMAotCi0vKiBGbGFncyBmb3IgQnVsa2ZsYWdzIGNvbnRyb2wgZm9yIGJ1bGsgb3V0IGRhdGEgKi8KLSNkZWZpbmUJZlJUVVNCX0JVTEtfT1VUX0RBVEFfTlVMTAkJCQkweDAwMDAwMDAxCi0jZGVmaW5lCWZSVFVTQl9CVUxLX09VVF9SVFMJCQkJCTB4MDAwMDAwMDIKLSNkZWZpbmUJZlJUVVNCX0JVTEtfT1VUX01MTUUJCQkJCTB4MDAwMDAwMDQKLQotI2RlZmluZQlmUlRVU0JfQlVMS19PVVRfUFNQT0xMCQkJCTB4MDAwMDAwMTAKLSNkZWZpbmUJZlJUVVNCX0JVTEtfT1VUX0RBVEFfRlJBRwkJCQkweDAwMDAwMDIwCi0jZGVmaW5lCWZSVFVTQl9CVUxLX09VVF9EQVRBX0ZSQUdfMgkJCTB4MDAwMDAwNDAKLSNkZWZpbmUJZlJUVVNCX0JVTEtfT1VUX0RBVEFfRlJBR18zCQkJMHgwMDAwMDA4MAotI2RlZmluZQlmUlRVU0JfQlVMS19PVVRfREFUQV9GUkFHXzQJCQkweDAwMDAwMTAwCi0KLSNkZWZpbmUJZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMCQkJMHgwMDAxMDAwMAotI2RlZmluZQlmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUxfMgkJCTB4MDAwMjAwMDAKLSNkZWZpbmUJZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMXzMJCQkweDAwMDQwMDAwCi0jZGVmaW5lCWZSVFVTQl9CVUxLX09VVF9EQVRBX05PUk1BTF80CQkJMHgwMDA4MDAwMAotCi0vKiBUT0RPOm1vdmUgdG8gLi9hdGUvaW5jbHVkZS9pZmFjZS9hdGVfdXNiLmggKi8KLQotI2RlZmluZSBGUkVFX0hUVFhfUklORyhfcENvb2tpZSwgX3BpcGVJZCwgX3R4Q29udGV4dCkJCQlcCi17CQkJCQkJCQkJXAotCWlmICgoX3R4Q29udGV4dCktPkVOZXh0QnVsa091dFBvc2l0aW9uID09IFwKLQkoX3R4Q29udGV4dCktPkN1cldyaXRlUG9zaXRpb24pIHtcCi0JCShfdHhDb250ZXh0KS0+YlJpbmdFbXB0eSA9IFRSVUU7CQkJXAotCX0JCQkJCQkJCVwKLQkvKk5kaXNJbnRlcmxvY2tlZERlY3JlbWVudCgmKF9wKS0+VHhDb3VudCk7ICovXAotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLQlVU0IgQnVsayBvcGVyYXRpb24gcmVsYXRlZCBkZWZpbml0aW9ucwotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZmRlZiBMSU5VWAotI2RlZmluZSBCVUxLQUdHUkVfWklTRQkJCTEwMAotI2RlZmluZSBSVDI4WFhfUFVUX0RFVklDRQkJCXVzYl9wdXRfZGV2Ci0jZGVmaW5lIFJUVVNCX0FMTE9DX1VSQihpc28pCQl1c2JfYWxsb2NfdXJiKGlzbywgR0ZQX0FUT01JQykKLSNkZWZpbmUgUlRVU0JfU1VCTUlUX1VSQihwVXJiKQkJdXNiX3N1Ym1pdF91cmIocFVyYiwgXAotCQkJCQkJCQlHRlBfQVRPTUlDKQotI2RlZmluZSBSVFVTQl9VUkJfQUxMT0NfQlVGRkVSKHBVc2JfRGV2LCBcCi0JCQkJCQkJQnVmU2l6ZSwgXAotCQkJCQkJCXBEbWFfYWRkcikJXAotCQkJCQkJCXVzYl9hbGxvY19jb2hlcmVudChcCi0JCQkJCQkJcFVzYl9EZXYsIFwKLQkJCQkJCQlCdWZTaXplLCBcCi0JCQkJCQkJR0ZQX0FUT01JQywgXAotCQkJCQkJCXBEbWFfYWRkcikKLSNkZWZpbmUgUlRVU0JfVVJCX0ZSRUVfQlVGRkVSKHBVc2JfRGV2LCBcCi0JCQkJCQkJQnVmU2l6ZSwgXAotCQkJCQkJCXBUcmFuc2ZlckJ1ZiwgXAotCQkJCQkJCURtYV9hZGRyKQlcCi0JCQkJCQkJdXNiX2ZyZWVfY29oZXJlbnQoIFwKLQkJCQkJCQlwVXNiX0RldiwgXAotCQkJCQkJCUJ1ZlNpemUsIFwKLQkJCQkJCQlwVHJhbnNmZXJCdWYsIFwKLQkJCQkJCQlEbWFfYWRkcikKLQotI2RlZmluZSBSVFVTQl9GUkVFX1VSQihwVXJiKQl1c2JfZnJlZV91cmIocFVyYikKLQotLyogdW5saW5rIHVyYiAqLwotI2RlZmluZSBSVFVTQl9VTkxJTktfVVJCKHBVcmIpCQl1c2Jfa2lsbF91cmIocFVyYikKLQotZXh0ZXJuIHZvaWQgZHVtcF91cmIoc3RydWN0IHVyYiAqcHVyYik7Ci0KLSNkZWZpbmUgSW50ZXJsb2NrZWRJbmNyZW1lbnQJCWF0b21pY19pbmMKLSNkZWZpbmUgTmRpc0ludGVybG9ja2VkSW5jcmVtZW50CWF0b21pY19pbmMKLSNkZWZpbmUgSW50ZXJsb2NrZWREZWNyZW1lbnQJCWF0b21pY19kZWMKLSNkZWZpbmUgTmRpc0ludGVybG9ja2VkRGVjcmVtZW50CWF0b21pY19kZWMKLSNkZWZpbmUgSW50ZXJsb2NrZWRFeGNoYW5nZQkJYXRvbWljX3NldAotCi0jZW5kaWYgLyogTElOVVggKi8KLQotI2RlZmluZSBOVF9TVUNDRVNTKHN0YXR1cykJCSgoKHN0YXR1cykgPj0gMCkgPyAoVFJVRSkgOiAoRkFMU0UpKQotCi0jZGVmaW5lIFVTQkRfVFJBTlNGRVJfRElSRUNUSU9OX09VVAkJMAotI2RlZmluZSBVU0JEX1RSQU5TRkVSX0RJUkVDVElPTl9JTgkJMAotI2RlZmluZSBVU0JEX1NIT1JUX1RSQU5TRkVSX09LCQkJMAotI2RlZmluZSBQVVJCCQkJc3RydWN0IHVyYiAqCi0KLSNkZWZpbmUgUElSUAkJdm9pZCAqCi0jZGVmaW5lIE5ESVNfT0lECXUzMgotI2lmbmRlZiBVU0JfU1RfTk9FUlJPUgotI2RlZmluZSBVU0JfU1RfTk9FUlJPUiAgICAgMAotI2VuZGlmCi0KLS8qIHZlbmRvci1zcGVjaWZpYyBjb250cm9sIG9wZXJhdGlvbnMgKi8KLSNkZWZpbmUgQ09OVFJPTF9USU1FT1VUX0pJRkZJRVMgKCgxMDAgKiBPU19IWikgLyAxMDAwKQotI2RlZmluZSBVTkxJTktfVElNRU9VVF9NUwkJMwotCi12b2lkIFJUVVNCQnVsa091dERhdGFQYWNrZXRDb21wbGV0ZShzdHJ1Y3QgdXJiICpwdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncyk7Ci12b2lkIFJUVVNCQnVsa091dE1MTUVQYWNrZXRDb21wbGV0ZShzdHJ1Y3QgdXJiICpwVXJiLCBzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncyk7Ci12b2lkIFJUVVNCQnVsa091dE51bGxGcmFtZUNvbXBsZXRlKHN0cnVjdCB1cmIgKnBVcmIsIHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzKTsKLXZvaWQgUlRVU0JCdWxrT3V0UlRTRnJhbWVDb21wbGV0ZShzdHJ1Y3QgdXJiICpwVXJiLCBzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncyk7Ci12b2lkIFJUVVNCQnVsa091dFBzUG9sbENvbXBsZXRlKHN0cnVjdCB1cmIgKnBVcmIsIHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzKTsKLXZvaWQgUlRVU0JCdWxrUnhDb21wbGV0ZShzdHJ1Y3QgdXJiICpwVXJiLCBzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncyk7Ci0KLSNpZmRlZiBLVEhSRUFEX1NVUFBPUlQKLSNkZWZpbmUgUlRVU0JNbG1lVXAocEFkKSBcCi0JZG8gewkJCQkJCQkJICAgIFwKLQkJc3RydWN0IHJ0X3J0bXBfb3NfdGFzayAqX3BUYXNrID0gJigocEFkKS0+bWxtZVRhc2spO1wKLQkJaWYgKF9wVGFzay0+a3RocmVhZF90YXNrKSB7XAotCQkJX3BUYXNrLT5rdGhyZWFkX3J1bm5pbmcgPSBUUlVFOyBcCi0JCXdha2VfdXAoJl9wVGFzay0+a3RocmVhZF9xKTsgXAotCQl9IFwKLQl9IHdoaWxlICgwKQotI2Vsc2UKLSNkZWZpbmUgUlRVU0JNbG1lVXAocEFkKQkgICAgICAgIFwKLQlkbyB7CQkJCQkJCQkgICAgXAotCQlzdHJ1Y3QgcnRfcnRtcF9vc190YXNrICpfcFRhc2sgPSAmKChwQWQpLT5tbG1lVGFzayk7XAotCQlDSEVDS19QSURfTEVHQUxJVFkoX3BUYXNrLT50YXNrUElEKQkJICAgIFwKLQkJeyBcCi0JCQlSVE1QX1NFTV9FVkVOVF9VUCgmKF9wVGFzay0+dGFza1NlbWEpKTsgXAotCQl9IFwKLQl9IHdoaWxlICgwKQotI2VuZGlmCi0KLSNpZmRlZiBLVEhSRUFEX1NVUFBPUlQKLSNkZWZpbmUgUlRVU0JDTURVcChwQWQpIFwKLQlkbyB7CVwKLQkJc3RydWN0IHJ0X3J0bXBfb3NfdGFzayAqX3BUYXNrID0gJigocEFkKS0+Y21kUVRhc2spOwlcCi0JCXsgXAotCQkJX3BUYXNrLT5rdGhyZWFkX3J1bm5pbmcgPSBUUlVFOyBcCi0JCXdha2VfdXAoJl9wVGFzay0+a3RocmVhZF9xKTsgXAotCQl9IFwKLQl9IHdoaWxlICgwKQotCi0jZWxzZQotI2RlZmluZSBSVFVTQkNNRFVwKHBBZCkJICAgICAgICAgICAgICAgIFwKLQlkbyB7CQkJCQkJCSAgICBcCi0JCXN0cnVjdCBydF9ydG1wX29zX3Rhc2sgKl9wVGFzayA9ICYoKHBBZCktPmNtZFFUYXNrKTsJXAotCQlDSEVDS19QSURfTEVHQUxJVFkoX3BUYXNrLT50YXNrUElEKQkgICAgXAotCQl7XAotCQkJUlRNUF9TRU1fRVZFTlRfVVAoJihfcFRhc2stPnRhc2tTZW1hKSk7IFwKLQkJfSBcCi0JfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0jZGVmaW5lIERFVklDRV9WRU5ET1JfUkVRVUVTVF9PVVQgICAgICAgMHg0MAotI2RlZmluZSBERVZJQ0VfVkVORE9SX1JFUVVFU1RfSU4gICAgICAgIDB4YzAKLS8qI2RlZmluZSBJTlRFUkZBQ0VfVkVORE9SX1JFUVVFU1RfT1VUICAgIDB4NDEqLwotLyojZGVmaW5lIElOVEVSRkFDRV9WRU5ET1JfUkVRVUVTVF9JTiAgICAgMHhjMSovCi0KLSNkZWZpbmUgQlVMS09VVF9NR01UX1JFU0VUX0ZMQUcJCTB4ODAKLQotI2RlZmluZSBSVFVTQl9TRVRfQlVMS19GTEFHKF9NLCBfRikJKChfTSktPkJ1bGtGbGFncyB8PSAoX0YpKQotI2RlZmluZSBSVFVTQl9DTEVBUl9CVUxLX0ZMQUcoX00sIF9GKQkoKF9NKS0+QnVsa0ZsYWdzICY9IH4oX0YpKQotI2RlZmluZSBSVFVTQl9URVNUX0JVTEtfRkxBRyhfTSwgX0YpCSgoKF9NKS0+QnVsa0ZsYWdzICYgKF9GKSkgIT0gMCkKLQotI2RlZmluZSBSVE1QX0lSUV9SRVFVRVNUKG5ldF9kZXYpCQlkbyB7fSB3aGlsZSAoMCkKLSNkZWZpbmUgUlRNUF9JUlFfUkVMRUFTRShuZXRfZGV2KQkJZG8ge30gd2hpbGUgKDApCi0KLSNlbmRpZiAvKiBfX1JUTVBfVVNCX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9tbG1lLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL21sbWUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI4NTg1MS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL21sbWUuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNTAgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLQlNb2R1bGUgTmFtZToKLQltbG1lLmgKLQotCUFic3RyYWN0OgotCi0JUmV2aXNpb24gSGlzdG9yeToKLQlXaG8JCQlXaGVuCQkJV2hhdAotCS0tLS0tLS0tCS0tLS0tLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCUpvaG4gQ2hhbmcJCTIwMDMtMDgtMjgJCUNyZWF0ZWQKLQlKb2huIENoYW5nICAJCTIwMDQtMDktMDYgICAgICAJbW9kaWZpZWQgZm9yIFJUMjYwMAotCUp1c3RpbiBQLiBNYXR0b2NrCTExLzA3LzIwMTAJCUZpeCB0eXBvcyBpbiBjb21tZW50cwotCi0qLwotI2lmbmRlZiBfX01MTUVfSF9fCi0jZGVmaW5lIF9fTUxNRV9IX18KLQotI2luY2x1ZGUgInJ0bXBfZG90MTEuaCIKLQotLyogbWF4aW11bSBzdXBwb3J0ZWQgY2FwYWJpbGl0eSBpbmZvcm1hdGlvbiAqLwotLyogRVNTLCBJQlNTLCBQcml2YWN5LCBTaG9ydCBQcmVhbWJsZSwgU3BlY3RydW0gbWdtdCwgU2hvcnQgU2xvdCAqLwotI2RlZmluZSBTVVBQT1JURURfQ0FQQUJJTElUWV9JTkZPICAgMHgwNTMzCi0KLSNkZWZpbmUgRU5EX09GX0FSR1MgICAgICAgICAgICAgICAgIC0xCi0jZGVmaW5lIExGU1JfTUFTSyAgICAgICAgICAgICAgICAgICAweDgwMDAwMDU3Ci0jZGVmaW5lIE1MTUVfVEFTS19FWEVDX0lOVFYgICAgICAgICAxMDAvKjIwMCovCS8qICovCi0jZGVmaW5lIExFQURfVElNRSAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIE1MTUVfVEFTS19FWEVDX01VTFRJUExFICAgICAgIDEwICAvKjUqLwkvKiBNTE1FX1RBU0tfRVhFQ19NVUxUSVBMRSAqIE1MTUVfVEFTS19FWEVDX0lOVFYgPSAxIHNlYyAqLwotI2RlZmluZSBSRU9SREVSX0VYRUNfSU5UVgkJMTAwCS8qIDAuMSBzZWMgKi8KLQotLyogVGhlIGRlZmluaXRpb24gb2YgUmFkYXIgZGV0ZWN0aW9uIGR1cmF0aW9uIHJlZ2lvbiAqLwotI2RlZmluZSBDRQkJMAotI2RlZmluZSBGQ0MJCTEKLSNkZWZpbmUgSkFQCQkyCi0jZGVmaW5lIEpBUF9XNTMJMwotI2RlZmluZSBKQVBfVzU2CTQKLSNkZWZpbmUgTUFYX1JEX1JFR0lPTiA1Ci0KLSNkZWZpbmUgQkVBQ09OX0xPU1RfVElNRSAgICAgICAgICAgICg0ICogT1NfSFopCS8qIDIwNDggbXNlYyA9IDIgc2VjICovCi0KLSNkZWZpbmUgRExTX1RJTUVPVVQgICAgICAgICAgICAgICAgIDEyMDAJLyogdW5pdDogbXNlYyAqLwotI2RlZmluZSBBVVRIX1RJTUVPVVQgICAgICAgICAgICAgICAgMzAwCS8qIHVuaXQ6IG1zZWMgKi8KLSNkZWZpbmUgQVNTT0NfVElNRU9VVCAgICAgICAgICAgICAgIDMwMAkvKiB1bml0OiBtc2VjICovCi0jZGVmaW5lIEpPSU5fVElNRU9VVCAgICAgICAgICAgICAgICAyMDAwCS8qIHVuaXQ6IG1zZWMgKi8KLSNkZWZpbmUgU0hPUlRfQ0hBTk5FTF9USU1FICAgICAgICAgIDkwCS8qIHVuaXQ6IG1zZWMgKi8KLSNkZWZpbmUgTUlOX0NIQU5ORUxfVElNRSAgICAgICAgICAgIDExMAkvKiB1bml0OiBtc2VjLCBmb3IgZHVhbCBiYW5kIHNjYW4gKi8KLSNkZWZpbmUgTUFYX0NIQU5ORUxfVElNRSAgICAgICAgICAgIDE0MAkvKiB1bml0OiBtc2VjLCBmb3Igc2luZ2xlIGJhbmQgc2NhbiAqLwotI2RlZmluZQlGQVNUX0FDVElWRV9TQ0FOX1RJTUUJICAgIDMwCS8qIEFjdGl2ZSBzY2FuIHdhaXRpbmcgZm9yIHByb2JlIHJlc3BvbnNlIHRpbWUgKi8KLSNkZWZpbmUgQ1dfTUlOX0lOX0JJVFMgICAgICAgICAgICAgIDQJLyogYWN0dWFsIEN3TWluID0gMl5DV19NSU5fSU5fQklUUyAtIDEgKi8KLSNkZWZpbmUgTElOS19ET1dOX1RJTUVPVVQgICAgICAgICAgIDIwMDAwCS8qIHVuaXQ6IG1zZWMgKi8KLSNkZWZpbmUgQVVUT19XQUtFVVBfVElNRU9VVAkJCTcwCS8qdW5pdDogbXNlYyAqLwotCi0jZGVmaW5lIENXX01BWF9JTl9CSVRTICAgICAgICAgICAgICAxMAkvKiBhY3R1YWwgQ3dNYXggPSAyXkNXX01BWF9JTl9CSVRTIC0gMSAqLwotCi0vKiBOb3RlOiBSU1NJX1RPX0RCTV9PRkZTRVQgaGFzIGJlZW4gY2hhbmdlZCB0byB2YXJpYWJsZSBmb3IgbmV3IFJGICgyMDA0LTA3MjApLiAqLwotLyogU2hvdWxkIG5vdCByZWZlciB0byB0aGlzIGNvbnN0YW50IGFueW1vcmUgKi8KLS8qI2RlZmluZSBSU1NJX1RPX0RCTV9PRkZTRVQgICAgICAgICAgMTIwIC8vIGZvciBSVDI1MzAgUlNTSS0xMTUgPSBkQm0gKi8KLSNkZWZpbmUgUlNTSV9GT1JfTUlEX1RYX1BPV0VSICAgICAgIC01NQkvKiAtNTUgZGIgaXMgY29uc2lkZXJlZCBtaWQtZGlzdGFuY2UgKi8KLSNkZWZpbmUgUlNTSV9GT1JfTE9XX1RYX1BPV0VSICAgICAgIC00NQkvKiAtNDUgZGIgaXMgY29uc2lkZXJlZCB2ZXJ5IHNob3J0IGRpc3RhbmNlIGFuZCAqLwotCQkJCQkvKiBlbGlnaWJsZSB0byB1c2UgYSBsb3dlciBUWCBwb3dlciAqLwotI2RlZmluZSBSU1NJX0ZPUl9MT1dFU1RfVFhfUE9XRVIgICAgLTMwCi0vKiNkZWZpbmUgTUlEX1RYX1BPV0VSX0RFTFRBICAgICAgICAgIDAgICAvLyAwIGRiIGZyb20gZnVsbCBUWCBwb3dlciB1cG9uIG1pZC1kaXN0YW5jZSB0byBBUCAqLwotI2RlZmluZSBMT1dfVFhfUE9XRVJfREVMVEEgICAgICAgICAgNgkvKiAtMyBkYiBmcm9tIGZ1bGwgVFggcG93ZXIgdXBvbiB2ZXJ5IHNob3J0IGRpc3RhbmNlLiAxIGdyYWRlIGlzIDAuNSBkYiAqLwotI2RlZmluZSBMT1dFU1RfVFhfUE9XRVJfREVMVEEgICAgICAgMTYJLyogLTggZGIgZnJvbSBmdWxsIFRYIHBvd2VyIHVwb24gc2hvcnRlc3QgZGlzdGFuY2UuIDEgZ3JhZGUgaXMgMC41IGRiICovCi0KLSNkZWZpbmUgUlNTSV9UUklHR0VSRURfVVBPTl9CRUxPV19USFJFU0hPTEQgICAgIDAKLSNkZWZpbmUgUlNTSV9UUklHR0VSRURfVVBPTl9FWENDRUVEX1RIUkVTSE9MRCAgIDEKLSNkZWZpbmUgUlNTSV9USFJFU0hPTERfRk9SX1JPQU1JTkcgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFJTU0lfREVMVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0KLS8qIENoYW5uZWwgUXVhbGl0eSBJbmRpY2F0aW9uICovCi0jZGVmaW5lIENRSV9JU19HT09EKGNxaSkgICAgICAgICAgICAoKGNxaSkgPj0gNTApCi0vKiNkZWZpbmUgQ1FJX0lTX0ZBSVIoY3FpKSAgICAgICAgICAoKChjcWkpID49IDIwKSAmJiAoKGNxaSkgPCA1MCkpICovCi0jZGVmaW5lIENRSV9JU19QT09SKGNxaSkgICAgICAgICAgICAoY3FpIDwgNTApCS8qKCgoY3FpKSA+PSA1KSAmJiAoKGNxaSkgPCAyMCkpICovCi0jZGVmaW5lIENRSV9JU19CQUQoY3FpKSAgICAgICAgICAgICAoY3FpIDwgNSkKLSNkZWZpbmUgQ1FJX0lTX0RFQUQoY3FpKSAgICAgICAgICAgIChjcWkgPT0gMCkKLQotLyogd2VpZ2h0aW5nIGZhY3RvciB0byBjYWxjdWxhdGUgQ2hhbm5lbCBxdWFsaXR5LCB0b3RhbCBzaG91bGQgYmUgMTAwJSAqLwotI2RlZmluZSBSU1NJX1dFSUdIVElORyAgICAgICAgICAgICAgICAgICA1MAotI2RlZmluZSBUWF9XRUlHSFRJTkcgICAgICAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBSWF9XRUlHSFRJTkcgICAgICAgICAgICAgICAgICAgICAyMAotCi0jZGVmaW5lIEJTU19OT1RfRk9VTkQgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKLQotI2RlZmluZSBNQVhfTEVOX09GX01MTUVfUVVFVUUgICAgICAgICAgICA0MAkvKjEwICovCi0KLSNkZWZpbmUgU0NBTl9QQVNTSVZFICAgICAgICAgICAgICAgICAgICAgMTgJLyogc2NhbiB3aXRoIG5vIHByb2JlIHJlcXVlc3QsIG9ubHkgd2FpdCBiZWFjb24gYW5kIHByb2JlIHJlc3BvbnNlICovCi0jZGVmaW5lIFNDQU5fQUNUSVZFICAgICAgICAgICAgICAgICAgICAgIDE5CS8qIHNjYW4gd2l0aCBwcm9iZSByZXF1ZXN0LCBhbmQgd2FpdCBiZWFjb24gYW5kIHByb2JlIHJlc3BvbnNlICovCi0jZGVmaW5lCVNDQU5fQ0lTQ09fUEFTU0lWRQkJCQkgMjAJLyogU2luZ2xlIGNoYW5uZWwgcGFzc2l2ZSBzY2FuICovCi0jZGVmaW5lCVNDQU5fQ0lTQ09fQUNUSVZFCQkJCSAyMQkvKiBTaW5nbGUgY2hhbm5lbCBhY3RpdmUgc2NhbiAqLwotI2RlZmluZQlTQ0FOX0NJU0NPX05PSVNFCQkJCSAyMgkvKiBTaW5nbGUgY2hhbm5lbCBwYXNzaXZlIHNjYW4gZm9yIG5vaXNlIGhpc3RvZ3JhbSBjb2xsZWN0aW9uICovCi0jZGVmaW5lCVNDQU5fQ0lTQ09fQ0hBTk5FTF9MT0FECQkJIDIzCS8qIFNpbmdsZSBjaGFubmVsIHBhc3NpdmUgc2NhbiBmb3IgY2hhbm5lbCBsb2FkIGNvbGxlY3Rpb24gKi8KLSNkZWZpbmUgRkFTVF9TQ0FOX0FDVElWRSAgICAgICAgICAgICAgICAgMjQJLyogc2NhbiB3aXRoIHByb2JlIHJlcXVlc3QsIGFuZCB3YWl0IGJlYWNvbiBhbmQgcHJvYmUgcmVzcG9uc2UgKi8KLQotI2RlZmluZSBNQUNfQUREUl9JU19HUk9VUChBZGRyKSAgICAgICAoKChBZGRyWzBdKSAmIDB4MDEpKQotI2RlZmluZSBNQUNfQUREUl9IQVNIKEFkZHIpICAgICAgICAgICAgKEFkZHJbMF0gXiBBZGRyWzFdIF4gQWRkclsyXSBeIEFkZHJbM10gXiBBZGRyWzRdIF4gQWRkcls1XSkKLSNkZWZpbmUgTUFDX0FERFJfSEFTSF9JTkRFWChBZGRyKSAgICAgIChNQUNfQUREUl9IQVNIKEFkZHIpICUgSEFTSF9UQUJMRV9TSVpFKQotI2RlZmluZSBUSURfTUFDX0hBU0goQWRkciwgVElEKSAgICAgICAgICAgIChUSUReQWRkclswXSBeIEFkZHJbMV0gXiBBZGRyWzJdIF4gQWRkclszXSBeIEFkZHJbNF0gXiBBZGRyWzVdKQotI2RlZmluZSBUSURfTUFDX0hBU0hfSU5ERVgoQWRkciwgVElEKSAgICAgIChUSURfTUFDX0hBU0goQWRkciwgVElEKSAlIEhBU0hfVEFCTEVfU0laRSkKLQotLyogTEVEIENvbnRyb2wgKi8KLS8qIGFzc29jaWF0aW9uIE9OLiBvbmUgTEVEIE9OLiBhbm90aGVyIGJsaW5raW5nIHdoZW4gVFgsIE9GRiB3aGVuIGlkbGUgKi8KLS8qIG5vIGFzc29jaWF0aW9uLCBib3RoIExFRCBvZmYgKi8KLSNkZWZpbmUgQVNJQ19MRURfQUNUX09OKHBBZCkgICAgICAgIFJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19DU1IxNCwgMHgwMDAzMWU0NikKLSNkZWZpbmUgQVNJQ19MRURfQUNUX09GRihwQWQpICAgICAgIFJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19DU1IxNCwgMHgwMDAwMWU0NikKLQotLyogYml0IGRlZmluaXRpb24gb2YgdGhlIDItYnl0ZSBwQkVBQ09OLT5DYXBhYmlsaXR5IGZpZWxkICovCi0jZGVmaW5lIENBUF9JU19FU1NfT04oeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDAxKSAhPSAwKQotI2RlZmluZSBDQVBfSVNfSUJTU19PTih4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMikgIT0gMCkKLSNkZWZpbmUgQ0FQX0lTX0NGX1BPTExBQkxFX09OKHgpICAgICAgICAgKCgoeCkgJiAweDAwMDQpICE9IDApCi0jZGVmaW5lIENBUF9JU19DRl9QT0xMX1JFUV9PTih4KSAgICAgICAgICgoKHgpICYgMHgwMDA4KSAhPSAwKQotI2RlZmluZSBDQVBfSVNfUFJJVkFDWV9PTih4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MDAxMCkgIT0gMCkKLSNkZWZpbmUgQ0FQX0lTX1NIT1JUX1BSRUFNQkxFX09OKHgpICAgICAgKCgoeCkgJiAweDAwMjApICE9IDApCi0jZGVmaW5lIENBUF9JU19QQkNDX09OKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgwMDQwKSAhPSAwKQotI2RlZmluZSBDQVBfSVNfQUdJTElUWV9PTih4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MDA4MCkgIT0gMCkKLSNkZWZpbmUgQ0FQX0lTX1NQRUNUUlVNX01HTVQoeCkgICAgICAgICAgKCgoeCkgJiAweDAxMDApICE9IDApCS8qIDgwMi4xMWUgZDkgKi8KLSNkZWZpbmUgQ0FQX0lTX1FPUyh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAyMDApICE9IDApCS8qIDgwMi4xMWUgZDkgKi8KLSNkZWZpbmUgQ0FQX0lTX1NIT1JUX1NMT1QoeCkgICAgICAgICAgICAgKCgoeCkgJiAweDA0MDApICE9IDApCi0jZGVmaW5lIENBUF9JU19BUFNEKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwODAwKSAhPSAwKQkvKiA4MDIuMTFlIGQ5ICovCi0jZGVmaW5lIENBUF9JU19JTU1FRF9CQSh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgxMDAwKSAhPSAwKQkvKiA4MDIuMTFlIGQ5ICovCi0jZGVmaW5lIENBUF9JU19EU1NTX09GRE0oeCkgICAgICAgICAgICAgICgoKHgpICYgMHgyMDAwKSAhPSAwKQotI2RlZmluZSBDQVBfSVNfREVMQVlfQkEoeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4NDAwMCkgIT0gMCkJLyogODAyLjExZSBkOSAqLwotCi0jZGVmaW5lIENBUF9HRU5FUkFURShlc3MsIGlic3MsIHByaXYsIHNfcHJlLCBzX3Nsb3QsIHNwZWN0cnVtKSAgKCgoZXNzKSA/IDB4MDAwMSA6IDB4MDAwMCkgfCAoKGlic3MpID8gMHgwMDAyIDogMHgwMDAwKSB8ICgocHJpdikgPyAweDAwMTAgOiAweDAwMDApIHwgKChzX3ByZSkgPyAweDAwMjAgOiAweDAwMDApIHwgKChzX3Nsb3QpID8gMHgwNDAwIDogMHgwMDAwKSB8ICgoc3BlY3RydW0pID8gMHgwMTAwIDogMHgwMDAwKSkKLQotI2RlZmluZSBFUlBfSVNfTk9OX0VSUF9QUkVTRU5UKHgpICAgICAgICAoKCh4KSAmIDB4MDEpICE9IDApCS8qIDgwMi4xMWcgKi8KLSNkZWZpbmUgRVJQX0lTX1VTRV9QUk9URUNUSU9OKHgpICAgICAgICAgKCgoeCkgJiAweDAyKSAhPSAwKQkvKiA4MDIuMTFnICovCi0jZGVmaW5lIEVSUF9JU19VU0VfQkFSS0VSX1BSRUFNQkxFKHgpICAgICgoKHgpICYgMHgwNCkgIT0gMCkJLyogODAyLjExZyAqLwotCi0jZGVmaW5lIERSU19UWF9RVUFMSVRZX1dPUlNUX0JPVU5EICAgICAgIDgJLyogMyAgLy8ganVzdCB0ZXN0IGJ5IGdhcnkgKi8KLSNkZWZpbmUgRFJTX1BFTkFMVFkgICAgICAgICAgICAgICAgICAgICAgOAotCi0jZGVmaW5lIEJBX05PVFVTRQkyCi0vKkJBIFBvbGljeSBzdWJmaWxlZCB2YWx1ZSBpbiBBRERCQSBmcmFtZSAqLwotI2RlZmluZSBJTU1FRF9CQQkxCi0jZGVmaW5lIERFTEFZX0JBCTAKLQotLyogQkEgSW5pdGlhdG9yIHN1YmZpZWxkIGluIERFTEJBIGZyYW1lICovCi0jZGVmaW5lIE9SSUdJTkFUT1IJMQotI2RlZmluZSBSRUNJUElFTlQJMAotCi0vKiBBRERCQSBTdGF0dXMgQ29kZSAqLwotI2RlZmluZSBBRERCQV9SRVNVTFRDT0RFX1NVQ0NFU1MJCQkJCTAKLSNkZWZpbmUgQUREQkFfUkVTVUxUQ09ERV9SRUZVU0VECQkJCQkzNwotI2RlZmluZSBBRERCQV9SRVNVTFRDT0RFX0lOVkFMSURfUEFSQU1FVEVSUwkJCTM4Ci0KLS8qIERFTEJBIFJlYXNvbiBDb2RlICovCi0jZGVmaW5lIERFTEJBX1JFQVNPTkNPREVfUVNUQV9MRUFWSU5HCQkJCTM2Ci0jZGVmaW5lIERFTEJBX1JFQVNPTkNPREVfRU5EX0JBCQkJCQkJMzcKLSNkZWZpbmUgREVMQkFfUkVBU09OQ09ERV9VTktOT1dOX0JBCQkJCQkzOAotI2RlZmluZSBERUxCQV9SRUFTT05DT0RFX1RJTUVPVVQJCQkJCTM5Ci0KLS8qIHJlc2V0IGFsbCBPbmVTZWNUeCBjb3VudGVycyAqLwotI2RlZmluZSBSRVNFVF9PTkVfU0VDX1RYX0NOVChfX3BFbnRyeSkgXAotaWYgKCgoX19wRW50cnkpKSAhPSBOVUxMKSB7IFwKLQkoX19wRW50cnkpLT5PbmVTZWNUeFJldHJ5T2tDb3VudCA9IDA7IFwKLQkoX19wRW50cnkpLT5PbmVTZWNUeEZhaWxDb3VudCA9IDA7IFwKLQkoX19wRW50cnkpLT5PbmVTZWNUeE5vUmV0cnlPa0NvdW50ID0gMDsgXAotfQotCi0vKiAqLwotLyogODAyLjExIGZyYW1lIGZvcm1hdHMgKi8KLS8qICovCi0vKiAgSFQgQ2FwYWJpbGl0eSBJTkZPIGZpZWxkIGluIEhUIENhcCBJRSAuICovCi1zdHJ1Y3QgUEFDS0VEIHJ0X2h0X2NhcF9pbmZvIHsKLQl1MTYgQWR2Q29kaW5nOjE7Ci0JdTE2IENoYW5uZWxXaWR0aDoxOwotCXUxNiBNaW1vUHM6MjsJLyptb21pIHBvd2VyIHNhZmUgKi8KLQl1MTYgR0Y6MTsJCS8qZ3JlZW4gZmllbGQgKi8KLQl1MTYgU2hvcnRHSWZvcjIwOjE7Ci0JdTE2IFNob3J0R0lmb3I0MDoxOwkvKmZvcjQwTUh6ICovCi0JdTE2IFR4U1RCQzoxOwotCXUxNiBSeFNUQkM6MjsKLQl1MTYgRGVsYXllZEJBOjE7CS8qcnQyODYwYyBub3Qgc3VwcG9ydCAqLwotCXUxNiBBTXNkdVNpemU6MTsJLyogb25seSBzdXBwb3J0IGFzIHplcm8gKi8KLQl1MTYgQ0NLbW9kZWluNDA6MTsKLQl1MTYgUFNNUDoxOwotCXUxNiBGb3J0eV9NaHpfSW50b2xlcmFudDoxOwotCXUxNiBMU0lHVHhvcFByb1N1cDoxOwotfTsKLQotLyogIEhUIENhcGFiaWxpdHkgSU5GTyBmaWVsZCBpbiBIVCBDYXAgSUUgLiAqLwotc3RydWN0IFBBQ0tFRCBydF9odF9jYXBfcGFybSB7Ci0JdTggTWF4UkFtcGR1RmFjdG9yOjI7Ci0JdTggTXBkdURlbnNpdHk6MzsKLQl1OCByc3Y6MzsJCS8qbW9taSBwb3dlciBzYWZlICovCi19OwotCi0vKiAgSFQgQ2FwYWJpbGl0eSBJTkZPIGZpZWxkIGluIEhUIENhcCBJRSAuICovCi1zdHJ1Y3QgUEFDS0VEIHJ0X2h0X21jc19zZXQgewotCXU4IE1DU1NldFsxMF07Ci0JdTggU3VwUmF0ZVsyXTsJLyogdW5pdCA6IDFNYnBzICovCi0JdTggVHhNQ1NTZXREZWZpbmVkOjE7Ci0JdTggVHhSeE5vdEVxdWFsOjE7Ci0JdTggVHhTdHJlYW06MjsKLQl1OCBNcGR1RGVuc2l0eToxOwotCXU4IHJzdjozOwotCXU4IHJzdjNbM107Ci19OwotCi0vKiAgSFQgQ2FwYWJpbGl0eSBJTkZPIGZpZWxkIGluIEhUIENhcCBJRSAuICovCi1zdHJ1Y3QgUEFDS0VEIHJ0X2V4dF9odF9jYXBfaW5mbyB7Ci0JdTE2IFBjbzoxOwotCXUxNiBUcmFuVGltZToyOwotCXUxNiByc3Y6NTsJCS8qbW9taSBwb3dlciBzYWZlICovCi0JdTE2IE1DU0ZlZWRiYWNrOjI7CS8qMDpubyBNQ1MgZmVlZGJhY2ssIDI6dW5zb2xpY2l0ZWQgTUNTIGZlZWRiYWNrLCAzOkZ1bGwgTUNTIGZlZWRiYWNrLCAgMTpyc3YuICovCi0JdTE2IFBsdXNIVEM6MTsJLyorSFRDIGNvbnRyb2wgZmllbGQgc3VwcG9ydCAqLwotCXUxNiBSREdTdXBwb3J0OjE7CS8qcmV2ZXJzZSBEaXJlY3Rpb24gR3JhbnQgIHN1cHBvcnQgKi8KLQl1MTYgcnN2Mjo0OwotfTsKLQotLyogIEhUIEJlYW1mb3JtaW5nIGZpZWxkIGluIEhUIENhcCBJRSAuICovCi1zdHJ1Y3QgUEFDS0VEIHJ0X2h0X2JmX2NhcCB7Ci0JdW5zaWduZWQgbG9uZyBUeEJGUmVjQ2FwYWJsZToxOwotCXVuc2lnbmVkIGxvbmcgUnhTb3VuZENhcGFibGU6MTsKLQl1bnNpZ25lZCBsb25nIFR4U291bmRDYXBhYmxlOjE7Ci0JdW5zaWduZWQgbG9uZyBSeE5EUENhcGFibGU6MTsKLQl1bnNpZ25lZCBsb25nIFR4TkRQQ2FwYWJsZToxOwotCXVuc2lnbmVkIGxvbmcgSW1wVHhCRkNhcGFibGU6MTsKLQl1bnNpZ25lZCBsb25nIENhbGlicmF0aW9uOjI7Ci0JdW5zaWduZWQgbG9uZyBFeHBDU0lDYXBhYmxlOjE7Ci0JdW5zaWduZWQgbG9uZyBFeHBOb0NvbVN0ZWVyQ2FwYWJsZToxOwotCXVuc2lnbmVkIGxvbmcgRXhwQ29tU3RlZXJDYXBhYmxlOjE7Ci0JdW5zaWduZWQgbG9uZyBFeHBDU0lGYms6MjsKLQl1bnNpZ25lZCBsb25nIEV4cE5vQ29tQkY6MjsKLQl1bnNpZ25lZCBsb25nIEV4cENvbUJGOjI7Ci0JdW5zaWduZWQgbG9uZyBNaW5Hcm91cGluZzoyOwotCXVuc2lnbmVkIGxvbmcgQ1NJQkZBbnRTdXA6MjsKLQl1bnNpZ25lZCBsb25nIE5vQ29tU3RlZXJCRkFudFN1cDoyOwotCXVuc2lnbmVkIGxvbmcgQ29tU3RlZXJCRkFudFN1cDoyOwotCXVuc2lnbmVkIGxvbmcgQ1NJUm93QkZTdXA6MjsKLQl1bnNpZ25lZCBsb25nIENoYW5Fc3RpbWF0aW9uOjI7Ci0JdW5zaWduZWQgbG9uZyByc3Y6MzsKLX07Ci0KLS8qICBIVCBhbnRlbm5hIHNlbGVjdGlvbiBmaWVsZCBpbiBIVCBDYXAgSUUgLiAqLwotc3RydWN0IFBBQ0tFRCBydF9odF9hc19jYXAgewotCXU4IEFudFNlbGVjdDoxOwotCXU4IEV4cENTSUZia1R4QVNFTDoxOwotCXU4IEFudEluZEZia1R4QVNFTDoxOwotCXU4IEV4cENTSUZiazoxOwotCXU4IEFudEluZEZiazoxOwotCXU4IFJ4QVNlbDoxOwotCXU4IFR4U291bmRQUERVOjE7Ci0JdTggcnN2OjE7Ci19OwotCi0vKiBEcmFmdCAxLjAgc2V0IElFIGxlbmd0aCAyNiwgYnV0IGlzIGV4dGVuc2libGUuLiAqLwotI2RlZmluZSBTSVpFX0hUX0NBUF9JRQkJMjYKLS8qIFRoZSBzdHJ1Y3R1cmUgZm9yIEhUIENhcGFiaWxpdHkgSUUuICovCi1zdHJ1Y3QgUEFDS0VEIHJ0X2h0X2NhcGFiaWxpdHlfaWUgewotCXN0cnVjdCBydF9odF9jYXBfaW5mbyBIdENhcEluZm87Ci0Jc3RydWN0IHJ0X2h0X2NhcF9wYXJtIEh0Q2FwUGFybTsKLS8qICAgICAgc3RydWN0IHJ0X2h0X21jc19zZXQgICAgICAgICAgICAgIEh0TUNTU2V0OyAqLwotCXU4IE1DU1NldFsxNl07Ci0Jc3RydWN0IHJ0X2V4dF9odF9jYXBfaW5mbyBFeHRIdENhcEluZm87Ci0Jc3RydWN0IHJ0X2h0X2JmX2NhcCBUeEJGQ2FwOwkvKiBiZWFtZm9ybWluZyBjYXAuIHJ0Mjg2MGMgbm90IHN1cHBvcnQgYmVhbWZvcm1pbmcuICovCi0Jc3RydWN0IHJ0X2h0X2FzX2NhcCBBU0NhcDsJLyphbnRlbm5hIHNlbGVjdGlvbi4gKi8KLX07Ci0KLS8qIDgwMi4xMW4gZHJhZnQzIHJlbGF0ZWQgc3RydWN0dXJlIGRlZmluaXRpb25zLiAqLwotLyogNy4zLjIuNjAgKi8KLSNkZWZpbmUgZG90MTFPQlNTU2NhblBhc3NpdmVEd2VsbAkJCQkJCQkyMAkvKiBpbiBUVS4gbWluIGFtb3VudCBvZiB0aW1lIHRoYXQgdGhlIFNUQSBjb250aW51b3VzbHkgc2NhbnMgZWFjaCBjaGFubmVsIHdoZW4gcGVyZm9ybWluZyBhbiBhY3RpdmUgT0JTUyBzY2FuLiAqLwotI2RlZmluZSBkb3QxMU9CU1NTY2FuQWN0aXZlRHdlbGwJCQkJCQkJMTAJLyogaW4gVFUubWluIGFtb3VudCBvZiB0aW1lIHRoYXQgdGhlIFNUQSBjb250aW51b3VzbHkgc2NhbnMgZWFjaCBjaGFubmVsIHdoZW4gcGVyZm9ybWluZyBhbiBwYXNzaXZlIE9CU1Mgc2Nhbi4gKi8KLSNkZWZpbmUgZG90MTFCU1NXaWR0aFRyaWdnZXJTY2FuSW50ZXJ2YWwJCQkJCTMwMAkvKiBpbiBzZWMuIG1heCBpbnRlcnZhbCBiZXR3ZWVuIHNjYW4gb3BlcmF0aW9ucyB0byBiZSBwZXJmb3JtZWQgdG8gZGV0ZWN0IEJTUyBjaGFubmVsIHdpZHRoIHRyaWdnZXIgZXZlbnRzLiAqLwotI2RlZmluZSBkb3QxMU9CU1NTY2FuUGFzc2l2ZVRvdGFsUGVyQ2hhbm5lbAkJCQkJMjAwCS8qIGluIFRVLiBtaW4gdG90YWwgYW1vdW50IG9mIHRpbWUgdGhhdCB0aGUgU1RBIHNjYW5zIGVhY2ggY2hhbm5lbCB3aGVuIHBlcmZvcm1pbmcgYSBwYXNzaXZlIE9CU1Mgc2Nhbi4gKi8KLSNkZWZpbmUgZG90MTFPQlNTU2NhbkFjdGl2ZVRvdGFsUGVyQ2hhbm5lbAkJCQkJMjAJLyppbiBUVS4gbWluIHRvdGFsIGFtb3VudCBvZiB0aW1lIHRoYXQgdGhlIFNUQSBzY2FucyBlYWNoIGNoYW5uZWwgd2hlbiBwZXJmb3JtaW5nIGEgYWN0aXZlIE9CU1Mgc2NhbiAqLwotI2RlZmluZSBkb3QxMUJTU1dpZHRoQ2hhbm5lbFRyYW5zYWN0aW9uRGVsYXlGYWN0b3IJCQk1CS8qIG1pbiByYXRpbyBiZXR3ZWVuIHRoZSBkZWxheSB0aW1lIGluIHBlcmZvcm1pbmcgYSBzd2l0Y2ggZnJvbSAyME1IeiBCU1MgdG8gMjAvNDAgQlNTIG9wZXJhdGlvbiBhbmQgdGhlIG1heGltdW0gKi8KLQkJCQkJCQkJCQkJCQkJCQkvKiAgICAgIGludGVydmFsIGJldHdlZW4gb3ZlcmxhcHBpbmcgQlNTIHNjYW4gb3BlcmF0aW9ucy4gKi8KLSNkZWZpbmUgZG90MTFCU1NTY2FuQWN0aXZpdHlUaHJlc2hvbGQJCQkJCQkyNQkvKiBpbiAlJSwgbWF4IHRvdGFsIHRpbWUgdGhhdCBhIFNUQSBtYXkgYmUgYWN0aXZlIG9uIHRoZSBtZWRpdW0gZHVyaW5nIGEgcGVyaW9kIG9mICovCi0JCQkJCQkJCQkJCQkJCQkJLyogICAgICAoZG90MTFCU1NXaWR0aENoYW5uZWxUcmFuc2FjdGlvbkRlbGF5RmFjdG9yICogZG90MTFCU1NXaWR0aFRyaWdnZXJTY2FuSW50ZXJ2YWwpIHNlY29uZHMgd2l0aG91dCAqLwotCQkJCQkJCQkJCQkJCQkJCS8qICAgICAgYmVpbmcgb2JsaWdhdGVkIHRvIHBlcmZvcm0gT0JTUyBTY2FuIG9wZXJhdGlvbnMuIGRlZmF1bHQgaXMgMjUoPT0gMC4yNSUpICovCi0KLXN0cnVjdCBQQUNLRUQgcnRfb3ZlcmxhcF9ic3Nfc2Nhbl9pZSB7Ci0JdTE2IFNjYW5QYXNzaXZlRHdlbGw7Ci0JdTE2IFNjYW5BY3RpdmVEd2VsbDsKLQl1MTYgVHJpZ2dlclNjYW5JbnQ7CS8qIFRyaWdnZXIgc2NhbiBpbnRlcnZhbCAqLwotCXUxNiBQYXNzaXZlVGFsUGVyQ2hhbm5lbDsJLyogcGFzc2l2ZSB0b3RhbCBwZXIgY2hhbm5lbCAqLwotCXUxNiBBY3RpdmVUYWxQZXJDaGFubmVsOwkvKiBhY3RpdmUgdG90YWwgcGVyIGNoYW5uZWwgKi8KLQl1MTYgRGVsYXlGYWN0b3I7CS8qIEJTUyB3aWR0aCBjaGFubmVsIHRyYW5zaXRpb24gZGVsYXkgZmFjdG9yICovCi0JdTE2IFNjYW5BY3RUaHJlOwkvKiBTY2FuIEFjdGl2aXR5IHRocmVzaG9sZCAqLwotfTsKLQotLyogIDcuMy4yLjU2LiAyMC80MCBDb2V4aXN0ZW5jZSBlbGVtZW50IHVzZWQgaW4gIEVsZW1lbnQgSUQgPSA3MiA9IElFXzIwNDBfQlNTX0NPRVhJU1QgKi8KLXR5cGVkZWYgdW5pb24gUEFDS0VEIF9CU1NfMjA0MF9DT0VYSVNUX0lFIHsKLQlzdHJ1Y3QgUEFDS0VEIHsKLQkJdTggSW5mb1JlcToxOwotCQl1OCBJbnRvbGVyYW50NDA6MTsJLyogSW50ZXItQlNTLiBzZXQgMSB3aGVuIHByb2hpYml0cyBhIHJlY2VpdmluZyBCU1MgZnJvbSBvcGVyYXRpbmcgYXMgYSAyMC80MCBNaHogQlNTLiAqLwotCQl1OCBCU1MyMFdpZHRoUmVxOjE7CS8qIEludHJhLUJTUyBzZXQgMSB3aGVuIHByb2hpYml0cyBhIHJlY2VpdmluZyBBUCBmcm9tIG9wZXJhdGluZyBpdHMgQlNTIGFzIGEgMjAvNDBNSHogQlNTLiAqLwotCQl1OCByc3Y6NTsKLQl9IGZpZWxkOwotCXU4IHdvcmQ7Ci19IEJTU18yMDQwX0NPRVhJU1RfSUUsICpQQlNTXzIwNDBfQ09FWElTVF9JRTsKLQotc3RydWN0IHJ0X3RyaWdnZXJfZXZlbnRhIHsKLQlCT09MRUFOIGJWYWxpZDsKLQl1OCBCU1NJRFs2XTsKLQl1OCBSZWdDbGFzczsJCS8qIFJlZ3VsYXRvcnkgQ2xhc3MgKi8KLQl1MTYgQ2hhbm5lbDsKLQl1bnNpZ25lZCBsb25nIENEQ291bnRlcjsJLyogTWFpbnRhaW4gYSBzZXBhcmF0ZSBjb3VudCBkb3duIGNvdW50ZXIgZm9yIGVhY2ggRXZlbnQgQS4gKi8KLX07Ci0KLS8qIDIwLzQwIHRyaWdnZXIgZXZlbnQgdGFibGUgKi8KLS8qIElmIG9uZSBFdmVudCAoQSkgaXMgZGVsZXRlZCBvciBjcmVhdGVkLCBvciBpZiBFdmVudCAoQikgaXMgZGV0ZWN0ZWQgb3Igbm90IGRldGVjdGVkLCBTVEEgc2hvdWxkIHNlbmQgMjA0MEJTU0NvZXhpc3RlbmNlIHRvIEFQLiAqLwotI2RlZmluZSBNQVhfVFJJR0dFUl9FVkVOVAkJNjQKLXN0cnVjdCBydF90cmlnZ2VyX2V2ZW50X3RhYiB7Ci0JdTggRXZlbnRBTm87Ci0Jc3RydWN0IHJ0X3RyaWdnZXJfZXZlbnRhIEV2ZW50QVtNQVhfVFJJR0dFUl9FVkVOVF07Ci0JdW5zaWduZWQgbG9uZyBFdmVudEJDb3VudERvd247CS8qIENvdW50IGRvd24gY291bnRlciBmb3IgRXZlbnQgQi4gKi8KLX07Ci0KLS8qIDcuMy4yNyAyMC80MCBCc3MgQ29leGlzdGVuY2UgTWdtdCBjYXBhYmlsaXR5IHVzZWQgaW4gZXh0ZW5kZWQgY2FwYWJpbGl0aWVzIGluZm9ybWF0aW9uIElFKCBJRCA9IDEyNyA9IElFX0VYVF9DQVBBQklMSVRZKS4gKi8KLS8qICAgICAgVGhpcyBpcyB0aGUgZmlyc3Qgb2N0ZXQgYW5kIHdhcyBkZWZpbmVkIGluIDgwMi4xMW4gRDMuMDMgYW5kIDgwMi4xMXlEOS4wICovCi1zdHJ1Y3QgUEFDS0VEIHJ0X2V4dF9jYXBfaW5mb19lbGVtZW50IHsKLQl1OCBCc3NDb2V4aXN0TWdtdFN1cHBvcnQ6MTsKLQl1OCByc3Y6MTsKLQl1OCBFeHRlbmRDaGFubmVsU3dpdGNoOjE7Ci0JdTggcnN2Mjo1OwotfTsKLQotLyogODAyLjExbiA3LjMuMi42MSAqLwotc3RydWN0IFBBQ0tFRCBydF9ic3NfMjA0MF9jb2V4aXN0X2VsZW1lbnQgewotCXU4IEVsZW1lbnRJRDsJLyogSUQgPSBJRV8yMDQwX0JTU19DT0VYSVNUID0gNzIgKi8KLQl1OCBMZW47Ci0JQlNTXzIwNDBfQ09FWElTVF9JRSBCc3NDb2V4aXN0SWU7Ci19OwotCi0vKjgwMi4xMW4gNy4zLjIuNTkgKi8KLXN0cnVjdCBQQUNLRUQgcnRfYnNzXzIwNDBfaW50b2xlcmFudF9jaF9yZXBvcnQgewotCXU4IEVsZW1lbnRJRDsJLyogSUQgPSBJRV8yMDQwX0JTU19JTlRPTEVSQU5UX1JFUE9SVCA9IDczICovCi0JdTggTGVuOwotCXU4IFJlZ3VsYXRvcnlDbGFzczsKLQl1OCBDaExpc3RbMF07Ci19OwotCi0vKiBUaGUgc3RydWN0dXJlIGZvciBjaGFubmVsIHN3aXRjaCBhbm5vdW5jZW1lbnQgSUUuIFRoaXMgaXMgaW4gODAyLjExbiBEMy4wMyAqLwotc3RydWN0IFBBQ0tFRCBydF9jaGFfc3dpdGNoX2Fubm91bmNlX2llIHsKLQl1OCBTd2l0Y2hNb2RlOwkvKmNoYW5uZWwgc3dpdGNoIG1vZGUgKi8KLQl1OCBOZXdDaGFubmVsOwkvKiAqLwotCXU4IFN3aXRjaENvdW50OwkvKiAqLwotfTsKLQotLyogVGhlIHN0cnVjdHVyZSBmb3IgY2hhbm5lbCBzd2l0Y2ggYW5ub3VuY2VtZW50IElFLiBUaGlzIGlzIGluIDgwMi4xMW4gRDMuMDMgKi8KLXN0cnVjdCBQQUNLRUQgcnRfc2VjX2NoYV9vZmZzZXRfaWUgewotCXU4IFNlY29uZGFyeUNoYW5uZWxPZmZzZXQ7CS8qIDE6IFNlY29uZGFyeSBhYm92ZSwgMzogU2Vjb25kYXJ5IGJlbG93LCAwOiBubyBTZWNvbmRhcnkgKi8KLX07Ci0KLS8qIFRoaXMgc3RydWN0dXJlIGlzIGV4dHJhY3RlZCBmcm9tIHN0cnVjdCBzdHJ1Y3QgcnRfaHRfY2FwYWJpbGl0eSAqLwotc3RydWN0IHJ0X2h0X3BoeV9pbmZvIHsKLQlCT09MRUFOIGJIdEVuYWJsZTsJLyogSWYgd2Ugc2hvdWxkIHVzZSBodCByYXRlLiAqLwotCUJPT0xFQU4gYlByZU5IdDsJLyogSWYgd2Ugc2hvdWxkIHVzZSBodCByYXRlLiAqLwotCS8qU3VidHJhY3QgZnJvbSBIVCBDYXBhYmlsaXR5IElFICovCi0JdTggTUNTU2V0WzE2XTsKLX07Ci0KLS8qVGhpcyBzdHJ1Y3R1cmUgc3VidHJhY3RzIHJhbGluayBzdXBwb3J0cyBmcm9tIGFsbCA4MDIuMTFuLXJlbGF0ZWQgZmVhdHVyZXMuICovCi0vKkZlYXR1cmVzIG5vdCBsaXN0ZWQgaGVyZSBidXQgY29udGFpbmVkIGluIDgwMi4xMW4gc3BlYyBhcmUgbm90IHN1cHBvcnRlZCBpbiBydDI4NjAuICovCi1zdHJ1Y3QgcnRfaHRfY2FwYWJpbGl0eSB7Ci0JdTE2IENoYW5uZWxXaWR0aDoxOwotCXUxNiBNaW1vUHM6MjsJLyptaW1vIHBvd2VyIHNhZmUgTU1QU18gKi8KLQl1MTYgR0Y6MTsJCS8qZ3JlZW4gZmllbGQgKi8KLQl1MTYgU2hvcnRHSWZvcjIwOjE7Ci0JdTE2IFNob3J0R0lmb3I0MDoxOwkvKmZvcjQwTUh6ICovCi0JdTE2IFR4U1RCQzoxOwotCXUxNiBSeFNUQkM6MjsJLyogMiBiaXRzICovCi0JdTE2IEFtc2R1RW5hYmxlOjE7CS8qIEVuYWJsZSB0byB0cmFuc21pdCBBLU1TRFUuIFN1Z2dlc3QgZGlzYWJsZS4gV2Ugc2hvdWxkIHVzZSBBLU1QRFUgdG8gZ2FpbiBiZXN0IGJlbmVmaXQgb2YgODAyLjExbiAqLwotCXUxNiBBbXNkdVNpemU6MTsJLyogTWF4IHJlY2VpdmluZyBBLU1TRFUgc2l6ZSAqLwotCXUxNiByc3Y6NTsKLQotCS8qU3VidHJhY3QgZnJvbSBBZGRpb250IEhUIElORk8gSUUgKi8KLQl1OCBNYXhSQW1wZHVGYWN0b3I6MjsKLQl1OCBNcGR1RGVuc2l0eTozOwotCXU4IEV4dENoYW5PZmZzZXQ6MjsJLyogUGxlYXNlIG5vdGUgdGhlIGRpZmZlcmVuY2Ugd2l0aCBmb2xsb3dpbmcgICAgIHU4ICAgTmV3RXh0Q2hhbm5lbE9mZnNldDsgZnJvbSA4MDIuMTFuICovCi0JdTggUmVjb21XaWR0aDoxOwotCi0JdTE2IE9wZXJhaW9uTW9kZToyOwotCXUxNiBOb25HZlByZXNlbnQ6MTsKLQl1MTYgcnN2MzoxOwotCXUxNiBPQlNTX05vbkhURXhpc3Q6MTsKLQl1MTYgcnN2MjoxMTsKLQotCS8qIE5ldyBFeHRlbnNpb24gQ2hhbm5lbCBPZmZzZXQgSUUgKi8KLQl1OCBOZXdFeHRDaGFubmVsT2Zmc2V0OwotCS8qIEV4dGVuc2lvbiBDYXBhYmlsaXR5IElFID0gMTI3ICovCi0JdTggQlNTQ29leGlzdDIwNDA7Ci19OwotCi0vKiAgIGZpZWxkIGluIEFkZGl0aW9uYWwgSFQgSW5mb3JtYXRpb24gSUUgLiAqLwotc3RydWN0IFBBQ0tFRCBydF9hZGRfaHRpbmZvIHsKLQl1OCBFeHRDaGFuT2Zmc2V0OjI7Ci0JdTggUmVjb21XaWR0aDoxOwotCXU4IFJpZnNNb2RlOjE7Ci0JdTggU19QU01QU3VwOjE7CS8qSW5kaWNhdGUgc3VwcG9ydCBmb3Igc2NoZWR1bGVkIFBTTVAgKi8KLQl1OCBTZXJJbnRlckdyYW51OjM7CS8qc2VydmljZSBpbnRlcnZhbCBncmFudWxhcml0eSAqLwotfTsKLQotc3RydWN0IFBBQ0tFRCBydF9hZGRfaHRpbmZvMiB7Ci0JdTE2IE9wZXJhaW9uTW9kZToyOwotCXUxNiBOb25HZlByZXNlbnQ6MTsKLQl1MTYgcnN2OjE7Ci0JdTE2IE9CU1NfTm9uSFRFeGlzdDoxOwotCXUxNiByc3YyOjExOwotfTsKLQotLyogVE9ETzogTmVlZCBzeW5jIHdpdGggc3BlYyBhYm91dCB0aGUgZGVmaW5pdGlvbiBvZiBTdGJjTWNzLiBJbiBEcmFmdCAzLjAzLCBpdCdzIHJlc2VydmVkLiAqLwotc3RydWN0IFBBQ0tFRCBydF9hZGRfaHRpbmZvMyB7Ci0JdTE2IFN0YmNNY3M6NjsKLQl1MTYgRHVhbEJlYWNvbjoxOwotCXUxNiBEdWFsQ1RTUHJvdGVjdDoxOwotCXUxNiBTVEJDQmVhY29uOjE7Ci0JdTE2IExzaWdUeG9wUHJvdDoxOwkvKiBMLVNJRyBUWE9QIHByb3RlY3Rpb24gZnVsbCBzdXBwb3J0ICovCi0JdTE2IFBjb0FjdGl2ZToxOwotCXUxNiBQY29QaGFzZToxOwotCXUxNiByc3Y6NDsKLX07Ci0KLSNkZWZpbmUgU0laRV9BRERfSFRfSU5GT19JRQkJMjIKLXN0cnVjdCBQQUNLRUQgcnRfYWRkX2h0X2luZm9faWUgewotCXU4IENvbnRyb2xDaGFuOwotCXN0cnVjdCBydF9hZGRfaHRpbmZvIEFkZEh0SW5mbzsKLQlzdHJ1Y3QgcnRfYWRkX2h0aW5mbzIgQWRkSHRJbmZvMjsKLQlzdHJ1Y3QgcnRfYWRkX2h0aW5mbzMgQWRkSHRJbmZvMzsKLQl1OCBNQ1NTZXRbMTZdOwkvKiBCYXNpYyBNQ1Mgc2V0ICovCi19OwotCi1zdHJ1Y3QgUEFDS0VEIHJ0X25ld19leHRfY2hhbl9pZSB7Ci0JdTggTmV3RXh0Q2hhbk9mZnNldDsKLX07Ci0KLXN0cnVjdCBQQUNLRUQgcnRfZnJhbWVfODAyXzExIHsKLQlzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSBIZHI7Ci0JdTggT2N0ZXRbMV07Ci19OwotCi0vKiBRb1NOdWxsIGVtYmVkZGluZyBvZiBtYW5hZ2VtZW50IGFjdGlvbi4gV2hlbiBIVCBDb250cm9sIE1BIGZpZWxkIHNldCB0byAxLiAqLwotc3RydWN0IFBBQ0tFRCBydF9tYV9ib2R5IHsKLQl1OCBDYXRlZ29yeTsKLQl1OCBBY3Rpb247Ci0JdTggT2N0ZXRbMV07Ci19OwotCi1zdHJ1Y3QgUEFDS0VEIHJ0X2hlYWRlcl84MDJfMyB7Ci0JdTggREFBZGRyMVtNQUNfQUREUl9MRU5dOwotCXU4IFNBQWRkcjJbTUFDX0FERFJfTEVOXTsKLQl1OCBPY3RldFsyXTsKLX07Ci0vKi8vQmxvY2sgQUNLIHJlbGF0ZWQgZm9ybWF0ICovCi0vKiAyLWJ5dGUgQkEgUGFyYW1ldGVyICBmaWVsZCAgaW4gICAgICAgREVMQkEgZnJhbWVzIHRvIHRlcm1pbmF0ZSBhbiBhbHJlYWR5IHNldCB1cCBiQSAqLwotc3RydWN0IFBBQ0tFRCBydF9kZWxiYV9wYXJtIHsKLQl1MTYgUnN2OjExOwkJLyogYWx3YXlzIHNldCB0byAwICovCi0JdTE2IEluaXRpYXRvcjoxOwkvKiAxOiBvcmlnaW5hdG9yICAgIDA6cmVjaXBpZW50ICovCi0JdTE2IFRJRDo0OwkJLyogdmFsdWUgb2YgVEMgb3MgVFMgKi8KLX07Ci0KLS8qIDItYnl0ZSBCQSBQYXJhbWV0ZXIgU2V0IGZpZWxkICBpbiBBRERCQSBmcmFtZXMgdG8gc2lnbmFsIHBhcm0gZm9yIHNldHRpbmcgdXAgYSBCQSAqLwotc3RydWN0IFBBQ0tFRCBydF9iYV9wYXJtIHsKLQl1MTYgQU1TRFVTdXBwb3J0ZWQ6MTsJLyogMDogbm90IHBlcm1pdHRlZCAgICAgICAgICAgICAxOiBwZXJtaXR0ZWQgKi8KLQl1MTYgQkFQb2xpY3k6MTsJLyogMTogaW1tZWRpYXRlbHkgQkEgICAgMDpkZWxheWVkIEJBICovCi0JdTE2IFRJRDo0OwkJLyogdmFsdWUgb2YgVEMgb3MgVFMgKi8KLQl1MTYgQnVmU2l6ZToxMDsJLyogbnVtYmVyIG9mIGJ1ZmZlciBvZiBzaXplIDIzMDQgb2N0ZXRzciAqLwotfTsKLQotLyogMi1ieXRlIEJBIFN0YXJ0aW5nIFNlcSBDT05UUk9MIGZpZWxkICovCi10eXBlZGVmIHVuaW9uIFBBQ0tFRCBfQkFTRVFfQ09OVFJPTCB7Ci0Jc3RydWN0IFBBQ0tFRCB7Ci0JCXUxNiBGcmFnTnVtOjQ7CS8qIGFsd2F5cyBzZXQgdG8gMCAqLwotCQl1MTYgU3RhcnRTZXE6MTI7CS8qIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgMXN0IE1TRFUgZm9yIHdoaWNoIHRoaXMgQkFSIGlzIHNlbnQgKi8KLQl9IGZpZWxkOwotCXUxNiB3b3JkOwotfSBCQVNFUV9DT05UUk9MLCAqUEJBU0VRX0NPTlRST0w7Ci0KLS8qQkFDb250cm9sIGFuZCBCQVJDb250cm9sIGFyZSB0aGUgc2FtZSAqLwotLyogMi1ieXRlIEJBIENPTlRST0wgZmllbGQgaW4gQkEgZnJhbWUgKi8KLXN0cnVjdCBQQUNLRUQgcnRfYmFfY29udHJvbCB7Ci0JdTE2IEFDS1BvbGljeToxOwkvKiBvbmx5IHJlbGF0ZWQgdG8gTi1EZWxheWVkIEJBLiBCdXQgbm90IHN1cHBvcnQgaW4gUlQyODYwYi4gMDpOb3JtYWxBQ0sgIDE6Tm8gQUNLICovCi0JdTE2IE1USUQ6MTsJCS8qRVdDIFYxLjI0ICovCi0JdTE2IENvbXByZXNzZWQ6MTsKLQl1MTYgUnN2Ojk7Ci0JdTE2IFRJRDo0OwotfTsKLQotLyogMi1ieXRlIEJBUiBDT05UUk9MIGZpZWxkIGluIEJBUiBmcmFtZSAqLwotc3RydWN0IFBBQ0tFRCBydF9iYXJfY29udHJvbCB7Ci0JdTE2IEFDS1BvbGljeToxOwkvKiAwOm5vcm1hbCBhY2ssICAxOm5vIGFjay4gKi8KLQl1MTYgTVRJRDoxOwkJLyppZiB0aGlzIGJpdDEsIHVzZSAgc3RydWN0IHJ0X2ZyYW1lX210YmFfcmVxLCAgaWYgMCwgdXNlIHN0cnVjdCBydF9mcmFtZV9iYV9yZXEgKi8KLQl1MTYgQ29tcHJlc3NlZDoxOwotCXUxNiBSc3YxOjk7Ci0JdTE2IFRJRDo0OwotfTsKLQotLyogQkFSQ29udHJvbCBpbiBNVEJBUiBmcmFtZSAqLwotc3RydWN0IFBBQ0tFRCBydF9tdGJhcl9jb250cm9sIHsKLQl1MTYgQUNLUG9saWN5OjE7Ci0JdTE2IE1USUQ6MTsKLQl1MTYgQ29tcHJlc3NlZDoxOwotCXUxNiBSc3YxOjk7Ci0JdTE2IE51bVRJRDo0OwotfTsKLQotc3RydWN0IFBBQ0tFRCBydF9wZXJfdGlkX2luZm8gewotCXUxNiBSc3YxOjEyOwotCXUxNiBUSUQ6NDsKLX07Ci0KLXN0cnVjdCBydF9lYWNoX3RpZCB7Ci0Jc3RydWN0IHJ0X3Blcl90aWRfaW5mbyBQZXJUSUQ7Ci0JQkFTRVFfQ09OVFJPTCBCQVN0YXJ0aW5nU2VxOwotfTsKLQotLyogQkFSRVEgQU5EIE1UQkFSRVEgaGF2ZSB0aGUgc2FtZSBzdWJ0eXBlIEJBUiwgODAyLjExbiBCQVIgdXNlIGNvbXByZXNzZWQgYml0bWFwLiAqLwotc3RydWN0IFBBQ0tFRCBydF9mcmFtZV9iYV9yZXEgewotCXN0cnVjdCBydF9mcmFtZV9jb250cm9sIEZDOwotCXUxNiBEdXJhdGlvbjsKLQl1OCBBZGRyMVtNQUNfQUREUl9MRU5dOwotCXU4IEFkZHIyW01BQ19BRERSX0xFTl07Ci0Jc3RydWN0IHJ0X2Jhcl9jb250cm9sIEJBUkNvbnRyb2w7Ci0JQkFTRVFfQ09OVFJPTCBCQVN0YXJ0aW5nU2VxOwotfTsKLQotc3RydWN0IFBBQ0tFRCBydF9mcmFtZV9tdGJhX3JlcSB7Ci0Jc3RydWN0IHJ0X2ZyYW1lX2NvbnRyb2wgRkM7Ci0JdTE2IER1cmF0aW9uOwotCXU4IEFkZHIxW01BQ19BRERSX0xFTl07Ci0JdTggQWRkcjJbTUFDX0FERFJfTEVOXTsKLQlzdHJ1Y3QgcnRfbXRiYXJfY29udHJvbCBNVEJBUkNvbnRyb2w7Ci0Jc3RydWN0IHJ0X3Blcl90aWRfaW5mbyBQZXJUSURJbmZvOwotCUJBU0VRX0NPTlRST0wgQkFTdGFydGluZ1NlcTsKLX07Ci0KLS8qIENvbXByZXNzZWQgZm9ybWF0IGlzIG1hbmRhdG9yeSBpbiBIVCBTVEEgKi8KLXN0cnVjdCBQQUNLRUQgcnRfZnJhbWVfbXRiYSB7Ci0Jc3RydWN0IHJ0X2ZyYW1lX2NvbnRyb2wgRkM7Ci0JdTE2IER1cmF0aW9uOwotCXU4IEFkZHIxW01BQ19BRERSX0xFTl07Ci0JdTggQWRkcjJbTUFDX0FERFJfTEVOXTsKLQlzdHJ1Y3QgcnRfYmFfY29udHJvbCBCQUNvbnRyb2w7Ci0JQkFTRVFfQ09OVFJPTCBCQVN0YXJ0aW5nU2VxOwotCXU4IEJpdE1hcFs4XTsKLX07Ci0KLXN0cnVjdCBQQUNLRUQgcnRfZnJhbWVfcHNtcF9hY3Rpb24gewotCXN0cnVjdCBydF9oZWFkZXJfODAyXzExIEhkcjsKLQl1OCBDYXRlZ29yeTsKLQl1OCBBY3Rpb247Ci0JdTggUHNtcDsJCS8qIDcuMy4xLjI1ICovCi19OwotCi1zdHJ1Y3QgUEFDS0VEIHJ0X2ZyYW1lX2FjdGlvbl9oZHIgewotCXN0cnVjdCBydF9oZWFkZXJfODAyXzExIEhkcjsKLQl1OCBDYXRlZ29yeTsKLQl1OCBBY3Rpb247Ci19OwotCi0vKkFjdGlvbiBGcmFtZSAqLwotLypBY3Rpb24gRnJhbWUgIENhdGVnb3J5OlNwZWN0cnVtLCAgQWN0aW9uOkNoYW5uZWwgU3dpdGNoLiA3LjMuMi4yMCAqLwotc3RydWN0IFBBQ0tFRCBydF9jaGFuX3N3aXRjaF9hbm5vdW5jZSB7Ci0JdTggRWxlbWVudElEOwkvKiBJRCA9IElFX0NIQU5ORUxfU1dJVENIX0FOTk9VTkNFTUVOVCA9IDM3ICovCi0JdTggTGVuOwotCXN0cnVjdCBydF9jaGFfc3dpdGNoX2Fubm91bmNlX2llIENTQW5ub3VuY2VJZTsKLX07Ci0KLS8qODAyLjExbiA6IDcuMy4yLjIwYSAqLwotc3RydWN0IFBBQ0tFRCBydF9zZWNvbmRfY2hhbl9vZmZzZXQgewotCXU4IEVsZW1lbnRJRDsJLyogSUQgPSBJRV9TRUNPTkRBUllfQ0hfT0ZGU0VUID0gNjIgKi8KLQl1OCBMZW47Ci0Jc3RydWN0IHJ0X3NlY19jaGFfb2Zmc2V0X2llIFNlY0NoT2Zmc2V0SWU7Ci19OwotCi1zdHJ1Y3QgUEFDS0VEIHJ0X2ZyYW1lX3NwZXRydW1fY3MgewotCXN0cnVjdCBydF9oZWFkZXJfODAyXzExIEhkcjsKLQl1OCBDYXRlZ29yeTsKLQl1OCBBY3Rpb247Ci0Jc3RydWN0IHJ0X2NoYW5fc3dpdGNoX2Fubm91bmNlIENTQW5ub3VuY2U7Ci0Jc3RydWN0IHJ0X3NlY29uZF9jaGFuX29mZnNldCBTZWNvbmRDaGFubmVsOwotfTsKLQotc3RydWN0IFBBQ0tFRCBydF9mcmFtZV9hZGRiYV9yZXEgewotCXN0cnVjdCBydF9oZWFkZXJfODAyXzExIEhkcjsKLQl1OCBDYXRlZ29yeTsKLQl1OCBBY3Rpb247Ci0JdTggVG9rZW47CQkvKiAxICovCi0Jc3RydWN0IHJ0X2JhX3Bhcm0gQmFQYXJtOwkJLyogIDIgLSAxMCAqLwotCXUxNiBUaW1lT3V0VmFsdWU7CS8qIDAgLSAwICovCi0JQkFTRVFfQ09OVFJPTCBCYVN0YXJ0U2VxOwkvKiAwLTAgKi8KLX07Ci0KLXN0cnVjdCBQQUNLRUQgcnRfZnJhbWVfYWRkYmFfcnNwIHsKLQlzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSBIZHI7Ci0JdTggQ2F0ZWdvcnk7Ci0JdTggQWN0aW9uOwotCXU4IFRva2VuOwotCXUxNiBTdGF0dXNDb2RlOwotCXN0cnVjdCBydF9iYV9wYXJtIEJhUGFybTsJCS8qMCAtIDIgKi8KLQl1MTYgVGltZU91dFZhbHVlOwotfTsKLQotc3RydWN0IFBBQ0tFRCBydF9mcmFtZV9kZWxiYV9yZXEgewotCXN0cnVjdCBydF9oZWFkZXJfODAyXzExIEhkcjsKLQl1OCBDYXRlZ29yeTsKLQl1OCBBY3Rpb247Ci0Jc3RydWN0IHJ0X2RlbGJhX3Bhcm0gRGVsYmFQYXJtOwotCXUxNiBSZWFzb25Db2RlOwotfTsKLQotLyo3LjIuMS43ICovCi1zdHJ1Y3QgUEFDS0VEIHJ0X2ZyYW1lX2JhciB7Ci0Jc3RydWN0IHJ0X2ZyYW1lX2NvbnRyb2wgRkM7Ci0JdTE2IER1cmF0aW9uOwotCXU4IEFkZHIxW01BQ19BRERSX0xFTl07Ci0JdTggQWRkcjJbTUFDX0FERFJfTEVOXTsKLQlzdHJ1Y3QgcnRfYmFyX2NvbnRyb2wgQmFyQ29udHJvbDsKLQlCQVNFUV9DT05UUk9MIFN0YXJ0aW5nU2VxOwotfTsKLQotLyo3LjIuMS43ICovCi1zdHJ1Y3QgUEFDS0VEIHJ0X2ZyYW1lX2JhIHsKLQlzdHJ1Y3QgcnRfZnJhbWVfY29udHJvbCBGQzsKLQl1MTYgRHVyYXRpb247Ci0JdTggQWRkcjFbTUFDX0FERFJfTEVOXTsKLQl1OCBBZGRyMltNQUNfQUREUl9MRU5dOwotCXN0cnVjdCBydF9iYXJfY29udHJvbCBCYXJDb250cm9sOwotCUJBU0VRX0NPTlRST0wgU3RhcnRpbmdTZXE7Ci0JdTggYml0bWFza1s4XTsKLX07Ci0KLS8qIFJhZGlvIE1lYXN1cmVtZW50IFJlcXVlc3QgRnJhbWUgRm9ybWF0ICovCi1zdHJ1Y3QgUEFDS0VEIHJ0X2ZyYW1lX3JtX3JlcV9hY3Rpb24gewotCXN0cnVjdCBydF9oZWFkZXJfODAyXzExIEhkcjsKLQl1OCBDYXRlZ29yeTsKLQl1OCBBY3Rpb247Ci0JdTggVG9rZW47Ci0JdTE2IFJlcGV0aXRpb247Ci0JdTggZGF0YVswXTsKLX07Ci0KLXN0cnVjdCBQQUNLRUQgcnRfaHRfZXh0X2NoYW5uZWxfc3dpdGNoX2Fubm91bmNlbWVudF9pZSB7Ci0JdTggSUQ7Ci0JdTggTGVuZ3RoOwotCXU4IENoYW5uZWxTd2l0Y2hNb2RlOwotCXU4IE5ld1JlZ0NsYXNzOwotCXU4IE5ld0NoYW5uZWxOdW07Ci0JdTggQ2hhbm5lbFN3aXRjaENvdW50OwotfTsKLQotLyogKi8KLS8qIF9MaW1pdCBtdXN0IGJlIHRoZSAyKipuIC0gMSAqLwotLyogX1NFUTEgLCBfU0VRMiBtdXN0IGJlIHdpdGhpbiAwIH4gX0xpbWl0ICovCi0vKiAqLwotI2RlZmluZSBTRVFfU1RFUE9ORShfU0VRMSwgX1NFUTIsIF9MaW1pdCkJKChfU0VRMSA9PSAoKF9TRVEyKzEpICYgX0xpbWl0KSkpCi0jZGVmaW5lIFNFUV9TTUFMTEVSKF9TRVExLCBfU0VRMiwgX0xpbWl0KQkoKChfU0VRMS1fU0VRMikgJiAoKF9MaW1pdCsxKT4+MSkpKQotI2RlZmluZSBTRVFfTEFSR0VSKF9TRVExLCBfU0VRMiwgX0xpbWl0KQkoKF9TRVExICE9IF9TRVEyKSAmJiAhKCgoX1NFUTEtX1NFUTIpICYgKChfTGltaXQrMSk+PjEpKSkpCi0jZGVmaW5lIFNFUV9XSVRISU5fV0lOKF9TRVExLCBfU0VRMiwgX1dJTiwgX0xpbWl0KSAoU0VRX0xBUkdFUihfU0VRMSwgX1NFUTIsIF9MaW1pdCkgJiYgIFwKLQkJCQkJCQkJCQkJCVNFUV9TTUFMTEVSKF9TRVExLCAoKF9TRVEyK19XSU4rMSkmX0xpbWl0KSwgX0xpbWl0KSkKLQotLyogKi8KLS8qIENvbnRlbnRpb24tZnJlZSBwYXJhbWV0ZXIgKHdpdGhvdXQgSUQgYW5kIExlbmd0aCkgKi8KLS8qICovCi1zdHJ1Y3QgUEFDS0VEIHJ0X2NmX3Bhcm0gewotCUJPT0xFQU4gYlZhbGlkOwkJLyogMTogdmFyaWFibGUgY29udGFpbnMgdmFsaWQgdmFsdWUgKi8KLQl1OCBDZnBDb3VudDsKLQl1OCBDZnBQZXJpb2Q7Ci0JdTE2IENmcE1heER1cmF0aW9uOwotCXUxNiBDZnBEdXJSZW1haW5pbmc7Ci19OwotCi1zdHJ1Y3QgcnRfY2lwaGVyX3N1aXRlIHsKLQlORElTXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUyBQYWlyQ2lwaGVyOwkvKiBVbmljYXN0IGNpcGhlciAxLCB0aGlzIG9uZSBoYXMgbW9yZSBzZWN1cmVkIGNpcGhlciBzdWl0ZSAqLwotCU5ESVNfODAyXzExX0VOQ1JZUFRJT05fU1RBVFVTIFBhaXJDaXBoZXJBdXg7CS8qIFVuaWNhc3QgY2lwaGVyIDIgaWYgQVAgYW5ub3VuY2UgdHdvIHVuaWNhc3QgY2lwaGVyIHN1aXRlICovCi0JTkRJU184MDJfMTFfRU5DUllQVElPTl9TVEFUVVMgR3JvdXBDaXBoZXI7CS8qIEdyb3VwIGNpcGhlciAqLwotCXUxNiBSc25DYXBhYmlsaXR5OwkvKiBSU04gY2FwYWJpbGl0eSBmcm9tIGJlYWNvbiAqLwotCUJPT0xFQU4gYk1peE1vZGU7CS8qIEluZGljYXRlIFBhaXIgJiBHcm91cCBjaXBoZXIgbWlnaHQgYmUgZGlmZmVyZW50ICovCi19OwotCi0vKiBFRENBIGNvbmZpZ3VyYXRpb24gZnJvbSBBUCdzIEJFQUNPTi9Qcm9iZVJzcCAqLwotc3RydWN0IHJ0X2VkY2FfcGFybSB7Ci0JQk9PTEVBTiBiVmFsaWQ7CQkvKiAxOiB2YXJpYWJsZSBjb250YWlucyB2YWxpZCB2YWx1ZSAqLwotCUJPT0xFQU4gYkFkZDsJCS8qIDE6IHZhcmlhYmxlIGNvbnRhaW5zIHZhbGlkIHZhbHVlICovCi0JQk9PTEVBTiBiUUFjazsKLQlCT09MRUFOIGJRdWV1ZVJlcXVlc3Q7Ci0JQk9PTEVBTiBiVHhvcFJlcXVlc3Q7Ci0JQk9PTEVBTiBiQVBTRENhcGFibGU7Ci0vKiAgQk9PTEVBTiAgICAgYk1vcmVEYXRhQWNrOyAqLwotCXU4IEVkY2FVcGRhdGVDb3VudDsKLQl1OCBBaWZzbls0XTsJCS8qIDA6QUNfQkssIDE6QUNfQkUsIDI6QUNfVkksIDM6QUNfVk8gKi8KLQl1OCBDd21pbls0XTsKLQl1OCBDd21heFs0XTsKLQl1MTYgVHhvcFs0XTsJCS8qIGluIHVuaXQgb2YgMzItdXMgKi8KLQlCT09MRUFOIGJBQ01bNF07CS8qIDE6IEFkbWlzc2lvbiBDb250cm9sIG9mIEFDX0JLIGlzIG1hbmRhdG9yeSAqLwotfTsKLQotLyogUUJTUyBMT0FEIGluZm9ybWF0aW9uIGZyb20gUUFQJ3MgQkVBQ09OL1Byb2JlUnNwICovCi1zdHJ1Y3QgcnRfcWJzc19sb2FkX3Bhcm0gewotCUJPT0xFQU4gYlZhbGlkOwkJLyogMTogdmFyaWFibGUgY29udGFpbnMgdmFsaWQgdmFsdWUgKi8KLQl1MTYgU3RhTnVtOwotCXU4IENoYW5uZWxVdGlsaXphdGlvbjsKLQl1MTYgUmVtYWluaW5nQWRtaXNzaW9uQ29udHJvbDsJLyogaW4gdW5pdCBvZiAzMi11cyAqLwotfTsKLQotLyogUUJTUyBJbmZvIGZpZWxkIGluIFFTVEEncyBhc3NvYyByZXEgKi8KLXN0cnVjdCBQQUNLRUQgcnRfcWJzc19zdGFfaW5mb19wYXJtIHsKLQl1OCBVQVBTRF9BQ19WTzoxOwotCXU4IFVBUFNEX0FDX1ZJOjE7Ci0JdTggVUFQU0RfQUNfQks6MTsKLQl1OCBVQVBTRF9BQ19CRToxOwotCXU4IFJzdjE6MTsKLQl1OCBNYXhTUExlbmd0aDoyOwotCXU4IFJzdjI6MTsKLX07Ci0KLS8qIFFCU1MgSW5mbyBmaWVsZCBpbiBRQVAncyBCZWFjb24vUHJvYmVSc3AgKi8KLXN0cnVjdCBQQUNLRUQgcnRfcWJzc19hcF9pbmZvX3Bhcm0gewotCXU4IFBhcmFtU2V0Q291bnQ6NDsKLQl1OCBSc3Y6MzsKLQl1OCBVQVBTRDoxOwotfTsKLQotLyogUU9TIENhcGFiaWxpdHkgcmVwb3J0ZWQgaW4gUUFQJ3MgQkVBQ09OL1Byb2JlUnNwICovCi0vKiBRT1MgQ2FwYWJpbGl0eSBzZW50IG91dCBpbiBRU1RBJ3MgQXNzb2NpYXRlUmVxL1JlQXNzb2NpYXRlUmVxICovCi1zdHJ1Y3QgcnRfcW9zX2NhcGFiaWxpdHlfcGFybSB7Ci0JQk9PTEVBTiBiVmFsaWQ7CQkvKiAxOiB2YXJpYWJsZSBjb250YWlucyB2YWxpZCB2YWx1ZSAqLwotCUJPT0xFQU4gYlFBY2s7Ci0JQk9PTEVBTiBiUXVldWVSZXF1ZXN0OwotCUJPT0xFQU4gYlR4b3BSZXF1ZXN0OwotLyogIEJPT0xFQU4gICAgIGJNb3JlRGF0YUFjazsgKi8KLQl1OCBFZGNhVXBkYXRlQ291bnQ7Ci19OwotCi1zdHJ1Y3QgcnRfd3BhX2llIHsKLQl1OCBJRUxlbjsKLQl1OCBJRVtNQVhfQ1VTVE9NX0xFTl07Ci19OwotCi1zdHJ1Y3QgcnRfYnNzX2VudHJ5IHsKLQl1OCBCc3NpZFtNQUNfQUREUl9MRU5dOwotCXU4IENoYW5uZWw7Ci0JdTggQ2VudHJhbENoYW5uZWw7CS8qU3RvcmUgdGhlIHdpZGUtYmFuZCBjZW50cmFsIGNoYW5uZWwgZm9yIDQwTUh6LiB1c2VkIGluIDQwTUh6IEFQLiBPciB0aGlzIGlzIHRoZSBzYW1lIGFzIENoYW5uZWwuICovCi0JdTggQnNzVHlwZTsKLQl1MTYgQXRpbVdpbjsKLQl1MTYgQmVhY29uUGVyaW9kOwotCi0JdTggU3VwUmF0ZVtNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU107Ci0JdTggU3VwUmF0ZUxlbjsKLQl1OCBFeHRSYXRlW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXTsKLQl1OCBFeHRSYXRlTGVuOwotCXN0cnVjdCBydF9odF9jYXBhYmlsaXR5X2llIEh0Q2FwYWJpbGl0eTsKLQl1OCBIdENhcGFiaWxpdHlMZW47Ci0Jc3RydWN0IHJ0X2FkZF9odF9pbmZvX2llIEFkZEh0SW5mbzsJLyogQVAgbWlnaHQgdXNlIHRoaXMgYWRkaXRpb25hbCBodCBpbmZvIElFICovCi0JdTggQWRkSHRJbmZvTGVuOwotCXU4IE5ld0V4dENoYW5PZmZzZXQ7Ci0JY2hhciBSc3NpOwotCXU4IFByaXZhY3k7CQkvKiBJbmRpY2F0ZSBzZWN1cml0eSBmdW5jdGlvbiBPTi9PRkYuIERvbid0IG1lc3MgdXAgd2l0aCBhdXRoIG1vZGUuICovCi0JdTggSGlkZGVuOwotCi0JdTE2IER0aW1QZXJpb2Q7Ci0JdTE2IENhcGFiaWxpdHlJbmZvOwotCi0JdTE2IENmcENvdW50OwotCXUxNiBDZnBQZXJpb2Q7Ci0JdTE2IENmcE1heER1cmF0aW9uOwotCXUxNiBDZnBEdXJSZW1haW5pbmc7Ci0JdTggU3NpZExlbjsKLQljaGFyIFNzaWRbTUFYX0xFTl9PRl9TU0lEXTsKLQotCXVuc2lnbmVkIGxvbmcgTGFzdEJlYWNvblJ4VGltZTsJLyogT1MncyB0aW1lc3RhbXAgKi8KLQotCUJPT0xFQU4gYlNFUzsKLQotCS8qIE5ldyBmb3IgV1BBMiAqLwotCXN0cnVjdCBydF9jaXBoZXJfc3VpdGUgV1BBOwkvKiBBUCBhbm5vdW5jZWQgV1BBIGNpcGhlciBzdWl0ZSAqLwotCXN0cnVjdCBydF9jaXBoZXJfc3VpdGUgV1BBMjsJLyogQVAgYW5ub3VuY2VkIFdQQTIgY2lwaGVyIHN1aXRlICovCi0KLQkvKiBOZXcgZm9yIG1pY3Jvc29mdCBXUEEgc3VwcG9ydCAqLwotCXN0cnVjdCBydF9uZGlzXzgwMl8xMV9maXhlZF9pZXMgRml4SUVzOwotCU5ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREUgQXV0aE1vZGVBdXg7CS8qIEFkZGl0aW9uIG1vZGUgZm9yIFdQQTIgLyBXUEEgY2FwYWJsZSBBUCAqLwotCU5ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREUgQXV0aE1vZGU7Ci0JTkRJU184MDJfMTFfV0VQX1NUQVRVUyBXZXBTdGF0dXM7CS8qIFVuaWNhc3QgRW5jcnlwdGlvbiBBbGdvcml0aG0gZXh0cmFjdCBmcm9tIFZBUl9JRSAqLwotCXUxNiBWYXJJRUxlbjsJLyogTGVuZ3RoIG9mIG5leHQgVklFIGluY2x1ZGUgRUlEICYgTGVuZ3RoICovCi0JdTggVmFySUVzW01BWF9WSUVfTEVOXTsKLQotCS8qIENDWCBDa2lwIGluZm9ybWF0aW9uICovCi0JdTggQ2tpcEZsYWc7Ci0KLQkvKiBDQ1ggMiBUU0YgKi8KLQl1OCBQVFNGWzRdOwkJLyogUGFyZW50IFRTRiAqLwotCXU4IFRUU0ZbOF07CQkvKiBUYXJnZXQgVFNGICovCi0KLQkvKiA4MDIuMTFlIGQ5LCBhbmQgV01NICovCi0Jc3RydWN0IHJ0X2VkY2FfcGFybSBFZGNhUGFybTsKLQlzdHJ1Y3QgcnRfcW9zX2NhcGFiaWxpdHlfcGFybSBRb3NDYXBhYmlsaXR5OwotCXN0cnVjdCBydF9xYnNzX2xvYWRfcGFybSBRYnNzTG9hZDsKLQlzdHJ1Y3QgcnRfd3BhX2llIFdwYUlFOwotCXN0cnVjdCBydF93cGFfaWUgUnNuSUU7Ci19OwotCi1zdHJ1Y3QgcnRfYnNzX3RhYmxlIHsKLQl1OCBCc3NOcjsKLQl1OCBCc3NPdmVybGFwTnI7Ci0Jc3RydWN0IHJ0X2Jzc19lbnRyeSBCc3NFbnRyeVtNQVhfTEVOX09GX0JTU19UQUJMRV07Ci19OwotCi1zdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtIHsKLQl1bnNpZ25lZCBsb25nIE1hY2hpbmU7Ci0JdW5zaWduZWQgbG9uZyBNc2dUeXBlOwotCXVuc2lnbmVkIGxvbmcgTXNnTGVuOwotCXU4IE1zZ1tNR01UX0RNQV9CVUZGRVJfU0laRV07Ci0JTEFSR0VfSU5URUdFUiBUaW1lU3RhbXA7Ci0JdTggUnNzaTA7Ci0JdTggUnNzaTE7Ci0JdTggUnNzaTI7Ci0JdTggU2lnbmFsOwotCXU4IENoYW5uZWw7Ci0JdTggV2NpZDsKLQlCT09MRUFOIE9jY3VwaWVkOwotfTsKLQotc3RydWN0IHJ0X21sbWVfcXVldWUgewotCXVuc2lnbmVkIGxvbmcgTnVtOwotCXVuc2lnbmVkIGxvbmcgSGVhZDsKLQl1bnNpZ25lZCBsb25nIFRhaWw7Ci0Jc3BpbmxvY2tfdCBMb2NrOwotCXN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gRW50cnlbTUFYX0xFTl9PRl9NTE1FX1FVRVVFXTsKLX07Ci0KLXR5cGVkZWYgdm9pZCgqU1RBVEVfTUFDSElORV9GVU5DKSAodm9pZCAqQWRhcHRvciwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSk7Ci0KLXN0cnVjdCBydF9zdGF0ZV9tYWNoaW5lIHsKLQl1bnNpZ25lZCBsb25nIEJhc2U7Ci0JdW5zaWduZWQgbG9uZyBOclN0YXRlOwotCXVuc2lnbmVkIGxvbmcgTnJNc2c7Ci0JdW5zaWduZWQgbG9uZyBDdXJyU3RhdGU7Ci0JU1RBVEVfTUFDSElORV9GVU5DICpUcmFuc0Z1bmM7Ci19OwotCi0vKiBNTE1FIEFVWCBkYXRhIHN0cnVjdHVyZSB0aGF0IGhvbGRzIHRlbXBvcmFybGl5IHNldHRpbmdzIGR1cmluZyBhIGNvbm5lY3Rpb24gYXR0ZW1wdC4gKi8KLS8qIE9uY2UgdGhpcyBhdHRlbXB0IHN1Y2NlZWRzLCBhbGwgc2V0dGluZ3Mgd2lsbCBiZSBjb3B5IHRvIHBBZC0+U3RhQWN0aXZlLiAqLwotLyogQSBjb25uZWN0aW9uIGF0dGVtcHQgKHVzZXIgc2V0IE9JRCwgcm9hbWluZywgQ0NYIGZhc3Qgcm9hbWluZywuLikgY29uc2lzdHMgb2YgKi8KLS8qIHNldmVyYWwgc3RlcHMgKEpPSU4sIEFVVEgsIEFTU09DIG9yIFJFQVNTT0MpIGFuZCBtYXkgZmFpbCBhdCBhbnkgc3RlcC4gV2UgcHVycG9zZWx5ICovCi0vKiBzZXBhcmF0ZSB0aGlzIHVuZGVyLXRyaWFsIHNldHRpbmdzIGF3YXkgZnJvbSBwQWQtPlN0YUFjdGl2ZSBzbyB0aGF0IG9uY2UgKi8KLS8qIHRoaXMgbmV3IGF0dGVtcHQgZmFpbGVkLCBkcml2ZXIgY2FuIGF1dG8tcmVjb3ZlciBiYWNrIHRvIHRoZSBhY3RpdmUgc2V0dGluZ3MuICovCi1zdHJ1Y3QgcnRfbWxtZV9hdXggewotCXU4IEJzc1R5cGU7Ci0JdTggU3NpZFtNQVhfTEVOX09GX1NTSURdOwotCXU4IFNzaWRMZW47Ci0JdTggQnNzaWRbTUFDX0FERFJfTEVOXTsKLQl1OCBBdXRvUmVjb25uZWN0U3NpZFtNQVhfTEVOX09GX1NTSURdOwotCXU4IEF1dG9SZWNvbm5lY3RTc2lkTGVuOwotCXUxNiBBbGc7Ci0JdTggU2NhblR5cGU7Ci0JdTggQ2hhbm5lbDsKLQl1OCBDZW50cmFsQ2hhbm5lbDsKLQl1MTYgQWlkOwotCXUxNiBDYXBhYmlsaXR5SW5mbzsKLQl1MTYgQmVhY29uUGVyaW9kOwotCXUxNiBDZnBNYXhEdXJhdGlvbjsKLQl1MTYgQ2ZwUGVyaW9kOwotCXUxNiBBdGltV2luOwotCi0JLyogQ29weSBzdXBwb3J0ZWQgcmF0ZSBmcm9tIGRlc2lyZWQgQVAncyBiZWFjb24uIFdlIGFyZSB0cnlpbmcgdG8gbWF0Y2ggKi8KLQkvKiBBUCdzIHN1cHBvcnRlZCBhbmQgZXh0ZW5kZWQgcmF0ZSBzZXR0aW5ncy4gKi8KLQl1OCBTdXBSYXRlW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXTsKLQl1OCBFeHRSYXRlW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXTsKLQl1OCBTdXBSYXRlTGVuOwotCXU4IEV4dFJhdGVMZW47Ci0Jc3RydWN0IHJ0X2h0X2NhcGFiaWxpdHlfaWUgSHRDYXBhYmlsaXR5OwotCXU4IEh0Q2FwYWJpbGl0eUxlbjsKLQlzdHJ1Y3QgcnRfYWRkX2h0X2luZm9faWUgQWRkSHRJbmZvOwkvKiBBUCBtaWdodCB1c2UgdGhpcyBhZGRpdGlvbmFsIGh0IGluZm8gSUUgKi8KLQl1OCBOZXdFeHRDaGFubmVsT2Zmc2V0OwotCS8qc3RydWN0IHJ0X2h0X2NhcGFiaWxpdHkgICAgICBTdXBwb3J0ZWRIdFBoeTsgKi8KLQotCS8qIG5ldyBmb3IgUU9TICovCi0Jc3RydWN0IHJ0X3Fvc19jYXBhYmlsaXR5X3Bhcm0gQVBRb3NDYXBhYmlsaXR5OwkvKiBRT1MgY2FwYWJpbGl0eSBvZiB0aGUgY3VycmVudCBhc3NvY2lhdGVkIEFQICovCi0Jc3RydWN0IHJ0X2VkY2FfcGFybSBBUEVkY2FQYXJtOwkvKiBFRENBIHBhcmFtZXRlcnMgb2YgdGhlIGN1cnJlbnQgYXNzb2NpYXRlZCBBUCAqLwotCXN0cnVjdCBydF9xYnNzX2xvYWRfcGFybSBBUFFic3NMb2FkOwkvKiBRQlNTIGxvYWQgb2YgdGhlIGN1cnJlbnQgYXNzb2NpYXRlZCBBUCAqLwotCi0JLyogbmV3IHRvIGtlZXAgUmFsaW5rIHNwZWNpZmljIGZlYXR1cmUgKi8KLQl1bnNpZ25lZCBsb25nIEFQUmFsaW5rSWU7Ci0KLQlzdHJ1Y3QgcnRfYnNzX3RhYmxlIFNzaWRCc3NUYWI7CS8qIEFQIGxpc3QgZm9yIHRoZSBzYW1lIFNTSUQgKi8KLQlzdHJ1Y3QgcnRfYnNzX3RhYmxlIFJvYW1UYWI7CS8qIEFQIGxpc3QgZWxpZ2libGUgZm9yIHJvYW1pbmcgKi8KLQl1bnNpZ25lZCBsb25nIEJzc0lkeDsKLQl1bnNpZ25lZCBsb25nIFJvYW1JZHg7Ci0KLQlCT09MRUFOIEN1cnJSZXFJc0Zyb21OZGlzOwotCi0Jc3RydWN0IHJ0X3JhbGlua190aW1lciBCZWFjb25UaW1lciwgU2NhblRpbWVyOwotCXN0cnVjdCBydF9yYWxpbmtfdGltZXIgQXV0aFRpbWVyOwotCXN0cnVjdCBydF9yYWxpbmtfdGltZXIgQXNzb2NUaW1lciwgUmVhc3NvY1RpbWVyLCBEaXNhc3NvY1RpbWVyOwotfTsKLQotc3RydWN0IHJ0X21sbWVfYWRkYmFfcmVxIHsKLQl1OCBXY2lkOwkJLyogKi8KLQl1OCBwQWRkcltNQUNfQUREUl9MRU5dOwotCXU4IEJhQnVmU2l6ZTsKLQl1MTYgVGltZU91dFZhbHVlOwotCXU4IFRJRDsKLQl1OCBUb2tlbjsKLQl1MTYgQmFTdGFydFNlcTsKLX07Ci0KLXN0cnVjdCBydF9tbG1lX2RlbGJhX3JlcSB7Ci0JdTggV2NpZDsJCS8qICovCi0JdTggQWRkcltNQUNfQUREUl9MRU5dOwotCXU4IFRJRDsKLQl1OCBJbml0aWF0b3I7Ci19OwotCi0vKiBhc3NvYyBzdHJ1Y3QgaXMgZXF1YWwgdG8gcmVhc3NvYyAqLwotc3RydWN0IHJ0X21sbWVfYXNzb2NfcmVxIHsKLQl1OCBBZGRyW01BQ19BRERSX0xFTl07Ci0JdTE2IENhcGFiaWxpdHlJbmZvOwotCXUxNiBMaXN0ZW5JbnR2OwotCXVuc2lnbmVkIGxvbmcgVGltZW91dDsKLX07Ci0KLXN0cnVjdCBydF9tbG1lX2Rpc2Fzc29jX3JlcSB7Ci0JdTggQWRkcltNQUNfQUREUl9MRU5dOwotCXUxNiBSZWFzb247Ci19OwotCi1zdHJ1Y3QgcnRfbWxtZV9hdXRoX3JlcSB7Ci0JdTggQWRkcltNQUNfQUREUl9MRU5dOwotCXUxNiBBbGc7Ci0JdW5zaWduZWQgbG9uZyBUaW1lb3V0OwotfTsKLQotc3RydWN0IHJ0X21sbWVfZGVhdXRoX3JlcSB7Ci0JdTggQWRkcltNQUNfQUREUl9MRU5dOwotCXUxNiBSZWFzb247Ci19OwotCi1zdHJ1Y3QgcnRfbWxtZV9qb2luX3JlcSB7Ci0JdW5zaWduZWQgbG9uZyBCc3NJZHg7Ci19OwotCi1zdHJ1Y3QgcnRfbWxtZV9zY2FuX3JlcSB7Ci0JdTggQnNzaWRbTUFDX0FERFJfTEVOXTsKLQl1OCBCc3NUeXBlOwotCXU4IFNjYW5UeXBlOwotCXU4IFNzaWRMZW47Ci0JY2hhciBTc2lkW01BWF9MRU5fT0ZfU1NJRF07Ci19OwotCi1zdHJ1Y3QgcnRfbWxtZV9zdGFydF9yZXEgewotCWNoYXIgU3NpZFtNQVhfTEVOX09GX1NTSURdOwotCXU4IFNzaWRMZW47Ci19OwotCi1zdHJ1Y3QgUEFDS0VEIHJ0X2VpZCB7Ci0JdTggRWlkOwotCXU4IExlbjsKLQl1OCBPY3RldFsxXTsKLX07Ci0KLXN0cnVjdCBQQUNLRUQgcnRfcnRtcF90eF9yYXRlX3N3aXRjaCB7Ci0JdTggSXRlbU5vOwotCXU4IFNUQkM6MTsKLQl1OCBTaG9ydEdJOjE7Ci0JdTggQlc6MTsKLQl1OCBSc3YxOjE7Ci0JdTggTW9kZToyOwotCXU4IFJzdjI6MjsKLQl1OCBDdXJyTUNTOwotCXU4IFRyYWluVXA7Ci0JdTggVHJhaW5Eb3duOwotfTsKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT0gQVAgbWxtZS5oID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLSNkZWZpbmUgVEJUVF9QUkVMT0FEX1RJTUUgICAgICAgMzg0CS8qIHVzZWMuIExvbWdQcmVhbWJsZSArIDI0LWJ5dGUgYXQgMU1icHMgKi8KLSNkZWZpbmUgREVGQVVMVF9EVElNX1BFUklPRCAgICAgMQotCi0jZGVmaW5lIE1BQ19UQUJMRV9BR0VPVVRfVElNRQkJCTMwMAkvKiB1bml0OiBzZWMgKi8KLSNkZWZpbmUgTUFDX1RBQkxFX0FTU09DX1RJTUVPVVQJCQk1CS8qIHVuaXQ6IHNlYyAqLwotI2RlZmluZSBNQUNfVEFCTEVfRlVMTChUYWIpCQkJCSgoVGFiKS5zaXplID09IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKQotCi0vKiBBUCBzaGFsbCBkcm9wIHRoZSBzdGEgaWYgY29udGludWUgVHggZmFpbCBjb3VudCByZWFjaCBpdC4gKi8KLSNkZWZpbmUgTUFDX0VOVFJZX0xJRkVfQ0hFQ0tfQ05UCQkyMAkvKiBwYWNrZXQgY250LiAqLwotCi0vKiBWYWx1ZSBkb21haW4gb2YgcE1hY0VudHJ5LT5Tc3QgKi8KLXR5cGVkZWYgZW51bSBfU3N0IHsKLQlTU1RfTk9UX0FVVEgsCQkvKiAwOiBlcXVpdmFsZW50IHRvIElFRUUgODAyLjExLzE5OTkgc3RhdGUgMSAqLwotCVNTVF9BVVRILAkJLyogMTogZXF1aXZhbGVudCB0byBJRUVFIDgwMi4xMS8xOTk5IHN0YXRlIDIgKi8KLQlTU1RfQVNTT0MJCS8qIDI6IGVxdWl2YWxlbnQgdG8gSUVFRSA4MDIuMTEvMTk5OSBzdGF0ZSAzICovCi19IFNTVDsKLQotLyogdmFsdWUgZG9tYWluIG9mIHBNYWNFbnRyeS0+QXV0aFN0YXRlICovCi10eXBlZGVmIGVudW0gX0F1dGhTdGF0ZSB7Ci0JQVNfTk9UX0FVVEgsCi0JQVNfQVVUSF9PUEVOLAkJLyogU1RBIGhhcyBiZWVuIGF1dGhlbnRpY2F0ZWQgdXNpbmcgT1BFTiBTWVNURU0gKi8KLQlBU19BVVRIX0tFWSwJCS8qIFNUQSBoYXMgYmVlbiBhdXRoZW50aWNhdGVkIHVzaW5nIFNIQVJFRCBLRVkgKi8KLQlBU19BVVRIRU5USUNBVElORwkvKiBTVEEgaXMgd2FpdGluZyBmb3IgQVVUSCBzZXEjMyB1c2luZyBTSEFSRUQgS0VZICovCi19IEFVVEhfU1RBVEU7Ci0KLS8qZm9yLXdwYSB2YWx1ZSBkb21haW4gb2YgcE1hY0VudHJ5LT5XcGFTdGF0ZSAgODAyLjFpIEQzICAgcC4xMTQgKi8KLXR5cGVkZWYgZW51bSBfQXBXcGFTdGF0ZSB7Ci0JQVNfTk9UVVNFLAkJLyogMCAqLwotCUFTX0RJU0NPTk5FQ1QsCQkvKiAxICovCi0JQVNfRElTQ09OTkVDVEVELAkvKiAyICovCi0JQVNfSU5JVElBTElaRSwJCS8qIDMgKi8KLQlBU19BVVRIRU5USUNBVElPTiwJLyogNCAqLwotCUFTX0FVVEhFTlRJQ0FUSU9OMiwJLyogNSAqLwotCUFTX0lOSVRQTUssCQkvKiA2ICovCi0JQVNfSU5JVFBTSywJCS8qIDcgKi8KLQlBU19QVEtTVEFSVCwJCS8qIDggKi8KLQlBU19QVEtJTklUX05FR09USUFUSU5HLAkvKiA5ICovCi0JQVNfUFRLSU5JVERPTkUsCQkvKiAxMCAqLwotCUFTX1VQREFURUtFWVMsCQkvKiAxMSAqLwotCUFTX0lOVEVHUklUWV9GQUlMVVJFLAkvKiAxMiAqLwotCUFTX0tFWVVQREFURSwJCS8qIDEzICovCi19IEFQX1dQQV9TVEFURTsKLQotLyogZm9yLXdwYSB2YWx1ZSBkb21haW4gb2YgcE1hY0VudHJ5LT5XcGFTdGF0ZSAgODAyLjFpIEQzICAgcC4xMTQgKi8KLXR5cGVkZWYgZW51bSBfR1RLU3RhdGUgewotCVJFS0VZX05FR09USUFUSU5HLAotCVJFS0VZX0VTVEFCTElTSEVELAotCUtFWUVSUk9SLAotfSBHVEtfU1RBVEU7Ci0KLS8qICBmb3Itd3BhICB2YWx1ZSBkb21haW4gb2YgcE1hY0VudHJ5LT5XcGFTdGF0ZSAgODAyLjFpIEQzICAgcC4xMTQgKi8KLXR5cGVkZWYgZW51bSBfV3BhR1RLU3RhdGUgewotCVNFVEtFWVMsCi0JU0VUS0VZU19ET05FLAotfSBXUEFfR1RLX1NUQVRFOwotLyogPT09PT09PT09PT09PT09PT09PT09PSBlbmQgb2YgQVAgbWxtZS5oID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQotI2VuZGlmIC8qIE1MTUVfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL29pZC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9vaWQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWEyNWYwZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL29pZC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzc5ICswLDAgQEAKLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUmFsaW5rIFRlY2ggSW5jLgotICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAotICogSHNpbmNodSBDb3VudHkgMzAyLAotICogVGFpd2FuLCBSLk8uQy4KLSAqCi0gKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0JTW9kdWxlIE5hbWU6Ci0Jb2lkLmgKLQotCUFic3RyYWN0OgotCi0JUmV2aXNpb24gSGlzdG9yeToKLQlXaG8JCQlXaGVuCQkJV2hhdAotCS0tLS0tLS0tCS0tLS0tLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlOYW1lCQkJRGF0ZQkJCU1vZGlmaWNhdGlvbiBsb2dzCi0JSnVzdGluIFAuIE1hdHRvY2sgCTExLzA3LzIwMTAJRml4IHR5cG9zIGluIGNvbW1lbnRzCi0qLwotI2lmbmRlZiBfT0lEX0hfCi0jZGVmaW5lIF9PSURfSF8KLQotLyojaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4gKi8KLQotI2lmbmRlZiBUUlVFCi0jZGVmaW5lIFRSVUUJCQkJMQotI2VuZGlmCi0jaWZuZGVmIEZBTFNFCi0jZGVmaW5lIEZBTFNFCQkJCTAKLSNlbmRpZgotLyogKi8KLS8qIElFRUUgODAyLjExIFN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zICovCi0vKiAqLwotI2RlZmluZSBNQVhfVFhfUE9XRVJfTEVWRUwgICAgICAgICAgICAgIDEwMAkvKiBtVyAqLwotI2RlZmluZSBNQVhfUlNTSV9UUklHR0VSICAgICAgICAgICAgICAgIC0xMAkvKiBkQm0gKi8KLSNkZWZpbmUgTUlOX1JTU0lfVFJJR0dFUiAgICAgICAgICAgICAgICAtMjAwCS8qIGRCbSAqLwotI2RlZmluZSBNQVhfRlJBR19USFJFU0hPTEQgICAgICAgICAgICAgIDIzNDYJLyogYnl0ZSBjb3VudCAqLwotI2RlZmluZSBNSU5fRlJBR19USFJFU0hPTEQgICAgICAgICAgICAgIDI1NgkvKiBieXRlIGNvdW50ICovCi0jZGVmaW5lIE1BWF9SVFNfVEhSRVNIT0xEICAgICAgICAgICAgICAgMjM0NwkvKiBieXRlIGNvdW50ICovCi0KLS8qIG5ldyB0eXBlcyBmb3IgTWVkaWEgU3BlY2lmaWMgSW5kaWNhdGlvbnMgKi8KLS8qIEV4dGVuc2lvbiBjaGFubmVsIG9mZnNldCAqLwotI2RlZmluZSBFWFRDSEFfTk9ORQkJCTAKLSNkZWZpbmUgRVhUQ0hBX0FCT1ZFCQkweDEKLSNkZWZpbmUgRVhUQ0hBX0JFTE9XCQkweDMKLQotLyogQlcgKi8KLSNkZWZpbmUgQkFORF9XSURUSF8yMAkJMAotI2RlZmluZSBCQU5EX1dJRFRIXzQwCQkxCi0jZGVmaW5lIEJBTkRfV0lEVEhfQk9USAkJMgotI2RlZmluZSBCQU5EX1dJRFRIXzEwCQkzCS8qIDgwMi4xMWogaGFzIDEwTUh6LiBUaGlzIGRlZmluaXRpb24gaXMgZm9yIGludGVybmFsIHVzYWdlLiBkb2Vzbid0IGZpbGwgaW4gdGhlIElFIG9yIG90aGVyIGZpZWxkLiAqLwotLyogU0hPUlRHSSAqLwotI2RlZmluZSBHQVBfSU5URVJWQUxfNDAwCTEJLyogb25seSBzdXBwb3J0IGluIEhUIG1vZGUgKi8KLSNkZWZpbmUgR0FQX0lOVEVSVkFMXzgwMAkwCi0jZGVmaW5lIEdBUF9JTlRFUlZBTF9CT1RICTIKLQotI2RlZmluZSBOZGlzTWVkaWFTdGF0ZUNvbm5lY3RlZAkJCTEKLSNkZWZpbmUgTmRpc01lZGlhU3RhdGVEaXNjb25uZWN0ZWQJCTAKLQotI2RlZmluZSBORElTXzgwMl8xMV9MRU5HVEhfU1NJRCAgICAgICAgIDMyCi0jZGVmaW5lIE5ESVNfODAyXzExX0xFTkdUSF9SQVRFUyAgICAgICAgOAotI2RlZmluZSBORElTXzgwMl8xMV9MRU5HVEhfUkFURVNfRVggICAgIDE2Ci0jZGVmaW5lIE1BQ19BRERSX0xFTkdUSCAgICAgICAgICAgICAgICAgNgotLyojZGVmaW5lIE1BWF9OVU1fT0ZfQ0hTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ5IC8vIDE0IGNoYW5uZWxzIEAyLjRHICsgIDEyQFVOSUkgKyA0IEBNTUFDICsgMTEgQEhpcGVyTEFOMiArIDcgQEphcGFuICsgMSBhcyBOVUxMIHRlcm1pbmF0aW9uICovCi0jZGVmaW5lIE1BWF9OVU1fT0ZfQ0hTCQkJCTU0CS8qIDE0IGNoYW5uZWxzIEAyLjRHICsgIDEyQFVOSUkobG93ZXIvbWlkZGxlKSArIDE2QEhpcGVyTEFOMiArIDExQFVOSUkodXBwZXIpICsgMCBASmFwYW4gKyAxIGFzIE5VTEwgdGVybWluYXRpb24gKi8KLSNkZWZpbmUgTUFYX05VTUJFUl9PRl9FVkVOVAkJCQkxMAkvKiBlbnRyeSAjIGluIEVWRU5UIHRhYmxlICovCi0jZGVmaW5lIE1BWF9OVU1CRVJfT0ZfTUFDCQkJCTMyCS8qIGlmIE1BWF9NQlNTSURfTlVNIGlzIDgsIHRoaXMgdmFsdWUgY2FuJ3QgYmUgbGFyZ2VyIHRoYW4gMjExICovCi0jZGVmaW5lIE1BWF9OVU1CRVJfT0ZfQUNMCQkJCTY0Ci0jZGVmaW5lIE1BWF9MRU5HVEhfT0ZfU1VQUE9SVF9SQVRFUwkJMTIJLyogMSwgMiwgNS41LCAxMSwgNiwgOSwgMTIsIDE4LCAyNCwgMzYsIDQ4LCA1NCAqLwotI2RlZmluZSBNQVhfTlVNQkVSX09GX0RMU19FTlRSWQkJCTQKLQotI2RlZmluZSBSVF9RVUVSWV9TSUdOQUxfQ09OVEVYVAkJCQkweDA0MDIKLSNkZWZpbmUgUlRfU0VUX0lBUFBfUElECQkJCTB4MDQwNAotI2RlZmluZSBSVF9TRVRfQVBEX1BJRAkJCQkJCTB4MDQwNQotI2RlZmluZSBSVF9TRVRfREVMX01BQ19FTlRSWQkJCQkweDA0MDYKLSNkZWZpbmUgUlRfUVVFUllfRVZFTlRfVEFCTEUJCQkweDA0MDcKLS8qICovCi0vKiBJRUVFIDgwMi4xMSBPSURzICovCi0vKiAqLwotI2RlZmluZQlPSURfR0VUX1NFVF9UT0dHTEUJCQkweDgwMDAKLSNkZWZpbmUJT0lEX0dFVF9TRVRfRlJPTV9VSQkJCTB4NDAwMAotCi0jZGVmaW5lIE9JRF84MDJfMTFfQUREX1dFUAkJCTB4MDExMgotI2RlZmluZSBPSURfODAyXzExX0RJU0FTU09DSUFURQkJCTB4MDExNAotI2RlZmluZSBPSURfODAyXzExX0JTU0lEX0xJU1RfU0NBTgkJMHgwNTA4Ci0jZGVmaW5lIE9JRF84MDJfMTFfU1NJRAkJCQkweDA1MDkKLSNkZWZpbmUgT0lEXzgwMl8xMV9CU1NJRAkJCTB4MDUwQQotI2RlZmluZSBPSURfODAyXzExX01JQ19GQUlMVVJFX1JFUE9SVF9GUkFNRQkweDA1MjgKLQotI2RlZmluZQlSVF9PSURfREVWSUNFX05BTUUJCQkJCQkJMHgwNjA3Ci0jZGVmaW5lCVJUX09JRF9WRVJTSU9OX0lORk8JCQkJCQkJMHgwNjA4Ci0jZGVmaW5lCU9JRF84MDJfMTFfQlNTSURfTElTVAkJCQkJCTB4MDYwOQotI2RlZmluZQlPSURfODAyXzNfQ1VSUkVOVF9BRERSRVNTCQkJCQkweDA2MEEKLSNkZWZpbmUJT0lEX0dFTl9NRURJQV9DT05ORUNUX1NUQVRVUwkJCQkweDA2MEIKLSNkZWZpbmUJUlRfT0lEXzgwMl8xMV9RVUVSWV9MSU5LX1NUQVRVUwkJCQkweDA2MEMKLSNkZWZpbmUJT0lEXzgwMl8xMV9SU1NJCQkJCQkJCQkweDA2MEQKLSNkZWZpbmUJT0lEXzgwMl8xMV9TVEFUSVNUSUNTCQkJCQkJMHgwNjBFCi0jZGVmaW5lCU9JRF9HRU5fUkNWX09LCQkJCQkJCQkweDA2MEYKLSNkZWZpbmUJT0lEX0dFTl9SQ1ZfTk9fQlVGRkVSCQkJCQkJMHgwNjEwCi0jZGVmaW5lCVJUX09JRF84MDJfMTFfUVVFUllfRUVQUk9NX1ZFUlNJT04JCQkweDA2MTEKLSNkZWZpbmUJUlRfT0lEXzgwMl8xMV9RVUVSWV9GSVJNV0FSRV9WRVJTSU9OCQkweDA2MTIKLSNkZWZpbmUJUlRfT0lEXzgwMl8xMV9RVUVSWV9MQVNUX1JYX1JBVEUJCQkweDA2MTMKLSNkZWZpbmUJUlRfT0lEXzgwMl8xMV9UWF9QT1dFUl9MRVZFTF8xCQkJCTB4MDYxNAotI2RlZmluZQlSVF9PSURfODAyXzExX1FVRVJZX1BJRFZJRAkJCQkJMHgwNjE1Ci0vKmZvciBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUICovCi0jZGVmaW5lIE9JRF9TRVRfQ09VTlRFUk1FQVNVUkVTICAgICAgICAgICAgICAgICAgICAgMHgwNjE2Ci0jZGVmaW5lIFJUX09JRF9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUICAgICAgICAgICAgICAgMHgwNjIxCi0jZGVmaW5lIFJUX09JRF9XRV9WRVJTSU9OX0NPTVBJTEVEICAgICAgICAgICAgICAgICAgMHgwNjIyCi0jZGVmaW5lIFJUX09JRF9ORVdfRFJJVkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNjIzCi0KLSNkZWZpbmUgUlRfT0lEX0RSSVZFUl9ERVZJQ0VfTkFNRSAgICAgICAgICAgICAgICAgICAweDA2NDUKLSNkZWZpbmUgUlRfT0lEX1FVRVJZX01VTFRJUExFX0NBUkRfU1VQUE9SVCAgICAgICAgICAweDA2NDcKLQotdHlwZWRlZiBlbnVtIF9ORElTXzgwMl8xMV9TVEFUVVNfVFlQRSB7Ci0JTmRpczgwMl8xMVN0YXR1c1R5cGVfQXV0aGVudGljYXRpb24sCi0JTmRpczgwMl8xMVN0YXR1c1R5cGVfTWVkaWFTdHJlYW1Nb2RlLAotCU5kaXM4MDJfMTFTdGF0dXNUeXBlX1BNS0lEX0NhbmRpZGF0ZUxpc3QsCi0JTmRpczgwMl8xMVN0YXR1c1R5cGVNYXgJLyogbm90IGEgcmVhbCB0eXBlLCBkZWZpbmVkIGFzIGFuIHVwcGVyIGJvdW5kICovCi19IE5ESVNfODAyXzExX1NUQVRVU19UWVBFLCAqUE5ESVNfODAyXzExX1NUQVRVU19UWVBFOwotCi10eXBlZGVmIHU4IE5ESVNfODAyXzExX01BQ19BRERSRVNTWzZdOwotCi1zdHJ1Y3QgcnRfbmRpc184MDJfMTFfc3RhdHVzX2luZGljYXRpb24gewotCU5ESVNfODAyXzExX1NUQVRVU19UWVBFIFN0YXR1c1R5cGU7Ci19OwotCi0vKiBtYXNrIGZvciBhdXRoZW50aWNhdGlvbi9pbnRlZ3JpdHkgZmllbGRzICovCi0jZGVmaW5lIE5ESVNfODAyXzExX0FVVEhfUkVRVUVTVF9BVVRIX0ZJRUxEUyAgICAgICAgMHgwZgotCi0jZGVmaW5lIE5ESVNfODAyXzExX0FVVEhfUkVRVUVTVF9SRUFVVEggICAgICAgICAgICAgMHgwMQotI2RlZmluZSBORElTXzgwMl8xMV9BVVRIX1JFUVVFU1RfS0VZVVBEQVRFICAgICAgICAgIDB4MDIKLSNkZWZpbmUgTkRJU184MDJfMTFfQVVUSF9SRVFVRVNUX1BBSVJXSVNFX0VSUk9SICAgICAweDA2Ci0jZGVmaW5lIE5ESVNfODAyXzExX0FVVEhfUkVRVUVTVF9HUk9VUF9FUlJPUiAgICAgICAgMHgwRQotCi1zdHJ1Y3QgcnRfbmRpc184MDJfMTFfYXV0aGVudGljYXRpb25fcmVxdWVzdCB7Ci0JdW5zaWduZWQgbG9uZyBMZW5ndGg7CQkvKiBMZW5ndGggb2Ygc3RydWN0dXJlICovCi0JTkRJU184MDJfMTFfTUFDX0FERFJFU1MgQnNzaWQ7Ci0JdW5zaWduZWQgbG9uZyBGbGFnczsKLX07Ci0KLS8qQWRkZWQgbmV3IHR5cGVzIGZvciBQTUtJRCBDYW5kaWRhdGUgbGlzdHMuICovCi1zdHJ1Y3QgcnRfcG1raWRfY2FuZGlkYXRlIHsKLQlORElTXzgwMl8xMV9NQUNfQUREUkVTUyBCU1NJRDsKLQl1bnNpZ25lZCBsb25nIEZsYWdzOwotfTsKLQotc3RydWN0IHJ0X25kaXNfODAyXzExX3Bta2lkX2NhbmRpZGF0ZV9saXN0IHsKLQl1bnNpZ25lZCBsb25nIFZlcnNpb247CQkvKiBWZXJzaW9uIG9mIHRoZSBzdHJ1Y3R1cmUgKi8KLQl1bnNpZ25lZCBsb25nIE51bUNhbmRpZGF0ZXM7CS8qIE5vLiBvZiBwbWtpZCBjYW5kaWRhdGVzICovCi0Jc3RydWN0IHJ0X3Bta2lkX2NhbmRpZGF0ZSBDYW5kaWRhdGVMaXN0WzFdOwotfTsKLQotLypGbGFncyBmb3IgUE1LSUQgQ2FuZGlkYXRlIGxpc3Qgc3RydWN0dXJlICovCi0jZGVmaW5lIE5ESVNfODAyXzExX1BNS0lEX0NBTkRJREFURV9QUkVBVVRIX0VOQUJMRUQJMHgwMQotCi0vKiBBZGRlZCBuZXcgdHlwZXMgZm9yIE9GRE0gNUcgYW5kIDIuNEcgKi8KLXR5cGVkZWYgZW51bSBfTkRJU184MDJfMTFfTkVUV09SS19UWVBFIHsKLQlOZGlzODAyXzExRkgsCi0JTmRpczgwMl8xMURTLAotCU5kaXM4MDJfMTFPRkRNNSwKLQlOZGlzODAyXzExT0ZETTI0LAotCU5kaXM4MDJfMTFBdXRvbW9kZSwKLQlOZGlzODAyXzExT0ZETTVfTiwKLQlOZGlzODAyXzExT0ZETTI0X04sCi0JTmRpczgwMl8xMU5ldHdvcmtUeXBlTWF4CS8qIG5vdCBhIHJlYWwgdHlwZSwgZGVmaW5lZCBhcyBhbiB1cHBlciBib3VuZCAqLwotfSBORElTXzgwMl8xMV9ORVRXT1JLX1RZUEUsICpQTkRJU184MDJfMTFfTkVUV09SS19UWVBFOwotCi1zdHJ1Y3QgcnRfbmRpc184MDJfMTFfbmV0d29ya190eXBlX2xpc3QgewotCXUzMiBOdW1iZXJPZkl0ZW1zOwkvKiBpbiBsaXN0IGJlbG93LCBhdCBsZWFzdCAxICovCi0JTkRJU184MDJfMTFfTkVUV09SS19UWVBFIE5ldHdvcmtUeXBlWzFdOwotfTsKLQotdHlwZWRlZiBlbnVtIF9ORElTXzgwMl8xMV9QT1dFUl9NT0RFIHsKLQlOZGlzODAyXzExUG93ZXJNb2RlQ0FNLAotCU5kaXM4MDJfMTFQb3dlck1vZGVNQVhfUFNQLAotCU5kaXM4MDJfMTFQb3dlck1vZGVGYXN0X1BTUCwKLQlOZGlzODAyXzExUG93ZXJNb2RlTGVnYWN5X1BTUCwKLQlOZGlzODAyXzExUG93ZXJNb2RlTWF4CS8qIG5vdCBhIHJlYWwgbW9kZSwgZGVmaW5lZCBhcyBhbiB1cHBlciBib3VuZCAqLwotfSBORElTXzgwMl8xMV9QT1dFUl9NT0RFLCAqUE5ESVNfODAyXzExX1BPV0VSX01PREU7Ci0KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBORElTXzgwMl8xMV9UWF9QT1dFUl9MRVZFTDsJLyogaW4gbWlsbGl3YXR0cyAqLwotCi0vKiAqLwotLyogUmVjZWl2ZWQgU2lnbmFsIFN0cmVuZ3RoIEluZGljYXRpb24gKi8KLS8qICovCi10eXBlZGVmIGxvbmcgTkRJU184MDJfMTFfUlNTSTsJLyogaW4gZEJtICovCi0KLXN0cnVjdCBydF9uZGlzXzgwMl8xMV9jb25maWd1cmF0aW9uX2ZoIHsKLQl1bnNpZ25lZCBsb25nIExlbmd0aDsJCS8qIExlbmd0aCBvZiBzdHJ1Y3R1cmUgKi8KLQl1bnNpZ25lZCBsb25nIEhvcFBhdHRlcm47CS8qIEFzIGRlZmluZWQgYnkgODAyLjExLCBNU0Igc2V0ICovCi0JdW5zaWduZWQgbG9uZyBIb3BTZXQ7CQkvKiB0byBvbmUgaWYgbm9uLTgwMi4xMSAqLwotCXVuc2lnbmVkIGxvbmcgRHdlbGxUaW1lOwkvKiB1bml0cyBhcmUgS3VzZWMgKi8KLX07Ci0KLXN0cnVjdCBydF9uZGlzXzgwMl8xMV9jb25maWd1cmF0aW9uIHsKLQl1bnNpZ25lZCBsb25nIExlbmd0aDsJCS8qIExlbmd0aCBvZiBzdHJ1Y3R1cmUgKi8KLQl1bnNpZ25lZCBsb25nIEJlYWNvblBlcmlvZDsJLyogdW5pdHMgYXJlIEt1c2VjICovCi0JdW5zaWduZWQgbG9uZyBBVElNV2luZG93OwkvKiB1bml0cyBhcmUgS3VzZWMgKi8KLQl1bnNpZ25lZCBsb25nIERTQ29uZmlnOwkJLyogRnJlcXVlbmN5LCB1bml0cyBhcmUga0h6ICovCi0Jc3RydWN0IHJ0X25kaXNfODAyXzExX2NvbmZpZ3VyYXRpb25fZmggRkhDb25maWc7Ci19OwotCi1zdHJ1Y3QgcnRfbmRpc184MDJfMTFfc3RhdGlzdGljcyB7Ci0JdW5zaWduZWQgbG9uZyBMZW5ndGg7CQkvKiBMZW5ndGggb2Ygc3RydWN0dXJlICovCi0JTEFSR0VfSU5URUdFUiBUcmFuc21pdHRlZEZyYWdtZW50Q291bnQ7Ci0JTEFSR0VfSU5URUdFUiBNdWx0aWNhc3RUcmFuc21pdHRlZEZyYW1lQ291bnQ7Ci0JTEFSR0VfSU5URUdFUiBGYWlsZWRDb3VudDsKLQlMQVJHRV9JTlRFR0VSIFJldHJ5Q291bnQ7Ci0JTEFSR0VfSU5URUdFUiBNdWx0aXBsZVJldHJ5Q291bnQ7Ci0JTEFSR0VfSU5URUdFUiBSVFNTdWNjZXNzQ291bnQ7Ci0JTEFSR0VfSU5URUdFUiBSVFNGYWlsdXJlQ291bnQ7Ci0JTEFSR0VfSU5URUdFUiBBQ0tGYWlsdXJlQ291bnQ7Ci0JTEFSR0VfSU5URUdFUiBGcmFtZUR1cGxpY2F0ZUNvdW50OwotCUxBUkdFX0lOVEVHRVIgUmVjZWl2ZWRGcmFnbWVudENvdW50OwotCUxBUkdFX0lOVEVHRVIgTXVsdGljYXN0UmVjZWl2ZWRGcmFtZUNvdW50OwotCUxBUkdFX0lOVEVHRVIgRkNTRXJyb3JDb3VudDsKLQlMQVJHRV9JTlRFR0VSIFRLSVBMb2NhbE1JQ0ZhaWx1cmVzOwotCUxBUkdFX0lOVEVHRVIgVEtJUFJlbW90ZU1JQ0Vycm9yczsKLQlMQVJHRV9JTlRFR0VSIFRLSVBJQ1ZFcnJvcnM7Ci0JTEFSR0VfSU5URUdFUiBUS0lQQ291bnRlck1lYXN1cmVzSW52b2tlZDsKLQlMQVJHRV9JTlRFR0VSIFRLSVBSZXBsYXlzOwotCUxBUkdFX0lOVEVHRVIgQ0NNUEZvcm1hdEVycm9yczsKLQlMQVJHRV9JTlRFR0VSIENDTVBSZXBsYXlzOwotCUxBUkdFX0lOVEVHRVIgQ0NNUERlY3J5cHRFcnJvcnM7Ci0JTEFSR0VfSU5URUdFUiBGb3VyV2F5SGFuZHNoYWtlRmFpbHVyZXM7Ci19OwotCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgTkRJU184MDJfMTFfS0VZX0lOREVYOwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgTkRJU184MDJfMTFfS0VZX1JTQzsKLQotI2RlZmluZSBNQVhfUkFESVVTX1NSVl9OVU0JCQkyCS8qIDgwMi4xeCBmYWlsb3ZlciBudW1iZXIgKi8KLQotc3RydWN0IFBBQ0tFRCBydF9yYWRpdXNfc3J2X2luZm8gewotCXUzMiByYWRpdXNfaXA7Ci0JdTMyIHJhZGl1c19wb3J0OwotCXU4IHJhZGl1c19rZXlbNjRdOwotCXU4IHJhZGl1c19rZXlfbGVuOwotfTsKLQotc3RydWN0IFBBQ0tFRCBydF9yYWRpdXNfa2V5X2luZm8gewotCXU4IHJhZGl1c19zcnZfbnVtOwotCXN0cnVjdCBydF9yYWRpdXNfc3J2X2luZm8gcmFkaXVzX3Nydl9pbmZvW01BWF9SQURJVVNfU1JWX05VTV07Ci0JdTggaWVlZTgwMjF4V0VQOwkvKiBkeW5hbWljIFdFUCAqLwotCXU4IGtleV9pbmRleDsKLQl1OCBrZXlfbGVuZ3RoOwkvKiBsZW5ndGggb2Yga2V5IGluIGJ5dGVzICovCi0JdTgga2V5X21hdGVyaWFsWzEzXTsKLX07Ci0KLS8qIEl0J3MgdXNlZCBieSA4MDIuMXggZGFlbW9uIHRvIHJlcXVpcmUgcmVsYXRpdmUgY29uZmlndXJhdGlvbiAqLwotc3RydWN0IFBBQ0tFRCBydF9yYWRpdXNfY29uZiB7Ci0JdTMyIExlbmd0aDsJCS8qIExlbmd0aCBvZiB0aGlzIHN0cnVjdHVyZSAqLwotCXU4IG1ic3NfbnVtOwkJLyogaW5kaWNhdGUgbXVsdGlwbGUgQlNTIG51bWJlciAqLwotCXUzMiBvd25faXBfYWRkcjsKLQl1MzIgcmV0cnlfaW50ZXJ2YWw7Ci0JdTMyIHNlc3Npb25fdGltZW91dF9pbnRlcnZhbDsKLQl1OCBFQVBpZm5hbWVbOF1bSUZOQU1TSVpdOwotCXU4IEVBUGlmbmFtZV9sZW5bOF07Ci0JdTggUHJlQXV0aGlmbmFtZVs4XVtJRk5BTVNJWl07Ci0JdTggUHJlQXV0aGlmbmFtZV9sZW5bOF07Ci0Jc3RydWN0IHJ0X3JhZGl1c19rZXlfaW5mbyBSYWRpdXNJbmZvWzhdOwotfTsKLQotLyogS2V5IG1hcHBpbmcga2V5cyByZXF1aXJlIGEgQlNTSUQgKi8KLXN0cnVjdCBydF9uZGlzXzgwMl8xMV9rZXkgewotCXUzMiBMZW5ndGg7CQkvKiBMZW5ndGggb2YgdGhpcyBzdHJ1Y3R1cmUgKi8KLQl1MzIgS2V5SW5kZXg7Ci0JdTMyIEtleUxlbmd0aDsJCS8qIGxlbmd0aCBvZiBrZXkgaW4gYnl0ZXMgKi8KLQlORElTXzgwMl8xMV9NQUNfQUREUkVTUyBCU1NJRDsKLQlORElTXzgwMl8xMV9LRVlfUlNDIEtleVJTQzsKLQl1OCBLZXlNYXRlcmlhbFsxXTsJLyogdmFyaWFibGUgbGVuZ3RoIGRlcGVuZGluZyBvbiBhYm92ZSBmaWVsZCAqLwotfTsKLQotc3RydWN0IHJ0X25kaXNfODAyXzExX3Bhc3NwaHJhc2UgewotCXUzMiBLZXlMZW5ndGg7CQkvKiBsZW5ndGggb2Yga2V5IGluIGJ5dGVzICovCi0JTkRJU184MDJfMTFfTUFDX0FERFJFU1MgQlNTSUQ7Ci0JdTggS2V5TWF0ZXJpYWxbMV07CS8qIHZhcmlhYmxlIGxlbmd0aCBkZXBlbmRpbmcgb24gYWJvdmUgZmllbGQgKi8KLX07Ci0KLXN0cnVjdCBydF9uZGlzXzgwMl8xMV9yZW1vdmVfa2V5IHsKLQl1MzIgTGVuZ3RoOwkJLyogTGVuZ3RoIG9mIHRoaXMgc3RydWN0dXJlICovCi0JdTMyIEtleUluZGV4OwotCU5ESVNfODAyXzExX01BQ19BRERSRVNTIEJTU0lEOwotfTsKLQotc3RydWN0IHJ0X25kaXNfODAyXzExX3dlcCB7Ci0JdTMyIExlbmd0aDsJCS8qIExlbmd0aCBvZiB0aGlzIHN0cnVjdHVyZSAqLwotCXUzMiBLZXlJbmRleDsJCS8qIDAgaXMgdGhlIHBlci1jbGllbnQga2V5LCAxLU4gYXJlIHRoZSAqLwotCS8qIGdsb2JhbCBrZXlzICovCi0JdTMyIEtleUxlbmd0aDsJCS8qIGxlbmd0aCBvZiBrZXkgaW4gYnl0ZXMgKi8KLQl1OCBLZXlNYXRlcmlhbFsxXTsJLyogdmFyaWFibGUgbGVuZ3RoIGRlcGVuZGluZyBvbiBhYm92ZSBmaWVsZCAqLwotfTsKLQotdHlwZWRlZiBlbnVtIF9ORElTXzgwMl8xMV9ORVRXT1JLX0lORlJBU1RSVUNUVVJFIHsKLQlOZGlzODAyXzExSUJTUywKLQlOZGlzODAyXzExSW5mcmFzdHJ1Y3R1cmUsCi0JTmRpczgwMl8xMUF1dG9Vbmtub3duLAotCU5kaXM4MDJfMTFNb25pdG9yLAotCU5kaXM4MDJfMTFJbmZyYXN0cnVjdHVyZU1heAkvKiBOb3QgYSByZWFsIHZhbHVlLCBkZWZpbmVkIGFzIHVwcGVyIGJvdW5kICovCi19IE5ESVNfODAyXzExX05FVFdPUktfSU5GUkFTVFJVQ1RVUkUsICpQTkRJU184MDJfMTFfTkVUV09SS19JTkZSQVNUUlVDVFVSRTsKLQotLyogQWRkIG5ldyBhdXRoZW50aWNhdGlvbiBtb2RlcyAqLwotdHlwZWRlZiBlbnVtIF9ORElTXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFIHsKLQlOZGlzODAyXzExQXV0aE1vZGVPcGVuLAotCU5kaXM4MDJfMTFBdXRoTW9kZVNoYXJlZCwKLQlOZGlzODAyXzExQXV0aE1vZGVBdXRvU3dpdGNoLAotCU5kaXM4MDJfMTFBdXRoTW9kZVdQQSwKLQlOZGlzODAyXzExQXV0aE1vZGVXUEFQU0ssCi0JTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZSwKLQlOZGlzODAyXzExQXV0aE1vZGVXUEEyLAotCU5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0ssCi0JTmRpczgwMl8xMUF1dGhNb2RlV1BBMVdQQTIsCi0JTmRpczgwMl8xMUF1dGhNb2RlV1BBMVBTS1dQQTJQU0ssCi0JTmRpczgwMl8xMUF1dGhNb2RlTWF4CS8qIE5vdCBhIHJlYWwgbW9kZSwgZGVmaW5lZCBhcyB1cHBlciBib3VuZCAqLwotfSBORElTXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFLCAqUE5ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREU7Ci0KLXR5cGVkZWYgdTggTkRJU184MDJfMTFfUkFURVNbTkRJU184MDJfMTFfTEVOR1RIX1JBVEVTXTsJLyogU2V0IG9mIDggZGF0YSByYXRlcyAqLwotdHlwZWRlZiB1OCBORElTXzgwMl8xMV9SQVRFU19FWFtORElTXzgwMl8xMV9MRU5HVEhfUkFURVNfRVhdOwkvKiBTZXQgb2YgMTYgZGF0YSByYXRlcyAqLwotCi1zdHJ1Y3QgUEFDS0VEIHJ0X25kaXNfODAyXzExX3NzaWQgewotCXUzMiBTc2lkTGVuZ3RoOwkvKiBsZW5ndGggb2YgU1NJRCBmaWVsZCBiZWxvdywgaW4gYnl0ZXM7ICovCi0JLyogdGhpcyBjYW4gYmUgemVyby4gKi8KLQl1OCBTc2lkW05ESVNfODAyXzExX0xFTkdUSF9TU0lEXTsJLyogU1NJRCBpbmZvcm1hdGlvbiBmaWVsZCAqLwotfTsKLQotc3RydWN0IFBBQ0tFRCBydF9uZGlzX3dsYW5fYnNzaWQgewotCXVuc2lnbmVkIGxvbmcgTGVuZ3RoOwkJLyogTGVuZ3RoIG9mIHRoaXMgc3RydWN0dXJlICovCi0JTkRJU184MDJfMTFfTUFDX0FERFJFU1MgTWFjQWRkcmVzczsJLyogQlNTSUQgKi8KLQl1OCBSZXNlcnZlZFsyXTsKLQlzdHJ1Y3QgcnRfbmRpc184MDJfMTFfc3NpZCBTc2lkOwkvKiBTU0lEICovCi0JdW5zaWduZWQgbG9uZyBQcml2YWN5OwkJLyogV0VQIGVuY3J5cHRpb24gcmVxdWlyZW1lbnQgKi8KLQlORElTXzgwMl8xMV9SU1NJIFJzc2k7CS8qIHJlY2VpdmUgc2lnbmFsIHN0cmVuZ3RoIGluIGRCbSAqLwotCU5ESVNfODAyXzExX05FVFdPUktfVFlQRSBOZXR3b3JrVHlwZUluVXNlOwotCXN0cnVjdCBydF9uZGlzXzgwMl8xMV9jb25maWd1cmF0aW9uIENvbmZpZ3VyYXRpb247Ci0JTkRJU184MDJfMTFfTkVUV09SS19JTkZSQVNUUlVDVFVSRSBJbmZyYXN0cnVjdHVyZU1vZGU7Ci0JTkRJU184MDJfMTFfUkFURVMgU3VwcG9ydGVkUmF0ZXM7Ci19OwotCi1zdHJ1Y3QgUEFDS0VEIHJ0X25kaXNfODAyXzExX2Jzc2lkX2xpc3QgewotCXUzMiBOdW1iZXJPZkl0ZW1zOwkvKiBpbiBsaXN0IGJlbG93LCBhdCBsZWFzdCAxICovCi0Jc3RydWN0IHJ0X25kaXNfd2xhbl9ic3NpZCBCc3NpZFsxXTsKLX07Ci0KLS8qIEFkZGVkIENhcGFiaWxpdGllcywgSUVMZW5ndGggYW5kIElFcyBmb3IgZWFjaCBCU1NJRCAqLwotc3RydWN0IFBBQ0tFRCBydF9uZGlzX3dsYW5fYnNzaWRfZXggewotCXVuc2lnbmVkIGxvbmcgTGVuZ3RoOwkJLyogTGVuZ3RoIG9mIHRoaXMgc3RydWN0dXJlICovCi0JTkRJU184MDJfMTFfTUFDX0FERFJFU1MgTWFjQWRkcmVzczsJLyogQlNTSUQgKi8KLQl1OCBSZXNlcnZlZFsyXTsKLQlzdHJ1Y3QgcnRfbmRpc184MDJfMTFfc3NpZCBTc2lkOwkvKiBTU0lEICovCi0JdTMyIFByaXZhY3k7CQkvKiBXRVAgZW5jcnlwdGlvbiByZXF1aXJlbWVudCAqLwotCU5ESVNfODAyXzExX1JTU0kgUnNzaTsJLyogcmVjZWl2ZSBzaWduYWwgKi8KLQkvKiBzdHJlbmd0aCBpbiBkQm0gKi8KLQlORElTXzgwMl8xMV9ORVRXT1JLX1RZUEUgTmV0d29ya1R5cGVJblVzZTsKLQlzdHJ1Y3QgcnRfbmRpc184MDJfMTFfY29uZmlndXJhdGlvbiBDb25maWd1cmF0aW9uOwotCU5ESVNfODAyXzExX05FVFdPUktfSU5GUkFTVFJVQ1RVUkUgSW5mcmFzdHJ1Y3R1cmVNb2RlOwotCU5ESVNfODAyXzExX1JBVEVTX0VYIFN1cHBvcnRlZFJhdGVzOwotCXVuc2lnbmVkIGxvbmcgSUVMZW5ndGg7Ci0JdTggSUVzWzFdOwotfTsKLQotc3RydWN0IFBBQ0tFRCBydF9uZGlzXzgwMl8xMV9ic3NpZF9saXN0X2V4IHsKLQl1MzIgTnVtYmVyT2ZJdGVtczsJLyogaW4gbGlzdCBiZWxvdywgYXQgbGVhc3QgMSAqLwotCXN0cnVjdCBydF9uZGlzX3dsYW5fYnNzaWRfZXggQnNzaWRbMV07Ci19OwotCi1zdHJ1Y3QgUEFDS0VEIHJ0X25kaXNfODAyXzExX2ZpeGVkX2llcyB7Ci0JdTggVGltZXN0YW1wWzhdOwotCXUxNiBCZWFjb25JbnRlcnZhbDsKLQl1MTYgQ2FwYWJpbGl0aWVzOwotfTsKLQotc3RydWN0IHJ0X25kaXNfODAyXzExX3ZhcmlhYmxlX2llcyB7Ci0JdTggRWxlbWVudElEOwotCXU4IExlbmd0aDsJCS8qIE51bWJlciBvZiBieXRlcyBpbiBkYXRhIGZpZWxkICovCi0JdTggZGF0YVsxXTsKLX07Ci0KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBORElTXzgwMl8xMV9GUkFHTUVOVEFUSU9OX1RIUkVTSE9MRDsKLQotdHlwZWRlZiB1bnNpZ25lZCBsb25nIE5ESVNfODAyXzExX1JUU19USFJFU0hPTEQ7Ci0KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBORElTXzgwMl8xMV9BTlRFTk5BOwotCi10eXBlZGVmIGVudW0gX05ESVNfODAyXzExX1BSSVZBQ1lfRklMVEVSIHsKLQlOZGlzODAyXzExUHJpdkZpbHRlckFjY2VwdEFsbCwKLQlOZGlzODAyXzExUHJpdkZpbHRlcjgwMjF4V0VQCi19IE5ESVNfODAyXzExX1BSSVZBQ1lfRklMVEVSLCAqUE5ESVNfODAyXzExX1BSSVZBQ1lfRklMVEVSOwotCi0vKiBBZGRlZCBuZXcgZW5jcnlwdGlvbiB0eXBlcyAqLwotLyogQWxzbyBhbGlhc2VkIHR5cGVkZWYgdG8gbmV3IG5hbWUgKi8KLXR5cGVkZWYgZW51bSBfTkRJU184MDJfMTFfV0VQX1NUQVRVUyB7Ci0JTmRpczgwMl8xMVdFUEVuYWJsZWQsCi0JTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZCA9IE5kaXM4MDJfMTFXRVBFbmFibGVkLAotCU5kaXM4MDJfMTFXRVBEaXNhYmxlZCwKLQlOZGlzODAyXzExRW5jcnlwdGlvbkRpc2FibGVkID0gTmRpczgwMl8xMVdFUERpc2FibGVkLAotCU5kaXM4MDJfMTFXRVBLZXlBYnNlbnQsCi0JTmRpczgwMl8xMUVuY3J5cHRpb24xS2V5QWJzZW50ID0gTmRpczgwMl8xMVdFUEtleUFic2VudCwKLQlOZGlzODAyXzExV0VQTm90U3VwcG9ydGVkLAotCU5kaXM4MDJfMTFFbmNyeXB0aW9uTm90U3VwcG9ydGVkID0gTmRpczgwMl8xMVdFUE5vdFN1cHBvcnRlZCwKLQlOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkLAotCU5kaXM4MDJfMTFFbmNyeXB0aW9uMktleUFic2VudCwKLQlOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkLAotCU5kaXM4MDJfMTFFbmNyeXB0aW9uM0tleUFic2VudCwKLQlOZGlzODAyXzExRW5jcnlwdGlvbjRFbmFibGVkLAkvKiBUS0lQIG9yIEFFUyBtaXggKi8KLQlOZGlzODAyXzExRW5jcnlwdGlvbjRLZXlBYnNlbnQsCi0JTmRpczgwMl8xMUdyb3VwV0VQNDBFbmFibGVkLAotCU5kaXM4MDJfMTFHcm91cFdFUDEwNEVuYWJsZWQsCi19IE5ESVNfODAyXzExX1dFUF9TVEFUVVMsICpQTkRJU184MDJfMTFfV0VQX1NUQVRVUywKLSAgICBORElTXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUywgKlBORElTXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUzsKLQotdHlwZWRlZiBlbnVtIF9ORElTXzgwMl8xMV9SRUxPQURfREVGQVVMVFMgewotCU5kaXM4MDJfMTFSZWxvYWRXRVBLZXlzCi19IE5ESVNfODAyXzExX1JFTE9BRF9ERUZBVUxUUywgKlBORElTXzgwMl8xMV9SRUxPQURfREVGQVVMVFM7Ci0KLSNkZWZpbmUgTkRJU184MDJfMTFfQUlfUkVRRklfQ0FQQUJJTElUSUVTICAgICAgMQotI2RlZmluZSBORElTXzgwMl8xMV9BSV9SRVFGSV9MSVNURU5JTlRFUlZBTCAgICAyCi0jZGVmaW5lIE5ESVNfODAyXzExX0FJX1JFUUZJX0NVUlJFTlRBUEFERFJFU1MgIDQKLQotI2RlZmluZSBORElTXzgwMl8xMV9BSV9SRVNGSV9DQVBBQklMSVRJRVMgICAgICAxCi0jZGVmaW5lIE5ESVNfODAyXzExX0FJX1JFU0ZJX1NUQVRVU0NPREUgICAgICAgIDIKLSNkZWZpbmUgTkRJU184MDJfMTFfQUlfUkVTRklfQVNTT0NJQVRJT05JRCAgICAgNAotCi1zdHJ1Y3QgcnRfbmRpc184MDJfMTFfYWlfcmVxZmkgewotCXUxNiBDYXBhYmlsaXRpZXM7Ci0JdTE2IExpc3RlbkludGVydmFsOwotCU5ESVNfODAyXzExX01BQ19BRERSRVNTIEN1cnJlbnRBUEFkZHJlc3M7Ci19OwotCi1zdHJ1Y3QgcnRfbmRpc184MDJfMTFfYWlfcmVzZmkgewotCXUxNiBDYXBhYmlsaXRpZXM7Ci0JdTE2IFN0YXR1c0NvZGU7Ci0JdTE2IEFzc29jaWF0aW9uSWQ7Ci19OwotCi1zdHJ1Y3QgcnRfbmRpc184MDJfMTFfYXNzb2NpYXRpb25faW5mb3JtYXRpb24gewotCXVuc2lnbmVkIGxvbmcgTGVuZ3RoOwotCXUxNiBBdmFpbGFibGVSZXF1ZXN0Rml4ZWRJRXM7Ci0Jc3RydWN0IHJ0X25kaXNfODAyXzExX2FpX3JlcWZpIFJlcXVlc3RGaXhlZElFczsKLQl1bnNpZ25lZCBsb25nIFJlcXVlc3RJRUxlbmd0aDsKLQl1bnNpZ25lZCBsb25nIE9mZnNldFJlcXVlc3RJRXM7Ci0JdTE2IEF2YWlsYWJsZVJlc3BvbnNlRml4ZWRJRXM7Ci0Jc3RydWN0IHJ0X25kaXNfODAyXzExX2FpX3Jlc2ZpIFJlc3BvbnNlRml4ZWRJRXM7Ci0JdW5zaWduZWQgbG9uZyBSZXNwb25zZUlFTGVuZ3RoOwotCXVuc2lnbmVkIGxvbmcgT2Zmc2V0UmVzcG9uc2VJRXM7Ci19OwotCi1zdHJ1Y3QgcnRfbmRpc184MDJfMTFfYXV0aGVudGljYXRpb25fZXZlbnQgewotCXN0cnVjdCBydF9uZGlzXzgwMl8xMV9zdGF0dXNfaW5kaWNhdGlvbiBTdGF0dXM7Ci0Jc3RydWN0IHJ0X25kaXNfODAyXzExX2F1dGhlbnRpY2F0aW9uX3JlcXVlc3QgUmVxdWVzdFsxXTsKLX07Ci0KLS8qIDgwMi4xMSBNZWRpYSBzdHJlYW0gY29uc3RyYWludHMsIGFzc29jaWF0ZWQgd2l0aCBPSURfODAyXzExX01FRElBX1NUUkVBTV9NT0RFICovCi10eXBlZGVmIGVudW0gX05ESVNfODAyXzExX01FRElBX1NUUkVBTV9NT0RFIHsKLQlOZGlzODAyXzExTWVkaWFTdHJlYW1PZmYsCi0JTmRpczgwMl8xMU1lZGlhU3RyZWFtT24sCi19IE5ESVNfODAyXzExX01FRElBX1NUUkVBTV9NT0RFLCAqUE5ESVNfODAyXzExX01FRElBX1NUUkVBTV9NT0RFOwotCi0vKiBQTUtJRCBTdHJ1Y3R1cmVzICovCi10eXBlZGVmIHU4IE5ESVNfODAyXzExX1BNS0lEX1ZBTFVFWzE2XTsKLQotc3RydWN0IHJ0X2Jzc2lkX2luZm8gewotCU5ESVNfODAyXzExX01BQ19BRERSRVNTIEJTU0lEOwotCU5ESVNfODAyXzExX1BNS0lEX1ZBTFVFIFBNS0lEOwotfTsKLQotc3RydWN0IHJ0X25kaXNfODAyXzExX3Bta2lkIHsKLQl1MzIgTGVuZ3RoOwotCXUzMiBCU1NJREluZm9Db3VudDsKLQlzdHJ1Y3QgcnRfYnNzaWRfaW5mbyBCU1NJREluZm9bMV07Ci19OwotCi1zdHJ1Y3QgcnRfbmRpc184MDJfMTFfYXV0aGVudGljYXRpb25fZW5jcnlwdGlvbiB7Ci0JTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERSBBdXRoTW9kZVN1cHBvcnRlZDsKLQlORElTXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUyBFbmNyeXB0U3RhdHVzU3VwcG9ydGVkOwotfTsKLQotc3RydWN0IHJ0X25kaXNfODAyXzExX2NhcGFiaWxpdHkgewotCXVuc2lnbmVkIGxvbmcgTGVuZ3RoOwotCXVuc2lnbmVkIGxvbmcgVmVyc2lvbjsKLQl1bnNpZ25lZCBsb25nIE5vT2ZQTUtJRHM7Ci0JdW5zaWduZWQgbG9uZyBOb09mQXV0aEVuY3J5cHRQYWlyc1N1cHBvcnRlZDsKLQlzdHJ1Y3QgcnRfbmRpc184MDJfMTFfYXV0aGVudGljYXRpb25fZW5jcnlwdGlvbgotCSAgICBBdXRoZW50aWNhdGlvbkVuY3J5cHRpb25TdXBwb3J0ZWRbMV07Ci19OwotCi0jZGVmaW5lIFJUX1BSSVZfSU9DVEwJCQkJCQkJKFNJT0NJV0ZJUlNUUFJJViArIDB4MDEpCS8qIFN5bmMuIHdpdGggQVAgZm9yIHdzYyB1cG5wIGRhZW1vbiAqLwotI2RlZmluZSBSVFBSSVZfSU9DVExfU0VUCQkJCQkJCShTSU9DSVdGSVJTVFBSSVYgKyAweDAyKQotCi0jZGVmaW5lIFJUUFJJVl9JT0NUTF9TVEFUSVNUSUNTICAgICAgICAgICAgICAgICAgICAgKFNJT0NJV0ZJUlNUUFJJViArIDB4MDkpCi0jZGVmaW5lIFJUUFJJVl9JT0NUTF9BRERfUE1LSURfQ0FDSEUgICAgICAgICAgICAgICAgKFNJT0NJV0ZJUlNUUFJJViArIDB4MEEpCi0jZGVmaW5lIFJUUFJJVl9JT0NUTF9SQURJVVNfREFUQSAgICAgICAgICAgICAgICAgICAgKFNJT0NJV0ZJUlNUUFJJViArIDB4MEMpCi0jZGVmaW5lIFJUUFJJVl9JT0NUTF9HU0lURVNVUlZFWQkJCQkJKFNJT0NJV0ZJUlNUUFJJViArIDB4MEQpCi0jZGVmaW5lIFJUX1BSSVZfSU9DVExfRVhUCQkJCQkJCShTSU9DSVdGSVJTVFBSSVYgKyAweDBFKQkvKiBTeW5jLiB3aXRoIFJUNjEgKGZvciB3cGFfc3VwcGxpY2FudCkgKi8KLSNkZWZpbmUgUlRQUklWX0lPQ1RMX0dFVF9NQUNfVEFCTEUJCQkJCShTSU9DSVdGSVJTVFBSSVYgKyAweDBGKQotCi0jZGVmaW5lIFJUUFJJVl9JT0NUTF9TSE9XCQkJCQkJCShTSU9DSVdGSVJTVFBSSVYgKyAweDExKQotZW51bSB7Ci0JU0hPV19DT05OX1NUQVRVUyA9IDQsCi0JU0hPV19EUlZJRVJfVkVSSU9OID0gNSwKLQlTSE9XX0JBX0lORk8gPSA2LAotCVNIT1dfREVTQ19JTkZPID0gNywKLSNpZmRlZiBSVE1QX01BQ19VU0IKLQlTSE9XX1JYQlVMS19JTkZPID0gOCwKLQlTSE9XX1RYQlVMS19JTkZPID0gOSwKLSNlbmRpZiAvKiBSVE1QX01BQ19VU0IgLy8gKi8KLQlSQUlPX09GRiA9IDEwLAotCVJBSU9fT04gPSAxMSwKLQlTSE9XX0NGR19WQUxVRSA9IDIwLAotCVNIT1dfQURIT0NfRU5UUllfSU5GTyA9IDIxLAotfTsKLQotI2RlZmluZSBPSURfODAyXzExX0JVSUxEX0NIQU5ORUxfRVgJCQkJMHgwNzE0Ci0jZGVmaW5lIE9JRF84MDJfMTFfR0VUX0NIX0xJU1QJCQkJCTB4MDcxNQotI2RlZmluZSBPSURfODAyXzExX0dFVF9DT1VOVFJZX0NPREUJCQkJMHgwNzE2Ci0jZGVmaW5lIE9JRF84MDJfMTFfR0VUX0NIQU5ORUxfR0VPR1JBUEhZCQkweDA3MTcKLQotI2RlZmluZSBSVF9PSURfV1NDX1NFVF9QQVNTUEhSQVNFICAgICAgICAgICAgICAgICAgIDB4MDc0MAkvKiBwYXNzcGhyYXNlIGZvciB3cGEoMiktcHNrICovCi0jZGVmaW5lIFJUX09JRF9XU0NfRFJJVkVSX0FVVE9fQ09OTkVDVCAgICAgICAgICAgICAgMHgwNzQxCi0jZGVmaW5lIFJUX09JRF9XU0NfUVVFUllfREVGQVVMVF9QUk9GSUxFICAgICAgICAgICAgMHgwNzQyCi0jZGVmaW5lIFJUX09JRF9XU0NfU0VUX0NPTk5fQllfUFJPRklMRV9JTkRFWCAgICAgICAgMHgwNzQzCi0jZGVmaW5lIFJUX09JRF9XU0NfU0VUX0FDVElPTiAgICAgICAgICAgICAgICAgICAgICAgMHgwNzQ0Ci0jZGVmaW5lIFJUX09JRF9XU0NfU0VUX1NTSUQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzQ1Ci0jZGVmaW5lIFJUX09JRF9XU0NfU0VUX1BJTl9DT0RFICAgICAgICAgICAgICAgICAgICAgMHgwNzQ2Ci0jZGVmaW5lIFJUX09JRF9XU0NfU0VUX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzQ3CS8qIFBJTiBvciBQQkMgKi8KLSNkZWZpbmUgUlRfT0lEX1dTQ19TRVRfQ09ORl9NT0RFICAgICAgICAgICAgICAgICAgICAweDA3NDgJLyogRW5yb2xsZWUgb3IgUmVnaXN0cmFyICovCi0jZGVmaW5lIFJUX09JRF9XU0NfU0VUX1BST0ZJTEUgICAgICAgICAgICAgICAgICAgICAgMHgwNzQ5Ci0jZGVmaW5lCVJUX09JRF9XU0NfQ09ORklHX1NUQVRVUwkJCQkJMHgwNzRGCi0jZGVmaW5lIFJUX09JRF84MDJfMTFfV1NDX1FVRVJZX1BST0ZJTEUJCQkJMHgwNzUwCi0vKiBmb3IgY29uc2lzdGVuY3kgd2l0aCBSVDYxICovCi0jZGVmaW5lIFJUX09JRF9XU0NfUVVFUllfU1RBVFVTCQkJCQkJMHgwNzUxCi0jZGVmaW5lIFJUX09JRF9XU0NfUElOX0NPREUJCQkJCQkJMHgwNzUyCi0jZGVmaW5lIFJUX09JRF9XU0NfVVVJRAkJCQkJCQkJMHgwNzUzCi0jZGVmaW5lIFJUX09JRF9XU0NfU0VUX1NFTEVDVEVEX1JFR0lTVFJBUgkJCTB4MDc1NAotI2RlZmluZSBSVF9PSURfV1NDX0VBUE1TRwkJCQkJCQkweDA3NTUKLSNkZWZpbmUgUlRfT0lEX1dTQ19NQU5VRkFDVFVSRVIJCQkJCQkweDA3NTYKLSNkZWZpbmUgUlRfT0lEX1dTQ19NT0RFTF9OQU1FCQkJCQkJMHgwNzU3Ci0jZGVmaW5lIFJUX09JRF9XU0NfTU9ERUxfTk8JCQkJCQkJMHgwNzU4Ci0jZGVmaW5lIFJUX09JRF9XU0NfU0VSSUFMX05PCQkJCQkJMHgwNzU5Ci0jZGVmaW5lIFJUX09JRF9XU0NfTUFDX0FERFJFU1MJCQkJCQkweDA3NjAKLQotLyogTmV3IGZvciBNZWV0aW5nSG91c2UgQXBpIHN1cHBvcnQgKi8KLSNkZWZpbmUgT0lEX01IXzgwMl8xWF9TVVBQT1JURUQgICAgICAgICAgICAgICAweEZGRURDMTAwCi0KLS8qIE1JTU8gVHggcGFyYW1ldGVyLCBTaG9ydEdJLCBNQ1MsIFNUQkMsIGV0Yy4gIHRoZXNlIGFyZSBmaWVsZHMgaW4gVFhXSS4gRG9uJ3QgY2hhbmdlIHRoaXMgZGVmaW5pdGlvbiEgKi8KLXR5cGVkZWYgdW5pb24gX0hUVFJBTlNNSVRfU0VUVElORyB7Ci0Jc3RydWN0IHsKLQkJdTE2IE1DUzo3OwkvKiBNQ1MgKi8KLQkJdTE2IEJXOjE7CS8qY2hhbm5lbCBiYW5kd2lkdGggMjBNSHogb3IgNDAgTUh6ICovCi0JCXUxNiBTaG9ydEdJOjE7Ci0JCXUxNiBTVEJDOjI7CS8qU1BBQ0UgKi8KLS8qICAgICAgdTE2ICAgICAgICAgIHJzdjozOyAqLwotCQl1MTYgcnN2OjI7Ci0JCXUxNiBUeEJGOjE7Ci0JCXUxNiBNT0RFOjI7CS8qIFVzZSBkZWZpbml0aW9uIE1PREVfeHh4LiAqLwotCX0gZmllbGQ7Ci0JdTE2IHdvcmQ7Ci19IEhUVFJBTlNNSVRfU0VUVElORywgKlBIVFRSQU5TTUlUX1NFVFRJTkc7Ci0KLXR5cGVkZWYgZW51bSBfUlRfODAyXzExX1BSRUFNQkxFIHsKLQlSdDgwMl8xMVByZWFtYmxlTG9uZywKLQlSdDgwMl8xMVByZWFtYmxlU2hvcnQsCi0JUnQ4MDJfMTFQcmVhbWJsZUF1dG8KLX0gUlRfODAyXzExX1BSRUFNQkxFLCAqUFJUXzgwMl8xMV9QUkVBTUJMRTsKLQotdHlwZWRlZiBlbnVtIF9SVF84MDJfMTFfUEhZX01PREUgewotCVBIWV8xMUJHX01JWEVEID0gMCwKLQlQSFlfMTFCLAotCVBIWV8xMUEsCi0JUEhZXzExQUJHX01JWEVELAotCVBIWV8xMUcsCi0JUEhZXzExQUJHTl9NSVhFRCwJLyogYm90aCBiYW5kICAgNSAqLwotCVBIWV8xMU5fMl80RywJCS8qIDExbi1vbmx5IHdpdGggMi40RyBiYW5kICAgICAgNiAqLwotCVBIWV8xMUdOX01JWEVELAkJLyogMi40RyBiYW5kICAgICAgNyAqLwotCVBIWV8xMUFOX01JWEVELAkJLyogNUcgIGJhbmQgICAgICAgOCAqLwotCVBIWV8xMUJHTl9NSVhFRCwJLyogaWYgY2hlY2sgODAyLjExYi4gICAgICA5ICovCi0JUEhZXzExQUdOX01JWEVELAkvKiBpZiBjaGVjayA4MDIuMTFiLiAgICAgIDEwICovCi0JUEhZXzExTl81RywJCS8qIDExbi1vbmx5IHdpdGggNUcgYmFuZCAgICAgICAgICAgICAgICAxMSAqLwotfSBSVF84MDJfMTFfUEhZX01PREU7Ci0KLS8qIHB1dCBhbGwgcHJvcHJpZXRlcnkgZm9yLXF1ZXJ5IG9iamVjdHMgaGVyZSB0byByZWR1Y2UgIyBvZiBRdWVyeV9PSUQgKi8KLXN0cnVjdCBydF84MDJfMTFfbGlua19zdGF0dXMgewotCXVuc2lnbmVkIGxvbmcgQ3VyclR4UmF0ZTsJLyogaW4gdW5pdHMgb2YgMC41TWJwcyAqLwotCXVuc2lnbmVkIGxvbmcgQ2hhbm5lbFF1YWxpdHk7CS8qIDAuLjEwMCAlICovCi0JdW5zaWduZWQgbG9uZyBUeEJ5dGVDb3VudDsJLyogYm90aCBvayBhbmQgZmFpbCAqLwotCXVuc2lnbmVkIGxvbmcgUnhCeXRlQ291bnQ7CS8qIGJvdGggb2sgYW5kIGZhaWwgKi8KLQl1bnNpZ25lZCBsb25nIENlbnRyYWxDaGFubmVsOwkvKiA0ME1IeiBjZW50cmFsIGNoYW5uZWwgbnVtYmVyICovCi19OwotCi1zdHJ1Y3QgcnRfODAyXzExX2V2ZW50X2xvZyB7Ci0JTEFSR0VfSU5URUdFUiBTeXN0ZW1UaW1lOwkvKiB0aW1lc3RhbW1wIHZpYSBOZGlzR2V0Q3VycmVudFN5c3RlbVRpbWUoKSAqLwotCXU4IEFkZHJbTUFDX0FERFJfTEVOR1RIXTsKLQl1MTYgRXZlbnQ7CQkvKiBFVkVOVF94eHggKi8KLX07Ci0KLXN0cnVjdCBydF84MDJfMTFfZXZlbnRfdGFibGUgewotCXVuc2lnbmVkIGxvbmcgTnVtOwotCXVuc2lnbmVkIGxvbmcgUnN2OwkJLyogdG8gYWxpZ24gTG9nW10gYXQgTEFSR0VfSU5URUdFUiBib3VuZGFyeSAqLwotCXN0cnVjdCBydF84MDJfMTFfZXZlbnRfbG9nIExvZ1tNQVhfTlVNQkVSX09GX0VWRU5UXTsKLX07Ci0KLS8qIE1JTU8gVHggcGFyYW1ldGVyLCBTaG9ydEdJLCBNQ1MsIFNUQkMsIGV0Yy4gIHRoZXNlIGFyZSBmaWVsZHMgaW4gVFhXSS4gRG9uJ3QgY2hhbmdlIHRoaXMgZGVmaW5pdGlvbiEgKi8KLXR5cGVkZWYgdW5pb24gX01BQ0hUVFJBTlNNSVRfU0VUVElORyB7Ci0Jc3RydWN0IHsKLQkJdTE2IE1DUzo3OwkvKiBNQ1MgKi8KLQkJdTE2IEJXOjE7CS8qY2hhbm5lbCBiYW5kd2lkdGggMjBNSHogb3IgNDAgTUh6ICovCi0JCXUxNiBTaG9ydEdJOjE7Ci0JCXUxNiBTVEJDOjI7CS8qU1BBQ0UgKi8KLQkJdTE2IHJzdjozOwotCQl1MTYgTU9ERToyOwkvKiBVc2UgZGVmaW5pdGlvbiBNT0RFX3h4eC4gKi8KLQl9IGZpZWxkOwotCXUxNiB3b3JkOwotfSBNQUNIVFRSQU5TTUlUX1NFVFRJTkcsICpQTUFDSFRUUkFOU01JVF9TRVRUSU5HOwotCi1zdHJ1Y3QgcnRfODAyXzExX21hY19lbnRyeSB7Ci0JdTggQWRkcltNQUNfQUREUl9MRU5HVEhdOwotCXU4IEFpZDsKLQl1OCBQc207CQkvKiAwOlBXUl9BQ1RJVkUsIDE6UFdSX1NBVkUgKi8KLQl1OCBNaW1vUHM7CQkvKiAwOk1NUFNfU1RBVElDLCAxOk1NUFNfRFlOQU1JQywgMzpNTVBTX0VuYWJsZWQgKi8KLQljaGFyIEF2Z1Jzc2kwOwotCWNoYXIgQXZnUnNzaTE7Ci0JY2hhciBBdmdSc3NpMjsKLQl1MzIgQ29ubmVjdGVkVGltZTsKLQlNQUNIVFRSQU5TTUlUX1NFVFRJTkcgVHhSYXRlOwotfTsKLQotc3RydWN0IHJ0XzgwMl8xMV9tYWNfdGFibGUgewotCXVuc2lnbmVkIGxvbmcgTnVtOwotCXN0cnVjdCBydF84MDJfMTFfbWFjX2VudHJ5IEVudHJ5W01BWF9OVU1CRVJfT0ZfTUFDXTsKLX07Ci0KLS8qIHN0cnVjdHVyZSBmb3IgcXVlcnkvc2V0IGhhcmR3YXJlIHJlZ2lzdGVyIC0gTUFDLCBCQlAsIFJGIHJlZ2lzdGVyICovCi1zdHJ1Y3QgcnRfODAyXzExX2hhcmR3YXJlX3JlZ2lzdGVyIHsKLQl1bnNpZ25lZCBsb25nIEhhcmR3YXJlVHlwZTsJLyogMDpNQUMsIDE6QkJQLCAyOlJGIHJlZ2lzdGVyLCAzOkVFUFJPTSAqLwotCXVuc2lnbmVkIGxvbmcgT2Zmc2V0OwkJLyogUS9TIHJlZ2lzdGVyIG9mZnNldCBhZGRyICovCi0JdW5zaWduZWQgbG9uZyBEYXRhOwkJLyogUi9XIGRhdGEgYnVmZmVyICovCi19OwotCi1zdHJ1Y3QgcnRfODAyXzExX2FwX2NvbmZpZyB7Ci0JdW5zaWduZWQgbG9uZyBFbmFibGVUeEJ1cnN0OwkvKiAwLWRpc2FibGUsIDEtZW5hYmxlICovCi0JdW5zaWduZWQgbG9uZyBFbmFibGVUdXJib1JhdGU7CS8qIDAtZGlzYWJsZSwgMS1lbmFibGUgNzIvMTAwbWJwcyB0dXJibyByYXRlICovCi0JdW5zaWduZWQgbG9uZyBJc29sYXRlSW50ZXJTdGFUcmFmZmljOwkvKiAwLWRpc2FibGUsIDEtZW5hYmxlIGlzb2xhdGlvbiAqLwotCXVuc2lnbmVkIGxvbmcgSGlkZVNzaWQ7CQkvKiAwLWRpc2FibGUsIDEtZW5hYmxlIGhpZGluZyAqLwotCXVuc2lnbmVkIGxvbmcgVXNlQkdQcm90ZWN0aW9uOwkvKiAwLUFVVE8sIDEtYWx3YXlzIE9OLCAyLWFsd2F5cyBPRkYgKi8KLQl1bnNpZ25lZCBsb25nIFVzZVNob3J0U2xvdFRpbWU7CS8qIDAtbm8gdXNlLCAxLXVzZSA5LXVzIHNob3J0IHNsb3QgdGltZSAqLwotCXVuc2lnbmVkIGxvbmcgUnN2MTsJCS8qIG11c3QgYmUgMCAqLwotCXVuc2lnbmVkIGxvbmcgU3lzdGVtRXJyb3JCaXRtYXA7CS8qIGlnbm9yZSB1cG9uIFNFVCwgcmV0dXJuIHN5c3RlbSBlcnJvciB1cG9uIFFVRVJZICovCi19OwotCi0vKiBzdHJ1Y3R1cmUgdG8gcXVlcnkvc2V0IFNUQV9DT05GSUcgKi8KLXN0cnVjdCBydF84MDJfMTFfc3RhX2NvbmZpZyB7Ci0JdW5zaWduZWQgbG9uZyBFbmFibGVUeEJ1cnN0OwkvKiAwLWRpc2FibGUsIDEtZW5hYmxlICovCi0JdW5zaWduZWQgbG9uZyBFbmFibGVUdXJib1JhdGU7CS8qIDAtZGlzYWJsZSwgMS1lbmFibGUgNzIvMTAwbWJwcyB0dXJibyByYXRlICovCi0JdW5zaWduZWQgbG9uZyBVc2VCR1Byb3RlY3Rpb247CS8qIDAtQVVUTywgMS1hbHdheXMgT04sIDItYWx3YXlzIE9GRiAqLwotCXVuc2lnbmVkIGxvbmcgVXNlU2hvcnRTbG90VGltZTsJLyogMC1ubyB1c2UsIDEtdXNlIDktdXMgc2hvcnQgc2xvdCB0aW1lIHdoZW4gYXBwbGljYWJsZSAqLwotCXVuc2lnbmVkIGxvbmcgQWRob2NNb2RlOwkvKiAwLTExYiByYXRlcyBvbmx5IChXSUZJIHNwZWMpLCAxIC0gYi9nIG1peGVkLCAyIC0gZyBvbmx5ICovCi0JdW5zaWduZWQgbG9uZyBId1JhZGlvU3RhdHVzOwkvKiAwLU9GRiwgMS1PTiwgZGVmYXVsdCBpcyAxLCBSZWFkLU9ubHkgKi8KLQl1bnNpZ25lZCBsb25nIFJzdjE7CQkvKiBtdXN0IGJlIDAgKi8KLQl1bnNpZ25lZCBsb25nIFN5c3RlbUVycm9yQml0bWFwOwkvKiBpZ25vcmUgdXBvbiBTRVQsIHJldHVybiBzeXN0ZW0gZXJyb3IgdXBvbiBRVUVSWSAqLwotfTsKLQotLyogKi8KLS8qICBGb3IgT0lEIFF1ZXJ5IG9yIFNldCBhYm91dCBCQSBzdHJ1Y3R1cmUgKi8KLS8qICovCi1zdHJ1Y3QgcnRfb2lkX2JhY2FwIHsKLQl1OCBSeEJBV2luTGltaXQ7Ci0JdTggVHhCQVdpbkxpbWl0OwotCXU4IFBvbGljeTsJCS8qIDA6IERFTEFZX0JBIDE6SU1NRURfQkEgICgvL0JBIFBvbGljeSBzdWJmaWxlZCB2YWx1ZSBpbiBBRERCQSBmcmFtZSkgICAyOkJBLW5vdCB1c2UuIG90aGVyIHZhbHVlIGludmFsaWQgKi8KLQl1OCBNcGR1RGVuc2l0eTsJLyogMDogREVMQVlfQkEgMTpJTU1FRF9CQSAgKC8vQkEgUG9saWN5IHN1YmZpbGVkIHZhbHVlIGluIEFEREJBIGZyYW1lKSAgIDI6QkEtbm90IHVzZS4gb3RoZXIgdmFsdWUgaW52YWxpZCAqLwotCXU4IEFtc2R1RW5hYmxlOwkvKkVuYWJsZSBBTVNEVSB0cmFuc21pc3N0aW9uICovCi0JdTggQW1zZHVTaXplOwkvKiAwOjM4MzksIDE6NzkzNSBieXRlcy4gdTMyICBNU0RVU2l6ZVRvQnl0ZXNbXSAgICAgICAgPSB7IDM4MzksIDc5MzV9OyAqLwotCXU4IE1NUFNtb2RlOwkJLyogTUlNTyBwb3dlciBzYXZlIG1vcmUsIDA6c3RhdGljLCAxOmR5bmFtaWMsIDI6cnN2LCAzOm1pbW8gZW5hYmxlICovCi0JQk9PTEVBTiBBdXRvQkE7CQkvKiBBdXRvIEJBIHdpbGwgYXV0b21hdGljYWxseSAqLwotfTsKLQotc3RydWN0IHJ0XzgwMl8xMV9hY2xfZW50cnkgewotCXU4IEFkZHJbTUFDX0FERFJfTEVOR1RIXTsKLQl1MTYgUnN2OwotfTsKLQotc3RydWN0IFBBQ0tFRCBydF9ydF84MDJfMTFfYWNsIHsKLQl1bnNpZ25lZCBsb25nIFBvbGljeTsJCS8qIDAtZGlzYWJsZSwgMS1wb3NpdGl2ZSBsaXN0LCAyLW5lZ2F0aXZlIGxpc3QgKi8KLQl1bnNpZ25lZCBsb25nIE51bTsKLQlzdHJ1Y3QgcnRfODAyXzExX2FjbF9lbnRyeSBFbnRyeVtNQVhfTlVNQkVSX09GX0FDTF07Ci19OwotCi1zdHJ1Y3QgcnRfODAyXzExX3dkcyB7Ci0JdW5zaWduZWQgbG9uZyBOdW07Ci0JTkRJU184MDJfMTFfTUFDX0FERFJFU1MgRW50cnlbMjQgLypNQVhfTlVNX09GX1dEU19MSU5LICovXTsKLQl1bnNpZ25lZCBsb25nIEtleUxlbmd0aDsKLQl1OCBLZXlNYXRlcmlhbFszMl07Ci19OwotCi1zdHJ1Y3QgcnRfODAyXzExX3R4X3JhdGVzIHsKLQl1OCBTdXBSYXRlTGVuOwotCXU4IFN1cFJhdGVbTUFYX0xFTkdUSF9PRl9TVVBQT1JUX1JBVEVTXTsKLQl1OCBFeHRSYXRlTGVuOwotCXU4IEV4dFJhdGVbTUFYX0xFTkdUSF9PRl9TVVBQT1JUX1JBVEVTXTsKLX07Ci0KLS8qIERlZmluaXRpb24gb2YgZXh0cmEgaW5mb3JtYXRpb24gY29kZSAqLwotI2RlZmluZQlHRU5FUkFMX0xJTktfVVAJCQkweDAJLyogTGluayBpcyBVcCAqLwotI2RlZmluZQlHRU5FUkFMX0xJTktfRE9XTgkJMHgxCS8qIExpbmsgaXMgRG93biAqLwotI2RlZmluZQlIV19SQURJT19PRkYJCQkweDIJLyogSGFyZHdhcmUgcmFkaW8gb2ZmICovCi0jZGVmaW5lCVNXX1JBRElPX09GRgkJCTB4MwkvKiBTb2Z0d2FyZSByYWRpbyBvZmYgKi8KLSNkZWZpbmUJQVVUSF9GQUlMCQkJCTB4NAkvKiBPcGVuIGF1dGhlbnRpY2F0aW9uIGZhaWwgKi8KLSNkZWZpbmUJQVVUSF9GQUlMX0tFWVMJCQkweDUJLyogU2hhcmVkIGF1dGhlbnRpY2F0aW9uIGZhaWwgKi8KLSNkZWZpbmUJQVNTT0NfRkFJTAkJCQkweDYJLyogQXNzb2NpYXRpb24gZmFpbGVkICovCi0jZGVmaW5lCUVBUF9NSUNfRkFJTFVSRQkJCTB4NwkvKiBEZWF1dGhlbnRpY2F0aW9uIGJlY2F1c2UgTUlDIGZhaWx1cmUgKi8KLSNkZWZpbmUJRUFQXzRXQVlfVElNRU9VVAkJMHg4CS8qIERlYXV0aGVudGljYXRpb24gb24gNC13YXkgaGFuZHNoYWtlIHRpbWVvdXQgKi8KLSNkZWZpbmUJRUFQX0dST1VQX0tFWV9USU1FT1VUCTB4OQkvKiBEZWF1dGhlbnRpY2F0aW9uIG9uIGdyb3VwIGtleSBoYW5kc2hha2UgdGltZW91dCAqLwotI2RlZmluZQlFQVBfU1VDQ0VTUwkJCQkweGEJLyogRUFQIHN1Y2NlZWQgKi8KLSNkZWZpbmUJREVURUNUX1JBREFSX1NJR05BTAkJMHhiCS8qIFJhZGFyIHNpZ25hbCBvY2N1ciBpbiBjdXJyZW50IGNoYW5uZWwgKi8KLSNkZWZpbmUgRVhUUkFfSU5GT19NQVgJCQkweGIJLyogSW5kaWNhdGUgTGFzdCBPSUQgKi8KLQotI2RlZmluZSBFWFRSQV9JTkZPX0NMRUFSCQkweGZmZmZmZmZmCi0KLS8qIFRoaXMgaXMgT0lEIHNldHRpbmcgc3RydWN0dXJlLiBTbyBvbmx5IEdGIG9yIE1NIGFzIE1vZGUuIFRoaXMgaXMgdmFsaWQgd2hlbiBvdXIgd2lyZWxzcyBtb2RlIGhhcyA4MDIuMTFuIGluIHVzZS4gKi8KLXN0cnVjdCBydF9vaWRfc2V0X2h0X3BoeW1vZGUgewotCVJUXzgwMl8xMV9QSFlfTU9ERSBQaHlNb2RlOwkvKiAqLwotCXU4IFRyYW5zbWl0Tm87Ci0JdTggSHRNb2RlOwkJLypIVE1PREVfR0Ygb3IgSFRNT0RFX01NICovCi0JdTggRXh0T2Zmc2V0OwkvKmV4dGVuc2lvbiBjaGFubmVsIGFib3ZlIG9yIGJlbG93ICovCi0JdTggTUNTOwotCXU4IEJXOwotCXU4IFNUQkM7Ci0JdTggU0hPUlRHSTsKLQl1OCByc3Y7Ci19OwotCi0jZGVmaW5lIE1BWF9DVVNUT01fTEVOIDEyOAotCi10eXBlZGVmIGVudW0gX1JUXzgwMl8xMV9EX0NMSUVOVF9NT0RFIHsKLQlSdDgwMl8xMV9EX05vbmUsCi0JUnQ4MDJfMTFfRF9GbGV4aWJsZSwKLQlSdDgwMl8xMV9EX1N0cmljdCwKLX0gUlRfODAyXzExX0RfQ0xJRU5UX01PREUsICpQUlRfODAyXzExX0RfQ0xJRU5UX01PREU7Ci0KLXN0cnVjdCBydF9jaGFubmVsX2xpc3RfaW5mbyB7Ci0JdTggQ2hhbm5lbExpc3RbTUFYX05VTV9PRl9DSFNdOwkvKiBsaXN0IGFsbCBzdXBwb3J0ZWQgY2hhbm5lbHMgZm9yIHNpdGUgc3VydmV5ICovCi0JdTggQ2hhbm5lbExpc3ROdW07CS8qIG51bWJlciBvZiBjaGFubmVsIGluIENoYW5uZWxMaXN0W10gKi8KLX07Ci0KLS8qIFdTQyBjb25maWd1cmVkIGNyZWRlbnRpYWwgKi8KLXN0cnVjdCBydF93c2NfY3JlZGVudGlhbCB7Ci0Jc3RydWN0IHJ0X25kaXNfODAyXzExX3NzaWQgU1NJRDsJLyogbWFuZGF0b3J5ICovCi0JdTE2IEF1dGhUeXBlOwkvKiBtYW5kYXRvcnksIDE6IG9wZW4sIDI6IHdwYS1wc2ssIDQ6IHNoYXJlZCwgODp3cGEsIDB4MTA6IHdwYTIsIDB4MjA6IHdwYTItcHNrICovCi0JdTE2IEVuY3JUeXBlOwkvKiBtYW5kYXRvcnksIDE6IG5vbmUsIDI6IHdlcCwgNDogdGtpcCwgODogYWVzICovCi0JdTggS2V5WzY0XTsJCS8qIG1hbmRhdG9yeSwgTWF4aW11bSA2NCBieXRlICovCi0JdTE2IEtleUxlbmd0aDsKLQl1OCBNYWNBZGRyWzZdOwkvKiBtYW5kYXRvcnksIEFQIE1BQyBhZGRyZXNzICovCi0JdTggS2V5SW5kZXg7CQkvKiBvcHRpb25hbCwgZGVmYXVsdCBpcyAxICovCi0JdTggUnN2ZFszXTsJCS8qIE1ha2UgYWxpZ25tZW50ICovCi19OwotCi0vKiBXU0MgY29uZmlndXJlZCBwcm9maWxlcyAqLwotc3RydWN0IHJ0X3dzY19wcm9maWxlIHsKLQl1MzIgUHJvZmlsZUNudDsKLQl1MzIgQXBwbHlQcm9maWxlSWR4OwkvKiBhZGQgYnkgam9obmxpLCBmaXggV1BTIHRlc3QgcGxhbiA1LjEuMSAqLwotCXN0cnVjdCBydF93c2NfY3JlZGVudGlhbCBQcm9maWxlWzhdOwkvKiBTdXBwb3J0IHVwIHRvIDggcHJvZmlsZXMgKi8KLX07Ci0KLSNlbmRpZiAvKiBfT0lEX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3BjaV9tYWluX2Rldi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9wY2lfbWFpbl9kZXYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjVmYmIxOC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3BjaV9tYWluX2Rldi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE5MiArMCwwIEBACi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFJhbGluayBUZWNoIEluYy4KLSAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKLSAqIEhzaW5jaHUgQ291bnR5IDMwMiwKLSAqIFRhaXdhbiwgUi5PLkMuCi0gKgotICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotICAgIE1vZHVsZSBOYW1lOgotICAgIHBjaV9tYWluX2Rldi5jCi0KLSAgICBBYnN0cmFjdDoKLSAgICBDcmVhdGUgYW5kIHJlZ2lzdGVyIG5ldHdvcmsgaW50ZXJmYWNlIGZvciBQQ0kgYmFzZWQgY2hpcHNldHMgaW4gTGludXggcGxhdGZvcm0uCi0KLSAgICBSZXZpc2lvbiBIaXN0b3J5OgotICAgIFdobyAgICAgICAgIAlXaGVuICAgICAgICAgICAgV2hhdAotICAgIEp1c3RpbiBQLiBNYXR0b2NrCTExLzA3LzIwMTAJRml4IHR5cG9zIGluIHNvbWUgY29tbWVudHMKLSAgICAtLS0tLS0tLSAgICAtLS0tLS0tLS0tICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQotI2luY2x1ZGUgInJ0X2NvbmZpZy5oIgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLQotLyogRm9sbG93aW5nIGluZm9ybWF0aW9uIHdpbGwgYmUgc2hvdyB3aGVuIHlvdSBydW4gJ21vZGluZm8nICovCi0vKiBJZiB5b3UgaGF2ZSBhIHNvbHV0aW9uIGZvciBhIGJ1ZyBpbiBjdXJyZW50IHZlcnNpb24gb2YgZHJpdmVyLCBwbGVhc2UgZS1tYWlsIG1lLiAqLwotLyogT3RoZXJ3aXNlIHBvc3QgdG8gZm9ydW0gaW4gcmFsaW5rdGVjaCdzIHdlYiBzaXRlKHd3dy5yYWxpbmt0ZWNoLmNvbSkgYW5kIGxldCBhbGwgdXNlcnMgaGVscCB5b3UuICovCi1NT0RVTEVfQVVUSE9SKCJKZXR0IENoZW4gPGpldHRfY2hlbkByYWxpbmt0ZWNoLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiUlQyODYwL1JUMzA5MCBXaXJlbGVzcyBMYW4gTGludXggRHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQUxJQVMoInJ0MzA5MHN0YSIpOwotCi0vKiAqLwotLyogRnVuY3Rpb24gZGVjbGFyYXRpb25zICovCi0vKiAqLwotc3RhdGljIHZvaWQgX19kZXZleGl0IHJ0Mjg2MF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KTsKLXN0YXRpYyBpbnQgX19kZXZpbml0IHJ0Mjg2MF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwKLQkJCQkgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpOwotc3RhdGljIHZvaWQgX19leGl0IHJ0Mjg2MF9jbGVhbnVwX21vZHVsZSh2b2lkKTsKLXN0YXRpYyBpbnQgX19pbml0IHJ0Mjg2MF9pbml0X21vZHVsZSh2b2lkKTsKLQotc3RhdGljIHZvaWQgUlRNUEluaXRQQ0llRGV2aWNlKElOIHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LAotCQkJICAgICAgIHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLSNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgcnQyODYwX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7Ci1zdGF0aWMgaW50IHJ0Mjg2MF9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpOwotI2VuZGlmIC8qIENPTkZJR19QTSAvLyAqLwotCi0vKiAqLwotLyogUmFsaW5rIFBDSSBkZXZpY2UgdGFibGUsIGluY2x1ZGUgYWxsIHN1cHBvcnRlZCBjaGlwc2V0cyAqLwotLyogKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBydDI4NjBfcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7Ci0jaWZkZWYgUlQyODYwCi0Je1BDSV9ERVZJQ0UoTklDX1BDSV9WRU5ET1JfSUQsIE5JQzI4NjBfUENJX0RFVklDRV9JRCl9LAkvKlJUMjg2MDIuNEcgKi8KLQl7UENJX0RFVklDRShOSUNfUENJX1ZFTkRPUl9JRCwgTklDMjg2MF9QQ0llX0RFVklDRV9JRCl9LAotCXtQQ0lfREVWSUNFKE5JQ19QQ0lfVkVORE9SX0lELCBOSUMyNzYwX1BDSV9ERVZJQ0VfSUQpfSwKLQl7UENJX0RFVklDRShOSUNfUENJX1ZFTkRPUl9JRCwgTklDMjc5MF9QQ0llX0RFVklDRV9JRCl9LAotCXtQQ0lfREVWSUNFKFZFTl9BV1RfUENJX1ZFTkRPUl9JRCwgVkVOX0FXVF9QQ0llX0RFVklDRV9JRCl9LAotCXtQQ0lfREVWSUNFKEVESU1BWF9QQ0lfVkVORE9SX0lELCAweDc3MDgpfSwKLQl7UENJX0RFVklDRShFRElNQVhfUENJX1ZFTkRPUl9JRCwgMHg3NzI4KX0sCi0Je1BDSV9ERVZJQ0UoRURJTUFYX1BDSV9WRU5ET1JfSUQsIDB4Nzc1OCl9LAotCXtQQ0lfREVWSUNFKEVESU1BWF9QQ0lfVkVORE9SX0lELCAweDc3MjcpfSwKLQl7UENJX0RFVklDRShFRElNQVhfUENJX1ZFTkRPUl9JRCwgMHg3NzM4KX0sCi0Je1BDSV9ERVZJQ0UoRURJTUFYX1BDSV9WRU5ET1JfSUQsIDB4Nzc0OCl9LAotCXtQQ0lfREVWSUNFKEVESU1BWF9QQ0lfVkVORE9SX0lELCAweDc3NjgpfSwKLSNlbmRpZgotI2lmZGVmIFJUMzA5MAotCXtQQ0lfREVWSUNFKE5JQ19QQ0lfVkVORE9SX0lELCBOSUMzMDkwX1BDSWVfREVWSUNFX0lEKX0sCi0Je1BDSV9ERVZJQ0UoTklDX1BDSV9WRU5ET1JfSUQsIE5JQzMwOTFfUENJZV9ERVZJQ0VfSUQpfSwKLQl7UENJX0RFVklDRShOSUNfUENJX1ZFTkRPUl9JRCwgTklDMzA5Ml9QQ0llX0RFVklDRV9JRCl9LAotI2VuZGlmIC8qIFJUMzA5MCAvLyAqLwotI2lmZGVmIFJUMzM5MAotCXtQQ0lfREVWSUNFKE5JQ19QQ0lfVkVORE9SX0lELCBOSUMzMzkwX1BDSWVfREVWSUNFX0lEKX0sCi0Je1BDSV9ERVZJQ0UoTklDX1BDSV9WRU5ET1JfSUQsIE5JQzMzOTFfUENJZV9ERVZJQ0VfSUQpfSwKLQl7UENJX0RFVklDRShOSUNfUENJX1ZFTkRPUl9JRCwgTklDMzM5Ml9QQ0llX0RFVklDRV9JRCl9LAotI2VuZGlmIC8qIFJUMzM5MCAvLyAqLwotCXswLH0JCQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwotfTsKLQotTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHJ0Mjg2MF9wY2lfdGJsKTsKLSNpZmRlZiBNT0RVTEVfVkVSU0lPTgotTU9EVUxFX1ZFUlNJT04oU1RBX0RSSVZFUl9WRVJTSU9OKTsKLSNlbmRpZgotCi0vKiAqLwotLyogT3VyIFBDSSBkcml2ZXIgc3RydWN0dXJlICovCi0vKiAqLwotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHJ0Mjg2MF9kcml2ZXIgPSB7Ci1uYW1lOiAicnQyODYwIiwKLWlkX3RhYmxlIDogcnQyODYwX3BjaV90YmwsCi1wcm9iZSA6IHJ0Mjg2MF9wcm9iZSwKLXJlbW92ZSA6IF9fZGV2ZXhpdF9wKHJ0Mjg2MF9yZW1vdmVfb25lKSwKLSNpZmRlZiBDT05GSUdfUE0KLXN1c3BlbmQgOiBydDI4NjBfc3VzcGVuZCwKLXJlc3VtZSA6IHJ0Mjg2MF9yZXN1bWUsCi0jZW5kaWYKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglQQ0kgZGV2aWNlIGluaXRpYWxpemF0aW9uIHJlbGF0ZWQgcHJvY2VkdXJlcy4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmZGVmIENPTkZJR19QTQotCi12b2lkIFJUMjg2MFJlamVjdFBlbmRpbmdQYWNrZXRzKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQkvKiBjbGVhciBQUyBwYWNrZXRzICovCi0JLyogY2xlYXIgVHhTdyBwYWNrZXRzICovCi19Ci0KLXN0YXRpYyBpbnQgcnQyODYwX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKLQlzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQgPSAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqKU5VTEw7Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT0+IHJ0Mjg2MF9zdXNwZW5kKClcbiIpKTsKLQotCWlmIChuZXRfZGV2ID09IE5VTEwpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgibmV0X2RldiA9PSBOVUxMIVxuIikpOwotCX0gZWxzZSB7Ci0JCUdFVF9QQURfRlJPTV9ORVRfREVWKHBBZCwgbmV0X2Rldik7Ci0KLQkJLyogd2UgY2FuIG5vdCB1c2UgSUZGX1VQIGJlY2F1c2UgcmEwIGRvd24gYnV0IHJhMSB1cCAqLwotCQkvKiBhbmQgMSBzdXNwZW5kL3Jlc3VtZSBmdW5jdGlvbiBmb3IgMSBtb2R1bGUsIG5vdCBmb3IgZWFjaCBpbnRlcmZhY2UgKi8KLQkJLyogc28gTGludXggd2lsbCBjYWxsIHN1c3BlbmQvcmVzdW1lIGZ1bmN0aW9uIG9uY2UgKi8KLQkJaWYgKFZJUlRVQUxfSUZfTlVNKHBBZCkgPiAwKSB7Ci0JCQkvKiBhdm9pZCB1c2VycyBkbyBzdXNwZW5kIGFmdGVyIGludGVyZmFjZSBpcyBkb3duICovCi0KLQkJCS8qIHN0b3AgaW50ZXJmYWNlICovCi0JCQluZXRpZl9jYXJyaWVyX29mZihuZXRfZGV2KTsKLQkJCW5ldGlmX3N0b3BfcXVldWUobmV0X2Rldik7Ci0KLQkJCS8qIG1hcmsgZGV2aWNlIGFzIHJlbW92ZWQgZnJvbSBzeXN0ZW0gYW5kIHRoZXJlZm9yZSBubyBsb25nZXIgYXZhaWxhYmxlICovCi0JCQluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldF9kZXYpOwotCi0JCQkvKiBtYXJrIGhhbHQgZmxhZyAqLwotCQkJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyk7Ci0JCQlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SQURJT19PRkYpOwotCi0JCQkvKiB0YWtlIGRvd24gdGhlIGRldmljZSAqLwotCQkJcnQyOHh4X2Nsb3NlKChzdHJ1Y3QgbmV0X2RldmljZSAqKW5ldF9kZXYpOwotCi0JCQlSVF9NT0RfREVDX1VTRV9DT1VOVCgpOwotCQl9Ci0JfQotCi0JLyogcmVmZXJlbmNlIHRvIGh0dHA6Ly92b3ZvMjAwMC5jb20vdHlwZS1sYWIvbGludXgva2VybmVsLWFwaS9saW51eC1rZXJuZWwtYXBpLmh0bWwgKi8KLQkvKiBlbmFibGUgZGV2aWNlIHRvIGdlbmVyYXRlIFBNRSMgd2hlbiBzdXNwZW5kZWQgKi8KLQkvKiBwY2lfY2hvb3NlX3N0YXRlKCk6IENob29zZSB0aGUgcG93ZXIgc3RhdGUgb2YgYSBQQ0kgZGV2aWNlIHRvIGJlIHN1c3BlbmRlZCAqLwotCXJldHZhbCA9IHBjaV9lbmFibGVfd2FrZShwY2lfZGV2LCBwY2lfY2hvb3NlX3N0YXRlKHBjaV9kZXYsIHN0YXRlKSwgMSk7Ci0JLyogc2F2ZSB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2Ugb2YgYSBkZXZpY2UgYmVmb3JlIHN1c3BlbmRpbmcgKi8KLQlwY2lfc2F2ZV9zdGF0ZShwY2lfZGV2KTsKLQkvKiBkaXNhYmxlIFBDSSBkZXZpY2UgYWZ0ZXIgdXNlICovCi0JcGNpX2Rpc2FibGVfZGV2aWNlKHBjaV9kZXYpOwotCi0JcmV0dmFsID0gcGNpX3NldF9wb3dlcl9zdGF0ZShwY2lfZGV2LCBwY2lfY2hvb3NlX3N0YXRlKHBjaV9kZXYsIHN0YXRlKSk7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8PT09IHJ0Mjg2MF9zdXNwZW5kKClcbiIpKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgaW50IHJ0Mjg2MF9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7Ci0Jc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkID0gKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKilOVUxMOwotCWludCByZXR2YWw7Ci0KLQkvKiBzZXQgdGhlIHBvd2VyIHN0YXRlIG9mIGEgUENJIGRldmljZSAqLwotCS8qIFBDSSBoYXMgNCBwb3dlciBzdGF0ZXMsIERPIChub3JtYWwpIH4gRDMobGVzcyBwb3dlcikgKi8KLQkvKiBpbiBpbmNsdWRlL2xpbnV4L3BjaS5oLCB5b3UgY2FuIGZpbmQgdGhhdCAqLwotCS8qICNkZWZpbmUgUENJX0QwICAgICAgICAgICgocGNpX3Bvd2VyX3QgX19mb3JjZSkgMCkgKi8KLQkvKiAjZGVmaW5lIFBDSV9EMSAgICAgICAgICAoKHBjaV9wb3dlcl90IF9fZm9yY2UpIDEpICovCi0JLyogI2RlZmluZSBQQ0lfRDIgICAgICAgICAgKChwY2lfcG93ZXJfdCBfX2ZvcmNlKSAyKSAqLwotCS8qICNkZWZpbmUgUENJX0QzaG90ICAgICAgICgocGNpX3Bvd2VyX3QgX19mb3JjZSkgMykgKi8KLQkvKiAjZGVmaW5lIFBDSV9EM2NvbGQgICAgICAoKHBjaV9wb3dlcl90IF9fZm9yY2UpIDQpICovCi0JLyogI2RlZmluZSBQQ0lfVU5LTk9XTiAgICAgKChwY2lfcG93ZXJfdCBfX2ZvcmNlKSA1KSAqLwotCS8qICNkZWZpbmUgUENJX1BPV0VSX0VSUk9SICgocGNpX3Bvd2VyX3QgX19mb3JjZSkgLTEpICovCi0JcmV0dmFsID0gcGNpX3NldF9wb3dlcl9zdGF0ZShwY2lfZGV2LCBQQ0lfRDApOwotCi0JLyogcmVzdG9yZSB0aGUgc2F2ZWQgc3RhdGUgb2YgYSBQQ0kgZGV2aWNlICovCi0JcGNpX3Jlc3RvcmVfc3RhdGUocGNpX2Rldik7Ci0KLQkvKiBpbml0aWFsaXplIGRldmljZSBiZWZvcmUgaXQncyB1c2VkIGJ5IGEgZHJpdmVyICovCi0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaV9kZXYpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicnQyODYwOiBwY2kgZW5hYmxlIGZhaWwhXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PiBydDI4NjBfcmVzdW1lKClcbiIpKTsKLQotCWlmIChuZXRfZGV2ID09IE5VTEwpCi0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIm5ldF9kZXYgPT0gTlVMTCFcbiIpKTsKLQllbHNlCi0JCUdFVF9QQURfRlJPTV9ORVRfREVWKHBBZCwgbmV0X2Rldik7Ci0KLQlpZiAocEFkICE9IE5VTEwpIHsKLQkJLyogd2UgY2FuIG5vdCB1c2UgSUZGX1VQIGJlY2F1c2UgcmEwIGRvd24gYnV0IHJhMSB1cCAqLwotCQkvKiBhbmQgMSBzdXNwZW5kL3Jlc3VtZSBmdW5jdGlvbiBmb3IgMSBtb2R1bGUsIG5vdCBmb3IgZWFjaCBpbnRlcmZhY2UgKi8KLQkJLyogc28gTGludXggd2lsbCBjYWxsIHN1c3BlbmQvcmVzdW1lIGZ1bmN0aW9uIG9uY2UgKi8KLQkJaWYgKFZJUlRVQUxfSUZfTlVNKHBBZCkgPiAwKSB7Ci0JCQkvKiBtYXJrIGRldmljZSBhcyBhdHRhY2hlZCBmcm9tIHN5c3RlbSBhbmQgcmVzdGFydCBpZiBuZWVkZWQgKi8KLQkJCW5ldGlmX2RldmljZV9hdHRhY2gobmV0X2Rldik7Ci0KLQkJCWlmIChydDI4eHhfb3Blbigoc3RydWN0IG5ldF9kZXZpY2UgKiluZXRfZGV2KSAhPSAwKSB7Ci0JCQkJLyogb3BlbiBmYWlsICovCi0JCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJCSAoIjw9PT0gcnQyODYwX3Jlc3VtZSgpXG4iKSk7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCQkvKiBpbmNyZWFzZSBNT0RVTEUgdXNlIGNvdW50ICovCi0JCQlSVF9NT0RfSU5DX1VTRV9DT1VOVCgpOwotCi0JCQlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpOwotCQkJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SQURJT19PRkYpOwotCi0JCQluZXRpZl9zdGFydF9xdWV1ZShuZXRfZGV2KTsKLQkJCW5ldGlmX2NhcnJpZXJfb24obmV0X2Rldik7Ci0JCQluZXRpZl93YWtlX3F1ZXVlKG5ldF9kZXYpOwotCQl9Ci0JfQotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPD09PSBydDI4NjBfcmVzdW1lKClcbiIpKTsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAvKiBDT05GSUdfUE0gLy8gKi8KLQotc3RhdGljIGludCBfX2luaXQgcnQyODYwX2luaXRfbW9kdWxlKHZvaWQpCi17Ci0JcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnJ0Mjg2MF9kcml2ZXIpOwotfQotCi0vKiAqLwotLyogRHJpdmVyIG1vZHVsZSB1bmxvYWQgZnVuY3Rpb24gKi8KLS8qICovCi1zdGF0aWMgdm9pZCBfX2V4aXQgcnQyODYwX2NsZWFudXBfbW9kdWxlKHZvaWQpCi17Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZydDI4NjBfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQocnQyODYwX2luaXRfbW9kdWxlKTsKLW1vZHVsZV9leGl0KHJ0Mjg2MF9jbGVhbnVwX21vZHVsZSk7Ci0KLS8qICovCi0vKiBQQ0kgZGV2aWNlIHByb2JlICYgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gKi8KLS8qICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBydDI4NjBfcHJvYmUoSU4gc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsCi0JCQkJICBJTiBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2lkKQotewotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCA9IChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICopTlVMTDsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldjsKLQl2b2lkICpoYW5kbGU7Ci0JY2hhciAqcHJpbnRfbmFtZTsKLQl1bnNpZ25lZCBsb25nIGNzcl9hZGRyOwotCWludCBydiA9IDA7Ci0Jc3RydWN0IHJ0X3J0bXBfb3NfbmV0ZGV2X29wX2hvb2sgbmV0RGV2SG9vazsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PT4gcnQyODYwX3Byb2JlXG4iKSk7Ci0KLS8qUENJRGV2SW5pdD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQkvKiB3YWtlIHVwIGFuZCBlbmFibGUgZGV2aWNlICovCi0JcnYgPSBwY2lfZW5hYmxlX2RldmljZShwY2lfZGV2KTsKLQotCWlmIChydiAhPSAwKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJICgiRW5hYmxlIFBDSSBkZXZpY2UgZmFpbGVkLCBlcnJubz0lZCFcbiIsIHJ2KSk7Ci0JCXJldHVybiBydjsKLQl9Ci0KLQlwcmludF9uYW1lID0gKGNoYXIgKilwY2lfbmFtZShwY2lfZGV2KTsKLQotCXJ2ID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwY2lfZGV2LCBwcmludF9uYW1lKTsKLQotCWlmIChydiAhPSAwKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJICgiUmVxdWVzdCBQQ0kgcmVzb3VyY2UgZmFpbGVkLCBlcnJubz0lZCFcbiIsIHJ2KSk7Ci0JCWdvdG8gZXJyX291dDsKLQl9Ci0JLyogbWFwIHBoeXNpY2FsIGFkZHJlc3MgdG8gdmlydHVhbCBhZGRyZXNzIGZvciBhY2Nlc3NpbmcgcmVnaXN0ZXIgKi8KLQljc3JfYWRkciA9Ci0JICAgICh1bnNpZ25lZCBsb25nKWlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KHBjaV9kZXYsIDApLAotCQkJCSAgIHBjaV9yZXNvdXJjZV9sZW4ocGNpX2RldiwgMCkpOwotCWlmICghY3NyX2FkZHIpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkgKCJpb3JlbWFwIGZhaWxlZCBmb3IgZGV2aWNlICVzLCByZWdpb24gMHglbFggQCAweCVsWFxuIiwKLQkJCSAgcHJpbnRfbmFtZSwgKHVuc2lnbmVkIGxvbmcpcGNpX3Jlc291cmNlX2xlbihwY2lfZGV2LCAwKSwKLQkJCSAgKHVuc2lnbmVkIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KHBjaV9kZXYsIDApKSk7Ci0JCWdvdG8gZXJyX291dF9mcmVlX3JlczsKLQl9IGVsc2UgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIiVzOiBhdCAweCVseCwgVkEgMHglbHgsIElSUSAlZC4gXG4iLCBwcmludF9uYW1lLAotCQkJICAodW5zaWduZWQgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwgMCksCi0JCQkgICh1bnNpZ25lZCBsb25nKWNzcl9hZGRyLCBwY2lfZGV2LT5pcnEpKTsKLQl9Ci0KLQkvKiBTZXQgRE1BIG1hc3RlciAqLwotCXBjaV9zZXRfbWFzdGVyKHBjaV9kZXYpOwotCi0vKlJ0bXBEZXZJbml0PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCS8qIEFsbG9jYXRlIHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgYWRhcHRlciBzdHJ1Y3R1cmUgKi8KLQloYW5kbGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgb3NfY29va2llKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGhhbmRsZSA9PSBOVUxMKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJICgiJXMoKTogQWxsb2NhdGUgbWVtb3J5IGZvciBvcyBoYW5kbGUgZmFpbGVkIVxuIiwKLQkJCSAgX19mdW5jX18pKTsKLQkJZ290byBlcnJfb3V0X2lvdW5tYXA7Ci0JfQotCi0JKChzdHJ1Y3Qgb3NfY29va2llICopaGFuZGxlKS0+cGNpX2RldiA9IHBjaV9kZXY7Ci0KLQlydiA9IFJUTVBBbGxvY0FkYXB0ZXJCbG9jayhoYW5kbGUsICZwQWQpOwkvKnNoaWFuZzogd2UgbWF5IG5lZWQgdGhlIHBjaV9kZXYgZm9yIGFsbG9jYXRlIHN0cnVjdHVyZSBvZiAic3RydWN0IHJ0X3J0bXBfYWRhcHRlciIgKi8KLQlpZiAocnYgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKLQkJZ290byBlcnJfb3V0X2lvdW5tYXA7Ci0JLyogSGVyZSBhcmUgdGhlIHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgc3RydWN0dXJlIHdpdGggcGNpLWJ1cyBzcGVjaWZpYyBwYXJhbWV0ZXJzLiAqLwotCXBBZC0+Q1NSQmFzZUFkZHJlc3MgPSAodTggKiljc3JfYWRkcjsKLQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJICgicEFkLT5DU1JCYXNlQWRkcmVzcyA9MHglbHgsIGNzcl9hZGRyPTB4JWx4IVxuIiwKLQkJICAodW5zaWduZWQgbG9uZylwQWQtPkNTUkJhc2VBZGRyZXNzLCBjc3JfYWRkcikpOwotCVJ0bXBSYURldkN0cmxJbml0KHBBZCwgUlRNUF9ERVZfSU5GX1BDSSk7Ci0KLS8qTmV0RGV2SW5pdD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQluZXRfZGV2ID0gUnRtcFBoeU5ldERldkluaXQocEFkLCAmbmV0RGV2SG9vayk7Ci0JaWYgKG5ldF9kZXYgPT0gTlVMTCkKLQkJZ290byBlcnJfb3V0X2ZyZWVfcmFkZXY7Ci0KLQkvKiBIZXJlIGFyZSB0aGUgbmV0X2RldmljZSBzdHJ1Y3R1cmUgd2l0aCBwY2ktYnVzIHNwZWNpZmljIHBhcmFtZXRlcnMuICovCi0JbmV0X2Rldi0+aXJxID0gcGNpX2Rldi0+aXJxOwkvKiBJbnRlcnJ1cHQgSVJRIG51bWJlciAqLwotCW5ldF9kZXYtPmJhc2VfYWRkciA9IGNzcl9hZGRyOwkvKiBTYXZlIENTUiB2aXJ0dWFsIGFkZHJlc3MgYW5kIGlycSB0byBkZXZpY2Ugc3RydWN0dXJlICovCi0JcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsIG5ldF9kZXYpOwkvKiBTZXQgZHJpdmVyIGRhdGEgKi8KLQotLyogZm9yIHN1cHBvcnRpbmcgTmV0d29yayBNYW5hZ2VyICovCi0JLyogU2V0IHRoZSBzeXNmcyBwaHlzaWNhbCBkZXZpY2UgcmVmZXJlbmNlIGZvciB0aGUgbmV0d29yayBsb2dpY2FsIGRldmljZQotCSAqIGlmIHNldCBwcmlvciB0byByZWdpc3RyYXRpb24gd2lsbCBjYXVzZSBhIHN5bWxpbmsgZHVyaW5nIGluaXRpYWxpemF0aW9uLgotCSAqLwotCVNFVF9ORVRERVZfREVWKG5ldF9kZXYsICYocGNpX2Rldi0+ZGV2KSk7Ci0KLS8qQWxsIGRvbmUsIGl0J3MgdGltZSB0byByZWdpc3RlciB0aGUgbmV0IGRldmljZSB0byBsaW51eCBrZXJuZWwuICovCi0JLyogUmVnaXN0ZXIgdGhpcyBkZXZpY2UgKi8KLQlydiA9IFJ0bXBPU05ldERldkF0dGFjaChuZXRfZGV2LCAmbmV0RGV2SG9vayk7Ci0JaWYgKHJ2KQotCQlnb3RvIGVycl9vdXRfZnJlZV9uZXRkZXY7Ci0KLQlwQWQtPlN0YUNmZy5PcmlEZXZUeXBlID0gbmV0X2Rldi0+dHlwZTsKLQlSVE1QSW5pdFBDSWVEZXZpY2UocGNpX2RldiwgcEFkKTsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjw9PT0gcnQyODYwX3Byb2JlXG4iKSk7Ci0KLQlyZXR1cm4gMDsJCS8qIHByb2JlIG9rICovCi0KLQkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRVJST1IgSEFORExFIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotZXJyX291dF9mcmVlX25ldGRldjoKLQlSdG1wT1NOZXREZXZGcmVlKG5ldF9kZXYpOwotCi1lcnJfb3V0X2ZyZWVfcmFkZXY6Ci0JLyogZnJlZSBzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyIHN0cmN1dHVyZSBhbmQgb3NfY29va2llICovCi0JUlRNUEZyZWVBZGFwdGVyKHBBZCk7Ci0KLWVycl9vdXRfaW91bm1hcDoKLQlpb3VubWFwKCh2b2lkICopKGNzcl9hZGRyKSk7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2LCAwKSwKLQkJCSAgIHBjaV9yZXNvdXJjZV9sZW4ocGNpX2RldiwgMCkpOwotCi1lcnJfb3V0X2ZyZWVfcmVzOgotCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGNpX2Rldik7Ci0KLWVycl9vdXQ6Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBjaV9kZXYpOwotCi0JREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCSAoIjw9PT0gcnQyODYwX3Byb2JlIGZhaWxlZCB3aXRoIHJ2ID0gJWQhXG4iLCBydikpOwotCi0JcmV0dXJuIC1FTk9ERVY7CQkvKiBwcm9iZSBmYWlsICovCi19Ci0KLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBydDI4NjBfcmVtb3ZlX29uZShJTiBzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKLQlzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgY3NyX2FkZHIgPSBuZXRfZGV2LT5iYXNlX2FkZHI7CS8qIHBBZC0+Q1NSQmFzZUFkZHJlc3M7ICovCi0KLQlHRVRfUEFEX0ZST01fTkVUX0RFVihwQWQsIG5ldF9kZXYpOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PiBydDI4NjBfcmVtb3ZlX29uZVxuIikpOwotCi0JaWYgKHBBZCAhPSBOVUxMKSB7Ci0JCS8qIFVucmVnaXN0ZXIvRnJlZSBhbGwgYWxsb2NhdGVkIG5ldF9kZXZpY2UuICovCi0JCVJ0bXBQaHlOZXREZXZFeGl0KHBBZCwgbmV0X2Rldik7Ci0KLQkJLyogVW5tYXAgQ1NSIGJhc2UgYWRkcmVzcyAqLwotCQlpb3VubWFwKChjaGFyICopKGNzcl9hZGRyKSk7Ci0KLQkJLyogcmVsZWFzZSBtZW1vcnkgcmVnaW9uICovCi0JCXJlbGVhc2VfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwgMCksCi0JCQkJICAgcGNpX3Jlc291cmNlX2xlbihwY2lfZGV2LCAwKSk7Ci0KLQkJLyogRnJlZSBzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyIHJlbGF0ZWQgc3RydWN0dXJlcy4gKi8KLQkJUnRtcFJhRGV2Q3RybEV4aXQocEFkKTsKLQotCX0gZWxzZSB7Ci0JCS8qIFVucmVnaXN0ZXIgbmV0d29yayBkZXZpY2UgKi8KLQkJUnRtcE9TTmV0RGV2RGV0YWNoKG5ldF9kZXYpOwotCi0JCS8qIFVubWFwIENTUiBiYXNlIGFkZHJlc3MgKi8KLQkJaW91bm1hcCgoY2hhciAqKShuZXRfZGV2LT5iYXNlX2FkZHIpKTsKLQotCQkvKiByZWxlYXNlIG1lbW9yeSByZWdpb24gKi8KLQkJcmVsZWFzZV9tZW1fcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2LCAwKSwKLQkJCQkgICBwY2lfcmVzb3VyY2VfbGVuKHBjaV9kZXYsIDApKTsKLQl9Ci0KLQkvKiBGcmVlIHRoZSByb290IG5ldF9kZXZpY2UgKi8KLQlSdG1wT1NOZXREZXZGcmVlKG5ldF9kZXYpOwotCi19Ci0KLS8qCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLVJvdXRpbmUgRGVzY3JpcHRpb246Ci0gICAgQ2hlY2sgdGhlIGNoaXBzZXQgdmVuZG9yL3Byb2R1Y3QgSUQuCi0KLUFyZ3VtZW50czoKLSAgICBfZGV2X3AJCQkJUG9pbnQgdG8gdGhlIFBDSSBvciBVU0IgZGV2aWNlCi0KLVJldHVybiBWYWx1ZToKLSAgICBUUlVFCQkJCUNoZWNrIG9rCi0JRkFMU0UJCQkJQ2hlY2sgZmFpbAotCi1Ob3RlOgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotQk9PTEVBTiBSVDI4WFhDaGlwc2V0Q2hlY2soSU4gdm9pZCAqX2Rldl9wKQotewotCS8qIGFsd2F5cyBUUlVFICovCi0JcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglQQ0llIGRldmljZSBpbml0aWFsaXphdGlvbiByZWxhdGVkIHByb2NlZHVyZXMuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB2b2lkIFJUTVBJbml0UENJZURldmljZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2Rldiwgc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCXUxNiBkZXZpY2VfaWQ7Ci0Jc3RydWN0IG9zX2Nvb2tpZSAqcE9iajsKLQotCXBPYmogPSAoc3RydWN0IG9zX2Nvb2tpZSAqKXBBZC0+T1NfQ29va2llOwotCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBjaV9kZXYsIFBDSV9ERVZJQ0VfSUQsICZkZXZpY2VfaWQpOwotCWRldmljZV9pZCA9IGxlMmNwdTE2KGRldmljZV9pZCk7Ci0JcE9iai0+RGV2aWNlSUQgPSBkZXZpY2VfaWQ7Ci0JaWYgKAotI2lmZGVmIFJUMjg2MAotCQkgICAoZGV2aWNlX2lkID09IE5JQzI4NjBfUENJZV9ERVZJQ0VfSUQpIHx8Ci0JCSAgIChkZXZpY2VfaWQgPT0gTklDMjc5MF9QQ0llX0RFVklDRV9JRCkgfHwKLQkJICAgKGRldmljZV9pZCA9PSBWRU5fQVdUX1BDSWVfREVWSUNFX0lEKSB8fAotI2VuZGlmCi0jaWZkZWYgUlQzMDkwCi0JCSAgIChkZXZpY2VfaWQgPT0gTklDMzA5MF9QQ0llX0RFVklDRV9JRCkgfHwKLQkJICAgKGRldmljZV9pZCA9PSBOSUMzMDkxX1BDSWVfREVWSUNFX0lEKSB8fAotCQkgICAoZGV2aWNlX2lkID09IE5JQzMwOTJfUENJZV9ERVZJQ0VfSUQpIHx8Ci0jZW5kaWYgLyogUlQzMDkwIC8vICovCi0JCSAgIDApIHsKLQkJdTMyIE1hY0NzcjAgPSAwLCBJbmRleCA9IDA7Ci0JCWRvIHsKLQkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX0NTUjAsICZNYWNDc3IwKTsKLQotCQkJaWYgKChNYWNDc3IwICE9IDB4MDApICYmIChNYWNDc3IwICE9IDB4RkZGRkZGRkYpKQotCQkJCWJyZWFrOwotCi0JCQlSVE1QdXNlY0RlbGF5KDEwKTsKLQkJfSB3aGlsZSAoSW5kZXgrKyA8IDEwMCk7Ci0KLQkJLyogU3VwcG9ydCBhZHZhbmNlZCBwb3dlciBzYXZlIGFmdGVyIDI4OTIvMjc5MC4gKi8KLQkJLyogTUFDIHZlcnNpb24gYXQgb2Zmc2V0IDB4MTAwMCBpcyAweDI4NzJYWFhYLzB4Mjg3MFhYWFgoUENJZSwgVVNCLCBTRElPKS4gKi8KLQkJaWYgKChNYWNDc3IwICYgMHhmZmZmMDAwMCkgIT0gMHgyODYwMDAwMCkKLQkJCU9QU1RBVFVTX1NFVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19QQ0lFX0RFVklDRSk7Ci0JfQotfQotCi12b2lkIFJUTVBJbml0UENJZUxpbmtDdHJsVmFsdWUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCWludCBwb3M7Ci0JdTE2IHJlZzE2LCBkYXRhMiwgUENJZVBvd2VyU2F2ZUxldmVsLCBDb25maWd1cmF0aW9uOwotCXUzMiBNYWNWYWx1ZTsKLQlCT09MRUFOIGJGaW5kSW50ZWwgPSBGQUxTRTsKLQlzdHJ1Y3Qgb3NfY29va2llICpwT2JqOwotCi0JcE9iaiA9IChzdHJ1Y3Qgb3NfY29va2llICopcEFkLT5PU19Db29raWU7Ci0KLQlpZiAoIU9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfUENJRV9ERVZJQ0UpKQotCQlyZXR1cm47Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlcy49PT0+XG4iLCBfX2Z1bmNfXykpOwotCS8qIEluaXQgRUVQUk9NLCBhbmQgc2F2ZSBzZXR0aW5ncyAqLwotCWlmICghKElTX1JUMzA5MChwQWQpIHx8IElTX1JUMzU3MihwQWQpIHx8IElTX1JUMzM5MChwQWQpKSkgewotCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIDB4MjIsIFBDSWVQb3dlclNhdmVMZXZlbCk7Ci0JCXBBZC0+UENJZVBvd2VyU2F2ZUxldmVsID0gUENJZVBvd2VyU2F2ZUxldmVsICYgMHhmZjsKLQotCQlwQWQtPkxua0N0cmxCaXRNYXNrID0gMDsKLQkJaWYgKChQQ0llUG93ZXJTYXZlTGV2ZWwgJiAweGZmKSA9PSAweGZmKSB7Ci0JCQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19QQ0lFX0RFVklDRSk7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCI9PT09PiBQQ0llUG93ZXJTYXZlTGV2ZWwgPSAweCV4LlxuIiwKLQkJCQkgIFBDSWVQb3dlclNhdmVMZXZlbCkpOwotCQkJcmV0dXJuOwotCQl9IGVsc2UgewotCQkJUENJZVBvd2VyU2F2ZUxldmVsICY9IDB4MzsKLQkJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgMHgyNCwgZGF0YTIpOwotCi0JCQlpZiAoIQotCQkJICAgICgoKGRhdGEyICYgMHhmZjAwKSA9PSAweDkyMDApCi0JCQkgICAgICYmICgoZGF0YTIgJiAweDgwKSAhPSAwKSkpIHsKLQkJCQlpZiAoUENJZVBvd2VyU2F2ZUxldmVsID4gMSkKLQkJCQkJUENJZVBvd2VyU2F2ZUxldmVsID0gMTsKLQkJCX0KLQotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiPT09PT4gV3JpdGUgMHg4MyA9IDB4JXguXG4iLAotCQkJCSAgUENJZVBvd2VyU2F2ZUxldmVsKSk7Ci0JCQlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4ODMsIDB4ZmYsCi0JCQkJCSAgICAgKHU4KVBDSWVQb3dlclNhdmVMZXZlbCwgMHgwMCk7Ci0JCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIDB4MjIsIFBDSWVQb3dlclNhdmVMZXZlbCk7Ci0JCQlQQ0llUG93ZXJTYXZlTGV2ZWwgJj0gMHhmZjsKLQkJCVBDSWVQb3dlclNhdmVMZXZlbCA9IFBDSWVQb3dlclNhdmVMZXZlbCA+PiA2OwotCQkJc3dpdGNoIChQQ0llUG93ZXJTYXZlTGV2ZWwpIHsKLQkJCWNhc2UgMDoJLyogT25seSBzdXBwb3J0IEwwICovCi0JCQkJcEFkLT5MbmtDdHJsQml0TWFzayA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDE6CS8qIE9ubHkgZW5hYmxlIEwwcyAqLwotCQkJCXBBZC0+TG5rQ3RybEJpdE1hc2sgPSAxOwotCQkJCWJyZWFrOwotCQkJY2FzZSAyOgkvKiBlbmFibGUgTDEsIEwwcyAqLwotCQkJCXBBZC0+TG5rQ3RybEJpdE1hc2sgPSAzOwotCQkJCWJyZWFrOwotCQkJY2FzZSAzOgkvKiBzeW5jIHdpdGggaG9zdCBjbGsgYW5kIGVuYWJsZSBMMSwgTDBzICovCi0JCQkJcEFkLT5MbmtDdHJsQml0TWFzayA9IDB4MTAzOwotCQkJCWJyZWFrOwotCQkJfQotCQkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAweDI0LCBkYXRhMik7Ci0JCQlpZiAoKFBDSWVQb3dlclNhdmVMZXZlbCAmIDB4ZmYpICE9IDB4ZmYpIHsKLQkJCQlQQ0llUG93ZXJTYXZlTGV2ZWwgJj0gMHgzOwotCi0JCQkJaWYgKCEKLQkJCQkgICAgKCgoZGF0YTIgJiAweGZmMDApID09IDB4OTIwMCkKLQkJCQkgICAgICYmICgoZGF0YTIgJiAweDgwKSAhPSAwKSkpIHsKLQkJCQkJaWYgKFBDSWVQb3dlclNhdmVMZXZlbCA+IDEpCi0JCQkJCQlQQ0llUG93ZXJTYXZlTGV2ZWwgPSAxOwotCQkJCX0KLQotCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkgKCI9PT09PiBydDI4eHggV3JpdGUgMHg4MyBDb21tYW5kID0gMHgleC5cbiIsCi0JCQkJCSAgUENJZVBvd2VyU2F2ZUxldmVsKSk7Ci0KLQkJCQlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4ODMsIDB4ZmYsCi0JCQkJCQkgICAgICh1OClQQ0llUG93ZXJTYXZlTGV2ZWwsCi0JCQkJCQkgICAgIDB4MDApOwotCQkJfQotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiPT09PT4gTG5rQ3RybEJpdE1hc2sgPSAweCV4LlxuIiwKLQkJCQkgIHBBZC0+TG5rQ3RybEJpdE1hc2spKTsKLQkJfQotCX0gZWxzZSBpZiAoSVNfUlQzMDkwKHBBZCkgfHwgSVNfUlQzNTcyKHBBZCkgfHwgSVNfUlQzMzkwKHBBZCkpIHsKLQkJdTggTGlua0N0cmxTZXR0aW5nID0gMDsKLQotCQkvKiBDaGVjayAzMDkwRSBzcGVjaWFsIHNldHRpbmcgY2hpcC4gKi8KLQkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAweDI0LCBkYXRhMik7Ci0JCWlmICgoZGF0YTIgPT0gMHg5MjgwKSAmJiAoKHBBZC0+TUFDVmVyc2lvbiAmIDB4ZmZmZikgPT0gMHgwMjExKSkgewotCQkJcEFkLT5iMzA5MEVTcGVjaWFsQ2hpcCA9IFRSVUU7Ci0JCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICgiU3BlY2lhbCAzMDkwRSBjaGlwIFxuIikpOwotCQl9Ci0KLQkJUlRNUF9JT19SRUFEMzIocEFkLCBBVVhfQ1RSTCwgJk1hY1ZhbHVlKTsKLQkJLyplbmFibGUgV0FLRV9QQ0lFIGZ1bmN0aW9uLCB3aGljaCBmb3JjZXMgdG8gZW5hYmxlIFBDSUUgY2xvY2sgd2hlbiBtcHUgaW50ZXJydXB0IGFzc2VydGluZy4gKi8KLQkJLypGb3JjZSBQQ0lFIDEyNU1IeiBDTEsgdG8gdG9nZ2xlICovCi0JCU1hY1ZhbHVlIHw9IDB4NDAyOwotCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBBVVhfQ1RSTCwgTWFjVmFsdWUpOwotCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsCi0JCQkgICAgICgiIEFVWF9DVFJMID0gMHglMzJ4XG4iLCBNYWNWYWx1ZSkpOwotCi0JCS8qIGZvciBSVDMweHggRiBhbmQgYWZ0ZXIsIFBDSWUgaW50ZXJmYWNlLCBhbmQgZm9yIHBvd2VyIHNvbHV0aW9uIDMgKi8KLQkJaWYgKChJU19WRVJTSU9OX0FGVEVSX0YocEFkKSkKLQkJICAgICYmIChwQWQtPlN0YUNmZy5QU0NvbnRyb2wuZmllbGQucnQzMHh4UG93ZXJNb2RlID49IDIpCi0JCSAgICAmJiAocEFkLT5TdGFDZmcuUFNDb250cm9sLmZpZWxkLnJ0MzB4eFBvd2VyTW9kZSA8PSAzKSkgewotCQkJUlRNUF9JT19SRUFEMzIocEFkLCBBVVhfQ1RSTCwgJk1hY1ZhbHVlKTsKLQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwKLQkJCQkgICAgICgiIFJlYWQgQVVYX0NUUkwgPSAweCV4XG4iLCBNYWNWYWx1ZSkpOwotCQkJLyogdHVybiBvbiBiaXQgMTIuICovCi0JCQkvKmVuYWJsZSAzMktIeiBjbG9jayBtb2RlIGZvciBwb3dlciBzYXZpbmcgKi8KLQkJCU1hY1ZhbHVlIHw9IDB4MTAwMDsKLQkJCWlmIChNYWNWYWx1ZSAhPSAweGZmZmZmZmZmKSB7Ci0JCQkJUlRNUF9JT19XUklURTMyKHBBZCwgQVVYX0NUUkwsIE1hY1ZhbHVlKTsKLQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsCi0JCQkJCSAgICAgKCIgV3JpdGUgQVVYX0NUUkwgPSAweCV4XG4iLAotCQkJCQkgICAgICBNYWNWYWx1ZSkpOwotCQkJCS8qIDEuIGlmIHVzZSBQQ0llUG93ZXJTZXR0aW5nIGlzIDIgb3IgMywgbmVlZCB0byBwcm9ncmFtIE9TQ19DVFJMIHRvIDB4M2ZmMTEuICovCi0JCQkJTWFjVmFsdWUgPSAweDNmZjExOwotCQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE9TQ19DVFJMLCBNYWNWYWx1ZSk7Ci0JCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLAotCQkJCQkgICAgICgiIE9TQ19DVFJMID0gMHgleFxuIiwgTWFjVmFsdWUpKTsKLQkJCQkvKiAyLiBXcml0ZSBQQ0kgcmVnaXN0ZXIgQ2xrIHJlZiBiaXQgKi8KLQkJCQlSVE1QcnQzeFNldFBDSWVQb3dlckxpbmtDdHJsKHBBZCk7Ci0JCQl9IGVsc2UgewotCQkJCS8qIEVycm9yIHJlYWQgQXV4X0N0cmwgdmFsdWUuICBGb3JjZSB0byB1c2Ugc29sdXRpb24gMSAqLwotCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJCQkgKCIgRXJyb3IgVmFsdWUgaW4gQVVYX0NUUkwgPSAweCV4XG4iLAotCQkJCQkgIE1hY1ZhbHVlKSk7Ci0JCQkJcEFkLT5TdGFDZmcuUFNDb250cm9sLmZpZWxkLnJ0MzB4eFBvd2VyTW9kZSA9IDE7Ci0JCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkJCSAoIiBGb3JjZSB0byB1c2UgcG93ZXIgc29sdXRpb24xIFxuIikpOwotCQkJfQotCQl9Ci0JCS8qIDEuIHJlYWQgc2V0dGluZyBmcm9tIGluZiBmaWxlLiAqLwotCi0JCVBDSWVQb3dlclNhdmVMZXZlbCA9Ci0JCSAgICAodTE2KXBBZC0+U3RhQ2ZnLlBTQ29udHJvbC5maWVsZC5ydDMweHhQb3dlck1vZGU7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJICgiPT09PT4gcnQzMHh4IFJlYWQgUG93ZXJMZXZlbE1vZGUgPSAgMHgleC5cbiIsCi0JCQkgIFBDSWVQb3dlclNhdmVMZXZlbCkpOwotCQkvKiAyLiBDaGVjayBFbmFibGVOZXdQUy4gKi8KLQkJaWYgKHBBZC0+U3RhQ2ZnLlBTQ29udHJvbC5maWVsZC5FbmFibGVOZXdQUyA9PSBGQUxTRSkKLQkJCVBDSWVQb3dlclNhdmVMZXZlbCA9IDE7Ci0KLQkJaWYgKElTX1ZFUlNJT05fQkVGT1JFX0YocEFkKQotCQkgICAgJiYgKHBBZC0+YjMwOTBFU3BlY2lhbENoaXAgPT0gRkFMU0UpKSB7Ci0JCQkvKiBDaGlwIFZlcnNpb24gRSBvbmx5IGFsbG93IDEsIFNvIGZvcmNlIHNldCAxLiAqLwotCQkJUENJZVBvd2VyU2F2ZUxldmVsICY9IDB4MTsKLQkJCXBBZC0+UENJZVBvd2VyU2F2ZUxldmVsID0gKHUxNilQQ0llUG93ZXJTYXZlTGV2ZWw7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCI9PT09PiBydDMweHggRSBXcml0ZSAweDgzIENvbW1hbmQgPSAweCV4LlxuIiwKLQkJCQkgIFBDSWVQb3dlclNhdmVMZXZlbCkpOwotCi0JCQlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4ODMsIDB4ZmYsCi0JCQkJCSAgICAgKHU4KVBDSWVQb3dlclNhdmVMZXZlbCwgMHgwMCk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBDaGlwIFZlcnNpb24gRiBhbmQgYWZ0ZXIgb25seSBhbGxvdyAxIG9yIDIgb3IgMy4gVGhpcyBtaWdodCBiZSBtb2RpZmllZCBhZnRlciBuZXcgY2hpcCB2ZXJzaW9uIGNvbWUgb3V0LiAqLwotCQkJaWYgKCEKLQkJCSAgICAoKFBDSWVQb3dlclNhdmVMZXZlbCA9PSAxKQotCQkJICAgICB8fCAoUENJZVBvd2VyU2F2ZUxldmVsID09IDMpKSkKLQkJCQlQQ0llUG93ZXJTYXZlTGV2ZWwgPSAxOwotCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkJICgiPT09PT4gcnQzMHh4IEYgV3JpdGUgMHg4MyBDb21tYW5kID0gMHgleC5cbiIsCi0JCQkJICBQQ0llUG93ZXJTYXZlTGV2ZWwpKTsKLQkJCXBBZC0+UENJZVBvd2VyU2F2ZUxldmVsID0gKHUxNilQQ0llUG93ZXJTYXZlTGV2ZWw7Ci0JCQkvKiBmb3IgMzA5MEYgLCB3ZSBuZWVkIHRvIGFkZCBoaWdoLWJ5dGUgYXJnIGZvciAweDgzIGNvbW1hbmQgdG8gaW5kaWNhdGUgdGhlIGxpbmsgY29udHJvbCBzZXR0aW5nIGluICovCi0JCQkvKiBQQ0kgQ29uZmlndXJhdGlvbiBTcGFjZS4gQmVjYXVzZSBmaXJtd2FyZSBjYW4ndCByZWFkIFBDSSBDb25maWd1cmF0aW9uIFNwYWNlICovCi0JCQlpZiAoKHBBZC0+UnQzeHhSYWxpbmtMaW5rQ3RybCAmIDB4MikKLQkJCSAgICAmJiAocEFkLT5SdDN4eEhvc3RMaW5rQ3RybCAmIDB4MikpIHsKLQkJCQlMaW5rQ3RybFNldHRpbmcgPSAxOwotCQkJfQotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiPT09PT4gcnQzMHh4RiBMaW5rQ3RybFNldHRpbmcgPSAweCV4LlxuIiwKLQkJCQkgIExpbmtDdHJsU2V0dGluZykpOwotCQkJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDgzLCAweGZmLAotCQkJCQkgICAgICh1OClQQ0llUG93ZXJTYXZlTGV2ZWwsCi0JCQkJCSAgICAgTGlua0N0cmxTZXR0aW5nKTsKLQkJfQotCX0KLQkvKiBGaW5kIFJhbGluayBQQ0llIERldmljZSdzIEV4cHJlc3MgQ2FwYWJpbGl0eSBPZmZzZXQgKi8KLQlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBPYmotPnBjaV9kZXYsIFBDSV9DQVBfSURfRVhQKTsKLQotCWlmIChwb3MgIT0gMCkgewotCQkvKiBSYWxpbmsgUENJZSBEZXZpY2UncyBMaW5rIENvbnRyb2wgUmVnaXN0ZXIgT2Zmc2V0ICovCi0JCXBBZC0+Ukxua0N0cmxPZmZzZXQgPSBwb3MgKyBQQ0lfRVhQX0xOS0NUTDsKLQkJcGNpX3JlYWRfY29uZmlnX3dvcmQocE9iai0+cGNpX2RldiwgcEFkLT5STG5rQ3RybE9mZnNldCwKLQkJCQkgICAgICZyZWcxNik7Ci0JCUNvbmZpZ3VyYXRpb24gPSBsZTJjcHUxNihyZWcxNik7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiUmVhZCAoUmFsaW5rIFBDSWUgTGluayBDb250cm9sIFJlZ2lzdGVyKSBvZmZzZXQgMHgleCA9IDB4JXhcbiIsCi0JCQkgIHBBZC0+Ukxua0N0cmxPZmZzZXQsIENvbmZpZ3VyYXRpb24pKTsKLQkJcEFkLT5STG5rQ3RybENvbmZpZ3VyYXRpb24gPSAoQ29uZmlndXJhdGlvbiAmIDB4MTAzKTsKLQkJQ29uZmlndXJhdGlvbiAmPSAweGZlZmM7Ci0JCUNvbmZpZ3VyYXRpb24gfD0gKDB4MCk7Ci0jaWZkZWYgUlQyODYwCi0JCWlmICgocE9iai0+RGV2aWNlSUQgPT0gTklDMjg2MF9QQ0llX0RFVklDRV9JRCkKLQkJICAgIHx8IChwT2JqLT5EZXZpY2VJRCA9PSBOSUMyNzkwX1BDSWVfREVWSUNFX0lEKSkgewotCQkJcmVnMTYgPSBjcHUybGUxNihDb25maWd1cmF0aW9uKTsKLQkJCXBjaV93cml0ZV9jb25maWdfd29yZChwT2JqLT5wY2lfZGV2LAotCQkJCQkgICAgICBwQWQtPlJMbmtDdHJsT2Zmc2V0LCByZWcxNik7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCJXcml0ZSAoUmFsaW5rIFBDSWUgTGluayBDb250cm9sIFJlZ2lzdGVyKSAgb2Zmc2V0IDB4JXggPSAweCV4XG4iLAotCQkJCSAgcG9zICsgUENJX0VYUF9MTktDVEwsIENvbmZpZ3VyYXRpb24pKTsKLQkJfQotI2VuZGlmIC8qIFJUMjg2MCAvLyAqLwotCi0JCVJUTVBGaW5kSG9zdFBDSURldihwQWQpOwotCQlpZiAocE9iai0+cGFyZW50X3BjaV9kZXYpIHsKLQkJCXUxNiB2ZW5kb3JfaWQ7Ci0KLQkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBPYmotPnBhcmVudF9wY2lfZGV2LAotCQkJCQkgICAgIFBDSV9WRU5ET1JfSUQsICZ2ZW5kb3JfaWQpOwotCQkJdmVuZG9yX2lkID0gbGUyY3B1MTYodmVuZG9yX2lkKTsKLQkJCWlmICh2ZW5kb3JfaWQgPT0gUENJQlVTX0lOVEVMX1ZFTkRPUikgewotCQkJCWJGaW5kSW50ZWwgPSBUUlVFOwotCQkJCVJUTVBfU0VUX1BTRkxBRyhwQWQsIGZSVE1QX1BTX1RPR0dMRV9MMSk7Ci0JCQl9Ci0JCQkvKiBGaW5kIFBDSS10by1QQ0kgQnJpZGdlIEV4cHJlc3MgQ2FwYWJpbGl0eSBPZmZzZXQgKi8KLQkJCXBvcyA9Ci0JCQkgICAgcGNpX2ZpbmRfY2FwYWJpbGl0eShwT2JqLT5wYXJlbnRfcGNpX2RldiwKLQkJCQkJCVBDSV9DQVBfSURfRVhQKTsKLQotCQkJaWYgKHBvcyAhPSAwKSB7Ci0JCQkJQk9PTEVBTiBiQ2hhbmdlID0gRkFMU0U7Ci0JCQkJLyogUENJLXRvLVBDSSBCcmlkZ2UgTGluayBDb250cm9sIFJlZ2lzdGVyIE9mZnNldCAqLwotCQkJCXBBZC0+SG9zdExua0N0cmxPZmZzZXQgPSBwb3MgKyBQQ0lfRVhQX0xOS0NUTDsKLQkJCQlwY2lfcmVhZF9jb25maWdfd29yZChwT2JqLT5wYXJlbnRfcGNpX2RldiwKLQkJCQkJCSAgICAgcEFkLT5Ib3N0TG5rQ3RybE9mZnNldCwKLQkJCQkJCSAgICAgJnJlZzE2KTsKLQkJCQlDb25maWd1cmF0aW9uID0gbGUyY3B1MTYocmVnMTYpOwotCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkgKCJSZWFkIChIb3N0IFBDSS10by1QQ0kgQnJpZGdlIExpbmsgQ29udHJvbCBSZWdpc3Rlcikgb2Zmc2V0IDB4JXggPSAweCV4XG4iLAotCQkJCQkgIHBBZC0+SG9zdExua0N0cmxPZmZzZXQsCi0JCQkJCSAgQ29uZmlndXJhdGlvbikpOwotCQkJCXBBZC0+SG9zdExua0N0cmxDb25maWd1cmF0aW9uID0KLQkJCQkgICAgKENvbmZpZ3VyYXRpb24gJiAweDEwMyk7Ci0JCQkJQ29uZmlndXJhdGlvbiAmPSAweGZlZmM7Ci0JCQkJQ29uZmlndXJhdGlvbiB8PSAoMHgwKTsKLQotCQkJCXN3aXRjaCAocE9iai0+RGV2aWNlSUQpIHsKLSNpZmRlZiBSVDI4NjAKLQkJCQljYXNlIE5JQzI4NjBfUENJZV9ERVZJQ0VfSUQ6Ci0JCQkJY2FzZSBOSUMyNzkwX1BDSWVfREVWSUNFX0lEOgotCQkJCQliQ2hhbmdlID0gVFJVRTsKLQkJCQkJYnJlYWs7Ci0jZW5kaWYgLyogUlQyODYwIC8vICovCi0jaWZkZWYgUlQzMDkwCi0JCQkJY2FzZSBOSUMzMDkwX1BDSWVfREVWSUNFX0lEOgotCQkJCWNhc2UgTklDMzA5MV9QQ0llX0RFVklDRV9JRDoKLQkJCQljYXNlIE5JQzMwOTJfUENJZV9ERVZJQ0VfSUQ6Ci0JCQkJCWlmIChiRmluZEludGVsID09IEZBTFNFKQotCQkJCQkJYkNoYW5nZSA9IFRSVUU7Ci0JCQkJCWJyZWFrOwotI2VuZGlmIC8qIFJUMzA5MCAvLyAqLwotCQkJCWRlZmF1bHQ6Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJCWlmIChiQ2hhbmdlKSB7Ci0JCQkJCXJlZzE2ID0gY3B1MmxlMTYoQ29uZmlndXJhdGlvbik7Ci0JCQkJCXBjaV93cml0ZV9jb25maWdfd29yZChwT2JqLT4KLQkJCQkJCQkgICAgICBwYXJlbnRfcGNpX2RldiwKLQkJCQkJCQkgICAgICBwQWQtPgotCQkJCQkJCSAgICAgIEhvc3RMbmtDdHJsT2Zmc2V0LAotCQkJCQkJCSAgICAgIHJlZzE2KTsKLQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJCQkgKCJXcml0ZSAoSG9zdCBQQ0ktdG8tUENJIEJyaWRnZSBMaW5rIENvbnRyb2wgUmVnaXN0ZXIpIG9mZnNldCAweCV4ID0gMHgleFxuIiwKLQkJCQkJCSAgcEFkLT5Ib3N0TG5rQ3RybE9mZnNldCwKLQkJCQkJCSAgQ29uZmlndXJhdGlvbikpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJcEFkLT5Ib3N0TG5rQ3RybE9mZnNldCA9IDA7Ci0JCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkJCSAoIiVzOiBjYW5ub3QgZmluZCBQQ0ktdG8tUENJIEJyaWRnZSBQQ0kgRXhwcmVzcyBDYXBhYmlsaXR5IVxuIiwKLQkJCQkJICBfX2Z1bmNfXykpOwotCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJcEFkLT5STG5rQ3RybE9mZnNldCA9IDA7Ci0JCXBBZC0+SG9zdExua0N0cmxPZmZzZXQgPSAwOwotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCSAoIiVzOiBjYW5ub3QgZmluZCBSYWxpbmsgUENJZSBEZXZpY2UncyBQQ0kgRXhwcmVzcyBDYXBhYmlsaXR5IVxuIiwKLQkJCSAgX19mdW5jX18pKTsKLQl9Ci0KLQlpZiAoYkZpbmRJbnRlbCA9PSBGQUxTRSkgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIkRvZXNuJ3QgZmluZCBJbnRlbCBQQ0kgaG9zdCBjb250cm9sbGVyLiBcbiIpKTsKLQkJLyogRG9lc24ndCBzd2l0Y2ggTDAsIEwxLCBTbyBzZXQgUENJZVBvd2VyU2F2ZUxldmVsIHRvIDB4ZmYgKi8KLQkJcEFkLT5QQ0llUG93ZXJTYXZlTGV2ZWwgPSAweGZmOwotCQlpZiAoKHBBZC0+Ukxua0N0cmxPZmZzZXQgIT0gMCkKLSNpZmRlZiBSVDMwOTAKLQkJICAgICYmICgocE9iai0+RGV2aWNlSUQgPT0gTklDMzA5MF9QQ0llX0RFVklDRV9JRCkKLQkJCXx8IChwT2JqLT5EZXZpY2VJRCA9PSBOSUMzMDkxX1BDSWVfREVWSUNFX0lEKQotCQkJfHwgKHBPYmotPkRldmljZUlEID09IE5JQzMwOTJfUENJZV9ERVZJQ0VfSUQpKQotI2VuZGlmIC8qIFJUMzA5MCAvLyAqLwotCQkgICAgKSB7Ci0JCQlwY2lfcmVhZF9jb25maWdfd29yZChwT2JqLT5wY2lfZGV2LCBwQWQtPlJMbmtDdHJsT2Zmc2V0LAotCQkJCQkgICAgICZyZWcxNik7Ci0JCQlDb25maWd1cmF0aW9uID0gbGUyY3B1MTYocmVnMTYpOwotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiUmVhZCAoUmFsaW5rIDMweHggUENJZSBMaW5rIENvbnRyb2wgUmVnaXN0ZXIpIG9mZnNldCAweCV4ID0gMHgleFxuIiwKLQkJCQkgIHBBZC0+Ukxua0N0cmxPZmZzZXQsIENvbmZpZ3VyYXRpb24pKTsKLQkJCXBBZC0+Ukxua0N0cmxDb25maWd1cmF0aW9uID0gKENvbmZpZ3VyYXRpb24gJiAweDEwMyk7Ci0JCQlDb25maWd1cmF0aW9uICY9IDB4ZmVmYzsKLQkJCUNvbmZpZ3VyYXRpb24gfD0gKDB4MCk7Ci0JCQlyZWcxNiA9IGNwdTJsZTE2KENvbmZpZ3VyYXRpb24pOwotCQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBPYmotPnBjaV9kZXYsCi0JCQkJCSAgICAgIHBBZC0+Ukxua0N0cmxPZmZzZXQsIHJlZzE2KTsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAoIldyaXRlIChSYWxpbmsgUENJZSBMaW5rIENvbnRyb2wgUmVnaXN0ZXIpICBvZmZzZXQgMHgleCA9IDB4JXhcbiIsCi0JCQkJICBwb3MgKyBQQ0lfRVhQX0xOS0NUTCwgQ29uZmlndXJhdGlvbikpOwotCQl9Ci0JfQotfQotCi12b2lkIFJUTVBGaW5kSG9zdFBDSURldihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0JdTE2IHJlZzE2OwotCXU4IHJlZzg7Ci0JdTMyIERldkZuOwotCXN0cnVjdCBwY2lfZGV2ICpwUGNpX2RldjsKLQlzdHJ1Y3Qgb3NfY29va2llICpwT2JqOwotCi0JcE9iaiA9IChzdHJ1Y3Qgb3NfY29va2llICopcEFkLT5PU19Db29raWU7Ci0KLQlpZiAoIU9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfUENJRV9ERVZJQ0UpKQotCQlyZXR1cm47Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlcy49PT0+XG4iLCBfX2Z1bmNfXykpOwotCi0JcE9iai0+cGFyZW50X3BjaV9kZXYgPSBOVUxMOwotCWlmIChwT2JqLT5wY2lfZGV2LT5idXMtPnBhcmVudCkgewotCQlmb3IgKERldkZuID0gMDsgRGV2Rm4gPCAyNTU7IERldkZuKyspIHsKLQkJCXBQY2lfZGV2ID0KLQkJCSAgICBwY2lfZ2V0X3Nsb3QocE9iai0+cGNpX2Rldi0+YnVzLT5wYXJlbnQsIERldkZuKTsKLQkJCWlmIChwUGNpX2RldikgewotCQkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBQY2lfZGV2LCBQQ0lfQ0xBU1NfREVWSUNFLAotCQkJCQkJICAgICAmcmVnMTYpOwotCQkJCXJlZzE2ID0gbGUyY3B1MTYocmVnMTYpOwotCQkJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBQY2lfZGV2LCBQQ0lfQ0JfQ0FSRF9CVVMsCi0JCQkJCQkgICAgICZyZWc4KTsKLQkJCQlpZiAoKHJlZzE2ID09IFBDSV9DTEFTU19CUklER0VfUENJKQotCQkJCSAgICAmJiAocmVnOCA9PSBwT2JqLT5wY2lfZGV2LT5idXMtPm51bWJlcikpIHsKLQkJCQkJcE9iai0+cGFyZW50X3BjaV9kZXYgPSBwUGNpX2RldjsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCi0JQXJndW1lbnRzOgotCQlMZXZlbCA9IFJFU1RPUkVfSEFMVCA6IFJlc3RvcmUgUENJIGhvc3QgYW5kIFJhbGluayBQQ0llIExpbmsgQ29udHJvbCBmaWVsZCB0byBpdHMgZGVmYXVsdCB2YWx1ZS4KLQkJTGV2ZWwgPSBPdGhlciBWYWx1ZSA6IFJlc3RvcmUgZnJvbSBkb3QxMSBwb3dlciBzYXZlIG9yIHJhZGlvIG9mZiBzdGF0dXMuIEFuZCBmb3JjZSBQQ0kgaG9zdCBMaW5rIENvbnRyb2wgZmllbGRzIHRvIDB4MQotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBSVE1QUENJZUxpbmtDdHJsVmFsdWVSZXN0b3JlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggTGV2ZWwpCi17Ci0JdTE2IFBDSWVQb3dlclNhdmVMZXZlbCwgcmVnMTY7Ci0JdTE2IENvbmZpZ3VyYXRpb247Ci0Jc3RydWN0IG9zX2Nvb2tpZSAqcE9iajsKLQotCXBPYmogPSAoc3RydWN0IG9zX2Nvb2tpZSAqKXBBZC0+T1NfQ29va2llOwotCi0JaWYgKCFPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1BDSUVfREVWSUNFKSkKLQkJcmV0dXJuOwotCi0jaWZkZWYgUlQyODYwCi0JaWYgKCEoKHBPYmotPkRldmljZUlEID09IE5JQzI4NjBfUENJZV9ERVZJQ0VfSUQpCi0JICAgICAgfHwgKHBPYmotPkRldmljZUlEID09IE5JQzI3OTBfUENJZV9ERVZJQ0VfSUQpKSkKLQkJcmV0dXJuOwotI2VuZGlmIC8qIFJUMjg2MCAvLyAqLwotCS8qIENoZWNrIFBTQ29udHJvbCBDb25maWd1cmF0aW9uICovCi0JaWYgKHBBZC0+U3RhQ2ZnLlBTQ29udHJvbC5maWVsZC5FbmFibGVOZXdQUyA9PSBGQUxTRSkKLQkJcmV0dXJuOwotCi0JLyozMDkwIHdpbGwgbm90IGV4ZWN1dGUgdGhlIGZvbGxvd2luZyBjb2Rlcy4gKi8KLQkvKiBDaGVjayBpbnRlcmZhY2UgOiBJZiBub3QgUENJZSBpbnRlcmZhY2UsIHJldHVybi4gKi8KLQotI2lmZGVmIFJUMzA5MAotCWlmICgocE9iai0+RGV2aWNlSUQgPT0gTklDMzA5MF9QQ0llX0RFVklDRV9JRCkKLQkgICAgfHwgKHBPYmotPkRldmljZUlEID09IE5JQzMwOTFfUENJZV9ERVZJQ0VfSUQpCi0JICAgIHx8IChwT2JqLT5EZXZpY2VJRCA9PSBOSUMzMDkyX1BDSWVfREVWSUNFX0lEKSkKLQkJcmV0dXJuOwotI2VuZGlmIC8qIFJUMzA5MCAvLyAqLwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXMuPT09PlxuIiwgX19mdW5jX18pKTsKLQlQQ0llUG93ZXJTYXZlTGV2ZWwgPSBwQWQtPlBDSWVQb3dlclNhdmVMZXZlbDsKLQlpZiAoKFBDSWVQb3dlclNhdmVMZXZlbCAmIDB4ZmYpID09IDB4ZmYpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgicmV0dXJuICBcbiIpKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChwT2JqLT5wYXJlbnRfcGNpX2RldiAmJiAocEFkLT5Ib3N0TG5rQ3RybE9mZnNldCAhPSAwKSkgewotCQlQQ0lfUkVHX1JFQURfV09SRChwT2JqLT5wYXJlbnRfcGNpX2RldiwgcEFkLT5Ib3N0TG5rQ3RybE9mZnNldCwKLQkJCQkgIENvbmZpZ3VyYXRpb24pOwotCQlpZiAoKENvbmZpZ3VyYXRpb24gIT0gMCkgJiYgKENvbmZpZ3VyYXRpb24gIT0gMHhGRkZGKSkgewotCQkJQ29uZmlndXJhdGlvbiAmPSAweGZlZmM7Ci0JCQkvKiBJZiBjYWxsIGZyb20gaW50ZXJmYWNlIGRvd24sIHJlc3RvcmUgdG8gb3JpZ2luYWwgc2V0dGluZy4gKi8KLQkJCWlmIChMZXZlbCA9PSBSRVNUT1JFX0NMT1NFKQotCQkJCUNvbmZpZ3VyYXRpb24gfD0gcEFkLT5Ib3N0TG5rQ3RybENvbmZpZ3VyYXRpb247Ci0JCQllbHNlCi0JCQkJQ29uZmlndXJhdGlvbiB8PSAweDA7Ci0JCQlQQ0lfUkVHX1dJUlRFX1dPUkQocE9iai0+cGFyZW50X3BjaV9kZXYsCi0JCQkJCSAgIHBBZC0+SG9zdExua0N0cmxPZmZzZXQsCi0JCQkJCSAgIENvbmZpZ3VyYXRpb24pOwotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiUmVzdG9yZSBQQ0kgaG9zdCA6IG9mZnNldCAweCV4ID0gMHgleFxuIiwKLQkJCQkgIHBBZC0+SG9zdExua0N0cmxPZmZzZXQsIENvbmZpZ3VyYXRpb24pKTsKLQkJfSBlbHNlCi0JCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCQkgKCJSZXN0b3JlIFBDSSBob3N0IDogUENJX1JFR19SRUFEX1dPUkQgZmFpbGVkIChDb25maWd1cmF0aW9uID0gMHgleClcbiIsCi0JCQkJICBDb25maWd1cmF0aW9uKSk7Ci0JfQotCi0JaWYgKHBPYmotPnBjaV9kZXYgJiYgKHBBZC0+Ukxua0N0cmxPZmZzZXQgIT0gMCkpIHsKLQkJUENJX1JFR19SRUFEX1dPUkQocE9iai0+cGNpX2RldiwgcEFkLT5STG5rQ3RybE9mZnNldCwKLQkJCQkgIENvbmZpZ3VyYXRpb24pOwotCQlpZiAoKENvbmZpZ3VyYXRpb24gIT0gMCkgJiYgKENvbmZpZ3VyYXRpb24gIT0gMHhGRkZGKSkgewotCQkJQ29uZmlndXJhdGlvbiAmPSAweGZlZmM7Ci0JCQkvKiBJZiBjYWxsIGZyb20gaW50ZXJmYWNlIGRvd24sIHJlc3RvcmUgdG8gb3JpZ2luYWwgc2V0dGluZy4gKi8KLQkJCWlmIChMZXZlbCA9PSBSRVNUT1JFX0NMT1NFKQotCQkJCUNvbmZpZ3VyYXRpb24gfD0gcEFkLT5STG5rQ3RybENvbmZpZ3VyYXRpb247Ci0JCQllbHNlCi0JCQkJQ29uZmlndXJhdGlvbiB8PSAweDA7Ci0JCQlQQ0lfUkVHX1dJUlRFX1dPUkQocE9iai0+cGNpX2RldiwgcEFkLT5STG5rQ3RybE9mZnNldCwKLQkJCQkJICAgQ29uZmlndXJhdGlvbik7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCJSZXN0b3JlIFJhbGluayA6IG9mZnNldCAweCV4ID0gMHgleFxuIiwKLQkJCQkgIHBBZC0+Ukxua0N0cmxPZmZzZXQsIENvbmZpZ3VyYXRpb24pKTsKLQkJfSBlbHNlCi0JCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCQkgKCJSZXN0b3JlIFJhbGluayA6IFBDSV9SRUdfUkVBRF9XT1JEIGZhaWxlZCAoQ29uZmlndXJhdGlvbiA9IDB4JXgpXG4iLAotCQkJCSAgQ29uZmlndXJhdGlvbikpOwotCX0KLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzIDw9PT1cbiIsIF9fZnVuY19fKSk7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCi0JQXJndW1lbnRzOgotCQlNYXggOiBsaW1pdCBIb3N0IFBDSSBhbmQgUmFsaW5rIFBDSWUgZGV2aWNlJ3MgTElOSyBDT05UUk9MIGZpZWxkJ3MgdmFsdWUuCi0JCUJlY2F1c2Ugbm93IGZyZXF1ZW50bHkgc2V0IG91ciBkZXZpY2UgdG8gbW9kZSAxIG9yIG1vZGUgMyB3aWxsIGNhdXNlIHByb2JsZW0uCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFJUTVBQQ0llTGlua0N0cmxTZXR0aW5nKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTE2IE1heCkKLXsKLQl1MTYgUENJZVBvd2VyU2F2ZUxldmVsLCByZWcxNjsKLQl1MTYgQ29uZmlndXJhdGlvbjsKLQlzdHJ1Y3Qgb3NfY29va2llICpwT2JqOwotCi0JcE9iaiA9IChzdHJ1Y3Qgb3NfY29va2llICopcEFkLT5PU19Db29raWU7Ci0KLQlpZiAoIU9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfUENJRV9ERVZJQ0UpKQotCQlyZXR1cm47Ci0KLSNpZmRlZiBSVDI4NjAKLQlpZiAoISgocE9iai0+RGV2aWNlSUQgPT0gTklDMjg2MF9QQ0llX0RFVklDRV9JRCkKLQkgICAgICB8fCAocE9iai0+RGV2aWNlSUQgPT0gTklDMjc5MF9QQ0llX0RFVklDRV9JRCkpKQotCQlyZXR1cm47Ci0jZW5kaWYgLyogUlQyODYwIC8vICovCi0JLyogQ2hlY2sgUFNDb250cm9sIENvbmZpZ3VyYXRpb24gKi8KLQlpZiAocEFkLT5TdGFDZmcuUFNDb250cm9sLmZpZWxkLkVuYWJsZU5ld1BTID09IEZBTFNFKQotCQlyZXR1cm47Ci0KLQkvKiBDaGVjayBpbnRlcmZhY2UgOiBJZiBub3QgUENJZSBpbnRlcmZhY2UsIHJldHVybi4gKi8KLQkvKkJsb2NrIDMwOTAgdG8gZW50ZXIgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiAqLwotCi0jaWZkZWYgUlQzMDkwCi0JaWYgKChwT2JqLT5EZXZpY2VJRCA9PSBOSUMzMDkwX1BDSWVfREVWSUNFX0lEKQotCSAgICB8fCAocE9iai0+RGV2aWNlSUQgPT0gTklDMzA5MV9QQ0llX0RFVklDRV9JRCkKLQkgICAgfHwgKHBPYmotPkRldmljZUlEID09IE5JQzMwOTJfUENJZV9ERVZJQ0VfSUQpKQotCQlyZXR1cm47Ci0jZW5kaWYgLyogUlQzMDkwIC8vICovCi0JaWYgKCFSVE1QX1RFU1RfUFNGTEFHKHBBZCwgZlJUTVBfUFNfQ0FOX0dPX1NMRUVQKSkgewotCQlEQkdQUklOVChSVF9ERUJVR19JTkZPLAotCQkJICgiUlRNUFBDSWVQb3dlckxpbmtDdHJsIHJldHVybiBvbiBmUlRNUF9QU19DQU5fR09fU0xFRVAgZmxhZ1xuIikpOwotCQlyZXR1cm47Ci0JfQotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXM9PT0+XG4iLCBfX2Z1bmNfXykpOwotCVBDSWVQb3dlclNhdmVMZXZlbCA9IHBBZC0+UENJZVBvd2VyU2F2ZUxldmVsOwotCWlmICgoUENJZVBvd2VyU2F2ZUxldmVsICYgMHhmZikgPT0gMHhmZikgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJyZXR1cm4gIFxuIikpOwotCQlyZXR1cm47Ci0JfQotCVBDSWVQb3dlclNhdmVMZXZlbCA9IFBDSWVQb3dlclNhdmVMZXZlbCA+PiA2OwotCi0JLyogU2tpcCBub24tZXhpc3QgZGVpY2UgcmlnaHQgYXdheSAqLwotCWlmIChwT2JqLT5wYXJlbnRfcGNpX2RldiAmJiAocEFkLT5Ib3N0TG5rQ3RybE9mZnNldCAhPSAwKSkgewotCQlQQ0lfUkVHX1JFQURfV09SRChwT2JqLT5wYXJlbnRfcGNpX2RldiwgcEFkLT5Ib3N0TG5rQ3RybE9mZnNldCwKLQkJCQkgIENvbmZpZ3VyYXRpb24pOwotCQlzd2l0Y2ggKFBDSWVQb3dlclNhdmVMZXZlbCkgewotCQljYXNlIDA6Ci0JCQkvKiBTZXQgYjAgYW5kIGIxIG9mIExpbmtDb250cm9sIChib3RoIDI4OTIgYW5kIFBDSWUgYnJpZGdlKSB0byAwMCAqLwotCQkJQ29uZmlndXJhdGlvbiAmPSAweGZlZmM7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJLyogU2V0IGIwIGFuZCBiMSBvZiBMaW5rQ29udHJvbCAoYm90aCAyODkyIGFuZCBQQ0llIGJyaWRnZSkgdG8gMDEgKi8KLQkJCUNvbmZpZ3VyYXRpb24gJj0gMHhmZWZjOwotCQkJQ29uZmlndXJhdGlvbiB8PSAweDE7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJLyogIFNldCBiMCBhbmQgYjEgb2YgTGlua0NvbnRyb2wgKGJvdGggMjg5MiBhbmQgUENJZSBicmlkZ2UpIHRvIDExICovCi0JCQlDb25maWd1cmF0aW9uICY9IDB4ZmVmYzsKLQkJCUNvbmZpZ3VyYXRpb24gfD0gMHgzOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzoKLQkJCS8qIFNldCBiMCBhbmQgYjEgb2YgTGlua0NvbnRyb2wgKGJvdGggMjg5MiBhbmQgUENJZSBicmlkZ2UpIHRvIDExIGFuZCBiaXQgOCBvZiBMaW5rQ29udHJvbCBvZiAyODkyIHRvIDEgKi8KLQkJCUNvbmZpZ3VyYXRpb24gJj0gMHhmZWZjOwotCQkJQ29uZmlndXJhdGlvbiB8PSAweDEwMzsKLQkJCWJyZWFrOwotCQl9Ci0JCVBDSV9SRUdfV0lSVEVfV09SRChwT2JqLT5wYXJlbnRfcGNpX2RldiwgcEFkLT5Ib3N0TG5rQ3RybE9mZnNldCwKLQkJCQkgICBDb25maWd1cmF0aW9uKTsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJXcml0ZSBQQ0kgaG9zdCBvZmZzZXQgMHgleCA9IDB4JXhcbiIsCi0JCQkgIHBBZC0+SG9zdExua0N0cmxPZmZzZXQsIENvbmZpZ3VyYXRpb24pKTsKLQl9Ci0KLQlpZiAocE9iai0+cGNpX2RldiAmJiAocEFkLT5STG5rQ3RybE9mZnNldCAhPSAwKSkgewotCQkvKiBmaXJzdCAyODkyIGNoaXAgbm90IGFsbG93IHRvIGZyZXF1ZW50bHkgc2V0IG1vZGUgMy4gd2lsbCBjYXVzZSBoYW5nIHByb2JsZW0uICovCi0JCWlmIChQQ0llUG93ZXJTYXZlTGV2ZWwgPiBNYXgpCi0JCQlQQ0llUG93ZXJTYXZlTGV2ZWwgPSBNYXg7Ci0KLQkJUENJX1JFR19SRUFEX1dPUkQocE9iai0+cGNpX2RldiwgcEFkLT5STG5rQ3RybE9mZnNldCwKLQkJCQkgIENvbmZpZ3VyYXRpb24pOwotCQlzd2l0Y2ggKFBDSWVQb3dlclNhdmVMZXZlbCkgewotCQljYXNlIDA6Ci0JCQkvKiBObyBQQ0kgcG93ZXIgc2FmZSAqLwotCQkJLyogU2V0IGIwIGFuZCBiMSBvZiBMaW5rQ29udHJvbCAoYm90aCAyODkyIGFuZCBQQ0llIGJyaWRnZSkgdG8gMDAgLiAqLwotCQkJQ29uZmlndXJhdGlvbiAmPSAweGZlZmM7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJLyogIEwwICovCi0JCQkvKiBTZXQgYjAgYW5kIGIxIG9mIExpbmtDb250cm9sIChib3RoIDI4OTIgYW5kIFBDSWUgYnJpZGdlKSB0byAwMSAuICovCi0JCQlDb25maWd1cmF0aW9uICY9IDB4ZmVmYzsKLQkJCUNvbmZpZ3VyYXRpb24gfD0gMHgxOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCS8qIEwwIGFuZCBMMSAqLwotCQkJLyogIFNldCBiMCBhbmQgYjEgb2YgTGlua0NvbnRyb2wgKGJvdGggMjg5MiBhbmQgUENJZSBicmlkZ2UpIHRvIDExICovCi0JCQlDb25maWd1cmF0aW9uICY9IDB4ZmVmYzsKLQkJCUNvbmZpZ3VyYXRpb24gfD0gMHgzOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzoKLQkJCS8qIEwwICwgTDEgYW5kIGNsb2NrIG1hbmFnZW1lbnQuICovCi0JCQkvKiBTZXQgYjAgYW5kIGIxIG9mIExpbmtDb250cm9sIChib3RoIDI4OTIgYW5kIFBDSWUgYnJpZGdlKSB0byAxMSBhbmQgYml0IDggb2YgTGlua0NvbnRyb2wgb2YgMjg5MiB0byAxICovCi0JCQlDb25maWd1cmF0aW9uICY9IDB4ZmVmYzsKLQkJCUNvbmZpZ3VyYXRpb24gfD0gMHgxMDM7Ci0JCQlwQWQtPmJQQ0ljbGtPZmYgPSBUUlVFOwotCQkJYnJlYWs7Ci0JCX0KLQkJUENJX1JFR19XSVJURV9XT1JEKHBPYmotPnBjaV9kZXYsIHBBZC0+Ukxua0N0cmxPZmZzZXQsCi0JCQkJICAgQ29uZmlndXJhdGlvbik7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiV3JpdGUgUmFsaW5rIGRldmljZSA6IG9mZnNldCAweCV4ID0gMHgleFxuIiwKLQkJCSAgcEFkLT5STG5rQ3RybE9mZnNldCwgQ29uZmlndXJhdGlvbikpOwotCX0KLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJUTVBQQ0llUG93ZXJMaW5rQ3RybCA8PT09PT09PT09PT09PT1cbiIpKTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JCTEuIFdyaXRlIGEgUENJIHJlZ2lzdGVyIGZvciBydDMweHggcG93ZXIgc29sdXRpb24gMwotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBSVE1QcnQzeFNldFBDSWVQb3dlckxpbmtDdHJsKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQotCXVuc2lnbmVkIGxvbmcgSG9zdENvbmZpZ3VyYXRpb24gPSAwOwotCXVuc2lnbmVkIGxvbmcgQ29uZmlndXJhdGlvbjsKLQlzdHJ1Y3Qgb3NfY29va2llICpwT2JqOwotCWludCBwb3M7Ci0JdTE2IHJlZzE2OwotCi0JcE9iaiA9IChzdHJ1Y3Qgb3NfY29va2llICopcEFkLT5PU19Db29raWU7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19JTkZPLAotCQkgKCJSVE1QcnQzeFNldFBDSWVQb3dlckxpbmtDdHJsLj09PT4gJWx4XG4iLAotCQkgIHBBZC0+U3RhQ2ZnLlBTQ29udHJvbC53b3JkKSk7Ci0KLQkvKiBDaGVjayBQU0NvbnRyb2wgQ29uZmlndXJhdGlvbiAqLwotCWlmIChwQWQtPlN0YUNmZy5QU0NvbnRyb2wuZmllbGQuRW5hYmxlTmV3UFMgPT0gRkFMU0UpCi0JCXJldHVybjsKLQlSVE1QRmluZEhvc3RQQ0lEZXYocEFkKTsKLQlpZiAocE9iai0+cGFyZW50X3BjaV9kZXYpIHsKLQkJLyogRmluZCBQQ0ktdG8tUENJIEJyaWRnZSBFeHByZXNzIENhcGFiaWxpdHkgT2Zmc2V0ICovCi0JCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkocE9iai0+cGFyZW50X3BjaV9kZXYsIFBDSV9DQVBfSURfRVhQKTsKLQotCQlpZiAocG9zICE9IDApCi0JCQlwQWQtPkhvc3RMbmtDdHJsT2Zmc2V0ID0gcG9zICsgUENJX0VYUF9MTktDVEw7Ci0KLQkJLyogSWYgY29uZmlndXJlZCB0byB0dXJuIG9uIEwxLiAqLwotCQlIb3N0Q29uZmlndXJhdGlvbiA9IDA7Ci0JCWlmIChwQWQtPlN0YUNmZy5QU0NvbnRyb2wuZmllbGQucnQzMHh4Rm9yY2VBU1BNVGVzdCA9PSAxKSB7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJFbnRlcixQU00gOiBGb3JjZSBBU1BNXG4iKSk7Ci0KLQkJCS8qIFNraXAgbm9uLWV4aXN0IGRldmljZSByaWdodCBhd2F5ICovCi0JCQlpZiAoKHBBZC0+SG9zdExua0N0cmxPZmZzZXQgIT0gMCkpIHsKLQkJCQlQQ0lfUkVHX1JFQURfV09SRChwT2JqLT5wYXJlbnRfcGNpX2RldiwKLQkJCQkJCSAgcEFkLT5Ib3N0TG5rQ3RybE9mZnNldCwKLQkJCQkJCSAgSG9zdENvbmZpZ3VyYXRpb24pOwotCQkJCS8qIFByZXBhcmUgQ29uZmlndXJhdGlvbiB0byB3cml0ZSB0byBIb3N0ICovCi0JCQkJSG9zdENvbmZpZ3VyYXRpb24gfD0gMHgzOwotCQkJCVBDSV9SRUdfV0lSVEVfV09SRChwT2JqLT5wYXJlbnRfcGNpX2RldiwKLQkJCQkJCSAgIHBBZC0+SG9zdExua0N0cmxPZmZzZXQsCi0JCQkJCQkgICBIb3N0Q29uZmlndXJhdGlvbik7Ci0JCQkJcEFkLT5SdDN4eEhvc3RMaW5rQ3RybCA9IEhvc3RDb25maWd1cmF0aW9uOwotCQkJCS8qIEJlY2F1c2UgaW4gcnQzMHh4Rm9yY2VBU1BNVGVzdCBNb2RlLCBGb3JjZSB0dXJuIG9uIEwwcywgTDEuICovCi0JCQkJLyogRml4IEhvc3RDb25maWd1cmF0aW9uIGJpdDA6MSA9IDB4MyBmb3IgbGF0ZXIgdXNlLiAqLwotCQkJCUhvc3RDb25maWd1cmF0aW9uID0gMHgzOwotCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkgKCJQU00gOiBGb3JjZSBBU1BNIDogIgotCQkJCQkgICJIb3N0IGRldmljZSBMMS9MMHMgVmFsdWUgPSAgMHglbHhcbiIsCi0JCQkJCSAgSG9zdENvbmZpZ3VyYXRpb24pKTsKLQkJCX0KLQkJfSBlbHNlIGlmIChwQWQtPlN0YUNmZy5QU0NvbnRyb2wuZmllbGQucnQzMHh4Rm9sbG93SG9zdEFTUE0gPT0KLQkJCSAgIDEpIHsKLQotCQkJLyogU2tpcCBub24tZXhpc3QgZGVpY2UgcmlnaHQgYXdheSAqLwotCQkJaWYgKChwQWQtPkhvc3RMbmtDdHJsT2Zmc2V0ICE9IDApKSB7Ci0JCQkJUENJX1JFR19SRUFEX1dPUkQocE9iai0+cGFyZW50X3BjaV9kZXYsCi0JCQkJCQkgIHBBZC0+SG9zdExua0N0cmxPZmZzZXQsCi0JCQkJCQkgIEhvc3RDb25maWd1cmF0aW9uKTsKLQkJCQlwQWQtPlJ0M3h4SG9zdExpbmtDdHJsID0gSG9zdENvbmZpZ3VyYXRpb247Ci0JCQkJSG9zdENvbmZpZ3VyYXRpb24gJj0gMHgzOwotCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkgKCJQU00gOiBGb2xsb3cgSG9zdCBBU1BNIDogIgotCQkJCQkgICJIb3N0IGRldmljZSBMMS9MMHMgVmFsdWUgPSAgMHglbHhcbiIsCi0JCQkJCSAgSG9zdENvbmZpZ3VyYXRpb24pKTsKLQkJCX0KLQkJfQotCX0KLQkvKiBQcmVwYXJlIHRvIHdyaXRlIFJhbGluayBzZXR0aW5nLiAqLwotCS8qIEZpbmQgUmFsaW5rIFBDSWUgRGV2aWNlJ3MgRXhwcmVzcyBDYXBhYmlsaXR5IE9mZnNldCAqLwotCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkocE9iai0+cGNpX2RldiwgUENJX0NBUF9JRF9FWFApOwotCi0JaWYgKHBvcyAhPSAwKSB7Ci0JCS8qIFJhbGluayBQQ0llIERldmljZSdzIExpbmsgQ29udHJvbCBSZWdpc3RlciBPZmZzZXQgKi8KLQkJcEFkLT5STG5rQ3RybE9mZnNldCA9IHBvcyArIFBDSV9FWFBfTE5LQ1RMOwotCQlwY2lfcmVhZF9jb25maWdfd29yZChwT2JqLT5wY2lfZGV2LCBwQWQtPlJMbmtDdHJsT2Zmc2V0LAotCQkJCSAgICAgJnJlZzE2KTsKLQkJQ29uZmlndXJhdGlvbiA9IGxlMmNwdTE2KHJlZzE2KTsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJSZWFkIChSYWxpbmsgUENJZSBMaW5rIENvbnRyb2wgUmVnaXN0ZXIpICIKLQkJCSAgIm9mZnNldCAweCV4ID0gMHglbHhcbiIsCi0JCQkgIHBBZC0+Ukxua0N0cmxPZmZzZXQsIENvbmZpZ3VyYXRpb24pKTsKLQkJQ29uZmlndXJhdGlvbiB8PSAweDEwMDsKLQkJaWYgKChwQWQtPlN0YUNmZy5QU0NvbnRyb2wuZmllbGQucnQzMHh4Rm9sbG93SG9zdEFTUE0gPT0gMSkKLQkJICAgIHx8IChwQWQtPlN0YUNmZy5QU0NvbnRyb2wuZmllbGQucnQzMHh4Rm9yY2VBU1BNVGVzdCA9PSAxKSkgewotCQkJc3dpdGNoIChIb3N0Q29uZmlndXJhdGlvbikgewotCQkJY2FzZSAwOgotCQkJCUNvbmZpZ3VyYXRpb24gJj0gMHhmZmZmZmZjOwotCQkJCWJyZWFrOwotCQkJY2FzZSAxOgotCQkJCUNvbmZpZ3VyYXRpb24gJj0gMHhmZmZmZmZjOwotCQkJCUNvbmZpZ3VyYXRpb24gfD0gMHgxOwotCQkJCWJyZWFrOwotCQkJY2FzZSAyOgotCQkJCUNvbmZpZ3VyYXRpb24gJj0gMHhmZmZmZmZjOwotCQkJCUNvbmZpZ3VyYXRpb24gfD0gMHgyOwotCQkJCWJyZWFrOwotCQkJY2FzZSAzOgotCQkJCUNvbmZpZ3VyYXRpb24gfD0gMHgzOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXJlZzE2ID0gY3B1MmxlMTYoQ29uZmlndXJhdGlvbik7Ci0JCXBjaV93cml0ZV9jb25maWdfd29yZChwT2JqLT5wY2lfZGV2LCBwQWQtPlJMbmtDdHJsT2Zmc2V0LAotCQkJCSAgICAgIHJlZzE2KTsKLQkJcEFkLT5SdDN4eFJhbGlua0xpbmtDdHJsID0gQ29uZmlndXJhdGlvbjsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJQU00gOldyaXRlIFJhbGluayBkZXZpY2UgTDEvTDBzIFZhbHVlID0gIDB4JWx4XG4iLAotCQkJICBDb25maWd1cmF0aW9uKSk7Ci0JfQotCURCR1BSSU5UKFJUX0RFQlVHX0lORk8sCi0JCSAoIlBTTSA6UlRNUHJ0M3hTZXRQQ0llUG93ZXJMaW5rQ3RybCA8PT09PT09PT09PT09PT1cbiIpKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfY29uZmlnLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2NvbmZpZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWFkZWY4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfY29uZmlnLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFJhbGluayBUZWNoIEluYy4KLSAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKLSAqIEhzaW5jaHUgQ291bnR5IDMwMiwKLSAqIFRhaXdhbiwgUi5PLkMuCi0gKgotICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotCU1vZHVsZSBOYW1lOgotCXJ0X2NvbmZpZy5oCi0KLQlBYnN0cmFjdDoKLQlDZW50cmFsIGhlYWRlciBmaWxlIHRvIG1haW50YWluIGFsbCBpbmNsdWRlIGZpbGVzIGZvciBhbGwgTkRJUwotCW1pbmlwb3J0IGRyaXZlciByb3V0aW5lcy4KLQotCVJldmlzaW9uIEhpc3Rvcnk6Ci0JV2hvICAgICAgICAgV2hlbiAgICAgICAgICBXaGF0Ci0JLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JUGF1bCBMaW4gICAgMDgtMDEtMjAwMiAgICBjcmVhdGVkCi0KLSovCi0jaWZuZGVmCV9fUlRfQ09ORklHX0hfXwotI2RlZmluZQlfX1JUX0NPTkZJR19IX18KLQotI2luY2x1ZGUgICAgInJ0bXBfdHlwZS5oIgotI2luY2x1ZGUgInJ0bXBfb3MuaCIKLQotI2luY2x1ZGUgInJ0bXBfZGVmLmgiCi0jaW5jbHVkZSAicnRtcF9jaGlwLmgiCi0jaW5jbHVkZSAicnRtcF90aW1lci5oIgotCi0jaW5jbHVkZSAgICAib2lkLmgiCi0jaW5jbHVkZSAgICAibWxtZS5oIgotI2luY2x1ZGUgICAgIndwYS5oIgotI2luY2x1ZGUgImNyeXB0X21kNS5oIgotI2luY2x1ZGUgImNyeXB0X3NoYTIuaCIKLSNpbmNsdWRlICJjcnlwdF9obWFjLmgiCi0jaW5jbHVkZSAgICAicnRtcC5oIgotI2luY2x1ZGUJImFwLmgiCi0jaW5jbHVkZQkiZGZzLmgiCi0jaW5jbHVkZQkiY2hsaXN0LmgiCi0jaW5jbHVkZQkic3BlY3RydW0uaCIKLQotI2luY2x1ZGUgImVlcHJvbS5oIgotI2lmIGRlZmluZWQoUlRNUF9QQ0lfU1VQUE9SVCkgfHwgZGVmaW5lZChSVE1QX1VTQl9TVVBQT1JUKQotI2luY2x1ZGUgInJ0bXBfbWN1LmgiCi0jZW5kaWYKLQotI2lmZGVmIElHTVBfU05PT1BfU1VQUE9SVAotI2luY2x1ZGUgImlnbXBfc25vb3AuaCIKLSNlbmRpZiAvKiBJR01QX1NOT09QX1NVUFBPUlQgLy8gKi8KLQotI2VuZGlmIC8qIF9fUlRfQ09ORklHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9saW51eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9saW51eC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTgzMzQ3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbGludXguYworKysgL2Rldi9udWxsCkBAIC0xLDEzNjcgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSAicnRfY29uZmlnLmgiCi0KLXVuc2lnbmVkIGxvbmcgUlREZWJ1Z0xldmVsID0gUlRfREVCVUdfRVJST1I7Ci0KLS8qIGZvciB3aXJlbGVzcyBzeXN0ZW0gZXZlbnQgbWVzc2FnZSAqLwotY2hhciBjb25zdCAqcFdpcmVsZXNzU3lzRXZlbnRUZXh0W0lXX1NZU19FVkVOVF9UWVBFX05VTV0gPSB7Ci0JLyogc3lzdGVtIHN0YXR1cyBldmVudCAqLwotCSJoYWQgYXNzb2NpYXRlZCBzdWNjZXNzZnVsbHkiLAkvKiBJV19BU1NPQ19FVkVOVF9GTEFHICovCi0JImhhZCBkaXNhc3NvY2lhdGVkIiwJLyogSVdfRElTQVNTT0NfRVZFTlRfRkxBRyAqLwotCSJoYWQgZGVhdXRoZW50aWNhdGVkIiwJLyogSVdfREVBVVRIX0VWRU5UX0ZMQUcgKi8KLQkiaGFkIGJlZW4gYWdlZC1vdXQgYW5kIGRpc2Fzc29jaWF0ZWQiLAkvKiBJV19BR0VPVVRfRVZFTlRfRkxBRyAqLwotCSJvY2N1cnJlZCBDb3VudGVyTWVhc3VyZXMgYXR0YWNrIiwJLyogSVdfQ09VTlRFUl9NRUFTVVJFU19FVkVOVF9GTEFHICovCi0JIm9jY3VycmVkIHJlcGxheSBjb3VudGVyIGRpZmZlcmVudCBpbiBLZXkgSGFuZHNoYWtpbmciLAkvKiBJV19SRVBMQVlfQ09VTlRFUl9ESUZGX0VWRU5UX0ZMQUcgKi8KLQkib2NjdXJyZWQgUlNOSUUgZGlmZmVyZW50IGluIEtleSBIYW5kc2hha2luZyIsCS8qIElXX1JTTklFX0RJRkZfRVZFTlRfRkxBRyAqLwotCSJvY2N1cnJlZCBNSUMgZGlmZmVyZW50IGluIEtleSBIYW5kc2hha2luZyIsCS8qIElXX01JQ19ESUZGX0VWRU5UX0ZMQUcgKi8KLQkib2NjdXJyZWQgSUNWIGVycm9yIGluIFJYIiwJLyogSVdfSUNWX0VSUk9SX0VWRU5UX0ZMQUcgKi8KLQkib2NjdXJyZWQgTUlDIGVycm9yIGluIFJYIiwJLyogSVdfTUlDX0VSUk9SX0VWRU5UX0ZMQUcgKi8KLQkiR3JvdXAgS2V5IEhhbmRzaGFraW5nIHRpbWVvdXQiLAkvKiBJV19HUk9VUF9IU19USU1FT1VUX0VWRU5UX0ZMQUcgKi8KLQkiUGFpcndpc2UgS2V5IEhhbmRzaGFraW5nIHRpbWVvdXQiLAkvKiBJV19QQUlSV0lTRV9IU19USU1FT1VUX0VWRU5UX0ZMQUcgKi8KLQkiUlNOIElFIHNhbml0eSBjaGVjayBmYWlsdXJlIiwJLyogSVdfUlNOSUVfU0FOSVRZX0ZBSUxfRVZFTlRfRkxBRyAqLwotCSJzZXQga2V5IGRvbmUgaW4gV1BBL1dQQVBTSyIsCS8qIElXX1NFVF9LRVlfRE9ORV9XUEExX0VWRU5UX0ZMQUcgKi8KLQkic2V0IGtleSBkb25lIGluIFdQQTIvV1BBMlBTSyIsCS8qIElXX1NFVF9LRVlfRE9ORV9XUEEyX0VWRU5UX0ZMQUcgKi8KLQkiY29ubmVjdHMgd2l0aCBvdXIgd2lyZWxlc3MgY2xpZW50IiwJLyogSVdfU1RBX0xJTktVUF9FVkVOVF9GTEFHICovCi0JImRpc2Nvbm5lY3RzIHdpdGggb3VyIHdpcmVsZXNzIGNsaWVudCIsCS8qIElXX1NUQV9MSU5LRE9XTl9FVkVOVF9GTEFHICovCi0JInNjYW4gY29tcGxldGVkIgkvKiBJV19TQ0FOX0NPTVBMRVRFRF9FVkVOVF9GTEFHICovCi0JICAgICJzY2FuIHRlcm1pbmF0ZSEgQnVzeSEgRW5xdWV1ZSBmYWlsISIJLyogSVdfU0NBTl9FTlFVRVVFX0ZBSUxfRVZFTlRfRkxBRyAqLwotfTsKLQotLyogZm9yIHdpcmVsZXNzIElEU19zcG9vZl9hdHRhY2sgZXZlbnQgbWVzc2FnZSAqLwotY2hhciBjb25zdCAqcFdpcmVsZXNzU3Bvb2ZFdmVudFRleHRbSVdfU1BPT0ZfRVZFTlRfVFlQRV9OVU1dID0gewotCSJkZXRlY3RlZCBjb25mbGljdCBTU0lEIiwJLyogSVdfQ09ORkxJQ1RfU1NJRF9FVkVOVF9GTEFHICovCi0JImRldGVjdGVkIHNwb29mZWQgYXNzb2NpYXRpb24gcmVzcG9uc2UiLAkvKiBJV19TUE9PRl9BU1NPQ19SRVNQX0VWRU5UX0ZMQUcgKi8KLQkiZGV0ZWN0ZWQgc3Bvb2ZlZCByZWFzc29jaWF0aW9uIHJlc3BvbnNlcyIsCS8qIElXX1NQT09GX1JFQVNTT0NfUkVTUF9FVkVOVF9GTEFHICovCi0JImRldGVjdGVkIHNwb29mZWQgcHJvYmUgcmVzcG9uc2UiLAkvKiBJV19TUE9PRl9QUk9CRV9SRVNQX0VWRU5UX0ZMQUcgKi8KLQkiZGV0ZWN0ZWQgc3Bvb2ZlZCBiZWFjb24iLAkvKiBJV19TUE9PRl9CRUFDT05fRVZFTlRfRkxBRyAqLwotCSJkZXRlY3RlZCBzcG9vZmVkIGRpc2Fzc29jaWF0aW9uIiwJLyogSVdfU1BPT0ZfRElTQVNTT0NfRVZFTlRfRkxBRyAqLwotCSJkZXRlY3RlZCBzcG9vZmVkIGF1dGhlbnRpY2F0aW9uIiwJLyogSVdfU1BPT0ZfQVVUSF9FVkVOVF9GTEFHICovCi0JImRldGVjdGVkIHNwb29mZWQgZGVhdXRoZW50aWNhdGlvbiIsCS8qIElXX1NQT09GX0RFQVVUSF9FVkVOVF9GTEFHICovCi0JImRldGVjdGVkIHNwb29mZWQgdW5rbm93biBtYW5hZ2VtZW50IGZyYW1lIiwJLyogSVdfU1BPT0ZfVU5LTk9XTl9NR01UX0VWRU5UX0ZMQUcgKi8KLQkiZGV0ZWN0ZWQgcmVwbGF5IGF0dGFjayIJLyogSVdfUkVQTEFZX0FUVEFDS19FVkVOVF9GTEFHICovCi19OwotCi0vKiBmb3Igd2lyZWxlc3MgSURTX2Zsb29kaW5nX2F0dGFjayBldmVudCBtZXNzYWdlICovCi1jaGFyIGNvbnN0ICpwV2lyZWxlc3NGbG9vZEV2ZW50VGV4dFtJV19GTE9PRF9FVkVOVF9UWVBFX05VTV0gPSB7Ci0JImRldGVjdGVkIGF1dGhlbnRpY2F0aW9uIGZsb29kaW5nIiwJLyogSVdfRkxPT0RfQVVUSF9FVkVOVF9GTEFHICovCi0JImRldGVjdGVkIGFzc29jaWF0aW9uIHJlcXVlc3QgZmxvb2RpbmciLAkvKiBJV19GTE9PRF9BU1NPQ19SRVFfRVZFTlRfRkxBRyAqLwotCSJkZXRlY3RlZCByZWFzc29jaWF0aW9uIHJlcXVlc3QgZmxvb2RpbmciLAkvKiBJV19GTE9PRF9SRUFTU09DX1JFUV9FVkVOVF9GTEFHICovCi0JImRldGVjdGVkIHByb2JlIHJlcXVlc3QgZmxvb2RpbmciLAkvKiBJV19GTE9PRF9QUk9CRV9SRVFfRVZFTlRfRkxBRyAqLwotCSJkZXRlY3RlZCBkaXNhc3NvY2lhdGlvbiBmbG9vZGluZyIsCS8qIElXX0ZMT09EX0RJU0FTU09DX0VWRU5UX0ZMQUcgKi8KLQkiZGV0ZWN0ZWQgZGVhdXRoZW50aWNhdGlvbiBmbG9vZGluZyIsCS8qIElXX0ZMT09EX0RFQVVUSF9FVkVOVF9GTEFHICovCi0JImRldGVjdGVkIDgwMi4xeCBlYXAtcmVxdWVzdCBmbG9vZGluZyIJLyogSVdfRkxPT0RfRUFQX1JFUV9FVkVOVF9GTEFHICovCi19OwotCi0vKiB0aW1lb3V0IC0tIG1zICovCi12b2lkIFJUTVBfU2V0UGVyaW9kaWNUaW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqcFRpbWVyLAotCQkJICAgSU4gdW5zaWduZWQgbG9uZyB0aW1lb3V0KQotewotCXRpbWVvdXQgPSAoKHRpbWVvdXQgKiBPU19IWikgLyAxMDAwKTsKLQlwVGltZXItPmV4cGlyZXMgPSBqaWZmaWVzICsgdGltZW91dDsKLQlhZGRfdGltZXIocFRpbWVyKTsKLX0KLQotLyogY29udmVydCBOZGlzTUluaXRpYWxpemVUaW1lciAtLT4gUlRNUF9PU19Jbml0X1RpbWVyICovCi12b2lkIFJUTVBfT1NfSW5pdF9UaW1lcihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQlzdHJ1Y3QgdGltZXJfbGlzdCAqcFRpbWVyLAotCQkJSU4gVElNRVJfRlVOQ1RJT04gZnVuY3Rpb24sIHZvaWQgKmRhdGEpCi17Ci0JaW5pdF90aW1lcihwVGltZXIpOwotCXBUaW1lci0+ZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRhdGE7Ci0JcFRpbWVyLT5mdW5jdGlvbiA9IGZ1bmN0aW9uOwotfQotCi12b2lkIFJUTVBfT1NfQWRkX1RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICpwVGltZXIsCi0JCSAgICAgICBJTiB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCi17Ci0JaWYgKHRpbWVyX3BlbmRpbmcocFRpbWVyKSkKLQkJcmV0dXJuOwotCi0JdGltZW91dCA9ICgodGltZW91dCAqIE9TX0haKSAvIDEwMDApOwotCXBUaW1lci0+ZXhwaXJlcyA9IGppZmZpZXMgKyB0aW1lb3V0OwotCWFkZF90aW1lcihwVGltZXIpOwotfQotCi12b2lkIFJUTVBfT1NfTW9kX1RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICpwVGltZXIsCi0JCSAgICAgICBJTiB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCi17Ci0JdGltZW91dCA9ICgodGltZW91dCAqIE9TX0haKSAvIDEwMDApOwotCW1vZF90aW1lcihwVGltZXIsIGppZmZpZXMgKyB0aW1lb3V0KTsKLX0KLQotdm9pZCBSVE1QX09TX0RlbF9UaW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqcFRpbWVyLCBPVVQgQk9PTEVBTiAqcENhbmNlbGxlZCkKLXsKLQlpZiAodGltZXJfcGVuZGluZyhwVGltZXIpKSB7Ci0JCSpwQ2FuY2VsbGVkID0gZGVsX3RpbWVyX3N5bmMocFRpbWVyKTsKLQl9IGVsc2UgewotCQkqcENhbmNlbGxlZCA9IFRSVUU7Ci0JfQotCi19Ci0KLXZvaWQgUlRNUF9PU19SZWxlYXNlX1BhY2tldChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9xdWV1ZV9lbnRyeSAqcEVudHJ5KQotewotCS8qUlRNUEZyZWVOZGlzUGFja2V0KHBBZCwgKHN0cnVjdCBza19idWZmICopcEVudHJ5KTsgKi8KLX0KLQotLyogVW5pZnkgYWxsIGRlbGF5IHJvdXRpbmUgYnkgdXNpbmcgdWRlbGF5ICovCi12b2lkIFJUTVB1c2VjRGVsYXkodW5zaWduZWQgbG9uZyB1c2VjKQotewotCXVuc2lnbmVkIGxvbmcgaTsKLQotCWZvciAoaSA9IDA7IGkgPCAodXNlYyAvIDUwKTsgaSsrKQotCQl1ZGVsYXkoNTApOwotCi0JaWYgKHVzZWMgJSA1MCkKLQkJdWRlbGF5KHVzZWMgJSA1MCk7Ci19Ci0KLXZvaWQgUlRNUF9HZXRDdXJyZW50U3lzdGVtVGltZShMQVJHRV9JTlRFR0VSICp0aW1lKQotewotCXRpbWUtPnUuTG93UGFydCA9IGppZmZpZXM7Ci19Ci0KLS8qIHBBZCBNVVNUIGFsbG93IHRvIGJlIE5VTEwgKi8KLWludCBvc19hbGxvY19tZW0oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1OCAqKiBtZW0sIHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQkqbWVtID0ga21hbGxvYyhzaXplLCBHRlBfQVRPTUlDKTsKLQlpZiAoKm1lbSkKLQkJcmV0dXJuIE5ESVNfU1RBVFVTX1NVQ0NFU1M7Ci0JZWxzZQotCQlyZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKLX0KLQotLyogcEFkIE1VU1QgYWxsb3cgdG8gYmUgTlVMTCAqLwotaW50IG9zX2ZyZWVfbWVtKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdm9pZCAqbWVtKQotewotCi0JQVNTRVJUKG1lbSk7Ci0Ja2ZyZWUobWVtKTsKLQlyZXR1cm4gTkRJU19TVEFUVVNfU1VDQ0VTUzsKLX0KLQotdm9pZCAqUnRtcE9TTmV0UGt0QWxsb2Moc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBJTiBpbnQgc2l6ZSkKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCS8qIEFkZCAyIG1vcmUgYnl0ZXMgZm9yIGlwIGhlYWRlciBhbGlnbm1lbnQgKi8KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemUgKyAyKTsKLQotCXJldHVybiAodm9pZCAqKXNrYjsKLX0KLQotdm9pZCAqUlRNUF9BbGxvY2F0ZUZyYWdQYWNrZXRCdWZmZXIoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCQkgICB1bnNpZ25lZCBsb25nIExlbmd0aCkKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqcGt0OwotCi0JcGt0ID0gZGV2X2FsbG9jX3NrYihMZW5ndGgpOwotCi0JaWYgKHBrdCA9PSBOVUxMKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJICgiY2FuJ3QgYWxsb2NhdGUgZnJhZyByeCAlbGQgc2l6ZSBwYWNrZXRcbiIsIExlbmd0aCkpOwotCX0KLQotCWlmIChwa3QpIHsKLQkJUlRNUF9TRVRfUEFDS0VUX1NPVVJDRShPU1BLVF9UT19SVFBLVChwa3QpLCBQS1RTUkNfTkRJUyk7Ci0JfQotCi0JcmV0dXJuICh2b2lkICopcGt0OwotfQotCi12b2lkICpSVE1QX0FsbG9jYXRlVHhQYWNrZXRCdWZmZXIoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCQkgdW5zaWduZWQgbG9uZyBMZW5ndGgsCi0JCQkJCSBJTiBCT09MRUFOIENhY2hlZCwKLQkJCQkJIHZvaWQgKipWaXJ0dWFsQWRkcmVzcykKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqcGt0OwotCi0JcGt0ID0gZGV2X2FsbG9jX3NrYihMZW5ndGgpOwotCi0JaWYgKHBrdCA9PSBOVUxMKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJICgiY2FuJ3QgYWxsb2NhdGUgdHggJWxkIHNpemUgcGFja2V0XG4iLCBMZW5ndGgpKTsKLQl9Ci0KLQlpZiAocGt0KSB7Ci0JCVJUTVBfU0VUX1BBQ0tFVF9TT1VSQ0UoT1NQS1RfVE9fUlRQS1QocGt0KSwgUEtUU1JDX05ESVMpOwotCQkqVmlydHVhbEFkZHJlc3MgPSAodm9pZCAqKXBrdC0+ZGF0YTsKLQl9IGVsc2UgewotCQkqVmlydHVhbEFkZHJlc3MgPSAodm9pZCAqKU5VTEw7Ci0JfQotCi0JcmV0dXJuICh2b2lkICopcGt0OwotfQotCi12b2lkIGJ1aWxkX3R4X3BhY2tldChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgICAgdm9pZCAqcFBhY2tldCwKLQkJICAgICB1OCAqcEZyYW1lLCB1bnNpZ25lZCBsb25nIEZyYW1lTGVuKQotewotCi0Jc3RydWN0IHNrX2J1ZmYgKnBUeFBrdDsKLQotCUFTU0VSVChwUGFja2V0KTsKLQlwVHhQa3QgPSBSVFBLVF9UT19PU1BLVChwUGFja2V0KTsKLQotCU5kaXNNb3ZlTWVtb3J5KHNrYl9wdXQocFR4UGt0LCBGcmFtZUxlbiksIHBGcmFtZSwgRnJhbWVMZW4pOwotfQotCi12b2lkIFJUTVBGcmVlQWRhcHRlcihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0Jc3RydWN0IG9zX2Nvb2tpZSAqb3NfY29va2llOwotCWludCBpbmRleDsKLQotCW9zX2Nvb2tpZSA9IChzdHJ1Y3Qgb3NfY29va2llICopcEFkLT5PU19Db29raWU7Ci0KLQlrZnJlZShwQWQtPkJlYWNvbkJ1Zik7Ci0KLQlOZGlzRnJlZVNwaW5Mb2NrKCZwQWQtPk1nbXRSaW5nTG9jayk7Ci0KLSNpZmRlZiBSVE1QX01BQ19QQ0kKLQlOZGlzRnJlZVNwaW5Mb2NrKCZwQWQtPlJ4UmluZ0xvY2spOwotI2lmZGVmIFJUMzA5MAotCU5kaXNGcmVlU3BpbkxvY2soJnBBZC0+TWN1Q21kTG9jayk7Ci0jZW5kaWYgLyogUlQzMDkwIC8vICovCi0jZW5kaWYgLyogUlRNUF9NQUNfUENJIC8vICovCi0KLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBOVU1fT0ZfVFhfUklORzsgaW5kZXgrKykgewotCQlOZGlzRnJlZVNwaW5Mb2NrKCZwQWQtPlR4U3dRdWV1ZUxvY2tbaW5kZXhdKTsKLQkJTmRpc0ZyZWVTcGluTG9jaygmcEFkLT5EZVF1ZXVlTG9ja1tpbmRleF0pOwotCQlwQWQtPkRlUXVldWVSdW5uaW5nW2luZGV4XSA9IEZBTFNFOwotCX0KLQotCU5kaXNGcmVlU3BpbkxvY2soJnBBZC0+aXJxX2xvY2spOwotCi0JcmVsZWFzZV9maXJtd2FyZShwQWQtPmZpcm13YXJlKTsKLQotCXZmcmVlKHBBZCk7CQkvKiBwY2lfZnJlZV9jb25zaXN0ZW50KG9zX2Nvb2tpZS0+cGNpX2RldixzaXplb2Yoc3RydWN0IHJ0X3J0bXBfYWRhcHRlcikscEFkLG9zX2Nvb2tpZS0+cEFkX3BhKTsgKi8KLQlrZnJlZShvc19jb29raWUpOwotfQotCi1CT09MRUFOIE9TX05lZWRfQ2xvbmVfUGFja2V0KHZvaWQpCi17Ci0JcmV0dXJuIEZBTFNFOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQkJY2xvbmUgYW4gaW5wdXQgTkRJUyBQQUNLRVQgdG8gYW5vdGhlciBvbmUuIFRoZSBuZXcgaW50ZXJuYWxseSBjcmVhdGVkIE5ESVMgUEFDS0VUCi0JCW11c3QgaGF2ZSBvbmx5IG9uZSBORElTIEJVRkZFUgotCQlyZXR1cm4gLSBieXRlIGNvcGllZC4gMCBtZWFucyBjYW4ndCBjcmVhdGUgTkRJUyBQQUNLRVQKLQkJTk9URTogaW50ZXJuYWxseSBjcmVhdGVkIGNoYXIgc2hvdWxkIGJlIGRlc3Ryb3llZCBieSBSVE1QRnJlZU5kaXNQYWNrZXQKLQotCUFyZ3VtZW50czoKLQkJcEFkIAlQb2ludGVyIHRvIG91ciBhZGFwdGVyCi0JCXBJbnNBTVNEVUhkcglFV0MgQS1NU0RVIGZvcm1hdCBoYXMgZXh0cmEgMTQtYnl0ZXMgaGVhZGVyLiBpZiBUUlVFLCBpbnNlcnQgdGhpcyAxNC1ieXRlIGhkciBpbiBmcm9udCBvZiBNU0RVLgotCQkqcFNyY1RvdGFsTGVuCQkJcmV0dXJuIHRvdGFsIHBhY2tldCBsZW5ndGguIFRoaXMgbGVuZ3RoIGlzIGNhbGN1bGF0ZWQgd2l0aCA4MDIuMyBmb3JtYXQgcGFja2V0LgotCi0JUmV0dXJuIFZhbHVlOgotCQlORElTX1NUQVRVU19TVUNDRVNTCi0JCU5ESVNfU1RBVFVTX0ZBSUxVUkUKLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi1pbnQgUlRNUENsb25lTmRpc1BhY2tldChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJSU4gQk9PTEVBTiBwSW5zQU1TRFVIZHIsCi0JCQkJdm9pZCAqcEluUGFja2V0LAotCQkJCXZvaWQgKipwcE91dFBhY2tldCkKLXsKLQotCXN0cnVjdCBza19idWZmICpwa3Q7Ci0KLQlBU1NFUlQocEluUGFja2V0KTsKLQlBU1NFUlQocHBPdXRQYWNrZXQpOwotCi0JLyogMS4gQWxsb2NhdGUgYSBwYWNrZXQgKi8KLQlwa3QgPSBkZXZfYWxsb2Nfc2tiKDIwNDgpOwotCi0JaWYgKHBrdCA9PSBOVUxMKSB7Ci0JCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOwotCX0KLQotCXNrYl9wdXQocGt0LCBHRVRfT1NfUEtUX0xFTihwSW5QYWNrZXQpKTsKLQlOZGlzTW92ZU1lbW9yeShwa3QtPmRhdGEsIEdFVF9PU19QS1RfREFUQVBUUihwSW5QYWNrZXQpLAotCQkgICAgICAgR0VUX09TX1BLVF9MRU4ocEluUGFja2V0KSk7Ci0JKnBwT3V0UGFja2V0ID0gT1NQS1RfVE9fUlRQS1QocGt0KTsKLQotCVJUTVBfU0VUX1BBQ0tFVF9TT1VSQ0UoT1NQS1RfVE9fUlRQS1QocGt0KSwgUEtUU1JDX05ESVMpOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIiMjI0Nsb25lIyMjXG4iKTsKLQotCXJldHVybiBORElTX1NUQVRVU19TVUNDRVNTOwotfQotCi0vKiB0aGUgYWxsb2NhdGVkIE5ESVMgUEFDS0VUIG11c3QgYmUgZnJlZWQgdmlhIFJUTVBGcmVlTmRpc1BhY2tldCgpICovCi1pbnQgUlRNUEFsbG9jYXRlTmRpc1BhY2tldChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJICAgdm9pZCAqKnBwUGFja2V0LAotCQkJCSAgIHU4ICpwSGVhZGVyLAotCQkJCSAgIHUzMiBIZWFkZXJMZW4sCi0JCQkJICAgdTggKnBEYXRhLCB1MzIgRGF0YUxlbikKLXsKLQl2b2lkICpwUGFja2V0OwotCUFTU0VSVChwRGF0YSk7Ci0JQVNTRVJUKERhdGFMZW4pOwotCi0JLyogMS4gQWxsb2NhdGUgYSBwYWNrZXQgKi8KLQlwUGFja2V0ID0KLQkgICAgKHZvaWQgKiopIGRldl9hbGxvY19za2IoSGVhZGVyTGVuICsgRGF0YUxlbiArCi0JCQkJCSAgIFJUTVBfUEtUX1RBSUxfUEFERElORyk7Ci0JaWYgKHBQYWNrZXQgPT0gTlVMTCkgewotCQkqcHBQYWNrZXQgPSBOVUxMOwotCQlwcl9kZXZlbCgiUlRNUEFsbG9jYXRlTmRpc1BhY2tldCBGYWlsXG4iKTsKLQotCQlyZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKLQl9Ci0JLyogMi4gY2xvbmUgdGhlIGZyYW1lIGNvbnRlbnQgKi8KLQlpZiAoSGVhZGVyTGVuID4gMCkKLQkJTmRpc01vdmVNZW1vcnkoR0VUX09TX1BLVF9EQVRBUFRSKHBQYWNrZXQpLCBwSGVhZGVyLCBIZWFkZXJMZW4pOwotCWlmIChEYXRhTGVuID4gMCkKLQkJTmRpc01vdmVNZW1vcnkoR0VUX09TX1BLVF9EQVRBUFRSKHBQYWNrZXQpICsgSGVhZGVyTGVuLCBwRGF0YSwKLQkJCSAgICAgICBEYXRhTGVuKTsKLQotCS8qIDMuIHVwZGF0ZSBsZW5ndGggb2YgcGFja2V0ICovCi0Jc2tiX3B1dChHRVRfT1NfUEtUX1RZUEUocFBhY2tldCksIEhlYWRlckxlbiArIERhdGFMZW4pOwotCi0JUlRNUF9TRVRfUEFDS0VUX1NPVVJDRShwUGFja2V0LCBQS1RTUkNfTkRJUyk7Ci0vKiAgICAgIHByaW50aygiJXMgOiBwUGFja2V0ID0gJXAsIGxlbiA9ICVkXG4iLCBfX2Z1bmNfXywgcFBhY2tldCwgR0VUX09TX1BLVF9MRU4ocFBhY2tldCkpOyAqLwotCSpwcFBhY2tldCA9IHBQYWNrZXQ7Ci0JcmV0dXJuIE5ESVNfU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLS8qCi0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICBEZXNjcmlwdGlvbjoKLQlUaGlzIHJvdXRpbmUgZnJlZXMgYSBtaW5pcG9ydCBpbnRlcm5hbGx5IGFsbG9jYXRlZCBjaGFyIGFuZCBpdHMKLQljb3JyZXNwb25kaW5nIE5ESVNfQlVGRkVSIGFuZCBhbGxvY2F0ZWQgbWVtb3J5LgotICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFJUTVBGcmVlTmRpc1BhY2tldChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHZvaWQgKnBQYWNrZXQpCi17Ci0JZGV2X2tmcmVlX3NrYl9hbnkoUlRQS1RfVE9fT1NQS1QocFBhY2tldCkpOwotfQotCi0vKiBJUlFMID0gRElTUEFUQ0hfTEVWRUwgKi8KLS8qIE5PVEU6IHdlIGRvIGhhdmUgYW4gYXNzdW1wdGlvbiBoZXJlLCB0aGF0IEJ5dGUwIGFuZCBCeXRlMSBhbHdheXMgcmVhc2lkIGF0IHRoZSBzYW1lICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgc2NhdHRlciBnYXRoZXIgYnVmZmVyICovCi1pbnQgU25pZmYyQnl0ZXNGcm9tTmRpc0J1ZmZlcihjaGFyICpwRmlyc3RCdWZmZXIsCi0JCQkJICAgICAgdTggRGVzaXJlZE9mZnNldCwKLQkJCQkgICAgICB1OCAqcEJ5dGUwLCB1OCAqcEJ5dGUxKQotewotCSpwQnl0ZTAgPSAqKHU4ICopKHBGaXJzdEJ1ZmZlciArIERlc2lyZWRPZmZzZXQpOwotCSpwQnl0ZTEgPSAqKHU4ICopKHBGaXJzdEJ1ZmZlciArIERlc2lyZWRPZmZzZXQgKyAxKTsKLQotCXJldHVybiBORElTX1NUQVRVU19TVUNDRVNTOwotfQotCi12b2lkIFJUTVBfUXVlcnlQYWNrZXRJbmZvKHZvaWQgKnBQYWNrZXQsCi0JCQkgIHN0cnVjdCBydF9wYWNrZXRfaW5mbyAqcFBhY2tldEluZm8sCi0JCQkgIHU4ICoqcFNyY0J1ZlZBLCB1MzIgKiBwU3JjQnVmTGVuKQotewotCXBQYWNrZXRJbmZvLT5CdWZmZXJDb3VudCA9IDE7Ci0JcFBhY2tldEluZm8tPnBGaXJzdEJ1ZmZlciA9IChjaGFyICopR0VUX09TX1BLVF9EQVRBUFRSKHBQYWNrZXQpOwotCXBQYWNrZXRJbmZvLT5QaHlzaWNhbEJ1ZmZlckNvdW50ID0gMTsKLQlwUGFja2V0SW5mby0+VG90YWxQYWNrZXRMZW5ndGggPSBHRVRfT1NfUEtUX0xFTihwUGFja2V0KTsKLQotCSpwU3JjQnVmVkEgPSBHRVRfT1NfUEtUX0RBVEFQVFIocFBhY2tldCk7Ci0JKnBTcmNCdWZMZW4gPSBHRVRfT1NfUEtUX0xFTihwUGFja2V0KTsKLX0KLQotdm9pZCBSVE1QX1F1ZXJ5TmV4dFBhY2tldEluZm8odm9pZCAqKnBwUGFja2V0LAotCQkJICAgICAgc3RydWN0IHJ0X3BhY2tldF9pbmZvICpwUGFja2V0SW5mbywKLQkJCSAgICAgIHU4ICoqcFNyY0J1ZlZBLCB1MzIgKiBwU3JjQnVmTGVuKQotewotCXZvaWQgKnBQYWNrZXQgPSBOVUxMOwotCi0JaWYgKCpwcFBhY2tldCkKLQkJcFBhY2tldCA9IEdFVF9PU19QS1RfTkVYVCgqcHBQYWNrZXQpOwotCi0JaWYgKHBQYWNrZXQpIHsKLQkJcFBhY2tldEluZm8tPkJ1ZmZlckNvdW50ID0gMTsKLQkJcFBhY2tldEluZm8tPnBGaXJzdEJ1ZmZlciA9Ci0JCSAgICAoY2hhciAqKUdFVF9PU19QS1RfREFUQVBUUihwUGFja2V0KTsKLQkJcFBhY2tldEluZm8tPlBoeXNpY2FsQnVmZmVyQ291bnQgPSAxOwotCQlwUGFja2V0SW5mby0+VG90YWxQYWNrZXRMZW5ndGggPSBHRVRfT1NfUEtUX0xFTihwUGFja2V0KTsKLQotCQkqcFNyY0J1ZlZBID0gR0VUX09TX1BLVF9EQVRBUFRSKHBQYWNrZXQpOwotCQkqcFNyY0J1ZkxlbiA9IEdFVF9PU19QS1RfTEVOKHBQYWNrZXQpOwotCQkqcHBQYWNrZXQgPSBHRVRfT1NfUEtUX05FWFQocFBhY2tldCk7Ci0JfSBlbHNlIHsKLQkJcFBhY2tldEluZm8tPkJ1ZmZlckNvdW50ID0gMDsKLQkJcFBhY2tldEluZm8tPnBGaXJzdEJ1ZmZlciA9IE5VTEw7Ci0JCXBQYWNrZXRJbmZvLT5QaHlzaWNhbEJ1ZmZlckNvdW50ID0gMDsKLQkJcFBhY2tldEluZm8tPlRvdGFsUGFja2V0TGVuZ3RoID0gMDsKLQotCQkqcFNyY0J1ZlZBID0gTlVMTDsKLQkJKnBTcmNCdWZMZW4gPSAwOwotCQkqcHBQYWNrZXQgPSBOVUxMOwotCX0KLX0KLQotdm9pZCAqRHVwbGljYXRlUGFja2V0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICAgdm9pZCAqcFBhY2tldCwgdTggRnJvbVdoaWNoQlNTSUQpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl2b2lkICpwUmV0UGFja2V0ID0gTlVMTDsKLQl1MTYgRGF0YVNpemU7Ci0JdTggKnBEYXRhOwotCi0JRGF0YVNpemUgPSAodTE2KUdFVF9PU19QS1RfTEVOKHBQYWNrZXQpOwotCXBEYXRhID0gKHU4ICopR0VUX09TX1BLVF9EQVRBUFRSKHBQYWNrZXQpOwotCi0Jc2tiID0gc2tiX2Nsb25lKFJUUEtUX1RPX09TUEtUKHBQYWNrZXQpLCBNRU1fQUxMT0NfRkxBRyk7Ci0JaWYgKHNrYikgewotCQlza2ItPmRldiA9IGdldF9uZXRkZXZfZnJvbV9ic3NpZChwQWQsIEZyb21XaGljaEJTU0lEKTsKLQkJcFJldFBhY2tldCA9IE9TUEtUX1RPX1JUUEtUKHNrYik7Ci0JfQotCi0JcmV0dXJuIHBSZXRQYWNrZXQ7Ci0KLX0KLQotdm9pZCAqZHVwbGljYXRlX3BrdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICB1OCAqcEhlYWRlcjgwMl8zLAotCQkJICAgdTMyIEhkckxlbiwKLQkJCSAgIHU4ICpwRGF0YSwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgRGF0YVNpemUsIHU4IEZyb21XaGljaEJTU0lEKQotewotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jdm9pZCAqcFBhY2tldCA9IE5VTEw7Ci0KLQlza2IgPSBfX2Rldl9hbGxvY19za2IoSGRyTGVuICsgRGF0YVNpemUgKyAyLCBNRU1fQUxMT0NfRkxBRyk7Ci0JaWYgKHNrYiAhPSBOVUxMKSB7Ci0JCXNrYl9yZXNlcnZlKHNrYiwgMik7Ci0JCU5kaXNNb3ZlTWVtb3J5KHNrYl90YWlsX3BvaW50ZXIoc2tiKSwgcEhlYWRlcjgwMl8zLCBIZHJMZW4pOwotCQlza2JfcHV0KHNrYiwgSGRyTGVuKTsKLQkJTmRpc01vdmVNZW1vcnkoc2tiX3RhaWxfcG9pbnRlcihza2IpLCBwRGF0YSwgRGF0YVNpemUpOwotCQlza2JfcHV0KHNrYiwgRGF0YVNpemUpOwotCQlza2ItPmRldiA9IGdldF9uZXRkZXZfZnJvbV9ic3NpZChwQWQsIEZyb21XaGljaEJTU0lEKTsKLQkJcFBhY2tldCA9IE9TUEtUX1RPX1JUUEtUKHNrYik7Ci0JfQotCi0JcmV0dXJuIHBQYWNrZXQ7Ci19Ci0KLSNkZWZpbmUgVEtJUF9UWF9NSUNfU0laRQkJOAotdm9pZCAqZHVwbGljYXRlX3BrdF93aXRoX1RLSVBfTUlDKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkJIHZvaWQgKnBQYWNrZXQpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiwgKm5ld3NrYjsKLQotCXNrYiA9IFJUUEtUX1RPX09TUEtUKHBQYWNrZXQpOwotCWlmIChza2JfdGFpbHJvb20oc2tiKSA8IFRLSVBfVFhfTUlDX1NJWkUpIHsKLQkJLyogYWxsb2MgYSBuZXcgc2tiIGFuZCBjb3B5IHRoZSBwYWNrZXQgKi8KLQkJbmV3c2tiID0KLQkJICAgIHNrYl9jb3B5X2V4cGFuZChza2IsIHNrYl9oZWFkcm9vbShza2IpLCBUS0lQX1RYX01JQ19TSVpFLAotCQkJCSAgICBHRlBfQVRPTUlDKTsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJaWYgKG5ld3NrYiA9PSBOVUxMKSB7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCQkgKCJFeHRlbmQgVHguTUlDIGZvciBwYWNrZXQgZmFpbGVkISwgZHJvcHBpbmcgcGFja2V0IVxuIikpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQkJc2tiID0gbmV3c2tiOwotCX0KLQotCXJldHVybiBPU1BLVF9UT19SVFBLVChza2IpOwotfQotCi12b2lkICpDbG9uZVBhY2tldChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgdm9pZCAqcFBhY2tldCwKLQkJCSB1OCAqcERhdGEsIHVuc2lnbmVkIGxvbmcgRGF0YVNpemUpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnBSeFBrdDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqcENsb25lZFBrdDsKLQotCUFTU0VSVChwUGFja2V0KTsKLQlwUnhQa3QgPSBSVFBLVF9UT19PU1BLVChwUGFja2V0KTsKLQotCS8qIGNsb25lIHRoZSBwYWNrZXQgKi8KLQlwQ2xvbmVkUGt0ID0gc2tiX2Nsb25lKHBSeFBrdCwgTUVNX0FMTE9DX0ZMQUcpOwotCi0JaWYgKHBDbG9uZWRQa3QpIHsKLQkJLyogc2V0IHRoZSBjb3JyZWN0IGRhdGFwdHIgYW5kIGRhdGEgbGVuICovCi0JCXBDbG9uZWRQa3QtPmRldiA9IHBSeFBrdC0+ZGV2OwotCQlwQ2xvbmVkUGt0LT5kYXRhID0gcERhdGE7Ci0JCXBDbG9uZWRQa3QtPmxlbiA9IERhdGFTaXplOwotCQlza2Jfc2V0X3RhaWxfcG9pbnRlcihwQ2xvbmVkUGt0LCBEYXRhU2l6ZSkKLQkJQVNTRVJUKERhdGFTaXplIDwgMTUzMCk7Ci0JfQotCXJldHVybiBwQ2xvbmVkUGt0OwotfQotCi0vKiAqLwotLyogY2hhbmdlIE9TIHBhY2tldCBEYXRhUHRyIGFuZCBEYXRhTGVuICovCi0vKiAqLwotdm9pZCB1cGRhdGVfb3NfcGFja2V0X2luZm8oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgc3RydWN0IHJ0X3J4X2JsayAqcFJ4QmxrLCB1OCBGcm9tV2hpY2hCU1NJRCkKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqcE9TUGt0OwotCi0JQVNTRVJUKHBSeEJsay0+cFJ4UGFja2V0KTsKLQlwT1NQa3QgPSBSVFBLVF9UT19PU1BLVChwUnhCbGstPnBSeFBhY2tldCk7Ci0KLQlwT1NQa3QtPmRldiA9IGdldF9uZXRkZXZfZnJvbV9ic3NpZChwQWQsIEZyb21XaGljaEJTU0lEKTsKLQlwT1NQa3QtPmRhdGEgPSBwUnhCbGstPnBEYXRhOwotCXBPU1BrdC0+bGVuID0gcFJ4QmxrLT5EYXRhU2l6ZTsKLQlza2Jfc2V0X3RhaWxfcG9pbnRlcihwT1NQa3QsIHBPU1BrdC0+bGVuKTsKLX0KLQotdm9pZCB3bGFuXzgwMl8xMV90b184MDJfM19wYWNrZXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCSBzdHJ1Y3QgcnRfcnhfYmxrICpwUnhCbGssCi0JCQkJIHU4ICpwSGVhZGVyODAyXzMsCi0JCQkJIHU4IEZyb21XaGljaEJTU0lEKQotewotCXN0cnVjdCBza19idWZmICpwT1NQa3Q7Ci0KLQlBU1NFUlQocFJ4QmxrLT5wUnhQYWNrZXQpOwotCUFTU0VSVChwSGVhZGVyODAyXzMpOwotCi0JcE9TUGt0ID0gUlRQS1RfVE9fT1NQS1QocFJ4QmxrLT5wUnhQYWNrZXQpOwotCi0JcE9TUGt0LT5kZXYgPSBnZXRfbmV0ZGV2X2Zyb21fYnNzaWQocEFkLCBGcm9tV2hpY2hCU1NJRCk7Ci0JcE9TUGt0LT5kYXRhID0gcFJ4QmxrLT5wRGF0YTsKLQlwT1NQa3QtPmxlbiA9IHBSeEJsay0+RGF0YVNpemU7Ci0Jc2tiX3NldF90YWlsX3BvaW50ZXIocE9TUGt0LCBwT1NQa3QtPmxlbik7Ci0KLQkvKiAqLwotCS8qIGNvcHkgODAyLjMgaGVhZGVyICovCi0JLyogKi8KLQkvKiAqLwotCi0JTmRpc01vdmVNZW1vcnkoc2tiX3B1c2gocE9TUGt0LCBMRU5HVEhfODAyXzMpLCBwSGVhZGVyODAyXzMsCi0JCSAgICAgICBMRU5HVEhfODAyXzMpOwotfQotCi12b2lkIGFubm91bmNlXzgwMl8zX3BhY2tldChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHZvaWQgKnBQYWNrZXQpCi17Ci0KLQlzdHJ1Y3Qgc2tfYnVmZiAqcFJ4UGt0OwotCi0JQVNTRVJUKHBQYWNrZXQpOwotCi0JcFJ4UGt0ID0gUlRQS1RfVE9fT1NQS1QocFBhY2tldCk7Ci0KLQkvKiBQdXNoIHVwIHRoZSBwcm90b2NvbCBzdGFjayAqLwotCXBSeFBrdC0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhwUnhQa3QsIHBSeFBrdC0+ZGV2KTsKLQotCW5ldGlmX3J4KHBSeFBrdCk7Ci19Ci0KLXN0cnVjdCBydF9ydG1wX3NnX2xpc3QgKgotcnRfZ2V0X3NnX2xpc3RfZnJvbV9wYWNrZXQodm9pZCAqcFBhY2tldCwgc3RydWN0IHJ0X3J0bXBfc2dfbGlzdCAqc2cpCi17Ci0Jc2ctPk51bWJlck9mRWxlbWVudHMgPSAxOwotCXNnLT5FbGVtZW50c1swXS5BZGRyZXNzID0gR0VUX09TX1BLVF9EQVRBUFRSKHBQYWNrZXQpOwotCXNnLT5FbGVtZW50c1swXS5MZW5ndGggPSBHRVRfT1NfUEtUX0xFTihwUGFja2V0KTsKLQlyZXR1cm4gc2c7Ci19Ci0KLXZvaWQgaGV4X2R1bXAoY2hhciAqc3RyLCB1bnNpZ25lZCBjaGFyICpwU3JjQnVmVkEsIHVuc2lnbmVkIGludCBTcmNCdWZMZW4pCi17Ci0JdW5zaWduZWQgY2hhciAqcHQ7Ci0JaW50IHg7Ci0KLQlpZiAoUlREZWJ1Z0xldmVsIDwgUlRfREVCVUdfVFJBQ0UpCi0JCXJldHVybjsKLQotCXB0ID0gcFNyY0J1ZlZBOwotCXByaW50ayhLRVJOX0RFQlVHICIlczogJXAsIGxlbiA9ICVkXG4iLCBzdHIsIHBTcmNCdWZWQSwgU3JjQnVmTGVuKTsKLQlmb3IgKHggPSAwOyB4IDwgU3JjQnVmTGVuOyB4KyspIHsKLQkJaWYgKHggJSAxNiA9PSAwKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIjB4JTA0eCA6ICIsIHgpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiJTAyeCAiLCAoKHVuc2lnbmVkIGNoYXIpcHRbeF0pKTsKLQkJaWYgKHggJSAxNiA9PSAxNSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICJcbiIpOwotCX0KLQlwcmludGsoS0VSTl9ERUJVRyAiXG4iKTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JCVNlbmQgbG9nIG1lc3NhZ2UgdGhyb3VnaCB3aXJlbGVzcyBldmVudAotCi0JCVN1cHBvcnQgc3RhbmRhcmQgaXdfZXZlbnQgd2l0aCBJV0VWQ1VTVE9NLiBJdCBpcyB1c2VkIGJlbG93LgotCi0JCWl3cmVxX2RhdGEuZGF0YS5mbGFncyBpcyB1c2VkIHRvIHN0b3JlIGV2ZW50X2ZsYWcgdGhhdCBpcyBkZWZpbmVkIGJ5IHVzZXIuCi0JCWl3cmVxX2RhdGEuZGF0YS5sZW5ndGggaXMgdGhlIGxlbmd0aCBvZiB0aGUgZXZlbnQgbG9nLgotCi0JCVRoZSBmb3JtYXQgb2YgdGhlIGV2ZW50IGxvZyBpcyBjb21wb3NlZCBvZiB0aGUgZW50cnkncyBNQUMgYWRkcmVzcyBhbmQKLQkJdGhlIGRlc2lyZWQgbG9nIG1lc3NhZ2UgKHJlZmVyIHRvIHBXaXJlbGVzc0V2ZW50VGV4dCkuCi0KLQkJCWV4OiAxMToyMjozMzo0NDo1NTo2NiBoYXMgYXNzb2NpYXRlZCBzdWNjZXNzZnVsbHkKLQotCQlwLnMuIFRoZSByZXF1aXJlbWVudCBvZiBXaXJlbGVzcyBFeHRlbnNpb24gaXMgdjE1IG9yIG5ld2VyLgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBSVE1QU2VuZFdpcmVsZXNzRXZlbnQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgdTE2IEV2ZW50X2ZsYWcsCi0JCQkgICB1OCAqcEFkZHIsIHU4IEJzc0lkeCwgY2hhciBSc3NpKQotewotCi0JLyp1bmlvbiAgICAgICAgIGl3cmVxX2RhdGEgICAgICB3cnF1OyAqLwotCWNoYXIgKnBCdWYgPSBOVUxMLCAqcEJ1ZlB0ciA9IE5VTEw7Ci0JdTE2IGV2ZW50LCB0eXBlLCBCdWZMZW47Ci0JdTggZXZlbnRfdGFibGVfbGVuID0gMDsKLQotCXR5cGUgPSBFdmVudF9mbGFnICYgMHhGRjAwOwotCWV2ZW50ID0gRXZlbnRfZmxhZyAmIDB4MDBGRjsKLQotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgSVdfU1lTX0VWRU5UX0ZMQUdfU1RBUlQ6Ci0JCWV2ZW50X3RhYmxlX2xlbiA9IElXX1NZU19FVkVOVF9UWVBFX05VTTsKLQkJYnJlYWs7Ci0KLQljYXNlIElXX1NQT09GX0VWRU5UX0ZMQUdfU1RBUlQ6Ci0JCWV2ZW50X3RhYmxlX2xlbiA9IElXX1NQT09GX0VWRU5UX1RZUEVfTlVNOwotCQlicmVhazsKLQotCWNhc2UgSVdfRkxPT0RfRVZFTlRfRkxBR19TVEFSVDoKLQkJZXZlbnRfdGFibGVfbGVuID0gSVdfRkxPT0RfRVZFTlRfVFlQRV9OVU07Ci0JCWJyZWFrOwotCX0KLQotCWlmIChldmVudF90YWJsZV9sZW4gPT0gMCkgewotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCSAoIiVzIDogVGhlIHR5cGUoJTB4MDJ4KSBpcyBub3QgdmFsaWQuXG4iLCBfX2Z1bmNfXywKLQkJCSAgdHlwZSkpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGV2ZW50ID49IGV2ZW50X3RhYmxlX2xlbikgewotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCSAoIiVzIDogVGhlIGV2ZW50KCUweDAyeCkgaXMgbm90IHZhbGlkLlxuIiwgX19mdW5jX18sCi0JCQkgIGV2ZW50KSk7Ci0JCXJldHVybjsKLQl9Ci0JLypBbGxvY2F0ZSBtZW1vcnkgYW5kIGNvcHkgdGhlIG1zZy4gKi8KLQlwQnVmID0ga21hbGxvYyhJV19DVVNUT01fTUFYX0xFTiwgR0ZQX0FUT01JQyk7Ci0JaWYgKHBCdWYgIT0gTlVMTCkgewotCQkvKlByZXBhcmUgdGhlIHBheWxvYWQgKi8KLQkJbWVtc2V0KHBCdWYsIDAsIElXX0NVU1RPTV9NQVhfTEVOKTsKLQotCQlwQnVmUHRyID0gcEJ1ZjsKLQotCQlpZiAocEFkZHIpCi0JCQlwQnVmUHRyICs9Ci0JCQkgICAgc3ByaW50ZihwQnVmUHRyLCAiKFJUMjg2MCkgU1RBKCVwTSkgIiwgcEFkZHIpOwotCQllbHNlIGlmIChCc3NJZHggPCBNQVhfTUJTU0lEX05VTSkKLQkJCXBCdWZQdHIgKz0KLQkJCSAgICBzcHJpbnRmKHBCdWZQdHIsICIoUlQyODYwKSBCU1Mod2xhbiVkKSAiLCBCc3NJZHgpOwotCQllbHNlCi0JCQlwQnVmUHRyICs9IHNwcmludGYocEJ1ZlB0ciwgIihSVDI4NjApICIpOwotCi0JCWlmICh0eXBlID09IElXX1NZU19FVkVOVF9GTEFHX1NUQVJUKQotCQkJcEJ1ZlB0ciArPQotCQkJICAgIHNwcmludGYocEJ1ZlB0ciwgIiVzIiwKLQkJCQkgICAgcFdpcmVsZXNzU3lzRXZlbnRUZXh0W2V2ZW50XSk7Ci0JCWVsc2UgaWYgKHR5cGUgPT0gSVdfU1BPT0ZfRVZFTlRfRkxBR19TVEFSVCkKLQkJCXBCdWZQdHIgKz0KLQkJCSAgICBzcHJpbnRmKHBCdWZQdHIsICIlcyAoUlNTST0lZCkiLAotCQkJCSAgICBwV2lyZWxlc3NTcG9vZkV2ZW50VGV4dFtldmVudF0sIFJzc2kpOwotCQllbHNlIGlmICh0eXBlID09IElXX0ZMT09EX0VWRU5UX0ZMQUdfU1RBUlQpCi0JCQlwQnVmUHRyICs9Ci0JCQkgICAgc3ByaW50ZihwQnVmUHRyLCAiJXMiLAotCQkJCSAgICBwV2lyZWxlc3NGbG9vZEV2ZW50VGV4dFtldmVudF0pOwotCQllbHNlCi0JCQlwQnVmUHRyICs9IHNwcmludGYocEJ1ZlB0ciwgIiVzIiwgInVua25vd24gZXZlbnQiKTsKLQotCQlwQnVmUHRyW3BCdWZQdHIgLSBwQnVmXSA9ICdcMCc7Ci0JCUJ1ZkxlbiA9IHBCdWZQdHIgLSBwQnVmOwotCi0JCVJ0bXBPU1dyaWVsZXNzRXZlbnRTZW5kKHBBZCwgSVdFVkNVU1RPTSwgRXZlbnRfZmxhZywgTlVMTCwKLQkJCQkJKHU4ICopcEJ1ZiwgQnVmTGVuKTsKLQkJLypEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlcyA6ICVzXG4iLCBfX2Z1bmNfXywgcEJ1ZikpOyAqLwotCi0JCWtmcmVlKHBCdWYpOwotCX0gZWxzZQotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCSAoIiVzIDogQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciB3aXJlbGVzcyBldmVudC5cbiIsCi0JCQkgIF9fZnVuY19fKSk7Ci19Ci0KLXZvaWQgc2VuZF9tb25pdG9yX3BhY2tldHMoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfcnhfYmxrICpwUnhCbGspCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnBPU1BrdDsKLQlzdHJ1Y3QgcnRfd2xhbl9uZ19wcmlzbTJfaGVhZGVyICpwaDsKLQlpbnQgcmF0ZV9pbmRleCA9IDA7Ci0JdTE2IGhlYWRlcl9sZW4gPSAwOwotCXU4IHRlbXBfaGVhZGVyWzQwXSA9IHsgMCB9OwotCi0JdV9pbnQzMl90IHJhbGlua3JhdGVbMjU2XSA9IHsgMiwgNCwgMTEsIDIyLCAxMiwgMTgsIDI0LCAzNiwgNDgsIDcyLCA5NiwgMTA4LCAxMDksIDExMCwgMTExLCAxMTIsIDEzLCAyNiwgMzksIDUyLCA3OCwgMTA0LCAxMTcsIDEzMCwgMjYsIDUyLCA3OCwgMTA0LCAxNTYsIDIwOCwgMjM0LCAyNjAsIDI3LCA1NCwgODEsIDEwOCwgMTYyLCAyMTYsIDI0MywgMjcwLAkvKiBMYXN0IDM4ICovCi0JCTU0LCAxMDgsIDE2MiwgMjE2LCAzMjQsIDQzMiwgNDg2LCA1NDAsIDE0LCAyOSwgNDMsIDU3LCA4NywgMTE1LAotCQkgICAgMTMwLCAxNDQsIDI5LCA1OSwgODcsIDExNSwgMTczLCAyMzAsIDI2MCwgMjg4LCAzMCwgNjAsIDkwLAotCQkgICAgMTIwLCAxODAsIDI0MCwgMjcwLCAzMDAsIDYwLCAxMjAsIDE4MCwgMjQwLCAzNjAsIDQ4MCwgNTQwLAotCQkgICAgNjAwLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwKLQkJMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsCi0JCSAgICAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLAotCQkgICAgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwKLQkJICAgIDU3LCA1OCwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwgNjUsIDY2LCA2NywgNjgsIDY5LCA3MCwgNzEsCi0JCSAgICA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwCi0JfTsKLQotCUFTU0VSVChwUnhCbGstPnBSeFBhY2tldCk7Ci0JaWYgKHBSeEJsay0+RGF0YVNpemUgPCAxMCkgewotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCSAoIiVzIDogU2l6ZSBpcyB0b28gc21hbGwhICglZClcbiIsIF9fZnVuY19fLAotCQkJICBwUnhCbGstPkRhdGFTaXplKSk7Ci0JCWdvdG8gZXJyX2ZyZWVfc2tfYnVmZjsKLQl9Ci0KLQlpZiAocFJ4QmxrLT5EYXRhU2l6ZSArIHNpemVvZihzdHJ1Y3QgcnRfd2xhbl9uZ19wcmlzbTJfaGVhZGVyKSA+Ci0JICAgIFJYX0JVRkZFUl9BR0dSRVNJWkUpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkgKCIlcyA6IFNpemUgaXMgdG9vIGxhcmdlISAoJXp1KVxuIiwgX19mdW5jX18sCi0JCQkgIHBSeEJsay0+RGF0YVNpemUgKyBzaXplb2Yoc3RydWN0IHJ0X3dsYW5fbmdfcHJpc20yX2hlYWRlcikpKTsKLQkJZ290byBlcnJfZnJlZV9za19idWZmOwotCX0KLQotCXBPU1BrdCA9IFJUUEtUX1RPX09TUEtUKHBSeEJsay0+cFJ4UGFja2V0KTsKLQlwT1NQa3QtPmRldiA9IGdldF9uZXRkZXZfZnJvbV9ic3NpZChwQWQsIEJTUzApOwotCWlmIChwUnhCbGstPnBIZWFkZXItPkZDLlR5cGUgPT0gQlRZUEVfREFUQSkgewotCQlwUnhCbGstPkRhdGFTaXplIC09IExFTkdUSF84MDJfMTE7Ci0JCWlmICgocFJ4QmxrLT5wSGVhZGVyLT5GQy5Ub0RzID09IDEpICYmCi0JCSAgICAocFJ4QmxrLT5wSGVhZGVyLT5GQy5GckRzID09IDEpKQotCQkJaGVhZGVyX2xlbiA9IExFTkdUSF84MDJfMTFfV0lUSF9BRERSNDsKLQkJZWxzZQotCQkJaGVhZGVyX2xlbiA9IExFTkdUSF84MDJfMTE7Ci0KLQkJLyogUU9TICovCi0JCWlmIChwUnhCbGstPnBIZWFkZXItPkZDLlN1YlR5cGUgJiAweDA4KSB7Ci0JCQloZWFkZXJfbGVuICs9IDI7Ci0JCQkvKiBEYXRhIHNraXAgUU9TIGNvbnRyb2wgZmllbGQgKi8KLQkJCXBSeEJsay0+RGF0YVNpemUgLT0gMjsKLQkJfQotCQkvKiBPcmRlciBiaXQ6IEEtUmFsaW5rIG9yIEhUQysgKi8KLQkJaWYgKHBSeEJsay0+cEhlYWRlci0+RkMuT3JkZXIpIHsKLQkJCWhlYWRlcl9sZW4gKz0gNDsKLQkJCS8qIERhdGEgc2tpcCBIVEMgY29udHJvbCBmaWVsZCAqLwotCQkJcFJ4QmxrLT5EYXRhU2l6ZSAtPSA0OwotCQl9Ci0JCS8qIENvcHkgSGVhZGVyICovCi0JCWlmIChoZWFkZXJfbGVuIDw9IDQwKQotCQkJTmRpc01vdmVNZW1vcnkodGVtcF9oZWFkZXIsIHBSeEJsay0+cERhdGEsIGhlYWRlcl9sZW4pOwotCi0JCS8qIHNraXAgSFcgcGFkZGluZyAqLwotCQlpZiAocFJ4QmxrLT5SeEQuTDJQQUQpCi0JCQlwUnhCbGstPnBEYXRhICs9IChoZWFkZXJfbGVuICsgMik7Ci0JCWVsc2UKLQkJCXBSeEJsay0+cERhdGEgKz0gaGVhZGVyX2xlbjsKLQl9CQkJLyplbmQgaWYgKi8KLQotCWlmIChwUnhCbGstPkRhdGFTaXplIDwgcE9TUGt0LT5sZW4pIHsKLQkJc2tiX3RyaW0ocE9TUGt0LCBwUnhCbGstPkRhdGFTaXplKTsKLQl9IGVsc2UgewotCQlza2JfcHV0KHBPU1BrdCwgKHBSeEJsay0+RGF0YVNpemUgLSBwT1NQa3QtPmxlbikpOwotCX0JCQkvKmVuZCBpZiAqLwotCi0JaWYgKChwUnhCbGstPnBEYXRhIC0gcE9TUGt0LT5kYXRhKSA+IDApIHsKLQkJc2tiX3B1dChwT1NQa3QsIChwUnhCbGstPnBEYXRhIC0gcE9TUGt0LT5kYXRhKSk7Ci0JCXNrYl9wdWxsKHBPU1BrdCwgKHBSeEJsay0+cERhdGEgLSBwT1NQa3QtPmRhdGEpKTsKLQl9CQkJLyplbmQgaWYgKi8KLQotCWlmIChza2JfaGVhZHJvb20ocE9TUGt0KSA8IChzaXplb2Yoc3RydWN0IHJ0X3dsYW5fbmdfcHJpc20yX2hlYWRlcikgKyBoZWFkZXJfbGVuKSkgewotCQlpZiAocHNrYl9leHBhbmRfaGVhZAotCQkgICAgKHBPU1BrdCwgKHNpemVvZihzdHJ1Y3QgcnRfd2xhbl9uZ19wcmlzbTJfaGVhZGVyKSArIGhlYWRlcl9sZW4pLCAwLAotCQkgICAgIEdGUF9BVE9NSUMpKSB7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCQkgKCIlcyA6IFJlYWxsb2NhdGUgaGVhZGVyIHNpemUgb2Ygc2tfYnVmZiBmYWlsIVxuIiwKLQkJCQkgIF9fZnVuY19fKSk7Ci0JCQlnb3RvIGVycl9mcmVlX3NrX2J1ZmY7Ci0JCX0JCS8qZW5kIGlmICovCi0JfQkJCS8qZW5kIGlmICovCi0KLQlpZiAoaGVhZGVyX2xlbiA+IDApCi0JCU5kaXNNb3ZlTWVtb3J5KHNrYl9wdXNoKHBPU1BrdCwgaGVhZGVyX2xlbiksIHRlbXBfaGVhZGVyLAotCQkJICAgICAgIGhlYWRlcl9sZW4pOwotCi0JcGggPSAoc3RydWN0IHJ0X3dsYW5fbmdfcHJpc20yX2hlYWRlciAqKXNrYl9wdXNoKHBPU1BrdCwKLQkJCQkJCXNpemVvZihzdHJ1Y3QgcnRfd2xhbl9uZ19wcmlzbTJfaGVhZGVyKSk7Ci0JTmRpc1plcm9NZW1vcnkocGgsIHNpemVvZihzdHJ1Y3QgcnRfd2xhbl9uZ19wcmlzbTJfaGVhZGVyKSk7Ci0KLQlwaC0+bXNnY29kZSA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm07Ci0JcGgtPm1zZ2xlbiA9IHNpemVvZihzdHJ1Y3QgcnRfd2xhbl9uZ19wcmlzbTJfaGVhZGVyKTsKLQlzdHJjcHkoKGNoYXIgKilwaC0+ZGV2bmFtZSwgKGNoYXIgKilwQWQtPm5ldF9kZXYtPm5hbWUpOwotCi0JcGgtPmhvc3R0aW1lLmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1faG9zdHRpbWU7Ci0JcGgtPmhvc3R0aW1lLnN0YXR1cyA9IDA7Ci0JcGgtPmhvc3R0aW1lLmxlbiA9IDQ7Ci0JcGgtPmhvc3R0aW1lLmRhdGEgPSBqaWZmaWVzOwotCi0JcGgtPm1hY3RpbWUuZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9tYWN0aW1lOwotCXBoLT5tYWN0aW1lLnN0YXR1cyA9IDA7Ci0JcGgtPm1hY3RpbWUubGVuID0gMDsKLQlwaC0+bWFjdGltZS5kYXRhID0gMDsKLQotCXBoLT5pc3R4LmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1faXN0eDsKLQlwaC0+aXN0eC5zdGF0dXMgPSAwOwotCXBoLT5pc3R4LmxlbiA9IDA7Ci0JcGgtPmlzdHguZGF0YSA9IDA7Ci0KLQlwaC0+Y2hhbm5lbC5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX2NoYW5uZWw7Ci0JcGgtPmNoYW5uZWwuc3RhdHVzID0gMDsKLQlwaC0+Y2hhbm5lbC5sZW4gPSA0OwotCi0JcGgtPmNoYW5uZWwuZGF0YSA9ICh1X2ludDMyX3QpIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWw7Ci0KLQlwaC0+cnNzaS5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3Jzc2k7Ci0JcGgtPnJzc2kuc3RhdHVzID0gMDsKLQlwaC0+cnNzaS5sZW4gPSA0OwotCXBoLT5yc3NpLmRhdGEgPQotCSAgICAodV9pbnQzMl90KSBSVE1QTWF4UnNzaShwQWQsCi0JCQkJICAgIENvbnZlcnRUb1Jzc2kocEFkLCBwUnhCbGstPnBSeFdJLT5SU1NJMCwKLQkJCQkJCSAgUlNTSV8wKSwgQ29udmVydFRvUnNzaShwQWQsCi0JCQkJCQkJCQkgcFJ4QmxrLT4KLQkJCQkJCQkJCSBwUnhXSS0+Ci0JCQkJCQkJCQkgUlNTSTEsCi0JCQkJCQkJCQkgUlNTSV8xKSwKLQkJCQkgICAgQ29udmVydFRvUnNzaShwQWQsIHBSeEJsay0+cFJ4V0ktPlJTU0kyLAotCQkJCQkJICBSU1NJXzIpKTsKLQotCXBoLT5zaWduYWwuZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9zaWduYWw7Ci0JcGgtPnNpZ25hbC5zdGF0dXMgPSAwOwotCXBoLT5zaWduYWwubGVuID0gNDsKLQlwaC0+c2lnbmFsLmRhdGEgPSAwOwkvKnJzc2kgKyBub2lzZTsgKi8KLQotCXBoLT5ub2lzZS5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX25vaXNlOwotCXBoLT5ub2lzZS5zdGF0dXMgPSAwOwotCXBoLT5ub2lzZS5sZW4gPSA0OwotCXBoLT5ub2lzZS5kYXRhID0gMDsKLQotCWlmIChwUnhCbGstPnBSeFdJLT5QSFlNT0RFID49IE1PREVfSFRNSVgpIHsKLQkJcmF0ZV9pbmRleCA9Ci0JCSAgICAxNiArICgodTgpcFJ4QmxrLT5wUnhXSS0+QlcgKiAxNikgKwotCQkgICAgKCh1OClwUnhCbGstPnBSeFdJLT5TaG9ydEdJICogMzIpICsKLQkJICAgICgodTgpcFJ4QmxrLT5wUnhXSS0+TUNTKTsKLQl9IGVsc2UgaWYgKHBSeEJsay0+cFJ4V0ktPlBIWU1PREUgPT0gTU9ERV9PRkRNKQotCQlyYXRlX2luZGV4ID0gKHU4KShwUnhCbGstPnBSeFdJLT5NQ1MpICsgNDsKLQllbHNlCi0JCXJhdGVfaW5kZXggPSAodTgpKHBSeEJsay0+cFJ4V0ktPk1DUyk7Ci0JaWYgKHJhdGVfaW5kZXggPCAwKQotCQlyYXRlX2luZGV4ID0gMDsKLQlpZiAocmF0ZV9pbmRleCA+IDI1NSkKLQkJcmF0ZV9pbmRleCA9IDI1NTsKLQotCXBoLT5yYXRlLmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fcmF0ZTsKLQlwaC0+cmF0ZS5zdGF0dXMgPSAwOwotCXBoLT5yYXRlLmxlbiA9IDQ7Ci0JcGgtPnJhdGUuZGF0YSA9IHJhbGlua3JhdGVbcmF0ZV9pbmRleF07Ci0KLQlwaC0+ZnJtbGVuLmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fZnJtbGVuOwotCXBoLT5mcm1sZW4uc3RhdHVzID0gMDsKLQlwaC0+ZnJtbGVuLmxlbiA9IDQ7Ci0JcGgtPmZybWxlbi5kYXRhID0gKHVfaW50MzJfdCkgcFJ4QmxrLT5EYXRhU2l6ZTsKLQotCXBPU1BrdC0+cGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUOwotCXBPU1BrdC0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhwT1NQa3QsIHBPU1BrdC0+ZGV2KTsKLQlwT1NQa3QtPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7Ci0JbmV0aWZfcngocE9TUGt0KTsKLQotCXJldHVybjsKLQotZXJyX2ZyZWVfc2tfYnVmZjoKLQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4QmxrLT5wUnhQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOwotCXJldHVybjsKLQotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0JRGV2aWNlIElSUSByZWxhdGVkIGZ1bmN0aW9ucy4KLQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQgUnRtcE9TSVJRUmVxdWVzdChzdHJ1Y3QgbmV0X2RldmljZSAqcE5ldERldikKLXsKLSNpZmRlZiBSVE1QX1BDSV9TVVBQT1JUCi0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSBwTmV0RGV2OwotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCA9IE5VTEw7Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQlHRVRfUEFEX0ZST01fTkVUX0RFVihwQWQsIHBOZXREZXYpOwotCi0JQVNTRVJUKHBBZCk7Ci0KLQlpZiAocEFkLT5pbmZUeXBlID09IFJUTVBfREVWX0lORl9QQ0kpIHsKLQkJc3RydWN0IG9zX2Nvb2tpZSAqX3BPYmogPSAoc3RydWN0IG9zX2Nvb2tpZSAqKShwQWQtPk9TX0Nvb2tpZSk7Ci0JCVJUTVBfTVNJX0VOQUJMRShwQWQpOwotCQlyZXR2YWwgPQotCQkgICAgcmVxdWVzdF9pcnEoX3BPYmotPnBjaV9kZXYtPmlycSwgcnQyODYwX2ludGVycnVwdCwgU0FfU0hJUlEsCi0JCQkJKG5ldF9kZXYpLT5uYW1lLCAobmV0X2RldikpOwotCQlpZiAocmV0dmFsICE9IDApCi0JCQlwcmludGsoS0VSTl9FUlIgInJ0Mjg2MDogcmVxdWVzdF9pcnEgIEVSUk9SKCVkKVxuIiwgcmV0dmFsKTsKLQl9Ci0KLQlyZXR1cm4gcmV0dmFsOwotI2Vsc2UKLQlyZXR1cm4gMDsKLSNlbmRpZgotfQotCi1pbnQgUnRtcE9TSVJRUmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZSAqcE5ldERldikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IHBOZXREZXY7Ci0Jc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkID0gTlVMTDsKLQotCUdFVF9QQURfRlJPTV9ORVRfREVWKHBBZCwgbmV0X2Rldik7Ci0KLQlBU1NFUlQocEFkKTsKLQotI2lmZGVmIFJUTVBfUENJX1NVUFBPUlQKLQlpZiAocEFkLT5pbmZUeXBlID09IFJUTVBfREVWX0lORl9QQ0kpIHsKLQkJc3RydWN0IG9zX2Nvb2tpZSAqcE9iaiA9IChzdHJ1Y3Qgb3NfY29va2llICopKHBBZC0+T1NfQ29va2llKTsKLQkJc3luY2hyb25pemVfaXJxKHBPYmotPnBjaV9kZXYtPmlycSk7Ci0JCWZyZWVfaXJxKHBPYmotPnBjaV9kZXYtPmlycSwgKG5ldF9kZXYpKTsKLQkJUlRNUF9NU0lfRElTQUJMRShwQWQpOwotCX0KLSNlbmRpZiAvKiBSVE1QX1BDSV9TVVBQT1JUIC8vICovCi0KLQlyZXR1cm4gMDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotCUZpbGUgb3Blbi9jbG9zZSByZWxhdGVkIGZ1bmN0aW9ucy4KLQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdHJ1Y3QgZmlsZSAqUnRtcE9TRmlsZU9wZW4oY2hhciAqcFBhdGgsIGludCBmbGFnLCBpbnQgbW9kZSkKLXsKLQlzdHJ1Y3QgZmlsZSAqZmlsZVB0cjsKLQotCWZpbGVQdHIgPSBmaWxwX29wZW4ocFBhdGgsIGZsYWcsIDApOwotCWlmIChJU19FUlIoZmlsZVB0cikpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkgKCIlcygpOiBFcnJvciAlbGQgb3BlbmluZyAlc1xuIiwgX19mdW5jX18sCi0JCQkgIC1QVFJfRVJSKGZpbGVQdHIpLCBwUGF0aCkpOwotCX0KLQotCXJldHVybiAoc3RydWN0IGZpbGUgKilmaWxlUHRyOwotfQotCi1pbnQgUnRtcE9TRmlsZUNsb3NlKHN0cnVjdCBmaWxlICpvc2ZkKQotewotCWZpbHBfY2xvc2Uob3NmZCwgTlVMTCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgUnRtcE9TRmlsZVNlZWsoc3RydWN0IGZpbGUgKm9zZmQsIGludCBvZmZzZXQpCi17Ci0Jb3NmZC0+Zl9wb3MgPSBvZmZzZXQ7Ci19Ci0KLWludCBSdG1wT1NGaWxlUmVhZChzdHJ1Y3QgZmlsZSAqb3NmZCwgY2hhciAqcERhdGFQdHIsIGludCByZWFkTGVuKQotewotCS8qIFRoZSBvYmplY3QgbXVzdCBoYXZlIGEgcmVhZCBtZXRob2QgKi8KLQlpZiAob3NmZC0+Zl9vcCAmJiBvc2ZkLT5mX29wLT5yZWFkKSB7Ci0JCXJldHVybiBvc2ZkLT5mX29wLT5yZWFkKG9zZmQsIHBEYXRhUHRyLCByZWFkTGVuLCAmb3NmZC0+Zl9wb3MpOwotCX0gZWxzZSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIm5vIGZpbGUgcmVhZCBtZXRob2RcbiIpKTsKLQkJcmV0dXJuIC0xOwotCX0KLX0KLQotaW50IFJ0bXBPU0ZpbGVXcml0ZShzdHJ1Y3QgZmlsZSAqb3NmZCwgY2hhciAqcERhdGFQdHIsIGludCB3cml0ZUxlbikKLXsKLQlyZXR1cm4gb3NmZC0+Zl9vcC0+d3JpdGUob3NmZCwgcERhdGFQdHIsIChzaXplX3QpIHdyaXRlTGVuLAotCQkJCSAmb3NmZC0+Zl9wb3MpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0JVGFzayBjcmVhdGUvbWFuYWdlbWVudC9raWxsIHJlbGF0ZWQgZnVuY3Rpb25zLgotCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludCBSdG1wT1NUYXNrS2lsbChzdHJ1Y3QgcnRfcnRtcF9vc190YXNrICpwVGFzaykKLXsKLQlzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQ7Ci0JaW50IHJldCA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7Ci0KLQlwQWQgPSBwVGFzay0+cHJpdjsKLQotI2lmZGVmIEtUSFJFQURfU1VQUE9SVAotCWlmIChwVGFzay0+a3RocmVhZF90YXNrKSB7Ci0JCWt0aHJlYWRfc3RvcChwVGFzay0+a3RocmVhZF90YXNrKTsKLQkJcmV0ID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKLQl9Ci0jZWxzZQotCUNIRUNLX1BJRF9MRUdBTElUWShwVGFzay0+dGFza1BJRCkgewotCQlwcmludGsoS0VSTl9JTkZPICJUZXJtaW5hdGUgdGhlIHRhc2soJXMpIHdpdGggcGlkKCVkKSFcbiIsCi0JCSAgICAgICBwVGFzay0+dGFza05hbWUsIEdFVF9QSURfTlVNQkVSKHBUYXNrLT50YXNrUElEKSk7Ci0JCW1iKCk7Ci0JCXBUYXNrLT50YXNrX2tpbGxlZCA9IDE7Ci0JCW1iKCk7Ci0JCXJldCA9IEtJTExfVEhSRUFEX1BJRChwVGFzay0+dGFza1BJRCwgU0lHVEVSTSwgMSk7Ci0JCWlmIChyZXQpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAgICAia2lsbCB0YXNrKCVzKSB3aXRoIHBpZCglZCkgZmFpbGVkKHJldFZhbD0lZCkhXG4iLAotCQkJICAgICAgIHBUYXNrLT50YXNrTmFtZSwgR0VUX1BJRF9OVU1CRVIocFRhc2stPnRhc2tQSUQpLAotCQkJICAgICAgIHJldCk7Ci0JCX0gZWxzZSB7Ci0JCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZwVGFzay0+dGFza0NvbXBsZXRlKTsKLQkJCXBUYXNrLT50YXNrUElEID0gVEhSRUFEX1BJRF9JTklUX1ZBTFVFOwotCQkJcFRhc2stPnRhc2tfa2lsbGVkID0gMDsKLQkJCXJldCA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7Ci0JCX0KLQl9Ci0jZW5kaWYKLQotCXJldHVybiByZXQ7Ci0KLX0KLQotaW50IFJ0bXBPU1Rhc2tOb3RpZnlUb0V4aXQoc3RydWN0IHJ0X3J0bXBfb3NfdGFzayAqcFRhc2spCi17Ci0KLSNpZm5kZWYgS1RIUkVBRF9TVVBQT1JUCi0JY29tcGxldGVfYW5kX2V4aXQoJnBUYXNrLT50YXNrQ29tcGxldGUsIDApOwotI2VuZGlmCi0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBSdG1wT1NUYXNrQ3VzdG9taXplKHN0cnVjdCBydF9ydG1wX29zX3Rhc2sgKnBUYXNrKQotewotCi0jaWZuZGVmIEtUSFJFQURfU1VQUE9SVAotCi0JZGFlbW9uaXplKChjaGFyICopJnBUYXNrLT50YXNrTmFtZVswXSAvKiIlcyIscEFkLT5uZXRfZGV2LT5uYW1lICovKTsKLQotCWFsbG93X3NpZ25hbChTSUdURVJNKTsKLQlhbGxvd19zaWduYWwoU0lHS0lMTCk7Ci0JY3VycmVudC0+ZmxhZ3MgfD0gUEZfTk9GUkVFWkU7Ci0KLQkvKiBzaWduYWwgdGhhdCB3ZSd2ZSBzdGFydGVkIHRoZSB0aHJlYWQgKi8KLQljb21wbGV0ZSgmcFRhc2stPnRhc2tDb21wbGV0ZSk7Ci0KLSNlbmRpZgotfQotCi1pbnQgUnRtcE9TVGFza0F0dGFjaChzdHJ1Y3QgcnRfcnRtcF9vc190YXNrICpwVGFzaywKLQkJCSAgICAgSU4gaW50ICgqZm4pICh2b2lkICopLCBJTiB2b2lkICphcmcpCi17Ci0JaW50IHN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7Ci0KLSNpZmRlZiBLVEhSRUFEX1NVUFBPUlQKLQlwVGFzay0+dGFza19raWxsZWQgPSAwOwotCXBUYXNrLT5rdGhyZWFkX3Rhc2sgPSBOVUxMOwotCXBUYXNrLT5rdGhyZWFkX3Rhc2sgPSBrdGhyZWFkX3J1bihmbiwgYXJnLCBwVGFzay0+dGFza05hbWUpOwotCWlmIChJU19FUlIocFRhc2stPmt0aHJlYWRfdGFzaykpCi0JCXN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7Ci0jZWxzZQotCXBpZF9udW1iZXIgPSBrZXJuZWxfdGhyZWFkKGZuLCBhcmcsIFJUTVBfT1NfTUdNVF9UQVNLX0ZMQUdTKTsKLQlpZiAocGlkX251bWJlciA8IDApIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkgKCJBdHRhY2ggdGFzayglcykgZmFpbGVkIVxuIiwgcFRhc2stPnRhc2tOYW1lKSk7Ci0JCXN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7Ci0JfSBlbHNlIHsKLQkJcFRhc2stPnRhc2tQSUQgPSBHRVRfUElEKHBpZF9udW1iZXIpOwotCi0JCS8qIFdhaXQgZm9yIHRoZSB0aHJlYWQgdG8gc3RhcnQgKi8KLQkJd2FpdF9mb3JfY29tcGxldGlvbigmcFRhc2stPnRhc2tDb21wbGV0ZSk7Ci0JCXN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7Ci0JfQotI2VuZGlmCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotaW50IFJ0bXBPU1Rhc2tJbml0KHN0cnVjdCBydF9ydG1wX29zX3Rhc2sgKnBUYXNrLAotCQkJICAgY2hhciAqcFRhc2tOYW1lLCB2b2lkICogcFByaXYpCi17Ci0JaW50IGxlbjsKLQotCUFTU0VSVChwVGFzayk7Ci0KLSNpZm5kZWYgS1RIUkVBRF9TVVBQT1JUCi0JTmRpc1plcm9NZW1vcnkoKHU4ICopKHBUYXNrKSwgc2l6ZW9mKHN0cnVjdCBydF9ydG1wX29zX3Rhc2spKTsKLSNlbmRpZgotCi0JbGVuID0gc3RybGVuKHBUYXNrTmFtZSk7Ci0JbGVuID0KLQkgICAgbGVuID4KLQkgICAgKFJUTVBfT1NfVEFTS19OQU1FX0xFTiAtIDEpID8gKFJUTVBfT1NfVEFTS19OQU1FX0xFTiAtIDEpIDogbGVuOwotCU5kaXNNb3ZlTWVtb3J5KCZwVGFzay0+dGFza05hbWVbMF0sIHBUYXNrTmFtZSwgbGVuKTsKLQlwVGFzay0+cHJpdiA9IHBQcml2OwotCi0jaWZuZGVmIEtUSFJFQURfU1VQUE9SVAotCVJUTVBfU0VNX0VWRU5UX0lOSVRfTE9DS0VEKCYocFRhc2stPnRhc2tTZW1hKSk7Ci0JcFRhc2stPnRhc2tQSUQgPSBUSFJFQURfUElEX0lOSVRfVkFMVUU7Ci0KLQlpbml0X2NvbXBsZXRpb24oJnBUYXNrLT50YXNrQ29tcGxldGUpOwotI2VuZGlmCi0KLQlyZXR1cm4gTkRJU19TVEFUVVNfU1VDQ0VTUzsKLX0KLQotdm9pZCBSVE1QX0luZGljYXRlTWVkaWFTdGF0ZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0JaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50KSB7Ci0JCWlmIChwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSA9PSBOZGlzTWVkaWFTdGF0ZUNvbm5lY3RlZCkgewotCQkJUlRNUFNlbmRXaXJlbGVzc0V2ZW50KHBBZCwgSVdfU1RBX0xJTktVUF9FVkVOVF9GTEFHLAotCQkJCQkgICAgICBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLgotCQkJCQkgICAgICBBZGRyLCBCU1MwLCAwKTsKLQkJfSBlbHNlIHsKLQkJCVJUTVBTZW5kV2lyZWxlc3NFdmVudChwQWQsIElXX1NUQV9MSU5LRE9XTl9FVkVOVF9GTEFHLAotCQkJCQkgICAgICBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLgotCQkJCQkgICAgICBBZGRyLCBCU1MwLCAwKTsKLQkJfQotCX0KLX0KLQotaW50IFJ0bXBPU1dyaWVsZXNzRXZlbnRTZW5kKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICB1MzIgZXZlbnRUeXBlLAotCQkJICAgIGludCBmbGFncywKLQkJCSAgICB1OCAqcFNyY01hYywKLQkJCSAgICB1OCAqcERhdGEsIHUzMiBkYXRhTGVuKQotewotCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKLQotCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKLQotCWlmIChmbGFncyA+IC0xKQotCQl3cnF1LmRhdGEuZmxhZ3MgPSBmbGFnczsKLQotCWlmIChwU3JjTWFjKQotCQltZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIHBTcmNNYWMsIE1BQ19BRERSX0xFTik7Ci0KLQlpZiAoKHBEYXRhICE9IE5VTEwpICYmIChkYXRhTGVuID4gMCkpCi0JCXdycXUuZGF0YS5sZW5ndGggPSBkYXRhTGVuOwotCi0Jd2lyZWxlc3Nfc2VuZF9ldmVudChwQWQtPm5ldF9kZXYsIGV2ZW50VHlwZSwgJndycXUsIChjaGFyICopcERhdGEpOwotCXJldHVybiAwOwotfQotCi1pbnQgUnRtcE9TTmV0RGV2QWRkclNldChzdHJ1Y3QgbmV0X2RldmljZSAqcE5ldERldiwgdTggKnBNYWNBZGRyKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2OwotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZDsKLQotCW5ldF9kZXYgPSBwTmV0RGV2OwotCUdFVF9QQURfRlJPTV9ORVRfREVWKHBBZCwgbmV0X2Rldik7Ci0KLQkvKiB3b3JrLWFyb3VuZCBmb3IgU3VTRSwgZHVlIHRvIHRoZW0gaGF2aW5nIHRoZWlyIG93biBpbnRlcmZhY2UgbmFtZSBtYW5hZ2VtZW50IHN5c3RlbS4gKi8KLQl7Ci0JCU5kaXNaZXJvTWVtb3J5KHBBZC0+U3RhQ2ZnLmRldl9uYW1lLCAxNik7Ci0JCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLmRldl9uYW1lLCBuZXRfZGV2LT5uYW1lLAotCQkJICAgICAgIHN0cmxlbihuZXRfZGV2LT5uYW1lKSk7Ci0JfQotCi0JTmRpc01vdmVNZW1vcnkobmV0X2Rldi0+ZGV2X2FkZHIsIHBNYWNBZGRyLCA2KTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICAqCUFzc2lnbiB0aGUgbmV0d29yayBkZXYgbmFtZSBmb3IgY3JlYXRlZCBSYWxpbmsgV2lGaSBpbnRlcmZhY2UuCi0gICovCi1zdGF0aWMgaW50IFJ0bXBPU05ldERldlJlcXVlc3ROYW1lKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgIGNoYXIgKnBQcmVmaXhTdHIsIGludCBkZXZJZHgpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmV4aXN0TmV0RGV2OwotCWNoYXIgc3VmZml4TmFtZVtJRk5BTVNJWl07Ci0JY2hhciBkZXNpcmVkTmFtZVtJRk5BTVNJWl07Ci0JaW50IGlmTmFtZUlkeCwgcHJlZml4TGVuLCBzbG90TmFtZUxlbjsKLQlpbnQgU3RhdHVzOwotCi0JcHJlZml4TGVuID0gc3RybGVuKHBQcmVmaXhTdHIpOwotCUFTU0VSVCgocHJlZml4TGVuIDwgSUZOQU1TSVopKTsKLQotCWZvciAoaWZOYW1lSWR4ID0gZGV2SWR4OyBpZk5hbWVJZHggPCAzMjsgaWZOYW1lSWR4KyspIHsKLQkJbWVtc2V0KHN1ZmZpeE5hbWUsIDAsIElGTkFNU0laKTsKLQkJbWVtc2V0KGRlc2lyZWROYW1lLCAwLCBJRk5BTVNJWik7Ci0JCXN0cm5jcHkoJmRlc2lyZWROYW1lWzBdLCBwUHJlZml4U3RyLCBwcmVmaXhMZW4pOwotCi0JCXNwcmludGYoc3VmZml4TmFtZSwgIiVkIiwgaWZOYW1lSWR4KTsKLQotCQlzbG90TmFtZUxlbiA9IHN0cmxlbihzdWZmaXhOYW1lKTsKLQkJQVNTRVJUKCgoc2xvdE5hbWVMZW4gKyBwcmVmaXhMZW4pIDwgSUZOQU1TSVopKTsKLQkJc3RyY2F0KGRlc2lyZWROYW1lLCBzdWZmaXhOYW1lKTsKLQotCQlleGlzdE5ldERldiA9IFJ0bXBPU05ldERldkdldEJ5TmFtZShkZXYsICZkZXNpcmVkTmFtZVswXSk7Ci0JCWlmIChleGlzdE5ldERldiA9PSBOVUxMKQotCQkJYnJlYWs7Ci0JCWVsc2UKLQkJCVJ0bXBPU05ldERldmljZVJlZlB1dChleGlzdE5ldERldik7Ci0JfQotCi0JaWYgKGlmTmFtZUlkeCA8IDMyKSB7Ci0JCXN0cmNweSgmZGV2LT5uYW1lWzBdLCAmZGVzaXJlZE5hbWVbMF0pOwotCQlTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOwotCX0gZWxzZSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJICgiQ2Fubm90IHJlcXVlc3QgRGV2TmFtZSB3aXRoIHByZWlmeCglcykgYW5kIGluIHJhbmdlKDB+MzIpIGFzIHN1ZmZpeCBmcm9tIE9TIVxuIiwKLQkJCSAgcFByZWZpeFN0cikpOwotCQlTdGF0dXMgPSBORElTX1NUQVRVU19GQUlMVVJFOwotCX0KLQotCXJldHVybiBTdGF0dXM7Ci19Ci0KLXZvaWQgUnRtcE9TTmV0RGV2Q2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKnBOZXREZXYpCi17Ci0JZGV2X2Nsb3NlKHBOZXREZXYpOwotfQotCi12b2lkIFJ0bXBPU05ldERldkZyZWUoc3RydWN0IG5ldF9kZXZpY2UgKnBOZXREZXYpCi17Ci0JQVNTRVJUKHBOZXREZXYpOwotCi0JZnJlZV9uZXRkZXYocE5ldERldik7Ci19Ci0KLWludCBSdG1wT1NOZXREZXZBbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqKm5ld19kZXZfcCwgdTMyIHByaXZEYXRhU2l6ZSkKLXsKLQkvKiBhc3NpZ24gaXQgYXMgbnVsbCBmaXJzdC4gKi8KLQkqbmV3X2Rldl9wID0gTlVMTDsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCJBbGxvY2F0ZSBhIG5ldCBkZXZpY2Ugd2l0aCBwcml2YXRlIGRhdGEgc2l6ZT0lZCFcbiIsCi0JCSAgcHJpdkRhdGFTaXplKSk7Ci0JKm5ld19kZXZfcCA9IGFsbG9jX2V0aGVyZGV2KHByaXZEYXRhU2l6ZSk7Ci0JaWYgKCpuZXdfZGV2X3ApCi0JCXJldHVybiBORElTX1NUQVRVU19TVUNDRVNTOwotCWVsc2UKLQkJcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7Ci19Ci0KLXN0cnVjdCBuZXRfZGV2aWNlICpSdG1wT1NOZXREZXZHZXRCeU5hbWUoc3RydWN0IG5ldF9kZXZpY2UgKnBOZXREZXYsIGNoYXIgKnBEZXZOYW1lKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpwVGFyZ2V0TmV0RGV2ID0gTlVMTDsKLQotCXBUYXJnZXROZXREZXYgPSBkZXZfZ2V0X2J5X25hbWUoZGV2X25ldChwTmV0RGV2KSwgcERldk5hbWUpOwotCi0JcmV0dXJuIHBUYXJnZXROZXREZXY7Ci19Ci0KLXZvaWQgUnRtcE9TTmV0RGV2aWNlUmVmUHV0KHN0cnVjdCBuZXRfZGV2aWNlICpwTmV0RGV2KQotewotCS8qCi0JICAgZXZlcnkgdGltZSBkZXZfZ2V0X2J5X25hbWUgaXMgY2FsbGVkLCBhbmQgaXQgaGFzIHJldHVybmVkIGEgdmFsaWQgc3RydWN0Ci0JICAgbmV0X2RldmljZSosIGRldl9wdXQgc2hvdWxkIGJlIGNhbGxlZCBhZnRlcndhcmRzLCBiZWNhdXNlIG90aGVyd2lzZSB0aGUKLQkgICBtYWNoaW5lIGhhbmdzIHdoZW4gdGhlIGRldmljZSBpcyB1bnJlZ2lzdGVyZWQgKHNpbmNlIGRldi0+cmVmY250ID4gMSkuCi0JICovCi0JaWYgKHBOZXREZXYpCi0JCWRldl9wdXQocE5ldERldik7Ci19Ci0KLWludCBSdG1wT1NOZXREZXZEZXN0b3J5KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IG5ldF9kZXZpY2UgKnBOZXREZXYpCi17Ci0KLQkvKiBUT0RPOiBOZWVkIHRvIGZpeCB0aGlzICovCi0JcHJpbnRrKCJXQVJOSU5HOiBUaGlzIGZ1bmN0aW9uKCVzKSBub3QgaW1wbGVtZW50IHlldCFcbiIsIF9fZnVuY19fKTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBSdG1wT1NOZXREZXZEZXRhY2goc3RydWN0IG5ldF9kZXZpY2UgKnBOZXREZXYpCi17Ci0JdW5yZWdpc3Rlcl9uZXRkZXYocE5ldERldik7Ci19Ci0KLWludCBSdG1wT1NOZXREZXZBdHRhY2goc3RydWN0IG5ldF9kZXZpY2UgKnBOZXREZXYsCi0JCSAgICAgICBzdHJ1Y3QgcnRfcnRtcF9vc19uZXRkZXZfb3BfaG9vayAqcERldk9wSG9vaykKLXsKLQlpbnQgcmV0LCBydG5sX2xvY2tlZCA9IEZBTFNFOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUnRtcE9TTmV0RGV2QXR0YWNoKCktLS0+XG4iKSk7Ci0JLyogSWYgd2UgbmVlZCBob29rIHNvbWUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGhlIG5ldCBkZXZpY2Ugc3RydWN0dXJlLCBub3cgZG8gaXQuICovCi0JaWYgKHBEZXZPcEhvb2spIHsKLQkJc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkID0gTlVMTDsKLQotCQlHRVRfUEFEX0ZST01fTkVUX0RFVihwQWQsIHBOZXREZXYpOwotCi0JCXBOZXREZXYtPm5ldGRldl9vcHMgPSBwRGV2T3BIb29rLT5uZXRkZXZfb3BzOwotCi0JCS8qIE9TIHNwZWNpZmljIGZsYWdzLCBoZXJlIHdlIHVzZWQgdG8gaW5kaWNhdGUgaWYgd2UgYXJlIHZpcnR1YWwgaW50ZXJmYWNlICovCi0JCXBOZXREZXYtPnByaXZfZmxhZ3MgPSBwRGV2T3BIb29rLT5wcml2X2ZsYWdzOwotCi0JCWlmIChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKQotCQkJcE5ldERldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmcnQyOHh4X2l3X2hhbmRsZXJfZGVmOwotCi0JCS8qIGNvcHkgdGhlIG5ldCBkZXZpY2UgbWFjIGFkZHJlc3MgdG8gdGhlIG5ldF9kZXZpY2Ugc3RydWN0dXJlLiAqLwotCQlOZGlzTW92ZU1lbW9yeShwTmV0RGV2LT5kZXZfYWRkciwgJnBEZXZPcEhvb2stPmRldkFkZHJbMF0sCi0JCQkgICAgICAgTUFDX0FERFJfTEVOKTsKLQotCQlydG5sX2xvY2tlZCA9IHBEZXZPcEhvb2stPm5lZWRQcm90Y3RlZDsKLQl9Ci0KLQlpZiAocnRubF9sb2NrZWQpCi0JCXJldCA9IHJlZ2lzdGVyX25ldGRldmljZShwTmV0RGV2KTsKLQllbHNlCi0JCXJldCA9IHJlZ2lzdGVyX25ldGRldihwTmV0RGV2KTsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLS1SdG1wT1NOZXREZXZBdHRhY2goKSwgcmV0PSVkXG4iLCByZXQpKTsKLQlpZiAocmV0ID09IDApCi0JCXJldHVybiBORElTX1NUQVRVU19TVUNDRVNTOwotCWVsc2UKLQkJcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7Ci19Ci0KLXN0cnVjdCBuZXRfZGV2aWNlICpSdG1wT1NOZXREZXZDcmVhdGUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgIGludCBkZXZUeXBlLAotCQkJICAgIGludCBkZXZOdW0sCi0JCQkgICAgaW50IHByaXZNZW1TaXplLCBjaGFyICpwTmFtZVByZWZpeCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqcE5ldERldiA9IE5VTEw7Ci0JaW50IHN0YXR1czsKLQotCS8qIGFsbG9jYXRlIGEgbmV3IG5ldHdvcmsgZGV2aWNlICovCi0Jc3RhdHVzID0gUnRtcE9TTmV0RGV2QWxsb2MoJnBOZXREZXYsIDAgLypwcml2TWVtU2l6ZSAqLyk7Ci0JaWYgKHN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKSB7Ci0JCS8qIGFsbG9jYXRpb24gZmFpbCwgZXhpdCAqLwotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCSAoIkFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlIGZhaWwgKCVzKS4uLlxuIiwKLQkJCSAgcE5hbWVQcmVmaXgpKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JLyogZmluZCBhbiBhdmFpbGFibGUgaW50ZXJmYWNlIG5hbWUsIG1heCAzMiBpbnRlcmZhY2VzICovCi0Jc3RhdHVzID0gUnRtcE9TTmV0RGV2UmVxdWVzdE5hbWUocEFkLCBwTmV0RGV2LCBwTmFtZVByZWZpeCwgZGV2TnVtKTsKLQlpZiAoc3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpIHsKLQkJLyogZXJyb3IhIG5vIGF2YWlsYWJsZSByYSBuYW1lIGNhbiBiZSB1c2VkISAqLwotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCSAoIkFzc2lnbiBpbnRlcmZhY2UgbmFtZSAoJXMgd2l0aCBzdWZmaXggMH4zMikgZmFpbGVkLi4uXG4iLAotCQkJICBwTmFtZVByZWZpeCkpOwotCQlSdG1wT1NOZXREZXZGcmVlKHBOZXREZXYpOwotCi0JCXJldHVybiBOVUxMOwotCX0gZWxzZSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiVGhlIG5hbWUgb2YgdGhlIG5ldyAlcyBpbnRlcmZhY2UgaXMgJXMuLi5cbiIsCi0JCQkgIHBOYW1lUHJlZml4LCBwTmV0RGV2LT5uYW1lKSk7Ci0JfQotCi0JcmV0dXJuIHBOZXREZXY7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2xpbnV4LmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2xpbnV4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlZmI4OGYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9saW51eC5oCisrKyAvZGV2L251bGwKQEAgLTEsODM1ICswLDAgQEAKLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUmFsaW5rIFRlY2ggSW5jLgotICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAotICogSHNpbmNodSBDb3VudHkgMzAyLAotICogVGFpd2FuLCBSLk8uQy4KLSAqCi0gKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0gICAgTW9kdWxlIE5hbWU6Ci0JcnRfbGludXguaAotCi0gICAgQWJzdHJhY3Q6Ci0KLSAgICBSZXZpc2lvbiBIaXN0b3J5OgotICAgIFdobyAgICAgICAgICAJV2hlbiAgICAgICAgIAlXaGF0Ci0gICAgSnVzdGluIFAuIE1hdHRvY2sJMTEvMDcvMjAxMCAJRml4IHR5cG8gaW4gYSBjb21tZW50Ci0gICAgLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQotI2lmbmRlZiBfX1JUX0xJTlVYX0hfXwotI2RlZmluZSBfX1JUX0xJTlVYX0hfXwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KLSNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgotI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotCi0jaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KLQotLyogbG9hZCBmaXJtd2FyZSAqLwotI2RlZmluZSBfX0tFUk5FTF9TWVNDQUxMU19fCi0jaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CS8qIGZvciBnZXRfdW5hbGlnbmVkKCkgKi8KLQotI2RlZmluZSBLVEhSRUFEX1NVUFBPUlQgMQotLyogUlQyODcwIDIuMS4wLjAgaGFzIGl0IGRpc2FibGVkICovCi0KLSNpZmRlZiBLVEhSRUFEX1NVUFBPUlQKLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+Ci0jZW5kaWYgLyogS1RIUkVBRF9TVVBQT1JUIC8vICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJUHJvZmlsZSByZWxhdGVkIHNlY3Rpb25zCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZmRlZiBSVE1QX01BQ19QQ0kKLSNkZWZpbmUgU1RBX0RSSVZFUl9WRVJTSU9OCQkJIjIuMS4wLjAiCi0jZW5kaWYgLyogUlRNUF9NQUNfUENJIC8vICovCi0jaWZkZWYgUlRNUF9NQUNfVVNCCi0jZGVmaW5lIFNUQV9EUklWRVJfVkVSU0lPTgkJCSIyLjEuMC4wIgotLyogUlQzMDcwIHZlcnNpb246IDIuMS4xLjAgKi8KLSNlbmRpZiAvKiBSVE1QX01BQ19VU0IgLy8gKi8KLQotZXh0ZXJuIGNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiBydDI4eHhfaXdfaGFuZGxlcl9kZWY7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJQ29tcGlsZXIgcmVsYXRlZCBkZWZpbml0aW9ucwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI3VuZGVmIF9faW5saW5lCi0jZGVmaW5lIF9faW5saW5lCSAgIHN0YXRpYyBpbmxpbmUKLSNkZWZpbmUgSU4KLSNkZWZpbmUgT1VUCi0jZGVmaW5lIElOT1VUCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJT1MgU3BlY2lmaWMgZGVmaW5pdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBpbnQgKCpIQVJEX1NUQVJUX1hNSVRfRlVOQykgKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldik7Ci0KLSNpZmRlZiBSVE1QX01BQ19QQ0kKLSNpZm5kZWYgUENJX0RFVklDRQotI2RlZmluZSBQQ0lfREVWSUNFKHZlbmQsZGV2KSBcCi0JLnZlbmRvciA9ICh2ZW5kKSwgLmRldmljZSA9IChkZXYpLCBcCi0JLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsIC5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lECi0jZW5kaWYgLyogUENJX0RFVklDRSAvLyAqLwotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotCi0jZGVmaW5lIFJUX01PRF9JTkNfVVNFX0NPVU5UKCkgXAotCWlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKSBcCi0JeyBcCi0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzOiBjYW5ub3QgcmVzZXJ2ZSBtb2R1bGVcbiIsIF9fZnVuY19fKSk7IFwKLQkJcmV0dXJuIC0xOyBcCi0JfQotCi0jZGVmaW5lIFJUX01PRF9ERUNfVVNFX0NPVU5UKCkgbW9kdWxlX3B1dChUSElTX01PRFVMRSk7Ci0KLSNkZWZpbmUgUlRNUF9JTkNfUkVGKF9BKQkJMAotI2RlZmluZSBSVE1QX0RFQ19SRUYoX0EpCQkwCi0jZGVmaW5lIFJUTVBfR0VUX1JFRihfQSkJCTAKLQotLyogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aGVuIHF1ZXJ5IC9wcm9jICovCi1zdHJ1Y3QgaXdfc3RhdGlzdGljcyAqcnQyOHh4X2dldF93aXJlbGVzc19zdGF0cyhJTiBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldik7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJTmV0d29yayByZWxhdGVkIGNvbnN0YW50IGRlZmluaXRpb25zCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZuZGVmIElGTkFNU0laCi0jZGVmaW5lIElGTkFNU0laIDE2Ci0jZW5kaWYKLQotI2RlZmluZSBFVEhfTEVOR1RIX09GX0FERFJFU1MJNgotCi0jZGVmaW5lIE5ESVNfU1RBVFVTX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICAweDAwCi0jZGVmaW5lIE5ESVNfU1RBVFVTX0ZBSUxVUkUgICAgICAgICAgICAgICAgICAgICAweDAxCi0jZGVmaW5lIE5ESVNfU1RBVFVTX0lOVkFMSURfREFUQQkJCQkweDAyCi0jZGVmaW5lIE5ESVNfU1RBVFVTX1JFU09VUkNFUyAgICAgICAgICAgICAgICAgICAweDAzCi0KLSNkZWZpbmUgTkRJU19TRVRfUEFDS0VUX1NUQVRVUyhfcCwgX3N0YXR1cykJCQlkb3t9IHdoaWxlKDApCi0jZGVmaW5lIE5kaXNXcml0ZUVycm9yTG9nRW50cnkoX2EsIF9iLCBfYywgX2QpCQlkb3t9IHdoaWxlKDApCi0KLS8qIHN0YXRpc3RpY3MgY291bnRlciAqLwotI2RlZmluZSBTVEFUU19JTkNfUlhfUEFDS0VUUyhfcEFkLCBfZGV2KQotI2RlZmluZSBTVEFUU19JTkNfVFhfUEFDS0VUUyhfcEFkLCBfZGV2KQotCi0jZGVmaW5lIFNUQVRTX0lOQ19SWF9CWVRFU1MoX3BBZCwgX2RldiwgbGVuKQotI2RlZmluZSBTVEFUU19JTkNfVFhfQllURVNTKF9wQWQsIF9kZXYsIGxlbikKLQotI2RlZmluZSBTVEFUU19JTkNfUlhfRVJST1JTKF9wQWQsIF9kZXYpCi0jZGVmaW5lIFNUQVRTX0lOQ19UWF9FUlJPUlMoX3BBZCwgX2RldikKLQotI2RlZmluZSBTVEFUU19JTkNfUlhfRFJPUFBFRChfcEFkLCBfZGV2KQotI2RlZmluZSBTVEFUU19JTkNfVFhfRFJPUFBFRChfcEFkLCBfZGV2KQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCVJhbGluayBTcGVjaWZpYyBuZXR3b3JrIHJlbGF0ZWQgY29uc3RhbnQgZGVmaW5pdGlvbnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgTUlOX05FVF9ERVZJQ0VfRk9SX0FJRAkJCTB4MDAJLyoweDAwfjB4M2YgKi8KLSNkZWZpbmUgTUlOX05FVF9ERVZJQ0VfRk9SX01CU1NJRAkJMHgwMAkvKjB4MDAsMHgxMCwweDIwLDB4MzAgKi8KLSNkZWZpbmUgTUlOX05FVF9ERVZJQ0VfRk9SX1dEUwkJCTB4MTAJLyoweDQwLDB4NTAsMHg2MCwweDcwICovCi0jZGVmaW5lIE1JTl9ORVRfREVWSUNFX0ZPUl9BUENMSQkJMHgyMAotI2RlZmluZSBNSU5fTkVUX0RFVklDRV9GT1JfTUVTSAkJCTB4MzAKLSNkZWZpbmUgTUlOX05FVF9ERVZJQ0VfRk9SX0RMUwkJCTB4NDAKLSNkZWZpbmUgTkVUX0RFVklDRV9SRUFMX0lEWF9NQVNLCQkweDBmCS8qIGZvciBlYWNoIG9wZXJhdGlvbiBtb2RlLCB3ZSBtYXhpbXVtIHN1cHBvcnQgMTUgZW50aXRpZXMuICovCi0KLSNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9ESVJFQ1RFRAkJMAotI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVAkJMQotI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0JST0FEQ0FTVAkJMgotI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1QJMwotI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX1BST01JU0NVT1VTCTQKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKglPUyBzaWduYWxpbmcgcmVsYXRlZCBjb25zdGFudCBkZWZpbml0aW9ucwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCU9TIGZpbGUgb3BlcmF0aW9uIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0cnVjdCBydF9ydG1wX29zX2ZzX2luZm8gewotCWludCBmc3VpZDsKLQlpbnQgZnNnaWQ7Ci0JbW1fc2VnbWVudF90IGZzOwotfTsKLQotI2RlZmluZSBJU19GSUxFX09QRU5fRVJSKF9mZCkJSVNfRVJSKChfZmQpKQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCU9TIHNlbWFwaG9yZSByZWxhdGVkIGRhdGEgc3RydWN0dXJlIGFuZCBkZWZpbml0aW9ucwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RydWN0IG9zX2xvY2sgewotCXNwaW5sb2NrX3QgbG9jazsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotfTsKLQotLyogKi8KLS8qICBzcGluX2xvY2sgZW5oYW5jZWQgZm9yIE5lc3RlZCBzcGluIGxvY2sgKi8KLS8qICovCi0jZGVmaW5lIE5kaXNBbGxvY2F0ZVNwaW5Mb2NrKF9fbG9jaykgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHNwaW5fbG9ja19pbml0KChzcGlubG9ja190ICopKF9fbG9jaykpOyAgICAgICAgICAgICAgIFwKLX0KLQotI2RlZmluZSBOZGlzRnJlZVNwaW5Mb2NrKGxvY2spICAgICAgICAgIFwKLQlkb3t9d2hpbGUoMCkKLQotI2RlZmluZSBSVE1QX1NFTV9MT0NLKF9fbG9jaykJCQkJCVwKLXsJCQkJCQkJCQkJCQlcCi0Jc3Bpbl9sb2NrX2JoKChzcGlubG9ja190ICopKF9fbG9jaykpOwkJXAotfQotCi0jZGVmaW5lIFJUTVBfU0VNX1VOTE9DSyhfX2xvY2spCQkJCQlcCi17CQkJCQkJCQkJCQkJXAotCXNwaW5fdW5sb2NrX2JoKChzcGlubG9ja190ICopKF9fbG9jaykpOwkJXAotfQotCi0vKiBzYW1wbGUsIHVzZSBzZW1hcGhvcmUgbG9jayB0byByZXBsYWNlIElSUSBsb2NrLCAyMDA3LzExLzE1ICovCi0jZGVmaW5lIFJUTVBfSVJRX0xPQ0soX19sb2NrLCBfX2lycWZsYWdzKQkJCVwKLXsJCQkJCQkJCQkJCQkJXAotCV9faXJxZmxhZ3MgPSAwOwkJCQkJCQkJCVwKLQlzcGluX2xvY2tfYmgoKHNwaW5sb2NrX3QgKikoX19sb2NrKSk7CQkJXAotCXBBZC0+aXJxX2Rpc2FibGVkIHw9IDE7IFwKLX0KLQotI2RlZmluZSBSVE1QX0lSUV9VTkxPQ0soX19sb2NrLCBfX2lycWZsYWcpCQkJXAotewkJCQkJCQkJCQkJCQlcCi0JcEFkLT5pcnFfZGlzYWJsZWQgJj0gMDsJCQkJCQkJXAotCXNwaW5fdW5sb2NrX2JoKChzcGlubG9ja190ICopKF9fbG9jaykpOwkJCVwKLX0KLQotI2RlZmluZSBSVE1QX0lOVF9MT0NLKF9fbG9jaywgX19pcnFmbGFncykJCQlcCi17CQkJCQkJCQkJCQkJCVwKLQlzcGluX2xvY2tfaXJxc2F2ZSgoc3BpbmxvY2tfdCAqKV9fbG9jaywgX19pcnFmbGFncyk7CVwKLX0KLQotI2RlZmluZSBSVE1QX0lOVF9VTkxPQ0soX19sb2NrLCBfX2lycWZsYWcpCQkJXAotewkJCQkJCQkJCQkJCQlcCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgoc3BpbmxvY2tfdCAqKShfX2xvY2spLCAoKHVuc2lnbmVkIGxvbmcpX19pcnFmbGFnKSk7CVwKLX0KLQotI2RlZmluZSBOZGlzQWNxdWlyZVNwaW5Mb2NrCQlSVE1QX1NFTV9MT0NLCi0jZGVmaW5lIE5kaXNSZWxlYXNlU3BpbkxvY2sJCVJUTVBfU0VNX1VOTE9DSwotCi0jaWZuZGVmIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0Ci0jZGVmaW5lIF9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQod3EsIGNvbmRpdGlvbiwgcmV0KSBcCi1kbyB7IFwKLSAgICAgICAgd2FpdF9xdWV1ZV90IF9fd2FpdDsgXAotICAgICAgICBpbml0X3dhaXRxdWV1ZV9lbnRyeSgmX193YWl0LCBjdXJyZW50KTsgXAotICAgICAgICBhZGRfd2FpdF9xdWV1ZSgmd3EsICZfX3dhaXQpOyBcCi0gICAgICAgIGZvciAoOzspIHsgXAotICAgICAgICAgICAgICAgIHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7IFwKLSAgICAgICAgICAgICAgICBpZiAoY29uZGl0aW9uKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgXAotICAgICAgICAgICAgICAgIGlmICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gc2NoZWR1bGVfdGltZW91dChyZXQpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJldCkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgXAotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7IFwKLSAgICAgICAgICAgICAgICB9IFwKLSAgICAgICAgICAgICAgICByZXQgPSAtRVJFU1RBUlRTWVM7IFwKLSAgICAgICAgICAgICAgICBicmVhazsgXAotICAgICAgICB9IFwKLSAgICAgICAgY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7IFwKLSAgICAgICAgcmVtb3ZlX3dhaXRfcXVldWUoJndxLCAmX193YWl0KTsgXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cSwgY29uZGl0aW9uLCB0aW1lb3V0KSBcCi0oeyBcCi0gICAgICAgIGxvbmcgX19yZXQgPSB0aW1lb3V0OyBcCi0gICAgICAgIGlmICghKGNvbmRpdGlvbikpIFwKLSAgICAgICAgICAgICAgICBfX3dhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHdxLCBjb25kaXRpb24sIF9fcmV0KTsgXAotICAgICAgICBfX3JldDsgXAotfSkKLSNlbmRpZgotCi0jZGVmaW5lIFJUTVBfU0VNX0VWRU5UX0lOSVRfTE9DS0VEKF9wU2VtYSkJc2VtYV9pbml0KChfcFNlbWEpLCAwKQotI2RlZmluZSBSVE1QX1NFTV9FVkVOVF9JTklUKF9wU2VtYSkJCQlzZW1hX2luaXQoKF9wU2VtYSksIDEpCi0jZGVmaW5lIFJUTVBfU0VNX0VWRU5UX1dBSVQoX3BTZW1hLCBfc3RhdHVzKQkoKF9zdGF0dXMpID0gZG93bl9pbnRlcnJ1cHRpYmxlKChfcFNlbWEpKSkKLSNkZWZpbmUgUlRNUF9TRU1fRVZFTlRfVVAoX3BTZW1hKQkJCXVwKF9wU2VtYSkKLQotI2lmZGVmIEtUSFJFQURfU1VQUE9SVAotI2RlZmluZSBSVE1QX1dBSVRfRVZFTlRfSU5URVJSVVBUSUJMRShfcEFkLCBfcFRhc2spIFwKLXsgXAotCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoX3BUYXNrLT5rdGhyZWFkX3EsIFwKLQkJCQkJCQkJIF9wVGFzay0+a3RocmVhZF9ydW5uaW5nIHx8IGt0aHJlYWRfc2hvdWxkX3N0b3AoKSk7IFwKLQkJX3BUYXNrLT5rdGhyZWFkX3J1bm5pbmcgPSBGQUxTRTsgXAotCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKSBcCi0JCXsgXAotCQkJUlRNUF9TRVRfRkxBRyhfcEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpOyBcCi0JCQlicmVhazsgXAotCQl9IFwKLX0KLSNlbmRpZgotCi0jaWZkZWYgS1RIUkVBRF9TVVBQT1JUCi0jZGVmaW5lIFdBS0VfVVAoX3BUYXNrKSBcCi0JZG97IFwKLQkJaWYgKChfcFRhc2spLT5rdGhyZWFkX3Rhc2spIFwKLSAgICAgICAgeyBcCi0JCQkoX3BUYXNrKS0+a3RocmVhZF9ydW5uaW5nID0gVFJVRTsgXAotCSAgICAgICAgd2FrZV91cCgmKF9wVGFzayktPmt0aHJlYWRfcSk7IFwKLQkJfSBcCi0JfXdoaWxlKDApCi0jZW5kaWYKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKglPUyBNZW1vcnkgQWNjZXNzIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmUgYW5kIGRlZmluaXRpb25zCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIE1FTV9BTExPQ19GTEFHICAgICAgKEdGUF9BVE9NSUMpCS8qKEdGUF9ETUEgfCBHRlBfQVRPTUlDKSAqLwotCi0jZGVmaW5lIE5kaXNNb3ZlTWVtb3J5KERlc3RpbmF0aW9uLCBTb3VyY2UsIExlbmd0aCkgbWVtbW92ZShEZXN0aW5hdGlvbiwgU291cmNlLCBMZW5ndGgpCi0jZGVmaW5lIE5kaXNDb3B5TWVtb3J5KERlc3RpbmF0aW9uLCBTb3VyY2UsIExlbmd0aCkgbWVtY3B5KERlc3RpbmF0aW9uLCBTb3VyY2UsIExlbmd0aCkKLSNkZWZpbmUgTmRpc1plcm9NZW1vcnkoRGVzdGluYXRpb24sIExlbmd0aCkgICAgICAgICBtZW1zZXQoRGVzdGluYXRpb24sIDAsIExlbmd0aCkKLSNkZWZpbmUgTmRpc0ZpbGxNZW1vcnkoRGVzdGluYXRpb24sIExlbmd0aCwgRmlsbCkgICBtZW1zZXQoRGVzdGluYXRpb24sIEZpbGwsIExlbmd0aCkKLSNkZWZpbmUgTmRpc0NtcE1lbW9yeShEZXN0aW5hdGlvbiwgU291cmNlLCBMZW5ndGgpICBtZW1jbXAoRGVzdGluYXRpb24sIFNvdXJjZSwgTGVuZ3RoKQotI2RlZmluZSBOZGlzRXF1YWxNZW1vcnkoU291cmNlMSwgU291cmNlMiwgTGVuZ3RoKSAgICghbWVtY21wKFNvdXJjZTEsIFNvdXJjZTIsIExlbmd0aCkpCi0jZGVmaW5lIFJUTVBFcXVhbE1lbW9yeShTb3VyY2UxLCBTb3VyY2UyLCBMZW5ndGgpCSghbWVtY21wKFNvdXJjZTEsIFNvdXJjZTIsIExlbmd0aCkpCi0KLSNkZWZpbmUgTWxtZUFsbG9jYXRlTWVtb3J5KF9wQWQsIF9wcFZBKQkJb3NfYWxsb2NfbWVtKF9wQWQsIF9wcFZBLCBNR01UX0RNQV9CVUZGRVJfU0laRSkKLSNkZWZpbmUgTWxtZUZyZWVNZW1vcnkoX3BBZCwgX3BWQSkJCQlvc19mcmVlX21lbShfcEFkLCBfcFZBKQotCi0jZGVmaW5lIENPUFlfTUFDX0FERFIoQWRkcjEsIEFkZHIyKSAgICAgICAgICAgICBtZW1jcHkoKEFkZHIxKSwgKEFkZHIyKSwgTUFDX0FERFJfTEVOKQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCU9TIHRhc2sgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZSBhbmQgZGVmaW5pdGlvbnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgUlRNUF9PU19NR01UX1RBU0tfRkxBR1MJQ0xPTkVfVk0KLQotI2RlZmluZQlUSFJFQURfUElEX0lOSVRfVkFMVUUJTlVMTAotI2RlZmluZQlHRVRfUElEKF92KQlmaW5kX2dldF9waWQoKF92KSkKLSNkZWZpbmUJR0VUX1BJRF9OVU1CRVIoX3YpCXBpZF9ucigoX3YpKQotI2RlZmluZSBDSEVDS19QSURfTEVHQUxJVFkoX3BpZCkJaWYgKHBpZF9ucigoX3BpZCkpID4gMCkKLSNkZWZpbmUgS0lMTF9USFJFQURfUElEKF9BLCBfQiwgX0MpCWtpbGxfcGlkKChfQSksIChfQiksIChfQykpCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogVGltZXIgcmVsYXRlZCBkZWZpbml0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIE9TX0haCQkJSFoKLQotdHlwZWRlZiB2b2lkICgqVElNRVJfRlVOQ1RJT04pICh1bnNpZ25lZCBsb25nKTsKLQotI2RlZmluZSBPU19XQUlUKF90aW1lKSBcCi17CWludCBfaTsgXAotCWxvbmcgX2xvb3AgPSAoKF90aW1lKS8oMTAwMC9PU19IWikpID4gMCA/ICgoX3RpbWUpLygxMDAwL09TX0haKSkgOiAxO1wKLQl3YWl0X3F1ZXVlX2hlYWRfdCBfd2FpdDsgXAotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJl93YWl0KTsgXAotCWZvciAoX2k9MDsgX2k8KF9sb29wKTsgX2krKykgXAotCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChfd2FpdCwgMCwgT05FX1RJQ0spOyB9Ci0KLSNkZWZpbmUgUlRNUF9USU1FX0FGVEVSKGEsYikJCVwKLQkodHlwZWNoZWNrKHVuc2lnbmVkIGxvbmcsICh1bnNpZ25lZCBsb25nKWEpICYmIFwKLQkgdHlwZWNoZWNrKHVuc2lnbmVkIGxvbmcsICh1bnNpZ25lZCBsb25nKWIpICYmIFwKLQkgKChsb25nKShiKSAtIChsb25nKShhKSA8IDApKQotCi0jZGVmaW5lIFJUTVBfVElNRV9BRlRFUl9FUShhLGIpCVwKLQkodHlwZWNoZWNrKHVuc2lnbmVkIGxvbmcsICh1bnNpZ25lZCBsb25nKWEpICYmIFwKLQkgdHlwZWNoZWNrKHVuc2lnbmVkIGxvbmcsICh1bnNpZ25lZCBsb25nKWIpICYmIFwKLQkgKChsb25nKShhKSAtIChsb25nKShiKSA+PSAwKSkKLSNkZWZpbmUgUlRNUF9USU1FX0JFRk9SRShhLGIpCVJUTVBfVElNRV9BRlRFUl9FUShiLGEpCi0KLSNkZWZpbmUgT05FX1RJQ0sgMQotCi1zdGF0aWMgaW5saW5lIHZvaWQgTmRpc0dldFN5c3RlbVVwVGltZSh1bnNpZ25lZCBsb25nICp0aW1lKQotewotCSp0aW1lID0gamlmZmllczsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKglPUyBzcGVjaWZpYyBjb29raWUgZGF0YSBzdHJ1Y3R1cmUgYmluZGluZyB0byBzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0cnVjdCBvc19jb29raWUgewotI2lmZGVmIFJUTVBfTUFDX1BDSQotCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OwotCXN0cnVjdCBwY2lfZGV2ICpwYXJlbnRfcGNpX2RldjsKLQl1MTYgRGV2aWNlSUQ7Ci0JZG1hX2FkZHJfdCBwQWRfcGE7Ci0jZW5kaWYJCQkJLyogUlRNUF9NQUNfUENJIC8vICovCi0jaWZkZWYgUlRNUF9NQUNfVVNCCi0Jc3RydWN0IHVzYl9kZXZpY2UgKnBVc2JfRGV2OwotI2VuZGlmCQkJCS8qIFJUTVBfTUFDX1VTQiAvLyAqLwotCi0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IHJ4X2RvbmVfdGFzazsKLQlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgbWdtdF9kbWFfZG9uZV90YXNrOwotCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBhYzBfZG1hX2RvbmVfdGFzazsKLQlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgYWMxX2RtYV9kb25lX3Rhc2s7Ci0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IGFjMl9kbWFfZG9uZV90YXNrOwotCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBhYzNfZG1hX2RvbmVfdGFzazsKLQlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdGJ0dF90YXNrOwotI2lmZGVmIFJUTVBfTUFDX1BDSQotCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBmaWZvX3N0YXRpc3RpY19mdWxsX3Rhc2s7Ci0jZW5kaWYJCQkJLyogUlRNUF9NQUNfUENJIC8vICovCi0jaWZkZWYgUlRNUF9NQUNfVVNCCi0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IG51bGxfZnJhbWVfY29tcGxldGVfdGFzazsKLQlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgcnRzX2ZyYW1lX2NvbXBsZXRlX3Rhc2s7Ci0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IHBzcG9sbF9mcmFtZV9jb21wbGV0ZV90YXNrOwotI2VuZGlmCQkJCS8qIFJUTVBfTUFDX1VTQiAvLyAqLwotCi0JdW5zaWduZWQgbG9uZyBhcGRfcGlkOwkvKjgwMi4xeCBkYWVtb24gcGlkICovCi0JaW50IGlvY3RsX2lmX3R5cGU7Ci0JaW50IGlvY3RsX2lmOwotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKglPUyBkZWJ1Z2dpbmcgYW5kIHByaW50aW5nIHJlbGF0ZWQgZGVmaW5pdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZkZWYgREJHCi1leHRlcm4gdW5zaWduZWQgbG9uZyBSVERlYnVnTGV2ZWw7Ci0KLSNkZWZpbmUgREJHUFJJTlRfUkFXKExldmVsLCBGbXQpICAgIFwKLWRveyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChMZXZlbCA8PSBSVERlYnVnTGV2ZWwpICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBwcmludGsgRm10OyAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX13aGlsZSgwKQotCi0jZGVmaW5lIERCR1BSSU5UKExldmVsLCBGbXQpICAgIERCR1BSSU5UX1JBVyhMZXZlbCwgRm10KQotCi0jZGVmaW5lIERCR1BSSU5UX0VSUihmbXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0VSUiBmbXQsICMjYXJncykKLQotI2RlZmluZSBEQkdQUklOVF9TKFN0YXR1cywgRm10KQkJXAotewkJCQkJCQkJCVwKLQlwcmludGsgRm10OwkJCQkJXAotfQotCi0jZWxzZQotI2RlZmluZSBEQkdQUklOVChMZXZlbCwgRm10KQotI2RlZmluZSBEQkdQUklOVF9SQVcoTGV2ZWwsIEZtdCkKLSNkZWZpbmUgREJHUFJJTlRfUyhTdGF0dXMsIEZtdCkKLSNkZWZpbmUgREJHUFJJTlRfRVJSKEZtdCkKLSNlbmRpZgotCi0jZGVmaW5lIEFTU0VSVCh4KQotCi12b2lkIGhleF9kdW1wKGNoYXIgKnN0ciwgdW5zaWduZWQgY2hhciAqcFNyY0J1ZlZBLCB1bnNpZ25lZCBpbnQgU3JjQnVmTGVuKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCVRoZSBmb2xsb3dpbmcgY29kZSBhcmUgbm90IHJldmlzZWQsIHRlbXBvcmFyeSBwdXQgaXQgaGVyZS4KLSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIERldmljZSBETUEgQWNjZXNzIHJlbGF0ZWQgZGVmaW5pdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmZGVmIFJUTVBfTUFDX1BDSQotc3RydWN0IHJ0X3J0bXBfYWRhcHRlcjsKLWRtYV9hZGRyX3QgbGludXhfcGNpX21hcF9zaW5nbGUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB2b2lkICpwdHIsCi0JCQkJc2l6ZV90IHNpemUsIGludCBzZF9pZHgsIGludCBkaXJlY3Rpb24pOwotdm9pZCBsaW51eF9wY2lfdW5tYXBfc2luZ2xlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgZG1hX2FkZHJfdCBkbWFfYWRkciwKLQkJCSAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbik7Ci0KLSNkZWZpbmUgUENJX01BUF9TSU5HTEUoX2hhbmRsZSwgX3B0ciwgX3NpemUsIF9zZF9pZHgsIF9kaXIpIFwKLQlsaW51eF9wY2lfbWFwX3NpbmdsZShfaGFuZGxlLCBfcHRyLCBfc2l6ZSwgX3NkX2lkeCwgX2RpcikKLQotI2RlZmluZSBQQ0lfVU5NQVBfU0lOR0xFKF9oYW5kbGUsIF9wdHIsIF9zaXplLCBfZGlyKSBcCi0JbGludXhfcGNpX3VubWFwX3NpbmdsZShfaGFuZGxlLCBfcHRyLCBfc2l6ZSwgX2RpcikKLQotI2RlZmluZSBQQ0lfQUxMT0NfQ09OU0lTVEVOVChfcGNpX2RldiwgX3NpemUsIF9wdHIpIFwKLQlwY2lfYWxsb2NfY29uc2lzdGVudChfcGNpX2RldiwgX3NpemUsIF9wdHIpCi0KLSNkZWZpbmUgUENJX0ZSRUVfQ09OU0lTVEVOVChfcGNpX2RldiwgX3NpemUsIF92aXJ0dWFsX2FkZHIsIF9waHlzaWNhbF9hZGRyKSBcCi0JcGNpX2ZyZWVfY29uc2lzdGVudChfcGNpX2RldiwgX3NpemUsIF92aXJ0dWFsX2FkZHIsIF9waHlzaWNhbF9hZGRyKQotCi0jZGVmaW5lIERFVl9BTExPQ19TS0IoX2xlbmd0aCkgXAotCWRldl9hbGxvY19za2IoX2xlbmd0aCkKLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLQotLyoKLSAqIHVuc2lnbmVkIGxvbmcKLSAqIFJUTVBfR2V0UGh5c2ljYWxBZGRyZXNzTG93KAotICogICBkbWFfYWRkcl90ICBQaHlzaWNhbEFkZHJlc3MpOwotICovCi0jZGVmaW5lIFJUTVBfR2V0UGh5c2ljYWxBZGRyZXNzTG93KFBoeXNpY2FsQWRkcmVzcykJCShQaHlzaWNhbEFkZHJlc3MpCi0KLS8qCi0gKiB1bnNpZ25lZCBsb25nCi0gKiBSVE1QX0dldFBoeXNpY2FsQWRkcmVzc0hpZ2goCi0gKiAgIGRtYV9hZGRyX3QgIFBoeXNpY2FsQWRkcmVzcyk7Ci0gKi8KLSNkZWZpbmUgUlRNUF9HZXRQaHlzaWNhbEFkZHJlc3NIaWdoKFBoeXNpY2FsQWRkcmVzcykJCSgwKQotCi0vKgotICogdm9pZAotICogUlRNUF9TZXRQaHlzaWNhbEFkZHJlc3NMb3coCi0gKiAgIGRtYV9hZGRyX3QgIFBoeXNpY2FsQWRkcmVzcywKLSAqICAgdW5zaWduZWQgbG9uZyAgVmFsdWUpOwotICovCi0jZGVmaW5lIFJUTVBfU2V0UGh5c2ljYWxBZGRyZXNzTG93KFBoeXNpY2FsQWRkcmVzcywgVmFsdWUpCVwKLQkJCVBoeXNpY2FsQWRkcmVzcyA9IFZhbHVlOwotCi0vKgotICogdm9pZAotICogUlRNUF9TZXRQaHlzaWNhbEFkZHJlc3NIaWdoKAotICogICBkbWFfYWRkcl90ICBQaHlzaWNhbEFkZHJlc3MsCi0gKiAgIHVuc2lnbmVkIGxvbmcgIFZhbHVlKTsKLSAqLwotI2RlZmluZSBSVE1QX1NldFBoeXNpY2FsQWRkcmVzc0hpZ2goUGh5c2ljYWxBZGRyZXNzLCBWYWx1ZSkKLQotI2RlZmluZSBOZGlzTUluZGljYXRlU3RhdHVzKF93LCBfeCwgX3ksIF96KQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIERldmljZSBSZWdpc3RlciBJL08gQWNjZXNzIHJlbGF0ZWQgZGVmaW5pdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmZGVmIFJUTVBfTUFDX1BDSQotLypQYXRjaCBmb3IgQVNJQyB0dXJzdCByZWFkL3dyaXRlIGJ1ZywgbmVlZHMgdG8gcmVtb3ZlIGFmdGVyIG1ldGVsIGZpeCAqLwotI2RlZmluZSBSVE1QX0lPX1JFQUQzMihfQSwgX1IsIF9wVikJCQkJCQkJCVwKLXsJCQkJCQkJCQkJCQkJCQkJXAotICAgIGlmICgoX0EpLT5iUENJY2xrT2ZmID09IEZBTFNFKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJKCpfcFYgPSByZWFkbCgodm9pZCAqKSgoX0EpLT5DU1JCYXNlQWRkcmVzcyArIE1BQ19DU1IwKSkpOwkJXAotCQkoKl9wViA9IHJlYWRsKCh2b2lkICopKChfQSktPkNTUkJhc2VBZGRyZXNzICsgKF9SKSkpKTsJCQlcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlCQkJCQkJCQkJCQkJCQkJXAotCQkqX3BWID0gMDsJCQkJCQkJCQkJCQkJXAotfQotCi0jZGVmaW5lIFJUTVBfSU9fRk9SQ0VfUkVBRDMyKF9BLCBfUiwgX3BWKQkJCQkJCQlcCi17CQkJCQkJCQkJCQkJCQkJCQlcCi0JKCpfcFYgPSByZWFkbCgodm9pZCAqKSgoX0EpLT5DU1JCYXNlQWRkcmVzcyArIE1BQ19DU1IwKSkpOwkJXAotCSgqX3BWID0gcmVhZGwoKHZvaWQgKikoKF9BKS0+Q1NSQmFzZUFkZHJlc3MgKyAoX1IpKSkpOwkJCVwKLX0KLQotI2RlZmluZSBSVE1QX0lPX1JFQUQ4KF9BLCBfUiwgX3BWKQkJCQkJCQkJXAotewkJCQkJCQkJCQkJCQkJCQlcCi0JKCpfcFYgPSByZWFkbCgodm9pZCAqKSgoX0EpLT5DU1JCYXNlQWRkcmVzcyArIE1BQ19DU1IwKSkpOwkJCVwKLQkoKl9wViA9IHJlYWRiKCh2b2lkICopKChfQSktPkNTUkJhc2VBZGRyZXNzICsgKF9SKSkpKTsJCQkJXAotfQotI2RlZmluZSBSVE1QX0lPX1dSSVRFMzIoX0EsIF9SLCBfVikJCQkJCQkJCQkJCQlcCi17CQkJCQkJCQkJCQkJCQkJCQkJCQlcCi0gICAgaWYgKChfQSktPmJQQ0ljbGtPZmYgPT0gRkFMU0UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCXUzMiBWYWw7CQkJCQkJCQkJCQkJCQkJCVwKLQlWYWwgPSByZWFkbCgodm9pZCAqKSgoX0EpLT5DU1JCYXNlQWRkcmVzcyArIE1BQ19DU1IwKSk7CQkJXAotCXdyaXRlbCgoX1YpLCAodm9pZCAqKSgoX0EpLT5DU1JCYXNlQWRkcmVzcyArIChfUikpKTsJCQkJCQkJCVwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotCi0jZGVmaW5lIFJUTVBfSU9fRk9SQ0VfV1JJVEUzMihfQSwgX1IsIF9WKQkJCQkJCQkJCQkJCVwKLXsJCQkJCQkJCQkJCQkJCQkJCQkJCVwKLQl1MzIgVmFsOwkJCQkJCQkJCQkJCQkJCQlcCi0JVmFsID0gcmVhZGwoKHZvaWQgKikoKF9BKS0+Q1NSQmFzZUFkZHJlc3MgKyBNQUNfQ1NSMCkpOwkJCVwKLQl3cml0ZWwoX1YsICh2b2lkICopKChfQSktPkNTUkJhc2VBZGRyZXNzICsgKF9SKSkpOwkJCQkJCQkJXAotfQotCi0jaWYgZGVmaW5lZChSQUxJTktfMjg4MCkgfHwgZGVmaW5lZChSQUxJTktfMzA1MikKLSNkZWZpbmUgUlRNUF9JT19XUklURTgoX0EsIF9SLCBfVikgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICBcCi0JdW5zaWduZWQgbG9uZyBWYWw7ICAgICAgICAgICAgICAgIFwKLQl1OCBfaTsgICAgICAgICAgICAgICAgXAotCV9pID0gKChfUikgJiAweDMpOyAgICAgICAgICAgICBcCi0JVmFsID0gcmVhZGwoKHZvaWQgKikoKF9BKS0+Q1NSQmFzZUFkZHJlc3MgKyAoKF9SKSAtIF9pKSkpOyAgIFwKLQlWYWwgPSBWYWwgJiAofigweDAwMDAwMGZmIDw8ICgoX2kpKjgpKSk7ICAgICAgICAgXAotCVZhbCA9IFZhbCB8ICgodW5zaWduZWQgbG9uZykoX1YpIDw8ICgoX2kpKjgpKTsgICAgICAgICBcCi0Jd3JpdGVsKChWYWwpLCAodm9pZCAqKSgoX0EpLT5DU1JCYXNlQWRkcmVzcyArICgoX1IpIC0gX2kpKSk7ICAgIFwKLX0KLSNlbHNlCi0jZGVmaW5lIFJUTVBfSU9fV1JJVEU4KF9BLCBfUiwgX1YpCQkJCQkJCQkJCQkJXAotewkJCQkJCQkJCQkJCQkJCQkJCQkJXAotCXUzMiBWYWw7CQkJCQkJCQkJCQkJCQkJCVwKLQlWYWwgPSByZWFkbCgodm9pZCAqKSgoX0EpLT5DU1JCYXNlQWRkcmVzcyArIE1BQ19DU1IwKSk7CQkJXAotCXdyaXRlYigoX1YpLCAodTggKikoKF9BKS0+Q1NSQmFzZUFkZHJlc3MgKyAoX1IpKSk7CQlcCi19Ci0jZW5kaWYgLyogI2lmIGRlZmluZWQoQlJDTV82MzU4KSB8fCBkZWZpbmVkKFJBTElOS18yODgwKSAvLyAqLwotCi0jZGVmaW5lIFJUTVBfSU9fV1JJVEUxNihfQSwgX1IsIF9WKQkJCQkJCQkJCQkJCVwKLXsJCQkJCQkJCQkJCQkJCQkJCQkJCVwKLQl1MzIgVmFsOwkJCQkJCQkJCQkJCQkJCQlcCi0JVmFsID0gcmVhZGwoKHZvaWQgKikoKF9BKS0+Q1NSQmFzZUFkZHJlc3MgKyBNQUNfQ1NSMCkpOwkJCVwKLQl3cml0ZXcoKF9WKSwgKHUxNiAqKSgoX0EpLT5DU1JCYXNlQWRkcmVzcyArIChfUikpKTsJXAotfQotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotI2lmZGVmIFJUTVBfTUFDX1VTQgotLypQYXRjaCBmb3IgQVNJQyB0dXJzdCByZWFkL3dyaXRlIGJ1ZywgbmVlZHMgdG8gcmVtb3ZlIGFmdGVyIG1ldGVsIGZpeCAqLwotI2RlZmluZSBSVE1QX0lPX1JFQUQzMihfQSwgX1IsIF9wVikJCQkJCQkJCVwKLQlSVFVTQlJlYWRNQUNSZWdpc3RlcigoX0EpLCAoX1IpLCAodTMyICopKF9wVikpCi0KLSNkZWZpbmUgUlRNUF9JT19SRUFEOChfQSwgX1IsIF9wVikJCQkJCQkJCVwKLXsJCQkJCQkJCQkJCQkJCQkJXAotfQotCi0jZGVmaW5lIFJUTVBfSU9fV1JJVEUzMihfQSwgX1IsIF9WKQkJCQkJCQkJXAotCVJUVVNCV3JpdGVNQUNSZWdpc3RlcigoX0EpLCAoX1IpLCAodTMyKShfVikpCi0KLSNkZWZpbmUgUlRNUF9JT19XUklURTgoX0EsIF9SLCBfVikJCQkJCQkJCVwKLXsJCQkJCQkJCQkJCQkJCQkJXAotCXUxNglfVmFsID0gX1Y7CQkJCQkJCQkJCQlcCi0JUlRVU0JTaW5nbGVXcml0ZSgoX0EpLCAoX1IpLCAodTE2KShfVmFsKSk7CQkJCQkJCQlcCi19Ci0KLSNkZWZpbmUgUlRNUF9JT19XUklURTE2KF9BLCBfUiwgX1YpCQkJCQkJCQlcCi17CQkJCQkJCQkJCQkJCQkJCVwKLQlSVFVTQlNpbmdsZVdyaXRlKChfQSksIChfUiksICh1MTYpKF9WKSk7CQkJCQkJCQlcCi19Ci0jZW5kaWYgLyogUlRNUF9NQUNfVVNCIC8vICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJTmV0d29yayBSZWxhdGVkIGRhdGEgc3RydWN0dXJlIGFuZCBtYXJjbyBkZWZpbml0aW9ucwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBQS1RTUkNfTkRJUyAgICAgICAgICAgICAweDdmCi0jZGVmaW5lIFBLVFNSQ19EUklWRVIgICAgICAgICAgIDB4MGYKLQotI2RlZmluZSBSVE1QX09TX05FVERFVl9TRVRfUFJJVihfcE5ldERldiwgX3BQcml2KQkoKF9wTmV0RGV2KS0+bWxfcHJpdiA9IChfcFByaXYpKQotI2RlZmluZSBSVE1QX09TX05FVERFVl9HRVRfUFJJVihfcE5ldERldikJCSgoX3BOZXREZXYpLT5tbF9wcml2KQotI2RlZmluZSBSVE1QX09TX05FVERFVl9HRVRfREVWTkFNRShfcE5ldERldikJKChfcE5ldERldiktPm5hbWUpCi0jZGVmaW5lIFJUTVBfT1NfTkVUREVWX0dFVF9QSFlBRERSKF9QTkVUREVWKQkoKF9QTkVUREVWKS0+ZGV2X2FkZHIpCi0KLSNkZWZpbmUgUlRNUF9PU19ORVRERVZfU1RBUlRfUVVFVUUoX3BOZXREZXYpCW5ldGlmX3N0YXJ0X3F1ZXVlKChfcE5ldERldikpCi0jZGVmaW5lIFJUTVBfT1NfTkVUREVWX1NUT1BfUVVFVUUoX3BOZXREZXYpCW5ldGlmX3N0b3BfcXVldWUoKF9wTmV0RGV2KSkKLSNkZWZpbmUgUlRNUF9PU19ORVRERVZfV0FLRV9RVUVVRShfcE5ldERldikJbmV0aWZfd2FrZV9xdWV1ZSgoX3BOZXREZXYpKQotI2RlZmluZSBSVE1QX09TX05FVERFVl9DQVJSSUVSX09GRihfcE5ldERldikJbmV0aWZfY2Fycmllcl9vZmYoKF9wTmV0RGV2KSkKLQotI2RlZmluZSBRVUVVRV9FTlRSWV9UT19QQUNLRVQocEVudHJ5KSBcCi0JKHZvaWQgKikocEVudHJ5KQotCi0jZGVmaW5lIFBBQ0tFVF9UT19RVUVVRV9FTlRSWShwUGFja2V0KSBcCi0JKHN0cnVjdCBydF9xdWV1ZV9lbnRyeSAqKShwUGFja2V0KQotCi0jZGVmaW5lIEdFVF9TR19MSVNUX0ZST01fUEFDS0VUKF9wLCBfc2MpCVwKLSAgICBydF9nZXRfc2dfbGlzdF9mcm9tX3BhY2tldChfcCwgX3NjKQotCi0jZGVmaW5lIFJFTEVBU0VfTkRJU19QQUNLRVQoX3BBZCwgX3BQYWNrZXQsIF9TdGF0dXMpICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFJUTVBGcmVlTmRpc1BhY2tldChfcEFkLCBfcFBhY2tldCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19Ci0KLS8qCi0gKiBwYWNrZXQgaGVscGVyCi0gKiAJLSBjb252ZXJ0IGludGVybmFsIHJ0IHBhY2tldCB0byBvcyBwYWNrZXQgb3IKLSAqICAgICAgICAgICAgIG9zIHBhY2tldCB0byBydCBwYWNrZXQKLSAqLwotI2RlZmluZSBSVFBLVF9UT19PU1BLVChfcCkJCSgoc3RydWN0IHNrX2J1ZmYgKikoX3ApKQotI2RlZmluZSBPU1BLVF9UT19SVFBLVChfcCkJCSgodm9pZCAqKShfcCkpCi0KLSNkZWZpbmUgR0VUX09TX1BLVF9EQVRBUFRSKF9wa3QpIFwKLQkJKFJUUEtUX1RPX09TUEtUKF9wa3QpLT5kYXRhKQotI2RlZmluZSBTRVRfT1NfUEtUX0RBVEFQVFIoX3BrdCwgX2RhdGFQdHIpCVwKLQkJKFJUUEtUX1RPX09TUEtUKF9wa3QpLT5kYXRhKSA9IChfZGF0YVB0cikKLQotI2RlZmluZSBHRVRfT1NfUEtUX0xFTihfcGt0KSBcCi0JCShSVFBLVF9UT19PU1BLVChfcGt0KS0+bGVuKQotI2RlZmluZSBTRVRfT1NfUEtUX0xFTihfcGt0LCBfbGVuKQlcCi0JCShSVFBLVF9UT19PU1BLVChfcGt0KS0+bGVuKSA9IChfbGVuKQotCi0jZGVmaW5lIEdFVF9PU19QS1RfREFUQVRBSUwoX3BrdCkgXAotCQkoc2tiX3RhaWxfcG9pbnRlcihSVFBLVF9UT19PU1BLVChfcGt0KSkKLSNkZWZpbmUgU0VUX09TX1BLVF9EQVRBVEFJTChfcGt0LCBfc3RhcnQsIF9sZW4pCVwKLQkJKHNrYl9zZXRfdGFpbF9wb2ludGVyKFJUUEtUX1RPX09TUEtUKF9wa3QpLCBfbGVuKSkKLQotI2RlZmluZSBHRVRfT1NfUEtUX0hFQUQoX3BrdCkgXAotCQkoUlRQS1RfVE9fT1NQS1QoX3BrdCktPmhlYWQpCi0KLSNkZWZpbmUgR0VUX09TX1BLVF9FTkQoX3BrdCkgXAotCQkoUlRQS1RfVE9fT1NQS1QoX3BrdCktPmVuZCkKLQotI2RlZmluZSBHRVRfT1NfUEtUX05FVERFVihfcGt0KSBcCi0JCShSVFBLVF9UT19PU1BLVChfcGt0KS0+ZGV2KQotI2RlZmluZSBTRVRfT1NfUEtUX05FVERFVihfcGt0LCBfcE5ldERldikJXAotCQkoUlRQS1RfVE9fT1NQS1QoX3BrdCktPmRldikgPSAoX3BOZXREZXYpCi0KLSNkZWZpbmUgR0VUX09TX1BLVF9UWVBFKF9wa3QpIFwKLQkJKFJUUEtUX1RPX09TUEtUKF9wa3QpKQotCi0jZGVmaW5lIEdFVF9PU19QS1RfTkVYVChfcGt0KSBcCi0JCShSVFBLVF9UT19PU1BLVChfcGt0KS0+bmV4dCkKLQotI2RlZmluZSBPU19QS1RfQ0xPTkVEKF9wa3QpCQlza2JfY2xvbmVkKFJUUEtUX1RPX09TUEtUKF9wa3QpKQotCi0jZGVmaW5lIE9TX05UT0hTKF9WYWwpIFwKLQkJKG50b2hzKF9WYWwpKQotI2RlZmluZSBPU19IVE9OUyhfVmFsKSBcCi0JCShodG9ucyhfVmFsKSkKLSNkZWZpbmUgT1NfTlRPSEwoX1ZhbCkgXAotCQkobnRvaGwoX1ZhbCkpCi0jZGVmaW5lIE9TX0hUT05MKF9WYWwpIFwKLQkJKGh0b25sKF9WYWwpKQotCi0jZGVmaW5lIENCX09GRiAgMTAKLQotLyogVXNlciBQcmlvcml0eSAqLwotI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfVVAoX3AsIF9wcmlvKQkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRiswXSA9IF9wcmlvKQotI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfVVAoX3ApCQkJCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMF0pCi0KLS8qIEZyYWdtZW50ICMgKi8KLSNkZWZpbmUgUlRNUF9TRVRfUEFDS0VUX0ZSQUdNRU5UUyhfcCwgX251bSkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxXSA9IF9udW0pCi0jZGVmaW5lIFJUTVBfR0VUX1BBQ0tFVF9GUkFHTUVOVFMoX3ApCQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzFdKQotCi0vKiAweDAgfjB4N2Y6IFRYIHRvIEFQJ3Mgb3duIEJTUyB3aGljaCBoYXMgdGhlIHNwZWNpZmllZCBBSUQuIGlmIEFJRD4xMjcsIHNldCBiaXQgNyBpbiBSVE1QX1NFVF9QQUNLRVRfRU1BQ1RBQiB0b28uICovCi0vKih0aGlzIHZhbHVlIGFsc28gYXMgTUFDKG9uLWNoaXAgV0NJRCkgdGFibGUgaW5kZXgpICovCi0vKiAweDgwfjB4ZmY6IFRYIHRvIGEgV0RTIGxpbmsuIGIwfjY6IFdEUyBpbmRleCAqLwotI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfV0NJRChfcCwgX3dkc2lkeCkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisyXSA9IF93ZHNpZHgpCi0jZGVmaW5lIFJUTVBfR0VUX1BBQ0tFVF9XQ0lEKF9wKSAgICAgICAgICAJCSgodTgpKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzJdKSkKLQotLyogMHhmZjogUEtUU1JDX05ESVMsIG90aGVyczogbG9jYWwgVFggYnVmZmVyIGluZGV4LiBUaGlzIHZhbHVlIGFmZmVjdHMgaG93IHRvIGEgcGFja2V0ICovCi0jZGVmaW5lIFJUTVBfU0VUX1BBQ0tFVF9TT1VSQ0UoX3AsIF9wa3RzcmMpCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrM10gPSBfcGt0c3JjKQotI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfU09VUkNFKF9wKSAgICAgICAJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRiszXSkKLQotLyogUlRTL0NUUy10by1zZWxmIHByb3RlY3Rpb24gbWV0aG9kICovCi0jZGVmaW5lIFJUTVBfU0VUX1BBQ0tFVF9SVFMoX3AsIF9udW0pICAgICAgCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrNF0gPSBfbnVtKQotI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfUlRTKF9wKSAgICAgICAgICAJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRis0XSkKLS8qIHNlZSBSVE1QX1MoRylFVF9QQUNLRVRfRU1BQ1RBQiAqLwotCi0vKiBUWCByYXRlIGluZGV4ICovCi0jZGVmaW5lIFJUTVBfU0VUX1BBQ0tFVF9UWFJBVEUoX3AsIF9yYXRlKQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzVdID0gX3JhdGUpCi0jZGVmaW5lIFJUTVBfR0VUX1BBQ0tFVF9UWFJBVEUoX3ApCQkgIAkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzVdKQotCi0vKiBGcm9tIHdoaWNoIEludGVyZmFjZSAqLwotI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfSUYoX3AsIF9pZmR4KQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzZdID0gX2lmZHgpCi0jZGVmaW5lIFJUTVBfR0VUX1BBQ0tFVF9JRihfcCkJCSAgCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrNl0pCi0jZGVmaW5lIFJUTVBfU0VUX1BBQ0tFVF9ORVRfREVWSUNFX01CU1NJRChfcCwgX2JzcykJCVJUTVBfU0VUX1BBQ0tFVF9JRigoX3ApLCAoX2JzcykpCi0jZGVmaW5lIFJUTVBfU0VUX1BBQ0tFVF9ORVRfREVWSUNFX1dEUyhfcCwgX2JzcykJCVJUTVBfU0VUX1BBQ0tFVF9JRigoX3ApLCAoKF9ic3MpICsgTUlOX05FVF9ERVZJQ0VfRk9SX1dEUykpCi0jZGVmaW5lIFJUTVBfU0VUX1BBQ0tFVF9ORVRfREVWSUNFX0FQQ0xJKF9wLCBfaWR4KSAgIAlSVE1QX1NFVF9QQUNLRVRfSUYoKF9wKSwgKChfaWR4KSArIE1JTl9ORVRfREVWSUNFX0ZPUl9BUENMSSkpCi0jZGVmaW5lIFJUTVBfU0VUX1BBQ0tFVF9ORVRfREVWSUNFX01FU0goX3AsIF9pZHgpICAgCVJUTVBfU0VUX1BBQ0tFVF9JRigoX3ApLCAoKF9pZHgpICsgTUlOX05FVF9ERVZJQ0VfRk9SX01FU0gpKQotI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfTkVUX0RFVklDRV9NQlNTSUQoX3ApCQkJUlRNUF9HRVRfUEFDS0VUX0lGKChfcCkpCi0jZGVmaW5lIFJUTVBfR0VUX1BBQ0tFVF9ORVRfREVWSUNFKF9wKQkJCQkJUlRNUF9HRVRfUEFDS0VUX0lGKChfcCkpCi0KLSNkZWZpbmUgUlRNUF9TRVRfUEFDS0VUX01PUkVEQVRBKF9wLCBfbW9yZWJpdCkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRis3XSA9IF9tb3JlYml0KQotI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfTU9SRURBVEEoX3ApCQkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRis3XSkKLQotLyogKi8KLS8qICAgICAgU3BlY2lmaWMgUGFja2V0IFR5cGUgZGVmaW5pdGlvbiAqLwotLyogKi8KLSNkZWZpbmUgUlRNUF9QQUNLRVRfU1BFQ0lGSUNfQ0JfT0ZGU0VUCTExCi0KLSNkZWZpbmUgUlRNUF9QQUNLRVRfU1BFQ0lGSUNfREhDUAkJMHgwMQotI2RlZmluZSBSVE1QX1BBQ0tFVF9TUEVDSUZJQ19FQVBPTAkJMHgwMgotI2RlZmluZSBSVE1QX1BBQ0tFVF9TUEVDSUZJQ19JUFY0CQkweDA0Ci0jZGVmaW5lIFJUTVBfUEFDS0VUX1NQRUNJRklDX1dBSQkJMHgwOAotI2RlZmluZSBSVE1QX1BBQ0tFVF9TUEVDSUZJQ19WTEFOCQkweDEwCi0jZGVmaW5lIFJUTVBfUEFDS0VUX1NQRUNJRklDX0xMQ1NOQVAJMHgyMAotCi0vKlNwZWNpZmljICovCi0jZGVmaW5lIFJUTVBfU0VUX1BBQ0tFVF9TUEVDSUZJQyhfcCwgX2ZsZykJICAgCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxMV0gPSBfZmxnKQotCi0vKkRIQ1AgKi8KLSNkZWZpbmUgUlRNUF9TRVRfUEFDS0VUX0RIQ1AoX3AsIF9mbGcpICAgCQkJCQkJCQkJCQkJCVwKLQkJCWRvewkJCQkJCQkJCQkJCQkJCQkJCQkJXAotCQkJCWlmIChfZmxnKQkJCQkJCQkJCQkJCQkJCQkJXAotCQkJCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMTFdKSB8PSAoUlRNUF9QQUNLRVRfU1BFQ0lGSUNfREhDUCk7CQlcCi0JCQkJZWxzZQkJCQkJCQkJCQkJCQkJCQkJCVwKLQkJCQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzExXSkgJj0gKCFSVE1QX1BBQ0tFVF9TUEVDSUZJQ19ESENQKTsJXAotCQkJfXdoaWxlKDApCi0jZGVmaW5lIFJUTVBfR0VUX1BBQ0tFVF9ESENQKF9wKQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzExXSAmIFJUTVBfUEFDS0VUX1NQRUNJRklDX0RIQ1ApCi0KLS8qRUFQT0wgKi8KLSNkZWZpbmUgUlRNUF9TRVRfUEFDS0VUX0VBUE9MKF9wLCBfZmxnKSAgIAkJCQkJCQkJCQkJCQlcCi0JCQlkb3sJCQkJCQkJCQkJCQkJCQkJCQkJCVwKLQkJCQlpZiAoX2ZsZykJCQkJCQkJCQkJCQkJCQkJCVwKLQkJCQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzExXSkgfD0gKFJUTVBfUEFDS0VUX1NQRUNJRklDX0VBUE9MKTsJCVwKLQkJCQllbHNlCQkJCQkJCQkJCQkJCQkJCQkJXAotCQkJCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMTFdKSAmPSAoIVJUTVBfUEFDS0VUX1NQRUNJRklDX0VBUE9MKTsJXAotCQkJfXdoaWxlKDApCi0jZGVmaW5lIFJUTVBfR0VUX1BBQ0tFVF9FQVBPTChfcCkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxMV0gJiBSVE1QX1BBQ0tFVF9TUEVDSUZJQ19FQVBPTCkKLQotLypXQUkgKi8KLSNkZWZpbmUgUlRNUF9TRVRfUEFDS0VUX1dBSShfcCwgX2ZsZykgICAJCQkJCQkJCQkJCQkJXAotCQkJZG97CQkJCQkJCQkJCQkJCQkJCQkJCQlcCi0JCQkJaWYgKF9mbGcpCQkJCQkJCQkJCQkJCQkJCQlcCi0JCQkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxMV0pIHw9IChSVE1QX1BBQ0tFVF9TUEVDSUZJQ19XQUkpOwkJXAotCQkJCWVsc2UJCQkJCQkJCQkJCQkJCQkJCQlcCi0JCQkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxMV0pICY9ICghUlRNUF9QQUNLRVRfU1BFQ0lGSUNfV0FJKTsJXAotCQkJfXdoaWxlKDApCi0jZGVmaW5lIFJUTVBfR0VUX1BBQ0tFVF9XQUkoX3ApCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMTFdICYgUlRNUF9QQUNLRVRfU1BFQ0lGSUNfV0FJKQotCi0jZGVmaW5lIFJUTVBfR0VUX1BBQ0tFVF9MT1dSQVRFKF9wKQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzExXSAmIChSVE1QX1BBQ0tFVF9TUEVDSUZJQ19FQVBPTCB8IFJUTVBfUEFDS0VUX1NQRUNJRklDX0RIQ1AgfCBSVE1QX1BBQ0tFVF9TUEVDSUZJQ19XQUkpKQotCi0vKlZMQU4gKi8KLSNkZWZpbmUgUlRNUF9TRVRfUEFDS0VUX1ZMQU4oX3AsIF9mbGcpICAgCQkJCQkJCQkJCQkJCVwKLQkJCWRvewkJCQkJCQkJCQkJCQkJCQkJCQkJXAotCQkJCWlmIChfZmxnKQkJCQkJCQkJCQkJCQkJCQkJXAotCQkJCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMTFdKSB8PSAoUlRNUF9QQUNLRVRfU1BFQ0lGSUNfVkxBTik7CQlcCi0JCQkJZWxzZQkJCQkJCQkJCQkJCQkJCQkJCVwKLQkJCQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzExXSkgJj0gKCFSVE1QX1BBQ0tFVF9TUEVDSUZJQ19WTEFOKTsJXAotCQkJfXdoaWxlKDApCi0jZGVmaW5lIFJUTVBfR0VUX1BBQ0tFVF9WTEFOKF9wKQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzExXSAmIFJUTVBfUEFDS0VUX1NQRUNJRklDX1ZMQU4pCi0KLS8qTExDL1NOQVAgKi8KLSNkZWZpbmUgUlRNUF9TRVRfUEFDS0VUX0xMQ1NOQVAoX3AsIF9mbGcpICAgCQkJCQkJCQkJCQkJCVwKLQkJCWRvewkJCQkJCQkJCQkJCQkJCQkJCQkJXAotCQkJCWlmIChfZmxnKQkJCQkJCQkJCQkJCQkJCQkJXAotCQkJCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMTFdKSB8PSAoUlRNUF9QQUNLRVRfU1BFQ0lGSUNfTExDU05BUCk7CQlcCi0JCQkJZWxzZQkJCQkJCQkJCQkJCQkJCQkJCVwKLQkJCQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzExXSkgJj0gKCFSVE1QX1BBQ0tFVF9TUEVDSUZJQ19MTENTTkFQKTsJCVwKLQkJCX13aGlsZSgwKQotCi0jZGVmaW5lIFJUTVBfR0VUX1BBQ0tFVF9MTENTTkFQKF9wKQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzExXSAmIFJUTVBfUEFDS0VUX1NQRUNJRklDX0xMQ1NOQVApCi0KLS8qIElQICovCi0jZGVmaW5lIFJUTVBfU0VUX1BBQ0tFVF9JUFY0KF9wLCBfZmxnKQkJCQkJCQkJCQkJCQkJXAotCQkJZG97CQkJCQkJCQkJCQkJCQkJCQkJCQlcCi0JCQkJaWYgKF9mbGcpCQkJCQkJCQkJCQkJCQkJCQlcCi0JCQkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxMV0pIHw9IChSVE1QX1BBQ0tFVF9TUEVDSUZJQ19JUFY0KTsJCVwKLQkJCQllbHNlCQkJCQkJCQkJCQkJCQkJCQkJXAotCQkJCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMTFdKSAmPSAoIVJUTVBfUEFDS0VUX1NQRUNJRklDX0lQVjQpOwlcCi0JCQl9d2hpbGUoMCkKLQotI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfSVBWNChfcCkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxMV0gJiBSVE1QX1BBQ0tFVF9TUEVDSUZJQ19JUFY0KQotCi0vKiBJZiB0aGlzIGZsYWcgaXMgc2V0LCBpdCBpbmRpY2F0ZXMgdGhhdCB0aGlzIEVBUG9MIGZyYW1lIE1VU1QgYmUgY2xlYXIuICovCi0jZGVmaW5lIFJUTVBfU0VUX1BBQ0tFVF9DTEVBUl9FQVBfRlJBTUUoX3AsIF9mbGcpICAgKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzEyXSA9IF9mbGcpCi0jZGVmaW5lIFJUTVBfR0VUX1BBQ0tFVF9DTEVBUl9FQVBfRlJBTUUoX3ApICAgICAgICAgKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzEyXSkKLQotLyogdXNlIGJpdDMgb2YgY2JbQ0JfT0ZGKzE2XSAqLwotCi0jZGVmaW5lIFJUTVBfU0VUX1BBQ0tFVF81VlQoX3AsIF9mbGcpICAgKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzIyXSA9IF9mbGcpCi0jZGVmaW5lIFJUTVBfR0VUX1BBQ0tFVF81VlQoX3ApICAgICAgICAgKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzIyXSkKLQotLyogTWF4IHNrYi0+Y2IgPSA0OEIgPSBbQ0JfT0ZGKzM4XSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCU90aGVyIGZ1bmN0aW9uIHByb3RvdHlwZXMgZGVmaW5pdGlvbnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQgUlRNUF9HZXRDdXJyZW50U3lzdGVtVGltZShMQVJHRV9JTlRFR0VSICp0aW1lKTsKLWludCBydDI4eHhfcGFja2V0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0KLSNpZmRlZiBSVE1QX01BQ19QQ0kKLS8qIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAqLwotI2RlZmluZSBJUlFfSEFORExFX1RZUEUgIGlycXJldHVybl90Ci0KLUlSUV9IQU5ETEVfVFlQRSBydDI4NjBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSk7Ci0jZW5kaWYgLyogUlRNUF9NQUNfUENJIC8vICovCi0KLWludCBydDI4eHhfc3RhX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LCBJTiBPVVQgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7Ci0KLWV4dGVybiBpbnQgcmFfbXRkX3dyaXRlKGludCBudW0sIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwgY29uc3QgdV9jaGFyICpidWYpOwotZXh0ZXJuIGludCByYV9tdGRfcmVhZChpbnQgbnVtLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwgdV9jaGFyICpidWYpOwotCi0jZGVmaW5lIEdFVF9QQURfRlJPTV9ORVRfREVWKF9wQWQsIF9uZXRfZGV2KQkoX3BBZCkgPSAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqKShfbmV0X2RldiktPm1sX3ByaXY7Ci0KLSNlbmRpZiAvKiBfX1JUX0xJTlVYX0hfXyAvLyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9tYWluX2Rldi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9tYWluX2Rldi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzZkZDM2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbWFpbl9kZXYuYworKysgL2Rldi9udWxsCkBAIC0xLDczNiArMCwwIEBACi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFJhbGluayBUZWNoIEluYy4KLSAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKLSAqIEhzaW5jaHUgQ291bnR5IDMwMiwKLSAqIFRhaXdhbiwgUi5PLkMuCi0gKgotICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotICAgIE1vZHVsZSBOYW1lOgotICAgIHJ0X21haW5fZGV2LmMKLQotICAgIEFic3RyYWN0OgotICAgIENyZWF0ZSBhbmQgcmVnaXN0ZXIgbmV0d29yayBpbnRlcmZhY2UuCi0KLSAgICBSZXZpc2lvbiBIaXN0b3J5OgotICAgIFdobyAgICAgICAgIAlXaGVuICAgICAgICAgICAgV2hhdAotICAgIEp1c3RpbiBQLiBNYXR0b2NrCTExLzA3LzIwMTAJRml4IHR5cG9zIGluIGNvbW1lbnRzCi0gICAgLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSovCi0KLSNpbmNsdWRlICJydF9jb25maWcuaCIKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogUHJpdmF0ZSBWYXJpYWJsZXMgVXNlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1jaGFyICptYWMgPSAiIjsJCS8qIGRlZmF1bHQgMDA6MDA6MDA6MDA6MDA6MDAgKi8KLWNoYXIgKmhvc3RuYW1lID0gIiI7CQkvKiBkZWZhdWx0IENNUEMgKi8KLW1vZHVsZV9wYXJhbShtYWMsIGNoYXJwLCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MobWFjLCAicnQyOHh4OiB3aXJlbGVzcyBtYWMgYWRkciIpOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBQcm90b3R5cGVzIG9mIEZ1bmN0aW9ucyBVc2VkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIHB1YmxpYyBmdW5jdGlvbiBwcm90b3R5cGUgKi8KLWludCBydDI4eHhfY2xvc2UoSU4gc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpOwotaW50IHJ0Mjh4eF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KTsKLQotLyogcHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGUgKi8KLXN0YXRpYyBpbnQgcnQyOHh4X3NlbmRfcGFja2V0cyhJTiBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3AsCi0JCQkgICAgICAgSU4gc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpOwotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKlJUMjh4eF9nZXRfZXRoZXJfc3RhdHMoSU4gc3RydWN0IG5ldF9kZXZpY2UKLQkJCQkJCSAgICAgICAqbmV0X2Rldik7Ci0KLS8qCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLVJvdXRpbmUgRGVzY3JpcHRpb246Ci0gICAgQ2xvc2UgcmF4eCBpbnRlcmZhY2UuCi0KLUFyZ3VtZW50czoKLQkqbmV0X2RldgkJCXRoZSByYXh4IGludGVyZmFjZSBwb2ludGVyCi0KLVJldHVybiBWYWx1ZToKLSAgICAwCQkJCQlPcGVuIE9LCi0Jb3RoZXJ3aXNlCQkJT3BlbiBGYWlsCi0KLU5vdGU6Ci0JMS4gaWYgb3BlbiBmYWlsLCBrZXJuZWwgd2lsbCBub3QgY2FsbCB0aGUgY2xvc2UgZnVuY3Rpb24uCi0JMi4gRnJlZSBtZW1vcnkgZm9yCi0JCSgxKSBNbG1lIE1lbW9yeSBIYW5kbGVyOgkJTWxtZUhhbHQoKQotCQkoMikgVFggJiBSWDoJCQkJCVJUTVBGcmVlVHhSeFJpbmdNZW1vcnkoKQotCQkoMykgQkEgUmVvcmRlcmluZzogCQkJCWJhX3Jlb3JkZXJpbmdfcmVzb3VyY2VfcmVsZWFzZSgpCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi1pbnQgTWFpblZpcnR1YWxJRl9jbG9zZShJTiBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldikKLXsKLQlzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQgPSBOVUxMOwotCi0JR0VUX1BBRF9GUk9NX05FVF9ERVYocEFkLCBuZXRfZGV2KTsKLQotCS8qIFNhbml0eSBjaGVjayBmb3IgcEFkICovCi0JaWYgKHBBZCA9PSBOVUxMKQotCQlyZXR1cm4gMDsJLyogY2xvc2Ugb2sgKi8KLQotCW5ldGlmX2NhcnJpZXJfb2ZmKHBBZC0+bmV0X2Rldik7Ci0JbmV0aWZfc3RvcF9xdWV1ZShwQWQtPm5ldF9kZXYpOwotCi0JewotCQlCT09MRUFOIENhbmNlbGxlZDsKLQotCQlpZiAoSU5GUkFfT04ocEFkKSAmJgotCQkgICAgKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKSB7Ci0JCQlzdHJ1Y3QgcnRfbWxtZV9kaXNhc3NvY19yZXEgRGlzUmVxOwotCQkJc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqTXNnRWxlbSA9Ci0JCQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSksCi0JCQkJCU1FTV9BTExPQ19GTEFHKTsKLQotCQkJaWYgKE1zZ0VsZW0pIHsKLQkJCQlDT1BZX01BQ19BRERSKERpc1JlcS5BZGRyLAotCQkJCQkgICAgICBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7Ci0JCQkJRGlzUmVxLlJlYXNvbiA9IFJFQVNPTl9ERUFVVEhfU1RBX0xFQVZJTkc7Ci0KLQkJCQlNc2dFbGVtLT5NYWNoaW5lID0gQVNTT0NfU1RBVEVfTUFDSElORTsKLQkJCQlNc2dFbGVtLT5Nc2dUeXBlID0gTVQyX01MTUVfRElTQVNTT0NfUkVROwotCQkJCU1zZ0VsZW0tPk1zZ0xlbiA9Ci0JCQkJICAgIHNpemVvZihzdHJ1Y3QgcnRfbWxtZV9kaXNhc3NvY19yZXEpOwotCQkJCU5kaXNNb3ZlTWVtb3J5KE1zZ0VsZW0tPk1zZywgJkRpc1JlcSwKLQkJCQkJICAgICAgIHNpemVvZgotCQkJCQkgICAgICAgKHN0cnVjdCBydF9tbG1lX2Rpc2Fzc29jX3JlcSkpOwotCi0JCQkJLyogUHJldmVudCB0byBjb25uZWN0IEFQIGFnYWluIGluIFNUQU1sbWVQZXJpb2RpY0V4ZWMgKi8KLQkJCQlwQWQtPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWRMZW4gPSAzMjsKLQkJCQlOZGlzWmVyb01lbW9yeShwQWQtPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWQsCi0JCQkJCSAgICAgICBwQWQtPk1sbWVBdXguCi0JCQkJCSAgICAgICBBdXRvUmVjb25uZWN0U3NpZExlbik7Ci0KLQkJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0KLQkJCQkgICAgQ05UTF9XQUlUX09JRF9ESVNBU1NPQzsKLQkJCQlNbG1lRGlzYXNzb2NSZXFBY3Rpb24ocEFkLCBNc2dFbGVtKTsKLQkJCQlrZnJlZShNc2dFbGVtKTsKLQkJCX0KLQotCQkJUlRNUHVzZWNEZWxheSgxMDAwKTsKLQkJfQotCi0JCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5TdGFDZmcuU3RhUXVpY2tSZXNwb25lRm9yUmF0ZVVwVGltZXIsCi0JCQkJJkNhbmNlbGxlZCk7Ci0JCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5TdGFDZmcuV3BhRGlzYXNzb2NBbmRCbG9ja0Fzc29jVGltZXIsCi0JCQkJJkNhbmNlbGxlZCk7Ci0JfQotCi0JVklSVFVBTF9JRl9ET1dOKHBBZCk7Ci0KLQlSVF9NT0RfREVDX1VTRV9DT1VOVCgpOwotCi0JcmV0dXJuIDA7CQkvKiBjbG9zZSBvayAqLwotfQotCi0vKgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Sb3V0aW5lIERlc2NyaXB0aW9uOgotICAgIE9wZW4gcmF4eCBpbnRlcmZhY2UuCi0KLUFyZ3VtZW50czoKLQkqbmV0X2RldgkJCXRoZSByYXh4IGludGVyZmFjZSBwb2ludGVyCi0KLVJldHVybiBWYWx1ZToKLSAgICAwCQkJCQlPcGVuIE9LCi0Jb3RoZXJ3aXNlCQkJT3BlbiBGYWlsCi0KLU5vdGU6Ci0JMS4gaWYgb3BlbiBmYWlsLCBrZXJuZWwgd2lsbCBub3QgY2FsbCB0aGUgY2xvc2UgZnVuY3Rpb24uCi0JMi4gRnJlZSBtZW1vcnkgZm9yCi0JCSgxKSBNbG1lIE1lbW9yeSBIYW5kbGVyOgkJTWxtZUhhbHQoKQotCQkoMikgVFggJiBSWDoJCQkJCVJUTVBGcmVlVHhSeFJpbmdNZW1vcnkoKQotCQkoMykgQkEgUmVvcmRlcmluZzogCQkJCWJhX3Jlb3JkZXJpbmdfcmVzb3VyY2VfcmVsZWFzZSgpCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi1pbnQgTWFpblZpcnR1YWxJRl9vcGVuKElOIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KQotewotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCA9IE5VTEw7Ci0KLQlHRVRfUEFEX0ZST01fTkVUX0RFVihwQWQsIG5ldF9kZXYpOwotCi0JLyogU2FuaXR5IGNoZWNrIGZvciBwQWQgKi8KLQlpZiAocEFkID09IE5VTEwpCi0JCXJldHVybiAwOwkvKiBjbG9zZSBvayAqLwotCi0JaWYgKFZJUlRVQUxfSUZfVVAocEFkKSAhPSAwKQotCQlyZXR1cm4gLTE7Ci0KLQkvKiBpbmNyZWFzZSBNT0RVTEUgdXNlIGNvdW50ICovCi0JUlRfTU9EX0lOQ19VU0VfQ09VTlQoKTsKLQotCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldF9kZXYpOwotCW5ldGlmX2NhcnJpZXJfb24obmV0X2Rldik7Ci0JbmV0aWZfd2FrZV9xdWV1ZShuZXRfZGV2KTsKLQotCXJldHVybiAwOwotfQotCi0vKgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Sb3V0aW5lIERlc2NyaXB0aW9uOgotICAgIENsb3NlIHJheHggaW50ZXJmYWNlLgotCi1Bcmd1bWVudHM6Ci0JKm5ldF9kZXYJCQl0aGUgcmF4eCBpbnRlcmZhY2UgcG9pbnRlcgotCi1SZXR1cm4gVmFsdWU6Ci0gICAgMAkJCQkJT3BlbiBPSwotCW90aGVyd2lzZQkJCU9wZW4gRmFpbAotCi1Ob3RlOgotCTEuIGlmIG9wZW4gZmFpbCwga2VybmVsIHdpbGwgbm90IGNhbGwgdGhlIGNsb3NlIGZ1bmN0aW9uLgotCTIuIEZyZWUgbWVtb3J5IGZvcgotCQkoMSkgTWxtZSBNZW1vcnkgSGFuZGxlcjoJCU1sbWVIYWx0KCkKLQkJKDIpIFRYICYgUlg6CQkJCQlSVE1QRnJlZVR4UnhSaW5nTWVtb3J5KCkKLQkJKDMpIEJBIFJlb3JkZXJpbmc6IAkJCQliYV9yZW9yZGVyaW5nX3Jlc291cmNlX3JlbGVhc2UoKQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotaW50IHJ0Mjh4eF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2OwotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCA9IE5VTEw7Ci0JQk9PTEVBTiBDYW5jZWxsZWQ7Ci0JdTMyIGkgPSAwOwotCi0jaWZkZWYgUlRNUF9NQUNfVVNCCi0JREVDTEFSRV9XQUlUX1FVRVVFX0hFQURfT05TVEFDSyh1bmxpbmtfd2FrZXVwKTsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKLSNlbmRpZiAvKiBSVE1QX01BQ19VU0IgLy8gKi8KLQotCUdFVF9QQURfRlJPTV9ORVRfREVWKHBBZCwgbmV0X2Rldik7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT0+IHJ0Mjh4eF9jbG9zZVxuIikpOwotCi0JQ2FuY2VsbGVkID0gRkFMU0U7Ci0JLyogU2FuaXR5IGNoZWNrIGZvciBwQWQgKi8KLQlpZiAocEFkID09IE5VTEwpCi0JCXJldHVybiAwOwkvKiBjbG9zZSBvayAqLwotCi0JewotI2lmZGVmIFJUTVBfTUFDX1BDSQotCQlSVE1QUENJZUxpbmtDdHJsVmFsdWVSZXN0b3JlKHBBZCwgUkVTVE9SRV9DTE9TRSk7Ci0jZW5kaWYgLyogUlRNUF9NQUNfUENJIC8vICovCi0KLQkJLyogSWYgZHJpdmVyIGRvZXNuJ3Qgd2FrZSB1cCBmaXJtd2FyZSBoZXJlLCAqLwotCQkvKiBOSUNMb2FkRmlybXdhcmUgd2lsbCBoYW5nIGZvcmV2ZXIgd2hlbiBpbnRlcmZhY2UgaXMgdXAgYWdhaW4uICovCi0JCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpKSB7Ci0JCQlBc2ljRm9yY2VXYWtldXAocEFkLCBUUlVFKTsKLQkJfQotI2lmZGVmIFJUTVBfTUFDX1VTQgotCQlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRU1PVkVfSU5fUFJPR1JFU1MpOwotI2VuZGlmIC8qIFJUTVBfTUFDX1VTQiAvLyAqLwotCi0JCU1sbWVSYWRpb09mZihwQWQpOwotI2lmZGVmIFJUTVBfTUFDX1BDSQotCQlwQWQtPmJQQ0ljbGtPZmYgPSBGQUxTRTsKLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLQl9Ci0KLQlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKTsKLQotCWZvciAoaSA9IDA7IGkgPCBOVU1fT0ZfVFhfUklORzsgaSsrKSB7Ci0JCXdoaWxlIChwQWQtPkRlUXVldWVSdW5uaW5nW2ldID09IFRSVUUpIHsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAoIldhaXRpbmcgZm9yIFR4UXVldWVbJWRdIGRvbmUuLi4uLi4uLi4uXG4iLAotCQkJCSAgaSkpOwotCQkJUlRNUHVzZWNEZWxheSgxMDAwKTsKLQkJfQotCX0KLQotI2lmZGVmIFJUTVBfTUFDX1VTQgotCS8qIGVuc3VyZSB0aGVyZSBhcmUgbm8gbW9yZSBhY3RpdmUgdXJicy4gKi8KLQlhZGRfd2FpdF9xdWV1ZSgmdW5saW5rX3dha2V1cCwgJndhaXQpOwotCXBBZC0+d2FpdCA9ICZ1bmxpbmtfd2FrZXVwOwotCi0JLyogbWF5YmUgd2FpdCBmb3IgZGVsZXRpb25zIHRvIGZpbmlzaC4gKi8KLQlpID0gMDsKLQkvKndoaWxlKChpIDwgMjUpICYmIGF0b21pY19yZWFkKCZwQWQtPlBlbmRpbmdSeCkgPiAwKSAqLwotCXdoaWxlIChpIDwgMjUpIHsKLQkJdW5zaWduZWQgbG9uZyBJcnFGbGFnczsKLQotCQlSVE1QX0lSUV9MT0NLKCZwQWQtPkJ1bGtJbkxvY2ssIElycUZsYWdzKTsKLQkJaWYgKHBBZC0+UGVuZGluZ1J4ID09IDApIHsKLQkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrSW5Mb2NrLCBJcnFGbGFncyk7Ci0JCQlicmVhazsKLQkJfQotCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa0luTG9jaywgSXJxRmxhZ3MpOwotCi0JCW1zbGVlcChVTkxJTktfVElNRU9VVF9NUyk7CS8qVGltZSBpbiBtaWxsaXNlY29uZCAqLwotCQlpKys7Ci0JfQotCXBBZC0+d2FpdCA9IE5VTEw7Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJnVubGlua193YWtldXAsICZ3YWl0KTsKLSNlbmRpZiAvKiBSVE1QX01BQ19VU0IgLy8gKi8KLQotCS8qIFN0b3AgTWxtZSBzdGF0ZSBtYWNoaW5lICovCi0JTWxtZUhhbHQocEFkKTsKLQotCS8qIENsb3NlIG5ldCB0YXNrbGV0cyAqLwotCVJ0bXBOZXRUYXNrRXhpdChwQWQpOwotCi0JewotCQlNYWNUYWJsZVJlc2V0KHBBZCk7Ci0JfQotCi0JTWVhc3VyZVJlcVRhYkV4aXQocEFkKTsKLQlUcGNSZXFUYWJFeGl0KHBBZCk7Ci0KLQkvKiBDbG9zZSBrZXJuZWwgdGhyZWFkcyAqLwotCVJ0bXBNZ210VGFza0V4aXQocEFkKTsKLQotI2lmZGVmIFJUTVBfTUFDX1BDSQotCXsKLQkJQk9PTEVBTiBicmM7Ci0JCS8qICAgICAgdW5zaWduZWQgbG9uZyAgICAgICAgICAgICAgICAgICBWYWx1ZTsgKi8KLQotCQlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9BQ1RJVkUpKSB7Ci0JCQlSVE1QX0FTSUNfSU5URVJSVVBUX0RJU0FCTEUocEFkKTsKLQkJfQotCQkvKiBSZWNlaXZlIHBhY2tldHMgdG8gY2xlYXIgRE1BIGluZGV4IGFmdGVyIGRpc2FibGUgaW50ZXJydXB0LiAqLwotCQkvKiBSVE1QSGFuZGxlUnhEb25lSW50ZXJydXB0KHBBZCk7ICovCi0JCS8qIHB1dCByYWRpbyBvZmYgdG8gc2F2ZSBwb3dlciB3aGVuIGRyaXZlciB1bmxvYWRzLiAgQWZ0ZXIgcmFkaW9vZmYsIGNhbid0IHdyaXRlL3JlYWQgcmVnaXN0ZXIsIHNvIG5lZWQgdG8gZmluaXNoIGFsbC4gKi8KLQkJLyogcmVnaXN0ZXIgYWNjZXNzIGJlZm9yZSBSYWRpbyBvZmYuICovCi0KLQkJYnJjID0gUlQyOHh4UGNpQXNpY1JhZGlvT2ZmKHBBZCwgUlRNUF9IQUxULCAwKTsKLQotLypJbiAgc29sdXRpb24gMyBvZiAzMDkwRiwgdGhlIGJQQ0ljbGtPZmYgd2lsbCBiZSBzZXQgdG8gVFJVRSBhZnRlciBjYWxsaW5nIFJUMjh4eFBjaUFzaWNSYWRpb09mZiAqLwotCQlwQWQtPmJQQ0ljbGtPZmYgPSBGQUxTRTsKLQotCQlpZiAoYnJjID09IEZBTFNFKSB7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCQkgKCIlcyBjYWxsIFJUMjh4eFBjaUFzaWNSYWRpb09mZiBmYWlsIVxuIiwKLQkJCQkgIF9fZnVuY19fKSk7Ci0JCX0KLQl9Ci0KLS8qCi0JaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfQUNUSVZFKSkKLQl7Ci0JCVJUTVBfQVNJQ19JTlRFUlJVUFRfRElTQUJMRShwQWQpOwotCX0KLQotCS8vIERpc2FibGUgUngsIHJlZ2lzdGVyIHZhbHVlIHN1cHBvc2VkIHdpbGwgcmVtYWluIGFmdGVyIHJlc2V0Ci0JTklDSXNzdWVSZXNldChwQWQpOwotKi8KLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLQotCS8qIEZyZWUgSVJRICovCi0JaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKSkgewotI2lmZGVmIFJUTVBfTUFDX1BDSQotCQkvKiBEZXJlZ2lzdGVyIGludGVycnVwdCBmdW5jdGlvbiAqLwotCQlSdG1wT1NJUlFSZWxlYXNlKG5ldF9kZXYpOwotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotCQlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpOwotCX0KLQkvKiBGcmVlIFJpbmcgb3IgVVNCIGJ1ZmZlcnMgKi8KLQlSVE1QRnJlZVR4UnhSaW5nTWVtb3J5KHBBZCk7Ci0KLQlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpOwotCi0JLyogRnJlZSBCQSByZW9yZGVyIHJlc291cmNlICovCi0JYmFfcmVvcmRlcmluZ19yZXNvdXJjZV9yZWxlYXNlKHBBZCk7Ci0KLQlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1NUQVJUX1VQKTsKLQotLyorKytNb2RpZnkgYnkgd29vZHkgdG8gc29sdmUgdGhlIGJ1bGsgZmFpbCsrKyovCi0JewotCX0KLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjw9PT0gcnQyOHh4X2Nsb3NlXG4iKSk7Ci0JcmV0dXJuIDA7CQkvKiBjbG9zZSBvayAqLwotfQkJCQkvKiBFbmQgb2YgcnQyOHh4X2Nsb3NlICovCi0KLS8qCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLVJvdXRpbmUgRGVzY3JpcHRpb246Ci0gICAgT3BlbiByYXh4IGludGVyZmFjZS4KLQotQXJndW1lbnRzOgotCSpuZXRfZGV2CQkJdGhlIHJheHggaW50ZXJmYWNlIHBvaW50ZXIKLQotUmV0dXJuIFZhbHVlOgotICAgIDAJCQkJCU9wZW4gT0sKLQlvdGhlcndpc2UJCQlPcGVuIEZhaWwKLQotTm90ZToKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLWludCBydDI4eHhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2OwotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCA9IE5VTEw7Ci0JaW50IHJldHZhbCA9IDA7Ci0JLypzdHJ1Y3Qgb3NfY29va2llICpwT2JqOyAqLwotCi0JR0VUX1BBRF9GUk9NX05FVF9ERVYocEFkLCBuZXRfZGV2KTsKLQotCS8qIFNhbml0eSBjaGVjayBmb3IgcEFkICovCi0JaWYgKHBBZCA9PSBOVUxMKSB7Ci0JCS8qIGlmIDFzdCBvcGVuIGZhaWwsIHBBZCB3aWxsIGJlIGZyZWU7Ci0JCSAgIFNvIHRoZSBuZXRfZGV2LT5tbF9wcml2IHdpbGwgYmUgTlVMTCBpbiAycmQgb3BlbiAqLwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JaWYgKG5ldF9kZXYtPnByaXZfZmxhZ3MgPT0gSU5UX01BSU4pIHsKLQkJaWYgKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpCi0JCQluZXRfZGV2LT53aXJlbGVzc19oYW5kbGVycyA9Ci0JCQkgICAgKHN0cnVjdCBpd19oYW5kbGVyX2RlZiAqKSZydDI4eHhfaXdfaGFuZGxlcl9kZWY7Ci0JfQotCS8qIFJlcXVlc3QgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSBmb3IgUENJIGRldmljZSAqLwotCS8qIHJlZ2lzdGVyIHRoZSBpbnRlcnJ1cHQgcm91dGluZSB3aXRoIHRoZSBvcyAqLwotCVJ0bXBPU0lSUVJlcXVlc3QobmV0X2Rldik7Ci0KLQkvKiBJbml0IElSUSBwYXJhbWV0ZXJzIHN0b3JlZCBpbiBwQWQgKi8KLQlSVE1QX0lSUV9JTklUKHBBZCk7Ci0KLQkvKiBDaGlwICYgb3RoZXIgaW5pdCAqLwotCWlmIChydDI4eHhfaW5pdChwQWQsIG1hYywgaG9zdG5hbWUpID09IEZBTFNFKQotCQlnb3RvIGVycjsKLQotCS8qIEVuYWJsZSBJbnRlcnJ1cHQgKi8KLQlSVE1QX0lSUV9FTkFCTEUocEFkKTsKLQotCS8qIE5vdyBFbmFibGUgUnhUeCAqLwotCVJUTVBFbmFibGVSeFR4KHBBZCk7Ci0JUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfU1RBUlRfVVApOwotCi0JewotCQl1MzIgcmVnID0gMDsKLQkJUlRNUF9JT19SRUFEMzIocEFkLCAweDEzMDAsICZyZWcpOwkvKiBjbGVhciBnYXJiYWdlIGludGVycnVwdHMgKi8KLQkJcHJpbnRrKEtFUk5fREVCVUcgIjB4MTMwMCA9ICUwOHhcbiIsIHJlZyk7Ci0JfQotCi0JewotLyogICAgICB1MzIgcmVnOyAqLwotLyogICAgICB1OCAgYnl0ZTsgKi8KLS8qICAgICAgdTE2IHRtcDsgKi8KLQotLyogICAgICBSVE1QX0lPX1JFQUQzMihwQWQsIFhJRlNfVElNRV9DRkcsICZyZWcpOyAqLwotCi0vKiAgICAgIHRtcCA9IDB4MDgwNTsgKi8KLS8qICAgICAgcmVnICA9IChyZWcgJiAweGZmZmYwMDAwKSB8IHRtcDsgKi8KLS8qICAgICAgUlRNUF9JT19XUklURTMyKHBBZCwgWElGU19USU1FX0NGRywgcmVnKTsgKi8KLQotCX0KLSNpZmRlZiBSVE1QX01BQ19QQ0kKLQlSVE1QSW5pdFBDSWVMaW5rQ3RybFZhbHVlKHBBZCk7Ci0jZW5kaWYgLyogUlRNUF9NQUNfUENJIC8vICovCi0KLQlyZXR1cm4gcmV0dmFsOwotCi1lcnI6Ci0vKisrK0FkZCBieSBzaGlhbmcsIG1vdmUgZnJvbSBydDI4eHhfaW5pdCgpIHRvIGhlcmUuICovCi0JUnRtcE9TSVJRUmVsZWFzZShuZXRfZGV2KTsKLS8qLS0tQWRkIGJ5IHNoaWFuZywgbW92ZSBmcm9tIHJ0Mjh4eF9pbml0KCkgdG8gaGVyZS4gKi8KLQlyZXR1cm4gLTE7Ci19CQkJCS8qIEVuZCBvZiBydDI4eHhfb3BlbiAqLwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJ0Mjg2MF9uZXRkZXZfb3BzID0gewotCS5uZG9fb3BlbiA9IE1haW5WaXJ0dWFsSUZfb3BlbiwKLQkubmRvX3N0b3AgPSBNYWluVmlydHVhbElGX2Nsb3NlLAotCS5uZG9fZG9faW9jdGwgPSBydDI4eHhfc3RhX2lvY3RsLAotCS5uZG9fZ2V0X3N0YXRzID0gUlQyOHh4X2dldF9ldGhlcl9zdGF0cywKLQkubmRvX3ZhbGlkYXRlX2FkZHIgPSBOVUxMLAotCS5uZG9fc2V0X21hY19hZGRyZXNzID0gZXRoX21hY19hZGRyLAotCS5uZG9fY2hhbmdlX210dSA9IGV0aF9jaGFuZ2VfbXR1LAotCS5uZG9fc3RhcnRfeG1pdCA9IHJ0Mjh4eF9zZW5kX3BhY2tldHMsCi19OwotCi1zdHJ1Y3QgbmV0X2RldmljZSAqUnRtcFBoeU5ldERldkluaXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgc3RydWN0IHJ0X3J0bXBfb3NfbmV0ZGV2X29wX2hvb2sgKnBOZXREZXZIb29rKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gTlVMTDsKLS8qICAgICAgaW50ICAgICAgICAgICAgIFN0YXR1czsgKi8KLQotCW5ldF9kZXYgPQotCSAgICBSdG1wT1NOZXREZXZDcmVhdGUocEFkLCBJTlRfTUFJTiwgMCwgc2l6ZW9mKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKiksCi0JCQkgICAgICAgSU5GX01BSU5fREVWX05BTUUpOwotCWlmIChuZXRfZGV2ID09IE5VTEwpIHsKLQkJcHJpbnRrCi0JCSAgICAoIlJ0bXBQaHlOZXREZXZJbml0KCk6IGNyZWF0aW9uIGZhaWxlZCBmb3IgbWFpbiBwaHlzaWNhbCBuZXQgZGV2aWNlIVxuIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCU5kaXNaZXJvTWVtb3J5KCh1bnNpZ25lZCBjaGFyICopcE5ldERldkhvb2ssCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IHJ0X3J0bXBfb3NfbmV0ZGV2X29wX2hvb2spKTsKLQlwTmV0RGV2SG9vay0+bmV0ZGV2X29wcyA9ICZydDI4NjBfbmV0ZGV2X29wczsKLQlwTmV0RGV2SG9vay0+cHJpdl9mbGFncyA9IElOVF9NQUlOOwotCXBOZXREZXZIb29rLT5uZWVkUHJvdGN0ZWQgPSBGQUxTRTsKLQotCW5ldF9kZXYtPm1sX3ByaXYgPSAodm9pZCAqKXBBZDsKLQlwQWQtPm5ldF9kZXYgPSBuZXRfZGV2OwotCi0JcmV0dXJuIG5ldF9kZXY7Ci0KLX0KLQotLyoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotUm91dGluZSBEZXNjcmlwdGlvbjoKLSAgICBUaGUgZW50cnkgcG9pbnQgZm9yIExpbnV4IGtlcm5lbCBzZW50IHBhY2tldCB0byBvdXIgZHJpdmVyLgotCi1Bcmd1bWVudHM6Ci0gICAgc2tfYnVmZiAqc2tiCQl0aGUgcG9pbnRlciByZWZlciB0byBhIHNrX2J1ZmZlci4KLQotUmV0dXJuIFZhbHVlOgotICAgIDAKLQotTm90ZToKLQlUaGlzIGZ1bmN0aW9uIGlzIHRoZSBlbnRyeSBwb2ludCBvZiBUeCBQYXRoIGZvciBPcyBkZWxpdmVyeSBwYWNrZXQgdG8KLQlvdXIgZHJpdmVyLiBZb3Ugb25seSBjYW4gcHV0IE9TLWRlcGVuZWQgJiBTVEEvQVAgY29tbW9uIGhhbmRsZSBwcm9jZWR1cmVzCi0JaW4gaGVyZS4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLWludCBydDI4eHhfcGFja2V0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IHNrYi0+ZGV2OwotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCA9IE5VTEw7Ci0JaW50IHN0YXR1cyA9IE5FVERFVl9UWF9PSzsKLQl2b2lkICpwUGFja2V0ID0gKHZvaWQgKilza2I7Ci0KLQlHRVRfUEFEX0ZST01fTkVUX0RFVihwQWQsIG5ldF9kZXYpOwotCi0JLyogUlQyODcwU1RBIGRvZXMgdGhpcyBpbiBSVE1QU2VuZFBhY2tldHMoKSAqLwotCi0JewotCQkvKiBEcm9wIHNlbmQgcmVxdWVzdCBzaW5jZSB3ZSBhcmUgaW4gbW9uaXRvciBtb2RlICovCi0JCWlmIChNT05JVE9SX09OKHBBZCkpIHsKLQkJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCX0KLQotCS8qIEVhcG9sU3RhcnQgc2l6ZSBpcyAxOCAqLwotCWlmIChza2ItPmxlbiA8IDE0KSB7Ci0JCS8qcHJpbnRrKCJiYWQgcGFja2V0IHNpemU6ICVkXG4iLCBwa3QtPmxlbik7ICovCi0JCWhleF9kdW1wKCJiYWQgcGFja2V0Iiwgc2tiLT5kYXRhLCBza2ItPmxlbik7Ci0JCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKLQkJZ290byBkb25lOwotCX0KLQotCVJUTVBfU0VUX1BBQ0tFVF81VlQocFBhY2tldCwgMCk7Ci0JU1RBU2VuZFBhY2tldHMoKHZvaWQgKilwQWQsICh2b2lkICoqKSZwUGFja2V0LCAxKTsKLQotCXN0YXR1cyA9IE5FVERFVl9UWF9PSzsKLWRvbmU6Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Sb3V0aW5lIERlc2NyaXB0aW9uOgotICAgIFNlbmQgYSBwYWNrZXQgdG8gV0xBTi4KLQotQXJndW1lbnRzOgotICAgIHNrYl9wICAgICAgICAgICBwb2ludHMgdG8gb3VyIGFkYXB0ZXIKLSAgICBkZXZfcCAgICAgICAgICAgd2hpY2ggV0xBTiBuZXR3b3JrIGludGVyZmFjZQotCi1SZXR1cm4gVmFsdWU6Ci0gICAgMDogdHJhbnNtaXQgc3VjY2Vzc2Z1bGx5Ci0gICAgb3RoZXJ3aXNlOiB0cmFuc21pdCBmYWlsCi0KLU5vdGU6Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi1zdGF0aWMgaW50IHJ0Mjh4eF9zZW5kX3BhY2tldHMoSU4gc3RydWN0IHNrX2J1ZmYgKnNrYl9wLAotCQkJICAgICAgIElOIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KQotewotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCA9IE5VTEw7Ci0KLQlHRVRfUEFEX0ZST01fTkVUX0RFVihwQWQsIG5ldF9kZXYpOwotCi0JaWYgKCEobmV0X2Rldi0+ZmxhZ3MgJiBJRkZfVVApKSB7Ci0JCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCAodm9pZCAqKXNrYl9wLAotCQkJCSAgICBORElTX1NUQVRVU19GQUlMVVJFKTsKLQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKLQl9Ci0KLQlOZGlzWmVyb01lbW9yeSgodTggKikmc2tiX3AtPmNiW0NCX09GRl0sIDE1KTsKLQlSVE1QX1NFVF9QQUNLRVRfTkVUX0RFVklDRV9NQlNTSUQoc2tiX3AsIE1BSU5fTUJTU0lEKTsKLQotCXJldHVybiBydDI4eHhfcGFja2V0X3htaXQoc2tiX3ApOwotfQotCi0vKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW4gcXVlcnkgL3Byb2MgKi8KLXN0cnVjdCBpd19zdGF0aXN0aWNzICpydDI4eHhfZ2V0X3dpcmVsZXNzX3N0YXRzKElOIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KQotewotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCA9IE5VTEw7Ci0KLQlHRVRfUEFEX0ZST01fTkVUX0RFVihwQWQsIG5ldF9kZXYpOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgicnQyOHh4X2dldF93aXJlbGVzc19zdGF0cyAtLS0+XG4iKSk7Ci0KLQlwQWQtPml3X3N0YXRzLnN0YXR1cyA9IDA7CS8qIFN0YXR1cyAtIGRldmljZSBkZXBlbmRlbnQgZm9yIG5vdyAqLwotCi0JLyogbGluayBxdWFsaXR5ICovCi0JaWYgKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpCi0JCXBBZC0+aXdfc3RhdHMucXVhbC5xdWFsID0KLQkJICAgICgocEFkLT5NbG1lLkNoYW5uZWxRdWFsaXR5ICogMTIpIC8gMTAgKyAxMCk7Ci0KLQlpZiAocEFkLT5pd19zdGF0cy5xdWFsLnF1YWwgPiAxMDApCi0JCXBBZC0+aXdfc3RhdHMucXVhbC5xdWFsID0gMTAwOwotCi0JaWYgKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpIHsKLQkJcEFkLT5pd19zdGF0cy5xdWFsLmxldmVsID0KLQkJICAgIFJUTVBNYXhSc3NpKHBBZCwgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTAsCi0JCQkJcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTEsCi0JCQkJcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTIpOwotCX0KLQotCXBBZC0+aXdfc3RhdHMucXVhbC5ub2lzZSA9IHBBZC0+QmJwV3JpdGVMYXRjaFs2Nl07CS8qIG5vaXNlIGxldmVsIChkQm0pICovCi0KLQlwQWQtPml3X3N0YXRzLnF1YWwubm9pc2UgKz0gMjU2IC0gMTQzOwotCXBBZC0+aXdfc3RhdHMucXVhbC51cGRhdGVkID0gMTsJLyogRmxhZ3MgdG8ga25vdyBpZiB1cGRhdGVkICovCi0jaWZkZWYgSVdfUVVBTF9EQk0KLQlwQWQtPml3X3N0YXRzLnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX0RCTTsJLyogTGV2ZWwgKyBOb2lzZSBhcmUgZEJtICovCi0jZW5kaWYgLyogSVdfUVVBTF9EQk0gLy8gKi8KLQotCXBBZC0+aXdfc3RhdHMuZGlzY2FyZC5ud2lkID0gMDsJLyogUnggOiBXcm9uZyBud2lkL2Vzc2lkICovCi0JcEFkLT5pd19zdGF0cy5taXNzLmJlYWNvbiA9IDA7CS8qIE1pc3NlZCBiZWFjb25zL3N1cGVyZnJhbWUgKi8KLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLS0gcnQyOHh4X2dldF93aXJlbGVzc19zdGF0c1xuIikpOwotCXJldHVybiAmcEFkLT5pd19zdGF0czsKLX0KLQotdm9pZCB0YnR0X3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQotewotLyojZGVmaW5lIE1BWF9UWF9JTl9UQlRUICAgICAgICAgICAgICAgICgxNikgKi8KLQotfQotCi0vKgotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0gICAgUm91dGluZSBEZXNjcmlwdGlvbjoKLQlyZXR1cm4gZXRoZXJuZXQgc3RhdGlzdGljcyBjb3VudGVyCi0KLSAgICBBcmd1bWVudHM6Ci0JbmV0X2RldgkJCQlQb2ludGVyIHRvIG5ldF9kZXZpY2UKLQotICAgIFJldHVybiBWYWx1ZToKLQluZXRfZGV2aWNlX3N0YXRzKgotCi0gICAgTm90ZToKLQotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqUlQyOHh4X2dldF9ldGhlcl9zdGF0cyhJTiBzdHJ1Y3QgbmV0X2RldmljZQotCQkJCQkJICAgICAgICpuZXRfZGV2KQotewotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCA9IE5VTEw7Ci0KLQlpZiAobmV0X2RldikKLQkJR0VUX1BBRF9GUk9NX05FVF9ERVYocEFkLCBuZXRfZGV2KTsKLQotCWlmIChwQWQpIHsKLQotCQlwQWQtPnN0YXRzLnJ4X3BhY2tldHMgPQotCQkgICAgcEFkLT5XbGFuQ291bnRlcnMuUmVjZWl2ZWRGcmFnbWVudENvdW50LlF1YWRQYXJ0OwotCQlwQWQtPnN0YXRzLnR4X3BhY2tldHMgPQotCQkgICAgcEFkLT5XbGFuQ291bnRlcnMuVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50LlF1YWRQYXJ0OwotCi0JCXBBZC0+c3RhdHMucnhfYnl0ZXMgPSBwQWQtPlJhbGlua0NvdW50ZXJzLlJlY2VpdmVkQnl0ZUNvdW50OwotCQlwQWQtPnN0YXRzLnR4X2J5dGVzID0gcEFkLT5SYWxpbmtDb3VudGVycy5UcmFuc21pdHRlZEJ5dGVDb3VudDsKLQotCQlwQWQtPnN0YXRzLnJ4X2Vycm9ycyA9IHBBZC0+Q291bnRlcnM4MDIzLlJ4RXJyb3JzOwotCQlwQWQtPnN0YXRzLnR4X2Vycm9ycyA9IHBBZC0+Q291bnRlcnM4MDIzLlR4RXJyb3JzOwotCi0JCXBBZC0+c3RhdHMucnhfZHJvcHBlZCA9IDA7Ci0JCXBBZC0+c3RhdHMudHhfZHJvcHBlZCA9IDA7Ci0KLQkJcEFkLT5zdGF0cy5tdWx0aWNhc3QgPSBwQWQtPldsYW5Db3VudGVycy5NdWx0aWNhc3RSZWNlaXZlZEZyYW1lQ291bnQuUXVhZFBhcnQ7CS8qIG11bHRpY2FzdCBwYWNrZXRzIHJlY2VpdmVkICovCi0JCXBBZC0+c3RhdHMuY29sbGlzaW9ucyA9IHBBZC0+Q291bnRlcnM4MDIzLk9uZUNvbGxpc2lvbiArIHBBZC0+Q291bnRlcnM4MDIzLk1vcmVDb2xsaXNpb25zOwkvKiBDb2xsaXNpb24gcGFja2V0cyAqLwotCi0JCXBBZC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycyA9IDA7Ci0JCXBBZC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMgPSBwQWQtPkNvdW50ZXJzODAyMy5SeE5vQnVmZmVyOwkvKiByZWNlaXZlciByaW5nIGJ1ZmYgb3ZlcmZsb3cgKi8KLQkJcEFkLT5zdGF0cy5yeF9jcmNfZXJyb3JzID0gMDsJLypwQWQtPldsYW5Db3VudGVycy5GQ1NFcnJvckNvdW50OyAgICAgLy8gcmVjdmVkIHBrdCB3aXRoIGNyYyBlcnJvciAqLwotCQlwQWQtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycyA9IHBBZC0+Q291bnRlcnM4MDIzLlJjdkFsaWdubWVudEVycm9yczsJLyogcmVjdidkIGZyYW1lIGFsaWdubWVudCBlcnJvciAqLwotCQlwQWQtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzID0gcEFkLT5Db3VudGVyczgwMjMuUnhOb0J1ZmZlcjsJLyogcmVjdidyIGZpZm8gb3ZlcnJ1biAqLwotCQlwQWQtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgPSAwOwkvKiByZWNlaXZlciBtaXNzZWQgcGFja2V0ICovCi0KLQkJLyogZGV0YWlsZWQgdHhfZXJyb3JzICovCi0JCXBBZC0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMgPSAwOwotCQlwQWQtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzID0gMDsKLQkJcEFkLT5zdGF0cy50eF9maWZvX2Vycm9ycyA9IDA7Ci0JCXBBZC0+c3RhdHMudHhfaGVhcnRiZWF0X2Vycm9ycyA9IDA7Ci0JCXBBZC0+c3RhdHMudHhfd2luZG93X2Vycm9ycyA9IDA7Ci0KLQkJLyogZm9yIGNzbGlwIGV0YyAqLwotCQlwQWQtPnN0YXRzLnJ4X2NvbXByZXNzZWQgPSAwOwotCQlwQWQtPnN0YXRzLnR4X2NvbXByZXNzZWQgPSAwOwotCi0JCXJldHVybiAmcEFkLT5zdGF0czsKLQl9IGVsc2UKLQkJcmV0dXJuIE5VTEw7Ci19Ci0KLUJPT0xFQU4gUnRtcFBoeU5ldERldkV4aXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldikKLXsKLQotCS8qIFVucmVnaXN0ZXIgbmV0d29yayBkZXZpY2UgKi8KLQlpZiAobmV0X2RldiAhPSBOVUxMKSB7Ci0JCXByaW50awotCQkgICAgKCJSdG1wT1NOZXREZXZEZXRhY2goKTogUnRtcE9TTmV0RGV2aWNlRGV0YWNoKCksIGRldi0+bmFtZT0lcyFcbiIsCi0JCSAgICAgbmV0X2Rldi0+bmFtZSk7Ci0JCVJ0bXBPU05ldERldkRldGFjaChuZXRfZGV2KTsKLQl9Ci0KLQlyZXR1cm4gVFJVRTsKLQotfQotCi0vKgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Sb3V0aW5lIERlc2NyaXB0aW9uOgotICAgIEFsbG9jYXRlIG1lbW9yeSBmb3IgYWRhcHRlciBjb250cm9sIGJsb2NrLgotCi1Bcmd1bWVudHM6Ci0gICAgcEFkCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCi0KLVJldHVybiBWYWx1ZToKLQlORElTX1NUQVRVU19TVUNDRVNTCi0JTkRJU19TVEFUVVNfRkFJTFVSRQotCU5ESVNfU1RBVFVTX1JFU09VUkNFUwotCi1Ob3RlOgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotaW50IEFkYXB0ZXJCbG9ja0FsbG9jYXRlTWVtb3J5KHZvaWQgKmhhbmRsZSwgdm9pZCAqKiBwcEFkKQotewotCi0JKnBwQWQgPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyKSk7Ci0JLyogcGNpX2FsbG9jX2NvbnNpc3RlbnQocGNpX2Rldiwgc2l6ZW9mKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIpLCBwaHlfYWRkcik7ICovCi0KLQlpZiAoKnBwQWQpIHsKLQkJTmRpc1plcm9NZW1vcnkoKnBwQWQsIHNpemVvZihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyKSk7Ci0JCSgoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqKSpwcEFkKS0+T1NfQ29va2llID0gaGFuZGxlOwotCQlyZXR1cm4gTkRJU19TVEFUVVNfU1VDQ0VTUzsKLQl9IGVsc2UgewotCQlyZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKLQl9Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X3BjaV9yYnVzLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X3BjaV9yYnVzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4MGFiNGUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9wY2lfcmJ1cy5jCisrKyAvZGV2L251bGwKQEAgLTEsODM3ICswLDAgQEAKLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUmFsaW5rIFRlY2ggSW5jLgotICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAotICogSHNpbmNodSBDb3VudHkgMzAyLAotICogVGFpd2FuLCBSLk8uQy4KLSAqCi0gKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0gICAgTW9kdWxlIE5hbWU6Ci0gICAgcnRfcGNpX3JidXMuYwotCi0gICAgQWJzdHJhY3Q6Ci0gICAgQ3JlYXRlIGFuZCByZWdpc3RlciBuZXR3b3JrIGludGVyZmFjZS4KLQotICAgIFJldmlzaW9uIEhpc3Rvcnk6Ci0gICAgV2hvICAgICAgICAgCVdoZW4gICAgICAgICAgICBXaGF0Ci0gICAgSnVzdGluIFAuIE1hdHRvY2sJMTEvMDcvMjAxMAlGaXggYSB0eXBvCi0gICAgLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSovCi0KLSNpbmNsdWRlICJydF9jb25maWcuaCIKLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLQotSVJRX0hBTkRMRV9UWVBFIHJ0Mjg2MF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKTsKLQotc3RhdGljIHZvaWQgcnhfZG9uZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci1zdGF0aWMgdm9pZCBtZ210X2RtYV9kb25lX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKLXN0YXRpYyB2b2lkIGFjMF9kbWFfZG9uZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci1zdGF0aWMgdm9pZCBhYzFfZG1hX2RvbmVfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpOwotc3RhdGljIHZvaWQgYWMyX2RtYV9kb25lX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKLXN0YXRpYyB2b2lkIGFjM19kbWFfZG9uZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci1zdGF0aWMgdm9pZCBmaWZvX3N0YXRpc3RpY19mdWxsX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogU3ltYm9sICYgTWFjcm8gRGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZSBSVDI4NjBfSU5UX1JYX0RMWQkJCQkoMTw8MCkJLyogYml0IDAgKi8KLSNkZWZpbmUgUlQyODYwX0lOVF9UWF9ETFkJCQkJKDE8PDEpCS8qIGJpdCAxICovCi0jZGVmaW5lIFJUMjg2MF9JTlRfUlhfRE9ORQkJCQkoMTw8MikJLyogYml0IDIgKi8KLSNkZWZpbmUgUlQyODYwX0lOVF9BQzBfRE1BX0RPTkUJCQkoMTw8MykJLyogYml0IDMgKi8KLSNkZWZpbmUgUlQyODYwX0lOVF9BQzFfRE1BX0RPTkUJCQkoMTw8NCkJLyogYml0IDQgKi8KLSNkZWZpbmUgUlQyODYwX0lOVF9BQzJfRE1BX0RPTkUJCQkoMTw8NSkJLyogYml0IDUgKi8KLSNkZWZpbmUgUlQyODYwX0lOVF9BQzNfRE1BX0RPTkUJCQkoMTw8NikJLyogYml0IDYgKi8KLSNkZWZpbmUgUlQyODYwX0lOVF9IQ0NBX0RNQV9ET05FCQkoMTw8NykJLyogYml0IDcgKi8KLSNkZWZpbmUgUlQyODYwX0lOVF9NR01UX0RPTkUJCQkoMTw8OCkJLyogYml0IDggKi8KLQotI2RlZmluZSBJTlRfUlgJCQlSVDI4NjBfSU5UX1JYX0RPTkUKLQotI2RlZmluZSBJTlRfQUMwX0RMWQkJKFJUMjg2MF9JTlRfQUMwX0RNQV9ET05FKQkvKnwgUlQyODYwX0lOVF9UWF9ETFkpICovCi0jZGVmaW5lIElOVF9BQzFfRExZCQkoUlQyODYwX0lOVF9BQzFfRE1BX0RPTkUpCS8qfCBSVDI4NjBfSU5UX1RYX0RMWSkgKi8KLSNkZWZpbmUgSU5UX0FDMl9ETFkJCShSVDI4NjBfSU5UX0FDMl9ETUFfRE9ORSkJLyp8IFJUMjg2MF9JTlRfVFhfRExZKSAqLwotI2RlZmluZSBJTlRfQUMzX0RMWQkJKFJUMjg2MF9JTlRfQUMzX0RNQV9ET05FKQkvKnwgUlQyODYwX0lOVF9UWF9ETFkpICovCi0jZGVmaW5lIElOVF9IQ0NBX0RMWQkoUlQyODYwX0lOVF9IQ0NBX0RNQV9ET05FKQkvKnwgUlQyODYwX0lOVF9UWF9ETFkpICovCi0jZGVmaW5lIElOVF9NR01UX0RMWQlSVDI4NjBfSU5UX01HTVRfRE9ORQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICoKLSAgKglJbnRlcmZhY2UtZGVwZW5kZWQgbWVtb3J5IGFsbG9jYXRpb24vRnJlZSByZWxhdGVkIHByb2NlZHVyZXMuCi0gICoJCU1haW5seSBmb3IgSGFyZHdhcmUgVHhEZXNjL1J4RGVzYy9NZ210RGVzYywgRE1BIE1lbW9yeSBmb3IgVHhEYXRhL1J4RGF0YSwgZXRjLiwKLSAgKgotICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEZ1bmN0aW9uIGZvciBUeERlc2MgTWVtb3J5IGFsbG9jYXRpb24uICovCi12b2lkIFJUTVBfQWxsb2NhdGVUeERlc2NNZW1vcnkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgICAgIHUzMiBJbmRleCwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIExlbmd0aCwKLQkJCSAgICAgICBJTiBCT09MRUFOIENhY2hlZCwKLQkJCSAgICAgICB2b2lkICoqVmlydHVhbEFkZHJlc3MsCi0JCQkgICAgICAgZG1hX2FkZHJfdCAqUGh5c2ljYWxBZGRyZXNzKQotewotCXN0cnVjdCBvc19jb29raWUgKnBPYmogPSAoc3RydWN0IG9zX2Nvb2tpZSAqKXBBZC0+T1NfQ29va2llOwotCi0JKlZpcnR1YWxBZGRyZXNzID0KLQkgICAgKHZvaWQgKilwY2lfYWxsb2NfY29uc2lzdGVudChwT2JqLT5wY2lfZGV2LCBzaXplb2YoY2hhcikgKiBMZW5ndGgsCi0JCQkJCSBQaHlzaWNhbEFkZHJlc3MpOwotCi19Ci0KLS8qIEZ1bmN0aW9uIGZvciBNZ210RGVzYyBNZW1vcnkgYWxsb2NhdGlvbi4gKi8KLXZvaWQgUlRNUF9BbGxvY2F0ZU1nbXREZXNjTWVtb3J5KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkgdW5zaWduZWQgbG9uZyBMZW5ndGgsCi0JCQkJIElOIEJPT0xFQU4gQ2FjaGVkLAotCQkJCSB2b2lkICoqVmlydHVhbEFkZHJlc3MsCi0JCQkJIGRtYV9hZGRyX3QgKlBoeXNpY2FsQWRkcmVzcykKLXsKLQlzdHJ1Y3Qgb3NfY29va2llICpwT2JqID0gKHN0cnVjdCBvc19jb29raWUgKilwQWQtPk9TX0Nvb2tpZTsKLQotCSpWaXJ0dWFsQWRkcmVzcyA9Ci0JICAgICh2b2lkICopcGNpX2FsbG9jX2NvbnNpc3RlbnQocE9iai0+cGNpX2Rldiwgc2l6ZW9mKGNoYXIpICogTGVuZ3RoLAotCQkJCQkgUGh5c2ljYWxBZGRyZXNzKTsKLQotfQotCi0vKiBGdW5jdGlvbiBmb3IgUnhEZXNjIE1lbW9yeSBhbGxvY2F0aW9uLiAqLwotdm9pZCBSVE1QX0FsbG9jYXRlUnhEZXNjTWVtb3J5KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIExlbmd0aCwKLQkJCSAgICAgICBJTiBCT09MRUFOIENhY2hlZCwKLQkJCSAgICAgICB2b2lkICoqVmlydHVhbEFkZHJlc3MsCi0JCQkgICAgICAgZG1hX2FkZHJfdCAqUGh5c2ljYWxBZGRyZXNzKQotewotCXN0cnVjdCBvc19jb29raWUgKnBPYmogPSAoc3RydWN0IG9zX2Nvb2tpZSAqKXBBZC0+T1NfQ29va2llOwotCi0JKlZpcnR1YWxBZGRyZXNzID0KLQkgICAgKHZvaWQgKilwY2lfYWxsb2NfY29uc2lzdGVudChwT2JqLT5wY2lfZGV2LCBzaXplb2YoY2hhcikgKiBMZW5ndGgsCi0JCQkJCSBQaHlzaWNhbEFkZHJlc3MpOwotCi19Ci0KLS8qIEZ1bmN0aW9uIGZvciBmcmVlIGFsbG9jYXRlZCBEZXNjIE1lbW9yeS4gKi8KLXZvaWQgUlRNUF9GcmVlRGVzY01lbW9yeShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgdW5zaWduZWQgbG9uZyBMZW5ndGgsCi0JCQkgdm9pZCAqVmlydHVhbEFkZHJlc3MsCi0JCQkgZG1hX2FkZHJfdCBQaHlzaWNhbEFkZHJlc3MpCi17Ci0Jc3RydWN0IG9zX2Nvb2tpZSAqcE9iaiA9IChzdHJ1Y3Qgb3NfY29va2llICopcEFkLT5PU19Db29raWU7Ci0KLQlwY2lfZnJlZV9jb25zaXN0ZW50KHBPYmotPnBjaV9kZXYsIExlbmd0aCwgVmlydHVhbEFkZHJlc3MsCi0JCQkgICAgUGh5c2ljYWxBZGRyZXNzKTsKLX0KLQotLyogRnVuY3Rpb24gZm9yIFR4RGF0YSBETUEgTWVtb3J5IGFsbG9jYXRpb24uICovCi12b2lkIFJUTVBfQWxsb2NhdGVGaXJzdFR4QnVmZmVyKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQl1MzIgSW5kZXgsCi0JCQkJdW5zaWduZWQgbG9uZyBMZW5ndGgsCi0JCQkJSU4gQk9PTEVBTiBDYWNoZWQsCi0JCQkJdm9pZCAqKlZpcnR1YWxBZGRyZXNzLAotCQkJCWRtYV9hZGRyX3QgKlBoeXNpY2FsQWRkcmVzcykKLXsKLQlzdHJ1Y3Qgb3NfY29va2llICpwT2JqID0gKHN0cnVjdCBvc19jb29raWUgKilwQWQtPk9TX0Nvb2tpZTsKLQotCSpWaXJ0dWFsQWRkcmVzcyA9Ci0JICAgICh2b2lkICopcGNpX2FsbG9jX2NvbnNpc3RlbnQocE9iai0+cGNpX2Rldiwgc2l6ZW9mKGNoYXIpICogTGVuZ3RoLAotCQkJCQkgUGh5c2ljYWxBZGRyZXNzKTsKLX0KLQotdm9pZCBSVE1QX0ZyZWVGaXJzdFR4QnVmZmVyKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICB1bnNpZ25lZCBsb25nIExlbmd0aCwKLQkJCSAgICBJTiBCT09MRUFOIENhY2hlZCwKLQkJCSAgICB2b2lkICpWaXJ0dWFsQWRkcmVzcywKLQkJCSAgICBkbWFfYWRkcl90IFBoeXNpY2FsQWRkcmVzcykKLXsKLQlzdHJ1Y3Qgb3NfY29va2llICpwT2JqID0gKHN0cnVjdCBvc19jb29raWUgKilwQWQtPk9TX0Nvb2tpZTsKLQotCXBjaV9mcmVlX2NvbnNpc3RlbnQocE9iai0+cGNpX2RldiwgTGVuZ3RoLCBWaXJ0dWFsQWRkcmVzcywKLQkJCSAgICBQaHlzaWNhbEFkZHJlc3MpOwotfQotCi0vKgotICogRlVOQ1RJT046IEFsbG9jYXRlIGEgY29tbW9uIGJ1ZmZlciBmb3IgRE1BCi0gKiBBUkdVTUVOVFM6Ci0gKiAgICAgQWRhcHRlckhhbmRsZTogIEFkYXB0ZXJIYW5kbGUKLSAqICAgICBMZW5ndGg6ICBOdW1iZXIgb2YgYnl0ZXMgdG8gYWxsb2NhdGUKLSAqICAgICBDYWNoZWQ6ICBXaGV0aGVyIG9yIG5vdCB0aGUgbWVtb3J5IGNhbiBiZSBjYWNoZWQKLSAqICAgICBWaXJ0dWFsQWRkcmVzczogIFBvaW50ZXIgdG8gbWVtb3J5IGlzIHJldHVybmVkIGhlcmUKLSAqICAgICBQaHlzaWNhbEFkZHJlc3M6ICBQaHlzaWNhbCBhZGRyZXNzIGNvcnJlc3BvbmRpbmcgdG8gdmlydHVhbCBhZGRyZXNzCi0gKi8KLXZvaWQgUlRNUF9BbGxvY2F0ZVNoYXJlZE1lbW9yeShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBMZW5ndGgsCi0JCQkgICAgICAgSU4gQk9PTEVBTiBDYWNoZWQsCi0JCQkgICAgICAgdm9pZCAqKlZpcnR1YWxBZGRyZXNzLAotCQkJICAgICAgIGRtYV9hZGRyX3QgKlBoeXNpY2FsQWRkcmVzcykKLXsKLQlzdHJ1Y3Qgb3NfY29va2llICpwT2JqID0gKHN0cnVjdCBvc19jb29raWUgKilwQWQtPk9TX0Nvb2tpZTsKLQotCSpWaXJ0dWFsQWRkcmVzcyA9Ci0JICAgICh2b2lkICopcGNpX2FsbG9jX2NvbnNpc3RlbnQocE9iai0+cGNpX2Rldiwgc2l6ZW9mKGNoYXIpICogTGVuZ3RoLAotCQkJCQkgUGh5c2ljYWxBZGRyZXNzKTsKLX0KLQotLyoKLSAqIEZVTkNUSU9OOiBBbGxvY2F0ZSBhIHBhY2tldCBidWZmZXIgZm9yIERNQQotICogQVJHVU1FTlRTOgotICogICAgIEFkYXB0ZXJIYW5kbGU6ICBBZGFwdGVySGFuZGxlCi0gKiAgICAgTGVuZ3RoOiAgTnVtYmVyIG9mIGJ5dGVzIHRvIGFsbG9jYXRlCi0gKiAgICAgQ2FjaGVkOiAgV2hldGhlciBvciBub3QgdGhlIG1lbW9yeSBjYW4gYmUgY2FjaGVkCi0gKiAgICAgVmlydHVhbEFkZHJlc3M6ICBQb2ludGVyIHRvIG1lbW9yeSBpcyByZXR1cm5lZCBoZXJlCi0gKiAgICAgUGh5c2ljYWxBZGRyZXNzOiAgUGh5c2ljYWwgYWRkcmVzcyBjb3JyZXNwb25kaW5nIHRvIHZpcnR1YWwgYWRkcmVzcwotICogTm90ZXM6Ci0gKiAgICAgQ2FjaGVkIGlzIGlnbm9yZWQ6IGFsd2F5cyBjYWNoZWQgbWVtb3J5Ci0gKi8KLXZvaWQgKlJUTVBfQWxsb2NhdGVSeFBhY2tldEJ1ZmZlcihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJCSB1bnNpZ25lZCBsb25nIExlbmd0aCwKLQkJCQkJIElOIEJPT0xFQU4gQ2FjaGVkLAotCQkJCQkgdm9pZCAqKlZpcnR1YWxBZGRyZXNzLAotCQkJCQkgT1VUIGRtYV9hZGRyX3QgKgotCQkJCQkgUGh5c2ljYWxBZGRyZXNzKQotewotCXN0cnVjdCBza19idWZmICpwa3Q7Ci0KLQlwa3QgPSBkZXZfYWxsb2Nfc2tiKExlbmd0aCk7Ci0KLQlpZiAocGt0ID09IE5VTEwpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkgKCJjYW4ndCBhbGxvY2F0ZSByeCAlbGQgc2l6ZSBwYWNrZXRcbiIsIExlbmd0aCkpOwotCX0KLQotCWlmIChwa3QpIHsKLQkJUlRNUF9TRVRfUEFDS0VUX1NPVVJDRShPU1BLVF9UT19SVFBLVChwa3QpLCBQS1RTUkNfTkRJUyk7Ci0JCSpWaXJ0dWFsQWRkcmVzcyA9ICh2b2lkICopcGt0LT5kYXRhOwotCQkqUGh5c2ljYWxBZGRyZXNzID0KLQkJICAgIFBDSV9NQVBfU0lOR0xFKHBBZCwgKlZpcnR1YWxBZGRyZXNzLCBMZW5ndGgsIC0xLAotCQkJCSAgIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JfSBlbHNlIHsKLQkJKlZpcnR1YWxBZGRyZXNzID0gKHZvaWQgKilOVUxMOwotCQkqUGh5c2ljYWxBZGRyZXNzID0gKGRtYV9hZGRyX3QpTlVMTDsKLQl9Ci0KLQlyZXR1cm4gKHZvaWQgKilwa3Q7Ci19Ci0KLXZvaWQgSW52YWxpZF9SZW1haW5pbmdfUGFja2V0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdW5zaWduZWQgbG9uZyBWaXJ0dWFsQWRkcmVzcykKLXsKLQlkbWFfYWRkcl90IFBoeXNpY2FsQWRkcmVzczsKLQotCVBoeXNpY2FsQWRkcmVzcyA9Ci0JICAgIFBDSV9NQVBfU0lOR0xFKHBBZCwgKHZvaWQgKikoVmlydHVhbEFkZHJlc3MgKyAxNjAwKSwKLQkJCSAgIFJYX0JVRkZFUl9OT1JNU0laRSAtIDE2MDAsIC0xLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotfQotCi1pbnQgUnRtcE5ldFRhc2tJbml0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlzdHJ1Y3Qgb3NfY29va2llICpwT2JqOwotCi0JcE9iaiA9IChzdHJ1Y3Qgb3NfY29va2llICopcEFkLT5PU19Db29raWU7Ci0KLQl0YXNrbGV0X2luaXQoJnBPYmotPnJ4X2RvbmVfdGFzaywgcnhfZG9uZV90YXNrbGV0LCAodW5zaWduZWQgbG9uZylwQWQpOwotCXRhc2tsZXRfaW5pdCgmcE9iai0+bWdtdF9kbWFfZG9uZV90YXNrLCBtZ210X2RtYV9kb25lX3Rhc2tsZXQsCi0JCSAgICAgKHVuc2lnbmVkIGxvbmcpcEFkKTsKLQl0YXNrbGV0X2luaXQoJnBPYmotPmFjMF9kbWFfZG9uZV90YXNrLCBhYzBfZG1hX2RvbmVfdGFza2xldCwKLQkJICAgICAodW5zaWduZWQgbG9uZylwQWQpOwotCXRhc2tsZXRfaW5pdCgmcE9iai0+YWMxX2RtYV9kb25lX3Rhc2ssIGFjMV9kbWFfZG9uZV90YXNrbGV0LAotCQkgICAgICh1bnNpZ25lZCBsb25nKXBBZCk7Ci0JdGFza2xldF9pbml0KCZwT2JqLT5hYzJfZG1hX2RvbmVfdGFzaywgYWMyX2RtYV9kb25lX3Rhc2tsZXQsCi0JCSAgICAgKHVuc2lnbmVkIGxvbmcpcEFkKTsKLQl0YXNrbGV0X2luaXQoJnBPYmotPmFjM19kbWFfZG9uZV90YXNrLCBhYzNfZG1hX2RvbmVfdGFza2xldCwKLQkJICAgICAodW5zaWduZWQgbG9uZylwQWQpOwotCXRhc2tsZXRfaW5pdCgmcE9iai0+dGJ0dF90YXNrLCB0YnR0X3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKXBBZCk7Ci0JdGFza2xldF9pbml0KCZwT2JqLT5maWZvX3N0YXRpc3RpY19mdWxsX3Rhc2ssCi0JCSAgICAgZmlmb19zdGF0aXN0aWNfZnVsbF90YXNrbGV0LCAodW5zaWduZWQgbG9uZylwQWQpOwotCi0JcmV0dXJuIE5ESVNfU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXZvaWQgUnRtcE5ldFRhc2tFeGl0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlzdHJ1Y3Qgb3NfY29va2llICpwT2JqOwotCi0JcE9iaiA9IChzdHJ1Y3Qgb3NfY29va2llICopcEFkLT5PU19Db29raWU7Ci0KLQl0YXNrbGV0X2tpbGwoJnBPYmotPnJ4X2RvbmVfdGFzayk7Ci0JdGFza2xldF9raWxsKCZwT2JqLT5tZ210X2RtYV9kb25lX3Rhc2spOwotCXRhc2tsZXRfa2lsbCgmcE9iai0+YWMwX2RtYV9kb25lX3Rhc2spOwotCXRhc2tsZXRfa2lsbCgmcE9iai0+YWMxX2RtYV9kb25lX3Rhc2spOwotCXRhc2tsZXRfa2lsbCgmcE9iai0+YWMyX2RtYV9kb25lX3Rhc2spOwotCXRhc2tsZXRfa2lsbCgmcE9iai0+YWMzX2RtYV9kb25lX3Rhc2spOwotCXRhc2tsZXRfa2lsbCgmcE9iai0+dGJ0dF90YXNrKTsKLQl0YXNrbGV0X2tpbGwoJnBPYmotPmZpZm9fc3RhdGlzdGljX2Z1bGxfdGFzayk7Ci19Ci0KLWludCBSdG1wTWdtdFRhc2tJbml0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQotCXJldHVybiBORElTX1NUQVRVU19TVUNDRVNTOwotfQotCi0vKgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Sb3V0aW5lIERlc2NyaXB0aW9uOgotICAgIENsb3NlIGtlcm5lbCB0aHJlYWRzLgotCi1Bcmd1bWVudHM6Ci0JKnBBZAkJCQl0aGUgcmF4eCBpbnRlcmZhY2UgZGF0YSBwb2ludGVyCi0KLVJldHVybiBWYWx1ZToKLSAgICBOT05FCi0KLU5vdGU6Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFJ0bXBNZ210VGFza0V4aXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcnQyODYwX2ludF9lbmFibGUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1bnNpZ25lZCBpbnQgbW9kZSkKLXsKLQl1MzIgcmVnVmFsdWU7Ci0KLQlwQWQtPmludF9kaXNhYmxlX21hc2sgJj0gfihtb2RlKTsKLQlyZWdWYWx1ZSA9IHBBZC0+aW50X2VuYWJsZV9yZWcgJiB+KHBBZC0+aW50X2Rpc2FibGVfbWFzayk7Ci0JLyppZiAoIU9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSkpICovCi0JewotCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBJTlRfTUFTS19DU1IsIHJlZ1ZhbHVlKTsJLyogMTplbmFibGUgKi8KLQl9Ci0JLyplbHNlICovCi0JLyogICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJmT1BfU1RBVFVTX0RPWkUgIVxuIikpOyAqLwotCi0JaWYgKHJlZ1ZhbHVlICE9IDApCi0JCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9BQ1RJVkUpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcnQyODYwX2ludF9kaXNhYmxlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdW5zaWduZWQgaW50IG1vZGUpCi17Ci0JdTMyIHJlZ1ZhbHVlOwotCi0JcEFkLT5pbnRfZGlzYWJsZV9tYXNrIHw9IG1vZGU7Ci0JcmVnVmFsdWUgPSBwQWQtPmludF9lbmFibGVfcmVnICYgfihwQWQtPmludF9kaXNhYmxlX21hc2spOwotCVJUTVBfSU9fV1JJVEUzMihwQWQsIElOVF9NQVNLX0NTUiwgcmVnVmFsdWUpOwkvKiAwOiBkaXNhYmxlICovCi0KLQlpZiAocmVnVmFsdWUgPT0gMCkgewotCQlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9BQ1RJVkUpOwotCX0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqCi0gICoJdGFza2xldCByZWxhdGVkIHByb2NlZHVyZXMuCi0gICoKLSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBtZ210X2RtYV9kb25lX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkID0gKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKilkYXRhOwotCUlOVF9TT1VSQ0VfQ1NSX1NUUlVDIEludFNvdXJjZTsKLQlzdHJ1Y3Qgb3NfY29va2llICpwT2JqOwotCi0JLyogRG8gbm90aGluZyBpZiB0aGUgZHJpdmVyIGlzIHN0YXJ0aW5nIGhhbHQgc3RhdGUuICovCi0JLyogVGhpcyBtaWdodCBoYXBwZW4gd2hlbiB0aW1lciBhbHJlYWR5IGJlZW4gZmlyZWQgYmVmb3JlIGNhbmNlbCB0aW1lciB3aXRoIG1sbWVoYWx0ICovCi0JaWYgKFJUTVBfVEVTVF9GTEFHCi0JICAgIChwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8IGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpCi0JCXJldHVybjsKLQotCXBPYmogPSAoc3RydWN0IG9zX2Nvb2tpZSAqKXBBZC0+T1NfQ29va2llOwotCi0vKiAgICAgIHByaW50aygibWdtdF9kbWFfZG9uZV9wcm9jZXNzXG4iKTsgKi8KLQlJbnRTb3VyY2Uud29yZCA9IDA7Ci0JSW50U291cmNlLmZpZWxkLk1nbXREbWFEb25lID0gMTsKLQlwQWQtPmludF9wZW5kaW5nICY9IH5JTlRfTUdNVF9ETFk7Ci0KLQlSVE1QSGFuZGxlTWdtdFJpbmdEbWFEb25lSW50ZXJydXB0KHBBZCk7Ci0KLQkvKiBpZiB5b3UgdXNlIFJUTVBfU0VNX0xPQ0ssIHNvbWV0aW1lcyBrZXJuZWwgd2lsbCBoYW5nIHVwLCB3aXRob3V0IGFueSAqLwotCS8qIGJ1ZyByZXBvcnQgb3V0cHV0ICovCi0JUlRNUF9JTlRfTE9DSygmcEFkLT5pcnFfbG9jaywgZmxhZ3MpOwotCS8qCi0JICogZG91YmxlIGNoZWNrIHRvIGF2b2lkIGxvc2Ugb2YgaW50ZXJydXB0cwotCSAqLwotCWlmIChwQWQtPmludF9wZW5kaW5nICYgSU5UX01HTVRfRExZKSB7Ci0JCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnBPYmotPm1nbXRfZG1hX2RvbmVfdGFzayk7Ci0JCVJUTVBfSU5UX1VOTE9DSygmcEFkLT5pcnFfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogZW5hYmxlIFR4RGF0YUludCBhZ2FpbiAqLwotCXJ0Mjg2MF9pbnRfZW5hYmxlKHBBZCwgSU5UX01HTVRfRExZKTsKLQlSVE1QX0lOVF9VTkxPQ0soJnBBZC0+aXJxX2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgcnhfZG9uZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCA9IChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICopZGF0YTsKLQlCT09MRUFOIGJSZXNjaGVkdWxlID0gMDsKLQlzdHJ1Y3Qgb3NfY29va2llICpwT2JqOwotCi0JLyogRG8gbm90aGluZyBpZiB0aGUgZHJpdmVyIGlzIHN0YXJ0aW5nIGhhbHQgc3RhdGUuICovCi0JLyogVGhpcyBtaWdodCBoYXBwZW4gd2hlbiB0aW1lciBhbHJlYWR5IGJlZW4gZmlyZWQgYmVmb3JlIGNhbmNlbCB0aW1lciB3aXRoIG1sbWVoYWx0ICovCi0JaWYgKFJUTVBfVEVTVF9GTEFHCi0JICAgIChwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8IGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpCi0JCXJldHVybjsKLQotCXBPYmogPSAoc3RydWN0IG9zX2Nvb2tpZSAqKXBBZC0+T1NfQ29va2llOwotCi0JcEFkLT5pbnRfcGVuZGluZyAmPSB+KElOVF9SWCk7Ci0JYlJlc2NoZWR1bGUgPSBTVEFSeERvbmVJbnRlcnJ1cHRIYW5kbGUocEFkLCAwKTsKLQotCVJUTVBfSU5UX0xPQ0soJnBBZC0+aXJxX2xvY2ssIGZsYWdzKTsKLQkvKgotCSAqIGRvdWJsZSBjaGVjayB0byBhdm9pZCByb3R0aW5nIHBhY2tldAotCSAqLwotCWlmIChwQWQtPmludF9wZW5kaW5nICYgSU5UX1JYIHx8IGJSZXNjaGVkdWxlKSB7Ci0JCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnBPYmotPnJ4X2RvbmVfdGFzayk7Ci0JCVJUTVBfSU5UX1VOTE9DSygmcEFkLT5pcnFfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogZW5hYmxlIFJ4aW50IGFnYWluICovCi0JcnQyODYwX2ludF9lbmFibGUocEFkLCBJTlRfUlgpOwotCVJUTVBfSU5UX1VOTE9DSygmcEFkLT5pcnFfbG9jaywgZmxhZ3MpOwotCi19Ci0KLXZvaWQgZmlmb19zdGF0aXN0aWNfZnVsbF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCA9IChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICopZGF0YTsKLQlzdHJ1Y3Qgb3NfY29va2llICpwT2JqOwotCi0JLyogRG8gbm90aGluZyBpZiB0aGUgZHJpdmVyIGlzIHN0YXJ0aW5nIGhhbHQgc3RhdGUuICovCi0JLyogVGhpcyBtaWdodCBoYXBwZW4gd2hlbiB0aW1lciBhbHJlYWR5IGJlZW4gZmlyZWQgYmVmb3JlIGNhbmNlbCB0aW1lciB3aXRoIG1sbWVoYWx0ICovCi0JaWYgKFJUTVBfVEVTVF9GTEFHCi0JICAgIChwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8IGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpCi0JCXJldHVybjsKLQotCXBPYmogPSAoc3RydWN0IG9zX2Nvb2tpZSAqKXBBZC0+T1NfQ29va2llOwotCi0JcEFkLT5pbnRfcGVuZGluZyAmPSB+KEZpZm9TdGFGdWxsSW50KTsKLQlOSUNVcGRhdGVGaWZvU3RhQ291bnRlcnMocEFkKTsKLQotCVJUTVBfSU5UX0xPQ0soJnBBZC0+aXJxX2xvY2ssIGZsYWdzKTsKLQkvKgotCSAqIGRvdWJsZSBjaGVjayB0byBhdm9pZCByb3R0aW5nIHBhY2tldAotCSAqLwotCWlmIChwQWQtPmludF9wZW5kaW5nICYgRmlmb1N0YUZ1bGxJbnQpIHsKLQkJdGFza2xldF9oaV9zY2hlZHVsZSgmcE9iai0+Zmlmb19zdGF0aXN0aWNfZnVsbF90YXNrKTsKLQkJUlRNUF9JTlRfVU5MT0NLKCZwQWQtPmlycV9sb2NrLCBmbGFncyk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBlbmFibGUgUnhpbnQgYWdhaW4gKi8KLQotCXJ0Mjg2MF9pbnRfZW5hYmxlKHBBZCwgRmlmb1N0YUZ1bGxJbnQpOwotCVJUTVBfSU5UX1VOTE9DSygmcEFkLT5pcnFfbG9jaywgZmxhZ3MpOwotCi19Ci0KLXN0YXRpYyB2b2lkIGFjM19kbWFfZG9uZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCA9IChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICopZGF0YTsKLQlJTlRfU09VUkNFX0NTUl9TVFJVQyBJbnRTb3VyY2U7Ci0Jc3RydWN0IG9zX2Nvb2tpZSAqcE9iajsKLQlCT09MRUFOIGJSZXNjaGVkdWxlID0gMDsKLQotCS8qIERvIG5vdGhpbmcgaWYgdGhlIGRyaXZlciBpcyBzdGFydGluZyBoYWx0IHN0YXRlLiAqLwotCS8qIFRoaXMgbWlnaHQgaGFwcGVuIHdoZW4gdGltZXIgYWxyZWFkeSBiZWVuIGZpcmVkIGJlZm9yZSBjYW5jZWwgdGltZXIgd2l0aCBtbG1laGFsdCAqLwotCWlmIChSVE1QX1RFU1RfRkxBRwotCSAgICAocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKQotCQlyZXR1cm47Ci0KLQlwT2JqID0gKHN0cnVjdCBvc19jb29raWUgKilwQWQtPk9TX0Nvb2tpZTsKLQotLyogICAgICBwcmludGsoImFjMF9kbWFfZG9uZV9wcm9jZXNzXG4iKTsgKi8KLQlJbnRTb3VyY2Uud29yZCA9IDA7Ci0JSW50U291cmNlLmZpZWxkLkFjM0RtYURvbmUgPSAxOwotCXBBZC0+aW50X3BlbmRpbmcgJj0gfklOVF9BQzNfRExZOwotCi0JYlJlc2NoZWR1bGUgPSBSVE1QSGFuZGxlVHhSaW5nRG1hRG9uZUludGVycnVwdChwQWQsIEludFNvdXJjZSk7Ci0KLQlSVE1QX0lOVF9MT0NLKCZwQWQtPmlycV9sb2NrLCBmbGFncyk7Ci0JLyoKLQkgKiBkb3VibGUgY2hlY2sgdG8gYXZvaWQgbG9zZSBvZiBpbnRlcnJ1cHRzCi0JICovCi0JaWYgKChwQWQtPmludF9wZW5kaW5nICYgSU5UX0FDM19ETFkpIHx8IGJSZXNjaGVkdWxlKSB7Ci0JCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnBPYmotPmFjM19kbWFfZG9uZV90YXNrKTsKLQkJUlRNUF9JTlRfVU5MT0NLKCZwQWQtPmlycV9sb2NrLCBmbGFncyk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBlbmFibGUgVHhEYXRhSW50IGFnYWluICovCi0JcnQyODYwX2ludF9lbmFibGUocEFkLCBJTlRfQUMzX0RMWSk7Ci0JUlRNUF9JTlRfVU5MT0NLKCZwQWQtPmlycV9sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFjMl9kbWFfZG9uZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCA9IChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICopZGF0YTsKLQlJTlRfU09VUkNFX0NTUl9TVFJVQyBJbnRTb3VyY2U7Ci0Jc3RydWN0IG9zX2Nvb2tpZSAqcE9iajsKLQlCT09MRUFOIGJSZXNjaGVkdWxlID0gMDsKLQotCS8qIERvIG5vdGhpbmcgaWYgdGhlIGRyaXZlciBpcyBzdGFydGluZyBoYWx0IHN0YXRlLiAqLwotCS8qIFRoaXMgbWlnaHQgaGFwcGVuIHdoZW4gdGltZXIgYWxyZWFkeSBiZWVuIGZpcmVkIGJlZm9yZSBjYW5jZWwgdGltZXIgd2l0aCBtbG1laGFsdCAqLwotCWlmIChSVE1QX1RFU1RfRkxBRwotCSAgICAocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKQotCQlyZXR1cm47Ci0KLQlwT2JqID0gKHN0cnVjdCBvc19jb29raWUgKilwQWQtPk9TX0Nvb2tpZTsKLQotCUludFNvdXJjZS53b3JkID0gMDsKLQlJbnRTb3VyY2UuZmllbGQuQWMyRG1hRG9uZSA9IDE7Ci0JcEFkLT5pbnRfcGVuZGluZyAmPSB+SU5UX0FDMl9ETFk7Ci0KLQliUmVzY2hlZHVsZSA9IFJUTVBIYW5kbGVUeFJpbmdEbWFEb25lSW50ZXJydXB0KHBBZCwgSW50U291cmNlKTsKLQotCVJUTVBfSU5UX0xPQ0soJnBBZC0+aXJxX2xvY2ssIGZsYWdzKTsKLQotCS8qCi0JICogZG91YmxlIGNoZWNrIHRvIGF2b2lkIGxvc2Ugb2YgaW50ZXJydXB0cwotCSAqLwotCWlmICgocEFkLT5pbnRfcGVuZGluZyAmIElOVF9BQzJfRExZKSB8fCBiUmVzY2hlZHVsZSkgewotCQl0YXNrbGV0X2hpX3NjaGVkdWxlKCZwT2JqLT5hYzJfZG1hX2RvbmVfdGFzayk7Ci0JCVJUTVBfSU5UX1VOTE9DSygmcEFkLT5pcnFfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogZW5hYmxlIFR4RGF0YUludCBhZ2FpbiAqLwotCXJ0Mjg2MF9pbnRfZW5hYmxlKHBBZCwgSU5UX0FDMl9ETFkpOwotCVJUTVBfSU5UX1VOTE9DSygmcEFkLT5pcnFfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBhYzFfZG1hX2RvbmVfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQgPSAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqKWRhdGE7Ci0JSU5UX1NPVVJDRV9DU1JfU1RSVUMgSW50U291cmNlOwotCXN0cnVjdCBvc19jb29raWUgKnBPYmo7Ci0JQk9PTEVBTiBiUmVzY2hlZHVsZSA9IDA7Ci0KLQkvKiBEbyBub3RoaW5nIGlmIHRoZSBkcml2ZXIgaXMgc3RhcnRpbmcgaGFsdCBzdGF0ZS4gKi8KLQkvKiBUaGlzIG1pZ2h0IGhhcHBlbiB3aGVuIHRpbWVyIGFscmVhZHkgYmVlbiBmaXJlZCBiZWZvcmUgY2FuY2VsIHRpbWVyIHdpdGggbWxtZWhhbHQgKi8KLQlpZiAoUlRNUF9URVNUX0ZMQUcKLQkgICAgKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkKLQkJcmV0dXJuOwotCi0JcE9iaiA9IChzdHJ1Y3Qgb3NfY29va2llICopcEFkLT5PU19Db29raWU7Ci0KLS8qICAgICAgcHJpbnRrKCJhYzBfZG1hX2RvbmVfcHJvY2Vzc1xuIik7ICovCi0JSW50U291cmNlLndvcmQgPSAwOwotCUludFNvdXJjZS5maWVsZC5BYzFEbWFEb25lID0gMTsKLQlwQWQtPmludF9wZW5kaW5nICY9IH5JTlRfQUMxX0RMWTsKLQotCWJSZXNjaGVkdWxlID0gUlRNUEhhbmRsZVR4UmluZ0RtYURvbmVJbnRlcnJ1cHQocEFkLCBJbnRTb3VyY2UpOwotCi0JUlRNUF9JTlRfTE9DSygmcEFkLT5pcnFfbG9jaywgZmxhZ3MpOwotCS8qCi0JICogZG91YmxlIGNoZWNrIHRvIGF2b2lkIGxvc2Ugb2YgaW50ZXJydXB0cwotCSAqLwotCWlmICgocEFkLT5pbnRfcGVuZGluZyAmIElOVF9BQzFfRExZKSB8fCBiUmVzY2hlZHVsZSkgewotCQl0YXNrbGV0X2hpX3NjaGVkdWxlKCZwT2JqLT5hYzFfZG1hX2RvbmVfdGFzayk7Ci0JCVJUTVBfSU5UX1VOTE9DSygmcEFkLT5pcnFfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogZW5hYmxlIFR4RGF0YUludCBhZ2FpbiAqLwotCXJ0Mjg2MF9pbnRfZW5hYmxlKHBBZCwgSU5UX0FDMV9ETFkpOwotCVJUTVBfSU5UX1VOTE9DSygmcEFkLT5pcnFfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBhYzBfZG1hX2RvbmVfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQgPSAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqKWRhdGE7Ci0JSU5UX1NPVVJDRV9DU1JfU1RSVUMgSW50U291cmNlOwotCXN0cnVjdCBvc19jb29raWUgKnBPYmo7Ci0JQk9PTEVBTiBiUmVzY2hlZHVsZSA9IDA7Ci0KLQkvKiBEbyBub3RoaW5nIGlmIHRoZSBkcml2ZXIgaXMgc3RhcnRpbmcgaGFsdCBzdGF0ZS4gKi8KLQkvKiBUaGlzIG1pZ2h0IGhhcHBlbiB3aGVuIHRpbWVyIGFscmVhZHkgYmVlbiBmaXJlZCBiZWZvcmUgY2FuY2VsIHRpbWVyIHdpdGggbWxtZWhhbHQgKi8KLQlpZiAoUlRNUF9URVNUX0ZMQUcKLQkgICAgKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkKLQkJcmV0dXJuOwotCi0JcE9iaiA9IChzdHJ1Y3Qgb3NfY29va2llICopcEFkLT5PU19Db29raWU7Ci0KLS8qICAgICAgcHJpbnRrKCJhYzBfZG1hX2RvbmVfcHJvY2Vzc1xuIik7ICovCi0JSW50U291cmNlLndvcmQgPSAwOwotCUludFNvdXJjZS5maWVsZC5BYzBEbWFEb25lID0gMTsKLQlwQWQtPmludF9wZW5kaW5nICY9IH5JTlRfQUMwX0RMWTsKLQotLyogICAgICBSVE1QSGFuZGxlTWdtdFJpbmdEbWFEb25lSW50ZXJydXB0KHBBZCk7ICovCi0JYlJlc2NoZWR1bGUgPSBSVE1QSGFuZGxlVHhSaW5nRG1hRG9uZUludGVycnVwdChwQWQsIEludFNvdXJjZSk7Ci0KLQlSVE1QX0lOVF9MT0NLKCZwQWQtPmlycV9sb2NrLCBmbGFncyk7Ci0JLyoKLQkgKiBkb3VibGUgY2hlY2sgdG8gYXZvaWQgbG9zZSBvZiBpbnRlcnJ1cHRzCi0JICovCi0JaWYgKChwQWQtPmludF9wZW5kaW5nICYgSU5UX0FDMF9ETFkpIHx8IGJSZXNjaGVkdWxlKSB7Ci0JCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnBPYmotPmFjMF9kbWFfZG9uZV90YXNrKTsKLQkJUlRNUF9JTlRfVU5MT0NLKCZwQWQtPmlycV9sb2NrLCBmbGFncyk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBlbmFibGUgVHhEYXRhSW50IGFnYWluICovCi0JcnQyODYwX2ludF9lbmFibGUocEFkLCBJTlRfQUMwX0RMWSk7Ci0JUlRNUF9JTlRfVU5MT0NLKCZwQWQtPmlycV9sb2NrLCBmbGFncyk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgKgotICAqCWludGVycnVwdCBoYW5kbGVyIHJlbGF0ZWQgcHJvY2VkdXJlcy4KLSAgKgotICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludCBwcmludF9pbnRfY291bnQ7Ci0KLUlSUV9IQU5ETEVfVFlQRSBydDI4NjBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRldl9pbnN0YW5jZTsKLQlzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQgPSBOVUxMOwotCUlOVF9TT1VSQ0VfQ1NSX1NUUlVDIEludFNvdXJjZTsKLQlzdHJ1Y3Qgb3NfY29va2llICpwT2JqOwotCi0JR0VUX1BBRF9GUk9NX05FVF9ERVYocEFkLCBuZXRfZGV2KTsKLQotCXBPYmogPSAoc3RydWN0IG9zX2Nvb2tpZSAqKXBBZC0+T1NfQ29va2llOwotCi0JLyogTm90ZSAwMzMxMjAwODogd2UgY2FuIG5vdCByZXR1cm4gaGVyZSBiZWZvcmUKLQkgICBSVE1QX0lPX1JFQUQzMihwQWQsIElOVF9TT1VSQ0VfQ1NSLCAmSW50U291cmNlLndvcmQpOwotCSAgIFJUTVBfSU9fV1JJVEUzMihwQWQsIElOVF9TT1VSQ0VfQ1NSLCBJbnRTb3VyY2Uud29yZCk7Ci0JICAgT3Iga2VybmVsIHdpbGwgcGFuaWMgYWZ0ZXIgaWZjb25maWcgcmEwIGRvd24gc29tZXRpbWVzICovCi0KLQkvKiAqLwotCS8qIEluaXRpYWwgdGhlIEludGVycnVwdCBzb3VyY2UuICovCi0JLyogKi8KLQlJbnRTb3VyY2Uud29yZCA9IDB4MDAwMDAwMDBMOwotLyogICAgICBNY3VJbnRTb3VyY2Uud29yZCA9IDB4MDAwMDAwMDBMOyAqLwotCi0JLyogKi8KLQkvKiBHZXQgdGhlIGludGVycnVwdCBzb3VyY2VzICYgc2F2ZWQgdG8gbG9jYWwgdmFyaWFibGUgKi8KLQkvKiAqLwotCS8qUlRNUF9JT19SRUFEMzIocEFkLCB3aGVyZSwgJk1jdUludFNvdXJjZS53b3JkKTsgKi8KLQkvKlJUTVBfSU9fV1JJVEUzMihwQWQsICwgTWN1SW50U291cmNlLndvcmQpOyAqLwotCi0JLyogKi8KLQkvKiBGbGFnIGZPUF9TVEFUVVNfRE9aRSBPbiwgbWVhbnMgQVNJQyBwdXQgdG8gc2xlZXAsIGVsYXNlIG1lYW5zIEFTSUNLIFdha2VVcCAqLwotCS8qIEFuZCBhdCB0aGUgc2FtZSB0aW1lLCBjbG9jayBtYXliZSB0dXJuZWQgb2ZmIHRoYXQgc2F5IHRoZXJlIGlzIG5vIERNQSBzZXJ2aWNlLiAqLwotCS8qIHdoZW4gQVNJQyBnZXQgdG8gc2xlZXAuICovCi0JLyogVG8gcHJldmVudCBzeXN0ZW0gaGFuZyBvbiBwb3dlciBzYXZpbmcuICovCi0JLyogV2UgbmVlZCB0byBjaGVjayBpdCBiZWZvcmUgaGFuZGxlIHRoZSBJTlRfU09VUkNFX0NTUiwgQVNJQyBtdXN0IGJlIHdha2UgdXAuICovCi0JLyogKi8KLQkvKiBSVDI2NjEgPT4gd2hlbiBBU0lDIGlzIHNsZWVwaW5nLCBNQUMgcmVnaXN0ZXIgY2Fubm90IGJlIHJlYWQgYW5kIHdyaXR0ZW4uICovCi0JLyogUlQyODYwID0+IHdoZW4gQVNJQyBpcyBzbGVlcGluZywgTUFDIHJlZ2lzdGVyIGNhbiBiZSByZWFkIGFuZCB3cml0dGVuLiAqLwotLyogICAgICBpZiAoIU9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSkpICovCi0JewotCQlSVE1QX0lPX1JFQUQzMihwQWQsIElOVF9TT1VSQ0VfQ1NSLCAmSW50U291cmNlLndvcmQpOwotCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBJTlRfU09VUkNFX0NTUiwgSW50U291cmNlLndvcmQpOwkvKiB3cml0ZSAxIHRvIGNsZWFyICovCi0JfQotLyogICAgICBlbHNlICovCi0vKiAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPj4+Zk9QX1NUQVRVU19ET1pFPDw8XG4iKSk7ICovCi0KLS8qICAgICAgUlRNUF9JT19SRUFEMzIocEFkLCBJTlRfU09VUkNFX0NTUiwgJklzckFmdGVyQ2xlYXIpOyAqLwotLyogICAgICBSVE1QX0lPX1JFQUQzMihwQWQsIE1DVV9JTlRfU09VUkNFX0NTUiwgJk1jdUlzckFmdGVyQ2xlYXIpOyAqLwotLyogICAgICBEQkdQUklOVChSVF9ERUJVR19JTkZPLCAoIj09PT0+IFJUTVBIYW5kbGVJbnRlcnJ1cHQoSVNSPSUwOHgsTWN1IElTUj0lMDh4LCBBZnRlciBjbGVhciBJU1I9JTA4eCwgTUNVIElTUj0lMDh4KVxuIiwgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgIEludFNvdXJjZS53b3JkLCBNY3VJbnRTb3VyY2Uud29yZCwgSXNyQWZ0ZXJDbGVhciwgTWN1SXNyQWZ0ZXJDbGVhcikpOyAqLwotCi0JLyogRG8gbm90aGluZyBpZiBSZXNldCBpbiBwcm9ncmVzcyAqLwotCWlmIChSVE1QX1RFU1RfRkxBRwotCSAgICAocEFkLAotCSAgICAgKGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MgfAotCSAgICAgIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUykpKSB7Ci0JCXJldHVybiBJUlFfSEFORExFRDsKLQl9Ci0JLyogKi8KLQkvKiBIYW5kbGUgaW50ZXJydXB0LCB3YWxrIHRocm91Z2ggYWxsIGJpdHMgKi8KLQkvKiBTaG91bGQgc3RhcnQgZnJvbSBoaWdoZXN0IHByaW9yaXR5IGludGVycnVwdCAqLwotCS8qIFRoZSBwcmlvcml0eSBjYW4gYmUgYWRqdXN0IGJ5IGFsdGVyaW5nIHByb2Nlc3NpbmcgaWYgc3RhdGVtZW50ICovCi0JLyogKi8KLQotI2lmZGVmIERCRwotCi0jZW5kaWYKLQotCXBBZC0+YlBDSWNsa09mZiA9IEZBTFNFOwotCi0JLyogSWYgcmVxdWlyZWQgc3BpbmxvY2ssIGVhY2ggaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSBoYXMgdG8gYWNxdWlyZSAqLwotCS8qIGFuZCByZWxlYXNlIGl0c2VsZi4gKi8KLQkvKiAqLwotCi0JLyogRG8gbm90aGluZyBpZiBOSUMgZG9lc24ndCBleGlzdCAqLwotCWlmIChJbnRTb3VyY2Uud29yZCA9PSAweGZmZmZmZmZmKSB7Ci0JCVJUTVBfU0VUX0ZMQUcocEFkLAotCQkJICAgICAgKGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCB8Ci0JCQkgICAgICAgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKSk7Ci0JCXJldHVybiBJUlFfSEFORExFRDsKLQl9Ci0KLQlpZiAoSW50U291cmNlLndvcmQgJiBUeENvaGVyZW50KSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIj4+PlR4Q29oZXJlbnQ8PDxcbiIpKTsKLQkJUlRNUEhhbmRsZVJ4Q29oZXJlbnRJbnRlcnJ1cHQocEFkKTsKLQl9Ci0KLQlpZiAoSW50U291cmNlLndvcmQgJiBSeENvaGVyZW50KSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIj4+PlJ4Q29oZXJlbnQ8PDxcbiIpKTsKLQkJUlRNUEhhbmRsZVJ4Q29oZXJlbnRJbnRlcnJ1cHQocEFkKTsKLQl9Ci0KLQlpZiAoSW50U291cmNlLndvcmQgJiBGaWZvU3RhRnVsbEludCkgewotCQlpZiAoKHBBZC0+aW50X2Rpc2FibGVfbWFzayAmIEZpZm9TdGFGdWxsSW50KSA9PSAwKSB7Ci0JCQkvKiBtYXNrIEZpZm9TdGFGdWxsSW50ICovCi0JCQlydDI4NjBfaW50X2Rpc2FibGUocEFkLCBGaWZvU3RhRnVsbEludCk7Ci0JCQl0YXNrbGV0X2hpX3NjaGVkdWxlKCZwT2JqLT5maWZvX3N0YXRpc3RpY19mdWxsX3Rhc2spOwotCQl9Ci0JCXBBZC0+aW50X3BlbmRpbmcgfD0gRmlmb1N0YUZ1bGxJbnQ7Ci0JfQotCi0JaWYgKEludFNvdXJjZS53b3JkICYgSU5UX01HTVRfRExZKSB7Ci0JCWlmICgocEFkLT5pbnRfZGlzYWJsZV9tYXNrICYgSU5UX01HTVRfRExZKSA9PSAwKSB7Ci0JCQlydDI4NjBfaW50X2Rpc2FibGUocEFkLCBJTlRfTUdNVF9ETFkpOwotCQkJdGFza2xldF9oaV9zY2hlZHVsZSgmcE9iai0+bWdtdF9kbWFfZG9uZV90YXNrKTsKLQkJfQotCQlwQWQtPmludF9wZW5kaW5nIHw9IElOVF9NR01UX0RMWTsKLQl9Ci0KLQlpZiAoSW50U291cmNlLndvcmQgJiBJTlRfUlgpIHsKLQkJaWYgKChwQWQtPmludF9kaXNhYmxlX21hc2sgJiBJTlRfUlgpID09IDApIHsKLQotCQkJLyogbWFzayBSeGludCAqLwotCQkJcnQyODYwX2ludF9kaXNhYmxlKHBBZCwgSU5UX1JYKTsKLQkJCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnBPYmotPnJ4X2RvbmVfdGFzayk7Ci0JCX0KLQkJcEFkLT5pbnRfcGVuZGluZyB8PSBJTlRfUlg7Ci0JfQotCi0JaWYgKEludFNvdXJjZS53b3JkICYgSU5UX0FDM19ETFkpIHsKLQotCQlpZiAoKHBBZC0+aW50X2Rpc2FibGVfbWFzayAmIElOVF9BQzNfRExZKSA9PSAwKSB7Ci0JCQkvKiBtYXNrIFR4RGF0YUludCAqLwotCQkJcnQyODYwX2ludF9kaXNhYmxlKHBBZCwgSU5UX0FDM19ETFkpOwotCQkJdGFza2xldF9oaV9zY2hlZHVsZSgmcE9iai0+YWMzX2RtYV9kb25lX3Rhc2spOwotCQl9Ci0JCXBBZC0+aW50X3BlbmRpbmcgfD0gSU5UX0FDM19ETFk7Ci0JfQotCi0JaWYgKEludFNvdXJjZS53b3JkICYgSU5UX0FDMl9ETFkpIHsKLQotCQlpZiAoKHBBZC0+aW50X2Rpc2FibGVfbWFzayAmIElOVF9BQzJfRExZKSA9PSAwKSB7Ci0JCQkvKiBtYXNrIFR4RGF0YUludCAqLwotCQkJcnQyODYwX2ludF9kaXNhYmxlKHBBZCwgSU5UX0FDMl9ETFkpOwotCQkJdGFza2xldF9oaV9zY2hlZHVsZSgmcE9iai0+YWMyX2RtYV9kb25lX3Rhc2spOwotCQl9Ci0JCXBBZC0+aW50X3BlbmRpbmcgfD0gSU5UX0FDMl9ETFk7Ci0JfQotCi0JaWYgKEludFNvdXJjZS53b3JkICYgSU5UX0FDMV9ETFkpIHsKLQotCQlwQWQtPmludF9wZW5kaW5nIHw9IElOVF9BQzFfRExZOwotCi0JCWlmICgocEFkLT5pbnRfZGlzYWJsZV9tYXNrICYgSU5UX0FDMV9ETFkpID09IDApIHsKLQkJCS8qIG1hc2sgVHhEYXRhSW50ICovCi0JCQlydDI4NjBfaW50X2Rpc2FibGUocEFkLCBJTlRfQUMxX0RMWSk7Ci0JCQl0YXNrbGV0X2hpX3NjaGVkdWxlKCZwT2JqLT5hYzFfZG1hX2RvbmVfdGFzayk7Ci0JCX0KLQotCX0KLQotCWlmIChJbnRTb3VyY2Uud29yZCAmIElOVF9BQzBfRExZKSB7Ci0KLS8qCi0JCWlmIChJbnRTb3VyY2Uud29yZCAmIDB4MikgewotCQkJdTMyIHJlZzsKLQkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgREVMQVlfSU5UX0NGRywgJnJlZyk7Ci0JCQlwcmludGsoIkludFNvdXJjZS53b3JkID0gJTA4eCwgREVMQVlfUkVHID0gJTA4eFxuIiwgSW50U291cmNlLndvcmQsIHJlZyk7Ci0JCX0KLSovCi0JCXBBZC0+aW50X3BlbmRpbmcgfD0gSU5UX0FDMF9ETFk7Ci0KLQkJaWYgKChwQWQtPmludF9kaXNhYmxlX21hc2sgJiBJTlRfQUMwX0RMWSkgPT0gMCkgewotCQkJLyogbWFzayBUeERhdGFJbnQgKi8KLQkJCXJ0Mjg2MF9pbnRfZGlzYWJsZShwQWQsIElOVF9BQzBfRExZKTsKLQkJCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnBPYmotPmFjMF9kbWFfZG9uZV90YXNrKTsKLQkJfQotCi0JfQotCi0JaWYgKEludFNvdXJjZS53b3JkICYgUHJlVEJUVEludCkgewotCQlSVE1QSGFuZGxlUHJlVEJUVEludGVycnVwdChwQWQpOwotCX0KLQotCWlmIChJbnRTb3VyY2Uud29yZCAmIFRCVFRJbnQpIHsKLQkJUlRNUEhhbmRsZVRCVFRJbnRlcnJ1cHQocEFkKTsKLQl9Ci0KLQl7Ci0JCWlmIChJbnRTb3VyY2Uud29yZCAmIEF1dG9XYWtldXBJbnQpCi0JCQlSVE1QSGFuZGxlVHdha2V1cEludGVycnVwdChwQWQpOwotCX0KLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotLyoKLSAqIGludmFsaWQgb3Igd3JpdGViYWNrIGNhY2hlCi0gKiBhbmQgY29udmVydCB2aXJ0dWFsIGFkZHJlc3MgdG8gcGh5c2ljYWwgYWRkcmVzcwotICovCi1kbWFfYWRkcl90IGxpbnV4X3BjaV9tYXBfc2luZ2xlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdm9pZCAqcHRyLAotCQkJCXNpemVfdCBzaXplLCBpbnQgc2RfaWR4LCBpbnQgZGlyZWN0aW9uKQotewotCXN0cnVjdCBvc19jb29raWUgKnBPYmo7Ci0KLQkvKgotCSAgIC0tLS0tLSBQb3J0aW5nIEluZm9ybWF0aW9uIC0tLS0tLQotCSAgID4gRm9yIFR4IEFsbG9jOgotCSAgIG1nbXQgcGFja2V0cyA9PiBzZF9pZHggPSAwCi0JICAgU3dJZHg6IHBBZC0+TWdtdFJpbmcuVHhDcHVJZHgKLQkgICBwVHhEIDogcEFkLT5NZ210UmluZy5DZWxsW1N3SWR4XS5BbGxvY1ZhOwotCi0JICAgZGF0YSBwYWNrZXRzID0+IHNkX2lkeCA9IDEKLQkgICBUeElkeCA6IHBBZC0+VHhSaW5nW3BUeEJsay0+UXVlSWR4XS5UeENwdUlkeAotCSAgIFF1ZUlkeDogcFR4QmxrLT5RdWVJZHgKLQkgICBwVHhEICA6IHBBZC0+VHhSaW5nW3BUeEJsay0+UXVlSWR4XS5DZWxsW1R4SWR4XS5BbGxvY1ZhOwotCi0JICAgPiBGb3IgUnggQWxsb2M6Ci0JICAgc2RfaWR4ID0gLTEKLQkgKi8KLQotCXBPYmogPSAoc3RydWN0IG9zX2Nvb2tpZSAqKXBBZC0+T1NfQ29va2llOwotCi0JaWYgKHNkX2lkeCA9PSAxKSB7Ci0JCXN0cnVjdCBydF90eF9ibGsgKnBUeEJsazsKLQkJcFR4QmxrID0gKHN0cnVjdCBydF90eF9ibGsgKilwdHI7Ci0JCXJldHVybiBwY2lfbWFwX3NpbmdsZShwT2JqLT5wY2lfZGV2LCBwVHhCbGstPnBTcmNCdWZEYXRhLAotCQkJCSAgICAgIHBUeEJsay0+U3JjQnVmTGVuLCBkaXJlY3Rpb24pOwotCX0gZWxzZSB7Ci0JCXJldHVybiBwY2lfbWFwX3NpbmdsZShwT2JqLT5wY2lfZGV2LCBwdHIsIHNpemUsIGRpcmVjdGlvbik7Ci0JfQotCi19Ci0KLXZvaWQgbGludXhfcGNpX3VubWFwX3NpbmdsZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIGRtYV9hZGRyX3QgZG1hX2FkZHIsCi0JCQkgICAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCi17Ci0Jc3RydWN0IG9zX2Nvb2tpZSAqcE9iajsKLQotCXBPYmogPSAoc3RydWN0IG9zX2Nvb2tpZSAqKXBBZC0+T1NfQ29va2llOwotCi0JcGNpX3VubWFwX3NpbmdsZShwT2JqLT5wY2lfZGV2LCBkbWFfYWRkciwgc2l6ZSwgZGlyZWN0aW9uKTsKLQotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF91c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfdXNiLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViMDM3ZDIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF91c2IuYworKysgL2Rldi9udWxsCkBAIC0xLDc5NCArMCwwIEBACi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFJhbGluayBUZWNoIEluYy4KLSAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKLSAqIEhzaW5jaHUgQ291bnR5IDMwMiwKLSAqIFRhaXdhbiwgUi5PLkMuCi0gKgotICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotCU1vZHVsZSBOYW1lOgotCXJ0dXNiX2J1bGsuYwotCi0JQWJzdHJhY3Q6Ci0KLQlSZXZpc2lvbiBIaXN0b3J5OgotCVdobwkJCVdoZW4JCVdoYXQKLQktLS0tLS0tLQktLS0tLS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlOYW1lCQkJRGF0ZQkJTW9kaWZpY2F0aW9uIGxvZ3MKLQlKdXN0aW4gUC4gTWF0dG9jawkxMS8wNy8yMDEwCUZpeCBzb21lIHR5cG9zLgotCi0qLwotCi0jaW5jbHVkZSAicnRfY29uZmlnLmgiCi0KLXZvaWQgZHVtcF91cmIoc3RydWN0IHVyYiAqcHVyYikKLXsKLQlwcmludGsoS0VSTl9ERUJVRyAidXJiICAgICAgICAgICAgICAgICAgOjB4JTA4bHhcbiIsICh1bnNpZ25lZCBsb25nKXB1cmIpOwotCXByaW50ayhLRVJOX0RFQlVHICJcdGRldiAgICAgICAgICAgICAgICAgICA6MHglMDhseFxuIiwgKHVuc2lnbmVkIGxvbmcpcHVyYi0+ZGV2KTsKLQlwcmludGsoS0VSTl9ERUJVRyAiXHRcdGRldi0+c3RhdGUgICAgICAgICAgOjB4JWRcbiIsIHB1cmItPmRldi0+c3RhdGUpOwotCXByaW50ayhLRVJOX0RFQlVHICJcdHBpcGUgICAgICAgICAgICAgICAgICA6MHglMDh4XG4iLCBwdXJiLT5waXBlKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiXHRzdGF0dXMgICAgICAgICAgICAgICAgOiVkXG4iLCBwdXJiLT5zdGF0dXMpOwotCXByaW50ayhLRVJOX0RFQlVHICJcdHRyYW5zZmVyX2ZsYWdzICAgICAgICA6MHglMDh4XG4iLCBwdXJiLT50cmFuc2Zlcl9mbGFncyk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIlx0dHJhbnNmZXJfYnVmZmVyICAgICAgIDoweCUwOGx4XG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZylwdXJiLT50cmFuc2Zlcl9idWZmZXIpOwotCXByaW50ayhLRVJOX0RFQlVHICJcdHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg6JWRcbiIsIHB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOwotCXByaW50ayhLRVJOX0RFQlVHICJcdGFjdHVhbF9sZW5ndGggICAgICAgICA6JWRcbiIsIHB1cmItPmFjdHVhbF9sZW5ndGgpOwotCXByaW50ayhLRVJOX0RFQlVHICJcdHNldHVwX3BhY2tldCAgICAgICAgICA6MHglMDhseFxuIiwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcpcHVyYi0+c2V0dXBfcGFja2V0KTsKLQlwcmludGsoS0VSTl9ERUJVRyAiXHRzdGFydF9mcmFtZSAgICAgICAgICAgOiVkXG4iLCBwdXJiLT5zdGFydF9mcmFtZSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIlx0bnVtYmVyX29mX3BhY2tldHMgICAgIDolZFxuIiwgcHVyYi0+bnVtYmVyX29mX3BhY2tldHMpOwotCXByaW50ayhLRVJOX0RFQlVHICJcdGludGVydmFsICAgICAgICAgICAgICA6JWRcbiIsIHB1cmItPmludGVydmFsKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiXHRlcnJvcl9jb3VudCAgICAgICAgICAgOiVkXG4iLCBwdXJiLT5lcnJvcl9jb3VudCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIlx0Y29udGV4dCAgICAgICAgICAgICAgIDoweCUwOGx4XG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZylwdXJiLT5jb250ZXh0KTsKLQlwcmludGsoS0VSTl9ERUJVRyAiXHRjb21wbGV0ZSAgICAgICAgICAgICAgOjB4JTA4bHhcblxuIiwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcpcHVyYi0+Y29tcGxldGUpOwotfQotCi0vKgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Sb3V0aW5lIERlc2NyaXB0aW9uOgotICAgIENyZWF0ZSBrZXJuZWwgdGhyZWFkcyAmIHRhc2tsZXRzLgotCi1Bcmd1bWVudHM6Ci0gICAgKm5ldF9kZXYJCQlQb2ludGVyIHRvIHdpcmVsZXNzIG5ldCBkZXZpY2UgaW50ZXJmYWNlCi0KLVJldHVybiBWYWx1ZToKLQlORElTX1NUQVRVU19TVUNDRVNTCi0JTkRJU19TVEFUVVNfRkFJTFVSRQotCi1Ob3RlOgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotaW50IFJ0bXBNZ210VGFza0luaXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCXN0cnVjdCBydF9ydG1wX29zX3Rhc2sgKnBUYXNrOwotCWludCBzdGF0dXM7Ci0KLQkvKgotCSAgIENyZWF0IFRpbWVyUSBUaHJlYWQsIFdlIG5lZWQgaW5pdCB0aW1lclEgcmVsYXRlZCBzdHJ1Y3R1cmUgYmVmb3JlIGNyZWF0ZSB0aGUgdGltZXIgdGhyZWFkLgotCSAqLwotCVJ0bXBUaW1lclFJbml0KHBBZCk7Ci0KLQlwVGFzayA9ICZwQWQtPnRpbWVyVGFzazsKLQlSdG1wT1NUYXNrSW5pdChwVGFzaywgIlJ0bXBUaW1lclRhc2siLCBwQWQpOwotCXN0YXR1cyA9IFJ0bXBPU1Rhc2tBdHRhY2gocFRhc2ssIFJ0bXBUaW1lclFUaHJlYWQsIHBUYXNrKTsKLQlpZiAoc3RhdHVzID09IE5ESVNfU1RBVFVTX0ZBSUxVUkUpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHVuYWJsZSB0byBzdGFydCBSdG1wVGltZXJRVGhyZWFkXG4iLAotCQkgICAgICAgUlRNUF9PU19ORVRERVZfR0VUX0RFVk5BTUUocEFkLT5uZXRfZGV2KSk7Ci0JCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOwotCX0KLQotCS8qIENyZWF0IE1MTUUgVGhyZWFkICovCi0JcFRhc2sgPSAmcEFkLT5tbG1lVGFzazsKLQlSdG1wT1NUYXNrSW5pdChwVGFzaywgIlJ0bXBNbG1lVGFzayIsIHBBZCk7Ci0Jc3RhdHVzID0gUnRtcE9TVGFza0F0dGFjaChwVGFzaywgTWxtZVRocmVhZCwgcFRhc2spOwotCWlmIChzdGF0dXMgPT0gTkRJU19TVEFUVVNfRkFJTFVSRSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdW5hYmxlIHRvIHN0YXJ0IE1sbWVUaHJlYWRcbiIsCi0JCSAgICAgICBSVE1QX09TX05FVERFVl9HRVRfREVWTkFNRShwQWQtPm5ldF9kZXYpKTsKLQkJcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7Ci0JfQotCi0JLyogQ3JlYXQgQ29tbWFuZCBUaHJlYWQgKi8KLQlwVGFzayA9ICZwQWQtPmNtZFFUYXNrOwotCVJ0bXBPU1Rhc2tJbml0KHBUYXNrLCAiUnRtcENtZFFUYXNrIiwgcEFkKTsKLQlzdGF0dXMgPSBSdG1wT1NUYXNrQXR0YWNoKHBUYXNrLCBSVFVTQkNtZFRocmVhZCwgcFRhc2spOwotCWlmIChzdGF0dXMgPT0gTkRJU19TVEFUVVNfRkFJTFVSRSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdW5hYmxlIHRvIHN0YXJ0IFJUVVNCQ21kVGhyZWFkXG4iLAotCQkgICAgICAgUlRNUF9PU19ORVRERVZfR0VUX0RFVk5BTUUocEFkLT5uZXRfZGV2KSk7Ci0JCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOwotCX0KLQotCXJldHVybiBORElTX1NUQVRVU19TVUNDRVNTOwotfQotCi0vKgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Sb3V0aW5lIERlc2NyaXB0aW9uOgotICAgIENsb3NlIGtlcm5lbCB0aHJlYWRzLgotCi1Bcmd1bWVudHM6Ci0JKnBBZAkJCQl0aGUgcmF4eCBpbnRlcmZhY2UgZGF0YSBwb2ludGVyCi0KLVJldHVybiBWYWx1ZToKLSAgICBOT05FCi0KLU5vdGU6Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFJ0bXBNZ210VGFza0V4aXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCWludCByZXQ7Ci0Jc3RydWN0IHJ0X3J0bXBfb3NfdGFzayAqcFRhc2s7Ci0KLQkvKiBTbGVlcCA1MCBtaWxsaXNlY29uZHMgc28gcGVuZGluZyBpbyBtaWdodCBmaW5pc2ggbm9ybWFsbHkgKi8KLQlSVE1QdXNlY0RlbGF5KDUwMDAwKTsKLQotCS8qIFdlIHdhbnQgdG8gd2FpdCB1bnRpbCBhbGwgcGVuZGluZyByZWNlaXZlcyBhbmQgc2VuZHMgdG8gdGhlICovCi0JLyogZGV2aWNlIG9iamVjdC4gV2UgY2FuY2VsIGFueSAqLwotCS8qIGlycHMuIFdhaXQgdW50aWwgc2VuZHMgYW5kIHJlY2VpdmVzIGhhdmUgc3RvcHBlZC4gKi8KLQlSVFVTQkNhbmNlbFBlbmRpbmdJUlBzKHBBZCk7Ci0KLQkvKiBXZSBuZWVkIGNsZWFyIHRpbWVyUSByZWxhdGVkIHN0cnVjdHVyZSBiZWZvcmUgZXhpdHMgb2YgdGhlIHRpbWVyIHRocmVhZC4gKi8KLQlSdG1wVGltZXJRRXhpdChwQWQpOwotCi0JLyogVGVybWluYXRlIE1sbWUgVGhyZWFkICovCi0JcFRhc2sgPSAmcEFkLT5tbG1lVGFzazsKLQlyZXQgPSBSdG1wT1NUYXNrS2lsbChwVGFzayk7Ci0JaWYgKHJldCA9PSBORElTX1NUQVRVU19GQUlMVVJFKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzOiBraWxsIHRhc2soJXMpIGZhaWxlZCFcbiIsCi0JCQkJCSAgUlRNUF9PU19ORVRERVZfR0VUX0RFVk5BTUUocEFkLT4KLQkJCQkJCQkJICAgICBuZXRfZGV2KSwKLQkJCQkJICBwVGFzay0+dGFza05hbWUpKTsKLQl9Ci0KLQkvKiBUZXJtaW5hdGUgY21kUSB0aHJlYWQgKi8KLQlwVGFzayA9ICZwQWQtPmNtZFFUYXNrOwotI2lmZGVmIEtUSFJFQURfU1VQUE9SVAotCWlmIChwVGFzay0+a3RocmVhZF90YXNrKQotI2Vsc2UKLQlDSEVDS19QSURfTEVHQUxJVFkocFRhc2stPnRhc2tQSUQpCi0jZW5kaWYKLQl7Ci0JCW1iKCk7Ci0JCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+Q21kUUxvY2spOwotCQlwQWQtPkNtZFEuQ21kUVN0YXRlID0gUlRNUF9UQVNLX1NUQVRfU1RPUEVEOwotCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPkNtZFFMb2NrKTsKLQkJbWIoKTsKLQkJLypSVFVTQkNNRFVwKHBBZCk7ICovCi0JCXJldCA9IFJ0bXBPU1Rhc2tLaWxsKHBUYXNrKTsKLQkJaWYgKHJldCA9PSBORElTX1NUQVRVU19GQUlMVVJFKSB7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIlczoga2lsbCB0YXNrKCVzKSBmYWlsZWQhXG4iLAotCQkJCQkJICBSVE1QX09TX05FVERFVl9HRVRfREVWTkFNRQotCQkJCQkJICAocEFkLT5uZXRfZGV2KSwKLQkJCQkJCSAgcFRhc2stPnRhc2tOYW1lKSk7Ci0JCX0KLQkJcEFkLT5DbWRRLkNtZFFTdGF0ZSA9IFJUTVBfVEFTS19TVEFUX1VOS05PV047Ci0JfQotCi0JLyogVGVybWluYXRlIHRpbWVyIHRocmVhZCAqLwotCXBUYXNrID0gJnBBZC0+dGltZXJUYXNrOwotCXJldCA9IFJ0bXBPU1Rhc2tLaWxsKHBUYXNrKTsKLQlpZiAocmV0ID09IE5ESVNfU1RBVFVTX0ZBSUxVUkUpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXM6IGtpbGwgdGFzayglcykgZmFpbGVkIVxuIiwKLQkJCQkJICBSVE1QX09TX05FVERFVl9HRVRfREVWTkFNRShwQWQtPgotCQkJCQkJCQkgICAgIG5ldF9kZXYpLAotCQkJCQkgIHBUYXNrLT50YXNrTmFtZSkpOwotCX0KLQotfQotCi1zdGF0aWMgdm9pZCBydHVzYl9kYXRhb3V0X2NvbXBsZXRlKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQ7Ci0Jc3RydWN0IHVyYiAqcFVyYjsKLQlzdHJ1Y3Qgb3NfY29va2llICpwT2JqOwotCXN0cnVjdCBydF9odF90eF9jb250ZXh0ICpwSFRUWENvbnRleHQ7Ci0JdTggQnVsa091dFBpcGVJZDsKLQlpbnQgU3RhdHVzOwotCXVuc2lnbmVkIGxvbmcgSXJxRmxhZ3M7Ci0KLQlwVXJiID0gKHN0cnVjdCB1cmIgKilkYXRhOwotCXBIVFRYQ29udGV4dCA9IChzdHJ1Y3QgcnRfaHRfdHhfY29udGV4dCAqKXBVcmItPmNvbnRleHQ7Ci0JcEFkID0gcEhUVFhDb250ZXh0LT5wQWQ7Ci0JcE9iaiA9IChzdHJ1Y3Qgb3NfY29va2llICopcEFkLT5PU19Db29raWU7Ci0JU3RhdHVzID0gcFVyYi0+c3RhdHVzOwotCi0JLyogU3RvcmUgQnVsa091dCBQaXBlSWQgKi8KLQlCdWxrT3V0UGlwZUlkID0gcEhUVFhDb250ZXh0LT5CdWxrT3V0UGlwZUlkOwotCXBBZC0+QnVsa091dERhdGFPbmVTZWNDb3VudCsrOwotCi0JLypEQkdQUklOVChSVF9ERUJVR19MT1VELCAoIkRvbmUtQiglZCk6ST0weCVseCwgQ1dQb3M9JWxkLCBOQlBvcz0lbGQsIEVOQlBvcz0lbGQsIGJDb3B5PSVkIVxuIiwgQnVsa091dFBpcGVJZCwgaW5faW50ZXJydXB0KCksIHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiwgKi8KLQkvKiAgICAgICAgICAgICAgcEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uLCBwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uLCBwSFRUWENvbnRleHQtPmJDb3B5U2F2ZVBhZCkpOyAqLwotCi0JUlRNUF9JUlFfTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOwotCXBBZC0+QnVsa091dFBlbmRpbmdbQnVsa091dFBpcGVJZF0gPSBGQUxTRTsKLQlwSFRUWENvbnRleHQtPklSUFBlbmRpbmcgPSBGQUxTRTsKLQlwQWQtPndhdGNoRG9nVHhQZW5kaW5nQ250W0J1bGtPdXRQaXBlSWRdID0gMDsKLQotCWlmIChTdGF0dXMgPT0gVVNCX1NUX05PRVJST1IpIHsKLQkJcEFkLT5CdWxrT3V0Q29tcGxldGUrKzsKLQotCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKLQotCQlwQWQtPkNvdW50ZXJzODAyMy5Hb29kVHJhbnNtaXRzKys7Ci0JCS8qUlRNUF9JUlFfTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsgKi8KLQkJRlJFRV9IVFRYX1JJTkcocEFkLCBCdWxrT3V0UGlwZUlkLCBwSFRUWENvbnRleHQpOwotCQkvKlJUTVBfSVJRX1VOTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsgKi8KLQotCX0gZWxzZSB7CQkvKiBTVEFUVVNfT1RIRVIgKi8KLQkJdTggKnBCdWY7Ci0KLQkJcEFkLT5CdWxrT3V0Q29tcGxldGVPdGhlcisrOwotCi0JCXBCdWYgPQotCQkgICAgJnBIVFRYQ29udGV4dC0+VHJhbnNmZXJCdWZmZXItPmZpZWxkLgotCQkgICAgV2lyZWxlc3NQYWNrZXRbcEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uXTsKLQotCQlpZiAoIVJUTVBfVEVTVF9GTEFHKHBBZCwgKGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MgfAotCQkJCQkgIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8Ci0JCQkJCSAgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUIHwKLQkJCQkJICBmUlRNUF9BREFQVEVSX0JVTEtPVVRfUkVTRVQpKSkgewotCQkJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCk7Ci0JCQlwQWQtPmJ1bGtSZXNldFBpcGVpZCA9IEJ1bGtPdXRQaXBlSWQ7Ci0JCQlwQWQtPmJ1bGtSZXNldFJlcVtCdWxrT3V0UGlwZUlkXSA9IHBBZC0+QnVsa091dFJlcTsKLQkJfQotCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKLQotCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsCi0JCQkgICAgICgiQnVsa091dERhdGFQYWNrZXQgZmFpbGVkOiBSZWFzb25Db2RlPSVkIVxuIiwKLQkJCSAgICAgIFN0YXR1cykpOwotCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsCi0JCQkgICAgICgiXHQ+PkJ1bGtPdXQgUmVxPTB4JWx4LCBDb21wbGV0ZT0weCVseCwgT3RoZXI9MHglbHhcbiIsCi0JCQkgICAgICBwQWQtPkJ1bGtPdXRSZXEsIHBBZC0+QnVsa091dENvbXBsZXRlLAotCQkJICAgICAgcEFkLT5CdWxrT3V0Q29tcGxldGVPdGhlcikpOwotCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsCi0JCQkgICAgICgiXHQ+PkJ1bGtPdXQgSGVhZGVyOiV4ICV4ICV4ICV4ICV4ICV4ICV4ICV4XG4iLAotCQkJICAgICAgcEJ1ZlswXSwgcEJ1ZlsxXSwgcEJ1ZlsyXSwgcEJ1ZlszXSwgcEJ1Zls0XSwKLQkJCSAgICAgIHBCdWZbNV0sIHBCdWZbNl0sIHBCdWZbN10pKTsKLQkJLypEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICgiPj5CdWxrT3V0Q29tcGxldGVDYW5jZWw9MHgleCwgQnVsa091dENvbXBsZXRlT3RoZXI9MHgleFxuIiwgcEFkLT5CdWxrT3V0Q29tcGxldGVDYW5jZWwsIHBBZC0+QnVsa091dENvbXBsZXRlT3RoZXIpKTsgKi8KLQotCX0KLQotCS8qICovCi0JLyogYkluVXNlID0gVFJVRSwgbWVhbnMgc29tZSBwcm9jZXNzIGFyZSBmaWxsaW5nIFRYIGRhdGEsIGFmdGVyIHRoYXQgbXVzdCB0dXJuIG9uIGJXYWl0aW5nQnVsa091dCAqLwotCS8qIGJXYWl0aW5nQnVsa091dCA9IFRSVUUsIG1lYW5zIHRoZSBUWCBkYXRhIGFyZSB3YWl0aW5nIGZvciBidWxrIG91dC4gKi8KLQkvKiAqLwotCS8qUlRNUF9JUlFfTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsgKi8KLQlpZiAoKHBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gIT0KLQkgICAgIHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbikKLQkgICAgJiYgKHBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gIT0KLQkJKHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiArIDgpKQotCSAgICAmJiAhUlRVU0JfVEVTVF9CVUxLX0ZMQUcocEFkLAotCQkJCSAgICAgKGZSVFVTQl9CVUxLX09VVF9EQVRBX0ZSQUcgPDwKLQkJCQkgICAgICBCdWxrT3V0UGlwZUlkKSkpIHsKLQkJLyogSW5kaWNhdGUgVGhlcmUgaXMgZGF0YSBhdmFpbGFibGUgKi8KLQkJUlRVU0JfU0VUX0JVTEtfRkxBRyhwQWQsCi0JCQkJICAgIChmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUwgPDwKLQkJCQkgICAgIEJ1bGtPdXRQaXBlSWQpKTsKLQl9Ci0JLypSVE1QX0lSUV9VTkxPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFncyk7ICovCi0KLQkvKiBBbHdheXMgY2FsbCBCdWxrIHJvdXRpbmUsIGV2ZW4gcmVzZXQgYnVsay4gKi8KLQkvKiBUaGUgcHJvdGVjdGlvbiBvZiByZXN0IGJ1bGsgc2hvdWxkIGJlIGluIEJ1bGtPdXQgcm91dGluZSAqLwotCVJUVVNCS2lja0J1bGtPdXQocEFkKTsKLX0KLQotc3RhdGljIHZvaWQgcnR1c2JfbnVsbF9mcmFtZV9kb25lX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZDsKLQlzdHJ1Y3QgcnRfdHhfY29udGV4dCAqcE51bGxDb250ZXh0OwotCXN0cnVjdCB1cmIgKnBVcmI7Ci0JaW50IFN0YXR1czsKLQl1bnNpZ25lZCBsb25nIGlycUZsYWc7Ci0KLQlwVXJiID0gKHN0cnVjdCB1cmIgKilkYXRhOwotCXBOdWxsQ29udGV4dCA9IChzdHJ1Y3QgcnRfdHhfY29udGV4dCAqKXBVcmItPmNvbnRleHQ7Ci0JcEFkID0gcE51bGxDb250ZXh0LT5wQWQ7Ci0JU3RhdHVzID0gcFVyYi0+c3RhdHVzOwotCi0JLyogUmVzZXQgTnVsbCBmcmFtZSBjb250ZXh0IGZsYWdzICovCi0JUlRNUF9JUlFfTE9DSygmcEFkLT5CdWxrT3V0TG9ja1swXSwgaXJxRmxhZyk7Ci0JcE51bGxDb250ZXh0LT5JUlBQZW5kaW5nID0gRkFMU0U7Ci0JcE51bGxDb250ZXh0LT5JblVzZSA9IEZBTFNFOwotCXBBZC0+QnVsa091dFBlbmRpbmdbMF0gPSBGQUxTRTsKLQlwQWQtPndhdGNoRG9nVHhQZW5kaW5nQ250WzBdID0gMDsKLQotCWlmIChTdGF0dXMgPT0gVVNCX1NUX05PRVJST1IpIHsKLQkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrWzBdLCBpcnFGbGFnKTsKLQotCQlSVE1QRGVRdWV1ZVBhY2tldChwQWQsIEZBTFNFLCBOVU1fT0ZfVFhfUklORywgTUFYX1RYX1BST0NFU1MpOwotCX0gZWxzZSB7CQkvKiBTVEFUVVNfT1RIRVIgKi8KLQkJaWYgKCghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTKSkgJiYKLQkJICAgICghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpKSAmJgotCQkgICAgKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpICYmCi0JCSAgICAoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKSkpIHsKLQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwKLQkJCQkgICAgICgiQnVsayBPdXQgTnVsbCBGcmFtZSBGYWlsZWQsIFJlYXNvbkNvZGU9JWQhXG4iLAotCQkJCSAgICAgIFN0YXR1cykpOwotCQkJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCk7Ci0JCQlwQWQtPmJ1bGtSZXNldFBpcGVpZCA9Ci0JCQkgICAgKE1HTVRQSVBFSURYIHwgQlVMS09VVF9NR01UX1JFU0VUX0ZMQUcpOwotCQkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrWzBdLCBpcnFGbGFnKTsKLQkJCVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKHBBZCwgQ01EVEhSRUFEX1JFU0VUX0JVTEtfT1VULAotCQkJCQkJTlVMTCwgMCk7Ci0JCX0gZWxzZSB7Ci0JCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbMF0sIGlycUZsYWcpOwotCQl9Ci0JfQotCi0JLyogQWx3YXlzIGNhbGwgQnVsayByb3V0aW5lLCBldmVuIHJlc2V0IGJ1bGsuICovCi0JLyogVGhlIHByb3RlY3Rpb24gb2YgcmVzdCBidWxrIHNob3VsZCBiZSBpbiBCdWxrT3V0IHJvdXRpbmUgKi8KLQlSVFVTQktpY2tCdWxrT3V0KHBBZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0dXNiX3J0c19mcmFtZV9kb25lX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZDsKLQlzdHJ1Y3QgcnRfdHhfY29udGV4dCAqcFJUU0NvbnRleHQ7Ci0Jc3RydWN0IHVyYiAqcFVyYjsKLQlpbnQgU3RhdHVzOwotCXVuc2lnbmVkIGxvbmcgaXJxRmxhZzsKLQotCXBVcmIgPSAoc3RydWN0IHVyYiAqKWRhdGE7Ci0JcFJUU0NvbnRleHQgPSAoc3RydWN0IHJ0X3R4X2NvbnRleHQgKilwVXJiLT5jb250ZXh0OwotCXBBZCA9IHBSVFNDb250ZXh0LT5wQWQ7Ci0JU3RhdHVzID0gcFVyYi0+c3RhdHVzOwotCi0JLyogUmVzZXQgUlRTIGZyYW1lIGNvbnRleHQgZmxhZ3MgKi8KLQlSVE1QX0lSUV9MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrWzBdLCBpcnFGbGFnKTsKLQlwUlRTQ29udGV4dC0+SVJQUGVuZGluZyA9IEZBTFNFOwotCXBSVFNDb250ZXh0LT5JblVzZSA9IEZBTFNFOwotCi0JaWYgKFN0YXR1cyA9PSBVU0JfU1RfTk9FUlJPUikgewotCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbMF0sIGlycUZsYWcpOwotCQlSVE1QRGVRdWV1ZVBhY2tldChwQWQsIEZBTFNFLCBOVU1fT0ZfVFhfUklORywgTUFYX1RYX1BST0NFU1MpOwotCX0gZWxzZSB7CQkvKiBTVEFUVVNfT1RIRVIgKi8KLQkJaWYgKCghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTKSkgJiYKLQkJICAgICghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpKSAmJgotCQkgICAgKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpICYmCi0JCSAgICAoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKSkpIHsKLQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwKLQkJCQkgICAgICgiQnVsayBPdXQgUlRTIEZyYW1lIEZhaWxlZFxuIikpOwotCQkJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCk7Ci0JCQlwQWQtPmJ1bGtSZXNldFBpcGVpZCA9Ci0JCQkgICAgKE1HTVRQSVBFSURYIHwgQlVMS09VVF9NR01UX1JFU0VUX0ZMQUcpOwotCQkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrWzBdLCBpcnFGbGFnKTsKLQkJCVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKHBBZCwgQ01EVEhSRUFEX1JFU0VUX0JVTEtfT1VULAotCQkJCQkJTlVMTCwgMCk7Ci0JCX0gZWxzZSB7Ci0JCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbMF0sIGlycUZsYWcpOwotCQl9Ci0JfQotCi0JUlRNUF9TRU1fTE9DSygmcEFkLT5CdWxrT3V0TG9ja1twUlRTQ29udGV4dC0+QnVsa091dFBpcGVJZF0pOwotCXBBZC0+QnVsa091dFBlbmRpbmdbcFJUU0NvbnRleHQtPkJ1bGtPdXRQaXBlSWRdID0gRkFMU0U7Ci0JUlRNUF9TRU1fVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW3BSVFNDb250ZXh0LT5CdWxrT3V0UGlwZUlkXSk7Ci0KLQkvKiBBbHdheXMgY2FsbCBCdWxrIHJvdXRpbmUsIGV2ZW4gcmVzZXQgYnVsay4gKi8KLQkvKiBUaGUgcHJvdGVjdGlvbiBvZiByZXN0IGJ1bGsgc2hvdWxkIGJlIGluIEJ1bGtPdXQgcm91dGluZSAqLwotCVJUVVNCS2lja0J1bGtPdXQocEFkKTsKLQotfQotCi1zdGF0aWMgdm9pZCBydHVzYl9wc3BvbGxfZnJhbWVfZG9uZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQ7Ci0Jc3RydWN0IHJ0X3R4X2NvbnRleHQgKnBQc1BvbGxDb250ZXh0OwotCXN0cnVjdCB1cmIgKnBVcmI7Ci0JaW50IFN0YXR1czsKLQotCXBVcmIgPSAoc3RydWN0IHVyYiAqKWRhdGE7Ci0JcFBzUG9sbENvbnRleHQgPSAoc3RydWN0IHJ0X3R4X2NvbnRleHQgKilwVXJiLT5jb250ZXh0OwotCXBBZCA9IHBQc1BvbGxDb250ZXh0LT5wQWQ7Ci0JU3RhdHVzID0gcFVyYi0+c3RhdHVzOwotCi0JLyogUmVzZXQgUHNQb2xsIGNvbnRleHQgZmxhZ3MgKi8KLQlwUHNQb2xsQ29udGV4dC0+SVJQUGVuZGluZyA9IEZBTFNFOwotCXBQc1BvbGxDb250ZXh0LT5JblVzZSA9IEZBTFNFOwotCXBBZC0+d2F0Y2hEb2dUeFBlbmRpbmdDbnRbMF0gPSAwOwotCi0JaWYgKFN0YXR1cyA9PSBVU0JfU1RfTk9FUlJPUikgewotCQlSVE1QRGVRdWV1ZVBhY2tldChwQWQsIEZBTFNFLCBOVU1fT0ZfVFhfUklORywgTUFYX1RYX1BST0NFU1MpOwotCX0gZWxzZSB7CQkvKiBTVEFUVVNfT1RIRVIgKi8KLQkJaWYgKCghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTKSkgJiYKLQkJICAgICghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpKSAmJgotCQkgICAgKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpICYmCi0JCSAgICAoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKSkpIHsKLQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwKLQkJCQkgICAgICgiQnVsayBPdXQgUFNQb2xsIEZhaWxlZFxuIikpOwotCQkJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCk7Ci0JCQlwQWQtPmJ1bGtSZXNldFBpcGVpZCA9Ci0JCQkgICAgKE1HTVRQSVBFSURYIHwgQlVMS09VVF9NR01UX1JFU0VUX0ZMQUcpOwotCQkJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBDTURUSFJFQURfUkVTRVRfQlVMS19PVVQsCi0JCQkJCQlOVUxMLCAwKTsKLQkJfQotCX0KLQotCVJUTVBfU0VNX0xPQ0soJnBBZC0+QnVsa091dExvY2tbMF0pOwotCXBBZC0+QnVsa091dFBlbmRpbmdbMF0gPSBGQUxTRTsKLQlSVE1QX1NFTV9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbMF0pOwotCi0JLyogQWx3YXlzIGNhbGwgQnVsayByb3V0aW5lLCBldmVuIHJlc2V0IGJ1bGsuICovCi0JLyogVGhlIHByb3RlY3Rpb24gb2YgcmVzdCBidWxrIHNob3VsZCBiZSBpbiBCdWxrT3V0IHJvdXRpbmUgKi8KLQlSVFVTQktpY2tCdWxrT3V0KHBBZCk7Ci0KLX0KLQotLyoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotUm91dGluZSBEZXNjcmlwdGlvbjoKLSAgICBIYW5kbGUgcmVjZWl2ZWQgcGFja2V0cy4KLQotQXJndW1lbnRzOgotCWRhdGEJCQkJLSBVUkIgaW5mb3JtYXRpb24gcG9pbnRlcgotCi1SZXR1cm4gVmFsdWU6Ci0gICAgTm9uZQotCi1Ob3RlOgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotc3RhdGljIHZvaWQgcnhfZG9uZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgdXJiICpwVXJiOwotCXN0cnVjdCBydF9yeF9jb250ZXh0ICpwUnhDb250ZXh0OwotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZDsKLQlpbnQgU3RhdHVzOwotCXVuc2lnbmVkIGludCBJcnFGbGFnczsKLQotCXBVcmIgPSAoc3RydWN0IHVyYiAqKWRhdGE7Ci0JcFJ4Q29udGV4dCA9IChzdHJ1Y3QgcnRfcnhfY29udGV4dCAqKXBVcmItPmNvbnRleHQ7Ci0JcEFkID0gcFJ4Q29udGV4dC0+cEFkOwotCVN0YXR1cyA9IHBVcmItPnN0YXR1czsKLQotCVJUTVBfSVJRX0xPQ0soJnBBZC0+QnVsa0luTG9jaywgSXJxRmxhZ3MpOwotCXBSeENvbnRleHQtPkluVXNlID0gRkFMU0U7Ci0JcFJ4Q29udGV4dC0+SVJQUGVuZGluZyA9IEZBTFNFOwotCXBSeENvbnRleHQtPkJ1bGtJbk9mZnNldCArPSBwVXJiLT5hY3R1YWxfbGVuZ3RoOwotCS8qTmRpc0ludGVybG9ja2VkRGVjcmVtZW50KCZwQWQtPlBlbmRpbmdSeCk7ICovCi0JcEFkLT5QZW5kaW5nUngtLTsKLQotCWlmIChTdGF0dXMgPT0gVVNCX1NUX05PRVJST1IpIHsKLQkJcEFkLT5CdWxrSW5Db21wbGV0ZSsrOwotCQlwQWQtPk5leHRSeEJ1bGtJblBvc2l0aW9uID0gMDsKLQkJaWYgKHBSeENvbnRleHQtPkJ1bGtJbk9mZnNldCkgeyAvKiBBcyBqYW4ncyBjb21tZW50LCBpdCBtYXkgYnVsay1pbiBzdWNjZXNzIGJ1dCBzaXplIGlzIHplcm8uICovCi0JCQlwUnhDb250ZXh0LT5SZWFkYWJsZSA9IFRSVUU7Ci0JCQlJTkNfUklOR19JTkRFWChwQWQtPk5leHRSeEJ1bGtJbkluZGV4LCBSWF9SSU5HX1NJWkUpOwotCQl9Ci0JCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrSW5Mb2NrLCBJcnFGbGFncyk7Ci0JfSBlbHNlIHsJCQkvKiBTVEFUVVNfT1RIRVIgKi8KLQkJcEFkLT5CdWxrSW5Db21wbGV0ZUZhaWwrKzsKLQkJLyogU3RpbGwgcmVhZCB0aGlzIHBhY2tldCBhbHRob3VnaCBpdCBtYXkgY29tdGFpbiB3cm9uZyBieXRlcy4gKi8KLQkJcFJ4Q29udGV4dC0+UmVhZGFibGUgPSBGQUxTRTsKLQkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtJbkxvY2ssIElycUZsYWdzKTsKLQotCQkvKiBQYXJzaW5nIGFsbCBwYWNrZXRzLiBiZWNhdXNlIGFmdGVyIHJlc2V0LCB0aGUgaW5kZXggd2lsbCByZXNldCB0byBhbGwgemVyby4gKi8KLQkJaWYgKCghUlRNUF9URVNUX0ZMQUcocEFkLCAoZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUyB8Ci0JCQkJCSAgIGZSVE1QX0FEQVBURVJfQlVMS0lOX1JFU0VUIHwKLQkJCQkJICAgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwKLQkJCQkJICAgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpKSB7Ci0KLQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwKLQkJCQkgICAgICgiQnVsayBJbiBGYWlsZWQuIFN0YXR1cz0lZCwgQklJZHg9MHgleCwgQklSSWR4PTB4JXgsIGFjdHVhbF9sZW5ndGg9IDB4JXhcbiIsCi0JCQkJICAgICAgU3RhdHVzLCBwQWQtPk5leHRSeEJ1bGtJbkluZGV4LAotCQkJCSAgICAgIHBBZC0+TmV4dFJ4QnVsa0luUmVhZEluZGV4LAotCQkJCSAgICAgIHBSeENvbnRleHQtPnBVcmItPmFjdHVhbF9sZW5ndGgpKTsKLQotCQkJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS0lOX1JFU0VUKTsKLQkJCVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKHBBZCwgQ01EVEhSRUFEX1JFU0VUX0JVTEtfSU4sCi0JCQkJCQlOVUxMLCAwKTsKLQkJfQotCX0KLQotCUFTU0VSVCgocFJ4Q29udGV4dC0+SW5Vc2UgPT0gcFJ4Q29udGV4dC0+SVJQUGVuZGluZykpOwotCi0JUlRVU0JCdWxrUmVjZWl2ZShwQWQpOwotCi0JcmV0dXJuOwotCi19Ci0KLXN0YXRpYyB2b2lkIHJ0dXNiX21nbXRfZG1hX2RvbmVfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkOwotCXN0cnVjdCBydF90eF9jb250ZXh0ICpwTUxNRUNvbnRleHQ7Ci0JaW50IGluZGV4OwotCXZvaWQgKnBQYWNrZXQ7Ci0Jc3RydWN0IHVyYiAqcFVyYjsKLQlpbnQgU3RhdHVzOwotCXVuc2lnbmVkIGxvbmcgSXJxRmxhZ3M7Ci0KLQlwVXJiID0gKHN0cnVjdCB1cmIgKilkYXRhOwotCXBNTE1FQ29udGV4dCA9IChzdHJ1Y3QgcnRfdHhfY29udGV4dCAqKXBVcmItPmNvbnRleHQ7Ci0JcEFkID0gcE1MTUVDb250ZXh0LT5wQWQ7Ci0JU3RhdHVzID0gcFVyYi0+c3RhdHVzOwotCWluZGV4ID0gcE1MTUVDb250ZXh0LT5TZWxmSWR4OwotCi0JQVNTRVJUKChwQWQtPk1nbXRSaW5nLlR4RG1hSWR4ID09IGluZGV4KSk7Ci0KLQlSVE1QX0lSUV9MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW01HTVRQSVBFSURYXSwgSXJxRmxhZ3MpOwotCi0JaWYgKFN0YXR1cyAhPSBVU0JfU1RfTk9FUlJPUikgewotCQkvKkJ1bGstT3V0IGZhaWwgc3RhdHVzIGhhbmRsZSAqLwotCQlpZiAoKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MpKSAmJgotCQkgICAgKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUykpICYmCi0JCSAgICAoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkgJiYKLQkJICAgICghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JVTEtPVVRfUkVTRVQpKSkgewotCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLAotCQkJCSAgICAgKCJCdWxrIE91dCBNTE1FIEZhaWxlZCwgU3RhdHVzPSVkIVxuIiwKLQkJCQkgICAgICBTdGF0dXMpKTsKLQkJCS8qIFRPRE86IEhvdyB0byBoYW5kbGUgYWJvdXQgdGhlIE1MTUVCdWxrT3V0IGZhaWxlZCBpc3N1ZS4gTmVlZCB0byByZXNlbmQgdGhlIG1nbXQgcGt0PyAqLwotCQkJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCk7Ci0JCQlwQWQtPmJ1bGtSZXNldFBpcGVpZCA9Ci0JCQkgICAgKE1HTVRQSVBFSURYIHwgQlVMS09VVF9NR01UX1JFU0VUX0ZMQUcpOwotCQl9Ci0JfQotCi0JcEFkLT5CdWxrT3V0UGVuZGluZ1tNR01UUElQRUlEWF0gPSBGQUxTRTsKLQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbTUdNVFBJUEVJRFhdLCBJcnFGbGFncyk7Ci0KLQlSVE1QX0lSUV9MT0NLKCZwQWQtPk1MTUVCdWxrT3V0TG9jaywgSXJxRmxhZ3MpOwotCS8qIFJlc2V0IE1MTUUgY29udGV4dCBmbGFncyAqLwotCXBNTE1FQ29udGV4dC0+SVJQUGVuZGluZyA9IEZBTFNFOwotCXBNTE1FQ29udGV4dC0+SW5Vc2UgPSBGQUxTRTsKLQlwTUxNRUNvbnRleHQtPmJXYWl0aW5nQnVsa091dCA9IEZBTFNFOwotCXBNTE1FQ29udGV4dC0+QnVsa091dFNpemUgPSAwOwotCi0JcFBhY2tldCA9IHBBZC0+TWdtdFJpbmcuQ2VsbFtpbmRleF0ucE5kaXNQYWNrZXQ7Ci0JcEFkLT5NZ210UmluZy5DZWxsW2luZGV4XS5wTmRpc1BhY2tldCA9IE5VTEw7Ci0KLQkvKiBJbmNyZWFzZSBNZ210UmluZyBJbmRleCAqLwotCUlOQ19SSU5HX0lOREVYKHBBZC0+TWdtdFJpbmcuVHhEbWFJZHgsIE1HTVRfUklOR19TSVpFKTsKLQlwQWQtPk1nbXRSaW5nLlR4U3dGcmVlSWR4Kys7Ci0JUlRNUF9JUlFfVU5MT0NLKCZwQWQtPk1MTUVCdWxrT3V0TG9jaywgSXJxRmxhZ3MpOwotCi0JLyogTm8tbWF0dGVyIHN1Y2Nlc3Mgb3IgZmFpbCwgd2UgZnJlZSB0aGUgbWdtdCBwYWNrZXQuICovCi0JaWYgKHBQYWNrZXQpCi0JCVJUTVBGcmVlTmRpc1BhY2tldChwQWQsIHBQYWNrZXQpOwotCi0JaWYgKChSVE1QX1RFU1RfRkxBRyhwQWQsIChmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTIHwKLQkJCQkgIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8Ci0JCQkJICBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSkpIHsKLQkJLyogZG8gbm90aGluZyBhbmQgcmV0dXJuIGRpcmVjdGx5LiAqLwotCX0gZWxzZSB7Ci0JCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCkgJiYgKChwQWQtPmJ1bGtSZXNldFBpcGVpZCAmIEJVTEtPVVRfTUdNVF9SRVNFVF9GTEFHKSA9PSBCVUxLT1VUX01HTVRfUkVTRVRfRkxBRykpIHsJLyogRm9yIE1nbXQgQnVsay1PdXQgZmFpbGVkLCBpZ25vcmUgaXQgbm93LiAqLwotCQkJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBDTURUSFJFQURfUkVTRVRfQlVMS19PVVQsCi0JCQkJCQlOVUxMLCAwKTsKLQkJfSBlbHNlIHsKLQotCQkJLyogQWx3YXlzIGNhbGwgQnVsayByb3V0aW5lLCBldmVuIHJlc2V0IGJ1bGsuICovCi0JCQkvKiBUaGUgcHJvdGVjdGlvbiBvZiByZXN0IGJ1bGsgc2hvdWxkIGJlIGluIEJ1bGtPdXQgcm91dGluZSAqLwotCQkJaWYgKHBBZC0+TWdtdFJpbmcuVHhTd0ZyZWVJZHggPAotCQkJICAgIE1HTVRfUklOR19TSVpFCi0JCQkgICAgLyogcE1MTUVDb250ZXh0LT5iV2FpdGluZ0J1bGtPdXQgPT0gVFJVRSAqLykgewotCQkJCVJUVVNCX1NFVF9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfTUxNRSk7Ci0JCQl9Ci0JCQlSVFVTQktpY2tCdWxrT3V0KHBBZCk7Ci0JCX0KLQl9Ci0KLX0KLQotc3RhdGljIHZvaWQgcnR1c2JfYWMzX2RtYV9kb25lX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZDsKLQlzdHJ1Y3QgcnRfaHRfdHhfY29udGV4dCAqcEhUVFhDb250ZXh0OwotCXU4IEJ1bGtPdXRQaXBlSWQgPSAzOwotCXN0cnVjdCB1cmIgKnBVcmI7Ci0KLQlwVXJiID0gKHN0cnVjdCB1cmIgKilkYXRhOwotCXBIVFRYQ29udGV4dCA9IChzdHJ1Y3QgcnRfaHRfdHhfY29udGV4dCAqKXBVcmItPmNvbnRleHQ7Ci0JcEFkID0gcEhUVFhDb250ZXh0LT5wQWQ7Ci0KLQlydHVzYl9kYXRhb3V0X2NvbXBsZXRlKCh1bnNpZ25lZCBsb25nKXBVcmIpOwotCi0JaWYgKChSVE1QX1RFU1RfRkxBRyhwQWQsIChmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTIHwKLQkJCQkgIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8Ci0JCQkJICBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSkpIHsKLQkJLyogZG8gbm90aGluZyBhbmQgcmV0dXJuIGRpcmVjdGx5LiAqLwotCX0gZWxzZSB7Ci0JCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCkpIHsKLQkJCVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKHBBZCwgQ01EVEhSRUFEX1JFU0VUX0JVTEtfT1VULAotCQkJCQkJTlVMTCwgMCk7Ci0JCX0gZWxzZSB7Ci0JCQlwSFRUWENvbnRleHQgPSAmcEFkLT5UeENvbnRleHRbQnVsa091dFBpcGVJZF07Ci0JCQlpZiAoKHBBZC0+VHhTd1F1ZXVlW0J1bGtPdXRQaXBlSWRdLk51bWJlciA+IDApICYmCi0JCQkgICAgLyooKHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiA+IChwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24gKyAweDYwMDApKSB8fCAocEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uID4gcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uICsgMHg2MDAwKSkgJiYgKi8KLQkJCSAgICAocEFkLT5EZVF1ZXVlUnVubmluZ1tCdWxrT3V0UGlwZUlkXSA9PSBGQUxTRSkgJiYKLQkJCSAgICAocEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZyA9PSBGQUxTRSkpIHsKLQkJCQlSVE1QRGVRdWV1ZVBhY2tldChwQWQsIEZBTFNFLCBCdWxrT3V0UGlwZUlkLAotCQkJCQkJICBNQVhfVFhfUFJPQ0VTUyk7Ci0JCQl9Ci0KLQkJCVJUVVNCX1NFVF9CVUxLX0ZMQUcocEFkLAotCQkJCQkgICAgZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMIDw8IDMpOwotCQkJUlRVU0JLaWNrQnVsa091dChwQWQpOwotCQl9Ci0JfQotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBydHVzYl9hYzJfZG1hX2RvbmVfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkOwotCXN0cnVjdCBydF9odF90eF9jb250ZXh0ICpwSFRUWENvbnRleHQ7Ci0JdTggQnVsa091dFBpcGVJZCA9IDI7Ci0Jc3RydWN0IHVyYiAqcFVyYjsKLQotCXBVcmIgPSAoc3RydWN0IHVyYiAqKWRhdGE7Ci0JcEhUVFhDb250ZXh0ID0gKHN0cnVjdCBydF9odF90eF9jb250ZXh0ICopcFVyYi0+Y29udGV4dDsKLQlwQWQgPSBwSFRUWENvbnRleHQtPnBBZDsKLQotCXJ0dXNiX2RhdGFvdXRfY29tcGxldGUoKHVuc2lnbmVkIGxvbmcpcFVyYik7Ci0KLQlpZiAoKFJUTVBfVEVTVF9GTEFHKHBBZCwgKGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MgfAotCQkJCSAgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwKLQkJCQkgIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKSkgewotCQkvKiBkbyBub3RoaW5nIGFuZCByZXR1cm4gZGlyZWN0bHkuICovCi0JfSBlbHNlIHsKLQkJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKSkgewotCQkJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBDTURUSFJFQURfUkVTRVRfQlVMS19PVVQsCi0JCQkJCQlOVUxMLCAwKTsKLQkJfSBlbHNlIHsKLQkJCXBIVFRYQ29udGV4dCA9ICZwQWQtPlR4Q29udGV4dFtCdWxrT3V0UGlwZUlkXTsKLQkJCWlmICgocEFkLT5UeFN3UXVldWVbQnVsa091dFBpcGVJZF0uTnVtYmVyID4gMCkgJiYKLQkJCSAgICAvKigocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uID4gKHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbiArIDB4NjAwMCkpIHx8IChwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24gPiBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gKyAweDYwMDApKSAmJiAqLwotCQkJICAgIChwQWQtPkRlUXVldWVSdW5uaW5nW0J1bGtPdXRQaXBlSWRdID09IEZBTFNFKSAmJgotCQkJICAgIChwSFRUWENvbnRleHQtPmJDdXJXcml0aW5nID09IEZBTFNFKSkgewotCQkJCVJUTVBEZVF1ZXVlUGFja2V0KHBBZCwgRkFMU0UsIEJ1bGtPdXRQaXBlSWQsCi0JCQkJCQkgIE1BWF9UWF9QUk9DRVNTKTsKLQkJCX0KLQotCQkJUlRVU0JfU0VUX0JVTEtfRkxBRyhwQWQsCi0JCQkJCSAgICBmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUwgPDwgMik7Ci0JCQlSVFVTQktpY2tCdWxrT3V0KHBBZCk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0dXNiX2FjMV9kbWFfZG9uZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQ7Ci0Jc3RydWN0IHJ0X2h0X3R4X2NvbnRleHQgKnBIVFRYQ29udGV4dDsKLQl1OCBCdWxrT3V0UGlwZUlkID0gMTsKLQlzdHJ1Y3QgdXJiICpwVXJiOwotCi0JcFVyYiA9IChzdHJ1Y3QgdXJiICopZGF0YTsKLQlwSFRUWENvbnRleHQgPSAoc3RydWN0IHJ0X2h0X3R4X2NvbnRleHQgKilwVXJiLT5jb250ZXh0OwotCXBBZCA9IHBIVFRYQ29udGV4dC0+cEFkOwotCi0JcnR1c2JfZGF0YW91dF9jb21wbGV0ZSgodW5zaWduZWQgbG9uZylwVXJiKTsKLQotCWlmICgoUlRNUF9URVNUX0ZMQUcocEFkLCAoZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUyB8Ci0JCQkJICBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfAotCQkJCSAgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpKSB7Ci0JCS8qIGRvIG5vdGhpbmcgYW5kIHJldHVybiBkaXJlY3RseS4gKi8KLQl9IGVsc2UgewotCQlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JVTEtPVVRfUkVTRVQpKSB7Ci0JCQlSVFVTQkVucXVldWVJbnRlcm5hbENtZChwQWQsIENNRFRIUkVBRF9SRVNFVF9CVUxLX09VVCwKLQkJCQkJCU5VTEwsIDApOwotCQl9IGVsc2UgewotCQkJcEhUVFhDb250ZXh0ID0gJnBBZC0+VHhDb250ZXh0W0J1bGtPdXRQaXBlSWRdOwotCQkJaWYgKChwQWQtPlR4U3dRdWV1ZVtCdWxrT3V0UGlwZUlkXS5OdW1iZXIgPiAwKSAmJgotCQkJICAgIC8qKChwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gPiAocEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uICsgMHg2MDAwKSkgfHwgKHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbiA+IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiArIDB4NjAwMCkpICYmICovCi0JCQkgICAgKHBBZC0+RGVRdWV1ZVJ1bm5pbmdbQnVsa091dFBpcGVJZF0gPT0gRkFMU0UpICYmCi0JCQkgICAgKHBIVFRYQ29udGV4dC0+YkN1cldyaXRpbmcgPT0gRkFMU0UpKSB7Ci0JCQkJUlRNUERlUXVldWVQYWNrZXQocEFkLCBGQUxTRSwgQnVsa091dFBpcGVJZCwKLQkJCQkJCSAgTUFYX1RYX1BST0NFU1MpOwotCQkJfQotCi0JCQlSVFVTQl9TRVRfQlVMS19GTEFHKHBBZCwKLQkJCQkJICAgIGZSVFVTQl9CVUxLX09VVF9EQVRBX05PUk1BTCA8PCAxKTsKLQkJCVJUVVNCS2lja0J1bGtPdXQocEFkKTsKLQkJfQotCX0KLQlyZXR1cm47Ci0KLX0KLQotc3RhdGljIHZvaWQgcnR1c2JfYWMwX2RtYV9kb25lX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZDsKLQlzdHJ1Y3QgcnRfaHRfdHhfY29udGV4dCAqcEhUVFhDb250ZXh0OwotCXU4IEJ1bGtPdXRQaXBlSWQgPSAwOwotCXN0cnVjdCB1cmIgKnBVcmI7Ci0KLQlwVXJiID0gKHN0cnVjdCB1cmIgKilkYXRhOwotCXBIVFRYQ29udGV4dCA9IChzdHJ1Y3QgcnRfaHRfdHhfY29udGV4dCAqKXBVcmItPmNvbnRleHQ7Ci0JcEFkID0gcEhUVFhDb250ZXh0LT5wQWQ7Ci0KLQlydHVzYl9kYXRhb3V0X2NvbXBsZXRlKCh1bnNpZ25lZCBsb25nKXBVcmIpOwotCi0JaWYgKChSVE1QX1RFU1RfRkxBRyhwQWQsIChmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTIHwKLQkJCQkgIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8Ci0JCQkJICBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSkpIHsKLQkJLyogZG8gbm90aGluZyBhbmQgcmV0dXJuIGRpcmVjdGx5LiAqLwotCX0gZWxzZSB7Ci0JCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCkpIHsKLQkJCVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKHBBZCwgQ01EVEhSRUFEX1JFU0VUX0JVTEtfT1VULAotCQkJCQkJTlVMTCwgMCk7Ci0JCX0gZWxzZSB7Ci0JCQlwSFRUWENvbnRleHQgPSAmcEFkLT5UeENvbnRleHRbQnVsa091dFBpcGVJZF07Ci0JCQlpZiAoKHBBZC0+VHhTd1F1ZXVlW0J1bGtPdXRQaXBlSWRdLk51bWJlciA+IDApICYmCi0JCQkgICAgLyogICgocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uID4gKHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbiArIDB4NjAwMCkpIHx8IChwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24gPiBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gKyAweDYwMDApKSAmJiAqLwotCQkJICAgIChwQWQtPkRlUXVldWVSdW5uaW5nW0J1bGtPdXRQaXBlSWRdID09IEZBTFNFKSAmJgotCQkJICAgIChwSFRUWENvbnRleHQtPmJDdXJXcml0aW5nID09IEZBTFNFKSkgewotCQkJCVJUTVBEZVF1ZXVlUGFja2V0KHBBZCwgRkFMU0UsIEJ1bGtPdXRQaXBlSWQsCi0JCQkJCQkgIE1BWF9UWF9QUk9DRVNTKTsKLQkJCX0KLQotCQkJUlRVU0JfU0VUX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9EQVRBX05PUk1BTCk7Ci0JCQlSVFVTQktpY2tCdWxrT3V0KHBBZCk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm47Ci0KLX0KLQotaW50IFJ0bXBOZXRUYXNrSW5pdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0Jc3RydWN0IG9zX2Nvb2tpZSAqcE9iaiA9IChzdHJ1Y3Qgb3NfY29va2llICopcEFkLT5PU19Db29raWU7Ci0KLQkvKiBDcmVhdGUgcmVjZWl2ZSB0YXNrbGV0ICovCi0JdGFza2xldF9pbml0KCZwT2JqLT5yeF9kb25lX3Rhc2ssIHJ4X2RvbmVfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpcEFkKTsKLQl0YXNrbGV0X2luaXQoJnBPYmotPm1nbXRfZG1hX2RvbmVfdGFzaywgcnR1c2JfbWdtdF9kbWFfZG9uZV90YXNrbGV0LAotCQkgICAgICh1bnNpZ25lZCBsb25nKXBBZCk7Ci0JdGFza2xldF9pbml0KCZwT2JqLT5hYzBfZG1hX2RvbmVfdGFzaywgcnR1c2JfYWMwX2RtYV9kb25lX3Rhc2tsZXQsCi0JCSAgICAgKHVuc2lnbmVkIGxvbmcpcEFkKTsKLQl0YXNrbGV0X2luaXQoJnBPYmotPmFjMV9kbWFfZG9uZV90YXNrLCBydHVzYl9hYzFfZG1hX2RvbmVfdGFza2xldCwKLQkJICAgICAodW5zaWduZWQgbG9uZylwQWQpOwotCXRhc2tsZXRfaW5pdCgmcE9iai0+YWMyX2RtYV9kb25lX3Rhc2ssIHJ0dXNiX2FjMl9kbWFfZG9uZV90YXNrbGV0LAotCQkgICAgICh1bnNpZ25lZCBsb25nKXBBZCk7Ci0JdGFza2xldF9pbml0KCZwT2JqLT5hYzNfZG1hX2RvbmVfdGFzaywgcnR1c2JfYWMzX2RtYV9kb25lX3Rhc2tsZXQsCi0JCSAgICAgKHVuc2lnbmVkIGxvbmcpcEFkKTsKLQl0YXNrbGV0X2luaXQoJnBPYmotPnRidHRfdGFzaywgdGJ0dF90YXNrbGV0LCAodW5zaWduZWQgbG9uZylwQWQpOwotCXRhc2tsZXRfaW5pdCgmcE9iai0+bnVsbF9mcmFtZV9jb21wbGV0ZV90YXNrLAotCQkgICAgIHJ0dXNiX251bGxfZnJhbWVfZG9uZV90YXNrbGV0LCAodW5zaWduZWQgbG9uZylwQWQpOwotCXRhc2tsZXRfaW5pdCgmcE9iai0+cnRzX2ZyYW1lX2NvbXBsZXRlX3Rhc2ssCi0JCSAgICAgcnR1c2JfcnRzX2ZyYW1lX2RvbmVfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpcEFkKTsKLQl0YXNrbGV0X2luaXQoJnBPYmotPnBzcG9sbF9mcmFtZV9jb21wbGV0ZV90YXNrLAotCQkgICAgIHJ0dXNiX3BzcG9sbF9mcmFtZV9kb25lX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKXBBZCk7Ci0KLQlyZXR1cm4gTkRJU19TVEFUVVNfU1VDQ0VTUzsKLX0KLQotdm9pZCBSdG1wTmV0VGFza0V4aXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCXN0cnVjdCBvc19jb29raWUgKnBPYmo7Ci0KLQlwT2JqID0gKHN0cnVjdCBvc19jb29raWUgKilwQWQtPk9TX0Nvb2tpZTsKLQotCXRhc2tsZXRfa2lsbCgmcE9iai0+cnhfZG9uZV90YXNrKTsKLQl0YXNrbGV0X2tpbGwoJnBPYmotPm1nbXRfZG1hX2RvbmVfdGFzayk7Ci0JdGFza2xldF9raWxsKCZwT2JqLT5hYzBfZG1hX2RvbmVfdGFzayk7Ci0JdGFza2xldF9raWxsKCZwT2JqLT5hYzFfZG1hX2RvbmVfdGFzayk7Ci0JdGFza2xldF9raWxsKCZwT2JqLT5hYzJfZG1hX2RvbmVfdGFzayk7Ci0JdGFza2xldF9raWxsKCZwT2JqLT5hYzNfZG1hX2RvbmVfdGFzayk7Ci0JdGFza2xldF9raWxsKCZwT2JqLT50YnR0X3Rhc2spOwotCXRhc2tsZXRfa2lsbCgmcE9iai0+bnVsbF9mcmFtZV9jb21wbGV0ZV90YXNrKTsKLQl0YXNrbGV0X2tpbGwoJnBPYmotPnJ0c19mcmFtZV9jb21wbGV0ZV90YXNrKTsKLQl0YXNrbGV0X2tpbGwoJnBPYmotPnBzcG9sbF9mcmFtZV9jb21wbGV0ZV90YXNrKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydG1wLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjMzEzNDAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydG1wLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MzMyICswLDAgQEAKLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUmFsaW5rIFRlY2ggSW5jLgotICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAotICogSHNpbmNodSBDb3VudHkgMzAyLAotICogVGFpd2FuLCBSLk8uQy4KLSAqCi0gKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0gICAgTW9kdWxlIE5hbWU6Ci0gICAgcnRtcC5oCi0KLSAgICBBYnN0cmFjdDoKLSAgICBNaW5pcG9ydCBnZW5lcmljIHBvcnRpb24gaGVhZGVyIGZpbGUKLQotICAgIFJldmlzaW9uIEhpc3Rvcnk6Ci0gICAgV2hvICAgICAgICAgCVdoZW4gICAgICAgICAgCVdoYXQKLSAgICAtLS0tLS0tLSAgICAtLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBQYXVsIExpbiAgICAJMjAwMi0wOC0wMSAgICAJY3JlYXRlZAotICAgIEphbWVzIFRhbiAgIAkyMDAyLTA5LTA2ICAgIAltb2RpZmllZCAoUmV2aXNlIE5UQ1JlZ1RhYmxlKQotICAgIEpvaG4gQ2hhbmcgIAkyMDA0LTA5LTA2ICAgIAltb2RpZmllZCBmb3IgUlQyNjAwCi0gICAgSnVzdGluIFAuIE1hdHRvY2sJMTEvMDcvMjAxMAlGaXggc29tZSB0eXBvcwotKi8KLSNpZm5kZWYgX19SVE1QX0hfXwotI2RlZmluZSBfX1JUTVBfSF9fCi0KLSNpbmNsdWRlICJzcGVjdHJ1bV9kZWYuaCIKLSNpbmNsdWRlICJydG1wX2RvdDExLmgiCi0jaW5jbHVkZSAicnRtcF9jaGlwLmgiCi0KLXN0cnVjdCBydF9ydG1wX2FkYXB0ZXI7Ci0KLS8qI2RlZmluZSBEQkcgICAgICAgICAgIDEgKi8KLQotLyojZGVmaW5lIERCR19ESUFHTk9TRSAgICAgICAgICAxICovCi0KLS8qKysrQWRkIGJ5IHNoaWFuZyBmb3IgbWVyZ2UgTWluaXBvcnRNTVJlcXVlc3QoKSBhbmQgTWluaXBvcnREYXRhTU1SZXF1ZXN0KCkgaW50byBvbmUgZnVuY3Rpb24gKi8KLSNkZWZpbmUgTUFYX0RBVEFNTV9SRVRSWQkzCi0jZGVmaW5lIE1HTVRfVVNFX1FVRVVFX0ZMQUcJMHg4MAotLyotLS1BZGQgYnkgc2hpYW5nIGZvciBtZXJnZSBNaW5pcG9ydE1NUmVxdWVzdCgpIGFuZCBNaW5pcG9ydERhdGFNTVJlcXVlc3QoKSBpbnRvIG9uZSBmdW5jdGlvbiAqLwotCi0jZGVmaW5lCU1BWFNFUQkJKDB4RkZGKQotCi1leHRlcm4gdW5zaWduZWQgY2hhciBTTkFQX0FJUk9ORVRbXTsKLWV4dGVybiB1bnNpZ25lZCBjaGFyIENJU0NPX09VSVtdOwotZXh0ZXJuIHU4IEJhU2l6ZUFycmF5WzRdOwotCi1leHRlcm4gdTggQlJPQURDQVNUX0FERFJbTUFDX0FERFJfTEVOXTsKLWV4dGVybiB1OCBaRVJPX01BQ19BRERSW01BQ19BRERSX0xFTl07Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBCSVQzMlszMl07Ci1leHRlcm4gdTggQklUOFs4XTsKLWV4dGVybiBjaGFyICpDaXBoZXJOYW1lW107Ci1leHRlcm4gY2hhciAqTUNTVG9NYnBzW107Ci1leHRlcm4gdTggUnh3aU1DU1RvT2ZkbVJhdGVbMTJdOwotZXh0ZXJuIHU4IFNOQVBfODAyXzFIWzZdOwotZXh0ZXJuIHU4IFNOQVBfQlJJREdFX1RVTk5FTFs2XTsKLWV4dGVybiB1OCBTTkFQX0FJUk9ORVRbOF07Ci1leHRlcm4gdTggQ0tJUF9MTENfU05BUFs4XTsKLWV4dGVybiB1OCBFQVBPTF9MTENfU05BUFs4XTsKLWV4dGVybiB1OCBFQVBPTFsyXTsKLWV4dGVybiB1OCBJUFhbMl07Ci1leHRlcm4gdTggQVBQTEVfVEFMS1syXTsKLWV4dGVybiB1OCBSYXRlSWRUb1BsY3BTaWduYWxbMTJdOwkvKiBzZWUgSUVFRTgwMi4xMWEtMTk5OSBwLjE0ICovCi1leHRlcm4gdTggT2ZkbVJhdGVUb1J4d2lNQ1NbXTsKLWV4dGVybiB1OCBPZmRtU2lnbmFsVG9SYXRlSWRbMTZdOwotZXh0ZXJuIHU4IGRlZmF1bHRfY3dtaW5bNF07Ci1leHRlcm4gdTggZGVmYXVsdF9jd21heFs0XTsKLWV4dGVybiB1OCBkZWZhdWx0X3N0YV9haWZzbls0XTsKLWV4dGVybiB1OCBNYXBVc2VyUHJpb3JpdHlUb0FjY2Vzc0NhdGVnb3J5WzhdOwotCi1leHRlcm4gdTE2IFJhdGVVcFBFUltdOwotZXh0ZXJuIHUxNiBSYXRlRG93blBFUltdOwotZXh0ZXJuIHU4IFBoeTExQk5leHRSYXRlRG93bndhcmRbXTsKLWV4dGVybiB1OCBQaHkxMUJOZXh0UmF0ZVVwd2FyZFtdOwotZXh0ZXJuIHU4IFBoeTExQkdOZXh0UmF0ZURvd253YXJkW107Ci1leHRlcm4gdTggUGh5MTFCR05leHRSYXRlVXB3YXJkW107Ci1leHRlcm4gdTggUGh5MTFBTmV4dFJhdGVEb3dud2FyZFtdOwotZXh0ZXJuIHU4IFBoeTExQU5leHRSYXRlVXB3YXJkW107Ci1leHRlcm4gY2hhciBSc3NpU2FmZUxldmVsRm9yVHhSYXRlW107Ci1leHRlcm4gdTggUmF0ZUlkVG9NYnBzW107Ci1leHRlcm4gdTE2IFJhdGVJZFRvNTAwS2Jwc1tdOwotCi1leHRlcm4gdTggQ2lwaGVyU3VpdGVXcGFOb25lVGtpcFtdOwotZXh0ZXJuIHU4IENpcGhlclN1aXRlV3BhTm9uZVRraXBMZW47Ci0KLWV4dGVybiB1OCBDaXBoZXJTdWl0ZVdwYU5vbmVBZXNbXTsKLWV4dGVybiB1OCBDaXBoZXJTdWl0ZVdwYU5vbmVBZXNMZW47Ci0KLWV4dGVybiB1OCBTc2lkSWU7Ci1leHRlcm4gdTggU3VwUmF0ZUllOwotZXh0ZXJuIHU4IEV4dFJhdGVJZTsKLQotZXh0ZXJuIHU4IEh0Q2FwSWU7Ci1leHRlcm4gdTggQWRkSHRJbmZvSWU7Ci1leHRlcm4gdTggTmV3RXh0Q2hhbkllOwotCi1leHRlcm4gdTggRXJwSWU7Ci1leHRlcm4gdTggRHNJZTsKLWV4dGVybiB1OCBUaW1JZTsKLWV4dGVybiB1OCBXcGFJZTsKLWV4dGVybiB1OCBXcGEySWU7Ci1leHRlcm4gdTggSWJzc0llOwotZXh0ZXJuIHU4IENjeDJJZTsKLWV4dGVybiB1OCBXYXBpSWU7Ci0KLWV4dGVybiB1OCBXUEFfT1VJW107Ci1leHRlcm4gdTggUlNOX09VSVtdOwotZXh0ZXJuIHU4IFdBUElfT1VJW107Ci1leHRlcm4gdTggV01FX0lORk9fRUxFTVtdOwotZXh0ZXJuIHU4IFdNRV9QQVJNX0VMRU1bXTsKLWV4dGVybiB1OCBDY3gyUW9zSW5mb1tdOwotZXh0ZXJuIHU4IENjeDJJZUluZm9bXTsKLWV4dGVybiB1OCBSQUxJTktfT1VJW107Ci1leHRlcm4gdTggUG93ZXJDb25zdHJhaW50SUVbXTsKLQotZXh0ZXJuIHU4IFJhdGVTd2l0Y2hUYWJsZVtdOwotZXh0ZXJuIHU4IFJhdGVTd2l0Y2hUYWJsZTExQltdOwotZXh0ZXJuIHU4IFJhdGVTd2l0Y2hUYWJsZTExR1tdOwotZXh0ZXJuIHU4IFJhdGVTd2l0Y2hUYWJsZTExQkdbXTsKLQotZXh0ZXJuIHU4IFJhdGVTd2l0Y2hUYWJsZTExQkdOMVNbXTsKLWV4dGVybiB1OCBSYXRlU3dpdGNoVGFibGUxMUJHTjJTW107Ci1leHRlcm4gdTggUmF0ZVN3aXRjaFRhYmxlMTFCR04yU0ZvckFCYW5kW107Ci1leHRlcm4gdTggUmF0ZVN3aXRjaFRhYmxlMTFOMVNbXTsKLWV4dGVybiB1OCBSYXRlU3dpdGNoVGFibGUxMU4yU1tdOwotZXh0ZXJuIHU4IFJhdGVTd2l0Y2hUYWJsZTExTjJTRm9yQUJhbmRbXTsKLQotZXh0ZXJuIHU4IFBSRV9OX0hUX09VSVtdOwotCi1zdHJ1Y3QgcnRfcnNzaV9zYW1wbGUgewotCWNoYXIgTGFzdFJzc2kwOwkJLyogbGFzdCByZWNlaXZlZCBSU1NJICovCi0JY2hhciBMYXN0UnNzaTE7CQkvKiBsYXN0IHJlY2VpdmVkIFJTU0kgKi8KLQljaGFyIExhc3RSc3NpMjsJCS8qIGxhc3QgcmVjZWl2ZWQgUlNTSSAqLwotCWNoYXIgQXZnUnNzaTA7Ci0JY2hhciBBdmdSc3NpMTsKLQljaGFyIEF2Z1Jzc2kyOwotCXNob3J0IEF2Z1Jzc2kwWDg7Ci0Jc2hvcnQgQXZnUnNzaTFYODsKLQlzaG9ydCBBdmdSc3NpMlg4OwotfTsKLQotLyogKi8KLS8qICBRdWV1ZSBzdHJ1Y3R1cmUgYW5kIG1hY3JvcyAqLwotLyogKi8KLXN0cnVjdCBydF9xdWV1ZV9lbnRyeTsKLQotc3RydWN0IHJ0X3F1ZXVlX2VudHJ5IHsKLQlzdHJ1Y3QgcnRfcXVldWVfZW50cnkgKk5leHQ7Ci19OwotCi0vKiBRdWV1ZSBzdHJ1Y3R1cmUgKi8KLXN0cnVjdCBydF9xdWV1ZV9oZWFkZXIgewotCXN0cnVjdCBydF9xdWV1ZV9lbnRyeSAqSGVhZDsKLQlzdHJ1Y3QgcnRfcXVldWVfZW50cnkgKlRhaWw7Ci0JdW5zaWduZWQgbG9uZyBOdW1iZXI7Ci19OwotCi0jZGVmaW5lIEluaXRpYWxpemVRdWV1ZUhlYWRlcihRdWV1ZUhlYWRlcikgICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCShRdWV1ZUhlYWRlciktPkhlYWQgPSAoUXVldWVIZWFkZXIpLT5UYWlsID0gTlVMTDsgICBcCi0JKFF1ZXVlSGVhZGVyKS0+TnVtYmVyID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0KLQotI2RlZmluZSBSZW1vdmVIZWFkUXVldWUoUXVldWVIZWFkZXIpICAgICAgICAgICAgICAgIFwKLShRdWV1ZUhlYWRlciktPkhlYWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCXN0cnVjdCBydF9xdWV1ZV9lbnRyeSAqcE5leHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JaWYgKChRdWV1ZUhlYWRlciktPkhlYWQgIT0gTlVMTCkgewkJCQlcCi0JCXBOZXh0ID0gKFF1ZXVlSGVhZGVyKS0+SGVhZC0+TmV4dDsgICAgICAgICAgXAotCQkoUXVldWVIZWFkZXIpLT5IZWFkLT5OZXh0ID0gTlVMTDsJCVwKLQkJKFF1ZXVlSGVhZGVyKS0+SGVhZCA9IHBOZXh0OyAgICAgICAgICAgICAgICBcCi0JCWlmIChwTmV4dCA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJKFF1ZXVlSGVhZGVyKS0+VGFpbCA9IE5VTEw7ICAgICAgICAgICAgIFwKLQkJKFF1ZXVlSGVhZGVyKS0+TnVtYmVyLS07ICAgICAgICAgICAgICAgICAgICBcCi0JfQkJCQkJCQkJCQkJCVwKLX0KLQotI2RlZmluZSBJbnNlcnRIZWFkUXVldWUoUXVldWVIZWFkZXIsIFF1ZXVlRW50cnkpICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkoKHN0cnVjdCBydF9xdWV1ZV9lbnRyeSAqKVF1ZXVlRW50cnkpLT5OZXh0ID0gKFF1ZXVlSGVhZGVyKS0+SGVhZDsgXAotCQkoUXVldWVIZWFkZXIpLT5IZWFkID0gKHN0cnVjdCBydF9xdWV1ZV9lbnRyeSAqKShRdWV1ZUVudHJ5KTsgICAgICAgXAotCQlpZiAoKFF1ZXVlSGVhZGVyKS0+VGFpbCA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCShRdWV1ZUhlYWRlciktPlRhaWwgPSAoc3RydWN0IHJ0X3F1ZXVlX2VudHJ5ICopKFF1ZXVlRW50cnkpOyAgIFwKLQkJKFF1ZXVlSGVhZGVyKS0+TnVtYmVyKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19Ci0KLSNkZWZpbmUgSW5zZXJ0VGFpbFF1ZXVlKFF1ZXVlSGVhZGVyLCBRdWV1ZUVudHJ5KSAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSgoc3RydWN0IHJ0X3F1ZXVlX2VudHJ5ICopUXVldWVFbnRyeSktPk5leHQgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgXAotCWlmICgoUXVldWVIZWFkZXIpLT5UYWlsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJKFF1ZXVlSGVhZGVyKS0+VGFpbC0+TmV4dCA9IChzdHJ1Y3QgcnRfcXVldWVfZW50cnkgKikoUXVldWVFbnRyeSk7IFwKLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCShRdWV1ZUhlYWRlciktPkhlYWQgPSAoc3RydWN0IHJ0X3F1ZXVlX2VudHJ5ICopKFF1ZXVlRW50cnkpOyAgICAgICBcCi0JKFF1ZXVlSGVhZGVyKS0+VGFpbCA9IChzdHJ1Y3QgcnRfcXVldWVfZW50cnkgKikoUXVldWVFbnRyeSk7ICAgICAgICAgICBcCi0JKFF1ZXVlSGVhZGVyKS0+TnVtYmVyKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotCi0jZGVmaW5lIEluc2VydFRhaWxRdWV1ZUFjKHBBZCwgcEVudHJ5LCBRdWV1ZUhlYWRlciwgUXVldWVFbnRyeSkJCQlcCi17CQkJCQkJCQkJCQkJCQkJCQkJXAotCSgoc3RydWN0IHJ0X3F1ZXVlX2VudHJ5ICopUXVldWVFbnRyeSktPk5leHQgPSBOVUxMOwkJCQkJCQlcCi0JaWYgKChRdWV1ZUhlYWRlciktPlRhaWwpCQkJCQkJCQkJCQlcCi0JCShRdWV1ZUhlYWRlciktPlRhaWwtPk5leHQgPSAoc3RydWN0IHJ0X3F1ZXVlX2VudHJ5ICopKFF1ZXVlRW50cnkpOwkJCVwKLQllbHNlCQkJCQkJCQkJCQkJCQkJCVwKLQkJKFF1ZXVlSGVhZGVyKS0+SGVhZCA9IChzdHJ1Y3QgcnRfcXVldWVfZW50cnkgKikoUXVldWVFbnRyeSk7CQkJCVwKLQkoUXVldWVIZWFkZXIpLT5UYWlsID0gKHN0cnVjdCBydF9xdWV1ZV9lbnRyeSAqKShRdWV1ZUVudHJ5KTsJCQkJCVwKLQkoUXVldWVIZWFkZXIpLT5OdW1iZXIrKzsJCQkJCQkJCQkJCVwKLX0KLQotLyogKi8KLS8qICBNYWNyb3MgZm9yIGZsYWcgYW5kIHJlZiBjb3VudCBvcGVyYXRpb25zICovCi0vKiAqLwotI2RlZmluZSBSVE1QX1NFVF9GTEFHKF9NLCBfRikgICAgICAgKChfTSktPkZsYWdzIHw9IChfRikpCi0jZGVmaW5lIFJUTVBfQ0xFQVJfRkxBRyhfTSwgX0YpICAgICAoKF9NKS0+RmxhZ3MgJj0gfihfRikpCi0jZGVmaW5lIFJUTVBfQ0xFQVJfRkxBR1MoX00pICAgICAgICAoKF9NKS0+RmxhZ3MgPSAwKQotI2RlZmluZSBSVE1QX1RFU1RfRkxBRyhfTSwgX0YpICAgICAgKCgoX00pLT5GbGFncyAmIChfRikpICE9IDApCi0jZGVmaW5lIFJUTVBfVEVTVF9GTEFHUyhfTSwgX0YpICAgICAoKChfTSktPkZsYWdzICYgKF9GKSkgPT0gKF9GKSkKLS8qIE1hY3JvIGZvciBwb3dlciBzYXZlIGZsYWcuICovCi0jZGVmaW5lIFJUTVBfU0VUX1BTRkxBRyhfTSwgX0YpICAgICAgICgoX00pLT5QU0ZsYWdzIHw9IChfRikpCi0jZGVmaW5lIFJUTVBfQ0xFQVJfUFNGTEFHKF9NLCBfRikgICAgICgoX00pLT5QU0ZsYWdzICY9IH4oX0YpKQotI2RlZmluZSBSVE1QX0NMRUFSX1BTRkxBR1MoX00pICAgICAgICAoKF9NKS0+UFNGbGFncyA9IDApCi0jZGVmaW5lIFJUTVBfVEVTVF9QU0ZMQUcoX00sIF9GKSAgICAgICgoKF9NKS0+UFNGbGFncyAmIChfRikpICE9IDApCi0jZGVmaW5lIFJUTVBfVEVTVF9QU0ZMQUdTKF9NLCBfRikgICAgICgoKF9NKS0+UFNGbGFncyAmIChfRikpID09IChfRikpCi0KLSNkZWZpbmUgT1BTVEFUVVNfU0VUX0ZMQUcoX3BBZCwgX0YpICAgICAoKF9wQWQpLT5Db21tb25DZmcuT3BTdGF0dXNGbGFncyB8PSAoX0YpKQotI2RlZmluZSBPUFNUQVRVU19DTEVBUl9GTEFHKF9wQWQsIF9GKSAgICgoX3BBZCktPkNvbW1vbkNmZy5PcFN0YXR1c0ZsYWdzICY9IH4oX0YpKQotI2RlZmluZSBPUFNUQVRVU19URVNUX0ZMQUcoX3BBZCwgX0YpICAgICgoKF9wQWQpLT5Db21tb25DZmcuT3BTdGF0dXNGbGFncyAmIChfRikpICE9IDApCi0KLSNkZWZpbmUgQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhfcEVudHJ5LCBfRikgICAgICAoKF9wRW50cnkpLT5DbGllbnRTdGF0dXNGbGFncyB8PSAoX0YpKQotI2RlZmluZSBDTElFTlRfU1RBVFVTX0NMRUFSX0ZMQUcoX3BFbnRyeSwgX0YpICAgICgoX3BFbnRyeSktPkNsaWVudFN0YXR1c0ZsYWdzICY9IH4oX0YpKQotI2RlZmluZSBDTElFTlRfU1RBVFVTX1RFU1RfRkxBRyhfcEVudHJ5LCBfRikgICAgICgoKF9wRW50cnkpLT5DbGllbnRTdGF0dXNGbGFncyAmIChfRikpICE9IDApCi0KLSNkZWZpbmUgUlhfRklMVEVSX1NFVF9GTEFHKF9wQWQsIF9GKSAgICAoKF9wQWQpLT5Db21tb25DZmcuUGFja2V0RmlsdGVyIHw9IChfRikpCi0jZGVmaW5lIFJYX0ZJTFRFUl9DTEVBUl9GTEFHKF9wQWQsIF9GKSAgKChfcEFkKS0+Q29tbW9uQ2ZnLlBhY2tldEZpbHRlciAmPSB+KF9GKSkKLSNkZWZpbmUgUlhfRklMVEVSX1RFU1RfRkxBRyhfcEFkLCBfRikgICAoKChfcEFkKS0+Q29tbW9uQ2ZnLlBhY2tldEZpbHRlciAmIChfRikpICE9IDApCi0KLSNkZWZpbmUgU1RBX05PX1NFQ1VSSVRZX09OKF9wKSAgICAgICAgICAoX3AtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb25EaXNhYmxlZCkKLSNkZWZpbmUgU1RBX1dFUF9PTihfcCkgICAgICAgICAgICAgICAgICAoX3AtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZCkKLSNkZWZpbmUgU1RBX1RLSVBfT04oX3ApICAgICAgICAgICAgICAgICAoX3AtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkKLSNkZWZpbmUgU1RBX0FFU19PTihfcCkgICAgICAgICAgICAgICAgICAoX3AtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKLQotI2RlZmluZSBTVEFfVEdOX1dJRklfT04oX3ApICAgICAgICAgICAgIChfcC0+U3RhQ2ZnLmJUR25XaWZpVGVzdCA9PSBUUlVFKQotCi0jZGVmaW5lIENLSVBfS1BfT04oX3ApCQkJCSgoKChfcCktPlN0YUNmZy5Da2lwRmxhZykgJiAweDEwKSAmJiAoKF9wKS0+U3RhQ2ZnLmJDa2lwQ21pY09uID09IFRSVUUpKQotI2RlZmluZSBDS0lQX0NNSUNfT04oX3ApCQkJKCgoKF9wKS0+U3RhQ2ZnLkNraXBGbGFnKSAmIDB4MDgpICYmICgoX3ApLT5TdGFDZmcuYkNraXBDbWljT24gPT0gVFJVRSkpCi0KLSNkZWZpbmUgSU5DX1JJTkdfSU5ERVgoX2lkeCwgX1JpbmdTaXplKSAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIChfaWR4KSA9IChfaWR4KzEpICUgKF9SaW5nU2l6ZSk7ICAgICAgIFwKLX0KLQotLyogU3RhQWN0aXZlLlN1cHBvcnRlZEh0UGh5Lk1DU1NldCBpcyBjb3BpZWQgZnJvbSBBUCBiZWFjb24uICBEb24ndCBuZWVkIHRvIHVwZGF0ZSBoZXJlLiAqLwotI2RlZmluZSBDT1BZX0hUU0VUVElOR1NfRlJPTV9NTE1FX0FVWF9UT19BQ1RJVkVfQ0ZHKF9wQWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlfcEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkSHRQaHkuQ2hhbm5lbFdpZHRoID0gX3BBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkNoYW5uZWxXaWR0aDsgICAgICBcCi0JX3BBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZEh0UGh5Lk1pbW9QcyA9IF9wQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5NaW1vUHM7ICAgICAgXAotCV9wQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRIdFBoeS5HRiA9IF9wQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5HRjsgICAgICBcCi0JX3BBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZEh0UGh5LlNob3J0R0lmb3IyMCA9IF9wQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5TaG9ydEdJZm9yMjA7ICAgICAgXAotCV9wQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRIdFBoeS5TaG9ydEdJZm9yNDAgPSBfcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uU2hvcnRHSWZvcjQwOyAgICAgIFwKLQlfcEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkSHRQaHkuVHhTVEJDID0gX3BBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLlR4U1RCQzsgICAgICBcCi0JX3BBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZEh0UGh5LlJ4U1RCQyA9IF9wQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5SeFNUQkM7ICAgICAgXAotCV9wQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRIdFBoeS5FeHRDaGFuT2Zmc2V0ID0gX3BBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvLkV4dENoYW5PZmZzZXQ7ICAgICAgXAotCV9wQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRIdFBoeS5SZWNvbVdpZHRoID0gX3BBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvLlJlY29tV2lkdGg7ICAgICAgXAotCV9wQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRIdFBoeS5PcGVyYWlvbk1vZGUgPSBfcEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8yLk9wZXJhaW9uTW9kZTsgICAgICBcCi0JX3BBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZEh0UGh5Lk5vbkdmUHJlc2VudCA9IF9wQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mbzIuTm9uR2ZQcmVzZW50OyAgICAgIFwKLQlOZGlzTW92ZU1lbW9yeSgoX3BBZCktPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkhUQ2FwYWJpbGl0eS5NQ1NTZXQsIChfcEFkKS0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uTUNTU2V0LCBzaXplb2YodTgpICogMTYpO1wKLX0KLQotI2RlZmluZSBDT1BZX0FQX0hUU0VUVElOR1NfRlJPTV9CRUFDT04oX3BBZCwgX3BIdENhcGFiaWxpdHkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlfcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5BTXNkdVNpemUgPSAodTgpKF9wSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uQU1zZHVTaXplKTsJXAotCV9wQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLk1tcHNNb2RlID0gKHU4KShfcEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLk1pbW9Qcyk7CVwKLQlfcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5NYXhSQW1wZHVGYWN0b3IgPSAodTgpKF9wSHRDYXBhYmlsaXR5LT5IdENhcFBhcm0uTWF4UkFtcGR1RmFjdG9yKTsJXAotfQotCi0vKiAqLwotLyogTUFDUk8gZm9yIDMyLWJpdCBQQ0kgcmVnaXN0ZXIgcmVhZCAvIHdyaXRlICovCi0vKiAqLwotLyogVXNhZ2UgOiBSVE1QX0lPX1JFQUQzMiggKi8KLS8qICAgICAgICAgICAgICBzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsICovCi0vKiAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBSZWdpc3Rlcl9PZmZzZXQsICovCi0vKiAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqIHBWYWx1ZSkgKi8KLS8qICovCi0vKiAgICAgICAgIFJUTVBfSU9fV1JJVEUzMiggKi8KLS8qICAgICAgICAgICAgICBzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsICovCi0vKiAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBSZWdpc3Rlcl9PZmZzZXQsICovCi0vKiAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBWYWx1ZSkgKi8KLS8qICovCi0KLS8qICovCi0vKiBDb21tb24gZnJhZ21lbnQgbGlzdCBzdHJ1Y3R1cmUgLSAgSWRlbnRpY2FsIHRvIHRoZSBzY2F0dGVyIGdhdGhlciBmcmFnIGxpc3Qgc3RydWN0dXJlICovCi0vKiAqLwotLyojZGVmaW5lIHN0cnVjdCBydF9ydG1wX3NnX2VsZW1lbnQgICAgICAgICBTQ0FUVEVSX0dBVEhFUl9FTEVNRU5UICovCi0vKiNkZWZpbmUgc3RydWN0IHJ0X3J0bXBfc2dfZWxlbWVudCAqUFNDQVRURVJfR0FUSEVSX0VMRU1FTlQgKi8KLSNkZWZpbmUgTklDX01BWF9QSFlTX0JVRl9DT1VOVCAgICAgICAgICAgICAgOAotCi1zdHJ1Y3QgcnRfcnRtcF9zZ19lbGVtZW50IHsKLQl2b2lkICpBZGRyZXNzOwotCXVuc2lnbmVkIGxvbmcgTGVuZ3RoOwotCXVuc2lnbmVkIGxvbmcgKlJlc2VydmVkOwotfTsKLQotc3RydWN0IHJ0X3J0bXBfc2dfbGlzdCB7Ci0JdW5zaWduZWQgbG9uZyBOdW1iZXJPZkVsZW1lbnRzOwotCXVuc2lnbmVkIGxvbmcgKlJlc2VydmVkOwotCXN0cnVjdCBydF9ydG1wX3NnX2VsZW1lbnQgRWxlbWVudHNbTklDX01BWF9QSFlTX0JVRl9DT1VOVF07Ci19OwotCi0vKiAqLwotLyogIFNvbWUgdXRpbGl0eSBtYWNyb3MgKi8KLS8qICovCi0jZGVmaW5lIEdFVF9MTkFfR0FJTihfcEFkKQkoKF9wQWQtPkxhdGNoUmZSZWdzLkNoYW5uZWwgPD0gMTQpID8gKF9wQWQtPkJMTkFHYWluKSA6ICgoX3BBZC0+TGF0Y2hSZlJlZ3MuQ2hhbm5lbCA8PSA2NCkgPyAoX3BBZC0+QUxOQUdhaW4wKSA6ICgoX3BBZC0+TGF0Y2hSZlJlZ3MuQ2hhbm5lbCA8PSAxMjgpID8gKF9wQWQtPkFMTkFHYWluMSkgOiAoX3BBZC0+QUxOQUdhaW4yKSkpKQotCi0jZGVmaW5lIElOQ19DT1VOVEVSNjQoVmFsKSAgICAgICAgICAoVmFsLlF1YWRQYXJ0KyspCi0KLSNkZWZpbmUgSU5GUkFfT04oX3ApICAgICAgICAgICAgICAgIChPUFNUQVRVU19URVNUX0ZMQUcoX3AsIGZPUF9TVEFUVVNfSU5GUkFfT04pKQotI2RlZmluZSBBREhPQ19PTihfcCkgICAgICAgICAgICAgICAgKE9QU1RBVFVTX1RFU1RfRkxBRyhfcCwgZk9QX1NUQVRVU19BREhPQ19PTikpCi0jZGVmaW5lIE1PTklUT1JfT04oX3ApICAgICAgICAgICAgICAoKChfcCktPlN0YUNmZy5Cc3NUeXBlKSA9PSBCU1NfTU9OSVRPUikKLSNkZWZpbmUgSURMRV9PTihfcCkgICAgICAgICAgICAgICAgICghSU5GUkFfT04oX3ApICYmICFBREhPQ19PTihfcCkpCi0KLS8qIENoZWNrIExFQVAgJiBDQ0tNIGZsYWdzICovCi0jZGVmaW5lIExFQVBfT04oX3ApICAgICAgICAgICAgICAgICAoKChfcCktPlN0YUNmZy5MZWFwQXV0aE1vZGUpID09IENJU0NPX0F1dGhNb2RlTEVBUCkKLSNkZWZpbmUgTEVBUF9DQ0tNX09OKF9wKSAgICAgICAgICAgICgoKChfcCktPlN0YUNmZy5MZWFwQXV0aE1vZGUpID09IENJU0NPX0F1dGhNb2RlTEVBUCkgJiYgKChfcCktPlN0YUNmZy5MZWFwQXV0aEluZm8uQ0NLTSA9PSBUUlVFKSkKLQotLyogaWYgb3JpZ2luYWwgRXRoZXJuZXQgZnJhbWUgY29udGFpbnMgbm8gTExDL1NOQVAsIHRoZW4gYW4gZXh0cmEgTExDL1NOQVAgZW5jYXAgaXMgcmVxdWlyZWQgKi8KLSNkZWZpbmUgRVhUUkFfTExDU05BUF9FTkNBUF9GUk9NX1BLVF9TVEFSVChfcEJ1ZlZBLCBfcEV4dHJhTGxjU25hcEVuY2FwKQkJXAotewkJCQkJCQkJCQkJCQkJCQlcCi0JaWYgKCgoKihfcEJ1ZlZBICsgMTIpIDw8IDgpICsgKihfcEJ1ZlZBICsgMTMpKSA+IDE1MDApIHsJXAotCQlfcEV4dHJhTGxjU25hcEVuY2FwID0gU05BUF84MDJfMUg7CQkJCQkJXAotCQlpZiAoTmRpc0VxdWFsTWVtb3J5KElQWCwgX3BCdWZWQSArIDEyLCAyKSB8fCAJCQlcCi0JCQlOZGlzRXF1YWxNZW1vcnkoQVBQTEVfVEFMSywgX3BCdWZWQSArIDEyLCAyKSkgewlcCi0JCQlfcEV4dHJhTGxjU25hcEVuY2FwID0gU05BUF9CUklER0VfVFVOTkVMOwkJCVwKLQkJfQkJCQkJCQkJCQkJCQkJXAotCX0JCQkJCQkJCQkJCQkJCQlcCi0JZWxzZSB7CQkJCVwKLQkJX3BFeHRyYUxsY1NuYXBFbmNhcCA9IE5VTEw7CQkJCQkJCQlcCi0JfQkJCQkJCQkJCQkJCQkJCVwKLX0KLQotLyogTmV3IERlZmluZSBmb3IgbmV3IFR4IFBhdGguICovCi0jZGVmaW5lIEVYVFJBX0xMQ1NOQVBfRU5DQVBfRlJPTV9QS1RfT0ZGU0VUKF9wQnVmVkEsIF9wRXh0cmFMbGNTbmFwRW5jYXApCVwKLXsJCQkJCQkJCQkJCQkJCQkJXAotCWlmICgoKCooX3BCdWZWQSkgPDwgOCkgKyAqKF9wQnVmVkEgKyAxKSkgPiAxNTAwKSB7CQlcCi0JCV9wRXh0cmFMbGNTbmFwRW5jYXAgPSBTTkFQXzgwMl8xSDsJCQkJCQlcCi0JCWlmIChOZGlzRXF1YWxNZW1vcnkoSVBYLCBfcEJ1ZlZBLCAyKSB8fCAJCQkJXAotCQkJTmRpc0VxdWFsTWVtb3J5KEFQUExFX1RBTEssIF9wQnVmVkEsIDIpKSB7CQlcCi0JCQlfcEV4dHJhTGxjU25hcEVuY2FwID0gU05BUF9CUklER0VfVFVOTkVMOwkJCVwKLQkJfQkJCQkJCQkJCQkJCQkJXAotCX0JCQkJCQkJCQkJCQkJCQlcCi0JZWxzZSB7CQlcCi0JCV9wRXh0cmFMbGNTbmFwRW5jYXAgPSBOVUxMOwkJCQkJCQkJXAotCX0JCQkJCQkJCQkJCQkJCQlcCi19Ci0KLSNkZWZpbmUgTUFLRV84MDJfM19IRUFERVIoX3AsIF9wTWFjMSwgX3BNYWMyLCBfcFR5cGUpICAgICAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBOZGlzTW92ZU1lbW9yeShfcCwgX3BNYWMxLCBNQUNfQUREUl9MRU4pOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBOZGlzTW92ZU1lbW9yeSgoX3AgKyBNQUNfQUREUl9MRU4pLCBfcE1hYzIsIE1BQ19BRERSX0xFTik7ICAgICAgICAgIFwKLSAgICBOZGlzTW92ZU1lbW9yeSgoX3AgKyBNQUNfQUREUl9MRU4gKiAyKSwgX3BUeXBlLCBMRU5HVEhfODAyXzNfVFlQRSk7IFwKLX0KLQotLyogaWYgcERhdGEgaGFzIG5vIExMQy9TTkFQIChuZWl0aGVyIFJGQzEwNDIgbm9yIEJyaWRnZSB0dW5uZWwpLCBrZWVwIGl0IHRoYXQgd2F5LiAqLwotLyogZWxzZSBpZiB0aGUgcmVjZWl2ZWQgZnJhbWUgaXMgTExDL1NOQVAtZW5jYXBlZCBJUFggb3IgQVBQTEVUQUxLLCBwcmVzZXJ2ZSB0aGUgTExDL1NOQVAgZmllbGQgKi8KLS8qIGVsc2UgcmVtb3ZlIHRoZSBMTEMvU05BUCBmaWVsZCBmcm9tIHRoZSByZXN1bHQgRXRoZXJuZXQgZnJhbWUgKi8KLS8qIFBhdGNoIGZvciBXSFFMIG9ubHksIHdoaWNoIGRpZCBub3QgdHVybiBvbiBOZXRiaW9zIGJ1dCB1c2UgSVBYIHdpdGhpbiBpdHMgcGF5bG9hZCAqLwotLyogTm90ZTogKi8KLS8qICAgICBfcERhdGEgJiBfRGF0YVNpemUgbWF5IGJlIGFsdGVyZWQgKHJlbW92ZSA4LWJ5dGUgTExDL1NOQVApIGJ5IHRoaXMgTUFDUk8gKi8KLS8qICAgICBfcFJlbW92ZWRMTENTTkFQOiBwb2ludGVyIHRvIHJlbW92ZWQgTExDL1NOQVA7IE5VTEwgaXMgbm90IHJlbW92ZWQgKi8KLSNkZWZpbmUgQ09OVkVSVF9UT184MDJfMyhfcDgwMjNoZHIsIF9wREEsIF9wU0EsIF9wRGF0YSwgX0RhdGFTaXplLCBfcFJlbW92ZWRMTENTTkFQKSAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjaGFyIExMQ19MZW5bMl07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCQkJCQkJCVwKLSAgICBfcFJlbW92ZWRMTENTTkFQID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoTmRpc0VxdWFsTWVtb3J5KFNOQVBfODAyXzFILCBfcERhdGEsIDYpICB8fCAgICAgICAgICAgICAgICAgICAgIFwKLQlOZGlzRXF1YWxNZW1vcnkoU05BUF9CUklER0VfVFVOTkVMLCBfcERhdGEsIDYpKQl7CQlcCi0JdTggKnBQcm90byA9IF9wRGF0YSArIDY7CQkJCQlcCi0JCQkJCQkJCQlcCi0JaWYgKChOZGlzRXF1YWxNZW1vcnkoSVBYLCBwUHJvdG8sIDIpIHx8IE5kaXNFcXVhbE1lbW9yeShBUFBMRV9UQUxLLCBwUHJvdG8sIDIpKSAmJiAgXAotCQlOZGlzRXF1YWxNZW1vcnkoU05BUF84MDJfMUgsIF9wRGF0YSwgNikpCXsJXAotCQlMTENfTGVuWzBdID0gKHU4KShfRGF0YVNpemUgLyAyNTYpOwkJCVwKLQkJTExDX0xlblsxXSA9ICh1OCkoX0RhdGFTaXplICUgMjU2KTsJCQlcCi0JCU1BS0VfODAyXzNfSEVBREVSKF9wODAyM2hkciwgX3BEQSwgX3BTQSwgTExDX0xlbik7CVwKLQl9CQkJCQkJCQlcCi0JZWxzZQl7CQkJCQkJCVwKLQkJTUFLRV84MDJfM19IRUFERVIoX3A4MDIzaGRyLCBfcERBLCBfcFNBLCBwUHJvdG8pOwlcCi0JCV9wUmVtb3ZlZExMQ1NOQVAgPSBfcERhdGE7CQkJCVwKLQkJX0RhdGFTaXplIC09IExFTkdUSF84MDJfMV9IOwkJCQlcCi0JCV9wRGF0YSArPSBMRU5HVEhfODAyXzFfSDsJCQkJXAotCX0JCQkJCQkJCVwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQllbHNlCXsJCQkJCQkJXAotCUxMQ19MZW5bMF0gPSAodTgpKF9EYXRhU2l6ZSAvIDI1Nik7CQkJCVwKLQlMTENfTGVuWzFdID0gKHU4KShfRGF0YVNpemUgJSAyNTYpOwkJCQlcCi0JTUFLRV84MDJfM19IRUFERVIoX3A4MDIzaGRyLCBfcERBLCBfcFNBLCBMTENfTGVuKTsJCVwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0KLQotLyogRW5xdWV1ZSB0aGlzIGZyYW1lIHRvIE1MTUUgZW5naW5lICovCi0vKiBXZSBuZWVkIHRvIGVucXVldWUgdGhlIHdob2xlIGZyYW1lIGJlY2F1c2UgTUxNRSBuZWVkIHRvIHBhc3MgZGF0YSB0eXBlICovCi0vKiBpbmZvcm1hdGlvbiBmcm9tIDgwMi4xMSBoZWFkZXIgKi8KLSNpZmRlZiBSVE1QX01BQ19QQ0kKLSNkZWZpbmUgUkVQT1JUX01HTVRfRlJBTUVfVE9fTUxNRShfcEFkLCBXY2lkLCBfcEZyYW1lLCBfRnJhbWVTaXplLCBfUnNzaTAsIF9Sc3NpMSwgX1Jzc2kyLCBfUGxjcFNpZ25hbCkgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgdTMyIEhpZ2gzMlRTRiwgTG93MzJUU0Y7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBSVE1QX0lPX1JFQUQzMihfcEFkLCBUU0ZfVElNRVJfRFcxLCAmSGlnaDMyVFNGKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgUlRNUF9JT19SRUFEMzIoX3BBZCwgVFNGX1RJTUVSX0RXMCwgJkxvdzMyVFNGKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIE1sbWVFbnF1ZXVlRm9yUmVjdihfcEFkLCBXY2lkLCBIaWdoMzJUU0YsIExvdzMyVFNGLCAodTgpX1Jzc2kwLCAodTgpX1Jzc2kxLCAodTgpX1Jzc2kyLCBfRnJhbWVTaXplLCBfcEZyYW1lLCAodTgpX1BsY3BTaWduYWwpOyAgIFwKLX0KLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLSNpZmRlZiBSVE1QX01BQ19VU0IKLSNkZWZpbmUgUkVQT1JUX01HTVRfRlJBTUVfVE9fTUxNRShfcEFkLCBXY2lkLCBfcEZyYW1lLCBfRnJhbWVTaXplLCBfUnNzaTAsIF9Sc3NpMSwgX1Jzc2kyLCBfUGxjcFNpZ25hbCkgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgdTMyIEhpZ2gzMlRTRiA9IDAsIExvdzMyVFNGID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIE1sbWVFbnF1ZXVlRm9yUmVjdihfcEFkLCBXY2lkLCBIaWdoMzJUU0YsIExvdzMyVFNGLCAodTgpX1Jzc2kwLCAodTgpX1Jzc2kxLCAodTgpX1Jzc2kyLCBfRnJhbWVTaXplLCBfcEZyYW1lLCAodTgpX1BsY3BTaWduYWwpOyAgIFwKLX0KLSNlbmRpZiAvKiBSVE1QX01BQ19VU0IgLy8gKi8KLQotI2RlZmluZSBNQUNfQUREUl9FUVVBTChwQWRkcjEsIHBBZGRyMikgICAgICAgICAgIFJUTVBFcXVhbE1lbW9yeSgodm9pZCAqKShwQWRkcjEpLCAodm9pZCAqKShwQWRkcjIpLCBNQUNfQUREUl9MRU4pCi0jZGVmaW5lIFNTSURfRVFVQUwoc3NpZDEsIGxlbjEsIHNzaWQyLCBsZW4yKSAgICAoKGxlbjEgPT0gbGVuMikgJiYgKFJUTVBFcXVhbE1lbW9yeShzc2lkMSwgc3NpZDIsIGxlbjEpKSkKLQotLyogKi8KLS8qIENoZWNrIGlmIGl0IGlzIEphcGFuIFc1MyhjaDUyLDU2LDYwLDY0KSBjaGFubmVsLiAqLwotLyogKi8KLSNkZWZpbmUgSmFwYW5DaGFubmVsQ2hlY2soY2hhbm5lbCkgICgoY2hhbm5lbCA9PSA1MikgfHwgKGNoYW5uZWwgPT0gNTYpIHx8IChjaGFubmVsID09IDYwKSB8fCAoY2hhbm5lbCA9PSA2NCkpCi0KLSNkZWZpbmUgU1RBX0VYVFJBX1NFVFRJTkcoX3BBZCkKLQotI2RlZmluZSBTVEFfUE9SVF9TRUNVUkVEKF9wQWQpIFwKLXsgXAotCUJPT0xFQU4JQ2FuY2VsbGVkOyBcCi0JKF9wQWQpLT5TdGFDZmcuUG9ydFNlY3VyZWQgPSBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRDsgXAotCU5kaXNBY3F1aXJlU3BpbkxvY2soJigoX3BBZCktPk1hY1RhYkxvY2spKTsgXAotCShfcEFkKS0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uUG9ydFNlY3VyZWQgPSAoX3BBZCktPlN0YUNmZy5Qb3J0U2VjdXJlZDsgXAotCShfcEFkKS0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uUHJpdmFjeUZpbHRlciA9IE5kaXM4MDJfMTFQcml2RmlsdGVyQWNjZXB0QWxsO1wKLQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCYoX3BBZCktPk1hY1RhYkxvY2spOyBcCi0JUlRNUENhbmNlbFRpbWVyKCYoKF9wQWQpLT5NbG1lLkxpbmtEb3duVGltZXIpLCAmQ2FuY2VsbGVkKTtcCi0JU1RBX0VYVFJBX1NFVFRJTkcoX3BBZCk7IFwKLX0KLQotLyogKi8KLS8qICBEYXRhIGJ1ZmZlciBmb3IgRE1BIG9wZXJhdGlvbiwgdGhlIGJ1ZmZlciBtdXN0IGJlIGNvbnRpZ3VvdXMgcGh5c2ljYWwgbWVtb3J5ICovCi0vKiAgQm90aCBETUEgdG8gLyBmcm9tIENQVSB1c2UgdGhlIHNhbWUgc3RydWN0dXJlLiAqLwotLyogKi8KLXN0cnVjdCBydF9ydG1wX2RtYWJ1ZiB7Ci0JdW5zaWduZWQgbG9uZyBBbGxvY1NpemU7Ci0Jdm9pZCAqQWxsb2NWYTsJCS8qIFR4QnVmIHZpcnR1YWwgYWRkcmVzcyAqLwotCWRtYV9hZGRyX3QgQWxsb2NQYTsJLyogVHhCdWYgcGh5c2ljYWwgYWRkcmVzcyAqLwotfTsKLQotLyogKi8KLS8qIENvbnRyb2wgYmxvY2sgKERlc2NyaXB0b3IpIGZvciBhbGwgcmluZyBkZXNjcmlwdG9yIERNQSBvcGVyYXRpb24sIGJ1ZmZlciBtdXN0IGJlICovCi0vKiBjb250aWd1b3VzIHBoeXNpY2FsIG1lbW9yeS4gY2hhciBzdG9yZWQgdGhlIGJpbmRpbmcgUnggcGFja2V0IGRlc2NyaXB0b3IgKi8KLS8qIHdoaWNoIHdvbid0IGJlIHJlbGVhc2VkLCBkcml2ZXIgaGFzIHRvIHdhaXQgdW50aWwgdXBwZXIgbGF5ZXIgcmV0dXJuIHRoZSBwYWNrZXQgKi8KLS8qIGJlZm9yZSBnaXZpbmcgdXAgdGhpcyByeCByaW5nIGRlc2NyaXB0b3IgdG8gQVNJQy4gTkRJU19CVUZGRVIgaXMgYXNzb2NpYXRlZCBwYWlyICovCi0vKiB0byBkZXNjcmliZSB0aGUgcGFja2V0IGJ1ZmZlci4gRm9yIFR4LCBjaGFyIHN0b3JlZCB0aGUgdHggcGFja2V0IGRlc2NyaXB0b3IgKi8KLS8qIHdoaWNoIGRyaXZlciBzaG91bGQgQUNLIHVwcGVyIGxheWVyIHdoZW4gdGhlIHR4IGlzIHBoeXNpY2FsbHkgZG9uZSBvciBmYWlsZWQuICovCi0vKiAqLwotc3RydWN0IHJ0X3J0bXBfZG1hY2IgewotCXVuc2lnbmVkIGxvbmcgQWxsb2NTaXplOwkvKiBDb250cm9sIGJsb2NrIHNpemUgKi8KLQl2b2lkICpBbGxvY1ZhOwkJLyogQ29udHJvbCBibG9jayB2aXJ0dWFsIGFkZHJlc3MgKi8KLQlkbWFfYWRkcl90IEFsbG9jUGE7CS8qIENvbnRyb2wgYmxvY2sgcGh5c2ljYWwgYWRkcmVzcyAqLwotCXZvaWQgKnBOZGlzUGFja2V0OwotCXZvaWQgKnBOZXh0TmRpc1BhY2tldDsKLQotCXN0cnVjdCBydF9ydG1wX2RtYWJ1ZiBEbWFCdWY7CS8qIEFzc29jaWF0ZWQgRE1BIGJ1ZmZlciBzdHJ1Y3R1cmUgKi8KLX07Ci0KLXN0cnVjdCBydF9ydG1wX3R4X3JpbmcgewotCXN0cnVjdCBydF9ydG1wX2RtYWNiIENlbGxbVFhfUklOR19TSVpFXTsKLQl1MzIgVHhDcHVJZHg7Ci0JdTMyIFR4RG1hSWR4OwotCXUzMiBUeFN3RnJlZUlkeDsJLyogc29mdHdhcmUgbmV4dCBmcmVlIHR4IGluZGV4ICovCi19OwotCi1zdHJ1Y3QgcnRfcnRtcF9yeF9yaW5nIHsKLQlzdHJ1Y3QgcnRfcnRtcF9kbWFjYiBDZWxsW1JYX1JJTkdfU0laRV07Ci0JdTMyIFJ4Q3B1SWR4OwotCXUzMiBSeERtYUlkeDsKLQlpbnQgUnhTd1JlYWRJZHg7CS8qIHNvZnR3YXJlIG5leHQgcmVhZCBpbmRleCAqLwotfTsKLQotc3RydWN0IHJ0X3J0bXBfbWdtdF9yaW5nIHsKLQlzdHJ1Y3QgcnRfcnRtcF9kbWFjYiBDZWxsW01HTVRfUklOR19TSVpFXTsKLQl1MzIgVHhDcHVJZHg7Ci0JdTMyIFR4RG1hSWR4OwotCXUzMiBUeFN3RnJlZUlkeDsJLyogc29mdHdhcmUgbmV4dCBmcmVlIHR4IGluZGV4ICovCi19OwotCi0vKiAqLwotLyogIFN0YXRpc3RpYyBjb3VudGVyIHN0cnVjdHVyZSAqLwotLyogKi8KLXN0cnVjdCBydF9jb3VudGVyXzgwMl8zIHsKLQkvKiBHZW5lcmFsIFN0YXRzICovCi0JdW5zaWduZWQgbG9uZyBHb29kVHJhbnNtaXRzOwotCXVuc2lnbmVkIGxvbmcgR29vZFJlY2VpdmVzOwotCXVuc2lnbmVkIGxvbmcgVHhFcnJvcnM7Ci0JdW5zaWduZWQgbG9uZyBSeEVycm9yczsKLQl1bnNpZ25lZCBsb25nIFJ4Tm9CdWZmZXI7Ci0KLQkvKiBFdGhlcm5ldCBTdGF0cyAqLwotCXVuc2lnbmVkIGxvbmcgUmN2QWxpZ25tZW50RXJyb3JzOwotCXVuc2lnbmVkIGxvbmcgT25lQ29sbGlzaW9uOwotCXVuc2lnbmVkIGxvbmcgTW9yZUNvbGxpc2lvbnM7Ci0KLX07Ci0KLXN0cnVjdCBydF9jb3VudGVyXzgwMl8xMSB7Ci0JdW5zaWduZWQgbG9uZyBMZW5ndGg7Ci0JTEFSR0VfSU5URUdFUiBMYXN0VHJhbnNtaXR0ZWRGcmFnbWVudENvdW50OwotCUxBUkdFX0lOVEVHRVIgVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50OwotCUxBUkdFX0lOVEVHRVIgTXVsdGljYXN0VHJhbnNtaXR0ZWRGcmFtZUNvdW50OwotCUxBUkdFX0lOVEVHRVIgRmFpbGVkQ291bnQ7Ci0JTEFSR0VfSU5URUdFUiBSZXRyeUNvdW50OwotCUxBUkdFX0lOVEVHRVIgTXVsdGlwbGVSZXRyeUNvdW50OwotCUxBUkdFX0lOVEVHRVIgUlRTU3VjY2Vzc0NvdW50OwotCUxBUkdFX0lOVEVHRVIgUlRTRmFpbHVyZUNvdW50OwotCUxBUkdFX0lOVEVHRVIgQUNLRmFpbHVyZUNvdW50OwotCUxBUkdFX0lOVEVHRVIgRnJhbWVEdXBsaWNhdGVDb3VudDsKLQlMQVJHRV9JTlRFR0VSIFJlY2VpdmVkRnJhZ21lbnRDb3VudDsKLQlMQVJHRV9JTlRFR0VSIE11bHRpY2FzdFJlY2VpdmVkRnJhbWVDb3VudDsKLQlMQVJHRV9JTlRFR0VSIEZDU0Vycm9yQ291bnQ7Ci19OwotCi1zdHJ1Y3QgcnRfY291bnRlcl9yYWxpbmsgewotCXVuc2lnbmVkIGxvbmcgVHJhbnNtaXR0ZWRCeXRlQ291bnQ7CS8qIGJvdGggc3VjY2Vzc2Z1bCBhbmQgZmFpbHVyZSwgdXNlZCB0byBjYWxjdWxhdGUgVFggdGhyb3VnaHB1dCAqLwotCXVuc2lnbmVkIGxvbmcgUmVjZWl2ZWRCeXRlQ291bnQ7CS8qIGJvdGggQ1JDIG9rYXkgYW5kIENSQyBlcnJvciwgdXNlZCB0byBjYWxjdWxhdGUgUlggdGhyb3VnaHB1dCAqLwotCXVuc2lnbmVkIGxvbmcgQmVlbkRpc2Fzc29jaWF0ZWRDb3VudDsKLQl1bnNpZ25lZCBsb25nIEJhZENRSUF1dG9SZWNvdmVyeUNvdW50OwotCXVuc2lnbmVkIGxvbmcgUG9vckNRSVJvYW1pbmdDb3VudDsKLQl1bnNpZ25lZCBsb25nIE1nbXRSaW5nRnVsbENvdW50OwotCXVuc2lnbmVkIGxvbmcgUnhDb3VudFNpbmNlTGFzdE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBSeENvdW50OwotCXVuc2lnbmVkIGxvbmcgUnhSaW5nRXJyQ291bnQ7Ci0JdW5zaWduZWQgbG9uZyBLaWNrVHhDb3VudDsKLQl1bnNpZ25lZCBsb25nIFR4UmluZ0VyckNvdW50OwotCUxBUkdFX0lOVEVHRVIgUmVhbEZjc0VyckNvdW50OwotCXVuc2lnbmVkIGxvbmcgUGVuZGluZ05kaXNQYWNrZXRDb3VudDsKLQotCXVuc2lnbmVkIGxvbmcgT25lU2VjT3NUeENvdW50W05VTV9PRl9UWF9SSU5HXTsKLQl1bnNpZ25lZCBsb25nIE9uZVNlY0RtYURvbmVDb3VudFtOVU1fT0ZfVFhfUklOR107Ci0JdTMyIE9uZVNlY1R4RG9uZUNvdW50OwotCXVuc2lnbmVkIGxvbmcgT25lU2VjUnhDb3VudDsKLQl1MzIgT25lU2VjVHhBZ2dyZWdhdGlvbkNvdW50OwotCXUzMiBPbmVTZWNSeEFnZ3JlZ2F0aW9uQ291bnQ7Ci0JdTMyIE9uZVNlY1JlY2VpdmVkQnl0ZUNvdW50OwotCXUzMiBPbmVTZWNGcmFtZUR1cGxpY2F0ZUNvdW50OwotCi0JdTMyIE9uZVNlY1RyYW5zbWl0dGVkQnl0ZUNvdW50OwkvKiBib3RoIHN1Y2Nlc3NmdWwgYW5kIGZhaWx1cmUsIHVzZWQgdG8gY2FsY3VsYXRlIFRYIHRocm91Z2hwdXQgKi8KLQl1MzIgT25lU2VjVHhOb1JldHJ5T2tDb3VudDsKLQl1MzIgT25lU2VjVHhSZXRyeU9rQ291bnQ7Ci0JdTMyIE9uZVNlY1R4RmFpbENvdW50OwotCXUzMiBPbmVTZWNGYWxzZUNDQUNudDsJLyogQ0NBIGVycm9yIGNvdW50LCBmb3IgZGVidWcgcHVycG9zZSwgbWlnaHQgbW92ZSB0byBnbG9iYWwgY291bnRlciAqLwotCXUzMiBPbmVTZWNSeE9rQ250OwkvKiBSWCB3aXRob3V0IGVycm9yICovCi0JdTMyIE9uZVNlY1J4T2tEYXRhQ250OwkvKiB1bmljYXN0LXRvLW1lIERBVEEgZnJhbWUgY291bnQgKi8KLQl1MzIgT25lU2VjUnhGY3NFcnJDbnQ7CS8qIENSQyBlcnJvciAqLwotCXUzMiBPbmVTZWNCZWFjb25TZW50Q250OwotCXUzMiBMYXN0T25lU2VjVG90YWxUeENvdW50OwkvKiBPbmVTZWNUeE5vUmV0cnlPa0NvdW50ICsgT25lU2VjVHhSZXRyeU9rQ291bnQgKyBPbmVTZWNUeEZhaWxDb3VudCAqLwotCXUzMiBMYXN0T25lU2VjUnhPa0RhdGFDbnQ7CS8qIE9uZVNlY1J4T2tEYXRhQ250ICovCi0JdW5zaWduZWQgbG9uZyBEdXBsaWNhdGVSY3Y7Ci0JdW5zaWduZWQgbG9uZyBUeEFnZ0NvdW50OwotCXVuc2lnbmVkIGxvbmcgVHhOb25BZ2dDb3VudDsKLQl1bnNpZ25lZCBsb25nIFR4QWdnMU1QRFVDb3VudDsKLQl1bnNpZ25lZCBsb25nIFR4QWdnMk1QRFVDb3VudDsKLQl1bnNpZ25lZCBsb25nIFR4QWdnM01QRFVDb3VudDsKLQl1bnNpZ25lZCBsb25nIFR4QWdnNE1QRFVDb3VudDsKLQl1bnNpZ25lZCBsb25nIFR4QWdnNU1QRFVDb3VudDsKLQl1bnNpZ25lZCBsb25nIFR4QWdnNk1QRFVDb3VudDsKLQl1bnNpZ25lZCBsb25nIFR4QWdnN01QRFVDb3VudDsKLQl1bnNpZ25lZCBsb25nIFR4QWdnOE1QRFVDb3VudDsKLQl1bnNpZ25lZCBsb25nIFR4QWdnOU1QRFVDb3VudDsKLQl1bnNpZ25lZCBsb25nIFR4QWdnMTBNUERVQ291bnQ7Ci0JdW5zaWduZWQgbG9uZyBUeEFnZzExTVBEVUNvdW50OwotCXVuc2lnbmVkIGxvbmcgVHhBZ2cxMk1QRFVDb3VudDsKLQl1bnNpZ25lZCBsb25nIFR4QWdnMTNNUERVQ291bnQ7Ci0JdW5zaWduZWQgbG9uZyBUeEFnZzE0TVBEVUNvdW50OwotCXVuc2lnbmVkIGxvbmcgVHhBZ2cxNU1QRFVDb3VudDsKLQl1bnNpZ25lZCBsb25nIFR4QWdnMTZNUERVQ291bnQ7Ci0KLQlMQVJHRV9JTlRFR0VSIFRyYW5zbWl0dGVkT2N0ZXRzSW5BTVNEVTsKLQlMQVJHRV9JTlRFR0VSIFRyYW5zbWl0dGVkQU1TRFVDb3VudDsKLQlMQVJHRV9JTlRFR0VSIFJlY2VpdmVkT2N0ZXNJbkFNU0RVQ291bnQ7Ci0JTEFSR0VfSU5URUdFUiBSZWNlaXZlZEFNU0RVQ291bnQ7Ci0JTEFSR0VfSU5URUdFUiBUcmFuc21pdHRlZEFNUERVQ291bnQ7Ci0JTEFSR0VfSU5URUdFUiBUcmFuc21pdHRlZE1QRFVzSW5BTVBEVUNvdW50OwotCUxBUkdFX0lOVEVHRVIgVHJhbnNtaXR0ZWRPY3RldHNJbkFNUERVQ291bnQ7Ci0JTEFSR0VfSU5URUdFUiBNUERVSW5SZWNlaXZlZEFNUERVQ291bnQ7Ci19OwotCi1zdHJ1Y3QgcnRfY291bnRlcl9kcnMgewotCS8qIHJlY29yZCBlYWNoIFRYIHJhdGUncyBxdWFsaXR5LiAwIGlzIGJlc3QsIHRoZSBiaWdnZXIgdGhlIHdvcnNlLiAqLwotCXUxNiBUeFF1YWxpdHlbTUFYX1NURVBfT0ZfVFhfUkFURV9TV0lUQ0hdOwotCXU4IFBFUltNQVhfU1RFUF9PRl9UWF9SQVRFX1NXSVRDSF07Ci0JdTggVHhSYXRlVXBQZW5hbHR5OwkvKiBleHRyYSAjIG9mIHNlY29uZCBwZW5hbHR5IGR1ZSB0byBsYXN0IHVuc3RhYmxlIGNvbmRpdGlvbiAqLwotCXVuc2lnbmVkIGxvbmcgQ3VyclR4UmF0ZVN0YWJsZVRpbWU7CS8qICMgb2Ygc2Vjb25kIGluIGN1cnJlbnQgVFggcmF0ZSAqLwotCUJPT0xFQU4gZk5vaXN5RW52aXJvbm1lbnQ7Ci0JQk9PTEVBTiBmTGFzdFNlY0FjY29yZGluZ1JTU0k7Ci0JdTggTGFzdFNlY1R4UmF0ZUNoYW5nZUFjdGlvbjsJLyogMDogbm8gY2hhbmdlLCAxOnJhdGUgVVAsIDI6cmF0ZSBkb3duICovCi0JdTggTGFzdFRpbWVUeFJhdGVDaGFuZ2VBY3Rpb247CS8qS2VlcCBsYXN0IHRpbWUgdmFsdWUgb2YgTGFzdFNlY1R4UmF0ZUNoYW5nZUFjdGlvbiAqLwotCXVuc2lnbmVkIGxvbmcgTGFzdFR4T2tDb3VudDsKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgKglzZWN1cml0eSBrZXkgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZQotICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0cnVjdCBydF9jaXBoZXJfa2V5IHsKLQl1OCBLZXlbMTZdOwkJLyogcmlnaHQgbm93IHdlIGltcGxlbWVudCA0IGtleXMsIDEyOCBiaXRzIG1heCAqLwotCXU4IFJ4TWljWzhdOwkJLyogbWFrZSBhbGlnbm1lbnQgKi8KLQl1OCBUeE1pY1s4XTsKLQl1OCBUeFRzY1s2XTsJCS8qIDQ4Yml0IFRTQyB2YWx1ZSAqLwotCXU4IFJ4VHNjWzZdOwkJLyogNDhiaXQgVFNDIHZhbHVlICovCi0JdTggQ2lwaGVyQWxnOwkvKiAwLW5vbmUsIDE6V0VQNjQsIDI6V0VQMTI4LCAzOlRLSVAsIDQ6QUVTLCA1OkNLSVA2NCwgNjpDS0lQMTI4ICovCi0JdTggS2V5TGVuOwotCXU4IEJzc0lkWzZdOwotCS8qIEtleSBsZW5ndGggZm9yIGVhY2gga2V5LCAwOiBlbnRyeSBpcyBpbnZhbGlkICovCi0JdTggVHlwZTsJCS8qIEluZGljYXRlIFBhaXJ3aXNlL0dyb3VwIHdoZW4gcmVwb3J0aW5nIE1JQyBlcnJvciAqLwotfTsKLQotLyogc3RydWN0dXJlIHRvIGRlZmluZSBXUEEgR3JvdXAgS2V5IFJla2V5IEludGVydmFsICovCi1zdHJ1Y3QgUEFDS0VEIHJ0XzgwMl8xMV93cGFfcmVrZXkgewotCXVuc2lnbmVkIGxvbmcgUmVLZXlNZXRob2Q7CS8qIG1lY2hhbmlzbSBmb3IgcmVrZXlpbmc6IDA6ZGlzYWJsZSwgMTogdGltZS1iYXNlZCwgMjogcGFja2V0LWJhc2VkICovCi0JdW5zaWduZWQgbG9uZyBSZUtleUludGVydmFsOwkvKiB0aW1lLWJhc2VkOiBzZWNvbmRzLCBwYWNrZXQtYmFzZWQ6IGtpbG8tcGFja2V0cyAqLwotfTsKLQotI2lmZGVmIFJUTVBfTUFDX1VTQgotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqCVJUVVNCIEkvTyByZWxhdGVkIGRhdGEgc3RydWN0dXJlCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RydWN0IHJ0X3NldF9hc2ljX3djaWQgewotCXVuc2lnbmVkIGxvbmcgV0NJRDsJCS8qIG1lY2hhbmlzbSBmb3IgcmVrZXlpbmc6IDA6ZGlzYWJsZSwgMTogdGltZS1iYXNlZCwgMjogcGFja2V0LWJhc2VkICovCi0JdW5zaWduZWQgbG9uZyBTZXRUaWQ7CQkvKiB0aW1lLWJhc2VkOiBzZWNvbmRzLCBwYWNrZXQtYmFzZWQ6IGtpbG8tcGFja2V0cyAqLwotCXVuc2lnbmVkIGxvbmcgRGVsZXRlVGlkOwkvKiB0aW1lLWJhc2VkOiBzZWNvbmRzLCBwYWNrZXQtYmFzZWQ6IGtpbG8tcGFja2V0cyAqLwotCXU4IEFkZHJbTUFDX0FERFJfTEVOXTsJLyogYXZvaWQgaW4gaW50ZXJydXB0IHdoZW4gd3JpdGUga2V5ICovCi19OwotCi1zdHJ1Y3QgcnRfc2V0X2FzaWNfd2NpZF9hdHRyaSB7Ci0JdW5zaWduZWQgbG9uZyBXQ0lEOwkJLyogbWVjaGFuaXNtIGZvciByZWtleWluZzogMDpkaXNhYmxlLCAxOiB0aW1lLWJhc2VkLCAyOiBwYWNrZXQtYmFzZWQgKi8KLQl1bnNpZ25lZCBsb25nIENpcGhlcjsJCS8qIEFTSUMgQ2lwaGVyIGRlZmluaXRpb24gKi8KLQl1OCBBZGRyW0VUSF9MRU5HVEhfT0ZfQUREUkVTU107Ci19OwotCi0vKiBmb3IgVVNCIGludGVyZmFjZSwgYXZvaWQgaW4gaW50ZXJydXB0IHdoZW4gd3JpdGUga2V5ICovCi1zdHJ1Y3QgcnRfYWRkX3BhaXJ3aXNlX2tleV9lbnRyeSB7Ci0JdTggTWFjQWRkcls2XTsKLQl1MTYgTWFjVGFiTWF0Y2hXQ0lEOwkvKiBBU0lDICovCi0Jc3RydWN0IHJ0X2NpcGhlcl9rZXkgQ2lwaGVyS2V5OwotfTsKLQotLyogQ2lwaGVyIHN1aXRlIHR5cGUgZm9yIG1peGVkIG1vZGUgZ3JvdXAgY2lwaGVyLCBQODAyLjExaS0yMDA0ICovCi10eXBlZGVmIGVudW0gX1JUXzgwMl8xMV9DSVBIRVJfU1VJVEVfVFlQRSB7Ci0JQ2lwaGVyX1R5cGVfTk9ORSwKLQlDaXBoZXJfVHlwZV9XRVA0MCwKLQlDaXBoZXJfVHlwZV9US0lQLAotCUNpcGhlcl9UeXBlX1JTVkQsCi0JQ2lwaGVyX1R5cGVfQ0NNUCwKLQlDaXBoZXJfVHlwZV9XRVAxMDQKLX0gUlRfODAyXzExX0NJUEhFUl9TVUlURV9UWVBFLCAqUFJUXzgwMl8xMV9DSVBIRVJfU1VJVEVfVFlQRTsKLSNlbmRpZiAvKiBSVE1QX01BQ19VU0IgLy8gKi8KLQotc3RydWN0IHJ0X3JvZ3VlYXBfZW50cnkgewotCXU4IEFkZHJbTUFDX0FERFJfTEVOXTsKLQl1OCBFcnJvckNvZGVbMl07CS8qMDAgMDEtSW52YWxpZCBhdXRoZW50aWNhdGlvbiB0eXBlICovCi0JLyowMCAwMi1BdXRoZW50aWNhdGlvbiB0aW1lb3V0ICovCi0JLyowMCAwMy1DaGFsbGVuZ2UgZnJvbSBBUCBmYWlsZWQgKi8KLQkvKjAwIDA0LUNoYWxsZW5nZSB0byBBUCBmYWlsZWQgKi8KLQlCT09MRUFOIFJlcG9ydGVkOwotfTsKLQotc3RydWN0IHJ0X3JvZ3VlYXBfdGFibGUgewotCXU4IFJvZ3VlQXBOcjsKLQlzdHJ1Y3QgcnRfcm9ndWVhcF9lbnRyeSBSb2d1ZUFwRW50cnlbTUFYX0xFTl9PRl9CU1NfVEFCTEVdOwotfTsKLQotLyogKi8KLS8qIENpc2NvIElBUFAgZm9ybWF0ICovCi0vKiAqLwotc3RydWN0IHJ0X2Npc2NvX2lhcHBfY29udGVudCB7Ci0JdTE2IExlbmd0aDsJCS8qSUFQUCBMZW5ndGggKi8KLQl1OCBNZXNzYWdlVHlwZTsJLypJQVBQIHR5cGUgKi8KLQl1OCBGdW5jdGlvbkNvZGU7CS8qSUFQUCBmdW5jdGlvbiB0eXBlICovCi0JdTggRGVzdGluYWlvbk1BQ1tNQUNfQUREUl9MRU5dOwotCXU4IFNvdXJjZU1BQ1tNQUNfQUREUl9MRU5dOwotCXUxNiBUYWc7CQkvKlRhZyhlbGVtZW50IElFKSAtIEFkamFjZW50IEFQIHJlcG9ydCAqLwotCXUxNiBUYWdMZW5ndGg7CS8qTGVuZ3RoIG9mIGVsZW1lbnQgbm90IGluY2x1ZGluZyA0IGJ5dGUgaGVhZGVyICovCi0JdTggT1VJWzRdOwkJLyoweDAwLCAweDQwLCAweDk2LCAweDAwICovCi0JdTggUHJldmlvdXNBUFtNQUNfQUREUl9MRU5dOwkvKk1BQyBBZGRyZXNzIG9mIGFjY2VzcyBwb2ludCAqLwotCXUxNiBDaGFubmVsOwotCXUxNiBTc2lkTGVuOwotCXU4IFNzaWRbTUFYX0xFTl9PRl9TU0lEXTsKLQl1MTYgU2Vjb25kczsJCS8qU2Vjb25kcyB0aGF0IHRoZSBjbGllbnQgaGFzIGJlZW4gZGlzYXNzb2NpYXRlZC4gKi8KLX07Ci0KLS8qCi0gICoJRnJhZ21lbnQgRnJhbWUgc3RydWN0dXJlCi0gICovCi1zdHJ1Y3QgcnRfZnJhZ21lbnRfZnJhbWUgewotCXZvaWQgKnBGcmFnUGFja2V0OwotCXVuc2lnbmVkIGxvbmcgUnhTaXplOwotCXUxNiBTZXF1ZW5jZTsKLQl1MTYgTGFzdEZyYWc7Ci0JdW5zaWduZWQgbG9uZyBGbGFnczsJCS8qIFNvbWUgZXh0cmEgZnJhbWUgaW5mb3JtYXRpb24uIGJpdCAwOiBMTEMgcHJlc2VudGVkICovCi19OwotCi0vKiAqLwotLyogUGFja2V0IGluZm9ybWF0aW9uIGZvciBOZGlzUXVlcnlQYWNrZXQgKi8KLS8qICovCi1zdHJ1Y3QgcnRfcGFja2V0X2luZm8gewotCXUzMiBQaHlzaWNhbEJ1ZmZlckNvdW50OwkvKiBQaHlzaWNhbCBicmVha3Mgb2YgYnVmZmVyIGRlc2NyaXB0b3IgY2hhaW5lZCAqLwotCXUzMiBCdWZmZXJDb3VudDsJLyogTnVtYmVyIG9mIEJ1ZmZlciBkZXNjcmlwdG9yIGNoYWluZWQgKi8KLQl1MzIgVG90YWxQYWNrZXRMZW5ndGg7CS8qIFNlbGYgZXhwbGFpbmVkICovCi0JY2hhciAqcEZpcnN0QnVmZmVyOwkvKiBQb2ludGVyIHRvIGZpcnN0IGJ1ZmZlciBkZXNjcmlwdG9yICovCi19OwotCi0vKiAqLwotLyogIEFyY2ZvdXIgU3RydWN0dXJlIEFkZGVkIGJ5IFBhdWxXdSAqLwotLyogKi8KLXN0cnVjdCBydF9hcmNmb3VyY29udGV4dCB7Ci0JdTMyIFg7Ci0JdTMyIFk7Ci0JdTggU1RBVEVbMjU2XTsKLX07Ci0KLS8qICovCi0vKiBUa2lwIEtleSBzdHJ1Y3R1cmUgd2hpY2ggUkM0IGtleSAmIE1JQyBjYWxjdWxhdGlvbiAqLwotLyogKi8KLXN0cnVjdCBydF90a2lwX2tleV9pbmZvIHsKLQl1MzIgbkJ5dGVzSW5NOwkJLyogIyBieXRlcyBpbiBNIGZvciBNSUNLRVkgKi8KLQl1bnNpZ25lZCBsb25nIElWMTY7Ci0JdW5zaWduZWQgbG9uZyBJVjMyOwotCXVuc2lnbmVkIGxvbmcgSzA7CQkvKiBmb3IgTUlDS0VZIExvdyAqLwotCXVuc2lnbmVkIGxvbmcgSzE7CQkvKiBmb3IgTUlDS0VZIEhpZyAqLwotCXVuc2lnbmVkIGxvbmcgTDsJCS8qIEN1cnJlbnQgc3RhdGUgZm9yIE1JQ0tFWSAqLwotCXVuc2lnbmVkIGxvbmcgUjsJCS8qIEN1cnJlbnQgc3RhdGUgZm9yIE1JQ0tFWSAqLwotCXVuc2lnbmVkIGxvbmcgTTsJCS8qIE1lc3NhZ2UgYWNjdW11bGF0b3IgZm9yIE1JQ0tFWSAqLwotCXU4IFJDNEtFWVsxNl07Ci0JdTggTUlDWzhdOwotfTsKLQotLyogKi8KLS8qIFByaXZhdGUgLyBNaXNjIGRhdGEsIGNvdW50ZXJzIGZvciBkcml2ZXIgaW50ZXJuYWwgdXNlICovCi0vKiAqLwotc3RydWN0IHJ0X3ByaXZhdGUgewotCXUzMiBTeXN0ZW1SZXNldENudDsJLyogU3lzdGVtIHJlc2V0IGNvdW50ZXIgKi8KLQl1MzIgVHhSaW5nRnVsbENudDsJLyogVHggcmluZyBmdWxsIG9jY3VycmVuY2UgbnVtYmVyICovCi0JdTMyIFBoeVJ4RXJyQ250OwkvKiBQSFkgUnggZXJyb3IgY291bnQsIGZvciBkZWJ1ZyBwdXJwb3NlLCBtaWdodCBtb3ZlIHRvIGdsb2JhbCBjb3VudGVyICovCi0JLyogVmFyaWFibGVzIGZvciBXRVAgZW5jcnlwdGlvbiAvIGRlY3J5cHRpb24gaW4gcnRtcF93ZXAuYyAqLwotCXUzMiBGQ1NDUkMzMjsKLQlzdHJ1Y3QgcnRfYXJjZm91cmNvbnRleHQgV0VQQ09OVEVYVDsKLQkvKiBUa2lwIHN0dWZmICovCi0Jc3RydWN0IHJ0X3RraXBfa2V5X2luZm8gVHg7Ci0Jc3RydWN0IHJ0X3RraXBfa2V5X2luZm8gUng7Ci19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICoJQ2hhbm5lbCBhbmQgQkJQIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogc3RydWN0dXJlIHRvIHR1bmUgQkJQIFI2NiAoQkJQIFRVTklORykgKi8KLXN0cnVjdCBydF9iYnBfcjY2X3R1bmluZyB7Ci0JQk9PTEVBTiBiRW5hYmxlOwotCXUxNiBGYWxzZUNjYUxvd2VyVGhyZXNob2xkOwkvKiBkZWZhdWx0IDEwMCAqLwotCXUxNiBGYWxzZUNjYVVwcGVyVGhyZXNob2xkOwkvKiBkZWZhdWx0IDUxMiAqLwotCXU4IFI2NkRlbHRhOwotCXU4IFI2NkN1cnJlbnRWYWx1ZTsKLQlCT09MRUFOIFI2Nkxvd2VyVXBwZXJTZWxlY3Q7CS8qQmVmb3JlIExpbmtVcCwgVXNlZCBMb3dlckJvdW5kIG9yIFVwcGVyQm91bmQgYXMgUjY2IHZhbHVlLiAqLwotfTsKLQotLyogc3RydWN0dXJlIHRvIHN0b3JlIGNoYW5uZWwgVFggcG93ZXIgKi8KLXN0cnVjdCBydF9jaGFubmVsX3R4X3Bvd2VyIHsKLQl1MTYgUmVtYWluaW5nVGltZUZvclVzZTsJLyp1bml0OiBzZWMgKi8KLQl1OCBDaGFubmVsOwotCWNoYXIgUG93ZXI7Ci0JY2hhciBQb3dlcjI7Ci0JdTggTWF4VHhQd3I7Ci0JdTggRGZzUmVxOwotfTsKLQotLyogc3RydWN0dXJlIHRvIHN0b3JlIDgwMi4xMWogY2hhbm5lbCBUWCBwb3dlciAqLwotc3RydWN0IHJ0X2NoYW5uZWxfMTFqX3R4X3Bvd2VyIHsKLQl1OCBDaGFubmVsOwotCXU4IEJXOwkJLyogQldfMTAgb3IgQldfMjAgKi8KLQljaGFyIFBvd2VyOwotCWNoYXIgUG93ZXIyOwotCXUxNiBSZW1haW5pbmdUaW1lRm9yVXNlOwkvKnVuaXQ6IHNlYyAqLwotfTsKLQotc3RydWN0IHJ0X3NvZnRfcnhfYW50X2RpdmVyc2l0eSB7Ci0JdTggRXZhbHVhdGVQZXJpb2Q7CS8qIDA6bm90IGV2YWx1dGUgc3RhdHVzLCAxOiBldmFsdWF0ZSBzdGF0dXMsIDI6IHN3aXRjaGluZyBzdGF0dXMgKi8KLQl1OCBFdmFsdWF0ZVN0YWJsZUNudDsKLQl1OCBQYWlyMVByaW1hcnlSeEFudDsJLyogMDpBbnQtRTEsIDE6QW50LUUyICovCi0JdTggUGFpcjFTZWNvbmRhcnlSeEFudDsJLyogMDpBbnQtRTEsIDE6QW50LUUyICovCi0JdTggUGFpcjJQcmltYXJ5UnhBbnQ7CS8qIDA6QW50LUUzLCAxOkFudC1FNCAqLwotCXU4IFBhaXIyU2Vjb25kYXJ5UnhBbnQ7CS8qIDA6QW50LUUzLCAxOkFudC1FNCAqLwotCXNob3J0IFBhaXIxQXZnUnNzaVsyXTsJLyogQXZnUnNzaVswXTpFMSwgQXZnUnNzaVsxXTpFMiAqLwotCXNob3J0IFBhaXIyQXZnUnNzaVsyXTsJLyogQXZnUnNzaVswXTpFMywgQXZnUnNzaVsxXTpFNCAqLwotCXNob3J0IFBhaXIxTGFzdEF2Z1Jzc2k7CS8qICovCi0Jc2hvcnQgUGFpcjJMYXN0QXZnUnNzaTsJLyogKi8KLQl1bnNpZ25lZCBsb25nIFJjdlBrdE51bVdoZW5FdmFsdWF0ZTsKLQlCT09MRUFOIEZpcnN0UGt0QXJyaXZlZFdoZW5FdmFsdWF0ZTsKLQlzdHJ1Y3QgcnRfcmFsaW5rX3RpbWVyIFJ4QW50RGl2ZXJzaXR5VGltZXI7Ci19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICoJc3RydWN0dXJlIGZvciByYWRhciBkZXRlY3Rpb24gYW5kIGNoYW5uZWwgc3dpdGNoCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RydWN0IHJ0X3JhZGFyX2RldGVjdCB7Ci0JLypCT09MRUFOICAgICAgICAgICBJRUVFODAyMTFIOyAgICAgICAgICAgICAgICAgICAgIC8vIDA6IGRpc2FibGUsIDE6IGVuYWJsZSBJRUVFODAyLjExaCAqLwotCXU4IENTQ291bnQ7CQkvKkNoYW5uZWwgc3dpdGNoIGNvdW50ZXIgKi8KLQl1OCBDU1BlcmlvZDsJCS8qQ2hhbm5lbCBzd2l0Y2ggcGVyaW9kIChiZWFjb24gY291bnQpICovCi0JdTggUkRDb3VudDsJCS8qUmFkYXIgZGV0ZWN0aW9uIGNvdW50ZXIgKi8KLQl1OCBSRE1vZGU7CQkvKlJhZGFyIERldGVjdGlvbiBtb2RlICovCi0JdTggUkREdXJSZWdpb247CS8qUmFkYXIgZGV0ZWN0aW9uIGR1cmF0aW9uIHJlZ2lvbiAqLwotCXU4IEJCUFIxNjsKLQl1OCBCQlBSMTc7Ci0JdTggQkJQUjE4OwotCXU4IEJCUFIyMTsKLQl1OCBCQlBSMjI7Ci0JdTggQkJQUjY0OwotCXVuc2lnbmVkIGxvbmcgSW5TZXJ2aWNlTW9uaXRvckNvdW50OwkvKiB1bml0OiBzZWMgKi8KLQl1OCBEZnNTZXNzaW9uVGltZTsKLQlCT09MRUFOIGJGYXN0RGZzOwotCXU4IENoTW92aW5nVGltZTsKLQl1OCBMb25nUHVsc2VSYWRhclRoOwotfTsKLQotdHlwZWRlZiBlbnVtIF9BQkdCQU5EX1NUQVRFXyB7Ci0JVU5LTk9XTl9CQU5ELAotCUJHX0JBTkQsCi0JQV9CQU5ELAotfSBBQkdCQU5EX1NUQVRFOwotCi0jaWZkZWYgUlRNUF9NQUNfUENJCi0vKiBQb3dlciBzYXZlIG1ldGhvZCBjb250cm9sICovCi10eXBlZGVmIHVuaW9uIF9QU19DT05UUk9MIHsKLQlzdHJ1Y3QgewotCQl1bnNpZ25lZCBsb25nIEVuYWJsZVBTaW5JZGxlOjE7CS8qIEVuYWJsZSByYWRpbyBvZmYgd2hlbiBub3QgY29ubmVjdGVkIHRvIEFQLiByYWRpbyBvbiBvbmx5IHdoZW4gc2l0ZXN1cnZleSwgKi8KLQkJdW5zaWduZWQgbG9uZyBFbmFibGVOZXdQUzoxOwkvKiBFbmFibGUgbmV3ICBDaGlwIHBvd2VyIHNhdmUgZnVuY3Rpb24gLiBOZXcgbWV0aG9kIGNhbiBvbmx5IGJlIGFwcGxpZWQgaW4gY2hpcCB2ZXJzaW9uIGFmdGVyIDI4NzIuIGFuZCBQQ0llLiAqLwotCQl1bnNpZ25lZCBsb25nIHJ0MzB4eFBvd2VyTW9kZToyOwkvKiBQb3dlciBMZXZlbCBNb2RlIGZvciBydDMweHggY2hpcCAqLwotCQl1bnNpZ25lZCBsb25nIHJ0MzB4eEZvbGxvd0hvc3RBU1BNOjE7CS8qIENhcmQgRm9sbG93cyBIb3N0J3Mgc2V0dGluZyBmb3IgcnQzMHh4IGNoaXAuICovCi0JCXVuc2lnbmVkIGxvbmcgcnQzMHh4Rm9yY2VBU1BNVGVzdDoxOwkvKiBGb3JjZSBlbmFibGUgTDEgZm9yIHJ0MzB4eCBjaGlwLiBUaGlzIGhhcyBoaWdoZXIgcHJpb3JpdHkgdGhhbiBydDMweHhGb2xsb3dIb3N0QVNQTSBNb2RlLiAqLwotCQl1bnNpZ25lZCBsb25nIHJzdjoyNjsJLyogUmFkaW8gTWVhc3VyZW1lbnQgRW5hYmxlICovCi0JfSBmaWVsZDsKLQl1bnNpZ25lZCBsb25nIHdvcmQ7Ci19IFBTX0NPTlRST0wsICpQUFNfQ09OVFJPTDsKLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqCXN0cnVjdHVyZSBmb3IgTUxNRSBzdGF0ZSBtYWNoaW5lCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RydWN0IHJ0X21sbWUgewotCS8qIFNUQSBzdGF0ZSBtYWNoaW5lcyAqLwotCXN0cnVjdCBydF9zdGF0ZV9tYWNoaW5lIENudGxNYWNoaW5lOwotCXN0cnVjdCBydF9zdGF0ZV9tYWNoaW5lIEFzc29jTWFjaGluZTsKLQlzdHJ1Y3QgcnRfc3RhdGVfbWFjaGluZSBBdXRoTWFjaGluZTsKLQlzdHJ1Y3QgcnRfc3RhdGVfbWFjaGluZSBBdXRoUnNwTWFjaGluZTsKLQlzdHJ1Y3QgcnRfc3RhdGVfbWFjaGluZSBTeW5jTWFjaGluZTsKLQlzdHJ1Y3QgcnRfc3RhdGVfbWFjaGluZSBXcGFQc2tNYWNoaW5lOwotCXN0cnVjdCBydF9zdGF0ZV9tYWNoaW5lIExlYXBNYWNoaW5lOwotCVNUQVRFX01BQ0hJTkVfRlVOQyBBc3NvY0Z1bmNbQVNTT0NfRlVOQ19TSVpFXTsKLQlTVEFURV9NQUNISU5FX0ZVTkMgQXV0aEZ1bmNbQVVUSF9GVU5DX1NJWkVdOwotCVNUQVRFX01BQ0hJTkVfRlVOQyBBdXRoUnNwRnVuY1tBVVRIX1JTUF9GVU5DX1NJWkVdOwotCVNUQVRFX01BQ0hJTkVfRlVOQyBTeW5jRnVuY1tTWU5DX0ZVTkNfU0laRV07Ci0JU1RBVEVfTUFDSElORV9GVU5DIEFjdEZ1bmNbQUNUX0ZVTkNfU0laRV07Ci0JLyogQWN0aW9uICovCi0Jc3RydWN0IHJ0X3N0YXRlX21hY2hpbmUgQWN0TWFjaGluZTsKLQotCS8qIGNvbW1vbiBXUEEgc3RhdGUgbWFjaGluZSAqLwotCXN0cnVjdCBydF9zdGF0ZV9tYWNoaW5lIFdwYU1hY2hpbmU7Ci0JU1RBVEVfTUFDSElORV9GVU5DIFdwYUZ1bmNbV1BBX0ZVTkNfU0laRV07Ci0KLQl1bnNpZ25lZCBsb25nIENoYW5uZWxRdWFsaXR5OwkvKiAwLi4xMDAsIENoYW5uZWwgUXVhbGl0eSBJbmRpY2F0aW9uIGZvciBSb2FtaW5nICovCi0JdW5zaWduZWQgbG9uZyBOb3czMjsJCS8qIGxhdGNoIHRoZSB2YWx1ZSBvZiBOZGlzR2V0U3lzdGVtVXBUaW1lKCkgKi8KLQl1bnNpZ25lZCBsb25nIExhc3RTZW5kTlVMTHBzbVRpbWU7Ci0KLQlCT09MRUFOIGJSdW5uaW5nOwotCXNwaW5sb2NrX3QgVGFza0xvY2s7Ci0Jc3RydWN0IHJ0X21sbWVfcXVldWUgUXVldWU7Ci0KLQl1MzIgU2hpZnRSZWc7Ci0KLQlzdHJ1Y3QgcnRfcmFsaW5rX3RpbWVyIFBlcmlvZGljVGltZXI7Ci0Jc3RydWN0IHJ0X3JhbGlua190aW1lciBBUFNEUGVyaW9kaWNUaW1lcjsKLQlzdHJ1Y3QgcnRfcmFsaW5rX3RpbWVyIExpbmtEb3duVGltZXI7Ci0Jc3RydWN0IHJ0X3JhbGlua190aW1lciBMaW5rVXBUaW1lcjsKLSNpZmRlZiBSVE1QX01BQ19QQ0kKLQl1OCBiUHNQb2xsVGltZXJSdW5uaW5nOwotCXN0cnVjdCBydF9yYWxpbmtfdGltZXIgUHNQb2xsVGltZXI7Ci0Jc3RydWN0IHJ0X3JhbGlua190aW1lciBSYWRpb09uT2ZmVGltZXI7Ci0jZW5kaWYJCQkJLyogUlRNUF9NQUNfUENJIC8vICovCi0JdW5zaWduZWQgbG9uZyBQZXJpb2RpY1JvdW5kOwotCXVuc2lnbmVkIGxvbmcgT25lU2VjUGVyaW9kaWNSb3VuZDsKLQotCXU4IFJlYWxSeFBhdGg7Ci0JQk9PTEVBTiBiTG93VGhyb3VnaHB1dDsKLQlCT09MRUFOIGJFbmFibGVBdXRvQW50ZW5uYUNoZWNrOwotCXN0cnVjdCBydF9yYWxpbmtfdGltZXIgUnhBbnRFdmFsVGltZXI7Ci0KLSNpZmRlZiBSVDMweHgKLQl1OCBDYWxpQlc0MFJmUjI0OwotCXU4IENhbGlCVzIwUmZSMjQ7Ci0jZW5kaWYJCQkJLyogUlQzMHh4IC8vICovCi0KLSNpZmRlZiBSVE1QX01BQ19VU0IKLQlzdHJ1Y3QgcnRfcmFsaW5rX3RpbWVyIEF1dG9XYWtldXBUaW1lcjsKLQlCT09MRUFOIEF1dG9XYWtldXBUaW1lclJ1bm5pbmc7Ci0jZW5kaWYJCQkJLyogUlRNUF9NQUNfVVNCIC8vICovCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICoJODAyLjExIE4gcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMKLSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdHJ1Y3QgcmVvcmRlcmluZ19tcGR1IHsKLQlzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICpuZXh0OwotCXZvaWQgKnBQYWNrZXQ7CS8qIGNvbnZlcnRlZCB0byA4MDIuMyBmcmFtZSAqLwotCWludCBTZXF1ZW5jZTsJCS8qIHNlcXVlbmNlIG51bWJlciBvZiBNUERVICovCi0JQk9PTEVBTiBiQU1TRFU7Ci19OwotCi1zdHJ1Y3QgcmVvcmRlcmluZ19saXN0IHsKLQlzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICpuZXh0OwotCWludCBxbGVuOwotfTsKLQotc3RydWN0IHJlb3JkZXJpbmdfbXBkdV9wb29sIHsKLQl2b2lkICptZW07Ci0Jc3BpbmxvY2tfdCBsb2NrOwotCXN0cnVjdCByZW9yZGVyaW5nX2xpc3QgZnJlZWxpc3Q7Ci19OwotCi10eXBlZGVmIGVudW0gX1JFQ19CTE9DS0FDS19TVEFUVVMgewotCVJlY2lwaWVudF9OT05FID0gMCwKLQlSZWNpcGllbnRfVVNFRCwKLQlSZWNpcGllbnRfSGFuZGxlUmVzLAotCVJlY2lwaWVudF9BY2NlcHQKLX0gUkVDX0JMT0NLQUNLX1NUQVRVUywgKlBSRUNfQkxPQ0tBQ0tfU1RBVFVTOwotCi10eXBlZGVmIGVudW0gX09SSV9CTE9DS0FDS19TVEFUVVMgewotCU9yaWdpbmF0b3JfTk9ORSA9IDAsCi0JT3JpZ2luYXRvcl9VU0VELAotCU9yaWdpbmF0b3JfV2FpdFJlcywKLQlPcmlnaW5hdG9yX0RvbmUKLX0gT1JJX0JMT0NLQUNLX1NUQVRVUywgKlBPUklfQkxPQ0tBQ0tfU1RBVFVTOwotCi1zdHJ1Y3QgcnRfYmFfb3JpX2VudHJ5IHsKLQl1OCBXY2lkOwotCXU4IFRJRDsKLQl1OCBCQVdpblNpemU7Ci0JdTggVG9rZW47Ci0vKiBTZXF1ZW5jZSBpcyB0byBmaWxsIGV2ZXJ5IG91dGdvaW5nIFFvUyBEQVRBIGZyYW1lJ3Mgc2VxdWVuY2UgZmllbGQgaW4gODAyLjExIGhlYWRlci4gKi8KLQl1MTYgU2VxdWVuY2U7Ci0JdTE2IFRpbWVPdXRWYWx1ZTsKLQlPUklfQkxPQ0tBQ0tfU1RBVFVTIE9SSV9CQV9TdGF0dXM7Ci0Jc3RydWN0IHJ0X3JhbGlua190aW1lciBPUklCQVRpbWVyOwotCXZvaWQgKnBBZGFwdGVyOwotfTsKLQotc3RydWN0IHJ0X2JhX3JlY19lbnRyeSB7Ci0JdTggV2NpZDsKLQl1OCBUSUQ7Ci0JdTggQkFXaW5TaXplOwkvKiA3LjMuMS4xNC4gZWFjaCBidWZmZXIgaXMgY2FwYWJsZSBvZiBob2xkaW5nIGEgbWF4IEFNU0RVIG9yIE1TRFUuICovCi0JLyp1OCBOdW1PZlJ4UGt0OyAqLwotCS8qdTggICAgQ3VyaW5kaWR4OyAvLyB0aGUgaGVhZCBpbiB0aGUgUlggcmVvcmRlcmluZyBidWZmZXIgKi8KLQl1MTYgTGFzdEluZFNlcTsKLS8qICAgICAgdTE2ICAgICAgICAgIExhc3RJbmRTZXFBdFRpbWVyOyAqLwotCXUxNiBUaW1lT3V0VmFsdWU7Ci0Jc3RydWN0IHJ0X3JhbGlua190aW1lciBSRUNCQVRpbWVyOwotCXVuc2lnbmVkIGxvbmcgTGFzdEluZFNlcUF0VGltZXI7Ci0JdW5zaWduZWQgbG9uZyBuRHJvcFBhY2tldDsKLQl1bnNpZ25lZCBsb25nIHJjdlNlcTsKLQlSRUNfQkxPQ0tBQ0tfU1RBVFVTIFJFQ19CQV9TdGF0dXM7Ci0vKiAgICAgIHU4ICAgUnhCdWZJZHhVc2VkOyAqLwotCS8qIGNvcnJlc3BvbmRpbmcgdmlydHVhbCBhZGRyZXNzIGZvciBSWCByZW9yZGVyaW5nIHBhY2tldCBzdG9yYWdlLiAqLwotCS8qUlRNUF9SRU9SREVSRE1BQlVGIE1BUF9SWEJ1ZltNQVhfUlhfUkVPUkRFUkJVRl07ICovCi0Jc3BpbmxvY2tfdCBSeFJlUmluZ0xvY2s7CS8qIFJ4IFJpbmcgc3BpbmxvY2sgKi8KLS8qICAgICAgc3RydWN0IF9CQV9SRUNfRU5UUlkgKnBOZXh0OyAqLwotCXZvaWQgKnBBZGFwdGVyOwotCXN0cnVjdCByZW9yZGVyaW5nX2xpc3QgbGlzdDsKLX07Ci0KLXN0cnVjdCBydF9iYV90YWJsZSB7Ci0JdW5zaWduZWQgbG9uZyBudW1Bc1JlY2lwaWVudDsJLyogSSBhbSByZWNpcGllbnQgb2YgbnVtQXNSZWNpcGllbnQgY2xpZW50cy4gVGhlc2UgY2xpZW50IGFyZSBpbiB0aGUgQkFSZWNFbnRyeVtdICovCi0JdW5zaWduZWQgbG9uZyBudW1Bc09yaWdpbmF0b3I7CS8qIEkgYW0gb3JpZ2luYXRvciBvZiAgIG51bUFzT3JpZ2luYXRvciBjbGllbnRzLiBUaGVzZSBjbGllbnRzIGFyZSBpbiB0aGUgQkFPcmlFbnRyeVtdICovCi0JdW5zaWduZWQgbG9uZyBudW1Eb25lT3JpZ2luYXRvcjsJLyogY291bnQgRG9uZSBPcmlnaW5hdG9yIHNlc3Npb25zICovCi0Jc3RydWN0IHJ0X2JhX29yaV9lbnRyeSBCQU9yaUVudHJ5W01BWF9MRU5fT0ZfQkFfT1JJX1RBQkxFXTsKLQlzdHJ1Y3QgcnRfYmFfcmVjX2VudHJ5IEJBUmVjRW50cnlbTUFYX0xFTl9PRl9CQV9SRUNfVEFCTEVdOwotfTsKLQotLypGb3IgUXVyZXlCQVRhYmxlT0lEIHVzZTsgKi8KLXN0cnVjdCBQQUNLRUQgcnRfb2lkX2JhX3JlY19lbnRyeSB7Ci0JdTggTUFDQWRkcltNQUNfQUREUl9MRU5dOwotCXU4IEJhQml0bWFwOwkJLyogaWYgKEJhQml0bWFwJigxPDxUSUQpKSwgdGhpcyBzZXNzaW9uIHdpdGh7TUFDQWRkciwgVElEfWV4aXN0cywgc28gcmVhZCBCdWZTaXplW1RJRF0gZm9yIEJ1ZmZlclNpemUgKi8KLQl1OCByc3Y7Ci0JdTggQnVmU2l6ZVs4XTsKLQlSRUNfQkxPQ0tBQ0tfU1RBVFVTIFJFQ19CQV9TdGF0dXNbOF07Ci19OwotCi0vKkZvciBRdXJleUJBVGFibGVPSUQgdXNlOyAqLwotc3RydWN0IFBBQ0tFRCBydF9vaWRfYmFfb3JpX2VudHJ5IHsKLQl1OCBNQUNBZGRyW01BQ19BRERSX0xFTl07Ci0JdTggQmFCaXRtYXA7CQkvKiBpZiAoQmFCaXRtYXAmKDE8PFRJRCkpLCB0aGlzIHNlc3Npb24gd2l0aHtNQUNBZGRyLCBUSUR9ZXhpc3RzLCBzbyByZWFkIEJ1ZlNpemVbVElEXSBmb3IgQnVmZmVyU2l6ZSwgcmVhZCBPUklfQkFfU3RhdHVzW1RJRF0gZm9yIHN0YXR1cyAqLwotCXU4IHJzdjsKLQl1OCBCdWZTaXplWzhdOwotCU9SSV9CTE9DS0FDS19TVEFUVVMgT1JJX0JBX1N0YXR1c1s4XTsKLX07Ci0KLXN0cnVjdCBydF9xdWVyeWJhX3RhYmxlIHsKLQlzdHJ1Y3QgcnRfb2lkX2JhX29yaV9lbnRyeSBCQU9yaUVudHJ5WzMyXTsKLQlzdHJ1Y3QgcnRfb2lkX2JhX3JlY19lbnRyeSBCQVJlY0VudHJ5WzMyXTsKLQl1OCBPcmlOdW07CQkvKiBOdW1iZXIgb2YgYmVsb3cgQkFPcmlFbnRyeSAqLwotCXU4IFJlY051bTsJCS8qIE51bWJlciBvZiBiZWxvdyBCQVJlY0VudHJ5ICovCi19OwotCi10eXBlZGVmIHVuaW9uIF9CQUNBUF9TVFJVQyB7Ci0Jc3RydWN0IHsKLQkJdTMyIFJ4QkFXaW5MaW1pdDo4OwotCQl1MzIgVHhCQVdpbkxpbWl0Ojg7Ci0JCXUzMiBBdXRvQkE6MTsJLyogYXV0b21hdGljYWxseSBCQSAqLwotCQl1MzIgUG9saWN5OjI7CS8qIDA6IERFTEFZX0JBIDE6SU1NRURfQkEgICgvL0JBIFBvbGljeSBzdWJmaWxlZCB2YWx1ZSBpbiBBRERCQSBmcmFtZSkgICAyOkJBLW5vdCB1c2UgKi8KLQkJdTMyIE1wZHVEZW5zaXR5OjM7Ci0JCXUzMiBBbXNkdUVuYWJsZToxOwkvKkVuYWJsZSBBTVNEVSB0cmFuc21pc3N0aW9uICovCi0JCXUzMiBBbXNkdVNpemU6MTsJLyogMDozODM5LCAxOjc5MzUgYnl0ZXMuIHUzMiAgTVNEVVNpemVUb0J5dGVzW10gICAgICAgID0geyAzODM5LCA3OTM1fTsgKi8KLQkJdTMyIE1NUFNtb2RlOjI7CS8qIE1JTU8gcG93ZXIgc2F2ZSBtb3JlLCAwOnN0YXRpYywgMTpkeW5hbWljLCAyOnJzdiwgMzptaW1vIGVuYWJsZSAqLwotCQl1MzIgYkh0QWRob2M6MTsJLyogYWRob2MgY2FuIHVzZSBodCByYXRlLiAqLwotCQl1MzIgYjIwNDBDb2V4aXN0U2NhblN1cDoxOwkvKkFzIFN0YSwgc3VwcG9ydCBkbyAyMDQwIGNvZXhpc3RlbmNlIHNjYW4gZm9yIEFQLiBBcyBBcCwgc3VwcG9ydCBtb25pdG9yIHRyaWdnZXIgZXZlbnQgdG8gY2hlY2sgaWYgY2FuIHVzZSBCVyA0ME1Iei4gKi8KLQkJdTMyOiA0OwotCX0gZmllbGQ7Ci0JdTMyIHdvcmQ7Ci19IEJBQ0FQX1NUUlVDLCAqUEJBQ0FQX1NUUlVDOwotCi1zdHJ1Y3QgcnRfb2lkX2FkZF9iYV9lbnRyeSB7Ci0JQk9PTEVBTiBJc1JlY2lwaWVudDsKLQl1OCBNQUNBZGRyW01BQ19BRERSX0xFTl07Ci0JdTggVElEOwotCXU4IG5NU0RVOwotCXUxNiBUaW1lT3V0OwotCUJPT0xFQU4gYkFsbFRpZDsJLyogSWYgVHJ1ZSwgZGVsZXRlIGFsbCBUSUQgZm9yIEJBIHNlc3Npb25zIHdpdGggdGhpcyBNQUNhZGRyLiAqLwotfTsKLQotI2RlZmluZSBJU19IVF9TVEEoX3BNYWNFbnRyeSkJXAotCShfcE1hY0VudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTU9ERSA+PSBNT0RFX0hUTUlYKQotCi0jZGVmaW5lIElTX0hUX1JBVEUoX3BNYWNFbnRyeSkJXAotCShfcE1hY0VudHJ5LT5IVFBoeU1vZGUuZmllbGQuTU9ERSA+PSBNT0RFX0hUTUlYKQotCi0jZGVmaW5lIFBFRVJfSVNfSFRfUkFURShfcE1hY0VudHJ5KQlcCi0JKF9wTWFjRW50cnktPkhUUGh5TW9kZS5maWVsZC5NT0RFID49IE1PREVfSFRNSVgpCi0KLS8qVGhpcyBzdHJ1Y3R1cmUgaXMgZm9yIGFsbCA4MDIuMTFuIGNhcmQgSW50ZXJPcHRpYmlsaXR5VGVzdCBhY3Rpb24uIFJlc2V0IGFsbCBOdW0gZXZlcnkgbiBzZWNvbmQuICAoRGV0YWlscyBzZWUgTUxNRVBlcmlvZGljKSAqLwotc3RydWN0IHJ0X2lvdCB7Ci0JdTggVGhyZXNob2xkWzJdOwotCXU4IFJlb3JkZXJUaW1lT3V0TnVtW01BWF9MRU5fT0ZfQkFfUkVDX1RBQkxFXTsJLyogY29tcGFyZSB3aXRoIHRocmVzaG9sZFswXSAqLwotCXU4IFJlZnJlc2hOdW1bTUFYX0xFTl9PRl9CQV9SRUNfVEFCTEVdOwkvKiBjb21wYXJlIHdpdGggdGhyZXNob2xkWzFdICovCi0JdW5zaWduZWQgbG9uZyBPbmVTZWNJbldpbmRvd0NvdW50OwotCXVuc2lnbmVkIGxvbmcgT25lU2VjRnJhbWVEdXBsaWNhdGVDb3VudDsKLQl1bnNpZ25lZCBsb25nIE9uZVNlY091dFdpbmRvd0NvdW50OwotCXU4IERlbE9yaUFjdDsKLQl1OCBEZWxSZWNBY3Q7Ci0JdTggUlRTU2hvcnRQcm90OwotCXU4IFJUU0xvbmdQcm90OwotCUJPT0xFQU4gYlJUU0xvbmdQcm90T247Ci0JQk9PTEVBTiBiTGFzdEF0aGVyb3M7Ci0JQk9PTEVBTiBiQ3VycmVudEF0aGVyb3M7Ci0JQk9PTEVBTiBiTm93QXRoZXJvc0J1cnN0T247Ci0JQk9PTEVBTiBiTmV4dERpc2FibGVSeEJBOwotCUJPT0xFQU4gYlRvZ2dsZTsKLX07Ci0KLS8qIFRoaXMgaXMgdGhlIHJlZ2lzdHJ5IHNldHRpbmcgZm9yIDgwMi4xMW4gdHJhbnNtaXQgc2V0dGluZy4gIFVzZWQgaW4gYWR2YW5jZWQgcGFnZS4gKi8KLXR5cGVkZWYgdW5pb24gX1JFR19UUkFOU01JVF9TRVRUSU5HIHsKLQlzdHJ1Y3QgewotCQkvKnUzMiAgUGh5TW9kZTo0OyAqLwotCQkvKnUzMiAgTUNTOjc7ICAgICAgICAgICAgICAgICAvLyBNQ1MgKi8KLQkJdTMyIHJzdjA6MTA7Ci0JCXUzMiBUeEJGOjE7Ci0JCXUzMiBCVzoxOwkvKmNoYW5uZWwgYmFuZHdpZHRoIDIwTUh6IG9yIDQwIE1IeiAqLwotCQl1MzIgU2hvcnRHSToxOwotCQl1MzIgU1RCQzoxOwkvKlNQQUNFICovCi0JCXUzMiBUUkFOU05POjI7Ci0JCXUzMiBIVE1PREU6MTsKLQkJdTMyIEVYVENIQToyOwotCQl1MzIgcnN2OjEzOwotCX0gZmllbGQ7Ci0JdTMyIHdvcmQ7Ci19IFJFR19UUkFOU01JVF9TRVRUSU5HLCAqUFJFR19UUkFOU01JVF9TRVRUSU5HOwotCi10eXBlZGVmIHVuaW9uIF9ERVNJUkVEX1RSQU5TTUlUX1NFVFRJTkcgewotCXN0cnVjdCB7Ci0JCXUxNiBNQ1M6NzsJLyogTUNTICovCi0JCXUxNiBQaHlNb2RlOjQ7Ci0JCXUxNiBGaXhlZFR4TW9kZToyOwkvKiBJZiBNQ1MgaXNuJ3QgQVVUTywgZml4IHJhdGUgaW4gQ0NLLCBPRkRNIG9yIEhUIG1vZGUuICovCi0JCXUxNiByc3Y6MzsKLQl9IGZpZWxkOwotCXUxNiB3b3JkOwotfSBERVNJUkVEX1RSQU5TTUlUX1NFVFRJTkcsICpQREVTSVJFRF9UUkFOU01JVF9TRVRUSU5HOwotCi0jaWZkZWYgUlRNUF9NQUNfVVNCCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICoJVVNCLWJhc2VkIGNoaXAgQmVhY29uIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBCRUFDT05fQklUTUFQX01BU0sJCTB4ZmYKLXN0cnVjdCBydF9iZWFjb25fc3luYyB7Ci0JdTggQmVhY29uQnVmW0hXX0JFQUNPTl9NQVhfQ09VTlRdW0hXX0JFQUNPTl9PRkZTRVRdOwotCXU4IEJlYWNvblR4V0lbSFdfQkVBQ09OX01BWF9DT1VOVF1bVFhXSV9TSVpFXTsKLQl1bnNpZ25lZCBsb25nIFRpbUlFTG9jYXRpb25JbkJlYWNvbltIV19CRUFDT05fTUFYX0NPVU5UXTsKLQl1bnNpZ25lZCBsb25nIENhcGFiaWxpdHlJbmZvTG9jYXRpb25JbkJlYWNvbltIV19CRUFDT05fTUFYX0NPVU5UXTsKLQlCT09MRUFOIEVuYWJsZUJlYWNvbjsJLyogdHJpZ2dlciB0byBlbmFibGUgYmVhY29uIHRyYW5zbWlzc2lvbi4gKi8KLQl1OCBCZWFjb25CaXRNYXA7CS8qIE5PVEU6IElmIHRoZSBNQVhfTUJTU0lEX05VTSBpcyBsYXJnZXIgdGhhbiA4LCB0aGlzIHBhcmFtZXRlciBuZWVkcyB0byBjaGFuZ2UuICovCi0JdTggRHRpbUJpdE9uOwkvKiBOT1RFOiBJZiB0aGUgTUFYX01CU1NJRF9OVU0gaXMgbGFyZ2VyIHRoYW4gOCwgdGhpcyBwYXJhbWV0ZXIgbmVlZHMgdG8gY2hhbmdlLiAqLwotfTsKLSNlbmRpZiAvKiBSVE1QX01BQ19VU0IgLy8gKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqCU11bHRpcGxlIFNTSUQgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMKLSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIFdMQU5fTUFYX05VTV9PRl9USU0JCQkoKE1BWF9MRU5fT0ZfTUFDX1RBQkxFID4+IDMpICsgMSkJLyogLzggKyAxICovCi0jZGVmaW5lIFdMQU5fQ1RfVElNX0JDTUNfT0ZGU0VUCQkwCS8qIHVuaXQ6IDMyQiAqLwotCi0vKiBjbGVhciBiY21jIFRJTSBiaXQgKi8KLSNkZWZpbmUgV0xBTl9NUl9USU1fQkNNQ19DTEVBUihhcGlkeCkgXAotCXBBZC0+QXBDZmcuTUJTU0lEW2FwaWR4XS5UaW1CaXRtYXBzW1dMQU5fQ1RfVElNX0JDTUNfT0ZGU0VUXSAmPSB+QklUOFswXTsKLQotLyogc2V0IGJjbWMgVElNIGJpdCAqLwotI2RlZmluZSBXTEFOX01SX1RJTV9CQ01DX1NFVChhcGlkeCkgXAotCXBBZC0+QXBDZmcuTUJTU0lEW2FwaWR4XS5UaW1CaXRtYXBzW1dMQU5fQ1RfVElNX0JDTUNfT0ZGU0VUXSB8PSBCSVQ4WzBdOwotCi0vKiBjbGVhciBhIHN0YXRpb24gUFMgVElNIGJpdCAqLwotI2RlZmluZSBXTEFOX01SX1RJTV9CSVRfQ0xFQVIoYWRfcCwgYXBpZHgsIHdjaWQpIFwKLQl7CXU4IHRpbV9vZmZzZXQgPSB3Y2lkID4+IDM7IFwKLQkJdTggYml0X29mZnNldCA9IHdjaWQgJiAweDc7IFwKLQkJYWRfcC0+QXBDZmcuTUJTU0lEW2FwaWR4XS5UaW1CaXRtYXBzW3RpbV9vZmZzZXRdICY9ICh+QklUOFtiaXRfb2Zmc2V0XSk7IH0KLQotLyogc2V0IGEgc3RhdGlvbiBQUyBUSU0gYml0ICovCi0jZGVmaW5lIFdMQU5fTVJfVElNX0JJVF9TRVQoYWRfcCwgYXBpZHgsIHdjaWQpIFwKLQl7CXU4IHRpbV9vZmZzZXQgPSB3Y2lkID4+IDM7IFwKLQkJdTggYml0X29mZnNldCA9IHdjaWQgJiAweDc7IFwKLQkJYWRfcC0+QXBDZmcuTUJTU0lEW2FwaWR4XS5UaW1CaXRtYXBzW3RpbV9vZmZzZXRdIHw9IEJJVDhbYml0X29mZnNldF07IH0KLQotLyogY29uZmlndXJhdGlvbiBjb21tb24gdG8gT1BNT0RFX0FQIGFzIHdlbGwgYXMgT1BNT0RFX1NUQSAqLwotc3RydWN0IHJ0X2NvbW1vbl9jb25maWcgewotCi0JQk9PTEVBTiBiQ291bnRyeUZsYWc7Ci0JdTggQ291bnRyeUNvZGVbM107Ci0JdTggR2VvZ3JhcGh5OwotCXU4IENvdW50cnlSZWdpb247CS8qIEVudW0gb2YgY291bnRyeSByZWdpb24sIDA6RkNDLCAxOklDLCAyOkVUU0ksIDM6U1BBSU4sIDQ6RnJhbmNlLCA1Ok1LSywgNjpNS0sxLCA3OklzcmFlbCAqLwotCXU4IENvdW50cnlSZWdpb25Gb3JBQmFuZDsJLyogRW51bSBvZiBjb3VudHJ5IHJlZ2lvbiBmb3IgQSBiYW5kICovCi0JdTggUGh5TW9kZTsJCS8qIFBIWV8xMUEsIFBIWV8xMUIsIFBIWV8xMUJHX01JWEVELCBQSFlfQUJHX01JWEVEICovCi0JdTE2IERzaWZzOwkJLyogaW4gdW5pdHMgb2YgdXNlYyAqLwotCXVuc2lnbmVkIGxvbmcgUGFja2V0RmlsdGVyOwkvKiBQYWNrZXQgZmlsdGVyIGZvciByZWNlaXZpbmcgKi8KLQl1OCBSZWd1bGF0b3J5Q2xhc3M7Ci0KLQljaGFyIFNzaWRbTUFYX0xFTl9PRl9TU0lEXTsJLyogTk9UIE5VTEwtdGVybWluYXRlZCAqLwotCXU4IFNzaWRMZW47CQkvKiB0aGUgYWN0dWFsIHNzaWQgbGVuZ3RoIGluIHVzZWQgKi8KLQl1OCBMYXN0U3NpZExlbjsJLyogdGhlIGFjdHVhbCBzc2lkIGxlbmd0aCBpbiB1c2VkICovCi0JY2hhciBMYXN0U3NpZFtNQVhfTEVOX09GX1NTSURdOwkvKiBOT1QgTlVMTC10ZXJtaW5hdGVkICovCi0JdTggTGFzdEJzc2lkW01BQ19BRERSX0xFTl07Ci0KLQl1OCBCc3NpZFtNQUNfQUREUl9MRU5dOwotCXUxNiBCZWFjb25QZXJpb2Q7Ci0JdTggQ2hhbm5lbDsKLQl1OCBDZW50cmFsQ2hhbm5lbDsJLyogQ2VudHJhbCBDaGFubmVsIHdoZW4gdXNpbmcgNDBNSHogaXMgaW5kaWNhdGluZy4gbm90IHJlYWwgY2hhbm5lbC4gKi8KLQotCXU4IFN1cFJhdGVbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdOwotCXU4IFN1cFJhdGVMZW47Ci0JdTggRXh0UmF0ZVtNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU107Ci0JdTggRXh0UmF0ZUxlbjsKLQl1OCBEZXNpcmVSYXRlW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXTsJLyogT0lEXzgwMl8xMV9ERVNJUkVEX1JBVEVTICovCi0JdTggTWF4RGVzaXJlZFJhdGU7Ci0JdTggRXhwZWN0ZWRBQ0tSYXRlW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXTsKLQotCXVuc2lnbmVkIGxvbmcgQmFzaWNSYXRlQml0bWFwOwkvKiBiYWNrdXAgYmFzaWMgcmF0ZWJpdG1hcCAqLwotCi0JQk9PTEVBTiBiQVBTRENhcGFibGU7Ci0JQk9PTEVBTiBiSW5TZXJ2aWNlUGVyaW9kOwotCUJPT0xFQU4gYkFQU0RBQ19CRTsKLQlCT09MRUFOIGJBUFNEQUNfQks7Ci0JQk9PTEVBTiBiQVBTREFDX1ZJOwotCUJPT0xFQU4gYkFQU0RBQ19WTzsKLQotCS8qIGJlY2F1c2UgVFNQRUMgY2FuIG1vZGlmeSB0aGUgQVBTRCBmbGFnLCB3ZSBuZWVkIHRvIGtlZXAgdGhlIEFQU0QgZmxhZwotCSAgIHJlcXVlc3RlZCBpbiBhc3NvY2lhdGlvbiBzdGFnZSBmcm9tIHRoZSBzdGF0aW9uOwotCSAgIHdlIG5lZWQgdG8gcmVjb3ZlciB0aGUgQVBTRCBmbGFnIGFmdGVyIHRoZSBUU1BFQyBpcyBkZWxldGVkLiAqLwotCUJPT0xFQU4gYkFDTUFQU0RCYWNrdXBbNF07CS8qIGZvciBkZWxpdmVyeS1lbmFibGVkICYgdHJpZ2dlci1lbmFibGVkIGJvdGggKi8KLQlCT09MRUFOIGJBQ01BUFNEVHJbNF07CS8qIG5vIHVzZSAqLwotCi0JQk9PTEVBTiBiTmVlZFNlbmRUcmlnZ2VyRnJhbWU7Ci0JQk9PTEVBTiBiQVBTREZvcmNlUG93ZXJTYXZlOwkvKiBGb3JjZSBwb3dlciBzYXZlIG1vZGUsIHNob3VsZCBvbmx5IHVzZSBpbiBBUFNELVNUQVVUICovCi0JdW5zaWduZWQgbG9uZyBUcmlnZ2VyVGltZXJDb3VudDsKLQl1OCBNYXhTUExlbmd0aDsKLQl1OCBCQlBDdXJyZW50Qlc7CS8qIEJXXzEwLCAgICAgICBCV18yMCwgQldfNDAgKi8KLQkvKiBtb3ZlIHRvIE1VTFRJU1NJRF9TVFJVQ1QgZm9yIE1CU1MgKi8KLQkvKkhUVFJBTlNNSVRfU0VUVElORyAgICBIVFBoeU1vZGUsIE1heEhUUGh5TW9kZSwgTWluSFRQaHlNb2RlOy8vIEZvciB0cmFuc21pdCBwaHkgc2V0dGluZyBpbiBUWFdJLiAqLwotCVJFR19UUkFOU01JVF9TRVRUSU5HIFJlZ1RyYW5zbWl0U2V0dGluZzsJLypyZWdpc3RyeSB0cmFuc21pdCBzZXR0aW5nLiB0aGlzIGlzIGZvciByZWFkaW5nIHJlZ2lzdHJ5IHNldHRpbmcgb25seS4gbm90IHVzZWZ1bC4gKi8KLQkvKnU4ICAgICAgIEZpeGVkVHhNb2RlOyAgICAgICAgICAgICAgLy8gRml4ZWQgVHggTW9kZSAoQ0NLLCBPRkRNKSwgZm9yIEhUIGZpeGVkIHR4IG1vZGUgKEdGLCBNSVgpICwgcmVmZXIgdG8gUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkhUTW9kZSAqLwotCXU4IFR4UmF0ZTsJCS8qIFNhbWUgdmFsdWUgdG8gZmlsbCBpbiBUWEQuIFR4UmF0ZSBpcyA2LWJpdCAqLwotCXU4IE1heFR4UmF0ZTsJLyogUkFURV8xLCBSQVRFXzIsIFJBVEVfNV81LCBSQVRFXzExICovCi0JdTggVHhSYXRlSW5kZXg7CS8qIFR4IHJhdGUgaW5kZXggaW4gUmF0ZVN3aXRjaFRhYmxlICovCi0JdTggVHhSYXRlVGFibGVTaXplOwkvKiBWYWxpZCBUeCByYXRlIHRhYmxlIHNpemUgaW4gUmF0ZVN3aXRjaFRhYmxlICovCi0JLypCT09MRUFOICAgICAgICAgICAgICAgYkF1dG9UeFJhdGVTd2l0Y2g7ICovCi0JdTggTWluVHhSYXRlOwkvKiBSQVRFXzEsIFJBVEVfMiwgUkFURV81XzUsIFJBVEVfMTEgKi8KLQl1OCBSdHNSYXRlOwkJLyogUkFURV94eHggKi8KLQlIVFRSQU5TTUlUX1NFVFRJTkcgTWxtZVRyYW5zbWl0OwkvKiBNR01UIGZyYW1lIFBIWSByYXRlIHNldHRpbmcgd2hlbiBvcGVyYXRpb24gYXQgSHQgcmF0ZS4gKi8KLQl1OCBNbG1lUmF0ZTsJCS8qIFJBVEVfeHh4LCB1c2VkIHRvIHNlbmQgTUxNRSBmcmFtZXMgKi8KLQl1OCBCYXNpY01sbWVSYXRlOwkvKiBEZWZhdWx0IFJhdGUgZm9yIHNlbmRpbmcgTUxNRSBmcmFtZXMgKi8KLQotCXUxNiBSdHNUaHJlc2hvbGQ7CS8qIGluIHVuaXQgb2YgQllURSAqLwotCXUxNiBGcmFnbWVudFRocmVzaG9sZDsJLyogaW4gdW5pdCBvZiBCWVRFICovCi0KLQl1OCBUeFBvd2VyOwkJLyogaW4gdW5pdCBvZiBtVyAqLwotCXVuc2lnbmVkIGxvbmcgVHhQb3dlclBlcmNlbnRhZ2U7CS8qIDB+MTAwICUgKi8KLQl1bnNpZ25lZCBsb25nIFR4UG93ZXJEZWZhdWx0OwkvKiBrZWVwIGZvciBUeFBvd2VyUGVyY2VudGFnZSAqLwotCXU4IFB3ckNvbnN0cmFpbnQ7Ci0KLQlCQUNBUF9TVFJVQyBCQUNhcGFiaWxpdHk7CS8qICAgTk8gVVNFID0gMFhGRiAgOyAgSU1NRURfQkEgPTEgIDsgIERFTEFZX0JBPTAgKi8KLQlCQUNBUF9TVFJVQyBSRUdCQUNhcGFiaWxpdHk7CS8qICAgTk8gVVNFID0gMFhGRiAgOyAgSU1NRURfQkEgPTEgIDsgIERFTEFZX0JBPTAgKi8KLQotCXN0cnVjdCBydF9pb3QgSU9UZXN0UGFybTsJLyogODAyLjExbiBJbnRlck9wYmlsaXR5IFRlc3QgUGFyYW1ldGVyOyAqLwotCXVuc2lnbmVkIGxvbmcgVHhQcmVhbWJsZTsJLyogUnQ4MDJfMTFQcmVhbWJsZUxvbmcsIFJ0ODAyXzExUHJlYW1ibGVTaG9ydCwgUnQ4MDJfMTFQcmVhbWJsZUF1dG8gKi8KLQlCT09MRUFOIGJVc2VaZXJvVG9EaXNhYmxlRnJhZ21lbnQ7CS8qIE1pY3Jvc29mdCB1c2UgMCBhcyBkaXNhYmxlICovCi0JdW5zaWduZWQgbG9uZyBVc2VCR1Byb3RlY3Rpb247CS8qIDA6IGF1dG8sIDE6IGFsd2F5cyB1c2UsIDI6IGFsd2F5cyBub3QgdXNlICovCi0JQk9PTEVBTiBiVXNlU2hvcnRTbG90VGltZTsJLyogMDogZGlzYWJsZSwgMSAtIHVzZSBzaG9ydCBzbG90ICg5dXMpICovCi0JQk9PTEVBTiBiRW5hYmxlVHhCdXJzdDsJLyogMTogZW5ibGUgVFggUEFDS0VUIEJVUlNUICh3aGVuIEJBIGlzIGVzdGFibGlzaGVkIG9yIEFQIGlzIG5vdCBhIGxlZ2FjeSBXTU0gQVApLCAwOiBkaXNhYmxlIFRYIFBBQ0tFVCBCVVJTVCAqLwotCUJPT0xFQU4gYkFnZ3JlZ2F0aW9uQ2FwYWJsZTsJLyogMTogZW5hYmxlIFRYIGFnZ3JlZ2F0aW9uIHdoZW4gdGhlIHBlZXIgc3VwcG9ydHMgaXQgKi8KLQlCT09MRUFOIGJQaWdneUJhY2tDYXBhYmxlOwkvKiAxOiBlbmFibGUgVFggcGlnZ3ktYmFjayBhY2NvcmRpbmcgTUFDJ3MgdmVyc2lvbiAqLwotCUJPT0xFQU4gYklFRUU4MDIxMUg7CS8qIDE6IGVuYWJsZSBJRUVFODAyLjExaCBzcGVjLiAqLwotCXVuc2lnbmVkIGxvbmcgRGlzYWJsZU9MQkNEZXRlY3Q7CS8qIDA6IGVuYWJsZSBPTEJDIGRldGVjdDsgMSBkaXNhYmxlIE9MQkMgZGV0ZWN0ICovCi0KLQlCT09MRUFOIGJSZGc7Ci0KLQlCT09MRUFOIGJXbW1DYXBhYmxlOwkvKiAwOmRpc2FibGUgV01NLCAxOmVuYWJsZSBXTU0gKi8KLQlzdHJ1Y3QgcnRfcW9zX2NhcGFiaWxpdHlfcGFybSBBUFFvc0NhcGFiaWxpdHk7CS8qIFFPUyBjYXBhYmlsaXR5IG9mIHRoZSBjdXJyZW50IGFzc29jaWF0ZWQgQVAgKi8KLQlzdHJ1Y3QgcnRfZWRjYV9wYXJtIEFQRWRjYVBhcm07CS8qIEVEQ0EgcGFyYW1ldGVycyBvZiB0aGUgY3VycmVudCBhc3NvY2lhdGVkIEFQICovCi0Jc3RydWN0IHJ0X3Fic3NfbG9hZF9wYXJtIEFQUWJzc0xvYWQ7CS8qIFFCU1MgbG9hZCBvZiB0aGUgY3VycmVudCBhc3NvY2lhdGVkIEFQICovCi0JdTggQWNrUG9saWN5WzRdOwkvKiBBQ0sgcG9saWN5IG9mIHRoZSBzcGVjaWZpZWQgQUMuIHNlZSBBQ0tfeHh4ICovCi0JQk9PTEVBTiBiRExTQ2FwYWJsZTsJLyogMDpkaXNhYmxlIERMUywgMTplbmFibGUgRExTICovCi0JLyogYSBiaXRtYXAgb2YgQk9PTEVBTiBmbGFncy4gZWFjaCBiaXQgcmVwcmVzZW50IGFuIG9wZXJhdGlvbiBzdGF0dXMgb2YgYSBwYXJ0aWN1bGFyICovCi0JLyogQk9PTEVBTiBjb250cm9sLCBlaXRoZXIgT04gb3IgT0ZGLiBUaGVzZSBmbGFncyBzaG91bGQgYWx3YXlzIGJlIGFjY2Vzc2VkIHZpYSAqLwotCS8qIE9QU1RBVFVTX1RFU1RfRkxBRygpLCBPUFNUQVRVU19TRVRfRkxBRygpLCBPUF9TVEFUVVNfQ0xFQVJfRkxBRygpIG1hY3Jvcy4gKi8KLQkvKiBzZWUgZk9QX1NUQVRVU194eHggaW4gUlRNUF9ERUYuQyBmb3IgZGV0YWlsIGJpdCBkZWZpbml0aW9uICovCi0JdW5zaWduZWQgbG9uZyBPcFN0YXR1c0ZsYWdzOwotCi0JQk9PTEVBTiBOZGlzUmFkaW9TdGF0ZU9mZjsJLypGb3IgSENUIDEyLjAsIHNldCB0aGlzIGZsYWcgdG8gVFJVRSBpbnN0ZWFkIG9mIGNhbGxlZCBNbG1lUmFkaW9PZmYuICovCi0JQUJHQkFORF9TVEFURSBCYW5kU3RhdGU7CS8qIEZvciBzZXR0aW5nIEJCUCB1c2VkIG9uIEIvRyBvciBBIG1vZGUuICovCi0KLQkvKiBJRUVFODAyLjExSC0tREZTLiAqLwotCXN0cnVjdCBydF9yYWRhcl9kZXRlY3QgUmFkYXJEZXRlY3Q7Ci0KLQkvKiBIVCAqLwotCXU4IEJBU2l6ZTsJCS8qIFVTZXIgZGVzaXJlZCBCQVdpbmRvd1NpemUuIFNob3VsZCBub3QgZXhjZWVkIG91ciBtYXggY2FwYWJpbGl0eSAqLwotCS8qc3RydWN0IHJ0X2h0X2NhcGFiaWxpdHkgICAgICBTdXBwb3J0ZWRIdFBoeTsgKi8KLQlzdHJ1Y3QgcnRfaHRfY2FwYWJpbGl0eSBEZXNpcmVkSHRQaHk7Ci0Jc3RydWN0IHJ0X2h0X2NhcGFiaWxpdHlfaWUgSHRDYXBhYmlsaXR5OwotCXN0cnVjdCBydF9hZGRfaHRfaW5mb19pZSBBZGRIVEluZm87CS8qIFVzZWZ1bCBhcyBBUC4gKi8KLQkvKlRoaXMgSUUgaXMgdXNlZCB3aXRoIGNoYW5uZWwgc3dpdGNoIGFubm91bmNlbWVudCBlbGVtZW50IHdoZW4gY2hhbmdpbmcgdG8gYSBuZXcgNDBNSHouICovCi0JLypUaGlzIElFIGlzIGluY2x1ZGVkIGluIGNoYW5uZWwgc3dpdGNoIGFubm91bmNlbWVudCBmcmFtZXMgNy40LjEuNSwgYmVhY29ucywgcHJvYmUgUnNwLiAqLwotCXN0cnVjdCBydF9uZXdfZXh0X2NoYW5faWUgTmV3RXh0Q2hhbk9mZnNldDsJLyo3LjMuMi4yMEEsIDEgaWYgZXh0ZW5zaW9uIGNoYW5uZWwgaXMgYWJvdmUgdGhlIGNvbnRyb2wgY2hhbm5lbCwgMyBpZiBiZWxvdywgMCBpZiBub3QgcHJlc2VudCAqLwotCi0JQk9PTEVBTiBiSFRQcm90ZWN0OwotCUJPT0xFQU4gYk1JTU9QU0VuYWJsZTsKLQlCT09MRUFOIGJCQURlY2xpbmU7Ci0vKjIwMDgvMTEvMDU6IEtIIGFkZCB0byBzdXBwb3J0IEFudGVubmEgcG93ZXItc2F2aW5nIG9mIEFQPC0tICovCi0JQk9PTEVBTiBiR3JlZW5BUEVuYWJsZTsKLS8qMjAwOC8xMS8wNTogS0ggYWRkIHRvIHN1cHBvcnQgQW50ZW5uYSBwb3dlci1zYXZpbmcgb2YgQVAtLT4gKi8KLQlCT09MRUFOIGJEaXNhYmxlUmVvcmRlcmluZzsKLQlCT09MRUFOIGJGb3J0eV9NaHpfSW50b2xlcmFudDsKLQlCT09MRUFOIGJFeHRDaGFubmVsU3dpdGNoQW5ub3VuY2VtZW50OwotCUJPT0xFQU4gYlJjdkJTU1dpZHRoVHJpZ2dlckV2ZW50czsKLQl1bnNpZ25lZCBsb25nIExhc3RSY3ZCU1NXaWR0aFRyaWdnZXJFdmVudHNUaW1lOwotCi0JdTggVHhCQVNpemU7Ci0KLQkvKiBFbmFibGUgd2lyZWxlc3MgZXZlbnQgKi8KLQlCT09MRUFOIGJXaXJlbGVzc0V2ZW50OwotCUJPT0xFQU4gYldpRmlUZXN0OwkvKiBFbmFibGUgdGhpcyBwYXJhbWV0ZXIgZm9yIFdpRmkgdGVzdCAqLwotCi0JLyogVHggJiBSeCBTdHJlYW0gbnVtYmVyIHNlbGVjdGlvbiAqLwotCXU4IFR4U3RyZWFtOwotCXU4IFJ4U3RyZWFtOwotCi0JQk9PTEVBTiBiSGFyZHdhcmVSYWRpbzsJLyogSGFyZHdhcmUgY29udHJvbGxlZCBSYWRpbyBlbmFibGVkICovCi0KLSNpZmRlZiBSVE1QX01BQ19VU0IKLQlCT09MRUFOIGJNdWx0aXBsZUlSUDsJLyogTXVsdGlwbGUgQnVsayBJTiBmbGFnICovCi0JdTggTnVtT2ZCdWxrSW5JUlA7CS8qIGlmIGJNdWx0aXBsZUlSUCA9PSBUUlVFLCBOdW1PZkJ1bGtJbklSUCB3aWxsIGJlIDQgb3RoZXJ3aXNlIGJlIDEgKi8KLQlzdHJ1Y3QgcnRfaHRfY2FwYWJpbGl0eSBTdXBwb3J0ZWRIdFBoeTsKLQl1bnNpZ25lZCBsb25nIE1heFBrdE9uZVR4QnVsazsKLQl1OCBUeEJ1bGtGYWN0b3I7Ci0JdTggUnhCdWxrRmFjdG9yOwotCi0JQk9PTEVBTiBJc1VwZGF0ZUJlYWNvbjsKLQlzdHJ1Y3QgcnRfYmVhY29uX3N5bmMgKnBCZWFjb25TeW5jOwotCXN0cnVjdCBydF9yYWxpbmtfdGltZXIgQmVhY29uVXBkYXRlVGltZXI7Ci0JdTMyIEJlYWNvbkFkanVzdDsKLQl1MzIgQmVhY29uRmFjdG9yOwotCXUzMiBCZWFjb25SZW1haW47Ci0jZW5kaWYJCQkJLyogUlRNUF9NQUNfVVNCIC8vICovCi0KLQlzcGlubG9ja190IE1lYXN1cmVSZXFUYWJMb2NrOwotCXN0cnVjdCBydF9tZWFzdXJlX3JlcV90YWIgKnBNZWFzdXJlUmVxVGFiOwotCi0Jc3BpbmxvY2tfdCBUcGNSZXFUYWJMb2NrOwotCXN0cnVjdCBydF90cGNfcmVxX3RhYiAqcFRwY1JlcVRhYjsKLQotCUJPT0xFQU4gUFNQWGxpbms7CS8qIDA6IERpc2FibGUuIDE6IEVuYWJsZSAqLwotCi0jaWYgZGVmaW5lZChSVDMwNXgpIHx8IGRlZmluZWQoUlQzMHh4KQotCS8qIHJlcXVlc3QgYnkgR2FyeSwgZm9yIEhpZ2ggUG93ZXIgaXNzdWUgKi8KLQl1OCBIaWdoUG93ZXJQYXRjaERpc2FibGVkOwotI2VuZGlmCi0KLQlCT09MRUFOIEhUX0Rpc2FsbG93VEtJUDsJLyogUmVzdHJpY3QgdGhlIGVuY3J5cHRpb24gdHlwZSBpbiAxMW4gSFQgbW9kZSAqLwotfTsKLQotLyogTW9kaWZpZWQgYnkgV3UgWGktS3VuIDQvMjEvMjAwNiAqLwotLyogU1RBIGNvbmZpZ3VyYXRpb24gYW5kIHN0YXR1cyAqLwotc3RydWN0IHJ0X3N0YV9hZG1pbl9jb25maWcgewotCS8qIEdST1VQIDEgLSAqLwotCS8qICAgVXNlciBjb25maWd1cmF0aW9uIGxvYWRlZCBmcm9tIFJlZ2lzdHJ5LCBFMlBST00gb3IgT0lEX3h4eC4gVGhlc2Ugc2V0dGluZ3MgZGVzY3JpYmUgKi8KLQkvKiAgIHRoZSB1c2VyIGludGVuZGVkIGNvbmZpZ3VyYXRpb24sIGJ1dCBub3QgbmVjZXNzYXJ5IGZ1bGx5IGVxdWFsIHRvIHRoZSBmaW5hbCAqLwotCS8qICAgc2V0dGluZ3MgaW4gQUNUSVZFIEJTUyBhZnRlciBuZWdvdGlhdGlvbi9jb21wcm9taXNlIHdpdGggdGhlIEJTUyBob2xkZXIgKGVpdGhlciAqLwotCS8qICAgQVAgb3IgSUJTUyBob2xkZXIpLiAqLwotCS8qICAgT25jZSBpbml0aWFsaXplZCwgdXNlciBjb25maWd1cmF0aW9uIGNhbiBvbmx5IGJlIGNoYW5nZWQgdmlhIE9JRF94eHggKi8KLQl1OCBCc3NUeXBlOwkJLyogQlNTX0lORlJBIG9yIEJTU19BREhPQyAqLwotCXUxNiBBdGltV2luOwkJLyogdXNlZCB3aGVuIHN0YXJ0aW5nIGEgbmV3IElCU1MgKi8KLQotCS8qIEdST1VQIDIgLSAqLwotCS8qICAgVXNlciBjb25maWd1cmF0aW9uIGxvYWRlZCBmcm9tIFJlZ2lzdHJ5LCBFMlBST00gb3IgT0lEX3h4eC4gVGhlc2Ugc2V0dGluZ3MgZGVzY3JpYmUgKi8KLQkvKiAgIHRoZSB1c2VyIGludGVuZGVkIGNvbmZpZ3VyYXRpb24sIGFuZCBzaG91bGQgYmUgYWx3YXlzIGFwcGxpZWQgdG8gdGhlIGZpbmFsICovCi0JLyogICBzZXR0aW5ncyBpbiBBQ1RJVkUgQlNTIHdpdGhvdXQgY29tcHJvbWlzaW5nIHdpdGggdGhlIEJTUyBob2xkZXIuICovCi0JLyogICBPbmNlIGluaXRpYWxpemVkLCB1c2VyIGNvbmZpZ3VyYXRpb24gY2FuIG9ubHkgYmUgY2hhbmdlZCB2aWEgT0lEX3h4eCAqLwotCXU4IFJzc2lUcmlnZ2VyOwotCXU4IFJzc2lUcmlnZ2VyTW9kZTsJLyogUlNTSV9UUklHR0VSRURfVVBPTl9CRUxPV19USFJFU0hPTEQgb3IgUlNTSV9UUklHR0VSRURfVVBPTl9FWENDRUVEX1RIUkVTSE9MRCAqLwotCXUxNiBEZWZhdWx0TGlzdGVuQ291bnQ7CS8qIGRlZmF1bHQgbGlzdGVuIGNvdW50OyAqLwotCXVuc2lnbmVkIGxvbmcgV2luZG93c1Bvd2VyTW9kZTsJLyogUG93ZXIgbW9kZSBmb3IgQUMgcG93ZXIgKi8KLQl1bnNpZ25lZCBsb25nIFdpbmRvd3NCYXR0ZXJ5UG93ZXJNb2RlOwkvKiBQb3dlciBtb2RlIGZvciBiYXR0ZXJ5IGlmIGV4aXN0cyAqLwotCUJPT0xFQU4gYldpbmRvd3NBQ0NBTUVuYWJsZTsJLyogRW5hYmxlIENBTSBwb3dlciBtb2RlIHdoZW4gQUMgb24gKi8KLQlCT09MRUFOIGJBdXRvUmVjb25uZWN0OwkvKiBTZXQgdG8gVFJVRSB3aGVuIHNldHRpbmcgT0lEXzgwMl8xMV9TU0lEIHdpdGggbm8gbWF0Y2hpbmcgQlNTSUQgKi8KLQl1bnNpZ25lZCBsb25nIFdpbmRvd3NQb3dlclByb2ZpbGU7CS8qIFdpbmRvd3MgcG93ZXIgcHJvZmlsZSwgZm9yIE5ESVM1LjEgUG5QICovCi0KLQkvKiBNSUI6aWVlZTgwMmRvdDExLmRvdDExc210KDEpLmRvdDExU3RhdGlvbkNvbmZpZ1RhYmxlKDEpICovCi0JdTE2IFBzbTsJCS8qIHBvd2VyIG1hbmFnZW1lbnQgbW9kZSAgIChQV1JfQUNUSVZFfFBXUl9TQVZFKSAqLwotCXUxNiBEaXNhc3NvY1JlYXNvbjsKLQl1OCBEaXNhc3NvY1N0YVtNQUNfQUREUl9MRU5dOwotCXUxNiBEZWF1dGhSZWFzb247Ci0JdTggRGVhdXRoU3RhW01BQ19BRERSX0xFTl07Ci0JdTE2IEF1dGhGYWlsUmVhc29uOwotCXU4IEF1dGhGYWlsU3RhW01BQ19BRERSX0xFTl07Ci0KLQlORElTXzgwMl8xMV9QUklWQUNZX0ZJTFRFUiBQcml2YWN5RmlsdGVyOwkvKiBQcml2YWN5RmlsdGVyIGVudW0gZm9yIDgwMi4xWCAqLwotCU5ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREUgQXV0aE1vZGU7CS8qIFRoaXMgc2hvdWxkIG1hdGNoIHRvIHdoYXRldmVyIG1pY3Jvc29mdCBkZWZpbmVkICovCi0JTkRJU184MDJfMTFfV0VQX1NUQVRVUyBXZXBTdGF0dXM7Ci0JTkRJU184MDJfMTFfV0VQX1NUQVRVUyBPcmlnV2VwU3RhdHVzOwkvKiBPcmlnaW5hbCB3ZXAgc3RhdHVzIHNldCBmcm9tIE9JRCAqLwotCi0JLyogQWRkIHRvIHN1cHBvcnQgZGlmZmVyZW50IGNpcGhlciBzdWl0ZSBmb3IgV1BBMi9XUEEgbW9kZSAqLwotCU5ESVNfODAyXzExX0VOQ1JZUFRJT05fU1RBVFVTIEdyb3VwQ2lwaGVyOwkvKiBNdWx0aWNhc3QgY2lwaGVyIHN1aXRlICovCi0JTkRJU184MDJfMTFfRU5DUllQVElPTl9TVEFUVVMgUGFpckNpcGhlcjsJLyogVW5pY2FzdCBjaXBoZXIgc3VpdGUgKi8KLQlCT09MRUFOIGJNaXhDaXBoZXI7CS8qIEluZGljYXRlIGN1cnJlbnQgUGFpciAmIEdyb3VwIHVzZSBkaWZmZXJlbnQgY2lwaGVyIHN1aXRlcyAqLwotCXUxNiBSc25DYXBhYmlsaXR5OwotCi0JTkRJU184MDJfMTFfV0VQX1NUQVRVUyBHcm91cEtleVdlcFN0YXR1czsKLQotCXU4IFdwYVBhc3NQaHJhc2VbNjRdOwkvKiBXUEEgUFNLIHBhc3MgcGhyYXNlICovCi0JdTMyIFdwYVBhc3NQaHJhc2VMZW47CS8qIHRoZSBsZW5ndGggb2YgV1BBIFBTSyBwYXNzIHBocmFzZSAqLwotCXU4IFBNS1szMl07CQkvKiBXUEEgUFNLIG1vZGUgUE1LICovCi0JdTggUFRLWzY0XTsJCS8qIFdQQSBQU0sgbW9kZSBQVEsgKi8KLQl1OCBHVEtbMzJdOwkJLyogR1RLIGZyb20gYXV0aGVudGljYXRvciAqLwotCXN0cnVjdCBydF9ic3NpZF9pbmZvIFNhdmVkUE1LW1BNS0lEX05PXTsKLQl1MzIgU2F2ZWRQTUtOdW07CS8qIFNhdmVkIFBNS0lEIG51bWJlciAqLwotCi0JdTggRGVmYXVsdEtleUlkOwotCi0JLyogV1BBIDgwMi4xeCBwb3J0IGNvbnRyb2wsIFdQQV84MDJfMVhfUE9SVF9TRUNVUkVELCBXUEFfODAyXzFYX1BPUlRfTk9UX1NFQ1VSRUQgKi8KLQl1OCBQb3J0U2VjdXJlZDsKLQotCS8qIEZvciBXUEEgY291bnRlcm1lYXN1cmVzICovCi0JdW5zaWduZWQgbG9uZyBMYXN0TWljRXJyb3JUaW1lOwkvKiByZWNvcmQgbGFzdCBNSUMgZXJyb3IgdGltZSAqLwotCXVuc2lnbmVkIGxvbmcgTWljRXJyQ250OwkvKiBTaG91bGQgYmUgMCwgMSwgMiwgdGhlbiByZXNldCB0byB6ZXJvIChhZnRlciBkaXNhc3NvY2lhdGlvbikuICovCi0JQk9PTEVBTiBiQmxvY2tBc3NvYzsJLyogQmxvY2sgYXNzb2NpYXRlIGF0dGVtcHQgZm9yIDYwIHNlY29uZHMgYWZ0ZXIgY291bnRlciBtZWFzdXJlIG9jY3VycmVkLiAqLwotCS8qIEZvciBXUEEtUFNLIHN1cHBsaWNhbnQgc3RhdGUgKi8KLQlXUEFfU1RBVEUgV3BhU3RhdGU7CS8qIERlZmF1bHQgaXMgU1NfTk9UVVNFIGFuZCBoYW5kbGVkIGJ5IG1pY3Jvc29mdCA4MDIuMXggKi8KLQl1OCBSZXBsYXlDb3VudGVyWzhdOwotCXU4IEFOb25jZVszMl07CS8qIEFOb25jZSBmb3IgV1BBLVBTSyBmcm9tIGF1aGVudGljYXRvciAqLwotCXU4IFNOb25jZVszMl07CS8qIFNOb25jZSBmb3IgV1BBLVBTSyAqLwotCi0JdTggTGFzdFNOUjA7CQkvKiBsYXN0IHJlY2VpdmVkIEJFQUNPTidzIFNOUiAqLwotCXU4IExhc3RTTlIxOwkJLyogbGFzdCByZWNlaXZlZCBCRUFDT04ncyBTTlIgZm9yIDJuZCAgYW50ZW5uYSAqLwotCXN0cnVjdCBydF9yc3NpX3NhbXBsZSBSc3NpU2FtcGxlOwotCXVuc2lnbmVkIGxvbmcgTnVtT2ZBdmdSc3NpU2FtcGxlOwotCi0JdW5zaWduZWQgbG9uZyBMYXN0QmVhY29uUnhUaW1lOwkvKiBPUydzIHRpbWVzdGFtcCBvZiB0aGUgbGFzdCBCRUFDT04gUlggdGltZSAqLwotCXVuc2lnbmVkIGxvbmcgTGFzdDExYkJlYWNvblJ4VGltZTsJLyogT1MncyB0aW1lc3RhbXAgb2YgdGhlIGxhc3QgMTFCIEJFQUNPTiBSWCB0aW1lICovCi0JdW5zaWduZWQgbG9uZyBMYXN0MTFnQmVhY29uUnhUaW1lOwkvKiBPUydzIHRpbWVzdGFtcCBvZiB0aGUgbGFzdCAxMUcgQkVBQ09OIFJYIHRpbWUgKi8KLQl1bnNpZ25lZCBsb25nIExhc3QyME5CZWFjb25SeFRpbWU7CS8qIE9TJ3MgdGltZXN0YW1wIG9mIHRoZSBsYXN0IDIwTUh6IE4gQkVBQ09OIFJYIHRpbWUgKi8KLQotCXVuc2lnbmVkIGxvbmcgTGFzdFNjYW5UaW1lOwkvKiBSZWNvcmQgbGFzdCBzY2FuIHRpbWUgZm9yIGlzc3VlIEJTU0lEX1NDQU5fTElTVCAqLwotCXVuc2lnbmVkIGxvbmcgU2NhbkNudDsJCS8qIFNjYW4gY291bnRzIHNpbmNlIG1vc3QgcmVjZW50IFNTSUQsIEJTU0lELCBTQ0FOIE9JRCByZXF1ZXN0ICovCi0JQk9PTEVBTiBiU3dSYWRpbzsJLyogU29mdHdhcmUgY29udHJvbGxlZCBSYWRpbyBPbi9PZmYsIFRSVUU6IE9uICovCi0JQk9PTEVBTiBiSHdSYWRpbzsJLyogSGFyZHdhcmUgY29udHJvbGxlZCBSYWRpbyBPbi9PZmYsIFRSVUU6IE9uICovCi0JQk9PTEVBTiBiUmFkaW87CQkvKiBSYWRpbyBzdGF0ZSwgQW5kIG9mIFN3ICYgSHcgcmFkaW8gc3RhdGUgKi8KLQlCT09MRUFOIGJIYXJkd2FyZVJhZGlvOwkvKiBIYXJkd2FyZSBjb250cm9sbGVkIFJhZGlvIGVuYWJsZWQgKi8KLQlCT09MRUFOIGJTaG93SGlkZGVuU1NJRDsJLyogU2hvdyBhbGwga25vd24gU1NJRCBpbiBTU0lEIGxpc3QgZ2V0IG9wZXJhdGlvbiAqLwotCi0JLyogTmV3IGZvciBXUEEsIHdpbmRvd3Mgd2FudCB1cyB0byBrZWVwIGFzc29jaWF0aW9uIGluZm9ybWF0aW9uIGFuZCAqLwotCS8qIEZpeGVkIElFcyBmcm9tIGxhc3QgYXNzb2NpYXRpb24gcmVzcG9uc2UgKi8KLQlzdHJ1Y3QgcnRfbmRpc184MDJfMTFfYXNzb2NpYXRpb25faW5mb3JtYXRpb24gQXNzb2NJbmZvOwotCXUxNiBSZXFWYXJJRUxlbjsJLyogTGVuZ3RoIG9mIG5leHQgVklFIGluY2x1ZGUgRUlEICYgTGVuZ3RoICovCi0JdTggUmVxVmFySUVzW01BWF9WSUVfTEVOXTsJLyogVGhlIGNvbnRlbnQgc2F2ZWQgaGVyZSBzaG91bGQgYmUgbGl0dGxlLWVuZGlhbiBmb3JtYXQuICovCi0JdTE2IFJlc1ZhcklFTGVuOwkvKiBMZW5ndGggb2YgbmV4dCBWSUUgaW5jbHVkZSBFSUQgJiBMZW5ndGggKi8KLQl1OCBSZXNWYXJJRXNbTUFYX1ZJRV9MRU5dOwotCi0JdTggUlNOSUVfTGVuOwotCXU4IFJTTl9JRVtNQVhfTEVOX09GX1JTTklFXTsJLyogVGhlIGNvbnRlbnQgc2F2ZWQgaGVyZSBzaG91bGQgYmUgbGl0dGxlLWVuZGlhbiBmb3JtYXQuICovCi0KLQl1bnNpZ25lZCBsb25nIENMQnVzeUJ5dGVzOwkvKiBTYXZlIHRoZSB0b3RhbCBieXRlcyByZWNlaXZlZCBkdXJpbmcgY2hhbm5lbCBsb2FkIHNjYW4gdGltZSAqLwotCXUxNiBSUElEZW5zaXR5WzhdOwkvKiBBcnJheSBmb3IgUlBJIGRlbnNpdHkgY29sbGVjdGlvbiAqLwotCi0JdTggUk1SZXFDbnQ7CQkvKiBOdW1iZXIgb2YgbWVhc3VyZW1lbnQgcmVxdWVzdCBzYXZlZC4gKi8KLQl1OCBDdXJyZW50Uk1SZXFJZHg7CS8qIE51bWJlciBvZiBtZWFzdXJlbWVudCByZXF1ZXN0IHNhdmVkLiAqLwotCUJPT0xFQU4gUGFyYWxsZWxSZXE7CS8qIFBhcmFsbGVsIG1lYXN1cmVtZW50LCBvbmx5IG9uZSByZXF1ZXN0IHBlcmZvcm1lZCwgKi8KLQkvKiBJdCBtdXN0IGJlIHRoZSBzYW1lIGNoYW5uZWwgd2l0aCBtYXhpbXVtIGR1cmF0aW9uICovCi0JdTE2IFBhcmFsbGVsRHVyYXRpb247CS8qIE1heGltdW0gZHVyYXRpb24gZm9yIHBhcmFsbGVsIG1lYXN1cmVtZW50ICovCi0JdTggUGFyYWxsZWxDaGFubmVsOwkvKiBPbmx5IG9uZSBjaGFubmVsIHdpdGggcGFyYWxsZWwgbWVhc3VyZW1lbnQgKi8KLQl1MTYgSUFQUFRva2VuOwkvKiBJQVBQIGRpYWxvZyB0b2tlbiAqLwotCS8qIEhhY2sgZm9yIGNoYW5uZWwgbG9hZCBhbmQgbm9pc2UgaGlzdG9ncmFtIHBhcmFtZXRlcnMgKi8KLQl1OCBOSEZhY3RvcjsJCS8qIFBhcmFtZXRlciBmb3IgTm9pc2UgaGlzdG9ncmFtICovCi0JdTggQ0xGYWN0b3I7CQkvKiBQYXJhbWV0ZXIgZm9yIGNoYW5uZWwgbG9hZCAqLwotCi0Jc3RydWN0IHJ0X3JhbGlua190aW1lciBTdGFRdWlja1Jlc3BvbmVGb3JSYXRlVXBUaW1lcjsKLQlCT09MRUFOIFN0YVF1aWNrUmVzcG9uZUZvclJhdGVVcFRpbWVyUnVubmluZzsKLQotCXU4IER0aW1Db3VudDsJLyogMC4uIER0aW1QZXJpb2QtMSAqLwotCXU4IER0aW1QZXJpb2Q7CS8qIGRlZmF1bHQgPSAzICovCi0KLQkvKi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vICovCi0JLyogVGhpcyBpcyBvbmx5IGZvciBXSFFMIHRlc3QuICovCi0JQk9PTEVBTiBXaHFsVGVzdDsKLQkvKi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vICovCi0KLQlzdHJ1Y3QgcnRfcmFsaW5rX3RpbWVyIFdwYURpc2Fzc29jQW5kQmxvY2tBc3NvY1RpbWVyOwotCS8qIEZhc3QgUm9hbWluZyAqLwotCUJPT0xFQU4gYkF1dG9Sb2FtaW5nOwkvKiAwOmRpc2FibGUgYXV0byByb2FtaW5nIGJ5IFJTU0ksIDE6ZW5hYmxlIGF1dG8gcm9hbWluZyBieSBSU1NJICovCi0JY2hhciBkQm1Ub1JvYW07CQkvKiB0aGUgY29uZGl0aW9uIHRvIHJvYW0gd2hlbiByZWNlaXZpbmcgUnNzaSBsZXNzIHRoYW4gdGhpcyB2YWx1ZS4gSXQncyBuZWdhdGl2ZSB2YWx1ZS4gKi8KLQotCUJPT0xFQU4gSUVFRTgwMjFYOwotCUJPT0xFQU4gSUVFRTgwMjF4X3JlcXVpcmVkX2tleXM7Ci0Jc3RydWN0IHJ0X2NpcGhlcl9rZXkgRGVzaXJlU2hhcmVkS2V5WzRdOwkvKiBSZWNvcmQgdXNlciBkZXNpcmVkIFdFUCBrZXlzICovCi0JdTggRGVzaXJlU2hhcmVkS2V5SWQ7Ci0KLQkvKiAwOiBkcml2ZXIgaWdub3JlcyB3cGFfc3VwcGxpY2FudCAqLwotCS8qIDE6IHdwYV9zdXBwbGljYW50IGluaXRpYXRlcyBzY2FubmluZyBhbmQgQVAgc2VsZWN0aW9uICovCi0JLyogMjogZHJpdmVyIHRha2VzIGNhcmUgb2Ygc2Nhbm5pbmcsIEFQIHNlbGVjdGlvbiwgYW5kIElFRUUgODAyLjExIGFzc29jaWF0aW9uIHBhcmFtZXRlcnMgKi8KLQl1OCBXcGFTdXBwbGljYW50VVA7Ci0JdTggV3BhU3VwcGxpY2FudFNjYW5Db3VudDsKLQlCT09MRUFOIGJSU05fSUVfRnJvbVdwYVN1cHBsaWNhbnQ7Ci0KLQljaGFyIGRldl9uYW1lWzE2XTsKLQl1MTYgT3JpRGV2VHlwZTsKLQotCUJPT0xFQU4gYlRHbldpZmlUZXN0OwotCUJPT0xFQU4gYlNjYW5SZXFJc0Zyb21XZWJVSTsKLQotCUhUVFJBTlNNSVRfU0VUVElORyBIVFBoeU1vZGUsIE1heEhUUGh5TW9kZSwgTWluSFRQaHlNb2RlOwkvKiBGb3IgdHJhbnNtaXQgcGh5IHNldHRpbmcgaW4gVFhXSS4gKi8KLQlERVNJUkVEX1RSQU5TTUlUX1NFVFRJTkcgRGVzaXJlZFRyYW5zbWl0U2V0dGluZzsKLQlzdHJ1Y3QgcnRfaHRfcGh5X2luZm8gRGVzaXJlZEh0UGh5SW5mbzsKLQlCT09MRUFOIGJBdXRvVHhSYXRlU3dpdGNoOwotCi0jaWZkZWYgUlRNUF9NQUNfUENJCi0JdTggQkJQUjM7Ci0JLyogUFMgQ29udHJvbCBoYXMgMiBtZWFuaW5ncyBmb3IgYWR2YW5jZWQgcG93ZXIgc2F2ZSBmdW5jdGlvbi4gKi8KLQkvKiAxLiBFbmFibGVQU2luSWRsZSA6IFdoZW4gbm8gY29ubmVjdGlvbiwgYWx3YXlzIHJhZGlvIG9mZiBleGNlcHQgbmVlZCB0byBkbyBzaXRlIHN1cnZleS4gKi8KLQkvKiAyLiBFbmFibGVOZXdQUyAgOiB3aWxsIHNhdmUgbW9yZSBjdXJyZW50IGluIHNsZWVwIG9yIHJhZGlvIG9mZiBtb2RlLiAqLwotCVBTX0NPTlRST0wgUFNDb250cm9sOwotI2VuZGlmCQkJCS8qIFJUTVBfTUFDX1BDSSAvLyAqLwotCi0JQk9PTEVBTiBiQXV0b0Nvbm5lY3RCeUJzc2lkOwotCXVuc2lnbmVkIGxvbmcgQmVhY29uTG9zdFRpbWU7CS8qIHNlY29uZHMgKi8KLQlCT09MRUFOIGJGb3JjZVR4QnVyc3Q7CS8qIDE6IGZvcmNlIGVuYmxlIFRYIFBBQ0tFVCBCVVJTVCwgMDogZGlzYWJsZSAqLwotfTsKLQotLyogVGhpcyBkYXRhIHN0cnVjdHVyZSBrZWVwcyB0aGUgY3VycmVudCBhY3RpdmUgQlNTL0lCU1MncyBjb25maWd1cmF0aW9uIHRoYXQgdGhpcyBTVEEgKi8KLS8qIGhhZCBhZ3JlZWQgdXBvbiBqb2luaW5nIHRoZSBuZXR3b3JrLiBXaGljaCBtZWFucyB0aGVzZSBwYXJhbWV0ZXJzIGFyZSB1c3VhbGx5IGRlY2lkZWQgKi8KLS8qIGJ5IHRoZSBCU1MvSUJTUyBjcmVhdG9yIGluc3RlYWQgb2YgdXNlciBjb25maWd1cmF0aW9uLiBEYXRhIGluIHRoaXMgZGF0YSBzdHJ1Y3R1cmUgKi8KLS8qIGlzIHZhbGlkIG9ubHkgd2hlbiBlaXRoZXIgQURIT0NfT04ocEFkKSBvciBJTkZSQV9PTihwQWQpIGlzIFRSVUUuICovCi0vKiBOb3JtYWxseSwgYWZ0ZXIgU0NBTiBvciBmYWlsZWQgcm9hbWluZyBhdHRlbXB0cywgd2UgbmVlZCB0byByZWNvdmVyIGJhY2sgdG8gKi8KLS8qIHRoZSBjdXJyZW50IGFjdGl2ZSBzZXR0aW5ncy4gKi8KLXN0cnVjdCBydF9zdGFfYWN0aXZlX2NvbmZpZyB7Ci0JdTE2IEFpZDsKLQl1MTYgQXRpbVdpbjsJCS8qIGluIGt1c2VjOyBJQlNTIHBhcmFtZXRlciBzZXQgZWxlbWVudCAqLwotCXUxNiBDYXBhYmlsaXR5SW5mbzsKLQl1MTYgQ2ZwTWF4RHVyYXRpb247Ci0JdTE2IENmcFBlcmlvZDsKLQotCS8qIENvcHkgc3VwcG9ydGVkIHJhdGUgZnJvbSBkZXNpcmVkIEFQJ3MgYmVhY29uLiBXZSBhcmUgdHJ5aW5nIHRvIG1hdGNoICovCi0JLyogQVAncyBzdXBwb3J0ZWQgYW5kIGV4dGVuZGVkIHJhdGUgc2V0dGluZ3MuICovCi0JdTggU3VwUmF0ZVtNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU107Ci0JdTggRXh0UmF0ZVtNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU107Ci0JdTggU3VwUmF0ZUxlbjsKLQl1OCBFeHRSYXRlTGVuOwotCS8qIENvcHkgc3VwcG9ydGVkIGh0IGZyb20gZGVzaXJlZCBBUCdzIGJlYWNvbi4gV2UgYXJlIHRyeWluZyB0byBtYXRjaCAqLwotCXN0cnVjdCBydF9odF9waHlfaW5mbyBTdXBwb3J0ZWRQaHlJbmZvOwotCXN0cnVjdCBydF9odF9jYXBhYmlsaXR5IFN1cHBvcnRlZEh0UGh5OwotfTsKLQotc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeTsKLQotc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSB7Ci0JLypDaG9vc2UgMSBmcm9tIFZhbGlkQXNXRFMgYW5kIFZhbGlkQXNDTEkgIHRvIHZhbGlkaXplLiAqLwotCUJPT0xFQU4gVmFsaWRBc0NMSTsJLyogU3RhIG1vZGUsIHNldCB0aGlzIFRSVUUgYWZ0ZXIgTGlua3VwLHRvby4gKi8KLQlCT09MRUFOIFZhbGlkQXNXRFM7CS8qIFRoaXMgaXMgV0RTIEVudHJ5LiBvbmx5IGZvciBBUCBtb2RlLiAqLwotCUJPT0xFQU4gVmFsaWRBc0FwQ2xpOwkvKiBUaGlzIGlzIGEgQVAtQ2xpZW50IGVudHJ5LCBvbmx5IGZvciBBUCBtb2RlIHdoaWNoIGVuYWJsZSBBUC1DbGllbnQgZnVuY3Rpb25zLiAqLwotCUJPT0xFQU4gVmFsaWRBc01lc2g7Ci0JQk9PTEVBTiBWYWxpZEFzRGxzOwkvKiBUaGlzIGlzIERMUyBFbnRyeS4gb25seSBmb3IgU1RBIG1vZGUuICovCi0JQk9PTEVBTiBpc0NhY2hlZDsKLQlCT09MRUFOIGJJQW1CYWRBdGhlcm9zOwkvKiBGbGFnIGlmIHRoaXMgaXMgQXRoZXJvcyBjaGlwIHRoYXQgaGFzIElPVCBwcm9ibGVtLiAgV2UgbmVlZCB0byB0dXJuIG9uIFJUUy9DVFMgcHJvdGVjdGlvbi4gKi8KLQotCXU4IEVucXVldWVFYXBvbFN0YXJ0VGltZXJSdW5uaW5nOwkvKiBFbnF1ZXVlIEVBUG9MLVN0YXJ0IGZvciB0cmlnZ2VyaW5nIEVBUCBTTSAqLwotCS8qamFuIGZvciB3cGEgKi8KLQkvKiByZWNvcmQgd2hpY2ggZW50cnkgcmV2b2tlIE1JQyBGYWlsdXJlLCBpZiBpdCBsZWF2ZXMgdGhlIEJTUyBpdHNlbGYsIEFQIHdvbid0IHVwZGF0ZSBhTUlDRmFpbFRpbWUgTUlCICovCi0JdTggQ01UaW1lclJ1bm5pbmc7Ci0JdTggYXBpZHg7CQkvKiBNQlNTIG51bWJlciAqLwotCXU4IFJTTklFX0xlbjsKLQl1OCBSU05fSUVbTUFYX0xFTl9PRl9SU05JRV07Ci0JdTggQU5vbmNlW0xFTl9LRVlfREVTQ19OT05DRV07Ci0JdTggU05vbmNlW0xFTl9LRVlfREVTQ19OT05DRV07Ci0JdTggUl9Db3VudGVyW0xFTl9LRVlfREVTQ19SRVBMQVldOwotCXU4IFBUS1s2NF07Ci0JdTggUmVUcnlDb3VudGVyOwotCXN0cnVjdCBydF9yYWxpbmtfdGltZXIgUmV0cnlUaW1lcjsKLQlzdHJ1Y3QgcnRfcmFsaW5rX3RpbWVyIEVucXVldWVTdGFydEZvclBTS1RpbWVyOwkvKiBBIHRpbWVyIHdoaWNoIGVucXVldWUgRUFQb0wtU3RhcnQgZm9yIHRyaWdnZXJpbmcgUFNLIFNNICovCi0JTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERSBBdXRoTW9kZTsJLyogVGhpcyBzaG91bGQgbWF0Y2ggdG8gd2hhdGV2ZXIgbWljcm9zb2Z0IGRlZmluZWQgKi8KLQlORElTXzgwMl8xMV9XRVBfU1RBVFVTIFdlcFN0YXR1czsKLQlORElTXzgwMl8xMV9XRVBfU1RBVFVTIEdyb3VwS2V5V2VwU3RhdHVzOwotCUFQX1dQQV9TVEFURSBXcGFTdGF0ZTsKLQlHVEtfU1RBVEUgR1RLU3RhdGU7Ci0JdTE2IFBvcnRTZWN1cmVkOwotCU5ESVNfODAyXzExX1BSSVZBQ1lfRklMVEVSIFByaXZhY3lGaWx0ZXI7CS8qIFByaXZhY3lGaWx0ZXIgZW51bSBmb3IgODAyLjFYICovCi0Jc3RydWN0IHJ0X2NpcGhlcl9rZXkgUGFpcndpc2VLZXk7Ci0Jdm9pZCAqcEFkOwotCWludCBQTUtJRF9DYWNoZUlkeDsKLQl1OCBQTUtJRFtMRU5fUE1LSURdOwotCi0JdTggQWRkcltNQUNfQUREUl9MRU5dOwotCXU4IFBzTW9kZTsKLQlTU1QgU3N0OwotCUFVVEhfU1RBVEUgQXV0aFN0YXRlOwkvKiBmb3IgU0hBUkVEIEtFWSBhdXRoZW50aWNhdGlvbiBzdGF0ZSBtYWNoaW5lIHVzZWQgb25seSAqLwotCUJPT0xFQU4gSXNSZWFzc29jU3RhOwkvKiBJbmRpY2F0ZSB3aGV0aGVyIHRoaXMgaXMgYSByZWFzc29jaWF0aW9uIHByb2NlZHVyZSAqLwotCXUxNiBBaWQ7Ci0JdTE2IENhcGFiaWxpdHlJbmZvOwotCXU4IExhc3RSc3NpOwotCXVuc2lnbmVkIGxvbmcgTm9EYXRhSWRsZUNvdW50OwotCXUxNiBTdGF0aW9uS2VlcEFsaXZlQ291bnQ7CS8qIHVuaXQ6IHNlY29uZCAqLwotCXVuc2lnbmVkIGxvbmcgUHNRSWRsZUNvdW50OwotCXN0cnVjdCBydF9xdWV1ZV9oZWFkZXIgUHNRdWV1ZTsKLQotCXUzMiBTdGFDb25uZWN0VGltZTsJLyogdGhlIGxpdmUgdGltZSBvZiB0aGlzIHN0YXRpb24gc2luY2UgYXNzb2NpYXRlZCB3aXRoIEFQICovCi0KLQlCT09MRUFOIGJTZW5kQkFSOwotCXUxNiBOb0JBRGF0YUNvdW50RG93bjsKLQotCXUzMiBDYWNoZWRCdWZbMTZdOwkvKiB1MzIgKDQgYnl0ZXMpIGZvciBhbGlnbm1lbnQgKi8KLQl1MzIgVHhCRkNvdW50OwkJLyogMyozICovCi0JdTMyIEZJRk9Db3VudDsKLQl1MzIgRGVidWdGSUZPQ291bnQ7Ci0JdTMyIERlYnVnVHhDb3VudDsKLQlCT09MRUFOIGJEbHNJbml0OwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLS8qV0RTIGVudHJ5IG5lZWRzIHRoZXNlICovCi0vKiBpZiBWYWxpZEFzV0RTPT1UUlVFLCBNYXRjaFdEU1RhYklkeCBpcyB0aGUgaW5kZXggaW4gV2RzVGFiLk1hY1RhYiAqLwotCXUzMiBNYXRjaFdEU1RhYklkeDsKLQl1OCBNYXhTdXBwb3J0ZWRSYXRlOwotCXU4IEN1cnJUeFJhdGU7Ci0JdTggQ3VyclR4UmF0ZUluZGV4OwotCS8qIHRvIHJlY29yZCB0aGUgZWFjaCBUWCByYXRlJ3MgcXVhbGl0eS4gMCBpcyBiZXN0LCB0aGUgYmlnZ2VyIHRoZSB3b3JzZS4gKi8KLQl1MTYgVHhRdWFsaXR5W01BWF9TVEVQX09GX1RYX1JBVEVfU1dJVENIXTsKLS8qICAgICAgdTE2ICAgICAgICAgIE9uZVNlY1R4T2tDb3VudDsgKi8KLQl1MzIgT25lU2VjVHhOb1JldHJ5T2tDb3VudDsKLQl1MzIgT25lU2VjVHhSZXRyeU9rQ291bnQ7Ci0JdTMyIE9uZVNlY1R4RmFpbENvdW50OwotCXUzMiBDb250aW51ZVR4RmFpbENudDsKLQl1MzIgQ3VyclR4UmF0ZVN0YWJsZVRpbWU7CS8qICMgb2Ygc2Vjb25kIGluIGN1cnJlbnQgVFggcmF0ZSAqLwotCXU4IFR4UmF0ZVVwUGVuYWx0eTsJLyogZXh0cmEgIyBvZiBzZWNvbmQgcGVuYWx0eSBkdWUgdG8gbGFzdCB1bnN0YWJsZSBjb25kaXRpb24gKi8KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi0JQk9PTEVBTiBmTm9pc3lFbnZpcm9ubWVudDsKLQlCT09MRUFOIGZMYXN0U2VjQWNjb3JkaW5nUlNTSTsKLQl1OCBMYXN0U2VjVHhSYXRlQ2hhbmdlQWN0aW9uOwkvKiAwOiBubyBjaGFuZ2UsIDE6cmF0ZSBVUCwgMjpyYXRlIGRvd24gKi8KLQljaGFyIExhc3RUaW1lVHhSYXRlQ2hhbmdlQWN0aW9uOwkvKktlZXAgbGFzdCB0aW1lIHZhbHVlIG9mIExhc3RTZWNUeFJhdGVDaGFuZ2VBY3Rpb24gKi8KLQl1bnNpZ25lZCBsb25nIExhc3RUeE9rQ291bnQ7Ci0JdTggUEVSW01BWF9TVEVQX09GX1RYX1JBVEVfU1dJVENIXTsKLQotCS8qIGEgYml0bWFwIG9mIEJPT0xFQU4gZmxhZ3MuIGVhY2ggYml0IHJlcHJlc2VudCBhbiBvcGVyYXRpb24gc3RhdHVzIG9mIGEgcGFydGljdWxhciAqLwotCS8qIEJPT0xFQU4gY29udHJvbCwgZWl0aGVyIE9OIG9yIE9GRi4gVGhlc2UgZmxhZ3Mgc2hvdWxkIGFsd2F5cyBiZSBhY2Nlc3NlZCB2aWEgKi8KLQkvKiBDTElFTlRfU1RBVFVTX1RFU1RfRkxBRygpLCBDTElFTlRfU1RBVFVTX1NFVF9GTEFHKCksIENMSUVOVF9TVEFUVVNfQ0xFQVJfRkxBRygpIG1hY3Jvcy4gKi8KLQkvKiBzZWUgZk9QX1NUQVRVU194eHggaW4gUlRNUF9ERUYuQyBmb3IgZGV0YWlsIGJpdCBkZWZpbml0aW9uLiBmQ0xJRU5UX1NUQVRVU19BTVNEVV9JTlVTRUQgKi8KLQl1bnNpZ25lZCBsb25nIENsaWVudFN0YXR1c0ZsYWdzOwotCi0JSFRUUkFOU01JVF9TRVRUSU5HIEhUUGh5TW9kZSwgTWF4SFRQaHlNb2RlLCBNaW5IVFBoeU1vZGU7CS8qIEZvciB0cmFuc21pdCBwaHkgc2V0dGluZyBpbiBUWFdJLiAqLwotCi0JLyogSFQgRVdDIE1JTU8tTiB1c2VkIHBhcmFtZXRlcnMgKi8KLQl1MTYgUlhCQWJpdG1hcDsJLyogZmlsbCB0byBvbi1jaGlwICBSWFdJX0JBX0JJVE1BU0sgaW4gOC4xLjNSWCBhdHRyaWJ1dGUgZW50cnkgZm9ybWF0ICovCi0JdTE2IFRYQkFiaXRtYXA7CS8qIFRoaXMgYml0bWFwIGFzIG9yaWdpbmF0b3IsIG9ubHkga2VlcCBpbiBzb2Z0d2FyZSB1c2VkIHRvIG1hcmsgQU1QRFUgYml0IGluIFRYV0kgKi8KLQl1MTYgVFhBdXRvQkFiaXRtYXA7Ci0JdTE2IEJBRGVjbGluZUJpdG1hcDsKLQl1MTYgQkFSZWNXY2lkQXJyYXlbTlVNX09GX1RJRF07CS8qIFRoZSBtYXBwaW5nIHdjaWQgb2YgcmVjaXBpZW50IHNlc3Npb24uIGlmIFJYQkFiaXRtYXAgYml0IGlzIG1hc2tlZCAqLwotCXUxNiBCQU9yaVdjaWRBcnJheVtOVU1fT0ZfVElEXTsJLyogVGhlIG1hcHBpbmcgd2NpZCBvZiBvcmlnaW5hdG9yIHNlc3Npb24uIGlmIFRYQkFiaXRtYXAgYml0IGlzIG1hc2tlZCAqLwotCXUxNiBCQU9yaVNlcXVlbmNlW05VTV9PRl9USURdOwkvKiBUaGUgbWFwcGluZyB3Y2lkIG9mIG9yaWdpbmF0b3Igc2Vzc2lvbi4gaWYgVFhCQWJpdG1hcCBiaXQgaXMgbWFza2VkICovCi0KLQkvKiA4MDIuMTFuIGZlYXR1cmVzLiAqLwotCXU4IE1wZHVEZW5zaXR5OwotCXU4IE1heFJBbXBkdUZhY3RvcjsKLQl1OCBBTXNkdVNpemU7Ci0JdTggTW1wc01vZGU7CQkvKiBNSU1PIHBvd2VyIHNhdmUgbW9yZS4gKi8KLQotCXN0cnVjdCBydF9odF9jYXBhYmlsaXR5X2llIEhUQ2FwYWJpbGl0eTsKLQotCUJPT0xFQU4gYkF1dG9UeFJhdGVTd2l0Y2g7Ci0KLQl1OCBSYXRlTGVuOwotCXN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKnBOZXh0OwotCXUxNiBUeFNlcVtOVU1fT0ZfVElEXTsKLQl1MTYgTm9uUW9zRGF0YVNlcTsKLQotCXN0cnVjdCBydF9yc3NpX3NhbXBsZSBSc3NpU2FtcGxlOwotCi0JdTMyIFRYTUNTRXhwZWN0ZWRbMTZdOwotCXUzMiBUWE1DU1N1Y2Nlc3NmdWxbMTZdOwotCXUzMiBUWE1DU0ZhaWxlZFsxNl07Ci0JdTMyIFRYTUNTQXV0b0ZhbGxCYWNrWzE2XVsxNl07Ci0KLQl1bnNpZ25lZCBsb25nIExhc3RCZWFjb25SeFRpbWU7Ci0KLQl1bnNpZ25lZCBsb25nIEFzc29jRGVhZExpbmU7Ci19OwotCi1zdHJ1Y3QgcnRfbWFjX3RhYmxlIHsKLQl1MTYgU2l6ZTsKLQlzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpIYXNoW0hBU0hfVEFCTEVfU0laRV07Ci0Jc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSBDb250ZW50W01BWF9MRU5fT0ZfTUFDX1RBQkxFXTsKLQlzdHJ1Y3QgcnRfcXVldWVfaGVhZGVyIE1jYXN0UHNRdWV1ZTsKLQl1bnNpZ25lZCBsb25nIFBzUUlkbGVDb3VudDsKLQlCT09MRUFOIGZBbnlTdGF0aW9uSW5Qc207Ci0JQk9PTEVBTiBmQW55U3RhdGlvbkJhZEF0aGVyb3M7CS8qIENoZWNrIGlmIGFueSBTdGF0aW9uIGlzIGF0aGVyb3MgODAyLjExbiBDaGlwLiAgV2UgbmVlZCB0byB1c2UgUlRTL0NUUyB3aXRoIEF0aGVyb3MgODAyLC4xMW4gY2hpcC4gKi8KLQlCT09MRUFOIGZBbnlUeE9QRm9yY2VEaXNhYmxlOwkvKiBDaGVjayBpZiBpdCBpcyBuZWNlc3NhcnkgdG8gZGlzYWJsZSBCRSBUeE9QICovCi0JQk9PTEVBTiBmQWxsU3RhdGlvbkFzUmFsaW5rOwkvKiBDaGVjayBpZiBhbGwgc3RhdGlvbnMgYXJlIHJhbGluay1jaGlwc2V0ICovCi0JQk9PTEVBTiBmQW55U3RhdGlvbklzTGVnYWN5OwkvKiBDaGVjayBpZiBJIHVzZSBsZWdhY3kgcmF0ZSB0byB0cmFuc21pdCB0byBteSBCU1MgU3RhdGlvbi8gKi8KLQlCT09MRUFOIGZBbnlTdGF0aW9uTm9uR0Y7CS8qIENoZWNrIGlmIGFueSBTdGF0aW9uIGNhbid0IHN1cHBvcnQgR0YuICovCi0JQk9PTEVBTiBmQW55U3RhdGlvbjIwT25seTsJLyogQ2hlY2sgaWYgYW55IFN0YXRpb24gY2FuJ3Qgc3VwcG9ydCBHRi4gKi8KLQlCT09MRUFOIGZBbnlTdGF0aW9uTUlNT1BTRHluYW1pYzsJLyogQ2hlY2sgaWYgYW55IFN0YXRpb24gaXMgTUlNTyBEeW5hbWljICovCi0JQk9PTEVBTiBmQW55QkFTZXNzaW9uOwkvKiBDaGVjayBpZiB0aGVyZSBpcyBCQSBzZXNzaW9uLiAgRm9yY2UgdHVybiBvbiBSVFMvQ1RTICovCi0vKjIwMDgvMTAvMjg6IEtIIGFkZCB0byBzdXBwb3J0IEFudGVubmEgcG93ZXItc2F2aW5nIG9mIEFQPC0tICovCi0vKjIwMDgvMTAvMjg6IEtIIGFkZCB0byBzdXBwb3J0IEFudGVubmEgcG93ZXItc2F2aW5nIG9mIEFQLS0+ICovCi19OwotCi1zdHJ1Y3Qgd2lmaWNvbmYgewotCUJPT0xFQU4gYlNob3J0R0k7Ci0JQk9PTEVBTiBiR3JlZW5GaWVsZDsKLX07Ci0KLXN0cnVjdCBydF9ydG1wX2Rldl9pbmZvIHsKLQl1OCBjaGlwTmFtZVsxNl07Ci0JUlRNUF9JTkZfVFlQRSBpbmZUeXBlOwotfTsKLQotc3RydWN0IHJ0X3J0bXBfY2hpcF9vcCB7Ci0JLyogIENhbGlicmF0aW9uIGFjY2VzcyByZWxhdGVkIGNhbGxiYWNrIGZ1bmN0aW9ucyAqLwotCWludCAoKmVlaW5pdCkgKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7CS8qIGludCAoKmVlaW5pdCkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsgKi8KLQlpbnQgKCplZXJlYWQpIChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHUxNiBvZmZzZXQsIHUxNiAqcFZhbHVlKTsJLyogaW50ICgqZWVyZWFkKShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIGludCBvZmZzZXQsIHUxNiAqcFZhbHVlKTsgKi8KLQotCS8qIE1DVSByZWxhdGVkIGNhbGxiYWNrIGZ1bmN0aW9ucyAqLwotCWludCAoKmxvYWRGaXJtd2FyZSkgKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7CS8qIGludCAoKmxvYWRGaXJtd2FyZSkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsgKi8KLQlpbnQgKCplcmFzZUZpcm13YXJlKSAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsJLyogaW50ICgqZXJhc2VGaXJtd2FyZSkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsgKi8KLQlpbnQgKCpzZW5kQ29tbWFuZFRvTWN1KSAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1OCBjbWQsIHU4IHRva2VuLCB1OCBhcmcwLCB1OCBhcmcxKTs7CS8qIGludCAoKnNlbmRDb21tYW5kVG9NY3UpKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggY21kLCB1OCB0b2tlbiwgdTggYXJnMCwgdTggYXJnMSk7ICovCi0KLQkvKiBSRiBhY2Nlc3MgcmVsYXRlZCBjYWxsYmFjayBmdW5jdGlvbnMgKi8KLQlzdHJ1Y3QgcnRfcmVnX3BhaXIgKnBSRlJlZ1RhYmxlOwotCXZvaWQgKCpBc2ljUmZJbml0KSAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQl2b2lkICgqQXNpY1JmVHVybk9uKSAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQl2b2lkICgqQXNpY1JmVHVybk9mZikgKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0Jdm9pZCAoKkFzaWNSZXZlcnNlUmZGcm9tU2xlZXBNb2RlKSAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQl2b2lkICgqQXNpY0hhbHRBY3Rpb24pIChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotfTsKLQotLyogKi8KLS8qICBUaGUgbWluaXBvcnQgYWRhcHRlciBzdHJ1Y3R1cmUgKi8KLS8qICovCi1zdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyIHsKLQl2b2lkICpPU19Db29raWU7CS8qIHNhdmUgc3BlY2lmaWMgc3RydWN0dXJlIHJlbGF0aXZlIHRvIE9TICovCi0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXY7Ci0JdW5zaWduZWQgbG9uZyBWaXJ0dWFsSWZDbnQ7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZTsKLQotCXN0cnVjdCBydF9ydG1wX2NoaXBfb3AgY2hpcE9wczsKLQl1MTYgVGhpc1RidHROdW1Ub05leHRXYWtlVXA7Ci0KLSNpZmRlZiBSVE1QX01BQ19QQ0kKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgUENJIHJlbGF0ZWQgcGFyYW1ldGVycwkJCQkJCQkJCQkJCQkJCQkgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JdTggKkNTUkJhc2VBZGRyZXNzOwkvKiBQQ0kgTU1JTyBCYXNlIEFkZHJlc3MsIGFsbCBhY2Nlc3Mgd2lsbCB1c2UgKi8KLQl1bnNpZ25lZCBpbnQgaXJxX251bTsKLQotCXUxNiBMbmtDdHJsQml0TWFzazsKLQl1MTYgUkxua0N0cmxDb25maWd1cmF0aW9uOwotCXUxNiBSTG5rQ3RybE9mZnNldDsKLQl1MTYgSG9zdExua0N0cmxDb25maWd1cmF0aW9uOwotCXUxNiBIb3N0TG5rQ3RybE9mZnNldDsKLQl1MTYgUENJZVBvd2VyU2F2ZUxldmVsOwotCXVuc2lnbmVkIGxvbmcgUnQzeHhIb3N0TGlua0N0cmw7CS8qIFVTZWQgZm9yIDMwOTBGIGNoaXAgKi8KLQl1bnNpZ25lZCBsb25nIFJ0M3h4UmFsaW5rTGlua0N0cmw7CS8qIFVTZWQgZm9yIDMwOTBGIGNoaXAgKi8KLQl1MTYgRGV2aWNlSUQ7CS8qIFJlYWQgZnJvbSBQQ0kgY29uZmlnICovCi0JdW5zaWduZWQgbG9uZyBBY2Nlc3NCQlBGYWlsQ291bnQ7Ci0JQk9PTEVBTiBiUENJY2xrT2ZmOwkvKiBmbGFnIHRoYXQgaW5kaWNhdGVzIGlmIHRoZSBQSUNFIHBvd2VyIHN0YXR1cyBpbiBDb25maWd1cmF0aW9uIFNwYWNlLi4gKi8KLQlCT09MRUFOIGJQQ0ljbGtPZmZEaXNhYmxlVHg7CS8qICovCi0KLQlCT09MRUFOIGJydDMweHhCYW5NY3VDbWQ7CS8qd2hlbiA9IDB4ZmYgbWVhbnMgYWxsIGNvbW1hbmRzIGFyZSBvayB0byBzZXQgLiAqLwotCUJPT0xFQU4gYjMwOTBFU3BlY2lhbENoaXA7CS8qMzA5MEUgc3BlY2lhbCBjaGlwIHRoYXQgd3JpdGUgRUVQUk9NIDB4MjQ9MHg5MjgwLiAqLwotCXVuc2lnbmVkIGxvbmcgQ2hlY2tEbWFCdXN5Q291bnQ7CS8qIENoZWNrIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgQ291bnQuICovCi0KLQl1MzIgaW50X2VuYWJsZV9yZWc7Ci0JdTMyIGludF9kaXNhYmxlX21hc2s7Ci0JdTMyIGludF9wZW5kaW5nOwotCi0Jc3RydWN0IHJ0X3J0bXBfZG1hYnVmIFR4QnVmU3BhY2VbTlVNX09GX1RYX1JJTkddOwkvKiBTaGFyZWQgbWVtb3J5IG9mIGFsbCAxc3QgcHJlLWFsbG9jYXRlZCBUeEJ1ZiBhc3NvY2lhdGVkIHdpdGggZWFjaCBUWEQgKi8KLQlzdHJ1Y3QgcnRfcnRtcF9kbWFidWYgUnhEZXNjUmluZzsJLyogU2hhcmVkIG1lbW9yeSBmb3IgUlggZGVzY3JpcHRvcnMgKi8KLQlzdHJ1Y3QgcnRfcnRtcF9kbWFidWYgVHhEZXNjUmluZ1tOVU1fT0ZfVFhfUklOR107CS8qIFNoYXJlZCBtZW1vcnkgZm9yIFR4IGRlc2NyaXB0b3JzICovCi0Jc3RydWN0IHJ0X3J0bXBfdHhfcmluZyBUeFJpbmdbTlVNX09GX1RYX1JJTkddOwkvKiBBQzB+NCArIEhDQ0EgKi8KLSNlbmRpZgkJCQkvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLQotCXNwaW5sb2NrX3QgaXJxX2xvY2s7Ci0JdTggaXJxX2Rpc2FibGVkOwotCi0jaWZkZWYgUlRNUF9NQUNfVVNCCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgIFVTQiByZWxhdGVkIHBhcmFtZXRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0Jc3RydWN0IHVzYl9jb25maWdfZGVzY3JpcHRvciAqY29uZmlnOwotCXUzMiBCdWxrSW5FcEFkZHI7CS8qIGJ1bGstaW4gZW5kcG9pbnQgYWRkcmVzcyAqLwotCXUzMiBCdWxrT3V0RXBBZGRyWzZdOwkvKiBidWxrLW91dCBlbmRwb2ludCBhZGRyZXNzICovCi0KLQl1MzIgTnVtYmVyT2ZQaXBlczsKLQl1MTYgQnVsa091dE1heFBhY2tldFNpemU7Ci0JdTE2IEJ1bGtJbk1heFBhY2tldFNpemU7Ci0KLQkvKj09PT09PUNvbnRyb2wgRmxhZ3MgKi8KLQlsb25nIFBlbmRpbmdJb0NvdW50OwotCXVuc2lnbmVkIGxvbmcgQnVsa0ZsYWdzOwotCUJPT0xFQU4gYlVzYlR4QnVsa0FnZ3JlOwkvKiBGbGFncyBmb3IgYnVsayBvdXQgZGF0YSBwcmlvcml0eSAqLwotCi0JLyo9PT09PT1DbWQgVGhyZWFkICovCi0Jc3RydWN0IHJ0X2NtZHEgQ21kUTsKLQlzcGlubG9ja190IENtZFFMb2NrOwkvKiBDbWRRTG9jayBzcGlubG9jayAqLwotCXN0cnVjdCBydF9ydG1wX29zX3Rhc2sgY21kUVRhc2s7Ci0KLQkvKj09PT09PVNlbWFwaG9yZXMgKGV2ZW50KSAqLwotCXN0cnVjdCBzZW1hcGhvcmUgVXNiVmVuZG9yUmVxX3NlbWFwaG9yZTsKLQl2b2lkICpVc2JWZW5kb3JSZXFCdWY7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QgKndhaXQ7Ci0jZW5kaWYJCQkJLyogUlRNUF9NQUNfVVNCIC8vICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgUkJVUyByZWxhdGVkIHBhcmFtZXRlcnMJCQkJCQkJCQkJCQkJCQkJICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgIEJvdGggUENJL1VTQiByZWxhdGVkIHBhcmFtZXRlcnMJCQkJCQkJCQkJCQkJCSAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQkvKnN0cnVjdCBydF9ydG1wX2Rldl9pbmZvICAgICAgICAgICAgICAgICBjaGlwSW5mbzsgKi8KLQlSVE1QX0lORl9UWVBFIGluZlR5cGU7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgRHJpdmVyIE1nbXQgcmVsYXRlZCBwYXJhbWV0ZXJzCQkJCQkJCQkJCQkJCQkgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0Jc3RydWN0IHJ0X3J0bXBfb3NfdGFzayBtbG1lVGFzazsKLSNpZmRlZiBSVE1QX1RJTUVSX1RBU0tfU1VQUE9SVAotCS8qIElmIHlvdSB3YW50IHVzZSB0aW1lciB0YXNrIHRvIGhhbmRsZSB0aGUgdGltZXIgcmVsYXRlZCBqb2JzLCBlbmFibGUgdGhpcy4gKi8KLQlzdHJ1Y3QgcnRfcnRtcF90aW1lcl90YXNrX3F1ZXVlIFRpbWVyUTsKLQlzcGlubG9ja190IFRpbWVyUUxvY2s7Ci0Jc3RydWN0IHJ0X3J0bXBfb3NfdGFzayB0aW1lclRhc2s7Ci0jZW5kaWYJCQkJLyogUlRNUF9USU1FUl9UQVNLX1NVUFBPUlQgLy8gKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICBUeCByZWxhdGVkIHBhcmFtZXRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JQk9PTEVBTiBEZVF1ZXVlUnVubmluZ1tOVU1fT0ZfVFhfUklOR107CS8qIGZvciBlbnN1cmluZyBSVFVTQkRlUXVldWVQYWNrZXQgZ2V0IGNhbGwgb25jZSAqLwotCXNwaW5sb2NrX3QgRGVRdWV1ZUxvY2tbTlVNX09GX1RYX1JJTkddOwotCi0jaWZkZWYgUlRNUF9NQUNfVVNCCi0JLyogRGF0YSByZWxhdGVkIGNvbnRleHQgYW5kIEFDIHNwZWNpZmllZCwgNCBBQyBzdXBwb3J0ZWQgKi8KLQlzcGlubG9ja190IEJ1bGtPdXRMb2NrWzZdOwkvKiBCdWxrT3V0IHNwaW5sb2NrIGZvciA0IEFDcyAqLwotCXNwaW5sb2NrX3QgTUxNRUJ1bGtPdXRMb2NrOwkvKiBNTE1FIEJ1bGtPdXQgbG9jayAqLwotCi0Jc3RydWN0IHJ0X2h0X3R4X2NvbnRleHQgVHhDb250ZXh0W05VTV9PRl9UWF9SSU5HXTsKLQlzcGlubG9ja190IFR4Q29udGV4dFF1ZXVlTG9ja1tOVU1fT0ZfVFhfUklOR107CS8qIFR4Q29udGV4dFF1ZXVlIHNwaW5sb2NrICovCi0KLQkvKiA0IHNldHMgb2YgQnVsayBPdXQgaW5kZXggYW5kIHBlbmRpbmcgZmxhZyAqLwotCXU4IE5leHRCdWxrT3V0SW5kZXhbNF07CS8qIG9ubHkgdXNlZCBmb3IgNCBFRENBIGJ1bGtvdXQgcGlwZSAqLwotCi0JQk9PTEVBTiBCdWxrT3V0UGVuZGluZ1s2XTsJLyogdXNlZCBmb3IgdG90YWwgNiBidWxrb3V0IHBpcGUgKi8KLQl1OCBidWxrUmVzZXRQaXBlaWQ7Ci0JQk9PTEVBTiBNZ210QnVsa1BlbmRpbmc7Ci0JdW5zaWduZWQgbG9uZyBidWxrUmVzZXRSZXFbNl07Ci0jZW5kaWYJCQkJLyogUlRNUF9NQUNfVVNCIC8vICovCi0KLQkvKiByZXNvdXJjZSBmb3Igc29mdHdhcmUgYmFja2xvZyBxdWV1ZXMgKi8KLQlzdHJ1Y3QgcnRfcXVldWVfaGVhZGVyIFR4U3dRdWV1ZVtOVU1fT0ZfVFhfUklOR107CS8qIDQgQUMgKyAxIEhDQ0EgKi8KLQlzcGlubG9ja190IFR4U3dRdWV1ZUxvY2tbTlVNX09GX1RYX1JJTkddOwkvKiBUeFN3UXVldWUgc3BpbmxvY2sgKi8KLQotCXN0cnVjdCBydF9ydG1wX2RtYWJ1ZiBNZ210RGVzY1Jpbmc7CS8qIFNoYXJlZCBtZW1vcnkgZm9yIE1HTVQgZGVzY3JpcHRvcnMgKi8KLQlzdHJ1Y3QgcnRfcnRtcF9tZ210X3JpbmcgTWdtdFJpbmc7Ci0Jc3BpbmxvY2tfdCBNZ210UmluZ0xvY2s7CS8qIFByaW8gUmluZyBzcGlubG9jayAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgIFJ4IHJlbGF0ZWQgcGFyYW1ldGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmZGVmIFJUTVBfTUFDX1BDSQotCXN0cnVjdCBydF9ydG1wX3J4X3JpbmcgUnhSaW5nOwotCXNwaW5sb2NrX3QgUnhSaW5nTG9jazsJLyogUnggUmluZyBzcGlubG9jayAqLwotI2lmZGVmIFJUMzA5MAotCXNwaW5sb2NrX3QgTWN1Q21kTG9jazsJLypNQ1UgQ29tbWFuZCBRdWV1ZSBzcGlubG9jayAqLwotI2VuZGlmCQkJCS8qIFJUMzA5MCAvLyAqLwotI2VuZGlmCQkJCS8qIFJUTVBfTUFDX1BDSSAvLyAqLwotI2lmZGVmIFJUTVBfTUFDX1VTQgotCXN0cnVjdCBydF9yeF9jb250ZXh0IFJ4Q29udGV4dFtSWF9SSU5HX1NJWkVdOwkvKiAxIGZvciByZWR1bmRhbnQgbXVsdGlwbGUgSVJQIGJ1bGsgaW4uICovCi0Jc3BpbmxvY2tfdCBCdWxrSW5Mb2NrOwkvKiBCdWxrSW4gc3BpbmxvY2sgZm9yIDQgQUNzICovCi0JdTggUGVuZGluZ1J4OwkvKiBUaGUgTWF4aW11bSBwZW5kaW5nIFJ4IHZhbHVlIHNob3VsZCBiZSAgICAgICBSWF9SSU5HX1NJWkUuICovCi0JdTggTmV4dFJ4QnVsa0luSW5kZXg7CS8qIEluZGljYXRlIHRoZSBjdXJyZW50IFJ4Q29udGV4dCBJbmRleCB3aGljaCBob2xkIGJ5IEhvc3QgY29udHJvbGxlci4gKi8KLQl1OCBOZXh0UnhCdWxrSW5SZWFkSW5kZXg7CS8qIEluZGljYXRlIHRoZSBjdXJyZW50IFJ4Q29udGV4dCBJbmRleCB3aGljaCBkcml2ZXIgY2FuIHJlYWQgJiBwcm9jZXNzIGl0LiAqLwotCXVuc2lnbmVkIGxvbmcgTmV4dFJ4QnVsa0luUG9zaXRpb247CS8qIFdhbnQgdG8gY29udGF0ZW5hdGUgMiBVUkIgYnVmZmVyIHdoaWxlIDFzdCBpcyBidWxraW4gZmFpbGVkIFVSQi4gVGhpcyBQb3NpdGlvbiBpcyAxc3QgVVJCIFRyYW5zZmVyTGVuZ3RoLiAqLwotCXVuc2lnbmVkIGxvbmcgVHJhbnNmZXJCdWZmZXJMZW5ndGg7CS8qIGN1cnJlbnQgbGVuZ3RoIG9mIHRoZSBwYWNrZXQgYnVmZmVyICovCi0JdW5zaWduZWQgbG9uZyBSZWFkUG9zaXRpb247CS8qIGN1cnJlbnQgcmVhZCBwb3NpdGlvbiBpbiBhIHBhY2tldCBidWZmZXIgKi8KLSNlbmRpZgkJCQkvKiBSVE1QX01BQ19VU0IgLy8gKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICBBU0lDIHJlbGF0ZWQgcGFyYW1ldGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCXUzMiBNQUNWZXJzaW9uOwkvKiBNQUMgdmVyc2lvbi4gUmVjb3JkIHJ0Mjg2MEMoMHgyODYwMDEwMCkgb3IgcnQyODYwRCAoMHgyODYwMDEwMSkuLiAqLwotCi0JLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLyogRTJQUk9NICovCi0JLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JdW5zaWduZWQgbG9uZyBFZXByb21WZXJzaW9uOwkvKiBieXRlIDA6IHZlcnNpb24sIGJ5dGUgMTogcmV2aXNpb24sIGJ5dGUgMn4zOiB1bnVzZWQgKi8KLQl1bnNpZ25lZCBsb25nIEZpcm13YXJlVmVyc2lvbjsJLyogYnl0ZSAwOiBNaW5vciB2ZXJzaW9uLCBieXRlIDE6IE1ham9yIHZlcnNpb24sIG90aGVyd2lzZSB1bnVzZWQuICovCi0JdTE2IEVFUFJPTURlZmF1bHRWYWx1ZVtOVU1fRUVQUk9NX0JCUF9QQVJNU107Ci0JdTggRUVQUk9NQWRkcmVzc051bTsJLyogOTNjNDY9NiAgOTNjNjY9OCAqLwotCUJPT0xFQU4gRWVwcm9tQWNjZXNzOwotCXU4IEVGdXNlVGFnOwotCi0JLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLyogQkJQIENvbnRyb2wgKi8KLQkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQl1OCBCYnBXcml0ZUxhdGNoWzE0MF07CS8qIHJlY29yZCBsYXN0IEJCUCByZWdpc3RlciB2YWx1ZSB3cml0dGVuIHZpYSBCQlBfSU9fV1JJVEUvQkJQX0lPX1dSSVRFX1ZZX1JFR19JRCAqLwotCWNoYXIgQmJwUnNzaVRvRGJtRGVsdGE7CS8qIGNoYW5nZSBmcm9tIHU4IHRvIGNoYXIgZm9yIGhpZ2ggcG93ZXIgKi8KLQlzdHJ1Y3QgcnRfYmJwX3I2Nl90dW5pbmcgQmJwVHVuaW5nOwotCi0JLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCS8qIFJGSUMgY29udHJvbCAqLwotCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQl1OCBSZkljVHlwZTsJCS8qIFJGSUNfeHh4ICovCi0JdW5zaWduZWQgbG9uZyBSZkZyZXFPZmZzZXQ7CS8qIEZyZXF1ZW5jeSBvZmZzZXQgZm9yIGNoYW5uZWwgc3dpdGNoaW5nICovCi0Jc3RydWN0IHJ0X3J0bXBfcmZfcmVncyBMYXRjaFJmUmVnczsJLyogbGF0Y2ggdGhlIGxhdGVzdCBSRiBwcm9ncmFtbWluZyB2YWx1ZSBzaW5jZSBSRiBJQyBkb2Vzbid0IHN1cHBvcnQgUkVBRCAqLwotCi0JRUVQUk9NX0FOVEVOTkFfU1RSVUMgQW50ZW5uYTsJLyogU2luY2UgQW50ZW5uYSBkZWZpbml0aW9uIGlzIGRpZmZlcmVudCBmb3IgYSAmIGcuIFdlIG5lZWQgdG8gc2F2ZSBpdCBmb3IgZnV0dXJlIHJlZmVyZW5jZS4gKi8KLQlFRVBST01fTklDX0NPTkZJRzJfU1RSVUMgTmljQ29uZmlnMjsKLQotCS8qIFRoaXMgc29mdCBSeCBBbnRlbm5hIERpdmVyc2l0eSBtZWNoYW5pc20gaXMgdXNlZCBvbmx5IHdoZW4gdXNlciBzZXQgKi8KLQkvKiBSWCBBbnRlbm5hID0gRElWRVJTSVRZIE9OICovCi0Jc3RydWN0IHJ0X3NvZnRfcnhfYW50X2RpdmVyc2l0eSBSeEFudDsKLQotCXU4IFJGUHJvZ1NlcTsKLQlzdHJ1Y3QgcnRfY2hhbm5lbF90eF9wb3dlciBUeFBvd2VyW01BWF9OVU1fT0ZfQ0hBTk5FTFNdOwkvKiBTdG9yZSBUeCBwb3dlciB2YWx1ZSBmb3IgYWxsIGNoYW5uZWxzLiAqLwotCXN0cnVjdCBydF9jaGFubmVsX3R4X3Bvd2VyIENoYW5uZWxMaXN0W01BWF9OVU1fT0ZfQ0hBTk5FTFNdOwkvKiBsaXN0IGFsbCBzdXBwb3J0ZWQgY2hhbm5lbHMgZm9yIHNpdGUgc3VydmV5ICovCi0Jc3RydWN0IHJ0X2NoYW5uZWxfMTFqX3R4X3Bvd2VyIFR4UG93ZXIxMUpbTUFYX05VTV9PRl8xMUpDSEFOTkVMU107CS8qIDgwMi4xMWogY2hhbm5lbCBhbmQgYncgKi8KLQlzdHJ1Y3QgcnRfY2hhbm5lbF8xMWpfdHhfcG93ZXIgQ2hhbm5lbExpc3QxMUpbTUFYX05VTV9PRl8xMUpDSEFOTkVMU107CS8qIGxpc3QgYWxsIHN1cHBvcnRlZCBjaGFubmVscyBmb3Igc2l0ZSBzdXJ2ZXkgKi8KLQotCXU4IENoYW5uZWxMaXN0TnVtOwkvKiBudW1iZXIgb2YgY2hhbm5lbCBpbiBDaGFubmVsTGlzdFtdICovCi0JdTggQmJwOTQ7Ci0JQk9PTEVBTiBCYnBGb3JDQ0s7Ci0JdW5zaWduZWQgbG9uZyBUeDIwTVB3ckNmZ0FCYW5kWzVdOwotCXVuc2lnbmVkIGxvbmcgVHgyME1Qd3JDZmdHQmFuZFs1XTsKLQl1bnNpZ25lZCBsb25nIFR4NDBNUHdyQ2ZnQUJhbmRbNV07Ci0JdW5zaWduZWQgbG9uZyBUeDQwTVB3ckNmZ0dCYW5kWzVdOwotCi0JQk9PTEVBTiBiQXV0b1R4QWdjQTsJLyogRW5hYmxlIGRyaXZlciBhdXRvIFR4IEFnYyBjb250cm9sICovCi0JdTggVHNzaVJlZkE7CQkvKiBTdG9yZSBUc3NpIHJlZmVyZW5jZSB2YWx1ZSBhcyAyNSB0ZW1wZXJhdHVyZS4gKi8KLQl1OCBUc3NpUGx1c0JvdW5kYXJ5QVs1XTsJLyogVHNzaSBib3VuZGFyeSBmb3IgaW5jcmVhc2UgVHggcG93ZXIgdG8gY29tcGVuc2F0ZS4gKi8KLQl1OCBUc3NpTWludXNCb3VuZGFyeUFbNV07CS8qIFRzc2kgYm91bmRhcnkgZm9yIGRlY3JlYXNlIFR4IHBvd2VyIHRvIGNvbXBlbnNhdGUuICovCi0JdTggVHhBZ2NTdGVwQTsJLyogU3RvcmUgVHggVFNTSSBkZWx0YSBpbmNyZW1lbnQgLyBkZWNyZW1lbnQgdmFsdWUgKi8KLQljaGFyIFR4QWdjQ29tcGVuc2F0ZUE7CS8qIFN0b3JlIHRoZSBjb21wZW5zYXRpb24gKFR4QWdjU3RlcCAqIChpZHgtMSkpICovCi0KLQlCT09MRUFOIGJBdXRvVHhBZ2NHOwkvKiBFbmFibGUgZHJpdmVyIGF1dG8gVHggQWdjIGNvbnRyb2wgKi8KLQl1OCBUc3NpUmVmRzsJCS8qIFN0b3JlIFRzc2kgcmVmZXJlbmNlIHZhbHVlIGFzIDI1IHRlbXBlcmF0dXJlLiAqLwotCXU4IFRzc2lQbHVzQm91bmRhcnlHWzVdOwkvKiBUc3NpIGJvdW5kYXJ5IGZvciBpbmNyZWFzZSBUeCBwb3dlciB0byBjb21wZW5zYXRlLiAqLwotCXU4IFRzc2lNaW51c0JvdW5kYXJ5R1s1XTsJLyogVHNzaSBib3VuZGFyeSBmb3IgZGVjcmVhc2UgVHggcG93ZXIgdG8gY29tcGVuc2F0ZS4gKi8KLQl1OCBUeEFnY1N0ZXBHOwkvKiBTdG9yZSBUeCBUU1NJIGRlbHRhIGluY3JlbWVudCAvIGRlY3JlbWVudCB2YWx1ZSAqLwotCWNoYXIgVHhBZ2NDb21wZW5zYXRlRzsJLyogU3RvcmUgdGhlIGNvbXBlbnNhdGlvbiAoVHhBZ2NTdGVwICogKGlkeC0xKSkgKi8KLQotCWNoYXIgQkdSc3NpT2Zmc2V0MDsJLyogU3RvcmUgQi9HIFJTU0kjMCBPZmZzZXQgdmFsdWUgb24gRUVQUk9NIDB4NDZoICovCi0JY2hhciBCR1Jzc2lPZmZzZXQxOwkvKiBTdG9yZSBCL0cgUlNTSSMxIE9mZnNldCB2YWx1ZSAqLwotCWNoYXIgQkdSc3NpT2Zmc2V0MjsJLyogU3RvcmUgQi9HIFJTU0kjMiBPZmZzZXQgdmFsdWUgKi8KLQotCWNoYXIgQVJzc2lPZmZzZXQwOwkvKiBTdG9yZSBBIFJTU0kjMCBPZmZzZXQgdmFsdWUgb24gRUVQUk9NIDB4NEFoICovCi0JY2hhciBBUnNzaU9mZnNldDE7CS8qIFN0b3JlIEEgUlNTSSMxIE9mZnNldCB2YWx1ZSAqLwotCWNoYXIgQVJzc2lPZmZzZXQyOwkvKiBTdG9yZSBBIFJTU0kjMiBPZmZzZXQgdmFsdWUgKi8KLQotCWNoYXIgQkxOQUdhaW47CQkvKiBTdG9yZSBCL0cgZXh0ZXJuYWwgTE5BIzAgdmFsdWUgb24gRUVQUk9NIDB4NDRoICovCi0JY2hhciBBTE5BR2FpbjA7CQkvKiBTdG9yZSBBIGV4dGVybmFsIExOQSMwIHZhbHVlIGZvciBjaDM2fjY0ICovCi0JY2hhciBBTE5BR2FpbjE7CQkvKiBTdG9yZSBBIGV4dGVybmFsIExOQSMxIHZhbHVlIGZvciBjaDEwMH4xMjggKi8KLQljaGFyIEFMTkFHYWluMjsJCS8qIFN0b3JlIEEgZXh0ZXJuYWwgTE5BIzIgdmFsdWUgZm9yIGNoMTMyfjE2NSAqLwotI2lmZGVmIFJUMzB4eAotCS8qIGZvciAzNTcyICovCi0JdTggQmJwMjU7Ci0JdTggQmJwMjY7Ci0KLQl1OCBUeE1peGVyR2FpbjI0RzsJLyogVHggbWl4ZXIgZ2FpbiB2YWx1ZSBmcm9tIEVFUFJPTSB0byBpbXByb3ZlIFR4IEVWTSAvIFR4IERBQywgMi40RyAqLwotCXU4IFR4TWl4ZXJHYWluNUc7Ci0jZW5kaWYJCQkJLyogUlQzMHh4IC8vICovCi0JLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCS8qIExFRCBjb250cm9sICovCi0JLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCU1DVV9MRURDU19TVFJVQyBMZWRDbnRsOwotCXUxNiBMZWQxOwkJLyogcmVhZCBmcm9tIEVFUFJPTSAweDNjICovCi0JdTE2IExlZDI7CQkvKiBFRVBST00gMHgzZSAqLwotCXUxNiBMZWQzOwkJLyogRUVQUk9NIDB4NDAgKi8KLQl1OCBMZWRJbmRpY2F0b3JTdHJlbmd0aDsKLQl1OCBSc3NpU2luZ2Fsc3RyZW5ndGhPZmZldDsKLQlCT09MRUFOIGJMZWRPblNjYW5uaW5nOwotCXU4IExlZFN0YXR1czsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICA4MDIuMTEgcmVsYXRlZCBwYXJhbWV0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCS8qIG91dGdvaW5nIEJFQUNPTiBmcmFtZSBidWZmZXIgYW5kIGNvcnJlc3BvbmRpbmcgVFhEICovCi0Jc3RydWN0IHJ0X3R4d2kgQmVhY29uVHhXSTsKLQl1OCAqQmVhY29uQnVmOwotCXUxNiBCZWFjb25PZmZzZXRbSFdfQkVBQ09OX01BWF9DT1VOVF07Ci0KLQkvKiBwcmUtYnVpbGQgUFMtUE9MTCBhbmQgTlVMTCBmcmFtZSB1cG9uIGxpbmsgdXAuIGZvciBlZmZpY2llbmN5IHB1cnBvc2UuICovCi0Jc3RydWN0IHJ0X3BzcG9sbF9mcmFtZSBQc1BvbGxGcmFtZTsKLQlzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSBOdWxsRnJhbWU7Ci0KLSNpZmRlZiBSVE1QX01BQ19VU0IKLQlzdHJ1Y3QgcnRfdHhfY29udGV4dCBCZWFjb25Db250ZXh0W0JFQUNPTl9SSU5HX1NJWkVdOwotCXN0cnVjdCBydF90eF9jb250ZXh0IE51bGxDb250ZXh0OwotCXN0cnVjdCBydF90eF9jb250ZXh0IFBzUG9sbENvbnRleHQ7Ci0Jc3RydWN0IHJ0X3R4X2NvbnRleHQgUlRTQ29udGV4dDsKLSNlbmRpZgkJCQkvKiBSVE1QX01BQ19VU0IgLy8gKi8KLQotLyo9PT09PT09PT1BUD09PT09PT09PT09ICovCi0KLS8qPT09PT09PVNUQT09PT09PT09PT09ICovCi0JLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQkvKiBTVEEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiAmIG9wZXJhdGlvbiBzdGF0dXMgKi8KLQkvKiB1c2VkIG9ubHkgd2hlbiBwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBICovCi0JLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQlzdHJ1Y3QgcnRfc3RhX2FkbWluX2NvbmZpZyBTdGFDZmc7CS8qIHVzZXIgZGVzaXJlZCBzZXR0aW5ncyAqLwotCXN0cnVjdCBydF9zdGFfYWN0aXZlX2NvbmZpZyBTdGFBY3RpdmU7CS8qIHZhbGlkIG9ubHkgd2hlbiBBREhPQ19PTihwQWQpIHx8IElORlJBX09OKHBBZCkgKi8KLQljaGFyIG5pY2tuYW1lW0lXX0VTU0lEX01BWF9TSVpFICsgMV07CS8qIG5pY2tuYW1lLCBvbmx5IHVzZWQgaW4gdGhlIGl3Y29uZmlnIGkvZiAqLwotCWludCBQcmVNZWRpYVN0YXRlOwotCi0vKj09PT09PT1Db21tb249PT09PT09PT09PSAqLwotCS8qIE9QIG1vZGU6IGVpdGhlciBBUCBvciBTVEEgKi8KLQl1OCBPcE1vZGU7CQkvKiBPUE1PREVfU1RBLCBPUE1PREVfQVAgKi8KLQotCWludCBJbmRpY2F0ZU1lZGlhU3RhdGU7CS8qIEJhc2Ugb24gSW5kaWNhdGlvbiBzdGF0ZSwgZGVmYXVsdCBpcyBOZGlzTWVkaWFTdGF0ZURpc0Nvbm5lY3RlZCAqLwotCi0JLyogTUFUIHJlbGF0ZWQgcGFyYW1ldGVycyAqLwotCi0JLyogY29uZmlndXJhdGlvbjogcmVhZCBmcm9tIFJlZ2lzdHJ5ICYgRTJQUk9NICovCi0JQk9PTEVBTiBiTG9jYWxBZG1pbk1BQzsJLyogVXNlIHVzZXIgY2hhbmdlZCBNQUMgKi8KLQl1OCBQZXJtYW5lbnRBZGRyZXNzW01BQ19BRERSX0xFTl07CS8qIEZhY3RvcnkgZGVmYXVsdCBNQUMgYWRkcmVzcyAqLwotCXU4IEN1cnJlbnRBZGRyZXNzW01BQ19BRERSX0xFTl07CS8qIFVzZXIgY2hhbmdlZCBNQUMgYWRkcmVzcyAqLwotCi0JLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLyogY29tbW9uIGNvbmZpZ3VyYXRpb24gdG8gYm90aCBPUE1PREVfU1RBIGFuZCBPUE1PREVfQVAgKi8KLQkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQlzdHJ1Y3QgcnRfY29tbW9uX2NvbmZpZyBDb21tb25DZmc7Ci0Jc3RydWN0IHJ0X21sbWUgTWxtZTsKLQotCS8qIEFQIG5lZWRzIHRob3NlIHZhcmlhYmxlcyBmb3Igc2l0ZSBzdXJ2ZXkgZmVhdHVyZS4gKi8KLQlzdHJ1Y3QgcnRfbWxtZV9hdXggTWxtZUF1eDsJLyogdGVtcG9yYXJ5IHNldHRpbmdzIHVzZWQgZHVyaW5nIE1MTUUgc3RhdGUgbWFjaGluZSAqLwotCXN0cnVjdCBydF9ic3NfdGFibGUgU2NhblRhYjsJLyogc3RvcmUgdGhlIGxhdGVzdCBTQ0FOIHJlc3VsdCAqLwotCi0JLypBYm91dCBNYWNUYWIsIHRoZSBzdGEgZHJpdmVyIHdpbGwgdXNlICMwIGFuZCAjMSBmb3IgbXVsdGljYXN0IGFuZCBBUC4gKi8KLQlzdHJ1Y3QgcnRfbWFjX3RhYmxlIE1hY1RhYjsJLyogQVNJQyBvbi1jaGlwIFdDSUQgZW50cnkgdGFibGUuICBBdCBUWCwgQVNJQyBhbHdheXMgdXNlIGtleSBhY2NvcmRpbmcgdG8gdGhpcyBvbi1jaGlwIHRhYmxlLiAqLwotCXNwaW5sb2NrX3QgTWFjVGFiTG9jazsKLQotCXN0cnVjdCBydF9iYV90YWJsZSBCQVRhYmxlOwotCi0Jc3BpbmxvY2tfdCBCQVRhYkxvY2s7Ci0Jc3RydWN0IHJ0X3JhbGlua190aW1lciBSRUNCQVRpbWVyOwotCi0JLyogZW5jcnlwdGlvbi9kZWNyeXB0aW9uIEtFWSB0YWJsZXMgKi8KLQlzdHJ1Y3QgcnRfY2lwaGVyX2tleSBTaGFyZWRLZXlbTUFYX01CU1NJRF9OVU1dWzRdOwkvKiBTVEEgYWx3YXlzIHVzZSBTaGFyZWRLZXlbQlNTMF1bMC4uM10gKi8KLQotCS8qIFJYIHJlLWFzc2VtYmx5IGJ1ZmZlciBmb3IgZnJhZ21lbnRhdGlvbiAqLwotCXN0cnVjdCBydF9mcmFnbWVudF9mcmFtZSBGcmFnRnJhbWU7CS8qIEZyYW1lIHN0b3JhZ2UgZm9yIGZyYWdtZW50IGZyYW1lICovCi0KLQkvKiB2YXJpb3VzIENvdW50ZXJzICovCi0Jc3RydWN0IHJ0X2NvdW50ZXJfODAyXzMgQ291bnRlcnM4MDIzOwkvKiA4MDIuMyBjb3VudGVycyAqLwotCXN0cnVjdCBydF9jb3VudGVyXzgwMl8xMSBXbGFuQ291bnRlcnM7CS8qIDgwMi4xMSBNSUIgY291bnRlcnMgKi8KLQlzdHJ1Y3QgcnRfY291bnRlcl9yYWxpbmsgUmFsaW5rQ291bnRlcnM7CS8qIFJhbGluayBwcm9wcmlldGFyeSBjb3VudGVycyAqLwotCXN0cnVjdCBydF9jb3VudGVyX2RycyBEcnNDb3VudGVyczsJLyogY291bnRlcnMgZm9yIER5bmFtaWMgVFggUmF0ZSBTd2l0Y2hpbmcgKi8KLQlzdHJ1Y3QgcnRfcHJpdmF0ZSBQcml2YXRlSW5mbzsJLyogUHJpdmF0ZSBpbmZvcm1hdGlvbiAmIGNvdW50ZXJzICovCi0KLQkvKiBmbGFncywgc2VlIGZSVE1QX0FEQVBURVJfeHh4IGZsYWdzICovCi0JdW5zaWduZWQgbG9uZyBGbGFnczsJCS8qIFJlcHJlc2VudCBjdXJyZW50IGRldmljZSBzdGF0dXMgKi8KLQl1bnNpZ25lZCBsb25nIFBTRmxhZ3M7CQkvKiBQb3dlciBTYXZlIG9wZXJhdGlvbiBmbGFnLiAqLwotCi0JLyogY3VycmVudCBUWCBzZXF1ZW5jZSAjICovCi0JdTE2IFNlcXVlbmNlOwotCi0JLyogQ29udHJvbCBkaXNjb25uZWN0IC8gY29ubmVjdCBldmVudCBnZW5lcmF0aW9uICovCi0JLyorKytOb3QgdXNlZCBhbnltb3JlICovCi0JdW5zaWduZWQgbG9uZyBMaW5rRG93blRpbWU7Ci0JLyotLS0gKi8KLQl1bnNpZ25lZCBsb25nIExhc3RSeFJhdGU7Ci0JdW5zaWduZWQgbG9uZyBMYXN0VHhSYXRlOwotCS8qKysrVXNlZCBvbmx5IGZvciBTdGF0aW9uICovCi0JQk9PTEVBTiBiQ29uZmlnQ2hhbmdlZDsJLyogQ29uZmlnIENoYW5nZSBmbGFnIGZvciB0aGUgc2FtZSBTU0lEIHNldHRpbmcgKi8KLQkvKi0tLSAqLwotCi0JdW5zaWduZWQgbG9uZyBFeHRyYUluZm87CS8qIEV4dHJhIGluZm9ybWF0aW9uIGZvciBkaXNwbGF5aW5nIHN0YXR1cyAqLwotCXVuc2lnbmVkIGxvbmcgU3lzdGVtRXJyb3JCaXRtYXA7CS8qIGIwOiBFMlBST00gdmVyc2lvbiBlcnJvciAqLwotCi0JLyorKytOb3QgdXNlZCBhbnltb3JlICovCi0JdW5zaWduZWQgbG9uZyBNYWNJY1ZlcnNpb247CS8qIE1BQy9CQlAgc2VyaWFsIGludGVyZmFjZSBpc3N1ZSBzb2x2ZWQgYWZ0ZXIgdmVyLkQgKi8KLQkvKi0tLSAqLwotCi0JLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLyogU3lzdGVtIGV2ZW50IGxvZyAqLwotCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCXN0cnVjdCBydF84MDJfMTFfZXZlbnRfdGFibGUgRXZlbnRUYWI7Ci0KLQlCT09MRUFOIEhUQ0VuYWJsZTsKLQotCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQkvKiAgICAgIFN0YXRpc3RpYyByZWxhdGVkIHBhcmFtZXRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmZGVmIFJUTVBfTUFDX1VTQgotCXVuc2lnbmVkIGxvbmcgQnVsa091dERhdGFPbmVTZWNDb3VudDsKLQl1bnNpZ25lZCBsb25nIEJ1bGtJbkRhdGFPbmVTZWNDb3VudDsKLQl1bnNpZ25lZCBsb25nIEJ1bGtMYXN0T25lU2VjQ291bnQ7CS8qIEJ1bGtPdXREYXRhT25lU2VjQ291bnQgKyBCdWxrSW5EYXRhT25lU2VjQ291bnQgKi8KLQl1bnNpZ25lZCBsb25nIHdhdGNoRG9nUnhDbnQ7Ci0JdW5zaWduZWQgbG9uZyB3YXRjaERvZ1J4T3ZlckZsb3dDbnQ7Ci0JdW5zaWduZWQgbG9uZyB3YXRjaERvZ1R4UGVuZGluZ0NudFtOVU1fT0ZfVFhfUklOR107Ci0JaW50IFRyYW5zZmVyZWRMZW5ndGhbTlVNX09GX1RYX1JJTkddOwotI2VuZGlmCQkJCS8qIFJUTVBfTUFDX1VTQiAvLyAqLwotCi0JQk9PTEVBTiBiVXBkYXRlQmNuQ250RG9uZTsKLQl1bnNpZ25lZCBsb25nIHdhdGNoRG9nTWFjRGVhZGxvY2s7CS8qIHByZXZlbnQgTUFDL0JCUCBpbnRvIGRlYWRsb2NrIGNvbmRpdGlvbiAqLwotCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQkvKiBERUJVRyBwYXJhbWVydHMgKi8KLQkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLyp1bnNpZ25lZCBsb25nICAgICAgICAgRGVidWdTZXR0aW5nWzRdOyAqLwotCUJPT0xFQU4gYkJhbkFsbEJhU2V0dXA7Ci0JQk9PTEVBTiBiUHJvbWlzY3VvdXM7Ci0KLQkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLyogcnQyODYwYyBlbXVsYXRpb24tdXNlIFBhcmFtZXRlcnMgKi8KLQkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLyp1bnNpZ25lZCBsb25nICAgICAgICAgcnRzYWNjdVszMF07ICovCi0JLyp1bnNpZ25lZCBsb25nICAgICAgICAgY3RzYWNjdVszMF07ICovCi0JLyp1bnNpZ25lZCBsb25nICAgICAgICAgY2ZlbmRhY2N1WzMwXTsgKi8KLQkvKnVuc2lnbmVkIGxvbmcgICAgICAgICBiYWNvbnRlbnRbMTZdOyAqLwotCS8qdW5zaWduZWQgbG9uZyAgICAgICAgIHJ4aW50W1JYX1JJTkdfU0laRSsxXTsgKi8KLQkvKnU4ICAgICAgICAgcmN2YmFbNjBdOyAqLwotCUJPT0xFQU4gYkxpbmtBZGFwdDsKLQlCT09MRUFOIGJGb3JjZVByaW50VFg7Ci0JQk9PTEVBTiBiRm9yY2VQcmludFJYOwotCS8qQk9PTEVBTiAgICAgICAgICAgICAgIGJEaXNhYmxlc2Nhbm5pbmc7ICAgICAgICAgICAgICAgLy9kZWZpbmVkIGluIFJUMjg3MCBVU0IgKi8KLQlCT09MRUFOIGJTdGFGaWZvVGVzdDsKLQlCT09MRUFOIGJQcm90ZWN0aW9uVGVzdDsKLQlCT09MRUFOIGJCcm9hZENvbUhUOwotCS8qKysrRm9sbG93aW5nIGFkZCBmcm9tIFJUMjg3MCBVU0IuICovCi0JdW5zaWduZWQgbG9uZyBCdWxrT3V0UmVxOwotCXVuc2lnbmVkIGxvbmcgQnVsa091dENvbXBsZXRlOwotCXVuc2lnbmVkIGxvbmcgQnVsa091dENvbXBsZXRlT3RoZXI7Ci0JdW5zaWduZWQgbG9uZyBCdWxrT3V0Q29tcGxldGVDYW5jZWw7CS8qIHNlZW1zIG5vdCB1c2VkIG5vdz8gKi8KLQl1bnNpZ25lZCBsb25nIEJ1bGtJblJlcTsKLQl1bnNpZ25lZCBsb25nIEJ1bGtJbkNvbXBsZXRlOwotCXVuc2lnbmVkIGxvbmcgQnVsa0luQ29tcGxldGVGYWlsOwotCS8qLS0tICovCi0KLQlzdHJ1Y3Qgd2lmaWNvbmYgV0lGSXRlc3RiZWQ7Ci0KLQlzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1X3Bvb2wgbXBkdV9ibGtfcG9vbDsKLQotCXVuc2lnbmVkIGxvbmcgT25lU2Vjb25kbm9uQkVwYWNrZXRzOwkvKiByZWNvcmQgbm9uIEJFIHBhY2tldHMgcGVyIHNlY29uZCAqLwotCi0jaWZkZWYgTElOVVgKLQlzdHJ1Y3QgaXdfc3RhdGlzdGljcyBpd19zdGF0czsKLQotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwotI2VuZGlmCQkJCS8qIExJTlVYIC8vICovCi0KLQl1bnNpZ25lZCBsb25nIFRidHRUaWNrQ291bnQ7Ci0jaWZkZWYgUENJX01TSV9TVVBQT1JUCi0JQk9PTEVBTiBIYXZlTXNpOwotI2VuZGlmCQkJCS8qIFBDSV9NU0lfU1VQUE9SVCAvLyAqLwotCi0JdTggaXNfb247Ci0KLSNkZWZpbmUgVElNRV9CQVNFCQkJKDEwMDAwMDAvT1NfSFopCi0jZGVmaW5lIFRJTUVfT05FX1NFQ09ORAkJKDEwMDAwMDAvVElNRV9CQVNFKQotCXU4IGZsZ19iZV9hZGp1c3Q7Ci0JdW5zaWduZWQgbG9uZyBiZV9hZGp1c3RfbGFzdF90aW1lOwotCi0JdTggRmxnQ3RzRW5hYmxlZDsKLQl1OCBQTV9GbGdTdXNwZW5kOwotCi0jaWZkZWYgUlQzMHh4Ci0jaWZkZWYgUlRNUF9FRlVTRV9TVVBQT1JUCi0JQk9PTEVBTiBiVXNlRWZ1c2U7Ci0JdTggRUVQUk9NSW1hZ2VbMTAyNF07Ci0jZW5kaWYJCQkJLyogUlRNUF9FRlVTRV9TVVBQT1JUIC8vICovCi0jZW5kaWYJCQkJLyogUlQzMHh4IC8vICovCi19OwotCi0jZGVmaW5lIERFTEFZSU5UTUFTSwkJMHgwMDAzZmZmYgotI2RlZmluZSBJTlRNQVNLCQkJCTB4MDAwM2ZmZmIKLSNkZWZpbmUgSW5kTWFzawkJCQkweDAwMDNmZmZjCi0jZGVmaW5lIFJ4SU5UCQkJCTB4MDAwMDAwMDUJLyogRGVsYXllZCBSeCBvciBpbmRpdmkgcnggKi8KLSNkZWZpbmUgVHhEYXRhSW50CQkJMHgwMDAwMDBmYQkvKiBEZWxheWVkIFR4IG9yIGluZGl2aSB0eCAqLwotI2RlZmluZSBUeE1nbXRJbnQJCQkweDAwMDAwMTAyCS8qIERlbGF5ZWQgVHggb3IgaW5kaXZpIHR4ICovCi0jZGVmaW5lIFR4Q29oZXJlbnQJCQkweDAwMDIwMDAwCS8qIHR4IGNvaGVyZW50ICovCi0jZGVmaW5lIFJ4Q29oZXJlbnQJCQkweDAwMDEwMDAwCS8qIHJ4IGNvaGVyZW50ICovCi0jZGVmaW5lIE1jdUNvbW1hbmQJCQkweDAwMDAwMjAwCS8qIG1jdSAqLwotI2RlZmluZSBQcmVUQlRUSW50CQkJMHgwMDAwMTAwMAkvKiBQcmUtVEJUVCBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgVEJUVEludAkJCQkweDAwMDAwODAwCS8qIFRCVFQgaW50ZXJydXB0ICovCi0jZGVmaW5lIEdQVGltZU91dEludAkJCTB4MDAwMDgwMDAJLyogR1B0aW1lb3V0IGludGVycnVwdCAqLwotI2RlZmluZSBBdXRvV2FrZXVwSW50CQkweDAwMDA0MDAwCS8qIEF1dG9XYWtldXBJbnQgaW50ZXJydXB0ICovCi0jZGVmaW5lIEZpZm9TdGFGdWxsSW50CQkJMHgwMDAwMjAwMAkvKiAgZmlmbyBzdGF0aXN0aWNzIGZ1bGwgaW50ZXJydXB0ICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgKglSeCBQYXRoIHNvZnR3YXJlIGNvbnRyb2wgYmxvY2sgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMKLSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdHJ1Y3QgcnRfcnhfYmxrIHsKLQlSVDI4WFhfUlhEX1NUUlVDIFJ4RDsKLQlzdHJ1Y3QgcnRfcnh3aSAqcFJ4V0k7Ci0Jc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEgKnBIZWFkZXI7Ci0Jdm9pZCAqcFJ4UGFja2V0OwotCXU4ICpwRGF0YTsKLQl1MTYgRGF0YVNpemU7Ci0JdTE2IEZsYWdzOwotCXU4IFVzZXJQcmlvcml0eTsJLyogZm9yIGNhbGN1bGF0ZSBUS0lQIE1JQyB1c2luZyAqLwotfTsKLQotI2RlZmluZSBSWF9CTEtfU0VUX0ZMQUcoX3BSeEJsaywgX2ZsYWcpCQkoX3BSeEJsay0+RmxhZ3MgfD0gX2ZsYWcpCi0jZGVmaW5lIFJYX0JMS19URVNUX0ZMQUcoX3BSeEJsaywgX2ZsYWcpCShfcFJ4QmxrLT5GbGFncyAmIF9mbGFnKQotI2RlZmluZSBSWF9CTEtfQ0xFQVJfRkxBRyhfcFJ4QmxrLCBfZmxhZykJKF9wUnhCbGstPkZsYWdzICY9IH4oX2ZsYWcpKQotCi0jZGVmaW5lIGZSWF9XRFMJCQkweDAwMDEKLSNkZWZpbmUgZlJYX0FNU0RVICAgICAgIDB4MDAwMgotI2RlZmluZSBmUlhfQVJBTElOSyAgICAgMHgwMDA0Ci0jZGVmaW5lIGZSWF9IVEMgICAgICAgICAweDAwMDgKLSNkZWZpbmUgZlJYX1BBRCAgICAgICAgIDB4MDAxMAotI2RlZmluZSBmUlhfQU1QRFUgICAgICAgMHgwMDIwCi0jZGVmaW5lIGZSWF9RT1MJCQkweDAwNDAKLSNkZWZpbmUgZlJYX0lORlJBCQkweDAwODAKLSNkZWZpbmUgZlJYX0VBUAkJCTB4MDEwMAotI2RlZmluZSBmUlhfTUVTSAkJMHgwMjAwCi0jZGVmaW5lIGZSWF9BUENMSQkJMHgwNDAwCi0jZGVmaW5lIGZSWF9ETFMJCQkweDA4MDAKLSNkZWZpbmUgZlJYX1dQSQkJCTB4MTAwMAotCi0jZGVmaW5lIExFTkdUSF9BTVNEVV9TVUJGUkFNRUhFQUQJMTQKLSNkZWZpbmUgTEVOR1RIX0FSQUxJTktfU1VCRlJBTUVIRUFECTE0Ci0jZGVmaW5lIExFTkdUSF9BUkFMSU5LX0hFQURFUl9GSUVMRAkgMgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICoJVHggUGF0aCBzb2Z0d2FyZSBjb250cm9sIGJsb2NrIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzCi0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBUWF9VTktPV05fRlJBTUUJCQkweDAwCi0jZGVmaW5lIFRYX01DQVNUX0ZSQU1FCQkJMHgwMQotI2RlZmluZSBUWF9MRUdBQ1lfRlJBTUUJCQkweDAyCi0jZGVmaW5lIFRYX0FNUERVX0ZSQU1FCQkJMHgwNAotI2RlZmluZSBUWF9BTVNEVV9GUkFNRQkJCTB4MDgKLSNkZWZpbmUgVFhfUkFMSU5LX0ZSQU1FCQkJMHgxMAotI2RlZmluZSBUWF9GUkFHX0ZSQU1FCQkJMHgyMAotCi0vKiAgICAgIEN1cnJlbnRseSB0aGUgc2l6ZW9mKHN0cnVjdCBydF90eF9ibGspIGlzIDE0OCBieXRlcy4gKi8KLXN0cnVjdCBydF90eF9ibGsgewotCXU4IFF1ZUlkeDsKLQl1OCBUeEZyYW1lVHlwZTsJLyogSW5kaWNhdGUgdGhlIFRyYW5zbWlzc2lvbiB0eXBlIG9mIHRoZSBhbGwgZnJhbWVzIGluIG9uZSBiYXRjaCAqLwotCXU4IFRvdGFsRnJhbWVOdW07CS8qIFRvdGFsIGZyYW1lIG51bWJlciB0aGF0IHdhbnRzIHRvIHNlbmQtb3V0IGluIG9uZSBiYXRjaCAqLwotCXUxNiBUb3RhbEZyYWdOdW07CS8qIFRvdGFsIGZyYW1lIGZyYWdtZW50cyByZXF1aXJlZCBpbiBvbmUgYmF0Y2ggKi8KLQl1MTYgVG90YWxGcmFtZUxlbjsJLyogVG90YWwgbGVuZ3RoIG9mIGFsbCBmcmFtZXMgdGhhdCB3YW50cyB0byBzZW5kLW91dCBpbiBvbmUgYmF0Y2ggKi8KLQotCXN0cnVjdCBydF9xdWV1ZV9oZWFkZXIgVHhQYWNrZXRMaXN0OwotCXN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKnBNYWNFbnRyeTsJLyogTlVMTDogcGFja2V0IHdpdGggODAyLjExIFJBIGZpZWxkIGlzIG11bHRpY2FzdC9icm9hZGNhc3QgYWRkcmVzcyAqLwotCUhUVFJBTlNNSVRfU0VUVElORyAqcFRyYW5zbWl0OwotCi0JLyogRm9sbG93aW5nIHN0cnVjdHVyZSB1c2VkIGZvciB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIGEgc3BlY2lmaWMgcGFja2V0LiAqLwotCXZvaWQgKnBQYWNrZXQ7Ci0JdTggKnBTcmNCdWZIZWFkZXI7CS8qIFJlZmVyZW5jZSB0byB0aGUgaGVhZCBvZiBza19idWZmLT5kYXRhICovCi0JdTggKnBTcmNCdWZEYXRhOwkvKiBSZWZlcmVuY2UgdG8gdGhlIHNrX2J1ZmYtPmRhdGEsIHdpbGwgY2hhbmdlIGRlcGVuZGluZyBvbiB0aGUgaGFuZGxpbmcgcHJvZ3Jlc3NzICovCi0JdTMyIFNyY0J1ZkxlbjsJCS8qIExlbmd0aCBvZiBwYWNrZXQgcGF5bG9hZCB3aGljaCBub3QgaW5jbHVkaW5nIExheWVyIDIgaGVhZGVyICovCi0JdTggKnBFeHRyYUxsY1NuYXBFbmNhcDsJLyogTlVMTCBtZWFucyBubyBleHRyYSBMTEMvU05BUCBpcyByZXF1aXJlZCAqLwotCXU4IEhlYWRlckJ1ZlsxMjhdOwkvKiBUZW1wQnVmZmVyIGZvciBUWF9JTkZPICsgVFhfV0kgKyA4MDIuMTEgSGVhZGVyICsgcGFkZGluZyArIEFNU0RVIFN1YkhlYWRlciArIExMQy9TTkFQICovCi0JLypSVDI4NzAgMi4xLjAuMCB1c2VzIG9ubHkgODAgYnl0ZXMgKi8KLQkvKlJUMzA3MCAyLjEuMS4wIHVzZXMgb25seSA5NiBieXRlcyAqLwotCS8qUlQzMDkwIDIuMS4wLjAgdXNlcyBvbmx5IDk2IGJ5dGVzICovCi0JdTggTXBkdUhlYWRlckxlbjsJLyogODAyLjExIGhlYWRlciBsZW5ndGggTk9UIGluY2x1ZGluZyB0aGUgcGFkZGluZyAqLwotCXU4IEhkclBhZExlbjsJLyogcmVjb3JkaW5nIEhlYWRlciBQYWRkaW5nIExlbmd0aDsgKi8KLQl1OCBhcGlkeDsJCS8qIFRoZSBpbnRlcmZhY2UgYXNzb2NpYXRlZCB0byB0aGlzIHBhY2tldCAqLwotCXU4IFdjaWQ7CQkvKiBUaGUgTUFDIGVudHJ5IGFzc29jaWF0ZWQgdG8gdGhpcyBwYWNrZXQgKi8KLQl1OCBVc2VyUHJpb3JpdHk7CS8qIHByaW9yaXR5IGNsYXNzIG9mIHBhY2tldCAqLwotCXU4IEZyYW1lR2FwOwkJLyogd2hhdCBraW5kIG9mIElGUyBkb2VzIHRoaXMgcGFja2V0IHVzZSAqLwotCXU4IE1wZHVSZXFOdW07CS8qIG51bWJlciBvZiBmcmFnbWVudHMgb2YgdGhpcyBmcmFtZSAqLwotCXU4IFR4UmF0ZTsJCS8qIFRPRE86IE9ic29sZXRlZD8gU2hvdWxkIGNoYW5nZSB0byBNQ1M/ICovCi0JdTggQ2lwaGVyQWxnOwkvKiBjaXBoZXIgYWxvZ3JpdGhtICovCi0Jc3RydWN0IHJ0X2NpcGhlcl9rZXkgKnBLZXk7Ci0KLQl1MTYgRmxhZ3M7CQkvKlNlZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgZm9yIGRldGFpbC4gKi8KLQotCS8qWU9VIFNIT1VMRCBOT1QgVE9VQ0ggSVQhIEZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSB1c2VkIGZvciBoYXJkd2FyZS1kZXBlbmRlZCBsYXllci4gKi8KLQl1bnNpZ25lZCBsb25nIFByaXY7CQkvKiBIYXJkd2FyZSBzcGVjaWZpYyB2YWx1ZSBzYXZlZCBpbiBoZXJlLiAqLwotfTsKLQotI2RlZmluZSBmVFhfYlJ0c1JlcXVpcmVkCTB4MDAwMQkvKiBJbmRpY2F0ZSBpZiBuZWVkIHNlbmQgUlRTIGZyYW1lIGZvciBwcm90ZWN0aW9uLiBOb3QgdXNlZCBpbiBSVDI4NjAvUlQyODcwLiAqLwotI2RlZmluZSBmVFhfYkFja1JlcXVpcmVkCTB4MDAwMgkvKiB0aGUgcGFja2V0IG5lZWQgYWNrIHJlc3BvbnNlICovCi0jZGVmaW5lIGZUWF9iUGlnZ3lCYWNrCQkweDAwMDQJLyogTGVnYWN5IGRldmljZSB1c2UgUGlnZ2JhY2sgb3Igbm90ICovCi0jZGVmaW5lIGZUWF9iSFRSYXRlCQkweDAwMDgJLyogYWxsb3cgdG8gdXNlIEhUIHJhdGUgKi8KLSNkZWZpbmUgZlRYX2JGb3JjZU5vblFvUwkweDAwMTAJLyogZm9yY2UgdG8gdHJhbnNtaXQgZnJhbWUgd2l0aG91dCBXTU0tUW9TIGluIEhUIG1vZGUgKi8KLSNkZWZpbmUgZlRYX2JBbGxvd0ZyYWcJCTB4MDAyMAkvKiBhbGxvdyB0byBmcmFnbWVudCB0aGUgcGFja2V0LCBBLU1QRFUsIEEtTVNEVSwgQS1SYWxpbmsgaXMgbm90IGFsbG93ZWQgdG8gZnJhZ21lbnQgKi8KLSNkZWZpbmUgZlRYX2JNb3JlRGF0YQkJMHgwMDQwCS8qIHRoZXJlIGFyZSBtb3JlIGRhdGEgcGFja2V0cyBpbiBQb3dlclNhdmUgUXVldWUgKi8KLSNkZWZpbmUgZlRYX2JXTU0JCTB4MDA4MAkvKiBRT1MgRGF0YSAqLwotI2RlZmluZSBmVFhfYkNsZWFyRUFQRnJhbWUJMHgwMTAwCi0KLSNkZWZpbmUgVFhfQkxLX1NFVF9GTEFHKF9wVHhCbGssIF9mbGFnKQkJKF9wVHhCbGstPkZsYWdzIHw9IF9mbGFnKQotI2RlZmluZSBUWF9CTEtfVEVTVF9GTEFHKF9wVHhCbGssIF9mbGFnKQkoKChfcFR4QmxrLT5GbGFncyAmIF9mbGFnKSA9PSBfZmxhZykgPyAxIDogMCkKLSNkZWZpbmUgVFhfQkxLX0NMRUFSX0ZMQUcoX3BUeEJsaywgX2ZsYWcpCShfcFR4QmxrLT5GbGFncyAmPSB+KF9mbGFnKSkKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqCU90aGVyIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gZGVmaW5pdGlvbnMKLSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW5saW5lIHZvaWQgQ29udmVydE11bHRpY2FzdElQMk1BQyh1OCAqcElwQWRkciwKLQkJCQkJICB1OCAqKnBwTWFjQWRkciwKLQkJCQkJICB1MTYgUHJvdG9UeXBlKQotewotCWlmIChwSXBBZGRyID09IE5VTEwpCi0JCXJldHVybjsKLQotCWlmIChwcE1hY0FkZHIgPT0gTlVMTCB8fCAqcHBNYWNBZGRyID09IE5VTEwpCi0JCXJldHVybjsKLQotCXN3aXRjaCAoUHJvdG9UeXBlKSB7Ci0JY2FzZSBFVEhfUF9JUFY2OgotLyogICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KCpwcE1hY0FkZHIsIDAsIEVUSF9MRU5HVEhfT0ZfQUREUkVTUyk7ICovCi0JCSooKnBwTWFjQWRkcikgPSAweDMzOwotCQkqKCpwcE1hY0FkZHIgKyAxKSA9IDB4MzM7Ci0JCSooKnBwTWFjQWRkciArIDIpID0gcElwQWRkclsxMl07Ci0JCSooKnBwTWFjQWRkciArIDMpID0gcElwQWRkclsxM107Ci0JCSooKnBwTWFjQWRkciArIDQpID0gcElwQWRkclsxNF07Ci0JCSooKnBwTWFjQWRkciArIDUpID0gcElwQWRkclsxNV07Ci0JCWJyZWFrOwotCi0JY2FzZSBFVEhfUF9JUDoKLQlkZWZhdWx0OgotLyogICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KCpwcE1hY0FkZHIsIDAsIEVUSF9MRU5HVEhfT0ZfQUREUkVTUyk7ICovCi0JCSooKnBwTWFjQWRkcikgPSAweDAxOwotCQkqKCpwcE1hY0FkZHIgKyAxKSA9IDB4MDA7Ci0JCSooKnBwTWFjQWRkciArIDIpID0gMHg1ZTsKLQkJKigqcHBNYWNBZGRyICsgMykgPSBwSXBBZGRyWzFdICYgMHg3ZjsKLQkJKigqcHBNYWNBZGRyICsgNCkgPSBwSXBBZGRyWzJdOwotCQkqKCpwcE1hY0FkZHIgKyA1KSA9IHBJcEFkZHJbM107Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybjsKLX0KLQotY2hhciAqR2V0UGh5TW9kZShpbnQgTW9kZSk7Ci1jaGFyICpHZXRCVyhpbnQgQlcpOwotCi0vKiAqLwotLyogIFByaXZhdGUgcm91dGluZXMgaW4gcnRtcF9pbml0LmMgKi8KLS8qICovCi1pbnQgUlRNUEFsbG9jQWRhcHRlckJsb2NrKHZvaWQgKmhhbmRsZSwKLQkJCQkgIHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKipwcEFkYXB0ZXIpOwotCi1pbnQgUlRNUEFsbG9jVHhSeFJpbmdNZW1vcnkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotdm9pZCBSVE1QRnJlZUFkYXB0ZXIoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotaW50IE5JQ1JlYWRSZWdQYXJhbWV0ZXJzKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkgdm9pZCAqV3JhcHBlckNvbmZpZ3VyYXRpb25Db250ZXh0KTsKLQotI2lmZGVmIFJUTVBfUkZfUldfU1VQUE9SVAotdm9pZCBOSUNJbml0UkZSZWdpc3RlcnMoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotdm9pZCBSdG1wQ2hpcE9wc1JGSG9vayhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi1pbnQgUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkgIHU4IHJlZ0lELCB1OCB2YWx1ZSk7Ci0KLWludCBSVDMweHhSZWFkUkZSZWdpc3RlcihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJIHU4IHJlZ0lELCB1OCAqcFZhbHVlKTsKLSNlbmRpZiAvKiBSVE1QX1JGX1JXX1NVUFBPUlQgLy8gKi8KLQotdm9pZCBOSUNSZWFkRUVQUk9NUGFyYW1ldGVycyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHU4ICptYWNfYWRkcik7Ci0KLXZvaWQgTklDSW5pdEFzaWNGcm9tRUVQUk9NKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLWludCBOSUNJbml0aWFsaXplQWRhcHRlcihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIElOIEJPT0xFQU4gYkhhcmRSZXNldCk7Ci0KLWludCBOSUNJbml0aWFsaXplQXNpYyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIElOIEJPT0xFQU4gYkhhcmRSZXNldCk7Ci0KLXZvaWQgTklDSXNzdWVSZXNldChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi12b2lkIFJUTVBSaW5nQ2xlYW5VcChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHU4IFJpbmdUeXBlKTsKLQotdm9pZCBVc2VyQ2ZnSW5pdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi12b2lkIE5JQ1Jlc2V0RnJvbUVycm9yKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLWludCBOSUNMb2FkRmlybXdhcmUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotdm9pZCBOSUNFcmFzZUZpcm13YXJlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLWludCBOSUNMb2FkUmF0ZVN3aXRjaGluZ1BhcmFtcyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi1CT09MRUFOIE5JQ0NoZWNrRm9ySGFuZyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi12b2lkIE5JQ1VwZGF0ZUZpZm9TdGFDb3VudGVycyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi12b2lkIE5JQ1VwZGF0ZVJhd0NvdW50ZXJzKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLXZvaWQgUlRNUFplcm9NZW1vcnkodm9pZCAqcFNyYywgdW5zaWduZWQgbG9uZyBMZW5ndGgpOwotCi11bnNpZ25lZCBsb25nIFJUTVBDb21wYXJlTWVtb3J5KHZvaWQgKnBTcmMxLCB2b2lkICpwU3JjMiwgdW5zaWduZWQgbG9uZyBMZW5ndGgpOwotCi12b2lkIFJUTVBNb3ZlTWVtb3J5KHZvaWQgKnBEZXN0LCB2b2lkICpwU3JjLCB1bnNpZ25lZCBsb25nIExlbmd0aCk7Ci0KLXZvaWQgQXRvSChjaGFyICpzcmMsIHU4ICpkZXN0LCBpbnQgZGVzdGxlbik7Ci0KLXZvaWQgUlRNUFBhdGNoTWFjQmJwQnVnKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLXZvaWQgUlRNUEluaXRUaW1lcihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgIHN0cnVjdCBydF9yYWxpbmtfdGltZXIgKnBUaW1lciwKLQkJICAgdm9pZCAqcFRpbWVyRnVuYywgdm9pZCAqcERhdGEsIElOIEJPT0xFQU4gUmVwZWF0KTsKLQotdm9pZCBSVE1QU2V0VGltZXIoc3RydWN0IHJ0X3JhbGlua190aW1lciAqcFRpbWVyLCB1bnNpZ25lZCBsb25nIFZhbHVlKTsKLQotdm9pZCBSVE1QTW9kVGltZXIoc3RydWN0IHJ0X3JhbGlua190aW1lciAqcFRpbWVyLCB1bnNpZ25lZCBsb25nIFZhbHVlKTsKLQotdm9pZCBSVE1QQ2FuY2VsVGltZXIoc3RydWN0IHJ0X3JhbGlua190aW1lciAqcFRpbWVyLCBPVVQgQk9PTEVBTiAqIHBDYW5jZWxsZWQpOwotCi12b2lkIFJUTVBTZXRMRUQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1OCBTdGF0dXMpOwotCi12b2lkIFJUTVBTZXRTaWduYWxMRUQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBJTiBORElTXzgwMl8xMV9SU1NJIERibSk7Ci0KLXZvaWQgUlRNUEVuYWJsZVJ4VHgoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotLyogKi8KLS8qIHByb3RvdHlwZSBpbiBhY3Rpb24uYyAqLwotLyogKi8KLXZvaWQgQWN0aW9uU3RhdGVNYWNoaW5lSW5pdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgc3RydWN0IHJ0X3N0YXRlX21hY2hpbmUgKlMsCi0JCQkgICAgT1VUIFNUQVRFX01BQ0hJTkVfRlVOQyBUcmFuc1tdKTsKLQotdm9pZCBNbG1lQUREQkFBY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKTsKLQotdm9pZCBNbG1lREVMQkFBY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKTsKLQotdm9pZCBNbG1lRExTQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSk7Ci0KLXZvaWQgTWxtZUludmFsaWRBY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKTsKLQotdm9pZCBNbG1lUU9TQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSk7Ci0KLXZvaWQgUGVlckFkZEJBUmVxQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSk7Ci0KLXZvaWQgUGVlckFkZEJBUnNwQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSk7Ci0KLXZvaWQgUGVlckRlbEJBQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSk7Ci0KLXZvaWQgUGVlckJBQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSk7Ci0KLXZvaWQgU2VuZFBTTVBBY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1OCBXY2lkLCB1OCBQc21wKTsKLQotdm9pZCBQZWVyUk1BY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKTsKLQotdm9pZCBQZWVyUHVibGljQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSk7Ci0KLXZvaWQgUGVlckhUQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSk7Ci0KLXZvaWQgUGVlclFPU0FjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pOwotCi12b2lkIFJFQ0JBVGltZXJUaW1lb3V0KHZvaWQgKlN5c3RlbVNwZWNpZmljMSwKLQkJICAgICAgIHZvaWQgKkZ1bmN0aW9uQ29udGV4dCwKLQkJICAgICAgIHZvaWQgKlN5c3RlbVNwZWNpZmljMiwgdm9pZCAqU3lzdGVtU3BlY2lmaWMzKTsKLQotdm9pZCBPUklCQVRpbWVyVGltZW91dChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi12b2lkIFNlbmRSZWZyZXNoQkFSKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcEVudHJ5KTsKLQotdm9pZCBBY3RIZWFkZXJJbml0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEgKnBIZHI4MDIxMSwKLQkJICAgdTggKkFkZHIxLCB1OCAqQWRkcjIsIHU4ICpBZGRyMyk7Ci0KLXZvaWQgQmFySGVhZGVySW5pdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgIHN0cnVjdCBydF9mcmFtZV9iYXIgKnBDbnRsQmFyLCB1OCAqcERBLCB1OCAqcFNBKTsKLQotdm9pZCBJbnNlcnRBY3RGaWVsZChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgICB1OCAqcEZyYW1lQnVmLAotCQkgICAgdW5zaWduZWQgbG9uZyAqcEZyYW1lTGVuLCB1OCBDYXRlZ29yeSwgdTggQWN0Q29kZSk7Ci0KLUJPT0xFQU4gQ250bEVucXVldWVGb3JSZWN2KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgV2NpZCwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgTXNnTGVuLCBzdHJ1Y3QgcnRfZnJhbWVfYmFfcmVxICpwTXNnKTsKLQotLyogKi8KLS8qIFByaXZhdGUgcm91dGluZXMgaW4gcnRtcF9kYXRhLmMgKi8KLS8qICovCi1CT09MRUFOIFJUTVBIYW5kbGVSeERvbmVJbnRlcnJ1cHQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotQk9PTEVBTiBSVE1QSGFuZGxlVHhSaW5nRG1hRG9uZUludGVycnVwdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJCSBJTlRfU09VUkNFX0NTUl9TVFJVQyBUeFJpbmdCaXRtYXApOwotCi12b2lkIFJUTVBIYW5kbGVNZ210UmluZ0RtYURvbmVJbnRlcnJ1cHQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotdm9pZCBSVE1QSGFuZGxlVEJUVEludGVycnVwdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi12b2lkIFJUTVBIYW5kbGVQcmVUQlRUSW50ZXJydXB0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLXZvaWQgUlRNUEhhbmRsZVR3YWtldXBJbnRlcnJ1cHQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotdm9pZCBSVE1QSGFuZGxlUnhDb2hlcmVudEludGVycnVwdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi1CT09MRUFOIFR4RnJhbWVJc0FnZ3JlZ2F0aWJsZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgICB1OCAqcFByZXZBZGRyMSwgdTggKnA4MDIzaGRyKTsKLQotQk9PTEVBTiBQZWVySXNBZ2dyZU9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgICAgdW5zaWduZWQgbG9uZyBUeFJhdGUsIHN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKnBNYWNFbnRyeSk7Ci0KLWludCBTbmlmZjJCeXRlc0Zyb21OZGlzQnVmZmVyKGNoYXIgKnBGaXJzdEJ1ZmZlciwKLQkJCQkgICAgICB1OCBEZXNpcmVkT2Zmc2V0LAotCQkJCSAgICAgIHU4ICpwQnl0ZTAsIHU4ICpwQnl0ZTEpOwotCi1pbnQgU1RBU2VuZFBhY2tldChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHZvaWQgKnBQYWNrZXQpOwotCi12b2lkIFNUQVNlbmRQYWNrZXRzKHZvaWQgKk1pbmlwb3J0QWRhcHRlckNvbnRleHQsCi0JCSAgICB2b2lkICoqcHBQYWNrZXRBcnJheSwgdTMyIE51bWJlck9mUGFja2V0cyk7Ci0KLXZvaWQgUlRNUERlUXVldWVQYWNrZXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICAgICAgSU4gQk9PTEVBTiBiSW50Q29udGV4dCwKLQkJICAgICAgIHU4IFF1ZUlkeCwgdTggTWF4X1R4X1BhY2tldHMpOwotCi1pbnQgUlRNUEhhcmRUcmFuc21pdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgIHZvaWQgKnBQYWNrZXQsCi0JCQkgICAgIHU4IFF1ZUlkeCwgdW5zaWduZWQgbG9uZyAqcEZyZWVUWERMZWZ0KTsKLQotaW50IFNUQUhhcmRUcmFuc21pdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgc3RydWN0IHJ0X3R4X2JsayAqcFR4QmxrLCB1OCBRdWVJZHgpOwotCi12b2lkIFNUQVJ4RUFQT0xGcmFtZUluZGljYXRlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICAgc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcEVudHJ5LAotCQkJICAgICBzdHJ1Y3QgcnRfcnhfYmxrICpwUnhCbGssIHU4IEZyb21XaGljaEJTU0lEKTsKLQotaW50IFJUTVBGcmVlVFhEUmVxdWVzdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgICAgdTggUmluZ1R5cGUsCi0JCQkgICAgICAgdTggTnVtYmVyUmVxdWlyZWQsIHU4ICpGcmVlTnVtYmVySXMpOwotCi1pbnQgTWxtZUhhcmRUcmFuc21pdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgIHU4IFF1ZUlkeCwgdm9pZCAqcFBhY2tldCk7Ci0KLWludCBNbG1lSGFyZFRyYW5zbWl0TWdtdFJpbmcoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCSAgICAgdTggUXVlSWR4LCB2b2lkICpwUGFja2V0KTsKLQotI2lmZGVmIFJUTVBfTUFDX1BDSQotaW50IE1sbWVIYXJkVHJhbnNtaXRUeFJpbmcoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCSAgIHU4IFF1ZUlkeCwgdm9pZCAqcFBhY2tldCk7Ci0KLWludCBNbG1lRGF0YUhhcmRUcmFuc21pdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJIHU4IFF1ZUlkeCwgdm9pZCAqcFBhY2tldCk7Ci0KLXZvaWQgUlRNUFdyaXRlVHhEZXNjcmlwdG9yKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgIHN0cnVjdCBydF90eGQgKnBUeEQsIElOIEJPT0xFQU4gYldJViwgdTggUVNFTCk7Ci0jZW5kaWYgLyogUlRNUF9NQUNfUENJIC8vICovCi0KLXUxNiBSVE1QQ2FsY0R1cmF0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggUmF0ZSwgdW5zaWduZWQgbG9uZyBTaXplKTsKLQotdm9pZCBSVE1QV3JpdGVUeFdJKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X3R4d2kgKiBwVHhXSSwgSU4gQk9PTEVBTiBGUkFHLCBJTiBCT09MRUFOIENGQUNLLCBJTiBCT09MRUFOIEluc1RpbWVzdGFtcCwgSU4gQk9PTEVBTiBBTVBEVSwgSU4gQk9PTEVBTiBBY2ssIElOIEJPT0xFQU4gTlNlcSwJLyogSFcgbmV3IGEgc2VxdWVuY2UuICovCi0JCSAgIHU4IEJBU2l6ZSwKLQkJICAgdTggV0NJRCwKLQkJICAgdW5zaWduZWQgbG9uZyBMZW5ndGgsCi0JCSAgIHU4IFBJRCwKLQkJICAgdTggVElELAotCQkgICB1OCBUeFJhdGUsCi0JCSAgIHU4IFR4b3Btb2RlLAotCQkgICBJTiBCT09MRUFOIENmQWNrLCBJTiBIVFRSQU5TTUlUX1NFVFRJTkcgKnBUcmFuc21pdCk7Ci0KLXZvaWQgUlRNUFdyaXRlVHhXSV9EYXRhKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCXN0cnVjdCBydF90eHdpICpwVHhXSSwgc3RydWN0IHJ0X3R4X2JsayAqcFR4QmxrKTsKLQotdm9pZCBSVE1QV3JpdGVUeFdJX0NhY2hlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSBzdHJ1Y3QgcnRfdHh3aSAqcFR4V0ksIHN0cnVjdCBydF90eF9ibGsgKnBUeEJsayk7Ci0KLXZvaWQgUlRNUFN1c3BlbmRNc2R1VHJhbnNtaXNzaW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLXZvaWQgUlRNUFJlc3VtZU1zZHVUcmFuc21pc3Npb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotaW50IE1pbmlwb3J0TU1SZXF1ZXN0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICAgIHU4IFF1ZUlkeCwgdTggKnBEYXRhLCB1MzIgTGVuZ3RoKTsKLQotLyorKyttYXJrIGJ5IHNoaWFuZywgbm93IHRoaXMgZnVuY3Rpb24gbWVyZ2UgdG8gTWluaXBvcnRNTVJlcXVlc3QoKSAqLwotLyotLS1tYXJrIGJ5IHNoaWFuZywgbm93IHRoaXMgZnVuY3Rpb24gbWVyZ2UgdG8gTWluaXBvcnRNTVJlcXVlc3QoKSAqLwotCi12b2lkIFJUTVBTZW5kTnVsbEZyYW1lKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgICAgIHU4IFR4UmF0ZSwgSU4gQk9PTEVBTiBiUW9zTnVsbCk7Ci0KLXZvaWQgUlRNUFNlbmREaXNhc3NvY2lhdGlvbkZyYW1lKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLXZvaWQgUlRNUFNlbmRSVFNGcmFtZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgICAgIHU4ICpwREEsCi0JCSAgICAgIElOIHVuc2lnbmVkIGludCBOZXh0TXBkdVNpemUsCi0JCSAgICAgIHU4IFR4UmF0ZSwKLQkJICAgICAgdTggUlRTUmF0ZSwKLQkJICAgICAgdTE2IEFja0R1cmF0aW9uLAotCQkgICAgICB1OCBRdWVJZHgsIHU4IEZyYW1lR2FwKTsKLQotc3RydWN0IHJ0X3F1ZXVlX2hlYWRlciAqUlRNUENoZWNrVHhTd1F1ZXVlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggKiBRdWVJZHgpOwotCi12b2lkIFJUTVBSZXBvcnRNaWNFcnJvcihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9jaXBoZXJfa2V5ICpwV3BhS2V5KTsKLQotdm9pZCBXcGFNaWNGYWlsdXJlUmVwb3J0RnJhbWUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKTsKLQotdm9pZCBXcGFEaXNhc3NvY0FwQW5kQmxvY2tBc3NvYyh2b2lkICpTeXN0ZW1TcGVjaWZpYzEsCi0JCQkJdm9pZCAqRnVuY3Rpb25Db250ZXh0LAotCQkJCXZvaWQgKlN5c3RlbVNwZWNpZmljMiwKLQkJCQl2b2lkICpTeXN0ZW1TcGVjaWZpYzMpOwotCi12b2lkIFdwYVN0YVBhaXJ3aXNlS2V5U2V0dGluZyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi12b2lkIFdwYVN0YUdyb3VwS2V5U2V0dGluZyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi1pbnQgUlRNUENsb25lTmRpc1BhY2tldChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJSU4gQk9PTEVBTiBwSW5zQU1TRFVIZHIsCi0JCQkJdm9pZCAqcEluUGFja2V0LAotCQkJCXZvaWQgKipwcE91dFBhY2tldCk7Ci0KLWludCBSVE1QQWxsb2NhdGVOZGlzUGFja2V0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkgICB2b2lkICoqcFBhY2tldCwKLQkJCQkgICB1OCAqcEhlYWRlciwKLQkJCQkgICB1MzIgSGVhZGVyTGVuLAotCQkJCSAgIHU4ICpwRGF0YSwgdTMyIERhdGFMZW4pOwotCi12b2lkIFJUTVBGcmVlTmRpc1BhY2tldChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHZvaWQgKnBQYWNrZXQpOwotCi1CT09MRUFOIFJUTVBGcmVlVFhEVXBvblR4RG1hRG9uZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHU4IFF1ZUlkeCk7Ci0KLUJPT0xFQU4gUlRNUENoZWNrREhDUEZyYW1lKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdm9pZCAqcFBhY2tldCk7Ci0KLUJPT0xFQU4gUlRNUENoZWNrRXRoZXJUeXBlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdm9pZCAqcFBhY2tldCk7Ci0KLS8qICovCi0vKiBQcml2YXRlIHJvdXRpbmVzIGluIHJ0bXBfd2VwLmMgKi8KLS8qICovCi12b2lkIFJUTVBJbml0V2VwRW5naW5lKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgICAgIHU4ICpwS2V5LAotCQkgICAgICAgdTggS2V5SWQsIHU4IEtleUxlbiwgdTggKnBEZXN0KTsKLQotdm9pZCBSVE1QRW5jcnlwdERhdGEoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICAgIHU4ICpwU3JjLCB1OCAqcERlc3QsIHUzMiBMZW4pOwotCi1CT09MRUFOIFJUTVBTb2Z0RGVjcnlwdFdFUChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICB1OCAqcERhdGEsCi0JCQkgICB1bnNpZ25lZCBsb25nIERhdGFCeXRlQ250LCBzdHJ1Y3QgcnRfY2lwaGVyX2tleSAqcEdyb3VwS2V5KTsKLQotdm9pZCBSVE1QU2V0SUNWKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggKnBEZXN0KTsKLQotdm9pZCBBUkNGT1VSX0lOSVQoc3RydWN0IHJ0X2FyY2ZvdXJjb250ZXh0ICpDdHgsIHU4ICpwS2V5LCB1MzIgS2V5TGVuKTsKLQotdTggQVJDRk9VUl9CWVRFKHN0cnVjdCBydF9hcmNmb3VyY29udGV4dCAqQ3R4KTsKLQotdm9pZCBBUkNGT1VSX0RFQ1JZUFQoc3RydWN0IHJ0X2FyY2ZvdXJjb250ZXh0ICpDdHgsCi0JCSAgICAgdTggKnBEZXN0LCB1OCAqcFNyYywgdTMyIExlbik7Ci0KLXZvaWQgQVJDRk9VUl9FTkNSWVBUKHN0cnVjdCBydF9hcmNmb3VyY29udGV4dCAqQ3R4LAotCQkgICAgIHU4ICpwRGVzdCwgdTggKnBTcmMsIHUzMiBMZW4pOwotCi12b2lkIFdQQUFSQ0ZPVVJfRU5DUllQVChzdHJ1Y3QgcnRfYXJjZm91cmNvbnRleHQgKkN0eCwKLQkJCXU4ICpwRGVzdCwgdTggKnBTcmMsIHUzMiBMZW4pOwotCi11MzIgUlRNUF9DQUxDX0ZDUzMyKHUzMiBGY3MsIHU4ICpDcCwgaW50IExlbik7Ci0KLS8qICovCi0vKiBNTE1FIHJvdXRpbmVzICovCi0vKiAqLwotCi0vKiBBc2ljL1JGL0JCUCByZWxhdGVkIGZ1bmN0aW9ucyAqLwotCi12b2lkIEFzaWNBZGp1c3RUeFBvd2VyKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLXZvaWQgQXNpY1VwZGF0ZVByb3RlY3Qoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICAgICAgdTE2IE9wZXJhaW9uTW9kZSwKLQkJICAgICAgIHU4IFNldE1hc2ssCi0JCSAgICAgICBJTiBCT09MRUFOIGJEaXNhYmxlQkdQcm90ZWN0LCBJTiBCT09MRUFOIGJOb25HRkV4aXN0KTsKLQotdm9pZCBBc2ljU3dpdGNoQ2hhbm5lbChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgICAgICB1OCBDaGFubmVsLCBJTiBCT09MRUFOIGJTY2FuKTsKLQotdm9pZCBBc2ljTG9ja0NoYW5uZWwoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1OCBDaGFubmVsKTsKLQotdm9pZCBBc2ljUmZUdW5pbmdFeGVjKHZvaWQgKlN5c3RlbVNwZWNpZmljMSwKLQkJICAgICAgdm9pZCAqRnVuY3Rpb25Db250ZXh0LAotCQkgICAgICB2b2lkICpTeXN0ZW1TcGVjaWZpYzIsIHZvaWQgKlN5c3RlbVNwZWNpZmljMyk7Ci0KLXZvaWQgQXNpY1Jlc2V0QkJQQWdlbnQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotdm9pZCBBc2ljU2xlZXBUaGVuQXV0b1dha2V1cChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgIHUxNiBUYnR0TnVtVG9OZXh0V2FrZVVwKTsKLQotdm9pZCBBc2ljRm9yY2VTbGVlcChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi12b2lkIEFzaWNGb3JjZVdha2V1cChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIElOIEJPT0xFQU4gYkZyb21UeCk7Ci0KLXZvaWQgQXNpY1NldEJzc2lkKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggKnBCc3NpZCk7Ci0KLXZvaWQgQXNpY1NldE1jYXN0V0Moc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotdm9pZCBBc2ljRGVsV2NpZFRhYihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHU4IFdjaWQpOwotCi12b2lkIEFzaWNFbmFibGVSREcoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotdm9pZCBBc2ljRGlzYWJsZVJERyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi12b2lkIEFzaWNEaXNhYmxlU3luYyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi12b2lkIEFzaWNFbmFibGVCc3NTeW5jKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLXZvaWQgQXNpY0VuYWJsZUlic3NTeW5jKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLXZvaWQgQXNpY1NldEVkY2FQYXJtKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X2VkY2FfcGFybSAqcEVkY2FQYXJtKTsKLQotdm9pZCBBc2ljU2V0U2xvdFRpbWUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBJTiBCT09MRUFOIGJVc2VTaG9ydFNsb3RUaW1lKTsKLQotdm9pZCBBc2ljQWRkU2hhcmVkS2V5RW50cnkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgdTggQnNzSW5kZXgsCi0JCQkgICB1OCBLZXlJZHgsCi0JCQkgICB1OCBDaXBoZXJBbGcsCi0JCQkgICB1OCAqcEtleSwgdTggKnBUeE1pYywgdTggKnBSeE1pYyk7Ci0KLXZvaWQgQXNpY1JlbW92ZVNoYXJlZEtleUVudHJ5KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICAgIHU4IEJzc0luZGV4LCB1OCBLZXlJZHgpOwotCi12b2lkIEFzaWNVcGRhdGVXQ0lEQXR0cmlidXRlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICAgdTE2IFdDSUQsCi0JCQkgICAgIHU4IEJzc0luZGV4LAotCQkJICAgICB1OCBDaXBoZXJBbGcsCi0JCQkgICAgIElOIEJPT0xFQU4gYlVzZVBhaXJld2lzZUtleVRhYmxlKTsKLQotdm9pZCBBc2ljVXBkYXRlV0NJRElWRUlWKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSB1MTYgV0NJRCwgdW5zaWduZWQgbG9uZyB1SVYsIHVuc2lnbmVkIGxvbmcgdUVJVik7Ci0KLXZvaWQgQXNpY1VwZGF0ZVJ4V0NJRFRhYmxlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgIHUxNiBXQ0lELCB1OCAqcEFkZHIpOwotCi12b2lkIEFzaWNBZGRLZXlFbnRyeShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgICAgdTE2IFdDSUQsCi0JCSAgICAgdTggQnNzSW5kZXgsCi0JCSAgICAgdTggS2V5SWR4LAotCQkgICAgIHN0cnVjdCBydF9jaXBoZXJfa2V5ICpwQ2lwaGVyS2V5LAotCQkgICAgIElOIEJPT0xFQU4gYlVzZVBhaXJld2lzZUtleVRhYmxlLCBJTiBCT09MRUFOIGJUeEtleSk7Ci0KLXZvaWQgQXNpY0FkZFBhaXJ3aXNlS2V5RW50cnkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgICB1OCAqcEFkZHIsCi0JCQkgICAgIHU4IFdDSUQsIHN0cnVjdCBydF9jaXBoZXJfa2V5ICpwQ2lwaGVyS2V5KTsKLQotdm9pZCBBc2ljUmVtb3ZlUGFpcndpc2VLZXlFbnRyeShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJdTggQnNzSWR4LCB1OCBXY2lkKTsKLQotQk9PTEVBTiBBc2ljU2VuZENvbW1hbmRUb01jdShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgIHU4IENvbW1hbmQsCi0JCQkgICAgIHU4IFRva2VuLCB1OCBBcmcwLCB1OCBBcmcxKTsKLQotI2lmZGVmIFJUTVBfTUFDX1BDSQotQk9PTEVBTiBBc2ljQ2hlY2tDb21tYW5PayhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHU4IENvbW1hbmQpOwotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotCi12b2lkIE1hY0FkZHJSYW5kb21Cc3NpZChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHU4ICpwQWRkcik7Ci0KLXZvaWQgTWd0TWFjSGVhZGVySW5pdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgICAgIHN0cnVjdCBydF9oZWFkZXJfODAyXzExICpwSGRyODAyMTEsCi0JCSAgICAgIHU4IFN1YlR5cGUsCi0JCSAgICAgIHU4IFRvRHMsIHU4ICpwREEsIHU4ICpwQnNzaWQpOwotCi12b2lkIE1sbWVSYWRpb09mZihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi12b2lkIE1sbWVSYWRpb09uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLXZvaWQgQnNzVGFibGVJbml0KHN0cnVjdCBydF9ic3NfdGFibGUgKlRhYik7Ci0KLXZvaWQgQkFUYWJsZUluaXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfYmFfdGFibGUgKlRhYik7Ci0KLXVuc2lnbmVkIGxvbmcgQnNzVGFibGVTZWFyY2goc3RydWN0IHJ0X2Jzc190YWJsZSAqVGFiLCB1OCAqcEJzc2lkLCB1OCBDaGFubmVsKTsKLQotdW5zaWduZWQgbG9uZyBCc3NTc2lkVGFibGVTZWFyY2goc3RydWN0IHJ0X2Jzc190YWJsZSAqVGFiLAotCQkJIHU4ICpwQnNzaWQsCi0JCQkgdTggKnBTc2lkLCB1OCBTc2lkTGVuLCB1OCBDaGFubmVsKTsKLQotdW5zaWduZWQgbG9uZyBCc3NUYWJsZVNlYXJjaFdpdGhTU0lEKHN0cnVjdCBydF9ic3NfdGFibGUgKlRhYiwKLQkJCSAgICAgdTggKkJzc2lkLAotCQkJICAgICB1OCAqcFNzaWQsCi0JCQkgICAgIHU4IFNzaWRMZW4sIHU4IENoYW5uZWwpOwotCi11bnNpZ25lZCBsb25nIEJzc1NzaWRUYWJsZVNlYXJjaEJ5U1NJRChzdHJ1Y3QgcnRfYnNzX3RhYmxlICpUYWIsCi0JCQkgICAgICAgdTggKnBTc2lkLCB1OCBTc2lkTGVuKTsKLQotdm9pZCBCc3NUYWJsZURlbGV0ZUVudHJ5KHN0cnVjdCBydF9ic3NfdGFibGUgKnBUYWIsCi0JCQkgdTggKnBCc3NpZCwgdTggQ2hhbm5lbCk7Ci0KLXZvaWQgQkFUYWJsZURlbGV0ZU9SSUVudHJ5KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgIHN0cnVjdCBydF9iYV9vcmlfZW50cnkgKnBCQU9SSUVudHJ5KTsKLQotdm9pZCBCc3NFbnRyeVNldChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9ic3NfZW50cnkgKnBCc3MsIHU4ICpwQnNzaWQsIGNoYXIgU3NpZFtdLCB1OCBTc2lkTGVuLCB1OCBCc3NUeXBlLCB1MTYgQmVhY29uUGVyaW9kLCBzdHJ1Y3QgcnRfY2ZfcGFybSAqIENmUGFybSwgdTE2IEF0aW1XaW4sIHUxNiBDYXBhYmlsaXR5SW5mbywgdTggU3VwUmF0ZVtdLCB1OCBTdXBSYXRlTGVuLCB1OCBFeHRSYXRlW10sIHU4IEV4dFJhdGVMZW4sIHN0cnVjdCBydF9odF9jYXBhYmlsaXR5X2llICogcEh0Q2FwYWJpbGl0eSwgc3RydWN0IHJ0X2FkZF9odF9pbmZvX2llICogcEFkZEh0SW5mbywJLyogQVAgbWlnaHQgdXNlIHRoaXMgYWRkaXRpb25hbCBodCBpbmZvIElFICovCi0JCSB1OCBIdENhcGFiaWxpdHlMZW4sCi0JCSB1OCBBZGRIdEluZm9MZW4sCi0JCSB1OCBOZXdFeHRDaGFuT2Zmc2V0LAotCQkgdTggQ2hhbm5lbCwKLQkJIGNoYXIgUnNzaSwKLQkJIElOIExBUkdFX0lOVEVHRVIgVGltZVN0YW1wLAotCQkgdTggQ2tpcEZsYWcsCi0JCSBzdHJ1Y3QgcnRfZWRjYV9wYXJtICpwRWRjYVBhcm0sCi0JCSBzdHJ1Y3QgcnRfcW9zX2NhcGFiaWxpdHlfcGFybSAqcFFvc0NhcGFiaWxpdHksCi0JCSBzdHJ1Y3QgcnRfcWJzc19sb2FkX3Bhcm0gKnBRYnNzTG9hZCwKLQkJIHUxNiBMZW5ndGhWSUUsIHN0cnVjdCBydF9uZGlzXzgwMl8xMV92YXJpYWJsZV9pZXMgKnBWSUUpOwotCi11bnNpZ25lZCBsb25nIEJzc1RhYmxlU2V0RW50cnkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfYnNzX3RhYmxlICpwVGFiLCB1OCAqcEJzc2lkLCBjaGFyIFNzaWRbXSwgdTggU3NpZExlbiwgdTggQnNzVHlwZSwgdTE2IEJlYWNvblBlcmlvZCwgc3RydWN0IHJ0X2NmX3Bhcm0gKiBDZlBhcm0sIHUxNiBBdGltV2luLCB1MTYgQ2FwYWJpbGl0eUluZm8sIHU4IFN1cFJhdGVbXSwgdTggU3VwUmF0ZUxlbiwgdTggRXh0UmF0ZVtdLCB1OCBFeHRSYXRlTGVuLCBzdHJ1Y3QgcnRfaHRfY2FwYWJpbGl0eV9pZSAqIHBIdENhcGFiaWxpdHksIHN0cnVjdCBydF9hZGRfaHRfaW5mb19pZSAqIHBBZGRIdEluZm8sCS8qIEFQIG1pZ2h0IHVzZSB0aGlzIGFkZGl0aW9uYWwgaHQgaW5mbyBJRSAqLwotCQkgICAgICAgdTggSHRDYXBhYmlsaXR5TGVuLAotCQkgICAgICAgdTggQWRkSHRJbmZvTGVuLAotCQkgICAgICAgdTggTmV3RXh0Q2hhbk9mZnNldCwKLQkJICAgICAgIHU4IENoYW5uZWwsCi0JCSAgICAgICBjaGFyIFJzc2ksCi0JCSAgICAgICBJTiBMQVJHRV9JTlRFR0VSIFRpbWVTdGFtcCwKLQkJICAgICAgIHU4IENraXBGbGFnLAotCQkgICAgICAgc3RydWN0IHJ0X2VkY2FfcGFybSAqcEVkY2FQYXJtLAotCQkgICAgICAgc3RydWN0IHJ0X3Fvc19jYXBhYmlsaXR5X3Bhcm0gKnBRb3NDYXBhYmlsaXR5LAotCQkgICAgICAgc3RydWN0IHJ0X3Fic3NfbG9hZF9wYXJtICpwUWJzc0xvYWQsCi0JCSAgICAgICB1MTYgTGVuZ3RoVklFLCBzdHJ1Y3QgcnRfbmRpc184MDJfMTFfdmFyaWFibGVfaWVzICpwVklFKTsKLQotdm9pZCBCQVRhYmxlSW5zZXJ0RW50cnkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJdTE2IEFpZCwKLQkJCXUxNiBUaW1lT3V0VmFsdWUsCi0JCQl1MTYgU3RhcnRpbmdTZXEsCi0JCQl1OCBUSUQsCi0JCQl1OCBCQVdpblNpemUsCi0JCQl1OCBPcmlnaW5hdG9yU3RhdHVzLCBJTiBCT09MRUFOIElzUmVjaXBpZW50KTsKLQotdm9pZCBCc3NUYWJsZVNzaWRTb3J0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgICAgc3RydWN0IHJ0X2Jzc190YWJsZSAqT3V0VGFiLCBjaGFyIFNzaWRbXSwgdTggU3NpZExlbik7Ci0KLXZvaWQgQnNzVGFibGVTb3J0QnlSc3NpKHN0cnVjdCBydF9ic3NfdGFibGUgKk91dFRhYik7Ci0KLXZvaWQgQnNzQ2lwaGVyUGFyc2Uoc3RydWN0IHJ0X2Jzc19lbnRyeSAqcEJzcyk7Ci0KLWludCBNbG1lUXVldWVJbml0KHN0cnVjdCBydF9tbG1lX3F1ZXVlICpRdWV1ZSk7Ci0KLXZvaWQgTWxtZVF1ZXVlRGVzdHJveShzdHJ1Y3QgcnRfbWxtZV9xdWV1ZSAqUXVldWUpOwotCi1CT09MRUFOIE1sbWVFbnF1ZXVlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgIHVuc2lnbmVkIGxvbmcgTWFjaGluZSwKLQkJICAgIHVuc2lnbmVkIGxvbmcgTXNnVHlwZSwgdW5zaWduZWQgbG9uZyBNc2dMZW4sIHZvaWQgKk1zZyk7Ci0KLUJPT0xFQU4gTWxtZUVucXVldWVGb3JSZWN2KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgV2NpZCwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgVGltZVN0YW1wSGlnaCwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgVGltZVN0YW1wTG93LAotCQkJICAgdTggUnNzaTAsCi0JCQkgICB1OCBSc3NpMSwKLQkJCSAgIHU4IFJzc2kyLAotCQkJICAgdW5zaWduZWQgbG9uZyBNc2dMZW4sIHZvaWQgKk1zZywgdTggU2lnbmFsKTsKLQotQk9PTEVBTiBNbG1lRGVxdWV1ZShzdHJ1Y3QgcnRfbWxtZV9xdWV1ZSAqUXVldWUsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKipFbGVtKTsKLQotdm9pZCBNbG1lUmVzdGFydFN0YXRlTWFjaGluZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi1CT09MRUFOIE1sbWVRdWV1ZUVtcHR5KHN0cnVjdCBydF9tbG1lX3F1ZXVlICpRdWV1ZSk7Ci0KLUJPT0xFQU4gTWxtZVF1ZXVlRnVsbChzdHJ1Y3QgcnRfbWxtZV9xdWV1ZSAqUXVldWUpOwotCi1CT09MRUFOIE1zZ1R5cGVTdWJzdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgICAgc3RydWN0IHJ0X2ZyYW1lXzgwMl8xMSAqcEZyYW1lLAotCQkgICAgIGludCAqTWFjaGluZSwgaW50ICpNc2dUeXBlKTsKLQotdm9pZCBTdGF0ZU1hY2hpbmVJbml0KHN0cnVjdCBydF9zdGF0ZV9tYWNoaW5lICpTbSwKLQkJICAgICAgSU4gU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10sCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgU3ROciwKLQkJICAgICAgdW5zaWduZWQgbG9uZyBNc2dOciwKLQkJICAgICAgSU4gU1RBVEVfTUFDSElORV9GVU5DIERlZkZ1bmMsCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgSW5pdFN0YXRlLCB1bnNpZ25lZCBsb25nIEJhc2UpOwotCi12b2lkIFN0YXRlTWFjaGluZVNldEFjdGlvbihzdHJ1Y3QgcnRfc3RhdGVfbWFjaGluZSAqUywKLQkJCSAgIHVuc2lnbmVkIGxvbmcgU3QsIHVuc2lnbmVkIGxvbmcgTXNnLCBJTiBTVEFURV9NQUNISU5FX0ZVTkMgRik7Ci0KLXZvaWQgU3RhdGVNYWNoaW5lUGVyZm9ybUFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgICAgc3RydWN0IHJ0X3N0YXRlX21hY2hpbmUgKlMsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pOwotCi12b2lkIERyb3Aoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKTsKLQotdm9pZCBBc3NvY1N0YXRlTWFjaGluZUluaXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgc3RydWN0IHJ0X3N0YXRlX21hY2hpbmUgKlNtLAotCQkJICAgT1VUIFNUQVRFX01BQ0hJTkVfRlVOQyBUcmFuc1tdKTsKLQotdm9pZCBSZWFzc29jVGltZW91dCh2b2lkICpTeXN0ZW1TcGVjaWZpYzEsCi0JCSAgICB2b2lkICpGdW5jdGlvbkNvbnRleHQsCi0JCSAgICB2b2lkICpTeXN0ZW1TcGVjaWZpYzIsIHZvaWQgKlN5c3RlbVNwZWNpZmljMyk7Ci0KLXZvaWQgQXNzb2NUaW1lb3V0KHZvaWQgKlN5c3RlbVNwZWNpZmljMSwKLQkJICB2b2lkICpGdW5jdGlvbkNvbnRleHQsCi0JCSAgdm9pZCAqU3lzdGVtU3BlY2lmaWMyLCB2b2lkICpTeXN0ZW1TcGVjaWZpYzMpOwotCi12b2lkIERpc2Fzc29jVGltZW91dCh2b2lkICpTeXN0ZW1TcGVjaWZpYzEsCi0JCSAgICAgdm9pZCAqRnVuY3Rpb25Db250ZXh0LAotCQkgICAgIHZvaWQgKlN5c3RlbVNwZWNpZmljMiwgdm9pZCAqU3lzdGVtU3BlY2lmaWMzKTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIE1sbWVBc3NvY1JlcUFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pOwotCi12b2lkIE1sbWVSZWFzc29jUmVxQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSk7Ci0KLXZvaWQgTWxtZURpc2Fzc29jUmVxQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSk7Ci0KLXZvaWQgUGVlckFzc29jUnNwQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSk7Ci0KLXZvaWQgUGVlclJlYXNzb2NSc3BBY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKTsKLQotdm9pZCBQZWVyRGlzYXNzb2NBY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKTsKLQotdm9pZCBEaXNhc3NvY1RpbWVvdXRBY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKTsKLQotdm9pZCBBc3NvY1RpbWVvdXRBY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKTsKLQotdm9pZCBSZWFzc29jVGltZW91dEFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pOwotCi12b2lkIENsczNlcnJBY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1OCAqcEFkZHIpOwotCi12b2lkIEludmFsaWRTdGF0ZVdoZW5Bc3NvYyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pOwotCi12b2lkIEludmFsaWRTdGF0ZVdoZW5SZWFzc29jKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSk7Ci0KLXZvaWQgSW52YWxpZFN0YXRlV2hlbkRpc2Fzc29jaWF0ZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJICBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKTsKLQotI2lmZGVmIFJUTVBfTUFDX1VTQgotdm9pZCBNbG1lQ250bENvbmZpcm0oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1bnNpZ25lZCBsb25nIE1zZ1R5cGUsIHUxNiBNc2cpOwotI2VuZGlmIC8qIFJUTVBfTUFDX1VTQiAvLyAqLwotCi12b2lkIENvbXBvc2VQc1BvbGwoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotdm9pZCBDb21wb3NlTnVsbEZyYW1lKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLXZvaWQgQXNzb2NQb3N0UHJvYyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgIHU4ICpwQWRkcjIsCi0JCSAgIHUxNiBDYXBhYmlsaXR5SW5mbywKLQkJICAgdTE2IEFpZCwKLQkJICAgdTggU3VwUmF0ZVtdLAotCQkgICB1OCBTdXBSYXRlTGVuLAotCQkgICB1OCBFeHRSYXRlW10sCi0JCSAgIHU4IEV4dFJhdGVMZW4sCi0JCSAgIHN0cnVjdCBydF9lZGNhX3Bhcm0gKnBFZGNhUGFybSwKLQkJICAgc3RydWN0IHJ0X2h0X2NhcGFiaWxpdHlfaWUgKnBIdENhcGFiaWxpdHksCi0JCSAgIHU4IEh0Q2FwYWJpbGl0eUxlbiwgc3RydWN0IHJ0X2FkZF9odF9pbmZvX2llICpwQWRkSHRJbmZvKTsKLQotdm9pZCBBdXRoU3RhdGVNYWNoaW5lSW5pdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgIHN0cnVjdCBydF9zdGF0ZV9tYWNoaW5lICpzbSwgT1VUIFNUQVRFX01BQ0hJTkVfRlVOQyBUcmFuc1tdKTsKLQotdm9pZCBBdXRoVGltZW91dCh2b2lkICpTeXN0ZW1TcGVjaWZpYzEsCi0JCSB2b2lkICpGdW5jdGlvbkNvbnRleHQsCi0JCSB2b2lkICpTeXN0ZW1TcGVjaWZpYzIsIHZvaWQgKlN5c3RlbVNwZWNpZmljMyk7Ci0KLXZvaWQgTWxtZUF1dGhSZXFBY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKTsKLQotdm9pZCBQZWVyQXV0aFJzcEF0U2VxMkFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pOwotCi12b2lkIFBlZXJBdXRoUnNwQXRTZXE0QWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSk7Ci0KLXZvaWQgQXV0aFRpbWVvdXRBY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKTsKLQotdm9pZCBDbHMyZXJyQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggKnBBZGRyKTsKLQotdm9pZCBNbG1lRGVhdXRoUmVxQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSk7Ci0KLXZvaWQgSW52YWxpZFN0YXRlV2hlbkF1dGgoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKTsKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQotdm9pZCBBdXRoUnNwU3RhdGVNYWNoaW5lSW5pdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgIHN0cnVjdCBydF9zdGF0ZV9tYWNoaW5lICpTbSwKLQkJCSAgICAgSU4gU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pOwotCi12b2lkIFBlZXJEZWF1dGhBY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKTsKLQotdm9pZCBQZWVyQXV0aFNpbXBsZVJzcEdlbkFuZFNlbmQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCSBzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSAqcEhkcjgwMjExLAotCQkJCSB1MTYgQWxnLAotCQkJCSB1MTYgU2VxLAotCQkJCSB1MTYgUmVhc29uLCB1MTYgU3RhdHVzKTsKLQotLyogKi8KLS8qIFByaXZhdGUgcm91dGluZXMgaW4gZGxzLmMgKi8KLS8qICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi12b2lkIFN5bmNTdGF0ZU1hY2hpbmVJbml0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgc3RydWN0IHJ0X3N0YXRlX21hY2hpbmUgKlNtLAotCQkJICBPVVQgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pOwotCi12b2lkIEJlYWNvblRpbWVvdXQodm9pZCAqU3lzdGVtU3BlY2lmaWMxLAotCQkgICB2b2lkICpGdW5jdGlvbkNvbnRleHQsCi0JCSAgIHZvaWQgKlN5c3RlbVNwZWNpZmljMiwgdm9pZCAqU3lzdGVtU3BlY2lmaWMzKTsKLQotdm9pZCBTY2FuVGltZW91dCh2b2lkICpTeXN0ZW1TcGVjaWZpYzEsCi0JCSB2b2lkICpGdW5jdGlvbkNvbnRleHQsCi0JCSB2b2lkICpTeXN0ZW1TcGVjaWZpYzIsIHZvaWQgKlN5c3RlbVNwZWNpZmljMyk7Ci0KLXZvaWQgSW52YWxpZFN0YXRlV2hlblNjYW4oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKTsKLQotdm9pZCBJbnZhbGlkU3RhdGVXaGVuSm9pbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pOwotCi12b2lkIEludmFsaWRTdGF0ZVdoZW5TdGFydChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pOwotCi12b2lkIEVucXVldWVQcm9iZVJlcXVlc3Qoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotQk9PTEVBTiBTY2FuUnVubmluZyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi12b2lkIE1sbWVDbnRsSW5pdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgc3RydWN0IHJ0X3N0YXRlX21hY2hpbmUgKlMsIE9VVCBTVEFURV9NQUNISU5FX0ZVTkMgVHJhbnNbXSk7Ci0KLXZvaWQgTWxtZUNudGxNYWNoaW5lUGVyZm9ybUFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJICBzdHJ1Y3QgcnRfc3RhdGVfbWFjaGluZSAqUywKLQkJCQkgIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pOwotCi12b2lkIENudGxJZGxlUHJvYyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pOwotCi12b2lkIENudGxPaWRTY2FuUHJvYyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pOwotCi12b2lkIENudGxPaWRTc2lkUHJvYyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pOwotCi12b2lkIENudGxPaWRSVEJzc2lkUHJvYyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pOwotCi12b2lkIENudGxNbG1lUm9hbWluZ1Byb2Moc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKTsKLQotdm9pZCBDbnRsV2FpdERpc2Fzc29jUHJvYyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pOwotCi12b2lkIENudGxXYWl0Sm9pblByb2Moc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKTsKLQotdm9pZCBDbnRsV2FpdFJlYXNzb2NQcm9jKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSk7Ci0KLXZvaWQgQ250bFdhaXRTdGFydFByb2Moc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKTsKLQotdm9pZCBDbnRsV2FpdEF1dGhQcm9jKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSk7Ci0KLXZvaWQgQ250bFdhaXRBdXRoUHJvYzIoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKTsKLQotdm9pZCBDbnRsV2FpdEFzc29jUHJvYyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pOwotCi12b2lkIExpbmtVcChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHU4IEJzc1R5cGUpOwotCi12b2lkIExpbmtEb3duKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgSU4gQk9PTEVBTiBJc1JlcUZyb21BUCk7Ci0KLXZvaWQgSXRlcmF0ZU9uQnNzVGFiKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLXZvaWQgSXRlcmF0ZU9uQnNzVGFiMihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi12b2lkIEpvaW5QYXJtRmlsbChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgc3RydWN0IHJ0X21sbWVfam9pbl9yZXEgKkpvaW5SZXEsIHVuc2lnbmVkIGxvbmcgQnNzSWR4KTsKLQotdm9pZCBBc3NvY1Bhcm1GaWxsKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgc3RydWN0IHJ0X21sbWVfYXNzb2NfcmVxICpBc3NvY1JlcSwKLQkJICAgdTggKnBBZGRyLAotCQkgICB1MTYgQ2FwYWJpbGl0eUluZm8sCi0JCSAgIHVuc2lnbmVkIGxvbmcgVGltZW91dCwgdTE2IExpc3RlbkludHYpOwotCi12b2lkIFNjYW5QYXJtRmlsbChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgc3RydWN0IHJ0X21sbWVfc2Nhbl9yZXEgKlNjYW5SZXEsCi0JCSAgY2hhciBTc2lkW10sCi0JCSAgdTggU3NpZExlbiwgdTggQnNzVHlwZSwgdTggU2NhblR5cGUpOwotCi12b2lkIERpc2Fzc29jUGFybUZpbGwoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICAgICBzdHJ1Y3QgcnRfbWxtZV9kaXNhc3NvY19yZXEgKkRpc2Fzc29jUmVxLAotCQkgICAgICB1OCAqcEFkZHIsIHUxNiBSZWFzb24pOwotCi12b2lkIFN0YXJ0UGFybUZpbGwoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICBzdHJ1Y3QgcnRfbWxtZV9zdGFydF9yZXEgKlN0YXJ0UmVxLAotCQkgICBjaGFyIFNzaWRbXSwgdTggU3NpZExlbik7Ci0KLXZvaWQgQXV0aFBhcm1GaWxsKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICBzdHJ1Y3QgcnRfbWxtZV9hdXRoX3JlcSAqQXV0aFJlcSwKLQkJICB1OCAqcEFkZHIsIHUxNiBBbGcpOwotCi12b2lkIEVucXVldWVQc1BvbGwoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotdm9pZCBFbnF1ZXVlQmVhY29uRnJhbWUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotdm9pZCBNbG1lSm9pblJlcUFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pOwotCi12b2lkIE1sbWVTY2FuUmVxQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSk7Ci0KLXZvaWQgTWxtZVN0YXJ0UmVxQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSk7Ci0KLXZvaWQgU2NhblRpbWVvdXRBY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKTsKLQotdm9pZCBCZWFjb25UaW1lb3V0QXRKb2luQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSk7Ci0KLXZvaWQgUGVlckJlYWNvbkF0U2NhbkFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pOwotCi12b2lkIFBlZXJCZWFjb25BdEpvaW5BY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKTsKLQotdm9pZCBQZWVyQmVhY29uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSk7Ci0KLXZvaWQgUGVlclByb2JlUmVxQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSk7Ci0KLXZvaWQgU2Nhbk5leHRDaGFubmVsKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLXVuc2lnbmVkIGxvbmcgTWFrZUlic3NCZWFjb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotQk9PTEVBTiBNbG1lU2NhblJlcVNhbml0eShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgIHZvaWQgKk1zZywKLQkJCSAgdW5zaWduZWQgbG9uZyBNc2dMZW4sCi0JCQkgIHU4ICpCc3NUeXBlLAotCQkJICBjaGFyIHNzaWRbXSwKLQkJCSAgdTggKlNzaWRMZW4sIHU4ICpTY2FuVHlwZSk7Ci0KLUJPT0xFQU4gUGVlckJlYWNvbkFuZFByb2JlUnNwU2FuaXR5KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkgICAgdm9pZCAqTXNnLAotCQkJCSAgICB1bnNpZ25lZCBsb25nIE1zZ0xlbiwKLQkJCQkgICAgdTggTXNnQ2hhbm5lbCwKLQkJCQkgICAgdTggKnBBZGRyMiwKLQkJCQkgICAgdTggKnBCc3NpZCwKLQkJCQkgICAgY2hhciBTc2lkW10sCi0JCQkJICAgIHU4ICpwU3NpZExlbiwKLQkJCQkgICAgdTggKnBCc3NUeXBlLAotCQkJCSAgICB1MTYgKnBCZWFjb25QZXJpb2QsCi0JCQkJICAgIHU4ICpwQ2hhbm5lbCwKLQkJCQkgICAgdTggKnBOZXdDaGFubmVsLAotCQkJCSAgICBPVVQgTEFSR0VfSU5URUdFUiAqcFRpbWVzdGFtcCwKLQkJCQkgICAgc3RydWN0IHJ0X2NmX3Bhcm0gKnBDZlBhcm0sCi0JCQkJICAgIHUxNiAqcEF0aW1XaW4sCi0JCQkJICAgIHUxNiAqcENhcGFiaWxpdHlJbmZvLAotCQkJCSAgICB1OCAqcEVycCwKLQkJCQkgICAgdTggKnBEdGltQ291bnQsCi0JCQkJICAgIHU4ICpwRHRpbVBlcmlvZCwKLQkJCQkgICAgdTggKnBCY2FzdEZsYWcsCi0JCQkJICAgIHU4ICpwTWVzc2FnZVRvTWUsCi0JCQkJICAgIHU4IFN1cFJhdGVbXSwKLQkJCQkgICAgdTggKnBTdXBSYXRlTGVuLAotCQkJCSAgICB1OCBFeHRSYXRlW10sCi0JCQkJICAgIHU4ICpwRXh0UmF0ZUxlbiwKLQkJCQkgICAgdTggKnBDa2lwRmxhZywKLQkJCQkgICAgdTggKnBBaXJvbmV0Q2VsbFBvd2VyTGltaXQsCi0JCQkJICAgIHN0cnVjdCBydF9lZGNhX3Bhcm0gKnBFZGNhUGFybSwKLQkJCQkgICAgc3RydWN0IHJ0X3Fic3NfbG9hZF9wYXJtICpwUWJzc0xvYWQsCi0JCQkJICAgIHN0cnVjdCBydF9xb3NfY2FwYWJpbGl0eV9wYXJtICpwUW9zQ2FwYWJpbGl0eSwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyAqcFJhbGlua0llLAotCQkJCSAgICB1OCAqcEh0Q2FwYWJpbGl0eUxlbiwKLQkJCQkgICAgdTggKnBQcmVOSHRDYXBhYmlsaXR5TGVuLAotCQkJCSAgICBzdHJ1Y3QgcnRfaHRfY2FwYWJpbGl0eV9pZSAqcEh0Q2FwYWJpbGl0eSwKLQkJCQkgICAgdTggKkFkZEh0SW5mb0xlbiwKLQkJCQkgICAgc3RydWN0IHJ0X2FkZF9odF9pbmZvX2llICpBZGRIdEluZm8sCi0JCQkJICAgIHU4ICpOZXdFeHRDaGFubmVsLAotCQkJCSAgICB1MTYgKkxlbmd0aFZJRSwKLQkJCQkgICAgc3RydWN0IHJ0X25kaXNfODAyXzExX3ZhcmlhYmxlX2llcyAqcFZJRSk7Ci0KLUJPT0xFQU4gUGVlckFkZEJBUmVxQWN0aW9uU2FuaXR5KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkgdm9pZCAqcE1zZywKLQkJCQkgdW5zaWduZWQgbG9uZyBNc2dMZW4sIHU4ICpwQWRkcjIpOwotCi1CT09MRUFOIFBlZXJBZGRCQVJzcEFjdGlvblNhbml0eShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJIHZvaWQgKnBNc2csIHVuc2lnbmVkIGxvbmcgTXNnTGVuKTsKLQotQk9PTEVBTiBQZWVyRGVsQkFBY3Rpb25TYW5pdHkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgICAgdTggV2NpZCwgdm9pZCAqcE1zZywgdW5zaWduZWQgbG9uZyBNc2dMZW4pOwotCi1CT09MRUFOIE1sbWVBc3NvY1JlcVNhbml0eShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICB2b2lkICpNc2csCi0JCQkgICB1bnNpZ25lZCBsb25nIE1zZ0xlbiwKLQkJCSAgIHU4ICpwQXBBZGRyLAotCQkJICAgdTE2ICpDYXBhYmlsaXR5SW5mbywKLQkJCSAgIHVuc2lnbmVkIGxvbmcgKlRpbWVvdXQsIHUxNiAqTGlzdGVuSW50dik7Ci0KLUJPT0xFQU4gTWxtZUF1dGhSZXFTYW5pdHkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICB2b2lkICpNc2csCi0JCQkgIHVuc2lnbmVkIGxvbmcgTXNnTGVuLAotCQkJICB1OCAqcEFkZHIsCi0JCQkgIHVuc2lnbmVkIGxvbmcgKlRpbWVvdXQsIHUxNiAqQWxnKTsKLQotQk9PTEVBTiBNbG1lU3RhcnRSZXFTYW5pdHkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgdm9pZCAqTXNnLAotCQkJICAgdW5zaWduZWQgbG9uZyBNc2dMZW4sCi0JCQkgICBjaGFyIFNzaWRbXSwgdTggKlNzaWRsZW4pOwotCi1CT09MRUFOIFBlZXJBdXRoU2FuaXR5KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgICAgIHZvaWQgKk1zZywKLQkJICAgICAgIHVuc2lnbmVkIGxvbmcgTXNnTGVuLAotCQkgICAgICAgdTggKnBBZGRyLAotCQkgICAgICAgdTE2ICpBbGcsCi0JCSAgICAgICB1MTYgKlNlcSwKLQkJICAgICAgIHUxNiAqU3RhdHVzLCBjaGFyIENobGdUZXh0W10pOwotCi1CT09MRUFOIFBlZXJBc3NvY1JzcFNhbml0eShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHZvaWQgKnBNc2csIHVuc2lnbmVkIGxvbmcgTXNnTGVuLCB1OCAqcEFkZHIyLCB1MTYgKnBDYXBhYmlsaXR5SW5mbywgdTE2ICpwU3RhdHVzLCB1MTYgKnBBaWQsIHU4IFN1cFJhdGVbXSwgdTggKnBTdXBSYXRlTGVuLCB1OCBFeHRSYXRlW10sIHU4ICpwRXh0UmF0ZUxlbiwgc3RydWN0IHJ0X2h0X2NhcGFiaWxpdHlfaWUgKnBIdENhcGFiaWxpdHksIHN0cnVjdCBydF9hZGRfaHRfaW5mb19pZSAqcEFkZEh0SW5mbywJLyogQVAgbWlnaHQgdXNlIHRoaXMgYWRkaXRpb25hbCBodCBpbmZvIElFICovCi0JCQkgICB1OCAqcEh0Q2FwYWJpbGl0eUxlbiwKLQkJCSAgIHU4ICpwQWRkSHRJbmZvTGVuLAotCQkJICAgdTggKnBOZXdFeHRDaGFubmVsT2Zmc2V0LAotCQkJICAgc3RydWN0IHJ0X2VkY2FfcGFybSAqcEVkY2FQYXJtLCB1OCAqcENraXBGbGFnKTsKLQotQk9PTEVBTiBQZWVyRGlzYXNzb2NTYW5pdHkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgdm9pZCAqTXNnLAotCQkJICAgdW5zaWduZWQgbG9uZyBNc2dMZW4sCi0JCQkgICB1OCAqcEFkZHIyLCB1MTYgKlJlYXNvbik7Ci0KLUJPT0xFQU4gUGVlcldwYU1lc3NhZ2VTYW5pdHkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgICBzdHJ1Y3QgcnRfZWFwb2xfcGFja2V0ICpwTXNnLAotCQkJICAgICB1bnNpZ25lZCBsb25nIE1zZ0xlbiwKLQkJCSAgICAgdTggTXNnVHlwZSwgc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcEVudHJ5KTsKLQotQk9PTEVBTiBQZWVyRGVhdXRoU2FuaXR5KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSB2b2lkICpNc2csCi0JCQkgdW5zaWduZWQgbG9uZyBNc2dMZW4sCi0JCQkgdTggKnBBZGRyMiwgdTE2ICpSZWFzb24pOwotCi1CT09MRUFOIFBlZXJQcm9iZVJlcVNhbml0eShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICB2b2lkICpNc2csCi0JCQkgICB1bnNpZ25lZCBsb25nIE1zZ0xlbiwKLQkJCSAgIHU4ICpwQWRkcjIsCi0JCQkgICBjaGFyIFNzaWRbXSwgdTggKnBTc2lkTGVuKTsKLQotQk9PTEVBTiBHZXRUaW1CaXQoY2hhciAqUHRyLAotCQkgIHUxNiBBaWQsCi0JCSAgdTggKlRpbUxlbiwKLQkJICB1OCAqQmNhc3RGbGFnLAotCQkgIHU4ICpEdGltQ291bnQsCi0JCSAgdTggKkR0aW1QZXJpb2QsIHU4ICpNZXNzYWdlVG9NZSk7Ci0KLXU4IENoYW5uZWxTYW5pdHkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1OCBjaGFubmVsKTsKLQotTkRJU184MDJfMTFfTkVUV09SS19UWVBFIE5ldHdvcmtUeXBlSW5Vc2VTYW5pdHkoc3RydWN0IHJ0X2Jzc19lbnRyeSAqcEJzcyk7Ci0KLUJPT0xFQU4gTWxtZURlbEJBUmVxU2FuaXR5KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgIHZvaWQgKk1zZywgdW5zaWduZWQgbG9uZyBNc2dMZW4pOwotCi1CT09MRUFOIE1sbWVBZGRCQVJlcVNhbml0eShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICB2b2lkICpNc2csIHVuc2lnbmVkIGxvbmcgTXNnTGVuLCB1OCAqcEFkZHIyKTsKLQotdW5zaWduZWQgbG9uZyBNYWtlT3V0Z29pbmdGcmFtZSh1OCAqQnVmZmVyLCB1bnNpZ25lZCBsb25nICpMZW5ndGgsIC4uLik7Ci0KLXZvaWQgTGZzckluaXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1bnNpZ25lZCBsb25nIFNlZWQpOwotCi11OCBSYW5kb21CeXRlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLXZvaWQgQXNpY1VwZGF0ZUF1dG9GYWxsQmFja1RhYmxlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggKnBUeFJhdGUpOwotCi12b2lkIE1sbWVQZXJpb2RpY0V4ZWModm9pZCAqU3lzdGVtU3BlY2lmaWMxLAotCQkgICAgICB2b2lkICpGdW5jdGlvbkNvbnRleHQsCi0JCSAgICAgIHZvaWQgKlN5c3RlbVNwZWNpZmljMiwgdm9pZCAqU3lzdGVtU3BlY2lmaWMzKTsKLQotdm9pZCBMaW5rRG93bkV4ZWModm9pZCAqU3lzdGVtU3BlY2lmaWMxLAotCQkgIHZvaWQgKkZ1bmN0aW9uQ29udGV4dCwKLQkJICB2b2lkICpTeXN0ZW1TcGVjaWZpYzIsIHZvaWQgKlN5c3RlbVNwZWNpZmljMyk7Ci0KLXZvaWQgU1RBTWxtZVBlcmlvZGljRXhlYyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi12b2lkIE1sbWVBdXRvU2NhbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi12b2lkIE1sbWVBdXRvUmVjb25uZWN0TGFzdFNTSUQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotQk9PTEVBTiBNbG1lVmFsaWRhdGVTU0lEKHU4ICpwU3NpZCwgdTggU3NpZExlbik7Ci0KLXZvaWQgTWxtZUNoZWNrRm9yUm9hbWluZyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHVuc2lnbmVkIGxvbmcgTm93MzIpOwotCi1CT09MRUFOIE1sbWVDaGVja0ZvckZhc3RSb2FtaW5nKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLXZvaWQgTWxtZUR5bmFtaWNUeFJhdGVTd2l0Y2hpbmcoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotdm9pZCBNbG1lU2V0VHhSYXRlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcEVudHJ5LCBzdHJ1Y3QgcnRfcnRtcF90eF9yYXRlX3N3aXRjaCAqIHBUeFJhdGUpOwotCi12b2lkIE1sbWVTZWxlY3RUeFJhdGVUYWJsZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICBzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwRW50cnksCi0JCQkgICB1OCAqKnBwVGFibGUsCi0JCQkgICB1OCAqcFRhYmxlU2l6ZSwgdTggKnBJbml0VHhSYXRlSWR4KTsKLQotdm9pZCBNbG1lQ2FsY3VsYXRlQ2hhbm5lbFF1YWxpdHkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCSBzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwTWFjRW50cnksIHVuc2lnbmVkIGxvbmcgTm93KTsKLQotdm9pZCBNbG1lQ2hlY2tQc21DaGFuZ2Uoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1bnNpZ25lZCBsb25nIE5vdzMyKTsKLQotdm9pZCBNbG1lU2V0UHNtQml0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTE2IHBzbSk7Ci0KLXZvaWQgTWxtZVNldFR4UHJlYW1ibGUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1MTYgVHhQcmVhbWJsZSk7Ci0KLXZvaWQgVXBkYXRlQmFzaWNSYXRlQml0bWFwKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLXZvaWQgTWxtZVVwZGF0ZVR4UmF0ZXMoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICAgICAgSU4gQk9PTEVBTiBiTGlua1VwLCB1OCBhcGlkeCk7Ci0KLXZvaWQgTWxtZVVwZGF0ZUh0VHhSYXRlcyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHU4IGFwaWR4KTsKLQotdm9pZCBSVE1QQ2hlY2tSYXRlcyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgICBJTiB1OCBTdXBSYXRlW10sIElOIHU4ICpTdXBSYXRlTGVuKTsKLQotQk9PTEVBTiBSVE1QQ2hlY2tDaGFubmVsKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSB1OCBDZW50cmFsQ2hhbm5lbCwgdTggQ2hhbm5lbCk7Ci0KLUJPT0xFQU4gUlRNUENoZWNrSHQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICAgdTggV2NpZCwKLQkJICAgIHN0cnVjdCBydF9odF9jYXBhYmlsaXR5X2llICpwSHRDYXBhYmlsaXR5LAotCQkgICAgc3RydWN0IHJ0X2FkZF9odF9pbmZvX2llICpwQWRkSHRJbmZvKTsKLQotdm9pZCBTdGFRdWlja1Jlc3BvbmVGb3JSYXRlVXBFeGVjKHZvaWQgKlN5c3RlbVNwZWNpZmljMSwKLQkJCQkgIHZvaWQgKkZ1bmN0aW9uQ29udGV4dCwKLQkJCQkgIHZvaWQgKlN5c3RlbVNwZWNpZmljMiwKLQkJCQkgIHZvaWQgKlN5c3RlbVNwZWNpZmljMyk7Ci0KLXZvaWQgUlRNUFVwZGF0ZU1sbWVSYXRlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLWNoYXIgUlRNUE1heFJzc2koc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgY2hhciBSc3NpMCwgY2hhciBSc3NpMSwgY2hhciBSc3NpMik7Ci0KLSNpZmRlZiBSVDMweHgKLXZvaWQgQXNpY1NldFJ4QW50KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggQW50KTsKLQotdm9pZCBSVE1QRmlsdGVyQ2FsaWJyYXRpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotI2lmZGVmIFJUTVBfRUZVU0VfU1VQUE9SVAotLyoyMDA4LzA5LzExOktIIGFkZCB0byBzdXBwb3J0IGVmdXNlPC0tICovCi1pbnQgc2V0X2VGdXNlR2V0RnJlZUJsb2NrQ291bnRfUHJvYyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIGNoYXIgKmFyZyk7Ci0KLWludCBzZXRfZUZ1c2VkdW1wX1Byb2Moc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBjaGFyICphcmcpOwotCi12b2lkIGVGdXNlUGh5c2ljYWxSZWFkUmVnaXN0ZXJzKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQl1MTYgT2Zmc2V0LAotCQkJCXUxNiBMZW5ndGgsIHUxNiAqcERhdGEpOwotCi1pbnQgUnRtcEVmdXNlU3VwcG9ydENoZWNrKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLXZvaWQgZUZ1c2VHZXRGcmVlQmxvY2tDb3VudChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHUzMiAqRWZ1c2VGcmVlQmxvY2spOwotCi1pbnQgZUZ1c2VfaW5pdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotLyoyMDA4LzA5LzExOktIIGFkZCB0byBzdXBwb3J0IGVmdXNlLS0+ICovCi0jZW5kaWYgLyogUlRNUF9FRlVTRV9TVVBQT1JUIC8vICovCi0KLS8qIGFkZCBieSBqb2hubGksIFJGIHBvd2VyIHNlcXVlbmNlIHNldHVwICovCi12b2lkIFJUMzB4eExvYWRSRk5vcm1hbE1vZGVTZXR1cChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi12b2lkIFJUMzB4eExvYWRSRlNsZWVwTW9kZVNldHVwKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLXZvaWQgUlQzMHh4UmV2ZXJzZVJGU2xlZXBNb2RlU2V0dXAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLS8qIGVuZCBqb2hubGkgKi8KLQotI2lmZGVmIFJUMzA3MAotdm9pZCBOSUNJbml0UlQzMDcwUkZSZWdpc3RlcnMoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLSNlbmRpZiAvKiBSVDMwNzAgLy8gKi8KLSNpZmRlZiBSVDMwOTAKLXZvaWQgTklDSW5pdFJUMzA5MFJGUmVnaXN0ZXJzKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0jZW5kaWYgLyogUlQzMDkwIC8vICovCi0KLXZvaWQgUlQzMHh4SGFsdEFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi12b2lkIFJUMzB4eFNldFJ4QW50KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggQW50KTsKLSNlbmRpZiAvKiBSVDMweHggLy8gKi8KLQotdm9pZCBBc2ljRXZhbHVhdGVSeEFudChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi12b2lkIEFzaWNSeEFudEV2YWxUaW1lb3V0KHZvaWQgKlN5c3RlbVNwZWNpZmljMSwKLQkJCSAgdm9pZCAqRnVuY3Rpb25Db250ZXh0LAotCQkJICB2b2lkICpTeXN0ZW1TcGVjaWZpYzIsIHZvaWQgKlN5c3RlbVNwZWNpZmljMyk7Ci0KLXZvaWQgQVBTRFBlcmlvZGljRXhlYyh2b2lkICpTeXN0ZW1TcGVjaWZpYzEsCi0JCSAgICAgIHZvaWQgKkZ1bmN0aW9uQ29udGV4dCwKLQkJICAgICAgdm9pZCAqU3lzdGVtU3BlY2lmaWMyLCB2b2lkICpTeXN0ZW1TcGVjaWZpYzMpOwotCi1CT09MRUFOIFJUTVBDaGVja0VudHJ5RW5hYmxlQXV0b1JhdGVTd2l0Y2goc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCQkgICBzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwRW50cnkpOwotCi11OCBSVE1QU3RhRml4ZWRUeE1vZGUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwRW50cnkpOwotCi12b2lkIFJUTVBVcGRhdGVMZWdhY3lUeFNldHRpbmcodTggZml4ZWRfdHhfbW9kZSwgc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcEVudHJ5KTsKLQotQk9PTEVBTiBSVE1QQXV0b1JhdGVTd2l0Y2hDaGVjayhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi1pbnQgTWxtZUluaXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotdm9pZCBNbG1lSGFuZGxlcihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi12b2lkIE1sbWVIYWx0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLXZvaWQgTWxtZVJlc2V0UmFsaW5rQ291bnRlcnMoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotdm9pZCBCdWlsZENoYW5uZWxMaXN0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLXU4IEZpcnN0Q2hhbm5lbChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi11OCBOZXh0Q2hhbm5lbChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHU4IGNoYW5uZWwpOwotCi12b2lkIENoYW5nZVRvQ2VsbFBvd2VyTGltaXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgIHU4IEFpcm9uZXRDZWxsUG93ZXJMaW1pdCk7Ci0KLS8qICovCi0vKiBQcm90b3R5cGVzIG9mIGZ1bmN0aW9uIGRlZmluaXRpb24gaW4gcnRtcF90a2lwLmMgKi8KLS8qICovCi12b2lkIFJUTVBJbml0VGtpcEVuZ2luZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQl1OCAqcFRLZXksCi0JCQl1OCBLZXlJZCwKLQkJCXU4ICpwVEEsCi0JCQl1OCAqcE1JQ0tleSwKLQkJCXU4ICpwVFNDLCB1bnNpZ25lZCBsb25nICpwSVYxNiwgdW5zaWduZWQgbG9uZyAqcElWMzIpOwotCi12b2lkIFJUTVBJbml0TUlDRW5naW5lKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgICAgIHU4ICpwS2V5LAotCQkgICAgICAgdTggKnBEQSwKLQkJICAgICAgIHU4ICpwU0EsIHU4IFVzZXJQcmlvcml0eSwgdTggKnBNSUNLZXkpOwotCi1CT09MRUFOIFJUTVBUa2lwQ29tcGFyZU1JQ1ZhbHVlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQl1OCAqcFNyYywKLQkJCQl1OCAqcERBLAotCQkJCXU4ICpwU0EsCi0JCQkJdTggKnBNSUNLZXksCi0JCQkJdTggVXNlclByaW9yaXR5LCB1MzIgTGVuKTsKLQotdm9pZCBSVE1QQ2FsY3VsYXRlTUlDVmFsdWUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgdm9pZCAqcFBhY2tldCwKLQkJCSAgIHU4ICpwRW5jYXAsCi0JCQkgICBzdHJ1Y3QgcnRfY2lwaGVyX2tleSAqcEtleSwgdTggYXBpZHgpOwotCi12b2lkIFJUTVBUa2lwQXBwZW5kQnl0ZShzdHJ1Y3QgcnRfdGtpcF9rZXlfaW5mbyAqcFRraXAsIHU4IHVDaGFyKTsKLQotdm9pZCBSVE1QVGtpcEFwcGVuZChzdHJ1Y3QgcnRfdGtpcF9rZXlfaW5mbyAqcFRraXAsIHU4ICpwU3JjLCB1MzIgbkJ5dGVzKTsKLQotdm9pZCBSVE1QVGtpcEdldE1JQyhzdHJ1Y3QgcnRfdGtpcF9rZXlfaW5mbyAqcFRraXApOwotCi1CT09MRUFOIFJUTVBTb2Z0RGVjcnlwdFRLSVAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgIHU4ICpwRGF0YSwKLQkJCSAgICB1bnNpZ25lZCBsb25nIERhdGFCeXRlQ250LAotCQkJICAgIHU4IFVzZXJQcmlvcml0eSwgc3RydWN0IHJ0X2NpcGhlcl9rZXkgKnBXcGFLZXkpOwotCi1CT09MRUFOIFJUTVBTb2Z0RGVjcnlwdEFFUyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICB1OCAqcERhdGEsCi0JCQkgICB1bnNpZ25lZCBsb25nIERhdGFCeXRlQ250LCBzdHJ1Y3QgcnRfY2lwaGVyX2tleSAqcFdwYUtleSk7Ci0KLS8qICovCi0vKiBQcm90b3R5cGVzIG9mIGZ1bmN0aW9uIGRlZmluaXRpb24gaW4gY21tX2luZm8uYyAqLwotLyogKi8KLWludCBSVF9DZmdTZXRDb3VudHJ5UmVnaW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgY2hhciAqYXJnLCBpbnQgYmFuZCk7Ci0KLWludCBSVF9DZmdTZXRXaXJlbGVzc01vZGUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBjaGFyICphcmcpOwotCi1pbnQgUlRfQ2ZnU2V0U2hvcnRTbG90KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgY2hhciAqYXJnKTsKLQotaW50IFJUX0NmZ1NldFdlcEtleShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgICBjaGFyICprZXlTdHJpbmcsCi0JCSAgICBzdHJ1Y3QgcnRfY2lwaGVyX2tleSAqcFNoYXJlZEtleSwgaW50IGtleUlkeCk7Ci0KLWludCBSVF9DZmdTZXRXUEFQU0tLZXkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICAgICAgY2hhciAqa2V5U3RyaW5nLAotCQkgICAgICAgdTggKnBIYXNoU3RyLAotCQkgICAgICAgaW50IGhhc2hTdHJMZW4sIHU4ICpwUE1LQnVmKTsKLQotLyogKi8KLS8qIFByb3RvdHlwZXMgb2YgZnVuY3Rpb24gZGVmaW5pdGlvbiBpbiBjbW1faW5mby5jICovCi0vKiAqLwotdm9pZCBSVE1QV1BBUmVtb3ZlQWxsS2V5cyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi12b2lkIFJUTVBTZXRQaHlNb2RlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdW5zaWduZWQgbG9uZyBwaHltb2RlKTsKLQotdm9pZCBSVE1QVXBkYXRlSFRJRShzdHJ1Y3QgcnRfaHRfY2FwYWJpbGl0eSAqcFJ0SHQsCi0JCSAgICB1OCAqcE1jc1NldCwKLQkJICAgIHN0cnVjdCBydF9odF9jYXBhYmlsaXR5X2llICpwSHRDYXBhYmlsaXR5LAotCQkgICAgc3RydWN0IHJ0X2FkZF9odF9pbmZvX2llICpwQWRkSHRJbmZvKTsKLQotdm9pZCBSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICAgICB1OCBCc3NJZHgsCi0JCQkgICAgICAgdTggS2V5SWR4LAotCQkJICAgICAgIHU4IENpcGhlckFsZywgc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcEVudHJ5KTsKLQotY2hhciAqR2V0RW5jcnlwdFR5cGUoY2hhciBlbmMpOwotCi1jaGFyICpHZXRBdXRoTW9kZShjaGFyIGF1dGgpOwotCi12b2lkIFJUTVBTZXRIVChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9vaWRfc2V0X2h0X3BoeW1vZGUgKnBIVFBoeU1vZGUpOwotCi12b2lkIFJUTVBTZXRJbmRpdmlkdWFsSFQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1OCBhcGlkeCk7Ci0KLXZvaWQgUlRNUFNlbmRXaXJlbGVzc0V2ZW50KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgIHUxNiBFdmVudF9mbGFnLAotCQkJICAgdTggKnBBZGRyLCB1OCBCc3NJZHgsIGNoYXIgUnNzaSk7Ci0KLWNoYXIgQ29udmVydFRvUnNzaShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIGNoYXIgUnNzaSwgdTggUnNzaU51bWJlcik7Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlGdW5jdGlvbiBwcm90b3R5cGUgaW4gY21tX3dwYS5jCi0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi12b2lkIFJUTVBUb1dpcmVsZXNzU3RhKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgICAgIHN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKnBFbnRyeSwKLQkJICAgICAgIHU4ICpwSGVhZGVyODAyXzMsCi0JCSAgICAgICB1MzIgSGRyTGVuLAotCQkgICAgICAgdTggKnBEYXRhLAotCQkgICAgICAgdTMyIERhdGFMZW4sIElOIEJPT0xFQU4gYkNsZWFyRnJhbWUpOwotCi12b2lkIFdwYURlcml2ZVBUSyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgdTggKlBNSywKLQkJICB1OCAqQU5vbmNlLAotCQkgIHU4ICpBQSwKLQkJICB1OCAqU05vbmNlLAotCQkgIHU4ICpTQSwgdTggKm91dHB1dCwgdTMyIGxlbik7Ci0KLXZvaWQgR2VuUmFuZG9tKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggKm1hY0FkZHIsIHU4ICpyYW5kb20pOwotCi1CT09MRUFOIFJUTVBDaGVja1dQQWZyYW1lKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcEVudHJ5LAotCQkJICB1OCAqcERhdGEsCi0JCQkgIHVuc2lnbmVkIGxvbmcgRGF0YUJ5dGVDb3VudCwgdTggRnJvbVdoaWNoQlNTSUQpOwotCi12b2lkIEFFU19HVEtfS0VZX1VOV1JBUCh1OCAqa2V5LAotCQkJdTggKnBsYWludGV4dCwKLQkJCXUzMiBjX2xlbiwgdTggKmNpcGhlcnRleHQpOwotCi1CT09MRUFOIFJUTVBQYXJzZUVhcG9sS2V5RGF0YShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgICB1OCAqcEtleURhdGEsCi0JCQkgICAgICB1OCBLZXlEYXRhTGVuLAotCQkJICAgICAgdTggR3JvdXBLZXlJbmRleCwKLQkJCSAgICAgIHU4IE1zZ1R5cGUsCi0JCQkgICAgICBJTiBCT09MRUFOIGJXUEEyLCBzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwRW50cnkpOwotCi12b2lkIENvbnN0cnVjdEVhcG9sTXNnKHN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKnBFbnRyeSwKLQkJICAgICAgIHU4IEdyb3VwS2V5V2VwU3RhdHVzLAotCQkgICAgICAgdTggTXNnVHlwZSwKLQkJICAgICAgIHU4IERlZmF1bHRLZXlJZHgsCi0JCSAgICAgICB1OCAqS2V5Tm9uY2UsCi0JCSAgICAgICB1OCAqVHhSU0MsCi0JCSAgICAgICB1OCAqR1RLLAotCQkgICAgICAgdTggKlJTTklFLAotCQkgICAgICAgdTggUlNOSUVfTGVuLCBzdHJ1Y3QgcnRfZWFwb2xfcGFja2V0ICpwTXNnKTsKLQotaW50IFJUTVBTb2Z0RGVjcnlwdEJyb2FkQ2FzdERhdGEoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCQkgc3RydWN0IHJ0X3J4X2JsayAqcFJ4QmxrLAotCQkJCQkgSU4gTkRJU184MDJfMTFfRU5DUllQVElPTl9TVEFUVVMKLQkJCQkJIEdyb3VwQ2lwaGVyLAotCQkJCQkgc3RydWN0IHJ0X2NpcGhlcl9rZXkgKnBTaGFyZF9rZXkpOwotCi12b2lkIFJUTVBNYWtlUlNOSUUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICB1MzIgQXV0aE1vZGUsIHUzMiBXZXBTdGF0dXMsIHU4IGFwaWR4KTsKLQotLyogKi8KLS8qIGZ1bmN0aW9uIHByb3RvdHlwZSBpbiBhcF93cGEuYyAqLwotLyogKi8KLXZvaWQgUlRNUEdldFR4VHNjRnJvbUFzaWMoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICB1OCBhcGlkeCwgdTggKnBUeFRzYyk7Ci0KLXZvaWQgQVBJbnN0YWxsUGFpcndpc2VLZXkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwRW50cnkpOwotCi11MzIgQVBWYWxpZGF0ZVJTTklFKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgICBzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwRW50cnksCi0JCSAgICAgdTggKnBSc25JZSwgdTggcnNuaWVfbGVuKTsKLQotdm9pZCBIYW5kbGVDb3VudGVyTWVhc3VyZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKnBFbnRyeSk7Ci0KLXZvaWQgV1BBU3RhcnQ0V2F5SFMoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICAgc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcEVudHJ5LCB1bnNpZ25lZCBsb25nIFRpbWVJbnRlcnZhbCk7Ci0KLXZvaWQgV1BBU3RhcnQyV2F5R3JvdXBIUyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKnBFbnRyeSk7Ci0KLXZvaWQgUGVlclBhaXJNc2cxQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCXN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKnBFbnRyeSwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSk7Ci0KLXZvaWQgUGVlclBhaXJNc2cyQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCXN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKnBFbnRyeSwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSk7Ci0KLXZvaWQgUGVlclBhaXJNc2czQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCXN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKnBFbnRyeSwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSk7Ci0KLXZvaWQgUGVlclBhaXJNc2c0QWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCXN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKnBFbnRyeSwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSk7Ci0KLXZvaWQgUGVlckdyb3VwTXNnMUFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcEVudHJ5LCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKTsKLQotdm9pZCBQZWVyR3JvdXBNc2cyQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSBzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwRW50cnksCi0JCQkgdm9pZCAqTXNnLCB1MzIgTXNnTGVuKTsKLQotdm9pZCBXcGFEZXJpdmVHVEsodTggKlBNSywKLQkJICB1OCAqR05vbmNlLAotCQkgIHU4ICpBQSwgdTggKm91dHB1dCwgdTMyIGxlbik7Ci0KLXZvaWQgQUVTX0dUS19LRVlfV1JBUCh1OCAqa2V5LAotCQkgICAgICB1OCAqcGxhaW50ZXh0LAotCQkgICAgICB1MzIgcF9sZW4sIHU4ICpjaXBoZXJ0ZXh0KTsKLQotLyp0eXBlZGVmIHZvaWQgKCpUSU1FUl9GVU5DVElPTikodW5zaWduZWQgbG9uZyk7ICovCi0KLS8qIHRpbWVvdXQgLS0gbXMgKi8KLXZvaWQgUlRNUF9TZXRQZXJpb2RpY1RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICpwVGltZXIsCi0JCQkgICBJTiB1bnNpZ25lZCBsb25nIHRpbWVvdXQpOwotCi12b2lkIFJUTVBfT1NfSW5pdF9UaW1lcihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQlzdHJ1Y3QgdGltZXJfbGlzdCAqcFRpbWVyLAotCQkJSU4gVElNRVJfRlVOQ1RJT04gZnVuY3Rpb24sIHZvaWQgKmRhdGEpOwotCi12b2lkIFJUTVBfT1NfQWRkX1RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICpwVGltZXIsCi0JCSAgICAgICBJTiB1bnNpZ25lZCBsb25nIHRpbWVvdXQpOwotCi12b2lkIFJUTVBfT1NfTW9kX1RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICpwVGltZXIsCi0JCSAgICAgICBJTiB1bnNpZ25lZCBsb25nIHRpbWVvdXQpOwotCi12b2lkIFJUTVBfT1NfRGVsX1RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICpwVGltZXIsCi0JCSAgICAgICBPVVQgQk9PTEVBTiAqcENhbmNlbGxlZCk7Ci0KLXZvaWQgUlRNUF9PU19SZWxlYXNlX1BhY2tldChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9xdWV1ZV9lbnRyeSAqcEVudHJ5KTsKLQotdm9pZCBSVE1QdXNlY0RlbGF5KHVuc2lnbmVkIGxvbmcgdXNlYyk7Ci0KLWludCBvc19hbGxvY19tZW0oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJIHU4ICoqbWVtLCB1bnNpZ25lZCBsb25nIHNpemUpOwotCi1pbnQgb3NfZnJlZV9tZW0oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB2b2lkICptZW0pOwotCi12b2lkIFJUTVBfQWxsb2NhdGVTaGFyZWRNZW1vcnkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgTGVuZ3RoLAotCQkJICAgICAgIElOIEJPT0xFQU4gQ2FjaGVkLAotCQkJICAgICAgIHZvaWQgKipWaXJ0dWFsQWRkcmVzcywKLQkJCSAgICAgICBkbWFfYWRkcl90ICpQaHlzaWNhbEFkZHJlc3MpOwotCi12b2lkIFJUTVBGcmVlVHhSeFJpbmdNZW1vcnkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotaW50IEFkYXB0ZXJCbG9ja0FsbG9jYXRlTWVtb3J5KHZvaWQgKmhhbmRsZSwgdm9pZCAqKnBwQWQpOwotCi12b2lkIFJUTVBfQWxsb2NhdGVUeERlc2NNZW1vcnkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgICAgIHUzMiBJbmRleCwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIExlbmd0aCwKLQkJCSAgICAgICBJTiBCT09MRUFOIENhY2hlZCwKLQkJCSAgICAgICB2b2lkICoqVmlydHVhbEFkZHJlc3MsCi0JCQkgICAgICAgZG1hX2FkZHJfdCAqUGh5c2ljYWxBZGRyZXNzKTsKLQotdm9pZCBSVE1QX0FsbG9jYXRlRmlyc3RUeEJ1ZmZlcihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJdTMyIEluZGV4LAotCQkJCXVuc2lnbmVkIGxvbmcgTGVuZ3RoLAotCQkJCUlOIEJPT0xFQU4gQ2FjaGVkLAotCQkJCXZvaWQgKipWaXJ0dWFsQWRkcmVzcywKLQkJCQlkbWFfYWRkcl90ICpQaHlzaWNhbEFkZHJlc3MpOwotCi12b2lkIFJUTVBfRnJlZUZpcnN0VHhCdWZmZXIoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgIHVuc2lnbmVkIGxvbmcgTGVuZ3RoLAotCQkJICAgIElOIEJPT0xFQU4gQ2FjaGVkLAotCQkJICAgIHZvaWQgKlZpcnR1YWxBZGRyZXNzLAotCQkJICAgIGRtYV9hZGRyX3QgUGh5c2ljYWxBZGRyZXNzKTsKLQotdm9pZCBSVE1QX0FsbG9jYXRlTWdtdERlc2NNZW1vcnkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCSB1bnNpZ25lZCBsb25nIExlbmd0aCwKLQkJCQkgSU4gQk9PTEVBTiBDYWNoZWQsCi0JCQkJIHZvaWQgKipWaXJ0dWFsQWRkcmVzcywKLQkJCQkgZG1hX2FkZHJfdCAqUGh5c2ljYWxBZGRyZXNzKTsKLQotdm9pZCBSVE1QX0FsbG9jYXRlUnhEZXNjTWVtb3J5KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIExlbmd0aCwKLQkJCSAgICAgICBJTiBCT09MRUFOIENhY2hlZCwKLQkJCSAgICAgICB2b2lkICoqVmlydHVhbEFkZHJlc3MsCi0JCQkgICAgICAgZG1hX2FkZHJfdCAqUGh5c2ljYWxBZGRyZXNzKTsKLQotdm9pZCBSVE1QX0ZyZWVEZXNjTWVtb3J5KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSB1bnNpZ25lZCBsb25nIExlbmd0aCwKLQkJCSB2b2lkICpWaXJ0dWFsQWRkcmVzcywKLQkJCSBkbWFfYWRkcl90IFBoeXNpY2FsQWRkcmVzcyk7Ci0KLXZvaWQgKlJ0bXBPU05ldFBrdEFsbG9jKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgSU4gaW50IHNpemUpOwotCi12b2lkICpSVE1QX0FsbG9jYXRlUnhQYWNrZXRCdWZmZXIoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCQkgdW5zaWduZWQgbG9uZyBMZW5ndGgsCi0JCQkJCSBJTiBCT09MRUFOIENhY2hlZCwKLQkJCQkJIHZvaWQgKipWaXJ0dWFsQWRkcmVzcywKLQkJCQkJIE9VVCBkbWFfYWRkcl90ICpQaHlzaWNhbEFkZHJlc3MpOwotCi12b2lkICpSVE1QX0FsbG9jYXRlVHhQYWNrZXRCdWZmZXIoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCQkgdW5zaWduZWQgbG9uZyBMZW5ndGgsCi0JCQkJCSBJTiBCT09MRUFOIENhY2hlZCwKLQkJCQkJIHZvaWQgKipWaXJ0dWFsQWRkcmVzcyk7Ci0KLXZvaWQgKlJUTVBfQWxsb2NhdGVGcmFnUGFja2V0QnVmZmVyKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkJICAgdW5zaWduZWQgbG9uZyBMZW5ndGgpOwotCi12b2lkIFJUTVBfUXVlcnlQYWNrZXRJbmZvKHZvaWQgKnBQYWNrZXQsCi0JCQkgIHN0cnVjdCBydF9wYWNrZXRfaW5mbyAqcFBhY2tldEluZm8sCi0JCQkgIHU4ICoqcFNyY0J1ZlZBLCB1MzIgKnBTcmNCdWZMZW4pOwotCi12b2lkIFJUTVBfUXVlcnlOZXh0UGFja2V0SW5mbyh2b2lkICoqcHBQYWNrZXQsCi0JCQkgICAgICBzdHJ1Y3QgcnRfcGFja2V0X2luZm8gKnBQYWNrZXRJbmZvLAotCQkJICAgICAgdTggKipwU3JjQnVmVkEsIHUzMiAqcFNyY0J1Zkxlbik7Ci0KLUJPT0xFQU4gUlRNUF9GaWxsVHhCbGtJbmZvKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X3R4X2JsayAqcFR4QmxrKTsKLQotc3RydWN0IHJ0X3J0bXBfc2dfbGlzdCAqcnRfZ2V0X3NnX2xpc3RfZnJvbV9wYWNrZXQodm9pZCAqcFBhY2tldCwKLQkJCQkJCXN0cnVjdCBydF9ydG1wX3NnX2xpc3QgKnNnKTsKLQotdm9pZCBhbm5vdW5jZV84MDJfM19wYWNrZXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB2b2lkICpwUGFja2V0KTsKLQotdTMyIEJBX1Jlb3JkZXJfQU1TRFVfQW5ub3VuY2Uoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB2b2lkICpwUGFja2V0KTsKLQotc3RydWN0IG5ldF9kZXZpY2UgKmdldF9uZXRkZXZfZnJvbV9ic3NpZChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHU4IEZyb21XaGljaEJTU0lEKTsKLQotdm9pZCAqZHVwbGljYXRlX3BrdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICB1OCAqcEhlYWRlcjgwMl8zLAotCQkJICAgdTMyIEhkckxlbiwKLQkJCSAgIHU4ICpwRGF0YSwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgRGF0YVNpemUsIHU4IEZyb21XaGljaEJTU0lEKTsKLQotdm9pZCAqZHVwbGljYXRlX3BrdF93aXRoX1RLSVBfTUlDKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkJIHZvaWQgKnBPbGRQa3QpOwotCi12b2lkIGJhX2ZsdXNoX3Jlb3JkZXJpbmdfdGltZW91dF9tcGR1cyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJICAgICAgIHN0cnVjdCBydF9iYV9yZWNfZW50cnkgKnBCQUVudHJ5LAotCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIE5vdzMyKTsKLQotdm9pZCBCQU9yaVNlc3Npb25TZXRVcChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgICAgICBzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwRW50cnksCi0JCSAgICAgICB1OCBUSUQsCi0JCSAgICAgICB1MTYgVGltZU91dCwKLQkJICAgICAgIHVuc2lnbmVkIGxvbmcgRGVsYXlUaW1lLCBJTiBCT09MRUFOIGlzRm9yY2VkKTsKLQotdm9pZCBCQVNlc3Npb25UZWFyRG93bkFMTChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHU4IFdjaWQpOwotCi1CT09MRUFOIE9TX05lZWRfQ2xvbmVfUGFja2V0KHZvaWQpOwotCi12b2lkIGJ1aWxkX3R4X3BhY2tldChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgICAgdm9pZCAqcFBhY2tldCwKLQkJICAgICB1OCAqcEZyYW1lLCB1bnNpZ25lZCBsb25nIEZyYW1lTGVuKTsKLQotdm9pZCBCQU9yaVNlc3Npb25UZWFyRG93bihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgIHU4IFdjaWQsCi0JCQkgIHU4IFRJRCwKLQkJCSAgSU4gQk9PTEVBTiBiUGFzc2l2ZSwgSU4gQk9PTEVBTiBiRm9yY2VTZW5kKTsKLQotdm9pZCBCQVJlY1Nlc3Npb25UZWFyRG93bihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgIHU4IFdjaWQsIHU4IFRJRCwgSU4gQk9PTEVBTiBiUGFzc2l2ZSk7Ci0KLUJPT0xFQU4gYmFfcmVvcmRlcmluZ19yZXNvdXJjZV9pbml0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgaW50IG51bSk7Ci12b2lkIGJhX3Jlb3JkZXJpbmdfcmVzb3VyY2VfcmVsZWFzZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi1jaGFyICpyc3RydG9rKGNoYXIgKnMsIElOIGNvbnN0IGNoYXIgKmN0KTsKLQotLyovLy8vLy8vLyBjb21tb24gaW9jdGwgZnVuY3Rpb25zIC8vLy8vLy8vLy8gKi8KLWludCBTZXRDb21tb25IVChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi1pbnQgV3BhQ2hlY2tFYXBDb2RlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgIHU4ICpwRnJhbWUsIHUxNiBGcmFtZUxlbiwgdTE2IE9mZlNldCk7Ci0KLXZvaWQgV3BhU2VuZE1pY0ZhaWx1cmVUb1dwYVN1cHBsaWNhbnQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCSAgICAgIElOIEJPT0xFQU4gYlVuaWNhc3QpOwotCi1pbnQgd2V4dF9ub3RpZnlfZXZlbnRfYXNzb2Moc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotQk9PTEVBTiBTVEFSeERvbmVJbnRlcnJ1cHRIYW5kbGUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBJTiBCT09MRUFOIGFyZ2MpOwotCi0vKiBBTVBEVSBwYWNrZXQgaW5kaWNhdGlvbiAqLwotdm9pZCBJbmRpY2F0ZV9BTVBEVV9QYWNrZXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgc3RydWN0IHJ0X3J4X2JsayAqcFJ4QmxrLCB1OCBGcm9tV2hpY2hCU1NJRCk7Ci0KLS8qIEFNU0RVIHBhY2tldCBpbmRpY2F0aW9uICovCi12b2lkIEluZGljYXRlX0FNU0RVX1BhY2tldChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICBzdHJ1Y3QgcnRfcnhfYmxrICpwUnhCbGssIHU4IEZyb21XaGljaEJTU0lEKTsKLQotLyogTm9ybWFsIGxlZ2FjeSBSeCBwYWNrZXQgaW5kaWNhdGlvbiAqLwotdm9pZCBJbmRpY2F0ZV9MZWdhY3lfUGFja2V0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICBzdHJ1Y3QgcnRfcnhfYmxrICpwUnhCbGssIHU4IEZyb21XaGljaEJTU0lEKTsKLQotdm9pZCBJbmRpY2F0ZV9FQVBPTF9QYWNrZXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgc3RydWN0IHJ0X3J4X2JsayAqcFJ4QmxrLCB1OCBGcm9tV2hpY2hCU1NJRCk7Ci0KLXZvaWQgdXBkYXRlX29zX3BhY2tldF9pbmZvKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgIHN0cnVjdCBydF9yeF9ibGsgKnBSeEJsaywgdTggRnJvbVdoaWNoQlNTSUQpOwotCi12b2lkIHdsYW5fODAyXzExX3RvXzgwMl8zX3BhY2tldChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJIHN0cnVjdCBydF9yeF9ibGsgKnBSeEJsaywKLQkJCQkgdTggKnBIZWFkZXI4MDJfMywKLQkJCQkgdTggRnJvbVdoaWNoQlNTSUQpOwotCi0vKiByZW1vdmUgTExDIGFuZCBnZXQgODAyXzMgSGVhZGVyICovCi0jZGVmaW5lICBSVE1QXzgwMl8xMV9SRU1PVkVfTExDX0FORF9DT05WRVJUX1RPXzgwMl8zKF9wUnhCbGssIF9wSGVhZGVyODAyXzMpCVwKLXsJCQkJCQkJCQkJCQkJCQkJCQkJCVwKLQl1OCAqX3BSZW1vdmVkTExDU05BUCA9IE5VTEwsICpfcERBLCAqX3BTQTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQkJCQkJCQkJCQkJCQkJCQkJCVwKLQlpZiAoUlhfQkxLX1RFU1RfRkxBRyhfcFJ4QmxrLCBmUlhfTUVTSCkpCXsgICAgICAgICAgICBcCi0JCV9wREEgPSBfcFJ4QmxrLT5wSGVhZGVyLT5BZGRyMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJX3BTQSA9ICh1OCAqKV9wUnhCbGstPnBIZWFkZXIgKyBzaXplb2Yoc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEpOyAgICAgICAgICAgICAgICBcCi0JfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQllbHNlCXtcCi0JCWlmIChSWF9CTEtfVEVTVF9GTEFHKF9wUnhCbGssIGZSWF9JTkZSQSkpCXtcCi0JCQlfcERBID0gX3BSeEJsay0+cEhlYWRlci0+QWRkcjE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJaWYgKFJYX0JMS19URVNUX0ZMQUcoX3BSeEJsaywgZlJYX0RMUykpCQkJCQkJCQkJXAotCQkJX3BTQSA9IF9wUnhCbGstPnBIZWFkZXItPkFkZHIyOwkJCQkJCQkJCQlcCi0JCWVsc2UJCQkJCQkJCQkJCQkJCQkJCVwKLQkJCV9wU0EgPSBfcFJ4QmxrLT5wSGVhZGVyLT5BZGRyMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCWVsc2UJewlcCi0JCQlfcERBID0gX3BSeEJsay0+cEhlYWRlci0+QWRkcjE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCV9wU0EgPSBfcFJ4QmxrLT5wSGVhZGVyLT5BZGRyMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCQkJCQkJCQkJCQkJCQkJCQkJXAotCUNPTlZFUlRfVE9fODAyXzMoX3BIZWFkZXI4MDJfMywgX3BEQSwgX3BTQSwgX3BSeEJsay0+cERhdGEsIAkJCQlcCi0JCV9wUnhCbGstPkRhdGFTaXplLCBfcFJlbW92ZWRMTENTTkFQKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0KLQotdm9pZCBTdGFfQW5ub3VuY2Vfb3JfRm9yd2FyZF84MDJfM19QYWNrZXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCQkgIHZvaWQgKnBQYWNrZXQsCi0JCQkJCSAgdTggRnJvbVdoaWNoQlNTSUQpOwotCi0jZGVmaW5lIEFOTk9VTkNFX09SX0ZPUldBUkRfODAyXzNfUEFDS0VUKF9wQWQsIF9wUGFja2V0LCBfRnJvbVdoaWNoQlNTKVwKLQkJCVN0YV9Bbm5vdW5jZV9vcl9Gb3J3YXJkXzgwMl8zX1BhY2tldChfcEFkLCBfcFBhY2tldCwgX0Zyb21XaGljaEJTUyk7Ci0JCQkvKmFubm91bmNlXzgwMl8zX3BhY2tldChfcEFkLCBfcFBhY2tldCk7ICovCi0KLXZvaWQgKkR1cGxpY2F0ZVBhY2tldChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgIHZvaWQgKnBQYWNrZXQsIHU4IEZyb21XaGljaEJTU0lEKTsKLQotdm9pZCAqQ2xvbmVQYWNrZXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJIHZvaWQgKnBQYWNrZXQsCi0JCQkgdTggKnBEYXRhLCB1bnNpZ25lZCBsb25nIERhdGFTaXplKTsKLQotLyogTm9ybWFsLCBBTVBEVSBvciBBTVNEVSAqLwotdm9pZCBDbW1SeG5vblJhbGlua0ZyYW1lSW5kaWNhdGUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCSBzdHJ1Y3QgcnRfcnhfYmxrICpwUnhCbGssIHU4IEZyb21XaGljaEJTU0lEKTsKLQotdm9pZCBDbW1SeFJhbGlua0ZyYW1lSW5kaWNhdGUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgICAgc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcEVudHJ5LAotCQkJICAgICAgc3RydWN0IHJ0X3J4X2JsayAqcFJ4QmxrLCB1OCBGcm9tV2hpY2hCU1NJRCk7Ci0KLXZvaWQgVXBkYXRlX1Jzc2lfU2FtcGxlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCXN0cnVjdCBydF9yc3NpX3NhbXBsZSAqcFJzc2ksIHN0cnVjdCBydF9yeHdpICogcFJ4V0kpOwotCi12b2lkICpHZXRQYWNrZXRGcm9tUnhSaW5nKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkgT1VUIFBSVDI4WFhfUlhEX1NUUlVDIHBTYXZlUnhELAotCQkJCSBPVVQgQk9PTEVBTiAqcGJSZXNjaGVkdWxlLAotCQkJCSBJTiB1MzIgKnBSeFBlbmRpbmcpOwotCi12b2lkICpSVE1QRGVGcmFnbWVudERhdGFGcmFtZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9yeF9ibGsgKnBSeEJsayk7Ci0KLWVudW0gewotCURJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm0gPSAweDAwMDAwMDQ0LAotCURJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1faG9zdHRpbWUgPSAweDAwMDEwMDQ0LAotCURJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fbWFjdGltZSA9IDB4MDAwMjAwNDQsCi0JRElEbXNnX2xueGluZF93bGFuc25pZmZybV9jaGFubmVsID0gMHgwMDAzMDA0NCwKLQlESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3Jzc2kgPSAweDAwMDQwMDQ0LAotCURJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fc3EgPSAweDAwMDUwMDQ0LAotCURJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fc2lnbmFsID0gMHgwMDA2MDA0NCwKLQlESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX25vaXNlID0gMHgwMDA3MDA0NCwKLQlESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3JhdGUgPSAweDAwMDgwMDQ0LAotCURJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1faXN0eCA9IDB4MDAwOTAwNDQsCi0JRElEbXNnX2xueGluZF93bGFuc25pZmZybV9mcm1sZW4gPSAweDAwMEEwMDQ0Ci19OwotZW51bSB7Ci0JUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19ub192YWx1ZSA9IDB4MDAKLX07Ci1lbnVtIHsKLQlQODAyMTFFTlVNX3RydXRoX2ZhbHNlID0gMHgwMCwKLQlQODAyMTFFTlVNX3RydXRoX3RydWUgPSAweDAxCi19OwotCi0vKiBEZWZpbml0aW9uIGZyb20gbWFkd2lmaSAqLwotc3RydWN0IHJ0X3A4MDIxMWl0ZW1fdWludDMyIHsKLQl1MzIgZGlkOwotCXUxNiBzdGF0dXM7Ci0JdTE2IGxlbjsKLQl1MzIgZGF0YTsKLX07Ci0KLXN0cnVjdCBydF93bGFuX25nX3ByaXNtMl9oZWFkZXIgewotCXUzMiBtc2djb2RlOwotCXUzMiBtc2dsZW47Ci0jZGVmaW5lIFdMQU5fREVWTkFNRUxFTl9NQVggMTYKLQl1OCBkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOwotCXN0cnVjdCBydF9wODAyMTFpdGVtX3VpbnQzMiBob3N0dGltZTsKLQlzdHJ1Y3QgcnRfcDgwMjExaXRlbV91aW50MzIgbWFjdGltZTsKLQlzdHJ1Y3QgcnRfcDgwMjExaXRlbV91aW50MzIgY2hhbm5lbDsKLQlzdHJ1Y3QgcnRfcDgwMjExaXRlbV91aW50MzIgcnNzaTsKLQlzdHJ1Y3QgcnRfcDgwMjExaXRlbV91aW50MzIgc3E7Ci0Jc3RydWN0IHJ0X3A4MDIxMWl0ZW1fdWludDMyIHNpZ25hbDsKLQlzdHJ1Y3QgcnRfcDgwMjExaXRlbV91aW50MzIgbm9pc2U7Ci0Jc3RydWN0IHJ0X3A4MDIxMWl0ZW1fdWludDMyIHJhdGU7Ci0Jc3RydWN0IHJ0X3A4MDIxMWl0ZW1fdWludDMyIGlzdHg7Ci0Jc3RydWN0IHJ0X3A4MDIxMWl0ZW1fdWludDMyIGZybWxlbjsKLX07Ci0KLS8qIFRoZSByYWRpbyBjYXB0dXJlIGhlYWRlciBwcmVjZWRlcyB0aGUgODAyLjExIGhlYWRlci4gKi8KLXN0cnVjdCBQQUNLRUQgcnRfaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciB7Ci0JdTggaXRfdmVyc2lvbjsJLyogVmVyc2lvbiAwLiBPbmx5IGluY3JlYXNlcwotCQkJCSAqIGZvciBkcmFzdGljIGNoYW5nZXMsCi0JCQkJICogaW50cm9kdWN0aW9uIG9mIGNvbXBhdGlibGUKLQkJCQkgKiBuZXcgZmllbGRzIGRvZXMgbm90IGNvdW50LgotCQkJCSAqLwotCXU4IGl0X3BhZDsKLQl1MTYgaXRfbGVuOwkJLyogbGVuZ3RoIG9mIHRoZSB3aG9sZQotCQkJCSAqIGhlYWRlciBpbiBieXRlcywgaW5jbHVkaW5nCi0JCQkJICogaXRfdmVyc2lvbiwgaXRfcGFkLAotCQkJCSAqIGl0X2xlbiwgYW5kIGRhdGEgZmllbGRzLgotCQkJCSAqLwotCXUzMiBpdF9wcmVzZW50OwkvKiBBIGJpdG1hcCB0ZWxsaW5nIHdoaWNoCi0JCQkJICogZmllbGRzIGFyZSBwcmVzZW50LiBTZXQgYml0IDMxCi0JCQkJICogKDB4ODAwMDAwMDApIHRvIGV4dGVuZCB0aGUKLQkJCQkgKiBiaXRtYXAgYnkgYW5vdGhlciAzMiBiaXRzLgotCQkJCSAqIEFkZGl0aW9uYWwgZXh0ZW5zaW9ucyBhcmUgbWFkZQotCQkJCSAqIGJ5IHNldHRpbmcgYml0IDMxLgotCQkJCSAqLwotfTsKLQotZW51bSBpZWVlODAyMTFfcmFkaW90YXBfdHlwZSB7Ci0JSUVFRTgwMjExX1JBRElPVEFQX1RTRlQgPSAwLAotCUlFRUU4MDIxMV9SQURJT1RBUF9GTEFHUyA9IDEsCi0JSUVFRTgwMjExX1JBRElPVEFQX1JBVEUgPSAyLAotCUlFRUU4MDIxMV9SQURJT1RBUF9DSEFOTkVMID0gMywKLQlJRUVFODAyMTFfUkFESU9UQVBfRkhTUyA9IDQsCi0JSUVFRTgwMjExX1JBRElPVEFQX0RCTV9BTlRTSUdOQUwgPSA1LAotCUlFRUU4MDIxMV9SQURJT1RBUF9EQk1fQU5UTk9JU0UgPSA2LAotCUlFRUU4MDIxMV9SQURJT1RBUF9MT0NLX1FVQUxJVFkgPSA3LAotCUlFRUU4MDIxMV9SQURJT1RBUF9UWF9BVFRFTlVBVElPTiA9IDgsCi0JSUVFRTgwMjExX1JBRElPVEFQX0RCX1RYX0FUVEVOVUFUSU9OID0gOSwKLQlJRUVFODAyMTFfUkFESU9UQVBfREJNX1RYX1BPV0VSID0gMTAsCi0JSUVFRTgwMjExX1JBRElPVEFQX0FOVEVOTkEgPSAxMSwKLQlJRUVFODAyMTFfUkFESU9UQVBfREJfQU5UU0lHTkFMID0gMTIsCi0JSUVFRTgwMjExX1JBRElPVEFQX0RCX0FOVE5PSVNFID0gMTMKLX07Ci0KLSNkZWZpbmUgV0xBTl9SQURJT1RBUF9QUkVTRU5UICgJCQlcCi0JKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX1RTRlQpCXwJXAotCSgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9GTEFHUykgfAlcCi0JKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX1JBVEUpICB8IAlcCi0JIDApCi0KLXN0cnVjdCBydF93bGFuX3JhZGlvdGFwX2hlYWRlciB7Ci0Jc3RydWN0IHJ0X2llZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgd3RfaWhkcjsKLQlsb25nIGxvbmcgd3RfdHNmdDsKLQl1OCB3dF9mbGFnczsKLQl1OCB3dF9yYXRlOwotfTsKLS8qIERlZmluaXRpb24gZnJvbSBtYWR3aWZpICovCi0KLXZvaWQgc2VuZF9tb25pdG9yX3BhY2tldHMoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfcnhfYmxrICpwUnhCbGspOwotCi12b2lkIFJUTVBTZXREZXNpcmVkUmF0ZXMoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkYXB0ZXIsIGxvbmcgUmF0ZXMpOwotCi1pbnQgU2V0X0ZpeGVkVHhNb2RlX1Byb2Moc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBjaGFyICphcmcpOwotCi1CT09MRUFOIFJUMjhYWENoaXBzZXRDaGVjayhJTiB2b2lkICpfZGV2X3ApOwotCi12b2lkIFJUMjhYWERNQURpc2FibGUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotdm9pZCBSVDI4WFhETUFFbmFibGUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotdm9pZCBSVDI4eHhfVXBkYXRlQmVhY29uVG9Bc2ljKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICAgICBpbnQgYXBpZHgsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBCZWFjb25MZW4sIHVuc2lnbmVkIGxvbmcgVXBkYXRlUG9zKTsKLQotaW50IHJ0Mjh4eF9pbml0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJY2hhciAqcERlZmF1bHRNYWMsIGNoYXIgKnBIb3N0TmFtZSk7Ci0KLWludCBSdG1wTmV0VGFza0luaXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotdm9pZCBSdG1wTmV0VGFza0V4aXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotaW50IFJ0bXBNZ210VGFza0luaXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotdm9pZCBSdG1wTWdtdFRhc2tFeGl0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLXZvaWQgdGJ0dF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci0KLXN0cnVjdCBuZXRfZGV2aWNlICpSdG1wUGh5TmV0RGV2SW5pdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICBzdHJ1Y3QgcnRfcnRtcF9vc19uZXRkZXZfb3BfaG9vayAqcE5ldEhvb2spOwotCi1CT09MRUFOIFJ0bXBQaHlOZXREZXZFeGl0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpOwotCi1pbnQgUnRtcFJhRGV2Q3RybEluaXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBJTiBSVE1QX0lORl9UWVBFIGluZlR5cGUpOwotCi1CT09MRUFOIFJ0bXBSYURldkN0cmxFeGl0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLSNpZmRlZiBSVE1QX01BQ19QQ0kKLS8qICovCi0vKiBGdW5jdGlvbiBQcm90b3R5cGUgaW4gY21tX2RhdGFfcGNpLmMgKi8KLS8qICovCi11MTYgUnRtcFBDSV9Xcml0ZVR4UmVzb3VyY2Uoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgICAgIHN0cnVjdCBydF90eF9ibGsgKnBUeEJsaywKLQkJCSAgICAgICBJTiBCT09MRUFOIGJJc0xhc3QsIHUxNiAqRnJlZU51bWJlcik7Ci0KLXUxNiBSdG1wUENJX1dyaXRlU2luZ2xlVHhSZXNvdXJjZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJICAgICBzdHJ1Y3QgcnRfdHhfYmxrICpwVHhCbGssCi0JCQkJICAgICBJTiBCT09MRUFOIGJJc0xhc3QsCi0JCQkJICAgICB1MTYgKkZyZWVOdW1iZXIpOwotCi11MTYgUnRtcFBDSV9Xcml0ZU11bHRpVHhSZXNvdXJjZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJICAgIHN0cnVjdCBydF90eF9ibGsgKnBUeEJsaywKLQkJCQkgICAgdTggZnJhbWVOdW0sIHUxNiAqRnJlZU51bWJlcik7Ci0KLXUxNiBSdG1wUENJX1dyaXRlRnJhZ1R4UmVzb3VyY2Uoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCSAgIHN0cnVjdCBydF90eF9ibGsgKnBUeEJsaywKLQkJCQkgICB1OCBmcmFnTnVtLCB1MTYgKkZyZWVOdW1iZXIpOwotCi11MTYgUnRtcFBDSV9Xcml0ZVN1YlR4UmVzb3VyY2Uoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCSAgc3RydWN0IHJ0X3R4X2JsayAqcFR4QmxrLAotCQkJCSAgSU4gQk9PTEVBTiBiSXNMYXN0LCB1MTYgKkZyZWVOdW1iZXIpOwotCi12b2lkIFJ0bXBQQ0lfRmluYWxXcml0ZVR4UmVzb3VyY2Uoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCSAgc3RydWN0IHJ0X3R4X2JsayAqcFR4QmxrLAotCQkJCSAgdTE2IHRvdGFsTVBEVVNpemUsCi0JCQkJICB1MTYgRmlyc3RUeElkeCk7Ci0KLXZvaWQgUnRtcFBDSURhdGFMYXN0VHhJZHgoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICB1OCBRdWVJZHgsIHUxNiBMYXN0VHhJZHgpOwotCi12b2lkIFJ0bXBQQ0lEYXRhS2lja091dChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQlzdHJ1Y3QgcnRfdHhfYmxrICpwVHhCbGssIHU4IFF1ZUlkeCk7Ci0KLWludCBSdG1wUENJTWdtdEtpY2tPdXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICAgICAgdTggUXVlSWR4LAotCQkgICAgICAgdm9pZCAqcFBhY2tldCwKLQkJICAgICAgIHU4ICpwU3JjQnVmVkEsIHUzMiBTcmNCdWZMZW4pOwotCi1pbnQgUlRNUENoZWNrUnhFcnJvcihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgIHN0cnVjdCBydF9oZWFkZXJfODAyXzExICpwSGVhZGVyLAotCQkJICAgICBzdHJ1Y3QgcnRfcnh3aSAqcFJ4V0ksIElOIFBSVDI4WFhfUlhEX1NUUlVDIHBSeEQpOwotCi1CT09MRUFOIFJUMjh4eFBjaUFzaWNSYWRpb09mZihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgICB1OCBMZXZlbCwgdTE2IFRidHROdW1Ub05leHRXYWtlVXApOwotCi1CT09MRUFOIFJUMjh4eFBjaUFzaWNSYWRpb09uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggTGV2ZWwpOwotCi12b2lkIFJUTVBJbml0UENJZUxpbmtDdHJsVmFsdWUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotdm9pZCBSVE1QRmluZEhvc3RQQ0lEZXYoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotdm9pZCBSVE1QUENJZUxpbmtDdHJsVmFsdWVSZXN0b3JlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggTGV2ZWwpOwotCi12b2lkIFJUTVBQQ0llTGlua0N0cmxTZXR0aW5nKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTE2IE1heCk7Ci0KLXZvaWQgUlRNUHJ0M3hTZXRQQ0llUG93ZXJMaW5rQ3RybChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi12b2lkIFBzUG9sbFdha2VFeGVjKHZvaWQgKlN5c3RlbVNwZWNpZmljMSwKLQkJICAgIHZvaWQgKkZ1bmN0aW9uQ29udGV4dCwKLQkJICAgIHZvaWQgKlN5c3RlbVNwZWNpZmljMiwgdm9pZCAqU3lzdGVtU3BlY2lmaWMzKTsKLQotdm9pZCBSYWRpb09uRXhlYyh2b2lkICpTeXN0ZW1TcGVjaWZpYzEsCi0JCSB2b2lkICpGdW5jdGlvbkNvbnRleHQsCi0JCSB2b2lkICpTeXN0ZW1TcGVjaWZpYzIsIHZvaWQgKlN5c3RlbVNwZWNpZmljMyk7Ci0KLXZvaWQgUlQyOHh4UGNpU3RhQXNpY0ZvcmNlV2FrZXVwKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgSU4gQk9PTEVBTiBiRnJvbVR4KTsKLQotdm9pZCBSVDI4eHhQY2lTdGFBc2ljU2xlZXBUaGVuQXV0b1dha2V1cChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJCSB1MTYgVGJ0dE51bVRvTmV4dFdha2VVcCk7Ci0KLXZvaWQgUlQyOHh4UGNpTWxtZVJhZGlvT24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotdm9pZCBSVDI4eHhQY2lNbG1lUmFkaW9PRkYoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLQotI2lmZGVmIFJUTVBfTUFDX1VTQgotLyogKi8KLS8qIEZ1bmN0aW9uIFByb3RvdHlwZSBpbiBydHVzYl9idWxrLmMgKi8KLS8qICovCi12b2lkIFJUVVNCSW5pdFR4RGVzYyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgICAgc3RydWN0IHJ0X3R4X2NvbnRleHQgKnBUeENvbnRleHQsCi0JCSAgICAgdTggQnVsa091dFBpcGVJZCwgSU4gdXNiX2NvbXBsZXRlX3QgRnVuYyk7Ci0KLXZvaWQgUlRVU0JJbml0SFRUeERlc2Moc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICAgICAgc3RydWN0IHJ0X2h0X3R4X2NvbnRleHQgKnBUeENvbnRleHQsCi0JCSAgICAgICB1OCBCdWxrT3V0UGlwZUlkLAotCQkgICAgICAgdW5zaWduZWQgbG9uZyBCdWxrT3V0U2l6ZSwgSU4gdXNiX2NvbXBsZXRlX3QgRnVuYyk7Ci0KLXZvaWQgUlRVU0JJbml0UnhEZXNjKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X3J4X2NvbnRleHQgKnBSeENvbnRleHQpOwotCi12b2lkIFJUVVNCQ2xlYW5VcERhdGFCdWxrT3V0UXVldWUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotdm9pZCBSVFVTQkNhbmNlbFBlbmRpbmdCdWxrT3V0SVJQKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLXZvaWQgUlRVU0JCdWxrT3V0RGF0YVBhY2tldChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgdTggQnVsa091dFBpcGVJZCwgdTggSW5kZXgpOwotCi12b2lkIFJUVVNCQnVsa091dE51bGxGcmFtZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi12b2lkIFJUVVNCQnVsa091dFJUU0ZyYW1lKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLXZvaWQgUlRVU0JDYW5jZWxQZW5kaW5nQnVsa0luSVJQKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLXZvaWQgUlRVU0JDYW5jZWxQZW5kaW5nSVJQcyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi12b2lkIFJUVVNCQnVsa091dE1MTUVQYWNrZXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1OCBJbmRleCk7Ci0KLXZvaWQgUlRVU0JCdWxrT3V0UHNQb2xsKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLXZvaWQgUlRVU0JDbGVhblVwTUxNRUJ1bGtPdXRRdWV1ZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi12b2lkIFJUVVNCS2lja0J1bGtPdXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotdm9pZCBSVFVTQkJ1bGtSZWNlaXZlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLXZvaWQgRG9CdWxrSW4oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotdm9pZCBSVFVTQkluaXRSeERlc2Moc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfcnhfY29udGV4dCAqcFJ4Q29udGV4dCk7Ci0KLXZvaWQgUlRVU0JCdWxrUnhIYW5kbGUoSU4gdW5zaWduZWQgbG9uZyBkYXRhKTsKLQotLyogKi8KLS8qIEZ1bmN0aW9uIFByb3RvdHlwZSBpbiBydHVzYl9pby5jICovCi0vKiAqLwotaW50IFJUVVNCTXVsdGlSZWFkKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCXUxNiBPZmZzZXQsIHU4ICpwRGF0YSwgdTE2IGxlbmd0aCk7Ci0KLWludCBSVFVTQk11bHRpV3JpdGUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICAgdTE2IE9mZnNldCwgY29uc3QgdTggKnBEYXRhLCB1MTYgbGVuZ3RoKTsKLQotaW50IFJUVVNCTXVsdGlXcml0ZV9PbmVCeXRlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICB1MTYgT2Zmc2V0LCBjb25zdCB1OCAqcERhdGEpOwotCi1pbnQgUlRVU0JSZWFkQkJQUmVnaXN0ZXIoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgICAgdTggSWQsIHU4ICpwVmFsdWUpOwotCi1pbnQgUlRVU0JXcml0ZUJCUFJlZ2lzdGVyKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICAgICB1OCBJZCwgdTggVmFsdWUpOwotCi1pbnQgUlRVU0JXcml0ZVJGUmVnaXN0ZXIoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1MzIgVmFsdWUpOwotCi1pbnQgUlRVU0JfVmVuZG9yUmVxdWVzdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgIHUzMiBUcmFuc2ZlckZsYWdzLAotCQkJICAgICB1OCBSZXNlcnZlZEJpdHMsCi0JCQkgICAgIHU4IFJlcXVlc3QsCi0JCQkgICAgIHUxNiBWYWx1ZSwKLQkJCSAgICAgdTE2IEluZGV4LAotCQkJICAgICB2b2lkICpUcmFuc2ZlckJ1ZmZlciwKLQkJCSAgICAgdTMyIFRyYW5zZmVyQnVmZmVyTGVuZ3RoKTsKLQotaW50IFJUVVNCUmVhZEVFUFJPTShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgdTE2IE9mZnNldCwgdTggKnBEYXRhLCB1MTYgbGVuZ3RoKTsKLQotaW50IFJUVVNCV3JpdGVFRVBST00oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICB1MTYgT2Zmc2V0LCB1OCAqcERhdGEsIHUxNiBsZW5ndGgpOwotCi12b2lkIFJUVVNCUHV0VG9TbGVlcChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi1pbnQgUlRVU0JXYWtlVXAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotdm9pZCBSVFVTQkluaXRpYWxpemVDbWRRKHN0cnVjdCBydF9jbWRxICpjbWRxKTsKLQotaW50IFJUVVNCRW5xdWV1ZUNtZEZyb21OZGlzKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkgICAgSU4gTkRJU19PSUQgT2lkLAotCQkJCSAgICBJTiBCT09MRUFOIFNldEluZm9ybWF0aW9uLAotCQkJCSAgICB2b2lkICpwSW5mb3JtYXRpb25CdWZmZXIsCi0JCQkJICAgIHUzMiBJbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aCk7Ci0KLWludCBSVFVTQkVucXVldWVJbnRlcm5hbENtZChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJICAgIElOIE5ESVNfT0lEIE9pZCwKLQkJCQkgICAgdm9pZCAqcEluZm9ybWF0aW9uQnVmZmVyLAotCQkJCSAgICB1MzIgSW5mb3JtYXRpb25CdWZmZXJMZW5ndGgpOwotCi12b2lkIFJUVVNCRGVxdWV1ZUNtZChzdHJ1Y3QgcnRfY21kcSAqY21kcSwgc3RydWN0IHJ0X2NtZHFlbG10ICogKiBwY21kcWVsbXQpOwotCi1pbnQgUlRVU0JDbWRUaHJlYWQoSU4gdm9pZCAqQ29udGV4dCk7Ci0KLXZvaWQgUlRVU0JCc3NCZWFjb25FeGl0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLXZvaWQgUlRVU0JCc3NCZWFjb25TdG9wKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLXZvaWQgUlRVU0JCc3NCZWFjb25TdGFydChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi12b2lkIFJUVVNCQnNzQmVhY29uSW5pdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi12b2lkIFJUVVNCV2F0Y2hEb2coc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotaW50IFJUVVNCV3JpdGVNQUNSZWdpc3RlcihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgICAgdTE2IE9mZnNldCwgdTMyIFZhbHVlKTsKLQotaW50IFJUVVNCUmVhZE1BQ1JlZ2lzdGVyKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICAgIHUxNiBPZmZzZXQsIHUzMiAqcFZhbHVlKTsKLQotaW50IFJUVVNCU2luZ2xlV3JpdGUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICB1MTYgT2Zmc2V0LCB1MTYgVmFsdWUpOwotCi1pbnQgUlRVU0JGaXJtd2FyZVdyaXRlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgICAgIGNvbnN0IHU4ICpwRndJbWFnZSwgdW5zaWduZWQgbG9uZyBGd0xlbik7Ci0KLWludCBSVFVTQlZlbmRlclJlc2V0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLWludCBSVFVTQlNldEhhcmRXYXJlUmVnaXN0ZXIoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkYXB0ZXIsIHZvaWQgKnBCdWYpOwotCi1pbnQgUlRVU0JRdWVyeUhhcmRXYXJlUmVnaXN0ZXIoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkYXB0ZXIsCi0JCQkJICAgICAgIHZvaWQgKnBCdWYpOwotCi12b2lkIENNREhhbmRsZXIoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotaW50IFJUVVNCV3JpdGVIV01BQ0FkZHJlc3Moc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkYXB0ZXIpOwotCi12b2lkIE1hY1RhYmxlSW5pdGlhbGl6ZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi12b2lkIE1sbWVTZXRQc20oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1MTYgcHNtKTsKLQotaW50IFJUTVBXUEFBZGRLZXlQcm9jKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdm9pZCAqcEJ1Zik7Ci0KLXZvaWQgQXNpY1J4QW50RXZhbEFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi12b2lkIGFwcGVuZF9wa3Qoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQl1OCAqcEhlYWRlcjgwMl8zLAotCQl1MzIgSGRyTGVuLAotCQl1OCAqcERhdGEsCi0JCXVuc2lnbmVkIGxvbmcgRGF0YVNpemUsIHZvaWQgKipwcFBhY2tldCk7Ci0KLXUzMiBkZWFnZ3JlZ2F0ZV9BTVNEVV9hbm5vdW5jZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJdm9pZCAqcFBhY2tldCwKLQkJCQl1OCAqcERhdGEsIHVuc2lnbmVkIGxvbmcgRGF0YVNpemUpOwotCi1pbnQgUlRNUENoZWNrUnhFcnJvcihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgIHN0cnVjdCBydF9oZWFkZXJfODAyXzExICpwSGVhZGVyLAotCQkJICAgICBzdHJ1Y3QgcnRfcnh3aSAqcFJ4V0ksCi0JCQkgICAgIElOIFBSVDI4WFhfUlhEX1NUUlVDIHBSeElORk8pOwotCi12b2lkIFJUVVNCTWxtZUhhcmRUcmFuc21pdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tZ210ICpwTWdtdCk7Ci0KLWludCBNbG1lVGhyZWFkKHZvaWQgKkNvbnRleHQpOwotCi0vKiAqLwotLyogRnVuY3Rpb24gUHJvdG90eXBlIGluIHJ0dXNiX2RhdGEuYyAqLwotLyogKi8KLWludCBSVFVTQkZyZWVEZXNjcmlwdG9yUmVxdWVzdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJICAgICAgIHU4IEJ1bGtPdXRQaXBlSWQsCi0JCQkJICAgICAgIHUzMiBOdW1iZXJSZXF1aXJlZCk7Ci0KLUJPT0xFQU4gUlRVU0JOZWVkUXVldWVCYWNrRm9yQWdnKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggQnVsa091dFBpcGVJZCk7Ci0KLXZvaWQgUlRNUFdyaXRlVHhJbmZvKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgICBzdHJ1Y3QgcnRfdHhpbmZvICpwVHhJbmZvLAotCQkgICAgIHUxNiBVU0JETUFwa3RMZW4sCi0JCSAgICAgSU4gQk9PTEVBTiBiV2l2LAotCQkgICAgIHU4IFF1ZXVlU2VsLCB1OCBOZXh0VmFsaWQsIHU4IFR4QnVyc3QpOwotCi0vKiAqLwotLyogRnVuY3Rpb24gUHJvdG90eXBlIGluIGNtbV9kYXRhX3VzYi5jICovCi0vKiAqLwotdTE2IFJ0bXBVU0JfV3JpdGVTdWJUeFJlc291cmNlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkgIHN0cnVjdCBydF90eF9ibGsgKnBUeEJsaywKLQkJCQkgIElOIEJPT0xFQU4gYklzTGFzdCwgdTE2ICpGcmVlTnVtYmVyKTsKLQotdTE2IFJ0bXBVU0JfV3JpdGVTaW5nbGVUeFJlc291cmNlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkgICAgIHN0cnVjdCBydF90eF9ibGsgKnBUeEJsaywKLQkJCQkgICAgIElOIEJPT0xFQU4gYklzTGFzdCwKLQkJCQkgICAgIHUxNiAqRnJlZU51bWJlcik7Ci0KLXUxNiBSdG1wVVNCX1dyaXRlRnJhZ1R4UmVzb3VyY2Uoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCSAgIHN0cnVjdCBydF90eF9ibGsgKnBUeEJsaywKLQkJCQkgICB1OCBmcmFnTnVtLCB1MTYgKkZyZWVOdW1iZXIpOwotCi11MTYgUnRtcFVTQl9Xcml0ZU11bHRpVHhSZXNvdXJjZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJICAgIHN0cnVjdCBydF90eF9ibGsgKnBUeEJsaywKLQkJCQkgICAgdTggZnJhbWVOdW0sIHUxNiAqRnJlZU51bWJlcik7Ci0KLXZvaWQgUnRtcFVTQl9GaW5hbFdyaXRlVHhSZXNvdXJjZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJICBzdHJ1Y3QgcnRfdHhfYmxrICpwVHhCbGssCi0JCQkJICB1MTYgdG90YWxNUERVU2l6ZSwgdTE2IFR4SWR4KTsKLQotdm9pZCBSdG1wVVNCRGF0YUxhc3RUeElkeChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgIHU4IFF1ZUlkeCwgdTE2IFR4SWR4KTsKLQotdm9pZCBSdG1wVVNCRGF0YUtpY2tPdXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJc3RydWN0IHJ0X3R4X2JsayAqcFR4QmxrLCB1OCBRdWVJZHgpOwotCi1pbnQgUnRtcFVTQk1nbXRLaWNrT3V0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgICAgIHU4IFF1ZUlkeCwKLQkJICAgICAgIHZvaWQgKnBQYWNrZXQsCi0JCSAgICAgICB1OCAqcFNyY0J1ZlZBLCB1MzIgU3JjQnVmTGVuKTsKLQotdm9pZCBSdG1wVVNCTnVsbEZyYW1lS2lja091dChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgIHU4IFF1ZUlkeCwKLQkJCSAgICAgdTggKnBOdWxsRnJhbWUsIHUzMiBmcmFtZUxlbik7Ci0KLXZvaWQgUnRtcFVzYlN0YUFzaWNGb3JjZVdha2V1cFRpbWVvdXQodm9pZCAqU3lzdGVtU3BlY2lmaWMxLAotCQkJCSAgICAgIHZvaWQgKkZ1bmN0aW9uQ29udGV4dCwKLQkJCQkgICAgICB2b2lkICpTeXN0ZW1TcGVjaWZpYzIsCi0JCQkJICAgICAgdm9pZCAqU3lzdGVtU3BlY2lmaWMzKTsKLQotdm9pZCBSVDI4eHhVc2JTdGFBc2ljRm9yY2VXYWtldXAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBJTiBCT09MRUFOIGJGcm9tVHgpOwotCi12b2lkIFJUMjh4eFVzYlN0YUFzaWNTbGVlcFRoZW5BdXRvV2FrZXVwKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkJIHUxNiBUYnR0TnVtVG9OZXh0V2FrZVVwKTsKLQotdm9pZCBSVDI4eHhVc2JNbG1lUmFkaW9PbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi12b2lkIFJUMjh4eFVzYk1sbWVSYWRpb09GRihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotI2VuZGlmIC8qIFJUTVBfTUFDX1VTQiAvLyAqLwotCi12b2lkIEFzaWNUdXJuT2ZmUkZDbGsoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1OCBDaGFubmVsKTsKLQotdm9pZCBBc2ljVHVybk9uUkZDbGsoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1OCBDaGFubmVsKTsKLQotI2lmZGVmIFJUTVBfVElNRVJfVEFTS19TVVBQT1JUCi1pbnQgUnRtcFRpbWVyUVRocmVhZChJTiB2b2lkICpDb250ZXh0KTsKLQotc3RydWN0IHJ0X3J0bXBfdGltZXJfdGFza19lbnRyeSAqUnRtcFRpbWVyUUluc2VydChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJCXN0cnVjdCBydF9yYWxpbmtfdGltZXIgKnBUaW1lcik7Ci0KLUJPT0xFQU4gUnRtcFRpbWVyUVJlbW92ZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgc3RydWN0IHJ0X3JhbGlua190aW1lciAqcFRpbWVyKTsKLQotdm9pZCBSdG1wVGltZXJRRXhpdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi12b2lkIFJ0bXBUaW1lclFJbml0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0jZW5kaWYgLyogUlRNUF9USU1FUl9UQVNLX1NVUFBPUlQgLy8gKi8KLQotdm9pZCBBc2ljU3RhQmJwVHVuaW5nKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLUJPT0xFQU4gU3RhQWRkTWFjVGFibGVFbnRyeShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcEVudHJ5LAotCQkJICAgIHU4IE1heFN1cHBvcnRlZFJhdGVJbjUwMEticHMsCi0JCQkgICAgc3RydWN0IHJ0X2h0X2NhcGFiaWxpdHlfaWUgKnBIdENhcGFiaWxpdHksCi0JCQkgICAgdTggSHRDYXBhYmlsaXR5TGVuLAotCQkJICAgIHN0cnVjdCBydF9hZGRfaHRfaW5mb19pZSAqcEFkZEh0SW5mbywKLQkJCSAgICB1OCBBZGRIdEluZm9MZW4sIHUxNiBDYXBhYmlsaXR5SW5mbyk7Ci0KLUJPT0xFQU4gQVVUSF9SZXFTZW5kKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgICBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpwRWxlbSwKLQkJICAgICBzdHJ1Y3QgcnRfcmFsaW5rX3RpbWVyICpwQXV0aFRpbWVyLAotCQkgICAgIGNoYXIgKnBTTU5hbWUsCi0JCSAgICAgdTE2IFNlcU5vLAotCQkgICAgIHU4ICpwTmV3RWxlbWVudCwgdW5zaWduZWQgbG9uZyBFbGVtZW50TGVuKTsKLQotdm9pZCBSVE1QX0luZGljYXRlTWVkaWFTdGF0ZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi12b2lkIFJlU3luY0JlYWNvblRpbWUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotdm9pZCBSVE1QU2V0QUdDSW5pdFZhbHVlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggQmFuZFdpZHRoKTsKLQotaW50IHJ0Mjh4eF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLWludCBydDI4eHhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQotI2RlZmluZSBWSVJUVUFMX0lGX0lOQyhfX3BBZCkgKChfX3BBZCktPlZpcnR1YWxJZkNudCsrKQotI2RlZmluZSBWSVJUVUFMX0lGX0RFQyhfX3BBZCkgKChfX3BBZCktPlZpcnR1YWxJZkNudC0tKQotI2RlZmluZSBWSVJUVUFMX0lGX05VTShfX3BBZCkgKChfX3BBZCktPlZpcnR1YWxJZkNudCkKLQotI2lmZGVmIExJTlVYCi1fX2lubGluZSBpbnQgVklSVFVBTF9JRl9VUChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0JaWYgKFZJUlRVQUxfSUZfTlVNKHBBZCkgPT0gMCkgewotCQlpZiAocnQyOHh4X29wZW4ocEFkLT5uZXRfZGV2KSAhPSAwKSB7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCJydDI4eHhfb3BlbiByZXR1cm4gZmFpbCFcbiIpKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCX0gZWxzZSB7Ci0JfQotCVZJUlRVQUxfSUZfSU5DKHBBZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLV9faW5saW5lIHZvaWQgVklSVFVBTF9JRl9ET1dOKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlWSVJUVUFMX0lGX0RFQyhwQWQpOwotCWlmIChWSVJUVUFMX0lGX05VTShwQWQpID09IDApCi0JCXJ0Mjh4eF9jbG9zZShwQWQtPm5ldF9kZXYpOwotCXJldHVybjsKLX0KLSNlbmRpZiAvKiBMSU5VWCAvLyAqLwotCi0vKgotCU9TIFJlbGF0ZWQgZnVuY2l0b24gcHJvdG90eXBlIGRlZmluaXRpb25zLgotCVRPRE86IE1heWJlIHdlIG5lZWQgdG8gbW92ZSB0aGVzZSBmdW5jdGlvbiBwcm90b3R5cGVzIHRvIG90aGVyIHByb3BlciBwbGFjZS4KLSovCi1pbnQgUnRtcE9TV3JpZWxlc3NFdmVudFNlbmQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgIHUzMiBldmVudFR5cGUsCi0JCQkgICAgaW50IGZsYWdzLAotCQkJICAgIHU4ICpwU3JjTWFjLAotCQkJICAgIHU4ICpwRGF0YSwgdTMyIGRhdGFMZW4pOwotCi1pbnQgUnRtcE9TTmV0RGV2QWRkclNldChzdHJ1Y3QgbmV0X2RldmljZSAqcE5ldERldiwgdTggKnBNYWNBZGRyKTsKLQotaW50IFJ0bXBPU05ldERldkF0dGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqcE5ldERldiwKLQkJICAgICAgIHN0cnVjdCBydF9ydG1wX29zX25ldGRldl9vcF9ob29rICpwRGV2T3BIb29rKTsKLQotdm9pZCBSdG1wT1NOZXREZXZDbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqcE5ldERldik7Ci0KLXZvaWQgUnRtcE9TTmV0RGV2RGV0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpwTmV0RGV2KTsKLQotaW50IFJ0bXBPU05ldERldkFsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICoqcE5ld05ldERldiwgdTMyIHByaXZEYXRhU2l6ZSk7Ci0KLXZvaWQgUnRtcE9TTmV0RGV2RnJlZShzdHJ1Y3QgbmV0X2RldmljZSAqcE5ldERldik7Ci0KLXN0cnVjdCBuZXRfZGV2aWNlICpSdG1wT1NOZXREZXZHZXRCeU5hbWUoc3RydWN0IG5ldF9kZXZpY2UgKnBOZXREZXYsIGNoYXIgKnBEZXZOYW1lKTsKLQotdm9pZCBSdG1wT1NOZXREZXZpY2VSZWZQdXQoc3RydWN0IG5ldF9kZXZpY2UgKnBOZXREZXYpOwotCi1zdHJ1Y3QgbmV0X2RldmljZSAqUnRtcE9TTmV0RGV2Q3JlYXRlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICBpbnQgZGV2VHlwZSwKLQkJCSAgICBpbnQgZGV2TnVtLAotCQkJICAgIGludCBwcml2TWVtU2l6ZSwgY2hhciAqcE5hbWVQcmVmaXgpOwotCi0vKgotCVRhc2sgb3BlcmF0aW9uIHJlbGF0ZWQgZnVuY3Rpb24gcHJvdG90eXBlcwotKi8KLXZvaWQgUnRtcE9TVGFza0N1c3RvbWl6ZShzdHJ1Y3QgcnRfcnRtcF9vc190YXNrICpwVGFzayk7Ci0KLWludCBSdG1wT1NUYXNrTm90aWZ5VG9FeGl0KHN0cnVjdCBydF9ydG1wX29zX3Rhc2sgKnBUYXNrKTsKLQotaW50IFJ0bXBPU1Rhc2tLaWxsKHN0cnVjdCBydF9ydG1wX29zX3Rhc2sgKnBUYXNrKTsKLQotaW50IFJ0bXBPU1Rhc2tJbml0KHN0cnVjdCBydF9ydG1wX29zX3Rhc2sgKnBUYXNrLAotCQkJICAgY2hhciAqcFRhc2tOYW1lLCB2b2lkICogcFByaXYpOwotCi1pbnQgUnRtcE9TVGFza0F0dGFjaChzdHJ1Y3QgcnRfcnRtcF9vc190YXNrICpwVGFzaywKLQkJCSAgICAgSU4gaW50ICgqZm4pICh2b2lkICopLCBJTiB2b2lkICphcmcpOwotCi0vKgotCUZpbGUgb3BlcmF0aW9uIHJlbGF0ZWQgZnVuY3Rpb24gcHJvdG90eXBlcwotKi8KLXN0cnVjdCBmaWxlICpSdG1wT1NGaWxlT3BlbihJTiBjaGFyICpwUGF0aCwgSU4gaW50IGZsYWcsIElOIGludCBtb2RlKTsKLQotaW50IFJ0bXBPU0ZpbGVDbG9zZShzdHJ1Y3QgZmlsZSAqb3NmZCk7Ci0KLXZvaWQgUnRtcE9TRmlsZVNlZWsoc3RydWN0IGZpbGUgKm9zZmQsIElOIGludCBvZmZzZXQpOwotCi1pbnQgUnRtcE9TRmlsZVJlYWQoc3RydWN0IGZpbGUgKm9zZmQsIElOIGNoYXIgKnBEYXRhUHRyLCBJTiBpbnQgcmVhZExlbik7Ci0KLWludCBSdG1wT1NGaWxlV3JpdGUoc3RydWN0IGZpbGUgKm9zZmQsIElOIGNoYXIgKnBEYXRhUHRyLCBJTiBpbnQgd3JpdGVMZW4pOwotCi0jZW5kaWYgLyogX19SVE1QX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydG1wX2NoaXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcF9jaGlwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhZGYyY2QuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydG1wX2NoaXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1OCArMCwwIEBACi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFJhbGluayBUZWNoIEluYy4KLSAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKLSAqIEhzaW5jaHUgQ291bnR5IDMwMiwKLSAqIFRhaXdhbiwgUi5PLkMuCi0gKgotICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotCU1vZHVsZSBOYW1lOgotCXJ0bXBfY2hpcC5oCi0KLQlBYnN0cmFjdDoKLQlSYWxpbmsgV2lyZWxlc3MgQ2hpcCByZWxhdGVkIGRlZmluaXRpb24gJiBzdHJ1Y3R1cmVzCi0KLQlSZXZpc2lvbiBIaXN0b3J5OgotCVdobwkJCVdoZW4JCSAgV2hhdAotCS0tLS0tLS0tCS0tLS0tLS0tLS0JICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotCi0jaWZuZGVmCV9fUlRNUF9DSElQX0hfXwotI2RlZmluZQlfX1JUTVBfQ0hJUF9IX18KLQotI2luY2x1ZGUgInJ0bXBfdHlwZS5oIgotCi0jaWZkZWYgUlQyODYwCi0jaW5jbHVkZSAiY2hpcC9ydDI4NjAuaCIKLSNlbmRpZiAvKiBSVDI4NjAgLy8gKi8KLSNpZmRlZiBSVDI4NzAKLSNpbmNsdWRlICJjaGlwL3J0Mjg3MC5oIgotI2VuZGlmIC8qIFJUMjg3MCAvLyAqLwotI2lmZGVmIFJUMzA3MAotI2luY2x1ZGUgImNoaXAvcnQzMDcwLmgiCi0jZW5kaWYgLyogUlQzMDcwIC8vICovCi0jaWZkZWYgUlQzMDkwCi0jaW5jbHVkZSAiY2hpcC9ydDMwOTAuaCIKLSNlbmRpZiAvKiBSVDMwOTAgLy8gKi8KLQotLyogV2Ugd2lsbCBoYXZlIGEgY29zdCBkb3duIHZlcnNpb24gd2hpY2ggbWFjIHZlcnNpb24gaXMgMHgzMDkweHh4eCAqLwotLyogKi8KLS8qIFJUMzA5MEEgZmFjdHMgKi8KLS8qICovCi0vKiBhKSAyLjQgR0h6ICovCi0vKiBiKSBSZXBsYWNlbWVudCBmb3IgUlQzMDkwICovCi0vKiBjKSBJbnRlcm5hbCBMTkEgKi8KLS8qIGQpIEludGVyZmVyZW5jZSBvdmVyIGNoYW5uZWwgIzE0ICovCi0vKiBlKSBOZXcgQkJQIGZlYXR1cmVzIChlLmcuLCBTSUcgcmUtbW9kdWxhdGlvbikgKi8KLS8qICovCi0jZGVmaW5lIElTX1JUMzA5MEEoX3BBZCkJCQkJKCgoKF9wQWQpLT5NQUNWZXJzaW9uICYgMHhmZmZmMDAwMCkgPT0gMHgzMDkwMDAwMCkpCi0KLS8qIFdlIHdpbGwgaGF2ZSBhIGNvc3QgZG93biB2ZXJzaW9uIHdoaWNoIG1hYyB2ZXJzaW9uIGlzIDB4MzA5MHh4eHggKi8KLSNkZWZpbmUgSVNfUlQzMDkwKF9wQWQpCQkJCSgoKChfcEFkKS0+TUFDVmVyc2lvbiAmIDB4ZmZmZjAwMDApID09IDB4MzA3MTAwMDApIHx8IChJU19SVDMwOTBBKF9wQWQpKSkKLQotI2RlZmluZSBJU19SVDMwNzAoX3BBZCkJCSgoKF9wQWQpLT5NQUNWZXJzaW9uICYgMHhmZmZmMDAwMCkgPT0gMHgzMDcwMDAwMCkKLSNkZWZpbmUgSVNfUlQzMDcxKF9wQWQpCQkoKChfcEFkKS0+TUFDVmVyc2lvbiAmIDB4ZmZmZjAwMDApID09IDB4MzA3MTAwMDApCi0jZGVmaW5lIElTX1JUMjA3MChfcEFkKQkJKCgoX3BBZCktPlJmSWNUeXBlID09IFJGSUNfMjAyMCkgfHwgKChfcEFkKS0+RUZ1c2VUYWcgPT0gMHgyNykpCi0KLSNkZWZpbmUgSVNfUlQzMHh4KF9wQWQpCQkoKChfcEFkKS0+TUFDVmVyc2lvbiAmIDB4ZmZmMDAwMDApID09IDB4MzA3MDAwMDB8fElTX1JUMzA5MEEoX3BBZCkpCi0vKiNkZWZpbmUgSVNfUlQzMDVYKF9wQWQpICAgICAgICAgICAgICAgKChfcEFkKS0+TUFDVmVyc2lvbiA9PSAweDI4NzIwMjAwKSAqLwotCi0vKiBSVDM1NzIsIDM1OTIsIDM1NjIsIDMwNjIgc2hhcmUgdGhlIHNhbWUgTUFDIHZlcnNpb24gKi8KLSNkZWZpbmUgSVNfUlQzNTcyKF9wQWQpCQkoKChfcEFkKS0+TUFDVmVyc2lvbiAmIDB4ZmZmZjAwMDApID09IDB4MzU3MjAwMDApCi0jZGVmaW5lIElTX1ZFUlNJT05fQkVGT1JFX0YoX3BBZCkJCQkoKChfcEFkKS0+TUFDVmVyc2lvbiYweGZmZmYpIDw9IDB4MDIxMSkKLS8qIEYgdmVyc2lvbiBpcyAweDAyMTIsIEUgdmVyc2lvbiBpcyAweDAyMTEuIDMwOXggY2FuIHNhdmUgbW9yZSBwb3dlciBhZnRlciBGIHZlcnNpb24uICovCi0jZGVmaW5lIElTX1ZFUlNJT05fQUZURVJfRihfcEFkKQkJCSgoKChfcEFkKS0+TUFDVmVyc2lvbiYweGZmZmYpID49IDB4MDIxMikgfHwgKCgoX3BBZCktPmIzMDkwRVNwZWNpYWxDaGlwID09IFRSVUUpKSkKLS8qICovCi0vKiBSVDMzOTAgZmFjdHMgKi8KLS8qICovCi0vKiBhKSBCYXNlIG9uIFJUMzA5MCAoUkYgSUM6IFJUMzAyMCkgKi8KLS8qIGIpIDIuNCBHSHogKi8KLS8qIGMpIDF4MSAqLwotLyogZCkgU2luZ2xlIGNoaXAgKi8KLS8qIGUpIEludGVybmFsIGNvbXBvbmVudHM6IFBBIGFuZCBMTkEgKi8KLS8qICovCi0vKlJUMzM5MCxSVDMzNzAgKi8KLSNkZWZpbmUgSVNfUlQzMzkwKF9wQWQpCQkJCSgoKF9wQWQpLT5NQUNWZXJzaW9uICYgMHhGRkZGMDAwMCkgPT0gMHgzMzkwMDAwMCkKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBQQ0kgcmVnaXN0ZXJzIC0gYmFzZSBhZGRyZXNzIDB4MDAwMCAqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0jZGVmaW5lIENISVBfUENJX0NGRwkJMHgwMDAwCi0jZGVmaW5lIENISVBfUENJX0VFQ1RSTAkJMHgwMDA0Ci0jZGVmaW5lIENISVBfUENJX01DVUNUUkwJMHgwMDA4Ci0KLSNkZWZpbmUgT1BUXzE0CQkJMHgxMTQKLQotI2RlZmluZSBSRVRSWV9MSU1JVAkJMTAKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBCQlAgJiBSRiAgICAgZGVmaW5pdGlvbiAqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0jZGVmaW5lCUJVU1kJCSAgICAgICAgICAgICAgICAxCi0jZGVmaW5lCUlETEUJCSAgICAgICAgICAgICAgICAwCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogRUVQUk9NIGRlZmluaXRpb24gKi8KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotI2RlZmluZSBFRURPICAgICAgICAgICAgICAgICAgICAgICAgMHgwOAotI2RlZmluZSBFRURJICAgICAgICAgICAgICAgICAgICAgICAgMHgwNAotI2RlZmluZSBFRUNTICAgICAgICAgICAgICAgICAgICAgICAgMHgwMgotI2RlZmluZSBFRVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMQotI2RlZmluZSBFRVJMICAgICAgICAgICAgICAgICAgICAgICAgMHg4MAotCi0jZGVmaW5lIEVFUFJPTV9XUklURV9PUENPREUgICAgICAgICAweDA1Ci0jZGVmaW5lIEVFUFJPTV9SRUFEX09QQ09ERSAgICAgICAgICAweDA2Ci0jZGVmaW5lIEVFUFJPTV9FV0RTX09QQ09ERSAgICAgICAgICAweDEwCi0jZGVmaW5lIEVFUFJPTV9FV0VOX09QQ09ERSAgICAgICAgICAweDEzCi0KLSNkZWZpbmUgTlVNX0VFUFJPTV9CQlBfUEFSTVMJCTE5CS8qIEluY2x1ZGUgTklDIENvbmZpZyAwLCAxLCBDUiwgVFggQUxDIHN0ZXAsIEJCUHMgKi8KLSNkZWZpbmUgTlVNX0VFUFJPTV9UWF9HX1BBUk1TCQk3Ci0jZGVmaW5lIEVFUFJPTV9OSUMxX09GRlNFVCAgICAgICAgICAweDM0CS8qIFRoZSBhZGRyZXNzIGlzIGZyb20gTklDIGNvbmZpZyAwLCBub3QgQkJQIHJlZ2lzdGVyIElEICovCi0jZGVmaW5lIEVFUFJPTV9OSUMyX09GRlNFVCAgICAgICAgICAweDM2CS8qIFRoZSBhZGRyZXNzIGlzIGZyb20gTklDIGNvbmZpZyAwLCBub3QgQkJQIHJlZ2lzdGVyIElEICovCi0jZGVmaW5lIEVFUFJPTV9CQlBfQkFTRV9PRkZTRVQJCTB4ZjAJLyogVGhlIGFkZHJlc3MgaXMgZnJvbSBOSUMgY29uZmlnIDAsIG5vdCBCQlAgcmVnaXN0ZXIgSUQgKi8KLSNkZWZpbmUgRUVQUk9NX0dfVFhfUFdSX09GRlNFVAkJMHg1MgotI2RlZmluZSBFRVBST01fR19UWDJfUFdSX09GRlNFVAkJMHg2MAotI2RlZmluZSBFRVBST01fTEVEMV9PRkZTRVQJCQkweDNjCi0jZGVmaW5lIEVFUFJPTV9MRUQyX09GRlNFVAkJCTB4M2UKLSNkZWZpbmUgRUVQUk9NX0xFRDNfT0ZGU0VUCQkJMHg0MAotI2RlZmluZSBFRVBST01fTE5BX09GRlNFVAkJCTB4NDQKLSNkZWZpbmUgRUVQUk9NX1JTU0lfQkdfT0ZGU0VUCQkweDQ2Ci0jZGVmaW5lIEVFUFJPTV9UWE1JWEVSX0dBSU5fMl80RwkweDQ4Ci0jZGVmaW5lIEVFUFJPTV9SU1NJX0FfT0ZGU0VUCQkweDRhCi0jZGVmaW5lIEVFUFJPTV9UWE1JWEVSX0dBSU5fNUcJCTB4NGMKLSNkZWZpbmUgRUVQUk9NX0RFRklORV9NQVhfVFhQV1IJCTB4NGUKLSNkZWZpbmUgRUVQUk9NX1RYUE9XRVJfQllSQVRFXzIwTUhaXzJfNEcJMHhkZQkvKiAyME1IWiAyLjRHIHR4IHBvd2VyLiAqLwotI2RlZmluZSBFRVBST01fVFhQT1dFUl9CWVJBVEVfNDBNSFpfMl80RwkweGVlCS8qIDQwTUhaIDIuNEcgdHggcG93ZXIuICovCi0jZGVmaW5lIEVFUFJPTV9UWFBPV0VSX0JZUkFURV8yME1IWl81RwkJMHhmYQkvKiAyME1IWiA1RyB0eCBwb3dlci4gKi8KLSNkZWZpbmUgRUVQUk9NX1RYUE9XRVJfQllSQVRFXzQwTUhaXzVHCQkweDEwYQkvKiA0ME1IWiA1RyB0eCBwb3dlci4gKi8KLSNkZWZpbmUgRUVQUk9NX0FfVFhfUFdSX09GRlNFVCAgICAgIDB4NzgKLSNkZWZpbmUgRUVQUk9NX0FfVFgyX1BXUl9PRkZTRVQgICAgICAweGE2Ci0vKiNkZWZpbmUgRUVQUk9NX0phcGFuX1RYX1BXUl9PRkZTRVQgICAgICAweDkwIC8vIDgwMi4xMWogKi8KLS8qI2RlZmluZSBFRVBST01fSmFwYW5fVFgyX1BXUl9PRkZTRVQgICAgICAweGJlICovCi0vKiNkZWZpbmUgRUVQUk9NX1RTU0lfUkVGX09GRlNFVCAgICAgICAgMHg1NCAqLwotLyojZGVmaW5lIEVFUFJPTV9UU1NJX0RFTFRBX09GRlNFVCAgICAgIDB4MjQgKi8KLS8qI2RlZmluZSBFRVBST01fQ0NLX1RYX1BXUl9PRkZTRVQgIDB4NjIgKi8KLS8qI2RlZmluZSBFRVBST01fQ0FMSUJSQVRFX09GRlNFVCAgICAgICAweDdjICovCi0jZGVmaW5lIEVFUFJPTV9WRVJTSU9OX09GRlNFVCAgICAgICAweDAyCi0jZGVmaW5lIEVFUFJPTV9GUkVRX09GRlNFVAkJCTB4M2EKLSNkZWZpbmUgRUVQUk9NX1RYUE9XRVJfQllSQVRFCTB4ZGUJLyogMjBNSFogcG93ZXIuICovCi0jZGVmaW5lIEVFUFJPTV9UWFBPV0VSX0RFTFRBCQkweDUwCS8qIDIwTUhaIEFORCA0MCBNSFogdXNlIGRpZmZlcmVudCBwb3dlci4gVGhpcyBpcyBkZWx0YSBpbiA0ME1IWi4gKi8KLSNkZWZpbmUgVkFMSURfRUVQUk9NX1ZFUlNJT04gICAgICAgIDEKLQotLyoKLSAgKiAgIEVFUFJPTSBvcGVyYXRpb24gcmVsYXRlZCBtYXJjb3MKLSAgKi8KLSNkZWZpbmUgUlQyOHh4X0VFUFJPTV9SRUFEMTYoX3BBZCwgX29mZnNldCwgX3ZhbHVlKQkJCVwKLQkoX3BBZCktPmNoaXBPcHMuZWVyZWFkKChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICopKF9wQWQpLCAodTE2KShfb2Zmc2V0KSwgKHUxNiAqKSYoX3ZhbHVlKSkKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogIEUyUFJPTSBkYXRhIGxheW91dCAqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKiAqLwotLyogTUNVX0xFRENTOiBNQ1UgTEVEIENvbnRyb2wgU2V0dGluZy4gKi8KLS8qICovCi10eXBlZGVmIHVuaW9uIF9NQ1VfTEVEQ1NfU1RSVUMgewotCXN0cnVjdCB7Ci0JCXU4IExlZE1vZGU6NzsKLQkJdTggUG9sYXJpdHk6MTsKLQl9IGZpZWxkOwotCXU4IHdvcmQ7Ci19IE1DVV9MRURDU19TVFJVQywgKlBNQ1VfTEVEQ1NfU1RSVUM7Ci0KLS8qICovCi0vKiBFRVBST00gYW50ZW5uYSBzZWxlY3QgZm9ybWF0ICovCi0vKiAqLwotdHlwZWRlZiB1bmlvbiBfRUVQUk9NX0FOVEVOTkFfU1RSVUMgewotCXN0cnVjdCB7Ci0JCXUxNiBSeFBhdGg6NDsJLyogMTogMVIsIDI6IDJSLCAzOiAzUiAqLwotCQl1MTYgVHhQYXRoOjQ7CS8qIDE6IDFULCAyOiAyVCAqLwotCQl1MTYgUmZJY1R5cGU6NDsJLyogc2VlIEUyUFJPTSBkb2N1bWVudCAqLwotCQl1MTYgUnN2OjQ7Ci0JfSBmaWVsZDsKLQl1MTYgd29yZDsKLX0gRUVQUk9NX0FOVEVOTkFfU1RSVUMsICpQRUVQUk9NX0FOVEVOTkFfU1RSVUM7Ci0KLXR5cGVkZWYgdW5pb24gX0VFUFJPTV9OSUNfQ0lORklHMl9TVFJVQyB7Ci0Jc3RydWN0IHsKLQkJdTE2IEhhcmR3YXJlUmFkaW9Db250cm9sOjE7CS8qIDE6ZW5hYmxlLCAwOmRpc2FibGUgKi8KLQkJdTE2IER5bmFtaWNUeEFnY0NvbnRyb2w6MTsJLyogKi8KLQkJdTE2IEV4dGVybmFsTE5BRm9yRzoxOwkvKiAqLwotCQl1MTYgRXh0ZXJuYWxMTkFGb3JBOjE7CS8qIGV4dGVybmFsIExOQSBlbmFibGUgZm9yIDIuNEcgKi8KLQkJdTE2IENhcmRidXNBY2NlbGVyYXRpb246MTsJLyogISBOT1RFOiAwIC0gZW5hYmxlLCAxIC0gZGlzYWJsZSAqLwotCQl1MTYgQlc0ME1TaWRlYmFuZEZvckc6MTsKLQkJdTE2IEJXNDBNU2lkZWJhbmRGb3JBOjE7Ci0JCXUxNiBFbmFibGVXUFNQQkM6MTsJLyogV1BTIFBCQyBDb250cm9sIGJpdCAqLwotCQl1MTYgQlc0ME1BdmFpbEZvckc6MTsJLyogMDplbmFibGUsIDE6ZGlzYWJsZSAqLwotCQl1MTYgQlc0ME1BdmFpbEZvckE6MTsJLyogMDplbmFibGUsIDE6ZGlzYWJsZSAqLwotCQl1MTYgUnN2MToxOwkvKiBtdXN0IGJlIDAgKi8KLQkJdTE2IEFudERpdmVyc2l0eToxOwkvKiBBbnRlbm5hIGRpdmVyc2l0eSAqLwotCQl1MTYgUnN2MjozOwkvKiBtdXN0IGJlIDAgKi8KLQkJdTE2IERBQ1Rlc3RCaXQ6MTsJLyogY29udHJvbCBpZiBkcml2ZXIgc2hvdWxkIHBhdGNoIHRoZSBEQUMgaXNzdWUgKi8KLQl9IGZpZWxkOwotCXUxNiB3b3JkOwotfSBFRVBST01fTklDX0NPTkZJRzJfU1RSVUMsICpQRUVQUk9NX05JQ19DT05GSUcyX1NUUlVDOwotCi0vKiAqLwotLyogVFhfUFdSIFZhbHVlIHZhbGlkIHJhbmdlIDB4RkEoLTYpIH4gMHgyNCgzNikgKi8KLS8qICovCi10eXBlZGVmIHVuaW9uIF9FRVBST01fVFhfUFdSX1NUUlVDIHsKLQlzdHJ1Y3QgewotCQljaGFyIEJ5dGUwOwkvKiBMb3cgQnl0ZSAqLwotCQljaGFyIEJ5dGUxOwkvKiBIaWdoIEJ5dGUgKi8KLQl9IGZpZWxkOwotCXUxNiB3b3JkOwotfSBFRVBST01fVFhfUFdSX1NUUlVDLCAqUEVFUFJPTV9UWF9QV1JfU1RSVUM7Ci0KLXR5cGVkZWYgdW5pb24gX0VFUFJPTV9WRVJTSU9OX1NUUlVDIHsKLQlzdHJ1Y3QgewotCQl1OCBGYWVSZWxlYXNlTnVtYmVyOwkvKiBMb3cgQnl0ZSAqLwotCQl1OCBWZXJzaW9uOwkvKiBIaWdoIEJ5dGUgKi8KLQl9IGZpZWxkOwotCXUxNiB3b3JkOwotfSBFRVBST01fVkVSU0lPTl9TVFJVQywgKlBFRVBST01fVkVSU0lPTl9TVFJVQzsKLQotdHlwZWRlZiB1bmlvbiBfRUVQUk9NX0xFRF9TVFJVQyB7Ci0Jc3RydWN0IHsKLQkJdTE2IFBvbGFyaXR5UkRZX0c6MTsJLyogUG9sYXJpdHkgUkRZX0cgc2V0dGluZy4gKi8KLQkJdTE2IFBvbGFyaXR5UkRZX0E6MTsJLyogUG9sYXJpdHkgUkRZX0Egc2V0dGluZy4gKi8KLQkJdTE2IFBvbGFyaXR5QUNUOjE7CS8qIFBvbGFyaXR5IEFDVCBzZXR0aW5nLiAqLwotCQl1MTYgUG9sYXJpdHlHUElPXzA6MTsJLyogUG9sYXJpdHkgR1BJTyMwIHNldHRpbmcuICovCi0JCXUxNiBQb2xhcml0eUdQSU9fMToxOwkvKiBQb2xhcml0eSBHUElPIzEgc2V0dGluZy4gKi8KLQkJdTE2IFBvbGFyaXR5R1BJT18yOjE7CS8qIFBvbGFyaXR5IEdQSU8jMiBzZXR0aW5nLiAqLwotCQl1MTYgUG9sYXJpdHlHUElPXzM6MTsJLyogUG9sYXJpdHkgR1BJTyMzIHNldHRpbmcuICovCi0JCXUxNiBQb2xhcml0eUdQSU9fNDoxOwkvKiBQb2xhcml0eSBHUElPIzQgc2V0dGluZy4gKi8KLQkJdTE2IExlZE1vZGU6NTsJLyogTGVkIG1vZGUuICovCi0JCXUxNiBSc3ZkOjM7CS8qIFJlc2VydmVkICovCi0JfSBmaWVsZDsKLQl1MTYgd29yZDsKLX0gRUVQUk9NX0xFRF9TVFJVQywgKlBFRVBST01fTEVEX1NUUlVDOwotCi10eXBlZGVmIHVuaW9uIF9FRVBST01fVFhQT1dFUl9ERUxUQV9TVFJVQyB7Ci0Jc3RydWN0IHsKLQkJdTggRGVsdGFWYWx1ZTo2OwkvKiBUeCBQb3dlciBkYWx0YSB2YWx1ZSAoTUFYPTQpICovCi0JCXU4IFR5cGU6MTsJLyogMTogcGx1cyB0aGUgZGVsdGEgdmFsdWUsIDA6IG1pbnVzIHRoZSBkZWx0YSB2YWx1ZSAqLwotCQl1OCBUeFBvd2VyRW5hYmxlOjE7CS8qIEVuYWJsZSAqLwotCX0gZmllbGQ7Ci0JdTggdmFsdWU7Ci19IEVFUFJPTV9UWFBPV0VSX0RFTFRBX1NUUlVDLCAqUEVFUFJPTV9UWFBPV0VSX0RFTFRBX1NUUlVDOwotCi0jZW5kaWYgLyogX19SVE1QX0NISVBfSF9fIC8vICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0bXBfY2tpcG1pYy5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydG1wX2NraXBtaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZmOTM1ZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0bXBfY2tpcG1pYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLQlNb2R1bGUgTmFtZToKLQlydG1wX2NraXBtaWMuaAotCi0JQWJzdHJhY3Q6Ci0KLQlSZXZpc2lvbiBIaXN0b3J5OgotCVdobwkJCVdoZW4JCQlXaGF0Ci0JLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCU5hbWUJCURhdGUJCQlNb2RpZmljYXRpb24gbG9ncwotKi8KLSNpZm5kZWYJX19SVE1QX0NLSVBNSUNfSF9fCi0jZGVmaW5lCV9fUlRNUF9DS0lQTUlDX0hfXwotCi1zdHJ1Y3QgcnRfbWljX2NvbnRleHQgewotCS8qIC0tLSBNTUggY29udGV4dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCXU4IENLWzE2XTsJCS8qIHRoZSBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCXU4IGNvZWZmaWNpZW50WzE2XTsJLyogY3VycmVudCBhZXMgY291bnRlciBtb2RlIGNvZWZmaWNpZW50cyAgICAgICovCi0JdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtOwkvKiBhY2N1bXVsYXRlZCBtaWMsIHJlZHVjZWQgdG8gdTMyIGluIGZpbmFsKCkgKi8KLQl1MzIgcG9zaXRpb247CQkvKiBjdXJyZW50IHBvc2l0aW9uIChieXRlIG9mZnNldCkgaW4gbWVzc2FnZSAgKi8KLQl1OCBwYXJ0WzRdOwkJLyogZm9yIGNvbnZlcnNpb24gb2YgbWVzc2FnZSB0byB1MzIgZm9yIG1taCAgICovCi19OwotCi12b2lkIHhvcl8xMjgodTggKmEsIHU4ICpiLCB1OCAqb3V0KTsKLQotdTggUlRNUENraXBTYm94KHU4IGEpOwotCi12b2lkIHhvcl8zMih1OCAqYSwgdTggKmIsIHU4ICpvdXQpOwotCi12b2lkIG5leHRfa2V5KHU4ICprZXksIGludCByb3VuZCk7Ci0KLXZvaWQgYnl0ZV9zdWIodTggKmluLCB1OCAqb3V0KTsKLQotdm9pZCBzaGlmdF9yb3codTggKmluLCB1OCAqb3V0KTsKLQotdm9pZCBtaXhfY29sdW1uKHU4ICppbiwgdTggKm91dCk7Ci0KLSNlbmRpZiAvKl9fUlRNUF9DS0lQTUlDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydG1wX2RlZi5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydG1wX2RlZi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWM2MTdlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcF9kZWYuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0MjcgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSAgICBNb2R1bGUgTmFtZToKLSAgICBydG1wX2RlZi5oCi0KLSAgICBBYnN0cmFjdDoKLSAgICBNaW5pcG9ydCByZWxhdGVkIGRlZmluaXRpb24gaGVhZGVyCi0KLSAgICBSZXZpc2lvbiBIaXN0b3J5OgotICAgIFdobyAgICAgICAgCSAJV2hlbiAgICAgICAgICAJV2hhdAotICAgIC0tLS0tLS0tICAgIC0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIFBhdWwgTGluICAgIAkwOC0wMS0yMDAyICAgIAljcmVhdGVkCi0gICAgSm9obiBDaGFuZyAgCTA4LTA1LTIwMDMgICAgCWFkZCBkZWZpbml0aW9uIGZvciAxMWcgJiBvdGhlciBkcmFmdHMKLSAgICBKdXN0aW4gUC4gTWF0dG9jawkxMS8wNy8yMDEwCUZpeCBzb21lIHR5cG9zCi0qLwotI2lmbmRlZiBfX1JUTVBfREVGX0hfXwotI2RlZmluZSBfX1JUTVBfREVGX0hfXwotCi0jaW5jbHVkZSAib2lkLmgiCi0KLS8qICovCi0vKiAgRGVidWcgaW5mb3JtYXRpb24gdmVyYm9zaXR5OiBsb3dlciB2YWx1ZXMgaW5kaWNhdGUgaGlnaGVyIHVyZ2VuY3kgKi8KLS8qICovCi0jZGVmaW5lIFJUX0RFQlVHX09GRiAgICAgICAgMAotI2RlZmluZSBSVF9ERUJVR19FUlJPUiAgICAgIDEKLSNkZWZpbmUgUlRfREVCVUdfV0FSTiAgICAgICAyCi0jZGVmaW5lIFJUX0RFQlVHX1RSQUNFICAgICAgMwotI2RlZmluZSBSVF9ERUJVR19JTkZPICAgICAgIDQKLSNkZWZpbmUgUlRfREVCVUdfTE9VRCAgICAgICA1Ci0KLSNkZWZpbmUgTklDX1RBRyAgICAgICAgICAgICAoKHVuc2lnbmVkIGxvbmcpJzA2ODInKQotI2RlZmluZSBOSUNfREJHX2NoYXIgICAgICAoIioqUlQyOHh4KioiKQotCi0jaWZkZWYgUlRNUF9NQUNfVVNCCi0jZGVmaW5lIFRYX1JJTkdfU0laRSAgICAgICAgICAgIDgJLyogMSAqLwotI2RlZmluZSBQUklPX1JJTkdfU0laRSAgICAgICAgICA4Ci0jZGVmaW5lIE1HTVRfUklOR19TSVpFCQkzMgkvKiBQUklPX1JJTkdfU0laRSAqLwotI2RlZmluZSBSWF9SSU5HX1NJWkUgICAgICAgICAgICA4Ci0jZGVmaW5lIE1BWF9UWF9QUk9DRVNTICAgICAgICAgIDQKLSNkZWZpbmUgTE9DQUxfVFhCVUZfU0laRSAgICAgICAgMjA0OAotI2VuZGlmIC8qIFJUTVBfTUFDX1VTQiAvLyAqLwotCi0vKiNkZWZpbmUgUEFDS0VEICovCi0KLSNkZWZpbmUgUkFMSU5LXzI4ODNfVkVSU0lPTgkJKCh1MzIpMHgyODgzMDMwMCkKLSNkZWZpbmUgUkFMSU5LXzI4ODBFX1ZFUlNJT04JKCh1MzIpMHgyODcyMDIwMCkKLSNkZWZpbmUgUkFMSU5LXzMwNzBfVkVSU0lPTgkJKCh1MzIpMHgzMDcwMDIwMCkKLQotI2RlZmluZSBNQVhfUlhfUEtUX0xFTgkxNTIwCi0KLS8qICovCi0vKiBFbnRyeSBudW1iZXIgZm9yIGVhY2ggRE1BIGRlc2NyaXB0b3IgcmluZyAqLwotLyogKi8KLQotI2lmZGVmIFJUTVBfTUFDX1BDSQotI2RlZmluZSBUWF9SSU5HX1NJWkUgICAgICAgICAgICA2NAkvKjY0ICovCi0jZGVmaW5lIE1HTVRfUklOR19TSVpFICAgICAgICAgIDEyOAotI2RlZmluZSBSWF9SSU5HX1NJWkUgICAgICAgICAgICAxMjgJLyo2NCAqLwotI2RlZmluZSBNQVhfVFhfUFJPQ0VTUyAgICAgICAgICBUWF9SSU5HX1NJWkUJLyo4ICovCi0jZGVmaW5lIE1BWF9ETUFfRE9ORV9QUk9DRVNTICAgIFRYX1JJTkdfU0laRQotI2RlZmluZSBNQVhfVFhfRE9ORV9QUk9DRVNTICAgICBUWF9SSU5HX1NJWkUJLyo4ICovCi0jZGVmaW5lIExPQ0FMX1RYQlVGX1NJWkUgICAgICAgIDIKLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLQotI2RlZmluZSBNQVhfUlhfUFJPQ0VTUyAgICAgICAgICAxMjgJLyo2NCAvLzMyICovCi0jZGVmaW5lIE5VTV9PRl9MT0NBTF9UWEJVRiAgICAgIDIKLSNkZWZpbmUgVFhEX1NJWkUgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgVFhXSV9TSVpFICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgUlhEX1NJWkUgICAgICAgICAgICAgICAJMTYKLSNkZWZpbmUgUlhXSV9TSVpFICAgICAgICAgICAgIAkxNgotLyogVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkUgKyA4MDIuMTEgSGVhZGVyIFNpemUgKyBBTVNEVSBzdWIgZnJhbWUgaGVhZGVyICovCi0jZGVmaW5lIFRYX0RNQV8xU1RfQlVGRkVSX1NJWkUgIDk2CS8qIG9ubHkgdGhlIDFzdCBwaHlzaWNhbCBidWZmZXIgaXMgcHJlLWFsbG9jYXRlZCAqLwotI2RlZmluZSBNR01UX0RNQV9CVUZGRVJfU0laRSAgICAxNTM2CS8qMjA0OCAqLwotI2RlZmluZSBSWF9CVUZGRVJfQUdHUkVTSVpFICAgICAzODQwCS8qMzkwNCAvLzM5NjggLy80MDk2IC8vMjA0OCAvLzQwOTYgKi8KLSNkZWZpbmUgUlhfQlVGRkVSX05PUk1TSVpFICAgICAgMzg0MAkvKjM5MDQgLy8zOTY4IC8vNDA5NiAvLzIwNDggLy80MDk2ICovCi0jZGVmaW5lIFRYX0JVRkZFUl9OT1JNU0laRQkJUlhfQlVGRkVSX05PUk1TSVpFCi0jZGVmaW5lIE1BWF9GUkFNRV9TSVpFICAgICAgICAgIDIzNDYJLyogTWF4aW11bSA4MDIuMTEgZnJhbWUgc2l6ZSAqLwotI2RlZmluZSBNQVhfQUdHUkVHQVRJT05fU0laRSAgICAzODQwCS8qMzkwNCAvLzM5NjggLy80MDk2ICovCi0jZGVmaW5lIE1BWF9OVU1fT0ZfVFVQTEVfQ0FDSEUgIDIKLSNkZWZpbmUgTUFYX01DQVNUX0xJU1RfU0laRSAgICAgMzIKLSNkZWZpbmUgTUFYX0xFTl9PRl9WRU5ET1JfREVTQyAgNjQKLS8qI2RlZmluZSBNQVhfU0laRV9PRl9NQ0FTVF9QU1EgICAoTlVNX09GX0xPQ0FMX1RYQlVGID4+IDIpIC8vIEFQIHdvbid0IHNwZW5kIG1vcmUgdGhhbiAxLzQgb2YgdG90YWwgYnVmZmVycyBvbiBNL0JDQVNUIFBTUSAqLwotI2RlZmluZSBNQVhfU0laRV9PRl9NQ0FTVF9QU1EgICAgICAgICAgICAgICAzMgotCi0jZGVmaW5lIE1BWF9SWF9QUk9DRVNTX0NOVAkoUlhfUklOR19TSVpFKQotCi0vKgotCVdNTSBOb3RlOiBJZiBtZW1vcnkgb2YgeW91ciBzeXN0ZW0gaXMgbm90IG11Y2gsIHBsZWFzZSByZWR1Y2UgdGhlIGRlZmluaXRpb247Ci0Jb3Igd2hlbiB5b3UgZG8gV01NIHRlc3QsIHRoZSBxdWV1ZSBmb3IgbG93IHByaW9yaXR5IEFDIHdpbGwgYmUgZnVsbCwgaS5lLgotCVRYX1JJTkdfU0laRSArIE1BWF9QQUNLRVRTX0lOX1FVRVVFIHBhY2tldHMgZm9yIHRoZSBBQyB3aWxsIGJlIGJ1ZmZlcmVkIGluCi0JV0xBTiwgbWF5YmUgbm8gcGFja2V0IGJ1ZmZlcnMgY2FuIGdldCBpbnRvIHRoZSBFdGhlcm5ldCBkcml2ZXIuCi0KLQlTb21ldGltZXMgbm8gcGFja2V0IGJ1ZmZlciBjYW4gYmUgZ2V0IGludG8gdGhlIEV0aGVybmV0IGRyaXZlciwgdGhlIHN5c3RlbSB3aWxsCi0Jc2VuZCBmbG93IGNvbnRyb2wgcGFja2V0IHRvIHRoZSBzZW5kZXIgdG8gc2xvdyBkb3duIGl0cyBzZW5kaW5nIHJhdGUuCi0JU28gbm8gV01NIGNhbiBiZSBzZWVuIGluIHRoZSBhaXIuCi0qLwotCi0vKgotCU5lZWQgdG8gdXNlIDY0IGluIHZ4d29ya3MgZm9yIHRlc3QgY2FzZSBXTU0gQTUtVDA3Ci0JVHdvIGRubGluayAoMTBNYnBzKSBmcm9tIGEgV01NIHN0YXRpb24gdG8gYSBub24tV01NIHN0YXRpb24uCi0JSWYgdXNlIDI1NiwgcXVldWUgaXMgbm90IGVub3VnaC4KLQlBbmQgaW4gcnRfbWFpbl9lbmQuYywgY2xDb25maWcuY2xOdW0gPSBSWF9SSU5HX1NJWkUgKiAzOyBpcyBjaGFuZ2VkIHRvCi0JY2xDb25maWcuY2xOdW0gPSBSWF9SSU5HX1NJWkUgKiA0OwotKi8KLS8qIFRPRE86IEZvciBWeFdvcmtzIHRoZSBzaXplIGlzIDI1Ni4gU2hhbGwgd2UgY2hhbmdlIHRoZSB2YWx1ZSBhcyAyNTYgZm9yIGFsbCBPUz8gKi8KLSNkZWZpbmUgTUFYX1BBQ0tFVFNfSU5fUVVFVUUJCQkJKDUxMikJLyooNTEyKSAgICAvLyB0byBwYXNzIFdNTSBBNS1XUEFQU0sgKi8KLQotI2RlZmluZSBNQVhfUEFDS0VUU19JTl9NQ0FTVF9QU19RVUVVRQkJMzIKLSNkZWZpbmUgTUFYX1BBQ0tFVFNfSU5fUFNfUVVFVUUJCQkJMTI4CS8qMzIgKi8KLSNkZWZpbmUgV01NX05VTV9PRl9BQyAgICAgICAgICAgICAgICAgICAgICAgNAkvKiBBQzAsIEFDMSwgQUMyLCBhbmQgQUMzICovCi0KLSNpZmRlZiBSVE1QX0VGVVNFX1NVUFBPUlQKLS8qMjAwOC8wOS8xMTpLSCBhZGQgdG8gc3VwcG9ydCBlZnVzZTwtLSAqLwotI2RlZmluZSBNQVhfRUVQUk9NX0JJTl9GSUxFX1NJWkUJCQkJCTEwMjQKLSNkZWZpbmUgRUZVU0VfQlVGRkVSX1BBVEgJCQkJCQkiL3RtcC9SVDMweHhFRVBST00uYmluIgotLyoyMDA4LzA5LzExOktIIGFkZCB0byBzdXBwb3J0IGVmdXNlLS0+ICovCi0jZW5kaWYgLyogUlRNUF9FRlVTRV9TVVBQT1JUIC8vICovCi0KLS8qIFJ4RmlsdGVyICovCi0jZGVmaW5lIFNUQU5PUk1BTAkgMHgxN2Y5NwotI2RlZmluZSBBUE5PUk1BTAkgMHgxNWY5NwotI2RlZmluZSBQU1BYTElOSwkgMHgxN2Y5MwotLyogKi8KLS8qICBzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyIGZsYWdzICovCi0vKiAqLwotI2RlZmluZSBmUlRNUF9BREFQVEVSX01BUF9SRUdJU1RFUiAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgZlJUTVBfQURBUFRFUl9IQVJEV0FSRV9FUlJPUiAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBmUlRNUF9BREFQVEVSX1NDQVRURVJfR0FUSEVSICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIGZSVE1QX0FEQVBURVJfU0VORF9QQUNLRVRfRVJST1IgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgZlJUTVBfQURBUFRFUl9NTE1FX1JFU0VUX0lOX1BST0dSRVNTIDB4MDAwMDAwMjAKLSNkZWZpbmUgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTICAgICAgMHgwMDAwMDA0MAotI2RlZmluZSBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCAgICAgICAgIDB4MDAwMDAxMDAKLSNkZWZpbmUgZlJUTVBfQURBUFRFUl9UWF9SSU5HX0FMTE9DQVRFRCAgICAgMHgwMDAwMDIwMAotI2RlZmluZSBmUlRNUF9BREFQVEVSX1JFTU9WRV9JTl9QUk9HUkVTUyAgICAweDAwMDAwNDAwCi0jZGVmaW5lIGZSVE1QX0FEQVBURVJfTUlNT1JBVEVfSU5VU0VEICAgICAgIDB4MDAwMDA4MDAKLSNkZWZpbmUgZlJUTVBfQURBUFRFUl9SWF9SSU5HX0FMTE9DQVRFRCAgICAgMHgwMDAwMTAwMAotI2RlZmluZSBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9BQ1RJVkUgICAgICAweDAwMDAyMDAwCi0jZGVmaW5lIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MgIDB4MDAwMDQwMDAKLSNkZWZpbmUJZlJUTVBfQURBUFRFUl9SRUFTU09DX0lOX1BST0dSRVNTCTB4MDAwMDgwMDAKLSNkZWZpbmUJZlJUTVBfQURBUFRFUl9NRURJQV9TVEFURV9QRU5ESU5HCTB4MDAwMTAwMDAKLSNkZWZpbmUJZlJUTVBfQURBUFRFUl9SQURJT19PRkYJCQkJMHgwMDAyMDAwMAotI2RlZmluZSBmUlRNUF9BREFQVEVSX0JVTEtPVVRfUkVTRVQJCQkweDAwMDQwMDAwCi0jZGVmaW5lCWZSVE1QX0FEQVBURVJfQlVMS0lOX1JFU0VUCQkJMHgwMDA4MDAwMAotI2RlZmluZSBmUlRNUF9BREFQVEVSX1JER19BQ1RJVkUJCQkweDAwMTAwMDAwCi0jZGVmaW5lIGZSVE1QX0FEQVBURVJfRFlOQU1JQ19CRV9UWE9QX0FDVElWRSAweDAwMjAwMDAwCi0jZGVmaW5lIGZSVE1QX0FEQVBURVJfU0NBTl8yMDQwIAkJCTB4MDQwMDAwMDAKLSNkZWZpbmUJZlJUTVBfQURBUFRFUl9SQURJT19NRUFTVVJFTUVOVAkJMHgwODAwMDAwMAotCi0jZGVmaW5lIGZSVE1QX0FEQVBURVJfU1RBUlRfVVAgICAgICAgICAJCTB4MTAwMDAwMDAJLypEZXZpY2UgYWxyZWFkeSBpbml0aWFsaXplZCBhbmQgZW5hYmxlZCBUeC9SeC4gKi8KLSNkZWZpbmUgZlJUTVBfQURBUFRFUl9NRURJQV9TVEFURV9DSEFOR0UgICAgMHgyMDAwMDAwMAotI2RlZmluZSBmUlRNUF9BREFQVEVSX0lETEVfUkFESU9fT0ZGICAgICAgICAweDQwMDAwMDAwCi0KLS8qICovCi0vKiAgU1RBIG9wZXJhdGlvbiBzdGF0dXMgZmxhZ3MgKi8KLS8qICovCi0jZGVmaW5lIGZPUF9TVEFUVVNfSU5GUkFfT04gICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgZk9QX1NUQVRVU19BREhPQ19PTiAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBmT1BfU1RBVFVTX0JHX1BST1RFQ1RJT05fSU5VU0VEICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIGZPUF9TVEFUVVNfU0hPUlRfU0xPVF9JTlVTRUQgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgZk9QX1NUQVRVU19TSE9SVF9QUkVBTUJMRV9JTlVTRUQgICAgMHgwMDAwMDAxMAotI2RlZmluZSBmT1BfU1RBVFVTX1JFQ0VJVkVfRFRJTSAgICAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEICAgIDB4MDAwMDAwODAKLSNkZWZpbmUgZk9QX1NUQVRVU19XTU1fSU5VU0VEICAgICAgICAgICAgICAgMHgwMDAwMDEwMAotI2RlZmluZSBmT1BfU1RBVFVTX0FHR1JFR0FUSU9OX0lOVVNFRCAgICAgICAweDAwMDAwMjAwCi0jZGVmaW5lIGZPUF9TVEFUVVNfRE9aRSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAJLyogZGVidWcgcHVycG9zZSAqLwotI2RlZmluZSBmT1BfU1RBVFVTX1BJR0dZQkFDS19JTlVTRUQgICAgICAgICAweDAwMDAwODAwCS8qIHBpZ2d5LWJhY2ssIGFuZCBhZ2dyZWdhdGlvbiAqLwotI2RlZmluZSBmT1BfU1RBVFVTX0FQU0RfSU5VU0VECQkJCTB4MDAwMDEwMDAKLSNkZWZpbmUgZk9QX1NUQVRVU19UWF9BTVNEVV9JTlVTRUQJCQkweDAwMDAyMDAwCi0jZGVmaW5lIGZPUF9TVEFUVVNfTUFYX1JFVFJZX0VOQUJMRUQJCTB4MDAwMDQwMDAKLSNkZWZpbmUgZk9QX1NUQVRVU19XQUtFVVBfTk9XICAgICAgICAgICAgICAgMHgwMDAwODAwMAotI2RlZmluZSBmT1BfU1RBVFVTX1BDSUVfREVWSUNFICAgICAgIDB4MDAwMjAwMDAKLSNkZWZpbmUgZk9QX1NUQVRVU19BRFZBTkNFX1BPV0VSX1NBVkVfUENJRV9ERVZJQ0UgZk9QX1NUQVRVU19QQ0lFX0RFVklDRQotCi0vKiAqLwotLyogIHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgUFNGbGFncyA6IHJlbGF0ZWQgdG8gYWR2YW5jZWQgcG93ZXIgc2F2ZS4gKi8KLS8qICovCi0vKiBJbmRpY2F0ZSB3aGV0aGVyIGRyaXZlciBjYW4gZ28gdG8gc2xlZXAgbW9kZSBmcm9tIG5vdy4gVGhpcyBmbGFnIGlzIHVzZWZ1bCBBRlRFUiBsaW5rIHVwICovCi0jZGVmaW5lIGZSVE1QX1BTX0NBTl9HT19TTEVFUCAgICAgICAgICAweDAwMDAwMDAxCi0vKiBJbmRpY2F0ZSB3aGV0aGVyIGRyaXZlciBoYXMgaXNzdWUgYSBMaW5rQ29udHJvbCBjb21tYW5kIHRvIFBDSWUgTDEgKi8KLSNkZWZpbmUgZlJUTVBfUFNfU0VUX1BDSV9DTEtfT0ZGX0NPTU1BTkQgICAgICAgICAgMHgwMDAwMDAwMgotLyogSW5kaWNhdGUgZHJpdmVyIHNob3VsZCBkaXNhYmxlIGtpY2sgb2ZmIGhhcmR3YXJlIHRvIHNlbmQgcGFja2V0cyBmcm9tIG5vdy4gKi8KLSNkZWZpbmUgZlJUTVBfUFNfRElTQUJMRV9UWCAgICAgICAgIDB4MDAwMDAwMDQKLS8qIEluZGljYXRlIGRyaXZlciBzaG91bGQgSU1NRURJQVRFTFkgZ28gdG8gc2xlZXAgYWZ0ZXIgcmVjZWl2aW5nIEFQJ3MgYmVhY29uIGluIHdoaWNoIGRvZXNuJ3QgaW5kaWNhdGUgdW5pY2F0ZSBub3IgbXVsdGljYXN0IHBhY2tldHMgZm9yIG1lICovCi0vKiBUaGlzIGZsYWcgaXMgdXNlZCBPTkxZIGluIFJUTVBIYW5kbGVSeERvbmVJbnRlcnJ1cHQgcm91dGluZS4gKi8KLSNkZWZpbmUgZlJUTVBfUFNfR09fVE9fU0xFRVBfTk9XICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBmUlRNUF9QU19UT0dHTEVfTDEJCTB4MDAwMDAwMTAJLyogVXNlIFRvZ2dsZSBMMSBtZWNoYW5pc20gZm9yIHJ0Mjh4eCBQQ0llICovCi0KLSNpZmRlZiBSVDMwOTAKLSNkZWZpbmUgV0FLRV9NQ1VfQ01ECQkJCTB4MzEKLSNkZWZpbmUgU0xFRVBfTUNVX0NNRAkJCQkJMHgzMAotI2RlZmluZSBSRk9GRl9NQ1VfQ01ECQkJCTB4MzUKLSNlbmRpZiAvKiBSVDMwOTAgLy8gKi8KLQotI2RlZmluZSBDQ0tTRVRQUk9URUNUCQkweDEKLSNkZWZpbmUgT0ZETVNFVFBST1RFQ1QJCTB4MgotI2RlZmluZSBNTTIwU0VUUFJPVEVDVAkJMHg0Ci0jZGVmaW5lIE1NNDBTRVRQUk9URUNUCQkweDgKLSNkZWZpbmUgR0YyMFNFVFBST1RFQ1QJCTB4MTAKLSNkZWZpbmUgR1I0MFNFVFBST1RFQ1QJCTB4MjAKLSNkZWZpbmUgQUxMTl9TRVRQUk9URUNUCQkoR1I0MFNFVFBST1RFQ1QgfCBHRjIwU0VUUFJPVEVDVCB8IE1NNDBTRVRQUk9URUNUIHwgTU0yMFNFVFBST1RFQ1QpCi0KLS8qICovCi0vKiAgQVAncyBjbGllbnQgdGFibGUgb3BlcmF0aW9uIHN0YXR1cyBmbGFncyAqLwotLyogKi8KLSNkZWZpbmUgZkNMSUVOVF9TVEFUVVNfV01NX0NBUEFCTEUgICAgICAgICAgMHgwMDAwMDAwMQkvKiBDTElFTlQgY2FuIHBhcnNlIFFPUyBEQVRBIGZyYW1lICovCi0jZGVmaW5lIGZDTElFTlRfU1RBVFVTX0FHR1JFR0FUSU9OX0NBUEFCTEUgIDB4MDAwMDAwMDIJLyogQ0xJRU5UIGNhbiByZWNlaXZlIFJhbGluaydzIHByb3ByaWV0YXJ5IFRYIGFnZ3JlZ2F0aW9uIGZyYW1lICovCi0jZGVmaW5lIGZDTElFTlRfU1RBVFVTX1BJR0dZQkFDS19DQVBBQkxFICAgIDB4MDAwMDAwMDQJLyogQ0xJRU5UIHN1cHBvcnQgcGlnZ3ktYmFjayAqLwotI2RlZmluZSBmQ0xJRU5UX1NUQVRVU19BTVNEVV9JTlVTRUQJCQkweDAwMDAwMDA4Ci0jZGVmaW5lIGZDTElFTlRfU1RBVFVTX1NHSTIwX0NBUEFCTEUJCTB4MDAwMDAwMTAKLSNkZWZpbmUgZkNMSUVOVF9TVEFUVVNfU0dJNDBfQ0FQQUJMRQkJMHgwMDAwMDAyMAotI2RlZmluZSBmQ0xJRU5UX1NUQVRVU19UeFNUQkNfQ0FQQUJMRQkJMHgwMDAwMDA0MAotI2RlZmluZSBmQ0xJRU5UX1NUQVRVU19SeFNUQkNfQ0FQQUJMRQkJMHgwMDAwMDA4MAotI2RlZmluZSBmQ0xJRU5UX1NUQVRVU19IVENfQ0FQQUJMRQkJCTB4MDAwMDAxMDAKLSNkZWZpbmUgZkNMSUVOVF9TVEFUVVNfUkRHX0NBUEFCTEUJCQkweDAwMDAwMjAwCi0jZGVmaW5lIGZDTElFTlRfU1RBVFVTX01DU0ZFRURCQUNLX0NBUEFCTEUgIDB4MDAwMDA0MDAKLSNkZWZpbmUgZkNMSUVOVF9TVEFUVVNfQVBTRF9DQVBBQkxFICAgICAgICAgMHgwMDAwMDgwMAkvKiBVQVBTRCBTVEFUSU9OICovCi0KLSNkZWZpbmUgZkNMSUVOVF9TVEFUVVNfUkFMSU5LX0NISVBTRVQJCTB4MDAxMDAwMDAKLS8qICovCi0vKiAgU1RBIGNvbmZpZ3VyYXRpb24gZmxhZ3MgKi8KLS8qICovCi0KLS8qIDgwMi4xMW4gT3BlcmF0aW5nIE1vZGUgRGVmaW5pdGlvbi4gMC0zIGFsc28gdXNlZCBpbiBBU0lDVVBkYXRlUHJvdGVjdCBzd2l0Y2ggY2FzZSAqLwotI2RlZmluZSBIVF9OT19QUk9URUNUCTAKLSNkZWZpbmUgSFRfTEVHQUNZX1BST1RFQ1QJMQotI2RlZmluZSBIVF80MF9QUk9URUNUCTIKLSNkZWZpbmUgSFRfMjA0MF9QUk9URUNUCTMKLSNkZWZpbmUgSFRfUlRTQ1RTXzZNCTcKLS8qZm9sbG93aW5nIGlzIG91ciBvd24gZGVmaW5pdGlvbiBpbiBvcmRlciB0byB0dXJuIG9uIG91ciBBU0lDIHByb3RlY3Rpb24gcmVnaXN0ZXIgaW4gSU5GUkFTVFJVQ1RVUkUuICovCi0jZGVmaW5lIEhUX0FUSEVST1MJOAkvKiBydDI4NjBjIGhhcyBwcm9ibGVtIHdpdGggYXRoZXJvcyBjaGlwLiB3ZSBuZWVkIHRvIHR1cm4gb24gUlRTL0NUUyAuICovCi0jZGVmaW5lIEhUX0ZPUkNFUlRTQ1RTCTkJLyogRm9yY2UgdHVybiBvbiBSVFMvQ1RTIGZpcnN0LiB0aGVuIGdvIHRvIGV2YWx1YXRlIGlmIHRoaXMgZm9yY2UgUlRTIGlzIG5lY2Vzc2FyeS4gKi8KLQotLyogKi8KLS8qIFJYIFBhY2tldCBGaWx0ZXIgY29udHJvbCBmbGFncy4gQXBwbHkgb24gcEFkLT5QYWNrZXRGaWx0ZXIgKi8KLS8qICovCi0jZGVmaW5lIGZSWF9GSUxURVJfQUNDRVBUX0RJUkVDVCAgICAgICAgICAgIE5ESVNfUEFDS0VUX1RZUEVfRElSRUNURUQKLSNkZWZpbmUgZlJYX0ZJTFRFUl9BQ0NFUFRfTVVMVElDQVNUICAgICAgICAgTkRJU19QQUNLRVRfVFlQRV9NVUxUSUNBU1QKLSNkZWZpbmUgZlJYX0ZJTFRFUl9BQ0NFUFRfQlJPQURDQVNUICAgICAgICAgTkRJU19QQUNLRVRfVFlQRV9CUk9BRENBU1QKLSNkZWZpbmUgZlJYX0ZJTFRFUl9BQ0NFUFRfQUxMX01VTFRJQ0FTVCAgICAgTkRJU19QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUCi0jZGVmaW5lIGZSWF9GSUxURVJfQUNDRVBUX1BST01JU0NVT1VTICAgICAgIE5ESVNfUEFDS0VUX1RZUEVfUFJPTUlTQ1VPVVMKLQotLyogKi8KLS8qIEVycm9yIGNvZGUgc2VjdGlvbiAqLwotLyogKi8KLS8qIE5ESVNfRVJST1JfQ09ERV9BREFQVEVSX05PVF9GT1VORCAqLwotI2RlZmluZSBFUlJMT0dfUkVBRF9QQ0lfU0xPVF9GQUlMRUQgICAgIDB4MDAwMDAxMDFMCi0jZGVmaW5lIEVSUkxPR19XUklURV9QQ0lfU0xPVF9GQUlMRUQgICAgMHgwMDAwMDEwMkwKLSNkZWZpbmUgRVJSTE9HX1ZFTkRPUl9ERVZJQ0VfTk9NQVRDSCAgICAweDAwMDAwMTAzTAotCi0vKiBORElTX0VSUk9SX0NPREVfQURBUFRFUl9ESVNBQkxFRCAqLwotI2RlZmluZSBFUlJMT0dfQlVTX01BU1RFUl9ESVNBQkxFRCAgICAgIDB4MDAwMDAyMDFMCi0KLS8qIE5ESVNfRVJST1JfQ09ERV9VTlNVUFBPUlRFRF9DT05GSUdVUkFUSU9OICovCi0jZGVmaW5lIEVSUkxPR19JTlZBTElEX1NQRUVEX0RVUExFWCAgICAgMHgwMDAwMDMwMUwKLSNkZWZpbmUgRVJSTE9HX1NFVF9TRUNPTkRBUllfRkFJTEVEICAgICAweDAwMDAwMzAyTAotCi0vKiBORElTX0VSUk9SX0NPREVfT1VUX09GX1JFU09VUkNFUyAqLwotI2RlZmluZSBFUlJMT0dfT1VUX09GX01FTU9SWSAgICAgICAgICAgIDB4MDAwMDA0MDFMCi0jZGVmaW5lIEVSUkxPR19PVVRfT0ZfU0hBUkVEX01FTU9SWSAgICAgMHgwMDAwMDQwMkwKLSNkZWZpbmUgRVJSTE9HX09VVF9PRl9NQVBfUkVHSVNURVJTICAgICAweDAwMDAwNDAzTAotI2RlZmluZSBFUlJMT0dfT1VUX09GX0JVRkZFUl9QT09MICAgICAgIDB4MDAwMDA0MDRMCi0jZGVmaW5lIEVSUkxPR19PVVRfT0ZfTkRJU19CVUZGRVIgICAgICAgMHgwMDAwMDQwNUwKLSNkZWZpbmUgRVJSTE9HX09VVF9PRl9QQUNLRVRfUE9PTCAgICAgICAweDAwMDAwNDA2TAotI2RlZmluZSBFUlJMT0dfT1VUX09GX05ESVNfUEFDS0VUICAgICAgIDB4MDAwMDA0MDdMCi0jZGVmaW5lIEVSUkxPR19PVVRfT0ZfTE9PS0FTSURFX01FTU9SWSAgMHgwMDAwMDQwOEwKLQotLyogTkRJU19FUlJPUl9DT0RFX0hBUkRXQVJFX0ZBSUxVUkUgKi8KLSNkZWZpbmUgRVJSTE9HX1NFTEZURVNUX0ZBSUxFRCAgICAgICAgICAweDAwMDAwNTAxTAotI2RlZmluZSBFUlJMT0dfSU5JVElBTElaRV9BREFQVEVSICAgICAgIDB4MDAwMDA1MDJMCi0jZGVmaW5lIEVSUkxPR19SRU1PVkVfTUlOSVBPUlQgICAgICAgICAgMHgwMDAwMDUwM0wKLQotLyogTkRJU19FUlJPUl9DT0RFX1JFU09VUkNFX0NPTkZMSUNUICovCi0jZGVmaW5lIEVSUkxPR19NQVBfSU9fU1BBQ0UgICAgICAgICAgICAgMHgwMDAwMDYwMUwKLSNkZWZpbmUgRVJSTE9HX1FVRVJZX0FEQVBURVJfUkVTT1VSQ0VTICAweDAwMDAwNjAyTAotI2RlZmluZSBFUlJMT0dfTk9fSU9fUkVTT1VSQ0UgICAgICAgICAgIDB4MDAwMDA2MDNMCi0jZGVmaW5lIEVSUkxPR19OT19JTlRFUlJVUFRfUkVTT1VSQ0UgICAgMHgwMDAwMDYwNEwKLSNkZWZpbmUgRVJSTE9HX05PX01FTU9SWV9SRVNPVVJDRSAgICAgICAweDAwMDAwNjA1TAotCi0vKiBXRFMgZGVmaW5pdGlvbiAqLwotI2RlZmluZQlNQVhfV0RTX0VOVFJZICAgICAgICAgICAgICAgNAotI2RlZmluZSBXRFNfUEFJUldJU0VfS0VZX09GRlNFVCAgICAgNjAJLyogV0RTIGxpbmtzIHVzZSBwYWlyd2lzZSBrZXkjNjAgfiA2MyBpbiBBU0lDIHBhaXJ3aXNlIGtleSB0YWJsZSAqLwotCi0jZGVmaW5lCVdEU19ESVNBQkxFX01PREUgICAgICAgICAgICAwCi0jZGVmaW5lCVdEU19SRVNUUklDVF9NT0RFICAgICAgICAgICAxCi0jZGVmaW5lCVdEU19CUklER0VfTU9ERSAgICAgICAgICAgICAyCi0jZGVmaW5lCVdEU19SRVBFQVRFUl9NT0RFICAgICAgICAgICAzCi0jZGVmaW5lCVdEU19MQVpZX01PREUgICAgICAgICAgICAgICA0Ci0KLSNkZWZpbmUgTUFYX01FU0hfTlVNCQkJCTAKLQotI2RlZmluZSBNQVhfQVBDTElfTlVNCQkJCTAKLQotI2RlZmluZSBNQVhfTUJTU0lEX05VTQkJCQkxCi0jaWZkZWYgTUJTU19TVVBQT1JUCi0jdW5kZWYJTUFYX01CU1NJRF9OVU0KLSNkZWZpbmUgTUFYX01CU1NJRF9OVU0JCQkJKDggLSBNQVhfTUVTSF9OVU0gLSBNQVhfQVBDTElfTlVNKQotI2VuZGlmIC8qIE1CU1NfU1VQUE9SVCAvLyAqLwotCi0vKiBzYW5pdHkgY2hlY2sgZm9yIGFwaWR4ICovCi0jZGVmaW5lIE1CU1NfTVJfQVBJRFhfU0FOSVRZX0NIRUNLKGFwaWR4KSBcCi0gICAgeyBpZiAoYXBpZHggPiBNQVhfTUJTU0lEX05VTSkgeyBcCi0gICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXM+IEVycm9yISBhcGlkeCA9ICVkID4gTUFYX01CU1NJRF9OVU0hXG4iLCBfX2Z1bmNfXywgYXBpZHgpKTsgXAotCSAgYXBpZHggPSBNQUlOX01CU1NJRDsgfSB9Ci0KLSNkZWZpbmUgVkFMSURfV0NJRChfd2NpZCkJKChfd2NpZCkgPiAwICYmIChfd2NpZCkgPCBNQVhfTEVOX09GX01BQ19UQUJMRSApCi0KLSNkZWZpbmUgTUFJTl9NQlNTSUQgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgRklSU1RfTUJTU0lEICAgICAgICAgICAgICAgIDEKLQotI2RlZmluZSBNQVhfQkVBQ09OX1NJWkUJCQkJNTEyCi0vKiBJZiB0aGUgTUFYX01CU1NJRF9OVU0gaXMgbGFyZ2VyIHRoYW4gNiwgKi8KLS8qIGl0IHNoYWxsIHJlc2VydmUgc29tZSBXQ0lEIHNwYWNlKHdjaWQgMjIyfjI1MykgZm9yIGJlYWNvbiBmcmFtZXMuICovCi0vKiAtICAgIHRoZXNlIHdjaWQgMjM4fjI1MyBhcmUgcmVzZXJ2ZWQgZm9yIGJlYWNvbiM2KHJhNikuICovCi0vKiAtICAgIHRoZXNlIHdjaWQgMjIyfjIzNyBhcmUgcmVzZXJ2ZWQgZm9yIGJlYWNvbiM3KHJhNykuICovCi0jaWYgZGVmaW5lZChNQVhfTUJTU0lEX05VTSkgJiYgKE1BWF9NQlNTSURfTlVNID09IDgpCi0jZGVmaW5lIEhXX1JFU0VSVkVEX1dDSUQJMjIyCi0jZWxpZiBkZWZpbmVkKE1BWF9NQlNTSURfTlVNKSAmJiAoTUFYX01CU1NJRF9OVU0gPT0gNykKLSNkZWZpbmUgSFdfUkVTRVJWRURfV0NJRAkyMzgKLSNlbHNlCi0jZGVmaW5lIEhXX1JFU0VSVkVEX1dDSUQJMjU1Ci0jZW5kaWYKLQotLyogVGhlbiBkZWRpY2F0ZSB3Y2lkIG9mIERGUyBhbmQgQ2Fycmllci1TZW5zZS4gKi8KLSNkZWZpbmUgREZTX0NUU19XQ0lEIAkJKEhXX1JFU0VSVkVEX1dDSUQgLSAxKQotI2RlZmluZSBDU19DVFNfV0NJRCAJCShIV19SRVNFUlZFRF9XQ0lEIC0gMikKLSNkZWZpbmUgTEFTVF9TUEVDSUZJQ19XQ0lECShIV19SRVNFUlZFRF9XQ0lEIC0gMikKLQotLyogSWYgTUFYX01CU1NJRF9OVU0gaXMgOCwgdGhlIG1heGltdW0gYXZhaWxhYmxlIHdjaWQgZm9yIHRoZSBhc3NvY2lhdGVkIFNUQSBpcyAyMTEuICovCi0vKiBJZiBNQVhfTUJTU0lEX05VTSBpcyA3LCB0aGUgbWF4aW11bSBhdmFpbGFibGUgd2NpZCBmb3IgdGhlIGFzc29jaWF0ZWQgU1RBIGlzIDIyOC4gKi8KLSNkZWZpbmUgTUFYX0FWQUlMQUJMRV9DTElFTlRfV0NJRAkoTEFTVF9TUEVDSUZJQ19XQ0lEIC0gTUFYX01CU1NJRF9OVU0gLSAxKQotCi0vKiBUWCBuZWVkIFdDSUQgdG8gZmluZCBDaXBoZXIgS2V5ICovCi0vKiB0aGVzZSB3Y2lkIDIxMiB+IDIxOSBhcmUgcmVzZXJ2ZWQgZm9yIGJjL21jIHBhY2tldHMgaWYgTUFYX01CU1NJRF9OVU0gaXMgOC4gKi8KLSNkZWZpbmUgR0VUX0dyb3VwS2V5X1dDSUQoX193Y2lkLCBfX2Jzc2lkeCkgXAotCXsJCQkJCQkJCQkJXAotCQlfX3djaWQgPSBMQVNUX1NQRUNJRklDX1dDSUQgLSAoTUFYX01CU1NJRF9OVU0pICsgX19ic3NpZHg7CVwKLQl9Ci0KLSNkZWZpbmUgSXNHcm91cEtleVdDSUQoX193Y2lkKSAoKChfX3djaWQpIDwgTEFTVF9TUEVDSUZJQ19XQ0lEKSAmJiAoKF9fd2NpZCkgPj0gKExBU1RfU1BFQ0lGSUNfV0NJRCAtIChNQVhfTUJTU0lEX05VTSkpKSkKLQotLyogZGVmaW5pdGlvbiB0byBzdXBwb3J0IG11bHRpcGxlIEJTU0lEICovCi0jZGVmaW5lIEJTUzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBCU1MxICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgQlNTMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIEJTUzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBCU1M0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgQlNTNSAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIEJTUzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBCU1M3ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLS8qIExlbmd0aCBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBQRUVSX0tFWV9OTyAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgTUFDX0FERFJfTEVOICAgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFRJTUVTVEFNUF9MRU4gICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUyAgICAgIE1BWF9MRU5HVEhfT0ZfU1VQUE9SVF9SQVRFUwkvKiAxLCAyLCA1LjUsIDExLCA2LCA5LCAxMiwgMTgsIDI0LCAzNiwgNDgsIDU0ICovCi0jZGVmaW5lIE1BWF9MRU5fT0ZfS0VZICAgICAgICAgICAgICAgICAgMzIJLyogMzIgb2N0ZXRzID09IDI1NiBiaXRzLCBSZWRlZmluZSBmb3IgV1BBICovCi0jZGVmaW5lIE1BWF9OVU1fT0ZfQ0hBTk5FTFMgICAgICAgICAgICAgTUFYX05VTV9PRl9DSFMJLyogMTQgY2hhbm5lbHMgQDIuNEcgKyAgMTJAVU5JSSArIDQgQE1NQUMgKyAxMSBASGlwZXJMQU4yICsgNyBASmFwYW4gKyAxIGFzIE5VTEwgdGVybWluYXRpb24gKi8KLSNkZWZpbmUgTUFYX05VTV9PRl8xMUpDSEFOTkVMUyAgICAgICAgICAgICAyMAkvKiAxNCBjaGFubmVscyBAMi40RyArICAxMkBVTklJICsgNCBATU1BQyArIDExIEBIaXBlckxBTjIgKyA3IEBKYXBhbiArIDEgYXMgTlVMTCB0ZXJtaW5hdGlvbiAqLwotI2RlZmluZSBNQVhfTEVOX09GX1NTSUQgICAgICAgICAgICAgICAgIDMyCi0jZGVmaW5lIENJUEhFUl9URVhUX0xFTiAgICAgICAgICAgICAgICAgMTI4Ci0jZGVmaW5lIEhBU0hfVEFCTEVfU0laRSAgICAgICAgICAgICAgICAgMjU2Ci0jZGVmaW5lIE1BWF9WSUVfTEVOICAgICAgICAgICAgICAgICAgICAgMTAyNAkvKiBOZXcgZm9yIFdQQSBjaXBoZXIgc3VpdGUgdmFyaWFibGUgSUUgc2l6ZXMuICovCi0jZGVmaW5lIE1BWF9TVVBQT1JUX01DUyAgICAgICAgICAgICAzMgotI2RlZmluZSBNQVhfTlVNX09GX0JCUF9MQVRDSCAgICAgICAgICAgICAxNDAKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLS8qIEFTSUMgV0NJRCBUYWJsZSBkZWZpbml0aW9uLiAqLwotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLSNkZWZpbmUgQlNTSURfV0NJRAkJMQkvKiBpbiBpbmZyYSBtb2RlLCBhbHdheXMgcHV0IGJzc2lkIHdpdGggdGhpcyBXQ0lEICovCi0jZGVmaW5lIE1DQVNUX1dDSUQJMHgwCi0jZGVmaW5lIEJTUzBNY2FzdF9XQ0lECTB4MAotI2RlZmluZSBCU1MxTWNhc3RfV0NJRAkweGY4Ci0jZGVmaW5lIEJTUzJNY2FzdF9XQ0lECTB4ZjkKLSNkZWZpbmUgQlNTM01jYXN0X1dDSUQJMHhmYQotI2RlZmluZSBCU1M0TWNhc3RfV0NJRAkweGZiCi0jZGVmaW5lIEJTUzVNY2FzdF9XQ0lECTB4ZmMKLSNkZWZpbmUgQlNTNk1jYXN0X1dDSUQJMHhmZAotI2RlZmluZSBCU1M3TWNhc3RfV0NJRAkweGZlCi0jZGVmaW5lIFJFU0VSVkVEX1dDSUQJCTB4ZmYKLQotI2RlZmluZSBNQVhfTlVNX09GX0FDTF9MSVNUCQkJCU1BWF9OVU1CRVJfT0ZfQUNMCi0KLSNkZWZpbmUgTUFYX0xFTl9PRl9NQUNfVEFCTEUgICAgICAgICAgICBNQVhfTlVNQkVSX09GX01BQwkvKiBpZiBNQVhfTUJTU0lEX05VTSBpcyA4LCB0aGlzIHZhbHVlIGNhbid0IGJlIGxhcmdlciB0aGFuIDIxMSAqLwotCi0jaWYgTUFYX0xFTl9PRl9NQUNfVEFCTEU+TUFYX0FWQUlMQUJMRV9DTElFTlRfV0NJRAotI2Vycm9yIE1BWF9MRU5fT0ZfTUFDX1RBQkxFIGNhbiBub3QgYmUgbGFyZ2VyIHRoYW4gTUFYX0FWQUlMQUJMRV9DTElFTlRfV0NJRCEKLSNlbmRpZgotCi0jZGVmaW5lIE1BWF9OVU1fT0ZfV0RTX0xJTktfUEVSQlNTSUQJICAgICAgICAgICAgMwotI2RlZmluZSBNQVhfTlVNX09GX1dEU19MSU5LCSAgICAgICAgICAgIChNQVhfTlVNX09GX1dEU19MSU5LX1BFUkJTU0lEKk1BWF9NQlNTSURfTlVNKQotI2RlZmluZSBNQVhfTlVNX09GX0VWRU5UICAgICAgICAgICAgICAgIE1BWF9OVU1CRVJfT0ZfRVZFTlQKLSNkZWZpbmUgV0RTX0xJTktfU1RBUlRfV0NJRAkJCQkoTUFYX0xFTl9PRl9NQUNfVEFCTEUtMSkKLQotI2RlZmluZSBOVU1fT0ZfVElECQkJOAotI2RlZmluZSBNQVhfQUlEX0JBICAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIE1BWF9MRU5fT0ZfQkFfUkVDX1RBQkxFICAgICAgICAgICgoTlVNX09GX1RJRCAqIE1BWF9MRU5fT0ZfTUFDX1RBQkxFKS8yKQkvKiAgIChOVU1fT0ZfVElEKk1BWF9BSURfQkEgKyAzMikgICAgICAgIC8vQmxvY2sgQUNLIHJlY2lwaWVudCAqLwotI2RlZmluZSBNQVhfTEVOX09GX0JBX09SSV9UQUJMRSAgICAgICAgICAoKE5VTV9PRl9USUQgKiBNQVhfTEVOX09GX01BQ19UQUJMRSkvMikJLyogICAoTlVNX09GX1RJRCpNQVhfQUlEX0JBICsgMzIpICAgLy8gQmxvY2sgQUNLIG9yaWdpbmF0b3IgKi8KLSNkZWZpbmUgTUFYX0xFTl9PRl9CU1NfVEFCTEUgICAgICAgICAgICAgNjQKLSNkZWZpbmUgTUFYX1JFT1JERVJJTkdfTVBEVV9OVU0JCQkgNTEyCi0KLS8qIGtleSByZWxhdGVkIGRlZmluaXRpb25zICovCi0jZGVmaW5lIFNIQVJFX0tFWV9OVU0gICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBNQVhfTEVOX09GX1NIQVJFX0tFWSAgICAgICAgICAgIDE2CS8qIGJ5dGUgY291bnQgKi8KLSNkZWZpbmUgTUFYX0xFTl9PRl9QRUVSX0tFWSAgICAgICAgICAgICAxNgkvKiBieXRlIGNvdW50ICovCi0jZGVmaW5lIFBBSVJXSVNFX0tFWV9OVU0gICAgICAgICAgICAgICAgNjQJLyogaW4gTUFDIEFTSUMgcGFpcndpc2Uga2V5IHRhYmxlICovCi0jZGVmaW5lIEdST1VQX0tFWV9OVU0gICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBQTUtfTEVOICAgICAgICAgICAgICAgICAgICAgICAgIDMyCi0jZGVmaW5lIFdEU19QQUlSV0lTRV9LRVlfT0ZGU0VUICAgICAgICAgNjAJLyogV0RTIGxpbmtzIHVzZXMgcGFpcndpc2Uga2V5IzYwIH4gNjMgaW4gQVNJQyBwYWlyd2lzZSBrZXkgdGFibGUgKi8KLSNkZWZpbmUJUE1LSURfTk8gICAgICAgICAgICAgICAgICAgICAgICA0CS8qIE51bWJlciBvZiBQTUtJRCBzYXZlZCBzdXBwb3J0ZWQgKi8KLSNkZWZpbmUgTUFYX0xFTl9PRl9NTE1FX0JVRkZFUiAgICAgICAgICAyMDQ4Ci0KLS8qIHBvd2VyIHN0YXR1cyByZWxhdGVkIGRlZmluaXRpb25zICovCi0jZGVmaW5lIFBXUl9BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBQV1JfU0FWRSAgICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUFdSX01NUFMgICAgICAgICAgICAgICAgICAgICAgICAyCS8qTUlNTyBwb3dlciBzYXZlICovCi0KLS8qIEF1dGggYW5kIEFzc29jIG1vZGUgcmVsYXRlZCBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBBVVRIX01PREVfT1BFTiAgICAgICAgICAgICAgICAgIDB4MDAKLSNkZWZpbmUgQVVUSF9NT0RFX0tFWSAgICAgICAgICAgICAgICAgICAweDAxCi0KLS8qIEJTUyBUeXBlIGRlZmluaXRpb25zICovCi0jZGVmaW5lIEJTU19BREhPQyAgICAgICAgICAgICAgICAgICAgICAgMAkvKiA9IE5kaXM4MDJfMTFJQlNTICovCi0jZGVmaW5lIEJTU19JTkZSQSAgICAgICAgICAgICAgICAgICAgICAgMQkvKiA9IE5kaXM4MDJfMTFJbmZyYXN0cnVjdHVyZSAqLwotI2RlZmluZSBCU1NfQU5ZICAgICAgICAgICAgICAgICAgICAgICAgIDIJLyogPSBOZGlzODAyXzExQXV0b1Vua25vd24gKi8KLSNkZWZpbmUgQlNTX01PTklUT1IJCQkgICAgICAgICAgICAzCS8qID0gTmRpczgwMl8xMU1vbml0b3IgKi8KLQotLyogUmVhc29uIGNvZGUgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgUkVBU09OX1JFU0VSVkVEICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFJFQVNPTl9VTlNQRUNJRlkgICAgICAgICAgICAgICAgMQotI2RlZmluZSBSRUFTT05fTk9fbG9uZ0VSX1ZBTElEICAgICAgICAgIDIKLSNkZWZpbmUgUkVBU09OX0RFQVVUSF9TVEFfTEVBVklORyAgICAgICAzCi0jZGVmaW5lIFJFQVNPTl9ESVNBU1NPQ19JTkFDVElWRSAgICAgICAgNAotI2RlZmluZSBSRUFTT05fRElTQVNTUENfQVBfVU5BQkxFICAgICAgIDUKLSNkZWZpbmUgUkVBU09OX0NMUzJFUlIgICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFJFQVNPTl9DTFMzRVJSICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBSRUFTT05fRElTQVNTT0NfU1RBX0xFQVZJTkcgICAgIDgKLSNkZWZpbmUgUkVBU09OX1NUQV9SRVFfQVNTT0NfTk9UX0FVVEggICA5Ci0jZGVmaW5lIFJFQVNPTl9JTlZBTElEX0lFICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgUkVBU09OX01JQ19GQUlMVVJFICAgICAgICAgICAgICAxNAotI2RlZmluZSBSRUFTT05fNF9XQVlfVElNRU9VVCAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFJFQVNPTl9HUk9VUF9LRVlfSFNfVElNRU9VVCAgICAgMTYKLSNkZWZpbmUgUkVBU09OX0lFX0RJRkZFUkVOVCAgICAgICAgICAgICAxNwotI2RlZmluZSBSRUFTT05fTUNJUEhFUl9OT1RfVkFMSUQgICAgICAgIDE4Ci0jZGVmaW5lIFJFQVNPTl9VQ0lQSEVSX05PVF9WQUxJRCAgICAgICAgMTkKLSNkZWZpbmUgUkVBU09OX0FLTVBfTk9UX1ZBTElEICAgICAgICAgICAyMAotI2RlZmluZSBSRUFTT05fVU5TVVBQT1JUX1JTTkVfVkVSICAgICAgIDIxCi0jZGVmaW5lIFJFQVNPTl9JTlZBTElEX1JTTkVfQ0FQICAgICAgICAgMjIKLSNkZWZpbmUgUkVBU09OXzgwMjFYX0FVVEhfRkFJTCAgICAgICAgICAyMwotI2RlZmluZSBSRUFTT05fQ0lQSEVSX1NVSVRFX1JFSkVDVEVEICAgIDI0Ci0jZGVmaW5lIFJFQVNPTl9ERUNMSU5FRCAgICAgICAgICAgICAgICAgMzcKLQotI2RlZmluZSBSRUFTT05fUU9TX1VOU1BFQ0lGWSAgICAgICAgICAgICAgMzIKLSNkZWZpbmUgUkVBU09OX1FPU19MQUNLX0JBTkRXSURUSCAgICAgICAgIDMzCi0jZGVmaW5lIFJFQVNPTl9QT09SX0NIQU5ORUxfQ09ORElUSU9OICAgICAzNAotI2RlZmluZSBSRUFTT05fUU9TX09VVFNJREVfVFhPUF9MSU1JVElPTiAgMzUKLSNkZWZpbmUgUkVBU09OX1FPU19RU1RBX0xFQVZJTkdfUUJTUyAgICAgIDM2Ci0jZGVmaW5lIFJFQVNPTl9RT1NfVU5XQU5URURfTUVDSEFOSVNNICAgICAzNwotI2RlZmluZSBSRUFTT05fUU9TX01FQ0hfU0VUVVBfUkVRVUlSRUQgICAgMzgKLSNkZWZpbmUgUkVBU09OX1FPU19SRVFVRVNUX1RJTUVPVVQgICAgICAgIDM5Ci0jZGVmaW5lIFJFQVNPTl9RT1NfQ0lQSEVSX05PVF9TVVBQT1JUICAgICA0NQotCi0vKiBTdGF0dXMgY29kZSBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBNTE1FX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTUxNRV9VTlNQRUNJRllfRkFJTCAgICAgICAgICAgICAxCi0jZGVmaW5lIE1MTUVfQ0FOTk9UX1NVUFBPUlRfQ0FQICAgICAgICAgMTAKLSNkZWZpbmUgTUxNRV9SRUFTU09DX0RFTllfQVNTT0NfRVhJU1QgICAxMQotI2RlZmluZSBNTE1FX0FTU09DX0RFTllfT1VUX1NDT1BFICAgICAgIDEyCi0jZGVmaW5lIE1MTUVfQUxHX05PVF9TVVBQT1JUICAgICAgICAgICAgMTMKLSNkZWZpbmUgTUxNRV9TRVFfTlJfT1VUX09GX1NFUVVFTkNFICAgICAxNAotI2RlZmluZSBNTE1FX1JFSl9DSEFMTEVOR0VfRkFJTFVSRSAgICAgIDE1Ci0jZGVmaW5lIE1MTUVfUkVKX1RJTUVPVVQgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBNTE1FX0FTU09DX1JFSl9VTkFCTEVfSEFORExFX1NUQSAgMTcKLSNkZWZpbmUgTUxNRV9BU1NPQ19SRUpfREFUQV9SQVRFICAgICAgICAgIDE4Ci0KLSNkZWZpbmUgTUxNRV9BU1NPQ19SRUpfTk9fRVhUX1JBVEUgICAgICAgIDIyCi0jZGVmaW5lIE1MTUVfQVNTT0NfUkVKX05PX0VYVF9SQVRFX1BCQ0MgICAyMwotI2RlZmluZSBNTE1FX0FTU09DX1JFSl9OT19DQ0tfT0ZETSAgICAgICAgMjQKLQotI2RlZmluZSBNTE1FX1FPU19VTlNQRUNJRlkgICAgICAgICAgICAgICAgMzIKLSNkZWZpbmUgTUxNRV9SRVFVRVNUX0RFQ0xJTkVEICAgICAgICAgICAgIDM3Ci0jZGVmaW5lIE1MTUVfUkVRVUVTVF9XSVRIX0lOVkFMSURfUEFSQU0gICAzOAotI2RlZmluZSBNTE1FX0lOVkFMSURfR1JPVVBfQ0lQSEVSCSAgNDEKLSNkZWZpbmUgTUxNRV9JTlZBTElEX1BBSVJXSVNFX0NJUEhFUgkgIDQyCi0jZGVmaW5lIE1MTUVfSU5WQUxJRF9BS01QCQkJICA0MwotI2RlZmluZSBNTE1FX0RMU19OT1RfQUxMT1dfSU5fUUJTUyAgICAgICAgNDgKLSNkZWZpbmUgTUxNRV9ERVNUX1NUQV9OT1RfSU5fUUJTUyAgICAgICAgIDQ5Ci0jZGVmaW5lIE1MTUVfREVTVF9TVEFfSVNfTk9UX0FfUVNUQSAgICAgICA1MAotCi0jZGVmaW5lIE1MTUVfSU5WQUxJRF9GT1JNQVQgICAgICAgICAgICAgMHg1MQotI2RlZmluZSBNTE1FX0ZBSUxfTk9fUkVTT1VSQ0UgICAgICAgICAgIDB4NTIKLSNkZWZpbmUgTUxNRV9TVEFURV9NQUNISU5FX1JFSkVDVCAgICAgICAweDUzCi0jZGVmaW5lIE1MTUVfTUFDX1RBQkxFX0ZBSUwgICAgICAgICAgICAgMHg1NAotCi0vKiBJRSBjb2RlICovCi0jZGVmaW5lIElFX1NTSUQgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBJRV9TVVBQX1JBVEVTICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgSUVfRkhfUEFSTSAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIElFX0RTX1BBUk0gICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBJRV9DRl9QQVJNICAgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgSUVfVElNICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIElFX0lCU1NfUEFSTSAgICAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBJRV9DT1VOVFJZICAgICAgICAgICAgICAgICAgICAgIDcJLyogODAyLjExZCAqLwotI2RlZmluZSBJRV84MDJfMTFEX1JFUVVFU1QgICAgICAgICAgICAgIDEwCS8qIDgwMi4xMWQgKi8KLSNkZWZpbmUgSUVfUUJTU19MT0FEICAgICAgICAgICAgICAgICAgICAxMQkvKiA4MDIuMTFlIGQ5ICovCi0jZGVmaW5lIElFX0VEQ0FfUEFSQU1FVEVSICAgICAgICAgICAgICAgMTIJLyogODAyLjExZSBkOSAqLwotI2RlZmluZSBJRV9UU1BFQyAgICAgICAgICAgICAgICAgICAgICAgIDEzCS8qIDgwMi4xMWUgZDkgKi8KLSNkZWZpbmUgSUVfVENMQVMgICAgICAgICAgICAgICAgICAgICAgICAxNAkvKiA4MDIuMTFlIGQ5ICovCi0jZGVmaW5lIElFX1NDSEVEVUxFICAgICAgICAgICAgICAgICAgICAgMTUJLyogODAyLjExZSBkOSAqLwotI2RlZmluZSBJRV9DSEFMTEVOR0VfVEVYVCAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIElFX1BPV0VSX0NPTlNUUkFpbnQgICAgICAgICAgICAgMzIJLyogODAyLjExaCBkMy4zICovCi0jZGVmaW5lIElFX1BPV0VSX0NBUEFCSUxJVFkgICAgICAgICAgICAgMzMJLyogODAyLjExaCBkMy4zICovCi0jZGVmaW5lIElFX1RQQ19SRVFVRVNUICAgICAgICAgICAgICAgICAgMzQJLyogODAyLjExaCBkMy4zICovCi0jZGVmaW5lIElFX1RQQ19SRVBPUlQgICAgICAgICAgICAgICAgICAgMzUJLyogODAyLjExaCBkMy4zICovCi0jZGVmaW5lIElFX1NVUFBfQ0hBTk5FTFMgICAgICAgICAgICAgICAgMzYJLyogODAyLjExaCBkMy4zICovCi0jZGVmaW5lIElFX0NIQU5ORUxfU1dJVENIX0FOTk9VTkNFTUVOVCAgMzcJLyogODAyLjExaCBkMy4zICovCi0jZGVmaW5lIElFX01FQVNVUkVNRU5UX1JFUVVFU1QgICAgICAgICAgMzgJLyogODAyLjExaCBkMy4zICovCi0jZGVmaW5lIElFX01FQVNVUkVNRU5UX1JFUE9SVCAgICAgICAgICAgMzkJLyogODAyLjExaCBkMy4zICovCi0jZGVmaW5lIElFX1FVSUVUICAgICAgICAgICAgICAgICAgICAgICAgNDAJLyogODAyLjExaCBkMy4zICovCi0jZGVmaW5lIElFX0lCU1NfREZTICAgICAgICAgICAgICAgICAgICAgNDEJLyogODAyLjExaCBkMy4zICovCi0jZGVmaW5lIElFX0VSUCAgICAgICAgICAgICAgICAgICAgICAgICAgNDIJLyogODAyLjExZyAqLwotI2RlZmluZSBJRV9UU19ERUxBWSAgICAgICAgICAgICAgICAgICAgIDQzCS8qIDgwMi4xMWUgZDkgKi8KLSNkZWZpbmUgSUVfVENMQVNfUFJPQ0VTU0lORyAgICAgICAgICAgICA0NAkvKiA4MDIuMTFlIGQ5ICovCi0jZGVmaW5lIElFX1FPU19DQVBBQklMSVRZICAgICAgICAgICAgICAgNDYJLyogODAyLjExZSBkNiAqLwotI2RlZmluZSBJRV9IVF9DQVAgICAgICAgICAgICAgICAgICAgICAgIDQ1CS8qIDgwMi4xMW4gZDEuIEhUIENBUEFCSUxJVFkuIEVMRU1FTlQgSUQgVEJEICovCi0jZGVmaW5lIElFX0FQX0NIQU5ORUxfUkVQT1JUCQkJNTEJLyogODAyLjExayBkNiAqLwotI2RlZmluZSBJRV9IVF9DQVAyICAgICAgICAgICAgICAgICAgICAgICAgIDUyCS8qIDgwMi4xMW4gZDEuIEhUIENBUEFCSUxJVFkuIEVMRU1FTlQgSUQgVEJEICovCi0jZGVmaW5lIElFX1JTTiAgICAgICAgICAgICAgICAgICAgICAgICAgNDgJLyogODAyLjExaSBkMy4wICovCi0jZGVmaW5lIElFX1dQQTIgICAgICAgICAgICAgICAgICAgICAgICAgNDgJLyogV1BBMiAqLwotI2RlZmluZSBJRV9FWFRfU1VQUF9SQVRFUyAgICAgICAgICAgICAgIDUwCS8qIDgwMi4xMWcgKi8KLSNkZWZpbmUgSUVfU1VQUF9SRUdfQ0xBU1MgICAgICAgICAgICAgICA1OQkvKiA4MDIuMTF5LiBTdXBwb3J0ZWQgcmVndWxhdG9yeSBjbGFzc2VzLiAqLwotI2RlZmluZSBJRV9FWFRfQ0hBTk5FTF9TV0lUQ0hfQU5OT1VOQ0VNRU5UCTYwCS8qIDgwMi4xMW4gKi8KLSNkZWZpbmUgSUVfQUREX0hUICAgICAgICAgICAgICAgICAgICAgICAgIDYxCS8qIDgwMi4xMW4gZDEuIEFERElUSU9OQUwgSFQgQ0FQQUJJTElUWS4gRUxFTUVOVCBJRCBUQkQgKi8KLSNkZWZpbmUgSUVfQUREX0hUMiAgICAgICAgICAgICAgICAgICAgICAgIDUzCS8qIDgwMi4xMW4gZDEuIEFERElUSU9OQUwgSFQgQ0FQQUJJTElUWS4gRUxFTUVOVCBJRCBUQkQgKi8KLQotLyogRm9yIDgwMi4xMW4gRDMuMDMgKi8KLS8qI2RlZmluZSBJRV9ORVdfRVhUX0NIQV9PRkZTRVQgICAgICAgICAgICAgNjIgICAgLy8gODAyLjExbiBkMS4gTmV3IGV4dGVuc2lvbiBjaGFubmVsIG9mZnNldCBlbGVtZW50ICovCi0jZGVmaW5lIElFX1NFQ09OREFSWV9DSF9PRkZTRVQJCTYyCS8qIDgwMi4xMW4gRDMuMDMgICAgICAgIFNlY29uZGFyeSBDaGFubmVsIE9mZnNldCBlbGVtZW50ICovCi0jZGVmaW5lIElFX1dBUEkJCQkJCQkJNjgJLyogV0FQSSBpbmZvcm1hdGlvbiBlbGVtZW50ICovCi0jZGVmaW5lIElFXzIwNDBfQlNTX0NPRVhJU1QgICAgICAgICAgICAgICA3MgkvKiA4MDIuMTFuIEQzLjAuMyAqLwotI2RlZmluZSBJRV8yMDQwX0JTU19JTlRPTEVSQU5UX1JFUE9SVCAgICAgNzMJLyogODAyLjExbiBEMy4wMyAqLwotI2RlZmluZSBJRV9PVkVSTEFQQlNTX1NDQU5fUEFSTSAgICAgICAgICAgNzQJLyogODAyLjExbiBEMy4wMyAqLwotI2RlZmluZSBJRV9FWFRfQ0FQQUJJTElUWSAgICAgICAgICAgICAgICAxMjcJLyogODAyLjExbiBEMy4wMyAqLwotCi0jZGVmaW5lIElFX1dQQSAgICAgICAgICAgICAgICAgICAgICAgICAgMjIxCS8qIFdQQSAqLwotI2RlZmluZSBJRV9WRU5ET1JfU1BFQ0lGSUMgICAgICAgICAgICAgIDIyMQkvKiBXaWZpIFdNTSAoV01FKSAqLwotCi0jZGVmaW5lIE9VSV9CUk9BRENPTV9IVCAgICAgICAgICAgICAgNTEJLyogKi8KLSNkZWZpbmUgT1VJX0JST0FEQ09NX0hUQUREICAgICAgICAgICAgICA1MgkvKiAqLwotI2RlZmluZSBPVUlfUFJFTl9IVF9DQVAgICAgICAgICAgICAgIDUxCS8qICovCi0jZGVmaW5lIE9VSV9QUkVOX0FERF9IVCAgICAgICAgICAgICAgNTIJLyogKi8KLQotLyogQ0NYIGluZm9ybWF0aW9uICovCi0jZGVmaW5lIElFX0FJUk9ORVRfQ0tJUCAgICAgICAgICAgICAgICAgMTMzCS8qIENDWDEuMCBJRCA4NUggZm9yIENLSVAgKi8KLSNkZWZpbmUgSUVfQVBfVFhfUE9XRVIgICAgICAgICAgICAgICAgICAxNTAJLyogQ0NYIDIuMCBmb3IgQVAgdHJhbnNtaXQgcG93ZXIgKi8KLSNkZWZpbmUgSUVfTUVBU1VSRU1FTlRfQ0FQQUJJTElUWSAgICAgICAyMjEJLyogQ0NYIDIuMCAqLwotI2RlZmluZSBJRV9DQ1hfVjIgICAgICAgICAgICAgICAgICAgICAgIDIyMQotI2RlZmluZSBJRV9BSVJPTkVUX0lQQUREUkVTUyAgICAgICAgICAgIDE0OQkvKiBDQ1ggSUQgOTVIIGZvciBJUCBBZGRyZXNzICovCi0jZGVmaW5lIElFX0FJUk9ORVRfQ0NLTVJFQVNTT0MgICAgICAgICAgMTU2CS8qIENDWCBJRCA5Q0ggZm9yIENDS00gUmVhc3NvY2lhdGlvbiBSZXF1ZXN0IGVsZW1lbnQgKi8KLSNkZWZpbmUgQ0tJUF9ORUdPVElBVElPTl9MRU5HVEggICAgICAgICAzMAotI2RlZmluZSBBSVJPTkVUX0lQQUREUkVTU19MRU5HVEggICAgICAgIDEwCi0jZGVmaW5lIEFJUk9ORVRfQ0NLTVJFQVNTT0NfTEVOR1RIICAgICAgMjQKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLS8qIE1MTUUgc3RhdGUgbWFjaGluZSBkZWZpbml0aW9uICovCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi0vKiBTVEEgTUxNRSBzdGF0ZSBtYWhjaW5lcyAqLwotI2RlZmluZSBBU1NPQ19TVEFURV9NQUNISU5FICAgICAgICAgICAgIDEKLSNkZWZpbmUgQVVUSF9TVEFURV9NQUNISU5FICAgICAgICAgICAgICAyCi0jZGVmaW5lIEFVVEhfUlNQX1NUQVRFX01BQ0hJTkUgICAgICAgICAgMwotI2RlZmluZSBTWU5DX1NUQVRFX01BQ0hJTkUgICAgICAgICAgICAgIDQKLSNkZWZpbmUgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUgICAgICAgICA1Ci0jZGVmaW5lIFdQQV9QU0tfU1RBVEVfTUFDSElORSAgICAgICAgICAgNgotLyojZGVmaW5lIExFQVBfU1RBVEVfTUFDSElORSAgICAgICAgICAgICAgNyAqLwotI2RlZmluZSBBSVJPTkVUX1NUQVRFX01BQ0hJTkUgICAgICAgICAgIDgKLSNkZWZpbmUgQUNUSU9OX1NUQVRFX01BQ0hJTkUgICAgICAgICAgIDkKLQotLyogQVAgTUxNRSBzdGF0ZSBtYWNoaW5lcyAqLwotI2RlZmluZSBBUF9BU1NPQ19TVEFURV9NQUNISU5FICAgICAgICAgIDExCi0jZGVmaW5lIEFQX0FVVEhfU1RBVEVfTUFDSElORSAgICAgICAgICAgMTIKLSNkZWZpbmUgQVBfU1lOQ19TVEFURV9NQUNISU5FICAgICAgICAgICAxNAotI2RlZmluZSBBUF9DTlRMX1NUQVRFX01BQ0hJTkUgICAgICAgICAgIDE1Ci0jZGVmaW5lIFdTQ19TVEFURV9NQUNISU5FICAgICAgICAgICAgMTcKLSNkZWZpbmUgV1NDX1VQTlBfU1RBVEVfTUFDSElORQkJICAgIDE4Ci0KLSNkZWZpbmUgV1BBX1NUQVRFX01BQ0hJTkUJCQkyMwotCi0vKiAqLwotLyogU1RBJ3MgQ09OVFJPTC9DT05ORUNUIHN0YXRlIG1hY2hpbmU6IHN0YXRlcywgZXZlbnRzLCB0b3RhbCBmdW5jdGlvbiAjICovCi0vKiAqLwotI2RlZmluZSBDTlRMX0lETEUgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgQ05UTF9XQUlUX0RJU0FTU09DICAgICAgICAgICAgICAxCi0jZGVmaW5lIENOVExfV0FJVF9KT0lOICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBDTlRMX1dBSVRfUkVBU1NPQyAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgQ05UTF9XQUlUX1NUQVJUICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIENOVExfV0FJVF9BVVRIICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBDTlRMX1dBSVRfQVNTT0MgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgQ05UTF9XQUlUX0FVVEgyICAgICAgICAgICAgICAgICA3Ci0jZGVmaW5lIENOVExfV0FJVF9PSURfTElTVF9TQ0FOICAgICAgICAgOAotI2RlZmluZSBDTlRMX1dBSVRfT0lEX0RJU0FTU09DICAgICAgICAgIDkKLSNpZmRlZiBSVE1QX01BQ19VU0IKLSNkZWZpbmUgQ05UTF9XQUlUX1NDQU5fRk9SX0NPTk5FQ1QgICAgICAxMAotI2VuZGlmIC8qIFJUTVBfTUFDX1VTQiAvLyAqLwotCi0jZGVmaW5lIE1UMl9BU1NPQ19DT05GICAgICAgICAgICAgICAgICAgMzQKLSNkZWZpbmUgTVQyX0FVVEhfQ09ORiAgICAgICAgICAgICAgICAgICAzNQotI2RlZmluZSBNVDJfREVBVVRIX0NPTkYgICAgICAgICAgICAgICAgIDM2Ci0jZGVmaW5lIE1UMl9ESVNBU1NPQ19DT05GICAgICAgICAgICAgICAgMzcKLSNkZWZpbmUgTVQyX1JFQVNTT0NfQ09ORiAgICAgICAgICAgICAgICAzOAotI2RlZmluZSBNVDJfUFdSX01HTVRfQ09ORiAgICAgICAgICAgICAgIDM5Ci0jZGVmaW5lIE1UMl9KT0lOX0NPTkYgICAgICAgICAgICAgICAgICAgNDAKLSNkZWZpbmUgTVQyX1NDQU5fQ09ORiAgICAgICAgICAgICAgICAgICA0MQotI2RlZmluZSBNVDJfU1RBUlRfQ09ORiAgICAgICAgICAgICAgICAgIDQyCi0jZGVmaW5lIE1UMl9HRVRfQ09ORiAgICAgICAgICAgICAgICAgICAgNDMKLSNkZWZpbmUgTVQyX1NFVF9DT05GICAgICAgICAgICAgICAgICAgICA0NAotI2RlZmluZSBNVDJfUkVTRVRfQ09ORiAgICAgICAgICAgICAgICAgIDQ1Ci0jZGVmaW5lIE1UMl9GVF9PVERfQ09ORgkJCQkJNDYKLSNkZWZpbmUgTVQyX01MTUVfUk9BTUlOR19SRVEgICAgICAgICAgICA1MgotCi0jZGVmaW5lIENOVExfRlVOQ19TSVpFICAgICAgICAgICAgICAgICAgMQotCi0vKiAqLwotLyogU1RBJ3MgQVNTT0Mgc3RhdGUgbWFjaGluZTogc3RhdGVzLCBldmVudHMsIHRvdGFsIGZ1bmN0aW9uICMgKi8KLS8qICovCi0jZGVmaW5lIEFTU09DX0lETEUgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBBU1NPQ19XQUlUX1JTUCAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUkVBU1NPQ19XQUlUX1JTUCAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIERJU0FTU09DX1dBSVRfUlNQICAgICAgICAgICAgICAgMwotI2RlZmluZSBNQVhfQVNTT0NfU1RBVEUgICAgICAgICAgICAgICAgIDQKLQotI2RlZmluZSBBU1NPQ19NQUNISU5FX0JBU0UgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTVQyX01MTUVfQVNTT0NfUkVRICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1UMl9NTE1FX1JFQVNTT0NfUkVRICAgICAgICAgICAgMQotI2RlZmluZSBNVDJfTUxNRV9ESVNBU1NPQ19SRVEgICAgICAgICAgIDIKLSNkZWZpbmUgTVQyX1BFRVJfRElTQVNTT0NfUkVRICAgICAgICAgICAzCi0jZGVmaW5lIE1UMl9QRUVSX0FTU09DX1JFUSAgICAgICAgICAgICAgNAotI2RlZmluZSBNVDJfUEVFUl9BU1NPQ19SU1AgICAgICAgICAgICAgIDUKLSNkZWZpbmUgTVQyX1BFRVJfUkVBU1NPQ19SRVEgICAgICAgICAgICA2Ci0jZGVmaW5lIE1UMl9QRUVSX1JFQVNTT0NfUlNQICAgICAgICAgICAgNwotI2RlZmluZSBNVDJfRElTQVNTT0NfVElNRU9VVCAgICAgICAgICAgIDgKLSNkZWZpbmUgTVQyX0FTU09DX1RJTUVPVVQgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIE1UMl9SRUFTU09DX1RJTUVPVVQgICAgICAgICAgICAgMTAKLSNkZWZpbmUgTUFYX0FTU09DX01TRyAgICAgICAgICAgICAgICAgICAxMQotCi0jZGVmaW5lIEFTU09DX0ZVTkNfU0laRSAgICAgICAgICAgICAgICAgKE1BWF9BU1NPQ19TVEFURSAqIE1BWF9BU1NPQ19NU0cpCi0KLS8qICovCi0vKiBBQ1Qgc3RhdGUgbWFjaGluZTogc3RhdGVzLCBldmVudHMsIHRvdGFsIGZ1bmN0aW9uICMgKi8KLS8qICovCi0jZGVmaW5lIEFDVF9JRExFICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTUFYX0FDVF9TVEFURSAgICAgICAgICAgICAgICAgMQotCi0jZGVmaW5lIEFDVF9NQUNISU5FX0JBU0UgICAgICAgICAgICAgIDAKLQotLypUaG9zZSBQRUVSX3h4X0NBVEUgbnVtYmVyIGlzIGJhc2VkIG9uIHJlYWwgQ2F0ZWdhcnkgdmFsdWUgaW4gSUVFRSBzcGVjLiBQbGVhc2UgZG8gbm90IG1vZGlmeSBpdCBieSB5b3VyIHNlbGYuICovCi0vKkNhdGVnb3J5ICovCi0jZGVmaW5lIE1UMl9QRUVSX1NQRUNUUlVNX0NBVEUgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTVQyX1BFRVJfUU9TX0NBVEUgICAgICAgICAgICAgIDEKLSNkZWZpbmUgTVQyX1BFRVJfRExTX0NBVEUgICAgICAgICAgICAgMgotI2RlZmluZSBNVDJfUEVFUl9CQV9DQVRFICAgICAgICAgICAgIDMKLSNkZWZpbmUgTVQyX1BFRVJfUFVCTElDX0NBVEUgICAgICAgICAgICAgNAotI2RlZmluZSBNVDJfUEVFUl9STV9DQVRFICAgICAgICAgICAgIDUKLS8qICJGVF9DQVRFR09SWV9CU1NfVFJBTlNJVElPTiBlcXVhbCB0byA2IiBpcyBkZWZpbmVkIGZpbGUgb2YgImRvdDExcl9mdC5oIiAqLwotI2RlZmluZSBNVDJfUEVFUl9IVF9DQVRFICAgICAgICAgICAgIDcJLyogICAgICA3LjQuNyAqLwotI2RlZmluZSBNQVhfUEVFUl9DQVRFX01TRyAgICAgICAgICAgICAgICAgICA3Ci0KLSNkZWZpbmUgTVQyX01MTUVfQUREX0JBX0NBVEUgICAgICAgICAgICAgOAotI2RlZmluZSBNVDJfTUxNRV9PUklfREVMQkFfQ0FURSAgICAgICAgICAgICA5Ci0jZGVmaW5lIE1UMl9NTE1FX1JFQ19ERUxCQV9DQVRFICAgICAgICAgICAgIDEwCi0jZGVmaW5lIE1UMl9NTE1FX1FPU19DQVRFICAgICAgICAgICAgICAxMQotI2RlZmluZSBNVDJfTUxNRV9ETFNfQ0FURSAgICAgICAgICAgICAxMgotI2RlZmluZSBNVDJfQUNUX0lOVkFMSUQgICAgICAgICAgICAgMTMKLSNkZWZpbmUgTUFYX0FDVF9NU0cgICAgICAgICAgICAgICAgICAgMTQKLQotLypDYXRlZ29yeSBmaWVsZCAqLwotI2RlZmluZSBDQVRFR09SWV9TUEVDVFJVTQkJMAotI2RlZmluZSBDQVRFR09SWV9RT1MJCQkxCi0jZGVmaW5lIENBVEVHT1JZX0RMUwkJCTIKLSNkZWZpbmUgQ0FURUdPUllfQkEJCQkzCi0jZGVmaW5lIENBVEVHT1JZX1BVQkxJQwkJNAotI2RlZmluZSBDQVRFR09SWV9STQkJCTUKLSNkZWZpbmUgQ0FURUdPUllfSFQJCQk3Ci0KLS8qIERMUyBBY3Rpb24gZnJhbWUgZGVmaW5pdGlvbiAqLwotI2RlZmluZSBBQ1RJT05fRExTX1JFUVVFU1QJCQkwCi0jZGVmaW5lIEFDVElPTl9ETFNfUkVTUE9OU0UJCQkxCi0jZGVmaW5lIEFDVElPTl9ETFNfVEVBUkRPV04JCQkyCi0KLS8qU3BlY3RydW0gIEFjdGlvbiBmaWVsZCB2YWx1ZSA4MDIuMTFoIDcuNC4xICovCi0jZGVmaW5lIFNQRUNfTVJRCTAJLyogUmVxdWVzdCAqLwotI2RlZmluZSBTUEVDX01SUAkxCS8qUmVwb3J0ICovCi0jZGVmaW5lIFNQRUNfVFBDUlEJMgotI2RlZmluZSBTUEVDX1RQQ1JQCTMKLSNkZWZpbmUgU1BFQ19DSEFOTkVMX1NXSVRDSAk0Ci0KLS8qQkEgIEFjdGlvbiBmaWVsZCB2YWx1ZSAqLwotI2RlZmluZSBBRERCQV9SRVEJMAotI2RlZmluZSBBRERCQV9SRVNQCTEKLSNkZWZpbmUgREVMQkEgICAyCi0KLS8qUHVibGljJ3MgIEFjdGlvbiBmaWVsZCB2YWx1ZSBpbiBQdWJsaWMgQ2F0ZWdvcnkuICBTb21lIGluIDgwMi4xMXkgYW5kIHNvbWUgaW4gMTFuICovCi0jZGVmaW5lIEFDVElPTl9CU1NfMjA0MF9DT0VYSVNUCQkJCTAJLyogMTFuICovCi0jZGVmaW5lIEFDVElPTl9EU0VfRU5BQkxFTUVOVAkJCQkJMQkvKiAxMXkgRDkuMCAqLwotI2RlZmluZSBBQ1RJT05fRFNFX0RFRU5BQkxFTUVOVAkJCQkyCS8qIDExeSBEOS4wICovCi0jZGVmaW5lIEFDVElPTl9EU0VfUkVHX0xPQ0FUSU9OX0FOTk9VTkNFCTMJLyogMTF5IEQ5LjAgKi8KLSNkZWZpbmUgQUNUSU9OX0VYVF9DSF9TV0lUQ0hfQU5OT1VOQ0UJCTQJLyogMTF5IEQ5LjAgKi8KLSNkZWZpbmUgQUNUSU9OX0RTRV9NRUFTVVJFTUVOVF9SRVEJCQk1CS8qIDExeSBEOS4wICovCi0jZGVmaW5lIEFDVElPTl9EU0VfTUVBU1VSRU1FTlRfUkVQT1JUCQk2CS8qIDExeSBEOS4wICovCi0jZGVmaW5lIEFDVElPTl9NRUFTVVJFTUVOVF9QSUxPVF9BQ1RJT04JCTcJLyogMTF5IEQ5LjAgKi8KLSNkZWZpbmUgQUNUSU9OX0RTRV9QT1dFUl9DT05TVFJBSU5UCQkJOAkvKiAxMXkgRDkuMCAqLwotCi0vKkhUICBBY3Rpb24gZmllbGQgdmFsdWUgKi8KLSNkZWZpbmUgTk9USUZZX0JXX0FDVElPTgkJCQkwCi0jZGVmaW5lIFNNUFNfQUNUSU9OCQkJCQkJMQotI2RlZmluZSBQU01QX0FDVElPTiAgIAkJCQkJMgotI2RlZmluZSBTRVRQQ09fQUNUSU9OCQkJCQkzCi0jZGVmaW5lIE1JTU9fQ0hBX01FQVNVUkVfQUNUSU9OCQkJNAotI2RlZmluZSBNSU1PX05fQkVBQ09ORk9STQkJCQk1Ci0jZGVmaW5lIE1JTU9fQkVBQ09ORk9STQkJCQkJNgotI2RlZmluZSBBTlRFTk5BX1NFTEVDVAkJCQkJNwotI2RlZmluZSBIVF9JTkZPX0VYQ0hBTkdFCQkJCTgKLQotI2RlZmluZSBBQ1RfRlVOQ19TSVpFICAgICAgICAgICAgICAgICAoTUFYX0FDVF9TVEFURSAqIE1BWF9BQ1RfTVNHKQotLyogKi8KLS8qIFNUQSdzIEFVVEhFTlRJQ0FUSU9OIHN0YXRlIG1hY2hpbmU6IHN0YXRlcywgZXZlbnRzLCB0b3RhbCBmdW5jdGlvbiAjICovCi0vKiAqLwotI2RlZmluZSBBVVRIX1JFUV9JRExFICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgQVVUSF9XQUlUX1NFUTIgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIEFVVEhfV0FJVF9TRVE0ICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBNQVhfQVVUSF9TVEFURSAgICAgICAgICAgICAgICAgIDMKLQotI2RlZmluZSBBVVRIX01BQ0hJTkVfQkFTRSAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTVQyX01MTUVfQVVUSF9SRVEgICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1UMl9QRUVSX0FVVEhfRVZFTiAgICAgICAgICAgICAgMQotI2RlZmluZSBNVDJfQVVUSF9USU1FT1VUICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgTUFYX0FVVEhfTVNHICAgICAgICAgICAgICAgICAgICAzCi0KLSNkZWZpbmUgQVVUSF9GVU5DX1NJWkUgICAgICAgICAgICAgICAgICAoTUFYX0FVVEhfU1RBVEUgKiBNQVhfQVVUSF9NU0cpCi0KLS8qICovCi0vKiBTVEEncyBBVVRIX1JTUCBzdGF0ZSBtYWNoaW5lOiBzdGF0ZXMsIGV2ZW50cywgdG90YWwgZnVuY3Rpb24gIyAqLwotLyogKi8KLSNkZWZpbmUgQVVUSF9SU1BfSURMRSAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEFVVEhfUlNQX1dBSVRfQ0hBTCAgICAgICAgICAgICAgMQotI2RlZmluZSBNQVhfQVVUSF9SU1BfU1RBVEUgICAgICAgICAgICAgIDIKLQotI2RlZmluZSBBVVRIX1JTUF9NQUNISU5FX0JBU0UgICAgICAgICAgIDAKLSNkZWZpbmUgTVQyX0FVVEhfQ0hBTExFTkdFX1RJTUVPVVQgICAgICAwCi0jZGVmaW5lIE1UMl9QRUVSX0FVVEhfT0REICAgICAgICAgICAgICAgMQotI2RlZmluZSBNVDJfUEVFUl9ERUFVVEggICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgTUFYX0FVVEhfUlNQX01TRyAgICAgICAgICAgICAgICAzCi0KLSNkZWZpbmUgQVVUSF9SU1BfRlVOQ19TSVpFICAgICAgICAgICAgICAoTUFYX0FVVEhfUlNQX1NUQVRFICogTUFYX0FVVEhfUlNQX01TRykKLQotLyogKi8KLS8qIFNUQSdzIFNZTkMgc3RhdGUgbWFjaGluZTogc3RhdGVzLCBldmVudHMsIHRvdGFsIGZ1bmN0aW9uICMgKi8KLS8qICovCi0jZGVmaW5lIFNZTkNfSURMRSAgICAgICAgICAgICAgICAgICAgICAgMAkvKiBtZXJnZSBOT19CU1MsSUJTU19JRExFLElCU1NfQUNUSVZFIGFuZCBCU1MgaW4gdG8gMSBzdGF0ZSAqLwotI2RlZmluZSBKT0lOX1dBSVRfQkVBQ09OICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgU0NBTl9MSVNURU4gICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIE1BWF9TWU5DX1NUQVRFICAgICAgICAgICAgICAgICAgMwotCi0jZGVmaW5lIFNZTkNfTUFDSElORV9CQVNFICAgICAgICAgICAgICAgMAotI2RlZmluZSBNVDJfTUxNRV9TQ0FOX1JFUSAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTVQyX01MTUVfSk9JTl9SRVEgICAgICAgICAgICAgICAxCi0jZGVmaW5lIE1UMl9NTE1FX1NUQVJUX1JFUSAgICAgICAgICAgICAgMgotI2RlZmluZSBNVDJfUEVFUl9CRUFDT04gICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgTVQyX1BFRVJfUFJPQkVfUlNQICAgICAgICAgICAgICA0Ci0jZGVmaW5lIE1UMl9QRUVSX0FUSU0gICAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBNVDJfU0NBTl9USU1FT1VUICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgTVQyX0JFQUNPTl9USU1FT1VUICAgICAgICAgICAgICA3Ci0jZGVmaW5lIE1UMl9BVElNX1RJTUVPVVQgICAgICAgICAgICAgICAgOAotI2RlZmluZSBNVDJfUEVFUl9QUk9CRV9SRVEgICAgICAgICAgICAgIDkKLSNkZWZpbmUgTUFYX1NZTkNfTVNHICAgICAgICAgICAgICAgICAgICAxMAotCi0jZGVmaW5lIFNZTkNfRlVOQ19TSVpFICAgICAgICAgICAgICAgICAgKE1BWF9TWU5DX1NUQVRFICogTUFYX1NZTkNfTVNHKQotCi0vKk1lc3NhZ2VzIGZvciB0aGUgRExTIHN0YXRlIG1hY2hpbmUgKi8KLSNkZWZpbmUgRExTX0lETEUJCQkJCQkwCi0jZGVmaW5lIE1BWF9ETFNfU1RBVEUJCQkJCTEKLQotI2RlZmluZSBETFNfTUFDSElORV9CQVNFCQkJCTAKLSNkZWZpbmUgTVQyX01MTUVfRExTX1JFUQkJCSAgICAwCi0jZGVmaW5lIE1UMl9QRUVSX0RMU19SRVEJCQkgICAgMQotI2RlZmluZSBNVDJfUEVFUl9ETFNfUlNQCQkJICAgIDIKLSNkZWZpbmUgTVQyX01MTUVfRExTX1RFQVJfRE9XTgkJICAgIDMKLSNkZWZpbmUgTVQyX1BFRVJfRExTX1RFQVJfRE9XTgkJICAgIDQKLSNkZWZpbmUgTUFYX0RMU19NU0cJCQkJICAgICAgICA1Ci0KLSNkZWZpbmUgRExTX0ZVTkNfU0laRQkJCQkJKE1BWF9ETFNfU1RBVEUgKiBNQVhfRExTX01TRykKLQotLyogKi8KLS8qIFdTQyBTdGF0ZSBtYWNoaW5lOiBzdGF0ZXMsIGV2ZW50cywgdG90YWwgZnVuY3Rpb24gIyAqLwotLyogKi8KLQotLyogKi8KLS8qIEFQJ3MgQ09OVFJPTC9DT05ORUNUIHN0YXRlIG1hY2hpbmU6IHN0YXRlcywgZXZlbnRzLCB0b3RhbCBmdW5jdGlvbiAjICovCi0vKiAqLwotI2RlZmluZSBBUF9DTlRMX0ZVTkNfU0laRSAgICAgICAgICAgICAgIDEKLQotLyogKi8KLS8qIEFQJ3MgQVNTT0Mgc3RhdGUgbWFjaGluZTogc3RhdGVzLCBldmVudHMsIHRvdGFsIGZ1bmN0aW9uICMgKi8KLS8qICovCi0jZGVmaW5lIEFQX0FTU09DX0lETEUgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBBUF9NQVhfQVNTT0NfU1RBVEUgICAgICAgICAgICAgIDEKLQotI2RlZmluZSBBUF9BU1NPQ19NQUNISU5FX0JBU0UgICAgICAgICAgIDAKLSNkZWZpbmUgQVBNVDJfTUxNRV9ESVNBU1NPQ19SRVEgICAgICAgICAwCi0jZGVmaW5lIEFQTVQyX1BFRVJfRElTQVNTT0NfUkVRICAgICAgICAgMQotI2RlZmluZSBBUE1UMl9QRUVSX0FTU09DX1JFUSAgICAgICAgICAgIDIKLSNkZWZpbmUgQVBNVDJfUEVFUl9SRUFTU09DX1JFUSAgICAgICAgICAzCi0jZGVmaW5lIEFQTVQyX0NMUzNFUlIgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBBUF9NQVhfQVNTT0NfTVNHICAgICAgICAgICAgICAgIDUKLQotI2RlZmluZSBBUF9BU1NPQ19GVU5DX1NJWkUgICAgICAgICAgICAgIChBUF9NQVhfQVNTT0NfU1RBVEUgKiBBUF9NQVhfQVNTT0NfTVNHKQotCi0vKiAqLwotLyogQVAncyBBVVRIRU5USUNBVElPTiBzdGF0ZSBtYWNoaW5lOiBzdGF0ZXMsIGV2ZW50cywgdG90YWwgZnVuY3Rpb24gIyAqLwotLyogKi8KLSNkZWZpbmUgQVBfQVVUSF9SRVFfSURMRSAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEFQX01BWF9BVVRIX1NUQVRFICAgICAgICAgICAgICAgMQotCi0jZGVmaW5lIEFQX0FVVEhfTUFDSElORV9CQVNFICAgICAgICAgICAgMAotI2RlZmluZSBBUE1UMl9NTE1FX0RFQVVUSF9SRVEgICAgICAgICAgIDAKLSNkZWZpbmUgQVBNVDJfQ0xTMkVSUiAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIEFQTVQyX1BFRVJfREVBVVRIICAgICAgICAgICAgICAgMgotI2RlZmluZSBBUE1UMl9QRUVSX0FVVEhfUkVRCQkJCTMKLSNkZWZpbmUgQVBNVDJfUEVFUl9BVVRIX0NPTkZJUk0JCQk0Ci0jZGVmaW5lIEFQX01BWF9BVVRIX01TRyAgICAgICAgICAgICAgICAgNQotCi0jZGVmaW5lIEFQX0FVVEhfRlVOQ19TSVpFICAgICAgICAgICAgICAgKEFQX01BWF9BVVRIX1NUQVRFICogQVBfTUFYX0FVVEhfTVNHKQotCi0vKiAqLwotLyogQVAncyBTWU5DIHN0YXRlIG1hY2hpbmU6IHN0YXRlcywgZXZlbnRzLCB0b3RhbCBmdW5jdGlvbiAjICovCi0vKiAqLwotI2RlZmluZSBBUF9TWU5DX0lETEUgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgQVBfU0NBTl9MSVNURU4JCQkJCTEKLSNkZWZpbmUgQVBfTUFYX1NZTkNfU1RBVEUgICAgICAgICAgICAgICAyCi0KLSNkZWZpbmUgQVBfU1lOQ19NQUNISU5FX0JBU0UgICAgICAgICAgICAwCi0jZGVmaW5lIEFQTVQyX1BFRVJfUFJPQkVfUkVRICAgICAgICAgICAgMAotI2RlZmluZSBBUE1UMl9QRUVSX0JFQUNPTiAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgQVBNVDJfTUxNRV9TQ0FOX1JFUQkJCQkyCi0jZGVmaW5lIEFQTVQyX1BFRVJfUFJPQkVfUlNQCQkJMwotI2RlZmluZSBBUE1UMl9TQ0FOX1RJTUVPVVQJCQkJNAotI2RlZmluZSBBUE1UMl9NTE1FX1NDQU5fQ05DTAkJCTUKLSNkZWZpbmUgQVBfTUFYX1NZTkNfTVNHICAgICAgICAgICAgICAgICA2Ci0KLSNkZWZpbmUgQVBfU1lOQ19GVU5DX1NJWkUgICAgICAgICAgICAgICAoQVBfTUFYX1NZTkNfU1RBVEUgKiBBUF9NQVhfU1lOQ19NU0cpCi0KLS8qICovCi0vKiBDb21tb24gV1BBIHN0YXRlIG1hY2hpbmU6IHN0YXRlcywgZXZlbnRzLCB0b3RhbCBmdW5jdGlvbiAjICovCi0vKiAqLwotI2RlZmluZSBXUEFfUFRLICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTUFYX1dQQV9QVEtfU1RBVEUgICAgICAgICAgICAxCi0KLSNkZWZpbmUgV1BBX01BQ0hJTkVfQkFTRSAgICAgICAgICAgICAwCi0jZGVmaW5lIE1UMl9FQVBQYWNrZXQgICAgICAgICAgICAgICAgMAotI2RlZmluZSBNVDJfRUFQT0xTdGFydCAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgTVQyX0VBUE9MTG9nb2ZmICAgICAgICAgICAgICAyCi0jZGVmaW5lIE1UMl9FQVBPTEtleSAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBNVDJfRUFQT0xBU0ZBbGVydCAgICAgICAgICAgIDQKLSNkZWZpbmUgTUFYX1dQQV9NU0cgICAgICAgICAgICAgICAgICA1Ci0KLSNkZWZpbmUgV1BBX0ZVTkNfU0laRSAgICAgICAgICAgICAgICAoTUFYX1dQQV9QVEtfU1RBVEUgKiBNQVhfV1BBX01TRykKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQotLyogdmFsdWUgZG9tYWluIG9mIDgwMi4xMSBoZWFkZXIgRkMuVHl0ZSwgd2hpY2ggaXMgYjMuLmIyIG9mIHRoZSAxc3QtYnl0ZSBvZiBNQUMgaGVhZGVyICovCi0jZGVmaW5lIEJUWVBFX01HTVQgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEJUWVBFX0NOVEwgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIEJUWVBFX0RBVEEgICAgICAgICAgICAgICAgICAyCi0KLS8qIHZhbHVlIGRvbWFpbiBvZiA4MDIuMTEgTUdNVCBmcmFtZSdzIEZDLnN1YnR5cGUsIHdoaWNoIGlzIGI3Li40IG9mIHRoZSAxc3QtYnl0ZSBvZiBNQUMgaGVhZGVyICovCi0jZGVmaW5lIFNVQlRZUEVfQVNTT0NfUkVRICAgICAgICAgICAwCi0jZGVmaW5lIFNVQlRZUEVfQVNTT0NfUlNQICAgICAgICAgICAxCi0jZGVmaW5lIFNVQlRZUEVfUkVBU1NPQ19SRVEgICAgICAgICAyCi0jZGVmaW5lIFNVQlRZUEVfUkVBU1NPQ19SU1AgICAgICAgICAzCi0jZGVmaW5lIFNVQlRZUEVfUFJPQkVfUkVRICAgICAgICAgICA0Ci0jZGVmaW5lIFNVQlRZUEVfUFJPQkVfUlNQICAgICAgICAgICA1Ci0jZGVmaW5lIFNVQlRZUEVfQkVBQ09OICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFNVQlRZUEVfQVRJTSAgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIFNVQlRZUEVfRElTQVNTT0MgICAgICAgICAgICAxMAotI2RlZmluZSBTVUJUWVBFX0FVVEggICAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgU1VCVFlQRV9ERUFVVEggICAgICAgICAgICAgIDEyCi0jZGVmaW5lIFNVQlRZUEVfQUNUSU9OICAgICAgICAgICAgICAxMwotI2RlZmluZSBTVUJUWVBFX0FDVElPTl9OT19BQ0sgICAgICAgICAgICAgIDE0Ci0KLS8qIHZhbHVlIGRvbWFpbiBvZiA4MDIuMTEgQ05UTCBmcmFtZSdzIEZDLnN1YnR5cGUsIHdoaWNoIGlzIGI3Li40IG9mIHRoZSAxc3QtYnl0ZSBvZiBNQUMgaGVhZGVyICovCi0jZGVmaW5lIFNVQlRZUEVfV1JBUFBFUiAgICAgICAJNwotI2RlZmluZSBTVUJUWVBFX0JMT0NLX0FDS19SRVEgICAgICAgOAotI2RlZmluZSBTVUJUWVBFX0JMT0NLX0FDSyAgICAgICAgICAgOQotI2RlZmluZSBTVUJUWVBFX1BTX1BPTEwgICAgICAgICAgICAgMTAKLSNkZWZpbmUgU1VCVFlQRV9SVFMgICAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIFNVQlRZUEVfQ1RTICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBTVUJUWVBFX0FDSyAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgU1VCVFlQRV9DRkVORCAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIFNVQlRZUEVfQ0ZFTkRfQ0ZBQ0sgICAgICAgICAxNQotCi0vKiB2YWx1ZSBkb21haW4gb2YgODAyLjExIERBVEEgZnJhbWUncyBGQy5zdWJ0eXBlLCB3aGljaCBpcyBiNy4uNCBvZiB0aGUgMXN0LWJ5dGUgb2YgTUFDIGhlYWRlciAqLwotI2RlZmluZSBTVUJUWVBFX0RBVEEgICAgICAgICAgICAgICAgMAotI2RlZmluZSBTVUJUWVBFX0RBVEFfQ0ZBQ0sgICAgICAgICAgMQotI2RlZmluZSBTVUJUWVBFX0RBVEFfQ0ZQT0xMICAgICAgICAgMgotI2RlZmluZSBTVUJUWVBFX0RBVEFfQ0ZBQ0tfQ0ZQT0xMICAgMwotI2RlZmluZSBTVUJUWVBFX05VTExfRlVOQyAgICAgICAgICAgNAotI2RlZmluZSBTVUJUWVBFX0NGQUNLICAgICAgICAgICAgICAgNQotI2RlZmluZSBTVUJUWVBFX0NGUE9MTCAgICAgICAgICAgICAgNgotI2RlZmluZSBTVUJUWVBFX0NGQUNLX0NGUE9MTCAgICAgICAgNwotI2RlZmluZSBTVUJUWVBFX1FEQVRBICAgICAgICAgICAgICAgOAotI2RlZmluZSBTVUJUWVBFX1FEQVRBX0NGQUNLICAgICAgICAgOQotI2RlZmluZSBTVUJUWVBFX1FEQVRBX0NGUE9MTCAgICAgICAgMTAKLSNkZWZpbmUgU1VCVFlQRV9RREFUQV9DRkFDS19DRlBPTEwgIDExCi0jZGVmaW5lIFNVQlRZUEVfUU9TX05VTEwgICAgICAgICAgICAxMgotI2RlZmluZSBTVUJUWVBFX1FPU19DRkFDSyAgICAgICAgICAgMTMKLSNkZWZpbmUgU1VCVFlQRV9RT1NfQ0ZQT0xMICAgICAgICAgIDE0Ci0jZGVmaW5lIFNVQlRZUEVfUU9TX0NGQUNLX0NGUE9MTCAgICAxNQotCi0vKiBBQ0sgcG9saWN5IG9mIFFPUyBDb250cm9sIGZpZWxkIGJpdCA2OjUgKi8KLSNkZWZpbmUgTk9STUFMX0FDSyAgICAgICAgICAgICAgICAgIDB4MDAJLyogYjY6NSA9IDAwICovCi0jZGVmaW5lIE5PX0FDSyAgICAgICAgICAgICAgICAgICAgICAweDIwCS8qIGI2OjUgPSAwMSAqLwotI2RlZmluZSBOT19FWFBMSUNJVF9BQ0sgICAgICAgICAgICAgMHg0MAkvKiBiNjo1ID0gMTAgKi8KLSNkZWZpbmUgQkxPQ0tfQUNLICAgICAgICAgICAgICAgICAgIDB4NjAJLyogYjY6NSA9IDExICovCi0KLS8qICovCi0vKiBydG1wX2RhdGEuYyB1c2VzIHRoaXMgZGVmaW5pdGlvbiAqLwotLyogKi8KLSNkZWZpbmUgTEVOR1RIXzgwMl8xMSAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIExFTkdUSF84MDJfMTFfQU5EX0ggICAgICAgICAzMAotI2RlZmluZSBMRU5HVEhfODAyXzExX0NSQ19IICAgICAgICAgMzQKLSNkZWZpbmUgTEVOR1RIXzgwMl8xMV9DUkMgICAgICAgICAgIDI4Ci0jZGVmaW5lIExFTkdUSF84MDJfMTFfV0lUSF9BRERSNCAgICAzMAotI2RlZmluZSBMRU5HVEhfODAyXzMgICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgTEVOR1RIXzgwMl8zX1RZUEUgICAgICAgICAgIDIKLSNkZWZpbmUgTEVOR1RIXzgwMl8xX0ggICAgICAgICAgICAgIDgKLSNkZWZpbmUgTEVOR1RIX0VBUE9MX0ggICAgICAgICAgICAgIDQKLSNkZWZpbmUgTEVOR1RIX1dNTVFPU19ICQkJCTIKLSNkZWZpbmUgTEVOR1RIX0NSQyAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgTUFYX1NFUV9OVU1CRVIgICAgICAgICAgICAgIDB4MGZmZgotI2RlZmluZSBMRU5HVEhfODAyXzNfTk9fVFlQRQkJMTIKLSNkZWZpbmUgTEVOR1RIXzgwMl8xUQkJCQk0CS8qIFZMQU4gcmVsYXRlZCAqLwotCi0vKiBTVEFfQ1NSNC5maWVsZC5UeFJlc3VsdCAqLwotI2RlZmluZSBUWF9SRVNVTFRfU1VDQ0VTUyAgICAgICAgICAgMAotI2RlZmluZSBUWF9SRVNVTFRfWkVST19MRU5HVEggICAgICAgMQotI2RlZmluZSBUWF9SRVNVTFRfVU5ERVJfUlVOICAgICAgICAgMgotI2RlZmluZSBUWF9SRVNVTFRfT0hZX0VSUk9SICAgICAgICAgNAotI2RlZmluZSBUWF9SRVNVTFRfUkVUUllfRkFJTCAgICAgICAgNgotCi0vKiBBbGwgUEhZIHJhdGUgc3VtbWFyeSBpbiBUWEQgKi8KLS8qIFByZWFtYmxlIE1PREUgaW4gVHhEICovCi0jZGVmaW5lIE1PREVfQ0NLCTAKLSNkZWZpbmUgTU9ERV9PRkRNICAgMQotI2RlZmluZSBNT0RFX0hUTUlYCTIKLSNkZWZpbmUgTU9ERV9IVEdSRUVORklFTEQJMwotCi0vKiBNQ1MgZm9yIENDSy4gIEJXLlNHSS5TVEJDIGFyZSByZXNlcnZlZCAqLwotI2RlZmluZSBNQ1NfbG9uZ1BfUkFURV8xICAgICAgICAgICAgICAgICAgICAgIDAJLyogbG9uZyBwcmVhbWJsZSBDQ0sgMU1icHMgKi8KLSNkZWZpbmUgTUNTX2xvbmdQX1JBVEVfMiAgICAgICAgICAgICAgICAgICAgICAxCS8qIGxvbmcgcHJlYW1ibGUgQ0NLIDFNYnBzICovCi0jZGVmaW5lIE1DU19sb25nUF9SQVRFXzVfNSAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBNQ1NfbG9uZ1BfUkFURV8xMSAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgTUNTX1NIT1JUUF9SQVRFXzEgICAgICAgICAgICAgICAgICAgICAgNAkvKiBsb25nIHByZWFtYmxlIENDSyAxTWJwcy4gc2hvcnQgaXMgZm9yYmlkZGVuIGluIDFNYnBzICovCi0jZGVmaW5lIE1DU19TSE9SVFBfUkFURV8yICAgICAgICAgICAgICAgICAgICAgIDUJLyogc2hvcnQgcHJlYW1ibGUgQ0NLIDJNYnBzICovCi0jZGVmaW5lIE1DU19TSE9SVFBfUkFURV81XzUgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgTUNTX1NIT1JUUF9SQVRFXzExICAgICAgICAgICAgICAgICAgICAgNwotLyogVG8gc2VuZCBkdXBsaWNhdGUgbGVnYWN5IE9GRE0uIHNldCBCVz1CV180MC4gIFNHSS5TVEJDIGFyZSByZXNlcnZlZCAqLwotI2RlZmluZSBNQ1NfUkFURV82ICAgICAgICAgICAgICAgICAgICAgIDAJLyogbGVnYWN5IE9GRE0gKi8KLSNkZWZpbmUgTUNTX1JBVEVfOSAgICAgICAgICAgICAgICAgICAgICAxCS8qIE9GRE0gKi8KLSNkZWZpbmUgTUNTX1JBVEVfMTIgICAgICAgICAgICAgICAgICAgICAyCS8qIE9GRE0gKi8KLSNkZWZpbmUgTUNTX1JBVEVfMTggICAgICAgICAgICAgICAgICAgICAzCS8qIE9GRE0gKi8KLSNkZWZpbmUgTUNTX1JBVEVfMjQgICAgICAgICAgICAgICAgICAgICA0CS8qIE9GRE0gKi8KLSNkZWZpbmUgTUNTX1JBVEVfMzYgICAgICAgICAgICAgICAgICAgICA1CS8qIE9GRE0gKi8KLSNkZWZpbmUgTUNTX1JBVEVfNDggICAgICAgICAgICAgICAgICAgICA2CS8qIE9GRE0gKi8KLSNkZWZpbmUgTUNTX1JBVEVfNTQgICAgICAgICAgICAgICAgICAgICA3CS8qIE9GRE0gKi8KLS8qIEhUICovCi0jZGVmaW5lIE1DU18wCQkwCS8qIDFTICovCi0jZGVmaW5lIE1DU18xCQkxCi0jZGVmaW5lIE1DU18yCQkyCi0jZGVmaW5lIE1DU18zCQkzCi0jZGVmaW5lIE1DU180CQk0Ci0jZGVmaW5lIE1DU181CQk1Ci0jZGVmaW5lIE1DU182CQk2Ci0jZGVmaW5lIE1DU183CQk3Ci0jZGVmaW5lIE1DU184CQk4CS8qIDJTICovCi0jZGVmaW5lIE1DU185CQk5Ci0jZGVmaW5lIE1DU18xMAkJMTAKLSNkZWZpbmUgTUNTXzExCQkxMQotI2RlZmluZSBNQ1NfMTIJCTEyCi0jZGVmaW5lIE1DU18xMwkJMTMKLSNkZWZpbmUgTUNTXzE0CQkxNAotI2RlZmluZSBNQ1NfMTUJCTE1Ci0jZGVmaW5lIE1DU18xNgkJMTYJLyogMyozICovCi0jZGVmaW5lIE1DU18xNwkJMTcKLSNkZWZpbmUgTUNTXzE4CQkxOAotI2RlZmluZSBNQ1NfMTkJCTE5Ci0jZGVmaW5lIE1DU18yMAkJMjAKLSNkZWZpbmUgTUNTXzIxCQkyMQotI2RlZmluZSBNQ1NfMjIJCTIyCi0jZGVmaW5lIE1DU18yMwkJMjMKLSNkZWZpbmUgTUNTXzMyCQkzMgotI2RlZmluZSBNQ1NfQVVUTwkJMzMKLQotLyogT0lEX0hUUEhZTU9ERSAqLwotLyogTU9ERSAqLwotI2RlZmluZSBIVE1PREVfTU0JMAotI2RlZmluZSBIVE1PREVfR0YJMQotCi0vKiBGaXhlZCBUeCBNT0RFIC0gSFQsIENDSyBvciBPRkRNICovCi0jZGVmaW5lIEZJWEVEX1RYTU9ERV9IVAkJMAotI2RlZmluZSBGSVhFRF9UWE1PREVfQ0NLCTEKLSNkZWZpbmUgRklYRURfVFhNT0RFX09GRE0gCTIKLS8qIEJXICovCi0jZGVmaW5lIEJXXzIwCQlCQU5EX1dJRFRIXzIwCi0jZGVmaW5lIEJXXzQwCQlCQU5EX1dJRFRIXzQwCi0jZGVmaW5lIEJXX0JPVEgJCUJBTkRfV0lEVEhfQk9USAotI2RlZmluZSBCV18xMAkJQkFORF9XSURUSF8xMAkvKiA4MDIuMTFqIGhhcyAxME1Iei4gVGhpcyBkZWZpbml0aW9uIGlzIGZvciBpbnRlcm5hbCB1c2FnZS4gZG9lc24ndCBmaWxsIGluIHRoZSBJRSBvciBvdGhlciBmaWVsZC4gKi8KLQotLyogU0hPUlRHSSAqLwotI2RlZmluZSBHSV80MDAJCUdBUF9JTlRFUlZBTF80MDAJLyogb25seSBzdXBwb3J0IGluIEhUIG1vZGUgKi8KLSNkZWZpbmUgR0lfQk9USAkJR0FQX0lOVEVSVkFMX0JPVEgKLSNkZWZpbmUgR0lfODAwCQlHQVBfSU5URVJWQUxfODAwCi0vKiBTVEJDICovCi0jZGVmaW5lIFNUQkNfTk9ORQkwCi0jZGVmaW5lIFNUQkNfVVNFCTEJLyogbGltaXRlZCB1c2UgaW4gcnQyODYwYiBwaHkgKi8KLSNkZWZpbmUgUlhTVEJDX09ORQkxCS8qIHJ4IHN1cHBvcnQgb2Ygb25lIHNwYXRpYWwgc3RyZWFtICovCi0jZGVmaW5lIFJYU1RCQ19UV08JMgkvKiByeCBzdXBwb3J0IG9mIDEgYW5kIDIgc3BhdGlhbCBzdHJlYW0gKi8KLSNkZWZpbmUgUlhTVEJDX1RIUgkzCS8qIHJ4IHN1cHBvcnQgb2YgMX4zIHNwYXRpYWwgc3RyZWFtICovCi0vKiBNQ1MgRkVFREJBQ0sgKi8KLSNkZWZpbmUgTUNTRkJLX05PTkUJMAkvKiBub3Qgc3VwcG9ydCBtY3MgZmVlZGJhY2sgLyAqLwotI2RlZmluZSBNQ1NGQktfUlNWCTEJLyogcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgTUNTRkJLX1VOU09MSUNJVAkyCS8qIG9ubHkgc3VwcG9ydCB1bnNvbGljdCBtY3MgZmVlZGJhY2sgKi8KLSNkZWZpbmUgTUNTRkJLX01SUQkzCS8qIHJlc3BvbnNlIHRvIGJvdGggTVJRIGFuZCB1bnNvbGljdCBtY3MgZmVlZGJhY2sgKi8KLQotLyogTUlNTyBwb3dlciBzYWZlICovCi0jZGVmaW5lCU1NUFNfU1RBVElDCTAKLSNkZWZpbmUJTU1QU19EWU5BTUlDCQkxCi0jZGVmaW5lICAgTU1QU19SU1YJCTIKLSNkZWZpbmUgTU1QU19FTkFCTEUJCTMKLQotLyogQS1NU0RVIHNpemUgKi8KLSNkZWZpbmUJQU1TRFVfMAkwCi0jZGVmaW5lCUFNU0RVXzEJCTEKLQotLyogTUNTIHVzZSA3IGJpdHMgKi8KLSNkZWZpbmUgVFhSQVRFTUlNTwkJMHg4MAotI2RlZmluZSBUWFJBVEVNQ1MJCTB4N0YKLSNkZWZpbmUgVFhSQVRFT0ZETQkJMHg3RgotI2RlZmluZSBSQVRFXzEgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBSQVRFXzIgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBSQVRFXzVfNSAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBSQVRFXzExICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBSQVRFXzYgICAgICAgICAgICAgICAgICAgICAgNAkvKiBPRkRNICovCi0jZGVmaW5lIFJBVEVfOSAgICAgICAgICAgICAgICAgICAgICA1CS8qIE9GRE0gKi8KLSNkZWZpbmUgUkFURV8xMiAgICAgICAgICAgICAgICAgICAgIDYJLyogT0ZETSAqLwotI2RlZmluZSBSQVRFXzE4ICAgICAgICAgICAgICAgICAgICAgNwkvKiBPRkRNICovCi0jZGVmaW5lIFJBVEVfMjQgICAgICAgICAgICAgICAgICAgICA4CS8qIE9GRE0gKi8KLSNkZWZpbmUgUkFURV8zNiAgICAgICAgICAgICAgICAgICAgIDkJLyogT0ZETSAqLwotI2RlZmluZSBSQVRFXzQ4ICAgICAgICAgICAgICAgICAgICAgMTAJLyogT0ZETSAqLwotI2RlZmluZSBSQVRFXzU0ICAgICAgICAgICAgICAgICAgICAgMTEJLyogT0ZETSAqLwotI2RlZmluZSBSQVRFX0ZJUlNUX09GRE1fUkFURSAgICAgICAgUkFURV82Ci0jZGVmaW5lIFJBVEVfTEFTVF9PRkRNX1JBVEUgICAgICAgIAlSQVRFXzU0Ci0jZGVmaW5lIFJBVEVfNl81ICAgICAgICAgICAgICAgICAgICAxMgkvKiBIVCBtaXggKi8KLSNkZWZpbmUgUkFURV8xMyAgICAgICAgICAgICAgICAgICAgIDEzCS8qIEhUIG1peCAqLwotI2RlZmluZSBSQVRFXzE5XzUgICAgICAgICAgICAgICAgICAgMTQJLyogSFQgbWl4ICovCi0jZGVmaW5lIFJBVEVfMjYgICAgICAgICAgICAgICAgICAgICAxNQkvKiBIVCBtaXggKi8KLSNkZWZpbmUgUkFURV8zOSAgICAgICAgICAgICAgICAgICAgIDE2CS8qIEhUIG1peCAqLwotI2RlZmluZSBSQVRFXzUyICAgICAgICAgICAgICAgICAgICAgMTcJLyogSFQgbWl4ICovCi0jZGVmaW5lIFJBVEVfNThfNSAgICAgICAgICAgICAgICAgICAxOAkvKiBIVCBtaXggKi8KLSNkZWZpbmUgUkFURV82NSAgICAgICAgICAgICAgICAgICAgIDE5CS8qIEhUIG1peCAqLwotI2RlZmluZSBSQVRFXzc4ICAgICAgICAgICAgICAgICAgICAgMjAJLyogSFQgbWl4ICovCi0jZGVmaW5lIFJBVEVfMTA0ICAgICAgICAgICAgICAgICAgICAyMQkvKiBIVCBtaXggKi8KLSNkZWZpbmUgUkFURV8xMTcgICAgICAgICAgICAgICAgICAgIDIyCS8qIEhUIG1peCAqLwotI2RlZmluZSBSQVRFXzEzMCAgICAgICAgICAgICAgICAgICAgMjMJLyogSFQgbWl4ICovCi0vKiNkZWZpbmUgUkFURV9BVVRPX1NXSVRDSCAgICAgICAgICAgIDI1NSAvLyBmb3IgU3RhQ2ZnLkZpeGVkVHhSYXRlIG9ubHkgKi8KLSNkZWZpbmUgSFRSQVRFXzAgICAgICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgUkFURV9GSVJTVF9NTV9SQVRFICAgICAgICBIVFJBVEVfMAotI2RlZmluZSBSQVRFX0ZJUlNUX0hUX1JBVEUgICAgICAgIEhUUkFURV8wCi0jZGVmaW5lIFJBVEVfTEFTVF9IVF9SQVRFICAgICAgICBIVFJBVEVfMAotCi0vKiBwVHhXSS0+dHhvcCAqLwotI2RlZmluZSBJRlNfSFRUWE9QICAgICAgICAgICAgICAgICAwCS8qIFRoZSB0eG9wIHdpbGwgYmUgaGFuZGxlcyBieSBBU0lDLiAqLwotI2RlZmluZSBJRlNfUElGUyAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBJRlNfU0lGUyAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBJRlNfQkFDS09GRiAgICAgICAgICAgICAgICAgMwotCi0vKiBwVHhELT5SZXRyeU1vZGUgKi8KLSNkZWZpbmUgbG9uZ19SRVRSWSAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgU0hPUlRfUkVUUlkgICAgICAgICAgICAgICAgIDAKLQotLyogQ291bnRyeSBSZWdpb24gZGVmaW5pdGlvbiAqLwotI2RlZmluZSBSRUdJT05fTUlOSU1VTV9CR19CQU5EICAgICAgICAgICAgMAotI2RlZmluZSBSRUdJT05fMF9CR19CQU5EICAgICAgICAgICAgICAgICAgMAkvKiAxLTExICovCi0jZGVmaW5lIFJFR0lPTl8xX0JHX0JBTkQgICAgICAgICAgICAgICAgICAxCS8qIDEtMTMgKi8KLSNkZWZpbmUgUkVHSU9OXzJfQkdfQkFORCAgICAgICAgICAgICAgICAgIDIJLyogMTAtMTEgKi8KLSNkZWZpbmUgUkVHSU9OXzNfQkdfQkFORCAgICAgICAgICAgICAgICAgIDMJLyogMTAtMTMgKi8KLSNkZWZpbmUgUkVHSU9OXzRfQkdfQkFORCAgICAgICAgICAgICAgICAgIDQJLyogMTQgKi8KLSNkZWZpbmUgUkVHSU9OXzVfQkdfQkFORCAgICAgICAgICAgICAgICAgIDUJLyogMS0xNCAqLwotI2RlZmluZSBSRUdJT05fNl9CR19CQU5EICAgICAgICAgICAgICAgICAgNgkvKiAzLTkgKi8KLSNkZWZpbmUgUkVHSU9OXzdfQkdfQkFORCAgICAgICAgICAgICAgICAgIDcJLyogNS0xMyAqLwotI2RlZmluZSBSRUdJT05fMzFfQkdfQkFORCAgICAgICAgICAgICAgICAgMzEJLyogNS0xMyAqLwotI2RlZmluZSBSRUdJT05fTUFYSU1VTV9CR19CQU5EICAgICAgICAgICAgNwotCi0jZGVmaW5lIFJFR0lPTl9NSU5JTVVNX0FfQkFORCAgICAgICAgICAgICAwCi0jZGVmaW5lIFJFR0lPTl8wX0FfQkFORCAgICAgICAgICAgICAgICAgICAwCS8qIDM2LCA0MCwgNDQsIDQ4LCA1MiwgNTYsIDYwLCA2NCwgMTQ5LCAxNTMsIDE1NywgMTYxLCAxNjUgKi8KLSNkZWZpbmUgUkVHSU9OXzFfQV9CQU5EICAgICAgICAgICAgICAgICAgIDEJLyogMzYsIDQwLCA0NCwgNDgsIDUyLCA1NiwgNjAsIDY0LCAxMDAsIDEwNCwgMTA4LCAxMTIsIDExNiwgMTIwLCAxMjQsIDEyOCwgMTMyLCAxMzYsIDE0MCAqLwotI2RlZmluZSBSRUdJT05fMl9BX0JBTkQgICAgICAgICAgICAgICAgICAgMgkvKiAzNiwgNDAsIDQ0LCA0OCwgNTIsIDU2LCA2MCwgNjQgKi8KLSNkZWZpbmUgUkVHSU9OXzNfQV9CQU5EICAgICAgICAgICAgICAgICAgIDMJLyogNTIsIDU2LCA2MCwgNjQsIDE0OSwgMTUzLCAxNTcsIDE2MSAqLwotI2RlZmluZSBSRUdJT05fNF9BX0JBTkQgICAgICAgICAgICAgICAgICAgNAkvKiAxNDksIDE1MywgMTU3LCAxNjEsIDE2NSAqLwotI2RlZmluZSBSRUdJT05fNV9BX0JBTkQgICAgICAgICAgICAgICAgICAgNQkvKiAxNDksIDE1MywgMTU3LCAxNjEgKi8KLSNkZWZpbmUgUkVHSU9OXzZfQV9CQU5EICAgICAgICAgICAgICAgICAgIDYJLyogMzYsIDQwLCA0NCwgNDggKi8KLSNkZWZpbmUgUkVHSU9OXzdfQV9CQU5EICAgICAgICAgICAgICAgICAgIDcJLyogMzYsIDQwLCA0NCwgNDgsIDUyLCA1NiwgNjAsIDY0LCAxMDAsIDEwNCwgMTA4LCAxMTIsIDExNiwgMTIwLCAxMjQsIDEyOCwgMTMyLCAxMzYsIDE0MCwgMTQ5LCAxNTMsIDE1NywgMTYxLCAxNjUsIDE2OSwgMTczICovCi0jZGVmaW5lIFJFR0lPTl84X0FfQkFORCAgICAgICAgICAgICAgICAgICA4CS8qIDUyLCA1NiwgNjAsIDY0ICovCi0jZGVmaW5lIFJFR0lPTl85X0FfQkFORCAgICAgICAgICAgICAgICAgICA5CS8qIDM2LCA0MCwgNDQsIDQ4LCA1MiwgNTYsIDYwLCA2NCwgMTAwLCAxMDQsIDEwOCwgMTEyLCAxMTYsIDEzMiwgMTM2LCAxNDAsIDE0OSwgMTUzLCAxNTcsIDE2MSwgMTY1ICovCi0jZGVmaW5lIFJFR0lPTl8xMF9BX0JBTkQgICAgICAgICAgICAgICAgICAxMAkvKiAzNiwgNDAsIDQ0LCA0OCwgMTQ5LCAxNTMsIDE1NywgMTYxLCAxNjUgKi8KLSNkZWZpbmUgUkVHSU9OXzExX0FfQkFORCAgICAgICAgICAgICAgICAgIDExCS8qIDM2LCA0MCwgNDQsIDQ4LCA1MiwgNTYsIDYwLCA2NCwgMTAwLCAxMDQsIDEwOCwgMTEyLCAxMTYsIDEyMCwgMTQ5LCAxNTMsIDE1NywgMTYxICovCi0jZGVmaW5lIFJFR0lPTl8xMl9BX0JBTkQgICAgICAgICAgICAgICAgICAxMgkvKiAzNiwgNDAsIDQ0LCA0OCwgNTIsIDU2LCA2MCwgNjQsIDEwMCwgMTA0LCAxMDgsIDExMiwgMTE2LCAxMjAsIDEyNCwgMTI4LCAxMzIsIDEzNiwgMTQwICovCi0jZGVmaW5lIFJFR0lPTl8xM19BX0JBTkQgICAgICAgICAgICAgICAgICAxMwkvKiA1MiwgNTYsIDYwLCA2NCwgMTAwLCAxMDQsIDEwOCwgMTEyLCAxMTYsIDEyMCwgMTI0LCAxMjgsIDEzMiwgMTM2LCAxNDAsIDE0OSwgMTUzLCAxNTcsIDE2MSAqLwotI2RlZmluZSBSRUdJT05fMTRfQV9CQU5EICAgICAgICAgICAgICAgICAgMTQJLyogMzYsIDQwLCA0NCwgNDgsIDUyLCA1NiwgNjAsIDY0LCAxMDAsIDEwNCwgMTA4LCAxMTIsIDExNiwgMTM2LCAxNDAsIDE0OSwgMTUzLCAxNTcsIDE2MSwgMTY1ICovCi0jZGVmaW5lIFJFR0lPTl8xNV9BX0JBTkQgICAgICAgICAgICAgICAgICAxNQkvKiAxNDksIDE1MywgMTU3LCAxNjEsIDE2NSwgMTY5LCAxNzMgKi8KLSNkZWZpbmUgUkVHSU9OX01BWElNVU1fQV9CQU5EICAgICAgICAgICAgIDE1Ci0KLS8qIHBUeEQtPkNpcGhlckFsZyAqLwotI2RlZmluZSBDSVBIRVJfTk9ORSAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBDSVBIRVJfV0VQNjQgICAgICAgICAgICAgICAgMQotI2RlZmluZSBDSVBIRVJfV0VQMTI4ICAgICAgICAgICAgICAgMgotI2RlZmluZSBDSVBIRVJfVEtJUCAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBDSVBIRVJfQUVTICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBDSVBIRVJfQ0tJUDY0ICAgICAgICAgICAgICAgNQotI2RlZmluZSBDSVBIRVJfQ0tJUDEyOCAgICAgICAgICAgICAgNgotI2RlZmluZSBDSVBIRVJfVEtJUF9OT19NSUMgICAgICAgICAgNwkvKiBNSUMgYXBwZW5kZWQgYnkgZHJpdmVyOiBub3QgYSB2YWxpZCB2YWx1ZSBpbiBoYXJkd2FyZSBrZXkgdGFibGUgKi8KLSNkZWZpbmUgQ0lQSEVSX1NNUzQJCQkJCTgKLQotLyogTEVEIFN0YXR1cy4gKi8KLSNkZWZpbmUgTEVEX0xJTktfRE9XTiAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTEVEX0xJTktfVVAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgTEVEX1JBRElPX09GRiAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgTEVEX1JBRElPX09OICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgTEVEX0hBTFQgICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgTEVEX1dQUyAgICAgICAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgTEVEX09OX1NJVEVfU1VSVkVZICAgICAgICAgIDYKLSNkZWZpbmUgTEVEX1BPV0VSX1VQICAgICAgICAgICAgICAgIDcKLQotLyogdmFsdWUgZG9tYWluIG9mIHBBZC0+TGVkQ250bC5MZWRNb2RlIGFuZCBFMlBST00gKi8KLSNkZWZpbmUgTEVEX01PREVfREVGQVVMVCAgICAgICAgICAgIDAKLSNkZWZpbmUgTEVEX01PREVfVFdPX0xFRAkJCTEKLS8qI2RlZmluZSBMRURfTU9ERV9TSUdOQUxfU1RSRUdUSCAgICAgICAgICAgICAgIDggIC8vIEVFUFJPTSBkZWZpbmUgPTggKi8KLSNkZWZpbmUgTEVEX01PREVfU0lHTkFMX1NUUkVHVEgJCTB4NDAJLyogRUVQUk9NIGRlZmluZSA9IDY0ICovCi0KLS8qIFJDNCBpbml0IHZhbHVlLCB1c2VkIGZybyBXRVAgJiBUS0lQICovCi0jZGVmaW5lIFBQUElOSVRGQ1MzMiAgICAgICAgICAgICAgICAweGZmZmZmZmZmCS8qIEluaXRpYWwgRkNTIHZhbHVlICovCi0KLS8qIHZhbHVlIGRvbWFpbiBvZiBwQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZC4gODAyLjFYIGNvbnRyb2xsZWQgcG9ydCBkZWZpbml0aW9uICovCi0jZGVmaW5lIFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEICAgICAxCi0jZGVmaW5lIFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRCAyCi0KLSNkZWZpbmUgUEFJUldJU0VfS0VZICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgR1JPVVBfS0VZICAgICAgICAgICAgICAgICAgIDIKLQotLypkZWZpbml0aW9uIG9mIERSUyAqLwotI2RlZmluZSBNQVhfU1RFUF9PRl9UWF9SQVRFX1NXSVRDSAkzMgotCi0vKiBwcmUtYWxsb2NhdGVkIGZyZWUgTkRJUyBQQUNLRVQvQlVGRkVSIHBvbGwgZm9yIGludGVybmFsIHVzYWdlICovCi0jZGVmaW5lIE1BWF9OVU1fT0ZfRlJFRV9ORElTX1BBQ0tFVCAxMjgKLQotLypCbG9jayBBQ0sgKi8KLSNkZWZpbmUgTUFYX1RYX1JFT1JERVJCVUYgICA2NAotI2RlZmluZSBNQVhfUlhfUkVPUkRFUkJVRiAgIDY0Ci0jZGVmaW5lIERFRkFVTFRfVFhfVElNRU9VVCAgIDMwCi0jZGVmaW5lIERFRkFVTFRfUlhfVElNRU9VVCAgIDMwCi0KLS8qIGRlZmluaXRpb24gb2YgUmVjaXBpZW50IG9yIE9yaWdpbmF0b3IgKi8KLSNkZWZpbmUgSV9SRUNJUElFTlQgICAgICAgICAgICAgICAgICBUUlVFCi0jZGVmaW5lIElfT1JJR0lOQVRPUiAgICAgICAgICAgICAgICAgICBGQUxTRQotCi0jZGVmaW5lIERFRkFVTFRfQkJQX1RYX1BPV0VSICAgICAgICAwCi0jZGVmaW5lIERFRkFVTFRfUkZfVFhfUE9XRVIgICAgICAgICA1Ci0KLSNkZWZpbmUgTUFYX0lOSV9CVUZGRVJfU0laRQkJCTQwOTYKLSNkZWZpbmUgTUFYX1BBUkFNX0JVRkZFUl9TSVpFCQkoMjA0OCkJLyogZW5vdWdoIGZvciBBQ0wgKDE4KjY0KSAqLwotCQkJCQkJCQkJCQkvKjE4IDogdGhlIGxlbmd0aCBvZiBNYWMgYWRkcmVzcyBhY2NlcHRhYmxlIGZvcm1hdCAiMDE6MDI6MDM6MDQ6MDU6MDY7IikgKi8KLQkJCQkJCQkJCQkJLyo2NCA6IE1BWF9OVU1fT0ZfQUNMX0xJU1QgKi8KLS8qIGRlZmluaXRpb24gb2YgcEFkLT5PcE1vZGUgKi8KLSNkZWZpbmUgT1BNT0RFX1NUQSAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgT1BNT0RFX0FQICAgICAgICAgICAgICAgICAgIDEKLS8qI2RlZmluZSBPUE1PREVfTDNfQlJHICAgICAgICAgICAgICAgMiAgICAgICAvLyBhcyBBUCBhbmQgU1RBIGF0IHRoZSBzYW1lIHRpbWUgKi8KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PSBBUCBydG1wX2RlZi5oID09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotLyogdmFsdWUgZG9tYWluIGZvciBwQWQtPkV2ZW50VGFiLkxvZ1tdLkV2ZW50ICovCi0jZGVmaW5lIEVWRU5UX1JFU0VUX0FDQ0VTU19QT2ludCAgICAwCS8qIExvZyA9ICJoaDptbTpzcyAgIFJlc3RhcnQgQWNjZXNzIFBvaW50IiAqLwotI2RlZmluZSBFVkVOVF9BU1NPQ0lBVEVEICAgICAgICAgICAgMQkvKiBMb2cgPSAiaGg6bW06c3MgICBTVEEgMDA6MDE6MDI6MDM6MDQ6MDUgYXNzb2NpYXRlZCIgKi8KLSNkZWZpbmUgRVZFTlRfRElTQVNTT0NJQVRFRCAgICAgICAgIDIJLyogTG9nID0gImhoOm1tOnNzICAgU1RBIDAwOjAxOjAyOjAzOjA0OjA1IGxlZnQgdGhpcyBCU1MiICovCi0jZGVmaW5lIEVWRU5UX0FHRURfT1VUICAgICAgICAgICAgICAzCS8qIExvZyA9ICJoaDptbTpzcyAgIFNUQSAwMDowMTowMjowMzowNDowNSB3YXMgYWdlZC1vdXQgYW5kIHJlbW92ZWQgZnJvbSB0aGlzIEJTUyIgKi8KLSNkZWZpbmUgRVZFTlRfQ09VTlRFUl9NICAgICAgICAgICAgIDQKLSNkZWZpbmUgRVZFTlRfSU5WQUxJRF9QU0sgICAgICAgICAgIDUKLSNkZWZpbmUgRVZFTlRfTUFYX0VWRU5UX1RZUEUgICAgICAgIDYKLS8qID09PT0gZW5kIG9mIEFQIHJ0bXBfZGVmLmggPT09PT09PT09PT09ICovCi0KLS8qIGRlZmluaXRpb24gUlNTSSBOdW1iZXIgKi8KLSNkZWZpbmUgUlNTSV8wCQkJCQkwCi0jZGVmaW5lIFJTU0lfMQkJCQkJMQotI2RlZmluZSBSU1NJXzIJCQkJCTIKLQotLyogZGVmaW5pdGlvbiBvZiByYWRhciBkZXRlY3Rpb24gKi8KLSNkZWZpbmUgUkRfTk9STUFMX01PREUJCQkJMAkvKiBOb3QgZm91bmQgcmFkYXIgc2lnbmFsICovCi0jZGVmaW5lIFJEX1NXSVRDSElOR19NT0RFCQkJMQkvKiBGb3VuZCByYWRhciBzaWduYWwsIGFuZCBkb2luZyBjaGFubmVsIHN3aXRjaCAqLwotI2RlZmluZSBSRF9TSUxFTkNFX01PREUJCQkJMgkvKiBBZnRlciBjaGFubmVsIHN3aXRjaCwgbmVlZCB0byBiZSBzaWxlbmNlIGEgd2hpbGUgdG8gZW5zdXJlIHJhZGFyIG5vdCBmb3VuZCAqLwotCi0vKkRyaXZlciBkZWZpbmVkIGNpZCBmb3IgbWFwcGluZyBzdGF0dXMgYW5kIGNvbW1hbmQuICovCi0jZGVmaW5lICBTTEVFUENJRAkweDExCi0jZGVmaW5lICBXQUtFQ0lECTB4MjIKLSNkZWZpbmUgIFFVRVJZUE9XRVJDSUQJMHgzMwotI2RlZmluZSAgT1dORVJNQ1UJMHgxCi0jZGVmaW5lICBPV05FUkNQVQkweDAKLQotLyogTUJTU0lEIGRlZmluaXRpb24gKi8KLSNkZWZpbmUgRU5UUllfTk9UX0ZPVU5EICAgICAgICAgICAgIDB4RkYKLQotLyogQWZ0ZXIgTGludXggMi42LjksCi0gKiBWTEFOIG1vZHVsZSB1c2UgUHJpdmF0ZSAoZnJvbSB1c2VyKSBpbnRlcmZhY2UgZmxhZ3MgKG5ldGRldmljZS0+cHJpdl9mbGFncykuCi0gKiAjZGVmaW5lIElGRl84MDJfMVFfVkxBTiAweDEgICAgICAgICAtLSAgICA4MDIuMVEgVkxBTiBkZXZpY2UuICBpbiBpZi5oCi0gKiByZWYgdG8gaXBfc2Fib3RhZ2Vfb3V0KCkgWyBvdXQtPnByaXZfZmxhZ3MgJiBJRkZfODAyXzFRX1ZMQU4gXSBpbiBicl9uZXRmaWx0ZXIuYwotICoKLSAqIEZvciB0aGlzIHJlYXNvbiwgd2UgTVVTVCB1c2UgRVZFTiB2YWx1ZSBpbiBwcml2X2ZsYWdzCi0gKi8KLSNkZWZpbmUgSU5UX01BSU4gICAgICAgICAgICAgICAgICAgIDB4MDEwMAotI2RlZmluZSBJTlRfTUJTU0lEICAgICAgICAgICAgICAgICAgMHgwMjAwCi0jZGVmaW5lIElOVF9XRFMgICAgICAgICAgICAgICAgICAgICAweDAzMDAKLSNkZWZpbmUgSU5UX0FQQ0xJICAgICAgICAgICAgICAgICAgIDB4MDQwMAotI2RlZmluZSBJTlRfTUVTSCAgICAgICAgICAgICAgICAgICAJMHgwNTAwCi0KLSNkZWZpbmUgSU5GX01BSU5fREVWX05BTUUJCSJ3bGFuIgotI2RlZmluZSBJTkZfTUJTU0lEX0RFVl9OQU1FCQkicmEiCi0jZGVmaW5lIElORl9XRFNfREVWX05BTUUJCSJ3ZHMiCi0jZGVmaW5lIElORl9BUENMSV9ERVZfTkFNRQkJImFwY2xpIgotI2RlZmluZSBJTkZfTUVTSF9ERVZfTkFNRQkJIm1lc2giCi0KLS8qIFdFUCBLZXkgVFlQRSAqLwotI2RlZmluZSBXRVBfSEVYQURFQ0lNQUxfVFlQRSAgICAwCi0jZGVmaW5lIFdFUF9BU0NJSV9UWVBFICAgICAgICAgIDEKLQotLyogV0lSRUxFU1MgRVZFTlRTIGRlZmluaXRpb24gKi8KLS8qIE1heCBudW1iZXIgb2YgY2hhciBpbiBjdXN0b20gZXZlbnQsIHJlZmVyIHRvIHdpcmVsZXNzX3Rvb2xzLjI4L3dpcmVsZXNzLjIwLmggKi8KLSNkZWZpbmUgSVdfQ1VTVE9NX01BWF9MRU4JCQkJICAJCQkyNTUJLyogSW4gYnl0ZXMgKi8KLQotLyogRm9yIHN5c3RlbSBldmVudCAtIHN0YXJ0ICovCi0jZGVmaW5lCUlXX1NZU19FVkVOVF9GTEFHX1NUQVJUICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCi0jZGVmaW5lCUlXX0FTU09DX0VWRU5UX0ZMQUcgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCi0jZGVmaW5lCUlXX0RJU0FTU09DX0VWRU5UX0ZMQUcgICAgICAgICAgICAgICAgICAgICAgMHgwMjAxCi0jZGVmaW5lCUlXX0RFQVVUSF9FVkVOVF9GTEFHICAgICAgICAgICAgICAgICAgICAgIAkweDAyMDIKLSNkZWZpbmUJSVdfQUdFT1VUX0VWRU5UX0ZMQUcgICAgICAgICAgICAgICAgICAgICAgCTB4MDIwMwotI2RlZmluZQlJV19DT1VOVEVSX01FQVNVUkVTX0VWRU5UX0ZMQUcgICAgICAgICAgICAgIDB4MDIwNAotI2RlZmluZQlJV19SRVBMQVlfQ09VTlRFUl9ESUZGX0VWRU5UX0ZMQUcgICAgICAgICAgIDB4MDIwNQotI2RlZmluZQlJV19SU05JRV9ESUZGX0VWRU5UX0ZMQUcgICAgICAgICAgIAkJCTB4MDIwNgotI2RlZmluZQlJV19NSUNfRElGRl9FVkVOVF9GTEFHICAgICAgICAgICAJCQkweDAyMDcKLSNkZWZpbmUgSVdfSUNWX0VSUk9SX0VWRU5UX0ZMQUcJCQkJCQkweDAyMDgKLSNkZWZpbmUgSVdfTUlDX0VSUk9SX0VWRU5UX0ZMQUcJCQkJCQkweDAyMDkKLSNkZWZpbmUgSVdfR1JPVVBfSFNfVElNRU9VVF9FVkVOVF9GTEFHCQkJCTB4MDIwQQotI2RlZmluZQlJV19QQUlSV0lTRV9IU19USU1FT1VUX0VWRU5UX0ZMQUcJCQkweDAyMEIKLSNkZWZpbmUgSVdfUlNOSUVfU0FOSVRZX0ZBSUxfRVZFTlRfRkxBRwkJCQkweDAyMEMKLSNkZWZpbmUgSVdfU0VUX0tFWV9ET05FX1dQQTFfRVZFTlRfRkxBRwkJCQkweDAyMEQKLSNkZWZpbmUgSVdfU0VUX0tFWV9ET05FX1dQQTJfRVZFTlRfRkxBRwkJCQkweDAyMEUKLSNkZWZpbmUgSVdfU1RBX0xJTktVUF9FVkVOVF9GTEFHCQkJCQkweDAyMEYKLSNkZWZpbmUgSVdfU1RBX0xJTktET1dOX0VWRU5UX0ZMQUcJCQkJCTB4MDIxMAotI2RlZmluZSBJV19TQ0FOX0NPTVBMRVRFRF9FVkVOVF9GTEFHCQkJCTB4MDIxMQotI2RlZmluZSBJV19TQ0FOX0VOUVVFVUVfRkFJTF9FVkVOVF9GTEFHCQkJCTB4MDIxMgotLyogaWYgYWRkIG5ldyBzeXN0ZW0gZXZlbnQgZmxhZywgcGxlYXNlIHVwZGF0ZSB0aGUgSVdfU1lTX0VWRU5UX0ZMQUdfRU5EICovCi0jZGVmaW5lCUlXX1NZU19FVkVOVF9GTEFHX0VORCAgICAgICAgICAgICAgICAgICAgICAgMHgwMjEyCi0jZGVmaW5lCUlXX1NZU19FVkVOVF9UWVBFX05VTQkJCQkJCShJV19TWVNfRVZFTlRfRkxBR19FTkQgLSBJV19TWVNfRVZFTlRfRkxBR19TVEFSVCArIDEpCi0vKiBGb3Igc3lzdGVtIGV2ZW50IC0gZW5kICovCi0KLS8qIEZvciBzcG9vZiBhdHRhY2sgZXZlbnQgLSBzdGFydCAqLwotI2RlZmluZQlJV19TUE9PRl9FVkVOVF9GTEFHX1NUQVJUICAgICAgICAgICAgICAgICAgIDB4MDMwMAotI2RlZmluZSBJV19DT05GTElDVF9TU0lEX0VWRU5UX0ZMQUcJCQkJCTB4MDMwMAotI2RlZmluZSBJV19TUE9PRl9BU1NPQ19SRVNQX0VWRU5UX0ZMQUcJCQkJMHgwMzAxCi0jZGVmaW5lIElXX1NQT09GX1JFQVNTT0NfUkVTUF9FVkVOVF9GTEFHCQkJMHgwMzAyCi0jZGVmaW5lIElXX1NQT09GX1BST0JFX1JFU1BfRVZFTlRfRkxBRwkJCQkweDAzMDMKLSNkZWZpbmUgSVdfU1BPT0ZfQkVBQ09OX0VWRU5UX0ZMQUcJCQkJCTB4MDMwNAotI2RlZmluZSBJV19TUE9PRl9ESVNBU1NPQ19FVkVOVF9GTEFHCQkJCTB4MDMwNQotI2RlZmluZSBJV19TUE9PRl9BVVRIX0VWRU5UX0ZMQUcJCQkJCTB4MDMwNgotI2RlZmluZSBJV19TUE9PRl9ERUFVVEhfRVZFTlRfRkxBRwkJCQkJMHgwMzA3Ci0jZGVmaW5lIElXX1NQT09GX1VOS05PV05fTUdNVF9FVkVOVF9GTEFHCQkJMHgwMzA4Ci0jZGVmaW5lIElXX1JFUExBWV9BVFRBQ0tfRVZFTlRfRkxBRwkJCQkJMHgwMzA5Ci0vKiBpZiBhZGQgbmV3IHNwb29mIGF0dGFjayBldmVudCBmbGFnLCBwbGVhc2UgdXBkYXRlIHRoZSBJV19TUE9PRl9FVkVOVF9GTEFHX0VORCAqLwotI2RlZmluZQlJV19TUE9PRl9FVkVOVF9GTEFHX0VORCAgICAgICAgICAgICAgICAgICAgIDB4MDMwOQotI2RlZmluZQlJV19TUE9PRl9FVkVOVF9UWVBFX05VTQkJCQkJCShJV19TUE9PRl9FVkVOVF9GTEFHX0VORCAtIElXX1NQT09GX0VWRU5UX0ZMQUdfU1RBUlQgKyAxKQotLyogRm9yIHNwb29mIGF0dGFjayBldmVudCAtIGVuZCAqLwotCi0vKiBGb3IgZmxvb2RpbmcgYXR0YWNrIGV2ZW50IC0gc3RhcnQgKi8KLSNkZWZpbmUJSVdfRkxPT0RfRVZFTlRfRkxBR19TVEFSVCAgICAgICAgICAgICAgICAgICAweDA0MDAKLSNkZWZpbmUgSVdfRkxPT0RfQVVUSF9FVkVOVF9GTEFHCQkJCQkweDA0MDAKLSNkZWZpbmUgSVdfRkxPT0RfQVNTT0NfUkVRX0VWRU5UX0ZMQUcJCQkJMHgwNDAxCi0jZGVmaW5lIElXX0ZMT09EX1JFQVNTT0NfUkVRX0VWRU5UX0ZMQUcJCQkJMHgwNDAyCi0jZGVmaW5lIElXX0ZMT09EX1BST0JFX1JFUV9FVkVOVF9GTEFHCQkJCTB4MDQwMwotI2RlZmluZSBJV19GTE9PRF9ESVNBU1NPQ19FVkVOVF9GTEFHCQkJCTB4MDQwNAotI2RlZmluZSBJV19GTE9PRF9ERUFVVEhfRVZFTlRfRkxBRwkJCQkJMHgwNDA1Ci0jZGVmaW5lIElXX0ZMT09EX0VBUF9SRVFfRVZFTlRfRkxBRwkJCQkJMHgwNDA2Ci0vKiBpZiBhZGQgbmV3IGZsb29kaW5nIGF0dGFjayBldmVudCBmbGFnLCBwbGVhc2UgdXBkYXRlIHRoZSBJV19GTE9PRF9FVkVOVF9GTEFHX0VORCAqLwotI2RlZmluZQlJV19GTE9PRF9FVkVOVF9GTEFHX0VORCAgICAgICAgICAgICAgICAgICAJMHgwNDA2Ci0jZGVmaW5lCUlXX0ZMT09EX0VWRU5UX1RZUEVfTlVNCQkJCQkJKElXX0ZMT09EX0VWRU5UX0ZMQUdfRU5EIC0gSVdfRkxPT0RfRVZFTlRfRkxBR19TVEFSVCArIDEpCi0vKiBGb3IgZmxvb2RpbmcgYXR0YWNrIC0gZW5kICovCi0KLS8qIEVuZCAtIFdJUkVMRVNTIEVWRU5UUyBkZWZpbml0aW9uICovCi0KLS8qIGRlZmluaXRpb24gZm9yIERMUywga2F0aHkgKi8KLSNkZWZpbmUJTUFYX05VTV9PRl9JTklUX0RMU19FTlRSWSAgIDEKLSNkZWZpbmUJTUFYX05VTV9PRl9ETFNfRU5UUlkgICAgICAgIE1BWF9OVU1CRVJfT0ZfRExTX0VOVFJZCi0KLS8qQmxvY2sgQUNLLCBrYXRoeSAqLwotI2RlZmluZSBNQVhfVFhfUkVPUkRFUkJVRgkJNjQKLSNkZWZpbmUgTUFYX1JYX1JFT1JERVJCVUYJCTY0Ci0jZGVmaW5lIERFRkFVTFRfVFhfVElNRU9VVAkJMzAKLSNkZWZpbmUgREVGQVVMVF9SWF9USU1FT1VUCQkzMAotI2RlZmluZSBNQVhfQkFSRUNJX1NFU1NJT04JCTgKLQotI2lmbmRlZiBJV19FU1NJRF9NQVhfU0laRQotLyogTWF4aW11bSBzaXplIG9mIHRoZSBFU1NJRCBhbmQgcEFkLT5uaWNrbmFtZSBzdHJpbmdzICovCi0jZGVmaW5lIElXX0VTU0lEX01BWF9TSVpFICAgCQkzMgotI2VuZGlmCi0KLS8qIEZvciBBc2ljUmFkaW9PZmYvQXNpY1JhZGlvT24gZnVuY3Rpb24gKi8KLSNkZWZpbmUgRE9UMTFQT1dFUlNBVkUJCTAKLSNkZWZpbmUgR1VJUkFESU9fT0ZGCQkxCi0jZGVmaW5lIFJUTVBfSEFMVAkJICAgIDIKLSNkZWZpbmUgR1VJX0lETEVfUE9XRVJfU0FWRQkJMwotLyogLS0gKi8KLQotLyogZGVmaW5pdGlvbiBmb3IgV3BhU3VwcG9ydCBmbGFnICovCi0jZGVmaW5lIFdQQV9TVVBQTElDQU5UX0RJU0FCTEUJCQkJMAotI2RlZmluZSBXUEFfU1VQUExJQ0FOVF9FTkFCTEUJCQkJMQotI2RlZmluZQlXUEFfU1VQUExJQ0FOVF9FTkFCTEVfV0lUSF9XRUJfVUkJMgotCi0vKiBFbmRpYW4gYnl0ZSBzd2FwcGluZyBjb2RlcyAqLwotI2RlZmluZSBTV0FQMTYoeCkgXAotICAgICgodTE2KSggXAotICAgICgoKHUxNikoeCkgJiAodTE2KTB4MDBmZlUpIDw8IDgpIHwgXAotICAgICgoKHUxNikoeCkgJiAodTE2KTB4ZmYwMFUpID4+IDgpICkpCi0KLSNkZWZpbmUgU1dBUDMyKHgpIFwKLSAgICAoKHUzMikoIFwKLSAgICAoKCh1MzIpKHgpICYgKHUzMikweDAwMDAwMGZmVUwpIDw8IDI0KSB8IFwKLSAgICAoKCh1MzIpKHgpICYgKHUzMikweDAwMDBmZjAwVUwpIDw8ICA4KSB8IFwKLSAgICAoKCh1MzIpKHgpICYgKHUzMikweDAwZmYwMDAwVUwpID4+ICA4KSB8IFwKLSAgICAoKCh1MzIpKHgpICYgKHUzMikweGZmMDAwMDAwVUwpID4+IDI0KSApKQotCi0jZGVmaW5lIFNXQVA2NCh4KSBcCi0gICAgKCh1NjQpKCBcCi0gICAgKHU2NCkoKCh1NjQpKHgpICYgKHU2NCkweDAwMDAwMDAwMDAwMDAwZmZVTEwpIDw8IDU2KSB8IFwKLSAgICAodTY0KSgoKHU2NCkoeCkgJiAodTY0KTB4MDAwMDAwMDAwMDAwZmYwMFVMTCkgPDwgNDApIHwgXAotICAgICh1NjQpKCgodTY0KSh4KSAmICh1NjQpMHgwMDAwMDAwMDAwZmYwMDAwVUxMKSA8PCAyNCkgfCBcCi0gICAgKHU2NCkoKCh1NjQpKHgpICYgKHU2NCkweDAwMDAwMDAwZmYwMDAwMDBVTEwpIDw8ICA4KSB8IFwKLSAgICAodTY0KSgoKHU2NCkoeCkgJiAodTY0KTB4MDAwMDAwZmYwMDAwMDAwMFVMTCkgPj4gIDgpIHwgXAotICAgICh1NjQpKCgodTY0KSh4KSAmICh1NjQpMHgwMDAwZmYwMDAwMDAwMDAwVUxMKSA+PiAyNCkgfCBcCi0gICAgKHU2NCkoKCh1NjQpKHgpICYgKHU2NCkweDAwZmYwMDAwMDAwMDAwMDBVTEwpID4+IDQwKSB8IFwKLSAgICAodTY0KSgoKHU2NCkoeCkgJiAodTY0KTB4ZmYwMDAwMDAwMDAwMDAwMFVMTCkgPj4gNTYpICkpCi0KLSNkZWZpbmUgY3B1MmxlNjQoeCkgKCh1NjQpKHgpKQotI2RlZmluZSBsZTJjcHU2NCh4KSAoKHU2NCkoeCkpCi0jZGVmaW5lIGNwdTJsZTMyKHgpICgodTMyKSh4KSkKLSNkZWZpbmUgbGUyY3B1MzIoeCkgKCh1MzIpKHgpKQotI2RlZmluZSBjcHUybGUxNih4KSAoKHUxNikoeCkpCi0jZGVmaW5lIGxlMmNwdTE2KHgpICgodTE2KSh4KSkKLSNkZWZpbmUgY3B1MmJlNjQoeCkgU1dBUDY0KCh4KSkKLSNkZWZpbmUgYmUyY3B1NjQoeCkgU1dBUDY0KCh4KSkKLSNkZWZpbmUgY3B1MmJlMzIoeCkgU1dBUDMyKCh4KSkKLSNkZWZpbmUgYmUyY3B1MzIoeCkgU1dBUDMyKCh4KSkKLSNkZWZpbmUgY3B1MmJlMTYoeCkgU1dBUDE2KCh4KSkKLSNkZWZpbmUgYmUyY3B1MTYoeCkgU1dBUDE2KCh4KSkKLQotI2RlZmluZSBBQlMoX3gsIF95KSAoKF94KSA+IChfeSkpID8gKChfeCkgLShfeSkpIDogKChfeSkgLShfeCkpCi0KLSNkZWZpbmUgQTJEZWMoX1gsIF9wKQkJCQlcCi17CQkJCQkJCQkJXAotCXU4ICpwOwkJCQkJCVwKLQlfWCA9IDA7CQkJCQkJCVwKLQlwID0gX3A7CQkJCQkJCVwKLQl3aGlsZSAoKCgqcCA+PSAnMCcpICYmICgqcCA8PSAnOScpKSkJCVwKLQl7CQkJCQkJCQkJCQkJXAotCQlpZiAoKCpwID49ICcwJykgJiYgKCpwIDw9ICc5JykpCQlcCi0JCQlfWCA9IF9YICogMTAgKyAqcCAtIDQ4OwkJCQkJXAotCQlwKys7CQkJCQkJCQkJCVwKLQl9CQkJCQkJCQkJCQkJXAotfQotCi0jZGVmaW5lIEEySGV4KF9YLCBfcCkJCQkJXAotZG97CQkJCQkJCQkJXAotCWNoYXIgKl9fcDsJCQkJCQlcCi0JKF9YKSA9IDA7CQkJCQkJCVwKLQlfX3AgPSAoY2hhciAqKShfcCk7CQkJCQkJCVwKLQl3aGlsZSAoKCgqX19wID49ICdhJykgJiYgKCpfX3AgPD0gJ2YnKSkgfHwgKCgqX19wID49ICdBJykgJiYgKCpfX3AgPD0gJ0YnKSkgfHwgKCgqX19wID49ICcwJykgJiYgKCpfX3AgPD0gJzknKSkpCQlcCi0JewkJCQkJCQkJCQkJCVwKLQkJaWYgKCgqX19wID49ICdhJykgJiYgKCpfX3AgPD0gJ2YnKSkJCQkJXAotCQkJKF9YKSA9IChfWCkgKiAxNiArICpfX3AgLSA4NzsJCQkJCVwKLQkJZWxzZSBpZiAoKCpfX3AgPj0gJ0EnKSAmJiAoKl9fcCA8PSAnRicpKQkJXAotCQkJKF9YKSA9IChfWCkgKiAxNiArICpfX3AgLSA1NTsJCQkJCVwKLQkJZWxzZSBpZiAoKCpfX3AgPj0gJzAnKSAmJiAoKl9fcCA8PSAnOScpKQkJXAotCQkJKF9YKSA9IChfWCkgKiAxNiArICpfX3AgLSA0ODsJCQkJCVwKLQkJX19wKys7CQkJCQkJCQkJCVwKLQl9CQkJCQkJCQkJCQkJXAotfXdoaWxlKDApCi0KLSNlbmRpZiAvKiBfX1JUTVBfREVGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydG1wX2RvdDExLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0bXBfZG90MTEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY4YWJkNy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0bXBfZG90MTEuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFJhbGluayBUZWNoIEluYy4KLSAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKLSAqIEhzaW5jaHUgQ291bnR5IDMwMiwKLSAqIFRhaXdhbiwgUi5PLkMuCi0gKgotICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSovCi0KLSNpZm5kZWYgX19ET1QxMV9CQVNFX0hfXwotI2RlZmluZSBfX0RPVDExX0JBU0VfSF9fCi0KLSNpbmNsdWRlICJydG1wX3R5cGUuaCIKLQotLyogNC1ieXRlIEhUQyBmaWVsZC4gIG1heWJlIGluY2x1ZGVkIGluIGFueSBmcmFtZSBleGNlcHQgbm9uLVFPUyBkYXRhIGZyYW1lLiAgVGhlIE9yZGVyIGJpdCBtdXN0IHNldCAxLiAqLwotc3RydWN0IFBBQ0tFRCBydF9odF9jb250cm9sIHsKLQl1MzIgTUE6MTsJCS8qbWFuYWdlbWVudCBhY3Rpb24gcGF5bG9hZCBleGlzdCBpbiAoUW9TIE51bGwrSFRDKSAqLwotCXUzMiBUUlE6MTsJCS8qc291bmRpbmcgcmVxdWVzdCAqLwotCXUzMiBNUlE6MTsJCS8qTUNTIGZlZWRiYWNrLiBSZXF1ZXN0IGZvciBhIE1DUyBmZWVkYmFjayAqLwotCXUzMiBNUlNvckFTSTozOwkvKiBNUlEgU2VxdWVuY2UgaWRlbnRpZmllci4gdW5jaGFuZ2VkIGR1cmluZyBlbnRpcmUgcHJvY2VkdXJlLiAweDAwMC0weDExMC4gKi8KLQl1MzIgTUZTOjM7CQkvKlNFVCB0byB0aGUgcmVjZWl2ZWQgdmFsdWUgb2YgTVJTLiAweDExMSBmb3IgdW5zb2xpY2l0ZWQgTUZCLiAqLwotCXUzMiBNRkJvckFTQzo3OwkvKkxpbmsgYWRhcHRhdGlvbiBmZWVkYmFjayBjb250YWluaW5nIHJlY29tbWVuZGVkIE1DUy4gMHg3ZiBmb3Igbm8gZmVlZGJhY2sgb3Igbm90IGF2YWlsYWJsZSAqLwotCXUzMiBDYWxQb3M6MjsJLyogY2FsaWJyYXRpb24gcG9zaXRpb24gKi8KLQl1MzIgQ2FsU2VxOjI7CS8qY2FsaWJyYXRpb24gc2VxdWVuY2UgKi8KLQl1MzIgRkJLUmVxOjI7CS8qZmVlZGJhY2sgcmVxdWVzdCAqLwotCXUzMiBDU0lTVEVFUklORzoyOwkvKkNTSS8gU1RFRVJJTkcgKi8KLQl1MzIgWkxGQW5ub3VjZToxOwkvKiBaTEYgYW5ub3VuY2VtZW50ICovCi0JdTMyIHJzdjo1OwkJLypjYWxpYnJhdGlvbiBzZXF1ZW5jZSAqLwotCXUzMiBBQ0NvbnN0cmFpbnQ6MTsJLypmZWVkYmFjayByZXF1ZXN0ICovCi0JdTMyIFJERzoxOwkJLypSREcgLyBNb3JlIFBQRFUgKi8KLX07Ci0KLS8qIDItYnl0ZSBRT1MgQ09OVFJPTCBmaWVsZCAqLwotc3RydWN0IFBBQ0tFRCBydF9xb3NfY29udHJvbCB7Ci0JdTE2IFRJRDo0OwotCXUxNiBFT1NQOjE7Ci0JdTE2IEFja1BvbGljeToyOwkvKjA6IG5vcm1hbCBBQ0sgMTpObyBBQ0sgMjpzY2hlZHVsZWQgdW5kZXIgTVRCQS9QU01QICAzOiBCQSAqLwotCXUxNiBBTXNkdVByZXNlbnQ6MTsKLQl1MTYgVHhvcF9RdWV1ZVNpemU6ODsKLX07Ci0KLS8qIDItYnl0ZSBGcmFtZSBjb250cm9sIGZpZWxkICovCi1zdHJ1Y3QgUEFDS0VEIHJ0X2ZyYW1lX2NvbnRyb2wgewotCXUxNiBWZXI6MjsJCS8qIFByb3RvY29sIHZlcnNpb24gKi8KLQl1MTYgVHlwZToyOwkJLyogTVNEVSB0eXBlICovCi0JdTE2IFN1YlR5cGU6NDsJLyogTVNEVSBzdWJ0eXBlICovCi0JdTE2IFRvRHM6MTsJCS8qIFRvIERTIGluZGljYXRpb24gKi8KLQl1MTYgRnJEczoxOwkJLyogRnJvbSBEUyBpbmRpY2F0aW9uICovCi0JdTE2IE1vcmVGcmFnOjE7CS8qIE1vcmUgZnJhZ21lbnQgYml0ICovCi0JdTE2IFJldHJ5OjE7CQkvKiBSZXRyeSBzdGF0dXMgYml0ICovCi0JdTE2IFB3ck1nbXQ6MTsJLyogUG93ZXIgbWFuYWdlbWVudCBiaXQgKi8KLQl1MTYgTW9yZURhdGE6MTsJLyogTW9yZSBkYXRhIGJpdCAqLwotCXUxNiBXZXA6MTsJCS8qIFdlcCBkYXRhICovCi0JdTE2IE9yZGVyOjE7CQkvKiBTdHJpY3Qgb3JkZXIgZXhwZWN0ZWQgKi8KLX07Ci0KLXN0cnVjdCBQQUNLRUQgcnRfaGVhZGVyXzgwMl8xMSB7Ci0Jc3RydWN0IHJ0X2ZyYW1lX2NvbnRyb2wgRkM7Ci0JdTE2IER1cmF0aW9uOwotCXU4IEFkZHIxW01BQ19BRERSX0xFTl07Ci0JdTggQWRkcjJbTUFDX0FERFJfTEVOXTsKLQl1OCBBZGRyM1tNQUNfQUREUl9MRU5dOwotCXUxNiBGcmFnOjQ7Ci0JdTE2IFNlcXVlbmNlOjEyOwotCXU4IE9jdGV0WzBdOwotfTsKLQotc3RydWN0IFBBQ0tFRCBydF9wc3BvbGxfZnJhbWUgewotCXN0cnVjdCBydF9mcmFtZV9jb250cm9sIEZDOwotCXUxNiBBaWQ7Ci0JdTggQnNzaWRbTUFDX0FERFJfTEVOXTsKLQl1OCBUYVtNQUNfQUREUl9MRU5dOwotfTsKLQotc3RydWN0IFBBQ0tFRCBydF9ydHNfZnJhbWUgewotCXN0cnVjdCBydF9mcmFtZV9jb250cm9sIEZDOwotCXUxNiBEdXJhdGlvbjsKLQl1OCBBZGRyMVtNQUNfQUREUl9MRU5dOwotCXU4IEFkZHIyW01BQ19BRERSX0xFTl07Ci19OwotCi0jZW5kaWYgLyogX19ET1QxMV9CQVNFX0hfXyAvLyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydG1wX2lmYWNlLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0bXBfaWZhY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA4YzA1NS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0bXBfaWZhY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUmFsaW5rIFRlY2ggSW5jLgotICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAotICogSHNpbmNodSBDb3VudHkgMzAyLAotICogVGFpd2FuLCBSLk8uQy4KLSAqCi0gKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0gICAgTW9kdWxlIE5hbWU6Ci0JcnRfaWZhY2UuaAotCi0gICAgQWJzdHJhY3Q6Ci0KLSAgICBSZXZpc2lvbiBIaXN0b3J5OgotICAgIFdobyAgICAgICAgICBXaGVuICAgICAgICAgIFdoYXQKLSAgICAtLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotI2lmbmRlZiBfX1JUTVBfSUZBQ0VfSF9fCi0jZGVmaW5lIF9fUlRNUF9JRkFDRV9IX18KLQotI2lmZGVmIFJUTVBfUENJX1NVUFBPUlQKLSNpbmNsdWRlICJpZmFjZS9ydG1wX3BjaS5oIgotI2VuZGlmIC8qIFJUTVBfUENJX1NVUFBPUlQgLy8gKi8KLSNpZmRlZiBSVE1QX1VTQl9TVVBQT1JUCi0jaW5jbHVkZSAiaWZhY2UvcnRtcF91c2IuaCIKLSNlbmRpZiAvKiBSVE1QX1VTQl9TVVBQT1JUIC8vICovCi0KLXN0cnVjdCBydF9pbmZfcGNpX2NvbmZpZyB7Ci0JdW5zaWduZWQgbG9uZyBDU1JCYXNlQWRkcmVzczsJLyogUENJIE1NSU8gQmFzZSBBZGRyZXNzLCBhbGwgYWNjZXNzIHdpbGwgdXNlICovCi0JdW5zaWduZWQgaW50IGlycV9udW07Ci19OwotCi1zdHJ1Y3QgcnRfaW5mX3VzYl9jb25maWcgewotCXU4IEJ1bGtJbkVwQWRkcjsJLyogYnVsay1pbiBlbmRwb2ludCBhZGRyZXNzICovCi0JdTggQnVsa091dEVwQWRkcls2XTsJLyogYnVsay1vdXQgZW5kcG9pbnQgYWRkcmVzcyAqLwotfTsKLQotc3RydWN0IHJ0X2luZl9yYnVzX2NvbmZpZyB7Ci0JdW5zaWduZWQgbG9uZyBjc3JfYWRkcjsKLQl1bnNpZ25lZCBpbnQgaXJxOwotfTsKLQotdHlwZWRlZiBlbnVtIF9SVE1QX0lORl9UWVBFXyB7Ci0JUlRNUF9ERVZfSU5GX1VOS05PV04gPSAwLAotCVJUTVBfREVWX0lORl9QQ0kgPSAxLAotCVJUTVBfREVWX0lORl9VU0IgPSAyLAotCVJUTVBfREVWX0lORl9SQlVTID0gNCwKLX0gUlRNUF9JTkZfVFlQRTsKLQotdHlwZWRlZiB1bmlvbiBfUlRNUF9JTkZfQ09ORklHXyB7Ci0Jc3RydWN0IHJ0X2luZl9wY2lfY29uZmlnIHBjaUNvbmZpZzsKLQlzdHJ1Y3QgcnRfaW5mX3VzYl9jb25maWcgdXNiQ29uZmlnOwotCXN0cnVjdCBydF9pbmZfcmJ1c19jb25maWcgcmJ1c0NvbmZpZzsKLX0gUlRNUF9JTkZfQ09ORklHOwotCi0jZW5kaWYgLyogX19SVE1QX0lGQUNFX0hfXyAvLyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydG1wX21jdS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydG1wX21jdS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDk4N2U1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcF9tY3UuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUmFsaW5rIFRlY2ggSW5jLgotICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAotICogSHNpbmNodSBDb3VudHkgMzAyLAotICogVGFpd2FuLCBSLk8uQy4KLSAqCi0gKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0JTW9kdWxlIE5hbWU6Ci0JcnRtcF9tY3UuaAotCi0JQWJzdHJhY3Q6Ci0JTWluaXBvcnQgaGVhZGVyIGZpbGUgZm9yIG1jdSByZWxhdGVkIGluZm9ybWF0aW9uCi0KLQlSZXZpc2lvbiBIaXN0b3J5OgotCVdobyAgICAgICAgIFdoZW4gICAgICAgICAgV2hhdAotCS0tLS0tLS0tICAgIC0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQotI2lmbmRlZiBfX1JUTVBfTUNVX0hfXwotI2RlZmluZSBfX1JUTVBfTUNVX0hfXwotCi1pbnQgUnRtcEFzaWNFcmFzZUZpcm13YXJlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLWludCBSdG1wQXNpY0xvYWRGaXJtd2FyZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi1pbnQgUnRtcEFzaWNTZW5kQ29tbWFuZFRvTWN1KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICAgdTggQ29tbWFuZCwKLQkJCSAgICAgdTggVG9rZW4sIHU4IEFyZzAsIHU4IEFyZzEpOwotCi0jZW5kaWYgLyogX19SVE1QX01DVV9IX18gLy8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcF9vcy5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydG1wX29zLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0YzMwYzhjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcF9vcy5oCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSAgICBNb2R1bGUgTmFtZToKLQlydG1wX29zLmgKLQotICAgIEFic3RyYWN0OgotCi0gICAgUmV2aXNpb24gSGlzdG9yeToKLSAgICBXaG8gICAgICAgICAgV2hlbiAgICAgICAgICBXaGF0Ci0gICAgLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLSNpZm5kZWYgX19SVE1QX09TX0hfXwotI2RlZmluZSBfX1JUTVBfT1NfSF9fCi0KLSNpZmRlZiBMSU5VWAotI2luY2x1ZGUgInJ0X2xpbnV4LmgiCi0jZW5kaWYgLyogTElOVVggLy8gKi8KLQotLyoKLQlUaGlzIGRhdGEgc3RydWN0dXJlIG1haW5seSBzdHJpcCBzb21lIGNhbGxiYWNrIGZ1bmN0aW9uIGRlZmluZWQgaW4KLQkic3RydWN0IG5ldF9kZXZpY2UiIGluIGtlcm5lbCBzb3VyY2UgImluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgiLgotCi0JVGhlIGRlZmluaXRpb24gb2YgdGhpcyBkYXRhIHN0cnVjdHVyZSBtYXkgdmFyaW91cyBkZXBlbmRzIG9uIGRpZmZlcmVudAotCU9TLiBVc2UgaXQgY2FyZWZ1bGx5LgotKi8KLXN0cnVjdCBydF9ydG1wX29zX25ldGRldl9vcF9ob29rIHsKLQljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm5ldGRldl9vcHM7Ci0Jdm9pZCAqcHJpdjsKLQlpbnQgcHJpdl9mbGFnczsKLQl1bnNpZ25lZCBjaGFyIGRldkFkZHJbNl07Ci0JdW5zaWduZWQgY2hhciBkZXZOYW1lWzE2XTsKLQl1bnNpZ25lZCBjaGFyIG5lZWRQcm90Y3RlZDsKLX07Ci0KLXR5cGVkZWYgZW51bSBfUlRNUF9UQVNLX1NUQVRVU18gewotCVJUTVBfVEFTS19TVEFUX1VOS05PV04gPSAwLAotCVJUTVBfVEFTS19TVEFUX0lOSVRFRCA9IDEsCi0JUlRNUF9UQVNLX1NUQVRfUlVOTklORyA9IDIsCi0JUlRNUF9UQVNLX1NUQVRfU1RPUEVEID0gNCwKLX0gUlRNUF9UQVNLX1NUQVRVUzsKLSNkZWZpbmUgUlRNUF9UQVNLX0NBTl9ET19JTlNFUlQJCShSVE1QX1RBU0tfU1RBVF9JTklURUQgfFJUTVBfVEFTS19TVEFUX1JVTk5JTkcpCi0KLSNkZWZpbmUgUlRNUF9PU19UQVNLX05BTUVfTEVOCTE2Ci1zdHJ1Y3QgcnRfcnRtcF9vc190YXNrIHsKLQljaGFyIHRhc2tOYW1lW1JUTVBfT1NfVEFTS19OQU1FX0xFTl07Ci0Jdm9pZCAqcHJpdjsKLQkvKnVuc2lnbmVkIGxvbmcgICAgICAgICB0YXNrRmxhZ3M7ICovCi0JUlRNUF9UQVNLX1NUQVRVUyB0YXNrU3RhdHVzOwotI2lmbmRlZiBLVEhSRUFEX1NVUFBPUlQKLQlzdHJ1Y3Qgc2VtYXBob3JlIHRhc2tTZW1hOwotCXN0cnVjdCBwaWQgKnRhc2tQSUQ7Ci0Jc3RydWN0IGNvbXBsZXRpb24gdGFza0NvbXBsZXRlOwotI2VuZGlmCi0JdW5zaWduZWQgY2hhciB0YXNrX2tpbGxlZDsKLSNpZmRlZiBLVEhSRUFEX1NVUFBPUlQKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmt0aHJlYWRfdGFzazsKLQl3YWl0X3F1ZXVlX2hlYWRfdCBrdGhyZWFkX3E7Ci0JQk9PTEVBTiBrdGhyZWFkX3J1bm5pbmc7Ci0jZW5kaWYKLX07Ci0KLWludCBSdG1wT1NJUlFSZXF1ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpwTmV0RGV2KTsKLWludCBSdG1wT1NJUlFSZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlICpwTmV0RGV2KTsKLQotI2VuZGlmIC8qIF9fUk1UUF9PU19IX18gLy8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcF90aW1lci5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydG1wX3RpbWVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1YjYyODcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydG1wX3RpbWVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSAgICBNb2R1bGUgTmFtZToKLQlydG1wX3RpbWVyLmgKLQotICAgIEFic3RyYWN0OgotCVJhbGluayBXaXJlbGVzcyBEcml2ZXIgdGltZXIgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMgYW5kIGRlY2xhcmF0aW9ucyAKLQotICAgIFJldmlzaW9uIEhpc3Rvcnk6Ci0JV2hvICAgICAgICAgIAkJV2hlbiAgICAgICAgICAgICAgICAgV2hhdAotCS0tLS0tLS0tICAgIC0tLS0tLS0tLS0gICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JTmFtZSAgICAgICAgICAJCURhdGUgICAgICAgICAgICAgICAgIE1vZGlmaWNhdGlvbiBsb2dzCi0JU2hpYW5nIFR1ICAgIAkJQXVnLTI4LTIwMDggCSAgICAgaW5pdCB2ZXJzaW9uCi0JSnVzdGluIFAuIE1hdHRvY2sJMTEvMDcvMjAxMAkgICAgIEZpeCBhIHR5cG8KLQotKi8KLQotI2lmbmRlZiBfX1JUTVBfVElNRVJfSF9fCi0jZGVmaW5lICBfX1JUTVBfVElNRVJfSF9fCi0KLSNpbmNsdWRlICJydG1wX29zLmgiCi0KLSNkZWZpbmUgREVDTEFSRV9USU1FUl9GVU5DVElPTihfZnVuYykJCQlcCi0Jdm9pZCBydG1wX3RpbWVyXyMjX2Z1bmModW5zaWduZWQgbG9uZyBkYXRhKQotCi0jZGVmaW5lIEdFVF9USU1FUl9GVU5DVElPTihfZnVuYykJCQkJXAotCXJ0bXBfdGltZXJfIyNfZnVuYwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLSBUaW1lciBSZWxhdGVkIE1BUkNPIC0tLS0tLS0tLS0tLS0tLSovCi0vKiBJbiBzb21lIG9zIG9yIGNoaXBzZXQsIHdlIGhhdmUgYSBsb3Qgb2YgdGltZXIgZnVuY3Rpb25zIGFuZCB3aWxsIHJlYWQvd3JpdGUgcmVnaXN0ZXIsICovCi0vKiBpdCdzIG5vdCBhbGxvd2VkIGluIExpbnV4IFVTQiBzdWItc3lzdGVtIHRvIGRvIGl0ICggYmVjYXVzZSBvZiBzbGVlcCBpc3N1ZSB3aGVuICovCi0vKiBzdWJtaXQgdG8gY3RybCBwaXBlKS4gU28gd2UgbmVlZCBhIHdyYXBwZXIgZnVuY3Rpb24gdG8gdGFrZSBjYXJlIGl0LiAqLwotCi0jaWZkZWYgUlRNUF9USU1FUl9UQVNLX1NVUFBPUlQKLXR5cGVkZWYgdm9pZCgqUlRNUF9USU1FUl9UQVNLX0hBTkRMRSkgKHZvaWQgKlN5c3RlbVNwZWNpZmljMSwKLQkJCQkgICAgICAgdm9pZCAqRnVuY3Rpb25Db250ZXh0LAotCQkJCSAgICAgICB2b2lkICpTeXN0ZW1TcGVjaWZpYzIsCi0JCQkJICAgICAgIHZvaWQgKlN5c3RlbVNwZWNpZmljMyk7Ci0jZW5kaWYgLyogUlRNUF9USU1FUl9UQVNLX1NVUFBPUlQgLy8gKi8KLQotc3RydWN0IHJ0X3JhbGlua190aW1lciB7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgVGltZXJPYmo7CS8qIE5kaXMgVGltZXIgb2JqZWN0ICovCi0JQk9PTEVBTiBWYWxpZDsJCS8qIFNldCB0byBUcnVlIHdoZW4gY2FsbCBSVE1QSW5pdFRpbWVyICovCi0JQk9PTEVBTiBTdGF0ZTsJCS8qIFRydWUgaWYgdGltZXIgY2FuY2VsbGVkICovCi0JQk9PTEVBTiBQZXJpb2RpY1R5cGU7CS8qIFRydWUgaWYgdGltZXIgaXMgcGVyaW9kaWMgdGltZXIgKi8KLQlCT09MRUFOIFJlcGVhdDsJCS8qIFRydWUgaWYgcGVyaW9kaWMgdGltZXIgKi8KLQl1bnNpZ25lZCBsb25nIFRpbWVyVmFsdWU7CS8qIFRpbWVyIHZhbHVlIGluIG1pbGxpc2Vjb25kcyAqLwotCXVuc2lnbmVkIGxvbmcgY29va2llOwkJLyogb3Mgc3BlY2lmaWMgb2JqZWN0ICovCi0jaWZkZWYgUlRNUF9USU1FUl9UQVNLX1NVUFBPUlQKLQlSVE1QX1RJTUVSX1RBU0tfSEFORExFIGhhbmRsZTsKLQl2b2lkICpwQWQ7Ci0jZW5kaWYJCQkJLyogUlRNUF9USU1FUl9UQVNLX1NVUFBPUlQgLy8gKi8KLX07Ci0KLSNpZmRlZiBSVE1QX1RJTUVSX1RBU0tfU1VQUE9SVAotc3RydWN0IHJ0X3J0bXBfdGltZXJfdGFza19lbnRyeSB7Ci0Jc3RydWN0IHJ0X3JhbGlua190aW1lciAqcFJhVGltZXI7Ci0Jc3RydWN0IHJ0X3J0bXBfdGltZXJfdGFza19lbnRyeSAqcE5leHQ7Ci19OwotCi0jZGVmaW5lIFRJTUVSX1FVRVVFX1NJWkVfTUFYCTEyOAotc3RydWN0IHJ0X3J0bXBfdGltZXJfdGFza19xdWV1ZSB7Ci0JdW5zaWduZWQgaW50IHN0YXR1czsKLQl1bnNpZ25lZCBjaGFyICpwVGltZXJRUG9sbDsKLQlzdHJ1Y3QgcnRfcnRtcF90aW1lcl90YXNrX2VudHJ5ICpwUVBvbGxGcmVlTGlzdDsKLQlzdHJ1Y3QgcnRfcnRtcF90aW1lcl90YXNrX2VudHJ5ICpwUUhlYWQ7Ci0Jc3RydWN0IHJ0X3J0bXBfdGltZXJfdGFza19lbnRyeSAqcFFUYWlsOwotfTsKLQotI2RlZmluZSBCVUlMRF9USU1FUl9GVU5DVElPTihfZnVuYykJCQkJCQkJCQkJXAotdm9pZCBydG1wX3RpbWVyXyMjX2Z1bmModW5zaWduZWQgbG9uZyBkYXRhKQkJCQkJCQkJCQlcCi17CQkJCQkJCQkJCQkJCQkJCQkJCVwKLQlzdHJ1Y3QgcnRfcmFsaW5rX3RpbWVyICpfcFRpbWVyID0gKHN0cnVjdCBydF9yYWxpbmtfdGltZXIgKilkYXRhOwkJCQlcCi0Jc3RydWN0IHJ0X3J0bXBfdGltZXJfdGFza19lbnRyeSAqX3BRTm9kZTsJCQkJCQkJCQkJXAotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKl9wQWQ7CQkJCQkJCQkJCQlcCi0JCQkJCQkJCQkJCQkJCQkJCQkJXAotCV9wVGltZXItPmhhbmRsZSA9IF9mdW5jOwkJCQkJCQkJCQkJCQlcCi0JX3BBZCA9IChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICopX3BUaW1lci0+cEFkOwkJCQkJCQkJCQlcCi0JX3BRTm9kZSA9IFJ0bXBUaW1lclFJbnNlcnQoX3BBZCwgX3BUaW1lcik7CQkJCQkJCQlcCi0JaWYgKChfcFFOb2RlID09IE5VTEwpICYmIChfcEFkLT5UaW1lclEuc3RhdHVzICYgUlRNUF9UQVNLX0NBTl9ET19JTlNFUlQpKQlcCi0JCVJUTVBfT1NfQWRkX1RpbWVyKCZfcFRpbWVyLT5UaW1lck9iaiwgT1NfSFopOwkJCQkJCQlcCi19Ci0jZWxzZQotI2RlZmluZSBCVUlMRF9USU1FUl9GVU5DVElPTihfZnVuYykJCQkJCQkJCQkJXAotdm9pZCBydG1wX3RpbWVyXyMjX2Z1bmModW5zaWduZWQgbG9uZyBkYXRhKQkJCQkJCQkJCQlcCi17CQkJCQkJCQkJCQkJCQkJCQkJCVwKLQlzdHJ1Y3QgcnRfcmFsaW5rX3RpbWVyICpwVGltZXIgPSAoc3RydWN0IHJ0X3JhbGlua190aW1lciAqKWRhdGE7CQkJCVwKLQkJCQkJCQkJCQkJCQkJCQkJCQlcCi0JX2Z1bmMoTlVMTCwgKHZvaWQgKilwVGltZXItPmNvb2tpZSwgTlVMTCwgcFRpbWVyKTsJCQkJCQkJXAotCWlmIChwVGltZXItPlJlcGVhdCkJCQkJCQkJCQkJCQkJCVwKLQkJUlRNUF9PU19BZGRfVGltZXIoJnBUaW1lci0+VGltZXJPYmosIHBUaW1lci0+VGltZXJWYWx1ZSk7CQkJXAotfQotI2VuZGlmIC8qIFJUTVBfVElNRVJfVEFTS19TVVBQT1JUIC8vICovCi0KLURFQ0xBUkVfVElNRVJfRlVOQ1RJT04oTWxtZVBlcmlvZGljRXhlYyk7Ci1ERUNMQVJFX1RJTUVSX0ZVTkNUSU9OKE1sbWVSc3NpUmVwb3J0RXhlYyk7Ci1ERUNMQVJFX1RJTUVSX0ZVTkNUSU9OKEFzaWNSeEFudEV2YWxUaW1lb3V0KTsKLURFQ0xBUkVfVElNRVJfRlVOQ1RJT04oQVBTRFBlcmlvZGljRXhlYyk7Ci1ERUNMQVJFX1RJTUVSX0ZVTkNUSU9OKEFzaWNSZlR1bmluZ0V4ZWMpOwotI2lmZGVmIFJUTVBfTUFDX1VTQgotREVDTEFSRV9USU1FUl9GVU5DVElPTihCZWFjb25VcGRhdGVFeGVjKTsKLSNlbmRpZiAvKiBSVE1QX01BQ19VU0IgLy8gKi8KLQotREVDTEFSRV9USU1FUl9GVU5DVElPTihCZWFjb25UaW1lb3V0KTsKLURFQ0xBUkVfVElNRVJfRlVOQ1RJT04oU2NhblRpbWVvdXQpOwotREVDTEFSRV9USU1FUl9GVU5DVElPTihBdXRoVGltZW91dCk7Ci1ERUNMQVJFX1RJTUVSX0ZVTkNUSU9OKEFzc29jVGltZW91dCk7Ci1ERUNMQVJFX1RJTUVSX0ZVTkNUSU9OKFJlYXNzb2NUaW1lb3V0KTsKLURFQ0xBUkVfVElNRVJfRlVOQ1RJT04oRGlzYXNzb2NUaW1lb3V0KTsKLURFQ0xBUkVfVElNRVJfRlVOQ1RJT04oTGlua0Rvd25FeGVjKTsKLURFQ0xBUkVfVElNRVJfRlVOQ1RJT04oU3RhUXVpY2tSZXNwb25lRm9yUmF0ZVVwRXhlYyk7Ci1ERUNMQVJFX1RJTUVSX0ZVTkNUSU9OKFdwYURpc2Fzc29jQXBBbmRCbG9ja0Fzc29jKTsKLURFQ0xBUkVfVElNRVJfRlVOQ1RJT04oUHNQb2xsV2FrZUV4ZWMpOwotREVDTEFSRV9USU1FUl9GVU5DVElPTihSYWRpb09uRXhlYyk7Ci0KLSNpZmRlZiBSVE1QX01BQ19VU0IKLURFQ0xBUkVfVElNRVJfRlVOQ1RJT04oUnRtcFVzYlN0YUFzaWNGb3JjZVdha2V1cFRpbWVvdXQpOwotI2VuZGlmIC8qIFJUTVBfTUFDX1VTQiAvLyAqLwotCi0jaWYgZGVmaW5lZChBUF9MRUQpIHx8IGRlZmluZWQoU1RBX0xFRCkKLURFQ0xBUkVfVElNRVJfRlVOQ1RJT04oTGVkQ3RybE1haW4pOwotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX1JUTVBfVElNRVJfSF9fIC8vICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0bXBfdHlwZS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydG1wX3R5cGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDliYjJkNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0bXBfdHlwZS5oCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSAgICBNb2R1bGUgTmFtZToKLSAgICBydG1wX3R5cGUuaAotCi0gICAgQWJzdHJhY3Q6Ci0KLSAgICBSZXZpc2lvbiBIaXN0b3J5OgotICAgIFdobyAgICAgICAgIFdoZW4gICAgICAgICAgICBXaGF0Ci0gICAgLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBOYW1lICAgICAgICBEYXRlICAgICAgICAgICAgTW9kaWZpY2F0aW9uIGxvZ3MKLSAgICBQYXVsIExpbiAgICAxLTItMjAwNAotKi8KLSNpZm5kZWYgX19SVE1QX1RZUEVfSF9fCi0jZGVmaW5lIF9fUlRNUF9UWVBFX0hfXwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotI2RlZmluZSBQQUNLRUQgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKQotCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgQk9PTEVBTjsKLQotdHlwZWRlZiB1bmlvbiBfTEFSR0VfSU5URUdFUiB7Ci0Jc3RydWN0IHsKLQkJdTMyIExvd1BhcnQ7Ci0JCWludCBIaWdoUGFydDsKLQl9IHU7Ci0JbG9uZyBsb25nIFF1YWRQYXJ0OwotfSBMQVJHRV9JTlRFR0VSOwotCi0vKiAqLwotLyogUmVnaXN0ZXIgc2V0IHBhaXIgZm9yIGluaXRpYWx6YXRpb24gcmVnaXN0ZXIgc2V0IGRlZmluaXRpb24gKi8KLS8qICovCi1zdHJ1Y3QgcnRfcnRtcF9yZWdfcGFpciB7Ci0JdW5zaWduZWQgbG9uZyBSZWdpc3RlcjsKLQl1bnNpZ25lZCBsb25nIFZhbHVlOwotfTsKLQotc3RydWN0IHJ0X3JlZ19wYWlyIHsKLQl1OCBSZWdpc3RlcjsKLQl1OCBWYWx1ZTsKLX07Ci0KLS8qICovCi0vKiBSZWdpc3RlciBzZXQgcGFpciBmb3IgaW5pdGlhbHphdGlvbiByZWdpc3RlciBzZXQgZGVmaW5pdGlvbiAqLwotLyogKi8KLXN0cnVjdCBydF9ydG1wX3JmX3JlZ3MgewotCXU4IENoYW5uZWw7Ci0JdW5zaWduZWQgbG9uZyBSMTsKLQl1bnNpZ25lZCBsb25nIFIyOwotCXVuc2lnbmVkIGxvbmcgUjM7Ci0JdW5zaWduZWQgbG9uZyBSNDsKLX07Ci0KLXN0cnVjdCBydF9mcmVxdWVuY3lfaXRlbSB7Ci0JdTggQ2hhbm5lbDsKLQl1OCBOOwotCXU4IFI7Ci0JdTggSzsKLX07Ci0KLSNkZWZpbmUgU1RBVFVTX1NVQ0NFU1MJCQkJMHgwMAotI2RlZmluZSBTVEFUVVNfVU5TVUNDRVNTRlVMCQkweDAxCi0KLSNlbmRpZiAvKiBfX1JUTVBfVFlQRV9IX18gLy8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnR1c2JfaW8uaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnR1c2JfaW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRhMmZlNC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0dXNiX2lvLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qLwotCi0jaWZuZGVmIF9fUlRVU0JfSU9fSF9fCi0jZGVmaW5lIF9fUlRVU0JfSU9fSF9fCi0KLSNpbmNsdWRlICJydG1wX3R5cGUuaCIKLQotLyogTmV3IGZvciBNZWV0aW5nSG91c2UgQXBpIHN1cHBvcnQgKi8KLSNkZWZpbmUgQ01EVEhSRUFEX1ZFTkRPUl9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAweDBENzMwMTAxCS8qIGNtZCAqLwotI2RlZmluZSBDTURUSFJFQURfVkVORE9SX1VOUExVRyAgICAgICAgICAgICAgICAgICAgIDB4MEQ3MzAxMDIJLyogY21kICovCi0jZGVmaW5lIENNRFRIUkVBRF9WRU5ET1JfU1dJVENIX0ZVTkNUSU9OICAgICAgICAgICAgMHgwRDczMDEwMwkvKiBjbWQgKi8KLSNkZWZpbmUgQ01EVEhSRUFEX01VTFRJX1dSSVRFX01BQyAgICAgICAgICAgICAgICAgICAweDBENzMwMTA3CS8qIGNtZCAqLwotI2RlZmluZSBDTURUSFJFQURfTVVMVElfUkVBRF9NQUMgICAgICAgICAgICAgICAgICAgIDB4MEQ3MzAxMDgJLyogY21kICovCi0jZGVmaW5lIENNRFRIUkVBRF9WRU5ET1JfRUVQUk9NX1dSSVRFICAgICAgICAgICAgICAgMHgwRDczMDEwQQkvKiBjbWQgKi8KLSNkZWZpbmUgQ01EVEhSRUFEX1ZFTkRPUl9FRVBST01fUkVBRCAgICAgICAgICAgICAgICAweDBENzMwMTBCCS8qIGNtZCAqLwotI2RlZmluZSBDTURUSFJFQURfVkVORE9SX0VOVEVSX1RFU1RNT0RFICAgICAgICAgICAgIDB4MEQ3MzAxMEMJLyogY21kICovCi0jZGVmaW5lIENNRFRIUkVBRF9WRU5ET1JfRVhJVF9URVNUTU9ERSAgICAgICAgICAgICAgMHgwRDczMDEwRAkvKiBjbWQgKi8KLSNkZWZpbmUgQ01EVEhSRUFEX1ZFTkRPUl9XUklURV9CQlAgICAgICAgICAgICAgICAgICAweDBENzMwMTE5CS8qIGNtZCAqLwotI2RlZmluZSBDTURUSFJFQURfVkVORE9SX1JFQURfQkJQICAgICAgICAgICAgICAgICAgIDB4MEQ3MzAxMTgJLyogY21kICovCi0jZGVmaW5lIENNRFRIUkVBRF9WRU5ET1JfV1JJVEVfUkYgICAgICAgICAgICAgICAgICAgMHgwRDczMDExQQkvKiBjbWQgKi8KLSNkZWZpbmUgQ01EVEhSRUFEX1ZFTkRPUl9GTElQX0lRICAgICAgICAgICAgICAgICAgICAweDBENzMwMTFECS8qIGNtZCAqLwotI2RlZmluZSBDTURUSFJFQURfUkVTRVRfQlVMS19PVVQgICAgICAgICAgICAgICAgICAgIDB4MEQ3MzAyMTAJLyogY21kICovCi0jZGVmaW5lIENNRFRIUkVBRF9SRVNFVF9CVUxLX0lOICAgICAgICAgICAgICAgICAgICAgMHgwRDczMDIxMQkvKiBjbWQgKi8KLSNkZWZpbmUgQ01EVEhSRUFEX1NFVF9QU01fQklUCQkJCTB4MEQ3MzAyMTIJLyogY21kICovCi0jZGVmaW5lIENNRFRIUkVBRF9TRVRfUkFESU8gICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDczMDIxNAkvKiBjbWQgKi8KLSNkZWZpbmUgQ01EVEhSRUFEX1VQREFURV9UWF9SQVRFICAgICAgICAgICAgICAgICAgICAweDBENzMwMjE2CS8qIGNtZCAqLwotI2RlZmluZSBDTURUSFJFQURfODAyXzExX0FERF9LRVlfV0VQICAgICAgICAgICAgICAgIDB4MEQ3MzAyMTgJLyogY21kICovCi0jZGVmaW5lIENNRFRIUkVBRF9SRVNFVF9GUk9NX0VSUk9SICAgICAgICAgICAgICAgICAgMHgwRDczMDIxQQkvKiBjbWQgKi8KLSNkZWZpbmUgQ01EVEhSRUFEX0xJTktfRE9XTiAgICAgICAgICAgICAgICAgICAgICAgICAweDBENzMwMjFCCS8qIGNtZCAqLwotI2RlZmluZSBDTURUSFJFQURfUkVTRVRfRlJPTV9ORElTICAgICAgICAgICAgICAgICAgIDB4MEQ3MzAyMUMJLyogY21kICovCi0jZGVmaW5lIENNRFRIUkVBRF9DSEVDS19HUElPICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDczMDIxNQkvKiBjbWQgKi8KLSNkZWZpbmUgQ01EVEhSRUFEX0ZPUkNFX1dBS0VfVVAgICAgICAgICAgICAgICAgICAgICAweDBENzMwMjIyCS8qIGNtZCAqLwotI2RlZmluZSBDTURUSFJFQURfU0VUX0JXICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQ3MzAyMjUJLyogY21kICovCi0jZGVmaW5lIENNRFRIUkVBRF9TRVRfQVNJQ19XQ0lEICAgICAgICAgICAgICAgICAgICAgMHgwRDczMDIyNgkvKiBjbWQgKi8KLSNkZWZpbmUgQ01EVEhSRUFEX1NFVF9BU0lDX1dDSURfQ0lQSEVSICAgICAgICAgICAgICAweDBENzMwMjI3CS8qIGNtZCAqLwotI2RlZmluZSBDTURUSFJFQURfUUtFUklPRElDX0VYRUNVVCAgICAgICAgICAgICAgICAgIDB4MEQ3MzAyM0QJLyogY21kICovCi0jZGVmaW5lIFJUX0NNRF9TRVRfS0VZX1RBQkxFICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDczMDIyOAkvKiBjbWQgKi8KLSNkZWZpbmUgUlRfQ01EX1NFVF9SWF9XQ0lEX1RBQkxFICAgICAgICAgICAgICAgICAgICAweDBENzMwMjI5CS8qIGNtZCAqLwotI2RlZmluZSBDTURUSFJFQURfU0VUX0NMSUVOVF9NQUNfRU5UUlkgICAgICAgICAgICAgIDB4MEQ3MzAyM0UJLyogY21kICovCi0jZGVmaW5lIENNRFRIUkVBRF9TRVRfR1JPVVBfS0VZCQkJCQkJMHgwRDczMDIzRgkvKiBjbWQgKi8KLSNkZWZpbmUgQ01EVEhSRUFEX1NFVF9QQUlSV0lTRV9LRVkJCQkJCTB4MEQ3MzAyNDAJLyogY21kICovCi0KLSNkZWZpbmUgQ01EVEhSRUFEXzgwMl8xMV9RVUVSWV9IQVJEV0FSRV9SRUdJU1RFUiAgICAweDBENzEwMTA1CS8qIGNtZCAqLwotI2RlZmluZSBDTURUSFJFQURfODAyXzExX1NFVF9QSFlfTU9ERSAgICAgICAgICAgICAgIDB4MEQ3OTAxMEMJLyogY21kICovCi0jZGVmaW5lIENNRFRIUkVBRF84MDJfMTFfU0VUX1NUQV9DT05GSUcgICAgICAgICAgICAgMHgwRDc5MDExMQkvKiBjbWQgKi8KLSNkZWZpbmUgQ01EVEhSRUFEXzgwMl8xMV9TRVRfUFJFQU1CTEUgICAgICAgICAgICAgICAweDBENzkwMTAxCS8qIGNtZCAqLwotI2RlZmluZSBDTURUSFJFQURfODAyXzExX0NPVU5URVJfTUVBU1VSRQkJCTB4MEQ3OTAxMDIJLyogY21kICovCi0vKiBhZGQgYnkgam9obmxpLCBmaXggImluX2ludGVycnVwdCIgZXJyb3Igd2hlbiBjYWxsICJNYWNUYWJsZURlbGV0ZUVudHJ5IiBpbiBSeCB0YXNrbGV0ICovCi0jZGVmaW5lIENNRFRIUkVBRF9VUERBVEVfUFJPVEVDVAkJCQkJMHgwRDc5MDEwMwkvKiBjbWQgKi8KLS8qIGVuZCBqb2hubGkgKi8KLQotLypDTURUSFJFQURfTVVMVElfUkVBRF9NQUMgKi8KLS8qQ01EVEhSRUFEX01VTFRJX1dSSVRFX01BQyAqLwotLypDTURUSFJFQURfVkVORE9SX0VFUFJPTV9SRUFEICovCi0vKkNNRFRIUkVBRF9WRU5ET1JfRUVQUk9NX1dSSVRFICovCi1zdHJ1Y3QgcnRfY21kaGFuZGxlcl90bHYgewotCXUxNiBPZmZzZXQ7Ci0JdTE2IExlbmd0aDsKLQl1OCBEYXRhRmlyc3Q7Ci19OwotCi1zdHJ1Y3QgcnRfY21kcWVsbXQ7Ci0KLXN0cnVjdCBydF9jbWRxZWxtdCB7Ci0JdTMyIGNvbW1hbmQ7Ci0Jdm9pZCAqYnVmZmVyOwotCXVuc2lnbmVkIGxvbmcgYnVmZmVybGVuZ3RoOwotCUJPT0xFQU4gQ21kRnJvbU5kaXM7Ci0JQk9PTEVBTiBTZXRPcGVyYXRpb247Ci0Jc3RydWN0IHJ0X2NtZHFlbG10ICpuZXh0OwotfTsKLQotc3RydWN0IHJ0X2NtZHEgewotCXUzMiBzaXplOwotCXN0cnVjdCBydF9jbWRxZWxtdCAqaGVhZDsKLQlzdHJ1Y3QgcnRfY21kcWVsbXQgKnRhaWw7Ci0JdTMyIENtZFFTdGF0ZTsKLX07Ci0KLSNkZWZpbmUgRW5xdWV1ZUNtZChjbWRxLCBjbWRxZWxtdCkJCVwKLXsJCQkJCQkJCQkJXAotCWlmIChjbWRxLT5zaXplID09IDApCQkJCVwKLQkJY21kcS0+aGVhZCA9IGNtZHFlbG10OwkJCVwKLQllbHNlCQkJCQkJCQlcCi0JCWNtZHEtPnRhaWwtPm5leHQgPSBjbWRxZWxtdDsJXAotCWNtZHEtPnRhaWwgPSBjbWRxZWxtdDsJCQkJXAotCWNtZHFlbG10LT5uZXh0ID0gTlVMTDsJCQkJXAotCWNtZHEtPnNpemUrKzsJCQkJCQlcCi19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotCVVTQiBDbWQgdG8gQVNJQyBSZWxhdGVkIE1BQ1JPCi0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIHJlc2V0IE1BQyBvZiBhIHN0YXRpb24gZW50cnkgdG8gMHhGRkZGRkZGRkZGRkYgKi8KLSNkZWZpbmUgUlRNUF9TVEFfRU5UUllfTUFDX1JFU0VUKHBBZCwgV2NpZCkJCQkJCVwKLQl7CXN0cnVjdCBydF9zZXRfYXNpY193Y2lkCVNldEFzaWNXY2lkOwkJCQkJCVwKLQkJU2V0QXNpY1djaWQuV0NJRCA9IFdjaWQ7CQkJCQkJCQlcCi0JCVNldEFzaWNXY2lkLlNldFRpZCA9IDB4ZmZmZmZmZmY7CQkJCQkJXAotCQlTZXRBc2ljV2NpZC5EZWxldGVUaWQgPSAweGZmZmZmZmZmOwkJCQkJCVwKLQkJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBDTURUSFJFQURfU0VUX0FTSUNfV0NJRCwJXAotCQkJCSZTZXRBc2ljV2NpZCwgc2l6ZW9mKHN0cnVjdCBydF9zZXRfYXNpY193Y2lkKSk7CX0KLQotLyogYWRkIHRoaXMgZW50cnkgaW50byBBU0lDIFJYIFdDSUQgc2VhcmNoIHRhYmxlICovCi0jZGVmaW5lIFJUTVBfU1RBX0VOVFJZX0FERChwQWQsIHBFbnRyeSkJCQkJCQkJXAotCVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKHBBZCwgQ01EVEhSRUFEX1NFVF9DTElFTlRfTUFDX0VOVFJZLAlcCi0JCQkJCQkJcEVudHJ5LCBzaXplb2Yoc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSkpOwotCi0vKiBhZGQgYnkgam9obmxpLCBmaXggImluX2ludGVycnVwdCIgZXJyb3Igd2hlbiBjYWxsICJNYWNUYWJsZURlbGV0ZUVudHJ5IiBpbiBSeCB0YXNrbGV0ICovCi0vKiBTZXQgTUFDIHJlZ2lzdGVyIHZhbHVlIGFjY29yZGluZyBvcGVyYXRpb24gbW9kZSAqLwotI2RlZmluZSBSVE1QX1VQREFURV9QUk9URUNUKHBBZCkJXAotCVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKHBBZCwgQ01EVEhSRUFEX1VQREFURV9QUk9URUNULCBOVUxMLCAwKTsKLS8qIGVuZCBqb2hubGkgKi8KLQotLyogcmVtb3ZlIFBhaXItd2lzZSBrZXkgbWF0ZXJpYWwgZnJvbSBBU0lDICovCi0vKiB5ZXQgaW1wbGVtZW50ICovCi0jZGVmaW5lIFJUTVBfU1RBX0VOVFJZX0tFWV9ERUwocEFkLCBCc3NJZHgsIFdjaWQpCi0KLS8qIGFkZCBDbGllbnQgc2VjdXJpdHkgaW5mb3JtYXRpb24gaW50byBBU0lDIFdDSUQgdGFibGUgYW5kIElWRUlWIHRhYmxlICovCi0jZGVmaW5lIFJUTVBfU1RBX1NFQ1VSSVRZX0lORk9fQUREKHBBZCwgYXBpZHgsIEtleUlELCBwRW50cnkpCQkJCQkJXAotCXsJUlRNUF9TVEFfRU5UUllfTUFDX1JFU0VUKHBBZCwgcEVudHJ5LT5BaWQpOwkJCQkJCQkJXAotCQlpZiAocEVudHJ5LT5BaWQgPj0gMSkgewkJCQkJCQkJCQkJCQkJXAotCQkJc3RydWN0IHJ0X3NldF9hc2ljX3djaWRfYXR0cmkJU2V0QXNpY1djaWRBdHRyaTsJCQkJCQkJCVwKLQkJCVNldEFzaWNXY2lkQXR0cmkuV0NJRCA9IHBFbnRyeS0+QWlkOwkJCQkJCQkJCVwKLQkJCWlmICgocEVudHJ5LT5BdXRoTW9kZSA8PSBOZGlzODAyXzExQXV0aE1vZGVBdXRvU3dpdGNoKSAmJgkJCQlcCi0JCQkJKHBFbnRyeS0+V2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQpKQkJCQlcCi0JCQl7CQkJCQkJCQkJCQkJCQkJCQkJXAotCQkJCVNldEFzaWNXY2lkQXR0cmkuQ2lwaGVyID0gcEFkLT5TaGFyZWRLZXlbYXBpZHhdW0tleUlEXS5DaXBoZXJBbGc7CVwKLQkJCX0JCQkJCQkJCQkJCQkJCQkJCQlcCi0JCQllbHNlIGlmIChwRW50cnktPkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmUpCQkJCQlcCi0JCQl7CQkJCQkJCQkJCQkJCQkJCQkJXAotCQkJCVNldEFzaWNXY2lkQXR0cmkuQ2lwaGVyID0gcEFkLT5TaGFyZWRLZXlbYXBpZHhdW0tleUlEXS5DaXBoZXJBbGc7CVwKLQkJCX0JCQkJCQkJCQkJCQkJCQkJCQlcCi0JCQllbHNlIFNldEFzaWNXY2lkQXR0cmkuQ2lwaGVyID0gMDsJCQkJCQkJCQkJXAotICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiYWlkIGNpcGhlciA9ICVsZFxuIixTZXRBc2ljV2NpZEF0dHJpLkNpcGhlcikpOyAgICAgICBcCi0JCQlSVFVTQkVucXVldWVJbnRlcm5hbENtZChwQWQsIENNRFRIUkVBRF9TRVRfQVNJQ19XQ0lEX0NJUEhFUiwJCQlcCi0JCQkJCQkJJlNldEFzaWNXY2lkQXR0cmksIHNpemVvZihzdHJ1Y3QgcnRfc2V0X2FzaWNfd2NpZF9hdHRyaSkpOyB9IH0KLQotLyogSW5zZXJ0IHRoZSBCQSBiaXRtYXAgdG8gQVNJQyBmb3IgdGhlIFdjaWQgZW50cnkgKi8KLSNkZWZpbmUgUlRNUF9BRERfQkFfU0VTU0lPTl9UT19BU0lDKF9wQWQsIF9BaWQsIF9USUQpCQkJCQlcCi0JCWRvewkJCQkJCQkJCQkJCQkJCQlcCi0JCQlzdHJ1Y3QgcnRfc2V0X2FzaWNfd2NpZAlTZXRBc2ljV2NpZDsJCQkJCQkJXAotCQkJU2V0QXNpY1djaWQuV0NJRCA9IChfQWlkKTsJCQkJCQkJCQlcCi0JCQlTZXRBc2ljV2NpZC5TZXRUaWQgPSAoMHgxMDAwMDw8KF9USUQpKTsJCQkJCQlcCi0JCQlTZXRBc2ljV2NpZC5EZWxldGVUaWQgPSAweGZmZmZmZmZmOwkJCQkJCQlcCi0JCQlSVFVTQkVucXVldWVJbnRlcm5hbENtZCgoX3BBZCksIENNRFRIUkVBRF9TRVRfQVNJQ19XQ0lELCAmU2V0QXNpY1djaWQsIHNpemVvZihzdHJ1Y3QgcnRfc2V0X2FzaWNfd2NpZCkpOwlcCi0JCX13aGlsZSgwKQotCi0vKiBSZW1vdmUgdGhlIEJBIGJpdG1hcCBmcm9tIEFTSUMgZm9yIHRoZSBXY2lkIGVudHJ5ICovCi0jZGVmaW5lIFJUTVBfREVMX0JBX1NFU1NJT05fRlJPTV9BU0lDKF9wQWQsIF9XY2lkLCBfVElEKQkJCQlcCi0JCWRvewkJCQkJCQkJCQkJCQkJCQlcCi0JCQlzdHJ1Y3QgcnRfc2V0X2FzaWNfd2NpZAlTZXRBc2ljV2NpZDsJCQkJCQkJXAotCQkJU2V0QXNpY1djaWQuV0NJRCA9IChfV2NpZCk7CQkJCQkJCQkJXAotCQkJU2V0QXNpY1djaWQuU2V0VGlkID0gKDB4ZmZmZmZmZmYpOwkJCQkJCQlcCi0JCQlTZXRBc2ljV2NpZC5EZWxldGVUaWQgPSAoMHgxMDAwMDw8KF9USUQpICk7CQkJCQlcCi0JCQlSVFVTQkVucXVldWVJbnRlcm5hbENtZCgoX3BBZCksIENNRFRIUkVBRF9TRVRfQVNJQ19XQ0lELCAmU2V0QXNpY1djaWQsIHNpemVvZihzdHJ1Y3QgcnRfc2V0X2FzaWNfd2NpZCkpOwlcCi0JCX13aGlsZSgwKQotCi0jZW5kaWYgLyogX19SVFVTQl9JT19IX18gLy8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3BlY3RydW0uaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3BlY3RydW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMzMjViYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3NwZWN0cnVtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKi8KLQotI2lmbmRlZiBfX1NQRUNUUlVNX0hfXwotI2RlZmluZSBfX1NQRUNUUlVNX0hfXwotCi0jaW5jbHVkZSAicnRtcF90eXBlLmgiCi0jaW5jbHVkZSAic3BlY3RydW1fZGVmLmgiCi0KLWNoYXIgUlRNUF9HZXRUeFB3cihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIElOIEhUVFJBTlNNSVRfU0VUVElORyBIVFR4TW9kZSk7Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJUHJlcGFyZSBNZWFzdXJlbWVudCByZXF1ZXN0IGFjdGlvbiBmcmFtZSBhbmQgZW5xdWV1ZSBpdCBpbnRvCi0JCW1hbmFnZW1lbnQgcXVldWUgd2FpdGluZyBmb3IgdHJhbnNtaXNzaW9uLgotCi0JUGFyYW1ldHJzOgotCQkxLiB0aGUgZGVzdGluYXRpb24gbWFjIGFkZHJlc3Mgb2YgdGhlIGZyYW1lLgotCi0JUmV0dXJuCTogTm9uZS4KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi12b2lkIE1ha2VNZWFzdXJlbWVudFJlcUZyYW1lKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICAgdTggKnBPdXRCdWZmZXIsCi0JCQkgICAgIHVuc2lnbmVkIGxvbmcgKnBGcmFtZUxlbiwKLQkJCSAgICAgdTggVG90YWxMZW4sCi0JCQkgICAgIHU4IENhdGVnb3J5LAotCQkJICAgICB1OCBBY3Rpb24sCi0JCQkgICAgIHU4IE1lYXN1cmVUb2tlbiwKLQkJCSAgICAgdTggTWVhc3VyZVJlcU1vZGUsCi0JCQkgICAgIHU4IE1lYXN1cmVSZXFUeXBlLAotCQkJICAgICB1OCBOdW1PZlJlcGV0aXRpb25zKTsKLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlQcmVwYXJlIE1lYXN1cmVtZW50IHJlcG9ydCBhY3Rpb24gZnJhbWUgYW5kIGVucXVldWUgaXQgaW50bwotCQltYW5hZ2VtZW50IHF1ZXVlIHdhaXRpbmcgZm9yIHRyYW5zbWlzc2lvbi4KLQotCVBhcmFtZXRyczoKLQkJMS4gdGhlIGRlc3RpbmF0aW9uIG1hYyBhZGRyZXNzIG9mIHRoZSBmcmFtZS4KLQotCVJldHVybgk6IE5vbmUuCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotdm9pZCBFbnF1ZXVlTWVhc3VyZW1lbnRSZXAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgdTggKnBEQSwKLQkJCSAgIHU4IERpYWxvZ1Rva2VuLAotCQkJICAgdTggTWVhc3VyZVRva2VuLAotCQkJICAgdTggTWVhc3VyZVJlcU1vZGUsCi0JCQkgICB1OCBNZWFzdXJlUmVxVHlwZSwKLQkJCSAgIHU4IFJlcG9ydEluZm9MZW4sIHU4ICpwUmVwb3J0SW5mbyk7Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJUHJlcGFyZSBUUEMgUmVxdWVzdCBhY3Rpb24gZnJhbWUgYW5kIGVucXVldWUgaXQgaW50bwotCQltYW5hZ2VtZW50IHF1ZXVlIHdhaXRpbmcgZm9yIHRyYW5zbWlzc2lvbi4KLQotCVBhcmFtZXRyczoKLQkJMS4gdGhlIGRlc3RpbmF0aW9uIG1hYyBhZGRyZXNzIG9mIHRoZSBmcmFtZS4KLQotCVJldHVybgk6IE5vbmUuCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotdm9pZCBFbnF1ZXVlVFBDUmVxKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggKnBEQSwgdTggRGlhbG9nVG9rZW4pOwotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JCVByZXBhcmUgVFBDIFJlcG9ydCBhY3Rpb24gZnJhbWUgYW5kIGVucXVldWUgaXQgaW50bwotCQltYW5hZ2VtZW50IHF1ZXVlIHdhaXRpbmcgZm9yIHRyYW5zbWlzc2lvbi4KLQotCVBhcmFtZXRyczoKLQkJMS4gdGhlIGRlc3RpbmF0aW9uIG1hYyBhZGRyZXNzIG9mIHRoZSBmcmFtZS4KLQotCVJldHVybgk6IE5vbmUuCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotdm9pZCBFbnF1ZXVlVFBDUmVwKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgdTggKnBEQSwKLQkJICAgdTggRGlhbG9nVG9rZW4sIHU4IFR4UHdyLCB1OCBMaW5rTWFyZ2luKTsKLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlQcmVwYXJlIENoYW5uZWwgU3dpdGNoIEFubm91bmNlbWVudCBhY3Rpb24gZnJhbWUgYW5kIGVucXVldWUgaXQgaW50bwotCQltYW5hZ2VtZW50IHF1ZXVlIHdhaXRpbmcgZm9yIHRyYW5zbWlzc2lvbi4KLQotCVBhcmFtZXRyczoKLQkJMS4gdGhlIGRlc3RpbmF0aW9uIG1hYyBhZGRyZXNzIG9mIHRoZSBmcmFtZS4KLQkJMi4gQ2hhbm5lbCBzd2l0Y2ggYW5ub3VuY2VtZW50IG1vZGUuCi0JCTIuIGEgTmV3IHNlbGVjdGVkIGNoYW5uZWwuCi0KLQlSZXR1cm4JOiBOb25lLgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgRW5xdWV1ZUNoU3dBbm4oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICAgdTggKnBEQSwgdTggQ2hTd01vZGUsIHU4IE5ld0NoKTsKLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlTcGVjdHJ1biBhY3Rpb24gZnJhbWVzIEhhbmRsZXIgc3VjaCBhcyBjaGFubmVsIHN3aXRjaCBhbm5vdW5jZW1lbnQsCi0JCW1lYXN1cmVtZW50IHJlcG9ydCwgbWVhc3VyZW1lbnQgcmVxdWVzdCBhY3Rpb25zIGZyYW1lcy4KLQotCVBhcmFtZXRyczoKLQkJRWxtZSAtIE1MTUUgbWVzc2FnZSBjb250YWluaW5nIHRoZSByZWNlaXZlZCBmcmFtZQotCi0JUmV0dXJuCTogTm9uZS4KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi12b2lkIFBlZXJTcGVjdHJ1bUFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pOwotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0KLQlQYXJhbWV0cnM6Ci0KLQlSZXR1cm4JOiBOb25lLgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLWludCBTZXRfTWVhc3VyZVJlcV9Qcm9jKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgY2hhciAqYXJnKTsKLQotaW50IFNldF9UcGNSZXFfUHJvYyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIGNoYXIgKmFyZyk7Ci0KLWludCBTZXRfUHdyQ29uc3RyYWludChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIGNoYXIgKmFyZyk7Ci0KLXZvaWQgTWVhc3VyZVJlcVRhYkluaXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotdm9pZCBNZWFzdXJlUmVxVGFiRXhpdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi1zdHJ1Y3QgcnRfbWVhc3VyZV9yZXFfZW50cnkgKk1lYXN1cmVSZXFMb29rVXAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1OCBEaWFsb2dUb2tlbik7Ci0KLXN0cnVjdCBydF9tZWFzdXJlX3JlcV9lbnRyeSAqTWVhc3VyZVJlcUluc2VydChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHU4IERpYWxvZ1Rva2VuKTsKLQotdm9pZCBNZWFzdXJlUmVxRGVsZXRlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggRGlhbG9nVG9rZW4pOwotCi12b2lkIEluc2VydENoYW5uZWxSZXBJRShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQl1OCAqcEZyYW1lQnVmLAotCQkJdW5zaWduZWQgbG9uZyAqcEZyYW1lTGVuLAotCQkJY2hhciAqcENvdW50cnksIHU4IFJlZ3VsYXRvcnlDbGFzcyk7Ci0KLXZvaWQgSW5zZXJ0VHBjUmVwb3J0SUUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICAgICAgdTggKnBGcmFtZUJ1ZiwKLQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKnBGcmFtZUxlbiwKLQkJICAgICAgIHU4IFR4UHdyLCB1OCBMaW5rTWFyZ2luKTsKLQotdm9pZCBJbnNlcnREaWFsb2dUb2tlbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgICAgICB1OCAqcEZyYW1lQnVmLAotCQkgICAgICAgdW5zaWduZWQgbG9uZyAqcEZyYW1lTGVuLCB1OCBEaWFsb2dUb2tlbik7Ci0KLXZvaWQgVHBjUmVxVGFiSW5pdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpOwotCi12b2lkIFRwY1JlcVRhYkV4aXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotdm9pZCBOb3RpZnlDaFN3QW5uVG9QZWVyQVBzKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICB1OCAqcFJBLAotCQkJICAgIHU4ICpwVEEsIHU4IENoU3dNb2RlLCB1OCBDaGFubmVsKTsKLQotdm9pZCBSZ3VDbGFzc19CdWlsZEJjbkNoTGlzdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgIHU4ICpwQnVmLCB1bnNpZ25lZCBsb25nICpwQnVmTGVuKTsKLSNlbmRpZiAvKiBfX1NQRUNUUlVNX0hfXyAvLyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zcGVjdHJ1bV9kZWYuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3BlY3RydW1fZGVmLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmZmNmYjBkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3BlY3RydW1fZGVmLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMDIgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSAgICBNb2R1bGUgTmFtZToKLQlzcGVjdHJ1bV9kZWYuaAotCi0gICAgQWJzdHJhY3Q6Ci0gICAgSGFuZGxlIGFzc29jaWF0aW9uIHJlbGF0ZWQgcmVxdWVzdHMgZWl0aGVyIGZyb20gV1NUQSBvciBmcm9tIGxvY2FsIE1MTUUKLQotICAgIFJldmlzaW9uIEhpc3Rvcnk6Ci0gICAgV2hvICAgICAgICAgIFdoZW4gICAgICAgICAgV2hhdAotICAgIC0tLS0tLS0tLSAgICAtLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlGb25jaGkgV3UgICAgMjAwOAkgIAkgICBjcmVhdGVkIGZvciA4MDIuMTFoCi0gKi8KLQotI2lmbmRlZiBfX1NQRUNUUlVNX0RFRl9IX18KLSNkZWZpbmUgX19TUEVDVFJVTV9ERUZfSF9fCi0KLSNkZWZpbmUgTUFYX01FQVNVUkVfUkVRX1RBQl9TSVpFCQkzMgotI2RlZmluZSBNQVhfSEFTSF9NRUFTVVJFX1JFUV9UQUJfU0laRQlNQVhfTUVBU1VSRV9SRVFfVEFCX1NJWkUKLQotI2RlZmluZSBNQVhfVFBDX1JFUV9UQUJfU0laRQkJCTMyCi0jZGVmaW5lIE1BWF9IQVNIX1RQQ19SRVFfVEFCX1NJWkUJCU1BWF9UUENfUkVRX1RBQl9TSVpFCi0KLSNkZWZpbmUgTUlOX1JDVl9QV1IJCQkJMTAwCS8qIE5lZ2F0aXZlIHZhbHVlICgoZEJtKSAqLwotCi0jZGVmaW5lIFRQQ19SRVFfQUdFX09VVAkJCTUwMAkvKiBtcyAqLwotI2RlZmluZSBNUV9SRVFfQUdFX09VVAkJCTUwMAkvKiBtcyAqLwotCi0jZGVmaW5lIFRQQ19ESUFMT0dUT0tFTl9IQVNIX0lOREVYKF9EaWFsb2dUb2tlbikJKChfRGlhbG9nVG9rZW4pICUgTUFYX0hBU0hfVFBDX1JFUV9UQUJfU0laRSkKLSNkZWZpbmUgTVFfRElBTE9HVE9LRU5fSEFTSF9JTkRFWChfRGlhbG9nVG9rZW4pCQkoKF9EaWFsb2dUb2tlbikgJSBNQVhfTUVBU1VSRV9SRVFfVEFCX1NJWkUpCi0KLXN0cnVjdCBydF9tZWFzdXJlX3JlcV9lbnRyeTsKLQotc3RydWN0IHJ0X21lYXN1cmVfcmVxX2VudHJ5IHsKLQlzdHJ1Y3QgcnRfbWVhc3VyZV9yZXFfZW50cnkgKnBOZXh0OwotCXVuc2lnbmVkIGxvbmcgbGFzdFRpbWU7Ci0JQk9PTEVBTiBWYWxpZDsKLQl1OCBEaWFsb2dUb2tlbjsKLQl1OCBNZWFzdXJlRGlhbG9nVG9rZW5bM107CS8qIDA6YmFzaWMgbWVhc3VyZSwgMTogQ0NBIG1lYXN1cmUsIDI6IFJQSV9IaXN0b2dyYW0gbWVhc3VyZS4gKi8KLX07Ci0KLXN0cnVjdCBydF9tZWFzdXJlX3JlcV90YWIgewotCXU4IFNpemU7Ci0Jc3RydWN0IHJ0X21lYXN1cmVfcmVxX2VudHJ5ICpIYXNoW01BWF9IQVNIX01FQVNVUkVfUkVRX1RBQl9TSVpFXTsKLQlzdHJ1Y3QgcnRfbWVhc3VyZV9yZXFfZW50cnkgQ29udGVudFtNQVhfTUVBU1VSRV9SRVFfVEFCX1NJWkVdOwotfTsKLQotc3RydWN0IHJ0X3RwY19yZXFfZW50cnk7Ci0KLXN0cnVjdCBydF90cGNfcmVxX2VudHJ5IHsKLQlzdHJ1Y3QgcnRfdHBjX3JlcV9lbnRyeSAqcE5leHQ7Ci0JdW5zaWduZWQgbG9uZyBsYXN0VGltZTsKLQlCT09MRUFOIFZhbGlkOwotCXU4IERpYWxvZ1Rva2VuOwotfTsKLQotc3RydWN0IHJ0X3RwY19yZXFfdGFiIHsKLQl1OCBTaXplOwotCXN0cnVjdCBydF90cGNfcmVxX2VudHJ5ICpIYXNoW01BWF9IQVNIX1RQQ19SRVFfVEFCX1NJWkVdOwotCXN0cnVjdCBydF90cGNfcmVxX2VudHJ5IENvbnRlbnRbTUFYX1RQQ19SRVFfVEFCX1NJWkVdOwotfTsKLQotLyogVGhlIHJlZ3VsYXRvcnkgaW5mb3JtYXRpb24gKi8KLXN0cnVjdCBydF9kb3QxMV9jaGFubmVsX3NldCB7Ci0JdTggTnVtYmVyT2ZDaGFubmVsczsKLQl1OCBNYXhUeFB3cjsKLQl1OCBDaGFubmVsTGlzdFsxNl07Ci19OwotCi1zdHJ1Y3QgcnRfZG90MTFfcmVndWxhdG9yeV9pbmZvcm1hdGlvbiB7Ci0JdTggUmVndWxhdG9yeUNsYXNzOwotCXN0cnVjdCBydF9kb3QxMV9jaGFubmVsX3NldCBDaGFubmVsU2V0OwotfTsKLQotI2RlZmluZSBSTV9UUENfUkVRCQkJCTAKLSNkZWZpbmUgUk1fTUVBU1VSRV9SRVEJCQkxCi0KLSNkZWZpbmUgUk1fQkFTSUMJCQkJMAotI2RlZmluZSBSTV9DQ0EJCQkJCTEKLSNkZWZpbmUgUk1fUlBJX0hJU1RPR1JBTQkJMgotI2RlZmluZSBSTV9DSF9MT0FECQkJCTMKLSNkZWZpbmUgUk1fTk9JU0VfSElTVE9HUkFNCQk0Ci0KLXN0cnVjdCBQQUNLRUQgcnRfdHBjX3JlcG9ydF9pbmZvIHsKLQl1OCBUeFB3cjsKLQl1OCBMaW5rTWFyZ2luOwotfTsKLQotc3RydWN0IFBBQ0tFRCBydF9jaF9zd19hbm5faW5mbyB7Ci0JdTggQ2hTd01vZGU7Ci0JdTggQ2hhbm5lbDsKLQl1OCBDaFN3Q250OwotfTsKLQotdHlwZWRlZiB1bmlvbiBQQUNLRUQgX01FQVNVUkVfUkVRX01PREUgewotCXN0cnVjdCBQQUNLRUQgewotCQl1OCBQYXJhbGxlbDoxOwotCQl1OCBFbmFibGU6MTsKLQkJdTggUmVxdWVzdDoxOwotCQl1OCBSZXBvcnQ6MTsKLQkJdTggRHVyYXRpb25NYW5kYXRvcnk6MTsKLQkJIHU4OjM7Ci0JfSBmaWVsZDsKLQl1OCB3b3JkOwotfSBNRUFTVVJFX1JFUV9NT0RFLCAqUE1FQVNVUkVfUkVRX01PREU7Ci0KLXN0cnVjdCBQQUNLRUQgcnRfbWVhc3VyZV9yZXEgewotCXU4IENoTnVtOwotCXU2NCBNZWFzdXJlU3RhcnRUaW1lOwotCXUxNiBNZWFzdXJlRHVyYXRpb247Ci19OwotCi1zdHJ1Y3QgUEFDS0VEIHJ0X21lYXN1cmVfcmVxX2luZm8gewotCXU4IFRva2VuOwotCU1FQVNVUkVfUkVRX01PREUgUmVxTW9kZTsKLQl1OCBSZXFUeXBlOwotCXU4IE9jdFswXTsKLX07Ci0KLXR5cGVkZWYgdW5pb24gUEFDS0VEIF9NRUFTVVJFX0JBU0lDX1JFUE9SVF9NQVAgewotCXN0cnVjdCBQQUNLRUQgewotCQl1OCBCU1M6MTsKLQotCQl1OCBPZmRtUHJlYW1ibGU6MTsKLQkJdTggVW5pZGVudGlmaWVkU2lnbmFsOjE7Ci0JCXU4IFJhZGFyOjE7Ci0JCXU4IFVubWVhc3VyZToxOwotCQl1OCBSZXY6MzsKLQl9IGZpZWxkOwotCXU4IHdvcmQ7Ci19IE1FQVNVUkVfQkFTSUNfUkVQT1JUX01BUCwgKlBNRUFTVVJFX0JBU0lDX1JFUE9SVF9NQVA7Ci0KLXN0cnVjdCBQQUNLRUQgcnRfbWVhc3VyZV9iYXNpY19yZXBvcnQgewotCXU4IENoTnVtOwotCXU2NCBNZWFzdXJlU3RhcnRUaW1lOwotCXUxNiBNZWFzdXJlRHVyYXRpb247Ci0JTUVBU1VSRV9CQVNJQ19SRVBPUlRfTUFQIE1hcDsKLX07Ci0KLXN0cnVjdCBQQUNLRUQgcnRfbWVhc3VyZV9jY2FfcmVwb3J0IHsKLQl1OCBDaE51bTsKLQl1NjQgTWVhc3VyZVN0YXJ0VGltZTsKLQl1MTYgTWVhc3VyZUR1cmF0aW9uOwotCXU4IENDQV9CdXN5X0ZyYWN0aW9uOwotfTsKLQotc3RydWN0IFBBQ0tFRCBydF9tZWFzdXJlX3JwaV9yZXBvcnQgewotCXU4IENoTnVtOwotCXU2NCBNZWFzdXJlU3RhcnRUaW1lOwotCXUxNiBNZWFzdXJlRHVyYXRpb247Ci0JdTggUlBJX0RlbnNpdHlbOF07Ci19OwotCi10eXBlZGVmIHVuaW9uIFBBQ0tFRCBfTUVBU1VSRV9SRVBPUlRfTU9ERSB7Ci0Jc3RydWN0IFBBQ0tFRCB7Ci0JCXU4IExhdGU6MTsKLQkJdTggSW5jYXBhYmxlOjE7Ci0JCXU4IFJlZnVzZWQ6MTsKLQkJdTggUmV2OjU7Ci0JfSBmaWVsZDsKLQl1OCB3b3JkOwotfSBNRUFTVVJFX1JFUE9SVF9NT0RFLCAqUE1FQVNVUkVfUkVQT1JUX01PREU7Ci0KLXN0cnVjdCBQQUNLRUQgcnRfbWVhc3VyZV9yZXBvcnRfaW5mbyB7Ci0JdTggVG9rZW47Ci0JdTggUmVwb3J0TW9kZTsKLQl1OCBSZXBvcnRUeXBlOwotCXU4IE9jdGVjdFswXTsKLX07Ci0KLXN0cnVjdCBQQUNLRUQgcnRfcXVpZXRfaW5mbyB7Ci0JdTggUXVpZXRDbnQ7Ci0JdTggUXVpZXRQZXJpb2Q7Ci0JdTE2IFF1aWV0RHVyYXRpb247Ci0JdTE2IFF1aWV0T2Zmc2V0OwotfTsKLQotI2VuZGlmIC8qIF9fU1BFQ1RSVU1fREVGX0hfXyAvLyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvYXNzb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhL2Fzc29jLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5ZTkzMWMzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhL2Fzc29jLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAyICswLDAgQEAKLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUmFsaW5rIFRlY2ggSW5jLgotICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAotICogSHNpbmNodSBDb3VudHkgMzAyLAotICogVGFpd2FuLCBSLk8uQy4KLSAqCi0gKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0JTW9kdWxlIE5hbWU6Ci0JYXNzb2MuYwotCi0JQWJzdHJhY3Q6Ci0KLQlSZXZpc2lvbiBIaXN0b3J5OgotCVdobwkJCVdoZW4JCQlXaGF0Ci0JLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCUpvaG4JCQkyMDA0LTktMwkJcG9ydGluZyBmcm9tIFJUMjUwMAotCUp1c3RpbiBQLiBNYXR0b2NrCTExLzA3LzIwMTAJCUZpeCB0eXBvcwotKi8KLSNpbmNsdWRlICIuLi9ydF9jb25maWcuaCIKLQotdTggQ2lwaGVyV3BhVGVtcGxhdGVbXSA9IHsKLQkweGRkLAkJCS8qIFdQQSBJRSAqLwotCTB4MTYsCQkJLyogTGVuZ3RoICovCi0JMHgwMCwgMHg1MCwgMHhmMiwgMHgwMSwJLyogb3VpICovCi0JMHgwMSwgMHgwMCwJCS8qIFZlcnNpb24gKi8KLQkweDAwLCAweDUwLCAweGYyLCAweDAyLAkvKiBNdWx0aWNhc3QgKi8KLQkweDAxLCAweDAwLAkJLyogTnVtYmVyIG9mIHVuaWNhc3QgKi8KLQkweDAwLCAweDUwLCAweGYyLCAweDAyLAkvKiB1bmljYXN0ICovCi0JMHgwMSwgMHgwMCwJCS8qIG51bWJlciBvZiBhdXRoZW50aWNhdGlvbiBtZXRob2QgKi8KLQkweDAwLCAweDUwLCAweGYyLCAweDAxCS8qIGF1dGhlbnRpY2F0aW9uICovCi19OwotCi11OCBDaXBoZXJXcGEyVGVtcGxhdGVbXSA9IHsKLQkweDMwLAkJCS8qIFJTTiBJRSAqLwotCTB4MTQsCQkJLyogTGVuZ3RoICovCi0JMHgwMSwgMHgwMCwJCS8qIFZlcnNpb24gKi8KLQkweDAwLCAweDBmLCAweGFjLCAweDAyLAkvKiBncm91cCBjaXBoZXIsIFRLSVAgKi8KLQkweDAxLCAweDAwLAkJLyogbnVtYmVyIG9mIHBhaXJ3aXNlICovCi0JMHgwMCwgMHgwZiwgMHhhYywgMHgwMiwJLyogdW5pY2FzdCAqLwotCTB4MDEsIDB4MDAsCQkvKiBudW1iZXIgb2YgYXV0aGVudGljYXRpb24gbWV0aG9kICovCi0JMHgwMCwgMHgwZiwgMHhhYywgMHgwMiwJLyogYXV0aGVudGljYXRpb24gKi8KLQkweDAwLCAweDAwLAkJLyogUlNOIGNhcGFiaWxpdHkgKi8KLX07Ci0KLXU4IENjeDJJZUluZm9bXSA9IHsgMHgwMCwgMHg0MCwgMHg5NiwgMHgwMywgMHgwMiB9OwotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JCWFzc29jaWF0aW9uIHN0YXRlIG1hY2hpbmUgaW5pdCwgaW5jbHVkaW5nIHN0YXRlIHRyYW5zaXRpb24gYW5kIHRpbWVyIGluaXQKLQlQYXJhbWV0ZXJzOgotCQlTIC0gcG9pbnRlciB0byB0aGUgYXNzb2NpYXRpb24gc3RhdGUgbWFjaGluZQotCi0JSVJRTCA9IFBBU1NJVkVfTEVWRUwKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgQXNzb2NTdGF0ZU1hY2hpbmVJbml0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgIHN0cnVjdCBydF9zdGF0ZV9tYWNoaW5lICpTLCBPVVQgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pCi17Ci0JU3RhdGVNYWNoaW5lSW5pdChTLCBUcmFucywgTUFYX0FTU09DX1NUQVRFLCBNQVhfQVNTT0NfTVNHLAotCQkJIChTVEFURV9NQUNISU5FX0ZVTkMpIERyb3AsIEFTU09DX0lETEUsCi0JCQkgQVNTT0NfTUFDSElORV9CQVNFKTsKLQotCS8qIGZpcnN0IGNvbHVtbiAqLwotCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBU1NPQ19JRExFLCBNVDJfTUxNRV9BU1NPQ19SRVEsCi0JCQkgICAgICAoU1RBVEVfTUFDSElORV9GVU5DKSBNbG1lQXNzb2NSZXFBY3Rpb24pOwotCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBU1NPQ19JRExFLCBNVDJfTUxNRV9SRUFTU09DX1JFUSwKLQkJCSAgICAgIChTVEFURV9NQUNISU5FX0ZVTkMpIE1sbWVSZWFzc29jUmVxQWN0aW9uKTsKLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQVNTT0NfSURMRSwgTVQyX01MTUVfRElTQVNTT0NfUkVRLAotCQkJICAgICAgKFNUQVRFX01BQ0hJTkVfRlVOQykgTWxtZURpc2Fzc29jUmVxQWN0aW9uKTsKLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQVNTT0NfSURMRSwgTVQyX1BFRVJfRElTQVNTT0NfUkVRLAotCQkJICAgICAgKFNUQVRFX01BQ0hJTkVfRlVOQykgUGVlckRpc2Fzc29jQWN0aW9uKTsKLQotCS8qIHNlY29uZCBjb2x1bW4gKi8KLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQVNTT0NfV0FJVF9SU1AsIE1UMl9NTE1FX0FTU09DX1JFUSwKLQkJCSAgICAgIChTVEFURV9NQUNISU5FX0ZVTkMpIEludmFsaWRTdGF0ZVdoZW5Bc3NvYyk7Ci0JU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFTU09DX1dBSVRfUlNQLCBNVDJfTUxNRV9SRUFTU09DX1JFUSwKLQkJCSAgICAgIChTVEFURV9NQUNISU5FX0ZVTkMpIEludmFsaWRTdGF0ZVdoZW5SZWFzc29jKTsKLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQVNTT0NfV0FJVF9SU1AsIE1UMl9NTE1FX0RJU0FTU09DX1JFUSwKLQkJCSAgICAgIChTVEFURV9NQUNISU5FX0ZVTkMpCi0JCQkgICAgICBJbnZhbGlkU3RhdGVXaGVuRGlzYXNzb2NpYXRlKTsKLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQVNTT0NfV0FJVF9SU1AsIE1UMl9QRUVSX0RJU0FTU09DX1JFUSwKLQkJCSAgICAgIChTVEFURV9NQUNISU5FX0ZVTkMpIFBlZXJEaXNhc3NvY0FjdGlvbik7Ci0JU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFTU09DX1dBSVRfUlNQLCBNVDJfUEVFUl9BU1NPQ19SU1AsCi0JCQkgICAgICAoU1RBVEVfTUFDSElORV9GVU5DKSBQZWVyQXNzb2NSc3BBY3Rpb24pOwotCS8qICovCi0JLyogUGF0Y2ggM0NvbSBBUCBNT2RlOjNDUldFNDU0RzcyICovCi0JLyogV2Ugc2VuZCBBc3NvYyByZXF1ZXN0IGZyYW1lIHRvIHRoaXMgQVAsIGl0IGFsd2F5cyBzZW5kIFJlYXNzb2MgUnNwIG5vdCBBc3NvY2lhdGUgUnNwLiAqLwotCS8qICovCi0JU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFTU09DX1dBSVRfUlNQLCBNVDJfUEVFUl9SRUFTU09DX1JTUCwKLQkJCSAgICAgIChTVEFURV9NQUNISU5FX0ZVTkMpIFBlZXJBc3NvY1JzcEFjdGlvbik7Ci0JU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFTU09DX1dBSVRfUlNQLCBNVDJfQVNTT0NfVElNRU9VVCwKLQkJCSAgICAgIChTVEFURV9NQUNISU5FX0ZVTkMpIEFzc29jVGltZW91dEFjdGlvbik7Ci0KLQkvKiB0aGlyZCBjb2x1bW4gKi8KLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgUkVBU1NPQ19XQUlUX1JTUCwgTVQyX01MTUVfQVNTT0NfUkVRLAotCQkJICAgICAgKFNUQVRFX01BQ0hJTkVfRlVOQykgSW52YWxpZFN0YXRlV2hlbkFzc29jKTsKLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgUkVBU1NPQ19XQUlUX1JTUCwgTVQyX01MTUVfUkVBU1NPQ19SRVEsCi0JCQkgICAgICAoU1RBVEVfTUFDSElORV9GVU5DKSBJbnZhbGlkU3RhdGVXaGVuUmVhc3NvYyk7Ci0JU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIFJFQVNTT0NfV0FJVF9SU1AsIE1UMl9NTE1FX0RJU0FTU09DX1JFUSwKLQkJCSAgICAgIChTVEFURV9NQUNISU5FX0ZVTkMpCi0JCQkgICAgICBJbnZhbGlkU3RhdGVXaGVuRGlzYXNzb2NpYXRlKTsKLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgUkVBU1NPQ19XQUlUX1JTUCwgTVQyX1BFRVJfRElTQVNTT0NfUkVRLAotCQkJICAgICAgKFNUQVRFX01BQ0hJTkVfRlVOQykgUGVlckRpc2Fzc29jQWN0aW9uKTsKLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgUkVBU1NPQ19XQUlUX1JTUCwgTVQyX1BFRVJfUkVBU1NPQ19SU1AsCi0JCQkgICAgICAoU1RBVEVfTUFDSElORV9GVU5DKSBQZWVyUmVhc3NvY1JzcEFjdGlvbik7Ci0JLyogKi8KLQkvKiBQYXRjaCwgQVAgZG9lc24ndCBzZW5kIFJlYXNzb2NpYXRlIFJzcCBmcmFtZSB0byBTdGF0aW9uLiAqLwotCS8qICovCi0JU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIFJFQVNTT0NfV0FJVF9SU1AsIE1UMl9QRUVSX0FTU09DX1JTUCwKLQkJCSAgICAgIChTVEFURV9NQUNISU5FX0ZVTkMpIFBlZXJSZWFzc29jUnNwQWN0aW9uKTsKLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgUkVBU1NPQ19XQUlUX1JTUCwgTVQyX1JFQVNTT0NfVElNRU9VVCwKLQkJCSAgICAgIChTVEFURV9NQUNISU5FX0ZVTkMpIFJlYXNzb2NUaW1lb3V0QWN0aW9uKTsKLQotCS8qIGZvdXJ0aCBjb2x1bW4gKi8KLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgRElTQVNTT0NfV0FJVF9SU1AsIE1UMl9NTE1FX0FTU09DX1JFUSwKLQkJCSAgICAgIChTVEFURV9NQUNISU5FX0ZVTkMpIEludmFsaWRTdGF0ZVdoZW5Bc3NvYyk7Ci0JU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIERJU0FTU09DX1dBSVRfUlNQLCBNVDJfTUxNRV9SRUFTU09DX1JFUSwKLQkJCSAgICAgIChTVEFURV9NQUNISU5FX0ZVTkMpIEludmFsaWRTdGF0ZVdoZW5SZWFzc29jKTsKLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgRElTQVNTT0NfV0FJVF9SU1AsIE1UMl9NTE1FX0RJU0FTU09DX1JFUSwKLQkJCSAgICAgIChTVEFURV9NQUNISU5FX0ZVTkMpCi0JCQkgICAgICBJbnZhbGlkU3RhdGVXaGVuRGlzYXNzb2NpYXRlKTsKLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgRElTQVNTT0NfV0FJVF9SU1AsIE1UMl9QRUVSX0RJU0FTU09DX1JFUSwKLQkJCSAgICAgIChTVEFURV9NQUNISU5FX0ZVTkMpIFBlZXJEaXNhc3NvY0FjdGlvbik7Ci0JU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIERJU0FTU09DX1dBSVRfUlNQLCBNVDJfRElTQVNTT0NfVElNRU9VVCwKLQkJCSAgICAgIChTVEFURV9NQUNISU5FX0ZVTkMpIERpc2Fzc29jVGltZW91dEFjdGlvbik7Ci0KLQkvKiBpbml0aWFsaXplIHRoZSB0aW1lciAqLwotCVJUTVBJbml0VGltZXIocEFkLCAmcEFkLT5NbG1lQXV4LkFzc29jVGltZXIsCi0JCSAgICAgIEdFVF9USU1FUl9GVU5DVElPTihBc3NvY1RpbWVvdXQpLCBwQWQsIEZBTFNFKTsKLQlSVE1QSW5pdFRpbWVyKHBBZCwgJnBBZC0+TWxtZUF1eC5SZWFzc29jVGltZXIsCi0JCSAgICAgIEdFVF9USU1FUl9GVU5DVElPTihSZWFzc29jVGltZW91dCksIHBBZCwgRkFMU0UpOwotCVJUTVBJbml0VGltZXIocEFkLCAmcEFkLT5NbG1lQXV4LkRpc2Fzc29jVGltZXIsCi0JCSAgICAgIEdFVF9USU1FUl9GVU5DVElPTihEaXNhc3NvY1RpbWVvdXQpLCBwQWQsIEZBTFNFKTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlBc3NvY2lhdGlvbiB0aW1lb3V0IHByb2NlZHVyZS4gQWZ0ZXIgYXNzb2NpYXRpb24gdGltZW91dCwgdGhpcyBmdW5jdGlvbgotCQl3aWxsIGJlIGNhbGxlZCBhbmQgaXQgd2lsbCBwdXQgYSBtZXNzYWdlIGludG8gdGhlIE1MTUUgcXVldWUKLQlQYXJhbWV0ZXJzOgotCQlTdGFuZGFyZCB0aW1lciBwYXJhbWV0ZXJzCi0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgQXNzb2NUaW1lb3V0KHZvaWQgKlN5c3RlbVNwZWNpZmljMSwKLQkJICB2b2lkICpGdW5jdGlvbkNvbnRleHQsCi0JCSAgdm9pZCAqU3lzdGVtU3BlY2lmaWMyLCB2b2lkICpTeXN0ZW1TcGVjaWZpYzMpCi17Ci0Jc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkID0gKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKilGdW5jdGlvbkNvbnRleHQ7Ci0KLQkvKiBEbyBub3RoaW5nIGlmIHRoZSBkcml2ZXIgaXMgc3RhcnRpbmcgaGFsdCBzdGF0ZS4gKi8KLQkvKiBUaGlzIG1pZ2h0IGhhcHBlbiB3aGVuIHRpbWVyIGFscmVhZHkgYmVlbiBmaXJlZCBiZWZvcmUgY2FuY2VsIHRpbWVyIHdpdGggbWxtZWhhbHQgKi8KLQlpZiAoUlRNUF9URVNUX0ZMQUcKLQkgICAgKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkKLQkJcmV0dXJuOwotCi0JTWxtZUVucXVldWUocEFkLCBBU1NPQ19TVEFURV9NQUNISU5FLCBNVDJfQVNTT0NfVElNRU9VVCwgMCwgTlVMTCk7Ci0JUlRNUF9NTE1FX0hBTkRMRVIocEFkKTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlSZWFzc29jaWF0aW9uIHRpbWVvdXQgcHJvY2VkdXJlLiBBZnRlciByZWFzc29jaWF0aW9uIHRpbWVvdXQsIHRoaXMKLQkJZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYW5kIHB1dCBhIG1lc3NhZ2UgaW50byB0aGUgTUxNRSBxdWV1ZQotCVBhcmFtZXRlcnM6Ci0JCVN0YW5kYXJkIHRpbWVyIHBhcmFtZXRlcnMKLQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotdm9pZCBSZWFzc29jVGltZW91dCh2b2lkICpTeXN0ZW1TcGVjaWZpYzEsCi0JCSAgICB2b2lkICpGdW5jdGlvbkNvbnRleHQsCi0JCSAgICB2b2lkICpTeXN0ZW1TcGVjaWZpYzIsIHZvaWQgKlN5c3RlbVNwZWNpZmljMykKLXsKLQlzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQgPSAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqKUZ1bmN0aW9uQ29udGV4dDsKLQotCS8qIERvIG5vdGhpbmcgaWYgdGhlIGRyaXZlciBpcyBzdGFydGluZyBoYWx0IHN0YXRlLiAqLwotCS8qIFRoaXMgbWlnaHQgaGFwcGVuIHdoZW4gdGltZXIgYWxyZWFkeSBiZWVuIGZpcmVkIGJlZm9yZSBjYW5jZWwgdGltZXIgd2l0aCBtbG1laGFsdCAqLwotCWlmIChSVE1QX1RFU1RfRkxBRwotCSAgICAocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKQotCQlyZXR1cm47Ci0KLQlNbG1lRW5xdWV1ZShwQWQsIEFTU09DX1NUQVRFX01BQ0hJTkUsIE1UMl9SRUFTU09DX1RJTUVPVVQsIDAsIE5VTEwpOwotCVJUTVBfTUxNRV9IQU5ETEVSKHBBZCk7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJRGlzYXNzb2NpYXRpb24gdGltZW91dCBwcm9jZWR1cmUuIEFmdGVyIGRpc2Fzc29jaWF0aW9uIHRpbWVvdXQsIHRoaXMKLQkJZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYW5kIHB1dCBhIG1lc3NhZ2UgaW50byB0aGUgTUxNRSBxdWV1ZQotCVBhcmFtZXRlcnM6Ci0JCVN0YW5kYXJkIHRpbWVyIHBhcmFtZXRlcnMKLQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotdm9pZCBEaXNhc3NvY1RpbWVvdXQodm9pZCAqU3lzdGVtU3BlY2lmaWMxLAotCQkgICAgIHZvaWQgKkZ1bmN0aW9uQ29udGV4dCwKLQkJICAgICB2b2lkICpTeXN0ZW1TcGVjaWZpYzIsIHZvaWQgKlN5c3RlbVNwZWNpZmljMykKLXsKLQlzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQgPSAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqKUZ1bmN0aW9uQ29udGV4dDsKLQotCS8qIERvIG5vdGhpbmcgaWYgdGhlIGRyaXZlciBpcyBzdGFydGluZyBoYWx0IHN0YXRlLiAqLwotCS8qIFRoaXMgbWlnaHQgaGFwcGVuIHdoZW4gdGltZXIgYWxyZWFkeSBiZWVuIGZpcmVkIGJlZm9yZSBjYW5jZWwgdGltZXIgd2l0aCBtbG1laGFsdCAqLwotCWlmIChSVE1QX1RFU1RfRkxBRwotCSAgICAocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKQotCQlyZXR1cm47Ci0KLQlNbG1lRW5xdWV1ZShwQWQsIEFTU09DX1NUQVRFX01BQ0hJTkUsIE1UMl9ESVNBU1NPQ19USU1FT1VULCAwLCBOVUxMKTsKLQlSVE1QX01MTUVfSEFORExFUihwQWQpOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JCW1sbWUgYXNzb2MgcmVxIGhhbmRsaW5nIHByb2NlZHVyZQotCVBhcmFtZXRlcnM6Ci0JCUFkYXB0ZXIgLSBBZGFwdGVyIHBvaW50ZXIKLQkJRWxlbSAtIE1MTUUgUXVldWUgRWxlbWVudAotCVByZToKLQkJdGhlIHN0YXRpb24gaGFzIGJlZW4gYXV0aGVudGljYXRlZCBhbmQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgaW4gdGhlIGNvbmZpZwotCQkJLSMgU1NJRAotCQkJLSMgc3VwcG9ydGVkIHJhdGVzIGFuZCB0aGVpciBsZW5ndGgKLQkJCS0jIGxpc3RlbiBpbnRlcnZhbCAoQWRhcHRlci0+U3RhQ2ZnLmRlZmF1bHRfbGlzdGVuX2NvdW50KQotCQkJLSMgVHJhbnNtaXQgcG93ZXIgIChBZGFwdGVyLT5TdGFDZmcudHhfcG93ZXIpCi0JUG9zdCAgOgotCQktIyBBbiBhc3NvY2lhdGlvbiByZXF1ZXN0IGZyYW1lIGlzIGdlbmVyYXRlZCBhbmQgc2VudCB0byB0aGUgYWlyCi0JCS0jIEFzc29jaWF0aW9uIHRpbWVyIHN0YXJ0cwotCQktIyBBc3NvY2lhdGlvbiBzdGF0ZSAtPiBBU1NPQ19XQUlUX1JTUAotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi12b2lkIE1sbWVBc3NvY1JlcUFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pCi17Ci0JdTggQXBBZGRyWzZdOwotCXN0cnVjdCBydF9oZWFkZXJfODAyXzExIEFzc29jSGRyOwotCXU4IFdtZUllWzldID0KLQkgICAgeyBJRV9WRU5ET1JfU1BFQ0lGSUMsIDB4MDcsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4MDIsIDB4MDAsIDB4MDEsCi0gICAgICAgMHgwMCB9OwotCXUxNiBMaXN0ZW5JbnR2OwotCXVuc2lnbmVkIGxvbmcgVGltZW91dDsKLQl1MTYgQ2FwYWJpbGl0eUluZm87Ci0JQk9PTEVBTiBUaW1lckNhbmNlbGxlZDsKLQl1OCAqcE91dEJ1ZmZlciA9IE5VTEw7Ci0JaW50IE5TdGF0dXM7Ci0JdW5zaWduZWQgbG9uZyBGcmFtZUxlbiA9IDA7Ci0JdW5zaWduZWQgbG9uZyB0bXA7Ci0JdTE2IFZhckllc09mZnNldDsKLQl1MTYgU3RhdHVzOwotCi0JLyogQmxvY2sgYWxsIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgZHVyaW5nIFdQQSBibG9jayBwZXJpb2QgKi8KLQlpZiAocEFkLT5TdGFDZmcuYkJsb2NrQXNzb2MgPT0gVFJVRSkgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIkFTU09DIC0gQmxvY2sgQXNzb2MgcmVxdWVzdCBkdXJpbmcgV1BBIGJsb2NrIHBlcmlvZCFcbiIpKTsKLQkJcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUgPSBBU1NPQ19JRExFOwotCQlTdGF0dXMgPSBNTE1FX1NUQVRFX01BQ0hJTkVfUkVKRUNUOwotCQlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfQVNTT0NfQ09ORiwgMiwKLQkJCSAgICAmU3RhdHVzKTsKLQl9Ci0JLyogY2hlY2sgc2FuaXR5IGZpcnN0ICovCi0JZWxzZSBpZiAoTWxtZUFzc29jUmVxU2FuaXR5Ci0JCSAocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgQXBBZGRyLCAmQ2FwYWJpbGl0eUluZm8sCi0JCSAgJlRpbWVvdXQsICZMaXN0ZW5JbnR2KSkgewotCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5Bc3NvY1RpbWVyLCAmVGltZXJDYW5jZWxsZWQpOwotCQlDT1BZX01BQ19BRERSKHBBZC0+TWxtZUF1eC5Cc3NpZCwgQXBBZGRyKTsKLQotCQkvKiBHZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeSAqLwotCQlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOwotCQlpZiAoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKSB7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCJBU1NPQyAtIE1sbWVBc3NvY1JlcUFjdGlvbigpIGFsbG9jYXRlIG1lbW9yeSBmYWlsZWQgXG4iKSk7Ci0JCQlwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSA9IEFTU09DX0lETEU7Ci0JCQlTdGF0dXMgPSBNTE1FX0ZBSUxfTk9fUkVTT1VSQ0U7Ci0JCQlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLAotCQkJCSAgICBNVDJfQVNTT0NfQ09ORiwgMiwgJlN0YXR1cyk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJLyogQWRkIGJ5IEphbWVzIDAzLzA2LzI3ICovCi0JCXBBZC0+U3RhQ2ZnLkFzc29jSW5mby5MZW5ndGggPQotCQkgICAgc2l6ZW9mKHN0cnVjdCBydF9uZGlzXzgwMl8xMV9hc3NvY2lhdGlvbl9pbmZvcm1hdGlvbik7Ci0JCS8qIEFzc29jaWF0aW9uIGRvbid0IG5lZWQgdG8gcmVwb3J0IE1BQyBhZGRyZXNzICovCi0JCXBBZC0+U3RhQ2ZnLkFzc29jSW5mby5BdmFpbGFibGVSZXF1ZXN0Rml4ZWRJRXMgPQotCQkgICAgTkRJU184MDJfMTFfQUlfUkVRRklfQ0FQQUJJTElUSUVTIHwKLQkJICAgIE5ESVNfODAyXzExX0FJX1JFUUZJX0xJU1RFTklOVEVSVkFMOwotCQlwQWQtPlN0YUNmZy5Bc3NvY0luZm8uUmVxdWVzdEZpeGVkSUVzLkNhcGFiaWxpdGllcyA9Ci0JCSAgICBDYXBhYmlsaXR5SW5mbzsKLQkJcEFkLT5TdGFDZmcuQXNzb2NJbmZvLlJlcXVlc3RGaXhlZElFcy5MaXN0ZW5JbnRlcnZhbCA9Ci0JCSAgICBMaXN0ZW5JbnR2OwotCQkvKiBPbmx5IHJlYXNzb2NpYXRlIG5lZWQgdGhpcyAqLwotCQkvKkNPUFlfTUFDX0FERFIocEFkLT5TdGFDZmcuQXNzb2NJbmZvLlJlcXVlc3RGaXhlZElFcy5DdXJyZW50QVBBZGRyZXNzLCBBcEFkZHIpOyAqLwotCQlwQWQtPlN0YUNmZy5Bc3NvY0luZm8uT2Zmc2V0UmVxdWVzdElFcyA9Ci0JCSAgICBzaXplb2Yoc3RydWN0IHJ0X25kaXNfODAyXzExX2Fzc29jaWF0aW9uX2luZm9ybWF0aW9uKTsKLQotCQlOZGlzWmVyb01lbW9yeShwQWQtPlN0YUNmZy5SZXFWYXJJRXMsIE1BWF9WSUVfTEVOKTsKLQkJLyogRmlyc3QgYWRkIFNTSUQgKi8KLQkJVmFySWVzT2Zmc2V0ID0gMDsKLQkJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuUmVxVmFySUVzICsgVmFySWVzT2Zmc2V0LCAmU3NpZEllLAotCQkJICAgICAgIDEpOwotCQlWYXJJZXNPZmZzZXQgKz0gMTsKLQkJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuUmVxVmFySUVzICsgVmFySWVzT2Zmc2V0LAotCQkJICAgICAgICZwQWQtPk1sbWVBdXguU3NpZExlbiwgMSk7Ci0JCVZhckllc09mZnNldCArPSAxOwotCQlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5SZXFWYXJJRXMgKyBWYXJJZXNPZmZzZXQsCi0JCQkgICAgICAgcEFkLT5NbG1lQXV4LlNzaWQsIHBBZC0+TWxtZUF1eC5Tc2lkTGVuKTsKLQkJVmFySWVzT2Zmc2V0ICs9IHBBZC0+TWxtZUF1eC5Tc2lkTGVuOwotCi0JCS8qIFNlY29uZCBhZGQgU3VwcG9ydGVkIHJhdGVzICovCi0JCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLlJlcVZhcklFcyArIFZhckllc09mZnNldCwgJlN1cFJhdGVJZSwKLQkJCSAgICAgICAxKTsKLQkJVmFySWVzT2Zmc2V0ICs9IDE7Ci0JCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLlJlcVZhcklFcyArIFZhckllc09mZnNldCwKLQkJCSAgICAgICAmcEFkLT5NbG1lQXV4LlN1cFJhdGVMZW4sIDEpOwotCQlWYXJJZXNPZmZzZXQgKz0gMTsKLQkJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuUmVxVmFySUVzICsgVmFySWVzT2Zmc2V0LAotCQkJICAgICAgIHBBZC0+TWxtZUF1eC5TdXBSYXRlLCBwQWQtPk1sbWVBdXguU3VwUmF0ZUxlbik7Ci0JCVZhckllc09mZnNldCArPSBwQWQtPk1sbWVBdXguU3VwUmF0ZUxlbjsKLQkJLyogRW5kIEFkZCBieSBKYW1lcyAqLwotCi0JCWlmICgocEFkLT5Db21tb25DZmcuQ2hhbm5lbCA+IDE0KSAmJgotCQkgICAgKHBBZC0+Q29tbW9uQ2ZnLmJJRUVFODAyMTFIID09IFRSVUUpKQotCQkJQ2FwYWJpbGl0eUluZm8gfD0gMHgwMTAwOwotCi0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFTU09DIC0gU2VuZCBBU1NPQyByZXF1ZXN0Li4uXG4iKSk7Ci0JCU1ndE1hY0hlYWRlckluaXQocEFkLCAmQXNzb2NIZHIsIFNVQlRZUEVfQVNTT0NfUkVRLCAwLCBBcEFkZHIsCi0JCQkJIEFwQWRkcik7Ci0KLQkJLyogQnVpbGQgYmFzaWMgZnJhbWUgZmlyc3QgKi8KLQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwgJkZyYW1lTGVuLAotCQkJCSAgc2l6ZW9mKHN0cnVjdCBydF9oZWFkZXJfODAyXzExKSwgJkFzc29jSGRyLAotCQkJCSAgMiwgJkNhcGFiaWxpdHlJbmZvLAotCQkJCSAgMiwgJkxpc3RlbkludHYsCi0JCQkJICAxLCAmU3NpZEllLAotCQkJCSAgMSwgJnBBZC0+TWxtZUF1eC5Tc2lkTGVuLAotCQkJCSAgcEFkLT5NbG1lQXV4LlNzaWRMZW4sIHBBZC0+TWxtZUF1eC5Tc2lkLAotCQkJCSAgMSwgJlN1cFJhdGVJZSwKLQkJCQkgIDEsICZwQWQtPk1sbWVBdXguU3VwUmF0ZUxlbiwKLQkJCQkgIHBBZC0+TWxtZUF1eC5TdXBSYXRlTGVuLCBwQWQtPk1sbWVBdXguU3VwUmF0ZSwKLQkJCQkgIEVORF9PRl9BUkdTKTsKLQotCQlpZiAocEFkLT5NbG1lQXV4LkV4dFJhdGVMZW4gIT0gMCkgewotCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAmdG1wLAotCQkJCQkgIDEsICZFeHRSYXRlSWUsCi0JCQkJCSAgMSwgJnBBZC0+TWxtZUF1eC5FeHRSYXRlTGVuLAotCQkJCQkgIHBBZC0+TWxtZUF1eC5FeHRSYXRlTGVuLAotCQkJCQkgIHBBZC0+TWxtZUF1eC5FeHRSYXRlLCBFTkRfT0ZfQVJHUyk7Ci0JCQlGcmFtZUxlbiArPSB0bXA7Ci0JCX0KLQkJLyogSFQgKi8KLQkJaWYgKChwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5TGVuID4gMCkKLQkJICAgICYmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpKSB7Ci0JCQl1bnNpZ25lZCBsb25nIFRtcExlbjsKLQkJCXU4IEh0TGVuOwotCQkJdTggQlJPQURDT01bNF0gPSB7IDB4MCwgMHg5MCwgMHg0YywgMHgzMyB9OwotCQkJaWYgKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uYlByZU5IdCA9PSBUUlVFKSB7Ci0JCQkJSHRMZW4gPSBTSVpFX0hUX0NBUF9JRSArIDQ7Ci0JCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLAotCQkJCQkJICAmVG1wTGVuLCAxLCAmV3BhSWUsIDEsICZIdExlbiwKLQkJCQkJCSAgNCwgJkJST0FEQ09NWzBdLAotCQkJCQkJICBwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5TGVuLAotCQkJCQkJICAmcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eSwKLQkJCQkJCSAgRU5EX09GX0FSR1MpOwotCQkJfSBlbHNlIHsKLQkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sCi0JCQkJCQkgICZUbXBMZW4sIDEsICZIdENhcEllLCAxLAotCQkJCQkJICAmcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eUxlbiwKLQkJCQkJCSAgcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eUxlbiwKLQkJCQkJCSAgJnBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHksCi0JCQkJCQkgIEVORF9PRl9BUkdTKTsKLQkJCX0KLQkJCUZyYW1lTGVuICs9IFRtcExlbjsKLQkJfQotCQkvKiBhZGQgUmFsaW5rIHByb3ByaWV0YXJ5IElFIHRvIGluZm9ybSBBUCB0aGlzIFNUQSBpcyBnb2luZyB0byB1c2UgQUdHUkVHQVRJT04gb3IgUElHR1ktQkFDSytBR0dSRUdBVElPTiAqLwotCQkvKiBDYXNlIEk6IChBZ2dyZWdhdGlvbiArIFBpZ2d5LUJhY2spICovCi0JCS8qIDEuIHVzZXIgZW5hYmxlIGFnZ3JlZ2F0aW9uLCBBTkQgKi8KLQkJLyogMi4gTWFjIHN1cHBvcnQgcGlnZ3ktYmFjayAqLwotCQkvKiAzLiBBUCBhbm5vdWNlcyBpdCdzIFBJR0dZLUJBQ0srQUdHUkVHQVRJT04tY2FwYWJsZSBpbiBCRUFDT04gKi8KLQkJLyogQ2FzZSBJSTogKEFnZ3JlZ2F0aW9uKSAqLwotCQkvKiAxLiB1c2VyIGVuYWJsZSBhZ2dyZWdhdGlvbiwgQU5EICovCi0JCS8qIDIuIEFQIGFubm91Y2VzIGl0J3MgQUdHUkVHQVRJT04tY2FwYWJsZSBpbiBCRUFDT04gKi8KLQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJBZ2dyZWdhdGlvbkNhcGFibGUpIHsKLQkJCWlmICgocEFkLT5Db21tb25DZmcuYlBpZ2d5QmFja0NhcGFibGUpCi0JCQkgICAgJiYgKChwQWQtPk1sbWVBdXguQVBSYWxpbmtJZSAmIDB4MDAwMDAwMDMpID09IDMpKSB7Ci0JCQkJdW5zaWduZWQgbG9uZyBUbXBMZW47Ci0JCQkJdTggUmFsaW5rSWVbOV0gPQotCQkJCSAgICB7IElFX1ZFTkRPUl9TUEVDSUZJQywgNywgMHgwMCwgMHgwYywgMHg0MywKLQkJCSAgICAweDAzLCAweDAwLCAweDAwLCAweDAwIH07Ci0JCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLAotCQkJCQkJICAmVG1wTGVuLCA5LCBSYWxpbmtJZSwKLQkJCQkJCSAgRU5EX09GX0FSR1MpOwotCQkJCUZyYW1lTGVuICs9IFRtcExlbjsKLQkJCX0gZWxzZSBpZiAocEFkLT5NbG1lQXV4LkFQUmFsaW5rSWUgJiAweDAwMDAwMDAxKSB7Ci0JCQkJdW5zaWduZWQgbG9uZyBUbXBMZW47Ci0JCQkJdTggUmFsaW5rSWVbOV0gPQotCQkJCSAgICB7IElFX1ZFTkRPUl9TUEVDSUZJQywgNywgMHgwMCwgMHgwYywgMHg0MywKLQkJCSAgICAweDAxLCAweDAwLCAweDAwLCAweDAwIH07Ci0JCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLAotCQkJCQkJICAmVG1wTGVuLCA5LCBSYWxpbmtJZSwKLQkJCQkJCSAgRU5EX09GX0FSR1MpOwotCQkJCUZyYW1lTGVuICs9IFRtcExlbjsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXVuc2lnbmVkIGxvbmcgVG1wTGVuOwotCQkJdTggUmFsaW5rSWVbOV0gPQotCQkJICAgIHsgSUVfVkVORE9SX1NQRUNJRklDLCA3LCAweDAwLCAweDBjLCAweDQzLCAweDA2LAotCQkgICAgMHgwMCwgMHgwMCwgMHgwMCB9OwotCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAmVG1wTGVuLCA5LAotCQkJCQkgIFJhbGlua0llLCBFTkRfT0ZfQVJHUyk7Ci0JCQlGcmFtZUxlbiArPSBUbXBMZW47Ci0JCX0KLQotCQlpZiAocEFkLT5NbG1lQXV4LkFQRWRjYVBhcm0uYlZhbGlkKSB7Ci0JCQlpZiAocEFkLT5Db21tb25DZmcuYkFQU0RDYXBhYmxlCi0JCQkgICAgJiYgcEFkLT5NbG1lQXV4LkFQRWRjYVBhcm0uYkFQU0RDYXBhYmxlKSB7Ci0JCQkJc3RydWN0IHJ0X3Fic3Nfc3RhX2luZm9fcGFybSBRb3NJbmZvOwotCi0JCQkJTmRpc1plcm9NZW1vcnkoJlFvc0luZm8sCi0JCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHJ0X3Fic3Nfc3RhX2luZm9fcGFybSkpOwotCQkJCVFvc0luZm8uVUFQU0RfQUNfQkUgPSBwQWQtPkNvbW1vbkNmZy5iQVBTREFDX0JFOwotCQkJCVFvc0luZm8uVUFQU0RfQUNfQksgPSBwQWQtPkNvbW1vbkNmZy5iQVBTREFDX0JLOwotCQkJCVFvc0luZm8uVUFQU0RfQUNfVkkgPSBwQWQtPkNvbW1vbkNmZy5iQVBTREFDX1ZJOwotCQkJCVFvc0luZm8uVUFQU0RfQUNfVk8gPSBwQWQtPkNvbW1vbkNmZy5iQVBTREFDX1ZPOwotCQkJCVFvc0luZm8uTWF4U1BMZW5ndGggPQotCQkJCSAgICBwQWQtPkNvbW1vbkNmZy5NYXhTUExlbmd0aDsKLQkJCQlXbWVJZVs4XSB8PSAqKHU4ICopJiBRb3NJbmZvOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBUaGUgUGFyYW1ldGVyIFNldCBDb3VudCBpcyBzZXQgdG8goacwoaggaW4gdGhlIGFzc29jaWF0aW9uIHJlcXVlc3QgZnJhbWVzICovCi0JCQkJLyogV21lSWVbOF0gfD0gKHBBZC0+TWxtZUF1eC5BUEVkY2FQYXJtLkVkY2FVcGRhdGVDb3VudCAmIDB4MGYpOyAqLwotCQkJfQotCi0JCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICZ0bXAsCi0JCQkJCSAgOSwgJldtZUllWzBdLCBFTkRfT0ZfQVJHUyk7Ci0JCQlGcmFtZUxlbiArPSB0bXA7Ci0JCX0KLQkJLyogKi8KLQkJLyogTGV0IFdQQSgjMjIxKSBFbGVtZW50IElEIG9uIHRoZSBlbmQgb2YgdGhpcyBhc3NvY2lhdGlvbiBmcmFtZS4gKi8KLQkJLyogT3RoZXJ3aXNlIHNvbWUgQVAgd2lsbCBmYWlsIG9uIHBhcnNpbmcgRWxlbWVudCBJRCBhbmQgc2V0IHN0YXR1cyBmYWlsIG9uIEFzc29jIFJzcC4gKi8KLQkJLyogRm9yIGV4YW1wbGU6IFB1dCBWZW5kb3IgU3BlY2lmaWMgSUUgb24gdGhlIGZyb250IG9mIFdQQSBJRS4gKi8KLQkJLyogVGhpcyBoYXBwZW5zIG9uIEFQIChNb2RlbCBObzpMaW5rc3lzIFdSSzU0RykgKi8KLQkJLyogKi8KLQkJaWYgKCgocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLKSB8fAotCQkgICAgIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLKSB8fAotCQkgICAgIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpIHx8Ci0JCSAgICAgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIpCi0JCSAgICApCi0JCSAgICApIHsKLQkJCXU4IFJTTkllID0gSUVfV1BBOwotCi0JCQlpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spCi0JCQkgICAgfHwgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09Ci0JCQkJTmRpczgwMl8xMUF1dGhNb2RlV1BBMikpIHsKLQkJCQlSU05JZSA9IElFX1dQQTI7Ci0JCQl9Ci0KLQkJCWlmICgocEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQICE9Ci0JCQkgICAgIFdQQV9TVVBQTElDQU5UX0VOQUJMRSkKLQkJCSAgICAmJiAocEFkLT5TdGFDZmcuYlJTTl9JRV9Gcm9tV3BhU3VwcGxpY2FudCA9PSBGQUxTRSkpCi0JCQkJUlRNUE1ha2VSU05JRShwQWQsIHBBZC0+U3RhQ2ZnLkF1dGhNb2RlLAotCQkJCQkgICAgICBwQWQtPlN0YUNmZy5XZXBTdGF0dXMsIEJTUzApOwotCi0JCQkvKiBDaGVjayBmb3IgV1BBIFBNSyBjYWNoZSBsaXN0ICovCi0JCQlpZiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMikgewotCQkJCWludCBpZHg7Ci0JCQkJQk9PTEVBTiBGb3VuZFBNSyA9IEZBTFNFOwotCQkJCS8qIFNlYXJjaCBjaGNoZWQgUE1LSUQsIGFwcGVuZCBpdCBpZiBleGlzdGVkICovCi0JCQkJZm9yIChpZHggPSAwOyBpZHggPCBQTUtJRF9OTzsgaWR4KyspIHsKLQkJCQkJaWYgKE5kaXNFcXVhbE1lbW9yeQotCQkJCQkgICAgKEFwQWRkciwKLQkJCQkJICAgICAmcEFkLT5TdGFDZmcuU2F2ZWRQTUtbaWR4XS5CU1NJRCwKLQkJCQkJICAgICA2KSkgewotCQkJCQkJRm91bmRQTUsgPSBUUlVFOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJaWYgKEZvdW5kUE1LKSB7Ci0JCQkJCS8qIFNldCBQTUsgbnVtYmVyICovCi0JCQkJCSoodTE2ICopJiBwQWQtPlN0YUNmZy5SU05fSUVbcEFkLT4KLQkJCQkJCQkJCVN0YUNmZy4KLQkJCQkJCQkJCVJTTklFX0xlbl0KLQkJCQkJICAgID0gMTsKLQkJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+U3RhQ2ZnLgotCQkJCQkJICAgICAgIFJTTl9JRVtwQWQtPlN0YUNmZy4KLQkJCQkJCQkgICAgICBSU05JRV9MZW4gKyAyXSwKLQkJCQkJCSAgICAgICAmcEFkLT5TdGFDZmcuCi0JCQkJCQkgICAgICAgU2F2ZWRQTUtbaWR4XS5QTUtJRCwgMTYpOwotCQkJCQlwQWQtPlN0YUNmZy5SU05JRV9MZW4gKz0gMTg7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAoKHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9PQotCQkJICAgICBXUEFfU1VQUExJQ0FOVF9FTkFCTEUpCi0JCQkgICAgJiYgKHBBZC0+U3RhQ2ZnLmJSU05fSUVfRnJvbVdwYVN1cHBsaWNhbnQgPT0KLQkJCQlUUlVFKSkgewotCQkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgJnRtcCwKLQkJCQkJCSAgcEFkLT5TdGFDZmcuUlNOSUVfTGVuLAotCQkJCQkJICBwQWQtPlN0YUNmZy5SU05fSUUsCi0JCQkJCQkgIEVORF9PRl9BUkdTKTsKLQkJCX0gZWxzZSB7Ci0JCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAmdG1wLAotCQkJCQkJICAxLCAmUlNOSWUsCi0JCQkJCQkgIDEsICZwQWQtPlN0YUNmZy5SU05JRV9MZW4sCi0JCQkJCQkgIHBBZC0+U3RhQ2ZnLlJTTklFX0xlbiwKLQkJCQkJCSAgcEFkLT5TdGFDZmcuUlNOX0lFLAotCQkJCQkJICBFTkRfT0ZfQVJHUyk7Ci0JCQl9Ci0KLQkJCUZyYW1lTGVuICs9IHRtcDsKLQotCQkJaWYgKChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgIT0KLQkJCSAgICAgV1BBX1NVUFBMSUNBTlRfRU5BQkxFKQotCQkJICAgIHx8IChwQWQtPlN0YUNmZy5iUlNOX0lFX0Zyb21XcGFTdXBwbGljYW50ID09Ci0JCQkJRkFMU0UpKSB7Ci0JCQkJLyogQXBwZW5kIFZhcmlhYmxlIElFICovCi0JCQkJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuUmVxVmFySUVzICsKLQkJCQkJICAgICAgIFZhckllc09mZnNldCwgJlJTTkllLCAxKTsKLQkJCQlWYXJJZXNPZmZzZXQgKz0gMTsKLQkJCQlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5SZXFWYXJJRXMgKwotCQkJCQkgICAgICAgVmFySWVzT2Zmc2V0LAotCQkJCQkgICAgICAgJnBBZC0+U3RhQ2ZnLlJTTklFX0xlbiwgMSk7Ci0JCQkJVmFySWVzT2Zmc2V0ICs9IDE7Ci0JCQl9Ci0JCQlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5SZXFWYXJJRXMgKyBWYXJJZXNPZmZzZXQsCi0JCQkJICAgICAgIHBBZC0+U3RhQ2ZnLlJTTl9JRSwKLQkJCQkgICAgICAgcEFkLT5TdGFDZmcuUlNOSUVfTGVuKTsKLQkJCVZhckllc09mZnNldCArPSBwQWQtPlN0YUNmZy5SU05JRV9MZW47Ci0KLQkJCS8qIFNldCBWYXJpYWJsZSBJRXMgTGVuZ3RoICovCi0JCQlwQWQtPlN0YUNmZy5SZXFWYXJJRUxlbiA9IFZhckllc09mZnNldDsKLQkJfQotCi0JCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgMCwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOwotCQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOwotCi0JCVJUTVBTZXRUaW1lcigmcEFkLT5NbG1lQXV4LkFzc29jVGltZXIsIFRpbWVvdXQpOwotCQlwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSA9IEFTU09DX1dBSVRfUlNQOwotCX0gZWxzZSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiQVNTT0MgLSBNbG1lQXNzb2NSZXFBY3Rpb24oKSBzYW5pdHkgY2hlY2sgZmFpbGVkLiBCVUchXG4iKSk7Ci0JCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKLQkJU3RhdHVzID0gTUxNRV9JTlZBTElEX0ZPUk1BVDsKLQkJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX0FTU09DX0NPTkYsIDIsCi0JCQkgICAgJlN0YXR1cyk7Ci0JfQotCi19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJbWxtZSByZWFzc29jIHJlcSBoYW5kbGluZyBwcm9jZWR1cmUKLQlQYXJhbWV0ZXJzOgotCQlFbGVtIC0KLQlQcmU6Ci0JCS0jIFNTSUQgIChBZGFwdGVyLT5TdGFDZmcuc3NpZFtdKQotCQktIyBCU1NJRCAoQVAgYWRkcmVzcywgQWRhcHRlci0+U3RhQ2ZnLmJzc2lkKQotCQktIyBTdXBwb3J0ZWQgcmF0ZXMgKEFkYXB0ZXItPlN0YUNmZy5zdXBwb3J0ZWRfcmF0ZXNbXSkKLQkJLSMgU3VwcG9ydGVkIHJhdGVzIGxlbmd0aCAoQWRhcHRlci0+U3RhQ2ZnLnN1cHBvcnRlZF9yYXRlc19sZW4pCi0JCS0jIFR4IHBvd2VyIChBZGFwdGVyLT5TdGFDZmcudHhfcG93ZXIpCi0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgTWxtZVJlYXNzb2NSZXFBY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKQotewotCXU4IEFwQWRkcls2XTsKLQlzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSBSZWFzc29jSGRyOwotCXU4IFdtZUllWzldID0KLQkgICAgeyBJRV9WRU5ET1JfU1BFQ0lGSUMsIDB4MDcsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4MDIsIDB4MDAsIDB4MDEsCi0gICAgICAgMHgwMCB9OwotCXUxNiBDYXBhYmlsaXR5SW5mbywgTGlzdGVuSW50djsKLQl1bnNpZ25lZCBsb25nIFRpbWVvdXQ7Ci0JdW5zaWduZWQgbG9uZyBGcmFtZUxlbiA9IDA7Ci0JQk9PTEVBTiBUaW1lckNhbmNlbGxlZDsKLQlpbnQgTlN0YXR1czsKLQl1bnNpZ25lZCBsb25nIHRtcDsKLQl1OCAqcE91dEJ1ZmZlciA9IE5VTEw7Ci0JdTE2IFN0YXR1czsKLQotCS8qIEJsb2NrIGFsbCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IGR1cmluZyBXUEEgYmxvY2sgcGVyaW9kICovCi0JaWYgKHBBZC0+U3RhQ2ZnLmJCbG9ja0Fzc29jID09IFRSVUUpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJBU1NPQyAtIEJsb2NrIFJlQXNzb2MgcmVxdWVzdCBkdXJpbmcgV1BBIGJsb2NrIHBlcmlvZCFcbiIpKTsKLQkJcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUgPSBBU1NPQ19JRExFOwotCQlTdGF0dXMgPSBNTE1FX1NUQVRFX01BQ0hJTkVfUkVKRUNUOwotCQlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfUkVBU1NPQ19DT05GLCAyLAotCQkJICAgICZTdGF0dXMpOwotCX0KLQkvKiB0aGUgcGFyYW1ldGVycyBhcmUgdGhlIHNhbWUgYXMgdGhlIGFzc29jaWF0aW9uICovCi0JZWxzZSBpZiAoTWxtZUFzc29jUmVxU2FuaXR5Ci0JCSAocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgQXBBZGRyLCAmQ2FwYWJpbGl0eUluZm8sCi0JCSAgJlRpbWVvdXQsICZMaXN0ZW5JbnR2KSkgewotCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5SZWFzc29jVGltZXIsICZUaW1lckNhbmNlbGxlZCk7Ci0KLQkJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsJLypHZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeSAqLwotCQlpZiAoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKSB7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCJBU1NPQyAtIE1sbWVSZWFzc29jUmVxQWN0aW9uKCkgYWxsb2NhdGUgbWVtb3J5IGZhaWxlZCBcbiIpKTsKLQkJCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKLQkJCVN0YXR1cyA9IE1MTUVfRkFJTF9OT19SRVNPVVJDRTsKLQkJCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsCi0JCQkJICAgIE1UMl9SRUFTU09DX0NPTkYsIDIsICZTdGF0dXMpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJQ09QWV9NQUNfQUREUihwQWQtPk1sbWVBdXguQnNzaWQsIEFwQWRkcik7Ci0KLQkJLyogbWFrZSBmcmFtZSwgdXNlIGJzc2lkIGFzIHRoZSBBUCBhZGRyZXNzPz8gKi8KLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJBU1NPQyAtIFNlbmQgUkUtQVNTT0MgcmVxdWVzdC4uLlxuIikpOwotCQlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJlJlYXNzb2NIZHIsIFNVQlRZUEVfUkVBU1NPQ19SRVEsIDAsCi0JCQkJIEFwQWRkciwgQXBBZGRyKTsKLQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwgJkZyYW1lTGVuLCBzaXplb2Yoc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEpLAotCQkJCSAgJlJlYXNzb2NIZHIsIDIsICZDYXBhYmlsaXR5SW5mbywgMiwKLQkJCQkgICZMaXN0ZW5JbnR2LCBNQUNfQUREUl9MRU4sIEFwQWRkciwgMSwgJlNzaWRJZSwKLQkJCQkgIDEsICZwQWQtPk1sbWVBdXguU3NpZExlbiwKLQkJCQkgIHBBZC0+TWxtZUF1eC5Tc2lkTGVuLCBwQWQtPk1sbWVBdXguU3NpZCwgMSwKLQkJCQkgICZTdXBSYXRlSWUsIDEsICZwQWQtPk1sbWVBdXguU3VwUmF0ZUxlbiwKLQkJCQkgIHBBZC0+TWxtZUF1eC5TdXBSYXRlTGVuLCBwQWQtPk1sbWVBdXguU3VwUmF0ZSwKLQkJCQkgIEVORF9PRl9BUkdTKTsKLQotCQlpZiAocEFkLT5NbG1lQXV4LkV4dFJhdGVMZW4gIT0gMCkgewotCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAmdG1wLAotCQkJCQkgIDEsICZFeHRSYXRlSWUsCi0JCQkJCSAgMSwgJnBBZC0+TWxtZUF1eC5FeHRSYXRlTGVuLAotCQkJCQkgIHBBZC0+TWxtZUF1eC5FeHRSYXRlTGVuLAotCQkJCQkgIHBBZC0+TWxtZUF1eC5FeHRSYXRlLCBFTkRfT0ZfQVJHUyk7Ci0JCQlGcmFtZUxlbiArPSB0bXA7Ci0JCX0KLQotCQlpZiAocEFkLT5NbG1lQXV4LkFQRWRjYVBhcm0uYlZhbGlkKSB7Ci0JCQlpZiAocEFkLT5Db21tb25DZmcuYkFQU0RDYXBhYmxlCi0JCQkgICAgJiYgcEFkLT5NbG1lQXV4LkFQRWRjYVBhcm0uYkFQU0RDYXBhYmxlKSB7Ci0JCQkJc3RydWN0IHJ0X3Fic3Nfc3RhX2luZm9fcGFybSBRb3NJbmZvOwotCi0JCQkJTmRpc1plcm9NZW1vcnkoJlFvc0luZm8sCi0JCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHJ0X3Fic3Nfc3RhX2luZm9fcGFybSkpOwotCQkJCVFvc0luZm8uVUFQU0RfQUNfQkUgPSBwQWQtPkNvbW1vbkNmZy5iQVBTREFDX0JFOwotCQkJCVFvc0luZm8uVUFQU0RfQUNfQksgPSBwQWQtPkNvbW1vbkNmZy5iQVBTREFDX0JLOwotCQkJCVFvc0luZm8uVUFQU0RfQUNfVkkgPSBwQWQtPkNvbW1vbkNmZy5iQVBTREFDX1ZJOwotCQkJCVFvc0luZm8uVUFQU0RfQUNfVk8gPSBwQWQtPkNvbW1vbkNmZy5iQVBTREFDX1ZPOwotCQkJCVFvc0luZm8uTWF4U1BMZW5ndGggPQotCQkJCSAgICBwQWQtPkNvbW1vbkNmZy5NYXhTUExlbmd0aDsKLQkJCQlXbWVJZVs4XSB8PSAqKHU4ICopJiBRb3NJbmZvOwotCQkJfQotCi0JCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICZ0bXAsCi0JCQkJCSAgOSwgJldtZUllWzBdLCBFTkRfT0ZfQVJHUyk7Ci0JCQlGcmFtZUxlbiArPSB0bXA7Ci0JCX0KLQkJLyogSFQgKi8KLQkJaWYgKChwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5TGVuID4gMCkKLQkJICAgICYmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpKSB7Ci0JCQl1bnNpZ25lZCBsb25nIFRtcExlbjsKLQkJCXU4IEh0TGVuOwotCQkJdTggQlJPQURDT01bNF0gPSB7IDB4MCwgMHg5MCwgMHg0YywgMHgzMyB9OwotCQkJaWYgKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uYlByZU5IdCA9PSBUUlVFKSB7Ci0JCQkJSHRMZW4gPSBTSVpFX0hUX0NBUF9JRSArIDQ7Ci0JCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLAotCQkJCQkJICAmVG1wTGVuLCAxLCAmV3BhSWUsIDEsICZIdExlbiwKLQkJCQkJCSAgNCwgJkJST0FEQ09NWzBdLAotCQkJCQkJICBwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5TGVuLAotCQkJCQkJICAmcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eSwKLQkJCQkJCSAgRU5EX09GX0FSR1MpOwotCQkJfSBlbHNlIHsKLQkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sCi0JCQkJCQkgICZUbXBMZW4sIDEsICZIdENhcEllLCAxLAotCQkJCQkJICAmcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eUxlbiwKLQkJCQkJCSAgcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eUxlbiwKLQkJCQkJCSAgJnBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHksCi0JCQkJCQkgIEVORF9PRl9BUkdTKTsKLQkJCX0KLQkJCUZyYW1lTGVuICs9IFRtcExlbjsKLQkJfQotCQkvKiBhZGQgUmFsaW5rIHByb3ByaWV0YXJ5IElFIHRvIGluZm9ybSBBUCB0aGlzIFNUQSBpcyBnb2luZyB0byB1c2UgQUdHUkVHQVRJT04gb3IgUElHR1ktQkFDSytBR0dSRUdBVElPTiAqLwotCQkvKiBDYXNlIEk6IChBZ2dyZWdhdGlvbiArIFBpZ2d5LUJhY2spICovCi0JCS8qIDEuIHVzZXIgZW5hYmxlIGFnZ3JlZ2F0aW9uLCBBTkQgKi8KLQkJLyogMi4gTWFjIHN1cHBvcnQgcGlnZ3ktYmFjayAqLwotCQkvKiAzLiBBUCBhbm5vdWNlcyBpdCdzIFBJR0dZLUJBQ0srQUdHUkVHQVRJT04tY2FwYWJsZSBpbiBCRUFDT04gKi8KLQkJLyogQ2FzZSBJSTogKEFnZ3JlZ2F0aW9uKSAqLwotCQkvKiAxLiB1c2VyIGVuYWJsZSBhZ2dyZWdhdGlvbiwgQU5EICovCi0JCS8qIDIuIEFQIGFubm91Y2VzIGl0J3MgQUdHUkVHQVRJT04tY2FwYWJsZSBpbiBCRUFDT04gKi8KLQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJBZ2dyZWdhdGlvbkNhcGFibGUpIHsKLQkJCWlmICgocEFkLT5Db21tb25DZmcuYlBpZ2d5QmFja0NhcGFibGUpCi0JCQkgICAgJiYgKChwQWQtPk1sbWVBdXguQVBSYWxpbmtJZSAmIDB4MDAwMDAwMDMpID09IDMpKSB7Ci0JCQkJdW5zaWduZWQgbG9uZyBUbXBMZW47Ci0JCQkJdTggUmFsaW5rSWVbOV0gPQotCQkJCSAgICB7IElFX1ZFTkRPUl9TUEVDSUZJQywgNywgMHgwMCwgMHgwYywgMHg0MywKLQkJCSAgICAweDAzLCAweDAwLCAweDAwLCAweDAwIH07Ci0JCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLAotCQkJCQkJICAmVG1wTGVuLCA5LCBSYWxpbmtJZSwKLQkJCQkJCSAgRU5EX09GX0FSR1MpOwotCQkJCUZyYW1lTGVuICs9IFRtcExlbjsKLQkJCX0gZWxzZSBpZiAocEFkLT5NbG1lQXV4LkFQUmFsaW5rSWUgJiAweDAwMDAwMDAxKSB7Ci0JCQkJdW5zaWduZWQgbG9uZyBUbXBMZW47Ci0JCQkJdTggUmFsaW5rSWVbOV0gPQotCQkJCSAgICB7IElFX1ZFTkRPUl9TUEVDSUZJQywgNywgMHgwMCwgMHgwYywgMHg0MywKLQkJCSAgICAweDAxLCAweDAwLCAweDAwLCAweDAwIH07Ci0JCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLAotCQkJCQkJICAmVG1wTGVuLCA5LCBSYWxpbmtJZSwKLQkJCQkJCSAgRU5EX09GX0FSR1MpOwotCQkJCUZyYW1lTGVuICs9IFRtcExlbjsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXVuc2lnbmVkIGxvbmcgVG1wTGVuOwotCQkJdTggUmFsaW5rSWVbOV0gPQotCQkJICAgIHsgSUVfVkVORE9SX1NQRUNJRklDLCA3LCAweDAwLCAweDBjLCAweDQzLCAweDA0LAotCQkgICAgMHgwMCwgMHgwMCwgMHgwMCB9OwotCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAmVG1wTGVuLCA5LAotCQkJCQkgIFJhbGlua0llLCBFTkRfT0ZfQVJHUyk7Ci0JCQlGcmFtZUxlbiArPSBUbXBMZW47Ci0JCX0KLQotCQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKLQkJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKLQotCQlSVE1QU2V0VGltZXIoJnBBZC0+TWxtZUF1eC5SZWFzc29jVGltZXIsIFRpbWVvdXQpOwkvKiBpbiBtU2VjICovCi0JCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gUkVBU1NPQ19XQUlUX1JTUDsKLQl9IGVsc2UgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIkFTU09DIC0gTWxtZVJlYXNzb2NSZXFBY3Rpb24oKSBzYW5pdHkgY2hlY2sgZmFpbGVkLiBCVUchXG4iKSk7Ci0JCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKLQkJU3RhdHVzID0gTUxNRV9JTlZBTElEX0ZPUk1BVDsKLQkJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX1JFQVNTT0NfQ09ORiwgMiwKLQkJCSAgICAmU3RhdHVzKTsKLQl9Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJVXBwZXIgbGF5ZXIgaXNzdWVzIGRpc2Fzc29jIHJlcXVlc3QKLQlQYXJhbWV0ZXJzOgotCQlFbGVtIC0KLQotCUlSUUwgPSBQQVNTSVZFX0xFVkVMCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi12b2lkIE1sbWVEaXNhc3NvY1JlcUFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pCi17Ci0Jc3RydWN0IHJ0X21sbWVfZGlzYXNzb2NfcmVxICpwRGlzYXNzb2NSZXE7Ci0Jc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEgRGlzYXNzb2NIZHI7Ci0Jc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEgKiBwRGlzYXNzb2NIZHI7Ci0JdTggKnBPdXRCdWZmZXIgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgRnJhbWVMZW4gPSAwOwotCWludCBOU3RhdHVzOwotCUJPT0xFQU4gVGltZXJDYW5jZWxsZWQ7Ci0JdW5zaWduZWQgbG9uZyBUaW1lb3V0ID0gNTAwOwotCXUxNiBTdGF0dXM7Ci0KLQkvKiBza2lwIHNhbml0eSBjaGVjayAqLwotCXBEaXNhc3NvY1JlcSA9IChzdHJ1Y3QgcnRfbWxtZV9kaXNhc3NvY19yZXEgKikoRWxlbS0+TXNnKTsKLQotCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7CS8qR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkgKi8KLQlpZiAoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiQVNTT0MgLSBNbG1lRGlzYXNzb2NSZXFBY3Rpb24oKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkXG4iKSk7Ci0JCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKLQkJU3RhdHVzID0gTUxNRV9GQUlMX05PX1JFU09VUkNFOwotCQlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfRElTQVNTT0NfQ09ORiwgMiwKLQkJCSAgICAmU3RhdHVzKTsKLQkJcmV0dXJuOwotCX0KLQotCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkRpc2Fzc29jVGltZXIsICZUaW1lckNhbmNlbGxlZCk7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJKCJBU1NPQyAtIFNlbmQgRElTQVNTT0MgcmVxdWVzdFtCU1NJRDo6JXBNIChSZWFzb249JWQpXG4iLAotCQkJcERpc2Fzc29jUmVxLT5BZGRyLCBwRGlzYXNzb2NSZXEtPlJlYXNvbikpOwotCU1ndE1hY0hlYWRlckluaXQocEFkLCAmRGlzYXNzb2NIZHIsIFNVQlRZUEVfRElTQVNTT0MsIDAsIHBEaXNhc3NvY1JlcS0+QWRkciwgcERpc2Fzc29jUmVxLT5BZGRyKTsJLyogcGF0Y2ggcGVhcCB0dGxzIHN3aXRjaGluZyBpc3N1ZSAqLwotCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICZGcmFtZUxlbiwKLQkJCSAgc2l6ZW9mKHN0cnVjdCBydF9oZWFkZXJfODAyXzExKSwgJkRpc2Fzc29jSGRyLAotCQkJICAyLCAmcERpc2Fzc29jUmVxLT5SZWFzb24sIEVORF9PRl9BUkdTKTsKLQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKLQotCS8qIFRvIHBhdGNoIEluc3RhbmNlIGFuZCBCdWZmYWxvKE4pIEFQICovCi0JLyogRHJpdmVyIGhhcyB0byBzZW5kIGRlYXV0aCB0byBJbnN0YW5jZSBBUCwgYnV0IEJ1ZmZhbG8oTikgbmVlZHMgdG8gc2VuZCBkaXNhc3NvYyB0byByZXNldCBBdXRoZW50aWNhdG9yJ3Mgc3RhdGUgbWFjaGluZSAqLwotCS8qIFRoZXJlZm9yZSwgd2Ugc2VuZCBib3RoIG9mIHRoZW0uICovCi0JcERpc2Fzc29jSGRyID0gKHN0cnVjdCBydF9oZWFkZXJfODAyXzExICopIHBPdXRCdWZmZXI7Ci0JcERpc2Fzc29jSGRyLT5GQy5TdWJUeXBlID0gU1VCVFlQRV9ERUFVVEg7Ci0JTWluaXBvcnRNTVJlcXVlc3QocEFkLCAwLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7Ci0KLQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOwotCi0JcEFkLT5TdGFDZmcuRGlzYXNzb2NSZWFzb24gPSBSRUFTT05fRElTQVNTT0NfU1RBX0xFQVZJTkc7Ci0JQ09QWV9NQUNfQUREUihwQWQtPlN0YUNmZy5EaXNhc3NvY1N0YSwgcERpc2Fzc29jUmVxLT5BZGRyKTsKLQotCVJUTVBTZXRUaW1lcigmcEFkLT5NbG1lQXV4LkRpc2Fzc29jVGltZXIsIFRpbWVvdXQpOwkvKiBpbiBtU2VjICovCi0JcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUgPSBESVNBU1NPQ19XQUlUX1JTUDsKLQotCVJ0bXBPU1dyaWVsZXNzRXZlbnRTZW5kKHBBZCwgU0lPQ0dJV0FQLCAtMSwgTlVMTCwgTlVMTCwgMCk7Ci0KLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlwZWVyIHNlbmRzIGFzc29jIHJzcCBiYWNrCi0JUGFyYW1ldGVyczoKLQkJRWxtZSAtIE1MTUUgbWVzc2FnZSBjb250YWluaW5nIHRoZSByZWNlaXZlZCBmcmFtZQotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi12b2lkIFBlZXJBc3NvY1JzcEFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pCi17Ci0JdTE2IENhcGFiaWxpdHlJbmZvLCBTdGF0dXMsIEFpZDsKLQl1OCBTdXBSYXRlW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXSwgU3VwUmF0ZUxlbjsKLQl1OCBFeHRSYXRlW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXSwgRXh0UmF0ZUxlbjsKLQl1OCBBZGRyMltNQUNfQUREUl9MRU5dOwotCUJPT0xFQU4gVGltZXJDYW5jZWxsZWQ7Ci0JdTggQ2tpcEZsYWc7Ci0Jc3RydWN0IHJ0X2VkY2FfcGFybSBFZGNhUGFybTsKLQlzdHJ1Y3QgcnRfaHRfY2FwYWJpbGl0eV9pZSBIdENhcGFiaWxpdHk7Ci0Jc3RydWN0IHJ0X2FkZF9odF9pbmZvX2llIEFkZEh0SW5mbzsJLyogQVAgbWlnaHQgdXNlIHRoaXMgYWRkaXRpb25hbCBodCBpbmZvIElFICovCi0JdTggSHRDYXBhYmlsaXR5TGVuID0gMDsKLQl1OCBBZGRIdEluZm9MZW47Ci0JdTggTmV3RXh0Q2hhbm5lbE9mZnNldCA9IDB4ZmY7Ci0KLQlpZiAoUGVlckFzc29jUnNwU2FuaXR5Ci0JICAgIChwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuLCBBZGRyMiwgJkNhcGFiaWxpdHlJbmZvLCAmU3RhdHVzLAotCSAgICAgJkFpZCwgU3VwUmF0ZSwgJlN1cFJhdGVMZW4sIEV4dFJhdGUsICZFeHRSYXRlTGVuLCAmSHRDYXBhYmlsaXR5LAotCSAgICAgJkFkZEh0SW5mbywgJkh0Q2FwYWJpbGl0eUxlbiwgJkFkZEh0SW5mb0xlbiwgJk5ld0V4dENoYW5uZWxPZmZzZXQsCi0JICAgICAmRWRjYVBhcm0sICZDa2lwRmxhZykpIHsKLQkJLyogVGhlIGZyYW1lIGlzIGZvciBtZSA/ICovCi0JCWlmIChNQUNfQUREUl9FUVVBTChBZGRyMiwgcEFkLT5NbG1lQXV4LkJzc2lkKSkgewotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiUGVlckFzc29jUnNwQWN0aW9uKCk6QVNTT0MgLSByZWNlaXZlIEFTU09DX1JTUCB0byBtZSAoc3RhdHVzPSVkKVxuIiwKLQkJCQkgIFN0YXR1cykpOwotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiUGVlckFzc29jUnNwQWN0aW9uKCk6TWFjVGFibGUgWyVkXS5BTXNkdVNpemUgPSAlZC4gQ2xpZW50U3RhdHVzRmxhZ3MgPSAweCVseCBcbiIsCi0JCQkJICBFbGVtLT5XY2lkLAotCQkJCSAgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5BTXNkdVNpemUsCi0JCQkJICBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLgotCQkJCSAgQ2xpZW50U3RhdHVzRmxhZ3MpKTsKLQkJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkFzc29jVGltZXIsCi0JCQkJCSZUaW1lckNhbmNlbGxlZCk7Ci0KLQkJCWlmIChTdGF0dXMgPT0gTUxNRV9TVUNDRVNTKSB7Ci0JCQkJdTggTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcyA9IDA7Ci0JCQkJdTggaWR4OwotCi0JCQkJLyogc3VwcG9ydGVkIHJhdGVzIGFycmF5IG1heSBub3QgYmUgc29ydGVkLiBzb3J0IGl0IGFuZCBmaW5kIHRoZSBtYXhpbXVtIHJhdGUgKi8KLQkJCQlmb3IgKGlkeCA9IDA7IGlkeCA8IFN1cFJhdGVMZW47IGlkeCsrKSB7Ci0JCQkJCWlmIChNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzIDwKLQkJCQkJICAgIChTdXBSYXRlW2lkeF0gJiAweDdmKSkKLQkJCQkJCU1heFN1cHBvcnRlZFJhdGVJbjUwMEticHMgPQotCQkJCQkJICAgIFN1cFJhdGVbaWR4XSAmIDB4N2Y7Ci0JCQkJfQotCi0JCQkJZm9yIChpZHggPSAwOyBpZHggPCBFeHRSYXRlTGVuOyBpZHgrKykgewotCQkJCQlpZiAoTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcyA8Ci0JCQkJCSAgICAoRXh0UmF0ZVtpZHhdICYgMHg3ZikpCi0JCQkJCQlNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzID0KLQkJCQkJCSAgICBFeHRSYXRlW2lkeF0gJiAweDdmOwotCQkJCX0KLQkJCQkvKiBnbyB0byBwcm9jZWR1cmUgbGlzdGVkIG9uIHBhZ2UgMzc2ICovCi0JCQkJQXNzb2NQb3N0UHJvYyhwQWQsIEFkZHIyLCBDYXBhYmlsaXR5SW5mbywgQWlkLAotCQkJCQkgICAgICBTdXBSYXRlLCBTdXBSYXRlTGVuLCBFeHRSYXRlLAotCQkJCQkgICAgICBFeHRSYXRlTGVuLCAmRWRjYVBhcm0sCi0JCQkJCSAgICAgICZIdENhcGFiaWxpdHksIEh0Q2FwYWJpbGl0eUxlbiwKLQkJCQkJICAgICAgJkFkZEh0SW5mbyk7Ci0KLQkJCQlTdGFBZGRNYWNUYWJsZUVudHJ5KHBBZCwKLQkJCQkJCSAgICAmcEFkLT5NYWNUYWIuCi0JCQkJCQkgICAgQ29udGVudFtCU1NJRF9XQ0lEXSwKLQkJCQkJCSAgICBNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzLAotCQkJCQkJICAgICZIdENhcGFiaWxpdHksCi0JCQkJCQkgICAgSHRDYXBhYmlsaXR5TGVuLCAmQWRkSHRJbmZvLAotCQkJCQkJICAgIEFkZEh0SW5mb0xlbiwKLQkJCQkJCSAgICBDYXBhYmlsaXR5SW5mbyk7Ci0JCQl9Ci0JCQlwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSA9IEFTU09DX0lETEU7Ci0JCQlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLAotCQkJCSAgICBNVDJfQVNTT0NfQ09ORiwgMiwgJlN0YXR1cyk7Ci0JCX0KLQl9IGVsc2UgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIkFTU09DIC0gUGVlckFzc29jUnNwQWN0aW9uKCkgc2FuaXR5IGNoZWNrIGZhaWxcbiIpKTsKLQl9Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJcGVlciBzZW5kcyByZWFzc29jIHJzcAotCVBhcmFtZXRyczoKLQkJRWxlbSAtIE1MTUUgbWVzc2FnZSBjbnRhaW5pbmcgdGhlIHJlY2VpdmVkIGZyYW1lCi0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgUGVlclJlYXNzb2NSc3BBY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKQotewotCXUxNiBDYXBhYmlsaXR5SW5mbzsKLQl1MTYgU3RhdHVzOwotCXUxNiBBaWQ7Ci0JdTggU3VwUmF0ZVtNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU10sIFN1cFJhdGVMZW47Ci0JdTggRXh0UmF0ZVtNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU10sIEV4dFJhdGVMZW47Ci0JdTggQWRkcjJbTUFDX0FERFJfTEVOXTsKLQl1OCBDa2lwRmxhZzsKLQlCT09MRUFOIFRpbWVyQ2FuY2VsbGVkOwotCXN0cnVjdCBydF9lZGNhX3Bhcm0gRWRjYVBhcm07Ci0Jc3RydWN0IHJ0X2h0X2NhcGFiaWxpdHlfaWUgSHRDYXBhYmlsaXR5OwotCXN0cnVjdCBydF9hZGRfaHRfaW5mb19pZSBBZGRIdEluZm87CS8qIEFQIG1pZ2h0IHVzZSB0aGlzIGFkZGl0aW9uYWwgaHQgaW5mbyBJRSAqLwotCXU4IEh0Q2FwYWJpbGl0eUxlbjsKLQl1OCBBZGRIdEluZm9MZW47Ci0JdTggTmV3RXh0Q2hhbm5lbE9mZnNldCA9IDB4ZmY7Ci0KLQlpZiAoUGVlckFzc29jUnNwU2FuaXR5Ci0JICAgIChwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuLCBBZGRyMiwgJkNhcGFiaWxpdHlJbmZvLCAmU3RhdHVzLAotCSAgICAgJkFpZCwgU3VwUmF0ZSwgJlN1cFJhdGVMZW4sIEV4dFJhdGUsICZFeHRSYXRlTGVuLCAmSHRDYXBhYmlsaXR5LAotCSAgICAgJkFkZEh0SW5mbywgJkh0Q2FwYWJpbGl0eUxlbiwgJkFkZEh0SW5mb0xlbiwgJk5ld0V4dENoYW5uZWxPZmZzZXQsCi0JICAgICAmRWRjYVBhcm0sICZDa2lwRmxhZykpIHsKLQkJaWYgKE1BQ19BRERSX0VRVUFMKEFkZHIyLCBwQWQtPk1sbWVBdXguQnNzaWQpKQkvKiBUaGUgZnJhbWUgaXMgZm9yIG1lID8gKi8KLQkJewotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiQVNTT0MgLSByZWNlaXZlIFJFQVNTT0NfUlNQIHRvIG1lIChzdGF0dXM9JWQpXG4iLAotCQkJCSAgU3RhdHVzKSk7Ci0JCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5SZWFzc29jVGltZXIsCi0JCQkJCSZUaW1lckNhbmNlbGxlZCk7Ci0KLQkJCWlmIChTdGF0dXMgPT0gTUxNRV9TVUNDRVNTKSB7Ci0JCQkJLyogZ28gdG8gcHJvY2VkdXJlIGxpc3RlZCBvbiBwYWdlIDM3NiAqLwotCQkJCUFzc29jUG9zdFByb2MocEFkLCBBZGRyMiwgQ2FwYWJpbGl0eUluZm8sIEFpZCwKLQkJCQkJICAgICAgU3VwUmF0ZSwgU3VwUmF0ZUxlbiwgRXh0UmF0ZSwKLQkJCQkJICAgICAgRXh0UmF0ZUxlbiwgJkVkY2FQYXJtLAotCQkJCQkgICAgICAmSHRDYXBhYmlsaXR5LCBIdENhcGFiaWxpdHlMZW4sCi0JCQkJCSAgICAgICZBZGRIdEluZm8pOwotCi0JCQkJewotCQkJCQl3ZXh0X25vdGlmeV9ldmVudF9hc3NvYyhwQWQpOwotCQkJCQlSdG1wT1NXcmllbGVzc0V2ZW50U2VuZChwQWQsIFNJT0NHSVdBUCwKLQkJCQkJCQkJLTEsCi0JCQkJCQkJCSZwQWQtPk1sbWVBdXguCi0JCQkJCQkJCUJzc2lkWzBdLCBOVUxMLAotCQkJCQkJCQkwKTsKLQkJCQl9Ci0KLQkJCX0KLQkJCS8qIENraXBGbGFnIGlzIG5vIHVzZSBmb3IgcmVhc3NvY2lhdGUgKi8KLQkJCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKLQkJCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsCi0JCQkJICAgIE1UMl9SRUFTU09DX0NPTkYsIDIsICZTdGF0dXMpOwotCQl9Ci0JfSBlbHNlIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJBU1NPQyAtIFBlZXJSZWFzc29jUnNwQWN0aW9uKCkgc2FuaXR5IGNoZWNrIGZhaWxcbiIpKTsKLQl9Ci0KLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlwcm9jZWR1cmVzIG9uIElFRUUgODAyLjExLzE5OTkgcC4zNzYKLQlQYXJhbWV0cnM6Ci0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgQXNzb2NQb3N0UHJvYyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHU4ICpwQWRkcjIsIHUxNiBDYXBhYmlsaXR5SW5mbywgdTE2IEFpZCwgdTggU3VwUmF0ZVtdLCB1OCBTdXBSYXRlTGVuLCB1OCBFeHRSYXRlW10sIHU4IEV4dFJhdGVMZW4sIHN0cnVjdCBydF9lZGNhX3Bhcm0gKnBFZGNhUGFybSwgc3RydWN0IHJ0X2h0X2NhcGFiaWxpdHlfaWUgKiBwSHRDYXBhYmlsaXR5LCB1OCBIdENhcGFiaWxpdHlMZW4sIHN0cnVjdCBydF9hZGRfaHRfaW5mb19pZSAqIHBBZGRIdEluZm8pCS8qIEFQIG1pZ2h0IHVzZSB0aGlzIGFkZGl0aW9uYWwgaHQgaW5mbyBJRSAqLwotewotCXVuc2lnbmVkIGxvbmcgSWR4OwotCi0JcEFkLT5NbG1lQXV4LkJzc1R5cGUgPSBCU1NfSU5GUkE7Ci0JQ09QWV9NQUNfQUREUihwQWQtPk1sbWVBdXguQnNzaWQsIHBBZGRyMik7Ci0JcEFkLT5NbG1lQXV4LkFpZCA9IEFpZDsKLQlwQWQtPk1sbWVBdXguQ2FwYWJpbGl0eUluZm8gPQotCSAgICBDYXBhYmlsaXR5SW5mbyAmIFNVUFBPUlRFRF9DQVBBQklMSVRZX0lORk87Ci0KLQkvKiBTb21lIEhUIEFQIG1pZ2h0IGxvc3QgV01NIElFLiBXZSBhZGQgV01NIG91cnNlbHZlcy4gYmVjYXVzZSBIVCByZXF1aXJlcyBRb1Mgb24uICovCi0JaWYgKChIdENhcGFiaWxpdHlMZW4gPiAwKSAmJiAocEVkY2FQYXJtLT5iVmFsaWQgPT0gRkFMU0UpKSB7Ci0JCXBFZGNhUGFybS0+YlZhbGlkID0gVFJVRTsKLQkJcEVkY2FQYXJtLT5BaWZzblswXSA9IDM7Ci0JCXBFZGNhUGFybS0+QWlmc25bMV0gPSA3OwotCQlwRWRjYVBhcm0tPkFpZnNuWzJdID0gMjsKLQkJcEVkY2FQYXJtLT5BaWZzblszXSA9IDI7Ci0KLQkJcEVkY2FQYXJtLT5Dd21pblswXSA9IDQ7Ci0JCXBFZGNhUGFybS0+Q3dtaW5bMV0gPSA0OwotCQlwRWRjYVBhcm0tPkN3bWluWzJdID0gMzsKLQkJcEVkY2FQYXJtLT5Dd21pblszXSA9IDI7Ci0KLQkJcEVkY2FQYXJtLT5Dd21heFswXSA9IDEwOwotCQlwRWRjYVBhcm0tPkN3bWF4WzFdID0gMTA7Ci0JCXBFZGNhUGFybS0+Q3dtYXhbMl0gPSA0OwotCQlwRWRjYVBhcm0tPkN3bWF4WzNdID0gMzsKLQotCQlwRWRjYVBhcm0tPlR4b3BbMF0gPSAwOwotCQlwRWRjYVBhcm0tPlR4b3BbMV0gPSAwOwotCQlwRWRjYVBhcm0tPlR4b3BbMl0gPSA5NjsKLQkJcEVkY2FQYXJtLT5UeG9wWzNdID0gNDg7Ci0KLQl9Ci0KLQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5NbG1lQXV4LkFQRWRjYVBhcm0sIHBFZGNhUGFybSwgc2l6ZW9mKHN0cnVjdCBydF9lZGNhX3Bhcm0pKTsKLQotCS8qIGZpbHRlciBvdXQgdW4tc3VwcG9ydGVkIHJhdGVzICovCi0JcEFkLT5NbG1lQXV4LlN1cFJhdGVMZW4gPSBTdXBSYXRlTGVuOwotCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TWxtZUF1eC5TdXBSYXRlLCBTdXBSYXRlLCBTdXBSYXRlTGVuKTsKLQlSVE1QQ2hlY2tSYXRlcyhwQWQsIHBBZC0+TWxtZUF1eC5TdXBSYXRlLCAmcEFkLT5NbG1lQXV4LlN1cFJhdGVMZW4pOwotCi0JLyogZmlsdGVyIG91dCB1bi1zdXBwb3J0ZWQgcmF0ZXMgKi8KLQlwQWQtPk1sbWVBdXguRXh0UmF0ZUxlbiA9IEV4dFJhdGVMZW47Ci0JTmRpc01vdmVNZW1vcnkocEFkLT5NbG1lQXV4LkV4dFJhdGUsIEV4dFJhdGUsIEV4dFJhdGVMZW4pOwotCVJUTVBDaGVja1JhdGVzKHBBZCwgcEFkLT5NbG1lQXV4LkV4dFJhdGUsICZwQWQtPk1sbWVBdXguRXh0UmF0ZUxlbik7Ci0KLQlpZiAoSHRDYXBhYmlsaXR5TGVuID4gMCkgewotCQlSVE1QQ2hlY2tIdChwQWQsIEJTU0lEX1dDSUQsIHBIdENhcGFiaWxpdHksIHBBZGRIdEluZm8pOwotCX0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJICgiQXNzb2NQb3N0UHJvYz09PT4gIEFQLkFNc2R1U2l6ZSA9ICVkLiBDbGllbnRTdGF0dXNGbGFncyA9IDB4JWx4IFxuIiwKLQkJICBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkFNc2R1U2l6ZSwKLQkJICBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkNsaWVudFN0YXR1c0ZsYWdzKSk7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJICgiQXNzb2NQb3N0UHJvYz09PT4gICAgKE1tcHM9JWQsIEFtc2R1U2l6ZT0lZCwgKVxuIiwKLQkJICBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLk1tcHNNb2RlLAotCQkgIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQU1zZHVTaXplKSk7Ci0KLQkvKiBTZXQgTmV3IFdQQSBpbmZvcm1hdGlvbiAqLwotCUlkeCA9IEJzc1RhYmxlU2VhcmNoKCZwQWQtPlNjYW5UYWIsIHBBZGRyMiwgcEFkLT5NbG1lQXV4LkNoYW5uZWwpOwotCWlmIChJZHggPT0gQlNTX05PVF9GT1VORCkgewotCQlEQkdQUklOVF9FUlIoIkFTU09DIC0gQ2FuJ3QgZmluZCBCU1MgYWZ0ZXIgcmVjZWl2aW5nIEFzc29jIHJlc3BvbnNlXG4iKTsKLQl9IGVsc2UgewotCQkvKiBJbml0IHZhcmlhYmxlICovCi0JCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uUlNOSUVfTGVuID0gMDsKLQkJTmRpc1plcm9NZW1vcnkocEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5SU05fSUUsCi0JCQkgICAgICAgTUFYX0xFTl9PRl9SU05JRSk7Ci0KLQkJLyogU3RvcmUgYXBwcm9wcmlhdGUgUlNOX0lFIGZvciBXUEEgU00gbmVnb3RpYXRpb24gbGF0ZXIgKi8KLQkJaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpCi0JCSAgICAmJiAocEFkLT5TY2FuVGFiLkJzc0VudHJ5W0lkeF0uVmFySUVMZW4gIT0gMCkpIHsKLQkJCXU4ICpwVklFOwotCQkJdTE2IGxlbjsKLQkJCXN0cnVjdCBydF9laWQgKiBwRWlkOwotCi0JCQlwVklFID0gcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0lkeF0uVmFySUVzOwotCQkJbGVuID0gcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0lkeF0uVmFySUVMZW47Ci0JCQkvKktIIG5lZWQgdG8gY2hlY2sgYWdhaW4gKi8KLQkJCS8qIERvbid0IGFsbG93IHRvIGdvIHRvIHNsZWVwIG1vZGUgaWYgYXV0aG1vZGUgaXMgV1BBLXJlbGF0ZWQuICovCi0JCQkvKlRoaXMgY2FuIG1ha2UgQXV0aGVudGljYXRpb24gcHJvY2VzcyBtb3JlIHNtb290aGx5LiAqLwotCQkJUlRNUF9DTEVBUl9QU0ZMQUcocEFkLCBmUlRNUF9QU19DQU5fR09fU0xFRVApOwotCi0JCQl3aGlsZSAobGVuID4gMCkgewotCQkJCXBFaWQgPSAoc3RydWN0IHJ0X2VpZCAqKSBwVklFOwotCQkJCS8qIEZvciBXUEEvV1BBUFNLICovCi0JCQkJaWYgKChwRWlkLT5FaWQgPT0gSUVfV1BBKQotCQkJCSAgICAmJgotCQkJCSAgICAoTmRpc0VxdWFsTWVtb3J5KHBFaWQtPk9jdGV0LCBXUEFfT1VJLCA0KSkKLQkJCQkgICAgJiYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09Ci0JCQkJCU5kaXM4MDJfMTFBdXRoTW9kZVdQQQotCQkJCQl8fCBwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PQotCQkJCQlOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spKSB7Ci0JCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TWFjVGFiLgotCQkJCQkJICAgICAgIENvbnRlbnRbQlNTSURfV0NJRF0uCi0JCQkJCQkgICAgICAgUlNOX0lFLCBwVklFLAotCQkJCQkJICAgICAgIChwRWlkLT5MZW4gKyAyKSk7Ci0JCQkJCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uCi0JCQkJCSAgICBSU05JRV9MZW4gPSAocEVpZC0+TGVuICsgMik7Ci0JCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkJICgiQXNzb2NQb3N0UHJvYz09PT4gU3RvcmUgUlNOX0lFIGZvciBXUEEgU00gbmVnb3RpYXRpb24gXG4iKSk7Ci0JCQkJfQotCQkJCS8qIEZvciBXUEEyL1dQQTJQU0sgKi8KLQkJCQllbHNlIGlmICgocEVpZC0+RWlkID09IElFX1JTTikKLQkJCQkJICYmCi0JCQkJCSAoTmRpc0VxdWFsTWVtb3J5Ci0JCQkJCSAgKHBFaWQtPk9jdGV0ICsgMiwgUlNOX09VSSwgMykpCi0JCQkJCSAmJiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0KLQkJCQkJICAgICBOZGlzODAyXzExQXV0aE1vZGVXUEEyCi0JCQkJCSAgICAgfHwgcEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0KLQkJCQkJICAgICBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLKSkgewotCQkJCQlOZGlzTW92ZU1lbW9yeShwQWQtPk1hY1RhYi4KLQkJCQkJCSAgICAgICBDb250ZW50W0JTU0lEX1dDSURdLgotCQkJCQkJICAgICAgIFJTTl9JRSwgcFZJRSwKLQkJCQkJCSAgICAgICAocEVpZC0+TGVuICsgMikpOwotCQkJCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLgotCQkJCQkgICAgUlNOSUVfTGVuID0gKHBFaWQtPkxlbiArIDIpOwotCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkJCSAoIkFzc29jUG9zdFByb2M9PT0+IFN0b3JlIFJTTl9JRSBmb3IgV1BBMiBTTSBuZWdvdGlhdGlvbiBcbiIpKTsKLQkJCQl9Ci0KLQkJCQlwVklFICs9IChwRWlkLT5MZW4gKyAyKTsKLQkJCQlsZW4gLT0gKHBFaWQtPkxlbiArIDIpOwotCQkJfQotCi0JCX0KLQotCQlpZiAocEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5SU05JRV9MZW4gPT0gMCkgewotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiQXNzb2NQb3N0UHJvYz09PT4gbm8gUlNOX0lFIFxuIikpOwotCQl9IGVsc2UgewotCQkJaGV4X2R1bXAoIlJTTl9JRSIsCi0JCQkJIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uUlNOX0lFLAotCQkJCSBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlJTTklFX0xlbik7Ci0JCX0KLQl9Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJbGVmdCBwYXJ0IG9mIElFRUUgODAyLjExLzE5OTkgcC4zNzQKLQlQYXJhbWV0ZXJzOgotCQlFbGVtIC0gTUxNRSBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHJlY2VpdmVkIGZyYW1lCi0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgUGVlckRpc2Fzc29jQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSkKLXsKLQl1OCBBZGRyMltNQUNfQUREUl9MRU5dOwotCXUxNiBSZWFzb247Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBU1NPQyAtIFBlZXJEaXNhc3NvY0FjdGlvbigpXG4iKSk7Ci0JaWYgKFBlZXJEaXNhc3NvY1Nhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuLCBBZGRyMiwgJlJlYXNvbikpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJBU1NPQyAtIFBlZXJEaXNhc3NvY0FjdGlvbigpIFJlYXNvbiA9ICVkXG4iLAotCQkJICBSZWFzb24pKTsKLQkJaWYgKElORlJBX09OKHBBZCkKLQkJICAgICYmIE1BQ19BRERSX0VRVUFMKHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBBZGRyMikpIHsKLQotCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50KSB7Ci0JCQkJUlRNUFNlbmRXaXJlbGVzc0V2ZW50KHBBZCwKLQkJCQkJCSAgICAgIElXX0RJU0FTU09DX0VWRU5UX0ZMQUcsCi0JCQkJCQkgICAgICBwQWQtPk1hY1RhYi4KLQkJCQkJCSAgICAgIENvbnRlbnRbQlNTSURfV0NJRF0uQWRkciwKLQkJCQkJCSAgICAgIEJTUzAsIDApOwotCQkJfQotCi0JCQlMaW5rRG93bihwQWQsIFRSVUUpOwotCQkJcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUgPSBBU1NPQ19JRExFOwotCi0JCQlSdG1wT1NXcmllbGVzc0V2ZW50U2VuZChwQWQsIFNJT0NHSVdBUCwgLTEsIE5VTEwsIE5VTEwsCi0JCQkJCQkwKTsKLQkJfQotCX0gZWxzZSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiQVNTT0MgLSBQZWVyRGlzYXNzb2NBY3Rpb24oKSBzYW5pdHkgY2hlY2sgZmFpbFxuIikpOwotCX0KLQotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JCXdoYXQgdGhlIHN0YXRlIG1hY2hpbmUgd2lsbCBkbyBhZnRlciBhc3NvYyB0aW1lb3V0Ci0JUGFyYW1ldGVyczoKLQkJRWxtZSAtCi0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgQXNzb2NUaW1lb3V0QWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSkKLXsKLQl1MTYgU3RhdHVzOwotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFTU09DIC0gQXNzb2NUaW1lb3V0QWN0aW9uXG4iKSk7Ci0JcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUgPSBBU1NPQ19JRExFOwotCVN0YXR1cyA9IE1MTUVfUkVKX1RJTUVPVVQ7Ci0JTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX0FTU09DX0NPTkYsIDIsICZTdGF0dXMpOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JCXdoYXQgdGhlIHN0YXRlIG1hY2hpbmUgd2lsbCBkbyBhZnRlciByZWFzc29jIHRpbWVvdXQKLQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotdm9pZCBSZWFzc29jVGltZW91dEFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pCi17Ci0JdTE2IFN0YXR1czsKLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBU1NPQyAtIFJlYXNzb2NUaW1lb3V0QWN0aW9uXG4iKSk7Ci0JcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUgPSBBU1NPQ19JRExFOwotCVN0YXR1cyA9IE1MTUVfUkVKX1RJTUVPVVQ7Ci0JTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX1JFQVNTT0NfQ09ORiwgMiwgJlN0YXR1cyk7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJd2hhdCB0aGUgc3RhdGUgbWFjaGluZSB3aWxsIGRvIGFmdGVyIGRpc2Fzc29jIHRpbWVvdXQKLQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotdm9pZCBEaXNhc3NvY1RpbWVvdXRBY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKQotewotCXUxNiBTdGF0dXM7Ci0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVNTT0MgLSBEaXNhc3NvY1RpbWVvdXRBY3Rpb25cbiIpKTsKLQlwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSA9IEFTU09DX0lETEU7Ci0JU3RhdHVzID0gTUxNRV9TVUNDRVNTOwotCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9ESVNBU1NPQ19DT05GLCAyLAotCQkgICAgJlN0YXR1cyk7Ci19Ci0KLXZvaWQgSW52YWxpZFN0YXRlV2hlbkFzc29jKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSkKLXsKLQl1MTYgU3RhdHVzOwotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCJBU1NPQyAtIEludmFsaWRTdGF0ZVdoZW5Bc3NvYyhzdGF0ZT0lbGQpLCByZXNldCBBU1NPQyBzdGF0ZSBtYWNoaW5lXG4iLAotCQkgIHBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlKSk7Ci0JcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUgPSBBU1NPQ19JRExFOwotCVN0YXR1cyA9IE1MTUVfU1RBVEVfTUFDSElORV9SRUpFQ1Q7Ci0JTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX0FTU09DX0NPTkYsIDIsICZTdGF0dXMpOwotfQotCi12b2lkIEludmFsaWRTdGF0ZVdoZW5SZWFzc29jKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSkKLXsKLQl1MTYgU3RhdHVzOwotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCJBU1NPQyAtIEludmFsaWRTdGF0ZVdoZW5SZWFzc29jKHN0YXRlPSVsZCksIHJlc2V0IEFTU09DIHN0YXRlIG1hY2hpbmVcbiIsCi0JCSAgcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUpKTsKLQlwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSA9IEFTU09DX0lETEU7Ci0JU3RhdHVzID0gTUxNRV9TVEFURV9NQUNISU5FX1JFSkVDVDsKLQlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfUkVBU1NPQ19DT05GLCAyLCAmU3RhdHVzKTsKLX0KLQotdm9pZCBJbnZhbGlkU3RhdGVXaGVuRGlzYXNzb2NpYXRlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkgIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pCi17Ci0JdTE2IFN0YXR1czsKLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJICgiQVNTT0MgLSBJbnZhbGlkU3RhdGVXaGVuRGlzYXNzb2Moc3RhdGU9JWxkKSwgcmVzZXQgQVNTT0Mgc3RhdGUgbWFjaGluZVxuIiwKLQkJICBwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSkpOwotCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKLQlTdGF0dXMgPSBNTE1FX1NUQVRFX01BQ0hJTkVfUkVKRUNUOwotCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9ESVNBU1NPQ19DT05GLCAyLAotCQkgICAgJlN0YXR1cyk7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJcmlnaHQgcGFydCBvZiBJRUVFIDgwMi4xMS8xOTk5IHBhZ2UgMzc0Ci0JTm90ZToKLQkJVGhpcyBldmVudCBzaG91bGQgbmV2ZXIgY2F1c2UgQVNTT0Mgc3RhdGUgbWFjaGluZSBwZXJmb3JtIHN0YXRlCi0JCXRyYW5zaXRpb24sIGFuZCBoYXMgbm8gcmVsYXRpb25zaGlwIHdpdGggQ05UTCBtYWNoaW5lLiBTbyB3ZSBzZXBhcmF0ZQotCQl0aGlzIHJvdXRpbmUgYXMgYSBzZXJ2aWNlIG91dHNpZGUgb2YgQVNTT0Mgc3RhdGUgdHJhbnNpdGlvbiB0YWJsZS4KLQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotdm9pZCBDbHMzZXJyQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggKnBBZGRyKQotewotCXN0cnVjdCBydF9oZWFkZXJfODAyXzExIERpc2Fzc29jSGRyOwotCXN0cnVjdCBydF9oZWFkZXJfODAyXzExICogcERpc2Fzc29jSGRyOwotCXU4ICpwT3V0QnVmZmVyID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIEZyYW1lTGVuID0gMDsKLQlpbnQgTlN0YXR1czsKLQl1MTYgUmVhc29uID0gUkVBU09OX0NMUzNFUlI7Ci0KLQlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOwkvKkdldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5ICovCi0JaWYgKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKLQkJcmV0dXJuOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIkFTU09DIC0gQ2xhc3MgMyBFcnJvciwgU2VuZCBESVNBU1NPQyBmcmFtZVxuIikpOwotCU1ndE1hY0hlYWRlckluaXQocEFkLCAmRGlzYXNzb2NIZHIsIFNVQlRZUEVfRElTQVNTT0MsIDAsIHBBZGRyLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CS8qIHBhdGNoIHBlYXAgdHRscyBzd2l0Y2hpbmcgaXNzdWUgKi8KLQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAmRnJhbWVMZW4sCi0JCQkgIHNpemVvZihzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSksICZEaXNhc3NvY0hkciwKLQkJCSAgMiwgJlJlYXNvbiwgRU5EX09GX0FSR1MpOwotCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgMCwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOwotCi0JLyogVG8gcGF0Y2ggSW5zdGFuY2UgYW5kIEJ1ZmZhbG8oTikgQVAgKi8KLQkvKiBEcml2ZXIgaGFzIHRvIHNlbmQgZGVhdXRoIHRvIEluc3RhbmNlIEFQLCBidXQgQnVmZmFsbyhOKSBuZWVkcyB0byBzZW5kIGRpc2Fzc29jIHRvIHJlc2V0IEF1dGhlbnRpY2F0b3IncyBzdGF0ZSBtYWNoaW5lICovCi0JLyogVGhlcmVmb3JlLCB3ZSBzZW5kIGJvdGggb2YgdGhlbS4gKi8KLQlwRGlzYXNzb2NIZHIgPSAoc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEgKikgcE91dEJ1ZmZlcjsKLQlwRGlzYXNzb2NIZHItPkZDLlN1YlR5cGUgPSBTVUJUWVBFX0RFQVVUSDsKLQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKLQotCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7Ci0KLQlwQWQtPlN0YUNmZy5EaXNhc3NvY1JlYXNvbiA9IFJFQVNPTl9DTFMzRVJSOwotCUNPUFlfTUFDX0FERFIocEFkLT5TdGFDZmcuRGlzYXNzb2NTdGEsIHBBZGRyKTsKLX0KLQotaW50IHdleHRfbm90aWZ5X2V2ZW50X2Fzc29jKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQljaGFyIGN1c3RvbVtJV19DVVNUT01fTUFYXSA9IHsgMCB9OwotCi0JaWYgKHBBZC0+U3RhQ2ZnLlJlcVZhcklFTGVuIDw9IElXX0NVU1RPTV9NQVgpIHsKLQkJTmRpc01vdmVNZW1vcnkoY3VzdG9tLCBwQWQtPlN0YUNmZy5SZXFWYXJJRXMsCi0JCQkgICAgICAgcEFkLT5TdGFDZmcuUmVxVmFySUVMZW4pOwotCQlSdG1wT1NXcmllbGVzc0V2ZW50U2VuZChwQWQsIElXRVZBU1NPQ1JFUUlFLCAtMSwgTlVMTCwgY3VzdG9tLAotCQkJCQlwQWQtPlN0YUNmZy5SZXFWYXJJRUxlbik7Ci0JfSBlbHNlCi0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgicEFkLT5TdGFDZmcuUmVxVmFySUVMZW4gPiBNQVhfQ1VTVE9NX0xFTlxuIikpOwotCi0JcmV0dXJuIDA7Ci0KLX0KLQotQk9PTEVBTiBTdGFBZGRNYWNUYWJsZUVudHJ5KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICBzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwRW50cnksCi0JCQkgICAgdTggTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcywKLQkJCSAgICBzdHJ1Y3QgcnRfaHRfY2FwYWJpbGl0eV9pZSAqIHBIdENhcGFiaWxpdHksCi0JCQkgICAgdTggSHRDYXBhYmlsaXR5TGVuLAotCQkJICAgIHN0cnVjdCBydF9hZGRfaHRfaW5mb19pZSAqIHBBZGRIdEluZm8sCi0JCQkgICAgdTggQWRkSHRJbmZvTGVuLCB1MTYgQ2FwYWJpbGl0eUluZm8pCi17Ci0JdTggTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfMTE7Ci0KLQlpZiAoQURIT0NfT04ocEFkKSkKLQkJQ0xJRU5UX1NUQVRVU19DTEVBUl9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfV01NX0NBUEFCTEUpOwotCi0Jc3dpdGNoIChNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzKSB7Ci0JY2FzZSAxMDg6Ci0JCU1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzU0OwotCQlicmVhazsKLQljYXNlIDk2OgotCQlNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV80ODsKLQkJYnJlYWs7Ci0JY2FzZSA3MjoKLQkJTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfMzY7Ci0JCWJyZWFrOwotCWNhc2UgNDg6Ci0JCU1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzI0OwotCQlicmVhazsKLQljYXNlIDM2OgotCQlNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xODsKLQkJYnJlYWs7Ci0JY2FzZSAyNDoKLQkJTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfMTI7Ci0JCWJyZWFrOwotCWNhc2UgMTg6Ci0JCU1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzk7Ci0JCWJyZWFrOwotCWNhc2UgMTI6Ci0JCU1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzY7Ci0JCWJyZWFrOwotCWNhc2UgMjI6Ci0JCU1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzExOwotCQlicmVhazsKLQljYXNlIDExOgotCQlNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV81XzU7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfMjsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xMTsKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUcpCi0JICAgICYmIChNYXhTdXBwb3J0ZWRSYXRlIDwgUkFURV9GSVJTVF9PRkRNX1JBVEUpKQotCQlyZXR1cm4gRkFMU0U7Ci0KLQkvKiAxMW4gb25seSAqLwotCWlmICgoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExTl8yXzRHKQotCSAgICAgfHwgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExTl81RykpCi0JICAgICYmIChIdENhcGFiaWxpdHlMZW4gPT0gMCkpCi0JCXJldHVybiBGQUxTRTsKLQotCWlmICghcEVudHJ5KQotCQlyZXR1cm4gRkFMU0U7Ci0KLQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPk1hY1RhYkxvY2spOwotCWlmIChwRW50cnkpIHsKLQkJcEVudHJ5LT5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOwotCQlpZiAoKE1heFN1cHBvcnRlZFJhdGUgPCBSQVRFX0ZJUlNUX09GRE1fUkFURSkgfHwKLQkJICAgIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUIpKSB7Ci0JCQlwRW50cnktPlJhdGVMZW4gPSA0OwotCQkJaWYgKE1heFN1cHBvcnRlZFJhdGUgPj0gUkFURV9GSVJTVF9PRkRNX1JBVEUpCi0JCQkJTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfMTE7Ci0JCX0gZWxzZQotCQkJcEVudHJ5LT5SYXRlTGVuID0gMTI7Ci0KLQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUud29yZCA9IDA7Ci0JCXBFbnRyeS0+TWluSFRQaHlNb2RlLndvcmQgPSAwOwotCQlwRW50cnktPkhUUGh5TW9kZS53b3JkID0gMDsKLQkJcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlID0gTWF4U3VwcG9ydGVkUmF0ZTsKLQkJaWYgKHBFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZSA8IFJBVEVfRklSU1RfT0ZETV9SQVRFKSB7Ci0JCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9DQ0s7Ci0JCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MgPQotCQkJICAgIHBFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZTsKLQkJCXBFbnRyeS0+TWluSFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX0NDSzsKLQkJCXBFbnRyeS0+TWluSFRQaHlNb2RlLmZpZWxkLk1DUyA9Ci0JCQkgICAgcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlOwotCQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfQ0NLOwotCQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTUNTID0gcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlOwotCQl9IGVsc2UgewotCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfT0ZETTsKLQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1DUyA9Ci0JCQkgICAgT2ZkbVJhdGVUb1J4d2lNQ1NbcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlXTsKLQkJCXBFbnRyeS0+TWluSFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX09GRE07Ci0JCQlwRW50cnktPk1pbkhUUGh5TW9kZS5maWVsZC5NQ1MgPQotCQkJICAgIE9mZG1SYXRlVG9SeHdpTUNTW3BFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZV07Ci0JCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9PRkRNOwotCQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTUNTID0KLQkJCSAgICBPZmRtUmF0ZVRvUnh3aU1DU1twRW50cnktPk1heFN1cHBvcnRlZFJhdGVdOwotCQl9Ci0JCXBFbnRyeS0+Q2FwYWJpbGl0eUluZm8gPSBDYXBhYmlsaXR5SW5mbzsKLQkJQ0xJRU5UX1NUQVRVU19DTEVBUl9GTEFHKHBFbnRyeSwKLQkJCQkJIGZDTElFTlRfU1RBVFVTX0FHR1JFR0FUSU9OX0NBUEFCTEUpOwotCQlDTElFTlRfU1RBVFVTX0NMRUFSX0ZMQUcocEVudHJ5LAotCQkJCQkgZkNMSUVOVF9TVEFUVVNfUElHR1lCQUNLX0NBUEFCTEUpOwotCX0KLQotCU5kaXNaZXJvTWVtb3J5KCZwRW50cnktPkhUQ2FwYWJpbGl0eSwgc2l6ZW9mKHBFbnRyeS0+SFRDYXBhYmlsaXR5KSk7Ci0JLyogSWYgdGhpcyBFbnRyeSBzdXBwb3J0cyA4MDIuMTFuLCB1cGdyYWRlIHRvIEhUIHJhdGUuICovCi0JaWYgKChIdENhcGFiaWxpdHlMZW4gIT0gMCkKLQkgICAgJiYgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPj0gUEhZXzExQUJHTl9NSVhFRCkpIHsKLQkJdTggaiwgYml0bWFzazsJLyprLGJpdG1hc2s7ICovCi0JCWNoYXIgaTsKLQotCQlpZiAoQURIT0NfT04ocEFkKSkKLQkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LAotCQkJCQkgICAgICAgZkNMSUVOVF9TVEFUVVNfV01NX0NBUEFCTEUpOwotCQlpZiAoKHBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5HRikKLQkJICAgICYmIChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuR0YpKSB7Ci0JCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9IVEdSRUVORklFTEQ7Ci0JCX0gZWxzZSB7Ci0JCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9IVE1JWDsKLQkJCXBBZC0+TWFjVGFiLmZBbnlTdGF0aW9uTm9uR0YgPSBUUlVFOwotCQkJcEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLkFkZEh0SW5mbzIuTm9uR2ZQcmVzZW50ID0gMTsKLQkJfQotCi0JCWlmICgocEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLkNoYW5uZWxXaWR0aCkgJiYKLQkJICAgIChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQ2hhbm5lbFdpZHRoKSAmJgotCQkgICAgKChwQWQtPlN0YUNmZy5Cc3NUeXBlID09IEJTU19JTkZSQSkKLQkJICAgICB8fCAoKHBBZC0+U3RhQ2ZnLkJzc1R5cGUgPT0gQlNTX0FESE9DKQotCQkJICYmIChwQWRkSHRJbmZvLT5BZGRIdEluZm8uRXh0Q2hhbk9mZnNldCA9PQotCQkJICAgICBwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8uQWRkSHRJbmZvLgotCQkJICAgICBFeHRDaGFuT2Zmc2V0KSkpKSB7Ci0JCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5CVyA9IEJXXzQwOwotCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuU2hvcnRHSSA9Ci0JCQkgICAgKChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuCi0JCQkgICAgICBTaG9ydEdJZm9yNDApICYgKHBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby4KLQkJCQkJICAgICAgIFNob3J0R0lmb3I0MCkpOwotCQl9IGVsc2UgewotCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuQlcgPSBCV18yMDsKLQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLlNob3J0R0kgPQotCQkJICAgICgocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LgotCQkJICAgICAgU2hvcnRHSWZvcjIwKSAmIChwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uCi0JCQkJCSAgICAgICBTaG9ydEdJZm9yMjApKTsKLQkJCXBBZC0+TWFjVGFiLmZBbnlTdGF0aW9uMjBPbmx5ID0gVFJVRTsKLQkJfQotCi0JCS8qIDMqMyAqLwotCQlpZiAocEFkLT5NQUNWZXJzaW9uID49IFJBTElOS18yODgzX1ZFUlNJT04KLQkJICAgICYmIHBBZC0+TUFDVmVyc2lvbiA8IFJBTElOS18zMDcwX1ZFUlNJT04pCi0JCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5UeEJGID0KLQkJCSAgICBwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuVHhCRjsKLQotCQkvKiBmaW5kIG1heCBmaXhlZCByYXRlICovCi0JCWZvciAoaSA9IDIzOyBpID49IDA7IGktLSkJLyogMyozICovCi0JCXsKLQkJCWogPSBpIC8gODsKLQkJCWJpdG1hc2sgPSAoMSA8PCAoaSAtIChqICogOCkpKTsKLQkJCWlmICgocEFkLT5TdGFDZmcuRGVzaXJlZEh0UGh5SW5mby5NQ1NTZXRbal0gJiBiaXRtYXNrKQotCQkJICAgICYmIChwSHRDYXBhYmlsaXR5LT5NQ1NTZXRbal0gJiBiaXRtYXNrKSkgewotCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1DUyA9IGk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAoaSA9PSAwKQotCQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKHBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTICE9IE1DU19BVVRPKSB7Ci0JCQlpZiAocEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPT0gMzIpIHsKLQkJCQkvKiBGaXggTUNTIGFzIEhUIER1cGxpY2F0ZWQgTW9kZSAqLwotCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLkJXID0gMTsKLQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9IVE1JWDsKLQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5TVEJDID0gMDsKLQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5TaG9ydEdJID0gMDsKLQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MgPSAzMjsKLQkJCX0gZWxzZSBpZiAocEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTUNTID4KLQkJCQkgICBwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTUNTKSB7Ci0JCQkJLyogU1RBIHN1cHBvcnRzIGZpeGVkIE1DUyAqLwotCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1DUyA9Ci0JCQkJICAgIHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NQ1M7Ci0JCQl9Ci0JCX0KLQotCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5TVEJDID0KLQkJICAgIChwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uCi0JCSAgICAgUnhTVEJDICYgKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5UeFNUQkMpKTsKLQkJcEVudHJ5LT5NcGR1RGVuc2l0eSA9IHBIdENhcGFiaWxpdHktPkh0Q2FwUGFybS5NcGR1RGVuc2l0eTsKLQkJcEVudHJ5LT5NYXhSQW1wZHVGYWN0b3IgPQotCQkgICAgcEh0Q2FwYWJpbGl0eS0+SHRDYXBQYXJtLk1heFJBbXBkdUZhY3RvcjsKLQkJcEVudHJ5LT5NbXBzTW9kZSA9ICh1OClwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uTWltb1BzOwotCQlwRW50cnktPkFNc2R1U2l6ZSA9ICh1OClwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uQU1zZHVTaXplOwotCQlwRW50cnktPkhUUGh5TW9kZS53b3JkID0gcEVudHJ5LT5NYXhIVFBoeU1vZGUud29yZDsKLQotCQlpZiAocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkFtc2R1RW5hYmxlCi0JCSAgICAmJiAocEFkLT5Db21tb25DZmcuUkVHQkFDYXBhYmlsaXR5LmZpZWxkLkF1dG9CQSA9PSBGQUxTRSkpCi0JCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwKLQkJCQkJICAgICAgIGZDTElFTlRfU1RBVFVTX0FNU0RVX0lOVVNFRCk7Ci0JCWlmIChwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uU2hvcnRHSWZvcjIwKQotCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksCi0JCQkJCSAgICAgICBmQ0xJRU5UX1NUQVRVU19TR0kyMF9DQVBBQkxFKTsKLQkJaWYgKHBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5TaG9ydEdJZm9yNDApCi0JCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwKLQkJCQkJICAgICAgIGZDTElFTlRfU1RBVFVTX1NHSTQwX0NBUEFCTEUpOwotCQlpZiAocEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLlR4U1RCQykKLQkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LAotCQkJCQkgICAgICAgZkNMSUVOVF9TVEFUVVNfVHhTVEJDX0NBUEFCTEUpOwotCQlpZiAocEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLlJ4U1RCQykKLQkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LAotCQkJCQkgICAgICAgZkNMSUVOVF9TVEFUVVNfUnhTVEJDX0NBUEFCTEUpOwotCQlpZiAocEh0Q2FwYWJpbGl0eS0+RXh0SHRDYXBJbmZvLlBsdXNIVEMpCi0JCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwKLQkJCQkJICAgICAgIGZDTElFTlRfU1RBVFVTX0hUQ19DQVBBQkxFKTsKLQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJSZGcKLQkJICAgICYmIHBIdENhcGFiaWxpdHktPkV4dEh0Q2FwSW5mby5SREdTdXBwb3J0KQotCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksCi0JCQkJCSAgICAgICBmQ0xJRU5UX1NUQVRVU19SREdfQ0FQQUJMRSk7Ci0JCWlmIChwSHRDYXBhYmlsaXR5LT5FeHRIdENhcEluZm8uTUNTRmVlZGJhY2sgPT0gMHgwMykKLQkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LAotCQkJCQkgICAgICAgZkNMSUVOVF9TVEFUVVNfTUNTRkVFREJBQ0tfQ0FQQUJMRSk7Ci0JCU5kaXNNb3ZlTWVtb3J5KCZwRW50cnktPkhUQ2FwYWJpbGl0eSwgcEh0Q2FwYWJpbGl0eSwKLQkJCSAgICAgICBIdENhcGFiaWxpdHlMZW4pOwotCX0gZWxzZSB7Ci0JCXBBZC0+TWFjVGFiLmZBbnlTdGF0aW9uSXNMZWdhY3kgPSBUUlVFOwotCX0KLQotCXBFbnRyeS0+SFRQaHlNb2RlLndvcmQgPSBwRW50cnktPk1heEhUUGh5TW9kZS53b3JkOwotCXBFbnRyeS0+Q3VyclR4UmF0ZSA9IHBFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZTsKLQotCS8qIFNldCBhc2ljIGF1dG8gZmFsbCBiYWNrICovCi0JaWYgKHBBZC0+U3RhQ2ZnLmJBdXRvVHhSYXRlU3dpdGNoID09IFRSVUUpIHsKLQkJdTggKnBUYWJsZTsKLQkJdTggVGFibGVTaXplID0gMDsKLQotCQlNbG1lU2VsZWN0VHhSYXRlVGFibGUocEFkLCBwRW50cnksICZwVGFibGUsICZUYWJsZVNpemUsCi0JCQkJICAgICAgJnBFbnRyeS0+Q3VyclR4UmF0ZUluZGV4KTsKLQkJcEVudHJ5LT5iQXV0b1R4UmF0ZVN3aXRjaCA9IFRSVUU7Ci0JfSBlbHNlIHsKLQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NT0RFOwotCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTUNTOwotCQlwRW50cnktPmJBdXRvVHhSYXRlU3dpdGNoID0gRkFMU0U7Ci0KLQkJLyogSWYgdGhlIGxlZ2FjeSBtb2RlIGlzIHNldCwgb3ZlcndyaXRlIHRoZSB0cmFuc21pdCBzZXR0aW5nIG9mIHRoaXMgZW50cnkuICovCi0JCVJUTVBVcGRhdGVMZWdhY3lUeFNldHRpbmcoKHU4KXBBZC0+U3RhQ2ZnLgotCQkJCQkgIERlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuCi0JCQkJCSAgRml4ZWRUeE1vZGUsIHBFbnRyeSk7Ci0JfQotCi0JcEVudHJ5LT5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOwotCXBFbnRyeS0+U3N0ID0gU1NUX0FTU09DOwotCXBFbnRyeS0+QXV0aFN0YXRlID0gQVNfQVVUSF9PUEVOOwotCXBFbnRyeS0+QXV0aE1vZGUgPSBwQWQtPlN0YUNmZy5BdXRoTW9kZTsKLQlwRW50cnktPldlcFN0YXR1cyA9IHBBZC0+U3RhQ2ZnLldlcFN0YXR1czsKLQotCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+TWFjVGFiTG9jayk7Ci0KLQl7Ci0JCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKLQkJd2V4dF9ub3RpZnlfZXZlbnRfYXNzb2MocEFkKTsKLQotCQltZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIHBBZC0+TWxtZUF1eC5Cc3NpZCwgTUFDX0FERFJfTEVOKTsKLQkJd2lyZWxlc3Nfc2VuZF9ldmVudChwQWQtPm5ldF9kZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOwotCi0JfQotCXJldHVybiBUUlVFOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvYXV0aC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvYXV0aC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2VhMDBiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhL2F1dGguYworKysgL2Rldi9udWxsCkBAIC0xLDUxNyArMCwwIEBACi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFJhbGluayBUZWNoIEluYy4KLSAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKLSAqIEhzaW5jaHUgQ291bnR5IDMwMiwKLSAqIFRhaXdhbiwgUi5PLkMuCi0gKgotICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotCU1vZHVsZSBOYW1lOgotCWF1dGguYwotCi0JQWJzdHJhY3Q6Ci0KLQlSZXZpc2lvbiBIaXN0b3J5OgotCVdobwkJCVdoZW4JCQlXaGF0Ci0JLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCUpvaG4JCQkyMDA0LTktMwkJcG9ydGluZyBmcm9tIFJUMjUwMAotCUp1c3RpbiBQLiBNYXR0b2NrCTExLzA3LzIwMTAJCUZpeCB0eXBvcwotKi8KLSNpbmNsdWRlICIuLi9ydF9jb25maWcuaCIKLQotLyoKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIERlc2NyaXB0aW9uOgotICAgICAgICBhdXRoZW50aWNhdGUgc3RhdGUgbWFjaGluZSBpbml0LCBpbmNsdWRpbmcgc3RhdGUgdHJhbnNpdGlvbiBhbmQgdGltZXIgaW5pdAotICAgIFBhcmFtZXRlcnM6Ci0gICAgICAgIFNtIC0gcG9pbnRlciB0byB0aGUgYXV0aCBzdGF0ZSBtYWNoaW5lCi0gICAgTm90ZToKLSAgICAgICAgVGhlIHN0YXRlIG1hY2hpbmUgbG9va3MgbGlrZSB0aGlzCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEFVVEhfUkVRX0lETEUgICAgICAgICAgIEFVVEhfV0FJVF9TRVEyICAgICAgICAgICAgICAgICAgIEFVVEhfV0FJVF9TRVE0Ci0gICAgTVQyX01MTUVfQVVUSF9SRVEgICBtbG1lX2F1dGhfcmVxX2FjdGlvbiAgICBpbnZhbGlkX3N0YXRlX3doZW5fYXV0aCAgICAgICAgICBpbnZhbGlkX3N0YXRlX3doZW5fYXV0aAotICAgIE1UMl9QRUVSX0FVVEhfRVZFTiAgZHJvcCAgICAgICAgICAgICAgICAgICAgcGVlcl9hdXRoX2V2ZW5fYXRfc2VxMl9hY3Rpb24gICAgcGVlcl9hdXRoX2V2ZW5fYXRfc2VxNF9hY3Rpb24KLSAgICBNVDJfQVVUSF9USU1FT1VUICAgIERyb3AgICAgICAgICAgICAgICAgICAgIGF1dGhfdGltZW91dF9hY3Rpb24gICAgICAgICAgICAgIGF1dGhfdGltZW91dF9hY3Rpb24KLQotCUlSUUwgPSBQQVNTSVZFX0xFVkVMCi0KLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLXZvaWQgQXV0aFN0YXRlTWFjaGluZUluaXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICBzdHJ1Y3QgcnRfc3RhdGVfbWFjaGluZSAqU20sIE9VVCBTVEFURV9NQUNISU5FX0ZVTkMgVHJhbnNbXSkKLXsKLQlTdGF0ZU1hY2hpbmVJbml0KFNtLCBUcmFucywgTUFYX0FVVEhfU1RBVEUsIE1BWF9BVVRIX01TRywKLQkJCSAoU1RBVEVfTUFDSElORV9GVU5DKSBEcm9wLCBBVVRIX1JFUV9JRExFLAotCQkJIEFVVEhfTUFDSElORV9CQVNFKTsKLQotCS8qIHRoZSBmaXJzdCBjb2x1bW4gKi8KLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIEFVVEhfUkVRX0lETEUsIE1UMl9NTE1FX0FVVEhfUkVRLAotCQkJICAgICAgKFNUQVRFX01BQ0hJTkVfRlVOQykgTWxtZUF1dGhSZXFBY3Rpb24pOwotCi0JLyogdGhlIHNlY29uZCBjb2x1bW4gKi8KLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIEFVVEhfV0FJVF9TRVEyLCBNVDJfTUxNRV9BVVRIX1JFUSwKLQkJCSAgICAgIChTVEFURV9NQUNISU5FX0ZVTkMpIEludmFsaWRTdGF0ZVdoZW5BdXRoKTsKLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIEFVVEhfV0FJVF9TRVEyLCBNVDJfUEVFUl9BVVRIX0VWRU4sCi0JCQkgICAgICAoU1RBVEVfTUFDSElORV9GVU5DKSBQZWVyQXV0aFJzcEF0U2VxMkFjdGlvbik7Ci0JU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBBVVRIX1dBSVRfU0VRMiwgTVQyX0FVVEhfVElNRU9VVCwKLQkJCSAgICAgIChTVEFURV9NQUNISU5FX0ZVTkMpIEF1dGhUaW1lb3V0QWN0aW9uKTsKLQotCS8qIHRoZSB0aGlyZCBjb2x1bW4gKi8KLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIEFVVEhfV0FJVF9TRVE0LCBNVDJfTUxNRV9BVVRIX1JFUSwKLQkJCSAgICAgIChTVEFURV9NQUNISU5FX0ZVTkMpIEludmFsaWRTdGF0ZVdoZW5BdXRoKTsKLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIEFVVEhfV0FJVF9TRVE0LCBNVDJfUEVFUl9BVVRIX0VWRU4sCi0JCQkgICAgICAoU1RBVEVfTUFDSElORV9GVU5DKSBQZWVyQXV0aFJzcEF0U2VxNEFjdGlvbik7Ci0JU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBBVVRIX1dBSVRfU0VRNCwgTVQyX0FVVEhfVElNRU9VVCwKLQkJCSAgICAgIChTVEFURV9NQUNISU5FX0ZVTkMpIEF1dGhUaW1lb3V0QWN0aW9uKTsKLQotCVJUTVBJbml0VGltZXIocEFkLCAmcEFkLT5NbG1lQXV4LkF1dGhUaW1lciwKLQkJICAgICAgR0VUX1RJTUVSX0ZVTkNUSU9OKEF1dGhUaW1lb3V0KSwgcEFkLCBGQUxTRSk7Ci19Ci0KLS8qCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBEZXNjcmlwdGlvbjoKLSAgICAgICAgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYXQgdGltZXIgdGhyZWFkIHdoZW4gYXV0aCB0aW1lciBleHBpcmVzCi0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgQXV0aFRpbWVvdXQodm9pZCAqU3lzdGVtU3BlY2lmaWMxLAotCQkgdm9pZCAqRnVuY3Rpb25Db250ZXh0LAotCQkgdm9pZCAqU3lzdGVtU3BlY2lmaWMyLCB2b2lkICpTeXN0ZW1TcGVjaWZpYzMpCi17Ci0Jc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkID0gKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKilGdW5jdGlvbkNvbnRleHQ7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBVVRIIC0gQXV0aFRpbWVvdXRcbiIpKTsKLQotCS8qIERvIG5vdGhpbmcgaWYgdGhlIGRyaXZlciBpcyBzdGFydGluZyBoYWx0IHN0YXRlLiAqLwotCS8qIFRoaXMgbWlnaHQgaGFwcGVuIHdoZW4gdGltZXIgYWxyZWFkeSBiZWVuIGZpcmVkIGJlZm9yZSBjYW5jZWwgdGltZXIgd2l0aCBtbG1laGFsdCAqLwotCWlmIChSVE1QX1RFU1RfRkxBRwotCSAgICAocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKQotCQlyZXR1cm47Ci0KLQkvKiBzZW5kIGEgZGUtYXV0aCB0byByZXNldCBBUCdzIHN0YXRlIG1hY2hpbmUgKFBhdGNoIEFQLURpcjYzNSkgKi8KLQlpZiAocEFkLT5NbG1lLkF1dGhNYWNoaW5lLkN1cnJTdGF0ZSA9PSBBVVRIX1dBSVRfU0VRMikKLQkJQ2xzMmVyckFjdGlvbihwQWQsIHBBZC0+TWxtZUF1eC5Cc3NpZCk7Ci0KLQlNbG1lRW5xdWV1ZShwQWQsIEFVVEhfU1RBVEVfTUFDSElORSwgTVQyX0FVVEhfVElNRU9VVCwgMCwgTlVMTCk7Ci0JUlRNUF9NTE1FX0hBTkRMRVIocEFkKTsKLX0KLQotLyoKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIERlc2NyaXB0aW9uOgotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi12b2lkIE1sbWVBdXRoUmVxQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSkKLXsKLQlpZiAoQVVUSF9SZXFTZW5kCi0JICAgIChwQWQsIEVsZW0sICZwQWQtPk1sbWVBdXguQXV0aFRpbWVyLCAiQVVUSCIsIDEsIE5VTEwsIDApKQotCQlwQWQtPk1sbWUuQXV0aE1hY2hpbmUuQ3VyclN0YXRlID0gQVVUSF9XQUlUX1NFUTI7Ci0JZWxzZSB7Ci0JCXUxNiBTdGF0dXM7Ci0KLQkJcEFkLT5NbG1lLkF1dGhNYWNoaW5lLkN1cnJTdGF0ZSA9IEFVVEhfUkVRX0lETEU7Ci0JCVN0YXR1cyA9IE1MTUVfSU5WQUxJRF9GT1JNQVQ7Ci0JCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9BVVRIX0NPTkYsIDIsCi0JCQkgICAgJlN0YXR1cyk7Ci0JfQotfQotCi0vKgotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgRGVzY3JpcHRpb246Ci0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgUGVlckF1dGhSc3BBdFNlcTJBY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKQotewotCXU4IEFkZHIyW01BQ19BRERSX0xFTl07Ci0JdTE2IFNlcSwgU3RhdHVzLCBSZW1vdGVTdGF0dXMsIEFsZzsKLQl1OCBDaGxnVGV4dFtDSVBIRVJfVEVYVF9MRU5dOwotCXU4IEN5cGVyQ2hsZ1RleHRbQ0lQSEVSX1RFWFRfTEVOICsgOCArIDhdOwotCXU4IEVsZW1lbnRbMl07Ci0Jc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEgQXV0aEhkcjsKLQlCT09MRUFOIFRpbWVyQ2FuY2VsbGVkOwotCXU4ICpwT3V0QnVmZmVyID0gTlVMTDsKLQlpbnQgTlN0YXR1czsKLQl1bnNpZ25lZCBsb25nIEZyYW1lTGVuID0gMDsKLQl1MTYgU3RhdHVzMjsKLQotCWlmIChQZWVyQXV0aFNhbml0eQotCSAgICAocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgQWRkcjIsICZBbGcsICZTZXEsICZTdGF0dXMsCi0JICAgICAoY2hhciAqKUNobGdUZXh0KSkgewotCQlpZiAoTUFDX0FERFJfRVFVQUwocEFkLT5NbG1lQXV4LkJzc2lkLCBBZGRyMikgJiYgU2VxID09IDIpIHsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAoIkFVVEggLSBSZWNlaXZlIEFVVEhfUlNQIHNlcSMyIHRvIG1lIChBbGc9JWQsIFN0YXR1cz0lZClcbiIsCi0JCQkJICBBbGcsIFN0YXR1cykpOwotCQkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguQXV0aFRpbWVyLAotCQkJCQkmVGltZXJDYW5jZWxsZWQpOwotCi0JCQlpZiAoU3RhdHVzID09IE1MTUVfU1VDQ0VTUykgewotCQkJCS8qIEF1dGhlbnRpY2F0aW9uIE1vZGUgIkxFQVAiIGhhcyBhbGxvdyBmb3IgQ0NYIDEuWCAqLwotCQkJCWlmIChwQWQtPk1sbWVBdXguQWxnID09IE5kaXM4MDJfMTFBdXRoTW9kZU9wZW4pIHsKLQkJCQkJcEFkLT5NbG1lLkF1dGhNYWNoaW5lLkN1cnJTdGF0ZSA9Ci0JCQkJCSAgICBBVVRIX1JFUV9JRExFOwotCQkJCQlNbG1lRW5xdWV1ZShwQWQsCi0JCQkJCQkgICAgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsCi0JCQkJCQkgICAgTVQyX0FVVEhfQ09ORiwgMiwgJlN0YXR1cyk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJLyogMi4gc2hhcmVkIGtleSwgbmVlZCB0byBiZSBjaGFsbGVuZ2VkICovCi0JCQkJCVNlcSsrOwotCQkJCQlSZW1vdGVTdGF0dXMgPSBNTE1FX1NVQ0NFU1M7Ci0KLQkJCQkJLyogR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkgKi8KLQkJCQkJTlN0YXR1cyA9Ci0JCQkJCSAgICBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLAotCQkJCQkJCSAgICAgICAmcE91dEJ1ZmZlcik7Ci0JCQkJCWlmIChOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkJCSAoIkFVVEggLSBQZWVyQXV0aFJzcEF0U2VxMkFjdGlvbigpIGFsbG9jYXRlIG1lbW9yeSBmYWlsXG4iKSk7Ci0JCQkJCQlwQWQtPk1sbWUuQXV0aE1hY2hpbmUuCi0JCQkJCQkgICAgQ3VyclN0YXRlID0gQVVUSF9SRVFfSURMRTsKLQkJCQkJCVN0YXR1czIgPSBNTE1FX0ZBSUxfTk9fUkVTT1VSQ0U7Ci0JCQkJCQlNbG1lRW5xdWV1ZShwQWQsCi0JCQkJCQkJICAgIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLAotCQkJCQkJCSAgICBNVDJfQVVUSF9DT05GLCAyLAotCQkJCQkJCSAgICAmU3RhdHVzMik7Ci0JCQkJCQlyZXR1cm47Ci0JCQkJCX0KLQotCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkJCSAoIkFVVEggLSBTZW5kIEFVVEggcmVxdWVzdCBzZXEjMy4uLlxuIikpOwotCQkJCQlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkF1dGhIZHIsCi0JCQkJCQkJIFNVQlRZUEVfQVVUSCwgMCwgQWRkcjIsCi0JCQkJCQkJIHBBZC0+TWxtZUF1eC5Cc3NpZCk7Ci0JCQkJCUF1dGhIZHIuRkMuV2VwID0gMTsKLQkJCQkJLyogRW5jcnlwdCBjaGFsbGVuZ2UgdGV4dCAmIGF1dGggaW5mb3JtYXRpb24gKi8KLQkJCQkJUlRNUEluaXRXZXBFbmdpbmUocEFkLAotCQkJCQkJCSAgcEFkLT4KLQkJCQkJCQkgIFNoYXJlZEtleVtCU1MwXVtwQWQtPgotCQkJCQkJCQkJICBTdGFDZmcuCi0JCQkJCQkJCQkgIERlZmF1bHRLZXlJZF0uCi0JCQkJCQkJICBLZXksCi0JCQkJCQkJICBwQWQtPlN0YUNmZy4KLQkJCQkJCQkgIERlZmF1bHRLZXlJZCwKLQkJCQkJCQkgIHBBZC0+Ci0JCQkJCQkJICBTaGFyZWRLZXlbQlNTMF1bcEFkLT4KLQkJCQkJCQkJCSAgU3RhQ2ZnLgotCQkJCQkJCQkJICBEZWZhdWx0S2V5SWRdLgotCQkJCQkJCSAgS2V5TGVuLAotCQkJCQkJCSAgQ3lwZXJDaGxnVGV4dCk7Ci0KLQkJCQkJQWxnID0gY3B1MmxlMTYoKih1MTYgKikgJiBBbGcpOwotCQkJCQlTZXEgPSBjcHUybGUxNigqKHUxNiAqKSAmIFNlcSk7Ci0JCQkJCVJlbW90ZVN0YXR1cyA9Ci0JCQkJCSAgICBjcHUybGUxNigqKHUxNiAqKSAmCi0JCQkJCQkgICAgIFJlbW90ZVN0YXR1cyk7Ci0KLQkJCQkJUlRNUEVuY3J5cHREYXRhKHBBZCwgKHU4ICopJiBBbGcsCi0JCQkJCQkJQ3lwZXJDaGxnVGV4dCArIDQsIDIpOwotCQkJCQlSVE1QRW5jcnlwdERhdGEocEFkLCAodTggKikmIFNlcSwKLQkJCQkJCQlDeXBlckNobGdUZXh0ICsgNiwgMik7Ci0JCQkJCVJUTVBFbmNyeXB0RGF0YShwQWQsCi0JCQkJCQkJKHU4ICopJiBSZW1vdGVTdGF0dXMsCi0JCQkJCQkJQ3lwZXJDaGxnVGV4dCArIDgsIDIpOwotCQkJCQlFbGVtZW50WzBdID0gMTY7Ci0JCQkJCUVsZW1lbnRbMV0gPSAxMjg7Ci0JCQkJCVJUTVBFbmNyeXB0RGF0YShwQWQsIEVsZW1lbnQsCi0JCQkJCQkJQ3lwZXJDaGxnVGV4dCArIDEwLCAyKTsKLQkJCQkJUlRNUEVuY3J5cHREYXRhKHBBZCwgQ2hsZ1RleHQsCi0JCQkJCQkJQ3lwZXJDaGxnVGV4dCArIDEyLAotCQkJCQkJCTEyOCk7Ci0JCQkJCVJUTVBTZXRJQ1YocEFkLCBDeXBlckNobGdUZXh0ICsgMTQwKTsKLQkJCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwgJkZyYW1lTGVuLAotCQkJCQkJCSAgc2l6ZW9mKHN0cnVjdCBydF9oZWFkZXJfODAyXzExKSwKLQkJCQkJCQkgICZBdXRoSGRyLAotCQkJCQkJCSAgQ0lQSEVSX1RFWFRfTEVOICsgMTYsCi0JCQkJCQkJICBDeXBlckNobGdUZXh0LAotCQkJCQkJCSAgRU5EX09GX0FSR1MpOwotCQkJCQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIHBPdXRCdWZmZXIsCi0JCQkJCQkJICBGcmFtZUxlbik7Ci0JCQkJCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7Ci0KLQkJCQkJUlRNUFNldFRpbWVyKCZwQWQtPk1sbWVBdXguQXV0aFRpbWVyLAotCQkJCQkJICAgICBBVVRIX1RJTUVPVVQpOwotCQkJCQlwQWQtPk1sbWUuQXV0aE1hY2hpbmUuQ3VyclN0YXRlID0KLQkJCQkJICAgIEFVVEhfV0FJVF9TRVE0OwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJcEFkLT5TdGFDZmcuQXV0aEZhaWxSZWFzb24gPSBTdGF0dXM7Ci0JCQkJQ09QWV9NQUNfQUREUihwQWQtPlN0YUNmZy5BdXRoRmFpbFN0YSwgQWRkcjIpOwotCQkJCXBBZC0+TWxtZS5BdXRoTWFjaGluZS5DdXJyU3RhdGUgPSBBVVRIX1JFUV9JRExFOwotCQkJCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsCi0JCQkJCSAgICBNVDJfQVVUSF9DT05GLCAyLCAmU3RhdHVzKTsKLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiQVVUSCAtIFBlZXJBdXRoU2FuaXR5KCkgc2FuaXR5IGNoZWNrIGZhaWxcbiIpKTsKLQl9Ci19Ci0KLS8qCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBEZXNjcmlwdGlvbjoKLQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotdm9pZCBQZWVyQXV0aFJzcEF0U2VxNEFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pCi17Ci0JdTggQWRkcjJbTUFDX0FERFJfTEVOXTsKLQl1MTYgQWxnLCBTZXEsIFN0YXR1czsKLQljaGFyIENobGdUZXh0W0NJUEhFUl9URVhUX0xFTl07Ci0JQk9PTEVBTiBUaW1lckNhbmNlbGxlZDsKLQotCWlmIChQZWVyQXV0aFNhbml0eQotCSAgICAocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgQWRkcjIsICZBbGcsICZTZXEsICZTdGF0dXMsCi0JICAgICBDaGxnVGV4dCkpIHsKLQkJaWYgKE1BQ19BRERSX0VRVUFMKHBBZC0+TWxtZUF1eC5Cc3NpZCwgQWRkcjIpICYmIFNlcSA9PSA0KSB7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCJBVVRIIC0gUmVjZWl2ZSBBVVRIX1JTUCBzZXEjNCB0byBtZVxuIikpOwotCQkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguQXV0aFRpbWVyLAotCQkJCQkmVGltZXJDYW5jZWxsZWQpOwotCi0JCQlpZiAoU3RhdHVzICE9IE1MTUVfU1VDQ0VTUykgewotCQkJCXBBZC0+U3RhQ2ZnLkF1dGhGYWlsUmVhc29uID0gU3RhdHVzOwotCQkJCUNPUFlfTUFDX0FERFIocEFkLT5TdGFDZmcuQXV0aEZhaWxTdGEsIEFkZHIyKTsKLQkJCX0KLQotCQkJcEFkLT5NbG1lLkF1dGhNYWNoaW5lLkN1cnJTdGF0ZSA9IEFVVEhfUkVRX0lETEU7Ci0JCQlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfQVVUSF9DT05GLAotCQkJCSAgICAyLCAmU3RhdHVzKTsKLQkJfQotCX0gZWxzZSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiQVVUSCAtIFBlZXJBdXRoUnNwQXRTZXE0QWN0aW9uKCkgc2FuaXR5IGNoZWNrIGZhaWxcbiIpKTsKLQl9Ci19Ci0KLS8qCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBEZXNjcmlwdGlvbjoKLQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotdm9pZCBNbG1lRGVhdXRoUmVxQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSkKLXsKLQlzdHJ1Y3QgcnRfbWxtZV9kZWF1dGhfcmVxICpwSW5mbzsKLQlzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSBEZWF1dGhIZHI7Ci0JdTggKnBPdXRCdWZmZXIgPSBOVUxMOwotCWludCBOU3RhdHVzOwotCXVuc2lnbmVkIGxvbmcgRnJhbWVMZW4gPSAwOwotCXUxNiBTdGF0dXM7Ci0KLQlwSW5mbyA9IChzdHJ1Y3QgcnRfbWxtZV9kZWF1dGhfcmVxICopRWxlbS0+TXNnOwotCi0JTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsJLypHZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeSAqLwotCWlmIChOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJBVVRIIC0gTWxtZURlYXV0aFJlcUFjdGlvbigpIGFsbG9jYXRlIG1lbW9yeSBmYWlsXG4iKSk7Ci0JCXBBZC0+TWxtZS5BdXRoTWFjaGluZS5DdXJyU3RhdGUgPSBBVVRIX1JFUV9JRExFOwotCQlTdGF0dXMgPSBNTE1FX0ZBSUxfTk9fUkVTT1VSQ0U7Ci0JCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9ERUFVVEhfQ09ORiwgMiwKLQkJCSAgICAmU3RhdHVzKTsKLQkJcmV0dXJuOwotCX0KLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCJBVVRIIC0gU2VuZCBERS1BVVRIIHJlcXVlc3QgKFJlYXNvbj0lZCkuLi5cbiIsCi0JCSAgcEluZm8tPlJlYXNvbikpOwotCU1ndE1hY0hlYWRlckluaXQocEFkLCAmRGVhdXRoSGRyLCBTVUJUWVBFX0RFQVVUSCwgMCwgcEluZm8tPkFkZHIsCi0JCQkgcEFkLT5NbG1lQXV4LkJzc2lkKTsKLQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAmRnJhbWVMZW4sIHNpemVvZihzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSksCi0JCQkgICZEZWF1dGhIZHIsIDIsICZwSW5mby0+UmVhc29uLCBFTkRfT0ZfQVJHUyk7Ci0JTWluaXBvcnRNTVJlcXVlc3QocEFkLCAwLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7Ci0JTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKLQotCXBBZC0+U3RhQ2ZnLkRlYXV0aFJlYXNvbiA9IHBJbmZvLT5SZWFzb247Ci0JQ09QWV9NQUNfQUREUihwQWQtPlN0YUNmZy5EZWF1dGhTdGEsIHBJbmZvLT5BZGRyKTsKLQlwQWQtPk1sbWUuQXV0aE1hY2hpbmUuQ3VyclN0YXRlID0gQVVUSF9SRVFfSURMRTsKLQlTdGF0dXMgPSBNTE1FX1NVQ0NFU1M7Ci0JTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX0RFQVVUSF9DT05GLCAyLCAmU3RhdHVzKTsKLQotCS8qIHNlbmQgd2lyZWxlc3MgZXZlbnQgLSBmb3IgZGVhdXRoZW50aWNhdGlvbiAqLwotCWlmIChwQWQtPkNvbW1vbkNmZy5iV2lyZWxlc3NFdmVudCkKLQkJUlRNUFNlbmRXaXJlbGVzc0V2ZW50KHBBZCwgSVdfREVBVVRIX0VWRU5UX0ZMQUcsCi0JCQkJICAgICAgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5BZGRyLAotCQkJCSAgICAgIEJTUzAsIDApOwotfQotCi0vKgotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgRGVzY3JpcHRpb246Ci0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgQXV0aFRpbWVvdXRBY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKQotewotCXUxNiBTdGF0dXM7Ci0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVVUSCAtIEF1dGhUaW1lb3V0QWN0aW9uXG4iKSk7Ci0JcEFkLT5NbG1lLkF1dGhNYWNoaW5lLkN1cnJTdGF0ZSA9IEFVVEhfUkVRX0lETEU7Ci0JU3RhdHVzID0gTUxNRV9SRUpfVElNRU9VVDsKLQlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfQVVUSF9DT05GLCAyLCAmU3RhdHVzKTsKLX0KLQotLyoKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIERlc2NyaXB0aW9uOgotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi12b2lkIEludmFsaWRTdGF0ZVdoZW5BdXRoKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSkKLXsKLQl1MTYgU3RhdHVzOwotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCJBVVRIIC0gSW52YWxpZFN0YXRlV2hlbkF1dGggKHN0YXRlPSVsZCksIHJlc2V0IEFVVEggc3RhdGUgbWFjaGluZVxuIiwKLQkJICBwQWQtPk1sbWUuQXV0aE1hY2hpbmUuQ3VyclN0YXRlKSk7Ci0JcEFkLT5NbG1lLkF1dGhNYWNoaW5lLkN1cnJTdGF0ZSA9IEFVVEhfUkVRX0lETEU7Ci0JU3RhdHVzID0gTUxNRV9TVEFURV9NQUNISU5FX1JFSkVDVDsKLQlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfQVVUSF9DT05GLCAyLCAmU3RhdHVzKTsKLX0KLQotLyoKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIERlc2NyaXB0aW9uOgotICAgICAgICBTb21lIFNUQS9BUAotICAgIE5vdGU6Ci0gICAgICAgIFRoaXMgYWN0aW9uIHNob3VsZCBuZXZlciB0cmlnZ2VyIEFVVEggc3RhdGUgdHJhbnNpdGlvbiwgdGhlcmVmb3JlIHdlCi0gICAgICAgIHNlcGFyYXRlIGl0IGZyb20gQVVUSCBzdGF0ZSBtYWNoaW5lLCBhbmQgbWFrZSBpdCBhcyBhIHN0YW5kYWxvbmUgc2VydmljZQotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi12b2lkIENsczJlcnJBY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1OCAqcEFkZHIpCi17Ci0Jc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEgRGVhdXRoSGRyOwotCXU4ICpwT3V0QnVmZmVyID0gTlVMTDsKLQlpbnQgTlN0YXR1czsKLQl1bnNpZ25lZCBsb25nIEZyYW1lTGVuID0gMDsKLQl1MTYgUmVhc29uID0gUkVBU09OX0NMUzJFUlI7Ci0KLQlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOwkvKkdldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5ICovCi0JaWYgKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKLQkJcmV0dXJuOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIkFVVEggLSBDbGFzcyAyIGVycm9yLCBTZW5kIERFQVVUSCBmcmFtZS4uLlxuIikpOwotCU1ndE1hY0hlYWRlckluaXQocEFkLCAmRGVhdXRoSGRyLCBTVUJUWVBFX0RFQVVUSCwgMCwgcEFkZHIsCi0JCQkgcEFkLT5NbG1lQXV4LkJzc2lkKTsKLQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAmRnJhbWVMZW4sIHNpemVvZihzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSksCi0JCQkgICZEZWF1dGhIZHIsIDIsICZSZWFzb24sIEVORF9PRl9BUkdTKTsKLQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKLQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOwotCi0JcEFkLT5TdGFDZmcuRGVhdXRoUmVhc29uID0gUmVhc29uOwotCUNPUFlfTUFDX0FERFIocEFkLT5TdGFDZmcuRGVhdXRoU3RhLCBwQWRkcik7Ci19Ci0KLUJPT0xFQU4gQVVUSF9SZXFTZW5kKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgICBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpwRWxlbSwKLQkJICAgICBzdHJ1Y3QgcnRfcmFsaW5rX3RpbWVyICpwQXV0aFRpbWVyLAotCQkgICAgIGNoYXIgKnBTTU5hbWUsCi0JCSAgICAgdTE2IFNlcU5vLAotCQkgICAgIHU4ICpwTmV3RWxlbWVudCwgdW5zaWduZWQgbG9uZyBFbGVtZW50TGVuKQotewotCXUxNiBBbGcsIFNlcSwgU3RhdHVzOwotCXU4IEFkZHJbNl07Ci0JdW5zaWduZWQgbG9uZyBUaW1lb3V0OwotCXN0cnVjdCBydF9oZWFkZXJfODAyXzExIEF1dGhIZHI7Ci0JQk9PTEVBTiBUaW1lckNhbmNlbGxlZDsKLQlpbnQgTlN0YXR1czsKLQl1OCAqcE91dEJ1ZmZlciA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBGcmFtZUxlbiA9IDAsIHRtcCA9IDA7Ci0KLQkvKiBCbG9jayBhbGwgYXV0aGVudGljYXRpb24gcmVxdWVzdCBkdXJpbmcgV1BBIGJsb2NrIHBlcmlvZCAqLwotCWlmIChwQWQtPlN0YUNmZy5iQmxvY2tBc3NvYyA9PSBUUlVFKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiJXMgLSBCbG9jayBBdXRoIHJlcXVlc3QgZHVyaW5nIFdQQSBibG9jayBwZXJpb2QhXG4iLAotCQkJICBwU01OYW1lKSk7Ci0JCXBBZC0+TWxtZS5BdXRoTWFjaGluZS5DdXJyU3RhdGUgPSBBVVRIX1JFUV9JRExFOwotCQlTdGF0dXMgPSBNTE1FX1NUQVRFX01BQ0hJTkVfUkVKRUNUOwotCQlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfQVVUSF9DT05GLCAyLAotCQkJICAgICZTdGF0dXMpOwotCX0gZWxzZQotCSAgICBpZiAoTWxtZUF1dGhSZXFTYW5pdHkKLQkJKHBBZCwgcEVsZW0tPk1zZywgcEVsZW0tPk1zZ0xlbiwgQWRkciwgJlRpbWVvdXQsICZBbGcpKSB7Ci0JCS8qIHJlc2V0IHRpbWVyICovCi0JCVJUTVBDYW5jZWxUaW1lcihwQXV0aFRpbWVyLCAmVGltZXJDYW5jZWxsZWQpOwotCi0JCUNPUFlfTUFDX0FERFIocEFkLT5NbG1lQXV4LkJzc2lkLCBBZGRyKTsKLQkJcEFkLT5NbG1lQXV4LkFsZyA9IEFsZzsKLQkJU2VxID0gU2VxTm87Ci0JCVN0YXR1cyA9IE1MTUVfU1VDQ0VTUzsKLQotCQlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOwkvKkdldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5ICovCi0JCWlmIChOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAoIiVzIC0gTWxtZUF1dGhSZXFBY3Rpb24oQWxnOiVkKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkXG4iLAotCQkJCSAgcFNNTmFtZSwgQWxnKSk7Ci0JCQlwQWQtPk1sbWUuQXV0aE1hY2hpbmUuQ3VyclN0YXRlID0gQVVUSF9SRVFfSURMRTsKLQkJCVN0YXR1cyA9IE1MTUVfRkFJTF9OT19SRVNPVVJDRTsKLQkJCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9BVVRIX0NPTkYsCi0JCQkJICAgIDIsICZTdGF0dXMpOwotCQkJcmV0dXJuIEZBTFNFOwotCQl9Ci0KLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCIlcyAtIFNlbmQgQVVUSCByZXF1ZXN0IHNlcSMxIChBbGc9JWQpLi4uXG4iLCBwU01OYW1lLAotCQkJICBBbGcpKTsKLQkJTWd0TWFjSGVhZGVySW5pdChwQWQsICZBdXRoSGRyLCBTVUJUWVBFX0FVVEgsIDAsIEFkZHIsCi0JCQkJIHBBZC0+TWxtZUF1eC5Cc3NpZCk7Ci0JCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICZGcmFtZUxlbiwgc2l6ZW9mKHN0cnVjdCBydF9oZWFkZXJfODAyXzExKSwKLQkJCQkgICZBdXRoSGRyLCAyLCAmQWxnLCAyLCAmU2VxLCAyLCAmU3RhdHVzLAotCQkJCSAgRU5EX09GX0FSR1MpOwotCi0JCWlmIChwTmV3RWxlbWVudCAmJiBFbGVtZW50TGVuKSB7Ci0JCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICZ0bXAsCi0JCQkJCSAgRWxlbWVudExlbiwgcE5ld0VsZW1lbnQsIEVORF9PRl9BUkdTKTsKLQkJCUZyYW1lTGVuICs9IHRtcDsKLQkJfQotCi0JCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgMCwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOwotCQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOwotCi0JCVJUTVBTZXRUaW1lcihwQXV0aFRpbWVyLCBUaW1lb3V0KTsKLQkJcmV0dXJuIFRSVUU7Ci0JfSBlbHNlIHsKLQkJREJHUFJJTlRfRVJSKCIlcyAtIE1sbWVBdXRoUmVxQWN0aW9uKCkgc2FuaXR5IGNoZWNrIGZhaWxlZFxuIiwgcFNNTmFtZSk7Ci0JCXJldHVybiBGQUxTRTsKLQl9Ci0KLQlyZXR1cm4gVFJVRTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhL2F1dGhfcnNwLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YS9hdXRoX3JzcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjAxOGI3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhL2F1dGhfcnNwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLQlNb2R1bGUgTmFtZToKLQlhdXRoX3JzcC5jCi0KLQlBYnN0cmFjdDoKLQotCVJldmlzaW9uIEhpc3Rvcnk6Ci0JV2hvCQkJV2hlbgkJCVdoYXQKLQktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JSm9obgkJMjAwNC0xMC0xCQljb3B5IGZyb20gUlQyNTYwCi0qLwotI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgotCi0vKgotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgRGVzY3JpcHRpb246Ci0gICAgICAgIGF1dGhlbnRpY2F0aW9uIHN0YXRlIG1hY2hpbmUgaW5pdCBwcm9jZWR1cmUKLSAgICBQYXJhbWV0ZXJzOgotICAgICAgICBTbSAtIHRoZSBzdGF0ZSBtYWNoaW5lCi0KLQlJUlFMID0gUEFTU0lWRV9MRVZFTAotCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotdm9pZCBBdXRoUnNwU3RhdGVNYWNoaW5lSW5pdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgIHN0cnVjdCBydF9zdGF0ZV9tYWNoaW5lICpTbSwKLQkJCSAgICAgSU4gU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pCi17Ci0JU3RhdGVNYWNoaW5lSW5pdChTbSwgVHJhbnMsIE1BWF9BVVRIX1JTUF9TVEFURSwgTUFYX0FVVEhfUlNQX01TRywKLQkJCSAoU1RBVEVfTUFDSElORV9GVU5DKSBEcm9wLCBBVVRIX1JTUF9JRExFLAotCQkJIEFVVEhfUlNQX01BQ0hJTkVfQkFTRSk7Ci0KLQkvKiBjb2x1bW4gMSAqLwotCVN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgQVVUSF9SU1BfSURMRSwgTVQyX1BFRVJfREVBVVRILAotCQkJICAgICAgKFNUQVRFX01BQ0hJTkVfRlVOQykgUGVlckRlYXV0aEFjdGlvbik7Ci0KLQkvKiBjb2x1bW4gMiAqLwotCVN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgQVVUSF9SU1BfV0FJVF9DSEFMLCBNVDJfUEVFUl9ERUFVVEgsCi0JCQkgICAgICAoU1RBVEVfTUFDSElORV9GVU5DKSBQZWVyRGVhdXRoQWN0aW9uKTsKLQotfQotCi0vKgotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgRGVzY3JpcHRpb246Ci0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBQZWVyQXV0aFNpbXBsZVJzcEdlbkFuZFNlbmQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCSBzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSAqIHBIZHI4MDIxMSwKLQkJCQkgdTE2IEFsZywKLQkJCQkgdTE2IFNlcSwKLQkJCQkgdTE2IFJlYXNvbiwgdTE2IFN0YXR1cykKLXsKLQlzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSBBdXRoSGRyOwotCXVuc2lnbmVkIGxvbmcgRnJhbWVMZW4gPSAwOwotCXU4ICpwT3V0QnVmZmVyID0gTlVMTDsKLQlpbnQgTlN0YXR1czsKLQotCWlmIChSZWFzb24gIT0gTUxNRV9TVUNDRVNTKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXIgQVVUSCBmYWlsLi4uXG4iKSk7Ci0JCXJldHVybjsKLQl9Ci0JLypHZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeSAqLwotCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7Ci0JaWYgKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKLQkJcmV0dXJuOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2VuZCBBVVRIIHJlc3BvbnNlIChzZXEjMikuLi5cbiIpKTsKLQlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkF1dGhIZHIsIFNVQlRZUEVfQVVUSCwgMCwgcEhkcjgwMjExLT5BZGRyMiwKLQkJCSBwQWQtPk1sbWVBdXguQnNzaWQpOwotCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICZGcmFtZUxlbiwgc2l6ZW9mKHN0cnVjdCBydF9oZWFkZXJfODAyXzExKSwKLQkJCSAgJkF1dGhIZHIsIDIsICZBbGcsIDIsICZTZXEsIDIsICZSZWFzb24sIEVORF9PRl9BUkdTKTsKLQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKLQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOwotfQotCi0vKgotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgRGVzY3JpcHRpb246Ci0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBQZWVyRGVhdXRoQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSkKLXsKLQl1OCBBZGRyMltNQUNfQUREUl9MRU5dOwotCXUxNiBSZWFzb247Ci0KLQlpZiAoUGVlckRlYXV0aFNhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuLCBBZGRyMiwgJlJlYXNvbikpIHsKLQkJaWYgKElORlJBX09OKHBBZCkKLQkJICAgICYmIE1BQ19BRERSX0VRVUFMKEFkZHIyLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCkKLQkJICAgICkgewotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiQVVUSF9SU1AgLSByZWNlaXZlIERFLUFVVEggZnJvbSBvdXIgQVAgKFJlYXNvbj0lZClcbiIsCi0JCQkJICBSZWFzb24pKTsKLQotCQkJUnRtcE9TV3JpZWxlc3NFdmVudFNlbmQocEFkLCBTSU9DR0lXQVAsIC0xLCBOVUxMLCBOVUxMLAotCQkJCQkJMCk7Ci0KLQkJCS8qIHNlbmQgd2lyZWxlc3MgZXZlbnQgLSBmb3IgZGVhdXRoZW50aWNhdGlvbiAqLwotCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50KQotCQkJCVJUTVBTZW5kV2lyZWxlc3NFdmVudChwQWQsIElXX0RFQVVUSF9FVkVOVF9GTEFHLAotCQkJCQkJICAgICAgcEFkLT5NYWNUYWIuCi0JCQkJCQkgICAgICBDb250ZW50W0JTU0lEX1dDSURdLkFkZHIsCi0JCQkJCQkgICAgICBCU1MwLCAwKTsKLQotCQkJTGlua0Rvd24ocEFkLCBUUlVFKTsKLQkJfQotCX0gZWxzZSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiQVVUSF9SU1AgLSBQZWVyRGVhdXRoQWN0aW9uKCkgc2FuaXR5IGNoZWNrIGZhaWxcbiIpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YS9jb25uZWN0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YS9jb25uZWN0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5OTYyNTguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvY29ubmVjdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjYxMyArMCwwIEBACi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFJhbGluayBUZWNoIEluYy4KLSAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKLSAqIEhzaW5jaHUgQ291bnR5IDMwMiwKLSAqIFRhaXdhbiwgUi5PLkMuCi0gKgotICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotCU1vZHVsZSBOYW1lOgotCWNvbm5lY3QuYwotCi0JQWJzdHJhY3Q6Ci0KLQlSZXZpc2lvbiBIaXN0b3J5OgotCVdobwkJCVdoZW4JCQlXaGF0Ci0JLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCUpvaG4JCQkyMDA0LTA4LTA4CQlNYWpvciBtb2RpZmljYXRpb24gZnJvbSBSVDI1NjAKLQlKdXN0aW4gUC4gTWF0dG9jawkxMS8wNy8yMDEwCQlGaXggdHlwb3MKLSovCi0jaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCi0KLXU4IENpcGhlclN1aXRlV3BhTm9uZVRraXBbXSA9IHsKLQkweDAwLCAweDUwLCAweGYyLCAweDAxLAkvKiBvdWkgKi8KLQkweDAxLCAweDAwLAkJLyogVmVyc2lvbiAqLwotCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDIsCS8qIE11bHRpY2FzdCAqLwotCTB4MDEsIDB4MDAsCQkvKiBOdW1iZXIgb2YgdW5pY2FzdCAqLwotCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDIsCS8qIHVuaWNhc3QgKi8KLQkweDAxLCAweDAwLAkJLyogbnVtYmVyIG9mIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCAqLwotCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDAJLyogYXV0aGVudGljYXRpb24gKi8KLX07Ci0KLXU4IENpcGhlclN1aXRlV3BhTm9uZVRraXBMZW4gPQotICAgIChzaXplb2YoQ2lwaGVyU3VpdGVXcGFOb25lVGtpcCkgLyBzaXplb2YodTgpKTsKLQotdTggQ2lwaGVyU3VpdGVXcGFOb25lQWVzW10gPSB7Ci0JMHgwMCwgMHg1MCwgMHhmMiwgMHgwMSwJLyogb3VpICovCi0JMHgwMSwgMHgwMCwJCS8qIFZlcnNpb24gKi8KLQkweDAwLCAweDUwLCAweGYyLCAweDA0LAkvKiBNdWx0aWNhc3QgKi8KLQkweDAxLCAweDAwLAkJLyogTnVtYmVyIG9mIHVuaWNhc3QgKi8KLQkweDAwLCAweDUwLCAweGYyLCAweDA0LAkvKiB1bmljYXN0ICovCi0JMHgwMSwgMHgwMCwJCS8qIG51bWJlciBvZiBhdXRoZW50aWNhdGlvbiBtZXRob2QgKi8KLQkweDAwLCAweDUwLCAweGYyLCAweDAwCS8qIGF1dGhlbnRpY2F0aW9uICovCi19OwotCi11OCBDaXBoZXJTdWl0ZVdwYU5vbmVBZXNMZW4gPQotICAgIChzaXplb2YoQ2lwaGVyU3VpdGVXcGFOb25lQWVzKSAvIHNpemVvZih1OCkpOwotCi0vKiBUaGUgZm9sbG93aW5nIE1BQ1JPIGlzIGNhbGxlZCBhZnRlciAxLiBzdGFydGluZyBhbiBuZXcgSUJTUywgMi4gc3VjY2Vzc2Z1bGx5IEpPSU4gYW4gSUJTUywgKi8KLS8qIG9yIDMuIHN1Y2Nlc3NmdWxseSBBU1NPQ0lBVEUgdG8gYSBCU1MsIDQuIHN1Y2Nlc3NmdWxseSBSRV9BU1NPQ0lBVEUgdG8gYSBCU1MgKi8KLS8qIEFsbCBzZXR0aW5ncyBzdWNjZXNzZnVseSBuZWdvdGlhdGVkIGZpcmluZyBNTE1FIHN0YXRlIG1hY2hpbmVzIGJlY29tZSBmaW5hbCBzZXR0aW5ncyAqLwotLyogYW5kIGFyZSBjb3BpZWQgdG8gcEFkLT5TdGFBY3RpdmUgKi8KLSNkZWZpbmUgQ09QWV9TRVRUSU5HU19GUk9NX01MTUVfQVVYX1RPX0FDVElWRV9DRkcoX3BBZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCU5kaXNaZXJvTWVtb3J5KChfcEFkKS0+Q29tbW9uQ2ZnLlNzaWQsIE1BWF9MRU5fT0ZfU1NJRCk7CQkJCQkJCVwKLQkoX3BBZCktPkNvbW1vbkNmZy5Tc2lkTGVuID0gKF9wQWQpLT5NbG1lQXV4LlNzaWRMZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JTmRpc01vdmVNZW1vcnkoKF9wQWQpLT5Db21tb25DZmcuU3NpZCwgKF9wQWQpLT5NbG1lQXV4LlNzaWQsIChfcEFkKS0+TWxtZUF1eC5Tc2lkTGVuKTsgXAotCUNPUFlfTUFDX0FERFIoKF9wQWQpLT5Db21tb25DZmcuQnNzaWQsIChfcEFkKS0+TWxtZUF1eC5Cc3NpZCk7ICAgICAgICAgICAgICAgICAgICAgIFwKLQkoX3BBZCktPkNvbW1vbkNmZy5DaGFubmVsID0gKF9wQWQpLT5NbG1lQXV4LkNoYW5uZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JKF9wQWQpLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPSAoX3BBZCktPk1sbWVBdXguQ2VudHJhbENoYW5uZWw7ICAgICAgICAgICAgICAgICAgXAotCShfcEFkKS0+U3RhQWN0aXZlLkFpZCA9IChfcEFkKS0+TWxtZUF1eC5BaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkoX3BBZCktPlN0YUFjdGl2ZS5BdGltV2luID0gKF9wQWQpLT5NbG1lQXV4LkF0aW1XaW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JKF9wQWQpLT5TdGFBY3RpdmUuQ2FwYWJpbGl0eUluZm8gPSAoX3BBZCktPk1sbWVBdXguQ2FwYWJpbGl0eUluZm87ICAgICAgICAgICAgICAgICAgXAotCShfcEFkKS0+Q29tbW9uQ2ZnLkJlYWNvblBlcmlvZCA9IChfcEFkKS0+TWxtZUF1eC5CZWFjb25QZXJpb2Q7ICAgICAgICAgICAgICAgICAgICAgIFwKLQkoX3BBZCktPlN0YUFjdGl2ZS5DZnBNYXhEdXJhdGlvbiA9IChfcEFkKS0+TWxtZUF1eC5DZnBNYXhEdXJhdGlvbjsgICAgICAgICAgICAgICAgICBcCi0JKF9wQWQpLT5TdGFBY3RpdmUuQ2ZwUGVyaW9kID0gKF9wQWQpLT5NbG1lQXV4LkNmcFBlcmlvZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCShfcEFkKS0+U3RhQWN0aXZlLlN1cFJhdGVMZW4gPSAoX3BBZCktPk1sbWVBdXguU3VwUmF0ZUxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlOZGlzTW92ZU1lbW9yeSgoX3BBZCktPlN0YUFjdGl2ZS5TdXBSYXRlLCAoX3BBZCktPk1sbWVBdXguU3VwUmF0ZSwgKF9wQWQpLT5NbG1lQXV4LlN1cFJhdGVMZW4pO1wKLQkoX3BBZCktPlN0YUFjdGl2ZS5FeHRSYXRlTGVuID0gKF9wQWQpLT5NbG1lQXV4LkV4dFJhdGVMZW47ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JTmRpc01vdmVNZW1vcnkoKF9wQWQpLT5TdGFBY3RpdmUuRXh0UmF0ZSwgKF9wQWQpLT5NbG1lQXV4LkV4dFJhdGUsIChfcEFkKS0+TWxtZUF1eC5FeHRSYXRlTGVuKTtcCi0JTmRpc01vdmVNZW1vcnkoJihfcEFkKS0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0sICYoX3BBZCktPk1sbWVBdXguQVBFZGNhUGFybSwgc2l6ZW9mKHN0cnVjdCBydF9lZGNhX3Bhcm0pKTtcCi0JTmRpc01vdmVNZW1vcnkoJihfcEFkKS0+Q29tbW9uQ2ZnLkFQUW9zQ2FwYWJpbGl0eSwgJihfcEFkKS0+TWxtZUF1eC5BUFFvc0NhcGFiaWxpdHksIHNpemVvZihzdHJ1Y3QgcnRfcW9zX2NhcGFiaWxpdHlfcGFybSkpO1wKLQlOZGlzTW92ZU1lbW9yeSgmKF9wQWQpLT5Db21tb25DZmcuQVBRYnNzTG9hZCwgJihfcEFkKS0+TWxtZUF1eC5BUFFic3NMb2FkLCBzaXplb2Yoc3RydWN0IHJ0X3Fic3NfbG9hZF9wYXJtKSk7XAotCUNPUFlfTUFDX0FERFIoKF9wQWQpLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5BZGRyLCAoX3BBZCktPk1sbWVBdXguQnNzaWQpOyAgICAgIFwKLQkoX3BBZCktPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkFpZCA9IChfcEFkKS0+TWxtZUF1eC5BaWQ7ICAgICAgICAgICAgICAgICAgICAgICBcCi0JKF9wQWQpLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5QYWlyd2lzZUtleS5DaXBoZXJBbGcgPSAoX3BBZCktPlN0YUNmZy5QYWlyQ2lwaGVyO1wKLQlDT1BZX01BQ19BRERSKChfcEFkKS0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uUGFpcndpc2VLZXkuQnNzSWQsIChfcEFkKS0+TWxtZUF1eC5Cc3NpZCk7XAotCShfcEFkKS0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uUmF0ZUxlbiA9IChfcEFkKS0+U3RhQWN0aXZlLlN1cFJhdGVMZW4gKyAoX3BBZCktPlN0YUFjdGl2ZS5FeHRSYXRlTGVuO1wKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCi0JSVJRTCA9IFBBU1NJVkVfTEVWRUwKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBNbG1lQ250bEluaXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgIHN0cnVjdCBydF9zdGF0ZV9tYWNoaW5lICpTLCBPVVQgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pCi17Ci0JLyogQ29udHJvbCBzdGF0ZSBtYWNoaW5lIGRpZmZlcnMgZnJvbSBvdGhlciBzdGF0ZSBtYWNoaW5lcywgdGhlIGludGVyZmFjZSAqLwotCS8qIGZvbGxvd3MgdGhlIHN0YW5kYXJkIGludGVyZmFjZSAqLwotCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIE1sbWVDbnRsTWFjaGluZVBlcmZvcm1BY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCSAgc3RydWN0IHJ0X3N0YXRlX21hY2hpbmUgKlMsCi0JCQkJICBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKQotewotCXN3aXRjaCAocEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSkgewotCWNhc2UgQ05UTF9JRExFOgotCQlDbnRsSWRsZVByb2MocEFkLCBFbGVtKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTlRMX1dBSVRfRElTQVNTT0M6Ci0JCUNudGxXYWl0RGlzYXNzb2NQcm9jKHBBZCwgRWxlbSk7Ci0JCWJyZWFrOwotCWNhc2UgQ05UTF9XQUlUX0pPSU46Ci0JCUNudGxXYWl0Sm9pblByb2MocEFkLCBFbGVtKTsKLQkJYnJlYWs7Ci0KLQkJLyogQ05UTF9XQUlUX1JFQVNTT0MgaXMgdGhlIG9ubHkgc3RhdGUgaW4gQ05UTCBtYWNoaW5lIHRoYXQgZG9lcyAqLwotCQkvKiBub3QgdHJpZ2dlcmVkIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgYnkgIlJUTVBTZXRJbmZvcm1hdGlvbihPSURfeHh4KSIuICovCi0JCS8qIFRoZXJlZm9yZSBub3QgcHJvdGVjdGVkIGJ5IE5ESVMncyAib25seSBvbmUgb3V0c3RhbmRpbmcgT0lEIHJlcXVlc3QiICovCi0JCS8qIHJ1bGUuIFdoaWNoIG1lYW5zIE5ESVMgbWF5IFNFVCBPSUQgaW4gdGhlIG1pZGRsZSBvZiBST0FNaW5nIGF0dGVtcHRzLiAqLwotCQkvKiBDdXJyZW50IGFwcHJvYWNoIGlzIHRvIGJsb2NrIG5ldyBTRVQgcmVxdWVzdCBhdCBSVE1QU2V0SW5mb3JtYXRpb24oKSAqLwotCQkvKiB3aGVuIENudGxNYWNoaW5lLkN1cnJTdGF0ZSBpcyBub3QgQ05UTF9JRExFICovCi0JY2FzZSBDTlRMX1dBSVRfUkVBU1NPQzoKLQkJQ250bFdhaXRSZWFzc29jUHJvYyhwQWQsIEVsZW0pOwotCQlicmVhazsKLQotCWNhc2UgQ05UTF9XQUlUX1NUQVJUOgotCQlDbnRsV2FpdFN0YXJ0UHJvYyhwQWQsIEVsZW0pOwotCQlicmVhazsKLQljYXNlIENOVExfV0FJVF9BVVRIOgotCQlDbnRsV2FpdEF1dGhQcm9jKHBBZCwgRWxlbSk7Ci0JCWJyZWFrOwotCWNhc2UgQ05UTF9XQUlUX0FVVEgyOgotCQlDbnRsV2FpdEF1dGhQcm9jMihwQWQsIEVsZW0pOwotCQlicmVhazsKLQljYXNlIENOVExfV0FJVF9BU1NPQzoKLQkJQ250bFdhaXRBc3NvY1Byb2MocEFkLCBFbGVtKTsKLQkJYnJlYWs7Ci0KLQljYXNlIENOVExfV0FJVF9PSURfTElTVF9TQ0FOOgotCQlpZiAoRWxlbS0+TXNnVHlwZSA9PSBNVDJfU0NBTl9DT05GKSB7Ci0JCQkvKiBSZXN1bWUgVHhSaW5nIGFmdGVyIFNDQU5JTkcgY29tcGxldGUuIFdlIGhvcGUgdGhlIG91dC1vZi1zZXJ2aWNlIHRpbWUgKi8KLQkJCS8qIHdvbid0IGJlIHRvbyBsb25nIHRvIGxldCB1cHBlciBsYXllciB0aW1lLW91dCB0aGUgd2FpdGluZyBmcmFtZXMgKi8KLQkJCVJUTVBSZXN1bWVNc2R1VHJhbnNtaXNzaW9uKHBBZCk7Ci0KLQkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7Ci0KLQkJCS8qICovCi0JCQkvKiBTZXQgTEVEIHN0YXR1cyB0byBwcmV2aW91cyBzdGF0dXMuICovCi0JCQkvKiAqLwotCQkJaWYgKHBBZC0+YkxlZE9uU2Nhbm5pbmcpIHsKLQkJCQlwQWQtPmJMZWRPblNjYW5uaW5nID0gRkFMU0U7Ci0JCQkJUlRNUFNldExFRChwQWQsIHBBZC0+TGVkU3RhdHVzKTsKLQkJCX0KLQkJfQotCQlicmVhazsKLQotCWNhc2UgQ05UTF9XQUlUX09JRF9ESVNBU1NPQzoKLQkJaWYgKEVsZW0tPk1zZ1R5cGUgPT0gTVQyX0RJU0FTU09DX0NPTkYpIHsKLQkJCUxpbmtEb3duKHBBZCwgRkFMU0UpOwotCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfSURMRTsKLQkJfQotCQlicmVhazsKLSNpZmRlZiBSVE1QX01BQ19VU0IKLQkJLyogKi8KLQkJLyogVGhpcyBzdGF0ZSBpcyBmb3IgdGhhdCB3ZSB3YW50IHRvIGNvbm5lY3QgdG8gYW4gQVAgYnV0ICovCi0JCS8qIGl0IGRpZG4ndCBmaW5kIG9uIEJTUyBMaXN0IHRhYmxlLiBTbyB3ZSBuZWVkIHRvIHNjYW4gdGhlIGFpciBmaXJzdCwgKi8KLQkJLyogYWZ0ZXIgdGhhdCB3ZSBjYW4gdHJ5IHRvIGNvbm5lY3QgdG8gdGhlIGRlc2lyZWQgQVAgaWYgYXZhaWxhYmxlLiAqLwotCQkvKiAqLwotCWNhc2UgQ05UTF9XQUlUX1NDQU5fRk9SX0NPTk5FQ1Q6Ci0JCWlmIChFbGVtLT5Nc2dUeXBlID09IE1UMl9TQ0FOX0NPTkYpIHsKLQkJCS8qIFJlc3VtZSBUeFJpbmcgYWZ0ZXIgU0NBTklORyBjb21wbGV0ZS4gV2UgaG9wZSB0aGUgb3V0LW9mLXNlcnZpY2UgdGltZSAqLwotCQkJLyogd29uJ3QgYmUgdG9vIGxvbmcgdG8gbGV0IHVwcGVyIGxheWVyIHRpbWUtb3V0IHRoZSB3YWl0aW5nIGZyYW1lcyAqLwotCQkJUlRNUFJlc3VtZU1zZHVUcmFuc21pc3Npb24ocEFkKTsKLSNpZmRlZiBDQ1hfU1VQUE9SVAotCQkJaWYgKHBBZC0+U3RhQ2ZnLkNDWFJlcVR5cGUgIT0gTVNSTl9UWVBFX1VOVVNFRCkgewotCQkJCS8qIENpc2NvIHNjYW4gcmVxdWVzdCBpcyBmaW5pc2hlZCwgcHJlcGFyZSBiZWFjb24gcmVwb3J0ICovCi0JCQkJTWxtZUVucXVldWUocEFkLCBBSVJPTkVUX1NUQVRFX01BQ0hJTkUsCi0JCQkJCSAgICBNVDJfQUlST05FVF9TQ0FOX0RPTkUsIDAsIE5VTEwpOwotCQkJfQotI2VuZGlmIC8qIENDWF9TVVBQT1JUIC8vICovCi0JCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9JRExFOwotCi0JCQkvKiAqLwotCQkJLyogQ2hlY2sgaWYgd2UgY2FuIGNvbm5lY3QgdG8uICovCi0JCQkvKiAqLwotCQkJQnNzVGFibGVTc2lkU29ydChwQWQsICZwQWQtPk1sbWVBdXguU3NpZEJzc1RhYiwKLQkJCQkJIChjaGFyICopIHBBZC0+TWxtZUF1eC4KLQkJCQkJIEF1dG9SZWNvbm5lY3RTc2lkLAotCQkJCQkgcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuKTsKLQkJCWlmIChwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NOciA+IDApIHsKLQkJCQlNbG1lQXV0b1JlY29ubmVjdExhc3RTU0lEKHBBZCk7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0jZW5kaWYgLyogUlRNUF9NQUNfVVNCIC8vICovCi0JZGVmYXVsdDoKLQkJREJHUFJJTlRfRVJSKCJFUlJPUiEgQ05UTCAtIElsbGVnYWwgbWVzc2FnZSB0eXBlKD0lbGQpIiwgRWxlbS0+TXNnVHlwZSk7Ci0JCWJyZWFrOwotCX0KLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgQ250bElkbGVQcm9jKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSkKLXsKLQlzdHJ1Y3QgcnRfbWxtZV9kaXNhc3NvY19yZXEgRGlzYXNzb2NSZXE7Ci0KLQlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JBRElPX09GRikpCi0JCXJldHVybjsKLQotCXN3aXRjaCAoRWxlbS0+TXNnVHlwZSkgewotCWNhc2UgT0lEXzgwMl8xMV9TU0lEOgotCQlDbnRsT2lkU3NpZFByb2MocEFkLCBFbGVtKTsKLQkJYnJlYWs7Ci0KLQljYXNlIE9JRF84MDJfMTFfQlNTSUQ6Ci0JCUNudGxPaWRSVEJzc2lkUHJvYyhwQWQsIEVsZW0pOwotCQlicmVhazsKLQotCWNhc2UgT0lEXzgwMl8xMV9CU1NJRF9MSVNUX1NDQU46Ci0JCUNudGxPaWRTY2FuUHJvYyhwQWQsIEVsZW0pOwotCQlicmVhazsKLQotCWNhc2UgT0lEXzgwMl8xMV9ESVNBU1NPQ0lBVEU6Ci0JCURpc2Fzc29jUGFybUZpbGwocEFkLCAmRGlzYXNzb2NSZXEsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLAotCQkJCSBSRUFTT05fRElTQVNTT0NfU1RBX0xFQVZJTkcpOwotCQlNbG1lRW5xdWV1ZShwQWQsIEFTU09DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0RJU0FTU09DX1JFUSwKLQkJCSAgICBzaXplb2Yoc3RydWN0IHJ0X21sbWVfZGlzYXNzb2NfcmVxKSwgJkRpc2Fzc29jUmVxKTsKLQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9PSURfRElTQVNTT0M7Ci0KLQkJaWYgKHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCAhPQotCQkgICAgV1BBX1NVUFBMSUNBTlRfRU5BQkxFX1dJVEhfV0VCX1VJKSB7Ci0JCQkvKiBTZXQgdGhlIEF1dG9SZWNvbm5lY3RTc2lkIHRvIHByZXZlbnQgaXQgcmVjb25uZWN0IHRvIG9sZCBTU0lEICovCi0JCQkvKiBTaW5jZSBjYWxsaW5nIHRoaXMgaW5kaWNhdGUgdXNlciBkb24ndCB3YW50IHRvIGNvbm5lY3QgdG8gdGhhdCBTU0lEIGFueW1vcmUuICovCi0JCQlwQWQtPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWRMZW4gPSAzMjsKLQkJCU5kaXNaZXJvTWVtb3J5KHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZCwKLQkJCQkgICAgICAgcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuKTsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgTVQyX01MTUVfUk9BTUlOR19SRVE6Ci0JCUNudGxNbG1lUm9hbWluZ1Byb2MocEFkLCBFbGVtKTsKLQkJYnJlYWs7Ci0KLQljYXNlIE9JRF84MDJfMTFfTUlDX0ZBSUxVUkVfUkVQT1JUX0ZSQU1FOgotCQlXcGFNaWNGYWlsdXJlUmVwb3J0RnJhbWUocEFkLCBFbGVtKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIkNOVEwgLSBJbGxlZ2FsIG1lc3NhZ2UgaW4gQ250bElkbGVQcm9jKE1zZ1R5cGU9JWxkKVxuIiwKLQkJCSAgRWxlbS0+TXNnVHlwZSkpOwotCQlicmVhazsKLQl9Ci19Ci0KLXZvaWQgQ250bE9pZFNjYW5Qcm9jKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSkKLXsKLQlzdHJ1Y3QgcnRfbWxtZV9zY2FuX3JlcSBTY2FuUmVxOwotCXVuc2lnbmVkIGxvbmcgQnNzSWR4ID0gQlNTX05PVF9GT1VORDsKLQlzdHJ1Y3QgcnRfYnNzX2VudHJ5IEN1cnJCc3M7Ci0KLQkvKiByZWNvcmQgY3VycmVudCBCU1MgaWYgbmV0d29yayBpcyBjb25uZWN0ZWQuICovCi0JLyogMjAwMy0yLTEzIGRvIG5vdCBpbmNsdWRlIGN1cnJlbnQgSUJTUyBpZiB0aGlzIGlzIHRoZSBvbmx5IFNUQSBpbiB0aGlzIElCU1MuICovCi0JaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSkgewotCQlCc3NJZHggPQotCQkgICAgQnNzU3NpZFRhYmxlU2VhcmNoKCZwQWQtPlNjYW5UYWIsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLAotCQkJCSAgICAgICAodTggKilwQWQtPkNvbW1vbkNmZy5Tc2lkLAotCQkJCSAgICAgICBwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuLAotCQkJCSAgICAgICBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKTsKLQkJaWYgKEJzc0lkeCAhPSBCU1NfTk9UX0ZPVU5EKSB7Ci0JCQlOZGlzTW92ZU1lbW9yeSgmQ3VyckJzcywgJnBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NJZHhdLAotCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHJ0X2Jzc19lbnRyeSkpOwotCQl9Ci0JfQotCS8qIGNsZWFuIHVwIHByZXZpb3VzIFNDQU4gcmVzdWx0LCBhZGQgY3VycmVudCBCU1MgYmFjayB0byB0YWJsZSBpZiBhbnkgKi8KLQlCc3NUYWJsZUluaXQoJnBBZC0+U2NhblRhYik7Ci0JaWYgKEJzc0lkeCAhPSBCU1NfTk9UX0ZPVU5EKSB7Ci0JCS8qIERESyBOb3RlOiBJZiB0aGUgTklDIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgQlNTSUQgYW5kIFNTSUQgKi8KLQkJLyogICAgdGhhdCBhcmUgbm90IGNvbnRhaW5lZCBpbiB0aGUgbGlzdCBvZiBCU1NJRHMgZ2VuZXJhdGVkIGJ5IHRoaXMgc2NhbiwgdGhlICovCi0JCS8qICAgIEJTU0lEIGRlc2NyaXB0aW9uIG9mIHRoZSBjdXJyZW50bHkgYXNzb2NpYXRlZCBCU1NJRCBhbmQgU1NJRCBzaG91bGQgYmUgKi8KLQkJLyogICAgYXBwZW5kZWQgdG8gdGhlIGxpc3Qgb2YgQlNTSURzIGluIHRoZSBOSUMncyBkYXRhYmFzZS4gKi8KLQkJLyogVG8gZW5zdXJlIHRoaXMsIHdlIGFwcGVuZCB0aGlzIEJTUyBhcyB0aGUgZmlyc3QgZW50cnkgaW4gU0NBTiByZXN1bHQgKi8KLQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+U2NhblRhYi5Cc3NFbnRyeVswXSwgJkN1cnJCc3MsCi0JCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBydF9ic3NfZW50cnkpKTsKLQkJcEFkLT5TY2FuVGFiLkJzc05yID0gMTsKLQl9Ci0KLQlTY2FuUGFybUZpbGwocEFkLCAmU2NhblJlcSwgKGNoYXIgKilFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgQlNTX0FOWSwKLQkJICAgICBTQ0FOX0FDVElWRSk7Ci0JTWxtZUVucXVldWUocEFkLCBTWU5DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX1NDQU5fUkVRLAotCQkgICAgc2l6ZW9mKHN0cnVjdCBydF9tbG1lX3NjYW5fcmVxKSwgJlNjYW5SZXEpOwotCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfT0lEX0xJU1RfU0NBTjsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlCZWZvcmUgY2FsbGluZyB0aGlzIHJvdXRpbmUsIHVzZXIgZGVzaXJlZCBTU0lEIHNob3VsZCBhbHJlYWR5IGJlZW4KLQkJcmVjb3JkZWQgaW4gQ29tbW9uQ2ZnLlNzaWRbXQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIENudGxPaWRTc2lkUHJvYyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pCi17Ci0Jc3RydWN0IHJ0X25kaXNfODAyXzExX3NzaWQgKiBwT2lkU3NpZCA9IChzdHJ1Y3QgcnRfbmRpc184MDJfMTFfc3NpZCAqKSBFbGVtLT5Nc2c7Ci0Jc3RydWN0IHJ0X21sbWVfZGlzYXNzb2NfcmVxIERpc2Fzc29jUmVxOwotCXVuc2lnbmVkIGxvbmcgTm93OwotCi0JLyogU3RlcCAxLiByZWNvcmQgdGhlIGRlc2lyZWQgdXNlciBzZXR0aW5ncyB0byBNbG1lQXV4ICovCi0JTmRpc1plcm9NZW1vcnkocEFkLT5NbG1lQXV4LlNzaWQsIE1BWF9MRU5fT0ZfU1NJRCk7Ci0JTmRpc01vdmVNZW1vcnkocEFkLT5NbG1lQXV4LlNzaWQsIHBPaWRTc2lkLT5Tc2lkLCBwT2lkU3NpZC0+U3NpZExlbmd0aCk7Ci0JcEFkLT5NbG1lQXV4LlNzaWRMZW4gPSAodTgpcE9pZFNzaWQtPlNzaWRMZW5ndGg7Ci0JTmRpc1plcm9NZW1vcnkocEFkLT5NbG1lQXV4LkJzc2lkLCBNQUNfQUREUl9MRU4pOwotCXBBZC0+TWxtZUF1eC5Cc3NUeXBlID0gcEFkLT5TdGFDZmcuQnNzVHlwZTsKLQotCXBBZC0+U3RhQ2ZnLmJBdXRvQ29ubmVjdEJ5QnNzaWQgPSBGQUxTRTsKLQotCS8qICovCi0JLyogVXBkYXRlIFJlY29ubmVjdCBTc2lkLCB0aGF0IHVzZXIgZGVzaXJlZCB0byBjb25uZWN0LiAqLwotCS8qICovCi0JTmRpc1plcm9NZW1vcnkocEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkLCBNQVhfTEVOX09GX1NTSUQpOwotCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZCwgcEFkLT5NbG1lQXV4LlNzaWQsCi0JCSAgICAgICBwQWQtPk1sbWVBdXguU3NpZExlbik7Ci0JcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuID0gcEFkLT5NbG1lQXV4LlNzaWRMZW47Ci0KLQkvKiBzdGVwIDIuIGZpbmQgYWxsIG1hdGNoaW5nIEJTUyBpbiB0aGUgbGFzdGVzdCBTQ0FOIHJlc3VsdCAoaW5Cc3NUYWIpICovCi0JLyogICAgJiBsb2cgdGhlbSBpbnRvIE1sbWVBdXguU3NpZEJzc1RhYiBmb3IgbGF0ZXItb24gaXRlcmF0aW9uLiBTb3J0IGJ5IFJTU0kgb3JkZXIgKi8KLQlCc3NUYWJsZVNzaWRTb3J0KHBBZCwgJnBBZC0+TWxtZUF1eC5Tc2lkQnNzVGFiLAotCQkJIChjaGFyICopcEFkLT5NbG1lQXV4LlNzaWQsIHBBZC0+TWxtZUF1eC5Tc2lkTGVuKTsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCJDbnRsT2lkU3NpZFByb2MoKTpDTlRMIC0gJWQgQlNTIG9mICVkIEJTUyBtYXRjaCB0aGUgZGVzaXJlICglZClTU0lEIC0gJXNcbiIsCi0JCSAgcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzTnIsIHBBZC0+U2NhblRhYi5Cc3NOciwKLQkJICBwQWQtPk1sbWVBdXguU3NpZExlbiwgcEFkLT5NbG1lQXV4LlNzaWQpKTsKLQlOZGlzR2V0U3lzdGVtVXBUaW1lKCZOb3cpOwotCi0JaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSAmJgotCSAgICAocEFkLT5Db21tb25DZmcuU3NpZExlbiA9PQotCSAgICAgcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzRW50cnlbMF0uU3NpZExlbikKLQkgICAgJiYgTmRpc0VxdWFsTWVtb3J5KHBBZC0+Q29tbW9uQ2ZnLlNzaWQsCi0JCQkgICAgICAgcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzRW50cnlbMF0uU3NpZCwKLQkJCSAgICAgICBwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuKQotCSAgICAmJiBNQUNfQUREUl9FUVVBTChwQWQtPkNvbW1vbkNmZy5Cc3NpZCwKLQkJCSAgICAgIHBBZC0+TWxtZUF1eC5Tc2lkQnNzVGFiLkJzc0VudHJ5WzBdLkJzc2lkKSkgewotCQkvKiBDYXNlIDEuIGFscmVhZHkgY29ubmVjdGVkIHdpdGggYW4gQVAgd2hvIGhhcyB0aGUgZGVzaXJlZCBTU0lEICovCi0JCS8qICAgICAgICAgd2l0aCBoaWdoZXN0IFJTU0kgKi8KLQotCQkvKiBBZGQgY2hlY2tpbmcgTW9kZSAiTEVBUCIgZm9yIENDWCAxLjAgKi8KLQkJaWYgKCgocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKSB8fAotCQkgICAgIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spIHx8Ci0JCSAgICAgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIpIHx8Ci0JCSAgICAgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spCi0JCSAgICApICYmCi0JCSAgICAocEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQgPT0gV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVEKSkgewotCQkJLyogY2FzZSAxLjEgRm9yIFdQQSwgV1BBLVBTSywgaWYgdGhlIDF4IHBvcnQgaXMgbm90IHNlY3VyZWQsIHdlIGhhdmUgdG8gcmVkbyAqLwotCQkJLyogICAgICAgICAgY29ubmVjdGlvbiBwcm9jZXNzICovCi0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCJDbnRsT2lkU3NpZFByb2MoKTpDTlRMIC0gZGlzYXNzb2NpYXRlIHdpdGggY3VycmVudCBBUC4uLlxuIikpOwotCQkJRGlzYXNzb2NQYXJtRmlsbChwQWQsICZEaXNhc3NvY1JlcSwKLQkJCQkJIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLAotCQkJCQkgUkVBU09OX0RJU0FTU09DX1NUQV9MRUFWSU5HKTsKLQkJCU1sbWVFbnF1ZXVlKHBBZCwgQVNTT0NfU1RBVEVfTUFDSElORSwKLQkJCQkgICAgTVQyX01MTUVfRElTQVNTT0NfUkVRLAotCQkJCSAgICBzaXplb2Yoc3RydWN0IHJ0X21sbWVfZGlzYXNzb2NfcmVxKSwKLQkJCQkgICAgJkRpc2Fzc29jUmVxKTsKLQkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfRElTQVNTT0M7Ci0JCX0gZWxzZSBpZiAocEFkLT5iQ29uZmlnQ2hhbmdlZCA9PSBUUlVFKSB7Ci0JCQkvKiBjYXNlIDEuMiBJbXBvcnRhbnQgQ29uZmlnIGhhcyBjaGFuZ2VkLCB3ZSBoYXZlIHRvIHJlY29ubmVjdCB0byB0aGUgc2FtZSBBUCAqLwotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiQ250bE9pZFNzaWRQcm9jKCk6Q05UTCAtIGRpc2Fzc29jaWF0ZSB3aXRoIGN1cnJlbnQgQVAgQmVjYXVzZSBjb25maWcgY2hhbmdlZC4uLlxuIikpOwotCQkJRGlzYXNzb2NQYXJtRmlsbChwQWQsICZEaXNhc3NvY1JlcSwKLQkJCQkJIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLAotCQkJCQkgUkVBU09OX0RJU0FTU09DX1NUQV9MRUFWSU5HKTsKLQkJCU1sbWVFbnF1ZXVlKHBBZCwgQVNTT0NfU1RBVEVfTUFDSElORSwKLQkJCQkgICAgTVQyX01MTUVfRElTQVNTT0NfUkVRLAotCQkJCSAgICBzaXplb2Yoc3RydWN0IHJ0X21sbWVfZGlzYXNzb2NfcmVxKSwKLQkJCQkgICAgJkRpc2Fzc29jUmVxKTsKLQkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfRElTQVNTT0M7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBjYXNlIDEuMy4gYWxyZWFkeSBjb25uZWN0ZWQgdG8gdGhlIFNTSUQgd2l0aCBoaWdoZXN0IFJTU0kuICovCi0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCJDbnRsT2lkU3NpZFByb2MoKTpDTlRMIC0gYWxyZWFkeSB3aXRoIHRoaXMgQlNTSUQuIGlnbm9yZSB0aGlzIFNFVF9TU0lEIHJlcXVlc3RcbiIpKTsKLQkJCS8qICovCi0JCQkvKiAoSENUIDEyLjEpIDFjX3dsYW5fbWVkaWFldmVudHMgcmVxdWlyZWQgKi8KLQkJCS8qIG1lZGlhIGNvbm5lY3QgZXZlbnRzIGFyZSBpbmRpY2F0ZWQgd2hlbiBhc3NvY2lhdGluZyB3aXRoIHRoZSBzYW1lIEFQICovCi0JCQkvKiAqLwotCQkJaWYgKElORlJBX09OKHBBZCkpIHsKLQkJCQkvKiAqLwotCQkJCS8qIFNpbmNlIE1lZGlhU3RhdGUgYWxyZWFkeSBpcyBOZGlzTWVkaWFTdGF0ZUNvbm5lY3RlZCAqLwotCQkJCS8qIFdlIGp1c3QgaW5kaWNhdGUgdGhlIGNvbm5lY3QgZXZlbnQgYWdhaW4gdG8gbWVldCB0aGUgV0hRTCByZXF1aXJlZC4gKi8KLQkJCQkvKiAqLwotCQkJCXBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID0KLQkJCQkgICAgTmRpc01lZGlhU3RhdGVDb25uZWN0ZWQ7Ci0JCQkJUlRNUF9JbmRpY2F0ZU1lZGlhU3RhdGUocEFkKTsKLQkJCQlwQWQtPkV4dHJhSW5mbyA9IEdFTkVSQUxfTElOS19VUDsJLyogVXBkYXRlIGV4dHJhIGluZm9ybWF0aW9uIHRvIGxpbmsgaXMgdXAgKi8KLQkJCX0KLQotCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfSURMRTsKLQkJCVJ0bXBPU1dyaWVsZXNzRXZlbnRTZW5kKHBBZCwgU0lPQ0dJV0FQLCAtMSwKLQkJCQkJCSZwQWQtPk1sbWVBdXguQnNzaWRbMF0sIE5VTEwsCi0JCQkJCQkwKTsKLQkJfQotCX0gZWxzZSBpZiAoSU5GUkFfT04ocEFkKSkgewotCQkvKiAqLwotCQkvKiBGb3IgUlQ2MSAqLwotCQkvKiBbODg4ODhdIE9JRF84MDJfMTFfU1NJRCBzaG91bGQgaGF2ZSByZXR1cm5lZCBORFRFU1RfV0VQX0FQMihSZXR1cm5lZDogKSAqLwotCQkvKiBSVDYxIG1heSBsb3N0IFNTSUQsIGFuZCBub3QgY29ubmVjdCB0byBORFRFU1RfV0VQX0FQMiBhbmQgd2lsbCBjb25uZWN0IHRvIE5EVEVTVF9XRVBfQVAyIGJ5IEF1dG9yZWNvbm5lY3QgKi8KLQkJLyogQnV0IG1lZGlhIHN0YXR1cyBpcyBjb25uZWN0ZWQsIHNvIHRoZSBTU0lEIG5vdCByZXBvcnQgY29ycmVjdGx5LiAqLwotCQkvKiAqLwotCQlpZiAoIVNTSURfRVFVQUwKLQkJICAgIChwQWQtPkNvbW1vbkNmZy5Tc2lkLCBwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuLAotCQkgICAgIHBBZC0+TWxtZUF1eC5Tc2lkLCBwQWQtPk1sbWVBdXguU3NpZExlbikpIHsKLQkJCS8qICovCi0JCQkvKiBEaWZmZXJlbnQgU1NJRCBtZWFucyBub3QgUm9hbWluZyBjYXNlLCBzbyB3ZSBsZXQgTGlua0Rvd24oKSB0byBJbmRpY2F0ZSBhIGRpc2Nvbm5lY3QgZXZlbnQuICovCi0JCQkvKiAqLwotCQkJcEFkLT5NbG1lQXV4LkN1cnJSZXFJc0Zyb21OZGlzID0gVFJVRTsKLQkJfQotCQkvKiBjYXNlIDIuIGFjdGl2ZSBJTkZSQSBhc3NvY2lhdGlvbiBleGlzdGVudCAqLwotCQkvKiAgICByb2FtaW5nIGlzIGRvbmUgd2l0aGluIG1pbmlwb3J0IGRyaXZlciwgbm90aGluZyB0byBkbyB3aXRoIGNvbmZpZ3VyYXRpb24gKi8KLQkJLyogICAgdXRpbGl0eS4gc28gdXBvbiBhIG5ldyBTRVQoT0lEXzgwMl8xMV9TU0lEKSBpcyByZWNlaXZlZCwgd2UganVzdCAqLwotCQkvKiAgICBkaXNhc3NvY2lhdGUgd2l0aCB0aGUgY3VycmVudCBhc3NvY2lhdGVkIEFQLCAqLwotCQkvKiAgICB0aGVuIHBlcmZvcm0gYSBuZXcgYXNzb2NpYXRpb24gd2l0aCB0aGlzIG5ldyBTU0lELCBubyBtYXR0ZXIgdGhlICovCi0JCS8qICAgIG5ldy9vbGQgU1NJRCBhcmUgdGhlIHNhbWUgb3Igbm90LiAqLwotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIkNudGxPaWRTc2lkUHJvYygpOkNOVEwgLSBkaXNhc3NvY2lhdGUgd2l0aCBjdXJyZW50IEFQLi4uXG4iKSk7Ci0JCURpc2Fzc29jUGFybUZpbGwocEFkLCAmRGlzYXNzb2NSZXEsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLAotCQkJCSBSRUFTT05fRElTQVNTT0NfU1RBX0xFQVZJTkcpOwotCQlNbG1lRW5xdWV1ZShwQWQsIEFTU09DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0RJU0FTU09DX1JFUSwKLQkJCSAgICBzaXplb2Yoc3RydWN0IHJ0X21sbWVfZGlzYXNzb2NfcmVxKSwgJkRpc2Fzc29jUmVxKTsKLQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9ESVNBU1NPQzsKLQl9IGVsc2UgewotCQlpZiAoQURIT0NfT04ocEFkKSkgewotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiQ250bE9pZFNzaWRQcm9jKCk6Q05UTCAtIGRyb3AgY3VycmVudCBBREhPQ1xuIikpOwotCQkJTGlua0Rvd24ocEFkLCBGQUxTRSk7Ci0JCQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwKLQkJCQkJICAgIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKTsKLQkJCXBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID0gTmRpc01lZGlhU3RhdGVEaXNjb25uZWN0ZWQ7Ci0JCQlSVE1QX0luZGljYXRlTWVkaWFTdGF0ZShwQWQpOwotCQkJcEFkLT5FeHRyYUluZm8gPSBHRU5FUkFMX0xJTktfRE9XTjsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAoIkNudGxPaWRTc2lkUHJvYygpOk5ESVNfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1QgRXZlbnQgQyFcbiIpKTsKLQkJfQotCi0JCWlmICgocEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzTnIgPT0gMCkgJiYKLQkJICAgIChwQWQtPlN0YUNmZy5iQXV0b1JlY29ubmVjdCA9PSBUUlVFKSAmJgotCQkgICAgKHBBZC0+TWxtZUF1eC5Cc3NUeXBlID09IEJTU19JTkZSQSkgJiYKLQkJICAgIChNbG1lVmFsaWRhdGVTU0lEKHBBZC0+TWxtZUF1eC5Tc2lkLCBwQWQtPk1sbWVBdXguU3NpZExlbikKLQkJICAgICA9PSBUUlVFKQotCQkgICAgKSB7Ci0JCQlzdHJ1Y3QgcnRfbWxtZV9zY2FuX3JlcSBTY2FuUmVxOwotCi0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCJDbnRsT2lkU3NpZFByb2MoKTpDTlRMIC0gTm8gbWF0Y2hpbmcgQlNTLCBzdGFydCBhIG5ldyBzY2FuXG4iKSk7Ci0JCQlTY2FuUGFybUZpbGwocEFkLCAmU2NhblJlcSwgKGNoYXIgKilwQWQtPk1sbWVBdXguU3NpZCwKLQkJCQkgICAgIHBBZC0+TWxtZUF1eC5Tc2lkTGVuLCBCU1NfQU5ZLAotCQkJCSAgICAgU0NBTl9BQ1RJVkUpOwotCQkJTWxtZUVucXVldWUocEFkLCBTWU5DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX1NDQU5fUkVRLAotCQkJCSAgICBzaXplb2Yoc3RydWN0IHJ0X21sbWVfc2Nhbl9yZXEpLCAmU2NhblJlcSk7Ci0JCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0KLQkJCSAgICBDTlRMX1dBSVRfT0lEX0xJU1RfU0NBTjsKLQkJCS8qIFJlc2V0IE1pc3NlZCBzY2FuIG51bWJlciAqLwotCQkJcEFkLT5TdGFDZmcuTGFzdFNjYW5UaW1lID0gTm93OwotCQl9IGVsc2UgewotCQkJcEFkLT5NbG1lQXV4LkJzc0lkeCA9IDA7Ci0JCQlJdGVyYXRlT25Cc3NUYWIocEFkKTsKLQkJfQotCX0KLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgQ250bE9pZFJUQnNzaWRQcm9jKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSkKLXsKLQl1bnNpZ25lZCBsb25nIEJzc0lkeDsKLQl1OCAqcE9pZEJzc2lkID0gKHU4ICopRWxlbS0+TXNnOwotCXN0cnVjdCBydF9tbG1lX2Rpc2Fzc29jX3JlcSBEaXNhc3NvY1JlcTsKLQlzdHJ1Y3QgcnRfbWxtZV9qb2luX3JlcSBKb2luUmVxOwotCi0JLyogcmVjb3JkIHVzZXIgZGVzaXJlZCBzZXR0aW5ncyAqLwotCUNPUFlfTUFDX0FERFIocEFkLT5NbG1lQXV4LkJzc2lkLCBwT2lkQnNzaWQpOwotCXBBZC0+TWxtZUF1eC5Cc3NUeXBlID0gcEFkLT5TdGFDZmcuQnNzVHlwZTsKLQotCS8qIGZpbmQgdGhlIGRlc2lyZWQgQlNTIGluIHRoZSBsYXRlc3QgU0NBTiByZXN1bHQgdGFibGUgKi8KLQlCc3NJZHggPSBCc3NUYWJsZVNlYXJjaCgmcEFkLT5TY2FuVGFiLCBwT2lkQnNzaWQsIHBBZC0+TWxtZUF1eC5DaGFubmVsKTsKLQlpZiAoQnNzSWR4ID09IEJTU19OT1RfRk9VTkQpIHsKLQkJc3RydWN0IHJ0X21sbWVfc2Nhbl9yZXEgU2NhblJlcTsKLQotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIkNOVEwgLSBCU1NJRCBub3QgZm91bmQuIHJlcGx5IE5ESVNfU1RBVFVTX05PVF9BQ0NFUFRFRFxuIikpOwotCQkvKnBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7ICovCi0KLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJDTlRMIC0gQlNTSUQgbm90IGZvdW5kLiBzdGFydCBhIG5ldyBzY2FuXG4iKSk7Ci0JCVNjYW5QYXJtRmlsbChwQWQsICZTY2FuUmVxLCAoY2hhciAqKXBBZC0+TWxtZUF1eC5Tc2lkLAotCQkJICAgICBwQWQtPk1sbWVBdXguU3NpZExlbiwgQlNTX0FOWSwgU0NBTl9BQ1RJVkUpOwotCQlNbG1lRW5xdWV1ZShwQWQsIFNZTkNfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfU0NBTl9SRVEsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBydF9tbG1lX3NjYW5fcmVxKSwgJlNjYW5SZXEpOwotCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9XQUlUX09JRF9MSVNUX1NDQU47Ci0JCS8qIFJlc2V0IE1pc3NlZCBzY2FuIG51bWJlciAqLwotCQlOZGlzR2V0U3lzdGVtVXBUaW1lKCZwQWQtPlN0YUNmZy5MYXN0U2NhblRpbWUpOwotCQlyZXR1cm47Ci0JfQotCS8qICovCi0JLyogVXBkYXRlIFJlY29ubmVjdCBTc2lkLCB0aGF0IHVzZXIgZGVzaXJlZCB0byBjb25uZWN0LiAqLwotCS8qICovCi0JTmRpc1plcm9NZW1vcnkocEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkLCBNQVhfTEVOX09GX1NTSUQpOwotCXBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZExlbiA9Ci0JICAgIHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NJZHhdLlNzaWRMZW47Ci0JTmRpc01vdmVNZW1vcnkocEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkLAotCQkgICAgICAgcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc0lkeF0uU3NpZCwKLQkJICAgICAgIHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NJZHhdLlNzaWRMZW4pOwotCi0JLyogY29weSB0aGUgbWF0Y2hlZCBCU1MgZW50cnkgZnJvbSBTY2FuVGFiIHRvIE1sbWVBdXguU3NpZEJzc1RhYi4gV2h5PyAqLwotCS8qIEJlY2F1c2Ugd2UgbmVlZCB0aGlzIGVudHJ5IHRvIGJlY29tZSB0aGUgSk9JTiB0YXJnZXQgaW4gbGF0ZXIgb24gU1lOQyBzdGF0ZSBtYWNoaW5lICovCi0JcEFkLT5NbG1lQXV4LkJzc0lkeCA9IDA7Ci0JcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzTnIgPSAxOwotCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NFbnRyeVswXSwKLQkJICAgICAgICZwQWQtPlNjYW5UYWIuQnNzRW50cnlbQnNzSWR4XSwgc2l6ZW9mKHN0cnVjdCBydF9ic3NfZW50cnkpKTsKLQotCS8qIEFkZCBTU0lEIGludG8gTWxtZUF1eCBmb3Igc2l0ZSBzdXJ2ZXkgam9pbmluZyBoaWRkZW4gU1NJRCAqLwotCXBBZC0+TWxtZUF1eC5Tc2lkTGVuID0gcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc0lkeF0uU3NpZExlbjsKLQlOZGlzTW92ZU1lbW9yeShwQWQtPk1sbWVBdXguU3NpZCwgcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc0lkeF0uU3NpZCwKLQkJICAgICAgIHBBZC0+TWxtZUF1eC5Tc2lkTGVuKTsKLQotCXsKLQkJaWYgKElORlJBX09OKHBBZCkpIHsKLQkJCS8qIGRpc2Fzc29jIGZyb20gY3VycmVudCBBUCBmaXJzdCAqLwotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiQ05UTCAtIGRpc2Fzc29jaWF0ZSB3aXRoIGN1cnJlbnQgQVAgLi4uXG4iKSk7Ci0JCQlEaXNhc3NvY1Bhcm1GaWxsKHBBZCwgJkRpc2Fzc29jUmVxLAotCQkJCQkgcEFkLT5Db21tb25DZmcuQnNzaWQsCi0JCQkJCSBSRUFTT05fRElTQVNTT0NfU1RBX0xFQVZJTkcpOwotCQkJTWxtZUVucXVldWUocEFkLCBBU1NPQ19TVEFURV9NQUNISU5FLAotCQkJCSAgICBNVDJfTUxNRV9ESVNBU1NPQ19SRVEsCi0JCQkJICAgIHNpemVvZihzdHJ1Y3QgcnRfbWxtZV9kaXNhc3NvY19yZXEpLAotCQkJCSAgICAmRGlzYXNzb2NSZXEpOwotCi0JCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9XQUlUX0RJU0FTU09DOwotCQl9IGVsc2UgewotCQkJaWYgKEFESE9DX09OKHBBZCkpIHsKLQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkJICgiQ05UTCAtIGRyb3AgY3VycmVudCBBREhPQ1xuIikpOwotCQkJCUxpbmtEb3duKHBBZCwgRkFMU0UpOwotCQkJCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLAotCQkJCQkJICAgIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKTsKLQkJCQlwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSA9Ci0JCQkJICAgIE5kaXNNZWRpYVN0YXRlRGlzY29ubmVjdGVkOwotCQkJCVJUTVBfSW5kaWNhdGVNZWRpYVN0YXRlKHBBZCk7Ci0JCQkJcEFkLT5FeHRyYUluZm8gPSBHRU5FUkFMX0xJTktfRE9XTjsKLQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkJICgiTkRJU19TVEFUVVNfTUVESUFfRElTQ09OTkVDVCBFdmVudCBDIVxuIikpOwotCQkJfQotCQkJLyogQ2hhbmdlIHRoZSB3ZXBzdGF0dXMgdG8gb3JpZ2luYWwgd2Vwc3RhdHVzICovCi0JCQlwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPSBwQWQtPlN0YUNmZy5PcmlnV2VwU3RhdHVzOwotCQkJcEFkLT5TdGFDZmcuUGFpckNpcGhlciA9IHBBZC0+U3RhQ2ZnLk9yaWdXZXBTdGF0dXM7Ci0JCQlwQWQtPlN0YUNmZy5Hcm91cENpcGhlciA9IHBBZC0+U3RhQ2ZnLk9yaWdXZXBTdGF0dXM7Ci0KLQkJCS8qIENoZWNrIGNpcGhlciBzdWl0ZSwgQVAgbXVzdCBoYXZlIG1vcmUgc2VjdXJlZCBjaXBoZXIgdGhhbiBzdGF0aW9uIHNldHRpbmcgKi8KLQkJCS8qIFNldCB0aGUgUGFpcndpc2UgYW5kIEdyb3VwIGNpcGhlciB0byBtYXRjaCB0aGUgaW50ZW5kZWQgQVAgc2V0dGluZyAqLwotCQkJLyogV2UgY2FuIG9ubHkgY29ubmVjdCB0byBBUCB3aXRoIGxlc3Mgc2VjdXJlZCBjaXBoZXIgc2V0dGluZyAqLwotCQkJaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpCi0JCQkgICAgfHwgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09Ci0JCQkJTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLKSkgewotCQkJCXBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID0KLQkJCQkgICAgcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc0lkeF0uV1BBLgotCQkJCSAgICBHcm91cENpcGhlcjsKLQotCQkJCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0KLQkJCQkgICAgcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc0lkeF0uV1BBLgotCQkJCSAgICBQYWlyQ2lwaGVyKQotCQkJCQlwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID0KLQkJCQkJICAgIHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NJZHhdLldQQS4KLQkJCQkJICAgIFBhaXJDaXBoZXI7Ci0JCQkJZWxzZSBpZiAocEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc0lkeF0uV1BBLgotCQkJCQkgUGFpckNpcGhlckF1eCAhPSBOZGlzODAyXzExV0VQRGlzYWJsZWQpCi0JCQkJCXBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPQotCQkJCQkgICAgcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc0lkeF0uV1BBLgotCQkJCQkgICAgUGFpckNpcGhlckF1eDsKLQkJCQllbHNlCS8qIFRoZXJlIGlzIG5vIFBhaXJDaXBoZXIgQXV4LCBkb3duZ3JhZGUgb3VyIGNhcGFiaWxpdHkgdG8gVEtJUCAqLwotCQkJCQlwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID0KLQkJCQkJICAgIE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ7Ci0JCQl9IGVsc2UKLQkJCSAgICBpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIpCi0JCQkJfHwgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09Ci0JCQkJICAgIE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spKSB7Ci0JCQkJcEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPQotCQkJCSAgICBwQWQtPlNjYW5UYWIuQnNzRW50cnlbQnNzSWR4XS5XUEEyLgotCQkJCSAgICBHcm91cENpcGhlcjsKLQotCQkJCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0KLQkJCQkgICAgcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc0lkeF0uV1BBMi4KLQkJCQkgICAgUGFpckNpcGhlcikKLQkJCQkJcEFkLT5TdGFDZmcuUGFpckNpcGhlciA9Ci0JCQkJCSAgICBwQWQtPlNjYW5UYWIuQnNzRW50cnlbQnNzSWR4XS5XUEEyLgotCQkJCQkgICAgUGFpckNpcGhlcjsKLQkJCQllbHNlIGlmIChwQWQtPlNjYW5UYWIuQnNzRW50cnlbQnNzSWR4XS5XUEEyLgotCQkJCQkgUGFpckNpcGhlckF1eCAhPSBOZGlzODAyXzExV0VQRGlzYWJsZWQpCi0JCQkJCXBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPQotCQkJCQkgICAgcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc0lkeF0uV1BBMi4KLQkJCQkJICAgIFBhaXJDaXBoZXJBdXg7Ci0JCQkJZWxzZQkvKiBUaGVyZSBpcyBubyBQYWlyQ2lwaGVyIEF1eCwgZG93bmdyYWRlIG91ciBjYXBhYmlsaXR5IHRvIFRLSVAgKi8KLQkJCQkJcEFkLT5TdGFDZmcuUGFpckNpcGhlciA9Ci0JCQkJCSAgICBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOwotCi0JCQkJLyogUlNOIGNhcGFiaWxpdHkgKi8KLQkJCQlwQWQtPlN0YUNmZy5Sc25DYXBhYmlsaXR5ID0KLQkJCQkgICAgcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc0lkeF0uV1BBMi4KLQkJCQkgICAgUnNuQ2FwYWJpbGl0eTsKLQkJCX0KLQkJCS8qIFNldCBNaXggY2lwaGVyIGZsYWcgKi8KLQkJCXBBZC0+U3RhQ2ZnLmJNaXhDaXBoZXIgPQotCQkJICAgIChwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID09Ci0JCQkgICAgIHBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyKSA/IEZBTFNFIDogVFJVRTsKLQkJCS8qaWYgKHBBZC0+U3RhQ2ZnLmJNaXhDaXBoZXIgPT0gVFJVRSkKLQkJCSAgIHsKLQkJCSAgIC8vIElmIG1peCBjaXBoZXIsIHJlLWJ1aWxkIFJTTklFCi0JCQkgICBSVE1QTWFrZVJTTklFKHBBZCwgcEFkLT5TdGFDZmcuQXV0aE1vZGUsIHBBZC0+U3RhQ2ZnLldlcFN0YXR1cywgMCk7Ci0JCQkgICB9ICovCi0JCQkvKiBObyBhY3RpdmUgYXNzb2NpYXRpb24sIGpvaW4gdGhlIEJTUyBpbW1lZGlhdGVseSAqLwotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIGpvaW5pbmcgJXBNIC4uLlxuIiwKLQkJCQkJcE9pZEJzc2lkKSk7Ci0KLQkJCUpvaW5QYXJtRmlsbChwQWQsICZKb2luUmVxLCBwQWQtPk1sbWVBdXguQnNzSWR4KTsKLQkJCU1sbWVFbnF1ZXVlKHBBZCwgU1lOQ19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9KT0lOX1JFUSwKLQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBydF9tbG1lX2pvaW5fcmVxKSwgJkpvaW5SZXEpOwotCi0JCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9XQUlUX0pPSU47Ci0JCX0KLQl9Ci19Ci0KLS8qIFJvYW1pbmcgaXMgdGhlIG9ubHkgZXh0ZXJuYWwgcmVxdWVzdCB0cmlnZ2VyaW5nIENOVEwgc3RhdGUgbWFjaGluZSAqLwotLyogZGVzcGl0ZSBvZiBvdGhlciAiU0VUIE9JRCIgb3BlcmF0aW9uLiBBbGwgIlNFVCBPSUQiIHJlbGF0ZWQgb3BlcmF0aW9ucyAqLwotLyogaGFwcGVuIGluIHNlcXVlbmNlLCBiZWNhdXNlIG5vIG90aGVyIFNFVCBPSUQgd2lsbCBiZSBzZW50IHRvIHRoaXMgZGV2aWNlICovCi0vKiB1bnRpbCB0aGUgdGhlIHByZXZpb3VzIFNFVCBvcGVyYXRpb24gaXMgY29tcGxldGUgKHN1Y2Nlc3NmdWwgbyBmYWlsZWQpLiAqLwotLyogU28sIGhvdyBkbyB3ZSBxdWFyYW50ZWUgdGhpcyBST0FNSU5HIHJlcXVlc3Qgd29uJ3QgY29ycnVwdCBvdGhlciAiU0VUIE9JRCI/ICovCi0vKiBvciBiZWVuIGNvcnJ1cHRlZCBieSBvdGhlciAiU0VUIE9JRCI/ICovCi0vKiAqLwotLyogSVJRTCA9IERJU1BBVENIX0xFVkVMICovCi12b2lkIENudGxNbG1lUm9hbWluZ1Byb2Moc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKQotewotCXU4IEJCUFZhbHVlID0gMDsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNOVEwgLSBSb2FtaW5nIGluIE1sbWVBdXguUm9hbVRhYi4uLlxuIikpOwotCi0JewotCQkvKkxldCBCQlAgcmVnaXN0ZXIgYXQgMjBNSHogdG8gZG8gKGZhc3QpIHJvYW1pbmcuICovCi0JCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJkJCUFZhbHVlKTsKLQkJQkJQVmFsdWUgJj0gKH4weDE4KTsKLQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgQkJQVmFsdWUpOwotCi0JCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPk1sbWVBdXguU3NpZEJzc1RhYiwgJnBBZC0+TWxtZUF1eC5Sb2FtVGFiLAotCQkJICAgICAgIHNpemVvZihwQWQtPk1sbWVBdXguUm9hbVRhYikpOwotCQlwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NOciA9IHBBZC0+TWxtZUF1eC5Sb2FtVGFiLkJzc05yOwotCi0JCUJzc1RhYmxlU29ydEJ5UnNzaSgmcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIpOwotCQlwQWQtPk1sbWVBdXguQnNzSWR4ID0gMDsKLQkJSXRlcmF0ZU9uQnNzVGFiKHBBZCk7Ci0JfQotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBDbnRsV2FpdERpc2Fzc29jUHJvYyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pCi17Ci0Jc3RydWN0IHJ0X21sbWVfc3RhcnRfcmVxIFN0YXJ0UmVxOwotCi0JaWYgKEVsZW0tPk1zZ1R5cGUgPT0gTVQyX0RJU0FTU09DX0NPTkYpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIERpcy1hc3NvY2lhdGUgc3VjY2Vzc2Z1bFxuIikpOwotCi0JCWlmIChwQWQtPkNvbW1vbkNmZy5iV2lyZWxlc3NFdmVudCkgewotCQkJUlRNUFNlbmRXaXJlbGVzc0V2ZW50KHBBZCwgSVdfRElTQVNTT0NfRVZFTlRfRkxBRywKLQkJCQkJICAgICAgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS4KLQkJCQkJICAgICAgQWRkciwgQlNTMCwgMCk7Ci0JCX0KLQotCQlMaW5rRG93bihwQWQsIEZBTFNFKTsKLQotCQkvKiBjYXNlIDEuIG5vIG1hdGNoaW5nIEJTUywgYW5kIHVzZXIgd2FudHMgQURIT0MsIHNvIHdlIGp1c3Qgc3RhcnQgYSBuZXcgb25lICovCi0JCWlmICgocEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzTnIgPT0gMCkKLQkJICAgICYmIChwQWQtPlN0YUNmZy5Cc3NUeXBlID09IEJTU19BREhPQykpIHsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAoIkNOVEwgLSBObyBtYXRjaGluZyBCU1MsIHN0YXJ0IGEgbmV3IEFESE9DIChTc2lkPSVzKS4uLlxuIiwKLQkJCQkgIHBBZC0+TWxtZUF1eC5Tc2lkKSk7Ci0JCQlTdGFydFBhcm1GaWxsKHBBZCwgJlN0YXJ0UmVxLCAoY2hhciAqKXBBZC0+TWxtZUF1eC5Tc2lkLAotCQkJCSAgICAgIHBBZC0+TWxtZUF1eC5Tc2lkTGVuKTsKLQkJCU1sbWVFbnF1ZXVlKHBBZCwgU1lOQ19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9TVEFSVF9SRVEsCi0JCQkJICAgIHNpemVvZihzdHJ1Y3QgcnRfbWxtZV9zdGFydF9yZXEpLCAmU3RhcnRSZXEpOwotCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9TVEFSVDsKLQkJfQotCQkvKiBjYXNlIDIuIHRyeSBlYWNoIG1hdGNoZWQgQlNTICovCi0JCWVsc2UgewotCQkJcEFkLT5NbG1lQXV4LkJzc0lkeCA9IDA7Ci0KLQkJCUl0ZXJhdGVPbkJzc1RhYihwQWQpOwotCQl9Ci0JfQotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBDbnRsV2FpdEpvaW5Qcm9jKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSkKLXsKLQl1MTYgUmVhc29uOwotCXN0cnVjdCBydF9tbG1lX2F1dGhfcmVxIEF1dGhSZXE7Ci0KLQlpZiAoRWxlbS0+TXNnVHlwZSA9PSBNVDJfSk9JTl9DT05GKSB7Ci0JCU5kaXNNb3ZlTWVtb3J5KCZSZWFzb24sIEVsZW0tPk1zZywgc2l6ZW9mKHUxNikpOwotCQlpZiAoUmVhc29uID09IE1MTUVfU1VDQ0VTUykgewotCQkJLyogMS4gam9pbmVkIGFuIElCU1MsIHdlIGFyZSBwcmV0dHkgbXVjaCBkb25lIGhlcmUgKi8KLQkJCWlmIChwQWQtPk1sbWVBdXguQnNzVHlwZSA9PSBCU1NfQURIT0MpIHsKLQkJCQkvKiAqLwotCQkJCS8qIDVHIGJhbmRzIHJ1bGVzIG9mIEphcGFuOiAqLwotCQkJCS8qIEFkIGhvYyBtdXN0IGJlIGRpc2FibGVkIGluIFc1MyhjaDUyLDU2LDYwLDY0KSBjaGFubmVscy4gKi8KLQkJCQkvKiAqLwotCQkJCWlmICgocEFkLT5Db21tb25DZmcuYklFRUU4MDIxMUggPT0gMSkgJiYKLQkJCQkgICAgUmFkYXJDaGFubmVsQ2hlY2socEFkLAotCQkJCQkJICAgICAgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkKLQkJCQkgICAgKSB7Ci0JCQkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPQotCQkJCQkgICAgQ05UTF9JRExFOwotCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkJCSAoIkNOVEwgLSBDaGFubmVsPSVkLCBKb2luIGFkaG9jIG9uIFc1Myg1Miw1Niw2MCw2NCkgQ2hhbm5lbHMgYXJlIG5vdCBhY2NlcHRlZFxuIiwKLQkJCQkJCSAgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkpOwotCQkJCQlyZXR1cm47Ci0JCQkJfQotCi0JCQkJTGlua1VwKHBBZCwgQlNTX0FESE9DKTsKLQkJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9JRExFOwotCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkoIkNOVEwgLSBqb2luIHRoZSBJQlNTID0gJXBNIC4uLlxuIiwKLQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLkJzc2lkKSk7Ci0KLQkJCQlwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSA9Ci0JCQkJICAgIE5kaXNNZWRpYVN0YXRlQ29ubmVjdGVkOwotCQkJCXBBZC0+RXh0cmFJbmZvID0gR0VORVJBTF9MSU5LX1VQOwotCQkJfQotCQkJLyogMi4gam9pbmVkIGEgbmV3IElORlJBIG5ldHdvcmssIHN0YXJ0IGZyb20gYXV0aGVudGljYXRpb24gKi8KLQkJCWVsc2UgewotCQkJCXsKLQkJCQkJLyogZWl0aGVyIE5kaXM4MDJfMTFBdXRoTW9kZVNoYXJlZCBvciBOZGlzODAyXzExQXV0aE1vZGVBdXRvU3dpdGNoLCB0cnkgc2hhcmVkIGtleSBmaXJzdCAqLwotCQkJCQlpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09Ci0JCQkJCSAgICAgTmRpczgwMl8xMUF1dGhNb2RlU2hhcmVkKQotCQkJCQkgICAgfHwgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09Ci0JCQkJCQlOZGlzODAyXzExQXV0aE1vZGVBdXRvU3dpdGNoKSkgewotCQkJCQkJQXV0aFBhcm1GaWxsKHBBZCwgJkF1dGhSZXEsCi0JCQkJCQkJICAgICBwQWQtPk1sbWVBdXguQnNzaWQsCi0JCQkJCQkJICAgICBBVVRIX01PREVfS0VZKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCUF1dGhQYXJtRmlsbChwQWQsICZBdXRoUmVxLAotCQkJCQkJCSAgICAgcEFkLT5NbG1lQXV4LkJzc2lkLAotCQkJCQkJCSAgICAgQVVUSF9NT0RFX09QRU4pOwotCQkJCQl9Ci0JCQkJCU1sbWVFbnF1ZXVlKHBBZCwgQVVUSF9TVEFURV9NQUNISU5FLAotCQkJCQkJICAgIE1UMl9NTE1FX0FVVEhfUkVRLAotCQkJCQkJICAgIHNpemVvZgotCQkJCQkJICAgIChzdHJ1Y3QgcnRfbWxtZV9hdXRoX3JlcSksCi0JCQkJCQkgICAgJkF1dGhSZXEpOwotCQkJCX0KLQotCQkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPQotCQkJCSAgICBDTlRMX1dBSVRfQVVUSDsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIDMuIGZhaWxlZCwgdHJ5IG5leHQgQlNTICovCi0JCQlwQWQtPk1sbWVBdXguQnNzSWR4Kys7Ci0JCQlJdGVyYXRlT25Cc3NUYWIocEFkKTsKLQkJfQotCX0KLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgQ250bFdhaXRTdGFydFByb2Moc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKQotewotCXUxNiBSZXN1bHQ7Ci0KLQlpZiAoRWxlbS0+TXNnVHlwZSA9PSBNVDJfU1RBUlRfQ09ORikgewotCQlOZGlzTW92ZU1lbW9yeSgmUmVzdWx0LCBFbGVtLT5Nc2csIHNpemVvZih1MTYpKTsKLQkJaWYgKFJlc3VsdCA9PSBNTE1FX1NVQ0NFU1MpIHsKLQkJCS8qICovCi0JCQkvKiA1RyBiYW5kcyBydWxlcyBvZiBKYXBhbjogKi8KLQkJCS8qIEFkIGhvYyBtdXN0IGJlIGRpc2FibGVkIGluIFc1MyhjaDUyLDU2LDYwLDY0KSBjaGFubmVscy4gKi8KLQkJCS8qICovCi0JCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLmJJRUVFODAyMTFIID09IDEpICYmCi0JCQkgICAgUmFkYXJDaGFubmVsQ2hlY2socEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKQotCQkJICAgICkgewotCQkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7Ci0JCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJCSAoIkNOVEwgLSBDaGFubmVsPSVkLCBTdGFydCBhZGhvYyBvbiBXNTMoNTIsNTYsNjAsNjQpIENoYW5uZWxzIGFyZSBub3QgYWNjZXB0ZWRcbiIsCi0JCQkJCSAgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkpOwotCQkJCXJldHVybjsKLQkJCX0KLQkJCU5kaXNaZXJvTWVtb3J5KCZwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLgotCQkJCSAgICAgICBNQ1NTZXRbMF0sIDE2KTsKLQkJCWlmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpIHsKLQkJCQlOX0NoYW5uZWxDaGVjayhwQWQpOwotCQkJCVNldENvbW1vbkhUKHBBZCk7Ci0JCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+TWxtZUF1eC5BZGRIdEluZm8sCi0JCQkJCSAgICAgICAmcEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLAotCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBydF9hZGRfaHRfaW5mb19pZSkpOwotCQkJCVJUTVBDaGVja0h0KHBBZCwgQlNTSURfV0NJRCwKLQkJCQkJICAgICZwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHksCi0JCQkJCSAgICAmcEFkLT5Db21tb25DZmcuQWRkSFRJbmZvKTsKLQkJCQlwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLmJIdEVuYWJsZSA9Ci0JCQkJICAgIFRSVUU7Ci0JCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uCi0JCQkJCSAgICAgICBNQ1NTZXRbMF0sCi0JCQkJCSAgICAgICAmcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5LgotCQkJCQkgICAgICAgTUNTU2V0WzBdLCAxNik7Ci0JCQkJQ09QWV9IVFNFVFRJTkdTX0ZST01fTUxNRV9BVVhfVE9fQUNUSVZFX0NGRwotCQkJCSAgICAocEFkKTsKLQotCQkJCWlmICgocEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby4KLQkJCQkgICAgIENoYW5uZWxXaWR0aCA9PSBCV180MCkKLQkJCQkgICAgJiYgKHBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mby5BZGRIdEluZm8uCi0JCQkJCUV4dENoYW5PZmZzZXQgPT0gRVhUQ0hBX0FCT1ZFKSkgewotCQkJCQlwQWQtPk1sbWVBdXguQ2VudHJhbENoYW5uZWwgPQotCQkJCQkgICAgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCArIDI7Ci0JCQkJfSBlbHNlCi0JCQkJICAgIGlmICgocEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby4KLQkJCQkJIENoYW5uZWxXaWR0aCA9PSBCV180MCkKLQkJCQkJJiYgKHBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mby5BZGRIdEluZm8uCi0JCQkJCSAgICBFeHRDaGFuT2Zmc2V0ID09IEVYVENIQV9CRUxPVykpIHsKLQkJCQkJcEFkLT5NbG1lQXV4LkNlbnRyYWxDaGFubmVsID0KLQkJCQkJICAgIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgLSAyOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJcEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5iSHRFbmFibGUgPQotCQkJCSAgICBGQUxTRTsKLQkJCX0KLQkJCUxpbmtVcChwQWQsIEJTU19BREhPQyk7Ci0JCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9JRExFOwotCQkJLyogQmVmb3JlIHNlbmQgYmVhY29uLCBkcml2ZXIgbmVlZCBkbyByYWRhciBkZXRlY3Rpb24gKi8KLQkJCWlmICgocEFkLT5Db21tb25DZmcuQ2hhbm5lbCA+IDE0KQotCQkJICAgICYmIChwQWQtPkNvbW1vbkNmZy5iSUVFRTgwMjExSCA9PSAxKQotCQkJICAgICYmIFJhZGFyQ2hhbm5lbENoZWNrKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkpIHsKLQkJCQlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5SRE1vZGUgPQotCQkJCSAgICBSRF9TSUxFTkNFX01PREU7Ci0JCQkJcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkRDb3VudCA9IDA7Ci0JCQl9Ci0KLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCSgiQ05UTCAtIHN0YXJ0IGEgbmV3IElCU1MgPSAlcE0gLi4uXG4iLAotCQkJCQlwQWQtPkNvbW1vbkNmZy5Cc3NpZCkpOwotCQl9IGVsc2UgewotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiQ05UTCAtIFN0YXJ0IElCU1MgZmFpbC4gQlVHIVxuIikpOwotCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfSURMRTsKLQkJfQotCX0KLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgQ250bFdhaXRBdXRoUHJvYyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pCi17Ci0JdTE2IFJlYXNvbjsKLQlzdHJ1Y3QgcnRfbWxtZV9hc3NvY19yZXEgQXNzb2NSZXE7Ci0Jc3RydWN0IHJ0X21sbWVfYXV0aF9yZXEgQXV0aFJlcTsKLQotCWlmIChFbGVtLT5Nc2dUeXBlID09IE1UMl9BVVRIX0NPTkYpIHsKLQkJTmRpc01vdmVNZW1vcnkoJlJlYXNvbiwgRWxlbS0+TXNnLCBzaXplb2YodTE2KSk7Ci0JCWlmIChSZWFzb24gPT0gTUxNRV9TVUNDRVNTKSB7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDTlRMIC0gQVVUSCBPS1xuIikpOwotCQkJQXNzb2NQYXJtRmlsbChwQWQsICZBc3NvY1JlcSwgcEFkLT5NbG1lQXV4LkJzc2lkLAotCQkJCSAgICAgIHBBZC0+TWxtZUF1eC5DYXBhYmlsaXR5SW5mbywKLQkJCQkgICAgICBBU1NPQ19USU1FT1VULAotCQkJCSAgICAgIHBBZC0+U3RhQ2ZnLkRlZmF1bHRMaXN0ZW5Db3VudCk7Ci0KLQkJCXsKLQkJCQlNbG1lRW5xdWV1ZShwQWQsIEFTU09DX1NUQVRFX01BQ0hJTkUsCi0JCQkJCSAgICBNVDJfTUxNRV9BU1NPQ19SRVEsCi0JCQkJCSAgICBzaXplb2Yoc3RydWN0IHJ0X21sbWVfYXNzb2NfcmVxKSwKLQkJCQkJICAgICZBc3NvY1JlcSk7Ci0KLQkJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0KLQkJCQkgICAgQ05UTF9XQUlUX0FTU09DOwotCQkJfQotCQl9IGVsc2UgewotCQkJLyogVGhpcyBmYWlsIG1heSBiZWNhdXNlIG9mIHRoZSBBUCBhbHJlYWR5IGtlZXAgdXMgaW4gaXRzIE1BQyB0YWJsZSB3aXRob3V0ICovCi0JCQkvKiBhZ2Vpbmctb3V0LiBUaGUgcHJldmlvdXMgYXV0aGVudGljYXRpb24gYXR0ZW1wdCBtdXN0IGhhdmUgbGV0IGl0IHJlbW92ZSB1cy4gKi8KLQkJCS8qIHNvIHRyeSBBdXRoZW50aWNhdGlvbiBhZ2FpbiBtYXkgaGVscC4gRm9yIEQtTGluayBEV0wtOTAwQVArIGNvbXBhdGliaWxpdHkuICovCi0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCJDTlRMIC0gQVVUSCBGQUlMLCB0cnkgYWdhaW4uLi5cbiIpKTsKLQotCQkJewotCQkJCWlmICgocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0KLQkJCQkgICAgIE5kaXM4MDJfMTFBdXRoTW9kZVNoYXJlZCkKLQkJCQkgICAgfHwgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09Ci0JCQkJCU5kaXM4MDJfMTFBdXRoTW9kZUF1dG9Td2l0Y2gpKSB7Ci0JCQkJCS8qIGVpdGhlciBOZGlzODAyXzExQXV0aE1vZGVTaGFyZWQgb3IgTmRpczgwMl8xMUF1dGhNb2RlQXV0b1N3aXRjaCwgdHJ5IHNoYXJlZCBrZXkgZmlyc3QgKi8KLQkJCQkJQXV0aFBhcm1GaWxsKHBBZCwgJkF1dGhSZXEsCi0JCQkJCQkgICAgIHBBZC0+TWxtZUF1eC5Cc3NpZCwKLQkJCQkJCSAgICAgQVVUSF9NT0RFX0tFWSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJQXV0aFBhcm1GaWxsKHBBZCwgJkF1dGhSZXEsCi0JCQkJCQkgICAgIHBBZC0+TWxtZUF1eC5Cc3NpZCwKLQkJCQkJCSAgICAgQVVUSF9NT0RFX09QRU4pOwotCQkJCX0KLQkJCQlNbG1lRW5xdWV1ZShwQWQsIEFVVEhfU1RBVEVfTUFDSElORSwKLQkJCQkJICAgIE1UMl9NTE1FX0FVVEhfUkVRLAotCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBydF9tbG1lX2F1dGhfcmVxKSwKLQkJCQkJICAgICZBdXRoUmVxKTsKLQotCQkJfQotCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9BVVRIMjsKLQkJfQotCX0KLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgQ250bFdhaXRBdXRoUHJvYzIoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKQotewotCXUxNiBSZWFzb247Ci0Jc3RydWN0IHJ0X21sbWVfYXNzb2NfcmVxIEFzc29jUmVxOwotCXN0cnVjdCBydF9tbG1lX2F1dGhfcmVxIEF1dGhSZXE7Ci0KLQlpZiAoRWxlbS0+TXNnVHlwZSA9PSBNVDJfQVVUSF9DT05GKSB7Ci0JCU5kaXNNb3ZlTWVtb3J5KCZSZWFzb24sIEVsZW0tPk1zZywgc2l6ZW9mKHUxNikpOwotCQlpZiAoUmVhc29uID09IE1MTUVfU1VDQ0VTUykgewotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIEFVVEggT0tcbiIpKTsKLQkJCUFzc29jUGFybUZpbGwocEFkLCAmQXNzb2NSZXEsIHBBZC0+TWxtZUF1eC5Cc3NpZCwKLQkJCQkgICAgICBwQWQtPk1sbWVBdXguQ2FwYWJpbGl0eUluZm8sCi0JCQkJICAgICAgQVNTT0NfVElNRU9VVCwKLQkJCQkgICAgICBwQWQtPlN0YUNmZy5EZWZhdWx0TGlzdGVuQ291bnQpOwotCQkJewotCQkJCU1sbWVFbnF1ZXVlKHBBZCwgQVNTT0NfU1RBVEVfTUFDSElORSwKLQkJCQkJICAgIE1UMl9NTE1FX0FTU09DX1JFUSwKLQkJCQkJICAgIHNpemVvZihzdHJ1Y3QgcnRfbWxtZV9hc3NvY19yZXEpLAotCQkJCQkgICAgJkFzc29jUmVxKTsKLQotCQkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPQotCQkJCSAgICBDTlRMX1dBSVRfQVNTT0M7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09Ci0JCQkgICAgIE5kaXM4MDJfMTFBdXRoTW9kZUF1dG9Td2l0Y2gpCi0JCQkgICAgJiYgKHBBZC0+TWxtZUF1eC5BbGcgPT0gTmRpczgwMl8xMUF1dGhNb2RlU2hhcmVkKSkgewotCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkgKCJDTlRMIC0gQVVUSCBGQUlMLCB0cnkgT1BFTiBzeXN0ZW0uLi5cbiIpKTsKLQkJCQlBdXRoUGFybUZpbGwocEFkLCAmQXV0aFJlcSwgcEFkLT5NbG1lQXV4LkJzc2lkLAotCQkJCQkgICAgIE5kaXM4MDJfMTFBdXRoTW9kZU9wZW4pOwotCQkJCU1sbWVFbnF1ZXVlKHBBZCwgQVVUSF9TVEFURV9NQUNISU5FLAotCQkJCQkgICAgTVQyX01MTUVfQVVUSF9SRVEsCi0JCQkJCSAgICBzaXplb2Yoc3RydWN0IHJ0X21sbWVfYXV0aF9yZXEpLAotCQkJCQkgICAgJkF1dGhSZXEpOwotCi0JCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9Ci0JCQkJICAgIENOVExfV0FJVF9BVVRIMjsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogbm90IHN1Y2Nlc3MsIHRyeSBuZXh0IEJTUyAqLwotCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkgKCJDTlRMIC0gQVVUSCBGQUlMLCBnaXZlIHVwOyB0cnkgbmV4dCBCU1NcbiIpKTsKLQkJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9JRExFOwkvKj8/Pz8/Pz8gKi8KLQkJCQlwQWQtPk1sbWVBdXguQnNzSWR4Kys7Ci0JCQkJSXRlcmF0ZU9uQnNzVGFiKHBBZCk7Ci0JCQl9Ci0JCX0KLQl9Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIENudGxXYWl0QXNzb2NQcm9jKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSkKLXsKLQl1MTYgUmVhc29uOwotCi0JaWYgKEVsZW0tPk1zZ1R5cGUgPT0gTVQyX0FTU09DX0NPTkYpIHsKLQkJTmRpc01vdmVNZW1vcnkoJlJlYXNvbiwgRWxlbS0+TXNnLCBzaXplb2YodTE2KSk7Ci0JCWlmIChSZWFzb24gPT0gTUxNRV9TVUNDRVNTKSB7Ci0JCQlpZiAocEFkLT5Db21tb25DZmcuYldpcmVsZXNzRXZlbnQpIHsKLQkJCQlSVE1QU2VuZFdpcmVsZXNzRXZlbnQocEFkLCBJV19BU1NPQ19FVkVOVF9GTEFHLAotCQkJCQkJICAgICAgcEFkLT5NYWNUYWIuCi0JCQkJCQkgICAgICBDb250ZW50W0JTU0lEX1dDSURdLkFkZHIsCi0JCQkJCQkgICAgICBCU1MwLCAwKTsKLQkJCX0KLQotCQkJTGlua1VwKHBBZCwgQlNTX0lORlJBKTsKLQkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCJDTlRMIC0gQXNzb2NpYXRpb24gc3VjY2Vzc2Z1bCBvbiBCU1MgIyVsZFxuIiwKLQkJCQkgIHBBZC0+TWxtZUF1eC5Cc3NJZHgpKTsKLQkJfSBlbHNlIHsKLQkJCS8qIG5vdCBzdWNjZXNzLCB0cnkgbmV4dCBCU1MgKi8KLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAoIkNOVEwgLSBBc3NvY2lhdGlvbiBmYWlscyBvbiBCU1MgIyVsZFxuIiwKLQkJCQkgIHBBZC0+TWxtZUF1eC5Cc3NJZHgpKTsKLQkJCXBBZC0+TWxtZUF1eC5Cc3NJZHgrKzsKLQkJCUl0ZXJhdGVPbkJzc1RhYihwQWQpOwotCQl9Ci0JfQotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBDbnRsV2FpdFJlYXNzb2NQcm9jKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSkKLXsKLQl1MTYgUmVzdWx0OwotCi0JaWYgKEVsZW0tPk1zZ1R5cGUgPT0gTVQyX1JFQVNTT0NfQ09ORikgewotCQlOZGlzTW92ZU1lbW9yeSgmUmVzdWx0LCBFbGVtLT5Nc2csIHNpemVvZih1MTYpKTsKLQkJaWYgKFJlc3VsdCA9PSBNTE1FX1NVQ0NFU1MpIHsKLQkJCS8qIHNlbmQgd2lyZWxlc3MgZXZlbnQgLSBmb3IgYXNzb2NpYXRpb24gKi8KLQkJCWlmIChwQWQtPkNvbW1vbkNmZy5iV2lyZWxlc3NFdmVudCkKLQkJCQlSVE1QU2VuZFdpcmVsZXNzRXZlbnQocEFkLCBJV19BU1NPQ19FVkVOVF9GTEFHLAotCQkJCQkJICAgICAgcEFkLT5NYWNUYWIuCi0JCQkJCQkgICAgICBDb250ZW50W0JTU0lEX1dDSURdLkFkZHIsCi0JCQkJCQkgICAgICBCU1MwLCAwKTsKLQotCQkJLyogKi8KLQkJCS8qIE5ESVMgcmVxdWlyZXMgYSBuZXcgTGluayBVUCBpbmRpY2F0aW9uIGJ1dCBubyBMaW5rIERvd24gZm9yIFJFLUFTU09DICovCi0JCQkvKiAqLwotCQkJTGlua1VwKHBBZCwgQlNTX0lORlJBKTsKLQotCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfSURMRTsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAoIkNOVEwgLSBSZS1hc3NvY2l0aW9uIHN1Y2Nlc3NmdWwgb24gQlNTICMlbGRcbiIsCi0JCQkJICBwQWQtPk1sbWVBdXguUm9hbUlkeCkpOwotCQl9IGVsc2UgewotCQkJLyogcmVhc3NvYyBmYWlsZWQsIHRyeSB0byBwaWNrIG5leHQgQlNTIGluIHRoZSBCU1MgVGFibGUgKi8KLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAoIkNOVEwgLSBSZS1hc3NvY2l0aW9uIGZhaWxzIG9uIEJTUyAjJWxkXG4iLAotCQkJCSAgcEFkLT5NbG1lQXV4LlJvYW1JZHgpKTsKLQkJCXsKLQkJCQlwQWQtPk1sbWVBdXguUm9hbUlkeCsrOwotCQkJCUl0ZXJhdGVPbkJzc1RhYjIocEFkKTsKLQkJCX0KLQkJfQotCX0KLX0KLQotdm9pZCBBZGhvY1R1cm5PblFvcyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0jZGVmaW5lIEFDMF9ERUZfVFhPUAkJMAotI2RlZmluZSBBQzFfREVGX1RYT1AJCTAKLSNkZWZpbmUgQUMyX0RFRl9UWE9QCQk5NAotI2RlZmluZSBBQzNfREVGX1RYT1AJCTQ3Ci0KLQkvKiBUdXJuIG9uIFFPcyBpZiB1c2UgSFQgcmF0ZS4gKi8KLQlpZiAocEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5iVmFsaWQgPT0gRkFMU0UpIHsKLQkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5iVmFsaWQgPSBUUlVFOwotCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLkFpZnNuWzBdID0gMzsKLQkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5BaWZzblsxXSA9IDc7Ci0JCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQWlmc25bMl0gPSAxOwotCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLkFpZnNuWzNdID0gMTsKLQotCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLkN3bWluWzBdID0gNDsKLQkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5Dd21pblsxXSA9IDQ7Ci0JCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQ3dtaW5bMl0gPSAzOwotCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLkN3bWluWzNdID0gMjsKLQotCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLkN3bWF4WzBdID0gMTA7Ci0JCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQ3dtYXhbMV0gPSA2OwotCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLkN3bWF4WzJdID0gNDsKLQkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5Dd21heFszXSA9IDM7Ci0KLQkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5UeG9wWzBdID0gMDsKLQkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5UeG9wWzFdID0gMDsKLQkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5UeG9wWzJdID0gQUMyX0RFRl9UWE9QOwotCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLlR4b3BbM10gPSBBQzNfREVGX1RYT1A7Ci0JfQotCUFzaWNTZXRFZGNhUGFybShwQWQsICZwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtKTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgTGlua1VwKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggQnNzVHlwZSkKLXsKLQl1bnNpZ25lZCBsb25nIE5vdzsKLQl1MzIgRGF0YTsKLQlCT09MRUFOIENhbmNlbGxlZDsKLQl1OCBWYWx1ZSA9IDAsIGlkeCA9IDAsIEhhc2hJZHggPSAwOwotCXN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKnBFbnRyeSA9IE5VTEwsICpwQ3VyckVudHJ5ID0gTlVMTDsKLQotCS8qIEluaXQgQ2hhbm5lbFF1YWxpdHkgdG8gcHJldmVudCBERUFEX0NRSSBhdCBpbml0aWFsIExpbmtVcCAqLwotCXBBZC0+TWxtZS5DaGFubmVsUXVhbGl0eSA9IDUwOwotCi0JcEVudHJ5ID0gTWFjVGFibGVMb29rdXAocEFkLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7Ci0JaWYgKHBFbnRyeSkgewotCQlNYWNUYWJsZURlbGV0ZUVudHJ5KHBBZCwgcEVudHJ5LT5BaWQsIHBFbnRyeS0+QWRkcik7Ci0JCXBFbnRyeSA9IE5VTEw7Ci0JfQotCi0JcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF07Ci0KLQkvKiAqLwotCS8qIEFTU09DIC0gRGlzYXNzb2NUaW1lb3V0QWN0aW9uICovCi0JLyogQ05UTCAtIERpcy1hc3NvY2lhdGUgc3VjY2Vzc2Z1bCAqLwotCS8qICEgTElOSyBET1dOICEgKi8KLQkvKiBbODg4ODhdIE9JRF84MDJfMTFfU1NJRCBzaG91bGQgaGF2ZSByZXR1cm5lZCBORFRFU1RfV0VQX0FQMihSZXR1cm5lZDogKSAqLwotCS8qICovCi0JLyogVG8gcHJldmVudCBEaXNhc3NvY1RpbWVvdXRBY3Rpb24gdG8gY2FsbCBMaW5rIGRvd24gYWZ0ZXIgd2UgbGluayB1cCwgKi8KLQkvKiBjYW5jZWwgdGhlIERpc2Fzc29jVGltZXIgbm8gbWF0dGVyIHdoYXQgaXQgc3RhcnQgb3Igbm90LiAqLwotCS8qICovCi0JUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguRGlzYXNzb2NUaW1lciwgJkNhbmNlbGxlZCk7Ci0KLQlDT1BZX1NFVFRJTkdTX0ZST01fTUxNRV9BVVhfVE9fQUNUSVZFX0NGRyhwQWQpOwotCi0JQ09QWV9IVFNFVFRJTkdTX0ZST01fTUxNRV9BVVhfVE9fQUNUSVZFX0NGRyhwQWQpOwotCi0jaWZkZWYgUlRNUF9NQUNfUENJCi0JLyogQmVmb3JlIHBvd2VyIHNhdmUgYmVmb3JlIGxpbmsgdXAgZnVuY3Rpb24sIFdlIHdpbGwgZm9yY2UgdXNlIDFSLiAqLwotCS8qIFNvIGFmdGVyIGxpbmsgdXAsIGNoZWNrIFJ4IGFudGVubmEgIyBhZ2Fpbi4gKi8KLQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsICZWYWx1ZSk7Ci0JaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMykgewotCQlWYWx1ZSB8PSAoMHgxMCk7Ci0JfSBlbHNlIGlmIChwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID09IDIpIHsKLQkJVmFsdWUgfD0gKDB4OCk7Ci0JfSBlbHNlIGlmIChwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID09IDEpIHsKLQkJVmFsdWUgfD0gKDB4MCk7Ci0JfQotCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIFZhbHVlKTsKLQlwQWQtPlN0YUNmZy5CQlBSMyA9IFZhbHVlOwotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotCi0JaWYgKEJzc1R5cGUgPT0gQlNTX0FESE9DKSB7Ci0JCU9QU1RBVFVTX1NFVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19BREhPQ19PTik7Ci0JCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0lORlJBX09OKTsKLQotCQlpZiAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA+PSBQSFlfMTFBQkdOX01JWEVEKQotCQkJQWRob2NUdXJuT25Rb3MocEFkKTsKLQotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBZGhvYyBMSU5LIFVQIVxuIikpOwotCX0gZWxzZSB7Ci0JCU9QU1RBVFVTX1NFVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19JTkZSQV9PTik7Ci0JCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0FESE9DX09OKTsKLQotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJbmZyYSBMSU5LIFVQIVxuIikpOwotCX0KLQotCS8qIDMqMyAqLwotCS8qIHJlc2V0IFR4IGJlYW1mb3JtaW5nIGJpdCAqLwotCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJlZhbHVlKTsKLQlWYWx1ZSAmPSAofjB4MDEpOwotCVZhbHVlIHw9IHBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5UeEJGOwotCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsIFZhbHVlKTsKLQotCS8qIENoYW5nZSB0byBBUCBjaGFubmVsICovCi0JaWYgKChwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCA+IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpCi0JICAgICYmIChwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5DaGFubmVsV2lkdGggPT0gQldfNDApKSB7Ci0JCS8qIE11c3QgdXNlIDQwTUh6LiAqLwotCQlwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPSBCV180MDsKLQkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCwgRkFMU0UpOwotCQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCk7Ci0KLQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCAmVmFsdWUpOwotCQlWYWx1ZSAmPSAofjB4MTgpOwotCQlWYWx1ZSB8PSAweDEwOwotCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCBWYWx1ZSk7Ci0KLQkJLyogIFJYIDogY29udHJvbCBjaGFubmVsIGF0IGxvd2VyICovCi0JCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJlZhbHVlKTsKLQkJVmFsdWUgJj0gKH4weDIwKTsKLQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgVmFsdWUpOwotI2lmZGVmIFJUTVBfTUFDX1BDSQotCQlwQWQtPlN0YUNmZy5CQlBSMyA9IFZhbHVlOwotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotCi0JCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfQkFORF9DRkcsICZEYXRhKTsKLQkJRGF0YSAmPSAweGZmZmZmZmZlOwotCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9CQU5EX0NGRywgRGF0YSk7Ci0KLQkJaWYgKHBBZC0+TUFDVmVyc2lvbiA9PSAweDI4NjAwMTAwKSB7Ci0JCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2OSwgMHgxQSk7Ci0JCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3MCwgMHgwQSk7Ci0JCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3MywgMHgxNik7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJydDI4NjBDICFcbiIpKTsKLQkJfQotCi0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiNDBNSHogTG93ZXIgTElOSyBVUCEgQ29udHJvbCBDaGFubmVsIGF0IEJlbG93LiBDZW50cmFsID0gJWQgXG4iLAotCQkJICBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCkpOwotCX0gZWxzZSBpZiAoKHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsIDwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkKLQkJICAgJiYgKHBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkNoYW5uZWxXaWR0aCA9PQotCQkgICAgICAgQldfNDApKSB7Ci0JCS8qIE11c3QgdXNlIDQwTUh6LiAqLwotCQlwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPSBCV180MDsKLQkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCwgRkFMU0UpOwotCQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCk7Ci0KLQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCAmVmFsdWUpOwotCQlWYWx1ZSAmPSAofjB4MTgpOwotCQlWYWx1ZSB8PSAweDEwOwotCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCBWYWx1ZSk7Ci0KLQkJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9CQU5EX0NGRywgJkRhdGEpOwotCQlEYXRhIHw9IDB4MTsKLQkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfQkFORF9DRkcsIERhdGEpOwotCi0JCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJlZhbHVlKTsKLQkJVmFsdWUgfD0gKDB4MjApOwotCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBWYWx1ZSk7Ci0jaWZkZWYgUlRNUF9NQUNfUENJCi0JCXBBZC0+U3RhQ2ZnLkJCUFIzID0gVmFsdWU7Ci0jZW5kaWYgLyogUlRNUF9NQUNfUENJIC8vICovCi0KLQkJaWYgKHBBZC0+TUFDVmVyc2lvbiA9PSAweDI4NjAwMTAwKSB7Ci0JCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2OSwgMHgxQSk7Ci0JCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3MCwgMHgwQSk7Ci0JCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3MywgMHgxNik7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJydDI4NjBDICFcbiIpKTsKLQkJfQotCi0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiNDBNSHogVXBwZXIgTElOSyBVUCEgQ29udHJvbCBDaGFubmVsIGF0IFVwcGVyQ2VudHJhbCA9ICVkIFxuIiwKLQkJCSAgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwpKTsKLQl9IGVsc2UgewotCQlwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPSBCV18yMDsKLQkJcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsOwotCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwsIEZBTFNFKTsKLQkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7Ci0KLQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCAmVmFsdWUpOwotCQlWYWx1ZSAmPSAofjB4MTgpOwotCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCBWYWx1ZSk7Ci0KLQkJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9CQU5EX0NGRywgJkRhdGEpOwotCQlEYXRhICY9IDB4ZmZmZmZmZmU7Ci0JCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX0JBTkRfQ0ZHLCBEYXRhKTsKLQotCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsICZWYWx1ZSk7Ci0JCVZhbHVlICY9ICh+MHgyMCk7Ci0JCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIFZhbHVlKTsKLSNpZmRlZiBSVE1QX01BQ19QQ0kKLQkJcEFkLT5TdGFDZmcuQkJQUjMgPSBWYWx1ZTsKLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLQotCQlpZiAocEFkLT5NQUNWZXJzaW9uID09IDB4Mjg2MDAxMDApIHsKLQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY5LCAweDE2KTsKLQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjcwLCAweDA4KTsKLQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjczLCAweDExKTsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoInJ0Mjg2MEMgIVxuIikpOwotCQl9Ci0KLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiMjBNSHogTElOSyBVUCFcbiIpKTsKLQl9Ci0KLQlSVE1QU2V0QUdDSW5pdFZhbHVlKHBBZCwgcEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXKTsKLQotCS8qICovCi0JLyogU2F2ZSBCQlBfUjY2IHZhbHVlLCBpdCB3aWxsIGJlIHVzZWQgaW4gUlRVU0JSZXN1bWVNc2R1VHJhbnNtaXNzaW9uICovCi0JLyogKi8KLQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY2LAotCQkJCSAgICAmcEFkLT5CYnBUdW5pbmcuUjY2Q3VycmVudFZhbHVlKTsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCJMSU5LIFVQISAoQnNzVHlwZT0lZCwgQUlEPSVkLCBzc2lkPSVzLCBDaGFubmVsPSVkLCBDZW50cmFsQ2hhbm5lbCA9ICVkKVxuIiwKLQkJICBCc3NUeXBlLCBwQWQtPlN0YUFjdGl2ZS5BaWQsIHBBZC0+Q29tbW9uQ2ZnLlNzaWQsCi0JCSAgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwpKTsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCJMSU5LIFVQISAoRGVuc2l0eSA9JWQsIClcbiIsCi0JCSAgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5NcGR1RGVuc2l0eSkpOwotCi0JQXNpY1NldEJzc2lkKHBBZCwgcEFkLT5Db21tb25DZmcuQnNzaWQpOwotCi0JQXNpY1NldFNsb3RUaW1lKHBBZCwgVFJVRSk7Ci0JQXNpY1NldEVkY2FQYXJtKHBBZCwgJnBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0pOwotCi0JLyogQ2FsbCB0aGlzIGZvciBSVFMgcHJvdGVjdGlvbiBmb3IgbGVnYWN5IHJhdGUsIHdlIHdpbGwgYWx3YXlzIGVuYWJsZSBSVFMgdGhyZXNob2xkLCBidXQgbm9ybWFsbHkgaXQgd2lsbCBub3QgaGl0ICovCi0JQXNpY1VwZGF0ZVByb3RlY3QocEFkLCAwLCAoT0ZETVNFVFBST1RFQ1QgfCBDQ0tTRVRQUk9URUNUKSwgVFJVRSwKLQkJCSAgRkFMU0UpOwotCi0JaWYgKChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLmJIdEVuYWJsZSA9PSBUUlVFKSkgewotCQkvKiBVcGRhdGUgSFQgcHJvdGVjdGlvbiBmb3IgYmFzZWQgb24gQVAncyBvcGVyYXRpbmcgbW9kZS4gKi8KLQkJaWYgKHBBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvMi5Ob25HZlByZXNlbnQgPT0gMSkgewotCQkJQXNpY1VwZGF0ZVByb3RlY3QocEFkLAotCQkJCQkgIHBBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvMi4KLQkJCQkJICBPcGVyYWlvbk1vZGUsIEFMTE5fU0VUUFJPVEVDVCwgRkFMU0UsCi0JCQkJCSAgVFJVRSk7Ci0JCX0gZWxzZQotCQkJQXNpY1VwZGF0ZVByb3RlY3QocEFkLAotCQkJCQkgIHBBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvMi4KLQkJCQkJICBPcGVyYWlvbk1vZGUsIEFMTE5fU0VUUFJPVEVDVCwgRkFMU0UsCi0JCQkJCSAgRkFMU0UpOwotCX0KLQotCU5kaXNaZXJvTWVtb3J5KCZwQWQtPkRyc0NvdW50ZXJzLCBzaXplb2Yoc3RydWN0IHJ0X2NvdW50ZXJfZHJzKSk7Ci0KLQlOZGlzR2V0U3lzdGVtVXBUaW1lKCZOb3cpOwotCXBBZC0+U3RhQ2ZnLkxhc3RCZWFjb25SeFRpbWUgPSBOb3c7CS8qIGxhc3QgUlggdGltZXN0YW1wICovCi0KLQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLlR4UHJlYW1ibGUgIT0gUnQ4MDJfMTFQcmVhbWJsZUxvbmcpICYmCi0JICAgIENBUF9JU19TSE9SVF9QUkVBTUJMRV9PTihwQWQtPlN0YUFjdGl2ZS5DYXBhYmlsaXR5SW5mbykpIHsKLQkJTWxtZVNldFR4UHJlYW1ibGUocEFkLCBSdDgwMl8xMVByZWFtYmxlU2hvcnQpOwotCX0KLQotCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0FHR1JFR0FUSU9OX0lOVVNFRCk7Ci0KLQlpZiAocEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkRNb2RlID09IFJEX1NJTEVOQ0VfTU9ERSkgewotCX0KLQlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5SRE1vZGUgPSBSRF9OT1JNQUxfTU9ERTsKLQotCWlmIChCc3NUeXBlID09IEJTU19BREhPQykgewotCQlNYWtlSWJzc0JlYWNvbihwQWQpOwotCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPiAxNCkKLQkJICAgICYmIChwQWQtPkNvbW1vbkNmZy5iSUVFRTgwMjExSCA9PSAxKQotCQkgICAgJiYgUmFkYXJDaGFubmVsQ2hlY2socEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKSkgewotCQkJOwkvKkRvIG5vdGhpbmcgKi8KLQkJfSBlbHNlIHsKLQkJCUFzaWNFbmFibGVJYnNzU3luYyhwQWQpOwotCQl9Ci0KLQkJLyogSW4gYWQgaG9jIG1vZGUsIHVzZSBNQUMgdGFibGUgZnJvbSBpbmRleCAxLiAqLwotCQkvKiBwLnMgQVNJQyB1c2UgYWxsIDB4ZmYgYXMgdGVybWluYXRpb24gb2YgV0NJRCB0YWJsZSBzZWFyY2guVG8gcHJldmVudCBpdCdzIDB4ZmYtZmYtZmYtZmYtZmYtZmYsIFdyaXRlIDAgaGVyZS4gKi8KLQkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1dDSURfQkFTRSwgMHgwMCk7Ci0JCVJUTVBfSU9fV1JJVEUzMihwQWQsIDB4MTgwOCwgMHgwMCk7Ci0KLQkJLyogSWYgV0VQIGlzIGVuYWJsZWQsIGFkZCBrZXkgbWF0ZXJpYWwgYW5kIGNpcGhlckFsZyBpbnRvIEFzaWMgKi8KLQkJLyogRmlsbCBpbiBTaGFyZWQgS2V5IFRhYmxlKG9mZnNldDogMHg2YzAwKSBhbmQgU2hhcmVkIEtleSBNb2RlKG9mZnNldDogMHg3MDAwKSAqLwotCi0JCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMVdFUEVuYWJsZWQpIHsKLQkJCXU4ICpLZXk7Ci0JCQl1OCBDaXBoZXJBbGc7Ci0KLQkJCWZvciAoaWR4ID0gMDsgaWR4IDwgU0hBUkVfS0VZX05VTTsgaWR4KyspIHsKLQkJCQlDaXBoZXJBbGcgPSBwQWQtPlNoYXJlZEtleVtCU1MwXVtpZHhdLkNpcGhlckFsZzsKLQkJCQlLZXkgPSBwQWQtPlNoYXJlZEtleVtCU1MwXVtpZHhdLktleTsKLQotCQkJCWlmIChwQWQtPlNoYXJlZEtleVtCU1MwXVtpZHhdLktleUxlbiA+IDApIHsKLQkJCQkJLyogU2V0IGtleSBtYXRlcmlhbCBhbmQgY2lwaGVyQWxnIHRvIEFzaWMgKi8KLQkJCQkJQXNpY0FkZFNoYXJlZEtleUVudHJ5KHBBZCwgQlNTMCwgaWR4LAotCQkJCQkJCSAgICAgIENpcGhlckFsZywgS2V5LAotCQkJCQkJCSAgICAgIE5VTEwsIE5VTEwpOwotCi0JCQkJCWlmIChpZHggPT0gcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkKSB7Ci0JCQkJCQkvKiBVcGRhdGUgV0NJRCBhdHRyaWJ1dGUgdGFibGUgYW5kIElWRUlWIHRhYmxlIGZvciB0aGlzIGdyb3VwIGtleSB0YWJsZSAqLwotCQkJCQkJUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeShwQWQsCi0JCQkJCQkJCQkgIEJTUzAsCi0JCQkJCQkJCQkgIGlkeCwKLQkJCQkJCQkJCSAgQ2lwaGVyQWxnLAotCQkJCQkJCQkJICBOVUxMKTsKLQkJCQkJfQotCQkJCX0KLQotCQkJfQotCQl9Ci0JCS8qIElmIFdQQU5vbmUgaXMgZW5hYmxlZCwgYWRkIGtleSBtYXRlcmlhbCBhbmQgY2lwaGVyQWxnIGludG8gQXNpYyAqLwotCQkvKiBGaWxsIGluIFNoYXJlZCBLZXkgVGFibGUob2Zmc2V0OiAweDZjMDApIGFuZCBTaGFyZWQgS2V5IE1vZGUob2Zmc2V0OiAweDcwMDApICovCi0JCWVsc2UgaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmUpIHsKLQkJCXBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCA9IDA7CS8qIGFsd2F5cyBiZSB6ZXJvICovCi0KLQkJCU5kaXNaZXJvTWVtb3J5KCZwQWQtPlNoYXJlZEtleVtCU1MwXVswXSwKLQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBydF9jaXBoZXJfa2V5KSk7Ci0JCQlwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5LZXlMZW4gPSBMRU5fVEtJUF9FSzsKLQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLktleSwKLQkJCQkgICAgICAgcEFkLT5TdGFDZmcuUE1LLCBMRU5fVEtJUF9FSyk7Ci0KLQkJCWlmIChwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID09Ci0JCQkgICAgTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkgewotCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLlJ4TWljLAotCQkJCQkgICAgICAgJnBBZC0+U3RhQ2ZnLlBNS1sxNl0sCi0JCQkJCSAgICAgICBMRU5fVEtJUF9SWE1JQ0spOwotCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLlR4TWljLAotCQkJCQkgICAgICAgJnBBZC0+U3RhQ2ZnLlBNS1sxNl0sCi0JCQkJCSAgICAgICBMRU5fVEtJUF9UWE1JQ0spOwotCQkJfQotCQkJLyogRGVjaWRlIGl0cyBDaGlwZXJBbGcgKi8KLQkJCWlmIChwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID09Ci0JCQkgICAgTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkKLQkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGcgPSBDSVBIRVJfVEtJUDsKLQkJCWVsc2UgaWYgKHBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPT0KLQkJCQkgTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKLQkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGcgPSBDSVBIRVJfQUVTOwotCQkJZWxzZSB7Ci0JCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJCSAoIlVua25vdyBDaXBoZXIgKD0lZCksIHNldCBDaXBoZXIgdG8gQUVTXG4iLAotCQkJCQkgIHBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIpKTsKLQkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGcgPSBDSVBIRVJfQUVTOwotCQkJfQotCi0JCQkvKiBTZXQga2V5IG1hdGVyaWFsIGFuZCBjaXBoZXJBbGcgdG8gQXNpYyAqLwotCQkJQXNpY0FkZFNoYXJlZEtleUVudHJ5KHBBZCwKLQkJCQkJICAgICAgQlNTMCwKLQkJCQkJICAgICAgMCwKLQkJCQkJICAgICAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnLAotCQkJCQkgICAgICBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5LZXksCi0JCQkJCSAgICAgIHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLlR4TWljLAotCQkJCQkgICAgICBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5SeE1pYyk7Ci0KLQkJCS8qIFVwZGF0ZSBXQ0lEIGF0dHJpYnV0ZSB0YWJsZSBhbmQgSVZFSVYgdGFibGUgZm9yIHRoaXMgZ3JvdXAga2V5IHRhYmxlICovCi0JCQlSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5KHBBZCwgQlNTMCwgMCwKLQkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uCi0JCQkJCQkgIENpcGhlckFsZywgTlVMTCk7Ci0KLQkJfQotCi0JfSBlbHNlCQkJLyogQlNTX0lORlJBICovCi0JewotCQkvKiBDaGVjayB0aGUgbmV3IFNTSUQgd2l0aCBsYXN0IFNTSUQgKi8KLQkJd2hpbGUgKENhbmNlbGxlZCA9PSBUUlVFKSB7Ci0JCQlpZiAocEFkLT5Db21tb25DZmcuTGFzdFNzaWRMZW4gPT0KLQkJCSAgICBwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuKSB7Ci0JCQkJaWYgKFJUTVBDb21wYXJlTWVtb3J5Ci0JCQkJICAgIChwQWQtPkNvbW1vbkNmZy5MYXN0U3NpZCwKLQkJCQkgICAgIHBBZC0+Q29tbW9uQ2ZnLlNzaWQsCi0JCQkJICAgICBwQWQtPkNvbW1vbkNmZy5MYXN0U3NpZExlbikgPT0gMCkgewotCQkJCQkvKiBMaW5rIHRvIHRoZSBvbGQgb25lIG5vIGxpbmtkb3duIGlzIHJlcXVpcmVkLiAqLwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQkvKiBTZW5kIGxpbmsgZG93biBldmVudCBiZWZvcmUgc2V0IHRvIGxpbmsgdXAgKi8KLQkJCXBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID0gTmRpc01lZGlhU3RhdGVEaXNjb25uZWN0ZWQ7Ci0JCQlSVE1QX0luZGljYXRlTWVkaWFTdGF0ZShwQWQpOwotCQkJcEFkLT5FeHRyYUluZm8gPSBHRU5FUkFMX0xJTktfRE9XTjsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAoIk5ESVNfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1QgRXZlbnQgQUEhXG4iKSk7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qICovCi0JCS8qIE9uIFdQQSBtb2RlLCBSZW1vdmUgQWxsIEtleXMgaWYgbm90IGNvbm5lY3QgdG8gdGhlIGxhc3QgQlNTSUQgKi8KLQkJLyogS2V5IHdpbGwgYmUgc2V0IGFmdGVyIDQtd2F5IGhhbmRzaGFrZS4gKi8KLQkJLyogKi8KLQkJaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkgewotCQkJdW5zaWduZWQgbG9uZyBJVjsKLQotCQkJLyogUmVtb3ZlIGFsbCBXUEEga2V5cyAqLwotCQkJUlRNUF9DTEVBUl9QU0ZMQUcocEFkLCBmUlRNUF9QU19DQU5fR09fU0xFRVApOwotCQkJUlRNUFdQQVJlbW92ZUFsbEtleXMocEFkKTsKLQkJCXBBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVEOwotCQkJcEFkLT5TdGFDZmcuUHJpdmFjeUZpbHRlciA9Ci0JCQkgICAgTmRpczgwMl8xMVByaXZGaWx0ZXI4MDIxeFdFUDsKLQotCQkJLyogRml4ZWQgY29ubmVjdGlvbiBmYWlsZWQgd2l0aCBSYW5nZSBNYXhpbWl6ZXIgLSA1MTUgQVAgKE1hcnZlbGwgQ2hpcCkgd2hlbiBzZWN1cml0eSBpcyBXUEFQU0svVEtJUCAqLwotCQkJLyogSWYgSVYgcmVsYXRlZCB2YWx1ZXMgYXJlIHRvbyBsYXJnZSBpbiBHcm91cE1zZzIsIEFQIHdvdWxkIGlnbm9yZSB0aGlzIG1lc3NhZ2UuICovCi0JCQlJViA9IDE7Ci0JCQlJViB8PSAocEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkIDw8IDMwKTsKLQkJCUFzaWNVcGRhdGVXQ0lESVZFSVYocEFkLCBCU1NJRF9XQ0lELCBJViwgMCk7Ci0JCX0KLQkJLyogTk9URTogKi8KLQkJLyogdGhlIGRlY2lzaW9uIG9mIHVzaW5nICJzaG9ydCBzbG90IHRpbWUiIG9yIG5vdCBtYXkgY2hhbmdlIGR5bmFtaWNhbGx5IGR1ZSB0byAqLwotCQkvKiBuZXcgU1RBIGFzc29jaWF0aW9uIHRvIHRoZSBBUC4gc28gd2UgaGF2ZSB0byBkZWNpZGUgdGhhdCB1cG9uIHBhcnNpbmcgQkVBQ09OLCBub3QgaGVyZSAqLwotCi0JCS8qIE5PVEU6ICovCi0JCS8qIHRoZSBkZWNpc2lvbiB0byB1c2UgIlJUQy9DVFMiIG9yICJDVFMtdG8tc2VsZiIgcHJvdGVjdGlvbiBvciBub3QgbWF5IGNoYW5nZSBkeW5hbWljYWxseSAqLwotCQkvKiBkdWUgdG8gbmV3IFNUQSBhc3NvY2lhdGlvbiB0byB0aGUgQVAuIHNvIHdlIGhhdmUgdG8gZGVjaWRlIHRoYXQgdXBvbiBwYXJzaW5nIEJFQUNPTiwgbm90IGhlcmUgKi8KLQotCQlDb21wb3NlUHNQb2xsKHBBZCk7Ci0JCUNvbXBvc2VOdWxsRnJhbWUocEFkKTsKLQotCQlBc2ljRW5hYmxlQnNzU3luYyhwQWQpOwotCi0JCS8qIEFkZCBCU1NJRCB0byBXQ0lEIHNlYXJjaCB0YWJsZSAqLwotCQlBc2ljVXBkYXRlUnhXQ0lEVGFibGUocEFkLCBCU1NJRF9XQ0lELCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7Ci0KLQkJLyogSWYgV0VQIGlzIGVuYWJsZWQsIGFkZCBwYWlyd2lzZSBhbmQgc2hhcmVkIGtleSAqLwotCQlpZiAoKChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVApICYmCi0JCSAgICAgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExV0VQRW5hYmxlZCkgJiYKLQkJICAgICAocEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQgPT0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQpKSB8fAotCQkgICAgKChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgPT0gV1BBX1NVUFBMSUNBTlRfRElTQUJMRSkgJiYKLQkJICAgICAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFXRVBFbmFibGVkKSkpIHsKLQkJCXU4ICpLZXk7Ci0JCQl1OCBDaXBoZXJBbGc7Ci0KLQkJCWZvciAoaWR4ID0gMDsgaWR4IDwgU0hBUkVfS0VZX05VTTsgaWR4KyspIHsKLQkJCQlDaXBoZXJBbGcgPSBwQWQtPlNoYXJlZEtleVtCU1MwXVtpZHhdLkNpcGhlckFsZzsKLQkJCQlLZXkgPSBwQWQtPlNoYXJlZEtleVtCU1MwXVtpZHhdLktleTsKLQotCQkJCWlmIChwQWQtPlNoYXJlZEtleVtCU1MwXVtpZHhdLktleUxlbiA+IDApIHsKLQkJCQkJLyogU2V0IGtleSBtYXRlcmlhbCBhbmQgY2lwaGVyQWxnIHRvIEFzaWMgKi8KLQkJCQkJQXNpY0FkZFNoYXJlZEtleUVudHJ5KHBBZCwgQlNTMCwgaWR4LAotCQkJCQkJCSAgICAgIENpcGhlckFsZywgS2V5LAotCQkJCQkJCSAgICAgIE5VTEwsIE5VTEwpOwotCi0JCQkJCWlmIChpZHggPT0gcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkKSB7Ci0JCQkJCQkvKiBBc3NpZ24gZ3JvdXAga2V5IGluZm8gKi8KLQkJCQkJCVJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnkocEFkLAotCQkJCQkJCQkJICBCU1MwLAotCQkJCQkJCQkJICBpZHgsCi0JCQkJCQkJCQkgIENpcGhlckFsZywKLQkJCQkJCQkJCSAgTlVMTCk7Ci0KLQkJCQkJCXBFbnRyeS0+QWlkID0gQlNTSURfV0NJRDsKLQkJCQkJCS8qIEFzc2lnbiBwYWlyd2lzZSBrZXkgaW5mbyAqLwotCQkJCQkJUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeShwQWQsCi0JCQkJCQkJCQkgIEJTUzAsCi0JCQkJCQkJCQkgIGlkeCwKLQkJCQkJCQkJCSAgQ2lwaGVyQWxnLAotCQkJCQkJCQkJICBwRW50cnkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCS8qIG9ubHkgSU5GUkFTVFJVQ1RVUkUgbW9kZSBuZWVkIHRvIGluZGljYXRlIGNvbm5lY3Rpdml0eSBpbW1lZGlhdGVseTsgQURIT0MgbW9kZSAqLwotCQkvKiBzaG91bGQgd2FpdCB1bnRpbCBhdCBsZWFzdCAyIGFjdGl2ZSBub2RlcyBpbiB0aGlzIEJTU0lELiAqLwotCQlPUFNUQVRVU19TRVRfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKTsKLQotCQkvKiBGb3IgR1VJICsrICovCi0JCWlmIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA8IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkgewotCQkJcEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPSBOZGlzTWVkaWFTdGF0ZUNvbm5lY3RlZDsKLQkJCXBBZC0+RXh0cmFJbmZvID0gR0VORVJBTF9MSU5LX1VQOwotCQkJUlRNUF9JbmRpY2F0ZU1lZGlhU3RhdGUocEFkKTsKLQkJfSBlbHNlIGlmICgocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLKSB8fAotCQkJICAgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spKQotCQl7Ci0JCQlpZiAocEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQID09Ci0JCQkgICAgV1BBX1NVUFBMSUNBTlRfRElTQUJMRSkKLQkJCQlSVE1QU2V0VGltZXIoJnBBZC0+TWxtZS5MaW5rRG93blRpbWVyLAotCQkJCQkgICAgIExJTktfRE9XTl9USU1FT1VUKTsKLQkJfQotCQkvKiAtLSAqLwotCi0JCS8qIEFkZCBCU1NJRCBpbiBteSBNQUMgVGFibGUuICovCi0JCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+TWFjVGFiTG9jayk7Ci0JCS8qIGFkZCB0aGlzIE1BQyBlbnRyeSBpbnRvIEhBU0ggdGFibGUgKi8KLQkJaWYgKHBFbnRyeSkgewotCQkJSGFzaElkeCA9IE1BQ19BRERSX0hBU0hfSU5ERVgocEFkLT5Db21tb25DZmcuQnNzaWQpOwotCQkJaWYgKHBBZC0+TWFjVGFiLkhhc2hbSGFzaElkeF0gPT0gTlVMTCkgewotCQkJCXBBZC0+TWFjVGFiLkhhc2hbSGFzaElkeF0gPSBwRW50cnk7Ci0JCQl9IGVsc2UgewotCQkJCXBDdXJyRW50cnkgPSBwQWQtPk1hY1RhYi5IYXNoW0hhc2hJZHhdOwotCQkJCXdoaWxlIChwQ3VyckVudHJ5LT5wTmV4dCAhPSBOVUxMKSB7Ci0JCQkJCXBDdXJyRW50cnkgPSBwQ3VyckVudHJ5LT5wTmV4dDsKLQkJCQl9Ci0JCQkJcEN1cnJFbnRyeS0+cE5leHQgPSBwRW50cnk7Ci0JCQl9Ci0JCX0KLQkJUlRNUE1vdmVNZW1vcnkocEVudHJ5LT5BZGRyLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwKLQkJCSAgICAgICBNQUNfQUREUl9MRU4pOwotCQlwRW50cnktPkFpZCA9IEJTU0lEX1dDSUQ7Ci0JCXBFbnRyeS0+cEFkID0gcEFkOwotCQlwRW50cnktPlZhbGlkQXNDTEkgPSBUUlVFOwkvKkFsdGhvdWdoIHRoaXMgaXMgYnNzaWQuLnN0aWxsIHNldCBWYWxpZEFzQ2wgKi8KLQkJcEFkLT5NYWNUYWIuU2l6ZSA9IDE7CS8qIGluZnJhIG1vZGUgYWx3YXlzIHNldCBNQUN0YWIgc2l6ZSA9MS4gKi8KLQkJcEVudHJ5LT5Tc3QgPSBTU1RfQVNTT0M7Ci0JCXBFbnRyeS0+QXV0aFN0YXRlID0gU1NUX0FTU09DOwotCQlwRW50cnktPkF1dGhNb2RlID0gcEFkLT5TdGFDZmcuQXV0aE1vZGU7Ci0JCXBFbnRyeS0+V2VwU3RhdHVzID0gcEFkLT5TdGFDZmcuV2VwU3RhdHVzOwotCQlpZiAocEVudHJ5LT5BdXRoTW9kZSA8IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkgewotCQkJcEVudHJ5LT5XcGFTdGF0ZSA9IEFTX05PVFVTRTsKLQkJCXBFbnRyeS0+UHJpdmFjeUZpbHRlciA9IE5kaXM4MDJfMTFQcml2RmlsdGVyQWNjZXB0QWxsOwotCQl9IGVsc2UgewotCQkJcEVudHJ5LT5XcGFTdGF0ZSA9IEFTX1BUS1NUQVJUOwotCQkJcEVudHJ5LT5Qcml2YWN5RmlsdGVyID0gTmRpczgwMl8xMVByaXZGaWx0ZXI4MDIxeFdFUDsKLQkJfQotCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPk1hY1RhYkxvY2spOwotCi0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiTElOSyBVUCEgIENsaWVudFN0YXR1c0ZsYWdzPSVseClcbiIsCi0JCQkgIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQ2xpZW50U3RhdHVzRmxhZ3MpKTsKLQotCQlNbG1lVXBkYXRlVHhSYXRlcyhwQWQsIFRSVUUsIEJTUzApOwotCQlNbG1lVXBkYXRlSHRUeFJhdGVzKHBBZCwgQlNTMCk7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiTElOSyBVUCEgKFN0YUFjdGl2ZS5iSHRFbmFibGUgPSVkLCApXG4iLAotCQkJICBwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLmJIdEVuYWJsZSkpOwotCi0JCWlmIChwQWQtPkNvbW1vbkNmZy5iQWdncmVnYXRpb25DYXBhYmxlKSB7Ci0JCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLmJQaWdneUJhY2tDYXBhYmxlKQotCQkJICAgICYmIChwQWQtPk1sbWVBdXguQVBSYWxpbmtJZSAmIDB4MDAwMDAwMDMpID09IDMpIHsKLQkJCQlPUFNUQVRVU19TRVRfRkxBRyhwQWQsCi0JCQkJCQkgIGZPUF9TVEFUVVNfUElHR1lCQUNLX0lOVVNFRCk7Ci0JCQkJT1BTVEFUVVNfU0VUX0ZMQUcocEFkLAotCQkJCQkJICBmT1BfU1RBVFVTX0FHR1JFR0FUSU9OX0lOVVNFRCk7Ci0JCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksCi0JCQkJCQkgICAgICAgZkNMSUVOVF9TVEFUVVNfQUdHUkVHQVRJT05fQ0FQQUJMRSk7Ci0JCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksCi0JCQkJCQkgICAgICAgZkNMSUVOVF9TVEFUVVNfUElHR1lCQUNLX0NBUEFCTEUpOwotCQkJCVJUTVBTZXRQaWdneUJhY2socEFkLCBUUlVFKTsKLQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkJICgiVHVybiBvbiBQaWdneS1CYWNrXG4iKSk7Ci0JCQl9IGVsc2UgaWYgKHBBZC0+TWxtZUF1eC5BUFJhbGlua0llICYgMHgwMDAwMDAwMSkgewotCQkJCU9QU1RBVFVTX1NFVF9GTEFHKHBBZCwKLQkJCQkJCSAgZk9QX1NUQVRVU19BR0dSRUdBVElPTl9JTlVTRUQpOwotCQkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LAotCQkJCQkJICAgICAgIGZDTElFTlRfU1RBVFVTX0FHR1JFR0FUSU9OX0NBUEFCTEUpOwotCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkgKCJSYWxpbmsgQWdncmVnYXRpb25cbiIpKTsKLQkJCX0KLQkJfQotCi0JCWlmIChwQWQtPk1sbWVBdXguQVBSYWxpbmtJZSAhPSAweDApIHsKLQkJCWlmIChDTElFTlRfU1RBVFVTX1RFU1RfRkxBRwotCQkJICAgIChwRW50cnksIGZDTElFTlRfU1RBVFVTX1JER19DQVBBQkxFKSkgewotCQkJCUFzaWNFbmFibGVSREcocEFkKTsKLQkJCX0KLQkJCU9QU1RBVFVTX1NFVF9GTEFHKHBBZCwgZkNMSUVOVF9TVEFUVVNfUkFMSU5LX0NISVBTRVQpOwotCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksCi0JCQkJCSAgICAgICBmQ0xJRU5UX1NUQVRVU19SQUxJTktfQ0hJUFNFVCk7Ci0JCX0gZWxzZSB7Ci0JCQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZkNMSUVOVF9TVEFUVVNfUkFMSU5LX0NISVBTRVQpOwotCQkJQ0xJRU5UX1NUQVRVU19DTEVBUl9GTEFHKHBFbnRyeSwKLQkJCQkJCSBmQ0xJRU5UX1NUQVRVU19SQUxJTktfQ0hJUFNFVCk7Ci0JCX0KLQl9Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJICgiTkRJU19TVEFUVVNfTUVESUFfQ09OTkVDVCBFdmVudCBCIS5CQUNhcGFiaWxpdHkgPSAleC4gQ2xpZW50U3RhdHVzRmxhZ3MgPSAlbHhcbiIsCi0JCSAgcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LndvcmQsCi0JCSAgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5DbGllbnRTdGF0dXNGbGFncykpOwotCi0JLyogU2V0IExFRCAqLwotCVJUTVBTZXRMRUQocEFkLCBMRURfTElOS19VUCk7Ci0KLQlwQWQtPk1sbWUuUGVyaW9kaWNSb3VuZCA9IDA7Ci0JcEFkLT5NbG1lLk9uZVNlY1BlcmlvZGljUm91bmQgPSAwOwotCXBBZC0+YkNvbmZpZ0NoYW5nZWQgPSBGQUxTRTsJLyogUmVzZXQgY29uZmlnIGZsYWcgKi8KLQlwQWQtPkV4dHJhSW5mbyA9IEdFTkVSQUxfTElOS19VUDsJLyogVXBkYXRlIGV4dHJhIGluZm9ybWF0aW9uIGFmdGVyIGxpbmsgaXMgdXAgKi8KLQotCS8qIFNldCBiYXNpYyBhdXRvIGZhbGwgYmFjayAqLwotCXsKLQkJdTggKnBUYWJsZTsKLQkJdTggVGFibGVTaXplID0gMDsKLQotCQlNbG1lU2VsZWN0VHhSYXRlVGFibGUocEFkLCAmcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXSwKLQkJCQkgICAgICAmcFRhYmxlLCAmVGFibGVTaXplLAotCQkJCSAgICAgICZwQWQtPkNvbW1vbkNmZy5UeFJhdGVJbmRleCk7Ci0JCUFzaWNVcGRhdGVBdXRvRmFsbEJhY2tUYWJsZShwQWQsIHBUYWJsZSk7Ci0JfQotCi0JTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5NYWNUYWJMb2NrKTsKLQlwRW50cnktPkhUUGh5TW9kZS53b3JkID0gcEFkLT5TdGFDZmcuSFRQaHlNb2RlLndvcmQ7Ci0JcEVudHJ5LT5NYXhIVFBoeU1vZGUud29yZCA9IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS53b3JkOwotCWlmIChwQWQtPlN0YUNmZy5iQXV0b1R4UmF0ZVN3aXRjaCA9PSBGQUxTRSkgewotCQlwRW50cnktPmJBdXRvVHhSYXRlU3dpdGNoID0gRkFMU0U7Ci0KLQkJaWYgKHBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1DUyA9PSAzMikKLQkJCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLlNob3J0R0kgPSBHSV84MDA7Ci0KLQkJaWYgKChwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MgPiBNQ1NfNykKLQkJICAgIHx8IChwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MgPT0gMzIpKQotCQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuU1RCQyA9IFNUQkNfTk9ORTsKLQotCQkvKiBJZiB0aGUgbGVnYWN5IG1vZGUgaXMgc2V0LCBvdmVyd3JpdGUgdGhlIHRyYW5zbWl0IHNldHRpbmcgb2YgdGhpcyBlbnRyeS4gKi8KLQkJaWYgKHBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1PREUgPD0gTU9ERV9PRkRNKQotCQkJUlRNUFVwZGF0ZUxlZ2FjeVR4U2V0dGluZygodTgpcEFkLT5TdGFDZmcuCi0JCQkJCQkgIERlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuCi0JCQkJCQkgIEZpeGVkVHhNb2RlLCBwRW50cnkpOwotCX0gZWxzZQotCQlwRW50cnktPmJBdXRvVHhSYXRlU3dpdGNoID0gVFJVRTsKLQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPk1hY1RhYkxvY2spOwotCi0JLyogIExldCBMaW5rIFN0YXR1cyBQYWdlIGRpc3BsYXkgZmlyc3QgaW5pdGlhbCByYXRlLiAqLwotCXBBZC0+TGFzdFR4UmF0ZSA9ICh1MTYpKHBFbnRyeS0+SFRQaHlNb2RlLndvcmQpOwotCS8qIFNlbGVjdCBEQUMgYWNjb3JkaW5nIHRvIEhUIG9yIExlZ2FjeSAqLwotCWlmIChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldFswXSAhPSAweDAwKSB7Ci0JCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMSwgJlZhbHVlKTsKLQkJVmFsdWUgJj0gKH4weDE4KTsKLQkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGggPT0gMikgewotCQkJVmFsdWUgfD0gMHgxMDsKLQkJfQotCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IxLCBWYWx1ZSk7Ci0JfSBlbHNlIHsKLQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IxLCAmVmFsdWUpOwotCQlWYWx1ZSAmPSAofjB4MTgpOwotCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IxLCBWYWx1ZSk7Ci0JfQotCi0JaWYgKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uYkh0RW5hYmxlID09IEZBTFNFKSB7Ci0JfSBlbHNlIGlmIChwRW50cnktPk1heFJBbXBkdUZhY3RvciA9PSAwKSB7Ci0JCS8qIElmIEhUIEFQIGRvZXNuJ3Qgc3VwcG9ydCBNYXhSQW1wZHVGYWN0b3IgPSAxLCB3ZSBuZWVkIHRvIHNldCBtYXggUFNEVSB0byAwLiAqLwotCQkvKiBCZWNhdXNlIG91ciBJbml0IHZhbHVlIGlzIDEgYXQgTUFDUmVnVGFibGUuICovCi0JCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BWF9MRU5fQ0ZHLCAweDBmZmYpOwotCX0KLQkvKiBQYXRjaCBmb3IgTWFydmVsIEFQIHRvIGdhaW4gaGlnaCB0aHJvdWdocHV0ICovCi0JLyogTmVlZCB0byBzZXQgYXMgZm9sbG93aW5nLCAqLwotCS8qIDEuIFNldCB0eG9wIGluIHJlZ2lzdGVyLUVEQ0FfQUMwX0NGRyBhcyAweDYwICovCi0JLyogMi4gU2V0IEVuVFhXcml0ZUJhY2tERE9ORSBpbiByZWdpc3Rlci1XUERNQV9HTE9fQ0ZHIGFzIHplcm8gKi8KLQkvKiAzLiBQQkZfTUFYX1BDTlQgYXMgMHgxRjNGQkY5RiAqLwotCS8qIDQuIGtpY2sgcGVyIHR3byBwYWNrZXRzIHdoZW4gZGVxdWV1ZSAqLwotCS8qICovCi0JLyogVHhvcCBjYW4gb25seSBiZSBtb2RpZmllZCB3aGVuIFJERyBpcyBvZmYsIFdNTSBpcyBkaXNhYmxlIGFuZCBUeEJ1cnN0IGlzIGVuYWJsZSAqLwotCS8qICovCi0JLyogaWYgMS4gTGVnYWN5IEFQIFdNTSBvbiwgIG9yIDIuIDExbiBBUCwgQU1QRFUgZGlzYWJsZS4gIEZvcmNlIHR1cm4gb2ZmIGJ1cnN0IG5vIG1hdHRlciB3aGF0IGJFbmFibGVUeEJ1cnN0IGlzLiAqLwotCWlmICghKChwQWQtPkNvbW1vbkNmZy5SeFN0cmVhbSA9PSAxKSAmJiAocEFkLT5Db21tb25DZmcuVHhTdHJlYW0gPT0gMSkpCi0JICAgICYmIChwQWQtPlN0YUNmZy5iRm9yY2VUeEJ1cnN0ID09IEZBTFNFKQotCSAgICAmJgotCSAgICAoKChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLmJIdEVuYWJsZSA9PSBGQUxTRSkKLQkgICAgICAmJiBPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1dNTV9JTlVTRUQpKQotCSAgICAgfHwgKChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLmJIdEVuYWJsZSA9PSBUUlVFKQotCQkgJiYgKHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5Qb2xpY3kgPT0gQkFfTk9UVVNFKSkpKSB7Ci0JCVJUTVBfSU9fUkVBRDMyKHBBZCwgRURDQV9BQzBfQ0ZHLCAmRGF0YSk7Ci0JCURhdGEgJj0gMHhGRkZGRkYwMDsKLQkJUlRNUF9JT19XUklURTMyKHBBZCwgRURDQV9BQzBfQ0ZHLCBEYXRhKTsKLQotCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBQQkZfTUFYX1BDTlQsIDB4MUYzRjdGOUYpOwotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJUeGJ1cnN0IDFcbiIpKTsKLQl9IGVsc2UgaWYgKHBBZC0+Q29tbW9uQ2ZnLmJFbmFibGVUeEJ1cnN0KSB7Ci0JCVJUTVBfSU9fUkVBRDMyKHBBZCwgRURDQV9BQzBfQ0ZHLCAmRGF0YSk7Ci0JCURhdGEgJj0gMHhGRkZGRkYwMDsKLQkJRGF0YSB8PSAweDYwOwotCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBFRENBX0FDMF9DRkcsIERhdGEpOwotCQlwQWQtPkNvbW1vbkNmZy5JT1Rlc3RQYXJtLmJOb3dBdGhlcm9zQnVyc3RPbiA9IFRSVUU7Ci0KLQkJUlRNUF9JT19XUklURTMyKHBBZCwgUEJGX01BWF9QQ05ULCAweDFGM0ZCRjlGKTsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiVHhidXJzdCAyXG4iKSk7Ci0JfSBlbHNlIHsKLQkJUlRNUF9JT19SRUFEMzIocEFkLCBFRENBX0FDMF9DRkcsICZEYXRhKTsKLQkJRGF0YSAmPSAweEZGRkZGRjAwOwotCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBFRENBX0FDMF9DRkcsIERhdGEpOwotCi0JCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9NQVhfUENOVCwgMHgxRjNGN0Y5Rik7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlR4YnVyc3QgM1xuIikpOwotCX0KLQotCS8qIFJlLWNoZWNrIHRvIHR1cm4gb24gVFggYnVyc3Qgb3Igbm90LiAqLwotCWlmICgocEFkLT5Db21tb25DZmcuSU9UZXN0UGFybS5iTGFzdEF0aGVyb3MgPT0gVFJVRSkKLQkgICAgJiYgKChTVEFfV0VQX09OKHBBZCkpIHx8IChTVEFfVEtJUF9PTihwQWQpKSkpIHsKLQkJcEFkLT5Db21tb25DZmcuSU9UZXN0UGFybS5iTmV4dERpc2FibGVSeEJBID0gVFJVRTsKLQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJFbmFibGVUeEJ1cnN0KSB7Ci0JCQl1MzIgTUFDVmFsdWUgPSAwOwotCQkJLyogRm9yY2UgZGlzYWJsZSAgVFhPUCB2YWx1ZSBpbiB0aGlzIGNhc2UuIFRoZSBzYW1lIGFjdGlvbiBpbiBNTE1FVXBkYXRlUHJvdGVjdCB0b28uICovCi0JCQkvKiBJIGRpZG4ndCBjaGFuZ2UgUEJGX01BWF9QQ05UIHNldHRpbmcuICovCi0JCQlSVE1QX0lPX1JFQUQzMihwQWQsIEVEQ0FfQUMwX0NGRywgJk1BQ1ZhbHVlKTsKLQkJCU1BQ1ZhbHVlICY9IDB4RkZGRkZGMDA7Ci0JCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBFRENBX0FDMF9DRkcsIE1BQ1ZhbHVlKTsKLQkJCXBBZC0+Q29tbW9uQ2ZnLklPVGVzdFBhcm0uYk5vd0F0aGVyb3NCdXJzdE9uID0gRkFMU0U7Ci0JCX0KLQl9IGVsc2UgewotCQlwQWQtPkNvbW1vbkNmZy5JT1Rlc3RQYXJtLmJOZXh0RGlzYWJsZVJ4QkEgPSBGQUxTRTsKLQl9Ci0KLQlwQWQtPkNvbW1vbkNmZy5JT1Rlc3RQYXJtLmJMYXN0QXRoZXJvcyA9IEZBTFNFOwotCUNPUFlfTUFDX0FERFIocEFkLT5Db21tb25DZmcuTGFzdEJzc2lkLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7Ci0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoInBBZC0+Yk5leHREaXNhYmxlUnhCQT0gJWQgXG4iLAotCQkgIHBBZC0+Q29tbW9uQ2ZnLklPVGVzdFBhcm0uYk5leHREaXNhYmxlUnhCQSkpOwotCS8qIEJTU0lEIGFkZCBpbiBvbmUgTUFDIGVudHJ5IHRvby4gIEJlY2F1c2UgaW4gVHgsIEFTSUMgbmVlZCB0byBjaGVjayBDaXBoZXIgYW5kIElWL0VJViwgQkFiaXRtYXAgKi8KLQkvKiBQdGhlciBpbmZvcm1hdGlvbiBpbiBNQUNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXSBpcyBub3QgbmVjZXNzYXJ5IGZvciBkcml2ZXIuICovCi0JLyogTm90ZTogQXMgU1RBLCBUaGUgTUFDVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uIFBhaXJ3aXNlS2V5IGFuZCBTaGFyZWQgS2V5IGZvciBCU1MwIGFyZSB0aGUgc2FtZS4gKi8KLQotCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPD0gTmRpczgwMl8xMVdFUERpc2FibGVkKSB7Ci0JCWlmIChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgJiYKLQkJICAgIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMVdFUEVuYWJsZWQpICYmCi0JCSAgICAocEFkLT5TdGFDZmcuSUVFRTgwMjFYID09IFRSVUUpKSA7Ci0JCWVsc2UgewotCQkJcEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQgPSBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRDsKLQkJCXBBZC0+U3RhQ2ZnLlByaXZhY3lGaWx0ZXIgPQotCQkJICAgIE5kaXM4MDJfMTFQcml2RmlsdGVyQWNjZXB0QWxsOwotCQl9Ci0JfQotCi0JTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5NYWNUYWJMb2NrKTsKLQlwRW50cnktPlBvcnRTZWN1cmVkID0gcEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQ7Ci0JTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5NYWNUYWJMb2NrKTsKLQotCS8qICovCi0JLyogUGF0Y2ggQXRoZXJvcyBBUCBUWCB3aWxsIGJyZWFrZG93biBpc3N1ZS4gKi8KLQkvKiBBUCBNb2RlbDogRExpbmsgRFdMLTgyMDBBUCAqLwotCS8qICovCi0JaWYgKElORlJBX09OKHBBZCkgJiYgT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19XTU1fSU5VU0VEKQotCSAgICAmJiBTVEFfVEtJUF9PTihwQWQpKSB7Ci0JCVJUTVBfSU9fV1JJVEUzMihwQWQsIFJYX1BBUlNFUl9DRkcsIDB4MDEpOwotCX0gZWxzZSB7Ci0JCVJUTVBfSU9fV1JJVEUzMihwQWQsIFJYX1BBUlNFUl9DRkcsIDB4MDApOwotCX0KLQotCVJUTVBfQ0xFQVJfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MpOwotCi0JUlRNUF9DTEVBUl9QU0ZMQUcocEFkLCBmUlRNUF9QU19HT19UT19TTEVFUF9OT1cpOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lCURlc2NyaXB0aW9uOgotCQlEaXNjb25uZWN0IGN1cnJlbnQgQlNTSUQKLQotCUFyZ3VtZW50czoKLQkJcEFkCQkJCS0gUG9pbnRlciB0byBvdXIgYWRhcHRlcgotCQlJc1JlcUZyb21BUAkJLSBSZXF1ZXN0IGZyb20gQVAKLQotCVJldHVybiBWYWx1ZToKLQkJTm9uZQotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQlOb3RlOgotCQlXZSBuZWVkIG1vcmUgaW5mb3JtYXRpb24gdG8ga25vdyBpdCdzIHRoaXMgcmVxdXN0IGZyb20gQVAuCi0JCUlmIHllcyEgd2UgbmVlZCB0byBkbyBleHRyYSBoYW5kbGluZywgZm9yIGV4YW1wbGUsIHJlbW92ZSB0aGUgV1BBIGtleS4KLQkJT3RoZXJ3aXNlIG9uIDQtd2F5IGhhbmRzaGFraW5nIHdpbGwgZmFpbCwgc2luY2UgdGhlIFdQQSBrZXkgZGlkbid0IGdldAotCQlyZW1vdmVkIHdoaWxlIGF1dG8gcmVjb25uZWN0LgotCQlEaXNjb25uZWN0IHJlcXVlc3QgZnJvbSBBUCwgaXQgbWVhbnMgd2Ugd2lsbCBzdGFydCBhZnJlc2ggNC13YXkgaGFuZHNoYWtpbmcKLQkJb24gV1BBIG1vZGUuCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgTGlua0Rvd24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBJTiBCT09MRUFOIElzUmVxRnJvbUFQKQotewotCXU4IGksIEJ5dGVWYWx1ZSA9IDA7Ci0KLQkvKiBEbyBub3RoaW5nIGlmIG1vbml0b3IgbW9kZSBpcyBvbiAqLwotCWlmIChNT05JVE9SX09OKHBBZCkpCi0JCXJldHVybjsKLQotCVJUTVBfQ0xFQVJfUFNGTEFHKHBBZCwgZlJUTVBfUFNfR09fVE9fU0xFRVBfTk9XKTsKLQkvKiBDb21tZW50IHRoZSBjb2RlcywgYmVjYXVzZSB0aGUgbGluZSAyMjkxIGNhbGwgdGhlIHNhbWUgZnVuY3Rpb24uICovCi0JLyogUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWUuUHNQb2xsVGltZXIsICZDYW5jZWxsZWQpOyAqLwotCS8qIE5vdCBhbGxvd2VkIGdvIHRvIHNsZWVwIHdpdGhpbiB0aGUgbGlua2Rvd24gZnVuY3Rpb24uICovCi0JUlRNUF9DTEVBUl9QU0ZMQUcocEFkLCBmUlRNUF9QU19DQU5fR09fU0xFRVApOwotCi0JaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50KSB7Ci0JCVJUTVBTZW5kV2lyZWxlc3NFdmVudChwQWQsIElXX1NUQV9MSU5LRE9XTl9FVkVOVF9GTEFHLAotCQkJCSAgICAgIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQWRkciwKLQkJCQkgICAgICBCU1MwLCAwKTsKLQl9Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJMSU5LIERPV04hXG4iKSk7Ci0JT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQUdHUkVHQVRJT05fSU5VU0VEKTsKLQotI2lmZGVmIFJUTVBfTUFDX1BDSQotCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1BDSUVfREVWSUNFKSkgewotCQlCT09MRUFOIENhbmNlbGxlZDsKLQkJcEFkLT5NbG1lLmJQc1BvbGxUaW1lclJ1bm5pbmcgPSBGQUxTRTsKLQkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWUuUHNQb2xsVGltZXIsICZDYW5jZWxsZWQpOwotCX0KLQotCXBBZC0+YlBDSWNsa09mZiA9IEZBTFNFOwotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotCi0JaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSkKLQkgICAgfHwgUlRNUF9URVNUX1BTRkxBRyhwQWQsIGZSVE1QX1BTX1NFVF9QQ0lfQ0xLX09GRl9DT01NQU5EKQotCSAgICB8fCBSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSURMRV9SQURJT19PRkYpKSB7Ci0JCUFVVE9fV0FLRVVQX1NUUlVDIEF1dG9XYWtldXBDZmc7Ci0JCUFzaWNGb3JjZVdha2V1cChwQWQsIFRSVUUpOwotCQlBdXRvV2FrZXVwQ2ZnLndvcmQgPSAwOwotCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBBVVRPX1dBS0VVUF9DRkcsIEF1dG9XYWtldXBDZmcud29yZCk7Ci0JCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpOwotCX0KLSNpZmRlZiBSVE1QX01BQ19QQ0kKLQlwQWQtPmJQQ0ljbGtPZmYgPSBGQUxTRTsKLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLQotCWlmIChBREhPQ19PTihwQWQpKQkvKiBBZGhvYyBtb2RlIGxpbmsgZG93biAqLwotCXsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTElOSyBET1dOIDEhXG4iKSk7Ci0KLQkJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQURIT0NfT04pOwotCQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpOwotCQlwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSA9IE5kaXNNZWRpYVN0YXRlRGlzY29ubmVjdGVkOwotCQlSVE1QX0luZGljYXRlTWVkaWFTdGF0ZShwQWQpOwotCQlwQWQtPkV4dHJhSW5mbyA9IEdFTkVSQUxfTElOS19ET1dOOwotCQlCc3NUYWJsZURlbGV0ZUVudHJ5KCZwQWQtPlNjYW5UYWIsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLAotCQkJCSAgICBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKTsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCIgTWFjVGFiLlNpemU9JWQgIVxuIiwgcEFkLT5NYWNUYWIuU2l6ZSkpOwotCX0gZWxzZQkJCS8qIEluZnJhIHN0cnVjdHVyZSBtb2RlICovCi0JewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJMSU5LIERPV04gMiFcbiIpKTsKLQotCQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19JTkZSQV9PTik7Ci0JCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCk7Ci0KLQkJLyogU2F2ZWQgbGFzdCBTU0lEIGZvciBsaW5rdXAgY29tcGFyaXNvbiAqLwotCQlwQWQtPkNvbW1vbkNmZy5MYXN0U3NpZExlbiA9IHBBZC0+Q29tbW9uQ2ZnLlNzaWRMZW47Ci0JCU5kaXNNb3ZlTWVtb3J5KHBBZC0+Q29tbW9uQ2ZnLkxhc3RTc2lkLCBwQWQtPkNvbW1vbkNmZy5Tc2lkLAotCQkJICAgICAgIHBBZC0+Q29tbW9uQ2ZnLkxhc3RTc2lkTGVuKTsKLQkJQ09QWV9NQUNfQUREUihwQWQtPkNvbW1vbkNmZy5MYXN0QnNzaWQsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKLQkJaWYgKHBBZC0+TWxtZUF1eC5DdXJyUmVxSXNGcm9tTmRpcyA9PSBUUlVFKSB7Ci0JCQlwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSA9IE5kaXNNZWRpYVN0YXRlRGlzY29ubmVjdGVkOwotCQkJUlRNUF9JbmRpY2F0ZU1lZGlhU3RhdGUocEFkKTsKLQkJCXBBZC0+RXh0cmFJbmZvID0gR0VORVJBTF9MSU5LX0RPV047Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCJORElTX1NUQVRVU19NRURJQV9ESVNDT05ORUNUIEV2ZW50IEEhXG4iKSk7Ci0JCQlwQWQtPk1sbWVBdXguQ3VyclJlcUlzRnJvbU5kaXMgPSBGQUxTRTsKLQkJfSBlbHNlIHsKLQkJCS8qICovCi0JCQkvKiBJZiBkaXNhc3NvY2lhdGlvbiByZXF1ZXN0IGlzIGZyb20gTkRJUywgdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGRlbGV0ZSBCU1NJRCBmcm9tIGVudHJ5LiAqLwotCQkJLyogT3RoZXJ3aXNlIGxvc3QgYmVhY29uIG9yIHJlY2VpdmUgRGUtQXV0aGVudGljYXRpb24gZnJvbSBBUCwgKi8KLQkJCS8qIHRoZW4gd2Ugc2hvdWxkIGRlbGV0ZSBCU1NJRCBmcm9tIEJzc1RhYmxlLiAqLwotCQkJLyogSWYgd2UgZG9uJ3QgZGVsZXRlIGZyb20gZW50cnksIHJvYW1pbmcgd2lsbCBmYWlsLiAqLwotCQkJLyogKi8KLQkJCUJzc1RhYmxlRGVsZXRlRW50cnkoJnBBZC0+U2NhblRhYiwgcEFkLT5Db21tb25DZmcuQnNzaWQsCi0JCQkJCSAgICBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKTsKLQkJfQotCi0JCS8qIHJlc3RvcmUgYmFjayB0byAtICovCi0JCS8qICAgICAgMS4gbG9uZyBzbG90ICgyMCB1cykgb3Igc2hvcnQgc2xvdCAoOSB1cykgdGltZSAqLwotCQkvKiAgICAgIDIuIHR1cm4gb24vb2ZmIFJUUy9DVFMgYW5kL29yIENUUy10by1zZWxmIHByb3RlY3Rpb24gKi8KLQkJLyogICAgICAzLiBzaG9ydCBwcmVhbWJsZSAqLwotCQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19CR19QUk9URUNUSU9OX0lOVVNFRCk7Ci0KLQl9Ci0KLQlmb3IgKGkgPSAxOyBpIDwgTUFYX0xFTl9PRl9NQUNfVEFCTEU7IGkrKykgewotCQlpZiAocEFkLT5NYWNUYWIuQ29udGVudFtpXS5WYWxpZEFzQ0xJID09IFRSVUUpCi0JCQlNYWNUYWJsZURlbGV0ZUVudHJ5KHBBZCwgcEFkLT5NYWNUYWIuQ29udGVudFtpXS5BaWQsCi0JCQkJCSAgICBwQWQtPk1hY1RhYi5Db250ZW50W2ldLkFkZHIpOwotCX0KLQotCUFzaWNTZXRTbG90VGltZShwQWQsIFRSVUUpOwkvKkZBTFNFKTsgKi8KLQlBc2ljU2V0RWRjYVBhcm0ocEFkLCBOVUxMKTsKLQotCS8qIFNldCBMRUQgKi8KLQlSVE1QU2V0TEVEKHBBZCwgTEVEX0xJTktfRE9XTik7Ci0JcEFkLT5MZWRJbmRpY2F0b3JTdHJlbmd0aCA9IDB4RjA7Ci0JUlRNUFNldFNpZ25hbExFRChwQWQsIC0xMDApOwkvKiBGb3JjZSBzaWduYWwgc3RyZW5ndGggTGVkIHRvIGJlIHR1cm5lZCBvZmYsIGZpcm13YXJlIGhhcyBub3QgZG9uZSBpdC4gKi8KLQotCUFzaWNEaXNhYmxlU3luYyhwQWQpOwotCi0JcEFkLT5NbG1lLlBlcmlvZGljUm91bmQgPSAwOwotCXBBZC0+TWxtZS5PbmVTZWNQZXJpb2RpY1JvdW5kID0gMDsKLQotCWlmIChwQWQtPlN0YUNmZy5Cc3NUeXBlID09IEJTU19JTkZSQSkgewotCQkvKiBSZW1vdmUgU3RhQ2ZnIEluZm9ybWF0aW9uIGFmdGVyIGxpbmsgZG93biAqLwotCQlOZGlzWmVyb01lbW9yeShwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgTUFDX0FERFJfTEVOKTsKLQkJTmRpc1plcm9NZW1vcnkocEFkLT5Db21tb25DZmcuU3NpZCwgTUFYX0xFTl9PRl9TU0lEKTsKLQkJcEFkLT5Db21tb25DZmcuU3NpZExlbiA9IDA7Ci0JfQotCi0JTmRpc1plcm9NZW1vcnkoJnBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHksIHNpemVvZihzdHJ1Y3QgcnRfaHRfY2FwYWJpbGl0eV9pZSkpOwotCU5kaXNaZXJvTWVtb3J5KCZwQWQtPk1sbWVBdXguQWRkSHRJbmZvLCBzaXplb2Yoc3RydWN0IHJ0X2FkZF9odF9pbmZvX2llKSk7Ci0JcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eUxlbiA9IDA7Ci0JcEFkLT5NbG1lQXV4Lk5ld0V4dENoYW5uZWxPZmZzZXQgPSAweGZmOwotCi0JLyogUmVzZXQgV1BBLVBTSyBzdGF0ZS4gT25seSByZXNldCB3aGVuIHN1cHBsaWNhbnQgZW5hYmxlZCAqLwotCWlmIChwQWQtPlN0YUNmZy5XcGFTdGF0ZSAhPSBTU19OT1RVU0UpIHsKLQkJcEFkLT5TdGFDZmcuV3BhU3RhdGUgPSBTU19TVEFSVDsKLQkJLyogQ2xlYXIgUmVwbGF5IGNvdW50ZXIgKi8KLQkJTmRpc1plcm9NZW1vcnkocEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlciwgOCk7Ci0KLQl9Ci0JLyogKi8KLQkvKiBpZiBsaW5rIGRvd24gY29tZSBmcm9tIEFQLCB3ZSBuZWVkIHRvIHJlbW92ZSBhbGwgV1BBIGtleXMgb24gV1BBIG1vZGUuICovCi0JLyogb3RoZXJ3aXNlIHdpbGwgY2F1c2UgNC13YXkgaGFuZHNoYWtpbmcgZmFpbGVkLCBzaW5jZSB0aGUgV1BBIGtleSBub3QgZW1wdHkuICovCi0JLyogKi8KLQlpZiAoKElzUmVxRnJvbUFQKSAmJiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPj0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKSkgewotCQkvKiBSZW1vdmUgYWxsIFdQQSBrZXlzICovCi0JCVJUTVBXUEFSZW1vdmVBbGxLZXlzKHBBZCk7Ci0JfQotCS8qIDgwMi4xeCBwb3J0IGNvbnRyb2wgKi8KLQotCS8qIFByZXZlbnQgY2xlYXIgUG9ydFNlY3VyZWQgaGVyZSB3aXRoIHN0YXRpYyBXRVAgKi8KLQkvKiBOZXR3b3JrTWFuZ2VyIHNldCBzZWN1cml0eSBwb2xpY3kgZmlyc3QgdGhlbiBzZXQgU1NJRCB0byBjb25uZWN0IEFQLiAqLwotCWlmIChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgJiYKLQkgICAgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExV0VQRW5hYmxlZCkgJiYKLQkgICAgKHBBZC0+U3RhQ2ZnLklFRUU4MDIxWCA9PSBGQUxTRSkpIHsKLQkJcEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQgPSBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRDsKLQl9IGVsc2UgewotCQlwQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRDsKLQkJcEFkLT5TdGFDZmcuUHJpdmFjeUZpbHRlciA9IE5kaXM4MDJfMTFQcml2RmlsdGVyODAyMXhXRVA7Ci0JfQotCi0JTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5NYWNUYWJMb2NrKTsKLQlOZGlzWmVyb01lbW9yeSgmcEFkLT5NYWNUYWIsIHNpemVvZihzdHJ1Y3QgcnRfbWFjX3RhYmxlKSk7Ci0JcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5Qb3J0U2VjdXJlZCA9IHBBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkOwotCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+TWFjVGFiTG9jayk7Ci0KLQlwQWQtPlN0YUNmZy5NaWNFcnJDbnQgPSAwOwotCi0JcEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPSBOZGlzTWVkaWFTdGF0ZURpc2Nvbm5lY3RlZDsKLQkvKiBVcGRhdGUgZXh0cmEgaW5mb3JtYXRpb24gdG8gbGluayBpcyB1cCAqLwotCXBBZC0+RXh0cmFJbmZvID0gR0VORVJBTF9MSU5LX0RPV047Ci0KLQlwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLmJIdEVuYWJsZSA9IEZBTFNFOwotCi0jaWZkZWYgUlRNUF9NQUNfVVNCCi0JcEFkLT5iVXNiVHhCdWxrQWdncmUgPSBGQUxTRTsKLSNlbmRpZiAvKiBSVE1QX01BQ19VU0IgLy8gKi8KLQotCS8qIENsZWFuIGFzc29jaWF0aW9uIGluZm9ybWF0aW9uICovCi0JTmRpc1plcm9NZW1vcnkoJnBBZC0+U3RhQ2ZnLkFzc29jSW5mbywKLQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcnRfbmRpc184MDJfMTFfYXNzb2NpYXRpb25faW5mb3JtYXRpb24pKTsKLQlwQWQtPlN0YUNmZy5Bc3NvY0luZm8uTGVuZ3RoID0KLQkgICAgc2l6ZW9mKHN0cnVjdCBydF9uZGlzXzgwMl8xMV9hc3NvY2lhdGlvbl9pbmZvcm1hdGlvbik7Ci0JcEFkLT5TdGFDZmcuUmVxVmFySUVMZW4gPSAwOwotCXBBZC0+U3RhQ2ZnLlJlc1ZhcklFTGVuID0gMDsKLQotCS8qICovCi0JLyogUmVzZXQgUlNTSSB2YWx1ZSBhZnRlciBsaW5rIGRvd24gKi8KLQkvKiAqLwotCXBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTAgPSAwOwotCXBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTBYOCA9IDA7Ci0JcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMSA9IDA7Ci0JcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMVg4ID0gMDsKLQlwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkF2Z1Jzc2kyID0gMDsKLQlwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkF2Z1Jzc2kyWDggPSAwOwotCi0JLyogUmVzdG9yZSBNbG1lUmF0ZSAqLwotCXBBZC0+Q29tbW9uQ2ZnLk1sbWVSYXRlID0gcEFkLT5Db21tb25DZmcuQmFzaWNNbG1lUmF0ZTsKLQlwQWQtPkNvbW1vbkNmZy5SdHNSYXRlID0gcEFkLT5Db21tb25DZmcuQmFzaWNNbG1lUmF0ZTsKLQotCS8qICovCi0JLyogQWZ0ZXIgTGluayBkb3duLCByZXNldCBwaWdneS1iYWNrIHNldHRpbmcgaW4gQVNJQy4gRGlzYWJsZSBSREcuICovCi0JLyogKi8KLQlpZiAocEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXID09IEJXXzQwKSB7Ci0JCXBBZC0+Q29tbW9uQ2ZnLkJCUEN1cnJlbnRCVyA9IEJXXzIwOwotCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsICZCeXRlVmFsdWUpOwotCQlCeXRlVmFsdWUgJj0gKH4weDE4KTsKLQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgQnl0ZVZhbHVlKTsKLQl9Ci0JLyogUmVzZXQgREFDICovCi0JUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IxLCAmQnl0ZVZhbHVlKTsKLQlCeXRlVmFsdWUgJj0gKH4weDE4KTsKLQlpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCA9PSAyKSB7Ci0JCUJ5dGVWYWx1ZSB8PSAweDEwOwotCX0KLQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IxLCBCeXRlVmFsdWUpOwotCi0JUlRNUFNldFBpZ2d5QmFjayhwQWQsIEZBTFNFKTsKLQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19QSUdHWUJBQ0tfSU5VU0VEKTsKLQotCXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS53b3JkID0gcEFkLT5Db21tb25DZmcuUkVHQkFDYXBhYmlsaXR5LndvcmQ7Ci0KLQkvKiBSZXN0b3JlIGFsbCBzZXR0aW5ncyBpbiB0aGUgZm9sbG93aW5nLiAqLwotCUFzaWNVcGRhdGVQcm90ZWN0KHBBZCwgMCwKLQkJCSAgKEFMTE5fU0VUUFJPVEVDVCB8IENDS1NFVFBST1RFQ1QgfCBPRkRNU0VUUFJPVEVDVCksCi0JCQkgIFRSVUUsIEZBTFNFKTsKLQlBc2ljRGlzYWJsZVJERyhwQWQpOwotCXBBZC0+Q29tbW9uQ2ZnLklPVGVzdFBhcm0uYkN1cnJlbnRBdGhlcm9zID0gRkFMU0U7Ci0JcEFkLT5Db21tb25DZmcuSU9UZXN0UGFybS5iTm93QXRoZXJvc0J1cnN0T24gPSBGQUxTRTsKLQotCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BWF9MRU5fQ0ZHLCAweDFmZmYpOwotCVJUTVBfQ0xFQVJfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MpOwotCi0vKiBBbGxvdyBnbyB0byBzbGVlcCBhZnRlciBsaW5rZG93biBzdGVwcy4gKi8KLQlSVE1QX1NFVF9QU0ZMQUcocEFkLCBmUlRNUF9QU19DQU5fR09fU0xFRVApOwotCi0JUnRtcE9TV3JpZWxlc3NFdmVudFNlbmQocEFkLCBTSU9DR0lXQVAsIC0xLCBOVUxMLCBOVUxMLCAwKTsKLQotI2lmZGVmIFJUMzB4eAotCWlmICgoSVNfUlQzMHh4KHBBZCkgfHwgSVNfUlQzMDkwKHBBZCkgfHwgSVNfUlQzMzkwKHBBZCkpCi0JICAgICYmIChwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID4gMSB8fCBwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoID4gMSkpIHsKLQkJUlRNUF9BU0lDX01NUFNfRElTQUJMRShwQWQpOwotCX0KLSNlbmRpZiAvKiBSVDMweHggLy8gKi8KLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgSXRlcmF0ZU9uQnNzVGFiKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlzdHJ1Y3QgcnRfbWxtZV9zdGFydF9yZXEgU3RhcnRSZXE7Ci0Jc3RydWN0IHJ0X21sbWVfam9pbl9yZXEgSm9pblJlcTsKLQl1bnNpZ25lZCBsb25nIEJzc0lkeDsKLQotCS8qIENoYW5nZSB0aGUgd2Vwc3RhdHVzIHRvIG9yaWdpbmFsIHdlcHN0YXR1cyAqLwotCXBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9IHBBZC0+U3RhQ2ZnLk9yaWdXZXBTdGF0dXM7Ci0JcEFkLT5TdGFDZmcuUGFpckNpcGhlciA9IHBBZC0+U3RhQ2ZnLk9yaWdXZXBTdGF0dXM7Ci0JcEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPSBwQWQtPlN0YUNmZy5PcmlnV2VwU3RhdHVzOwotCi0JQnNzSWR4ID0gcEFkLT5NbG1lQXV4LkJzc0lkeDsKLQlpZiAoQnNzSWR4IDwgcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzTnIpIHsKLQkJLyogQ2hlY2sgY2lwaGVyIHN1aXRlLCBBUCBtdXN0IGhhdmUgbW9yZSBzZWN1cmVkIGNpcGhlciB0aGFuIHN0YXRpb24gc2V0dGluZyAqLwotCQkvKiBTZXQgdGhlIFBhaXJ3aXNlIGFuZCBHcm91cCBjaXBoZXIgdG8gbWF0Y2ggdGhlIGludGVuZGVkIEFQIHNldHRpbmcgKi8KLQkJLyogV2UgY2FuIG9ubHkgY29ubmVjdCB0byBBUCB3aXRoIGxlc3Mgc2VjdXJlZCBjaXBoZXIgc2V0dGluZyAqLwotCQlpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkKLQkJICAgIHx8IChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spKSB7Ci0JCQlwQWQtPlN0YUNmZy5Hcm91cENpcGhlciA9Ci0JCQkgICAgcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzRW50cnlbQnNzSWR4XS5XUEEuCi0JCQkgICAgR3JvdXBDaXBoZXI7Ci0KLQkJCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0KLQkJCSAgICBwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NFbnRyeVtCc3NJZHhdLldQQS4KLQkJCSAgICBQYWlyQ2lwaGVyKQotCQkJCXBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPQotCQkJCSAgICBwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NFbnRyeVtCc3NJZHhdLgotCQkJCSAgICBXUEEuUGFpckNpcGhlcjsKLQkJCWVsc2UgaWYgKHBBZC0+TWxtZUF1eC5Tc2lkQnNzVGFiLkJzc0VudHJ5W0Jzc0lkeF0uV1BBLgotCQkJCSBQYWlyQ2lwaGVyQXV4ICE9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZCkKLQkJCQlwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID0KLQkJCQkgICAgcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzRW50cnlbQnNzSWR4XS4KLQkJCQkgICAgV1BBLlBhaXJDaXBoZXJBdXg7Ci0JCQllbHNlCS8qIFRoZXJlIGlzIG5vIFBhaXJDaXBoZXIgQXV4LCBkb3duZ3JhZGUgb3VyIGNhcGFiaWxpdHkgdG8gVEtJUCAqLwotCQkJCXBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPQotCQkJCSAgICBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOwotCQl9IGVsc2UgaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyKQotCQkJICAgfHwgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09Ci0JCQkgICAgICAgTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykpIHsKLQkJCXBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID0KLQkJCSAgICBwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NFbnRyeVtCc3NJZHhdLldQQTIuCi0JCQkgICAgR3JvdXBDaXBoZXI7Ci0KLQkJCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0KLQkJCSAgICBwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NFbnRyeVtCc3NJZHhdLldQQTIuCi0JCQkgICAgUGFpckNpcGhlcikKLQkJCQlwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID0KLQkJCQkgICAgcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzRW50cnlbQnNzSWR4XS4KLQkJCQkgICAgV1BBMi5QYWlyQ2lwaGVyOwotCQkJZWxzZSBpZiAocEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzRW50cnlbQnNzSWR4XS5XUEEyLgotCQkJCSBQYWlyQ2lwaGVyQXV4ICE9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZCkKLQkJCQlwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID0KLQkJCQkgICAgcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzRW50cnlbQnNzSWR4XS4KLQkJCQkgICAgV1BBMi5QYWlyQ2lwaGVyQXV4OwotCQkJZWxzZQkvKiBUaGVyZSBpcyBubyBQYWlyQ2lwaGVyIEF1eCwgZG93bmdyYWRlIG91ciBjYXBhYmlsaXR5IHRvIFRLSVAgKi8KLQkJCQlwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID0KLQkJCQkgICAgTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZDsKLQotCQkJLyogUlNOIGNhcGFiaWxpdHkgKi8KLQkJCXBBZC0+U3RhQ2ZnLlJzbkNhcGFiaWxpdHkgPQotCQkJICAgIHBBZC0+TWxtZUF1eC5Tc2lkQnNzVGFiLkJzc0VudHJ5W0Jzc0lkeF0uV1BBMi4KLQkJCSAgICBSc25DYXBhYmlsaXR5OwotCQl9Ci0JCS8qIFNldCBNaXggY2lwaGVyIGZsYWcgKi8KLQkJcEFkLT5TdGFDZmcuYk1peENpcGhlciA9Ci0JCSAgICAocEFkLT5TdGFDZmcuUGFpckNpcGhlciA9PQotCQkgICAgIHBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyKSA/IEZBTFNFIDogVFJVRTsKLQkJLyppZiAocEFkLT5TdGFDZmcuYk1peENpcGhlciA9PSBUUlVFKQotCQkgICB7Ci0JCSAgIC8vIElmIG1peCBjaXBoZXIsIHJlLWJ1aWxkIFJTTklFCi0JCSAgIFJUTVBNYWtlUlNOSUUocEFkLCBwQWQtPlN0YUNmZy5BdXRoTW9kZSwgcEFkLT5TdGFDZmcuV2VwU3RhdHVzLCAwKTsKLQkJICAgfSAqLwotCi0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiQ05UTCAtIGl0ZXJhdGUgQlNTICVsZCBvZiAlZFxuIiwgQnNzSWR4LAotCQkJICBwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NOcikpOwotCQlKb2luUGFybUZpbGwocEFkLCAmSm9pblJlcSwgQnNzSWR4KTsKLQkJTWxtZUVucXVldWUocEFkLCBTWU5DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0pPSU5fUkVRLAotCQkJICAgIHNpemVvZihzdHJ1Y3QgcnRfbWxtZV9qb2luX3JlcSksICZKb2luUmVxKTsKLQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9KT0lOOwotCX0gZWxzZSBpZiAocEFkLT5TdGFDZmcuQnNzVHlwZSA9PSBCU1NfQURIT0MpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJDTlRMIC0gQWxsIEJTUyBmYWlsOyBzdGFydCBhIG5ldyBBREhPQyAoU3NpZD0lcykuLi5cbiIsCi0JCQkgIHBBZC0+TWxtZUF1eC5Tc2lkKSk7Ci0JCVN0YXJ0UGFybUZpbGwocEFkLCAmU3RhcnRSZXEsIChjaGFyICopcEFkLT5NbG1lQXV4LlNzaWQsCi0JCQkgICAgICBwQWQtPk1sbWVBdXguU3NpZExlbik7Ci0JCU1sbWVFbnF1ZXVlKHBBZCwgU1lOQ19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9TVEFSVF9SRVEsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBydF9tbG1lX3N0YXJ0X3JlcSksICZTdGFydFJlcSk7Ci0JCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfU1RBUlQ7Ci0JfSBlbHNlCQkJLyogbm8gbW9yZSBCU1MgKi8KLQl7Ci0KLQkJewotCQkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsLCBGQUxTRSk7Ci0JCQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKTsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAoIkNOVEwgLSBBbGwgcm9hbWluZyBmYWlsZWQsIHJlc3RvcmUgdG8gY2hhbm5lbCAlZCwgVG90YWwgQlNTWyUwMmRdXG4iLAotCQkJCSAgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCwgcEFkLT5TY2FuVGFiLkJzc05yKSk7Ci0JCX0KLQotCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9JRExFOwotCX0KLX0KLQotLyogZm9yIHJlLWFzc29jaWF0aW9uIG9ubHkgKi8KLS8qIElSUUwgPSBESVNQQVRDSF9MRVZFTCAqLwotdm9pZCBJdGVyYXRlT25Cc3NUYWIyKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlzdHJ1Y3QgcnRfbWxtZV9hc3NvY19yZXEgUmVhc3NvY1JlcTsKLQl1bnNpZ25lZCBsb25nIEJzc0lkeDsKLQlzdHJ1Y3QgcnRfYnNzX2VudHJ5ICpwQnNzOwotCi0JQnNzSWR4ID0gcEFkLT5NbG1lQXV4LlJvYW1JZHg7Ci0JcEJzcyA9ICZwQWQtPk1sbWVBdXguUm9hbVRhYi5Cc3NFbnRyeVtCc3NJZHhdOwotCi0JaWYgKEJzc0lkeCA8IHBBZC0+TWxtZUF1eC5Sb2FtVGFiLkJzc05yKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiQ05UTCAtIGl0ZXJhdGUgQlNTICVsZCBvZiAlZFxuIiwgQnNzSWR4LAotCQkJICBwQWQtPk1sbWVBdXguUm9hbVRhYi5Cc3NOcikpOwotCi0JCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEJzcy0+Q2hhbm5lbCwgRkFMU0UpOwotCQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQnNzLT5DaGFubmVsKTsKLQotCQkvKiByZWFzc29jaWF0ZSBtZXNzYWdlIGhhcyB0aGUgc2FtZSBzdHJ1Y3R1cmUgYXMgYXNzb2NpYXRlIG1lc3NhZ2UgKi8KLQkJQXNzb2NQYXJtRmlsbChwQWQsICZSZWFzc29jUmVxLCBwQnNzLT5Cc3NpZCwKLQkJCSAgICAgIHBCc3MtPkNhcGFiaWxpdHlJbmZvLCBBU1NPQ19USU1FT1VULAotCQkJICAgICAgcEFkLT5TdGFDZmcuRGVmYXVsdExpc3RlbkNvdW50KTsKLQkJTWxtZUVucXVldWUocEFkLCBBU1NPQ19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9SRUFTU09DX1JFUSwKLQkJCSAgICBzaXplb2Yoc3RydWN0IHJ0X21sbWVfYXNzb2NfcmVxKSwgJlJlYXNzb2NSZXEpOwotCi0JCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfUkVBU1NPQzsKLQl9IGVsc2UJCQkvKiBubyBtb3JlIEJTUyAqLwotCXsKLQotCQl7Ci0JCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwsIEZBTFNFKTsKLQkJCUFzaWNMb2NrQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpOwotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiQ05UTCAtIEFsbCByb2FtaW5nIGZhaWxlZCwgcmVzdG9yZSB0byBjaGFubmVsICVkLCBUb3RhbCBCU1NbJTAyZF1cbiIsCi0JCQkJICBwQWQtPkNvbW1vbkNmZy5DaGFubmVsLCBwQWQtPlNjYW5UYWIuQnNzTnIpKTsKLQkJfQotCi0JCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7Ci0JfQotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBKb2luUGFybUZpbGwoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgIHN0cnVjdCBydF9tbG1lX2pvaW5fcmVxICpKb2luUmVxLCB1bnNpZ25lZCBsb25nIEJzc0lkeCkKLXsKLQlKb2luUmVxLT5Cc3NJZHggPSBCc3NJZHg7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFNjYW5QYXJtRmlsbChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCSAgc3RydWN0IHJ0X21sbWVfc2Nhbl9yZXEgKlNjYW5SZXEsCi0JCSAgY2hhciBTc2lkW10sCi0JCSAgdTggU3NpZExlbiwgdTggQnNzVHlwZSwgdTggU2NhblR5cGUpCi17Ci0JTmRpc1plcm9NZW1vcnkoU2NhblJlcS0+U3NpZCwgTUFYX0xFTl9PRl9TU0lEKTsKLQlTY2FuUmVxLT5Tc2lkTGVuID0gU3NpZExlbjsKLQlOZGlzTW92ZU1lbW9yeShTY2FuUmVxLT5Tc2lkLCBTc2lkLCBTc2lkTGVuKTsKLQlTY2FuUmVxLT5Cc3NUeXBlID0gQnNzVHlwZTsKLQlTY2FuUmVxLT5TY2FuVHlwZSA9IFNjYW5UeXBlOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBTdGFydFBhcm1GaWxsKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgc3RydWN0IHJ0X21sbWVfc3RhcnRfcmVxICpTdGFydFJlcSwKLQkJICAgY2hhciBTc2lkW10sIHU4IFNzaWRMZW4pCi17Ci0JQVNTRVJUKFNzaWRMZW4gPD0gTUFYX0xFTl9PRl9TU0lEKTsKLQlOZGlzTW92ZU1lbW9yeShTdGFydFJlcS0+U3NpZCwgU3NpZCwgU3NpZExlbik7Ci0JU3RhcnRSZXEtPlNzaWRMZW4gPSBTc2lkTGVuOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBBdXRoUGFybUZpbGwoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgIHN0cnVjdCBydF9tbG1lX2F1dGhfcmVxICpBdXRoUmVxLAotCQkgIHU4ICpwQWRkciwgdTE2IEFsZykKLXsKLQlDT1BZX01BQ19BRERSKEF1dGhSZXEtPkFkZHIsIHBBZGRyKTsKLQlBdXRoUmVxLT5BbGcgPSBBbGc7Ci0JQXV0aFJlcS0+VGltZW91dCA9IEFVVEhfVElNRU9VVDsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0jaWZkZWYgUlRNUF9NQUNfUENJCi12b2lkIENvbXBvc2VQc1BvbGwoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCU5kaXNaZXJvTWVtb3J5KCZwQWQtPlBzUG9sbEZyYW1lLCBzaXplb2Yoc3RydWN0IHJ0X3BzcG9sbF9mcmFtZSkpOwotCXBBZC0+UHNQb2xsRnJhbWUuRkMuVHlwZSA9IEJUWVBFX0NOVEw7Ci0JcEFkLT5Qc1BvbGxGcmFtZS5GQy5TdWJUeXBlID0gU1VCVFlQRV9QU19QT0xMOwotCXBBZC0+UHNQb2xsRnJhbWUuQWlkID0gcEFkLT5TdGFBY3RpdmUuQWlkIHwgMHhDMDAwOwotCUNPUFlfTUFDX0FERFIocEFkLT5Qc1BvbGxGcmFtZS5Cc3NpZCwgcEFkLT5Db21tb25DZmcuQnNzaWQpOwotCUNPUFlfTUFDX0FERFIocEFkLT5Qc1BvbGxGcmFtZS5UYSwgcEFkLT5DdXJyZW50QWRkcmVzcyk7Ci19Ci0KLS8qIElSUUwgPSBESVNQQVRDSF9MRVZFTCAqLwotdm9pZCBDb21wb3NlTnVsbEZyYW1lKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlOZGlzWmVyb01lbW9yeSgmcEFkLT5OdWxsRnJhbWUsIHNpemVvZihzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSkpOwotCXBBZC0+TnVsbEZyYW1lLkZDLlR5cGUgPSBCVFlQRV9EQVRBOwotCXBBZC0+TnVsbEZyYW1lLkZDLlN1YlR5cGUgPSBTVUJUWVBFX05VTExfRlVOQzsKLQlwQWQtPk51bGxGcmFtZS5GQy5Ub0RzID0gMTsKLQlDT1BZX01BQ19BRERSKHBBZC0+TnVsbEZyYW1lLkFkZHIxLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7Ci0JQ09QWV9NQUNfQUREUihwQWQtPk51bGxGcmFtZS5BZGRyMiwgcEFkLT5DdXJyZW50QWRkcmVzcyk7Ci0JQ09QWV9NQUNfQUREUihwQWQtPk51bGxGcmFtZS5BZGRyMywgcEFkLT5Db21tb25DZmcuQnNzaWQpOwotfQotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotI2lmZGVmIFJUTVBfTUFDX1VTQgotdm9pZCBNbG1lQ250bENvbmZpcm0oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1bnNpZ25lZCBsb25nIE1zZ1R5cGUsIHUxNiBNc2cpCi17Ci0JTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTXNnVHlwZSwgc2l6ZW9mKHUxNiksCi0JCSAgICAmTXNnKTsKLX0KLQotdm9pZCBDb21wb3NlUHNQb2xsKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlzdHJ1Y3QgcnRfdHhpbmZvICpwVHhJbmZvOwotCXN0cnVjdCBydF90eHdpICogcFR4V0k7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDb21wb3NlUHNQb2xsXG4iKSk7Ci0JTmRpc1plcm9NZW1vcnkoJnBBZC0+UHNQb2xsRnJhbWUsIHNpemVvZihzdHJ1Y3QgcnRfcHNwb2xsX2ZyYW1lKSk7Ci0KLQlwQWQtPlBzUG9sbEZyYW1lLkZDLlB3ck1nbXQgPSAwOwotCXBBZC0+UHNQb2xsRnJhbWUuRkMuVHlwZSA9IEJUWVBFX0NOVEw7Ci0JcEFkLT5Qc1BvbGxGcmFtZS5GQy5TdWJUeXBlID0gU1VCVFlQRV9QU19QT0xMOwotCXBBZC0+UHNQb2xsRnJhbWUuQWlkID0gcEFkLT5TdGFBY3RpdmUuQWlkIHwgMHhDMDAwOwotCUNPUFlfTUFDX0FERFIocEFkLT5Qc1BvbGxGcmFtZS5Cc3NpZCwgcEFkLT5Db21tb25DZmcuQnNzaWQpOwotCUNPUFlfTUFDX0FERFIocEFkLT5Qc1BvbGxGcmFtZS5UYSwgcEFkLT5DdXJyZW50QWRkcmVzcyk7Ci0KLQlSVE1QWmVyb01lbW9yeSgmcEFkLT5Qc1BvbGxDb250ZXh0LlRyYW5zZmVyQnVmZmVyLT5maWVsZC4KLQkJICAgICAgIFdpcmVsZXNzUGFja2V0WzBdLCAxMDApOwotCXBUeEluZm8gPQotCSAgICAoc3RydWN0IHJ0X3R4aW5mbyAqKSYgcEFkLT5Qc1BvbGxDb250ZXh0LlRyYW5zZmVyQnVmZmVyLT5maWVsZC4KLQkgICAgV2lyZWxlc3NQYWNrZXRbMF07Ci0JUlRNUFdyaXRlVHhJbmZvKHBBZCwgcFR4SW5mbywKLQkJCSh1MTYpKHNpemVvZihzdHJ1Y3QgcnRfcHNwb2xsX2ZyYW1lKSArIFRYV0lfU0laRSksIFRSVUUsCi0JCQlFcFRvUXVldWVbTUdNVFBJUEVJRFhdLCBGQUxTRSwgRkFMU0UpOwotCXBUeFdJID0KLQkgICAgKHN0cnVjdCBydF90eHdpICopICYgcEFkLT5Qc1BvbGxDb250ZXh0LlRyYW5zZmVyQnVmZmVyLT5maWVsZC4KLQkgICAgV2lyZWxlc3NQYWNrZXRbVFhJTkZPX1NJWkVdOwotCVJUTVBXcml0ZVR4V0kocEFkLCBwVHhXSSwgRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UsIFRSVUUsIEZBTFNFLCAwLAotCQkgICAgICBCU1NJRF9XQ0lELCAoc2l6ZW9mKHN0cnVjdCBydF9wc3BvbGxfZnJhbWUpKSwgMCwgMCwKLQkJICAgICAgKHU4KXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NQ1MsCi0JCSAgICAgIElGU19CQUNLT0ZGLCBGQUxTRSwgJnBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdCk7Ci0JUlRNUE1vdmVNZW1vcnkoJnBBZC0+UHNQb2xsQ29udGV4dC5UcmFuc2ZlckJ1ZmZlci0+ZmllbGQuCi0JCSAgICAgICBXaXJlbGVzc1BhY2tldFtUWFdJX1NJWkUgKyBUWElORk9fU0laRV0sCi0JCSAgICAgICAmcEFkLT5Qc1BvbGxGcmFtZSwgc2l6ZW9mKHN0cnVjdCBydF9wc3BvbGxfZnJhbWUpKTsKLQkvKiBBcHBlbmQgNCBleHRyYSB6ZXJvIGJ5dGVzLiAqLwotCXBBZC0+UHNQb2xsQ29udGV4dC5CdWxrT3V0U2l6ZSA9Ci0JICAgIFRYSU5GT19TSVpFICsgVFhXSV9TSVpFICsgc2l6ZW9mKHN0cnVjdCBydF9wc3BvbGxfZnJhbWUpICsgNDsKLX0KLQotLyogSVJRTCA9IERJU1BBVENIX0xFVkVMICovCi12b2lkIENvbXBvc2VOdWxsRnJhbWUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCXN0cnVjdCBydF90eGluZm8gKnBUeEluZm87Ci0Jc3RydWN0IHJ0X3R4d2kgKiBwVHhXSTsKLQotCU5kaXNaZXJvTWVtb3J5KCZwQWQtPk51bGxGcmFtZSwgc2l6ZW9mKHN0cnVjdCBydF9oZWFkZXJfODAyXzExKSk7Ci0JcEFkLT5OdWxsRnJhbWUuRkMuVHlwZSA9IEJUWVBFX0RBVEE7Ci0JcEFkLT5OdWxsRnJhbWUuRkMuU3ViVHlwZSA9IFNVQlRZUEVfTlVMTF9GVU5DOwotCXBBZC0+TnVsbEZyYW1lLkZDLlRvRHMgPSAxOwotCUNPUFlfTUFDX0FERFIocEFkLT5OdWxsRnJhbWUuQWRkcjEsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKLQlDT1BZX01BQ19BRERSKHBBZC0+TnVsbEZyYW1lLkFkZHIyLCBwQWQtPkN1cnJlbnRBZGRyZXNzKTsKLQlDT1BZX01BQ19BRERSKHBBZC0+TnVsbEZyYW1lLkFkZHIzLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7Ci0JUlRNUFplcm9NZW1vcnkoJnBBZC0+TnVsbENvbnRleHQuVHJhbnNmZXJCdWZmZXItPmZpZWxkLgotCQkgICAgICAgV2lyZWxlc3NQYWNrZXRbMF0sIDEwMCk7Ci0JcFR4SW5mbyA9Ci0JICAgIChzdHJ1Y3QgcnRfdHhpbmZvICopJiBwQWQtPk51bGxDb250ZXh0LlRyYW5zZmVyQnVmZmVyLT5maWVsZC4KLQkgICAgV2lyZWxlc3NQYWNrZXRbMF07Ci0JUlRNUFdyaXRlVHhJbmZvKHBBZCwgcFR4SW5mbywKLQkJCSh1MTYpKHNpemVvZihzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSkgKyBUWFdJX1NJWkUpLCBUUlVFLAotCQkJRXBUb1F1ZXVlW01HTVRQSVBFSURYXSwgRkFMU0UsIEZBTFNFKTsKLQlwVHhXSSA9Ci0JICAgIChzdHJ1Y3QgcnRfdHh3aSAqKSAmIHBBZC0+TnVsbENvbnRleHQuVHJhbnNmZXJCdWZmZXItPmZpZWxkLgotCSAgICBXaXJlbGVzc1BhY2tldFtUWElORk9fU0laRV07Ci0JUlRNUFdyaXRlVHhXSShwQWQsIHBUeFdJLCBGQUxTRSwgRkFMU0UsIEZBTFNFLCBGQUxTRSwgVFJVRSwgRkFMU0UsIDAsCi0JCSAgICAgIEJTU0lEX1dDSUQsIChzaXplb2Yoc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEpKSwgMCwgMCwKLQkJICAgICAgKHU4KXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NQ1MsCi0JCSAgICAgIElGU19CQUNLT0ZGLCBGQUxTRSwgJnBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdCk7Ci0JUlRNUE1vdmVNZW1vcnkoJnBBZC0+TnVsbENvbnRleHQuVHJhbnNmZXJCdWZmZXItPmZpZWxkLgotCQkgICAgICAgV2lyZWxlc3NQYWNrZXRbVFhXSV9TSVpFICsgVFhJTkZPX1NJWkVdLCAmcEFkLT5OdWxsRnJhbWUsCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEpKTsKLQlwQWQtPk51bGxDb250ZXh0LkJ1bGtPdXRTaXplID0KLQkgICAgVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkUgKyBzaXplb2YocEFkLT5OdWxsRnJhbWUpICsgNDsKLX0KLSNlbmRpZiAvKiBSVE1QX01BQ19VU0IgLy8gKi8KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlQcmUtYnVpbGQgYSBCRUFDT04gZnJhbWUgaW4gdGhlIHNoYXJlZCBtZW1vcnkKLQotCUlSUUwgPSBQQVNTSVZFX0xFVkVMCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXVuc2lnbmVkIGxvbmcgTWFrZUlic3NCZWFjb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCXU4IERzTGVuID0gMSwgSWJzc0xlbiA9IDI7Ci0JdTggTG9jYWxFcnBJZVszXSA9IHsgSUVfRVJQLCAxLCAweDA0IH07Ci0Jc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEgQmNuSGRyOwotCXUxNiBDYXBhYmlsaXR5SW5mbzsKLQlMQVJHRV9JTlRFR0VSIEZha2VUaW1lc3RhbXA7Ci0JdW5zaWduZWQgbG9uZyBGcmFtZUxlbiA9IDA7Ci0Jc3RydWN0IHJ0X3R4d2kgKiBwVHhXSSA9ICZwQWQtPkJlYWNvblR4V0k7Ci0JdTggKnBCZWFjb25GcmFtZSA9IHBBZC0+QmVhY29uQnVmOwotCUJPT0xFQU4gUHJpdmFjeTsKLQl1OCBTdXBSYXRlW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXTsKLQl1OCBTdXBSYXRlTGVuID0gMDsKLQl1OCBFeHRSYXRlW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXTsKLQl1OCBFeHRSYXRlTGVuID0gMDsKLQl1OCBSU05JZSA9IElFX1dQQTsKLQotCWlmICgocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFCKQotCSAgICAmJiAocEFkLT5Db21tb25DZmcuQ2hhbm5lbCA8PSAxNCkpIHsKLQkJU3VwUmF0ZVswXSA9IDB4ODI7CS8qIDEgbWJwcyAqLwotCQlTdXBSYXRlWzFdID0gMHg4NDsJLyogMiBtYnBzICovCi0JCVN1cFJhdGVbMl0gPSAweDhiOwkvKiA1LjUgbWJwcyAqLwotCQlTdXBSYXRlWzNdID0gMHg5NjsJLyogMTEgbWJwcyAqLwotCQlTdXBSYXRlTGVuID0gNDsKLQkJRXh0UmF0ZUxlbiA9IDA7Ci0JfSBlbHNlIGlmIChwQWQtPkNvbW1vbkNmZy5DaGFubmVsID4gMTQpIHsKLQkJU3VwUmF0ZVswXSA9IDB4OEM7CS8qIDYgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMsIGJhc2ljIHJhdGUgKi8KLQkJU3VwUmF0ZVsxXSA9IDB4MTI7CS8qIDkgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMgKi8KLQkJU3VwUmF0ZVsyXSA9IDB4OTg7CS8qIDEyIG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzLCBiYXNpYyByYXRlICovCi0JCVN1cFJhdGVbM10gPSAweDI0OwkvKiAxOCBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcyAqLwotCQlTdXBSYXRlWzRdID0gMHhiMDsJLyogMjQgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMsIGJhc2ljIHJhdGUgKi8KLQkJU3VwUmF0ZVs1XSA9IDB4NDg7CS8qIDM2IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzICovCi0JCVN1cFJhdGVbNl0gPSAweDYwOwkvKiA0OCBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcyAqLwotCQlTdXBSYXRlWzddID0gMHg2YzsJLyogNTQgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMgKi8KLQkJU3VwUmF0ZUxlbiA9IDg7Ci0JCUV4dFJhdGVMZW4gPSAwOwotCi0JCS8qICovCi0JCS8qIEFsc28gVXBkYXRlIE1sbWVSYXRlICYgUnRzUmF0ZSBmb3IgRyBvbmx5ICYgQSBvbmx5ICovCi0JCS8qICovCi0JCXBBZC0+Q29tbW9uQ2ZnLk1sbWVSYXRlID0gUkFURV82OwotCQlwQWQtPkNvbW1vbkNmZy5SdHNSYXRlID0gUkFURV82OwotCQlwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTU9ERSA9IE1PREVfT0ZETTsKLQkJcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1DUyA9Ci0JCSAgICBPZmRtUmF0ZVRvUnh3aU1DU1twQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZV07Ci0JCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTME1jYXN0X1dDSURdLkhUUGh5TW9kZS5maWVsZC5NT0RFID0KLQkJICAgIE1PREVfT0ZETTsKLQkJcEFkLT5NYWNUYWIuQ29udGVudFtCU1MwTWNhc3RfV0NJRF0uSFRQaHlNb2RlLmZpZWxkLk1DUyA9Ci0JCSAgICBPZmRtUmF0ZVRvUnh3aU1DU1twQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZV07Ci0JfSBlbHNlIHsKLQkJU3VwUmF0ZVswXSA9IDB4ODI7CS8qIDEgbWJwcyAqLwotCQlTdXBSYXRlWzFdID0gMHg4NDsJLyogMiBtYnBzICovCi0JCVN1cFJhdGVbMl0gPSAweDhiOwkvKiA1LjUgbWJwcyAqLwotCQlTdXBSYXRlWzNdID0gMHg5NjsJLyogMTEgbWJwcyAqLwotCQlTdXBSYXRlTGVuID0gNDsKLQotCQlFeHRSYXRlWzBdID0gMHgwQzsJLyogNiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcywgKi8KLQkJRXh0UmF0ZVsxXSA9IDB4MTI7CS8qIDkgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMgKi8KLQkJRXh0UmF0ZVsyXSA9IDB4MTg7CS8qIDEyIG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzLCAqLwotCQlFeHRSYXRlWzNdID0gMHgyNDsJLyogMTggbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMgKi8KLQkJRXh0UmF0ZVs0XSA9IDB4MzA7CS8qIDI0IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzLCAqLwotCQlFeHRSYXRlWzVdID0gMHg0ODsJLyogMzYgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMgKi8KLQkJRXh0UmF0ZVs2XSA9IDB4NjA7CS8qIDQ4IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzICovCi0JCUV4dFJhdGVbN10gPSAweDZjOwkvKiA1NCBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcyAqLwotCQlFeHRSYXRlTGVuID0gODsKLQl9Ci0KLQlwQWQtPlN0YUFjdGl2ZS5TdXBSYXRlTGVuID0gU3VwUmF0ZUxlbjsKLQlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUFjdGl2ZS5TdXBSYXRlLCBTdXBSYXRlLCBTdXBSYXRlTGVuKTsKLQlwQWQtPlN0YUFjdGl2ZS5FeHRSYXRlTGVuID0gRXh0UmF0ZUxlbjsKLQlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUFjdGl2ZS5FeHRSYXRlLCBFeHRSYXRlLCBFeHRSYXRlTGVuKTsKLQotCS8qIGNvbXBvc2UgSUJTUyBiZWFjb24gZnJhbWUgKi8KLQlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkJjbkhkciwgU1VCVFlQRV9CRUFDT04sIDAsIEJST0FEQ0FTVF9BRERSLAotCQkJIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKLQlQcml2YWN5ID0gKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkKQotCSAgICB8fCAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpCi0JICAgIHx8IChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCk7Ci0JQ2FwYWJpbGl0eUluZm8gPQotCSAgICBDQVBfR0VORVJBVEUoMCwgMSwgUHJpdmFjeSwKLQkJCSAocEFkLT5Db21tb25DZmcuVHhQcmVhbWJsZSA9PSBSdDgwMl8xMVByZWFtYmxlU2hvcnQpLAotCQkJIDAsIDApOwotCi0JTWFrZU91dGdvaW5nRnJhbWUocEJlYWNvbkZyYW1lLCAmRnJhbWVMZW4sCi0JCQkgIHNpemVvZihzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSksICZCY25IZHIsCi0JCQkgIFRJTUVTVEFNUF9MRU4sICZGYWtlVGltZXN0YW1wLAotCQkJICAyLCAmcEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kLAotCQkJICAyLCAmQ2FwYWJpbGl0eUluZm8sCi0JCQkgIDEsICZTc2lkSWUsCi0JCQkgIDEsICZwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuLAotCQkJICBwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuLCBwQWQtPkNvbW1vbkNmZy5Tc2lkLAotCQkJICAxLCAmU3VwUmF0ZUllLAotCQkJICAxLCAmU3VwUmF0ZUxlbiwKLQkJCSAgU3VwUmF0ZUxlbiwgU3VwUmF0ZSwKLQkJCSAgMSwgJkRzSWUsCi0JCQkgIDEsICZEc0xlbiwKLQkJCSAgMSwgJnBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwsCi0JCQkgIDEsICZJYnNzSWUsCi0JCQkgIDEsICZJYnNzTGVuLCAyLCAmcEFkLT5TdGFBY3RpdmUuQXRpbVdpbiwgRU5EX09GX0FSR1MpOwotCi0JLyogYWRkIEVSUF9JRSBhbmQgRVhUX1JBRSBJRSBvZiBpbiA4MDIuMTFnICovCi0JaWYgKEV4dFJhdGVMZW4pIHsKLQkJdW5zaWduZWQgbG9uZyB0bXA7Ci0KLQkJTWFrZU91dGdvaW5nRnJhbWUocEJlYWNvbkZyYW1lICsgRnJhbWVMZW4sICZ0bXAsCi0JCQkJICAzLCBMb2NhbEVycEllLAotCQkJCSAgMSwgJkV4dFJhdGVJZSwKLQkJCQkgIDEsICZFeHRSYXRlTGVuLAotCQkJCSAgRXh0UmF0ZUxlbiwgRXh0UmF0ZSwgRU5EX09GX0FSR1MpOwotCQlGcmFtZUxlbiArPSB0bXA7Ci0JfQotCS8qIElmIGFkaG9jIHNlY3J1aXR5IGlzIHNldCBmb3IgV1BBLU5vbmUsIGFwcGVuZCB0aGUgY2lwaGVyIHN1aXRlIElFICovCi0JaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmUpIHsKLQkJdW5zaWduZWQgbG9uZyB0bXA7Ci0JCVJUTVBNYWtlUlNOSUUocEFkLCBwQWQtPlN0YUNmZy5BdXRoTW9kZSwgcEFkLT5TdGFDZmcuV2VwU3RhdHVzLAotCQkJICAgICAgQlNTMCk7Ci0KLQkJTWFrZU91dGdvaW5nRnJhbWUocEJlYWNvbkZyYW1lICsgRnJhbWVMZW4sICZ0bXAsCi0JCQkJICAxLCAmUlNOSWUsCi0JCQkJICAxLCAmcEFkLT5TdGFDZmcuUlNOSUVfTGVuLAotCQkJCSAgcEFkLT5TdGFDZmcuUlNOSUVfTGVuLCBwQWQtPlN0YUNmZy5SU05fSUUsCi0JCQkJICBFTkRfT0ZfQVJHUyk7Ci0JCUZyYW1lTGVuICs9IHRtcDsKLQl9Ci0KLQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPj0gUEhZXzExQUJHTl9NSVhFRCkpIHsKLQkJdW5zaWduZWQgbG9uZyBUbXBMZW47Ci0JCXU4IEh0TGVuLCBIdExlbjE7Ci0KLQkJLyogYWRkIEhUIENhcGFiaWxpdHkgSUUgKi8KLQkJSHRMZW4gPSBzaXplb2YocEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5KTsKLQkJSHRMZW4xID0gc2l6ZW9mKHBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mbyk7Ci0KLQkJTWFrZU91dGdvaW5nRnJhbWUocEJlYWNvbkZyYW1lICsgRnJhbWVMZW4sICZUbXBMZW4sCi0JCQkJICAxLCAmSHRDYXBJZSwKLQkJCQkgIDEsICZIdExlbiwKLQkJCQkgIEh0TGVuLCAmcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5LAotCQkJCSAgMSwgJkFkZEh0SW5mb0llLAotCQkJCSAgMSwgJkh0TGVuMSwKLQkJCQkgIEh0TGVuMSwgJnBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mbywKLQkJCQkgIEVORF9PRl9BUkdTKTsKLQotCQlGcmFtZUxlbiArPSBUbXBMZW47Ci0JfQotCS8qYmVhY29uIHVzZSByZXNlcnZlZCBXQ0lEIDB4ZmYgKi8KLQlpZiAocEFkLT5Db21tb25DZmcuQ2hhbm5lbCA+IDE0KSB7Ci0JCVJUTVBXcml0ZVR4V0kocEFkLCBwVHhXSSwgRkFMU0UsIEZBTFNFLCBUUlVFLCBGQUxTRSwgRkFMU0UsCi0JCQkgICAgICBUUlVFLCAwLCAweGZmLCBGcmFtZUxlbiwgUElEX01HTVQsIFBJRF9CRUFDT04sCi0JCQkgICAgICBSQVRFXzEsIElGU19IVFRYT1AsIEZBTFNFLAotCQkJICAgICAgJnBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdCk7Ci0JfSBlbHNlIHsKLQkJLyogU2V0IHRvIHVzZSAxTWJwcyBmb3IgQWRob2MgYmVhY29uLiAqLwotCQlIVFRSQU5TTUlUX1NFVFRJTkcgVHJhbnNtaXQ7Ci0JCVRyYW5zbWl0LndvcmQgPSAwOwotCQlSVE1QV3JpdGVUeFdJKHBBZCwgcFR4V0ksIEZBTFNFLCBGQUxTRSwgVFJVRSwgRkFMU0UsIEZBTFNFLAotCQkJICAgICAgVFJVRSwgMCwgMHhmZiwgRnJhbWVMZW4sIFBJRF9NR01ULCBQSURfQkVBQ09OLAotCQkJICAgICAgUkFURV8xLCBJRlNfSFRUWE9QLCBGQUxTRSwgJlRyYW5zbWl0KTsKLQl9Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJICgiTWFrZUlic3NCZWFjb24gKGxlbj0lbGQpLCBTdXBSYXRlTGVuPSVkLCBFeHRSYXRlTGVuPSVkLCBDaGFubmVsPSVkLCBQaHlNb2RlPSVkXG4iLAotCQkgIEZyYW1lTGVuLCBTdXBSYXRlTGVuLCBFeHRSYXRlTGVuLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsLAotCQkgIHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUpKTsKLQlyZXR1cm4gRnJhbWVMZW47Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YS9ydG1wX2RhdGEuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhL3J0bXBfZGF0YS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODJjNmI2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhL3J0bXBfZGF0YS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjU1MiArMCwwIEBACi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFJhbGluayBUZWNoIEluYy4KLSAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKLSAqIEhzaW5jaHUgQ291bnR5IDMwMiwKLSAqIFRhaXdhbiwgUi5PLkMuCi0gKgotICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotCU1vZHVsZSBOYW1lOgotCXJ0bXBfZGF0YS5jCi0KLQlBYnN0cmFjdDoKLQlEYXRhIHBhdGggc3Vicm91dGluZXMKLQotCVJldmlzaW9uIEhpc3Rvcnk6Ci0JV2hvIAkgIAkJV2hlbgkJV2hhdAotCUp1c3RpbiBQLiBNYXR0b2NrCTExLzA3LzIwMTAJRml4IHR5cG9zCi0JLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLSNpbmNsdWRlICIuLi9ydF9jb25maWcuaCIKLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLQotdm9pZCBTVEFSeEVBUE9MRnJhbWVJbmRpY2F0ZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgIHN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKnBFbnRyeSwKLQkJCSAgICAgc3RydWN0IHJ0X3J4X2JsayAqcFJ4QmxrLCB1OCBGcm9tV2hpY2hCU1NJRCkKLXsKLQlQUlQyOFhYX1JYRF9TVFJVQyBwUnhEID0gJihwUnhCbGstPlJ4RCk7Ci0Jc3RydWN0IHJ0X3J4d2kgKiBwUnhXSSA9IHBSeEJsay0+cFJ4V0k7Ci0JdTggKnBUbXBCdWY7Ci0KLQlpZiAocEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQKSB7Ci0JCS8qIEFsbCBFQVBvTCBmcmFtZXMgaGF2ZSB0byBwYXNzIHRvIHVwcGVyIGxheWVyIChleC4gV1BBX1NVUFBMSUNBTlQgZGFlbW9uKSAqLwotCQkvKiBUQkQgOiBwcm9jZXNzIGZyYWdtZW50ZWQgRUFQb2wgZnJhbWVzICovCi0JCXsKLQkJCS8qIEluIDgwMi4xeCBtb2RlLCBpZiB0aGUgcmVjZWl2ZWQgZnJhbWUgaXMgRUFQLVNVQ0NFU1MgcGFja2V0LCB0dXJuIG9uIHRoZSBQb3J0U2VjdXJlZCB2YXJpYWJsZSAqLwotCQkJaWYgKHBBZC0+U3RhQ2ZnLklFRUU4MDIxWCA9PSBUUlVFICYmCi0JCQkgICAgKEVBUF9DT0RFX1NVQ0NFU1MgPT0KLQkJCSAgICAgV3BhQ2hlY2tFYXBDb2RlKHBBZCwgcFJ4QmxrLT5wRGF0YSwKLQkJCQkJICAgICBwUnhCbGstPkRhdGFTaXplLAotCQkJCQkgICAgIExFTkdUSF84MDJfMV9IKSkpIHsKLQkJCQl1OCAqS2V5OwotCQkJCXU4IENpcGhlckFsZzsKLQkJCQlpbnQgaWR4ID0gMDsKLQotCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwKLQkJCQkJICAgICAoIlJlY2VpdmUgRUFQLVNVQ0NFU1MgUGFja2V0XG4iKSk7Ci0JCQkJLypwQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOyAqLwotCQkJCVNUQV9QT1JUX1NFQ1VSRUQocEFkKTsKLQotCQkJCWlmIChwQWQtPlN0YUNmZy5JRUVFODAyMXhfcmVxdWlyZWRfa2V5cyA9PQotCQkJCSAgICBGQUxTRSkgewotCQkJCQlpZHggPSBwQWQtPlN0YUNmZy5EZXNpcmVTaGFyZWRLZXlJZDsKLQkJCQkJQ2lwaGVyQWxnID0KLQkJCQkJICAgIHBBZC0+U3RhQ2ZnLkRlc2lyZVNoYXJlZEtleVtpZHhdLgotCQkJCQkgICAgQ2lwaGVyQWxnOwotCQkJCQlLZXkgPQotCQkJCQkgICAgcEFkLT5TdGFDZmcuRGVzaXJlU2hhcmVkS2V5W2lkeF0uCi0JCQkJCSAgICBLZXk7Ci0KLQkJCQkJaWYgKHBBZC0+U3RhQ2ZnLkRlc2lyZVNoYXJlZEtleVtpZHhdLgotCQkJCQkgICAgS2V5TGVuID4gMCkgewotI2lmZGVmIFJUTVBfTUFDX1BDSQotCQkJCQkJc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcEVudHJ5ID0KLQkJCQkJCSAgICAmcEFkLT5NYWNUYWIuCi0JCQkJCQkgICAgQ29udGVudFtCU1NJRF9XQ0lEXTsKLQotCQkJCQkJLyogU2V0IGtleSBtYXRlcmlhbCBhbmQgY2lwaGVyQWxnIHRvIEFzaWMgKi8KLQkJCQkJCUFzaWNBZGRTaGFyZWRLZXlFbnRyeShwQWQsIEJTUzAsCi0JCQkJCQkJCSAgICAgIGlkeCwKLQkJCQkJCQkJICAgICAgQ2lwaGVyQWxnLAotCQkJCQkJCQkgICAgICBLZXksIE5VTEwsCi0JCQkJCQkJCSAgICAgIE5VTEwpOwotCi0JCQkJCQkvKiBBc3NpZ24gZ3JvdXAga2V5IGluZm8gKi8KLQkJCQkJCVJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnkocEFkLAotCQkJCQkJCQkJICBCU1MwLAotCQkJCQkJCQkJICBpZHgsCi0JCQkJCQkJCQkgIENpcGhlckFsZywKLQkJCQkJCQkJCSAgTlVMTCk7Ci0KLQkJCQkJCS8qIEFzc2lnbiBwYWlyd2lzZSBrZXkgaW5mbyAqLwotCQkJCQkJUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeShwQWQsCi0JCQkJCQkJCQkgIEJTUzAsCi0JCQkJCQkJCQkgIGlkeCwKLQkJCQkJCQkJCSAgQ2lwaGVyQWxnLAotCQkJCQkJCQkJICBwRW50cnkpOwotCi0JCQkJCQlwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSA9Ci0JCQkJCQkgICAgTmRpc01lZGlhU3RhdGVDb25uZWN0ZWQ7Ci0JCQkJCQlwQWQtPkV4dHJhSW5mbyA9Ci0JCQkJCQkgICAgR0VORVJBTF9MSU5LX1VQOwotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotI2lmZGVmIFJUTVBfTUFDX1VTQgotCQkJCQkJdW5pb24gewotCQkJCQkJCWNoYXIgYnVmW3NpemVvZgotCQkJCQkJCQkgKHN0cnVjdCBydF9uZGlzXzgwMl8xMV93ZXApCi0JCQkJCQkJCSArCi0JCQkJCQkJCSBNQVhfTEVOX09GX0tFWQotCQkJCQkJCQkgLSAxXTsKLQkJCQkJCQlzdHJ1Y3QgcnRfbmRpc184MDJfMTFfd2VwIGtleWluZm87Ci0JCQkJCQl9Ci0JCQkJCQlXZXBLZXk7Ci0JCQkJCQlpbnQgbGVuOwotCi0JCQkJCQlOZGlzWmVyb01lbW9yeSgmV2VwS2V5LAotCQkJCQkJCSAgICAgICBzaXplb2YoV2VwS2V5KSk7Ci0JCQkJCQlsZW4gPQotCQkJCQkJICAgIHBBZC0+U3RhQ2ZnLgotCQkJCQkJICAgIERlc2lyZVNoYXJlZEtleVtpZHhdLktleUxlbjsKLQotCQkJCQkJTmRpc01vdmVNZW1vcnkoV2VwS2V5LmtleWluZm8uCi0JCQkJCQkJICAgICAgIEtleU1hdGVyaWFsLAotCQkJCQkJCSAgICAgICBwQWQtPlN0YUNmZy4KLQkJCQkJCQkgICAgICAgRGVzaXJlU2hhcmVkS2V5Ci0JCQkJCQkJICAgICAgIFtpZHhdLktleSwKLQkJCQkJCQkgICAgICAgcEFkLT5TdGFDZmcuCi0JCQkJCQkJICAgICAgIERlc2lyZVNoYXJlZEtleQotCQkJCQkJCSAgICAgICBbaWR4XS5LZXlMZW4pOwotCi0JCQkJCQlXZXBLZXkua2V5aW5mby5LZXlJbmRleCA9Ci0JCQkJCQkgICAgMHg4MDAwMDAwMCArIGlkeDsKLQkJCQkJCVdlcEtleS5rZXlpbmZvLktleUxlbmd0aCA9IGxlbjsKLQkJCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW2lkeF0uCi0JCQkJCQkgICAgS2V5TGVuID0KLQkJCQkJCSAgICAodTgpKGxlbiA8PSA1ID8gNSA6IDEzKTsKLQotCQkJCQkJcEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPQotCQkJCQkJICAgIE5kaXNNZWRpYVN0YXRlQ29ubmVjdGVkOwotCQkJCQkJcEFkLT5FeHRyYUluZm8gPQotCQkJCQkJICAgIEdFTkVSQUxfTElOS19VUDsKLQkJCQkJCS8qIG5lZWQgdG8gZW5xdWV1ZSBjbWQgdG8gdGhyZWFkICovCi0JCQkJCQlSVFVTQkVucXVldWVDbWRGcm9tTmRpcyhwQWQsCi0JCQkJCQkJCQlPSURfODAyXzExX0FERF9XRVAsCi0JCQkJCQkJCQlUUlVFLAotCQkJCQkJCQkJJldlcEtleSwKLQkJCQkJCQkJCXNpemVvZgotCQkJCQkJCQkJKFdlcEtleS4KLQkJCQkJCQkJCSBrZXlpbmZvKQotCQkJCQkJCQkJKyBsZW4gLQotCQkJCQkJCQkJMSk7Ci0jZW5kaWYgLyogUlRNUF9NQUNfVVNCIC8vICovCi0JCQkJCQkvKiBGb3IgUHJldmVudGluZyBTaGFyZEtleSBUYWJsZSBpcyBjbGVhcmVkIGJ5IHJlbW92ZSBrZXkgcHJvY2VkdXJlLiAqLwotCQkJCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1baWR4XS4KLQkJCQkJCSAgICBDaXBoZXJBbGcgPSBDaXBoZXJBbGc7Ci0JCQkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtpZHhdLgotCQkJCQkJICAgIEtleUxlbiA9Ci0JCQkJCQkgICAgcEFkLT5TdGFDZmcuCi0JCQkJCQkgICAgRGVzaXJlU2hhcmVkS2V5W2lkeF0uS2V5TGVuOwotCQkJCQkJTmRpc01vdmVNZW1vcnkocEFkLT4KLQkJCQkJCQkgICAgICAgU2hhcmVkS2V5W0JTUzBdCi0JCQkJCQkJICAgICAgIFtpZHhdLktleSwKLQkJCQkJCQkgICAgICAgcEFkLT5TdGFDZmcuCi0JCQkJCQkJICAgICAgIERlc2lyZVNoYXJlZEtleQotCQkJCQkJCSAgICAgICBbaWR4XS5LZXksCi0JCQkJCQkJICAgICAgIHBBZC0+U3RhQ2ZnLgotCQkJCQkJCSAgICAgICBEZXNpcmVTaGFyZWRLZXkKLQkJCQkJCQkgICAgICAgW2lkeF0uS2V5TGVuKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQotCQkJSW5kaWNhdGVfTGVnYWN5X1BhY2tldChwQWQsIHBSeEJsaywgRnJvbVdoaWNoQlNTSUQpOwotCQkJcmV0dXJuOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogU3BlY2lhbCBEQVRBIGZyYW1lIHRoYXQgaGFzIHRvIHBhc3MgdG8gTUxNRSAqLwotCQkvKiAgICAgICAxLiBDaXNjbyBBaXJvbmV0IGZyYW1lcyBmb3IgQ0NYMi4gV2UgbmVlZCBwYXNzIGl0IHRvIE1MTUUgZm9yIHNwZWNpYWwgcHJvY2VzcyAqLwotCQkvKiAgICAgICAyLiBFQVBPTCBoYW5kc2hha2luZyBmcmFtZXMgd2hlbiBkcml2ZXIgc3VwcGxpY2FudCBlbmFibGVkLCBwYXNzIHRvIE1MTUUgZm9yIHNwZWNpYWwgcHJvY2VzcyAqLwotCQl7Ci0JCQlwVG1wQnVmID0gcFJ4QmxrLT5wRGF0YSAtIExFTkdUSF84MDJfMTE7Ci0JCQlOZGlzTW92ZU1lbW9yeShwVG1wQnVmLCBwUnhCbGstPnBIZWFkZXIsIExFTkdUSF84MDJfMTEpOwotCQkJUkVQT1JUX01HTVRfRlJBTUVfVE9fTUxNRShwQWQsIHBSeFdJLT5XaXJlbGVzc0NsaUlELAotCQkJCQkJICBwVG1wQnVmLAotCQkJCQkJICBwUnhCbGstPkRhdGFTaXplICsKLQkJCQkJCSAgTEVOR1RIXzgwMl8xMSwgcFJ4V0ktPlJTU0kwLAotCQkJCQkJICBwUnhXSS0+UlNTSTEsIHBSeFdJLT5SU1NJMiwKLQkJCQkJCSAgcFJ4RC0+UGxjcFNpZ25hbCk7Ci0JCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICAgICAoInJlcG9ydCBFQVBPTC9BSVJPTkVUIERBVEEgdG8gTUxNRSAobGVuPSVkKSAhXG4iLAotCQkJCSAgICAgIHBSeEJsay0+RGF0YVNpemUpKTsKLQkJfQotCX0KLQotCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhCbGstPnBSeFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7Ci0JcmV0dXJuOwotCi19Ci0KLXZvaWQgU1RBUnhEYXRhRnJhbWVBbm5vdW5jZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcEVudHJ5LAotCQkJICAgIHN0cnVjdCBydF9yeF9ibGsgKnBSeEJsaywgdTggRnJvbVdoaWNoQlNTSUQpCi17Ci0KLQkvKiBub24tRUFQIGZyYW1lICovCi0JaWYgKCFSVE1QQ2hlY2tXUEFmcmFtZQotCSAgICAocEFkLCBwRW50cnksIHBSeEJsay0+cERhdGEsIHBSeEJsay0+RGF0YVNpemUsIEZyb21XaGljaEJTU0lEKSkgewotCi0JCXsKLQkJCS8qIGRyb3AgYWxsIG5vbi1FQVAgREFUQSBmcmFtZSBiZWZvcmUgKi8KLQkJCS8qIHRoaXMgY2xpZW50J3MgUG9ydC1BY2Nlc3MtQ29udHJvbCBpcyBzZWN1cmVkICovCi0JCQlpZiAocFJ4QmxrLT5wSGVhZGVyLT5GQy5XZXApIHsKLQkJCQkvKiB1bnN1cHBvcnRlZCBjaXBoZXIgc3VpdGUgKi8KLQkJCQlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09Ci0JCQkJICAgIE5kaXM4MDJfMTFFbmNyeXB0aW9uRGlzYWJsZWQpIHsKLQkJCQkJLyogcmVsZWFzZSBwYWNrZXQgKi8KLQkJCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsCi0JCQkJCQkJICAgIHBSeEJsay0+cFJ4UGFja2V0LAotCQkJCQkJCSAgICBORElTX1NUQVRVU19GQUlMVVJFKTsKLQkJCQkJcmV0dXJuOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJLyogZW5jcnlwdGlvbiBpbi11c2UgYnV0IHJlY2VpdmUgYSBub24tRUFQT0wgY2xlYXIgdGV4dCBmcmFtZSwgZHJvcCBpdCAqLwotCQkJCWlmICgocEFkLT5TdGFDZmcuV2VwU3RhdHVzICE9Ci0JCQkJICAgICBOZGlzODAyXzExRW5jcnlwdGlvbkRpc2FibGVkKQotCQkJCSAgICAmJiAocEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQgPT0KLQkJCQkJV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVEKSkgewotCQkJCQkvKiByZWxlYXNlIHBhY2tldCAqLwotCQkJCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwKLQkJCQkJCQkgICAgcFJ4QmxrLT5wUnhQYWNrZXQsCi0JCQkJCQkJICAgIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOwotCQkJCQlyZXR1cm47Ci0JCQkJfQotCQkJfQotCQl9Ci0JCVJYX0JMS19DTEVBUl9GTEFHKHBSeEJsaywgZlJYX0VBUCk7Ci0JCWlmICghUlhfQkxLX1RFU1RfRkxBRyhwUnhCbGssIGZSWF9BUkFMSU5LKSkgewotCQkJLyogTm9ybWFsIGxlZ2FjeSwgQU1QRFUgb3IgQU1TRFUgKi8KLQkJCUNtbVJ4bm9uUmFsaW5rRnJhbWVJbmRpY2F0ZShwQWQsIHBSeEJsaywKLQkJCQkJCSAgICBGcm9tV2hpY2hCU1NJRCk7Ci0KLQkJfSBlbHNlIHsKLQkJCS8qIEFSQUxJTksgKi8KLQkJCUNtbVJ4UmFsaW5rRnJhbWVJbmRpY2F0ZShwQWQsIHBFbnRyeSwgcFJ4QmxrLAotCQkJCQkJIEZyb21XaGljaEJTU0lEKTsKLQkJfQotCX0gZWxzZSB7Ci0JCVJYX0JMS19TRVRfRkxBRyhwUnhCbGssIGZSWF9FQVApOwotCi0JCWlmIChSWF9CTEtfVEVTVF9GTEFHKHBSeEJsaywgZlJYX0FNUERVKQotCQkgICAgJiYgKHBBZC0+Q29tbW9uQ2ZnLmJEaXNhYmxlUmVvcmRlcmluZyA9PSAwKSkgewotCQkJSW5kaWNhdGVfQU1QRFVfUGFja2V0KHBBZCwgcFJ4QmxrLCBGcm9tV2hpY2hCU1NJRCk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBEZXRlcm1pbmUgdGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBFQVAgZnJhbWUgKi8KLQkJCS8qIHRvIFdQQSBzdGF0ZSBtYWNoaW5lIG9yIHVwcGVyIGxheWVyICovCi0JCQlTVEFSeEVBUE9MRnJhbWVJbmRpY2F0ZShwQWQsIHBFbnRyeSwgcFJ4QmxrLAotCQkJCQkJRnJvbVdoaWNoQlNTSUQpOwotCQl9Ci0JfQotfQotCi0vKiBGb3IgVEtJUCBmcmFtZSwgY2FsY3VsYXRlIHRoZSBNSUMgdmFsdWUgKi8KLUJPT0xFQU4gU1RBQ2hlY2tUa2lwTUlDVmFsdWUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgICBzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwRW50cnksIHN0cnVjdCBydF9yeF9ibGsgKnBSeEJsaykKLXsKLQlzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSAqIHBIZWFkZXIgPSBwUnhCbGstPnBIZWFkZXI7Ci0JdTggKnBEYXRhID0gcFJ4QmxrLT5wRGF0YTsKLQl1MTYgRGF0YVNpemUgPSBwUnhCbGstPkRhdGFTaXplOwotCXU4IFVzZXJQcmlvcml0eSA9IHBSeEJsay0+VXNlclByaW9yaXR5OwotCXN0cnVjdCBydF9jaXBoZXJfa2V5ICpwV3BhS2V5OwotCXU4ICpwREEsICpwU0E7Ci0KLQlwV3BhS2V5ID0gJnBBZC0+U2hhcmVkS2V5W0JTUzBdW3BSeEJsay0+cFJ4V0ktPktleUluZGV4XTsKLQotCXBEQSA9IHBIZWFkZXItPkFkZHIxOwotCWlmIChSWF9CTEtfVEVTVF9GTEFHKHBSeEJsaywgZlJYX0lORlJBKSkgewotCQlwU0EgPSBwSGVhZGVyLT5BZGRyMzsKLQl9IGVsc2UgewotCQlwU0EgPSBwSGVhZGVyLT5BZGRyMjsKLQl9Ci0KLQlpZiAoUlRNUFRraXBDb21wYXJlTUlDVmFsdWUocEFkLAotCQkJCSAgICBwRGF0YSwKLQkJCQkgICAgcERBLAotCQkJCSAgICBwU0EsCi0JCQkJICAgIHBXcGFLZXktPlJ4TWljLAotCQkJCSAgICBVc2VyUHJpb3JpdHksIERhdGFTaXplKSA9PSBGQUxTRSkgewotCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICgiUnggTUlDIFZhbHVlIGVycm9yIDJcbiIpKTsKLQotCQlpZiAocEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQKSB7Ci0JCQlXcGFTZW5kTWljRmFpbHVyZVRvV3BhU3VwcGxpY2FudChwQWQsCi0JCQkJCQkJIChwV3BhS2V5LT5UeXBlID09Ci0JCQkJCQkJICBQQUlSV0lTRUtFWSkgPyBUUlVFIDoKLQkJCQkJCQkgRkFMU0UpOwotCQl9IGVsc2UgewotCQkJUlRNUFJlcG9ydE1pY0Vycm9yKHBBZCwgcFdwYUtleSk7Ci0JCX0KLQotCQkvKiByZWxlYXNlIHBhY2tldCAqLwotCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4QmxrLT5wUnhQYWNrZXQsCi0JCQkJICAgIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOwotCQlyZXR1cm4gRkFMU0U7Ci0JfQotCi0JcmV0dXJuIFRSVUU7Ci19Ci0KLS8qICovCi0vKiBBbGwgUnggcm91dGluZXMgdXNlIHN0cnVjdCBydF9yeF9ibGsgc3RydWN0dXJlIHRvIGhhbmRlIHJ4IGV2ZW50cyAqLwotLyogSXQgaXMgdmVyeSBpbXBvcnRhbnQgdG8gYnVpbGQgcFJ4QmxrIGF0dHJpYnV0ZXMgKi8KLS8qICAxLiBwSGVhZGVyIHBvaW50ZXIgdG8gODAyLjExIEhlYWRlciAqLwotLyogIDIuIHBEYXRhIHBvaW50ZXIgdG8gcGF5bG9hZCBpbmNsdWRpbmcgTExDIChqdXN0IHNraXAgSGVhZGVyKSAqLwotLyogIDMuIHNldCBwYXlsb2FkIHNpemUgaW5jbHVkaW5nIExMQyB0byBEYXRhU2l6ZSAqLwotLyogIDQuIHNldCBzb21lIGZsYWdzIHdpdGggUlhfQkxLX1NFVF9GTEFHKCkgKi8KLS8qICovCi12b2lkIFNUQUhhbmRsZVJ4RGF0YUZyYW1lKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X3J4X2JsayAqcFJ4QmxrKQotewotCVBSVDI4WFhfUlhEX1NUUlVDIHBSeEQgPSAmKHBSeEJsay0+UnhEKTsKLQlzdHJ1Y3QgcnRfcnh3aSAqIHBSeFdJID0gcFJ4QmxrLT5wUnhXSTsKLQlzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSAqIHBIZWFkZXIgPSBwUnhCbGstPnBIZWFkZXI7Ci0Jdm9pZCAqcFJ4UGFja2V0ID0gcFJ4QmxrLT5wUnhQYWNrZXQ7Ci0JQk9PTEVBTiBiRnJhZ21lbnQgPSBGQUxTRTsKLQlzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwRW50cnkgPSBOVUxMOwotCXU4IEZyb21XaGljaEJTU0lEID0gQlNTMDsKLQl1OCBVc2VyUHJpb3JpdHkgPSAwOwotCi0JewotCQkvKiBiZWZvcmUgTElOSyBVUCwgYWxsIERBVEEgZnJhbWVzIGFyZSByZWplY3RlZCAqLwotCQlpZiAoIU9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSkgewotCQkJLyogcmVsZWFzZSBwYWNrZXQgKi8KLQkJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhQYWNrZXQsCi0JCQkJCSAgICBORElTX1NUQVRVU19GQUlMVVJFKTsKLQkJCXJldHVybjsKLQkJfQotCQkvKiBEcm9wIG5vdCBteSBCU1MgZnJhbWVzICovCi0JCWlmIChwUnhELT5NeUJzcyA9PSAwKSB7Ci0JCQl7Ci0JCQkJLyogcmVsZWFzZSBwYWNrZXQgKi8KLQkJCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4UGFja2V0LAotCQkJCQkJICAgIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOwotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCi0JCXBBZC0+UmFsaW5rQ291bnRlcnMuUnhDb3VudFNpbmNlTGFzdE5VTEwrKzsKLQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQ2FwYWJsZQotCQkgICAgJiYgcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5iQVBTRENhcGFibGUKLQkJICAgICYmIChwSGVhZGVyLT5GQy5TdWJUeXBlICYgMHgwOCkpIHsKLQkJCXU4ICpwRGF0YTsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX0lORk8sICgiYkFQU0RDYXBhYmxlXG4iKSk7Ci0KLQkJCS8qIFFvcyBiaXQgNCAqLwotCQkJcERhdGEgPSAodTggKilwSGVhZGVyICsgTEVOR1RIXzgwMl8xMTsKLQkJCWlmICgoKnBEYXRhID4+IDQpICYgMHgwMSkgewotCQkJCURCR1BSSU5UKFJUX0RFQlVHX0lORk8sCi0JCQkJCSAoIlJ4RG9uZS0gUmN2IEVPU1AgZnJhbWUsIGRyaXZlciBtYXkgZmFsbCBpbnRvIHNsZWVwXG4iKSk7Ci0JCQkJcEFkLT5Db21tb25DZmcuYkluU2VydmljZVBlcmlvZCA9IEZBTFNFOwotCi0JCQkJLyogRm9yY2UgZHJpdmVyIHRvIGZhbGwgaW50byBzbGVlcCBtb2RlIHdoZW4gcmN2IEVPU1AgZnJhbWUgKi8KLQkJCQlpZiAoIU9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSkpIHsKLQkJCQkJdTE2IFRidHROdW1Ub05leHRXYWtlVXA7Ci0JCQkJCXUxNiBOZXh0RHRpbSA9Ci0JCQkJCSAgICBwQWQtPlN0YUNmZy5EdGltUGVyaW9kOwotCQkJCQl1bnNpZ25lZCBsb25nIE5vdzsKLQotCQkJCQlOZGlzR2V0U3lzdGVtVXBUaW1lKCZOb3cpOwotCQkJCQlOZXh0RHRpbSAtPQotCQkJCQkgICAgKHUxNikoTm93IC0KLQkJCQkJCSAgICAgIHBBZC0+U3RhQ2ZnLgotCQkJCQkJICAgICAgTGFzdEJlYWNvblJ4VGltZSkgLwotCQkJCQkgICAgcEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kOwotCi0JCQkJCVRidHROdW1Ub05leHRXYWtlVXAgPQotCQkJCQkgICAgcEFkLT5TdGFDZmcuRGVmYXVsdExpc3RlbkNvdW50OwotCQkJCQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHCi0JCQkJCSAgICAocEFkLCBmT1BfU1RBVFVTX1JFQ0VJVkVfRFRJTSkKLQkJCQkJICAgICYmIChUYnR0TnVtVG9OZXh0V2FrZVVwID4gTmV4dER0aW0pKQotCQkJCQkJVGJ0dE51bVRvTmV4dFdha2VVcCA9IE5leHREdGltOwotCi0JCQkJCVJUTVBfU0VUX1BTTV9CSVQocEFkLCBQV1JfU0FWRSk7Ci0JCQkJCS8qIGlmIFdNTS1BUFNEIGlzIGZhaWxlZCwgdHJ5IHRvIGRpc2FibGUgZm9sbG93aW5nIGxpbmUgKi8KLQkJCQkJQXNpY1NsZWVwVGhlbkF1dG9XYWtldXAocEFkLAotCQkJCQkJCQlUYnR0TnVtVG9OZXh0V2FrZVVwKTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWlmICgocEhlYWRlci0+RkMuTW9yZURhdGEpCi0JCQkgICAgJiYgKHBBZC0+Q29tbW9uQ2ZnLmJJblNlcnZpY2VQZXJpb2QpKSB7Ci0JCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJCSAoIlNlbmRpbmcgYW5vdGhlciB0cmlnZ2VyIGZyYW1lIHdoZW4gTW9yZSBEYXRhIGJpdCBpcyBzZXQgdG8gMVxuIikpOwotCQkJfQotCQl9Ci0JCS8qIERyb3AgTlVMTCwgQ0YtQUNLKG5vIGRhdGEpLCBDRi1QT0xMKG5vIGRhdGEpLCBhbmQgQ0YtQUNLK0NGLVBPTEwobm8gZGF0YSkgZGF0YSBmcmFtZSAqLwotCQlpZiAoKHBIZWFkZXItPkZDLlN1YlR5cGUgJiAweDA0KSkJLyogYml0IDIgOiBubyBEQVRBICovCi0JCXsKLQkJCS8qIHJlbGVhc2UgcGFja2V0ICovCi0JCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4UGFja2V0LAotCQkJCQkgICAgTkRJU19TVEFUVVNfRkFJTFVSRSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJLyogRHJvcCBub3QgbXkgQlNTIGZyYW1lICh3ZSBjYW4gbm90IG9ubHkgY2hlY2sgdGhlIE15QnNzIGJpdCBpbiBSeEQpICovCi0KLQkJaWYgKElORlJBX09OKHBBZCkpIHsKLQkJCS8qIEluZnJhc3RydWN0dXJlIG1vZGUsIGNoZWNrIGFkZHJlc3MgMiBmb3IgQlNTSUQgKi8KLQkJCWlmICghUlRNUEVxdWFsTWVtb3J5Ci0JCQkgICAgKCZwSGVhZGVyLT5BZGRyMiwgJnBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCA2KSkgewotCQkJCS8qIFJlY2VpdmUgZnJhbWUgbm90IG15IEJTU0lEICovCi0JCQkJLyogcmVsZWFzZSBwYWNrZXQgKi8KLQkJCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4UGFja2V0LAotCQkJCQkJICAgIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOwotCQkJCXJldHVybjsKLQkJCX0KLQkJfSBlbHNlCQkvKiBBZC1Ib2MgbW9kZSBvciBOb3QgYXNzb2NpYXRlZCAqLwotCQl7Ci0JCQkvKiBBZC1Ib2MgbW9kZSwgY2hlY2sgYWRkcmVzcyAzIGZvciBCU1NJRCAqLwotCQkJaWYgKCFSVE1QRXF1YWxNZW1vcnkKLQkJCSAgICAoJnBIZWFkZXItPkFkZHIzLCAmcEFkLT5Db21tb25DZmcuQnNzaWQsIDYpKSB7Ci0JCQkJLyogUmVjZWl2ZSBmcmFtZSBub3QgbXkgQlNTSUQgKi8KLQkJCQkvKiByZWxlYXNlIHBhY2tldCAqLwotCQkJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhQYWNrZXQsCi0JCQkJCQkgICAgTkRJU19TVEFUVVNfRkFJTFVSRSk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0KLQkJLyogKi8KLQkJLyogZmluZCBwRW50cnkgKi8KLQkJLyogKi8KLQkJaWYgKHBSeFdJLT5XaXJlbGVzc0NsaUlEIDwgTUFYX0xFTl9PRl9NQUNfVEFCTEUpIHsKLQkJCXBFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W3BSeFdJLT5XaXJlbGVzc0NsaUlEXTsKLQkJfSBlbHNlIHsKLQkJCS8qIDEuIHJlbGVhc2UgcGFja2V0IGlmIGluZnJhIG1vZGUgKi8KLQkJCS8qIDIuIG5ldyBhIHBFbnRyeSBpZiBhZC1ob2MgbW9kZSAqLwotCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeFBhY2tldCwKLQkJCQkJICAgIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJLyogaW5mcmEgb3IgYWQtaG9jICovCi0JCWlmIChJTkZSQV9PTihwQWQpKSB7Ci0JCQlSWF9CTEtfU0VUX0ZMQUcocFJ4QmxrLCBmUlhfSU5GUkEpOwotCQkJQVNTRVJUKHBSeFdJLT5XaXJlbGVzc0NsaUlEID09IEJTU0lEX1dDSUQpOwotCQl9Ci0JCS8qIGNoZWNrIEF0aGVyb3MgQ2xpZW50ICovCi0JCWlmICgocEVudHJ5LT5iSUFtQmFkQXRoZXJvcyA9PSBGQUxTRSkgJiYgKHBSeEQtPkFNUERVID09IDEpCi0JCSAgICAmJiAocEhlYWRlci0+RkMuUmV0cnkpKSB7Ci0JCQlwRW50cnktPmJJQW1CYWRBdGhlcm9zID0gVFJVRTsKLQkJCXBBZC0+Q29tbW9uQ2ZnLklPVGVzdFBhcm0uYkN1cnJlbnRBdGhlcm9zID0gVFJVRTsKLQkJCXBBZC0+Q29tbW9uQ2ZnLklPVGVzdFBhcm0uYkxhc3RBdGhlcm9zID0gVFJVRTsKLQkJCWlmICghU1RBX0FFU19PTihwQWQpKSB7Ci0JCQkJQXNpY1VwZGF0ZVByb3RlY3QocEFkLCA4LCBBTExOX1NFVFBST1RFQ1QsIFRSVUUsCi0JCQkJCQkgIEZBTFNFKTsKLQkJCX0KLQkJfQotCX0KLQotCXBSeEJsay0+cERhdGEgPSAodTggKikgcEhlYWRlcjsKLQotCS8qICovCi0JLyogdXBkYXRlIFJ4QmxrLT5wRGF0YSwgRGF0YVNpemUgKi8KLQkvKiA4MDIuMTEgSGVhZGVyLCBRT1MsIEhUQywgSHcgUGFkZGluZyAqLwotCS8qICovCi0KLQkvKiAxLiBza2lwIDgwMi4xMSBIRUFERVIgKi8KLQl7Ci0JCXBSeEJsay0+cERhdGEgKz0gTEVOR1RIXzgwMl8xMTsKLQkJcFJ4QmxrLT5EYXRhU2l6ZSAtPSBMRU5HVEhfODAyXzExOwotCX0KLQotCS8qIDIuIFFPUyAqLwotCWlmIChwSGVhZGVyLT5GQy5TdWJUeXBlICYgMHgwOCkgewotCQlSWF9CTEtfU0VUX0ZMQUcocFJ4QmxrLCBmUlhfUU9TKTsKLQkJVXNlclByaW9yaXR5ID0gKihwUnhCbGstPnBEYXRhKSAmIDB4MGY7Ci0JCS8qIGJpdCA3IGluIFFvUyBDb250cm9sIGZpZWxkIHNpZ25hbHMgdGhlIEhUIEEtTVNEVSBmb3JtYXQgKi8KLQkJaWYgKCgqcFJ4QmxrLT5wRGF0YSkgJiAweDgwKSB7Ci0JCQlSWF9CTEtfU0VUX0ZMQUcocFJ4QmxrLCBmUlhfQU1TRFUpOwotCQl9Ci0JCS8qIHNraXAgUU9TIGNvbnRvcmwgZmllbGQgKi8KLQkJcFJ4QmxrLT5wRGF0YSArPSAyOwotCQlwUnhCbGstPkRhdGFTaXplIC09IDI7Ci0JfQotCXBSeEJsay0+VXNlclByaW9yaXR5ID0gVXNlclByaW9yaXR5OwotCi0JLyogY2hlY2sgaWYgbmVlZCB0byByZXNlbmQgUFMgUG9sbCB3aGVuIHJlY2VpdmVkIHBhY2tldCB3aXRoIE1vcmVEYXRhID0gMSAqLwotCWlmICgocEFkLT5TdGFDZmcuUHNtID09IFBXUl9TQVZFKSAmJiAocEhlYWRlci0+RkMuTW9yZURhdGEgPT0gMSkpIHsKLQkJaWYgKCgoKFVzZXJQcmlvcml0eSA9PSAwKSB8fCAoVXNlclByaW9yaXR5ID09IDMpKSAmJgotCQkgICAgIHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfQkUgPT0gMCkgfHwKLQkJICAgICgoKFVzZXJQcmlvcml0eSA9PSAxKSB8fCAoVXNlclByaW9yaXR5ID09IDIpKSAmJgotCQkgICAgIHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfQksgPT0gMCkgfHwKLQkJICAgICgoKFVzZXJQcmlvcml0eSA9PSA0KSB8fCAoVXNlclByaW9yaXR5ID09IDUpKSAmJgotCQkgICAgIHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfVkkgPT0gMCkgfHwKLQkJICAgICgoKFVzZXJQcmlvcml0eSA9PSA2KSB8fCAoVXNlclByaW9yaXR5ID09IDcpKSAmJgotCQkgICAgIHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfVk8gPT0gMCkpIHsKLQkJCS8qIG5vbi1VQVBTRCBkZWxpdmVyeS1lbmFibGVkIEFDICovCi0JCQlSVE1QX1BTX1BPTExfRU5RVUVVRShwQWQpOwotCQl9Ci0JfQotCS8qIDMuIE9yZGVyIGJpdDogQS1SYWxpbmsgb3IgSFRDKyAqLwotCWlmIChwSGVhZGVyLT5GQy5PcmRlcikgewotI2lmZGVmIEFHR1JFR0FUSU9OX1NVUFBPUlQKLQkJaWYgKChwUnhXSS0+UEhZTU9ERSA8PSBNT0RFX09GRE0pCi0JCSAgICAmJiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19BR0dSRUdBVElPTl9JTlVTRUQpKSkKLQkJewotCQkJUlhfQkxLX1NFVF9GTEFHKHBSeEJsaywgZlJYX0FSQUxJTkspOwotCQl9IGVsc2UKLSNlbmRpZiAvKiBBR0dSRUdBVElPTl9TVVBQT1JUIC8vICovCi0JCXsKLQkJCVJYX0JMS19TRVRfRkxBRyhwUnhCbGssIGZSWF9IVEMpOwotCQkJLyogc2tpcCBIVEMgY29udG9ybCBmaWVsZCAqLwotCQkJcFJ4QmxrLT5wRGF0YSArPSA0OwotCQkJcFJ4QmxrLT5EYXRhU2l6ZSAtPSA0OwotCQl9Ci0JfQotCS8qIDQuIHNraXAgSFcgcGFkZGluZyAqLwotCWlmIChwUnhELT5MMlBBRCkgewotCQkvKiBqdXN0IG1vdmUgcERhdGEgcG9pbnRlciAqLwotCQkvKiBiZWNhdXNlIERhdGFTaXplIGV4Y2x1ZGluZyBIVyBwYWRkaW5nICovCi0JCVJYX0JMS19TRVRfRkxBRyhwUnhCbGssIGZSWF9QQUQpOwotCQlwUnhCbGstPnBEYXRhICs9IDI7Ci0JfQotCi0JaWYgKHBSeEQtPkJBKSB7Ci0JCVJYX0JMS19TRVRfRkxBRyhwUnhCbGssIGZSWF9BTVBEVSk7Ci0JfQotCS8qICovCi0JLyogQ2FzZSBJICBQcm9jZXNzIEJyb2FkY2FzdCAmIE11bHRpY2FzdCBkYXRhIGZyYW1lICovCi0JLyogKi8KLQlpZiAocFJ4RC0+QmNhc3QgfHwgcFJ4RC0+TWNhc3QpIHsKLQkJSU5DX0NPVU5URVI2NChwQWQtPldsYW5Db3VudGVycy5NdWx0aWNhc3RSZWNlaXZlZEZyYW1lQ291bnQpOwotCi0JCS8qIERyb3AgTWNhc3QvQmNhc3QgZnJhbWUgd2l0aCBmcmFnbWVudCBiaXQgb24gKi8KLQkJaWYgKHBIZWFkZXItPkZDLk1vcmVGcmFnKSB7Ci0JCQkvKiByZWxlYXNlIHBhY2tldCAqLwotCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeFBhY2tldCwKLQkJCQkJICAgIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOwotCQkJcmV0dXJuOwotCQl9Ci0JCS8qIEZpbHRlciBvdXQgQmNhc3QgZnJhbWUgd2hpY2ggQVAgcmVsYXllZCBmb3IgdXMgKi8KLQkJaWYgKHBIZWFkZXItPkZDLkZyRHMKLQkJICAgICYmIE1BQ19BRERSX0VRVUFMKHBIZWFkZXItPkFkZHIzLCBwQWQtPkN1cnJlbnRBZGRyZXNzKSkgewotCQkJLyogcmVsZWFzZSBwYWNrZXQgKi8KLQkJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhQYWNrZXQsCi0JCQkJCSAgICBORElTX1NUQVRVU19GQUlMVVJFKTsKLQkJCXJldHVybjsKLQkJfQotCi0JCUluZGljYXRlX0xlZ2FjeV9QYWNrZXQocEFkLCBwUnhCbGssIEZyb21XaGljaEJTU0lEKTsKLQkJcmV0dXJuOwotCX0gZWxzZSBpZiAocFJ4RC0+VTJNKSB7Ci0JCXBBZC0+TGFzdFJ4UmF0ZSA9Ci0JCSAgICAodTE2KSgocFJ4V0ktPk1DUykgKyAocFJ4V0ktPkJXIDw8IDcpICsKLQkJCSAgICAgIChwUnhXSS0+U2hvcnRHSSA8PCA4KSArIChwUnhXSS0+UEhZTU9ERSA8PCAxNCkpOwotCi0JCWlmIChBREhPQ19PTihwQWQpKSB7Ci0JCQlwRW50cnkgPSBNYWNUYWJsZUxvb2t1cChwQWQsIHBIZWFkZXItPkFkZHIyKTsKLQkJCWlmIChwRW50cnkpCi0JCQkJVXBkYXRlX1Jzc2lfU2FtcGxlKHBBZCwgJnBFbnRyeS0+UnNzaVNhbXBsZSwKLQkJCQkJCSAgIHBSeFdJKTsKLQkJfQotCi0JCVVwZGF0ZV9Sc3NpX1NhbXBsZShwQWQsICZwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLCBwUnhXSSk7Ci0KLQkJcEFkLT5TdGFDZmcuTGFzdFNOUjAgPSAodTgpKHBSeFdJLT5TTlIwKTsKLQkJcEFkLT5TdGFDZmcuTGFzdFNOUjEgPSAodTgpKHBSeFdJLT5TTlIxKTsKLQotCQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1J4T2tEYXRhQ250Kys7Ci0KLQkJaWYgKCEoKHBIZWFkZXItPkZyYWcgPT0gMCkgJiYgKHBIZWFkZXItPkZDLk1vcmVGcmFnID09IDApKSkgewotCQkJLyogcmUtYXNzZW1ibGUgdGhlIGZyYWdtZW50ZWQgcGFja2V0cyAqLwotCQkJLyogcmV0dXJuIGNvbXBsZXRlIGZyYW1lIChwUnhQYWNrZXQpIG9yIE5VTEwgKi8KLQkJCWJGcmFnbWVudCA9IFRSVUU7Ci0JCQlwUnhQYWNrZXQgPSBSVE1QRGVGcmFnbWVudERhdGFGcmFtZShwQWQsIHBSeEJsayk7Ci0JCX0KLQotCQlpZiAocFJ4UGFja2V0KSB7Ci0JCQlwRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFtwUnhXSS0+V2lyZWxlc3NDbGlJRF07Ci0KLQkJCS8qIHByb2Nlc3MgY29tcGxldGUgZnJhbWUgKi8KLQkJCWlmIChiRnJhZ21lbnQgJiYgKHBSeEQtPkRlY3J5cHRlZCkKLQkJCSAgICAmJiAocEVudHJ5LT5XZXBTdGF0dXMgPT0KLQkJCQlOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKSkgewotCQkJCS8qIE1pbnVzIE1JQyBsZW5ndGggKi8KLQkJCQlwUnhCbGstPkRhdGFTaXplIC09IDg7Ci0KLQkJCQkvKiBGb3IgVEtJUCBmcmFtZSwgY2FsY3VsYXRlIHRoZSBNSUMgdmFsdWUgKi8KLQkJCQlpZiAoU1RBQ2hlY2tUa2lwTUlDVmFsdWUocEFkLCBwRW50cnksIHBSeEJsaykgPT0KLQkJCQkgICAgRkFMU0UpIHsKLQkJCQkJcmV0dXJuOwotCQkJCX0KLQkJCX0KLQotCQkJU1RBUnhEYXRhRnJhbWVBbm5vdW5jZShwQWQsIHBFbnRyeSwgcFJ4QmxrLAotCQkJCQkgICAgICAgRnJvbVdoaWNoQlNTSUQpOwotCQkJcmV0dXJuOwotCQl9IGVsc2UgewotCQkJLyoganVzdCByZXR1cm4gKi8KLQkJCS8qIGJlY2F1c2UgUlRNUERlRnJhZ21lbnREYXRhRnJhbWUoKSB3aWxsIHJlbGVhc2UgcnggcGFja2V0LCAqLwotCQkJLyogaWYgcGFja2V0IGlzIGZyYWdtZW50ZWQgKi8KLQkJCXJldHVybjsKLQkJfQotCX0KLQotCUFTU0VSVCgwKTsKLQkvKiByZWxlYXNlIHBhY2tldCAqLwotCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOwotfQotCi12b2lkIFNUQUhhbmRsZVJ4TWdtdEZyYW1lKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X3J4X2JsayAqcFJ4QmxrKQotewotCVBSVDI4WFhfUlhEX1NUUlVDIHBSeEQgPSAmKHBSeEJsay0+UnhEKTsKLQlzdHJ1Y3QgcnRfcnh3aSAqIHBSeFdJID0gcFJ4QmxrLT5wUnhXSTsKLQlzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSAqIHBIZWFkZXIgPSBwUnhCbGstPnBIZWFkZXI7Ci0Jdm9pZCAqcFJ4UGFja2V0ID0gcFJ4QmxrLT5wUnhQYWNrZXQ7Ci0KLQlkbyB7Ci0KLQkJLyogY2hlY2sgaWYgbmVlZCB0byByZXNlbmQgUFMgUG9sbCB3aGVuIHJlY2VpdmVkIHBhY2tldCB3aXRoIE1vcmVEYXRhID0gMSAqLwotCQlpZiAoKHBBZC0+U3RhQ2ZnLlBzbSA9PSBQV1JfU0FWRSkKLQkJICAgICYmIChwSGVhZGVyLT5GQy5Nb3JlRGF0YSA9PSAxKSkgewotCQkJLyogZm9yIFVBUFNELCBhbGwgbWFuYWdlbWVudCBmcmFtZXMgd2lsbCBiZSBWTyBwcmlvcml0eSAqLwotCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfVk8gPT0gMCkgewotCQkJCS8qIG5vbi1VQVBTRCBkZWxpdmVyeS1lbmFibGVkIEFDICovCi0JCQkJUlRNUF9QU19QT0xMX0VOUVVFVUUocEFkKTsKLQkJCX0KLQkJfQotCi0JCS8qIFRPRE86IGlmIE1vcmVEYXRhID09IDAsIHN0YXRpb24gY2FuIGdvIHRvIHNsZWVwICovCi0KLQkJLyogV2Ugc2hvdWxkIGNvbGxlY3QgUlNTSSBub3Qgb25seSBVMk0gZGF0YSBidXQgYWxzbyBteSBiZWFjb24gKi8KLQkJaWYgKChwSGVhZGVyLT5GQy5TdWJUeXBlID09IFNVQlRZUEVfQkVBQ09OKQotCQkgICAgJiYgKE1BQ19BRERSX0VRVUFMKCZwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgJnBIZWFkZXItPkFkZHIyKSkKLQkJICAgICYmIChwQWQtPlJ4QW50LkV2YWx1YXRlUGVyaW9kID09IDApKSB7Ci0JCQlVcGRhdGVfUnNzaV9TYW1wbGUocEFkLCAmcEFkLT5TdGFDZmcuUnNzaVNhbXBsZSwgcFJ4V0kpOwotCi0JCQlwQWQtPlN0YUNmZy5MYXN0U05SMCA9ICh1OCkocFJ4V0ktPlNOUjApOwotCQkJcEFkLT5TdGFDZmcuTGFzdFNOUjEgPSAodTgpKHBSeFdJLT5TTlIxKTsKLQkJfQotCi0JCS8qIEZpcnN0IGNoZWNrIHRoZSBzaXplLCBpdCBNVVNUIG5vdCBleGNlZWQgdGhlIG1sbWUgcXVldWUgc2l6ZSAqLwotCQlpZiAocFJ4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudCA+IE1HTVRfRE1BX0JVRkZFUl9TSVpFKSB7Ci0JCQlEQkdQUklOVF9FUlIoIlNUQUhhbmRsZVJ4TWdtdEZyYW1lOiBmcmFtZSB0b28gbGFyZ2UsIHNpemUgPSAlZCBcbiIsIHBSeFdJLT5NUERVdG90YWxCeXRlQ291bnQpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlSRVBPUlRfTUdNVF9GUkFNRV9UT19NTE1FKHBBZCwgcFJ4V0ktPldpcmVsZXNzQ2xpSUQsIHBIZWFkZXIsCi0JCQkJCSAgcFJ4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudCwKLQkJCQkJICBwUnhXSS0+UlNTSTAsIHBSeFdJLT5SU1NJMSwKLQkJCQkJICBwUnhXSS0+UlNTSTIsIHBSeEQtPlBsY3BTaWduYWwpOwotCX0gd2hpbGUgKEZBTFNFKTsKLQotCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhQYWNrZXQsIE5ESVNfU1RBVFVTX1NVQ0NFU1MpOwotfQotCi12b2lkIFNUQUhhbmRsZVJ4Q29udHJvbEZyYW1lKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X3J4X2JsayAqcFJ4QmxrKQotewotCXN0cnVjdCBydF9yeHdpICogcFJ4V0kgPSBwUnhCbGstPnBSeFdJOwotCXN0cnVjdCBydF9oZWFkZXJfODAyXzExICogcEhlYWRlciA9IHBSeEJsay0+cEhlYWRlcjsKLQl2b2lkICpwUnhQYWNrZXQgPSBwUnhCbGstPnBSeFBhY2tldDsKLQotCXN3aXRjaCAocEhlYWRlci0+RkMuU3ViVHlwZSkgewotCWNhc2UgU1VCVFlQRV9CTE9DS19BQ0tfUkVROgotCQl7Ci0JCQlDbnRsRW5xdWV1ZUZvclJlY3YocEFkLCBwUnhXSS0+V2lyZWxlc3NDbGlJRCwKLQkJCQkJICAgKHBSeFdJLT5NUERVdG90YWxCeXRlQ291bnQpLAotCQkJCQkgICAoc3RydWN0IHJ0X2ZyYW1lX2JhX3JlcSAqKSBwSGVhZGVyKTsKLQkJfQotCQlicmVhazsKLQljYXNlIFNVQlRZUEVfQkxPQ0tfQUNLOgotCWNhc2UgU1VCVFlQRV9BQ0s6Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCQlQcm9jZXNzIFJ4RG9uZSBpbnRlcnJ1cHQsIHJ1bm5pbmcgaW4gRFBDIGxldmVsCi0KLQlBcmd1bWVudHM6Ci0JCXBBZCBQb2ludGVyIHRvIG91ciBhZGFwdGVyCi0KLQlSZXR1cm4gVmFsdWU6Ci0JCU5vbmUKLQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTAotCi0JTm90ZToKLQkJVGhpcyByb3V0aW5lIGhhcyB0byBtYWludGFpbiBSeCByaW5nIHJlYWQgcG9pbnRlci4KLQkJTmVlZCB0byBjb25zaWRlciBRT1MgREFUQSBmb3JtYXQgd2hlbiBjb252ZXJ0aW5nIHRvIDgwMi4zCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotQk9PTEVBTiBTVEFSeERvbmVJbnRlcnJ1cHRIYW5kbGUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBJTiBCT09MRUFOIGFyZ2MpCi17Ci0JaW50IFN0YXR1czsKLQl1MzIgUnhQcm9jZXNzZWQsIFJ4UGVuZGluZzsKLQlCT09MRUFOIGJSZXNjaGVkdWxlID0gRkFMU0U7Ci0JUFJUMjhYWF9SWERfU1RSVUMgcFJ4RDsKLQl1OCAqcERhdGE7Ci0Jc3RydWN0IHJ0X3J4d2kgKiBwUnhXSTsKLQl2b2lkICpwUnhQYWNrZXQ7Ci0Jc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEgKiBwSGVhZGVyOwotCXN0cnVjdCBydF9yeF9ibGsgUnhDZWxsOwotCi0JUnhQcm9jZXNzZWQgPSBSeFBlbmRpbmcgPSAwOwotCi0JLyogcHJvY2VzcyB3aG9sZSByeCByaW5nICovCi0Jd2hpbGUgKDEpIHsKLQotCQlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JBRElPX09GRiB8Ci0JCQkJICAgZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUyB8Ci0JCQkJICAgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwKLQkJCQkgICBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpIHx8Ci0JCSAgICAhUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1NUQVJUX1VQKSkgewotCQkJYnJlYWs7Ci0JCX0KLSNpZmRlZiBSVE1QX01BQ19QQ0kKLQkJaWYgKFJ4UHJvY2Vzc2VkKysgPiBNQVhfUlhfUFJPQ0VTU19DTlQpIHsKLQkJCS8qIG5lZWQgdG8gcmVzY2hlZHVsZSByeCBoYW5kbGUgKi8KLQkJCWJSZXNjaGVkdWxlID0gVFJVRTsKLQkJCWJyZWFrOwotCQl9Ci0jZW5kaWYgLyogUlRNUF9NQUNfUENJIC8vICovCi0KLQkJUnhQcm9jZXNzZWQrKzsJLyogdGVzdCAqLwotCi0JCS8qIDEuIGFsbG9jYXRlIGEgbmV3IGRhdGEgcGFja2V0IGludG8gcnggcmluZyB0byByZXBsYWNlIHJlY2VpdmVkIHBhY2tldCAqLwotCQkvKiAgICB0aGVuIHByb2Nlc3NpbmcgdGhlIHJlY2VpdmVkIHBhY2tldCAqLwotCQkvKiAyLiB0aGUgY2FsbGVlIG11c3QgdGFrZSBjaGFyZ2Ugb2YgcmVsZWFzZSBvZiBwYWNrZXQgKi8KLQkJLyogMy4gQXMgZmFyIGFzIGRyaXZlciBpcyBjb25jZXJuZWQgLCAqLwotCQkvKiAgICB0aGUgcnggcGFja2V0IG11c3QgKi8KLQkJLyogICAgICBhLiBiZSBpbmRpY2F0ZWQgdG8gdXBwZXIgbGF5ZXIgb3IgKi8KLQkJLyogICAgICBiLiBiZSByZWxlYXNlZCBpZiBpdCBpcyBkaXNjYXJkZWQgKi8KLQkJcFJ4UGFja2V0ID0KLQkJICAgIEdldFBhY2tldEZyb21SeFJpbmcocEFkLCAmKFJ4Q2VsbC5SeEQpLCAmYlJlc2NoZWR1bGUsCi0JCQkJCSZSeFBlbmRpbmcpOwotCQlpZiAocFJ4UGFja2V0ID09IE5VTEwpIHsKLQkJCS8qIG5vIG1vcmUgcGFja2V0IHRvIHByb2Nlc3MgKi8KLQkJCWJyZWFrOwotCQl9Ci0JCS8qIGdldCByeCByaW5nIGRlc2NyaXB0b3IgKi8KLQkJcFJ4RCA9ICYoUnhDZWxsLlJ4RCk7Ci0JCS8qIGdldCByeCBkYXRhIGJ1ZmZlciAqLwotCQlwRGF0YSA9IEdFVF9PU19QS1RfREFUQVBUUihwUnhQYWNrZXQpOwotCQlwUnhXSSA9IChzdHJ1Y3QgcnRfcnh3aSAqKSBwRGF0YTsKLQkJcEhlYWRlciA9IChzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSAqKSAocERhdGEgKyBSWFdJX1NJWkUpOwotCi0JCS8qIGJ1aWxkIFJ4Q2VsbCAqLwotCQlSeENlbGwucFJ4V0kgPSBwUnhXSTsKLQkJUnhDZWxsLnBIZWFkZXIgPSBwSGVhZGVyOwotCQlSeENlbGwucFJ4UGFja2V0ID0gcFJ4UGFja2V0OwotCQlSeENlbGwucERhdGEgPSAodTggKikgcEhlYWRlcjsKLQkJUnhDZWxsLkRhdGFTaXplID0gcFJ4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudDsKLQkJUnhDZWxsLkZsYWdzID0gMDsKLQotCQkvKiBJbmNyZWFzZSBUb3RhbCByZWNlaXZlIGJ5dGUgY291bnRlciBhZnRlciByZWFsIGRhdGEgcmVjZWl2ZWQgbm8gbWF0ZXIgYW55IGVycm9yIG9yIG5vdCAqLwotCQlwQWQtPlJhbGlua0NvdW50ZXJzLlJlY2VpdmVkQnl0ZUNvdW50ICs9Ci0JCSAgICBwUnhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50OwotCQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1JlY2VpdmVkQnl0ZUNvdW50ICs9Ci0JCSAgICBwUnhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50OwotCQlwQWQtPlJhbGlua0NvdW50ZXJzLlJ4Q291bnQrKzsKLQotCQlJTkNfQ09VTlRFUjY0KHBBZC0+V2xhbkNvdW50ZXJzLlJlY2VpdmVkRnJhZ21lbnRDb3VudCk7Ci0KLQkJaWYgKHBSeFdJLT5NUERVdG90YWxCeXRlQ291bnQgPCAxNCkKLQkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7Ci0KLQkJaWYgKE1PTklUT1JfT04ocEFkKSkgewotCQkJc2VuZF9tb25pdG9yX3BhY2tldHMocEFkLCAmUnhDZWxsKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogU1RBUnhEb25lSW50ZXJydXB0SGFuZGxlKCkgaXMgY2FsbGVkIGluIHJ0dXNiX2J1bGsuYyAqLwotCi0JCS8qIENoZWNrIGZvciBhbGwgUnhEIGVycm9ycyAqLwotCQlTdGF0dXMgPSBSVE1QQ2hlY2tSeEVycm9yKHBBZCwgcEhlYWRlciwgcFJ4V0ksIHBSeEQpOwotCi0JCS8qIEhhbmRsZSB0aGUgcmVjZWl2ZWQgZnJhbWUgKi8KLQkJaWYgKFN0YXR1cyA9PSBORElTX1NUQVRVU19TVUNDRVNTKSB7Ci0JCQlzd2l0Y2ggKHBIZWFkZXItPkZDLlR5cGUpIHsKLQkJCQkvKiBDQVNFIEksIHJlY2VpdmUgYSBEQVRBIGZyYW1lICovCi0JCQljYXNlIEJUWVBFX0RBVEE6Ci0JCQkJewotCQkJCQkvKiBwcm9jZXNzIERBVEEgZnJhbWUgKi8KLQkJCQkJU1RBSGFuZGxlUnhEYXRhRnJhbWUocEFkLCAmUnhDZWxsKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQkJLyogQ0FTRSBJSSwgcmVjZWl2ZSBhIE1HTVQgZnJhbWUgKi8KLQkJCWNhc2UgQlRZUEVfTUdNVDoKLQkJCQl7Ci0JCQkJCVNUQUhhbmRsZVJ4TWdtdEZyYW1lKHBBZCwgJlJ4Q2VsbCk7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJCS8qIENBU0UgSUlJLiByZWNlaXZlIGEgQ05UTCBmcmFtZSAqLwotCQkJY2FzZSBCVFlQRV9DTlRMOgotCQkJCXsKLQkJCQkJU1RBSGFuZGxlUnhDb250cm9sRnJhbWUocEFkLCAmUnhDZWxsKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQkJLyogZGlzY2FyZCBvdGhlciB0eXBlICovCi0JCQlkZWZhdWx0OgotCQkJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhQYWNrZXQsCi0JCQkJCQkgICAgTkRJU19TVEFUVVNfRkFJTFVSRSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlwQWQtPkNvdW50ZXJzODAyMy5SeEVycm9ycysrOwotCQkJLyogZGlzY2FyZCB0aGlzIGZyYW1lICovCi0JCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4UGFja2V0LAotCQkJCQkgICAgTkRJU19TVEFUVVNfRkFJTFVSRSk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gYlJlc2NoZWR1bGU7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCUFyZ3VtZW50czoKLQkJcEFkIAlQb2ludGVyIHRvIG91ciBhZGFwdGVyCi0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgUlRNUEhhbmRsZVR3YWtldXBJbnRlcnJ1cHQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCUFzaWNGb3JjZVdha2V1cChwQWQsIEZBTFNFKTsKLX0KLQotLyoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotUm91dGluZSBEZXNjcmlwdGlvbjoKLSAgICBFYXJseSBjaGVja2luZyBhbmQgT1MtZGVwZW5lZCBwYXJzaW5nIGZvciBUeCBwYWNrZXQgc2VuZCB0byBvdXIgU1RBIGRyaXZlci4KLQotQXJndW1lbnRzOgotICAgIHZvaWQgKglNaW5pcG9ydEFkYXB0ZXJDb250ZXh0CVBvaW50ZXIgcmVmZXIgdG8gdGhlIGRldmljZSBoYW5kbGUsIGkuZS4sIHRoZSBwQWQuCi0Jdm9pZCAqKglwcFBhY2tldEFycmF5CQkJVGhlIHBhY2tldCBhcnJheSBuZWVkIHRvIGRvIHRyYW5zbWlzc2lvbi4KLQl1MzIJCQlOdW1iZXJPZlBhY2tldHMJCQlOdW1iZXIgb2YgcGFja2V0IGluIHBhY2tldCBhcnJheS4KLQotUmV0dXJuIFZhbHVlOgotCU5PTkUKLQotTm90ZToKLQlUaGlzIGZ1bmN0aW9uIGRvZXMgZWFybHkgY2hlY2tpbmcgYW5kIGNsYXNzaWZpY2F0aW9uIGZvciBzZW5kLW91dCBwYWNrZXQuCi0JWW91IG9ubHkgY2FuIHB1dCBPUy1kZXBlbmVkICYgU1RBIHJlbGF0ZWQgY29kZSBpbiBoZXJlLgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBTVEFTZW5kUGFja2V0cyh2b2lkICpNaW5pcG9ydEFkYXB0ZXJDb250ZXh0LAotCQkgICAgdm9pZCAqKnBwUGFja2V0QXJyYXksIHUzMiBOdW1iZXJPZlBhY2tldHMpCi17Ci0JdTMyIEluZGV4OwotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCA9IChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICopTWluaXBvcnRBZGFwdGVyQ29udGV4dDsKLQl2b2lkICpwUGFja2V0OwotCUJPT0xFQU4gYWxsb3dUb1NlbmQgPSBGQUxTRTsKLQotCWZvciAoSW5kZXggPSAwOyBJbmRleCA8IE51bWJlck9mUGFja2V0czsgSW5kZXgrKykgewotCQlwUGFja2V0ID0gcHBQYWNrZXRBcnJheVtJbmRleF07Ci0KLQkJZG8gewotCQkJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUykKLQkJCSAgICB8fCBSVE1QX1RFU1RfRkxBRyhwQWQsCi0JCQkJCSAgICAgIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUykKLQkJCSAgICB8fCBSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkFESU9fT0ZGKSkgewotCQkJCS8qIERyb3Agc2VuZCByZXF1ZXN0IHNpbmNlIGhhcmR3YXJlIGlzIGluIHJlc2V0IHN0YXRlICovCi0JCQkJYnJlYWs7Ci0JCQl9IGVsc2UgaWYgKCFJTkZSQV9PTihwQWQpICYmICFBREhPQ19PTihwQWQpKSB7Ci0JCQkJLyogRHJvcCBzZW5kIHJlcXVlc3Qgc2luY2UgdGhlcmUgYXJlIG5vIHBoeXNpY2FsIGNvbm5lY3Rpb24geWV0ICovCi0JCQkJYnJlYWs7Ci0JCQl9IGVsc2UgewotCQkJCS8qIFJlY29yZCB0aGF0IG9yaWduYWwgcGFja2V0IHNvdXJjZSBpcyBmcm9tIE5ESVMgbGF5ZXIsc28gdGhhdCAqLwotCQkJCS8qIGxhdGVyIG9uIGRyaXZlciBrbm93cyBob3cgdG8gcmVsZWFzZSB0aGlzIE5ESVMgUEFDS0VUICovCi0JCQkJUlRNUF9TRVRfUEFDS0VUX1dDSUQocFBhY2tldCwgMCk7CS8qIHRoaXMgZmllbGQgaXMgdXNlbGVzcyB3aGVuIGluIFNUQSBtb2RlICovCi0JCQkJUlRNUF9TRVRfUEFDS0VUX1NPVVJDRShwUGFja2V0LCBQS1RTUkNfTkRJUyk7Ci0JCQkJTkRJU19TRVRfUEFDS0VUX1NUQVRVUyhwUGFja2V0LAotCQkJCQkJICAgICAgIE5ESVNfU1RBVFVTX1BFTkRJTkcpOwotCQkJCXBBZC0+UmFsaW5rQ291bnRlcnMuUGVuZGluZ05kaXNQYWNrZXRDb3VudCsrOwotCi0JCQkJYWxsb3dUb1NlbmQgPSBUUlVFOwotCQkJfQotCQl9IHdoaWxlIChGQUxTRSk7Ci0KLQkJaWYgKGFsbG93VG9TZW5kID09IFRSVUUpCi0JCQlTVEFTZW5kUGFja2V0KHBBZCwgcFBhY2tldCk7Ci0JCWVsc2UKLQkJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKLQl9Ci0KLQkvKiBEZXF1ZXVlIG91dGdvaW5nIGZyYW1lcyBmcm9tIFR4U3dRdWV1ZVtdIGFuZCBwcm9jZXNzIGl0ICovCi0JUlRNUERlUXVldWVQYWNrZXQocEFkLCBGQUxTRSwgTlVNX09GX1RYX1JJTkcsIE1BWF9UWF9QUk9DRVNTKTsKLQotfQotCi0vKgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Sb3V0aW5lIERlc2NyaXB0aW9uOgotCVRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGRvIHBhY2tldCBwYXJzaW5nIGFuZCBjbGFzc2lmaWNhdGlvbiBmb3IgVHggcGFja2V0Ci0JdG8gU1RBIGRldmljZSwgYW5kIGl0IHdpbGwgZW4tcXVldWUgcGFja2V0cyB0byBvdXIgVHhTd1F1ZXVlIGRlcGVuZHMgb24gQUMKLQljbGFzcy4KLQotQXJndW1lbnRzOgotCXBBZCAgICAJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKLQlwUGFja2V0IAlQb2ludGVyIHRvIHNlbmQgcGFja2V0Ci0KLVJldHVybiBWYWx1ZToKLQlORElTX1NUQVRVU19TVUNDRVNTCQkJSWYgc3VjY2VzcyB0byBxdWV1ZSB0aGUgcGFja2V0IGludG8gVHhTd1F1ZXVlLgotCU5ESVNfU1RBVFVTX0ZBSUxVUkUJCQlJZiBmYWlsZWQgdG8gZG8gZW4tcXVldWUuCi0KLU5vdGU6Ci0JWW91IG9ubHkgY2FuIHB1dCBPUy1pbmRlcGVuZWQgJiBTVEEgcmVsYXRlZCBjb2RlIGluIGhlcmUuCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi1pbnQgU1RBU2VuZFBhY2tldChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHZvaWQgKnBQYWNrZXQpCi17Ci0Jc3RydWN0IHJ0X3BhY2tldF9pbmZvIFBhY2tldEluZm87Ci0JdTggKnBTcmNCdWZWQTsKLQl1MzIgU3JjQnVmTGVuOwotCXUzMiBBbGxvd0ZyYWdTaXplOwotCXU4IE51bWJlck9mRnJhZzsKLQl1OCBSVFNSZXF1aXJlZDsKLQl1OCBRdWVJZHgsIFVzZXJQcmlvcml0eTsKLQlzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwRW50cnkgPSBOVUxMOwotCXVuc2lnbmVkIGludCBJcnFGbGFnczsKLQl1OCBGbGdJc0lQID0gMDsKLQl1OCBSYXRlOwotCi0JLyogUHJlcGFyZSBwYWNrZXQgaW5mb3JtYXRpb24gc3RydWN0dXJlIGZvciBidWZmZXIgZGVzY3JpcHRvciAqLwotCS8qIGNoYWluZWQgd2l0aGluIGEgc2luZ2xlIE5ESVMgcGFja2V0LiAqLwotCVJUTVBfUXVlcnlQYWNrZXRJbmZvKHBQYWNrZXQsICZQYWNrZXRJbmZvLCAmcFNyY0J1ZlZBLCAmU3JjQnVmTGVuKTsKLQotCWlmIChwU3JjQnVmVkEgPT0gTlVMTCkgewotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCSAoIlNUQVNlbmRQYWNrZXQgLS0+IHBTcmNCdWZWQSA9PSBOVUxMICFTcmNCdWZMZW49JXhcbiIsCi0JCQkgIFNyY0J1ZkxlbikpOwotCQkvKiBSZXNvdXJjZSBpcyBsb3csIHN5c3RlbSBkaWQgbm90IGFsbG9jYXRlIHZpcnR1YWwgYWRkcmVzcyAqLwotCQkvKiByZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRSBkaXJlY3RseSB0byB1cHBlciBsYXllciAqLwotCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7Ci0JCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOwotCX0KLQotCWlmIChTcmNCdWZMZW4gPCAxNCkgewotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCSAoIlNUQVNlbmRQYWNrZXQgLS0+IE5kaXMgUGFja2V0IGJ1ZmZlciBlcnJvciFcbiIpKTsKLQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOwotCQlyZXR1cm4gKE5ESVNfU1RBVFVTX0ZBSUxVUkUpOwotCX0KLQkvKiBJbiBIVCByYXRlIGFkaG9jIG1vZGUsIEEtTVBEVSBpcyBvZnRlbiB1c2VkLiBTbyBuZWVkIHRvIGxvb2t1cCBCQSBUYWJsZSBhbmQgTUFDIEVudHJ5LiAqLwotCS8qIE5vdGUgbXVsdGljYXN0IHBhY2tldHMgaW4gYWRob2MgYWxzbyB1c2UgQlNTSURfV0NJRCBpbmRleC4gKi8KLQl7Ci0JCWlmIChJTkZSQV9PTihwQWQpKSB7Ci0JCQl7Ci0JCQkJcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF07Ci0JCQkJUlRNUF9TRVRfUEFDS0VUX1dDSUQocFBhY2tldCwgQlNTSURfV0NJRCk7Ci0JCQkJUmF0ZSA9IHBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZTsKLQkJCX0KLQkJfSBlbHNlIGlmIChBREhPQ19PTihwQWQpKSB7Ci0JCQlpZiAoKnBTcmNCdWZWQSAmIDB4MDEpIHsKLQkJCQlSVE1QX1NFVF9QQUNLRVRfV0NJRChwUGFja2V0LCBNQ0FTVF9XQ0lEKTsKLQkJCQlwRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFtNQ0FTVF9XQ0lEXTsKLQkJCX0gZWxzZSB7Ci0JCQkJcEVudHJ5ID0gTWFjVGFibGVMb29rdXAocEFkLCBwU3JjQnVmVkEpOwotCQkJfQotCQkJUmF0ZSA9IHBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZTsKLQkJfQotCX0KLQotCWlmICghcEVudHJ5KSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJKCJTVEFTZW5kUGFja2V0LT5DYW5ub3QgZmluZCBwRW50cnkoJXBNKSBpbiBNYWNUYWIhXG4iLAotCQkJCXBTcmNCdWZWQSkpOwotCQkvKiBSZXNvdXJjZSBpcyBsb3csIHN5c3RlbSBkaWQgbm90IGFsbG9jYXRlIHZpcnR1YWwgYWRkcmVzcyAqLwotCQkvKiByZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRSBkaXJlY3RseSB0byB1cHBlciBsYXllciAqLwotCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7Ci0JCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOwotCX0KLQotCWlmIChBREhPQ19PTihwQWQpCi0JICAgICkgewotCQlSVE1QX1NFVF9QQUNLRVRfV0NJRChwUGFja2V0LCAodTgpcEVudHJ5LT5BaWQpOwotCX0KLQkvKiAqLwotCS8qIENoZWNrIHRoZSBFdGhlcm5ldCBGcmFtZSB0eXBlIG9mIHRoaXMgcGFja2V0LCBhbmQgc2V0IHRoZSBSVE1QX1NFVF9QQUNLRVRfU1BFQ0lGSUMgZmxhZ3MuICovCi0JLyogICAgICAgICAgICAgIEhlcmUgd2Ugc2V0IHRoZSBQQUNLRVRfU1BFQ0lGSUMgZmxhZ3MoTExDLCBWTEFOLCBESENQL0FSUCwgRUFQT0wpLiAqLwotCVJUTVBDaGVja0V0aGVyVHlwZShwQWQsIHBQYWNrZXQpOwotCi0JLyogKi8KLQkvKiBXUEEgODAyLjF4IHNlY3VyZWQgcG9ydCBjb250cm9sIC0gZHJvcCBhbGwgbm9uLTgwMi4xeCBmcmFtZSBiZWZvcmUgcG9ydCBzZWN1cmVkICovCi0JLyogKi8KLQlpZiAoKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpIHx8Ci0JICAgICAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLKSB8fAotCSAgICAgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIpIHx8Ci0JICAgICAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykKLQkgICAgIHx8IChwQWQtPlN0YUNmZy5JRUVFODAyMVggPT0gVFJVRSkKLQkgICAgKQotCSAgICAmJiAoKHBBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkID09IFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRCkKLQkJfHwgKHBBZC0+U3RhQ2ZnLk1pY0VyckNudCA+PSAyKSkKLQkgICAgJiYgKFJUTVBfR0VUX1BBQ0tFVF9FQVBPTChwUGFja2V0KSA9PSBGQUxTRSkKLQkgICAgKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiU1RBU2VuZFBhY2tldCAtLT4gRHJvcCBwYWNrZXQgYmVmb3JlIHBvcnQgc2VjdXJlZCFcbiIpKTsKLQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOwotCi0JCXJldHVybiAoTkRJU19TVEFUVVNfRkFJTFVSRSk7Ci0JfQotCi0JLyogU1RFUCAxLiBEZWNpZGUgbnVtYmVyIG9mIGZyYWdtZW50cyByZXF1aXJlZCB0byBkZWxpdmVyIHRoaXMgTVNEVS4gKi8KLQkvKiAgICAgICAgIFRoZSBlc3RpbWF0aW9uIGhlcmUgaXMgbm90IHZlcnkgYWNjdXJhdGUgYmVjYXVzZSBkaWZmaWN1bHQgdG8gKi8KLQkvKiAgICAgICAgIHRha2UgZW5jcnlwdGlvbiBvdmVyaGVhZCBpbnRvIGNvbnNpZGVyYXRpb24gaGVyZS4gVGhlIHJlc3VsdCAqLwotCS8qICAgICAgICAgIk51bWJlck9mRnJhZyIgaXMgdGhlbiBqdXN0IHVzZWQgdG8gcHJlLWNoZWNrIGlmIGVub3VnaCBmcmVlICovCi0JLyogICAgICAgICBUWEQgYXJlIGF2YWlsYWJsZSB0byBob2xkIHRoaXMgTVNEVS4gKi8KLQotCWlmICgqcFNyY0J1ZlZBICYgMHgwMSkJLyogZnJhZ21lbnRhdGlvbiBub3QgYWxsb3dlZCBvbiBtdWx0aWNhc3QgJiBicm9hZGNhc3QgKi8KLQkJTnVtYmVyT2ZGcmFnID0gMTsKLQllbHNlIGlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0FHR1JFR0FUSU9OX0lOVVNFRCkpCi0JCU51bWJlck9mRnJhZyA9IDE7CS8qIEFnZ3JlZ2F0aW9uIG92ZXJ3aGVsbXMgZnJhZ21lbnRhdGlvbiAqLwotCWVsc2UgaWYgKENMSUVOVF9TVEFUVVNfVEVTVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfQU1TRFVfSU5VU0VEKSkKLQkJTnVtYmVyT2ZGcmFnID0gMTsJLyogQWdncmVnYXRpb24gb3ZlcndoZWxtcyBmcmFnbWVudGF0aW9uICovCi0JZWxzZSBpZiAoKHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NT0RFID09IE1PREVfSFRNSVgpCi0JCSB8fCAocEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1PREUgPT0gTU9ERV9IVEdSRUVORklFTEQpKQotCQlOdW1iZXJPZkZyYWcgPSAxOwkvKiBNSU1PIFJBVEUgb3ZlcndoZWxtcyBmcmFnbWVudGF0aW9uICovCi0JZWxzZSB7Ci0JCS8qIFRoZSBjYWxjdWxhdGVkICJOdW1iZXJPZkZyYWciIGlzIGEgcm91Z2ggZXN0aW1hdGlvbiBiZWNhdXNlIG9mIHZhcmlvdXMgKi8KLQkJLyogZW5jcnlwdGlvbi9lbmNhcHN1bGF0aW9uIG92ZXJoZWFkIG5vdCB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIFRoaXMgbnVtYmVyIGlzIGp1c3QgKi8KLQkJLyogdXNlZCB0byBtYWtlIHN1cmUgZW5vdWdoIGZyZWUgVFhEIGFyZSBhdmFpbGFibGUgYmVmb3JlIGZyYWdtZW50YXRpb24gdGFrZXMgcGxhY2UuICovCi0JCS8qIEluIGNhc2UgdGhlIGFjdHVhbCByZXF1aXJlZCBudW1iZXIgb2YgZnJhZ21lbnRzIG9mIGFuIE5ESVMgcGFja2V0ICovCi0JCS8qIGV4Y2NlZWRzICJOdW1iZXJPZkZyYWciY2FjdWxhdGVkIGhlcmUgYW5kIG5vdCBlbm91Z2ggZnJlZSBUWEQgYXZhaWxhYmxlLCB0aGUgKi8KLQkJLyogbGFzdCBmcmFnbWVudCAoaS5lLiBsYXN0IE1QRFUpIHdpbGwgYmUgZHJvcHBlZCBpbiBSVE1QSGFyZFRyYW5zbWl0KCkgZHVlIHRvIG91dCBvZiAqLwotCQkvKiByZXNvdXJjZSwgYW5kIHRoZSBORElTIHBhY2tldCB3aWxsIGJlIGluZGljYXRlZCBORElTX1NUQVRVU19GQUlMVVJFLiBUaGlzIHNob3VsZCAqLwotCQkvKiByYXJlbHkgaGFwcGVuIGFuZCB0aGUgcGVuYWx0eSBpcyBqdXN0IGxpa2UgYSBUWCBSRVRSWSBmYWlsLiBBZmZvcmRhYmxlLiAqLwotCi0JCUFsbG93RnJhZ1NpemUgPQotCQkgICAgKHBBZC0+Q29tbW9uQ2ZnLkZyYWdtZW50VGhyZXNob2xkKSAtIExFTkdUSF84MDJfMTEgLQotCQkgICAgTEVOR1RIX0NSQzsKLQkJTnVtYmVyT2ZGcmFnID0KLQkJICAgICgoUGFja2V0SW5mby5Ub3RhbFBhY2tldExlbmd0aCAtIExFTkdUSF84MDJfMyArCi0JCSAgICAgIExFTkdUSF84MDJfMV9IKSAvIEFsbG93RnJhZ1NpemUpICsgMTsKLQkJLyogVG8gZ2V0IGFjY3VyYXRlIG51bWJlciBvZiBmcmFnbWVudGF0aW9uLCBNaW51cyAxIGlmIHRoZSBzaXplIGp1c3QgbWF0Y2ggdG8gYWxsb3dhYmxlIGZyYWdtZW50IHNpemUgKi8KLQkJaWYgKCgoUGFja2V0SW5mby5Ub3RhbFBhY2tldExlbmd0aCAtIExFTkdUSF84MDJfMyArCi0JCSAgICAgIExFTkdUSF84MDJfMV9IKSAlIEFsbG93RnJhZ1NpemUpID09IDApIHsKLQkJCU51bWJlck9mRnJhZy0tOwotCQl9Ci0JfQotCi0JLyogU2F2ZSBmcmFnbWVudCBudW1iZXIgdG8gTmRpcyBwYWNrZXQgcmVzZXJ2ZWQgZmllbGQgKi8KLQlSVE1QX1NFVF9QQUNLRVRfRlJBR01FTlRTKHBQYWNrZXQsIE51bWJlck9mRnJhZyk7Ci0KLQkvKiBTVEVQIDIuIENoZWNrIHRoZSByZXF1aXJlbWVudCBvZiBSVFM6ICovCi0JLyogICAgICAgICBJZiBtdWx0aXBsZSBmcmFnbWVudCByZXF1aXJlZCwgUlRTIGlzIHJlcXVpcmVkIG9ubHkgZm9yIHRoZSBmaXJzdCBmcmFnbWVudCAqLwotCS8qICAgICAgICAgaWYgdGhlIGZyYWdtZW50IHNpemUgaXMgbGFyZ2VyIHRoYW4gUlRTIHRocmVzaG9sZCAqLwotCS8qICAgICBGb3IgUlQyOHh4LCBMZXQgQVNJQyBzZW5kIFJUUy9DVFMgKi8KLQkvKiAgICAgIFJUTVBfU0VUX1BBQ0tFVF9SVFMocFBhY2tldCwgMCk7ICovCi0JaWYgKE51bWJlck9mRnJhZyA+IDEpCi0JCVJUU1JlcXVpcmVkID0KLQkJICAgIChwQWQtPkNvbW1vbkNmZy5GcmFnbWVudFRocmVzaG9sZCA+Ci0JCSAgICAgcEFkLT5Db21tb25DZmcuUnRzVGhyZXNob2xkKSA/IDEgOiAwOwotCWVsc2UKLQkJUlRTUmVxdWlyZWQgPQotCQkgICAgKFBhY2tldEluZm8uVG90YWxQYWNrZXRMZW5ndGggPgotCQkgICAgIHBBZC0+Q29tbW9uQ2ZnLlJ0c1RocmVzaG9sZCkgPyAxIDogMDsKLQotCS8qIFNhdmUgUlRTIHJlcXVpcmVtZW50IHRvIE5kaXMgcGFja2V0IHJlc2VydmVkIGZpZWxkICovCi0JUlRNUF9TRVRfUEFDS0VUX1JUUyhwUGFja2V0LCBSVFNSZXF1aXJlZCk7Ci0JUlRNUF9TRVRfUEFDS0VUX1RYUkFURShwUGFja2V0LCBwQWQtPkNvbW1vbkNmZy5UeFJhdGUpOwotCi0JLyogKi8KLQkvKiBTVEVQIDMuIFRyYWZmaWMgY2xhc3NpZmljYXRpb24uIG91dGNvbWUgPSA8VXNlclByaW9yaXR5LCBRdWVJZHg+ICovCi0JLyogKi8KLQlVc2VyUHJpb3JpdHkgPSAwOwotCVF1ZUlkeCA9IFFJRF9BQ19CRTsKLQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19XTU1fSU5VU0VEKSAmJgotCSAgICBDTElFTlRfU1RBVFVTX1RFU1RfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1dNTV9DQVBBQkxFKSkgewotCQl1MTYgUHJvdG9jb2w7Ci0JCXU4IExsY1NuYXBMZW4gPSAwLCBCeXRlMCwgQnl0ZTE7Ci0JCWRvIHsKLQkJCS8qIGdldCBFdGhlcm5ldCBwcm90b2NvbCBmaWVsZCAqLwotCQkJUHJvdG9jb2wgPQotCQkJICAgICh1MTYpKChwU3JjQnVmVkFbMTJdIDw8IDgpICsgcFNyY0J1ZlZBWzEzXSk7Ci0JCQlpZiAoUHJvdG9jb2wgPD0gMTUwMCkgewotCQkJCS8qIGdldCBFdGhlcm5ldCBwcm90b2NvbCBmaWVsZCBmcm9tIExMQy9TTkFQICovCi0JCQkJaWYgKFNuaWZmMkJ5dGVzRnJvbU5kaXNCdWZmZXIKLQkJCQkgICAgKFBhY2tldEluZm8ucEZpcnN0QnVmZmVyLCBMRU5HVEhfODAyXzMgKyA2LAotCQkJCSAgICAgJkJ5dGUwLCAmQnl0ZTEpICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCi0JCQkJCWJyZWFrOwotCi0JCQkJUHJvdG9jb2wgPSAodTE2KSgoQnl0ZTAgPDwgOCkgKyBCeXRlMSk7Ci0JCQkJTGxjU25hcExlbiA9IDg7Ci0JCQl9Ci0JCQkvKiBhbHdheXMgQUNfQkUgZm9yIG5vbi1JUCBwYWNrZXQgKi8KLQkJCWlmIChQcm90b2NvbCAhPSAweDA4MDApCi0JCQkJYnJlYWs7Ci0KLQkJCS8qIGdldCBJUCBoZWFkZXIgKi8KLQkJCWlmIChTbmlmZjJCeXRlc0Zyb21OZGlzQnVmZmVyCi0JCQkgICAgKFBhY2tldEluZm8ucEZpcnN0QnVmZmVyLCBMRU5HVEhfODAyXzMgKyBMbGNTbmFwTGVuLAotCQkJICAgICAmQnl0ZTAsICZCeXRlMSkgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKLQkJCQlicmVhazsKLQotCQkJLyogcmV0dXJuIEFDX0JFIGlmIHBhY2tldCBpcyBub3QgSVB2NCAqLwotCQkJaWYgKChCeXRlMCAmIDB4ZjApICE9IDB4NDApCi0JCQkJYnJlYWs7Ci0KLQkJCUZsZ0lzSVAgPSAxOwotCQkJVXNlclByaW9yaXR5ID0gKEJ5dGUxICYgMHhlMCkgPj4gNTsKLQkJCVF1ZUlkeCA9IE1hcFVzZXJQcmlvcml0eVRvQWNjZXNzQ2F0ZWdvcnlbVXNlclByaW9yaXR5XTsKLQotCQkJLyogVE9ETzogaGF2ZSB0byBjaGVjayBBQ00gYml0LiBhcHBseSBUU1BFQyBpZiBBQ00gaXMgT04gKi8KLQkJCS8qIFRPRE86IGRvd25ncmFkZSBVUCAmIFF1ZUlkeCBiZWZvcmUgcGFzc2luZyBBQ00gKi8KLQkJCS8qCi0JCQkgICBVbmRlciBXTU0gQUNNIGNvbnRyb2wsIHdlIGRvbnQgbmVlZCB0byBjaGVjayB0aGUgYml0OwotCQkJICAgT3Igd2hlbiBhIFRTUEVDIGlzIGJ1aWx0IGZvciBWTyBidXQgd2Ugd2lsbCBjaGFuZ2UgdG8gaXNzdWUKLQkJCSAgIEJBIHNlc3Npb24gZm9yIEJFIGhlcmUsIHNvIHdlIHdpbGwgbm90IHVzZSBCQSB0byBzZW5kIFZPIHBhY2tldHMuCi0JCQkgKi8KLQkJCWlmIChwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLmJBQ01bUXVlSWR4XSkgewotCQkJCVVzZXJQcmlvcml0eSA9IDA7Ci0JCQkJUXVlSWR4ID0gUUlEX0FDX0JFOwotCQkJfQotCQl9IHdoaWxlIChGQUxTRSk7Ci0JfQotCi0JUlRNUF9TRVRfUEFDS0VUX1VQKHBQYWNrZXQsIFVzZXJQcmlvcml0eSk7Ci0KLQkvKiBNYWtlIHN1cmUgU2VuZFR4V2FpdCBxdWV1ZSByZXNvdXJjZSB3b24ndCBiZSB1c2VkIGJ5IG90aGVyIHRocmVhZHMgKi8KLQlSVE1QX0lSUV9MT0NLKCZwQWQtPmlycV9sb2NrLCBJcnFGbGFncyk7Ci0JaWYgKHBBZC0+VHhTd1F1ZXVlW1F1ZUlkeF0uTnVtYmVyID49IE1BWF9QQUNLRVRTX0lOX1FVRVVFKSB7Ci0JCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5pcnFfbG9jaywgSXJxRmxhZ3MpOwotCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7Ci0KLQkJcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7Ci0JfSBlbHNlIHsKLQkJSW5zZXJ0VGFpbFF1ZXVlQWMocEFkLCBwRW50cnksICZwQWQtPlR4U3dRdWV1ZVtRdWVJZHhdLAotCQkJCSAgUEFDS0VUX1RPX1FVRVVFX0VOVFJZKHBQYWNrZXQpKTsKLQl9Ci0JUlRNUF9JUlFfVU5MT0NLKCZwQWQtPmlycV9sb2NrLCBJcnFGbGFncyk7Ci0KLQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BdXRvQkEgPT0gVFJVRSkgJiYKLQkgICAgSVNfSFRfU1RBKHBFbnRyeSkpIHsKLQkJLypzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwTWFjRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXTsgKi8KLQkJaWYgKCgocEVudHJ5LT5UWEJBYml0bWFwICYgKDEgPDwgVXNlclByaW9yaXR5KSkgPT0gMCkgJiYKLQkJICAgICgocEVudHJ5LT5CQURlY2xpbmVCaXRtYXAgJiAoMSA8PCBVc2VyUHJpb3JpdHkpKSA9PSAwKSAmJgotCQkgICAgKHBFbnRyeS0+UG9ydFNlY3VyZWQgPT0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQpCi0JCSAgICAvKiBGb3IgSU9UIGNvbXBhdGliaWxpdHksIGlmICovCi0JCSAgICAvKiAxLiBJdCBpcyBSYWxpbmsgY2hpcCBvciAqLwotCQkgICAgLyogMi4gSXQgaXMgT1BFTiBvciBBRVMgbW9kZSwgKi8KLQkJICAgIC8qIHRoZW4gQkEgc2Vzc2lvbiBjYW4gYmUgYnVsaXQuICovCi0JCSAgICAmJiAoKHBFbnRyeS0+VmFsaWRBc0NMSSAmJiBwQWQtPk1sbWVBdXguQVBSYWxpbmtJZSAhPSAweDApCi0JCQl8fCAocEVudHJ5LT5XZXBTdGF0dXMgIT0gTmRpczgwMl8xMVdFUEVuYWJsZWQKLQkJCSAgICAmJiBwRW50cnktPldlcFN0YXR1cyAhPQotCQkJICAgIE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpKQotCQkgICAgKSB7Ci0JCQlCQU9yaVNlc3Npb25TZXRVcChwQWQsIHBFbnRyeSwgVXNlclByaW9yaXR5LCAwLCAxMCwKLQkJCQkJICBGQUxTRSk7Ci0JCX0KLQl9Ci0KLQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY09zVHhDb3VudFtRdWVJZHhdKys7CS8qIFRPRE86IGZvciBkZWJ1ZyBvbmx5LiB0byBiZSByZW1vdmVkICovCi0JcmV0dXJuIE5ESVNfU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCQlUaGlzIHN1YnJvdXRpbmUgd2lsbCBzY2FuIHRocm91Z2ggcmVsYXRpdmUgcmluZyBkZXNjcmlwdG9yIHRvIGZpbmQKLQkJb3V0IGF2YWlsYWJsZSBmcmVlIHJpbmcgZGVzY3JpcHRvciBhbmQgY29tcGFyZSB3aXRoIHJlcXVlc3Qgc2l6ZS4KLQotCUFyZ3VtZW50czoKLQkJcEFkIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKLQkJUXVlSWR4CQlTZWxlY3RlZCBUWCBSaW5nCi0KLQlSZXR1cm4gVmFsdWU6Ci0JCU5ESVNfU1RBVFVTX0ZBSUxVUkUgCU5vdCBlbm91Z2ggZnJlZSBkZXNjcmlwdG9yCi0JCU5ESVNfU1RBVFVTX1NVQ0NFU1MgCUVub3VnaCBmcmVlIGRlc2NyaXB0b3IKLQotCUlSUUwgPSBQQVNTSVZFX0xFVkVMCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotI2lmZGVmIFJUTVBfTUFDX1BDSQotaW50IFJUTVBGcmVlVFhEUmVxdWVzdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgICAgdTggUXVlSWR4LAotCQkJICAgICAgIHU4IE51bWJlclJlcXVpcmVkLCB1OCAqRnJlZU51bWJlcklzKQotewotCXVuc2lnbmVkIGxvbmcgRnJlZU51bWJlciA9IDA7Ci0JaW50IFN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7Ci0KLQlzd2l0Y2ggKFF1ZUlkeCkgewotCWNhc2UgUUlEX0FDX0JLOgotCWNhc2UgUUlEX0FDX0JFOgotCWNhc2UgUUlEX0FDX1ZJOgotCWNhc2UgUUlEX0FDX1ZPOgotCQlpZiAocEFkLT5UeFJpbmdbUXVlSWR4XS5UeFN3RnJlZUlkeCA+Ci0JCSAgICBwQWQtPlR4UmluZ1tRdWVJZHhdLlR4Q3B1SWR4KQotCQkJRnJlZU51bWJlciA9Ci0JCQkgICAgcEFkLT5UeFJpbmdbUXVlSWR4XS5UeFN3RnJlZUlkeCAtCi0JCQkgICAgcEFkLT5UeFJpbmdbUXVlSWR4XS5UeENwdUlkeCAtIDE7Ci0JCWVsc2UKLQkJCUZyZWVOdW1iZXIgPQotCQkJICAgIHBBZC0+VHhSaW5nW1F1ZUlkeF0uVHhTd0ZyZWVJZHggKyBUWF9SSU5HX1NJWkUgLQotCQkJICAgIHBBZC0+VHhSaW5nW1F1ZUlkeF0uVHhDcHVJZHggLSAxOwotCi0JCWlmIChGcmVlTnVtYmVyID49IE51bWJlclJlcXVpcmVkKQotCQkJU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKLQkJYnJlYWs7Ci0KLQljYXNlIFFJRF9NR01UOgotCQlpZiAocEFkLT5NZ210UmluZy5UeFN3RnJlZUlkeCA+IHBBZC0+TWdtdFJpbmcuVHhDcHVJZHgpCi0JCQlGcmVlTnVtYmVyID0KLQkJCSAgICBwQWQtPk1nbXRSaW5nLlR4U3dGcmVlSWR4IC0gcEFkLT5NZ210UmluZy5UeENwdUlkeCAtCi0JCQkgICAgMTsKLQkJZWxzZQotCQkJRnJlZU51bWJlciA9Ci0JCQkgICAgcEFkLT5NZ210UmluZy5UeFN3RnJlZUlkeCArIE1HTVRfUklOR19TSVpFIC0KLQkJCSAgICBwQWQtPk1nbXRSaW5nLlR4Q3B1SWR4IC0gMTsKLQotCQlpZiAoRnJlZU51bWJlciA+PSBOdW1iZXJSZXF1aXJlZCkKLQkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkgKCJSVE1QRnJlZVRYRFJlcXVlc3Q6OkludmFsaWQgUXVlSWR4KD0lZClcbiIsIFF1ZUlkeCkpOwotCQlicmVhazsKLQl9Ci0JKkZyZWVOdW1iZXJJcyA9ICh1OClGcmVlTnVtYmVyOwotCi0JcmV0dXJuIChTdGF0dXMpOwotfQotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotI2lmZGVmIFJUTVBfTUFDX1VTQgotLyoKLQlBY3R1YWxseSwgdGhpcyBmdW5jdGlvbiB1c2VkIHRvIGNoZWNrIGlmIHRoZSBUeEhhcmR3YXJlIFF1ZXVlIHN0aWxsIGhhcyBmcmFtZSBuZWVkIHRvIHNlbmQuCi0JSWYgbm8gZnJhbWUgbmVlZCB0byBzZW5kLCBnbyB0byBzbGVlcCwgZWxzZSwgc3RpbGwgd2FrZSB1cC4KLSovCi1pbnQgUlRNUEZyZWVUWERSZXF1ZXN0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICAgICB1OCBRdWVJZHgsCi0JCQkgICAgICAgdTggTnVtYmVyUmVxdWlyZWQsIHU4ICpGcmVlTnVtYmVySXMpCi17Ci0JLyp1bnNpZ25lZCBsb25nICAgICAgICAgRnJlZU51bWJlciA9IDA7ICovCi0JaW50IFN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7Ci0JdW5zaWduZWQgbG9uZyBJcnFGbGFnczsKLQlzdHJ1Y3QgcnRfaHRfdHhfY29udGV4dCAqcEhUVFhDb250ZXh0OwotCi0Jc3dpdGNoIChRdWVJZHgpIHsKLQljYXNlIFFJRF9BQ19CSzoKLQljYXNlIFFJRF9BQ19CRToKLQljYXNlIFFJRF9BQ19WSToKLQljYXNlIFFJRF9BQ19WTzoKLQkJewotCQkJcEhUVFhDb250ZXh0ID0gJnBBZC0+VHhDb250ZXh0W1F1ZUlkeF07Ci0JCQlSVE1QX0lSUV9MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tRdWVJZHhdLAotCQkJCSAgICAgIElycUZsYWdzKTsKLQkJCWlmICgocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uICE9Ci0JCQkgICAgIHBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24pCi0JCQkgICAgfHwgKHBIVFRYQ29udGV4dC0+SVJQUGVuZGluZyA9PSBUUlVFKSkgewotCQkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7Ci0JCQl9IGVsc2UgewotCQkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7Ci0JCQl9Ci0JCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW1F1ZUlkeF0sCi0JCQkJCUlycUZsYWdzKTsKLQkJfQotCQlicmVhazsKLQljYXNlIFFJRF9NR01UOgotCQlpZiAocEFkLT5NZ210UmluZy5UeFN3RnJlZUlkeCAhPSBNR01UX1JJTkdfU0laRSkKLQkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7Ci0JCWVsc2UKLQkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJICgiUlRNUEZyZWVUWERSZXF1ZXN0OjpJbnZhbGlkIFF1ZUlkeCg9JWQpXG4iLCBRdWVJZHgpKTsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIChTdGF0dXMpOwotfQotI2VuZGlmIC8qIFJUTVBfTUFDX1VTQiAvLyAqLwotCi12b2lkIFJUTVBTZW5kRGlzYXNzb2NpYXRpb25GcmFtZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci19Ci0KLXZvaWQgUlRNUFNlbmROdWxsRnJhbWUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICAgICAgdTggVHhSYXRlLCBJTiBCT09MRUFOIGJRb3NOdWxsKQotewotCXU4IE51bGxGcmFtZVs0OF07Ci0JdW5zaWduZWQgbG9uZyBMZW5ndGg7Ci0Jc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEgKiBwSGVhZGVyXzgwMl8xMTsKLQotCS8qIFdQQSA4MDIuMXggc2VjdXJlZCBwb3J0IGNvbnRyb2wgKi8KLQlpZiAoKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpIHx8Ci0JICAgICAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLKSB8fAotCSAgICAgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIpIHx8Ci0JICAgICAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykKLQkgICAgIHx8IChwQWQtPlN0YUNmZy5JRUVFODAyMVggPT0gVFJVRSkKLQkgICAgKSAmJiAocEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQgPT0gV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVEKSkgewotCQlyZXR1cm47Ci0JfQotCi0JTmRpc1plcm9NZW1vcnkoTnVsbEZyYW1lLCA0OCk7Ci0JTGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBydF9oZWFkZXJfODAyXzExKTsKLQotCXBIZWFkZXJfODAyXzExID0gKHN0cnVjdCBydF9oZWFkZXJfODAyXzExICopIE51bGxGcmFtZTsKLQotCXBIZWFkZXJfODAyXzExLT5GQy5UeXBlID0gQlRZUEVfREFUQTsKLQlwSGVhZGVyXzgwMl8xMS0+RkMuU3ViVHlwZSA9IFNVQlRZUEVfTlVMTF9GVU5DOwotCXBIZWFkZXJfODAyXzExLT5GQy5Ub0RzID0gMTsKLQlDT1BZX01BQ19BRERSKHBIZWFkZXJfODAyXzExLT5BZGRyMSwgcEFkLT5Db21tb25DZmcuQnNzaWQpOwotCUNPUFlfTUFDX0FERFIocEhlYWRlcl84MDJfMTEtPkFkZHIyLCBwQWQtPkN1cnJlbnRBZGRyZXNzKTsKLQlDT1BZX01BQ19BRERSKHBIZWFkZXJfODAyXzExLT5BZGRyMywgcEFkLT5Db21tb25DZmcuQnNzaWQpOwotCi0JaWYgKHBBZC0+Q29tbW9uQ2ZnLmJBUFNERm9yY2VQb3dlclNhdmUpIHsKLQkJcEhlYWRlcl84MDJfMTEtPkZDLlB3ck1nbXQgPSBQV1JfU0FWRTsKLQl9IGVsc2UgewotCQlwSGVhZGVyXzgwMl8xMS0+RkMuUHdyTWdtdCA9Ci0JCSAgICAocEFkLT5TdGFDZmcuUHNtID09IFBXUl9TQVZFKSA/IDEgOiAwOwotCX0KLQlwSGVhZGVyXzgwMl8xMS0+RHVyYXRpb24gPQotCSAgICBwQWQtPkNvbW1vbkNmZy5Ec2lmcyArIFJUTVBDYWxjRHVyYXRpb24ocEFkLCBUeFJhdGUsIDE0KTsKLQotCXBBZC0+U2VxdWVuY2UrKzsKLQlwSGVhZGVyXzgwMl8xMS0+U2VxdWVuY2UgPSBwQWQtPlNlcXVlbmNlOwotCi0JLyogUHJlcGFyZSBRb3NOdWxsIGZ1bmN0aW9uIGZyYW1lICovCi0JaWYgKGJRb3NOdWxsKSB7Ci0JCXBIZWFkZXJfODAyXzExLT5GQy5TdWJUeXBlID0gU1VCVFlQRV9RT1NfTlVMTDsKLQotCQkvKiBjb3B5IFFPUyBjb250cm9sIGJ5dGVzICovCi0JCU51bGxGcmFtZVtMZW5ndGhdID0gMDsKLQkJTnVsbEZyYW1lW0xlbmd0aCArIDFdID0gMDsKLQkJTGVuZ3RoICs9IDI7CS8qIGlmIHBhZCB3aXRoIDIgYnl0ZXMgZm9yIGFsaWdubWVudCwgQVBTRCB3aWxsIGZhaWwgKi8KLQl9Ci0KLQlIQUxfS2lja091dE51bGxGcmFtZVR4KHBBZCwgMCwgTnVsbEZyYW1lLCBMZW5ndGgpOwotCi19Ci0KLS8qIElSUUwgPSBESVNQQVRDSF9MRVZFTCAqLwotdm9pZCBSVE1QU2VuZFJUU0ZyYW1lKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgICAgdTggKnBEQSwKLQkJICAgICAgSU4gdW5zaWduZWQgaW50IE5leHRNcGR1U2l6ZSwKLQkJICAgICAgdTggVHhSYXRlLAotCQkgICAgICB1OCBSVFNSYXRlLAotCQkgICAgICB1MTYgQWNrRHVyYXRpb24sIHU4IFF1ZUlkeCwgdTggRnJhbWVHYXApCi17Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiAgRklORCBFTkNSWVBUIEtFWSBBTkQgREVDSURFIENJUEhFUiBBTEdPUklUSE0gKi8KLS8qICAgICAgICAgICAgICBGaW5kIHRoZSBXUEEga2V5LCBlaXRoZXIgR3JvdXAgb3IgUGFpcndpc2UgS2V5ICovCi0vKiAgICAgICAgICAgICAgTEVBUCArIFRLSVAgYWxzbyB1c2UgV1BBIGtleS4gKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBEZWNpZGUgV0VQIGJpdCBhbmQgY2lwaGVyIHN1aXRlIHRvIGJlIHVzZWQuIFNhbWUgY2lwaGVyIHN1aXRlIHNob3VsZCBiZSB1c2VkIGZvciB3aG9sZSBmcmFnbWVudCBidXJzdCAqLwotLyogSW4gQ2lzY28gQ0NYIDIuMCBMZWFwIEF1dGhlbnRpY2F0aW9uICovCi0vKiAgICAgICAgICAgICAgICAgV2VwU3RhdHVzIGlzIE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQgYnV0IHRoZSBrZXkgd2lsbCB1c2UgUGFpcndpc2VLZXkgKi8KLS8qICAgICAgICAgICAgICAgICBJbnN0ZWFkIG9mIHRoZSBTaGFyZWRLZXksIFNoYXJlZEtleSBMZW5ndGggbWF5IGJlIFplcm8uICovCi12b2lkIFNUQUZpbmRDaXBoZXJBbGdvcml0aG0oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfdHhfYmxrICpwVHhCbGspCi17Ci0JTkRJU184MDJfMTFfRU5DUllQVElPTl9TVEFUVVMgQ2lwaGVyOwkvKiBUbyBpbmRpY2F0ZSBjaXBoZXIgdXNlZCBmb3IgdGhpcyBwYWNrZXQgKi8KLQl1OCBDaXBoZXJBbGcgPSBDSVBIRVJfTk9ORTsJLyogY2lwaGVyIGFsb2dyaXRobSAqLwotCXU4IEtleUlkeCA9IDB4ZmY7Ci0JdTggKnBTcmNCdWZWQTsKLQlzdHJ1Y3QgcnRfY2lwaGVyX2tleSAqcEtleSA9IE5VTEw7Ci0KLQlwU3JjQnVmVkEgPSBHRVRfT1NfUEtUX0RBVEFQVFIocFR4QmxrLT5wUGFja2V0KTsKLQotCXsKLQkJLyogU2VsZWN0IENpcGhlciAqLwotCQlpZiAoKCpwU3JjQnVmVkEgJiAweDAxKSAmJiAoQURIT0NfT04ocEFkKSkpCi0JCQlDaXBoZXIgPSBwQWQtPlN0YUNmZy5Hcm91cENpcGhlcjsJLyogQ2lwaGVyIGZvciBNdWx0aWNhc3Qgb3IgQnJvYWRjYXN0ICovCi0JCWVsc2UKLQkJCUNpcGhlciA9IHBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXI7CS8qIENpcGhlciBmb3IgVW5pY2FzdCAqLwotCi0JCWlmIChSVE1QX0dFVF9QQUNLRVRfRUFQT0wocFR4QmxrLT5wUGFja2V0KSkgewotCQkJQVNTRVJUKHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZyA8PQotCQkJICAgICAgIENJUEhFUl9DS0lQMTI4KTsKLQotCQkJLyogNC13YXkgaGFuZHNoYWtpbmcgZnJhbWUgbXVzdCBiZSBjbGVhciAqLwotCQkJaWYgKCEoVFhfQkxLX1RFU1RfRkxBRyhwVHhCbGssIGZUWF9iQ2xlYXJFQVBGcmFtZSkpCi0JCQkgICAgJiYgKHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZykKLQkJCSAgICAmJiAocEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5TGVuKSkgewotCQkJCUNpcGhlckFsZyA9IHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZzsKLQkJCQlLZXlJZHggPSAwOwotCQkJfQotCQl9IGVsc2UgaWYgKENpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkKSB7Ci0JCQlLZXlJZHggPSBwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQ7Ci0JCX0gZWxzZSBpZiAoKENpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKSB8fAotCQkJICAgKENpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKSkgewotCQkJaWYgKCgqcFNyY0J1ZlZBICYgMHgwMSkgJiYgKEFESE9DX09OKHBBZCkpKQkvKiBtdWx0aWNhc3QgKi8KLQkJCQlLZXlJZHggPSBwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQ7Ci0JCQllbHNlIGlmIChwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5LZXlMZW4pCi0JCQkJS2V5SWR4ID0gMDsKLQkJCWVsc2UKLQkJCQlLZXlJZHggPSBwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQ7Ci0JCX0KLQotCQlpZiAoS2V5SWR4ID09IDB4ZmYpCi0JCQlDaXBoZXJBbGcgPSBDSVBIRVJfTk9ORTsKLQkJZWxzZSBpZiAoKENpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbkRpc2FibGVkKQotCQkJIHx8IChwQWQtPlNoYXJlZEtleVtCU1MwXVtLZXlJZHhdLktleUxlbiA9PSAwKSkKLQkJCUNpcGhlckFsZyA9IENJUEhFUl9OT05FOwotCQllbHNlIGlmIChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgJiYKLQkJCSAoQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQpICYmCi0JCQkgKHBBZC0+U3RhQ2ZnLklFRUU4MDIxWCA9PSBUUlVFKSAmJgotCQkJIChwQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCA9PQotCQkJICBXUEFfODAyXzFYX1BPUlRfTk9UX1NFQ1VSRUQpKQotCQkJQ2lwaGVyQWxnID0gQ0lQSEVSX05PTkU7Ci0JCWVsc2UgewotCQkJLypIZWFkZXJfODAyXzExLkZDLldlcCA9IDE7ICovCi0JCQlDaXBoZXJBbGcgPSBwQWQtPlNoYXJlZEtleVtCU1MwXVtLZXlJZHhdLkNpcGhlckFsZzsKLQkJCXBLZXkgPSAmcEFkLT5TaGFyZWRLZXlbQlNTMF1bS2V5SWR4XTsKLQkJfQotCX0KLQotCXBUeEJsay0+Q2lwaGVyQWxnID0gQ2lwaGVyQWxnOwotCXBUeEJsay0+cEtleSA9IHBLZXk7Ci19Ci0KLXZvaWQgU1RBQnVpbGRDb21tb244MDJfMTFIZWFkZXIoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfdHhfYmxrICpwVHhCbGspCi17Ci0Jc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEgKnBIZWFkZXJfODAyXzExOwotCi0JLyogKi8KLQkvKiBNQUtFIEEgQ09NTU9OIDgwMi4xMSBIRUFERVIgKi8KLQkvKiAqLwotCi0JLyogbm9ybWFsIHdsYW4gaGVhZGVyIHNpemUgOiAyNCBvY3RldHMgKi8KLQlwVHhCbGstPk1wZHVIZWFkZXJMZW4gPSBzaXplb2Yoc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEpOwotCi0JcEhlYWRlcl84MDJfMTEgPQotCSAgICAoc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEgKikgJiBwVHhCbGstPkhlYWRlckJ1ZltUWElORk9fU0laRSArIFRYV0lfU0laRV07Ci0KLQlOZGlzWmVyb01lbW9yeShwSGVhZGVyXzgwMl8xMSwgc2l6ZW9mKHN0cnVjdCBydF9oZWFkZXJfODAyXzExKSk7Ci0KLQlwSGVhZGVyXzgwMl8xMS0+RkMuRnJEcyA9IDA7Ci0JcEhlYWRlcl84MDJfMTEtPkZDLlR5cGUgPSBCVFlQRV9EQVRBOwotCXBIZWFkZXJfODAyXzExLT5GQy5TdWJUeXBlID0KLQkgICAgKChUWF9CTEtfVEVTVF9GTEFHKHBUeEJsaywgZlRYX2JXTU0pKSA/IFNVQlRZUEVfUURBVEEgOgotCSAgICAgU1VCVFlQRV9EQVRBKTsKLQotCWlmIChwVHhCbGstPnBNYWNFbnRyeSkgewotCQlpZiAoVFhfQkxLX1RFU1RfRkxBRyhwVHhCbGssIGZUWF9iRm9yY2VOb25Rb1MpKSB7Ci0JCQlwSGVhZGVyXzgwMl8xMS0+U2VxdWVuY2UgPQotCQkJICAgIHBUeEJsay0+cE1hY0VudHJ5LT5Ob25Rb3NEYXRhU2VxOwotCQkJcFR4QmxrLT5wTWFjRW50cnktPk5vblFvc0RhdGFTZXEgPQotCQkJICAgIChwVHhCbGstPnBNYWNFbnRyeS0+Tm9uUW9zRGF0YVNlcSArIDEpICYgTUFYU0VROwotCQl9IGVsc2UgewotCQkJewotCQkJCXBIZWFkZXJfODAyXzExLT5TZXF1ZW5jZSA9Ci0JCQkJICAgIHBUeEJsay0+cE1hY0VudHJ5LT5UeFNlcVtwVHhCbGstPgotCQkJCQkJCSAgICAgVXNlclByaW9yaXR5XTsKLQkJCQlwVHhCbGstPnBNYWNFbnRyeS0+VHhTZXFbcFR4QmxrLT5Vc2VyUHJpb3JpdHldID0KLQkJCQkgICAgKHBUeEJsay0+cE1hY0VudHJ5LT4KLQkJCQkgICAgIFR4U2VxW3BUeEJsay0+VXNlclByaW9yaXR5XSArIDEpICYgTUFYU0VROwotCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJcEhlYWRlcl84MDJfMTEtPlNlcXVlbmNlID0gcEFkLT5TZXF1ZW5jZTsKLQkJcEFkLT5TZXF1ZW5jZSA9IChwQWQtPlNlcXVlbmNlICsgMSkgJiBNQVhTRVE7CS8qIG5leHQgc2VxdWVuY2UgKi8KLQl9Ci0KLQlwSGVhZGVyXzgwMl8xMS0+RnJhZyA9IDA7Ci0KLQlwSGVhZGVyXzgwMl8xMS0+RkMuTW9yZURhdGEgPSBUWF9CTEtfVEVTVF9GTEFHKHBUeEJsaywgZlRYX2JNb3JlRGF0YSk7Ci0KLQl7Ci0JCWlmIChJTkZSQV9PTihwQWQpKSB7Ci0JCQl7Ci0JCQkJQ09QWV9NQUNfQUREUihwSGVhZGVyXzgwMl8xMS0+QWRkcjEsCi0JCQkJCSAgICAgIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKLQkJCQlDT1BZX01BQ19BRERSKHBIZWFkZXJfODAyXzExLT5BZGRyMiwKLQkJCQkJICAgICAgcEFkLT5DdXJyZW50QWRkcmVzcyk7Ci0JCQkJQ09QWV9NQUNfQUREUihwSGVhZGVyXzgwMl8xMS0+QWRkcjMsCi0JCQkJCSAgICAgIHBUeEJsay0+cFNyY0J1ZkhlYWRlcik7Ci0JCQkJcEhlYWRlcl84MDJfMTEtPkZDLlRvRHMgPSAxOwotCQkJfQotCQl9IGVsc2UgaWYgKEFESE9DX09OKHBBZCkpIHsKLQkJCUNPUFlfTUFDX0FERFIocEhlYWRlcl84MDJfMTEtPkFkZHIxLAotCQkJCSAgICAgIHBUeEJsay0+cFNyY0J1ZkhlYWRlcik7Ci0JCQlDT1BZX01BQ19BRERSKHBIZWFkZXJfODAyXzExLT5BZGRyMiwKLQkJCQkgICAgICBwQWQtPkN1cnJlbnRBZGRyZXNzKTsKLQkJCUNPUFlfTUFDX0FERFIocEhlYWRlcl84MDJfMTEtPkFkZHIzLAotCQkJCSAgICAgIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKLQkJCXBIZWFkZXJfODAyXzExLT5GQy5Ub0RzID0gMDsKLQkJfQotCX0KLQotCWlmIChwVHhCbGstPkNpcGhlckFsZyAhPSBDSVBIRVJfTk9ORSkKLQkJcEhlYWRlcl84MDJfMTEtPkZDLldlcCA9IDE7Ci0KLQkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCS8qIFNURVAgMi4gTUFLRSBBIENPTU1PTiA4MDIuMTEgSEVBREVSIFNIQVJFRCBCWSBFTlRJUkUgRlJBR01FTlQgQlVSU1QuIEZpbGwgc2VxdWVuY2UgbGF0ZXIuICovCi0JLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQlpZiAocEFkLT5Db21tb25DZmcuYkFQU0RGb3JjZVBvd2VyU2F2ZSkKLQkJcEhlYWRlcl84MDJfMTEtPkZDLlB3ck1nbXQgPSBQV1JfU0FWRTsKLQllbHNlCi0JCXBIZWFkZXJfODAyXzExLT5GQy5Qd3JNZ210ID0gKHBBZC0+U3RhQ2ZnLlBzbSA9PSBQV1JfU0FWRSk7Ci19Ci0KLXZvaWQgU1RBQnVpbGRDYWNoZTgwMl8xMUhlYWRlcihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgICAgc3RydWN0IHJ0X3R4X2JsayAqcFR4QmxrLCB1OCAqIHBIZWFkZXIpCi17Ci0Jc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcE1hY0VudHJ5OwotCXN0cnVjdCBydF9oZWFkZXJfODAyXzExICogcEhlYWRlcjgwMjExOwotCi0JcEhlYWRlcjgwMjExID0gKHN0cnVjdCBydF9oZWFkZXJfODAyXzExICopIHBIZWFkZXI7Ci0JcE1hY0VudHJ5ID0gcFR4QmxrLT5wTWFjRW50cnk7Ci0KLQkvKiAqLwotCS8qIFVwZGF0ZSB0aGUgY2FjaGVkIDgwMi4xMSBIRUFERVIgKi8KLQkvKiAqLwotCi0JLyogbm9ybWFsIHdsYW4gaGVhZGVyIHNpemUgOiAyNCBvY3RldHMgKi8KLQlwVHhCbGstPk1wZHVIZWFkZXJMZW4gPSBzaXplb2Yoc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEpOwotCi0JLyogTW9yZSBCaXQgKi8KLQlwSGVhZGVyODAyMTEtPkZDLk1vcmVEYXRhID0gVFhfQkxLX1RFU1RfRkxBRyhwVHhCbGssIGZUWF9iTW9yZURhdGEpOwotCi0JLyogU2VxdWVuY2UgKi8KLQlwSGVhZGVyODAyMTEtPlNlcXVlbmNlID0gcE1hY0VudHJ5LT5UeFNlcVtwVHhCbGstPlVzZXJQcmlvcml0eV07Ci0JcE1hY0VudHJ5LT5UeFNlcVtwVHhCbGstPlVzZXJQcmlvcml0eV0gPQotCSAgICAocE1hY0VudHJ5LT5UeFNlcVtwVHhCbGstPlVzZXJQcmlvcml0eV0gKyAxKSAmIE1BWFNFUTsKLQotCXsKLQkJLyogQ2hlY2sgaWYgdGhlIGZyYW1lIGNhbiBiZSBzZW50IHRocm91Z2ggRExTIGRpcmVjdCBsaW5rIGludGVyZmFjZSAqLwotCQkvKiBJZiBwYWNrZXQgY2FuIGJlIHNlbnQgdGhyb3VnaCBETFMsIHRoZW4gZm9yY2UgYWdncmVnYXRpb24gZGlzYWJsZS4gKEhhcmQgdG8gZGV0ZXJtaW5lIHBlZXIgU1RBJ3MgY2FwYWJpbGl0eSkgKi8KLQotCQkvKiBUaGUgYWRkcjMgb2Ygbm9ybWFsIHBhY2tldCBzZW5kIGZyb20gRFMgaXMgRGVzdCBNYWMgYWRkcmVzcy4gKi8KLQkJaWYgKEFESE9DX09OKHBBZCkpCi0JCQlDT1BZX01BQ19BRERSKHBIZWFkZXI4MDIxMS0+QWRkcjMsCi0JCQkJICAgICAgcEFkLT5Db21tb25DZmcuQnNzaWQpOwotCQllbHNlCi0JCQlDT1BZX01BQ19BRERSKHBIZWFkZXI4MDIxMS0+QWRkcjMsCi0JCQkJICAgICAgcFR4QmxrLT5wU3JjQnVmSGVhZGVyKTsKLQl9Ci0KLQkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCS8qIFNURVAgMi4gTUFLRSBBIENPTU1PTiA4MDIuMTEgSEVBREVSIFNIQVJFRCBCWSBFTlRJUkUgRlJBR01FTlQgQlVSU1QuIEZpbGwgc2VxdWVuY2UgbGF0ZXIuICovCi0JLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQlpZiAocEFkLT5Db21tb25DZmcuYkFQU0RGb3JjZVBvd2VyU2F2ZSkKLQkJcEhlYWRlcjgwMjExLT5GQy5Qd3JNZ210ID0gUFdSX1NBVkU7Ci0JZWxzZQotCQlwSGVhZGVyODAyMTEtPkZDLlB3ck1nbXQgPSAocEFkLT5TdGFDZmcuUHNtID09IFBXUl9TQVZFKTsKLX0KLQotc3RhdGljIGlubGluZSB1OCAqU1RBX0J1aWxkX0FSYWxpbmtfRnJhbWVfSGVhZGVyKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkJCSAgICBzdHJ1Y3QgcnRfdHhfYmxrICpwVHhCbGspCi17Ci0JdTggKnBIZWFkZXJCdWZQdHI7Ci0Jc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEgKnBIZWFkZXJfODAyXzExOwotCXZvaWQgKnBOZXh0UGFja2V0OwotCXUzMiBuZXh0QnVmTGVuOwotCXN0cnVjdCBydF9xdWV1ZV9lbnRyeSAqcFFFbnRyeTsKLQotCVNUQUZpbmRDaXBoZXJBbGdvcml0aG0ocEFkLCBwVHhCbGspOwotCVNUQUJ1aWxkQ29tbW9uODAyXzExSGVhZGVyKHBBZCwgcFR4QmxrKTsKLQotCXBIZWFkZXJCdWZQdHIgPSAmcFR4QmxrLT5IZWFkZXJCdWZbVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkVdOwotCXBIZWFkZXJfODAyXzExID0gKHN0cnVjdCBydF9oZWFkZXJfODAyXzExICopIHBIZWFkZXJCdWZQdHI7Ci0KLQkvKiBzdGVhbCAib3JkZXIiIGJpdCB0byBtYXJrICJhZ2dyZWdhdGlvbiIgKi8KLQlwSGVhZGVyXzgwMl8xMS0+RkMuT3JkZXIgPSAxOwotCi0JLyogc2tpcCBjb21tb24gaGVhZGVyICovCi0JcEhlYWRlckJ1ZlB0ciArPSBwVHhCbGstPk1wZHVIZWFkZXJMZW47Ci0KLQlpZiAoVFhfQkxLX1RFU1RfRkxBRyhwVHhCbGssIGZUWF9iV01NKSkgewotCQkvKiAqLwotCQkvKiBidWlsZCBRT1MgQ29udHJvbCBieXRlcyAqLwotCQkvKiAqLwotCQkqcEhlYWRlckJ1ZlB0ciA9IChwVHhCbGstPlVzZXJQcmlvcml0eSAmIDB4MEYpOwotCi0JCSoocEhlYWRlckJ1ZlB0ciArIDEpID0gMDsKLQkJcEhlYWRlckJ1ZlB0ciArPSAyOwotCQlwVHhCbGstPk1wZHVIZWFkZXJMZW4gKz0gMjsKLQl9Ci0JLyogcGFkZGluZyBhdCBmcm9udCBvZiBMTEMgaGVhZGVyLiBMTEMgaGVhZGVyIHNob3VsZCBhdCA0LWJ5dGVzIGFsaWdubWVudC4gKi8KLQlwVHhCbGstPkhkclBhZExlbiA9ICh1bnNpZ25lZCBsb25nKXBIZWFkZXJCdWZQdHI7Ci0JcEhlYWRlckJ1ZlB0ciA9ICh1OCAqKVJPVU5EX1VQKHBIZWFkZXJCdWZQdHIsIDQpOwotCXBUeEJsay0+SGRyUGFkTGVuID0gKHVuc2lnbmVkIGxvbmcpKHBIZWFkZXJCdWZQdHIgLSBwVHhCbGstPkhkclBhZExlbik7Ci0KLQkvKiBGb3IgUkEgQWdncmVnYXRpb24sICovCi0JLyogcHV0IHRoZSAybmQgTVNEVSBsZW5ndGgoZXh0cmEgMi1ieXRlIGZpZWxkKSBhZnRlciBzdHJ1Y3QgcnRfcW9zX2NvbnRyb2wgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgKi8KLQlwUUVudHJ5ID0gcFR4QmxrLT5UeFBhY2tldExpc3QuSGVhZDsKLQlwTmV4dFBhY2tldCA9IFFVRVVFX0VOVFJZX1RPX1BBQ0tFVChwUUVudHJ5KTsKLQluZXh0QnVmTGVuID0gR0VUX09TX1BLVF9MRU4ocE5leHRQYWNrZXQpOwotCWlmIChSVE1QX0dFVF9QQUNLRVRfVkxBTihwTmV4dFBhY2tldCkpCi0JCW5leHRCdWZMZW4gLT0gTEVOR1RIXzgwMl8xUTsKLQotCSpwSGVhZGVyQnVmUHRyID0gKHU4KW5leHRCdWZMZW4gJiAweGZmOwotCSoocEhlYWRlckJ1ZlB0ciArIDEpID0gKHU4KShuZXh0QnVmTGVuID4+IDgpOwotCi0JcEhlYWRlckJ1ZlB0ciArPSAyOwotCXBUeEJsay0+TXBkdUhlYWRlckxlbiArPSAyOwotCi0JcmV0dXJuIHBIZWFkZXJCdWZQdHI7Ci0KLX0KLQotc3RhdGljIGlubGluZSB1OCAqU1RBX0J1aWxkX0FNU0RVX0ZyYW1lX0hlYWRlcihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJCQkgIHN0cnVjdCBydF90eF9ibGsgKnBUeEJsaykKLXsKLQl1OCAqcEhlYWRlckJ1ZlB0cjsJLyosIHBTYXZlQnVmUHRyOyAqLwotCXN0cnVjdCBydF9oZWFkZXJfODAyXzExICpwSGVhZGVyXzgwMl8xMTsKLQotCVNUQUZpbmRDaXBoZXJBbGdvcml0aG0ocEFkLCBwVHhCbGspOwotCVNUQUJ1aWxkQ29tbW9uODAyXzExSGVhZGVyKHBBZCwgcFR4QmxrKTsKLQotCXBIZWFkZXJCdWZQdHIgPSAmcFR4QmxrLT5IZWFkZXJCdWZbVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkVdOwotCXBIZWFkZXJfODAyXzExID0gKHN0cnVjdCBydF9oZWFkZXJfODAyXzExICopIHBIZWFkZXJCdWZQdHI7Ci0KLQkvKiBza2lwIGNvbW1vbiBoZWFkZXIgKi8KLQlwSGVhZGVyQnVmUHRyICs9IHBUeEJsay0+TXBkdUhlYWRlckxlbjsKLQotCS8qICovCi0JLyogYnVpbGQgUU9TIENvbnRyb2wgYnl0ZXMgKi8KLQkvKiAqLwotCSpwSGVhZGVyQnVmUHRyID0gKHBUeEJsay0+VXNlclByaW9yaXR5ICYgMHgwRik7Ci0KLQkvKiAqLwotCS8qIEEtTVNEVSBwYWNrZXQgKi8KLQkvKiAqLwotCSpwSGVhZGVyQnVmUHRyIHw9IDB4ODA7Ci0KLQkqKHBIZWFkZXJCdWZQdHIgKyAxKSA9IDA7Ci0JcEhlYWRlckJ1ZlB0ciArPSAyOwotCXBUeEJsay0+TXBkdUhlYWRlckxlbiArPSAyOwotCi0JLypwU2F2ZUJ1ZlB0ciA9IHBIZWFkZXJCdWZQdHI7ICovCi0KLQkvKiAqLwotCS8qIHBhZGRpbmcgYXQgZnJvbnQgb2YgTExDIGhlYWRlciAqLwotCS8qIExMQyBoZWFkZXIgc2hvdWxkIGxvY2F0ZSBhdCA0LW9jdGV0cyBhbGlnbWVudCAqLwotCS8qICovCi0JLyogQEBAIE1wZHVIZWFkZXJMZW4gZXhjbHVkaW5nIHBhZGRpbmcgQEBAICovCi0JLyogKi8KLQlwVHhCbGstPkhkclBhZExlbiA9ICh1bnNpZ25lZCBsb25nKXBIZWFkZXJCdWZQdHI7Ci0JcEhlYWRlckJ1ZlB0ciA9ICh1OCAqKVJPVU5EX1VQKHBIZWFkZXJCdWZQdHIsIDQpOwotCXBUeEJsay0+SGRyUGFkTGVuID0gKHVuc2lnbmVkIGxvbmcpKHBIZWFkZXJCdWZQdHIgLSBwVHhCbGstPkhkclBhZExlbik7Ci0KLQlyZXR1cm4gcEhlYWRlckJ1ZlB0cjsKLQotfQotCi12b2lkIFNUQV9BTVBEVV9GcmFtZV9UeChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF90eF9ibGsgKnBUeEJsaykKLXsKLQlzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSAqcEhlYWRlcl84MDJfMTE7Ci0JdTggKnBIZWFkZXJCdWZQdHI7Ci0JdTE2IEZyZWVOdW1iZXI7Ci0Jc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcE1hY0VudHJ5OwotCUJPT0xFQU4gYlZMQU5Qa3Q7Ci0Jc3RydWN0IHJ0X3F1ZXVlX2VudHJ5ICpwUUVudHJ5OwotCi0JQVNTRVJUKHBUeEJsayk7Ci0KLQl3aGlsZSAocFR4QmxrLT5UeFBhY2tldExpc3QuSGVhZCkgewotCQlwUUVudHJ5ID0gUmVtb3ZlSGVhZFF1ZXVlKCZwVHhCbGstPlR4UGFja2V0TGlzdCk7Ci0JCXBUeEJsay0+cFBhY2tldCA9IFFVRVVFX0VOVFJZX1RPX1BBQ0tFVChwUUVudHJ5KTsKLQkJaWYgKFJUTVBfRmlsbFR4QmxrSW5mbyhwQWQsIHBUeEJsaykgIT0gVFJVRSkgewotCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBUeEJsay0+cFBhY2tldCwKLQkJCQkJICAgIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQliVkxBTlBrdCA9Ci0JCSAgICAoUlRNUF9HRVRfUEFDS0VUX1ZMQU4ocFR4QmxrLT5wUGFja2V0KSA/IFRSVUUgOiBGQUxTRSk7Ci0KLQkJcE1hY0VudHJ5ID0gcFR4QmxrLT5wTWFjRW50cnk7Ci0JCWlmIChwTWFjRW50cnktPmlzQ2FjaGVkKSB7Ci0JCQkvKiBOT1RFOiBQbGVhc2UgbWFrZSBzdXJlIHRoZSBzaXplIG9mIHBNYWNFbnRyeS0+Q2FjaGVkQnVmW10gaXMgc21hbGxlciB0aGFuIHBUeEJsay0+SGVhZGVyQnVmW10hICovCi0JCQlOZGlzTW92ZU1lbW9yeSgodTggKikmIHBUeEJsay0+Ci0JCQkJICAgICAgIEhlYWRlckJ1ZltUWElORk9fU0laRV0sCi0JCQkJICAgICAgICh1OCAqKSYgcE1hY0VudHJ5LT5DYWNoZWRCdWZbMF0sCi0JCQkJICAgICAgIFRYV0lfU0laRSArIHNpemVvZihzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSkpOwotCQkJcEhlYWRlckJ1ZlB0ciA9Ci0JCQkgICAgKHU4ICopKCZwVHhCbGstPgotCQkJCSAgICAgIEhlYWRlckJ1ZltUWElORk9fU0laRSArIFRYV0lfU0laRV0pOwotCQkJU1RBQnVpbGRDYWNoZTgwMl8xMUhlYWRlcihwQWQsIHBUeEJsaywgcEhlYWRlckJ1ZlB0cik7Ci0JCX0gZWxzZSB7Ci0JCQlTVEFGaW5kQ2lwaGVyQWxnb3JpdGhtKHBBZCwgcFR4QmxrKTsKLQkJCVNUQUJ1aWxkQ29tbW9uODAyXzExSGVhZGVyKHBBZCwgcFR4QmxrKTsKLQotCQkJcEhlYWRlckJ1ZlB0ciA9Ci0JCQkgICAgJnBUeEJsay0+SGVhZGVyQnVmW1RYSU5GT19TSVpFICsgVFhXSV9TSVpFXTsKLQkJfQotCi0JCXBIZWFkZXJfODAyXzExID0gKHN0cnVjdCBydF9oZWFkZXJfODAyXzExICopIHBIZWFkZXJCdWZQdHI7Ci0KLQkJLyogc2tpcCBjb21tb24gaGVhZGVyICovCi0JCXBIZWFkZXJCdWZQdHIgKz0gcFR4QmxrLT5NcGR1SGVhZGVyTGVuOwotCi0JCS8qICovCi0JCS8qIGJ1aWxkIFFPUyBDb250cm9sIGJ5dGVzICovCi0JCS8qICovCi0JCSpwSGVhZGVyQnVmUHRyID0gKHBUeEJsay0+VXNlclByaW9yaXR5ICYgMHgwRik7Ci0JCSoocEhlYWRlckJ1ZlB0ciArIDEpID0gMDsKLQkJcEhlYWRlckJ1ZlB0ciArPSAyOwotCQlwVHhCbGstPk1wZHVIZWFkZXJMZW4gKz0gMjsKLQotCQkvKiAqLwotCQkvKiBidWlsZCBIVEMrICovCi0JCS8qIEhUQyBjb250cm9sIGZpbGVkIGZvbGxvd2luZyBRb1MgZmllbGQgKi8KLQkJLyogKi8KLQkJaWYgKChwQWQtPkNvbW1vbkNmZy5iUmRnID09IFRSVUUpCi0JCSAgICAmJiBDTElFTlRfU1RBVFVTX1RFU1RfRkxBRyhwVHhCbGstPnBNYWNFbnRyeSwKLQkJCQkJICAgICAgIGZDTElFTlRfU1RBVFVTX1JER19DQVBBQkxFKSkgewotCQkJaWYgKHBNYWNFbnRyeS0+aXNDYWNoZWQgPT0gRkFMU0UpIHsKLQkJCQkvKiBtYXJrIEhUQyBiaXQgKi8KLQkJCQlwSGVhZGVyXzgwMl8xMS0+RkMuT3JkZXIgPSAxOwotCi0JCQkJTmRpc1plcm9NZW1vcnkocEhlYWRlckJ1ZlB0ciwgNCk7Ci0JCQkJKihwSGVhZGVyQnVmUHRyICsgMykgfD0gMHg4MDsKLQkJCX0KLQkJCXBIZWFkZXJCdWZQdHIgKz0gNDsKLQkJCXBUeEJsay0+TXBkdUhlYWRlckxlbiArPSA0OwotCQl9Ci0JCS8qcFR4QmxrLT5NcGR1SGVhZGVyTGVuID0gcEhlYWRlckJ1ZlB0ciAtIHBUeEJsay0+SGVhZGVyQnVmIC0gVFhXSV9TSVpFIC0gVFhJTkZPX1NJWkU7ICovCi0JCUFTU0VSVChwVHhCbGstPk1wZHVIZWFkZXJMZW4gPj0gMjQpOwotCi0JCS8qIHNraXAgODAyLjMgaGVhZGVyICovCi0JCXBUeEJsay0+cFNyY0J1ZkRhdGEgPSBwVHhCbGstPnBTcmNCdWZIZWFkZXIgKyBMRU5HVEhfODAyXzM7Ci0JCXBUeEJsay0+U3JjQnVmTGVuIC09IExFTkdUSF84MDJfMzsKLQotCQkvKiBza2lwIHZsYW4gdGFnICovCi0JCWlmIChiVkxBTlBrdCkgewotCQkJcFR4QmxrLT5wU3JjQnVmRGF0YSArPSBMRU5HVEhfODAyXzFROwotCQkJcFR4QmxrLT5TcmNCdWZMZW4gLT0gTEVOR1RIXzgwMl8xUTsKLQkJfQotCQkvKiAqLwotCQkvKiBwYWRkaW5nIGF0IGZyb250IG9mIExMQyBoZWFkZXIgKi8KLQkJLyogTExDIGhlYWRlciBzaG91bGQgbG9jYXRlIGF0IDQtb2N0ZXRzIGFsaWdtZW50ICovCi0JCS8qICovCi0JCS8qIEBAQCBNcGR1SGVhZGVyTGVuIGV4Y2x1ZGluZyBwYWRkaW5nIEBAQCAqLwotCQkvKiAqLwotCQlwVHhCbGstPkhkclBhZExlbiA9ICh1bnNpZ25lZCBsb25nKXBIZWFkZXJCdWZQdHI7Ci0JCXBIZWFkZXJCdWZQdHIgPSAodTggKilST1VORF9VUChwSGVhZGVyQnVmUHRyLCA0KTsKLQkJcFR4QmxrLT5IZHJQYWRMZW4gPSAodW5zaWduZWQgbG9uZykocEhlYWRlckJ1ZlB0ciAtIHBUeEJsay0+SGRyUGFkTGVuKTsKLQotCQl7Ci0KLQkJCS8qICovCi0JCQkvKiBJbnNlcnQgTExDLVNOQVAgZW5jYXBzdWxhdGlvbiAtIDggb2N0ZXRzICovCi0JCQkvKiAqLwotCQkJRVhUUkFfTExDU05BUF9FTkNBUF9GUk9NX1BLVF9PRkZTRVQocFR4QmxrLT4KLQkJCQkJCQkgICAgcFNyY0J1ZkRhdGEgLSAyLAotCQkJCQkJCSAgICBwVHhCbGstPgotCQkJCQkJCSAgICBwRXh0cmFMbGNTbmFwRW5jYXApOwotCQkJaWYgKHBUeEJsay0+cEV4dHJhTGxjU25hcEVuY2FwKSB7Ci0JCQkJTmRpc01vdmVNZW1vcnkocEhlYWRlckJ1ZlB0ciwKLQkJCQkJICAgICAgIHBUeEJsay0+cEV4dHJhTGxjU25hcEVuY2FwLCA2KTsKLQkJCQlwSGVhZGVyQnVmUHRyICs9IDY7Ci0JCQkJLyogZ2V0IDIgb2N0ZXRzIChUeXBlb2ZMZW4pICovCi0JCQkJTmRpc01vdmVNZW1vcnkocEhlYWRlckJ1ZlB0ciwKLQkJCQkJICAgICAgIHBUeEJsay0+cFNyY0J1ZkRhdGEgLSAyLCAyKTsKLQkJCQlwSGVhZGVyQnVmUHRyICs9IDI7Ci0JCQkJcFR4QmxrLT5NcGR1SGVhZGVyTGVuICs9IExFTkdUSF84MDJfMV9IOwotCQkJfQotCi0JCX0KLQotCQlpZiAocE1hY0VudHJ5LT5pc0NhY2hlZCkgewotCQkJUlRNUFdyaXRlVHhXSV9DYWNoZShwQWQsCi0JCQkJCSAgICAoc3RydWN0IHJ0X3R4d2kgKikgKCZwVHhCbGstPgotCQkJCQkJCSAgIEhlYWRlckJ1ZgotCQkJCQkJCSAgIFtUWElORk9fU0laRV0pLAotCQkJCQkgICAgcFR4QmxrKTsKLQkJfSBlbHNlIHsKLQkJCVJUTVBXcml0ZVR4V0lfRGF0YShwQWQsCi0JCQkJCSAgIChzdHJ1Y3QgcnRfdHh3aSAqKSAoJnBUeEJsay0+Ci0JCQkJCQkJICBIZWFkZXJCdWYKLQkJCQkJCQkgIFtUWElORk9fU0laRV0pLAotCQkJCQkgICBwVHhCbGspOwotCi0JCQlOZGlzWmVyb01lbW9yeSgodTggKikoJnBNYWNFbnRyeS0+Q2FjaGVkQnVmWzBdKSwKLQkJCQkgICAgICAgc2l6ZW9mKHBNYWNFbnRyeS0+Q2FjaGVkQnVmKSk7Ci0JCQlOZGlzTW92ZU1lbW9yeSgodTggKikoJnBNYWNFbnRyeS0+Q2FjaGVkQnVmWzBdKSwKLQkJCQkgICAgICAgKHU4ICopKCZwVHhCbGstPgotCQkJCQkJIEhlYWRlckJ1ZltUWElORk9fU0laRV0pLAotCQkJCSAgICAgICAocEhlYWRlckJ1ZlB0ciAtCi0JCQkJCSh1OCAqKSgmcFR4QmxrLT4KLQkJCQkJCSAgSGVhZGVyQnVmW1RYSU5GT19TSVpFXSkpKTsKLQkJCXBNYWNFbnRyeS0+aXNDYWNoZWQgPSBUUlVFOwotCQl9Ci0KLQkJLyogY2FsY3VsYXRlIFRyYW5zbWl0dGVkIEFNUERVIGNvdW50IGFuZCBCeXRlQ291bnQgKi8KLQkJewotCQkJcEFkLT5SYWxpbmtDb3VudGVycy5UcmFuc21pdHRlZE1QRFVzSW5BTVBEVUNvdW50LnUuCi0JCQkgICAgTG93UGFydCsrOwotCQkJcEFkLT5SYWxpbmtDb3VudGVycy5UcmFuc21pdHRlZE9jdGV0c0luQU1QRFVDb3VudC4KLQkJCSAgICBRdWFkUGFydCArPSBwVHhCbGstPlNyY0J1ZkxlbjsKLQkJfQotCi0JCS8qRnJlZU51bWJlciA9IEdFVF9UWFJJTkdfRlJFRU5PKHBBZCwgUXVlSWR4KTsgKi8KLQotCQlIQUxfV3JpdGVUeFJlc291cmNlKHBBZCwgcFR4QmxrLCBUUlVFLCAmRnJlZU51bWJlcik7Ci0KLQkJLyogKi8KLQkJLyogS2ljayBvdXQgVHggKi8KLQkJLyogKi8KLQkJaWYgKCFSVE1QX1RFU1RfUFNGTEFHKHBBZCwgZlJUTVBfUFNfRElTQUJMRV9UWCkpCi0JCQlIQUxfS2lja091dFR4KHBBZCwgcFR4QmxrLCBwVHhCbGstPlF1ZUlkeCk7Ci0KLQkJcEFkLT5SYWxpbmtDb3VudGVycy5LaWNrVHhDb3VudCsrOwotCQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4RG9uZUNvdW50Kys7Ci0JfQotCi19Ci0KLXZvaWQgU1RBX0FNU0RVX0ZyYW1lX1R4KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X3R4X2JsayAqcFR4QmxrKQotewotCXU4ICpwSGVhZGVyQnVmUHRyOwotCXUxNiBGcmVlTnVtYmVyOwotCXUxNiBzdWJGcmFtZVBheWxvYWRMZW4gPSAwOwkvKiBBTVNEVSBTdWJmcmFtZSBsZW5ndGggd2l0aG91dCBBTVNEVS1IZWFkZXIgLyBQYWRkaW5nLiAqLwotCXUxNiB0b3RhbE1QRFVTaXplID0gMDsKLQl1OCAqc3ViRnJhbWVIZWFkZXI7Ci0JdTggcGFkZGluZyA9IDA7Ci0JdTE2IEZpcnN0VHggPSAwLCBMYXN0VHhJZHggPSAwOwotCUJPT0xFQU4gYlZMQU5Qa3Q7Ci0JaW50IGZyYW1lTnVtID0gMDsKLQlzdHJ1Y3QgcnRfcXVldWVfZW50cnkgKnBRRW50cnk7Ci0KLQlBU1NFUlQocFR4QmxrKTsKLQotCUFTU0VSVCgocFR4QmxrLT5UeFBhY2tldExpc3QuTnVtYmVyID4gMSkpOwotCi0Jd2hpbGUgKHBUeEJsay0+VHhQYWNrZXRMaXN0LkhlYWQpIHsKLQkJcFFFbnRyeSA9IFJlbW92ZUhlYWRRdWV1ZSgmcFR4QmxrLT5UeFBhY2tldExpc3QpOwotCQlwVHhCbGstPnBQYWNrZXQgPSBRVUVVRV9FTlRSWV9UT19QQUNLRVQocFFFbnRyeSk7Ci0JCWlmIChSVE1QX0ZpbGxUeEJsa0luZm8ocEFkLCBwVHhCbGspICE9IFRSVUUpIHsKLQkJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwVHhCbGstPnBQYWNrZXQsCi0JCQkJCSAgICBORElTX1NUQVRVU19GQUlMVVJFKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJYlZMQU5Qa3QgPQotCQkgICAgKFJUTVBfR0VUX1BBQ0tFVF9WTEFOKHBUeEJsay0+cFBhY2tldCkgPyBUUlVFIDogRkFMU0UpOwotCi0JCS8qIHNraXAgODAyLjMgaGVhZGVyICovCi0JCXBUeEJsay0+cFNyY0J1ZkRhdGEgPSBwVHhCbGstPnBTcmNCdWZIZWFkZXIgKyBMRU5HVEhfODAyXzM7Ci0JCXBUeEJsay0+U3JjQnVmTGVuIC09IExFTkdUSF84MDJfMzsKLQotCQkvKiBza2lwIHZsYW4gdGFnICovCi0JCWlmIChiVkxBTlBrdCkgewotCQkJcFR4QmxrLT5wU3JjQnVmRGF0YSArPSBMRU5HVEhfODAyXzFROwotCQkJcFR4QmxrLT5TcmNCdWZMZW4gLT0gTEVOR1RIXzgwMl8xUTsKLQkJfQotCi0JCWlmIChmcmFtZU51bSA9PSAwKSB7Ci0JCQlwSGVhZGVyQnVmUHRyID0KLQkJCSAgICBTVEFfQnVpbGRfQU1TRFVfRnJhbWVfSGVhZGVyKHBBZCwgcFR4QmxrKTsKLQotCQkJLyogTk9URTogVHhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50IHdpbGwgYmUgdXBkYXRlZCBhZnRlciBmaW5hbCBmcmFtZSB3YXMgaGFuZGxlZC4gKi8KLQkJCVJUTVBXcml0ZVR4V0lfRGF0YShwQWQsCi0JCQkJCSAgIChzdHJ1Y3QgcnRfdHh3aSAqKSAoJnBUeEJsay0+Ci0JCQkJCQkJICBIZWFkZXJCdWYKLQkJCQkJCQkgIFtUWElORk9fU0laRV0pLAotCQkJCQkgICBwVHhCbGspOwotCQl9IGVsc2UgewotCQkJcEhlYWRlckJ1ZlB0ciA9ICZwVHhCbGstPkhlYWRlckJ1ZlswXTsKLQkJCXBhZGRpbmcgPQotCQkJICAgIFJPVU5EX1VQKExFTkdUSF9BTVNEVV9TVUJGUkFNRUhFQUQgKwotCQkJCSAgICAgc3ViRnJhbWVQYXlsb2FkTGVuLAotCQkJCSAgICAgNCkgLSAoTEVOR1RIX0FNU0RVX1NVQkZSQU1FSEVBRCArCi0JCQkJCSAgIHN1YkZyYW1lUGF5bG9hZExlbik7Ci0JCQlOZGlzWmVyb01lbW9yeShwSGVhZGVyQnVmUHRyLAotCQkJCSAgICAgICBwYWRkaW5nICsgTEVOR1RIX0FNU0RVX1NVQkZSQU1FSEVBRCk7Ci0JCQlwSGVhZGVyQnVmUHRyICs9IHBhZGRpbmc7Ci0JCQlwVHhCbGstPk1wZHVIZWFkZXJMZW4gPSBwYWRkaW5nOwotCQl9Ci0KLQkJLyogKi8KLQkJLyogQS1NU0RVIHN1YmZyYW1lICovCi0JCS8qICAgREEoNikrU0EoNikrTGVuZ3RoKDIpICsgTExDL1NOQVAgRW5jYXAgKi8KLQkJLyogKi8KLQkJc3ViRnJhbWVIZWFkZXIgPSBwSGVhZGVyQnVmUHRyOwotCQlzdWJGcmFtZVBheWxvYWRMZW4gPSBwVHhCbGstPlNyY0J1ZkxlbjsKLQotCQlOZGlzTW92ZU1lbW9yeShzdWJGcmFtZUhlYWRlciwgcFR4QmxrLT5wU3JjQnVmSGVhZGVyLCAxMik7Ci0KLQkJcEhlYWRlckJ1ZlB0ciArPSBMRU5HVEhfQU1TRFVfU1VCRlJBTUVIRUFEOwotCQlwVHhCbGstPk1wZHVIZWFkZXJMZW4gKz0gTEVOR1RIX0FNU0RVX1NVQkZSQU1FSEVBRDsKLQotCQkvKiAqLwotCQkvKiBJbnNlcnQgTExDLVNOQVAgZW5jYXBzdWxhdGlvbiAtIDggb2N0ZXRzICovCi0JCS8qICovCi0JCUVYVFJBX0xMQ1NOQVBfRU5DQVBfRlJPTV9QS1RfT0ZGU0VUKHBUeEJsay0+cFNyY0J1ZkRhdGEgLSAyLAotCQkJCQkJICAgIHBUeEJsay0+cEV4dHJhTGxjU25hcEVuY2FwKTsKLQotCQlzdWJGcmFtZVBheWxvYWRMZW4gPSBwVHhCbGstPlNyY0J1ZkxlbjsKLQotCQlpZiAocFR4QmxrLT5wRXh0cmFMbGNTbmFwRW5jYXApIHsKLQkJCU5kaXNNb3ZlTWVtb3J5KHBIZWFkZXJCdWZQdHIsCi0JCQkJICAgICAgIHBUeEJsay0+cEV4dHJhTGxjU25hcEVuY2FwLCA2KTsKLQkJCXBIZWFkZXJCdWZQdHIgKz0gNjsKLQkJCS8qIGdldCAyIG9jdGV0cyAoVHlwZW9mTGVuKSAqLwotCQkJTmRpc01vdmVNZW1vcnkocEhlYWRlckJ1ZlB0ciwgcFR4QmxrLT5wU3JjQnVmRGF0YSAtIDIsCi0JCQkJICAgICAgIDIpOwotCQkJcEhlYWRlckJ1ZlB0ciArPSAyOwotCQkJcFR4QmxrLT5NcGR1SGVhZGVyTGVuICs9IExFTkdUSF84MDJfMV9IOwotCQkJc3ViRnJhbWVQYXlsb2FkTGVuICs9IExFTkdUSF84MDJfMV9IOwotCQl9Ci0JCS8qIHVwZGF0ZSBzdWJGcmFtZSBMZW5ndGggZmllbGQgKi8KLQkJc3ViRnJhbWVIZWFkZXJbMTJdID0gKHN1YkZyYW1lUGF5bG9hZExlbiAmIDB4RkYwMCkgPj4gODsKLQkJc3ViRnJhbWVIZWFkZXJbMTNdID0gc3ViRnJhbWVQYXlsb2FkTGVuICYgMHhGRjsKLQotCQl0b3RhbE1QRFVTaXplICs9IHBUeEJsay0+TXBkdUhlYWRlckxlbiArIHBUeEJsay0+U3JjQnVmTGVuOwotCi0JCWlmIChmcmFtZU51bSA9PSAwKQotCQkJRmlyc3RUeCA9Ci0JCQkgICAgSEFMX1dyaXRlTXVsdGlUeFJlc291cmNlKHBBZCwgcFR4QmxrLCBmcmFtZU51bSwKLQkJCQkJCSAgICAgJkZyZWVOdW1iZXIpOwotCQllbHNlCi0JCQlMYXN0VHhJZHggPQotCQkJICAgIEhBTF9Xcml0ZU11bHRpVHhSZXNvdXJjZShwQWQsIHBUeEJsaywgZnJhbWVOdW0sCi0JCQkJCQkgICAgICZGcmVlTnVtYmVyKTsKLQotCQlmcmFtZU51bSsrOwotCi0JCXBBZC0+UmFsaW5rQ291bnRlcnMuS2lja1R4Q291bnQrKzsKLQkJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeERvbmVDb3VudCsrOwotCi0JCS8qIGNhbGN1bGF0ZSBUcmFuc21pdHRlZCBBTVNEVSBDb3VudCBhbmQgQnl0ZUNvdW50ICovCi0JCXsKLQkJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHJhbnNtaXR0ZWRBTVNEVUNvdW50LnUuTG93UGFydCsrOwotCQkJcEFkLT5SYWxpbmtDb3VudGVycy5UcmFuc21pdHRlZE9jdGV0c0luQU1TRFUuUXVhZFBhcnQgKz0KLQkJCSAgICB0b3RhbE1QRFVTaXplOwotCQl9Ci0KLQl9Ci0KLQlIQUxfRmluYWxXcml0ZVR4UmVzb3VyY2UocEFkLCBwVHhCbGssIHRvdGFsTVBEVVNpemUsIEZpcnN0VHgpOwotCUhBTF9MYXN0VHhJZHgocEFkLCBwVHhCbGstPlF1ZUlkeCwgTGFzdFR4SWR4KTsKLQotCS8qICovCi0JLyogS2ljayBvdXQgVHggKi8KLQkvKiAqLwotCWlmICghUlRNUF9URVNUX1BTRkxBRyhwQWQsIGZSVE1QX1BTX0RJU0FCTEVfVFgpKQotCQlIQUxfS2lja091dFR4KHBBZCwgcFR4QmxrLCBwVHhCbGstPlF1ZUlkeCk7Ci19Ci0KLXZvaWQgU1RBX0xlZ2FjeV9GcmFtZV9UeChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF90eF9ibGsgKnBUeEJsaykKLXsKLQlzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSAqcEhlYWRlcl84MDJfMTE7Ci0JdTggKnBIZWFkZXJCdWZQdHI7Ci0JdTE2IEZyZWVOdW1iZXI7Ci0JQk9PTEVBTiBiVkxBTlBrdDsKLQlzdHJ1Y3QgcnRfcXVldWVfZW50cnkgKnBRRW50cnk7Ci0KLQlBU1NFUlQocFR4QmxrKTsKLQotCXBRRW50cnkgPSBSZW1vdmVIZWFkUXVldWUoJnBUeEJsay0+VHhQYWNrZXRMaXN0KTsKLQlwVHhCbGstPnBQYWNrZXQgPSBRVUVVRV9FTlRSWV9UT19QQUNLRVQocFFFbnRyeSk7Ci0JaWYgKFJUTVBfRmlsbFR4QmxrSW5mbyhwQWQsIHBUeEJsaykgIT0gVFJVRSkgewotCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFR4QmxrLT5wUGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChwVHhCbGstPlR4RnJhbWVUeXBlID09IFRYX01DQVNUX0ZSQU1FKSB7Ci0JCUlOQ19DT1VOVEVSNjQocEFkLT5XbGFuQ291bnRlcnMuTXVsdGljYXN0VHJhbnNtaXR0ZWRGcmFtZUNvdW50KTsKLQl9Ci0KLQlpZiAoUlRNUF9HRVRfUEFDS0VUX1JUUyhwVHhCbGstPnBQYWNrZXQpKQotCQlUWF9CTEtfU0VUX0ZMQUcocFR4QmxrLCBmVFhfYlJ0c1JlcXVpcmVkKTsKLQllbHNlCi0JCVRYX0JMS19DTEVBUl9GTEFHKHBUeEJsaywgZlRYX2JSdHNSZXF1aXJlZCk7Ci0KLQliVkxBTlBrdCA9IChSVE1QX0dFVF9QQUNLRVRfVkxBTihwVHhCbGstPnBQYWNrZXQpID8gVFJVRSA6IEZBTFNFKTsKLQotCWlmIChwVHhCbGstPlR4UmF0ZSA8IHBBZC0+Q29tbW9uQ2ZnLk1pblR4UmF0ZSkKLQkJcFR4QmxrLT5UeFJhdGUgPSBwQWQtPkNvbW1vbkNmZy5NaW5UeFJhdGU7Ci0KLQlTVEFGaW5kQ2lwaGVyQWxnb3JpdGhtKHBBZCwgcFR4QmxrKTsKLQlTVEFCdWlsZENvbW1vbjgwMl8xMUhlYWRlcihwQWQsIHBUeEJsayk7Ci0KLQkvKiBza2lwIDgwMi4zIGhlYWRlciAqLwotCXBUeEJsay0+cFNyY0J1ZkRhdGEgPSBwVHhCbGstPnBTcmNCdWZIZWFkZXIgKyBMRU5HVEhfODAyXzM7Ci0JcFR4QmxrLT5TcmNCdWZMZW4gLT0gTEVOR1RIXzgwMl8zOwotCi0JLyogc2tpcCB2bGFuIHRhZyAqLwotCWlmIChiVkxBTlBrdCkgewotCQlwVHhCbGstPnBTcmNCdWZEYXRhICs9IExFTkdUSF84MDJfMVE7Ci0JCXBUeEJsay0+U3JjQnVmTGVuIC09IExFTkdUSF84MDJfMVE7Ci0JfQotCi0JcEhlYWRlckJ1ZlB0ciA9ICZwVHhCbGstPkhlYWRlckJ1ZltUWElORk9fU0laRSArIFRYV0lfU0laRV07Ci0JcEhlYWRlcl84MDJfMTEgPSAoc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEgKikgcEhlYWRlckJ1ZlB0cjsKLQotCS8qIHNraXAgY29tbW9uIGhlYWRlciAqLwotCXBIZWFkZXJCdWZQdHIgKz0gcFR4QmxrLT5NcGR1SGVhZGVyTGVuOwotCi0JaWYgKFRYX0JMS19URVNUX0ZMQUcocFR4QmxrLCBmVFhfYldNTSkpIHsKLQkJLyogKi8KLQkJLyogYnVpbGQgUU9TIENvbnRyb2wgYnl0ZXMgKi8KLQkJLyogKi8KLQkJKihwSGVhZGVyQnVmUHRyKSA9Ci0JCSAgICAoKHBUeEJsay0+VXNlclByaW9yaXR5ICYgMHgwRikgfCAocEFkLT5Db21tb25DZmcuCi0JCQkJCQkgICAgICBBY2tQb2xpY3lbcFR4QmxrLT4KLQkJCQkJCQkJUXVlSWR4XSA8PCA1KSk7Ci0JCSoocEhlYWRlckJ1ZlB0ciArIDEpID0gMDsKLQkJcEhlYWRlckJ1ZlB0ciArPSAyOwotCQlwVHhCbGstPk1wZHVIZWFkZXJMZW4gKz0gMjsKLQl9Ci0JLyogVGhlIHJlbWFpbmluZyBjb250ZW50IG9mIE1QRFUgaGVhZGVyIHNob3VsZCBsb2NhdGUgYXQgNC1vY3RldHMgYWxpZ25tZW50ICovCi0JcFR4QmxrLT5IZHJQYWRMZW4gPSAodW5zaWduZWQgbG9uZylwSGVhZGVyQnVmUHRyOwotCXBIZWFkZXJCdWZQdHIgPSAodTggKilST1VORF9VUChwSGVhZGVyQnVmUHRyLCA0KTsKLQlwVHhCbGstPkhkclBhZExlbiA9ICh1bnNpZ25lZCBsb25nKShwSGVhZGVyQnVmUHRyIC0gcFR4QmxrLT5IZHJQYWRMZW4pOwotCi0JewotCi0JCS8qICovCi0JCS8qIEluc2VydCBMTEMtU05BUCBlbmNhcHN1bGF0aW9uIC0gOCBvY3RldHMgKi8KLQkJLyogKi8KLQkJLyogKi8KLQkJLyogaWYgb3JpZ2luYWwgRXRoZXJuZXQgZnJhbWUgY29udGFpbnMgbm8gTExDL1NOQVAsICovCi0JCS8qIHRoZW4gYW4gZXh0cmEgTExDL1NOQVAgZW5jYXAgaXMgcmVxdWlyZWQgKi8KLQkJLyogKi8KLQkJRVhUUkFfTExDU05BUF9FTkNBUF9GUk9NX1BLVF9TVEFSVChwVHhCbGstPnBTcmNCdWZIZWFkZXIsCi0JCQkJCQkgICBwVHhCbGstPnBFeHRyYUxsY1NuYXBFbmNhcCk7Ci0JCWlmIChwVHhCbGstPnBFeHRyYUxsY1NuYXBFbmNhcCkgewotCQkJdTggdmxhbl9zaXplOwotCi0JCQlOZGlzTW92ZU1lbW9yeShwSGVhZGVyQnVmUHRyLAotCQkJCSAgICAgICBwVHhCbGstPnBFeHRyYUxsY1NuYXBFbmNhcCwgNik7Ci0JCQlwSGVhZGVyQnVmUHRyICs9IDY7Ci0JCQkvKiBza2lwIHZsYW4gdGFnICovCi0JCQl2bGFuX3NpemUgPSAoYlZMQU5Qa3QpID8gTEVOR1RIXzgwMl8xUSA6IDA7Ci0JCQkvKiBnZXQgMiBvY3RldHMgKFR5cGVvZkxlbikgKi8KLQkJCU5kaXNNb3ZlTWVtb3J5KHBIZWFkZXJCdWZQdHIsCi0JCQkJICAgICAgIHBUeEJsay0+cFNyY0J1ZkhlYWRlciArIDEyICsgdmxhbl9zaXplLAotCQkJCSAgICAgICAyKTsKLQkJCXBIZWFkZXJCdWZQdHIgKz0gMjsKLQkJCXBUeEJsay0+TXBkdUhlYWRlckxlbiArPSBMRU5HVEhfODAyXzFfSDsKLQkJfQotCi0JfQotCi0JLyogKi8KLQkvKiBwcmVwYXJlIGZvciBUWFdJICovCi0JLyogdXNlIFdjaWQgYXMgS2V5IEluZGV4ICovCi0JLyogKi8KLQotCVJUTVBXcml0ZVR4V0lfRGF0YShwQWQsIChzdHJ1Y3QgcnRfdHh3aSAqKSAoJnBUeEJsay0+SGVhZGVyQnVmW1RYSU5GT19TSVpFXSksCi0JCQkgICBwVHhCbGspOwotCi0JLypGcmVlTnVtYmVyID0gR0VUX1RYUklOR19GUkVFTk8ocEFkLCBRdWVJZHgpOyAqLwotCi0JSEFMX1dyaXRlVHhSZXNvdXJjZShwQWQsIHBUeEJsaywgVFJVRSwgJkZyZWVOdW1iZXIpOwotCi0JcEFkLT5SYWxpbmtDb3VudGVycy5LaWNrVHhDb3VudCsrOwotCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhEb25lQ291bnQrKzsKLQotCS8qICovCi0JLyogS2ljayBvdXQgVHggKi8KLQkvKiAqLwotCWlmICghUlRNUF9URVNUX1BTRkxBRyhwQWQsIGZSVE1QX1BTX0RJU0FCTEVfVFgpKQotCQlIQUxfS2lja091dFR4KHBBZCwgcFR4QmxrLCBwVHhCbGstPlF1ZUlkeCk7Ci19Ci0KLXZvaWQgU1RBX0FSYWxpbmtfRnJhbWVfVHgoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfdHhfYmxrICpwVHhCbGspCi17Ci0JdTggKnBIZWFkZXJCdWZQdHI7Ci0JdTE2IEZyZWVOdW1iZXI7Ci0JdTE2IHRvdGFsTVBEVVNpemUgPSAwOwotCXUxNiBGaXJzdFR4LCBMYXN0VHhJZHg7Ci0JaW50IGZyYW1lTnVtID0gMDsKLQlCT09MRUFOIGJWTEFOUGt0OwotCXN0cnVjdCBydF9xdWV1ZV9lbnRyeSAqcFFFbnRyeTsKLQotCUFTU0VSVChwVHhCbGspOwotCi0JQVNTRVJUKChwVHhCbGstPlR4UGFja2V0TGlzdC5OdW1iZXIgPT0gMikpOwotCi0JRmlyc3RUeCA9IExhc3RUeElkeCA9IDA7CS8qIElzIGl0IG9rIGluaXQgdGhleSBhcyAwPyAqLwotCXdoaWxlIChwVHhCbGstPlR4UGFja2V0TGlzdC5IZWFkKSB7Ci0JCXBRRW50cnkgPSBSZW1vdmVIZWFkUXVldWUoJnBUeEJsay0+VHhQYWNrZXRMaXN0KTsKLQkJcFR4QmxrLT5wUGFja2V0ID0gUVVFVUVfRU5UUllfVE9fUEFDS0VUKHBRRW50cnkpOwotCi0JCWlmIChSVE1QX0ZpbGxUeEJsa0luZm8ocEFkLCBwVHhCbGspICE9IFRSVUUpIHsKLQkJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwVHhCbGstPnBQYWNrZXQsCi0JCQkJCSAgICBORElTX1NUQVRVU19GQUlMVVJFKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJYlZMQU5Qa3QgPQotCQkgICAgKFJUTVBfR0VUX1BBQ0tFVF9WTEFOKHBUeEJsay0+cFBhY2tldCkgPyBUUlVFIDogRkFMU0UpOwotCi0JCS8qIHNraXAgODAyLjMgaGVhZGVyICovCi0JCXBUeEJsay0+cFNyY0J1ZkRhdGEgPSBwVHhCbGstPnBTcmNCdWZIZWFkZXIgKyBMRU5HVEhfODAyXzM7Ci0JCXBUeEJsay0+U3JjQnVmTGVuIC09IExFTkdUSF84MDJfMzsKLQotCQkvKiBza2lwIHZsYW4gdGFnICovCi0JCWlmIChiVkxBTlBrdCkgewotCQkJcFR4QmxrLT5wU3JjQnVmRGF0YSArPSBMRU5HVEhfODAyXzFROwotCQkJcFR4QmxrLT5TcmNCdWZMZW4gLT0gTEVOR1RIXzgwMl8xUTsKLQkJfQotCi0JCWlmIChmcmFtZU51bSA9PSAwKSB7CS8qIEZvciBmaXJzdCBmcmFtZSwgd2UgbmVlZCB0byBjcmVhdGUgdGhlIDgwMi4xMSBoZWFkZXIgKyBwYWRkaW5nKG9wdGlvbmFsKSArIFJBLUFHRy1MRU4gKyBTTkFQIEhlYWRlciAqLwotCi0JCQlwSGVhZGVyQnVmUHRyID0KLQkJCSAgICBTVEFfQnVpbGRfQVJhbGlua19GcmFtZV9IZWFkZXIocEFkLCBwVHhCbGspOwotCi0JCQkvKiBJdCdzIG9rIHdyaXRlIHRoZSBUeFdJIGhlcmUsIGJlY2F1c2UgdGhlIFR4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudCAqLwotCQkJLyogd2lsbCBiZSB1cGRhdGVkIGFmdGVyIGZpbmFsIGZyYW1lIHdhcyBoYW5kbGVkLiAqLwotCQkJUlRNUFdyaXRlVHhXSV9EYXRhKHBBZCwKLQkJCQkJICAgKHN0cnVjdCBydF90eHdpICopICgmcFR4QmxrLT4KLQkJCQkJCQkgIEhlYWRlckJ1ZgotCQkJCQkJCSAgW1RYSU5GT19TSVpFXSksCi0JCQkJCSAgIHBUeEJsayk7Ci0KLQkJCS8qICovCi0JCQkvKiBJbnNlcnQgTExDLVNOQVAgZW5jYXBzdWxhdGlvbiAtIDggb2N0ZXRzICovCi0JCQkvKiAqLwotCQkJRVhUUkFfTExDU05BUF9FTkNBUF9GUk9NX1BLVF9PRkZTRVQocFR4QmxrLT4KLQkJCQkJCQkgICAgcFNyY0J1ZkRhdGEgLSAyLAotCQkJCQkJCSAgICBwVHhCbGstPgotCQkJCQkJCSAgICBwRXh0cmFMbGNTbmFwRW5jYXApOwotCi0JCQlpZiAocFR4QmxrLT5wRXh0cmFMbGNTbmFwRW5jYXApIHsKLQkJCQlOZGlzTW92ZU1lbW9yeShwSGVhZGVyQnVmUHRyLAotCQkJCQkgICAgICAgcFR4QmxrLT5wRXh0cmFMbGNTbmFwRW5jYXAsIDYpOwotCQkJCXBIZWFkZXJCdWZQdHIgKz0gNjsKLQkJCQkvKiBnZXQgMiBvY3RldHMgKFR5cGVvZkxlbikgKi8KLQkJCQlOZGlzTW92ZU1lbW9yeShwSGVhZGVyQnVmUHRyLAotCQkJCQkgICAgICAgcFR4QmxrLT5wU3JjQnVmRGF0YSAtIDIsIDIpOwotCQkJCXBIZWFkZXJCdWZQdHIgKz0gMjsKLQkJCQlwVHhCbGstPk1wZHVIZWFkZXJMZW4gKz0gTEVOR1RIXzgwMl8xX0g7Ci0JCQl9Ci0JCX0gZWxzZSB7CS8qIEZvciBzZWNvbmQgYWdncmVnYXRlZCBmcmFtZSwgd2UgbmVlZCBjcmVhdGUgdGhlIDgwMi4zIGhlYWRlciB0byBoZWFkZXJCdWYsIGJlY2F1c2UgUENJIHdpbGwgY29weSBpdCB0byBTRFB0cjAuICovCi0KLQkJCXBIZWFkZXJCdWZQdHIgPSAmcFR4QmxrLT5IZWFkZXJCdWZbMF07Ci0JCQlwVHhCbGstPk1wZHVIZWFkZXJMZW4gPSAwOwotCi0JCQkvKiBBLVJhbGluayBzdWItc2VxdWVudCBmcmFtZSBoZWFkZXIgaXMgdGhlIHNhbWUgYXMgODAyLjMgaGVhZGVyLiAqLwotCQkJLyogICBEQSg2KStTQSg2KStGcmFtZVR5cGUoMikgKi8KLQkJCU5kaXNNb3ZlTWVtb3J5KHBIZWFkZXJCdWZQdHIsIHBUeEJsay0+cFNyY0J1ZkhlYWRlciwKLQkJCQkgICAgICAgMTIpOwotCQkJcEhlYWRlckJ1ZlB0ciArPSAxMjsKLQkJCS8qIGdldCAyIG9jdGV0cyAoVHlwZW9mTGVuKSAqLwotCQkJTmRpc01vdmVNZW1vcnkocEhlYWRlckJ1ZlB0ciwgcFR4QmxrLT5wU3JjQnVmRGF0YSAtIDIsCi0JCQkJICAgICAgIDIpOwotCQkJcEhlYWRlckJ1ZlB0ciArPSAyOwotCQkJcFR4QmxrLT5NcGR1SGVhZGVyTGVuID0gTEVOR1RIX0FSQUxJTktfU1VCRlJBTUVIRUFEOwotCQl9Ci0KLQkJdG90YWxNUERVU2l6ZSArPSBwVHhCbGstPk1wZHVIZWFkZXJMZW4gKyBwVHhCbGstPlNyY0J1ZkxlbjsKLQotCQkvKkZyZWVOdW1iZXIgPSBHRVRfVFhSSU5HX0ZSRUVOTyhwQWQsIFF1ZUlkeCk7ICovCi0JCWlmIChmcmFtZU51bSA9PSAwKQotCQkJRmlyc3RUeCA9Ci0JCQkgICAgSEFMX1dyaXRlTXVsdGlUeFJlc291cmNlKHBBZCwgcFR4QmxrLCBmcmFtZU51bSwKLQkJCQkJCSAgICAgJkZyZWVOdW1iZXIpOwotCQllbHNlCi0JCQlMYXN0VHhJZHggPQotCQkJICAgIEhBTF9Xcml0ZU11bHRpVHhSZXNvdXJjZShwQWQsIHBUeEJsaywgZnJhbWVOdW0sCi0JCQkJCQkgICAgICZGcmVlTnVtYmVyKTsKLQotCQlmcmFtZU51bSsrOwotCi0JCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhBZ2dyZWdhdGlvbkNvdW50Kys7Ci0JCXBBZC0+UmFsaW5rQ291bnRlcnMuS2lja1R4Q291bnQrKzsKLQkJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeERvbmVDb3VudCsrOwotCi0JfQotCi0JSEFMX0ZpbmFsV3JpdGVUeFJlc291cmNlKHBBZCwgcFR4QmxrLCB0b3RhbE1QRFVTaXplLCBGaXJzdFR4KTsKLQlIQUxfTGFzdFR4SWR4KHBBZCwgcFR4QmxrLT5RdWVJZHgsIExhc3RUeElkeCk7Ci0KLQkvKiAqLwotCS8qIEtpY2sgb3V0IFR4ICovCi0JLyogKi8KLQlpZiAoIVJUTVBfVEVTVF9QU0ZMQUcocEFkLCBmUlRNUF9QU19ESVNBQkxFX1RYKSkKLQkJSEFMX0tpY2tPdXRUeChwQWQsIHBUeEJsaywgcFR4QmxrLT5RdWVJZHgpOwotCi19Ci0KLXZvaWQgU1RBX0ZyYWdtZW50X0ZyYW1lX1R4KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X3R4X2JsayAqcFR4QmxrKQotewotCXN0cnVjdCBydF9oZWFkZXJfODAyXzExICpwSGVhZGVyXzgwMl8xMTsKLQl1OCAqcEhlYWRlckJ1ZlB0cjsKLQl1MTYgRnJlZU51bWJlcjsKLQl1OCBmcmFnTnVtID0gMDsKLQlzdHJ1Y3QgcnRfcGFja2V0X2luZm8gUGFja2V0SW5mbzsKLQl1MTYgRW5jcnlwdGlvbk92ZXJoZWFkID0gMDsKLQl1MzIgRnJlZU1wZHVTaXplLCBTcmNSZW1haW5pbmdCeXRlczsKLQl1MTYgQWNrRHVyYXRpb247Ci0JdTMyIE5leHRNcGR1U2l6ZTsKLQlCT09MRUFOIGJWTEFOUGt0OwotCXN0cnVjdCBydF9xdWV1ZV9lbnRyeSAqcFFFbnRyeTsKLQlIVFRSQU5TTUlUX1NFVFRJTkcgKnBUcmFuc21pdDsKLQotCUFTU0VSVChwVHhCbGspOwotCi0JcFFFbnRyeSA9IFJlbW92ZUhlYWRRdWV1ZSgmcFR4QmxrLT5UeFBhY2tldExpc3QpOwotCXBUeEJsay0+cFBhY2tldCA9IFFVRVVFX0VOVFJZX1RPX1BBQ0tFVChwUUVudHJ5KTsKLQlpZiAoUlRNUF9GaWxsVHhCbGtJbmZvKHBBZCwgcFR4QmxrKSAhPSBUUlVFKSB7Ci0JCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwVHhCbGstPnBQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOwotCQlyZXR1cm47Ci0JfQotCi0JQVNTRVJUKFRYX0JMS19URVNUX0ZMQUcocFR4QmxrLCBmVFhfYkFsbG93RnJhZykpOwotCWJWTEFOUGt0ID0gKFJUTVBfR0VUX1BBQ0tFVF9WTEFOKHBUeEJsay0+cFBhY2tldCkgPyBUUlVFIDogRkFMU0UpOwotCi0JU1RBRmluZENpcGhlckFsZ29yaXRobShwQWQsIHBUeEJsayk7Ci0JU1RBQnVpbGRDb21tb244MDJfMTFIZWFkZXIocEFkLCBwVHhCbGspOwotCi0JaWYgKHBUeEJsay0+Q2lwaGVyQWxnID09IENJUEhFUl9US0lQKSB7Ci0JCXBUeEJsay0+cFBhY2tldCA9Ci0JCSAgICBkdXBsaWNhdGVfcGt0X3dpdGhfVEtJUF9NSUMocEFkLCBwVHhCbGstPnBQYWNrZXQpOwotCQlpZiAocFR4QmxrLT5wUGFja2V0ID09IE5VTEwpCi0JCQlyZXR1cm47Ci0JCVJUTVBfUXVlcnlQYWNrZXRJbmZvKHBUeEJsay0+cFBhY2tldCwgJlBhY2tldEluZm8sCi0JCQkJICAgICAmcFR4QmxrLT5wU3JjQnVmSGVhZGVyLAotCQkJCSAgICAgJnBUeEJsay0+U3JjQnVmTGVuKTsKLQl9Ci0JLyogc2tpcCA4MDIuMyBoZWFkZXIgKi8KLQlwVHhCbGstPnBTcmNCdWZEYXRhID0gcFR4QmxrLT5wU3JjQnVmSGVhZGVyICsgTEVOR1RIXzgwMl8zOwotCXBUeEJsay0+U3JjQnVmTGVuIC09IExFTkdUSF84MDJfMzsKLQotCS8qIHNraXAgdmxhbiB0YWcgKi8KLQlpZiAoYlZMQU5Qa3QpIHsKLQkJcFR4QmxrLT5wU3JjQnVmRGF0YSArPSBMRU5HVEhfODAyXzFROwotCQlwVHhCbGstPlNyY0J1ZkxlbiAtPSBMRU5HVEhfODAyXzFROwotCX0KLQotCXBIZWFkZXJCdWZQdHIgPSAmcFR4QmxrLT5IZWFkZXJCdWZbVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkVdOwotCXBIZWFkZXJfODAyXzExID0gKHN0cnVjdCBydF9oZWFkZXJfODAyXzExICopIHBIZWFkZXJCdWZQdHI7Ci0KLQkvKiBza2lwIGNvbW1vbiBoZWFkZXIgKi8KLQlwSGVhZGVyQnVmUHRyICs9IHBUeEJsay0+TXBkdUhlYWRlckxlbjsKLQotCWlmIChUWF9CTEtfVEVTVF9GTEFHKHBUeEJsaywgZlRYX2JXTU0pKSB7Ci0JCS8qICovCi0JCS8qIGJ1aWxkIFFPUyBDb250cm9sIGJ5dGVzICovCi0JCS8qICovCi0JCSpwSGVhZGVyQnVmUHRyID0gKHBUeEJsay0+VXNlclByaW9yaXR5ICYgMHgwRik7Ci0KLQkJKihwSGVhZGVyQnVmUHRyICsgMSkgPSAwOwotCQlwSGVhZGVyQnVmUHRyICs9IDI7Ci0JCXBUeEJsay0+TXBkdUhlYWRlckxlbiArPSAyOwotCX0KLQkvKiAqLwotCS8qIHBhZGRpbmcgYXQgZnJvbnQgb2YgTExDIGhlYWRlciAqLwotCS8qIExMQyBoZWFkZXIgc2hvdWxkIGxvY2F0ZSBhdCA0LW9jdGV0cyBhbGlnbWVudCAqLwotCS8qICovCi0JcFR4QmxrLT5IZHJQYWRMZW4gPSAodW5zaWduZWQgbG9uZylwSGVhZGVyQnVmUHRyOwotCXBIZWFkZXJCdWZQdHIgPSAodTggKilST1VORF9VUChwSGVhZGVyQnVmUHRyLCA0KTsKLQlwVHhCbGstPkhkclBhZExlbiA9ICh1bnNpZ25lZCBsb25nKShwSGVhZGVyQnVmUHRyIC0gcFR4QmxrLT5IZHJQYWRMZW4pOwotCi0JLyogKi8KLQkvKiBJbnNlcnQgTExDLVNOQVAgZW5jYXBzdWxhdGlvbiAtIDggb2N0ZXRzICovCi0JLyogKi8KLQkvKiAqLwotCS8qIGlmIG9yaWdpbmFsIEV0aGVybmV0IGZyYW1lIGNvbnRhaW5zIG5vIExMQy9TTkFQLCAqLwotCS8qIHRoZW4gYW4gZXh0cmEgTExDL1NOQVAgZW5jYXAgaXMgcmVxdWlyZWQgKi8KLQkvKiAqLwotCUVYVFJBX0xMQ1NOQVBfRU5DQVBfRlJPTV9QS1RfU1RBUlQocFR4QmxrLT5wU3JjQnVmSGVhZGVyLAotCQkJCQkgICBwVHhCbGstPnBFeHRyYUxsY1NuYXBFbmNhcCk7Ci0JaWYgKHBUeEJsay0+cEV4dHJhTGxjU25hcEVuY2FwKSB7Ci0JCXU4IHZsYW5fc2l6ZTsKLQotCQlOZGlzTW92ZU1lbW9yeShwSGVhZGVyQnVmUHRyLCBwVHhCbGstPnBFeHRyYUxsY1NuYXBFbmNhcCwgNik7Ci0JCXBIZWFkZXJCdWZQdHIgKz0gNjsKLQkJLyogc2tpcCB2bGFuIHRhZyAqLwotCQl2bGFuX3NpemUgPSAoYlZMQU5Qa3QpID8gTEVOR1RIXzgwMl8xUSA6IDA7Ci0JCS8qIGdldCAyIG9jdGV0cyAoVHlwZW9mTGVuKSAqLwotCQlOZGlzTW92ZU1lbW9yeShwSGVhZGVyQnVmUHRyLAotCQkJICAgICAgIHBUeEJsay0+cFNyY0J1ZkhlYWRlciArIDEyICsgdmxhbl9zaXplLCAyKTsKLQkJcEhlYWRlckJ1ZlB0ciArPSAyOwotCQlwVHhCbGstPk1wZHVIZWFkZXJMZW4gKz0gTEVOR1RIXzgwMl8xX0g7Ci0JfQotCi0JLyogSWYgVEtJUCBpcyB1c2VkIGFuZCBmcmFnbWVudGF0aW9uIGlzIHJlcXVpcmVkLiBEcml2ZXIgaGFzIHRvICovCi0JLyogICAgICBhcHBlbmQgVEtJUCBNSUMgYXQgdGFpbCBvZiB0aGUgc2NhdHRlciBidWZmZXIgKi8KLQkvKiAgICAgIE1BQyBBU0lDIHdpbGwgb25seSBwZXJmb3JtIElWL0VJVi9JQ1YgaW5zZXJ0aW9uIGJ1dCBubyBUS0lQIE1JQyAqLwotCWlmIChwVHhCbGstPkNpcGhlckFsZyA9PSBDSVBIRVJfVEtJUCkgewotCQlSVE1QQ2FsY3VsYXRlTUlDVmFsdWUocEFkLCBwVHhCbGstPnBQYWNrZXQsCi0JCQkJICAgICAgcFR4QmxrLT5wRXh0cmFMbGNTbmFwRW5jYXAsIHBUeEJsay0+cEtleSwKLQkJCQkgICAgICAwKTsKLQotCQkvKiBOT1RFOiBET04nVCByZWZlciB0aGUgc2tiLT5sZW4gZGlyZWN0bHkgYWZ0ZXIgZm9sbG93aW5nIGNvcHkuIEJlY2F1c2UgdGhlIGxlbmd0aCBpcyBub3QgYWRqdXN0ZWQgKi8KLQkJLyogICAgICAgICAgICAgICAgICAgICAgdG8gY29ycmVjdCBsZW5ndGgsIHJlZmVyIHRvIHBUeEJsay0+U3JjQnVmTGVuIGZvciB0aGUgcGFja2V0IGxlbmd0aCBpbiBmb2xsb3dpbmcgcHJvZ3Jlc3MuICovCi0JCU5kaXNNb3ZlTWVtb3J5KHBUeEJsay0+cFNyY0J1ZkRhdGEgKyBwVHhCbGstPlNyY0J1ZkxlbiwKLQkJCSAgICAgICAmcEFkLT5Qcml2YXRlSW5mby5UeC5NSUNbMF0sIDgpOwotCQkvKnNrYl9wdXQoKFJUUEtUX1RPX09TUEtUKHBUeEJsay0+cFBhY2tldCkpLT50YWlsLCA4KTsgKi8KLQkJcFR4QmxrLT5TcmNCdWZMZW4gKz0gODsKLQkJcFR4QmxrLT5Ub3RhbEZyYW1lTGVuICs9IDg7Ci0JCXBUeEJsay0+Q2lwaGVyQWxnID0gQ0lQSEVSX1RLSVBfTk9fTUlDOwotCX0KLQkvKiAqLwotCS8qIGNhbGN1bGF0ZSB0aGUgb3ZlcmhlYWQgYnl0ZXMgdGhhdCBlbmNyeXB0aW9uIGFsZ29yaXRobSBtYXkgYWRkLiBUaGlzICovCi0JLyogYWZmZWN0cyB0aGUgY2FsY3VsYXRlIG9mICJkdXJhdGlvbiIgZmllbGQgKi8KLQkvKiAqLwotCWlmICgocFR4QmxrLT5DaXBoZXJBbGcgPT0gQ0lQSEVSX1dFUDY0KQotCSAgICB8fCAocFR4QmxrLT5DaXBoZXJBbGcgPT0gQ0lQSEVSX1dFUDEyOCkpCi0JCUVuY3J5cHRpb25PdmVyaGVhZCA9IDg7CS8qV0VQOiBJVls0XSArIElDVls0XTsgKi8KLQllbHNlIGlmIChwVHhCbGstPkNpcGhlckFsZyA9PSBDSVBIRVJfVEtJUF9OT19NSUMpCi0JCUVuY3J5cHRpb25PdmVyaGVhZCA9IDEyOwkvKlRLSVA6IElWWzRdICsgRUlWWzRdICsgSUNWWzRdLCBNSUMgd2lsbCBiZSBhZGRlZCB0byBUb3RhbFBhY2tldExlbmd0aCAqLwotCWVsc2UgaWYgKHBUeEJsay0+Q2lwaGVyQWxnID09IENJUEhFUl9US0lQKQotCQlFbmNyeXB0aW9uT3ZlcmhlYWQgPSAyMDsJLypUS0lQOiBJVls0XSArIEVJVls0XSArIElDVls0XSArIE1JQ1s4XSAqLwotCWVsc2UgaWYgKHBUeEJsay0+Q2lwaGVyQWxnID09IENJUEhFUl9BRVMpCi0JCUVuY3J5cHRpb25PdmVyaGVhZCA9IDE2OwkvKiBBRVM6IElWWzRdICsgRUlWWzRdICsgTUlDWzhdICovCi0JZWxzZQotCQlFbmNyeXB0aW9uT3ZlcmhlYWQgPSAwOwotCi0JcFRyYW5zbWl0ID0gcFR4QmxrLT5wVHJhbnNtaXQ7Ci0JLyogRGVjaWRlIHRoZSBUWCByYXRlICovCi0JaWYgKHBUcmFuc21pdC0+ZmllbGQuTU9ERSA9PSBNT0RFX0NDSykKLQkJcFR4QmxrLT5UeFJhdGUgPSBwVHJhbnNtaXQtPmZpZWxkLk1DUzsKLQllbHNlIGlmIChwVHJhbnNtaXQtPmZpZWxkLk1PREUgPT0gTU9ERV9PRkRNKQotCQlwVHhCbGstPlR4UmF0ZSA9IHBUcmFuc21pdC0+ZmllbGQuTUNTICsgUkFURV9GSVJTVF9PRkRNX1JBVEU7Ci0JZWxzZQotCQlwVHhCbGstPlR4UmF0ZSA9IFJBVEVfNl81OwotCi0JLyogZGVjaWRlIGhvdyBtdWNoIHRpbWUgYW4gQUNLL0NUUyBmcmFtZSB3aWxsIGNvbnN1bWUgaW4gdGhlIGFpciAqLwotCWlmIChwVHhCbGstPlR4UmF0ZSA8PSBSQVRFX0xBU1RfT0ZETV9SQVRFKQotCQlBY2tEdXJhdGlvbiA9Ci0JCSAgICBSVE1QQ2FsY0R1cmF0aW9uKHBBZCwKLQkJCQkgICAgIHBBZC0+Q29tbW9uQ2ZnLkV4cGVjdGVkQUNLUmF0ZVtwVHhCbGstPgotCQkJCQkJCQkgICAgVHhSYXRlXSwKLQkJCQkgICAgIDE0KTsKLQllbHNlCi0JCUFja0R1cmF0aW9uID0gUlRNUENhbGNEdXJhdGlvbihwQWQsIFJBVEVfNl81LCAxNCk7Ci0KLQkvKiBJbml0IHRoZSB0b3RhbCBwYXlsb2FkIGxlbmd0aCBvZiB0aGlzIGZyYW1lLiAqLwotCVNyY1JlbWFpbmluZ0J5dGVzID0gcFR4QmxrLT5TcmNCdWZMZW47Ci0KLQlwVHhCbGstPlRvdGFsRnJhZ051bSA9IDB4ZmY7Ci0KLQlkbyB7Ci0KLQkJRnJlZU1wZHVTaXplID0gcEFkLT5Db21tb25DZmcuRnJhZ21lbnRUaHJlc2hvbGQgLSBMRU5HVEhfQ1JDOwotCi0JCUZyZWVNcGR1U2l6ZSAtPSBwVHhCbGstPk1wZHVIZWFkZXJMZW47Ci0KLQkJaWYgKFNyY1JlbWFpbmluZ0J5dGVzIDw9IEZyZWVNcGR1U2l6ZSkgewkvKiB0aGlzIGlzIHRoZSBsYXN0IG9yIG9ubHkgZnJhZ21lbnQgKi8KLQotCQkJcFR4QmxrLT5TcmNCdWZMZW4gPSBTcmNSZW1haW5pbmdCeXRlczsKLQotCQkJcEhlYWRlcl84MDJfMTEtPkZDLk1vcmVGcmFnID0gMDsKLQkJCXBIZWFkZXJfODAyXzExLT5EdXJhdGlvbiA9Ci0JCQkgICAgcEFkLT5Db21tb25DZmcuRHNpZnMgKyBBY2tEdXJhdGlvbjsKLQotCQkJLyogSW5kaWNhdGUgdGhlIGxvd2VyIGxheWVyIHRoYXQgdGhpcydzIHRoZSBsYXN0IGZyYWdtZW50LiAqLwotCQkJcFR4QmxrLT5Ub3RhbEZyYWdOdW0gPSBmcmFnTnVtOwotCQl9IGVsc2UgewkvKiBtb3JlIGZyYWdtZW50IGlzIHJlcXVpcmVkICovCi0KLQkJCXBUeEJsay0+U3JjQnVmTGVuID0gRnJlZU1wZHVTaXplOwotCi0JCQlOZXh0TXBkdVNpemUgPQotCQkJICAgIG1pbigoKHUzMilTcmNSZW1haW5pbmdCeXRlcyAtIHBUeEJsay0+U3JjQnVmTGVuKSwKLQkJCQkoKHUzMilwQWQtPkNvbW1vbkNmZy5GcmFnbWVudFRocmVzaG9sZCkpOwotCQkJcEhlYWRlcl84MDJfMTEtPkZDLk1vcmVGcmFnID0gMTsKLQkJCXBIZWFkZXJfODAyXzExLT5EdXJhdGlvbiA9Ci0JCQkgICAgKDMgKiBwQWQtPkNvbW1vbkNmZy5Ec2lmcykgKyAoMiAqIEFja0R1cmF0aW9uKSArCi0JCQkgICAgUlRNUENhbGNEdXJhdGlvbihwQWQsIHBUeEJsay0+VHhSYXRlLAotCQkJCQkgICAgIE5leHRNcGR1U2l6ZSArIEVuY3J5cHRpb25PdmVyaGVhZCk7Ci0JCX0KLQotCQlpZiAoZnJhZ051bSA9PSAwKQotCQkJcFR4QmxrLT5GcmFtZUdhcCA9IElGU19IVFRYT1A7Ci0JCWVsc2UKLQkJCXBUeEJsay0+RnJhbWVHYXAgPSBJRlNfU0lGUzsKLQotCQlSVE1QV3JpdGVUeFdJX0RhdGEocEFkLAotCQkJCSAgIChzdHJ1Y3QgcnRfdHh3aSAqKSAoJnBUeEJsay0+Ci0JCQkJCQkgIEhlYWRlckJ1ZltUWElORk9fU0laRV0pLAotCQkJCSAgIHBUeEJsayk7Ci0KLQkJSEFMX1dyaXRlRnJhZ1R4UmVzb3VyY2UocEFkLCBwVHhCbGssIGZyYWdOdW0sICZGcmVlTnVtYmVyKTsKLQotCQlwQWQtPlJhbGlua0NvdW50ZXJzLktpY2tUeENvdW50Kys7Ci0JCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhEb25lQ291bnQrKzsKLQotCQkvKiBVcGRhdGUgdGhlIGZyYW1lIG51bWJlciwgcmVtYWluaW5nIHNpemUgb2YgdGhlIE5ESVMgcGFja2V0IHBheWxvYWQuICovCi0KLQkJLyogc3BhY2UgZm9yIDgwMi4xMSBoZWFkZXIuICovCi0JCWlmIChmcmFnTnVtID09IDAgJiYgcFR4QmxrLT5wRXh0cmFMbGNTbmFwRW5jYXApCi0JCQlwVHhCbGstPk1wZHVIZWFkZXJMZW4gLT0gTEVOR1RIXzgwMl8xX0g7Ci0KLQkJZnJhZ051bSsrOwotCQlTcmNSZW1haW5pbmdCeXRlcyAtPSBwVHhCbGstPlNyY0J1ZkxlbjsKLQkJcFR4QmxrLT5wU3JjQnVmRGF0YSArPSBwVHhCbGstPlNyY0J1ZkxlbjsKLQotCQlwSGVhZGVyXzgwMl8xMS0+RnJhZysrOwkvKiBpbmNyZWFzZSBGcmFnICMgKi8KLQotCX0gd2hpbGUgKFNyY1JlbWFpbmluZ0J5dGVzID4gMCk7Ci0KLQkvKiAqLwotCS8qIEtpY2sgb3V0IFR4ICovCi0JLyogKi8KLQlpZiAoIVJUTVBfVEVTVF9QU0ZMQUcocEFkLCBmUlRNUF9QU19ESVNBQkxFX1RYKSkKLQkJSEFMX0tpY2tPdXRUeChwQWQsIHBUeEJsaywgcFR4QmxrLT5RdWVJZHgpOwotfQotCi0jZGVmaW5lIFJFTEVBU0VfRlJBTUVTX09GX1RYQkxLKF9wQWQsIF9wVHhCbGssIF9wUUVudHJ5LCBfU3RhdHVzKSAJCQkJCQkJCQkJXAotCQl3aGlsZShfcFR4QmxrLT5UeFBhY2tldExpc3QuSGVhZCkJCQkJCQkJCQkJCQkJCVwKLQkJewkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcCi0JCQlfcFFFbnRyeSA9IFJlbW92ZUhlYWRRdWV1ZSgmX3BUeEJsay0+VHhQYWNrZXRMaXN0KTsJCQkJCQkJCQlcCi0JCQlSRUxFQVNFX05ESVNfUEFDS0VUKF9wQWQsIFFVRVVFX0VOVFJZX1RPX1BBQ0tFVChfcFFFbnRyeSksIF9TdGF0dXMpOwlcCi0JCX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JCUNvcHkgZnJhbWUgZnJvbSB3YWl0aW5nIHF1ZXVlIGludG8gcmVsYXRpdmUgcmluZyBidWZmZXIgYW5kIHNldAotCWFwcHJvcHJpYXRlIEFTSUMgcmVnaXN0ZXIgdG8ga2ljayBoYXJkd2FyZSBlbmNyeXB0aW9uIGJlZm9yZSByZWFsbHkKLQlzZW50IG91dCB0byBhaXIuCi0KLQlBcmd1bWVudHM6Ci0JCXBBZCAJUG9pbnRlciB0byBvdXIgYWRhcHRlcgotCQl2b2lkICoJUG9pbnRlciB0byBvdXRnb2luZyBOZGlzIGZyYW1lCi0JCU51bWJlck9mRnJhZwlOdW1iZXIgb2YgZnJhZ21lbnQgcmVxdWlyZWQKLQotCVJldHVybiBWYWx1ZToKLQkJTm9uZQotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotaW50IFNUQUhhcmRUcmFuc21pdChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgc3RydWN0IHJ0X3R4X2JsayAqcFR4QmxrLCB1OCBRdWVJZHgpCi17Ci0JY2hhciAqcFBhY2tldDsKLQlzdHJ1Y3QgcnRfcXVldWVfZW50cnkgKnBRRW50cnk7Ci0KLQkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQkvKiBTVEVQIDAuIERPIFNBTklUWSBDSEVDSyBBTkQgU09NRSBFQVJMWSBQUkVQQVJBVElPTi4gKi8KLQkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQkvKiAqLwotCUFTU0VSVChwVHhCbGstPlR4UGFja2V0TGlzdC5OdW1iZXIpOwotCWlmIChwVHhCbGstPlR4UGFja2V0TGlzdC5IZWFkID09IE5VTEwpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkgKCJwVHhCbGstPlRvdGFsRnJhbWVOdW0gPT0gJWxkIVxuIiwKLQkJCSAgcFR4QmxrLT5UeFBhY2tldExpc3QuTnVtYmVyKSk7Ci0JCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOwotCX0KLQotCXBQYWNrZXQgPSBRVUVVRV9FTlRSWV9UT19QQUNLRVQocFR4QmxrLT5UeFBhY2tldExpc3QuSGVhZCk7Ci0KLQkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQkvKiBTVEVQIDEuIFdBS0UgVVAgUEhZICovCi0JLyogICAgICAgICAgICAgIG91dGdvaW5nIGZyYW1lIGFsd2F5cyB3YWtldXAgUEhZIHRvIHByZXZlbnQgZnJhbWUgbG9zdCBhbmQgKi8KLQkvKiAgICAgICAgICAgICAgdHVybiBvZmYgUFNNIGJpdCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlICovCi0JLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLyogbm90IHRvIGNoYW5nZSBQU00gYml0LCBqdXN0IHNlbmQgdGhpcyBmcmFtZSBvdXQ/ICovCi0JaWYgKChwQWQtPlN0YUNmZy5Qc20gPT0gUFdSX1NBVkUpCi0JICAgICYmIE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSkpIHsKLQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0lORk8sICgiQXNpY0ZvcmNlV2FrZXVwIEF0IEhhcmRUeFxuIikpOwotI2lmZGVmIFJUTVBfTUFDX1BDSQotCQlBc2ljRm9yY2VXYWtldXAocEFkLCBUUlVFKTsKLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLSNpZmRlZiBSVE1QX01BQ19VU0IKLQkJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBDTURUSFJFQURfRk9SQ0VfV0FLRV9VUCwgTlVMTCwgMCk7Ci0jZW5kaWYgLyogUlRNUF9NQUNfVVNCIC8vICovCi0JfQotCS8qIEl0IHNob3VsZCBub3QgY2hhbmdlIFBTTSBiaXQsIHdoZW4gQVBTRCB0dXJuIG9uLiAqLwotCWlmICgoIQotCSAgICAgKHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQ2FwYWJsZQotCSAgICAgICYmIHBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uYkFQU0RDYXBhYmxlKQotCSAgICAgJiYgKHBBZC0+Q29tbW9uQ2ZnLmJBUFNERm9yY2VQb3dlclNhdmUgPT0gRkFMU0UpKQotCSAgICB8fCAoUlRNUF9HRVRfUEFDS0VUX0VBUE9MKHBUeEJsay0+cFBhY2tldCkpCi0JICAgIHx8IChSVE1QX0dFVF9QQUNLRVRfV0FJKHBUeEJsay0+cFBhY2tldCkpKSB7Ci0JCWlmICgocEFkLT5TdGFDZmcuUHNtID09IFBXUl9TQVZFKSAmJgotCQkgICAgKHBBZC0+U3RhQ2ZnLldpbmRvd3NQb3dlck1vZGUgPT0KLQkJICAgICBOZGlzODAyXzExUG93ZXJNb2RlRmFzdF9QU1ApKQotCQkJUlRNUF9TRVRfUFNNX0JJVChwQWQsIFBXUl9BQ1RJVkUpOwotCX0KLQotCXN3aXRjaCAocFR4QmxrLT5UeEZyYW1lVHlwZSkgewotCWNhc2UgVFhfQU1QRFVfRlJBTUU6Ci0JCVNUQV9BTVBEVV9GcmFtZV9UeChwQWQsIHBUeEJsayk7Ci0JCWJyZWFrOwotCWNhc2UgVFhfQU1TRFVfRlJBTUU6Ci0JCVNUQV9BTVNEVV9GcmFtZV9UeChwQWQsIHBUeEJsayk7Ci0JCWJyZWFrOwotCWNhc2UgVFhfTEVHQUNZX0ZSQU1FOgotCQlTVEFfTGVnYWN5X0ZyYW1lX1R4KHBBZCwgcFR4QmxrKTsKLQkJYnJlYWs7Ci0JY2FzZSBUWF9NQ0FTVF9GUkFNRToKLQkJU1RBX0xlZ2FjeV9GcmFtZV9UeChwQWQsIHBUeEJsayk7Ci0JCWJyZWFrOwotCWNhc2UgVFhfUkFMSU5LX0ZSQU1FOgotCQlTVEFfQVJhbGlua19GcmFtZV9UeChwQWQsIHBUeEJsayk7Ci0JCWJyZWFrOwotCWNhc2UgVFhfRlJBR19GUkFNRToKLQkJU1RBX0ZyYWdtZW50X0ZyYW1lX1R4KHBBZCwgcFR4QmxrKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJewotCQkJLyogSXQgc2hvdWxkIG5vdCBoYXBwZW5lZCEgKi8KLQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJCSAoIlNlbmQgYSBwYWNrZXQgd2FzIG5vdCBjbGFzc2lmaWVkISBJdCBzaG91bGQgbm90IGhhcHBlbiFcbiIpKTsKLQkJCXdoaWxlIChwVHhCbGstPlR4UGFja2V0TGlzdC5OdW1iZXIpIHsKLQkJCQlwUUVudHJ5ID0KLQkJCQkgICAgUmVtb3ZlSGVhZFF1ZXVlKCZwVHhCbGstPlR4UGFja2V0TGlzdCk7Ci0JCQkJcFBhY2tldCA9IFFVRVVFX0VOVFJZX1RPX1BBQ0tFVChwUUVudHJ5KTsKLQkJCQlpZiAocFBhY2tldCkKLQkJCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBQYWNrZXQsCi0JCQkJCQkJICAgIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiAoTkRJU19TVEFUVVNfU1VDQ0VTUyk7Ci0KLX0KLQotdW5zaWduZWQgbG9uZyBIYXNoQnl0ZXNQb2x5bm9taWFsKHU4ICogdmFsdWUsIHVuc2lnbmVkIGludCBsZW4pCi17Ci0JdW5zaWduZWQgY2hhciAqd29yZCA9IHZhbHVlOwotCXVuc2lnbmVkIGludCByZXQgPSAwOwotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCWludCBtb2QgPSBpICUgMzI7Ci0JCXJldCBePSAodW5zaWduZWQgaW50KSh3b3JkW2ldKSA8PCBtb2Q7Ci0JCXJldCBePSAodW5zaWduZWQgaW50KSh3b3JkW2ldKSA+PiAoMzIgLSBtb2QpOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi12b2lkIFN0YV9Bbm5vdW5jZV9vcl9Gb3J3YXJkXzgwMl8zX1BhY2tldChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJCSAgdm9pZCAqcFBhY2tldCwKLQkJCQkJICB1OCBGcm9tV2hpY2hCU1NJRCkKLXsKLQlpZiAoVFJVRSkgewotCQlhbm5vdW5jZV84MDJfM19wYWNrZXQocEFkLCBwUGFja2V0KTsKLQl9IGVsc2UgewotCQkvKiByZWxlYXNlIHBhY2tldCAqLwotCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvc2FuaXR5LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YS9zYW5pdHkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGMzMjYwNC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YS9zYW5pdHkuYworKysgL2Rldi9udWxsCkBAIC0xLDM2MiArMCwwIEBACi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFJhbGluayBUZWNoIEluYy4KLSAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKLSAqIEhzaW5jaHUgQ291bnR5IDMwMiwKLSAqIFRhaXdhbiwgUi5PLkMuCi0gKgotICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotCU1vZHVsZSBOYW1lOgotCXNhbml0eS5jCi0KLQlBYnN0cmFjdDoKLQotCVJldmlzaW9uIEhpc3Rvcnk6Ci0JV2hvCQkJV2hlbgkJCVdoYXQKLQktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JSm9obiBDaGFuZyAgCQkyMDA0LTA5LTAxICAgICAgYWRkIFdNTSBzdXBwb3J0Ci0JSnVzdGluIFAuIE1hdHRvY2sJMTEvMDcvMjAxMAlGaXggdHlwb3MKLSovCi0jaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCi0KLWV4dGVybiB1OCBDSVNDT19PVUlbXTsKLQotZXh0ZXJuIHU4IFdQQV9PVUlbXTsKLWV4dGVybiB1OCBSU05fT1VJW107Ci1leHRlcm4gdTggV01FX0lORk9fRUxFTVtdOwotZXh0ZXJuIHU4IFdNRV9QQVJNX0VMRU1bXTsKLWV4dGVybiB1OCBDY3gyUW9zSW5mb1tdOwotZXh0ZXJuIHU4IFJBTElOS19PVUlbXTsKLWV4dGVybiB1OCBCUk9BRENPTV9PVUlbXTsKLQotLyoKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIERlc2NyaXB0aW9uOgotICAgICAgICBNTE1FIG1lc3NhZ2Ugc2FuaXR5IGNoZWNrCi0gICAgUmV0dXJuOgotICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotQk9PTEVBTiBNbG1lU3RhcnRSZXFTYW5pdHkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgdm9pZCAqIE1zZywKLQkJCSAgIHVuc2lnbmVkIGxvbmcgTXNnTGVuLAotCQkJICAgY2hhciBTc2lkW10sIHU4ICogcFNzaWRMZW4pCi17Ci0Jc3RydWN0IHJ0X21sbWVfc3RhcnRfcmVxICpJbmZvOwotCi0JSW5mbyA9IChzdHJ1Y3QgcnRfbWxtZV9zdGFydF9yZXEgKikoTXNnKTsKLQotCWlmIChJbmZvLT5Tc2lkTGVuID4gTUFYX0xFTl9PRl9TU0lEKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiTWxtZVN0YXJ0UmVxU2FuaXR5IGZhaWwgLSB3cm9uZyBTU0lEIGxlbmd0aFxuIikpOwotCQlyZXR1cm4gRkFMU0U7Ci0JfQotCi0JKnBTc2lkTGVuID0gSW5mby0+U3NpZExlbjsKLQlOZGlzTW92ZU1lbW9yeShTc2lkLCBJbmZvLT5Tc2lkLCAqcFNzaWRMZW4pOwotCi0JcmV0dXJuIFRSVUU7Ci19Ci0KLS8qCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBEZXNjcmlwdGlvbjoKLSAgICAgICAgTUxNRSBtZXNzYWdlIHNhbml0eSBjaGVjawotICAgIFJldHVybjoKLSAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQotCi0gICAgSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi1CT09MRUFOIFBlZXJBc3NvY1JzcFNhbml0eShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHZvaWQgKiBwTXNnLCB1bnNpZ25lZCBsb25nIE1zZ0xlbiwgdTggKnBBZGRyMiwgdTE2ICogcENhcGFiaWxpdHlJbmZvLCB1MTYgKiBwU3RhdHVzLCB1MTYgKiBwQWlkLCB1OCBTdXBSYXRlW10sIHU4ICogcFN1cFJhdGVMZW4sIHU4IEV4dFJhdGVbXSwgdTggKiBwRXh0UmF0ZUxlbiwgc3RydWN0IHJ0X2h0X2NhcGFiaWxpdHlfaWUgKiBwSHRDYXBhYmlsaXR5LCBzdHJ1Y3QgcnRfYWRkX2h0X2luZm9faWUgKiBwQWRkSHRJbmZvLAkvKiBBUCBtaWdodCB1c2UgdGhpcyBhZGRpdGlvbmFsIGh0IGluZm8gSUUgKi8KLQkJCSAgIHU4ICogcEh0Q2FwYWJpbGl0eUxlbiwKLQkJCSAgIHU4ICogcEFkZEh0SW5mb0xlbiwKLQkJCSAgIHU4ICogcE5ld0V4dENoYW5uZWxPZmZzZXQsCi0JCQkgICBzdHJ1Y3QgcnRfZWRjYV9wYXJtICpwRWRjYVBhcm0sIHU4ICogcENraXBGbGFnKQotewotCWNoYXIgSWVUeXBlLCAqUHRyOwotCXN0cnVjdCBydF9mcmFtZV84MDJfMTEgKiBwRnJhbWUgPSAoc3RydWN0IHJ0X2ZyYW1lXzgwMl8xMSAqKSBwTXNnOwotCXN0cnVjdCBydF9laWQgKiBwRWlkOwotCXVuc2lnbmVkIGxvbmcgTGVuZ3RoID0gMDsKLQotCSpwTmV3RXh0Q2hhbm5lbE9mZnNldCA9IDB4ZmY7Ci0JKnBIdENhcGFiaWxpdHlMZW4gPSAwOwotCSpwQWRkSHRJbmZvTGVuID0gMDsKLQlDT1BZX01BQ19BRERSKHBBZGRyMiwgcEZyYW1lLT5IZHIuQWRkcjIpOwotCVB0ciA9IChjaGFyICopcEZyYW1lLT5PY3RldDsKLQlMZW5ndGggKz0gTEVOR1RIXzgwMl8xMTsKLQotCU5kaXNNb3ZlTWVtb3J5KHBDYXBhYmlsaXR5SW5mbywgJnBGcmFtZS0+T2N0ZXRbMF0sIDIpOwotCUxlbmd0aCArPSAyOwotCU5kaXNNb3ZlTWVtb3J5KHBTdGF0dXMsICZwRnJhbWUtPk9jdGV0WzJdLCAyKTsKLQlMZW5ndGggKz0gMjsKLQkqcENraXBGbGFnID0gMDsKLQkqcEV4dFJhdGVMZW4gPSAwOwotCXBFZGNhUGFybS0+YlZhbGlkID0gRkFMU0U7Ci0KLQlpZiAoKnBTdGF0dXMgIT0gTUxNRV9TVUNDRVNTKQotCQlyZXR1cm4gVFJVRTsKLQotCU5kaXNNb3ZlTWVtb3J5KHBBaWQsICZwRnJhbWUtPk9jdGV0WzRdLCAyKTsKLQlMZW5ndGggKz0gMjsKLQotCS8qIEFpZCBhbHJlYWR5IHN3YXBwZWQgYnl0ZSBvcmRlciBpbiBSVE1QRnJhbWVFbmRpYW5DaGFuZ2UoKSBmb3IgYmlnIGVuZGlhbiBwbGF0Zm9ybSAqLwotCSpwQWlkID0gKCpwQWlkKSAmIDB4M2ZmZjsJLyogQUlEIGlzIGxvdyAxNC1iaXQgKi8KLQotCS8qIC0tIGdldCBzdXBwb3J0ZWQgcmF0ZXMgZnJvbSBwYXlsb2FkIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVyICovCi0JSWVUeXBlID0gcEZyYW1lLT5PY3RldFs2XTsKLQkqcFN1cFJhdGVMZW4gPSBwRnJhbWUtPk9jdGV0WzddOwotCWlmICgoSWVUeXBlICE9IElFX1NVUFBfUkFURVMpCi0JICAgIHx8ICgqcFN1cFJhdGVMZW4gPiBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUykpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJQZWVyQXNzb2NSc3BTYW5pdHkgZmFpbCAtIHdyb25nIFN1cHBvcnRlZFJhdGVzIElFXG4iKSk7Ci0JCXJldHVybiBGQUxTRTsKLQl9IGVsc2UKLQkJTmRpc01vdmVNZW1vcnkoU3VwUmF0ZSwgJnBGcmFtZS0+T2N0ZXRbOF0sICpwU3VwUmF0ZUxlbik7Ci0KLQlMZW5ndGggPSBMZW5ndGggKyAyICsgKnBTdXBSYXRlTGVuOwotCi0JLyogbWFueSBBUCBpbXBsZW1lbnQgcHJvcHJpZXRhcnkgSUVzIGluIG5vbi1zdGFuZGFyZCBvcmRlciwgd2UnZCBiZXR0ZXIgKi8KLQkvKiB0b2xlcmF0ZSBtaXMtb3JkZXJlZCBJRXMgdG8gZ2V0IGJlc3QgY29tcGF0aWJpbGl0eSAqLwotCXBFaWQgPSAoc3RydWN0IHJ0X2VpZCAqKSAmIHBGcmFtZS0+T2N0ZXRbOCArICgqcFN1cFJhdGVMZW4pXTsKLQotCS8qIGdldCB2YXJpYWJsZSBmaWVsZHMgZnJvbSBwYXlsb2FkIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVyICovCi0Jd2hpbGUgKChMZW5ndGggKyAyICsgcEVpZC0+TGVuKSA8PSBNc2dMZW4pIHsKLQkJc3dpdGNoIChwRWlkLT5FaWQpIHsKLQkJY2FzZSBJRV9FWFRfU1VQUF9SQVRFUzoKLQkJCWlmIChwRWlkLT5MZW4gPD0gTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVMpIHsKLQkJCQlOZGlzTW92ZU1lbW9yeShFeHRSYXRlLCBwRWlkLT5PY3RldCwgcEVpZC0+TGVuKTsKLQkJCQkqcEV4dFJhdGVMZW4gPSBwRWlkLT5MZW47Ci0JCQl9Ci0JCQlicmVhazsKLQotCQljYXNlIElFX0hUX0NBUDoKLQkJY2FzZSBJRV9IVF9DQVAyOgotCQkJaWYgKHBFaWQtPkxlbiA+PSBTSVpFX0hUX0NBUF9JRSkJLypOb3RlOiBhbGxvdyBleHRlbnNpb24hICovCi0JCQl7Ci0JCQkJTmRpc01vdmVNZW1vcnkocEh0Q2FwYWJpbGl0eSwgcEVpZC0+T2N0ZXQsCi0JCQkJCSAgICAgICBTSVpFX0hUX0NBUF9JRSk7Ci0KLQkJCQkqKHUxNiAqKSAoJnBIdENhcGFiaWxpdHktPkh0Q2FwSW5mbykgPQotCQkJCSAgICBjcHUybGUxNigqKHUxNiAqKQotCQkJCQkgICAgICgmcEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvKSk7Ci0JCQkJKih1MTYgKikgKCZwSHRDYXBhYmlsaXR5LT5FeHRIdENhcEluZm8pID0KLQkJCQkgICAgY3B1MmxlMTYoKih1MTYgKikKLQkJCQkJICAgICAoJnBIdENhcGFiaWxpdHktPkV4dEh0Q2FwSW5mbykpOwotCi0JCQkJKnBIdENhcGFiaWxpdHlMZW4gPSBTSVpFX0hUX0NBUF9JRTsKLQkJCX0gZWxzZSB7Ci0JCQkJREJHUFJJTlQoUlRfREVCVUdfV0FSTiwKLQkJCQkJICgiUGVlckFzc29jUnNwU2FuaXR5IC0gd3JvbmcgSUVfSFRfQ0FQLiBcbiIpKTsKLQkJCX0KLQotCQkJYnJlYWs7Ci0JCWNhc2UgSUVfQUREX0hUOgotCQljYXNlIElFX0FERF9IVDI6Ci0JCQlpZiAocEVpZC0+TGVuID49IHNpemVvZihzdHJ1Y3QgcnRfYWRkX2h0X2luZm9faWUpKSB7Ci0JCQkJLyogVGhpcyBJRSBhbGxvd3MgZXh0ZW5zaW9uLCBidXQgd2UgY2FuIGlnbm9yZSBleHRyYSBieXRlcyBiZXlvbmQgb3VyIGtub3dsZWRnZSAsIHNvIG9ubHkgKi8KLQkJCQkvKiBjb3B5IGZpcnN0IHNpemVvZihzdHJ1Y3QgcnRfYWRkX2h0X2luZm9faWUpICovCi0JCQkJTmRpc01vdmVNZW1vcnkocEFkZEh0SW5mbywgcEVpZC0+T2N0ZXQsCi0JCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHJ0X2FkZF9odF9pbmZvX2llKSk7Ci0KLQkJCQkqKHUxNiAqKSAoJnBBZGRIdEluZm8tPkFkZEh0SW5mbzIpID0KLQkJCQkgICAgY3B1MmxlMTYoKih1MTYgKikKLQkJCQkJICAgICAoJnBBZGRIdEluZm8tPkFkZEh0SW5mbzIpKTsKLQkJCQkqKHUxNiAqKSAoJnBBZGRIdEluZm8tPkFkZEh0SW5mbzMpID0KLQkJCQkgICAgY3B1MmxlMTYoKih1MTYgKikKLQkJCQkJICAgICAoJnBBZGRIdEluZm8tPkFkZEh0SW5mbzMpKTsKLQotCQkJCSpwQWRkSHRJbmZvTGVuID0gU0laRV9BRERfSFRfSU5GT19JRTsKLQkJCX0gZWxzZSB7Ci0JCQkJREJHUFJJTlQoUlRfREVCVUdfV0FSTiwKLQkJCQkJICgiUGVlckFzc29jUnNwU2FuaXR5IC0gd3JvbmcgSUVfQUREX0hULiBcbiIpKTsKLQkJCX0KLQotCQkJYnJlYWs7Ci0JCWNhc2UgSUVfU0VDT05EQVJZX0NIX09GRlNFVDoKLQkJCWlmIChwRWlkLT5MZW4gPT0gMSkgewotCQkJCSpwTmV3RXh0Q2hhbm5lbE9mZnNldCA9IHBFaWQtPk9jdGV0WzBdOwotCQkJfSBlbHNlIHsKLQkJCQlEQkdQUklOVChSVF9ERUJVR19XQVJOLAotCQkJCQkgKCJQZWVyQXNzb2NSc3BTYW5pdHkgLSB3cm9uZyBJRV9TRUNPTkRBUllfQ0hfT0ZGU0VULiBcbiIpKTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgSUVfVkVORE9SX1NQRUNJRklDOgotCQkJLyogaGFuZGxlIFdNRSBQQVJBTVRFUiBFTEVNRU5UICovCi0JCQlpZiAoTmRpc0VxdWFsTWVtb3J5KHBFaWQtPk9jdGV0LCBXTUVfUEFSTV9FTEVNLCA2KQotCQkJICAgICYmIChwRWlkLT5MZW4gPT0gMjQpKSB7Ci0JCQkJdTggKnB0cjsKLQkJCQlpbnQgaTsKLQotCQkJCS8qIHBhcnNpbmcgRURDQSBwYXJhbWV0ZXJzICovCi0JCQkJcEVkY2FQYXJtLT5iVmFsaWQgPSBUUlVFOwotCQkJCXBFZGNhUGFybS0+YlFBY2sgPSBGQUxTRTsJLyogcEVpZC0+T2N0ZXRbMF0gJiAweDEwOyAqLwotCQkJCXBFZGNhUGFybS0+YlF1ZXVlUmVxdWVzdCA9IEZBTFNFOwkvKiBwRWlkLT5PY3RldFswXSAmIDB4MjA7ICovCi0JCQkJcEVkY2FQYXJtLT5iVHhvcFJlcXVlc3QgPSBGQUxTRTsJLyogcEVpZC0+T2N0ZXRbMF0gJiAweDQwOyAqLwotCQkJCS8qcEVkY2FQYXJtLT5iTW9yZURhdGFBY2sgICAgPSBGQUxTRTsgLy8gcEVpZC0+T2N0ZXRbMF0gJiAweDgwOyAqLwotCQkJCXBFZGNhUGFybS0+RWRjYVVwZGF0ZUNvdW50ID0KLQkJCQkgICAgcEVpZC0+T2N0ZXRbNl0gJiAweDBmOwotCQkJCXBFZGNhUGFybS0+YkFQU0RDYXBhYmxlID0KLQkJCQkgICAgKHBFaWQtPk9jdGV0WzZdICYgMHg4MCkgPyAxIDogMDsKLQkJCQlwdHIgPSAodTggKikmIHBFaWQtPk9jdGV0WzhdOwotCQkJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJCQkJdTggYWNpID0gKCpwdHIgJiAweDYwKSA+PiA1OwkvKiBiNX42IGlzIEFDIElOREVYICovCi0JCQkJCXBFZGNhUGFybS0+YkFDTVthY2ldID0gKCgoKnB0cikgJiAweDEwKSA9PSAweDEwKTsJLyogYjUgaXMgQUNNICovCi0JCQkJCXBFZGNhUGFybS0+QWlmc25bYWNpXSA9ICgqcHRyKSAmIDB4MGY7CS8qIGIwfjMgaXMgQUlGU04gKi8KLQkJCQkJcEVkY2FQYXJtLT5Dd21pblthY2ldID0gKihwdHIgKyAxKSAmIDB4MGY7CS8qIGIwfjQgaXMgQ3dtaW4gKi8KLQkJCQkJcEVkY2FQYXJtLT5Dd21heFthY2ldID0gKihwdHIgKyAxKSA+PiA0OwkvKiBiNX44IGlzIEN3bWF4ICovCi0JCQkJCXBFZGNhUGFybS0+VHhvcFthY2ldID0gKihwdHIgKyAyKSArIDI1NiAqICgqKHB0ciArIDMpKTsJLyogaW4gdW5pdCBvZiAzMi11cyAqLwotCQkJCQlwdHIgKz0gNDsJLyogcG9pbnQgdG8gbmV4dCBBQyAqLwotCQkJCX0KLQkJCX0KLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiUGVlckFzc29jUnNwU2FuaXR5IC0gaWdub3JlIHVucmVjb2duaXplZCBFSUQgPSAlZFxuIiwKLQkJCQkgIHBFaWQtPkVpZCkpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlMZW5ndGggPSBMZW5ndGggKyAyICsgcEVpZC0+TGVuOwotCQlwRWlkID0gKHN0cnVjdCBydF9laWQgKikgKCh1OCAqKSBwRWlkICsgMiArIHBFaWQtPkxlbik7Ci0JfQotCi0JcmV0dXJuIFRSVUU7Ci19Ci0KLS8qCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBEZXNjcmlwdGlvbjoKLSAgICAgICAgTUxNRSBtZXNzYWdlIHNhbml0eSBjaGVjawotICAgIFJldHVybjoKLSAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi1CT09MRUFOIFBlZXJQcm9iZVJlcVNhbml0eShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICB2b2lkICogTXNnLAotCQkJICAgdW5zaWduZWQgbG9uZyBNc2dMZW4sCi0JCQkgICB1OCAqcEFkZHIyLAotCQkJICAgY2hhciBTc2lkW10sIHU4ICogcFNzaWRMZW4pCi17Ci0JdTggSWR4OwotCXU4IFJhdGVMZW47Ci0JY2hhciBJZVR5cGU7Ci0Jc3RydWN0IHJ0X2ZyYW1lXzgwMl8xMSAqIHBGcmFtZSA9IChzdHJ1Y3QgcnRfZnJhbWVfODAyXzExICopIE1zZzsKLQotCUNPUFlfTUFDX0FERFIocEFkZHIyLCBwRnJhbWUtPkhkci5BZGRyMik7Ci0KLQlpZiAoKHBGcmFtZS0+T2N0ZXRbMF0gIT0gSUVfU1NJRCkKLQkgICAgfHwgKHBGcmFtZS0+T2N0ZXRbMV0gPiBNQVhfTEVOX09GX1NTSUQpKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiUGVlclByb2JlUmVxU2FuaXR5IGZhaWwgLSB3cm9uZyBTU0lEIElFKFR5cGU9JWQsTGVuPSVkKVxuIiwKLQkJCSAgcEZyYW1lLT5PY3RldFswXSwgcEZyYW1lLT5PY3RldFsxXSkpOwotCQlyZXR1cm4gRkFMU0U7Ci0JfQotCi0JKnBTc2lkTGVuID0gcEZyYW1lLT5PY3RldFsxXTsKLQlOZGlzTW92ZU1lbW9yeShTc2lkLCAmcEZyYW1lLT5PY3RldFsyXSwgKnBTc2lkTGVuKTsKLQotCUlkeCA9ICpwU3NpZExlbiArIDI7Ci0KLQkvKiAtLSBnZXQgc3VwcG9ydGVkIHJhdGVzIGZyb20gcGF5bG9hZCBhbmQgYWR2YW5jZSB0aGUgcG9pbnRlciAqLwotCUllVHlwZSA9IHBGcmFtZS0+T2N0ZXRbSWR4XTsKLQlSYXRlTGVuID0gcEZyYW1lLT5PY3RldFtJZHggKyAxXTsKLQlpZiAoSWVUeXBlICE9IElFX1NVUFBfUkFURVMpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJQZWVyUHJvYmVSZXFTYW5pdHkgZmFpbCAtIHdyb25nIFN1cHBvcnRSYXRlcyBJRShUeXBlPSVkLExlbj0lZClcbiIsCi0JCQkgIHBGcmFtZS0+T2N0ZXRbSWR4XSwgcEZyYW1lLT5PY3RldFtJZHggKyAxXSkpOwotCQlyZXR1cm4gRkFMU0U7Ci0JfSBlbHNlIHsKLQkJaWYgKChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUcpICYmIChSYXRlTGVuIDwgOCkpCi0JCQlyZXR1cm4gKEZBTFNFKTsKLQl9Ci0KLQlyZXR1cm4gVFJVRTsKLX0KLQotLyoKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIERlc2NyaXB0aW9uOgotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi1CT09MRUFOIEdldFRpbUJpdChjaGFyICogUHRyLAotCQkgIHUxNiBBaWQsCi0JCSAgdTggKiBUaW1MZW4sCi0JCSAgdTggKiBCY2FzdEZsYWcsCi0JCSAgdTggKiBEdGltQ291bnQsCi0JCSAgdTggKiBEdGltUGVyaW9kLCB1OCAqIE1lc3NhZ2VUb01lKQotewotCXU4IEJpdENudGwsIE4xLCBOMiwgTXlCeXRlLCBNeUJpdDsKLQljaGFyICpJZHhQdHI7Ci0KLQlJZHhQdHIgPSBQdHI7Ci0KLQlJZHhQdHIrKzsKLQkqVGltTGVuID0gKklkeFB0cjsKLQotCS8qIGdldCBEVElNIENvdW50IGZyb20gVElNIGVsZW1lbnQgKi8KLQlJZHhQdHIrKzsKLQkqRHRpbUNvdW50ID0gKklkeFB0cjsKLQotCS8qIGdldCBEVElNIFBlcmlvZCBmcm9tIFRJTSBlbGVtZW50ICovCi0JSWR4UHRyKys7Ci0JKkR0aW1QZXJpb2QgPSAqSWR4UHRyOwotCi0JLyogZ2V0IEJpdG1hcCBDb250cm9sIGZyb20gVElNIGVsZW1lbnQgKi8KLQlJZHhQdHIrKzsKLQlCaXRDbnRsID0gKklkeFB0cjsKLQotCWlmICgoKkR0aW1Db3VudCA9PSAwKSAmJiAoQml0Q250bCAmIDB4MDEpKQotCQkqQmNhc3RGbGFnID0gVFJVRTsKLQllbHNlCi0JCSpCY2FzdEZsYWcgPSBGQUxTRTsKLQotCS8qIFBhcnNlIFBhcnRpYWwgVmlydHVhbCBCaXRtYXAgZnJvbSBUSU0gZWxlbWVudCAqLwotCU4xID0gQml0Q250bCAmIDB4ZmU7CS8qIE4xIGlzIHRoZSBmaXJzdCBiaXRtYXAgYnl0ZSMgKi8KLQlOMiA9ICpUaW1MZW4gLSA0ICsgTjE7CS8qIE4yIGlzIHRoZSBsYXN0IGJpdG1hcCBieXRlIyAqLwotCi0JaWYgKChBaWQgPCAoTjEgPDwgMykpIHx8IChBaWQgPj0gKChOMiArIDEpIDw8IDMpKSkKLQkJKk1lc3NhZ2VUb01lID0gRkFMU0U7Ci0JZWxzZSB7Ci0JCU15Qnl0ZSA9IChBaWQgPj4gMykgLSBOMTsJLyogbXkgYnl0ZSBwb3NpdGlvbiBpbiB0aGUgYml0bWFwIGJ5dGUtc3RyZWFtICovCi0JCU15Qml0ID0gQWlkICUgMTYgLSAoKE15Qnl0ZSAmIDB4MDEpID8gOCA6IDApOwotCi0JCUlkeFB0ciArPSAoTXlCeXRlICsgMSk7Ci0KLQkJLyppZiAoKklkeFB0cikgKi8KLQkJLyogICAgREJHUFJJTlQoUlRfREVCVUdfV0FSTiwgKCJUSU0gYml0bWFwID0gMHglMDJ4XG4iLCAqSWR4UHRyKSk7ICovCi0KLQkJaWYgKCpJZHhQdHIgJiAoMHgwMSA8PCBNeUJpdCkpCi0JCQkqTWVzc2FnZVRvTWUgPSBUUlVFOwotCQllbHNlCi0JCQkqTWVzc2FnZVRvTWUgPSBGQUxTRTsKLQl9Ci0KLQlyZXR1cm4gVFJVRTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhL3N5bmMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhL3N5bmMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzA1NGJhMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YS9zeW5jLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTY4ICswLDAgQEAKLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUmFsaW5rIFRlY2ggSW5jLgotICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAotICogSHNpbmNodSBDb3VudHkgMzAyLAotICogVGFpd2FuLCBSLk8uQy4KLSAqCi0gKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0JTW9kdWxlIE5hbWU6Ci0Jc3luYy5jCi0KLQlBYnN0cmFjdDoKLQotCVJldmlzaW9uIEhpc3Rvcnk6Ci0JV2hvCQkJV2hlbgkJCVdoYXQKLQktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JSm9obiBDaGFuZwkJMjAwNC0wOS0wMSAgICAgIAltb2RpZmllZCBmb3IgcnQyNTYxLzI2NjEKLQlKYW4gTGVlCQkJMjAwNi0wOC0wMSAgICAgIAltb2RpZmllZCBmb3IgcnQyODYwIGZvciA4MDIuMTFuCi0JSnVzdGluIFAuIE1hdHRvY2sJMTEvMDcvMjAxMAkJRml4IHR5cG9zCi0qLwotI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgotCi0jZGVmaW5lIEFESE9DX0VOVFJZX0JFQUNPTl9MT1NUX1RJTUUJKDIqT1NfSFopCS8qIDIgc2VjICovCi0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJVGhlIHN5bmMgc3RhdGUgbWFjaGluZSwKLQlQYXJhbWV0ZXJzOgotCQlTbSAtIHBvaW50ZXIgdG8gdGhlIHN0YXRlIG1hY2hpbmUKLQlOb3RlOgotCQl0aGUgc3RhdGUgbWFjaGluZSBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmcKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgU3luY1N0YXRlTWFjaGluZUluaXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICBzdHJ1Y3QgcnRfc3RhdGVfbWFjaGluZSAqU20sIE9VVCBTVEFURV9NQUNISU5FX0ZVTkMgVHJhbnNbXSkKLXsKLQlTdGF0ZU1hY2hpbmVJbml0KFNtLCBUcmFucywgTUFYX1NZTkNfU1RBVEUsIE1BWF9TWU5DX01TRywKLQkJCSAoU1RBVEVfTUFDSElORV9GVU5DKSBEcm9wLCBTWU5DX0lETEUsCi0JCQkgU1lOQ19NQUNISU5FX0JBU0UpOwotCi0JLyogY29sdW1uIDEgKi8KLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIFNZTkNfSURMRSwgTVQyX01MTUVfU0NBTl9SRVEsCi0JCQkgICAgICAoU1RBVEVfTUFDSElORV9GVU5DKSBNbG1lU2NhblJlcUFjdGlvbik7Ci0JU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBTWU5DX0lETEUsIE1UMl9NTE1FX0pPSU5fUkVRLAotCQkJICAgICAgKFNUQVRFX01BQ0hJTkVfRlVOQykgTWxtZUpvaW5SZXFBY3Rpb24pOwotCVN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgU1lOQ19JRExFLCBNVDJfTUxNRV9TVEFSVF9SRVEsCi0JCQkgICAgICAoU1RBVEVfTUFDSElORV9GVU5DKSBNbG1lU3RhcnRSZXFBY3Rpb24pOwotCVN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgU1lOQ19JRExFLCBNVDJfUEVFUl9CRUFDT04sCi0JCQkgICAgICAoU1RBVEVfTUFDSElORV9GVU5DKSBQZWVyQmVhY29uKTsKLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIFNZTkNfSURMRSwgTVQyX1BFRVJfUFJPQkVfUkVRLAotCQkJICAgICAgKFNUQVRFX01BQ0hJTkVfRlVOQykgUGVlclByb2JlUmVxQWN0aW9uKTsKLQotCS8qY29sdW1uIDIgKi8KLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIEpPSU5fV0FJVF9CRUFDT04sIE1UMl9NTE1FX1NDQU5fUkVRLAotCQkJICAgICAgKFNUQVRFX01BQ0hJTkVfRlVOQykgSW52YWxpZFN0YXRlV2hlblNjYW4pOwotCVN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgSk9JTl9XQUlUX0JFQUNPTiwgTVQyX01MTUVfSk9JTl9SRVEsCi0JCQkgICAgICAoU1RBVEVfTUFDSElORV9GVU5DKSBJbnZhbGlkU3RhdGVXaGVuSm9pbik7Ci0JU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBKT0lOX1dBSVRfQkVBQ09OLCBNVDJfTUxNRV9TVEFSVF9SRVEsCi0JCQkgICAgICAoU1RBVEVfTUFDSElORV9GVU5DKSBJbnZhbGlkU3RhdGVXaGVuU3RhcnQpOwotCVN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgSk9JTl9XQUlUX0JFQUNPTiwgTVQyX1BFRVJfQkVBQ09OLAotCQkJICAgICAgKFNUQVRFX01BQ0hJTkVfRlVOQykgUGVlckJlYWNvbkF0Sm9pbkFjdGlvbik7Ci0JU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBKT0lOX1dBSVRfQkVBQ09OLCBNVDJfQkVBQ09OX1RJTUVPVVQsCi0JCQkgICAgICAoU1RBVEVfTUFDSElORV9GVU5DKSBCZWFjb25UaW1lb3V0QXRKb2luQWN0aW9uKTsKLQotCS8qIGNvbHVtbiAzICovCi0JU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBTQ0FOX0xJU1RFTiwgTVQyX01MTUVfU0NBTl9SRVEsCi0JCQkgICAgICAoU1RBVEVfTUFDSElORV9GVU5DKSBJbnZhbGlkU3RhdGVXaGVuU2Nhbik7Ci0JU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBTQ0FOX0xJU1RFTiwgTVQyX01MTUVfSk9JTl9SRVEsCi0JCQkgICAgICAoU1RBVEVfTUFDSElORV9GVU5DKSBJbnZhbGlkU3RhdGVXaGVuSm9pbik7Ci0JU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBTQ0FOX0xJU1RFTiwgTVQyX01MTUVfU1RBUlRfUkVRLAotCQkJICAgICAgKFNUQVRFX01BQ0hJTkVfRlVOQykgSW52YWxpZFN0YXRlV2hlblN0YXJ0KTsKLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIFNDQU5fTElTVEVOLCBNVDJfUEVFUl9CRUFDT04sCi0JCQkgICAgICAoU1RBVEVfTUFDSElORV9GVU5DKSBQZWVyQmVhY29uQXRTY2FuQWN0aW9uKTsKLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIFNDQU5fTElTVEVOLCBNVDJfUEVFUl9QUk9CRV9SU1AsCi0JCQkgICAgICAoU1RBVEVfTUFDSElORV9GVU5DKSBQZWVyQmVhY29uQXRTY2FuQWN0aW9uKTsKLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIFNDQU5fTElTVEVOLCBNVDJfU0NBTl9USU1FT1VULAotCQkJICAgICAgKFNUQVRFX01BQ0hJTkVfRlVOQykgU2NhblRpbWVvdXRBY3Rpb24pOwotCi0JLyogdGltZXIgaW5pdCAqLwotCVJUTVBJbml0VGltZXIocEFkLCAmcEFkLT5NbG1lQXV4LkJlYWNvblRpbWVyLAotCQkgICAgICBHRVRfVElNRVJfRlVOQ1RJT04oQmVhY29uVGltZW91dCksIHBBZCwgRkFMU0UpOwotCVJUTVBJbml0VGltZXIocEFkLCAmcEFkLT5NbG1lQXV4LlNjYW5UaW1lciwKLQkJICAgICAgR0VUX1RJTUVSX0ZVTkNUSU9OKFNjYW5UaW1lb3V0KSwgcEFkLCBGQUxTRSk7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJQmVhY29uIHRpbWVvdXQgaGFuZGxlciwgZXhlY3V0ZWQgaW4gdGltZXIgdGhyZWFkCi0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgQmVhY29uVGltZW91dCh2b2lkICpTeXN0ZW1TcGVjaWZpYzEsCi0JCSAgIHZvaWQgKkZ1bmN0aW9uQ29udGV4dCwKLQkJICAgdm9pZCAqU3lzdGVtU3BlY2lmaWMyLCB2b2lkICpTeXN0ZW1TcGVjaWZpYzMpCi17Ci0Jc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkID0gKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKilGdW5jdGlvbkNvbnRleHQ7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTWU5DIC0gQmVhY29uVGltZW91dFxuIikpOwotCi0JLyogRG8gbm90aGluZyBpZiB0aGUgZHJpdmVyIGlzIHN0YXJ0aW5nIGhhbHQgc3RhdGUuICovCi0JLyogVGhpcyBtaWdodCBoYXBwZW4gd2hlbiB0aW1lciBhbHJlYWR5IGJlZW4gZmlyZWQgYmVmb3JlIGNhbmNlbCB0aW1lciB3aXRoIG1sbWVoYWx0ICovCi0JaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKSkKLQkJcmV0dXJuOwotCi0JaWYgKChwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPT0gQldfNDApCi0JICAgICkgewotCQl1OCBCQlBWYWx1ZSA9IDA7Ci0JCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwsIEZBTFNFKTsKLQkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwpOwotCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsICZCQlBWYWx1ZSk7Ci0JCUJCUFZhbHVlICY9ICh+MHgxOCk7Ci0JCUJCUFZhbHVlIHw9IDB4MTA7Ci0JCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsIEJCUFZhbHVlKTsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJTWU5DIC0gRW5kIG9mIFNDQU4sIHJlc3RvcmUgdG8gNDBNSHogY2hhbm5lbCAlZCwgVG90YWwgQlNTWyUwMmRdXG4iLAotCQkJICBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCwgcEFkLT5TY2FuVGFiLkJzc05yKSk7Ci0JfQotCi0JTWxtZUVucXVldWUocEFkLCBTWU5DX1NUQVRFX01BQ0hJTkUsIE1UMl9CRUFDT05fVElNRU9VVCwgMCwgTlVMTCk7Ci0JUlRNUF9NTE1FX0hBTkRMRVIocEFkKTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlTY2FuIHRpbWVvdXQgaGFuZGxlciwgZXhlY3V0ZWQgaW4gdGltZXIgdGhyZWFkCi0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgU2NhblRpbWVvdXQodm9pZCAqU3lzdGVtU3BlY2lmaWMxLAotCQkgdm9pZCAqRnVuY3Rpb25Db250ZXh0LAotCQkgdm9pZCAqU3lzdGVtU3BlY2lmaWMyLCB2b2lkICpTeXN0ZW1TcGVjaWZpYzMpCi17Ci0Jc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkID0gKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKilGdW5jdGlvbkNvbnRleHQ7Ci0KLQkvKiBEbyBub3RoaW5nIGlmIHRoZSBkcml2ZXIgaXMgc3RhcnRpbmcgaGFsdCBzdGF0ZS4gKi8KLQkvKiBUaGlzIG1pZ2h0IGhhcHBlbiB3aGVuIHRpbWVyIGFscmVhZHkgYmVlbiBmaXJlZCBiZWZvcmUgY2FuY2VsIHRpbWVyIHdpdGggbWxtZWhhbHQgKi8KLQlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpKQotCQlyZXR1cm47Ci0KLQlpZiAoTWxtZUVucXVldWUocEFkLCBTWU5DX1NUQVRFX01BQ0hJTkUsIE1UMl9TQ0FOX1RJTUVPVVQsIDAsIE5VTEwpKSB7Ci0JCVJUTVBfTUxNRV9IQU5ETEVSKHBBZCk7Ci0JfSBlbHNlIHsKLQkJLyogVG8gcHJldmVudCBTeW5jTWFjaGluZS5DdXJyU3RhdGUgaXMgU0NBTl9MSVNURU4gZm9yZXZlci4gKi8KLQkJcEFkLT5NbG1lQXV4LkNoYW5uZWwgPSAwOwotCQlTY2FuTmV4dENoYW5uZWwocEFkKTsKLQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50KSB7Ci0JCQlSVE1QU2VuZFdpcmVsZXNzRXZlbnQocEFkLAotCQkJCQkgICAgICBJV19TQ0FOX0VOUVVFVUVfRkFJTF9FVkVOVF9GTEFHLAotCQkJCQkgICAgICBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLgotCQkJCQkgICAgICBBZGRyLCBCU1MwLCAwKTsKLQkJfQotCX0KLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlNTE1FIFNDQU4gcmVxIHN0YXRlIG1hY2hpbmUgcHJvY2VkdXJlCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotdm9pZCBNbG1lU2NhblJlcUFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pCi17Ci0JdTggU3NpZFtNQVhfTEVOX09GX1NTSURdLCBTc2lkTGVuLCBTY2FuVHlwZSwgQnNzVHlwZSwgQkJQVmFsdWUgPSAwOwotCUJPT0xFQU4gVGltZXJDYW5jZWxsZWQ7Ci0JdW5zaWduZWQgbG9uZyBOb3c7Ci0JdTE2IFN0YXR1czsKLQlzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSAqIHBIZHI4MDIxMTsKLQl1OCAqcE91dEJ1ZmZlciA9IE5VTEw7Ci0JaW50IE5TdGF0dXM7Ci0KLQkvKiBDaGVjayB0aGUgdG90YWwgc2NhbiB0cmllcyBmb3Igb25lIHNpbmdsZSBPSUQgY29tbWFuZCAqLwotCS8qIElmIHRoaXMgaXMgdGhlIENDWCAyLjAgQ2FzZSwgc2tpcCB0aGF0ISAqLwotCWlmICghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1NUQVJUX1VQKSkgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIlNZTkMgLSBNbG1lU2NhblJlcUFjdGlvbiBiZWZvcmUgU3RhcnR1cFxuIikpOwotCQlyZXR1cm47Ci0JfQotCS8qIEluY3JlYXNlIHRoZSBzY2FuIHJldHJ5IGNvdW50ZXJzLiAqLwotCXBBZC0+U3RhQ2ZnLlNjYW5DbnQrKzsKLQotI2lmZGVmIFJUTVBfTUFDX1BDSQotCWlmICgoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19QQ0lFX0RFVklDRSkpICYmCi0JICAgIChJRExFX09OKHBBZCkpICYmCi0JICAgIChwQWQtPlN0YUNmZy5iUmFkaW8gPT0gVFJVRSkgJiYKLQkgICAgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9JRExFX1JBRElPX09GRikpKSB7Ci0JCWlmIChwQWQtPlN0YUNmZy5QU0NvbnRyb2wuZmllbGQuRW5hYmxlTmV3UFMgPT0gRkFMU0UpIHsKLQkJCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHgzMSwgUG93ZXJXYWtlQ0lELCAweDAwLAotCQkJCQkgICAgIDB4MDIpOwotCQkJQXNpY0NoZWNrQ29tbWFuT2socEFkLCBQb3dlcldha2VDSUQpOwotCQkJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9JRExFX1JBRElPX09GRik7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCJQU00gLSBJc3N1ZSBXYWtlIHVwIGNvbW1hbmQgXG4iKSk7Ci0JCX0gZWxzZSB7Ci0JCQlSVDI4eHhQY2lBc2ljUmFkaW9PbihwQWQsIEdVSV9JRExFX1BPV0VSX1NBVkUpOwotCQl9Ci0JfQotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotCi0JLyogZmlyc3QgY2hlY2sgdGhlIHBhcmFtZXRlciBzYW5pdHkgKi8KLQlpZiAoTWxtZVNjYW5SZXFTYW5pdHkocEFkLAotCQkJICAgICAgRWxlbS0+TXNnLAotCQkJICAgICAgRWxlbS0+TXNnTGVuLAotCQkJICAgICAgJkJzc1R5cGUsIChjaGFyICopU3NpZCwgJlNzaWRMZW4sICZTY2FuVHlwZSkpIHsKLQotCQkvKiBDaGVjayBmb3IgY2hhbm5lbCBsb2FkIGFuZCBub2lzZSBoaXN0IHJlcXVlc3QgKi8KLQkJLyogU3VzcGVuZCBNU0RVIG9ubHkgYXQgc2NhbiByZXF1ZXN0LCBub3QgdGhlIGxhc3QgdHdvIG1lbnRpb25lZCAqLwotCQkvKiBTdXNwZW5kIE1TRFUgdHJhbnNtaXNzaW9uIGhlcmUgKi8KLQkJUlRNUFN1c3BlbmRNc2R1VHJhbnNtaXNzaW9uKHBBZCk7Ci0KLQkJLyogKi8KLQkJLyogVG8gcHJldmVudCBkYXRhIGxvc3MuICovCi0JCS8qIFNlbmQgYSBOVUxMIGRhdGEgd2l0aCB0dXJuZWQgUFNNIGJpdCBvbiB0byBjdXJyZW50IGFzc29jaWF0ZWQgQVAgYmVmb3JlIFNDQU4gcHJvZ3Jlc3MuICovCi0JCS8qIEFuZCBzaG91bGQgc2VuZCBhIE5VTEwgZGF0YSB3aXRoIHR1cm5lZCBQU00gYml0IG9mZiB0byBBUCwgd2hlbiBzY2FuIHByb2dyZXNzIGRvbmUgKi8KLQkJLyogKi8KLQkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKQotCQkgICAgJiYgKElORlJBX09OKHBBZCkpKSB7Ci0JCQlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgKHZvaWQgKikmIHBPdXRCdWZmZXIpOwotCQkJaWYgKE5TdGF0dXMgPT0gTkRJU19TVEFUVVNfU1VDQ0VTUykgewotCQkJCXBIZHI4MDIxMSA9IChzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSAqKSBwT3V0QnVmZmVyOwotCQkJCU1ndE1hY0hlYWRlckluaXQocEFkLCBwSGRyODAyMTEsCi0JCQkJCQkgU1VCVFlQRV9OVUxMX0ZVTkMsIDEsCi0JCQkJCQkgcEFkLT5Db21tb25DZmcuQnNzaWQsCi0JCQkJCQkgcEFkLT5Db21tb25DZmcuQnNzaWQpOwotCQkJCXBIZHI4MDIxMS0+RHVyYXRpb24gPSAwOwotCQkJCXBIZHI4MDIxMS0+RkMuVHlwZSA9IEJUWVBFX0RBVEE7Ci0JCQkJcEhkcjgwMjExLT5GQy5Qd3JNZ210ID0gUFdSX1NBVkU7Ci0KLQkJCQkvKiBTZW5kIHVzaW5nIHByaW9yaXR5IHF1ZXVlICovCi0JCQkJTWluaXBvcnRNTVJlcXVlc3QocEFkLCAwLCBwT3V0QnVmZmVyLAotCQkJCQkJICBzaXplb2Yoc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEpKTsKLQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkJICgiTWxtZVNjYW5SZXFBY3Rpb24gLS0gU2VuZCBQU00gRGF0YSBmcmFtZSBmb3Igb2ZmIGNoYW5uZWwgUk1cbiIpKTsKLQkJCQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOwotCQkJCVJUTVB1c2VjRGVsYXkoNTAwMCk7Ci0JCQl9Ci0JCX0KLQotCQlOZGlzR2V0U3lzdGVtVXBUaW1lKCZOb3cpOwotCQlwQWQtPlN0YUNmZy5MYXN0U2NhblRpbWUgPSBOb3c7Ci0JCS8qIHJlc2V0IGFsbCB0aGUgdGltZXJzICovCi0JCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkJlYWNvblRpbWVyLCAmVGltZXJDYW5jZWxsZWQpOwotCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5TY2FuVGltZXIsICZUaW1lckNhbmNlbGxlZCk7Ci0KLQkJLyogcmVjb3JkIGRlc2lyZWQgQlNTIHBhcmFtZXRlcnMgKi8KLQkJcEFkLT5NbG1lQXV4LkJzc1R5cGUgPSBCc3NUeXBlOwotCQlwQWQtPk1sbWVBdXguU2NhblR5cGUgPSBTY2FuVHlwZTsKLQkJcEFkLT5NbG1lQXV4LlNzaWRMZW4gPSBTc2lkTGVuOwotCQlOZGlzWmVyb01lbW9yeShwQWQtPk1sbWVBdXguU3NpZCwgTUFYX0xFTl9PRl9TU0lEKTsKLQkJTmRpc01vdmVNZW1vcnkocEFkLT5NbG1lQXV4LlNzaWQsIFNzaWQsIFNzaWRMZW4pOwotCi0JCS8qIHN0YXJ0IGZyb20gdGhlIGZpcnN0IGNoYW5uZWwgKi8KLQkJcEFkLT5NbG1lQXV4LkNoYW5uZWwgPSBGaXJzdENoYW5uZWwocEFkKTsKLQotCQkvKiBMZXQgQkJQIHJlZ2lzdGVyIGF0IDIwTUh6IHRvIGRvIHNjYW4gKi8KLQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCAmQkJQVmFsdWUpOwotCQlCQlBWYWx1ZSAmPSAofjB4MTgpOwotCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCBCQlBWYWx1ZSk7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNZTkMgLSBCQlAgUjQgdG8gMjBNSHoubFxuIikpOwotCQlTY2FuTmV4dENoYW5uZWwocEFkKTsKLQl9IGVsc2UgewotCQlEQkdQUklOVF9FUlIoIlNZTkMgLSBNbG1lU2NhblJlcUFjdGlvbigpIHNhbml0eSBjaGVjayBmYWlsXG4iKTsKLQkJcEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSA9IFNZTkNfSURMRTsKLQkJU3RhdHVzID0gTUxNRV9JTlZBTElEX0ZPUk1BVDsKLQkJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX1NDQU5fQ09ORiwgMiwKLQkJCSAgICAmU3RhdHVzKTsKLQl9Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJTUxNRSBKT0lOIHJlcSBzdGF0ZSBtYWNoaW5lIHByb2NlZHVyZQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgTWxtZUpvaW5SZXFBY3Rpb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKQotewotCXU4IEJCUFZhbHVlID0gMDsKLQlzdHJ1Y3QgcnRfYnNzX2VudHJ5ICpwQnNzOwotCUJPT0xFQU4gVGltZXJDYW5jZWxsZWQ7Ci0Jc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEgSGRyODAyMTE7Ci0JaW50IE5TdGF0dXM7Ci0JdW5zaWduZWQgbG9uZyBGcmFtZUxlbiA9IDA7Ci0JdTggKnBPdXRCdWZmZXIgPSBOVUxMOwotCXU4ICpwU3VwUmF0ZSA9IE5VTEw7Ci0JdTggU3VwUmF0ZUxlbjsKLQl1OCAqcEV4dFJhdGUgPSBOVUxMOwotCXU4IEV4dFJhdGVMZW47Ci0JdTggQVN1cFJhdGVbXSA9IHsgMHg4QywgMHgxMiwgMHg5OCwgMHgyNCwgMHhiMCwgMHg0OCwgMHg2MCwgMHg2QyB9OwotCXU4IEFTdXBSYXRlTGVuID0gc2l6ZW9mKEFTdXBSYXRlKSAvIHNpemVvZih1OCk7Ci0Jc3RydWN0IHJ0X21sbWVfam9pbl9yZXEgKnBJbmZvID0gKHN0cnVjdCBydF9tbG1lX2pvaW5fcmVxICopKEVsZW0tPk1zZyk7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJICgiU1lOQyAtIE1sbWVKb2luUmVxQWN0aW9uKEJTUyAjJWxkKVxuIiwgcEluZm8tPkJzc0lkeCkpOwotCi0jaWZkZWYgUlRNUF9NQUNfUENJCi0JaWYgKChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1BDSUVfREVWSUNFKSkgJiYKLQkgICAgKElETEVfT04ocEFkKSkgJiYKLQkgICAgKHBBZC0+U3RhQ2ZnLmJSYWRpbyA9PSBUUlVFKSAmJgotCSAgICAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0lETEVfUkFESU9fT0ZGKSkpIHsKLQkJUlQyOHh4UGNpQXNpY1JhZGlvT24ocEFkLCBHVUlfSURMRV9QT1dFUl9TQVZFKTsKLQl9Ci0jZW5kaWYgLyogUlRNUF9NQUNfUENJIC8vICovCi0KLQkvKiByZXNldCBhbGwgdGhlIHRpbWVycyAqLwotCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LlNjYW5UaW1lciwgJlRpbWVyQ2FuY2VsbGVkKTsKLQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5CZWFjb25UaW1lciwgJlRpbWVyQ2FuY2VsbGVkKTsKLQotCXBCc3MgPSAmcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzRW50cnlbcEluZm8tPkJzc0lkeF07Ci0KLQkvKiByZWNvcmQgdGhlIGRlc2lyZWQgU1NJRCAmIEJTU0lEIHdlJ3JlIHdhaXRpbmcgZm9yICovCi0JQ09QWV9NQUNfQUREUihwQWQtPk1sbWVBdXguQnNzaWQsIHBCc3MtPkJzc2lkKTsKLQotCS8qIElmIEFQJ3MgU1NJRCBpcyBub3QgaGlkZGVuLCBpdCBpcyBPSyBmb3IgdXBkYXRpbmcgc3NpZCB0byBNbG1lQXV4IGFnYWluLiAqLwotCWlmIChwQnNzLT5IaWRkZW4gPT0gMCkgewotCQlSVE1QWmVyb01lbW9yeShwQWQtPk1sbWVBdXguU3NpZCwgTUFYX0xFTl9PRl9TU0lEKTsKLQkJTmRpc01vdmVNZW1vcnkocEFkLT5NbG1lQXV4LlNzaWQsIHBCc3MtPlNzaWQsIHBCc3MtPlNzaWRMZW4pOwotCQlwQWQtPk1sbWVBdXguU3NpZExlbiA9IHBCc3MtPlNzaWRMZW47Ci0JfQotCi0JcEFkLT5NbG1lQXV4LkJzc1R5cGUgPSBwQnNzLT5Cc3NUeXBlOwotCXBBZC0+TWxtZUF1eC5DaGFubmVsID0gcEJzcy0+Q2hhbm5lbDsKLQlwQWQtPk1sbWVBdXguQ2VudHJhbENoYW5uZWwgPSBwQnNzLT5DZW50cmFsQ2hhbm5lbDsKLQotCS8qIExldCBCQlAgcmVnaXN0ZXIgYXQgMjBNSHogdG8gZG8gc2NhbiAqLwotCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJkJCUFZhbHVlKTsKLQlCQlBWYWx1ZSAmPSAofjB4MTgpOwotCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsIEJCUFZhbHVlKTsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNZTkMgLSBCQlAgUjQgdG8gMjBNSHoubFxuIikpOwotCi0JLyogc3dpdGNoIGNoYW5uZWwgYW5kIHdhaXRpbmcgZm9yIGJlYWNvbiB0aW1lciAqLwotCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5NbG1lQXV4LkNoYW5uZWwsIEZBTFNFKTsKLQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPk1sbWVBdXguQ2hhbm5lbCk7Ci0JUlRNUFNldFRpbWVyKCZwQWQtPk1sbWVBdXguQmVhY29uVGltZXIsIEpPSU5fVElNRU9VVCk7Ci0KLQlkbyB7Ci0JCWlmICgoKHBBZC0+Q29tbW9uQ2ZnLmJJRUVFODAyMTFIID09IDEpICYmCi0JCSAgICAgKHBBZC0+TWxtZUF1eC5DaGFubmVsID4gMTQpICYmCi0JCSAgICAgUmFkYXJDaGFubmVsQ2hlY2socEFkLCBwQWQtPk1sbWVBdXguQ2hhbm5lbCkpCi0JCSAgICApIHsKLQkJCS8qICovCi0JCQkvKiBXZSBjYW4ndCBzZW5kIGFueSBQcm9iZSByZXF1ZXN0IGZyYW1lIHRvIG1lZXQgODAyLjExaC4gKi8KLQkJCS8qICovCi0JCQlpZiAocEJzcy0+SGlkZGVuID09IDApCi0JCQkJYnJlYWs7Ci0JCX0KLQkJLyogKi8KLQkJLyogc2VuZCBwcm9iZSByZXF1ZXN0ICovCi0JCS8qICovCi0JCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7Ci0JCWlmIChOU3RhdHVzID09IE5ESVNfU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCWlmIChwQWQtPk1sbWVBdXguQ2hhbm5lbCA8PSAxNCkgewotCQkJCXBTdXBSYXRlID0gcEFkLT5Db21tb25DZmcuU3VwUmF0ZTsKLQkJCQlTdXBSYXRlTGVuID0gcEFkLT5Db21tb25DZmcuU3VwUmF0ZUxlbjsKLQkJCQlwRXh0UmF0ZSA9IHBBZC0+Q29tbW9uQ2ZnLkV4dFJhdGU7Ci0JCQkJRXh0UmF0ZUxlbiA9IHBBZC0+Q29tbW9uQ2ZnLkV4dFJhdGVMZW47Ci0JCQl9IGVsc2UgewotCQkJCS8qICovCi0JCQkJLyogT3ZlcndyaXRlIFN1cHBvcnQgUmF0ZSwgQ0NLIHJhdGUgYXJlIG5vdCBhbGxvd2VkICovCi0JCQkJLyogKi8KLQkJCQlwU3VwUmF0ZSA9IEFTdXBSYXRlOwotCQkJCVN1cFJhdGVMZW4gPSBBU3VwUmF0ZUxlbjsKLQkJCQlFeHRSYXRlTGVuID0gMDsKLQkJCX0KLQotCQkJaWYgKHBBZC0+TWxtZUF1eC5Cc3NUeXBlID09IEJTU19JTkZSQSkKLQkJCQlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkhkcjgwMjExLAotCQkJCQkJIFNVQlRZUEVfUFJPQkVfUkVRLCAwLAotCQkJCQkJIHBBZC0+TWxtZUF1eC5Cc3NpZCwKLQkJCQkJCSBwQWQtPk1sbWVBdXguQnNzaWQpOwotCQkJZWxzZQotCQkJCU1ndE1hY0hlYWRlckluaXQocEFkLCAmSGRyODAyMTEsCi0JCQkJCQkgU1VCVFlQRV9QUk9CRV9SRVEsIDAsCi0JCQkJCQkgQlJPQURDQVNUX0FERFIsCi0JCQkJCQkgQlJPQURDQVNUX0FERFIpOwotCi0JCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAmRnJhbWVMZW4sCi0JCQkJCSAgc2l6ZW9mKHN0cnVjdCBydF9oZWFkZXJfODAyXzExKSwgJkhkcjgwMjExLAotCQkJCQkgIDEsICZTc2lkSWUsCi0JCQkJCSAgMSwgJnBBZC0+TWxtZUF1eC5Tc2lkTGVuLAotCQkJCQkgIHBBZC0+TWxtZUF1eC5Tc2lkTGVuLAotCQkJCQkgIHBBZC0+TWxtZUF1eC5Tc2lkLCAxLCAmU3VwUmF0ZUllLCAxLAotCQkJCQkgICZTdXBSYXRlTGVuLCBTdXBSYXRlTGVuLCBwU3VwUmF0ZSwKLQkJCQkJICBFTkRfT0ZfQVJHUyk7Ci0KLQkJCWlmIChFeHRSYXRlTGVuKSB7Ci0JCQkJdW5zaWduZWQgbG9uZyBUbXA7Ci0JCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAmVG1wLAotCQkJCQkJICAxLCAmRXh0UmF0ZUllLAotCQkJCQkJICAxLCAmRXh0UmF0ZUxlbiwKLQkJCQkJCSAgRXh0UmF0ZUxlbiwgcEV4dFJhdGUsCi0JCQkJCQkgIEVORF9PRl9BUkdTKTsKLQkJCQlGcmFtZUxlbiArPSBUbXA7Ci0JCQl9Ci0KLQkJCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgMCwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOwotCQkJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKLQkJfQotCX0gd2hpbGUgKEZBTFNFKTsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkoIlNZTkMgLSBTd2l0Y2ggdG8gY2ggJWQsIFdhaXQgQkVBQ09OIGZyb20gJXBNXG4iLAotCQkJcEJzcy0+Q2hhbm5lbCwgcEJzcy0+QnNzaWQpKTsKLQotCXBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUgPSBKT0lOX1dBSVRfQkVBQ09OOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JCU1MTUUgU1RBUlQgUmVxdWVzdCBzdGF0ZSBtYWNoaW5lIHByb2NlZHVyZSwgc3RhcnRpbmcgYW4gSUJTUwotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgTWxtZVN0YXJ0UmVxQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSkKLXsKLQl1OCBTc2lkW01BWF9MRU5fT0ZfU1NJRF0sIFNzaWRMZW47Ci0JQk9PTEVBTiBUaW1lckNhbmNlbGxlZDsKLQotCS8qIE5ldyBmb3IgV1BBIHNlY3VyaXR5IHN1aXRlcyAqLwotCXU4IFZhcklFW01BWF9WSUVfTEVOXTsJLyogVG90YWwgVklFIGxlbmd0aCA9IE1BWF9WSUVfTEVOIC0gLTUgKi8KLQlzdHJ1Y3QgcnRfbmRpc184MDJfMTFfdmFyaWFibGVfaWVzICpwVklFID0gTlVMTDsKLQlMQVJHRV9JTlRFR0VSIFRpbWVTdGFtcDsKLQlCT09MRUFOIFByaXZhY3k7Ci0JdTE2IFN0YXR1czsKLQotCS8qIEluaXQgVmFyaWFibGUgSUUgc3RydWN0dXJlICovCi0JcFZJRSA9IChzdHJ1Y3QgcnRfbmRpc184MDJfMTFfdmFyaWFibGVfaWVzICopVmFySUU7Ci0JcFZJRS0+TGVuZ3RoID0gMDsKLQlUaW1lU3RhbXAudS5Mb3dQYXJ0ID0gMDsKLQlUaW1lU3RhbXAudS5IaWdoUGFydCA9IDA7Ci0KLQlpZiAoTWxtZVN0YXJ0UmVxU2FuaXR5Ci0JICAgIChwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuLCAoY2hhciAqKVNzaWQsICZTc2lkTGVuKSkgewotCQkvKiByZXNldCBhbGwgdGhlIHRpbWVycyAqLwotCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5TY2FuVGltZXIsICZUaW1lckNhbmNlbGxlZCk7Ci0JCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkJlYWNvblRpbWVyLCAmVGltZXJDYW5jZWxsZWQpOwotCi0JCS8qICovCi0JCS8qIFN0YXJ0IGEgbmV3IElCU1MuIEFsbCBJQlNTIHBhcmFtZXRlcnMgYXJlIGRlY2lkZWQgbm93Li4uLiAqLwotCQkvKiAqLwotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIk1sbWVTdGFydFJlcUFjdGlvbiAtIFN0YXJ0IGEgbmV3IElCU1MuIEFsbCBJQlNTIHBhcmFtZXRlcnMgYXJlIGRlY2lkZWQgbm93Li4uLiBcbiIpKTsKLQkJcEFkLT5NbG1lQXV4LkJzc1R5cGUgPSBCU1NfQURIT0M7Ci0JCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TWxtZUF1eC5Tc2lkLCBTc2lkLCBTc2lkTGVuKTsKLQkJcEFkLT5NbG1lQXV4LlNzaWRMZW4gPSBTc2lkTGVuOwotCi0JCS8qIGdlbmVyYXRlIGEgcmFkb20gbnVtYmVyIGFzIEJTU0lEICovCi0JCU1hY0FkZHJSYW5kb21Cc3NpZChwQWQsIHBBZC0+TWxtZUF1eC5Cc3NpZCk7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiTWxtZVN0YXJ0UmVxQWN0aW9uIC0gZ2VuZXJhdGUgYSByYWRvbSBudW1iZXIgYXMgQlNTSUQgXG4iKSk7Ci0KLQkJUHJpdmFjeSA9Ci0JCSAgICAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQpCi0JCSAgICB8fCAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpCi0JCSAgICB8fCAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpOwotCQlwQWQtPk1sbWVBdXguQ2FwYWJpbGl0eUluZm8gPQotCQkgICAgQ0FQX0dFTkVSQVRFKDAsIDEsIFByaXZhY3ksCi0JCQkJIChwQWQtPkNvbW1vbkNmZy5UeFByZWFtYmxlID09Ci0JCQkJICBSdDgwMl8xMVByZWFtYmxlU2hvcnQpLCAxLCAwKTsKLQkJcEFkLT5NbG1lQXV4LkJlYWNvblBlcmlvZCA9IHBBZC0+Q29tbW9uQ2ZnLkJlYWNvblBlcmlvZDsKLQkJcEFkLT5NbG1lQXV4LkF0aW1XaW4gPSBwQWQtPlN0YUNmZy5BdGltV2luOwotCQlwQWQtPk1sbWVBdXguQ2hhbm5lbCA9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWw7Ci0KLQkJcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsOwotCQlwQWQtPk1sbWVBdXguQ2VudHJhbENoYW5uZWwgPSBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbDsKLQotCQlwQWQtPk1sbWVBdXguU3VwUmF0ZUxlbiA9IHBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVMZW47Ci0JCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TWxtZUF1eC5TdXBSYXRlLCBwQWQtPkNvbW1vbkNmZy5TdXBSYXRlLAotCQkJICAgICAgIE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTKTsKLQkJUlRNUENoZWNrUmF0ZXMocEFkLCBwQWQtPk1sbWVBdXguU3VwUmF0ZSwKLQkJCSAgICAgICAmcEFkLT5NbG1lQXV4LlN1cFJhdGVMZW4pOwotCQlwQWQtPk1sbWVBdXguRXh0UmF0ZUxlbiA9IHBBZC0+Q29tbW9uQ2ZnLkV4dFJhdGVMZW47Ci0JCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TWxtZUF1eC5FeHRSYXRlLCBwQWQtPkNvbW1vbkNmZy5FeHRSYXRlLAotCQkJICAgICAgIE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTKTsKLQkJUlRNUENoZWNrUmF0ZXMocEFkLCBwQWQtPk1sbWVBdXguRXh0UmF0ZSwKLQkJCSAgICAgICAmcEFkLT5NbG1lQXV4LkV4dFJhdGVMZW4pOwotCi0JCWlmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpIHsKLQkJCVJUTVBVcGRhdGVIVElFKCZwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHksCi0JCQkJICAgICAgICZwQWQtPlN0YUNmZy5EZXNpcmVkSHRQaHlJbmZvLk1DU1NldFswXSwKLQkJCQkgICAgICAgJnBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHksCi0JCQkJICAgICAgICZwQWQtPk1sbWVBdXguQWRkSHRJbmZvKTsKLQkJCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHlMZW4gPSBzaXplb2Yoc3RydWN0IHJ0X2h0X2NhcGFiaWxpdHlfaWUpOwotCQkJLyogTm90IHR1cm4gcEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkSHRQaHkuYkh0RW5hYmxlID0gVFJVRSBoZXJlLiAqLwotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiU1lOQyAtcEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkSHRQaHkuYkh0RW5hYmxlID0gVFJVRVxuIikpOwotCQl9IGVsc2UgewotCQkJcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eUxlbiA9IDA7Ci0JCQlwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLmJIdEVuYWJsZSA9IEZBTFNFOwotCQkJTmRpc1plcm9NZW1vcnkoJnBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uCi0JCQkJICAgICAgIE1DU1NldFswXSwgMTYpOwotCQl9Ci0JCS8qIHRlbXBvcmFyaWx5IG5vdCBzdXBwb3J0IFFPUyBpbiBJQlNTICovCi0JCU5kaXNaZXJvTWVtb3J5KCZwQWQtPk1sbWVBdXguQVBFZGNhUGFybSwgc2l6ZW9mKHN0cnVjdCBydF9lZGNhX3Bhcm0pKTsKLQkJTmRpc1plcm9NZW1vcnkoJnBBZC0+TWxtZUF1eC5BUFFic3NMb2FkLAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcnRfcWJzc19sb2FkX3Bhcm0pKTsKLQkJTmRpc1plcm9NZW1vcnkoJnBBZC0+TWxtZUF1eC5BUFFvc0NhcGFiaWxpdHksCi0JCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBydF9xb3NfY2FwYWJpbGl0eV9wYXJtKSk7Ci0KLQkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPk1sbWVBdXguQ2hhbm5lbCwgRkFMU0UpOwotCQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPk1sbWVBdXguQ2hhbm5lbCk7Ci0KLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJTWU5DIC0gTWxtZVN0YXJ0UmVxQWN0aW9uKGNoPSAlZCxzdXAgcmF0ZXM9ICVkLCBleHQgcmF0ZXM9JWQpXG4iLAotCQkJICBwQWQtPk1sbWVBdXguQ2hhbm5lbCwgcEFkLT5NbG1lQXV4LlN1cFJhdGVMZW4sCi0JCQkgIHBBZC0+TWxtZUF1eC5FeHRSYXRlTGVuKSk7Ci0KLQkJcEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSA9IFNZTkNfSURMRTsKLQkJU3RhdHVzID0gTUxNRV9TVUNDRVNTOwotCQlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfU1RBUlRfQ09ORiwgMiwKLQkJCSAgICAmU3RhdHVzKTsKLQl9IGVsc2UgewotCQlEQkdQUklOVF9FUlIoIlNZTkMgLSBNbG1lU3RhcnRSZXFBY3Rpb24oKSBzYW5pdHkgY2hlY2sgZmFpbC5cbiIpOwotCQlwQWQtPk1sbWUuU3luY01hY2hpbmUuQ3VyclN0YXRlID0gU1lOQ19JRExFOwotCQlTdGF0dXMgPSBNTE1FX0lOVkFMSURfRk9STUFUOwotCQlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfU1RBUlRfQ09ORiwgMiwKLQkJCSAgICAmU3RhdHVzKTsKLQl9Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJcGVlciBzZW5kcyBiZWFjb24gYmFjayB3aGVuIHNjYW5uaW5nCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotdm9pZCBQZWVyQmVhY29uQXRTY2FuQWN0aW9uKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSkKLXsKLQl1OCBCc3NpZFtNQUNfQUREUl9MRU5dLCBBZGRyMltNQUNfQUREUl9MRU5dOwotCXU4IFNzaWRbTUFYX0xFTl9PRl9TU0lEXSwgQnNzVHlwZSwgQ2hhbm5lbCwgTmV3Q2hhbm5lbCwKLQkgICAgU3NpZExlbiwgRHRpbUNvdW50LCBEdGltUGVyaW9kLCBCY2FzdEZsYWcsIE1lc3NhZ2VUb01lOwotCXN0cnVjdCBydF9jZl9wYXJtIENmUGFybTsKLQl1MTYgQmVhY29uUGVyaW9kLCBBdGltV2luLCBDYXBhYmlsaXR5SW5mbzsKLQlzdHJ1Y3QgcnRfZnJhbWVfODAyXzExICogcEZyYW1lOwotCUxBUkdFX0lOVEVHRVIgVGltZVN0YW1wOwotCXU4IEVycDsKLQl1OCBTdXBSYXRlW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXSwKLQkgICAgRXh0UmF0ZVtNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU107Ci0JdTggU3VwUmF0ZUxlbiwgRXh0UmF0ZUxlbjsKLQl1MTYgTGVuVklFOwotCXU4IENraXBGbGFnOwotCXU4IEFpcm9uZXRDZWxsUG93ZXJMaW1pdDsKLQlzdHJ1Y3QgcnRfZWRjYV9wYXJtIEVkY2FQYXJtOwotCXN0cnVjdCBydF9xYnNzX2xvYWRfcGFybSBRYnNzTG9hZDsKLQlzdHJ1Y3QgcnRfcW9zX2NhcGFiaWxpdHlfcGFybSBRb3NDYXBhYmlsaXR5OwotCXVuc2lnbmVkIGxvbmcgUmFsaW5rSWU7Ci0JdTggVmFySUVbTUFYX1ZJRV9MRU5dOwkvKiBUb3RhbCBWSUUgbGVuZ3RoID0gTUFYX1ZJRV9MRU4gLSAtNSAqLwotCXN0cnVjdCBydF9uZGlzXzgwMl8xMV92YXJpYWJsZV9pZXMgKnBWSUUgPSBOVUxMOwotCXN0cnVjdCBydF9odF9jYXBhYmlsaXR5X2llIEh0Q2FwYWJpbGl0eTsKLQlzdHJ1Y3QgcnRfYWRkX2h0X2luZm9faWUgQWRkSHRJbmZvOwkvKiBBUCBtaWdodCB1c2UgdGhpcyBhZGRpdGlvbmFsIGh0IGluZm8gSUUgKi8KLQl1OCBIdENhcGFiaWxpdHlMZW4gPSAwLCBQcmVOSHRDYXBhYmlsaXR5TGVuID0gMDsKLQl1OCBBZGRIdEluZm9MZW47Ci0JdTggTmV3RXh0Q2hhbm5lbE9mZnNldCA9IDB4ZmY7Ci0KLQkvKiBOZGlzRmlsbE1lbW9yeShTc2lkLCBNQVhfTEVOX09GX1NTSUQsIDB4MDApOyAqLwotCXBGcmFtZSA9IChzdHJ1Y3QgcnRfZnJhbWVfODAyXzExICopIEVsZW0tPk1zZzsKLQkvKiBJbml0IFZhcmlhYmxlIElFIHN0cnVjdHVyZSAqLwotCXBWSUUgPSAoc3RydWN0IHJ0X25kaXNfODAyXzExX3ZhcmlhYmxlX2llcyAqKVZhcklFOwotCXBWSUUtPkxlbmd0aCA9IDA7Ci0KLQlSVE1QWmVyb01lbW9yeSgmSHRDYXBhYmlsaXR5LCBzaXplb2YoSHRDYXBhYmlsaXR5KSk7Ci0JUlRNUFplcm9NZW1vcnkoJkFkZEh0SW5mbywgc2l6ZW9mKHN0cnVjdCBydF9hZGRfaHRfaW5mb19pZSkpOwotCi0JaWYgKFBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eShwQWQsCi0JCQkJCUVsZW0tPk1zZywKLQkJCQkJRWxlbS0+TXNnTGVuLAotCQkJCQlFbGVtLT5DaGFubmVsLAotCQkJCQlBZGRyMiwKLQkJCQkJQnNzaWQsCi0JCQkJCShjaGFyICopU3NpZCwKLQkJCQkJJlNzaWRMZW4sCi0JCQkJCSZCc3NUeXBlLAotCQkJCQkmQmVhY29uUGVyaW9kLAotCQkJCQkmQ2hhbm5lbCwKLQkJCQkJJk5ld0NoYW5uZWwsCi0JCQkJCSZUaW1lU3RhbXAsCi0JCQkJCSZDZlBhcm0sCi0JCQkJCSZBdGltV2luLAotCQkJCQkmQ2FwYWJpbGl0eUluZm8sCi0JCQkJCSZFcnAsCi0JCQkJCSZEdGltQ291bnQsCi0JCQkJCSZEdGltUGVyaW9kLAotCQkJCQkmQmNhc3RGbGFnLAotCQkJCQkmTWVzc2FnZVRvTWUsCi0JCQkJCVN1cFJhdGUsCi0JCQkJCSZTdXBSYXRlTGVuLAotCQkJCQlFeHRSYXRlLAotCQkJCQkmRXh0UmF0ZUxlbiwKLQkJCQkJJkNraXBGbGFnLAotCQkJCQkmQWlyb25ldENlbGxQb3dlckxpbWl0LAotCQkJCQkmRWRjYVBhcm0sCi0JCQkJCSZRYnNzTG9hZCwKLQkJCQkJJlFvc0NhcGFiaWxpdHksCi0JCQkJCSZSYWxpbmtJZSwKLQkJCQkJJkh0Q2FwYWJpbGl0eUxlbiwKLQkJCQkJJlByZU5IdENhcGFiaWxpdHlMZW4sCi0JCQkJCSZIdENhcGFiaWxpdHksCi0JCQkJCSZBZGRIdEluZm9MZW4sCi0JCQkJCSZBZGRIdEluZm8sCi0JCQkJCSZOZXdFeHRDaGFubmVsT2Zmc2V0LCAmTGVuVklFLCBwVklFKSkgewotCQl1bnNpZ25lZCBsb25nIElkeDsKLQkJY2hhciBSc3NpID0gMDsKLQotCQlJZHggPSBCc3NUYWJsZVNlYXJjaCgmcEFkLT5TY2FuVGFiLCBCc3NpZCwgQ2hhbm5lbCk7Ci0JCWlmIChJZHggIT0gQlNTX05PVF9GT1VORCkKLQkJCVJzc2kgPSBwQWQtPlNjYW5UYWIuQnNzRW50cnlbSWR4XS5Sc3NpOwotCi0JCVJzc2kgPQotCQkgICAgUlRNUE1heFJzc2kocEFkLCBDb252ZXJ0VG9Sc3NpKHBBZCwgRWxlbS0+UnNzaTAsIFJTU0lfMCksCi0JCQkJQ29udmVydFRvUnNzaShwQWQsIEVsZW0tPlJzc2kxLCBSU1NJXzEpLAotCQkJCUNvbnZlcnRUb1Jzc2kocEFkLCBFbGVtLT5Sc3NpMiwgUlNTSV8yKSk7Ci0KLQkJaWYgKChIdENhcGFiaWxpdHlMZW4gPiAwKSB8fCAoUHJlTkh0Q2FwYWJpbGl0eUxlbiA+IDApKQotCQkJSHRDYXBhYmlsaXR5TGVuID0gU0laRV9IVF9DQVBfSUU7Ci0KLQkJSWR4ID0KLQkJICAgIEJzc1RhYmxlU2V0RW50cnkocEFkLCAmcEFkLT5TY2FuVGFiLCBCc3NpZCwgKGNoYXIgKilTc2lkLAotCQkJCSAgICAgU3NpZExlbiwgQnNzVHlwZSwgQmVhY29uUGVyaW9kLCAmQ2ZQYXJtLAotCQkJCSAgICAgQXRpbVdpbiwgQ2FwYWJpbGl0eUluZm8sIFN1cFJhdGUsCi0JCQkJICAgICBTdXBSYXRlTGVuLCBFeHRSYXRlLCBFeHRSYXRlTGVuLAotCQkJCSAgICAgJkh0Q2FwYWJpbGl0eSwgJkFkZEh0SW5mbywgSHRDYXBhYmlsaXR5TGVuLAotCQkJCSAgICAgQWRkSHRJbmZvTGVuLCBOZXdFeHRDaGFubmVsT2Zmc2V0LCBDaGFubmVsLAotCQkJCSAgICAgUnNzaSwgVGltZVN0YW1wLCBDa2lwRmxhZywgJkVkY2FQYXJtLAotCQkJCSAgICAgJlFvc0NhcGFiaWxpdHksICZRYnNzTG9hZCwgTGVuVklFLCBwVklFKTsKLQotCQlpZiAoSWR4ICE9IEJTU19OT1RfRk9VTkQpIHsKLQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtJZHhdLlBUU0YsCi0JCQkJICAgICAgICZFbGVtLT5Nc2dbMjRdLCA0KTsKLQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPlNjYW5UYWIuQnNzRW50cnlbSWR4XS5UVFNGWzBdLAotCQkJCSAgICAgICAmRWxlbS0+VGltZVN0YW1wLnUuTG93UGFydCwgNCk7Ci0JCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0lkeF0uVFRTRls0XSwKLQkJCQkgICAgICAgJkVsZW0tPlRpbWVTdGFtcC51Lkxvd1BhcnQsIDQpOwotCQl9Ci0KLQl9Ci0JLyogc2FuaXR5IGNoZWNrIGZhaWwsIGlnbm9yZWQgKi8KLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlXaGVuIHdhaXRpbmcgam9pbmluZyB0aGUgKEkpQlNTLCBiZWFjb24gcmVjZWl2ZWQgZnJvbSBleHRlcm5hbAotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLXZvaWQgUGVlckJlYWNvbkF0Sm9pbkFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pCi17Ci0JdTggQnNzaWRbTUFDX0FERFJfTEVOXSwgQWRkcjJbTUFDX0FERFJfTEVOXTsKLQl1OCBTc2lkW01BWF9MRU5fT0ZfU1NJRF0sIFNzaWRMZW4sIEJzc1R5cGUsIENoYW5uZWwsIE1lc3NhZ2VUb01lLAotCSAgICBEdGltQ291bnQsIER0aW1QZXJpb2QsIEJjYXN0RmxhZywgTmV3Q2hhbm5lbDsKLQlMQVJHRV9JTlRFR0VSIFRpbWVTdGFtcDsKLQl1MTYgQmVhY29uUGVyaW9kLCBBdGltV2luLCBDYXBhYmlsaXR5SW5mbzsKLQlzdHJ1Y3QgcnRfY2ZfcGFybSBDZjsKLQlCT09MRUFOIFRpbWVyQ2FuY2VsbGVkOwotCXU4IEVycDsKLQl1OCBTdXBSYXRlW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXSwKLQkgICAgRXh0UmF0ZVtNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU107Ci0JdTggU3VwUmF0ZUxlbiwgRXh0UmF0ZUxlbjsKLQl1OCBDa2lwRmxhZzsKLQl1MTYgTGVuVklFOwotCXU4IEFpcm9uZXRDZWxsUG93ZXJMaW1pdDsKLQlzdHJ1Y3QgcnRfZWRjYV9wYXJtIEVkY2FQYXJtOwotCXN0cnVjdCBydF9xYnNzX2xvYWRfcGFybSBRYnNzTG9hZDsKLQlzdHJ1Y3QgcnRfcW9zX2NhcGFiaWxpdHlfcGFybSBRb3NDYXBhYmlsaXR5OwotCXUxNiBTdGF0dXM7Ci0JdTggVmFySUVbTUFYX1ZJRV9MRU5dOwkvKiBUb3RhbCBWSUUgbGVuZ3RoID0gTUFYX1ZJRV9MRU4gLSAtNSAqLwotCXN0cnVjdCBydF9uZGlzXzgwMl8xMV92YXJpYWJsZV9pZXMgKnBWSUUgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgUmFsaW5rSWU7Ci0JdW5zaWduZWQgbG9uZyBJZHg7Ci0Jc3RydWN0IHJ0X2h0X2NhcGFiaWxpdHlfaWUgSHRDYXBhYmlsaXR5OwotCXN0cnVjdCBydF9hZGRfaHRfaW5mb19pZSBBZGRIdEluZm87CS8qIEFQIG1pZ2h0IHVzZSB0aGlzIGFkZGl0aW9uYWwgaHQgaW5mbyBJRSAqLwotCXU4IEh0Q2FwYWJpbGl0eUxlbiA9IDAsIFByZU5IdENhcGFiaWxpdHlMZW4gPSAwOwotCXU4IEFkZEh0SW5mb0xlbjsKLQl1OCBOZXdFeHRDaGFubmVsT2Zmc2V0ID0gMHhmZjsKLQl1OCBDZW50cmFsQ2hhbm5lbDsKLQlCT09MRUFOIGJBbGxvd05yYXRlID0gRkFMU0U7Ci0KLQkvKiBJbml0IFZhcmlhYmxlIElFIHN0cnVjdHVyZSAqLwotCXBWSUUgPSAoc3RydWN0IHJ0X25kaXNfODAyXzExX3ZhcmlhYmxlX2llcyAqKVZhcklFOwotCXBWSUUtPkxlbmd0aCA9IDA7Ci0JUlRNUFplcm9NZW1vcnkoJkh0Q2FwYWJpbGl0eSwgc2l6ZW9mKEh0Q2FwYWJpbGl0eSkpOwotCVJUTVBaZXJvTWVtb3J5KCZBZGRIdEluZm8sIHNpemVvZihzdHJ1Y3QgcnRfYWRkX2h0X2luZm9faWUpKTsKLQotCWlmIChQZWVyQmVhY29uQW5kUHJvYmVSc3BTYW5pdHkocEFkLAotCQkJCQlFbGVtLT5Nc2csCi0JCQkJCUVsZW0tPk1zZ0xlbiwKLQkJCQkJRWxlbS0+Q2hhbm5lbCwKLQkJCQkJQWRkcjIsCi0JCQkJCUJzc2lkLAotCQkJCQkoY2hhciAqKVNzaWQsCi0JCQkJCSZTc2lkTGVuLAotCQkJCQkmQnNzVHlwZSwKLQkJCQkJJkJlYWNvblBlcmlvZCwKLQkJCQkJJkNoYW5uZWwsCi0JCQkJCSZOZXdDaGFubmVsLAotCQkJCQkmVGltZVN0YW1wLAotCQkJCQkmQ2YsCi0JCQkJCSZBdGltV2luLAotCQkJCQkmQ2FwYWJpbGl0eUluZm8sCi0JCQkJCSZFcnAsCi0JCQkJCSZEdGltQ291bnQsCi0JCQkJCSZEdGltUGVyaW9kLAotCQkJCQkmQmNhc3RGbGFnLAotCQkJCQkmTWVzc2FnZVRvTWUsCi0JCQkJCVN1cFJhdGUsCi0JCQkJCSZTdXBSYXRlTGVuLAotCQkJCQlFeHRSYXRlLAotCQkJCQkmRXh0UmF0ZUxlbiwKLQkJCQkJJkNraXBGbGFnLAotCQkJCQkmQWlyb25ldENlbGxQb3dlckxpbWl0LAotCQkJCQkmRWRjYVBhcm0sCi0JCQkJCSZRYnNzTG9hZCwKLQkJCQkJJlFvc0NhcGFiaWxpdHksCi0JCQkJCSZSYWxpbmtJZSwKLQkJCQkJJkh0Q2FwYWJpbGl0eUxlbiwKLQkJCQkJJlByZU5IdENhcGFiaWxpdHlMZW4sCi0JCQkJCSZIdENhcGFiaWxpdHksCi0JCQkJCSZBZGRIdEluZm9MZW4sCi0JCQkJCSZBZGRIdEluZm8sCi0JCQkJCSZOZXdFeHRDaGFubmVsT2Zmc2V0LCAmTGVuVklFLCBwVklFKSkgewotCQkvKiBEaXNxdWFsaWZ5IDExYiBvbmx5IGFkaG9jIHdoZW4gd2UgYXJlIGluIDExZyBvbmx5IGFkaG9jIG1vZGUgKi8KLQkJaWYgKChCc3NUeXBlID09IEJTU19BREhPQykKLQkJICAgICYmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUcpCi0JCSAgICAmJiAoKFN1cFJhdGVMZW4gKyBFeHRSYXRlTGVuKSA8IDEyKSkKLQkJCXJldHVybjsKLQotCQkvKiBCRUFDT04gZnJvbSBkZXNpcmVkIEJTUy9JQlNTIGZvdW5kLiBXZSBzaG91bGQgYmUgYWJsZSB0byBkZWNpZGUgbW9zdCAqLwotCQkvKiBCU1MgcGFyYW1ldGVycyBoZXJlLiAqLwotCQkvKiBRLiBCdXQgd2hhdCBoYXBwZW4gaWYgdGhpcyBKT0lOIGRvZXNuJ3QgY29uY2x1ZGUgYSBzdWNjZXNzZnVsIEFTU09DSUFUSU9OPyAqLwotCQkvKiAgICBEbyB3ZSBuZWVkIHRvIHJlY292ZXIgYmFjayBhbGwgcGFyYW1ldGVycyBiZWxvbmdpbmcgdG8gcHJldmlvdXMgQlNTPyAqLwotCQkvKiBBLiBTaG91bGQgYmUgbm90LiBUaGVyZSdzIG5vIGJhY2stZG9vciByZWNvdmVyIHRvIHByZXZpb3VzIEFQLiBJdCBzdGlsbCBuZWVkcyAqLwotCQkvKiAgICBhIG5ldyBKT0lOLUFVVEgtQVNTT0Mgc2VxdWVuY2UuICovCi0JCWlmIChNQUNfQUREUl9FUVVBTChwQWQtPk1sbWVBdXguQnNzaWQsIEJzc2lkKSkgewotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiU1lOQyAtIHJlY2VpdmUgZGVzaXJlZCBCRUFDT04gYXQgSm9pbldhaXRCZWFjb24uLi4gQ2hhbm5lbCA9ICVkXG4iLAotCQkJCSAgQ2hhbm5lbCkpOwotCQkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguQmVhY29uVGltZXIsCi0JCQkJCSZUaW1lckNhbmNlbGxlZCk7Ci0KLQkJCS8qIFVwZGF0ZSBSU1NJIHRvIHByZXZlbnQgTm8gc2lnbmFsIGRpc3BsYXkgd2hlbiBjYXJkcyBmaXJzdCBpbml0aWFsaXplZCAqLwotCQkJcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTAgPQotCQkJICAgIENvbnZlcnRUb1Jzc2kocEFkLCBFbGVtLT5Sc3NpMCwgUlNTSV8wKTsKLQkJCXBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kxID0KLQkJCSAgICBDb252ZXJ0VG9Sc3NpKHBBZCwgRWxlbS0+UnNzaTEsIFJTU0lfMSk7Ci0JCQlwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMiA9Ci0JCQkgICAgQ29udmVydFRvUnNzaShwQWQsIEVsZW0tPlJzc2kyLCBSU1NJXzIpOwotCQkJcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMCA9Ci0JCQkgICAgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTA7Ci0JCQlwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkF2Z1Jzc2kwWDggPQotCQkJICAgIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTAgPDwgMzsKLQkJCXBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTEgPQotCQkJICAgIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kxOwotCQkJcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMVg4ID0KLQkJCSAgICBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkF2Z1Jzc2kxIDw8IDM7Ci0JCQlwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkF2Z1Jzc2kyID0KLQkJCSAgICBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMjsKLQkJCXBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTJYOCA9Ci0JCQkgICAgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMiA8PCAzOwotCi0JCQkvKiAqLwotCQkJLyogV2UgbmVlZCB0byBjaGVjayBpZiBTU0lEIG9ubHkgc2V0IHRvIGFueSwgdGhlbiB3ZSBjYW4gcmVjb3JkIHRoZSBjdXJyZW50IFNTSUQuICovCi0JCQkvKiBPdGhlcndpc2Ugd2lsbCBjYXVzZSBoaWRkZW4gU1NJRCBhc3NvY2lhdGlvbiBmYWlsZWQuICovCi0JCQkvKiAqLwotCQkJaWYgKHBBZC0+TWxtZUF1eC5Tc2lkTGVuID09IDApIHsKLQkJCQlOZGlzTW92ZU1lbW9yeShwQWQtPk1sbWVBdXguU3NpZCwgU3NpZCwKLQkJCQkJICAgICAgIFNzaWRMZW4pOwotCQkJCXBBZC0+TWxtZUF1eC5Tc2lkTGVuID0gU3NpZExlbjsKLQkJCX0gZWxzZSB7Ci0JCQkJSWR4ID0KLQkJCQkgICAgQnNzU3NpZFRhYmxlU2VhcmNoKCZwQWQtPlNjYW5UYWIsIEJzc2lkLAotCQkJCQkJICAgICAgIHBBZC0+TWxtZUF1eC5Tc2lkLAotCQkJCQkJICAgICAgIHBBZC0+TWxtZUF1eC5Tc2lkTGVuLAotCQkJCQkJICAgICAgIENoYW5uZWwpOwotCi0JCQkJaWYgKElkeCA9PSBCU1NfTk9UX0ZPVU5EKSB7Ci0JCQkJCWNoYXIgUnNzaSA9IDA7Ci0JCQkJCVJzc2kgPQotCQkJCQkgICAgUlRNUE1heFJzc2kocEFkLAotCQkJCQkJCUNvbnZlcnRUb1Jzc2kocEFkLAotCQkJCQkJCQkgICAgICBFbGVtLT4KLQkJCQkJCQkJICAgICAgUnNzaTAsCi0JCQkJCQkJCSAgICAgIFJTU0lfMCksCi0JCQkJCQkJQ29udmVydFRvUnNzaShwQWQsCi0JCQkJCQkJCSAgICAgIEVsZW0tPgotCQkJCQkJCQkgICAgICBSc3NpMSwKLQkJCQkJCQkJICAgICAgUlNTSV8xKSwKLQkJCQkJCQlDb252ZXJ0VG9Sc3NpKHBBZCwKLQkJCQkJCQkJICAgICAgRWxlbS0+Ci0JCQkJCQkJCSAgICAgIFJzc2kyLAotCQkJCQkJCQkgICAgICBSU1NJXzIpKTsKLQkJCQkJSWR4ID0KLQkJCQkJICAgIEJzc1RhYmxlU2V0RW50cnkocEFkLCAmcEFkLT5TY2FuVGFiLAotCQkJCQkJCSAgICAgQnNzaWQsCi0JCQkJCQkJICAgICAoY2hhciAqKSBTc2lkLAotCQkJCQkJCSAgICAgU3NpZExlbiwgQnNzVHlwZSwKLQkJCQkJCQkgICAgIEJlYWNvblBlcmlvZCwgJkNmLAotCQkJCQkJCSAgICAgQXRpbVdpbiwKLQkJCQkJCQkgICAgIENhcGFiaWxpdHlJbmZvLAotCQkJCQkJCSAgICAgU3VwUmF0ZSwKLQkJCQkJCQkgICAgIFN1cFJhdGVMZW4sCi0JCQkJCQkJICAgICBFeHRSYXRlLAotCQkJCQkJCSAgICAgRXh0UmF0ZUxlbiwKLQkJCQkJCQkgICAgICZIdENhcGFiaWxpdHksCi0JCQkJCQkJICAgICAmQWRkSHRJbmZvLAotCQkJCQkJCSAgICAgSHRDYXBhYmlsaXR5TGVuLAotCQkJCQkJCSAgICAgQWRkSHRJbmZvTGVuLAotCQkJCQkJCSAgICAgTmV3RXh0Q2hhbm5lbE9mZnNldCwKLQkJCQkJCQkgICAgIENoYW5uZWwsIFJzc2ksCi0JCQkJCQkJICAgICBUaW1lU3RhbXAsCi0JCQkJCQkJICAgICBDa2lwRmxhZywKLQkJCQkJCQkgICAgICZFZGNhUGFybSwKLQkJCQkJCQkgICAgICZRb3NDYXBhYmlsaXR5LAotCQkJCQkJCSAgICAgJlFic3NMb2FkLCBMZW5WSUUsCi0JCQkJCQkJICAgICBwVklFKTsKLQkJCQkJaWYgKElkeCAhPSBCU1NfTk9UX0ZPVU5EKSB7Ci0JCQkJCQlOZGlzTW92ZU1lbW9yeShwQWQtPlNjYW5UYWIuCi0JCQkJCQkJICAgICAgIEJzc0VudHJ5W0lkeF0uCi0JCQkJCQkJICAgICAgIFBUU0YsCi0JCQkJCQkJICAgICAgICZFbGVtLT5Nc2dbMjRdLAotCQkJCQkJCSAgICAgICA0KTsKLQkJCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPlNjYW5UYWIuCi0JCQkJCQkJICAgICAgIEJzc0VudHJ5W0lkeF0uCi0JCQkJCQkJICAgICAgIFRUU0ZbMF0sCi0JCQkJCQkJICAgICAgICZFbGVtLT5UaW1lU3RhbXAuCi0JCQkJCQkJICAgICAgIHUuTG93UGFydCwgNCk7Ci0JCQkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5TY2FuVGFiLgotCQkJCQkJCSAgICAgICBCc3NFbnRyeVtJZHhdLgotCQkJCQkJCSAgICAgICBUVFNGWzRdLAotCQkJCQkJCSAgICAgICAmRWxlbS0+VGltZVN0YW1wLgotCQkJCQkJCSAgICAgICB1Lkxvd1BhcnQsIDQpOwotCQkJCQkJQ2FwYWJpbGl0eUluZm8gPQotCQkJCQkJICAgIHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtJZHhdLgotCQkJCQkJICAgIENhcGFiaWxpdHlJbmZvOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJLyogKi8KLQkJCQkJLyogTXVsdGlwbGUgU1NJRCBjYXNlLCB1c2VkIGNvcnJlY3QgQ2FwYWJpbGl0eUluZm8gKi8KLQkJCQkJLyogKi8KLQkJCQkJQ2FwYWJpbGl0eUluZm8gPQotCQkJCQkgICAgcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0lkeF0uCi0JCQkJCSAgICBDYXBhYmlsaXR5SW5mbzsKLQkJCQl9Ci0JCQl9Ci0JCQlOZGlzTW92ZU1lbW9yeShwQWQtPk1sbWVBdXguQnNzaWQsIEJzc2lkLCBNQUNfQUREUl9MRU4pOwotCQkJcEFkLT5NbG1lQXV4LkNhcGFiaWxpdHlJbmZvID0KLQkJCSAgICBDYXBhYmlsaXR5SW5mbyAmIFNVUFBPUlRFRF9DQVBBQklMSVRZX0lORk87Ci0JCQlwQWQtPk1sbWVBdXguQnNzVHlwZSA9IEJzc1R5cGU7Ci0JCQlwQWQtPk1sbWVBdXguQmVhY29uUGVyaW9kID0gQmVhY29uUGVyaW9kOwotCQkJcEFkLT5NbG1lQXV4LkNoYW5uZWwgPSBDaGFubmVsOwotCQkJcEFkLT5NbG1lQXV4LkF0aW1XaW4gPSBBdGltV2luOwotCQkJcEFkLT5NbG1lQXV4LkNmcFBlcmlvZCA9IENmLkNmcFBlcmlvZDsKLQkJCXBBZC0+TWxtZUF1eC5DZnBNYXhEdXJhdGlvbiA9IENmLkNmcE1heER1cmF0aW9uOwotCQkJcEFkLT5NbG1lQXV4LkFQUmFsaW5rSWUgPSBSYWxpbmtJZTsKLQotCQkJLyogQ29weSBBUCdzIHN1cHBvcnRlZCByYXRlIHRvIE1sbWVBdXggZm9yIGNyZWF0aW5nIGFzc29jaWF0aW9uIHJlcXVlc3QgKi8KLQkJCS8qIEFsc28gZmlsdGVyIG91dCBub3Qgc3VwcG9ydGVkIHJhdGUgKi8KLQkJCXBBZC0+TWxtZUF1eC5TdXBSYXRlTGVuID0gU3VwUmF0ZUxlbjsKLQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TWxtZUF1eC5TdXBSYXRlLCBTdXBSYXRlLAotCQkJCSAgICAgICBTdXBSYXRlTGVuKTsKLQkJCVJUTVBDaGVja1JhdGVzKHBBZCwgcEFkLT5NbG1lQXV4LlN1cFJhdGUsCi0JCQkJICAgICAgICZwQWQtPk1sbWVBdXguU3VwUmF0ZUxlbik7Ci0JCQlwQWQtPk1sbWVBdXguRXh0UmF0ZUxlbiA9IEV4dFJhdGVMZW47Ci0JCQlOZGlzTW92ZU1lbW9yeShwQWQtPk1sbWVBdXguRXh0UmF0ZSwgRXh0UmF0ZSwKLQkJCQkgICAgICAgRXh0UmF0ZUxlbik7Ci0JCQlSVE1QQ2hlY2tSYXRlcyhwQWQsIHBBZC0+TWxtZUF1eC5FeHRSYXRlLAotCQkJCSAgICAgICAmcEFkLT5NbG1lQXV4LkV4dFJhdGVMZW4pOwotCi0JCQlOZGlzWmVyb01lbW9yeShwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldCwKLQkJCQkgICAgICAgMTYpOwotCi0JCQlpZiAoKChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgIT0gTmRpczgwMl8xMVdFUEVuYWJsZWQpCi0JCQkgICAgICYmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgIT0KLQkJCQkgTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkpCi0JCQkgICAgfHwgKHBBZC0+Q29tbW9uQ2ZnLkhUX0Rpc2FsbG93VEtJUCA9PSBGQUxTRSkpIHsKLQkJCQliQWxsb3dOcmF0ZSA9IFRSVUU7Ci0JCQl9Ci0KLQkJCXBBZC0+TWxtZUF1eC5OZXdFeHRDaGFubmVsT2Zmc2V0ID0gTmV3RXh0Q2hhbm5lbE9mZnNldDsKLQkJCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHlMZW4gPSBIdENhcGFiaWxpdHlMZW47Ci0KLQkJCVJUTVBaZXJvTWVtb3J5KCZwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5LAotCQkJCSAgICAgICBTSVpFX0hUX0NBUF9JRSk7Ci0JCQkvKiBmaWx0ZXIgb3V0IHVuLXN1cHBvcnRlZCBodCByYXRlcyAqLwotCQkJaWYgKCgoSHRDYXBhYmlsaXR5TGVuID4gMCkgfHwgKFByZU5IdENhcGFiaWxpdHlMZW4gPiAwKSkKLQkJCSAgICAmJiAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPj0gUEhZXzExQUJHTl9NSVhFRCkKLQkJCQkmJiAoYkFsbG93TnJhdGUpKSkgewotCQkJCVJUTVBNb3ZlTWVtb3J5KCZwQWQtPk1sbWVBdXguQWRkSHRJbmZvLAotCQkJCQkgICAgICAgJkFkZEh0SW5mbywgU0laRV9BRERfSFRfSU5GT19JRSk7Ci0KLQkJCQkvKiBTdGFBY3RpdmUuU3VwcG9ydGVkSHRQaHkuTUNTU2V0IHN0b3JlcyBQZWVyIEFQJ3MgMTFuIFJ4IGNhcGFiaWxpdHkgKi8KLQkJCQlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLgotCQkJCQkgICAgICAgTUNTU2V0LCBIdENhcGFiaWxpdHkuTUNTU2V0LCAxNik7Ci0JCQkJcEFkLT5NbG1lQXV4Lk5ld0V4dENoYW5uZWxPZmZzZXQgPQotCQkJCSAgICBOZXdFeHRDaGFubmVsT2Zmc2V0OwotCQkJCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHlMZW4gPSBTSVpFX0hUX0NBUF9JRTsKLQkJCQlwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLmJIdEVuYWJsZSA9Ci0JCQkJICAgIFRSVUU7Ci0JCQkJaWYgKFByZU5IdENhcGFiaWxpdHlMZW4gPiAwKQotCQkJCQlwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLgotCQkJCQkgICAgYlByZU5IdCA9IFRSVUU7Ci0JCQkJUlRNUENoZWNrSHQocEFkLCBCU1NJRF9XQ0lELCAmSHRDYXBhYmlsaXR5LAotCQkJCQkgICAgJkFkZEh0SW5mbyk7Ci0JCQkJLyogQ29weSBBUCBQYXJhbWV0ZXIgdG8gU3RhQWN0aXZlLiAgVGhpcyBpcyBhbHNvIGluIExpbmtVcC4gKi8KLQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkJICgiUGVlckJlYWNvbkF0Sm9pbkFjdGlvbiEgKE1wZHVEZW5zaXR5PSVkLCBNYXhSQW1wZHVGYWN0b3I9JWQsIEJXPSVkKVxuIiwKLQkJCQkJICBwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRIdFBoeS4KLQkJCQkJICBNcGR1RGVuc2l0eSwKLQkJCQkJICBwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRIdFBoeS4KLQkJCQkJICBNYXhSQW1wZHVGYWN0b3IsCi0JCQkJCSAgSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5DaGFubmVsV2lkdGgpKTsKLQotCQkJCWlmIChBZGRIdEluZm9MZW4gPiAwKSB7Ci0JCQkJCUNlbnRyYWxDaGFubmVsID0gQWRkSHRJbmZvLkNvbnRyb2xDaGFuOwotCQkJCQkvKiBDaGVjayBhZ2FpbiB0aGUgQmFuZHdpZHRoIGNhcGFiaWxpdHkgb2YgdGhpcyBBUC4gKi8KLQkJCQkJaWYgKChBZGRIdEluZm8uQ29udHJvbENoYW4gPiAyKQotCQkJCQkgICAgJiYgKEFkZEh0SW5mby5BZGRIdEluZm8uCi0JCQkJCQlFeHRDaGFuT2Zmc2V0ID09IEVYVENIQV9CRUxPVykKLQkJCQkJICAgICYmIChIdENhcGFiaWxpdHkuSHRDYXBJbmZvLgotCQkJCQkJQ2hhbm5lbFdpZHRoID09IEJXXzQwKSkgewotCQkJCQkJQ2VudHJhbENoYW5uZWwgPQotCQkJCQkJICAgIEFkZEh0SW5mby5Db250cm9sQ2hhbiAtIDI7Ci0JCQkJCX0gZWxzZQotCQkJCQkgICAgaWYgKChBZGRIdEluZm8uQWRkSHRJbmZvLgotCQkJCQkJIEV4dENoYW5PZmZzZXQgPT0gRVhUQ0hBX0FCT1ZFKQotCQkJCQkJJiYgKEh0Q2FwYWJpbGl0eS5IdENhcEluZm8uCi0JCQkJCQkgICAgQ2hhbm5lbFdpZHRoID09IEJXXzQwKSkgewotCQkJCQkJQ2VudHJhbENoYW5uZWwgPQotCQkJCQkJICAgIEFkZEh0SW5mby5Db250cm9sQ2hhbiArIDI7Ci0JCQkJCX0KLQkJCQkJLyogQ2hlY2sgRXJyb3IgLiAqLwotCQkJCQlpZiAocEFkLT5NbG1lQXV4LkNlbnRyYWxDaGFubmVsICE9Ci0JCQkJCSAgICBDZW50cmFsQ2hhbm5lbCkKLQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJCQkJCSAoIlBlZXJCZWFjb25BdEpvaW5BY3Rpb24gSFQ9PT0+QmVhY29uIENlbnRyYWwgQ2hhbm5lbCA9ICVkLCBDb250cm9sIENoYW5uZWwgPSAlZC4gTWxtZWF1eCBDZW50cmFsQ2hhbm5lbCA9ICVkXG4iLAotCQkJCQkJCSAgQ2VudHJhbENoYW5uZWwsCi0JCQkJCQkJICBBZGRIdEluZm8uQ29udHJvbENoYW4sCi0JCQkJCQkJICBwQWQtPk1sbWVBdXguCi0JCQkJCQkJICBDZW50cmFsQ2hhbm5lbCkpOwotCi0JCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkJICgiUGVlckJlYWNvbkF0Sm9pbkFjdGlvbiBIVD09PT5DZW50cmFsIENoYW5uZWwgPSAlZCwgQ29udHJvbCBDaGFubmVsID0gJWQsICAuXG4iLAotCQkJCQkJICBDZW50cmFsQ2hhbm5lbCwKLQkJCQkJCSAgQWRkSHRJbmZvLkNvbnRyb2xDaGFuKSk7Ci0KLQkJCQl9Ci0KLQkJCX0gZWxzZSB7Ci0JCQkJLyogVG8gcHJldmVudCBlcnJvciwgbGV0IGxlZ2FjeSBBUCBtdXN0IGhhdmUgc2FtZSBDZW50cmFsQ2hhbm5lbCBhbmQgQ2hhbm5lbC4gKi8KLQkJCQlpZiAoKEh0Q2FwYWJpbGl0eUxlbiA9PSAwKQotCQkJCSAgICAmJiAoUHJlTkh0Q2FwYWJpbGl0eUxlbiA9PSAwKSkKLQkJCQkJcEFkLT5NbG1lQXV4LkNlbnRyYWxDaGFubmVsID0KLQkJCQkJICAgIHBBZC0+TWxtZUF1eC5DaGFubmVsOwotCi0JCQkJcEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5iSHRFbmFibGUgPQotCQkJCSAgICBGQUxTRTsKLQkJCQlwQWQtPk1sbWVBdXguTmV3RXh0Q2hhbm5lbE9mZnNldCA9IDB4ZmY7Ci0JCQkJUlRNUFplcm9NZW1vcnkoJnBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHksCi0JCQkJCSAgICAgICBTSVpFX0hUX0NBUF9JRSk7Ci0JCQkJcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eUxlbiA9IDA7Ci0JCQkJUlRNUFplcm9NZW1vcnkoJnBBZC0+TWxtZUF1eC5BZGRIdEluZm8sCi0JCQkJCSAgICAgICBTSVpFX0FERF9IVF9JTkZPX0lFKTsKLQkJCX0KLQotCQkJUlRNUFVwZGF0ZU1sbWVSYXRlKHBBZCk7Ci0KLQkJCS8qIGNvcHkgUU9TIHJlbGF0ZWQgaW5mb3JtYXRpb24gKi8KLQkJCWlmICgocEFkLT5Db21tb25DZmcuYldtbUNhcGFibGUpCi0JCQkgICAgfHwgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPj0gUEhZXzExQUJHTl9NSVhFRCkKLQkJCSAgICApIHsKLQkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5NbG1lQXV4LkFQRWRjYVBhcm0sCi0JCQkJCSAgICAgICAmRWRjYVBhcm0sIHNpemVvZihzdHJ1Y3QgcnRfZWRjYV9wYXJtKSk7Ci0JCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+TWxtZUF1eC5BUFFic3NMb2FkLAotCQkJCQkgICAgICAgJlFic3NMb2FkLAotCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBydF9xYnNzX2xvYWRfcGFybSkpOwotCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPk1sbWVBdXguQVBRb3NDYXBhYmlsaXR5LAotCQkJCQkgICAgICAgJlFvc0NhcGFiaWxpdHksCi0JCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHJ0X3Fvc19jYXBhYmlsaXR5X3Bhcm0pKTsKLQkJCX0gZWxzZSB7Ci0JCQkJTmRpc1plcm9NZW1vcnkoJnBBZC0+TWxtZUF1eC5BUEVkY2FQYXJtLAotCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBydF9lZGNhX3Bhcm0pKTsKLQkJCQlOZGlzWmVyb01lbW9yeSgmcEFkLT5NbG1lQXV4LkFQUWJzc0xvYWQsCi0JCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHJ0X3Fic3NfbG9hZF9wYXJtKSk7Ci0JCQkJTmRpc1plcm9NZW1vcnkoJnBBZC0+TWxtZUF1eC5BUFFvc0NhcGFiaWxpdHksCi0JCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHJ0X3Fvc19jYXBhYmlsaXR5X3Bhcm0pKTsKLQkJCX0KLQotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiU1lOQyAtIGFmdGVyIEpPSU4sIFN1cFJhdGVMZW49JWQsIEV4dFJhdGVMZW49JWRcbiIsCi0JCQkJICBwQWQtPk1sbWVBdXguU3VwUmF0ZUxlbiwKLQkJCQkgIHBBZC0+TWxtZUF1eC5FeHRSYXRlTGVuKSk7Ci0KLQkJCWlmIChBaXJvbmV0Q2VsbFBvd2VyTGltaXQgIT0gMHhGRikgewotCQkJCS8qV2UgbmVlZCB0byBjaGFuZ2Ugb3VyIFR4UG93ZXIgZm9yIENDWCAyLjAgQVAgQ29udHJvbCBvZiBDbGllbnQgVHJhbnNtaXQgUG93ZXIgKi8KLQkJCQlDaGFuZ2VUb0NlbGxQb3dlckxpbWl0KHBBZCwKLQkJCQkJCSAgICAgICBBaXJvbmV0Q2VsbFBvd2VyTGltaXQpOwotCQkJfSBlbHNlCS8qVXNlZCB0aGUgZGVmYXVsdCBUWCBQb3dlciBQZXJjZW50YWdlLiAqLwotCQkJCXBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID0KLQkJCQkgICAgcEFkLT5Db21tb25DZmcuVHhQb3dlckRlZmF1bHQ7Ci0KLQkJCXBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUgPSBTWU5DX0lETEU7Ci0JCQlTdGF0dXMgPSBNTE1FX1NVQ0NFU1M7Ci0JCQlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfSk9JTl9DT05GLAotCQkJCSAgICAyLCAmU3RhdHVzKTsKLQkJfQotCQkvKiBub3QgdG8gbWUgQkVBQ09OLCBpZ25vcmVkICovCi0JfQotCS8qIHNhbml0eSBjaGVjayBmYWlsLCBpZ25vcmUgdGhpcyBmcmFtZSAqLwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JCXJlY2VpdmUgQkVBQ09OIGZyb20gcGVlcgotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi12b2lkIFBlZXJCZWFjb24oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfbWxtZV9xdWV1ZV9lbGVtICpFbGVtKQotewotCXU4IEJzc2lkW01BQ19BRERSX0xFTl0sIEFkZHIyW01BQ19BRERSX0xFTl07Ci0JY2hhciBTc2lkW01BWF9MRU5fT0ZfU1NJRF07Ci0Jc3RydWN0IHJ0X2NmX3Bhcm0gQ2ZQYXJtOwotCXU4IFNzaWRMZW4sIE1lc3NhZ2VUb01lID0gMCwgQnNzVHlwZSwgQ2hhbm5lbCwgTmV3Q2hhbm5lbCwgaW5kZXggPSAwOwotCXU4IER0aW1Db3VudCA9IDAsIER0aW1QZXJpb2QgPSAwLCBCY2FzdEZsYWcgPSAwOwotCXUxNiBDYXBhYmlsaXR5SW5mbywgQXRpbVdpbiwgQmVhY29uUGVyaW9kOwotCUxBUkdFX0lOVEVHRVIgVGltZVN0YW1wOwotCXUxNiBUYnR0TnVtVG9OZXh0V2FrZVVwOwotCXU4IEVycDsKLQl1OCBTdXBSYXRlW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXSwKLQkgICAgRXh0UmF0ZVtNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU107Ci0JdTggU3VwUmF0ZUxlbiwgRXh0UmF0ZUxlbjsKLQl1OCBDa2lwRmxhZzsKLQl1MTYgTGVuVklFOwotCXU4IEFpcm9uZXRDZWxsUG93ZXJMaW1pdDsKLQlzdHJ1Y3QgcnRfZWRjYV9wYXJtIEVkY2FQYXJtOwotCXN0cnVjdCBydF9xYnNzX2xvYWRfcGFybSBRYnNzTG9hZDsKLQlzdHJ1Y3QgcnRfcW9zX2NhcGFiaWxpdHlfcGFybSBRb3NDYXBhYmlsaXR5OwotCXVuc2lnbmVkIGxvbmcgUmFsaW5rSWU7Ci0JLyogTmV3IGZvciBXUEEgc2VjdXJpdHkgc3VpdGVzICovCi0JdTggVmFySUVbTUFYX1ZJRV9MRU5dOwkvKiBUb3RhbCBWSUUgbGVuZ3RoID0gTUFYX1ZJRV9MRU4gLSAtNSAqLwotCXN0cnVjdCBydF9uZGlzXzgwMl8xMV92YXJpYWJsZV9pZXMgKnBWSUUgPSBOVUxMOwotCXN0cnVjdCBydF9odF9jYXBhYmlsaXR5X2llIEh0Q2FwYWJpbGl0eTsKLQlzdHJ1Y3QgcnRfYWRkX2h0X2luZm9faWUgQWRkSHRJbmZvOwkvKiBBUCBtaWdodCB1c2UgdGhpcyBhZGRpdGlvbmFsIGh0IGluZm8gSUUgKi8KLQl1OCBIdENhcGFiaWxpdHlMZW4sIFByZU5IdENhcGFiaWxpdHlMZW47Ci0JdTggQWRkSHRJbmZvTGVuOwotCXU4IE5ld0V4dENoYW5uZWxPZmZzZXQgPSAweGZmOwotCi0JaWYgKCEoSU5GUkFfT04ocEFkKSB8fCBBREhPQ19PTihwQWQpCi0JICAgICkpCi0JCXJldHVybjsKLQotCS8qIEluaXQgVmFyaWFibGUgSUUgc3RydWN0dXJlICovCi0JcFZJRSA9IChzdHJ1Y3QgcnRfbmRpc184MDJfMTFfdmFyaWFibGVfaWVzICopVmFySUU7Ci0JcFZJRS0+TGVuZ3RoID0gMDsKLQlSVE1QWmVyb01lbW9yeSgmSHRDYXBhYmlsaXR5LCBzaXplb2YoSHRDYXBhYmlsaXR5KSk7Ci0JUlRNUFplcm9NZW1vcnkoJkFkZEh0SW5mbywgc2l6ZW9mKHN0cnVjdCBydF9hZGRfaHRfaW5mb19pZSkpOwotCi0JaWYgKFBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eShwQWQsCi0JCQkJCUVsZW0tPk1zZywKLQkJCQkJRWxlbS0+TXNnTGVuLAotCQkJCQlFbGVtLT5DaGFubmVsLAotCQkJCQlBZGRyMiwKLQkJCQkJQnNzaWQsCi0JCQkJCVNzaWQsCi0JCQkJCSZTc2lkTGVuLAotCQkJCQkmQnNzVHlwZSwKLQkJCQkJJkJlYWNvblBlcmlvZCwKLQkJCQkJJkNoYW5uZWwsCi0JCQkJCSZOZXdDaGFubmVsLAotCQkJCQkmVGltZVN0YW1wLAotCQkJCQkmQ2ZQYXJtLAotCQkJCQkmQXRpbVdpbiwKLQkJCQkJJkNhcGFiaWxpdHlJbmZvLAotCQkJCQkmRXJwLAotCQkJCQkmRHRpbUNvdW50LAotCQkJCQkmRHRpbVBlcmlvZCwKLQkJCQkJJkJjYXN0RmxhZywKLQkJCQkJJk1lc3NhZ2VUb01lLAotCQkJCQlTdXBSYXRlLAotCQkJCQkmU3VwUmF0ZUxlbiwKLQkJCQkJRXh0UmF0ZSwKLQkJCQkJJkV4dFJhdGVMZW4sCi0JCQkJCSZDa2lwRmxhZywKLQkJCQkJJkFpcm9uZXRDZWxsUG93ZXJMaW1pdCwKLQkJCQkJJkVkY2FQYXJtLAotCQkJCQkmUWJzc0xvYWQsCi0JCQkJCSZRb3NDYXBhYmlsaXR5LAotCQkJCQkmUmFsaW5rSWUsCi0JCQkJCSZIdENhcGFiaWxpdHlMZW4sCi0JCQkJCSZQcmVOSHRDYXBhYmlsaXR5TGVuLAotCQkJCQkmSHRDYXBhYmlsaXR5LAotCQkJCQkmQWRkSHRJbmZvTGVuLAotCQkJCQkmQWRkSHRJbmZvLAotCQkJCQkmTmV3RXh0Q2hhbm5lbE9mZnNldCwgJkxlblZJRSwgcFZJRSkpIHsKLQkJQk9PTEVBTiBpc19teV9ic3NpZCwgaXNfbXlfc3NpZDsKLQkJdW5zaWduZWQgbG9uZyBCc3NpZHgsIE5vdzsKLQkJc3RydWN0IHJ0X2Jzc19lbnRyeSAqcEJzczsKLQkJY2hhciBSZWFsUnNzaSA9Ci0JCSAgICBSVE1QTWF4UnNzaShwQWQsIENvbnZlcnRUb1Jzc2kocEFkLCBFbGVtLT5Sc3NpMCwgUlNTSV8wKSwKLQkJCQlDb252ZXJ0VG9Sc3NpKHBBZCwgRWxlbS0+UnNzaTEsIFJTU0lfMSksCi0JCQkJQ29udmVydFRvUnNzaShwQWQsIEVsZW0tPlJzc2kyLCBSU1NJXzIpKTsKLQotCQlpc19teV9ic3NpZCA9Ci0JCSAgICBNQUNfQUREUl9FUVVBTChCc3NpZCwgcEFkLT5Db21tb25DZmcuQnNzaWQpID8gVFJVRSA6IEZBTFNFOwotCQlpc19teV9zc2lkID0KLQkJICAgIFNTSURfRVFVQUwoU3NpZCwgU3NpZExlbiwgcEFkLT5Db21tb25DZmcuU3NpZCwKLQkJCSAgICAgICBwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuKSA/IFRSVUUgOiBGQUxTRTsKLQotCQkvKiBpZ25vcmUgQkVBQ09OIG5vdCBmb3IgbXkgU1NJRCAqLwotCQlpZiAoKCFpc19teV9zc2lkKSAmJiAoIWlzX215X2Jzc2lkKSkKLQkJCXJldHVybjsKLQotCQkvKiBJdCBtZWFucyBTVEEgd2FpdHMgZGlzYXNzb2MgY29tcGxldGVseSBmcm9tIHRoaXMgQVAsIGlnbm9yZXMgdGhpcyBiZWFjb24uICovCi0JCWlmIChwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID09IENOVExfV0FJVF9ESVNBU1NPQykKLQkJCXJldHVybjsKLQotCQkvKiBDb3B5IENvbnRyb2wgY2hhbm5lbCBmb3IgdGhpcyBCU1NJRC4gKi8KLQkJaWYgKEFkZEh0SW5mb0xlbiAhPSAwKQotCQkJQ2hhbm5lbCA9IEFkZEh0SW5mby5Db250cm9sQ2hhbjsKLQotCQlpZiAoKEh0Q2FwYWJpbGl0eUxlbiA+IDApIHx8IChQcmVOSHRDYXBhYmlsaXR5TGVuID4gMCkpCi0JCQlIdENhcGFiaWxpdHlMZW4gPSBTSVpFX0hUX0NBUF9JRTsKLQotCQkvKiAqLwotCQkvKiBIb3VzZWtlZXBpbmcgIlNzaWRCc3NUYWIiIHRhYmxlIGZvciBsYXRlci1vbiBST0FNaW5nIHVzYWdlLiAqLwotCQkvKiAqLwotCQlCc3NpZHggPSBCc3NUYWJsZVNlYXJjaCgmcEFkLT5TY2FuVGFiLCBCc3NpZCwgQ2hhbm5lbCk7Ci0JCWlmIChCc3NpZHggPT0gQlNTX05PVF9GT1VORCkgewotCQkJLyogZGlzY292ZXIgbmV3IEFQIG9mIHRoaXMgbmV0d29yaywgY3JlYXRlIEJTUyBlbnRyeSAqLwotCQkJQnNzaWR4ID0KLQkJCSAgICBCc3NUYWJsZVNldEVudHJ5KHBBZCwgJnBBZC0+U2NhblRhYiwgQnNzaWQsIFNzaWQsCi0JCQkJCSAgICAgU3NpZExlbiwgQnNzVHlwZSwgQmVhY29uUGVyaW9kLAotCQkJCQkgICAgICZDZlBhcm0sIEF0aW1XaW4sIENhcGFiaWxpdHlJbmZvLAotCQkJCQkgICAgIFN1cFJhdGUsIFN1cFJhdGVMZW4sIEV4dFJhdGUsCi0JCQkJCSAgICAgRXh0UmF0ZUxlbiwgJkh0Q2FwYWJpbGl0eSwKLQkJCQkJICAgICAmQWRkSHRJbmZvLCBIdENhcGFiaWxpdHlMZW4sCi0JCQkJCSAgICAgQWRkSHRJbmZvTGVuLCBOZXdFeHRDaGFubmVsT2Zmc2V0LAotCQkJCQkgICAgIENoYW5uZWwsIFJlYWxSc3NpLCBUaW1lU3RhbXAsCi0JCQkJCSAgICAgQ2tpcEZsYWcsICZFZGNhUGFybSwKLQkJCQkJICAgICAmUW9zQ2FwYWJpbGl0eSwgJlFic3NMb2FkLCBMZW5WSUUsCi0JCQkJCSAgICAgcFZJRSk7Ci0JCQlpZiAoQnNzaWR4ID09IEJTU19OT1RfRk9VTkQpCS8qIHJldHVybiBpZiBCU1MgdGFibGUgZnVsbCAqLwotCQkJCXJldHVybjsKLQotCQkJTmRpc01vdmVNZW1vcnkocEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc2lkeF0uUFRTRiwKLQkJCQkgICAgICAgJkVsZW0tPk1zZ1syNF0sIDQpOwotCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NpZHhdLlRUU0ZbMF0sCi0JCQkJICAgICAgICZFbGVtLT5UaW1lU3RhbXAudS5Mb3dQYXJ0LCA0KTsKLQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPlNjYW5UYWIuQnNzRW50cnlbQnNzaWR4XS5UVFNGWzRdLAotCQkJCSAgICAgICAmRWxlbS0+VGltZVN0YW1wLnUuTG93UGFydCwgNCk7Ci0KLQkJfQotCi0JCWlmICgocEFkLT5Db21tb25DZmcuYklFRUU4MDIxMUggPT0gMSkgJiYgKE5ld0NoYW5uZWwgIT0gMCkKLQkJICAgICYmIChDaGFubmVsICE9IE5ld0NoYW5uZWwpKSB7Ci0JCQkvKiBTd2l0Y2hpbmcgdG8gY2hhbm5lbCAxIGNhbiBwcmV2ZW50IGZyb20gcmVzY2FubmluZyB0aGUgY3VycmVudCBjaGFubmVsIGltbWVkaWF0ZWx5IChieSBhdXRvIHJlY29ubmVjdGlvbikuICovCi0JCQkvKiBJbiBhZGRpdGlvbiwgY2xlYXIgdGhlIE1MTUUgcXVldWUgYW5kIHRoZSBzY2FuIHRhYmxlIHRvIGRpc2NhcmQgdGhlIFJYIHBhY2tldHMgYW5kIHByZXZpb3VzIHNjYW5uaW5nIHJlc3VsdHMuICovCi0JCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIDEsIEZBTFNFKTsKLQkJCUFzaWNMb2NrQ2hhbm5lbChwQWQsIDEpOwotCQkJTGlua0Rvd24ocEFkLCBGQUxTRSk7Ci0JCQlNbG1lUXVldWVJbml0KCZwQWQtPk1sbWUuUXVldWUpOwotCQkJQnNzVGFibGVJbml0KCZwQWQtPlNjYW5UYWIpOwotCQkJUlRNUHVzZWNEZWxheSgxMDAwMDAwKTsJLyogdXNlIGRlbGF5IHRvIHByZXZlbnQgU1RBIGRvIHJlYXNzb2MgKi8KLQotCQkJLyogY2hhbm5lbCBzYW5pdHkgY2hlY2sgKi8KLQkJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHBBZC0+Q2hhbm5lbExpc3ROdW07IGluZGV4KyspIHsKLQkJCQlpZiAocEFkLT5DaGFubmVsTGlzdFtpbmRleF0uQ2hhbm5lbCA9PQotCQkJCSAgICBOZXdDaGFubmVsKSB7Ci0JCQkJCXBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NpZHhdLkNoYW5uZWwgPQotCQkJCQkgICAgTmV3Q2hhbm5lbDsKLQkJCQkJcEFkLT5Db21tb25DZmcuQ2hhbm5lbCA9IE5ld0NoYW5uZWw7Ci0JCQkJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwKLQkJCQkJCQkgIHBBZC0+Q29tbW9uQ2ZnLgotCQkJCQkJCSAgQ2hhbm5lbCwgRkFMU0UpOwotCQkJCQlBc2ljTG9ja0NoYW5uZWwocEFkLAotCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpOwotCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkJCSAoIlBlZXJCZWFjb24gLSBTVEEgcmVjZWl2ZSBjaGFubmVsIHN3aXRjaCBhbm5vdW5jZW1lbnQgSUUgKE5ldyBDaGFubmVsID0lZClcbiIsCi0JCQkJCQkgIE5ld0NoYW5uZWwpKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAoaW5kZXggPj0gcEFkLT5DaGFubmVsTGlzdE51bSkgewotCQkJCURCR1BSSU5UX0VSUigiUGVlckJlYWNvbihjYW4gbm90IGZpbmQgTmV3IENoYW5uZWw9JWQgaW4gQ2hhbm5lbExpc3RbJWRdXG4iLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsLCBwQWQtPkNoYW5uZWxMaXN0TnVtKTsKLQkJCX0KLQkJfQotCQkvKiBpZiB0aGUgc3NpZCBtYXRjaGVkICYgYnNzaWQgdW5tYXRjaGVkLCB3ZSBzaG91bGQgc2VsZWN0IHRoZSBic3NpZCB3aXRoIGxhcmdlIHZhbHVlLiAqLwotCQkvKiBUaGlzIG1pZ2h0IGhhcHBlbmVkIHdoZW4gdHdvIFNUQSBzdGFydCBhdCB0aGUgc2FtZSB0aW1lICovCi0JCWlmICgoIWlzX215X2Jzc2lkKSAmJiBBREhPQ19PTihwQWQpKSB7Ci0JCQlpbnQgaTsKLQotCQkJLyogQWRkIHRoZSBzYWZlZ3VhcmQgYWdhaW5zdCB0aGUgbWlzbWF0Y2ggb2YgYWRob2Mgd2VwIHN0YXR1cyAqLwotCQkJaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAhPQotCQkJICAgIHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NpZHhdLldlcFN0YXR1cykgewotCQkJCXJldHVybjsKLQkJCX0KLQkJCS8qIGNvbGxhcHNlIGludG8gdGhlIEFESE9DIG5ldHdvcmsgd2hpY2ggaGFzIGJpZ2dlciBCU1NJRCB2YWx1ZS4gKi8KLQkJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKLQkJCQlpZiAoQnNzaWRbaV0gPiBwQWQtPkNvbW1vbkNmZy5Cc3NpZFtpXSkgewotCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkJCSgiU1lOQyAtIG1lcmdlIHRvIHRoZSBJQlNTICIKLQkJCQkJCQkid2l0aCBiaWdnZXIgQlNTSUQ9IgotCQkJCQkJCSIlcE1cbiIsIEJzc2lkKSk7Ci0JCQkJCUFzaWNEaXNhYmxlU3luYyhwQWQpOwotCQkJCQlDT1BZX01BQ19BRERSKHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLAotCQkJCQkJICAgICAgQnNzaWQpOwotCQkJCQlBc2ljU2V0QnNzaWQocEFkLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7Ci0JCQkJCU1ha2VJYnNzQmVhY29uKHBBZCk7CS8qIHJlLWJ1aWxkIEJFQUNPTiBmcmFtZSAqLwotCQkJCQlBc2ljRW5hYmxlSWJzc1N5bmMocEFkKTsJLyogY29weSBCRUFDT04gZnJhbWUgdG8gb24tY2hpcCBtZW1vcnkgKi8KLQkJCQkJaXNfbXlfYnNzaWQgPSBUUlVFOwotCQkJCQlicmVhazsKLQkJCQl9IGVsc2UgaWYgKEJzc2lkW2ldIDwgcEFkLT5Db21tb25DZmcuQnNzaWRbaV0pCi0JCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJTmRpc0dldFN5c3RlbVVwVGltZSgmTm93KTsKLQkJcEJzcyA9ICZwQWQtPlNjYW5UYWIuQnNzRW50cnlbQnNzaWR4XTsKLQkJcEJzcy0+UnNzaSA9IFJlYWxSc3NpOwkvKiBsYXN0ZXN0IFJTU0kgKi8KLQkJcEJzcy0+TGFzdEJlYWNvblJ4VGltZSA9IE5vdzsJLyogbGFzdCBSWCB0aW1lc3RhbXAgKi8KLQotCQkvKiAqLwotCQkvKiBCRUFDT04gZnJvbSBteSBCU1NJRCAtIGVpdGhlciBJQlNTIG9yIElORlJBIG5ldHdvcmsgKi8KLQkJLyogKi8KLQkJaWYgKGlzX215X2Jzc2lkKSB7Ci0JCQlzdHJ1Y3QgcnRfcnh3aSBSeFdJOwotCi0JCQlwQWQtPlN0YUNmZy5EdGltQ291bnQgPSBEdGltQ291bnQ7Ci0JCQlwQWQtPlN0YUNmZy5EdGltUGVyaW9kID0gRHRpbVBlcmlvZDsKLQkJCXBBZC0+U3RhQ2ZnLkxhc3RCZWFjb25SeFRpbWUgPSBOb3c7Ci0KLQkJCVJ4V0kuUlNTSTAgPSBFbGVtLT5Sc3NpMDsKLQkJCVJ4V0kuUlNTSTEgPSBFbGVtLT5Sc3NpMTsKLQkJCVJ4V0kuUlNTSTIgPSBFbGVtLT5Sc3NpMjsKLQotCQkJVXBkYXRlX1Jzc2lfU2FtcGxlKHBBZCwgJnBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUsICZSeFdJKTsKLQkJCWlmIChBaXJvbmV0Q2VsbFBvd2VyTGltaXQgIT0gMHhGRikgewotCQkJCS8qICovCi0JCQkJLyogV2UgZ2V0IHRoZSBDaXNjbyAoY2N4KSAiVHhQb3dlciBMaW1pdCIgcmVxdWlyZWQgKi8KLQkJCQkvKiBDaGFuZ2VkIHRvIGFwcHJvcHJpYXRlIFR4UG93ZXIgTGltaXQgZm9yIENpc28gQ29tcGF0aWJsZSBFeHRlbnNpb25zICovCi0JCQkJLyogKi8KLQkJCQlDaGFuZ2VUb0NlbGxQb3dlckxpbWl0KHBBZCwKLQkJCQkJCSAgICAgICBBaXJvbmV0Q2VsbFBvd2VyTGltaXQpOwotCQkJfSBlbHNlIHsKLQkJCQkvKiAqLwotCQkJCS8qIEFpcm9uZXRDZWxsUG93ZXJMaW1pdCBlcXVhbCB0byAweEZGIG1lYW5zIHRoZSBDaXNjbyAoY2N4KSAiVHhQb3dlciBMaW1pdCIgbm90IGV4aXN0LiAqLwotCQkJCS8qIFVzZWQgdGhlIGRlZmF1bHQgVFggUG93ZXIgUGVyY2VudGFnZSwgdGhhdCBzZXQgZnJvbSBVSS4gKi8KLQkJCQkvKiAqLwotCQkJCXBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID0KLQkJCQkgICAgcEFkLT5Db21tb25DZmcuVHhQb3dlckRlZmF1bHQ7Ci0JCQl9Ci0KLQkJCWlmIChBREhPQ19PTihwQWQpICYmIChDQVBfSVNfSUJTU19PTihDYXBhYmlsaXR5SW5mbykpKSB7Ci0JCQkJdTggTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcyA9IDA7Ci0JCQkJdTggaWR4OwotCQkJCXN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKnBFbnRyeTsKLQotCQkJCS8qIHN1cHBvcnRlZCByYXRlcyBhcnJheSBtYXkgbm90IGJlIHNvcnRlZC4gc29ydCBpdCBhbmQgZmluZCB0aGUgbWF4aW11bSByYXRlICovCi0JCQkJZm9yIChpZHggPSAwOyBpZHggPCBTdXBSYXRlTGVuOyBpZHgrKykgewotCQkJCQlpZiAoTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcyA8Ci0JCQkJCSAgICAoU3VwUmF0ZVtpZHhdICYgMHg3ZikpCi0JCQkJCQlNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzID0KLQkJCQkJCSAgICBTdXBSYXRlW2lkeF0gJiAweDdmOwotCQkJCX0KLQotCQkJCWZvciAoaWR4ID0gMDsgaWR4IDwgRXh0UmF0ZUxlbjsgaWR4KyspIHsKLQkJCQkJaWYgKE1heFN1cHBvcnRlZFJhdGVJbjUwMEticHMgPAotCQkJCQkgICAgKEV4dFJhdGVbaWR4XSAmIDB4N2YpKQotCQkJCQkJTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcyA9Ci0JCQkJCQkgICAgRXh0UmF0ZVtpZHhdICYgMHg3ZjsKLQkJCQl9Ci0KLQkJCQkvKiBsb29rIHVwIHRoZSBleGlzdGluZyB0YWJsZSAqLwotCQkJCXBFbnRyeSA9IE1hY1RhYmxlTG9va3VwKHBBZCwgQWRkcjIpOwotCi0JCQkJLyogQWQtaG9jIG1vZGUgaXMgdXNpbmcgTUFDIGFkZHJlc3MgYXMgQkEgc2Vzc2lvbi4gU28gd2UgbmVlZCB0byBjb250aW51b3VzbHkgZmluZCBuZXdseSBqb2luZWQgYWRob2Mgc3RhdGlvbiBieSByZWNlaXZpbmcgYmVhY29uLiAqLwotCQkJCS8qIFRvIHByZXZlbnQgYWx3YXlzIGNoZWNrIHRoaXMsIHdlIHVzZSB3Y2lkID09IFJFU0VSVkVEX1dDSUQgdG8gcmVjb2duaXplIGl0IGFzIG5ld2x5IGpvaW5lZCBhZGhvYyBzdGF0aW9uLiAqLwotCQkJCWlmICgoQURIT0NfT04ocEFkKQotCQkJCSAgICAgJiYgKEVsZW0tPldjaWQgPT0gUkVTRVJWRURfV0NJRCkpCi0JCQkJICAgIHx8IChwRW50cnkKLQkJCQkJJiYKLQkJCQkJKChwRW50cnktPkxhc3RCZWFjb25SeFRpbWUgKwotCQkJCQkgIEFESE9DX0VOVFJZX0JFQUNPTl9MT1NUX1RJTUUpIDwKLQkJCQkJIE5vdykpKSB7Ci0JCQkJCWlmIChwRW50cnkgPT0gTlVMTCkKLQkJCQkJCS8qIEFub3RoZXIgYWRob2Mgam9pbmluZywgYWRkIHRvIG91ciBNQUMgdGFibGUuICovCi0JCQkJCQlwRW50cnkgPQotCQkJCQkJICAgIE1hY1RhYmxlSW5zZXJ0RW50cnkocEFkLAotCQkJCQkJCQkJQWRkcjIsCi0JCQkJCQkJCQlCU1MwLAotCQkJCQkJCQkJRkFMU0UpOwotCi0JCQkJCWlmIChTdGFBZGRNYWNUYWJsZUVudHJ5KHBBZCwKLQkJCQkJCQkJcEVudHJ5LAotCQkJCQkJCQlNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzLAotCQkJCQkJCQkmSHRDYXBhYmlsaXR5LAotCQkJCQkJCQlIdENhcGFiaWxpdHlMZW4sCi0JCQkJCQkJCSZBZGRIdEluZm8sCi0JCQkJCQkJCUFkZEh0SW5mb0xlbiwKLQkJCQkJCQkJQ2FwYWJpbGl0eUluZm8pCi0JCQkJCSAgICA9PSBGQUxTRSkgewotCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJCQkJICgiQURIT0MgLSBBZGQgRW50cnkgZmFpbGVkLlxuIikpOwotCQkJCQkJcmV0dXJuOwotCQkJCQl9Ci0KLQkJCQkJaWYgKHBFbnRyeSAmJgotCQkJCQkgICAgKEVsZW0tPldjaWQgPT0gUkVTRVJWRURfV0NJRCkpIHsKLQkJCQkJCWlkeCA9IHBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZDsKLQkJCQkJCVJUTVBfU1RBX1NFQ1VSSVRZX0lORk9fQUREKHBBZCwKLQkJCQkJCQkJCSAgIEJTUzAsCi0JCQkJCQkJCQkgICBpZHgsCi0JCQkJCQkJCQkgICBwRW50cnkpOwotCQkJCQl9Ci0JCQkJfQotCi0JCQkJaWYgKHBFbnRyeSAmJiBwRW50cnktPlZhbGlkQXNDTEkpCi0JCQkJCXBFbnRyeS0+TGFzdEJlYWNvblJ4VGltZSA9IE5vdzsKLQotCQkJCS8qIEF0IGxlYXN0IGFub3RoZXIgcGVlciBpbiB0aGlzIElCU1MsIGRlY2xhcmUgTWVkaWFTdGF0ZSBhcyBDT05ORUNURUQgKi8KLQkJCQlpZiAoIU9QU1RBVFVTX1RFU1RfRkxBRwotCQkJCSAgICAocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkpIHsKLQkJCQkJT1BTVEFUVVNfU0VUX0ZMQUcocEFkLAotCQkJCQkJCSAgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpOwotCi0JCQkJCXBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID0KLQkJCQkJICAgIE5kaXNNZWRpYVN0YXRlQ29ubmVjdGVkOwotCQkJCQlSVE1QX0luZGljYXRlTWVkaWFTdGF0ZShwQWQpOwotCQkJCQlwQWQtPkV4dHJhSW5mbyA9IEdFTkVSQUxfTElOS19VUDsKLQkJCQkJQXNpY1NldEJzc2lkKHBBZCwgcEFkLT5Db21tb25DZmcuQnNzaWQpOwotCi0JCQkJCS8qIDIwMDMvMDMvMTIgLSBqb2huICovCi0JCQkJCS8qIE1ha2Ugc3VyZSB0aGlzIGVudHJ5IGluICJTY2FuVGFiIiB0YWJsZSwgdGh1cyBjb21wbGllcyB0byBNaWNyb3NvZnQncyBwb2xpY3kgdGhhdCAqLwotCQkJCQkvKiAic2l0ZSBzdXJ2ZXkiIHJlc3VsdCBzaG91bGQgYWx3YXlzIGluY2x1ZGUgdGhlIGN1cnJlbnQgY29ubmVjdGVkIG5ldHdvcmsuICovCi0JCQkJCS8qICovCi0JCQkJCUJzc2lkeCA9Ci0JCQkJCSAgICBCc3NUYWJsZVNlYXJjaCgmcEFkLT5TY2FuVGFiLCBCc3NpZCwKLQkJCQkJCQkgICBDaGFubmVsKTsKLQkJCQkJaWYgKEJzc2lkeCA9PSBCU1NfTk9UX0ZPVU5EKSB7Ci0JCQkJCQlCc3NpZHggPQotCQkJCQkJICAgIEJzc1RhYmxlU2V0RW50cnkocEFkLAotCQkJCQkJCQkgICAgICZwQWQtPgotCQkJCQkJCQkgICAgIFNjYW5UYWIsCi0JCQkJCQkJCSAgICAgQnNzaWQsCi0JCQkJCQkJCSAgICAgU3NpZCwKLQkJCQkJCQkJICAgICBTc2lkTGVuLAotCQkJCQkJCQkgICAgIEJzc1R5cGUsCi0JCQkJCQkJCSAgICAgQmVhY29uUGVyaW9kLAotCQkJCQkJCQkgICAgICZDZlBhcm0sCi0JCQkJCQkJCSAgICAgQXRpbVdpbiwKLQkJCQkJCQkJICAgICBDYXBhYmlsaXR5SW5mbywKLQkJCQkJCQkJICAgICBTdXBSYXRlLAotCQkJCQkJCQkgICAgIFN1cFJhdGVMZW4sCi0JCQkJCQkJCSAgICAgRXh0UmF0ZSwKLQkJCQkJCQkJICAgICBFeHRSYXRlTGVuLAotCQkJCQkJCQkgICAgICZIdENhcGFiaWxpdHksCi0JCQkJCQkJCSAgICAgJkFkZEh0SW5mbywKLQkJCQkJCQkJICAgICBIdENhcGFiaWxpdHlMZW4sCi0JCQkJCQkJCSAgICAgQWRkSHRJbmZvTGVuLAotCQkJCQkJCQkgICAgIE5ld0V4dENoYW5uZWxPZmZzZXQsCi0JCQkJCQkJCSAgICAgQ2hhbm5lbCwKLQkJCQkJCQkJICAgICBSZWFsUnNzaSwKLQkJCQkJCQkJICAgICBUaW1lU3RhbXAsCi0JCQkJCQkJCSAgICAgMCwKLQkJCQkJCQkJICAgICAmRWRjYVBhcm0sCi0JCQkJCQkJCSAgICAgJlFvc0NhcGFiaWxpdHksCi0JCQkJCQkJCSAgICAgJlFic3NMb2FkLAotCQkJCQkJCQkgICAgIExlblZJRSwKLQkJCQkJCQkJICAgICBwVklFKTsKLQkJCQkJfQotCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkJCSAoIkFESE9DICBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRC5cbiIpKTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWlmIChJTkZSQV9PTihwQWQpKSB7Ci0JCQkJQk9PTEVBTiBiVXNlU2hvcnRTbG90LCBiVXNlQkdQcm90ZWN0aW9uOwotCi0JCQkJLyogZGVjaWRlIHRvIHVzZS9jaGFuZ2UgdG8gLSAqLwotCQkJCS8qICAgICAgMS4gbG9uZyBzbG90ICgyMCB1cykgb3Igc2hvcnQgc2xvdCAoOSB1cykgdGltZSAqLwotCQkJCS8qICAgICAgMi4gdHVybiBvbi9vZmYgUlRTL0NUUyBhbmQvb3IgQ1RTLXRvLXNlbGYgcHJvdGVjdGlvbiAqLwotCQkJCS8qICAgICAgMy4gc2hvcnQgcHJlYW1ibGUgKi8KLQotCQkJCS8qYlVzZVNob3J0U2xvdCA9IHBBZC0+Q29tbW9uQ2ZnLmJVc2VTaG9ydFNsb3RUaW1lICYmIENBUF9JU19TSE9SVF9TTE9UKENhcGFiaWxpdHlJbmZvKTsgKi8KLQkJCQliVXNlU2hvcnRTbG90ID0KLQkJCQkgICAgQ0FQX0lTX1NIT1JUX1NMT1QoQ2FwYWJpbGl0eUluZm8pOwotCQkJCWlmIChiVXNlU2hvcnRTbG90ICE9Ci0JCQkJICAgIE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsCi0JCQkJCQkgICAgICAgZk9QX1NUQVRVU19TSE9SVF9TTE9UX0lOVVNFRCkpCi0JCQkJCUFzaWNTZXRTbG90VGltZShwQWQsIGJVc2VTaG9ydFNsb3QpOwotCi0JCQkJYlVzZUJHUHJvdGVjdGlvbiA9IChwQWQtPkNvbW1vbkNmZy5Vc2VCR1Byb3RlY3Rpb24gPT0gMSkgfHwJLyogYWx3YXlzIHVzZSAqLwotCQkJCSAgICAoKHBBZC0+Q29tbW9uQ2ZnLlVzZUJHUHJvdGVjdGlvbiA9PSAwKQotCQkJCSAgICAgJiYgRVJQX0lTX1VTRV9QUk9URUNUSU9OKEVycCkpOwotCi0JCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPiAxNCkJLyogYWx3YXlzIG5vIEJHIHByb3RlY3Rpb24gaW4gQS1iYW5kLiBmYWxzZWx5IGhhcHBlbmVkIHdoZW4gc3dpdGNoaW5nIEEvRyBiYW5kIHRvIGEgZHVhbC1iYW5kIEFQICovCi0JCQkJCWJVc2VCR1Byb3RlY3Rpb24gPSBGQUxTRTsKLQotCQkJCWlmIChiVXNlQkdQcm90ZWN0aW9uICE9Ci0JCQkJICAgIE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsCi0JCQkJCQkgICAgICAgZk9QX1NUQVRVU19CR19QUk9URUNUSU9OX0lOVVNFRCkpCi0JCQkJewotCQkJCQlpZiAoYlVzZUJHUHJvdGVjdGlvbikgewotCQkJCQkJT1BTVEFUVVNfU0VUX0ZMQUcocEFkLAotCQkJCQkJCQkgIGZPUF9TVEFUVVNfQkdfUFJPVEVDVElPTl9JTlVTRUQpOwotCQkJCQkJQXNpY1VwZGF0ZVByb3RlY3QocEFkLAotCQkJCQkJCQkgIHBBZC0+TWxtZUF1eC4KLQkJCQkJCQkJICBBZGRIdEluZm8uCi0JCQkJCQkJCSAgQWRkSHRJbmZvMi4KLQkJCQkJCQkJICBPcGVyYWlvbk1vZGUsCi0JCQkJCQkJCSAgKE9GRE1TRVRQUk9URUNUCi0JCQkJCQkJCSAgIHwKLQkJCQkJCQkJICAgQ0NLU0VUUFJPVEVDVAotCQkJCQkJCQkgICB8Ci0JCQkJCQkJCSAgIEFMTE5fU0VUUFJPVEVDVCksCi0JCQkJCQkJCSAgRkFMU0UsCi0JCQkJCQkJCSAgKHBBZC0+TWxtZUF1eC4KLQkJCQkJCQkJICAgQWRkSHRJbmZvLgotCQkJCQkJCQkgICBBZGRIdEluZm8yLgotCQkJCQkJCQkgICBOb25HZlByZXNlbnQKLQkJCQkJCQkJICAgPT0gMSkpOwotCQkJCQl9IGVsc2UgewotCQkJCQkJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsCi0JCQkJCQkJCSAgICBmT1BfU1RBVFVTX0JHX1BST1RFQ1RJT05fSU5VU0VEKTsKLQkJCQkJCUFzaWNVcGRhdGVQcm90ZWN0KHBBZCwKLQkJCQkJCQkJICBwQWQtPk1sbWVBdXguCi0JCQkJCQkJCSAgQWRkSHRJbmZvLgotCQkJCQkJCQkgIEFkZEh0SW5mbzIuCi0JCQkJCQkJCSAgT3BlcmFpb25Nb2RlLAotCQkJCQkJCQkgIChPRkRNU0VUUFJPVEVDVAotCQkJCQkJCQkgICB8Ci0JCQkJCQkJCSAgIENDS1NFVFBST1RFQ1QKLQkJCQkJCQkJICAgfAotCQkJCQkJCQkgICBBTExOX1NFVFBST1RFQ1QpLAotCQkJCQkJCQkgIFRSVUUsCi0JCQkJCQkJCSAgKHBBZC0+TWxtZUF1eC4KLQkJCQkJCQkJICAgQWRkSHRJbmZvLgotCQkJCQkJCQkgICBBZGRIdEluZm8yLgotCQkJCQkJCQkgICBOb25HZlByZXNlbnQKLQkJCQkJCQkJICAgPT0gMSkpOwotCQkJCQl9Ci0KLQkJCQkJREJHUFJJTlQoUlRfREVCVUdfV0FSTiwKLQkJCQkJCSAoIlNZTkMgLSBBUCBjaGFuZ2VkIEIvRyBwcm90ZWN0aW9uIHRvICVkXG4iLAotCQkJCQkJICBiVXNlQkdQcm90ZWN0aW9uKSk7Ci0JCQkJfQotCQkJCS8qIGNoZWNrIEh0IHByb3RlY3Rpb24gbW9kZS4gYW5kIGFkaGVyZSB0byB0aGUgTm9uLUdGIGRldmljZSBpbmRpY2F0aW9uIGJ5IEFQLiAqLwotCQkJCWlmICgoQWRkSHRJbmZvTGVuICE9IDApICYmCi0JCQkJICAgICgoQWRkSHRJbmZvLkFkZEh0SW5mbzIuT3BlcmFpb25Nb2RlICE9Ci0JCQkJICAgICAgcEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8yLgotCQkJCSAgICAgIE9wZXJhaW9uTW9kZSkKLQkJCQkgICAgIHx8IChBZGRIdEluZm8uQWRkSHRJbmZvMi5Ob25HZlByZXNlbnQgIT0KLQkJCQkJIHBBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvMi4KLQkJCQkJIE5vbkdmUHJlc2VudCkpKSB7Ci0JCQkJCXBBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvMi4KLQkJCQkJICAgIE5vbkdmUHJlc2VudCA9Ci0JCQkJCSAgICBBZGRIdEluZm8uQWRkSHRJbmZvMi5Ob25HZlByZXNlbnQ7Ci0JCQkJCXBBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvMi4KLQkJCQkJICAgIE9wZXJhaW9uTW9kZSA9Ci0JCQkJCSAgICBBZGRIdEluZm8uQWRkSHRJbmZvMi5PcGVyYWlvbk1vZGU7Ci0JCQkJCWlmIChwQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mbzIuCi0JCQkJCSAgICBOb25HZlByZXNlbnQgPT0gMSkgewotCQkJCQkJQXNpY1VwZGF0ZVByb3RlY3QocEFkLAotCQkJCQkJCQkgIHBBZC0+TWxtZUF1eC4KLQkJCQkJCQkJICBBZGRIdEluZm8uCi0JCQkJCQkJCSAgQWRkSHRJbmZvMi4KLQkJCQkJCQkJICBPcGVyYWlvbk1vZGUsCi0JCQkJCQkJCSAgQUxMTl9TRVRQUk9URUNULAotCQkJCQkJCQkgIEZBTFNFLCBUUlVFKTsKLQkJCQkJfSBlbHNlCi0JCQkJCQlBc2ljVXBkYXRlUHJvdGVjdChwQWQsCi0JCQkJCQkJCSAgcEFkLT5NbG1lQXV4LgotCQkJCQkJCQkgIEFkZEh0SW5mby4KLQkJCQkJCQkJICBBZGRIdEluZm8yLgotCQkJCQkJCQkgIE9wZXJhaW9uTW9kZSwKLQkJCQkJCQkJICBBTExOX1NFVFBST1RFQ1QsCi0JCQkJCQkJCSAgRkFMU0UsIEZBTFNFKTsKLQotCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkJCSAoIlNZTkMgLSBBUCBjaGFuZ2VkIE4gT3BlcmFpb25Nb2RlIHRvICVkXG4iLAotCQkJCQkJICBwQWQtPk1sbWVBdXguQWRkSHRJbmZvLgotCQkJCQkJICBBZGRIdEluZm8yLk9wZXJhaW9uTW9kZSkpOwotCQkJCX0KLQotCQkJCWlmIChPUFNUQVRVU19URVNUX0ZMQUcKLQkJCQkgICAgKHBBZCwgZk9QX1NUQVRVU19TSE9SVF9QUkVBTUJMRV9JTlVTRUQpCi0JCQkJICAgICYmIEVSUF9JU19VU0VfQkFSS0VSX1BSRUFNQkxFKEVycCkpIHsKLQkJCQkJTWxtZVNldFR4UHJlYW1ibGUocEFkLAotCQkJCQkJCSAgUnQ4MDJfMTFQcmVhbWJsZUxvbmcpOwotCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkJCSAoIlNZTkMgLSBBUCBmb3JjZWQgdG8gdXNlIGxvbmcgcHJlYW1ibGVcbiIpKTsKLQkJCQl9Ci0KLQkJCQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHCi0JCQkJICAgIChwQWQsIGZPUF9TVEFUVVNfV01NX0lOVVNFRCkKLQkJCQkgICAgJiYgKEVkY2FQYXJtLmJWYWxpZCA9PSBUUlVFKQotCQkJCSAgICAmJiAoRWRjYVBhcm0uRWRjYVVwZGF0ZUNvdW50ICE9Ci0JCQkJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uCi0JCQkJCUVkY2FVcGRhdGVDb3VudCkpIHsKLQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJCQkgKCJTWU5DIC0gQVAgY2hhbmdlIEVEQ0EgcGFyYW1ldGVycyhmcm9tICVkIHRvICVkKVxuIiwKLQkJCQkJCSAgcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS4KLQkJCQkJCSAgRWRjYVVwZGF0ZUNvdW50LAotCQkJCQkJICBFZGNhUGFybS5FZGNhVXBkYXRlQ291bnQpKTsKLQkJCQkJQXNpY1NldEVkY2FQYXJtKHBBZCwgJkVkY2FQYXJtKTsKLQkJCQl9Ci0JCQkJLyogY29weSBRT1MgcmVsYXRlZCBpbmZvcm1hdGlvbiAqLwotCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPkNvbW1vbkNmZy5BUFFic3NMb2FkLAotCQkJCQkgICAgICAgJlFic3NMb2FkLAotCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBydF9xYnNzX2xvYWRfcGFybSkpOwotCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPkNvbW1vbkNmZy5BUFFvc0NhcGFiaWxpdHksCi0JCQkJCSAgICAgICAmUW9zQ2FwYWJpbGl0eSwKLQkJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcnRfcW9zX2NhcGFiaWxpdHlfcGFybSkpOwotCQkJfQotCQkJLyogb25seSBJTkZSQVNUUlVDVFVSRSBtb2RlIHN1cHBvcnQgcG93ZXItc2F2aW5nIGZlYXR1cmUgKi8KLQkJCWlmICgoSU5GUkFfT04ocEFkKSAmJiAocEFkLT5TdGFDZmcuUHNtID09IFBXUl9TQVZFKSkKLQkJCSAgICB8fCAocEFkLT5Db21tb25DZmcuYkFQU0RGb3JjZVBvd2VyU2F2ZSkpIHsKLQkJCQl1OCBGcmVlTnVtYmVyOwotCQkJCS8qICAxLiBBUCBoYXMgYmFja2xvZ2dlZCB1bmljYXN0LXRvLW1lIGZyYW1lLCBzdGF5IEFXQUtFLCBzZW5kIFBTUE9MTCAqLwotCQkJCS8qICAyLiBBUCBoYXMgYmFja2xvZ2dlZCBicm9hZGNhc3QvbXVsdGljYXN0IGZyYW1lIGFuZCB3ZSB3YW50IHRob3NlIGZyYW1lcywgc3RheSBBV0FLRSAqLwotCQkJCS8qICAzLiB3ZSBoYXZlIG91dGdvaW5nIGZyYW1lcyBpbiBUeFJpbmcgb3IgTWdtdFJpbmcsIGJldHRlciBzdGF5IEFXQUtFICovCi0JCQkJLyogIDQuIFBzbSBjaGFuZ2UgdG8gUFdSX1NBVkUsIGJ1dCBBUCBub3QgYmVlbiBpbmZvcm1lZCB5ZXQsIHdlIGJldHRlciBzdGF5IEFXQUtFICovCi0JCQkJLyogIDUuIG90aGVyd2lzZSwgcHV0IFBIWSBiYWNrIHRvIHNsZWVwIHRvIHNhdmUgYmF0dGVyeS4gKi8KLQkJCQlpZiAoTWVzc2FnZVRvTWUpIHsKLSNpZmRlZiBSVE1QX01BQ19QQ0kKLQkJCQkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRwotCQkJCQkgICAgKHBBZCwgZk9QX1NUQVRVU19QQ0lFX0RFVklDRSkpIHsKLQkJCQkJCS8qIFJlc3RvcmUgdG8gY29ycmVjdCBCQlAgUjMgdmFsdWUgKi8KLQkJCQkJCWlmIChwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID4KLQkJCQkJCSAgICAxKQotCQkJCQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQKLQkJCQkJCQkgICAgKHBBZCwgQkJQX1IzLAotCQkJCQkJCSAgICAgcEFkLT5TdGFDZmcuQkJQUjMpOwotCQkJCQkJLyogVHVybiBjbGsgdG8gODBNaHouICovCi0JCQkJCX0KLSNlbmRpZiAvKiBSVE1QX01BQ19QQ0kgLy8gKi8KLQkJCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQ2FwYWJsZQotCQkJCQkgICAgJiYgcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS4KLQkJCQkJICAgIGJBUFNEQ2FwYWJsZQotCQkJCQkgICAgJiYgcEFkLT5Db21tb25DZmcuYkFQU0RBQ19CRQotCQkJCQkgICAgJiYgcEFkLT5Db21tb25DZmcuYkFQU0RBQ19CSwotCQkJCQkgICAgJiYgcEFkLT5Db21tb25DZmcuYkFQU0RBQ19WSQotCQkJCQkgICAgJiYgcEFkLT5Db21tb25DZmcuYkFQU0RBQ19WTykgewotCQkJCQkJcEFkLT5Db21tb25DZmcuCi0JCQkJCQkgICAgYk5lZWRTZW5kVHJpZ2dlckZyYW1lID0KLQkJCQkJCSAgICBUUlVFOwotCQkJCQl9IGVsc2UKLQkJCQkJCVJUTVBfUFNfUE9MTF9FTlFVRVVFKHBBZCk7Ci0JCQkJfSBlbHNlIGlmIChCY2FzdEZsYWcgJiYgKER0aW1Db3VudCA9PSAwKQotCQkJCQkgICAmJiBPUFNUQVRVU19URVNUX0ZMQUcocEFkLAotCQkJCQkJCQkgZk9QX1NUQVRVU19SRUNFSVZFX0RUSU0pKQotCQkJCXsKLSNpZmRlZiBSVE1QX01BQ19QQ0kKLQkJCQkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRwotCQkJCQkgICAgKHBBZCwgZk9QX1NUQVRVU19QQ0lFX0RFVklDRSkpIHsKLQkJCQkJCWlmIChwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID4KLQkJCQkJCSAgICAxKQotCQkJCQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQKLQkJCQkJCQkgICAgKHBBZCwgQkJQX1IzLAotCQkJCQkJCSAgICAgcEFkLT5TdGFDZmcuQkJQUjMpOwotCQkJCQl9Ci0jZW5kaWYgLyogUlRNUF9NQUNfUENJIC8vICovCi0JCQkJfSBlbHNlCi0JCQkJICAgIGlmICgocEFkLT5UeFN3UXVldWVbUUlEX0FDX0JLXS5OdW1iZXIgIT0gMCkKLQkJCQkJfHwgKHBBZC0+VHhTd1F1ZXVlW1FJRF9BQ19CRV0uTnVtYmVyICE9Ci0JCQkJCSAgICAwKQotCQkJCQl8fCAocEFkLT5UeFN3UXVldWVbUUlEX0FDX1ZJXS5OdW1iZXIgIT0KLQkJCQkJICAgIDApCi0JCQkJCXx8IChwQWQtPlR4U3dRdWV1ZVtRSURfQUNfVk9dLk51bWJlciAhPQotCQkJCQkgICAgMCkKLQkJCQkJfHwKLQkJCQkJKFJUTVBGcmVlVFhEUmVxdWVzdAotCQkJCQkgKHBBZCwgUUlEX0FDX0JLLCBUWF9SSU5HX1NJWkUgLSAxLAotCQkJCQkgICZGcmVlTnVtYmVyKSAhPSBORElTX1NUQVRVU19TVUNDRVNTKQotCQkJCQl8fAotCQkJCQkoUlRNUEZyZWVUWERSZXF1ZXN0Ci0JCQkJCSAocEFkLCBRSURfQUNfQkUsIFRYX1JJTkdfU0laRSAtIDEsCi0JCQkJCSAgJkZyZWVOdW1iZXIpICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCi0JCQkJCXx8Ci0JCQkJCShSVE1QRnJlZVRYRFJlcXVlc3QKLQkJCQkJIChwQWQsIFFJRF9BQ19WSSwgVFhfUklOR19TSVpFIC0gMSwKLQkJCQkJICAmRnJlZU51bWJlcikgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKLQkJCQkJfHwKLQkJCQkJKFJUTVBGcmVlVFhEUmVxdWVzdAotCQkJCQkgKHBBZCwgUUlEX0FDX1ZPLCBUWF9SSU5HX1NJWkUgLSAxLAotCQkJCQkgICZGcmVlTnVtYmVyKSAhPSBORElTX1NUQVRVU19TVUNDRVNTKQotCQkJCQl8fAotCQkJCQkoUlRNUEZyZWVUWERSZXF1ZXN0Ci0JCQkJCSAocEFkLCBRSURfTUdNVCwgTUdNVF9SSU5HX1NJWkUgLSAxLAotCQkJCQkgICZGcmVlTnVtYmVyKSAhPQotCQkJCQkgTkRJU19TVEFUVVNfU1VDQ0VTUykpIHsKLQkJCQkJLyogVE9ETzogY29uc2lkZXIgc2NoZWR1bGVkIEhDQ0EuIG1pZ2h0IG5vdCBiZSBwcm9wZXIgdG8gdXNlIHRyYWRpdGlvbmFsIERUSU0tYmFzZWQgcG93ZXItc2F2aW5nIHNjaGVtZSAqLwotCQkJCQkvKiBjYW4gd2UgY2hlYXQgaGVyZSAoaS5lLiBqdXN0IGNoZWNrIE1HTVQgJiBBQ19CRSkgZm9yIGJldHRlciBwZXJmb3JtYW5jZT8gKi8KLSNpZmRlZiBSVE1QX01BQ19QQ0kKLQkJCQkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRwotCQkJCQkgICAgKHBBZCwgZk9QX1NUQVRVU19QQ0lFX0RFVklDRSkpIHsKLQkJCQkJCWlmIChwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID4KLQkJCQkJCSAgICAxKQotCQkJCQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQKLQkJCQkJCQkgICAgKHBBZCwgQkJQX1IzLAotCQkJCQkJCSAgICAgcEFkLT5TdGFDZmcuQkJQUjMpOwotCQkJCQl9Ci0jZW5kaWYgLyogUlRNUF9NQUNfUENJIC8vICovCi0JCQkJfSBlbHNlIHsKLQkJCQkJaWYgKChwQWQtPkNvbW1vbkNmZy4KLQkJCQkJICAgICBiQUNNQVBTRFRyW1FJRF9BQ19WT10pCi0JCQkJCSAgICB8fCAocEFkLT5Db21tb25DZmcuCi0JCQkJCQliQUNNQVBTRFRyW1FJRF9BQ19WSV0pCi0JCQkJCSAgICB8fCAocEFkLT5Db21tb25DZmcuCi0JCQkJCQliQUNNQVBTRFRyW1FJRF9BQ19CS10pCi0JCQkJCSAgICB8fCAocEFkLT5Db21tb25DZmcuCi0JCQkJCQliQUNNQVBTRFRyW1FJRF9BQ19CRV0pKSB7Ci0JCQkJCQkvKgotCQkJCQkJICAgV01NIFNwZWMgdjEuMCAzLjYuMi40LAotCQkJCQkJICAgVGhlIFdNTSBTVEEgc2hhbGwgcmVtYWluIGF3YWtlIHVudGlsIGl0IHJlY2VpdmVzIGEKLQkJCQkJCSAgIFFvUyBEYXRhIG9yIE51bGwgZnJhbWUgYWRkcmVzc2VkIHRvIGl0LCB3aXRoIHRoZQotCQkJCQkJICAgRU9TUCBzdWJmaWVsZCBpbiBRb1MgQ29udHJvbCBmaWVsZCBzZXQgdG8gMS4KLQotCQkJCQkJICAgU28gd2UgY2FuIG5vdCBzbGVlcCBoZXJlIG9yIHdlIHdpbGwgc3VmZmVyIGEgY2FzZToKLQotCQkJCQkJICAgUFMgTWFuYWdlbWVudCBGcmFtZSAtLT4KLQkJCQkJCSAgIFRyaWdnZXIgZnJhbWUgLS0+Ci0JCQkJCQkgICBCZWFjb24gKFRJTT0wKSAoQmVhY29uIGlzIGNsb3NlciB0byBUcmlnIGZyYW1lKSAtLT4KLQkJCQkJCSAgIFN0YXRpb24gZ29lcyB0byBzbGVlcCAtLT4KLQkJCQkJCSAgIEFQIGRlbGl2ZXJ5IHF1ZXVlZCBVQVBTRCBwYWNrZXRzIC0tPgotCQkJCQkJICAgU3RhdGlvbiBjYW4gTk9UIHJlY2VpdmUgdGhlIHJlcGx5Ci0KLQkJCQkJCSAgIE1heWJlIHdlIG5lZWQgYSB0aW1lb3V0IHRpbWVyIHRvIGF2b2lkIHRoYXQgd2UgZG8KLQkJCQkJCSAgIE5PVCByZWNlaXZlIHRoZSBFT1NQIGZyYW1lLgotCi0JCQkJCQkgICBXZSBjYW4gbm90IHVzZSBNb3JlIERhdGEgdG8gY2hlY2sgaWYgU1AgaXMgZW5kZWQKLQkJCQkJCSAgIGR1ZSB0byBNYXhTUExlbmd0aC4KLQkJCQkJCSAqLwotCQkJCQl9IGVsc2UgewotCQkJCQkJdTE2IE5leHREdGltID0gRHRpbUNvdW50OwotCi0JCQkJCQlpZiAoTmV4dER0aW0gPT0gMCkKLQkJCQkJCQlOZXh0RHRpbSA9IER0aW1QZXJpb2Q7Ci0KLQkJCQkJCVRidHROdW1Ub05leHRXYWtlVXAgPQotCQkJCQkJICAgIHBBZC0+U3RhQ2ZnLgotCQkJCQkJICAgIERlZmF1bHRMaXN0ZW5Db3VudDsKLQkJCQkJCWlmIChPUFNUQVRVU19URVNUX0ZMQUcKLQkJCQkJCSAgICAocEFkLAotCQkJCQkJICAgICBmT1BfU1RBVFVTX1JFQ0VJVkVfRFRJTSkKLQkJCQkJCSAgICAmJiAoVGJ0dE51bVRvTmV4dFdha2VVcCA+Ci0JCQkJCQkJTmV4dER0aW0pKQotCQkJCQkJCVRidHROdW1Ub05leHRXYWtlVXAgPQotCQkJCQkJCSAgICBOZXh0RHRpbTsKLQotCQkJCQkJaWYgKCFPUFNUQVRVU19URVNUX0ZMQUcKLQkJCQkJCSAgICAocEFkLCBmT1BfU1RBVFVTX0RPWkUpKSB7Ci0JCQkJCQkJLyogU2V0IGEgZmxhZyB0byBnbyB0byBzbGVlcCAuIFRoZW4gYWZ0ZXIgcGFyc2UgdGhpcyBSeERvbmVJbnRlcnJ1cHQsIHdpbGwgZ28gdG8gc2xlZXAgbW9kZS4gKi8KLQkJCQkJCQlwQWQtPgotCQkJCQkJCSAgICBUaGlzVGJ0dE51bVRvTmV4dFdha2VVcAotCQkJCQkJCSAgICA9Ci0JCQkJCQkJICAgIFRidHROdW1Ub05leHRXYWtlVXA7Ci0JCQkJCQkJQXNpY1NsZWVwVGhlbkF1dG9XYWtldXAKLQkJCQkJCQkgICAgKHBBZCwKLQkJCQkJCQkgICAgIHBBZC0+Ci0JCQkJCQkJICAgICBUaGlzVGJ0dE51bVRvTmV4dFdha2VVcCk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJLyogbm90IG15IEJTU0lELCBpZ25vcmUgaXQgKi8KLQl9Ci0JLyogc2FuaXR5IGNoZWNrIGZhaWwsIGlnbm9yZSB0aGlzIGZyYW1lICovCi19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQkJUmVjZWl2ZSBQUk9CRSBSRVEgZnJvbSByZW1vdGUgcGVlciB3aGVuIG9wZXJhdGluZyBpbiBJQlNTIG1vZGUKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi12b2lkIFBlZXJQcm9iZVJlcUFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pCi17Ci0JdTggQWRkcjJbTUFDX0FERFJfTEVOXTsKLQljaGFyIFNzaWRbTUFYX0xFTl9PRl9TU0lEXTsKLQl1OCBTc2lkTGVuOwotCXU4IEh0TGVuLCBBZGRIdExlbiwgTmV3RXh0TGVuOwotCXN0cnVjdCBydF9oZWFkZXJfODAyXzExIFByb2JlUnNwSGRyOwotCWludCBOU3RhdHVzOwotCXU4ICpwT3V0QnVmZmVyID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIEZyYW1lTGVuID0gMDsKLQlMQVJHRV9JTlRFR0VSIEZha2VUaW1lc3RhbXA7Ci0JdTggRHNMZW4gPSAxLCBJYnNzTGVuID0gMjsKLQl1OCBMb2NhbEVycEllWzNdID0geyBJRV9FUlAsIDEsIDAgfTsKLQlCT09MRUFOIFByaXZhY3k7Ci0JdTE2IENhcGFiaWxpdHlJbmZvOwotCXU4IFJTTkllID0gSUVfV1BBOwotCi0JaWYgKCFBREhPQ19PTihwQWQpKQotCQlyZXR1cm47Ci0KLQlpZiAoUGVlclByb2JlUmVxU2FuaXR5Ci0JICAgIChwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuLCBBZGRyMiwgU3NpZCwgJlNzaWRMZW4pKSB7Ci0JCWlmICgoU3NpZExlbiA9PSAwKQotCQkgICAgfHwgU1NJRF9FUVVBTChTc2lkLCBTc2lkTGVuLCBwQWQtPkNvbW1vbkNmZy5Tc2lkLAotCQkJCSAgcEFkLT5Db21tb25DZmcuU3NpZExlbikpIHsKLQkJCS8qIGFsbG9jYXRlIGFuZCBzZW5kIG91dCBQcm9iZVJzcCBmcmFtZSAqLwotCQkJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsJLypHZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeSAqLwotCQkJaWYgKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKLQkJCQlyZXR1cm47Ci0KLQkJCS8qcEFkLT5TdGFDZmcuQXRpbVdpbiA9IDA7ICAvLyA/Pz8/Pz8gKi8KLQotCQkJUHJpdmFjeSA9Ci0JCQkgICAgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PQotCQkJICAgICBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkKQotCQkJICAgIHx8IChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0KLQkJCQlOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKQotCQkJICAgIHx8IChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0KLQkJCQlOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKTsKLQkJCUNhcGFiaWxpdHlJbmZvID0KLQkJCSAgICBDQVBfR0VORVJBVEUoMCwgMSwgUHJpdmFjeSwKLQkJCQkJIChwQWQtPkNvbW1vbkNmZy5UeFByZWFtYmxlID09Ci0JCQkJCSAgUnQ4MDJfMTFQcmVhbWJsZVNob3J0KSwgMCwgMCk7Ci0KLQkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICZGcmFtZUxlbiwKLQkJCQkJICBzaXplb2Yoc3RydWN0IHJ0X2hlYWRlcl84MDJfMTEpLCAmUHJvYmVSc3BIZHIsCi0JCQkJCSAgVElNRVNUQU1QX0xFTiwgJkZha2VUaW1lc3RhbXAsCi0JCQkJCSAgMiwgJnBBZC0+Q29tbW9uQ2ZnLkJlYWNvblBlcmlvZCwKLQkJCQkJICAyLCAmQ2FwYWJpbGl0eUluZm8sCi0JCQkJCSAgMSwgJlNzaWRJZSwKLQkJCQkJICAxLCAmcEFkLT5Db21tb25DZmcuU3NpZExlbiwKLQkJCQkJICBwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuLAotCQkJCQkgIHBBZC0+Q29tbW9uQ2ZnLlNzaWQsIDEsICZTdXBSYXRlSWUsIDEsCi0JCQkJCSAgJnBBZC0+U3RhQWN0aXZlLlN1cFJhdGVMZW4sCi0JCQkJCSAgcEFkLT5TdGFBY3RpdmUuU3VwUmF0ZUxlbiwKLQkJCQkJICBwQWQtPlN0YUFjdGl2ZS5TdXBSYXRlLCAxLCAmRHNJZSwgMSwKLQkJCQkJICAmRHNMZW4sIDEsICZwQWQtPkNvbW1vbkNmZy5DaGFubmVsLCAxLAotCQkJCQkgICZJYnNzSWUsIDEsICZJYnNzTGVuLCAyLAotCQkJCQkgICZwQWQtPlN0YUFjdGl2ZS5BdGltV2luLCBFTkRfT0ZfQVJHUyk7Ci0KLQkJCWlmIChwQWQtPlN0YUFjdGl2ZS5FeHRSYXRlTGVuKSB7Ci0JCQkJdW5zaWduZWQgbG9uZyB0bXA7Ci0JCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAmdG1wLAotCQkJCQkJICAzLCBMb2NhbEVycEllLAotCQkJCQkJICAxLCAmRXh0UmF0ZUllLAotCQkJCQkJICAxLCAmcEFkLT5TdGFBY3RpdmUuRXh0UmF0ZUxlbiwKLQkJCQkJCSAgcEFkLT5TdGFBY3RpdmUuRXh0UmF0ZUxlbiwKLQkJCQkJCSAgJnBBZC0+U3RhQWN0aXZlLkV4dFJhdGUsCi0JCQkJCQkgIEVORF9PRl9BUkdTKTsKLQkJCQlGcmFtZUxlbiArPSB0bXA7Ci0JCQl9Ci0JCQkvKiBJZiBhZGhvYyBzZWNydWl0eSBpcyBzZXQgZm9yIFdQQS1Ob25lLCBhcHBlbmQgdGhlIGNpcGhlciBzdWl0ZSBJRSAqLwotCQkJaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmUpIHsKLQkJCQl1bnNpZ25lZCBsb25nIHRtcDsKLQkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICZ0bXAsCi0JCQkJCQkgIDEsICZSU05JZSwKLQkJCQkJCSAgMSwgJnBBZC0+U3RhQ2ZnLlJTTklFX0xlbiwKLQkJCQkJCSAgcEFkLT5TdGFDZmcuUlNOSUVfTGVuLAotCQkJCQkJICBwQWQtPlN0YUNmZy5SU05fSUUsCi0JCQkJCQkgIEVORF9PRl9BUkdTKTsKLQkJCQlGcmFtZUxlbiArPSB0bXA7Ci0JCQl9Ci0KLQkJCWlmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpIHsKLQkJCQl1bnNpZ25lZCBsb25nIFRtcExlbjsKLQkJCQl1OCBCUk9BRENPTVs0XSA9IHsgMHgwLCAweDkwLCAweDRjLCAweDMzIH07Ci0JCQkJSHRMZW4gPSBzaXplb2YocEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5KTsKLQkJCQlBZGRIdExlbiA9IHNpemVvZihwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8pOwotCQkJCU5ld0V4dExlbiA9IDE7Ci0JCQkJLypOZXcgZXh0ZW5zaW9uIGNoYW5uZWwgb2Zmc2V0IElFIGlzIGluY2x1ZGVkIGluIEJlYWNvbiwgUHJvYmUgUnNwIG9yIGNoYW5uZWwgU3dpdGNoIEFubm91bmNlbWVudCBGcmFtZSAqLwotCQkJCWlmIChwQWQtPmJCcm9hZENvbUhUID09IFRSVUUpIHsKLQkJCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLAotCQkJCQkJCSAgJlRtcExlbiwgMSwgJldwYUllLCA0LAotCQkJCQkJCSAgJkJST0FEQ09NWzBdLAotCQkJCQkJCSAgcEFkLT5NbG1lQXV4LgotCQkJCQkJCSAgSHRDYXBhYmlsaXR5TGVuLAotCQkJCQkJCSAgJnBBZC0+TWxtZUF1eC4KLQkJCQkJCQkgIEh0Q2FwYWJpbGl0eSwKLQkJCQkJCQkgIEVORF9PRl9BUkdTKTsKLQkJCQl9IGVsc2UgewotCQkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sCi0JCQkJCQkJICAmVG1wTGVuLCAxLCAmSHRDYXBJZSwKLQkJCQkJCQkgIDEsICZIdExlbiwKLQkJCQkJCQkgIHNpemVvZgotCQkJCQkJCSAgKHN0cnVjdCBydF9odF9jYXBhYmlsaXR5X2llKSwKLQkJCQkJCQkgICZwQWQtPkNvbW1vbkNmZy4KLQkJCQkJCQkgIEh0Q2FwYWJpbGl0eSwgMSwKLQkJCQkJCQkgICZBZGRIdEluZm9JZSwgMSwKLQkJCQkJCQkgICZBZGRIdExlbiwKLQkJCQkJCQkgIHNpemVvZgotCQkJCQkJCSAgKHN0cnVjdCBydF9hZGRfaHRfaW5mb19pZSksCi0JCQkJCQkJICAmcEFkLT5Db21tb25DZmcuCi0JCQkJCQkJICBBZGRIVEluZm8sIDEsCi0JCQkJCQkJICAmTmV3RXh0Q2hhbkllLCAxLAotCQkJCQkJCSAgJk5ld0V4dExlbiwKLQkJCQkJCQkgIHNpemVvZgotCQkJCQkJCSAgKHN0cnVjdCBydF9uZXdfZXh0X2NoYW5faWUpLAotCQkJCQkJCSAgJnBBZC0+Q29tbW9uQ2ZnLgotCQkJCQkJCSAgTmV3RXh0Q2hhbk9mZnNldCwKLQkJCQkJCQkgIEVORF9PRl9BUkdTKTsKLQkJCQl9Ci0JCQkJRnJhbWVMZW4gKz0gVG1wTGVuOwotCQkJfQotCi0JCQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKLQkJCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7Ci0JCX0KLQl9Ci19Ci0KLXZvaWQgQmVhY29uVGltZW91dEF0Sm9pbkFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pCi17Ci0JdTE2IFN0YXR1czsKLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTWU5DIC0gQmVhY29uVGltZW91dEF0Sm9pbkFjdGlvblxuIikpOwotCXBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUgPSBTWU5DX0lETEU7Ci0JU3RhdHVzID0gTUxNRV9SRUpfVElNRU9VVDsKLQlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfSk9JTl9DT05GLCAyLCAmU3RhdHVzKTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlTY2FuIHRpbWVvdXQgcHJvY2VkdXJlLiBiYXNpY2FsbHkgYWRkIGNoYW5uZWwgaW5kZXggYnkgMSBhbmQgcmVzY2FuCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotdm9pZCBTY2FuVGltZW91dEFjdGlvbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pCi17Ci0JcEFkLT5NbG1lQXV4LkNoYW5uZWwgPSBOZXh0Q2hhbm5lbChwQWQsIHBBZC0+TWxtZUF1eC5DaGFubmVsKTsKLQotCS8qIE9ubHkgb25lIGNoYW5uZWwgc2Nhbm5lZCBmb3IgQ0lTQ08gYmVhY29uIHJlcXVlc3QgKi8KLQlpZiAoKHBBZC0+TWxtZUF1eC5TY2FuVHlwZSA9PSBTQ0FOX0NJU0NPX0FDVElWRSkgfHwKLQkgICAgKHBBZC0+TWxtZUF1eC5TY2FuVHlwZSA9PSBTQ0FOX0NJU0NPX1BBU1NJVkUpIHx8Ci0JICAgIChwQWQtPk1sbWVBdXguU2NhblR5cGUgPT0gU0NBTl9DSVNDT19OT0lTRSkgfHwKLQkgICAgKHBBZC0+TWxtZUF1eC5TY2FuVHlwZSA9PSBTQ0FOX0NJU0NPX0NIQU5ORUxfTE9BRCkpCi0JCXBBZC0+TWxtZUF1eC5DaGFubmVsID0gMDsKLQotCS8qIHRoaXMgcm91dGluZSB3aWxsIHN0b3AgaWYgcEFkLT5NbG1lQXV4LkNoYW5uZWwgPT0gMCAqLwotCVNjYW5OZXh0Q2hhbm5lbChwQWQpOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotdm9pZCBJbnZhbGlkU3RhdGVXaGVuU2NhbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pCi17Ci0JdTE2IFN0YXR1czsKLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJICgiQVlOQyAtIEludmFsaWRTdGF0ZVdoZW5TY2FuKHN0YXRlPSVsZCkuIFJlc2V0IFNZTkMgbWFjaGluZVxuIiwKLQkJICBwQWQtPk1sbWUuU3luY01hY2hpbmUuQ3VyclN0YXRlKSk7Ci0JcEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSA9IFNZTkNfSURMRTsKLQlTdGF0dXMgPSBNTE1FX1NUQVRFX01BQ0hJTkVfUkVKRUNUOwotCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9TQ0FOX0NPTkYsIDIsICZTdGF0dXMpOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotdm9pZCBJbnZhbGlkU3RhdGVXaGVuSm9pbihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pCi17Ci0JdTE2IFN0YXR1czsKLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJICgiSW52YWxpZFN0YXRlV2hlbkpvaW4oc3RhdGU9JWxkKS4gUmVzZXQgU1lOQyBtYWNoaW5lXG4iLAotCQkgIHBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUpKTsKLQlwQWQtPk1sbWUuU3luY01hY2hpbmUuQ3VyclN0YXRlID0gU1lOQ19JRExFOwotCVN0YXR1cyA9IE1MTUVfU1RBVEVfTUFDSElORV9SRUpFQ1Q7Ci0JTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX0pPSU5fQ09ORiwgMiwgJlN0YXR1cyk7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi12b2lkIEludmFsaWRTdGF0ZVdoZW5TdGFydChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pCi17Ci0JdTE2IFN0YXR1czsKLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJICgiSW52YWxpZFN0YXRlV2hlblN0YXJ0KHN0YXRlPSVsZCkuIFJlc2V0IFNZTkMgbWFjaGluZVxuIiwKLQkJICBwQWQtPk1sbWUuU3luY01hY2hpbmUuQ3VyclN0YXRlKSk7Ci0JcEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSA9IFNZTkNfSURMRTsKLQlTdGF0dXMgPSBNTE1FX1NUQVRFX01BQ0hJTkVfUkVKRUNUOwotCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9TVEFSVF9DT05GLCAyLCAmU3RhdHVzKTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi12b2lkIEVucXVldWVQc1BvbGwoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCi0JaWYgKHBBZC0+U3RhQ2ZnLldpbmRvd3NQb3dlck1vZGUgPT0gTmRpczgwMl8xMVBvd2VyTW9kZUxlZ2FjeV9QU1ApCi0JCXBBZC0+UHNQb2xsRnJhbWUuRkMuUHdyTWdtdCA9IFBXUl9TQVZFOwotCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgMCwgKHU4ICopJiBwQWQtPlBzUG9sbEZyYW1lLAotCQkJICBzaXplb2Yoc3RydWN0IHJ0X3BzcG9sbF9mcmFtZSkpOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotdm9pZCBFbnF1ZXVlUHJvYmVSZXF1ZXN0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlpbnQgTlN0YXRlOwotCXU4ICpwT3V0QnVmZmVyOwotCXVuc2lnbmVkIGxvbmcgRnJhbWVMZW4gPSAwOwotCXN0cnVjdCBydF9oZWFkZXJfODAyXzExIEhkcjgwMjExOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiZm9yY2Ugb3V0IGEgUHJvYmVSZXF1ZXN0IC4uLlxuIikpOwotCi0JTlN0YXRlID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOwkvKkdldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5ICovCi0JaWYgKE5TdGF0ZSA9PSBORElTX1NUQVRVU19TVUNDRVNTKSB7Ci0JCU1ndE1hY0hlYWRlckluaXQocEFkLCAmSGRyODAyMTEsIFNVQlRZUEVfUFJPQkVfUkVRLCAwLAotCQkJCSBCUk9BRENBU1RfQUREUiwgQlJPQURDQVNUX0FERFIpOwotCi0JCS8qIHRoaXMgUHJvYmVSZXF1ZXN0IGV4cGxpY2l0bHkgc3BlY2lmeSBTU0lEIHRvIHJlZHVjZSB1bndhbnRlZCBQcm9iZVJlc3BvbnNlICovCi0JCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICZGcmFtZUxlbiwKLQkJCQkgIHNpemVvZihzdHJ1Y3QgcnRfaGVhZGVyXzgwMl8xMSksICZIZHI4MDIxMSwKLQkJCQkgIDEsICZTc2lkSWUsCi0JCQkJICAxLCAmcEFkLT5Db21tb25DZmcuU3NpZExlbiwKLQkJCQkgIHBBZC0+Q29tbW9uQ2ZnLlNzaWRMZW4sIHBBZC0+Q29tbW9uQ2ZnLlNzaWQsCi0JCQkJICAxLCAmU3VwUmF0ZUllLAotCQkJCSAgMSwgJnBBZC0+U3RhQWN0aXZlLlN1cFJhdGVMZW4sCi0JCQkJICBwQWQtPlN0YUFjdGl2ZS5TdXBSYXRlTGVuLAotCQkJCSAgcEFkLT5TdGFBY3RpdmUuU3VwUmF0ZSwgRU5EX09GX0FSR1MpOwotCQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKLQkJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKLQl9Ci0KLX0KLQotQk9PTEVBTiBTY2FuUnVubmluZyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0JcmV0dXJuIChwQWQtPk1sbWUuU3luY01hY2hpbmUuQ3VyclN0YXRlID09IFNDQU5fTElTVEVOKSA/IFRSVUUgOiBGQUxTRTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhL3dwYS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvd3BhLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmMzQ4MzIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvd3BhLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNzQgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLQlNb2R1bGUgTmFtZToKLQl3cGEuYwotCi0JQWJzdHJhY3Q6Ci0KLQlSZXZpc2lvbiBIaXN0b3J5OgotCVdobwkJCVdoZW4JCQlXaGF0Ci0JLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCUphbglMZWUJCTAzLTA3LTIyCQlJbml0aWFsCi0JUGF1bCBMaW4JCTAzLTExLTI4CQlNb2RpZnkgZm9yIHN1cHBsaWNhbnQKLQlKdXN0aW4gUC4gTWF0dG9jawkxMS8wNy8yMDEwCQlGaXggdHlwb3MKLSovCi0jaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCi0KLXZvaWQgaW5jX2J5dGVfYXJyYXkodTggKiBjb3VudGVyLCBpbnQgbGVuKTsKLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JCVByb2Nlc3MgTUlDIGVycm9yIGluZGljYXRpb24gYW5kIHJlY29yZCBNSUMgZXJyb3IgdGltZXIuCi0KLQlBcmd1bWVudHM6Ci0JCXBBZCAJUG9pbnRlciB0byBvdXIgYWRhcHRlcgotCQlwV3BhS2V5IAkJUG9pbnRlciB0byB0aGUgV1BBIGtleSBzdHJ1Y3R1cmUKLQotCVJldHVybiBWYWx1ZToKLQkJTm9uZQotCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBSVE1QUmVwb3J0TWljRXJyb3Ioc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfY2lwaGVyX2tleSAqcFdwYUtleSkKLXsKLQl1bnNpZ25lZCBsb25nIE5vdzsKLQl1OCB1bmljYXN0S2V5ID0gKHBXcGFLZXktPlR5cGUgPT0gUEFJUldJU0VfS0VZID8gMSA6IDApOwotCi0JLyogUmVjb3JkIExhc3QgTUlDIGVycm9yIHRpbWUgYW5kIGNvdW50ICovCi0JTmRpc0dldFN5c3RlbVVwVGltZSgmTm93KTsKLQlpZiAocEFkLT5TdGFDZmcuTWljRXJyQ250ID09IDApIHsKLQkJcEFkLT5TdGFDZmcuTWljRXJyQ250Kys7Ci0JCXBBZC0+U3RhQ2ZnLkxhc3RNaWNFcnJvclRpbWUgPSBOb3c7Ci0JCU5kaXNaZXJvTWVtb3J5KHBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXIsIDgpOwotCX0gZWxzZSBpZiAocEFkLT5TdGFDZmcuTWljRXJyQ250ID09IDEpIHsKLQkJaWYgKChwQWQtPlN0YUNmZy5MYXN0TWljRXJyb3JUaW1lICsgKDYwICogT1NfSFopKSA8IE5vdykgewotCQkJLyogVXBkYXRlIExhc3QgTUlDIGVycm9yIHRpbWUsIHRoaXMgZGlkIG5vdCB2aW9sYXRlIHR3byBNSUMgZXJyb3JzIHdpdGhpbiA2MCBzZWNvbmRzICovCi0JCQlwQWQtPlN0YUNmZy5MYXN0TWljRXJyb3JUaW1lID0gTm93OwotCQl9IGVsc2UgewotCi0JCQlpZiAocEFkLT5Db21tb25DZmcuYldpcmVsZXNzRXZlbnQpCi0JCQkJUlRNUFNlbmRXaXJlbGVzc0V2ZW50KHBBZCwKLQkJCQkJCSAgICAgIElXX0NPVU5URVJfTUVBU1VSRVNfRVZFTlRfRkxBRywKLQkJCQkJCSAgICAgIHBBZC0+TWFjVGFiLgotCQkJCQkJICAgICAgQ29udGVudFtCU1NJRF9XQ0lEXS5BZGRyLAotCQkJCQkJICAgICAgQlNTMCwgMCk7Ci0KLQkJCXBBZC0+U3RhQ2ZnLkxhc3RNaWNFcnJvclRpbWUgPSBOb3c7Ci0JCQkvKiBWaW9sYXRlIE1JQyBlcnJvciBjb3VudHMsIE1JQyBjb3VudGVybWVhc3VyZXMga2lja3MgaW4gKi8KLQkJCXBBZC0+U3RhQ2ZnLk1pY0VyckNudCsrOwotCQkJLyogV2Ugc2hhbGwgYmxvY2sgYWxsIHJlY2VwdGlvbiAqLwotCQkJLyogV2Ugc2hhbGwgY2xlYW4gYWxsIFR4IHJpbmcgYW5kIGRpc2Fzc29jaWF0ZSBmcm9tIEFQIGFmdGVyIG5leHQgRUFQT0wgZnJhbWUgKi8KLQkJCS8qICovCi0JCQkvKiBObyBuZWNlc3NhcnkgdG8gY2xlYW4gYWxsIFR4IHJpbmcsIG9uIFJUTVBIYXJkVHJhbnNtaXQgd2lsbCBzdG9wIHNlbmRpbmcgbm9uLTgwMi4xWCBFQVBPTCBwYWNrZXRzICovCi0JCQkvKiBpZiBwQWQtPlN0YUNmZy5NaWNFcnJDbnQgZ3JlYXRlciB0aGFuIDIuICovCi0JCQkvKiAqLwotCQkJLyogUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0FDX0JLKTsgKi8KLQkJCS8qIFJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9BQ19CRSk7ICovCi0JCQkvKiBSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfQUNfVkkpOyAqLwotCQkJLyogUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0FDX1ZPKTsgKi8KLQkJCS8qIFJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9IQ0NBKTsgKi8KLQkJfQotCX0gZWxzZSB7Ci0JCS8qIE1JQyBlcnJvciBjb3VudCA+PSAyICovCi0JCS8qIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gKi8KLQkJOwotCX0KLQlNbG1lRW5xdWV1ZShwQWQsCi0JCSAgICBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwKLQkJICAgIE9JRF84MDJfMTFfTUlDX0ZBSUxVUkVfUkVQT1JUX0ZSQU1FLCAxLCAmdW5pY2FzdEtleSk7Ci0KLQlpZiAocEFkLT5TdGFDZmcuTWljRXJyQ250ID09IDIpIHsKLQkJUlRNUFNldFRpbWVyKCZwQWQtPlN0YUNmZy5XcGFEaXNhc3NvY0FuZEJsb2NrQXNzb2NUaW1lciwgMTAwKTsKLQl9Ci19Ci0KLSNkZWZpbmUJTEVOR1RIX0VBUF9IICAgIDQKLS8qIElmIHRoZSByZWNlaXZlZCBmcmFtZSBpcyBFQVAtUGFja2V0ICxmaW5kIG91dCBpdHMgRUFQLUNvZGUgKFJlcXVlc3QoMHgwMSksIFJlc3BvbnNlKDB4MDIpLCBTdWNjZXNzKDB4MDMpLCBGYWlsdXJlKDB4MDQpKS4gKi8KLWludCBXcGFDaGVja0VhcENvZGUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICAgdTggKnBGcmFtZSwgdTE2IEZyYW1lTGVuLCB1MTYgT2ZmU2V0KQotewotCi0JdTggKnBEYXRhOwotCWludCByZXN1bHQgPSAwOwotCi0JaWYgKEZyYW1lTGVuIDwgT2ZmU2V0ICsgTEVOR1RIX0VBUE9MX0ggKyBMRU5HVEhfRUFQX0gpCi0JCXJldHVybiByZXN1bHQ7Ci0KLQlwRGF0YSA9IHBGcmFtZSArIE9mZlNldDsJLyogc2tpcCBvZmZzZXQgYnl0ZXMgKi8KLQotCWlmICgqKHBEYXRhICsgMSkgPT0gRUFQUGFja2V0KQkvKiA4MDIuMXggaGVhZGVyIC0gUGFja2V0IFR5cGUgKi8KLQl7Ci0JCXJlc3VsdCA9ICoocERhdGEgKyA0KTsJLyogRUFQIGhlYWRlciAtIENvZGUgKi8KLQl9Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIFdwYVNlbmRNaWNGYWlsdXJlVG9XcGFTdXBwbGljYW50KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgSU4gQk9PTEVBTiBiVW5pY2FzdCkKLXsKLQljaGFyIGN1c3RvbVtJV19DVVNUT01fTUFYXSA9IHsgMCB9OwotCi0Jc3ByaW50ZihjdXN0b20sICJNTE1FLU1JQ0hBRUxNSUNGQUlMVVJFLmluZGljYXRpb24iKTsKLQlpZiAoYlVuaWNhc3QpCi0JCXNwcmludGYoY3VzdG9tLCAiJXMgdW5pY2FzdCIsIGN1c3RvbSk7Ci0KLQlSdG1wT1NXcmllbGVzc0V2ZW50U2VuZChwQWQsIElXRVZDVVNUT00sIC0xLCBOVUxMLCAodTggKiljdXN0b20sCi0JCQkJc3RybGVuKGN1c3RvbSkpOwotCi0JcmV0dXJuOwotfQotCi12b2lkIFdwYU1pY0ZhaWx1cmVSZXBvcnRGcmFtZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pCi17Ci0JdTggKnBPdXRCdWZmZXIgPSBOVUxMOwotCXU4IEhlYWRlcjgwMl8zWzE0XTsKLQl1bnNpZ25lZCBsb25nIEZyYW1lTGVuID0gMDsKLQlzdHJ1Y3QgcnRfZWFwb2xfcGFja2V0IFBhY2tldDsKLQl1OCBNaWNbMTZdOwotCUJPT0xFQU4gYlVuaWNhc3Q7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJXcGFNaWNGYWlsdXJlUmVwb3J0RnJhbWUgLS0tLS0+XG4iKSk7Ci0KLQliVW5pY2FzdCA9IChFbGVtLT5Nc2dbMF0gPT0gMSA/IFRSVUUgOiBGQUxTRSk7Ci0JcEFkLT5TZXF1ZW5jZSA9ICgocEFkLT5TZXF1ZW5jZSkgKyAxKSAmIChNQVhfU0VRX05VTUJFUik7Ci0KLQkvKiBpbml0IDgwMi4zIGhlYWRlciBhbmQgRmlsbCBQYWNrZXQgKi8KLQlNQUtFXzgwMl8zX0hFQURFUihIZWFkZXI4MDJfMywgcEFkLT5Db21tb25DZmcuQnNzaWQsCi0JCQkgIHBBZC0+Q3VycmVudEFkZHJlc3MsIEVBUE9MKTsKLQotCU5kaXNaZXJvTWVtb3J5KCZQYWNrZXQsIHNpemVvZihQYWNrZXQpKTsKLQlQYWNrZXQuUHJvVmVyID0gRUFQT0xfVkVSOwotCVBhY2tldC5Qcm9UeXBlID0gRUFQT0xLZXk7Ci0KLQlQYWNrZXQuS2V5RGVzYy5UeXBlID0gV1BBMV9LRVlfREVTQzsKLQotCS8qIFJlcXVlc3QgZmllbGQgcHJlc2VudGVkICovCi0JUGFja2V0LktleURlc2MuS2V5SW5mby5SZXF1ZXN0ID0gMTsKLQotCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkgewotCQlQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLktleURlc2NWZXIgPSAyOwotCX0gZWxzZQkJCS8qIFRLSVAgKi8KLQl7Ci0JCVBhY2tldC5LZXlEZXNjLktleUluZm8uS2V5RGVzY1ZlciA9IDE7Ci0JfQotCi0JUGFja2V0LktleURlc2MuS2V5SW5mby5LZXlUeXBlID0gKGJVbmljYXN0ID8gUEFJUldJU0VLRVkgOiBHUk9VUEtFWSk7Ci0KLQkvKiBLZXlNaWMgZmllbGQgcHJlc2VudGVkICovCi0JUGFja2V0LktleURlc2MuS2V5SW5mby5LZXlNaWMgPSAxOwotCi0JLyogRXJyb3IgZmllbGQgcHJlc2VudGVkICovCi0JUGFja2V0LktleURlc2MuS2V5SW5mby5FcnJvciA9IDE7Ci0KLQkvKiBVcGRhdGUgcGFja2V0IGxlbmd0aCBhZnRlciBkZWNpZGUgS2V5IGRhdGEgcGF5bG9hZCAqLwotCVNFVF91MTZfVE9fQVJSQVJZKFBhY2tldC5Cb2R5X0xlbiwgTEVOX0VBUE9MX0tFWV9NU0cpCi0JICAgIC8qIEtleSBSZXBsYXkgQ291bnQgKi8KLQkgICAgTmRpc01vdmVNZW1vcnkoUGFja2V0LktleURlc2MuUmVwbGF5Q291bnRlciwKLQkJCSAgIHBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXIsIExFTl9LRVlfREVTQ19SRVBMQVkpOwotCWluY19ieXRlX2FycmF5KHBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXIsIDgpOwotCi0JLyogQ29udmVydCB0byBsaXR0bGUtZW5kaWFuIGZvcm1hdC4gKi8KLQkqKCh1MTYgKikgJiBQYWNrZXQuS2V5RGVzYy5LZXlJbmZvKSA9Ci0JICAgIGNwdTJsZTE2KCooKHUxNiAqKSAmIFBhY2tldC5LZXlEZXNjLktleUluZm8pKTsKLQotCU1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICh1OCAqKikgJiBwT3V0QnVmZmVyKTsJLyogYWxsb2NhdGUgbWVtb3J5ICovCi0JaWYgKHBPdXRCdWZmZXIgPT0gTlVMTCkgewotCQlyZXR1cm47Ci0JfQotCS8qIFByZXBhcmUgRUFQT0wgZnJhbWUgZm9yIE1JQyBjYWxjdWxhdGlvbiAqLwotCS8qIEJlIGNhcmVmdWwsIG9ubHkgRUFQT0wgZnJhbWUgaXMgY291bnRlZCBmb3IgTUlDIGNhbGN1bGF0aW9uICovCi0JTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwgJkZyYW1lTGVuLAotCQkJICBDT05WX0FSUkFSWV9UT191MTYoUGFja2V0LkJvZHlfTGVuKSArIDQsICZQYWNrZXQsCi0JCQkgIEVORF9PRl9BUkdTKTsKLQotCS8qIFByZXBhcmUgYW5kIEZpbGwgTUlDIHZhbHVlICovCi0JTmRpc1plcm9NZW1vcnkoTWljLCBzaXplb2YoTWljKSk7Ci0JaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKSB7CS8qIEFFUyAqLwotCQl1OCBkaWdlc3RbMjBdID0geyAwIH07Ci0JCUhNQUNfU0hBMShwQWQtPlN0YUNmZy5QVEssIExFTl9FQVBfTUlDSywgcE91dEJ1ZmZlciwgRnJhbWVMZW4sCi0JCQkgIGRpZ2VzdCwgU0hBMV9ESUdFU1RfU0laRSk7Ci0JCU5kaXNNb3ZlTWVtb3J5KE1pYywgZGlnZXN0LCBMRU5fS0VZX0RFU0NfTUlDKTsKLQl9IGVsc2UgewkJLyogVEtJUCAqLwotCQlITUFDX01ENShwQWQtPlN0YUNmZy5QVEssIExFTl9FQVBfTUlDSywgcE91dEJ1ZmZlciwgRnJhbWVMZW4sCi0JCQkgTWljLCBNRDVfRElHRVNUX1NJWkUpOwotCX0KLQlOZGlzTW92ZU1lbW9yeShQYWNrZXQuS2V5RGVzYy5LZXlNaWMsIE1pYywgTEVOX0tFWV9ERVNDX01JQyk7Ci0KLQkvKiBjb3B5IGZyYW1lIHRvIFR4IHJpbmcgYW5kIHNlbmQgTUlDIGZhaWx1cmUgcmVwb3J0IGZyYW1lIHRvIGF1dGhlbnRpY2F0b3IgKi8KLQlSVE1QVG9XaXJlbGVzc1N0YShwQWQsICZwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLAotCQkJICBIZWFkZXI4MDJfMywgTEVOR1RIXzgwMl8zLAotCQkJICAodTggKikmIFBhY2tldCwKLQkJCSAgQ09OVl9BUlJBUllfVE9fdTE2KFBhY2tldC5Cb2R5X0xlbikgKyA0LCBGQUxTRSk7Ci0KLQlNbG1lRnJlZU1lbW9yeShwQWQsICh1OCAqKXBPdXRCdWZmZXIpOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiV3BhTWljRmFpbHVyZVJlcG9ydEZyYW1lIDwtLS0tLVxuIikpOwotfQotCi0vKiogZnJvbSB3cGFfc3VwcGxpY2FudAotICogaW5jX2J5dGVfYXJyYXkgLSBJbmNyZW1lbnQgYXJiaXRyYXJ5IGxlbmd0aCBieXRlIGFycmF5IGJ5IG9uZQotICogQGNvdW50ZXI6IFBvaW50ZXIgdG8gYnl0ZSBhcnJheQotICogQGxlbjogTGVuZ3RoIG9mIHRoZSBjb3VudGVyIGluIGJ5dGVzCi0gKgotICogVGhpcyBmdW5jdGlvbiBpbmNyZW1lbnRzIHRoZSBsYXN0IGJ5dGUgb2YgdGhlIGNvdW50ZXIgYnkgb25lIGFuZCBjb250aW51ZXMKLSAqIHJvbGxpbmcgb3ZlciB0byBtb3JlIHNpZ25pZmljYW50IGJ5dGVzIGlmIHRoZSBieXRlIHdhcyBpbmNyZW1lbnRlZCBmcm9tCi0gKiAweGZmIHRvIDB4MDAuCi0gKi8KLXZvaWQgaW5jX2J5dGVfYXJyYXkodTggKiBjb3VudGVyLCBpbnQgbGVuKQotewotCWludCBwb3MgPSBsZW4gLSAxOwotCXdoaWxlIChwb3MgPj0gMCkgewotCQljb3VudGVyW3Bvc10rKzsKLQkJaWYgKGNvdW50ZXJbcG9zXSAhPSAwKQotCQkJYnJlYWs7Ci0JCXBvcy0tOwotCX0KLX0KLQotdm9pZCBXcGFEaXNhc3NvY0FwQW5kQmxvY2tBc3NvYyh2b2lkICpTeXN0ZW1TcGVjaWZpYzEsCi0JCQkJdm9pZCAqRnVuY3Rpb25Db250ZXh0LAotCQkJCXZvaWQgKlN5c3RlbVNwZWNpZmljMiwKLQkJCQl2b2lkICpTeXN0ZW1TcGVjaWZpYzMpCi17Ci0Jc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkID0gKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKilGdW5jdGlvbkNvbnRleHQ7Ci0Jc3RydWN0IHJ0X21sbWVfZGlzYXNzb2NfcmVxIERpc2Fzc29jUmVxOwotCi0JLyogZGlzYXNzb2MgZnJvbSBjdXJyZW50IEFQIGZpcnN0ICovCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIlJUTVBSZXBvcnRNaWNFcnJvciAtIGRpc2Fzc29jaWF0ZSB3aXRoIGN1cnJlbnQgQVAgYWZ0ZXIgc2VuZGluZyBzZWNvbmQgY29udGludW91cyBFQVBPTCBmcmFtZVxuIikpOwotCURpc2Fzc29jUGFybUZpbGwocEFkLCAmRGlzYXNzb2NSZXEsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLAotCQkJIFJFQVNPTl9NSUNfRkFJTFVSRSk7Ci0JTWxtZUVucXVldWUocEFkLCBBU1NPQ19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9ESVNBU1NPQ19SRVEsCi0JCSAgICBzaXplb2Yoc3RydWN0IHJ0X21sbWVfZGlzYXNzb2NfcmVxKSwgJkRpc2Fzc29jUmVxKTsKLQotCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfRElTQVNTT0M7Ci0JcEFkLT5TdGFDZmcuYkJsb2NrQXNzb2MgPSBUUlVFOwotfQotCi12b2lkIFdwYVN0YVBhaXJ3aXNlS2V5U2V0dGluZyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0Jc3RydWN0IHJ0X2NpcGhlcl9rZXkgKnBTaGFyZWRLZXk7Ci0Jc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqcEVudHJ5OwotCi0JcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF07Ci0KLQkvKiBQYWlyd2lzZSBrZXkgc2hhbGwgdXNlIGtleSMwICovCi0JcFNoYXJlZEtleSA9ICZwQWQtPlNoYXJlZEtleVtCU1MwXVswXTsKLQotCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLlBUSywgcEVudHJ5LT5QVEssIExFTl9QVEspOwotCi0JLyogUHJlcGFyZSBwYWlyLXdpc2Uga2V5IGluZm9ybWF0aW9uIGludG8gc2hhcmVkIGtleSB0YWJsZSAqLwotCU5kaXNaZXJvTWVtb3J5KHBTaGFyZWRLZXksIHNpemVvZihzdHJ1Y3QgcnRfY2lwaGVyX2tleSkpOwotCXBTaGFyZWRLZXktPktleUxlbiA9IExFTl9US0lQX0VLOwotCU5kaXNNb3ZlTWVtb3J5KHBTaGFyZWRLZXktPktleSwgJnBBZC0+U3RhQ2ZnLlBUS1szMl0sIExFTl9US0lQX0VLKTsKLQlOZGlzTW92ZU1lbW9yeShwU2hhcmVkS2V5LT5SeE1pYywgJnBBZC0+U3RhQ2ZnLlBUS1s0OF0sCi0JCSAgICAgICBMRU5fVEtJUF9SWE1JQ0spOwotCU5kaXNNb3ZlTWVtb3J5KHBTaGFyZWRLZXktPlR4TWljLAotCQkgICAgICAgJnBBZC0+U3RhQ2ZnLlBUS1s0OCArIExFTl9US0lQX1JYTUlDS10sIExFTl9US0lQX1RYTUlDSyk7Ci0KLQkvKiBEZWNpZGUgaXRzIENoaXBlckFsZyAqLwotCWlmIChwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpCi0JCXBTaGFyZWRLZXktPkNpcGhlckFsZyA9IENJUEhFUl9US0lQOwotCWVsc2UgaWYgKHBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKLQkJcFNoYXJlZEtleS0+Q2lwaGVyQWxnID0gQ0lQSEVSX0FFUzsKLQllbHNlCi0JCXBTaGFyZWRLZXktPkNpcGhlckFsZyA9IENJUEhFUl9OT05FOwotCi0JLyogVXBkYXRlIHRoZXNlIHJlbGF0ZWQgaW5mb3JtYXRpb24gdG8gc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqLwotCU5kaXNNb3ZlTWVtb3J5KHBFbnRyeS0+UGFpcndpc2VLZXkuS2V5LCAmcEFkLT5TdGFDZmcuUFRLWzMyXSwKLQkJICAgICAgIExFTl9US0lQX0VLKTsKLQlOZGlzTW92ZU1lbW9yeShwRW50cnktPlBhaXJ3aXNlS2V5LlJ4TWljLCAmcEFkLT5TdGFDZmcuUFRLWzQ4XSwKLQkJICAgICAgIExFTl9US0lQX1JYTUlDSyk7Ci0JTmRpc01vdmVNZW1vcnkocEVudHJ5LT5QYWlyd2lzZUtleS5UeE1pYywKLQkJICAgICAgICZwQWQtPlN0YUNmZy5QVEtbNDggKyBMRU5fVEtJUF9SWE1JQ0tdLCBMRU5fVEtJUF9UWE1JQ0spOwotCXBFbnRyeS0+UGFpcndpc2VLZXkuQ2lwaGVyQWxnID0gcFNoYXJlZEtleS0+Q2lwaGVyQWxnOwotCi0JLyogVXBkYXRlIHBhaXJ3aXNlIGtleSBpbmZvcm1hdGlvbiB0byBBU0lDIFNoYXJlZCBLZXkgVGFibGUgKi8KLQlBc2ljQWRkU2hhcmVkS2V5RW50cnkocEFkLAotCQkJICAgICAgQlNTMCwKLQkJCSAgICAgIDAsCi0JCQkgICAgICBwU2hhcmVkS2V5LT5DaXBoZXJBbGcsCi0JCQkgICAgICBwU2hhcmVkS2V5LT5LZXksCi0JCQkgICAgICBwU2hhcmVkS2V5LT5UeE1pYywgcFNoYXJlZEtleS0+UnhNaWMpOwotCi0JLyogVXBkYXRlIEFTSUMgV0NJRCBhdHRyaWJ1dGUgdGFibGUgYW5kIElWRUlWIHRhYmxlICovCi0JUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeShwQWQsIEJTUzAsIDAsIHBTaGFyZWRLZXktPkNpcGhlckFsZywgcEVudHJ5KTsKLQlTVEFfUE9SVF9TRUNVUkVEKHBBZCk7Ci0JcEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPSBOZGlzTWVkaWFTdGF0ZUNvbm5lY3RlZDsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCIlcyA6IEFJRCglZCkgcG9ydCBzZWN1cmVkXG4iLCBfX2Z1bmNfXywgcEVudHJ5LT5BaWQpKTsKLQotfQotCi12b2lkIFdwYVN0YUdyb3VwS2V5U2V0dGluZyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0Jc3RydWN0IHJ0X2NpcGhlcl9rZXkgKnBTaGFyZWRLZXk7Ci0KLQlwU2hhcmVkS2V5ID0gJnBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF07Ci0KLQkvKiBQcmVwYXJlIHBhaXItd2lzZSBrZXkgaW5mb3JtYXRpb24gaW50byBzaGFyZWQga2V5IHRhYmxlICovCi0JTmRpc1plcm9NZW1vcnkocFNoYXJlZEtleSwgc2l6ZW9mKHN0cnVjdCBydF9jaXBoZXJfa2V5KSk7Ci0JcFNoYXJlZEtleS0+S2V5TGVuID0gTEVOX1RLSVBfRUs7Ci0JTmRpc01vdmVNZW1vcnkocFNoYXJlZEtleS0+S2V5LCBwQWQtPlN0YUNmZy5HVEssIExFTl9US0lQX0VLKTsKLQlOZGlzTW92ZU1lbW9yeShwU2hhcmVkS2V5LT5SeE1pYywgJnBBZC0+U3RhQ2ZnLkdUS1sxNl0sCi0JCSAgICAgICBMRU5fVEtJUF9SWE1JQ0spOwotCU5kaXNNb3ZlTWVtb3J5KHBTaGFyZWRLZXktPlR4TWljLCAmcEFkLT5TdGFDZmcuR1RLWzI0XSwKLQkJICAgICAgIExFTl9US0lQX1RYTUlDSyk7Ci0KLQkvKiBVcGRhdGUgU2hhcmVkIEtleSBDaXBoZXJBbGcgKi8KLQlwU2hhcmVkS2V5LT5DaXBoZXJBbGcgPSBDSVBIRVJfTk9ORTsKLQlpZiAocEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkKLQkJcFNoYXJlZEtleS0+Q2lwaGVyQWxnID0gQ0lQSEVSX1RLSVA7Ci0JZWxzZSBpZiAocEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKLQkJcFNoYXJlZEtleS0+Q2lwaGVyQWxnID0gQ0lQSEVSX0FFUzsKLQllbHNlIGlmIChwQWQtPlN0YUNmZy5Hcm91cENpcGhlciA9PSBOZGlzODAyXzExR3JvdXBXRVA0MEVuYWJsZWQpCi0JCXBTaGFyZWRLZXktPkNpcGhlckFsZyA9IENJUEhFUl9XRVA2NDsKLQllbHNlIGlmIChwQWQtPlN0YUNmZy5Hcm91cENpcGhlciA9PSBOZGlzODAyXzExR3JvdXBXRVAxMDRFbmFibGVkKQotCQlwU2hhcmVkS2V5LT5DaXBoZXJBbGcgPSBDSVBIRVJfV0VQMTI4OwotCi0JLyogVXBkYXRlIGdyb3VwIGtleSBpbmZvcm1hdGlvbiB0byBBU0lDIFNoYXJlZCBLZXkgVGFibGUgKi8KLQlBc2ljQWRkU2hhcmVkS2V5RW50cnkocEFkLAotCQkJICAgICAgQlNTMCwKLQkJCSAgICAgIHBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCwKLQkJCSAgICAgIHBTaGFyZWRLZXktPkNpcGhlckFsZywKLQkJCSAgICAgIHBTaGFyZWRLZXktPktleSwKLQkJCSAgICAgIHBTaGFyZWRLZXktPlR4TWljLCBwU2hhcmVkS2V5LT5SeE1pYyk7Ci0KLQkvKiBVcGRhdGUgQVNJQyBXQ0lEIGF0dHJpYnV0ZSB0YWJsZSBhbmQgSVZFSVYgdGFibGUgKi8KLQlSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5KHBBZCwKLQkJCQkgIEJTUzAsCi0JCQkJICBwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQsCi0JCQkJICBwU2hhcmVkS2V5LT5DaXBoZXJBbGcsIE5VTEwpOwotCi19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YV9pb2N0bC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGFfaW9jdGwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDliMTAxMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YV9pb2N0bC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjkxMiArMCwwIEBACi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFJhbGluayBUZWNoIEluYy4KLSAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKLSAqIEhzaW5jaHUgQ291bnR5IDMwMiwKLSAqIFRhaXdhbiwgUi5PLkMuCi0gKgotICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotICAgIE1vZHVsZSBOYW1lOgotICAgIHN0YV9pb2N0bC5jCi0KLSAgICBBYnN0cmFjdDoKLSAgICBJT0NUTCByZWxhdGVkIHN1YnJvdXRpbmVzCi0KLSAgICBSZXZpc2lvbiBIaXN0b3J5OgotICAgIAlXaG8gICAgICAgIAkJIFdoZW4gICAgICAgICAgV2hhdAotICAgIC0tLS0tLS0tICAgIC0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgCVJvcnkgQ2hlbiAgIAkJMDEtMDMtMjAwMyAgICAJY3JlYXRlZAotCVJvcnkgQ2hlbiAgIAkJMDItMTQtMjAwNSAgICAJbW9kaWZ5IHRvIHN1cHBvcnQgUlQ2MQotCUp1c3RpbiBQLiBNYXR0b2NrCTExLzA3LzIwMTAJRml4IHR5cG9zCi0qLwotCi0jaW5jbHVkZQkicnRfY29uZmlnLmgiCi0KLSNpZmRlZiBEQkcKLWV4dGVybiB1bnNpZ25lZCBsb25nIFJURGVidWdMZXZlbDsKLSNlbmRpZgotCi0jZGVmaW5lIE5SX1dFUF9LRVlTIAkJCQk0Ci0jZGVmaW5lIFdFUF9TTUFMTF9LRVlfTEVOIAkJCSg0MC84KQotI2RlZmluZSBXRVBfTEFSR0VfS0VZX0xFTiAJCQkoMTA0LzgpCi0KLSNkZWZpbmUgR1JPVVBfS0VZX05PICAgICAgICAgICAgICAgIDQKLQotZXh0ZXJuIHU4IENpcGhlcldwYTJUZW1wbGF0ZVtdOwotCi1zdHJ1Y3QgUEFDS0VEIHJ0X3ZlcnNpb25faW5mbyB7Ci0JdTggRHJpdmVyVmVyc2lvblc7Ci0JdTggRHJpdmVyVmVyc2lvblg7Ci0JdTggRHJpdmVyVmVyc2lvblk7Ci0JdTggRHJpdmVyVmVyc2lvblo7Ci0JdTMyIERyaXZlckJ1aWxkWWVhcjsKLQl1MzIgRHJpdmVyQnVpbGRNb250aDsKLQl1MzIgRHJpdmVyQnVpbGREYXk7Ci19OwotCi1zdGF0aWMgX19zMzIgcmFsaW5rcmF0ZVtdID0geyAyLCA0LCAxMSwgMjIsCS8qIENDSyAqLwotCTEyLCAxOCwgMjQsIDM2LCA0OCwgNzIsIDk2LCAxMDgsCS8qIE9GRE0gKi8KLQkxMywgMjYsIDM5LCA1MiwgNzgsIDEwNCwgMTE3LCAxMzAsIDI2LCA1MiwgNzgsIDEwNCwgMTU2LCAyMDgsIDIzNCwgMjYwLAkvKiAyME1IeiwgODAwbnMgR0ksIE1DUzogMCB+IDE1ICovCi0JMzksIDc4LCAxMTcsIDE1NiwgMjM0LCAzMTIsIDM1MSwgMzkwLAkvKiAyME1IeiwgODAwbnMgR0ksIE1DUzogMTYgfiAyMyAqLwotCTI3LCA1NCwgODEsIDEwOCwgMTYyLCAyMTYsIDI0MywgMjcwLCA1NCwgMTA4LCAxNjIsIDIxNiwgMzI0LCA0MzIsIDQ4NiwgNTQwLAkvKiA0ME1IeiwgODAwbnMgR0ksIE1DUzogMCB+IDE1ICovCi0JODEsIDE2MiwgMjQzLCAzMjQsIDQ4NiwgNjQ4LCA3MjksIDgxMCwJLyogNDBNSHosIDgwMG5zIEdJLCBNQ1M6IDE2IH4gMjMgKi8KLQkxNCwgMjksIDQzLCA1NywgODcsIDExNSwgMTMwLCAxNDQsIDI5LCA1OSwgODcsIDExNSwgMTczLCAyMzAsIDI2MCwgMjg4LAkvKiAyME1IeiwgNDAwbnMgR0ksIE1DUzogMCB+IDE1ICovCi0JNDMsIDg3LCAxMzAsIDE3MywgMjYwLCAzMTcsIDM5MCwgNDMzLAkvKiAyME1IeiwgNDAwbnMgR0ksIE1DUzogMTYgfiAyMyAqLwotCTMwLCA2MCwgOTAsIDEyMCwgMTgwLCAyNDAsIDI3MCwgMzAwLCA2MCwgMTIwLCAxODAsIDI0MCwgMzYwLCA0ODAsIDU0MCwgNjAwLAkvKiA0ME1IeiwgNDAwbnMgR0ksIE1DUzogMCB+IDE1ICovCi0JOTAsIDE4MCwgMjcwLCAzNjAsIDU0MCwgNzIwLCA4MTAsIDkwMAotfTsKLQotaW50IFNldF9TU0lEX1Byb2Moc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkYXB0ZXIsIGNoYXIgKmFyZyk7Ci0KLWludCBTZXRfTmV0d29ya1R5cGVfUHJvYyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWRhcHRlciwgY2hhciAqYXJnKTsKLQotdm9pZCBSVE1QQWRkS2V5KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgc3RydWN0IHJ0X25kaXNfODAyXzExX2tleSAqcEtleSkKLXsKLQl1bnNpZ25lZCBsb25nIEtleUlkeDsKLQlzdHJ1Y3QgcnRfbWFjX3RhYmxlX2VudHJ5ICpwRW50cnk7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSVE1QQWRkS2V5IC0tLS0tLT5cbiIpKTsKLQotCWlmIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpIHsKLQkJaWYgKHBLZXktPktleUluZGV4ICYgMHg4MDAwMDAwMCkgewotCQkJaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmUpIHsKLQkJCQlOZGlzWmVyb01lbW9yeShwQWQtPlN0YUNmZy5QTUssIDMyKTsKLQkJCQlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5QTUssCi0JCQkJCSAgICAgICBwS2V5LT5LZXlNYXRlcmlhbCwKLQkJCQkJICAgICAgIHBLZXktPktleUxlbmd0aCk7Ci0JCQkJZ290byBlbmQ7Ci0JCQl9Ci0JCQkvKiBVcGRhdGUgUFRLICovCi0JCQlOZGlzWmVyb01lbW9yeSgmcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0sCi0JCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcnRfY2lwaGVyX2tleSkpOwotCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5TGVuID0gTEVOX1RLSVBfRUs7Ci0JCQlOZGlzTW92ZU1lbW9yeShwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5LZXksCi0JCQkJICAgICAgIHBLZXktPktleU1hdGVyaWFsLCBMRU5fVEtJUF9FSyk7Ci0KLQkJCWlmIChwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID09Ci0JCQkgICAgTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkgewotCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLlJ4TWljLAotCQkJCQkgICAgICAgcEtleS0+S2V5TWF0ZXJpYWwgKyBMRU5fVEtJUF9FSywKLQkJCQkJICAgICAgIExFTl9US0lQX1RYTUlDSyk7Ci0JCQkJTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uVHhNaWMsCi0JCQkJCSAgICAgICBwS2V5LT5LZXlNYXRlcmlhbCArIExFTl9US0lQX0VLICsKLQkJCQkJICAgICAgIExFTl9US0lQX1RYTUlDSywKLQkJCQkJICAgICAgIExFTl9US0lQX1JYTUlDSyk7Ci0JCQl9IGVsc2UgewotCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLlR4TWljLAotCQkJCQkgICAgICAgcEtleS0+S2V5TWF0ZXJpYWwgKyBMRU5fVEtJUF9FSywKLQkJCQkJICAgICAgIExFTl9US0lQX1RYTUlDSyk7Ci0JCQkJTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uUnhNaWMsCi0JCQkJCSAgICAgICBwS2V5LT5LZXlNYXRlcmlhbCArIExFTl9US0lQX0VLICsKLQkJCQkJICAgICAgIExFTl9US0lQX1RYTUlDSywKLQkJCQkJICAgICAgIExFTl9US0lQX1JYTUlDSyk7Ci0JCQl9Ci0KLQkJCS8qIERlY2lkZSBpdHMgQ2hpcGVyQWxnICovCi0JCQlpZiAocEFkLT5TdGFDZmcuUGFpckNpcGhlciA9PQotCQkJICAgIE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpCi0JCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnID0gQ0lQSEVSX1RLSVA7Ci0JCQllbHNlIGlmIChwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID09Ci0JCQkJIE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCi0JCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnID0gQ0lQSEVSX0FFUzsKLQkJCWVsc2UKLQkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGcgPSBDSVBIRVJfTk9ORTsKLQotCQkJLyogVXBkYXRlIHRoZXNlIHJlbGF0ZWQgaW5mb3JtYXRpb24gdG8gc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqLwotCQkJcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF07Ci0JCQlOZGlzTW92ZU1lbW9yeShwRW50cnktPlBhaXJ3aXNlS2V5LktleSwKLQkJCQkgICAgICAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5LAotCQkJCSAgICAgICBMRU5fVEtJUF9FSyk7Ci0JCQlOZGlzTW92ZU1lbW9yeShwRW50cnktPlBhaXJ3aXNlS2V5LlJ4TWljLAotCQkJCSAgICAgICBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5SeE1pYywKLQkJCQkgICAgICAgTEVOX1RLSVBfUlhNSUNLKTsKLQkJCU5kaXNNb3ZlTWVtb3J5KHBFbnRyeS0+UGFpcndpc2VLZXkuVHhNaWMsCi0JCQkJICAgICAgIHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLlR4TWljLAotCQkJCSAgICAgICBMRU5fVEtJUF9UWE1JQ0spOwotCQkJcEVudHJ5LT5QYWlyd2lzZUtleS5DaXBoZXJBbGcgPQotCQkJICAgIHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZzsKLQotCQkJLyogVXBkYXRlIHBhaXJ3aXNlIGtleSBpbmZvcm1hdGlvbiB0byBBU0lDIFNoYXJlZCBLZXkgVGFibGUgKi8KLQkJCUFzaWNBZGRTaGFyZWRLZXlFbnRyeShwQWQsCi0JCQkJCSAgICAgIEJTUzAsCi0JCQkJCSAgICAgIDAsCi0JCQkJCSAgICAgIHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZywKLQkJCQkJICAgICAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5LAotCQkJCQkgICAgICBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5UeE1pYywKLQkJCQkJICAgICAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uUnhNaWMpOwotCi0JCQkvKiBVcGRhdGUgQVNJQyBXQ0lEIGF0dHJpYnV0ZSB0YWJsZSBhbmQgSVZFSVYgdGFibGUgKi8KLQkJCVJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnkocEFkLAotCQkJCQkJICBCU1MwLAotCQkJCQkJICAwLAotCQkJCQkJICBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS4KLQkJCQkJCSAgQ2lwaGVyQWxnLCBwRW50cnkpOwotCi0JCQlpZiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPj0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMikgewotCQkJCS8qIHNldCA4MDIuMXggcG9ydCBjb250cm9sICovCi0JCQkJLypwQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOyAqLwotCQkJCVNUQV9QT1JUX1NFQ1VSRUQocEFkKTsKLQotCQkJCS8qIEluZGljYXRlIENvbm5lY3RlZCBmb3IgR1VJICovCi0JCQkJcEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPQotCQkJCSAgICBOZGlzTWVkaWFTdGF0ZUNvbm5lY3RlZDsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIFVwZGF0ZSBHVEsgKi8KLQkJCXBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCA9IChwS2V5LT5LZXlJbmRleCAmIDB4RkYpOwotCQkJTmRpc1plcm9NZW1vcnkoJnBBZC0+Ci0JCQkJICAgICAgIFNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy4KLQkJCQkJCSAgICAgICBEZWZhdWx0S2V5SWRdLAotCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHJ0X2NpcGhlcl9rZXkpKTsKLQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uS2V5TGVuID0KLQkJCSAgICBMRU5fVEtJUF9FSzsKLQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+Ci0JCQkJICAgICAgIFNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy4KLQkJCQkJCSAgICAgICBEZWZhdWx0S2V5SWRdLktleSwKLQkJCQkgICAgICAgcEtleS0+S2V5TWF0ZXJpYWwsIExFTl9US0lQX0VLKTsKLQotCQkJaWYgKHBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID09Ci0JCQkgICAgTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkgewotCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+Ci0JCQkJCSAgICAgICBTaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuCi0JCQkJCQkJICAgICAgIERlZmF1bHRLZXlJZF0uCi0JCQkJCSAgICAgICBSeE1pYywKLQkJCQkJICAgICAgIHBLZXktPktleU1hdGVyaWFsICsgTEVOX1RLSVBfRUssCi0JCQkJCSAgICAgICBMRU5fVEtJUF9UWE1JQ0spOwotCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+Ci0JCQkJCSAgICAgICBTaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuCi0JCQkJCQkJICAgICAgIERlZmF1bHRLZXlJZF0uCi0JCQkJCSAgICAgICBUeE1pYywKLQkJCQkJICAgICAgIHBLZXktPktleU1hdGVyaWFsICsgTEVOX1RLSVBfRUsgKwotCQkJCQkgICAgICAgTEVOX1RLSVBfVFhNSUNLLAotCQkJCQkgICAgICAgTEVOX1RLSVBfUlhNSUNLKTsKLQkJCX0gZWxzZSB7Ci0JCQkJTmRpc01vdmVNZW1vcnkocEFkLT4KLQkJCQkJICAgICAgIFNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy4KLQkJCQkJCQkgICAgICAgRGVmYXVsdEtleUlkXS4KLQkJCQkJICAgICAgIFR4TWljLAotCQkJCQkgICAgICAgcEtleS0+S2V5TWF0ZXJpYWwgKyBMRU5fVEtJUF9FSywKLQkJCQkJICAgICAgIExFTl9US0lQX1RYTUlDSyk7Ci0JCQkJTmRpc01vdmVNZW1vcnkocEFkLT4KLQkJCQkJICAgICAgIFNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy4KLQkJCQkJCQkgICAgICAgRGVmYXVsdEtleUlkXS4KLQkJCQkJICAgICAgIFJ4TWljLAotCQkJCQkgICAgICAgcEtleS0+S2V5TWF0ZXJpYWwgKyBMRU5fVEtJUF9FSyArCi0JCQkJCSAgICAgICBMRU5fVEtJUF9UWE1JQ0ssCi0JCQkJCSAgICAgICBMRU5fVEtJUF9SWE1JQ0spOwotCQkJfQotCi0JCQkvKiBVcGRhdGUgU2hhcmVkIEtleSBDaXBoZXJBbGcgKi8KLQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uCi0JCQkgICAgQ2lwaGVyQWxnID0gQ0lQSEVSX05PTkU7Ci0JCQlpZiAocEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPT0KLQkJCSAgICBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKQotCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uCi0JCQkJICAgIENpcGhlckFsZyA9IENJUEhFUl9US0lQOwotCQkJZWxzZSBpZiAocEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPT0KLQkJCQkgTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKLQkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLgotCQkJCSAgICBDaXBoZXJBbGcgPSBDSVBIRVJfQUVTOwotCi0JCQkvKiBVcGRhdGUgZ3JvdXAga2V5IGluZm9ybWF0aW9uIHRvIEFTSUMgU2hhcmVkIEtleSBUYWJsZSAqLwotCQkJQXNpY0FkZFNoYXJlZEtleUVudHJ5KHBBZCwKLQkJCQkJICAgICAgQlNTMCwKLQkJCQkJICAgICAgcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkLAotCQkJCQkgICAgICBwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy4KLQkJCQkJCQkJICAgRGVmYXVsdEtleUlkXS4KLQkJCQkJICAgICAgQ2lwaGVyQWxnLAotCQkJCQkgICAgICBwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy4KLQkJCQkJCQkJICAgRGVmYXVsdEtleUlkXS4KLQkJCQkJICAgICAgS2V5LAotCQkJCQkgICAgICBwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy4KLQkJCQkJCQkJICAgRGVmYXVsdEtleUlkXS4KLQkJCQkJICAgICAgVHhNaWMsCi0JCQkJCSAgICAgIHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLgotCQkJCQkJCQkgICBEZWZhdWx0S2V5SWRdLgotCQkJCQkgICAgICBSeE1pYyk7Ci0KLQkJCS8qIFVwZGF0ZSBBU0lDIFdDSUQgYXR0cmlidXRlIHRhYmxlIGFuZCBJVkVJViB0YWJsZSAqLwotCQkJUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeShwQWQsCi0JCQkJCQkgIEJTUzAsCi0JCQkJCQkgIHBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCwKLQkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT4KLQkJCQkJCQkJICAgICAgIFN0YUNmZy4KLQkJCQkJCQkJICAgICAgIERlZmF1bHRLZXlJZF0uCi0JCQkJCQkgIENpcGhlckFsZywgTlVMTCk7Ci0KLQkJCS8qIHNldCA4MDIuMXggcG9ydCBjb250cm9sICovCi0JCQkvKnBBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQ7ICovCi0JCQlTVEFfUE9SVF9TRUNVUkVEKHBBZCk7Ci0KLQkJCS8qIEluZGljYXRlIENvbm5lY3RlZCBmb3IgR1VJICovCi0JCQlwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSA9IE5kaXNNZWRpYVN0YXRlQ29ubmVjdGVkOwotCQl9Ci0JfSBlbHNlCQkJLyogZHluYW1pYyBXRVAgZnJvbSB3cGFfc3VwcGxpY2FudCAqLwotCXsKLQkJdTggQ2lwaGVyQWxnOwotCQl1OCAqS2V5OwotCi0JCWlmIChwS2V5LT5LZXlMZW5ndGggPT0gMzIpCi0JCQlnb3RvIGVuZDsKLQotCQlLZXlJZHggPSBwS2V5LT5LZXlJbmRleCAmIDB4MGZmZmZmZmY7Ci0KLQkJaWYgKEtleUlkeCA8IDQpIHsKLQkJCS8qIGl0IGlzIGEgZGVmYXVsdCBzaGFyZWQga2V5LCBmb3IgUGFpcndpc2Uga2V5IHNldHRpbmcgKi8KLQkJCWlmIChwS2V5LT5LZXlJbmRleCAmIDB4ODAwMDAwMDApIHsKLQkJCQlwRW50cnkgPSBNYWNUYWJsZUxvb2t1cChwQWQsIHBLZXktPkJTU0lEKTsKLQotCQkJCWlmIChwRW50cnkpIHsKLQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJCQkgKCJSVE1QQWRkS2V5OiBTZXQgUGFpci13aXNlIEtleVxuIikpOwotCi0JCQkJCS8qIHNldCBrZXkgbWF0ZXJpYWwgYW5kIGtleSBsZW5ndGggKi8KLQkJCQkJcEVudHJ5LT5QYWlyd2lzZUtleS5LZXlMZW4gPQotCQkJCQkgICAgKHU4KXBLZXktPktleUxlbmd0aDsKLQkJCQkJTmRpc01vdmVNZW1vcnkocEVudHJ5LT5QYWlyd2lzZUtleS5LZXksCi0JCQkJCQkgICAgICAgJnBLZXktPktleU1hdGVyaWFsLAotCQkJCQkJICAgICAgIHBLZXktPktleUxlbmd0aCk7Ci0KLQkJCQkJLyogc2V0IENpcGhlciB0eXBlICovCi0JCQkJCWlmIChwS2V5LT5LZXlMZW5ndGggPT0gNSkKLQkJCQkJCXBFbnRyeS0+UGFpcndpc2VLZXkuQ2lwaGVyQWxnID0KLQkJCQkJCSAgICBDSVBIRVJfV0VQNjQ7Ci0JCQkJCWVsc2UKLQkJCQkJCXBFbnRyeS0+UGFpcndpc2VLZXkuQ2lwaGVyQWxnID0KLQkJCQkJCSAgICBDSVBIRVJfV0VQMTI4OwotCi0JCQkJCS8qIEFkZCBQYWlyLXdpc2Uga2V5IHRvIEFzaWMgKi8KLQkJCQkJQXNpY0FkZFBhaXJ3aXNlS2V5RW50cnkocEFkLAotCQkJCQkJCQlwRW50cnktPkFkZHIsCi0JCQkJCQkJCSh1OClwRW50cnktPgotCQkJCQkJCQlBaWQsCi0JCQkJCQkJCSZwRW50cnktPgotCQkJCQkJCQlQYWlyd2lzZUtleSk7Ci0KLQkJCQkJLyogdXBkYXRlIFdDSUQgYXR0cmlidXRlIHRhYmxlIGFuZCBJVkVJViB0YWJsZSBmb3IgdGhpcyBlbnRyeSAqLwotCQkJCQlSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5KHBBZCwgQlNTMCwgS2V5SWR4LAkvKiBUaGUgdmFsdWUgbWF5IGJlIG5vdCB6ZXJvICovCi0JCQkJCQkJCSAgcEVudHJ5LT4KLQkJCQkJCQkJICBQYWlyd2lzZUtleS4KLQkJCQkJCQkJICBDaXBoZXJBbGcsCi0JCQkJCQkJCSAgcEVudHJ5KTsKLQotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJLyogRGVmYXVsdCBrZXkgZm9yIHR4IChzaGFyZWQga2V5KSAqLwotCQkJCXBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCA9ICh1OClLZXlJZHg7Ci0KLQkJCQkvKiBzZXQga2V5IG1hdGVyaWFsIGFuZCBrZXkgbGVuZ3RoICovCi0JCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bS2V5SWR4XS5LZXlMZW4gPQotCQkJCSAgICAodTgpcEtleS0+S2V5TGVuZ3RoOwotCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uS2V5LAotCQkJCQkgICAgICAgJnBLZXktPktleU1hdGVyaWFsLAotCQkJCQkgICAgICAgcEtleS0+S2V5TGVuZ3RoKTsKLQotCQkJCS8qIFNldCBDaXBlciB0eXBlICovCi0JCQkJaWYgKHBLZXktPktleUxlbmd0aCA9PSA1KQotCQkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtLZXlJZHhdLkNpcGhlckFsZyA9Ci0JCQkJCSAgICBDSVBIRVJfV0VQNjQ7Ci0JCQkJZWxzZQotCQkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtLZXlJZHhdLkNpcGhlckFsZyA9Ci0JCQkJCSAgICBDSVBIRVJfV0VQMTI4OwotCi0JCQkJQ2lwaGVyQWxnID0KLQkJCQkgICAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bS2V5SWR4XS5DaXBoZXJBbGc7Ci0JCQkJS2V5ID0gcEFkLT5TaGFyZWRLZXlbQlNTMF1bS2V5SWR4XS5LZXk7Ci0KLQkJCQkvKiBTZXQgR3JvdXAga2V5IG1hdGVyaWFsIHRvIEFzaWMgKi8KLQkJCQlBc2ljQWRkU2hhcmVkS2V5RW50cnkocEFkLCBCU1MwLCBLZXlJZHgsCi0JCQkJCQkgICAgICBDaXBoZXJBbGcsIEtleSwgTlVMTCwKLQkJCQkJCSAgICAgIE5VTEwpOwotCi0JCQkJLyogVXBkYXRlIFdDSUQgYXR0cmlidXRlIHRhYmxlIGFuZCBJVkVJViB0YWJsZSBmb3IgdGhpcyBncm91cCBrZXkgdGFibGUgKi8KLQkJCQlSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5KHBBZCwgQlNTMCwgS2V5SWR4LAotCQkJCQkJCSAgQ2lwaGVyQWxnLCBOVUxMKTsKLQotCQkJfQotCQl9Ci0JfQotZW5kOgotCXJldHVybjsKLX0KLQotY2hhciAqcnRzdHJjaHIoY29uc3QgY2hhciAqcywgaW50IGMpCi17Ci0JZm9yICg7ICpzICE9IChjaGFyKWM7ICsrcykKLQkJaWYgKCpzID09ICdcMCcpCi0JCQlyZXR1cm4gTlVMTDsKLQlyZXR1cm4gKGNoYXIgKilzOwotfQotCi0vKgotVGhpcyBpcyByZXF1aXJlZCBmb3IgTGluRVgyMDA0L2tlcm5lbDIuNi43IHRvIHByb3ZpZGUgaXdsaXN0IHNjYW5uaW5nIGZ1bmN0aW9uCi0qLwotCi1pbnQKLXJ0X2lvY3RsX2dpd25hbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIGNoYXIgKm5hbWUsIGNoYXIgKmV4dHJhKQotewotCXN0cm5jcHkobmFtZSwgIlJhbGluayBTVEEiLCBJRk5BTVNJWik7Ci0JLyogUlQyODcwIDIuMS4wLjAgdXNlcyAiUlQyODcwIFdpcmVsZXNzIiAqLwotCS8qIFJUMzA5MCAyLjEuMC4wIHVzZXMgIlJUMjg2MCBXaXJlbGVzcyIgKi8KLQlyZXR1cm4gMDsKLX0KLQotaW50IHJ0X2lvY3RsX3Npd2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkgICAgIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWRhcHRlciA9IE5VTEw7Ci0JaW50IGNoYW4gPSAtMTsKLQotCUdFVF9QQURfRlJPTV9ORVRfREVWKHBBZGFwdGVyLCBkZXYpOwotCi0JLypjaGVjayBpZiB0aGUgaW50ZXJmYWNlIGlzIGRvd24gKi8KLQlpZiAoIVJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklORk86Ok5ldHdvcmsgaXMgZG93biFcbiIpKTsKLQkJcmV0dXJuIC1FTkVURE9XTjsKLQl9Ci0KLQlpZiAoZnJlcS0+ZSA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKChmcmVxLT5lID09IDApICYmIChmcmVxLT5tIDw9IDEwMDApKQotCQljaGFuID0gZnJlcS0+bTsJLyogU2V0dGluZyBieSBjaGFubmVsIG51bWJlciAqLwotCWVsc2UKLQkJTUFQX0tIWl9UT19DSEFOTkVMX0lEKChmcmVxLT5tIC8gMTAwKSwgY2hhbik7CS8qIFNldHRpbmcgYnkgZnJlcXVlbmN5IC0gc2VhcmNoIHRoZSB0YWJsZSAsIGxpa2UgMi40MTJHLCAyLjQyMkcsICovCi0KLQlpZiAoQ2hhbm5lbFNhbml0eShwQWRhcHRlciwgY2hhbikgPT0gVFJVRSkgewotCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLkNoYW5uZWwgPSBjaGFuOwotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCSAoIj09PnJ0X2lvY3RsX3Npd2ZyZXE6OlNJT0NTSVdGUkVRW2NtZD0weCV4XSAoQ2hhbm5lbD0lZClcbiIsCi0JCQkgIFNJT0NTSVdGUkVRLCBwQWRhcHRlci0+Q29tbW9uQ2ZnLkNoYW5uZWwpKTsKLQl9IGVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHJ0X2lvY3RsX2dpd2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkgICAgIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWRhcHRlciA9IE5VTEw7Ci0JdTggY2g7Ci0JdW5zaWduZWQgbG9uZyBtID0gMjQxMjAwMDsKLQotCUdFVF9QQURfRlJPTV9ORVRfREVWKHBBZGFwdGVyLCBkZXYpOwotCi0JY2ggPSBwQWRhcHRlci0+Q29tbW9uQ2ZnLkNoYW5uZWw7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT5ydF9pb2N0bF9naXdmcmVxICAlZFxuIiwgY2gpKTsKLQotCU1BUF9DSEFOTkVMX0lEX1RPX0tIWihjaCwgbSk7Ci0JZnJlcS0+bSA9IG0gKiAxMDA7Ci0JZnJlcS0+ZSA9IDE7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBydF9pb2N0bF9zaXdtb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgX191MzIgKiBtb2RlLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWRhcHRlciA9IE5VTEw7Ci0KLQlHRVRfUEFEX0ZST01fTkVUX0RFVihwQWRhcHRlciwgZGV2KTsKLQotCS8qY2hlY2sgaWYgdGhlIGludGVyZmFjZSBpcyBkb3duICovCi0JaWYgKCFSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKSkgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJTkZPOjpOZXR3b3JrIGlzIGRvd24hXG4iKSk7Ci0JCXJldHVybiAtRU5FVERPV047Ci0JfQotCi0Jc3dpdGNoICgqbW9kZSkgewotCWNhc2UgSVdfTU9ERV9BREhPQzoKLQkJU2V0X05ldHdvcmtUeXBlX1Byb2MocEFkYXB0ZXIsICJBZGhvYyIpOwotCQlicmVhazsKLQljYXNlIElXX01PREVfSU5GUkE6Ci0JCVNldF9OZXR3b3JrVHlwZV9Qcm9jKHBBZGFwdGVyLCAiSW5mcmEiKTsKLQkJYnJlYWs7Ci0JY2FzZSBJV19NT0RFX01PTklUT1I6Ci0JCVNldF9OZXR3b3JrVHlwZV9Qcm9jKHBBZGFwdGVyLCAiTW9uaXRvciIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIj09PT5ydF9pb2N0bF9zaXdtb2RlOjpTSU9DU0lXTU9ERSAodW5rbm93biAlZClcbiIsCi0JCQkgICptb2RlKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIFJlc2V0IFJhbGluayBzdXBwbGljYW50IHRvIG5vdCB1c2UsIGl0IHdpbGwgYmUgc2V0IHRvIHN0YXJ0IHdoZW4gVUkgc2V0IFBNSyBrZXkgKi8KLQlwQWRhcHRlci0+U3RhQ2ZnLldwYVN0YXRlID0gU1NfTk9UVVNFOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBydF9pb2N0bF9naXdtb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgX191MzIgKiBtb2RlLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWRhcHRlciA9IE5VTEw7Ci0KLQlHRVRfUEFEX0ZST01fTkVUX0RFVihwQWRhcHRlciwgZGV2KTsKLQotCWlmIChBREhPQ19PTihwQWRhcHRlcikpCi0JCSptb2RlID0gSVdfTU9ERV9BREhPQzsKLQllbHNlIGlmIChJTkZSQV9PTihwQWRhcHRlcikpCi0JCSptb2RlID0gSVdfTU9ERV9JTkZSQTsKLQllbHNlIGlmIChNT05JVE9SX09OKHBBZGFwdGVyKSkgewotCQkqbW9kZSA9IElXX01PREVfTU9OSVRPUjsKLQl9IGVsc2UKLQkJKm1vZGUgPSBJV19NT0RFX0FVVE87Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT5ydF9pb2N0bF9naXdtb2RlKG1vZGU9JWQpXG4iLCAqbW9kZSkpOwotCXJldHVybiAwOwotfQotCi1pbnQgcnRfaW9jdGxfc2l3c2VucyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIGNoYXIgKm5hbWUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZGFwdGVyID0gTlVMTDsKLQotCUdFVF9QQURfRlJPTV9ORVRfREVWKHBBZGFwdGVyLCBkZXYpOwotCi0JLypjaGVjayBpZiB0aGUgaW50ZXJmYWNlIGlzIGRvd24gKi8KLQlpZiAoIVJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklORk86Ok5ldHdvcmsgaXMgZG93biFcbiIpKTsKLQkJcmV0dXJuIC1FTkVURE9XTjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHJ0X2lvY3RsX2dpd3NlbnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBjaGFyICpuYW1lLCBjaGFyICpleHRyYSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotaW50IHJ0X2lvY3RsX2dpd3JhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCSAgICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkYXB0ZXIgPSBOVUxMOwotCXN0cnVjdCBpd19yYW5nZSAqcmFuZ2UgPSAoc3RydWN0IGl3X3JhbmdlICopZXh0cmE7Ci0JdTE2IHZhbDsKLQlpbnQgaTsKLQotCUdFVF9QQURfRlJPTV9ORVRfREVWKHBBZGFwdGVyLCBkZXYpOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PnJ0X2lvY3RsX2dpd3JhbmdlXG4iKSk7Ci0JZGF0YS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSk7Ci0JbWVtc2V0KHJhbmdlLCAwLCBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKSk7Ci0KLQlyYW5nZS0+dHhwb3dlcl9jYXBhID0gSVdfVFhQT1dfREJNOwotCi0JaWYgKElORlJBX09OKHBBZGFwdGVyKSB8fCBBREhPQ19PTihwQWRhcHRlcikpIHsKLQkJcmFuZ2UtPm1pbl9wbXAgPSAxICogMTAyNDsKLQkJcmFuZ2UtPm1heF9wbXAgPSA2NTUzNSAqIDEwMjQ7Ci0JCXJhbmdlLT5taW5fcG10ID0gMSAqIDEwMjQ7Ci0JCXJhbmdlLT5tYXhfcG10ID0gMTAwMCAqIDEwMjQ7Ci0JCXJhbmdlLT5wbXBfZmxhZ3MgPSBJV19QT1dFUl9QRVJJT0Q7Ci0JCXJhbmdlLT5wbXRfZmxhZ3MgPSBJV19QT1dFUl9USU1FT1VUOwotCQlyYW5nZS0+cG1fY2FwYSA9IElXX1BPV0VSX1BFUklPRCB8IElXX1BPV0VSX1RJTUVPVVQgfAotCQkgICAgSVdfUE9XRVJfVU5JQ0FTVF9SIHwgSVdfUE9XRVJfQUxMX1I7Ci0JfQotCi0JcmFuZ2UtPndlX3ZlcnNpb25fY29tcGlsZWQgPSBXSVJFTEVTU19FWFQ7Ci0JcmFuZ2UtPndlX3ZlcnNpb25fc291cmNlID0gMTQ7Ci0KLQlyYW5nZS0+cmV0cnlfY2FwYSA9IElXX1JFVFJZX0xJTUlUOwotCXJhbmdlLT5yZXRyeV9mbGFncyA9IElXX1JFVFJZX0xJTUlUOwotCXJhbmdlLT5taW5fcmV0cnkgPSAwOwotCXJhbmdlLT5tYXhfcmV0cnkgPSAyNTU7Ci0KLQlyYW5nZS0+bnVtX2NoYW5uZWxzID0gcEFkYXB0ZXItPkNoYW5uZWxMaXN0TnVtOwotCi0JdmFsID0gMDsKLQlmb3IgKGkgPSAxOyBpIDw9IHJhbmdlLT5udW1fY2hhbm5lbHM7IGkrKykgewotCQl1MzIgbSA9IDI0MTIwMDA7Ci0JCXJhbmdlLT5mcmVxW3ZhbF0uaSA9IHBBZGFwdGVyLT5DaGFubmVsTGlzdFtpIC0gMV0uQ2hhbm5lbDsKLQkJTUFQX0NIQU5ORUxfSURfVE9fS0haKHBBZGFwdGVyLT5DaGFubmVsTGlzdFtpIC0gMV0uQ2hhbm5lbCwgbSk7Ci0JCXJhbmdlLT5mcmVxW3ZhbF0ubSA9IG0gKiAxMDA7CS8qIE9TX0haICovCi0KLQkJcmFuZ2UtPmZyZXFbdmFsXS5lID0gMTsKLQkJdmFsKys7Ci0JCWlmICh2YWwgPT0gSVdfTUFYX0ZSRVFVRU5DSUVTKQotCQkJYnJlYWs7Ci0JfQotCXJhbmdlLT5udW1fZnJlcXVlbmN5ID0gdmFsOwotCi0JcmFuZ2UtPm1heF9xdWFsLnF1YWwgPSAxMDA7CS8qIHdoYXQgaXMgY29ycmVjdCBtYXg/IFRoaXMgd2FzIG5vdAotCQkJCQkgKiBkb2N1bWVudGVkIGV4YWN0bHkuIEF0IGxlYXN0Ci0JCQkJCSAqIDY5IGhhcyBiZWVuIG9ic2VydmVkLiAqLwotCXJhbmdlLT5tYXhfcXVhbC5sZXZlbCA9IDA7CS8qIGRCICovCi0JcmFuZ2UtPm1heF9xdWFsLm5vaXNlID0gMDsJLyogZEIgKi8KLQotCS8qIFdoYXQgd291bGQgYmUgc3VpdGFibGUgdmFsdWVzIGZvciAiYXZlcmFnZS90eXBpY2FsIiBxdWFsPyAqLwotCXJhbmdlLT5hdmdfcXVhbC5xdWFsID0gMjA7Ci0JcmFuZ2UtPmF2Z19xdWFsLmxldmVsID0gLTYwOwotCXJhbmdlLT5hdmdfcXVhbC5ub2lzZSA9IC05NTsKLQlyYW5nZS0+c2Vuc2l0aXZpdHkgPSAzOwotCi0JcmFuZ2UtPm1heF9lbmNvZGluZ190b2tlbnMgPSBOUl9XRVBfS0VZUzsKLQlyYW5nZS0+bnVtX2VuY29kaW5nX3NpemVzID0gMjsKLQlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVswXSA9IDU7Ci0JcmFuZ2UtPmVuY29kaW5nX3NpemVbMV0gPSAxMzsKLQotCXJhbmdlLT5taW5fcnRzID0gMDsKLQlyYW5nZS0+bWF4X3J0cyA9IDIzNDc7Ci0JcmFuZ2UtPm1pbl9mcmFnID0gMjU2OwotCXJhbmdlLT5tYXhfZnJhZyA9IDIzNDY7Ci0KLQkvKiBJV19FTkNfQ0FQQV8qIGJpdCBmaWVsZCAqLwotCXJhbmdlLT5lbmNfY2FwYSA9IElXX0VOQ19DQVBBX1dQQSB8IElXX0VOQ19DQVBBX1dQQTIgfAotCSAgICBJV19FTkNfQ0FQQV9DSVBIRVJfVEtJUCB8IElXX0VOQ19DQVBBX0NJUEhFUl9DQ01QOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBydF9pb2N0bF9zaXdhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkgICBzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZGFwdGVyID0gTlVMTDsKLQlORElTXzgwMl8xMV9NQUNfQUREUkVTUyBCc3NpZDsKLQotCUdFVF9QQURfRlJPTV9ORVRfREVWKHBBZGFwdGVyLCBkZXYpOwotCi0JLypjaGVjayBpZiB0aGUgaW50ZXJmYWNlIGlzIGRvd24gKi8KLQlpZiAoIVJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklORk86Ok5ldHdvcmsgaXMgZG93biFcbiIpKTsKLQkJcmV0dXJuIC1FTkVURE9XTjsKLQl9Ci0KLQlpZiAocEFkYXB0ZXItPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlICE9IENOVExfSURMRSkgewotCQlSVE1QX01MTUVfUkVTRVRfU1RBVEVfTUFDSElORShwQWRhcHRlcik7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiTUxNRSBidXN5LCByZXNldCBNTE1FIHN0YXRlIG1hY2hpbmUhXG4iKSk7Ci0JfQotCS8qIHRlbGwgQ05UTCBzdGF0ZSBtYWNoaW5lIHRvIGNhbGwgTmRpc01TZXRJbmZvcm1hdGlvbkNvbXBsZXRlKCkgYWZ0ZXIgY29tcGxldGluZyAqLwotCS8qIHRoaXMgcmVxdWVzdCwgYmVjYXVzZSB0aGlzIHJlcXVlc3QgaXMgaW5pdGlhdGVkIGJ5IE5ESVMuICovCi0JcEFkYXB0ZXItPk1sbWVBdXguQ3VyclJlcUlzRnJvbU5kaXMgPSBGQUxTRTsKLQkvKiBQcmV2ZW50IHRvIGNvbm5lY3QgQVAgYWdhaW4gaW4gU1RBTWxtZVBlcmlvZGljRXhlYyAqLwotCXBBZGFwdGVyLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuID0gMzI7Ci0KLQltZW1jcHkoQnNzaWQsIGFwX2FkZHItPnNhX2RhdGEsIE1BQ19BRERSX0xFTik7Ci0JTWxtZUVucXVldWUocEFkYXB0ZXIsCi0JCSAgICBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwKLQkJICAgIE9JRF84MDJfMTFfQlNTSUQsCi0JCSAgICBzaXplb2YoTkRJU184MDJfMTFfTUFDX0FERFJFU1MpLCAodm9pZCAqKSAmIEJzc2lkKTsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklPQ1RMOjpTSU9DU0lXQVAgJXBNXG4iLCBCc3NpZCkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBydF9pb2N0bF9naXdhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkgICBzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZGFwdGVyID0gTlVMTDsKLQotCUdFVF9QQURfRlJPTV9ORVRfREVWKHBBZGFwdGVyLCBkZXYpOwotCi0JaWYgKElORlJBX09OKHBBZGFwdGVyKSB8fCBBREhPQ19PTihwQWRhcHRlcikpIHsKLQkJYXBfYWRkci0+c2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCQltZW1jcHkoYXBfYWRkci0+c2FfZGF0YSwgJnBBZGFwdGVyLT5Db21tb25DZmcuQnNzaWQsIEVUSF9BTEVOKTsKLQl9Ci0JLyogQWRkIGZvciBSVDI4NzAgKi8KLQllbHNlIGlmIChwQWRhcHRlci0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCAhPSBXUEFfU1VQUExJQ0FOVF9ESVNBQkxFKSB7Ci0JCWFwX2FkZHItPnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLQkJbWVtY3B5KGFwX2FkZHItPnNhX2RhdGEsICZwQWRhcHRlci0+TWxtZUF1eC5Cc3NpZCwgRVRIX0FMRU4pOwotCX0gZWxzZSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklPQ1RMOjpTSU9DR0lXQVAoPUVNUFRZKVxuIikpOwotCQlyZXR1cm4gLUVOT1RDT05OOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotICogVW5pdHMgYXJlIGluIGRiIGFib3ZlIHRoZSBub2lzZSBmbG9vci4gVGhhdCBtZWFucyB0aGUKLSAqIHJzc2kgdmFsdWVzIHJlcG9ydGVkIGluIHRoZSB0eC9yeCBkZXNjcmlwdG9ycyBpbiB0aGUKLSAqIGRyaXZlciBhcmUgdGhlIFNOUiBleHByZXNzZWQgaW4gZGIuCi0gKgotICogSWYgeW91IGFzc3VtZSB0aGF0IHRoZSBub2lzZSBmbG9vciBpcyAtOTUsIHdoaWNoIGlzIGFuCi0gKiBleGNlbGxlbnQgYXNzdW1wdGlvbiA5OS41ICUgb2YgdGhlIHRpbWUsIHRoZW4geW91IGNhbgotICogZGVyaXZlIHRoZSBhYnNvbHV0ZSBzaWduYWwgbGV2ZWwgKGkuZS4gLTk1ICsgcnNzaSkuCi0gKiBUaGVyZSBhcmUgc29tZSBvdGhlciBzbGlnaHQgZmFjdG9ycyB0byB0YWtlIGludG8gYWNjb3VudAotICogZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIHJzc2kgbWVhc3VyZW1lbnQgaXMgZnJvbSAxMWIsCi0gKiAxMWcsIG9yIDExYS4gICBUaGVzZSBkaWZmZXJlbmNlcyBhcmUgYXQgbW9zdCAyZGIgYW5kCi0gKiBjYW4gYmUgZG9jdW1lbnRlZC4KLSAqCi0gKiBOQjogdmFyaW91cyBjYWxjdWxhdGlvbnMgYXJlIGJhc2VkIG9uIHRoZSBvcmlub2NvL3dhdmVsYW4KLSAqICAgICBkcml2ZXJzIGZvciBjb21wYXRpYmlsaXR5Ci0gKi8KLXN0YXRpYyB2b2lkIHNldF9xdWFsaXR5KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZGFwdGVyLAotCQkJc3RydWN0IGl3X3F1YWxpdHkgKmlxLCBzaWduZWQgY2hhciByc3NpKQotewotCV9fdTggQ2hhbm5lbFF1YWxpdHk7Ci0KLQkvKiBOb3JtYWxpemUgUnNzaSAqLwotCWlmIChyc3NpID49IC01MCkKLQkJQ2hhbm5lbFF1YWxpdHkgPSAxMDA7Ci0JZWxzZSBpZiAocnNzaSA+PSAtODApCS8qIGJldHdlZW4gLTUwIH4gLTgwZGJtICovCi0JCUNoYW5uZWxRdWFsaXR5ID0gKF9fdTgpICgyNCArICgocnNzaSArIDgwKSAqIDI2KSAvIDEwKTsKLQllbHNlIGlmIChyc3NpID49IC05MCkJLyogYmV0d2VlbiAtODAgfiAtOTBkYm0gKi8KLQkJQ2hhbm5lbFF1YWxpdHkgPSAoX191OCkgKChyc3NpICsgOTApICogMjYpIC8gMTA7Ci0JZWxzZQotCQlDaGFubmVsUXVhbGl0eSA9IDA7Ci0KLQlpcS0+cXVhbCA9IChfX3U4KSBDaGFubmVsUXVhbGl0eTsKLQotCWlxLT5sZXZlbCA9IChfX3U4KSAocnNzaSk7Ci0JaXEtPm5vaXNlID0gKHBBZGFwdGVyLT5CYnBXcml0ZUxhdGNoWzY2XSA+IHBBZGFwdGVyLT5CYnBUdW5pbmcuRmFsc2VDY2FVcHBlclRocmVzaG9sZCkgPyAoKF9fdTgpIHBBZGFwdGVyLT5CYnBUdW5pbmcuRmFsc2VDY2FVcHBlclRocmVzaG9sZCkgOiAoKF9fdTgpIHBBZGFwdGVyLT5CYnBXcml0ZUxhdGNoWzY2XSk7CS8qIG5vaXNlIGxldmVsIChkQm0pICovCi0JaXEtPm5vaXNlICs9IDI1NiAtIDE0MzsKLQlpcS0+dXBkYXRlZCA9IHBBZGFwdGVyLT5pd19zdGF0cy5xdWFsLnVwZGF0ZWQ7Ci19Ci0KLWludCBydF9pb2N0bF9pd2FwbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZGFwdGVyID0gTlVMTDsKLQotCXN0cnVjdCBzb2NrYWRkciBhZGRyW0lXX01BWF9BUF07Ci0Jc3RydWN0IGl3X3F1YWxpdHkgcXVhbFtJV19NQVhfQVBdOwotCWludCBpOwotCi0JR0VUX1BBRF9GUk9NX05FVF9ERVYocEFkYXB0ZXIsIGRldik7Ci0KLQkvKmNoZWNrIGlmIHRoZSBpbnRlcmZhY2UgaXMgZG93biAqLwotCWlmICghUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSU5GTzo6TmV0d29yayBpcyBkb3duIVxuIikpOwotCQlkYXRhLT5sZW5ndGggPSAwOwotCQlyZXR1cm4gMDsKLQkJLypyZXR1cm4gLUVORVRET1dOOyAqLwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBJV19NQVhfQVA7IGkrKykgewotCQlpZiAoaSA+PSBwQWRhcHRlci0+U2NhblRhYi5Cc3NOcikKLQkJCWJyZWFrOwotCQlhZGRyW2ldLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLQkJbWVtY3B5KGFkZHJbaV0uc2FfZGF0YSwgJnBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkJzc2lkLAotCQkgICAgICAgTUFDX0FERFJfTEVOKTsKLQkJc2V0X3F1YWxpdHkocEFkYXB0ZXIsICZxdWFsW2ldLAotCQkJICAgIHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlJzc2kpOwotCX0KLQlkYXRhLT5sZW5ndGggPSBpOwotCW1lbWNweShleHRyYSwgJmFkZHIsIGkgKiBzaXplb2YoYWRkclswXSkpOwotCWRhdGEtPmZsYWdzID0gMTsJLyogc2lnbmFsIHF1YWxpdHkgcHJlc2VudCAoc29ydCBvZikgKi8KLQltZW1jcHkoZXh0cmEgKyBpICogc2l6ZW9mKGFkZHJbMF0pLCAmcXVhbCwgaSAqIHNpemVvZihxdWFsW2ldKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHJ0X2lvY3RsX3Npd3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkgICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkYXB0ZXIgPSBOVUxMOwotCi0JdW5zaWduZWQgbG9uZyBOb3c7Ci0JaW50IFN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7Ci0KLQlHRVRfUEFEX0ZST01fTkVUX0RFVihwQWRhcHRlciwgZGV2KTsKLQotCS8qY2hlY2sgaWYgdGhlIGludGVyZmFjZSBpcyBkb3duICovCi0JaWYgKCFSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKSkgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJTkZPOjpOZXR3b3JrIGlzIGRvd24hXG4iKSk7Ci0JCXJldHVybiAtRU5FVERPV047Ci0JfQotCi0JaWYgKE1PTklUT1JfT04ocEFkYXB0ZXIpKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiRHJpdmVyIGlzIGluIE1vbml0b3IgTW9kZSBub3chXG4iKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChwQWRhcHRlci0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9PSBXUEFfU1VQUExJQ0FOVF9FTkFCTEUpIHsKLQkJcEFkYXB0ZXItPlN0YUNmZy5XcGFTdXBwbGljYW50U2NhbkNvdW50Kys7Ci0JfQotCi0JcEFkYXB0ZXItPlN0YUNmZy5iU2NhblJlcUlzRnJvbVdlYlVJID0gVFJVRTsKLQlpZiAoUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MpKQotCQlyZXR1cm4gTkRJU19TVEFUVVNfU1VDQ0VTUzsKLQlkbyB7Ci0JCU5vdyA9IGppZmZpZXM7Ci0KLQkJaWYgKChwQWRhcHRlci0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9PSBXUEFfU1VQUExJQ0FOVF9FTkFCTEUpCi0JCSAgICAmJiAocEFkYXB0ZXItPlN0YUNmZy5XcGFTdXBwbGljYW50U2NhbkNvdW50ID4gMykpIHsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAoIldwYVN1cHBsaWNhbnRTY2FuQ291bnQgPiAzXG4iKSk7Ci0JCQlTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoKE9QU1RBVFVTX1RFU1RfRkxBRwotCQkgICAgIChwQWRhcHRlciwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpKQotCQkgICAgJiYgKChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkKLQkJCXx8IChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID09Ci0JCQkgICAgTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLKSkKLQkJICAgICYmIChwQWRhcHRlci0+U3RhQ2ZnLlBvcnRTZWN1cmVkID09Ci0JCQlXUEFfODAyXzFYX1BPUlRfTk9UX1NFQ1VSRUQpKSB7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCJMaW5rIFVQLCBQb3J0IE5vdCBTZWN1cmVkISBpZ25vcmUgdGhpcyBzZXQ6Ok9JRF84MDJfMTFfQlNTSURfTElTVF9TQ0FOXG4iKSk7Ci0JCQlTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAocEFkYXB0ZXItPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlICE9IENOVExfSURMRSkgewotCQkJUlRNUF9NTE1FX1JFU0VUX1NUQVRFX01BQ0hJTkUocEFkYXB0ZXIpOwotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiTUxNRSBidXN5LCByZXNldCBNTE1FIHN0YXRlIG1hY2hpbmUhXG4iKSk7Ci0JCX0KLQkJLyogdGVsbCBDTlRMIHN0YXRlIG1hY2hpbmUgdG8gY2FsbCBOZGlzTVNldEluZm9ybWF0aW9uQ29tcGxldGUoKSBhZnRlciBjb21wbGV0aW5nICovCi0JCS8qIHRoaXMgcmVxdWVzdCwgYmVjYXVzZSB0aGlzIHJlcXVlc3QgaXMgaW5pdGlhdGVkIGJ5IE5ESVMuICovCi0JCXBBZGFwdGVyLT5NbG1lQXV4LkN1cnJSZXFJc0Zyb21OZGlzID0gRkFMU0U7Ci0JCS8qIFJlc2V0IGFsbG93ZWQgc2NhbiByZXRyaWVzICovCi0JCXBBZGFwdGVyLT5TdGFDZmcuU2NhbkNudCA9IDA7Ci0JCXBBZGFwdGVyLT5TdGFDZmcuTGFzdFNjYW5UaW1lID0gTm93OwotCi0JCU1sbWVFbnF1ZXVlKHBBZGFwdGVyLAotCQkJICAgIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLAotCQkJICAgIE9JRF84MDJfMTFfQlNTSURfTElTVF9TQ0FOLCAwLCBOVUxMKTsKLQotCQlTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOwotCQlSVE1QX01MTUVfSEFORExFUihwQWRhcHRlcik7Ci0JfSB3aGlsZSAoMCk7Ci0JcmV0dXJuIE5ESVNfU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLWludCBydF9pb2N0bF9naXdzY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZGFwdGVyID0gTlVMTDsKLQlpbnQgaSA9IDA7Ci0JY2hhciAqY3VycmVudF9ldiA9IGV4dHJhLCAqcHJldmlvdXNfZXYgPSBleHRyYTsKLQljaGFyICplbmRfYnVmOwotCWNoYXIgKmN1cnJlbnRfdmFsOwotCWNoYXIgY3VzdG9tW01BWF9DVVNUT01fTEVOXSA9IHsgMCB9OwotCXN0cnVjdCBpd19ldmVudCBpd2U7Ci0KLQlHRVRfUEFEX0ZST01fTkVUX0RFVihwQWRhcHRlciwgZGV2KTsKLQotCWlmIChSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUykpIHsKLQkJLyoKLQkJICogU3RpbGwgc2Nhbm5pbmcsIGluZGljYXRlIHRoZSBjYWxsZXIgc2hvdWxkIHRyeSBhZ2Fpbi4KLQkJICovCi0JCXJldHVybiAtRUFHQUlOOwotCX0KLQotCWlmIChwQWRhcHRlci0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9PSBXUEFfU1VQUExJQ0FOVF9FTkFCTEUpIHsKLQkJcEFkYXB0ZXItPlN0YUNmZy5XcGFTdXBwbGljYW50U2NhbkNvdW50ID0gMDsKLQl9Ci0KLQlpZiAocEFkYXB0ZXItPlNjYW5UYWIuQnNzTnIgPT0gMCkgewotCQlkYXRhLT5sZW5ndGggPSAwOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoZGF0YS0+bGVuZ3RoID4gMCkKLQkJZW5kX2J1ZiA9IGV4dHJhICsgZGF0YS0+bGVuZ3RoOwotCWVsc2UKLQkJZW5kX2J1ZiA9IGV4dHJhICsgSVdfU0NBTl9NQVhfREFUQTsKLQotCWZvciAoaSA9IDA7IGkgPCBwQWRhcHRlci0+U2NhblRhYi5Cc3NOcjsgaSsrKSB7Ci0JCWlmIChjdXJyZW50X2V2ID49IGVuZF9idWYpIHsKLQkJCXJldHVybiAtRTJCSUc7Ci0JCX0KLQkJLypNQUMgYWRkcmVzcyAqLwotCQkvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0JCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JCWl3ZS5jbWQgPSBTSU9DR0lXQVA7Ci0JCWl3ZS51LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCQltZW1jcHkoaXdlLnUuYXBfYWRkci5zYV9kYXRhLAotCQkgICAgICAgJnBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkJzc2lkLCBFVEhfQUxFTik7Ci0KLQkJcHJldmlvdXNfZXYgPSBjdXJyZW50X2V2OwotCQljdXJyZW50X2V2ID0KLQkJICAgIGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCi0JCQkJCSBJV19FVl9BRERSX0xFTik7Ci0JCWlmIChjdXJyZW50X2V2ID09IHByZXZpb3VzX2V2KQotCQkJcmV0dXJuIC1FMkJJRzsKLQotCQkvKgotCQkgICBQcm90b2NvbDoKLQkJICAgaXQgd2lsbCBzaG93IHNjYW5uZWQgQVAncyBXaXJlbGVzc01vZGUuCi0JCSAgIGl0IG1pZ2h0IGJlCi0JCSAgIDgwMi4xMWEKLQkJICAgODAyLjExYS9uCi0JCSAgIDgwMi4xMWcvbgotCQkgICA4MDIuMTFiL2cvbgotCQkgICA4MDIuMTFnCi0JCSAgIDgwMi4xMWIvZwotCQkgKi8KLQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQkJaXdlLmNtZCA9IFNJT0NHSVdOQU1FOwotCi0JCXsKLQkJCXN0cnVjdCBydF9ic3NfZW50cnkgKnBCc3NFbnRyeSA9ICZwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXTsKLQkJCUJPT0xFQU4gaXNHb25seSA9IEZBTFNFOwotCQkJaW50IHJhdGVDbnQgPSAwOwotCi0JCQlpZiAocEJzc0VudHJ5LT5DaGFubmVsID4gMTQpIHsKLQkJCQlpZiAocEJzc0VudHJ5LT5IdENhcGFiaWxpdHlMZW4gIT0gMCkKLQkJCQkJc3RyY3B5KGl3ZS51Lm5hbWUsICI4MDIuMTFhL24iKTsKLQkJCQllbHNlCi0JCQkJCXN0cmNweShpd2UudS5uYW1lLCAiODAyLjExYSIpOwotCQkJfSBlbHNlIHsKLQkJCQkvKgotCQkJCSAgIGlmIG9uZSBvZiBub24gQiBtb2RlIHJhdGUgaXMgc2V0IHN1cHBvcnRlZCByYXRlLCBpdCBtZWFucyBHIG9ubHkuCi0JCQkJICovCi0JCQkJZm9yIChyYXRlQ250ID0gMDsKLQkJCQkgICAgIHJhdGVDbnQgPCBwQnNzRW50cnktPlN1cFJhdGVMZW47Ci0JCQkJICAgICByYXRlQ250KyspIHsKLQkJCQkJLyoKLQkJCQkJICAgNk1icHMoMTQwKSA5TWJwcygxNDYpIGFuZCA+PTEyTWJwcygxNTIpIGFyZSBzdXBwb3J0ZWQgcmF0ZSwgaXQgbWVhbnMgRyBvbmx5LgotCQkJCQkgKi8KLQkJCQkJaWYgKHBCc3NFbnRyeS0+U3VwUmF0ZVtyYXRlQ250XSA9PSAxNDAKLQkJCQkJICAgIHx8IHBCc3NFbnRyeS0+U3VwUmF0ZVtyYXRlQ250XSA9PQotCQkJCQkgICAgMTQ2Ci0JCQkJCSAgICB8fCBwQnNzRW50cnktPlN1cFJhdGVbcmF0ZUNudF0gPj0KLQkJCQkJICAgIDE1MikKLQkJCQkJCWlzR29ubHkgPSBUUlVFOwotCQkJCX0KLQotCQkJCWZvciAocmF0ZUNudCA9IDA7Ci0JCQkJICAgICByYXRlQ250IDwgcEJzc0VudHJ5LT5FeHRSYXRlTGVuOwotCQkJCSAgICAgcmF0ZUNudCsrKSB7Ci0JCQkJCWlmIChwQnNzRW50cnktPkV4dFJhdGVbcmF0ZUNudF0gPT0gMTQwCi0JCQkJCSAgICB8fCBwQnNzRW50cnktPkV4dFJhdGVbcmF0ZUNudF0gPT0KLQkJCQkJICAgIDE0NgotCQkJCQkgICAgfHwgcEJzc0VudHJ5LT5FeHRSYXRlW3JhdGVDbnRdID49Ci0JCQkJCSAgICAxNTIpCi0JCQkJCQlpc0dvbmx5ID0gVFJVRTsKLQkJCQl9Ci0KLQkJCQlpZiAocEJzc0VudHJ5LT5IdENhcGFiaWxpdHlMZW4gIT0gMCkgewotCQkJCQlpZiAoaXNHb25seSA9PSBUUlVFKQotCQkJCQkJc3RyY3B5KGl3ZS51Lm5hbWUsICI4MDIuMTFnL24iKTsKLQkJCQkJZWxzZQotCQkJCQkJc3RyY3B5KGl3ZS51Lm5hbWUsCi0JCQkJCQkgICAgICAgIjgwMi4xMWIvZy9uIik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJaWYgKGlzR29ubHkgPT0gVFJVRSkKLQkJCQkJCXN0cmNweShpd2UudS5uYW1lLCAiODAyLjExZyIpOwotCQkJCQllbHNlIHsKLQkJCQkJCWlmIChwQnNzRW50cnktPlN1cFJhdGVMZW4gPT0gNAotCQkJCQkJICAgICYmIHBCc3NFbnRyeS0+RXh0UmF0ZUxlbiA9PQotCQkJCQkJICAgIDApCi0JCQkJCQkJc3RyY3B5KGl3ZS51Lm5hbWUsCi0JCQkJCQkJICAgICAgICI4MDIuMTFiIik7Ci0JCQkJCQllbHNlCi0JCQkJCQkJc3RyY3B5KGl3ZS51Lm5hbWUsCi0JCQkJCQkJICAgICAgICI4MDIuMTFiL2ciKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXByZXZpb3VzX2V2ID0gY3VycmVudF9ldjsKLQkJY3VycmVudF9ldiA9Ci0JCSAgICBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAotCQkJCQkgSVdfRVZfQUREUl9MRU4pOwotCQlpZiAoY3VycmVudF9ldiA9PSBwcmV2aW91c19ldikKLQkJCXJldHVybiAtRTJCSUc7Ci0KLQkJLypFU1NJRCAqLwotCQkvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0JCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JCWl3ZS5jbWQgPSBTSU9DR0lXRVNTSUQ7Ci0JCWl3ZS51LmRhdGEubGVuZ3RoID0gcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uU3NpZExlbjsKLQkJaXdlLnUuZGF0YS5mbGFncyA9IDE7Ci0KLQkJcHJldmlvdXNfZXYgPSBjdXJyZW50X2V2OwotCQljdXJyZW50X2V2ID0KLQkJICAgIGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCi0JCQkJCSAoY2hhciAqKXBBZGFwdGVyLT5TY2FuVGFiLgotCQkJCQkgQnNzRW50cnlbaV0uU3NpZCk7Ci0JCWlmIChjdXJyZW50X2V2ID09IHByZXZpb3VzX2V2KQotCQkJcmV0dXJuIC1FMkJJRzsKLQotCQkvKk5ldHdvcmsgVHlwZSAqLwotCQkvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0JCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JCWl3ZS5jbWQgPSBTSU9DR0lXTU9ERTsKLQkJaWYgKHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkJzc1R5cGUgPT0gTmRpczgwMl8xMUlCU1MpIHsKLQkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX0FESE9DOwotCQl9IGVsc2UgaWYgKHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkJzc1R5cGUgPT0KLQkJCSAgIE5kaXM4MDJfMTFJbmZyYXN0cnVjdHVyZSkgewotCQkJaXdlLnUubW9kZSA9IElXX01PREVfSU5GUkE7Ci0JCX0gZWxzZSB7Ci0JCQlpd2UudS5tb2RlID0gSVdfTU9ERV9BVVRPOwotCQl9Ci0JCWl3ZS5sZW4gPSBJV19FVl9VSU5UX0xFTjsKLQotCQlwcmV2aW91c19ldiA9IGN1cnJlbnRfZXY7Ci0JCWN1cnJlbnRfZXYgPQotCQkgICAgaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKLQkJCQkJIElXX0VWX1VJTlRfTEVOKTsKLQkJaWYgKGN1cnJlbnRfZXYgPT0gcHJldmlvdXNfZXYpCi0JCQlyZXR1cm4gLUUyQklHOwotCi0JCS8qQ2hhbm5lbCBhbmQgRnJlcXVlbmN5ICovCi0JCS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQkJaXdlLmNtZCA9IFNJT0NHSVdGUkVROwotCQlpd2UudS5mcmVxLm0gPSBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5DaGFubmVsOwotCQlpd2UudS5mcmVxLmUgPSAwOwotCQlpd2UudS5mcmVxLmkgPSAwOwotCi0JCXByZXZpb3VzX2V2ID0gY3VycmVudF9ldjsKLQkJY3VycmVudF9ldiA9Ci0JCSAgICBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAotCQkJCQkgSVdfRVZfRlJFUV9MRU4pOwotCQlpZiAoY3VycmVudF9ldiA9PSBwcmV2aW91c19ldikKLQkJCXJldHVybiAtRTJCSUc7Ci0KLQkJLypBZGQgcXVhbGl0eSBzdGF0aXN0aWNzICovCi0JCS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQkJaXdlLmNtZCA9IElXRVZRVUFMOwotCQlpd2UudS5xdWFsLmxldmVsID0gMDsKLQkJaXdlLnUucXVhbC5ub2lzZSA9IDA7Ci0JCXNldF9xdWFsaXR5KHBBZGFwdGVyLCAmaXdlLnUucXVhbCwKLQkJCSAgICBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Sc3NpKTsKLQkJY3VycmVudF9ldiA9Ci0JCSAgICBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAotCQkJCQkgSVdfRVZfUVVBTF9MRU4pOwotCQlpZiAoY3VycmVudF9ldiA9PSBwcmV2aW91c19ldikKLQkJCXJldHVybiAtRTJCSUc7Ci0KLQkJLypFbmN5cHRpb24ga2V5ICovCi0JCS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQkJaXdlLmNtZCA9IFNJT0NHSVdFTkNPREU7Ci0JCWlmIChDQVBfSVNfUFJJVkFDWV9PTgotCQkgICAgKHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkNhcGFiaWxpdHlJbmZvKSkKLQkJCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRU5BQkxFRCB8IElXX0VOQ09ERV9OT0tFWTsKLQkJZWxzZQotCQkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKLQotCQlwcmV2aW91c19ldiA9IGN1cnJlbnRfZXY7Ci0JCWN1cnJlbnRfZXYgPQotCQkgICAgaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKLQkJCQkJIChjaGFyICopcEFkYXB0ZXItPgotCQkJCQkgU2hhcmVkS2V5W0JTUzBdWyhpd2UudS5kYXRhLgotCQkJCQkJCSAgZmxhZ3MgJgotCQkJCQkJCSAgSVdfRU5DT0RFX0lOREVYKSAtCi0JCQkJCQkJIDFdLktleSk7Ci0JCWlmIChjdXJyZW50X2V2ID09IHByZXZpb3VzX2V2KQotCQkJcmV0dXJuIC1FMkJJRzsKLQotCQkvKkJpdCBSYXRlICovCi0JCS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQkJaWYgKHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlN1cFJhdGVMZW4pIHsKLQkJCXU4IHRtcFJhdGUgPQotCQkJICAgIHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlN1cFJhdGVbcEFkYXB0ZXItPgotCQkJCQkJCQkgIFNjYW5UYWIuCi0JCQkJCQkJCSAgQnNzRW50cnlbaV0uCi0JCQkJCQkJCSAgU3VwUmF0ZUxlbiAtCi0JCQkJCQkJCSAgMV07Ci0JCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCQkJaXdlLmNtZCA9IFNJT0NHSVdSQVRFOwotCQkJY3VycmVudF92YWwgPSBjdXJyZW50X2V2ICsgSVdfRVZfTENQX0xFTjsKLQkJCWlmICh0bXBSYXRlID09IDB4ODIpCi0JCQkJaXdlLnUuYml0cmF0ZS52YWx1ZSA9IDEgKiAxMDAwMDAwOwotCQkJZWxzZSBpZiAodG1wUmF0ZSA9PSAweDg0KQotCQkJCWl3ZS51LmJpdHJhdGUudmFsdWUgPSAyICogMTAwMDAwMDsKLQkJCWVsc2UgaWYgKHRtcFJhdGUgPT0gMHg4QikKLQkJCQlpd2UudS5iaXRyYXRlLnZhbHVlID0gNS41ICogMTAwMDAwMDsKLQkJCWVsc2UgaWYgKHRtcFJhdGUgPT0gMHg5NikKLQkJCQlpd2UudS5iaXRyYXRlLnZhbHVlID0gMTEgKiAxMDAwMDAwOwotCQkJZWxzZQotCQkJCWl3ZS51LmJpdHJhdGUudmFsdWUgPSAodG1wUmF0ZSAvIDIpICogMTAwMDAwMDsKLQotCQkJaWYgKHRtcFJhdGUgPT0gMHg2YwotCQkJICAgICYmIHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkh0Q2FwYWJpbGl0eUxlbiA+Ci0JCQkgICAgMCkgewotCQkJCWludCByYXRlX2NvdW50ID0gQVJSQVlfU0laRShyYWxpbmtyYXRlKTsKLQkJCQlzdHJ1Y3QgcnRfaHRfY2FwX2luZm8gY2FwSW5mbyA9Ci0JCQkJICAgIHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkh0Q2FwYWJpbGl0eS4KLQkJCQkgICAgSHRDYXBJbmZvOwotCQkJCWludCBzaG9ydEdJID0KLQkJCQkgICAgY2FwSW5mby5DaGFubmVsV2lkdGggPyBjYXBJbmZvLgotCQkJCSAgICBTaG9ydEdJZm9yNDAgOiBjYXBJbmZvLlNob3J0R0lmb3IyMDsKLQkJCQlpbnQgbWF4TUNTID0KLQkJCQkgICAgcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uSHRDYXBhYmlsaXR5LgotCQkJCSAgICBNQ1NTZXRbMV0gPyAxNSA6IDc7Ci0JCQkJaW50IHJhdGVfaW5kZXggPQotCQkJCSAgICAxMiArICgodTgpY2FwSW5mby5DaGFubmVsV2lkdGggKiAyNCkgKwotCQkJCSAgICAoKHU4KXNob3J0R0kgKiA0OCkgKyAoKHU4KW1heE1DUyk7Ci0KLQkJCQlpZiAocmF0ZV9pbmRleCA8IDApCi0JCQkJCXJhdGVfaW5kZXggPSAwOwotCQkJCWlmIChyYXRlX2luZGV4ID49IHJhdGVfY291bnQpCi0JCQkJCXJhdGVfaW5kZXggPSByYXRlX2NvdW50IC0gMTsKLQkJCQlpd2UudS5iaXRyYXRlLnZhbHVlID0KLQkJCQkgICAgcmFsaW5rcmF0ZVtyYXRlX2luZGV4XSAqIDUwMDAwMDsKLQkJCX0KLQotCQkJaXdlLnUuYml0cmF0ZS5kaXNhYmxlZCA9IDA7Ci0JCQljdXJyZW50X3ZhbCA9IGl3ZV9zdHJlYW1fYWRkX3ZhbHVlKGluZm8sIGN1cnJlbnRfZXYsCi0JCQkJCQkJICAgY3VycmVudF92YWwsIGVuZF9idWYsCi0JCQkJCQkJICAgJml3ZSwKLQkJCQkJCQkgICBJV19FVl9QQVJBTV9MRU4pOwotCi0JCQlpZiAoKGN1cnJlbnRfdmFsIC0gY3VycmVudF9ldikgPiBJV19FVl9MQ1BfTEVOKQotCQkJCWN1cnJlbnRfZXYgPSBjdXJyZW50X3ZhbDsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gLUUyQklHOwotCQl9Ci0JCS8qV1BBIElFICovCi0JCWlmIChwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5XcGFJRS5JRUxlbiA+IDApIHsKLQkJCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JCQltZW1zZXQoJmN1c3RvbVswXSwgMCwgTUFYX0NVU1RPTV9MRU4pOwotCQkJbWVtY3B5KGN1c3RvbSwKLQkJCSAgICAgICAmKHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLldwYUlFLklFWzBdKSwKLQkJCSAgICAgICBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5XcGFJRS5JRUxlbik7Ci0JCQlpd2UuY21kID0gSVdFVkdFTklFOwotCQkJaXdlLnUuZGF0YS5sZW5ndGggPQotCQkJICAgIHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLldwYUlFLklFTGVuOwotCQkJY3VycmVudF9ldiA9Ci0JCQkgICAgaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAmaXdlLCBjdXN0b20pOwotCQkJaWYgKGN1cnJlbnRfZXYgPT0gcHJldmlvdXNfZXYpCi0JCQkJcmV0dXJuIC1FMkJJRzsKLQkJfQotCQkvKldQQTIgSUUgKi8KLQkJaWYgKHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlJzbklFLklFTGVuID4gMCkgewotCQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQkJCW1lbXNldCgmY3VzdG9tWzBdLCAwLCBNQVhfQ1VTVE9NX0xFTik7Ci0JCQltZW1jcHkoY3VzdG9tLAotCQkJICAgICAgICYocEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uUnNuSUUuSUVbMF0pLAotCQkJICAgICAgIHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlJzbklFLklFTGVuKTsKLQkJCWl3ZS5jbWQgPSBJV0VWR0VOSUU7Ci0JCQlpd2UudS5kYXRhLmxlbmd0aCA9Ci0JCQkgICAgcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uUnNuSUUuSUVMZW47Ci0JCQljdXJyZW50X2V2ID0KLQkJCSAgICBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICZpd2UsIGN1c3RvbSk7Ci0JCQlpZiAoY3VycmVudF9ldiA9PSBwcmV2aW91c19ldikKLQkJCQlyZXR1cm4gLUUyQklHOwotCQl9Ci0JfQotCi0JZGF0YS0+bGVuZ3RoID0gY3VycmVudF9ldiAtIGV4dHJhOwotCXBBZGFwdGVyLT5TdGFDZmcuYlNjYW5SZXFJc0Zyb21XZWJVSSA9IEZBTFNFOwotCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkgKCI9PT0+cnRfaW9jdGxfZ2l3c2Nhbi4gJWQoJWQpIEJTUyByZXR1cm5lZCwgZGF0YS0+bGVuZ3RoID0gJWRcbiIsCi0JCSAgaSwgcEFkYXB0ZXItPlNjYW5UYWIuQnNzTnIsIGRhdGEtPmxlbmd0aCkpOwotCXJldHVybiAwOwotfQotCi1pbnQgcnRfaW9jdGxfc2l3ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJICAgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICplc3NpZCkKLXsKLQlzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWRhcHRlciA9IE5VTEw7Ci0KLQlHRVRfUEFEX0ZST01fTkVUX0RFVihwQWRhcHRlciwgZGV2KTsKLQotCS8qY2hlY2sgaWYgdGhlIGludGVyZmFjZSBpcyBkb3duICovCi0JaWYgKCFSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKSkgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJTkZPOjpOZXR3b3JrIGlzIGRvd24hXG4iKSk7Ci0JCXJldHVybiAtRU5FVERPV047Ci0JfQotCi0JaWYgKGRhdGEtPmZsYWdzKSB7Ci0JCWNoYXIgKnBTc2lkU3RyaW5nID0gTlVMTDsKLQotCQkvKiBJbmNsdWRlcyBudWxsIGNoYXJhY3Rlci4gKi8KLQkJaWYgKGRhdGEtPmxlbmd0aCA+IChJV19FU1NJRF9NQVhfU0laRSArIDEpKQotCQkJcmV0dXJuIC1FMkJJRzsKLQotCQlwU3NpZFN0cmluZyA9IGttYWxsb2MoTUFYX0xFTl9PRl9TU0lEICsgMSwgTUVNX0FMTE9DX0ZMQUcpOwotCQlpZiAocFNzaWRTdHJpbmcpIHsKLQkJCU5kaXNaZXJvTWVtb3J5KHBTc2lkU3RyaW5nLCBNQVhfTEVOX09GX1NTSUQgKyAxKTsKLQkJCU5kaXNNb3ZlTWVtb3J5KHBTc2lkU3RyaW5nLCBlc3NpZCwgZGF0YS0+bGVuZ3RoKTsKLQkJCWlmIChTZXRfU1NJRF9Qcm9jKHBBZGFwdGVyLCBwU3NpZFN0cmluZykgPT0gRkFMU0UpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0gZWxzZQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JfSBlbHNlIHsKLQkJLyogQU5ZIHNzaWQgKi8KLQkJaWYgKFNldF9TU0lEX1Byb2MocEFkYXB0ZXIsICIiKSA9PSBGQUxTRSkKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHJ0X2lvY3RsX2dpd2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCSAgICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXNzaWQpCi17Ci0Jc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkYXB0ZXIgPSBOVUxMOwotCi0JR0VUX1BBRF9GUk9NX05FVF9ERVYocEFkYXB0ZXIsIGRldik7Ci0KLQlkYXRhLT5mbGFncyA9IDE7Ci0JaWYgKE1PTklUT1JfT04ocEFkYXB0ZXIpKSB7Ci0JCWRhdGEtPmxlbmd0aCA9IDA7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkYXB0ZXIsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSkgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNZWRpYVN0YXRlIGlzIGNvbm5lY3RlZFxuIikpOwotCQlkYXRhLT5sZW5ndGggPSBwQWRhcHRlci0+Q29tbW9uQ2ZnLlNzaWRMZW47Ci0JCW1lbWNweShlc3NpZCwgcEFkYXB0ZXItPkNvbW1vbkNmZy5Tc2lkLAotCQkgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5Tc2lkTGVuKTsKLQl9Ci0jaWZkZWYgUlRNUF9NQUNfVVNCCi0JLyogQWRkIGZvciBSVDI4NzAgKi8KLQllbHNlIGlmIChwQWRhcHRlci0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCAhPSBXUEFfU1VQUExJQ0FOVF9ESVNBQkxFKSB7Ci0JCWRhdGEtPmxlbmd0aCA9IHBBZGFwdGVyLT5Db21tb25DZmcuU3NpZExlbjsKLQkJbWVtY3B5KGVzc2lkLCBwQWRhcHRlci0+Q29tbW9uQ2ZnLlNzaWQsCi0JCSAgICAgICBwQWRhcHRlci0+Q29tbW9uQ2ZnLlNzaWRMZW4pOwotCX0KLSNlbmRpZiAvKiBSVE1QX01BQ19VU0IgLy8gKi8KLQllbHNlIHsJCQkvKnRoZSBBTlkgc3NpZCB3YXMgc3BlY2lmaWVkICovCi0JCWRhdGEtPmxlbmd0aCA9IDA7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiTWVkaWFTdGF0ZSBpcyBub3QgY29ubmVjdGVkLCBlc3NcbiIpKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotfQotCi1pbnQgcnRfaW9jdGxfc2l3bmlja24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJICAgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpuaWNrbmFtZSkKLXsKLQlzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWRhcHRlciA9IE5VTEw7Ci0KLQlHRVRfUEFEX0ZST01fTkVUX0RFVihwQWRhcHRlciwgZGV2KTsKLQotCS8qY2hlY2sgaWYgdGhlIGludGVyZmFjZSBpcyBkb3duICovCi0JaWYgKCFSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKSkgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJTkZPOjpOZXR3b3JrIGlzIGRvd24hXG4iKSk7Ci0JCXJldHVybiAtRU5FVERPV047Ci0JfQotCi0JaWYgKGRhdGEtPmxlbmd0aCA+IElXX0VTU0lEX01BWF9TSVpFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW1lbXNldChwQWRhcHRlci0+bmlja25hbWUsIDAsIElXX0VTU0lEX01BWF9TSVpFICsgMSk7Ci0JbWVtY3B5KHBBZGFwdGVyLT5uaWNrbmFtZSwgbmlja25hbWUsIGRhdGEtPmxlbmd0aCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHJ0X2lvY3RsX2dpd25pY2tuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCSAgICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqbmlja25hbWUpCi17Ci0Jc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkYXB0ZXIgPSBOVUxMOwotCi0JR0VUX1BBRF9GUk9NX05FVF9ERVYocEFkYXB0ZXIsIGRldik7Ci0KLQlpZiAoZGF0YS0+bGVuZ3RoID4gc3RybGVuKChjaGFyICopcEFkYXB0ZXItPm5pY2tuYW1lKSArIDEpCi0JCWRhdGEtPmxlbmd0aCA9IHN0cmxlbigoY2hhciAqKXBBZGFwdGVyLT5uaWNrbmFtZSkgKyAxOwotCWlmIChkYXRhLT5sZW5ndGggPiAwKSB7Ci0JCW1lbWNweShuaWNrbmFtZSwgcEFkYXB0ZXItPm5pY2tuYW1lLCBkYXRhLT5sZW5ndGggLSAxKTsKLQkJbmlja25hbWVbZGF0YS0+bGVuZ3RoIC0gMV0gPSAnXDAnOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHJ0X2lvY3RsX3Npd3J0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJICAgIHN0cnVjdCBpd19wYXJhbSAqcnRzLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWRhcHRlciA9IE5VTEw7Ci0JdTE2IHZhbDsKLQotCUdFVF9QQURfRlJPTV9ORVRfREVWKHBBZGFwdGVyLCBkZXYpOwotCi0JLypjaGVjayBpZiB0aGUgaW50ZXJmYWNlIGlzIGRvd24gKi8KLQlpZiAoIVJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklORk86Ok5ldHdvcmsgaXMgZG93biFcbiIpKTsKLQkJcmV0dXJuIC1FTkVURE9XTjsKLQl9Ci0KLQlpZiAocnRzLT5kaXNhYmxlZCkKLQkJdmFsID0gTUFYX1JUU19USFJFU0hPTEQ7Ci0JZWxzZSBpZiAocnRzLT52YWx1ZSA8IDAgfHwgcnRzLT52YWx1ZSA+IE1BWF9SVFNfVEhSRVNIT0xEKQotCQlyZXR1cm4gLUVJTlZBTDsKLQllbHNlIGlmIChydHMtPnZhbHVlID09IDApCi0JCXZhbCA9IE1BWF9SVFNfVEhSRVNIT0xEOwotCWVsc2UKLQkJdmFsID0gcnRzLT52YWx1ZTsKLQotCWlmICh2YWwgIT0gcEFkYXB0ZXItPkNvbW1vbkNmZy5SdHNUaHJlc2hvbGQpCi0JCXBBZGFwdGVyLT5Db21tb25DZmcuUnRzVGhyZXNob2xkID0gdmFsOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBydF9pb2N0bF9naXdydHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCSAgICBzdHJ1Y3QgaXdfcGFyYW0gKnJ0cywgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkYXB0ZXIgPSBOVUxMOwotCi0JR0VUX1BBRF9GUk9NX05FVF9ERVYocEFkYXB0ZXIsIGRldik7Ci0KLQkvKmNoZWNrIGlmIHRoZSBpbnRlcmZhY2UgaXMgZG93biAqLwotCWlmICghUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSU5GTzo6TmV0d29yayBpcyBkb3duIVxuIikpOwotCQlyZXR1cm4gLUVORVRET1dOOwotCX0KLQotCXJ0cy0+dmFsdWUgPSBwQWRhcHRlci0+Q29tbW9uQ2ZnLlJ0c1RocmVzaG9sZDsKLQlydHMtPmRpc2FibGVkID0gKHJ0cy0+dmFsdWUgPT0gTUFYX1JUU19USFJFU0hPTEQpOwotCXJ0cy0+Zml4ZWQgPSAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBydF9pb2N0bF9zaXdmcmFnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJICAgICBzdHJ1Y3QgaXdfcGFyYW0gKmZyYWcsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZGFwdGVyID0gTlVMTDsKLQl1MTYgdmFsOwotCi0JR0VUX1BBRF9GUk9NX05FVF9ERVYocEFkYXB0ZXIsIGRldik7Ci0KLQkvKmNoZWNrIGlmIHRoZSBpbnRlcmZhY2UgaXMgZG93biAqLwotCWlmICghUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSU5GTzo6TmV0d29yayBpcyBkb3duIVxuIikpOwotCQlyZXR1cm4gLUVORVRET1dOOwotCX0KLQotCWlmIChmcmFnLT5kaXNhYmxlZCkKLQkJdmFsID0gTUFYX0ZSQUdfVEhSRVNIT0xEOwotCWVsc2UgaWYgKGZyYWctPnZhbHVlID49IE1JTl9GUkFHX1RIUkVTSE9MRAotCQkgJiYgZnJhZy0+dmFsdWUgPD0gTUFYX0ZSQUdfVEhSRVNIT0xEKQotCQl2YWwgPSBfX2NwdV90b19sZTE2KGZyYWctPnZhbHVlICYgfjB4MSk7CS8qIGV2ZW4gbnVtYmVycyBvbmx5ICovCi0JZWxzZSBpZiAoZnJhZy0+dmFsdWUgPT0gMCkKLQkJdmFsID0gTUFYX0ZSQUdfVEhSRVNIT0xEOwotCWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwQWRhcHRlci0+Q29tbW9uQ2ZnLkZyYWdtZW50VGhyZXNob2xkID0gdmFsOwotCXJldHVybiAwOwotfQotCi1pbnQgcnRfaW9jdGxfZ2l3ZnJhZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCSAgICAgc3RydWN0IGl3X3BhcmFtICpmcmFnLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWRhcHRlciA9IE5VTEw7Ci0KLQlHRVRfUEFEX0ZST01fTkVUX0RFVihwQWRhcHRlciwgZGV2KTsKLQotCS8qY2hlY2sgaWYgdGhlIGludGVyZmFjZSBpcyBkb3duICovCi0JaWYgKCFSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKSkgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJTkZPOjpOZXR3b3JrIGlzIGRvd24hXG4iKSk7Ci0JCXJldHVybiAtRU5FVERPV047Ci0JfQotCi0JZnJhZy0+dmFsdWUgPSBwQWRhcHRlci0+Q29tbW9uQ2ZnLkZyYWdtZW50VGhyZXNob2xkOwotCWZyYWctPmRpc2FibGVkID0gKGZyYWctPnZhbHVlID09IE1BWF9GUkFHX1RIUkVTSE9MRCk7Ci0JZnJhZy0+Zml4ZWQgPSAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLSNkZWZpbmUgTUFYX1dFUF9LRVlfU0laRSAxMwotI2RlZmluZSBNSU5fV0VQX0tFWV9TSVpFIDUKLWludCBydF9pb2N0bF9zaXdlbmNvZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCSAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkYXB0ZXIgPSBOVUxMOwotCi0JR0VUX1BBRF9GUk9NX05FVF9ERVYocEFkYXB0ZXIsIGRldik7Ci0KLQkvKmNoZWNrIGlmIHRoZSBpbnRlcmZhY2UgaXMgZG93biAqLwotCWlmICghUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSU5GTzo6TmV0d29yayBpcyBkb3duIVxuIikpOwotCQlyZXR1cm4gLUVORVRET1dOOwotCX0KLQotCWlmICgoZXJxLT5sZW5ndGggPT0gMCkgJiYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpKSB7Ci0JCXBBZGFwdGVyLT5TdGFDZmcuUGFpckNpcGhlciA9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZDsKLQkJcEFkYXB0ZXItPlN0YUNmZy5Hcm91cENpcGhlciA9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZDsKLQkJcEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXMgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7Ci0JCXBBZGFwdGVyLT5TdGFDZmcuT3JpZ1dlcFN0YXR1cyA9IHBBZGFwdGVyLT5TdGFDZmcuV2VwU3RhdHVzOwotCQlwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlT3BlbjsKLQkJZ290byBkb25lOwotCX0gZWxzZSBpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9SRVNUUklDVEVECi0JCSAgIHx8IGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfT1BFTikgewotCQkvKnBBZGFwdGVyLT5TdGFDZmcuUG9ydFNlY3VyZWQgPSBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRDsgKi8KLQkJU1RBX1BPUlRfU0VDVVJFRChwQWRhcHRlcik7Ci0JCXBBZGFwdGVyLT5TdGFDZmcuUGFpckNpcGhlciA9IE5kaXM4MDJfMTFXRVBFbmFibGVkOwotCQlwQWRhcHRlci0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID0gTmRpczgwMl8xMVdFUEVuYWJsZWQ7Ci0JCXBBZGFwdGVyLT5TdGFDZmcuV2VwU3RhdHVzID0gTmRpczgwMl8xMVdFUEVuYWJsZWQ7Ci0JCXBBZGFwdGVyLT5TdGFDZmcuT3JpZ1dlcFN0YXR1cyA9IHBBZGFwdGVyLT5TdGFDZmcuV2VwU3RhdHVzOwotCQlpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9SRVNUUklDVEVEKQotCQkJcEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZVNoYXJlZDsKLQkJZWxzZQotCQkJcEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZU9wZW47Ci0JfQotCi0JaWYgKGVycS0+bGVuZ3RoID4gMCkgewotCQlpbnQga2V5SWR4ID0gKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpIC0gMTsKLQkJLyogQ2hlY2sgdGhlIHNpemUgb2YgdGhlIGtleSAqLwotCQlpZiAoZXJxLT5sZW5ndGggPiBNQVhfV0VQX0tFWV9TSVpFKSB7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQkvKiBDaGVjayBrZXkgaW5kZXggKi8KLQkJaWYgKChrZXlJZHggPCAwKSB8fCAoa2V5SWR4ID49IE5SX1dFUF9LRVlTKSkgewotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiPT0+cnRfaW9jdGxfc2l3ZW5jb2RlOjpXcm9uZyBrZXlJZHg9JWQhIFVzaW5nIGRlZmF1bHQga2V5IGluc3RlYWQgKCVkKVxuIiwKLQkJCQkgIGtleUlkeCwgcEFkYXB0ZXItPlN0YUNmZy5EZWZhdWx0S2V5SWQpKTsKLQotCQkJLypVc2luZyBkZWZhdWx0IGtleSAqLwotCQkJa2V5SWR4ID0gcEFkYXB0ZXItPlN0YUNmZy5EZWZhdWx0S2V5SWQ7Ci0JCX0gZWxzZQotCQkJcEFkYXB0ZXItPlN0YUNmZy5EZWZhdWx0S2V5SWQgPSBrZXlJZHg7Ci0KLQkJTmRpc1plcm9NZW1vcnkocEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLktleSwgMTYpOwotCi0JCWlmIChlcnEtPmxlbmd0aCA9PSBNQVhfV0VQX0tFWV9TSVpFKSB7Ci0JCQlwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uS2V5TGVuID0KLQkJCSAgICBNQVhfV0VQX0tFWV9TSVpFOwotCQkJcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLkNpcGhlckFsZyA9Ci0JCQkgICAgQ0lQSEVSX1dFUDEyODsKLQkJfSBlbHNlIGlmIChlcnEtPmxlbmd0aCA9PSBNSU5fV0VQX0tFWV9TSVpFKSB7Ci0JCQlwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uS2V5TGVuID0KLQkJCSAgICBNSU5fV0VQX0tFWV9TSVpFOwotCQkJcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLkNpcGhlckFsZyA9Ci0JCQkgICAgQ0lQSEVSX1dFUDY0OwotCQl9IGVsc2UKLQkJCS8qIERpc2FibGUgdGhlIGtleSAqLwotCQkJcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLktleUxlbiA9IDA7Ci0KLQkJLyogQ2hlY2sgaWYgdGhlIGtleSBpcyBub3QgbWFya2VkIGFzIGludmFsaWQgKi8KLQkJaWYgKCEoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9OT0tFWSkpIHsKLQkJCS8qIENvcHkgdGhlIGtleSBpbiB0aGUgZHJpdmVyICovCi0JCQlOZGlzTW92ZU1lbW9yeShwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uS2V5LAotCQkJCSAgICAgICBleHRyYSwgZXJxLT5sZW5ndGgpOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogRG8gd2Ugd2FudCB0byBqdXN0IHNldCB0aGUgdHJhbnNtaXQga2V5IGluZGV4ID8gKi8KLQkJaW50IGluZGV4ID0gKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpIC0gMTsKLQkJaWYgKChpbmRleCA+PSAwKSAmJiAoaW5kZXggPCA0KSkgewotCQkJcEFkYXB0ZXItPlN0YUNmZy5EZWZhdWx0S2V5SWQgPSBpbmRleDsKLQkJfSBlbHNlCi0JCQkvKiBEb24ndCBjb21wbGFpbiBpZiB0aGUgbW9kZSBpcyBvbmx5IGNoYW5nZWQgKi8KLQkJaWYgKCEoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9NT0RFKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KLQotZG9uZToKLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJICgiPT0+cnRfaW9jdGxfc2l3ZW5jb2RlOjplcnEtPmZsYWdzPSV4XG4iLCBlcnEtPmZsYWdzKSk7Ci0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIj09PnJ0X2lvY3RsX3Npd2VuY29kZTo6QXV0aE1vZGU9JXhcbiIsCi0JCSAgcEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSkpOwotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCI9PT5ydF9pb2N0bF9zaXdlbmNvZGU6OkRlZmF1bHRLZXlJZD0leCwgS2V5TGVuID0gJWRcbiIsCi0JCSAgcEFkYXB0ZXItPlN0YUNmZy5EZWZhdWx0S2V5SWQsCi0JCSAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtwQWRhcHRlci0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uCi0JCSAgS2V5TGVuKSk7Ci0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoIj09PnJ0X2lvY3RsX3Npd2VuY29kZTo6V2VwU3RhdHVzPSV4XG4iLAotCQkgIHBBZGFwdGVyLT5TdGFDZmcuV2VwU3RhdHVzKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludAotcnRfaW9jdGxfZ2l3ZW5jb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCSAgIHN0cnVjdCBpd19wb2ludCAqZXJxLCBjaGFyICprZXkpCi17Ci0JaW50IGtpZDsKLQlzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWRhcHRlciA9IE5VTEw7Ci0KLQlHRVRfUEFEX0ZST01fTkVUX0RFVihwQWRhcHRlciwgZGV2KTsKLQotCS8qY2hlY2sgaWYgdGhlIGludGVyZmFjZSBpcyBkb3duICovCi0JaWYgKCFSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKSkgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJTkZPOjpOZXR3b3JrIGlzIGRvd24hXG4iKSk7Ci0JCXJldHVybiAtRU5FVERPV047Ci0JfQotCi0Ja2lkID0gZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJICgiPT09PnJ0X2lvY3RsX2dpd2VuY29kZSAlZFxuIiwgZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkpOwotCi0JaWYgKHBBZGFwdGVyLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFXRVBEaXNhYmxlZCkgewotCQllcnEtPmxlbmd0aCA9IDA7Ci0JCWVycS0+ZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7Ci0JfSBlbHNlIGlmICgoa2lkID4gMCkgJiYgKGtpZCA8PSA0KSkgewotCQkvKiBjb3B5IHdlcCBrZXkgKi8KLQkJZXJxLT5mbGFncyA9IGtpZDsJLyogTkI6IGJhc2UgMSAqLwotCQlpZiAoZXJxLT5sZW5ndGggPiBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tpZCAtIDFdLktleUxlbikKLQkJCWVycS0+bGVuZ3RoID0gcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtraWQgLSAxXS5LZXlMZW47Ci0JCW1lbWNweShrZXksIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2lkIC0gMV0uS2V5LAotCQkgICAgICAgZXJxLT5sZW5ndGgpOwotCQkvKmlmICgoa2lkID09IHBBZGFwdGVyLT5Qb3J0Q2ZnLkRlZmF1bHRLZXlJZCkpICovCi0JCS8qZXJxLT5mbGFncyB8PSBJV19FTkNPREVfRU5BQkxFRDsgKi8JLyogWFhYICovCi0JCWlmIChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVNoYXJlZCkKLQkJCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX1JFU1RSSUNURUQ7CS8qIFhYWCAqLwotCQllbHNlCi0JCQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9PUEVOOwkvKiBYWFggKi8KLQotCX0gZWxzZSBpZiAoa2lkID09IDApIHsKLQkJaWYgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlU2hhcmVkKQotCQkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfUkVTVFJJQ1RFRDsJLyogWFhYICovCi0JCWVsc2UKLQkJCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX09QRU47CS8qIFhYWCAqLwotCQllcnEtPmxlbmd0aCA9Ci0JCSAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW3BBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdEtleUlkXS4KLQkJICAgIEtleUxlbjsKLQkJbWVtY3B5KGtleSwKLQkJICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bcEFkYXB0ZXItPlN0YUNmZy5EZWZhdWx0S2V5SWRdLgotCQkgICAgICAgS2V5LCBlcnEtPmxlbmd0aCk7Ci0JCS8qIGNvcHkgZGVmYXVsdCBrZXkgSUQgKi8KLQkJaWYgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlU2hhcmVkKQotCQkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfUkVTVFJJQ1RFRDsJLyogWFhYICovCi0JCWVsc2UKLQkJCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX09QRU47CS8qIFhYWCAqLwotCQllcnEtPmZsYWdzID0gcEFkYXB0ZXItPlN0YUNmZy5EZWZhdWx0S2V5SWQgKyAxOwkvKiBOQjogYmFzZSAxICovCi0JCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0VOQUJMRUQ7CS8qIFhYWCAqLwotCX0KLQotCXJldHVybiAwOwotCi19Ci0KLXZvaWQgZ2V0QmFJbmZvKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgY2hhciAqcE91dEJ1ZikKLXsKLQlpbnQgaSwgajsKLQlzdHJ1Y3QgcnRfYmFfb3JpX2VudHJ5ICpwT3JpQkFFbnRyeTsKLQlzdHJ1Y3QgcnRfYmFfcmVjX2VudHJ5ICpwUmVjQkFFbnRyeTsKLQotCWZvciAoaSA9IDA7IGkgPCBNQVhfTEVOX09GX01BQ19UQUJMRTsgaSsrKSB7Ci0JCXN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKnBFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W2ldOwotCQlpZiAoKChwRW50cnktPlZhbGlkQXNDTEkgfHwgcEVudHJ5LT5WYWxpZEFzQXBDbGkpCi0JCSAgICAgJiYgKHBFbnRyeS0+U3N0ID09IFNTVF9BU1NPQykpCi0JCSAgICB8fCAocEVudHJ5LT5WYWxpZEFzV0RTKSB8fCAocEVudHJ5LT5WYWxpZEFzTWVzaCkpIHsKLQkJCXNwcmludGYocE91dEJ1ZiArIHN0cmxlbihwT3V0QnVmKSwgIlxuJXBNIChBaWQgPSAlZCkgIgotCQkJCSIoQVApIC1cbiIsIHBFbnRyeS0+QWRkciwgcEVudHJ5LT5BaWQpOwotCi0JCQlzcHJpbnRmKHBPdXRCdWYsICIlc1tSZWNpcGllbnRdXG4iLCBwT3V0QnVmKTsKLQkJCWZvciAoaiA9IDA7IGogPCBOVU1fT0ZfVElEOyBqKyspIHsKLQkJCQlpZiAocEVudHJ5LT5CQVJlY1djaWRBcnJheVtqXSAhPSAwKSB7Ci0JCQkJCXBSZWNCQUVudHJ5ID0KLQkJCQkJICAgICZwQWQtPkJBVGFibGUuQkFSZWNFbnRyeVtwRW50cnktPgotCQkJCQkJCQkgICAgIEJBUmVjV2NpZEFycmF5Ci0JCQkJCQkJCSAgICAgW2pdXTsKLQkJCQkJc3ByaW50ZihwT3V0QnVmICsgc3RybGVuKHBPdXRCdWYpLAotCQkJCQkJIlRJRD0lZCwgQkFXaW5TaXplPSVkLCBMYXN0SW5kU2VxPSVkLCBSZW9yZGVyaW5nUGt0cz0lZFxuIiwKLQkJCQkJCWosIHBSZWNCQUVudHJ5LT5CQVdpblNpemUsCi0JCQkJCQlwUmVjQkFFbnRyeS0+TGFzdEluZFNlcSwKLQkJCQkJCXBSZWNCQUVudHJ5LT5saXN0LnFsZW4pOwotCQkJCX0KLQkJCX0KLQkJCXNwcmludGYocE91dEJ1ZiwgIiVzXG4iLCBwT3V0QnVmKTsKLQotCQkJc3ByaW50ZihwT3V0QnVmLCAiJXNbT3JpZ2luYXRvcl1cbiIsIHBPdXRCdWYpOwotCQkJZm9yIChqID0gMDsgaiA8IE5VTV9PRl9USUQ7IGorKykgewotCQkJCWlmIChwRW50cnktPkJBT3JpV2NpZEFycmF5W2pdICE9IDApIHsKLQkJCQkJcE9yaUJBRW50cnkgPQotCQkJCQkgICAgJnBBZC0+QkFUYWJsZS5CQU9yaUVudHJ5W3BFbnRyeS0+Ci0JCQkJCQkJCSAgICAgQkFPcmlXY2lkQXJyYXkKLQkJCQkJCQkJICAgICBbal1dOwotCQkJCQlzcHJpbnRmKHBPdXRCdWYgKyBzdHJsZW4ocE91dEJ1ZiksCi0JCQkJCQkiVElEPSVkLCBCQVdpblNpemU9JWQsIFN0YXJ0U2VxPSVkLCBDdXJUeFNlcT0lZFxuIiwKLQkJCQkJCWosIHBPcmlCQUVudHJ5LT5CQVdpblNpemUsCi0JCQkJCQlwT3JpQkFFbnRyeS0+U2VxdWVuY2UsCi0JCQkJCQlwRW50cnktPlR4U2VxW2pdKTsKLQkJCQl9Ci0JCQl9Ci0JCQlzcHJpbnRmKHBPdXRCdWYsICIlc1xuXG4iLCBwT3V0QnVmKTsKLQkJfQotCQlpZiAoc3RybGVuKHBPdXRCdWYpID4gKElXX1BSSVZfU0laRV9NQVNLIC0gMzApKQotCQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuOwotfQotCi1pbnQgcnRfaW9jdGxfc2l3bWxtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCSAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkID0gTlVMTDsKLQlzdHJ1Y3QgaXdfbWxtZSAqcE1sbWUgPSAoc3RydWN0IGl3X21sbWUgKil3cnF1LT5kYXRhLnBvaW50ZXI7Ci0Jc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSBNc2dFbGVtOwotCXN0cnVjdCBydF9tbG1lX2Rpc2Fzc29jX3JlcSBEaXNBc3NvY1JlcTsKLQlzdHJ1Y3QgcnRfbWxtZV9kZWF1dGhfcmVxIERlQXV0aFJlcTsKLQotCUdFVF9QQURfRlJPTV9ORVRfREVWKHBBZCwgZGV2KTsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PT0+ICVzXG4iLCBfX2Z1bmNfXykpOwotCi0JaWYgKHBNbG1lID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3dpdGNoIChwTWxtZS0+Y21kKSB7Ci0jaWZkZWYgSVdfTUxNRV9ERUFVVEgKLQljYXNlIElXX01MTUVfREVBVVRIOgotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIj09PT0+ICVzIC0gSVdfTUxNRV9ERUFVVEhcbiIsIF9fZnVuY19fKSk7Ci0JCUNPUFlfTUFDX0FERFIoRGVBdXRoUmVxLkFkZHIsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKLQkJRGVBdXRoUmVxLlJlYXNvbiA9IHBNbG1lLT5yZWFzb25fY29kZTsKLQkJTXNnRWxlbS5Nc2dMZW4gPSBzaXplb2Yoc3RydWN0IHJ0X21sbWVfZGVhdXRoX3JlcSk7Ci0JCU5kaXNNb3ZlTWVtb3J5KE1zZ0VsZW0uTXNnLCAmRGVBdXRoUmVxLAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcnRfbWxtZV9kZWF1dGhfcmVxKSk7Ci0JCU1sbWVEZWF1dGhSZXFBY3Rpb24ocEFkLCAmTXNnRWxlbSk7Ci0JCWlmIChJTkZSQV9PTihwQWQpKSB7Ci0JCQlMaW5rRG93bihwQWQsIEZBTFNFKTsKLQkJCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKLQkJfQotCQlicmVhazsKLSNlbmRpZiAvKiBJV19NTE1FX0RFQVVUSCAvLyAqLwotI2lmZGVmIElXX01MTUVfRElTQVNTT0MKLQljYXNlIElXX01MTUVfRElTQVNTT0M6Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiPT09PT4gJXMgLSBJV19NTE1FX0RJU0FTU09DXG4iLCBfX2Z1bmNfXykpOwotCQlDT1BZX01BQ19BRERSKERpc0Fzc29jUmVxLkFkZHIsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKLQkJRGlzQXNzb2NSZXEuUmVhc29uID0gcE1sbWUtPnJlYXNvbl9jb2RlOwotCi0JCU1zZ0VsZW0uTWFjaGluZSA9IEFTU09DX1NUQVRFX01BQ0hJTkU7Ci0JCU1zZ0VsZW0uTXNnVHlwZSA9IE1UMl9NTE1FX0RJU0FTU09DX1JFUTsKLQkJTXNnRWxlbS5Nc2dMZW4gPSBzaXplb2Yoc3RydWN0IHJ0X21sbWVfZGlzYXNzb2NfcmVxKTsKLQkJTmRpc01vdmVNZW1vcnkoTXNnRWxlbS5Nc2csICZEaXNBc3NvY1JlcSwKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHJ0X21sbWVfZGlzYXNzb2NfcmVxKSk7Ci0KLQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9PSURfRElTQVNTT0M7Ci0JCU1sbWVEaXNhc3NvY1JlcUFjdGlvbihwQWQsICZNc2dFbGVtKTsKLQkJYnJlYWs7Ci0jZW5kaWYgLyogSVdfTUxNRV9ESVNBU1NPQyAvLyAqLwotCWRlZmF1bHQ6Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiPT09PT4gJXMgLSBVbmtub3cgQ29tbWFuZFxuIiwgX19mdW5jX18pKTsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBydF9pb2N0bF9zaXdhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWRhcHRlciA9IE5VTEw7Ci0Jc3RydWN0IGl3X3BhcmFtICpwYXJhbSA9ICZ3cnF1LT5wYXJhbTsKLQotCUdFVF9QQURfRlJPTV9ORVRfREVWKHBBZGFwdGVyLCBkZXYpOwotCi0JLypjaGVjayBpZiB0aGUgaW50ZXJmYWNlIGlzIGRvd24gKi8KLQlpZiAoIVJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklORk86Ok5ldHdvcmsgaXMgZG93biFcbiIpKTsKLQkJcmV0dXJuIC1FTkVURE9XTjsKLQl9Ci0Jc3dpdGNoIChwYXJhbS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7Ci0JY2FzZSBJV19BVVRIX1dQQV9WRVJTSU9OOgotCQlpZiAocGFyYW0tPnZhbHVlID09IElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBKSB7Ci0JCQlwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLOwotCQkJaWYgKHBBZGFwdGVyLT5TdGFDZmcuQnNzVHlwZSA9PSBCU1NfQURIT0MpCi0JCQkJcEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9Ci0JCQkJICAgIE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmU7Ci0JCX0gZWxzZSBpZiAocGFyYW0tPnZhbHVlID09IElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBMikKLQkJCXBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLOwotCi0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiJXM6OklXX0FVVEhfV1BBX1ZFUlNJT04gLSBwYXJhbS0+dmFsdWUgPSAlZCFcbiIsCi0JCQkgIF9fZnVuY19fLCBwYXJhbS0+dmFsdWUpKTsKLQkJYnJlYWs7Ci0JY2FzZSBJV19BVVRIX0NJUEhFUl9QQUlSV0lTRToKLQkJaWYgKHBhcmFtLT52YWx1ZSA9PSBJV19BVVRIX0NJUEhFUl9OT05FKSB7Ci0JCQlwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1cyA9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZDsKLQkJCXBBZGFwdGVyLT5TdGFDZmcuT3JpZ1dlcFN0YXR1cyA9Ci0JCQkgICAgcEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXM7Ci0JCQlwQWRhcHRlci0+U3RhQ2ZnLlBhaXJDaXBoZXIgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7Ci0JCX0gZWxzZSBpZiAocGFyYW0tPnZhbHVlID09IElXX0FVVEhfQ0lQSEVSX1dFUDQwIHx8Ci0JCQkgICBwYXJhbS0+dmFsdWUgPT0gSVdfQVVUSF9DSVBIRVJfV0VQMTA0KSB7Ci0JCQlwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1cyA9IE5kaXM4MDJfMTFXRVBFbmFibGVkOwotCQkJcEFkYXB0ZXItPlN0YUNmZy5PcmlnV2VwU3RhdHVzID0KLQkJCSAgICBwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1czsKLQkJCXBBZGFwdGVyLT5TdGFDZmcuUGFpckNpcGhlciA9IE5kaXM4MDJfMTFXRVBFbmFibGVkOwotCQkJcEFkYXB0ZXItPlN0YUNmZy5JRUVFODAyMVggPSBGQUxTRTsKLQkJfSBlbHNlIGlmIChwYXJhbS0+dmFsdWUgPT0gSVdfQVVUSF9DSVBIRVJfVEtJUCkgewotCQkJcEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXMgPQotCQkJICAgIE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ7Ci0JCQlwQWRhcHRlci0+U3RhQ2ZnLk9yaWdXZXBTdGF0dXMgPQotCQkJICAgIHBBZGFwdGVyLT5TdGFDZmcuV2VwU3RhdHVzOwotCQkJcEFkYXB0ZXItPlN0YUNmZy5QYWlyQ2lwaGVyID0KLQkJCSAgICBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOwotCQl9IGVsc2UgaWYgKHBhcmFtLT52YWx1ZSA9PSBJV19BVVRIX0NJUEhFUl9DQ01QKSB7Ci0JCQlwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1cyA9Ci0JCQkgICAgTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZDsKLQkJCXBBZGFwdGVyLT5TdGFDZmcuT3JpZ1dlcFN0YXR1cyA9Ci0JCQkgICAgcEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXM7Ci0JCQlwQWRhcHRlci0+U3RhQ2ZnLlBhaXJDaXBoZXIgPQotCQkJICAgIE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQ7Ci0JCX0KLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCIlczo6SVdfQVVUSF9DSVBIRVJfUEFJUldJU0UgLSBwYXJhbS0+dmFsdWUgPSAlZCFcbiIsCi0JCQkgIF9fZnVuY19fLCBwYXJhbS0+dmFsdWUpKTsKLQkJYnJlYWs7Ci0JY2FzZSBJV19BVVRIX0NJUEhFUl9HUk9VUDoKLQkJaWYgKHBhcmFtLT52YWx1ZSA9PSBJV19BVVRIX0NJUEhFUl9OT05FKSB7Ci0JCQlwQWRhcHRlci0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID0gTmRpczgwMl8xMVdFUERpc2FibGVkOwotCQl9IGVsc2UgaWYgKHBhcmFtLT52YWx1ZSA9PSBJV19BVVRIX0NJUEhFUl9XRVA0MCB8fAotCQkJICAgcGFyYW0tPnZhbHVlID09IElXX0FVVEhfQ0lQSEVSX1dFUDEwNCkgewotCQkJcEFkYXB0ZXItPlN0YUNmZy5Hcm91cENpcGhlciA9IE5kaXM4MDJfMTFXRVBFbmFibGVkOwotCQl9IGVsc2UgaWYgKHBhcmFtLT52YWx1ZSA9PSBJV19BVVRIX0NJUEhFUl9US0lQKSB7Ci0JCQlwQWRhcHRlci0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID0KLQkJCSAgICBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOwotCQl9IGVsc2UgaWYgKHBhcmFtLT52YWx1ZSA9PSBJV19BVVRIX0NJUEhFUl9DQ01QKSB7Ci0JCQlwQWRhcHRlci0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID0KLQkJCSAgICBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkOwotCQl9Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiJXM6OklXX0FVVEhfQ0lQSEVSX0dST1VQIC0gcGFyYW0tPnZhbHVlID0gJWQhXG4iLAotCQkJICBfX2Z1bmNfXywgcGFyYW0tPnZhbHVlKSk7Ci0JCWJyZWFrOwotCWNhc2UgSVdfQVVUSF9LRVlfTUdNVDoKLQkJaWYgKHBhcmFtLT52YWx1ZSA9PSBJV19BVVRIX0tFWV9NR01UXzgwMl8xWCkgewotCQkJaWYgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPT0KLQkJCSAgICBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spIHsKLQkJCQlwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID0KLQkJCQkgICAgTmRpczgwMl8xMUF1dGhNb2RlV1BBOwotCQkJCXBBZGFwdGVyLT5TdGFDZmcuSUVFRTgwMjFYID0gRkFMU0U7Ci0JCQl9IGVsc2UgaWYgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPT0KLQkJCQkgICBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLKSB7Ci0JCQkJcEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9Ci0JCQkJICAgIE5kaXM4MDJfMTFBdXRoTW9kZVdQQTI7Ci0JCQkJcEFkYXB0ZXItPlN0YUNmZy5JRUVFODAyMVggPSBGQUxTRTsKLQkJCX0gZWxzZQotCQkJCS8qIFdFUCAxeCAqLwotCQkJCXBBZGFwdGVyLT5TdGFDZmcuSUVFRTgwMjFYID0gVFJVRTsKLQkJfSBlbHNlIGlmIChwYXJhbS0+dmFsdWUgPT0gMCkgewotCQkJLypwQWRhcHRlci0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQ7ICovCi0JCQlTVEFfUE9SVF9TRUNVUkVEKHBBZGFwdGVyKTsKLQkJfQotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIiVzOjpJV19BVVRIX0tFWV9NR01UIC0gcGFyYW0tPnZhbHVlID0gJWQhXG4iLAotCQkJICBfX2Z1bmNfXywgcGFyYW0tPnZhbHVlKSk7Ci0JCWJyZWFrOwotCWNhc2UgSVdfQVVUSF9SWF9VTkVOQ1JZUFRFRF9FQVBPTDoKLQkJYnJlYWs7Ci0JY2FzZSBJV19BVVRIX1BSSVZBQ1lfSU5WT0tFRDoKLQkJLyppZiAocGFyYW0tPnZhbHVlID09IDApCi0JCSAgIHsKLQkJICAgcEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZU9wZW47Ci0JCSAgIHBBZGFwdGVyLT5TdGFDZmcuV2VwU3RhdHVzID0gTmRpczgwMl8xMVdFUERpc2FibGVkOwotCQkgICBwQWRhcHRlci0+U3RhQ2ZnLk9yaWdXZXBTdGF0dXMgPSBwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1czsKLQkJICAgcEFkYXB0ZXItPlN0YUNmZy5QYWlyQ2lwaGVyID0gTmRpczgwMl8xMVdFUERpc2FibGVkOwotCQkgICBwQWRhcHRlci0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID0gTmRpczgwMl8xMVdFUERpc2FibGVkOwotCQkgICB9ICovCi0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiJXM6OklXX0FVVEhfUFJJVkFDWV9JTlZPS0VEIC0gcGFyYW0tPnZhbHVlID0gJWQhXG4iLAotCQkJICBfX2Z1bmNfXywgcGFyYW0tPnZhbHVlKSk7Ci0JCWJyZWFrOwotCWNhc2UgSVdfQVVUSF9EUk9QX1VORU5DUllQVEVEOgotCQlpZiAocGFyYW0tPnZhbHVlICE9IDApCi0JCQlwQWRhcHRlci0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0KLQkJCSAgICBXUEFfODAyXzFYX1BPUlRfTk9UX1NFQ1VSRUQ7Ci0JCWVsc2UgewotCQkJLypwQWRhcHRlci0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQ7ICovCi0JCQlTVEFfUE9SVF9TRUNVUkVEKHBBZGFwdGVyKTsKLQkJfQotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIiVzOjpJV19BVVRIX1dQQV9WRVJTSU9OIC0gcGFyYW0tPnZhbHVlID0gJWQhXG4iLAotCQkJICBfX2Z1bmNfXywgcGFyYW0tPnZhbHVlKSk7Ci0JCWJyZWFrOwotCWNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKLQkJaWYgKHBhcmFtLT52YWx1ZSAmIElXX0FVVEhfQUxHX1NIQVJFRF9LRVkpIHsKLQkJCXBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVTaGFyZWQ7Ci0JCX0gZWxzZSBpZiAocGFyYW0tPnZhbHVlICYgSVdfQVVUSF9BTEdfT1BFTl9TWVNURU0pIHsKLQkJCXBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVPcGVuOwotCQl9IGVsc2UKLQkJCXJldHVybiAtRUlOVkFMOwotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIiVzOjpJV19BVVRIXzgwMjExX0FVVEhfQUxHIC0gcGFyYW0tPnZhbHVlID0gJWQhXG4iLAotCQkJICBfX2Z1bmNfXywgcGFyYW0tPnZhbHVlKSk7Ci0JCWJyZWFrOwotCWNhc2UgSVdfQVVUSF9XUEFfRU5BQkxFRDoKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCIlczo6SVdfQVVUSF9XUEFfRU5BQkxFRCAtIERyaXZlciBzdXBwb3J0cyBXUEEhKHBhcmFtLT52YWx1ZSA9ICVkKVxuIiwKLQkJCSAgX19mdW5jX18sIHBhcmFtLT52YWx1ZSkpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBydF9pb2N0bF9naXdhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWRhcHRlciA9IE5VTEw7Ci0Jc3RydWN0IGl3X3BhcmFtICpwYXJhbSA9ICZ3cnF1LT5wYXJhbTsKLQotCUdFVF9QQURfRlJPTV9ORVRfREVWKHBBZGFwdGVyLCBkZXYpOwotCi0JLypjaGVjayBpZiB0aGUgaW50ZXJmYWNlIGlzIGRvd24gKi8KLQlpZiAoIVJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklORk86Ok5ldHdvcmsgaXMgZG93biFcbiIpKTsKLQkJcmV0dXJuIC1FTkVURE9XTjsKLQl9Ci0KLQlzd2l0Y2ggKHBhcmFtLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpIHsKLQljYXNlIElXX0FVVEhfRFJPUF9VTkVOQ1JZUFRFRDoKLQkJcGFyYW0tPnZhbHVlID0KLQkJICAgIChwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1cyA9PQotCQkgICAgIE5kaXM4MDJfMTFXRVBEaXNhYmxlZCkgPyAwIDogMTsKLQkJYnJlYWs7Ci0KLQljYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6Ci0JCXBhcmFtLT52YWx1ZSA9Ci0JCSAgICAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9PQotCQkgICAgIE5kaXM4MDJfMTFBdXRoTW9kZVNoYXJlZCkgPyBJV19BVVRIX0FMR19TSEFSRURfS0VZIDoKLQkJICAgIElXX0FVVEhfQUxHX09QRU5fU1lTVEVNOwotCQlicmVhazsKLQotCWNhc2UgSVdfQVVUSF9XUEFfRU5BQkxFRDoKLQkJcGFyYW0tPnZhbHVlID0KLQkJICAgIChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID49Ci0JCSAgICAgTmRpczgwMl8xMUF1dGhNb2RlV1BBKSA/IDEgOiAwOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoInJ0X2lvY3RsX2dpd2F1dGg6OnBhcmFtLT52YWx1ZSA9ICVkIVxuIiwgcGFyYW0tPnZhbHVlKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgZm5TZXRDaXBoZXJLZXkoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkYXB0ZXIsCi0JCSAgICBpbnQga2V5SWR4LAotCQkgICAgdTggQ2lwaGVyQWxnLAotCQkgICAgSU4gQk9PTEVBTiBiR1RLLCBJTiBzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0KQotewotCU5kaXNaZXJvTWVtb3J5KCZwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0sIHNpemVvZihzdHJ1Y3QgcnRfY2lwaGVyX2tleSkpOwotCXBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5LZXlMZW4gPSBMRU5fVEtJUF9FSzsKLQlOZGlzTW92ZU1lbW9yeShwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uS2V5LCBleHQtPmtleSwKLQkJICAgICAgIExFTl9US0lQX0VLKTsKLQlOZGlzTW92ZU1lbW9yeShwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uVHhNaWMsCi0JCSAgICAgICBleHQtPmtleSArIExFTl9US0lQX0VLLCBMRU5fVEtJUF9UWE1JQ0spOwotCU5kaXNNb3ZlTWVtb3J5KHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5SeE1pYywKLQkJICAgICAgIGV4dC0+a2V5ICsgTEVOX1RLSVBfRUsgKyBMRU5fVEtJUF9UWE1JQ0ssCi0JCSAgICAgICBMRU5fVEtJUF9SWE1JQ0spOwotCXBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5DaXBoZXJBbGcgPSBDaXBoZXJBbGc7Ci0KLQkvKiBVcGRhdGUgZ3JvdXAga2V5IGluZm9ybWF0aW9uIHRvIEFTSUMgU2hhcmVkIEtleSBUYWJsZSAqLwotCUFzaWNBZGRTaGFyZWRLZXlFbnRyeShwQWRhcHRlciwKLQkJCSAgICAgIEJTUzAsCi0JCQkgICAgICBrZXlJZHgsCi0JCQkgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uQ2lwaGVyQWxnLAotCQkJICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLktleSwKLQkJCSAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5UeE1pYywKLQkJCSAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5SeE1pYyk7Ci0KLQlpZiAoYkdUSykKLQkJLyogVXBkYXRlIEFTSUMgV0NJRCBhdHRyaWJ1dGUgdGFibGUgYW5kIElWRUlWIHRhYmxlICovCi0JCVJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnkocEFkYXB0ZXIsCi0JCQkJCSAgQlNTMCwKLQkJCQkJICBrZXlJZHgsCi0JCQkJCSAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLgotCQkJCQkgIENpcGhlckFsZywgTlVMTCk7Ci0JZWxzZQotCQkvKiBVcGRhdGUgQVNJQyBXQ0lEIGF0dHJpYnV0ZSB0YWJsZSBhbmQgSVZFSVYgdGFibGUgKi8KLQkJUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeShwQWRhcHRlciwKLQkJCQkJICBCU1MwLAotCQkJCQkgIGtleUlkeCwKLQkJCQkJICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uCi0JCQkJCSAgQ2lwaGVyQWxnLAotCQkJCQkgICZwQWRhcHRlci0+TWFjVGFiLgotCQkJCQkgIENvbnRlbnRbQlNTSURfV0NJRF0pOwotfQotCi1pbnQgcnRfaW9jdGxfc2l3ZW5jb2RlZXh0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZGFwdGVyID0gTlVMTDsKLQlzdHJ1Y3QgaXdfcG9pbnQgKmVuY29kaW5nID0gJndycXUtPmVuY29kaW5nOwotCXN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQgPSAoc3RydWN0IGl3X2VuY29kZV9leHQgKilleHRyYTsKLQlpbnQga2V5SWR4LCBhbGcgPSBleHQtPmFsZzsKLQotCUdFVF9QQURfRlJPTV9ORVRfREVWKHBBZGFwdGVyLCBkZXYpOwotCi0JLypjaGVjayBpZiB0aGUgaW50ZXJmYWNlIGlzIGRvd24gKi8KLQlpZiAoIVJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklORk86Ok5ldHdvcmsgaXMgZG93biFcbiIpKTsKLQkJcmV0dXJuIC1FTkVURE9XTjsKLQl9Ci0KLQlpZiAoZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0RJU0FCTEVEKSB7Ci0JCWtleUlkeCA9IChlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpIC0gMTsKLQkJLyogc2V0IEJTU0lEIHdjaWQgZW50cnkgb2YgdGhlIFBhaXItd2lzZSBLZXkgdGFibGUgYXMgbm8tc2VjdXJpdHkgbW9kZSAqLwotCQlBc2ljUmVtb3ZlUGFpcndpc2VLZXlFbnRyeShwQWRhcHRlciwgQlNTMCwgQlNTSURfV0NJRCk7Ci0JCXBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5LZXlMZW4gPSAwOwotCQlwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uQ2lwaGVyQWxnID0gQ0lQSEVSX05PTkU7Ci0JCUFzaWNSZW1vdmVTaGFyZWRLZXlFbnRyeShwQWRhcHRlciwgMCwgKHU4KWtleUlkeCk7Ci0JCU5kaXNaZXJvTWVtb3J5KCZwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0sCi0JCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBydF9jaXBoZXJfa2V5KSk7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiJXM6OlJlbW92ZSBhbGwga2V5cyEoZW5jb2RpbmctPmZsYWdzID0gJXgpXG4iLAotCQkJICBfX2Z1bmNfXywgZW5jb2RpbmctPmZsYWdzKSk7Ci0JfSBlbHNlIHsKLQkJLyogR2V0IEtleSBJbmRleCBhbmQgY29udmV0IHRvIG91ciBvd24gZGVmaW5lZCBrZXkgaW5kZXggKi8KLQkJa2V5SWR4ID0gKGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkgLSAxOwotCQlpZiAoKGtleUlkeCA8IDApIHx8IChrZXlJZHggPj0gTlJfV0VQX0tFWVMpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJaWYgKGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9TRVRfVFhfS0VZKSB7Ci0JCQlwQWRhcHRlci0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCA9IGtleUlkeDsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAoIiVzOjpEZWZhdWx0S2V5SWQgPSAlZFxuIiwgX19mdW5jX18sCi0JCQkJICBwQWRhcHRlci0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCkpOwotCQl9Ci0KLQkJc3dpdGNoIChhbGcpIHsKLQkJY2FzZSBJV19FTkNPREVfQUxHX05PTkU6Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCIlczo6SVdfRU5DT0RFX0FMR19OT05FXG4iLCBfX2Z1bmNfXykpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSVdfRU5DT0RFX0FMR19XRVA6Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCIlczo6SVdfRU5DT0RFX0FMR19XRVAgLSBleHQtPmtleV9sZW4gPSAlZCwga2V5SWR4ID0gJWRcbiIsCi0JCQkJICBfX2Z1bmNfXywgZXh0LT5rZXlfbGVuLCBrZXlJZHgpKTsKLQkJCWlmIChleHQtPmtleV9sZW4gPT0gTUFYX1dFUF9LRVlfU0laRSkgewotCQkJCXBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5LZXlMZW4gPQotCQkJCSAgICBNQVhfV0VQX0tFWV9TSVpFOwotCQkJCXBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5DaXBoZXJBbGcgPQotCQkJCSAgICBDSVBIRVJfV0VQMTI4OwotCQkJfSBlbHNlIGlmIChleHQtPmtleV9sZW4gPT0gTUlOX1dFUF9LRVlfU0laRSkgewotCQkJCXBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5LZXlMZW4gPQotCQkJCSAgICBNSU5fV0VQX0tFWV9TSVpFOwotCQkJCXBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5DaXBoZXJBbGcgPQotCQkJCSAgICBDSVBIRVJfV0VQNjQ7Ci0JCQl9IGVsc2UKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkJTmRpc1plcm9NZW1vcnkocEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLktleSwKLQkJCQkgICAgICAgMTYpOwotCQkJTmRpc01vdmVNZW1vcnkocEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLktleSwKLQkJCQkgICAgICAgZXh0LT5rZXksIGV4dC0+a2V5X2xlbik7Ci0JCQlpZiAocEFkYXB0ZXItPlN0YUNmZy5Hcm91cENpcGhlciA9PQotCQkJICAgIE5kaXM4MDJfMTFHcm91cFdFUDQwRW5hYmxlZAotCQkJICAgIHx8IHBBZGFwdGVyLT5TdGFDZmcuR3JvdXBDaXBoZXIgPT0KLQkJCSAgICBOZGlzODAyXzExR3JvdXBXRVAxMDRFbmFibGVkKSB7Ci0JCQkJLyogU2V0IEdyb3VwIGtleSBtYXRlcmlhbCB0byBBc2ljICovCi0JCQkJQXNpY0FkZFNoYXJlZEtleUVudHJ5KHBBZGFwdGVyLCBCU1MwLCBrZXlJZHgsCi0JCQkJCQkgICAgICBwQWRhcHRlci0+Ci0JCQkJCQkgICAgICBTaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS4KLQkJCQkJCSAgICAgIENpcGhlckFsZywKLQkJCQkJCSAgICAgIHBBZGFwdGVyLT4KLQkJCQkJCSAgICAgIFNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLgotCQkJCQkJICAgICAgS2V5LCBOVUxMLCBOVUxMKTsKLQotCQkJCS8qIFVwZGF0ZSBXQ0lEIGF0dHJpYnV0ZSB0YWJsZSBhbmQgSVZFSVYgdGFibGUgZm9yIHRoaXMgZ3JvdXAga2V5IHRhYmxlICovCi0JCQkJUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeShwQWRhcHRlciwgQlNTMCwKLQkJCQkJCQkgIGtleUlkeCwKLQkJCQkJCQkgIHBBZGFwdGVyLT4KLQkJCQkJCQkgIFNoYXJlZEtleVtCU1MwXQotCQkJCQkJCSAgW2tleUlkeF0uQ2lwaGVyQWxnLAotCQkJCQkJCSAgTlVMTCk7Ci0KLQkJCQlTVEFfUE9SVF9TRUNVUkVEKHBBZGFwdGVyKTsKLQotCQkJCS8qIEluZGljYXRlIENvbm5lY3RlZCBmb3IgR1VJICovCi0JCQkJcEFkYXB0ZXItPkluZGljYXRlTWVkaWFTdGF0ZSA9Ci0JCQkJICAgIE5kaXNNZWRpYVN0YXRlQ29ubmVjdGVkOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgSVdfRU5DT0RFX0FMR19US0lQOgotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiJXM6OklXX0VOQ09ERV9BTEdfVEtJUCAtIGtleUlkeCA9ICVkLCBleHQtPmtleV9sZW4gPSAlZFxuIiwKLQkJCQkgIF9fZnVuY19fLCBrZXlJZHgsIGV4dC0+a2V5X2xlbikpOwotCQkJaWYgKGV4dC0+a2V5X2xlbiA9PSAzMikgewotCQkJCWlmIChleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfU0VUX1RYX0tFWSkgewotCQkJCQlmblNldENpcGhlcktleShwQWRhcHRlciwga2V5SWR4LAotCQkJCQkJICAgICAgIENJUEhFUl9US0lQLCBGQUxTRSwgZXh0KTsKLQkJCQkJaWYgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPj0KLQkJCQkJICAgIE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIpIHsKLQkJCQkJCS8qcEFkYXB0ZXItPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOyAqLwotCQkJCQkJU1RBX1BPUlRfU0VDVVJFRChwQWRhcHRlcik7Ci0JCQkJCQlwQWRhcHRlci0+SW5kaWNhdGVNZWRpYVN0YXRlID0KLQkJCQkJCSAgICBOZGlzTWVkaWFTdGF0ZUNvbm5lY3RlZDsKLQkJCQkJfQotCQkJCX0gZWxzZSBpZiAoZXh0LT4KLQkJCQkJICAgZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9HUk9VUF9LRVkpCi0JCQkJewotCQkJCQlmblNldENpcGhlcktleShwQWRhcHRlciwga2V5SWR4LAotCQkJCQkJICAgICAgIENJUEhFUl9US0lQLCBUUlVFLCBleHQpOwotCi0JCQkJCS8qIHNldCA4MDIuMXggcG9ydCBjb250cm9sICovCi0JCQkJCS8qcEFkYXB0ZXItPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOyAqLwotCQkJCQlTVEFfUE9SVF9TRUNVUkVEKHBBZGFwdGVyKTsKLQkJCQkJcEFkYXB0ZXItPkluZGljYXRlTWVkaWFTdGF0ZSA9Ci0JCQkJCSAgICBOZGlzTWVkaWFTdGF0ZUNvbm5lY3RlZDsKLQkJCQl9Ci0JCQl9IGVsc2UKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWJyZWFrOwotCQljYXNlIElXX0VOQ09ERV9BTEdfQ0NNUDoKLQkJCWlmIChleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfU0VUX1RYX0tFWSkgewotCQkJCWZuU2V0Q2lwaGVyS2V5KHBBZGFwdGVyLCBrZXlJZHgsIENJUEhFUl9BRVMsCi0JCQkJCSAgICAgICBGQUxTRSwgZXh0KTsKLQkJCQlpZiAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA+PQotCQkJCSAgICBOZGlzODAyXzExQXV0aE1vZGVXUEEyKQotCQkJCQkvKnBBZGFwdGVyLT5TdGFDZmcuUG9ydFNlY3VyZWQgPSBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRDsgKi8KLQkJCQkJU1RBX1BPUlRfU0VDVVJFRChwQWRhcHRlcik7Ci0JCQkJcEFkYXB0ZXItPkluZGljYXRlTWVkaWFTdGF0ZSA9Ci0JCQkJICAgIE5kaXNNZWRpYVN0YXRlQ29ubmVjdGVkOwotCQkJfSBlbHNlIGlmIChleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfR1JPVVBfS0VZKSB7Ci0JCQkJZm5TZXRDaXBoZXJLZXkocEFkYXB0ZXIsIGtleUlkeCwgQ0lQSEVSX0FFUywKLQkJCQkJICAgICAgIFRSVUUsIGV4dCk7Ci0KLQkJCQkvKiBzZXQgODAyLjF4IHBvcnQgY29udHJvbCAqLwotCQkJCS8qcEFkYXB0ZXItPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOyAqLwotCQkJCVNUQV9QT1JUX1NFQ1VSRUQocEFkYXB0ZXIpOwotCQkJCXBBZGFwdGVyLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPQotCQkJCSAgICBOZGlzTWVkaWFTdGF0ZUNvbm5lY3RlZDsKLQkJCX0KLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50Ci1ydF9pb2N0bF9naXdlbmNvZGVleHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkID0gTlVMTDsKLQljaGFyICpwS2V5ID0gTlVMTDsKLQlzdHJ1Y3QgaXdfcG9pbnQgKmVuY29kaW5nID0gJndycXUtPmVuY29kaW5nOwotCXN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQgPSAoc3RydWN0IGl3X2VuY29kZV9leHQgKilleHRyYTsKLQlpbnQgaWR4LCBtYXhfa2V5X2xlbjsKLQotCUdFVF9QQURfRlJPTV9ORVRfREVWKHBBZCwgZGV2KTsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PT4gcnRfaW9jdGxfZ2l3ZW5jb2RlZXh0XG4iKSk7Ci0KLQltYXhfa2V5X2xlbiA9IGVuY29kaW5nLT5sZW5ndGggLSBzaXplb2YoKmV4dCk7Ci0JaWYgKG1heF9rZXlfbGVuIDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZHggPSBlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVg7Ci0JaWYgKGlkeCkgewotCQlpZiAoaWR4IDwgMSB8fCBpZHggPiA0KQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlkeC0tOwotCi0JCWlmICgocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpIHx8Ci0JCSAgICAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpKSB7Ci0JCQlpZiAoaWR4ICE9IHBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCkgewotCQkJCWV4dC0+a2V5X2xlbiA9IDA7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UKLQkJaWR4ID0gcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkOwotCi0JZW5jb2RpbmctPmZsYWdzID0gaWR4ICsgMTsKLQltZW1zZXQoZXh0LCAwLCBzaXplb2YoKmV4dCkpOwotCi0JZXh0LT5rZXlfbGVuID0gMDsKLQlzd2l0Y2ggKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cykgewotCWNhc2UgTmRpczgwMl8xMVdFUERpc2FibGVkOgotCQlleHQtPmFsZyA9IElXX0VOQ09ERV9BTEdfTk9ORTsKLQkJZW5jb2RpbmctPmZsYWdzIHw9IElXX0VOQ09ERV9ESVNBQkxFRDsKLQkJYnJlYWs7Ci0JY2FzZSBOZGlzODAyXzExV0VQRW5hYmxlZDoKLQkJZXh0LT5hbGcgPSBJV19FTkNPREVfQUxHX1dFUDsKLQkJaWYgKHBBZC0+U2hhcmVkS2V5W0JTUzBdW2lkeF0uS2V5TGVuID4gbWF4X2tleV9sZW4pCi0JCQlyZXR1cm4gLUUyQklHOwotCQllbHNlIHsKLQkJCWV4dC0+a2V5X2xlbiA9IHBBZC0+U2hhcmVkS2V5W0JTUzBdW2lkeF0uS2V5TGVuOwotCQkJcEtleSA9IChjaGFyICopJiAocEFkLT5TaGFyZWRLZXlbQlNTMF1baWR4XS5LZXlbMF0pOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZDoKLQljYXNlIE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQ6Ci0JCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkKLQkJCWV4dC0+YWxnID0gSVdfRU5DT0RFX0FMR19US0lQOwotCQllbHNlCi0JCQlleHQtPmFsZyA9IElXX0VOQ09ERV9BTEdfQ0NNUDsKLQotCQlpZiAobWF4X2tleV9sZW4gPCAzMikKLQkJCXJldHVybiAtRTJCSUc7Ci0JCWVsc2UgewotCQkJZXh0LT5rZXlfbGVuID0gMzI7Ci0JCQlwS2V5ID0gKGNoYXIgKikmIHBBZC0+U3RhQ2ZnLlBNS1swXTsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoZXh0LT5rZXlfbGVuICYmIHBLZXkpIHsKLQkJZW5jb2RpbmctPmZsYWdzIHw9IElXX0VOQ09ERV9FTkFCTEVEOwotCQltZW1jcHkoZXh0LT5rZXksIHBLZXksIGV4dC0+a2V5X2xlbik7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBydF9pb2N0bF9zaXdnZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQgPSBOVUxMOwotCi0JR0VUX1BBRF9GUk9NX05FVF9ERVYocEFkLCBkZXYpOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PiBydF9pb2N0bF9zaXdnZW5pZVxuIikpOwotCXBBZC0+U3RhQ2ZnLmJSU05fSUVfRnJvbVdwYVN1cHBsaWNhbnQgPSBGQUxTRTsKLQlpZiAod3JxdS0+ZGF0YS5sZW5ndGggPiBNQVhfTEVOX09GX1JTTklFIHx8Ci0JICAgICh3cnF1LT5kYXRhLmxlbmd0aCAmJiBleHRyYSA9PSBOVUxMKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAod3JxdS0+ZGF0YS5sZW5ndGgpIHsKLQkJcEFkLT5TdGFDZmcuUlNOSUVfTGVuID0gd3JxdS0+ZGF0YS5sZW5ndGg7Ci0JCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPlN0YUNmZy5SU05fSUVbMF0sIGV4dHJhLAotCQkJICAgICAgIHBBZC0+U3RhQ2ZnLlJTTklFX0xlbik7Ci0JCXBBZC0+U3RhQ2ZnLmJSU05fSUVfRnJvbVdwYVN1cHBsaWNhbnQgPSBUUlVFOwotCX0gZWxzZSB7Ci0JCXBBZC0+U3RhQ2ZnLlJTTklFX0xlbiA9IDA7Ci0JCU5kaXNaZXJvTWVtb3J5KCZwQWQtPlN0YUNmZy5SU05fSUVbMF0sIE1BWF9MRU5fT0ZfUlNOSUUpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgcnRfaW9jdGxfZ2l3Z2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkID0gTlVMTDsKLQotCUdFVF9QQURfRlJPTV9ORVRfREVWKHBBZCwgZGV2KTsKLQotCWlmICgocEFkLT5TdGFDZmcuUlNOSUVfTGVuID09IDApIHx8Ci0JICAgIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA8IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkpIHsKLQkJd3JxdS0+ZGF0YS5sZW5ndGggPSAwOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAocEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQID09IFdQQV9TVVBQTElDQU5UX0VOQUJMRSkgewotCQlpZiAod3JxdS0+ZGF0YS5sZW5ndGggPCBwQWQtPlN0YUNmZy5SU05JRV9MZW4pCi0JCQlyZXR1cm4gLUUyQklHOwotCi0JCXdycXUtPmRhdGEubGVuZ3RoID0gcEFkLT5TdGFDZmcuUlNOSUVfTGVuOwotCQltZW1jcHkoZXh0cmEsICZwQWQtPlN0YUNmZy5SU05fSUVbMF0sIHBBZC0+U3RhQ2ZnLlJTTklFX0xlbik7Ci0JfSBlbHNlIHsKLQkJdTggUlNOSWUgPSBJRV9XUEE7Ci0KLQkJaWYgKHdycXUtPmRhdGEubGVuZ3RoIDwgKHBBZC0+U3RhQ2ZnLlJTTklFX0xlbiArIDIpKQkvKiBJRCwgTGVuICovCi0JCQlyZXR1cm4gLUUyQklHOwotCQl3cnF1LT5kYXRhLmxlbmd0aCA9IHBBZC0+U3RhQ2ZnLlJTTklFX0xlbiArIDI7Ci0KLQkJaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLKSB8fAotCQkgICAgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIpKQotCQkJUlNOSWUgPSBJRV9SU047Ci0KLQkJZXh0cmFbMF0gPSAoY2hhcilSU05JZTsKLQkJZXh0cmFbMV0gPSBwQWQtPlN0YUNmZy5SU05JRV9MZW47Ci0JCW1lbWNweShleHRyYSArIDIsICZwQWQtPlN0YUNmZy5SU05fSUVbMF0sCi0JCSAgICAgICBwQWQtPlN0YUNmZy5SU05JRV9MZW4pOwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgcnRfaW9jdGxfc2l3cG1rc2Eoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkID0gTlVMTDsKLQlzdHJ1Y3QgaXdfcG1rc2EgKnBQbWtzYSA9IChzdHJ1Y3QgaXdfcG1rc2EgKil3cnF1LT5kYXRhLnBvaW50ZXI7Ci0JaW50IENhY2hlZElkeCA9IDAsIGlkeCA9IDA7Ci0KLQlHRVRfUEFEX0ZST01fTkVUX0RFVihwQWQsIGRldik7Ci0KLQlpZiAocFBta3NhID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PiBydF9pb2N0bF9zaXdwbWtzYVxuIikpOwotCXN3aXRjaCAocFBta3NhLT5jbWQpIHsKLQljYXNlIElXX1BNS1NBX0ZMVVNIOgotCQlOZGlzWmVyb01lbW9yeShwQWQtPlN0YUNmZy5TYXZlZFBNSywKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHJ0X2Jzc2lkX2luZm8pICogUE1LSURfTk8pOwotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoInJ0X2lvY3RsX3Npd3Bta3NhIC0gSVdfUE1LU0FfRkxVU0hcbiIpKTsKLQkJYnJlYWs7Ci0JY2FzZSBJV19QTUtTQV9SRU1PVkU6Ci0JCWZvciAoQ2FjaGVkSWR4ID0gMDsgQ2FjaGVkSWR4IDwgcEFkLT5TdGFDZmcuU2F2ZWRQTUtOdW07Ci0JCSAgICAgQ2FjaGVkSWR4KyspIHsKLQkJCS8qIGNvbXBhcmUgdGhlIEJTU0lEICovCi0JCQlpZiAoTmRpc0VxdWFsTWVtb3J5Ci0JCQkgICAgKHBQbWtzYS0+YnNzaWQuc2FfZGF0YSwKLQkJCSAgICAgcEFkLT5TdGFDZmcuU2F2ZWRQTUtbQ2FjaGVkSWR4XS5CU1NJRCwKLQkJCSAgICAgTUFDX0FERFJfTEVOKSkgewotCQkJCU5kaXNaZXJvTWVtb3J5KHBBZC0+U3RhQ2ZnLlNhdmVkUE1LW0NhY2hlZElkeF0uCi0JCQkJCSAgICAgICBCU1NJRCwgTUFDX0FERFJfTEVOKTsKLQkJCQlOZGlzWmVyb01lbW9yeShwQWQtPlN0YUNmZy5TYXZlZFBNS1tDYWNoZWRJZHhdLgotCQkJCQkgICAgICAgUE1LSUQsIDE2KTsKLQkJCQlmb3IgKGlkeCA9IENhY2hlZElkeDsKLQkJCQkgICAgIGlkeCA8IChwQWQtPlN0YUNmZy5TYXZlZFBNS051bSAtIDEpOwotCQkJCSAgICAgaWR4KyspIHsKLQkJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+U3RhQ2ZnLgotCQkJCQkJICAgICAgIFNhdmVkUE1LW2lkeF0uQlNTSURbMF0sCi0JCQkJCQkgICAgICAgJnBBZC0+U3RhQ2ZnLgotCQkJCQkJICAgICAgIFNhdmVkUE1LW2lkeCArCi0JCQkJCQkJCTFdLkJTU0lEWzBdLAotCQkJCQkJICAgICAgIE1BQ19BRERSX0xFTik7Ci0JCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPlN0YUNmZy4KLQkJCQkJCSAgICAgICBTYXZlZFBNS1tpZHhdLlBNS0lEWzBdLAotCQkJCQkJICAgICAgICZwQWQtPlN0YUNmZy4KLQkJCQkJCSAgICAgICBTYXZlZFBNS1tpZHggKwotCQkJCQkJCQkxXS5QTUtJRFswXSwKLQkJCQkJCSAgICAgICAxNik7Ci0JCQkJfQotCQkJCXBBZC0+U3RhQ2ZnLlNhdmVkUE1LTnVtLS07Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoInJ0X2lvY3RsX3Npd3Bta3NhIC0gSVdfUE1LU0FfUkVNT1ZFXG4iKSk7Ci0JCWJyZWFrOwotCWNhc2UgSVdfUE1LU0FfQUREOgotCQlmb3IgKENhY2hlZElkeCA9IDA7IENhY2hlZElkeCA8IHBBZC0+U3RhQ2ZnLlNhdmVkUE1LTnVtOwotCQkgICAgIENhY2hlZElkeCsrKSB7Ci0JCQkvKiBjb21wYXJlIHRoZSBCU1NJRCAqLwotCQkJaWYgKE5kaXNFcXVhbE1lbW9yeQotCQkJICAgIChwUG1rc2EtPmJzc2lkLnNhX2RhdGEsCi0JCQkgICAgIHBBZC0+U3RhQ2ZnLlNhdmVkUE1LW0NhY2hlZElkeF0uQlNTSUQsCi0JCQkgICAgIE1BQ19BRERSX0xFTikpCi0JCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBGb3VuZCwgcmVwbGFjZSBpdCAqLwotCQlpZiAoQ2FjaGVkSWR4IDwgUE1LSURfTk8pIHsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX09GRiwKLQkJCQkgKCJVcGRhdGUgUE1LSUQsIGlkeCA9ICVkXG4iLCBDYWNoZWRJZHgpKTsKLQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPlN0YUNmZy5TYXZlZFBNS1tDYWNoZWRJZHhdLgotCQkJCSAgICAgICBCU1NJRFswXSwgcFBta3NhLT5ic3NpZC5zYV9kYXRhLAotCQkJCSAgICAgICBNQUNfQUREUl9MRU4pOwotCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+U3RhQ2ZnLlNhdmVkUE1LW0NhY2hlZElkeF0uCi0JCQkJICAgICAgIFBNS0lEWzBdLCBwUG1rc2EtPnBta2lkLCAxNik7Ci0JCQlwQWQtPlN0YUNmZy5TYXZlZFBNS051bSsrOwotCQl9Ci0JCS8qIE5vdCBmb3VuZCwgcmVwbGFjZSB0aGUgbGFzdCBvbmUgKi8KLQkJZWxzZSB7Ci0JCQkvKiBSYW5kb21seSByZXBsYWNlIG9uZSAqLwotCQkJQ2FjaGVkSWR4ID0gKHBQbWtzYS0+YnNzaWQuc2FfZGF0YVs1XSAlIFBNS0lEX05PKTsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX09GRiwKLQkJCQkgKCJVcGRhdGUgUE1LSUQsIGlkeCA9ICVkXG4iLCBDYWNoZWRJZHgpKTsKLQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPlN0YUNmZy5TYXZlZFBNS1tDYWNoZWRJZHhdLgotCQkJCSAgICAgICBCU1NJRFswXSwgcFBta3NhLT5ic3NpZC5zYV9kYXRhLAotCQkJCSAgICAgICBNQUNfQUREUl9MRU4pOwotCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+U3RhQ2ZnLlNhdmVkUE1LW0NhY2hlZElkeF0uCi0JCQkJICAgICAgIFBNS0lEWzBdLCBwUG1rc2EtPnBta2lkLCAxNik7Ci0JCX0KLQotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoInJ0X2lvY3RsX3Npd3Bta3NhIC0gSVdfUE1LU0FfQUREXG4iKSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgicnRfaW9jdGxfc2l3cG1rc2EgLSBVbmtub3duIENvbW1hbmQhXG4iKSk7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgcnRfaW9jdGxfc2l3cmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCSAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkID0gTlVMTDsKLQl1MzIgcmF0ZSA9IHdycXUtPmJpdHJhdGUudmFsdWUsIGZpeGVkID0gd3JxdS0+Yml0cmF0ZS5maXhlZDsKLQotCUdFVF9QQURfRlJPTV9ORVRfREVWKHBBZCwgZGV2KTsKLQotCS8qY2hlY2sgaWYgdGhlIGludGVyZmFjZSBpcyBkb3duICovCi0JaWYgKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJydF9pb2N0bF9zaXdyYXRlOjpOZXR3b3JrIGlzIGRvd24hXG4iKSk7Ci0JCXJldHVybiAtRU5FVERPV047Ci0JfQotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCSAoInJ0X2lvY3RsX3Npd3JhdGU6OihyYXRlID0gJWQsIGZpeGVkID0gJWQpXG4iLCByYXRlLCBmaXhlZCkpOwotCS8qIHJhdGUgPSAtMSA9PiBhdXRvIHJhdGUKLQkgICByYXRlID0gWCwgZml4ZWQgPSAxID0+IChmaXhlZCByYXRlIFgpCi0JICovCi0JaWYgKHJhdGUgPT0gLTEpIHsKLQkJLypBdXRvIFJhdGUgKi8KLQkJcEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPSBNQ1NfQVVUTzsKLQkJcEFkLT5TdGFDZmcuYkF1dG9UeFJhdGVTd2l0Y2ggPSBUUlVFOwotCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPD0gUEhZXzExRykgfHwKLQkJICAgIChwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkhUUGh5TW9kZS5maWVsZC5NT0RFIDw9Ci0JCSAgICAgTU9ERV9PRkRNKSkKLQkJCVJUTVBTZXREZXNpcmVkUmF0ZXMocEFkLCAtMSk7Ci0KLQkJU2V0Q29tbW9uSFQocEFkKTsKLQl9IGVsc2UgewotCQlpZiAoZml4ZWQpIHsKLQkJCXBBZC0+U3RhQ2ZnLmJBdXRvVHhSYXRlU3dpdGNoID0gRkFMU0U7Ci0JCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPD0gUEhZXzExRykgfHwKLQkJCSAgICAocEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5IVFBoeU1vZGUuZmllbGQuCi0JCQkgICAgIE1PREUgPD0gTU9ERV9PRkRNKSkKLQkJCQlSVE1QU2V0RGVzaXJlZFJhdGVzKHBBZCwgcmF0ZSk7Ci0JCQllbHNlIHsKLQkJCQlwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9Ci0JCQkJICAgIE1DU19BVVRPOwotCQkJCVNldENvbW1vbkhUKHBBZCk7Ci0JCQl9Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCJydF9pb2N0bF9zaXdyYXRlOjooSHRNY3M9JWQpXG4iLAotCQkJCSAgcEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC4KLQkJCQkgIE1DUykpOwotCQl9IGVsc2UgewotCQkJLyogVE9ETzogcmF0ZSA9IFgsIGZpeGVkID0gMCA9PiAocmF0ZXMgPD0gWCkgKi8KLQkJCXJldHVybiAtRU9QTk9UU1VQUDsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgcnRfaW9jdGxfZ2l3cmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCSAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkID0gTlVMTDsKLQlpbnQgcmF0ZV9pbmRleCA9IDAsIHJhdGVfY291bnQgPSAwOwotCUhUVFJBTlNNSVRfU0VUVElORyBodF9zZXR0aW5nOwotLyogUmVtb3ZlIHRvIGdsb2JhbCB2YXJpYWJsZQotICAgIF9fczMyIHJhbGlua3JhdGVbXSA9Ci0JezIsICA0LCAgIDExLCAgMjIsIC8vIENDSwotCTEyLCAxOCwgICAyNCwgIDM2LCA0OCwgNzIsIDk2LCAxMDgsIC8vIE9GRE0KLQkxMywgMjYsICAgMzksICA1MiwgIDc4LCAxMDQsIDExNywgMTMwLCAyNiwgIDUyLCAgNzgsIDEwNCwgMTU2LCAyMDgsIDIzNCwgMjYwLCAvLyAyME1IeiwgODAwbnMgR0ksIE1DUzogMCB+IDE1Ci0JMzksIDc4LCAgMTE3LCAxNTYsIDIzNCwgMzEyLCAzNTEsIDM5MCwJCQkJCQkJCQkJICAvLyAyME1IeiwgODAwbnMgR0ksIE1DUzogMTYgfiAyMwotCTI3LCA1NCwgICA4MSwgMTA4LCAxNjIsIDIxNiwgMjQzLCAyNzAsIDU0LCAxMDgsIDE2MiwgMjE2LCAzMjQsIDQzMiwgNDg2LCA1NDAsIC8vIDQwTUh6LCA4MDBucyBHSSwgTUNTOiAwIH4gMTUKLQk4MSwgMTYyLCAyNDMsIDMyNCwgNDg2LCA2NDgsIDcyOSwgODEwLAkJCQkJCQkJCQkgIC8vIDQwTUh6LCA4MDBucyBHSSwgTUNTOiAxNiB+IDIzCi0JMTQsIDI5LCAgIDQzLCAgNTcsICA4NywgMTE1LCAxMzAsIDE0NCwgMjksIDU5LCAgIDg3LCAxMTUsIDE3MywgMjMwLCAyNjAsIDI4OCwgLy8gMjBNSHosIDQwMG5zIEdJLCBNQ1M6IDAgfiAxNQotCTQzLCA4NywgIDEzMCwgMTczLCAyNjAsIDMxNywgMzkwLCA0MzMsCQkJCQkJCQkJCSAgLy8gMjBNSHosIDQwMG5zIEdJLCBNQ1M6IDE2IH4gMjMKLQkzMCwgNjAsICAgOTAsIDEyMCwgMTgwLCAyNDAsIDI3MCwgMzAwLCA2MCwgMTIwLCAxODAsIDI0MCwgMzYwLCA0ODAsIDU0MCwgNjAwLCAvLyA0ME1IeiwgNDAwbnMgR0ksIE1DUzogMCB+IDE1Ci0JOTAsIDE4MCwgMjcwLCAzNjAsIDU0MCwgNzIwLCA4MTAsIDkwMH07CQkJCQkJCQkJCSAgLy8gNDBNSHosIDQwMG5zIEdJLCBNQ1M6IDE2IH4gMjMKLSovCi0JR0VUX1BBRF9GUk9NX05FVF9ERVYocEFkLCBkZXYpOwotCi0JcmF0ZV9jb3VudCA9IEFSUkFZX1NJWkUocmFsaW5rcmF0ZSk7Ci0JLypjaGVjayBpZiB0aGUgaW50ZXJmYWNlIGlzIGRvd24gKi8KLQlpZiAoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKSkgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJTkZPOjpOZXR3b3JrIGlzIGRvd24hXG4iKSk7Ci0JCXJldHVybiAtRU5FVERPV047Ci0JfQotCi0JaWYgKChwQWQtPlN0YUNmZy5iQXV0b1R4UmF0ZVN3aXRjaCA9PSBGQUxTRSkgJiYKLQkgICAgKElORlJBX09OKHBBZCkpICYmCi0JICAgICgocEFkLT5Db21tb25DZmcuUGh5TW9kZSA8PSBQSFlfMTFHKQotCSAgICAgfHwgKHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uSFRQaHlNb2RlLmZpZWxkLk1PREUgPD0KLQkJIE1PREVfT0ZETSkpKQotCQlodF9zZXR0aW5nLndvcmQgPSBwQWQtPlN0YUNmZy5IVFBoeU1vZGUud29yZDsKLQllbHNlCi0JCWh0X3NldHRpbmcud29yZCA9Ci0JCSAgICBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkhUUGh5TW9kZS53b3JkOwotCi0JaWYgKGh0X3NldHRpbmcuZmllbGQuTU9ERSA+PSBNT0RFX0hUTUlYKSB7Ci0vKiAgICAgIHJhdGVfaW5kZXggPSAxMiArICgodTgpaHRfc2V0dGluZy5maWVsZC5CVyAqMTYpICsgKCh1OClodF9zZXR0aW5nLmZpZWxkLlNob3J0R0kgKjMyKSArICgodTgpaHRfc2V0dGluZy5maWVsZC5NQ1MpOyAqLwotCQlyYXRlX2luZGV4ID0KLQkJICAgIDEyICsgKCh1OClodF9zZXR0aW5nLmZpZWxkLkJXICogMjQpICsKLQkJICAgICgodTgpaHRfc2V0dGluZy5maWVsZC5TaG9ydEdJICogNDgpICsKLQkJICAgICgodTgpaHRfc2V0dGluZy5maWVsZC5NQ1MpOwotCX0gZWxzZSBpZiAoaHRfc2V0dGluZy5maWVsZC5NT0RFID09IE1PREVfT0ZETSkKLQkJcmF0ZV9pbmRleCA9ICh1OCkoaHRfc2V0dGluZy5maWVsZC5NQ1MpICsgNDsKLQllbHNlIGlmIChodF9zZXR0aW5nLmZpZWxkLk1PREUgPT0gTU9ERV9DQ0spCi0JCXJhdGVfaW5kZXggPSAodTgpKGh0X3NldHRpbmcuZmllbGQuTUNTKTsKLQotCWlmIChyYXRlX2luZGV4IDwgMCkKLQkJcmF0ZV9pbmRleCA9IDA7Ci0KLQlpZiAocmF0ZV9pbmRleCA+PSByYXRlX2NvdW50KQotCQlyYXRlX2luZGV4ID0gcmF0ZV9jb3VudCAtIDE7Ci0KLQl3cnF1LT5iaXRyYXRlLnZhbHVlID0gcmFsaW5rcmF0ZVtyYXRlX2luZGV4XSAqIDUwMDAwMDsKLQl3cnF1LT5iaXRyYXRlLmRpc2FibGVkID0gMDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3QgaXdfaGFuZGxlciBydF9oYW5kbGVyW10gPSB7Ci0JKGl3X2hhbmRsZXIpIE5VTEwsCS8qIFNJT0NTSVdDT01NSVQgKi8KLQkoaXdfaGFuZGxlcikgcnRfaW9jdGxfZ2l3bmFtZSwJLyogU0lPQ0dJV05BTUUgICAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkvKiBTSU9DU0lXTldJRCAgICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCS8qIFNJT0NHSVdOV0lEICAgKi8KLQkoaXdfaGFuZGxlcikgcnRfaW9jdGxfc2l3ZnJlcSwJLyogU0lPQ1NJV0ZSRVEgICAqLwotCShpd19oYW5kbGVyKSBydF9pb2N0bF9naXdmcmVxLAkvKiBTSU9DR0lXRlJFUSAgICovCi0JKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX3Npd21vZGUsCS8qIFNJT0NTSVdNT0RFICAgKi8KLQkoaXdfaGFuZGxlcikgcnRfaW9jdGxfZ2l3bW9kZSwJLyogU0lPQ0dJV01PREUgICAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkvKiBTSU9DU0lXU0VOUyAgICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCS8qIFNJT0NHSVdTRU5TICAgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCAvKiBub3QgdXNlZCAqLyAsCS8qIFNJT0NTSVdSQU5HRSAgKi8KLQkoaXdfaGFuZGxlcikgcnRfaW9jdGxfZ2l3cmFuZ2UsCS8qIFNJT0NHSVdSQU5HRSAgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCAvKiBub3QgdXNlZCAqLyAsCS8qIFNJT0NTSVdQUklWICAgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCAvKiBrZXJuZWwgY29kZSAqLyAsCS8qIFNJT0NHSVdQUklWICAgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCAvKiBub3QgdXNlZCAqLyAsCS8qIFNJT0NTSVdTVEFUUyAgKi8KLQkoaXdfaGFuZGxlcikgcnQyOHh4X2dldF93aXJlbGVzc19zdGF0cyAvKiBrZXJuZWwgY29kZSAqLyAsCS8qIFNJT0NHSVdTVEFUUyAgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ1NJV1NQWSAgICAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkvKiBTSU9DR0lXU1BZICAgICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCS8qIFNJT0NTSVdUSFJTUFkgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ0dJV1RIUlNQWSAqLwotCShpd19oYW5kbGVyKSBydF9pb2N0bF9zaXdhcCwJLyogU0lPQ1NJV0FQICAgICAqLwotCShpd19oYW5kbGVyKSBydF9pb2N0bF9naXdhcCwJLyogU0lPQ0dJV0FQICAgICAqLwotCShpd19oYW5kbGVyKSBydF9pb2N0bF9zaXdtbG1lLAkvKiBTSU9DU0lXTUxNRSAgICovCi0JKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX2l3YXBsaXN0LAkvKiBTSU9DR0lXQVBMSVNUICovCi0JKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX3Npd3NjYW4sCS8qIFNJT0NTSVdTQ0FOICAgKi8KLQkoaXdfaGFuZGxlcikgcnRfaW9jdGxfZ2l3c2NhbiwJLyogU0lPQ0dJV1NDQU4gICAqLwotCShpd19oYW5kbGVyKSBydF9pb2N0bF9zaXdlc3NpZCwJLyogU0lPQ1NJV0VTU0lEICAqLwotCShpd19oYW5kbGVyKSBydF9pb2N0bF9naXdlc3NpZCwJLyogU0lPQ0dJV0VTU0lEICAqLwotCShpd19oYW5kbGVyKSBydF9pb2N0bF9zaXduaWNrbiwJLyogU0lPQ1NJV05JQ0tOICAqLwotCShpd19oYW5kbGVyKSBydF9pb2N0bF9naXduaWNrbiwJLyogU0lPQ0dJV05JQ0tOICAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkvKiAtLSBob2xlIC0tICAgICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCS8qIC0tIGhvbGUgLS0gICAgKi8KLQkoaXdfaGFuZGxlcikgcnRfaW9jdGxfc2l3cmF0ZSwJLyogU0lPQ1NJV1JBVEUgICAqLwotCShpd19oYW5kbGVyKSBydF9pb2N0bF9naXdyYXRlLAkvKiBTSU9DR0lXUkFURSAgICovCi0JKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX3Npd3J0cywJLyogU0lPQ1NJV1JUUyAgICAqLwotCShpd19oYW5kbGVyKSBydF9pb2N0bF9naXdydHMsCS8qIFNJT0NHSVdSVFMgICAgKi8KLQkoaXdfaGFuZGxlcikgcnRfaW9jdGxfc2l3ZnJhZywJLyogU0lPQ1NJV0ZSQUcgICAqLwotCShpd19oYW5kbGVyKSBydF9pb2N0bF9naXdmcmFnLAkvKiBTSU9DR0lXRlJBRyAgICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCS8qIFNJT0NTSVdUWFBPVyAgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ0dJV1RYUE9XICAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkvKiBTSU9DU0lXUkVUUlkgICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCS8qIFNJT0NHSVdSRVRSWSAgKi8KLQkoaXdfaGFuZGxlcikgcnRfaW9jdGxfc2l3ZW5jb2RlLAkvKiBTSU9DU0lXRU5DT0RFICovCi0JKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX2dpd2VuY29kZSwJLyogU0lPQ0dJV0VOQ09ERSAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkvKiBTSU9DU0lXUE9XRVIgICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCS8qIFNJT0NHSVdQT1dFUiAgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJLyogLS0gaG9sZSAtLSAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkvKiAtLSBob2xlIC0tICovCi0JKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX3Npd2dlbmllLAkvKiBTSU9DU0lXR0VOSUUgICovCi0JKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX2dpd2dlbmllLAkvKiBTSU9DR0lXR0VOSUUgICovCi0JKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX3Npd2F1dGgsCS8qIFNJT0NTSVdBVVRIICAgKi8KLQkoaXdfaGFuZGxlcikgcnRfaW9jdGxfZ2l3YXV0aCwJLyogU0lPQ0dJV0FVVEggICAqLwotCShpd19oYW5kbGVyKSBydF9pb2N0bF9zaXdlbmNvZGVleHQsCS8qIFNJT0NTSVdFTkNPREVFWFQgKi8KLQkoaXdfaGFuZGxlcikgcnRfaW9jdGxfZ2l3ZW5jb2RlZXh0LAkvKiBTSU9DR0lXRU5DT0RFRVhUICovCi0JKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX3Npd3Bta3NhLAkvKiBTSU9DU0lXUE1LU0EgICovCi19OwotCi1jb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgcnQyOHh4X2l3X2hhbmRsZXJfZGVmID0gewotCS5zdGFuZGFyZCA9IChpd19oYW5kbGVyICopIHJ0X2hhbmRsZXIsCi0JLm51bV9zdGFuZGFyZCA9IHNpemVvZihydF9oYW5kbGVyKSAvIHNpemVvZihpd19oYW5kbGVyKSwKLSNpZiBJV19IQU5ETEVSX1ZFUlNJT04gPj0gNwotCS5nZXRfd2lyZWxlc3Nfc3RhdHMgPSBydDI4eHhfZ2V0X3dpcmVsZXNzX3N0YXRzLAotI2VuZGlmCi19OwotCi1pbnQgcnQyOHh4X3N0YV9pb2N0bChJTiBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwKLQkJICAgICBJTiBPVVQgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKLXsKLQlzdHJ1Y3Qgb3NfY29va2llICpwT2JqOwotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCA9IE5VTEw7Ci0Jc3RydWN0IGl3cmVxICp3cnEgPSAoc3RydWN0IGl3cmVxICopcnE7Ci0JQk9PTEVBTiBTdGF0ZU1hY2hpbmVUb3VjaGVkID0gRkFMU0U7Ci0JaW50IFN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7Ci0KLQlHRVRfUEFEX0ZST01fTkVUX0RFVihwQWQsIG5ldF9kZXYpOwotCi0JcE9iaiA9IChzdHJ1Y3Qgb3NfY29va2llICopcEFkLT5PU19Db29raWU7Ci0KLQkvKmNoZWNrIGlmIHRoZSBpbnRlcmZhY2UgaXMgZG93biAqLwotCWlmICghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKSB7Ci0JCXsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklORk86Ok5ldHdvcmsgaXMgZG93biFcbiIpKTsKLQkJCXJldHVybiAtRU5FVERPV047Ci0JCX0KLQl9Ci0KLQl7CQkJLyogZGV0ZXJtaW5lIHRoaXMgaW9jdGwgY29tbWFuZCBpcyBjb21pbmcgZnJvbSB3aGljaCBpbnRlcmZhY2UuICovCi0JCXBPYmotPmlvY3RsX2lmX3R5cGUgPSBJTlRfTUFJTjsKLQkJcE9iai0+aW9jdGxfaWYgPSBNQUlOX01CU1NJRDsKLQl9Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU0lPQ0dJRkhXQUREUjoKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSU9DVEw6OlNJT0NHSUZIV0FERFJcbiIpKTsKLQkJbWVtY3B5KHdycS0+dS5uYW1lLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBFVEhfQUxFTik7Ci0JCWJyZWFrOwotCWNhc2UgU0lPQ0dJV05BTUU6Ci0JCXsKLQkJCWNoYXIgKm5hbWUgPSAmd3JxLT51Lm5hbWVbMF07Ci0JCQlydF9pb2N0bF9naXduYW1lKG5ldF9kZXYsIE5VTEwsIG5hbWUsIE5VTEwpOwotCQkJYnJlYWs7Ci0JCX0KLQljYXNlIFNJT0NHSVdFU1NJRDoJLypHZXQgRVNTSUQgKi8KLQkJewotCQkJc3RydWN0IGl3X3BvaW50ICplc3NpZCA9ICZ3cnEtPnUuZXNzaWQ7Ci0JCQlydF9pb2N0bF9naXdlc3NpZChuZXRfZGV2LCBOVUxMLCBlc3NpZCwgZXNzaWQtPnBvaW50ZXIpOwotCQkJYnJlYWs7Ci0JCX0KLQljYXNlIFNJT0NTSVdFU1NJRDoJLypTZXQgRVNTSUQgKi8KLQkJewotCQkJc3RydWN0IGl3X3BvaW50ICplc3NpZCA9ICZ3cnEtPnUuZXNzaWQ7Ci0JCQlydF9pb2N0bF9zaXdlc3NpZChuZXRfZGV2LCBOVUxMLCBlc3NpZCwgZXNzaWQtPnBvaW50ZXIpOwotCQkJYnJlYWs7Ci0JCX0KLQljYXNlIFNJT0NTSVdOV0lEOgkvKiBzZXQgbmV0d29yayBpZCAodGhlIGNlbGwpICovCi0JY2FzZSBTSU9DR0lXTldJRDoJLyogZ2V0IG5ldHdvcmsgaWQgKi8KLQkJU3RhdHVzID0gLUVPUE5PVFNVUFA7Ci0JCWJyZWFrOwotCWNhc2UgU0lPQ1NJV0ZSRVE6CS8qc2V0IGNoYW5uZWwvZnJlcXVlbmN5IChIeikgKi8KLQkJewotCQkJc3RydWN0IGl3X2ZyZXEgKmZyZXEgPSAmd3JxLT51LmZyZXE7Ci0JCQlydF9pb2N0bF9zaXdmcmVxKG5ldF9kZXYsIE5VTEwsIGZyZXEsIE5VTEwpOwotCQkJYnJlYWs7Ci0JCX0KLQljYXNlIFNJT0NHSVdGUkVROgkvKiBnZXQgY2hhbm5lbC9mcmVxdWVuY3kgKEh6KSAqLwotCQl7Ci0JCQlzdHJ1Y3QgaXdfZnJlcSAqZnJlcSA9ICZ3cnEtPnUuZnJlcTsKLQkJCXJ0X2lvY3RsX2dpd2ZyZXEobmV0X2RldiwgTlVMTCwgZnJlcSwgTlVMTCk7Ci0JCQlicmVhazsKLQkJfQotCWNhc2UgU0lPQ1NJV05JQ0tOOgkvKnNldCBub2RlIG5hbWUvbmlja25hbWUgKi8KLQkJewotCQkJLypzdHJ1Y3QgaXdfcG9pbnQgKmRhdGE9JndycS0+dS5kYXRhOyAqLwotCQkJLypydF9pb2N0bF9zaXduaWNrbihuZXRfZGV2LCBOVUxMLCBkYXRhLCBOVUxMKTsgKi8KLQkJCWJyZWFrOwotCQl9Ci0JY2FzZSBTSU9DR0lXTklDS046CS8qZ2V0IG5vZGUgbmFtZS9uaWNrbmFtZSAqLwotCQl7Ci0JCQlzdHJ1Y3QgaXdfcG9pbnQgKmVycSA9IE5VTEw7Ci0JCQllcnEgPSAmd3JxLT51LmRhdGE7Ci0JCQllcnEtPmxlbmd0aCA9IHN0cmxlbigoY2hhciAqKXBBZC0+bmlja25hbWUpOwotCQkJU3RhdHVzID0KLQkJCSAgICBjb3B5X3RvX3VzZXIoZXJxLT5wb2ludGVyLCBwQWQtPm5pY2tuYW1lLAotCQkJCQkgZXJxLT5sZW5ndGgpOwotCQkJaWYgKFN0YXR1cykKLQkJCQlTdGF0dXMgPSAtRUZBVUxUOwotCQkJYnJlYWs7Ci0JCX0KLQljYXNlIFNJT0NHSVdSQVRFOgkvKmdldCBkZWZhdWx0IGJpdCByYXRlIChicHMpICovCi0JCXJ0X2lvY3RsX2dpd3JhdGUobmV0X2RldiwgTlVMTCwgJndycS0+dSwgTlVMTCk7Ci0JCWJyZWFrOwotCWNhc2UgU0lPQ1NJV1JBVEU6CS8qc2V0IGRlZmF1bHQgYml0IHJhdGUgKGJwcykgKi8KLQkJcnRfaW9jdGxfc2l3cmF0ZShuZXRfZGV2LCBOVUxMLCAmd3JxLT51LCBOVUxMKTsKLQkJYnJlYWs7Ci0JY2FzZSBTSU9DR0lXUlRTOgkvKiBnZXQgUlRTL0NUUyB0aHJlc2hvbGQgKGJ5dGVzKSAqLwotCQl7Ci0JCQlzdHJ1Y3QgaXdfcGFyYW0gKnJ0cyA9ICZ3cnEtPnUucnRzOwotCQkJcnRfaW9jdGxfZ2l3cnRzKG5ldF9kZXYsIE5VTEwsIHJ0cywgTlVMTCk7Ci0JCQlicmVhazsKLQkJfQotCWNhc2UgU0lPQ1NJV1JUUzoJLypzZXQgUlRTL0NUUyB0aHJlc2hvbGQgKGJ5dGVzKSAqLwotCQl7Ci0JCQlzdHJ1Y3QgaXdfcGFyYW0gKnJ0cyA9ICZ3cnEtPnUucnRzOwotCQkJcnRfaW9jdGxfc2l3cnRzKG5ldF9kZXYsIE5VTEwsIHJ0cywgTlVMTCk7Ci0JCQlicmVhazsKLQkJfQotCWNhc2UgU0lPQ0dJV0ZSQUc6CS8qZ2V0IGZyYWdtZW50YXRpb24gdGhyIChieXRlcykgKi8KLQkJewotCQkJc3RydWN0IGl3X3BhcmFtICpmcmFnID0gJndycS0+dS5mcmFnOwotCQkJcnRfaW9jdGxfZ2l3ZnJhZyhuZXRfZGV2LCBOVUxMLCBmcmFnLCBOVUxMKTsKLQkJCWJyZWFrOwotCQl9Ci0JY2FzZSBTSU9DU0lXRlJBRzoJLypzZXQgZnJhZ21lbnRhdGlvbiB0aHIgKGJ5dGVzKSAqLwotCQl7Ci0JCQlzdHJ1Y3QgaXdfcGFyYW0gKmZyYWcgPSAmd3JxLT51LmZyYWc7Ci0JCQlydF9pb2N0bF9zaXdmcmFnKG5ldF9kZXYsIE5VTEwsIGZyYWcsIE5VTEwpOwotCQkJYnJlYWs7Ci0JCX0KLQljYXNlIFNJT0NHSVdFTkNPREU6CS8qZ2V0IGVuY29kaW5nIHRva2VuICYgbW9kZSAqLwotCQl7Ci0JCQlzdHJ1Y3QgaXdfcG9pbnQgKmVycSA9ICZ3cnEtPnUuZW5jb2Rpbmc7Ci0JCQlpZiAoZXJxKQotCQkJCXJ0X2lvY3RsX2dpd2VuY29kZShuZXRfZGV2LCBOVUxMLCBlcnEsCi0JCQkJCQkgICBlcnEtPnBvaW50ZXIpOwotCQkJYnJlYWs7Ci0JCX0KLQljYXNlIFNJT0NTSVdFTkNPREU6CS8qc2V0IGVuY29kaW5nIHRva2VuICYgbW9kZSAqLwotCQl7Ci0JCQlzdHJ1Y3QgaXdfcG9pbnQgKmVycSA9ICZ3cnEtPnUuZW5jb2Rpbmc7Ci0JCQlpZiAoZXJxKQotCQkJCXJ0X2lvY3RsX3Npd2VuY29kZShuZXRfZGV2LCBOVUxMLCBlcnEsCi0JCQkJCQkgICBlcnEtPnBvaW50ZXIpOwotCQkJYnJlYWs7Ci0JCX0KLQljYXNlIFNJT0NHSVdBUDoJLypnZXQgYWNjZXNzIHBvaW50IE1BQyBhZGRyZXNzZXMgKi8KLQkJewotCQkJc3RydWN0IHNvY2thZGRyICphcF9hZGRyID0gJndycS0+dS5hcF9hZGRyOwotCQkJcnRfaW9jdGxfZ2l3YXAobmV0X2RldiwgTlVMTCwgYXBfYWRkciwKLQkJCQkgICAgICAgYXBfYWRkci0+c2FfZGF0YSk7Ci0JCQlicmVhazsKLQkJfQotCWNhc2UgU0lPQ1NJV0FQOgkvKnNldCBhY2Nlc3MgcG9pbnQgTUFDIGFkZHJlc3NlcyAqLwotCQl7Ci0JCQlzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIgPSAmd3JxLT51LmFwX2FkZHI7Ci0JCQlydF9pb2N0bF9zaXdhcChuZXRfZGV2LCBOVUxMLCBhcF9hZGRyLAotCQkJCSAgICAgICBhcF9hZGRyLT5zYV9kYXRhKTsKLQkJCWJyZWFrOwotCQl9Ci0JY2FzZSBTSU9DR0lXTU9ERToJLypnZXQgb3BlcmF0aW9uIG1vZGUgKi8KLQkJewotCQkJX191MzIgKm1vZGUgPSAmd3JxLT51Lm1vZGU7Ci0JCQlydF9pb2N0bF9naXdtb2RlKG5ldF9kZXYsIE5VTEwsIG1vZGUsIE5VTEwpOwotCQkJYnJlYWs7Ci0JCX0KLQljYXNlIFNJT0NTSVdNT0RFOgkvKnNldCBvcGVyYXRpb24gbW9kZSAqLwotCQl7Ci0JCQlfX3UzMiAqbW9kZSA9ICZ3cnEtPnUubW9kZTsKLQkJCXJ0X2lvY3RsX3Npd21vZGUobmV0X2RldiwgTlVMTCwgbW9kZSwgTlVMTCk7Ci0JCQlicmVhazsKLQkJfQotCWNhc2UgU0lPQ0dJV1NFTlM6CS8qZ2V0IHNlbnNpdGl2aXR5IChkQm0pICovCi0JY2FzZSBTSU9DU0lXU0VOUzoJLypzZXQgc2Vuc2l0aXZpdHkgKGRCbSkgKi8KLQljYXNlIFNJT0NHSVdQT1dFUjoJLypnZXQgUG93ZXIgTWFuYWdlbWVudCBzZXR0aW5ncyAqLwotCWNhc2UgU0lPQ1NJV1BPV0VSOgkvKnNldCBQb3dlciBNYW5hZ2VtZW50IHNldHRpbmdzICovCi0JY2FzZSBTSU9DR0lXVFhQT1c6CS8qZ2V0IHRyYW5zbWl0IHBvd2VyIChkQm0pICovCi0JY2FzZSBTSU9DU0lXVFhQT1c6CS8qc2V0IHRyYW5zbWl0IHBvd2VyIChkQm0pICovCi0JY2FzZSBTSU9DR0lXUkFOR0U6CS8qR2V0IHJhbmdlIG9mIHBhcmFtZXRlcnMgKi8KLQljYXNlIFNJT0NHSVdSRVRSWToJLypnZXQgcmV0cnkgbGltaXRzIGFuZCBsaWZldGltZSAqLwotCWNhc2UgU0lPQ1NJV1JFVFJZOgkvKnNldCByZXRyeSBsaW1pdHMgYW5kIGxpZmV0aW1lICovCi0JY2FzZSBSVF9QUklWX0lPQ1RMOgotCWNhc2UgUlRfUFJJVl9JT0NUTF9FWFQ6Ci0JY2FzZSBSVFBSSVZfSU9DVExfU0VUOgotCWNhc2UgUlRQUklWX0lPQ1RMX0dTSVRFU1VSVkVZOgotCWNhc2UgU0lPQ0dJV1BSSVY6Ci0JCVN0YXR1cyA9IC1FT1BOT1RTVVBQOwotCQlicmVhazsKLQljYXNlIFNJT0NFVEhUT09MOgotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCSAoIklPQ1RMOjp1bmtub3duIElPQ1RMJ3MgY21kID0gMHglMDh4XG4iLCBjbWQpKTsKLQkJU3RhdHVzID0gLUVPUE5PVFNVUFA7Ci0JCWJyZWFrOwotCX0KLQotCWlmIChTdGF0ZU1hY2hpbmVUb3VjaGVkKQkvKiBVcHBlciBsYXllciBzZW50IGEgTUxNRS1yZWxhdGVkIG9wZXJhdGlvbnMgKi8KLQkJUlRNUF9NTE1FX0hBTkRMRVIocEFkKTsKLQotCXJldHVybiBTdGF0dXM7Ci19Ci0KLS8qCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBEZXNjcmlwdGlvbjoKLSAgICAgICAgU2V0IFNTSUQKLSAgICBSZXR1cm46Ci0gICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLWludCBTZXRfU1NJRF9Qcm9jKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZGFwdGVyLCBjaGFyICphcmcpCi17Ci0Jc3RydWN0IHJ0X25kaXNfODAyXzExX3NzaWQgU3NpZCwgKnBTc2lkID0gTlVMTDsKLQlCT09MRUFOIFN0YXRlTWFjaGluZVRvdWNoZWQgPSBGQUxTRTsKLQlpbnQgc3VjY2VzcyA9IFRSVUU7Ci0KLQlpZiAoc3RybGVuKGFyZykgPD0gTUFYX0xFTl9PRl9TU0lEKSB7Ci0JCU5kaXNaZXJvTWVtb3J5KCZTc2lkLCBzaXplb2Yoc3RydWN0IHJ0X25kaXNfODAyXzExX3NzaWQpKTsKLQkJaWYgKHN0cmxlbihhcmcpICE9IDApIHsKLQkJCU5kaXNNb3ZlTWVtb3J5KFNzaWQuU3NpZCwgYXJnLCBzdHJsZW4oYXJnKSk7Ci0JCQlTc2lkLlNzaWRMZW5ndGggPSBzdHJsZW4oYXJnKTsKLQkJfSBlbHNlCQkvKkFOWSBzc2lkICovCi0JCXsKLQkJCVNzaWQuU3NpZExlbmd0aCA9IDA7Ci0JCQltZW1jcHkoU3NpZC5Tc2lkLCAiIiwgMCk7Ci0JCQlwQWRhcHRlci0+U3RhQ2ZnLkJzc1R5cGUgPSBCU1NfSU5GUkE7Ci0JCQlwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlT3BlbjsKLQkJCXBBZGFwdGVyLT5TdGFDZmcuV2VwU3RhdHVzID0KLQkJCSAgICBOZGlzODAyXzExRW5jcnlwdGlvbkRpc2FibGVkOwotCQl9Ci0JCXBTc2lkID0gJlNzaWQ7Ci0KLQkJaWYgKHBBZGFwdGVyLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSAhPSBDTlRMX0lETEUpIHsKLQkJCVJUTVBfTUxNRV9SRVNFVF9TVEFURV9NQUNISU5FKHBBZGFwdGVyKTsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAoIk1MTUUgYnVzeSwgcmVzZXQgTUxNRSBzdGF0ZSBtYWNoaW5lIVxuIikpOwotCQl9Ci0KLQkJaWYgKChwQWRhcHRlci0+U3RhQ2ZnLldwYVBhc3NQaHJhc2VMZW4gPj0gOCkgJiYKLQkJICAgIChwQWRhcHRlci0+U3RhQ2ZnLldwYVBhc3NQaHJhc2VMZW4gPD0gNjQpKSB7Ci0JCQljaGFyIHBhc3NwaHJhc2Vfc3RyWzY1XSA9IHsgMCB9OwotCQkJdTgga2V5TWF0ZXJpYWxbNDBdOwotCi0JCQlSVE1QTW92ZU1lbW9yeShwYXNzcGhyYXNlX3N0ciwKLQkJCQkgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5XcGFQYXNzUGhyYXNlLAotCQkJCSAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLldwYVBhc3NQaHJhc2VMZW4pOwotCQkJUlRNUFplcm9NZW1vcnkocEFkYXB0ZXItPlN0YUNmZy5QTUssIDMyKTsKLQkJCWlmIChwQWRhcHRlci0+U3RhQ2ZnLldwYVBhc3NQaHJhc2VMZW4gPT0gNjQpIHsKLQkJCQlBdG9IKChjaGFyICopcEFkYXB0ZXItPlN0YUNmZy5XcGFQYXNzUGhyYXNlLAotCQkJCSAgICAgcEFkYXB0ZXItPlN0YUNmZy5QTUssIDMyKTsKLQkJCX0gZWxzZSB7Ci0JCQkJUGFzc3dvcmRIYXNoKChjaGFyICopcEFkYXB0ZXItPlN0YUNmZy4KLQkJCQkJICAgICBXcGFQYXNzUGhyYXNlLCBTc2lkLlNzaWQsCi0JCQkJCSAgICAgU3NpZC5Tc2lkTGVuZ3RoLCBrZXlNYXRlcmlhbCk7Ci0JCQkJTmRpc01vdmVNZW1vcnkocEFkYXB0ZXItPlN0YUNmZy5QTUssCi0JCQkJCSAgICAgICBrZXlNYXRlcmlhbCwgMzIpOwotCQkJfQotCQl9Ci0KLQkJcEFkYXB0ZXItPk1sbWVBdXguQ3VyclJlcUlzRnJvbU5kaXMgPSBUUlVFOwotCQlwQWRhcHRlci0+U3RhQ2ZnLmJTY2FuUmVxSXNGcm9tV2ViVUkgPSBGQUxTRTsKLQkJcEFkYXB0ZXItPmJDb25maWdDaGFuZ2VkID0gVFJVRTsKLQotCQlNbG1lRW5xdWV1ZShwQWRhcHRlciwKLQkJCSAgICBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwKLQkJCSAgICBPSURfODAyXzExX1NTSUQsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBydF9uZGlzXzgwMl8xMV9zc2lkKSwgKHZvaWQgKikgcFNzaWQpOwotCi0JCVN0YXRlTWFjaGluZVRvdWNoZWQgPSBUUlVFOwotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIlNldF9TU0lEX1Byb2M6OihMZW49JWQsU3NpZD0lcylcbiIsIFNzaWQuU3NpZExlbmd0aCwKLQkJCSAgU3NpZC5Tc2lkKSk7Ci0JfSBlbHNlCi0JCXN1Y2Nlc3MgPSBGQUxTRTsKLQotCWlmIChTdGF0ZU1hY2hpbmVUb3VjaGVkKQkvKiBVcHBlciBsYXllciBzZW50IGEgTUxNRS1yZWxhdGVkIG9wZXJhdGlvbnMgKi8KLQkJUlRNUF9NTE1FX0hBTkRMRVIocEFkYXB0ZXIpOwotCi0JcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLS8qCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBEZXNjcmlwdGlvbjoKLSAgICAgICAgU2V0IE5ldHdvcmsgVHlwZShJbmZyYXN0cnVjdHVyZS9BZGhvYyBtb2RlKQotICAgIFJldHVybjoKLSAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotaW50IFNldF9OZXR3b3JrVHlwZV9Qcm9jKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZGFwdGVyLCBjaGFyICphcmcpCi17Ci0JdTMyIFZhbHVlID0gMDsKLQotCWlmIChzdHJjbXAoYXJnLCAiQWRob2MiKSA9PSAwKSB7Ci0JCWlmIChwQWRhcHRlci0+U3RhQ2ZnLkJzc1R5cGUgIT0gQlNTX0FESE9DKSB7Ci0JCQkvKiBDb25maWcgaGFzIGNoYW5nZWQgKi8KLQkJCXBBZGFwdGVyLT5iQ29uZmlnQ2hhbmdlZCA9IFRSVUU7Ci0JCQlpZiAoTU9OSVRPUl9PTihwQWRhcHRlcikpIHsKLQkJCQlSVE1QX0lPX1dSSVRFMzIocEFkYXB0ZXIsIFJYX0ZJTFRSX0NGRywKLQkJCQkJCVNUQU5PUk1BTCk7Ci0JCQkJUlRNUF9JT19SRUFEMzIocEFkYXB0ZXIsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKLQkJCQlWYWx1ZSAmPSAofjB4ODApOwotCQkJCVJUTVBfSU9fV1JJVEUzMihwQWRhcHRlciwgTUFDX1NZU19DVFJMLCBWYWx1ZSk7Ci0JCQkJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWRhcHRlciwKLQkJCQkJCSAgICBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCk7Ci0JCQkJcEFkYXB0ZXItPlN0YUNmZy5iQXV0b1JlY29ubmVjdCA9IFRSVUU7Ci0JCQkJTGlua0Rvd24ocEFkYXB0ZXIsIEZBTFNFKTsKLQkJCX0KLQkJCWlmIChJTkZSQV9PTihwQWRhcHRlcikpIHsKLQkJCQkvKkJPT0xFQU4gQ2FuY2VsbGVkOyAqLwotCQkJCS8qIFNldCB0aGUgQXV0b1JlY29ubmVjdFNzaWQgdG8gcHJldmVudCBpdCBmcm9tIHJlY29ubmVjdGluZyB0byB0aGUgb2xkIFNTSUQgKi8KLQkJCQkvKiBTaW5jZSBjYWxsaW5nIHRoaXMgaW5kaWNhdGVzIHVzZXJzIGRvbid0IHdhbnQgdG8gY29ubmVjdCB0byB0aGF0IFNTSUQgYW55bW9yZS4gKi8KLQkJCQlwQWRhcHRlci0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZExlbiA9IDMyOwotCQkJCU5kaXNaZXJvTWVtb3J5KHBBZGFwdGVyLT5NbG1lQXV4LgotCQkJCQkgICAgICAgQXV0b1JlY29ubmVjdFNzaWQsCi0JCQkJCSAgICAgICBwQWRhcHRlci0+TWxtZUF1eC4KLQkJCQkJICAgICAgIEF1dG9SZWNvbm5lY3RTc2lkTGVuKTsKLQotCQkJCUxpbmtEb3duKHBBZGFwdGVyLCBGQUxTRSk7Ci0KLQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkJICgiTkRJU19TVEFUVVNfTUVESUFfRElTQ09OTkVDVCBFdmVudCBCQiFcbiIpKTsKLQkJCX0KLQkJfQotCQlwQWRhcHRlci0+U3RhQ2ZnLkJzc1R5cGUgPSBCU1NfQURIT0M7Ci0JCXBBZGFwdGVyLT5uZXRfZGV2LT50eXBlID0gcEFkYXB0ZXItPlN0YUNmZy5PcmlEZXZUeXBlOwotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIj09PT5TZXRfTmV0d29ya1R5cGVfUHJvYzo6KEFELUhPQylcbiIpKTsKLQl9IGVsc2UgaWYgKHN0cmNtcChhcmcsICJJbmZyYSIpID09IDApIHsKLQkJaWYgKHBBZGFwdGVyLT5TdGFDZmcuQnNzVHlwZSAhPSBCU1NfSU5GUkEpIHsKLQkJCS8qIENvbmZpZyBoYXMgY2hhbmdlZCAqLwotCQkJcEFkYXB0ZXItPmJDb25maWdDaGFuZ2VkID0gVFJVRTsKLQkJCWlmIChNT05JVE9SX09OKHBBZGFwdGVyKSkgewotCQkJCVJUTVBfSU9fV1JJVEUzMihwQWRhcHRlciwgUlhfRklMVFJfQ0ZHLAotCQkJCQkJU1RBTk9STUFMKTsKLQkJCQlSVE1QX0lPX1JFQUQzMihwQWRhcHRlciwgTUFDX1NZU19DVFJMLCAmVmFsdWUpOwotCQkJCVZhbHVlICY9ICh+MHg4MCk7Ci0JCQkJUlRNUF9JT19XUklURTMyKHBBZGFwdGVyLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKLQkJCQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZGFwdGVyLAotCQkJCQkJICAgIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKTsKLQkJCQlwQWRhcHRlci0+U3RhQ2ZnLmJBdXRvUmVjb25uZWN0ID0gVFJVRTsKLQkJCQlMaW5rRG93bihwQWRhcHRlciwgRkFMU0UpOwotCQkJfQotCQkJaWYgKEFESE9DX09OKHBBZGFwdGVyKSkgewotCQkJCS8qIFNldCB0aGUgQXV0b1JlY29ubmVjdFNzaWQgdG8gcHJldmVudCBpdCBmcm9tIHJlY29ubmVjdGluZyB0byB0aGUgb2xkIFNTSUQgKi8KLQkJCQkvKiBTaW5jZSBjYWxsaW5nIHRoaXMgaW5kaWNhdGVzIHVzZXJzIGRvbid0IHdhbnQgdG8gY29ubmVjdCB0byB0aGF0IFNTSUQgYW55bW9yZS4gKi8KLQkJCQlwQWRhcHRlci0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZExlbiA9IDMyOwotCQkJCU5kaXNaZXJvTWVtb3J5KHBBZGFwdGVyLT5NbG1lQXV4LgotCQkJCQkgICAgICAgQXV0b1JlY29ubmVjdFNzaWQsCi0JCQkJCSAgICAgICBwQWRhcHRlci0+TWxtZUF1eC4KLQkJCQkJICAgICAgIEF1dG9SZWNvbm5lY3RTc2lkTGVuKTsKLQotCQkJCUxpbmtEb3duKHBBZGFwdGVyLCBGQUxTRSk7Ci0JCQl9Ci0JCX0KLQkJcEFkYXB0ZXItPlN0YUNmZy5Cc3NUeXBlID0gQlNTX0lORlJBOwotCQlwQWRhcHRlci0+bmV0X2Rldi0+dHlwZSA9IHBBZGFwdGVyLT5TdGFDZmcuT3JpRGV2VHlwZTsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCI9PT0+U2V0X05ldHdvcmtUeXBlX1Byb2M6OihJTkZSQSlcbiIpKTsKLQl9IGVsc2UgaWYgKHN0cmNtcChhcmcsICJNb25pdG9yIikgPT0gMCkgewotCQl1OCBiYnBWYWx1ZSA9IDA7Ci0JCUJDTl9USU1FX0NGR19TVFJVQyBjc3I7Ci0JCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkYXB0ZXIsIGZPUF9TVEFUVVNfSU5GUkFfT04pOwotCQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZGFwdGVyLCBmT1BfU1RBVFVTX0FESE9DX09OKTsKLQkJT1BTVEFUVVNfU0VUX0ZMQUcocEFkYXB0ZXIsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKTsKLQkJLyogZGlzYWJsZSBhbGwgcGVyaW9kaWMgc3RhdGUgbWFjaGluZSAqLwotCQlwQWRhcHRlci0+U3RhQ2ZnLmJBdXRvUmVjb25uZWN0ID0gRkFMU0U7Ci0JCS8qIHJlc2V0IGFsbCBtbG1lIHN0YXRlIG1hY2hpbmUgKi8KLQkJUlRNUF9NTE1FX1JFU0VUX1NUQVRFX01BQ0hJTkUocEFkYXB0ZXIpOwotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoImZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEIFxuIikpOwotCQlpZiAocEFkYXB0ZXItPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCA9PSAwKSB7Ci0JCQlpZiAocEFkYXB0ZXItPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUFOX01JWEVEKQotCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPSAzNjsKLQkJCWVsc2UKLQkJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsID0gNjsKLQkJfSBlbHNlCi0JCQlOX0NoYW5uZWxDaGVjayhwQWRhcHRlcik7Ci0KLQkJaWYgKHBBZGFwdGVyLT5Db21tb25DZmcuUGh5TW9kZSA+PSBQSFlfMTFBQkdOX01JWEVEICYmCi0JCSAgICBwQWRhcHRlci0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5CVyA9PSBCV180MCAmJgotCQkgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuRVhUQ0hBID09Ci0JCSAgICBFWFRDSEFfQUJPVkUpIHsKLQkJCS8qIDQwTUh6ICxjb250cm9sIGNoYW5uZWwgYXQgbG93ZXIgKi8KLQkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWRhcHRlciwgQkJQX1I0LAotCQkJCQkJICAgICZiYnBWYWx1ZSk7Ci0JCQliYnBWYWx1ZSAmPSAofjB4MTgpOwotCQkJYmJwVmFsdWUgfD0gMHgxMDsKLQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkYXB0ZXIsIEJCUF9SNCwKLQkJCQkJCSAgICAgYmJwVmFsdWUpOwotCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPSBCV180MDsKLQkJCS8qICBSWCA6IGNvbnRyb2wgY2hhbm5lbCBhdCBsb3dlciAqLwotCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZGFwdGVyLCBCQlBfUjMsCi0JCQkJCQkgICAgJmJicFZhbHVlKTsKLQkJCWJicFZhbHVlICY9ICh+MHgyMCk7Ci0JCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZGFwdGVyLCBCQlBfUjMsCi0JCQkJCQkgICAgIGJicFZhbHVlKTsKLQotCQkJUlRNUF9JT19SRUFEMzIocEFkYXB0ZXIsIFRYX0JBTkRfQ0ZHLCAmVmFsdWUpOwotCQkJVmFsdWUgJj0gMHhmZmZmZmZmZTsKLQkJCVJUTVBfSU9fV1JJVEUzMihwQWRhcHRlciwgVFhfQkFORF9DRkcsIFZhbHVlKTsKLQkJCXBBZGFwdGVyLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPQotCQkJICAgIHBBZGFwdGVyLT5Db21tb25DZmcuQ2hhbm5lbCArIDI7Ci0JCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWRhcHRlciwKLQkJCQkJICBwQWRhcHRlci0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsLAotCQkJCQkgIEZBTFNFKTsKLQkJCUFzaWNMb2NrQ2hhbm5lbChwQWRhcHRlciwKLQkJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCk7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCJCV180MCAsY29udHJvbF9jaGFubmVsKCVkKSwgQ2VudHJhbENoYW5uZWwoJWQpIFxuIiwKLQkJCQkgIHBBZGFwdGVyLT5Db21tb25DZmcuQ2hhbm5lbCwKLQkJCQkgIHBBZGFwdGVyLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwpKTsKLQkJfSBlbHNlIGlmIChwQWRhcHRlci0+Q29tbW9uQ2ZnLlBoeU1vZGUgPj0gUEhZXzExQUJHTl9NSVhFRAotCQkJICAgJiYgcEFkYXB0ZXItPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlcgPT0KLQkJCSAgIEJXXzQwCi0JCQkgICAmJiBwQWRhcHRlci0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC4KLQkJCSAgIEVYVENIQSA9PSBFWFRDSEFfQkVMT1cpIHsKLQkJCS8qIDQwTUh6ICxjb250cm9sIGNoYW5uZWwgYXQgdXBwZXIgKi8KLQkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWRhcHRlciwgQkJQX1I0LAotCQkJCQkJICAgICZiYnBWYWx1ZSk7Ci0JCQliYnBWYWx1ZSAmPSAofjB4MTgpOwotCQkJYmJwVmFsdWUgfD0gMHgxMDsKLQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkYXB0ZXIsIEJCUF9SNCwKLQkJCQkJCSAgICAgYmJwVmFsdWUpOwotCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPSBCV180MDsKLQkJCVJUTVBfSU9fUkVBRDMyKHBBZGFwdGVyLCBUWF9CQU5EX0NGRywgJlZhbHVlKTsKLQkJCVZhbHVlIHw9IDB4MTsKLQkJCVJUTVBfSU9fV1JJVEUzMihwQWRhcHRlciwgVFhfQkFORF9DRkcsIFZhbHVlKTsKLQotCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZGFwdGVyLCBCQlBfUjMsCi0JCQkJCQkgICAgJmJicFZhbHVlKTsKLQkJCWJicFZhbHVlIHw9ICgweDIwKTsKLQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkYXB0ZXIsIEJCUF9SMywKLQkJCQkJCSAgICAgYmJwVmFsdWUpOwotCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCA9Ci0JCQkgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5DaGFubmVsIC0gMjsKLQkJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZGFwdGVyLAotCQkJCQkgIHBBZGFwdGVyLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwsCi0JCQkJCSAgRkFMU0UpOwotCQkJQXNpY0xvY2tDaGFubmVsKHBBZGFwdGVyLAotCQkJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsKTsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAoIkJXXzQwICxjb250cm9sX2NoYW5uZWwoJWQpLCBDZW50cmFsQ2hhbm5lbCglZCkgXG4iLAotCQkJCSAgcEFkYXB0ZXItPkNvbW1vbkNmZy5DaGFubmVsLAotCQkJCSAgcEFkYXB0ZXItPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCkpOwotCQl9IGVsc2UgewotCQkJLyogMjBNSHogKi8KLQkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWRhcHRlciwgQkJQX1I0LAotCQkJCQkJICAgICZiYnBWYWx1ZSk7Ci0JCQliYnBWYWx1ZSAmPSAofjB4MTgpOwotCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWRhcHRlciwgQkJQX1I0LAotCQkJCQkJICAgICBiYnBWYWx1ZSk7Ci0JCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLkJCUEN1cnJlbnRCVyA9IEJXXzIwOwotCQkJQXNpY1N3aXRjaENoYW5uZWwocEFkYXB0ZXIsIHBBZGFwdGVyLT5Db21tb25DZmcuQ2hhbm5lbCwKLQkJCQkJICBGQUxTRSk7Ci0JCQlBc2ljTG9ja0NoYW5uZWwocEFkYXB0ZXIsIHBBZGFwdGVyLT5Db21tb25DZmcuQ2hhbm5lbCk7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCJCV18yMCwgQ2hhbm5lbCglZClcbiIsCi0JCQkJICBwQWRhcHRlci0+Q29tbW9uQ2ZnLkNoYW5uZWwpKTsKLQkJfQotCQkvKiBFbmFibGUgUnggd2l0aCBwcm9taXNjdW91cyByZWNlcHRpb24gKi8KLQkJUlRNUF9JT19XUklURTMyKHBBZGFwdGVyLCBSWF9GSUxUUl9DRkcsIDB4Myk7Ci0JCS8qIEFTSUMgc3VwcG9ydHMgc25pZmZlciBmdW5jdGlvbiB3aXRoIHJlcGxhY2luZyBSU1NJIHdpdGggdGltZXN0YW1wLiAqLwotCQkvKlJUTVBfSU9fUkVBRDMyKHBBZGFwdGVyLCBNQUNfU1lTX0NUUkwsICZWYWx1ZSk7ICovCi0JCS8qVmFsdWUgfD0gKDB4ODApOyAqLwotCQkvKlJUTVBfSU9fV1JJVEUzMihwQWRhcHRlciwgTUFDX1NZU19DVFJMLCBWYWx1ZSk7ICovCi0JCS8qIGRpc2FibGUgc3luYyAqLwotCQlSVE1QX0lPX1JFQUQzMihwQWRhcHRlciwgQkNOX1RJTUVfQ0ZHLCAmY3NyLndvcmQpOwotCQljc3IuZmllbGQuYkJlYWNvbkdlbiA9IDA7Ci0JCWNzci5maWVsZC5iVEJUVEVuYWJsZSA9IDA7Ci0JCWNzci5maWVsZC5Uc2ZTeW5jTW9kZSA9IDA7Ci0JCVJUTVBfSU9fV1JJVEUzMihwQWRhcHRlciwgQkNOX1RJTUVfQ0ZHLCBjc3Iud29yZCk7Ci0KLQkJcEFkYXB0ZXItPlN0YUNmZy5Cc3NUeXBlID0gQlNTX01PTklUT1I7Ci0JCXBBZGFwdGVyLT5uZXRfZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMV9QUklTTTsJLypBUlBIUkRfSUVFRTgwMjExOyAvLyBJRUVFODAyMTEgKi8KLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCI9PT0+U2V0X05ldHdvcmtUeXBlX1Byb2M6OihNT05JVE9SKVxuIikpOwotCX0KLQkvKiBSZXNldCBSYWxpbmsgc3VwcGxpY2FudCB0byBub3QgdXNlLCBpdCB3aWxsIGJlIHNldCB0byBzdGFydCB3aGVuIFVJIHNldCBQTUsga2V5ICovCi0JcEFkYXB0ZXItPlN0YUNmZy5XcGFTdGF0ZSA9IFNTX05PVFVTRTsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCJTZXRfTmV0d29ya1R5cGVfUHJvYzo6KE5ldHdvcmtUeXBlPSVkKVxuIiwKLQkJICBwQWRhcHRlci0+U3RhQ2ZnLkJzc1R5cGUpKTsKLQotCXJldHVybiBUUlVFOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC91c2JfbWFpbl9kZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvdXNiX21haW5fZGV2LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyMmJmNDkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC91c2JfbWFpbl9kZXYuYworKysgL2Rldi9udWxsCkBAIC0xLDkyNyArMCwwIEBACi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFJhbGluayBUZWNoIEluYy4KLSAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKLSAqIEhzaW5jaHUgQ291bnR5IDMwMiwKLSAqIFRhaXdhbiwgUi5PLkMuCi0gKgotICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlICJydF9jb25maWcuaCIKLQotLyogRm9sbG93aW5nIGluZm9ybWF0aW9uIHdpbGwgYmUgc2hvdyB3aGVuIHlvdSBydW4gJ21vZGluZm8nICovCi0vKiBJZiB5b3UgaGF2ZSBhIHNvbHV0aW9uIGZvciB0aGUgYnVnIGluIGN1cnJlbnQgdmVyc2lvbiBvZiBkcml2ZXIsIHBsZWFzZSBlLW1haWwgbWUuICovCi0vKiBPdGhlcndpc2UgcG9zdCB0byB0aGUgZm9ydW0gYXQgcmFsaW5rdGVjaCdzIHdlYiBzaXRlKHd3dy5yYWxpbmt0ZWNoLmNvbSkgYW5kIGxldCBhbGwgdXNlcnMgaGVscCB5b3UuICovCi1NT0RVTEVfQVVUSE9SKCJQYXVsIExpbiA8cGF1bF9saW5AcmFsaW5rdGVjaC5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlJUMjg3MC9SVDMwNzAgV2lyZWxlc3MgTGFuIExpbnV4IERyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotI2lmZGVmIE1PRFVMRV9WRVJTSU9OCi1NT0RVTEVfVkVSU0lPTihTVEFfRFJJVkVSX1ZFUlNJT04pOwotI2VuZGlmCi0KLS8qIG1vZHVsZSB0YWJsZSAqLwotc3RydWN0IHVzYl9kZXZpY2VfaWQgcnR1c2JfdXNiX2lkW10gPSB7Ci0jaWZkZWYgUlQyODcwCi0Je1VTQl9ERVZJQ0UoMHgxNDhGLCAweDI3NzApfSwJLyogUmFsaW5rICovCi0Je1VTQl9ERVZJQ0UoMHgxNDhGLCAweDI4NzApfSwJLyogUmFsaW5rICovCi0Je1VTQl9ERVZJQ0UoMHgwN0I4LCAweDI4NzApfSwJLyogQWJvQ29tICovCi0Je1VTQl9ERVZJQ0UoMHgwN0I4LCAweDI3NzApfSwJLyogQWJvQ29tICovCi0Je1VTQl9ERVZJQ0UoMHgwREY2LCAweDAwMzkpfSwJLyogU2l0ZWNvbSAyNzcwICovCi0Je1VTQl9ERVZJQ0UoMHgwREY2LCAweDAwM0YpfSwJLyogU2l0ZWNvbSAyNzcwICovCi0Je1VTQl9ERVZJQ0UoMHgwODNBLCAweDc1MTIpfSwJLyogQXJjYWR5YW4gMjc3MCAqLwotCXtVU0JfREVWSUNFKDB4MDc4OSwgMHgwMTYyKX0sCS8qIExvZ2l0ZWMgMjg3MCAqLwotCXtVU0JfREVWSUNFKDB4MDc4OSwgMHgwMTYzKX0sCS8qIExvZ2l0ZWMgMjg3MCAqLwotCXtVU0JfREVWSUNFKDB4MDc4OSwgMHgwMTY0KX0sCS8qIExvZ2l0ZWMgMjg3MCAqLwotCXtVU0JfREVWSUNFKDB4MTc3ZiwgMHgwMzAyKX0sCS8qIGxzdXNiICovCi0Je1VTQl9ERVZJQ0UoMHgwQjA1LCAweDE3MzEpfSwJLyogQXN1cyAqLwotCXtVU0JfREVWSUNFKDB4MEIwNSwgMHgxNzMyKX0sCS8qIEFzdXMgKi8KLQl7VVNCX0RFVklDRSgweDBCMDUsIDB4MTc0Mil9LAkvKiBBc3VzICovCi0Je1VTQl9ERVZJQ0UoMHgwREY2LCAweDAwMTcpfSwJLyogU2l0ZWNvbSAqLwotCXtVU0JfREVWSUNFKDB4MERGNiwgMHgwMDJCKX0sCS8qIFNpdGVjb20gKi8KLQl7VVNCX0RFVklDRSgweDBERjYsIDB4MDAyQyl9LAkvKiBTaXRlY29tICovCi0Je1VTQl9ERVZJQ0UoMHgwREY2LCAweDAwMkQpfSwJLyogU2l0ZWNvbSAqLwotCXtVU0JfREVWSUNFKDB4MTRCMiwgMHgzQzA2KX0sCS8qIENvbmNlcHRyb25pYyAqLwotCXtVU0JfREVWSUNFKDB4MTRCMiwgMHgzQzI4KX0sCS8qIENvbmNlcHRyb25pYyAqLwotCXtVU0JfREVWSUNFKDB4MjAxOSwgMHhFRDA2KX0sCS8qIFBsYW5leCBDb21tdW5pY2F0aW9ucywgSW5jLiAqLwotCXtVU0JfREVWSUNFKDB4MDdEMSwgMHgzQzA5KX0sCS8qIEQtTGluayAqLwotCXtVU0JfREVWSUNFKDB4MDdEMSwgMHgzQzExKX0sCS8qIEQtTGluayAqLwotCXtVU0JfREVWSUNFKDB4MTRCMiwgMHgzQzA3KX0sCS8qIEFMICovCi0Je1VTQl9ERVZJQ0UoMHgwNTBELCAweDgwNTMpfSwJLyogQmVsa2luICovCi0Je1VTQl9ERVZJQ0UoMHgwNTBELCAweDgyNUIpfSwJLyogQmVsa2luICovCi0Je1VTQl9ERVZJQ0UoMHgwNTBELCAweDkzNUEpfSwJLyogQmVsa2luIEY2RDQwNTAgdjEgKi8KLQl7VVNCX0RFVklDRSgweDA1MEQsIDB4OTM1Qil9LAkvKiBCZWxraW4gRjZENDA1MCB2MiAqLwotCXtVU0JfREVWSUNFKDB4MTRCMiwgMHgzQzIzKX0sCS8qIEFpcmxpbmsgKi8KLQl7VVNCX0RFVklDRSgweDE0QjIsIDB4M0MyNyl9LAkvKiBBaXJsaW5rICovCi0Je1VTQl9ERVZJQ0UoMHgwN0FBLCAweDAwMkYpfSwJLyogQ29yZWdhICovCi0Je1VTQl9ERVZJQ0UoMHgwN0FBLCAweDAwM0MpfSwJLyogQ29yZWdhICovCi0Je1VTQl9ERVZJQ0UoMHgwN0FBLCAweDAwM0YpfSwJLyogQ29yZWdhICovCi0Je1VTQl9ERVZJQ0UoMHgxMDQ0LCAweDgwMEIpfSwJLyogR2lnYWJ5dGUgKi8KLQl7VVNCX0RFVklDRSgweDE1QTksIDB4MDAwNil9LAkvKiBTcGFya2xhbiAqLwotCXtVU0JfREVWSUNFKDB4MDgzQSwgMHhCNTIyKX0sCS8qIFNNQyAqLwotCXtVU0JfREVWSUNFKDB4MDgzQSwgMHhBNjE4KX0sCS8qIFNNQyAqLwotCXtVU0JfREVWSUNFKDB4MDgzQSwgMHg4NTIyKX0sCS8qIEFyY2FkeWFuICovCi0Je1VTQl9ERVZJQ0UoMHgwODNBLCAweDc1MjIpfSwJLyogQXJjYWR5YW4gKi8KLQl7VVNCX0RFVklDRSgweDBDREUsIDB4MDAyMil9LAkvKiBaQ09NICovCi0Je1VTQl9ERVZJQ0UoMHgwNTg2LCAweDM0MTYpfSwJLyogWnl4ZWwgKi8KLQl7VVNCX0RFVklDRSgweDA1ODYsIDB4MzQxYSl9LAkvKiBaeXhlbCBOV0QtMjcwTiAqLwotCXtVU0JfREVWSUNFKDB4MENERSwgMHgwMDI1KX0sCS8qIFp5eGVsICovCi0Je1VTQl9ERVZJQ0UoMHgxNzQwLCAweDk3MDEpfSwJLyogRW5HZW5pdXMgKi8KLQl7VVNCX0RFVklDRSgweDE3NDAsIDB4OTcwMil9LAkvKiBFbkdlbml1cyAqLwotCXtVU0JfREVWSUNFKDB4MDQ3MSwgMHgyMDBmKX0sCS8qIFBoaWxpcHMgKi8KLQl7VVNCX0RFVklDRSgweDE0QjIsIDB4M0MyNSl9LAkvKiBEcmF5dGVrICovCi0Je1VTQl9ERVZJQ0UoMHgxM0QzLCAweDMyNDcpfSwJLyogQXp1cmVXYXZlICovCi0Je1VTQl9ERVZJQ0UoMHgwODNBLCAweDY2MTgpfSwJLyogQWNjdG9uICovCi0Je1VTQl9ERVZJQ0UoMHgxNWM1LCAweDAwMDgpfSwJLyogQW1pdCAqLwotCXtVU0JfREVWSUNFKDB4MEU2NiwgMHgwMDAxKX0sCS8qIEhhd2tpbmcgKi8KLQl7VVNCX0RFVklDRSgweDBFNjYsIDB4MDAwMyl9LAkvKiBIYXdraW5nICovCi0Je1VTQl9ERVZJQ0UoMHgxMjlCLCAweDE4MjgpfSwJLyogU2llbWVucyAqLwotCXtVU0JfREVWSUNFKDB4MTU3RSwgMHgzMDBFKX0sCS8qIFUtTWVkaWEgKi8KLQl7VVNCX0RFVklDRSgweDA1MGQsIDB4ODA1Yyl9LAotCXtVU0JfREVWSUNFKDB4MDUwZCwgMHg4MTVjKX0sCi0Je1VTQl9ERVZJQ0UoMHgxNDgyLCAweDNDMDkpfSwJLyogQWJvY29tICovCi0Je1VTQl9ERVZJQ0UoMHgxNEIyLCAweDNDMDkpfSwJLyogQWxwaGEgKi8KLQl7VVNCX0RFVklDRSgweDA0RTgsIDB4MjAxOCl9LAkvKiBzYW1zdW5nIGxpbmtzdGljazIgKi8KLQl7VVNCX0RFVklDRSgweDE2OTAsIDB4MDc0MCl9LAkvKiBBc2tleSAqLwotCXtVU0JfREVWSUNFKDB4NUE1NywgMHgwMjgwKX0sCS8qIFppbndlbGwgKi8KLQl7VVNCX0RFVklDRSgweDVBNTcsIDB4MDI4Mil9LAkvKiBaaW53ZWxsICovCi0Je1VTQl9ERVZJQ0UoMHg3MzkyLCAweDc3MTgpfSwKLQl7VVNCX0RFVklDRSgweDczOTIsIDB4NzcxNyl9LAotCXtVU0JfREVWSUNFKDB4MDQxMSwgMHgwMTZmKX0sCS8qIE1lbENvLixJbmMuIFdMSS1VQy1HMzAxTiAqLwotCXtVU0JfREVWSUNFKDB4MTczNywgMHgwMDcwKX0sCS8qIExpbmtzeXMgV1VTQjEwMCAqLwotCXtVU0JfREVWSUNFKDB4MTczNywgMHgwMDcxKX0sCS8qIExpbmtzeXMgV1VTQjYwME4gKi8KLQl7VVNCX0RFVklDRSgweDE3MzcsIDB4MDA3OCl9LAkvKiBMaW5rc3lzIFdVU0IxMDB2MiAqLwotCXtVU0JfREVWSUNFKDB4MDQxMSwgMHgwMGU4KX0sCS8qIEJ1ZmZhbG8gV0xJLVVDLUczMDBOICovCi0Je1VTQl9ERVZJQ0UoMHgwNTBkLCAweDgxNWMpfSwJLyogQmVsa2luIEY1RDgwNTMgKi8KLQl7VVNCX0RFVklDRSgweDEwMEQsIDB4OTAzMSl9LAkvKiBNb3Rvcm9sYSAyNzcwICovCi0jZW5kaWYgLyogUlQyODcwIC8vICovCi0jaWZkZWYgUlQzMDcwCi0Je1VTQl9ERVZJQ0UoMHgxNDhGLCAweDMwNzApfSwJLyogUmFsaW5rIDMwNzAgKi8KLQl7VVNCX0RFVklDRSgweDE0OEYsIDB4MzA3MSl9LAkvKiBSYWxpbmsgMzA3MSAqLwotCXtVU0JfREVWSUNFKDB4MTQ4RiwgMHgzMDcyKX0sCS8qIFJhbGluayAzMDcyICovCi0Je1VTQl9ERVZJQ0UoMHgwREIwLCAweDM4MjApfSwJLyogUmFsaW5rIDMwNzAgKi8KLQl7VVNCX0RFVklDRSgweDBEQjAsIDB4ODcxQyl9LAkvKiBSYWxpbmsgMzA3MCAqLwotCXtVU0JfREVWSUNFKDB4MERCMCwgMHg4MjJDKX0sCS8qIFJhbGluayAzMDcwICovCi0Je1VTQl9ERVZJQ0UoMHgwREIwLCAweDg3MUIpfSwJLyogUmFsaW5rIDMwNzAgKi8KLQl7VVNCX0RFVklDRSgweDBEQjAsIDB4ODIyQil9LAkvKiBSYWxpbmsgMzA3MCAqLwotCXtVU0JfREVWSUNFKDB4MERGNiwgMHgwMDNFKX0sCS8qIFNpdGVjb20gMzA3MCAqLwotCXtVU0JfREVWSUNFKDB4MERGNiwgMHgwMDQyKX0sCS8qIFNpdGVjb20gMzA3MiAqLwotCXtVU0JfREVWSUNFKDB4MERGNiwgMHgwMDQ4KX0sCS8qIFNpdGVjb20gMzA3MCAqLwotCXtVU0JfREVWSUNFKDB4MERGNiwgMHgwMDQ3KX0sCS8qIFNpdGVjb20gMzA3MSAqLwotCXtVU0JfREVWSUNFKDB4MTRCMiwgMHgzQzEyKX0sCS8qIEFMIDMwNzAgKi8KLQl7VVNCX0RFVklDRSgweDE4QzUsIDB4MDAxMil9LAkvKiBDb3JlZ2EgMzA3MCAqLwotCXtVU0JfREVWSUNFKDB4MDgzQSwgMHg3NTExKX0sCS8qIEFyY2FkeWFuIDMwNzAgKi8KLQl7VVNCX0RFVklDRSgweDA4M0EsIDB4QTcwMSl9LAkvKiBTTUMgMzA3MCAqLwotCXtVU0JfREVWSUNFKDB4MDgzQSwgMHhBNzAyKX0sCS8qIFNNQyAzMDcyICovCi0Je1VTQl9ERVZJQ0UoMHgxNzQwLCAweDk3MDMpfSwJLyogRW5HZW5pdXMgMzA3MCAqLwotCXtVU0JfREVWSUNFKDB4MTc0MCwgMHg5NzA1KX0sCS8qIEVuR2VuaXVzIDMwNzEgKi8KLQl7VVNCX0RFVklDRSgweDE3NDAsIDB4OTcwNil9LAkvKiBFbkdlbml1cyAzMDcyICovCi0Je1VTQl9ERVZJQ0UoMHgxNzQwLCAweDk3MDcpfSwJLyogRW5HZW5pdXMgMzA3MCAqLwotCXtVU0JfREVWSUNFKDB4MTc0MCwgMHg5NzA4KX0sCS8qIEVuR2VuaXVzIDMwNzEgKi8KLQl7VVNCX0RFVklDRSgweDE3NDAsIDB4OTcwOSl9LAkvKiBFbkdlbml1cyAzMDcyICovCi0Je1VTQl9ERVZJQ0UoMHgxM0QzLCAweDMyNzMpfSwJLyogQXp1cmVXYXZlIDMwNzAgKi8KLQl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMwNSl9LAkvKiBBenVyZVdhdmUgMzA3MCovCi0Je1VTQl9ERVZJQ0UoMHgxMDQ0LCAweDgwMEQpfSwJLyogR2lnYWJ5dGUgR04tV0IzMkwgMzA3MCAqLwotCXtVU0JfREVWSUNFKDB4MjAxOSwgMHhBQjI1KX0sCS8qIFBsYW5leCBDb21tdW5pY2F0aW9ucywgSW5jLiBSVDMwNzAgKi8KLQl7VVNCX0RFVklDRSgweDA3QjgsIDB4MzA3MCl9LAkvKiBBYm9Db20gMzA3MCAqLwotCXtVU0JfREVWSUNFKDB4MDdCOCwgMHgzMDcxKX0sCS8qIEFib0NvbSAzMDcxICovCi0Je1VTQl9ERVZJQ0UoMHgwN0I4LCAweDMwNzIpfSwJLyogQWJvY29tIDMwNzIgKi8KLQl7VVNCX0RFVklDRSgweDczOTIsIDB4NzcxMSl9LAkvKiBFZGltYXggMzA3MCAqLwotCXtVU0JfREVWSUNFKDB4MUEzMiwgMHgwMzA0KX0sCS8qIFF1YW50YSAzMDcwICovCi0Je1VTQl9ERVZJQ0UoMHgxRURBLCAweDIzMTApfSwJLyogQWlyVGllcyAzMDcwICovCi0Je1VTQl9ERVZJQ0UoMHgwN0QxLCAweDNDMEEpfSwJLyogRC1MaW5rIDMwNzIgKi8KLQl7VVNCX0RFVklDRSgweDA3RDEsIDB4M0MwRCl9LAkvKiBELUxpbmsgMzA3MCAqLwotCXtVU0JfREVWSUNFKDB4MDdEMSwgMHgzQzBFKX0sCS8qIEQtTGluayAzMDcwICovCi0Je1VTQl9ERVZJQ0UoMHgwN0QxLCAweDNDMEYpfSwJLyogRC1MaW5rIDMwNzAgKi8KLQl7VVNCX0RFVklDRSgweDA3RDEsIDB4M0MxNil9LAkvKiBELUxpbmsgMzA3MCAqLwotCXtVU0JfREVWSUNFKDB4MDdEMSwgMHgzQzE3KX0sCS8qIEQtTGluayA4MDcwICovCi0Je1VTQl9ERVZJQ0UoMHgxRDRELCAweDAwMEMpfSwJLyogUGVnYXRyb24gQ29ycG9yYXRpb24gMzA3MCAqLwotCXtVU0JfREVWSUNFKDB4MUQ0RCwgMHgwMDBFKX0sCS8qIFBlZ2F0cm9uIENvcnBvcmF0aW9uIDMwNzAgKi8KLQl7VVNCX0RFVklDRSgweDVBNTcsIDB4NTI1Nyl9LAkvKiBaaW53ZWxsIDMwNzAgKi8KLQl7VVNCX0RFVklDRSgweDVBNTcsIDB4MDI4Myl9LAkvKiBaaW53ZWxsIDMwNzIgKi8KLQl7VVNCX0RFVklDRSgweDA0QkIsIDB4MDk0NSl9LAkvKiBJLU8gREFUQSAzMDcyICovCi0Je1VTQl9ERVZJQ0UoMHgwNEJCLCAweDA5NDcpfSwJLyogSS1PIERBVEEgMzA3MCAqLwotCXtVU0JfREVWSUNFKDB4MDRCQiwgMHgwOTQ4KX0sCS8qIEktTyBEQVRBIDMwNzIgKi8KLQl7VVNCX0RFVklDRSgweDIwM0QsIDB4MTQ4MCl9LAkvKiBFbmNvcmUgMzA3MCAqLwotCXtVU0JfREVWSUNFKDB4MjBCOCwgMHg4ODg4KX0sCS8qIFBBUkEgSU5EVVNUUklBTCAzMDcwICovCi0Je1VTQl9ERVZJQ0UoMHgwQjA1LCAweDE3ODQpfSwJLyogQXN1cyAzMDcyICovCi0Je1VTQl9ERVZJQ0UoMHgyMDNELCAweDE0QTkpfSwJLyogRW5jb3JlIDMwNzAqLwotCXtVU0JfREVWSUNFKDB4MERCMCwgMHg4OTlBKX0sCS8qIE1TSSAzMDcwKi8KLQl7VVNCX0RFVklDRSgweDBEQjAsIDB4Mzg3MCl9LAkvKiBNU0kgMzA3MCovCi0Je1VTQl9ERVZJQ0UoMHgwREIwLCAweDg3MEEpfSwJLyogTVNJIDMwNzAqLwotCXtVU0JfREVWSUNFKDB4MERCMCwgMHg2ODk5KX0sCS8qIE1TSSAzMDcwICovCi0Je1VTQl9ERVZJQ0UoMHgwREIwLCAweDM4MjIpfSwJLyogTVNJIDMwNzAgKi8KLQl7VVNCX0RFVklDRSgweDBEQjAsIDB4Mzg3MSl9LAkvKiBNU0kgMzA3MCAqLwotCXtVU0JfREVWSUNFKDB4MERCMCwgMHg4NzFBKX0sCS8qIE1TSSAzMDcwICovCi0Je1VTQl9ERVZJQ0UoMHgwREIwLCAweDgyMkEpfSwJLyogTVNJIDMwNzAgKi8KLQl7VVNCX0RFVklDRSgweDBEQjAsIDB4MzgyMSl9LAkvKiBSYWxpbmsgMzA3MCAqLwotCXtVU0JfREVWSUNFKDB4MERCMCwgMHg4MjFBKX0sCS8qIFJhbGluayAzMDcwICovCi0Je1VTQl9ERVZJQ0UoMHgwODNBLCAweEE3MDMpfSwJLyogSU8tTUFHSUMgKi8KLQl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMwNyl9LAkvKiBBenVyZXdhdmUgKi8KLQl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMyMSl9LAkvKiBBenVyZXdhdmUgKi8KLQl7VVNCX0RFVklDRSgweDA3RkEsIDB4NzcxMil9LAkvKiBFZGltYXggKi8KLQl7VVNCX0RFVklDRSgweDA3ODksIDB4MDE2Nil9LAkvKiBFZGltYXggKi8KLQl7VVNCX0RFVklDRSgweDE0OEYsIDB4MjA3MCl9LAkvKiBFZGltYXggKi8KLSNlbmRpZiAvKiBSVDMwNzAgLy8gKi8KLQl7VVNCX0RFVklDRSgweDE3MzcsIDB4MDA3Nyl9LAkvKiBMaW5rc3lzIFdVU0I1NEdDLUVVIHYzICovCi0Je1VTQl9ERVZJQ0UoMHgyMDAxLCAweDNDMDkpfSwJLyogRC1MaW5rICovCi0Je1VTQl9ERVZJQ0UoMHgyMDAxLCAweDNDMEEpfSwJLyogRC1MaW5rIDMwNzIgKi8KLQl7VVNCX0RFVklDRSgweDIwMTksIDB4RUQxNCl9LAkvKiBQbGFuZXggQ29tbXVuaWNhdGlvbnMsIEluYy4gKi8KLQl7VVNCX0RFVklDRSgweDA0MTEsIDB4MDE1RCl9LAkvKiBCdWZmYWxvIEFpcnN0YXRpb24gV0xJLVVDLUdOICovCi0Je30JCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwotfTsKLQotaW50IGNvbnN0IHJ0dXNiX3VzYl9pZF9sZW4gPQotICAgIHNpemVvZihydHVzYl91c2JfaWQpIC8gc2l6ZW9mKHN0cnVjdCB1c2JfZGV2aWNlX2lkKTsKLQotTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHJ0dXNiX3VzYl9pZCk7Ci0KLXN0YXRpYyB2b2lkIHJ0Mjg3MF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCk7Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IHJ0Mjg3MF9wcm9iZShJTiBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKLQkJCQkgIElOIHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LAotCQkJCSAgSU4gY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmRldl9pZCwKLQkJCQkgIHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKipwcEFkKTsKLQotI2lmbmRlZiBQRl9OT0ZSRUVaRQotI2RlZmluZSBQRl9OT0ZSRUVaRSAgMAotI2VuZGlmCi0KLWV4dGVybiBpbnQgcnQyOHh4X2Nsb3NlKElOIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KTsKLWV4dGVybiBpbnQgcnQyOHh4X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpOwotCi1zdGF0aWMgQk9PTEVBTiBVU0JEZXZDb25maWdJbml0KElOIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCi0JCQkJSU4gc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCi0JCQkJc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKLQotLyoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotUm91dGluZSBEZXNjcmlwdGlvbjoKLSAgICBDaGVjayB0aGUgY2hpcHNldCB2ZW5kb3IvcHJvZHVjdCBJRC4KLQotQXJndW1lbnRzOgotICAgIF9kZXZfcAkJCQlQb2ludCB0byB0aGUgUENJIG9yIFVTQiBkZXZpY2UKLQotUmV0dXJuIFZhbHVlOgotICAgIFRSVUUJCQkJQ2hlY2sgb2sKLQlGQUxTRQkJCQlDaGVjayBmYWlsCi0KLU5vdGU6Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi1CT09MRUFOIFJUMjhYWENoaXBzZXRDaGVjayhJTiB2b2lkICpfZGV2X3ApCi17Ci0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKilfZGV2X3A7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKmRldl9wID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKLQl1MzIgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBydHVzYl91c2JfaWRfbGVuOyBpKyspIHsKLQkJaWYgKGRldl9wLT5kZXNjcmlwdG9yLmlkVmVuZG9yID09IHJ0dXNiX3VzYl9pZFtpXS5pZFZlbmRvciAmJgotCQkgICAgZGV2X3AtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ID09IHJ0dXNiX3VzYl9pZFtpXS5pZFByb2R1Y3QpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gInJ0Mjg3MDogaWRWZW5kb3IgPSAweCV4LCBpZFByb2R1Y3QgPSAweCV4XG4iLAotCQkJICAgICAgIGRldl9wLT5kZXNjcmlwdG9yLmlkVmVuZG9yLAotCQkJICAgICAgIGRldl9wLT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmIChpID09IHJ0dXNiX3VzYl9pZF9sZW4pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJydDI4NzA6IEVycm9yISBEZXZpY2UgRGVzY3JpcHRvciBub3QgbWF0Y2hpbmchXG4iKTsKLQkJcmV0dXJuIEZBTFNFOwotCX0KLQotCXJldHVybiBUUlVFOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKnRlc3RlZCBmb3Iga2VybmVsIDIuNnNlcmllcyAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHJ0Mjg3MF9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwotc3RhdGljIGludCBydDI4NzBfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKLSNlbmRpZiAvKiBDT05GSUdfUE0gLy8gKi8KLQotc3RhdGljIEJPT0xFQU4gVVNCRGV2Q29uZmlnSW5pdChJTiBzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LAotCQkJCUlOIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAotCQkJCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9kZXNjOwotCXVuc2lnbmVkIGxvbmcgQnVsa091dElkeDsKLQl1MzIgaTsKLQotCS8qIGdldCB0aGUgYWN0aXZlIGludGVyZmFjZSBkZXNjcmlwdG9yICovCi0JaWZhY2VfZGVzYyA9IGludGYtPmN1cl9hbHRzZXR0aW5nOwotCi0JLyogZ2V0ICMgb2YgZW5wb2ludHMgICovCi0JcEFkLT5OdW1iZXJPZlBpcGVzID0gaWZhY2VfZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzOwotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkgKCJOdW1FbmRwb2ludHM9JWRcbiIsIGlmYWNlX2Rlc2MtPmRlc2MuYk51bUVuZHBvaW50cykpOwotCi0JLyogQ29uZmlndXJlIFBpcGVzICovCi0JQnVsa091dElkeCA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcEFkLT5OdW1iZXJPZlBpcGVzOyBpKyspIHsKLQkJaWYgKChpZmFjZV9kZXNjLT5lbmRwb2ludFtpXS5kZXNjLmJtQXR0cmlidXRlcyA9PQotCQkgICAgIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspICYmCi0JCSAgICAoKGlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmCi0JCSAgICAgIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykgPT0gVVNCX0RJUl9JTikpIHsKLQkJCXBBZC0+QnVsa0luRXBBZGRyID0KLQkJCSAgICBpZmFjZV9kZXNjLT5lbmRwb2ludFtpXS5kZXNjLmJFbmRwb2ludEFkZHJlc3M7Ci0JCQlwQWQtPkJ1bGtJbk1heFBhY2tldFNpemUgPQotCQkJICAgIGxlMmNwdTE2KGlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2MuCi0JCQkJICAgICB3TWF4UGFja2V0U2l6ZSk7Ci0KLQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwKLQkJCQkgICAgICgiQlVMSyBJTiBNYXhQYWNrZXRTaXplID0gJWRcbiIsCi0JCQkJICAgICAgcEFkLT5CdWxrSW5NYXhQYWNrZXRTaXplKSk7Ci0JCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICAgICAoIkVQIGFkZHJlc3MgPSAweCUyeFxuIiwKLQkJCQkgICAgICBpZmFjZV9kZXNjLT5lbmRwb2ludFtpXS5kZXNjLgotCQkJCSAgICAgIGJFbmRwb2ludEFkZHJlc3MpKTsKLQkJfSBlbHNlCi0JCSAgICBpZiAoKGlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2MuYm1BdHRyaWJ1dGVzID09Ci0JCQkgVVNCX0VORFBPSU5UX1hGRVJfQlVMSykKLQkJCSYmCi0JCQkoKGlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2MuCi0JCQkgIGJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09Ci0JCQkgVVNCX0RJUl9PVVQpKSB7Ci0JCQkvKiB0aGVyZSBhcmUgNiBidWxrIG91dCBFUC4gRVA2IGhpZ2hlc3QgcHJpb3JpdHkuICovCi0JCQkvKiBFUDEtNCBpcyBFRENBLiAgRVA1IGlzIEhDQ0EuICovCi0JCQlwQWQtPkJ1bGtPdXRFcEFkZHJbQnVsa091dElkeCsrXSA9Ci0JCQkgICAgaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzOwotCQkJcEFkLT5CdWxrT3V0TWF4UGFja2V0U2l6ZSA9Ci0JCQkgICAgbGUyY3B1MTYoaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYy4KLQkJCQkgICAgIHdNYXhQYWNrZXRTaXplKTsKLQotCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAgICAgKCJCVUxLIE9VVCBNYXhQYWNrZXRTaXplID0gJWRcbiIsCi0JCQkJICAgICAgcEFkLT5CdWxrT3V0TWF4UGFja2V0U2l6ZSkpOwotCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAgICAgKCJFUCBhZGRyZXNzID0gMHglMnggIFxuIiwKLQkJCQkgICAgICBpZmFjZV9kZXNjLT5lbmRwb2ludFtpXS5kZXNjLgotCQkJCSAgICAgIGJFbmRwb2ludEFkZHJlc3MpKTsKLQkJfQotCX0KLQotCWlmICghKHBBZC0+QnVsa0luRXBBZGRyICYmIHBBZC0+QnVsa091dEVwQWRkclswXSkpIHsKLQkJcHJpbnRrCi0JCSAgICAoS0VSTl9FUlIgIiVzOiBDb3VsZCBub3QgZmluZCBib3RoIGJ1bGstaW4gYW5kIGJ1bGstb3V0IGVuZHBvaW50c1xuIiwKLQkJICAgICBfX0ZVTkNUSU9OX18pOwotCQlyZXR1cm4gRkFMU0U7Ci0JfQotCi0JcEFkLT5jb25maWcgPSAmZGV2LT5jb25maWctPmRlc2M7Ci0JdXNiX3NldF9pbnRmZGF0YShpbnRmLCBwQWQpOwotCi0JcmV0dXJuIFRSVUU7Ci0KLX0KLQotc3RhdGljIGludCBfX2RldmluaXQgcnR1c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCi0JCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCi17Ci0Jc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkOwotCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7Ci0JaW50IHJ2OwotCi0JZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKLQlkZXYgPSB1c2JfZ2V0X2RldihkZXYpOwotCi0JcnYgPSBydDI4NzBfcHJvYmUoaW50ZiwgZGV2LCBpZCwgJnBBZCk7Ci0JaWYgKHJ2ICE9IDApCi0JCXVzYl9wdXRfZGV2KGRldik7Ci0KLQlyZXR1cm4gcnY7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0dXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCi17Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7Ci0Jc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkOwotCi0JcEFkID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKLQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwotCi0JcnQyODcwX2Rpc2Nvbm5lY3QoZGV2LCBwQWQpOwotfQotCi1zdHJ1Y3QgdXNiX2RyaXZlciBydHVzYl9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAicnQyODcwIiwKLQkucHJvYmUgPSBydHVzYl9wcm9iZSwKLQkuZGlzY29ubmVjdCA9IHJ0dXNiX2Rpc2Nvbm5lY3QsCi0JLmlkX3RhYmxlID0gcnR1c2JfdXNiX2lkLAotCi0jaWZkZWYgQ09ORklHX1BNCi1zdXNwZW5kOnJ0Mjg3MF9zdXNwZW5kLAotcmVzdW1lOnJ0Mjg3MF9yZXN1bWUsCi0jZW5kaWYKLX07Ci0KLSNpZmRlZiBDT05GSUdfUE0KLQotdm9pZCBSVDI4NzBSZWplY3RQZW5kaW5nUGFja2V0cyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0JLyogY2xlYXIgUFMgcGFja2V0cyAqLwotCS8qIGNsZWFyIFR4U3cgcGFja2V0cyAqLwotfQotCi1zdGF0aWMgaW50IHJ0Mjg3MF9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXY7Ci0Jc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PT4gcnQyODcwX3N1c3BlbmQoKVxuIikpOwotCW5ldF9kZXYgPSBwQWQtPm5ldF9kZXY7Ci0JbmV0aWZfZGV2aWNlX2RldGFjaChuZXRfZGV2KTsKLQotCXBBZC0+UE1fRmxnU3VzcGVuZCA9IDE7Ci0JaWYgKG5ldGlmX3J1bm5pbmcobmV0X2RldikpIHsKLQkJUlRVU0JDYW5jZWxQZW5kaW5nQnVsa0luSVJQKHBBZCk7Ci0JCVJUVVNCQ2FuY2VsUGVuZGluZ0J1bGtPdXRJUlAocEFkKTsKLQl9Ci0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPD09PSBydDI4NzBfc3VzcGVuZCgpXG4iKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnQyODcwX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldjsKLQlzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PiBydDI4NzBfcmVzdW1lKClcbiIpKTsKLQotCXBBZC0+UE1fRmxnU3VzcGVuZCA9IDA7Ci0JbmV0X2RldiA9IHBBZC0+bmV0X2RldjsKLQluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldF9kZXYpOwotCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldF9kZXYpOwotCW5ldGlmX2NhcnJpZXJfb24obmV0X2Rldik7Ci0JbmV0aWZfd2FrZV9xdWV1ZShuZXRfZGV2KTsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjw9PT0gcnQyODcwX3Jlc3VtZSgpXG4iKSk7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYgLyogQ09ORklHX1BNIC8vICovCi0KLS8qIEluaXQgZHJpdmVyIG1vZHVsZSAqLwotaW50IF9faW5pdCBydHVzYl9pbml0KHZvaWQpCi17Ci0JcHJpbnRrKEtFUk5fREVCVUcgInJ0dXNiIGluaXQgLS0tPlxuIik7Ci0JcmV0dXJuIHVzYl9yZWdpc3RlcigmcnR1c2JfZHJpdmVyKTsKLX0KLQotLyogRGVpbml0IGRyaXZlciBtb2R1bGUgKi8KLXZvaWQgX19leGl0IHJ0dXNiX2V4aXQodm9pZCkKLXsKLQl1c2JfZGVyZWdpc3RlcigmcnR1c2JfZHJpdmVyKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiPC0tLSBydHVzYiBleGl0XG4iKTsKLX0KLQotbW9kdWxlX2luaXQocnR1c2JfaW5pdCk7Ci1tb2R1bGVfZXhpdChydHVzYl9leGl0KTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JKi8KLS8qIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucwkJCQkJCQkJCQkJCSovCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkqLwotCi0vKgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Sb3V0aW5lIERlc2NyaXB0aW9uOgotICAgIE1MTUUga2VybmVsIHRocmVhZC4KLQotQXJndW1lbnRzOgotCSpDb250ZXh0CQkJdGhlIHBBZCwgZHJpdmVyIGNvbnRyb2wgYmxvY2sgcG9pbnRlcgotCi1SZXR1cm4gVmFsdWU6Ci0gICAgMAkJCQkJY2xvc2UgdGhlIHRocmVhZAotCi1Ob3RlOgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotaW50IE1sbWVUaHJlYWQoSU4gdm9pZCAqQ29udGV4dCkKLXsKLQlzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQ7Ci0Jc3RydWN0IHJ0X3J0bXBfb3NfdGFzayAqcFRhc2s7Ci0JaW50IHN0YXR1czsKLQlzdGF0dXMgPSAwOwotCi0JcFRhc2sgPSBDb250ZXh0OwotCXBBZCA9IHBUYXNrLT5wcml2OwotCi0JUnRtcE9TVGFza0N1c3RvbWl6ZShwVGFzayk7Ci0KLQl3aGlsZSAoIXBUYXNrLT50YXNrX2tpbGxlZCkgewotI2lmZGVmIEtUSFJFQURfU1VQUE9SVAotCQlSVE1QX1dBSVRfRVZFTlRfSU5URVJSVVBUSUJMRShwQWQsIHBUYXNrKTsKLSNlbHNlCi0JCVJUTVBfU0VNX0VWRU5UX1dBSVQoJihwVGFzay0+dGFza1NlbWEpLCBzdGF0dXMpOwotCi0JCS8qIHVubG9jayB0aGUgZGV2aWNlIHBvaW50ZXJzICovCi0JCWlmIChzdGF0dXMgIT0gMCkgewotCQkJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyk7Ci0JCQlicmVhazsKLQkJfQotI2VuZGlmCi0KLQkJLyogbG9jayB0aGUgZGV2aWNlIHBvaW50ZXJzICwgbmVlZCB0byBjaGVjayBpZiByZXF1aXJlZCAqLwotCQkvKmRvd24oJihwQWQtPnVzYmRldl9zZW1hcGhvcmUpKTsgKi8KLQotCQlpZiAoIXBBZC0+UE1fRmxnU3VzcGVuZCkKLQkJCU1sbWVIYW5kbGVyKHBBZCk7Ci0JfQotCi0JLyogbm90aWZ5IHRoZSBleGl0IHJvdXRpbmUgdGhhdCB3ZSdyZSBhY3R1YWxseSBleGl0aW5nIG5vdwotCSAqCi0JICogY29tcGxldGUoKS93YWl0X2Zvcl9jb21wbGV0aW9uKCkgaXMgc2ltaWxhciB0byB1cCgpL2Rvd24oKSwKLQkgKiBleGNlcHQgdGhhdCBjb21wbGV0ZSgpIGlzIHNhZmUgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHN0cnVjdHVyZQotCSAqIGlzIGdldHRpbmcgZGVsZXRlZCBpbiBhIHBhcmFsbGVsIG1vZGUgb2YgZXhlY3V0aW9uIChpLmUuIGp1c3QKLQkgKiBhZnRlciB0aGUgZG93bigpIC0tIHRoYXQncyBuZWNlc3NhcnkgZm9yIHRoZSB0aHJlYWQtc2h1dGRvd24KLQkgKiBjYXNlLgotCSAqCi0JICogY29tcGxldGVfYW5kX2V4aXQoKSBnb2VzIGV2ZW4gZnVydGhlciB0aGFuIHRoaXMgLS0gaXQgaXMgc2FmZSBpbgotCSAqIHRoZSBjYXNlIHRoYXQgdGhlIHRocmVhZCBvZiB0aGUgY2FsbGVyIGlzIGdvaW5nIGF3YXkgKG5vdCBqdXN0Ci0JICogdGhlIHN0cnVjdHVyZSkgLS0gdGhpcyBpcyBuZWNlc3NhcnkgZm9yIHRoZSBtb2R1bGUtcmVtb3ZlIGNhc2UuCi0JICogVGhpcyBpcyBpbXBvcnRhbnQgaW4gcHJlZW1wdGlvbiBrZXJuZWxzLCB3aGljaCB0cmFuc2ZlciB0aGUgZmxvdwotCSAqIG9mIGV4ZWN1dGlvbiBpbW1lZGlhdGVseSB1cG9uIGEgY29tcGxldGUoKS4KLQkgKi8KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8LS0tJXNcbiIsIF9fRlVOQ1RJT05fXykpOwotI2lmbmRlZiBLVEhSRUFEX1NVUFBPUlQKLQlwVGFzay0+dGFza1BJRCA9IFRIUkVBRF9QSURfSU5JVF9WQUxVRTsKLQljb21wbGV0ZV9hbmRfZXhpdCgmcFRhc2stPnRhc2tDb21wbGV0ZSwgMCk7Ci0jZW5kaWYKLQlyZXR1cm4gMDsKLQotfQotCi0vKgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Sb3V0aW5lIERlc2NyaXB0aW9uOgotICAgIFVTQiBjb21tYW5kIGtlcm5lbCB0aHJlYWQuCi0KLUFyZ3VtZW50czoKLQkqQ29udGV4dAkJCXRoZSBwQWQsIGRyaXZlciBjb250cm9sIGJsb2NrIHBvaW50ZXIKLQotUmV0dXJuIFZhbHVlOgotICAgIDAJCQkJCWNsb3NlIHRoZSB0aHJlYWQKLQotTm90ZToKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLWludCBSVFVTQkNtZFRocmVhZChJTiB2b2lkICpDb250ZXh0KQotewotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZDsKLQlzdHJ1Y3QgcnRfcnRtcF9vc190YXNrICpwVGFzazsKLQlpbnQgc3RhdHVzOwotCXN0YXR1cyA9IDA7Ci0KLQlwVGFzayA9IENvbnRleHQ7Ci0JcEFkID0gcFRhc2stPnByaXY7Ci0KLQlSdG1wT1NUYXNrQ3VzdG9taXplKHBUYXNrKTsKLQotCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+Q21kUUxvY2spOwotCXBBZC0+Q21kUS5DbWRRU3RhdGUgPSBSVE1QX1RBU0tfU1RBVF9SVU5OSU5HOwotCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+Q21kUUxvY2spOwotCi0Jd2hpbGUgKHBBZCAmJiBwQWQtPkNtZFEuQ21kUVN0YXRlID09IFJUTVBfVEFTS19TVEFUX1JVTk5JTkcpIHsKLSNpZmRlZiBLVEhSRUFEX1NVUFBPUlQKLQkJUlRNUF9XQUlUX0VWRU5UX0lOVEVSUlVQVElCTEUocEFkLCBwVGFzayk7Ci0jZWxzZQotCQkvKiBsb2NrIHRoZSBkZXZpY2UgcG9pbnRlcnMgKi8KLQkJUlRNUF9TRU1fRVZFTlRfV0FJVCgmKHBUYXNrLT50YXNrU2VtYSksIHN0YXR1cyk7Ci0KLQkJaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCQlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKTsKLQkJCWJyZWFrOwotCQl9Ci0jZW5kaWYKLQotCQlpZiAocEFkLT5DbWRRLkNtZFFTdGF0ZSA9PSBSVE1QX1RBU0tfU1RBVF9TVE9QRUQpCi0JCQlicmVhazsKLQotCQlpZiAoIXBBZC0+UE1fRmxnU3VzcGVuZCkKLQkJCUNNREhhbmRsZXIocEFkKTsKLQl9Ci0KLQlpZiAocEFkICYmICFwQWQtPlBNX0ZsZ1N1c3BlbmQpIHsJLyogQ2xlYXIgdGhlIENtZFFFbGVtZW50cy4gKi8KLQkJc3RydWN0IHJ0X2NtZHFlbG10ICpwQ21kUUVsbXQgPSBOVUxMOwotCi0JCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+Q21kUUxvY2spOwotCQlwQWQtPkNtZFEuQ21kUVN0YXRlID0gUlRNUF9UQVNLX1NUQVRfU1RPUEVEOwotCQl3aGlsZSAocEFkLT5DbWRRLnNpemUpIHsKLQkJCVJUVVNCRGVxdWV1ZUNtZCgmcEFkLT5DbWRRLCAmcENtZFFFbG10KTsKLQkJCWlmIChwQ21kUUVsbXQpIHsKLQkJCQlpZiAocENtZFFFbG10LT5DbWRGcm9tTmRpcyA9PSBUUlVFKSB7Ci0JCQkJCWlmIChwQ21kUUVsbXQtPmJ1ZmZlciAhPSBOVUxMKQotCQkJCQkJb3NfZnJlZV9tZW0ocEFkLAotCQkJCQkJCSAgICBwQ21kUUVsbXQtPmJ1ZmZlcik7Ci0JCQkJCW9zX2ZyZWVfbWVtKHBBZCwgKHU4ICopcENtZFFFbG10KTsKLQkJCQl9IGVsc2UgewotCQkJCQlpZiAoKHBDbWRRRWxtdC0+YnVmZmVyICE9IE5VTEwpCi0JCQkJCSAgICAmJiAocENtZFFFbG10LT5idWZmZXJsZW5ndGggIT0gMCkpCi0JCQkJCQlvc19mcmVlX21lbShwQWQsCi0JCQkJCQkJICAgIHBDbWRRRWxtdC0+YnVmZmVyKTsKLQkJCQkJb3NfZnJlZV9tZW0ocEFkLCAodTggKilwQ21kUUVsbXQpOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+Q21kUUxvY2spOwotCX0KLQkvKiBub3RpZnkgdGhlIGV4aXQgcm91dGluZSB0aGF0IHdlJ3JlIGFjdHVhbGx5IGV4aXRpbmcgbm93Ci0JICoKLQkgKiBjb21wbGV0ZSgpL3dhaXRfZm9yX2NvbXBsZXRpb24oKSBpcyBzaW1pbGFyIHRvIHVwKCkvZG93bigpLAotCSAqIGV4Y2VwdCB0aGF0IGNvbXBsZXRlKCkgaXMgc2FmZSBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgc3RydWN0dXJlCi0JICogaXMgZ2V0dGluZyBkZWxldGVkIGluIGEgcGFyYWxsZWwgbW9kZSBvZiBleGVjdXRpb24gKGkuZS4ganVzdAotCSAqIGFmdGVyIHRoZSBkb3duKCkgLS0gdGhhdCdzIG5lY2Vzc2FyeSBmb3IgdGhlIHRocmVhZC1zaHV0ZG93bgotCSAqIGNhc2UuCi0JICoKLQkgKiBjb21wbGV0ZV9hbmRfZXhpdCgpIGdvZXMgZXZlbiBmdXJ0aGVyIHRoYW4gdGhpcyAtLSBpdCBpcyBzYWZlIGluCi0JICogdGhlIGNhc2UgdGhhdCB0aGUgdGhyZWFkIG9mIHRoZSBjYWxsZXIgaXMgZ29pbmcgYXdheSAobm90IGp1c3QKLQkgKiB0aGUgc3RydWN0dXJlKSAtLSB0aGlzIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIG1vZHVsZS1yZW1vdmUgY2FzZS4KLQkgKiBUaGlzIGlzIGltcG9ydGFudCBpbiBwcmVlbXB0aW9uIGtlcm5lbHMsIHdoaWNoIHRyYW5zZmVyIHRoZSBmbG93Ci0JICogb2YgZXhlY3V0aW9uIGltbWVkaWF0ZWx5IHVwb24gYSBjb21wbGV0ZSgpLgotCSAqLwotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLS1SVFVTQkNtZFRocmVhZFxuIikpOwotCi0jaWZuZGVmIEtUSFJFQURfU1VQUE9SVAotCXBUYXNrLT50YXNrUElEID0gVEhSRUFEX1BJRF9JTklUX1ZBTFVFOwotCWNvbXBsZXRlX2FuZF9leGl0KCZwVGFzay0+dGFza0NvbXBsZXRlLCAwKTsKLSNlbmRpZgotCXJldHVybiAwOwotCi19Ci0KLXZvaWQgUlRVU0JXYXRjaERvZyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0Jc3RydWN0IHJ0X2h0X3R4X2NvbnRleHQgKnBIVFRYQ29udGV4dDsKLQlpbnQgaWR4OwotCXVuc2lnbmVkIGxvbmcgaXJxRmxhZ3M7Ci0JUFVSQiBwVXJiOwotCUJPT0xFQU4gbmVlZER1bXBTZXEgPSBGQUxTRTsKLQl1MzIgTUFDVmFsdWU7Ci0JdTMyIFR4UnhRX1BjbnQ7Ci0KLQlpZHggPSAwOwotCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhSWFFfUENOVCwgJk1BQ1ZhbHVlKTsKLQlpZiAoKE1BQ1ZhbHVlICYgMHhmZikgIT0gMCkgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIlRYIFFVRVVFIDAgTm90IEVNUFRZKFZhbHVlPTB4JTB4KSFcbiIsCi0JCQkgIE1BQ1ZhbHVlKSk7Ci0JCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9DRkcsIDB4ZjQwMDEyKTsKLQkJd2hpbGUgKChNQUNWYWx1ZSAmIDB4ZmYpICE9IDAgJiYgKGlkeCsrIDwgMTApKSB7Ci0JCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYUlhRX1BDTlQsICZNQUNWYWx1ZSk7Ci0JCQlSVE1QdXNlY0RlbGF5KDEpOwotCQl9Ci0JCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9DRkcsIDB4ZjQwMDA2KTsKLQl9Ci0KLQlpZiAocEFkLT53YXRjaERvZ1J4T3ZlckZsb3dDbnQgPj0gMikgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIk1heWJlIHRoZSBSeCBCdWxrLUluIGhhbmdlZCEgQ2FuY2VsIHRoZSBwZW5kaW5nIFJ4IGJ1bGtzIHJlcXVlc3QhXG4iKSk7Ci0JCWlmICgoIVJUTVBfVEVTVF9GTEFHCi0JCSAgICAgKHBBZCwKLQkJICAgICAgKGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MgfAotCQkgICAgICAgZlJUTVBfQURBUFRFUl9CVUxLSU5fUkVTRVQgfAotCQkgICAgICAgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwKLQkJICAgICAgIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKSkgewotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiQ2FsbCBDTURUSFJFQURfUkVTRVRfQlVMS19JTiB0byBjYW5jZWwgdGhlIHBlbmRpbmcgUnggQnVsayFcbiIpKTsKLQkJCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JVTEtJTl9SRVNFVCk7Ci0JCQlSVFVTQkVucXVldWVJbnRlcm5hbENtZChwQWQsIENNRFRIUkVBRF9SRVNFVF9CVUxLX0lOLAotCQkJCQkJTlVMTCwgMCk7Ci0JCQluZWVkRHVtcFNlcSA9IFRSVUU7Ci0JCX0KLQkJcEFkLT53YXRjaERvZ1J4T3ZlckZsb3dDbnQgPSAwOwotCX0KLQotCVJUVVNCUmVhZE1BQ1JlZ2lzdGVyKHBBZCwgMHg0MzgsICZUeFJ4UV9QY250KTsKLQotCWZvciAoaWR4ID0gMDsgaWR4IDwgTlVNX09GX1RYX1JJTkc7IGlkeCsrKSB7Ci0JCXBVcmIgPSBOVUxMOwotCi0JCVJUTVBfSVJRX0xPQ0soJnBBZC0+QnVsa091dExvY2tbaWR4XSwgaXJxRmxhZ3MpOwotCQlpZiAoKHBBZC0+QnVsa091dFBlbmRpbmdbaWR4XSA9PSBUUlVFKQotCQkgICAgJiYgcEFkLT53YXRjaERvZ1R4UGVuZGluZ0NudCkgewotCQkJaW50IGFjdHVhbF9sZW5ndGggPSAwLCB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gMDsKLQkJCUJPT0xFQU4gaXNEYXRhUGFja2V0ID0gRkFMU0U7Ci0JCQlwQWQtPndhdGNoRG9nVHhQZW5kaW5nQ250W2lkeF0rKzsKLQotCQkJaWYgKChwQWQtPndhdGNoRG9nVHhQZW5kaW5nQ250W2lkeF0gPiAyKSAmJgotCQkJICAgICghUlRNUF9URVNUX0ZMQUcKLQkJCSAgICAgKHBBZCwKLQkJCSAgICAgIChmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTIHwKLQkJCSAgICAgICBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfAotCQkJICAgICAgIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCB8Ci0JCQkgICAgICAgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKSkpCi0JCQkgICAgKSB7Ci0JCQkJLyogRklYTUU6IEZvbGxvd2luZyBjb2RlIGp1c3Qgc3VwcG9ydCBzaW5nbGUgYnVsayBvdXQuIElmIHlvdSB3YW5uYSBzdXBwb3J0IG11bHRpcGxlIGJ1bGsgb3V0LiBNb2RpZnkgaXQhICovCi0JCQkJcEhUVFhDb250ZXh0ID0KLQkJCQkgICAgKHN0cnVjdCBydF9odF90eF9jb250ZXh0ICopKCZwQWQtPlR4Q29udGV4dFtpZHhdKTsKLQkJCQlpZiAocEhUVFhDb250ZXh0LT5JUlBQZW5kaW5nKSB7CS8qIENoZWNrIFR4Q29udGV4dC4gKi8KLQkJCQkJcFVyYiA9IHBIVFRYQ29udGV4dC0+cFVyYjsKLQotCQkJCQlhY3R1YWxfbGVuZ3RoID0gcFVyYi0+YWN0dWFsX2xlbmd0aDsKLQkJCQkJdHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9Ci0JCQkJCSAgICBwVXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOwotCQkJCQlpc0RhdGFQYWNrZXQgPSBUUlVFOwotCQkJCX0gZWxzZSBpZiAoaWR4ID09IE1HTVRQSVBFSURYKSB7Ci0JCQkJCXN0cnVjdCBydF90eF9jb250ZXh0ICpwTUxNRUNvbnRleHQsICpwTlVMTENvbnRleHQsCi0JCQkJCSAgICAqcFBzUG9sbENvbnRleHQ7Ci0KLQkJCQkJLypDaGVjayBNZ210Q29udGV4dC4gKi8KLQkJCQkJcE1MTUVDb250ZXh0ID0KLQkJCQkJICAgIChzdHJ1Y3QgcnRfdHhfY29udGV4dCAqKShwQWQtPk1nbXRSaW5nLgotCQkJCQkJCSAgIENlbGxbcEFkLT5NZ210UmluZy4KLQkJCQkJCQkJVHhEbWFJZHhdLgotCQkJCQkJCSAgIEFsbG9jVmEpOwotCQkJCQlwUHNQb2xsQ29udGV4dCA9Ci0JCQkJCSAgICAoc3RydWN0IHJ0X3R4X2NvbnRleHQgKikoJnBBZC0+UHNQb2xsQ29udGV4dCk7Ci0JCQkJCXBOVUxMQ29udGV4dCA9Ci0JCQkJCSAgICAoc3RydWN0IHJ0X3R4X2NvbnRleHQgKikoJnBBZC0+TnVsbENvbnRleHQpOwotCi0JCQkJCWlmIChwTUxNRUNvbnRleHQtPklSUFBlbmRpbmcpIHsKLQkJCQkJCUFTU0VSVChwTUxNRUNvbnRleHQtPgotCQkJCQkJICAgICAgIElSUFBlbmRpbmcpOwotCQkJCQkJcFVyYiA9IHBNTE1FQ29udGV4dC0+cFVyYjsKLQkJCQkJfSBlbHNlIGlmIChwTlVMTENvbnRleHQtPklSUFBlbmRpbmcpIHsKLQkJCQkJCUFTU0VSVChwTlVMTENvbnRleHQtPgotCQkJCQkJICAgICAgIElSUFBlbmRpbmcpOwotCQkJCQkJcFVyYiA9IHBOVUxMQ29udGV4dC0+cFVyYjsKLQkJCQkJfSBlbHNlIGlmIChwUHNQb2xsQ29udGV4dC0+SVJQUGVuZGluZykgewotCQkJCQkJQVNTRVJUKHBQc1BvbGxDb250ZXh0LT4KLQkJCQkJCSAgICAgICBJUlBQZW5kaW5nKTsKLQkJCQkJCXBVcmIgPSBwUHNQb2xsQ29udGV4dC0+cFVyYjsKLQkJCQkJfQotCQkJCX0KLQotCQkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tpZHhdLAotCQkJCQkJaXJxRmxhZ3MpOwotCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJWQ6JWx1IExUTD0lZCAsIFRMPSVkIEw6JWRcbiIsCi0JCQkJICAgICAgIGlkeCwgcEFkLT53YXRjaERvZ1R4UGVuZGluZ0NudFtpZHhdLAotCQkJCSAgICAgICBwQWQtPlRyYW5zZmVyZWRMZW5ndGhbaWR4XSwKLQkJCQkgICAgICAgYWN0dWFsX2xlbmd0aCwgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7Ci0KLQkJCQlpZiAocFVyYikgewotCQkJCQlpZiAoKGlzRGF0YVBhY2tldAotCQkJCQkgICAgICYmIHBBZC0+VHJhbnNmZXJlZExlbmd0aFtpZHhdID09Ci0JCQkJCSAgICAgYWN0dWFsX2xlbmd0aAotCQkJCQkgICAgICYmIHBBZC0+VHJhbnNmZXJlZExlbmd0aFtpZHhdIDwKLQkJCQkJICAgICB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoCi0JCQkJCSAgICAgJiYgYWN0dWFsX2xlbmd0aCAhPSAwCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgVHhSeFFfUGNudD09MCAqLwotCQkJCQkgICAgICYmIHBBZC0+d2F0Y2hEb2dUeFBlbmRpbmdDbnRbaWR4XSA+Ci0JCQkJCSAgICAgMykKLQkJCQkJICAgIHx8IGlzRGF0YVBhY2tldCA9PSBGQUxTRQotCQkJCQkgICAgfHwgcEFkLT53YXRjaERvZ1R4UGVuZGluZ0NudFtpZHhdID4KLQkJCQkJICAgIDYpIHsKLQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkJCSAoIk1heWJlIHRoZSBUeCBCdWxrLU91dCBoYW5nZWQhIENhbmNlbCB0aGUgcGVuZGluZyBUeCBidWxrcyByZXF1ZXN0IG9mIGlkeCglZCkhXG4iLAotCQkJCQkJCSAgaWR4KSk7Ci0JCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkJCQkgKCJVbmxpbmsgdGhlIHBlbmRpbmcgVVJCIVxuIikpOwotCQkJCQkJLyogdW5saW5rIGl0IG5vdyAqLwotCQkJCQkJUlRVU0JfVU5MSU5LX1VSQihwVXJiKTsKLQkJCQkJCS8qIFNsZWVwIDIwMCBtaWNyb3NlY29uZHMgdG8gZ2l2ZSBjYW5jZWxsYXRpb24gdGltZSB0byB3b3JrICovCi0JCQkJCQkvKlJUTVB1c2VjRGVsYXkoMjAwKTsgKi8KLQkJCQkJCW5lZWREdW1wU2VxID0gVFJVRTsKLQkJCQkJfQotCQkJCX0gZWxzZSB7Ci0JCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJCQkJICgiVW5rbm93biBidWxrT3V0IFVSQiBtYXliZSBoYW5nZWQhXG4iKSk7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbaWR4XSwKLQkJCQkJCWlycUZsYWdzKTsKLQkJCX0KLQotCQkJaWYgKGlzRGF0YVBhY2tldCA9PSBUUlVFKQotCQkJCXBBZC0+VHJhbnNmZXJlZExlbmd0aFtpZHhdID0gYWN0dWFsX2xlbmd0aDsKLQkJfSBlbHNlIHsKLQkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tpZHhdLCBpcnFGbGFncyk7Ci0JCX0KLQl9Ci0KLQkvKiBGb3IgU2lnbWEgZGVidWcsIGR1bXAgdGhlIGJhX3Jlb3JkZXJpbmcgc2VxdWVuY2UuICovCi0JaWYgKChuZWVkRHVtcFNlcSA9PSBUUlVFKSAmJiAocEFkLT5Db21tb25DZmcuYkRpc2FibGVSZW9yZGVyaW5nID09IDApKSB7Ci0JCXUxNiBJZHg7Ci0JCXN0cnVjdCBydF9iYV9yZWNfZW50cnkgKnBCQUVudHJ5ID0gTlVMTDsKLQkJdTggY291bnQgPSAwOwotCQlzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICptcGR1X2JsazsKLQotCQlJZHggPSBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkJBUmVjV2NpZEFycmF5WzBdOwotCi0JCXBCQUVudHJ5ID0gJnBBZC0+QkFUYWJsZS5CQVJlY0VudHJ5W0lkeF07Ci0JCWlmICgocEJBRW50cnktPmxpc3QucWxlbiA+IDApICYmIChwQkFFbnRyeS0+bGlzdC5uZXh0ICE9IE5VTEwpKSB7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkgKCJOSUNVcGRhdGVSYXdDb3VudGVycygpOlRoZSBRdWV1ZWluZyBwa3QgaW4gcmVvcmRlcmluZyBidWZmZXI6XG4iKSk7Ci0JCQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQkFFbnRyeS0+UnhSZVJpbmdMb2NrKTsKLQkJCW1wZHVfYmxrID0gcEJBRW50cnktPmxpc3QubmV4dDsKLQkJCXdoaWxlIChtcGR1X2JsaykgewotCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkgKCJcdCVkOlNlcS0lZCwgYkFNU0RVLSVkIVxuIiwgY291bnQsCi0JCQkJCSAgbXBkdV9ibGstPlNlcXVlbmNlLAotCQkJCQkgIG1wZHVfYmxrLT5iQU1TRFUpKTsKLQkJCQltcGR1X2JsayA9IG1wZHVfYmxrLT5uZXh0OwotCQkJCWNvdW50Kys7Ci0JCQl9Ci0KLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAoIlxucEJBRW50cnktPkxhc3RJbmRTZXE9JWQhXG4iLAotCQkJCSAgcEJBRW50cnktPkxhc3RJbmRTZXEpKTsKLQkJCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBCQUVudHJ5LT5SeFJlUmluZ0xvY2spOwotCQl9Ci0JfQotfQotCi0vKgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Sb3V0aW5lIERlc2NyaXB0aW9uOgotICAgIFJlbGVhc2UgYWxsb2NhdGVkIHJlc291cmNlcy4KLQotQXJndW1lbnRzOgotICAgICpkZXYJCQkJUG9pbnQgdG8gdGhlIFBDSSBvciBVU0IgZGV2aWNlCi0JcEFkCQkJCQlkcml2ZXIgY29udHJvbCBibG9jayBwb2ludGVyCi0KLVJldHVybiBWYWx1ZToKLSAgICBOb25lCi0KLU5vdGU6Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi1zdGF0aWMgdm9pZCBydDI4NzBfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0JREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCSAoInJ0dXNiX2Rpc2Nvbm5lY3Q6IHVucmVnaXN0ZXIgdXNibmV0IHVzYi0lcy0lc1xuIiwKLQkJICBkZXYtPmJ1cy0+YnVzX25hbWUsIGRldi0+ZGV2cGF0aCkpOwotCWlmICghcEFkKSB7Ci0JCXVzYl9wdXRfZGV2KGRldik7Ci0JCXByaW50ayhLRVJOX0VSUiAicnR1c2JfZGlzY29ubmVjdDogcEFkID09IE5VTEwhXG4iKTsKLQkJcmV0dXJuOwotCX0KLQlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKTsKLQotCS8qIGZvciBkZWJ1Zywgd2FpdCB0byBzaG93IHNvbWUgbWVzc2FnZXMgdG8gL3Byb2Mgc3lzdGVtICovCi0JdWRlbGF5KDEpOwotCi0JUnRtcFBoeU5ldERldkV4aXQocEFkLCBwQWQtPm5ldF9kZXYpOwotCi0JLyogRklYTUU6IFNoYWxsIHdlIG5lZWQgZm9sbG93aW5nIGRlbGF5IGFuZCBmbHVzaCB0aGUgc2NoZWR1bGU/PyAqLwotCXVkZWxheSgxKTsKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCXVkZWxheSgxKTsKLQotCS8qIGZyZWUgdGhlIHJvb3QgbmV0X2RldmljZSAqLwotCVJ0bXBPU05ldERldkZyZWUocEFkLT5uZXRfZGV2KTsKLQotCVJ0bXBSYURldkN0cmxFeGl0KHBBZCk7Ci0KLQkvKiByZWxlYXNlIGEgdXNlIG9mIHRoZSB1c2IgZGV2aWNlIHN0cnVjdHVyZSAqLwotCXVzYl9wdXRfZGV2KGRldik7Ci0JdWRlbGF5KDEpOwotCi0JREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiIFJUVVNCIGRpc2Nvbm5lY3Qgc3VjY2Vzc2Z1bGx5XG4iKSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IHJ0Mjg3MF9wcm9iZShJTiBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKLQkJCQkgIElOIHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LAotCQkJCSAgSU4gY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmRldl9pZCwKLQkJCQkgIHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKipwcEFkKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gTlVMTDsKLQlzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQgPSAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqKU5VTEw7Ci0JaW50IHN0YXR1cywgcnY7Ci0Jdm9pZCAqaGFuZGxlOwotCXN0cnVjdCBydF9ydG1wX29zX25ldGRldl9vcF9ob29rIG5ldERldkhvb2s7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT0+cnQyODcwX3Byb2JlKCkhXG4iKSk7Ci0KLQkvKiBDaGVjayBjaGlwc2V0IHZlbmRvci9wcm9kdWN0IElEICovCi0JLyppZiAoUlQyOFhYQ2hpcHNldENoZWNrKF9kZXZfcCkgPT0gRkFMU0UpICovCi0JLyogICAgICBnb3RvIGVycl9vdXQ7ICovCi0KLS8qUnRtcERldkluaXQ9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQkvKiBBbGxvY2F0ZSBzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyIGFkYXB0ZXIgc3RydWN0dXJlICovCi0JaGFuZGxlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG9zX2Nvb2tpZSksIEdGUF9LRVJORUwpOwotCWlmIChoYW5kbGUgPT0gTlVMTCkgewotCQlwcmludGsKLQkJICAgICgicnQyODcwX3Byb2JlKCk6IEFsbG9jYXRlIG1lbW9yeSBmb3Igb3MgaGFuZGxlIGZhaWxlZCFcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JKChzdHJ1Y3Qgb3NfY29va2llICopaGFuZGxlKS0+cFVzYl9EZXYgPSB1c2JfZGV2OwotCi0JcnYgPSBSVE1QQWxsb2NBZGFwdGVyQmxvY2soaGFuZGxlLCAmcEFkKTsKLQlpZiAocnYgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykgewotCQlrZnJlZShoYW5kbGUpOwotCQlnb3RvIGVycl9vdXQ7Ci0JfQotLypVU0JEZXZJbml0PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCWlmIChVU0JEZXZDb25maWdJbml0KHVzYl9kZXYsIGludGYsIHBBZCkgPT0gRkFMU0UpCi0JCWdvdG8gZXJyX291dF9mcmVlX3JhZGV2OwotCi0JUnRtcFJhRGV2Q3RybEluaXQocEFkLCBSVE1QX0RFVl9JTkZfVVNCKTsKLQotLypOZXREZXZJbml0PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCW5ldF9kZXYgPSBSdG1wUGh5TmV0RGV2SW5pdChwQWQsICZuZXREZXZIb29rKTsKLQlpZiAobmV0X2RldiA9PSBOVUxMKQotCQlnb3RvIGVycl9vdXRfZnJlZV9yYWRldjsKLQotCS8qIEhlcmUgYXJlIHRoZSBuZXRfZGV2aWNlIHN0cnVjdHVyZSB3aXRoIHVzYiBzcGVjaWZpYyBwYXJhbWV0ZXJzLiAKLQkgKiBmb3Igc3VwcG9ydGluZyBOZXR3b3JrIE1hbmFnZXIuCi0JICogU2V0IHRoZSBzeXNmcyBwaHlzaWNhbCBkZXZpY2UgcmVmZXJlbmNlIGZvciB0aGUgbmV0d29yayBsb2dpY2FsIGRldmljZSBpZiBzZXQgcHJpb3IgdG8gcmVnaXN0cmF0aW9uIHdpbGwKLQkgKiBjYXVzZSBhIHN5bWxpbmsgZHVyaW5nIGluaXRpYWxpemF0aW9uLgotCSAqLwotCVNFVF9ORVRERVZfREVWKG5ldF9kZXYsICYodXNiX2Rldi0+ZGV2KSk7Ci0KLQlwQWQtPlN0YUNmZy5PcmlEZXZUeXBlID0gbmV0X2Rldi0+dHlwZTsKLQotLypBbGwgZG9uZSwgaXQncyB0aW1lIHRvIHJlZ2lzdGVyIHRoZSBuZXQgZGV2aWNlIHRvIGxpbnV4IGtlcm5lbC4gKi8KLQkvKiBSZWdpc3RlciB0aGlzIGRldmljZSAqLwotCXN0YXR1cyA9IFJ0bXBPU05ldERldkF0dGFjaChuZXRfZGV2LCAmbmV0RGV2SG9vayk7Ci0JaWYgKHN0YXR1cyAhPSAwKQotCQlnb3RvIGVycl9vdXRfZnJlZV9uZXRkZXY7Ci0KLSNpZmRlZiBLVEhSRUFEX1NVUFBPUlQKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwQWQtPm1sbWVUYXNrLmt0aHJlYWRfcSk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmcEFkLT50aW1lclRhc2sua3RocmVhZF9xKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwQWQtPmNtZFFUYXNrLmt0aHJlYWRfcSk7Ci0jZW5kaWYKLQotCSpwcEFkID0gcEFkOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPD09PXJ0Mjg3MF9wcm9iZSgpIVxuIikpOwotCi0JcmV0dXJuIDA7Ci0KLQkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRVJST1IgSEFORExFIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotZXJyX291dF9mcmVlX25ldGRldjoKLQlSdG1wT1NOZXREZXZGcmVlKG5ldF9kZXYpOwotCi1lcnJfb3V0X2ZyZWVfcmFkZXY6Ci0JUlRNUEZyZWVBZGFwdGVyKHBBZCk7Ci0KLWVycl9vdXQ6Ci0JKnBwQWQgPSBOVUxMOwotCi0JcmV0dXJuIC0xOwotCi19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3dwYS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC93cGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc3OTZkMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3dwYS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkwICswLDAgQEAKLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUmFsaW5rIFRlY2ggSW5jLgotICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAotICogSHNpbmNodSBDb3VudHkgMzAyLAotICogVGFpd2FuLCBSLk8uQy4KLSAqCi0gKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0JTW9kdWxlIE5hbWU6Ci0Jd3BhLmgKLQotCUFic3RyYWN0OgotCi0JUmV2aXNpb24gSGlzdG9yeToKLQlXaG8JCQlXaGVuCQkJV2hhdAotCS0tLS0tLS0tCS0tLS0tLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlOYW1lCQkJRGF0ZQkJCU1vZGlmaWNhdGlvbiBsb2dzCi0JSnVzdGluIFAuIE1hdHRvY2sJMTEvMDcvMjAxMAkJRml4IGEgdHlwbwotKi8KLQotI2lmbmRlZglfX1dQQV9IX18KLSNkZWZpbmUJX19XUEFfSF9fCi0KLS8qIEVBUE9MIEtleSBkZXNjcmlwdG9yIGZyYW1lIGZvcm1hdCByZWxhdGVkIGxlbmd0aCAqLwotI2RlZmluZSBMRU5fS0VZX0RFU0NfTk9OQ0UJCQkzMgotI2RlZmluZSBMRU5fS0VZX0RFU0NfSVYJCQkJMTYKLSNkZWZpbmUgTEVOX0tFWV9ERVNDX1JTQwkJCTgKLSNkZWZpbmUgTEVOX0tFWV9ERVNDX0lECQkJCTgKLSNkZWZpbmUgTEVOX0tFWV9ERVNDX1JFUExBWQkJCTgKLSNkZWZpbmUgTEVOX0tFWV9ERVNDX01JQwkJCTE2Ci0KLS8qIFRoZSBsZW5ndGggaXMgdGhlIEVBUG9MLUtleSBmcmFtZSBleGNlcHQga2V5IGRhdGEgZmllbGQuICovCi0vKiBQbGVhc2UgcmVmZXIgdG8gODAyLjExaS0yMDA0ICxGaWd1cmUgNDN1IGluIHAuNzggKi8KLSNkZWZpbmUgTEVOX0VBUE9MX0tFWV9NU0cJCQkoc2l6ZW9mKHN0cnVjdCBydF9rZXlfZGVzY3JpcHRlcikgLSBNQVhfTEVOX09GX1JTTklFKQotCi0vKiBFQVAgQ29kZSBUeXBlLiAqLwotI2RlZmluZSBFQVBfQ09ERV9SRVFVRVNUCTEKLSNkZWZpbmUgRUFQX0NPREVfUkVTUE9OU0UJMgotI2RlZmluZSBFQVBfQ09ERV9TVUNDRVNTICAgIDMKLSNkZWZpbmUgRUFQX0NPREVfRkFJTFVSRSAgICA0Ci0KLS8qIEVBUE9MIGZyYW1lIFByb3RvY29sIFZlcnNpb24gKi8KLSNkZWZpbmUJRUFQT0xfVkVSCQkJCQkxCi0jZGVmaW5lCUVBUE9MX1ZFUjIJCQkJCTIKLQotLyogRUFQT0wtS0VZIERlc2NyaXB0b3IgVHlwZSAqLwotI2RlZmluZQlXUEExX0tFWV9ERVNDCQkJCTB4ZmUKLSNkZWZpbmUgV1BBMl9LRVlfREVTQyAgICAgICAgICAgICAgIDB4MDIKLQotLyogS2V5IERlc2NyaXB0b3IgVmVyc2lvbiBvZiBLZXkgSW5mb3JtYXRpb24gKi8KLSNkZWZpbmUJREVTQ19UWVBFX1RLSVAJCQkJMQotI2RlZmluZQlERVNDX1RZUEVfQUVTCQkJCTIKLQotI2RlZmluZSBMRU5fTVNHMV8yV0FZICAgICAgICAgICAgICAgMHg3ZgotI2RlZmluZSBNQVhfTEVOX09GX0VBUF9IUyAgICAgICAgICAgMjU2Ci0KLSNkZWZpbmUgTEVOX01BU1RFUl9LRVkJCQkJMzIKLQotLyogRUFQT0wgRUssIE1LICovCi0jZGVmaW5lIExFTl9FQVBfRUsJCQkJCTE2Ci0jZGVmaW5lIExFTl9FQVBfTUlDSwkJCQkxNgotI2RlZmluZSBMRU5fRUFQX0tFWQkJCQkJKChMRU5fRUFQX0VLKSsoTEVOX0VBUF9NSUNLKSkKLS8qIFRLSVAga2V5IHJlbGF0ZWQgKi8KLSNkZWZpbmUgTEVOX1BNS0lECQkJCQkxNgotI2RlZmluZSBMRU5fVEtJUF9FSwkJCQkJMTYKLSNkZWZpbmUgTEVOX1RLSVBfUlhNSUNLCQkJCTgKLSNkZWZpbmUgTEVOX1RLSVBfVFhNSUNLCQkJCTgKLSNkZWZpbmUgTEVOX0FFU19FSwkJCQkJMTYKLSNkZWZpbmUgTEVOX0FFU19LRVkJCQkJCUxFTl9BRVNfRUsKLSNkZWZpbmUgTEVOX1RLSVBfS0VZCQkJCSgoTEVOX1RLSVBfRUspKyhMRU5fVEtJUF9SWE1JQ0spKyhMRU5fVEtJUF9UWE1JQ0spKQotI2RlZmluZSBUS0lQX0FQX1RYTUlDS19PRkZTRVQJCSgoTEVOX0VBUF9LRVkpKyhMRU5fVEtJUF9FSykpCi0jZGVmaW5lIFRLSVBfQVBfUlhNSUNLX09GRlNFVAkJKFRLSVBfQVBfVFhNSUNLX09GRlNFVCtMRU5fVEtJUF9UWE1JQ0spCi0jZGVmaW5lIFRLSVBfR1RLX0xFTkdUSAkJCQkoKExFTl9US0lQX0VLKSsoTEVOX1RLSVBfUlhNSUNLKSsoTEVOX1RLSVBfVFhNSUNLKSkKLSNkZWZpbmUgTEVOX1BUSwkJCQkJCSgoTEVOX0VBUF9LRVkpKyhMRU5fVEtJUF9LRVkpKQotI2RlZmluZSBNSU5fTEVOX09GX0dUSwkJCQk1Ci0jZGVmaW5lIExFTl9QTUsJCQkJCQkzMgotI2RlZmluZSBMRU5fUE1LX05BTUUJCQkJMTYKLSNkZWZpbmUgTEVOX05PTkNFCQkJCQkzMgotCi0vKiBSU04gSUUgTGVuZ3RoIGRlZmluaXRpb24gKi8KLSNkZWZpbmUgTUFYX0xFTl9PRl9SU05JRQkJMjU1Ci0jZGVmaW5lIE1JTl9MRU5fT0ZfUlNOSUUgICAgICAgICAJOAotCi0jZGVmaW5lIEtFWV9MSUZFVElNRQkJCQkzNjAwCi0KLS8qRUFQIFBhY2tldCBUeXBlICovCi0jZGVmaW5lCUVBUFBhY2tldAkJMAotI2RlZmluZQlFQVBPTFN0YXJ0CQkxCi0jZGVmaW5lCUVBUE9MTG9nb2ZmCQkyCi0jZGVmaW5lCUVBUE9MS2V5CQkzCi0jZGVmaW5lCUVBUE9MQVNGQWxlcnQJNAotI2RlZmluZQlFQVBUdHlwZU1heAkJNQotCi0jZGVmaW5lCUVBUE9MX01TR19JTlZBTElECTAKLSNkZWZpbmUJRUFQT0xfUEFJUl9NU0dfMQkxCi0jZGVmaW5lCUVBUE9MX1BBSVJfTVNHXzIJMgotI2RlZmluZQlFQVBPTF9QQUlSX01TR18zCTMKLSNkZWZpbmUJRUFQT0xfUEFJUl9NU0dfNAk0Ci0jZGVmaW5lCUVBUE9MX0dST1VQX01TR18xCTUKLSNkZWZpbmUJRUFQT0xfR1JPVVBfTVNHXzIJNgotCi0jZGVmaW5lIFBBSVJXSVNFS0VZCQkJCQkxCi0jZGVmaW5lIEdST1VQS0VZCQkJCQkwCi0KLS8qIFJldHJ5IHRpbWVyIGNvdW50ZXIgaW5pdGlhbCB2YWx1ZSAqLwotI2RlZmluZSBQRUVSX01TRzFfUkVUUllfVElNRVJfQ1RSICAgICAgICAgICAwCi0jZGVmaW5lIFBFRVJfTVNHM19SRVRSWV9USU1FUl9DVFIgICAgICAgICAgIDEwCi0jZGVmaW5lIEdST1VQX01TRzFfUkVUUllfVElNRVJfQ1RSICAgICAgICAgIDIwCi0KLS8qI2lmZGVmIENPTkZJR19BUF9TVVBQT1JUICovCi0vKiBXUEEgbWVjaGFuaXNtIHJldHJ5IHRpbWVyIGludGVydmFsICovCi0jZGVmaW5lIFBFRVJfTVNHMV9SRVRSWV9FWEVDX0lOVFYgICAgICAgICAgIDEwMDAJLyogMSBzZWMgKi8KLSNkZWZpbmUgUEVFUl9NU0czX1JFVFJZX0VYRUNfSU5UViAgICAgICAgICAgMzAwMAkvKiAzIHNlYyAqLwotI2RlZmluZSBHUk9VUF9LRVlfVVBEQVRFX0VYRUNfSU5UViAgICAgICAgICAxMDAwCS8qIDEgc2VjICovCi0jZGVmaW5lIFBFRVJfR1JPVVBfS0VZX1VQREFURV9JTklWCQkJMjAwMAkvKiAyIHNlYyAqLwotCi0jZGVmaW5lIEVOUVVFVUVfRUFQT0xfU1RBUlRfVElNRVIJCQkyMDAJLyogMjAwIG1zICovCi0KLS8qIGdyb3VwIHJla2V5IGludGVydmFsICovCi0jZGVmaW5lIFRJTUVfUkVLRVkgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUEtUX1JFS0VZICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBESVNBQkxFX1JFS0VZICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIE1BWF9SRUtFWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKLQotI2RlZmluZSBNQVhfUkVLRVlfSU5URVIgICAgICAgICAgICAgICAgICAgICAweDNmZmZmZmYKLS8qI2VuZGlmIC8vIENPTkZJR19BUF9TVVBQT1JUIC8vICovCi0KLSNkZWZpbmUgR1JPVVBfU1VJVEUJCQkJCTAKLSNkZWZpbmUgUEFJUldJU0VfU1VJVEUJCQkJMQotI2RlZmluZSBBS01fU1VJVEUJCQkJCTIKLSNkZWZpbmUgUE1LSURfTElTVAkJCQkJMwotCi0jZGVmaW5lIEVBUE9MX1NUQVJUX0RJU0FCTEUJCQkJCTAKLSNkZWZpbmUgRUFQT0xfU1RBUlRfUFNLCQkJCQkJMQotI2RlZmluZSBFQVBPTF9TVEFSVF8xWAkJCQkJCTIKLQotI2RlZmluZSBNSVhfQ0lQSEVSX1dQQV9US0lQX09OKHgpICAgICAgICgoKHgpICYgMHgwOCkgIT0gMCkKLSNkZWZpbmUgTUlYX0NJUEhFUl9XUEFfQUVTX09OKHgpICAgICAgICAoKCh4KSAmIDB4MDQpICE9IDApCi0jZGVmaW5lIE1JWF9DSVBIRVJfV1BBMl9US0lQX09OKHgpICAgICAgKCgoeCkgJiAweDAyKSAhPSAwKQotI2RlZmluZSBNSVhfQ0lQSEVSX1dQQTJfQUVTX09OKHgpICAgICAgICgoKHgpICYgMHgwMSkgIT0gMCkKLQotI2lmbmRlZiBST1VORF9VUAotI2RlZmluZSBST1VORF9VUChfX3gsIF9feSkgXAotCSgoKHVuc2lnbmVkIGxvbmcpKChfX3gpKygoX195KS0xKSkpICYgKCh1bnNpZ25lZCBsb25nKX4oKF9feSktMSkpKQotI2VuZGlmCi0KLSNkZWZpbmUJU0VUX3UxNl9UT19BUlJBUlkoX1YsIF9MRU4pCQlcCi17CQkJCQkJCQkJCQlcCi0JX1ZbMF0gPSAoX0xFTiAmIDB4RkYwMCkgPj4gODsJCQlcCi0JX1ZbMV0gPSAoX0xFTiAmIDB4RkYpOwkJCQkJXAotfQotCi0jZGVmaW5lCUlOQ191MTZfVE9fQVJSQVJZKF9WLCBfTEVOKQkJCVwKLXsJCQkJCQkJCQkJCQlcCi0JdTE2CXZhcl9sZW47CQkJCQkJCVwKLQkJCQkJCQkJCQkJCVwKLQl2YXJfbGVuID0gKF9WWzBdPDw4KSB8IChfVlsxXSk7CQkJCVwKLQl2YXJfbGVuICs9IF9MRU47CQkJCQkJCVwKLQkJCQkJCQkJCQkJCVwKLQlfVlswXSA9ICh2YXJfbGVuICYgMHhGRjAwKSA+PiA4OwkJCVwKLQlfVlsxXSA9ICh2YXJfbGVuICYgMHhGRik7CQkJCQlcCi19Ci0KLSNkZWZpbmUJQ09OVl9BUlJBUllfVE9fdTE2KF9WKQkoKF9WWzBdPDw4KSB8IChfVlsxXSkpCi0KLSNkZWZpbmUJQUREX09ORV9Ub182NEJJVF9WQVIoX1YpCQlcCi17CQkJCQkJCQkJCVwKLQl1OAljbnQgPSBMRU5fS0VZX0RFU0NfUkVQTEFZOwlcCi0JZG8JCQkJCQkJCQlcCi0JewkJCQkJCQkJCVwKLQkJY250LS07CQkJCQkJCVwKLQkJX1ZbY250XSsrOwkJCQkJCVwKLQkJaWYgKGNudCA9PSAwKQkJCQkJXAotCQkJYnJlYWs7CQkJCQkJXAotCX13aGlsZSAoX1ZbY250XSA9PSAwKTsJCQkJXAotfQotCi0jZGVmaW5lIElTX1dQQV9DQVBBQklMSVRZKGEpICAgICAgICgoKGEpID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkgJiYgKChhKSA8PSBOZGlzODAyXzExQXV0aE1vZGVXUEExUFNLV1BBMlBTSykpCi0KLS8qIEVBUE9MIEtleSBJbmZvcm1hdGlvbiBkZWZpbml0aW9uIHdpdGhpbiBLZXkgZGVzY3JpcHRvciBmb3JtYXQgKi8KLXN0cnVjdCBQQUNLRUQgcnRfa2V5X2luZm8gewotCXU4IEtleU1pYzoxOwotCXU4IFNlY3VyZToxOwotCXU4IEVycm9yOjE7Ci0JdTggUmVxdWVzdDoxOwotCXU4IEVLRF9ETDoxOwkJLyogRUtEIGZvciBBUDsgREwgZm9yIFNUQSAqLwotCXU4IFJzdmQ6MzsKLQl1OCBLZXlEZXNjVmVyOjM7Ci0JdTggS2V5VHlwZToxOwotCXU4IEtleUluZGV4OjI7Ci0JdTggSW5zdGFsbDoxOwotCXU4IEtleUFjazoxOwotfTsKLQotLyogRUFQT0wgS2V5IGRlc2NyaXB0b3IgZm9ybWF0ICovCi1zdHJ1Y3QgUEFDS0VEIHJ0X2tleV9kZXNjcmlwdGVyIHsKLQl1OCBUeXBlOwotCXN0cnVjdCBydF9rZXlfaW5mbyBLZXlJbmZvOwotCXU4IEtleUxlbmd0aFsyXTsKLQl1OCBSZXBsYXlDb3VudGVyW0xFTl9LRVlfREVTQ19SRVBMQVldOwotCXU4IEtleU5vbmNlW0xFTl9LRVlfREVTQ19OT05DRV07Ci0JdTggS2V5SXZbTEVOX0tFWV9ERVNDX0lWXTsKLQl1OCBLZXlSc2NbTEVOX0tFWV9ERVNDX1JTQ107Ci0JdTggS2V5SWRbTEVOX0tFWV9ERVNDX0lEXTsKLQl1OCBLZXlNaWNbTEVOX0tFWV9ERVNDX01JQ107Ci0JdTggS2V5RGF0YUxlblsyXTsKLQl1OCBLZXlEYXRhW01BWF9MRU5fT0ZfUlNOSUVdOwotfTsKLQotc3RydWN0IFBBQ0tFRCBydF9lYXBvbF9wYWNrZXQgewotCXU4IFByb1ZlcjsKLQl1OCBQcm9UeXBlOwotCXU4IEJvZHlfTGVuWzJdOwotCXN0cnVjdCBydF9rZXlfZGVzY3JpcHRlciBLZXlEZXNjOwotfTsKLQotLyo4MDIuMTFpIEQxMCBwYWdlIDgzICovCi1zdHJ1Y3QgUEFDS0VEIHJ0X2d0a19lbmNhcCB7Ci0JdTggS2lkOjI7Ci0JdTggdHg6MTsKLQl1OCByc3Y6NTsKLQl1OCByc3YxOwotCXU4IEdUS1tUS0lQX0dUS19MRU5HVEhdOwotfTsKLQotc3RydWN0IFBBQ0tFRCBydF9rZGVfZW5jYXAgewotCXU4IFR5cGU7Ci0JdTggTGVuOwotCXU4IE9VSVszXTsKLQl1OCBEYXRhVHlwZTsKLQlzdHJ1Y3QgcnRfZ3RrX2VuY2FwIEdUS0VuY2FwOwotfTsKLQotLyogRm9yIFdQQTEgKi8KLXN0cnVjdCBQQUNLRUQgcnRfcnNuaWUgewotCXU4IG91aVs0XTsKLQl1MTYgdmVyc2lvbjsKLQl1OCBtY2FzdFs0XTsKLQl1MTYgdWNvdW50OwotCXN0cnVjdCBQQUNLRUQgewotCQl1OCBvdWlbNF07Ci0JfSB1Y2FzdFsxXTsKLX07Ci0KLS8qIEZvciBXUEEyICovCi1zdHJ1Y3QgUEFDS0VEIHJ0X3JzbmllMiB7Ci0JdTE2IHZlcnNpb247Ci0JdTggbWNhc3RbNF07Ci0JdTE2IHVjb3VudDsKLQlzdHJ1Y3QgUEFDS0VEIHsKLQkJdTggb3VpWzRdOwotCX0gdWNhc3RbMV07Ci19OwotCi0vKiBBS00gU3VpdGUgKi8KLXN0cnVjdCBQQUNLRUQgcnRfcnNuaWVfYXV0aCB7Ci0JdTE2IGFjb3VudDsKLQlzdHJ1Y3QgUEFDS0VEIHsKLQkJdTggb3VpWzRdOwotCX0gYXV0aFsxXTsKLX07Ci0KLXR5cGVkZWYgdW5pb24gUEFDS0VEIF9SU05fQ0FQQUJJTElUSUVTIHsKLQlzdHJ1Y3QgUEFDS0VEIHsKLQkJdTE2IFByZUF1dGg6MTsKLQkJdTE2IE5vX1BhaXJ3aXNlOjE7Ci0JCXUxNiBQVEtTQV9SX0NvdW50ZXI6MjsKLQkJdTE2IEdUS1NBX1JfQ291bnRlcjoyOwotCQl1MTYgUnN2ZDoxMDsKLQl9IGZpZWxkOwotCXUxNiB3b3JkOwotfSBSU05fQ0FQQUJJTElUSUVTLCAqUFJTTl9DQVBBQklMSVRJRVM7Ci0KLXN0cnVjdCBQQUNLRUQgcnRfZWFwX2hkciB7Ci0JdTggUHJvVmVyOwotCXU4IFByb1R5cGU7Ci0JdTggQm9keV9MZW5bMl07Ci0JdTggY29kZTsKLQl1OCBpZGVudGlmaWVyOwotCXU4IGxlbmd0aFsyXTsJLyogaW5jbHVkaW5nIGNvZGUgYW5kIGlkZW50aWZpZXIsIGZvbGxvd2VkIGJ5IGxlbmd0aC0yIG9jdGV0cyBvZiBkYXRhICovCi19OwotCi0vKiBGb3Igc3VwcGxpY2FudCBzdGF0ZSBtYWNoaW5lIHN0YXRlcy4gODAyLjExaSBEcmFmdCA0LjEsIHAuIDk3ICovCi0vKiBXZSBzaW1wbGlmaWVkIGl0ICovCi10eXBlZGVmIGVudW0gX1dwYVN0YXRlIHsKLQlTU19OT1RVU0UsCQkvKiAwICovCi0JU1NfU1RBUlQsCQkvKiAxICovCi0JU1NfV0FJVF9NU0dfMywJCS8qIDIgKi8KLQlTU19XQUlUX0dST1VQLAkJLyogMyAqLwotCVNTX0ZJTklTSCwJCS8qIDQgKi8KLQlTU19LRVlVUERBVEUsCQkvKiA1ICovCi19IFdQQV9TVEFURTsKLQotLyogKi8KLS8qICAgICAgVGhlIGRlZmluaXRpb24gb2YgdGhlIGNpcGhlciBjb21iaW5hdGlvbiAqLwotLyogKi8KLS8qICAgICAgIGJpdDMgICBiaXQyICBiaXQxICAgYml0MCAqLwotLyogICAgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsgKi8KLS8qICAgICAgfCAgICAgICAgIFdQQSAgICB8ICAgICAgICAgV1BBMiAgIHwgKi8KLS8qICAgICAgKy0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0rICovCi0vKiAgICAgIHwgVEtJUCB8IEFFUyB8IFRLSVAgfCBBRVMgfCAqLwotLyogICAgICB8ICAgICAgIDAgIHwgIDEgIHwgICAxICB8ICAwICB8IC0+IDB4MDYgKi8KLS8qICAgICAgfCAgICAgICAwICB8ICAxICB8ICAgMSAgfCAgMSAgfCAtPiAweDA3ICovCi0vKiAgICAgIHwgICAgICAgMSAgfCAgMCAgfCAgIDAgIHwgIDEgIHwgLT4gMHgwOSAqLwotLyogICAgICB8ICAgICAgIDEgIHwgIDAgIHwgICAxICB8ICAxICB8IC0+IDB4MEIgKi8KLS8qICAgICAgfCAgICAgICAxICB8ICAxICB8ICAgMCAgfCAgMSAgfCAtPiAweDBEICovCi0vKiAgICAgIHwgICAgICAgMSAgfCAgMSAgfCAgIDEgIHwgIDAgIHwgLT4gMHgwRSAqLwotLyogICAgICB8ICAgICAgIDEgIHwgIDEgIHwgICAxICB8ICAxICB8IC0+IDB4MEYgKi8KLS8qICAgICAgKy0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0rICovCi0vKiAqLwotdHlwZWRlZiBlbnVtIF9XcGFNaXhQYWlyQ2lwaGVyIHsKLQlNSVhfQ0lQSEVSX05PVFVTRSA9IDB4MDAsCi0JV1BBX05PTkVfV1BBMl9US0lQQUVTID0gMHgwMywJLyogV1BBMi1US0lQQUVTICovCi0JV1BBX0FFU19XUEEyX1RLSVAgPSAweDA2LAotCVdQQV9BRVNfV1BBMl9US0lQQUVTID0gMHgwNywKLQlXUEFfVEtJUF9XUEEyX0FFUyA9IDB4MDksCi0JV1BBX1RLSVBfV1BBMl9US0lQQUVTID0gMHgwQiwKLQlXUEFfVEtJUEFFU19XUEEyX05PTkUgPSAweDBDLAkvKiBXUEEtVEtJUEFFUyAqLwotCVdQQV9US0lQQUVTX1dQQTJfQUVTID0gMHgwRCwKLQlXUEFfVEtJUEFFU19XUEEyX1RLSVAgPSAweDBFLAotCVdQQV9US0lQQUVTX1dQQTJfVEtJUEFFUyA9IDB4MEYsCi19IFdQQV9NSVhfUEFJUl9DSVBIRVI7Ci0KLXN0cnVjdCBQQUNLRUQgcnRfcnNuX2llX2hlYWRlciB7Ci0JdTggRWlkOwotCXU4IExlbmd0aDsKLQl1MTYgVmVyc2lvbjsJCS8qIExpdHRsZSBlbmRpYW4gZm9ybWF0ICovCi19OwotCi0vKiBDaXBoZXIgc3VpdGUgc2VsZWN0b3IgdHlwZXMgKi8KLXN0cnVjdCBQQUNLRUQgcnRfY2lwaGVyX3N1aXRlX3N0cnVjdCB7Ci0JdTggT3VpWzNdOwotCXU4IFR5cGU7Ci19OwotCi0vKiBBdXRoZW50aWNhdGlvbiBhbmQgS2V5IE1hbmFnZW1lbnQgc3VpdGUgc2VsZWN0b3IgKi8KLXN0cnVjdCBQQUNLRUQgcnRfYWttX3N1aXRlIHsKLQl1OCBPdWlbM107Ci0JdTggVHlwZTsKLX07Ci0KLS8qIFJTTiBjYXBhYmlsaXR5ICovCi1zdHJ1Y3QgUEFDS0VEIHJ0X3Jzbl9jYXBhYmlsaXR5IHsKLQl1MTYgUnN2OjEwOwotCXUxNiBHVEtTQVJlcGxheUNudDoyOwotCXUxNiBQVEtTQVJlcGxheUNudDoyOwotCXUxNiBOb1BhaXJ3aXNlOjE7Ci0JdTE2IFByZUF1dGg6MTsKLX07Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCVRoZSBwcm90b3R5cGUgaXMgZGVmaW5lZCBpbiBjbW1fd3BhLmMKLSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1CT09MRUFOIFdwYU1zZ1R5cGVTdWJzdCh1OCBFQVBUeXBlLCBpbnQgKk1zZ1R5cGUpOwotCi12b2lkIFBSRih1OCAqa2V5LCBpbnQga2V5X2xlbiwgdTggKnByZWZpeCwgaW50IHByZWZpeF9sZW4sCi0JIHU4ICpkYXRhLCBpbnQgZGF0YV9sZW4sIHU4ICpvdXRwdXQsIGludCBsZW4pOwotCi1pbnQgUGFzc3dvcmRIYXNoKGNoYXIgKnBhc3N3b3JkLAotCQkgdW5zaWduZWQgY2hhciAqc3NpZCwgaW50IHNzaWRsZW5ndGgsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCk7Ci0KLXU4ICpHZXRTdWl0ZUZyb21SU05JRSh1OCAqcnNuaWUsIHUzMiByc25pZV9sZW4sIHU4IHR5cGUsIHU4ICpjb3VudCk7Ci0KLXZvaWQgV3BhU2hvd0FsbHN1aXRlKHU4ICpyc25pZSwgdTMyIHJzbmllX2xlbik7Ci0KLXZvaWQgUlRNUEluc2VydFJTTklFKHU4ICpwRnJhbWVCdWYsCi0JCSAgICAgdW5zaWduZWQgbG9uZyAqcEZyYW1lTGVuLAotCQkgICAgIHU4ICpyc25pZV9wdHIsCi0JCSAgICAgdTggcnNuaWVfbGVuLAotCQkgICAgIHU4ICpwbWtpZF9wdHIsIHU4IHBta2lkX2xlbik7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTg4NjgwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotY29uZmlnIFJUMjg3MAotCXRyaXN0YXRlICJSYWxpbmsgMjg3MC8zMDcwIHdpcmVsZXNzIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IgJiYgKFg4NiB8fCBBUk0pICYmIFdMQU4KLQlzZWxlY3QgV0lSRUxFU1NfRVhUCi0Jc2VsZWN0IFdFWFRfUFJJVgotCXNlbGVjdCBDUkNfQ0NJVFQKLQlzZWxlY3QgRldfTE9BREVSCi0JLS0taGVscC0tLQotCSAgVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZHJpdmVyIGZvciB0aGUgUmFsaW5rIHh4NzAgd2lyZWxlc3MgY2hpcHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ5OTkxMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotIwotb2JqLSQoQ09ORklHX1JUMjg3MCkJKz0gcnQyODcwc3RhLm8KLQotIyBUT0RPOiBhbGwgb2YgdGhlc2Ugc2hvdWxkIGJlIHJlbW92ZWQKLWNjZmxhZ3MteSA6PSAtRExJTlVYIC1EQUdHUkVHQVRJT05fU1VQUE9SVCAtRFBJR0dZQkFDS19TVVBQT1JUIC1EV01NX1NVUFBPUlQKLWNjZmxhZ3MteSArPSAtRFJUTVBfTUFDX1VTQiAtRFJUTVBfVVNCX1NVUFBPUlQgLURSVDI4NzAgLURSVE1QX1RJTUVSX1RBU0tfU1VQUE9SVAotY2NmbGFncy15ICs9IC1EUlRNUF9SRl9SV19TVVBQT1JUIC1EUlRNUF9FRlVTRV9TVVBQT1JUIC1EUlQzMHh4IC1EUlQzMDcwCi1jY2ZsYWdzLXkgKz0gLUREQkcKLQotcnQyODcwc3RhLXkgOj0JCVwKLQljb21tb24vY3J5cHRfbWQ1Lm8JXAotCWNvbW1vbi9jcnlwdF9zaGEyLm8JXAotCWNvbW1vbi9jcnlwdF9obWFjLm8JXAotCWNvbW1vbi9tbG1lLm8JCVwKLQljb21tb24vY21tX3dlcC5vCVwKLQljb21tb24vYWN0aW9uLm8JCVwKLQljb21tb24vY21tX2RhdGEubwlcCi0JY29tbW9uL3J0bXBfaW5pdC5vCVwKLQljb21tb24vY21tX3RraXAubwlcCi0JY29tbW9uL2NtbV9hZXMubwlcCi0JY29tbW9uL2NtbV9zeW5jLm8JXAotCWNvbW1vbi9lZXByb20ubwkJXAotCWNvbW1vbi9jbW1fc2FuaXR5Lm8JXAotCWNvbW1vbi9jbW1faW5mby5vCVwKLQljb21tb24vY21tX2NmZy5vCVwKLQljb21tb24vY21tX3dwYS5vCVwKLQljb21tb24vZGZzLm8JCVwKLQljb21tb24vc3BlY3RydW0ubwlcCi0JY29tbW9uL3J0bXBfdGltZXIubwlcCi0JY29tbW9uL3J0X2NoYW5uZWwubwlcCi0JY29tbW9uL2NtbV9hc2ljLm8JXAotCXN0YS9hc3NvYy5vCQlcCi0Jc3RhL2F1dGgubwkJXAotCXN0YS9hdXRoX3JzcC5vCQlcCi0Jc3RhL3N5bmMubwkJXAotCXN0YS9zYW5pdHkubwkJXAotCXN0YS9ydG1wX2RhdGEubwkJXAotCXN0YS9jb25uZWN0Lm8JCVwKLQlzdGEvd3BhLm8JCVwKLQlydF9saW51eC5vCQlcCi0JcnRfbWFpbl9kZXYubwkJXAotCXN0YV9pb2N0bC5vCQlcCi0JY29tbW9uL2JhX2FjdGlvbi5vCVwKLQl1c2JfbWFpbl9kZXYubwkJXAotCXJ0X3VzYi5vCQlcCi0JY29tbW9uL2NtbV9tYWNfdXNiLm8JXAotCWNvbW1vbi9ydHVzYl9pby5vCVwKLQljb21tb24vcnR1c2JfYnVsay5vCVwKLQljb21tb24vcnR1c2JfZGF0YS5vCVwKLQljb21tb24vY21tX2RhdGFfdXNiLm8JXAotCWNvbW1vbi9ydG1wX21jdS5vCVwKLQljb21tb24vZWVfZWZ1c2UubwlcCi0JY2hpcHMvcnQzMHh4Lm8JCVwKLQljb21tb24vcnRfcmYubwkJXAotCWNoaXBzL3J0MzA3MC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL1RPRE8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkZjFiZmUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9UT0RPCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotSSdtIGhlc2l0YW50IHRvIGFkZCBhIFRPRE8gZmlsZSBoZXJlLCBhcyB0aGUgd2lyZWxlc3MgZGV2ZWxvcGVycyB3b3VsZAotcmVhbGx5IGhhdmUgcGVvcGxlIGhlbHAgdGhlbSBvdXQgb24gdGhlICJjbGVhbiIgcnQyODcwIGRyaXZlciB0aGF0IGNhbgotYmUgZm91bmQgYXQgdGhlIGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbS8gc2l0ZS4KLQotQnV0LCBpZiB5b3Ugd2lzaCB0byBjbGVhbiB1cCB0aGlzIGRyaXZlciBpbnN0ZWFkLCBoZXJlJ3MgYSBzaG9ydCBsaXN0IG9mCi10aGluZ3MgdGhhdCBuZWVkIHRvIGJlIGRvbmUgdG8gZ2V0IGl0IGludG8gYSBtb3JlIG1lcmdhYmxlIHNoYXBlOgotCi1UT0RPOgotCS0gY2hlY2twYXRjaC5wbCBjbGVhbgotCS0gc3BhcnNlIGNsZWFuCi0JLSBwb3J0IHRvIGluLWtlcm5lbCA4MDIxMSBzdGFjayBhbmQgY29tbW9uIHJ0MngwMCBpbmZyYXN0cnVjdHVyZQotCS0gcmVtb3ZlIHJlYWRpbmcgZnJvbSAvZXRjLyBjb25maWcgZmlsZXMKLQktIHJldmlldyBieSB0aGUgd2lyZWxlc3MgZGV2ZWxvcGVyIGNvbW11bml0eQotCi1QbGVhc2Ugc2VuZCBhbnkgcGF0Y2hlcyBvciBjb21wbGFpbnRzIGFib3V0IHRoaXMgZHJpdmVyIHRvIEdyZWcKLUtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPiBhbmQgZG9uJ3QgYm90aGVyIHRoZSB1cHN0cmVhbSB3aXJlbGVzcwota2VybmVsIGRldmVsb3BlcnMgYWJvdXQgaXQsIHRoZXkgd2FudCBub3RoaW5nIHRvIGRvIHdpdGggaXQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2Fpcm9uZXQuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvYWlyb25ldC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTYyNTk3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvYWlyb25ldC5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgIi4uL3J0Mjg2MC9haXJvbmV0LmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2FwLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2FwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlMDRiNWYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9hcC5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgIi4uL3J0Mjg2MC9hcC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jaGlwcy9ydDMwNzAuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY2hpcHMvcnQzMDcwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhNmRiNWUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jaGlwcy9ydDMwNzAuYworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlICIuLi8uLi9ydDI4NjAvY2hpcHMvcnQzMDcwLmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NoaXBzL3J0MzB4eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jaGlwcy9ydDMweHguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM1NmI4NC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NoaXBzL3J0MzB4eC5jCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgIi4uLy4uL3J0Mjg2MC9jaGlwcy9ydDMweHguYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY2hsaXN0LmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NobGlzdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTk5OTU4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY2hsaXN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSAiLi4vcnQyODYwL2NobGlzdC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vYWNjdGlvbi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vYWNjdGlvbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDgwNmMzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL2FjY3Rpb24uYworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlICIuLi8uLi9ydDI4NjAvY29tbW9uL2FjdGlvbi5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vYWN0aW9uLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9hY3Rpb24uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ4MDZjMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9hY3Rpb24uYworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlICIuLi8uLi9ydDI4NjAvY29tbW9uL2FjdGlvbi5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vYWN0aW9uLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9hY3Rpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWExODk1NS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9hY3Rpb24uaAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlICIuLi8uLi9ydDI4NjAvY29tbW9uL2FjdGlvbi5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vYmFfYWN0aW9uLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9iYV9hY3Rpb24uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTllNmEwOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9iYV9hY3Rpb24uYworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlICIuLi8uLi9ydDI4NjAvY29tbW9uL2JhX2FjdGlvbi5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vY21tX2Flcy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vY21tX2Flcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWQ2YTE0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL2NtbV9hZXMuYworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlICIuLi8uLi9ydDI4NjAvY29tbW9uL2NtbV9hZXMuYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL2NtbV9hc2ljLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9jbW1fYXNpYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGRlODE3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL2NtbV9hc2ljLmMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSAiLi4vLi4vcnQyODYwL2NvbW1vbi9jbW1fYXNpYy5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vY21tX2NmZy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vY21tX2NmZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjJiZGQ3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL2NtbV9jZmcuYworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlICIuLi8uLi9ydDI4NjAvY29tbW9uL2NtbV9jZmcuYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL2NtbV9kYXRhLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9jbW1fZGF0YS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjc3NWMzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL2NtbV9kYXRhLmMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSAiLi4vLi4vcnQyODYwL2NvbW1vbi9jbW1fZGF0YS5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vY21tX2RhdGFfdXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9jbW1fZGF0YV91c2IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzA0Njc1Zi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9jbW1fZGF0YV91c2IuYworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlICIuLi8uLi9ydDI4NjAvY29tbW9uL2NtbV9kYXRhX3VzYi5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vY21tX2luZm8uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL2NtbV9pbmZvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyNjE4N2UuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vY21tX2luZm8uYworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlICIuLi8uLi9ydDI4NjAvY29tbW9uL2NtbV9pbmZvLmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9jbW1fbWFjX3VzYi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vY21tX21hY191c2IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI2YWY0YS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9jbW1fbWFjX3VzYi5jCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgIi4uLy4uL3J0Mjg2MC9jb21tb24vY21tX21hY191c2IuYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL2NtbV9wcm9maWxlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9jbW1fcHJvZmlsZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTI2ZTQ1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL2NtbV9wcm9maWxlLmMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSAiLi4vLi4vcnQyODYwL2NvbW1vbi9jbW1fcHJvZmlsZS5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vY21tX3Nhbml0eS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vY21tX3Nhbml0eS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjMzNTIxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL2NtbV9zYW5pdHkuYworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlICIuLi8uLi9ydDI4NjAvY29tbW9uL2NtbV9zYW5pdHkuYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL2NtbV9zeW5jLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9jbW1fc3luYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTcyMjFkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL2NtbV9zeW5jLmMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSAiLi4vLi4vcnQyODYwL2NvbW1vbi9jbW1fc3luYy5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vY21tX3RraXAuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL2NtbV90a2lwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3M2M3MWIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vY21tX3RraXAuYworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlICIuLi8uLi9ydDI4NjAvY29tbW9uL2NtbV90a2lwLmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9jbW1fd2VwLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9jbW1fd2VwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmNjgxMDcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vY21tX3dlcC5jCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgIi4uLy4uL3J0Mjg2MC9jb21tb24vY21tX3dlcC5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vY21tX3dwYS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vY21tX3dwYS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGE1NGJiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL2NtbV93cGEuYworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlICIuLi8uLi9ydDI4NjAvY29tbW9uL2NtbV93cGEuYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL2NyeXB0X2htYWMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL2NyeXB0X2htYWMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRkODRlNy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9jcnlwdF9obWFjLmMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSAiLi4vLi4vcnQyODYwL2NvbW1vbi9jcnlwdF9obWFjLmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9jcnlwdF9tZDUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL2NyeXB0X21kNS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTdhMmNhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL2NyeXB0X21kNS5jCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgIi4uLy4uL3J0Mjg2MC9jb21tb24vY3J5cHRfbWQ1LmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9jcnlwdF9zaGEyLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9jcnlwdF9zaGEyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3ZmZiMzAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vY3J5cHRfc2hhMi5jCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgIi4uLy4uL3J0Mjg2MC9jb21tb24vY3J5cHRfc2hhMi5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vZGZzLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9kZnMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWMyZGE0Yy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9kZnMuYworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlICIuLi8uLi9ydDI4NjAvY29tbW9uL2Rmcy5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vZWVfZWZ1c2UuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL2VlX2VmdXNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlMzRlNjUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vZWVfZWZ1c2UuYworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlICIuLi8uLi9ydDI4NjAvY29tbW9uL2VlX2VmdXNlLmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9lZXByb20uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL2VlcHJvbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWYwOTY1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL2VlcHJvbS5jCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgIi4uLy4uL3J0Mjg2MC9jb21tb24vZWVwcm9tLmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9tZDUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL21kNS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTU2NDVjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL21kNS5jCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgIi4uLy4uL3J0Mjg2MC9jb21tb24vbWQ1LmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9tbG1lLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9tbG1lLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4ODA0MGEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vbWxtZS5jCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgIi4uLy4uL3J0Mjg2MC9jb21tb24vbWxtZS5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vcnRfY2hhbm5lbC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vcnRfY2hhbm5lbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGNlYjRjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL3J0X2NoYW5uZWwuYworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlICIuLi8uLi9ydDI4NjAvY29tbW9uL3J0X2NoYW5uZWwuYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL3J0X3JmLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9ydF9yZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODFjZmYzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL3J0X3JmLmMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSAiLi4vLi4vcnQyODYwL2NvbW1vbi9ydF9yZi5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vcnRtcF9pbml0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9ydG1wX2luaXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVmMTBlZi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9ydG1wX2luaXQuYworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlICIuLi8uLi9ydDI4NjAvY29tbW9uL3J0bXBfaW5pdC5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vcnRtcF9tY3UuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL3J0bXBfbWN1LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwYjdmMTMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vcnRtcF9tY3UuYworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlICIuLi8uLi9ydDI4NjAvY29tbW9uL3J0bXBfbWN1LmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9ydG1wX3RpbWVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9ydG1wX3RpbWVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkNGFlZGMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vcnRtcF90aW1lci5jCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgIi4uLy4uL3J0Mjg2MC9jb21tb24vcnRtcF90aW1lci5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vcnRtcF90a2lwLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9ydG1wX3RraXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQwYmY2Ny4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9ydG1wX3RraXAuYworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlICIuLi8uLi9ydDI4NjAvY29tbW9uL3J0bXBfdGtpcC5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vcnRtcF93ZXAuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL3J0bXBfd2VwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMjU1YWQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vcnRtcF93ZXAuYworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlICIuLi8uLi9ydDI4NjAvY29tbW9uL3J0bXBfd2VwLmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9ydHVzYl9idWxrLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9ydHVzYl9idWxrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3OWI4MDIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vcnR1c2JfYnVsay5jCisrKyAvZGV2L251bGwKQEAgLTEsMTIzMiArMCwwIEBACi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFJhbGluayBUZWNoIEluYy4KLSAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKLSAqIEhzaW5jaHUgQ291bnR5IDMwMiwKLSAqIFRhaXdhbiwgUi5PLkMuCi0gKgotICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotCU1vZHVsZSBOYW1lOgotCXJ0dXNiX2J1bGsuYwotCi0JQWJzdHJhY3Q6Ci0KLQlSZXZpc2lvbiBIaXN0b3J5OgotCVdobwkJCVdoZW4JCVdoYXQKLQktLS0tLS0tLQktLS0tLS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlOYW1lCQlEYXRlCQlNb2RpZmljYXRpb24gbG9ncwotCVBhdWwgTGluCTA2LTI1LTIwMDQJY3JlYXRlZAotCi0qLwotCi0jaWZkZWYgUlRNUF9NQUNfVVNCCi0KLSNpbmNsdWRlICIuLi9ydF9jb25maWcuaCIKLS8qIE1hdGNoIHRvdGFsIDYgYnVsa291dCBlbmRwb2ludCB0byBjb3JyZXNwb25kaW5nIHF1ZXVlLiAqLwotdTggRXBUb1F1ZXVlWzZdID0KLSAgICB7IEZJRk9fRURDQSwgRklGT19FRENBLCBGSUZPX0VEQ0EsIEZJRk9fRURDQSwgRklGT19FRENBLCBGSUZPX01HTVQgfTsKLQotLypzdGF0aWMgQk9PTEVBTiBTaW5nbGVCdWxrT3V0ID0gRkFMU0U7ICovCi0KLXZvaWQgUlRVU0JfRklMTF9CVUxLX1VSQihzdHJ1Y3QgdXJiICpwVXJiLAotCQkJIHN0cnVjdCB1c2JfZGV2aWNlICpwVXNiX0RldiwKLQkJCSB1bnNpZ25lZCBpbnQgYnVsa3BpcGUsCi0JCQkgdm9pZCAqcFRyYW5zZmVyQnVmLAotCQkJIGludCBCdWZTaXplLCB1c2JfY29tcGxldGVfdCBDb21wbGV0ZSwgdm9pZCAqcENvbnRleHQpCi17Ci0KLQl1c2JfZmlsbF9idWxrX3VyYihwVXJiLCBwVXNiX0RldiwgYnVsa3BpcGUsIHBUcmFuc2ZlckJ1ZiwgQnVmU2l6ZSwKLQkJCSAgKHVzYl9jb21wbGV0ZV90KSBDb21wbGV0ZSwgcENvbnRleHQpOwotCi19Ci0KLXZvaWQgUlRVU0JJbml0VHhEZXNjKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgICBzdHJ1Y3QgcnRfdHhfY29udGV4dCAqcFR4Q29udGV4dCwKLQkJICAgICB1OCBCdWxrT3V0UGlwZUlkLCBJTiB1c2JfY29tcGxldGVfdCBGdW5jKQotewotCVBVUkIgcFVyYjsKLQl1OCAqcFNyYyA9IE5VTEw7Ci0Jc3RydWN0IG9zX2Nvb2tpZSAqcE9iaiA9IChzdHJ1Y3Qgb3NfY29va2llICopcEFkLT5PU19Db29raWU7Ci0KLQlwVXJiID0gcFR4Q29udGV4dC0+cFVyYjsKLQlBU1NFUlQocFVyYik7Ci0KLQkvKiBTdG9yZSBCdWxrT3V0IFBpcGVJZCAqLwotCXBUeENvbnRleHQtPkJ1bGtPdXRQaXBlSWQgPSBCdWxrT3V0UGlwZUlkOwotCi0JaWYgKHBUeENvbnRleHQtPmJBZ2dyZWdhdGlibGUpIHsKLQkJcFNyYyA9ICZwVHhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlci0+QWdncmVnYXRpb25bMl07Ci0JfSBlbHNlIHsKLQkJcFNyYyA9Ci0JCSAgICAodTggKilwVHhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlci0+ZmllbGQuV2lyZWxlc3NQYWNrZXQ7Ci0JfQotCi0JLypJbml0aWFsaXplIGEgdHggYnVsayB1cmIgKi8KLQlSVFVTQl9GSUxMX0JVTEtfVVJCKHBVcmIsCi0JCQkgICAgcE9iai0+cFVzYl9EZXYsCi0JCQkgICAgdXNiX3NuZGJ1bGtwaXBlKHBPYmotPnBVc2JfRGV2LAotCQkJCQkgICAgcEFkLT5CdWxrT3V0RXBBZGRyW0J1bGtPdXRQaXBlSWRdKSwKLQkJCSAgICBwU3JjLCBwVHhDb250ZXh0LT5CdWxrT3V0U2l6ZSwgRnVuYywgcFR4Q29udGV4dCk7Ci0KLQlpZiAocFR4Q29udGV4dC0+YkFnZ3JlZ2F0aWJsZSkKLQkJcFVyYi0+dHJhbnNmZXJfZG1hID0KLQkJICAgIChwVHhDb250ZXh0LT5kYXRhX2RtYSArIFRYX0JVRkZFUl9OT1JNU0laRSArIDIpOwotCWVsc2UKLQkJcFVyYi0+dHJhbnNmZXJfZG1hID0gcFR4Q29udGV4dC0+ZGF0YV9kbWE7Ci0KLQlwVXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKLQotfQotCi12b2lkIFJUVVNCSW5pdEhUVHhEZXNjKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgICAgIHN0cnVjdCBydF9odF90eF9jb250ZXh0ICpwVHhDb250ZXh0LAotCQkgICAgICAgdTggQnVsa091dFBpcGVJZCwKLQkJICAgICAgIHVuc2lnbmVkIGxvbmcgQnVsa091dFNpemUsIElOIHVzYl9jb21wbGV0ZV90IEZ1bmMpCi17Ci0JUFVSQiBwVXJiOwotCXU4ICpwU3JjID0gTlVMTDsKLQlzdHJ1Y3Qgb3NfY29va2llICpwT2JqID0gKHN0cnVjdCBvc19jb29raWUgKilwQWQtPk9TX0Nvb2tpZTsKLQotCXBVcmIgPSBwVHhDb250ZXh0LT5wVXJiOwotCUFTU0VSVChwVXJiKTsKLQotCS8qIFN0b3JlIEJ1bGtPdXQgUGlwZUlkICovCi0JcFR4Q29udGV4dC0+QnVsa091dFBpcGVJZCA9IEJ1bGtPdXRQaXBlSWQ7Ci0KLQlwU3JjID0KLQkgICAgJnBUeENvbnRleHQtPlRyYW5zZmVyQnVmZmVyLT5maWVsZC5XaXJlbGVzc1BhY2tldFtwVHhDb250ZXh0LT4KLQkJCQkJCQkgICAgICBOZXh0QnVsa091dFBvc2l0aW9uXTsKLQotCS8qSW5pdGlhbGl6ZSBhIHR4IGJ1bGsgdXJiICovCi0JUlRVU0JfRklMTF9CVUxLX1VSQihwVXJiLAotCQkJICAgIHBPYmotPnBVc2JfRGV2LAotCQkJICAgIHVzYl9zbmRidWxrcGlwZShwT2JqLT5wVXNiX0RldiwKLQkJCQkJICAgIHBBZC0+QnVsa091dEVwQWRkcltCdWxrT3V0UGlwZUlkXSksCi0JCQkgICAgcFNyYywgQnVsa091dFNpemUsIEZ1bmMsIHBUeENvbnRleHQpOwotCi0JcFVyYi0+dHJhbnNmZXJfZG1hID0KLQkgICAgKHBUeENvbnRleHQtPmRhdGFfZG1hICsgcFR4Q29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbik7Ci0JcFVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7Ci0KLX0KLQotdm9pZCBSVFVTQkluaXRSeERlc2Moc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBzdHJ1Y3QgcnRfcnhfY29udGV4dCAqcFJ4Q29udGV4dCkKLXsKLQlQVVJCIHBVcmI7Ci0Jc3RydWN0IG9zX2Nvb2tpZSAqcE9iaiA9IChzdHJ1Y3Qgb3NfY29va2llICopcEFkLT5PU19Db29raWU7Ci0JdW5zaWduZWQgbG9uZyBSWF9idWxrX3NpemU7Ci0KLQlwVXJiID0gcFJ4Q29udGV4dC0+cFVyYjsKLQlBU1NFUlQocFVyYik7Ci0KLQlpZiAocEFkLT5CdWxrSW5NYXhQYWNrZXRTaXplID09IDY0KQotCQlSWF9idWxrX3NpemUgPSA0MDk2OwotCWVsc2UKLQkJUlhfYnVsa19zaXplID0gTUFYX1JYQlVMS19TSVpFOwotCi0JLypJbml0aWFsaXplIGEgcnggYnVsayB1cmIgKi8KLQlSVFVTQl9GSUxMX0JVTEtfVVJCKHBVcmIsCi0JCQkgICAgcE9iai0+cFVzYl9EZXYsCi0JCQkgICAgdXNiX3JjdmJ1bGtwaXBlKHBPYmotPnBVc2JfRGV2LCBwQWQtPkJ1bGtJbkVwQWRkciksCi0JCQkgICAgJihwUnhDb250ZXh0LT4KLQkJCSAgICAgIFRyYW5zZmVyQnVmZmVyW3BBZC0+TmV4dFJ4QnVsa0luUG9zaXRpb25dKSwKLQkJCSAgICBSWF9idWxrX3NpemUgLSAocEFkLT5OZXh0UnhCdWxrSW5Qb3NpdGlvbiksCi0JCQkgICAgKHVzYl9jb21wbGV0ZV90KSBSVFVTQkJ1bGtSeENvbXBsZXRlLAotCQkJICAgICh2b2lkICopcFJ4Q29udGV4dCk7Ci0KLQlwVXJiLT50cmFuc2Zlcl9kbWEgPSBwUnhDb250ZXh0LT5kYXRhX2RtYSArIHBBZC0+TmV4dFJ4QnVsa0luUG9zaXRpb247Ci0JcFVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7Ci0KLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0KLQlBcmd1bWVudHM6Ci0KLQlSZXR1cm4gVmFsdWU6Ci0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotCi0jZGVmaW5lIEJVTEtfT1VUX0xPQ0socExvY2ssIElycUZsYWdzKQlcCi0JCWlmICgxIC8qIShpbl9pbnRlcnJ1cHQoKSAmIDB4ZmZmZjAwMDApKi8pCVwKLQkJCVJUTVBfSVJRX0xPQ0soKHBMb2NrKSwgSXJxRmxhZ3MpOwotCi0jZGVmaW5lIEJVTEtfT1VUX1VOTE9DSyhwTG9jaywgSXJxRmxhZ3MpCVwKLQkJaWYgKDEgLyohKGluX2ludGVycnVwdCgpICYgMHhmZmZmMDAwMCkqLykJXAotCQkJUlRNUF9JUlFfVU5MT0NLKChwTG9jayksIElycUZsYWdzKTsKLQotdm9pZCBSVFVTQkJ1bGtPdXREYXRhUGFja2V0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICB1OCBCdWxrT3V0UGlwZUlkLCB1OCBJbmRleCkKLXsKLQotCXN0cnVjdCBydF9odF90eF9jb250ZXh0ICpwSFRUWENvbnRleHQ7Ci0JUFVSQiBwVXJiOwotCWludCByZXQgPSAwOwotCXN0cnVjdCBydF90eGluZm8gKnBUeEluZm8sICpwTGFzdFR4SW5mbyA9IE5VTEw7Ci0Jc3RydWN0IHJ0X3R4d2kgKnBUeFdJOwotCXVuc2lnbmVkIGxvbmcgVG1wQnVsa0VuZFBvcywgVGhpc0J1bGtTaXplOwotCXVuc2lnbmVkIGxvbmcgSXJxRmxhZ3MgPSAwLCBJcnFGbGFnczIgPSAwOwotCXU4ICpwV2lyZWxlc3NQa3QsICpwQXBwZW5kYW50OwotCUJPT0xFQU4gYlR4UUxhc3RSb3VuZCA9IEZBTFNFOwotCXU4IGFsbHplcm9bNF0gPSB7IDB4MCwgMHgwLCAweDAsIDB4MCB9OwotCi0JQlVMS19PVVRfTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOwotCWlmICgocEFkLT5CdWxrT3V0UGVuZGluZ1tCdWxrT3V0UGlwZUlkXSA9PSBUUlVFKQotCSAgICB8fCBSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTkVFRF9TVE9QX1RYKSkgewotCQlCVUxLX09VVF9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKLQkJcmV0dXJuOwotCX0KLQlwQWQtPkJ1bGtPdXRQZW5kaW5nW0J1bGtPdXRQaXBlSWRdID0gVFJVRTsKLQotCWlmICghT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpCi0JICAgICkgewotCQlwQWQtPkJ1bGtPdXRQZW5kaW5nW0J1bGtPdXRQaXBlSWRdID0gRkFMU0U7Ci0JCUJVTEtfT1VUX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOwotCQlyZXR1cm47Ci0JfQotCUJVTEtfT1VUX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOwotCi0JcEhUVFhDb250ZXh0ID0gJihwQWQtPlR4Q29udGV4dFtCdWxrT3V0UGlwZUlkXSk7Ci0KLQlCVUxLX09VVF9MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MyKTsKLQlpZiAoKHBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gPT0KLQkgICAgIHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbikKLQkgICAgfHwgKChwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uIC0gOCkgPT0KLQkJcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uKSkgewotCQlCVUxLX09VVF9VTkxPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW0J1bGtPdXRQaXBlSWRdLAotCQkJCUlycUZsYWdzMik7Ci0KLQkJQlVMS19PVVRfTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOwotCQlwQWQtPkJ1bGtPdXRQZW5kaW5nW0J1bGtPdXRQaXBlSWRdID0gRkFMU0U7Ci0KLQkJLyogQ2xlYXIgRGF0YSBmbGFnICovCi0JCVJUVVNCX0NMRUFSX0JVTEtfRkxBRyhwQWQsCi0JCQkJICAgICAgKGZSVFVTQl9CVUxLX09VVF9EQVRBX0ZSQUcgPDwKLQkJCQkgICAgICAgQnVsa091dFBpcGVJZCkpOwotCQlSVFVTQl9DTEVBUl9CVUxLX0ZMQUcocEFkLAotCQkJCSAgICAgIChmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUwgPDwKLQkJCQkgICAgICAgQnVsa091dFBpcGVJZCkpOwotCi0JCUJVTEtfT1VUX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOwotCQlyZXR1cm47Ci0JfQotCS8qIENsZWFyIERhdGEgZmxhZyAqLwotCVJUVVNCX0NMRUFSX0JVTEtfRkxBRyhwQWQsCi0JCQkgICAgICAoZlJUVVNCX0JVTEtfT1VUX0RBVEFfRlJBRyA8PCBCdWxrT3V0UGlwZUlkKSk7Ci0JUlRVU0JfQ0xFQVJfQlVMS19GTEFHKHBBZCwKLQkJCSAgICAgIChmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUwgPDwgQnVsa091dFBpcGVJZCkpOwotCi0JLypEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkJ1bGtPdXQtQjpJPTB4JWx4LCBDV1Bvcz0lbGQsIENXUlBvcz0lbGQsIE5CUG9zPSVsZCwgRU5CUG9zPSVsZCwgYkNvcHk9JWQhXG4iLCBpbl9pbnRlcnJ1cHQoKSwgKi8KLQkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiwgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVJlYWxQb3MsIHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbiwgKi8KLQkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24sIHBIVFRYQ29udGV4dC0+YkNvcHlTYXZlUGFkKSk7ICovCi0JcEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uID0gcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbjsKLQlUaGlzQnVsa1NpemUgPSAwOwotCVRtcEJ1bGtFbmRQb3MgPSBwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb247Ci0JcFdpcmVsZXNzUGt0ID0gJnBIVFRYQ29udGV4dC0+VHJhbnNmZXJCdWZmZXItPmZpZWxkLldpcmVsZXNzUGFja2V0WzBdOwotCi0JaWYgKChwSFRUWENvbnRleHQtPmJDb3B5U2F2ZVBhZCA9PSBUUlVFKSkgewotCQlpZiAoUlRNUEVxdWFsTWVtb3J5KHBIVFRYQ29udGV4dC0+U2F2ZWRQYWQsIGFsbHplcm8sIDQpKSB7Ci0JCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsCi0JCQkJICAgICAoImUxLCBhbGx6ZXJvIDogJXggICV4ICAleCAgJXggICV4ICAleCAgJXggICV4IFxuIiwKLQkJCQkgICAgICBwSFRUWENvbnRleHQtPlNhdmVkUGFkWzBdLAotCQkJCSAgICAgIHBIVFRYQ29udGV4dC0+U2F2ZWRQYWRbMV0sCi0JCQkJICAgICAgcEhUVFhDb250ZXh0LT5TYXZlZFBhZFsyXSwKLQkJCQkgICAgICBwSFRUWENvbnRleHQtPlNhdmVkUGFkWzNdCi0JCQkJICAgICAgLCBwSFRUWENvbnRleHQtPlNhdmVkUGFkWzRdLAotCQkJCSAgICAgIHBIVFRYQ29udGV4dC0+U2F2ZWRQYWRbNV0sCi0JCQkJICAgICAgcEhUVFhDb250ZXh0LT5TYXZlZFBhZFs2XSwKLQkJCQkgICAgICBwSFRUWENvbnRleHQtPlNhdmVkUGFkWzddKSk7Ci0JCX0KLQkJTmRpc01vdmVNZW1vcnkoJnBXaXJlbGVzc1BrdFtUbXBCdWxrRW5kUG9zXSwKLQkJCSAgICAgICBwSFRUWENvbnRleHQtPlNhdmVkUGFkLCA4KTsKLQkJcEhUVFhDb250ZXh0LT5iQ29weVNhdmVQYWQgPSBGQUxTRTsKLQkJaWYgKHBBZC0+YkZvcmNlUHJpbnRUWCA9PSBUUlVFKQotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJICgiUlRVU0JCdWxrT3V0RGF0YVBhY2tldCAtLT4gQ09QWSBQQUQuIEN1cldyaXRlID0gJWxkLCBOZXh0QnVsayA9ICVsZC4gICBFTmV4dEJ1bGsgPSAlbGQuXG4iLAotCQkJCSAgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uLAotCQkJCSAgcEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uLAotCQkJCSAgcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbikpOwotCX0KLQotCWRvIHsKLQkJcFR4SW5mbyA9IChzdHJ1Y3QgcnRfdHhpbmZvICopJnBXaXJlbGVzc1BrdFtUbXBCdWxrRW5kUG9zXTsKLQkJcFR4V0kgPQotCQkJKHN0cnVjdCBydF90eHdpICopJnBXaXJlbGVzc1BrdFtUbXBCdWxrRW5kUG9zICsgVFhJTkZPX1NJWkVdOwotCi0JCWlmIChwQWQtPmJGb3JjZVByaW50VFggPT0gVFJVRSkKLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCSAoIlJUVVNCQnVsa091dERhdGFQYWNrZXQgQU1QRFUgPSAlZC5cbiIsCi0JCQkJICBwVHhXSS0+QU1QRFUpKTsKLQotCQkvKiBhZGQgYnkgSXZlcnNvbiwgbGltaXQgQnVsa091dCBzaXplIHRvIDRrIHRvIHBhc3MgV01NIGIgbW9kZSAyVDFSIHRlc3QgaXRlbXMgKi8KLQkJLyppZiAoKFRoaXNCdWxrU2l6ZSAhPSAwKSAgJiYgKHBUeFdJLT5BTVBEVSA9PSAwKSkgKi8KLQkJaWYgKChUaGlzQnVsa1NpemUgIT0gMCkgJiYgKHBUeFdJLT5QSFlNT0RFID09IE1PREVfQ0NLKSkgewotCQkJaWYgKCgoVGhpc0J1bGtTaXplICYgMHhmZmZmODAwMCkgIT0gMCkKLQkJCSAgICB8fCAoKFRoaXNCdWxrU2l6ZSAmIDB4MTAwMCkgPT0gMHgxMDAwKSkgewotCQkJCS8qIExpbWl0IEJ1bGtPdXQgc2l6ZSB0byBhYm91dCA0ayBieXRlcy4gKi8KLQkJCQlwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uID0KLQkJCQkgICAgVG1wQnVsa0VuZFBvczsKLQkJCQlicmVhazsKLQkJCX0gZWxzZQotCQkJICAgIGlmICgoKHBBZC0+QnVsa091dE1heFBhY2tldFNpemUgPCA1MTIpCi0JCQkJICYmICgoVGhpc0J1bGtTaXplICYgMHhmZmZmZjgwMCkgIT0KLQkJCQkgICAgIDApKQotCQkJCS8qfHwgKCAoVGhpc0J1bGtTaXplICE9IDApICAmJiAocFR4V0ktPkFNUERVID09IDApKSAqLwotCQkJCSkgewotCQkJCS8qIEZvciBVU0IgMS4xIG9yIHBlZXIgd2hpY2ggZGlkbid0IHN1cHBvcnQgQU1QRFUsIGxpbWl0IHRoZSBCdWxrT3V0IHNpemUuICovCi0JCQkJLyogRm9yIHBlcmZvcm1hbmNlIGluIGIvZyBtb2RlLCBub3cganVzdCBjaGVjayBmb3IgVVNCIDEuMSBhbmQgZGlkbid0IGNhcmUgYWJvdXQgdGhlIEFQTURVIG9yIG5vdCEgMjAwOC8wNi8wNC4gKi8KLQkJCQlwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uID0KLQkJCQkgICAgVG1wQnVsa0VuZFBvczsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQkvKiBlbmQgSXZlcnNvbiAqLwotCQllbHNlIHsKLQkJCWlmICgoKFRoaXNCdWxrU2l6ZSAmIDB4ZmZmZjgwMDApICE9IDApIHx8ICgoVGhpc0J1bGtTaXplICYgMHg2MDAwKSA9PSAweDYwMDApKSB7CS8qIExpbWl0IEJ1bGtPdXQgc2l6ZSB0byBhYm91dCAyNGsgYnl0ZXMuICovCi0JCQkJcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9Ci0JCQkJICAgIFRtcEJ1bGtFbmRQb3M7Ci0JCQkJYnJlYWs7Ci0JCQl9IGVsc2UgaWYgKCgocEFkLT5CdWxrT3V0TWF4UGFja2V0U2l6ZSA8IDUxMikgJiYgKChUaGlzQnVsa1NpemUgJiAweGZmZmZmODAwKSAhPSAwKSkgLyp8fCAoIChUaGlzQnVsa1NpemUgIT0gMCkgICYmIChwVHhXSS0+QU1QRFUgPT0gMCkpICovKSB7CS8qIEZvciBVU0IgMS4xIG9yIHBlZXIgd2hpY2ggZGlkbid0IHN1cHBvcnQgQU1QRFUsIGxpbWl0IHRoZSBCdWxrT3V0IHNpemUuICovCi0JCQkJLyogRm9yIHBlcmZvcm1hbmNlIGluIGIvZyBtb2RlLCBub3cganVzdCBjaGVjayBmb3IgVVNCIDEuMSBhbmQgZGlkbid0IGNhcmUgYWJvdXQgdGhlIEFQTURVIG9yIG5vdCEgMjAwOC8wNi8wNC4gKi8KLQkJCQlwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uID0KLQkJCQkgICAgVG1wQnVsa0VuZFBvczsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCWlmIChUbXBCdWxrRW5kUG9zID09IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbikgewotCQkJcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9IFRtcEJ1bGtFbmRQb3M7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChwVHhJbmZvLT5RU0VMICE9IEZJRk9fRURDQSkgewotCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkJICgiJXMoKTogPT09PT4gcFR4SW5mby0+UXVldWVTZWwoJWQpIT0gRklGT19FRENBISEhIVxuIiwKLQkJCQkgIF9fZnVuY19fLCBwVHhJbmZvLT5RU0VMKSk7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCQkgKCJcdENXUG9zPSVsZCwgTkJQb3M9JWxkLCBFTkJQb3M9JWxkLCBiQ29weT0lZCFcbiIsCi0JCQkJICBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24sCi0JCQkJICBwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24sCi0JCQkJICBwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uLAotCQkJCSAgcEhUVFhDb250ZXh0LT5iQ29weVNhdmVQYWQpKTsKLQkJCWhleF9kdW1wKCJXcm9uZyBRU2VsIFBrdDoiLAotCQkJCSAodTggKikmcFdpcmVsZXNzUGt0W1RtcEJ1bGtFbmRQb3NdLAotCQkJCSAocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uIC0KLQkJCQkgIHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbikpOwotCQl9Ci0KLQkJaWYgKHBUeEluZm8tPlVTQkRNQVR4UGt0TGVuIDw9IDgpIHsKLQkJCUJVTEtfT1VUX1VOTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbQnVsa091dFBpcGVJZF0sCi0JCQkJCUlycUZsYWdzMik7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiAvKlJUX0RFQlVHX1RSQUNFICovICwKLQkJCQkgKCJlMiwgVVNCRE1BVHhQa3RMZW49PTAsIFNpemU9JWxkLCBiQ1NQYWQ9JWQsIENXUG9zPSVsZCwgTkJQb3M9JWxkLCBDV1JQb3M9JWxkIVxuIiwKLQkJCQkgIHBIVFRYQ29udGV4dC0+QnVsa091dFNpemUsCi0JCQkJICBwSFRUWENvbnRleHQtPmJDb3B5U2F2ZVBhZCwKLQkJCQkgIHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiwKLQkJCQkgIHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbiwKLQkJCQkgIHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVSZWFsUG9zKSk7Ci0JCQl7Ci0JCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SIC8qUlRfREVCVUdfVFJBQ0UgKi8KLQkJCQkJICAgICAsCi0JCQkJCSAgICAgKCIleCAgJXggICV4ICAleCAgJXggICV4ICAleCAgJXggXG4iLAotCQkJCQkgICAgICBwSFRUWENvbnRleHQtPlNhdmVkUGFkWzBdLAotCQkJCQkgICAgICBwSFRUWENvbnRleHQtPlNhdmVkUGFkWzFdLAotCQkJCQkgICAgICBwSFRUWENvbnRleHQtPlNhdmVkUGFkWzJdLAotCQkJCQkgICAgICBwSFRUWENvbnRleHQtPlNhdmVkUGFkWzNdCi0JCQkJCSAgICAgICwgcEhUVFhDb250ZXh0LT5TYXZlZFBhZFs0XSwKLQkJCQkJICAgICAgcEhUVFhDb250ZXh0LT5TYXZlZFBhZFs1XSwKLQkJCQkJICAgICAgcEhUVFhDb250ZXh0LT5TYXZlZFBhZFs2XSwKLQkJCQkJICAgICAgcEhUVFhDb250ZXh0LT5TYXZlZFBhZFs3XSkpOwotCQkJfQotCQkJcEFkLT5iRm9yY2VQcmludFRYID0gVFJVRTsKLQkJCUJVTEtfT1VUX0xPQ0soJnBBZC0+QnVsa091dExvY2tbQnVsa091dFBpcGVJZF0sCi0JCQkJICAgICAgSXJxRmxhZ3MpOwotCQkJcEFkLT5CdWxrT3V0UGVuZGluZ1tCdWxrT3V0UGlwZUlkXSA9IEZBTFNFOwotCQkJQlVMS19PVVRfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW0J1bGtPdXRQaXBlSWRdLAotCQkJCQlJcnFGbGFncyk7Ci0JCQkvKkRCR1BSSU5UKFJUX0RFQlVHX0xPVUQsKCJPdXQ6cFR4SW5mby0+VVNCRE1BVHhQa3RMZW49JWQhXG4iLCBwVHhJbmZvLT5VU0JETUFUeFBrdExlbikpOyAqLwotCQkJcmV0dXJuOwotCQl9Ci0JCS8qIEluY3JlYXNlIFRvdGFsIHRyYW5zbWl0IGJ5dGUgY291bnRlciAqLwotCQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1RyYW5zbWl0dGVkQnl0ZUNvdW50ICs9Ci0JCSAgICBwVHhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50OwotCQlwQWQtPlJhbGlua0NvdW50ZXJzLlRyYW5zbWl0dGVkQnl0ZUNvdW50ICs9Ci0JCSAgICBwVHhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50OwotCi0JCXBMYXN0VHhJbmZvID0gcFR4SW5mbzsKLQotCQkvKiBNYWtlIHN1cmUgd2UgdXNlIEVEQ0EgUVVFVUUuICovCi0JCXBUeEluZm8tPlFTRUwgPSBGSUZPX0VEQ0E7Ci0JCVRoaXNCdWxrU2l6ZSArPSAocFR4SW5mby0+VVNCRE1BVHhQa3RMZW4gKyA0KTsKLQkJVG1wQnVsa0VuZFBvcyArPSAocFR4SW5mby0+VVNCRE1BVHhQa3RMZW4gKyA0KTsKLQotCQlpZiAoVG1wQnVsa0VuZFBvcyAhPSBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24pCi0JCQlwVHhJbmZvLT5VU0JETUFOZXh0VkxEID0gMTsKLQotCQlpZiAocFR4SW5mby0+U3dVc2VMYXN0Um91bmQgPT0gMSkgewotCQkJaWYgKHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiA9PSA4KQotCQkJCXBUeEluZm8tPlVTQkRNQU5leHRWTEQgPSAwOwotCQkJcFR4SW5mby0+U3dVc2VMYXN0Um91bmQgPSAwOwotCi0JCQliVHhRTGFzdFJvdW5kID0gVFJVRTsKLQkJCXBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gPSA4OwotCi0JCQlicmVhazsKLQkJfQotCi0JfSB3aGlsZSAoVFJVRSk7Ci0KLQkvKiBhZGp1c3QgdGhlIHBUeEluZm8tPlVTQkRNQU5leHRWTEQgdmFsdWUgb2YgbGFzdCBwVHhJbmZvLiAqLwotCWlmIChwTGFzdFR4SW5mbykKLQkJcExhc3RUeEluZm8tPlVTQkRNQU5leHRWTEQgPSAwOwotCi0JLyoKLQkgICBXZSBuZWVkIHRvIGNvcHkgU2F2ZWRQYWQgd2hlbiBmb2xsb3dpbmcgY29uZGl0aW9uIG1hdGNoZWQhCi0JICAgMS4gTm90IHRoZSBsYXN0IHJvdW5kIG9mIHRoZSBUeFF1ZXVlIGFuZAotCSAgIDIuIGFueSBtYXRjaCBvZiBmb2xsb3dpbmcgY2FzZXM6Ci0JICAgKDEpLiBUaGUgRW5kIFBvc2l0aW9uIG9mIHRoaXMgYnVsayBvdXQgaXMgcmVhY2ggdG8gdGhlIEN1cnJlbmN0IFdyaXRlIHBvc2l0aW9uIGFuZAotCSAgIHRoZSBUeEluZm8gYW5kIHJlbGF0ZWQgaGVhZGVyIGFscmVhZHkgd3JpdGUgdG8gdGhlIEN1cldyaXRlUG9zaXRpb24uCi0JICAgPT4oRU5leHRCdWxrT3V0UG9zaXRpb24gPT0gQ3VyV3JpdGVQb3NpdGlvbikgJiYgKEN1cldyaXRlUmVhbFBvcyA+IEN1cldyaXRlUG9zaXRpb24pCi0KLQkgICAoMikuIFRoZSBFbmRQb3NpdGlvbiBvZiB0aGUgYnVsayBvdXQgaXMgbm90IHJlYWNoIHRvIHRoZSBDdXJyZW50IFdyaXRlIFBvc2l0aW9uLgotCSAgID0+KEVOZXh0QnVsa091dFBvc2l0aW9uICE9IEN1cldyaXRlUG9zaXRpb24pCi0JICovCi0JaWYgKChiVHhRTGFzdFJvdW5kID09IEZBTFNFKSAmJgotCSAgICAoKChwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uID09Ci0JICAgICAgIHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbikKLQkgICAgICAmJiAocEhUVFhDb250ZXh0LT5DdXJXcml0ZVJlYWxQb3MgPgotCQkgIHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbikpCi0JICAgICB8fCAocEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiAhPQotCQkgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uKSkKLQkgICAgKSB7Ci0JCU5kaXNNb3ZlTWVtb3J5KHBIVFRYQ29udGV4dC0+U2F2ZWRQYWQsCi0JCQkgICAgICAgJnBXaXJlbGVzc1BrdFtwSFRUWENvbnRleHQtPgotCQkJCQkgICAgIEVOZXh0QnVsa091dFBvc2l0aW9uXSwgOCk7Ci0JCXBIVFRYQ29udGV4dC0+YkNvcHlTYXZlUGFkID0gVFJVRTsKLQkJaWYgKFJUTVBFcXVhbE1lbW9yeShwSFRUWENvbnRleHQtPlNhdmVkUGFkLCBhbGx6ZXJvLCA0KSkgewotCQkJdTggKnBCdWYgPSAmcEhUVFhDb250ZXh0LT5TYXZlZFBhZFswXTsKLQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwKLQkJCQkgICAgICgiV0FSTklORy1aZXJvLTM6JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMngsQ1dQb3M9JWxkLCBDV1JQb3M9JWxkLCBiQ1c9JWQsIE5CUG9zPSVsZCwgVEJQb3M9JWxkLCBUQlNpemU9JWxkXG4iLAotCQkJCSAgICAgIHBCdWZbMF0sIHBCdWZbMV0sIHBCdWZbMl0sIHBCdWZbM10sCi0JCQkJICAgICAgcEJ1Zls0XSwgcEJ1Zls1XSwgcEJ1Zls2XSwgcEJ1Zls3XSwKLQkJCQkgICAgICBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24sCi0JCQkJICAgICAgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVJlYWxQb3MsCi0JCQkJICAgICAgcEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZywKLQkJCQkgICAgICBwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24sCi0JCQkJICAgICAgVG1wQnVsa0VuZFBvcywgVGhpc0J1bGtTaXplKSk7Ci0KLQkJCXBCdWYgPSAmcFdpcmVsZXNzUGt0W3BIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbl07Ci0JCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsCi0JCQkJICAgICAoIlx0Q1dQb3M9JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCi0JCQkJICAgICAgcEJ1ZlswXSwgcEJ1ZlsxXSwgcEJ1ZlsyXSwgcEJ1ZlszXSwKLQkJCQkgICAgICBwQnVmWzRdLCBwQnVmWzVdLCBwQnVmWzZdLCBwQnVmWzddKSk7Ci0JCX0KLQkJLypEQkdQUklOVChSVF9ERUJVR19MT1VELCgiRU5Qb3M9PUNXUG9zPSVsZCwgQ1dSUG9zPSVsZCwgYkNTUGFkPSVkIVxuIiwgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uLCBwSFRUWENvbnRleHQtPkN1cldyaXRlUmVhbFBvcywgcEhUVFhDb250ZXh0LT5iQ29weVNhdmVQYWQpKTsgKi8KLQl9Ci0KLQlpZiAocEFkLT5iRm9yY2VQcmludFRYID09IFRSVUUpCi0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiQnVsa091dC1BOlNpemU9JWxkLCBDV1Bvcz0lbGQsIE5CUG9zPSVsZCwgRU5CUG9zPSVsZCwgYkNvcHk9JWQhXG4iLAotCQkJICBUaGlzQnVsa1NpemUsIHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiwKLQkJCSAgcEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uLAotCQkJICBwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uLAotCQkJICBwSFRUWENvbnRleHQtPmJDb3B5U2F2ZVBhZCkpOwotCS8qREJHUFJJTlQoUlRfREVCVUdfTE9VRCwoIkJ1bGtPdXQtQTpTaXplPSVsZCwgQ1dQb3M9JWxkLCBDV1JQb3M9JWxkLCBOQlBvcz0lbGQsIEVOQlBvcz0lbGQsIGJDb3B5PSVkLCBiTFJvdW5kPSVkIVxuIiwgVGhpc0J1bGtTaXplLCBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24sIHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVSZWFsUG9zLCBwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24sIHBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24sIHBIVFRYQ29udGV4dC0+YkNvcHlTYXZlUGFkLCBiVHhRTGFzdFJvdW5kKSk7ICovCi0KLQkvKiBVU0IgRE1BIGVuZ2luZSByZXF1aXJlcyB0byBwYWQgZXh0cmEgNCBieXRlcy4gVGhpcyBwYWQgZG9lc24ndCBjb3VudCBpbnRvIHJlYWwgYnVsa291dHNpemUuICovCi0JcEFwcGVuZGFudCA9ICZwV2lyZWxlc3NQa3RbVG1wQnVsa0VuZFBvc107Ci0JTmRpc1plcm9NZW1vcnkocEFwcGVuZGFudCwgOCk7Ci0JVGhpc0J1bGtTaXplICs9IDQ7Ci0JcEhUVFhDb250ZXh0LT5MYXN0T25lID0gVFJVRTsKLQlpZiAoKFRoaXNCdWxrU2l6ZSAlIHBBZC0+QnVsa091dE1heFBhY2tldFNpemUpID09IDApCi0JCVRoaXNCdWxrU2l6ZSArPSA0OwotCXBIVFRYQ29udGV4dC0+QnVsa091dFNpemUgPSBUaGlzQnVsa1NpemU7Ci0KLQlwQWQtPndhdGNoRG9nVHhQZW5kaW5nQ250W0J1bGtPdXRQaXBlSWRdID0gMTsKLQlCVUxLX09VVF9VTkxPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFnczIpOwotCi0JLyogSW5pdCBUeCBjb250ZXh0IGRlc2NyaXB0b3IgKi8KLQlSVFVTQkluaXRIVFR4RGVzYyhwQWQsIHBIVFRYQ29udGV4dCwgQnVsa091dFBpcGVJZCwgVGhpc0J1bGtTaXplLAotCQkJICAodXNiX2NvbXBsZXRlX3QpIFJUVVNCQnVsa091dERhdGFQYWNrZXRDb21wbGV0ZSk7Ci0KLQlwVXJiID0gcEhUVFhDb250ZXh0LT5wVXJiOwotCXJldCA9IFJUVVNCX1NVQk1JVF9VUkIocFVyYik7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJICgiUlRVU0JCdWxrT3V0RGF0YVBhY2tldDogU3VibWl0IFR4IFVSQiBmYWlsZWQgJWRcbiIsCi0JCQkgIHJldCkpOwotCi0JCUJVTEtfT1VUX0xPQ0soJnBBZC0+QnVsa091dExvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKLQkJcEFkLT5CdWxrT3V0UGVuZGluZ1tCdWxrT3V0UGlwZUlkXSA9IEZBTFNFOwotCQlwQWQtPndhdGNoRG9nVHhQZW5kaW5nQ250W0J1bGtPdXRQaXBlSWRdID0gMDsKLQkJQlVMS19PVVRfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFncyk7Ci0KLQkJcmV0dXJuOwotCX0KLQotCUJVTEtfT1VUX0xPQ0soJnBBZC0+QnVsa091dExvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKLQlwSFRUWENvbnRleHQtPklSUFBlbmRpbmcgPSBUUlVFOwotCUJVTEtfT1VUX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOwotCXBBZC0+QnVsa091dFJlcSsrOwotCi19Ci0KLXZvaWQgUlRVU0JCdWxrT3V0RGF0YVBhY2tldENvbXBsZXRlKHN0cnVjdCB1cmIgKnBVcmIsIHN0cnVjdCBwdF9yZWdzICogcHRfcmVncykKLXsKLQlzdHJ1Y3QgcnRfaHRfdHhfY29udGV4dCAqcEhUVFhDb250ZXh0OwotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZDsKLQlzdHJ1Y3Qgb3NfY29va2llICpwT2JqOwotCXU4IEJ1bGtPdXRQaXBlSWQ7Ci0KLQlwSFRUWENvbnRleHQgPSAoc3RydWN0IHJ0X2h0X3R4X2NvbnRleHQgKilwVXJiLT5jb250ZXh0OwotCXBBZCA9IHBIVFRYQ29udGV4dC0+cEFkOwotCXBPYmogPSAoc3RydWN0IG9zX2Nvb2tpZSAqKXBBZC0+T1NfQ29va2llOwotCi0JLyogU3RvcmUgQnVsa091dCBQaXBlSWQgKi8KLQlCdWxrT3V0UGlwZUlkID0gcEhUVFhDb250ZXh0LT5CdWxrT3V0UGlwZUlkOwotCXBBZC0+QnVsa091dERhdGFPbmVTZWNDb3VudCsrOwotCi0Jc3dpdGNoIChCdWxrT3V0UGlwZUlkKSB7Ci0JY2FzZSAwOgotCQlwT2JqLT5hYzBfZG1hX2RvbmVfdGFzay5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcFVyYjsKLQkJdGFza2xldF9oaV9zY2hlZHVsZSgmcE9iai0+YWMwX2RtYV9kb25lX3Rhc2spOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCXBPYmotPmFjMV9kbWFfZG9uZV90YXNrLmRhdGEgPSAodW5zaWduZWQgbG9uZylwVXJiOwotCQl0YXNrbGV0X2hpX3NjaGVkdWxlKCZwT2JqLT5hYzFfZG1hX2RvbmVfdGFzayk7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJcE9iai0+YWMyX2RtYV9kb25lX3Rhc2suZGF0YSA9ICh1bnNpZ25lZCBsb25nKXBVcmI7Ci0JCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnBPYmotPmFjMl9kbWFfZG9uZV90YXNrKTsKLQkJYnJlYWs7Ci0JY2FzZSAzOgotCQlwT2JqLT5hYzNfZG1hX2RvbmVfdGFzay5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcFVyYjsKLQkJdGFza2xldF9oaV9zY2hlZHVsZSgmcE9iai0+YWMzX2RtYV9kb25lX3Rhc2spOwotCQlicmVhazsKLQl9Ci0KLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0KLQlBcmd1bWVudHM6Ci0KLQlSZXR1cm4gVmFsdWU6Ci0KLQlOb3RlOiBOVUxMIGZyYW1lIHVzZSBCdWxrT3V0UGlwZUlkID0gMAotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBSVFVTQkJ1bGtPdXROdWxsRnJhbWUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCXN0cnVjdCBydF90eF9jb250ZXh0ICpwTnVsbENvbnRleHQgPSAmKHBBZC0+TnVsbENvbnRleHQpOwotCVBVUkIgcFVyYjsKLQlpbnQgcmV0ID0gMDsKLQl1bnNpZ25lZCBsb25nIElycUZsYWdzOwotCi0JUlRNUF9JUlFfTE9DSygmcEFkLT5CdWxrT3V0TG9ja1swXSwgSXJxRmxhZ3MpOwotCWlmICgocEFkLT5CdWxrT3V0UGVuZGluZ1swXSA9PSBUUlVFKQotCSAgICB8fCBSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTkVFRF9TVE9QX1RYKSkgewotCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbMF0sIElycUZsYWdzKTsKLQkJcmV0dXJuOwotCX0KLQlwQWQtPkJ1bGtPdXRQZW5kaW5nWzBdID0gVFJVRTsKLQlwQWQtPndhdGNoRG9nVHhQZW5kaW5nQ250WzBdID0gMTsKLQlwTnVsbENvbnRleHQtPklSUFBlbmRpbmcgPSBUUlVFOwotCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1swXSwgSXJxRmxhZ3MpOwotCi0JLyogSW5jcmVhc2UgVG90YWwgdHJhbnNtaXQgYnl0ZSBjb3VudGVyICovCi0JcEFkLT5SYWxpbmtDb3VudGVycy5UcmFuc21pdHRlZEJ5dGVDb3VudCArPSBwTnVsbENvbnRleHQtPkJ1bGtPdXRTaXplOwotCi0JLyogQ2xlYXIgTnVsbCBmcmFtZSBidWxrIGZsYWcgKi8KLQlSVFVTQl9DTEVBUl9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfREFUQV9OVUxMKTsKLQotCS8qIEluaXQgVHggY29udGV4dCBkZXNjcmlwdG9yICovCi0JUlRVU0JJbml0VHhEZXNjKHBBZCwgcE51bGxDb250ZXh0LCAwLAotCQkJKHVzYl9jb21wbGV0ZV90KSBSVFVTQkJ1bGtPdXROdWxsRnJhbWVDb21wbGV0ZSk7Ci0KLQlwVXJiID0gcE51bGxDb250ZXh0LT5wVXJiOwotCXJldCA9IFJUVVNCX1NVQk1JVF9VUkIocFVyYik7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCVJUTVBfSVJRX0xPQ0soJnBBZC0+QnVsa091dExvY2tbMF0sIElycUZsYWdzKTsKLQkJcEFkLT5CdWxrT3V0UGVuZGluZ1swXSA9IEZBTFNFOwotCQlwQWQtPndhdGNoRG9nVHhQZW5kaW5nQ250WzBdID0gMDsKLQkJcE51bGxDb250ZXh0LT5JUlBQZW5kaW5nID0gRkFMU0U7Ci0JCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1swXSwgSXJxRmxhZ3MpOwotCi0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJICgiUlRVU0JCdWxrT3V0TnVsbEZyYW1lOiBTdWJtaXQgVHggVVJCIGZhaWxlZCAlZFxuIiwKLQkJCSAgcmV0KSk7Ci0JCXJldHVybjsKLQl9Ci0KLX0KLQotLyogTlVMTCBmcmFtZSB1c2UgQnVsa091dFBpcGVJZCA9IDAgKi8KLXZvaWQgUlRVU0JCdWxrT3V0TnVsbEZyYW1lQ29tcGxldGUoc3RydWN0IHVyYiAqcFVyYiwgc3RydWN0IHB0X3JlZ3MgKiBwdF9yZWdzKQotewotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZDsKLQlzdHJ1Y3QgcnRfdHhfY29udGV4dCAqcE51bGxDb250ZXh0OwotCWludCBTdGF0dXM7Ci0Jc3RydWN0IG9zX2Nvb2tpZSAqcE9iajsKLQotCXBOdWxsQ29udGV4dCA9IChzdHJ1Y3QgcnRfdHhfY29udGV4dCAqKXBVcmItPmNvbnRleHQ7Ci0JcEFkID0gcE51bGxDb250ZXh0LT5wQWQ7Ci0JU3RhdHVzID0gcFVyYi0+c3RhdHVzOwotCi0JcE9iaiA9IChzdHJ1Y3Qgb3NfY29va2llICopcEFkLT5PU19Db29raWU7Ci0JcE9iai0+bnVsbF9mcmFtZV9jb21wbGV0ZV90YXNrLmRhdGEgPSAodW5zaWduZWQgbG9uZylwVXJiOwotCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnBPYmotPm51bGxfZnJhbWVfY29tcGxldGVfdGFzayk7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCi0JQXJndW1lbnRzOgotCi0JUmV0dXJuIFZhbHVlOgotCi0JTm90ZTogTUxNRSB1c2UgQnVsa091dFBpcGVJZCA9IDAKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgUlRVU0JCdWxrT3V0TUxNRVBhY2tldChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHU4IEluZGV4KQotewotCXN0cnVjdCBydF90eF9jb250ZXh0ICpwTUxNRUNvbnRleHQ7Ci0JUFVSQiBwVXJiOwotCWludCByZXQgPSAwOwotCXVuc2lnbmVkIGxvbmcgSXJxRmxhZ3M7Ci0KLQlwTUxNRUNvbnRleHQgPQotCSAgICAoc3RydWN0IHJ0X3R4X2NvbnRleHQgKilwQWQtPk1nbXRSaW5nLkNlbGxbcEFkLT5NZ210UmluZy5UeERtYUlkeF0uQWxsb2NWYTsKLQlwVXJiID0gcE1MTUVDb250ZXh0LT5wVXJiOwotCi0JaWYgKChwQWQtPk1nbXRSaW5nLlR4U3dGcmVlSWR4ID49IE1HTVRfUklOR19TSVpFKSB8fAotCSAgICAocE1MTUVDb250ZXh0LT5JblVzZSA9PSBGQUxTRSkgfHwKLQkgICAgKHBNTE1FQ29udGV4dC0+YldhaXRpbmdCdWxrT3V0ID09IEZBTFNFKSkgewotCi0JCS8qIENsZWFyIE1MTUUgYnVsayBmbGFnICovCi0JCVJUVVNCX0NMRUFSX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9NTE1FKTsKLQotCQlyZXR1cm47Ci0JfQotCi0JUlRNUF9JUlFfTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tNR01UUElQRUlEWF0sIElycUZsYWdzKTsKLQlpZiAoKHBBZC0+QnVsa091dFBlbmRpbmdbTUdNVFBJUEVJRFhdID09IFRSVUUpCi0JICAgIHx8IFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9ORUVEX1NUT1BfVFgpKSB7Ci0JCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tNR01UUElQRUlEWF0sIElycUZsYWdzKTsKLQkJcmV0dXJuOwotCX0KLQotCXBBZC0+QnVsa091dFBlbmRpbmdbTUdNVFBJUEVJRFhdID0gVFJVRTsKLQlwQWQtPndhdGNoRG9nVHhQZW5kaW5nQ250W01HTVRQSVBFSURYXSA9IDE7Ci0JcE1MTUVDb250ZXh0LT5JUlBQZW5kaW5nID0gVFJVRTsKLQlwTUxNRUNvbnRleHQtPmJXYWl0aW5nQnVsa091dCA9IEZBTFNFOwotCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tNR01UUElQRUlEWF0sIElycUZsYWdzKTsKLQotCS8qIEluY3JlYXNlIFRvdGFsIHRyYW5zbWl0IGJ5dGUgY291bnRlciAqLwotCXBBZC0+UmFsaW5rQ291bnRlcnMuVHJhbnNtaXR0ZWRCeXRlQ291bnQgKz0gcE1MTUVDb250ZXh0LT5CdWxrT3V0U2l6ZTsKLQotCS8qIENsZWFyIE1MTUUgYnVsayBmbGFnICovCi0JUlRVU0JfQ0xFQVJfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX01MTUUpOwotCi0JLyogSW5pdCBUeCBjb250ZXh0IGRlc2NyaXB0b3IgKi8KLQlSVFVTQkluaXRUeERlc2MocEFkLCBwTUxNRUNvbnRleHQsIE1HTVRQSVBFSURYLAotCQkJKHVzYl9jb21wbGV0ZV90KSBSVFVTQkJ1bGtPdXRNTE1FUGFja2V0Q29tcGxldGUpOwotCi0JLypGb3IgbWdtdCB1cmIgYnVmZmVyLCBiZWNhdXNlIHdlIHVzZSBza19idWZmLCBzbyB3ZSBuZWVkIHRvIG5vdGlmeSB0aGUgVVNCIGNvbnRyb2xsZXIgZG8gZG1hIG1hcHBpbmcuICovCi0JcFVyYi0+dHJhbnNmZXJfZG1hID0gMDsKLQlwVXJiLT50cmFuc2Zlcl9mbGFncyAmPSAoflVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQKTsKLQotCXBVcmIgPSBwTUxNRUNvbnRleHQtPnBVcmI7Ci0JcmV0ID0gUlRVU0JfU1VCTUlUX1VSQihwVXJiKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkgKCJSVFVTQkJ1bGtPdXRNTE1FUGFja2V0OiBTdWJtaXQgTUxNRSBVUkIgZmFpbGVkICVkXG4iLAotCQkJICByZXQpKTsKLQkJUlRNUF9JUlFfTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tNR01UUElQRUlEWF0sIElycUZsYWdzKTsKLQkJcEFkLT5CdWxrT3V0UGVuZGluZ1tNR01UUElQRUlEWF0gPSBGQUxTRTsKLQkJcEFkLT53YXRjaERvZ1R4UGVuZGluZ0NudFtNR01UUElQRUlEWF0gPSAwOwotCQlwTUxNRUNvbnRleHQtPklSUFBlbmRpbmcgPSBGQUxTRTsKLQkJcE1MTUVDb250ZXh0LT5iV2FpdGluZ0J1bGtPdXQgPSBUUlVFOwotCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbTUdNVFBJUEVJRFhdLCBJcnFGbGFncyk7Ci0KLQkJcmV0dXJuOwotCX0KLQkvKkRCR1BSSU5UX1JBVyhSVF9ERUJVR19JTkZPLCAoIjwtLS1SVFVTQkJ1bGtPdXRNTE1FUGFja2V0IFxuIikpOyAqLwotLyogICAgICBwcmludGsoIjwtLS1SVFVTQkJ1bGtPdXRNTE1FUGFja2V0LENwdT0lZCEsIERtYT0lZCwgU3dJZHg9JWQhXG4iLCBwQWQtPk1nbXRSaW5nLlR4Q3B1SWR4LCBwQWQtPk1nbXRSaW5nLlR4RG1hSWR4LCBwQWQtPk1nbXRSaW5nLlR4U3dGcmVlSWR4KTsgKi8KLX0KLQotdm9pZCBSVFVTQkJ1bGtPdXRNTE1FUGFja2V0Q29tcGxldGUoc3RydWN0IHVyYiAqcFVyYiwgc3RydWN0IHB0X3JlZ3MgKiBwdF9yZWdzKQotewotCXN0cnVjdCBydF90eF9jb250ZXh0ICpwTUxNRUNvbnRleHQ7Ci0Jc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkOwotCWludCBTdGF0dXM7Ci0Jc3RydWN0IG9zX2Nvb2tpZSAqcE9iajsKLQlpbnQgaW5kZXg7Ci0KLQkvKkRCR1BSSU5UX1JBVyhSVF9ERUJVR19JTkZPLCAoIi0tLT5SVFVTQkJ1bGtPdXRNTE1FUGFja2V0Q29tcGxldGVcbiIpKTsgKi8KLQlwTUxNRUNvbnRleHQgPSAoc3RydWN0IHJ0X3R4X2NvbnRleHQgKilwVXJiLT5jb250ZXh0OwotCXBBZCA9IHBNTE1FQ29udGV4dC0+cEFkOwotCXBPYmogPSAoc3RydWN0IG9zX2Nvb2tpZSAqKXBBZC0+T1NfQ29va2llOwotCVN0YXR1cyA9IHBVcmItPnN0YXR1czsKLQlpbmRleCA9IHBNTE1FQ29udGV4dC0+U2VsZklkeDsKLQotCXBPYmotPm1nbXRfZG1hX2RvbmVfdGFzay5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcFVyYjsKLQl0YXNrbGV0X2hpX3NjaGVkdWxlKCZwT2JqLT5tZ210X2RtYV9kb25lX3Rhc2spOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQotCUFyZ3VtZW50czoKLQotCVJldHVybiBWYWx1ZToKLQotCU5vdGU6IFBzUG9sbCB1c2UgQnVsa091dFBpcGVJZCA9IDAKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgUlRVU0JCdWxrT3V0UHNQb2xsKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlzdHJ1Y3QgcnRfdHhfY29udGV4dCAqcFBzUG9sbENvbnRleHQgPSAmKHBBZC0+UHNQb2xsQ29udGV4dCk7Ci0JUFVSQiBwVXJiOwotCWludCByZXQgPSAwOwotCXVuc2lnbmVkIGxvbmcgSXJxRmxhZ3M7Ci0KLQlSVE1QX0lSUV9MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrWzBdLCBJcnFGbGFncyk7Ci0JaWYgKChwQWQtPkJ1bGtPdXRQZW5kaW5nWzBdID09IFRSVUUpCi0JICAgIHx8IFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9ORUVEX1NUT1BfVFgpKSB7Ci0JCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1swXSwgSXJxRmxhZ3MpOwotCQlyZXR1cm47Ci0JfQotCXBBZC0+QnVsa091dFBlbmRpbmdbMF0gPSBUUlVFOwotCXBBZC0+d2F0Y2hEb2dUeFBlbmRpbmdDbnRbMF0gPSAxOwotCXBQc1BvbGxDb250ZXh0LT5JUlBQZW5kaW5nID0gVFJVRTsKLQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbMF0sIElycUZsYWdzKTsKLQotCS8qIENsZWFyIFBTLVBvbGwgYnVsayBmbGFnICovCi0JUlRVU0JfQ0xFQVJfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX1BTUE9MTCk7Ci0KLQkvKiBJbml0IFR4IGNvbnRleHQgZGVzY3JpcHRvciAqLwotCVJUVVNCSW5pdFR4RGVzYyhwQWQsIHBQc1BvbGxDb250ZXh0LCBNR01UUElQRUlEWCwKLQkJCSh1c2JfY29tcGxldGVfdCkgUlRVU0JCdWxrT3V0UHNQb2xsQ29tcGxldGUpOwotCi0JcFVyYiA9IHBQc1BvbGxDb250ZXh0LT5wVXJiOwotCXJldCA9IFJUVVNCX1NVQk1JVF9VUkIocFVyYik7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCVJUTVBfSVJRX0xPQ0soJnBBZC0+QnVsa091dExvY2tbMF0sIElycUZsYWdzKTsKLQkJcEFkLT5CdWxrT3V0UGVuZGluZ1swXSA9IEZBTFNFOwotCQlwQWQtPndhdGNoRG9nVHhQZW5kaW5nQ250WzBdID0gMDsKLQkJcFBzUG9sbENvbnRleHQtPklSUFBlbmRpbmcgPSBGQUxTRTsKLQkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrWzBdLCBJcnFGbGFncyk7Ci0KLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkgKCJSVFVTQkJ1bGtPdXRQc1BvbGw6IFN1Ym1pdCBUeCBVUkIgZmFpbGVkICVkXG4iLAotCQkJICByZXQpKTsKLQkJcmV0dXJuOwotCX0KLQotfQotCi0vKiBQUy1Qb2xsIGZyYW1lIHVzZSBCdWxrT3V0UGlwZUlkID0gMCAqLwotdm9pZCBSVFVTQkJ1bGtPdXRQc1BvbGxDb21wbGV0ZShzdHJ1Y3QgdXJiICpwVXJiLCBzdHJ1Y3QgcHRfcmVncyAqIHB0X3JlZ3MpCi17Ci0Jc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkOwotCXN0cnVjdCBydF90eF9jb250ZXh0ICpwUHNQb2xsQ29udGV4dDsKLQlpbnQgU3RhdHVzOwotCXN0cnVjdCBvc19jb29raWUgKnBPYmo7Ci0KLQlwUHNQb2xsQ29udGV4dCA9IChzdHJ1Y3QgcnRfdHhfY29udGV4dCAqKXBVcmItPmNvbnRleHQ7Ci0JcEFkID0gcFBzUG9sbENvbnRleHQtPnBBZDsKLQlTdGF0dXMgPSBwVXJiLT5zdGF0dXM7Ci0KLQlwT2JqID0gKHN0cnVjdCBvc19jb29raWUgKilwQWQtPk9TX0Nvb2tpZTsKLQlwT2JqLT5wc3BvbGxfZnJhbWVfY29tcGxldGVfdGFzay5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcFVyYjsKLQl0YXNrbGV0X2hpX3NjaGVkdWxlKCZwT2JqLT5wc3BvbGxfZnJhbWVfY29tcGxldGVfdGFzayk7Ci19Ci0KLXZvaWQgRG9CdWxrSW4oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCXN0cnVjdCBydF9yeF9jb250ZXh0ICpwUnhDb250ZXh0OwotCVBVUkIgcFVyYjsKLQlpbnQgcmV0ID0gMDsKLQl1bnNpZ25lZCBsb25nIElycUZsYWdzOwotCi0JUlRNUF9JUlFfTE9DSygmcEFkLT5CdWxrSW5Mb2NrLCBJcnFGbGFncyk7Ci0JcFJ4Q29udGV4dCA9ICYocEFkLT5SeENvbnRleHRbcEFkLT5OZXh0UnhCdWxrSW5JbmRleF0pOwotCWlmICgocEFkLT5QZW5kaW5nUnggPiAwKSB8fCAocFJ4Q29udGV4dC0+UmVhZGFibGUgPT0gVFJVRSkKLQkgICAgfHwgKHBSeENvbnRleHQtPkluVXNlID09IFRSVUUpKSB7Ci0JCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrSW5Mb2NrLCBJcnFGbGFncyk7Ci0JCXJldHVybjsKLQl9Ci0JcFJ4Q29udGV4dC0+SW5Vc2UgPSBUUlVFOwotCXBSeENvbnRleHQtPklSUFBlbmRpbmcgPSBUUlVFOwotCXBBZC0+UGVuZGluZ1J4Kys7Ci0JcEFkLT5CdWxrSW5SZXErKzsKLQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa0luTG9jaywgSXJxRmxhZ3MpOwotCi0JLyogSW5pdCBSeCBjb250ZXh0IGRlc2NyaXB0b3IgKi8KLQlOZGlzWmVyb01lbW9yeShwUnhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlciwgcFJ4Q29udGV4dC0+QnVsa0luT2Zmc2V0KTsKLQlSVFVTQkluaXRSeERlc2MocEFkLCBwUnhDb250ZXh0KTsKLQotCXBVcmIgPSBwUnhDb250ZXh0LT5wVXJiOwotCXJldCA9IFJUVVNCX1NVQk1JVF9VUkIocFVyYik7Ci0JaWYgKHJldCAhPSAwKSB7CS8qIGZhaWwgKi8KLQotCQlSVE1QX0lSUV9MT0NLKCZwQWQtPkJ1bGtJbkxvY2ssIElycUZsYWdzKTsKLQkJcFJ4Q29udGV4dC0+SW5Vc2UgPSBGQUxTRTsKLQkJcFJ4Q29udGV4dC0+SVJQUGVuZGluZyA9IEZBTFNFOwotCQlwQWQtPlBlbmRpbmdSeC0tOwotCQlwQWQtPkJ1bGtJblJlcS0tOwotCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa0luTG9jaywgSXJxRmxhZ3MpOwotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCSAoIlJUVVNCQnVsa1JlY2VpdmU6IFN1Ym1pdCBSeCBVUkIgZmFpbGVkICVkXG4iLCByZXQpKTsKLQl9IGVsc2UgewkJLyogc3VjY2VzcyAqLwotCQlBU1NFUlQoKHBSeENvbnRleHQtPkluVXNlID09IHBSeENvbnRleHQtPklSUFBlbmRpbmcpKTsKLQkJLypwcmludGsoIkJJRG9uZSwgUGVuZD0lZCxCSUlkeD0lZCxCSVJJZHg9JWQhXG4iLCBwQWQtPlBlbmRpbmdSeCwgcEFkLT5OZXh0UnhCdWxrSW5JbmRleCwgcEFkLT5OZXh0UnhCdWxrSW5SZWFkSW5kZXgpOyAqLwotCX0KLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JVVNCX1J4UGFja2V0IGluaXRpYWxpemVzIGEgVVJCIGFuZCB1c2VzIHRoZSBSeCBJUlAgdG8gc3VibWl0IGl0Ci0JdG8gVVNCLiBJdCBjaGVja3MgaWYgYW4gUnggRGVzY3JpcHRvciBpcyBhdmFpbGFibGUgYW5kIHBhc3NlcyB0aGUKLQl0aGUgY29yZXNwb25kaW5nIGJ1ZmZlciB0byBiZSBmaWxsZWQuIElmIG5vIGRlc2NyaXB0b3IgaXMgYXZhaWxhYmxlCi0JZmFpbHMgdGhlIHJlcXVlc3QuIFdoZW4gc2V0dGluZyB0aGUgY29tcGxldGlvbiByb3V0aW5lIHdlIHBhc3Mgb3VyCi0JQWRhcHRlciBPYmplY3QgYXMgQ29udGV4dC4KLQotCUFyZ3VtZW50czoKLQotCVJldHVybiBWYWx1ZToKLQkJVFJVRQkJCWZvdW5kIG1hdGNoZWQgdHVwbGUgY2FjaGUKLQkJRkFMU0UJCQlubyBtYXRjaGVkIGZvdW5kCi0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotI2RlZmluZSBmUlRNUF9BREFQVEVSX05FRURfU1RPUF9SWAkJXAotCQkoZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUIHwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwJXAotCQkgZlJUTVBfQURBUFRFUl9SQURJT19PRkYgfCBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTIHwgXAotCQkgZlJUTVBfQURBUFRFUl9SRU1PVkVfSU5fUFJPR1JFU1MgfCBmUlRNUF9BREFQVEVSX0JVTEtJTl9SRVNFVCkKLQotI2RlZmluZSBmUlRNUF9BREFQVEVSX05FRURfU1RPUF9IQU5ETEVfUlgJXAotCQkoZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUIHwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwJXAotCQkgZlJUTVBfQURBUFRFUl9SQURJT19PRkYgfCBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTIHwgXAotCQkgZlJUTVBfQURBUFRFUl9SRU1PVkVfSU5fUFJPR1JFU1MpCi0KLXZvaWQgUlRVU0JCdWxrUmVjZWl2ZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0Jc3RydWN0IHJ0X3J4X2NvbnRleHQgKnBSeENvbnRleHQ7Ci0JdW5zaWduZWQgbG9uZyBJcnFGbGFnczsKLQotCS8qIHNhbml0eSBjaGVjayAqLwotCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTkVFRF9TVE9QX0hBTkRMRV9SWCkpCi0JCXJldHVybjsKLQotCXdoaWxlICgxKSB7Ci0KLQkJUlRNUF9JUlFfTE9DSygmcEFkLT5CdWxrSW5Mb2NrLCBJcnFGbGFncyk7Ci0JCXBSeENvbnRleHQgPSAmKHBBZC0+UnhDb250ZXh0W3BBZC0+TmV4dFJ4QnVsa0luUmVhZEluZGV4XSk7Ci0JCWlmICgoKHBSeENvbnRleHQtPkluVXNlID09IEZBTFNFKQotCQkgICAgICYmIChwUnhDb250ZXh0LT5SZWFkYWJsZSA9PSBUUlVFKSkKLQkJICAgICYmIChwUnhDb250ZXh0LT5iUnhIYW5kbGluZyA9PSBGQUxTRSkpIHsKLQkJCXBSeENvbnRleHQtPmJSeEhhbmRsaW5nID0gVFJVRTsKLQkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrSW5Mb2NrLCBJcnFGbGFncyk7Ci0KLQkJCS8qIHJlYWQgUnhDb250ZXh0LCBTaW5jZSBub3QgKi8KLQkJCVNUQVJ4RG9uZUludGVycnVwdEhhbmRsZShwQWQsIFRSVUUpOwotCi0JCQkvKiBGaW5pc2ggdG8gaGFuZGxlIHRoaXMgYnVsa0luIGJ1ZmZlci4gKi8KLQkJCVJUTVBfSVJRX0xPQ0soJnBBZC0+QnVsa0luTG9jaywgSXJxRmxhZ3MpOwotCQkJcFJ4Q29udGV4dC0+QnVsa0luT2Zmc2V0ID0gMDsKLQkJCXBSeENvbnRleHQtPlJlYWRhYmxlID0gRkFMU0U7Ci0JCQlwUnhDb250ZXh0LT5iUnhIYW5kbGluZyA9IEZBTFNFOwotCQkJcEFkLT5SZWFkUG9zaXRpb24gPSAwOwotCQkJcEFkLT5UcmFuc2ZlckJ1ZmZlckxlbmd0aCA9IDA7Ci0JCQlJTkNfUklOR19JTkRFWChwQWQtPk5leHRSeEJ1bGtJblJlYWRJbmRleCwKLQkJCQkgICAgICAgUlhfUklOR19TSVpFKTsKLQkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrSW5Mb2NrLCBJcnFGbGFncyk7Ci0KLQkJfSBlbHNlIHsKLQkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrSW5Mb2NrLCBJcnFGbGFncyk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmICghKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9ORUVEX1NUT1BfUlgpKSkKLQkJRG9CdWxrSW4ocEFkKTsKLQotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQkJVGhpcyByb3V0aW5lIHByb2Nlc3MgUnggSXJwIGFuZCBjYWxsIHJ4IGNvbXBsZXRlIGZ1bmN0aW9uLgotCi0JQXJndW1lbnRzOgotCQlEZXZpY2VPYmplY3QJUG9pbnRlciB0byB0aGUgZGV2aWNlIG9iamVjdCBmb3IgbmV4dCBsb3dlcgotCQkJCQkJZGV2aWNlLiBEZXZpY2VPYmplY3QgcGFzc2VkIGluIGhlcmUgYmVsb25ncyB0bwotCQkJCQkJdGhlIG5leHQgbG93ZXIgZHJpdmVyIGluIHRoZSBzdGFjayBiZWNhdXNlIHdlCi0JCQkJCQl3ZXJlIGludm9rZWQgdmlhIElvQ2FsbERyaXZlciBpbiBVU0JfUnhQYWNrZXQKLQkJCQkJCUFORCBpdCBpcyBub3QgT1VSIGRldmljZSBvYmplY3QKLQkgIElycAkJCQlQdHIgdG8gY29tcGxldGVkIElSUAotCSAgQ29udGV4dAkJCVB0ciB0byBvdXIgQWRhcHRlciBvYmplY3QgKGNvbnRleHQgc3BlY2lmaWVkCi0JCQkJCQlpbiBJb1NldENvbXBsZXRpb25Sb3V0aW5lCi0KLQlSZXR1cm4gVmFsdWU6Ci0JCUFsd2F5cyByZXR1cm5zIFNUQVRVU19NT1JFX1BST0NFU1NJTkdfUkVRVUlSRUQKLQotCU5vdGU6Ci0JCUFsd2F5cyByZXR1cm5zIFNUQVRVU19NT1JFX1BST0NFU1NJTkdfUkVRVUlSRUQKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFJUVVNCQnVsa1J4Q29tcGxldGUoc3RydWN0IHVyYiAqcFVyYiwgc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MpCi17Ci0JLyogdXNlIGEgcmVjZWl2ZSB0YXNrbGV0IHRvIGhhbmRsZSByZWNlaXZlZCBwYWNrZXRzOyAqLwotCS8qIG9yIHNvbWV0aW1lcyBoYXJkd2FyZSBJUlEgd2lsbCBiZSBkaXNhYmxlZCBoZXJlLCBzbyB3ZSBjYW4gbm90ICovCi0JLyogdXNlIHNwaW5fbG9ja19iaCgpL3NwaW5fdW5sb2NrX2JoKCkgYWZ0ZXIgSVJRIGlzIGRpc2FibGVkLiA6PCAqLwotCXN0cnVjdCBydF9yeF9jb250ZXh0ICpwUnhDb250ZXh0OwotCXN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZDsKLQlzdHJ1Y3Qgb3NfY29va2llICpwT2JqOwotCi0JcFJ4Q29udGV4dCA9IChzdHJ1Y3QgcnRfcnhfY29udGV4dCAqKXBVcmItPmNvbnRleHQ7Ci0JcEFkID0gcFJ4Q29udGV4dC0+cEFkOwotCXBPYmogPSAoc3RydWN0IG9zX2Nvb2tpZSAqKXBBZC0+T1NfQ29va2llOwotCi0JcE9iai0+cnhfZG9uZV90YXNrLmRhdGEgPSAodW5zaWduZWQgbG9uZylwVXJiOwotCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnBPYmotPnJ4X2RvbmVfdGFzayk7Ci0KLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0KLQlBcmd1bWVudHM6Ci0KLQlSZXR1cm4gVmFsdWU6Ci0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBSVFVTQktpY2tCdWxrT3V0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQkvKiBCdWxrSW4gUmVzZXQgd2lsbCByZXNldCB3aG9sZSBVU0IgUEhZLiBTbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBmUlRNUF9BREFQVEVSX0JVTEtJTl9SRVNFVCBub3QgZmxhZ2VkLiAqLwotCWlmICghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05FRURfU1RPUF9UWCkKLQkgICAgKSB7Ci0JCS8qIDIuIFBTLVBvbGwgZnJhbWUgaXMgbmV4dCAqLwotCQlpZiAoUlRVU0JfVEVTVF9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfUFNQT0xMKSkKLQkJCVJUVVNCQnVsa091dFBzUG9sbChwQWQpOwotCQkvKiA1LiBNbG1lIGZyYW1lIGlzIG5leHQgKi8KLQkJZWxzZSBpZiAoKFJUVVNCX1RFU1RfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX01MTUUpKSB8fAotCQkJIChwQWQtPk1nbXRSaW5nLlR4U3dGcmVlSWR4IDwgTUdNVF9SSU5HX1NJWkUpKSB7Ci0JCQlSVFVTQkJ1bGtPdXRNTE1FUGFja2V0KHBBZCwgcEFkLT5NZ210UmluZy5UeERtYUlkeCk7Ci0JCX0KLQkJLyogNi4gRGF0YSBmcmFtZSBub3JtYWwgaXMgbmV4dCAqLwotCQlpZiAoUlRVU0JfVEVTVF9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUwpKSB7Ci0JCQlpZiAoKCghUlRNUF9URVNUX0ZMQUcKLQkJCSAgICAgIChwQWQsIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MpKQotCQkJICAgICB8fAotCQkJICAgICAoIU9QU1RBVFVTX1RFU1RfRkxBRwotCQkJICAgICAgKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpKQotCQkJICAgICkpIHsKLQkJCQlSVFVTQkJ1bGtPdXREYXRhUGFja2V0KHBBZCwgMCwKLQkJCQkJCSAgICAgICBwQWQtPgotCQkJCQkJICAgICAgIE5leHRCdWxrT3V0SW5kZXhbMF0pOwotCQkJfQotCQl9Ci0JCWlmIChSVFVTQl9URVNUX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9EQVRBX05PUk1BTF8yKSkgewotCQkJaWYgKCgoIVJUTVBfVEVTVF9GTEFHCi0JCQkgICAgICAocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKSkKLQkJCSAgICAgfHwKLQkJCSAgICAgKCFPUFNUQVRVU19URVNUX0ZMQUcKLQkJCSAgICAgIChwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSkKLQkJCSAgICApKSB7Ci0JCQkJUlRVU0JCdWxrT3V0RGF0YVBhY2tldChwQWQsIDEsCi0JCQkJCQkgICAgICAgcEFkLT4KLQkJCQkJCSAgICAgICBOZXh0QnVsa091dEluZGV4WzFdKTsKLQkJCX0KLQkJfQotCQlpZiAoUlRVU0JfVEVTVF9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUxfMykpIHsKLQkJCWlmICgoKCFSVE1QX1RFU1RfRkxBRwotCQkJICAgICAgKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUykpCi0JCQkgICAgIHx8Ci0JCQkgICAgICghT1BTVEFUVVNfVEVTVF9GTEFHCi0JCQkgICAgICAocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkpCi0JCQkgICAgKSkgewotCQkJCVJUVVNCQnVsa091dERhdGFQYWNrZXQocEFkLCAyLAotCQkJCQkJICAgICAgIHBBZC0+Ci0JCQkJCQkgICAgICAgTmV4dEJ1bGtPdXRJbmRleFsyXSk7Ci0JCQl9Ci0JCX0KLQkJaWYgKFJUVVNCX1RFU1RfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMXzQpKSB7Ci0JCQlpZiAoKCghUlRNUF9URVNUX0ZMQUcKLQkJCSAgICAgIChwQWQsIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MpKQotCQkJICAgICB8fAotCQkJICAgICAoIU9QU1RBVFVTX1RFU1RfRkxBRwotCQkJICAgICAgKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpKQotCQkJICAgICkpIHsKLQkJCQlSVFVTQkJ1bGtPdXREYXRhUGFja2V0KHBBZCwgMywKLQkJCQkJCSAgICAgICBwQWQtPgotCQkJCQkJICAgICAgIE5leHRCdWxrT3V0SW5kZXhbM10pOwotCQkJfQotCQl9Ci0JCS8qIDcuIE51bGwgZnJhbWUgaXMgdGhlIGxhc3QgKi8KLQkJZWxzZSBpZiAoUlRVU0JfVEVTVF9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfREFUQV9OVUxMKSkgewotCQkJaWYgKCFSVE1QX1RFU1RfRkxBRwotCQkJICAgIChwQWQsIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MpKSB7Ci0JCQkJUlRVU0JCdWxrT3V0TnVsbEZyYW1lKHBBZCk7Ci0JCQl9Ci0JCX0KLQkJLyogOC4gTm8gZGF0YSBhdmFpbGFibGUgKi8KLQkJZWxzZQotCQkJOwotCX0KLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0JQ2FsbCBmcm9tIFJlc2V0IGFjdGlvbiBhZnRlciBCdWxrT3V0IGZhaWxlZC4KLQlBcmd1bWVudHM6Ci0KLQlSZXR1cm4gVmFsdWU6Ci0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBSVFVTQkNsZWFuVXBEYXRhQnVsa091dFF1ZXVlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQl1OCBJZHg7Ci0Jc3RydWN0IHJ0X2h0X3R4X2NvbnRleHQgKnBUeENvbnRleHQ7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLS0+Q2xlYW5VcERhdGFCdWxrT3V0UXVldWVcbiIpKTsKLQotCWZvciAoSWR4ID0gMDsgSWR4IDwgNDsgSWR4KyspIHsKLQkJcFR4Q29udGV4dCA9ICZwQWQtPlR4Q29udGV4dFtJZHhdOwotCi0JCXBUeENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gPSBwVHhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uOwotCQlwVHhDb250ZXh0LT5MYXN0T25lID0gRkFMU0U7Ci0JCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+QnVsa091dExvY2tbSWR4XSk7Ci0JCXBBZC0+QnVsa091dFBlbmRpbmdbSWR4XSA9IEZBTFNFOwotCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPkJ1bGtPdXRMb2NrW0lkeF0pOwotCX0KLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLS1DbGVhblVwRGF0YUJ1bGtPdXRRdWV1ZVxuIikpOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQotCUFyZ3VtZW50czoKLQotCVJldHVybiBWYWx1ZToKLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFJUVVNCQ2xlYW5VcE1MTUVCdWxrT3V0UXVldWUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tLT5DbGVhblVwTUxNRUJ1bGtPdXRRdWV1ZVxuIikpOwotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLS1DbGVhblVwTUxNRUJ1bGtPdXRRdWV1ZVxuIikpOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQotCUFyZ3VtZW50czoKLQotCVJldHVybiBWYWx1ZToKLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFJUVVNCQ2FuY2VsUGVuZGluZ0lSUHMoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCVJUVVNCQ2FuY2VsUGVuZGluZ0J1bGtJbklSUChwQWQpOwotCVJUVVNCQ2FuY2VsUGVuZGluZ0J1bGtPdXRJUlAocEFkKTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0KLQlBcmd1bWVudHM6Ci0KLQlSZXR1cm4gVmFsdWU6Ci0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBSVFVTQkNhbmNlbFBlbmRpbmdCdWxrSW5JUlAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCXN0cnVjdCBydF9yeF9jb250ZXh0ICpwUnhDb250ZXh0OwotCXUzMiBpOwotCi0JREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIi0tLT5SVFVTQkNhbmNlbFBlbmRpbmdCdWxrSW5JUlBcbiIpKTsKLQlmb3IgKGkgPSAwOyBpIDwgKFJYX1JJTkdfU0laRSk7IGkrKykgewotCQlwUnhDb250ZXh0ID0gJihwQWQtPlJ4Q29udGV4dFtpXSk7Ci0JCWlmIChwUnhDb250ZXh0LT5JUlBQZW5kaW5nID09IFRSVUUpIHsKLQkJCVJUVVNCX1VOTElOS19VUkIocFJ4Q29udGV4dC0+cFVyYik7Ci0JCQlwUnhDb250ZXh0LT5JUlBQZW5kaW5nID0gRkFMU0U7Ci0JCQlwUnhDb250ZXh0LT5JblVzZSA9IEZBTFNFOwotCQkJLypOZGlzSW50ZXJsb2NrZWREZWNyZW1lbnQoJnBBZC0+UGVuZGluZ1J4KTsgKi8KLQkJCS8qcEFkLT5QZW5kaW5nUngtLTsgKi8KLQkJfQotCX0KLQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiPC0tLVJUVVNCQ2FuY2VsUGVuZGluZ0J1bGtJbklSUFxuIikpOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQotCUFyZ3VtZW50czoKLQotCVJldHVybiBWYWx1ZToKLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFJUVVNCQ2FuY2VsUGVuZGluZ0J1bGtPdXRJUlAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCXN0cnVjdCBydF9odF90eF9jb250ZXh0ICpwSFRUWENvbnRleHQ7Ci0Jc3RydWN0IHJ0X3R4X2NvbnRleHQgKnBNTE1FQ29udGV4dDsKLQlzdHJ1Y3QgcnRfdHhfY29udGV4dCAqcEJlYWNvbkNvbnRleHQ7Ci0Jc3RydWN0IHJ0X3R4X2NvbnRleHQgKnBOdWxsQ29udGV4dDsKLQlzdHJ1Y3QgcnRfdHhfY29udGV4dCAqcFBzUG9sbENvbnRleHQ7Ci0Jc3RydWN0IHJ0X3R4X2NvbnRleHQgKnBSVFNDb250ZXh0OwotCXUzMiBpLCBJZHg7Ci0vKiAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgIElycUZsYWdzOyAqLwotLyogICAgICBzcGlubG9ja190ICAgICAgICAgICpwTG9jazsgKi8KLS8qICAgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAqcFBlbmRpbmc7ICovCi0KLS8qICAgICAgcExvY2sgPSAmcEFkLT5CdWxrT3V0TG9ja1tNR01UUElQRUlEWF07ICovCi0vKiAgICAgIHBQZW5kaW5nID0gJnBBZC0+QnVsa091dFBlbmRpbmdbTUdNVFBJUEVJRFhdOyAqLwotCi0JZm9yIChJZHggPSAwOyBJZHggPCA0OyBJZHgrKykgewotCQlwSFRUWENvbnRleHQgPSAmKHBBZC0+VHhDb250ZXh0W0lkeF0pOwotCi0JCWlmIChwSFRUWENvbnRleHQtPklSUFBlbmRpbmcgPT0gVFJVRSkgewotCi0JCQkvKiBHZXQgdGhlIFVTQl9DT05URVhUIGFuZCBjYW5jZWwgaXQncyBJUlA7IHRoZSBjb21wbGV0aW9uIHJvdXRpbmUgd2lsbCBpdHNlbGYgKi8KLQkJCS8qIHJlbW92ZSBpdCBmcm9tIHRoZSBIZWFkUGVuZGluZ1NlbmRMaXN0IGFuZCBOVUxMIG91dCBIZWFkUGVuZGluZ1NlbmRMaXN0ICovCi0JCQkvKiAgICAgIHdoZW4gdGhlIGxhc3QgSVJQIG9uIHRoZSBsaXN0IGhhcyBiZWVuICBjYW5jZWxsZWQ7IHRoYXQncyBob3cgd2UgZXhpdCB0aGlzIGxvb3AgKi8KLQkJCS8qICovCi0KLQkJCVJUVVNCX1VOTElOS19VUkIocEhUVFhDb250ZXh0LT5wVXJiKTsKLQotCQkJLyogU2xlZXAgMjAwIG1pY3Jvc2Vjb25kcyB0byBnaXZlIGNhbmNlbGxhdGlvbiB0aW1lIHRvIHdvcmsgKi8KLQkJCVJUTVB1c2VjRGVsYXkoMjAwKTsKLQkJfQotCi0JCXBBZC0+QnVsa091dFBlbmRpbmdbSWR4XSA9IEZBTFNFOwotCX0KLQotCS8qUlRNUF9JUlFfTE9DSyhwTG9jaywgSXJxRmxhZ3MpOyAqLwotCWZvciAoaSA9IDA7IGkgPCBNR01UX1JJTkdfU0laRTsgaSsrKSB7Ci0JCXBNTE1FQ29udGV4dCA9IChzdHJ1Y3QgcnRfdHhfY29udGV4dCAqKXBBZC0+TWdtdFJpbmcuQ2VsbFtpXS5BbGxvY1ZhOwotCQlpZiAocE1MTUVDb250ZXh0ICYmIChwTUxNRUNvbnRleHQtPklSUFBlbmRpbmcgPT0gVFJVRSkpIHsKLQotCQkJLyogR2V0IHRoZSBVU0JfQ09OVEVYVCBhbmQgY2FuY2VsIGl0J3MgSVJQOyB0aGUgY29tcGxldGlvbiByb3V0aW5lIHdpbGwgaXRzZWxmICovCi0JCQkvKiByZW1vdmUgaXQgZnJvbSB0aGUgSGVhZFBlbmRpbmdTZW5kTGlzdCBhbmQgTlVMTCBvdXQgSGVhZFBlbmRpbmdTZW5kTGlzdCAqLwotCQkJLyogICAgICB3aGVuIHRoZSBsYXN0IElSUCBvbiB0aGUgbGlzdCBoYXMgYmVlbiAgY2FuY2VsbGVkOyB0aGF0J3MgaG93IHdlIGV4aXQgdGhpcyBsb29wICovCi0JCQkvKiAqLwotCi0JCQlSVFVTQl9VTkxJTktfVVJCKHBNTE1FQ29udGV4dC0+cFVyYik7Ci0JCQlwTUxNRUNvbnRleHQtPklSUFBlbmRpbmcgPSBGQUxTRTsKLQotCQkJLyogU2xlZXAgMjAwIG1pY3Jvc2VjcyB0byBnaXZlIGNhbmNlbGxhdGlvbiB0aW1lIHRvIHdvcmsgKi8KLQkJCVJUTVB1c2VjRGVsYXkoMjAwKTsKLQkJfQotCX0KLQlwQWQtPkJ1bGtPdXRQZW5kaW5nW01HTVRQSVBFSURYXSA9IEZBTFNFOwotCS8qUlRNUF9JUlFfVU5MT0NLKHBMb2NrLCBJcnFGbGFncyk7ICovCi0KLQlmb3IgKGkgPSAwOyBpIDwgQkVBQ09OX1JJTkdfU0laRTsgaSsrKSB7Ci0JCXBCZWFjb25Db250ZXh0ID0gJihwQWQtPkJlYWNvbkNvbnRleHRbaV0pOwotCi0JCWlmIChwQmVhY29uQ29udGV4dC0+SVJQUGVuZGluZyA9PSBUUlVFKSB7Ci0KLQkJCS8qIEdldCB0aGUgVVNCX0NPTlRFWFQgYW5kIGNhbmNlbCBpdCdzIElSUDsgdGhlIGNvbXBsZXRpb24gcm91dGluZSB3aWxsIGl0c2VsZiAqLwotCQkJLyogcmVtb3ZlIGl0IGZyb20gdGhlIEhlYWRQZW5kaW5nU2VuZExpc3QgYW5kIE5VTEwgb3V0IEhlYWRQZW5kaW5nU2VuZExpc3QgKi8KLQkJCS8qICAgICAgd2hlbiB0aGUgbGFzdCBJUlAgb24gdGhlIGxpc3QgaGFzIGJlZW4gIGNhbmNlbGxlZDsgdGhhdCdzIGhvdyB3ZSBleGl0IHRoaXMgbG9vcCAqLwotCQkJLyogKi8KLQotCQkJUlRVU0JfVU5MSU5LX1VSQihwQmVhY29uQ29udGV4dC0+cFVyYik7Ci0KLQkJCS8qIFNsZWVwIDIwMCBtaWNyb3NlY3MgdG8gZ2l2ZSBjYW5jZWxsYXRpb24gdGltZSB0byB3b3JrICovCi0JCQlSVE1QdXNlY0RlbGF5KDIwMCk7Ci0JCX0KLQl9Ci0KLQlwTnVsbENvbnRleHQgPSAmKHBBZC0+TnVsbENvbnRleHQpOwotCWlmIChwTnVsbENvbnRleHQtPklSUFBlbmRpbmcgPT0gVFJVRSkKLQkJUlRVU0JfVU5MSU5LX1VSQihwTnVsbENvbnRleHQtPnBVcmIpOwotCi0JcFJUU0NvbnRleHQgPSAmKHBBZC0+UlRTQ29udGV4dCk7Ci0JaWYgKHBSVFNDb250ZXh0LT5JUlBQZW5kaW5nID09IFRSVUUpCi0JCVJUVVNCX1VOTElOS19VUkIocFJUU0NvbnRleHQtPnBVcmIpOwotCi0JcFBzUG9sbENvbnRleHQgPSAmKHBBZC0+UHNQb2xsQ29udGV4dCk7Ci0JaWYgKHBQc1BvbGxDb250ZXh0LT5JUlBQZW5kaW5nID09IFRSVUUpCi0JCVJUVVNCX1VOTElOS19VUkIocFBzUG9sbENvbnRleHQtPnBVcmIpOwotCi0JZm9yIChJZHggPSAwOyBJZHggPCA0OyBJZHgrKykgewotCQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPkJ1bGtPdXRMb2NrW0lkeF0pOwotCQlwQWQtPkJ1bGtPdXRQZW5kaW5nW0lkeF0gPSBGQUxTRTsKLQkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5CdWxrT3V0TG9ja1tJZHhdKTsKLQl9Ci19Ci0KLSNlbmRpZiAvKiBSVE1QX01BQ19VU0IgLy8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL3J0dXNiX2RhdGEuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL3J0dXNiX2RhdGEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI3MmJjZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9ydHVzYl9kYXRhLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjIgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLQlNb2R1bGUgTmFtZToKLQlydHVzYl9kYXRhLmMKLQotCUFic3RyYWN0OgotCVJhbGluayBVU0IgZHJpdmVyIFR4L1J4IGZ1bmN0aW9ucy4KLQotCVJldmlzaW9uIEhpc3Rvcnk6Ci0JV2hvICAgICAgICAgV2hlbiAgICAgICAgICBXaGF0Ci0JLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JSmFuICAgICAgICAgICAgMDMtMjUtMjAwNiAgICBjcmVhdGVkCi0KLSovCi0KLSNpZmRlZiBSVE1QX01BQ19VU0IKLQotI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgotCi1leHRlcm4gdTggUGh5MTFCR05leHRSYXRlVXB3YXJkW107CS8qIGRlZmluZWQgaW4gbWxtZS5jICovCi1leHRlcm4gdTggRXBUb1F1ZXVlW107Ci0KLXZvaWQgUkVQT1JUX0FNU0RVX0ZSQU1FU19UT19MTEMoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCXU4ICpwRGF0YSwgdW5zaWduZWQgbG9uZyBEYXRhU2l6ZSkKLXsKLQl2b2lkICpwUGFja2V0OwotCXUzMiBuTVNEVTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqcFNrYjsKLQotCW5NU0RVID0gMDsKLQkvKiBhbGxvY2F0ZSBhIHJ4IHBhY2tldCAqLwotCXBTa2IgPSBkZXZfYWxsb2Nfc2tiKFJYX0JVRkZFUl9BR0dSRVNJWkUpOwotCXBQYWNrZXQgPSAodm9pZCAqKU9TUEtUX1RPX1JUUEtUKHBTa2IpOwotCWlmIChwU2tiKSB7Ci0KLQkJLyogY29udmVydCA4MDIuMTEgdG8gODAyLjMgcGFja2V0ICovCi0JCXBTa2ItPmRldiA9IGdldF9uZXRkZXZfZnJvbV9ic3NpZChwQWQsIEJTUzApOwotCQlSVE1QX1NFVF9QQUNLRVRfU09VUkNFKHBQYWNrZXQsIFBLVFNSQ19ORElTKTsKLQkJZGVhZ2dyZWdhdGVfQU1TRFVfYW5ub3VuY2UocEFkLCBwUGFja2V0LCBwRGF0YSwgRGF0YVNpemUpOwotCX0gZWxzZSB7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkNhbid0IGFsbG9jYXRlIHNrYlxuIikpOwotCX0KLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUJRGVzY3JpcHRpb246Ci0JCVRoaXMgc3Vicm91dGluZSB3aWxsIHNjYW4gdGhyb3VnaCByZWxlYXRpdmUgcmluZyBkZXNjcmlwdG9yIHRvIGZpbmQKLQkJb3V0IGF2YWlsYWJsZSBmcmVlIHJpbmcgZGVzY3JpcHRvciBhbmQgY29tcGFyZSB3aXRoIHJlcXVlc3Qgc2l6ZS4KLQotCUFyZ3VtZW50czoKLQkJcEFkCVBvaW50ZXIJdG8gb3VyIGFkYXB0ZXIKLQkJUmluZ1R5cGUJU2VsZWN0ZWQgUmluZwotCi0JUmV0dXJuIFZhbHVlOgotCQlORElTX1NUQVRVU19GQUlMVVJFCQlOb3QgZW5vdWdoIGZyZWUgZGVzY3JpcHRvcgotCQlORElTX1NUQVRVU19TVUNDRVNTCQlFbm91Z2ggZnJlZSBkZXNjcmlwdG9yCi0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotaW50IFJUVVNCRnJlZURlc2NyaXB0b3JSZXF1ZXN0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkgICAgICAgdTggQnVsa091dFBpcGVJZCwKLQkJCQkgICAgICAgdTMyIE51bWJlclJlcXVpcmVkKQotewotLyogICAgICB1OCAgICAgICAgICAgICAgICAgICBGcmVlTnVtYmVyID0gMDsgKi8KLS8qICAgICAgdTMyICAgICAgICAgICAgICAgICAgICBJbmRleDsgKi8KLQlpbnQgU3RhdHVzID0gTkRJU19TVEFUVVNfRkFJTFVSRTsKLQl1bnNpZ25lZCBsb25nIElycUZsYWdzOwotCXN0cnVjdCBydF9odF90eF9jb250ZXh0ICpwSFRUWENvbnRleHQ7Ci0KLQlwSFRUWENvbnRleHQgPSAmcEFkLT5UeENvbnRleHRbQnVsa091dFBpcGVJZF07Ci0JUlRNUF9JUlFfTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKLQlpZiAoKHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiA8IHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbikKLQkgICAgJiYKLQkgICAgKChwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gKyBOdW1iZXJSZXF1aXJlZCArCi0JICAgICAgTE9DQUxfVFhCVUZfU0laRSkgPiBwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24pKSB7Ci0KLQkJUlRVU0JfU0VUX0JVTEtfRkxBRyhwQWQsCi0JCQkJICAgIChmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUwgPDwKLQkJCQkgICAgIEJ1bGtPdXRQaXBlSWQpKTsKLQl9IGVsc2UgaWYgKChwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gPT0gOCkKLQkJICAgJiYgKHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbiA8Ci0JCSAgICAgICAoTnVtYmVyUmVxdWlyZWQgKyBMT0NBTF9UWEJVRl9TSVpFKSkpIHsKLQkJUlRVU0JfU0VUX0JVTEtfRkxBRyhwQWQsCi0JCQkJICAgIChmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUwgPDwKLQkJCQkgICAgIEJ1bGtPdXRQaXBlSWQpKTsKLQl9IGVsc2UgaWYgKHBIVFRYQ29udGV4dC0+YkN1cldyaXRpbmcgPT0gVFJVRSkgewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIlJUVVNCRnJlZUQgYzMgLS0+IFF1ZUlkeD0lZCwgQ1dQb3M9JWxkLCBOQk91dFBvcz0lbGQhXG4iLAotCQkJICBCdWxrT3V0UGlwZUlkLCBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24sCi0JCQkgIHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbikpOwotCQlSVFVTQl9TRVRfQlVMS19GTEFHKHBBZCwKLQkJCQkgICAgKGZSVFVTQl9CVUxLX09VVF9EQVRBX05PUk1BTCA8PAotCQkJCSAgICAgQnVsa091dFBpcGVJZCkpOwotCX0gZWxzZSB7Ci0JCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7Ci0JfQotCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKLQotCXJldHVybiBTdGF0dXM7Ci19Ci0KLWludCBSVFVTQkZyZWVEZXNjcmlwdG9yUmVsZWFzZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJICAgICAgIHU4IEJ1bGtPdXRQaXBlSWQpCi17Ci0JdW5zaWduZWQgbG9uZyBJcnFGbGFnczsKLQlzdHJ1Y3QgcnRfaHRfdHhfY29udGV4dCAqcEhUVFhDb250ZXh0OwotCi0JcEhUVFhDb250ZXh0ID0gJnBBZC0+VHhDb250ZXh0W0J1bGtPdXRQaXBlSWRdOwotCVJUTVBfSVJRX0xPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFncyk7Ci0JcEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZyA9IEZBTFNFOwotCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKLQotCXJldHVybiBORElTX1NUQVRVU19TVUNDRVNTOwotfQotCi1CT09MRUFOIFJUVVNCTmVlZFF1ZXVlQmFja0ZvckFnZyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsIHU4IEJ1bGtPdXRQaXBlSWQpCi17Ci0JdW5zaWduZWQgbG9uZyBJcnFGbGFnczsKLQlzdHJ1Y3QgcnRfaHRfdHhfY29udGV4dCAqcEhUVFhDb250ZXh0OwotCUJPT0xFQU4gbmVlZFF1ZUJhY2sgPSBGQUxTRTsKLQotCXBIVFRYQ29udGV4dCA9ICZwQWQtPlR4Q29udGV4dFtCdWxrT3V0UGlwZUlkXTsKLQotCVJUTVBfSVJRX0xPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFncyk7Ci0JaWYgKChwSFRUWENvbnRleHQtPklSUFBlbmRpbmcgPT0KLQkgICAgIFRSVUUpIC8qJiYgKHBBZC0+VHhTd1F1ZXVlW0J1bGtPdXRQaXBlSWRdLk51bWJlciA9PSAwKSAqLykgewotCQlpZiAoKHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiA8Ci0JCSAgICAgcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbikKLQkJICAgICYmCi0JCSAgICAoKChwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uICsKLQkJICAgICAgIE1BWF9BR0dSRUdBVElPTl9TSVpFKSA8IE1BWF9UWEJVTEtfTElNSVQpCi0JCSAgICAgfHwgKHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiA+Ci0JCQkgTUFYX0FHR1JFR0FUSU9OX1NJWkUpKSkgewotCQkJbmVlZFF1ZUJhY2sgPSBUUlVFOwotCQl9IGVsc2UKLQkJICAgIGlmICgocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uID4KLQkJCSBwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uKQotCQkJJiYKLQkJCSgocEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiArCi0JCQkgIE1BWF9BR0dSRUdBVElPTl9TSVpFKSA8Ci0JCQkgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uKSkgewotCQkJbmVlZFF1ZUJhY2sgPSBUUlVFOwotCQl9Ci0JfQotCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKLQotCXJldHVybiBuZWVkUXVlQmFjazsKLQotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQotCUFyZ3VtZW50czoKLQotCVJldHVybiBWYWx1ZToKLQotCUlSUUwgPQotCi0JTm90ZToKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLXZvaWQgUlRVU0JSZWplY3RQZW5kaW5nUGFja2V0cyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0JdTggSW5kZXg7Ci0Jc3RydWN0IHJ0X3F1ZXVlX2VudHJ5ICpwRW50cnk7Ci0Jdm9pZCAqcFBhY2tldDsKLQlzdHJ1Y3QgcnRfcXVldWVfaGVhZGVyICpwUXVldWU7Ci0KLQlmb3IgKEluZGV4ID0gMDsgSW5kZXggPCA0OyBJbmRleCsrKSB7Ci0JCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+VHhTd1F1ZXVlTG9ja1tJbmRleF0pOwotCQl3aGlsZSAocEFkLT5UeFN3UXVldWVbSW5kZXhdLkhlYWQgIT0gTlVMTCkgewotCQkJcFF1ZXVlID0gKHN0cnVjdCBydF9xdWV1ZV9oZWFkZXIgKikmKHBBZC0+VHhTd1F1ZXVlW0luZGV4XSk7Ci0JCQlwRW50cnkgPSBSZW1vdmVIZWFkUXVldWUocFF1ZXVlKTsKLQkJCXBQYWNrZXQgPSBRVUVVRV9FTlRSWV9UT19QQUNLRVQocEVudHJ5KTsKLQkJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKLQkJfQotCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPlR4U3dRdWV1ZUxvY2tbSW5kZXhdKTsKLQotCX0KLQotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZQlEZXNjcmlwdGlvbjoKLQkJQ2FsY3VsYXRlcyB0aGUgZHVyYXRpb24gd2hpY2ggaXMgcmVxdWlyZWQgdG8gdHJhbnNtaXQgb3V0IGZyYW1lcwotCXdpdGggZ2l2ZW4gc2l6ZSBhbmQgc3BlY2lmaWVkIHJhdGUuCi0KLQlBcmd1bWVudHM6Ci0JCXBUeEQJCVBvaW50ZXIgdG8gdHJhbnNtaXQgZGVzY3JpcHRvcgotCQlBY2sJCQlTZXR0aW5nIGZvciBBY2sgcmVxdWlyZW1lbnQgYml0Ci0JCUZyYWdtZW50CVNldHRpbmcgZm9yIEZyYWdtZW50IGJpdAotCQlSZXRyeU1vZGUJU2V0dGluZyBmb3IgcmV0cnkgbW9kZQotCQlJZnMJCQlTZXR0aW5nIGZvciBJRlMgZ2FwCi0JCVJhdGUJCVNldHRpbmcgZm9yIHRyYW5zbWl0IHJhdGUKLQkJU2VydmljZQkJU2V0dGluZyBmb3Igc2VydmljZQotCQlMZW5ndGgJCUZyYW1lIGxlbmd0aAotCQlUeFByZWFtYmxlICBTaG9ydCBvciBMb25nIHByZWFtYmxlIHdoZW4gdXNpbmcgQ0NLIHJhdGVzCi0JCVF1ZUlkeCAtIDAtMywgYWNjb3JkaW5nIHRvIDgwMi4xMWUvZDQuNCBKdW5lLzIwMDMKLQotCVJldHVybiBWYWx1ZToKLQkJTm9uZQotCi0JSVJRTCA9IFBBU1NJVkVfTEVWRUwKLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLQotdm9pZCBSVE1QV3JpdGVUeEluZm8oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkgICAgIHN0cnVjdCBydF90eGluZm8gKnBUeEluZm8sCi0JCSAgICAgdTE2IFVTQkRNQXBrdExlbiwKLQkJICAgICBJTiBCT09MRUFOIGJXaXYsCi0JCSAgICAgdTggUXVldWVTZWwsIHU4IE5leHRWYWxpZCwgdTggVHhCdXJzdCkKLXsKLQlwVHhJbmZvLT5VU0JETUFUeFBrdExlbiA9IFVTQkRNQXBrdExlbjsKLQlwVHhJbmZvLT5RU0VMID0gUXVldWVTZWw7Ci0JaWYgKFF1ZXVlU2VsICE9IEZJRk9fRURDQSkKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCI9PT09PiBRdWV1ZVNlbCAhPSBGSUZPX0VEQ0E8PT09PT09PT09PT09XG4iKSk7Ci0JcFR4SW5mby0+VVNCRE1BTmV4dFZMRCA9IEZBTFNFOwkvKk5leHRWYWxpZDsgIC8vIE5lZWQgdG8gY2hlY2sgd2l0aCBKYW4gYWJvdXQgdGhpcy4gKi8KLQlwVHhJbmZvLT5VU0JETUFUeGJ1cnN0ID0gVHhCdXJzdDsKLQlwVHhJbmZvLT5XSVYgPSBiV2l2OwotCXBUeEluZm8tPlN3VXNlTGFzdFJvdW5kID0gMDsKLQlwVHhJbmZvLT5yc3YgPSAwOwotCXBUeEluZm8tPnJzdjIgPSAwOwotfQotCi0jZW5kaWYgLyogUlRNUF9NQUNfVVNCIC8vICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9ydHVzYl9pby5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vcnR1c2JfaW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2QyZjdlMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9ydHVzYl9pby5jCisrKyAvZGV2L251bGwKQEAgLTEsMjEwNCArMCwwIEBACi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFJhbGluayBUZWNoIEluYy4KLSAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKLSAqIEhzaW5jaHUgQ291bnR5IDMwMiwKLSAqIFRhaXdhbiwgUi5PLkMuCi0gKgotICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotCU1vZHVsZSBOYW1lOgotCXJ0dXNiX2lvLmMKLQotCUFic3RyYWN0OgotCi0JUmV2aXNpb24gSGlzdG9yeToKLQlXaG8JCQlXaGVuCSAgICBXaGF0Ci0JLS0tLS0tLS0JLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCU5hbWUJCURhdGUJICAgIE1vZGlmaWNhdGlvbiBsb2dzCi0JUGF1bCBMaW4gICAgMDYtMjUtMjAwNCAgY3JlYXRlZAotKi8KLQotI2lmZGVmIFJUTVBfTUFDX1VTQgotCi0jaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCi0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOiBOSUMgaW5pdGlhbGl6YXRpb24gY29tcGxldGUKLQotCUFyZ3VtZW50czoKLQotCVJldHVybiBWYWx1ZToKLQotCUlSUUwgPQotCi0JTm90ZToKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLQotc3RhdGljIGludCBSVFVTQkZpcm13YXJlUnVuKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCkKLXsKLQlpbnQgU3RhdHVzOwotCi0JU3RhdHVzID0gUlRVU0JfVmVuZG9yUmVxdWVzdChwQWQsCi0JCQkJICAgICBVU0JEX1RSQU5TRkVSX0RJUkVDVElPTl9PVVQsCi0JCQkJICAgICBERVZJQ0VfVkVORE9SX1JFUVVFU1RfT1VULAotCQkJCSAgICAgMHgwMSwgMHg4LCAwLCBOVUxMLCAwKTsKLQotCXJldHVybiBTdGF0dXM7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOiBXcml0ZSBGaXJtd2FyZSB0byBOSUMuCi0KLQlBcmd1bWVudHM6Ci0KLQlSZXR1cm4gVmFsdWU6Ci0KLQlJUlFMID0KLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi1pbnQgUlRVU0JGaXJtd2FyZVdyaXRlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgICAgIGNvbnN0IHU4ICpwRndJbWFnZSwgdW5zaWduZWQgbG9uZyBGd0xlbikKLXsKLQl1MzIgTWFjUmVnOwotCWludCBTdGF0dXM7Ci0vKiAgICAgIHVuc2lnbmVkIGxvbmcgICAgICAgICAgIGk7ICovCi0JdTE2IHdyaXRlTGVuOwotCi0JU3RhdHVzID0gUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBNQUNfQ1NSMCwgJk1hY1JlZyk7Ci0KLQl3cml0ZUxlbiA9IEZ3TGVuOwotCVJUVVNCTXVsdGlXcml0ZShwQWQsIEZJUk1XQVJFX0lNQUdFX0JBU0UsIHBGd0ltYWdlLCB3cml0ZUxlbik7Ci0KLQlTdGF0dXMgPSBSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCAweDcwMTQsIDB4ZmZmZmZmZmYpOwotCVN0YXR1cyA9IFJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIDB4NzAxYywgMHhmZmZmZmZmZik7Ci0JU3RhdHVzID0gUlRVU0JGaXJtd2FyZVJ1bihwQWQpOwotCi0JLyoyMDA4LzExLzI4OktIIGFkZCB0byBmaXggdGhlIGRlYWQgcmYgZnJlcXVlbmN5IG9mZnNldCBidWc8LS0gKi8KLQlSVE1QdXNlY0RlbGF5KDEwMDAwKTsKLQlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBIMk1fTUFJTEJPWF9DU1IsIDApOwotCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHg3MiwgMHgwMCwgMHgwMCwgMHgwMCk7CS8qcmVzZXQgcmYgYnkgTUNVIHN1cHBvcnRlZCBieSBuZXcgZmlybXdhcmUgKi8KLQkvKjIwMDgvMTEvMjg6S0ggYWRkIHRvIGZpeCB0aGUgZGVhZCByZiBmcmVxdWVuY3kgb2Zmc2V0IGJ1Zy0tPiAqLwotCi0JcmV0dXJuIFN0YXR1czsKLX0KLQotaW50IFJUVVNCVmVuZGVyUmVzZXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCWludCBTdGF0dXM7Ci0JREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIi0tPlJUVVNCVmVuZGVyUmVzZXRcbiIpKTsKLQlTdGF0dXMgPSBSVFVTQl9WZW5kb3JSZXF1ZXN0KHBBZCwKLQkJCQkgICAgIFVTQkRfVFJBTlNGRVJfRElSRUNUSU9OX09VVCwKLQkJCQkgICAgIERFVklDRV9WRU5ET1JfUkVRVUVTVF9PVVQsCi0JCQkJICAgICAweDAxLCAweDEsIDAsIE5VTEwsIDApOwotCi0JREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIjwtLVJUVVNCVmVuZGVyUmVzZXRcbiIpKTsKLQlyZXR1cm4gU3RhdHVzOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjogUmVhZCB2YXJpb3VzIGxlbmd0aCBkYXRhIGZyb20gUlQyNTczCi0KLQlBcmd1bWVudHM6Ci0KLQlSZXR1cm4gVmFsdWU6Ci0KLQlJUlFMID0KLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi1pbnQgUlRVU0JNdWx0aVJlYWQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJdTE2IE9mZnNldCwgdTggKnBEYXRhLCB1MTYgbGVuZ3RoKQotewotCWludCBTdGF0dXM7Ci0KLQlTdGF0dXMgPSBSVFVTQl9WZW5kb3JSZXF1ZXN0KHBBZCwKLQkJCQkgICAgIChVU0JEX1RSQU5TRkVSX0RJUkVDVElPTl9JTiB8Ci0JCQkJICAgICAgVVNCRF9TSE9SVF9UUkFOU0ZFUl9PSyksCi0JCQkJICAgICBERVZJQ0VfVkVORE9SX1JFUVVFU1RfSU4sIDB4NywgMCwgT2Zmc2V0LAotCQkJCSAgICAgcERhdGEsIGxlbmd0aCk7Ci0KLQlyZXR1cm4gU3RhdHVzOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjogV3JpdGUgdmFyaW91cyBsZW5ndGggZGF0YSB0byBSVDI1NzMKLQotCUFyZ3VtZW50czoKLQotCVJldHVybiBWYWx1ZToKLQotCUlSUUwgPQotCi0JTm90ZToKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLWludCBSVFVTQk11bHRpV3JpdGVfT25lQnl0ZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgICAgdTE2IE9mZnNldCwgY29uc3QgdTggKnBEYXRhKQotewotCWludCBTdGF0dXM7Ci0KLQkvKiBUT0RPOiBJbiAyODcwLCB1c2UgdGhpcyBmdW5jaXRvbiBjYXJlZnVsbHkgY2F1c2UgaXQncyBub3Qgc3RhYmxlLiAqLwotCVN0YXR1cyA9IFJUVVNCX1ZlbmRvclJlcXVlc3QocEFkLAotCQkJCSAgICAgVVNCRF9UUkFOU0ZFUl9ESVJFQ1RJT05fT1VULAotCQkJCSAgICAgREVWSUNFX1ZFTkRPUl9SRVFVRVNUX09VVCwKLQkJCQkgICAgIDB4NiwgMCwgT2Zmc2V0LCAodTggKilwRGF0YSwgMSk7Ci0KLQlyZXR1cm4gU3RhdHVzOwotfQotCi1pbnQgUlRVU0JNdWx0aVdyaXRlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJICAgIHUxNiBPZmZzZXQsIGNvbnN0IHU4ICpwRGF0YSwgdTE2IGxlbmd0aCkKLXsKLQlpbnQgU3RhdHVzOwotCi0JdTE2IGluZGV4ID0gMCwgVmFsdWU7Ci0JY29uc3QgdTggKnBTcmMgPSBwRGF0YTsKLQl1MTYgcmVzdWRlID0gMDsKLQotCXJlc3VkZSA9IGxlbmd0aCAlIDI7Ci0JbGVuZ3RoICs9IHJlc3VkZTsKLQlkbyB7Ci0JCVZhbHVlID0gKHUxNikoKnBTcmMgfCAoKihwU3JjICsgMSkgPDwgOCkpOwotCQlTdGF0dXMgPSBSVFVTQlNpbmdsZVdyaXRlKHBBZCwgT2Zmc2V0ICsgaW5kZXgsIFZhbHVlKTsKLQkJaW5kZXggKz0gMjsKLQkJbGVuZ3RoIC09IDI7Ci0JCXBTcmMgPSBwU3JjICsgMjsKLQl9IHdoaWxlIChsZW5ndGggPiAwKTsKLQotCXJldHVybiBTdGF0dXM7Ci19Ci0KLWludCBSVFVTQlNpbmdsZVdyaXRlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgdTE2IE9mZnNldCwgdTE2IFZhbHVlKQotewotCWludCBTdGF0dXM7Ci0KLQlTdGF0dXMgPSBSVFVTQl9WZW5kb3JSZXF1ZXN0KHBBZCwKLQkJCQkgICAgIFVTQkRfVFJBTlNGRVJfRElSRUNUSU9OX09VVCwKLQkJCQkgICAgIERFVklDRV9WRU5ET1JfUkVRVUVTVF9PVVQsCi0JCQkJICAgICAweDIsIFZhbHVlLCBPZmZzZXQsIE5VTEwsIDApOwotCi0JcmV0dXJuIFN0YXR1czsKLQotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjogUmVhZCAzMi1iaXQgTUFDIHJlZ2lzdGVyCi0KLQlBcmd1bWVudHM6Ci0KLQlSZXR1cm4gVmFsdWU6Ci0KLQlJUlFMID0KLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi1pbnQgUlRVU0JSZWFkTUFDUmVnaXN0ZXIoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgICAgdTE2IE9mZnNldCwgdTMyICpwVmFsdWUpCi17Ci0JaW50IFN0YXR1cyA9IDA7Ci0JdTMyIGxvY2FsVmFsOwotCi0JU3RhdHVzID0gUlRVU0JfVmVuZG9yUmVxdWVzdChwQWQsCi0JCQkJICAgICAoVVNCRF9UUkFOU0ZFUl9ESVJFQ1RJT05fSU4gfAotCQkJCSAgICAgIFVTQkRfU0hPUlRfVFJBTlNGRVJfT0spLAotCQkJCSAgICAgREVWSUNFX1ZFTkRPUl9SRVFVRVNUX0lOLCAweDcsIDAsIE9mZnNldCwKLQkJCQkgICAgICZsb2NhbFZhbCwgNCk7Ci0KLQkqcFZhbHVlID0gbGUyY3B1MzIobG9jYWxWYWwpOwotCi0JaWYgKFN0YXR1cyA8IDApCi0JCSpwVmFsdWUgPSAweGZmZmZmZmZmOwotCi0JcmV0dXJuIFN0YXR1czsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246IFdyaXRlIDMyLWJpdCBNQUMgcmVnaXN0ZXIKLQotCUFyZ3VtZW50czoKLQotCVJldHVybiBWYWx1ZToKLQotCUlSUUwgPQotCi0JTm90ZToKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLWludCBSVFVTQldyaXRlTUFDUmVnaXN0ZXIoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgICAgIHUxNiBPZmZzZXQsIHUzMiBWYWx1ZSkKLXsKLQlpbnQgU3RhdHVzOwotCXUzMiBsb2NhbFZhbDsKLQotCWxvY2FsVmFsID0gVmFsdWU7Ci0KLQlTdGF0dXMgPSBSVFVTQlNpbmdsZVdyaXRlKHBBZCwgT2Zmc2V0LCAodTE2KShsb2NhbFZhbCAmIDB4ZmZmZikpOwotCVN0YXR1cyA9Ci0JICAgIFJUVVNCU2luZ2xlV3JpdGUocEFkLCBPZmZzZXQgKyAyLAotCQkJICAgICAodTE2KSgobG9jYWxWYWwgJiAweGZmZmYwMDAwKSA+PiAxNikpOwotCi0JcmV0dXJuIFN0YXR1czsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246IFJlYWQgOC1iaXQgQkJQIHJlZ2lzdGVyCi0KLQlBcmd1bWVudHM6Ci0KLQlSZXR1cm4gVmFsdWU6Ci0KLQlJUlFMID0KLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi1pbnQgUlRVU0JSZWFkQkJQUmVnaXN0ZXIoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgICAgdTggSWQsIHU4ICpwVmFsdWUpCi17Ci0JQkJQX0NTUl9DRkdfU1RSVUMgQmJwQ3NyOwotCXUzMiBpID0gMDsKLQlpbnQgc3RhdHVzOwotCi0JLyogVmVyaWZ5IHRoZSBidXN5IGNvbmRpdGlvbiAqLwotCWRvIHsKLQkJc3RhdHVzID0gUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBCQlBfQ1NSX0NGRywgJkJicENzci53b3JkKTsKLQkJaWYgKHN0YXR1cyA+PSAwKSB7Ci0JCQlpZiAoIShCYnBDc3IuZmllbGQuQnVzeSA9PSBCVVNZKSkKLQkJCQlicmVhazsKLQkJfQotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIlJUVVNCUmVhZEJCUFJlZ2lzdGVyKEJCUF9DU1JfQ0ZHXzEpOnJldHJ5IGNvdW50PSVkIVxuIiwKLQkJCSAgaSkpOwotCQlpKys7Ci0JfSB3aGlsZSAoKGkgPCBSRVRSWV9MSU1JVCkKLQkJICYmICghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSk7Ci0KLQlpZiAoKGkgPT0gUkVUUllfTElNSVQpCi0JICAgIHx8IChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKSB7Ci0JCS8qICovCi0JCS8qIFJlYWQgZmFpbGVkIHRoZW4gUmV0dXJuIERlZmF1bHQgdmFsdWUuICovCi0JCS8qICovCi0JCSpwVmFsdWUgPSBwQWQtPkJicFdyaXRlTGF0Y2hbSWRdOwotCi0JCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwKLQkJCSAgICAgKCJSZXRyeSBjb3VudCBleGhhdXN0ZWQgb3IgZGV2aWNlIHJlbW92ZWQhISFcbiIpKTsKLQkJcmV0dXJuIFNUQVRVU19VTlNVQ0NFU1NGVUw7Ci0JfQotCS8qIFByZXBhcmUgZm9yIHdyaXRlIG1hdGVyaWFsICovCi0JQmJwQ3NyLndvcmQgPSAwOwotCUJicENzci5maWVsZC5mUmVhZCA9IDE7Ci0JQmJwQ3NyLmZpZWxkLkJ1c3kgPSAxOwotCUJicENzci5maWVsZC5SZWdOdW0gPSBJZDsKLQlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBCQlBfQ1NSX0NGRywgQmJwQ3NyLndvcmQpOwotCi0JaSA9IDA7Ci0JLyogVmVyaWZ5IHRoZSBidXN5IGNvbmRpdGlvbiAqLwotCWRvIHsKLQkJc3RhdHVzID0gUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBCQlBfQ1NSX0NGRywgJkJicENzci53b3JkKTsKLQkJaWYgKHN0YXR1cyA+PSAwKSB7Ci0JCQlpZiAoIShCYnBDc3IuZmllbGQuQnVzeSA9PSBCVVNZKSkgewotCQkJCSpwVmFsdWUgPSAodTgpQmJwQ3NyLmZpZWxkLlZhbHVlOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiUlRVU0JSZWFkQkJQUmVnaXN0ZXIoQkJQX0NTUl9DRkdfMik6cmV0cnkgY291bnQ9JWQhXG4iLAotCQkJICBpKSk7Ci0JCWkrKzsKLQl9IHdoaWxlICgoaSA8IFJFVFJZX0xJTUlUKQotCQkgJiYgKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKTsKLQotCWlmICgoaSA9PSBSRVRSWV9MSU1JVCkKLQkgICAgfHwgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpIHsKLQkJLyogKi8KLQkJLyogUmVhZCBmYWlsZWQgdGhlbiBSZXR1cm4gRGVmYXVsdCB2YWx1ZS4gKi8KLQkJLyogKi8KLQkJKnBWYWx1ZSA9IHBBZC0+QmJwV3JpdGVMYXRjaFtJZF07Ci0KLQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLAotCQkJICAgICAoIlJldHJ5IGNvdW50IGV4aGF1c3RlZCBvciBkZXZpY2UgcmVtb3ZlZCEhIVxuIikpOwotCQlyZXR1cm4gU1RBVFVTX1VOU1VDQ0VTU0ZVTDsKLQl9Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOiBXcml0ZSA4LWJpdCBCQlAgcmVnaXN0ZXIKLQotCUFyZ3VtZW50czoKLQotCVJldHVybiBWYWx1ZToKLQotCUlSUUwgPQotCi0JTm90ZToKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLWludCBSVFVTQldyaXRlQkJQUmVnaXN0ZXIoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICAgICAgIHU4IElkLCB1OCBWYWx1ZSkKLXsKLQlCQlBfQ1NSX0NGR19TVFJVQyBCYnBDc3I7Ci0JdTMyIGkgPSAwOwotCWludCBzdGF0dXM7Ci0JLyogVmVyaWZ5IHRoZSBidXN5IGNvbmRpdGlvbiAqLwotCWRvIHsKLQkJc3RhdHVzID0gUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBCQlBfQ1NSX0NGRywgJkJicENzci53b3JkKTsKLQkJaWYgKHN0YXR1cyA+PSAwKSB7Ci0JCQlpZiAoIShCYnBDc3IuZmllbGQuQnVzeSA9PSBCVVNZKSkKLQkJCQlicmVhazsKLQkJfQotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCSAoIlJUVVNCV3JpdGVCQlBSZWdpc3RlcihCQlBfQ1NSX0NGRyk6cmV0cnkgY291bnQ9JWQhXG4iLAotCQkJICBpKSk7Ci0JCWkrKzsKLQl9IHdoaWxlICgoaSA8IFJFVFJZX0xJTUlUKQotCSAgICAgICAmJiAoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpOwotCi0JaWYgKChpID09IFJFVFJZX0xJTUlUKQotCSAgICB8fCAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSkgewotCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsCi0JCQkgICAgICgiUmV0cnkgY291bnQgZXhoYXVzdGVkIG9yIGRldmljZSByZW1vdmVkISEhXG4iKSk7Ci0JCXJldHVybiBTVEFUVVNfVU5TVUNDRVNTRlVMOwotCX0KLQkvKiBQcmVwYXJlIGZvciB3cml0ZSBtYXRlcmlhbCAqLwotCUJicENzci53b3JkID0gMDsKLQlCYnBDc3IuZmllbGQuZlJlYWQgPSAwOwotCUJicENzci5maWVsZC5WYWx1ZSA9IFZhbHVlOwotCUJicENzci5maWVsZC5CdXN5ID0gMTsKLQlCYnBDc3IuZmllbGQuUmVnTnVtID0gSWQ7Ci0JUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgQkJQX0NTUl9DRkcsIEJicENzci53b3JkKTsKLQotCXBBZC0+QmJwV3JpdGVMYXRjaFtJZF0gPSBWYWx1ZTsKLQotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246IFdyaXRlIFJGIHJlZ2lzdGVyIHRocm91Z2ggTUFDCi0KLQlBcmd1bWVudHM6Ci0KLQlSZXR1cm4gVmFsdWU6Ci0KLQlJUlFMID0KLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi1pbnQgUlRVU0JXcml0ZVJGUmVnaXN0ZXIoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCB1MzIgVmFsdWUpCi17Ci0JUEhZX0NTUjRfU1RSVUMgUGh5Q3NyNDsKLQl1MzIgaSA9IDA7Ci0JaW50IHN0YXR1czsKLQotCU5kaXNaZXJvTWVtb3J5KCZQaHlDc3I0LCBzaXplb2YoUEhZX0NTUjRfU1RSVUMpKTsKLQlkbyB7Ci0JCXN0YXR1cyA9IFJUVVNCUmVhZE1BQ1JlZ2lzdGVyKHBBZCwgUkZfQ1NSX0NGRzAsICZQaHlDc3I0LndvcmQpOwotCQlpZiAoc3RhdHVzID49IDApIHsKLQkJCWlmICghKFBoeUNzcjQuZmllbGQuQnVzeSkpCi0JCQkJYnJlYWs7Ci0JCX0KLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkgKCJSVFVTQldyaXRlUkZSZWdpc3RlcihSRl9DU1JfQ0ZHMCk6cmV0cnkgY291bnQ9JWQhXG4iLAotCQkJICBpKSk7Ci0JCWkrKzsKLQl9IHdoaWxlICgoaSA8IFJFVFJZX0xJTUlUKQotCSAgICAgICAmJiAoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpOwotCi0JaWYgKChpID09IFJFVFJZX0xJTUlUKQotCSAgICB8fCAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSkgewotCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsCi0JCQkgICAgICgiUmV0cnkgY291bnQgZXhoYXVzdGVkIG9yIGRldmljZSByZW1vdmVkISEhXG4iKSk7Ci0JCXJldHVybiBTVEFUVVNfVU5TVUNDRVNTRlVMOwotCX0KLQotCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIFJGX0NTUl9DRkcwLCBWYWx1ZSk7Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCi0JQXJndW1lbnRzOgotCi0JUmV0dXJuIFZhbHVlOgotCi0JSVJRTCA9Ci0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotaW50IFJUVVNCUmVhZEVFUFJPTShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgdTE2IE9mZnNldCwgdTggKnBEYXRhLCB1MTYgbGVuZ3RoKQotewotCWludCBTdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKLQotCVN0YXR1cyA9IFJUVVNCX1ZlbmRvclJlcXVlc3QocEFkLAotCQkJCSAgICAgKFVTQkRfVFJBTlNGRVJfRElSRUNUSU9OX0lOIHwKLQkJCQkgICAgICBVU0JEX1NIT1JUX1RSQU5TRkVSX09LKSwKLQkJCQkgICAgIERFVklDRV9WRU5ET1JfUkVRVUVTVF9JTiwgMHg5LCAwLCBPZmZzZXQsCi0JCQkJICAgICBwRGF0YSwgbGVuZ3RoKTsKLQotCXJldHVybiBTdGF0dXM7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCi0JQXJndW1lbnRzOgotCi0JUmV0dXJuIFZhbHVlOgotCi0JSVJRTCA9Ci0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotaW50IFJUVVNCV3JpdGVFRVBST00oc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJICB1MTYgT2Zmc2V0LCB1OCAqcERhdGEsIHUxNiBsZW5ndGgpCi17Ci0JaW50IFN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOwotCi0JU3RhdHVzID0gUlRVU0JfVmVuZG9yUmVxdWVzdChwQWQsCi0JCQkJICAgICBVU0JEX1RSQU5TRkVSX0RJUkVDVElPTl9PVVQsCi0JCQkJICAgICBERVZJQ0VfVkVORE9SX1JFUVVFU1RfT1VULAotCQkJCSAgICAgMHg4LCAwLCBPZmZzZXQsIHBEYXRhLCBsZW5ndGgpOwotCi0JcmV0dXJuIFN0YXR1czsKLX0KLQotaW50IFJUVVNCUmVhZEVFUFJPTTE2KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgIHUxNiBvZmZzZXQsIHUxNiAqcERhdGEpCi17Ci0JaW50IHN0YXR1czsKLQl1MTYgbG9jYWxEYXRhOwotCi0Jc3RhdHVzID0gUlRVU0JSZWFkRUVQUk9NKHBBZCwgb2Zmc2V0LCAodTggKikoJmxvY2FsRGF0YSksIDIpOwotCWlmIChzdGF0dXMgPT0gU1RBVFVTX1NVQ0NFU1MpCi0JCSpwRGF0YSA9IGxlMmNwdTE2KGxvY2FsRGF0YSk7Ci0KLQlyZXR1cm4gc3RhdHVzOwotCi19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCi0JQXJndW1lbnRzOgotCi0JUmV0dXJuIFZhbHVlOgotCi0JSVJRTCA9Ci0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotdm9pZCBSVFVTQlB1dFRvU2xlZXAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCXUzMiB2YWx1ZTsKLQotCS8qIFRpbWVvdXQgMHg0MCB4IDUwdXMgKi8KLQl2YWx1ZSA9IChTTEVFUENJRCA8PCAxNikgKyAoT1dORVJNQ1UgPDwgMjQpICsgKDB4NDAgPDwgOCkgKyAxOwotCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIDB4NzAxMCwgdmFsdWUpOwotCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIDB4NDA0LCAweDMwKTsKLQkvKlJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpOyAqLwotCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJTbGVlcCBNYWlsYm94IHRlc3R2YWx1ZSAleFxuIiwgdmFsdWUpKTsKLQotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQotCUFyZ3VtZW50czoKLQotCVJldHVybiBWYWx1ZToKLQotCUlSUUwgPQotCi0JTm90ZToKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLWludCBSVFVTQldha2VVcChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCi17Ci0JaW50IFN0YXR1czsKLQotCVN0YXR1cyA9IFJUVVNCX1ZlbmRvclJlcXVlc3QocEFkLAotCQkJCSAgICAgVVNCRF9UUkFOU0ZFUl9ESVJFQ1RJT05fT1VULAotCQkJCSAgICAgREVWSUNFX1ZFTkRPUl9SRVFVRVNUX09VVCwKLQkJCQkgICAgIDB4MDEsIDB4MDksIDAsIE5VTEwsIDApOwotCi0JcmV0dXJuIFN0YXR1czsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0KLQlBcmd1bWVudHM6Ci0KLQlSZXR1cm4gVmFsdWU6Ci0KLQlJUlFMID0KLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFJUVVNCSW5pdGlhbGl6ZUNtZFEoc3RydWN0IHJ0X2NtZHEgKmNtZHEpCi17Ci0JY21kcS0+aGVhZCA9IE5VTEw7Ci0JY21kcS0+dGFpbCA9IE5VTEw7Ci0JY21kcS0+c2l6ZSA9IDA7Ci0JY21kcS0+Q21kUVN0YXRlID0gUlRNUF9UQVNLX1NUQVRfSU5JVEVEOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQotCUFyZ3VtZW50czoKLQotCVJldHVybiBWYWx1ZToKLQotCUlSUUwgPQotCi0JTm90ZToKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLWludCBSVFVTQkVucXVldWVDbWRGcm9tTmRpcyhzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJICAgIElOIE5ESVNfT0lEIE9pZCwKLQkJCQkgICAgSU4gQk9PTEVBTiBTZXRJbmZvcm1hdGlvbiwKLQkJCQkgICAgdm9pZCAqcEluZm9ybWF0aW9uQnVmZmVyLAotCQkJCSAgICB1MzIgSW5mb3JtYXRpb25CdWZmZXJMZW5ndGgpCi17Ci0JaW50IHN0YXR1czsKLQlzdHJ1Y3QgcnRfY21kcWVsbXQgKmNtZHFlbG10ID0gTlVMTDsKLQlzdHJ1Y3QgcnRfcnRtcF9vc190YXNrICpwVGFzayA9ICZwQWQtPmNtZFFUYXNrOwotCi0jaWZkZWYgS1RIUkVBRF9TVVBQT1JUCi0JaWYgKHBUYXNrLT5rdGhyZWFkX3Rhc2sgPT0gTlVMTCkKLSNlbHNlCi0JQ0hFQ0tfUElEX0xFR0FMSVRZKHBUYXNrLT50YXNrUElEKSB7Ci0JfQotCWVsc2UKLSNlbmRpZgotCXJldHVybiBORElTX1NUQVRVU19SRVNPVVJDRVM7Ci0KLQlzdGF0dXMgPSBvc19hbGxvY19tZW0ocEFkLCAodTggKiopICgmY21kcWVsbXQpLCBzaXplb2Yoc3RydWN0IHJ0X2NtZHFlbG10KSk7Ci0JaWYgKChzdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykgfHwgKGNtZHFlbG10ID09IE5VTEwpKQotCQlyZXR1cm4gTkRJU19TVEFUVVNfUkVTT1VSQ0VTOwotCi0JY21kcWVsbXQtPmJ1ZmZlciA9IE5VTEw7Ci0JaWYgKHBJbmZvcm1hdGlvbkJ1ZmZlciAhPSBOVUxMKSB7Ci0JCXN0YXR1cyA9Ci0JCSAgICBvc19hbGxvY19tZW0ocEFkLCAodTggKiopICYgY21kcWVsbXQtPmJ1ZmZlciwKLQkJCQkgSW5mb3JtYXRpb25CdWZmZXJMZW5ndGgpOwotCQlpZiAoKHN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQotCQkgICAgfHwgKGNtZHFlbG10LT5idWZmZXIgPT0gTlVMTCkpIHsKLQkJCWtmcmVlKGNtZHFlbG10KTsKLQkJCXJldHVybiBORElTX1NUQVRVU19SRVNPVVJDRVM7Ci0JCX0gZWxzZSB7Ci0JCQlOZGlzTW92ZU1lbW9yeShjbWRxZWxtdC0+YnVmZmVyLCBwSW5mb3JtYXRpb25CdWZmZXIsCi0JCQkJICAgICAgIEluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoKTsKLQkJCWNtZHFlbG10LT5idWZmZXJsZW5ndGggPSBJbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aDsKLQkJfQotCX0gZWxzZQotCQljbWRxZWxtdC0+YnVmZmVybGVuZ3RoID0gMDsKLQotCWNtZHFlbG10LT5jb21tYW5kID0gT2lkOwotCWNtZHFlbG10LT5DbWRGcm9tTmRpcyA9IFRSVUU7Ci0JaWYgKFNldEluZm9ybWF0aW9uID09IFRSVUUpCi0JCWNtZHFlbG10LT5TZXRPcGVyYXRpb24gPSBUUlVFOwotCWVsc2UKLQkJY21kcWVsbXQtPlNldE9wZXJhdGlvbiA9IEZBTFNFOwotCi0JTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5DbWRRTG9jayk7Ci0JaWYgKHBBZC0+Q21kUS5DbWRRU3RhdGUgJiBSVE1QX1RBU0tfQ0FOX0RPX0lOU0VSVCkgewotCQlFbnF1ZXVlQ21kKCgmcEFkLT5DbWRRKSwgY21kcWVsbXQpOwotCQlzdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOwotCX0gZWxzZSB7Ci0JCXN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7Ci0JfQotCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+Q21kUUxvY2spOwotCi0JaWYgKHN0YXR1cyA9PSBORElTX1NUQVRVU19GQUlMVVJFKSB7Ci0JCWlmIChjbWRxZWxtdC0+YnVmZmVyKQotCQkJb3NfZnJlZV9tZW0ocEFkLCBjbWRxZWxtdC0+YnVmZmVyKTsKLQkJb3NfZnJlZV9tZW0ocEFkLCBjbWRxZWxtdCk7Ci0JfSBlbHNlCi0JCVJUVVNCQ01EVXAocEFkKTsKLQotCXJldHVybiBORElTX1NUQVRVU19TVUNDRVNTOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQotCUFyZ3VtZW50czoKLQotCVJldHVybiBWYWx1ZToKLQotCUlSUUwgPQotCi0JTm90ZToKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLWludCBSVFVTQkVucXVldWVJbnRlcm5hbENtZChzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkJICAgIElOIE5ESVNfT0lEIE9pZCwKLQkJCQkgICAgdm9pZCAqcEluZm9ybWF0aW9uQnVmZmVyLAotCQkJCSAgICB1MzIgSW5mb3JtYXRpb25CdWZmZXJMZW5ndGgpCi17Ci0JaW50IHN0YXR1czsKLQlzdHJ1Y3QgcnRfY21kcWVsbXQgKmNtZHFlbG10ID0gTlVMTDsKLQotCXN0YXR1cyA9IG9zX2FsbG9jX21lbShwQWQsICh1OCAqKikgJiBjbWRxZWxtdCwgc2l6ZW9mKHN0cnVjdCBydF9jbWRxZWxtdCkpOwotCWlmICgoc3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpIHx8IChjbWRxZWxtdCA9PSBOVUxMKSkKLQkJcmV0dXJuIE5ESVNfU1RBVFVTX1JFU09VUkNFUzsKLQlOZGlzWmVyb01lbW9yeShjbWRxZWxtdCwgc2l6ZW9mKHN0cnVjdCBydF9jbWRxZWxtdCkpOwotCi0JaWYgKEluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoID4gMCkgewotCQlzdGF0dXMgPQotCQkgICAgb3NfYWxsb2NfbWVtKHBBZCwgKHU4ICoqKSAmIGNtZHFlbG10LT5idWZmZXIsCi0JCQkJIEluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoKTsKLQkJaWYgKChzdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKLQkJICAgIHx8IChjbWRxZWxtdC0+YnVmZmVyID09IE5VTEwpKSB7Ci0JCQlvc19mcmVlX21lbShwQWQsIGNtZHFlbG10KTsKLQkJCXJldHVybiBORElTX1NUQVRVU19SRVNPVVJDRVM7Ci0JCX0gZWxzZSB7Ci0JCQlOZGlzTW92ZU1lbW9yeShjbWRxZWxtdC0+YnVmZmVyLCBwSW5mb3JtYXRpb25CdWZmZXIsCi0JCQkJICAgICAgIEluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoKTsKLQkJCWNtZHFlbG10LT5idWZmZXJsZW5ndGggPSBJbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aDsKLQkJfQotCX0gZWxzZSB7Ci0JCWNtZHFlbG10LT5idWZmZXIgPSBOVUxMOwotCQljbWRxZWxtdC0+YnVmZmVybGVuZ3RoID0gMDsKLQl9Ci0KLQljbWRxZWxtdC0+Y29tbWFuZCA9IE9pZDsKLQljbWRxZWxtdC0+Q21kRnJvbU5kaXMgPSBGQUxTRTsKLQotCWlmIChjbWRxZWxtdCAhPSBOVUxMKSB7Ci0JCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+Q21kUUxvY2spOwotCQlpZiAocEFkLT5DbWRRLkNtZFFTdGF0ZSAmIFJUTVBfVEFTS19DQU5fRE9fSU5TRVJUKSB7Ci0JCQlFbnF1ZXVlQ21kKCgmcEFkLT5DbWRRKSwgY21kcWVsbXQpOwotCQkJc3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKLQkJfSBlbHNlIHsKLQkJCXN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7Ci0JCX0KLQkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5DbWRRTG9jayk7Ci0KLQkJaWYgKHN0YXR1cyA9PSBORElTX1NUQVRVU19GQUlMVVJFKSB7Ci0JCQlpZiAoY21kcWVsbXQtPmJ1ZmZlcikKLQkJCQlvc19mcmVlX21lbShwQWQsIGNtZHFlbG10LT5idWZmZXIpOwotCQkJb3NfZnJlZV9tZW0ocEFkLCBjbWRxZWxtdCk7Ci0JCX0gZWxzZQotCQkJUlRVU0JDTURVcChwQWQpOwotCX0KLQlyZXR1cm4gTkRJU19TVEFUVVNfU1VDQ0VTUzsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0KLQlBcmd1bWVudHM6Ci0KLQlSZXR1cm4gVmFsdWU6Ci0KLQlJUlFMID0KLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi12b2lkIFJUVVNCRGVxdWV1ZUNtZChzdHJ1Y3QgcnRfY21kcSAqY21kcSwgc3RydWN0IHJ0X2NtZHFlbG10ICogKiBwY21kcWVsbXQpCi17Ci0JKnBjbWRxZWxtdCA9IGNtZHEtPmhlYWQ7Ci0KLQlpZiAoKnBjbWRxZWxtdCAhPSBOVUxMKSB7Ci0JCWNtZHEtPmhlYWQgPSBjbWRxLT5oZWFkLT5uZXh0OwotCQljbWRxLT5zaXplLS07Ci0JCWlmIChjbWRxLT5zaXplID09IDApCi0JCQljbWRxLT50YWlsID0gTlVMTDsKLQl9Ci19Ci0KLS8qCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JICB1c2JfY29udHJvbF9tc2cgLSBCdWlsZHMgYSBjb250cm9sIHVyYiwgc2VuZHMgaXQgb2ZmIGFuZCB3YWl0cyBmb3IgY29tcGxldGlvbgotCSAgQGRldjogcG9pbnRlciB0byB0aGUgdXNiIGRldmljZSB0byBzZW5kIHRoZSBtZXNzYWdlIHRvCi0JICBAcGlwZTogZW5kcG9pbnQgInBpcGUiIHRvIHNlbmQgdGhlIG1lc3NhZ2UgdG8KLQkgIEByZXF1ZXN0OiBVU0IgbWVzc2FnZSByZXF1ZXN0IHZhbHVlCi0JICBAcmVxdWVzdHR5cGU6IFVTQiBtZXNzYWdlIHJlcXVlc3QgdHlwZSB2YWx1ZQotCSAgQHZhbHVlOiBVU0IgbWVzc2FnZSB2YWx1ZQotCSAgQGluZGV4OiBVU0IgbWVzc2FnZSBpbmRleCB2YWx1ZQotCSAgQGRhdGE6IHBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gc2VuZAotCSAgQHNpemU6IGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgZGF0YSB0byBzZW5kCi0JICBAdGltZW91dDogdGltZSBpbiBqaWZmaWVzIHRvIHdhaXQgZm9yIHRoZSBtZXNzYWdlIHRvIGNvbXBsZXRlIGJlZm9yZQotCQkJICB0aW1pbmcgb3V0IChpZiAwIHRoZSB3YWl0IGlzIGZvcmV2ZXIpCi0JICBDb250ZXh0OiAhaW5faW50ZXJydXB0ICgpCi0KLQkgIFRoaXMgZnVuY3Rpb24gc2VuZHMgYSBzaW1wbGUgY29udHJvbCBtZXNzYWdlIHRvIGEgc3BlY2lmaWVkIGVuZHBvaW50Ci0JICBhbmQgd2FpdHMgZm9yIHRoZSBtZXNzYWdlIHRvIGNvbXBsZXRlLCBvciB0aW1lb3V0LgotCSAgSWYgc3VjY2Vzc2Z1bCwgaXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkLCBvdGhlcndpc2UgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIuCi0KLQkgRG9uJ3QgdXNlIHRoaXMgZnVuY3Rpb24gZnJvbSB3aXRoaW4gYW4gaW50ZXJydXB0IGNvbnRleHQsIGxpa2UgYQotCSAgYm90dG9tIGhhbGYgaGFuZGxlci4JSWYgeW91IG5lZWQgYW4gYXN5bmNocm9ub3VzIG1lc3NhZ2UsIG9yIG5lZWQgdG8gc2VuZAotCSAgYSBtZXNzYWdlIGZyb20gd2l0aGluIGludGVycnVwdCBjb250ZXh0LCB1c2UgdXNiX3N1Ym1pdF91cmIoKQotCSAgSWYgYSB0aHJlYWQgaW4geW91ciBkcml2ZXIgdXNlcyB0aGlzIGNhbGwsIG1ha2Ugc3VyZSB5b3VyIGRpc2Nvbm5lY3QoKQotCSAgbWV0aG9kIGNhbiB3YWl0IGZvciBpdCB0byBjb21wbGV0ZS4gIFNpbmNlIHlvdSBkb24ndCBoYXZlIGEgaGFuZGxlIG9uCi0JICB0aGUgVVJCIHVzZWQsIHlvdSBjYW4ndCBjYW5jZWwgdGhlIHJlcXVlc3QuCi0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCi0JQXJndW1lbnRzOgotCi0JUmV0dXJuIFZhbHVlOgotCi0JTm90ZToKLQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLWludCBSVFVTQl9WZW5kb3JSZXF1ZXN0KHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICAgdTMyIFRyYW5zZmVyRmxhZ3MsCi0JCQkgICAgIHU4IFJlcXVlc3RUeXBlLAotCQkJICAgICB1OCBSZXF1ZXN0LAotCQkJICAgICB1MTYgVmFsdWUsCi0JCQkgICAgIHUxNiBJbmRleCwKLQkJCSAgICAgdm9pZCAqVHJhbnNmZXJCdWZmZXIsCi0JCQkgICAgIHUzMiBUcmFuc2ZlckJ1ZmZlckxlbmd0aCkKLXsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3Qgb3NfY29va2llICpwT2JqID0gKHN0cnVjdCBvc19jb29raWUgKilwQWQtPk9TX0Nvb2tpZTsKLQotCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpIHsKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiZGV2aWNlIGRpc2Nvbm5lY3RlZFxuIikpOwotCQlyZXR1cm4gLTE7Ci0JfSBlbHNlIGlmIChpbl9pbnRlcnJ1cHQoKSkgewotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCSAoImluX2ludGVycnVwdCwgUlRVU0JfVmVuZG9yUmVxdWVzdCBSZXF1ZXN0JTAyeCBWYWx1ZSUwNHggT2Zmc2V0JTA0eFxuIiwKLQkJCSAgUmVxdWVzdCwgVmFsdWUsIEluZGV4KSk7Ci0KLQkJcmV0dXJuIC0xOwotCX0gZWxzZSB7Ci0jZGVmaW5lIE1BWF9SRVRSWV9DT1VOVCAgMTAKLQotCQlpbnQgcmV0cnlDb3VudCA9IDA7Ci0JCXZvaWQgKnRtcEJ1ZiA9IFRyYW5zZmVyQnVmZmVyOwotCi0JCXJldCA9IGRvd25faW50ZXJydXB0aWJsZSgmKHBBZC0+VXNiVmVuZG9yUmVxX3NlbWFwaG9yZSkpOwotCQlpZiAocEFkLT5Vc2JWZW5kb3JSZXFCdWYpIHsKLQkJCUFTU0VSVChUcmFuc2ZlckJ1ZmZlckxlbmd0aCA8IE1BWF9QQVJBTV9CVUZGRVJfU0laRSk7Ci0KLQkJCXRtcEJ1ZiA9ICh2b2lkICopcEFkLT5Vc2JWZW5kb3JSZXFCdWY7Ci0JCQlOZGlzWmVyb01lbW9yeShwQWQtPlVzYlZlbmRvclJlcUJ1ZiwKLQkJCQkgICAgICAgVHJhbnNmZXJCdWZmZXJMZW5ndGgpOwotCi0JCQlpZiAoUmVxdWVzdFR5cGUgPT0gREVWSUNFX1ZFTkRPUl9SRVFVRVNUX09VVCkKLQkJCQlOZGlzTW92ZU1lbW9yeSh0bXBCdWYsIFRyYW5zZmVyQnVmZmVyLAotCQkJCQkgICAgICAgVHJhbnNmZXJCdWZmZXJMZW5ndGgpOwotCQl9Ci0KLQkJZG8gewotCQkJaWYgKFJlcXVlc3RUeXBlID09IERFVklDRV9WRU5ET1JfUkVRVUVTVF9PVVQpCi0JCQkJcmV0ID0KLQkJCQkgICAgdXNiX2NvbnRyb2xfbXNnKHBPYmotPnBVc2JfRGV2LAotCQkJCQkJICAgIHVzYl9zbmRjdHJscGlwZShwT2JqLT4KLQkJCQkJCQkJICAgIHBVc2JfRGV2LAotCQkJCQkJCQkgICAgMCksIFJlcXVlc3QsCi0JCQkJCQkgICAgUmVxdWVzdFR5cGUsIFZhbHVlLCBJbmRleCwKLQkJCQkJCSAgICB0bXBCdWYsCi0JCQkJCQkgICAgVHJhbnNmZXJCdWZmZXJMZW5ndGgsCi0JCQkJCQkgICAgQ09OVFJPTF9USU1FT1VUX0pJRkZJRVMpOwotCQkJZWxzZSBpZiAoUmVxdWVzdFR5cGUgPT0gREVWSUNFX1ZFTkRPUl9SRVFVRVNUX0lOKQotCQkJCXJldCA9Ci0JCQkJICAgIHVzYl9jb250cm9sX21zZyhwT2JqLT5wVXNiX0RldiwKLQkJCQkJCSAgICB1c2JfcmN2Y3RybHBpcGUocE9iai0+Ci0JCQkJCQkJCSAgICBwVXNiX0RldiwKLQkJCQkJCQkJICAgIDApLCBSZXF1ZXN0LAotCQkJCQkJICAgIFJlcXVlc3RUeXBlLCBWYWx1ZSwgSW5kZXgsCi0JCQkJCQkgICAgdG1wQnVmLAotCQkJCQkJICAgIFRyYW5zZmVyQnVmZmVyTGVuZ3RoLAotCQkJCQkJICAgIENPTlRST0xfVElNRU9VVF9KSUZGSUVTKTsKLQkJCWVsc2UgewotCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJCQkgKCJ2ZW5kb3IgcmVxdWVzdCBkaXJlY3Rpb24gaXMgZmFpbGVkXG4iKSk7Ci0JCQkJcmV0ID0gLTE7Ci0JCQl9Ci0KLQkJCXJldHJ5Q291bnQrKzsKLQkJCWlmIChyZXQgPCAwKSB7Ci0JCQkJREJHUFJJTlQoUlRfREVCVUdfT0ZGLCAoIiNcbiIpKTsKLQkJCQlSVE1QdXNlY0RlbGF5KDUwMDApOwotCQkJfQotCQl9IHdoaWxlICgocmV0IDwgMCkgJiYgKHJldHJ5Q291bnQgPCBNQVhfUkVUUllfQ09VTlQpKTsKLQotCQlpZiAoKHBBZC0+VXNiVmVuZG9yUmVxQnVmKQotCQkgICAgJiYgKFJlcXVlc3RUeXBlID09IERFVklDRV9WRU5ET1JfUkVRVUVTVF9JTikpCi0JCQlOZGlzTW92ZU1lbW9yeShUcmFuc2ZlckJ1ZmZlciwgdG1wQnVmLAotCQkJCSAgICAgICBUcmFuc2ZlckJ1ZmZlckxlbmd0aCk7Ci0JCXVwKCYocEFkLT5Vc2JWZW5kb3JSZXFfc2VtYXBob3JlKSk7Ci0KLQkJaWYgKHJldCA8IDApIHsKLQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJCSAoIlJUVVNCX1ZlbmRvclJlcXVlc3QgZmFpbGVkKCVkKSxUeEZsYWdzPTB4JXgsIFJlcVR5cGU9JXMsIFJlcT0weCV4LCBJbmRleD0weCV4XG4iLAotCQkJCSAgcmV0LCBUcmFuc2ZlckZsYWdzLAotCQkJCSAgKFJlcXVlc3RUeXBlID09Ci0JCQkJICAgREVWSUNFX1ZFTkRPUl9SRVFVRVNUX09VVCA/ICJPVVQiIDogIklOIiksCi0JCQkJICBSZXF1ZXN0LCBJbmRleCkpOwotCQkJaWYgKFJlcXVlc3QgPT0gMHgyKQotCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJCQkgKCJcdFJlcXVlc3QgVmFsdWU9MHglMDR4IVxuIiwgVmFsdWUpKTsKLQotCQkJaWYgKChUcmFuc2ZlckJ1ZmZlciAhPSBOVUxMKQotCQkJICAgICYmIChUcmFuc2ZlckJ1ZmZlckxlbmd0aCA+IDApKQotCQkJCWhleF9kdW1wKCJGYWlsZWQgVHJhbnNmZXJCdWZmZXIgdmFsdWUiLAotCQkJCQkgVHJhbnNmZXJCdWZmZXIsIFRyYW5zZmVyQnVmZmVyTGVuZ3RoKTsKLQkJfQotCi0JfQotCi0JaWYgKHJldCAhPSAtMSkKLQkJcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotCWVsc2UKLQkJcmV0dXJuIFNUQVRVU19VTlNVQ0NFU1NGVUw7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCSAgQ3JlYXRlcyBhbiBJUlAgdG8gc3VibWl0ZSBhbiBJT0NUTF9JTlRFUk5BTF9VU0JfUkVTRVRfUE9SVAotCSAgc3luY2hyb25vdXNseS4gQ2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgcnVubmluZyBhdAotCSAgUEFTU0lWRSBMRVZFTC4KLQotCUFyZ3VtZW50czoKLQotCVJldHVybiBWYWx1ZToKLQotCU5vdGU6Ci0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi1pbnQgUlRVU0JfUmVzZXREZXZpY2Uoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCWludCBTdGF0dXMgPSBUUlVFOwotCi0JREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIi0tLT5VU0JfUmVzZXREZXZpY2VcbiIpKTsKLQkvKlJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTKTsgKi8KLQlyZXR1cm4gU3RhdHVzOwotfQotCi12b2lkIENNREhhbmRsZXIoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQotewotCXN0cnVjdCBydF9jbWRxZWxtdCAqY21kcWVsbXQ7Ci0JdTggKnBEYXRhOwotCWludCBOZGlzU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKLS8qICAgICAgdW5zaWduZWQgbG9uZyAgICAgICAgICAgICAgICAgICBOb3cgPSAwOyAqLwotCWludCBudFN0YXR1czsKLS8qICAgICAgdW5zaWduZWQgbG9uZyAgIElycUZsYWdzOyAqLwotCi0Jd2hpbGUgKHBBZCAmJiBwQWQtPkNtZFEuc2l6ZSA+IDApIHsKLQkJTmRpc1N0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7Ci0KLQkJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5DbWRRTG9jayk7Ci0JCVJUVVNCRGVxdWV1ZUNtZCgmcEFkLT5DbWRRLCAmY21kcWVsbXQpOwotCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPkNtZFFMb2NrKTsKLQotCQlpZiAoY21kcWVsbXQgPT0gTlVMTCkKLQkJCWJyZWFrOwotCi0JCXBEYXRhID0gY21kcWVsbXQtPmJ1ZmZlcjsKLQotCQlpZiAoIQotCQkgICAgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKQotCQkgICAgIHx8IFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKSkpIHsKLQkJCXN3aXRjaCAoY21kcWVsbXQtPmNvbW1hbmQpIHsKLQkJCWNhc2UgQ01EVEhSRUFEX0NIRUNLX0dQSU86Ci0JCQkJewotCQkJCQl1MzIgZGF0YTsKLQotCQkJCQl7Ci0JCQkJCQkvKiBSZWFkIEdQSU8gcGluMiBhcyBIYXJkd2FyZSBjb250cm9sbGVkIHJhZGlvIHN0YXRlICovCi0KLQkJCQkJCVJUVVNCUmVhZE1BQ1JlZ2lzdGVyKHBBZCwKLQkJCQkJCQkJICAgICBHUElPX0NUUkxfQ0ZHLAotCQkJCQkJCQkgICAgICZkYXRhKTsKLQotCQkJCQkJaWYgKGRhdGEgJiAweDA0KSB7Ci0JCQkJCQkJcEFkLT5TdGFDZmcuYkh3UmFkaW8gPQotCQkJCQkJCSAgICBUUlVFOwotCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQlwQWQtPlN0YUNmZy5iSHdSYWRpbyA9Ci0JCQkJCQkJICAgIEZBTFNFOwotCQkJCQkJfQotCi0JCQkJCQlpZiAocEFkLT5TdGFDZmcuYlJhZGlvICE9Ci0JCQkJCQkgICAgKHBBZC0+U3RhQ2ZnLmJId1JhZGlvCi0JCQkJCQkgICAgICYmIHBBZC0+U3RhQ2ZnLmJTd1JhZGlvKSkgewotCQkJCQkJCXBBZC0+U3RhQ2ZnLmJSYWRpbyA9Ci0JCQkJCQkJICAgIChwQWQtPlN0YUNmZy4KLQkJCQkJCQkgICAgIGJId1JhZGlvCi0JCQkJCQkJICAgICAmJiBwQWQtPlN0YUNmZy4KLQkJCQkJCQkgICAgIGJTd1JhZGlvKTsKLQkJCQkJCQlpZiAocEFkLT5TdGFDZmcuCi0JCQkJCQkJICAgIGJSYWRpbyA9PSBUUlVFKSB7Ci0JCQkJCQkJCURCR1BSSU5UX1JBVwotCQkJCQkJCQkgICAgKFJUX0RFQlVHX0VSUk9SLAotCQkJCQkJCQkgICAgICgiISEhIFJhZGlvIE9uICEhIVxuIikpOwotCi0JCQkJCQkJCU1sbWVSYWRpb09uCi0JCQkJCQkJCSAgICAocEFkKTsKLQkJCQkJCQkJLyogVXBkYXRlIGV4dHJhIGluZm9ybWF0aW9uICovCi0JCQkJCQkJCXBBZC0+RXh0cmFJbmZvID0KLQkJCQkJCQkJICAgIEVYVFJBX0lORk9fQ0xFQVI7Ci0JCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQkJREJHUFJJTlRfUkFXCi0JCQkJCQkJCSAgICAoUlRfREVCVUdfRVJST1IsCi0JCQkJCQkJCSAgICAgKCIhISEgUmFkaW8gT2ZmICEhIVxuIikpOwotCi0JCQkJCQkJCU1sbWVSYWRpb09mZgotCQkJCQkJCQkgICAgKHBBZCk7Ci0JCQkJCQkJCS8qIFVwZGF0ZSBleHRyYSBpbmZvcm1hdGlvbiAqLwotCQkJCQkJCQlwQWQtPkV4dHJhSW5mbyA9Ci0JCQkJCQkJCSAgICBIV19SQURJT19PRkY7Ci0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJCWJyZWFrOwotCi0JCQljYXNlIENNRFRIUkVBRF9RS0VSSU9ESUNfRVhFQ1VUOgotCQkJCXsKLQkJCQkJU3RhUXVpY2tSZXNwb25lRm9yUmF0ZVVwRXhlYyhOVUxMLCBwQWQsCi0JCQkJCQkJCSAgICAgTlVMTCwKLQkJCQkJCQkJICAgICBOVUxMKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgQ01EVEhSRUFEX1JFU0VUX0JVTEtfT1VUOgotCQkJCXsKLQkJCQkJdTMyIE1BQ1ZhbHVlOwotCQkJCQl1OCBJbmRleDsKLQkJCQkJaW50IHJldCA9IDA7Ci0JCQkJCXN0cnVjdCBydF9odF90eF9jb250ZXh0ICpwSFRUWENvbnRleHQ7Ci0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcnRfcnRtcF90eF9yaW5nICpwVHhSaW5nOyAqLwotCQkJCQl1bnNpZ25lZCBsb25nIElycUZsYWdzOwotCi0JCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwKLQkJCQkJCSAgICAgKCJDbWRUaHJlYWQgOiBDTURUSFJFQURfUkVTRVRfQlVMS19PVVQoUmVzZXRQaXBlaWQ9MHglMHgpPT09PlxuIiwKLQkJCQkJCSAgICAgIHBBZC0+YnVsa1Jlc2V0UGlwZWlkKSk7Ci0JCQkJCS8qIEFsbCB0cmFuc2ZlcnMgbXVzdCBiZSBhYm9ydGVkIG9yIGNhbmNlbGxlZCBiZWZvcmUgYXR0ZW1wdGluZyB0byByZXNldCB0aGUgcGlwZS4gKi8KLQkJCQkJLypSVFVTQkNhbmNlbFBlbmRpbmdCdWxrT3V0SVJQKHBBZCk7ICovCi0JCQkJCS8qIFdhaXQgMTBtcyB0byBsZXQgcHJldmlvdXMgcGFja2V0IHRoYXQgYXJlIGFscmVhZHkgaW4gSFcgRklGTyB0byBjbGVhci4gYnkgTUFYTEVFIDEyLTI1LTIwMDcgKi8KLQkJCQkJSW5kZXggPSAwOwotCQkJCQlkbyB7Ci0JCQkJCQlSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsCi0JCQkJCQkJCSAgICAgVFhSWFFfUENOVCwKLQkJCQkJCQkJICAgICAmTUFDVmFsdWUpOwotCQkJCQkJaWYgKChNQUNWYWx1ZSAmIDB4ZjAwMDAwCi0JCQkJCQkgICAgIC8qMHg4MDAwMDAgKi8pID09IDApCi0JCQkJCQkJYnJlYWs7Ci0JCQkJCQlJbmRleCsrOwotCQkJCQkJUlRNUHVzZWNEZWxheSgxMDAwMCk7Ci0JCQkJCX0gd2hpbGUgKEluZGV4IDwgMTAwKTsKLQkJCQkJTUFDVmFsdWUgPSAwOwotCQkJCQlSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsIFVTQl9ETUFfQ0ZHLAotCQkJCQkJCSAgICAgJk1BQ1ZhbHVlKTsKLQkJCQkJLyogVG8gcHJldmVudCBSZWFkIFJlZ2lzdGVyIGVycm9yLCB3ZSAybmQgY2hlY2sgdGhlIHZhbGlkaXR5LiAqLwotCQkJCQlpZiAoKE1BQ1ZhbHVlICYgMHhjMDAwMDApID09IDApCi0JCQkJCQlSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsCi0JCQkJCQkJCSAgICAgVVNCX0RNQV9DRkcsCi0JCQkJCQkJCSAgICAgJk1BQ1ZhbHVlKTsKLQkJCQkJLyogVG8gcHJldmVudCBSZWFkIFJlZ2lzdGVyIGVycm9yLCB3ZSAzcmQgY2hlY2sgdGhlIHZhbGlkaXR5LiAqLwotCQkJCQlpZiAoKE1BQ1ZhbHVlICYgMHhjMDAwMDApID09IDApCi0JCQkJCQlSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsCi0JCQkJCQkJCSAgICAgVVNCX0RNQV9DRkcsCi0JCQkJCQkJCSAgICAgJk1BQ1ZhbHVlKTsKLQkJCQkJTUFDVmFsdWUgfD0gMHg4MDAwMDsKLQkJCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgVVNCX0RNQV9DRkcsCi0JCQkJCQkJICAgICAgTUFDVmFsdWUpOwotCi0JCQkJCS8qIFdhaXQgMW1zIHRvIHByZXZlbnQgbmV4dCBVUkIgdG8gYnVsa291dCBiZWZvcmUgSFcgcmVzZXQuIGJ5IE1BWExFRSAxMi0yNS0yMDA3ICovCi0JCQkJCVJUTVB1c2VjRGVsYXkoMTAwMCk7Ci0KLQkJCQkJTUFDVmFsdWUgJj0gKH4weDgwMDAwKTsKLQkJCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgVVNCX0RNQV9DRkcsCi0JCQkJCQkJICAgICAgTUFDVmFsdWUpOwotCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsCi0JCQkJCQkgICAgICgiXHRTZXQgMHgyYTAgYml0MTkuIENsZWFyIFVTQiBETUEgVFggcGF0aFxuIikpOwotCi0JCQkJCS8qIFdhaXQgNW1zIHRvIHByZXZlbnQgbmV4dCBVUkIgdG8gYnVsa291dCBiZWZvcmUgSFcgcmVzZXQuIGJ5IE1BWExFRSAxMi0yNS0yMDA3ICovCi0JCQkJCS8qUlRNUHVzZWNEZWxheSg1MDAwKTsgKi8KLQotCQkJCQlpZiAoKHBBZC0+Ci0JCQkJCSAgICAgYnVsa1Jlc2V0UGlwZWlkICYKLQkJCQkJICAgICBCVUxLT1VUX01HTVRfUkVTRVRfRkxBRykgPT0KLQkJCQkJICAgIEJVTEtPVVRfTUdNVF9SRVNFVF9GTEFHKSB7Ci0JCQkJCQlSVE1QX0NMRUFSX0ZMQUcocEFkLAotCQkJCQkJCQlmUlRNUF9BREFQVEVSX0JVTEtPVVRfUkVTRVQpOwotCQkJCQkJaWYgKHBBZC0+TWdtdFJpbmcuVHhTd0ZyZWVJZHggPAotCQkJCQkJICAgIE1HTVRfUklOR19TSVpFCi0JCQkJCQkgICAgLyogcE1MTUVDb250ZXh0LT5iV2FpdGluZ0J1bGtPdXQgPT0gVFJVRSAqLwotCQkJCQkJICAgICkgewotCQkJCQkJCVJUVVNCX1NFVF9CVUxLX0ZMQUcocEFkLAotCQkJCQkJCQkJICAgIGZSVFVTQl9CVUxLX09VVF9NTE1FKTsKLQkJCQkJCX0KLQkJCQkJCVJUVVNCS2lja0J1bGtPdXQocEFkKTsKLQotCQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkJCSAgICAgKCJcdFRYIE1HTVQgUkVDT1ZFUiBEb25lIVxuIikpOwotCQkJCQl9IGVsc2UgewotCQkJCQkJcEhUVFhDb250ZXh0ID0KLQkJCQkJCSAgICAmKHBBZC0+Ci0JCQkJCQkgICAgICBUeENvbnRleHRbcEFkLT4KLQkJCQkJCQkJYnVsa1Jlc2V0UGlwZWlkXSk7Ci0JCQkJCQkvKk5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+QnVsa091dExvY2tbcEFkLT5idWxrUmVzZXRQaXBlaWRdKTsgKi8KLQkJCQkJCVJUTVBfSU5UX0xPQ0soJnBBZC0+Ci0JCQkJCQkJICAgICAgQnVsa091dExvY2tbcEFkLT4KLQkJCQkJCQkJCSAgYnVsa1Jlc2V0UGlwZWlkXSwKLQkJCQkJCQkgICAgICBJcnFGbGFncyk7Ci0JCQkJCQlpZiAocEFkLT4KLQkJCQkJCSAgICBCdWxrT3V0UGVuZGluZ1twQWQtPgotCQkJCQkJCQkgICBidWxrUmVzZXRQaXBlaWRdCi0JCQkJCQkgICAgPT0gRkFMU0UpIHsKLQkJCQkJCQlwQWQtPgotCQkJCQkJCSAgICBCdWxrT3V0UGVuZGluZ1twQWQtPgotCQkJCQkJCQkJICAgYnVsa1Jlc2V0UGlwZWlkXQotCQkJCQkJCSAgICA9IFRSVUU7Ci0JCQkJCQkJcEhUVFhDb250ZXh0LT4KLQkJCQkJCQkgICAgSVJQUGVuZGluZyA9IFRSVUU7Ci0JCQkJCQkJcEFkLT4KLQkJCQkJCQkgICAgd2F0Y2hEb2dUeFBlbmRpbmdDbnQKLQkJCQkJCQkgICAgW3BBZC0+Ci0JCQkJCQkJICAgICBidWxrUmVzZXRQaXBlaWRdID0KLQkJCQkJCQkgICAgMTsKLQotCQkJCQkJCS8qIG5vIG1hdHRlciB3aGF0LCBjbGVhbiB0aGUgZmxhZyAqLwotCQkJCQkJCVJUTVBfQ0xFQVJfRkxBRyhwQWQsCi0JCQkJCQkJCQlmUlRNUF9BREFQVEVSX0JVTEtPVVRfUkVTRVQpOwotCi0JCQkJCQkJLypOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPkJ1bGtPdXRMb2NrW3BBZC0+YnVsa1Jlc2V0UGlwZWlkXSk7ICovCi0JCQkJCQkJUlRNUF9JTlRfVU5MT0NLKCZwQWQtPgotCQkJCQkJCQkJQnVsa091dExvY2sKLQkJCQkJCQkJCVtwQWQtPgotCQkJCQkJCQkJIGJ1bGtSZXNldFBpcGVpZF0sCi0JCQkJCQkJCQlJcnFGbGFncyk7Ci0JCQkJCQkJewotCQkJCQkJCQlSVFVTQkluaXRIVFR4RGVzYwotCQkJCQkJCQkgICAgKHBBZCwKLQkJCQkJCQkJICAgICBwSFRUWENvbnRleHQsCi0JCQkJCQkJCSAgICAgcEFkLT4KLQkJCQkJCQkJICAgICBidWxrUmVzZXRQaXBlaWQsCi0JCQkJCQkJCSAgICAgcEhUVFhDb250ZXh0LT4KLQkJCQkJCQkJICAgICBCdWxrT3V0U2l6ZSwKLQkJCQkJCQkJICAgICAodXNiX2NvbXBsZXRlX3QpCi0JCQkJCQkJCSAgICAgUlRVU0JCdWxrT3V0RGF0YVBhY2tldENvbXBsZXRlKTsKLQotCQkJCQkJCQlyZXQgPSBSVFVTQl9TVUJNSVRfVVJCCi0JCQkJCQkJCSAgICAgKHBIVFRYQ29udGV4dC0+Ci0JCQkJCQkJCSAgICAgIHBVcmIpOwotCQkJCQkJCQlpZiAocmV0ICE9IDApIHsKLQkJCQkJCQkJCVJUTVBfSU5UX0xPQ0sKLQkJCQkJCQkJCSAgICAoJnBBZC0+Ci0JCQkJCQkJCQkgICAgIEJ1bGtPdXRMb2NrCi0JCQkJCQkJCQkgICAgIFtwQWQtPgotCQkJCQkJCQkJICAgICAgYnVsa1Jlc2V0UGlwZWlkXSwKLQkJCQkJCQkJCSAgICAgSXJxRmxhZ3MpOwotCQkJCQkJCQkJcEFkLT4KLQkJCQkJCQkJCSAgICBCdWxrT3V0UGVuZGluZwotCQkJCQkJCQkJICAgIFtwQWQtPgotCQkJCQkJCQkJICAgICBidWxrUmVzZXRQaXBlaWRdCi0JCQkJCQkJCQkgICAgPQotCQkJCQkJCQkJICAgIEZBTFNFOwotCQkJCQkJCQkJcEhUVFhDb250ZXh0LT4KLQkJCQkJCQkJCSAgICBJUlBQZW5kaW5nCi0JCQkJCQkJCQkgICAgPQotCQkJCQkJCQkJICAgIEZBTFNFOwotCQkJCQkJCQkJcEFkLT4KLQkJCQkJCQkJCSAgICB3YXRjaERvZ1R4UGVuZGluZ0NudAotCQkJCQkJCQkJICAgIFtwQWQtPgotCQkJCQkJCQkJICAgICBidWxrUmVzZXRQaXBlaWRdCi0JCQkJCQkJCQkgICAgPSAwOwotCQkJCQkJCQkJUlRNUF9JTlRfVU5MT0NLCi0JCQkJCQkJCQkgICAgKCZwQWQtPgotCQkJCQkJCQkJICAgICBCdWxrT3V0TG9jawotCQkJCQkJCQkJICAgICBbcEFkLT4KLQkJCQkJCQkJCSAgICAgIGJ1bGtSZXNldFBpcGVpZF0sCi0JCQkJCQkJCQkgICAgIElycUZsYWdzKTsKLQotCQkJCQkJCQkJREJHUFJJTlQKLQkJCQkJCQkJCSAgICAoUlRfREVCVUdfRVJST1IsCi0JCQkJCQkJCQkgICAgICgiQ21kVGhyZWFkIDogQ01EVEhSRUFEX1JFU0VUX0JVTEtfT1VUOiBTdWJtaXQgVHggVVJCIGZhaWxlZCAlZFxuIiwKLQkJCQkJCQkJCSAgICAgIHJldCkpOwotCQkJCQkJCQl9IGVsc2UgewotCQkJCQkJCQkJUlRNUF9JUlFfTE9DSwotCQkJCQkJCQkJICAgICgmcEFkLT4KLQkJCQkJCQkJCSAgICAgQnVsa091dExvY2sKLQkJCQkJCQkJCSAgICAgW3BBZC0+Ci0JCQkJCQkJCQkgICAgICBidWxrUmVzZXRQaXBlaWRdLAotCQkJCQkJCQkJICAgICBJcnFGbGFncyk7Ci0JCQkJCQkJCQlEQkdQUklOVF9SQVcKLQkJCQkJCQkJCSAgICAoUlRfREVCVUdfVFJBQ0UsCi0JCQkJCQkJCQkgICAgICgiXHRDTURUSFJFQURfUkVTRVRfQlVMS19PVVQ6IFR4Q29udGV4dFslZF06Q1dQb3M9JWxkLCBOQlBvcz0lbGQsIEVOQlBvcz0lbGQsIGJDb3B5PSVkLCBwZW5kaW5nPSVkIVxuIiwKLQkJCQkJCQkJCSAgICAgIHBBZC0+Ci0JCQkJCQkJCQkgICAgICBidWxrUmVzZXRQaXBlaWQsCi0JCQkJCQkJCQkgICAgICBwSFRUWENvbnRleHQtPgotCQkJCQkJCQkJICAgICAgQ3VyV3JpdGVQb3NpdGlvbiwKLQkJCQkJCQkJCSAgICAgIHBIVFRYQ29udGV4dC0+Ci0JCQkJCQkJCQkgICAgICBOZXh0QnVsa091dFBvc2l0aW9uLAotCQkJCQkJCQkJICAgICAgcEhUVFhDb250ZXh0LT4KLQkJCQkJCQkJCSAgICAgIEVOZXh0QnVsa091dFBvc2l0aW9uLAotCQkJCQkJCQkJICAgICAgcEhUVFhDb250ZXh0LT4KLQkJCQkJCQkJCSAgICAgIGJDb3B5U2F2ZVBhZCwKLQkJCQkJCQkJCSAgICAgIHBBZC0+Ci0JCQkJCQkJCQkgICAgICBCdWxrT3V0UGVuZGluZwotCQkJCQkJCQkJICAgICAgW3BBZC0+Ci0JCQkJCQkJCQkgICAgICAgYnVsa1Jlc2V0UGlwZWlkXSkpOwotCQkJCQkJCQkJREJHUFJJTlRfUkFXCi0JCQkJCQkJCQkgICAgKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkJCQkJICAgICAoIlx0XHRCdWxrT3V0IFJlcT0weCVseCwgQ29tcGxldGU9MHglbHgsIE90aGVyPTB4JWx4XG4iLAotCQkJCQkJCQkJICAgICAgcEFkLT4KLQkJCQkJCQkJCSAgICAgIEJ1bGtPdXRSZXEsCi0JCQkJCQkJCQkgICAgICBwQWQtPgotCQkJCQkJCQkJICAgICAgQnVsa091dENvbXBsZXRlLAotCQkJCQkJCQkJICAgICAgcEFkLT4KLQkJCQkJCQkJCSAgICAgIEJ1bGtPdXRDb21wbGV0ZU90aGVyKSk7Ci0JCQkJCQkJCQlSVE1QX0lSUV9VTkxPQ0sKLQkJCQkJCQkJCSAgICAoJnBBZC0+Ci0JCQkJCQkJCQkgICAgIEJ1bGtPdXRMb2NrCi0JCQkJCQkJCQkgICAgIFtwQWQtPgotCQkJCQkJCQkJICAgICAgYnVsa1Jlc2V0UGlwZWlkXSwKLQkJCQkJCQkJCSAgICAgSXJxRmxhZ3MpOwotCQkJCQkJCQkJREJHUFJJTlRfUkFXCi0JCQkJCQkJCQkgICAgKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkJCQkJICAgICAoIlx0Q01EVEhSRUFEX1JFU0VUX0JVTEtfT1VUOiBTdWJtaXQgVHggREFUQSBVUkIgZm9yIGZhaWxlZCBCdWxrUmVxKDB4JWx4KSBEb25lLCBzdGF0dXM9JWQhXG4iLAotCQkJCQkJCQkJICAgICAgcEFkLT4KLQkJCQkJCQkJCSAgICAgIGJ1bGtSZXNldFJlcQotCQkJCQkJCQkJICAgICAgW3BBZC0+Ci0JCQkJCQkJCQkgICAgICAgYnVsa1Jlc2V0UGlwZWlkXSwKLQkJCQkJCQkJCSAgICAgIHBIVFRYQ29udGV4dC0+Ci0JCQkJCQkJCQkgICAgICBwVXJiLT4KLQkJCQkJCQkJCSAgICAgIHN0YXR1cykpOwotCi0JCQkJCQkJCX0KLQkJCQkJCQl9Ci0JCQkJCQl9IGVsc2UgewotCQkJCQkJCS8qTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5CdWxrT3V0TG9ja1twQWQtPmJ1bGtSZXNldFBpcGVpZF0pOyAqLwotCQkJCQkJCS8qUlRNUF9JTlRfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW3BBZC0+YnVsa1Jlc2V0UGlwZWlkXSwgSXJxRmxhZ3MpOyAqLwotCi0JCQkJCQkJREJHUFJJTlRfUkFXCi0JCQkJCQkJICAgIChSVF9ERUJVR19FUlJPUiwKLQkJCQkJCQkgICAgICgiQ21kVGhyZWFkIDogVFggREFUQSBSRUNPVkVSIEZBSUwgZm9yIEJ1bGtSZXEoMHglbHgpIGJlY2F1c2UgQnVsa091dFBlbmRpbmdbJWRdIGlzIFRSVUUhXG4iLAotCQkJCQkJCSAgICAgIHBBZC0+Ci0JCQkJCQkJICAgICAgYnVsa1Jlc2V0UmVxW3BBZC0+Ci0JCQkJCQkJCQkgICBidWxrUmVzZXRQaXBlaWRdLAotCQkJCQkJCSAgICAgIHBBZC0+Ci0JCQkJCQkJICAgICAgYnVsa1Jlc2V0UGlwZWlkKSk7Ci0JCQkJCQkJaWYgKHBBZC0+Ci0JCQkJCQkJICAgIGJ1bGtSZXNldFBpcGVpZCA9PQotCQkJCQkJCSAgICAwKSB7Ci0JCQkJCQkJCXU4Ci0JCQkJCQkJCSAgICBwZW5kaW5nQ29udGV4dAotCQkJCQkJCQkgICAgPSAwOwotCQkJCQkJCQlzdHJ1Y3QgcnRfaHRfdHhfY29udGV4dCAqCi0JCQkJCQkJCSAgICBwSFRUWENvbnRleHQKLQkJCQkJCQkJICAgID0KLQkJCQkJCQkJICAgIChzdHJ1Y3QgcnRfaHRfdHhfY29udGV4dCAqKQotCQkJCQkJCQkgICAgKCZwQWQtPgotCQkJCQkJCQkgICAgIFR4Q29udGV4dAotCQkJCQkJCQkgICAgIFtwQWQtPgotCQkJCQkJCQkgICAgICBidWxrUmVzZXRQaXBlaWRdKTsKLQkJCQkJCQkJc3RydWN0IHJ0X3R4X2NvbnRleHQgKgotCQkJCQkJCQkgICAgcE1MTUVDb250ZXh0Ci0JCQkJCQkJCSAgICA9Ci0JCQkJCQkJCSAgICAoc3RydWN0IHJ0X3R4X2NvbnRleHQgKikKLQkJCQkJCQkJICAgIChwQWQtPgotCQkJCQkJCQkgICAgIE1nbXRSaW5nLgotCQkJCQkJCQkgICAgIENlbGxbcEFkLT4KLQkJCQkJCQkJCSAgTWdtdFJpbmcuCi0JCQkJCQkJCQkgIFR4RG1hSWR4XS4KLQkJCQkJCQkJICAgICBBbGxvY1ZhKTsKLQkJCQkJCQkJc3RydWN0IHJ0X3R4X2NvbnRleHQgKgotCQkJCQkJCQkgICAgcE5VTExDb250ZXh0Ci0JCQkJCQkJCSAgICA9Ci0JCQkJCQkJCSAgICAoc3RydWN0IHJ0X3R4X2NvbnRleHQgKikKLQkJCQkJCQkJICAgICgmcEFkLT4KLQkJCQkJCQkJICAgICBQc1BvbGxDb250ZXh0KTsKLQkJCQkJCQkJc3RydWN0IHJ0X3R4X2NvbnRleHQgKgotCQkJCQkJCQkgICAgcFBzUG9sbENvbnRleHQKLQkJCQkJCQkJICAgID0KLQkJCQkJCQkJICAgIChzdHJ1Y3QgcnRfdHhfY29udGV4dCAqKQotCQkJCQkJCQkgICAgKCZwQWQtPgotCQkJCQkJCQkgICAgIE51bGxDb250ZXh0KTsKLQotCQkJCQkJCQlpZiAocEhUVFhDb250ZXh0LT5JUlBQZW5kaW5nKQotCQkJCQkJCQkJcGVuZGluZ0NvbnRleHQKLQkJCQkJCQkJCSAgICB8PQotCQkJCQkJCQkJICAgIDE7Ci0JCQkJCQkJCWVsc2UgaWYKLQkJCQkJCQkJICAgIChwTUxNRUNvbnRleHQtPgotCQkJCQkJCQkgICAgIElSUFBlbmRpbmcpCi0JCQkJCQkJCQlwZW5kaW5nQ29udGV4dAotCQkJCQkJCQkJICAgIHw9Ci0JCQkJCQkJCQkgICAgMjsKLQkJCQkJCQkJZWxzZSBpZgotCQkJCQkJCQkgICAgKHBOVUxMQ29udGV4dC0+Ci0JCQkJCQkJCSAgICAgSVJQUGVuZGluZykKLQkJCQkJCQkJCXBlbmRpbmdDb250ZXh0Ci0JCQkJCQkJCQkgICAgfD0KLQkJCQkJCQkJCSAgICA0OwotCQkJCQkJCQllbHNlIGlmCi0JCQkJCQkJCSAgICAocFBzUG9sbENvbnRleHQtPgotCQkJCQkJCQkgICAgIElSUFBlbmRpbmcpCi0JCQkJCQkJCQlwZW5kaW5nQ29udGV4dAotCQkJCQkJCQkJICAgIHw9Ci0JCQkJCQkJCQkgICAgODsKLQkJCQkJCQkJZWxzZQotCQkJCQkJCQkJcGVuZGluZ0NvbnRleHQKLQkJCQkJCQkJCSAgICA9IDA7Ci0KLQkJCQkJCQkJREJHUFJJTlRfUkFXCi0JCQkJCQkJCSAgICAoUlRfREVCVUdfRVJST1IsCi0JCQkJCQkJCSAgICAgKCJcdFRYIE9jY3VwaWVkIGJ5ICVkIVxuIiwKLQkJCQkJCQkJICAgICAgcGVuZGluZ0NvbnRleHQpKTsKLQkJCQkJCQl9Ci0JCQkJCQkJLyogbm8gbWF0dGVyIHdoYXQsIGNsZWFuIHRoZSBmbGFnICovCi0JCQkJCQkJUlRNUF9DTEVBUl9GTEFHKHBBZCwKLQkJCQkJCQkJCWZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCk7Ci0KLQkJCQkJCQlSVE1QX0lOVF9VTkxPQ0soJnBBZC0+Ci0JCQkJCQkJCQlCdWxrT3V0TG9jawotCQkJCQkJCQkJW3BBZC0+Ci0JCQkJCQkJCQkgYnVsa1Jlc2V0UGlwZWlkXSwKLQkJCQkJCQkJCUlycUZsYWdzKTsKLQotCQkJCQkJCVJUVVNCX1NFVF9CVUxLX0ZMQUcocEFkLAotCQkJCQkJCQkJICAgIChmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUwKLQkJCQkJCQkJCSAgICAgPDwKLQkJCQkJCQkJCSAgICAgcEFkLT4KLQkJCQkJCQkJCSAgICAgYnVsa1Jlc2V0UGlwZWlkKSk7Ci0JCQkJCQl9Ci0KLQkJCQkJCVJUTVBEZVF1ZXVlUGFja2V0KHBBZCwgRkFMU0UsCi0JCQkJCQkJCSAgTlVNX09GX1RYX1JJTkcsCi0JCQkJCQkJCSAgTUFYX1RYX1BST0NFU1MpOwotCQkJCQkJLypSVFVTQktpY2tCdWxrT3V0KHBBZCk7ICovCi0JCQkJCX0KLQotCQkJCX0KLQkJCQkvKgotCQkJCSAgIC8vIERvbid0IGNhbmNlbCBCVUxLSU4uCi0JCQkJICAgd2hpbGUgKChhdG9taWNfcmVhZCgmcEFkLT5QZW5kaW5nUngpID4gMCkgJiYKLQkJCQkgICAoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpCi0JCQkJICAgewotCQkJCSAgIGlmIChhdG9taWNfcmVhZCgmcEFkLT5QZW5kaW5nUngpID4gMCkKLQkJCQkgICB7Ci0JCQkJICAgREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIkJ1bGtJbiBJUlAgUGVuZGluZyEhY2FuY2VsIGl0IVxuIikpOwotCQkJCSAgIFJUVVNCQ2FuY2VsUGVuZGluZ0J1bGtJbklSUChwQWQpOwotCQkJCSAgIH0KLQkJCQkgICBSVE1QdXNlY0RlbGF5KDEwMDAwMCk7Ci0JCQkJICAgfQotCi0JCQkJICAgaWYgKChhdG9taWNfcmVhZCgmcEFkLT5QZW5kaW5nUngpID09IDApICYmICghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpKSkKLQkJCQkgICB7Ci0JCQkJICAgdTggICAgICAgIGk7Ci0JCQkJICAgUlRVU0JSeFBhY2tldChwQWQpOwotCQkJCSAgIHBBZC0+TmV4dFJ4QnVsa0luUmVhZEluZGV4ID0gMDsgICAgICAvLyBOZXh0IFJ4IFJlYWQgaW5kZXgKLQkJCQkgICBwQWQtPk5leHRSeEJ1bGtJbkluZGV4ICAgICAgICAgICAgICAgPSAwOyAgICAvLyBSeCBCdWxrIHBvaW50ZXIKLQkJCQkgICBmb3IgKGkgPSAwOyBpIDwgKFJYX1JJTkdfU0laRSk7IGkrKykKLQkJCQkgICB7Ci0JCQkJICAgc3RydWN0IHJ0X3J4X2NvbnRleHQgKnBSeENvbnRleHQgPSAmKHBBZC0+UnhDb250ZXh0W2ldKTsKLQotCQkJCSAgIHBSeENvbnRleHQtPnBBZCAgICAgID0gcEFkOwotCQkJCSAgIHBSeENvbnRleHQtPkluVXNlICAgICAgICAgICAgPSBGQUxTRTsKLQkJCQkgICBwUnhDb250ZXh0LT5JUlBQZW5kaW5nICAgICAgID0gRkFMU0U7Ci0JCQkJICAgcFJ4Q29udGV4dC0+UmVhZGFibGUgPSBGQUxTRTsKLQkJCQkgICBwUnhDb250ZXh0LT5SZW9yZGVySW5Vc2UgPSBGQUxTRTsKLQotCQkJCSAgIH0KLQkJCQkgICBSVFVTQkJ1bGtSZWNlaXZlKHBBZCk7Ci0JCQkJICAgREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIlJUVVNCQnVsa1JlY2VpdmVcbiIpKTsKLQkJCQkgICB9ICovCi0JCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkgICAgICgiQ21kVGhyZWFkIDogQ01EVEhSRUFEX1JFU0VUX0JVTEtfT1VUPD09PVxuIikpOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIENNRFRIUkVBRF9SRVNFVF9CVUxLX0lOOgotCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwKLQkJCQkJICAgICAoIkNtZFRocmVhZCA6IENNRFRIUkVBRF9SRVNFVF9CVUxLX0lOID09PSA+XG4iKSk7Ci0KLQkJCQkvKiBBbGwgdHJhbnNmZXJzIG11c3QgYmUgYWJvcnRlZCBvciBjYW5jZWxsZWQgYmVmb3JlIGF0dGVtcHRpbmcgdG8gcmVzZXQgdGhlIHBpcGUuICovCi0JCQkJewotCQkJCQl1MzIgTUFDVmFsdWU7Ci0JCQkJCXsKLQkJCQkJCS8qd2hpbGUgKChhdG9taWNfcmVhZCgmcEFkLT5QZW5kaW5nUngpID4gMCkgJiYgKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKSAqLwotCQkJCQkJaWYgKChwQWQtPlBlbmRpbmdSeCA+IDApCi0JCQkJCQkgICAgJiYKLQkJCQkJCSAgICAoIVJUTVBfVEVTVF9GTEFHCi0JCQkJCQkgICAgIChwQWQsCi0JCQkJCQkgICAgICBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSkgewotCQkJCQkJCURCR1BSSU5UX1JBVwotCQkJCQkJCSAgICAoUlRfREVCVUdfRVJST1IsCi0JCQkJCQkJICAgICAoIkJ1bGtJbiBJUlAgUGVuZGluZyEhIVxuIikpOwotCQkJCQkJCVJUVVNCQ2FuY2VsUGVuZGluZ0J1bGtJbklSUAotCQkJCQkJCSAgICAocEFkKTsKLQkJCQkJCQlSVE1QdXNlY0RlbGF5KDEwMDAwMCk7Ci0JCQkJCQkJcEFkLT5QZW5kaW5nUnggPSAwOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCS8qIFdhaXQgMTBtcyBiZWZvcmUgcmVhZGluZyByZWdpc3Rlci4gKi8KLQkJCQkJUlRNUHVzZWNEZWxheSgxMDAwMCk7Ci0JCQkJCW50U3RhdHVzID0KLQkJCQkJICAgIFJUVVNCUmVhZE1BQ1JlZ2lzdGVyKHBBZCwgTUFDX0NTUjAsCi0JCQkJCQkJCSAmTUFDVmFsdWUpOwotCi0JCQkJCWlmICgoTlRfU1VDQ0VTUyhudFN0YXR1cykgPT0gVFJVRSkgJiYKLQkJCQkJICAgICghKFJUTVBfVEVTVF9GTEFHCi0JCQkJCSAgICAgICAocEFkLAotCQkJCQkJKGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MKLQkJCQkJCSB8IGZSVE1QX0FEQVBURVJfUkFESU9fT0ZGIHwKLQkJCQkJCSBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MKLQkJCQkJCSB8Ci0JCQkJCQkgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpKSkKLQkJCQkJewotCQkJCQkJdTggaTsKLQotCQkJCQkJaWYgKFJUTVBfVEVTVF9GTEFHCi0JCQkJCQkgICAgKHBBZCwKLQkJCQkJCSAgICAgKGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MKLQkJCQkJCSAgICAgIHwgZlJUTVBfQURBUFRFUl9SQURJT19PRkYKLQkJCQkJCSAgICAgIHwKLQkJCQkJCSAgICAgIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUwotCQkJCQkJICAgICAgfAotCQkJCQkJICAgICAgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpCi0JCQkJCQkJYnJlYWs7Ci0JCQkJCQlwQWQtPk5leHRSeEJ1bGtJblBvc2l0aW9uID0KLQkJCQkJCSAgICBwQWQtPlJ4Q29udGV4dFtwQWQtPgotCQkJCQkJCQkgICBOZXh0UnhCdWxrSW5JbmRleF0uCi0JCQkJCQkgICAgQnVsa0luT2Zmc2V0OwotCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJCQkJICgiQlVMS19JTl9SRVNFVDogTkJJSWR4PTB4JXgsTkJJUklkeD0weCV4LCBCSVJQb3M9MHglbHguIEJJUmVxPXglbHgsIEJJQ29tcGxldGU9MHglbHgsIEJJQ0ZhaWwweCVseFxuIiwKLQkJCQkJCQkgIHBBZC0+Ci0JCQkJCQkJICBOZXh0UnhCdWxrSW5JbmRleCwKLQkJCQkJCQkgIHBBZC0+Ci0JCQkJCQkJICBOZXh0UnhCdWxrSW5SZWFkSW5kZXgsCi0JCQkJCQkJICBwQWQtPgotCQkJCQkJCSAgTmV4dFJ4QnVsa0luUG9zaXRpb24sCi0JCQkJCQkJICBwQWQtPkJ1bGtJblJlcSwKLQkJCQkJCQkgIHBBZC0+QnVsa0luQ29tcGxldGUsCi0JCQkJCQkJICBwQWQtPgotCQkJCQkJCSAgQnVsa0luQ29tcGxldGVGYWlsKSk7Ci0JCQkJCQlmb3IgKGkgPSAwOyBpIDwgUlhfUklOR19TSVpFOwotCQkJCQkJICAgICBpKyspIHsKLQkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkJCQkJICgiXHRSeENvbnRleHRbJWRdOiBJUlBQZW5kaW5nPSVkLCBJblVzZT0lZCwgUmVhZGFibGU9JWQhXG4iLAotCQkJCQkJCQkgIGksCi0JCQkJCQkJCSAgcEFkLT4KLQkJCQkJCQkJICBSeENvbnRleHRbaV0uCi0JCQkJCQkJCSAgSVJQUGVuZGluZywKLQkJCQkJCQkJICBwQWQtPgotCQkJCQkJCQkgIFJ4Q29udGV4dFtpXS4KLQkJCQkJCQkJICBJblVzZSwKLQkJCQkJCQkJICBwQWQtPgotCQkJCQkJCQkgIFJ4Q29udGV4dFtpXS4KLQkJCQkJCQkJICBSZWFkYWJsZSkpOwotCQkJCQkJfQotCQkJCQkJLyoKLQotCQkJCQkJICAgREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIikpOwotCi0JCQkJCQkgICBwQWQtPk5leHRSeEJ1bGtJblJlYWRJbmRleCA9IDA7ICAgICAgLy8gTmV4dCBSeCBSZWFkIGluZGV4Ci0JCQkJCQkgICBwQWQtPk5leHRSeEJ1bGtJbkluZGV4ICAgICAgICAgICAgICAgPSAwOyAgICAvLyBSeCBCdWxrIHBvaW50ZXIKLQkJCQkJCSAgIGZvciAoaSA9IDA7IGkgPCAoUlhfUklOR19TSVpFKTsgaSsrKQotCQkJCQkJICAgewotCQkJCQkJICAgc3RydWN0IHJ0X3J4X2NvbnRleHQgKnBSeENvbnRleHQgPSAmKHBBZC0+UnhDb250ZXh0W2ldKTsKLQotCQkJCQkJICAgcFJ4Q29udGV4dC0+cEFkICAgICAgPSBwQWQ7Ci0JCQkJCQkgICBwUnhDb250ZXh0LT5JblVzZSAgICAgICAgICAgID0gRkFMU0U7Ci0JCQkJCQkgICBwUnhDb250ZXh0LT5JUlBQZW5kaW5nICAgICAgID0gRkFMU0U7Ci0JCQkJCQkgICBwUnhDb250ZXh0LT5SZWFkYWJsZSA9IEZBTFNFOwotCQkJCQkJICAgcFJ4Q29udGV4dC0+UmVvcmRlckluVXNlID0gRkFMU0U7Ci0KLQkJCQkJCSAgIH0gKi8KLQkJCQkJCVJUTVBfQ0xFQVJfRkxBRyhwQWQsCi0JCQkJCQkJCWZSVE1QX0FEQVBURVJfQlVMS0lOX1JFU0VUKTsKLQkJCQkJCWZvciAoaSA9IDA7Ci0JCQkJCQkgICAgIGkgPAotCQkJCQkJICAgICBwQWQtPkNvbW1vbkNmZy4KLQkJCQkJCSAgICAgTnVtT2ZCdWxrSW5JUlA7IGkrKykgewotCQkJCQkJCS8qUlRVU0JCdWxrUmVjZWl2ZShwQWQpOyAqLwotCQkJCQkJCXN0cnVjdCBydF9yeF9jb250ZXh0ICpwUnhDb250ZXh0OwotCQkJCQkJCVBVUkIgcFVyYjsKLQkJCQkJCQlpbnQgcmV0ID0gMDsKLQkJCQkJCQl1bnNpZ25lZCBsb25nIElycUZsYWdzOwotCi0JCQkJCQkJUlRNUF9JUlFfTE9DSygmcEFkLT4KLQkJCQkJCQkJICAgICAgQnVsa0luTG9jaywKLQkJCQkJCQkJICAgICAgSXJxRmxhZ3MpOwotCQkJCQkJCXBSeENvbnRleHQgPQotCQkJCQkJCSAgICAmKHBBZC0+Ci0JCQkJCQkJICAgICAgUnhDb250ZXh0W3BBZC0+Ci0JCQkJCQkJCQlOZXh0UnhCdWxrSW5JbmRleF0pOwotCQkJCQkJCWlmICgocEFkLT5QZW5kaW5nUnggPiAwKQotCQkJCQkJCSAgICB8fCAocFJ4Q29udGV4dC0+Ci0JCQkJCQkJCVJlYWRhYmxlID09Ci0JCQkJCQkJCVRSVUUpCi0JCQkJCQkJICAgIHx8IChwUnhDb250ZXh0LT4KLQkJCQkJCQkJSW5Vc2UgPT0KLQkJCQkJCQkJVFJVRSkpIHsKLQkJCQkJCQkJUlRNUF9JUlFfVU5MT0NLCi0JCQkJCQkJCSAgICAoJnBBZC0+Ci0JCQkJCQkJCSAgICAgQnVsa0luTG9jaywKLQkJCQkJCQkJICAgICBJcnFGbGFncyk7Ci0JCQkJCQkJCWJyZWFrOwotCQkJCQkJCX0KLQkJCQkJCQlwUnhDb250ZXh0LT5JblVzZSA9Ci0JCQkJCQkJICAgIFRSVUU7Ci0JCQkJCQkJcFJ4Q29udGV4dC0+SVJQUGVuZGluZyA9Ci0JCQkJCQkJICAgIFRSVUU7Ci0JCQkJCQkJcEFkLT5QZW5kaW5nUngrKzsKLQkJCQkJCQlwQWQtPkJ1bGtJblJlcSsrOwotCQkJCQkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT4KLQkJCQkJCQkJCUJ1bGtJbkxvY2ssCi0JCQkJCQkJCQlJcnFGbGFncyk7Ci0KLQkJCQkJCQkvKiBJbml0IFJ4IGNvbnRleHQgZGVzY3JpcHRvciAqLwotCQkJCQkJCVJUVVNCSW5pdFJ4RGVzYyhwQWQsCi0JCQkJCQkJCQlwUnhDb250ZXh0KTsKLQkJCQkJCQlwVXJiID0gcFJ4Q29udGV4dC0+cFVyYjsKLQkJCQkJCQlyZXQgPSBSVFVTQl9TVUJNSVRfVVJCKHBVcmIpOwotCQkJCQkJCWlmIChyZXQgIT0gMCkgewkvKiBmYWlsICovCi0KLQkJCQkJCQkJUlRNUF9JUlFfTE9DSwotCQkJCQkJCQkgICAgKCZwQWQtPgotCQkJCQkJCQkgICAgIEJ1bGtJbkxvY2ssCi0JCQkJCQkJCSAgICAgSXJxRmxhZ3MpOwotCQkJCQkJCQlwUnhDb250ZXh0LT4KLQkJCQkJCQkJICAgIEluVXNlID0KLQkJCQkJCQkJICAgIEZBTFNFOwotCQkJCQkJCQlwUnhDb250ZXh0LT4KLQkJCQkJCQkJICAgIElSUFBlbmRpbmcgPQotCQkJCQkJCQkgICAgRkFMU0U7Ci0JCQkJCQkJCXBBZC0+Ci0JCQkJCQkJCSAgICBQZW5kaW5nUngtLTsKLQkJCQkJCQkJcEFkLT4KLQkJCQkJCQkJICAgIEJ1bGtJblJlcS0tOwotCQkJCQkJCQlSVE1QX0lSUV9VTkxPQ0sKLQkJCQkJCQkJICAgICgmcEFkLT4KLQkJCQkJCQkJICAgICBCdWxrSW5Mb2NrLAotCQkJCQkJCQkgICAgIElycUZsYWdzKTsKLQkJCQkJCQkJREJHUFJJTlQKLQkJCQkJCQkJICAgIChSVF9ERUJVR19FUlJPUiwKLQkJCQkJCQkJICAgICAoIkNNRFRIUkVBRF9SRVNFVF9CVUxLX0lOOiBTdWJtaXQgUnggVVJCIGZhaWxlZCglZCksIHN0YXR1cz0lZFxuIiwKLQkJCQkJCQkJICAgICAgcmV0LAotCQkJCQkJCQkgICAgICBwVXJiLT4KLQkJCQkJCQkJICAgICAgc3RhdHVzKSk7Ci0JCQkJCQkJfSBlbHNlIHsJLyogc3VjY2VzcyAqLwotCQkJCQkJCQkvKkRCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkJJRG9uZSwgUGVuZD0lZCxCSUlkeD0lZCxCSVJJZHg9JWQhXG4iLCAqLwotCQkJCQkJCQkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZC0+UGVuZGluZ1J4LCBwQWQtPk5leHRSeEJ1bGtJbkluZGV4LCBwQWQtPk5leHRSeEJ1bGtJblJlYWRJbmRleCkpOyAqLwotCQkJCQkJCQlEQkdQUklOVF9SQVcKLQkJCQkJCQkJICAgIChSVF9ERUJVR19UUkFDRSwKLQkJCQkJCQkJICAgICAoIkNNRFRIUkVBRF9SRVNFVF9CVUxLX0lOOiBTdWJtaXQgUnggVVJCIERvbmUsIHN0YXR1cz0lZCFcbiIsCi0JCQkJCQkJCSAgICAgIHBVcmItPgotCQkJCQkJCQkgICAgICBzdGF0dXMpKTsKLQkJCQkJCQkJQVNTRVJUKChwUnhDb250ZXh0LT5JblVzZSA9PSBwUnhDb250ZXh0LT5JUlBQZW5kaW5nKSk7Ci0JCQkJCQkJfQotCQkJCQkJfQotCi0JCQkJCX0gZWxzZSB7Ci0JCQkJCQkvKiBDYXJkIG11c3QgYmUgcmVtb3ZlZCAqLwotCQkJCQkJaWYgKE5UX1NVQ0NFU1MobnRTdGF0dXMpICE9Ci0JCQkJCQkgICAgVFJVRSkgewotCQkJCQkJCVJUTVBfU0VUX0ZMQUcocEFkLAotCQkJCQkJCQkgICAgICBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpOwotCQkJCQkJCURCR1BSSU5UX1JBVwotCQkJCQkJCSAgICAoUlRfREVCVUdfRVJST1IsCi0JCQkJCQkJICAgICAoIkNNRFRIUkVBRF9SRVNFVF9CVUxLX0lOOiBSZWFkIFJlZ2lzdGVyIEZhaWxlZCFDYXJkIG11c3QgYmUgcmVtb3ZlZCEhXG5cbiIpKTsKLQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJREJHUFJJTlRfUkFXCi0JCQkJCQkJICAgIChSVF9ERUJVR19FUlJPUiwKLQkJCQkJCQkgICAgICgiQ01EVEhSRUFEX1JFU0VUX0JVTEtfSU46IENhbm5vdCBkbyBidWxrIGluIGJlY2F1c2UgZmxhZ3MoMHglbHgpIG9uICFcbiIsCi0JCQkJCQkJICAgICAgcEFkLT5GbGFncykpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwKLQkJCQkJICAgICAoIkNtZFRocmVhZCA6IENNRFRIUkVBRF9SRVNFVF9CVUxLX0lOIDw9PT1cbiIpKTsKLQkJCQlicmVhazsKLQotCQkJY2FzZSBDTURUSFJFQURfU0VUX0FTSUNfV0NJRDoKLQkJCQl7Ci0JCQkJCXN0cnVjdCBydF9zZXRfYXNpY193Y2lkIFNldEFzaWNXY2lkOwotCQkJCQl1MTYgb2Zmc2V0OwotCQkJCQl1MzIgTUFDVmFsdWUsIE1BQ1JWYWx1ZSA9IDA7Ci0JCQkJCVNldEFzaWNXY2lkID0KLQkJCQkJICAgICooKHN0cnVjdCBydF9zZXRfYXNpY193Y2lkICopKHBEYXRhKSk7Ci0KLQkJCQkJaWYgKFNldEFzaWNXY2lkLldDSUQgPj0KLQkJCQkJICAgIE1BWF9MRU5fT0ZfTUFDX1RBQkxFKQotCQkJCQkJcmV0dXJuOwotCi0JCQkJCW9mZnNldCA9Ci0JCQkJCSAgICBNQUNfV0NJRF9CQVNFICsKLQkJCQkJICAgICgodTgpU2V0QXNpY1djaWQuV0NJRCkgKgotCQkJCQkgICAgSFdfV0NJRF9FTlRSWV9TSVpFOwotCi0JCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwKLQkJCQkJCSAgICAgKCJDbWRUaHJlYWQgOiBDTURUSFJFQURfU0VUX0FTSUNfV0NJRCA6IFdDSUQgPSAlbGQsIFNldFRpZCAgPSAlbHgsIERlbGV0ZVRpZCA9ICVseC5cbiIsCi0JCQkJCQkgICAgICBTZXRBc2ljV2NpZC5XQ0lELAotCQkJCQkJICAgICAgU2V0QXNpY1djaWQuU2V0VGlkLAotCQkJCQkJICAgICAgU2V0QXNpY1djaWQuRGVsZXRlVGlkKSk7Ci0JCQkJCU1BQ1ZhbHVlID0KLQkJCQkJICAgIChwQWQtPk1hY1RhYi4KLQkJCQkJICAgICBDb250ZW50W1NldEFzaWNXY2lkLldDSURdLgotCQkJCQkgICAgIEFkZHJbM10gPDwgMjQpICsKLQkJCQkJICAgIChwQWQtPk1hY1RhYi4KLQkJCQkJICAgICBDb250ZW50W1NldEFzaWNXY2lkLldDSURdLgotCQkJCQkgICAgIEFkZHJbMl0gPDwgMTYpICsKLQkJCQkJICAgIChwQWQtPk1hY1RhYi4KLQkJCQkJICAgICBDb250ZW50W1NldEFzaWNXY2lkLldDSURdLgotCQkJCQkgICAgIEFkZHJbMV0gPDwgOCkgKwotCQkJCQkgICAgKHBBZC0+TWFjVGFiLgotCQkJCQkgICAgIENvbnRlbnRbU2V0QXNpY1djaWQuV0NJRF0uQWRkclswXSk7Ci0JCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwKLQkJCQkJCSAgICAgKCIxLU1BQ1ZhbHVlPSAleCxcbiIsCi0JCQkJCQkgICAgICBNQUNWYWx1ZSkpOwotCQkJCQlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBvZmZzZXQsCi0JCQkJCQkJICAgICAgTUFDVmFsdWUpOwotCQkJCQkvKiBSZWFkIGJpdG1hc2sgKi8KLQkJCQkJUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBvZmZzZXQgKyA0LAotCQkJCQkJCSAgICAgJk1BQ1JWYWx1ZSk7Ci0JCQkJCWlmIChTZXRBc2ljV2NpZC5EZWxldGVUaWQgIT0gMHhmZmZmZmZmZikKLQkJCQkJCU1BQ1JWYWx1ZSAmPQotCQkJCQkJICAgICh+U2V0QXNpY1djaWQuRGVsZXRlVGlkKTsKLQkJCQkJaWYgKFNldEFzaWNXY2lkLlNldFRpZCAhPSAweGZmZmZmZmZmKQotCQkJCQkJTUFDUlZhbHVlIHw9Ci0JCQkJCQkgICAgKFNldEFzaWNXY2lkLlNldFRpZCk7Ci0JCQkJCU1BQ1JWYWx1ZSAmPSAweGZmZmYwMDAwOwotCi0JCQkJCU1BQ1ZhbHVlID0KLQkJCQkJICAgIChwQWQtPk1hY1RhYi4KLQkJCQkJICAgICBDb250ZW50W1NldEFzaWNXY2lkLldDSURdLgotCQkJCQkgICAgIEFkZHJbNV0gPDwgOCkgKwotCQkJCQkgICAgcEFkLT5NYWNUYWIuQ29udGVudFtTZXRBc2ljV2NpZC4KLQkJCQkJCQkJV0NJRF0uQWRkcls0XTsKLQkJCQkJTUFDVmFsdWUgfD0gTUFDUlZhbHVlOwotCQkJCQlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBvZmZzZXQgKyA0LAotCQkJCQkJCSAgICAgIE1BQ1ZhbHVlKTsKLQotCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsCi0JCQkJCQkgICAgICgiMi1NQUNWYWx1ZT0gJXgsXG4iLAotCQkJCQkJICAgICAgTUFDVmFsdWUpKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgQ01EVEhSRUFEX1NFVF9BU0lDX1dDSURfQ0lQSEVSOgotCQkJCXsKLQkJCQkJc3RydWN0IHJ0X3NldF9hc2ljX3djaWRfYXR0cmkgU2V0QXNpY1djaWRBdHRyaTsKLQkJCQkJdTE2IG9mZnNldDsKLQkJCQkJdTMyIE1BQ1JWYWx1ZSA9IDA7Ci0JCQkJCVNIQVJFREtFWV9NT0RFX1NUUlVDIGNzcjE7Ci0JCQkJCVNldEFzaWNXY2lkQXR0cmkgPQotCQkJCQkgICAgKigoc3RydWN0IHJ0X3NldF9hc2ljX3djaWRfYXR0cmkgKikKLQkJCQkJICAgICAgKHBEYXRhKSk7Ci0KLQkJCQkJaWYgKFNldEFzaWNXY2lkQXR0cmkuV0NJRCA+PQotCQkJCQkgICAgTUFYX0xFTl9PRl9NQUNfVEFCTEUpCi0JCQkJCQlyZXR1cm47Ci0KLQkJCQkJb2Zmc2V0ID0KLQkJCQkJICAgIE1BQ19XQ0lEX0FUVFJJQlVURV9CQVNFICsKLQkJCQkJICAgICgodTgpU2V0QXNpY1djaWRBdHRyaS5XQ0lEKSAqCi0JCQkJCSAgICBIV19XQ0lEX0FUVFJJX1NJWkU7Ci0KLQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkJICAgICAoIkNtZCA6IENNRFRIUkVBRF9TRVRfQVNJQ19XQ0lEX0NJUEhFUiA6IFdDSUQgPSAlbGQsIENpcGhlciA9ICVseC5cbiIsCi0JCQkJCQkgICAgICBTZXRBc2ljV2NpZEF0dHJpLldDSUQsCi0JCQkJCQkgICAgICBTZXRBc2ljV2NpZEF0dHJpLkNpcGhlcikpOwotCQkJCQkvKiBSZWFkIGJpdG1hc2sgKi8KLQkJCQkJUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBvZmZzZXQsCi0JCQkJCQkJICAgICAmTUFDUlZhbHVlKTsKLQkJCQkJTUFDUlZhbHVlID0gMDsKLQkJCQkJTUFDUlZhbHVlIHw9Ci0JCQkJCSAgICAoKCh1OClTZXRBc2ljV2NpZEF0dHJpLgotCQkJCQkgICAgICBDaXBoZXIpIDw8IDEpOwotCi0JCQkJCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIG9mZnNldCwKLQkJCQkJCQkgICAgICBNQUNSVmFsdWUpOwotCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsCi0JCQkJCQkgICAgICgiMi1vZmZzZXQgPSAleCAsIE1BQ1ZhbHVlPSAleCxcbiIsCi0JCQkJCQkgICAgICBvZmZzZXQsIE1BQ1JWYWx1ZSkpOwotCi0JCQkJCW9mZnNldCA9Ci0JCQkJCSAgICBQQUlSV0lTRV9JVkVJVl9UQUJMRV9CQVNFICsKLQkJCQkJICAgICgodTgpU2V0QXNpY1djaWRBdHRyaS5XQ0lEKSAqCi0JCQkJCSAgICBIV19JVkVJVl9FTlRSWV9TSVpFOwotCQkJCQlNQUNSVmFsdWUgPSAwOwotCQkJCQlpZiAoKFNldEFzaWNXY2lkQXR0cmkuQ2lwaGVyIDw9Ci0JCQkJCSAgICAgQ0lQSEVSX1dFUDEyOCkpCi0JCQkJCQlNQUNSVmFsdWUgfD0KLQkJCQkJCSAgICAocEFkLT5TdGFDZmcuCi0JCQkJCQkgICAgIERlZmF1bHRLZXlJZCA8PCAzMCk7Ci0JCQkJCWVsc2UKLQkJCQkJCU1BQ1JWYWx1ZSB8PSAoMHgyMDAwMDAwMCk7Ci0JCQkJCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIG9mZnNldCwKLQkJCQkJCQkgICAgICBNQUNSVmFsdWUpOwotCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsCi0JCQkJCQkgICAgICgiMi1vZmZzZXQgPSAleCAsIE1BQ1ZhbHVlPSAleCxcbiIsCi0JCQkJCQkgICAgICBvZmZzZXQsIE1BQ1JWYWx1ZSkpOwotCi0JCQkJCS8qICovCi0JCQkJCS8qIFVwZGF0ZSBjaXBoZXIgYWxnb3JpdGhtLiBXU1RBIGFsd2F5cyB1c2UgQlNTMCAqLwotCQkJCQkvKiAqLwotCQkJCQkvKiBmb3IgYWRob2MgbW9kZSBvbmx5ICxiZWNhdXNlIHdlcCBzdGF0dXMgc2xvdyB0aGFuIGFkZCBrZXksIHdoZW4gdXNlIHplcm8gY29uZmlnICovCi0JCQkJCWlmIChwQWQtPlN0YUNmZy5Cc3NUeXBlID09IEJTU19BREhPQykgewotCQkJCQkJb2Zmc2V0ID0KLQkJCQkJCSAgICBNQUNfV0NJRF9BVFRSSUJVVEVfQkFTRTsKLQotCQkJCQkJUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLAotCQkJCQkJCQkgICAgIG9mZnNldCwKLQkJCQkJCQkJICAgICAmTUFDUlZhbHVlKTsKLQkJCQkJCU1BQ1JWYWx1ZSAmPSAofjB4ZSk7Ci0JCQkJCQlNQUNSVmFsdWUgfD0KLQkJCQkJCSAgICAoKCh1OClTZXRBc2ljV2NpZEF0dHJpLgotCQkJCQkJICAgICAgQ2lwaGVyKSA8PCAxKTsKLQotCQkJCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwKLQkJCQkJCQkJICAgICAgb2Zmc2V0LAotCQkJCQkJCQkgICAgICBNQUNSVmFsdWUpOwotCi0JCQkJCQkvKlVwZGF0ZSBncm91cCBrZXkgY2lwaGVyLCxiZWNhdXNlIHdlcCBzdGF0dXMgc2xvdyB0aGFuIGFkZCBrZXksIHdoZW4gdXNlIHplcm8gY29uZmlnICovCi0JCQkJCQlSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsCi0JCQkJCQkJCSAgICAgU0hBUkVEX0tFWV9NT0RFX0JBU0UKLQkJCQkJCQkJICAgICArCi0JCQkJCQkJCSAgICAgNCAqICgwIC8KLQkJCQkJCQkJCSAgMiksCi0JCQkJCQkJCSAgICAgJmNzcjEuCi0JCQkJCQkJCSAgICAgd29yZCk7Ci0KLQkJCQkJCWNzcjEuZmllbGQuQnNzMEtleTBDaXBoZXJBbGcgPQotCQkJCQkJICAgIFNldEFzaWNXY2lkQXR0cmkuQ2lwaGVyOwotCQkJCQkJY3NyMS5maWVsZC5Cc3MwS2V5MUNpcGhlckFsZyA9Ci0JCQkJCQkgICAgU2V0QXNpY1djaWRBdHRyaS5DaXBoZXI7Ci0KLQkJCQkJCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsCi0JCQkJCQkJCSAgICAgIFNIQVJFRF9LRVlfTU9ERV9CQVNFCi0JCQkJCQkJCSAgICAgICsKLQkJCQkJCQkJICAgICAgNCAqICgwIC8KLQkJCQkJCQkJCSAgIDIpLAotCQkJCQkJCQkgICAgICBjc3IxLgotCQkJCQkJCQkgICAgICB3b3JkKTsKLQkJCQkJfQotCQkJCX0KLQkJCQlicmVhazsKLQotLypCZW5zb24gbW9kaWZpZWQgZm9yIFVTQiBpbnRlcmZhY2UsIGF2b2lkIGluIGludGVycnVwdCB3aGVuIHdyaXRlIGtleSwgMjAwODA3MjQgLS0+ICovCi0JCQljYXNlIFJUX0NNRF9TRVRfS0VZX1RBQkxFOgkvKkdlbmVyYWwgY2FsbCBmb3IgQXNpY0FkZFBhaXJ3aXNlS2V5RW50cnkoKSAqLwotCQkJCXsKLQkJCQkJc3RydWN0IHJ0X2FkZF9wYWlyd2lzZV9rZXlfZW50cnkgS2V5SW5mbzsKLQkJCQkJS2V5SW5mbyA9Ci0JCQkJCSAgICAqKChzdHJ1Y3QgcnRfYWRkX3BhaXJ3aXNlX2tleV9lbnRyeSAqKQotCQkJCQkgICAgICAocERhdGEpKTsKLQkJCQkJQXNpY0FkZFBhaXJ3aXNlS2V5RW50cnkocEFkLAotCQkJCQkJCQlLZXlJbmZvLk1hY0FkZHIsCi0JCQkJCQkJCSh1OClLZXlJbmZvLgotCQkJCQkJCQlNYWNUYWJNYXRjaFdDSUQsCi0JCQkJCQkJCSZLZXlJbmZvLgotCQkJCQkJCQlDaXBoZXJLZXkpOwotCQkJCX0KLQkJCQlicmVhazsKLQotCQkJY2FzZSBSVF9DTURfU0VUX1JYX1dDSURfVEFCTEU6CS8qR2VuZXJhbCBjYWxsIGZvciBSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5KCkgKi8KLQkJCQl7Ci0JCQkJCXN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKnBFbnRyeTsKLQkJCQkJdTggS2V5SWR4ID0gMDsKLQkJCQkJdTggQ2lwaGVyQWxnID0gQ0lQSEVSX05PTkU7Ci0JCQkJCXU4IEFwSWR4ID0gQlNTMDsKLQotCQkJCQlwRW50cnkgPSAoc3RydWN0IHJ0X21hY190YWJsZV9lbnRyeSAqKShwRGF0YSk7Ci0KLQkJCQkJUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeShwQWQsCi0JCQkJCQkJCSAgQXBJZHgsCi0JCQkJCQkJCSAgS2V5SWR4LAotCQkJCQkJCQkgIENpcGhlckFsZywKLQkJCQkJCQkJICBwRW50cnkpOwotCQkJCX0KLQkJCQlicmVhazsKLS8qQmVuc29uIG1vZGlmaWVkIGZvciBVU0IgaW50ZXJmYWNlLCBhdm9pZCBpbiBpbnRlcnJ1cHQgd2hlbiB3cml0ZSBrZXksIDIwMDgwNzI0IDwtLSAqLwotCi0JCQljYXNlIENNRFRIUkVBRF9TRVRfQ0xJRU5UX01BQ19FTlRSWToKLQkJCQl7Ci0JCQkJCXN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKnBFbnRyeTsKLQkJCQkJcEVudHJ5ID0gKHN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKilwRGF0YTsKLQotCQkJCQl7Ci0JCQkJCQlBc2ljUmVtb3ZlUGFpcndpc2VLZXlFbnRyeShwQWQsCi0JCQkJCQkJCQkgICBwRW50cnktPgotCQkJCQkJCQkJICAgYXBpZHgsCi0JCQkJCQkJCQkgICAodTgpCi0JCQkJCQkJCQkgICBwRW50cnktPgotCQkJCQkJCQkJICAgQWlkKTsKLQkJCQkJCWlmICgocEVudHJ5LT5BdXRoTW9kZSA8PQotCQkJCQkJICAgICBOZGlzODAyXzExQXV0aE1vZGVBdXRvU3dpdGNoKQotCQkJCQkJICAgICYmIChwRW50cnktPldlcFN0YXR1cyA9PQotCQkJCQkJCU5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQpKQotCQkJCQkJewotCQkJCQkJCXUzMiB1SVYgPSAxOwotCQkJCQkJCXU4ICpwdHI7Ci0KLQkJCQkJCQlwdHIgPSAodTggKikmIHVJVjsKLQkJCQkJCQkqKHB0ciArIDMpID0KLQkJCQkJCQkgICAgKHBBZC0+U3RhQ2ZnLgotCQkJCQkJCSAgICAgRGVmYXVsdEtleUlkIDw8IDYpOwotCQkJCQkJCUFzaWNVcGRhdGVXQ0lESVZFSVYocEFkLAotCQkJCQkJCQkJICAgIHBFbnRyeS0+Ci0JCQkJCQkJCQkgICAgQWlkLAotCQkJCQkJCQkJICAgIHVJViwKLQkJCQkJCQkJCSAgICAwKTsKLQkJCQkJCQlBc2ljVXBkYXRlV0NJREF0dHJpYnV0ZQotCQkJCQkJCSAgICAocEFkLCBwRW50cnktPkFpZCwKLQkJCQkJCQkgICAgIEJTUzAsCi0JCQkJCQkJICAgICBwQWQtPgotCQkJCQkJCSAgICAgU2hhcmVkS2V5W0JTUzBdCi0JCQkJCQkJICAgICBbcEFkLT5TdGFDZmcuCi0JCQkJCQkJICAgICAgRGVmYXVsdEtleUlkXS4KLQkJCQkJCQkgICAgIENpcGhlckFsZywgRkFMU0UpOwotCQkJCQkJfSBlbHNlIGlmIChwRW50cnktPkF1dGhNb2RlID09Ci0JCQkJCQkJICAgTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZSkKLQkJCQkJCXsKLQkJCQkJCQl1MzIgdUlWID0gMTsKLQkJCQkJCQl1OCAqcHRyOwotCi0JCQkJCQkJcHRyID0gKHU4ICopJiB1SVY7Ci0JCQkJCQkJKihwdHIgKyAzKSA9Ci0JCQkJCQkJICAgIChwQWQtPlN0YUNmZy4KLQkJCQkJCQkgICAgIERlZmF1bHRLZXlJZCA8PCA2KTsKLQkJCQkJCQlBc2ljVXBkYXRlV0NJRElWRUlWKHBBZCwKLQkJCQkJCQkJCSAgICBwRW50cnktPgotCQkJCQkJCQkJICAgIEFpZCwKLQkJCQkJCQkJCSAgICB1SVYsCi0JCQkJCQkJCQkgICAgMCk7Ci0JCQkJCQkJQXNpY1VwZGF0ZVdDSURBdHRyaWJ1dGUKLQkJCQkJCQkgICAgKHBBZCwgcEVudHJ5LT5BaWQsCi0JCQkJCQkJICAgICBCU1MwLAotCQkJCQkJCSAgICAgcEFkLT4KLQkJCQkJCQkgICAgIFNoYXJlZEtleVtCU1MwXQotCQkJCQkJCSAgICAgW3BBZC0+U3RhQ2ZnLgotCQkJCQkJCSAgICAgIERlZmF1bHRLZXlJZF0uCi0JCQkJCQkJICAgICBDaXBoZXJBbGcsIEZBTFNFKTsKLQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJLyogKi8KLQkJCQkJCQkvKiBPdGhlciBjYXNlLCBkaXNhYmxlIGVuZ2luZS4gKi8KLQkJCQkJCQkvKiBEb24ndCB3b3JyeSBXUEEga2V5LCB3ZSB3aWxsIGFkZCBXUEEgS2V5IGFmdGVyIDQtV2F5IGhhbmRzaGFraW5nLiAqLwotCQkJCQkJCS8qICovCi0JCQkJCQkJdTE2IG9mZnNldDsKLQkJCQkJCQlvZmZzZXQgPQotCQkJCQkJCSAgICBNQUNfV0NJRF9BVFRSSUJVVEVfQkFTRQotCQkJCQkJCSAgICArCi0JCQkJCQkJICAgIChwRW50cnktPkFpZCAqCi0JCQkJCQkJICAgICBIV19XQ0lEX0FUVFJJX1NJWkUpOwotCQkJCQkJCS8qIFJYX1BLRVlfTU9ERTowIGZvciBubyBzZWN1cml0eTsgUlhfS0VZX1RBQjowIGZvciBzaGFyZWQga2V5IHRhYmxlOyBCU1NfSURYOjAgKi8KLQkJCQkJCQlSVFVTQldyaXRlTUFDUmVnaXN0ZXIKLQkJCQkJCQkgICAgKHBBZCwgb2Zmc2V0LCAwKTsKLQkJCQkJCX0KLQkJCQkJfQotCi0JCQkJCUFzaWNVcGRhdGVSeFdDSURUYWJsZShwQWQsIHBFbnRyeS0+QWlkLAotCQkJCQkJCSAgICAgIHBFbnRyeS0+QWRkcik7Ci0JCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJCQkJKCJVcGRhdGVSeFdDSURUYWJsZSgpOiBBaWQ9JWQsICIKLQkJCQkJCQkiQWRkcj0lcE0hXG4iLAotCQkJCQkJCXBFbnRyeS0+QWlkLAotCQkJCQkJCXBFbnRyeS0+QWRkcikpOwotCQkJCX0KLQkJCQlicmVhazsKLQotLyogYWRkIGJ5IGpvaG5saSwgZml4ICJpbl9pbnRlcnJ1cHQiIGVycm9yIHdoZW4gY2FsbCAiTWFjVGFibGVEZWxldGVFbnRyeSIgaW4gUnggdGFza2xldCAqLwotCQkJY2FzZSBDTURUSFJFQURfVVBEQVRFX1BST1RFQ1Q6Ci0JCQkJewotCQkJCQlBc2ljVXBkYXRlUHJvdGVjdChwQWQsIDAsCi0JCQkJCQkJICAoQUxMTl9TRVRQUk9URUNUKSwKLQkJCQkJCQkgIFRSVUUsIDApOwotCQkJCX0KLQkJCQlicmVhazsKLS8qIGVuZCBqb2hubGkgKi8KLQotCQkJY2FzZSBPSURfODAyXzExX0FERF9XRVA6Ci0JCQkJewotCQkJCQl1MzIgaTsKLQkJCQkJdTMyIEtleUlkeDsKLQkJCQkJc3RydWN0IHJ0X25kaXNfODAyXzExX3dlcCAqcFdlcEtleTsKLQotCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkJCSAoIkNtZFRocmVhZDo6T0lEXzgwMl8xMV9BRERfV0VQICBcbiIpKTsKLQotCQkJCQlwV2VwS2V5ID0gKHN0cnVjdCBydF9uZGlzXzgwMl8xMV93ZXAgKilwRGF0YTsKLQkJCQkJS2V5SWR4ID0gcFdlcEtleS0+S2V5SW5kZXggJiAweDBmZmZmZmZmOwotCi0JCQkJCS8qIGl0IGlzIGEgc2hhcmVkIGtleSAqLwotCQkJCQlpZiAoKEtleUlkeCA+PSA0KQotCQkJCQkgICAgfHwgKChwV2VwS2V5LT5LZXlMZW5ndGggIT0gNSkKLQkJCQkJCSYmIChwV2VwS2V5LT5LZXlMZW5ndGggIT0KLQkJCQkJCSAgICAxMykpKSB7Ci0JCQkJCQlOZGlzU3RhdHVzID0KLQkJCQkJCSAgICBORElTX1NUQVRVU19JTlZBTElEX0RBVEE7Ci0JCQkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKLQkJCQkJCQkgKCJDbWRUaHJlYWQ6Ok9JRF84MDJfMTFfQUREX1dFUCwgSU5WQUxJRF9EQVRBISFcbiIpKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXU4IENpcGhlckFsZzsKLQkJCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uCi0JCQkJCQkgICAgS2V5TGVuID0KLQkJCQkJCSAgICAodTgpcFdlcEtleS0+S2V5TGVuZ3RoOwotCQkJCQkJTmRpc01vdmVNZW1vcnkocEFkLT4KLQkJCQkJCQkgICAgICAgU2hhcmVkS2V5W0JTUzBdCi0JCQkJCQkJICAgICAgIFtLZXlJZHhdLktleSwKLQkJCQkJCQkgICAgICAgJnBXZXBLZXktPgotCQkJCQkJCSAgICAgICBLZXlNYXRlcmlhbCwKLQkJCQkJCQkgICAgICAgcFdlcEtleS0+Ci0JCQkJCQkJICAgICAgIEtleUxlbmd0aCk7Ci0JCQkJCQlDaXBoZXJBbGcgPQotCQkJCQkJICAgIChwQWQtPgotCQkJCQkJICAgICBTaGFyZWRLZXlbQlNTMF1bS2V5SWR4XS4KLQkJCQkJCSAgICAgS2V5TGVuID09Ci0JCQkJCQkgICAgIDUpID8gQ0lQSEVSX1dFUDY0IDoKLQkJCQkJCSAgICBDSVBIRVJfV0VQMTI4OwotCi0JCQkJCQkvKiAqLwotCQkJCQkJLyogQ2hhbmdlIHRoZSBXRVAgY2lwaGVyIHRvIENLSVAgY2lwaGVyIGlmIENLSVAgS1Agb24uICovCi0JCQkJCQkvKiBGdW5rIFVJIG9yIE1lZXRpbmdob3VzZSBVSSB3aWxsIGFkZCBja2lwIGtleSBmcm9tIHRoaXMgcGF0aC4gKi8KLQkJCQkJCS8qICovCi0KLQkJCQkJCWlmIChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKSB7Ci0JCQkJCQkJcEFkLT5NYWNUYWIuCi0JCQkJCQkJICAgIENvbnRlbnRbQlNTSURfV0NJRF0uCi0JCQkJCQkJICAgIFBhaXJ3aXNlS2V5LgotCQkJCQkJCSAgICBDaXBoZXJBbGcgPQotCQkJCQkJCSAgICBwQWQtPgotCQkJCQkJCSAgICBTaGFyZWRLZXlbQlNTMF0KLQkJCQkJCQkgICAgW0tleUlkeF0uQ2lwaGVyQWxnOwotCQkJCQkJCXBBZC0+TWFjVGFiLgotCQkJCQkJCSAgICBDb250ZW50W0JTU0lEX1dDSURdLgotCQkJCQkJCSAgICBQYWlyd2lzZUtleS5LZXlMZW4gPQotCQkJCQkJCSAgICBwQWQtPgotCQkJCQkJCSAgICBTaGFyZWRLZXlbQlNTMF0KLQkJCQkJCQkgICAgW0tleUlkeF0uS2V5TGVuOwotCQkJCQkJfQotCQkJCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bS2V5SWR4XS4KLQkJCQkJCSAgICBDaXBoZXJBbGcgPSBDaXBoZXJBbGc7Ci0JCQkJCQlpZiAocFdlcEtleS0+Ci0JCQkJCQkgICAgS2V5SW5kZXggJiAweDgwMDAwMDAwKSB7Ci0JCQkJCQkJLyogRGVmYXVsdCBrZXkgZm9yIHR4IChzaGFyZWQga2V5KSAqLwotCQkJCQkJCXU4IElWRUlWWzhdOwotCQkJCQkJCXUzMiBXQ0lEQXR0cmksIFZhbHVlOwotCQkJCQkJCXUxNiBvZmZzZXQsIG9mZnNldDI7Ci0JCQkJCQkJTmRpc1plcm9NZW1vcnkoSVZFSVYsCi0JCQkJCQkJCSAgICAgICA4KTsKLQkJCQkJCQlwQWQtPlN0YUNmZy4KLQkJCQkJCQkgICAgRGVmYXVsdEtleUlkID0KLQkJCQkJCQkgICAgKHU4KUtleUlkeDsKLQkJCQkJCQkvKiBBZGQgQlNTSUQgdG8gV0NUYWJsZS4gYmVjYXVzZSB0aGlzIGlzIFR4IHdlcCBrZXkuICovCi0JCQkJCQkJLyogV0NJRCBBdHRyaWJ1dGUgVURGOjMsIEJTU0lkeDozLCBBbGc6MywgS2V5dGFibGU6MT1QQUlSV0lTRSBLRVksIEJTU0lkeCBpcyAwICovCi0JCQkJCQkJV0NJREF0dHJpID0KLQkJCQkJCQkgICAgKENpcGhlckFsZyA8PCAxKSB8Ci0JCQkJCQkJICAgIFNIQVJFREtFWVRBQkxFOwotCi0JCQkJCQkJb2Zmc2V0ID0KLQkJCQkJCQkgICAgTUFDX1dDSURfQVRUUklCVVRFX0JBU0UKLQkJCQkJCQkgICAgKwotCQkJCQkJCSAgICAoQlNTSURfV0NJRCAqCi0JCQkJCQkJICAgICBIV19XQ0lEX0FUVFJJX1NJWkUpOwotCQkJCQkJCVJUVVNCV3JpdGVNQUNSZWdpc3RlcgotCQkJCQkJCSAgICAocEFkLCBvZmZzZXQsCi0JCQkJCQkJICAgICBXQ0lEQXR0cmkpOwotCQkJCQkJCS8qIDEuIElWL0VJViAqLwotCQkJCQkJCS8qIFNwZWNpZnkga2V5IGluZGV4IHRvIGZpbmQgc2hhcmVkIGtleS4gKi8KLQkJCQkJCQlJVkVJVlszXSA9ICh1OCkoS2V5SWR4IDw8IDYpOwkvKldFUCBFaXYgYml0IG9mZi4gZ3JvdXBrZXkgaW5kZXggaXMgbm90IDAgKi8KLQkJCQkJCQlvZmZzZXQgPQotCQkJCQkJCSAgICBQQUlSV0lTRV9JVkVJVl9UQUJMRV9CQVNFCi0JCQkJCQkJICAgICsKLQkJCQkJCQkgICAgKEJTUzBNY2FzdF9XQ0lEICoKLQkJCQkJCQkgICAgIEhXX0lWRUlWX0VOVFJZX1NJWkUpOwotCQkJCQkJCW9mZnNldDIgPQotCQkJCQkJCSAgICBQQUlSV0lTRV9JVkVJVl9UQUJMRV9CQVNFCi0JCQkJCQkJICAgICsKLQkJCQkJCQkgICAgKEJTU0lEX1dDSUQgKgotCQkJCQkJCSAgICAgSFdfSVZFSVZfRU5UUllfU0laRSk7Ci0JCQkJCQkJZm9yIChpID0gMDsgaSA8IDg7KSB7Ci0JCQkJCQkJCVZhbHVlID0KLQkJCQkJCQkJICAgIElWRUlWW2ldOwotCQkJCQkJCQlWYWx1ZSArPQotCQkJCQkJCQkgICAgKElWRUlWCi0JCQkJCQkJCSAgICAgW2kgKwotCQkJCQkJCQkgICAgICAxXSA8PCA4KTsKLQkJCQkJCQkJVmFsdWUgKz0KLQkJCQkJCQkJICAgIChJVkVJVgotCQkJCQkJCQkgICAgIFtpICsKLQkJCQkJCQkJICAgICAgMl0gPDwgMTYpOwotCQkJCQkJCQlWYWx1ZSArPQotCQkJCQkJCQkgICAgKElWRUlWCi0JCQkJCQkJCSAgICAgW2kgKwotCQkJCQkJCQkgICAgICAzXSA8PCAyNCk7Ci0JCQkJCQkJCVJUVVNCV3JpdGVNQUNSZWdpc3RlcgotCQkJCQkJCQkgICAgKHBBZCwKLQkJCQkJCQkJICAgICBvZmZzZXQgKyBpLAotCQkJCQkJCQkgICAgIFZhbHVlKTsKLQkJCQkJCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyCi0JCQkJCQkJCSAgICAocEFkLAotCQkJCQkJCQkgICAgIG9mZnNldDIgKwotCQkJCQkJCQkgICAgIGksIFZhbHVlKTsKLQkJCQkJCQkJaSArPSA0OwotCQkJCQkJCX0KLQotCQkJCQkJCS8qIDIuIFdDSUQgQXR0cmlidXRlIFVERjozLCBCU1NJZHg6MywgQWxnOjMsIEtleXRhYmxlOnVzZSBzaGFyZSBrZXksIEJTU0lkeCBpcyAwICovCi0JCQkJCQkJV0NJREF0dHJpID0KLQkJCQkJCQkgICAgKHBBZC0+Ci0JCQkJCQkJICAgICBTaGFyZWRLZXlbQlNTMF0KLQkJCQkJCQkgICAgIFtLZXlJZHhdLgotCQkJCQkJCSAgICAgQ2lwaGVyQWxnIDw8IDEpIHwKLQkJCQkJCQkgICAgU0hBUkVES0VZVEFCTEU7Ci0JCQkJCQkJb2Zmc2V0ID0KLQkJCQkJCQkgICAgTUFDX1dDSURfQVRUUklCVVRFX0JBU0UKLQkJCQkJCQkgICAgKwotCQkJCQkJCSAgICAoQlNTME1jYXN0X1dDSUQgKgotCQkJCQkJCSAgICAgSFdfV0NJRF9BVFRSSV9TSVpFKTsKLQkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkJCQkJICgiQlNTME1jYXN0X1dDSUQgOiBvZmZzZXQgPSAleCwgV0NJREF0dHJpID0gJXhcbiIsCi0JCQkJCQkJCSAgb2Zmc2V0LAotCQkJCQkJCQkgIFdDSURBdHRyaSkpOwotCQkJCQkJCVJUVVNCV3JpdGVNQUNSZWdpc3RlcgotCQkJCQkJCSAgICAocEFkLCBvZmZzZXQsCi0JCQkJCQkJICAgICBXQ0lEQXR0cmkpOwotCi0JCQkJCQl9Ci0JCQkJCQlBc2ljQWRkU2hhcmVkS2V5RW50cnkocEFkLCBCU1MwLAotCQkJCQkJCQkgICAgICAodTgpCi0JCQkJCQkJCSAgICAgIEtleUlkeCwKLQkJCQkJCQkJICAgICAgQ2lwaGVyQWxnLAotCQkJCQkJCQkgICAgICBwV2VwS2V5LT4KLQkJCQkJCQkJICAgICAgS2V5TWF0ZXJpYWwsCi0JCQkJCQkJCSAgICAgIE5VTEwsCi0JCQkJCQkJCSAgICAgIE5VTEwpOwotCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCi0JCQkJCQkJICgiQ21kVGhyZWFkOjpPSURfODAyXzExX0FERF9XRVAgKEtleUlkeD0lZCwgTGVuPSVkLWJ5dGUpXG4iLAotCQkJCQkJCSAgS2V5SWR4LAotCQkJCQkJCSAgcFdlcEtleS0+S2V5TGVuZ3RoKSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgQ01EVEhSRUFEXzgwMl8xMV9DT1VOVEVSX01FQVNVUkU6Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgQ01EVEhSRUFEX1NFVF9HUk9VUF9LRVk6Ci0JCQkJV3BhU3RhR3JvdXBLZXlTZXR0aW5nKHBBZCk7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgQ01EVEhSRUFEX1NFVF9QQUlSV0lTRV9LRVk6Ci0JCQkJV3BhU3RhUGFpcndpc2VLZXlTZXR0aW5nKHBBZCk7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgQ01EVEhSRUFEX1NFVF9QU01fQklUOgotCQkJCXsKLQkJCQkJdTE2ICpwUHNtID0gKHUxNiAqKSBwRGF0YTsKLQkJCQkJTWxtZVNldFBzbUJpdChwQWQsICpwUHNtKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIENNRFRIUkVBRF9GT1JDRV9XQUtFX1VQOgotCQkJCUFzaWNGb3JjZVdha2V1cChwQWQsIFRSVUUpOwotCQkJCWJyZWFrOwotCi0JCQlkZWZhdWx0OgotCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJCQkgKCItLT4gQ29udHJvbCBUaHJlYWQgISEgRVJST1IgISEgVW5rbm93bihjbWRxZWxtdC0+Y29tbWFuZD0weCV4KSAhISBcbiIsCi0JCQkJCSAgY21kcWVsbXQtPmNvbW1hbmQpKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCWlmIChjbWRxZWxtdC0+Q21kRnJvbU5kaXMgPT0gVFJVRSkgewotCQkJaWYgKGNtZHFlbG10LT5idWZmZXIgIT0gTlVMTCkKLQkJCQlvc19mcmVlX21lbShwQWQsIGNtZHFlbG10LT5idWZmZXIpOwotCQkJb3NfZnJlZV9tZW0ocEFkLCBjbWRxZWxtdCk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGNtZHFlbG10LT5idWZmZXIgIT0gTlVMTCkKLQkJCSAgICAmJiAoY21kcWVsbXQtPmJ1ZmZlcmxlbmd0aCAhPSAwKSkKLQkJCQlvc19mcmVlX21lbShwQWQsIGNtZHFlbG10LT5idWZmZXIpOwotCQkJb3NfZnJlZV9tZW0ocEFkLCBjbWRxZWxtdCk7Ci0JCX0KLQl9CQkJLyogZW5kIG9mIHdoaWxlICovCi19Ci0KLSNlbmRpZiAvKiBSVE1QX01BQ19VU0IgLy8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL3NwZWN0cnVtLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9zcGVjdHJ1bS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2YyYzI2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL3NwZWN0cnVtLmMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSAiLi4vLi4vcnQyODYwL2NvbW1vbi9zcGVjdHJ1bS5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9kZnMuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvZGZzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmZGJkN2IuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9kZnMuaAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlICIuLi9ydDI4NjAvZGZzLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL21kNS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9tZDUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDYwY2QwNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL21kNS5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgIi4uL3J0Mjg2MC9tZDUuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvbWxtZS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9tbG1lLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NzUzYWMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9tbG1lLmgKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSAiLi4vcnQyODYwL21sbWUuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvb2lkLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL29pZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjIzZDgxYi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL29pZC5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgIi4uL3J0Mjg2MC9vaWQuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvcnQyOHh4LmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3J0Mjh4eC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWJhZDk1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvcnQyOHh4LmgKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSAiLi4vcnQyODYwL3J0Mjh4eC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9ydF9jb25maWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvcnRfY29uZmlnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmNmQ2ZWQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9ydF9jb25maWcuaAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlICIuLi9ydDI4NjAvcnRfY29uZmlnLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3J0X2xpbnV4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3J0X2xpbnV4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4YzY5N2IuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9ydF9saW51eC5jCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgIi4uL3J0Mjg2MC9ydF9saW51eC5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9ydF9saW51eC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9ydF9saW51eC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmFlYWZiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvcnRfbGludXguaAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlICIuLi9ydDI4NjAvcnRfbGludXguaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvcnRfbWFpbl9kZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvcnRfbWFpbl9kZXYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTIxZTE2My4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3J0X21haW5fZGV2LmMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSAiLi4vcnQyODYwL3J0X21haW5fZGV2LmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3J0X3Byb2ZpbGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvcnRfcHJvZmlsZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTk4OGM1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvcnRfcHJvZmlsZS5jCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgIi4uL3J0Mjg2MC9ydF9wcm9maWxlLmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3J0X3VzYi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9ydF91c2IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWUwMmQ0Yy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3J0X3VzYi5jCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgIi4uL3J0Mjg2MC9ydF91c2IuYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvcnRtcC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9ydG1wLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1ZWY4OWYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9ydG1wLmgKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSAiLi4vcnQyODYwL3J0bXAuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvcnRtcF9ja2lwbWljLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3J0bXBfY2tpcG1pYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTdmMWRmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvcnRtcF9ja2lwbWljLmgKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSAiLi4vcnQyODYwL3J0bXBfY2tpcG1pYy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9ydG1wX2RlZi5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9ydG1wX2RlZi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzlkNzkxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvcnRtcF9kZWYuaAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlICIuLi9ydDI4NjAvcnRtcF9kZWYuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvcnRtcF90eXBlLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3J0bXBfdHlwZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmY5N2QwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvcnRtcF90eXBlLmgKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSAiLi4vcnQyODYwL3J0bXBfdHlwZS5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9zcGVjdHJ1bS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9zcGVjdHJ1bS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWEyM2ExOC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3NwZWN0cnVtLmgKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSAiLi4vcnQyODYwL3NwZWN0cnVtLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3NwZWN0cnVtX2RlZi5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9zcGVjdHJ1bV9kZWYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY1ZjU1MS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3NwZWN0cnVtX2RlZi5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgIi4uL3J0Mjg2MC9zcGVjdHJ1bV9kZWYuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvc3RhL2Fpcm9uZXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvc3RhL2Fpcm9uZXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzJiN2YyZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3N0YS9haXJvbmV0LmMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSAiLi4vLi4vcnQyODYwL3N0YS9haXJvbmV0LmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3N0YS9hc3NvYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9zdGEvYXNzb2MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDY1NjRkNy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3N0YS9hc3NvYy5jCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgIi4uLy4uL3J0Mjg2MC9zdGEvYXNzb2MuYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvc3RhL2F1dGguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvc3RhL2F1dGguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc2MzJmOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3N0YS9hdXRoLmMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSAiLi4vLi4vcnQyODYwL3N0YS9hdXRoLmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3N0YS9hdXRoX3JzcC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9zdGEvYXV0aF9yc3AuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzgzZTI2Ni4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3N0YS9hdXRoX3JzcC5jCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgIi4uLy4uL3J0Mjg2MC9zdGEvYXV0aF9yc3AuYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvc3RhL2Nvbm5lY3QuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvc3RhL2Nvbm5lY3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZjN2JiZi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3N0YS9jb25uZWN0LmMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSAiLi4vLi4vcnQyODYwL3N0YS9jb25uZWN0LmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3N0YS9ydG1wX2RhdGEuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvc3RhL3J0bXBfZGF0YS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjdlMDY5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvc3RhL3J0bXBfZGF0YS5jCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgIi4uLy4uL3J0Mjg2MC9zdGEvcnRtcF9kYXRhLmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3N0YS9zYW5pdHkuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvc3RhL3Nhbml0eS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWYyMzMzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvc3RhL3Nhbml0eS5jCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgIi4uLy4uL3J0Mjg2MC9zdGEvc2FuaXR5LmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3N0YS9zeW5jLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3N0YS9zeW5jLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2Yzg3NzIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9zdGEvc3luYy5jCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgIi4uLy4uL3J0Mjg2MC9zdGEvc3luYy5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9zdGEvd3BhLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3N0YS93cGEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTdhMmViMi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3N0YS93cGEuYworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlICIuLi8uLi9ydDI4NjAvc3RhL3dwYS5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9zdGFfaW9jdGwuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvc3RhX2lvY3RsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1NTNhNmMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9zdGFfaW9jdGwuYworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlICIuLi9ydDI4NjAvc3RhX2lvY3RsLmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3VzYl9tYWluX2Rldi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC91c2JfbWFpbl9kZXYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU2M2JjNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3VzYl9tYWluX2Rldi5jCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgIi4uL3J0Mjg2MC91c2JfbWFpbl9kZXYuYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvd3BhLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3dwYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTI1MDcyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvd3BhLmgKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSAiLi4vcnQyODYwL3dwYS5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvaWVlZTgwMjExLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9pZWVlODAyMTEuaAppbmRleCA0MzJjZjhhLi4xZjRkMTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9pZWVlODAyMTEuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9pZWVlODAyMTEuaApAQCAtNzYsNyArNzYsNyBAQAogCQkJdTggcmVzZXJ2ZWRbMzJdOwogCQkJdTggZGF0YVswXTsKIAkJfSB3cGFfaWU7Ci0JCXN0cnVjdHsKKwkJc3RydWN0IHsKIAkJCWludCBjb21tYW5kOwogCQkJaW50IHJlYXNvbl9jb2RlOwogCQl9IG1sbWU7CkBAIC0xNDksMTEgKzE0OSwxMSBAQAogc3RydWN0ICBpZWVlODAyMTFfaGRyXzNhZGRyX3FvcyB7CiAJdTE2IGZyYW1lX2N0bDsKIAl1MTYgZHVyYXRpb25faWQ7Ci0JdTggYWRkcjFbRVRIX0FMRU5dOwotCXU4IGFkZHIyW0VUSF9BTEVOXTsKLQl1OCBhZGRyM1tFVEhfQUxFTl07CisJdTggIGFkZHIxW0VUSF9BTEVOXTsKKwl1OCAgYWRkcjJbRVRIX0FMRU5dOworCXU4ICBhZGRyM1tFVEhfQUxFTl07CiAJdTE2IHNlcV9jdGw7Ci0gICAgICAgdTE2ICAgICBxYzsKKwl1MTYgcWM7CiB9ICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBlYXBvbCB7CkBAIC00NjEsNyArNDYxLDcgQEAKIAl1aW50IHJ4X21lc3NhZ2VfaW5fYmFkX21zZ19mcmFnbWVudHM7CiB9OwogCi1zdHJ1Y3QgaWVlZTgwMjExX3NvZnRtYWNfc3RhdHN7CitzdHJ1Y3QgaWVlZTgwMjExX3NvZnRtYWNfc3RhdHMgewogCXVpbnQgcnhfYXNzX29rOwogCXVpbnQgcnhfYXNzX2VycjsKIAl1aW50IHJ4X3Byb2JlX3JxOwpAQCAtNzU0LDE1ICs3NTQsMTcgQEAKIHU4ICpyODcxMl9zZXRfaWUodTggKnBidWYsIHNpbnQgaW5kZXgsIHVpbnQgbGVuLCB1OCAqc291cmNlLCB1aW50ICpmcmxlbik7CiB1OCAqcjg3MTJfZ2V0X2llKHU4KnBidWYsIHNpbnQgaW5kZXgsIHNpbnQgKmxlbiwgc2ludCBsaW1pdCk7CiB1bnNpZ25lZCBjaGFyICpyODcxMl9nZXRfd3BhX2llKHVuc2lnbmVkIGNoYXIgKnBpZSwgaW50ICpyc25faWVfbGVuLCBpbnQgbGltaXQpOwotdW5zaWduZWQgY2hhciAqcjg3MTJfZ2V0X3dwYTJfaWUodW5zaWduZWQgY2hhciAqcGllLCBpbnQgKnJzbl9pZV9sZW4sIGludCBsaW1pdCk7Cit1bnNpZ25lZCBjaGFyICpyODcxMl9nZXRfd3BhMl9pZSh1bnNpZ25lZCBjaGFyICpwaWUsIGludCAqcnNuX2llX2xlbiwKKwkJCQkgaW50IGxpbWl0KTsKIGludCByODcxMl9wYXJzZV93cGFfaWUodTggKndwYV9pZSwgaW50IHdwYV9pZV9sZW4sIGludCAqZ3JvdXBfY2lwaGVyLAotCQkgICAgICAgaW50ICpwYWlyd2lzZV9jaXBoZXIpOworCQkJaW50ICpwYWlyd2lzZV9jaXBoZXIpOwogaW50IHI4NzEyX3BhcnNlX3dwYTJfaWUodTggKndwYV9pZSwgaW50IHdwYV9pZV9sZW4sIGludCAqZ3JvdXBfY2lwaGVyLAotCQkgICAgICAgIGludCAqcGFpcndpc2VfY2lwaGVyKTsKLWludCByODcxMl9nZXRfc2VjX2llKHU4ICppbl9pZSwgdWludCBpbl9sZW4sIHU4ICpyc25faWUsIHUxNiAqcnNuX2xlbiwgdTggKndwYV9pZSwKLQkgICAgICAgdTE2ICp3cGFfbGVuKTsKKwkJCWludCAqcGFpcndpc2VfY2lwaGVyKTsKK2ludCByODcxMl9nZXRfc2VjX2llKHU4ICppbl9pZSwgdWludCBpbl9sZW4sIHU4ICpyc25faWUsIHUxNiAqcnNuX2xlbiwKKwkJICAgICB1OCAqd3BhX2llLCB1MTYgKndwYV9sZW4pOwogaW50IHI4NzEyX2dldF93cHNfaWUodTggKmluX2llLCB1aW50IGluX2xlbiwgdTggKndwc19pZSwgdWludCAqd3BzX2llbGVuKTsKLWludCByODcxMl9nZW5lcmF0ZV9pZShzdHJ1Y3QgcmVnaXN0cnlfcHJpdiAqcHJlZ2lzdHJ5cHJpdiwgc3RydWN0IF9hZGFwdGVyICpwYWRhcHRlcik7CitpbnQgcjg3MTJfZ2VuZXJhdGVfaWUoc3RydWN0IHJlZ2lzdHJ5X3ByaXYgKnByZWdpc3RyeXByaXYsCisJCSAgICAgIHN0cnVjdCBfYWRhcHRlciAqcGFkYXB0ZXIpOwogdWludCByODcxMl9pc19jY2tyYXRlc19pbmNsdWRlZCh1OCAqcmF0ZSk7CiB1aW50IHI4NzEyX2lzX2Nja3JhdGVzb25seV9pbmNsdWRlZCh1OCAqcmF0ZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL2lmX2V0aGVyLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9pZl9ldGhlci5oCmluZGV4IDM2YTJiYTUuLjBlOTc1M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL2lmX2V0aGVyLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvaWZfZXRoZXIuaApAQCAtOTksOCArOTksOCBAQAogfTsKIAogc3RydWN0IF92bGFuIHsKLSAgIHVuc2lnbmVkIHNob3J0ICAgICAgIGhfdmxhbl9UQ0k7CS8qIEVuY2Fwc3VsYXRlcyBwcmlvcml0eSBhbmQgVkxBTiBJRCovCi0gICB1bnNpZ25lZCBzaG9ydCAgICAgICBoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvOworCXVuc2lnbmVkIHNob3J0ICBoX3ZsYW5fVENJOwkvKiBFbmNhcHN1bGF0ZXMgcHJpb3JpdHkgYW5kIFZMQU4gSUQqLworCXVuc2lnbmVkIHNob3J0ICBoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvOwogfTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9pcC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvaXAuaAppbmRleCA0Nzg1YTU5Li5mMzdiMGY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9pcC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL2lwLmgKQEAgLTkwLDIzICs5MCwyMyBAQAogI2RlZmluZQlJUE9QVF9UU19QUkVTUEVDCTMJCS8qIHNwZWNpZmllZCBtb2R1bGVzIG9ubHkgKi8KIAogc3RydWN0IGlwX29wdGlvbnMgewotICBfX3UzMgkJZmFkZHI7CQkJCS8qIFNhdmVkIGZpcnN0IGhvcCBhZGRyZXNzICovCi0gIHVuc2lnbmVkIGNoYXIJb3B0bGVuOwotICB1bnNpZ25lZCBjaGFyIHNycjsKLSAgdW5zaWduZWQgY2hhciBycjsKLSAgdW5zaWduZWQgY2hhciB0czsKLSAgdW5zaWduZWQgY2hhciBpc19zZXRieXVzZXI6MSwJLyogU2V0IGJ5IHNldHNvY2tvcHQ/CQkJKi8KLQkJaXNfZGF0YToxLAkvKiBPcHRpb25zIGluIF9fZGF0YSwgcmF0aGVyIHRoYW4gc2tiCSovCi0JCWlzX3N0cmljdHJvdXRlOjEsIC8qIFN0cmljdCBzb3VyY2Ugcm91dGUJCSovCi0JCXNycl9pc19oaXQ6MSwJLyogUGFja2V0IGRlc3RpbmF0aW9uIGFkZHIgd2FzIG91ciBvbmUJKi8KLQkJaXNfY2hhbmdlZDoxLAkvKiBJUCBjaGVja3N1bSBtb3JlIG5vdCB2YWxpZAkJKi8KLQkJcnJfbmVlZGFkZHI6MSwJLyogTmVlZCB0byByZWNvcmQgYWRkciBvZiBvdXRnb2luZyBkZXYJKi8KLQkJdHNfbmVlZHRpbWU6MSwJLyogTmVlZCB0byByZWNvcmQgdGltZXN0YW1wCQkqLwotCQl0c19uZWVkYWRkcjoxOwkvKiBOZWVkIHRvIHJlY29yZCBhZGRyIG9mIG91dGdvaW5nIGRldiAgKi8KLSAgdW5zaWduZWQgY2hhciByb3V0ZXJfYWxlcnQ7Ci0gIHVuc2lnbmVkIGNoYXIgX19wYWQxOwotICB1bnNpZ25lZCBjaGFyIF9fcGFkMjsKLSAgdW5zaWduZWQgY2hhciBfX2RhdGFbMF07CisJX191MzIJCWZhZGRyOwkJCS8qIFNhdmVkIGZpcnN0IGhvcCBhZGRyZXNzICovCisJdW5zaWduZWQgY2hhcglvcHRsZW47CisJdW5zaWduZWQgY2hhciBzcnI7CisJdW5zaWduZWQgY2hhciBycjsKKwl1bnNpZ25lZCBjaGFyIHRzOworCXVuc2lnbmVkIGNoYXIgaXNfc2V0Ynl1c2VyOjEsCS8qIFNldCBieSBzZXRzb2Nrb3B0PwkJICAgICAgKi8KKwkJICAgICAgaXNfZGF0YToxLAkvKiBPcHRpb25zIGluIF9fZGF0YSwgcmF0aGVyIHRoYW4gc2tiICovCisJCSAgICAgIGlzX3N0cmljdHJvdXRlOjEsIC8qIFN0cmljdCBzb3VyY2Ugcm91dGUJCSAgICAgICovCisJCSAgICAgIHNycl9pc19oaXQ6MSwJLyogUGFja2V0IGRlc3RpbmF0aW9uIGFkZHIgd2FzIG91ciBvbmUqLworCQkgICAgICBpc19jaGFuZ2VkOjEsCS8qIElQIGNoZWNrc3VtIG1vcmUgbm90IHZhbGlkCSAgICAgICovCisJCSAgICAgIHJyX25lZWRhZGRyOjEsCS8qIE5lZWQgdG8gcmVjb3JkIGFkZHIgb2Ygb3V0Z29pbmcgZGV2Ki8KKwkJICAgICAgdHNfbmVlZHRpbWU6MSwJLyogTmVlZCB0byByZWNvcmQgdGltZXN0YW1wCSAgICAgICovCisJCSAgICAgIHRzX25lZWRhZGRyOjE7CS8qIE5lZWQgdG8gcmVjb3JkIGFkZHIgb2Ygb3V0Z29pbmcgZGV2Ki8KKwl1bnNpZ25lZCBjaGFyIHJvdXRlcl9hbGVydDsKKwl1bnNpZ25lZCBjaGFyIF9fcGFkMTsKKwl1bnNpZ25lZCBjaGFyIF9fcGFkMjsKKwl1bnNpZ25lZCBjaGFyIF9fZGF0YVswXTsKIH07CiAKICNkZWZpbmUgb3B0bGVuZ3RoKG9wdCkgKHNpemVvZihzdHJ1Y3QgaXBfb3B0aW9ucykgKyBvcHQtPm9wdGxlbikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL21sbWVfb3NkZXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL21sbWVfb3NkZXAuaAppbmRleCA3MDEzYTQ5Li45NjhlNzg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9tbG1lX29zZGVwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvbWxtZV9vc2RlcC5oCkBAIC05LDggKzksOCBAQAogdm9pZCByODcxMl9vc19pbmRpY2F0ZV9jb25uZWN0KHN0cnVjdCBfYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIHI4NzEyX3JlcG9ydF9zZWNfaWUoc3RydWN0IF9hZGFwdGVyICphZGFwdGVyLCB1OCBhdXRobW9kZSwgdTggKnNlY19pZSk7CiBpbnQgcjg3MTJfcmVjdl9pbmRpY2F0ZXBrdHNfaW5fb3JkZXIoc3RydWN0IF9hZGFwdGVyICphZGFwdGVyLAotCQkJCSAgICAgc3RydWN0IHJlY3ZfcmVvcmRlcl9jdHJsICpwcmVjdnJlb3JkZXJfY3RybCwKLQkJCQkgICAgIGludCBiZm9yY2VkKTsKKwkJCQlzdHJ1Y3QgcmVjdl9yZW9yZGVyX2N0cmwgKnByZWN2cmVvcmRlcl9jdHJsLAorCQkJCWludCBiZm9yY2VkKTsKIHZvaWQgcjg3MTJfaW5kaWNhdGVfd3hfYXNzb2NfZXZlbnQoc3RydWN0IF9hZGFwdGVyICpwYWRhcHRlcik7CiB2b2lkIHI4NzEyX2luZGljYXRlX3d4X2Rpc2Fzc29jX2V2ZW50KHN0cnVjdCBfYWRhcHRlciAqcGFkYXB0ZXIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9vc2RlcF9zZXJ2aWNlLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9vc2RlcF9zZXJ2aWNlLmgKaW5kZXggMzZlZWI1YS4uM2QzZjczYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvb3NkZXBfc2VydmljZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL29zZGVwX3NlcnZpY2UuaApAQCAtMTQ1LDcgKzE0NSw4IEBACiAJCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGxpc3RfaW5zZXJ0X3RhaWwoc3RydWN0IGxpc3RfaGVhZCAqcGxpc3QsIHN0cnVjdCBsaXN0X2hlYWQgKnBoZWFkKQorc3RhdGljIGlubGluZSB2b2lkIGxpc3RfaW5zZXJ0X3RhaWwoc3RydWN0IGxpc3RfaGVhZCAqcGxpc3QsCisJCQkJICAgIHN0cnVjdCBsaXN0X2hlYWQgKnBoZWFkKQogewogCWxpc3RfYWRkX3RhaWwocGxpc3QsIHBoZWFkKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3JlY3Zfb3NkZXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3JlY3Zfb3NkZXAuaAppbmRleCBiMjNkZDZiLi42MGE1NGRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9yZWN2X29zZGVwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcmVjdl9vc2RlcC5oCkBAIC0xMiw3ICsxMiw4IEBACiB2b2lkIHI4NzEyX3JlY3ZfaW5kaWNhdGVwa3Qoc3RydWN0IF9hZGFwdGVyICphZGFwdGVyLAogCQkJICAgIHVuaW9uIHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lKTsKIHZvaWQgcjg3MTJfaGFuZGxlX3RraXBfbWljX2VycihzdHJ1Y3QgX2FkYXB0ZXIgKnBhZGFwdGVyLCB1OCBiZ3JvdXApOwotaW50IHI4NzEyX2luaXRfcmVjdl9wcml2KHN0cnVjdCByZWN2X3ByaXYgKnByZWN2cHJpdiwgc3RydWN0IF9hZGFwdGVyICpwYWRhcHRlcik7CitpbnQgcjg3MTJfaW5pdF9yZWN2X3ByaXYoc3RydWN0IHJlY3ZfcHJpdiAqcHJlY3Zwcml2LAorCQkJIHN0cnVjdCBfYWRhcHRlciAqcGFkYXB0ZXIpOwogdm9pZCByODcxMl9mcmVlX3JlY3ZfcHJpdihzdHJ1Y3QgcmVjdl9wcml2ICpwcmVjdnByaXYpOwogaW50IHI4NzEyX29zX3JlY3ZfcmVzb3VyY2VfYWxsb2Moc3RydWN0IF9hZGFwdGVyICpwYWRhcHRlciwKIAkJCQkgdW5pb24gcmVjdl9mcmFtZSAqcHJlY3ZmcmFtZSk7CkBAIC0yNCw0ICsyNSwzIEBACiB2b2lkIHI4NzEyX2luaXRfcmVjdl90aW1lcihzdHJ1Y3QgcmVjdl9yZW9yZGVyX2N0cmwgKnByZW9yZGVyX2N0cmwpOwogCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxMl9ldmVudC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxMl9ldmVudC5oCmluZGV4IDQ4NDA4ZjcuLjI3MzE2OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MTJfZXZlbnQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzEyX2V2ZW50LmgKQEAgLTUsMzMgKzUsMzMgQEAKIHZvaWQgcjg3MTJfZ290X2FkZGJhcmVxX2V2ZW50X2NhbGxiYWNrKHN0cnVjdCBfYWRhcHRlciAqYWRhcHRlciAsIHU4ICpwYnVmKTsKIAogZW51bSBydGw4NzEyX2MyaF9ldmVudCB7Ci0JR0VOX0VWVF9DT0RFKF9SZWFkX01BQ1JFRykgPSAwLCAvKjAqLworCUdFTl9FVlRfQ09ERShfUmVhZF9NQUNSRUcpID0gMCwJCS8qMCovCiAJR0VOX0VWVF9DT0RFKF9SZWFkX0JCUkVHKSwKIAlHRU5fRVZUX0NPREUoX1JlYWRfUkZSRUcpLAogCUdFTl9FVlRfQ09ERShfUmVhZF9FRVBST00pLAogCUdFTl9FVlRfQ09ERShfUmVhZF9FRlVTRSksCi0JR0VOX0VWVF9DT0RFKF9SZWFkX0NBTSksCQkJLyo1Ki8KKwlHRU5fRVZUX0NPREUoX1JlYWRfQ0FNKSwJCS8qNSovCiAJR0VOX0VWVF9DT0RFKF9HZXRfQmFzaWNSYXRlKSwKIAlHRU5fRVZUX0NPREUoX0dldF9EYXRhUmF0ZSksCi0JR0VOX0VWVF9DT0RFKF9TdXJ2ZXkpLAkgLyo4Ki8KLQlHRU5fRVZUX0NPREUoX1N1cnZleURvbmUpLAkgLyo5Ki8KKwlHRU5fRVZUX0NPREUoX1N1cnZleSksCQkJLyo4Ki8KKwlHRU5fRVZUX0NPREUoX1N1cnZleURvbmUpLAkJLyo5Ki8KIAotCUdFTl9FVlRfQ09ERShfSm9pbkJzcykgLCAvKjEwKi8KKwlHRU5fRVZUX0NPREUoX0pvaW5Cc3MpLAkJCS8qMTAqLwogCUdFTl9FVlRfQ09ERShfQWRkU1RBKSwKIAlHRU5fRVZUX0NPREUoX0RlbFNUQSksCi0JR0VOX0VWVF9DT0RFKF9BdGltRG9uZSkgLAorCUdFTl9FVlRfQ09ERShfQXRpbURvbmUpLAogCUdFTl9FVlRfQ09ERShfVFhfUmVwb3J0KSwKLQlHRU5fRVZUX0NPREUoX0NDWF9SZXBvcnQpLAkJCS8qMTUqLworCUdFTl9FVlRfQ09ERShfQ0NYX1JlcG9ydCksCQkvKjE1Ki8KIAlHRU5fRVZUX0NPREUoX0RUTV9SZXBvcnQpLAogCUdFTl9FVlRfQ09ERShfVFhfUmF0ZV9TdGF0aXN0aWNzKSwKIAlHRU5fRVZUX0NPREUoX0MySExCSyksCiAJR0VOX0VWVF9DT0RFKF9GV0RCRyksCi0JR0VOX0VWVF9DT0RFKF9DMkhGRUVEQkFDSyksICAgICAgICAgICAgICAgLyoyMCovCisJR0VOX0VWVF9DT0RFKF9DMkhGRUVEQkFDSyksCQkvKjIwKi8KIAlHRU5fRVZUX0NPREUoX0FEREJBKSwKIAlHRU5fRVZUX0NPREUoX0MySEJDTiksCiAJR0VOX0VWVF9DT0RFKF9SZXBvcnRQd3JTdGF0ZSksCQkvKmZpbGVuOiBvbmx5IGZvciBQQ0lFLCBVU0IqLwogCUdFTl9FVlRfQ09ERShfV1BTX1BCQyksCQkJLyoyNCovCi0JR0VOX0VWVF9DT0RFKF9BRERCQVJlcV9SZXBvcnQpLAkvKjI1Ki8KKwlHRU5fRVZUX0NPREUoX0FEREJBUmVxX1JlcG9ydCksCQkvKjI1Ki8KIAlNQVhfQzJIRVZUCiB9OwogCkBAIC00OCw3ICs0OCw4IEBACiAJezAsIE5VTEx9LAogCXswLCBOVUxMfSwKIAl7MCwgJnI4NzEyX3N1cnZleV9ldmVudF9jYWxsYmFja30sCQkvKjgqLwotCXtzaXplb2Yoc3RydWN0IHN1cnZleWRvbmVfZXZlbnQpLCAmcjg3MTJfc3VydmV5ZG9uZV9ldmVudF9jYWxsYmFja30sLyo5Ki8KKwl7c2l6ZW9mKHN0cnVjdCBzdXJ2ZXlkb25lX2V2ZW50KSwKKwkJJnI4NzEyX3N1cnZleWRvbmVfZXZlbnRfY2FsbGJhY2t9LAkvKjkqLwogCiAJezAsICZyODcxMl9qb2luYnNzX2V2ZW50X2NhbGxiYWNrfSwJCS8qMTAqLwogCXtzaXplb2Yoc3RydWN0IHN0YXNzb2NfZXZlbnQpLCAmcjg3MTJfc3Rhc3NvY19ldmVudF9jYWxsYmFja30sCkBAIC01OSw4ICs2MCw4IEBACiAJezAsIE5VTEx9LAogCXswLCBOVUxMfSwKIAl7MCwgTlVMTH0sCi0JezAsIE5VTEx9LCAvKmZ3ZGJnX2V2ZW50X2NhbGxiYWNrfSwqLwotCXswLCBOVUxMfSwJIC8qMjAqLworCXswLCBOVUxMfSwJLypmd2RiZ19ldmVudF9jYWxsYmFja30sKi8KKwl7MCwgTlVMTH0sCS8qMjAqLwogCXswLCBOVUxMfSwKIAl7MCwgTlVMTH0sCiAJezAsICZyODcxMl9jcHdtX2V2ZW50X2NhbGxiYWNrfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MTJfaGFsLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzEyX2hhbC5oCmluZGV4IDEzZGYyMDAuLjY2YmFhODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MTJfaGFsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxMl9oYWwuaApAQCAtMjEsMTMgKzIxLDEzIEBACiAJUlRMODcxMl9VU0IsCiB9OwogCi1lbnVtIFJUTDg3MTJfUkZfQ09ORklHeworZW51bSBSVEw4NzEyX1JGX0NPTkZJRyB7CiAJUlRMODcxMl9SRl8xVDFSLAogCVJUTDg3MTJfUkZfMVQyUiwKIAlSVEw4NzEyX1JGXzJUMlIKIH07CiAKLWVudW0gX1JUTDg3MTJfSENJX1RZUEVfeworZW51bSBfUlRMODcxMl9IQ0lfVFlQRV8gewogCVJUTDg3MTJfSENJX1RZUEVfUENJRSA9IDB4MDEsCiAJUlRMODcxMl9IQ0lfVFlQRV9BUF9QQ0lFID0gMHg4MSwKIAlSVEw4NzEyX0hDSV9UWVBFX1VTQiA9IDB4MDIsCkBAIC00MCw2MiArNDAsNjIgQEAKIAogc3RydWN0IGZ3X3ByaXYgeyAgIC8qOC1ieXRlcyBhbGlnbm1lbnQgcmVxdWlyZWQqLwogCS8qLS0tIGxvbmcgd29yZCAwIC0tLS0qLwotIHVuc2lnbmVkIGNoYXIgIHNpZ25hdHVyZV8wOyAgLyoweDEyOiBDRSBwcm9kdWN0LCAweDkyOiBJVCBwcm9kdWN0Ki8KLSB1bnNpZ25lZCBjaGFyICBzaWduYXR1cmVfMTsgIC8qMHg4NzogQ0UgcHJvZHVjdCwgMHg4MTogSVQgcHJvZHVjdCovCi0gdW5zaWduZWQgY2hhciAgaGNpX3NlbDsgICAvKjB4ODE6IFBDSS1BUCwgMDE6UENJZSwgMDI6IDkyUy1VLCAweDgyOiBVU0ItQVAsCisJdW5zaWduZWQgY2hhciBzaWduYXR1cmVfMDsgIC8qMHgxMjogQ0UgcHJvZHVjdCwgMHg5MjogSVQgcHJvZHVjdCovCisJdW5zaWduZWQgY2hhciBzaWduYXR1cmVfMTsgIC8qMHg4NzogQ0UgcHJvZHVjdCwgMHg4MTogSVQgcHJvZHVjdCovCisJdW5zaWduZWQgY2hhciBoY2lfc2VsOyAvKjB4ODE6IFBDSS1BUCwgMDE6UENJZSwgMDI6IDkyUy1VLCAweDgyOiBVU0ItQVAsCiAJCQkgICAgKiAweDEyOiA3MlMtVSwgMDM6U0RJTyovCi0gdW5zaWduZWQgY2hhciAgY2hpcF92ZXJzaW9uOyAvKnRoZSBzYW1lIHZhbHVlIGFzIHJlZ2lzdGVyIHZhbHVlKi8KLSB1bnNpZ25lZCBjaGFyICBjdXN0b21lcl9JRF8wOyAvKmN1c3RvbWVyICBJRCBsb3cgYnl0ZSovCi0gdW5zaWduZWQgY2hhciAgY3VzdG9tZXJfSURfMTsgLypjdXN0b21lciAgSUQgaGlnaCBieXRlKi8KLSB1bnNpZ25lZCBjaGFyICByZl9jb25maWc7ICAvKjB4MTE6ICAxVDFSLCAweDEyOiAxVDJSLCAweDkyOiAxVDJSIHR1cmJvLAorCXVuc2lnbmVkIGNoYXIgY2hpcF92ZXJzaW9uOyAvKnRoZSBzYW1lIHZhbHVlIGFzIHJlZ2lzdGVyIHZhbHVlKi8KKwl1bnNpZ25lZCBjaGFyIGN1c3RvbWVyX0lEXzA7IC8qY3VzdG9tZXIgIElEIGxvdyBieXRlKi8KKwl1bnNpZ25lZCBjaGFyIGN1c3RvbWVyX0lEXzE7IC8qY3VzdG9tZXIgIElEIGhpZ2ggYnl0ZSovCisJdW5zaWduZWQgY2hhciByZl9jb25maWc7ICAvKjB4MTE6ICAxVDFSLCAweDEyOiAxVDJSLCAweDkyOiAxVDJSIHR1cmJvLAogCQkJICAgICAqIDB4MjI6IDJUMlIqLwotIHVuc2lnbmVkIGNoYXIgIHVzYl9lcF9udW07ICAvKiA0OiA0RVAsIDY6IDZFUCwgMTE6IDExRVAqLworCXVuc2lnbmVkIGNoYXIgdXNiX2VwX251bTsgIC8qIDQ6IDRFUCwgNjogNkVQLCAxMTogMTFFUCovCiAJLyotLS0gbG9uZyB3b3JkIDEgLS0tLSovCi0gdW5zaWduZWQgY2hhciAgcmVndWxhdG9yeV9jbGFzc18wOyAvKnJlZ3VsYXRvcnkgY2xhc3MgYml0IG1hcCAwKi8KLSB1bnNpZ25lZCBjaGFyICByZWd1bGF0b3J5X2NsYXNzXzE7IC8qcmVndWxhdG9yeSBjbGFzcyBiaXQgbWFwIDEqLwotIHVuc2lnbmVkIGNoYXIgIHJlZ3VsYXRvcnlfY2xhc3NfMjsgLypyZWd1bGF0b3J5IGNsYXNzIGJpdCBtYXAgMiovCi0gdW5zaWduZWQgY2hhciAgcmVndWxhdG9yeV9jbGFzc18zOyAvKnJlZ3VsYXRvcnkgY2xhc3MgYml0IG1hcCAzKi8KLSB1bnNpZ25lZCBjaGFyICByZmludGZzOyAgICAvKiAwOlNXU0ksIDE6SFdTSSwgMjpIV1BJKi8KLSB1bnNpZ25lZCBjaGFyICBkZWZfbmV0dHlwZTsKLSB1bnNpZ25lZCBjaGFyICB0dXJib01vZGU7Ci0gdW5zaWduZWQgY2hhciAgbG93UG93ZXJNb2RlOy8qIDA6IG5vcmFsIG1vZGUsIDE6IGxvdyBwb3dlciBtb2RlKi8KKwl1bnNpZ25lZCBjaGFyIHJlZ3VsYXRvcnlfY2xhc3NfMDsgLypyZWd1bGF0b3J5IGNsYXNzIGJpdCBtYXAgMCovCisJdW5zaWduZWQgY2hhciByZWd1bGF0b3J5X2NsYXNzXzE7IC8qcmVndWxhdG9yeSBjbGFzcyBiaXQgbWFwIDEqLworCXVuc2lnbmVkIGNoYXIgcmVndWxhdG9yeV9jbGFzc18yOyAvKnJlZ3VsYXRvcnkgY2xhc3MgYml0IG1hcCAyKi8KKwl1bnNpZ25lZCBjaGFyIHJlZ3VsYXRvcnlfY2xhc3NfMzsgLypyZWd1bGF0b3J5IGNsYXNzIGJpdCBtYXAgMyovCisJdW5zaWduZWQgY2hhciByZmludGZzOyAgICAvKiAwOlNXU0ksIDE6SFdTSSwgMjpIV1BJKi8KKwl1bnNpZ25lZCBjaGFyIGRlZl9uZXR0eXBlOworCXVuc2lnbmVkIGNoYXIgdHVyYm9Nb2RlOworCXVuc2lnbmVkIGNoYXIgbG93UG93ZXJNb2RlOy8qIDA6IG5vcmFsIG1vZGUsIDE6IGxvdyBwb3dlciBtb2RlKi8KIAkvKi0tLSBsb25nIHdvcmQgMiAtLS0tKi8KLSB1bnNpZ25lZCBjaGFyICBsYmtfbW9kZTsgLyoweDAwOiBub3JtYWwsIDB4MDM6IE1BQ0xCSywgMHgwMTogUEhZTEJLKi8KLSB1bnNpZ25lZCBjaGFyICBtcF9tb2RlOyAvKiAxOiBmb3IgTVAgdXNlLCAwOiBmb3Igbm9ybWFsIGRyaXZlciAqLwotIHVuc2lnbmVkIGNoYXIgIHZjc1R5cGU7IC8qIDA6b2ZmIDE6b24gMjphdXRvICovCi0gdW5zaWduZWQgY2hhciAgdmNzTW9kZTsgLyogMTpSVFMvQ1RTIDI6Q1RTIHRvIHNlbGYgKi8KLSB1bnNpZ25lZCBjaGFyICByc3ZkMDIyOwotIHVuc2lnbmVkIGNoYXIgIHJzdmQwMjM7Ci0gdW5zaWduZWQgY2hhciAgcnN2ZDAyNDsKLSB1bnNpZ25lZCBjaGFyICByc3ZkMDI1OworCXVuc2lnbmVkIGNoYXIgbGJrX21vZGU7IC8qMHgwMDogbm9ybWFsLCAweDAzOiBNQUNMQkssIDB4MDE6IFBIWUxCSyovCisJdW5zaWduZWQgY2hhciBtcF9tb2RlOyAvKiAxOiBmb3IgTVAgdXNlLCAwOiBmb3Igbm9ybWFsIGRyaXZlciAqLworCXVuc2lnbmVkIGNoYXIgdmNzVHlwZTsgLyogMDpvZmYgMTpvbiAyOmF1dG8gKi8KKwl1bnNpZ25lZCBjaGFyIHZjc01vZGU7IC8qIDE6UlRTL0NUUyAyOkNUUyB0byBzZWxmICovCisJdW5zaWduZWQgY2hhciByc3ZkMDIyOworCXVuc2lnbmVkIGNoYXIgcnN2ZDAyMzsKKwl1bnNpZ25lZCBjaGFyIHJzdmQwMjQ7CisJdW5zaWduZWQgY2hhciByc3ZkMDI1OwogCS8qLS0tIGxvbmcgd29yZCAzIC0tLS0qLwotIHVuc2lnbmVkIGNoYXIgIHFvc19lbjsgICAgLyoxOiBRb1MgZW5hYmxlKi8KLSB1bnNpZ25lZCBjaGFyICBid180ME1Iel9lbjsgICAvKjE6IDQwTUh6IEJXIGVuYWJsZSovCi0gdW5zaWduZWQgY2hhciAgQU1TRFUyQU1QRFVfZW47ICAgLyoxOiA0MTgxIGNvbnZlcnQgQU1TRFUgdG8gQU1QRFUsCisJdW5zaWduZWQgY2hhciBxb3NfZW47ICAgIC8qMTogUW9TIGVuYWJsZSovCisJdW5zaWduZWQgY2hhciBid180ME1Iel9lbjsgICAvKjE6IDQwTUh6IEJXIGVuYWJsZSovCisJdW5zaWduZWQgY2hhciBBTVNEVTJBTVBEVV9lbjsgICAvKjE6IDQxODEgY29udmVydCBBTVNEVSB0byBBTVBEVSwKIAkJCQkgICAqIDA6IGRpc2FibGUqLwotIHVuc2lnbmVkIGNoYXIgIEFNUERVX2VuOyAgIC8qMTogMTFuIEFNUERVIGVuYWJsZSovCi0gdW5zaWduZWQgY2hhciAgcmF0ZV9jb250cm9sX29mZmxvYWQ7ICAvKjE6IEZXIG9mZmxvYWRzLCAwOiBkcml2ZXIgaGFuZGxlcyovCi0gdW5zaWduZWQgY2hhciAgYWdncmVnYXRpb25fb2ZmbG9hZDsgIC8qMTogRlcgb2ZmbG9hZHMsIDA6IGRyaXZlciBoYW5kbGVzKi8KLSB1bnNpZ25lZCBjaGFyICByc3ZkMDMwOwotIHVuc2lnbmVkIGNoYXIgIHJzdmQwMzE7CisJdW5zaWduZWQgY2hhciBBTVBEVV9lbjsgICAvKjE6IDExbiBBTVBEVSBlbmFibGUqLworCXVuc2lnbmVkIGNoYXIgcmF0ZV9jb250cm9sX29mZmxvYWQ7IC8qMTogRlcgb2ZmbG9hZHMsMDogZHJpdmVyIGhhbmRsZXMqLworCXVuc2lnbmVkIGNoYXIgYWdncmVnYXRpb25fb2ZmbG9hZDsgIC8qMTogRlcgb2ZmbG9hZHMsMDogZHJpdmVyIGhhbmRsZXMqLworCXVuc2lnbmVkIGNoYXIgcnN2ZDAzMDsKKwl1bnNpZ25lZCBjaGFyIHJzdmQwMzE7CiAJLyotLS0gbG9uZyB3b3JkIDQgLS0tLSovCi0gdW5zaWduZWQgY2hhciAgYmVhY29uX29mZmxvYWQ7ICAgLyogMS4gRlcgb2ZmbG9hZHMsIDA6IGRyaXZlciBoYW5kbGVzKi8KLSB1bnNpZ25lZCBjaGFyICBNTE1FX29mZmxvYWQ7ICAgLyogMi4gRlcgb2ZmbG9hZHMsIDA6IGRyaXZlciBoYW5kbGVzKi8KLSB1bnNpZ25lZCBjaGFyICBod3BjX29mZmxvYWQ7ICAgLyogMy4gRlcgb2ZmbG9hZHMsIDA6IGRyaXZlciBoYW5kbGVzKi8KLSB1bnNpZ25lZCBjaGFyICB0Y3BfY2hlY2tzdW1fb2ZmbG9hZDsgLyogNC4gRlcgb2ZmbG9hZHMsIDA6IGRyaXZlciBoYW5kbGVzKi8KLSB1bnNpZ25lZCBjaGFyICB0Y3Bfb2ZmbG9hZDsgICAgLyogNS4gRlcgb2ZmbG9hZHMsIDA6IGRyaXZlciBoYW5kbGVzKi8KLSB1bnNpZ25lZCBjaGFyICBwc19jb250cm9sX29mZmxvYWQ7ICAvKiA2LiBGVyBvZmZsb2FkcywgMDogZHJpdmVyIGhhbmRsZXMqLwotIHVuc2lnbmVkIGNoYXIgIFdXTEFOX29mZmxvYWQ7ICAgLyogNy4gRlcgb2ZmbG9hZHMsIDA6IGRyaXZlciBoYW5kbGVzKi8KLSB1bnNpZ25lZCBjaGFyICByc3ZkMDQwOworCXVuc2lnbmVkIGNoYXIgYmVhY29uX29mZmxvYWQ7ICAgLyogMS4gRlcgb2ZmbG9hZHMsIDA6IGRyaXZlciBoYW5kbGVzKi8KKwl1bnNpZ25lZCBjaGFyIE1MTUVfb2ZmbG9hZDsgICAvKiAyLiBGVyBvZmZsb2FkcywgMDogZHJpdmVyIGhhbmRsZXMqLworCXVuc2lnbmVkIGNoYXIgaHdwY19vZmZsb2FkOyAgIC8qIDMuIEZXIG9mZmxvYWRzLCAwOiBkcml2ZXIgaGFuZGxlcyovCisJdW5zaWduZWQgY2hhciB0Y3BfY2hlY2tzdW1fb2ZmbG9hZDsgLyo0LiBGVyBvZmZsb2FkcywwOiBkcml2ZXIgaGFuZGxlcyovCisJdW5zaWduZWQgY2hhciB0Y3Bfb2ZmbG9hZDsgICAgLyogNS4gRlcgb2ZmbG9hZHMsIDA6IGRyaXZlciBoYW5kbGVzKi8KKwl1bnNpZ25lZCBjaGFyIHBzX2NvbnRyb2xfb2ZmbG9hZDsgLyogNi4gRlcgb2ZmbG9hZHMsIDA6IGRyaXZlciBoYW5kbGVzKi8KKwl1bnNpZ25lZCBjaGFyIFdXTEFOX29mZmxvYWQ7ICAgLyogNy4gRlcgb2ZmbG9hZHMsIDA6IGRyaXZlciBoYW5kbGVzKi8KKwl1bnNpZ25lZCBjaGFyIHJzdmQwNDA7CiAJLyotLS0gbG9uZyB3b3JkIDUgLS0tLSovCi0gdW5zaWduZWQgY2hhciAgdGNwX3R4X2ZyYW1lX2xlbl9MOyAgLyp0Y3AgdHggcGFja2V0IGxlbmd0aCBsb3cgYnl0ZSovCi0gdW5zaWduZWQgY2hhciAgdGNwX3R4X2ZyYW1lX2xlbl9IOyAgLyp0Y3AgdHggcGFja2V0IGxlbmd0aCBoaWdoIGJ5dGUqLwotIHVuc2lnbmVkIGNoYXIgIHRjcF9yeF9mcmFtZV9sZW5fTDsgIC8qdGNwIHJ4IHBhY2tldCBsZW5ndGggbG93IGJ5dGUqLwotIHVuc2lnbmVkIGNoYXIgIHRjcF9yeF9mcmFtZV9sZW5fSDsgIC8qdGNwIHJ4IHBhY2tldCBsZW5ndGggaGlnaCBieXRlKi8KLSB1bnNpZ25lZCBjaGFyICByc3ZkMDUwOwotIHVuc2lnbmVkIGNoYXIgIHJzdmQwNTE7Ci0gdW5zaWduZWQgY2hhciAgcnN2ZDA1MjsKLSB1bnNpZ25lZCBjaGFyICByc3ZkMDUzOworCXVuc2lnbmVkIGNoYXIgdGNwX3R4X2ZyYW1lX2xlbl9MOyAgLyp0Y3AgdHggcGFja2V0IGxlbmd0aCBsb3cgYnl0ZSovCisJdW5zaWduZWQgY2hhciB0Y3BfdHhfZnJhbWVfbGVuX0g7ICAvKnRjcCB0eCBwYWNrZXQgbGVuZ3RoIGhpZ2ggYnl0ZSovCisJdW5zaWduZWQgY2hhciB0Y3BfcnhfZnJhbWVfbGVuX0w7ICAvKnRjcCByeCBwYWNrZXQgbGVuZ3RoIGxvdyBieXRlKi8KKwl1bnNpZ25lZCBjaGFyIHRjcF9yeF9mcmFtZV9sZW5fSDsgIC8qdGNwIHJ4IHBhY2tldCBsZW5ndGggaGlnaCBieXRlKi8KKwl1bnNpZ25lZCBjaGFyIHJzdmQwNTA7CisJdW5zaWduZWQgY2hhciByc3ZkMDUxOworCXVuc2lnbmVkIGNoYXIgcnN2ZDA1MjsKKwl1bnNpZ25lZCBjaGFyIHJzdmQwNTM7CiB9OwogCiBzdHJ1Y3QgZndfaGRyIHsvKjgtYnl0ZSBhbGlubWVudCByZXF1aXJlZCovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzEyX2xlZC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxMl9sZWQuYwppbmRleCA1MDI0ZWU0Li5jYjE3NTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzEyX2xlZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MTJfbGVkLmMKQEAgLTQ5LDcgKzQ5LDcgQEAKICAqIExFRCBvYmplY3QuCiAgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICovCi1lbnVtIF9MRURfU1RBVEVfODcxeHsKK2VudW0gX0xFRF9TVEFURV84NzF4IHsKIAlMRURfVU5LTk9XTiA9IDAsCiAJTEVEX09OID0gMSwKIAlMRURfT0ZGID0gMiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MTJfcmVjdi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxMl9yZWN2LmMKaW5kZXggNTY5ZTE0Yi4uNjI1YThhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxMl9yZWN2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxMl9yZWN2LmMKQEAgLTI1MSw3ICsyNTEsNyBAQAogCQlyZWN2ZnJhbWVfcHV0KHByZnJhbWUsIHBuZmhkci0+bGVuKTsKIAkJcGZoZHItPmF0dHJpYi5pY3ZfbGVuID0gcG5maGRyLT5hdHRyaWIuaWN2X2xlbjsKIAkJcGxpc3QgPSBnZXRfbmV4dChwbGlzdCk7Ci0JfTsKKwl9CiBleGl0OgogCS8qIGZyZWUgdGhlIGRlZnJhZ19xIHF1ZXVlIGFuZCByZXR1cm4gdGhlIHByZnJhbWUgKi8KIAlyODcxMl9mcmVlX3JlY3ZmcmFtZV9xdWV1ZShkZWZyYWdfcSwgcGZyZWVfcmVjdl9xdWV1ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzEyX3JlY3YuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MTJfcmVjdi5oCmluZGV4IDRiYTUyYjkuLmM0ODc1N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MTJfcmVjdi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MTJfcmVjdi5oCkBAIC05Myw3ICs5Myw3IEBACiAJZW5kICAgLS0tLS0+CiAJbGVuID0gKHVuc2lnbmVkIGludCApKHRhaWwgLSBkYXRhKTsKICovCi1zdHJ1Y3QgcmVjdl9mcmFtZV9oZHJ7CitzdHJ1Y3QgcmVjdl9mcmFtZV9oZHIgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlfcGt0CSpwa3Q7CiAJX3BrdCAqcGt0X25ld2FsbG9jOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxMl94bWl0LmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzEyX3htaXQuaAppbmRleCA1ZDc3YzUxLi4xMmEwODBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzEyX3htaXQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzEyX3htaXQuaApAQCAtNTksMjUgKzU5LDE2IEBACiAvKk9GRlNFVCAyMCovCiAjZGVmaW5lIERJU0ZCIEJJVCgxNSkKIAotc3RydWN0IHR4X2Rlc2N7Ci0KK3N0cnVjdCB0eF9kZXNjIHsKIAkvKkRXT1JEIDAqLwogCXVuc2lnbmVkIGludCB0eGR3MDsKLQogCXVuc2lnbmVkIGludCB0eGR3MTsKLQogCXVuc2lnbmVkIGludCB0eGR3MjsKLQogCXVuc2lnbmVkIGludCB0eGR3MzsKLQogCXVuc2lnbmVkIGludCB0eGR3NDsKLQogCXVuc2lnbmVkIGludCB0eGR3NTsKLQogCXVuc2lnbmVkIGludCB0eGR3NjsKLQogCXVuc2lnbmVkIGludCB0eGR3NzsKLQogfTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X2NtZC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9jbWQuYwppbmRleCBmYmIyZTRlLi5iYTkyNzYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X2NtZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfY21kLmMKQEAgLTQzMSw4ICs0MzEsNyBAQAogCX0KIAlwc2VjbmV0d29yayA9IChzdHJ1Y3QgbmRpc193bGFuX2Jzc2lkX2V4ICopJnBzZWN1cml0eXByaXYtPnNlY19ic3M7CiAJaWYgKHBzZWNuZXR3b3JrID09IE5VTEwpIHsKLQkJaWYgKHBjbWQgIT0gTlVMTCkKLQkJCWtmcmVlKCh1bnNpZ25lZCBjaGFyICopcGNtZCk7CisJCWtmcmVlKHBjbWQpOwogCQlyZXR1cm4gX0ZBSUw7CiAJfQogCW1lbXNldChwc2VjbmV0d29yaywgMCwgdF9sZW4pOwpAQCAtNDc4LDggKzQ3Nyw4IEBACiAJCSAqIHRvIGF2b2lkIHNvbWUgSU9UIGlzc3VlcywgZXNwZWNpYWxseSBmb3IgUmVhbHRlayA4MTkydQogCQkgKiBTb2Z0QVAuCiAJCSAqLwotCQlpZiAoKHBhZGFwdGVyLT5zZWN1cml0eXByaXYuUHJpdmFjeUFsZ3J0aG0gIT0gX1dFUDQwXyApICYmCi0JCSAgICAocGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5Qcml2YWN5QWxncnRobSAhPSBfV0VQMTA0XyApKSB7CisJCWlmICgocGFkYXB0ZXItPnNlY3VyaXR5cHJpdi5Qcml2YWN5QWxncnRobSAhPSBfV0VQNDBfKSAmJgorCQkgICAgKHBhZGFwdGVyLT5zZWN1cml0eXByaXYuUHJpdmFjeUFsZ3J0aG0gIT0gX1dFUDEwNF8pKSB7CiAJCQkvKiByZXN0cnVjdHVyZV9odF9pZSAqLwogCQkJcjg3MTJfcmVzdHJ1Y3R1cmVfaHRfaWUocGFkYXB0ZXIsCiAJCQkJCQkmcG5ldHdvcmstPm5ldHdvcmsuSUVzWzBdLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9jbWQuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfY21kLmgKaW5kZXggMmRjNzg0Ny4uZGNmMjU2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9jbWQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X2NtZC5oCkBAIC01NjIsNTQgKzU2Miw1NCBAQAogfTsKIAogLyp0byBnZXQgVFgsUlggcmV0cnkgY291bnQqLwotc3RydWN0IGdldHR4cmV0cnljbnRfcGFybXsKK3N0cnVjdCBnZXR0eHJldHJ5Y250X3Bhcm0gewogCXVuc2lnbmVkIGludCByc3ZkOwogfTsKIAotc3RydWN0IGdldHR4cmV0cnljbnRfcnNweworc3RydWN0IGdldHR4cmV0cnljbnRfcnNwIHsKIAl1bnNpZ25lZCBsb25nIHR4X3JldHJ5Y250OwogfTsKIAotc3RydWN0IGdldHJ4cmV0cnljbnRfcGFybXsKK3N0cnVjdCBnZXRyeHJldHJ5Y250X3Bhcm0gewogCXVuc2lnbmVkIGludCByc3ZkOwogfTsKIAotc3RydWN0IGdldHJ4cmV0cnljbnRfcnNweworc3RydWN0IGdldHJ4cmV0cnljbnRfcnNwIHsKIAl1bnNpZ25lZCBsb25nIHJ4X3JldHJ5Y250OwogfTsKIAogLyp0byBnZXQgQkNOT0ssQkNORVJSIGNvdW50Ki8KLXN0cnVjdCBnZXRiY25va2NudF9wYXJteworc3RydWN0IGdldGJjbm9rY250X3Bhcm0gewogCXVuc2lnbmVkIGludCByc3ZkOwogfTsKIAotc3RydWN0IGdldGJjbm9rY250X3JzcHsKLQl1bnNpZ25lZCBsb25nICBiY25va2NudDsKK3N0cnVjdCBnZXRiY25va2NudF9yc3AgeworCXVuc2lnbmVkIGxvbmcgYmNub2tjbnQ7CiB9OwogCi1zdHJ1Y3QgZ2V0YmNuZXJyY250X3Bhcm17CitzdHJ1Y3QgZ2V0YmNuZXJyY250X3Bhcm0gewogCXVuc2lnbmVkIGludCByc3ZkOwogfTsKLXN0cnVjdCBnZXRiY25lcnJjbnRfcnNweworc3RydWN0IGdldGJjbmVycmNudF9yc3AgewogCXVuc2lnbmVkIGxvbmcgYmNuZXJyY250OwogfTsKIAogLyogdG8gZ2V0IGN1cnJlbnQgVFggcG93ZXIgbGV2ZWwqLwotc3RydWN0IGdldGN1cnR4cHdybGV2ZWxfcGFybXsKK3N0cnVjdCBnZXRjdXJ0eHB3cmxldmVsX3Bhcm0gewogCXVuc2lnbmVkIGludCByc3ZkOwogfTsKIAotc3RydWN0IGdldGN1cnR4cHdybGV2ZWxfcnNweworc3RydWN0IGdldGN1cnR4cHdybGV2ZWxfcnNwIHsKIAl1bnNpZ25lZCBzaG9ydCB0eF9wb3dlcjsKIH07CiAKIC8qZHluYW1pYyBvbi9vZmYgRElHKi8KLXN0cnVjdCBzZXRkaWdfcGFybXsKK3N0cnVjdCBzZXRkaWdfcGFybSB7CiAJdW5zaWduZWQgY2hhciBkaWdfb247CS8qIDE6b24gLCAwOm9mZiAqLwogfTsKIAogLypkeW5hbWljIG9uL29mZiBSQSovCi1zdHJ1Y3Qgc2V0cmFfcGFybXsKK3N0cnVjdCBzZXRyYV9wYXJtIHsKIAl1bnNpZ25lZCBjaGFyIHJhX29uOwkvKiAxOm9uICwgMDpvZmYgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfZXZlbnQuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfZXZlbnQuaAppbmRleCBkNDUyMjkzLi42Y2UwNjc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X2V2ZW50LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9ldmVudC5oCkBAIC00NSw4ICs0NSw4IEBACiB9OwogCiBzdHJ1Y3Qgc3RhZGVsX2V2ZW50IHsKLSB1bnNpZ25lZCBjaGFyIG1hY2FkZHJbNl07Ci0gdW5zaWduZWQgY2hhciByc3ZkWzJdOworCXVuc2lnbmVkIGNoYXIgbWFjYWRkcls2XTsKKwl1bnNpZ25lZCBjaGFyIHJzdmRbMl07CiB9OwogCiBzdHJ1Y3QgYWRkYmFfZXZlbnQgewpAQCAtNjEsNyArNjEsNyBAQAogfTsKIAogI2RlZmluZSBDMkhFVkVOVF9TWgkJCTMyCi1zdHJ1Y3QgZXZlbnRfbm9kZXsKK3N0cnVjdCBldmVudF9ub2RlIHsKIAl1bnNpZ25lZCBjaGFyICpub2RlOwogCXVuc2lnbmVkIGNoYXIgZXZ0X2NvZGU7CiAJdW5zaWduZWQgc2hvcnQgZXZ0X3N6OwpAQCAtODUsOSArODUsOSBAQAogfTsKIAogc3RydWN0IEFEREJBX1JlcV9SZXBvcnRfcGFybSB7Ci0gdW5zaWduZWQgY2hhciBNYWNBZGRyZXNzW0VUSF9BTEVOXTsKLSB1bnNpZ25lZCBzaG9ydCBTdGFydFNlcU51bTsKLSB1bnNpZ25lZCBjaGFyIHRpZDsKKwl1bnNpZ25lZCBjaGFyIE1hY0FkZHJlc3NbRVRIX0FMRU5dOworCXVuc2lnbmVkIHNob3J0IFN0YXJ0U2VxTnVtOworCXVuc2lnbmVkIGNoYXIgdGlkOwogfTsKICNpbmNsdWRlICJydGw4NzEyX2V2ZW50LmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfaW8uYwppbmRleCBlNmUzYzM3Li5jYTg0ZWUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X2lvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9pby5jCkBAIC03Myw4ICs3Myw3IEBACiAJCWdvdG8gX2luaXRfaW50Zl9oZGxfZmFpbDsKIAlyZXR1cm4gX1NVQ0NFU1M7CiBfaW5pdF9pbnRmX2hkbF9mYWlsOgotCWlmIChwaW50Zl9wcml2KQotCQlrZnJlZSgodTggKilwaW50Zl9wcml2KTsKKwlrZnJlZShwaW50Zl9wcml2KTsKIAlyZXR1cm4gX0ZBSUw7CiB9CiAKQEAgLTg0LDggKzgzLDcgQEAKIAogCXVubG9hZF9pbnRmX3ByaXYgPSAmcjg3MTJfdXNiX3VubG9hZF9pbnRmX3ByaXY7CiAJdW5sb2FkX2ludGZfcHJpdihwaW50ZnByaXYpOwotCWlmIChwaW50ZnByaXYpCi0JCWtmcmVlKCh1OCAqKXBpbnRmcHJpdik7CisJa2ZyZWUocGludGZwcml2KTsKIH0KIAogc3RhdGljIHVpbnQgcmVnaXN0ZXJfaW50Zl9oZGwodTggKmRldiwgc3RydWN0IGludGZfaGRsICpwaW50ZmhkbCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfaW9jdGxfbGludXguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfaW9jdGxfbGludXguYwppbmRleCBiZDMxNWM3Li40MGU2YjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X2lvY3RsX2xpbnV4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9pb2N0bF9saW51eC5jCkBAIC0yOTEsNyArMjkxLDggQEAKIAkJCW1lbXNldChidWYsIDAsIE1BWF9XUEFfSUVfTEVOKTsKIAkJCW4gPSBzcHJpbnRmKGJ1ZiwgIndwYV9pZT0iKTsKIAkJCWZvciAoaSA9IDA7IGkgPCB3cGFfbGVuOyBpKyspIHsKLQkJCQluICs9IHNucHJpbnRmKGJ1ZiArIG4sIE1BWF9XUEFfSUVfTEVOIC0gbiwgIiUwMngiLCB3cGFfaWVbaV0pOworCQkJCW4gKz0gc25wcmludGYoYnVmICsgbiwgTUFYX1dQQV9JRV9MRU4gLSBuLAorCQkJCQkJCSIlMDJ4Iiwgd3BhX2llW2ldKTsKIAkJCQlpZiAobiA+PSBNQVhfV1BBX0lFX0xFTikKIAkJCQkJYnJlYWs7CiAJCQl9CkBAIC0zMTAsNyArMzExLDggQEAKIAkJCW1lbXNldChidWYsIDAsIE1BWF9XUEFfSUVfTEVOKTsKIAkJCW4gPSBzcHJpbnRmKGJ1ZiwgInJzbl9pZT0iKTsKIAkJCWZvciAoaSA9IDA7IGkgPCByc25fbGVuOyBpKyspIHsKLQkJCQluICs9IHNucHJpbnRmKGJ1ZiArIG4sIE1BWF9XUEFfSUVfTEVOIC0gbiwgIiUwMngiLCByc25faWVbaV0pOworCQkJCW4gKz0gc25wcmludGYoYnVmICsgbiwgTUFYX1dQQV9JRV9MRU4gLSBuLAorCQkJCQkJCSIlMDJ4IiwgcnNuX2llW2ldKTsKIAkJCQlpZiAobiA+PSBNQVhfV1BBX0lFX0xFTikKIAkJCQkJYnJlYWs7CiAJCQl9CkBAIC0xNzMyLDggKzE3MzQsNyBAQAogCQltZW1jcHkocGFyYW0gKyAxLCBwZXh0ICsgMSwgcGV4dC0+a2V5X2xlbik7CiAJfQogCXJldCA9IHdwYV9zZXRfZW5jcnlwdGlvbihkZXYsIHBhcmFtLCBwYXJhbV9sZW4pOwotCWlmIChwYXJhbSkKLQkJa2ZyZWUoKHU4ICopcGFyYW0pOworCWtmcmVlKHBhcmFtKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X2lvY3RsX3J0bC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9pb2N0bF9ydGwuYwppbmRleCA3YWRiZTgyLi45YTMzZWFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X2lvY3RsX3J0bC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfaW9jdGxfcnRsLmMKQEAgLTQ5Myw3ICs0OTMsNyBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLWVudW0gX0NPTk5FQ1RfU1RBVEVfeworZW51bSBfQ09OTkVDVF9TVEFURV8gewogCUNIRUNLSU5HU1RBVFVTLAogCUFTU09DSUFURUQsCiAJQURIT0NNT0RFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9pb2N0bF9zZXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfaW9jdGxfc2V0LmMKaW5kZXggOGIxNDUxZC4uODQ4NmViMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9pb2N0bF9zZXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X2lvY3RsX3NldC5jCkBAIC02OCw3ICs2OCwxMCBAQAogCXBtbG1lcHJpdi0+Zndfc3RhdGUgfD0gX0ZXX1VOREVSX0xJTktJTkc7CiAJcG1sbWVwcml2LT5wc2Nhbm5lZCA9IHBsaXN0OwogCXBtbG1lcHJpdi0+dG9fam9pbiA9IHRydWU7Ci0JaWYgKF9xdWV1ZV9lbXB0eShxdWV1ZSkgPT0gdHJ1ZSkgeworCisJLyogYWRob2MgbW9kZSB3aWxsIHN0YXJ0IHdpdGggYW4gZW1wdHkgcXVldWUsIGJ1dCBza2lwIGNoZWNraW5nICovCisJaWYgKCFjaGVja19md3N0YXRlKHBtbG1lcHJpdiwgV0lGSV9BREhPQ19TVEFURSkgJiYKKwkgICAgX3F1ZXVlX2VtcHR5KHF1ZXVlKSkgewogCQlpZiAocG1sbWVwcml2LT5md19zdGF0ZSAmIF9GV19VTkRFUl9MSU5LSU5HKQogCQkJcG1sbWVwcml2LT5md19zdGF0ZSBePSBfRldfVU5ERVJfTElOS0lORzsKIAkJLyogd2hlbiBzZXRfc3NpZC9zZXRfYnNzaWQgZm9yIGRvX2pvaW4oKSwgYnV0IHNjYW5uaW5nIHF1ZXVlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X2lvY3RsX3NldC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9pb2N0bF9zZXQuaAppbmRleCAyODNhZmJmLi44ZGZmMmIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X2lvY3RsX3NldC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfaW9jdGxfc2V0LmgKQEAgLTYsMTkgKzYsMjcgQEAKIHR5cGVkZWYgdTggTkRJU184MDJfMTFfUE1LSURfVkFMVUVbMTZdOwogCiBzdHJ1Y3QgQlNTSURJbmZvIHsKLQl1bnNpZ25lZCBjaGFyICBCU1NJRFs2XTsKLQlORElTXzgwMl8xMV9QTUtJRF9WQUxVRSAgUE1LSUQ7CisJdW5zaWduZWQgY2hhciBCU1NJRFs2XTsKKwlORElTXzgwMl8xMV9QTUtJRF9WQUxVRSBQTUtJRDsKIH07CiAKIHU4IHI4NzEyX3NldF84MDJfMTFfYXV0aGVudGljYXRpb25fbW9kZShzdHJ1Y3QgX2FkYXB0ZXIgKnBkYXB0ZXIsCiAJCQllbnVtIE5ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREUgYXV0aG1vZGUpOworCiB1OCByODcxMl9zZXRfODAyXzExX2Jzc2lkKHN0cnVjdCBfYWRhcHRlciAqcGFkYXB0ZXIsIHU4ICpic3NpZCk7Ci11OCByODcxMl9zZXRfODAyXzExX2FkZF93ZXAoc3RydWN0IF9hZGFwdGVyICpwYWRhcHRlciwgc3RydWN0IE5ESVNfODAyXzExX1dFUCAqd2VwKTsKKwordTggcjg3MTJfc2V0XzgwMl8xMV9hZGRfd2VwKHN0cnVjdCBfYWRhcHRlciAqcGFkYXB0ZXIsCisJCQkgICAgc3RydWN0IE5ESVNfODAyXzExX1dFUCAqd2VwKTsKKwogdTggcjg3MTJfc2V0XzgwMl8xMV9kaXNhc3NvY2lhdGUoc3RydWN0IF9hZGFwdGVyICpwYWRhcHRlcik7CisKIHU4IHI4NzEyX3NldF84MDJfMTFfYnNzaWRfbGlzdF9zY2FuKHN0cnVjdCBfYWRhcHRlciAqcGFkYXB0ZXIpOworCiB1OCByODcxMl9zZXRfODAyXzExX2luZnJhc3RydWN0dXJlX21vZGUoc3RydWN0IF9hZGFwdGVyICpwYWRhcHRlciwKIAkJCWVudW0gTkRJU184MDJfMTFfTkVUV09SS19JTkZSQVNUUlVDVFVSRSBuZXR3b3JrdHlwZSk7Ci12b2lkIHI4NzEyX3NldF84MDJfMTFfc3NpZChzdHJ1Y3QgX2FkYXB0ZXIgKnBhZGFwdGVyLCBzdHJ1Y3QgbmRpc184MDJfMTFfc3NpZCAqc3NpZCk7CisKK3ZvaWQgcjg3MTJfc2V0XzgwMl8xMV9zc2lkKHN0cnVjdCBfYWRhcHRlciAqcGFkYXB0ZXIsCisJCQkgICBzdHJ1Y3QgbmRpc184MDJfMTFfc3NpZCAqc3NpZCk7CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X21wLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X21wLmMKaW5kZXggNDI3NDY3Yy4uNDFlMDBhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9tcC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfbXAuYwpAQCAtMjE3LDcgKzIxNywxMCBAQAogCXJldHVybiBuZXdfdmFsdWU7CiB9CiAKLXN0YXRpYyB1OCBzZXRfYmJfcmVnKHN0cnVjdCBfYWRhcHRlciAqcEFkYXB0ZXIsIHUxNiBvZmZzZXQsIHUzMiBiaXRtYXNrLCB1MzIgdmFsdWUpCitzdGF0aWMgdTggc2V0X2JiX3JlZyhzdHJ1Y3QgX2FkYXB0ZXIgKnBBZGFwdGVyLAorCQkgICAgIHUxNiBvZmZzZXQsCisJCSAgICAgdTMyIGJpdG1hc2ssCisJCSAgICAgdTMyIHZhbHVlKQogewogCXUzMiBvcmdfdmFsdWUsIGJpdF9zaGlmdCwgbmV3X3ZhbHVlOwogCkBAIC0yNzQsOCArMjc3LDcgQEAKIAlwcGFybSA9IChzdHJ1Y3QgU2V0Q2hhbm5lbF9wYXJtICopX21hbGxvYyhzaXplb2Yoc3RydWN0CiAJCQkJCSBTZXRDaGFubmVsX3Bhcm0pKTsKIAlpZiAocHBhcm0gPT0gTlVMTCkgewotCQlpZiAocGNtZCAhPSBOVUxMKQotCQkJa2ZyZWUoKHU4ICopcGNtZCk7CisJCWtmcmVlKHBjbWQpOwogCQlyZXR1cm47CiAJfQogCXBwYXJtLT5jdXJyX2NoID0gcEFkYXB0ZXItPm1wcHJpdi5jdXJyX2NoOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9tcF9pb2N0bC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9tcF9pb2N0bC5oCmluZGV4IGZkZDIyNzguLjY3NzU5YzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfbXBfaW9jdGwuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X21wX2lvY3RsLmgKQEAgLTI4MSwyMyArMjgxLDIzIEBACiAJTVBfRVJSX01PREUKIH07CiAKLXN0cnVjdCByd3JlZ19wYXJhbXsKK3N0cnVjdCByd3JlZ19wYXJhbSB7CiAJdW5zaWduZWQgaW50IG9mZnNldDsKIAl1bnNpZ25lZCBpbnQgd2lkdGg7CiAJdW5zaWduZWQgaW50IHZhbHVlOwogfTsKIAotc3RydWN0IGJicmVnX3BhcmFteworc3RydWN0IGJicmVnX3BhcmFtIHsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0OwogCXVuc2lnbmVkIGludCBwaHltYXNrOwogCXVuc2lnbmVkIGludCB2YWx1ZTsKIH07CiAKLXN0cnVjdCB0eHBvd2VyX3BhcmFteworc3RydWN0IHR4cG93ZXJfcGFyYW0gewogCXVuc2lnbmVkIGludCBwd3JfaW5kZXg7CiB9OwogCi1zdHJ1Y3QgZGF0YXJhdGVfcGFyYW17CitzdHJ1Y3QgZGF0YXJhdGVfcGFyYW0gewogCXVuc2lnbmVkIGludCByYXRlX2luZGV4OwogfTsKIApAQCAtMzIxLDcgKzMyMSw3IEBACiAJdW5zaWduZWQgaW50IG9pZDsKIH07CiAKLXN0cnVjdCBtcF9pb2N0bF9wYXJhbXsKK3N0cnVjdCBtcF9pb2N0bF9wYXJhbSB7CiAJdW5zaWduZWQgaW50IHN1YmNvZGU7CiAJdW5zaWduZWQgaW50IGxlbjsKIAl1bnNpZ25lZCBjaGFyIGRhdGFbMF07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X3JlY3YuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfcmVjdi5jCmluZGV4IGEzMTY1ZTYuLmFlYzgzZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfcmVjdi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfcmVjdi5jCkBAIC0zMDcsOSArMzA3LDkgQEAKIAlyZXR1cm4gX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBzaW50IHN0YTJzdGFfZGF0YV9mcmFtZShzdHJ1Y3QgX2FkYXB0ZXIgKmFkYXB0ZXIsIHVuaW9uIHJlY3ZfZnJhbWUgKnByZWN2X2ZyYW1lLAotCQkJc3RydWN0IHN0YV9pbmZvICoqcHN0YQotKQorc3RhdGljIHNpbnQgc3RhMnN0YV9kYXRhX2ZyYW1lKHN0cnVjdCBfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICAgICB1bmlvbiByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSwKKwkJCSAgICAgICBzdHJ1Y3Qgc3RhX2luZm8gKipwc3RhKQogewogCXU4ICpwdHIgPSBwcmVjdl9mcmFtZS0+dS5oZHIucnhfZGF0YTsKIAlzaW50IHJldCA9IF9TVUNDRVNTOwpAQCAtMzczLDggKzM3Myw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHNpbnQgYXAyc3RhX2RhdGFfZnJhbWUoc3RydWN0IF9hZGFwdGVyICphZGFwdGVyLCB1bmlvbiByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSwKLQkJICAgICAgIHN0cnVjdCBzdGFfaW5mbyAqKnBzdGEpCitzdGF0aWMgc2ludCBhcDJzdGFfZGF0YV9mcmFtZShzdHJ1Y3QgX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgICB1bmlvbiByZWN2X2ZyYW1lICpwcmVjdl9mcmFtZSwKKwkJCSAgICAgIHN0cnVjdCBzdGFfaW5mbyAqKnBzdGEpCiB7CiAJdTggKnB0ciA9IHByZWN2X2ZyYW1lLT51Lmhkci5yeF9kYXRhOwogCXN0cnVjdCByeF9wa3RfYXR0cmliICpwYXR0cmliID0gJnByZWN2X2ZyYW1lLT51Lmhkci5hdHRyaWI7CkBAIC00MzEsOCArNDMyLDkgQEAKIAlyZXR1cm4gX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBzaW50IHN0YTJhcF9kYXRhX2ZyYW1lKHN0cnVjdCBfYWRhcHRlciAqYWRhcHRlciwgdW5pb24gcmVjdl9mcmFtZSAqcHJlY3ZfZnJhbWUsCi0JCSAgICAgICBzdHJ1Y3Qgc3RhX2luZm8gKipwc3RhKQorc3RhdGljIHNpbnQgc3RhMmFwX2RhdGFfZnJhbWUoc3RydWN0IF9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICAgdW5pb24gcmVjdl9mcmFtZSAqcHJlY3ZfZnJhbWUsCisJCQkgICAgICBzdHJ1Y3Qgc3RhX2luZm8gKipwc3RhKQogewogCXN0cnVjdCByeF9wa3RfYXR0cmliICpwYXR0cmliID0gJnByZWN2X2ZyYW1lLT51Lmhkci5hdHRyaWI7CiAJc3RydWN0CXN0YV9wcml2ICpwc3RhcHJpdiA9ICZhZGFwdGVyLT5zdGFwcml2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9yZWN2LmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X3JlY3YuaAppbmRleCBiZjgxMTVkLi5jYzdhNzJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X3JlY3YuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X3JlY3YuaApAQCAtMTksOSArMTksOSBAQAogLyogZm9yIFJ4IHJlb3JkZXJpbmcgYnVmZmVyIGNvbnRyb2wgKi8KIHN0cnVjdCByZWN2X3Jlb3JkZXJfY3RybCB7CiAJc3RydWN0IF9hZGFwdGVyCSpwYWRhcHRlcjsKLQl1MTYgaW5kaWNhdGVfc2VxOy8qID13c3RhcnRfYiwgaW5pdF92YWx1ZT0weGZmZmYgKi8KKwl1MTYgaW5kaWNhdGVfc2VxOyAvKiA9d3N0YXJ0X2IsIGluaXRfdmFsdWU9MHhmZmZmICovCiAJdTE2IHdlbmRfYjsKLSAgICAgICB1OCB3c2l6ZV9iOworCXU4IHdzaXplX2I7CiAJc3RydWN0ICBfX3F1ZXVlIHBlbmRpbmdfcmVjdmZyYW1lX3F1ZXVlOwogCXN0cnVjdCB0aW1lcl9saXN0IHJlb3JkZXJpbmdfY3RybF90aW1lcjsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X3JmLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X3JmLmgKaW5kZXggYzcwOWQ4Yy4uNmM1NDk2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9yZi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfcmYuaApAQCAtMjIsNyArMjIsNyBAQAogCXU4CW1vZGVtOwogfTsKIAotZW51bQlfUkVHX1BSRUFNQkxFX01PREV7CitlbnVtCV9SRUdfUFJFQU1CTEVfTU9ERSB7CiAJUFJFQU1CTEVfTE9ORwk9IDEsCiAJUFJFQU1CTEVfQVVUTwk9IDIsCiAJUFJFQU1CTEVfU0hPUlQJPSAzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9zZWN1cml0eS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9zZWN1cml0eS5oCmluZGV4IDc4MmI3MGEuLmJmZjcxZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfc2VjdXJpdHkuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X3NlY3VyaXR5LmgKQEAgLTIxLDMwICsyMSwzMSBAQAogI2lmbmRlZiBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLCiAjZGVmaW5lIE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0sgKE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmUgKyAyKQogI2VuZGlmCisKIHVuaW9uIHBuNDggewogCXU2NCB2YWw7CiAjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCi1zdHJ1Y3QgewotICB1OCBUU0M3OwotICB1OCBUU0M2OwotICB1OCBUU0M1OwotICB1OCBUU0M0OwotICB1OCBUU0MzOwotICB1OCBUU0MyOwotICB1OCBUU0MxOwotICB1OCBUU0MwOwotfSBfYnl0ZV87CisJc3RydWN0IHsKKwkJdTggVFNDNzsKKwkJdTggVFNDNjsKKwkJdTggVFNDNTsKKwkJdTggVFNDNDsKKwkJdTggVFNDMzsKKwkJdTggVFNDMjsKKwkJdTggVFNDMTsKKwkJdTggVFNDMDsKKwl9IF9ieXRlXzsKICNlbHNlCi1zdHJ1Y3QgewotICB1OCBUU0MwOwotICB1OCBUU0MxOwotICB1OCBUU0MyOwotICB1OCBUU0MzOwotICB1OCBUU0M0OwotICB1OCBUU0M1OwotICB1OCBUU0M2OwotICB1OCBUU0M3OwotfSBfYnl0ZV87CisJc3RydWN0IHsKKwkJdTggVFNDMDsKKwkJdTggVFNDMTsKKwkJdTggVFNDMjsKKwkJdTggVFNDMzsKKwkJdTggVFNDNDsKKwkJdTggVFNDNTsKKwkJdTggVFNDNjsKKwkJdTggVFNDNzsKKwl9IF9ieXRlXzsKICNlbmRpZgogfTsKIApAQCAtMTc0LDExICsxNzUsMTEgQEAKIH07CiAKIHZvaWQgc2VjY2FsY3RraXBtaWMoCi0JdTggKmtleSwKLQl1OCAqaGVhZGVyLAotCXU4ICpkYXRhLAotCXUzMiBkYXRhX2xlbiwKLQl1OCAqTWljY29kZSwKKwl1OCAgKmtleSwKKwl1OCAgKmhlYWRlciwKKwl1OCAgKmRhdGEsCisJdTMyICBkYXRhX2xlbiwKKwl1OCAgKk1pY2NvZGUsCiAJdTggICBwcmlvcml0eSk7CiAKIHZvaWQgcjg3MTJfc2VjbWljc2V0a2V5KHN0cnVjdCBtaWNfZGF0YSAqcG1pY2RhdGEsIHU4ICoga2V5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfeG1pdC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF94bWl0LmMKaW5kZXggNzVmMWE2YmIuLmNjZjA4OTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfeG1pdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfeG1pdC5jCkBAIC05OTYsOCArOTk2LDcgQEAKIHsKIAlzdHJ1Y3QgeG1pdF9wcml2ICpweG1pdHByaXYgPSAmcGFkYXB0ZXItPnhtaXRwcml2OwogCi0JaWYgKHB4bWl0cHJpdi0+aHd4bWl0cykKLQkJa2ZyZWUoKHU4ICopcHhtaXRwcml2LT5od3htaXRzKTsKKwlrZnJlZShweG1pdHByaXYtPmh3eG1pdHMpOwogfQogCiBzdGF0aWMgdm9pZCBpbml0X2h3eG1pdHMoc3RydWN0IGh3X3htaXQgKnBod3htaXQsIHNpbnQgZW50cnkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X3htaXQuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfeG1pdC5oCmluZGV4IGQ1MThjZTguLmRmMTNlNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfeG1pdC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfeG1pdC5oCkBAIC0yNDQsNyArMjQ0LDggQEAKIAkJCSBzdHJ1Y3QgcGt0X2F0dHJpYiAqcGF0dHJpYik7CiBpbnQgcjg3MTJfdHhmcmFtZXNfc3RhX2FjX3BlbmRpbmcoc3RydWN0IF9hZGFwdGVyICpwYWRhcHRlciwKIAkJCQkgIHN0cnVjdCBwa3RfYXR0cmliICpwYXR0cmliKTsKLXNpbnQgX3I4NzEyX2luaXRfeG1pdF9wcml2KHN0cnVjdCB4bWl0X3ByaXYgKnB4bWl0cHJpdiwgc3RydWN0IF9hZGFwdGVyICpwYWRhcHRlcik7CitzaW50IF9yODcxMl9pbml0X3htaXRfcHJpdihzdHJ1Y3QgeG1pdF9wcml2ICpweG1pdHByaXYsCisJCQkgICBzdHJ1Y3QgX2FkYXB0ZXIgKnBhZGFwdGVyKTsKIHZvaWQgX2ZyZWVfeG1pdF9wcml2KHN0cnVjdCB4bWl0X3ByaXYgKnB4bWl0cHJpdik7CiB2b2lkIHI4NzEyX2ZyZWVfeG1pdGZyYW1lX2V4KHN0cnVjdCB4bWl0X3ByaXYgKnB4bWl0cHJpdiwKIAkJCSAgICAgc3RydWN0IHhtaXRfZnJhbWUgKnB4bWl0ZnJhbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvd2lmaS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvd2lmaS5oCmluZGV4IDg2ZDRiOTguLjYwMzJjZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3dpZmkuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi93aWZpLmgKQEAgLTM5LDM4ICszOSwzNSBAQAogfTsKIAogZW51bSBXSUZJX0ZSQU1FX1NVQlRZUEUgewotCi0gICAgLyogYmVsb3cgaXMgZm9yIG1ndCBmcmFtZSAqLwotICAgIFdJRklfQVNTT0NSRVEgICAgICAgPSAoMCB8IFdJRklfTUdUX1RZUEUpLAotICAgIFdJRklfQVNTT0NSU1AgICAgICAgPSAoQklUKDQpIHwgV0lGSV9NR1RfVFlQRSksCi0gICAgV0lGSV9SRUFTU09DUkVRICAgICA9IChCSVQoNSkgfCBXSUZJX01HVF9UWVBFKSwKLSAgICBXSUZJX1JFQVNTT0NSU1AgICAgID0gKEJJVCg1KSB8IEJJVCg0KSB8IFdJRklfTUdUX1RZUEUpLAotICAgIFdJRklfUFJPQkVSRVEgICAgICAgPSAoQklUKDYpIHwgV0lGSV9NR1RfVFlQRSksCi0gICAgV0lGSV9QUk9CRVJTUCAgICAgICA9IChCSVQoNikgfCBCSVQoNCkgfCBXSUZJX01HVF9UWVBFKSwKLSAgICBXSUZJX0JFQUNPTiAgICAgICAgID0gKEJJVCg3KSB8IFdJRklfTUdUX1RZUEUpLAotICAgIFdJRklfQVRJTSAgICAgICAgICAgPSAoQklUKDcpIHwgQklUKDQpIHwgV0lGSV9NR1RfVFlQRSksCi0gICAgV0lGSV9ESVNBU1NPQyAgICAgICA9IChCSVQoNykgfCBCSVQoNSkgfCBXSUZJX01HVF9UWVBFKSwKLSAgICBXSUZJX0FVVEggICAgICAgICAgID0gKEJJVCg3KSB8IEJJVCg1KSB8IEJJVCg0KSB8IFdJRklfTUdUX1RZUEUpLAotICAgIFdJRklfREVBVVRIICAgICAgICAgPSAoQklUKDcpIHwgQklUKDYpIHwgV0lGSV9NR1RfVFlQRSksCi0gICAgV0lGSV9BQ1RJT04gICAgICAgICA9IChCSVQoNykgfCBCSVQoNikgfCBCSVQoNCkgfCBXSUZJX01HVF9UWVBFKSwKLQotICAgIC8qIGJlbG93IGlzIGZvciBjb250cm9sIGZyYW1lICovCi0gICAgV0lGSV9QU1BPTEwgICAgICAgICA9IChCSVQoNykgfCBCSVQoNSkgfCBXSUZJX0NUUkxfVFlQRSksCi0gICAgV0lGSV9SVFMgICAgICAgICAgICA9IChCSVQoNykgfCBCSVQoNSkgfCBCSVQoNCkgfCBXSUZJX0NUUkxfVFlQRSksCi0gICAgV0lGSV9DVFMgICAgICAgICAgICA9IChCSVQoNykgfCBCSVQoNikgfCBXSUZJX0NUUkxfVFlQRSksCi0gICAgV0lGSV9BQ0sgICAgICAgICAgICA9IChCSVQoNykgfCBCSVQoNikgfCBCSVQoNCkgfCBXSUZJX0NUUkxfVFlQRSksCi0gICAgV0lGSV9DRkVORCAgICAgICAgICA9IChCSVQoNykgfCBCSVQoNikgfCBCSVQoNSkgfCBXSUZJX0NUUkxfVFlQRSksCi0gICAgV0lGSV9DRkVORF9DRkFDSyAgICA9IChCSVQoNykgfCBCSVQoNikgfCBCSVQoNSkgfCBCSVQoNCkgfCBXSUZJX0NUUkxfVFlQRSksCi0KLSAgICAvKiBiZWxvdyBpcyBmb3IgZGF0YSBmcmFtZSAqLwotICAgIFdJRklfREFUQSAgICAgICAgICAgPSAoMCB8IFdJRklfREFUQV9UWVBFKSwKLSAgICBXSUZJX0RBVEFfQ0ZBQ0sgICAgID0gKEJJVCg0KSB8IFdJRklfREFUQV9UWVBFKSwKLSAgICBXSUZJX0RBVEFfQ0ZQT0xMICAgID0gKEJJVCg1KSB8IFdJRklfREFUQV9UWVBFKSwKLSAgICBXSUZJX0RBVEFfQ0ZBQ0tQT0xMID0gKEJJVCg1KSB8IEJJVCg0KSB8IFdJRklfREFUQV9UWVBFKSwKLSAgICBXSUZJX0RBVEFfTlVMTCAgICAgID0gKEJJVCg2KSB8IFdJRklfREFUQV9UWVBFKSwKLSAgICBXSUZJX0NGX0FDSyAgICAgICAgID0gKEJJVCg2KSB8IEJJVCg0KSB8IFdJRklfREFUQV9UWVBFKSwKLSAgICBXSUZJX0NGX1BPTEwgICAgICAgID0gKEJJVCg2KSB8IEJJVCg1KSB8IFdJRklfREFUQV9UWVBFKSwKLSAgICBXSUZJX0NGX0FDS1BPTEwgICAgID0gKEJJVCg2KSB8IEJJVCg1KSB8IEJJVCg0KSB8IFdJRklfREFUQV9UWVBFKSwKKwkvKiBiZWxvdyBpcyBmb3IgbWd0IGZyYW1lICovCisJV0lGSV9BU1NPQ1JFUSAgICAgICA9ICgwIHwgV0lGSV9NR1RfVFlQRSksCisJV0lGSV9BU1NPQ1JTUCAgICAgICA9IChCSVQoNCkgfCBXSUZJX01HVF9UWVBFKSwKKwlXSUZJX1JFQVNTT0NSRVEgICAgID0gKEJJVCg1KSB8IFdJRklfTUdUX1RZUEUpLAorCVdJRklfUkVBU1NPQ1JTUCAgICAgPSAoQklUKDUpIHwgQklUKDQpIHwgV0lGSV9NR1RfVFlQRSksCisJV0lGSV9QUk9CRVJFUSAgICAgICA9IChCSVQoNikgfCBXSUZJX01HVF9UWVBFKSwKKwlXSUZJX1BST0JFUlNQICAgICAgID0gKEJJVCg2KSB8IEJJVCg0KSB8IFdJRklfTUdUX1RZUEUpLAorCVdJRklfQkVBQ09OICAgICAgICAgPSAoQklUKDcpIHwgV0lGSV9NR1RfVFlQRSksCisJV0lGSV9BVElNICAgICAgICAgICA9IChCSVQoNykgfCBCSVQoNCkgfCBXSUZJX01HVF9UWVBFKSwKKwlXSUZJX0RJU0FTU09DICAgICAgID0gKEJJVCg3KSB8IEJJVCg1KSB8IFdJRklfTUdUX1RZUEUpLAorCVdJRklfQVVUSCAgICAgICAgICAgPSAoQklUKDcpIHwgQklUKDUpIHwgQklUKDQpIHwgV0lGSV9NR1RfVFlQRSksCisJV0lGSV9ERUFVVEggICAgICAgICA9IChCSVQoNykgfCBCSVQoNikgfCBXSUZJX01HVF9UWVBFKSwKKwlXSUZJX0FDVElPTiAgICAgICAgID0gKEJJVCg3KSB8IEJJVCg2KSB8IEJJVCg0KSB8IFdJRklfTUdUX1RZUEUpLAorCS8qIGJlbG93IGlzIGZvciBjb250cm9sIGZyYW1lICovCisJV0lGSV9QU1BPTEwgICAgICAgICA9IChCSVQoNykgfCBCSVQoNSkgfCBXSUZJX0NUUkxfVFlQRSksCisJV0lGSV9SVFMgICAgICAgICAgICA9IChCSVQoNykgfCBCSVQoNSkgfCBCSVQoNCkgfCBXSUZJX0NUUkxfVFlQRSksCisJV0lGSV9DVFMgICAgICAgICAgICA9IChCSVQoNykgfCBCSVQoNikgfCBXSUZJX0NUUkxfVFlQRSksCisJV0lGSV9BQ0sgICAgICAgICAgICA9IChCSVQoNykgfCBCSVQoNikgfCBCSVQoNCkgfCBXSUZJX0NUUkxfVFlQRSksCisJV0lGSV9DRkVORCAgICAgICAgICA9IChCSVQoNykgfCBCSVQoNikgfCBCSVQoNSkgfCBXSUZJX0NUUkxfVFlQRSksCisJV0lGSV9DRkVORF9DRkFDSyA9IChCSVQoNykgfCBCSVQoNikgfCBCSVQoNSkgfCBCSVQoNCkgfCBXSUZJX0NUUkxfVFlQRSksCisJLyogYmVsb3cgaXMgZm9yIGRhdGEgZnJhbWUgKi8KKwlXSUZJX0RBVEEgICAgICAgICAgID0gKDAgfCBXSUZJX0RBVEFfVFlQRSksCisJV0lGSV9EQVRBX0NGQUNLICAgICA9IChCSVQoNCkgfCBXSUZJX0RBVEFfVFlQRSksCisJV0lGSV9EQVRBX0NGUE9MTCAgICA9IChCSVQoNSkgfCBXSUZJX0RBVEFfVFlQRSksCisJV0lGSV9EQVRBX0NGQUNLUE9MTCA9IChCSVQoNSkgfCBCSVQoNCkgfCBXSUZJX0RBVEFfVFlQRSksCisJV0lGSV9EQVRBX05VTEwgICAgICA9IChCSVQoNikgfCBXSUZJX0RBVEFfVFlQRSksCisJV0lGSV9DRl9BQ0sgICAgICAgICA9IChCSVQoNikgfCBCSVQoNCkgfCBXSUZJX0RBVEFfVFlQRSksCisJV0lGSV9DRl9QT0xMICAgICAgICA9IChCSVQoNikgfCBCSVQoNSkgfCBXSUZJX0RBVEFfVFlQRSksCisJV0lGSV9DRl9BQ0tQT0xMICAgICA9IChCSVQoNikgfCBCSVQoNSkgfCBCSVQoNCkgfCBXSUZJX0RBVEFfVFlQRSksCiB9OwogCiBlbnVtIFdJRklfUkVBU09OX0NPREUJewpAQCAtODQsNyArODEsNiBAQAogCV9SU09OX0NMUzNfCQkJPSA3LAogCV9SU09OX0RJU0FPQ19TVEFfTEVBVklOR18JPSA4LAogCV9SU09OX0FTT0NfTk9UX0FVVEhfCQk9IDksCi0KIAkvKiBXUEEgcmVhc29uICovCiAJX1JTT05fSU5WQUxJRF9JRV8JCT0gMTMsCiAJX1JTT05fTUlDX0ZBSUxVUkVfCQk9IDE0LApAQCAtOTcsNyArOTMsNiBAQAogCV9SU09OX1VOU1VQUE9SVF9SU05FX1ZFUl8JPSAyMSwKIAlfUlNPTl9JTlZBTElEX1JTTkVfQ0FQXwkJPSAyMiwKIAlfUlNPTl9JRUVFXzgwMkRPVDFYX0FVVEhfRkFJTF8JPSAyMywKLQogCS8qIGJlbG93IGFyZSBSZWFsdGVrIGRlZmluaXRpb25zICovCiAJX1JTT05fUE1LX05PVF9BVkFJTEFCTEVfCT0gMjQsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvd2xhbl9ic3NkZWYuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3dsYW5fYnNzZGVmLmgKaW5kZXggNmQ5Mjk1Mi4uMGQ5MGUxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvd2xhbl9ic3NkZWYuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi93bGFuX2Jzc2RlZi5oCkBAIC0xMywyMyArMTMsMjMgQEAKIHR5cGVkZWYgdW5zaWduZWQgY2hhciAgIE5ESVNfODAyXzExX1JBVEVTX0VYW05ESVNfODAyXzExX0xFTkdUSF9SQVRFU19FWF07CiAKIHN0cnVjdCBuZGlzXzgwMl8xMV9zc2lkIHsKLSAgdTMyICBTc2lkTGVuZ3RoOwotICB1OCAgU3NpZFszMl07CisJdTMyIFNzaWRMZW5ndGg7CisJdTggIFNzaWRbMzJdOwogfTsKIAogZW51bSBORElTXzgwMl8xMV9ORVRXT1JLX1RZUEUgewotICAgIE5kaXM4MDJfMTFGSCwKLSAgICBOZGlzODAyXzExRFMsCi0gICAgTmRpczgwMl8xMU9GRE01LAotICAgIE5kaXM4MDJfMTFPRkRNMjQsCi0gICAgTmRpczgwMl8xMU5ldHdvcmtUeXBlTWF4ICAgIC8qIG5vdCBhIHJlYWwgdHlwZSwgZGVmaW5lZCBhcyBhbiB1cHBlciBib3VuZCAqLworCU5kaXM4MDJfMTFGSCwKKwlOZGlzODAyXzExRFMsCisJTmRpczgwMl8xMU9GRE01LAorCU5kaXM4MDJfMTFPRkRNMjQsCisJTmRpczgwMl8xMU5ldHdvcmtUeXBlTWF4IC8qIG5vdCBhIHJlYWwgdHlwZSwgZGVmaW5lZCBhcyBhbiB1cHBlciBib3VuZCovCiB9OwogCiBzdHJ1Y3QgTkRJU184MDJfMTFfQ09ORklHVVJBVElPTl9GSCB7Ci0gICAgdTMyICAgICAgICAgICBMZW5ndGg7ICAgICAgICAgICAgIC8qIExlbmd0aCBvZiBzdHJ1Y3R1cmUgKi8KLSAgICB1MzIgICAgICAgICAgIEhvcFBhdHRlcm47ICAgICAgICAgLyogQXMgZGVmaW5lZCBieSA4MDIuMTEsIE1TQiBzZXQgKi8KLSAgICB1MzIgICAgICAgICAgIEhvcFNldDsgICAgICAgICAgICAgLyogdG8gb25lIGlmIG5vbi04MDIuMTEgKi8KLSAgICB1MzIgICAgICAgICAgIER3ZWxsVGltZTsgICAgICAgICAgLyogdW5pdHMgYXJlIEt1c2VjICovCisJdTMyIExlbmd0aDsgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIHN0cnVjdHVyZSAqLworCXUzMiBIb3BQYXR0ZXJuOyAgICAgICAgIC8qIEFzIGRlZmluZWQgYnkgODAyLjExLCBNU0Igc2V0ICovCisJdTMyIEhvcFNldDsgICAgICAgICAgICAgLyogdG8gb25lIGlmIG5vbi04MDIuMTEgKi8KKwl1MzIgRHdlbGxUaW1lOyAgICAgICAgICAvKiB1bml0cyBhcmUgS3VzZWMgKi8KIH07CiAKIC8qCkBAIC0zNywyNSArMzcsMjUgQEAKIAlPREkgSGFuZGxlciB3aWxsIGNvbnZlcnQgdGhlIGNoYW5uZWwgbnVtYmVyIHRvIGZyZXEuIG51bWJlci4KICovCiBzdHJ1Y3QgTkRJU184MDJfMTFfQ09ORklHVVJBVElPTiB7Ci0gICAgdTMyICAgICAgICAgICBMZW5ndGg7ICAgICAgICAgICAgIC8qIExlbmd0aCBvZiBzdHJ1Y3R1cmUgKi8KLSAgICB1MzIgICAgICAgICAgIEJlYWNvblBlcmlvZDsgICAgICAgLyogdW5pdHMgYXJlIEt1c2VjICovCi0gICAgdTMyICAgICAgICAgICBBVElNV2luZG93OyAgICAgICAgIC8qIHVuaXRzIGFyZSBLdXNlYyAqLwotICAgIHUzMiAgICAgICAgICAgRFNDb25maWc7ICAgICAgICAgICAvKiBGcmVxdWVuY3ksIHVuaXRzIGFyZSBrSHogKi8KLSAgICBzdHJ1Y3QgTkRJU184MDJfMTFfQ09ORklHVVJBVElPTl9GSCAgICBGSENvbmZpZzsKKwl1MzIgTGVuZ3RoOyAgICAgICAgICAgICAvKiBMZW5ndGggb2Ygc3RydWN0dXJlICovCisJdTMyIEJlYWNvblBlcmlvZDsgICAgICAgLyogdW5pdHMgYXJlIEt1c2VjICovCisJdTMyIEFUSU1XaW5kb3c7ICAgICAgICAgLyogdW5pdHMgYXJlIEt1c2VjICovCisJdTMyIERTQ29uZmlnOyAgICAgICAgICAgLyogRnJlcXVlbmN5LCB1bml0cyBhcmUga0h6ICovCisJc3RydWN0IE5ESVNfODAyXzExX0NPTkZJR1VSQVRJT05fRkggRkhDb25maWc7CiB9OwogCiBlbnVtIE5ESVNfODAyXzExX05FVFdPUktfSU5GUkFTVFJVQ1RVUkUgewotICAgIE5kaXM4MDJfMTFJQlNTLAotICAgIE5kaXM4MDJfMTFJbmZyYXN0cnVjdHVyZSwKLSAgICBOZGlzODAyXzExQXV0b1Vua25vd24sCi0gICAgTmRpczgwMl8xMUluZnJhc3RydWN0dXJlTWF4LCAvKiBOb3QgYSByZWFsIHZhbHVlLCBkZWZpbmVkIGFzIHVwcGVyIGJvdW5kICovCi0gICAgTmRpczgwMl8xMUFQTW9kZQorCU5kaXM4MDJfMTFJQlNTLAorCU5kaXM4MDJfMTFJbmZyYXN0cnVjdHVyZSwKKwlOZGlzODAyXzExQXV0b1Vua25vd24sCisJTmRpczgwMl8xMUluZnJhc3RydWN0dXJlTWF4LCAvKk5vdCBhIHJlYWwgdmFsdWUsZGVmaW5lZCBhcyB1cHBlciBib3VuZCovCisJTmRpczgwMl8xMUFQTW9kZQogfTsKIAogc3RydWN0IE5ESVNfODAyXzExX0ZJWEVEX0lFcyB7Ci0gIHU4ICBUaW1lc3RhbXBbOF07Ci0gIHUxNiAgQmVhY29uSW50ZXJ2YWw7Ci0gIHUxNiAgQ2FwYWJpbGl0aWVzOworCXU4ICBUaW1lc3RhbXBbOF07CisJdTE2IEJlYWNvbkludGVydmFsOworCXUxNiBDYXBhYmlsaXRpZXM7CiB9OwogCiAvKgpAQCAtNzAsNDQgKzcwLDQ0IEBACiAgKi8KIAogc3RydWN0IG5kaXNfd2xhbl9ic3NpZF9leCB7Ci0gIHUzMiAgTGVuZ3RoOwotICB1bnNpZ25lZCBjaGFyICBNYWNBZGRyZXNzWzZdOwotICB1OCAgUmVzZXJ2ZWRbMl07Ci0gIHN0cnVjdCBuZGlzXzgwMl8xMV9zc2lkICBTc2lkOwotICB1MzIgIFByaXZhY3k7Ci0gIHMzMiAgUnNzaTsKLSAgZW51bSBORElTXzgwMl8xMV9ORVRXT1JLX1RZUEUgIE5ldHdvcmtUeXBlSW5Vc2U7Ci0gIHN0cnVjdCBORElTXzgwMl8xMV9DT05GSUdVUkFUSU9OICBDb25maWd1cmF0aW9uOwotICBlbnVtIE5ESVNfODAyXzExX05FVFdPUktfSU5GUkFTVFJVQ1RVUkUgIEluZnJhc3RydWN0dXJlTW9kZTsKLSAgTkRJU184MDJfMTFfUkFURVNfRVggIFN1cHBvcnRlZFJhdGVzOwotICB1MzIgIElFTGVuZ3RoOwotLyoodGltZXN0YW1wLCBiZWFjb24gaW50ZXJ2YWwsIGFuZCBjYXBhYmlsaXR5IGluZm9ybWF0aW9uKSAqLwotICB1OCAgSUVzW01BWF9JRV9TWl07CisJdTMyIExlbmd0aDsKKwl1bnNpZ25lZCBjaGFyICBNYWNBZGRyZXNzWzZdOworCXU4ICBSZXNlcnZlZFsyXTsKKwlzdHJ1Y3QgbmRpc184MDJfMTFfc3NpZCAgU3NpZDsKKwl1MzIgUHJpdmFjeTsKKwlzMzIgUnNzaTsKKwllbnVtIE5ESVNfODAyXzExX05FVFdPUktfVFlQRSAgTmV0d29ya1R5cGVJblVzZTsKKwlzdHJ1Y3QgTkRJU184MDJfMTFfQ09ORklHVVJBVElPTiAgQ29uZmlndXJhdGlvbjsKKwllbnVtIE5ESVNfODAyXzExX05FVFdPUktfSU5GUkFTVFJVQ1RVUkUgIEluZnJhc3RydWN0dXJlTW9kZTsKKwlORElTXzgwMl8xMV9SQVRFU19FWCAgU3VwcG9ydGVkUmF0ZXM7CisJdTMyIElFTGVuZ3RoOworCS8qKHRpbWVzdGFtcCwgYmVhY29uIGludGVydmFsLCBhbmQgY2FwYWJpbGl0eSBpbmZvcm1hdGlvbikgKi8KKwl1OCBJRXNbTUFYX0lFX1NaXTsKIH07CiAKIGVudW0gTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERSB7Ci0gICAgTmRpczgwMl8xMUF1dGhNb2RlT3BlbiwKLSAgICBOZGlzODAyXzExQXV0aE1vZGVTaGFyZWQsCi0gICAgTmRpczgwMl8xMUF1dGhNb2RlQXV0b1N3aXRjaCwKLSAgICBOZGlzODAyXzExQXV0aE1vZGVXUEEsCi0gICAgTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLLAotICAgIE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmUsCi0gICAgTmRpczgwMl8xMUF1dGhNb2RlTWF4ICAgICAvKiBOb3QgYSByZWFsIG1vZGUsIGRlZmluZWQgYXMgdXBwZXIgYm91bmQgKi8KKwlOZGlzODAyXzExQXV0aE1vZGVPcGVuLAorCU5kaXM4MDJfMTFBdXRoTW9kZVNoYXJlZCwKKwlOZGlzODAyXzExQXV0aE1vZGVBdXRvU3dpdGNoLAorCU5kaXM4MDJfMTFBdXRoTW9kZVdQQSwKKwlOZGlzODAyXzExQXV0aE1vZGVXUEFQU0ssCisJTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZSwKKwlOZGlzODAyXzExQXV0aE1vZGVNYXggICAgICAvKiBOb3QgYSByZWFsIG1vZGUsIGRlZmluZWQgYXMgdXBwZXIgYm91bmQgKi8KIH07CiAKIGVudW0gewotICAgIE5kaXM4MDJfMTFXRVBFbmFibGVkLAotICAgIE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQgPSBOZGlzODAyXzExV0VQRW5hYmxlZCwKLSAgICBOZGlzODAyXzExV0VQRGlzYWJsZWQsCi0gICAgTmRpczgwMl8xMUVuY3J5cHRpb25EaXNhYmxlZCA9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZCwKLSAgICBOZGlzODAyXzExV0VQS2V5QWJzZW50LAotICAgIE5kaXM4MDJfMTFFbmNyeXB0aW9uMUtleUFic2VudCA9IE5kaXM4MDJfMTFXRVBLZXlBYnNlbnQsCi0gICAgTmRpczgwMl8xMVdFUE5vdFN1cHBvcnRlZCwKLSAgICBOZGlzODAyXzExRW5jcnlwdGlvbk5vdFN1cHBvcnRlZCA9IE5kaXM4MDJfMTFXRVBOb3RTdXBwb3J0ZWQsCi0gICAgTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCwKLSAgICBOZGlzODAyXzExRW5jcnlwdGlvbjJLZXlBYnNlbnQsCi0gICAgTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCwKLSAgICBOZGlzODAyXzExRW5jcnlwdGlvbjNLZXlBYnNlbnQKKwlOZGlzODAyXzExV0VQRW5hYmxlZCwKKwlOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkID0gTmRpczgwMl8xMVdFUEVuYWJsZWQsCisJTmRpczgwMl8xMVdFUERpc2FibGVkLAorCU5kaXM4MDJfMTFFbmNyeXB0aW9uRGlzYWJsZWQgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQsCisJTmRpczgwMl8xMVdFUEtleUFic2VudCwKKwlOZGlzODAyXzExRW5jcnlwdGlvbjFLZXlBYnNlbnQgPSBOZGlzODAyXzExV0VQS2V5QWJzZW50LAorCU5kaXM4MDJfMTFXRVBOb3RTdXBwb3J0ZWQsCisJTmRpczgwMl8xMUVuY3J5cHRpb25Ob3RTdXBwb3J0ZWQgPSBOZGlzODAyXzExV0VQTm90U3VwcG9ydGVkLAorCU5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQsCisJTmRpczgwMl8xMUVuY3J5cHRpb24yS2V5QWJzZW50LAorCU5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQsCisJTmRpczgwMl8xMUVuY3J5cHRpb24zS2V5QWJzZW50CiB9OwogCiAjZGVmaW5lIE5ESVNfODAyXzExX0FJX1JFUUZJX0NBUEFCSUxJVElFUyAgICAgIDEKQEAgLTExOSw1MSArMTE5LDUxIEBACiAjZGVmaW5lIE5ESVNfODAyXzExX0FJX1JFU0ZJX0FTU09DSUFUSU9OSUQgICAgIDQKIAogc3RydWN0IE5ESVNfODAyXzExX0FJX1JFUUZJIHsKLSAgICB1MTYgQ2FwYWJpbGl0aWVzOwotICAgIHUxNiBMaXN0ZW5JbnRlcnZhbDsKLSAgICB1bnNpZ25lZCBjaGFyIEN1cnJlbnRBUEFkZHJlc3NbNl07CisJdTE2IENhcGFiaWxpdGllczsKKwl1MTYgTGlzdGVuSW50ZXJ2YWw7CisJdW5zaWduZWQgY2hhciBDdXJyZW50QVBBZGRyZXNzWzZdOwogfTsKIAogc3RydWN0IE5ESVNfODAyXzExX0FJX1JFU0ZJIHsKLSAgICB1MTYgQ2FwYWJpbGl0aWVzOwotICAgIHUxNiBTdGF0dXNDb2RlOwotICAgIHUxNiBBc3NvY2lhdGlvbklkOworCXUxNiBDYXBhYmlsaXRpZXM7CisJdTE2IFN0YXR1c0NvZGU7CisJdTE2IEFzc29jaWF0aW9uSWQ7CiB9OwogCiBzdHJ1Y3QgTkRJU184MDJfMTFfQVNTT0NJQVRJT05fSU5GT1JNQVRJT04gewotICAgIHUzMiAgICAgICAgICAgICAgICAgICBMZW5ndGg7Ci0gICAgdTE2ICAgICAgICAgICAgICAgICAgQXZhaWxhYmxlUmVxdWVzdEZpeGVkSUVzOwotICAgIHN0cnVjdCBORElTXzgwMl8xMV9BSV9SRVFGSSAgICBSZXF1ZXN0Rml4ZWRJRXM7Ci0gICAgdTMyICAgICAgICAgICAgICAgICAgIFJlcXVlc3RJRUxlbmd0aDsKLSAgICB1MzIgICAgICAgICAgICAgICAgICAgT2Zmc2V0UmVxdWVzdElFczsKLSAgICB1MTYgICAgICAgICAgICAgICAgICBBdmFpbGFibGVSZXNwb25zZUZpeGVkSUVzOwotICAgIHN0cnVjdCBORElTXzgwMl8xMV9BSV9SRVNGSSAgICBSZXNwb25zZUZpeGVkSUVzOwotICAgIHUzMiAgICAgICAgICAgICAgICAgICBSZXNwb25zZUlFTGVuZ3RoOwotICAgIHUzMiAgICAgICAgICAgICAgICAgICBPZmZzZXRSZXNwb25zZUlFczsKKwl1MzIgTGVuZ3RoOworCXUxNiBBdmFpbGFibGVSZXF1ZXN0Rml4ZWRJRXM7CisJc3RydWN0IE5ESVNfODAyXzExX0FJX1JFUUZJIFJlcXVlc3RGaXhlZElFczsKKwl1MzIgUmVxdWVzdElFTGVuZ3RoOworCXUzMiBPZmZzZXRSZXF1ZXN0SUVzOworCXUxNiBBdmFpbGFibGVSZXNwb25zZUZpeGVkSUVzOworCXN0cnVjdCBORElTXzgwMl8xMV9BSV9SRVNGSSBSZXNwb25zZUZpeGVkSUVzOworCXUzMiBSZXNwb25zZUlFTGVuZ3RoOworCXUzMiBPZmZzZXRSZXNwb25zZUlFczsKIH07CiAKIC8qIEtleSBtYXBwaW5nIGtleXMgcmVxdWlyZSBhIEJTU0lEKi8KIHN0cnVjdCBORElTXzgwMl8xMV9LRVkgewotICAgIHUzMiAgICAgICAgICAgTGVuZ3RoOyAgICAgICAgICAgICAvKiBMZW5ndGggb2YgdGhpcyBzdHJ1Y3R1cmUgKi8KLSAgICB1MzIgICAgICAgICAgIEtleUluZGV4OwotICAgIHUzMiAgICAgICAgICAgS2V5TGVuZ3RoOyAgICAgICAgICAvKiBsZW5ndGggb2Yga2V5IGluIGJ5dGVzICovCi0gICAgdW5zaWduZWQgY2hhciBCU1NJRFs2XTsKLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgS2V5UlNDOwotICAgIHU4ICAgICAgICAgICBLZXlNYXRlcmlhbFszMl07ICAgICAvKiB2YXJpYWJsZSBsZW5ndGggKi8KKwl1MzIgTGVuZ3RoOwkJCS8qIExlbmd0aCBvZiB0aGlzIHN0cnVjdHVyZSAqLworCXUzMiBLZXlJbmRleDsKKwl1MzIgS2V5TGVuZ3RoOwkJCS8qIGxlbmd0aCBvZiBrZXkgaW4gYnl0ZXMgKi8KKwl1bnNpZ25lZCBjaGFyIEJTU0lEWzZdOworCXVuc2lnbmVkIGxvbmcgbG9uZyBLZXlSU0M7CisJdTggIEtleU1hdGVyaWFsWzMyXTsJCS8qIHZhcmlhYmxlIGxlbmd0aCAqLwogfTsKIAogc3RydWN0IE5ESVNfODAyXzExX1JFTU9WRV9LRVkgewotICAgIHUzMiAgICAgICAgICAgICAgICAgICBMZW5ndGg7ICAgICAgICAvKiBMZW5ndGggb2YgdGhpcyBzdHJ1Y3R1cmUgKi8KLSAgICB1MzIgICAgICAgICAgICAgICAgICAgS2V5SW5kZXg7Ci0gICAgdW5zaWduZWQgY2hhciBCU1NJRFs2XTsKKwl1MzIgTGVuZ3RoOwkJCS8qIExlbmd0aCBvZiB0aGlzIHN0cnVjdHVyZSAqLworCXUzMiBLZXlJbmRleDsKKwl1bnNpZ25lZCBjaGFyIEJTU0lEWzZdOwogfTsKIAogc3RydWN0IE5ESVNfODAyXzExX1dFUCB7Ci0gICAgdTMyICAgICBMZW5ndGg7ICAgICAgICAvKiBMZW5ndGggb2YgdGhpcyBzdHJ1Y3R1cmUgKi8KLSAgICB1MzIgICAgIEtleUluZGV4OyAgICAgIC8qIDAgaXMgdGhlIHBlci1jbGllbnQga2V5LAotCQkJICAgICAgKiAxLU4gYXJlIHRoZSBnbG9iYWwga2V5cyAqLwotICAgIHUzMiAgICAgS2V5TGVuZ3RoOyAgICAgLyogbGVuZ3RoIG9mIGtleSBpbiBieXRlcyAqLwotICAgIHU4ICAgICBLZXlNYXRlcmlhbFsxNl07LyogdmFyaWFibGUgbGVuZ3RoIGRlcGVuZGluZyBvbiBhYm92ZSBmaWVsZCAqLworCXUzMiBMZW5ndGg7CQkgIC8qIExlbmd0aCBvZiB0aGlzIHN0cnVjdHVyZSAqLworCXUzMiBLZXlJbmRleDsJCSAgLyogMCBpcyB0aGUgcGVyLWNsaWVudCBrZXksCisJCQkJICAgKiAxLU4gYXJlIHRoZSBnbG9iYWwga2V5cyAqLworCXUzMiBLZXlMZW5ndGg7CQkgIC8qIGxlbmd0aCBvZiBrZXkgaW4gYnl0ZXMgKi8KKwl1OCAgS2V5TWF0ZXJpYWxbMTZdOyAgICAgIC8qIHZhcmlhYmxlIGxlbmd0aCBkZXBlbmRpbmcgb24gYWJvdmUgZmllbGQgKi8KIH07CiAKIC8qIG1hc2sgZm9yIGF1dGhlbnRpY2F0aW9uL2ludGVncml0eSBmaWVsZHMgKi8KQEAgLTE5MiwxNSArMTkyLDE1IEBACiB9OwogCiBlbnVtIFZSVExfQ0FSUklFUl9TRU5TRSB7Ci0gICAgRElTQUJMRV9WQ1MsCi0gICAgRU5BQkxFX1ZDUywKLSAgICBBVVRPX1ZDUworCURJU0FCTEVfVkNTLAorCUVOQUJMRV9WQ1MsCisJQVVUT19WQ1MKIH07CiAKIGVudW0gVkNTX1RZUEUgewotICAgIE5PTkVfVkNTLAotICAgIFJUU19DVFMsCi0gICAgQ1RTX1RPX1NFTEYKKwlOT05FX1ZDUywKKwlSVFNfQ1RTLAorCUNUU19UT19TRUxGCiB9OwogCiAjZGVmaW5lIFBXUl9DQU0gMApAQCAtMjExLDkgKzIxMSw5IEBACiAKIGVudW0gVUFQU0RfTUFYX1NQIHsKIAlOT19MSU1JVCwKLSAgICAgICBUV09fTVNEVSwKLSAgICAgICBGT1VSX01TRFUsCi0gICAgICAgU0lYX01TRFUKKwlUV09fTVNEVSwKKwlGT1VSX01TRFUsCisJU0lYX01TRFUKIH07CiAKICNkZWZpbmUgTlVNX1BSRV9BVVRIX0tFWSAxNgpAQCAtMjIzLDE4ICsyMjMsMTggQEAKICAqCVdQQTIKICAqLwogc3RydWN0IHdsYW5fYnNzaWRfZXggewotICB1MzIgIExlbmd0aDsKLSAgdW5zaWduZWQgY2hhciAgTWFjQWRkcmVzc1s2XTsKLSAgdTggIFJlc2VydmVkWzJdOwotICBzdHJ1Y3QgbmRpc184MDJfMTFfc3NpZCAgU3NpZDsKLSAgdTMyICBQcml2YWN5OwotICBzMzIgIFJzc2k7Ci0gIGVudW0gTkRJU184MDJfMTFfTkVUV09SS19UWVBFICBOZXR3b3JrVHlwZUluVXNlOwotICBzdHJ1Y3QgTkRJU184MDJfMTFfQ09ORklHVVJBVElPTiAgQ29uZmlndXJhdGlvbjsKLSAgZW51bSBORElTXzgwMl8xMV9ORVRXT1JLX0lORlJBU1RSVUNUVVJFICBJbmZyYXN0cnVjdHVyZU1vZGU7Ci0gIE5ESVNfODAyXzExX1JBVEVTX0VYICBTdXBwb3J0ZWRSYXRlczsKLSAgdTMyICBJRUxlbmd0aDsKLSAgdTggIElFc1tNQVhfSUVfU1pdOwkvKiAodGltZXN0YW1wLCBiZWFjb24gaW50ZXJ2YWwsIGFuZCBjYXBhYmlsaXR5CisJdTMyIExlbmd0aDsKKwl1bnNpZ25lZCBjaGFyICBNYWNBZGRyZXNzWzZdOworCXU4ICBSZXNlcnZlZFsyXTsKKwlzdHJ1Y3QgbmRpc184MDJfMTFfc3NpZCAgU3NpZDsKKwl1MzIgUHJpdmFjeTsKKwlzMzIgUnNzaTsKKwllbnVtIE5ESVNfODAyXzExX05FVFdPUktfVFlQRSAgTmV0d29ya1R5cGVJblVzZTsKKwlzdHJ1Y3QgTkRJU184MDJfMTFfQ09ORklHVVJBVElPTiAgQ29uZmlndXJhdGlvbjsKKwllbnVtIE5ESVNfODAyXzExX05FVFdPUktfSU5GUkFTVFJVQ1RVUkUgIEluZnJhc3RydWN0dXJlTW9kZTsKKwlORElTXzgwMl8xMV9SQVRFU19FWCAgU3VwcG9ydGVkUmF0ZXM7CisJdTMyIElFTGVuZ3RoOworCXU4ICBJRXNbTUFYX0lFX1NaXTsJLyogKHRpbWVzdGFtcCwgYmVhY29uIGludGVydmFsLCBhbmQgY2FwYWJpbGl0eQogCQkJCSAqIGluZm9ybWF0aW9uKSAqLwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9tcy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9tcy5jCmluZGV4IGQ4OTc5NWMuLjJlODI1ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvbXMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL21zLmMKQEAgLTg2NCw3ICs4NjQsNyBAQAogCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwogCX0KIAotCWJ1ZiA9ICh1OCAqKXJ0c3hfYWxsb2NfZG1hX2J1ZihjaGlwLCA2NCAqIDUxMiwgR0ZQX0tFUk5FTCk7CisJYnVmID0ga21hbGxvYyg2NCAqIDUxMiwgR0ZQX0tFUk5FTCk7CiAJaWYgKGJ1ZiA9PSBOVUxMKSB7CiAJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRVJST1IpOwogCX0KQEAgLTg3NiwxMSArODc2LDExIEBACiAJCX0KIAkJcmV0dmFsID0gcnRzeF9yZWFkX3JlZ2lzdGVyKGNoaXAsIE1TX1RSQU5TX0NGRywgJnZhbCk7CiAJCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCXJ0c3hfZnJlZV9kbWFfYnVmKGNoaXAsIGJ1Zik7CisJCQlrZnJlZShidWYpOwogCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKIAkJfQogCQlpZiAoISh2YWwgJiBNU19JTlRfQlJFUSkpIHsKLQkJCXJ0c3hfZnJlZV9kbWFfYnVmKGNoaXAsIGJ1Zik7CisJCQlrZnJlZShidWYpOwogCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKIAkJfQogCQlyZXR2YWwgPSBtc190cmFuc2Zlcl9kYXRhKGNoaXAsIE1TX1RNX0FVVE9fUkVBRCwgUFJPX1JFQURfTE9OR19EQVRBLApAQCAtODkyLDcgKzg5Miw3IEBACiAJCX0KIAl9CiAJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQlydHN4X2ZyZWVfZG1hX2J1ZihjaGlwLCBidWYpOworCQlrZnJlZShidWYpOwogCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwogCX0KIApAQCAtOTAwLDcgKzkwMCw3IEBACiAJZG8gewogCQlyZXR2YWwgPSBydHN4X3JlYWRfcmVnaXN0ZXIoY2hpcCwgTVNfVFJBTlNfQ0ZHLCAmdmFsKTsKIAkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJcnRzeF9mcmVlX2RtYV9idWYoY2hpcCwgYnVmKTsKKwkJCWtmcmVlKGJ1Zik7CiAJCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwogCQl9CiAKQEAgLTkwOSw3ICs5MDksNyBAQAogCiAJCXJldHZhbCA9IG1zX3RyYW5zZmVyX3RwYyhjaGlwLCBNU19UTV9OT1JNQUxfUkVBRCwgUFJPX1JFQURfTE9OR19EQVRBLCAwLCBXQUlUX0lOVCk7CiAJCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCXJ0c3hfZnJlZV9kbWFfYnVmKGNoaXAsIGJ1Zik7CisJCQlrZnJlZShidWYpOwogCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKIAkJfQogCkBAIC05MTcsMTggKzkxNywxOCBAQAogCX0gd2hpbGUgKGkgPCAxMDI0KTsKIAogCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJcnRzeF9mcmVlX2RtYV9idWYoY2hpcCwgYnVmKTsKKwkJa2ZyZWUoYnVmKTsKIAkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKIAl9CiAKIAlpZiAoKGJ1ZlswXSAhPSAweGE1KSAmJiAoYnVmWzFdICE9IDB4YzMpKSB7CiAJCS8qIFNpZ25hdHVyZSBjb2RlIGlzIHdyb25nICovCi0JCXJ0c3hfZnJlZV9kbWFfYnVmKGNoaXAsIGJ1Zik7CisJCWtmcmVlKGJ1Zik7CiAJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7CiAJfQogCiAJaWYgKChidWZbNF0gPCAxKSB8fCAoYnVmWzRdID4gMTIpKSB7Ci0JCXJ0c3hfZnJlZV9kbWFfYnVmKGNoaXAsIGJ1Zik7CisJCWtmcmVlKGJ1Zik7CiAJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7CiAJfQogCkBAIC05NTAsMTUgKzk1MCwxNSBAQAogCQkJUlRTWF9ERUJVR1AoInN5c19pbmZvX2FkZHIgPSAweCV4LCBzeXNfaW5mb19zaXplID0gMHgleFxuIiwKIAkJCQkJc3lzX2luZm9fYWRkciwgc3lzX2luZm9fc2l6ZSk7CiAJCQlpZiAoc3lzX2luZm9fc2l6ZSAhPSA5NikgIHsKLQkJCQlydHN4X2ZyZWVfZG1hX2J1ZihjaGlwLCBidWYpOworCQkJCWtmcmVlKGJ1Zik7CiAJCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKIAkJCX0KIAkJCWlmIChzeXNfaW5mb19hZGRyIDwgMHgxQTApIHsKLQkJCQlydHN4X2ZyZWVfZG1hX2J1ZihjaGlwLCBidWYpOworCQkJCWtmcmVlKGJ1Zik7CiAJCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKIAkJCX0KIAkJCWlmICgoc3lzX2luZm9fc2l6ZSArIHN5c19pbmZvX2FkZHIpID4gMHg4MDAwKSB7Ci0JCQkJcnRzeF9mcmVlX2RtYV9idWYoY2hpcCwgYnVmKTsKKwkJCQlrZnJlZShidWYpOwogCQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7CiAJCQl9CiAKQEAgLTk4NCwxNSArOTg0LDE1IEBACiAJCQlSVFNYX0RFQlVHUCgibW9kZWxfbmFtZV9hZGRyID0gMHgleCwgbW9kZWxfbmFtZV9zaXplID0gMHgleFxuIiwKIAkJCQkJbW9kZWxfbmFtZV9hZGRyLCBtb2RlbF9uYW1lX3NpemUpOwogCQkJaWYgKG1vZGVsX25hbWVfc2l6ZSAhPSA0OCkgIHsKLQkJCQlydHN4X2ZyZWVfZG1hX2J1ZihjaGlwLCBidWYpOworCQkJCWtmcmVlKGJ1Zik7CiAJCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKIAkJCX0KIAkJCWlmIChtb2RlbF9uYW1lX2FkZHIgPCAweDFBMCkgewotCQkJCXJ0c3hfZnJlZV9kbWFfYnVmKGNoaXAsIGJ1Zik7CisJCQkJa2ZyZWUoYnVmKTsKIAkJCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwogCQkJfQogCQkJaWYgKChtb2RlbF9uYW1lX3NpemUgKyBtb2RlbF9uYW1lX2FkZHIpID4gMHg4MDAwKSB7Ci0JCQkJcnRzeF9mcmVlX2RtYV9idWYoY2hpcCwgYnVmKTsKKwkJCQlrZnJlZShidWYpOwogCQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7CiAJCQl9CiAKQEAgLTEwMDUsNyArMTAwNSw3IEBACiAJfQogCiAJaWYgKGkgPT0gYnVmWzRdKSB7Ci0JCXJ0c3hfZnJlZV9kbWFfYnVmKGNoaXAsIGJ1Zik7CisJCWtmcmVlKGJ1Zik7CiAJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7CiAJfQogCkBAIC0xMDQyLDcgKzEwNDIsNyBAQAogCW1lbWNweShtc19jYXJkLT5yYXdfbW9kZWxfbmFtZSwgYnVmICsgbW9kZWxfbmFtZV9hZGRyLCA0OCk7CiAjZW5kaWYKIAotCXJ0c3hfZnJlZV9kbWFfYnVmKGNoaXAsIGJ1Zik7CisJa2ZyZWUoYnVmKTsKIAogI2lmZGVmIFNVUFBPUlRfTVNYQwogCWlmIChDSEtfTVNYQyhtc19jYXJkKSkgewpAQCAtMzc4NCw3ICszNzg0LDcgQEAKIAkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKIAl9CiAKLQlidWYgPSAodTggKilydHN4X2FsbG9jX2RtYV9idWYoY2hpcCwgMTU0MCwgR0ZQX0tFUk5FTCk7CisJYnVmID0ga21hbGxvYygxNTQwLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikgewogCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0VSUk9SKTsKIAl9CkBAIC0zODE3LDkgKzM4MTcsNyBAQAogCXJ0c3hfc3Rvcl9zZXRfeGZlcl9idWYoYnVmLCBidWZmbGVuLCBzcmIpOwogCiBHZXRFS0JGaW5pc2g6Ci0JaWYgKGJ1ZikgewotCQlydHN4X2ZyZWVfZG1hX2J1ZihjaGlwLCBidWYpOwotCX0KKwlrZnJlZShidWYpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTQwMjIsNyArNDAyMCw3IEBACiAJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7CiAJfQogCi0JYnVmID0gKHU4ICopcnRzeF9hbGxvY19kbWFfYnVmKGNoaXAsIDEwMjgsIEdGUF9LRVJORUwpOworCWJ1ZiA9IGttYWxsb2MoMTAyOCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYpIHsKIAkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19FUlJPUik7CiAJfQpAQCAtNDA1NSw5ICs0MDUzLDcgQEAKIAlydHN4X3N0b3Jfc2V0X3hmZXJfYnVmKGJ1ZiwgYnVmZmxlbiwgc3JiKTsKIAogR2V0SUNWRmluaXNoOgotCWlmIChidWYpIHsKLQkJcnRzeF9mcmVlX2RtYV9idWYoY2hpcCwgYnVmKTsKLQl9CisJa2ZyZWUoYnVmKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC00MDgxLDcgKzQwNzcsNyBAQAogCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwogCX0KIAotCWJ1ZiA9ICh1OCAqKXJ0c3hfYWxsb2NfZG1hX2J1ZihjaGlwLCAxMDI4LCBHRlBfS0VSTkVMKTsKKwlidWYgPSBrbWFsbG9jKDEwMjgsIEdGUF9LRVJORUwpOwogCWlmICghYnVmKSB7CiAJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRVJST1IpOwogCX0KQEAgLTQxNTYsOSArNDE1Miw3IEBACiAjZW5kaWYKIAogU2V0SUNWRmluaXNoOgotCWlmIChidWYpIHsKLQkJcnRzeF9mcmVlX2RtYV9idWYoY2hpcCwgYnVmKTsKLQl9CisJa2ZyZWUoYnVmKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3J0c3guYyBiL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvcnRzeC5jCmluZGV4IDAyNTI1ZDUuLjVmZjU5ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvcnRzeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvcnRzeC5jCkBAIC01OTQsNyArNTk0LDkgQEAKIAl3YWl0X3RpbWVvdXQoKGRlbGF5X3VzZSArIDUpICogMTAwMCk7CiAKIAlmb3IgKDs7KSB7Ci0JCXdhaXRfdGltZW91dChQT0xMSU5HX0lOVEVSVkFMKTsKKworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlzY2hlZHVsZV90aW1lb3V0KFBPTExJTkdfSU5URVJWQUwpOwogCiAJCS8qIGxvY2sgdGhlIGRldmljZSBwb2ludGVycyAqLwogCQltdXRleF9sb2NrKCYoZGV2LT5kZXZfbXV0ZXgpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvcnRzeC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9ydHN4LmgKaW5kZXggNGQ1ZGRmNi4uNmFmYjYzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9ydHN4LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9ydHN4LmgKQEAgLTk4LDkgKzk4LDYgQEAKIAogI2RlZmluZSBTQ1NJX0xVTihzcmIpCQkoKHNyYiktPmRldmljZS0+bHVuKQogCi0jZGVmaW5lIHJ0c3hfYWxsb2NfZG1hX2J1ZihjaGlwLCBzaXplLCBmbGFnKQlrbWFsbG9jKChzaXplKSwgKGZsYWcpKQotI2RlZmluZSBydHN4X2ZyZWVfZG1hX2J1ZihjaGlwLCBwdHIpCQlrZnJlZSgocHRyKSkKLQogdHlwZWRlZiB1bnNpZ25lZCBsb25nIERFTEFZX1BBUkFfVDsKIAogc3RydWN0IHJ0c3hfY2hpcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3Ivc2QuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3Ivc2QuYwppbmRleCBiMTI3N2E2Li5iZGRiMDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3NkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9zZC5jCkBAIC0yMjI3LDYgKzIyMjcsNyBAQAogCXJldHZhbCA9IHNkX3JlYWRfZGF0YShjaGlwLCBTRF9UTV9OT1JNQUxfUkVBRCwgY21kLAogCQk1LCA1MTIsIDEsIGJ1c193aWR0aCwgTlVMTCwgMCwgMTAwKTsKIAlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7CisJCXJ0c3hfY2xlYXJfc2RfZXJyb3IoY2hpcCk7CiAJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3NwaS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9zcGkuYwppbmRleCA4YTg2ODliLi5jODAzYmE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3NwaS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3Ivc3BpLmMKQEAgLTUwNSw3ICs1MDUsNyBAQAogCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwogCX0KIAotCWJ1ZiA9ICh1OCAqKXJ0c3hfYWxsb2NfZG1hX2J1ZihjaGlwLCBTRl9QQUdFX0xFTiwgR0ZQX0tFUk5FTCk7CisJYnVmID0ga21hbGxvYyhTRl9QQUdFX0xFTiwgR0ZQX0tFUk5FTCk7CiAJaWYgKGJ1ZiA9PSBOVUxMKQogCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0VSUk9SKTsKIApAQCAtNTQzLDcgKzU0Myw3IEBACiAKIAkJcmV0dmFsID0gcnRzeF90cmFuc2Zlcl9kYXRhKGNoaXAsIDAsIGJ1ZiwgcGFnZWxlbiwgMCwgRE1BX0ZST01fREVWSUNFLCAxMDAwMCk7CiAJCWlmIChyZXR2YWwgPCAwKSB7Ci0JCQlydHN4X2ZyZWVfZG1hX2J1ZihjaGlwLCBidWYpOworCQkJa2ZyZWUoYnVmKTsKIAkJCXJ0c3hfY2xlYXJfc3BpX2Vycm9yKGNoaXApOwogCQkJc3BpX3NldF9lcnJfY29kZShjaGlwLCBTUElfSFdfRVJSKTsKIAkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7CkBAIC01NTYsNyArNTU2LDcgQEAKIAl9CiAKIAlzY3NpX3NldF9yZXNpZChzcmIsIDApOwotCXJ0c3hfZnJlZV9kbWFfYnVmKGNoaXAsIGJ1Zik7CisJa2ZyZWUoYnVmKTsKIAogCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKIH0KQEAgLTU4NCwxNCArNTg0LDE0IEBACiAJfQogCiAJaWYgKHByb2dyYW1fbW9kZSA9PSBCWVRFX1BST0dSQU0pIHsKLQkJYnVmID0gcnRzeF9hbGxvY19kbWFfYnVmKGNoaXAsIDQsIEdGUF9LRVJORUwpOworCQlidWYgPSBrbWFsbG9jKDQsIEdGUF9LRVJORUwpOwogCQlpZiAoIWJ1ZikKIAkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRVJST1IpOwogCiAJCXdoaWxlIChsZW4pIHsKIAkJCXJldHZhbCA9IHNmX2VuYWJsZV93cml0ZShjaGlwLCBTUElfV1JFTik7CiAJCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQkJcnRzeF9mcmVlX2RtYV9idWYoY2hpcCwgYnVmKTsKKwkJCQlrZnJlZShidWYpOwogCQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7CiAJCQl9CiAKQEAgLTYwNSw3ICs2MDUsNyBAQAogCiAJCQlyZXR2YWwgPSBydHN4X3NlbmRfY21kKGNoaXAsIDAsIDEwMCk7CiAJCQlpZiAocmV0dmFsIDwgMCkgewotCQkJCXJ0c3hfZnJlZV9kbWFfYnVmKGNoaXAsIGJ1Zik7CisJCQkJa2ZyZWUoYnVmKTsKIAkJCQlydHN4X2NsZWFyX3NwaV9lcnJvcihjaGlwKTsKIAkJCQlzcGlfc2V0X2Vycl9jb2RlKGNoaXAsIFNQSV9IV19FUlIpOwogCQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7CkBAIC02MTMsNyArNjEzLDcgQEAKIAogCQkJcmV0dmFsID0gc2ZfcG9sbGluZ19zdGF0dXMoY2hpcCwgMTAwKTsKIAkJCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCQlydHN4X2ZyZWVfZG1hX2J1ZihjaGlwLCBidWYpOworCQkJCWtmcmVlKGJ1Zik7CiAJCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKIAkJCX0KIApAQCAtNjIxLDcgKzYyMSw3IEBACiAJCQlsZW4tLTsKIAkJfQogCi0JCXJ0c3hfZnJlZV9kbWFfYnVmKGNoaXAsIGJ1Zik7CisJCWtmcmVlKGJ1Zik7CiAKIAl9IGVsc2UgaWYgKHByb2dyYW1fbW9kZSA9PSBBQUlfUFJPR1JBTSkgewogCQlpbnQgZmlyc3RfYnl0ZSA9IDE7CkBAIC02MzAsNyArNjMwLDcgQEAKIAkJaWYgKHJldHZhbCAhPSBTVEFUVVNfU1VDQ0VTUykKIAkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7CiAKLQkJYnVmID0gcnRzeF9hbGxvY19kbWFfYnVmKGNoaXAsIDQsIEdGUF9LRVJORUwpOworCQlidWYgPSBrbWFsbG9jKDQsIEdGUF9LRVJORUwpOwogCQlpZiAoIWJ1ZikKIAkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRVJST1IpOwogCkBAIC02NTAsNyArNjUwLDcgQEAKIAogCQkJcmV0dmFsID0gcnRzeF9zZW5kX2NtZChjaGlwLCAwLCAxMDApOwogCQkJaWYgKHJldHZhbCA8IDApIHsKLQkJCQlydHN4X2ZyZWVfZG1hX2J1ZihjaGlwLCBidWYpOworCQkJCWtmcmVlKGJ1Zik7CiAJCQkJcnRzeF9jbGVhcl9zcGlfZXJyb3IoY2hpcCk7CiAJCQkJc3BpX3NldF9lcnJfY29kZShjaGlwLCBTUElfSFdfRVJSKTsKIAkJCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwpAQCAtNjU4LDE0ICs2NTgsMTQgQEAKIAogCQkJcmV0dmFsID0gc2ZfcG9sbGluZ19zdGF0dXMoY2hpcCwgMTAwKTsKIAkJCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCQlydHN4X2ZyZWVfZG1hX2J1ZihjaGlwLCBidWYpOworCQkJCWtmcmVlKGJ1Zik7CiAJCQkJVFJBQ0VfUkVUKGNoaXAsIFNUQVRVU19GQUlMKTsKIAkJCX0KIAogCQkJbGVuLS07CiAJCX0KIAotCQlydHN4X2ZyZWVfZG1hX2J1ZihjaGlwLCBidWYpOworCQlrZnJlZShidWYpOwogCiAJCXJldHZhbCA9IHNmX2Rpc2FibGVfd3JpdGUoY2hpcCwgU1BJX1dSREkpOwogCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKQpAQCAtNjc1LDcgKzY3NSw3IEBACiAJCWlmIChyZXR2YWwgIT0gU1RBVFVTX1NVQ0NFU1MpCiAJCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwogCX0gZWxzZSBpZiAocHJvZ3JhbV9tb2RlID09IFBBR0VfUFJPR1JBTSkgewotCQlidWYgPSBydHN4X2FsbG9jX2RtYV9idWYoY2hpcCwgU0ZfUEFHRV9MRU4sIEdGUF9LRVJORUwpOworCQlidWYgPSBrbWFsbG9jKFNGX1BBR0VfTEVOLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFidWYpCiAJCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX05PTUVNKTsKIApAQCAtNjg3LDcgKzY4Nyw3IEBACiAKIAkJCXJldHZhbCA9IHNmX2VuYWJsZV93cml0ZShjaGlwLCBTUElfV1JFTik7CiAJCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQkJcnRzeF9mcmVlX2RtYV9idWYoY2hpcCwgYnVmKTsKKwkJCQlrZnJlZShidWYpOwogCQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7CiAJCQl9CiAKQEAgLTcwMiw3ICs3MDIsNyBAQAogCiAJCQlyZXR2YWwgPSBydHN4X3RyYW5zZmVyX2RhdGEoY2hpcCwgMCwgYnVmLCBwYWdlbGVuLCAwLCBETUFfVE9fREVWSUNFLCAxMDApOwogCQkJaWYgKHJldHZhbCA8IDApIHsKLQkJCQlydHN4X2ZyZWVfZG1hX2J1ZihjaGlwLCBidWYpOworCQkJCWtmcmVlKGJ1Zik7CiAJCQkJcnRzeF9jbGVhcl9zcGlfZXJyb3IoY2hpcCk7CiAJCQkJc3BpX3NldF9lcnJfY29kZShjaGlwLCBTUElfSFdfRVJSKTsKIAkJCQlUUkFDRV9SRVQoY2hpcCwgU1RBVFVTX0ZBSUwpOwpAQCAtNzEwLDcgKzcxMCw3IEBACiAKIAkJCXJldHZhbCA9IHNmX3BvbGxpbmdfc3RhdHVzKGNoaXAsIDEwMCk7CiAJCQlpZiAocmV0dmFsICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQkJcnRzeF9mcmVlX2RtYV9idWYoY2hpcCwgYnVmKTsKKwkJCQlrZnJlZShidWYpOwogCQkJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7CiAJCQl9CiAKQEAgLTcxOCw3ICs3MTgsNyBAQAogCQkJbGVuIC09IHBhZ2VsZW47CiAJCX0KIAotCQlydHN4X2ZyZWVfZG1hX2J1ZihjaGlwLCBidWYpOworCQlrZnJlZShidWYpOwogCX0gZWxzZSB7CiAJCXNwaV9zZXRfZXJyX2NvZGUoY2hpcCwgU1BJX0lOVkFMSURfQ09NTUFORCk7CiAJCVRSQUNFX1JFVChjaGlwLCBTVEFUVVNfRkFJTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3hkLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3hkLmMKaW5kZXggOWYzYWRkMS4uOWJiYTViMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci94ZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IveGQuYwpAQCAtMzgwLDcgKzM4MCw3IEBACiAKIAkJUlRTWF9ERUJVR1AoInhEIEVDQyBlcnJvciwgZHVtbXkgd3JpdGUhXG4iKTsKIAotCQlidWYgPSAodTggKilydHN4X2FsbG9jX2RtYV9idWYoY2hpcCwgNTEyLCBHRlBfS0VSTkVMKTsKKwkJYnVmID0ga21hbGxvYyg1MTIsIEdGUF9LRVJORUwpOwogCQlpZiAoIWJ1ZikKIAkJCXJldHVybjsKIApAQCAtNDI3LDcgKzQyNyw3IEBACiAJCQlydHN4X3dyaXRlX3JlZ2lzdGVyKGNoaXAsIENBUkRfU1RPUCwgU0RfU1RPUCB8IFNEX0NMUl9FUlIsIFNEX1NUT1AgfCBTRF9DTFJfRVJSKTsKIAkJfQogCi0JCXJ0c3hfZnJlZV9kbWFfYnVmKGNoaXAsIGJ1Zik7CisJCWtmcmVlKGJ1Zik7CiAKIAkJaWYgKGNoaXAtPmFzaWNfY29kZSkgewogCQkJcnRzeF93cml0ZV9yZWdpc3RlcihjaGlwLCBDQVJEX1BVTExfQ1RMMiwgMHhGRiwgMHg1NSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2JlLTJ0M2UzL2RjLmMgYi9kcml2ZXJzL3N0YWdpbmcvc2JlLTJ0M2UzL2RjLmMKaW5kZXggMTI2YTk3Mi4uOWRjNGVjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NiZS0ydDNlMy9kYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zYmUtMnQzZTMvZGMuYwpAQCAtMzQxLDEwICszNDEsNiBAQAogCQlzYy0+ZXRoZXIudHhfcmluZyA9IGt6YWxsb2MoU0JFXzJUM0UzX1RYX0RFU0NfUklOR19TSVpFICoKIAkJCQkJICAgIHNpemVvZih0M2UzX3R4X2Rlc2NfdCksIEdGUF9LRVJORUwpOwogCWlmIChzYy0+ZXRoZXIudHhfcmluZyA9PSBOVUxMKSB7Ci0jaWZkZWYgVDNFM19VU0VfQ09OVElHTUFMTE9DCi0JCXQzZTNfY29udGlnbWVtb3J5X3NpemUgPSBTQkVfMlQzRTNfUlhfREVTQ19SSU5HX1NJWkUgKgotCQkJc2l6ZW9mKHQzZTNfcnhfZGVzY190KTsKLSNlbmRpZgogCQlrZnJlZShzYy0+ZXRoZXIucnhfcmluZyk7CiAJCXNjLT5ldGhlci5yeF9yaW5nID0gTlVMTDsKIAkJZGV2X2Vycigmc2MtPnBkZXYtPmRldiwgIlNCRSAyVDNFMzogbm8gYnVmZmVyIHNwYWNlIGZvciBSWCByaW5nXG4iKTsKQEAgLTM2NiwxNiArMzYyLDggQEAKIAkJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2MtPmV0aGVyLnJ4X2RhdGFbal0pOwogCQkJCQlzYy0+ZXRoZXIucnhfZGF0YVtqXSA9IE5VTEw7CiAJCQkJfQotI2lmZGVmIFQzRTNfVVNFX0NPTlRJR01BTExPQwotCQkJCXQzZTNfY29udGlnbWVtb3J5X3NpemUgPSBTQkVfMlQzRTNfUlhfREVTQ19SSU5HX1NJWkUgKgotCQkJCQlzaXplb2YodDNlM19yeF9kZXNjX3QpOwotI2VuZGlmCiAJCQkJa2ZyZWUoc2MtPmV0aGVyLnJ4X3JpbmcpOwogCQkJCXNjLT5ldGhlci5yeF9yaW5nID0gTlVMTDsKLSNpZmRlZiBUM0UzX1VTRV9DT05USUdNQUxMT0MKLQkJCQl0M2UzX2NvbnRpZ21lbW9yeV9zaXplID0gU0JFXzJUM0UzX1RYX0RFU0NfUklOR19TSVpFICoKLQkJCQkJc2l6ZW9mKHQzZTNfdHhfZGVzY190KTsKLSNlbmRpZgogCQkJCWtmcmVlKHNjLT5ldGhlci50eF9yaW5nKTsKIAkJCQlzYy0+ZXRoZXIudHhfcmluZyA9IE5VTEw7CiAJCQkJZGV2X2Vycigmc2MtPnBkZXYtPmRldiwgIlNCRSAyVDNFMzogdG9rZW5fYWxsb2MgZXJyOiIKQEAgLTQ1NCwyMyArNDQyLDEwIEBACiAJCX0KIAl9CiAKLQlpZiAoc2MtPmV0aGVyLnJ4X3JpbmcgIT0gTlVMTCkgewotI2lmZGVmIFQzRTNfVVNFX0NPTlRJR01BTExPQwotCQl0M2UzX2NvbnRpZ21lbW9yeV9zaXplID0gU0JFXzJUM0UzX1JYX0RFU0NfUklOR19TSVpFICoKLQkJCXNpemVvZih0M2UzX3J4X2Rlc2NfdCk7Ci0jZW5kaWYKLQkJa2ZyZWUoc2MtPmV0aGVyLnJ4X3JpbmcpOwotCQlzYy0+ZXRoZXIucnhfcmluZyA9IE5VTEw7Ci0JfQotCi0JaWYgKHNjLT5ldGhlci50eF9yaW5nICE9IE5VTEwpIHsKLSNpZmRlZiBUM0UzX1VTRV9DT05USUdNQUxMT0MKLQkJdDNlM19jb250aWdtZW1vcnlfc2l6ZSA9IFNCRV8yVDNFM19UWF9ERVNDX1JJTkdfU0laRSAqCi0JCQlzaXplb2YodDNlM190eF9kZXNjX3QpOwotI2VuZGlmCi0JCWtmcmVlKHNjLT5ldGhlci50eF9yaW5nKTsKLQkJc2MtPmV0aGVyLnR4X3JpbmcgPSBOVUxMOwotCX0KKwlrZnJlZShzYy0+ZXRoZXIucnhfcmluZyk7CisJc2MtPmV0aGVyLnJ4X3JpbmcgPSBOVUxMOworCWtmcmVlKHNjLT5ldGhlci50eF9yaW5nKTsKKwlzYy0+ZXRoZXIudHhfcmluZyA9IE5VTEw7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NlcC9zZXBfZHJpdmVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvc2VwL3NlcF9kcml2ZXIuYwppbmRleCA4OTBlZWRlLi41MjM0MmMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2VwL3NlcF9kcml2ZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc2VwL3NlcF9kcml2ZXIuYwpAQCAtMTA5NSwxMyArMTA5NSwxNiBAQAogCWlmIChudW1fcGFnZXMgPiAxKSB7CiAJCWxsaV9hcnJheVtudW1fcGFnZXMgLSAxXS5ibG9ja19zaXplID0KIAkJCShhcHBfdmlydF9hZGRyICsgZGF0YV9zaXplKSAmICh+UEFHRV9NQVNLKTsKKwkJaWYgKGxsaV9hcnJheVtudW1fcGFnZXMgLSAxXS5ibG9ja19zaXplID09IDApCisJCQlsbGlfYXJyYXlbbnVtX3BhZ2VzIC0gMV0uYmxvY2tfc2l6ZSA9IFBBR0VfU0laRTsKIAogCQlkZXZfd2Fybigmc2VwLT5wZGV2LT5kZXYsCi0JCQkibGxpX2FycmF5WyV4XS5idXNfYWRkcmVzcyBpcyAlMDhseCwgbGxpX2FycmF5WyV4XS5ibG9ja19zaXplIGlzICV4XG4iLAorCQkJImxsaV9hcnJheVsleF0uYnVzX2FkZHJlc3MgaXMgIgorCQkJIiUwOGx4LCBsbGlfYXJyYXlbJXhdLmJsb2NrX3NpemUgaXMgJXhcbiIsCiAJCQludW1fcGFnZXMgLSAxLAotCQkJKHVuc2lnbmVkIGxvbmcpbGxpX2FycmF5W2NvdW50XS5idXNfYWRkcmVzcywKKwkJCSh1bnNpZ25lZCBsb25nKWxsaV9hcnJheVtudW1fcGFnZXMgLTFdLmJ1c19hZGRyZXNzLAogCQkJbnVtX3BhZ2VzIC0gMSwKLQkJCWxsaV9hcnJheVtjb3VudF0uYmxvY2tfc2l6ZSk7CisJCQlsbGlfYXJyYXlbbnVtX3BhZ2VzIC0xXS5ibG9ja19zaXplKTsKIAl9CiAKIAkvKiBTZXQgb3V0cHV0IHBhcmFtcyBhY2NvcmRpbmcgdG8gdGhlIGluX291dCBmbGFnICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9UT0RPCmluZGV4IGE2NmQ5ZTQuLjczMDQwMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9UT0RPCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9UT0RPCkBAIC0yLDkgKzIsNyBAQAogLSBEdWFsIGhlYWQgc3VwcG9ydAogLSAyRCBhY2NlbGVyYXRpb24gc3VwcG9ydAogLSB1c2Uga2VybmVsIGNvZGluZyBzdHlsZQotLSBjaGVja3BhdGNoLnBsIGNsZWFuCiAtIHJlZmluZSB0aGUgY29kZSBhbmQgcmVtb3ZlIHVudXNlZCBjb2RlCi0tIHVzZSBrZXJuZWwgZnJhbWVidWZmZXIgbW9kZSBzZXR0aW5nIGluc3RlYWQgb2YgaGFyZCBjb2RlCiAtIG1vdmUgaXQgdG8gZHJpdmVycy92aWRlby9zbTd4eC8gb3IgbWFrZSBpdCBiZSBkcml2ZXJzL3ZpZGVvL3NtN3h4ZmIuYwogCiBQbGVhc2Ugc2VuZCBhbnkgcGF0Y2hlcyB0byBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPiBhbmQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuYyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuYwppbmRleCAzZTIyMzBmLi5hMTY0ZmM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGNmYi5jCkBAIC04LDIxICs4LDI0IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCiAgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEsIFMuTC4KKyAqIEF1dGhvcjogSmF2aWVyIE0uIE1lbGxpZCA8am11bmhvekBpZ2FsaWEuY29tPgorICoKICAqICBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCiAgKiAgbW9yZSBkZXRhaWxzLgogICoKICAqIFZlcnNpb24gMC4xMC4yNjE5Mi4yMS4wMQogICoJLSBBZGQgUG93ZXJQQy9CaWcgZW5kaWFuIHN1cHBvcnQKLSAqCS0gQWRkIDJEIHN1cHBvcnQgZm9yIEx5bngKLSAqCS0gVmVyaWZpZWQgb24yLjYuMTkuMiAgQm95b2QueWFuZyA8Ym95b2QueWFuZ0BzaWxpY29ubW90aW9uLmNvbS5jbj4KKyAqCS0gVmVyaWZpZWQgb24gMi42LjE5LjIKKyAqCUJveW9kLnlhbmcgPGJveW9kLnlhbmdAc2lsaWNvbm1vdGlvbi5jb20uY24+CiAgKgogICogVmVyc2lvbiAwLjA5LjI2MjEuMDAuMDEKLSAqCS0gT25seSBzdXBwb3J0IExpbnV4IEtlcm5lbCdzIHZlcnNpb24gMi42LjIxLgotICoJQm95b2QueWFuZyAgPGJveW9kLnlhbmdAc2lsaWNvbm1vdGlvbi5jb20uY24+CisgKgktIE9ubHkgc3VwcG9ydCBMaW51eCBLZXJuZWwncyB2ZXJzaW9uIDIuNi4yMQorICoJQm95b2QueWFuZyA8Ym95b2QueWFuZ0BzaWxpY29ubW90aW9uLmNvbS5jbj4KICAqCiAgKiBWZXJzaW9uIDAuMDkKLSAqCS0gT25seSBzdXBwb3J0IExpbnV4IEtlcm5lbCdzIHZlcnNpb24gMi42LjEyLgorICoJLSBPbmx5IHN1cHBvcnQgTGludXggS2VybmVsJ3MgdmVyc2lvbiAyLjYuMTIKICAqCUJveW9kLnlhbmcgPGJveW9kLnlhbmdAc2lsaWNvbm1vdGlvbi5jb20uY24+CiAgKi8KIApAQCAtMzksMTYgKzQyLDE2IEBACiAjaW5jbHVkZSA8bGludXgvcG0uaD4KICNlbmRpZgogCi1zdHJ1Y3Qgc2NyZWVuX2luZm8gc210Y19zY3JlZW5faW5mbzsKLQogI2luY2x1ZGUgInNtdGNmYi5oIgogCiAjaWZkZWYgREVCVUcKLSNkZWZpbmUgc21kYmcoZm9ybWF0LCBhcmcuLi4pCXByaW50ayhLRVJOX0RFQlVHIGZvcm1hdCAsICMjIGFyZykKKyNkZWZpbmUgc21kYmcoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0RFQlVHIGZvcm1hdCAsICMjIGFyZykKICNlbHNlCiAjZGVmaW5lIHNtZGJnKGZvcm1hdCwgYXJnLi4uKQogI2VuZGlmCiAKK3N0cnVjdCBzY3JlZW5faW5mbyBzbXRjX3NjcmVlbl9pbmZvOworCiAvKgogKiBQcml2YXRlIHN0cnVjdHVyZQogKi8KQEAgLTk5LDE3ICsxMDIsMTcgQEAKIHN0YXRpYyBzdHJ1Y3QgdmVzYV9tb2RlX3RhYmxlIHZlc2FfbW9kZVtdID0gewogCXsiMHgzMDEiLCA2NDAsICA0ODAsICA4fSwKIAl7IjB4MzAzIiwgODAwLCAgNjAwLCAgOH0sCi0JeyIweDMwNSIsIDEwMjQsIDc2OCwJOH0sCisJeyIweDMwNSIsIDEwMjQsIDc2OCwgIDh9LAogCXsiMHgzMDciLCAxMjgwLCAxMDI0LCA4fSwKIAogCXsiMHgzMTEiLCA2NDAsICA0ODAsICAxNn0sCiAJeyIweDMxNCIsIDgwMCwgIDYwMCwgIDE2fSwKLQl7IjB4MzE3IiwgMTAyNCwgNzY4LAkxNn0sCisJeyIweDMxNyIsIDEwMjQsIDc2OCwgIDE2fSwKIAl7IjB4MzFBIiwgMTI4MCwgMTAyNCwgMTZ9LAogCiAJeyIweDMxMiIsIDY0MCwgIDQ4MCwgIDI0fSwKIAl7IjB4MzE1IiwgODAwLCAgNjAwLCAgMjR9LAotCXsiMHgzMTgiLCAxMDI0LCA3NjgsCTI0fSwKKwl7IjB4MzE4IiwgMTAyNCwgNzY4LCAgMjR9LAogCXsiMHgzMUIiLCAxMjgwLCAxMDI0LCAyNH0sCiB9OwogCkBAIC0xMjUsNyArMTI4LDMwIEBACiAJMHg3MjAKIH07CiAKLSNkZWZpbmUgbnVtU01UQ2NoaXBJRHMgKHNpemVvZihzbXRjX0NoaXBJRHMpIC8gc2l6ZW9mKHUxNikpCisjZGVmaW5lIG51bVNNVENjaGlwSURzIEFSUkFZX1NJWkUoc210Y19DaGlwSURzKQorCitzdGF0aWMgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIHNtdGNmYl92YXIgPSB7CisJLnhyZXMgICAgICAgICAgID0gMTAyNCwKKwkueXJlcyAgICAgICAgICAgPSA2MDAsCisJLnhyZXNfdmlydHVhbCAgID0gMTAyNCwKKwkueXJlc192aXJ0dWFsICAgPSA2MDAsCisJLmJpdHNfcGVyX3BpeGVsID0gMTYsCisJLnJlZCAgICAgICAgICAgID0gezE2LCA4LCAwfSwKKwkuZ3JlZW4gICAgICAgICAgPSB7OCwgOCwgMH0sCisJLmJsdWUgICAgICAgICAgID0gezAsIDgsIDB9LAorCS5hY3RpdmF0ZSAgICAgICA9IEZCX0FDVElWQVRFX05PVywKKwkuaGVpZ2h0ICAgICAgICAgPSAtMSwKKwkud2lkdGggICAgICAgICAgPSAtMSwKKwkudm1vZGUgICAgICAgICAgPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorfTsKKworc3RhdGljIHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyBzbXRjZmJfZml4ID0geworCS5pZCAgICAgICAgICAgICA9ICJzbTcxMmZiIiwKKwkudHlwZSAgICAgICAgICAgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFMsCisJLnZpc3VhbCAgICAgICAgID0gRkJfVklTVUFMX1RSVUVDT0xPUiwKKwkubGluZV9sZW5ndGggICAgPSA4MDAgKiAzLAorCS5hY2NlbCAgICAgICAgICA9IEZCX0FDQ0VMX1NNSV9MWU5YLAorfTsKIAogc3RhdGljIHZvaWQgc203MTJfc2V0X3RpbWluZyhzdHJ1Y3Qgc210Y2ZiX2luZm8gKnNmYiwKIAkJCSAgICAgc3RydWN0IHBhcl9pbmZvICpwcGFyX2luZm8pCkBAIC0yNjgsMjkgKzI5NCw2IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIHNtdGNmYl92YXIgPSB7Ci0JLnhyZXMgPSAxMDI0LAotCS55cmVzID0gNjAwLAotCS54cmVzX3ZpcnR1YWwgPSAxMDI0LAotCS55cmVzX3ZpcnR1YWwgPSA2MDAsCi0JLmJpdHNfcGVyX3BpeGVsID0gMTYsCi0JLnJlZCA9IHsxNiwgOCwgMH0sCi0JLmdyZWVuID0gezgsIDgsIDB9LAotCS5ibHVlID0gezAsIDgsIDB9LAotCS5hY3RpdmF0ZSA9IEZCX0FDVElWQVRFX05PVywKLQkuaGVpZ2h0ID0gLTEsCi0JLndpZHRoID0gLTEsCi0JLnZtb2RlID0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gc210Y2ZiX2ZpeCA9IHsKLQkuaWQgPSAic203MTJmYiIsCi0JLnR5cGUgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFMsCi0JLnZpc3VhbCA9IEZCX1ZJU1VBTF9UUlVFQ09MT1IsCi0JLmxpbmVfbGVuZ3RoID0gODAwICogMywKLQkuYWNjZWwgPSBGQl9BQ0NFTF9TTUlfTFlOWCwKLX07Ci0KIC8qIGNoYW5fdG9fZmllbGQKICAqCiAgKiBjb252ZXJ0IGEgY29sb3VyIHZhbHVlIGludG8gYSBmaWVsZCBwb3NpdGlvbgpAQCAtNjA0LDIwICs2MDcsNiBAQAogfQogI2VuZGlmCS8qICEgX19CSUdfRU5ESUFOICovCiAKLXN0YXRpYyBzdHJ1Y3QgZmJfb3BzIHNtdGNmYl9vcHMgPSB7Ci0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLmZiX3NldGNvbHJlZyA9IHNtdGNfc2V0Y29scmVnLAotCS5mYl9ibGFuayA9IGNmYl9ibGFuaywKLQkuZmJfZmlsbHJlY3QgPSBjZmJfZmlsbHJlY3QsCi0JLmZiX2ltYWdlYmxpdCA9IGNmYl9pbWFnZWJsaXQsCi0JLmZiX2NvcHlhcmVhID0gY2ZiX2NvcHlhcmVhLAotI2lmZGVmIF9fQklHX0VORElBTgotCS5mYl9yZWFkID0gc210Y2ZiX3JlYWQsCi0JLmZiX3dyaXRlID0gc210Y2ZiX3dyaXRlLAotI2VuZGlmCi0KLX07Ci0KIHZvaWQgc210Y2ZiX3NldG1vZGUoc3RydWN0IHNtdGNmYl9pbmZvICpzZmIpCiB7CiAJc3dpdGNoIChzZmItPmZiLnZhci5iaXRzX3Blcl9waXhlbCkgewpAQCAtNjc2LDYgKzY2NSw0NyBAQAogCXNtdGNfc2V0X3RpbWluZyhzZmIsICZodyk7CiB9CiAKK3N0YXRpYyBpbnQgc210Y19jaGVja192YXIoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCS8qIHNhbml0eSBjaGVja3MgKi8KKwlpZiAodmFyLT54cmVzX3ZpcnR1YWwgPCB2YXItPnhyZXMpCisJCXZhci0+eHJlc192aXJ0dWFsID0gdmFyLT54cmVzOworCisJaWYgKHZhci0+eXJlc192aXJ0dWFsIDwgdmFyLT55cmVzKQorCQl2YXItPnlyZXNfdmlydHVhbCA9IHZhci0+eXJlczsKKworCS8qIHNldCB2YWxpZCBkZWZhdWx0IGJwcCAqLworCWlmICgodmFyLT5iaXRzX3Blcl9waXhlbCAhPSA4KSAgJiYgKHZhci0+Yml0c19wZXJfcGl4ZWwgIT0gMTYpICYmCisJICAgICh2YXItPmJpdHNfcGVyX3BpeGVsICE9IDI0KSAmJiAodmFyLT5iaXRzX3Blcl9waXhlbCAhPSAzMikpCisJCXZhci0+Yml0c19wZXJfcGl4ZWwgPSAxNjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNtdGNfc2V0X3BhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3Qgc210Y2ZiX2luZm8gKnNmYiA9IChzdHJ1Y3Qgc210Y2ZiX2luZm8gKilpbmZvOworCisJc210Y2ZiX3NldG1vZGUoc2ZiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGZiX29wcyBzbXRjZmJfb3BzID0geworCS5vd25lciAgICAgICAgPSBUSElTX01PRFVMRSwKKwkuZmJfY2hlY2tfdmFyID0gc210Y19jaGVja192YXIsCisJLmZiX3NldF9wYXIgICA9IHNtdGNfc2V0X3BhciwKKwkuZmJfc2V0Y29scmVnID0gc210Y19zZXRjb2xyZWcsCisJLmZiX2JsYW5rICAgICA9IGNmYl9ibGFuaywKKwkuZmJfZmlsbHJlY3QgID0gY2ZiX2ZpbGxyZWN0LAorCS5mYl9pbWFnZWJsaXQgPSBjZmJfaW1hZ2VibGl0LAorCS5mYl9jb3B5YXJlYSAgPSBjZmJfY29weWFyZWEsCisjaWZkZWYgX19CSUdfRU5ESUFOCisJLmZiX3JlYWQgICAgICA9IHNtdGNmYl9yZWFkLAorCS5mYl93cml0ZSAgICAgPSBzbXRjZmJfd3JpdGUsCisjZW5kaWYKK307CisKIC8qCiAgKiBBbGxvYyBzdHJ1Y3Qgc210Y2ZiX2luZm8gYW5kIGFzc2lnbiB0aGUgZGVmYXVsdCB2YWx1ZQogICovCkBAIC02ODQsNyArNzE0LDcgQEAKIHsKIAlzdHJ1Y3Qgc210Y2ZiX2luZm8gKnNmYjsKIAotCXNmYiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbXRjZmJfaW5mbyksIEdGUF9LRVJORUwpOworCXNmYiA9IGt6YWxsb2Moc2l6ZW9mKCpzZmIpLCBHRlBfS0VSTkVMKTsKIAogCWlmICghc2ZiKQogCQlyZXR1cm4gTlVMTDsKQEAgLTc1Myw3ICs3ODMsNyBAQAogCXNmYi0+ZmIuc2NyZWVuX2Jhc2UgPSBzbXRjX1ZSQU1CYXNlQWRkcmVzczsKIAogCWlmICghc2ZiLT5mYi5zY3JlZW5fYmFzZSkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogdW5hYmxlIHRvIG1hcCBzY3JlZW4gbWVtb3J5XG4iLAorCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gbWFwIHNjcmVlbiBtZW1vcnlcbiIsCiAJCQkJc2ZiLT5mYi5maXguaWQpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC03OTYsNyArODI2LDcgQEAKICAqCVJldHVybnMgemVyby4KICAqCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IF9fbWF5YmVfdW51c2VkIHNtNzEydmdhX3NldHVwKGNoYXIgKm9wdGlvbnMpCitzdGF0aWMgaW50IF9faW5pdCBzbTcxMnZnYV9zZXR1cChjaGFyICpvcHRpb25zKQogewogCWludCBpbmRleDsKIApAQCAtODEyLDcgKzg0Miw3IEBACiAJc21kYmcoIlxuc203MTJ2Z2Ffc2V0dXAgPSAlc1xuIiwgb3B0aW9ucyk7CiAKIAlmb3IgKGluZGV4ID0gMDsKLQkgICAgIGluZGV4IDwgKHNpemVvZih2ZXNhX21vZGUpIC8gc2l6ZW9mKHN0cnVjdCB2ZXNhX21vZGVfdGFibGUpKTsKKwkgICAgIGluZGV4IDwgQVJSQVlfU0laRSh2ZXNhX21vZGUpOwogCSAgICAgaW5kZXgrKykgewogCQlpZiAoc3Ryc3RyKG9wdGlvbnMsIHZlc2FfbW9kZVtpbmRleF0ubW9kZV9pbmRleCkpIHsKIAkJCXNtdGNfc2NyZWVuX2luZm8ubGZiX3dpZHRoID0gdmVzYV9tb2RlW2luZGV4XS5sZmJfd2lkdGg7CkBAIC04NDYsNyArODc2LDYgQEAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsJLyogZW5hYmxlIFNNVEMgY2hpcCAqLwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7Ci0JZXJyID0gLUVOT01FTTsKIAogCWh3LmNoaXBJRCA9IGVudC0+ZGV2aWNlOwogCXNwcmludGYobmFtZSwgInNtJVhmYiIsIGh3LmNoaXBJRCk7CkBAIC05MDksNyArOTM4LDcgQEAKIAkJfQogI2VuZGlmCiAJCWlmICghc210Y19SZWdCYXNlQWRkcmVzcykgewotCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJIiVzOiB1bmFibGUgdG8gbWFwIG1lbW9yeSBtYXBwZWQgSU9cbiIsCiAJCQkJc2ZiLT5mYi5maXguaWQpOwogCQkJZXJyID0gLUVOT01FTTsKQEAgLTk0NCw3ICs5NzMsNyBAQAogCQlzbXRjX3NlcXcoMHg2YiwgMHgwMik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0lORk8KKwkJcHJpbnRrKEtFUk5fRVJSCiAJCSJObyB2YWxpZCBTaWxpY29uIE1vdGlvbiBkaXNwbGF5IGNoaXAgd2FzIGRldGVjdGVkIVxuIik7CiAKIAkJZ290byBmYWlsZWRfZmI7CkBAIC05NzYsOCArMTAwNSw4IEBACiAKIAlyZXR1cm4gMDsKIAotIGZhaWxlZDoKLQlwcmludGsoS0VSTl9JTkZPICJTaWxpY29uIE1vdGlvbiwgSW5jLiAgcHJpbWFyeSBkaXNwbGF5IGluaXQgZmFpbFxuIik7CitmYWlsZWQ6CisJcHJpbnRrKEtFUk5fRVJSICJTaWxpY29uIE1vdGlvbiwgSW5jLiAgcHJpbWFyeSBkaXNwbGF5IGluaXQgZmFpbFxuIik7CiAKIAlzbXRjX3VubWFwX3NtZW0oc2ZiKTsKIAlzbXRjX3VubWFwX21taW8oc2ZiKTsKQEAgLTEwMTYsMTMgKzEwNDUsMTAgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotLyogSmFzb24gKDA4LzE0LzIwMDkpCi0gKiBzdXNwZW5kIGZ1bmN0aW9uLCBjYWxsZWQgd2hlbiB0aGUgc3VzcGVuZCBldmVudCBpcyB0cmlnZ2VyZWQKLSAqLwotc3RhdGljIGludCBfX21heWJlX3VudXNlZCBzbXRjZmJfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IG1zZykKK3N0YXRpYyBpbnQgc210Y2ZiX3BjaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2aWNlKTsKIAlzdHJ1Y3Qgc210Y2ZiX2luZm8gKnNmYjsKLQlpbnQgcmV0djsKIAogCXNmYiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIApAQCAtMTAzMiwyNSArMTA1OCw5IEBACiAJc210Y19zZXF3KDB4MjAsIChzbXRjX3NlcXIoMHgyMCkgfCAweGMwKSk7CiAJc210Y19zZXF3KDB4NjksIChzbXRjX3NlcXIoMHg2OSkgJiAweGY3KSk7CiAKLQlzd2l0Y2ggKG1zZy5ldmVudCkgewotCWNhc2UgUE1fRVZFTlRfRlJFRVpFOgotCWNhc2UgUE1fRVZFTlRfUFJFVEhBVzoKLQkJcGRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gbXNnOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiB3aGVuIGRvaW5nIHN1c3BlbmQsIGNhbGwgZmIgYXBpcyBhbmQgcGNpIGFwaXMgKi8KLQlpZiAobXNnLmV2ZW50ID09IFBNX0VWRU5UX1NVU1BFTkQpIHsKLQkJY29uc29sZV9sb2NrKCk7Ci0JCWZiX3NldF9zdXNwZW5kKCZzZmItPmZiLCAxKTsKLQkJY29uc29sZV91bmxvY2soKTsKLQkJcmV0diA9IHBjaV9zYXZlX3N0YXRlKHBkZXYpOwotCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0JCXJldHYgPSBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIG1zZyk7Ci0JCXJldHYgPSBwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHJldHYpOwotCX0KLQotCXBkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IG1zZzsKKwljb25zb2xlX2xvY2soKTsKKwlmYl9zZXRfc3VzcGVuZCgmc2ZiLT5mYiwgMSk7CisJY29uc29sZV91bmxvY2soKTsKIAogCS8qIGFkZGl0aW9uYWxseSB0dXJuIG9mZiBhbGwgZnVuY3Rpb24gYmxvY2tzIGluY2x1ZGluZyBpbnRlcm5hbCBQTExzICovCiAJc210Y19zZXF3KDB4MjEsIDB4ZmYpOwpAQCAtMTA1OCwyMiArMTA2OCwxMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIHNtdGNmYl9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCitzdGF0aWMgaW50IHNtdGNmYl9wY2lfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2aWNlKTsKIAlzdHJ1Y3Qgc210Y2ZiX2luZm8gKnNmYjsKLQlpbnQgcmV0djsKIAogCXNmYiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCS8qIHdoZW4gcmVzdW1pbmcsIHJlc3RvcmUgcGNpIGRhdGEgYW5kIGZiIGN1cnNvciAqLwotCWlmIChwZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgIT0gUE1fRVZFTlRfRlJFRVpFKSB7Ci0JCXJldHYgPSBwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7Ci0JCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwotCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpCi0JCQlyZXR1cm4gLTE7Ci0JCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwotCX0KLQogCS8qIHJlaW5pdCBoYXJkd2FyZSAqLwogCXNtN3h4X2luaXRfaHcoKTsKIAlzd2l0Y2ggKGh3LmNoaXBJRCkgewpAQCAtMTEwOCwyMiArMTEwOSwzMCBAQAogCiAJcmV0dXJuIDA7CiB9Ci0jZW5kaWYKIAotLyogSmFzb24gKDA4LzEzLzIwMDkpCi0gKiBwY2lfZHJpdmVyIHN0cnVjdCB1c2VkIHRvIHdyYXAgdGhlIG9yaWdpbmFsIGRyaXZlcgotICogc28gdGhhdCBpdCBjYW4gYmUgcmVnaXN0ZXJlZCBpbnRvIHRoZSBrZXJuZWwgYW5kCi0gKiB0aGUgcHJvcGVyIG1ldGhvZCB3b3VsZCBiZSBjYWxsZWQgd2hlbiBzdXNwZW5kaW5nIGFuZCByZXN1bWluZwotICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgc203eHhfcG1fb3BzID0geworCS5zdXNwZW5kID0gc210Y2ZiX3BjaV9zdXNwZW5kLAorCS5yZXN1bWUgPSBzbXRjZmJfcGNpX3Jlc3VtZSwKKwkuZnJlZXplID0gc210Y2ZiX3BjaV9zdXNwZW5kLAorCS50aGF3ID0gc210Y2ZiX3BjaV9yZXN1bWUsCisJLnBvd2Vyb2ZmID0gc210Y2ZiX3BjaV9zdXNwZW5kLAorCS5yZXN0b3JlID0gc210Y2ZiX3BjaV9yZXN1bWUsCit9OworCisjZGVmaW5lIFNNN1hYX1BNX09QUyAoJnNtN3h4X3BtX29wcykKKworI2Vsc2UgIC8qICFDT05GSUdfUE0gKi8KKworI2RlZmluZSBTTTdYWF9QTV9PUFMgTlVMTAorCisjZW5kaWYgLyogIUNPTkZJR19QTSAqLworCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc210Y2ZiX2RyaXZlciA9IHsKIAkubmFtZSA9ICJzbXRjZmIiLAogCS5pZF90YWJsZSA9IHNtdGNmYl9wY2lfdGFibGUsCiAJLnByb2JlID0gc210Y2ZiX3BjaV9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc210Y2ZiX3BjaV9yZW1vdmUpLAotI2lmZGVmIENPTkZJR19QTQotCS5zdXNwZW5kID0gc210Y2ZiX3N1c3BlbmQsCi0JLnJlc3VtZSA9IHNtdGNmYl9yZXN1bWUsCi0jZW5kaWYKKwkuZHJpdmVyLnBtICA9IFNNN1hYX1BNX09QUywKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHNtdGNmYl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmggYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmgKaW5kZXggMGMxMTM4My4uYzVlNjk4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGNmYi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuaApAQCAtMzAsMTEgKzMwLDYgQEAKICNkZWZpbmUgU0NSRUVOX1lfUkVTICAgICAgNjAwCiAjZGVmaW5lIFNDUkVFTl9CUFAgICAgICAgIDE2CiAKLSNpZm5kZWYgRklFTERfT0ZGU0VUCi0jZGVmaW5lIEZJRUxEX09GU0ZFVCh0eXBlLCBmaWVsZCkgXAotCSgodW5zaWduZWQgbG9uZykgKFBVQ0hBUikgJiAoKCh0eXBlICopMCktPmZpZWxkKSkKLSNlbmRpZgotCiAvKkFzc3VtZSBTTTcxMiBncmFwaGljcyBjaGlwIGhhcyA0TUIgVlJBTSAqLwogI2RlZmluZSBTTTcxMl9WSURFT01FTU9SWVNJWkUJICAweDAwNDAwMDAwCiAvKkFzc3VtZSBTTTcyMiBncmFwaGljcyBjaGlwIGhhcyA4TUIgVlJBTSAqLwpAQCAtNzkwLDQgKzc4NSw0IEBACiAJIH0sCiB9OwogCi0jZGVmaW5lIG51bVZHQU1vZGVzCQkoc2l6ZW9mKFZHQU1vZGUpIC8gc2l6ZW9mKHN0cnVjdCBNb2RlSW5pdCkpCisjZGVmaW5lIG51bVZHQU1vZGVzCQlBUlJBWV9TSVpFKFZHQU1vZGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdHR5L2lzdGFsbGlvbi5jIGIvZHJpdmVycy9zdGFnaW5nL3R0eS9pc3RhbGxpb24uYwppbmRleCAwYjI2NjI3Li5jYTE4Y2JmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdHR5L2lzdGFsbGlvbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90dHkvaXN0YWxsaW9uLmMKQEAgLTE4Niw3ICsxODYsNiBAQAogICoJcmUtdXNlZCBmb3IgZWFjaCBzdGF0cyBjYWxsLgogICovCiBzdGF0aWMgY29tc3RhdHNfdAlzdGxpX2NvbXN0YXRzOwotc3RhdGljIGNvbWJyZF90CQlzdGxpX2JyZHN0YXRzOwogc3RhdGljIHN0cnVjdCBhc3lzdGF0cwlzdGxpX2Nka3N0YXRzOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC00MDA1LDYgKzQwMDQsNyBAQAogewogCXN0cnVjdCBzdGxpYnJkICpicmRwOwogCXVuc2lnbmVkIGludCBpOworCWNvbWJyZF90IHN0bGlfYnJkc3RhdHM7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJnN0bGlfYnJkc3RhdHMsIGJwLCBzaXplb2YoY29tYnJkX3QpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9LY29uZmlnCmluZGV4IDJjMWQxMGEuLmRkMTNjMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9LY29uZmlnCkBAIC0xLDQzICsxLDQ1IEBACi1jb25maWcgVVNCX0lQX0NPTU1PTgotCXRyaXN0YXRlICJVU0IgSVAgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKK2NvbmZpZyBVU0JJUF9DT1JFCisJdHJpc3RhdGUgIlVTQi9JUCBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gVVNCICYmIE5FVCAmJiBFWFBFUklNRU5UQUwKIAlkZWZhdWx0IE4KIAktLS1oZWxwLS0tCiAJICBUaGlzIGVuYWJsZXMgcHVzaGluZyBVU0IgcGFja2V0cyBvdmVyIElQIHRvIGFsbG93IHJlbW90ZQotCSAgbWFjaGluZXMgYWNjZXNzIHRvIFVTQiBkZXZpY2VzIGRpcmVjdGx5LiAgRm9yIG1vcmUgZGV0YWlscywKLQkgIGFuZCBsaW5rcyB0byB0aGUgdXNlcnNwYWNlIHV0aWxpdHkgcHJvZ3JhbXMgdG8gbGV0IHRoaXMgd29yawotCSAgcHJvcGVybHksIHNlZSBodHRwOi8vdXNiaXAuc291cmNlZm9yZ2UubmV0Ly4KKwkgIG1hY2hpbmVzIGRpcmVjdCBhY2Nlc3MgdG8gVVNCIGRldmljZXMuIEl0IHByb3ZpZGVzIHRoZQorCSAgVVNCL0lQIGNvcmUgdGhhdCBpcyByZXF1aXJlZCBieSBib3RoIGRyaXZlcnMuCiAKLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYmlwX2NvbW1vbl9tb2QuCisJICBGb3IgbW9yZSBkZXRhaWxzLCBhbmQgdG8gZ2V0IHRoZSB1c2Vyc3BhY2UgdXRpbGl0eQorCSAgcHJvZ3JhbXMsIHBsZWFzZSBzZWUgaHR0cDovL3VzYmlwLnNvdXJjZWZvcmdlLm5ldC8uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsCisJICBiZSBjYWxsZWQgdXNiaXAtY29yZS4KIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAotY29uZmlnIFVTQl9JUF9WSENJX0hDRAotCXRyaXN0YXRlICJVU0IgSVAgY2xpZW50IGRyaXZlciIKLQlkZXBlbmRzIG9uIFVTQl9JUF9DT01NT04KK2NvbmZpZyBVU0JJUF9WSENJX0hDRAorCXRyaXN0YXRlICJWSENJIGhjZCIKKwlkZXBlbmRzIG9uIFVTQklQX0NPUkUKIAlkZWZhdWx0IE4KIAktLS1oZWxwLS0tCi0JIFRoaXMgZW5hYmxlcyB0aGUgVVNCIElQIGhvc3QgY29udHJvbGxlciBkcml2ZXIgd2hpY2ggd2lsbAotCSBydW4gb24gdGhlIGNsaWVudCBtYWNoaW5lLgorCSAgVGhpcyBlbmFibGVzIHRoZSBVU0IvSVAgdmlydHVhbCBob3N0IGNvbnRyb2xsZXIgZHJpdmVyLAorCSAgd2hpY2ggaXMgcnVuIG9uIHRoZSByZW1vdGUgbWFjaGluZS4KIAotCSBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZoY2lfaGNkLgorCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdmhjaS1oY2QuCiAKLWNvbmZpZyBVU0JfSVBfSE9TVAotCXRyaXN0YXRlICJVU0IgSVAgaG9zdCBkcml2ZXIiCi0JZGVwZW5kcyBvbiBVU0JfSVBfQ09NTU9OCitjb25maWcgVVNCSVBfSE9TVAorCXRyaXN0YXRlICJIb3N0IGRyaXZlciIKKwlkZXBlbmRzIG9uIFVTQklQX0NPUkUKIAlkZWZhdWx0IE4KIAktLS1oZWxwLS0tCi0JIFRoaXMgZW5hYmxlcyB0aGUgVVNCIElQIGRldmljZSBkcml2ZXIgd2hpY2ggd2lsbCBydW4gb24gdGhlCi0JIGhvc3QgbWFjaGluZS4KKwkgIFRoaXMgZW5hYmxlcyB0aGUgVVNCL0lQIGhvc3QgZHJpdmVyLCB3aGljaCBpcyBydW4gb24gdGhlCisJICBtYWNoaW5lIHRoYXQgaXMgc2hhcmluZyB0aGUgVVNCIGRldmljZXMuCiAKLQkgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2JpcC4KKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYmlwLWhvc3QuCiAKLWNvbmZpZyBVU0JfSVBfREVCVUdfRU5BQkxFCi0JYm9vbCAiVVNCLUlQIERlYnVnIEVuYWJsZSIKLQlkZXBlbmRzIG9uIFVTQl9JUF9DT01NT04KK2NvbmZpZyBVU0JJUF9ERUJVRworCWJvb2wgIkRlYnVnIG1lc3NhZ2VzIGZvciBVU0IvSVAiCisJZGVwZW5kcyBvbiBVU0JJUF9DT1JFCiAJZGVmYXVsdCBOCiAJLS0taGVscC0tLQotCSAgVGhpcyBlbmFibGVzIHRoZSBkZWJ1ZyBtZXNzYWdlcyBmcm9tIHRoZSBVU0ItSVAgZHJpdmVycy4KKwkgIFRoaXMgZW5hYmxlcyB0aGUgZGVidWcgbWVzc2FnZXMgZnJvbSB0aGUgVVNCL0lQIGRyaXZlcnMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvTWFrZWZpbGUKaW5kZXggMjc5ZjNjYy4uOWVjZDYxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9NYWtlZmlsZQpAQCAtMSwxMSArMSwxMCBAQAotb2JqLSQoQ09ORklHX1VTQl9JUF9DT01NT04pICs9IHVzYmlwX2NvbW1vbl9tb2QubwotdXNiaXBfY29tbW9uX21vZC15IDo9IHVzYmlwX2NvbW1vbi5vIHVzYmlwX2V2ZW50Lm8KK2NjZmxhZ3MtJChDT05GSUdfVVNCSVBfREVCVUcpIDo9IC1EREVCVUcKIAotb2JqLSQoQ09ORklHX1VTQl9JUF9WSENJX0hDRCkgKz0gdmhjaS1oY2Qubworb2JqLSQoQ09ORklHX1VTQklQX0NPUkUpICs9IHVzYmlwLWNvcmUubwordXNiaXAtY29yZS15IDo9IHVzYmlwX2NvbW1vbi5vIHVzYmlwX2V2ZW50Lm8KKworb2JqLSQoQ09ORklHX1VTQklQX1ZIQ0lfSENEKSArPSB2aGNpLWhjZC5vCiB2aGNpLWhjZC15IDo9IHZoY2lfc3lzZnMubyB2aGNpX3R4Lm8gdmhjaV9yeC5vIHZoY2lfaGNkLm8KIAotb2JqLSQoQ09ORklHX1VTQl9JUF9IT1NUKSArPSB1c2JpcC5vCi11c2JpcC15IDo9IHN0dWJfZGV2Lm8gc3R1Yl9tYWluLm8gc3R1Yl9yeC5vIHN0dWJfdHgubwotCi1jY2ZsYWdzLSQoQ09ORklHX1VTQl9JUF9ERUJVR19FTkFCTEUpIDo9IC1EREVCVUcKLQorb2JqLSQoQ09ORklHX1VTQklQX0hPU1QpICs9IHVzYmlwLWhvc3QubwordXNiaXAtaG9zdC15IDo9IHN0dWJfZGV2Lm8gc3R1Yl9tYWluLm8gc3R1Yl9yeC5vIHN0dWJfdHgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWIuaCBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViLmgKaW5kZXggNjAwNGZjZC4uNjU5MmFhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yi5oCkBAIC0xNywxMyArMTcsMTIgQEAKICAqIFVTQS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L25ldC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAKICNkZWZpbmUgU1RVQl9CVVNJRF9PVEhFUiAwCiAjZGVmaW5lIFNUVUJfQlVTSURfUkVNT1YgMQpAQCAtNTgsNyArNTcsNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQgdW5saW5rX3R4OwogCXN0cnVjdCBsaXN0X2hlYWQgdW5saW5rX2ZyZWU7CiAKLQogCXdhaXRfcXVldWVfaGVhZF90IHR4X3dhaXRxOwogfTsKIApAQCAtODcsMjUgKzg1LDIyIEBACiAJY2hhciBzaHV0ZG93bl9idXNpZDsKIH07CiAKKy8qIHN0dWJfcHJpdiBpcyBhbGxvY2F0ZWQgZnJvbSBzdHViX3ByaXZfY2FjaGUgKi8KIGV4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqc3R1Yl9wcml2X2NhY2hlOwogCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBwcm90b3R5cGUgZGVjbGFyYXRpb25zICovCi0KLS8qIHN0dWJfdHguYyAqLwotdm9pZCBzdHViX2NvbXBsZXRlKHN0cnVjdCB1cmIgKik7Ci1pbnQgc3R1Yl90eF9sb29wKHZvaWQgKmRhdGEpOwotCiAvKiBzdHViX2Rldi5jICovCiBleHRlcm4gc3RydWN0IHVzYl9kcml2ZXIgc3R1Yl9kcml2ZXI7CiAKLS8qIHN0dWJfcnguYyAqLwotaW50IHN0dWJfcnhfbG9vcCh2b2lkICpkYXRhKTsKLXZvaWQgc3R1Yl9lbnF1ZXVlX3JldF91bmxpbmsoc3RydWN0IHN0dWJfZGV2aWNlICosIF9fdTMyLCBfX3UzMik7Ci0KIC8qIHN0dWJfbWFpbi5jICovCiBzdHJ1Y3QgYnVzX2lkX3ByaXYgKmdldF9idXNpZF9wcml2KGNvbnN0IGNoYXIgKmJ1c2lkKTsKIGludCBkZWxfbWF0Y2hfYnVzaWQoY2hhciAqYnVzaWQpOwotCiB2b2lkIHN0dWJfZGV2aWNlX2NsZWFudXBfdXJicyhzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYpOworCisvKiBzdHViX3J4LmMgKi8KK2ludCBzdHViX3J4X2xvb3Aodm9pZCAqZGF0YSk7CisKKy8qIHN0dWJfdHguYyAqLwordm9pZCBzdHViX2VucXVldWVfcmV0X3VubGluayhzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYsIF9fdTMyIHNlcW51bSwKKwkJCSAgICAgX191MzIgc3RhdHVzKTsKK3ZvaWQgc3R1Yl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpOworaW50IHN0dWJfdHhfbG9vcCh2b2lkICpkYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX2Rldi5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfZGV2LmMKaW5kZXggYmNlN2QwMy4uNmU5OWVjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfZGV2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfZGV2LmMKQEAgLTE3LDE5ICsxNywxNiBAQAogICogVVNBLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogCiAjaW5jbHVkZSAidXNiaXBfY29tbW9uLmgiCiAjaW5jbHVkZSAic3R1Yi5oIgogCi0KLQogc3RhdGljIGludCBzdHViX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCi0JCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKKwkJICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKIHN0YXRpYyB2b2lkIHN0dWJfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKTsKIAotCiAvKgogICogRGVmaW5lIGRldmljZSBJRHMgaGVyZSBpZiB5b3Ugd2FudCB0byBleHBsaWNpdGx5IGxpbWl0IGV4cG9ydGFibGUgZGV2aWNlcy4KICAqIEluIHRoZSBtb3N0IGNhc2VzLCB3aWxkIGNhcmQgbWF0Y2hpbmcgd2lsbCBiZSBvayBiZWNhdXNlIGRyaXZlciBiaW5kaW5nIGNhbgpAQCAtNjQsMTIgKzYxLDYgQEAKIAkuaWRfdGFibGUJPSBzdHViX3RhYmxlLAogfTsKIAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiBEZWZpbmUgc3lzZnMgZW50cmllcyBmb3IgYSB1c2JpcC1ib3VuZCBkZXZpY2UgKi8KLQotCiAvKgogICogdXNiaXBfc3RhdHVzIHNob3dzIHN0YXR1cyBvZiB1c2JpcCBhcyBsb25nIGFzIHRoaXMgZHJpdmVyIGlzIGJvdW5kIHRvIHRoZQogICogdGFyZ2V0IGRldmljZS4KQEAgLTEyOCwxMyArMTE5LDExIEBACiAJCQlzcGluX3VubG9jaygmc2Rldi0+dWQubG9jayk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCiAjaWYgMAogCQlzZXRub2RlbGF5KHNvY2tldCk7CiAJCXNldGtlZXBhbGl2ZShzb2NrZXQpOwogCQlzZXRyZXVzZShzb2NrZXQpOwogI2VuZGlmCi0KIAkJc2Rldi0+dWQudGNwX3NvY2tldCA9IHNvY2tldDsKIAogCQlzcGluX3VubG9jaygmc2Rldi0+dWQubG9jayk7CkBAIC0xODMsMTAgKzE3Miw4IEBACiAKIGVycl9kZWJ1ZzoKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdXNiaXBfc29ja2ZkKTsKLQogZXJyX3NvY2tmZDoKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdXNiaXBfc3RhdHVzKTsKLQogZXJyX3N0YXR1czoKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTk4LDEyICsxODUsNiBAQAogCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl91c2JpcF9kZWJ1Zyk7CiB9CiAKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiBFdmVudCBoYW5kbGVyIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYW4gZXZlbnQgaGFuZGxlciB0aHJlYWQgKi8KLQogc3RhdGljIHZvaWQgc3R1Yl9zaHV0ZG93bl9jb25uZWN0aW9uKHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkKQogewogCXN0cnVjdCBzdHViX2RldmljZSAqc2RldiA9IGNvbnRhaW5lcl9vZih1ZCwgc3RydWN0IHN0dWJfZGV2aWNlLCB1ZCk7CkBAIC0yMTUsNyArMTk2LDggQEAKIAkgKiBzdGVwIDE/CiAJICovCiAJaWYgKHVkLT50Y3Bfc29ja2V0KSB7Ci0JCXVzYmlwX3VkYmcoInNodXRkb3duIHRjcF9zb2NrZXQgJXBcbiIsIHVkLT50Y3Bfc29ja2V0KTsKKwkJZGV2X2RiZygmc2Rldi0+dWRldi0+ZGV2LCAic2h1dGRvd24gdGNwX3NvY2tldCAlcFxuIiwKKwkJCXVkLT50Y3Bfc29ja2V0KTsKIAkJa2VybmVsX3NvY2tfc2h1dGRvd24odWQtPnRjcF9zb2NrZXQsIFNIVVRfUkRXUik7CiAJfQogCkBAIC0yNDQsMTggKzIyNiwxNSBAQAogCQlzdHJ1Y3Qgc3R1Yl91bmxpbmsgKnVubGluaywgKnRtcDsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7Ci0KIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVubGluaywgdG1wLCAmc2Rldi0+dW5saW5rX3R4LCBsaXN0KSB7CiAJCQlsaXN0X2RlbCgmdW5saW5rLT5saXN0KTsKIAkJCWtmcmVlKHVubGluayk7CiAJCX0KLQogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW5saW5rLCB0bXAsCiAJCQkJCQkgJnNkZXYtPnVubGlua19mcmVlLCBsaXN0KSB7CiAJCQlsaXN0X2RlbCgmdW5saW5rLT5saXN0KTsKIAkJCWtmcmVlKHVubGluayk7CiAJCX0KLQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKIAl9CiB9CkBAIC0yNjYsMTYgKzI0NSwxNCBAQAogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gc2Rldi0+dWRldjsKIAlpbnQgcmV0OwogCi0JdXNiaXBfdWRiZygiZGV2aWNlIHJlc2V0Iik7CisJZGV2X2RiZygmdWRldi0+ZGV2LCAiZGV2aWNlIHJlc2V0Iik7CiAKIAlyZXQgPSB1c2JfbG9ja19kZXZpY2VfZm9yX3Jlc2V0KHVkZXYsIHNkZXYtPmludGVyZmFjZSk7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2VycigmdWRldi0+ZGV2LCAibG9jayBmb3IgcmVzZXRcbiIpOwotCiAJCXNwaW5fbG9jaygmdWQtPmxvY2spOwogCQl1ZC0+c3RhdHVzID0gU0RFVl9TVF9FUlJPUjsKIAkJc3Bpbl91bmxvY2soJnVkLT5sb2NrKTsKLQogCQlyZXR1cm47CiAJfQogCkBAIC0zMDYsOSArMjgzLDYgQEAKIAlzcGluX3VubG9jaygmdWQtPmxvY2spOwogfQogCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KIC8qKgogICogc3R1Yl9kZXZpY2VfYWxsb2MgLSBhbGxvY2F0ZSBhIG5ldyBzdHViX2RldmljZSBzdHJ1Y3QKICAqIEBpbnRlcmZhY2U6IHVzYl9pbnRlcmZhY2Ugb2YgYSBuZXcgZGV2aWNlCkBAIC0zMzksMTMgKzMxMywxMiBAQAogCSAqIGRldm51bSBtYXkgY2hhbmdlIGxhdGVyIGlmIGEgZGV2aWNlIGlzIHJlc2V0LiBIb3dldmVyLCBkZXZpZCBuZXZlcgogCSAqIGNoYW5nZXMgZHVyaW5nIGEgdXNiaXAgY29ubmVjdGlvbi4KIAkgKi8KLQlzZGV2LT5kZXZpZCAgICAgPSAoYnVzbnVtIDw8IDE2KSB8IGRldm51bTsKLQotCXNkZXYtPnVkLnNpZGUgPSBVU0JJUF9TVFVCOwotCXNkZXYtPnVkLnN0YXR1cyA9IFNERVZfU1RfQVZBSUxBQkxFOworCXNkZXYtPmRldmlkCQk9IChidXNudW0gPDwgMTYpIHwgZGV2bnVtOworCXNkZXYtPnVkLnNpZGUJCT0gVVNCSVBfU1RVQjsKKwlzZGV2LT51ZC5zdGF0dXMJCT0gU0RFVl9TVF9BVkFJTEFCTEU7CiAJLyogc2Rldi0+dWQubG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsgKi8KIAlzcGluX2xvY2tfaW5pdCgmc2Rldi0+dWQubG9jayk7Ci0Jc2Rldi0+dWQudGNwX3NvY2tldCA9IE5VTEw7CisJc2Rldi0+dWQudGNwX3NvY2tldAk9IE5VTEw7CiAKIAlJTklUX0xJU1RfSEVBRCgmc2Rldi0+cHJpdl9pbml0KTsKIAlJTklUX0xJU1RfSEVBRCgmc2Rldi0+cHJpdl90eCk7CkBAIC0zNjMsNyArMzM2LDggQEAKIAogCXVzYmlwX3N0YXJ0X2VoKCZzZGV2LT51ZCk7CiAKLQl1c2JpcF91ZGJnKCJyZWdpc3RlciBuZXcgaW50ZXJmYWNlXG4iKTsKKwlkZXZfZGJnKCZpbnRlcmZhY2UtPmRldiwgInJlZ2lzdGVyIG5ldyBpbnRlcmZhY2VcbiIpOworCiAJcmV0dXJuIHNkZXY7CiB9CiAKQEAgLTM3MywxNCArMzQ3LDExIEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJa2ZyZWUoc2Rldik7Ci0JdXNiaXBfdWRiZygia2ZyZWUgdWRldiBva1xuIik7CisJcHJfZGVidWcoImtmcmVlIHVkZXYgb2tcbiIpOwogCiAJcmV0dXJuIDA7CiB9CiAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQogLyoKICAqIElmIGEgdXNiIGRldmljZSBoYXMgbXVsdGlwbGUgYWN0aXZlIGludGVyZmFjZXMsIHRoaXMgZHJpdmVyIGlzIGJvdW5kIHRvIGFsbAogICogdGhlIGFjdGl2ZSBpbnRlcmZhY2VzLiBIb3dldmVyLCB1c2JpcCBleHBvcnRzICphKiB1c2IgZGV2aWNlIChpLmUuLCBub3QgKmFuKgpAQCAtNDA1LDEwICszNzYsOSBAQAogCS8qIGNoZWNrIHdlIHNob3VsZCBjbGFpbSBvciBub3QgYnkgYnVzaWRfdGFibGUgKi8KIAlidXNpZF9wcml2ID0gZ2V0X2J1c2lkX3ByaXYodWRldl9idXNpZCk7CiAJaWYgKCFidXNpZF9wcml2ICB8fCAoYnVzaWRfcHJpdi0+c3RhdHVzID09IFNUVUJfQlVTSURfUkVNT1YpIHx8Ci0JCQkgICAgIChidXNpZF9wcml2LT5zdGF0dXMgPT0gU1RVQl9CVVNJRF9PVEhFUikpIHsKLQkJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LAotCQkJICJ0aGlzIGRldmljZSAlcyBpcyBub3QgaW4gbWF0Y2hfYnVzaWQgdGFibGUuIHNraXAhXG4iLAotCQkJIHVkZXZfYnVzaWQpOworCSAgICAoYnVzaWRfcHJpdi0+c3RhdHVzID09IFNUVUJfQlVTSURfT1RIRVIpKSB7CisJCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIiVzIGlzIG5vdCBpbiBtYXRjaF9idXNpZCB0YWJsZS4uLiAiCisJCQkgInNraXAhXG4iLCB1ZGV2X2J1c2lkKTsKIAogCQkvKgogCQkgKiBSZXR1cm4gdmFsdWUgc2hvdWxkIGJlIEVOT0RFViBvciBFTk9YSU8gdG8gY29udGludWUgdHJ5aW5nCkBAIC00MTgsMzYgKzM4OCwzNSBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpZiAodWRldi0+ZGVzY3JpcHRvci5iRGV2aWNlQ2xhc3MgPT0gIFVTQl9DTEFTU19IVUIpIHsKLQkJdXNiaXBfdWRiZygidGhpcyBkZXZpY2UgJXMgaXMgYSB1c2IgaHViIGRldmljZS4gc2tpcCFcbiIsCi0JCQkJCQkJCXVkZXZfYnVzaWQpOworCWlmICh1ZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VDbGFzcyA9PSBVU0JfQ0xBU1NfSFVCKSB7CisJCWRldl9kYmcoJnVkZXYtPmRldiwgIiVzIGlzIGEgdXNiIGh1YiBkZXZpY2UuLi4gc2tpcCFcbiIsCisJCQkgdWRldl9idXNpZCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWlmICghc3RyY21wKHVkZXYtPmJ1cy0+YnVzX25hbWUsICJ2aGNpX2hjZCIpKSB7Ci0JCXVzYmlwX3VkYmcoInRoaXMgZGV2aWNlICVzIGlzIGF0dGFjaGVkIG9uIHZoY2lfaGNkLiBza2lwIVxuIiwKLQkJCQkJCQkJdWRldl9idXNpZCk7CisJCWRldl9kYmcoJnVkZXYtPmRldiwgIiVzIGlzIGF0dGFjaGVkIG9uIHZoY2lfaGNkLi4uIHNraXAhXG4iLAorCQkJIHVkZXZfYnVzaWQpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQogCWlmIChidXNpZF9wcml2LT5zdGF0dXMgPT0gU1RVQl9CVVNJRF9BTExPQykgewogCQlzZGV2ID0gYnVzaWRfcHJpdi0+c2RldjsKIAkJaWYgKCFzZGV2KQogCQkJcmV0dXJuIC1FTk9ERVY7CiAKIAkJYnVzaWRfcHJpdi0+aW50ZXJmX2NvdW50Kys7Ci0JCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwKLQkJICJVU0IvSVAgU3R1YjogcmVnaXN0ZXIgYSBuZXcgaW50ZXJmYWNlICIKLQkJICIoYnVzICV1IGRldiAldSBpZm4gJXUpXG4iLCB1ZGV2LT5idXMtPmJ1c251bSwgdWRldi0+ZGV2bnVtLAotCQkgaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKKwkJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAidXNiaXAtaG9zdDogcmVnaXN0ZXIgbmV3IGludGVyZmFjZSAiCisJCQkgIihidXMgJXUgZGV2ICV1IGlmbiAldSlcbiIsCisJCQkgdWRldi0+YnVzLT5idXNudW0sIHVkZXYtPmRldm51bSwKKwkJCSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOwogCiAJCS8qIHNldCBwcml2YXRlIGRhdGEgdG8gdXNiX2ludGVyZmFjZSAqLwogCQl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgc2Rldik7CiAKIAkJZXJyID0gc3R1Yl9hZGRfZmlsZXMoJmludGVyZmFjZS0+ZGV2KTsKIAkJaWYgKGVycikgewotCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJjcmVhdGUgc3lzZnMgZmlsZXMgZm9yICVzXG4iLAorCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJzdHViX2FkZF9maWxlcyBmb3IgJXNcbiIsCiAJCQkJdWRldl9idXNpZCk7CiAJCQl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CiAJCQlidXNpZF9wcml2LT5pbnRlcmZfY291bnQtLTsKQEAgLTQ2NCw3ICs0MzMsNyBAQAogCWlmICghc2RldikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJVU0IvSVAgU3R1YjogcmVnaXN0ZXIgYSBuZXcgZGV2aWNlICIKKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJ1c2JpcC1ob3N0OiByZWdpc3RlciBuZXcgZGV2aWNlICIKIAkJICIoYnVzICV1IGRldiAldSBpZm4gJXUpXG4iLCB1ZGV2LT5idXMtPmJ1c251bSwgdWRldi0+ZGV2bnVtLAogCQkgaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKIApAQCAtNDc5LDggKzQ0OCw3IEBACiAKIAllcnIgPSBzdHViX2FkZF9maWxlcygmaW50ZXJmYWNlLT5kZXYpOwogCWlmIChlcnIpIHsKLQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJjcmVhdGUgc3lzZnMgZmlsZXMgZm9yICVzXG4iLAotCQkJdWRldl9idXNpZCk7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAic3R1Yl9hZGRfZmlsZXMgZm9yICVzXG4iLCB1ZGV2X2J1c2lkKTsKIAkJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwogCQl1c2JfcHV0X2ludGYoaW50ZXJmYWNlKTsKIApAQCAtNTA0LDEwICs0NzIsOCBAQAogCQkvKiAyLiB3YWl0IGZvciB0aGUgc3RvcCBvZiB0aGUgZXZlbnQgaGFuZGxlciAqLwogCQl1c2JpcF9zdG9wX2VoKCZidXNpZF9wcml2LT5zZGV2LT51ZCk7CiAJfQotCiB9CiAKLQogLyoKICAqIGNhbGxlZCBpbiB1c2JfZGlzY29ubmVjdCgpIG9yIHVzYl9kZXJlZ2lzdGVyKCkKICAqIGJ1dCBvbmx5IGlmIGFjdGNvbmZpZyhhY3RpdmUgY29uZmlndXJhdGlvbikgZXhpc3RzCkBAIC01MTgsMTAgKzQ4NCw5IEBACiAJY29uc3QgY2hhciAqdWRldl9idXNpZCA9IGRldl9uYW1lKGludGVyZmFjZS0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IGJ1c19pZF9wcml2ICpidXNpZF9wcml2OwogCisJZGV2X2RiZygmaW50ZXJmYWNlLT5kZXYsICJFbnRlclxuIik7CisKIAlidXNpZF9wcml2ID0gZ2V0X2J1c2lkX3ByaXYodWRldl9idXNpZCk7Ci0KLQl1c2JpcF91ZGJnKCJFbnRlclxuIik7Ci0KIAlpZiAoIWJ1c2lkX3ByaXYpIHsKIAkJQlVHKCk7CiAJCXJldHVybjsKQEAgLTUzMSw3ICs0OTYsNyBAQAogCiAJLyogZ2V0IHN0dWJfZGV2aWNlICovCiAJaWYgKCFzZGV2KSB7Ci0JCWVycigiIGNvdWxkIG5vdCBnZXQgZGV2aWNlIGZyb20gaW50ZWZhY2UgZGF0YSIpOworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgImNvdWxkIG5vdCBnZXQgZGV2aWNlIik7CiAJCS8qIEJVRygpOyAqLwogCQlyZXR1cm47CiAJfQpAQCAtNTU5LDcgKzUyNCw2IEBACiAKIAlidXNpZF9wcml2LT5pbnRlcmZfY291bnQgPSAwOwogCi0KIAkvKiAxLiBzaHV0ZG93biB0aGUgY3VycmVudCBjb25uZWN0aW9uICovCiAJc2h1dGRvd25fYnVzaWQoYnVzaWRfcHJpdik7CiAKQEAgLTU3Niw1ICs1NDAsNCBAQAogCQlidXNpZF9wcml2LT5zdGF0dXMgPSBTVFVCX0JVU0lEX09USEVSOwogCQlkZWxfbWF0Y2hfYnVzaWQoKGNoYXIgKil1ZGV2X2J1c2lkKTsKIAl9Ci0JdXNiaXBfdWRiZygiYnllXG4iKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX21haW4uYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX21haW4uYwppbmRleCAwNzZhN2U1Li5lOTA4NWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9tYWluLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfbWFpbi5jCkBAIC0xNywyNCArMTcsMTcgQEAKICAqIFVTQS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogCiAjaW5jbHVkZSAidXNiaXBfY29tbW9uLmgiCiAjaW5jbHVkZSAic3R1Yi5oIgogCi0vKiBWZXJzaW9uIEluZm9ybWF0aW9uICovCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICIxLjAiCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlRha2FoaXJvIEhpcm9mdWNoaSIKLSNkZWZpbmUgRFJJVkVSX0RFU0MgIlN0dWIgRHJpdmVyIGZvciBVU0IvSVAiCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IvSVAgSG9zdCBEcml2ZXIiCiAKIC8qIHN0dWJfcHJpdiBpcyBhbGxvY2F0ZWQgZnJvbSBzdHViX3ByaXZfY2FjaGUgKi8KIHN0cnVjdCBrbWVtX2NhY2hlICpzdHViX3ByaXZfY2FjaGU7CiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIERlZmluZSBzeXNmcyBlbnRyaWVzIGZvciB0aGUgdXNiaXAgZHJpdmVyICovCi0KLQogLyoKICAqIGJ1c2lkX3RhYmxlcyBkZWZpbmVzIG1hdGNoaW5nIGJ1c2lkcyB0aGF0IHVzYmlwIGNhbiBncmFiLiBBIHVzZXIgY2FuIGNoYW5nZQogICogZHluYW1pY2FsbHkgd2hhdCBkZXZpY2UgaXMgbG9jYWxseSB1c2VkIGFuZCB3aGF0IGRldmljZSBpcyBleHBvcnRlZCB0byBhCkBAIC00NCw3ICszNyw2IEBACiBzdGF0aWMgc3RydWN0IGJ1c19pZF9wcml2IGJ1c2lkX3RhYmxlW01BWF9CVVNJRF07CiBzdGF0aWMgc3BpbmxvY2tfdCBidXNpZF90YWJsZV9sb2NrOwogCi0KIGludCBtYXRjaF9idXNpZChjb25zdCBjaGFyICpidXNpZCkKIHsKIAlpbnQgaTsKQEAgLTE0OCwxMSArMTQwLDExIEBACiAKIAlyZXR1cm4gLTE7CiB9CisKIHN0YXRpYyB2b2lkIGluaXRfYnVzaWRfdGFibGUodm9pZCkKIHsKIAlpbnQgaTsKIAotCiAJZm9yIChpID0gMDsgaSA8IE1BWF9CVVNJRDsgaSsrKSB7CiAJCW1lbXNldChidXNpZF90YWJsZVtpXS5uYW1lLCAwLCBCVVNJRF9TSVpFKTsKIAkJYnVzaWRfdGFibGVbaV0uc3RhdHVzID0gU1RVQl9CVVNJRF9PVEhFUjsKQEAgLTE2MCwxMSArMTUyLDEyIEBACiAJCWJ1c2lkX3RhYmxlW2ldLnNkZXYgPSBOVUxMOwogCQlidXNpZF90YWJsZVtpXS5zaHV0ZG93bl9idXNpZCA9IDA7CiAJfQorCiAJc3Bpbl9sb2NrX2luaXQoJmJ1c2lkX3RhYmxlX2xvY2spOwogfQogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9tYXRjaF9idXNpZChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZGV2LCBjb25zdCBjaGFyICpidWYsCi0JCXNpemVfdCBjb3VudCkKKwkJCQkgc2l6ZV90IGNvdW50KQogewogCWludCBsZW47CiAJY2hhciBidXNpZFtCVVNJRF9TSVpFXTsKQEAgLTE4MSwzMyArMTc0LDI1IEBACiAKIAlzdHJuY3B5KGJ1c2lkLCBidWYgKyA0LCBCVVNJRF9TSVpFKTsKIAotCiAJaWYgKCFzdHJuY21wKGJ1ZiwgImFkZCAiLCA0KSkgewogCQlpZiAoYWRkX21hdGNoX2J1c2lkKGJ1c2lkKSA8IDApCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJZWxzZSB7Ci0JCQl1c2JpcF91ZGJnKCJhZGQgYnVzaWQgJXNcbiIsIGJ1c2lkKTsKKwkJCXByX2RlYnVnKCJhZGQgYnVzaWQgJXNcbiIsIGJ1c2lkKTsKIAkJCXJldHVybiBjb3VudDsKIAkJfQogCX0gZWxzZSBpZiAoIXN0cm5jbXAoYnVmLCAiZGVsICIsIDQpKSB7CiAJCWlmIChkZWxfbWF0Y2hfYnVzaWQoYnVzaWQpIDwgMCkKIAkJCXJldHVybiAtRU5PREVWOwogCQllbHNlIHsKLQkJCXVzYmlwX3VkYmcoImRlbCBidXNpZCAlc1xuIiwgYnVzaWQpOworCQkJcHJfZGVidWcoImRlbCBidXNpZCAlc1xuIiwgYnVzaWQpOwogCQkJcmV0dXJuIGNvdW50OwogCQl9CiAJfSBlbHNlCiAJCXJldHVybiAtRUlOVkFMOwogfQotCiBzdGF0aWMgRFJJVkVSX0FUVFIobWF0Y2hfYnVzaWQsIFNfSVJVU1J8U19JV1VTUiwgc2hvd19tYXRjaF9idXNpZCwKLQkJCQkJCQlzdG9yZV9tYXRjaF9idXNpZCk7Ci0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiBDbGVhbnVwIGZ1bmN0aW9ucyB1c2VkIHRvIGZyZWUgcHJpdmF0ZSBkYXRhICovCisJCSAgIHN0b3JlX21hdGNoX2J1c2lkKTsKIAogc3RhdGljIHN0cnVjdCBzdHViX3ByaXYgKnN0dWJfcHJpdl9wb3BfZnJvbV9saXN0aGVhZChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0aGVhZCkKIHsKQEAgLTI1NCwyNyArMjM5LDIzIEBACiB7CiAJc3RydWN0IHN0dWJfcHJpdiAqcHJpdjsKIAotCXVzYmlwX3VkYmcoImZyZWUgc2RldiAlcFxuIiwgc2Rldik7CisJZGV2X2RiZygmc2Rldi0+dWRldi0+ZGV2LCAiZnJlZSBzZGV2ICVwXG4iLCBzZGV2KTsKIAogCXdoaWxlICgocHJpdiA9IHN0dWJfcHJpdl9wb3Aoc2RldikpKSB7CiAJCXN0cnVjdCB1cmIgKnVyYiA9IHByaXYtPnVyYjsKIAotCQl1c2JpcF91ZGJnKCIgICBmcmVlIHVyYiAlcFxuIiwgdXJiKTsKKwkJZGV2X2RiZygmc2Rldi0+dWRldi0+ZGV2LCAiZnJlZSB1cmIgJXBcbiIsIHVyYik7CiAJCXVzYl9raWxsX3VyYih1cmIpOwogCiAJCWttZW1fY2FjaGVfZnJlZShzdHViX3ByaXZfY2FjaGUsIHByaXYpOwogCiAJCWtmcmVlKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKLQogCQlrZnJlZSh1cmItPnNldHVwX3BhY2tldCk7CiAKIAkJdXNiX2ZyZWVfdXJiKHVyYik7CiAJfQogfQogCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KIHN0YXRpYyBpbnQgX19pbml0IHVzYl9zdHViX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OwpAQCAtMjg0LDIwICsyNjUsMTcgQEAKIAkJCQkJICAgIFNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7CiAKIAlpZiAoIXN0dWJfcHJpdl9jYWNoZSkgewotCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUKLQkJICAgICAgICI6IGNyZWF0ZSBzdHViX3ByaXZfY2FjaGUgZXJyb3JcbiIpOworCQlwcl9lcnIoImNyZWF0ZSBzdHViX3ByaXZfY2FjaGUgZXJyb3JcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlyZXQgPSB1c2JfcmVnaXN0ZXIoJnN0dWJfZHJpdmVyKTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRSAiOiB1c2JfcmVnaXN0ZXIgZmFpbGVkICVkXG4iLAotCQkgICAgICAgcmV0KTsKKwkJcHJfZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkICVkXG4iLCByZXQpOwogCQlnb3RvIGVycm9yX3VzYl9yZWdpc3RlcjsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6IgotCSAgICAgICBEUklWRVJfREVTQyAiOiIgRFJJVkVSX1ZFUlNJT04gIlxuIik7CisJcHJfaW5mbyhEUklWRVJfREVTQyAiICIgVVNCSVBfVkVSU0lPTiAiXG4iKTsKIAogCWluaXRfYnVzaWRfdGFibGUoKTsKIApAQCAtMzA1LDcgKzI4Myw3IEBACiAJCQkJICZkcml2ZXJfYXR0cl9tYXRjaF9idXNpZCk7CiAKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRSAiOiBjcmVhdGUgZHJpdmVyIHN5c2ZzXG4iKTsKKwkJcHJfZXJyKCJjcmVhdGUgZHJpdmVyIHN5c2ZzXG4iKTsKIAkJZ290byBlcnJvcl9jcmVhdGVfZmlsZTsKIAl9CiAKQEAgLTMzNywzICszMTUsNCBAQAogTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKIE1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihVU0JJUF9WRVJTSU9OKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3J4LmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9yeC5jCmluZGV4IDUxZmJkMDkuLmE1YzFmYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3J4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfcnguYwpAQCAtMTcsMTMgKzE3LDEzIEBACiAgKiBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9oY2QuaD4KIAogI2luY2x1ZGUgInVzYmlwX2NvbW1vbi5oIgogI2luY2x1ZGUgInN0dWIuaCIKLSNpbmNsdWRlIDxsaW51eC91c2IvaGNkLmg+Ci0KIAogc3RhdGljIGludCBpc19jbGVhcl9oYWx0X2NtZChzdHJ1Y3QgdXJiICp1cmIpCiB7CkBAIC00Myw3ICs0Myw3IEBACiAJcmVxID0gKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKikgdXJiLT5zZXR1cF9wYWNrZXQ7CiAKIAlyZXR1cm4gKHJlcS0+YlJlcXVlc3QgPT0gVVNCX1JFUV9TRVRfSU5URVJGQUNFKSAmJgotCQkgICAocmVxLT5iUmVxdWVzdFR5cGUgPT0gVVNCX1JFQ0lQX0lOVEVSRkFDRSk7CisJCShyZXEtPmJSZXF1ZXN0VHlwZSA9PSBVU0JfUkVDSVBfSU5URVJGQUNFKTsKIH0KIAogc3RhdGljIGludCBpc19zZXRfY29uZmlndXJhdGlvbl9jbWQoc3RydWN0IHVyYiAqdXJiKQpAQCAtNTMsNyArNTMsNyBAQAogCXJlcSA9IChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICopIHVyYi0+c2V0dXBfcGFja2V0OwogCiAJcmV0dXJuIChyZXEtPmJSZXF1ZXN0ID09IFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT04pICYmCi0JCSAgIChyZXEtPmJSZXF1ZXN0VHlwZSA9PSBVU0JfUkVDSVBfREVWSUNFKTsKKwkJKHJlcS0+YlJlcXVlc3RUeXBlID09IFVTQl9SRUNJUF9ERVZJQ0UpOwogfQogCiBzdGF0aWMgaW50IGlzX3Jlc2V0X2RldmljZV9jbWQoc3RydWN0IHVyYiAqdXJiKQpAQCAtNjcsOCArNjcsOCBAQAogCWluZGV4ID0gbGUxNl90b19jcHUocmVxLT53SW5kZXgpOwogCiAJaWYgKChyZXEtPmJSZXF1ZXN0ID09IFVTQl9SRVFfU0VUX0ZFQVRVUkUpICYmCi0JCQkocmVxLT5iUmVxdWVzdFR5cGUgPT0gVVNCX1JUX1BPUlQpICYmCi0JCQkodmFsdWUgPT0gVVNCX1BPUlRfRkVBVF9SRVNFVCkpIHsKKwkgICAgKHJlcS0+YlJlcXVlc3RUeXBlID09IFVTQl9SVF9QT1JUKSAmJgorCSAgICAodmFsdWUgPT0gVVNCX1BPUlRfRkVBVF9SRVNFVCkpIHsKIAkJdXNiaXBfZGJnX3N0dWJfcngoInJlc2V0X2RldmljZV9jbWQsIHBvcnQgJXVcbiIsIGluZGV4KTsKIAkJcmV0dXJuIDE7CiAJfSBlbHNlCkBAIC0xMDIsMTEgKzEwMiwxMSBAQAogCiAJcmV0ID0gdXNiX2NsZWFyX2hhbHQodXJiLT5kZXYsIHRhcmdldF9waXBlKTsKIAlpZiAocmV0IDwgMCkKLQkJdXNiaXBfdWluZm8oImNsZWFyX2hhbHQgZXJyb3I6IGRldm51bSAlZCBlbmRwICVkLCAlZFxuIiwKLQkJCQkJdXJiLT5kZXYtPmRldm51bSwgdGFyZ2V0X2VuZHAsIHJldCk7CisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICJ1c2JfY2xlYXJfaGFsdCBlcnJvcjogZGV2bnVtICVkIGVuZHAgIgorCQkJIiVkIHJldCAlZFxuIiwgdXJiLT5kZXYtPmRldm51bSwgdGFyZ2V0X2VuZHAsIHJldCk7CiAJZWxzZQotCQl1c2JpcF91aW5mbygiY2xlYXJfaGFsdCBkb25lOiBkZXZudW0gJWQgZW5kcCAlZFxuIiwKLQkJCQkJdXJiLT5kZXYtPmRldm51bSwgdGFyZ2V0X2VuZHApOworCQlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwgInVzYl9jbGVhcl9oYWx0IGRvbmU6IGRldm51bSAlZCBlbmRwICIKKwkJCSAiJWRcbiIsIHVyYi0+ZGV2LT5kZXZudW0sIHRhcmdldF9lbmRwKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMjIsMTcgKzEyMiwxNiBAQAogCWFsdGVybmF0ZSA9IGxlMTZfdG9fY3B1KHJlcS0+d1ZhbHVlKTsKIAlpbnRlcmZhY2UgPSBsZTE2X3RvX2NwdShyZXEtPndJbmRleCk7CiAKLQl1c2JpcF9kYmdfc3R1Yl9yeCgic2V0X2ludGVyZmFjZTogaW5mICV1IGFsdCAldVxuIiwgaW50ZXJmYWNlLAotCQkJCQkJCQlhbHRlcm5hdGUpOworCXVzYmlwX2RiZ19zdHViX3J4KCJzZXRfaW50ZXJmYWNlOiBpbmYgJXUgYWx0ICV1XG4iLAorCQkJICBpbnRlcmZhY2UsIGFsdGVybmF0ZSk7CiAKIAlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZSh1cmItPmRldiwgaW50ZXJmYWNlLCBhbHRlcm5hdGUpOwogCWlmIChyZXQgPCAwKQotCQl1c2JpcF91aW5mbygic2V0X2ludGVyZmFjZSBlcnJvcjogaW5mICV1IGFsdCAldSwgJWRcbiIsCi0JCQkJCWludGVyZmFjZSwgYWx0ZXJuYXRlLCByZXQpOworCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAidXNiX3NldF9pbnRlcmZhY2UgZXJyb3I6IGluZiAldSBhbHQgIgorCQkJIiV1IHJldCAlZFxuIiwgaW50ZXJmYWNlLCBhbHRlcm5hdGUsIHJldCk7CiAJZWxzZQotCQl1c2JpcF91aW5mbygic2V0X2ludGVyZmFjZSBkb25lOiBpbmYgJXUgYWx0ICV1XG4iLAotCQkJCQkJCWludGVyZmFjZSwKLQkJCQkJCQlhbHRlcm5hdGUpOworCQlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwgInVzYl9zZXRfaW50ZXJmYWNlIGRvbmU6IGluZiAldSBhbHQgIgorCQkJICIldVxuIiwgaW50ZXJmYWNlLCBhbHRlcm5hdGUpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE2MSw5ICsxNjAsOCBAQAogCSAqIEEgdXNlciBtYXkgbmVlZCB0byBzZXQgYSBzcGVjaWFsIGNvbmZpZ3VyYXRpb24gdmFsdWUgYmVmb3JlCiAJICogZXhwb3J0aW5nIHRoZSBkZXZpY2UuCiAJICovCi0JdXNiaXBfdWluZm8oInNldF9jb25maWd1cmF0aW9uICglZCkgdG8gJXNcbiIsIGNvbmZpZywKLQkJCQkJCWRldl9uYW1lKCZ1cmItPmRldi0+ZGV2KSk7Ci0JdXNiaXBfdWluZm8oImJ1dCwgc2tpcCFcbiIpOworCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAidXNiX3NldF9jb25maWd1cmF0aW9uICVkIHRvICVzLi4uIHNraXAhXG4iLAorCQkgY29uZmlnLCBkZXZfbmFtZSgmdXJiLT5kZXYtPmRldikpOwogCiAJcmV0dXJuIDA7CiAJLyogcmV0dXJuIHVzYl9kcml2ZXJfc2V0X2NvbmZpZ3VyYXRpb24odXJiLT5kZXYsIGNvbmZpZyk7ICovCkBAIC0xNzQsNyArMTcyLDcgQEAKIAlzdHJ1Y3Qgc3R1Yl9wcml2ICpwcml2ID0gKHN0cnVjdCBzdHViX3ByaXYgKikgdXJiLT5jb250ZXh0OwogCXN0cnVjdCBzdHViX2RldmljZSAqc2RldiA9IHByaXYtPnNkZXY7CiAKLQl1c2JpcF91aW5mbygicmVzZXRfZGV2aWNlICVzXG4iLCBkZXZfbmFtZSgmdXJiLT5kZXYtPmRldikpOworCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAidXNiX3F1ZXVlX3Jlc2V0X2RldmljZVxuIik7CiAKIAkvKgogCSAqIHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQgY2F1c2VkIGEgZGVhZGxvY2s6IGl0IGNhdXNlcyB0aGUgZHJpdmVyCkBAIC0yMjgsMTMgKzIyNiwxMiBAQAogICogU2VlIGFsc28gY29tbWVudHMgYWJvdXQgdW5saW5raW5nIHN0cmF0ZWd5IGluIHZoY2lfaGNkLmMuCiAgKi8KIHN0YXRpYyBpbnQgc3R1Yl9yZWN2X2NtZF91bmxpbmsoc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2LAotCQkJCQkJc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1KQorCQkJCXN0cnVjdCB1c2JpcF9oZWFkZXIgKnBkdSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3RydWN0IHN0dWJfcHJpdiAqcHJpdjsKIAotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwcml2LCAmc2Rldi0+cHJpdl9pbml0LCBsaXN0KSB7CkBAIC0yODksNyArMjg2LDcgQEAKIAl9CiAKIAl1c2JpcF9kYmdfc3R1Yl9yeCgic2VxbnVtICVkIGlzIG5vdCBwZW5kaW5nXG4iLAotCQkJCQkJcGR1LT51LmNtZF91bmxpbmsuc2VxbnVtKTsKKwkJCSAgcGR1LT51LmNtZF91bmxpbmsuc2VxbnVtKTsKIAogCS8qCiAJICogVGhlIHVyYiBvZiB0aGUgdW5saW5rIHRhcmdldCBpcyBub3QgZm91bmQgaW4gcHJpdl9pbml0IHF1ZXVlLiBJdCB3YXMKQEAgLTMwMSw3ICsyOTgsNiBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CiAKLQogCXJldHVybiAwOwogfQogCkBAIC0zNzAsOCArMzY2LDYgQEAKIAl9CiAKIAllcGQgPSAmZXAtPmRlc2M7Ci0KLQogI2lmIDAKIAkvKiBlcG51bSAwIGlzIGFsd2F5cyBjb250cm9sICovCiAJaWYgKGVwbnVtID09IDApIHsKQEAgLTM4MSw3ICszNzUsNiBAQAogCQkJcmV0dXJuIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKTsKIAl9CiAjZW5kaWYKLQogCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9jb250cm9sKGVwZCkpIHsKIAkJaWYgKGRpciA9PSBVU0JJUF9ESVJfT1VUKQogCQkJcmV0dXJuIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCBlcG51bSk7CkBAIC00MzAsMTkgKzQyMywxOSBAQAogCQlyZXR1cm47CiAKIAllcCA9ICh1c2JfcGlwZWluKHVyYi0+cGlwZSkgPyBkZXYtPmVwX2luIDogZGV2LT5lcF9vdXQpCi0JCQlbdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpXTsKKwkJW3VzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKV07CiAJaWYgKCFlcCkKIAkJcmV0dXJuOwogCiAJeGZlcnR5cGUgPSB1c2JfZW5kcG9pbnRfdHlwZSgmZXAtPmRlc2MpOwogCWlmICh4ZmVydHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MKSB7CiAJCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKnNldHVwID0KLQkJCQkoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKSB1cmItPnNldHVwX3BhY2tldDsKKwkJCShzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICopIHVyYi0+c2V0dXBfcGFja2V0OwogCiAJCWlmICghc2V0dXApCiAJCQlyZXR1cm47CiAJCWlzX291dCA9ICEoc2V0dXAtPmJSZXF1ZXN0VHlwZSAmIFVTQl9ESVJfSU4pIHx8Ci0JCQkJIXNldHVwLT53TGVuZ3RoOworCQkJIXNldHVwLT53TGVuZ3RoOwogCX0gZWxzZSB7CiAJCWlzX291dCA9IHVzYl9lbmRwb2ludF9kaXJfb3V0KCZlcC0+ZGVzYyk7CiAJfQpAQCAtNDc4LDcgKzQ3MSw2IEBACiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBzZGV2LT51ZGV2OwogCWludCBwaXBlID0gZ2V0X3BpcGUoc2RldiwgcGR1LT5iYXNlLmVwLCBwZHUtPmJhc2UuZGlyZWN0aW9uKTsKIAotCiAJcHJpdiA9IHN0dWJfcHJpdl9hbGxvYyhzZGV2LCBwZHUpOwogCWlmICghcHJpdikKIAkJcmV0dXJuOwpAQCAtNDg2LDcgKzQ3OCw3IEBACiAJLyogc2V0dXAgYSB1cmIgKi8KIAlpZiAodXNiX3BpcGVpc29jKHBpcGUpKQogCQlwcml2LT51cmIgPSB1c2JfYWxsb2NfdXJiKHBkdS0+dS5jbWRfc3VibWl0Lm51bWJlcl9vZl9wYWNrZXRzLAotCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJCQkJICBHRlBfS0VSTkVMKTsKIAllbHNlCiAJCXByaXYtPnVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CiAKQEAgLTUwMCw3ICs0OTIsNyBAQAogCWlmIChwZHUtPnUuY21kX3N1Ym1pdC50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID4gMCkgewogCQlwcml2LT51cmItPnRyYW5zZmVyX2J1ZmZlciA9CiAJCQlremFsbG9jKHBkdS0+dS5jbWRfc3VibWl0LnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCi0JCQkJCQkJCUdGUF9LRVJORUwpOworCQkJCUdGUF9LRVJORUwpOwogCQlpZiAoIXByaXYtPnVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7CiAJCQlkZXZfZXJyKCZzZGV2LT5pbnRlcmZhY2UtPmRldiwgIm1hbGxvYyB4X2J1ZmZcbiIpOwogCQkJdXNiaXBfZXZlbnRfYWRkKHVkLCBTREVWX0VWRU5UX0VSUk9SX01BTExPQyk7CkBAIC01NDEsNyArNTMzLDcgQEAKIAogCWlmIChyZXQgPT0gMCkKIAkJdXNiaXBfZGJnX3N0dWJfcngoInN1Ym1pdCB1cmIgb2ssIHNlcW51bSAldVxuIiwKLQkJCQkJCQlwZHUtPmJhc2Uuc2VxbnVtKTsKKwkJCQkgIHBkdS0+YmFzZS5zZXFudW0pOwogCWVsc2UgewogCQlkZXZfZXJyKCZzZGV2LT5pbnRlcmZhY2UtPmRldiwgInN1Ym1pdF91cmIgZXJyb3IsICVkXG4iLCByZXQpOwogCQl1c2JpcF9kdW1wX2hlYWRlcihwZHUpOwpAQCAtNjAyLDkgKzU5NCw4IEBACiAJCS8qIE5PVFJFQUNIRUQgKi8KIAkJZGV2X2VycihkZXYsICJ1bmtub3duIHBkdVxuIik7CiAJCXVzYmlwX2V2ZW50X2FkZCh1ZCwgU0RFVl9FVkVOVF9FUlJPUl9UQ1ApOwotCQlyZXR1cm47CisJCWJyZWFrOwogCX0KLQogfQogCiBpbnQgc3R1Yl9yeF9sb29wKHZvaWQgKmRhdGEpCkBAIC02MTcsNSArNjA4LDYgQEAKIAogCQlzdHViX3J4X3BkdSh1ZCk7CiAJfQorCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl90eC5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfdHguYwppbmRleCA2NGE1MmIyLi5mZGEyYmM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl90eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3R4LmMKQEAgLTE3LDEzICsxNywxMiBAQAogICogVVNBLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgogCiAjaW5jbHVkZSAidXNiaXBfY29tbW9uLmgiCiAjaW5jbHVkZSAic3R1Yi5oIgogCi0KIHN0YXRpYyB2b2lkIHN0dWJfZnJlZV9wcml2X2FuZF91cmIoc3RydWN0IHN0dWJfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgdXJiICp1cmIgPSBwcml2LT51cmI7CkBAIC03MSwyOCArNzAsMjkgQEAKIAogCXVzYmlwX2RiZ19zdHViX3R4KCJjb21wbGV0ZSEgc3RhdHVzICVkXG4iLCB1cmItPnN0YXR1cyk7CiAKLQogCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKIAljYXNlIDA6CiAJCS8qIE9LICovCiAJCWJyZWFrOwogCWNhc2UgLUVOT0VOVDoKLQkJdXNiaXBfdWluZm8oInN0b3BwZWQgYnkgYSBjYWxsIG9mIHVzYl9raWxsX3VyYigpIGJlY2F1c2Ugb2YiCi0JCQkJCSJjbGVhbmluZyB1cCBhIHZpcnR1YWwgY29ubmVjdGlvblxuIik7CisJCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAic3RvcHBlZCBieSBhIGNhbGwgdG8gdXNiX2tpbGxfdXJiKCkgIgorCQkJICJiZWNhdXNlIG9mIGNsZWFuaW5nIHVwIGEgdmlydHVhbCBjb25uZWN0aW9uXG4iKTsKIAkJcmV0dXJuOwogCWNhc2UgLUVDT05OUkVTRVQ6Ci0JCXVzYmlwX3VpbmZvKCJ1bmxpbmtlZCBieSBhIGNhbGwgb2YgdXNiX3VubGlua191cmIoKVxuIik7CisJCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAidW5saW5rZWQgYnkgYSBjYWxsIHRvICIKKwkJCSAidXNiX3VubGlua191cmIoKVxuIik7CiAJCWJyZWFrOwogCWNhc2UgLUVQSVBFOgotCQl1c2JpcF91aW5mbygiZW5kcG9pbnQgJWQgaXMgc3RhbGxlZFxuIiwKLQkJCQkJCXVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSk7CisJCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAiZW5kcG9pbnQgJWQgaXMgc3RhbGxlZFxuIiwKKwkJCSB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSkpOwogCQlicmVhazsKIAljYXNlIC1FU0hVVERPV046Ci0JCXVzYmlwX3VpbmZvKCJkZXZpY2UgcmVtb3ZlZD9cbiIpOworCQlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwgImRldmljZSByZW1vdmVkP1xuIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXVzYmlwX3VpbmZvKCJ1cmIgY29tcGxldGlvbiB3aXRoIG5vbi16ZXJvIHN0YXR1cyAlZFxuIiwKLQkJCQkJCQl1cmItPnN0YXR1cyk7CisJCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAidXJiIGNvbXBsZXRpb24gd2l0aCBub24temVybyBzdGF0dXMgIgorCQkJICIlZFxuIiwgdXJiLT5zdGF0dXMpOworCQlicmVhazsKIAl9CiAKIAkvKiBsaW5rIGEgdXJiIHRvIHRoZSBxdWV1ZSBvZiB0eC4gKi8KQEAgLTEwNCwyNSArMTA0LDIwIEBACiAJfSBlbHNlCiAJCWxpc3RfbW92ZV90YWlsKCZwcml2LT5saXN0LCAmc2Rldi0+cHJpdl90eCk7CiAKLQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOwogCiAJLyogd2FrZSB1cCB0eF90aHJlYWQgKi8KIAl3YWtlX3VwKCZzZGV2LT50eF93YWl0cSk7CiB9CiAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIGZpbGwgUERVICovCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9iYXNlX3BkdShzdHJ1Y3QgdXNiaXBfaGVhZGVyX2Jhc2ljICpiYXNlLAotCQlfX3UzMiBjb21tYW5kLCBfX3UzMiBzZXFudW0pCisJCQkJICBfX3UzMiBjb21tYW5kLCBfX3UzMiBzZXFudW0pCiB7CiAJYmFzZS0+Y29tbWFuZCA9IGNvbW1hbmQ7CiAJYmFzZS0+c2VxbnVtICA9IHNlcW51bTsKIAliYXNlLT5kZXZpZCAgID0gMDsKIAliYXNlLT5lcCAgICAgID0gMDsKLQliYXNlLT5kaXJlY3Rpb24gICA9IDA7CisJYmFzZS0+ZGlyZWN0aW9uID0gMDsKIH0KIAogc3RhdGljIHZvaWQgc2V0dXBfcmV0X3N1Ym1pdF9wZHUoc3RydWN0IHVzYmlwX2hlYWRlciAqcnBkdSwgc3RydWN0IHVyYiAqdXJiKQpAQCAtMTMwLDIyICsxMjUsMTYgQEAKIAlzdHJ1Y3Qgc3R1Yl9wcml2ICpwcml2ID0gKHN0cnVjdCBzdHViX3ByaXYgKikgdXJiLT5jb250ZXh0OwogCiAJc2V0dXBfYmFzZV9wZHUoJnJwZHUtPmJhc2UsIFVTQklQX1JFVF9TVUJNSVQsIHByaXYtPnNlcW51bSk7Ci0KIAl1c2JpcF9wYWNrX3BkdShycGR1LCB1cmIsIFVTQklQX1JFVF9TVUJNSVQsIDEpOwogfQogCiBzdGF0aWMgdm9pZCBzZXR1cF9yZXRfdW5saW5rX3BkdShzdHJ1Y3QgdXNiaXBfaGVhZGVyICpycGR1LAotCQlzdHJ1Y3Qgc3R1Yl91bmxpbmsgKnVubGluaykKKwkJCQkgc3RydWN0IHN0dWJfdW5saW5rICp1bmxpbmspCiB7CiAJc2V0dXBfYmFzZV9wZHUoJnJwZHUtPmJhc2UsIFVTQklQX1JFVF9VTkxJTkssIHVubGluay0+c2VxbnVtKTsKLQogCXJwZHUtPnUucmV0X3VubGluay5zdGF0dXMgPSB1bmxpbmstPnN0YXR1czsKIH0KIAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogc2VuZCBSRVRfU1VCTUlUICovCi0KIHN0YXRpYyBzdHJ1Y3Qgc3R1Yl9wcml2ICpkZXF1ZXVlX2Zyb21fcHJpdl90eChzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTIwMyw3ICsxOTIsNyBAQAogCQkvKiAxLiBzZXR1cCB1c2JpcF9oZWFkZXIgKi8KIAkJc2V0dXBfcmV0X3N1Ym1pdF9wZHUoJnBkdV9oZWFkZXIsIHVyYik7CiAJCXVzYmlwX2RiZ19zdHViX3R4KCJzZXR1cCB0eGRhdGEgc2VxbnVtOiAlZCB1cmI6ICVwXG4iLAotCQkJCQkJcGR1X2hlYWRlci5iYXNlLnNlcW51bSwgdXJiKTsKKwkJCQkgIHBkdV9oZWFkZXIuYmFzZS5zZXFudW0sIHVyYik7CiAJCS8qdXNiaXBfZHVtcF9oZWFkZXIocGR1X2hlYWRlcik7Ki8KIAkJdXNiaXBfaGVhZGVyX2NvcnJlY3RfZW5kaWFuKCZwZHVfaGVhZGVyLCAxKTsKIApAQCAtMjE0LDE0ICsyMDMsMTQgQEAKIAogCQkvKiAyLiBzZXR1cCB0cmFuc2ZlciBidWZmZXIgKi8KIAkJaWYgKHVzYl9waXBlaW4odXJiLT5waXBlKSAmJgotCQkJCXVzYl9waXBldHlwZSh1cmItPnBpcGUpICE9IFBJUEVfSVNPQ0hST05PVVMgJiYKLQkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoID4gMCkgeworCQkgICAgdXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgIT0gUElQRV9JU09DSFJPTk9VUyAmJgorCQkgICAgdXJiLT5hY3R1YWxfbGVuZ3RoID4gMCkgewogCQkJaW92W2lvdm51bV0uaW92X2Jhc2UgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKIAkJCWlvdltpb3ZudW1dLmlvdl9sZW4gID0gdXJiLT5hY3R1YWxfbGVuZ3RoOwogCQkJaW92bnVtKys7CiAJCQl0eHNpemUgKz0gdXJiLT5hY3R1YWxfbGVuZ3RoOwogCQl9IGVsc2UgaWYgKHVzYl9waXBlaW4odXJiLT5waXBlKSAmJgotCQkJCXVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfSVNPQ0hST05PVVMpIHsKKwkJCSAgIHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfSVNPQ0hST05PVVMpIHsKIAkJCS8qCiAJCQkgKiBGb3IgaXNvY2hyb25vdXMgcGFja2V0czogYWN0dWFsIGxlbmd0aCBpcyB0aGUgc3VtIG9mCiAJCQkgKiB0aGUgYWN0dWFsIGxlbmd0aCBvZiB0aGUgaW5kaXZpZHVhbCwgcGFja2V0cywgYnV0IGFzCkBAIC0yMzIsMTggKzIyMSwyMyBAQAogCiAJCQlpbnQgaTsKIAkJCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKLQkJCQlpb3ZbaW92bnVtXS5pb3ZfYmFzZSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQ7Ci0JCQkJaW92W2lvdm51bV0uaW92X2xlbiA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aDsKKwkJCQlpb3ZbaW92bnVtXS5pb3ZfYmFzZSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyICsKKwkJCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQ7CisJCQkJaW92W2lvdm51bV0uaW92X2xlbiA9CisJCQkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aDsKIAkJCQlpb3ZudW0rKzsKIAkJCQl0eHNpemUgKz0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoOwogCQkJfQogCiAJCQlpZiAodHhzaXplICE9IHNpemVvZihwZHVfaGVhZGVyKSArIHVyYi0+YWN0dWFsX2xlbmd0aCkgewogCQkJCWRldl9lcnIoJnNkZXYtPmludGVyZmFjZS0+ZGV2LAotCQkJCQkiYWN0dWFsIGxlbmd0aCBvZiB1cmIgKCVkKSBkb2VzIG5vdCBtYXRjaCBpc28gcGFja2V0IHNpemVzICglZClcbiIsCi0JCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCwgdHhzaXplLXNpemVvZihwZHVfaGVhZGVyKSk7CisJCQkJCSJhY3R1YWwgbGVuZ3RoIG9mIHVyYiAlZCBkb2VzIG5vdCAiCisJCQkJCSJtYXRjaCBpc28gcGFja2V0IHNpemVzICVsdVxuIiwKKwkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLAorCQkJCQl0eHNpemUtc2l6ZW9mKHBkdV9oZWFkZXIpKTsKIAkJCQlrZnJlZShpb3YpOwotCQkJCXVzYmlwX2V2ZW50X2FkZCgmc2Rldi0+dWQsIFNERVZfRVZFTlRfRVJST1JfVENQKTsKKwkJCQl1c2JpcF9ldmVudF9hZGQoJnNkZXYtPnVkLAorCQkJCQkJU0RFVl9FVkVOVF9FUlJPUl9UQ1ApOwogCQkJICAgcmV0dXJuIC0xOwogCQkJfQogCQl9CkBAIC0yODUsMjAgKzI3OSwxNCBAQAogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKLQogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwcml2LCB0bXAsICZzZGV2LT5wcml2X2ZyZWUsIGxpc3QpIHsKIAkJc3R1Yl9mcmVlX3ByaXZfYW5kX3VyYihwcml2KTsKIAl9Ci0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiB0b3RhbF9zaXplOwogfQogCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBzZW5kIFJFVF9VTkxJTksgKi8KLQogc3RhdGljIHN0cnVjdCBzdHViX3VubGluayAqZGVxdWV1ZV9mcm9tX3VubGlua190eChzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTMxNyw3ICszMDUsNiBAQAogCXJldHVybiBOVUxMOwogfQogCi0KIHN0YXRpYyBpbnQgc3R1Yl9zZW5kX3JldF91bmxpbmsoc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0zNTgsMTMgKzM0NSwxMCBAQAogCQkJcmV0dXJuIC0xOwogCQl9CiAKLQogCQl1c2JpcF9kYmdfc3R1Yl90eCgic2VuZCB0eGRhdGFcbiIpOwotCiAJCXRvdGFsX3NpemUgKz0gdHhzaXplOwogCX0KIAotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVubGluaywgdG1wLCAmc2Rldi0+dW5saW5rX2ZyZWUsIGxpc3QpIHsKQEAgLTM3Nyw5ICszNjEsNiBAQAogCXJldHVybiB0b3RhbF9zaXplOwogfQogCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KIGludCBzdHViX3R4X2xvb3Aodm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCA9IGRhdGE7CkBAIC00MTAsOSArMzkxLDkgQEAKIAkJCWJyZWFrOwogCiAJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShzZGV2LT50eF93YWl0cSwKLQkJCQkoIWxpc3RfZW1wdHkoJnNkZXYtPnByaXZfdHgpIHx8Ci0JCQkJICFsaXN0X2VtcHR5KCZzZGV2LT51bmxpbmtfdHgpIHx8Ci0JCQkJIGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkpOworCQkJCQkgKCFsaXN0X2VtcHR5KCZzZGV2LT5wcml2X3R4KSB8fAorCQkJCQkgICFsaXN0X2VtcHR5KCZzZGV2LT51bmxpbmtfdHgpIHx8CisJCQkJCSAga3RocmVhZF9zaG91bGRfc3RvcCgpKSk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNiaXBfY29tbW9uLmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNiaXBfY29tbW9uLmMKaW5kZXggN2IxZmU0NS4uNDMzYTNiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzYmlwX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2JpcF9jb21tb24uYwpAQCAtMTcsNTMgKzE3LDQ2IEBACiAgKiBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdGNwLmg+Ci0jaW5jbHVkZSA8bGludXgvaW4uaD4KLSNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bmV0L3NvY2suaD4KKwogI2luY2x1ZGUgInVzYmlwX2NvbW1vbi5oIgogCi0vKiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICIxLjAiCi0jZGVmaW5lIERSSVZFUl9BVVRIT1IgIlRha2FoaXJvIEhpcm9mdWNoaSA8aGlyb2Z1Y2hpIF9hdF8gdXNlcnMuc291cmNlZm9yZ2UubmV0PiIKLSNkZWZpbmUgRFJJVkVSX0RFU0MgInVzYmlwIGNvbW1vbiBkcml2ZXIiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlRha2FoaXJvIEhpcm9mdWNoaSA8aGlyb2Z1Y2hpQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IvSVAgQ29yZSIKIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIGRlYnVnIHJvdXRpbmVzICovCi0KLSNpZmRlZiBDT05GSUdfVVNCX0lQX0RFQlVHX0VOQUJMRQorI2lmZGVmIENPTkZJR19VU0JJUF9ERUJVRwogdW5zaWduZWQgbG9uZyB1c2JpcF9kZWJ1Z19mbGFnID0gMHhmZmZmZmZmZjsKICNlbHNlCiB1bnNpZ25lZCBsb25nIHVzYmlwX2RlYnVnX2ZsYWc7CiAjZW5kaWYKIEVYUE9SVF9TWU1CT0xfR1BMKHVzYmlwX2RlYnVnX2ZsYWcpOwogCi0KIC8qIEZJWE1FICovCiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl91c2JpcF9kZWJ1ZzsKIEVYUE9SVF9TWU1CT0xfR1BMKGRldl9hdHRyX3VzYmlwX2RlYnVnKTsKIAotCiBzdGF0aWMgc3NpemVfdCBzaG93X2ZsYWcoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkJCQkJY2hhciAqYnVmKQorCQkJIGNoYXIgKmJ1ZikKIHsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlbHhcbiIsIHVzYmlwX2RlYnVnX2ZsYWcpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9mbGFnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzc2NhbmYoYnVmLCAiJWx4IiwgJnVzYmlwX2RlYnVnX2ZsYWcpOwotCiAJcmV0dXJuIGNvdW50OwogfQogREVWSUNFX0FUVFIodXNiaXBfZGVidWcsIChTX0lSVUdPIHwgU19JV1VTUiksIHNob3dfZmxhZywgc3RvcmVfZmxhZyk7CiAKIHN0YXRpYyB2b2lkIHVzYmlwX2R1bXBfYnVmZmVyKGNoYXIgKmJ1ZmYsIGludCBidWZmbGVuKQogewotCXByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsICJ1c2ItaXAiLCBEVU1QX1BSRUZJWF9PRkZTRVQsIDE2LCA0LAorCXByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsICJ1c2JpcC1jb3JlIiwgRFVNUF9QUkVGSVhfT0ZGU0VULCAxNiwgNCwKIAkJICAgICAgIGJ1ZmYsIGJ1ZmZsZW4sIGZhbHNlKTsKIH0KIApAQCAtNzQsMjkgKzY3LDI1IEBACiAJdW5zaWduZWQgY2hhciBkZXYgPSB1c2JfcGlwZWRldmljZShwKTsKIAl1bnNpZ25lZCBjaGFyIGRpciA9IHVzYl9waXBlaW4ocCk7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiZGV2KCVkKSAiLCBkZXYpOwotCXByaW50ayhLRVJOX0RFQlVHICJlcCglZCkgIiwgIGVwKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXMgIiwgZGlyID8gIklOIiA6ICJPVVQiKTsKKwlwcl9kZWJ1ZygiZGV2KCVkKSBlcCglZCkgWyVzXSAiLCBkZXYsIGVwLCBkaXIgPyAiSU4iIDogIk9VVCIpOwogCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgotCQlwcmludGsoS0VSTl9ERUJVRyAiJXMgIiwgIklTTyIpOworCQlwcl9kZWJ1ZygiSVNPXG4iKTsKIAkJYnJlYWs7CiAJY2FzZSBQSVBFX0lOVEVSUlVQVDoKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzICIsICJJTlQiKTsKKwkJcHJfZGVidWcoIklOVFxuIik7CiAJCWJyZWFrOwogCWNhc2UgUElQRV9DT05UUk9MOgotCQlwcmludGsoS0VSTl9ERUJVRyAiJXMgIiwgIkNUTCIpOworCQlwcl9kZWJ1ZygiQ1RSTFxuIik7CiAJCWJyZWFrOwogCWNhc2UgUElQRV9CVUxLOgotCQlwcmludGsoS0VSTl9ERUJVRyAiJXMgIiwgIkJMSyIpOworCQlwcl9kZWJ1ZygiQlVMS1xuIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0RFQlVHICJFUlIiKTsKKwkJcHJfZGVidWcoIkVSUlxuIik7CisJCWJyZWFrOwogCX0KLQotCXByaW50ayhLRVJOX0RFQlVHICJcbiIpOwotCiB9CiAKIHN0YXRpYyB2b2lkIHVzYmlwX2R1bXBfdXNiX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKQEAgLTEwNCw2MCArOTMsNTkgQEAKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmdWRldi0+ZGV2OwogCWludCBpOwogCi0JZGV2X2RiZyhkZXYsICIgICAgICAgZGV2bnVtKCVkKSBkZXZwYXRoKCVzKSIsCisJZGV2X2RiZyhkZXYsICIgICAgICAgZGV2bnVtKCVkKSBkZXZwYXRoKCVzKSAiLAogCQl1ZGV2LT5kZXZudW0sIHVkZXYtPmRldnBhdGgpOwogCiAJc3dpdGNoICh1ZGV2LT5zcGVlZCkgewogCWNhc2UgVVNCX1NQRUVEX0hJR0g6Ci0JCXByaW50ayhLRVJOX0RFQlVHICIgU1BEX0hJR0giKTsKKwkJcHJfZGVidWcoIlNQRF9ISUdIICIpOwogCQlicmVhazsKIAljYXNlIFVTQl9TUEVFRF9GVUxMOgotCQlwcmludGsoS0VSTl9ERUJVRyAiIFNQRF9GVUxMIik7CisJCXByX2RlYnVnKCJTUERfRlVMTCAiKTsKIAkJYnJlYWs7CiAJY2FzZSBVU0JfU1BFRURfTE9XOgotCQlwcmludGsoS0VSTl9ERUJVRyAiIFNQRF9MT1ciKTsKKwkJcHJfZGVidWcoIlNQRF9MT1cgIik7CiAJCWJyZWFrOwogCWNhc2UgVVNCX1NQRUVEX1VOS05PV046Ci0JCXByaW50ayhLRVJOX0RFQlVHICIgU1BEX1VOS05PV04iKTsKKwkJcHJfZGVidWcoIlNQRF9VTktOT1dOICIpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9ERUJVRyAiIFNQRF9FUlJPUiIpOworCQlwcl9kZWJ1ZygiU1BEX0VSUk9SICIpOworCQlicmVhazsKIAl9CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiIHR0ICVwLCB0dHBvcnQgJWQiLCB1ZGV2LT50dCwgdWRldi0+dHRwb3J0KTsKLQlwcmludGsoS0VSTl9ERUJVRyAiXG4iKTsKKwlwcl9kZWJ1ZygidHQgJXAsIHR0cG9ydCAlZFxuIiwgdWRldi0+dHQsIHVkZXYtPnR0cG9ydCk7CiAKIAlkZXZfZGJnKGRldiwgIiAgICAgICAgICAgICAgICAgICAgIik7CiAJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCi0JCXByaW50ayhLRVJOX0RFQlVHICIgJTJ1IiwgaSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIlxuIik7CisJCXByX2RlYnVnKCIgJTJ1IiwgaSk7CisJcHJfZGVidWcoIlxuIik7CiAKIAlkZXZfZGJnKGRldiwgIiAgICAgICB0b2dnbGUwKElOKSA6Iik7CiAJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCi0JCXByaW50ayhLRVJOX0RFQlVHICIgJTJ1IiwgKHVkZXYtPnRvZ2dsZVswXSAmICgxIDw8IGkpKSA/IDEgOiAwKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiXG4iKTsKKwkJcHJfZGVidWcoIiAlMnUiLCAodWRldi0+dG9nZ2xlWzBdICYgKDEgPDwgaSkpID8gMSA6IDApOworCXByX2RlYnVnKCJcbiIpOwogCiAJZGV2X2RiZyhkZXYsICIgICAgICAgdG9nZ2xlMShPVVQpOiIpOwogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQotCQlwcmludGsoS0VSTl9ERUJVRyAiICUydSIsICh1ZGV2LT50b2dnbGVbMV0gJiAoMSA8PCBpKSkgPyAxIDogMCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIlxuIik7Ci0KKwkJcHJfZGVidWcoIiAlMnUiLCAodWRldi0+dG9nZ2xlWzFdICYgKDEgPDwgaSkpID8gMSA6IDApOworCXByX2RlYnVnKCJcbiIpOwogCiAJZGV2X2RiZyhkZXYsICIgICAgICAgZXBtYXhwX2luICAgOiIpOwogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAJCWlmICh1ZGV2LT5lcF9pbltpXSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIgJTJ1IiwKLQkJCSAgICAgbGUxNl90b19jcHUodWRldi0+ZXBfaW5baV0tPmRlc2Mud01heFBhY2tldFNpemUpKTsKKwkJCXByX2RlYnVnKCIgJTJ1IiwKKwkJCSAgICBsZTE2X3RvX2NwdSh1ZGV2LT5lcF9pbltpXS0+ZGVzYy53TWF4UGFja2V0U2l6ZSkpOwogCX0KLQlwcmludGsoS0VSTl9ERUJVRyAiXG4iKTsKKwlwcl9kZWJ1ZygiXG4iKTsKIAogCWRldl9kYmcoZGV2LCAiICAgICAgIGVwbWF4cF9vdXQgIDoiKTsKIAlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewogCQlpZiAodWRldi0+ZXBfb3V0W2ldKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAlMnUiLAotCQkJICAgICBsZTE2X3RvX2NwdSh1ZGV2LT5lcF9vdXRbaV0tPmRlc2Mud01heFBhY2tldFNpemUpKTsKKwkJCXByX2RlYnVnKCIgJTJ1IiwKKwkJCSAgICBsZTE2X3RvX2NwdSh1ZGV2LT5lcF9vdXRbaV0tPmRlc2Mud01heFBhY2tldFNpemUpKTsKIAl9Ci0JcHJpbnRrKEtFUk5fREVCVUcgIlxuIik7CisJcHJfZGVidWcoIlxuIik7CiAKIAlkZXZfZGJnKGRldiwgInBhcmVudCAlcCwgYnVzICVwXG4iLCB1ZGV2LT5wYXJlbnQsIHVkZXYtPmJ1cyk7CiAKQEAgLTE3Niw5MSArMTY0LDg0IEBACiB7CiAJc3dpdGNoIChydCAmIFVTQl9SRUNJUF9NQVNLKSB7CiAJY2FzZSBVU0JfUkVDSVBfREVWSUNFOgotCQlwcmludGsoS0VSTl9ERUJVRyAiREVWSUNFIik7CisJCXByX2RlYnVnKCJERVZJQ0UiKTsKIAkJYnJlYWs7CiAJY2FzZSBVU0JfUkVDSVBfSU5URVJGQUNFOgotCQlwcmludGsoS0VSTl9ERUJVRyAiSU5URVJGIik7CisJCXByX2RlYnVnKCJJTlRFUkYiKTsKIAkJYnJlYWs7CiAJY2FzZSBVU0JfUkVDSVBfRU5EUE9JTlQ6Ci0JCXByaW50ayhLRVJOX0RFQlVHICJFTkRQT0kiKTsKKwkJcHJfZGVidWcoIkVORFBPSSIpOwogCQlicmVhazsKIAljYXNlIFVTQl9SRUNJUF9PVEhFUjoKLQkJcHJpbnRrKEtFUk5fREVCVUcgIk9USEVSICIpOworCQlwcl9kZWJ1ZygiT1RIRVIgIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0RFQlVHICItLS0tLS0iKTsKKwkJcHJfZGVidWcoIi0tLS0tLSIpOworCQlicmVhazsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIHVzYmlwX2R1bXBfdXNiX2N0cmxyZXF1ZXN0KHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmNtZCkKIHsKIAlpZiAoIWNtZCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiICAgICAgJXMgOiBudWxsIHBvaW50ZXJcbiIsIF9fZnVuY19fKTsKKwkJcHJfZGVidWcoIiAgICAgICA6IG51bGwgcG9pbnRlclxuIik7CiAJCXJldHVybjsKIAl9CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiICAgICAgICIpOwotCXByaW50ayhLRVJOX0RFQlVHICJiUmVxdWVzdFR5cGUoJTAyWCkgIiwgY21kLT5iUmVxdWVzdFR5cGUpOwotCXByaW50ayhLRVJOX0RFQlVHICJiUmVxdWVzdCglMDJYKSAiICwgY21kLT5iUmVxdWVzdCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIndWYWx1ZSglMDRYKSAiLCBjbWQtPndWYWx1ZSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIndJbmRleCglMDRYKSAiLCBjbWQtPndJbmRleCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIndMZW5ndGgoJTA0WCkgIiwgY21kLT53TGVuZ3RoKTsKLQotCXByaW50ayhLRVJOX0RFQlVHICJcbiAgICAgICAiKTsKKwlwcl9kZWJ1ZygiICAgICAgICIpOworCXByX2RlYnVnKCJiUmVxdWVzdFR5cGUoJTAyWCkgYlJlcXVlc3QoJTAyWCkgd1ZhbHVlKCUwNFgpIHdJbmRleCglMDRYKSAiCisJCSAid0xlbmd0aCglMDRYKSAiLCBjbWQtPmJSZXF1ZXN0VHlwZSwgY21kLT5iUmVxdWVzdCwKKwkJIGNtZC0+d1ZhbHVlLCBjbWQtPndJbmRleCwgY21kLT53TGVuZ3RoKTsKKwlwcl9kZWJ1ZygiXG4gICAgICAgIik7CiAKIAlpZiAoKGNtZC0+YlJlcXVlc3RUeXBlICYgVVNCX1RZUEVfTUFTSykgPT0gVVNCX1RZUEVfU1RBTkRBUkQpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlNUQU5EQVJEICIpOworCQlwcl9kZWJ1ZygiU1RBTkRBUkQgIik7CiAJCXN3aXRjaCAoY21kLT5iUmVxdWVzdCkgewogCQljYXNlIFVTQl9SRVFfR0VUX1NUQVRVUzoKLQkJCXByaW50ayhLRVJOX0RFQlVHICJHRVRfU1RBVFVTIik7CisJCQlwcl9kZWJ1ZygiR0VUX1NUQVRVU1xuIik7CiAJCQlicmVhazsKIAkJY2FzZSBVU0JfUkVRX0NMRUFSX0ZFQVRVUkU6Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiQ0xFQVJfRkVBVCIpOworCQkJcHJfZGVidWcoIkNMRUFSX0ZFQVRcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgVVNCX1JFUV9TRVRfRkVBVFVSRToKLQkJCXByaW50ayhLRVJOX0RFQlVHICJTRVRfRkVBVCAgIik7CisJCQlwcl9kZWJ1ZygiU0VUX0ZFQVQgIFxuIik7CiAJCQlicmVhazsKIAkJY2FzZSBVU0JfUkVRX1NFVF9BRERSRVNTOgotCQkJcHJpbnRrKEtFUk5fREVCVUcgIlNFVF9BRERSUlMiKTsKKwkJCXByX2RlYnVnKCJTRVRfQUREUlJTXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIFVTQl9SRVFfR0VUX0RFU0NSSVBUT1I6Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiR0VUX0RFU0NSSSIpOworCQkJcHJfZGVidWcoIkdFVF9ERVNDUklcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgVVNCX1JFUV9TRVRfREVTQ1JJUFRPUjoKLQkJCXByaW50ayhLRVJOX0RFQlVHICJTRVRfREVTQ1JJIik7CisJCQlwcl9kZWJ1ZygiU0VUX0RFU0NSSVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSBVU0JfUkVRX0dFVF9DT05GSUdVUkFUSU9OOgotCQkJcHJpbnRrKEtFUk5fREVCVUcgIkdFVF9DT05GSUciKTsKKwkJCXByX2RlYnVnKCJHRVRfQ09ORklHXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT046Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiU0VUX0NPTkZJRyIpOworCQkJcHJfZGVidWcoIlNFVF9DT05GSUdcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgVVNCX1JFUV9HRVRfSU5URVJGQUNFOgotCQkJcHJpbnRrKEtFUk5fREVCVUcgIkdFVF9JTlRFUkYiKTsKKwkJCXByX2RlYnVnKCJHRVRfSU5URVJGXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIFVTQl9SRVFfU0VUX0lOVEVSRkFDRToKLQkJCXByaW50ayhLRVJOX0RFQlVHICJTRVRfSU5URVJGIik7CisJCQlwcl9kZWJ1ZygiU0VUX0lOVEVSRlxuIik7CiAJCQlicmVhazsKIAkJY2FzZSBVU0JfUkVRX1NZTkNIX0ZSQU1FOgotCQkJcHJpbnRrKEtFUk5fREVCVUcgIlNZTkNfRlJBTUUiKTsKKwkJCXByX2RlYnVnKCJTWU5DX0ZSQU1FXG4iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fREVCVUcgIlJFUSglMDJYKSAiLCBjbWQtPmJSZXF1ZXN0KTsKKwkJCXByX2RlYnVnKCJSRVEoJTAyWCkgXG4iLCBjbWQtPmJSZXF1ZXN0KTsKKwkJCWJyZWFrOwogCQl9Ci0KLQkJcHJpbnRrKEtFUk5fREVCVUcgIiAiKTsKIAkJdXNiaXBfZHVtcF9yZXF1ZXN0X3R5cGUoY21kLT5iUmVxdWVzdFR5cGUpOwotCi0JfSBlbHNlIGlmICgoY21kLT5iUmVxdWVzdFR5cGUgJiBVU0JfVFlQRV9NQVNLKSA9PSBVU0JfVFlQRV9DTEFTUykKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkNMQVNTICAgIik7Ci0KLQllbHNlIGlmICgoY21kLT5iUmVxdWVzdFR5cGUgJiBVU0JfVFlQRV9NQVNLKSA9PSBVU0JfVFlQRV9WRU5ET1IpCi0JCXByaW50ayhLRVJOX0RFQlVHICJWRU5ET1IgICIpOwotCi0JZWxzZSBpZiAoKGNtZC0+YlJlcXVlc3RUeXBlICYgVVNCX1RZUEVfTUFTSykgPT0gVVNCX1RZUEVfUkVTRVJWRUQpCi0JCXByaW50ayhLRVJOX0RFQlVHICJSRVNFUlZFRCIpOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIlxuIik7CisJfSBlbHNlIGlmICgoY21kLT5iUmVxdWVzdFR5cGUgJiBVU0JfVFlQRV9NQVNLKSA9PSBVU0JfVFlQRV9DTEFTUykgeworCQlwcl9kZWJ1ZygiQ0xBU1MgICBcbiIpOworCX0gZWxzZSBpZiAoKGNtZC0+YlJlcXVlc3RUeXBlICYgVVNCX1RZUEVfTUFTSykgPT0gVVNCX1RZUEVfVkVORE9SKSB7CisJCXByX2RlYnVnKCJWRU5ET1IgIFxuIik7CisJfSBlbHNlIGlmICgoY21kLT5iUmVxdWVzdFR5cGUgJiBVU0JfVFlQRV9NQVNLKSA9PSBVU0JfVFlQRV9SRVNFUlZFRCkgeworCQlwcl9kZWJ1ZygiUkVTRVJWRURcbiIpOworCX0KIH0KIAogdm9pZCB1c2JpcF9kdW1wX3VyYihzdHJ1Y3QgdXJiICp1cmIpCkBAIC0yNjgsMTYgKzI0OSwxNSBAQAogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAogCWlmICghdXJiKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHIEtCVUlMRF9NT0ROQU1FCi0JCSAgICAgICAiOiVzOiB1cmI6IG51bGwgcG9pbnRlciEhXG4iLCBfX2Z1bmNfXyk7CisJCXByX2RlYnVnKCJ1cmI6IG51bGwgcG9pbnRlciEhXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCWlmICghdXJiLT5kZXYpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgS0JVSUxEX01PRE5BTUUKLQkJICAgICAgICI6JXM6IHVyYi0+ZGV2OiBudWxsIHBvaW50ZXIhIVxuIiwgX19mdW5jX18pOworCQlwcl9kZWJ1ZygidXJiLT5kZXY6IG51bGwgcG9pbnRlciEhXG4iKTsKIAkJcmV0dXJuOwogCX0KKwogCWRldiA9ICZ1cmItPmRldi0+ZGV2OwogCiAJZGV2X2RiZyhkZXYsICIgICB1cmIgICAgICAgICAgICAgICAgICAgOiVwXG4iLCB1cmIpOwpAQCAtMjk4LDcgKzI3OCw3IEBACiAJZGV2X2RiZyhkZXYsICIgICBzZXR1cF9wYWNrZXQgICAgICAgICAgOiVwXG4iLCB1cmItPnNldHVwX3BhY2tldCk7CiAKIAlpZiAodXJiLT5zZXR1cF9wYWNrZXQgJiYgdXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9DT05UUk9MKQotCQkJdXNiaXBfZHVtcF91c2JfY3RybHJlcXVlc3QoCisJCXVzYmlwX2R1bXBfdXNiX2N0cmxyZXF1ZXN0KAogCQkJKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKil1cmItPnNldHVwX3BhY2tldCk7CiAKIAlkZXZfZGJnKGRldiwgIiAgIHN0YXJ0X2ZyYW1lICAgICAgICAgICA6JWRcbiIsIHVyYi0+c3RhcnRfZnJhbWUpOwpAQCAtMzEyLDQ3ICsyOTIsNDggQEAKIAogdm9pZCB1c2JpcF9kdW1wX2hlYWRlcihzdHJ1Y3QgdXNiaXBfaGVhZGVyICpwZHUpCiB7Ci0JdXNiaXBfdWRiZygiQkFTRTogY21kICV1IHNlcSAldSBkZXZpZCAldSBkaXIgJXUgZXAgJXVcbiIsCi0JCQlwZHUtPmJhc2UuY29tbWFuZCwKLQkJCXBkdS0+YmFzZS5zZXFudW0sCi0JCQlwZHUtPmJhc2UuZGV2aWQsCi0JCQlwZHUtPmJhc2UuZGlyZWN0aW9uLAotCQkJcGR1LT5iYXNlLmVwKTsKKwlwcl9kZWJ1ZygiQkFTRTogY21kICV1IHNlcSAldSBkZXZpZCAldSBkaXIgJXUgZXAgJXVcbiIsCisJCSBwZHUtPmJhc2UuY29tbWFuZCwKKwkJIHBkdS0+YmFzZS5zZXFudW0sCisJCSBwZHUtPmJhc2UuZGV2aWQsCisJCSBwZHUtPmJhc2UuZGlyZWN0aW9uLAorCQkgcGR1LT5iYXNlLmVwKTsKIAogCXN3aXRjaCAocGR1LT5iYXNlLmNvbW1hbmQpIHsKIAljYXNlIFVTQklQX0NNRF9TVUJNSVQ6Ci0JCXVzYmlwX3VkYmcoIkNNRF9TVUJNSVQ6ICIKLQkJCQkieF9mbGFncyAldSB4X2xlbiAldSBzZiAldSAjcCAldSBpdiAldVxuIiwKLQkJCQlwZHUtPnUuY21kX3N1Ym1pdC50cmFuc2Zlcl9mbGFncywKLQkJCQlwZHUtPnUuY21kX3N1Ym1pdC50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAotCQkJCXBkdS0+dS5jbWRfc3VibWl0LnN0YXJ0X2ZyYW1lLAotCQkJCXBkdS0+dS5jbWRfc3VibWl0Lm51bWJlcl9vZl9wYWNrZXRzLAotCQkJCXBkdS0+dS5jbWRfc3VibWl0LmludGVydmFsKTsKLQkJCQlicmVhazsKKwkJcHJfZGVidWcoIlVTQklQX0NNRF9TVUJNSVQ6ICIKKwkJCSAieF9mbGFncyAldSB4X2xlbiAldSBzZiAldSAjcCAlZCBpdiAlZFxuIiwKKwkJCSBwZHUtPnUuY21kX3N1Ym1pdC50cmFuc2Zlcl9mbGFncywKKwkJCSBwZHUtPnUuY21kX3N1Ym1pdC50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJIHBkdS0+dS5jbWRfc3VibWl0LnN0YXJ0X2ZyYW1lLAorCQkJIHBkdS0+dS5jbWRfc3VibWl0Lm51bWJlcl9vZl9wYWNrZXRzLAorCQkJIHBkdS0+dS5jbWRfc3VibWl0LmludGVydmFsKTsKKwkJYnJlYWs7CiAJY2FzZSBVU0JJUF9DTURfVU5MSU5LOgotCQl1c2JpcF91ZGJnKCJDTURfVU5MSU5LOiBzZXEgJXVcbiIsIHBkdS0+dS5jbWRfdW5saW5rLnNlcW51bSk7CisJCXByX2RlYnVnKCJVU0JJUF9DTURfVU5MSU5LOiBzZXEgJXVcbiIsCisJCQkgcGR1LT51LmNtZF91bmxpbmsuc2VxbnVtKTsKIAkJYnJlYWs7CiAJY2FzZSBVU0JJUF9SRVRfU1VCTUlUOgotCQl1c2JpcF91ZGJnKCJSRVRfU1VCTUlUOiBzdCAlZCBhbCAldSBzZiAlZCAjcCAlZCBlYyAlZFxuIiwKLQkJCQlwZHUtPnUucmV0X3N1Ym1pdC5zdGF0dXMsCi0JCQkJcGR1LT51LnJldF9zdWJtaXQuYWN0dWFsX2xlbmd0aCwKLQkJCQlwZHUtPnUucmV0X3N1Ym1pdC5zdGFydF9mcmFtZSwKLQkJCQlwZHUtPnUucmV0X3N1Ym1pdC5udW1iZXJfb2ZfcGFja2V0cywKLQkJCQlwZHUtPnUucmV0X3N1Ym1pdC5lcnJvcl9jb3VudCk7CisJCXByX2RlYnVnKCJVU0JJUF9SRVRfU1VCTUlUOiBzdCAlZCBhbCAldSBzZiAlZCAjcCAlZCBlYyAlZFxuIiwKKwkJCSBwZHUtPnUucmV0X3N1Ym1pdC5zdGF0dXMsCisJCQkgcGR1LT51LnJldF9zdWJtaXQuYWN0dWFsX2xlbmd0aCwKKwkJCSBwZHUtPnUucmV0X3N1Ym1pdC5zdGFydF9mcmFtZSwKKwkJCSBwZHUtPnUucmV0X3N1Ym1pdC5udW1iZXJfb2ZfcGFja2V0cywKKwkJCSBwZHUtPnUucmV0X3N1Ym1pdC5lcnJvcl9jb3VudCk7CisJCWJyZWFrOwogCWNhc2UgVVNCSVBfUkVUX1VOTElOSzoKLQkJdXNiaXBfdWRiZygiUkVUX1VOTElOSzogc3RhdHVzICVkXG4iLCBwZHUtPnUucmV0X3VubGluay5zdGF0dXMpOworCQlwcl9kZWJ1ZygiVVNCSVBfUkVUX1VOTElOSzogc3RhdHVzICVkXG4iLAorCQkJIHBkdS0+dS5yZXRfdW5saW5rLnN0YXR1cyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIE5PVCBSRUFDSEVEICovCi0JCXVzYmlwX3VkYmcoIlVOS05PV05cbiIpOworCQlwcl9lcnIoInVua25vd24gY29tbWFuZFxuIik7CisJCWJyZWFrOwogCX0KIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYmlwX2R1bXBfaGVhZGVyKTsKIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIHNvY2tldCByb3V0aW5lcyAqLwotCi0vKiAgU2VuZC9yZWNlaXZlIG1lc3NhZ2VzIG92ZXIgVENQL0lQLiBJIHJlZmVyIGRyaXZlcnMvYmxvY2svbmJkLmMgKi8KKy8qIFNlbmQvcmVjZWl2ZSBtZXNzYWdlcyBvdmVyIFRDUC9JUC4gSSByZWZlciBkcml2ZXJzL2Jsb2NrL25iZC5jICovCiBpbnQgdXNiaXBfeG1pdChpbnQgc2VuZCwgc3RydWN0IHNvY2tldCAqc29jaywgY2hhciAqYnVmLAogCSAgICAgICBpbnQgc2l6ZSwgaW50IG1zZ19mbGFncykKIHsKQEAgLTM2OCwyNyArMzQ5LDI0IEBACiAJdXNiaXBfZGJnX3htaXQoImVudGVyXG4iKTsKIAogCWlmICghc29jayB8fCAhYnVmIHx8ICFzaXplKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgYXJnLCBzb2NrICVwIGJ1ZmYgJXAgc2l6ZSAlZFxuIiwKLQkJICAgICAgIF9fZnVuY19fLCBzb2NrLCBidWYsIHNpemUpOworCQlwcl9lcnIoImludmFsaWQgYXJnLCBzb2NrICVwIGJ1ZmYgJXAgc2l6ZSAlZFxuIiwgc29jaywgYnVmLAorCQkgICAgICAgc2l6ZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCiAJaWYgKHVzYmlwX2RiZ19mbGFnX3htaXQpIHsKIAkJaWYgKHNlbmQpIHsKIAkJCWlmICghaW5faW50ZXJydXB0KCkpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiUtMTBzOiIsIGN1cnJlbnQtPmNvbW0pOworCQkJCXByX2RlYnVnKCIlLTEwczoiLCBjdXJyZW50LT5jb21tKTsKIAkJCWVsc2UKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiaW50ZXJydXB0ICA6Iik7CisJCQkJcHJfZGVidWcoImludGVycnVwdCAgOiIpOwogCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHNlbmRpbmcuLi4gLCBzb2NrICVwLCBidWYgJXAsICIKLQkJCSAgICAgICAic2l6ZSAlZCwgbXNnX2ZsYWdzICVkXG4iLCBfX2Z1bmNfXywKLQkJCSAgICAgICBzb2NrLCBidWYsIHNpemUsIG1zZ19mbGFncyk7CisJCQlwcl9kZWJ1Zygic2VuZGluZy4uLiAsIHNvY2sgJXAsIGJ1ZiAlcCwgc2l6ZSAlZCwgIgorCQkJCSAibXNnX2ZsYWdzICVkXG4iLCBzb2NrLCBidWYsIHNpemUsIG1zZ19mbGFncyk7CiAJCQl1c2JpcF9kdW1wX2J1ZmZlcihidWYsIHNpemUpOwogCQl9CiAJfQogCi0KIAlkbyB7CiAJCXNvY2stPnNrLT5za19hbGxvY2F0aW9uID0gR0ZQX05PSU87CiAJCWlvdi5pb3ZfYmFzZSAgICA9IGJ1ZjsKQEAgLTQwNCwxMyArMzgyLDEyIEBACiAJCQlyZXN1bHQgPSBrZXJuZWxfc2VuZG1zZyhzb2NrLCAmbXNnLCAmaW92LCAxLCBzaXplKTsKIAkJZWxzZQogCQkJcmVzdWx0ID0ga2VybmVsX3JlY3Ztc2coc29jaywgJm1zZywgJmlvdiwgMSwgc2l6ZSwKLQkJCQkJCQkJTVNHX1dBSVRBTEwpOworCQkJCQkJTVNHX1dBSVRBTEwpOwogCiAJCWlmIChyZXN1bHQgPD0gMCkgewotCQkJdXNiaXBfdWRiZygidXNiaXBfeG1pdDogJXMgc29jayAlcCBidWYgJXAgc2l6ZSAldSByZXQgIgotCQkJCQkiJWQgdG90YWwgJWRcbiIsCi0JCQkJCXNlbmQgPyAic2VuZCIgOiAicmVjZWl2ZSIsIHNvY2ssIGJ1ZiwKLQkJCQkJc2l6ZSwgcmVzdWx0LCB0b3RhbCk7CisJCQlwcl9kZWJ1ZygiJXMgc29jayAlcCBidWYgJXAgc2l6ZSAldSByZXQgJWQgdG90YWwgJWRcbiIsCisJCQkJIHNlbmQgPyAic2VuZCIgOiAicmVjZWl2ZSIsIHNvY2ssIGJ1Ziwgc2l6ZSwKKwkJCQkgcmVzdWx0LCB0b3RhbCk7CiAJCQlnb3RvIGVycjsKIAkJfQogCkBAIC00MjAsMjQgKzM5NywyMSBAQAogCiAJfSB3aGlsZSAoc2l6ZSA+IDApOwogCi0KIAlpZiAodXNiaXBfZGJnX2ZsYWdfeG1pdCkgewogCQlpZiAoIXNlbmQpIHsKIAkJCWlmICghaW5faW50ZXJydXB0KCkpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiUtMTBzOiIsIGN1cnJlbnQtPmNvbW0pOworCQkJCXByX2RlYnVnKCIlLTEwczoiLCBjdXJyZW50LT5jb21tKTsKIAkJCWVsc2UKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiaW50ZXJydXB0ICA6Iik7CisJCQkJcHJfZGVidWcoImludGVycnVwdCAgOiIpOwogCi0JCQlwcmludGsoS0VSTl9ERUJVRyAidXNiaXBfeG1pdDogcmVjZWl2aW5nLi4uLlxuIik7CisJCQlwcl9kZWJ1ZygicmVjZWl2aW5nLi4uLlxuIik7CiAJCQl1c2JpcF9kdW1wX2J1ZmZlcihicCwgb3NpemUpOwotCQkJcHJpbnRrKEtFUk5fREVCVUcgInVzYmlwX3htaXQ6IHJlY2VpdmVkLCBvc2l6ZSAlZCByZXQgIgotCQkJCQkiJWQgc2l6ZSAlZCB0b3RhbCAlZFxuIiwgb3NpemUsIHJlc3VsdCwKLQkJCQkJc2l6ZSwgdG90YWwpOworCQkJcHJfZGVidWcoInJlY2VpdmVkLCBvc2l6ZSAlZCByZXQgJWQgc2l6ZSAlZCB0b3RhbCAlZFxuIiwKKwkJCQkgb3NpemUsIHJlc3VsdCwgc2l6ZSwgdG90YWwpOwogCQl9CiAKIAkJaWYgKHNlbmQpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAidXNiaXBfeG1pdDogc2VuZCwgdG90YWwgJWRcbiIsCi0JCQkJCQkJCQl0b3RhbCk7CisJCQlwcl9kZWJ1Zygic2VuZCwgdG90YWwgJWRcbiIsIHRvdGFsKTsKIAl9CiAKIAlyZXR1cm4gdG90YWw7CkBAIC00NTUsNyArNDI5LDcgQEAKIAogCWZpbGUgPSBmZ2V0KHNvY2tmZCk7CiAJaWYgKCFmaWxlKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgc29ja2ZkXG4iLCBfX2Z1bmNfXyk7CisJCXByX2VycigiaW52YWxpZCBzb2NrZmRcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTQ3MCwxMSArNDQ0LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNvY2tmZF90b19zb2NrZXQpOwogCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIHBkdSByb3V0aW5lcyAqLwotCiAvKiB0aGVyZSBtYXkgYmUgbW9yZSBjYXNlcyB0byB0d2VhayB0aGUgZmxhZ3MuICovCiBzdGF0aWMgdW5zaWduZWQgaW50IHR3ZWFrX3RyYW5zZmVyX2ZsYWdzKHVuc2lnbmVkIGludCBmbGFncykKIHsKQEAgLTQ4Myw3ICs0NTIsNyBAQAogfQogCiBzdGF0aWMgdm9pZCB1c2JpcF9wYWNrX2NtZF9zdWJtaXQoc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1LCBzdHJ1Y3QgdXJiICp1cmIsCi0JCQkJCQkJCWludCBwYWNrKQorCQkJCSAgaW50IHBhY2spCiB7CiAJc3RydWN0IHVzYmlwX2hlYWRlcl9jbWRfc3VibWl0ICpzcGR1ID0gJnBkdS0+dS5jbWRfc3VibWl0OwogCkBAIC00OTQsNyArNDYzLDcgQEAKIAlpZiAocGFjaykgewogCQkvKiB2aGNpX3R4LmMgKi8KIAkJc3BkdS0+dHJhbnNmZXJfZmxhZ3MgPQotCQkJCXR3ZWFrX3RyYW5zZmVyX2ZsYWdzKHVyYi0+dHJhbnNmZXJfZmxhZ3MpOworCQkJdHdlYWtfdHJhbnNmZXJfZmxhZ3ModXJiLT50cmFuc2Zlcl9mbGFncyk7CiAJCXNwZHUtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgJPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CiAJCXNwZHUtPnN0YXJ0X2ZyYW1lCQk9IHVyYi0+c3RhcnRfZnJhbWU7CiAJCXNwZHUtPm51bWJlcl9vZl9wYWNrZXRzCQk9IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7CkBAIC01MTEsNyArNDgwLDcgQEAKIH0KIAogc3RhdGljIHZvaWQgdXNiaXBfcGFja19yZXRfc3VibWl0KHN0cnVjdCB1c2JpcF9oZWFkZXIgKnBkdSwgc3RydWN0IHVyYiAqdXJiLAotCQkJCQkJCQlpbnQgcGFjaykKKwkJCQkgIGludCBwYWNrKQogewogCXN0cnVjdCB1c2JpcF9oZWFkZXJfcmV0X3N1Ym1pdCAqcnBkdSA9ICZwZHUtPnUucmV0X3N1Ym1pdDsKIApAQCAtNTM0LDkgKzUwMyw4IEBACiAJfQogfQogCi0KIHZvaWQgdXNiaXBfcGFja19wZHUoc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1LCBzdHJ1Y3QgdXJiICp1cmIsIGludCBjbWQsCi0JCQkJCQkJCWludCBwYWNrKQorCQkgICAgaW50IHBhY2spCiB7CiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFVTQklQX0NNRF9TVUJNSVQ6CkBAIC01NDYsMTQgKzUxNCwxMyBAQAogCQl1c2JpcF9wYWNrX3JldF9zdWJtaXQocGR1LCB1cmIsIHBhY2spOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQllcnIoInVua25vd24gY29tbWFuZCIpOwotCQkvKiBOT1RSRUFDSEVEICovCi0JCS8qIEJVRygpOyAqLworCQkvKiBOT1QgUkVBQ0hFRCAqLworCQlwcl9lcnIoInVua25vd24gY29tbWFuZFxuIik7CisJCWJyZWFrOwogCX0KIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYmlwX3BhY2tfcGR1KTsKIAotCiBzdGF0aWMgdm9pZCBjb3JyZWN0X2VuZGlhbl9iYXNpYyhzdHJ1Y3QgdXNiaXBfaGVhZGVyX2Jhc2ljICpiYXNlLCBpbnQgc2VuZCkKIHsKIAlpZiAoc2VuZCkgewpAQCAtNTcyLDcgKzUzOSw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGNvcnJlY3RfZW5kaWFuX2NtZF9zdWJtaXQoc3RydWN0IHVzYmlwX2hlYWRlcl9jbWRfc3VibWl0ICpwZHUsCi0JCQkJCQkJCWludCBzZW5kKQorCQkJCSAgICAgIGludCBzZW5kKQogewogCWlmIChzZW5kKSB7CiAJCXBkdS0+dHJhbnNmZXJfZmxhZ3MgPSBjcHVfdG9fYmUzMihwZHUtPnRyYW5zZmVyX2ZsYWdzKTsKQEAgLTU5Miw3ICs1NTksNyBAQAogfQogCiBzdGF0aWMgdm9pZCBjb3JyZWN0X2VuZGlhbl9yZXRfc3VibWl0KHN0cnVjdCB1c2JpcF9oZWFkZXJfcmV0X3N1Ym1pdCAqcGR1LAotCQkJCQkJCQlpbnQgc2VuZCkKKwkJCQkgICAgICBpbnQgc2VuZCkKIHsKIAlpZiAoc2VuZCkgewogCQljcHVfdG9fYmUzMnMoJnBkdS0+c3RhdHVzKTsKQEAgLTYwNCwxMyArNTcxLDEzIEBACiAJCWJlMzJfdG9fY3B1cygmcGR1LT5zdGF0dXMpOwogCQliZTMyX3RvX2NwdXMoJnBkdS0+YWN0dWFsX2xlbmd0aCk7CiAJCWJlMzJfdG9fY3B1cygmcGR1LT5zdGFydF9mcmFtZSk7Ci0JCWNwdV90b19iZTMycygmcGR1LT5udW1iZXJfb2ZfcGFja2V0cyk7CisJCWJlMzJfdG9fY3B1cygmcGR1LT5udW1iZXJfb2ZfcGFja2V0cyk7CiAJCWJlMzJfdG9fY3B1cygmcGR1LT5lcnJvcl9jb3VudCk7CiAJfQogfQogCiBzdGF0aWMgdm9pZCBjb3JyZWN0X2VuZGlhbl9jbWRfdW5saW5rKHN0cnVjdCB1c2JpcF9oZWFkZXJfY21kX3VubGluayAqcGR1LAotCQkJCQkJCQlpbnQgc2VuZCkKKwkJCQkgICAgICBpbnQgc2VuZCkKIHsKIAlpZiAoc2VuZCkKIAkJcGR1LT5zZXFudW0gPSBjcHVfdG9fYmUzMihwZHUtPnNlcW51bSk7CkBAIC02MTksNyArNTg2LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgY29ycmVjdF9lbmRpYW5fcmV0X3VubGluayhzdHJ1Y3QgdXNiaXBfaGVhZGVyX3JldF91bmxpbmsgKnBkdSwKLQkJCQkJCQkJaW50IHNlbmQpCisJCQkJICAgICAgaW50IHNlbmQpCiB7CiAJaWYgKHNlbmQpCiAJCWNwdV90b19iZTMycygmcGR1LT5zdGF0dXMpOwpAQCAtNjUzLDE2ICs2MjAsMTYgQEAKIAkJY29ycmVjdF9lbmRpYW5fcmV0X3VubGluaygmcGR1LT51LnJldF91bmxpbmssIHNlbmQpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQkvKiBOT1RSRUFDSEVEICovCi0JCWVycigidW5rbm93biBjb21tYW5kIGluIHBkdSBoZWFkZXI6ICVkIiwgY21kKTsKLQkJLyogQlVHKCk7ICovCisJCS8qIE5PVCBSRUFDSEVEICovCisJCXByX2VycigidW5rbm93biBjb21tYW5kXG4iKTsKKwkJYnJlYWs7CiAJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiaXBfaGVhZGVyX2NvcnJlY3RfZW5kaWFuKTsKIAogc3RhdGljIHZvaWQgdXNiaXBfaXNvX3Bha2NldF9jb3JyZWN0X2VuZGlhbigKLQkJCQlzdHJ1Y3QgdXNiaXBfaXNvX3BhY2tldF9kZXNjcmlwdG9yICppc28sCi0JCQkJaW50IHNlbmQpCisJc3RydWN0IHVzYmlwX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqaXNvLAorCWludCBzZW5kKQogewogCS8qIGRvZXMgbm90IG5lZWQgYWxsIG1lbWJlcnMuIGJ1dCBjb3B5IGFsbCBzaW1wbHkuICovCiAJaWYgKHNlbmQpIHsKQEAgLTY3OSw3ICs2NDYsNyBAQAogfQogCiBzdGF0aWMgdm9pZCB1c2JpcF9wYWNrX2lzbyhzdHJ1Y3QgdXNiaXBfaXNvX3BhY2tldF9kZXNjcmlwdG9yICppc28sCi0JCXN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yICp1aXNvLCBpbnQgcGFjaykKKwkJCSAgIHN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yICp1aXNvLCBpbnQgcGFjaykKIHsKIAlpZiAocGFjaykgewogCQlpc28tPm9mZnNldAkJPSB1aXNvLT5vZmZzZXQ7CkBAIC02OTQsNyArNjYxLDYgQEAKIAl9CiB9CiAKLQogLyogbXVzdCBmcmVlIGJ1ZmZlciAqLwogdm9pZCAqdXNiaXBfYWxsb2NfaXNvX2Rlc2NfcGR1KHN0cnVjdCB1cmIgKnVyYiwgc3NpemVfdCAqYnVmZmxlbikKIHsKQEAgLTczNyw3ICs3MDMsNyBAQAogCiAJLyogbXkgQmx1ZXRvb3RoIGRvbmdsZSBnZXRzIElTTyBVUkJzIHdoaWNoIGFyZSBucCA9IDAgKi8KIAlpZiAobnAgPT0gMCkgewotCQkvKiB1c2JpcF91aW5mbygiaXNvIG5wID09IDBcbiIpOyAqLworCQkvKiBwcl9pbmZvKCJpc28gbnAgPT0gMFxuIik7ICovCiAJCS8qIHVzYmlwX2R1bXBfdXJiKHVyYik7ICovCiAJCXJldHVybiAwOwogCX0KQEAgLTc2MCw3ICs3MjYsNiBAQAogCQlyZXR1cm4gLUVQSVBFOwogCX0KIAotCiAJZm9yIChpID0gMDsgaSA8IG5wOyBpKyspIHsKIAkJaXNvID0gYnVmZiArIChpICogc2l6ZW9mKCppc28pKTsKIApAQCAtNzczLDggKzczOCw5IEBACiAKIAlpZiAodG90YWxfbGVuZ3RoICE9IHVyYi0+YWN0dWFsX2xlbmd0aCkgewogCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LAotCQkgICJ0b3RhbCBsZW5ndGggb2YgaXNvIHBhY2tldHMgKCVkKSBub3QgZXF1YWwgdG8gYWN0dWFsIGxlbmd0aCBvZiBidWZmZXIgKCVkKVxuIiwKLQkJICB0b3RhbF9sZW5ndGgsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCQkidG90YWwgbGVuZ3RoIG9mIGlzbyBwYWNrZXRzICVkIG5vdCBlcXVhbCB0byBhY3R1YWwgIgorCQkJImxlbmd0aCBvZiBidWZmZXIgJWRcbiIsCisJCQl0b3RhbF9sZW5ndGgsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAKIAkJaWYgKHVkLT5zaWRlID09IFVTQklQX1NUVUIpCiAJCQl1c2JpcF9ldmVudF9hZGQodWQsIFNERVZfRVZFTlRfRVJST1JfVENQKTsKQEAgLTgyMyw5ICs3ODksMTAgQEAKIAlmb3IgKGkgPSBucC0xOyBpID4gMDsgaS0tKSB7CiAJCWFjdHVhbG9mZnNldCAtPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGg7CiAJCW1lbW1vdmUodXJiLT50cmFuc2Zlcl9idWZmZXIgKyB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCwKLQkJCQkgIHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgYWN0dWFsb2Zmc2V0LAotCQkJCSAgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoKTsKKwkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyICsgYWN0dWFsb2Zmc2V0LAorCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoKTsKIAl9CisKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiaXBfcGFkX2lzbyk7CkBAIC04NzIsMTMgKzgzOSw5IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JpcF9yZWN2X3hidWZmKTsKIAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCiBzdGF0aWMgaW50IF9faW5pdCB1c2JpcF9jb21tb25faW5pdCh2b2lkKQogewotCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfREVTQyAiIiBEUklWRVJfVkVSU0lPTik7Ci0KKwlwcl9pbmZvKERSSVZFUl9ERVNDICIgdiIgVVNCSVBfVkVSU0lPTiAiXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODg3LDEyICs4NTAsMTAgQEAKIAlyZXR1cm47CiB9CiAKLQotCi0KIG1vZHVsZV9pbml0KHVzYmlwX2NvbW1vbl9pbml0KTsKIG1vZHVsZV9leGl0KHVzYmlwX2NvbW1vbl9leGl0KTsKIAogTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKIE1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihVU0JJUF9WRVJTSU9OKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2JpcF9jb21tb24uaCBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2JpcF9jb21tb24uaAppbmRleCBjNzY3ZjUyLi40YTY0MWM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNiaXBfY29tbW9uLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzYmlwX2NvbW1vbi5oCkBAIC0xNyw0MiArMTcsMjggQEAKICAqIFVTQS4KICAqLwogCi0jaWZuZGVmIF9fVkhDSV9DT01NT05fSAotI2RlZmluZSBfX1ZIQ0lfQ09NTU9OX0gKKyNpZm5kZWYgX19VU0JJUF9DT01NT05fSAorI2RlZmluZSBfX1VTQklQX0NPTU1PTl9ICiAKLQotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldC5oPgorI2luY2x1ZGUgPGxpbnV4L3ByaW50ay5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KLSNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+Ci0jaW5jbHVkZSA8bmV0L3NvY2suaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFVTQklQX1ZFUlNJT04gIjEuMC4wIgogCi0vKgotICogZGVmaW5lIG1hY3JvcyB0byBwcmludCBtZXNzYWdlcwotICovCisjdW5kZWYgcHJfZm10CiAKLS8qKgotICogdXNiaXBfdWRiZyAtIHByaW50IGRlYnVnIG1lc3NhZ2VzIGlmIENPTkZJR19VU0JfSVBfREVCVUdfRU5BQkxFIGlzIGRlZmluZWQKLSAqIEBmbXQ6Ci0gKiBAYXJnczoKLSAqLwotCi0jaWZkZWYgQ09ORklHX1VTQl9JUF9ERUJVR19FTkFCTEUKLQotI2RlZmluZSB1c2JpcF91ZGJnKGZtdCwgYXJncy4uLikJCQkJCVwKLQlkbyB7CQkJCQkJCQlcCi0JCXByaW50ayhLRVJOX0RFQlVHICIlLTEwczooJXMsJWQpICVzOiAiIGZtdCwJCVwKLQkJCShpbl9pbnRlcnJ1cHQoKSA/ICJpbnRlcnJ1cHQiIDogKGN1cnJlbnQpLT5jb21tKSxcCi0JCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fLCAjI2FyZ3MpOwkJXAotCX0gd2hpbGUgKDApCi0KLSNlbHNlICAvKiBDT05GSUdfVVNCX0lQX0RFQlVHX0VOQUJMRSAqLwotCi0jZGVmaW5lIHVzYmlwX3VkYmcoZm10LCBhcmdzLi4uKQkJZG8geyB9IHdoaWxlICgwKQotCi0jZW5kaWYgLyogQ09ORklHX1VTQl9JUF9ERUJVR19FTkFCTEUgKi8KLQorI2lmZGVmIERFQlVHCisjZGVmaW5lIHByX2ZtdChmbXQpICAgICBLQlVJTERfTU9ETkFNRSAiOiAlczolZDogIiBmbXQsIF9fZnVuY19fLCBfX0xJTkVfXworI2Vsc2UKKyNkZWZpbmUgcHJfZm10KGZtdCkgICAgIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisjZW5kaWYKIAogZW51bSB7CiAJdXNiaXBfZGVidWdfeG1pdAk9ICgxIDw8IDApLApAQCAtODcsMTYgKzczLDE2IEBACiAjZGVmaW5lIHVzYmlwX2RiZ193aXRoX2ZsYWcoZmxhZywgZm10LCBhcmdzLi4uKQkJXAogCWRvIHsJCQkJCQlcCiAJCWlmIChmbGFnICYgdXNiaXBfZGVidWdfZmxhZykJCVwKLQkJCXVzYmlwX3VkYmcoZm10ICwgIyNhcmdzKTsJCVwKKwkJCXByX2RlYnVnKGZtdCwgIyNhcmdzKTsJCVwKIAl9IHdoaWxlICgwKQogCi0jZGVmaW5lIHVzYmlwX2RiZ19zeXNmcyhmbXQsIGFyZ3MuLi4pCQlcCisjZGVmaW5lIHVzYmlwX2RiZ19zeXNmcyhmbXQsIGFyZ3MuLi4pIFwKIAl1c2JpcF9kYmdfd2l0aF9mbGFnKHVzYmlwX2RlYnVnX3N5c2ZzLCBmbXQgLCAjI2FyZ3MpCi0jZGVmaW5lIHVzYmlwX2RiZ194bWl0KGZtdCwgYXJncy4uLikJCVwKKyNkZWZpbmUgdXNiaXBfZGJnX3htaXQoZm10LCBhcmdzLi4uKSBcCiAJdXNiaXBfZGJnX3dpdGhfZmxhZyh1c2JpcF9kZWJ1Z194bWl0LCBmbXQgLCAjI2FyZ3MpCi0jZGVmaW5lIHVzYmlwX2RiZ191cmIoZm10LCBhcmdzLi4uKQkJXAorI2RlZmluZSB1c2JpcF9kYmdfdXJiKGZtdCwgYXJncy4uLikgXAogCXVzYmlwX2RiZ193aXRoX2ZsYWcodXNiaXBfZGVidWdfdXJiLCBmbXQgLCAjI2FyZ3MpCi0jZGVmaW5lIHVzYmlwX2RiZ19laChmbXQsIGFyZ3MuLi4pCQlcCisjZGVmaW5lIHVzYmlwX2RiZ19laChmbXQsIGFyZ3MuLi4pIFwKIAl1c2JpcF9kYmdfd2l0aF9mbGFnKHVzYmlwX2RlYnVnX2VoLCBmbXQgLCAjI2FyZ3MpCiAKICNkZWZpbmUgdXNiaXBfZGJnX3ZoY2lfcmgoZm10LCBhcmdzLi4uKQlcCkBAIC0xMDcsNDIgKzkzLDE2IEBACiAJdXNiaXBfZGJnX3dpdGhfZmxhZyh1c2JpcF9kZWJ1Z192aGNpX3J4LCBmbXQgLCAjI2FyZ3MpCiAjZGVmaW5lIHVzYmlwX2RiZ192aGNpX3R4KGZtdCwgYXJncy4uLikJXAogCXVzYmlwX2RiZ193aXRoX2ZsYWcodXNiaXBfZGVidWdfdmhjaV90eCwgZm10ICwgIyNhcmdzKQotI2RlZmluZSB1c2JpcF9kYmdfdmhjaV9zeXNmcyhmbXQsIGFyZ3MuLi4pCVwKKyNkZWZpbmUgdXNiaXBfZGJnX3ZoY2lfc3lzZnMoZm10LCBhcmdzLi4uKSBcCiAJdXNiaXBfZGJnX3dpdGhfZmxhZyh1c2JpcF9kZWJ1Z192aGNpX3N5c2ZzLCBmbXQgLCAjI2FyZ3MpCiAKLSNkZWZpbmUgdXNiaXBfZGJnX3N0dWJfY21wKGZtdCwgYXJncy4uLikJXAorI2RlZmluZSB1c2JpcF9kYmdfc3R1Yl9jbXAoZm10LCBhcmdzLi4uKSBcCiAJdXNiaXBfZGJnX3dpdGhfZmxhZyh1c2JpcF9kZWJ1Z19zdHViX2NtcCwgZm10ICwgIyNhcmdzKQotI2RlZmluZSB1c2JpcF9kYmdfc3R1Yl9yeChmbXQsIGFyZ3MuLi4pCVwKKyNkZWZpbmUgdXNiaXBfZGJnX3N0dWJfcngoZm10LCBhcmdzLi4uKSBcCiAJdXNiaXBfZGJnX3dpdGhfZmxhZyh1c2JpcF9kZWJ1Z19zdHViX3J4LCBmbXQgLCAjI2FyZ3MpCi0jZGVmaW5lIHVzYmlwX2RiZ19zdHViX3R4KGZtdCwgYXJncy4uLikJXAorI2RlZmluZSB1c2JpcF9kYmdfc3R1Yl90eChmbXQsIGFyZ3MuLi4pIFwKIAl1c2JpcF9kYmdfd2l0aF9mbGFnKHVzYmlwX2RlYnVnX3N0dWJfdHgsIGZtdCAsICMjYXJncykKIAotCi0vKioKLSAqIHVzYmlwX3VlcnIgLSBwcmludCBlcnJvciBtZXNzYWdlcwotICogQGZtdDoKLSAqIEBhcmdzOgotICovCi0jZGVmaW5lIHVzYmlwX3VlcnIoZm10LCBhcmdzLi4uKQkJCQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJcHJpbnRrKEtFUk5fRVJSICIlLTEwczogKioqRVJST1IqKiogKCVzLCVkKSAlczogIiBmbXQsCVwKLQkJCShpbl9pbnRlcnJ1cHQoKSA/ICJpbnRlcnJ1cHQiIDogKGN1cnJlbnQpLT5jb21tKSxcCi0JCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fLCAjI2FyZ3MpOwlcCi0JfSB3aGlsZSAoMCkKLQotLyoqCi0gKiB1c2JpcF91aW5mbyAtIHByaW50IGluZm9ybWF0aW9uIG1lc3NhZ2VzCi0gKiBAZm10OgotICogQGFyZ3M6Ci0gKi8KLSNkZWZpbmUgdXNiaXBfdWluZm8oZm10LCBhcmdzLi4uKQkJCQlcCi0JZG8gewkJCQkJCQlcCi0JCXByaW50ayhLRVJOX0lORk8gInVzYmlwOiAiIGZtdCAsICMjIGFyZ3MpOwlcCi0JfSB3aGlsZSAoMCkKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCiAvKgogICogVVNCL0lQIHJlcXVlc3QgaGVhZGVycy4KICAqIEN1cnJlbnRseSwgd2UgZGVmaW5lIDQgcmVxdWVzdCB0eXBlczoKQEAgLTE4NSw3ICsxNDUsNyBAQAogI2RlZmluZSBVU0JJUF9ESVJfSU4JMQogCV9fdTMyIGRpcmVjdGlvbjsKIAlfX3UzMiBlcDsgICAgIC8qIGVuZHBvaW50IG51bWJlciAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiAvKgogICogQW4gYWRkaXRpb25hbCBoZWFkZXIgZm9yIGEgQ01EX1NVQk1JVCBwYWNrZXQuCkBAIC0yMTIsNDMgKzE3Miw0MCBAQAogCiAJLyogc2V0IHNldHVwIHBhY2tldCBkYXRhIGZvciBhIENUUkwgcmVxdWVzdCAqLwogCXVuc2lnbmVkIGNoYXIgc2V0dXBbOF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIC8qCiAgKiBBbiBhZGRpdGlvbmFsIGhlYWRlciBmb3IgYSBSRVRfU1VCTUlUIHBhY2tldC4KICAqLwogc3RydWN0IHVzYmlwX2hlYWRlcl9yZXRfc3VibWl0IHsKIAlfX3MzMiBzdGF0dXM7Ci0JX19zMzIgYWN0dWFsX2xlbmd0aDsgLyogcmV0dXJuZWQgZGF0YSBsZW5ndGggKi8KLQlfX3MzMiBzdGFydF9mcmFtZTsgLyogSVNPIGFuZCBJTlQgKi8KLQlfX3MzMiBudW1iZXJfb2ZfcGFja2V0czsgIC8qIElTTyBvbmx5ICovCi0JX19zMzIgZXJyb3JfY291bnQ7IC8qIElTTyBvbmx5ICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwlfX3MzMiBhY3R1YWxfbGVuZ3RoOwkJLyogcmV0dXJuZWQgZGF0YSBsZW5ndGggKi8KKwlfX3MzMiBzdGFydF9mcmFtZTsJCS8qIElTTyBhbmQgSU5UICovCisJX19zMzIgbnVtYmVyX29mX3BhY2tldHM7CS8qIElTTyBvbmx5ICovCisJX19zMzIgZXJyb3JfY291bnQ7CQkvKiBJU08gb25seSAqLworfSBfX3BhY2tlZDsKIAogLyoKICAqIEFuIGFkZGl0aW9uYWwgaGVhZGVyIGZvciBhIENNRF9VTkxJTksgcGFja2V0LgogICovCiBzdHJ1Y3QgdXNiaXBfaGVhZGVyX2NtZF91bmxpbmsgewotCV9fdTMyIHNlcW51bTsgLyogVVJCJ3Mgc2VxbnVtIHdoaWNoIHdpbGwgYmUgdW5saW5rZWQgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCisJX191MzIgc2VxbnVtOwkJCS8qIFVSQidzIHNlcW51bSB0aGF0IHdpbGwgYmUgdW5saW5rZWQgKi8KK30gX19wYWNrZWQ7CiAKIC8qCiAgKiBBbiBhZGRpdGlvbmFsIGhlYWRlciBmb3IgYSBSRVRfVU5MSU5LIHBhY2tldC4KICAqLwogc3RydWN0IHVzYmlwX2hlYWRlcl9yZXRfdW5saW5rIHsKIAlfX3MzMiBzdGF0dXM7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQorfSBfX3BhY2tlZDsKIAogLyogdGhlIHNhbWUgYXMgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciBidXQgcGFja2VkIGZvciBwZHUgKi8KIHN0cnVjdCB1c2JpcF9pc29fcGFja2V0X2Rlc2NyaXB0b3IgewogCV9fdTMyIG9mZnNldDsKLQlfX3UzMiBsZW5ndGg7ICAgICAgICAgICAgLyogZXhwZWN0ZWQgbGVuZ3RoICovCisJX191MzIgbGVuZ3RoOwkJCS8qIGV4cGVjdGVkIGxlbmd0aCAqLwogCV9fdTMyIGFjdHVhbF9sZW5ndGg7CiAJX191MzIgc3RhdHVzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KK30gX19wYWNrZWQ7CiAKIC8qCiAgKiBBbGwgdXNiaXAgcGFja2V0cyB1c2UgYSBjb21tb24gaGVhZGVyIHRvIGtlZXAgY29kZSBzaW1wbGUuCkBAIC0yNjIsMTggKzIxOSwxMSBAQAogCQlzdHJ1Y3QgdXNiaXBfaGVhZGVyX2NtZF91bmxpbmsJY21kX3VubGluazsKIAkJc3RydWN0IHVzYmlwX2hlYWRlcl9yZXRfdW5saW5rCXJldF91bmxpbms7CiAJfSB1OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KK30gX19wYWNrZWQ7CiAKIGludCB1c2JpcF94bWl0KGludCwgc3RydWN0IHNvY2tldCAqLCBjaGFyICosIGludCwgaW50KTsKIGludCB1c2JpcF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IG1zZ2hkciAqLCBpbnQpOwogCi0KIHN0YXRpYyBpbmxpbmUgaW50IGludGVyZmFjZV90b19idXNudW0oc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKQEAgLTMwNCw3ICsyNTQsNiBAQAogdm9pZCB1c2JpcF9kdW1wX3VyYihzdHJ1Y3QgdXJiICpwdXJiKTsKIHZvaWQgdXNiaXBfZHVtcF9oZWFkZXIoc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1KTsKIAotCiBzdHJ1Y3QgdXNiaXBfZGV2aWNlOwogCiBlbnVtIHVzYmlwX3NpZGUgewpAQCAtMzMxLDcgKzI4MCw2IEBACiAvKiBhIGNvbW1vbiBzdHJ1Y3R1cmUgZm9yIHN0dWJfZGV2aWNlIGFuZCB2aGNpX2RldmljZSAqLwogc3RydWN0IHVzYmlwX2RldmljZSB7CiAJZW51bSB1c2JpcF9zaWRlIHNpZGU7Ci0KIAllbnVtIHVzYmlwX3N0YXR1cyBzdGF0dXM7CiAKIAkvKiBsb2NrIGZvciBzdGF0dXMgKi8KQEAgLTM3MCw5ICszMTgsOCBAQAogCX0gZWhfb3BzOwogfTsKIAotCiB2b2lkIHVzYmlwX3BhY2tfcGR1KHN0cnVjdCB1c2JpcF9oZWFkZXIgKnBkdSwgc3RydWN0IHVyYiAqdXJiLCBpbnQgY21kLAotCQkJCQkJCQlpbnQgcGFjayk7CisJCSAgICBpbnQgcGFjayk7CiAKIHZvaWQgdXNiaXBfaGVhZGVyX2NvcnJlY3RfZW5kaWFuKHN0cnVjdCB1c2JpcF9oZWFkZXIgKnBkdSwgaW50IHNlbmQpOwogLyogc29tZSBtZW1iZXJzIG9mIHVyYiBtdXN0IGJlIHN1YnN0aXR1dGVkIGJlZm9yZS4gKi8KQEAgLTM4MywxMiArMzMwLDEwIEBACiBpbnQgdXNiaXBfcGFkX2lzbyhzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCwgc3RydWN0IHVyYiAqdXJiKTsKIHZvaWQgKnVzYmlwX2FsbG9jX2lzb19kZXNjX3BkdShzdHJ1Y3QgdXJiICp1cmIsIHNzaXplX3QgKmJ1ZmZsZW4pOwogCi0KIC8qIHVzYmlwX2V2ZW50LmMgKi8KIGludCB1c2JpcF9zdGFydF9laChzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCk7CiB2b2lkIHVzYmlwX3N0b3BfZWgoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpOwogdm9pZCB1c2JpcF9ldmVudF9hZGQoc3RydWN0IHVzYmlwX2RldmljZSAqdWQsIHVuc2lnbmVkIGxvbmcgZXZlbnQpOwogaW50IHVzYmlwX2V2ZW50X2hhcHBlbmVkKHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkKTsKIAotCi0jZW5kaWYKKyNlbmRpZiAvKiBfX1VTQklQX0NPTU1PTl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNiaXBfZXZlbnQuYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2JpcF9ldmVudC5jCmluZGV4IGY0YjI4N2UuLmVjZDE4NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2JpcF9ldmVudC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2JpcF9ldmVudC5jCkBAIC0xNyw5ICsxNywxMCBAQAogICogVVNBLgogICovCiAKLSNpbmNsdWRlICJ1c2JpcF9jb21tb24uaCIKICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAKKyNpbmNsdWRlICJ1c2JpcF9jb21tb24uaCIKKwogc3RhdGljIGludCBldmVudF9oYW5kbGVyKHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkKQogewogCXVzYmlwX2RiZ19laCgiZW50ZXJcbiIpOwpAQCAtMzYsMjEgKzM3LDE4IEBACiAJCSAqLwogCQlpZiAodWQtPmV2ZW50ICYgVVNCSVBfRUhfU0hVVERPV04pIHsKIAkJCXVkLT5laF9vcHMuc2h1dGRvd24odWQpOwotCiAJCQl1ZC0+ZXZlbnQgJj0gflVTQklQX0VIX1NIVVRET1dOOwogCQl9CiAKIAkJLyogUmVzZXQgdGhlIGRldmljZS4gKi8KIAkJaWYgKHVkLT5ldmVudCAmIFVTQklQX0VIX1JFU0VUKSB7CiAJCQl1ZC0+ZWhfb3BzLnJlc2V0KHVkKTsKLQogCQkJdWQtPmV2ZW50ICY9IH5VU0JJUF9FSF9SRVNFVDsKIAkJfQogCiAJCS8qIE1hcmsgdGhlIGRldmljZSBhcyB1bnVzYWJsZS4gKi8KIAkJaWYgKHVkLT5ldmVudCAmIFVTQklQX0VIX1VOVVNBQkxFKSB7CiAJCQl1ZC0+ZWhfb3BzLnVudXNhYmxlKHVkKTsKLQogCQkJdWQtPmV2ZW50ICY9IH5VU0JJUF9FSF9VTlVTQUJMRTsKIAkJfQogCkBAIC02OCwxMyArNjYsMTQgQEAKIAogCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CiAJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh1ZC0+ZWhfd2FpdHEsCi0JCQkJCXVzYmlwX2V2ZW50X2hhcHBlbmVkKHVkKSB8fAotCQkJCQlrdGhyZWFkX3Nob3VsZF9zdG9wKCkpOworCQkJCQkgdXNiaXBfZXZlbnRfaGFwcGVuZWQodWQpIHx8CisJCQkJCSBrdGhyZWFkX3Nob3VsZF9zdG9wKCkpOwogCQl1c2JpcF9kYmdfZWgoIndha2V1cFxuIik7CiAKIAkJaWYgKGV2ZW50X2hhbmRsZXIodWQpIDwgMCkKIAkJCWJyZWFrOwogCX0KKwogCXJldHVybiAwOwogfQogCkBAIC04NSwxMCArODQsMTAgQEAKIAogCXVkLT5laCA9IGt0aHJlYWRfcnVuKGV2ZW50X2hhbmRsZXJfbG9vcCwgdWQsICJ1c2JpcF9laCIpOwogCWlmIChJU19FUlIodWQtPmVoKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkiVW5hYmxlIHRvIHN0YXJ0IGNvbnRyb2wgdGhyZWFkXG4iKTsKKwkJcHJfd2FybmluZygiVW5hYmxlIHRvIHN0YXJ0IGNvbnRyb2wgdGhyZWFkXG4iKTsKIAkJcmV0dXJuIFBUUl9FUlIodWQtPmVoKTsKIAl9CisKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYmlwX3N0YXJ0X2VoKTsKQEAgLTEwNiwxMSArMTA1LDggQEAKIHZvaWQgdXNiaXBfZXZlbnRfYWRkKHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkLCB1bnNpZ25lZCBsb25nIGV2ZW50KQogewogCXNwaW5fbG9jaygmdWQtPmxvY2spOwotCiAJdWQtPmV2ZW50IHw9IGV2ZW50OwotCiAJd2FrZV91cCgmdWQtPmVoX3dhaXRxKTsKLQogCXNwaW5fdW5sb2NrKCZ1ZC0+bG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JpcF9ldmVudF9hZGQpOwpAQCAtMTIwLDEwICsxMTYsOCBAQAogCWludCBoYXBwZW5lZCA9IDA7CiAKIAlzcGluX2xvY2soJnVkLT5sb2NrKTsKLQogCWlmICh1ZC0+ZXZlbnQgIT0gMCkKIAkJaGFwcGVuZWQgPSAxOwotCiAJc3Bpbl91bmxvY2soJnVkLT5sb2NrKTsKIAogCXJldHVybiBoYXBwZW5lZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2UvQVVUSE9SUyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2UvQVVUSE9SUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjczZTY1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9BVVRIT1JTCkBAIC0wLDAgKzEsMiBAQAorVGFrYWhpcm8gSGlyb2Z1Y2hpCitSb2JlcnQgTGVpYmwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2UvQ09QWUlORyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2UvQ09QWUlORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTYxMWU0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9DT1BZSU5HCkBAIC0wLDAgKzEsMzQwIEBACisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyICBuYW1lIG9mIGF1dGhvcgorICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCitwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCitsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9JTlNUQUxMIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9JTlNUQUxMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYzViNDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL0lOU1RBTEwKQEAgLTAsMCArMSwyMzcgQEAKK0luc3RhbGxhdGlvbiBJbnN0cnVjdGlvbnMKKyoqKioqKioqKioqKioqKioqKioqKioqKioKKworQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDA0LCAyMDA1LAorMjAwNiwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIGZyZWUgZG9jdW1lbnRhdGlvbjsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcwordW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgorCitCYXNpYyBJbnN0YWxsYXRpb24KKz09PT09PT09PT09PT09PT09PQorCitCcmllZmx5LCB0aGUgc2hlbGwgY29tbWFuZHMgYC4vY29uZmlndXJlOyBtYWtlOyBtYWtlIGluc3RhbGwnIHNob3VsZAorY29uZmlndXJlLCBidWlsZCwgYW5kIGluc3RhbGwgdGhpcyBwYWNrYWdlLiAgVGhlIGZvbGxvd2luZworbW9yZS1kZXRhaWxlZCBpbnN0cnVjdGlvbnMgYXJlIGdlbmVyaWM7IHNlZSB0aGUgYFJFQURNRScgZmlsZSBmb3IKK2luc3RydWN0aW9ucyBzcGVjaWZpYyB0byB0aGlzIHBhY2thZ2UuCisKKyAgIFRoZSBgY29uZmlndXJlJyBzaGVsbCBzY3JpcHQgYXR0ZW1wdHMgdG8gZ3Vlc3MgY29ycmVjdCB2YWx1ZXMgZm9yCit2YXJpb3VzIHN5c3RlbS1kZXBlbmRlbnQgdmFyaWFibGVzIHVzZWQgZHVyaW5nIGNvbXBpbGF0aW9uLiAgSXQgdXNlcwordGhvc2UgdmFsdWVzIHRvIGNyZWF0ZSBhIGBNYWtlZmlsZScgaW4gZWFjaCBkaXJlY3Rvcnkgb2YgdGhlIHBhY2thZ2UuCitJdCBtYXkgYWxzbyBjcmVhdGUgb25lIG9yIG1vcmUgYC5oJyBmaWxlcyBjb250YWluaW5nIHN5c3RlbS1kZXBlbmRlbnQKK2RlZmluaXRpb25zLiAgRmluYWxseSwgaXQgY3JlYXRlcyBhIHNoZWxsIHNjcmlwdCBgY29uZmlnLnN0YXR1cycgdGhhdAoreW91IGNhbiBydW4gaW4gdGhlIGZ1dHVyZSB0byByZWNyZWF0ZSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLCBhbmQgYQorZmlsZSBgY29uZmlnLmxvZycgY29udGFpbmluZyBjb21waWxlciBvdXRwdXQgKHVzZWZ1bCBtYWlubHkgZm9yCitkZWJ1Z2dpbmcgYGNvbmZpZ3VyZScpLgorCisgICBJdCBjYW4gYWxzbyB1c2UgYW4gb3B0aW9uYWwgZmlsZSAodHlwaWNhbGx5IGNhbGxlZCBgY29uZmlnLmNhY2hlJworYW5kIGVuYWJsZWQgd2l0aCBgLS1jYWNoZS1maWxlPWNvbmZpZy5jYWNoZScgb3Igc2ltcGx5IGAtQycpIHRoYXQgc2F2ZXMKK3RoZSByZXN1bHRzIG9mIGl0cyB0ZXN0cyB0byBzcGVlZCB1cCByZWNvbmZpZ3VyaW5nLiAgQ2FjaGluZyBpcworZGlzYWJsZWQgYnkgZGVmYXVsdCB0byBwcmV2ZW50IHByb2JsZW1zIHdpdGggYWNjaWRlbnRhbCB1c2Ugb2Ygc3RhbGUKK2NhY2hlIGZpbGVzLgorCisgICBJZiB5b3UgbmVlZCB0byBkbyB1bnVzdWFsIHRoaW5ncyB0byBjb21waWxlIHRoZSBwYWNrYWdlLCBwbGVhc2UgdHJ5Cit0byBmaWd1cmUgb3V0IGhvdyBgY29uZmlndXJlJyBjb3VsZCBjaGVjayB3aGV0aGVyIHRvIGRvIHRoZW0sIGFuZCBtYWlsCitkaWZmcyBvciBpbnN0cnVjdGlvbnMgdG8gdGhlIGFkZHJlc3MgZ2l2ZW4gaW4gdGhlIGBSRUFETUUnIHNvIHRoZXkgY2FuCitiZSBjb25zaWRlcmVkIGZvciB0aGUgbmV4dCByZWxlYXNlLiAgSWYgeW91IGFyZSB1c2luZyB0aGUgY2FjaGUsIGFuZCBhdAorc29tZSBwb2ludCBgY29uZmlnLmNhY2hlJyBjb250YWlucyByZXN1bHRzIHlvdSBkb24ndCB3YW50IHRvIGtlZXAsIHlvdQorbWF5IHJlbW92ZSBvciBlZGl0IGl0LgorCisgICBUaGUgZmlsZSBgY29uZmlndXJlLmFjJyAob3IgYGNvbmZpZ3VyZS5pbicpIGlzIHVzZWQgdG8gY3JlYXRlCitgY29uZmlndXJlJyBieSBhIHByb2dyYW0gY2FsbGVkIGBhdXRvY29uZicuICBZb3UgbmVlZCBgY29uZmlndXJlLmFjJyBpZgoreW91IHdhbnQgdG8gY2hhbmdlIGl0IG9yIHJlZ2VuZXJhdGUgYGNvbmZpZ3VyZScgdXNpbmcgYSBuZXdlciB2ZXJzaW9uCitvZiBgYXV0b2NvbmYnLgorCitUaGUgc2ltcGxlc3Qgd2F5IHRvIGNvbXBpbGUgdGhpcyBwYWNrYWdlIGlzOgorCisgIDEuIGBjZCcgdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBwYWNrYWdlJ3Mgc291cmNlIGNvZGUgYW5kIHR5cGUKKyAgICAgYC4vY29uZmlndXJlJyB0byBjb25maWd1cmUgdGhlIHBhY2thZ2UgZm9yIHlvdXIgc3lzdGVtLgorCisgICAgIFJ1bm5pbmcgYGNvbmZpZ3VyZScgbWlnaHQgdGFrZSBhIHdoaWxlLiAgV2hpbGUgcnVubmluZywgaXQgcHJpbnRzCisgICAgIHNvbWUgbWVzc2FnZXMgdGVsbGluZyB3aGljaCBmZWF0dXJlcyBpdCBpcyBjaGVja2luZyBmb3IuCisKKyAgMi4gVHlwZSBgbWFrZScgdG8gY29tcGlsZSB0aGUgcGFja2FnZS4KKworICAzLiBPcHRpb25hbGx5LCB0eXBlIGBtYWtlIGNoZWNrJyB0byBydW4gYW55IHNlbGYtdGVzdHMgdGhhdCBjb21lIHdpdGgKKyAgICAgdGhlIHBhY2thZ2UuCisKKyAgNC4gVHlwZSBgbWFrZSBpbnN0YWxsJyB0byBpbnN0YWxsIHRoZSBwcm9ncmFtcyBhbmQgYW55IGRhdGEgZmlsZXMgYW5kCisgICAgIGRvY3VtZW50YXRpb24uCisKKyAgNS4gWW91IGNhbiByZW1vdmUgdGhlIHByb2dyYW0gYmluYXJpZXMgYW5kIG9iamVjdCBmaWxlcyBmcm9tIHRoZQorICAgICBzb3VyY2UgY29kZSBkaXJlY3RvcnkgYnkgdHlwaW5nIGBtYWtlIGNsZWFuJy4gIFRvIGFsc28gcmVtb3ZlIHRoZQorICAgICBmaWxlcyB0aGF0IGBjb25maWd1cmUnIGNyZWF0ZWQgKHNvIHlvdSBjYW4gY29tcGlsZSB0aGUgcGFja2FnZSBmb3IKKyAgICAgYSBkaWZmZXJlbnQga2luZCBvZiBjb21wdXRlciksIHR5cGUgYG1ha2UgZGlzdGNsZWFuJy4gIFRoZXJlIGlzCisgICAgIGFsc28gYSBgbWFrZSBtYWludGFpbmVyLWNsZWFuJyB0YXJnZXQsIGJ1dCB0aGF0IGlzIGludGVuZGVkIG1haW5seQorICAgICBmb3IgdGhlIHBhY2thZ2UncyBkZXZlbG9wZXJzLiAgSWYgeW91IHVzZSBpdCwgeW91IG1heSBoYXZlIHRvIGdldAorICAgICBhbGwgc29ydHMgb2Ygb3RoZXIgcHJvZ3JhbXMgaW4gb3JkZXIgdG8gcmVnZW5lcmF0ZSBmaWxlcyB0aGF0IGNhbWUKKyAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgIDYuIE9mdGVuLCB5b3UgY2FuIGFsc28gdHlwZSBgbWFrZSB1bmluc3RhbGwnIHRvIHJlbW92ZSB0aGUgaW5zdGFsbGVkCisgICAgIGZpbGVzIGFnYWluLgorCitDb21waWxlcnMgYW5kIE9wdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PQorCitTb21lIHN5c3RlbXMgcmVxdWlyZSB1bnVzdWFsIG9wdGlvbnMgZm9yIGNvbXBpbGF0aW9uIG9yIGxpbmtpbmcgdGhhdCB0aGUKK2Bjb25maWd1cmUnIHNjcmlwdCBkb2VzIG5vdCBrbm93IGFib3V0LiAgUnVuIGAuL2NvbmZpZ3VyZSAtLWhlbHAnIGZvcgorZGV0YWlscyBvbiBzb21lIG9mIHRoZSBwZXJ0aW5lbnQgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorCisgICBZb3UgY2FuIGdpdmUgYGNvbmZpZ3VyZScgaW5pdGlhbCB2YWx1ZXMgZm9yIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycworYnkgc2V0dGluZyB2YXJpYWJsZXMgaW4gdGhlIGNvbW1hbmQgbGluZSBvciBpbiB0aGUgZW52aXJvbm1lbnQuICBIZXJlCitpcyBhbiBleGFtcGxlOgorCisgICAgIC4vY29uZmlndXJlIENDPWM5OSBDRkxBR1M9LWcgTElCUz0tbHBvc2l4CisKKyAgICpOb3RlIERlZmluaW5nIFZhcmlhYmxlczo6LCBmb3IgbW9yZSBkZXRhaWxzLgorCitDb21waWxpbmcgRm9yIE11bHRpcGxlIEFyY2hpdGVjdHVyZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitZb3UgY2FuIGNvbXBpbGUgdGhlIHBhY2thZ2UgZm9yIG1vcmUgdGhhbiBvbmUga2luZCBvZiBjb21wdXRlciBhdCB0aGUKK3NhbWUgdGltZSwgYnkgcGxhY2luZyB0aGUgb2JqZWN0IGZpbGVzIGZvciBlYWNoIGFyY2hpdGVjdHVyZSBpbiB0aGVpcgorb3duIGRpcmVjdG9yeS4gIFRvIGRvIHRoaXMsIHlvdSBjYW4gdXNlIEdOVSBgbWFrZScuICBgY2QnIHRvIHRoZQorZGlyZWN0b3J5IHdoZXJlIHlvdSB3YW50IHRoZSBvYmplY3QgZmlsZXMgYW5kIGV4ZWN1dGFibGVzIHRvIGdvIGFuZCBydW4KK3RoZSBgY29uZmlndXJlJyBzY3JpcHQuICBgY29uZmlndXJlJyBhdXRvbWF0aWNhbGx5IGNoZWNrcyBmb3IgdGhlCitzb3VyY2UgY29kZSBpbiB0aGUgZGlyZWN0b3J5IHRoYXQgYGNvbmZpZ3VyZScgaXMgaW4gYW5kIGluIGAuLicuCisKKyAgIFdpdGggYSBub24tR05VIGBtYWtlJywgaXQgaXMgc2FmZXIgdG8gY29tcGlsZSB0aGUgcGFja2FnZSBmb3Igb25lCithcmNoaXRlY3R1cmUgYXQgYSB0aW1lIGluIHRoZSBzb3VyY2UgY29kZSBkaXJlY3RvcnkuICBBZnRlciB5b3UgaGF2ZQoraW5zdGFsbGVkIHRoZSBwYWNrYWdlIGZvciBvbmUgYXJjaGl0ZWN0dXJlLCB1c2UgYG1ha2UgZGlzdGNsZWFuJyBiZWZvcmUKK3JlY29uZmlndXJpbmcgZm9yIGFub3RoZXIgYXJjaGl0ZWN0dXJlLgorCitJbnN0YWxsYXRpb24gTmFtZXMKKz09PT09PT09PT09PT09PT09PQorCitCeSBkZWZhdWx0LCBgbWFrZSBpbnN0YWxsJyBpbnN0YWxscyB0aGUgcGFja2FnZSdzIGNvbW1hbmRzIHVuZGVyCitgL3Vzci9sb2NhbC9iaW4nLCBpbmNsdWRlIGZpbGVzIHVuZGVyIGAvdXNyL2xvY2FsL2luY2x1ZGUnLCBldGMuICBZb3UKK2NhbiBzcGVjaWZ5IGFuIGluc3RhbGxhdGlvbiBwcmVmaXggb3RoZXIgdGhhbiBgL3Vzci9sb2NhbCcgYnkgZ2l2aW5nCitgY29uZmlndXJlJyB0aGUgb3B0aW9uIGAtLXByZWZpeD1QUkVGSVgnLgorCisgICBZb3UgY2FuIHNwZWNpZnkgc2VwYXJhdGUgaW5zdGFsbGF0aW9uIHByZWZpeGVzIGZvcgorYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZpbGVzIGFuZCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZmlsZXMuICBJZiB5b3UKK3Bhc3MgdGhlIG9wdGlvbiBgLS1leGVjLXByZWZpeD1QUkVGSVgnIHRvIGBjb25maWd1cmUnLCB0aGUgcGFja2FnZSB1c2VzCitQUkVGSVggYXMgdGhlIHByZWZpeCBmb3IgaW5zdGFsbGluZyBwcm9ncmFtcyBhbmQgbGlicmFyaWVzLgorRG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZGF0YSBmaWxlcyBzdGlsbCB1c2UgdGhlIHJlZ3VsYXIgcHJlZml4LgorCisgICBJbiBhZGRpdGlvbiwgaWYgeW91IHVzZSBhbiB1bnVzdWFsIGRpcmVjdG9yeSBsYXlvdXQgeW91IGNhbiBnaXZlCitvcHRpb25zIGxpa2UgYC0tYmluZGlyPURJUicgdG8gc3BlY2lmeSBkaWZmZXJlbnQgdmFsdWVzIGZvciBwYXJ0aWN1bGFyCitraW5kcyBvZiBmaWxlcy4gIFJ1biBgY29uZmlndXJlIC0taGVscCcgZm9yIGEgbGlzdCBvZiB0aGUgZGlyZWN0b3JpZXMKK3lvdSBjYW4gc2V0IGFuZCB3aGF0IGtpbmRzIG9mIGZpbGVzIGdvIGluIHRoZW0uCisKKyAgIElmIHRoZSBwYWNrYWdlIHN1cHBvcnRzIGl0LCB5b3UgY2FuIGNhdXNlIHByb2dyYW1zIHRvIGJlIGluc3RhbGxlZAord2l0aCBhbiBleHRyYSBwcmVmaXggb3Igc3VmZml4IG9uIHRoZWlyIG5hbWVzIGJ5IGdpdmluZyBgY29uZmlndXJlJyB0aGUKK29wdGlvbiBgLS1wcm9ncmFtLXByZWZpeD1QUkVGSVgnIG9yIGAtLXByb2dyYW0tc3VmZml4PVNVRkZJWCcuCisKK09wdGlvbmFsIEZlYXR1cmVzCis9PT09PT09PT09PT09PT09PQorCitTb21lIHBhY2thZ2VzIHBheSBhdHRlbnRpb24gdG8gYC0tZW5hYmxlLUZFQVRVUkUnIG9wdGlvbnMgdG8KK2Bjb25maWd1cmUnLCB3aGVyZSBGRUFUVVJFIGluZGljYXRlcyBhbiBvcHRpb25hbCBwYXJ0IG9mIHRoZSBwYWNrYWdlLgorVGhleSBtYXkgYWxzbyBwYXkgYXR0ZW50aW9uIHRvIGAtLXdpdGgtUEFDS0FHRScgb3B0aW9ucywgd2hlcmUgUEFDS0FHRQoraXMgc29tZXRoaW5nIGxpa2UgYGdudS1hcycgb3IgYHgnIChmb3IgdGhlIFggV2luZG93IFN5c3RlbSkuICBUaGUKK2BSRUFETUUnIHNob3VsZCBtZW50aW9uIGFueSBgLS1lbmFibGUtJyBhbmQgYC0td2l0aC0nIG9wdGlvbnMgdGhhdCB0aGUKK3BhY2thZ2UgcmVjb2duaXplcy4KKworICAgRm9yIHBhY2thZ2VzIHRoYXQgdXNlIHRoZSBYIFdpbmRvdyBTeXN0ZW0sIGBjb25maWd1cmUnIGNhbiB1c3VhbGx5CitmaW5kIHRoZSBYIGluY2x1ZGUgYW5kIGxpYnJhcnkgZmlsZXMgYXV0b21hdGljYWxseSwgYnV0IGlmIGl0IGRvZXNuJ3QsCit5b3UgY2FuIHVzZSB0aGUgYGNvbmZpZ3VyZScgb3B0aW9ucyBgLS14LWluY2x1ZGVzPURJUicgYW5kCitgLS14LWxpYnJhcmllcz1ESVInIHRvIHNwZWNpZnkgdGhlaXIgbG9jYXRpb25zLgorCitTcGVjaWZ5aW5nIHRoZSBTeXN0ZW0gVHlwZQorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlcmUgbWF5IGJlIHNvbWUgZmVhdHVyZXMgYGNvbmZpZ3VyZScgY2Fubm90IGZpZ3VyZSBvdXQgYXV0b21hdGljYWxseSwKK2J1dCBuZWVkcyB0byBkZXRlcm1pbmUgYnkgdGhlIHR5cGUgb2YgbWFjaGluZSB0aGUgcGFja2FnZSB3aWxsIHJ1biBvbi4KK1VzdWFsbHksIGFzc3VtaW5nIHRoZSBwYWNrYWdlIGlzIGJ1aWx0IHRvIGJlIHJ1biBvbiB0aGUgX3NhbWVfCithcmNoaXRlY3R1cmVzLCBgY29uZmlndXJlJyBjYW4gZmlndXJlIHRoYXQgb3V0LCBidXQgaWYgaXQgcHJpbnRzIGEKK21lc3NhZ2Ugc2F5aW5nIGl0IGNhbm5vdCBndWVzcyB0aGUgbWFjaGluZSB0eXBlLCBnaXZlIGl0IHRoZQorYC0tYnVpbGQ9VFlQRScgb3B0aW9uLiAgVFlQRSBjYW4gZWl0aGVyIGJlIGEgc2hvcnQgbmFtZSBmb3IgdGhlIHN5c3RlbQordHlwZSwgc3VjaCBhcyBgc3VuNCcsIG9yIGEgY2Fub25pY2FsIG5hbWUgd2hpY2ggaGFzIHRoZSBmb3JtOgorCisgICAgIENQVS1DT01QQU5ZLVNZU1RFTQorCit3aGVyZSBTWVNURU0gY2FuIGhhdmUgb25lIG9mIHRoZXNlIGZvcm1zOgorCisgICAgIE9TIEtFUk5FTC1PUworCisgICBTZWUgdGhlIGZpbGUgYGNvbmZpZy5zdWInIGZvciB0aGUgcG9zc2libGUgdmFsdWVzIG9mIGVhY2ggZmllbGQuICBJZgorYGNvbmZpZy5zdWInIGlzbid0IGluY2x1ZGVkIGluIHRoaXMgcGFja2FnZSwgdGhlbiB0aGlzIHBhY2thZ2UgZG9lc24ndAorbmVlZCB0byBrbm93IHRoZSBtYWNoaW5lIHR5cGUuCisKKyAgIElmIHlvdSBhcmUgX2J1aWxkaW5nXyBjb21waWxlciB0b29scyBmb3IgY3Jvc3MtY29tcGlsaW5nLCB5b3Ugc2hvdWxkCit1c2UgdGhlIG9wdGlvbiBgLS10YXJnZXQ9VFlQRScgdG8gc2VsZWN0IHRoZSB0eXBlIG9mIHN5c3RlbSB0aGV5IHdpbGwKK3Byb2R1Y2UgY29kZSBmb3IuCisKKyAgIElmIHlvdSB3YW50IHRvIF91c2VfIGEgY3Jvc3MgY29tcGlsZXIsIHRoYXQgZ2VuZXJhdGVzIGNvZGUgZm9yIGEKK3BsYXRmb3JtIGRpZmZlcmVudCBmcm9tIHRoZSBidWlsZCBwbGF0Zm9ybSwgeW91IHNob3VsZCBzcGVjaWZ5IHRoZQorImhvc3QiIHBsYXRmb3JtIChpLmUuLCB0aGF0IG9uIHdoaWNoIHRoZSBnZW5lcmF0ZWQgcHJvZ3JhbXMgd2lsbAorZXZlbnR1YWxseSBiZSBydW4pIHdpdGggYC0taG9zdD1UWVBFJy4KKworU2hhcmluZyBEZWZhdWx0cworPT09PT09PT09PT09PT09PQorCitJZiB5b3Ugd2FudCB0byBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGBjb25maWd1cmUnIHNjcmlwdHMgdG8gc2hhcmUsIHlvdQorY2FuIGNyZWF0ZSBhIHNpdGUgc2hlbGwgc2NyaXB0IGNhbGxlZCBgY29uZmlnLnNpdGUnIHRoYXQgZ2l2ZXMgZGVmYXVsdAordmFsdWVzIGZvciB2YXJpYWJsZXMgbGlrZSBgQ0MnLCBgY2FjaGVfZmlsZScsIGFuZCBgcHJlZml4Jy4KK2Bjb25maWd1cmUnIGxvb2tzIGZvciBgUFJFRklYL3NoYXJlL2NvbmZpZy5zaXRlJyBpZiBpdCBleGlzdHMsIHRoZW4KK2BQUkVGSVgvZXRjL2NvbmZpZy5zaXRlJyBpZiBpdCBleGlzdHMuICBPciwgeW91IGNhbiBzZXQgdGhlCitgQ09ORklHX1NJVEUnIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUgc2l0ZSBzY3JpcHQuCitBIHdhcm5pbmc6IG5vdCBhbGwgYGNvbmZpZ3VyZScgc2NyaXB0cyBsb29rIGZvciBhIHNpdGUgc2NyaXB0LgorCitEZWZpbmluZyBWYXJpYWJsZXMKKz09PT09PT09PT09PT09PT09PQorCitWYXJpYWJsZXMgbm90IGRlZmluZWQgaW4gYSBzaXRlIHNoZWxsIHNjcmlwdCBjYW4gYmUgc2V0IGluIHRoZQorZW52aXJvbm1lbnQgcGFzc2VkIHRvIGBjb25maWd1cmUnLiAgSG93ZXZlciwgc29tZSBwYWNrYWdlcyBtYXkgcnVuCitjb25maWd1cmUgYWdhaW4gZHVyaW5nIHRoZSBidWlsZCwgYW5kIHRoZSBjdXN0b21pemVkIHZhbHVlcyBvZiB0aGVzZQordmFyaWFibGVzIG1heSBiZSBsb3N0LiAgSW4gb3JkZXIgdG8gYXZvaWQgdGhpcyBwcm9ibGVtLCB5b3Ugc2hvdWxkIHNldAordGhlbSBpbiB0aGUgYGNvbmZpZ3VyZScgY29tbWFuZCBsaW5lLCB1c2luZyBgVkFSPXZhbHVlJy4gIEZvciBleGFtcGxlOgorCisgICAgIC4vY29uZmlndXJlIENDPS91c3IvbG9jYWwyL2Jpbi9nY2MKKworY2F1c2VzIHRoZSBzcGVjaWZpZWQgYGdjYycgdG8gYmUgdXNlZCBhcyB0aGUgQyBjb21waWxlciAodW5sZXNzIGl0IGlzCitvdmVycmlkZGVuIGluIHRoZSBzaXRlIHNoZWxsIHNjcmlwdCkuCisKK1VuZm9ydHVuYXRlbHksIHRoaXMgdGVjaG5pcXVlIGRvZXMgbm90IHdvcmsgZm9yIGBDT05GSUdfU0hFTEwnIGR1ZSB0bworYW4gQXV0b2NvbmYgYnVnLiAgVW50aWwgdGhlIGJ1ZyBpcyBmaXhlZCB5b3UgY2FuIHVzZSB0aGlzIHdvcmthcm91bmQ6CisKKyAgICAgQ09ORklHX1NIRUxMPS9iaW4vYmFzaCAvYmluL2Jhc2ggLi9jb25maWd1cmUgQ09ORklHX1NIRUxMPS9iaW4vYmFzaAorCitgY29uZmlndXJlJyBJbnZvY2F0aW9uCis9PT09PT09PT09PT09PT09PT09PT09CisKK2Bjb25maWd1cmUnIHJlY29nbml6ZXMgdGhlIGZvbGxvd2luZyBvcHRpb25zIHRvIGNvbnRyb2wgaG93IGl0IG9wZXJhdGVzLgorCitgLS1oZWxwJworYC1oJworICAgICBQcmludCBhIHN1bW1hcnkgb2YgdGhlIG9wdGlvbnMgdG8gYGNvbmZpZ3VyZScsIGFuZCBleGl0LgorCitgLS12ZXJzaW9uJworYC1WJworICAgICBQcmludCB0aGUgdmVyc2lvbiBvZiBBdXRvY29uZiB1c2VkIHRvIGdlbmVyYXRlIHRoZSBgY29uZmlndXJlJworICAgICBzY3JpcHQsIGFuZCBleGl0LgorCitgLS1jYWNoZS1maWxlPUZJTEUnCisgICAgIEVuYWJsZSB0aGUgY2FjaGU6IHVzZSBhbmQgc2F2ZSB0aGUgcmVzdWx0cyBvZiB0aGUgdGVzdHMgaW4gRklMRSwKKyAgICAgdHJhZGl0aW9uYWxseSBgY29uZmlnLmNhY2hlJy4gIEZJTEUgZGVmYXVsdHMgdG8gYC9kZXYvbnVsbCcgdG8KKyAgICAgZGlzYWJsZSBjYWNoaW5nLgorCitgLS1jb25maWctY2FjaGUnCitgLUMnCisgICAgIEFsaWFzIGZvciBgLS1jYWNoZS1maWxlPWNvbmZpZy5jYWNoZScuCisKK2AtLXF1aWV0JworYC0tc2lsZW50JworYC1xJworICAgICBEbyBub3QgcHJpbnQgbWVzc2FnZXMgc2F5aW5nIHdoaWNoIGNoZWNrcyBhcmUgYmVpbmcgbWFkZS4gIFRvCisgICAgIHN1cHByZXNzIGFsbCBub3JtYWwgb3V0cHV0LCByZWRpcmVjdCBpdCB0byBgL2Rldi9udWxsJyAoYW55IGVycm9yCisgICAgIG1lc3NhZ2VzIHdpbGwgc3RpbGwgYmUgc2hvd24pLgorCitgLS1zcmNkaXI9RElSJworICAgICBMb29rIGZvciB0aGUgcGFja2FnZSdzIHNvdXJjZSBjb2RlIGluIGRpcmVjdG9yeSBESVIuICBVc3VhbGx5CisgICAgIGBjb25maWd1cmUnIGNhbiBkZXRlcm1pbmUgdGhhdCBkaXJlY3RvcnkgYXV0b21hdGljYWxseS4KKworYGNvbmZpZ3VyZScgYWxzbyBhY2NlcHRzIHNvbWUgb3RoZXIsIG5vdCB3aWRlbHkgdXNlZnVsLCBvcHRpb25zLiAgUnVuCitgY29uZmlndXJlIC0taGVscCcgZm9yIG1vcmUgZGV0YWlscy4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9NYWtlZmlsZS5hbSBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2UvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNmNTFiOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2UvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwxMSBAQAorU1VCRElSUyA6PSBsaWJzcmMgc3JjCitpbmNsdWRlZGlyIDo9IEBpbmNsdWRlZGlyQC91c2JpcAoraW5jbHVkZV9IRUFERVJTIDo9ICQoYWRkcHJlZml4IGxpYnNyYy8sIFwKKwkJICAgICB1c2JpcC5oIHVzYmlwX2NvbW1vbi5oIHZoY2lfZHJpdmVyLmggc3R1Yl9kcml2ZXIuaCkKKworZGlzdF9tYW5fTUFOUyA6PSAkKGFkZHByZWZpeCBkb2MvLCB1c2JpcC44IHVzYmlwZC44IHVzYmlwX2JpbmRfZHJpdmVyLjgpCisKK2lmIElOU1RBTExfVVNCSURTCitwa2dkYXRhX0RBVEEgOj0gdXNiLmlkcworRVhUUkFfRElTVCA6PSAkKHBrZ2RhdGFfREFUQSkKK2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL1JFQURNRSBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2UvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZTg0YjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL1JFQURNRQpAQCAtMCwwICsxLDIxNSBAQAorIyB2aW06dHc9Nzg6dHM9NDpleHBhbmR0YWI6YWk6c3c9NAorIworIyBSRUFETUUgZm9yIHVzYmlwLXV0aWxzCisjCisjIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IFRha2FoaXJvIEhpcm9mdWNoaQorCisKK1tSZXF1aXJlbWVudHNdCisgICAgLSBVU0IvSVAgZGV2aWNlIGRyaXZlcnMKKyAgICAgICAgSXRzIHNvdXJjZSBjb2RlIGlzIGluY2x1ZGVkIHVuZGVyICQodG9wKS9kcml2ZXJzLy4KKworICAgIC0gc3lzZnN1dGlscyA+PSAyLjAuMAorICAgICAgICBzeXNmc3V0aWxzIGxpYnJhcnkKKworICAgIC0gbGlid3JhcDAtZGV2CisgICAgICAgIHRjcCB3cmFwcGVyIGxpYnJhcnkKKworICAgIC0gZ2NjID49IDQuMAorCisgICAgLSBsaWJnbGliMi4wLWRldiA+PSAyLjYuMAorCisgICAgLSBsaWJ0b29sLCBhdXRvbWFrZSA+PSAxLjksIGF1dG9jb25mID49IDIuNS4wLCBwa2ctY29uZmlnCisKK1tJbnN0YWxsXQorICAgIDAuIFNraXAgaGVyZSBpZiB5b3Ugc2VlIGEgY29uZmlndXJlIHNjcmlwdC4KKyAgICAgICAgJCAuL2F1dG9nZW4uc2gKKworICAgIDEuIENvbXBpbGUgJiBpbnN0YWxsLgorICAgICAgICAkIC4vY29uZmlndXJlCisgICAgICAgICQgbWFrZSBpbnN0YWxsCisKKyAgICAyLiBDb21waWxlICYgaW5zdGFsbCBVU0IvSVAgZHJpdmVycyBpZiBub3QgeWV0LgorCitbVXNhZ2VdCisgICAgc2VydmVyOiMgKEF0dGFjaCB5b3VyIFVTQiBkZXZpY2UgcGh5c2ljYWxseS4pCisKKyAgICBzZXJ2ZXI6IyBpbnNtb2QgdXNiaXAtY29yZS5rbworICAgIHNlcnZlcjojIGluc21vZCB1c2JpcC1ob3N0LmtvCisgICAgICAgIC0gSXQgd2FzIGZvcm1lcmx5IG5hbWVkIGFzIHN0dWIua28uCisKKyAgICBzZXJ2ZXI6IyB1c2JpcGQgLUQKKyAgICAgICAgLSBTdGFydCB1c2JpcCBkYWVtb24uCisKKyAgICBzZXJ2ZXI6IyB1c2JpcF9iaW5kX2RyaXZlciAtLWxpc3QKKyAgICAgICAgLSBMaXN0IGRyaXZlciBhc3NpZ25tZW50cyBmb3IgdXNiIGRldmljZXMuCisKKyAgICBzZXJ2ZXI6IyB1c2JpcF9iaW5kX2RyaXZlciAtLXVzYmlwIDEtMgorICAgICAgICAtIEJpbmQgdXNiaXAtaG9zdC5rbyB0byB0aGUgZGV2aWNlIG9mIGJ1c2lkIDEtMi4KKyAgICAgICAgLSBBIHVzYiBkZXZpY2UgMS0yIGlzIG5vdyBleHBvcnRhYmxlIHRvIG90aGVyIGhvc3RzIQorICAgICAgICAtIFVzZSAndXNiaXBfYmluZF9kcml2ZXIgLS1vdGhlciAxLTInIHdoZW4geW91IHdhbnQgdG8gc2h1dGRvd24gZXhwb3J0aW5nCisgICAgICAgICAgYW5kIHVzZSB0aGUgZGV2aWNlIGxvY2FsbHkuCisKKworICAgIGNsaWVudDojIGluc21vZCB1c2JpcC1jb3JlLmtvCisgICAgY2xpZW50OiMgaW5zbW9kIHZoY2ktaGNkLmtvCisgICAgICAgIC0gSXQgd2FzIGZvcm1lcmx5IG5hbWVkIGFzIHZoY2kua28uCisKKyAgICBjbGllbnQ6IyB1c2JpcCAtLWxpc3Qgc2VydmVyCisgICAgICAgIC0gTGlzdCBleHBvcnRhYmxlIHVzYiBkZXZpY2VzIG9uIHRoZSBzZXJ2ZXIuCisKKyAgICBjbGllbnQ6IyB1c2JpcCAtLWF0dGFjaCBzZXJ2ZXIgMS0yCisgICAgICAgIC0gQ29ubmVjdCB0aGUgcmVtb3RlIFVTQiBkZXZpY2UuCisKKyAgICBjbGllbnQ6IyB1c2JpcCAtLXBvcnQKKyAgICAgICAgLSBTaG93IHZpcnR1YWwgcG9ydCBzdGF0dXMuCisKKyAgICBjbGllbnQ6IyB1c2JpcCAtLWRldGFjaCAwCisgICAgICAgIC0gRGV0YWNoIHRoZSB1c2IgZGV2aWNlLgorCisKK1tPdXRwdXQgRXhhbXBsZV0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIFNFUlZFUiBTSURFIChwaHlzaWNhbGx5IGF0dGFjaCB5b3VyIFVTQiBkZXZpY2VzIHRvIHRoaXMgaG9zdCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Ryb2lzOiMgaW5zbW9kIChzb21ld2hlcmUpL3VzYmlwLWNvcmUua28KK3Ryb2lzOiMgaW5zbW9kIChzb21ld2hlcmUpL3VzYmlwLWhvc3Qua28KK3Ryb2lzOiMgdXNiaXBkIC1ECisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbiBhbm90aGVyIHRlcm1pbmFsLCBsZXQncyBsb29rIHVwIHdoYXQgdXNiIGRldmljZXMgYXJlIHBoeXNpY2FsbHkgYXR0YWNoZWQgdG8KK3RoaXMgaG9zdC4gIFdlIGNhbiBzZWUgYSB1c2Igc3RvcmFnZSBkZXZpY2Ugb2YgYnVzaWQgMy0zLjIgaXMgbm93IGJvdW5kIHRvCit1c2Itc3RvcmFnZSBkcml2ZXIuIFRvIGV4cG9ydCB0aGlzIGRldmljZSwgd2UgZmlyc3QgbWFyayB0aGUgZGV2aWNlIGFzCisiZXhwb3J0YWJsZSI7IHRoZSBkZXZpY2UgaXMgYm91bmQgdG8gdXNiaXAgZHJpdmVyLiBQbGVhc2UgcmVtZW1iZXIgeW91IGNhbiBub3QKK2V4cG9ydCBhIHVzYiBodWIuCisKKyAgIHRyb2lzOiMgdXNiaXBfYmluZF9kcml2ZXIgLS1saXN0CisgICBMaXN0IFVTQiBkZXZpY2VzCisgICAtIGJ1c2lkIDMtMy4yICgwNGJiOjAyMDYpCisgICAgICAgMy0zLjI6MS4wIC0+IHVzYi1zdG9yYWdlCisKKyAgIC0gYnVzaWQgMy0zLjEgKDA4YmI6MjcwMikKKyAgICAgICAzLTMuMToxLjAgLT4gc25kLXVzYi1hdWRpbworICAgICAgIDMtMy4xOjEuMSAtPiBzbmQtdXNiLWF1ZGlvCisKKyAgIC0gYnVzaWQgMy0zICgwNDA5OjAwNTgpCisgICAgICAgMy0zOjEuMCAtPiBodWIKKworICAgLSBidXNpZCAzLTIgKDA3MTE6MDkwMikKKyAgICAgICAzLTI6MS4wIC0+IG5vbmUKKworICAgLSBidXNpZCAxLTEgKDA1YTk6YTUxMSkKKyAgICAgICAxLTE6MS4wIC0+IG92NTExCisKKyAgIC0gYnVzaWQgNC0xICgwNDZkOjA4YjIpCisgICAgICAgNC0xOjEuMCAtPiBub25lCisgICAgICAgNC0xOjEuMSAtPiBub25lCisgICAgICAgNC0xOjEuMiAtPiBub25lCisKKyAgIC0gYnVzaWQgNS0yICgwNThmOjkyNTQpCisgICAgICAgNS0yOjEuMCAtPiBodWIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01hcmsgdGhlIGRldmljZSBvZiBidXNpZCAzLTMuMiBhcyBleHBvcnRhYmxlLgorCisgICB0cm9pczojIHVzYmlwX2JpbmRfZHJpdmVyIC0tdXNiaXAgMy0zLjIKKyAgICoqIChwcm9jZXNzOjI0NjIxKTogREVCVUc6ICAzLTMuMjoxLjAgICAtPiBub25lCisgICAqKiAocHJvY2VzczoyNDYyMSk6IERFQlVHOiB3cml0ZSAiYWRkIDMtMy4yIiB0byAvc3lzL2J1cy91c2IvZHJpdmVycy91c2JpcC9tYXRjaF9idXNpZAorICAgKiogTWVzc2FnZTogYmluZCAzLTMuMiB0byB1c2JpcCwgY29tcGxldGUhCisKKyAgIHRyb2lzOiMgdXNiaXBfYmluZF9kcml2ZXIgLS1saXN0CisgICBMaXN0IFVTQiBkZXZpY2VzCisgICAtIGJ1c2lkIDMtMy4yICgwNGJiOjAyMDYpCisgICAgICAgICAgIDMtMy4yOjEuMCAtPiB1c2JpcAorICAgKHNuaXApCisKK0l0ZXJhdGUgdGhlIGFib3ZlIG9wZXJhdGlvbiBmb3Igb3RoZXIgZGV2aWNlcyBpZiB5b3UgbGlrZS4KKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLSBDTElFTlQgU0lERSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitGaXJzdCwgbGV0J3MgbGlzdCBhdmFpbGFibGUgcmVtb3RlIGRldmljZXMgd2hpY2ggYXJlIG1hcmtlZCBhcyBleHBvcnRhYmxlIGluCit0aGUgc2VydmVyIGhvc3QuCisKKyAgIGRldXg6IyBpbnNtb2QgKHNvbWV3aGVyZSkvdXNiaXAtY29yZS5rbworICAgZGV1eDojIGluc21vZCAoc29tZXdoZXJlKS92aGNpX2hjZC5rbworCisgICBkZXV4OiMgdXNiaXAgLS1saXN0IDEwLjAuMC4zCisgICAtIDEwLjAuMC4zCisgICAgICAgICAgMS0xOiBQcm9saWZpYyBUZWNobm9sb2d5LCBJbmMuIDogdW5rbm93biBwcm9kdWN0ICgwNjdiOjM1MDcpCisgICAgICAgICAgICAgOiAvc3lzL2RldmljZXMvcGNpMDAwMDowMC8wMDAwOjAwOjFmLjIvdXNiMS8xLTEKKyAgICAgICAgICAgICA6IChEZWZpbmVkIGF0IEludGVyZmFjZSBsZXZlbCkgLyB1bmtub3duIHN1YmNsYXNzIC8gdW5rbm93biBwcm90b2NvbCAoMDAvMDAvMDApCisgICAgICAgICAgICAgOiAgMCAtIE1hc3MgU3RvcmFnZSAvIFNDU0kgLyBCdWxrIChaaXApICgwOC8wNi81MCkKKworICAgICAgMS0yLjIuMTogQXBwbGUgQ29tcHV0ZXIsIEluYy4gOiB1bmtub3duIHByb2R1Y3QgKDA1YWM6MDIwMykKKyAgICAgICAgICAgICA6IC9zeXMvZGV2aWNlcy9wY2kwMDAwOjAwLzAwMDA6MDA6MWYuMi91c2IxLzEtMi8xLTIuMi8xLTIuMi4xCisgICAgICAgICAgICAgOiAoRGVmaW5lZCBhdCBJbnRlcmZhY2UgbGV2ZWwpIC8gdW5rbm93biBzdWJjbGFzcyAvIHVua25vd24gcHJvdG9jb2wgKDAwLzAwLzAwKQorICAgICAgICAgICAgIDogIDAgLSBIdW1hbiBJbnRlcmZhY2UgRGV2aWNlcyAvIEJvb3QgSW50ZXJmYWNlIFN1YmNsYXNzIC8gS2V5Ym9hcmQgKDAzLzAxLzAxKQorCisgICAgICAxLTIuMi4zOiBPbW5pVmlzaW9uIFRlY2hub2xvZ2llcywgSW5jLiA6IE9WNTExKyBXZWJDYW0gKDA1YTk6YTUxMSkKKyAgICAgICAgICAgICA6IC9zeXMvZGV2aWNlcy9wY2kwMDAwOjAwLzAwMDA6MDA6MWYuMi91c2IxLzEtMi8xLTIuMi8xLTIuMi4zCisgICAgICAgICAgICAgOiAoRGVmaW5lZCBhdCBJbnRlcmZhY2UgbGV2ZWwpIC8gdW5rbm93biBzdWJjbGFzcyAvIHVua25vd24gcHJvdG9jb2wgKDAwLzAwLzAwKQorICAgICAgICAgICAgIDogIDAgLSBWZW5kb3IgU3BlY2lmaWMgQ2xhc3MgLyB1bmtub3duIHN1YmNsYXNzIC8gdW5rbm93biBwcm90b2NvbCAoZmYvMDAvMDApCisKKyAgICAgICAgICAzLTE6IExvZ2l0ZWNoLCBJbmMuIDogUXVpY2tDYW0gUHJvIDQwMDAgKDA0NmQ6MDhiMikKKyAgICAgICAgICAgICA6IC9zeXMvZGV2aWNlcy9wY2kwMDAwOjAwLzAwMDA6MDA6MWUuMC8wMDAwOjAyOjBhLjAvdXNiMy8zLTEKKyAgICAgICAgICAgICA6IChEZWZpbmVkIGF0IEludGVyZmFjZSBsZXZlbCkgLyB1bmtub3duIHN1YmNsYXNzIC8gdW5rbm93biBwcm90b2NvbCAoMDAvMDAvMDApCisgICAgICAgICAgICAgOiAgMCAtIERhdGEgLyB1bmtub3duIHN1YmNsYXNzIC8gdW5rbm93biBwcm90b2NvbCAoMGEvZmYvMDApCisgICAgICAgICAgICAgOiAgMSAtIEF1ZGlvIC8gQ29udHJvbCBEZXZpY2UgLyB1bmtub3duIHByb3RvY29sICgwMS8wMS8wMCkKKyAgICAgICAgICAgICA6ICAyIC0gQXVkaW8gLyBTdHJlYW1pbmcgLyB1bmtub3duIHByb3RvY29sICgwMS8wMi8wMCkKKworICAgICAgICAgIDQtMTogTG9naXRlY2gsIEluYy4gOiBRdWlja0NhbSBFeHByZXNzICgwNDZkOjA4NzApCisgICAgICAgICAgICAgOiAvc3lzL2RldmljZXMvcGNpMDAwMDowMC8wMDAwOjAwOjFlLjAvMDAwMDowMjowYS4xL3VzYjQvNC0xCisgICAgICAgICAgICAgOiBWZW5kb3IgU3BlY2lmaWMgQ2xhc3MgLyBWZW5kb3IgU3BlY2lmaWMgU3ViY2xhc3MgLyBWZW5kb3IgU3BlY2lmaWMgUHJvdG9jb2wgKGZmL2ZmL2ZmKQorICAgICAgICAgICAgIDogIDAgLSBWZW5kb3IgU3BlY2lmaWMgQ2xhc3MgLyBWZW5kb3IgU3BlY2lmaWMgU3ViY2xhc3MgLyBWZW5kb3IgU3BlY2lmaWMgUHJvdG9jb2wgKGZmL2ZmL2ZmKQorCisgICAgICAgICAgNC0yOiBUZXhhcyBJbnN0cnVtZW50cyBKYXBhbiA6IHVua25vd24gcHJvZHVjdCAoMDhiYjoyNzAyKQorICAgICAgICAgICAgIDogL3N5cy9kZXZpY2VzL3BjaTAwMDA6MDAvMDAwMDowMDoxZS4wLzAwMDA6MDI6MGEuMS91c2I0LzQtMgorICAgICAgICAgICAgIDogKERlZmluZWQgYXQgSW50ZXJmYWNlIGxldmVsKSAvIHVua25vd24gc3ViY2xhc3MgLyB1bmtub3duIHByb3RvY29sICgwMC8wMC8wMCkKKyAgICAgICAgICAgICA6ICAwIC0gQXVkaW8gLyBDb250cm9sIERldmljZSAvIHVua25vd24gcHJvdG9jb2wgKDAxLzAxLzAwKQorICAgICAgICAgICAgIDogIDEgLSBBdWRpbyAvIFN0cmVhbWluZyAvIHVua25vd24gcHJvdG9jb2wgKDAxLzAyLzAwKQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQXR0YWNoIGEgcmVtb3RlIHVzYiBkZXZpY2UhCisKKyAgIGRldXg6IyB1c2JpcCAtLWF0dGFjaCAxMC4wLjAuMyAxLTEKKyAgIHBvcnQgMCBhdHRhY2hlZAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU2hvdyB3aGF0IGRldmljZXMgYXJlIGF0dGFjaGVkIHRvIHRoaXMgY2xpZW50LgorCisgICBkZXV4OiMgdXNiaXAgLS1wb3J0CisgICBQb3J0IDAwOiA8UG9ydCBpbiBVc2U+IGF0IEZ1bGwgU3BlZWQoMTJNYnBzKQorICAgICAgICAgIFByb2xpZmljIFRlY2hub2xvZ3ksIEluYy4gOiB1bmtub3duIHByb2R1Y3QgKDA2N2I6MzUwNykKKyAgICAgICAgICA2LTEgLT4gdXNiaXA6Ly8xMC4wLjAuMzozMjQwLzEtMSAgKHJlbW90ZSBidXMvZGV2IDAwMS8wMDQpCisgICAgICAgICAgNi0xOjEuMCB1c2VkIGJ5IHVzYi1zdG9yYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgL3N5cy9jbGFzcy9zY3NpX2RldmljZS8wOjA6MDowL2RldmljZQorICAgICAgICAgICAgICAgICAgICAgICAgIC9zeXMvY2xhc3Mvc2NzaV9ob3N0L2hvc3QwL2RldmljZQorICAgICAgICAgICAgICAgICAgICAgICAgIC9zeXMvYmxvY2svc2RhL2RldmljZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRGV0YWNoIHRoZSBpbXBvcnRlZCBkZXZpY2UuCisKKyAgIGRldXg6IyB1c2JpcCAtLWRldGFjaCAwCisgICBwb3J0IDAgZGV0YWNoZWQKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitbQ2hlY2sgTGlzdF0KKyAgICAtIFNlZSBEZWJ1ZyBUaXBzIGluIHRoZSBwcm9qZWN0IHdpa2kuCisgICAgICAgIC0gaHR0cDovL3VzYmlwLndpa2kuc291cmNlZm9yZ2UubmV0L2hvdy10by1kZWJ1Zy11c2JpcAorICAgIC0gdXNiaXAtaG9zdC5rbyBtdXN0IGJlIGJvdW5kIHRvIHRoZSB0YXJnZXQgZGV2aWNlLgorICAgICAgICAtIFNlZSAvcHJvYy9idXMvdXNiL2RldmljZXMgYW5kIGZpbmQgIkRyaXZlcj0uLi4iIGxpbmVzIG9mIHRoZSBkZXZpY2UuCisgICAgLSBTaHV0ZG93biBmaXJld2FsbC4KKyAgICAgICAgLSB1c2JpcCBub3cgdXNlcyBUQ1AgcG9ydCAzMjQwLgorICAgIC0gRGlzYWJsZSBTRUxpbnV4LgorICAgIC0gSWYgcG9zc2libGUsIGNvbXBpbGUgeW91ciBrZXJuZWwgd2l0aCBDT05GSUdfVVNCX0RFQlVHIGZsYWcgYW5kIHRyeQorICAgICAgYWdhaW4uCisgICAgLSBDaGVjayB5b3VyIGtlcm5lbCBhbmQgZGFlbW9uIG1lc3NhZ2VzLgorICAgICAgICBleC4gL3Zhci9sb2cve21lc3NhZ2VzLCBrZXJuLmxvZywgZGFlbW9uLmxvZywgc3lzbG9nfQorCisKK1tDb250YWN0XQorICAgIE1haWxpbmcgTGlzdDogdXNiaXAtZGV2ZWwgX2F0XyBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2UvYXV0b2dlbi5zaCBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2UvYXV0b2dlbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMTExMmQzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9hdXRvZ2VuLnNoCkBAIC0wLDAgKzEsOSBAQAorIyEvYmluL3NoIC14CisKKyNhY2xvY2FsCisjYXV0b2hlYWRlcgorI2xpYnRvb2xpemUgLS1jb3B5IC0tZm9yY2UKKyNhdXRvbWFrZS0xLjkgLWFjZgorI2F1dG9jb25mCisKK2F1dG9yZWNvbmYgLWkgLWYgLXYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2UvY2xlYW51cC5zaCBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2UvY2xlYW51cC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYTJmODliCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9jbGVhbnVwLnNoCkBAIC0wLDAgKzEsMTAgQEAKKyMhL2Jpbi9zaCAteAorCisKK2lmIFsgLXIgTWFrZWZpbGUgXTsgdGhlbgorCW1ha2UgZGlzdGNsZWFuCitmaQorCitGSUxFUz0iY29uZmlndXJlIGNzY29wZS5vdXQgTWFrZWZpbGUuaW4gZGVwY29tcCBjb21waWxlIGNvbmZpZy5ndWVzcyBjb25maWcuc3ViIGNvbmZpZy5oLmlufiBjb25maWcubG9nIGNvbmZpZy5zdGF0dXMgbHRtYWluLnNoIGxpYnRvb2wgY29uZmlnLmguaW4gYXV0b200dGUuY2FjaGUgbWlzc2luZyBhY2xvY2FsLm00IGluc3RhbGwtc2ggY21kL01ha2VmaWxlLmluIGxpYi9NYWtlZmlsZS5pbiBNYWtlZmlsZSBsaWIvTWFrZWZpbGUgY21kL01ha2VmaWxlIgorCitybSAtUmYgJEZJTEVTCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL2NvbmZpZ3VyZS5hYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2UvY29uZmlndXJlLmFjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYWZhMTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL2NvbmZpZ3VyZS5hYwpAQCAtMCwwICsxLDExNCBAQAorZG5sIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcHJvZHVjZSBhIGNvbmZpZ3VyZSBzY3JpcHQuCisKK0FDX1BSRVJFUSgyLjU5KQorQUNfSU5JVChbdXNiaXBdLCBbMC4xLjhdLCBbdXNiaXAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0XSkKK0FDX0RFRklORShbVVNCSVBfVkVSU0lPTl0sIFsweDAwMDEwNl0sIFtudW1lcmljIHZlcnNpb24gbnVtYmVyXSkKKworQ1VSUkVOVD0wCitSRVZJU0lPTj0xCitBR0U9MAorQUNfU1VCU1QoW0xJQlVTQklQX1ZFUlNJT05dLCBbJENVUlJFTlQ6JFJFVklTSU9OOiRBR0VdLCBbbGlicmFyeSB2ZXJzaW9uXSkKKworQUNfQ09ORklHX1NSQ0RJUihbc3JjL3VzYmlwZC5jXSkKK0FDX0NPTkZJR19IRUFERVJTKFtjb25maWcuaF0pCisKK0FNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ25dKQorTFRfSU5JVAorCisjIFNpbGVudCBidWlsZCBmb3IgYXV0b21ha2UgPj0gMS4xMQorbTRfaWZkZWYoW0FNX1NJTEVOVF9SVUxFU10sIFtBTV9TSUxFTlRfUlVMRVMoW3llc10pXSkKKworQUNfU1VCU1QoW0VYVFJBX0NGTEFHU10sIFsiLVdhbGwgLVdlcnJvciAtV2V4dHJhIC1zdGQ9Z251OTkiXSkKKworIyBDaGVja3MgZm9yIHByb2dyYW1zLgorQUNfUFJPR19DQworQUNfUFJPR19JTlNUQUxMCitBQ19QUk9HX01BS0VfU0VUCisKKyMgQ2hlY2tzIGZvciBoZWFkZXIgZmlsZXMuCitBQ19IRUFERVJfRElSRU5UCitBQ19IRUFERVJfU1REQworQUNfQ0hFQ0tfSEVBREVSUyhbYXJwYS9pbmV0LmggZmNudGwuaCBuZXRkYi5oIG5ldGluZXQvaW4uaCBzdGRpbnQuaCBzdGRsaWIuaCBkbmwKKwkJICBzdHJpbmcuaCBzdHJpbmdzLmggc3lzL3NvY2tldC5oIHN5c2xvZy5oIHVuaXN0ZC5oXSkKKworIyBDaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLgorQUNfVFlQRV9JTlQzMl9UCitBQ19UWVBFX1NJWkVfVAorQUNfVFlQRV9TU0laRV9UCitBQ19UWVBFX1VJTlQxNl9UCitBQ19UWVBFX1VJTlQzMl9UCitBQ19UWVBFX1VJTlQ4X1QKKworIyBDaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zLgorQUNfRlVOQ19SRUFMTE9DCitBQ19DSEVDS19GVU5DUyhbYnplcm8gbWVtc2V0IG1rZGlyIHJlZ2NvbXAgc29ja2V0IHN0cmNociBzdHJlcnJvciBzdHJzdHIgZG5sCisJCXN0cnRvdWxdKQorCitBQ19DSEVDS19IRUFERVIoW3N5c2ZzL2xpYnN5c2ZzLmhdLAorCQlbQUNfQ0hFQ0tfTElCKFtzeXNmc10sIFtzeXNmc19vcGVuX2RpcmVjdG9yeV9saXN0XSwKKwkJCSAgICAgIFtMSUJTPSIkTElCUyAtbHN5c2ZzIl0sCisJCQkgICAgICBbQUNfTVNHX0VSUk9SKFtNaXNzaW5nIHN5c2ZzMiBsaWJyYXJ5IV0pXSldLAorCQlbQUNfTVNHX0VSUk9SKFtNaXNzaW5nIC91c3IvaW5jbHVkZS9zeXNmcy9saWJzeXNmcy5oXSldKQorCisjIENoZWNrcyBmb3IgbGlid3JhcCBsaWJyYXJ5LgorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIHVzZSB0aGUgbGlid3JhcCAoVENQIHdyYXBwZXJzKSBsaWJyYXJ5XSkKK0FDX0FSR19XSVRIKFt0Y3Atd3JhcHBlcnNdLAorCSAgICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC10Y3Atd3JhcHBlcnNdLAorCQkJICAgIFt1c2UgdGhlIGxpYndyYXAgKFRDUCB3cmFwcGVycykgbGlicmFyeV0pXSwKKwkgICAgZG5sIFtBQ1RJT04tSUYtR0lWRU5dCisJICAgIFtzYXZlZF9MSUJTPSIkTElCUyIKKwkgICAgIGlmIHRlc3QgIiR3aXRodmFsIiA9ICJ5ZXMiOyB0aGVuCisJCSAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKwkJICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBob3N0c19hY2Nlc3MgaW4gLWx3cmFwXSkKKwkJICAgICBMSUJTPSItbHdyYXAgJExJQlMiCisJCSAgICAgQUNfVFJZX0xJTksoCisJCSAgICAgICBbaW50IGhvc3RzX2FjY2VzcygpOyBpbnQgYWxsb3dfc2V2ZXJpdHksIGRlbnlfc2V2ZXJpdHk7XSwKKwkJICAgICAgIFtob3N0c19hY2Nlc3MoKV0sCisJCSAgICAgICBbQUNfTVNHX1JFU1VMVChbeWVzXSk7CisJCQlBQ19ERUZJTkUoW0hBVkVfTElCV1JBUF0sIFsxXSwKKwkJCQkgIFt1c2UgdGNwIHdyYXBwZXJdKSB3cmFwX0xJQj0iLWx3cmFwIl0sCisJCSAgICAgICBbQUNfTVNHX1JFU1VMVChbbm90IGZvdW5kXSk7IGV4aXQgMV0pCisJICAgICBlbHNlCisJCSAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorCSAgICAgZmkKKwkgICAgIExJQlM9IiRzYXZlZF9MSUJTIl0sCisJICAgIGRubCBbQUNUSU9OLUlGLU5PVC1HSVZFTl0KKwkgICAgW0FDX01TR19SRVNVTFQoWyhkZWZhdWx0KV0pCisJICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBob3N0c19hY2Nlc3MgaW4gLWx3cmFwXSkKKwkgICAgIHNhdmVkX0xJQlM9IiRMSUJTIgorCSAgICAgTElCUz0iLWx3cmFwICRzYXZlZF9MSUJTIgorCSAgICAgQUNfVFJZX0xJTksoCisJICAgICAgIFtpbnQgaG9zdHNfYWNjZXNzKCk7IGludCBhbGxvd19zZXZlcml0eSwgZGVueV9zZXZlcml0eTtdLAorCSAgICAgICBbaG9zdHNfYWNjZXNzKCldLAorCSAgICAgICBbQUNfTVNHX1JFU1VMVChbeWVzXSk7CisJCUFDX0RFRklORShbSEFWRV9MSUJXUkFQXSwgWzFdLCBbdXNlIHRjcCB3cmFwcGVyXSldLAorCSAgICAgICBbQUNfTVNHX1JFU1VMVChbbm9dKTsgTElCUz0iJHNhdmVkX0xJQlMiXSldKQorCisjIFNldHMgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdXNiLmlkcy4KK1VTQklEU19ESVI9JyR7ZGF0YWRpcn0vdXNiaXAnCitBQ19BUkdfV0lUSChbdXNiaWRzLWRpcl0sCisJICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLXVzYmlkcy1kaXI9RElSXSwKKwkgICAgICAgW3doZXJlIHVzYi5pZHMgaXMgZm91bmQgKGRlZmF1bHQgJHtkYXRhZGlyfS91c2JpcCldKV0sCisJICAgIFtVU0JJRFNfRElSPSR3aXRodmFsXSkKK0FDX1NVQlNUKFtVU0JJRFNfRElSXSkKKworZG5sIEZJWE1FOiB3aGVuIGRpc2FibGVkLCBlbXB0eSBkaXJlY3RyeSBpcyBjcmVhdGVkCit1c2JpZHM9aW5zdGFsbAorQUNfQVJHX0VOQUJMRShbdXNiaWRzLWluc3RhbGxdLAorCSAgICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtdXNiaWRzLWluc3RhbGxdLAorCQkJICAgICAgW2luc3RhbGwgdXNiLmlkcyAoZGVmYXVsdCldKV0sCisJICAgICAgW0FTX0NBU0UoWyRlbmFibGV2YWxdLAorCQkgICAgICAgW3llc10sIFt1c2JpZHM9aW5zdGFsbF0sCisJCSAgICAgICBbbm9dLCBbdXNiaWRzPW5vdGluc3RhbGxdLAorCQkgICAgICAgW0FDX01TR19FUlJPUigKKwkJCSAgW2JhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXVzYmlkcy1pbnN0YWxsXSldCisJCSAgICAgICldKQorQU1fQ09ORElUSU9OQUwoW0lOU1RBTExfVVNCSURTXSwgW3Rlc3QgeCR1c2JpZHMgPSB4aW5zdGFsbF0pCisKK0dMSUIyX1JFUVVJUkVEPTIuNi4wCitQS0dfQ0hFQ0tfTU9EVUxFUyhbUEFDS0FHRV0sIFtnbGliLTIuMCA+PSAkR0xJQjJfUkVRVUlSRURdKQorQUNfU1VCU1QoW1BBQ0tBR0VfQ0ZMQUdTXSkKK0FDX1NVQlNUKFtQQUNLQUdFX0xJQlNdKQorCitBQ19DT05GSUdfRklMRVMoW01ha2VmaWxlIGxpYnNyYy9NYWtlZmlsZSBzcmMvTWFrZWZpbGVdKQorQUNfT1VUUFVUCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL2RvYy91c2JpcC44IGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9kb2MvdXNiaXAuOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjUzYmIyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9kb2MvdXNiaXAuOApAQCAtMCwwICsxLDcxIEBACisuVEggVVNCSVAgIjgiICJGZWJydWFyeSAyMDA5IiAidXNiaXAiICJTeXN0ZW0gQWRtaW5pc3RyYXRpb24gVXRpbGl0aWVzIgorLlNIIE5BTUUKK3VzYmlwIFwtIG1hbmFnZSBVU0IvSVAgZGV2aWNlcworLlNIIFNZTk9QU0lTCisuQiB1c2JpcAorW1xmSW9wdGlvbnNcZlJdCisKKy5TSCBERVNDUklQVElPTgorRGV2aWNlcyBleHBvcnRlZCBieSBVU0IvSVAgc2VydmVycyBjYW4gYmUgbGlzdGVkLCBhdHRhY2hlZCBhbmQKK2RldGFjaGVkIHVzaW5nIHRoaXMgcHJvZ3JhbS4KKworLlNIIE9QVElPTlMKKy5IUAorXGZCXC1hXGZSLCBcZkJcLVwtYXR0YWNoXGZSIDxob3N0PiA8YnVzX2lkPgorLklQCitBdHRhY2ggYSByZW1vdGUgVVNCIGRldmljZS4KKy5QUAorCisuSFAKK1xmQlwteFxmUiwgXGZCXC1cLWF0dGFjaGFsbFxmUiA8aG9zdD4KKy5JUAorQXR0YWNoIGFsbCByZW1vdGUgVVNCIGRldmljZXMgb24gdGhlIHNwZWNpZmljIGhvc3QuCisuUFAKKworLkhQCitcZkJcLWRcZlIsIFxmQlwtXC1kZXRhY2hcZlIgPHBvcnRzPgorLklQCitEZXRhY2ggYW4gaW1wb3J0ZWQgVVNCIGRldmljZS4KKy5QUAorCisuSFAKK1xmQlwtbFxmUiwgXGZCXC1cLWxpc3RcZlIgPGhvc3RzPgorLklQCitMaXN0IGV4cG9ydGVkIFVTQiBkZXZpY2VzLgorLlBQCisKKy5IUAorXGZCXC1wXGZSLCBcZkJcLVwtcG9ydFxmUgorLklQCitMaXN0IHZpcnR1YWwgVVNCIHBvcnQgc3RhdHVzLgorLlBQCisKKy5IUAorXGZCXC1EXGZSLCBcZkJcLVwtZGVidWdcZlIKKy5JUAorUHJpbnQgZGVidWdnaW5nIGluZm9ybWF0aW9uLgorLlBQCisKKy5IUAorXGZCXC12XGZSLCBcZkJcLVwtdmVyc2lvblxmUgorLklQCitTaG93IHZlcnNpb24uCisuUFAKKworLlNIIEVYQU1QTEVTCisKKyAgICBjbGllbnQ6IyB1c2JpcCAtLWxpc3Qgc2VydmVyCisgICAgICAgIC0gTGlzdCBleHBvcnRhYmxlIHVzYiBkZXZpY2VzIG9uIHRoZSBzZXJ2ZXIuCisKKyAgICBjbGllbnQ6IyB1c2JpcCAtLWF0dGFjaCBzZXJ2ZXIgMS0yCisgICAgICAgIC0gQ29ubmVjdCB0aGUgcmVtb3RlIFVTQiBkZXZpY2UuCisKKyAgICBjbGllbnQ6IyB1c2JpcCAtLXBvcnQKKyAgICAgICAgLSBTaG93IHZpcnR1YWwgcG9ydCBzdGF0dXMuCisKKyAgICBjbGllbnQ6IyB1c2JpcCAtLWRldGFjaCAwCisgICAgICAgIC0gRGV0YWNoIHRoZSB1c2IgZGV2aWNlLgorCisuU0ggIlNFRSBBTFNPIgorXGZCdXNiaXBkXGZQXGZCKDgpXGZCXGZQLAorXGZCdXNiaXBfYXR0YWNoX2RyaXZlclxmUFxmQig4KVxmQlxmUApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9kb2MvdXNiaXBfYmluZF9kcml2ZXIuOCBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2UvZG9jL3VzYmlwX2JpbmRfZHJpdmVyLjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQzYmJkNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2UvZG9jL3VzYmlwX2JpbmRfZHJpdmVyLjgKQEAgLTAsMCArMSw0MiBAQAorLlRIIFVTQklQX0JJTkRfRFJJVkVSICI4IiAiRmVicnVhcnkgMjAwOSIgInVzYmlwIiAiU3lzdGVtIEFkbWluaXN0cmF0aW9uIFV0aWxpdGllcyIKKy5TSCBOQU1FCit1c2JpcF9iaW5kX2RyaXZlciBcLSBjaGFuZ2UgZHJpdmVyIGJpbmRpbmcgZm9yIFVTQi9JUAorCisuU0ggU1lOT1BTSVMKKy5CIHVzYmlwX2JpbmRfZHJpdmVyCitbXGZJb3B0aW9uc1xmUl0KKworLlNIIERFU0NSSVBUSU9OCitEcml2ZXIgYmluZGluZ3MgZm9yIFVTQiBkZXZpY2VzIGNhbiBiZSBjaGFuZ2VkIHVzaW5nCit0aGlzIHByb2dyYW0uIEl0IGlzIHVzZWQgdG8gZXhwb3J0IGFuZCB1bmV4cG9ydCBVU0IKK2RldmljZXMgb3ZlciBVU0IvSVAuCisKKy5TSCBPUFRJT05TCisuVFAKK1xmQlwtdVxmUiwgXGZCXC1cLXVzYmlwXGZSIDxidXNpZD4KK01ha2UgYSBkZXZpY2UgZXhwb3J0YWJsZQorLlRQCitcZkJcLW9cZlIsIFxmQlwtXC1vdGhlclxmUiA8YnVzaWQ+CitVc2UgYSBkZXZpY2UgYnkgYSBsb2NhbCBkcml2ZXIKKy5UUAorXGZCXC1sXGZSLCBcZkJcLVwtbGlzdFxmUgorUHJpbnQgdXNiIGRldmljZXMgYW5kIHRoZWlyIGRyaXZlcnMKKy5UUAorXGZCXC1MXGZSLCBcZkJcLVwtbGlzdDJcZlIKK1ByaW50IHVzYiBkZXZpY2VzIGFuZCB0aGVpciBkcml2ZXJzIGluIHBhcnNlYWJsZSBtb2RlCisKKy5TSCBFWEFNUExFUworCisgICAgc2VydmVyOiMgdXNiaXBfYmluZF9kcml2ZXIgLS1saXN0CisgICAgICAgIC0gTGlzdCBkcml2ZXIgYXNzaWdubWVudHMgZm9yIHVzYiBkZXZpY2VzLgorCisgICAgc2VydmVyOiMgdXNiaXBfYmluZF9kcml2ZXIgLS11c2JpcCAxLTIKKyAgICAgICAgLSBCaW5kIHVzYmlwLWhvc3Qua28gdG8gdGhlIGRldmljZSBvZiBidXNpZCAxLTIuCisgICAgICAgIC0gQSB1c2IgZGV2aWNlIDEtMiBpcyBub3cgZXhwb3J0YWJsZSB0byBvdGhlciBob3N0cyEKKworICAgIHNlcnZlcjojIHVzYmlwX2JpbmRfZHJpdmVyIC0tb3RoZXIgMS0yCisgICAgICAgIC0gU2h1dGRvd24gZXhwb3J0aW5nIGFuZCB1c2UgdGhlIGRldmljZSBsb2NhbGx5LgorCisuU0ggIlNFRSBBTFNPIgorXGZCdXNiaXBcZlBcZkIoOClcZkJcZlAsCitcZkJ1c2JpcGRcZlBcZkIoOClcZkJcZlAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2UvZG9jL3VzYmlwZC44IGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9kb2MvdXNiaXBkLjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA2NTU5ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2UvZG9jL3VzYmlwZC44CkBAIC0wLDAgKzEsNjIgQEAKKy5USCBVU0JJUCAiOCIgIkZlYnJ1YXJ5IDIwMDkiICJ1c2JpcCIgIlN5c3RlbSBBZG1pbmlzdHJhdGlvbiBVdGlsaXRpZXMiCisuU0ggTkFNRQordXNiaXBkIFwtIFVTQi9JUCBzZXJ2ZXIgZGFlbW9uCisuU0ggU1lOT1BTSVMKKy5CIHVzYmlwZAorW1xmSW9wdGlvbnNcZlJdCisKKy5TSCBERVNDUklQVElPTgorLkIgdXNiaXBkCitwcm92aWRlcyBVU0IvSVAgY2xpZW50cyBhY2Nlc3MgdG8gZXhwb3J0ZWQgVVNCIGRldmljZXMuCisKK0RldmljZXMgaGF2ZSB0byBleHBsaWNpdGx5IGJlIGV4cG9ydGVkIHVzaW5nCisuQiB1c2JpcF9iaW5kX2RyaXZlcgorYmVmb3JlIHVzYmlwZCBtYWtlcyB0aGVtIGF2YWlsYWJsZSB0byBvdGhlciBob3N0cy4KKworVGhlIGRhZW1vbiBhY2NlcHRzIGNvbm5lY3Rpb25zIGZyb20gVVNCL0lQIGNsaWVudHMKK29uIFRDUCBwb3J0IDMyNDAuCisKKy5TSCBPUFRJT05TCisuSFAKK1xmQlwtRFxmUiwgXGZCXC1cLWRhZW1vblxmUgorLklQCitSdW4gYXMgYSBkYWVtb24gcHJvY2Vzcy4KKy5QUAorCisuSFAKK1xmQlwtZFxmUiwgXGZCXC1cLWRlYnVnXGZSCisuSVAKK1ByaW50IGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KKy5QUAorCisuSFAKK1xmQlwtdlxmUiwgXGZCXC1cLXZlcnNpb25cZlIKKy5JUAorU2hvdyB2ZXJzaW9uLgorLlBQCisKKy5TSCBMSU1JVEFUSU9OUworCisuQiB1c2JpcGQKK29mZmVycyBubyBhdXRoZW50aWNhdGlvbiBvciBhdXRob3JpemF0aW9uIGZvciBVU0IvSVAuIEFueQorVVNCL0lQIGNsaWVudCBjYW4gY29ubmVjdCBhbmQgdXNlIGV4cG9ydGVkIGRldmljZXMuCisKKy5TSCBFWEFNUExFUworCisgICAgc2VydmVyOiMgbW9kcHJvYmUgdXNiaXAKKworICAgIHNlcnZlcjojIHVzYmlwZCAtRAorICAgICAgICAtIFN0YXJ0IHVzYmlwIGRhZW1vbi4KKworICAgIHNlcnZlcjojIHVzYmlwX2JpbmRfZHJpdmVyIC0tbGlzdAorICAgICAgICAtIExpc3QgZHJpdmVyIGFzc2lnbm1lbnRzIGZvciB1c2IgZGV2aWNlcy4KKworICAgIHNlcnZlcjojIHVzYmlwX2JpbmRfZHJpdmVyIC0tdXNiaXAgMS0yCisgICAgICAgIC0gQmluZCB1c2JpcC1ob3N0LmtvIHRvIHRoZSBkZXZpY2Ugb2YgYnVzaWQgMS0yLgorICAgICAgICAtIEEgdXNiIGRldmljZSAxLTIgaXMgbm93IGV4cG9ydGFibGUgdG8gb3RoZXIgaG9zdHMhCisgICAgICAgIC0gVXNlICd1c2JpcF9iaW5kX2RyaXZlciAtLW90aGVyIDEtMicgd2hlbiB5b3Ugd2FudCB0byBzaHV0ZG93biBleHBvcnRpbmcgYW5kIHVzZSB0aGUgZGV2aWNlIGxvY2FsbHkuCisKKy5TSCAiU0VFIEFMU08iCitcZkJ1c2JpcFxmUFxmQig4KVxmQlxmUCwKK1xmQnVzYmlwX2F0dGFjaF9kcml2ZXJcZlBcZkIoOClcZkJcZlAKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9saWJzcmMvTWFrZWZpbGUuYW0gYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL2xpYnNyYy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2VjZjZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9saWJzcmMvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw3IEBACitsaWJ1c2JpcF9sYV9DUFBGTEFHUyA6PSAtRFVTQklEU19GSUxFPSciQFVTQklEU19ESVJAL3VzYi5pZHMiJworbGlidXNiaXBfbGFfQ0ZMQUdTICAgOj0gQEVYVFJBX0NGTEFHU0AKK2xpYnVzYmlwX2xhX0xERkxBR1MgIDo9IC12ZXJzaW9uLWluZm8gQExJQlVTQklQX1ZFUlNJT05ACisKK2xpYl9MVExJQlJBUklFUyA6PSBsaWJ1c2JpcC5sYQorbGlidXNiaXBfbGFfU09VUkNFUyA6PSBuYW1lcy5jIG5hbWVzLmggc3R1Yl9kcml2ZXIuYyBzdHViX2RyaXZlci5oIHVzYmlwLmggXAorCQkgICAgICAgdXNiaXBfY29tbW9uLmMgdXNiaXBfY29tbW9uLmggdmhjaV9kcml2ZXIuYyB2aGNpX2RyaXZlci5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL2xpYnNyYy9uYW1lcy5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9saWJzcmMvbmFtZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGRlMThiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9saWJzcmMvbmFtZXMuYwpAQCAtMCwwICsxLDc5MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqICAgICAgbmFtZXMuYyAgLS0gIFVTQiBuYW1lIGRhdGFiYXNlIG1hbmlwdWxhdGlvbiByb3V0aW5lcworICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwICBUaG9tYXMgU2FpbGVyIChzYWlsZXJAaWZlLmVlLmV0aHouY2gpCisgKgorICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqCisgKi8KKworLyoKKyAqIAlDb3B5cmlnaHQgKEMpIDIwMDUgVGFrYWhpcm8gSGlyb2Z1Y2hpCisgKiAJCS0gbmFtZXNfZGVpbml0KCkgaXMgYWRkZWQuCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisKKyNpbmNsdWRlICJuYW1lcy5oIgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RydWN0IHZlbmRvciB7CisJc3RydWN0IHZlbmRvciAqbmV4dDsKKwl1X2ludDE2X3QgdmVuZG9yaWQ7CisJY2hhciBuYW1lWzFdOworfTsKKworc3RydWN0IHByb2R1Y3QgeworCXN0cnVjdCBwcm9kdWN0ICpuZXh0OworCXVfaW50MTZfdCB2ZW5kb3JpZCwgcHJvZHVjdGlkOworCWNoYXIgbmFtZVsxXTsKK307CisKK3N0cnVjdCBjbGFzcyB7CisJc3RydWN0IGNsYXNzICpuZXh0OworCXVfaW50OF90IGNsYXNzaWQ7CisJY2hhciBuYW1lWzFdOworfTsKKworc3RydWN0IHN1YmNsYXNzIHsKKwlzdHJ1Y3Qgc3ViY2xhc3MgKm5leHQ7CisJdV9pbnQ4X3QgY2xhc3NpZCwgc3ViY2xhc3NpZDsKKwljaGFyIG5hbWVbMV07Cit9OworCitzdHJ1Y3QgcHJvdG9jb2wgeworCXN0cnVjdCBwcm90b2NvbCAqbmV4dDsKKwl1X2ludDhfdCBjbGFzc2lkLCBzdWJjbGFzc2lkLCBwcm90b2NvbGlkOworCWNoYXIgbmFtZVsxXTsKK307CisKK3N0cnVjdCBhdWRpb3Rlcm1pbmFsIHsKKwlzdHJ1Y3QgYXVkaW90ZXJtaW5hbCAqbmV4dDsKKwl1X2ludDE2X3QgdGVybXQ7CisJY2hhciBuYW1lWzFdOworfTsKKworc3RydWN0IGdlbmVyaWNzdHJ0YWJsZSB7CisgICAgICAgIHN0cnVjdCBnZW5lcmljc3RydGFibGUgKm5leHQ7CisgICAgICAgIHVuc2lnbmVkIGludCBudW07CisgICAgICAgIGNoYXIgbmFtZVsxXTsKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBIQVNIMSAgMHgxMAorI2RlZmluZSBIQVNIMiAgMHgwMgorI2RlZmluZSBIQVNIU1ogMTYKKworc3RhdGljIHVuc2lnbmVkIGludCBoYXNobnVtKHVuc2lnbmVkIGludCBudW0pCit7CisJdW5zaWduZWQgaW50IG1hc2sxID0gSEFTSDEgPDwgMjcsIG1hc2syID0gSEFTSDIgPDwgMjc7CisKKwlmb3IgKDsgbWFzazEgPj0gSEFTSDE7IG1hc2sxID4+PSAxLCBtYXNrMiA+Pj0gMSkKKwkJaWYgKG51bSAmIG1hc2sxKQorCQkJbnVtIF49IG1hc2syOworCXJldHVybiBudW0gJiAoSEFTSFNaLTEpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgdmVuZG9yICp2ZW5kb3JzW0hBU0hTWl0gPSB7IE5VTEwsIH07CitzdGF0aWMgc3RydWN0IHByb2R1Y3QgKnByb2R1Y3RzW0hBU0hTWl0gPSB7IE5VTEwsIH07CitzdGF0aWMgc3RydWN0IGNsYXNzICpjbGFzc2VzW0hBU0hTWl0gPSB7IE5VTEwsIH07CitzdGF0aWMgc3RydWN0IHN1YmNsYXNzICpzdWJjbGFzc2VzW0hBU0hTWl0gPSB7IE5VTEwsIH07CitzdGF0aWMgc3RydWN0IHByb3RvY29sICpwcm90b2NvbHNbSEFTSFNaXSA9IHsgTlVMTCwgfTsKK3N0YXRpYyBzdHJ1Y3QgYXVkaW90ZXJtaW5hbCAqYXVkaW90ZXJtaW5hbHNbSEFTSFNaXSA9IHsgTlVMTCwgfTsKK3N0YXRpYyBzdHJ1Y3QgZ2VuZXJpY3N0cnRhYmxlICpoaWRkZXNjcmlwdG9yc1tIQVNIU1pdID0geyBOVUxMLCB9Oworc3RhdGljIHN0cnVjdCBnZW5lcmljc3RydGFibGUgKnJlcG9ydHNbSEFTSFNaXSA9IHsgTlVMTCwgfTsKK3N0YXRpYyBzdHJ1Y3QgZ2VuZXJpY3N0cnRhYmxlICpodXRzW0hBU0hTWl0gPSB7IE5VTEwsIH07CitzdGF0aWMgc3RydWN0IGdlbmVyaWNzdHJ0YWJsZSAqYmlhc3NbSEFTSFNaXSA9IHsgTlVMTCwgfTsKK3N0YXRpYyBzdHJ1Y3QgZ2VuZXJpY3N0cnRhYmxlICpwaHlzZGVzc1tIQVNIU1pdID0geyBOVUxMLCB9Oworc3RhdGljIHN0cnVjdCBnZW5lcmljc3RydGFibGUgKmh1dHVzW0hBU0hTWl0gPSB7IE5VTEwsIH07CitzdGF0aWMgc3RydWN0IGdlbmVyaWNzdHJ0YWJsZSAqbGFuZ2lkc1tIQVNIU1pdID0geyBOVUxMLCB9Oworc3RhdGljIHN0cnVjdCBnZW5lcmljc3RydGFibGUgKmNvdW50cnljb2Rlc1tIQVNIU1pdID0geyBOVUxMLCB9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBjb25zdCBjaGFyICpuYW1lc19nZW5lcmljc3RydGFibGUoc3RydWN0IGdlbmVyaWNzdHJ0YWJsZSAqdFtIQVNIU1pdLCB1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisgICAgICAgIHN0cnVjdCBnZW5lcmljc3RydGFibGUgKmg7CisKKyAgICAgICAgZm9yIChoID0gdFtoYXNobnVtKGluZGV4KV07IGg7IGggPSBoLT5uZXh0KQorICAgICAgICAgICAgICAgIGlmIChoLT5udW0gPT0gaW5kZXgpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaC0+bmFtZTsKKyAgICAgICAgcmV0dXJuIE5VTEw7Cit9CisKK2NvbnN0IGNoYXIgKm5hbWVzX2hpZCh1X2ludDhfdCBoaWRkKQoreworCXJldHVybiBuYW1lc19nZW5lcmljc3RydGFibGUoaGlkZGVzY3JpcHRvcnMsIGhpZGQpOworfQorCitjb25zdCBjaGFyICpuYW1lc19yZXBvcnR0YWcodV9pbnQ4X3QgcnQpCit7CisJcmV0dXJuIG5hbWVzX2dlbmVyaWNzdHJ0YWJsZShyZXBvcnRzLCBydCk7Cit9CisKK2NvbnN0IGNoYXIgKm5hbWVzX2h1dHModW5zaWduZWQgaW50IGRhdGEpCit7CisJcmV0dXJuIG5hbWVzX2dlbmVyaWNzdHJ0YWJsZShodXRzLCBkYXRhKTsKK30KKworY29uc3QgY2hhciAqbmFtZXNfaHV0dXModW5zaWduZWQgaW50IGRhdGEpCit7CisJcmV0dXJuIG5hbWVzX2dlbmVyaWNzdHJ0YWJsZShodXR1cywgZGF0YSk7Cit9CisKK2NvbnN0IGNoYXIgKm5hbWVzX2xhbmdpZCh1X2ludDE2X3QgbGFuZ2lkKQoreworCXJldHVybiBuYW1lc19nZW5lcmljc3RydGFibGUobGFuZ2lkcywgbGFuZ2lkKTsKK30KKworY29uc3QgY2hhciAqbmFtZXNfcGh5c2Rlcyh1X2ludDhfdCBwaCkKK3sKKwlyZXR1cm4gbmFtZXNfZ2VuZXJpY3N0cnRhYmxlKHBoeXNkZXNzLCBwaCk7Cit9CisKK2NvbnN0IGNoYXIgKm5hbWVzX2JpYXModV9pbnQ4X3QgYikKK3sKKwlyZXR1cm4gbmFtZXNfZ2VuZXJpY3N0cnRhYmxlKGJpYXNzLCBiKTsKK30KKworY29uc3QgY2hhciAqbmFtZXNfY291bnRyeWNvZGUodW5zaWduZWQgaW50IGNvdW50cnljb2RlKQoreworCXJldHVybiBuYW1lc19nZW5lcmljc3RydGFibGUoY291bnRyeWNvZGVzLCBjb3VudHJ5Y29kZSk7Cit9CisKK2NvbnN0IGNoYXIgKm5hbWVzX3ZlbmRvcih1X2ludDE2X3QgdmVuZG9yaWQpCit7CisJc3RydWN0IHZlbmRvciAqdjsKKworCXYgPSB2ZW5kb3JzW2hhc2hudW0odmVuZG9yaWQpXTsKKwlmb3IgKDsgdjsgdiA9IHYtPm5leHQpCisJCWlmICh2LT52ZW5kb3JpZCA9PSB2ZW5kb3JpZCkKKwkJCXJldHVybiB2LT5uYW1lOworCXJldHVybiBOVUxMOworfQorCitjb25zdCBjaGFyICpuYW1lc19wcm9kdWN0KHVfaW50MTZfdCB2ZW5kb3JpZCwgdV9pbnQxNl90IHByb2R1Y3RpZCkKK3sKKwlzdHJ1Y3QgcHJvZHVjdCAqcDsKKworCXAgPSBwcm9kdWN0c1toYXNobnVtKCh2ZW5kb3JpZCA8PCAxNikgfCBwcm9kdWN0aWQpXTsKKwlmb3IgKDsgcDsgcCA9IHAtPm5leHQpCisJCWlmIChwLT52ZW5kb3JpZCA9PSB2ZW5kb3JpZCAmJiBwLT5wcm9kdWN0aWQgPT0gcHJvZHVjdGlkKQorCQkJcmV0dXJuIHAtPm5hbWU7CisJcmV0dXJuIE5VTEw7Cit9CisKK2NvbnN0IGNoYXIgKm5hbWVzX2NsYXNzKHVfaW50OF90IGNsYXNzaWQpCit7CisJc3RydWN0IGNsYXNzICpjOworCisJYyA9IGNsYXNzZXNbaGFzaG51bShjbGFzc2lkKV07CisJZm9yICg7IGM7IGMgPSBjLT5uZXh0KQorCQlpZiAoYy0+Y2xhc3NpZCA9PSBjbGFzc2lkKQorCQkJcmV0dXJuIGMtPm5hbWU7CisJcmV0dXJuIE5VTEw7Cit9CisKK2NvbnN0IGNoYXIgKm5hbWVzX3N1YmNsYXNzKHVfaW50OF90IGNsYXNzaWQsIHVfaW50OF90IHN1YmNsYXNzaWQpCit7CisJc3RydWN0IHN1YmNsYXNzICpzOworCisJcyA9IHN1YmNsYXNzZXNbaGFzaG51bSgoY2xhc3NpZCA8PCA4KSB8IHN1YmNsYXNzaWQpXTsKKwlmb3IgKDsgczsgcyA9IHMtPm5leHQpCisJCWlmIChzLT5jbGFzc2lkID09IGNsYXNzaWQgJiYgcy0+c3ViY2xhc3NpZCA9PSBzdWJjbGFzc2lkKQorCQkJcmV0dXJuIHMtPm5hbWU7CisJcmV0dXJuIE5VTEw7Cit9CisKK2NvbnN0IGNoYXIgKm5hbWVzX3Byb3RvY29sKHVfaW50OF90IGNsYXNzaWQsIHVfaW50OF90IHN1YmNsYXNzaWQsIHVfaW50OF90IHByb3RvY29saWQpCit7CisJc3RydWN0IHByb3RvY29sICpwOworCisJcCA9IHByb3RvY29sc1toYXNobnVtKChjbGFzc2lkIDw8IDE2KSB8IChzdWJjbGFzc2lkIDw8IDgpIHwgcHJvdG9jb2xpZCldOworCWZvciAoOyBwOyBwID0gcC0+bmV4dCkKKwkJaWYgKHAtPmNsYXNzaWQgPT0gY2xhc3NpZCAmJiBwLT5zdWJjbGFzc2lkID09IHN1YmNsYXNzaWQgJiYgcC0+cHJvdG9jb2xpZCA9PSBwcm90b2NvbGlkKQorCQkJcmV0dXJuIHAtPm5hbWU7CisJcmV0dXJuIE5VTEw7Cit9CisKK2NvbnN0IGNoYXIgKm5hbWVzX2F1ZGlvdGVybWluYWwodV9pbnQxNl90IHRlcm10KQoreworCXN0cnVjdCBhdWRpb3Rlcm1pbmFsICphdDsKKworCWF0ID0gYXVkaW90ZXJtaW5hbHNbaGFzaG51bSh0ZXJtdCldOworCWZvciAoOyBhdDsgYXQgPSBhdC0+bmV4dCkKKwkJaWYgKGF0LT50ZXJtdCA9PSB0ZXJtdCkKKwkJCXJldHVybiBhdC0+bmFtZTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogYWRkIGEgY2xlYW51cCBmdW5jdGlvbiBieSB0YWthaGlybyAqLworCitzdHJ1Y3QgcG9vbCB7CisJc3RydWN0IHBvb2wgKm5leHQ7CisJdm9pZCAqbWVtOworfTsKKworc3RhdGljIHN0cnVjdCBwb29sICpwb29sX2hlYWQgPSBOVUxMOworCitzdGF0aWMgdm9pZCAqbXlfbWFsbG9jKHNpemVfdCBzaXplKQoreworCXN0cnVjdCBwb29sICpwOworCisJcCA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHBvb2wpKTsKKwlpZiAoIXApIHsKKwkJZnJlZShwKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcC0+bWVtID0gY2FsbG9jKDEsIHNpemUpOworCWlmICghcC0+bWVtKQorCQlyZXR1cm4gTlVMTDsKKworCXAtPm5leHQgPSBwb29sX2hlYWQ7CisJcG9vbF9oZWFkID0gcDsKKworCXJldHVybiBwLT5tZW07Cit9CisKK3ZvaWQgbmFtZXNfZnJlZSh2b2lkKQoreworCXN0cnVjdCBwb29sICpwb29sOworCisJaWYgKCFwb29sX2hlYWQpCisJCXJldHVybjsKKworCWZvciAocG9vbCA9IHBvb2xfaGVhZDsgcG9vbCAhPSBOVUxMOyApIHsKKwkJc3RydWN0IHBvb2wgKnRtcDsKKworCQlpZiAocG9vbC0+bWVtKQorCQkJZnJlZShwb29sLT5tZW0pOworCisJCXRtcCA9IHBvb2w7CisJCXBvb2wgPSBwb29sLT5uZXh0OworCQlmcmVlKHRtcCk7CisJfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgbmV3X3ZlbmRvcihjb25zdCBjaGFyICpuYW1lLCB1X2ludDE2X3QgdmVuZG9yaWQpCit7CisJc3RydWN0IHZlbmRvciAqdjsKKwl1bnNpZ25lZCBpbnQgaCA9IGhhc2hudW0odmVuZG9yaWQpOworCisJdiA9IHZlbmRvcnNbaF07CisJZm9yICg7IHY7IHYgPSB2LT5uZXh0KQorCQlpZiAodi0+dmVuZG9yaWQgPT0gdmVuZG9yaWQpCisJCQlyZXR1cm4gLTE7CisJdiA9IG15X21hbGxvYyhzaXplb2Yoc3RydWN0IHZlbmRvcikgKyBzdHJsZW4obmFtZSkpOworCWlmICghdikKKwkJcmV0dXJuIC0xOworCXN0cmNweSh2LT5uYW1lLCBuYW1lKTsKKwl2LT52ZW5kb3JpZCA9IHZlbmRvcmlkOworCXYtPm5leHQgPSB2ZW5kb3JzW2hdOworCXZlbmRvcnNbaF0gPSB2OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5ld19wcm9kdWN0KGNvbnN0IGNoYXIgKm5hbWUsIHVfaW50MTZfdCB2ZW5kb3JpZCwgdV9pbnQxNl90IHByb2R1Y3RpZCkKK3sKKwlzdHJ1Y3QgcHJvZHVjdCAqcDsKKwl1bnNpZ25lZCBpbnQgaCA9IGhhc2hudW0oKHZlbmRvcmlkIDw8IDE2KSB8IHByb2R1Y3RpZCk7CisKKwlwID0gcHJvZHVjdHNbaF07CisJZm9yICg7IHA7IHAgPSBwLT5uZXh0KQorCQlpZiAocC0+dmVuZG9yaWQgPT0gdmVuZG9yaWQgJiYgcC0+cHJvZHVjdGlkID09IHByb2R1Y3RpZCkKKwkJCXJldHVybiAtMTsKKwlwID0gbXlfbWFsbG9jKHNpemVvZihzdHJ1Y3QgcHJvZHVjdCkgKyBzdHJsZW4obmFtZSkpOworCWlmICghcCkKKwkJcmV0dXJuIC0xOworCXN0cmNweShwLT5uYW1lLCBuYW1lKTsKKwlwLT52ZW5kb3JpZCA9IHZlbmRvcmlkOworCXAtPnByb2R1Y3RpZCA9IHByb2R1Y3RpZDsKKwlwLT5uZXh0ID0gcHJvZHVjdHNbaF07CisJcHJvZHVjdHNbaF0gPSBwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5ld19jbGFzcyhjb25zdCBjaGFyICpuYW1lLCB1X2ludDhfdCBjbGFzc2lkKQoreworCXN0cnVjdCBjbGFzcyAqYzsKKwl1bnNpZ25lZCBpbnQgaCA9IGhhc2hudW0oY2xhc3NpZCk7CisKKwljID0gY2xhc3Nlc1toXTsKKwlmb3IgKDsgYzsgYyA9IGMtPm5leHQpCisJCWlmIChjLT5jbGFzc2lkID09IGNsYXNzaWQpCisJCQlyZXR1cm4gLTE7CisJYyA9IG15X21hbGxvYyhzaXplb2Yoc3RydWN0IGNsYXNzKSArIHN0cmxlbihuYW1lKSk7CisJaWYgKCFjKQorCQlyZXR1cm4gLTE7CisJc3RyY3B5KGMtPm5hbWUsIG5hbWUpOworCWMtPmNsYXNzaWQgPSBjbGFzc2lkOworCWMtPm5leHQgPSBjbGFzc2VzW2hdOworCWNsYXNzZXNbaF0gPSBjOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5ld19zdWJjbGFzcyhjb25zdCBjaGFyICpuYW1lLCB1X2ludDhfdCBjbGFzc2lkLCB1X2ludDhfdCBzdWJjbGFzc2lkKQoreworCXN0cnVjdCBzdWJjbGFzcyAqczsKKwl1bnNpZ25lZCBpbnQgaCA9IGhhc2hudW0oKGNsYXNzaWQgPDwgOCkgfCBzdWJjbGFzc2lkKTsKKworCXMgPSBzdWJjbGFzc2VzW2hdOworCWZvciAoOyBzOyBzID0gcy0+bmV4dCkKKwkJaWYgKHMtPmNsYXNzaWQgPT0gY2xhc3NpZCAmJiBzLT5zdWJjbGFzc2lkID09IHN1YmNsYXNzaWQpCisJCQlyZXR1cm4gLTE7CisJcyA9IG15X21hbGxvYyhzaXplb2Yoc3RydWN0IHN1YmNsYXNzKSArIHN0cmxlbihuYW1lKSk7CisJaWYgKCFzKQorCQlyZXR1cm4gLTE7CisJc3RyY3B5KHMtPm5hbWUsIG5hbWUpOworCXMtPmNsYXNzaWQgPSBjbGFzc2lkOworCXMtPnN1YmNsYXNzaWQgPSBzdWJjbGFzc2lkOworCXMtPm5leHQgPSBzdWJjbGFzc2VzW2hdOworCXN1YmNsYXNzZXNbaF0gPSBzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5ld19wcm90b2NvbChjb25zdCBjaGFyICpuYW1lLCB1X2ludDhfdCBjbGFzc2lkLCB1X2ludDhfdCBzdWJjbGFzc2lkLCB1X2ludDhfdCBwcm90b2NvbGlkKQoreworCXN0cnVjdCBwcm90b2NvbCAqcDsKKwl1bnNpZ25lZCBpbnQgaCA9IGhhc2hudW0oKGNsYXNzaWQgPDwgMTYpIHwgKHN1YmNsYXNzaWQgPDwgOCkgfCBwcm90b2NvbGlkKTsKKworCXAgPSBwcm90b2NvbHNbaF07CisJZm9yICg7IHA7IHAgPSBwLT5uZXh0KQorCQlpZiAocC0+Y2xhc3NpZCA9PSBjbGFzc2lkICYmIHAtPnN1YmNsYXNzaWQgPT0gc3ViY2xhc3NpZCAmJiBwLT5wcm90b2NvbGlkID09IHByb3RvY29saWQpCisJCQlyZXR1cm4gLTE7CisJcCA9IG15X21hbGxvYyhzaXplb2Yoc3RydWN0IHByb3RvY29sKSArIHN0cmxlbihuYW1lKSk7CisJaWYgKCFwKQorCQlyZXR1cm4gLTE7CisJc3RyY3B5KHAtPm5hbWUsIG5hbWUpOworCXAtPmNsYXNzaWQgPSBjbGFzc2lkOworCXAtPnN1YmNsYXNzaWQgPSBzdWJjbGFzc2lkOworCXAtPnByb3RvY29saWQgPSBwcm90b2NvbGlkOworCXAtPm5leHQgPSBwcm90b2NvbHNbaF07CisJcHJvdG9jb2xzW2hdID0gcDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuZXdfYXVkaW90ZXJtaW5hbChjb25zdCBjaGFyICpuYW1lLCB1X2ludDE2X3QgdGVybXQpCit7CisJc3RydWN0IGF1ZGlvdGVybWluYWwgKmF0OworCXVuc2lnbmVkIGludCBoID0gaGFzaG51bSh0ZXJtdCk7CisKKwlhdCA9IGF1ZGlvdGVybWluYWxzW2hdOworCWZvciAoOyBhdDsgYXQgPSBhdC0+bmV4dCkKKwkJaWYgKGF0LT50ZXJtdCA9PSB0ZXJtdCkKKwkJCXJldHVybiAtMTsKKwlhdCA9IG15X21hbGxvYyhzaXplb2Yoc3RydWN0IGF1ZGlvdGVybWluYWwpICsgc3RybGVuKG5hbWUpKTsKKwlpZiAoIWF0KQorCQlyZXR1cm4gLTE7CisJc3RyY3B5KGF0LT5uYW1lLCBuYW1lKTsKKwlhdC0+dGVybXQgPSB0ZXJtdDsKKwlhdC0+bmV4dCA9IGF1ZGlvdGVybWluYWxzW2hdOworCWF1ZGlvdGVybWluYWxzW2hdID0gYXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmV3X2dlbmVyaWNzdHJ0YWJsZShzdHJ1Y3QgZ2VuZXJpY3N0cnRhYmxlICp0W0hBU0hTWl0sIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBpbmRleCkKK3sKKyAgICAgICAgc3RydWN0IGdlbmVyaWNzdHJ0YWJsZSAqZzsKKwl1bnNpZ25lZCBpbnQgaCA9IGhhc2hudW0oaW5kZXgpOworCisgICAgICAgIGZvciAoZyA9IHRbaF07IGc7IGcgPSBnLT5uZXh0KQorICAgICAgICAgICAgICAgIGlmIChnLT5udW0gPT0gaW5kZXgpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGcgPSBteV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBnZW5lcmljc3RydGFibGUpICsgc3RybGVuKG5hbWUpKTsKKyAgICAgICAgaWYgKCFnKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgc3RyY3B5KGctPm5hbWUsIG5hbWUpOworICAgICAgICBnLT5udW0gPSBpbmRleDsKKyAgICAgICAgZy0+bmV4dCA9IHRbaF07CisgICAgICAgIHRbaF0gPSBnOworICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuZXdfaGlkKGNvbnN0IGNoYXIgKm5hbWUsIHVfaW50OF90IGhpZGQpCit7CisJcmV0dXJuIG5ld19nZW5lcmljc3RydGFibGUoaGlkZGVzY3JpcHRvcnMsIG5hbWUsIGhpZGQpOworfQorCitzdGF0aWMgaW50IG5ld19yZXBvcnR0YWcoY29uc3QgY2hhciAqbmFtZSwgdV9pbnQ4X3QgcnQpCit7CisJcmV0dXJuIG5ld19nZW5lcmljc3RydGFibGUocmVwb3J0cywgbmFtZSwgcnQpOworfQorCitzdGF0aWMgaW50IG5ld19odXRzKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBkYXRhKQoreworCXJldHVybiBuZXdfZ2VuZXJpY3N0cnRhYmxlKGh1dHMsIG5hbWUsIGRhdGEpOworfQorCitzdGF0aWMgaW50IG5ld19odXR1cyhjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgZGF0YSkKK3sKKwlyZXR1cm4gbmV3X2dlbmVyaWNzdHJ0YWJsZShodXR1cywgbmFtZSwgZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgbmV3X2xhbmdpZChjb25zdCBjaGFyICpuYW1lLCB1X2ludDE2X3QgbGFuZ2lkKQoreworCXJldHVybiBuZXdfZ2VuZXJpY3N0cnRhYmxlKGxhbmdpZHMsIG5hbWUsIGxhbmdpZCk7Cit9CisKK3N0YXRpYyBpbnQgbmV3X3BoeXNkZXMoY29uc3QgY2hhciAqbmFtZSwgdV9pbnQ4X3QgcGgpCit7CisJcmV0dXJuIG5ld19nZW5lcmljc3RydGFibGUocGh5c2Rlc3MsIG5hbWUsIHBoKTsKK30KK3N0YXRpYyBpbnQgbmV3X2JpYXMoY29uc3QgY2hhciAqbmFtZSwgdV9pbnQ4X3QgYikKK3sKKwlyZXR1cm4gbmV3X2dlbmVyaWNzdHJ0YWJsZShiaWFzcywgbmFtZSwgYik7Cit9CisKK3N0YXRpYyBpbnQgbmV3X2NvdW50cnljb2RlKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBjb3VudHJ5Y29kZSkKK3sKKwlyZXR1cm4gbmV3X2dlbmVyaWNzdHJ0YWJsZShjb3VudHJ5Y29kZXMsIG5hbWUsIGNvdW50cnljb2RlKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIERCRyh4KQorCitzdGF0aWMgdm9pZCBwYXJzZShGSUxFICpmKQoreworCWNoYXIgYnVmWzUxMl0sICpjcDsKKwl1bnNpZ25lZCBpbnQgbGluZWN0ciA9IDA7CisJaW50IGxhc3R2ZW5kb3IgPSAtMSwgbGFzdGNsYXNzID0gLTEsIGxhc3RzdWJjbGFzcyA9IC0xLCBsYXN0aHV0PS0xLCBsYXN0bGFuZz0tMTsKKwl1bnNpZ25lZCBpbnQgdTsKKworCXdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmKSkgeworCQlsaW5lY3RyKys7CisJCS8qIHJlbW92ZSBsaW5lIGVuZHMgKi8KKwkJaWYgKChjcCA9IHN0cmNocihidWYsIDEzKSkpCisJCQkqY3AgPSAwOworCQlpZiAoKGNwID0gc3RyY2hyKGJ1ZiwgMTApKSkKKwkJCSpjcCA9IDA7CisJCWlmIChidWZbMF0gPT0gJyMnIHx8ICFidWZbMF0pCisJCQljb250aW51ZTsKKwkJY3AgPSBidWY7CisgICAgICAgICAgICAgICAgaWYgKGJ1ZlswXSA9PSAnUCcgJiYgYnVmWzFdID09ICdIJyAmJiBidWZbMl0gPT0gJ1knICYmIGJ1ZlszXSA9PSAnUycgJiYgYnVmWzRdID09ICdEJyAmJgorICAgICAgICAgICAgICAgICAgICBidWZbNV0gPT0gJ0UnICYmIGJ1Zls2XSA9PSAnUycgJiYgLyppc3NwYWNlKGJ1Zls3XSkqLyBidWZbN10gPT0gJyAnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjcCA9IGJ1ZiArIDg7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaXNzcGFjZSgqY3ApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcCsrOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc3hkaWdpdCgqY3ApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBQaHlzZGVzIHR5cGUgYXQgbGluZSAldVxuIiwgbGluZWN0cik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdSA9IHN0cnRvdWwoY3AsICZjcCwgMTYpOworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGlzc3BhY2UoKmNwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKmNwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBQaHlzZGVzIHR5cGUgYXQgbGluZSAldVxuIiwgbGluZWN0cik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld19waHlzZGVzKGNwLCB1KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJEdXBsaWNhdGUgUGh5c2RlcyAgdHlwZSBzcGVjIGF0IGxpbmUgJXUgdGVybWluYWwgdHlwZSAlMDR4ICVzXG4iLCBsaW5lY3RyLCB1LCBjcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBEQkcocHJpbnRmKCJsaW5lICU1dSBwaHlzZGVzIHR5cGUgJTAyeCAlc1xuIiwgbGluZWN0ciwgdSwgY3ApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChidWZbMF0gPT0gJ1AnICYmIGJ1ZlsxXSA9PSAnSCcgJiYgYnVmWzJdID09ICdZJyAmJiAvKmlzc3BhY2UoYnVmWzNdKSovIGJ1ZlszXSA9PSAnICcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNwID0gYnVmICsgNDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpc3NwYWNlKCpjcCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwKys7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzeGRpZ2l0KCpjcCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIFBIWSB0eXBlIGF0IGxpbmUgJXVcbiIsIGxpbmVjdHIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBzdHJ0b3VsKGNwLCAmY3AsIDE2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpc3NwYWNlKCpjcCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwKys7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISpjcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgUEhZIHR5cGUgYXQgbGluZSAldVxuIiwgbGluZWN0cik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld19waHlzZGVzKGNwLCB1KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJEdXBsaWNhdGUgUEhZIHR5cGUgc3BlYyBhdCBsaW5lICV1IHRlcm1pbmFsIHR5cGUgJTA0eCAlc1xuIiwgbGluZWN0ciwgdSwgY3ApOworICAgICAgICAgICAgICAgICAgICAgICAgREJHKHByaW50ZigibGluZSAlNXUgUEhZIHR5cGUgJTAyeCAlc1xuIiwgbGluZWN0ciwgdSwgY3ApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChidWZbMF0gPT0gJ0InICYmIGJ1ZlsxXSA9PSAnSScgJiYgYnVmWzJdID09ICdBJyAmJiBidWZbM10gPT0gJ1MnICYmIC8qaXNzcGFjZShidWZbNF0pKi8gYnVmWzRdID09ICcgJykgeworICAgICAgICAgICAgICAgICAgICAgICAgY3AgPSBidWYgKyA1OworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGlzc3BhY2UoKmNwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXN4ZGlnaXQoKmNwKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgQklBUyB0eXBlIGF0IGxpbmUgJXVcbiIsIGxpbmVjdHIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBzdHJ0b3VsKGNwLCAmY3AsIDE2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpc3NwYWNlKCpjcCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwKys7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISpjcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgQklBUyB0eXBlIGF0IGxpbmUgJXVcbiIsIGxpbmVjdHIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdfYmlhcyhjcCwgdSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRHVwbGljYXRlIEJJQVMgIHR5cGUgc3BlYyBhdCBsaW5lICV1IHRlcm1pbmFsIHR5cGUgJTA0eCAlc1xuIiwgbGluZWN0ciwgdSwgY3ApOworICAgICAgICAgICAgICAgICAgICAgICAgREJHKHByaW50ZigibGluZSAlNXUgQklBUyB0eXBlICUwMnggJXNcbiIsIGxpbmVjdHIsIHUsIGNwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoYnVmWzBdID09ICdMJyAmJiAvKmlzc3BhY2UoYnVmWzFdKSovIGJ1ZlsxXSA9PSAnICcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNwID0gIGJ1ZisyOworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGlzc3BhY2UoKmNwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXN4ZGlnaXQoKmNwKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgTEFOR0lEIHNwZWMgYXQgbGluZSAldVxuIiwgbGluZWN0cik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdSA9IHN0cnRvdWwoY3AsICZjcCwgMTYpOworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGlzc3BhY2UoKmNwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKmNwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBMQU5HSUQgc3BlYyBhdCBsaW5lICV1XG4iLCBsaW5lY3RyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3X2xhbmdpZChjcCwgdSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRHVwbGljYXRlIExBTkdJRCBzcGVjIGF0IGxpbmUgJXUgbGFuZ3VhZ2UtaWQgJTA0eCAlc1xuIiwgbGluZWN0ciwgdSwgY3ApOworICAgICAgICAgICAgICAgICAgICAgICAgREJHKHByaW50ZigibGluZSAlNXUgTEFOR0lEICUwMnggJXNcbiIsIGxpbmVjdHIsIHUsIGNwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0aHV0ID0gbGFzdGNsYXNzID0gbGFzdHZlbmRvciA9IGxhc3RzdWJjbGFzcyA9IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgbGFzdGxhbmcgPSB1OworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCQlpZiAoYnVmWzBdID09ICdDJyAmJiAvKmlzc3BhY2UoYnVmWzFdKSovIGJ1ZlsxXSA9PSAnICcpIHsKKwkJCS8qIGNsYXNzIHNwZWMgKi8KKwkJCWNwID0gYnVmKzI7CisJCQl3aGlsZSAoaXNzcGFjZSgqY3ApKQorCQkJCWNwKys7CisJCQlpZiAoIWlzeGRpZ2l0KCpjcCkpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgY2xhc3Mgc3BlYyBhdCBsaW5lICV1XG4iLCBsaW5lY3RyKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXUgPSBzdHJ0b3VsKGNwLCAmY3AsIDE2KTsKKwkJCXdoaWxlIChpc3NwYWNlKCpjcCkpCisJCQkJY3ArKzsKKwkJCWlmICghKmNwKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGNsYXNzIHNwZWMgYXQgbGluZSAldVxuIiwgbGluZWN0cik7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAobmV3X2NsYXNzKGNwLCB1KSkKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkR1cGxpY2F0ZSBjbGFzcyBzcGVjIGF0IGxpbmUgJXUgY2xhc3MgJTA0eCAlc1xuIiwgbGluZWN0ciwgdSwgY3ApOworCQkJREJHKHByaW50ZigibGluZSAlNXUgY2xhc3MgJTAyeCAlc1xuIiwgbGluZWN0ciwgdSwgY3ApKTsKKwkJCWxhc3RodXQgPSBsYXN0bGFuZyA9IGxhc3R2ZW5kb3IgPSBsYXN0c3ViY2xhc3MgPSAtMTsKKwkJCWxhc3RjbGFzcyA9IHU7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoYnVmWzBdID09ICdBJyAmJiBidWZbMV0gPT0gJ1QnICYmIGlzc3BhY2UoYnVmWzJdKSkgeworCQkJLyogYXVkaW8gdGVybWluYWwgdHlwZSBzcGVjICovCisJCQljcCA9IGJ1ZiszOworCQkJd2hpbGUgKGlzc3BhY2UoKmNwKSkKKwkJCQljcCsrOworCQkJaWYgKCFpc3hkaWdpdCgqY3ApKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGF1ZGlvIHRlcm1pbmFsIHR5cGUgYXQgbGluZSAldVxuIiwgbGluZWN0cik7CisJCQkJY29udGludWU7CisJCQl9CisJCQl1ID0gc3RydG91bChjcCwgJmNwLCAxNik7CisJCQl3aGlsZSAoaXNzcGFjZSgqY3ApKQorCQkJCWNwKys7CisJCQlpZiAoISpjcCkgeworCQkJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBhdWRpbyB0ZXJtaW5hbCB0eXBlIGF0IGxpbmUgJXVcbiIsIGxpbmVjdHIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKG5ld19hdWRpb3Rlcm1pbmFsKGNwLCB1KSkKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkR1cGxpY2F0ZSBhdWRpbyB0ZXJtaW5hbCB0eXBlIHNwZWMgYXQgbGluZSAldSB0ZXJtaW5hbCB0eXBlICUwNHggJXNcbiIsIGxpbmVjdHIsIHUsIGNwKTsKKwkJCURCRyhwcmludGYoImxpbmUgJTV1IGF1ZGlvIHRlcm1pbmFsIHR5cGUgJTAyeCAlc1xuIiwgbGluZWN0ciwgdSwgY3ApKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChidWZbMF0gPT0gJ0gnICYmIGJ1ZlsxXSA9PSAnQycgJiYgYnVmWzJdID09ICdDJyAmJiBpc3NwYWNlKGJ1ZlszXSkpIHsKKwkJCS8qIEhJRCBEZXNjcmlwdG9yIGJDb3VudHJ5Q29kZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgY3AgPSAgYnVmKzM7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaXNzcGFjZSgqY3ApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcCsrOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc3hkaWdpdCgqY3ApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBISUQgY291bnRyeSBjb2RlIGF0IGxpbmUgJXVcbiIsIGxpbmVjdHIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBzdHJ0b3VsKGNwLCAmY3AsIDEwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpc3NwYWNlKCpjcCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwKys7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISpjcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgSElEIGNvdW50cnkgY29kZSBhdCBsaW5lICV1XG4iLCBsaW5lY3RyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3X2NvdW50cnljb2RlKGNwLCB1KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJEdXBsaWNhdGUgSElEIGNvdW50cnkgY29kZSBhdCBsaW5lICV1IGNvdW50cnkgJTAydSAlc1xuIiwgbGluZWN0ciwgdSwgY3ApOworICAgICAgICAgICAgICAgICAgICAgICAgREJHKHByaW50ZigibGluZSAlNXUga2V5Ym9hcmQgY291bnRyeSBjb2RlICUwMnUgJXNcbiIsIGxpbmVjdHIsIHUsIGNwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKwkJfQorCQlpZiAoaXN4ZGlnaXQoKmNwKSkgeworCQkJLyogdmVuZG9yICovCisJCQl1ID0gc3RydG91bChjcCwgJmNwLCAxNik7CisJCQl3aGlsZSAoaXNzcGFjZSgqY3ApKQorCQkJCWNwKys7CisJCQlpZiAoISpjcCkgeworCQkJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCB2ZW5kb3Igc3BlYyBhdCBsaW5lICV1XG4iLCBsaW5lY3RyKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChuZXdfdmVuZG9yKGNwLCB1KSkKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkR1cGxpY2F0ZSB2ZW5kb3Igc3BlYyBhdCBsaW5lICV1IHZlbmRvciAlMDR4ICVzXG4iLCBsaW5lY3RyLCB1LCBjcCk7CisJCQlEQkcocHJpbnRmKCJsaW5lICU1dSB2ZW5kb3IgJTA0eCAlc1xuIiwgbGluZWN0ciwgdSwgY3ApKTsKKwkJCWxhc3R2ZW5kb3IgPSB1OworCQkJbGFzdGh1dCA9IGxhc3RsYW5nID0gbGFzdGNsYXNzID0gbGFzdHN1YmNsYXNzID0gLTE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoYnVmWzBdID09ICdcdCcgJiYgaXN4ZGlnaXQoYnVmWzFdKSkgeworCQkJLyogcHJvZHVjdCBvciBzdWJjbGFzcyBzcGVjICovCisJCQl1ID0gc3RydG91bChidWYrMSwgJmNwLCAxNik7CisJCQl3aGlsZSAoaXNzcGFjZSgqY3ApKQorCQkJCWNwKys7CisJCQlpZiAoISpjcCkgeworCQkJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBwcm9kdWN0L3N1YmNsYXNzIHNwZWMgYXQgbGluZSAldVxuIiwgbGluZWN0cik7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAobGFzdHZlbmRvciAhPSAtMSkgeworCQkJCWlmIChuZXdfcHJvZHVjdChjcCwgbGFzdHZlbmRvciwgdSkpCisJCQkJCWZwcmludGYoc3RkZXJyLCAiRHVwbGljYXRlIHByb2R1Y3Qgc3BlYyBhdCBsaW5lICV1IHByb2R1Y3QgJTA0eDolMDR4ICVzXG4iLCBsaW5lY3RyLCBsYXN0dmVuZG9yLCB1LCBjcCk7CisJCQkJREJHKHByaW50ZigibGluZSAlNXUgcHJvZHVjdCAlMDR4OiUwNHggJXNcbiIsIGxpbmVjdHIsIGxhc3R2ZW5kb3IsIHUsIGNwKSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAobGFzdGNsYXNzICE9IC0xKSB7CisJCQkJaWYgKG5ld19zdWJjbGFzcyhjcCwgbGFzdGNsYXNzLCB1KSkKKwkJCQkJZnByaW50ZihzdGRlcnIsICJEdXBsaWNhdGUgc3ViY2xhc3Mgc3BlYyBhdCBsaW5lICV1IGNsYXNzICUwMng6JTAyeCAlc1xuIiwgbGluZWN0ciwgbGFzdGNsYXNzLCB1LCBjcCk7CisJCQkJREJHKHByaW50ZigibGluZSAlNXUgc3ViY2xhc3MgJTAyeDolMDJ4ICVzXG4iLCBsaW5lY3RyLCBsYXN0Y2xhc3MsIHUsIGNwKSk7CisJCQkJbGFzdHN1YmNsYXNzID0gdTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChsYXN0aHV0ICE9IC0xKSB7CisJCQkJaWYgKG5ld19odXR1cyhjcCwgKGxhc3RodXQgPDwgMTYpK3UpKQorCQkJCQlmcHJpbnRmKHN0ZGVyciwgIkR1cGxpY2F0ZSBIVVQgVXNhZ2UgU3BlYyBhdCBsaW5lICV1XG4iLCBsaW5lY3RyKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChsYXN0bGFuZyAhPSAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3X2xhbmdpZChjcCwgbGFzdGxhbmcrKHU8PDEwKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJEdXBsaWNhdGUgTEFOR0lEIFVzYWdlIFNwZWMgYXQgbGluZSAldVxuIiwgbGluZWN0cik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCQkJZnByaW50ZihzdGRlcnIsICJQcm9kdWN0L1N1YmNsYXNzIHNwZWMgd2l0aG91dCBwcmlvciBWZW5kb3IvQ2xhc3Mgc3BlYyBhdCBsaW5lICV1XG4iLCBsaW5lY3RyKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChidWZbMF0gPT0gJ1x0JyAmJiBidWZbMV0gPT0gJ1x0JyAmJiBpc3hkaWdpdChidWZbMl0pKSB7CisJCQkvKiBwcm90b2NvbCBzcGVjICovCisJCQl1ID0gc3RydG91bChidWYrMiwgJmNwLCAxNik7CisJCQl3aGlsZSAoaXNzcGFjZSgqY3ApKQorCQkJCWNwKys7CisJCQlpZiAoISpjcCkgeworCQkJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBwcm90b2NvbCBzcGVjIGF0IGxpbmUgJXVcbiIsIGxpbmVjdHIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKGxhc3RjbGFzcyAhPSAtMSAmJiBsYXN0c3ViY2xhc3MgIT0gLTEpIHsKKwkJCQlpZiAobmV3X3Byb3RvY29sKGNwLCBsYXN0Y2xhc3MsIGxhc3RzdWJjbGFzcywgdSkpCisJCQkJCWZwcmludGYoc3RkZXJyLCAiRHVwbGljYXRlIHByb3RvY29sIHNwZWMgYXQgbGluZSAldSBjbGFzcyAlMDJ4OiUwMng6JTAyeCAlc1xuIiwgbGluZWN0ciwgbGFzdGNsYXNzLCBsYXN0c3ViY2xhc3MsIHUsIGNwKTsKKwkJCQlEQkcocHJpbnRmKCJsaW5lICU1dSBwcm90b2NvbCAlMDJ4OiUwMng6JTAyeCAlc1xuIiwgbGluZWN0ciwgbGFzdGNsYXNzLCBsYXN0c3ViY2xhc3MsIHUsIGNwKSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlmcHJpbnRmKHN0ZGVyciwgIlByb3RvY29sIHNwZWMgd2l0aG91dCBwcmlvciBDbGFzcyBhbmQgU3ViY2xhc3Mgc3BlYyBhdCBsaW5lICV1XG4iLCBsaW5lY3RyKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChidWZbMF0gPT0gJ0gnICYmIGJ1ZlsxXSA9PSAnSScgJiYgYnVmWzJdID09ICdEJyAmJiAvKmlzc3BhY2UoYnVmWzNdKSovIGJ1ZlszXSA9PSAnICcpIHsKKwkJCWNwID0gYnVmICsgNDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpc3NwYWNlKCpjcCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwKys7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzeGRpZ2l0KCpjcCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIEhJRCB0eXBlIGF0IGxpbmUgJXVcbiIsIGxpbmVjdHIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBzdHJ0b3VsKGNwLCAmY3AsIDE2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpc3NwYWNlKCpjcCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwKys7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISpjcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgSElEIHR5cGUgYXQgbGluZSAldVxuIiwgbGluZWN0cik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld19oaWQoY3AsIHUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkR1cGxpY2F0ZSBISUQgdHlwZSBzcGVjIGF0IGxpbmUgJXUgdGVybWluYWwgdHlwZSAlMDR4ICVzXG4iLCBsaW5lY3RyLCB1LCBjcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBEQkcocHJpbnRmKCJsaW5lICU1dSBISUQgdHlwZSAlMDJ4ICVzXG4iLCBsaW5lY3RyLCB1LCBjcCkpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKwkJfQorICAgICAgICAgICAgICAgIGlmIChidWZbMF0gPT0gJ0gnICYmIGJ1ZlsxXSA9PSAnVScgJiYgYnVmWzJdID09ICdUJyAmJiAvKmlzc3BhY2UoYnVmWzNdKSovIGJ1ZlszXSA9PSAnICcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNwID0gYnVmICsgNDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpc3NwYWNlKCpjcCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwKys7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzeGRpZ2l0KCpjcCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIEhVVCB0eXBlIGF0IGxpbmUgJXVcbiIsIGxpbmVjdHIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBzdHJ0b3VsKGNwLCAmY3AsIDE2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpc3NwYWNlKCpjcCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwKys7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISpjcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgSFVUIHR5cGUgYXQgbGluZSAldVxuIiwgbGluZWN0cik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld19odXRzKGNwLCB1KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJEdXBsaWNhdGUgSFVUIHR5cGUgc3BlYyBhdCBsaW5lICV1IHRlcm1pbmFsIHR5cGUgJTA0eCAlc1xuIiwgbGluZWN0ciwgdSwgY3ApOworCQkJbGFzdGxhbmcgPSBsYXN0Y2xhc3MgPSBsYXN0dmVuZG9yID0gbGFzdHN1YmNsYXNzID0gLTE7CisJCQlsYXN0aHV0ID0gdTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERCRyhwcmludGYoImxpbmUgJTV1IEhVVCB0eXBlICUwMnggJXNcbiIsIGxpbmVjdHIsIHUsIGNwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoYnVmWzBdID09ICdSJyAmJiBidWZbMV0gPT0gJyAnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjcCA9IGJ1ZiArIDI7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaXNzcGFjZSgqY3ApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcCsrOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc3hkaWdpdCgqY3ApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBSZXBvcnQgdHlwZSBhdCBsaW5lICV1XG4iLCBsaW5lY3RyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB1ID0gc3RydG91bChjcCwgJmNwLCAxNik7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaXNzcGFjZSgqY3ApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcCsrOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEqY3ApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIFJlcG9ydCB0eXBlIGF0IGxpbmUgJXVcbiIsIGxpbmVjdHIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdfcmVwb3J0dGFnKGNwLCB1KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJEdXBsaWNhdGUgUmVwb3J0IHR5cGUgc3BlYyBhdCBsaW5lICV1IHRlcm1pbmFsIHR5cGUgJTA0eCAlc1xuIiwgbGluZWN0ciwgdSwgY3ApOworICAgICAgICAgICAgICAgICAgICAgICAgREJHKHByaW50ZigibGluZSAlNXUgUmVwb3J0IHR5cGUgJTAyeCAlc1xuIiwgbGluZWN0ciwgdSwgY3ApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChidWZbMF0gPT0gJ1YnICYmIGJ1ZlsxXSA9PSAnVCcpIHsKKwkJCS8qIGFkZCBoZXJlICovCisJCQljb250aW51ZTsKKwkJfQorCQlmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gbGluZSBhdCBsaW5lICV1XG4iLCBsaW5lY3RyKTsKKwl9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworaW50IG5hbWVzX2luaXQoY2hhciAqbikKK3sKKwlGSUxFICpmOworCisJaWYgKCEoZiA9IGZvcGVuKG4sICJyIikpKSB7CisJCXJldHVybiBlcnJubzsKKwl9CisJcGFyc2UoZik7CisJZmNsb3NlKGYpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9saWJzcmMvbmFtZXMuaCBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2UvbGlic3JjL25hbWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EyNjlmZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2UvbGlic3JjL25hbWVzLmgKQEAgLTAsMCArMSw1NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogICAgICBuYW1lcy5oICAtLSAgVVNCIG5hbWUgZGF0YWJhc2UgbWFuaXB1bGF0aW9uIHJvdXRpbmVzCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgIFRob21hcyBTYWlsZXIgKHNhaWxlckBpZmUuZWUuZXRoei5jaCkKKyAqCisgKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICoKKyAqLworCisvKgorICoJQ29weXJpZ2h0IChDKSAyMDA1IFRha2FoaXJvIEhpcm9mdWNoaQorICoJICAgICAgIC0gbmFtZXNfZnJlZSgpIGlzIGFkZGVkLgorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfTkFNRVNfSAorI2RlZmluZSBfTkFNRVNfSAorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworZXh0ZXJuIGNvbnN0IGNoYXIgKm5hbWVzX3ZlbmRvcih1X2ludDE2X3QgdmVuZG9yaWQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKm5hbWVzX3Byb2R1Y3QodV9pbnQxNl90IHZlbmRvcmlkLCB1X2ludDE2X3QgcHJvZHVjdGlkKTsKK2V4dGVybiBjb25zdCBjaGFyICpuYW1lc19jbGFzcyh1X2ludDhfdCBjbGFzc2lkKTsKK2V4dGVybiBjb25zdCBjaGFyICpuYW1lc19zdWJjbGFzcyh1X2ludDhfdCBjbGFzc2lkLCB1X2ludDhfdCBzdWJjbGFzc2lkKTsKK2V4dGVybiBjb25zdCBjaGFyICpuYW1lc19wcm90b2NvbCh1X2ludDhfdCBjbGFzc2lkLCB1X2ludDhfdCBzdWJjbGFzc2lkLCB1X2ludDhfdCBwcm90b2NvbGlkKTsKK2V4dGVybiBjb25zdCBjaGFyICpuYW1lc19hdWRpb3Rlcm1pbmFsKHVfaW50MTZfdCB0ZXJtdCk7CitleHRlcm4gY29uc3QgY2hhciAqbmFtZXNfaGlkKHVfaW50OF90IGhpZGQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKm5hbWVzX3JlcG9ydHRhZyh1X2ludDhfdCBydCk7CitleHRlcm4gY29uc3QgY2hhciAqbmFtZXNfaHV0cyh1bnNpZ25lZCBpbnQgZGF0YSk7CitleHRlcm4gY29uc3QgY2hhciAqbmFtZXNfaHV0dXModW5zaWduZWQgaW50IGRhdGEpOworZXh0ZXJuIGNvbnN0IGNoYXIgKm5hbWVzX2xhbmdpZCh1X2ludDE2X3QgbGFuZ2lkKTsKK2V4dGVybiBjb25zdCBjaGFyICpuYW1lc19waHlzZGVzKHVfaW50OF90IHBoKTsKK2V4dGVybiBjb25zdCBjaGFyICpuYW1lc19iaWFzKHVfaW50OF90IGIpOworZXh0ZXJuIGNvbnN0IGNoYXIgKm5hbWVzX2NvdW50cnljb2RlKHVuc2lnbmVkIGludCBjb3VudHJ5Y29kZSk7CitleHRlcm4gaW50ICBuYW1lc19pbml0KGNoYXIgKm4pOworZXh0ZXJuIHZvaWQgbmFtZXNfZnJlZSh2b2lkKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2VuZGlmIC8qIF9OQU1FU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL2xpYnNyYy9zdHViX2RyaXZlci5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9saWJzcmMvc3R1Yl9kcml2ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzMzNjQzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9saWJzcmMvc3R1Yl9kcml2ZXIuYwpAQCAtMCwwICsxLDM5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA3IFRha2FoaXJvIEhpcm9mdWNoaQorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAidXNiaXAuaCIKKworLyoga2VybmVsIG1vZHVsZSBuYW1lICovCitzdGF0aWMgY29uc3QgY2hhciAqdXNiaXBfc3R1Yl9kcml2ZXJfbmFtZSA9ICJ1c2JpcC1ob3N0IjsKKworCitzdHJ1Y3QgdXNiaXBfc3R1Yl9kcml2ZXIgKnN0dWJfZHJpdmVyOworCitzdGF0aWMgc3RydWN0IHN5c2ZzX2RyaXZlciAqb3Blbl9zeXNmc19zdHViX2RyaXZlcih2b2lkKQoreworCWludCByZXQ7CisKKwljaGFyIHN5c2ZzX21udHBhdGhbU1lTRlNfUEFUSF9NQVhdOworCWNoYXIgc3R1Yl9kcml2ZXJfcGF0aFtTWVNGU19QQVRIX01BWF07CisJc3RydWN0IHN5c2ZzX2RyaXZlciAqc3R1Yl9kcml2ZXI7CisKKworCXJldCA9IHN5c2ZzX2dldF9tbnRfcGF0aChzeXNmc19tbnRwYXRoLCBTWVNGU19QQVRIX01BWCk7CisJaWYgKHJldCA8IDApIHsKKwkJZXJyKCJzeXNmcyBtdXN0IGJlIG1vdW50ZWQiKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJc25wcmludGYoc3R1Yl9kcml2ZXJfcGF0aCwgU1lTRlNfUEFUSF9NQVgsICIlcy8lcy91c2IvJXMvJXMiLAorCQkJc3lzZnNfbW50cGF0aCwgU1lTRlNfQlVTX05BTUUsIFNZU0ZTX0RSSVZFUlNfTkFNRSwKKwkJCXVzYmlwX3N0dWJfZHJpdmVyX25hbWUpOworCisJc3R1Yl9kcml2ZXIgPSBzeXNmc19vcGVuX2RyaXZlcl9wYXRoKHN0dWJfZHJpdmVyX3BhdGgpOworCWlmICghc3R1Yl9kcml2ZXIpIHsKKwkJZXJyKCJ1c2JpcC1jb3JlLmtvIGFuZCB1c2JpcC1ob3N0LmtvIG11c3QgYmUgbG9hZGVkIik7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBzdHViX2RyaXZlcjsKK30KKworCisjZGVmaW5lIFNZU0ZTX09QRU5fUkVUUklFUyAxMDAKKworLyogb25seSB0aGUgZmlyc3QgaW50ZXJmYWNlIHZhbHVlIGlzIHRydWUhICovCitzdGF0aWMgaW50MzJfdCByZWFkX2F0dHJfdXNiaXBfc3RhdHVzKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCWNoYXIgYXR0cnBhdGhbU1lTRlNfUEFUSF9NQVhdOworCXN0cnVjdCBzeXNmc19hdHRyaWJ1dGUgKmF0dHI7CisJaW50IHZhbHVlID0gMDsKKwlpbnQgIHJldDsKKwlzdHJ1Y3Qgc3RhdCBzOworCWludCByZXRyaWVzID0gU1lTRlNfT1BFTl9SRVRSSUVTOworCisJLyogVGhpcyBhY2Nlc3MgaXMgcmFjeSEKKwkgKgorCSAqIEp1c3QgYWZ0ZXIgZGV0YWNoLCBvdXIgZHJpdmVyIHJlbW92ZXMgdGhlIHN5c2ZzCisJICogZmlsZXMgYW5kIHJlY3JlYXRlcyB0aGVtLgorCSAqCisJICogV2UgbWF5IHRyeSBhbmQgZmFpbCB0byBvcGVuIHRoZSB1c2JpcF9zdGF0dXMgb2YKKwkgKiBhbiBleHBvcnRlZCBkZXZpY2UgaW4gdGhlIChzaG9ydCkgd2luZG93IHdoZXJlCisJICogaXQgaGFzIGJlZW4gcmVtb3ZlZCBhbmQgbm90IHlldCByZWNyZWF0ZWQuCisJICoKKwkgKiBUaGlzIGlzIGEgYnVnIGluIHRoZSBpbnRlcmZhY2UuIE5vdGhpbmcgd2UgY2FuIGRvCisJICogZXhjZXB0IHdvcmsgYXJvdW5kIGl0IGhlcmUgYnkgcG9sbGluZyBmb3IgdGhlIHN5c2ZzCisJICogdXNiaXBfc3RhdHVzIHRvIHJlYXBwZWFyLgorCSAqLworCisJc25wcmludGYoYXR0cnBhdGgsIFNZU0ZTX1BBVEhfTUFYLCAiJXMvJXM6JWQuJWQvdXNiaXBfc3RhdHVzIiwKKwkJCXVkZXYtPnBhdGgsIHVkZXYtPmJ1c2lkLAorCQkJdWRldi0+YkNvbmZpZ3VyYXRpb25WYWx1ZSwKKwkJCTApOworCisJd2hpbGUgKHJldHJpZXMgPiAwKSB7CisJCWlmIChzdGF0KGF0dHJwYXRoLCAmcykgPT0gMCkKKwkJCWJyZWFrOworCisJCWlmIChlcnJubyAhPSBFTk9FTlQpIHsKKwkJCWVycigiZXJyb3Igc3RhdCdpbmcgJXMiLCBhdHRycGF0aCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQl1c2xlZXAoMTAwMDApOyAvKiAxMG1zICovCisJCXJldHJpZXMtLTsKKwl9CisKKwlpZiAocmV0cmllcyA9PSAwKQorCQllcnIoInVzYmlwX3N0YXR1cyBub3QgcmVhZHkgYWZ0ZXIgJWQgcmV0cmllcyIsCisJCQlTWVNGU19PUEVOX1JFVFJJRVMpOworCWVsc2UgaWYgKHJldHJpZXMgPCBTWVNGU19PUEVOX1JFVFJJRVMpCisJCWluZm8oIndhcm5pbmc6IHVzYmlwX3N0YXR1cyByZWFkeSBhZnRlciAlZCByZXRyaWVzIiwKKwkJCSBTWVNGU19PUEVOX1JFVFJJRVMgLSByZXRyaWVzKTsKKworCWF0dHIgPSBzeXNmc19vcGVuX2F0dHJpYnV0ZShhdHRycGF0aCk7CisJaWYgKCFhdHRyKSB7CisJCWVycigib3BlbiAlcyIsIGF0dHJwYXRoKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldCA9IHN5c2ZzX3JlYWRfYXR0cmlidXRlKGF0dHIpOworCWlmIChyZXQpIHsKKwkJZXJyKCJyZWFkICVzIiwgYXR0cnBhdGgpOworCQlzeXNmc19jbG9zZV9hdHRyaWJ1dGUoYXR0cik7CisJCXJldHVybiAtMTsKKwl9CisKKwl2YWx1ZSA9IGF0b2koYXR0ci0+dmFsdWUpOworCisJc3lzZnNfY2xvc2VfYXR0cmlidXRlKGF0dHIpOworCisJcmV0dXJuIHZhbHVlOworfQorCisKK3N0YXRpYyB2b2lkIHVzYmlwX2V4cG9ydGVkX2RldmljZV9kZWxldGUodm9pZCAqZGV2KQoreworCXN0cnVjdCB1c2JpcF9leHBvcnRlZF9kZXZpY2UgKmVkZXYgPQorCQkoc3RydWN0IHVzYmlwX2V4cG9ydGVkX2RldmljZSAqKSBkZXY7CisKKwlzeXNmc19jbG9zZV9kZXZpY2UoZWRldi0+c3VkZXYpOworCWZyZWUoZGV2KTsKK30KKworCitzdGF0aWMgc3RydWN0IHVzYmlwX2V4cG9ydGVkX2RldmljZSAqdXNiaXBfZXhwb3J0ZWRfZGV2aWNlX25ldyhjaGFyICpzZGV2cGF0aCkKK3sKKwlzdHJ1Y3QgdXNiaXBfZXhwb3J0ZWRfZGV2aWNlICplZGV2ID0gTlVMTDsKKworCWVkZXYgPSAoc3RydWN0IHVzYmlwX2V4cG9ydGVkX2RldmljZSAqKSBjYWxsb2MoMSwgc2l6ZW9mKCplZGV2KSk7CisJaWYgKCFlZGV2KSB7CisJCWVycigiYWxsb2MgZGV2aWNlIik7CisJCXJldHVybiBOVUxMOworCX0KKworCWVkZXYtPnN1ZGV2ID0gc3lzZnNfb3Blbl9kZXZpY2VfcGF0aChzZGV2cGF0aCk7CisJaWYgKCFlZGV2LT5zdWRldikgeworCQllcnIoIm9wZW4gJXMiLCBzZGV2cGF0aCk7CisJCWdvdG8gZXJyOworCX0KKworCXJlYWRfdXNiX2RldmljZShlZGV2LT5zdWRldiwgJmVkZXYtPnVkZXYpOworCisJZWRldi0+c3RhdHVzID0gcmVhZF9hdHRyX3VzYmlwX3N0YXR1cygmZWRldi0+dWRldik7CisJaWYgKGVkZXYtPnN0YXR1cyA8IDApCisJCWdvdG8gZXJyOworCisJLyogcmVhbGxvY2F0ZSBidWZmZXIgdG8gaW5jbHVkZSB1c2IgaW50ZXJmYWNlIGRhdGEgKi8KKwlzaXplX3Qgc2l6ZSA9IHNpemVvZigqZWRldikgKyBlZGV2LT51ZGV2LmJOdW1JbnRlcmZhY2VzICogc2l6ZW9mKHN0cnVjdCB1c2JfaW50ZXJmYWNlKTsKKwllZGV2ID0gKHN0cnVjdCB1c2JpcF9leHBvcnRlZF9kZXZpY2UgKikgcmVhbGxvYyhlZGV2LCBzaXplKTsKKwlpZiAoIWVkZXYpIHsKKwkJZXJyKCJhbGxvYyBkZXZpY2UiKTsKKwkJZ290byBlcnI7CisJfQorCisJZm9yIChpbnQgaT0wOyBpIDwgZWRldi0+dWRldi5iTnVtSW50ZXJmYWNlczsgaSsrKQorCQlyZWFkX3VzYl9pbnRlcmZhY2UoJmVkZXYtPnVkZXYsIGksICZlZGV2LT51aW5mW2ldKTsKKworCXJldHVybiBlZGV2OworCitlcnI6CisJaWYgKGVkZXYgJiYgZWRldi0+c3VkZXYpCisJCXN5c2ZzX2Nsb3NlX2RldmljZShlZGV2LT5zdWRldik7CisJaWYgKGVkZXYpCisJCWZyZWUoZWRldik7CisJcmV0dXJuIE5VTEw7Cit9CisKKworc3RhdGljIGludCBjaGVja19uZXcoc3RydWN0IGRsaXN0ICpkbGlzdCwgc3RydWN0IHN5c2ZzX2RldmljZSAqdGFyZ2V0KQoreworCXN0cnVjdCBzeXNmc19kZXZpY2UgKmRldjsKKworCWRsaXN0X2Zvcl9lYWNoX2RhdGEoZGxpc3QsIGRldiwgc3RydWN0IHN5c2ZzX2RldmljZSkgeworCQlpZiAoIXN0cm5jbXAoZGV2LT5idXNfaWQsIHRhcmdldC0+YnVzX2lkLCBTWVNGU19CVVNfSURfU0laRSkpCisJCQkvKiBmb3VuZC4gbm90IG5ldyAqLworCQkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGRlbGV0ZV9ub3RoaW5nKHZvaWQgKmRldiBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSkKK3sKKwkvKiBkbyBub3QgZGVsZXRlIGFueXRoaW5nLiBidXQsIGl0cyBjb250YWluZXIgd2lsbCBiZSBkZWxldGVkLiAqLworfQorCitzdGF0aWMgaW50IHJlZnJlc2hfZXhwb3J0ZWRfZGV2aWNlcyh2b2lkKQoreworCXN0cnVjdCBzeXNmc19kZXZpY2UJKnN1aW5mOyAgLyogc3lzZnNfZGV2aWNlIG9mIHVzYl9pbnRlcmZhY2UgKi8KKwlzdHJ1Y3QgZGxpc3QJCSpzdWluZl9saXN0OworCisJc3RydWN0IHN5c2ZzX2RldmljZQkqc3VkZXY7ICAvKiBzeXNmc19kZXZpY2Ugb2YgdXNiX2RldmljZSAqLworCXN0cnVjdCBkbGlzdAkJKnN1ZGV2X2xpc3Q7CisKKworCXN1ZGV2X2xpc3QgPSBkbGlzdF9uZXdfd2l0aF9kZWxldGUoc2l6ZW9mKHN0cnVjdCBzeXNmc19kZXZpY2UpLCBkZWxldGVfbm90aGluZyk7CisKKwlzdWluZl9saXN0ID0gc3lzZnNfZ2V0X2RyaXZlcl9kZXZpY2VzKHN0dWJfZHJpdmVyLT5zeXNmc19kcml2ZXIpOworCWlmICghc3VpbmZfbGlzdCkgeworCQlwcmludGYoIkJpbmQgdXNiaXAtaG9zdC5rbyB0byBhIHVzYiBkZXZpY2UgdG8gYmUgZXhwb3J0YWJsZSFcbiIpOworCQlnb3RvIGJ5ZTsKKwl9CisKKwkvKiBjb2xsZWN0IHVuaXF1ZSBVU0IgZGV2aWNlcyAobm90IGludGVyZmFjZXMpICovCisJZGxpc3RfZm9yX2VhY2hfZGF0YShzdWluZl9saXN0LCBzdWluZiwgc3RydWN0IHN5c2ZzX2RldmljZSkgeworCisJCS8qIGdldCB1c2IgZGV2aWNlIG9mIHRoaXMgdXNiIGludGVyZmFjZSAqLworCQlzdWRldiA9IHN5c2ZzX2dldF9kZXZpY2VfcGFyZW50KHN1aW5mKTsKKwkJaWYgKCFzdWRldikgeworCQkJZXJyKCJnZXQgcGFyZW50IGRldiBvZiAlcyIsIHN1aW5mLT5uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGNoZWNrX25ldyhzdWRldl9saXN0LCBzdWRldikpIHsKKwkJCWRsaXN0X3Vuc2hpZnQoc3VkZXZfbGlzdCwgc3VkZXYpOworCQl9CisJfQorCisJZGxpc3RfZm9yX2VhY2hfZGF0YShzdWRldl9saXN0LCBzdWRldiwgc3RydWN0IHN5c2ZzX2RldmljZSkgeworCQlzdHJ1Y3QgdXNiaXBfZXhwb3J0ZWRfZGV2aWNlICplZGV2OworCisJCWVkZXYgPSB1c2JpcF9leHBvcnRlZF9kZXZpY2VfbmV3KHN1ZGV2LT5wYXRoKTsKKwkJaWYgKCFlZGV2KSB7CisJCQllcnIoInVzYmlwX2V4cG9ydGVkX2RldmljZSBuZXciKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZGxpc3RfdW5zaGlmdChzdHViX2RyaXZlci0+ZWRldl9saXN0LCAodm9pZCAqKSBlZGV2KTsKKwkJc3R1Yl9kcml2ZXItPm5kZXZzKys7CisJfQorCisKKwlkbGlzdF9kZXN0cm95KHN1ZGV2X2xpc3QpOworCitieWU6CisKKwlyZXR1cm4gMDsKK30KKworaW50IHVzYmlwX3N0dWJfcmVmcmVzaF9kZXZpY2VfbGlzdCh2b2lkKQoreworCWludCByZXQ7CisKKwlpZiAoc3R1Yl9kcml2ZXItPmVkZXZfbGlzdCkKKwkJZGxpc3RfZGVzdHJveShzdHViX2RyaXZlci0+ZWRldl9saXN0KTsKKworCXN0dWJfZHJpdmVyLT5uZGV2cyA9IDA7CisKKwlzdHViX2RyaXZlci0+ZWRldl9saXN0ID0gZGxpc3RfbmV3X3dpdGhfZGVsZXRlKHNpemVvZihzdHJ1Y3QgdXNiaXBfZXhwb3J0ZWRfZGV2aWNlKSwKKwkJCXVzYmlwX2V4cG9ydGVkX2RldmljZV9kZWxldGUpOworCWlmICghc3R1Yl9kcml2ZXItPmVkZXZfbGlzdCkgeworCQllcnIoImFsbG9jIGRsaXN0Iik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXQgPSByZWZyZXNoX2V4cG9ydGVkX2RldmljZXMoKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitpbnQgdXNiaXBfc3R1Yl9kcml2ZXJfb3Blbih2b2lkKQoreworCWludCByZXQ7CisKKworCXN0dWJfZHJpdmVyID0gKHN0cnVjdCB1c2JpcF9zdHViX2RyaXZlciAqKSBjYWxsb2MoMSwgc2l6ZW9mKCpzdHViX2RyaXZlcikpOworCWlmICghc3R1Yl9kcml2ZXIpIHsKKwkJZXJyKCJhbGxvYyBzdHViX2RyaXZlciIpOworCQlyZXR1cm4gLTE7CisJfQorCisJc3R1Yl9kcml2ZXItPm5kZXZzID0gMDsKKworCXN0dWJfZHJpdmVyLT5lZGV2X2xpc3QgPSBkbGlzdF9uZXdfd2l0aF9kZWxldGUoc2l6ZW9mKHN0cnVjdCB1c2JpcF9leHBvcnRlZF9kZXZpY2UpLAorCQkJdXNiaXBfZXhwb3J0ZWRfZGV2aWNlX2RlbGV0ZSk7CisJaWYgKCFzdHViX2RyaXZlci0+ZWRldl9saXN0KSB7CisJCWVycigiYWxsb2MgZGxpc3QiKTsKKwkJZ290byBlcnI7CisJfQorCisJc3R1Yl9kcml2ZXItPnN5c2ZzX2RyaXZlciA9IG9wZW5fc3lzZnNfc3R1Yl9kcml2ZXIoKTsKKwlpZiAoIXN0dWJfZHJpdmVyLT5zeXNmc19kcml2ZXIpCisJCWdvdG8gZXJyOworCisJcmV0ID0gcmVmcmVzaF9leHBvcnRlZF9kZXZpY2VzKCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyOworCisJcmV0dXJuIDA7CisKKworZXJyOgorCWlmIChzdHViX2RyaXZlci0+c3lzZnNfZHJpdmVyKQorCQlzeXNmc19jbG9zZV9kcml2ZXIoc3R1Yl9kcml2ZXItPnN5c2ZzX2RyaXZlcik7CisJaWYgKHN0dWJfZHJpdmVyLT5lZGV2X2xpc3QpCisJCWRsaXN0X2Rlc3Ryb3koc3R1Yl9kcml2ZXItPmVkZXZfbGlzdCk7CisJZnJlZShzdHViX2RyaXZlcik7CisKKwlzdHViX2RyaXZlciA9IE5VTEw7CisJcmV0dXJuIC0xOworfQorCisKK3ZvaWQgdXNiaXBfc3R1Yl9kcml2ZXJfY2xvc2Uodm9pZCkKK3sKKwlpZiAoIXN0dWJfZHJpdmVyKQorCQlyZXR1cm47CisKKwlpZiAoc3R1Yl9kcml2ZXItPmVkZXZfbGlzdCkKKwkJZGxpc3RfZGVzdHJveShzdHViX2RyaXZlci0+ZWRldl9saXN0KTsKKwlpZiAoc3R1Yl9kcml2ZXItPnN5c2ZzX2RyaXZlcikKKwkJc3lzZnNfY2xvc2VfZHJpdmVyKHN0dWJfZHJpdmVyLT5zeXNmc19kcml2ZXIpOworCWZyZWUoc3R1Yl9kcml2ZXIpOworCisJc3R1Yl9kcml2ZXIgPSBOVUxMOworfQorCitpbnQgdXNiaXBfc3R1Yl9leHBvcnRfZGV2aWNlKHN0cnVjdCB1c2JpcF9leHBvcnRlZF9kZXZpY2UgKmVkZXYsIGludCBzb2NrZmQpCit7CisJY2hhciBhdHRycGF0aFtTWVNGU19QQVRIX01BWF07CisJc3RydWN0IHN5c2ZzX2F0dHJpYnV0ZSAqYXR0cjsKKwljaGFyIHNvY2tmZF9idWZmWzMwXTsKKwlpbnQgcmV0OworCisKKwlpZiAoZWRldi0+c3RhdHVzICE9IFNERVZfU1RfQVZBSUxBQkxFKSB7CisJCWluZm8oImRldmljZSBub3QgYXZhaWxhYmxlLCAlcyIsIGVkZXYtPnVkZXYuYnVzaWQpOworCQlzd2l0Y2goIGVkZXYtPnN0YXR1cyApIHsKKwkJCWNhc2UgU0RFVl9TVF9FUlJPUjoKKwkJCQlpbmZvKCIgICAgIHN0YXR1cyBTREVWX1NUX0VSUk9SIik7CisJCQkJYnJlYWs7CisJCQljYXNlIFNERVZfU1RfVVNFRDoKKwkJCQlpbmZvKCIgICAgIHN0YXR1cyBTREVWX1NUX1VTRUQiKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJaW5mbygiICAgICBzdGF0dXMgdW5rbm93bjogMHgleCIsIGVkZXYtPnN0YXR1cyk7CisJCX0KKwkJcmV0dXJuIC0xOworCX0KKworCS8qIG9ubHkgdGhlIGZpcnN0IGludGVyZmFjZSBpcyB0cnVlICovCisJc25wcmludGYoYXR0cnBhdGgsIHNpemVvZihhdHRycGF0aCksICIlcy8lczolZC4lZC8lcyIsCisJCQllZGV2LT51ZGV2LnBhdGgsCisJCQllZGV2LT51ZGV2LmJ1c2lkLAorCQkJZWRldi0+dWRldi5iQ29uZmlndXJhdGlvblZhbHVlLCAwLAorCQkJInVzYmlwX3NvY2tmZCIpOworCisJYXR0ciA9IHN5c2ZzX29wZW5fYXR0cmlidXRlKGF0dHJwYXRoKTsKKwlpZiAoIWF0dHIpIHsKKwkJZXJyKCJvcGVuICVzIiwgYXR0cnBhdGgpOworCQlyZXR1cm4gLTE7CisJfQorCisJc25wcmludGYoc29ja2ZkX2J1ZmYsIHNpemVvZihzb2NrZmRfYnVmZiksICIlZFxuIiwgc29ja2ZkKTsKKworCWRiZygid3JpdGU6ICVzIiwgc29ja2ZkX2J1ZmYpOworCisJcmV0ID0gc3lzZnNfd3JpdGVfYXR0cmlidXRlKGF0dHIsIHNvY2tmZF9idWZmLCBzdHJsZW4oc29ja2ZkX2J1ZmYpKTsKKwlpZiAocmV0IDwgMCkgeworCQllcnIoIndyaXRlIHNvY2tmZCAlcyB0byAlcyIsIHNvY2tmZF9idWZmLCBhdHRycGF0aCk7CisJCWdvdG8gZXJyX3dyaXRlX3NvY2tmZDsKKwl9CisKKwlpbmZvKCJjb25uZWN0ICVzIiwgZWRldi0+dWRldi5idXNpZCk7CisKK2Vycl93cml0ZV9zb2NrZmQ6CisJc3lzZnNfY2xvc2VfYXR0cmlidXRlKGF0dHIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IHVzYmlwX2V4cG9ydGVkX2RldmljZSAqdXNiaXBfc3R1Yl9nZXRfZGV2aWNlKGludCBudW0pCit7CisJc3RydWN0IHVzYmlwX2V4cG9ydGVkX2RldmljZSAqZWRldjsKKwlzdHJ1Y3QgZGxpc3QJCSpkbGlzdCA9IHN0dWJfZHJpdmVyLT5lZGV2X2xpc3Q7CisJaW50IGNvdW50ID0gMDsKKworCWRsaXN0X2Zvcl9lYWNoX2RhdGEoZGxpc3QsIGVkZXYsIHN0cnVjdCB1c2JpcF9leHBvcnRlZF9kZXZpY2UpIHsKKwkJaWYgKG51bSA9PSBjb3VudCkKKwkJCXJldHVybiBlZGV2OworCQllbHNlCisJCQljb3VudCsrIDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2UvbGlic3JjL3N0dWJfZHJpdmVyLmggYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL2xpYnNyYy9zdHViX2RyaXZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMDdkMTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL2xpYnNyYy9zdHViX2RyaXZlci5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyBUYWthaGlybyBIaXJvZnVjaGkKKyAqLworCisjaWZuZGVmIF9VU0JJUF9TVFVCX0RSSVZFUl9ICisjZGVmaW5lIF9VU0JJUF9TVFVCX0RSSVZFUl9ICisKKyNpbmNsdWRlICJ1c2JpcC5oIgorCisKK3N0cnVjdCB1c2JpcF9zdHViX2RyaXZlciB7CisJaW50IG5kZXZzOworCXN0cnVjdCBzeXNmc19kcml2ZXIgKnN5c2ZzX2RyaXZlcjsKKworCXN0cnVjdCBkbGlzdCAqZWRldl9saXN0OwkvKiBsaXN0IG9mIGV4cG9ydGVkIGRldmljZSAqLworfTsKKworc3RydWN0IHVzYmlwX2V4cG9ydGVkX2RldmljZSB7CisJc3RydWN0IHN5c2ZzX2RldmljZSAqc3VkZXY7CisKKwlpbnQzMl90IHN0YXR1czsKKwlzdHJ1Y3QgdXNiX2RldmljZSAgICB1ZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlIHVpbmZbXTsKK307CisKKworZXh0ZXJuIHN0cnVjdCB1c2JpcF9zdHViX2RyaXZlciAqc3R1Yl9kcml2ZXI7CisKK2ludCB1c2JpcF9zdHViX2RyaXZlcl9vcGVuKHZvaWQpOwordm9pZCB1c2JpcF9zdHViX2RyaXZlcl9jbG9zZSh2b2lkKTsKKworaW50IHVzYmlwX3N0dWJfcmVmcmVzaF9kZXZpY2VfbGlzdCh2b2lkKTsKK2ludCB1c2JpcF9zdHViX2V4cG9ydF9kZXZpY2Uoc3RydWN0IHVzYmlwX2V4cG9ydGVkX2RldmljZSAqZWRldiwgaW50IHNvY2tmZCk7CisKK3N0cnVjdCB1c2JpcF9leHBvcnRlZF9kZXZpY2UgKnVzYmlwX3N0dWJfZ2V0X2RldmljZShpbnQgbnVtKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9saWJzcmMvdXNiaXAuaCBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2UvbGlic3JjL3VzYmlwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NiOGU2ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2UvbGlic3JjL3VzYmlwLmgKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA3IFRha2FoaXJvIEhpcm9mdWNoaQorICovCisKKyNpZm5kZWYgX1VTQklQX0gKKyNkZWZpbmUgX1VTQklQX0gKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICIuLi9jb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAidXNiaXBfY29tbW9uLmgiCisjaW5jbHVkZSAic3R1Yl9kcml2ZXIuaCIKKyNpbmNsdWRlICJ2aGNpX2RyaXZlci5oIgorI2lmZGVmIERNQUxMT0MKKyNpbmNsdWRlIDxkbWFsbG9jLmg+CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL2xpYnNyYy91c2JpcF9jb21tb24uYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2UvbGlic3JjL3VzYmlwX2NvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMjhhOTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL2xpYnNyYy91c2JpcF9jb21tb24uYwpAQCAtMCwwICsxLDI4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA3IFRha2FoaXJvIEhpcm9mdWNoaQorICovCisKKyNpbmNsdWRlICJ1c2JpcC5oIgorI2luY2x1ZGUgIm5hbWVzLmgiCisKK2ludCB1c2JpcF91c2Vfc3lzbG9nID0gMDsKK2ludCB1c2JpcF91c2Vfc3RkZXJyID0gMDsKK2ludCB1c2JpcF91c2VfZGVidWcgID0gMDsKKworc3RydWN0IHNwZWVkX3N0cmluZyB7CisJaW50IG51bTsKKwljaGFyICpzcGVlZDsKKwljaGFyICpkZXNjOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzcGVlZF9zdHJpbmcgc3BlZWRfc3RyaW5nc1tdID0geworCXsgVVNCX1NQRUVEX1VOS05PV04sICJ1bmtub3duIiwgIlVua25vd24gU3BlZWQifSwKKwl7IFVTQl9TUEVFRF9MT1csICAiMS41IiwgIkxvdyBTcGVlZCgxLjVNYnBzKSIgIH0sCisJeyBVU0JfU1BFRURfRlVMTCwgIjEyIiwgICJGdWxsIFNwZWVkKDEyTWJwcykiIH0sCisJeyBVU0JfU1BFRURfSElHSCwgIjQ4MCIsICJIaWdoIFNwZWVkKDQ4ME1icHMpIiB9LAorCXsgMCwgTlVMTCwgTlVMTCB9Cit9OworCitzdHJ1Y3QgcG9ydHN0X3N0cmluZyB7CisJaW50IG51bTsKKwljaGFyICpkZXNjOworfTsKKworc3RhdGljIHN0cnVjdCBwb3J0c3Rfc3RyaW5nIHBvcnRzdF9zdHJpbmdzW10gPSB7CisJeyBTREVWX1NUX0FWQUlMQUJMRSwJIkRldmljZSBBdmFpbGFibGUiIH0sCisJeyBTREVWX1NUX1VTRUQsCQkiRGV2aWNlIGluIFVzZSIgfSwKKwl7IFNERVZfU1RfRVJST1IsCSJEZXZpY2UgRXJyb3IifSwKKwl7IFZERVZfU1RfTlVMTCwJCSJQb3J0IEF2YWlsYWJsZSJ9LAorCXsgVkRFVl9TVF9OT1RBU1NJR05FRCwJIlBvcnQgSW5pdGlhbGl6aW5nIn0sCisJeyBWREVWX1NUX1VTRUQsCQkiUG9ydCBpbiBVc2UifSwKKwl7IFZERVZfU1RfRVJST1IsCSJQb3J0IEVycm9yIn0sCisJeyAwLCBOVUxMfQorfTsKKworY29uc3QgY2hhciAqdXNiaXBfc3RhdHVzX3N0cmluZyhpbnQzMl90IHN0YXR1cykKK3sKKwlmb3IgKGludCBpPTA7IHBvcnRzdF9zdHJpbmdzW2ldLmRlc2MgIT0gTlVMTDsgaSsrKQorCQlpZiAocG9ydHN0X3N0cmluZ3NbaV0ubnVtID09IHN0YXR1cykKKwkJCXJldHVybiBwb3J0c3Rfc3RyaW5nc1tpXS5kZXNjOworCisJcmV0dXJuICJVbmtub3duIFN0YXR1cyI7Cit9CisKK2NvbnN0IGNoYXIgKnVzYmlwX3NwZWVkX3N0cmluZyhpbnQgbnVtKQoreworCWZvciAoaW50IGk9MDsgc3BlZWRfc3RyaW5nc1tpXS5zcGVlZCAhPSBOVUxMOyBpKyspCisJCWlmIChzcGVlZF9zdHJpbmdzW2ldLm51bSA9PSBudW0pCisJCQlyZXR1cm4gc3BlZWRfc3RyaW5nc1tpXS5kZXNjOworCisJcmV0dXJuICJVbmtub3duIFNwZWVkIjsKK30KKworCisjZGVmaW5lIERCR19VREVWX0lOVEVHRVIobmFtZSlcCisJZGJnKCIlLTIwcyA9ICV4IiwgdG9fc3RyaW5nKG5hbWUpLCAoaW50KSB1ZGV2LT5uYW1lKQorCisjZGVmaW5lIERCR19VSU5GX0lOVEVHRVIobmFtZSlcCisJZGJnKCIlLTIwcyA9ICV4IiwgdG9fc3RyaW5nKG5hbWUpLCAoaW50KSB1aW5mLT5uYW1lKQorCit2b2lkIGR1bXBfdXNiX2ludGVyZmFjZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdWluZikKK3sKKwljaGFyIGJ1ZmZbMTAwXTsKKwl1c2JpcF9uYW1lc19nZXRfY2xhc3MoYnVmZiwgc2l6ZW9mKGJ1ZmYpLAorCQkJdWluZi0+YkludGVyZmFjZUNsYXNzLAorCQkJdWluZi0+YkludGVyZmFjZVN1YkNsYXNzLAorCQkJdWluZi0+YkludGVyZmFjZVByb3RvY29sKTsKKwlkYmcoIiUtMjBzID0gJXMiLCAiSW50ZXJmYWNlKEMvU0MvUCkiLCBidWZmKTsKK30KKwordm9pZCBkdW1wX3VzYl9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJY2hhciBidWZmWzEwMF07CisKKworCWRiZygiJS0yMHMgPSAlcyIsICJwYXRoIiwgIHVkZXYtPnBhdGgpOworCWRiZygiJS0yMHMgPSAlcyIsICJidXNpZCIsIHVkZXYtPmJ1c2lkKTsKKworCXVzYmlwX25hbWVzX2dldF9jbGFzcyhidWZmLCBzaXplb2YoYnVmZiksCisJCQl1ZGV2LT5iRGV2aWNlQ2xhc3MsCisJCQl1ZGV2LT5iRGV2aWNlU3ViQ2xhc3MsCisJCQl1ZGV2LT5iRGV2aWNlUHJvdG9jb2wpOworCWRiZygiJS0yMHMgPSAlcyIsICJEZXZpY2UoQy9TQy9QKSIsIGJ1ZmYpOworCisJREJHX1VERVZfSU5URUdFUihiY2REZXZpY2UpOworCisJdXNiaXBfbmFtZXNfZ2V0X3Byb2R1Y3QoYnVmZiwgc2l6ZW9mKGJ1ZmYpLAorCQkJdWRldi0+aWRWZW5kb3IsCisJCQl1ZGV2LT5pZFByb2R1Y3QpOworCWRiZygiJS0yMHMgPSAlcyIsICJWZW5kb3IvUHJvZHVjdCIsIGJ1ZmYpOworCisJREJHX1VERVZfSU5URUdFUihiTnVtQ29uZmlndXJhdGlvbnMpOworCURCR19VREVWX0lOVEVHRVIoYk51bUludGVyZmFjZXMpOworCisJZGJnKCIlLTIwcyA9ICVzIiwgInNwZWVkIiwKKwkJCXVzYmlwX3NwZWVkX3N0cmluZyh1ZGV2LT5zcGVlZCkpOworCisJREJHX1VERVZfSU5URUdFUihidXNudW0pOworCURCR19VREVWX0lOVEVHRVIoZGV2bnVtKTsKK30KKworCitpbnQgcmVhZF9hdHRyX3ZhbHVlKHN0cnVjdCBzeXNmc19kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZm9ybWF0KQoreworCWNoYXIgYXR0cnBhdGhbU1lTRlNfUEFUSF9NQVhdOworCXN0cnVjdCBzeXNmc19hdHRyaWJ1dGUgKmF0dHI7CisJaW50IG51bSA9IDA7CisJaW50IHJldDsKKworCXNucHJpbnRmKGF0dHJwYXRoLCBzaXplb2YoYXR0cnBhdGgpLCAiJXMvJXMiLCBkZXYtPnBhdGgsIG5hbWUpOworCisJYXR0ciA9IHN5c2ZzX29wZW5fYXR0cmlidXRlKGF0dHJwYXRoKTsKKwlpZiAoIWF0dHIpIHsKKwkJZXJyKCJvcGVuIGF0dHIgJXMiLCBhdHRycGF0aCk7CisJCXJldHVybiAwOworCX0KKworCXJldCA9IHN5c2ZzX3JlYWRfYXR0cmlidXRlKGF0dHIpOworCWlmIChyZXQgPCAwKSB7CisJCWVycigicmVhZCBhdHRyIik7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IHNzY2FuZihhdHRyLT52YWx1ZSwgZm9ybWF0LCAmbnVtKTsKKwlpZiAocmV0IDwgMSkgeworCQllcnIoInNzY2FuZiIpOworCQlnb3RvIGVycjsKKwl9CisKK2VycjoKKwlzeXNmc19jbG9zZV9hdHRyaWJ1dGUoYXR0cik7CisKKwlyZXR1cm4gbnVtOworfQorCisKK2ludCByZWFkX2F0dHJfc3BlZWQoc3RydWN0IHN5c2ZzX2RldmljZSAqZGV2KQoreworCWNoYXIgYXR0cnBhdGhbU1lTRlNfUEFUSF9NQVhdOworCXN0cnVjdCBzeXNmc19hdHRyaWJ1dGUgKmF0dHI7CisJY2hhciBzcGVlZFsxMDBdOworCWludCByZXQ7CisKKwlzbnByaW50ZihhdHRycGF0aCwgc2l6ZW9mKGF0dHJwYXRoKSwgIiVzLyVzIiwgZGV2LT5wYXRoLCAic3BlZWQiKTsKKworCWF0dHIgPSBzeXNmc19vcGVuX2F0dHJpYnV0ZShhdHRycGF0aCk7CisJaWYgKCFhdHRyKSB7CisJCWVycigib3BlbiBhdHRyIik7CisJCXJldHVybiAwOworCX0KKworCXJldCA9IHN5c2ZzX3JlYWRfYXR0cmlidXRlKGF0dHIpOworCWlmIChyZXQgPCAwKSB7CisJCWVycigicmVhZCBhdHRyIik7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IHNzY2FuZihhdHRyLT52YWx1ZSwgIiVzXG4iLCBzcGVlZCk7CisJaWYgKHJldCA8IDEpIHsKKwkJZXJyKCJzc2NhbmYiKTsKKwkJZ290byBlcnI7CisJfQorZXJyOgorCXN5c2ZzX2Nsb3NlX2F0dHJpYnV0ZShhdHRyKTsKKworCWZvciAoaW50IGk9MDsgc3BlZWRfc3RyaW5nc1tpXS5zcGVlZCAhPSBOVUxMOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAoc3BlZWQsIHNwZWVkX3N0cmluZ3NbaV0uc3BlZWQpKQorCQkJcmV0dXJuIHNwZWVkX3N0cmluZ3NbaV0ubnVtOworCX0KKworCXJldHVybiBVU0JfU1BFRURfVU5LTk9XTjsKK30KKworI2RlZmluZSBSRUFEX0FUVFIob2JqZWN0LCB0eXBlLCBkZXYsIG5hbWUsIGZvcm1hdClcCisJZG8geyAob2JqZWN0KS0+bmFtZSA9ICh0eXBlKSByZWFkX2F0dHJfdmFsdWUoZGV2LCB0b19zdHJpbmcobmFtZSksIGZvcm1hdCk7IH0gd2hpbGUgKDApCisKKworaW50IHJlYWRfdXNiX2RldmljZShzdHJ1Y3Qgc3lzZnNfZGV2aWNlICpzZGV2LCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwl1aW50MzJfdCBidXNudW0sIGRldm51bTsKKworCVJFQURfQVRUUih1ZGV2LCB1aW50OF90LCAgc2RldiwgYkRldmljZUNsYXNzLAkJIiUwMnhcbiIpOworCVJFQURfQVRUUih1ZGV2LCB1aW50OF90LCAgc2RldiwgYkRldmljZVN1YkNsYXNzLAkiJTAyeFxuIik7CisJUkVBRF9BVFRSKHVkZXYsIHVpbnQ4X3QsICBzZGV2LCBiRGV2aWNlUHJvdG9jb2wsCSIlMDJ4XG4iKTsKKworCVJFQURfQVRUUih1ZGV2LCB1aW50MTZfdCwgc2RldiwgaWRWZW5kb3IsCQkiJTA0eFxuIik7CisJUkVBRF9BVFRSKHVkZXYsIHVpbnQxNl90LCBzZGV2LCBpZFByb2R1Y3QsCQkiJTA0eFxuIik7CisJUkVBRF9BVFRSKHVkZXYsIHVpbnQxNl90LCBzZGV2LCBiY2REZXZpY2UsCQkiJTA0eFxuIik7CisKKwlSRUFEX0FUVFIodWRldiwgdWludDhfdCwgIHNkZXYsIGJDb25maWd1cmF0aW9uVmFsdWUsCSIlMDJ4XG4iKTsKKwlSRUFEX0FUVFIodWRldiwgdWludDhfdCwgIHNkZXYsIGJOdW1Db25maWd1cmF0aW9ucywJIiUwMnhcbiIpOworCVJFQURfQVRUUih1ZGV2LCB1aW50OF90LCAgc2RldiwgYk51bUludGVyZmFjZXMsCQkiJTAyeFxuIik7CisKKwlSRUFEX0FUVFIodWRldiwgdWludDhfdCwgIHNkZXYsIGRldm51bSwJCQkiJWRcbiIpOworCXVkZXYtPnNwZWVkID0gcmVhZF9hdHRyX3NwZWVkKHNkZXYpOworCisJc3RybmNweSh1ZGV2LT5wYXRoLCAgc2Rldi0+cGF0aCwgIFNZU0ZTX1BBVEhfTUFYKTsKKwlzdHJuY3B5KHVkZXYtPmJ1c2lkLCBzZGV2LT5uYW1lLCBTWVNGU19CVVNfSURfU0laRSk7CisKKwlzc2NhbmYoc2Rldi0+bmFtZSwgIiV1LSV1IiwgJmJ1c251bSwgJmRldm51bSk7CisJdWRldi0+YnVzbnVtID0gYnVzbnVtOworCisJcmV0dXJuIDA7Cit9CisKK2ludCByZWFkX3VzYl9pbnRlcmZhY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGludCBpLCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdWluZikKK3sKKwljaGFyIGJ1c2lkW1NZU0ZTX0JVU19JRF9TSVpFXTsKKwlzdHJ1Y3Qgc3lzZnNfZGV2aWNlICpzaWY7CisKKwlzcHJpbnRmKGJ1c2lkLCAiJXM6JWQuJWQiLCB1ZGV2LT5idXNpZCwgdWRldi0+YkNvbmZpZ3VyYXRpb25WYWx1ZSwgaSk7CisKKwlzaWYgPSBzeXNmc19vcGVuX2RldmljZSgidXNiIiwgYnVzaWQpOworCWlmICghc2lmKSB7CisJCWVycigib3BlbiBzaWYgb2YgJXMiLCBidXNpZCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlSRUFEX0FUVFIodWluZiwgdWludDhfdCwgIHNpZiwgYkludGVyZmFjZUNsYXNzLAkJIiUwMnhcbiIpOworCVJFQURfQVRUUih1aW5mLCB1aW50OF90LCAgc2lmLCBiSW50ZXJmYWNlU3ViQ2xhc3MsCSIlMDJ4XG4iKTsKKwlSRUFEX0FUVFIodWluZiwgdWludDhfdCwgIHNpZiwgYkludGVyZmFjZVByb3RvY29sLAkiJTAyeFxuIik7CisKKwlzeXNmc19jbG9zZV9kZXZpY2Uoc2lmKTsKKworCXJldHVybiAwOworfQorCitpbnQgdXNiaXBfbmFtZXNfaW5pdChjaGFyICpmKQoreworCXJldHVybiBuYW1lc19pbml0KGYpOworfQorCit2b2lkIHVzYmlwX25hbWVzX2ZyZWUoKQoreworCW5hbWVzX2ZyZWUoKTsKK30KKwordm9pZCB1c2JpcF9uYW1lc19nZXRfcHJvZHVjdChjaGFyICpidWZmLCBzaXplX3Qgc2l6ZSwgdWludDE2X3QgdmVuZG9yLCB1aW50MTZfdCBwcm9kdWN0KQoreworCWNvbnN0IGNoYXIgKnByb2QsICp2ZW5kOworCisJcHJvZCA9IG5hbWVzX3Byb2R1Y3QodmVuZG9yLCBwcm9kdWN0KTsKKwlpZiAoIXByb2QpCisJCXByb2QgPSAidW5rbm93biBwcm9kdWN0IjsKKworCisJdmVuZCA9IG5hbWVzX3ZlbmRvcih2ZW5kb3IpOworCWlmICghdmVuZCkKKwkJdmVuZCA9ICJ1bmtub3duIHZlbmRvciI7CisKKwlzbnByaW50ZihidWZmLCBzaXplLCAiJXMgOiAlcyAoJTA0eDolMDR4KSIsIHZlbmQsIHByb2QsIHZlbmRvciwgcHJvZHVjdCk7Cit9CisKK3ZvaWQgdXNiaXBfbmFtZXNfZ2V0X2NsYXNzKGNoYXIgKmJ1ZmYsIHNpemVfdCBzaXplLCB1aW50OF90IGNsYXNzLCB1aW50OF90IHN1YmNsYXNzLCB1aW50OF90IHByb3RvY29sKQoreworCWNvbnN0IGNoYXIgKmMsICpzLCAqcDsKKworCWlmIChjbGFzcyA9PSAwICYmIHN1YmNsYXNzID09IDAgJiYgcHJvdG9jb2wgPT0gMCkgeworCQlzbnByaW50ZihidWZmLCBzaXplLCAiKERlZmluZWQgYXQgSW50ZXJmYWNlIGxldmVsKSAoJTAyeC8lMDJ4LyUwMngpIiwgY2xhc3MsIHN1YmNsYXNzLCBwcm90b2NvbCk7CisJCXJldHVybjsKKwl9CisKKwlwID0gbmFtZXNfcHJvdG9jb2woY2xhc3MsIHN1YmNsYXNzLCBwcm90b2NvbCk7CisJaWYgKCFwKQorCQlwID0gInVua25vd24gcHJvdG9jb2wiOworCisJcyA9IG5hbWVzX3N1YmNsYXNzKGNsYXNzLCBzdWJjbGFzcyk7CisJaWYgKCFzKQorCQlzID0gInVua25vd24gc3ViY2xhc3MiOworCisJYyA9IG5hbWVzX2NsYXNzKGNsYXNzKTsKKwlpZiAoIWMpCisJCWMgPSAidW5rbm93biBjbGFzcyI7CisKKwlzbnByaW50ZihidWZmLCBzaXplLCAiJXMgLyAlcyAvICVzICglMDJ4LyUwMngvJTAyeCkiLCBjLCBzLCBwLCBjbGFzcywgc3ViY2xhc3MsIHByb3RvY29sKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2UvbGlic3JjL3VzYmlwX2NvbW1vbi5oIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9saWJzcmMvdXNiaXBfY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI1NGI1NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2UvbGlic3JjL3VzYmlwX2NvbW1vbi5oCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcgVGFrYWhpcm8gSGlyb2Z1Y2hpCisgKi8KKworI2lmbmRlZiBfVVNCSVBfQ09NTU9OX0gKKyNkZWZpbmUgX1VTQklQX0NPTU1PTl9ICisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzeXNsb2cuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5ncy5oPgorCisjaW5jbHVkZSA8c3lzZnMvbGlic3lzZnMuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworI2lmbmRlZiBVU0JJRFNfRklMRQorI2RlZmluZSBVU0JJRFNfRklMRSAiL3Vzci9zaGFyZS9od2RhdGEvdXNiLmlkcyIKKyNlbmRpZgorCisjaWZuZGVmIFZIQ0lfU1RBVEVfUEFUSAorI2RlZmluZSBWSENJX1NUQVRFX1BBVEggIi92YXIvcnVuL3ZoY2lfaGNkIgorI2VuZGlmCisKKy8vI2luY2x1ZGUgPGxpbnV4L3VzYl9jaDkuaD4KK2VudW0gdXNiX2RldmljZV9zcGVlZCB7CisJVVNCX1NQRUVEX1VOS05PV04gPSAwLCAgICAgICAgICAgICAgICAgIC8qIGVudW1lcmF0aW5nICovCisJVVNCX1NQRUVEX0xPVywgVVNCX1NQRUVEX0ZVTEwsICAgICAgICAgIC8qIHVzYiAxLjEgKi8KKwlVU0JfU1BFRURfSElHSCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogdXNiIDIuMCAqLworCVVTQl9TUEVFRF9WQVJJQUJMRSAgICAgICAgICAgICAgICAgICAgICAvKiB3aXJlbGVzcyAodXNiIDIuNSkgKi8KK307CisKKy8qIEZJWE1FOiBob3cgdG8gc3luYyB3aXRoIGRyaXZlcnMvdXNiaXBfY29tbW9uLmggPyAqLworZW51bSB1c2JpcF9kZXZpY2Vfc3RhdHVzeworCS8qIHNkZXYgaXMgYXZhaWxhYmxlLiAqLworCVNERVZfU1RfQVZBSUxBQkxFID0gMHgwMSwKKwkvKiBzZGV2IGlzIG5vdyB1c2VkLiAqLworCVNERVZfU1RfVVNFRCwKKwkvKiBzZGV2IGlzIHVudXNhYmxlIGJlY2F1c2Ugb2YgYSBmYXRhbCBlcnJvci4gKi8KKwlTREVWX1NUX0VSUk9SLAorCisJLyogdmRldiBkb2VzIG5vdCBjb25uZWN0IGEgcmVtb3RlIGRldmljZS4gKi8KKwlWREVWX1NUX05VTEwsCisJLyogdmRldiBpcyB1c2VkLCBidXQgdGhlIFVTQiBhZGRyZXNzIGlzIG5vdCBhc3NpZ25lZCB5ZXQgKi8KKwlWREVWX1NUX05PVEFTU0lHTkVELAorCVZERVZfU1RfVVNFRCwKKwlWREVWX1NUX0VSUk9SCit9OworCitleHRlcm4gaW50IHVzYmlwX3VzZV9zeXNsb2c7CitleHRlcm4gaW50IHVzYmlwX3VzZV9zdGRlcnI7CitleHRlcm4gaW50IHVzYmlwX3VzZV9kZWJ1ZyA7CisKKyNkZWZpbmUgZXJyKGZtdCwgYXJncy4uLikJZG8geyBcCisJaWYgKHVzYmlwX3VzZV9zeXNsb2cpIHsgXAorCQlzeXNsb2coTE9HX0VSUiwgInVzYmlwIGVycjogJTEzczolNGQgKCUtMTJzKSAiIGZtdCAiXG4iLCBcCisJCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXywgICMjYXJncyk7IFwKKwl9IFwKKwlpZiAodXNiaXBfdXNlX3N0ZGVycikgeyBcCisJCWZwcmludGYoc3RkZXJyLCAidXNiaXAgZXJyOiAlMTNzOiU0ZCAoJS0xMnMpICIgZm10ICJcbiIsIFwKKwkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fLCAgIyNhcmdzKTsgXAorCX0gXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBub3RpY2UoZm10LCBhcmdzLi4uKQlkbyB7IFwKKwlpZiAodXNiaXBfdXNlX3N5c2xvZykgeyBcCisJCXN5c2xvZyhMT0dfREVCVUcsICJ1c2JpcDogIiBmbXQsICMjYXJncyk7IFwKKwl9IFwKKwlpZiAodXNiaXBfdXNlX3N0ZGVycikgeyBcCisJCWZwcmludGYoc3RkZXJyLCAidXNiaXA6ICIgZm10ICJcbiIsICAjI2FyZ3MpOyBcCisJfSBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGluZm8oZm10LCBhcmdzLi4uKQlkbyB7IFwKKwlpZiAodXNiaXBfdXNlX3N5c2xvZykgeyBcCisJCXN5c2xvZyhMT0dfREVCVUcsIGZtdCwgIyNhcmdzKTsgXAorCX0gXAorCWlmICh1c2JpcF91c2Vfc3RkZXJyKSB7IFwKKwkJZnByaW50ZihzdGRlcnIsIGZtdCAiXG4iLCAgIyNhcmdzKTsgXAorCX0gXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBkYmcoZm10LCBhcmdzLi4uKQlkbyB7IFwKKwlpZiAodXNiaXBfdXNlX2RlYnVnKSB7IFwKKwkJaWYgKHVzYmlwX3VzZV9zeXNsb2cpIHsgXAorCQkJc3lzbG9nKExPR19ERUJVRywgInVzYmlwIGRiZzogJTEzczolNGQgKCUtMTJzKSAiIGZtdCwgXAorCQkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fLCAgIyNhcmdzKTsgXAorCQl9IFwKKwkJaWYgKHVzYmlwX3VzZV9zdGRlcnIpIHsgXAorCQkJZnByaW50ZihzdGRlcnIsICJ1c2JpcCBkYmc6ICUxM3M6JTRkICglLTEycykgIiBmbXQgIlxuIiwgXAorCQkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fLCAgIyNhcmdzKTsgXAorCQl9IFwKKwl9IFwKK30gd2hpbGUgKDApCisKKworI2RlZmluZSBCVUcoKQlkbyB7IGVycigic29ycnksIGl0J3MgYSBidWciKTsgYWJvcnQoKTsgfSB3aGlsZSAoMCkKKworCitzdHJ1Y3QgdXNiX2ludGVyZmFjZSB7CisJdWludDhfdCBiSW50ZXJmYWNlQ2xhc3M7CisJdWludDhfdCBiSW50ZXJmYWNlU3ViQ2xhc3M7CisJdWludDhfdCBiSW50ZXJmYWNlUHJvdG9jb2w7CisJdWludDhfdCBwYWRkaW5nOwkvKiBhbGlnbm1lbnQgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworCitzdHJ1Y3QgdXNiX2RldmljZSB7CisJY2hhciBwYXRoW1NZU0ZTX1BBVEhfTUFYXTsKKwljaGFyIGJ1c2lkW1NZU0ZTX0JVU19JRF9TSVpFXTsKKworCXVpbnQzMl90IGJ1c251bTsKKwl1aW50MzJfdCBkZXZudW07CisJdWludDMyX3Qgc3BlZWQ7CisKKwl1aW50MTZfdCBpZFZlbmRvcjsKKwl1aW50MTZfdCBpZFByb2R1Y3Q7CisJdWludDE2X3QgYmNkRGV2aWNlOworCisJdWludDhfdCBiRGV2aWNlQ2xhc3M7CisJdWludDhfdCBiRGV2aWNlU3ViQ2xhc3M7CisJdWludDhfdCBiRGV2aWNlUHJvdG9jb2w7CisJdWludDhfdCBiQ29uZmlndXJhdGlvblZhbHVlOworCXVpbnQ4X3QgYk51bUNvbmZpZ3VyYXRpb25zOworCXVpbnQ4X3QgYk51bUludGVyZmFjZXM7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIHRvX3N0cmluZyhzKQkjcworCit2b2lkIGR1bXBfdXNiX2ludGVyZmFjZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqKTsKK3ZvaWQgZHVtcF91c2JfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICopOworaW50IHJlYWRfdXNiX2RldmljZShzdHJ1Y3Qgc3lzZnNfZGV2aWNlICpzZGV2LCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldik7CitpbnQgcmVhZF9hdHRyX3ZhbHVlKHN0cnVjdCBzeXNmc19kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZm9ybWF0KTsKK2ludCByZWFkX3VzYl9pbnRlcmZhY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGludCBpLCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdWluZik7CisKK2NvbnN0IGNoYXIgKnVzYmlwX3NwZWVkX3N0cmluZyhpbnQgbnVtKTsKK2NvbnN0IGNoYXIgKnVzYmlwX3N0YXR1c19zdHJpbmcoaW50MzJfdCBzdGF0dXMpOworCitpbnQgdXNiaXBfbmFtZXNfaW5pdChjaGFyICopOwordm9pZCB1c2JpcF9uYW1lc19mcmVlKHZvaWQpOwordm9pZCB1c2JpcF9uYW1lc19nZXRfcHJvZHVjdChjaGFyICpidWZmLCBzaXplX3Qgc2l6ZSwgdWludDE2X3QgdmVuZG9yLCB1aW50MTZfdCBwcm9kdWN0KTsKK3ZvaWQgdXNiaXBfbmFtZXNfZ2V0X2NsYXNzKGNoYXIgKmJ1ZmYsIHNpemVfdCBzaXplLCB1aW50OF90IGNsYXNzLCB1aW50OF90IHN1YmNsYXNzLCB1aW50OF90IHByb3RvY29sKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL2xpYnNyYy92aGNpX2RyaXZlci5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9saWJzcmMvdmhjaV9kcml2ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjQzZjhkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9saWJzcmMvdmhjaV9kcml2ZXIuYwpAQCAtMCwwICsxLDUwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA3IFRha2FoaXJvIEhpcm9mdWNoaQorICovCisKKworI2luY2x1ZGUgInVzYmlwLmgiCisKKworc3RhdGljIGNvbnN0IGNoYXIgdmhjaV9kcml2ZXJfbmFtZVtdID0gInZoY2lfaGNkIjsKKworc3RydWN0IHVzYmlwX3ZoY2lfZHJpdmVyICp2aGNpX2RyaXZlcjsKKworc3RhdGljIHN0cnVjdCB1c2JpcF9pbXBvcnRlZF9kZXZpY2UgKmltcG9ydGVkX2RldmljZV9pbml0KHN0cnVjdCB1c2JpcF9pbXBvcnRlZF9kZXZpY2UgKmlkZXYsIGNoYXIgKmJ1c2lkKQoreworCXN0cnVjdCBzeXNmc19kZXZpY2UgKnN1ZGV2OworCisJc3VkZXYgPSBzeXNmc19vcGVuX2RldmljZSgidXNiIiwgYnVzaWQpOworCWlmICghc3VkZXYpIHsKKwkJZXJyKCJzeXNmc19vcGVuX2RldmljZSAlcyIsIGJ1c2lkKTsKKwkJZ290byBlcnI7CisJfQorCXJlYWRfdXNiX2RldmljZShzdWRldiwgJmlkZXYtPnVkZXYpOworCXN5c2ZzX2Nsb3NlX2RldmljZShzdWRldik7CisKKwkvKiBhZGQgY2xhc3MgZGV2aWNlcyBvZiB0aGlzIGltcG9ydGVkIGRldmljZSAqLworCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXY7CisJZGxpc3RfZm9yX2VhY2hfZGF0YSh2aGNpX2RyaXZlci0+Y2Rldl9saXN0LCBjZGV2LCBzdHJ1Y3QgY2xhc3NfZGV2aWNlKSB7CisJCWlmICghc3RybmNtcChjZGV2LT5kZXZwYXRoLCBpZGV2LT51ZGV2LnBhdGgsIHN0cmxlbihpZGV2LT51ZGV2LnBhdGgpKSkgeworCQkJc3RydWN0IGNsYXNzX2RldmljZSAqbmV3X2NkZXY7CisKKwkJCS8qIGFsbG9jIGFuZCBjb3B5IGJlY2F1c2UgZGxpc3QgaXMgbGlua2VkIGZyb20gb25seSBvbmUgbGlzdCAqLworCQkJbmV3X2NkZXYgPSBjYWxsb2MoMSwgc2l6ZW9mKCpuZXdfY2RldikpOworCQkJaWYgKCFuZXdfY2RldikKKwkJCQlnb3RvIGVycjsKKworCQkJbWVtY3B5KG5ld19jZGV2LCBjZGV2LCBzaXplb2YoKm5ld19jZGV2KSk7CisJCQlkbGlzdF91bnNoaWZ0KGlkZXYtPmNkZXZfbGlzdCwgKHZvaWQqKSBuZXdfY2Rldik7CisJCX0KKwl9CisKKwlyZXR1cm4gaWRldjsKKworZXJyOgorCXJldHVybiBOVUxMOworfQorCisKKworc3RhdGljIGludCBwYXJzZV9zdGF0dXMoY2hhciAqdmFsdWUpCit7CisJaW50IHJldCA9IDA7CisJY2hhciAqYzsKKworCisJZm9yIChpbnQgaSA9IDA7IGkgPCB2aGNpX2RyaXZlci0+bnBvcnRzOyBpKyspCisJCWJ6ZXJvKCZ2aGNpX2RyaXZlci0+aWRldltpXSwgc2l6ZW9mKHN0cnVjdCB1c2JpcF9pbXBvcnRlZF9kZXZpY2UpKTsKKworCisJLyogc2tpcCBhIGhlYWRlciBsaW5lICovCisJYyA9IHN0cmNocih2YWx1ZSwgJ1xuJykgKyAxOworCisJd2hpbGUgKCpjICE9ICdcMCcpIHsKKwkJaW50IHBvcnQsIHN0YXR1cywgc3BlZWQsIGRldmlkOworCQl1bnNpZ25lZCBsb25nIHNvY2tldDsKKwkJY2hhciBsYnVzaWRbU1lTRlNfQlVTX0lEX1NJWkVdOworCisJCXJldCA9IHNzY2FuZihjLCAiJWQgJWQgJWQgJXggJWx4ICVzXG4iLAorCQkJCSZwb3J0LCAmc3RhdHVzLCAmc3BlZWQsCisJCQkJJmRldmlkLCAmc29ja2V0LCBsYnVzaWQpOworCisJCWlmIChyZXQgPCA1KSB7CisJCQllcnIoInNjYW5mICVkIiwgcmV0KTsKKwkJCUJVRygpOworCQl9CisKKwkJZGJnKCJwb3J0ICVkIHN0YXR1cyAlZCBzcGVlZCAlZCBkZXZpZCAleCIsCisJCQkJcG9ydCwgc3RhdHVzLCBzcGVlZCwgZGV2aWQpOworCQlkYmcoInNvY2tldCAlbHggbGJ1c2lkICVzIiwgc29ja2V0LCBsYnVzaWQpOworCisKKwkJLyogaWYgYSBkZXZpY2UgaXMgY29ubmVjdGVkLCBsb29rIGF0IGl0ICovCisJCXsKKwkJCXN0cnVjdCB1c2JpcF9pbXBvcnRlZF9kZXZpY2UgKmlkZXYgPSAmdmhjaV9kcml2ZXItPmlkZXZbcG9ydF07CisKKwkJCWlkZXYtPnBvcnQJPSBwb3J0OworCQkJaWRldi0+c3RhdHVzCT0gc3RhdHVzOworCisJCQlpZGV2LT5kZXZpZAk9IGRldmlkOworCisJCQlpZGV2LT5idXNudW0JPSAoZGV2aWQgPj4gMTYpOworCQkJaWRldi0+ZGV2bnVtCT0gKGRldmlkICYgMHgwMDAwZmZmZik7CisKKwkJCWlkZXYtPmNkZXZfbGlzdCA9IGRsaXN0X25ldyhzaXplb2Yoc3RydWN0IGNsYXNzX2RldmljZSkpOworCQkJaWYgKCFpZGV2LT5jZGV2X2xpc3QpIHsKKwkJCQllcnIoImluaXQgbmV3IGRldmljZSIpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKworCQkJaWYgKGlkZXYtPnN0YXR1cyAhPSBWREVWX1NUX05VTEwgJiYgaWRldi0+c3RhdHVzICE9IFZERVZfU1RfTk9UQVNTSUdORUQpIHsKKwkJCQlpZGV2ID0gaW1wb3J0ZWRfZGV2aWNlX2luaXQoaWRldiwgbGJ1c2lkKTsKKwkJCQlpZiAoIWlkZXYpIHsKKwkJCQkJZXJyKCJpbml0IG5ldyBkZXZpY2UiKTsKKwkJCQkJcmV0dXJuIC0xOworCQkJCX0KKwkJCX0KKwkJfQorCisKKwkJLyogZ28gdG8gdGhlIG5leHQgbGluZSAqLworCQljID0gc3RyY2hyKGMsICdcbicpICsgMTsKKwl9CisKKwlkYmcoImV4aXQiKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgY2hlY2tfdXNiaXBfZGV2aWNlKHN0cnVjdCBzeXNmc19jbGFzc19kZXZpY2UgKmNkZXYpCit7CisJY2hhciBjbHNwYXRoW1NZU0ZTX1BBVEhfTUFYXTsJLyogL3N5cy9jbGFzcy92aWRlbzRsaW51eC92aWRlbzAvZGV2aWNlICAgICAqLworCWNoYXIgZGV2cGF0aFtTWVNGU19QQVRIX01BWF07CS8qIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS92aGNpX2hjZC91c2I2LzYtMToxLjEgICovCisKKwlpbnQgcmV0OworCisJc25wcmludGYoY2xzcGF0aCwgc2l6ZW9mKGNsc3BhdGgpLCAiJXMvZGV2aWNlIiwgY2Rldi0+cGF0aCk7CisKKwlyZXQgPSBzeXNmc19nZXRfbGluayhjbHNwYXRoLCBkZXZwYXRoLCBTWVNGU19QQVRIX01BWCk7CisJaWYgKCFyZXQpIHsKKwkJaWYgKCFzdHJuY21wKGRldnBhdGgsIHZoY2lfZHJpdmVyLT5oY19kZXZpY2UtPnBhdGgsCisJCQkJCXN0cmxlbih2aGNpX2RyaXZlci0+aGNfZGV2aWNlLT5wYXRoKSkpIHsKKwkJCS8qIGZvdW5kIHVzYmlwIGRldmljZSAqLworCQkJc3RydWN0IGNsYXNzX2RldmljZSAqY2RldjsKKworCQkJY2RldiA9IGNhbGxvYygxLCBzaXplb2YoKmNkZXYpKTsKKwkJCWlmICghY2RldikgeworCQkJCWVycigiY2FsbG9jIGNkZXYiKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQlkbGlzdF91bnNoaWZ0KHZoY2lfZHJpdmVyLT5jZGV2X2xpc3QsICh2b2lkKikgY2Rldik7CisJCQlzdHJuY3B5KGNkZXYtPmNsc3BhdGgsIGNsc3BhdGgsIHNpemVvZihjZGV2LT5jbHNwYXRoKSk7CisJCQlzdHJuY3B5KGNkZXYtPmRldnBhdGgsIGRldnBhdGgsIHNpemVvZihjZGV2LT5jbHNwYXRoKSk7CisJCQlkYmcoIiAgZm91bmQgJXMgJXMiLCBjbHNwYXRoLCBkZXZwYXRoKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgc2VhcmNoX2NsYXNzX2Zvcl91c2JpcF9kZXZpY2UoY2hhciAqY25hbWUpCit7CisJc3RydWN0IHN5c2ZzX2NsYXNzICpjbGFzczsKKwlzdHJ1Y3QgZGxpc3QgKmNkZXZfbGlzdDsKKwlzdHJ1Y3Qgc3lzZnNfY2xhc3NfZGV2aWNlICpjZGV2OworCWludCByZXQgPSAwOworCisJY2xhc3MgPSBzeXNmc19vcGVuX2NsYXNzKGNuYW1lKTsKKwlpZiAoIWNsYXNzKSB7CisJCWVycigib3BlbiBjbGFzcyIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZGJnKCJjbGFzcyAlcyIsIGNsYXNzLT5uYW1lKTsKKworCWNkZXZfbGlzdCA9IHN5c2ZzX2dldF9jbGFzc19kZXZpY2VzKGNsYXNzKTsKKwlpZiAoIWNkZXZfbGlzdCkKKwkJLyogbm90aGluZyAqLworCQlnb3RvIG91dDsKKworCWRsaXN0X2Zvcl9lYWNoX2RhdGEoY2Rldl9saXN0LCBjZGV2LCBzdHJ1Y3Qgc3lzZnNfY2xhc3NfZGV2aWNlKSB7CisJCWRiZygiICAgY2RldiAlcyIsIGNkZXYtPm5hbWUpOworCQlyZXQgPSBjaGVja191c2JpcF9kZXZpY2UoY2Rldik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJc3lzZnNfY2xvc2VfY2xhc3MoY2xhc3MpOworCisJcmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgaW50IHJlZnJlc2hfY2xhc3NfZGV2aWNlX2xpc3Qodm9pZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBkbGlzdCAqY25hbWVfbGlzdDsKKwljaGFyICpjbmFtZTsKKworCS8qIHNlYXJjaCB1bmRlciAvc3lzL2NsYXNzICovCisJY25hbWVfbGlzdCA9IHN5c2ZzX29wZW5fZGlyZWN0b3J5X2xpc3QoIi9zeXMvY2xhc3MiKTsKKwlpZiAoIWNuYW1lX2xpc3QpIHsKKwkJZXJyKCJvcGVuIGNsYXNzIGRpcmVjdG9yeSIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZGxpc3RfZm9yX2VhY2hfZGF0YShjbmFtZV9saXN0LCBjbmFtZSwgY2hhcikgeworCQlyZXQgPSBzZWFyY2hfY2xhc3NfZm9yX3VzYmlwX2RldmljZShjbmFtZSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlzeXNmc19jbG9zZV9saXN0KGNuYW1lX2xpc3QpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJc3lzZnNfY2xvc2VfbGlzdChjbmFtZV9saXN0KTsKKworCS8qIHNlYWNoIHVuZGVyIC9zeXMvYmxvY2sgKi8KKwlyZXQgPSBzZWFyY2hfY2xhc3NfZm9yX3VzYmlwX2RldmljZShTWVNGU19CTE9DS19OQU1FKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCByZWZyZXNoX2ltcG9ydGVkX2RldmljZV9saXN0KHZvaWQpCit7CisJc3RydWN0IHN5c2ZzX2F0dHJpYnV0ZSAqYXR0cl9zdGF0dXM7CisKKworCWF0dHJfc3RhdHVzID0gc3lzZnNfZ2V0X2RldmljZV9hdHRyKHZoY2lfZHJpdmVyLT5oY19kZXZpY2UsICJzdGF0dXMiKTsKKwlpZiAoIWF0dHJfc3RhdHVzKSB7CisJCWVycigiZ2V0IGF0dHIgJXMgb2YgJXMiLCAic3RhdHVzIiwgdmhjaV9kcml2ZXItPmhjX2RldmljZS0+bmFtZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlkYmcoIm5hbWUgJXMsIHBhdGggJXMsIGxlbiAlZCwgbWV0aG9kICVkXG4iLCBhdHRyX3N0YXR1cy0+bmFtZSwKKwkJCWF0dHJfc3RhdHVzLT5wYXRoLCBhdHRyX3N0YXR1cy0+bGVuLCBhdHRyX3N0YXR1cy0+bWV0aG9kKTsKKworCWRiZygiJXMiLCBhdHRyX3N0YXR1cy0+dmFsdWUpOworCisJcmV0dXJuIHBhcnNlX3N0YXR1cyhhdHRyX3N0YXR1cy0+dmFsdWUpOworfQorCitzdGF0aWMgaW50IGdldF9ucG9ydHModm9pZCkKK3sKKwlpbnQgbnBvcnRzID0gMDsKKwlzdHJ1Y3Qgc3lzZnNfYXR0cmlidXRlICphdHRyX3N0YXR1czsKKworCWF0dHJfc3RhdHVzID0gc3lzZnNfZ2V0X2RldmljZV9hdHRyKHZoY2lfZHJpdmVyLT5oY19kZXZpY2UsICJzdGF0dXMiKTsKKwlpZiAoIWF0dHJfc3RhdHVzKSB7CisJCWVycigiZ2V0IGF0dHIgJXMgb2YgJXMiLCAic3RhdHVzIiwgdmhjaV9kcml2ZXItPmhjX2RldmljZS0+bmFtZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlkYmcoIm5hbWUgJXMsIHBhdGggJXMsIGxlbiAlZCwgbWV0aG9kICVkXG4iLCBhdHRyX3N0YXR1cy0+bmFtZSwKKwkJCWF0dHJfc3RhdHVzLT5wYXRoLCBhdHRyX3N0YXR1cy0+bGVuLCBhdHRyX3N0YXR1cy0+bWV0aG9kKTsKKworCWRiZygiJXMiLCBhdHRyX3N0YXR1cy0+dmFsdWUpOworCisJeworCQljaGFyICpjOworCisJCS8qIHNraXAgYSBoZWFkZXIgbGluZSAqLworCQljID0gc3RyY2hyKGF0dHJfc3RhdHVzLT52YWx1ZSwgJ1xuJykgKyAxOworCisJCXdoaWxlICgqYyAhPSAnXDAnKSB7CisJCQkvKiBnbyB0byB0aGUgbmV4dCBsaW5lICovCisJCQljID0gc3RyY2hyKGMsICdcbicpICsgMTsKKwkJCW5wb3J0cyArPSAxOworCQl9CisJfQorCisJcmV0dXJuIG5wb3J0czsKK30KKworc3RhdGljIGludCBnZXRfaGNfYnVzaWQoY2hhciAqc3lzZnNfbW50cGF0aCwgY2hhciAqaGNfYnVzaWQpCit7CisgICAgICAgIHN0cnVjdCBzeXNmc19kcml2ZXIgKnNkcml2ZXI7CisgICAgICAgIGNoYXIgc2RyaXZlcl9wYXRoW1NZU0ZTX1BBVEhfTUFYXTsKKworCXN0cnVjdCBzeXNmc19kZXZpY2UgKmhjX2RldjsKKwlzdHJ1Y3QgZGxpc3QgKmhjX2RldnM7CisKKwlpbnQgZm91bmQgPSAwOworCisgICAgICAgIHNucHJpbnRmKHNkcml2ZXJfcGF0aCwgU1lTRlNfUEFUSF9NQVgsICIlcy8lcy9wbGF0Zm9ybS8lcy8lcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2ZzX21udHBhdGgsIFNZU0ZTX0JVU19OQU1FLCBTWVNGU19EUklWRVJTX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZoY2lfZHJpdmVyX25hbWUpOworCisgICAgICAgIHNkcml2ZXIgPSBzeXNmc19vcGVuX2RyaXZlcl9wYXRoKHNkcml2ZXJfcGF0aCk7CisgICAgICAgIGlmICghc2RyaXZlcikgeworCQlpbmZvKCIlcyBpcyBub3QgZm91bmQiLCBzZHJpdmVyX3BhdGgpOworICAgICAgICAgICAgICAgIGluZm8oImxvYWQgdXNiaXAtY29yZS5rbyBhbmQgdmhjaS1oY2Qua28gISIpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisJaGNfZGV2cyA9IHN5c2ZzX2dldF9kcml2ZXJfZGV2aWNlcyhzZHJpdmVyKTsKKwlpZiAoIWhjX2RldnMpIHsKKwkJZXJyKCJnZXQgaGMgbGlzdCIpOworCQlnb3RvIGVycjsKKwl9CisKKwkvKiBhc3N1bWUgb25seSBvbmUgdmhjaV9oY2QgKi8KKwlkbGlzdF9mb3JfZWFjaF9kYXRhKGhjX2RldnMsIGhjX2Rldiwgc3RydWN0IHN5c2ZzX2RldmljZSkgeworCQlzdHJuY3B5KGhjX2J1c2lkLCBoY19kZXYtPmJ1c19pZCwgU1lTRlNfQlVTX0lEX1NJWkUpOworCQlmb3VuZCA9IDE7CisJfQorCitlcnI6CisJc3lzZnNfY2xvc2VfZHJpdmVyKHNkcml2ZXIpOworCisJaWYgKGZvdW5kKQorCQlyZXR1cm4gMDsKKworCWVycigibm90IGZvdW5kIHVzYmlwIGhjIik7CisJcmV0dXJuIC0xOworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworaW50IHVzYmlwX3ZoY2lfZHJpdmVyX29wZW4odm9pZCkKK3sKKwlpbnQgcmV0OworCWNoYXIgaGNfYnVzaWRbU1lTRlNfQlVTX0lEX1NJWkVdOworCisJdmhjaV9kcml2ZXIgPSAoc3RydWN0IHVzYmlwX3ZoY2lfZHJpdmVyICopIGNhbGxvYygxLCBzaXplb2YoKnZoY2lfZHJpdmVyKSk7CisJaWYgKCF2aGNpX2RyaXZlcikgeworCQllcnIoImFsbG9jIHZoY2lfZHJpdmVyIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXQgPSBzeXNmc19nZXRfbW50X3BhdGgodmhjaV9kcml2ZXItPnN5c2ZzX21udHBhdGgsIFNZU0ZTX1BBVEhfTUFYKTsKKwlpZiAocmV0IDwgMCkgeworCQllcnIoInN5c2ZzIG11c3QgYmUgbW91bnRlZCIpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXQgPSBnZXRfaGNfYnVzaWQodmhjaV9kcml2ZXItPnN5c2ZzX21udHBhdGgsIGhjX2J1c2lkKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnI7CisKKwkvKiB3aWxsIGJlIGZyZWVkIGluIHVzYmlwX2RyaXZlcl9jbG9zZSgpICovCisJdmhjaV9kcml2ZXItPmhjX2RldmljZSA9IHN5c2ZzX29wZW5fZGV2aWNlKCJwbGF0Zm9ybSIsIGhjX2J1c2lkKTsKKwlpZiAoIXZoY2lfZHJpdmVyLT5oY19kZXZpY2UpIHsKKwkJZXJyKCJnZXQgc3lzZnMgdmhjaV9kcml2ZXIiKTsKKwkJZ290byBlcnI7CisJfQorCisJdmhjaV9kcml2ZXItPm5wb3J0cyA9IGdldF9ucG9ydHMoKTsKKworCWluZm8oIiVkIHBvcnRzIGF2YWlsYWJsZVxuIiwgdmhjaV9kcml2ZXItPm5wb3J0cyk7CisKKwl2aGNpX2RyaXZlci0+Y2Rldl9saXN0ID0gZGxpc3RfbmV3KHNpemVvZihzdHJ1Y3QgY2xhc3NfZGV2aWNlKSk7CisJaWYgKCF2aGNpX2RyaXZlci0+Y2Rldl9saXN0KQorCQlnb3RvIGVycjsKKworCWlmIChyZWZyZXNoX2NsYXNzX2RldmljZV9saXN0KCkpCisJCWdvdG8gZXJyOworCisJaWYgKHJlZnJlc2hfaW1wb3J0ZWRfZGV2aWNlX2xpc3QoKSkKKwkJZ290byBlcnI7CisKKworCXJldHVybiAwOworCisKK2VycjoKKwlpZiAodmhjaV9kcml2ZXItPmNkZXZfbGlzdCkKKwkJZGxpc3RfZGVzdHJveSh2aGNpX2RyaXZlci0+Y2Rldl9saXN0KTsKKwlpZiAodmhjaV9kcml2ZXItPmhjX2RldmljZSkKKwkJc3lzZnNfY2xvc2VfZGV2aWNlKHZoY2lfZHJpdmVyLT5oY19kZXZpY2UpOworCWlmICh2aGNpX2RyaXZlcikKKwkJZnJlZSh2aGNpX2RyaXZlcik7CisKKwl2aGNpX2RyaXZlciA9IE5VTEw7CisJcmV0dXJuIC0xOworfQorCisKK3ZvaWQgdXNiaXBfdmhjaV9kcml2ZXJfY2xvc2UoKQoreworCWlmICghdmhjaV9kcml2ZXIpCisJCXJldHVybjsKKworCWlmICh2aGNpX2RyaXZlci0+Y2Rldl9saXN0KQorCQlkbGlzdF9kZXN0cm95KHZoY2lfZHJpdmVyLT5jZGV2X2xpc3QpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCB2aGNpX2RyaXZlci0+bnBvcnRzOyBpKyspIHsKKwkJaWYgKHZoY2lfZHJpdmVyLT5pZGV2W2ldLmNkZXZfbGlzdCkKKwkJCWRsaXN0X2Rlc3Ryb3kodmhjaV9kcml2ZXItPmlkZXZbaV0uY2Rldl9saXN0KTsKKwl9CisKKwlpZiAodmhjaV9kcml2ZXItPmhjX2RldmljZSkKKwkJc3lzZnNfY2xvc2VfZGV2aWNlKHZoY2lfZHJpdmVyLT5oY19kZXZpY2UpOworCWZyZWUodmhjaV9kcml2ZXIpOworCisJdmhjaV9kcml2ZXIgPSBOVUxMOworfQorCisKK2ludCB1c2JpcF92aGNpX3JlZnJlc2hfZGV2aWNlX2xpc3Qodm9pZCkKK3sKKwlpZiAodmhjaV9kcml2ZXItPmNkZXZfbGlzdCkKKwkJZGxpc3RfZGVzdHJveSh2aGNpX2RyaXZlci0+Y2Rldl9saXN0KTsKKworCisJZm9yIChpbnQgaSA9IDA7IGkgPCB2aGNpX2RyaXZlci0+bnBvcnRzOyBpKyspIHsKKwkJaWYgKHZoY2lfZHJpdmVyLT5pZGV2W2ldLmNkZXZfbGlzdCkKKwkJCWRsaXN0X2Rlc3Ryb3kodmhjaV9kcml2ZXItPmlkZXZbaV0uY2Rldl9saXN0KTsKKwl9CisKKwl2aGNpX2RyaXZlci0+Y2Rldl9saXN0ID0gZGxpc3RfbmV3KHNpemVvZihzdHJ1Y3QgY2xhc3NfZGV2aWNlKSk7CisJaWYgKCF2aGNpX2RyaXZlci0+Y2Rldl9saXN0KQorCQlnb3RvIGVycjsKKworCWlmIChyZWZyZXNoX2NsYXNzX2RldmljZV9saXN0KCkpCisJCWdvdG8gZXJyOworCisJaWYgKHJlZnJlc2hfaW1wb3J0ZWRfZGV2aWNlX2xpc3QoKSkKKwkJZ290byBlcnI7CisKKwlyZXR1cm4gMDsKK2VycjoKKwlpZiAodmhjaV9kcml2ZXItPmNkZXZfbGlzdCkKKwkJZGxpc3RfZGVzdHJveSh2aGNpX2RyaXZlci0+Y2Rldl9saXN0KTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgdmhjaV9kcml2ZXItPm5wb3J0czsgaSsrKSB7CisJCWlmICh2aGNpX2RyaXZlci0+aWRldltpXS5jZGV2X2xpc3QpCisJCQlkbGlzdF9kZXN0cm95KHZoY2lfZHJpdmVyLT5pZGV2W2ldLmNkZXZfbGlzdCk7CisJfQorCisJZXJyKCJyZWZyZXNoIGRldmljZSBsaXN0Iik7CisJcmV0dXJuIC0xOworfQorCisKK2ludCB1c2JpcF92aGNpX2dldF9mcmVlX3BvcnQodm9pZCkKK3sKKwlmb3IgKGludCBpID0gMDsgaSA8IHZoY2lfZHJpdmVyLT5ucG9ydHM7IGkrKykgeworCQlpZiAodmhjaV9kcml2ZXItPmlkZXZbaV0uc3RhdHVzID09IFZERVZfU1RfTlVMTCkKKwkJCXJldHVybiBpOworCX0KKworCXJldHVybiAtMTsKK30KKworaW50IHVzYmlwX3ZoY2lfYXR0YWNoX2RldmljZTIodWludDhfdCBwb3J0LCBpbnQgc29ja2ZkLCB1aW50MzJfdCBkZXZpZCwKKwkJdWludDMyX3Qgc3BlZWQpIHsKKwlzdHJ1Y3Qgc3lzZnNfYXR0cmlidXRlICphdHRyX2F0dGFjaDsKKwljaGFyIGJ1ZmZbMjAwXTsgLyogd2hhdCBzaXplIHNob3VsZCBiZSA/ICovCisJaW50IHJldDsKKworCWF0dHJfYXR0YWNoID0gc3lzZnNfZ2V0X2RldmljZV9hdHRyKHZoY2lfZHJpdmVyLT5oY19kZXZpY2UsICJhdHRhY2giKTsKKwlpZiAoIWF0dHJfYXR0YWNoKSB7CisJCWVycigiZ2V0IGF0dGFjaCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJc25wcmludGYoYnVmZiwgc2l6ZW9mKGJ1ZmYpLCAiJXUgJXUgJXUgJXUiLAorCQkJcG9ydCwgc29ja2ZkLCBkZXZpZCwgc3BlZWQpOworCWRiZygid3JpdGluZzogJXMiLCBidWZmKTsKKworCXJldCA9IHN5c2ZzX3dyaXRlX2F0dHJpYnV0ZShhdHRyX2F0dGFjaCwgYnVmZiwgc3RybGVuKGJ1ZmYpKTsKKwlpZiAocmV0IDwgMCkgeworCQllcnIoIndyaXRlIHRvIGF0dGFjaCBmYWlsZWQiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWluZm8oInBvcnQgJWQgYXR0YWNoZWQiLCBwb3J0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfZGV2aWQodWludDhfdCBidXNudW0sIHVpbnQ4X3QgZGV2bnVtKQoreworCXJldHVybiAoYnVzbnVtIDw8IDE2KSB8IGRldm51bTsKK30KKworLyogd2lsbCBiZSByZW1vdmVkICovCitpbnQgdXNiaXBfdmhjaV9hdHRhY2hfZGV2aWNlKHVpbnQ4X3QgcG9ydCwgaW50IHNvY2tmZCwgdWludDhfdCBidXNudW0sCisJCXVpbnQ4X3QgZGV2bnVtLCB1aW50MzJfdCBzcGVlZCkKK3sKKwlpbnQgZGV2aWQgPSBnZXRfZGV2aWQoYnVzbnVtLCBkZXZudW0pOworCisJcmV0dXJuIHVzYmlwX3ZoY2lfYXR0YWNoX2RldmljZTIocG9ydCwgc29ja2ZkLCBkZXZpZCwgc3BlZWQpOworfQorCitpbnQgdXNiaXBfdmhjaV9kZXRhY2hfZGV2aWNlKHVpbnQ4X3QgcG9ydCkKK3sKKwlzdHJ1Y3Qgc3lzZnNfYXR0cmlidXRlICAqYXR0cl9kZXRhY2g7CisJY2hhciBidWZmWzIwMF07IC8qIHdoYXQgc2l6ZSBzaG91bGQgYmUgPyAqLworCWludCByZXQ7CisKKwlhdHRyX2RldGFjaCA9IHN5c2ZzX2dldF9kZXZpY2VfYXR0cih2aGNpX2RyaXZlci0+aGNfZGV2aWNlLCAiZGV0YWNoIik7CisJaWYgKCFhdHRyX2RldGFjaCkgeworCQllcnIoImdldCBkZXRhY2giKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXNucHJpbnRmKGJ1ZmYsIHNpemVvZihidWZmKSwgIiV1IiwgcG9ydCk7CisJZGJnKCJ3cml0aW5nIHRvIGRldGFjaCIpOworCWRiZygid3JpdGluZzogJXMiLCBidWZmKTsKKworCXJldCA9IHN5c2ZzX3dyaXRlX2F0dHJpYnV0ZShhdHRyX2RldGFjaCwgYnVmZiwgc3RybGVuKGJ1ZmYpKTsKKwlpZiAocmV0IDwgMCkgeworCQllcnIoIndyaXRlIHRvIGRldGFjaCBmYWlsZWQiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWluZm8oInBvcnQgJWQgZGV0YWNoZWQiLCBwb3J0KTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9saWJzcmMvdmhjaV9kcml2ZXIuaCBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2UvbGlic3JjL3ZoY2lfZHJpdmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FkOGFkNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2UvbGlic3JjL3ZoY2lfZHJpdmVyLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA3IFRha2FoaXJvIEhpcm9mdWNoaQorICovCisKKyNpZm5kZWYgX1ZIQ0lfRFJJVkVSX0gKKyNkZWZpbmUgX1ZIQ0lfRFJJVkVSX0gKKworI2luY2x1ZGUgInVzYmlwLmgiCisKKworCisjZGVmaW5lIE1BWE5QT1JUIDEyOAorCitzdHJ1Y3QgY2xhc3NfZGV2aWNlIHsKKwljaGFyIGNsc3BhdGhbU1lTRlNfUEFUSF9NQVhdOworCWNoYXIgZGV2cGF0aFtTWVNGU19QQVRIX01BWF07Cit9OworCitzdHJ1Y3QgdXNiaXBfaW1wb3J0ZWRfZGV2aWNlIHsKKwl1aW50OF90IHBvcnQ7CisJdWludDMyX3Qgc3RhdHVzOworCisJdWludDMyX3QgZGV2aWQ7CisKKwl1aW50OF90IGJ1c251bTsKKwl1aW50OF90IGRldm51bTsKKworCisJc3RydWN0IGRsaXN0ICpjZGV2X2xpc3Q7CS8qIGxpc3Qgb2YgY2xhc3MgZGV2aWNlICovCisJc3RydWN0IHVzYl9kZXZpY2UgdWRldjsKK307CisKK3N0cnVjdCB1c2JpcF92aGNpX2RyaXZlciB7CisJY2hhciBzeXNmc19tbnRwYXRoW1NZU0ZTX1BBVEhfTUFYXTsKKwlzdHJ1Y3Qgc3lzZnNfZGV2aWNlICpoY19kZXZpY2U7IC8qIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS92aGNpX2hjZCAqLworCisJc3RydWN0IGRsaXN0ICpjZGV2X2xpc3Q7CS8qIGxpc3Qgb2YgY2xhc3MgZGV2aWNlICovCisKKwlpbnQgbnBvcnRzOworCXN0cnVjdCB1c2JpcF9pbXBvcnRlZF9kZXZpY2UgaWRldltNQVhOUE9SVF07Cit9OworCisKK2V4dGVybiBzdHJ1Y3QgdXNiaXBfdmhjaV9kcml2ZXIgKnZoY2lfZHJpdmVyOworCitpbnQgdXNiaXBfdmhjaV9kcml2ZXJfb3Blbih2b2lkKTsKK3ZvaWQgdXNiaXBfdmhjaV9kcml2ZXJfY2xvc2Uodm9pZCk7CisKK2ludCAgdXNiaXBfdmhjaV9yZWZyZXNoX2RldmljZV9saXN0KHZvaWQpOworCisKK2ludCB1c2JpcF92aGNpX2dldF9mcmVlX3BvcnQodm9pZCk7CitpbnQgdXNiaXBfdmhjaV9hdHRhY2hfZGV2aWNlMih1aW50OF90IHBvcnQsIGludCBzb2NrZmQsIHVpbnQzMl90IGRldmlkLAorCQl1aW50MzJfdCBzcGVlZCk7CisKKy8qIHdpbGwgYmUgcmVtb3ZlZCAqLworaW50IHVzYmlwX3ZoY2lfYXR0YWNoX2RldmljZSh1aW50OF90IHBvcnQsIGludCBzb2NrZmQsIHVpbnQ4X3QgYnVzbnVtLAorCQl1aW50OF90IGRldm51bSwgdWludDMyX3Qgc3BlZWQpOworCitpbnQgdXNiaXBfdmhjaV9kZXRhY2hfZGV2aWNlKHVpbnQ4X3QgcG9ydCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2Uvc3JjL01ha2VmaWxlLmFtIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9zcmMvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVhN2FhNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2Uvc3JjL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMTAgQEAKK0FNX0NQUEZMQUdTIDo9IC1JJCh0b3Bfc3JjZGlyKS9saWJzcmMgLURVU0JJRFNfRklMRT0nIkBVU0JJRFNfRElSQC91c2IuaWRzIicKK0FNX0NGTEFHUyAgIDo9IEBFWFRSQV9DRkxBR1NAIEBQQUNLQUdFX0NGTEFHU0AKK0xEQUREICAgICAgIDo9ICQodG9wX3NyY2RpcikvbGlic3JjL2xpYnVzYmlwLmxhIEBQQUNLQUdFX0xJQlNACisKK3NiaW5fUFJPR1JBTVMgOj0gdXNiaXAgdXNiaXBkIHVzYmlwX2JpbmRfZHJpdmVyCisKK3VzYmlwX1NPVVJDRVMgOj0gdXNiaXAuYyB1c2JpcF9uZXR3b3JrLmMgdXNiaXBfbmV0d29yay5oCit1c2JpcGRfU09VUkNFUyA6PSB1c2JpcGQuYyB1c2JpcF9uZXR3b3JrLmMgdXNiaXBfbmV0d29yay5oCit1c2JpcF9iaW5kX2RyaXZlcl9TT1VSQ0VTIDo9IGJpbmQtZHJpdmVyLmMgdXRpbHMuYyB1dGlscy5oIFwKKwkJCSAgICAgdXNiaXBfbmV0d29yay5oIHVzYmlwX25ldHdvcmsuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9zcmMvYmluZC1kcml2ZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2Uvc3JjL2JpbmQtZHJpdmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAxZmZiYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2Uvc3JjL2JpbmQtZHJpdmVyLmMKQEAgLTAsMCArMSw2NDMgQEAKKy8qCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcgVGFrYWhpcm8gSGlyb2Z1Y2hpCisgKi8KKworI2luY2x1ZGUgInV0aWxzLmgiCisKKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNpbmNsdWRlIDxnbGliLmg+CisKKworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBsb25nb3B0c1tdID0geworCXsidXNiaXAiLAlyZXF1aXJlZF9hcmd1bWVudCwJTlVMTCwgJ3UnfSwKKwl7Im90aGVyIiwJcmVxdWlyZWRfYXJndW1lbnQsCU5VTEwsICdvJ30sCisJeyJsaXN0IiwJbm9fYXJndW1lbnQsCQlOVUxMLCAnbCd9LAorCXsibGlzdDIiLAlub19hcmd1bWVudCwJCU5VTEwsICdMJ30sCisJeyJoZWxwIiwJbm9fYXJndW1lbnQsCQlOVUxMLCAnaCd9LAorI2lmIDAKKwl7ImFsbHVzYmlwIiwJbm9fYXJndW1lbnQsCQlOVUxMLCAnYSd9LAorCXsiZXhwb3J0LXRvIiwgICByZXF1aXJlZF9hcmd1bWVudCwJTlVMTCwgJ2UnfSwKKwl7InVuZXhwb3J0IiwgICAgcmVxdWlyZWRfYXJndW1lbnQsCU5VTEwsICd4J30sCisJeyJidXNpZCIsCXJlcXVpcmVkX2FyZ3VtZW50LAlOVUxMLCAnYid9LAorI2VuZGlmCisKKwl7TlVMTCwJCTAsCQkJTlVMTCwgIDB9Cit9OworCitzdGF0aWMgY29uc3QgY2hhciBtYXRjaF9idXNpZF9wYXRoW10gPSAiL3N5cy9idXMvdXNiL2RyaXZlcnMvdXNiaXAvbWF0Y2hfYnVzaWQiOworCisKK3N0YXRpYyB2b2lkIHNob3dfaGVscCh2b2lkKQoreworCXByaW50ZigiVXNhZ2U6IHVzYmlwX2JpbmRfZHJpdmVyIFtPUFRJT05dXG4iKTsKKwlwcmludGYoIkNoYW5nZSBkcml2ZXIgYmluZGluZyBmb3IgVVNCL0lQLlxuIik7CisJcHJpbnRmKCIgIC0tdXNiaXAgYnVzaWQgICAgICAgIG1ha2UgYSBkZXZpY2UgZXhwb3J0YWJsZVxuIik7CisJcHJpbnRmKCIgIC0tb3RoZXIgYnVzaWQgICAgICAgIHVzZSBhIGRldmljZSBieSBhIGxvY2FsIGRyaXZlclxuIik7CisJcHJpbnRmKCIgIC0tbGlzdCAgICAgICAgICAgICAgIHByaW50IHVzYiBkZXZpY2VzIGFuZCB0aGVpciBkcml2ZXJzXG4iKTsKKwlwcmludGYoIiAgLS1saXN0MiAgICAgICAgICAgICAgcHJpbnQgdXNiIGRldmljZXMgYW5kIHRoZWlyIGRyaXZlcnMgaW4gcGFyc2VhYmxlIG1vZGVcbiIpOworI2lmIDAKKwlwcmludGYoIiAgLS1hbGx1c2JpcCAgICAgICAgICAgbWFrZSBhbGwgZGV2aWNlcyBleHBvcnRhYmxlXG4iKTsKKwlwcmludGYoIiAgLS1leHBvcnQtdG8gaG9zdCAgICAgZXhwb3J0IHRoZSBkZXZpY2UgdG8gJ2hvc3QnXG4iKTsKKwlwcmludGYoIiAgLS11bmV4cG9ydCBob3N0ICAgICAgdW5leHBvcnQgYSBkZXZpY2UgcHJldmlvdXNseSBleHBvcnRlZCB0byAnaG9zdCdcbiIpOworCXByaW50ZigiICAtLWJ1c2lkIGJ1c2lkICAgICAgICB0aGUgYnVzaWQgdXNlZCBmb3IgLS1leHBvcnQtdG9cbiIpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQgbW9kaWZ5X21hdGNoX2J1c2lkKGNoYXIgKmJ1c2lkLCBpbnQgYWRkKQoreworCWludCBmZDsKKwlpbnQgcmV0OworCWNoYXIgYnVmZltCVVNfSURfU0laRSArIDRdOworCisJLyogQlVTX0lTX1NJWkUgaW5jbHVkZXMgTlVMTCB0ZXJtaW5hdGlvbj8gKi8KKwlpZiAoc3RybmxlbihidXNpZCwgQlVTX0lEX1NJWkUpID4gQlVTX0lEX1NJWkUgLSAxKSB7CisJCWdfd2FybmluZygidG9vIGxvbmcgYnVzaWQiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWZkID0gb3BlbihtYXRjaF9idXNpZF9wYXRoLCBPX1dST05MWSk7CisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKGFkZCkKKwkJc25wcmludGYoYnVmZiwgQlVTX0lEX1NJWkUgKyA0LCAiYWRkICVzIiwgYnVzaWQpOworCWVsc2UKKwkJc25wcmludGYoYnVmZiwgQlVTX0lEX1NJWkUgKyA0LCAiZGVsICVzIiwgYnVzaWQpOworCisJZ19kZWJ1Zygid3JpdGUgXCIlc1wiIHRvICVzIiwgYnVmZiwgbWF0Y2hfYnVzaWRfcGF0aCk7CisKKwlyZXQgPSB3cml0ZShmZCwgYnVmZiwgc2l6ZW9mKGJ1ZmYpKTsKKwlpZiAocmV0IDwgMCkgeworCQljbG9zZShmZCk7CisJCXJldHVybiAtMTsKKwl9CisKKwljbG9zZShmZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgdW5iaW5kX3BhdGhfZm9ybWF0W10gPSAiL3N5cy9idXMvdXNiL2RldmljZXMvJXMvZHJpdmVyL3VuYmluZCI7CisKKy8qIGJ1Z2d5IGRyaXZlciBtYXkgY2F1c2UgZGVhZCBsb2NrICovCitzdGF0aWMgaW50IHVuYmluZF9pbnRlcmZhY2VfYnVzaWQoY2hhciAqYnVzaWQpCit7CisJY2hhciB1bmJpbmRfcGF0aFtQQVRIX01BWF07CisJaW50IGZkOworCWludCByZXQ7CisKKwlzbnByaW50Zih1bmJpbmRfcGF0aCwgc2l6ZW9mKHVuYmluZF9wYXRoKSwgdW5iaW5kX3BhdGhfZm9ybWF0LCBidXNpZCk7CisKKwlmZCA9IG9wZW4odW5iaW5kX3BhdGgsIE9fV1JPTkxZKTsKKwlpZiAoZmQgPCAwKSB7CisJCWdfd2FybmluZygib3BlbmluZyB1bmJpbmRfcGF0aCBmYWlsZWQ6ICVkIiwgZmQpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0ID0gd3JpdGUoZmQsIGJ1c2lkLCBzdHJubGVuKGJ1c2lkLCBCVVNfSURfU0laRSkpOworCWlmIChyZXQgPCAwKSB7CisJCWdfd2FybmluZygid3JpdGUgdG8gdW5iaW5kX3BhdGggZmFpbGVkOiAlZCIsIHJldCk7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWNsb3NlKGZkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVuYmluZF9pbnRlcmZhY2UoY2hhciAqYnVzaWQsIGludCBjb25maWd2YWx1ZSwgaW50IGludGVyZmFjZSkKK3sKKwljaGFyIGluZl9idXNpZFtCVVNfSURfU0laRV07CisJZ19kZWJ1ZygidW5iaW5kaW5nIGludGVyZmFjZSIpOworCisJc25wcmludGYoaW5mX2J1c2lkLCBCVVNfSURfU0laRSwgIiVzOiVkLiVkIiwgYnVzaWQsIGNvbmZpZ3ZhbHVlLCBpbnRlcmZhY2UpOworCisJcmV0dXJuIHVuYmluZF9pbnRlcmZhY2VfYnVzaWQoaW5mX2J1c2lkKTsKK30KKworCitzdGF0aWMgY29uc3QgY2hhciBiaW5kX3BhdGhfZm9ybWF0W10gPSAiL3N5cy9idXMvdXNiL2RyaXZlcnMvJXMvYmluZCI7CisKK3N0YXRpYyBpbnQgYmluZF9pbnRlcmZhY2VfYnVzaWQoY2hhciAqYnVzaWQsIGNoYXIgKmRyaXZlcikKK3sKKwljaGFyIGJpbmRfcGF0aFtQQVRIX01BWF07CisJaW50IGZkOworCWludCByZXQ7CisKKwlzbnByaW50ZihiaW5kX3BhdGgsIHNpemVvZihiaW5kX3BhdGgpLCBiaW5kX3BhdGhfZm9ybWF0LCBkcml2ZXIpOworCisJZmQgPSBvcGVuKGJpbmRfcGF0aCwgT19XUk9OTFkpOworCWlmIChmZCA8IDApCisJCXJldHVybiAtMTsKKworCXJldCA9IHdyaXRlKGZkLCBidXNpZCwgc3RybmxlbihidXNpZCwgQlVTX0lEX1NJWkUpKTsKKwlpZiAocmV0IDwgMCkgeworCQljbG9zZShmZCk7CisJCXJldHVybiAtMTsKKwl9CisKKwljbG9zZShmZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiaW5kX2ludGVyZmFjZShjaGFyICpidXNpZCwgaW50IGNvbmZpZ3ZhbHVlLCBpbnQgaW50ZXJmYWNlLCBjaGFyICpkcml2ZXIpCit7CisJY2hhciBpbmZfYnVzaWRbQlVTX0lEX1NJWkVdOworCisJc25wcmludGYoaW5mX2J1c2lkLCBCVVNfSURfU0laRSwgIiVzOiVkLiVkIiwgYnVzaWQsIGNvbmZpZ3ZhbHVlLCBpbnRlcmZhY2UpOworCisJcmV0dXJuIGJpbmRfaW50ZXJmYWNlX2J1c2lkKGluZl9idXNpZCwgZHJpdmVyKTsKK30KKworc3RhdGljIGludCB1bmJpbmQoY2hhciAqYnVzaWQpCit7CisJaW50IGNvbmZpZ3ZhbHVlID0gMDsKKwlpbnQgbmludGVyZmFjZSA9IDA7CisJaW50IGRldmNsYXNzID0gMDsKKwlpbnQgaTsKKwlpbnQgZmFpbGVkID0gMDsKKworCWNvbmZpZ3ZhbHVlID0gcmVhZF9iQ29uZmlndXJhdGlvblZhbHVlKGJ1c2lkKTsKKwluaW50ZXJmYWNlICA9IHJlYWRfYk51bUludGVyZmFjZXMoYnVzaWQpOworCWRldmNsYXNzICA9IHJlYWRfYkRldmljZUNsYXNzKGJ1c2lkKTsKKworCWlmIChjb25maWd2YWx1ZSA8IDAgfHwgbmludGVyZmFjZSA8IDAgfHwgZGV2Y2xhc3MgPCAwKSB7CisJCWdfd2FybmluZygicmVhZCBjb25maWcgYW5kIG5pbmYgdmFsdWUsIHJlbW92ZWQ/Iik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoZGV2Y2xhc3MgPT0gMHgwOSkgeworCQlnX21lc3NhZ2UoInNraXAgdW5iaW5kaW5nIG9mIGh1YiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG5pbnRlcmZhY2U7IGkrKykgeworCQljaGFyIGRyaXZlcltQQVRIX01BWF07CisJCWludCByZXQ7CisKKwkJYnplcm8oJmRyaXZlciwgc2l6ZW9mKGRyaXZlcikpOworCisJCWdldGRyaXZlcihidXNpZCwgY29uZmlndmFsdWUsIGksIGRyaXZlciwgUEFUSF9NQVgtMSk7CisKKwkJZ19kZWJ1ZygiICVzOiVkLiVkCS0+ICVzICIsIGJ1c2lkLCBjb25maWd2YWx1ZSwgaSwgZHJpdmVyKTsKKworCQlpZiAoIXN0cm5jbXAoIm5vbmUiLCBkcml2ZXIsIFBBVEhfTUFYKSkKKwkJCWNvbnRpbnVlOyAvKiB1bmJvdW5kIGludGVyZmFjZSAqLworCisjaWYgMAorCQlpZiAoIXN0cm5jbXAoInVzYmlwIiwgZHJpdmVyLCBQQVRIX01BWCkpCisJCQljb250aW51ZTsgLyogYWxyZWFkeSBib3VuZCB0byB1c2JpcCAqLworI2VuZGlmCisKKwkJLyogdW5iaW5kaW5nICovCisJCXJldCA9IHVuYmluZF9pbnRlcmZhY2UoYnVzaWQsIGNvbmZpZ3ZhbHVlLCBpKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWdfd2FybmluZygidW5iaW5kIGRyaXZlciBhdCAlczolZC4lZCBmYWlsZWQiLAorCQkJCQlidXNpZCwgY29uZmlndmFsdWUsIGkpOworCQkJZmFpbGVkID0gMTsKKwkJfQorCX0KKworCWlmIChmYWlsZWQpCisJCXJldHVybiAtMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCisvKiBjYWxsIGF0IHVuYm91bmQgc3RhdGUgKi8KK3N0YXRpYyBpbnQgYmluZF90b191c2JpcChjaGFyICpidXNpZCkKK3sKKwlpbnQgY29uZmlndmFsdWUgPSAwOworCWludCBuaW50ZXJmYWNlID0gMDsKKwlpbnQgaTsKKwlpbnQgZmFpbGVkID0gMDsKKworCWNvbmZpZ3ZhbHVlID0gcmVhZF9iQ29uZmlndXJhdGlvblZhbHVlKGJ1c2lkKTsKKwluaW50ZXJmYWNlICA9IHJlYWRfYk51bUludGVyZmFjZXMoYnVzaWQpOworCisJaWYgKGNvbmZpZ3ZhbHVlIDwgMCB8fCBuaW50ZXJmYWNlIDwgMCkgeworCQlnX3dhcm5pbmcoInJlYWQgY29uZmlnIGFuZCBuaW5mIHZhbHVlLCByZW1vdmVkPyIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG5pbnRlcmZhY2U7IGkrKykgeworCQlpbnQgcmV0OworCisJCXJldCA9IGJpbmRfaW50ZXJmYWNlKGJ1c2lkLCBjb25maWd2YWx1ZSwgaSwgInVzYmlwIik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlnX3dhcm5pbmcoImJpbmQgdXNiaXAgYXQgJXM6JWQuJWQsIGZhaWxlZCIsCisJCQkJCWJ1c2lkLCBjb25maWd2YWx1ZSwgaSk7CisJCQlmYWlsZWQgPSAxOworCQkJLyogbmVlZCB0byBjb250aW5lIGJpbmRpbmcgYXQgb3RoZXIgaW50ZXJmYWNlcyAqLworCQl9CisJfQorCisJaWYgKGZhaWxlZCkKKwkJcmV0dXJuIC0xOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB1c2VfZGV2aWNlX2J5X3VzYmlwKGNoYXIgKmJ1c2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSB1bmJpbmQoYnVzaWQpOworCWlmIChyZXQgPCAwKSB7CisJCWdfd2FybmluZygidW5iaW5kIGRyaXZlcnMgb2YgJXMsIGZhaWxlZCIsIGJ1c2lkKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldCA9IG1vZGlmeV9tYXRjaF9idXNpZChidXNpZCwgMSk7CisJaWYgKHJldCA8IDApIHsKKwkJZ193YXJuaW5nKCJhZGQgJXMgdG8gbWF0Y2hfYnVzaWQsIGZhaWxlZCIsIGJ1c2lkKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldCA9IGJpbmRfdG9fdXNiaXAoYnVzaWQpOworCWlmIChyZXQgPCAwKSB7CisJCWdfd2FybmluZygiYmluZCB1c2JpcCB0byAlcywgZmFpbGVkIiwgYnVzaWQpOworCQltb2RpZnlfbWF0Y2hfYnVzaWQoYnVzaWQsIDApOworCQlyZXR1cm4gLTE7CisJfQorCisJZ19tZXNzYWdlKCJiaW5kICVzIHRvIHVzYmlwLCBjb21wbGV0ZSEiLCBidXNpZCk7CisKKwlyZXR1cm4gMDsKK30KKworCisKK3N0YXRpYyBpbnQgdXNlX2RldmljZV9ieV9vdGhlcihjaGFyICpidXNpZCkKK3sKKwlpbnQgcmV0OworCWludCBjb25maWc7CisKKwkvKiByZWFkIGFuZCB3cml0ZSB0aGUgc2FtZSBjb25maWcgdmFsdWUgdG8ga2ljayBwcm9iaW5nICovCisJY29uZmlnID0gcmVhZF9iQ29uZmlndXJhdGlvblZhbHVlKGJ1c2lkKTsKKwlpZiAoY29uZmlnIDwgMCkgeworCQlnX3dhcm5pbmcoInJlYWQgYkNvbmZpZ3VyYXRpb25WYWx1ZSBvZiAlcywgZmFpbGVkIiwgYnVzaWQpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0ID0gbW9kaWZ5X21hdGNoX2J1c2lkKGJ1c2lkLCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlnX3dhcm5pbmcoImRlbCAlcyB0byBtYXRjaF9idXNpZCwgZmFpbGVkIiwgYnVzaWQpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0ID0gd3JpdGVfYkNvbmZpZ3VyYXRpb25WYWx1ZShidXNpZCwgY29uZmlnKTsKKwlpZiAocmV0IDwgMCkgeworCQlnX3dhcm5pbmcoInJlYWQgYkNvbmZpZ3VyYXRpb25WYWx1ZSBvZiAlcywgZmFpbGVkIiwgYnVzaWQpOworCQlyZXR1cm4gLTE7CisJfQorCisJZ19tZXNzYWdlKCJiaW5kICVzIHRvIG90aGVyIGRyaXZlcnMgdGhhbiB1c2JpcCwgY29tcGxldGUhIiwgYnVzaWQpOworCisJcmV0dXJuIDA7Cit9CisKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHJlZ2V4Lmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKworCitzdGF0aWMgaW50IGlzX3VzYl9kZXZpY2UoY2hhciAqYnVzaWQpCit7CisJaW50IHJldDsKKworCXJlZ2V4X3QgcmVnZXg7CisJcmVnbWF0Y2hfdCBwbWF0Y2hbMV07CisKKwlyZXQgPSByZWdjb21wKCZyZWdleCwgIl5bMC05XSstWzAtOV0rKFxcLlswLTldKykqJCIsIFJFR19OT1NVQnxSRUdfRVhURU5ERUQpOworCWlmIChyZXQgPCAwKQorCQlnX2Vycm9yKCJyZWdjb21wOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKworCXJldCA9IHJlZ2V4ZWMoJnJlZ2V4LCBidXNpZCwgMCwgcG1hdGNoLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gMDsJLyogbm90IG1hdGNoZWQgKi8KKworCXJldHVybiAxOworfQorCisKKyNpbmNsdWRlIDxkaXJlbnQuaD4KK3N0YXRpYyBpbnQgc2hvd19kZXZpY2VzKHZvaWQpCit7CisJRElSICpkaXI7CisKKwlkaXIgPSBvcGVuZGlyKCIvc3lzL2J1cy91c2IvZGV2aWNlcy8iKTsKKwlpZiAoIWRpcikKKwkJZ19lcnJvcigib3BlbmRpcjogJXMiLCBzdHJlcnJvcihlcnJubykpOworCisJcHJpbnRmKCJMaXN0IFVTQiBkZXZpY2VzXG4iKTsKKwlmb3IgKDs7KSB7CisJCXN0cnVjdCBkaXJlbnQgKmRpcmVudDsKKwkJY2hhciAqYnVzaWQ7CisKKwkJZGlyZW50ID0gcmVhZGRpcihkaXIpOworCQlpZiAoIWRpcmVudCkKKwkJCWJyZWFrOworCisJCWJ1c2lkID0gZGlyZW50LT5kX25hbWU7CisKKwkJaWYgKGlzX3VzYl9kZXZpY2UoYnVzaWQpKSB7CisJCQljaGFyIG5hbWVbMTAwXSA9IHsnXDAnfTsKKwkJCWNoYXIgZHJpdmVyWzEwMF0gPSAgeydcMCd9OworCQkJaW50IGNvbmYsIG5pbmYgPSAwOworCQkJaW50IGk7CisKKwkJCWNvbmYgPSByZWFkX2JDb25maWd1cmF0aW9uVmFsdWUoYnVzaWQpOworCQkJbmluZiA9IHJlYWRfYk51bUludGVyZmFjZXMoYnVzaWQpOworCisJCQlnZXRkZXZpY2VuYW1lKGJ1c2lkLCBuYW1lLCBzaXplb2YobmFtZSkpOworCisJCQlwcmludGYoIiAtIGJ1c2lkICVzICglcylcbiIsIGJ1c2lkLCBuYW1lKTsKKworCQkJZm9yIChpID0gMDsgaSA8IG5pbmY7IGkrKykgeworCQkJCWdldGRyaXZlcihidXNpZCwgY29uZiwgaSwgZHJpdmVyLCBzaXplb2YoZHJpdmVyKSk7CisJCQkJcHJpbnRmKCIgICAgICAgICAlczolZC4lZCAtPiAlc1xuIiwgYnVzaWQsIGNvbmYsIGksIGRyaXZlcik7CisJCQl9CisJCQlwcmludGYoIlxuIik7CisJCX0KKwl9CisKKwljbG9zZWRpcihkaXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19kZXZpY2VzMih2b2lkKQoreworCURJUiAqZGlyOworCisJZGlyID0gb3BlbmRpcigiL3N5cy9idXMvdXNiL2RldmljZXMvIik7CisJaWYgKCFkaXIpCisJCWdfZXJyb3IoIm9wZW5kaXI6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKworCWZvciAoOzspIHsKKwkJc3RydWN0IGRpcmVudCAqZGlyZW50OworCQljaGFyICpidXNpZDsKKworCQlkaXJlbnQgPSByZWFkZGlyKGRpcik7CisJCWlmICghZGlyZW50KQorCQkJYnJlYWs7CisKKwkJYnVzaWQgPSBkaXJlbnQtPmRfbmFtZTsKKworCQlpZiAoaXNfdXNiX2RldmljZShidXNpZCkpIHsKKwkJCWNoYXIgbmFtZVsxMDBdID0geydcMCd9OworCQkJY2hhciBkcml2ZXJbMTAwXSA9ICB7J1wwJ307CisJCQlpbnQgY29uZiwgbmluZiA9IDA7CisJCQlpbnQgaTsKKworCQkJY29uZiA9IHJlYWRfYkNvbmZpZ3VyYXRpb25WYWx1ZShidXNpZCk7CisJCQluaW5mID0gcmVhZF9iTnVtSW50ZXJmYWNlcyhidXNpZCk7CisKKwkJCWdldGRldmljZW5hbWUoYnVzaWQsIG5hbWUsIHNpemVvZihuYW1lKSk7CisKKwkJCXByaW50ZigiYnVzaWQ9JXMjdXNiaWQ9JXMjIiwgYnVzaWQsIG5hbWUpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgbmluZjsgaSsrKSB7CisJCQkJZ2V0ZHJpdmVyKGJ1c2lkLCBjb25mLCBpLCBkcml2ZXIsIHNpemVvZihkcml2ZXIpKTsKKwkJCQlwcmludGYoIiVzOiVkLiVkPSVzIyIsIGJ1c2lkLCBjb25mLCBpLCBkcml2ZXIpOworCQkJfQorCQkJcHJpbnRmKCJcbiIpOworCQl9CisJfQorCisJY2xvc2VkaXIoZGlyKTsKKworCXJldHVybiAwOworfQorCisKKyNpZiAwCitzdGF0aWMgaW50IGV4cG9ydF90byhjaGFyICpob3N0LCBjaGFyICpidXNpZCkgeworCisJaW50IHJldDsKKworCWlmKCBob3N0ID09IE5VTEwgKSB7CisJCXByaW50ZiggIm5vIGhvc3QgZ2l2ZW5cblxuIik7CisJCXNob3dfaGVscCgpOworCQlyZXR1cm4gLTE7CisJfQorCWlmKCBidXNpZCA9PSBOVUxMICkgeworCQkvKiBYWFggcHJpbnQgZGV2aWNlIGxpc3QgYW5kIGFzayBmb3IgYnVzbnVtYmVyLCBpZiBub25lIGlzCisJCSAqIGdpdmVuICovCisJCXByaW50ZiggIm5vIGJ1c2lkIGdpdmVuLCB1c2UgLS1idXNpZCBzd2l0Y2hcblxuIik7CisJCXNob3dfaGVscCgpOworCQlyZXR1cm4gLTE7CisJfQorCisKKwlyZXQgPSB1c2VfZGV2aWNlX2J5X3VzYmlwKGJ1c2lkKTsKKwlpZiggcmV0ICE9IDAgKSB7CisJCXByaW50ZiggImNvdWxkIG5vdCBiaW5kIGRyaXZlciB0byB1c2JpcFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlwcmludGYoICJERUJVRzogZXhwb3J0aW5nIGRldmljZSAnJXMnIHRvICclcydcbiIsIGJ1c2lkLCBob3N0ICk7CisJcmV0ID0gZXhwb3J0X2J1c2lkX3RvX2hvc3QoaG9zdCwgYnVzaWQpOyAvKiB1c2JpcF9leHBvcnQuW2NoXSAqLworCWlmKCByZXQgIT0gMCApIHsKKwkJcHJpbnRmKCAiY291bGQgbm90IGV4cG9ydCBkZXZpY2UgdG8gaG9zdFxuIiApOworCQlwcmludGYoICIgICBob3N0OiAlcywgZGV2aWNlOiAlc1xuIiwgaG9zdCwgYnVzaWQgKTsKKwkJdXNlX2RldmljZV9ieV9vdGhlcihidXNpZCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1bmV4cG9ydF9mcm9tKGNoYXIgKmhvc3QsIGNoYXIgKmJ1c2lkKSB7CisKKwlpbnQgcmV0OworCisJaWYgKCFob3N0IHx8ICFidXNpZCkKKwkJZ19lcnJvcigibm8gaG9zdCBvciBubyBidXNpZFxuIik7CisKKwlnX21lc3NhZ2UoInVuZXhwb3J0X2Zyb206IGhvc3Q6ICclcycsIGJ1c2lkOiAnJXMnIiwgaG9zdCwgYnVzaWQpOworCisJcmV0ID0gdW5leHBvcnRfYnVzaWRfZnJvbV9ob3N0KGhvc3QsIGJ1c2lkKTsgLyogdXNiaXBfZXhwb3J0LltjaF0gKi8KKwlpZiggcmV0ICE9IDAgKSB7CisJCWVyciggImNvdWxkIG5vdCB1bmV4cG9ydCBkZXZpY2UgZnJvbSBob3N0XG4iICk7CisJCWVyciggIiAgIGhvc3Q6ICVzLCBkZXZpY2U6ICVzXG4iLCBob3N0LCBidXNpZCApOworCX0KKworCXJldCA9IHVzZV9kZXZpY2VfYnlfb3RoZXIoYnVzaWQpOworCWlmIChyZXQgPCAwKQorCQlnX2Vycm9yKCJjb3VsZCBub3QgdW5iaW5kIGRldmljZSBmcm9tIHVzYmlwXG4iKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgYWxsdXNiaXAodm9pZCkKK3sKKwlESVIgKmRpcjsKKworCWRpciA9IG9wZW5kaXIoIi9zeXMvYnVzL3VzYi9kZXZpY2VzLyIpOworCWlmICghZGlyKQorCQlnX2Vycm9yKCJvcGVuZGlyOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisKKwlmb3IgKDs7KSB7CisJCXN0cnVjdCBkaXJlbnQgKmRpcmVudDsKKwkJY2hhciAqYnVzaWQ7CisKKwkJZGlyZW50ID0gcmVhZGRpcihkaXIpOworCQlpZiAoIWRpcmVudCkKKwkJCWJyZWFrOworCisJCWJ1c2lkID0gZGlyZW50LT5kX25hbWU7CisKKwkJaWYgKCFpc191c2JfZGV2aWNlKGJ1c2lkKSkKKwkJCWNvbnRpbnVlOworCisJCXsKKwkJCWNoYXIgbmFtZVtQQVRIX01BWF07CisJCQlpbnQgY29uZiwgbmluZiA9IDA7CisJCQlpbnQgaTsKKwkJCWludCBiZV9sb2NhbCA9IDA7CisKKwkJCWNvbmYgPSByZWFkX2JDb25maWd1cmF0aW9uVmFsdWUoYnVzaWQpOworCQkJbmluZiA9IHJlYWRfYk51bUludGVyZmFjZXMoYnVzaWQpOworCisJCQlnZXRkZXZpY2VuYW1lKGJ1c2lkLCBuYW1lLCBzaXplb2YobmFtZSkpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgbmluZjsgaSsrKSB7CisJCQkJY2hhciBkcml2ZXJbUEFUSF9NQVhdOworCisJCQkJZ2V0ZHJpdmVyKGJ1c2lkLCBjb25mLCBpLCBkcml2ZXIsIHNpemVvZihkcml2ZXIpKTsKKyNpZiAwCisJCQkJaWYgKHN0cm5jbXAoZHJpdmVyLCAidXNiaGlkIiwgNikgPT0gMCB8fCBzdHJuY21wKGRyaXZlciwgInVzYi1zdG9yYWdlIiwgMTEpID09IDApIHsKKwkJCQkJYmVfbG9jYWwgPSAxOworCQkJCQlicmVhazsKKwkJCQl9CisjZW5kaWYKKwkJCX0KKworCQkJaWYgKGJlX2xvY2FsID09IDApCisJCQkJdXNlX2RldmljZV9ieV91c2JpcChidXNpZCk7CisJCX0KKwl9CisKKwljbG9zZWRpcihkaXIpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWNoYXIgKmJ1c2lkID0gTlVMTDsKKwljaGFyICpyZW1vdGVfaG9zdCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSA9IE5VTEw7CisKKwllbnVtIHsKKwkJY21kX3Vua25vd24gPSAwLAorCQljbWRfdXNlX2J5X3VzYmlwLAorCQljbWRfdXNlX2J5X290aGVyLAorCQljbWRfbGlzdCwKKwkJY21kX2xpc3QyLAorCQljbWRfYWxsdXNiaXAsCisJCWNtZF9leHBvcnRfdG8sCisJCWNtZF91bmV4cG9ydCwKKwkJY21kX2hlbHAsCisJfSBjbWQgPSBjbWRfdW5rbm93bjsKKworCWlmIChnZXRldWlkKCkgIT0gMCkKKwkJZ193YXJuaW5nKCJydW5uaW5nIG5vbi1yb290PyIpOworCisJZm9yICg7OykgeworCQlpbnQgYzsKKwkJaW50IGluZGV4ID0gMDsKKworCQljID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgInU6bzpobExhZTp4OmI6IiwgbG9uZ29wdHMsICZpbmRleCk7CisJCWlmIChjID09IC0xKQorCQkJYnJlYWs7CisKKwkJc3dpdGNoIChjKSB7CisJCQljYXNlICd1JzoKKwkJCQljbWQgPSBjbWRfdXNlX2J5X3VzYmlwOworCQkJCWJ1c2lkID0gb3B0YXJnOworCQkJCWJyZWFrOworCQkJY2FzZSAnbycgOgorCQkJCWNtZCA9IGNtZF91c2VfYnlfb3RoZXI7CisJCQkJYnVzaWQgPSBvcHRhcmc7CisJCQkJYnJlYWs7CisJCQljYXNlICdsJyA6CisJCQkJY21kID0gY21kX2xpc3Q7CisJCQkJYnJlYWs7CisJCQljYXNlICdMJyA6CisJCQkJY21kID0gY21kX2xpc3QyOworCQkJCWJyZWFrOworCQkJY2FzZSAnYScgOgorCQkJCWNtZCA9IGNtZF9hbGx1c2JpcDsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2InOgorCQkJCWJ1c2lkID0gb3B0YXJnOworCQkJCWJyZWFrOworCQkJY2FzZSAnZSc6CisJCQkJY21kID0gY21kX2V4cG9ydF90bzsKKwkJCQlyZW1vdGVfaG9zdCA9IG9wdGFyZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3gnOgorCQkJCWNtZCA9IGNtZF91bmV4cG9ydDsKKwkJCQlyZW1vdGVfaG9zdCA9IG9wdGFyZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2gnOiAvKiBmYWxsdGhyb3VnaCAqLworCQkJY2FzZSAnPyc6CisJCQkJY21kID0gY21kX2hlbHA7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWdfZXJyb3IoImdldG9wdCIpOworCQl9CisKKwkJLy9pZiAoY21kKQorCQkvLwlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGNtZCkgeworCQljYXNlIGNtZF91c2VfYnlfdXNiaXA6CisJCQl1c2VfZGV2aWNlX2J5X3VzYmlwKGJ1c2lkKTsKKwkJCWJyZWFrOworCQljYXNlIGNtZF91c2VfYnlfb3RoZXI6CisJCQl1c2VfZGV2aWNlX2J5X290aGVyKGJ1c2lkKTsKKwkJCWJyZWFrOworCQljYXNlIGNtZF9saXN0OgorCQkJc2hvd19kZXZpY2VzKCk7CisJCQlicmVhazsKKwkJY2FzZSBjbWRfbGlzdDI6CisJCQlzaG93X2RldmljZXMyKCk7CisJCQlicmVhazsKKyNpZiAwCisJCWNhc2UgY21kX2FsbHVzYmlwOgorCQkJYWxsdXNiaXAoKTsKKwkJCWJyZWFrOworCQljYXNlIGNtZF9leHBvcnRfdG86CisJCQlleHBvcnRfdG8ocmVtb3RlX2hvc3QsIGJ1c2lkKTsKKwkJCWJyZWFrOworCQljYXNlIGNtZF91bmV4cG9ydDoKKwkJCXVuZXhwb3J0X2Zyb20ocmVtb3RlX2hvc3QsIGJ1c2lkKTsKKwkJCWJyZWFrOworI2VuZGlmCisJCWNhc2UgY21kX2hlbHA6IC8qIGZhbGx0aHJvdWdoICovCisJCWNhc2UgY21kX3Vua25vd246CisJCQlzaG93X2hlbHAoKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ19lcnJvcigiTk9UIFJFQUNIRUQiKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2Uvc3JjL3VzYmlwLmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL3NyYy91c2JpcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYTU2MjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL3NyYy91c2JpcC5jCkBAIC0wLDAgKzEsNzIzIEBACisvKgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA3IFRha2FoaXJvIEhpcm9mdWNoaQorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiLi4vY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgInVzYmlwLmgiCisjaW5jbHVkZSAidXNiaXBfbmV0d29yay5oIgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKworc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdID0gUEFDS0FHRV9TVFJJTkc7CisKKworLyogL3N5cy9kZXZpY2VzL3BsYXRmb3JtL3ZoY2lfaGNkL3VzYjYvNi0xLzYtMToxLjEgIC0+IDEgKi8KK3N0YXRpYyBpbnQgZ2V0X2ludGVyZmFjZV9udW1iZXIoY2hhciAqcGF0aCkKK3sKKwljaGFyICpjOworCisJYyA9IHN0cnN0cihwYXRoLCB2aGNpX2RyaXZlci0+aGNfZGV2aWNlLT5idXNfaWQpOworCWlmICghYykKKwkJcmV0dXJuIC0xOwkvKiBoYyBleGlzdD8gKi8KKwljKys7CisJLyogLT4gdXNiNi82LTEvNi0xOjEuMSAqLworCisJYyA9IHN0cmNocihjLCAnLycpOworCWlmICghYykKKwkJcmV0dXJuIC0xOwkvKiBoYyBleGlzdD8gKi8KKwljKys7CisJLyogLT4gNi0xLzYtMToxLjEgKi8KKworCWMgPSBzdHJjaHIoYywgJy8nKTsKKwlpZiAoIWMpCisJCXJldHVybiAtMTsJLyogbm8gaW50ZXJmYWNlIHBhdGggKi8KKwljKys7CisJLyogLT4gNi0xOjEuMSAqLworCisJYyA9IHN0cmNocihjLCAnOicpOworCWlmICghYykKKwkJcmV0dXJuIC0xOwkvKiBubyBjb25maWd1cmF0aW9uPyAqLworCWMrKzsKKwkvKiAtPiAxLjEgKi8KKworCWMgPSBzdHJjaHIoYywgJy4nKTsKKwlpZiAoIWMpCisJCXJldHVybiAtMTsJLyogbm8gaW50ZXJmYWNlPyAqLworCWMrKzsKKwkvKiAtPiAxICovCisKKworCXJldHVybiBhdG9pKGMpOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZnNfZGV2aWNlICpvcGVuX3VzYl9pbnRlcmZhY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGludCBpKQoreworCXN0cnVjdCBzeXNmc19kZXZpY2UgKnN1aW5mOworCWNoYXIgYnVzaWRbU1lTRlNfQlVTX0lEX1NJWkVdOworCisJc25wcmludGYoYnVzaWQsIFNZU0ZTX0JVU19JRF9TSVpFLCAiJXM6JWQuJWQiLAorCQkJdWRldi0+YnVzaWQsIHVkZXYtPmJDb25maWd1cmF0aW9uVmFsdWUsIGkpOworCisJc3VpbmYgPSBzeXNmc19vcGVuX2RldmljZSgidXNiIiwgYnVzaWQpOworCWlmICghc3VpbmYpCisJCWVycigic3lzZnNfb3Blbl9kZXZpY2UgJXMiLCBidXNpZCk7CisKKwlyZXR1cm4gc3VpbmY7Cit9CisKKworI2RlZmluZSBNQVhfQlVGRiAxMDAKK3N0YXRpYyBpbnQgcmVjb3JkX2Nvbm5lY3Rpb24oY2hhciAqaG9zdCwgY2hhciAqcG9ydCwgY2hhciAqYnVzaWQsIGludCByaHBvcnQpCit7CisJaW50IGZkOworCWNoYXIgcGF0aFtQQVRIX01BWCsxXTsKKwljaGFyIGJ1ZmZbTUFYX0JVRkYrMV07CisJaW50IHJldDsKKworCW1rZGlyKFZIQ0lfU1RBVEVfUEFUSCwgMDcwMCk7CisKKwlzbnByaW50ZihwYXRoLCBQQVRIX01BWCwgVkhDSV9TVEFURV9QQVRIIi9wb3J0JWQiLCByaHBvcnQpOworCisJZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZfE9fQ1JFQVR8T19UUlVOQywgU19JUldYVSk7CisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIC0xOworCisJc25wcmludGYoYnVmZiwgTUFYX0JVRkYsICIlcyAlcyAlc1xuIiwKKwkJCWhvc3QsIHBvcnQsIGJ1c2lkKTsKKworCXJldCA9IHdyaXRlKGZkLCBidWZmLCBzdHJsZW4oYnVmZikpOworCWlmIChyZXQgIT0gKHNzaXplX3QpIHN0cmxlbihidWZmKSkgeworCQljbG9zZShmZCk7CisJCXJldHVybiAtMTsKKwl9CisKKwljbG9zZShmZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWFkX3JlY29yZChpbnQgcmhwb3J0LCBjaGFyICpob3N0LCBjaGFyICpwb3J0LCBjaGFyICpidXNpZCkKK3sKKwlGSUxFICpmaWxlOworCWNoYXIgcGF0aFtQQVRIX01BWCsxXTsKKworCXNucHJpbnRmKHBhdGgsIFBBVEhfTUFYLCBWSENJX1NUQVRFX1BBVEgiL3BvcnQlZCIsIHJocG9ydCk7CisKKwlmaWxlID0gZm9wZW4ocGF0aCwgInIiKTsKKwlpZiAoIWZpbGUpIHsKKwkJZXJyKCJmb3BlbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGZzY2FuZihmaWxlLCAiJXMgJXMgJXNcbiIsIGhvc3QsIHBvcnQsIGJ1c2lkKSAhPSAzKSB7CisJCWVycigiZnNjYW5mIik7CisJCWZjbG9zZShmaWxlKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWZjbG9zZShmaWxlKTsKKworCXJldHVybiAwOworfQorCisKK2ludCB1c2JpcF92aGNpX2ltcG9ydGVkX2RldmljZV9kdW1wKHN0cnVjdCB1c2JpcF9pbXBvcnRlZF9kZXZpY2UgKmlkZXYpCit7CisJY2hhciBwcm9kdWN0X25hbWVbMTAwXTsKKwljaGFyIGhvc3RbTklfTUFYSE9TVF0gPSAidW5rbm93biBob3N0IjsKKwljaGFyIHNlcnZbTklfTUFYU0VSVl0gPSAidW5rbm93biBwb3J0IjsKKwljaGFyIHJlbW90ZV9idXNpZFtTWVNGU19CVVNfSURfU0laRV07CisJaW50IHJldDsKKworCWlmIChpZGV2LT5zdGF0dXMgPT0gVkRFVl9TVF9OVUxMIHx8IGlkZXYtPnN0YXR1cyA9PSBWREVWX1NUX05PVEFTU0lHTkVEKSB7CisJCWluZm8oIlBvcnQgJTAyZDogPCVzPiIsIGlkZXYtPnBvcnQsIHVzYmlwX3N0YXR1c19zdHJpbmcoaWRldi0+c3RhdHVzKSk7CisJCXJldHVybiAwOworCX0KKworCXJldCA9IHJlYWRfcmVjb3JkKGlkZXYtPnBvcnQsIGhvc3QsIHNlcnYsIHJlbW90ZV9idXNpZCk7CisJaWYgKHJldCkgeworCQllcnIoInJlYWRfcmVjb3JkIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpbmZvKCJQb3J0ICUwMmQ6IDwlcz4gYXQgJXMiLCBpZGV2LT5wb3J0LAorCQkJdXNiaXBfc3RhdHVzX3N0cmluZyhpZGV2LT5zdGF0dXMpLCB1c2JpcF9zcGVlZF9zdHJpbmcoaWRldi0+dWRldi5zcGVlZCkpOworCisJdXNiaXBfbmFtZXNfZ2V0X3Byb2R1Y3QocHJvZHVjdF9uYW1lLCBzaXplb2YocHJvZHVjdF9uYW1lKSwKKwkJCWlkZXYtPnVkZXYuaWRWZW5kb3IsIGlkZXYtPnVkZXYuaWRQcm9kdWN0KTsKKworCWluZm8oIiAgICAgICAlcyIsICBwcm9kdWN0X25hbWUpOworCisJaW5mbygiJTEwcyAtPiB1c2JpcDovLyVzOiVzLyVzICAocmVtb3RlIGRldmlkICUwOHggKGJ1cy9kZXYgJTAzZC8lMDNkKSkiLAorCQkJaWRldi0+dWRldi5idXNpZCwgaG9zdCwgc2VydiwgcmVtb3RlX2J1c2lkLAorCQkJaWRldi0+ZGV2aWQsCisJCQlpZGV2LT5idXNudW0sIGlkZXYtPmRldm51bSk7CisKKwlmb3IgKGludCBpPTA7IGkgPCBpZGV2LT51ZGV2LmJOdW1JbnRlcmZhY2VzOyBpKyspIHsKKwkJLyogc2hvdyBpbnRlcmZhY2UgaW5mb3JtYXRpb24gKi8KKwkJc3RydWN0IHN5c2ZzX2RldmljZSAqc3VpbmY7CisKKwkJc3VpbmYgPSBvcGVuX3VzYl9pbnRlcmZhY2UoJmlkZXYtPnVkZXYsIGkpOworCQlpZiAoIXN1aW5mKQorCQkJY29udGludWU7CisKKwkJaW5mbygiICAgICAgICU2cyB1c2VkIGJ5ICUtMTdzIiwgc3VpbmYtPmJ1c19pZCwgc3VpbmYtPmRyaXZlcl9uYW1lKTsKKwkJc3lzZnNfY2xvc2VfZGV2aWNlKHN1aW5mKTsKKworCQkvKiBzaG93IGNsYXNzIGRldmljZSBpbmZvcm1hdGlvbiAqLworCQlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2OworCisJCWRsaXN0X2Zvcl9lYWNoX2RhdGEoaWRldi0+Y2Rldl9saXN0LCBjZGV2LCBzdHJ1Y3QgY2xhc3NfZGV2aWNlKSB7CisJCQlpbnQgaWZudW0gPSBnZXRfaW50ZXJmYWNlX251bWJlcihjZGV2LT5kZXZwYXRoKTsKKwkJCWlmIChpZm51bSA9PSBpKSB7CisJCQkJaW5mbygiICAgICAgICAgICAlcyIsIGNkZXYtPmNsc3BhdGgpOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworCisKK3N0YXRpYyBpbnQgcXVlcnlfZXhwb3J0ZWRfZGV2aWNlcyhpbnQgc29ja2ZkKQoreworCWludCByZXQ7CisJc3RydWN0IG9wX2Rldmxpc3RfcmVwbHkgcmVwOworCXVpbnQxNl90IGNvZGUgPSBPUF9SRVBfREVWTElTVDsKKworCWJ6ZXJvKCZyZXAsIHNpemVvZihyZXApKTsKKworCXJldCA9IHVzYmlwX3NlbmRfb3BfY29tbW9uKHNvY2tmZCwgT1BfUkVRX0RFVkxJU1QsIDApOworCWlmIChyZXQgPCAwKSB7CisJCWVycigic2VuZCBvcF9jb21tb24iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldCA9IHVzYmlwX3JlY3Zfb3BfY29tbW9uKHNvY2tmZCwgJmNvZGUpOworCWlmIChyZXQgPCAwKSB7CisJCWVycigicmVjdiBvcF9jb21tb24iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldCA9IHVzYmlwX3JlY3Yoc29ja2ZkLCAodm9pZCAqKSAmcmVwLCBzaXplb2YocmVwKSk7CisJaWYgKHJldCA8IDApIHsKKwkJZXJyKCJyZWN2IG9wX2Rldmxpc3QiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCVBBQ0tfT1BfREVWTElTVF9SRVBMWSgwLCAmcmVwKTsKKwlkYmcoImV4cG9ydGFibGUgJWQgZGV2aWNlcyIsIHJlcC5uZGV2KTsKKworCWZvciAodW5zaWduZWQgaW50IGk9MDsgaSA8IHJlcC5uZGV2OyBpKyspIHsKKwkJY2hhciBwcm9kdWN0X25hbWVbMTAwXTsKKwkJY2hhciBjbGFzc19uYW1lWzEwMF07CisJCXN0cnVjdCB1c2JfZGV2aWNlIHVkZXY7CisKKwkJYnplcm8oJnVkZXYsIHNpemVvZih1ZGV2KSk7CisKKwkJcmV0ID0gdXNiaXBfcmVjdihzb2NrZmQsICh2b2lkICopICZ1ZGV2LCBzaXplb2YodWRldikpOworCQlpZiAocmV0IDwgMCkgeworCQkJZXJyKCJyZWN2IHVzYl9kZXZpY2VbJWRdIiwgaSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJcGFja191c2JfZGV2aWNlKDAsICZ1ZGV2KTsKKworCQl1c2JpcF9uYW1lc19nZXRfcHJvZHVjdChwcm9kdWN0X25hbWUsIHNpemVvZihwcm9kdWN0X25hbWUpLAorCQkJCXVkZXYuaWRWZW5kb3IsIHVkZXYuaWRQcm9kdWN0KTsKKwkJdXNiaXBfbmFtZXNfZ2V0X2NsYXNzKGNsYXNzX25hbWUsIHNpemVvZihjbGFzc19uYW1lKSwgdWRldi5iRGV2aWNlQ2xhc3MsCisJCQkJdWRldi5iRGV2aWNlU3ViQ2xhc3MsIHVkZXYuYkRldmljZVByb3RvY29sKTsKKworCQlpbmZvKCIlOHM6ICVzIiwgdWRldi5idXNpZCwgcHJvZHVjdF9uYW1lKTsKKwkJaW5mbygiJThzOiAlcyIsICIgIiwgdWRldi5wYXRoKTsKKwkJaW5mbygiJThzOiAlcyIsICIgIiwgY2xhc3NfbmFtZSk7CisKKwkJZm9yIChpbnQgaj0wOyBqIDwgdWRldi5iTnVtSW50ZXJmYWNlczsgaisrKSB7CisJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSB1aW5mOworCisJCQlyZXQgPSB1c2JpcF9yZWN2KHNvY2tmZCwgKHZvaWQgKikgJnVpbmYsIHNpemVvZih1aW5mKSk7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCWVycigicmVjdiB1c2JfaW50ZXJmYWNlWyVkXSIsIGopOworCQkJCXJldHVybiAtMTsKKwkJCX0KKworCQkJcGFja191c2JfaW50ZXJmYWNlKDAsICZ1aW5mKTsKKwkJCXVzYmlwX25hbWVzX2dldF9jbGFzcyhjbGFzc19uYW1lLCBzaXplb2YoY2xhc3NfbmFtZSksIHVpbmYuYkludGVyZmFjZUNsYXNzLAorCQkJCQl1aW5mLmJJbnRlcmZhY2VTdWJDbGFzcywgdWluZi5iSW50ZXJmYWNlUHJvdG9jb2wpOworCisJCQlpbmZvKCIlOHM6ICUyZCAtICVzIiwgIiAiLCBqLCBjbGFzc19uYW1lKTsKKwkJfQorCisJCWluZm8oIiAiKTsKKwl9CisKKwlyZXR1cm4gcmVwLm5kZXY7Cit9CisKK3N0YXRpYyBpbnQgaW1wb3J0X2RldmljZShpbnQgc29ja2ZkLCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlpbnQgcmV0OworCWludCBwb3J0OworCisJcmV0ID0gdXNiaXBfdmhjaV9kcml2ZXJfb3BlbigpOworCWlmIChyZXQgPCAwKSB7CisJCWVycigib3BlbiB2aGNpX2RyaXZlciIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcG9ydCA9IHVzYmlwX3ZoY2lfZ2V0X2ZyZWVfcG9ydCgpOworCWlmIChwb3J0IDwgMCkgeworCQllcnIoIm5vIGZyZWUgcG9ydCIpOworCQl1c2JpcF92aGNpX2RyaXZlcl9jbG9zZSgpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0ID0gdXNiaXBfdmhjaV9hdHRhY2hfZGV2aWNlKHBvcnQsIHNvY2tmZCwgdWRldi0+YnVzbnVtLAorCQkJdWRldi0+ZGV2bnVtLCB1ZGV2LT5zcGVlZCk7CisJaWYgKHJldCA8IDApIHsKKwkJZXJyKCJpbXBvcnQgZGV2aWNlIik7CisJCXVzYmlwX3ZoY2lfZHJpdmVyX2Nsb3NlKCk7CisJCXJldHVybiAtMTsKKwl9CisKKwl1c2JpcF92aGNpX2RyaXZlcl9jbG9zZSgpOworCisJcmV0dXJuIHBvcnQ7Cit9CisKKworc3RhdGljIGludCBxdWVyeV9pbXBvcnRfZGV2aWNlKGludCBzb2NrZmQsIGNoYXIgKmJ1c2lkKQoreworCWludCByZXQ7CisJc3RydWN0IG9wX2ltcG9ydF9yZXF1ZXN0IHJlcXVlc3Q7CisJc3RydWN0IG9wX2ltcG9ydF9yZXBseSAgIHJlcGx5OworCXVpbnQxNl90IGNvZGUgPSBPUF9SRVBfSU1QT1JUOworCisJYnplcm8oJnJlcXVlc3QsIHNpemVvZihyZXF1ZXN0KSk7CisJYnplcm8oJnJlcGx5LCBzaXplb2YocmVwbHkpKTsKKworCisJLyogc2VuZCBhIHJlcXVlc3QgKi8KKwlyZXQgPSB1c2JpcF9zZW5kX29wX2NvbW1vbihzb2NrZmQsIE9QX1JFUV9JTVBPUlQsIDApOworCWlmIChyZXQgPCAwKSB7CisJCWVycigic2VuZCBvcF9jb21tb24iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXN0cm5jcHkocmVxdWVzdC5idXNpZCwgYnVzaWQsIFNZU0ZTX0JVU19JRF9TSVpFLTEpOworCisJUEFDS19PUF9JTVBPUlRfUkVRVUVTVCgwLCAmcmVxdWVzdCk7CisKKwlyZXQgPSB1c2JpcF9zZW5kKHNvY2tmZCwgKHZvaWQgKikgJnJlcXVlc3QsIHNpemVvZihyZXF1ZXN0KSk7CisJaWYgKHJldCA8IDApIHsKKwkJZXJyKCJzZW5kIG9wX2ltcG9ydF9yZXF1ZXN0Iik7CisJCXJldHVybiAtMTsKKwl9CisKKworCS8qIHJlY2lldmUgYSByZXBseSAqLworCXJldCA9IHVzYmlwX3JlY3Zfb3BfY29tbW9uKHNvY2tmZCwgJmNvZGUpOworCWlmIChyZXQgPCAwKSB7CisJCWVycigicmVjdiBvcF9jb21tb24iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldCA9IHVzYmlwX3JlY3Yoc29ja2ZkLCAodm9pZCAqKSAmcmVwbHksIHNpemVvZihyZXBseSkpOworCWlmIChyZXQgPCAwKSB7CisJCWVycigicmVjdiBvcF9pbXBvcnRfcmVwbHkiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCVBBQ0tfT1BfSU1QT1JUX1JFUExZKDAsICZyZXBseSk7CisKKworCS8qIGNoZWNrIHRoZSByZXBseSAqLworCWlmIChzdHJuY21wKHJlcGx5LnVkZXYuYnVzaWQsIGJ1c2lkLCBTWVNGU19CVVNfSURfU0laRSkpIHsKKwkJZXJyKCJyZWN2IGRpZmZlcmVudCBidXNpZCAlcyIsIHJlcGx5LnVkZXYuYnVzaWQpOworCQlyZXR1cm4gLTE7CisJfQorCisKKwkvKiBpbXBvcnQgYSBkZXZpY2UgKi8KKwlyZXR1cm4gaW1wb3J0X2RldmljZShzb2NrZmQsICZyZXBseS51ZGV2KTsKK30KKworc3RhdGljIGludCBhdHRhY2hfZGV2aWNlKGNoYXIgKmhvc3QsIGNoYXIgKmJ1c2lkKQoreworCWludCBzb2NrZmQ7CisJaW50IHJldDsKKwlpbnQgcmhwb3J0OworCisJc29ja2ZkID0gdGNwX2Nvbm5lY3QoaG9zdCwgVVNCSVBfUE9SVF9TVFJJTkcpOworCWlmIChzb2NrZmQgPCAwKSB7CisJCWVycigidGNwIGNvbm5lY3QiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJocG9ydCA9IHF1ZXJ5X2ltcG9ydF9kZXZpY2Uoc29ja2ZkLCBidXNpZCk7CisJaWYgKHJocG9ydCA8IDApIHsKKwkJZXJyKCJxdWVyeSIpOworCQlyZXR1cm4gLTE7CisJfQorCisJY2xvc2Uoc29ja2ZkKTsKKworCXJldCA9IHJlY29yZF9jb25uZWN0aW9uKGhvc3QsIFVTQklQX1BPUlRfU1RSSU5HLAorCQkJYnVzaWQsIHJocG9ydCk7CisJaWYgKHJldCA8IDApIHsKKwkJZXJyKCJyZWNvcmQgY29ubmVjdGlvbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGV0YWNoX3BvcnQoY2hhciAqcG9ydCkKK3sKKwlpbnQgcmV0OworCXVpbnQ4X3QgcG9ydG51bTsKKworCWZvciAodW5zaWduZWQgaW50IGk9MDsgaSA8IHN0cmxlbihwb3J0KTsgaSsrKQorCQlpZiAoIWlzZGlnaXQocG9ydFtpXSkpIHsKKwkJCWVycigiaW52YWxpZCBwb3J0ICVzIiwgcG9ydCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCS8qIGNoZWNrIG1heCBwb3J0ICovCisKKwlwb3J0bnVtID0gYXRvaShwb3J0KTsKKworCXJldCA9IHVzYmlwX3ZoY2lfZHJpdmVyX29wZW4oKTsKKwlpZiAocmV0IDwgMCkgeworCQllcnIoIm9wZW4gdmhjaV9kcml2ZXIiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldCA9IHVzYmlwX3ZoY2lfZGV0YWNoX2RldmljZShwb3J0bnVtKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIC0xOworCisJdXNiaXBfdmhjaV9kcml2ZXJfY2xvc2UoKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19leHBvcnRlZF9kZXZpY2VzKGNoYXIgKmhvc3QpCit7CisJaW50IHJldDsKKwlpbnQgc29ja2ZkOworCisJc29ja2ZkID0gdGNwX2Nvbm5lY3QoaG9zdCwgVVNCSVBfUE9SVF9TVFJJTkcpOworCWlmIChzb2NrZmQgPCAwKSB7CisJCWVycigiLSAlcyBmYWlsZWQiLCBob3N0KTsKKwkJcmV0dXJuIC0xOworCX0KKworCWluZm8oIi0gJXMiLCBob3N0KTsKKworCXJldCA9IHF1ZXJ5X2V4cG9ydGVkX2RldmljZXMoc29ja2ZkKTsKKwlpZiAocmV0IDwgMCkgeworCQllcnIoInF1ZXJ5Iik7CisJCXJldHVybiAtMTsKKwl9CisKKwljbG9zZShzb2NrZmQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0dGFjaF9leHBvcnRlZF9kZXZpY2VzKGNoYXIgKmhvc3QsIGludCBzb2NrZmQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgb3BfZGV2bGlzdF9yZXBseSByZXA7CisJdWludDE2X3QgY29kZSA9IE9QX1JFUF9ERVZMSVNUOworCisJYnplcm8oJnJlcCwgc2l6ZW9mKHJlcCkpOworCisJcmV0ID0gdXNiaXBfc2VuZF9vcF9jb21tb24oc29ja2ZkLCBPUF9SRVFfREVWTElTVCwgMCk7CisJaWYocmV0IDwgMCkgeworCQllcnIoInNlbmQgb3BfY29tbW9uIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXQgPSB1c2JpcF9yZWN2X29wX2NvbW1vbihzb2NrZmQsICZjb2RlKTsKKwlpZihyZXQgPCAwKSB7CisJCWVycigicmVjdiBvcF9jb21tb24iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldCA9IHVzYmlwX3JlY3Yoc29ja2ZkLCAodm9pZCAqKSAmcmVwLCBzaXplb2YocmVwKSk7CisJaWYocmV0IDwgMCkgeworCQllcnIoInJlY3Ygb3BfZGV2bGlzdCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJUEFDS19PUF9ERVZMSVNUX1JFUExZKDAsICZyZXApOworCWRiZygiZXhwb3J0YWJsZSAlZCBkZXZpY2VzIiwgcmVwLm5kZXYpOworCisJZm9yKHVuc2lnbmVkIGludCBpPTA7IGkgPCByZXAubmRldjsgaSsrKSB7CisJCWNoYXIgcHJvZHVjdF9uYW1lWzEwMF07CisJCWNoYXIgY2xhc3NfbmFtZVsxMDBdOworCQlzdHJ1Y3QgdXNiX2RldmljZSB1ZGV2OworCisJCWJ6ZXJvKCZ1ZGV2LCBzaXplb2YodWRldikpOworCisJCXJldCA9IHVzYmlwX3JlY3Yoc29ja2ZkLCAodm9pZCAqKSAmdWRldiwgc2l6ZW9mKHVkZXYpKTsKKwkJaWYocmV0IDwgMCkgeworCQkJZXJyKCJyZWN2IHVzYl9kZXZpY2VbJWRdIiwgaSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJcGFja191c2JfZGV2aWNlKDAsICZ1ZGV2KTsKKworCQl1c2JpcF9uYW1lc19nZXRfcHJvZHVjdChwcm9kdWN0X25hbWUsIHNpemVvZihwcm9kdWN0X25hbWUpLAorCQkJCXVkZXYuaWRWZW5kb3IsIHVkZXYuaWRQcm9kdWN0KTsKKwkJdXNiaXBfbmFtZXNfZ2V0X2NsYXNzKGNsYXNzX25hbWUsIHNpemVvZihjbGFzc19uYW1lKSwgdWRldi5iRGV2aWNlQ2xhc3MsCisJCQkJdWRldi5iRGV2aWNlU3ViQ2xhc3MsIHVkZXYuYkRldmljZVByb3RvY29sKTsKKworCQlkYmcoIkF0dGFjaGluZyB1c2IgcG9ydCAlcyBmcm9tIGhvc3QgJXMgb24gdXNiaXAsIHdpdGggZGV2aWNlaWQ6ICVzIiwgdWRldi5idXNpZCwgaG9zdCwgcHJvZHVjdF9uYW1lKTsKKworCQlmb3IgKGludCBqPTA7IGogPCB1ZGV2LmJOdW1JbnRlcmZhY2VzOyBqKyspIHsKKwkJCXN0cnVjdCB1c2JfaW50ZXJmYWNlIHVpbmY7CisKKwkJCXJldCA9IHVzYmlwX3JlY3Yoc29ja2ZkLCAodm9pZCAqKSAmdWluZiwgc2l6ZW9mKHVpbmYpKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJZXJyKCJyZWN2IHVzYl9pbnRlcmZhY2VbJWRdIiwgaik7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCisJCQlwYWNrX3VzYl9pbnRlcmZhY2UoMCwgJnVpbmYpOworCQkJdXNiaXBfbmFtZXNfZ2V0X2NsYXNzKGNsYXNzX25hbWUsIHNpemVvZihjbGFzc19uYW1lKSwgdWluZi5iSW50ZXJmYWNlQ2xhc3MsCisJCQkJCXVpbmYuYkludGVyZmFjZVN1YkNsYXNzLCB1aW5mLmJJbnRlcmZhY2VQcm90b2NvbCk7CisKKwkJCWRiZygiaW50ZXJmYWNlICUyZCAtICVzIiwgaiwgY2xhc3NfbmFtZSk7CisJCX0KKworCQlhdHRhY2hfZGV2aWNlKGhvc3QsIHVkZXYuYnVzaWQpOworCX0KKworCXJldHVybiByZXAubmRldjsKK30KKworc3RhdGljIGludCBhdHRhY2hfZGV2aWNlc19hbGwoY2hhciAqaG9zdCkKK3sKKwlpbnQgcmV0OworCWludCBzb2NrZmQ7CisKKwlzb2NrZmQgPSB0Y3BfY29ubmVjdChob3N0LCBVU0JJUF9QT1JUX1NUUklORyk7CisJaWYoc29ja2ZkIDwgMCkgeworCQllcnIoIi0gJXMgZmFpbGVkIiwgaG9zdCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpbmZvKCItICVzIiwgaG9zdCk7CisKKwlyZXQgPSBhdHRhY2hfZXhwb3J0ZWRfZGV2aWNlcyhob3N0LCBzb2NrZmQpOworCWlmKHJldCA8IDApIHsKKwkJZXJyKCJxdWVyeSIpOworCQlyZXR1cm4gLTE7CisJfQorCisJY2xvc2Uoc29ja2ZkKTsKKwlyZXR1cm4gMDsKK30KKworCitjb25zdCBjaGFyIGhlbHBfbWVzc2FnZVtdID0gIlwKK1VzYWdlOiB1c2JpcCBbb3B0aW9uc10JCQkJXG5cCisJLWEsIC0tYXR0YWNoIFtob3N0XSBbYnVzX2lkXQkJXG5cCisJCUF0dGFjaCBhIHJlbW90ZSBVU0IgZGV2aWNlLglcblwKKwkJCQkJCVxuXAorCS14LCAtLWF0dGFjaGFsbCBbaG9zdF0JCVxuXAorCQlBdHRhY2ggYWxsIHJlbW90ZSBVU0IgZGV2aWNlcyBvbiB0aGUgc3BlY2lmaWMgaG9zdC4JXG5cCisJCQkJCQlcblwKKwktZCwgLS1kZXRhY2ggW3BvcnRzXQkJCVxuXAorCQlEZXRhY2ggYW4gaW1wb3J0ZWQgVVNCIGRldmljZS4JXG5cCisJCQkJCQlcblwKKwktbCwgLS1saXN0IFtob3N0c10JCQlcblwKKwkJTGlzdCBleHBvcnRlZCBVU0IgZGV2aWNlcy4JXG5cCisJCQkJCQlcblwKKwktcCwgLS1wb3J0CQkJCVxuXAorCQlMaXN0IHZpcnR1YWwgVVNCIHBvcnQgc3RhdHVzLiAJXG5cCisJCQkJCQlcblwKKwktRCwgLS1kZWJ1ZwkJCQlcblwKKwkJUHJpbnQgZGVidWdnaW5nIGluZm9ybWF0aW9uLglcblwKKwkJCQkJCVxuXAorCS12LCAtLXZlcnNpb24JCQkJXG5cCisJCVNob3cgdmVyc2lvbi4JCQlcblwKKwkJCQkJCVxuXAorCS1oLCAtLWhlbHAgCQkJCVxuXAorCQlQcmludCB0aGlzIGhlbHAuCQlcbiI7CisKK3N0YXRpYyB2b2lkIHNob3dfaGVscCh2b2lkKQoreworCXByaW50ZigiJXMiLCBoZWxwX21lc3NhZ2UpOworfQorCitzdGF0aWMgaW50IHNob3dfcG9ydF9zdGF0dXModm9pZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB1c2JpcF9pbXBvcnRlZF9kZXZpY2UgKmlkZXY7CisKKwlyZXQgPSB1c2JpcF92aGNpX2RyaXZlcl9vcGVuKCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IHZoY2lfZHJpdmVyLT5ucG9ydHM7IGkrKykgeworCQlpZGV2ID0gJnZoY2lfZHJpdmVyLT5pZGV2W2ldOworCisJCWlmICh1c2JpcF92aGNpX2ltcG9ydGVkX2RldmljZV9kdW1wKGlkZXYpIDwgMCkKKwkJCXJldCA9IC0xOworCX0KKworCXVzYmlwX3ZoY2lfZHJpdmVyX2Nsb3NlKCk7CisKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIF9HTlVfU09VUkNFCisjaW5jbHVkZSA8Z2V0b3B0Lmg+CitzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBsb25nb3B0c1tdID0geworCXsiYXR0YWNoIiwJbm9fYXJndW1lbnQsCU5VTEwsICdhJ30sCisJeyJhdHRhY2hhbGwiLAlub19hcmd1bWVudCwJTlVMTCwgJ3gnfSwKKwl7ImRldGFjaCIsCW5vX2FyZ3VtZW50LAlOVUxMLCAnZCd9LAorCXsicG9ydCIsCW5vX2FyZ3VtZW50LAlOVUxMLCAncCd9LAorCXsibGlzdCIsCW5vX2FyZ3VtZW50LAlOVUxMLCAnbCd9LAorCXsidmVyc2lvbiIsCW5vX2FyZ3VtZW50LAlOVUxMLCAndid9LAorCXsiaGVscCIsCW5vX2FyZ3VtZW50LAlOVUxMLCAnaCd9LAorCXsiZGVidWciLAlub19hcmd1bWVudCwJTlVMTCwgJ0QnfSwKKwl7InN5c2xvZyIsCW5vX2FyZ3VtZW50LAlOVUxMLCAnUyd9LAorCXtOVUxMLAkJMCwJCU5VTEwsICAwfQorfTsKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpbnQgcmV0OworCisJZW51bSB7CisJCWNtZF9hdHRhY2ggPSAxLAorCQljbWRfYXR0YWNoYWxsLAorCQljbWRfZGV0YWNoLAorCQljbWRfcG9ydCwKKwkJY21kX2xpc3QsCisJCWNtZF9oZWxwLAorCQljbWRfdmVyc2lvbgorCX0gY21kID0gMDsKKworCXVzYmlwX3VzZV9zdGRlcnIgPSAxOworCisJaWYgKGdldGV1aWQoKSAhPSAwKQorCQlnX3dhcm5pbmcoInJ1bm5pbmcgbm9uLXJvb3Q/Iik7CisKKwlyZXQgPSB1c2JpcF9uYW1lc19pbml0KFVTQklEU19GSUxFKTsKKwlpZiAocmV0KQorCQlub3RpY2UoImZhaWxlZCB0byBvcGVuICVzIiwgVVNCSURTX0ZJTEUpOworCisJZm9yICg7OykgeworCQlpbnQgYzsKKwkJaW50IGluZGV4ID0gMDsKKworCQljID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFkcGx2aERTeCIsIGxvbmdvcHRzLCAmaW5kZXgpOworCisJCWlmIChjID09IC0xKQorCQkJYnJlYWs7CisKKwkJc3dpdGNoKGMpIHsKKwkJCWNhc2UgJ2EnOgorCQkJCWlmICghY21kKQorCQkJCQljbWQgPSBjbWRfYXR0YWNoOworCQkJCWVsc2UKKwkJCQkJY21kID0gY21kX2hlbHA7CisJCQkJYnJlYWs7CisJCQljYXNlICdkJzoKKwkJCQlpZiAoIWNtZCkKKwkJCQkJY21kID0gY21kX2RldGFjaDsKKwkJCQllbHNlCisJCQkJCWNtZCA9IGNtZF9oZWxwOworCQkJCWJyZWFrOworCQkJY2FzZSAncCc6CisJCQkJaWYgKCFjbWQpCisJCQkJCWNtZCA9IGNtZF9wb3J0OworCQkJCWVsc2UgY21kID0gY21kX2hlbHA7CisJCQkJYnJlYWs7CisJCQljYXNlICdsJzoKKwkJCQlpZiAoIWNtZCkKKwkJCQkJY21kID0gY21kX2xpc3Q7CisJCQkJZWxzZQorCQkJCQljbWQgPSBjbWRfaGVscDsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3YnOgorCQkJCWlmICghY21kKQorCQkJCQljbWQgPSBjbWRfdmVyc2lvbjsKKwkJCQllbHNlCisJCQkJCWNtZCA9IGNtZF9oZWxwOworCQkJCWJyZWFrOworCQkJY2FzZSAneCc6CisJCQkJaWYoIWNtZCkKKwkJCQkJY21kID0gY21kX2F0dGFjaGFsbDsKKwkJCQllbHNlCisJCQkJCWNtZCA9IGNtZF9oZWxwOworCQkJCWJyZWFrOworCQkJY2FzZSAnaCc6CisJCQkJY21kID0gY21kX2hlbHA7CisJCQkJYnJlYWs7CisJCQljYXNlICdEJzoKKwkJCQl1c2JpcF91c2VfZGVidWcgPSAxOworCQkJCWJyZWFrOworCQkJY2FzZSAnUyc6CisJCQkJdXNiaXBfdXNlX3N5c2xvZyA9IDE7CisJCQkJYnJlYWs7CisJCQljYXNlICc/JzoKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQllcnIoImdldG9wdCIpOworCQl9CisJfQorCisJcmV0ID0gMDsKKwlzd2l0Y2goY21kKSB7CisJCWNhc2UgY21kX2F0dGFjaDoKKwkJCWlmIChvcHRpbmQgPT0gYXJnYyAtIDIpCisJCQkJcmV0ID0gYXR0YWNoX2RldmljZShhcmd2W29wdGluZF0sIGFyZ3Zbb3B0aW5kKzFdKTsKKwkJCWVsc2UKKwkJCQlzaG93X2hlbHAoKTsKKwkJCWJyZWFrOworCQljYXNlIGNtZF9kZXRhY2g6CisJCQl3aGlsZSAob3B0aW5kIDwgYXJnYykKKwkJCQlyZXQgPSBkZXRhY2hfcG9ydChhcmd2W29wdGluZCsrXSk7CisJCQlicmVhazsKKwkJY2FzZSBjbWRfcG9ydDoKKwkJCXJldCA9IHNob3dfcG9ydF9zdGF0dXMoKTsKKwkJCWJyZWFrOworCQljYXNlIGNtZF9saXN0OgorCQkJd2hpbGUgKG9wdGluZCA8IGFyZ2MpCisJCQkJcmV0ID0gc2hvd19leHBvcnRlZF9kZXZpY2VzKGFyZ3Zbb3B0aW5kKytdKTsKKwkJCWJyZWFrOworCQljYXNlIGNtZF9hdHRhY2hhbGw6CisJCQl3aGlsZShvcHRpbmQgPCBhcmdjKQorCQkJCXJldCA9IGF0dGFjaF9kZXZpY2VzX2FsbChhcmd2W29wdGluZCsrXSk7CisJCQlicmVhazsKKwkJY2FzZSBjbWRfdmVyc2lvbjoKKwkJCXByaW50ZigiJXNcbiIsIHZlcnNpb24pOworCQkJYnJlYWs7CisJCWNhc2UgY21kX2hlbHA6CisJCQlzaG93X2hlbHAoKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJc2hvd19oZWxwKCk7CisJfQorCisKKwl1c2JpcF9uYW1lc19mcmVlKCk7CisKKwlleGl0KChyZXQgPT0gMCkgPyBFWElUX1NVQ0NFU1MgOiBFWElUX0ZBSUxVUkUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9zcmMvdXNiaXBfbmV0d29yay5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9zcmMvdXNiaXBfbmV0d29yay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYmUzYzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL3NyYy91c2JpcF9uZXR3b3JrLmMKQEAgLTAsMCArMSwyNTEgQEAKKy8qCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcgVGFrYWhpcm8gSGlyb2Z1Y2hpCisgKi8KKworI2luY2x1ZGUgInVzYmlwX25ldHdvcmsuaCIKKwordm9pZCBwYWNrX3VpbnQzMl90KGludCBwYWNrLCB1aW50MzJfdCAqbnVtKQoreworCXVpbnQzMl90IGk7CisKKwlpZiAocGFjaykKKwkJaSA9IGh0b25sKCpudW0pOworCWVsc2UKKwkJaSA9IG50b2hsKCpudW0pOworCisJKm51bSA9IGk7Cit9CisKK3ZvaWQgcGFja191aW50MTZfdChpbnQgcGFjaywgdWludDE2X3QgKm51bSkKK3sKKwl1aW50MTZfdCBpOworCisJaWYgKHBhY2spCisJCWkgPSBodG9ucygqbnVtKTsKKwllbHNlCisJCWkgPSBudG9ocygqbnVtKTsKKworCSpudW0gPSBpOworfQorCit2b2lkIHBhY2tfdXNiX2RldmljZShpbnQgcGFjaywgc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJcGFja191aW50MzJfdChwYWNrLCAmdWRldi0+YnVzbnVtKTsKKwlwYWNrX3VpbnQzMl90KHBhY2ssICZ1ZGV2LT5kZXZudW0pOworCXBhY2tfdWludDMyX3QocGFjaywgJnVkZXYtPnNwZWVkICk7CisKKwlwYWNrX3VpbnQxNl90KHBhY2ssICZ1ZGV2LT5pZFZlbmRvciApOworCXBhY2tfdWludDE2X3QocGFjaywgJnVkZXYtPmlkUHJvZHVjdCk7CisJcGFja191aW50MTZfdChwYWNrLCAmdWRldi0+YmNkRGV2aWNlKTsKK30KKwordm9pZCBwYWNrX3VzYl9pbnRlcmZhY2UoaW50IHBhY2sgX19hdHRyaWJ1dGVfXygodW51c2VkKSksCisJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdWRldiBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSkKK3sKKwkvKiB1aW50OF90IG1lbWJlcnMgbmVlZCBub3RoaW5nICovCit9CisKKworc3RhdGljIHNzaXplX3QgdXNiaXBfeG1pdChpbnQgc29ja2ZkLCB2b2lkICpidWZmLCBzaXplX3QgYnVmZmxlbiwgaW50IHNlbmRpbmcpCit7CisJc3NpemVfdCB0b3RhbCA9IDA7CisKKwlpZiAoIWJ1ZmZsZW4pCisJCXJldHVybiAwOworCisJZG8geworCQlzc2l6ZV90IG5ieXRlczsKKworCQlpZiAoc2VuZGluZykKKwkJCW5ieXRlcyA9IHNlbmQoc29ja2ZkLCBidWZmLCBidWZmbGVuLCAwKTsKKwkJZWxzZQorCQkJbmJ5dGVzID0gcmVjdihzb2NrZmQsIGJ1ZmYsIGJ1ZmZsZW4sIE1TR19XQUlUQUxMKTsKKworCQlpZiAobmJ5dGVzIDw9IDApCisJCQlyZXR1cm4gLTE7CisKKwkJYnVmZgk9ICh2b2lkICopICgoaW50cHRyX3QpIGJ1ZmYgKyBuYnl0ZXMpOworCQlidWZmbGVuCS09IG5ieXRlczsKKwkJdG90YWwJKz0gbmJ5dGVzOworCisJfSB3aGlsZSAoYnVmZmxlbiA+IDApOworCisKKwlyZXR1cm4gdG90YWw7Cit9CisKK3NzaXplX3QgdXNiaXBfcmVjdihpbnQgc29ja2ZkLCB2b2lkICpidWZmLCBzaXplX3QgYnVmZmxlbikKK3sKKwlyZXR1cm4gdXNiaXBfeG1pdChzb2NrZmQsIGJ1ZmYsIGJ1ZmZsZW4sIDApOworfQorCitzc2l6ZV90IHVzYmlwX3NlbmQoaW50IHNvY2tmZCwgdm9pZCAqYnVmZiwgc2l6ZV90IGJ1ZmZsZW4pCit7CisJcmV0dXJuIHVzYmlwX3htaXQoc29ja2ZkLCBidWZmLCBidWZmbGVuLCAxKTsKK30KKworaW50IHVzYmlwX3NlbmRfb3BfY29tbW9uKGludCBzb2NrZmQsIHVpbnQzMl90IGNvZGUsIHVpbnQzMl90IHN0YXR1cykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBvcF9jb21tb24gb3BfY29tbW9uOworCisJYnplcm8oJm9wX2NvbW1vbiwgc2l6ZW9mKG9wX2NvbW1vbikpOworCisJb3BfY29tbW9uLnZlcnNpb24JPSBVU0JJUF9WRVJTSU9OOworCW9wX2NvbW1vbi5jb2RlCQk9IGNvZGU7CisJb3BfY29tbW9uLnN0YXR1cwk9IHN0YXR1czsKKworCVBBQ0tfT1BfQ09NTU9OKDEsICZvcF9jb21tb24pOworCisJcmV0ID0gdXNiaXBfc2VuZChzb2NrZmQsICh2b2lkICopICZvcF9jb21tb24sIHNpemVvZihvcF9jb21tb24pKTsKKwlpZiAocmV0IDwgMCkgeworCQllcnIoInNlbmQgb3BfY29tbW9uIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IHVzYmlwX3JlY3Zfb3BfY29tbW9uKGludCBzb2NrZmQsIHVpbnQxNl90ICpjb2RlKQoreworCWludCByZXQ7CisJc3RydWN0IG9wX2NvbW1vbiBvcF9jb21tb247CisKKwliemVybygmb3BfY29tbW9uLCBzaXplb2Yob3BfY29tbW9uKSk7CisKKwlyZXQgPSB1c2JpcF9yZWN2KHNvY2tmZCwgKHZvaWQgKikgJm9wX2NvbW1vbiwgc2l6ZW9mKG9wX2NvbW1vbikpOworCWlmIChyZXQgPCAwKSB7CisJCWVycigicmVjdiBvcF9jb21tb24sICVkIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJUEFDS19PUF9DT01NT04oMCwgJm9wX2NvbW1vbik7CisKKwlpZiAob3BfY29tbW9uLnZlcnNpb24gIT0gVVNCSVBfVkVSU0lPTikgeworCQllcnIoInZlcnNpb24gbWlzbWF0Y2gsICVkICVkIiwgb3BfY29tbW9uLnZlcnNpb24sIFVTQklQX1ZFUlNJT04pOworCQlnb3RvIGVycjsKKwl9CisKKwlzd2l0Y2goKmNvZGUpIHsKKwkJY2FzZSBPUF9VTlNQRUM6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWlmIChvcF9jb21tb24uY29kZSAhPSAqY29kZSkgeworCQkJCWluZm8oInVuZXhwZWN0ZWQgcGR1ICVkIGZvciAlZCIsIG9wX2NvbW1vbi5jb2RlLCAqY29kZSk7CisJCQkJZ290byBlcnI7CisJCQl9CisJfQorCisJaWYgKG9wX2NvbW1vbi5zdGF0dXMgIT0gU1RfT0spIHsKKwkJaW5mbygicmVxdWVzdCBmYWlsZWQgYXQgcGVlciwgJWQiLCBvcF9jb21tb24uc3RhdHVzKTsKKwkJZ290byBlcnI7CisJfQorCisJKmNvZGUgPSBvcF9jb21tb24uY29kZTsKKworCXJldHVybiAwOworZXJyOgorCXJldHVybiAtMTsKK30KKworCitpbnQgdXNiaXBfc2V0X3JldXNlYWRkcihpbnQgc29ja2ZkKQoreworCWNvbnN0IGludCB2YWwgPSAxOworCWludCByZXQ7CisKKwlyZXQgPSBzZXRzb2Nrb3B0KHNvY2tmZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCAmdmFsLCBzaXplb2YodmFsKSk7CisJaWYgKHJldCA8IDApCisJCWVycigic2V0c29ja29wdCBTT19SRVVTRUFERFIiKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCB1c2JpcF9zZXRfbm9kZWxheShpbnQgc29ja2ZkKQoreworCWNvbnN0IGludCB2YWwgPSAxOworCWludCByZXQ7CisKKwlyZXQgPSBzZXRzb2Nrb3B0KHNvY2tmZCwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAmdmFsLCBzaXplb2YodmFsKSk7CisJaWYgKHJldCA8IDApCisJCWVycigic2V0c29ja29wdCBUQ1BfTk9ERUxBWSIpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IHVzYmlwX3NldF9rZWVwYWxpdmUoaW50IHNvY2tmZCkKK3sKKwljb25zdCBpbnQgdmFsID0gMTsKKwlpbnQgcmV0OworCisJcmV0ID0gc2V0c29ja29wdChzb2NrZmQsIFNPTF9TT0NLRVQsIFNPX0tFRVBBTElWRSwgJnZhbCwgc2l6ZW9mKHZhbCkpOworCWlmIChyZXQgPCAwKQorCQllcnIoInNldHNvY2tvcHQgU09fS0VFUEFMSVZFIik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBJUHY2IFJlYWR5ICovCisvKgorICogbW92ZWQgaGVyZSBmcm9tIHZoY2lfYXR0YWNoLmMKKyAqLworaW50IHRjcF9jb25uZWN0KGNoYXIgKmhvc3RuYW1lLCBjaGFyICpzZXJ2aWNlKQoreworCXN0cnVjdCBhZGRyaW5mbyBoaW50cywgKnJlcywgKnJlczA7CisJaW50IHNvY2tmZDsKKwlpbnQgZXJyOworCisKKwltZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKwloaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworCisJLyogZ2V0IGFsbCBwb3NzaWJsZSBhZGRyZXNzZXMgKi8KKwllcnIgPSBnZXRhZGRyaW5mbyhob3N0bmFtZSwgc2VydmljZSwgJmhpbnRzLCAmcmVzMCk7CisJaWYgKGVycikgeworCQllcnIoIiVzICVzOiAlcyIsIGhvc3RuYW1lLCBzZXJ2aWNlLCBnYWlfc3RyZXJyb3IoZXJyKSk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiB0cnkgYWxsIHRoZSBhZGRyZXNzZXMgKi8KKwlmb3IgKHJlcyA9IHJlczA7IHJlczsgcmVzID0gcmVzLT5haV9uZXh0KSB7CisJCWNoYXIgaGJ1ZltOSV9NQVhIT1NUXSwgc2J1ZltOSV9NQVhTRVJWXTsKKworCQllcnIgPSBnZXRuYW1laW5mbyhyZXMtPmFpX2FkZHIsIHJlcy0+YWlfYWRkcmxlbiwKKwkJCQloYnVmLCBzaXplb2YoaGJ1ZiksIHNidWYsIHNpemVvZihzYnVmKSwgTklfTlVNRVJJQ0hPU1QgfCBOSV9OVU1FUklDU0VSVik7CisJCWlmIChlcnIpIHsKKwkJCWVycigiJXMgJXM6ICVzIiwgaG9zdG5hbWUsIHNlcnZpY2UsIGdhaV9zdHJlcnJvcihlcnIpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZGJnKCJ0cnlpbmcgJXMgcG9ydCAlc1xuIiwgaGJ1Ziwgc2J1Zik7CisKKwkJc29ja2ZkID0gc29ja2V0KHJlcy0+YWlfZmFtaWx5LCByZXMtPmFpX3NvY2t0eXBlLCByZXMtPmFpX3Byb3RvY29sKTsKKwkJaWYgKHNvY2tmZCA8IDApIHsKKwkJCWVycigic29ja2V0Iik7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIHNob3VsZCBzZXQgVENQX05PREVMQVkgZm9yIHVzYmlwICovCisJCXVzYmlwX3NldF9ub2RlbGF5KHNvY2tmZCk7CisJCS8qIFRPRE86IHdyaXRlIGNvZGUgZm9yIGhlYXRiZWF0ICovCisJCXVzYmlwX3NldF9rZWVwYWxpdmUoc29ja2ZkKTsKKworCQllcnIgPSBjb25uZWN0KHNvY2tmZCwgcmVzLT5haV9hZGRyLCByZXMtPmFpX2FkZHJsZW4pOworCQlpZiAoZXJyIDwgMCkgeworCQkJY2xvc2Uoc29ja2ZkKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogY29ubmVjdGVkICovCisJCWRiZygiY29ubmVjdGVkIHRvICVzOiVzIiwgaGJ1Ziwgc2J1Zik7CisJCWZyZWVhZGRyaW5mbyhyZXMwKTsKKwkJcmV0dXJuIHNvY2tmZDsKKwl9CisKKworCWRiZygiJXM6JXMsICVzIiwgaG9zdG5hbWUsIHNlcnZpY2UsICJubyBkZXN0aW5hdGlvbiB0byBjb25uZWN0IHRvIik7CisJZnJlZWFkZHJpbmZvKHJlczApOworCisJcmV0dXJuIC0xOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9zcmMvdXNiaXBfbmV0d29yay5oIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9zcmMvdXNiaXBfbmV0d29yay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMjU0NjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL3NyYy91c2JpcF9uZXR3b3JrLmgKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyBUYWthaGlybyBIaXJvZnVjaGkKKyAqLworCisjaWZuZGVmIF9VU0JJUF9ORVRXT1JLX0gKKyNkZWZpbmUgX1VTQklQX05FVFdPUktfSAorCisjaW5jbHVkZSAidXNiaXAuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogRGVmaW5lIFByb3RvY29sIEZvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogQ29tbW9uIGhlYWRlciBmb3IgYWxsIHRoZSBraW5kcyBvZiBQRFVzLiAqLworc3RydWN0IG9wX2NvbW1vbiB7CisJdWludDE2X3QgdmVyc2lvbjsKKworI2RlZmluZSBPUF9SRVFVRVNUCSgweDgwIDw8IDgpCisjZGVmaW5lIE9QX1JFUExZCSgweDAwIDw8IDgpCisJdWludDE2X3QgY29kZTsKKworCS8qIGFkZCBtb3JlIGVycm9yIGNvZGUgKi8KKyNkZWZpbmUgU1RfT0sJMHgwMAorI2RlZmluZSBTVF9OQQkweDAxCisJdWludDMyX3Qgc3RhdHVzOyAvKiBvcF9jb2RlIHN0YXR1cyAoZm9yIHJlcGx5KSAqLworCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIFBBQ0tfT1BfQ09NTU9OKHBhY2ssIG9wX2NvbW1vbikgIGRvIHtcCisJcGFja191aW50MTZfdChwYWNrLCAmKG9wX2NvbW1vbiktPnZlcnNpb24pO1wKKwlwYWNrX3VpbnQxNl90KHBhY2ssICYob3BfY29tbW9uKS0+Y29kZSAgICk7XAorCXBhY2tfdWludDMyX3QocGFjaywgJihvcF9jb21tb24pLT5zdGF0dXMgKTtcCit9IHdoaWxlICgwKQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIER1bW15IENvZGUgKi8KKyNkZWZpbmUgT1BfVU5TUEVDCTB4MDAKKyNkZWZpbmUgT1BfUkVRX1VOU1BFQwlPUF9VTlNQRUMKKyNkZWZpbmUgT1BfUkVQX1VOU1BFQwlPUF9VTlNQRUMKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogUmV0cmlldmUgVVNCIGRldmljZSBpbmZvcm1hdGlvbi4gKHN0aWxsIG5vdCB1c2VkKSAqLworI2RlZmluZSBPUF9ERVZJTkZPCTB4MDIKKyNkZWZpbmUgT1BfUkVRX0RFVklORk8JKE9QX1JFUVVFU1QgfCBPUF9ERVZJTkZPKQorI2RlZmluZSBPUF9SRVBfREVWSU5GTwkoT1BfUkVQTFkgICB8IE9QX0RFVklORk8pCisKK3N0cnVjdCBvcF9kZXZpbmZvX3JlcXVlc3QgeworCWNoYXIgYnVzaWRbU1lTRlNfQlVTX0lEX1NJWkVdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG9wX2RldmluZm9fcmVwbHkgeworCXN0cnVjdCB1c2JfZGV2aWNlIHVkZXY7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgdWluZltdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBJbXBvcnQgYSByZW1vdGUgVVNCIGRldmljZS4gKi8KKyNkZWZpbmUgT1BfSU1QT1JUCTB4MDMKKyNkZWZpbmUgT1BfUkVRX0lNUE9SVAkoT1BfUkVRVUVTVCB8IE9QX0lNUE9SVCkKKyNkZWZpbmUgT1BfUkVQX0lNUE9SVCAgIChPUF9SRVBMWSAgIHwgT1BfSU1QT1JUKQorCitzdHJ1Y3Qgb3BfaW1wb3J0X3JlcXVlc3QgeworCWNoYXIgYnVzaWRbU1lTRlNfQlVTX0lEX1NJWkVdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG9wX2ltcG9ydF9yZXBseSB7CisJc3RydWN0IHVzYl9kZXZpY2UgdWRldjsKKy8vCXN0cnVjdCB1c2JfaW50ZXJmYWNlIHVpbmZbXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgUEFDS19PUF9JTVBPUlRfUkVRVUVTVChwYWNrLCByZXF1ZXN0KSAgZG8ge1wKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgUEFDS19PUF9JTVBPUlRfUkVQTFkocGFjaywgcmVwbHkpICBkbyB7XAorCXBhY2tfdXNiX2RldmljZShwYWNrLCAmKHJlcGx5KS0+dWRldik7XAorfSB3aGlsZSAoMCkKKworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIEV4cG9ydCBhIFVTQiBkZXZpY2UgdG8gYSByZW1vdGUgaG9zdC4gKi8KKyNkZWZpbmUgT1BfRVhQT1JUCTB4MDYKKyNkZWZpbmUgT1BfUkVRX0VYUE9SVAkoT1BfUkVRVUVTVCB8IE9QX0VYUE9SVCkKKyNkZWZpbmUgT1BfUkVQX0VYUE9SVAkoT1BfUkVQTFkgICB8IE9QX0VYUE9SVCkKKworc3RydWN0IG9wX2V4cG9ydF9yZXF1ZXN0IHsKKwlzdHJ1Y3QgdXNiX2RldmljZSB1ZGV2OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG9wX2V4cG9ydF9yZXBseSB7CisJaW50IHJldHVybmNvZGU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKKyNkZWZpbmUgUEFDS19PUF9FWFBPUlRfUkVRVUVTVChwYWNrLCByZXF1ZXN0KSAgZG8ge1wKKwlwYWNrX3VzYl9kZXZpY2UocGFjaywgJihyZXF1ZXN0KS0+dWRldik7XAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBQQUNLX09QX0VYUE9SVF9SRVBMWShwYWNrLCByZXBseSkgIGRvIHtcCit9IHdoaWxlICgwKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiB1bi1FeHBvcnQgYSBVU0IgZGV2aWNlIGZyb20gYSByZW1vdGUgaG9zdC4gKi8KKyNkZWZpbmUgT1BfVU5FWFBPUlQJMHgwNworI2RlZmluZSBPUF9SRVFfVU5FWFBPUlQJKE9QX1JFUVVFU1QgfCBPUF9VTkVYUE9SVCkKKyNkZWZpbmUgT1BfUkVQX1VORVhQT1JUCShPUF9SRVBMWSAgIHwgT1BfVU5FWFBPUlQpCisKK3N0cnVjdCBvcF91bmV4cG9ydF9yZXF1ZXN0IHsKKwlzdHJ1Y3QgdXNiX2RldmljZSB1ZGV2OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG9wX3VuZXhwb3J0X3JlcGx5IHsKKwlpbnQgcmV0dXJuY29kZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgUEFDS19PUF9VTkVYUE9SVF9SRVFVRVNUKHBhY2ssIHJlcXVlc3QpICBkbyB7XAorCXBhY2tfdXNiX2RldmljZShwYWNrLCAmKHJlcXVlc3QpLT51ZGV2KTtcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIFBBQ0tfT1BfVU5FWFBPUlRfUkVQTFkocGFjaywgcmVwbHkpICBkbyB7XAorfSB3aGlsZSAoMCkKKworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIE5lZ290aWF0ZSBJUFNlYyBlbmNyeXB0aW9uIGtleS4gKHN0aWxsIG5vdCB1c2VkKSAqLworI2RlZmluZSBPUF9DUllQS0VZCTB4MDQKKyNkZWZpbmUgT1BfUkVRX0NSWVBLRVkJKE9QX1JFUVVFU1QgfCBPUF9DUllQS0VZKQorI2RlZmluZSBPUF9SRVBfQ1JZUEtFWQkoT1BfUkVQTFkgICB8IE9QX0NSWVBLRVkpCisKK3N0cnVjdCBvcF9jcnlwa2V5X3JlcXVlc3QgeworCS8qIDEyOGJpdCBrZXkgKi8KKwl1aW50MzJfdCBrZXlbNF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3Qgb3BfY3J5cGtleV9yZXBseSB7CisJdWludDMyX3QgX19yZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogUmV0cmlldmUgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgVVNCIGRldmljZXMuICovCisjZGVmaW5lIE9QX0RFVkxJU1QJMHgwNQorI2RlZmluZSBPUF9SRVFfREVWTElTVAkoT1BfUkVRVUVTVCB8IE9QX0RFVkxJU1QpCisjZGVmaW5lIE9QX1JFUF9ERVZMSVNUCShPUF9SRVBMWSAgIHwgT1BfREVWTElTVCkKKworc3RydWN0IG9wX2Rldmxpc3RfcmVxdWVzdCB7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3Qgb3BfZGV2bGlzdF9yZXBseSB7CisJdWludDMyX3QgbmRldjsKKwkvKiBmb2xsb3dlZCBieSByZXBseV9leHRyYVtdICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3Qgb3BfZGV2bGlzdF9yZXBseV9leHRyYSB7CisJc3RydWN0IHVzYl9kZXZpY2UgICAgdWRldjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSB1aW5mW107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIFBBQ0tfT1BfREVWTElTVF9SRVFVRVNUKHBhY2ssIHJlcXVlc3QpICBkbyB7XAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBQQUNLX09QX0RFVkxJU1RfUkVQTFkocGFjaywgcmVwbHkpICBkbyB7XAorCXBhY2tfdWludDMyX3QocGFjaywgJihyZXBseSktPm5kZXYpO1wKK30gd2hpbGUgKDApCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIERlY2xhcmUgUHJvdG90eXBlIEZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCit2b2lkIHBhY2tfdWludDMyX3QoaW50IHBhY2ssIHVpbnQzMl90ICpudW0pOwordm9pZCBwYWNrX3VpbnQxNl90KGludCBwYWNrLCB1aW50MTZfdCAqbnVtKTsKK3ZvaWQgcGFja191c2JfZGV2aWNlKGludCBwYWNrLCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldik7Cit2b2lkIHBhY2tfdXNiX2ludGVyZmFjZShpbnQgcGFjaywgc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVpbmYpOworCitzc2l6ZV90IHVzYmlwX3JlY3YoaW50IHNvY2tmZCwgdm9pZCAqYnVmZiwgc2l6ZV90IGJ1ZmZsZW4pOworc3NpemVfdCB1c2JpcF9zZW5kKGludCBzb2NrZmQsIHZvaWQgKmJ1ZmYsIHNpemVfdCBidWZmbGVuKTsKK2ludCB1c2JpcF9zZW5kX29wX2NvbW1vbihpbnQgc29ja2ZkLCB1aW50MzJfdCBjb2RlLCB1aW50MzJfdCBzdGF0dXMpOworaW50IHVzYmlwX3JlY3Zfb3BfY29tbW9uKGludCBzb2NrZmQsIHVpbnQxNl90ICpjb2RlKTsKK2ludCB1c2JpcF9zZXRfcmV1c2VhZGRyKGludCBzb2NrZmQpOworaW50IHVzYmlwX3NldF9ub2RlbGF5KGludCBzb2NrZmQpOworaW50IHVzYmlwX3NldF9rZWVwYWxpdmUoaW50IHNvY2tmZCk7CisKK2ludCB0Y3BfY29ubmVjdChjaGFyICpob3N0bmFtZSwgY2hhciAqc2VydmljZSk7CisKKyNkZWZpbmUgVVNCSVBfUE9SVCAzMjQwCisjZGVmaW5lIFVTQklQX1BPUlRfU1RSSU5HICIzMjQwIgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2Uvc3JjL3VzYmlwZC5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9zcmMvdXNiaXBkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM5ZmFhYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2Uvc3JjL3VzYmlwZC5jCkBAIC0wLDAgKzEsNTcwIEBACisvKgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA3IFRha2FoaXJvIEhpcm9mdWNoaQorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiLi4vY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKworI2lmZGVmIEhBVkVfTElCV1JBUAorI2luY2x1ZGUgPHRjcGQuaD4KKyNlbmRpZgorCisjZGVmaW5lIF9HTlVfU09VUkNFCisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisKKyNpbmNsdWRlICJ1c2JpcC5oIgorI2luY2x1ZGUgInVzYmlwX25ldHdvcmsuaCIKKworI2luY2x1ZGUgPGdsaWIuaD4KKworc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdID0gUEFDS0FHRV9TVFJJTkc7CisKKworc3RhdGljIGludCBzZW5kX3JlcGx5X2Rldmxpc3QoaW50IHNvY2tmZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB1c2JpcF9leHBvcnRlZF9kZXZpY2UgKmVkZXY7CisJc3RydWN0IG9wX2Rldmxpc3RfcmVwbHkgcmVwbHk7CisKKworCXJlcGx5Lm5kZXYgPSAwOworCisJLyogaG93IG1hbnkgZGV2aWNlcyBhcmUgZXhwb3J0ZWQgPyAqLworCWRsaXN0X2Zvcl9lYWNoX2RhdGEoc3R1Yl9kcml2ZXItPmVkZXZfbGlzdCwgZWRldiwgc3RydWN0IHVzYmlwX2V4cG9ydGVkX2RldmljZSkgeworCQlyZXBseS5uZGV2ICs9IDE7CisJfQorCisJZGJnKCIlZCBkZXZpY2VzIGFyZSBleHBvcnRlZCIsIHJlcGx5Lm5kZXYpOworCisJcmV0ID0gdXNiaXBfc2VuZF9vcF9jb21tb24oc29ja2ZkLCBPUF9SRVBfREVWTElTVCwgIFNUX09LKTsKKwlpZiAocmV0IDwgMCkgeworCQllcnIoInNlbmQgb3BfY29tbW9uIik7CisJCXJldHVybiByZXQ7CisJfQorCisJUEFDS19PUF9ERVZMSVNUX1JFUExZKDEsICZyZXBseSk7CisKKwlyZXQgPSB1c2JpcF9zZW5kKHNvY2tmZCwgKHZvaWQgKikgJnJlcGx5LCBzaXplb2YocmVwbHkpKTsKKwlpZiAocmV0IDwgMCkgeworCQllcnIoInNlbmQgb3BfZGV2bGlzdF9yZXBseSIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRsaXN0X2Zvcl9lYWNoX2RhdGEoc3R1Yl9kcml2ZXItPmVkZXZfbGlzdCwgZWRldiwgc3RydWN0IHVzYmlwX2V4cG9ydGVkX2RldmljZSkgeworCQlzdHJ1Y3QgdXNiX2RldmljZSBwZHVfdWRldjsKKworCQlkdW1wX3VzYl9kZXZpY2UoJmVkZXYtPnVkZXYpOworCQltZW1jcHkoJnBkdV91ZGV2LCAmZWRldi0+dWRldiwgc2l6ZW9mKHBkdV91ZGV2KSk7CisJCXBhY2tfdXNiX2RldmljZSgxLCAmcGR1X3VkZXYpOworCisJCXJldCA9IHVzYmlwX3NlbmQoc29ja2ZkLCAodm9pZCAqKSAmcGR1X3VkZXYsIHNpemVvZihwZHVfdWRldikpOworCQlpZiAocmV0IDwgMCkgeworCQkJZXJyKCJzZW5kIHBkdV91ZGV2Iik7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJZm9yIChpbnQgaT0wOyBpIDwgZWRldi0+dWRldi5iTnVtSW50ZXJmYWNlczsgaSsrKSB7CisJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSBwZHVfdWluZjsKKworCQkJZHVtcF91c2JfaW50ZXJmYWNlKCZlZGV2LT51aW5mW2ldKTsKKwkJCW1lbWNweSgmcGR1X3VpbmYsICZlZGV2LT51aW5mW2ldLCBzaXplb2YocGR1X3VpbmYpKTsKKwkJCXBhY2tfdXNiX2ludGVyZmFjZSgxLCAmcGR1X3VpbmYpOworCisJCQlyZXQgPSB1c2JpcF9zZW5kKHNvY2tmZCwgKHZvaWQgKikgJnBkdV91aW5mLCBzaXplb2YocGR1X3VpbmYpKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJZXJyKCJzZW5kIHBkdV91aW5mIik7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgcmVjdl9yZXF1ZXN0X2Rldmxpc3QoaW50IHNvY2tmZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBvcF9kZXZsaXN0X3JlcXVlc3QgcmVxOworCisJYnplcm8oJnJlcSwgc2l6ZW9mKHJlcSkpOworCisJcmV0ID0gdXNiaXBfcmVjdihzb2NrZmQsICh2b2lkICopICZyZXEsIHNpemVvZihyZXEpKTsKKwlpZiAocmV0IDwgMCkgeworCQllcnIoInJlY3YgZGV2bGlzdCByZXF1ZXN0Iik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXQgPSBzZW5kX3JlcGx5X2Rldmxpc3Qoc29ja2ZkKTsKKwlpZiAocmV0IDwgMCkgeworCQllcnIoInNlbmQgZGV2bGlzdCByZXBseSIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCByZWN2X3JlcXVlc3RfaW1wb3J0KGludCBzb2NrZmQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgb3BfaW1wb3J0X3JlcXVlc3QgcmVxOworCXN0cnVjdCBvcF9jb21tb24gcmVwbHk7CisJc3RydWN0IHVzYmlwX2V4cG9ydGVkX2RldmljZSAqZWRldjsKKwlpbnQgZm91bmQgPSAwOworCWludCBlcnJvciA9IDA7CisKKwliemVybygmcmVxLCBzaXplb2YocmVxKSk7CisJYnplcm8oJnJlcGx5LCBzaXplb2YocmVwbHkpKTsKKworCXJldCA9IHVzYmlwX3JlY3Yoc29ja2ZkLCAodm9pZCAqKSAmcmVxLCBzaXplb2YocmVxKSk7CisJaWYgKHJldCA8IDApIHsKKwkJZXJyKCJyZWN2IGltcG9ydCByZXF1ZXN0Iik7CisJCXJldHVybiAtMTsKKwl9CisKKwlQQUNLX09QX0lNUE9SVF9SRVFVRVNUKDAsICZyZXEpOworCisJZGxpc3RfZm9yX2VhY2hfZGF0YShzdHViX2RyaXZlci0+ZWRldl9saXN0LCBlZGV2LCBzdHJ1Y3QgdXNiaXBfZXhwb3J0ZWRfZGV2aWNlKSB7CisJCWlmICghc3RybmNtcChyZXEuYnVzaWQsIGVkZXYtPnVkZXYuYnVzaWQsIFNZU0ZTX0JVU19JRF9TSVpFKSkgeworCQkJZGJnKCJmb3VuZCByZXF1ZXN0ZWQgZGV2aWNlICVzIiwgcmVxLmJ1c2lkKTsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGZvdW5kKSB7CisJCS8qIHNob3VsZCBzZXQgVENQX05PREVMQVkgZm9yIHVzYmlwICovCisJCXVzYmlwX3NldF9ub2RlbGF5KHNvY2tmZCk7CisKKwkJLyogZXhwb3J0X2RldmljZSBuZWVkcyBhIFRDUC9JUCBzb2NrZXQgZGVzY3JpcHRvciAqLworCQlyZXQgPSB1c2JpcF9zdHViX2V4cG9ydF9kZXZpY2UoZWRldiwgc29ja2ZkKTsKKwkJaWYgKHJldCA8IDApCisJCQllcnJvciA9IDE7CisJfSBlbHNlIHsKKwkJaW5mbygibm90IGZvdW5kIHJlcXVlc3RlZCBkZXZpY2UgJXMiLCByZXEuYnVzaWQpOworCQllcnJvciA9IDE7CisJfQorCisKKwlyZXQgPSB1c2JpcF9zZW5kX29wX2NvbW1vbihzb2NrZmQsIE9QX1JFUF9JTVBPUlQsICghZXJyb3IgPyBTVF9PSyA6IFNUX05BKSk7CisJaWYgKHJldCA8IDApIHsKKwkJZXJyKCJzZW5kIGltcG9ydCByZXBseSIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKCFlcnJvcikgeworCQlzdHJ1Y3QgdXNiX2RldmljZSBwZHVfdWRldjsKKworCQltZW1jcHkoJnBkdV91ZGV2LCAmZWRldi0+dWRldiwgc2l6ZW9mKHBkdV91ZGV2KSk7CisJCXBhY2tfdXNiX2RldmljZSgxLCAmcGR1X3VkZXYpOworCisJCXJldCA9IHVzYmlwX3NlbmQoc29ja2ZkLCAodm9pZCAqKSAmcGR1X3VkZXYsIHNpemVvZihwZHVfdWRldikpOworCQlpZiAocmV0IDwgMCkgeworCQkJZXJyKCJzZW5kIGRldmluZm8iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisKKworc3RhdGljIGludCByZWN2X3BkdShpbnQgc29ja2ZkKQoreworCWludCByZXQ7CisJdWludDE2X3QgY29kZSA9IE9QX1VOU1BFQzsKKworCisJcmV0ID0gdXNiaXBfcmVjdl9vcF9jb21tb24oc29ja2ZkLCAmY29kZSk7CisJaWYgKHJldCA8IDApIHsKKwkJZXJyKCJyZWN2IG9wX2NvbW1vbiwgJWQiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCisJcmV0ID0gdXNiaXBfc3R1Yl9yZWZyZXNoX2RldmljZV9saXN0KCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAtMTsKKworCXN3aXRjaChjb2RlKSB7CisJCWNhc2UgT1BfUkVRX0RFVkxJU1Q6CisJCQlyZXQgPSByZWN2X3JlcXVlc3RfZGV2bGlzdChzb2NrZmQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPUF9SRVFfSU1QT1JUOgorCQkJcmV0ID0gcmVjdl9yZXF1ZXN0X2ltcG9ydChzb2NrZmQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPUF9SRVFfREVWSU5GTzoKKwkJY2FzZSBPUF9SRVFfQ1JZUEtFWToKKworCQlkZWZhdWx0OgorCQkJZXJyKCJ1bmtub3duIG9wX2NvZGUsICVkIiwgY29kZSk7CisJCQlyZXQgPSAtMTsKKwl9CisKKworCXJldHVybiByZXQ7Cit9CisKKworCisKK3N0YXRpYyB2b2lkIGxvZ19hZGRyaW5mbyhzdHJ1Y3QgYWRkcmluZm8gKmFpKQoreworCWludCByZXQ7CisJY2hhciBoYnVmW05JX01BWEhPU1RdOworCWNoYXIgc2J1ZltOSV9NQVhTRVJWXTsKKworCXJldCA9IGdldG5hbWVpbmZvKGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbiwgaGJ1Ziwgc2l6ZW9mKGhidWYpLAorCQkJc2J1Ziwgc2l6ZW9mKHNidWYpLCBOSV9OVU1FUklDSE9TVCB8IE5JX05VTUVSSUNTRVJWKTsKKwlpZiAocmV0KQorCQllcnIoImdldG5hbWVpbmZvLCAlcyIsIGdhaV9zdHJlcnJvcihyZXQpKTsKKworCWluZm8oImxpc3RlbiBhdCBbJXNdOiVzIiwgaGJ1Ziwgc2J1Zik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYWRkcmluZm8gKm15X2dldGFkZHJpbmZvKGNoYXIgKmhvc3QsIGludCBhaV9mYW1pbHkpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYWRkcmluZm8gaGludHMsICphaV9oZWFkOworCisJYnplcm8oJmhpbnRzLCBzaXplb2YoaGludHMpKTsKKworCWhpbnRzLmFpX2ZhbWlseSAgID0gYWlfZmFtaWx5OworCWhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisJaGludHMuYWlfZmxhZ3MgICAgPSBBSV9QQVNTSVZFOworCisJcmV0ID0gZ2V0YWRkcmluZm8oaG9zdCwgVVNCSVBfUE9SVF9TVFJJTkcsICZoaW50cywgJmFpX2hlYWQpOworCWlmIChyZXQpIHsKKwkJZXJyKCIlczogJXMiLCBVU0JJUF9QT1JUX1NUUklORywgZ2FpX3N0cmVycm9yKHJldCkpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gYWlfaGVhZDsKK30KKworI2RlZmluZSBNQVhTT0NLIDIwCitzdGF0aWMgaW50IGxpc3Rlbl9hbGxfYWRkcmluZm8oc3RydWN0IGFkZHJpbmZvICphaV9oZWFkLCBpbnQgbHNvY2tbXSkKK3sKKwlzdHJ1Y3QgYWRkcmluZm8gKmFpOworCWludCBuID0gMDsJCS8qIG51bWJlciBvZiBzb2NrZXRzICovCisKKwlmb3IgKGFpID0gYWlfaGVhZDsgYWkgJiYgbiA8IE1BWFNPQ0s7IGFpID0gYWktPmFpX25leHQpIHsKKwkJaW50IHJldDsKKworCQlsc29ja1tuXSA9IHNvY2tldChhaS0+YWlfZmFtaWx5LCBhaS0+YWlfc29ja3R5cGUsIGFpLT5haV9wcm90b2NvbCk7CisJCWlmIChsc29ja1tuXSA8IDApCisJCQljb250aW51ZTsKKworCQl1c2JpcF9zZXRfcmV1c2VhZGRyKGxzb2NrW25dKTsKKwkJdXNiaXBfc2V0X25vZGVsYXkobHNvY2tbbl0pOworCisJCWlmIChsc29ja1tuXSA+PSBGRF9TRVRTSVpFKSB7CisJCQljbG9zZShsc29ja1tuXSk7CisJCQlsc29ja1tuXSA9IC0xOworCQkJY29udGludWU7CisJCX0KKworCQlyZXQgPSBiaW5kKGxzb2NrW25dLCBhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4pOworCQlpZiAocmV0IDwgMCkgeworCQkJY2xvc2UobHNvY2tbbl0pOworCQkJbHNvY2tbbl0gPSAtMTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcmV0ID0gbGlzdGVuKGxzb2NrW25dLCBTT01BWENPTk4pOworCQlpZiAocmV0IDwgMCkgeworCQkJY2xvc2UobHNvY2tbbl0pOworCQkJbHNvY2tbbl0gPSAtMTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJbG9nX2FkZHJpbmZvKGFpKTsKKworCQkvKiBuZXh0IGlmIHN1Y2NlZWQgKi8KKwkJbisrOworCX0KKworCWlmIChuID09IDApIHsKKwkJZXJyKCJubyBzb2NrZXQgdG8gbGlzdGVuIHRvIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlkYmcoImxpc3RlbiAlZCBhZGRyZXNzJXMiLCBuLCAobj09MSk/IiI6ImVzIik7CisKKwlyZXR1cm4gbjsKK30KKworI2lmZGVmIEhBVkVfTElCV1JBUAorc3RhdGljIGludCB0Y3BkX2F1dGgoaW50IGNzb2NrKQoreworCWludCByZXQ7CisJc3RydWN0IHJlcXVlc3RfaW5mbyByZXF1ZXN0OworCisJcmVxdWVzdF9pbml0KCZyZXF1ZXN0LCBSUV9EQUVNT04sICJ1c2JpcGQiLCBSUV9GSUxFLCBjc29jaywgMCk7CisKKwlmcm9taG9zdCgmcmVxdWVzdCk7CisKKwlyZXQgPSBob3N0c19hY2Nlc3MoJnJlcXVlc3QpOworCWlmICghcmV0KQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IG15X2FjY2VwdChpbnQgbHNvY2spCit7CisJaW50IGNzb2NrOworCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNzOworCXNvY2tsZW5fdCBsZW4gPSBzaXplb2Yoc3MpOworCWNoYXIgaG9zdFtOSV9NQVhIT1NUXSwgcG9ydFtOSV9NQVhTRVJWXTsKKwlpbnQgcmV0OworCisJYnplcm8oJnNzLCBzaXplb2Yoc3MpKTsKKworCWNzb2NrID0gYWNjZXB0KGxzb2NrLCAoc3RydWN0IHNvY2thZGRyICopICZzcywgJmxlbik7CisJaWYgKGNzb2NrIDwgMCkgeworCQllcnIoImFjY2VwdCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0ID0gZ2V0bmFtZWluZm8oKHN0cnVjdCBzb2NrYWRkciAqKSAmc3MsIGxlbiwKKwkJCWhvc3QsIHNpemVvZihob3N0KSwgcG9ydCwgc2l6ZW9mKHBvcnQpLAorCQkJKE5JX05VTUVSSUNIT1NUIHwgTklfTlVNRVJJQ1NFUlYpKTsKKwlpZiAocmV0KQorCQllcnIoImdldG5hbWVpbmZvLCAlcyIsIGdhaV9zdHJlcnJvcihyZXQpKTsKKworI2lmZGVmIEhBVkVfTElCV1JBUAorCXJldCA9IHRjcGRfYXV0aChjc29jayk7CisJaWYgKHJldCA8IDApIHsKKwkJaW5mbygiZGVueSBhY2Nlc3MgZnJvbSAlcyIsIGhvc3QpOworCQljbG9zZShjc29jayk7CisJCXJldHVybiAtMTsKKwl9CisjZW5kaWYKKworCWluZm8oImNvbm5lY3RlZCBmcm9tICVzOiVzIiwgaG9zdCwgcG9ydCk7CisKKwlyZXR1cm4gY3NvY2s7Cit9CisKKworR01haW5Mb29wICptYWluX2xvb3A7CisKK3N0YXRpYyB2b2lkIHNpZ25hbF9oYW5kbGVyKGludCBpKQoreworCWRiZygic2lnbmFsIGNhdGNoZWQsIGNvZGUgJWQiLCBpKTsKKworCWlmIChtYWluX2xvb3ApCisJCWdfbWFpbl9sb29wX3F1aXQobWFpbl9sb29wKTsKK30KKworc3RhdGljIHZvaWQgc2V0X3NpZ25hbCh2b2lkKQoreworCXN0cnVjdCBzaWdhY3Rpb24gYWN0OworCisJYnplcm8oJmFjdCwgc2l6ZW9mKGFjdCkpOworCWFjdC5zYV9oYW5kbGVyID0gc2lnbmFsX2hhbmRsZXI7CisJc2lnZW1wdHlzZXQoJmFjdC5zYV9tYXNrKTsKKwlzaWdhY3Rpb24oU0lHVEVSTSwgJmFjdCwgTlVMTCk7CisJc2lnYWN0aW9uKFNJR0lOVCwgJmFjdCwgTlVMTCk7Cit9CisKKworZ2Jvb2xlYW4gcHJvY2Vzc19jb21taW5nX3JlcXVlc3QoR0lPQ2hhbm5lbCAqZ2lvLCBHSU9Db25kaXRpb24gY29uZGl0aW9uLAorCQkJCSBncG9pbnRlciBkYXRhIF9fYXR0cmlidXRlX18oKHVudXNlZCkpKQoreworCWludCByZXQ7CisKKwlpZiAoY29uZGl0aW9uICYgKEdfSU9fRVJSIHwgR19JT19IVVAgfCBHX0lPX05WQUwpKQorCQlnX2Vycm9yKCJ1bmtub3duIGNvbmRpdGlvbiIpOworCisKKwlpZiAoY29uZGl0aW9uICYgR19JT19JTikgeworCQlpbnQgbHNvY2s7CisJCWludCBjc29jazsKKworCQlsc29jayA9IGdfaW9fY2hhbm5lbF91bml4X2dldF9mZChnaW8pOworCisJCWNzb2NrID0gbXlfYWNjZXB0KGxzb2NrKTsKKwkJaWYgKGNzb2NrIDwgMCkKKwkJCXJldHVybiBUUlVFOworCisJCXJldCA9IHJlY3ZfcGR1KGNzb2NrKTsKKwkJaWYgKHJldCA8IDApCisJCQllcnIoInByb2Nlc3MgcmVjaWV2ZWQgcGR1Iik7CisKKwkJY2xvc2UoY3NvY2spOworCX0KKworCXJldHVybiBUUlVFOworfQorCisKK3N0YXRpYyB2b2lkIGRvX3N0YW5kYWxvbmVfbW9kZShnYm9vbGVhbiBkYWVtb25pemUpCit7CisJaW50IHJldDsKKwlpbnQgbHNvY2tbTUFYU09DS107CisJc3RydWN0IGFkZHJpbmZvICphaV9oZWFkOworCWludCBuOworCisKKworCXJldCA9IHVzYmlwX25hbWVzX2luaXQoVVNCSURTX0ZJTEUpOworCWlmIChyZXQpCisJCWVycigib3BlbiB1c2IuaWRzIik7CisKKwlyZXQgPSB1c2JpcF9zdHViX2RyaXZlcl9vcGVuKCk7CisJaWYgKHJldCA8IDApCisJCWdfZXJyb3IoImRyaXZlciBvcGVuIGZhaWxlZCIpOworCisJaWYgKGRhZW1vbml6ZSkgeworCQlpZiAoZGFlbW9uKDAsMCkgPCAwKQorCQkJZ19lcnJvcigiZGFlbW9uaXppbmcgZmFpbGVkOiAlcyIsIGdfc3RyZXJyb3IoZXJybm8pKTsKKworCQl1c2JpcF91c2Vfc3lzbG9nID0gMTsKKwl9CisKKwlzZXRfc2lnbmFsKCk7CisKKwlhaV9oZWFkID0gbXlfZ2V0YWRkcmluZm8oTlVMTCwgUEZfVU5TUEVDKTsKKwlpZiAoIWFpX2hlYWQpCisJCXJldHVybjsKKworCW4gPSBsaXN0ZW5fYWxsX2FkZHJpbmZvKGFpX2hlYWQsIGxzb2NrKTsKKwlpZiAobiA8PSAwKQorCQlnX2Vycm9yKCJubyBzb2NrZXQgdG8gbGlzdGVuIHRvIik7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgeworCQlHSU9DaGFubmVsICpnaW87CisKKwkJZ2lvID0gZ19pb19jaGFubmVsX3VuaXhfbmV3KGxzb2NrW2ldKTsKKwkJZ19pb19hZGRfd2F0Y2goZ2lvLCAoR19JT19JTiB8IEdfSU9fRVJSIHwgR19JT19IVVAgfCBHX0lPX05WQUwpLAorCQkJCXByb2Nlc3NfY29tbWluZ19yZXF1ZXN0LCBOVUxMKTsKKwl9CisKKworCWluZm8oInVzYmlwZCBzdGFydCAoJXMpIiwgdmVyc2lvbik7CisKKworCW1haW5fbG9vcCA9IGdfbWFpbl9sb29wX25ldyhGQUxTRSwgRkFMU0UpOworCWdfbWFpbl9sb29wX3J1bihtYWluX2xvb3ApOworCisJaW5mbygic2h1dGRvd24iKTsKKworCWZyZWVhZGRyaW5mbyhhaV9oZWFkKTsKKwl1c2JpcF9uYW1lc19mcmVlKCk7CisJdXNiaXBfc3R1Yl9kcml2ZXJfY2xvc2UoKTsKKworCXJldHVybjsKK30KKworCitzdGF0aWMgY29uc3QgY2hhciBoZWxwX21lc3NhZ2VbXSA9ICJcCitVc2FnZTogdXNiaXBkIFtvcHRpb25zXQkJCQlcblwKKwktRCwgLS1kYWVtb24JCQkJXG5cCisJCVJ1biBhcyBhIGRhZW1vbiBwcm9jZXNzLglcblwKKwkJCQkJCVxuXAorCS1kLCAtLWRlYnVnCQkJCVxuXAorCQlQcmludCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uCVxuXAorCQkJCQkJXG5cCisJLXYsIC0tdmVyc2lvbgkJCQlcblwKKwkJU2hvdyB2ZXJzaW9uLgkJCVxuXAorCQkJCQkJXG5cCisJLWgsIC0taGVscCAJCQkJXG5cCisJCVByaW50IHRoaXMgaGVscC4JCVxuIjsKKworc3RhdGljIHZvaWQgc2hvd19oZWxwKHZvaWQpCit7CisJcHJpbnRmKCIlcyIsIGhlbHBfbWVzc2FnZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIGxvbmdvcHRzW10gPSB7CisJeyJkYWVtb24iLAlub19hcmd1bWVudCwJTlVMTCwgJ0QnfSwKKwl7ImRlYnVnIiwJbm9fYXJndW1lbnQsCU5VTEwsICdkJ30sCisJeyJ2ZXJzaW9uIiwJbm9fYXJndW1lbnQsCU5VTEwsICd2J30sCisJeyJoZWxwIiwJbm9fYXJndW1lbnQsCU5VTEwsICdoJ30sCisJe05VTEwsCQkwLAkJTlVMTCwgIDB9Cit9OworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWdib29sZWFuIGRhZW1vbml6ZSA9IEZBTFNFOworCisJZW51bSB7CisJCWNtZF9zdGFuZGFsb25lX21vZGUgPSAxLAorCQljbWRfaGVscCwKKwkJY21kX3ZlcnNpb24KKwl9IGNtZCA9IGNtZF9zdGFuZGFsb25lX21vZGU7CisKKworCXVzYmlwX3VzZV9zdGRlcnIgPSAxOworCXVzYmlwX3VzZV9zeXNsb2cgPSAwOworCisJaWYgKGdldGV1aWQoKSAhPSAwKQorCQlnX3dhcm5pbmcoInJ1bm5pbmcgbm9uLXJvb3Q/Iik7CisKKwlmb3IgKDs7KSB7CisJCWludCBjOworCQlpbnQgaW5kZXggPSAwOworCisJCWMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAidmhkRCIsIGxvbmdvcHRzLCAmaW5kZXgpOworCisJCWlmIChjID09IC0xKQorCQkJYnJlYWs7CisKKwkJc3dpdGNoIChjKSB7CisJCQljYXNlICdkJzoKKwkJCQl1c2JpcF91c2VfZGVidWcgPSAxOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAndic6CisJCQkJY21kID0gY21kX3ZlcnNpb247CisJCQkJYnJlYWs7CisJCQljYXNlICdoJzoKKwkJCQljbWQgPSBjbWRfaGVscDsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ0QnOgorCQkJCWRhZW1vbml6ZSA9IFRSVUU7CisJCQkJYnJlYWs7CisJCQljYXNlICc/JzoKKwkJCQlzaG93X2hlbHAoKTsKKwkJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCQlkZWZhdWx0OgorCQkJCWVycigiZ2V0b3B0Iik7CisJCX0KKwl9CisKKwlzd2l0Y2ggKGNtZCkgeworCQljYXNlIGNtZF9zdGFuZGFsb25lX21vZGU6CisJCQlkb19zdGFuZGFsb25lX21vZGUoZGFlbW9uaXplKTsKKwkJCWJyZWFrOworCQljYXNlIGNtZF92ZXJzaW9uOgorCQkJcHJpbnRmKCIlc1xuIiwgdmVyc2lvbik7CisJCQlicmVhazsKKwkJY2FzZSBjbWRfaGVscDoKKwkJCXNob3dfaGVscCgpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlpbmZvKCJ1bmtub3duIGNtZCIpOworCQkJc2hvd19oZWxwKCk7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL3NyYy91dGlscy5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9zcmMvdXRpbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjQ0MTA4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9zcmMvdXRpbHMuYwpAQCAtMCwwICsxLDI1NSBAQAorLyoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyBUYWthaGlybyBIaXJvZnVjaGkKKyAqLworCisjaW5jbHVkZSAidXRpbHMuaCIKKworaW50IHJlYWRfaW50ZWdlcihjaGFyICpwYXRoKQoreworCWNoYXIgYnVmZlsxMDBdOworCWludCBmZDsKKwlpbnQgcmV0ID0gMDsKKworCWJ6ZXJvKGJ1ZmYsIHNpemVvZihidWZmKSk7CisKKwlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOworCWlmIChmZCA8IDApCisJCXJldHVybiAtMTsKKworCXJldCA9IHJlYWQoZmQsIGJ1ZmYsIHNpemVvZihidWZmKSk7CisJaWYgKHJldCA8IDApIHsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm4gLTE7CisJfQorCisJc3NjYW5mKGJ1ZmYsICIlZCIsICZyZXQpOworCisJY2xvc2UoZmQpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IHJlYWRfc3RyaW5nKGNoYXIgKnBhdGgsIGNoYXIgKnN0cmluZywgc2l6ZV90IGxlbikKK3sKKwlpbnQgZmQ7CisJaW50IHJldCA9IDA7CisJY2hhciAgKnA7CisKKwliemVybyhzdHJpbmcsIGxlbik7CisKKwlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOworCWlmIChmZCA8IDApIHsKKwkJc3RyaW5nID0gTlVMTDsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldCA9IHJlYWQoZmQsIHN0cmluZywgbGVuLTEpOworCWlmIChyZXQgPCAwKSB7CisJCXN0cmluZyA9IE5VTEw7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXAgPSBzdHJjaHIoc3RyaW5nLCAnXG4nKTsKKwkqcCA9ICdcMCc7CisKKwljbG9zZShmZCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdyaXRlX2ludGVnZXIoY2hhciAqcGF0aCwgaW50IHZhbHVlKQoreworCWludCBmZDsKKwlpbnQgcmV0OworCWNoYXIgYnVmZlsxMDBdOworCisJc25wcmludGYoYnVmZiwgc2l6ZW9mKGJ1ZmYpLCAiJWQiLCB2YWx1ZSk7CisKKwlmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpOworCWlmIChmZCA8IDApCisJCXJldHVybiAtMTsKKworCXJldCA9IHdyaXRlKGZkLCBidWZmLCBzdHJsZW4oYnVmZikpOworCWlmIChyZXQgPCAwKSB7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWNsb3NlKGZkKTsKKworCXJldHVybiAwOworfQorCitpbnQgcmVhZF9iQ29uZmlndXJhdGlvblZhbHVlKGNoYXIgKmJ1c2lkKQoreworCWNoYXIgcGF0aFtQQVRIX01BWF07CisKKwlzbnByaW50ZihwYXRoLCBQQVRIX01BWCwgIi9zeXMvYnVzL3VzYi9kZXZpY2VzLyVzL2JDb25maWd1cmF0aW9uVmFsdWUiLCBidXNpZCk7CisKKwlyZXR1cm4gcmVhZF9pbnRlZ2VyKHBhdGgpOworfQorCitpbnQgd3JpdGVfYkNvbmZpZ3VyYXRpb25WYWx1ZShjaGFyICpidXNpZCwgaW50IGNvbmZpZykKK3sKKwljaGFyIHBhdGhbUEFUSF9NQVhdOworCisJc25wcmludGYocGF0aCwgUEFUSF9NQVgsICIvc3lzL2J1cy91c2IvZGV2aWNlcy8lcy9iQ29uZmlndXJhdGlvblZhbHVlIiwgYnVzaWQpOworCisJcmV0dXJuIHdyaXRlX2ludGVnZXIocGF0aCwgY29uZmlnKTsKK30KKworaW50IHJlYWRfYk51bUludGVyZmFjZXMoY2hhciAqYnVzaWQpCit7CisJY2hhciBwYXRoW1BBVEhfTUFYXTsKKworCXNucHJpbnRmKHBhdGgsIFBBVEhfTUFYLCAiL3N5cy9idXMvdXNiL2RldmljZXMvJXMvYk51bUludGVyZmFjZXMiLCBidXNpZCk7CisKKwlyZXR1cm4gcmVhZF9pbnRlZ2VyKHBhdGgpOworfQorCitpbnQgcmVhZF9iRGV2aWNlQ2xhc3MoY2hhciAqYnVzaWQpCit7CisJY2hhciBwYXRoW1BBVEhfTUFYXTsKKworCXNucHJpbnRmKHBhdGgsIFBBVEhfTUFYLCAiL3N5cy9idXMvdXNiL2RldmljZXMvJXMvYkRldmljZUNsYXNzIiwgYnVzaWQpOworCisJcmV0dXJuIHJlYWRfaW50ZWdlcihwYXRoKTsKK30KKworaW50IGdldGRyaXZlcihjaGFyICpidXNpZCwgaW50IGNvbmYsIGludCBpbmZudW0sIGNoYXIgKmRyaXZlciwgc2l6ZV90IGxlbikKK3sKKwljaGFyIHBhdGhbUEFUSF9NQVhdOworCWNoYXIgbGlua3RvW1BBVEhfTUFYXTsKKwlpbnQgcmV0OworCisJc25wcmludGYocGF0aCwgUEFUSF9NQVgsICIvc3lzL2J1cy91c2IvZGV2aWNlcy8lczolZC4lZC9kcml2ZXIiLCBidXNpZCwgY29uZiwgaW5mbnVtKTsKKworCS8qIHJlYWRsaW5rIGRvZXMgbm90IGFkZCBOVUxMICovCisJYnplcm8obGlua3RvLCBzaXplb2YobGlua3RvKSk7CisJcmV0ID0gcmVhZGxpbmsocGF0aCwgbGlua3RvLCBzaXplb2YobGlua3RvKS0xKTsKKwlpZiAocmV0IDwgMCkgeworCQlzdHJuY3B5KGRyaXZlciwgIm5vbmUiLCBsZW4pOworCQlyZXR1cm4gLTE7CisJfSBlbHNlIHsKKwkJc3RybmNweShkcml2ZXIsIGJhc2VuYW1lKGxpbmt0byksIGxlbik7CisJCXJldHVybiAwOworCX0KK30KKworaW50IGdldGRldmljZW5hbWUoY2hhciAqYnVzaWQsIGNoYXIgKm5hbWUsIHNpemVfdCBsZW4pCit7CisJY2hhciBwYXRoW1BBVEhfTUFYXTsKKwljaGFyIGlkUHJvZHVjdFsxMF0sIGlkVmVuZG9yWzEwXTsKKworCXNucHJpbnRmKHBhdGgsIFBBVEhfTUFYLCAiL3N5cy9idXMvdXNiL2RldmljZXMvJXMvaWRWZW5kb3IiLCBidXNpZCk7CisJcmVhZF9zdHJpbmcocGF0aCwgaWRWZW5kb3IsIHNpemVvZihpZFZlbmRvcikpOworCisJc25wcmludGYocGF0aCwgUEFUSF9NQVgsICIvc3lzL2J1cy91c2IvZGV2aWNlcy8lcy9pZFByb2R1Y3QiLCBidXNpZCk7CisJcmVhZF9zdHJpbmcocGF0aCwgaWRQcm9kdWN0LCBzaXplb2YoaWRQcm9kdWN0KSk7CisKKwlpZiAoIWlkVmVuZG9yWzBdIHx8ICFpZFByb2R1Y3RbMF0pCisJCXJldHVybiAtMTsKKworCXNucHJpbnRmKG5hbWUsIGxlbiwgIiVzOiVzIiwgaWRWZW5kb3IsIGlkUHJvZHVjdCk7CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBNQVhMSU5FIDEwMAorCisvKiBpZiB0aGlzIGNhbm5vdCByZWFkIGEgd2hvbGUgbGluZSwgcmV0dXJuIC0xICovCitpbnQgcmVhZGxpbmUoaW50IHNvY2tmZCwgY2hhciAqYnVmZiwgaW50IGJ1ZmZsZW4pCit7CisJaW50IHJldDsKKwljaGFyIGM7CisJaW50IGluZGV4ID0gMDsKKworCisJd2hpbGUgKGluZGV4IDwgYnVmZmxlbikgeworCQlyZXQgPSByZWFkKHNvY2tmZCwgJmMsIHNpemVvZihjKSk7CisJCWlmIChyZXQgPCAwICYmIGVycm5vID09IEVJTlRSKQorCQkJY29udGludWU7CisJCWlmIChyZXQgPD0gMCkgeworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJYnVmZltpbmRleF0gPSBjOworCisJCWlmICggaW5kZXggPiAwICYmIGJ1ZmZbaW5kZXgtMV0gPT0gJ1xyJyAgJiYgYnVmZltpbmRleF0gPT0gJ1xuJykgeworCQkJLyogZW5kIG9mIGxpbmUgKi8KKwkJCWJ1ZmZbaW5kZXgtMV0gPSAnXDAnOwkvKiBnZXQgcmlkIG9mIGRlbGltaXRvciAqLworCQkJcmV0dXJuIGluZGV4OworCQl9IGVsc2UKKwkJCWluZGV4Kys7CisJfQorCisJcmV0dXJuIC0xOworfQorCisjaWYgMAoraW50IHdyaXRlbGluZShpbnQgc29ja2ZkLCBjaGFyICpzdHIsIGludCBzdHJsZW4pCit7CisJaW50IHJldDsKKwlpbnQgaW5kZXggPSAwOworCWludCBsZW47CisJY2hhciBidWZmW01BWExJTkVdOworCisJaWYgKHN0cmxlbiArIDMgPiBNQVhMSU5FKQorCQlyZXR1cm4gLTE7CisKKwlzdHJuY3B5KGJ1ZmYsIHN0ciwgc3RybGVuKTsKKwlidWZmW3N0cmxlbisxXSA9ICdccic7CisJYnVmZltzdHJsZW4rMl0gPSAnXG4nOworCWJ1ZmZbc3RybGVuKzNdID0gJ1wwJzsKKworCWxlbiA9IHN0cmxlbiArIDM7CisKKwl3aGlsZSAobGVuID4gMCkgeworCQlyZXQgPSB3cml0ZShzb2NrZmQsIGJ1ZmYraW5kZXgsIGxlbik7CisJCWlmIChyZXQgPD0gMCkgeworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJbGVuIC09IHJldDsKKwkJaW5kZXggKz0gcmV0OworCX0KKworCXJldHVybiBpbmRleDsKK30KKyNlbmRpZgorCitpbnQgd3JpdGVsaW5lKGludCBzb2NrZmQsIGNoYXIgKnN0ciwgaW50IHN0cmxlbikKK3sKKwlpbnQgcmV0OworCWludCBpbmRleCA9IDA7CisJaW50IGxlbjsKKwljaGFyIGJ1ZmZbTUFYTElORV07CisKKwlsZW4gPSBzdHJubGVuKHN0ciwgc3RybGVuKTsKKworCWlmIChzdHJsZW4gKyAyID4gTUFYTElORSkKKwkJcmV0dXJuIC0xOworCisJbWVtY3B5KGJ1ZmYsIHN0ciwgc3RybGVuKTsKKwlidWZmW3N0cmxlbl0gPSAnXHInOworCWJ1ZmZbc3RybGVuKzFdID0gJ1xuJzsJCS8qIHN0cmxlbisxIDw9IE1BWExJTkUtMSAqLworCisJbGVuID0gc3RybGVuICsgMjsKKworCXdoaWxlIChsZW4gPiAwKSB7CisJCXJldCA9IHdyaXRlKHNvY2tmZCwgYnVmZitpbmRleCwgbGVuKTsKKwkJaWYgKHJldCA8IDAgJiYgZXJybm8gPT0gRUlOVFIpCisJCQljb250aW51ZTsKKwkJaWYgKHJldCA8PSAwKSB7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlsZW4gLT0gcmV0OworCQlpbmRleCArPSByZXQ7CisJfQorCisJcmV0dXJuIGluZGV4OworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL3NyYy91dGlscy5oIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9zcmMvdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzI5YWU5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzZXJzcGFjZS9zcmMvdXRpbHMuaApAQCAtMCwwICsxLDM4IEBACisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiLi4vY29uZmlnLmgiCisjZW5kaWYKKworI2RlZmluZSBfR05VX1NPVVJDRQorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy91bi5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworI2luY2x1ZGUgPHN5c2ZzL2xpYnN5c2ZzLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisKKworLyogQmUgc3luYyB0byBrZXJuZWwgaGVhZGVyICovCisjZGVmaW5lIEJVU19JRF9TSVpFIDIwCisKK2ludCByZWFkX3N0cmluZyhjaGFyICpwYXRoLCBjaGFyICosIHNpemVfdCBsZW4pOworaW50IHJlYWRfaW50ZWdlcihjaGFyICpwYXRoKTsKK2ludCBnZXRkZXZpY2VuYW1lKGNoYXIgKmJ1c2lkLCBjaGFyICpuYW1lLCBzaXplX3QgbGVuKTsKK2ludCBnZXRkcml2ZXIoY2hhciAqYnVzaWQsIGludCBjb25mLCBpbnQgaW5mbnVtLCBjaGFyICpkcml2ZXIsIHNpemVfdCBsZW4pOworaW50IHJlYWRfYk51bUludGVyZmFjZXMoY2hhciAqYnVzaWQpOworaW50IHJlYWRfYkNvbmZpZ3VyYXRpb25WYWx1ZShjaGFyICpidXNpZCk7CitpbnQgd3JpdGVfaW50ZWdlcihjaGFyICpwYXRoLCBpbnQgdmFsdWUpOworaW50IHdyaXRlX2JDb25maWd1cmF0aW9uVmFsdWUoY2hhciAqYnVzaWQsIGludCBjb25maWcpOworaW50IHJlYWRfYkRldmljZUNsYXNzKGNoYXIgKmJ1c2lkKTsKK2ludCByZWFkbGluZShpbnQgc29ja2ZkLCBjaGFyICpzdHIsIGludCBzdHJsZW4pOworaW50IHdyaXRlbGluZShpbnQgc29ja2ZkLCBjaGFyICpidWZmLCBpbnQgYnVmZmxlbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL3VzYi5pZHMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNlcnNwYWNlL3VzYi5pZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFmODc0NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2Vyc3BhY2UvdXNiLmlkcwpAQCAtMCwwICsxLDEzMjA5IEBACisjCisjCUxpc3Qgb2YgVVNCIElEJ3MKKyMKKyMJTWFpbnRhaW5lZCBieSBTdGVwaGVuIEouIEdvd2R5IDxnb3dkeUBzbGFjLnN0YW5mb3JkLmVkdT4KKyMJSWYgeW91IGhhdmUgYW55IG5ldyBlbnRyaWVzLCBzZW5kIHRoZW0gdG8gdGhlIG1haW50YWluZXIuCisjCVNlbmQgZW50cmllcyBhcyBwYXRjaGVzIChkaWZmIC11IG9sZCBuZXcpLgorIwlUaGUgbGF0ZXN0IHZlcnNpb24gY2FuIGJlIG9idGFpbmVkIGZyb20KKyMJCWh0dHA6Ly93d3cubGludXgtdXNiLm9yZy91c2IuaWRzCisjCisjICRJZDogdXNiLmlkcyx2IDEuMzQ2IDIwMDgvMDQvMjMgMTM6NTE6NDYgZ293ZHkgRXhwICQKKyMKKworIyBWZW5kb3JzLCBkZXZpY2VzIGFuZCBpbnRlcmZhY2VzLiBQbGVhc2Uga2VlcCBzb3J0ZWQuCisKKyMgU3ludGF4OgorIyB2ZW5kb3IgIHZlbmRvcl9uYW1lCisjCWRldmljZSAgZGV2aWNlX25hbWUJCQkJPC0tIHNpbmdsZSB0YWIKKyMJCWludGVyZmFjZSAgaW50ZXJmYWNlX25hbWUJCTwtLSB0d28gdGFicworCiswMDAxICBGcnkncyBFbGVjdHJvbmljcworMDAwMiAgSW5ncmFtCiswMDAzICBDbHViIE1hYworMDAwNCAgTmVicmFza2EgRnVybml0dXJlIE1hcnQKKzAxNDUgIFVua25vd24KKwkwMTEyICBDYXJkIFJlYWRlcgorMDIwNCAgQ2hpcHNiYW5rIE1pY3JvZWxlY3Ryb25pY3MgQ28uLCBMdGQKKwk2MDI1ICBDQk0yMDgwIEZsYXNoIGRyaXZlIGNvbnRyb2xsZXIKKwk2MDI2ICBDQk0xMTgwIEZsYXNoIGRyaXZlIGNvbnRyb2xsZXIKKzAyYWQgIEhVTUFYIENvLiwgTHRkLgorCTEzOGMgIFBWUiBNYXNzIFN0b3JhZ2UKKzAzODYgIExUUworCTAwMDEgIFBTWCBmb3IgVVNCIENvbnZlcnRlcgorMDNlOCAgRW5kUG9pbnRzLCBJbmMuCisJMDAwNCAgU0U0MDEgV2ViQ2FtCisJMDAwOCAgMTAxIEV0aGVybmV0IFtrbHNpXQorCTAwMTUgIFVTQiBBVEFQSSBFbmNsb3N1cmUKKwkyMTIzICBTaVBpeCBTdHlsZUNhbSBEZWx1eGUKKwk4MDA0ICBBb3ggOTkwMDEKKzAzZTkgIFRoZXN5cyBNaWNyb2VsZWN0cm9uaWNzCiswM2VhICBEYXRhIEJyb2FkY2FzdGluZyBDb3JwLgorMDNlYiAgQXRtZWwgQ29ycC4KKwkyMDAyICBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJMjAxNSAgYXQ5MHVzYmtleSBzYW1wbGUgZmlybXdhcmUgKEhJRCBrZXlib2FyZCkKKwkyMDE4ICBhdDkwdXNia2V5IHNhbXBsZSBmaXJtd2FyZSAoQ0RDIEFDTSkKKwkyMDE5ICBzdGs1MjUgc2FtcGxlIGZpcm13YXJlIChtaWNyb3Bob25lKQorCTIwMWMgIGF0OTB1c2JrZXkgc2FtcGxlIGZpcm13YXJlIChISUQgbW91c2UpCisJMjAxZCAgYXQ5MHVzYmtleSBzYW1wbGUgZmlybXdhcmUgKEhJRCBnZW5lcmljKQorCTIwMjIgIGF0OTB1c2JrZXkgc2FtcGxlIGZpcm13YXJlIChjb21wb3NpdGUgZGV2aWNlKQorCTIxMDMgIEpUQUcgSUNFIG1rSUkKKwkyMTA0ICBBVlIgSVNQIG1rSUkKKwkyMTA3ICBBVlIgRHJhZ29uCisJMmZmYiAgYXQ5MHVzYiBBVlIgREZVIGJvb3Rsb2FkZXIKKwkyZmZkICBhdDg5YzUxMzAvYzUxMzEgREZVIGJvb3Rsb2FkZXIKKwkyZmZmICBhdDg5YzUxMzIvYzUxc25kMWMgREZVIGJvb3Rsb2FkZXIKKwkzMzAxICBhdDQzMzAxIDQtcG9ydCBIdWIKKwkzMzEyICA0LXBvcnQgSHViCisJNTYwMSAgYXQ3NmM1MTAgUHJpc20tSUkgODAyLjExYiBBY2Nlc3MgUG9pbnQKKwk1NjAzICBDaXNjbyA3OTIwIFdpRmkgSVAgUGhvbmUKKwk2MTI0ICBhdDkxc2FtIFNBTUJBIGJvb3Rsb2FkZXIKKwk3NjAzICBhdDc2YzUwM2EgRC1MaW5rIERXTC0xMjAgODAyLjExYiBBZGFwdGVyCisJNzYwNCAgRmFzdFZORVQKKwk3NjA1ICBhdDc2YzUwM2EgODAyLjExYiBBZGFwdGVyCisJNzYwNiAgYXQ3NmM1MDUgODAyLjExYiBBZGFwdGVyCisJNzYxMSAgYXQ3NmM1MTAgcmZtZDI5NDggODAyLjExYiBBY2Nlc3MgUG9pbnQKKwk3NjEzICBXTC0xMTMwIFVTQgorCTc2MTQgIEFUNzZjNTA1YSBXaXJlbGVzcyBBZGFwdGVyCiswM2VjICBJd2F0c3UgQW1lcmljYSwgSW5jLgorMDNlZCAgTWl0ZWwgQ29ycC4KKzAzZWUgIE1pdHN1bWkKKwkwMDAwICBDRC1SL1JXIERyaXZlCisJMjUwMSAgZUhvbWUgSW5mcmFyZWQgUmVjZWl2ZXIKKwkyNTAyICBlSG9tZSBJbmZyYXJlZCBSZWNlaXZlcgorCTU2MDkgIEphcGFuZXNlIEtleWJvYXJkCisJNjQxZiAgV0lGLTA0MDJDIEJsdWV0b290aCBBZGFwdGVyCisJNjQzOCAgQmx1ZXRvb3RoIERldmljZQorCTY0NDAgIFdNTC1DNTJBUFIgQmx1ZXRvb3RoIEFkYXB0ZXIKKwk2OTAxICBTbWFydERpc2sgRkRECisJNjkwMiAgRmxvcHB5IERpc2sgRHJpdmUKKwk3NTAwICBDRC1SL1JXCisJZmZmZiAgRG9uZ2xlIHdpdGggQmx1ZUNvcmUgaW4gREZVIG1vZGUKKzAzZjAgIEhld2xldHQtUGFja2FyZAorCTAwMDQgIERlc2tKZXQgODk1YworCTAwMTEgIE9mZmljZUpldCBHNTUKKwkwMDEyICBEZXNrSmV0IDExMjVDIFByaW50ZXIgUG9ydAorCTAwMjQgIEtVLTAzMTYgS2V5Ym9hcmQKKwkwMTAxICBTY2FuSmV0IDQxMDBjCisJMDEwMiAgUGhvdG9TbWFydCBTMjAKKwkwMTA0ICBEZXNrSmV0IDg4MGMvOTcwYworCTAxMDUgIFNjYW5KZXQgNDIwMGMKKwkwMTA3ICBDRC1Xcml0ZXIgUGx1cworCTAxMGMgIE11bHRpbWVkaWEgS2V5Ym9hcmQgSHViCisJMDExMSAgRzU1eGkgUHJpbnRlci9TY2FubmVyL0NvcGllcgorCTAxMTcgIExhc2VySmV0IDMyMDAKKwkwMTFjICBobjIxMHcgODAyLjExYiBBZGFwdGVyCisJMDExZCAgSW50ZWdyYXRlZCBCbHVldG9vdGggTW9kdWxlCisJMDEyMSAgSFA0OWcrIENhbGN1bGF0b3IKKwkwMTIyICBISUQgSW50ZXJuZXQgS2V5Ym9hcmQKKwkwMjAxICBTY2FuSmV0IDYyMDBjCisJMDIwMiAgUGhvdG9TbWFydCBTMjAKKwkwMjA0ICBEZXNrSmV0IDgxNWMKKwkwMjA1ICBTY2FuSmV0IDMzMDBjCisJMDIwNyAgQ0QtV3JpdGVyIFBsdXMgODIwMGUKKwkwMjBjICBNdWx0aW1lZGlhIEtleWJvYXJkCisJMDIxMSAgT2ZmaWNlSmV0IEc4NQorCTAyMTIgIERlc2tKZXQgMTIyMEMKKwkwMjE3ICBMYXNlckpldCAyMjAwCisJMDIxOCAgQVBPTExPIFAyNTAwLzI2MDAKKwkyNjI0ICBQb2xlIERpc3BsYXkgKEhQNTIyIDIgeCAyMCBMaW5lIERpc3BsYXkpCisJMDMwNCAgRGVza0pldCA4MTBjLzgxMmMKKwkwMzA1ICBTY2FuSmV0IDQzMDBjCisJMDMwNyAgQ0QtV3JpdGVyKyBDRC00ZQorCTAzMTEgIE9mZmljZUpldCBHODV4aQorCTAzMTIgIENvbG9yIElua2pldCBDUDE3MDAKKwkwMzE0ICBkZXNpZ25qZXQgMzAvMTMwIHNlcmllcworCTAzMTcgIExhc2VySmV0IDEyMDAKKwkwNDAxICBTY2FuSmV0IDUyMDBjCisJMDQwNCAgRGVza0pldCA4MzBjLzgzMmMKKwkwNDA1ICBTY2FuSmV0IDM0MDBjc2UKKwkwNDExICBPZmZpY2VKZXQgRzk1CisJMDQxMiAgUHJpbnRpbmcgU3VwcG9ydAorCTA0MTcgIExhc2VySmV0IDEyMDAgc2VyaWVzCisJMDUwNCAgRGVza0pldCA4ODVjCisJMDUwNSAgU2NhbkpldCAyMTAwYworCTA1MDcgIERWRCtSVworCTA1MGMgIDUyMTkgV2lyZWxlc3MgS2V5Ym9hcmQKKwkwNTExICBPZmZpY2VKZXQgSzYwCisJMDUxMiAgRGVja0pldCA0NTAKKwkwNTE3ICBMYXNlckpldCAxMDAwCisJMDUxZCAgaW50ZWdyYXRlZCBtb2R1bGUgd2l0aCBCbHVldG9vdGggd2lyZWxlc3MgdGVjaG5vbG9neS4KKwkwNjAxICBTY2FuSmV0IDYzMDBjCisJMDYwNCAgRGVza0pldCA4NDBjCisJMDYwNSAgU2NhbkpldCAyMjAwYworCTA2MTEgIE9mZmljZUpldCBLNjB4aQorCTA2MTIgIGJ1c2luZXNzIGlua2pldCAzMDAwCisJMDYyNCAgQmx1ZXRvb3RoIERvbmdsZQorCTA3MDEgIFNjYW5KZXQgNTMwMGMvNTM3MGMKKwkwNzA0ICBEZXNrSmV0IDgyNWMKKwkwNzA1ICBTY2FuSmV0IDQ0MDBjCisJMDcxMSAgT2ZmaWNlSmV0IEs4MAorCTA3MTIgIERlc2tKZXQgMTE4MGMKKwkwNzE0ICBQcmludGluZyBTdXBwb3J0CisJMDgwMSAgU2NhbkpldCA3NDAwYworCTA4MDQgIERlc2tKZXQgODE2YworCTA4MDUgIEhQNDQ3MEMKKwkwODExICBPZmZpY2VKZXQgSzgweGkKKwkwODE3ICBMYXNlckpldCAzMzAwCisJMDkwMSAgU2NhbkpldCAyMzAwYworCTA5MDQgIERlc2tKZXQgODQ1YworCTA5MTIgIFByaW50aW5nIFN1cHBvcnQKKwkwOTE3ICBMYXNlckpldCAzMzMwCisJMDkyNCAgTW9kdWxhciBTbWFydGNhcmQgS2V5Ym9hcmQKKwkwYTAxICBTY2FuSmV0IDI0MDBjCisJMGExNyAgY29sb3IgTGFzZXJKZXQgMzcwMAorCTBiMDEgIFNjYW5qZXQgODJ4MEMKKwkwYjE3ICBMYXNlcmpldCAyMzAwZAorCTBjMTcgIExhc2VySmV0IDEwMTAKKwkwYzI0ICBCbHVldG9vdGggRG9uZ2xlCisJMGQxMiAgT2ZmaWNlamV0IDkxMDAgc2VyaWVzCisJMGQxNyAgTGFzZXJKZXQgMTAxMgorCTBlMTcgIExhc2VySmV0IDEwMTUKKwkwZjExICBPZmZpY2VKZXQgVjQwCisJMGYxMiAgUHJpbnRpbmcgU3VwcG9ydAorCTBmMTcgIExhc2VySmV0IDExNTAKKwkxMDAxICBQaG90byBTY2FubmVyIDEwMDAKKwkxMDAyICBwaG90b3NtYXJ0IDE0MCBzZXJpZXMKKwkxMDA0ICBEZXNrSmV0IDk3MGMvOTcwY3NlCisJMTAwNSAgU2NhbkpldCA1NDAwYworCTEwMTEgIE9mZmljZUpldCBWNDB4aQorCTEwMTYgIEpvcm5hZGEgNTQ4IC8gaVBBUSBIVzY1MTUgUG9ja2V0IFBDCisJMTAxNyAgTGFzZXJKZXQgMTMwMAorCTEwMjQgIFNtYXJ0IENhcmQgS2V5Ym9hcmQKKwkxMTAyICBwaG90b3NtYXJ0IDI0MCBzZXJpZXMKKwkxMTA0ICBEZXNrSmV0IDk1OWMKKwkxMTA1ICBTY2FuSmV0IDU0NzBjCisJMTExMSAgb2ZmaWNlamV0IHY2MAorCTExMTYgIEpvcm5hZGEgNTY4IFBvY2tldCBQQworCTExMTcgIExhc2VySmV0IDEzMDBuCisJMTE1MSAgUFNDLTc1MHhpIFByaW50ZXIvU2Nhbm5lci9Db3BpZXIKKwkxMjAyICBQaG90b3NtYXJ0IDMyMCBTZXJpZXMKKwkxMjA0ICBEZXNrSmV0IDkzMGMKKwkxMjA1ICBTY2FuSmV0IDQ1MDBDLzU1NTBDCisJMTIxMSAgb2ZmaWNlamV0IHY2MHhpCisJMTIxNyAgTGFzZXJKZXQgMjMwMEwKKwkxMzAyICBQaG90b3NtYXJ0IDM3MCBTZXJpZXMKKwkxMzA1ICBTY2FuSmV0IDQ1NzBjCisJMTMxMSAgT2ZmaWNlSmV0IFYzMAorCTEzMTIgIERlc2tqZXQgNDYwCisJMTMxNyAgTGFzZXJKZXQgMTAwNQorCTE0MDUgIFNjYW5qZXQgMzY3MAorCTE0MTEgIFBTQyA3NTAKKwkxNDI0ICBmMjEwNSBNb25pdG9yIEh1YgorCTE1MDIgIFBob3Rvc21hcnQgNDIwIFNlcmllcworCTE1MDQgIERlc2tKZXQgOTIwYworCTE1MTEgIFBTQyA3NTB4aQorCTE1MTIgIFByaW50aW5nIFN1cHBvcnQKKwkxNTE3ICBjb2xvciBMYXNlckpldCAzNTAwCisJMTUyNCAgU21hcnQgQ2FyZCBLZXlib2FyZCAtIEtSCisJMTYwMiAgUGhvdG9zbWFydCAzMzAgU2VyaWVzCisJMTYwNCAgRGVza0pldCA5NDBjCisJMTYwNSAgU2NhbkpldCA1NTMwQyBQaG90b3NtYXJ0CisJMTYxMSAgcHNjIDc4MAorCTE2MTcgIExhc2VySmV0IDMwMTUKKwkxNjFkICBXaXJlbGVzcyBSZWNoYXJnZWFibGUgT3B0aWNhbCBNb3VzZSAoSElEKQorCTE2MjQgIFNtYXJ0IENhcmQgS2V5Ym9hcmQgLSBKUAorCTE3MDIgIFBob3Rvc21hcnQgMzgwIFNlcmllcworCTE3MDQgIGRlc2tqZXQgOTQ4QworCTE3MDUgIFNjYW5KZXQgNTU5MAorCTE3MTEgIHBzYyA3ODB4aQorCTE3MTIgIFByaW50aW5nIFN1cHBvcnQKKwkxNzE3ICBMYXNlckpldCAzMDIwCisJMTcxZCAgV2lyZWxlc3MgKEJsdWV0b290aCArIFdMQU4pIEludGVyZmFjZSBbSW50ZWdyYXRlZCBNb2R1bGVdCisJMTgwMSAgSW5ramV0IFAtMjAwMFUKKwkxODAyICBQaG90b3NtYXJ0IDQ3MCBTZXJpZXMKKwkxODA0ICBkZXNramV0IDkxNkMKKwkxODA1ICBTY2FuSmV0IDc2NTAKKwkxODExICBQU0MgNzIwCisJMTgxNyAgTGFzZXJKZXQgMzAzMAorCTE4MWQgIGludGVncmF0ZWQgbW9kdWxlIHdpdGggQmx1ZXRvb3RoIDIuMCB3aXJlbGVzcyB0ZWNobm9sb2d5LgorCTE5MDIgIFBob3Rvc21hcnQgQTQzMCBzZXJpZXMKKwkxOTA0ICBEZXNrSmV0IDM4MjAKKwkxOTExICBPZmZpY2VKZXQgVjQ1CisJMTkxNyAgTGFzZXJKZXQgMzM4MAorCTFhMDIgIFBob3Rvc21hcnQgQTUxMCBzZXJpZXMKKwkxYTExICBvZmZpY2VqZXQgNTEwMCBzZXJpZXMKKwkxYTE3ICBjb2xvciBMYXNlckpldCA0NjUwCisJMWIwMiAgUGhvdG9zbWFydCBBNjEwIHNlcmllcworCTFiMDQgIGRlc2tqZXQgMzgxMAorCTFiMDUgIFNjYW5KZXQgNDg1MEMvNDg5MEMKKwkxYzAyICBQaG90b3NtYXJ0IEE3MTAgc2VyaWVzCisJMWMxNyAgQ29sb3IgTGFzZXJKZXQgMjU1MGwKKwkxZDAyICBQaG90b3NtYXJ0IEEzMTAgc2VyaWVzCisJMWQxNyAgTGFzZXJKZXQgMTMyMAorCTFlMDIgIFBob3Rvc21hcnQgQTMyMCBQcmludGVyIHNlcmllcworCTFlMTEgIFBTQy05NTAKKwkxZTE3ICBMYXNlckpldCAxMTYwIHNlcmllcworCTFmMDIgIFBob3Rvc21hcnQgQTQ0MCBQcmludGVyIHNlcmllcworCTFmMTEgIFBTQyA5MjAKKwkxZjEyICBPZmZpY2VqZXQgUHJvIEs1MzAwCisJMWYxNyAgY29sb3IgTGFzZXJKZXQgNTU1MAorCTIwMDEgIEZsb3BweQorCTIwMDIgIEh1YgorCTIwMDQgIERlc2tKZXQgNjQwYworCTIwMDUgIFNjYW5KZXQgMzU3MGMKKwkyMDEyICBPZmZpY2VqZXQgUHJvIEs1NDAwCisJMjEwMiAgcGhvdG9zbWFydCA3MzQ1CisJMjEwNCAgRGVza0pldCA2MzBjCisJMjExMiAgT2ZmaWNlamV0IFBybyBMNzUwMAorCTIyMDIgIHBob3Rvc21hcnQgNzYwMCBzZXJpZXMKKwkyMjA1ICBTY2FuSmV0IDM1MDBjCisJMjIxMiAgT2ZmaWNlamV0IFBybyBMNzYwMAorCTIyMTcgIGNvbG9yIExhc2VySmV0IDk1MDAgTUZQCisJMjMwMiAgcGhvdG9zbWFydCA3NjAwIHNlcmllcworCTIzMDQgIERlc2tKZXQgNjU2YworCTIzMDUgIFNjYW5KZXQgMzk3MGMKKwkyMzExICBvZmZpY2VqZXQgZCBzZXJpZXMKKwkyMzEyICBPZmZpY2VqZXQgUHJvIEw3NzAwCisJMjMxNyAgTGFzZXJKZXQgNDM1MAorCTI0MDIgIHBob3Rvc21hcnQgNzcwMCBzZXJpZXMKKwkyNDA1ICBTY2FuSmV0IDQwNzAgUGhvdG9zbWFydAorCTI0MTcgIExhc2VySmV0IDQyNTAKKwkyNDI0ICBMUDE5NjUgMTkiIE1vbml0b3IgSHViCisJMjUwMiAgcGhvdG9zbWFydCA3NzAwIHNlcmllcworCTI1MDUgIFNjYW5KZXQgMzc3MAorCTI1MTIgIE9mZmljZWpldCBQcm8gTDczMDAKKwkyNTE3ICBMYXNlckpldCAyNDEwCisJMjUyNCAgTFAzMDY1IDMwIiBNb25pdG9yIEh1YgorCTI2MDIgIFBob3Rvc21hcnQgQTUyMCBzZXJpZXMKKwkyNjA1ICBTY2FuSmV0IDM4MDBjCisJMjYxMSAgb2ZmaWNlamV0IDcxMDAgc2VyaWVzCisJMjYxNyAgQ29sb3IgTGFzZXJKZXQgMjgyMCBTZXJpZXMKKwkyNzAyICBQaG90b3NtYXJ0IEE2MjAgc2VyaWVzCisJMjcwNCAgRGVza2pldCA5MTUKKwkyNzE3ICBDb2xvciBMYXNlckpldCAyODMwCisJMjgxMSAgUFNDLTIxMDAKKwkyODE3ICBDb2xvciBMYXNlckpldCAyODQwCisJMjkwMiAgUGhvdG9zbWFydCBBODIwIHNlcmllcworCTI5MTEgIFBTQyAyMjAwCisJMjkxNyAgTGFzZXJKZXQgMjQyMAorCTJhMTEgIFBTQyAyMTUwIHNlcmllcworCTJhMTcgIExhc2VySmV0IDI0MzAKKwkyYjExICBQU0MgMjE3MCBzZXJpZXMKKwkyYjE3ICBMYXNlckpldCAxMDIwCisJMmMxNyAgUHJpbnRpbmcgU3VwcG9ydAorCTJkMTEgIE9mZmljZUpldCA2MTEwCisJMmQxNyAgUHJpbnRpbmcgU3VwcG9ydAorCTJlMTEgIFBTQyAxMDAwCisJMmUxNyAgUHJpbnRpbmcgU3VwcG9ydAorCTJmMTEgIFBTQyAxMjAwCisJMmYxNyAgRVdTIDI2MDVkbgorCTMwMDIgIHBob3Rvc21hcnQgUDEwMDAKKwkzMDA0ICBkZXNramV0IDk4MGMKKwkzMDA1ICBTY2FuSmV0IDQ2NzB2CisJMzAxMSAgUFNDIDExMDAgc2VyaWVzCisJMzAxNyAgUHJpbnRpbmcgU3VwcG9ydAorCTMxMDIgIFBob3RvU21hcnQgUDExMDAgUHJpbnRlciB3LyBDYXJkIFJlYWRlcgorCTMxMDQgIERlc2tKZXQgOTYwYworCTMxMTEgIG9mZmljZWpldCA0MTAwIHNlcmllcworCTMxMTcgIEVXUyAyNjA1ZHRuCisJMzIwMiAgcGhvdG9zbWFydCAxMjE1CisJMzIxMSAgb2ZmaWNlamV0IDQxMDUgc2VyaWVzCisJMzIxNyAgTGFzZXJKZXQgMzA1MAorCTMzMDIgIHBob3Rvc21hcnQgMTIxOAorCTMzMDQgIERlc2tKZXQgOTkwYworCTMzMTcgIExhc2VySmV0IDMwNTIKKwkzNDAyICBwaG90b3NtYXJ0IDExMTUKKwkzNDA0ICBEZXNrSmV0IDYxMjIKKwkzNDE3ICBMYXNlckpldCAzMDU1CisJMzUwMiAgcGhvdG9zbWFydCAyMzAKKwkzNTA0ICBEZXNrSmV0IDYxMjdjCisJMzUxMSAgUFNDIDIzMDAKKwkzNTE3ICBMYXNlckpldCAzMzkwCisJMzYwMiAgcGhvdG9zbWFydCAxMzE1CisJMzYxMSAgUFNDIDI0MTAgUGhvdG9zbWFydAorCTM2MTcgIEVXUyAyNjA1CisJMzcxMSAgUFNDIDI1MDAKKwkzNzE3ICBFV1MgVVBECisJMzgwMiAgcGhvdG9zbWFydCAxMDAKKwkzODE3ICBMYXNlckpldCBQMjAxNSBTZXJpZXMKKwkzOTAyICBwaG90b3NtYXJ0IDEzMAorCTNhMDIgIHBob3Rvc21hcnQgNzE1MAorCTNhMTEgIE9mZmljZUpldCA1NTAwIHNlcmllcworCTNhMTcgIFByaW50aW5nIFN1cHBvcnQKKwkzYjAyICBwaG90b3NtYXJ0IDcxNTB+CisJM2IxMSAgUFNDIDEzMDAgc2VyaWVzCisJM2IxNyAgTGFzZXJKZXQgTTEwMDUgTUZQCisJM2MwMiAgUGhvdG9TbWFydCA3MzUwCisJM2MxMSAgUFNDIDEzNTgKKwkzYzE3ICBFV1MgVVBECisJM2QwMiAgcGhvdG9zbWFydCA3MzUwfgorCTNkMTEgIE9mZmljZUpldCA0MjE1CisJM2UwMiAgcGhvdG9zbWFydCA3NTUwCisJM2YwMiAgcGhvdG9zbWFydCA3NTUwfgorCTNmMTEgIFBTQy0xMzE1L1BTQy0xMzE3CisJNDAwMiAgUGhvdG9TbWFydCA3MjAgLyBQaG90b1NtYXJ0IDkzNSAoc3RvcmFnZSkKKwk0MDA0ICBjcDExNjAKKwk0MTAyICBQaG90b1NtYXJ0IDYxOAorCTQxMDUgIFNjYW5KZXQgNDM3MAorCTQxMTEgIE9mZmljZWpldCA3MjAwIHNlcmllcworCTQxMTcgIFByaW50aW5nIFN1cHBvcnQKKwk0MjAyICBQaG90b1NtYXJ0IDgxMgorCTQyMDUgIFNjYW5qZXQgRzMwMTAKKwk0MjExICBPZmZpY2VqZXQgNzMwMCBzZXJpZXMKKwk0MjE3ICBFV1MgQ00xMDE1CisJNDMwMiAgUGhvdG9TbWFydCA4NTAgKHB0cCkKKwk0MzExICBPZmZpY2VqZXQgNzQwMCBzZXJpZXMKKwk0MzE3ICBDb2xvciBMYXNlckpldCBDTTEwMTcKKwk0NDAyICBQaG90b1NtYXJ0IDkzNSAocHRwKQorCTQ0MTcgIEVXUyBVUEQKKwk0NTAyICBQaG90b1NtYXJ0IDk0NSAoUFRQIG1vZGUpCisJNDUwNSAgU2NhbkpldCBHNDAxMAorCTQ1MTEgIFBob3Rvc21hcnQgMjYwMAorCTQ1MTcgIEVXUyBVUEQKKwk0NjA1ICBTY2FuSmV0IEc0MDUwCisJNDYxMSAgUGhvdG9zbWFydCAyNzAwCisJNDgxMSAgUFNDIDE2MDAKKwk0OTExICBQU0MgMjM1MAorCTRiMTEgIE9mZmljZWpldCA2MjAwCisJNGMxMSAgUFNDIDE1MDAgc2VyaWVzCisJNGMxNyAgRVdTIFVQRAorCTRkMTEgIFBTQyAxNDAwCisJNGQxNyAgRVdTIFVQRAorCTRlMTEgIFBob3Rvc21hcnQgMjU3MCBzZXJpZXMKKwk0ZjExICBPZmZpY2VqZXQgNTYwMCAoVVNCSFVCKQorCTUwMDQgIERlc2tKZXQgOTk1YworCTUwMTEgIFBob3Rvc21hcnQgMzEwMCBTZXJpZXMKKwk1MDE3ICBFV1MgVVBECisJNTExMSAgUGhvdG9zbWFydCAzMjAwIFNlcmllcworCTUyMTEgIFBob3Rvc21hcnQgMzMwMCBTZXJpZXMKKwk1MzExICBPZmZpY2VqZXQgNjMwMAorCTU0MTEgIE9mZmljZWpldCA0MzAwCisJNTUxMSAgRGVza2pldCBGMzAwIHNlcmllcworCTU2MTEgIFBob3RvU21hcnQgQzMxODAKKwk1NjE3ICBMYXNlckpldCBNMTEyMCBNRlAKKwk1NzExICBQaG90b3NtYXJ0IEM0MTAwIHNlcmllcworCTU3MTcgIExhc2VySmV0IE0xMTIwbiBNRlAKKwk1ODExICBQaG90b3NtYXJ0IEM1MTAwIHNlcmllcworCTU4MTcgIExhc2VySmV0IE0xMzE5ZiBNRlAKKwk1OTExICBQaG90b1NtYXJ0IEM2MTgwCisJNWExMSAgUGhvdG9zbWFydCBDNzEwMCBzZXJpZXMKKwk1YjExICBPZmZpY2VqZXQgSjIxMDAgU2VyaWVzCisJNWMxMSAgUGhvdG9zbWFydCBDNDIwMCBQcmludGVyIHNlcmllcworCTVkMTEgIFBob3Rvc21hcnQgQzUyMDAgc2VyaWVzCisJNWUxMSAgUGhvdG9zbWFydCBENzQwMCBzZXJpZXMKKwk2MDA0ICBEZXNrSmV0IDU1NTAKKwk2MTAyICBIZXdsZXR0IFBhY2thcmQgRGlnaXRhbCBDYW1lcmEKKwk2MTA0ICBEZXNrSmV0IDU2NTBjCisJNjExNyAgY29sb3IgTGFzZXJKZXQgMzU1MAorCTYyMDIgIFBob3RvU21hcnQgMjE1CisJNjIwNCAgRGVza0pldCA1MTUwYworCTYyMTcgIENvbG9yIExhc2VySmV0IDQ3MDAKKwk2MzAyICBQaG90b1NtYXJ0IDMxOC82MTIKKwk2MzE3ICBDb2xvciBMYXNlckpldCA0NzMwbWZwCisJNjQwMiAgUGhvdG9TbWFydCA3MTUgKHB0cCkKKwk2NDExICBQaG90b3NtYXJ0IEM4MTAwIHNlcmllcworCTY0MTcgIExhc2VySmV0IDUyMDAKKwk2NTAyICBQaG90b1NtYXJ0IDEyMCAocHRwKQorCTY1MTEgIFBob3Rvc21hcnQgQzcyMDAgc2VyaWVzCisJNjYwMiAgUGhvdG9TbWFydCAzMjAKKwk2NjExICBQaG90b3NtYXJ0IEM0MzgwIHNlcmllcworCTY2MTcgIExhc2VySmV0IDUyMDBMCisJNjcwMiAgUGhvdG9TbWFydCA3MjAgKHB0cCkKKwk2NzE3ICBDb2xvciBMYXNlckpldCAzMDAwCisJNjgwMiAgUGhvdG9TbWFydCA2MjAgKHB0cCkKKwk2ODExICBQaG90b3NtYXJ0IEQ1MzAwIHNlcmllcworCTY4MTcgIENvbG9yIExhc2VySmV0IDM4MDAKKwk2OTExICBQaG90b3NtYXJ0IEQ3MjAwIHNlcmllcworCTY5MTcgIENvbG9yIExhc2VySmV0IDM2MDAKKwk2YTAyICBQaG90b1NtYXJ0IDczNSAocHRwKQorCTZhMTEgIFBob3Rvc21hcnQgQzYyMDAgc2VyaWVzCisJNmExNyAgTGFzZXJKZXQgNDI0MAorCTZiMDIgIFBob3RvU21hcnQgUjcwNyAoUFRQIG1vZGUpCisJNmMxNyAgQ29sb3IgTGFzZXJKZXQgNDYxMAorCTZmMTcgIENvbG9yIExhc2VySmV0IENQNjAxNSBzZXJpZXMKKwk3MDA0ICBEZXNrSmV0IDMzMjBjCisJNzEwMiAgUGhvdG9TbWFydCA2MzUgKFBUUCBtb2RlKQorCTcxMDQgIERlc2tKZXQgMzQyMGMKKwk3MTE3ICBDTTgwNjAgQ29sb3IgTUZQIHdpdGggRWRnZWxpbmUgVGVjaG5vbG9neQorCTcyMDIgIFBob3RvU21hcnQgNDN4IChwdHApCisJNzIwNCAgRGVza0pldCAzNnh4CisJNzIxNyAgTGFzZXJKZXQgTTUwMzUgTUZQCisJNzMwMiAgUGhvdG9TbWFydCBNMzA3IChQVFAgbW9kZSkKKwk3MzA0ICBEZXNrSmV0IDM1eHgKKwk3MzE3ICBMYXNlckpldCBQMzAwNQorCTc0MDQgIFByaW50aW5nIFN1cHBvcnQKKwk3NDE3ICBMYXNlckpldCBNNDM0NSBNRlAKKwk3NTA0ICBQcmludGluZyBTdXBwb3J0CisJNzUxNyAgTGFzZXJKZXQgTTMwMzUgTUZQCisJNzYwNCAgRGVza2pldCAzOTQwCisJNzYxNyAgTGFzZXJKZXQgUDMwMDQKKwk3NzAyICBQaG90b1NtYXJ0IFI4MTcgKFBUUCBtb2RlKQorCTc3MDQgIERlc2tqZXQgRDQxMDAKKwk3NzE3ICBDTTgwNTAgQ29sb3IgTUZQIHdpdGggRWRnZWxpbmUgVGVjaG5vbG9neQorCTc4MDQgIERlc2tqZXQgRDEzNjAKKwk3ODE3ICBDb2xvciBMYXNlckpldCBDUDM1MDUKKwk3OTE3ICBMYXNlckpldCBNNTAyNSBNRlAKKwk3YTAyICBQaG90b1NtYXJ0IE00MTUgKFBUUCBtb2RlKQorCTdhMTcgIExhc2VySmV0IE0zMDI3IE1GUAorCTdiMDIgIFBob3RvU21hcnQgTTIzIChQVFAgbW9kZSkKKwk3YjE3ICBDb2xvciBMYXNlckpldCBDUDQwMDUKKwk3YzE3ICBDb2xvciBMYXNlckpldCBDTTYwNDAgU2VyaWVzCisJN2QwNCAgRGVza2pldCBGMjEwMCBQcmludGVyIHNlcmllcworCTdkMTcgIENvbG9yIExhc2VySmV0IENNNDczMCBNRlAKKwk3ZTA0ICBEZXNramV0IEY0MTAwIFByaW50ZXIgc2VyaWVzCisJODAxNyAgTGFzZXJKZXQgUDQ1MTUKKwk4MTA0ICBQcmludGluZyBTdXBwb3J0CisJODExNyAgTGFzZXJKZXQgUDQwMTUKKwk4MTFjICBFdGhlcm5ldCBITjIxMEUKKwk4MjA0ICBQcmludGluZyBTdXBwb3J0CisJODIxNyAgTGFzZXJKZXQgUDQwMTQKKwk4MzE3ICBMYXNlckpldCBNOTA1MCBNRlAKKwk4NDA0ICBEZXNramV0IDY4MDAgU2VyaWVzCisJODQxNyAgTGFzZXJKZXQgTTkwNDAgTUZQCisJODUwNCAgRGVza2pldCA2NjAwIFNlcmllcworCTg2MDQgIERlc2tqZXQgNTQ0MAorCTg3MDQgIGRlc2tqZXQgNTkwMCBzZXJpZXMKKwk4ODA0ICBEZXNramV0IDY5ODAgU2VyaWVzCisJODkwNCAgRGVza2pldCA2OTQwIFNlcmllcworCTkwMDIgIFBob3Rvc21hcnQgTTQzNworCTkxMDIgIFBob3Rvc21hcnQgTTUzNworCTkzMDIgIFBob3Rvc21hcnQgUjkzMCBzZXJpZXMKKwk5NDAyICBQaG90b3NtYXJ0IFI4MzcKKwk5NTAyICBQaG90b3NtYXJ0IFI4NDAgc2VyaWVzCisJOTYwMiAgUGhvdG9zbWFydCBNNzMwIHNlcmllcworCTk3MDIgIFBob3Rvc21hcnQgUjc0MCBzZXJpZXMKKwk5ODAyICBQaG90b3NtYXJ0IE16NjAgc2VyaWVzCisJOTkwMiAgUGhvdG9zbWFydCBNNjMwIHNlcmllcworCTlhMDIgIFBob3Rvc21hcnQgRTMzMCBzZXJpZXMKKwk5YjAyICBQaG90b3NtYXJ0IE01NDAgc2VyaWVzCisJOWMwMiAgUGhvdG9zbWFydCBNNDQwIHNlcmllcworCWEwMDQgIERlc2tKZXQgNTg1MGMKKwliMDAyICBwaG90b3NtYXJ0IDcyMDAgc2VyaWVzCisJYjEwMiAgcGhvdG9zbWFydCA3MjAwIHNlcmllcworCWIyMDIgIHBob3Rvc21hcnQgNzYwMCBzZXJpZXMKKwliMzAyICBwaG90b3NtYXJ0IDc2MDAgc2VyaWVzCisJYjQwMiAgcGhvdG9zbWFydCA3NzAwIHNlcmllcworCWI1MDIgIHBob3Rvc21hcnQgNzcwMCBzZXJpZXMKKwliNjAyICBwaG90b3NtYXJ0IDc5MDAgc2VyaWVzCisJYjcwMiAgcGhvdG9zbWFydCA3OTAwIHNlcmllcworCWI4MDIgIFBob3Rvc21hcnQgNzQwMCBTZXJpZXMKKwliOTAyICBQaG90b3NtYXJ0IDc4MDAgU2VyaWVzCisJYmEwMiAgUGhvdG9zbWFydCA4MTAwIFNlcmllcworCWJiMDIgIFBob3Rvc21hcnQgODQwMCBTZXJpZXMKKwliYzAyICBQaG90b3NtYXJ0IDg3MDAgU2VyaWVzCisJYmQwMiAgUGhvdG9zbWFydCBQcm8gQjkxMDAgc2VyaWVzCisJYmVmNCAgTkVDIFBpY3R5NzYwCisJYzAwMiAgUGhvdG9zbWFydCA3ODAwIFNlcmllcworCWMxMDIgIFBob3Rvc21hcnQgODAwMCBTZXJpZXMKKwljMjAyICBQaG90b3NtYXJ0IDgyMDAgU2VyaWVzCisJYzMwMiAgRGVza2pldCBEMjMwMAorCWM0MDIgIFBob3Rvc21hcnQgRDUxMDAgc2VyaWVzCisJYzUwMiAgUGhvdG9zbWFydCBENjEwMCBzZXJpZXMKKwljNjAyICBQaG90b3NtYXJ0IEQ3MTAwIHNlcmllcworCWM3MDIgIFBob3Rvc21hcnQgRDczMDAgc2VyaWVzCisJYzgwMiAgUGhvdG9zbWFydCBENTA2MCBQcmludGVyCisJZDEwNCAgQmx1ZXRvb3RoIERvbmdsZQorCWVmYmUgIE5FQyBQaWN0eTkwMAorCWYwYmUgIE5FQyBQaWN0eTkyMAorCWYxYmUgIE5FQyBQaWN0eTgwMAorMDNmMSAgR2Vub2EgVGVjaG5vbG9neQorMDNmMiAgT2FrIFRlY2hub2xvZ3ksIEluYy4KKzAzZjMgIEFkYXB0ZWMsIEluYy4KKwkwMDIwICBBV04tODAyMCBXTEFOCisJMDA4MCAgQVZDLTExMDAgQXVkaW8gQ2FwdHVyZQorCTAwODMgIEFWQy0yMjAwIERldmljZQorCTAwODcgIEFWQy0yMjEwIExvYWRlcgorCTAwODggIEFWQy0yMjEwIERldmljZQorCTAwOGIgIEFWQy0yMzEwIExvYWRlcgorCTAwOGMgIEFWQy0yMzEwIERldmljZQorCTAwOTQgIGVIb21lIEluZnJhcmVkIFJlY2VpdmVyCisJMDA5YiAgQVZDLTE0MTAgR2FtZUJyaWRnZSBUViBOVFNDCisJMjAwMCAgVVNCWGNoYW5nZQorCTIwMDEgIFVTQlhjaGFuZ2UgQWRhcHRlcgorCTIwMDIgIFVTQjItWGNoYW5nZQorCTIwMDMgIFVTQjItWGNoYW5nZSBBZGFwdGVyCisJYWRjYyAgQ29tcG9zaXRlIERldmljZSBTdXBwb3J0CiswM2Y0ICBEaWVib2xkLCBJbmMuCiswM2Y1ICBTaWVtZW5zIEVsZWN0cm9tZWNoYW5pY2FsCiswM2Y4ICBFcHNvbiBJbWFnaW5nIFRlY2hub2xvZ3kgQ2VudGVyCiswM2Y5ICBLZXlUcm9uaWMgQ29ycC4KKwkwMTAwICBLZXlib2FyZAorCTAxMDEgIEtleWJvYXJkCisJMDEwMiAgS2V5Ym9hcmQgTW91c2UKKzAzZmIgIE9QVGksIEluYy4KKzAzZmMgIEVsaXRlZ3JvdXAgQ29tcHV0ZXIgU3lzdGVtcworMDNmZCAgWGlsaW54LCBJbmMuCiswM2ZlICBGYXJhbGxvbiBDb211bmljYXRpb25zCiswNDAwICBOYXRpb25hbCBTZW1pY29uZHVjdG9yIENvcnAuCisJMDgwNyAgQmx1ZXRvb3RoIERvbmdsZQorCTA4MGEgIEJsdWV0b290aCBEZXZpY2UKKwkxMDAwICBNdXN0ZWsgQmVhclBhdyAxMjAwIFNjYW5uZXIKKwkxMDAxICBNdXN0ZWsgQmVhclBhdyAyNDAwIFNjYW5uZXIKKwkxMjM3ICBIdWIKKwlhMDAwICBTbWFydCBEaXNwbGF5IFJlZmVyZW5jZSBEZXZpY2UKKwljMzViICBQcmludGluZyBTdXBwb3J0CiswNDAxICBOYXRpb25hbCBSZWdpc3RyeSwgSW5jLgorMDQwMiAgQUxpIENvcnAuCisJNTQ2MiAgTTU0NjIgSURFIENvbnRyb2xsZXIKKwk1NjAyICBWaWRlbyBDYW1lcmEgQ29udHJvbGxlcgorCTU2MDMgIFVTQiAyLjAgUS10ZWMgV2ViY2FtIDMwMAorCTU2MjEgIFVTQiAyLjAgU3RvcmFnZSBEZXZpY2UKKwk1NjIzICBWaXN0YVNjYW4gQXN0cmEgMzYwMAorCTU2MjcgIFdlbGxhbmQgTUUtNzQwUFMgVVNCMiAzLjUiIFBvd2VyIFNhdmluZyBFbmNsb3N1cmUKKwk1NjMyICBVU0IgMi4wIEhvc3QtdG8tSG9zdCBMaW5rCisJNTYzNSAgVVNCIDIuMCBGbGFzaCBDYXJkIFJlYWRlcgorCTU2MzYgIFVTQiAyLjAgU3RvcmFnZSBEZXZpY2UKKwk1NjM3ICBNNTYzNyBJREUgQ29udHJvbGxlcgorMDQwMyAgRnV0dXJlIFRlY2hub2xvZ3kgRGV2aWNlcyBJbnRlcm5hdGlvbmFsLCBMdGQKKwkwMDAwICBINFNNSyA3IFBvcnQgSHViCisJMDIzMiAgU2VyaWFsIENvbnZlcnRlcgorCTYwMDEgIEZUMjMyIFVTQi1TZXJpYWwgKFVBUlQpIElDCisJNjAwNyAgU2VyaWFsIENvbnZlcnRlcgorCTYwMDggIFNlcmlhbCBDb252ZXJ0ZXIKKwk2MDA5ICBTZXJpYWwgQ29udmVydGVyCisJNjAxMCAgRlQyMjMyQyBEdWFsIFVTQi1VQVJUL0ZJRk8gSUMKKwk4MDQwICA0IFBvcnQgSHViCisJODA3MCAgNyBQb3J0IEh1YgorCTgzNzAgIDcgUG9ydCBIdWIKKwk4MzcxICBQUy8yIEtleWJvYXJkIEFuZCBNb3VzZQorCTgzNzIgIEZUOFUxMDBBWCBTZXJpYWwgUG9ydAorCWM2MzAgIGxjZDJ1c2IgaW50ZXJmYWNlCisJYzdkMCAgUlItQ2lyS2l0cyBMb2NvQnVmZmVyLVVTQgorCWNjNDggIHByb2R1Y3QgRlRESSBUQUNUUklYX09QRU5QT1JUXzEzTSAweGNjNDggT3BlblBvcnQgMS4zIE1pdHN1YmlzaGkKKwljYzQ5ICBwcm9kdWN0IEZUREkgVEFDVFJJWF9PUEVOUE9SVF8xM1MgMHhjYzQ5IE9wZW5Qb3J0IDEuMyBTdWJhcnUKKwljYzRhICBwcm9kdWN0IEZUREkgVEFDVFJJWF9PUEVOUE9SVF8xM1UgMHhjYzRhIE9wZW5Qb3J0IDEuMyBVbml2ZXJzYWwKKwlkMDEwICBTQ1MgUFRDLUlJdXNiCisJZDAxMSAgU0NTIFBvc2l0aW9uLVRyYWNrZXIvVE5DCisJZDAxMiAgU0NTIERSQUdPTiAxCisJZDAxMyAgU0NTIERSQUdPTiAxCisJZDZmOCAgVU5JIEJsYWNrIEJPWAorCWU3MDAgIEVsc3RlciBVbmljb20gSUlJIE9wdGljYWwgUHJvYmUKKwllODg4ICBFeHBlcnQgSVNETiBDb250cm9sIFVTQgorCWU4ODkgIFVTQi1SUzIzMiBPcHRvQnJpZGdlCisJZTg4YSAgRXhwZXJ0IG1vdXNlQ0xPQ0sgVVNCIElJCisJZTg4YiAgUHJlY2lzaW9uIENsb2NrIE1TRiBVU0IKKwllODhjICBFeHBlcnQgbW91c2VDTE9DSyBVU0IgSUkgSEJHCisJZWE5MCAgRWNsbyAxLVdpcmUgQWRhcHRlcgorCWYyMDggIFBhcGVubWVpZXIgQnJhaWxsZS1EaXNwbGF5CisJZjY4MCAgU3V1bnRvIFNwb3J0cyBJbnN0cnVtZW50CisJZjkxOCAgQW50OCBMb2dpYyBQcm9iZQorCWZhMDAgIE1hdHJpeCBPcmJpdGFsIFVTQiBTZXJpYWwKKwlmYTAxICBNYXRyaXggT3JiaXRhbCBNWDIgb3IgTVgzCisJZmEwMiAgTWF0cml4IE9yYml0YWwgTVg0IG9yIE1YNQorCWZhMDMgIE1hdHJpeCBPcmJpdGFsIFZLL0xLMjAyIEZhbWlseQorCWZhMDQgIE1hdHJpeCBPcmJpdGFsIFZLL0xLMjA0IEZhbWlseQorCWZjMDggIENyeXN0YWxmb250eiBDRkEtNjMyIFVTQiBMQ0QKKwlmYzA5ICBDcnlzdGFsZm9udHogQ0ZBLTYzNCBVU0IgTENECisJZmMwYiAgQ3J5c3RhbGZvbnR6IENGQS02MzMgVVNCIExDRAorCWZjMGMgIENyeXN0YWxmb250eiBDRkEtNjMxIFVTQiBMQ0QKKwlmYzBkICBDcnlzdGFsZm9udHogQ0ZBLTYzNSBVU0IgTENECisJZmM4MiAgU0VNQyBEU1MtMjAgU3luY1N0YXRpb24KKwlmZDQ4ICBTaGlwTW9kdWwgTWluaVBsZXgtNHhVU0IgTk1FQSBNdWx0aXBsZXhlcgorCWZmMDggIFRvb2xIb3VzZSBMb29wQmFjayBBZGFwdGVyCisJZmYxOCAgTG9nYm9vayBCdXMKKwlmZjE5ICBMb2dib29rIEJ1cworCWZmMWEgIExvZ2Jvb2sgQnVzCisJZmYxYiAgTG9nYm9vayBCdXMKKwlmZjFjICBMb2dib29rIEJ1cworCWZmMWQgIExvZ2Jvb2sgQnVzCisJZmYxZSAgTG9nYm9vayBCdXMKKwlmZjFmICBMb2dib29rIEJ1cworMDQwNCAgTkNSIENvcnAuCisJMDIwMiAgNzhYWCBTY2FubmVyCisJMDIwMyAgNzhYWCBTY2FubmVyIC0gRW1iZWRkZWQgU3lzdGVtCisJMDMxMCAgSzU5MCBQcmludGVyLCBTZWxmLVNlcnZpY2UKKwkwMzExICA3MTY3IFByaW50ZXIsIFJlY2VpcHQvU2xpcAorCTAzMTIgIDcxOTcgUHJpbnRlciBSZWNlaXB0CisJMDMyMCAgNTkzMi1VU0IgS2V5Ym9hcmQKKwkwMzIxICA1OTUzLVVTQiBEeW5ha2V5CisJMDMyMiAgNTkzMi1VU0IgRW5oYW5jZWQgS2V5Ym9hcmQKKwkwMzIzICA1OTMyLVVTQiBFbmhhbmNlZCBLZXlib2FyZCwgRmxhc2gtUmVjb3ZlcnkvRG93bmxvYWQKKwkwMzI0ICA1OTUzLVVTQiBFbmhhbmNlZCBEeW5ha2V5CisJMDMyNSAgNTk1My1VU0IgRW5oYW5jZWQgRHluYWtleSBGbGFzaC1SZWNvdmVyeS9Eb3dubG9hZAorCTAzMjggIEswMTY6IFVTQi1NU1IgSVNPIDMtdHJhY2sgTVNSOiBQT1MgU3RhbmRhcmQgKFNlZSBISUQgcGFnZXMpCisJMDMyOSAgSzAxODogVVNCLU1TUiBKSVMgMi1UcmFjayBNU1I6IFBPUyBTdGFuZGFyZAorCTAzMmEgIEswMTY6IFVTQi1NU1IgSVNPIDMtVHJhY2sgTVNSOiBISUQgS2V5Ym9hcmQgTW9kZQorCTAzMmIgIEswMTYvSzAxODogVVNCLU1TUiBGbGFzaC1SZWNvdmVyeS9Eb3dubG9hZAorMDQwNSAgU3lub3BzeXMsIEluYy4KKzA0MDYgIEZ1aml0c3UtSUNMIENvbXB1dGVycworMDQwNyAgRnVqaXRzdSBQZXJzb25hbCBTeXN0ZW1zLCBJbmMuCiswNDA4ICBRdWFudGEgQ29tcHV0ZXIsIEluYy4KKzA0MDkgIE5FQyBDb3JwLgorCTAwMTEgIFBDOTggU2VyaWVzIExheW91dCBLZXlib2FyZCBNb3VzZQorCTAwMTIgIEFUZXJtIElUNzVEU1UgSVNETiBUQQorCTAwMTQgIEphcGFuZXNlIEtleWJvYXJkCisJMDAxOSAgMTA5IEphcGFuZXNlIEtleWJvYXJkIHdpdGggQnVzLVBvd2VyZWQgSHViCisJMDAxYSAgUEM5OCBTZXJpZXMgTGF5b3V0IEtleWJvYXJkIHdpdGggQnVzLVBvd2VyZWQgSHViCisJMDAyNSAgTWluaSBLZXlib2FyZCB3aXRoIEJ1cy1Qb3dlcmVkIEh1YgorCTAwMjcgIE11bHRpU3luYyBNb25pdG9yCisJMDAyYyAgQ2xpayEtVVNCIERyaXZlCisJMDAzNCAgMTA5IEphcGFuZXNlIEtleWJvYXJkIHdpdGggT25lLXRvdWNoIHN0YXJ0IGJ1dHRvbnMKKwkwMDNmICBXaXJlbGVzcyBLZXlib2FyZCB3aXRoIE9uZS10b3VjaCBzdGFydCBidXR0b25zCisJMDA0MCAgRmxvcHB5CisJMDA0ZSAgU3VwZXJTY3JpcHQgMTQwMCBTZXJpZXMKKwkwMDRmICBXaXJlbGVzcyBLZXlib2FyZCB3aXRoIE9uZS10b3VjaCBzdGFydCBidXR0b25zCisJMDA1OCAgSGlnaFNwZWVkIEh1YgorCTAwNTkgIEhpZ2hTcGVlZCBIdWIKKwkwMDVhICBIaWdoU3BlZWQgSHViCisJMDA2YSAgQ29uY2VwdHJvbmljIFVTQiBIYXJkZGlzayBCb3gKKwkwMDgxICBTdXBlclNjcmlwdCAxNDAwIFNlcmllcworCTAwODIgIFN1cGVyU2NyaXB0IDE0MDAgU2VyaWVzCisJMDA5NCAgSmFwYW5lc2UgS2V5Ym9hcmQgd2l0aCBPbmUtdG91Y2ggc3RhcnQgYnV0dG9ucworCTAwOTUgIEphcGFuZXNlIEtleWJvYXJkCisJMDBhOSAgQXRlcm1JVDIxTCAxMjhLIFN1cHBvcnQgU3RhbmRhcmQKKwkwMGFhICBBdGVybUlUWDcyIDEyOEsgU3VwcG9ydCBTdGFuZGFyZAorCTAwYWIgIEF0ZXJtSVRYNjIgMTI4SyBTdXBwb3J0IFN0YW5kYXJkCisJMDBhYyAgQXRlcm1JVDQyIDEyOEsgU3VwcG9ydCBTdGFuZGFyZAorCTAwYWUgIElOU01BVEVWNzBHLU1BWCBTdGFuZGFyZAorCTAwYWYgIEF0ZXJtSVRYNzAgMTI4SyBTdXBwb3J0IFN0YW5kYXJkCisJMDBiMCAgQXRlcm1JVFg4MCAxMjhLIFN1cHBvcnQgU3RhbmRhcmQKKwkwMGIyICBBdGVybUlUWDgwRCAxMjhLIFN1cHBvcnQgU3RhbmRhcmQKKwkwMGMwICBXaXJlbGVzcyBSZW1vY29uCisJMDBmNyAgU21hcnQgRGlzcGxheSBQSy1TRDEwCisJMDExZCAgZTIyOCBNb2JpbGUgUGhvbmUKKwkwMjAzICBISUQgQXVkaW8gQ29udHJvbHMKKwk1NWFhICBIdWIKKwk1NWFiICBIdWIgW2lNYWMvaVRvdWNoIGtiZF0KKwk4MDEwICBJbnRlbGxpYmFzZSBIdWIKKwk4MDExICBJbnRlbGxpYmFzZSBIdWIKKwllZmJlICBQIWN0eSA5MDAgW0hQIERKXQorCWYwYmUgIFAhY3R5IDkyMCBbSFAgREogODEyY10KKzA0MGEgIEtvZGFrIENvLgorCTAwMDEgIERWQy0zMjMKKwkwMDAyICBEVkMtMzI1CisJMDEwMCAgREMtMjIwCisJMDExMCAgREMtMjYwCisJMDExMSAgREMtMjY1CisJMDExMiAgREMtMjkwCisJMDEyMCAgREMtMjQwCisJMDEyMSAgREMtMjQwIChQVFAgZmlybXdhcmUpCisJMDEzMCAgREMtMjgwCisJMDEzMSAgREMtNTAwMAorCTAxMzIgIERDLTM0MDAKKwkwMTQwICBEQy00ODAwCisJMDE2MCAgREM0ODAwCisJMDE3MCAgRFgzOTAwCisJMDIwMCAgRGlnaXRhbCBDYW1lcmEKKwkwMzAwICBFWi0yMDAKKwkwNDAwICBNQzMKKwkwNDAyICBEaWdpdGFsIENhbWVyYQorCTA0MDMgIFo3NTkwCisJMDUwMCAgRFgzNTAwCisJMDUxMCAgRFgzNjAwCisJMDUyNSAgRFgzMjE1CisJMDUzMCAgRFgzNzAwCisJMDUzNSAgRWFzeVNoYXJlIENYNDIzMCBDYW1lcmEKKwkwNTQwICBMUzQyMAorCTA1NTAgIERYNDkwMAorCTA1NTUgIERYNDMzMAorCTA1NjAgIENYNDIwMAorCTA1NjUgIENYNDIxMAorCTA1NjYgIENYNDMwMAorCTA1NjcgIExTNzUzCisJMDU2OCAgTFM0NDMKKwkwNTY5ICBMUzY2MworCTA1NzAgIERYNjM0MAorCTA1NzEgIENYNjMzMAorCTA1NzIgIERYNjQ0MAorCTA1NzMgIENYNjIzMAorCTA1NzQgIENYNjIwMAorCTA1NzUgIERYNjQ5MAorCTA1NzYgIERYNDUzMAorCTA1NzcgIERYNzYzMAorCTA1NzggIENYNzMwMC9DWDczMTAKKwkwNTc5ICBDWDcyMjAKKwkwNTdhICBDWDczMzAKKwkwNTdiICBDWDc0MzAKKwkwNTdjICBDWDc1MzAKKwkwNTdkICBEWDc0NDAKKwkwNTdlICBDMzAwCisJMDU3ZiAgRFg3NTkwCisJMDU4MCAgWjczMAorCTA1ODEgIERpZ2l0YWwgQ2FtZXJhCisJMDU4MiAgRGlnaXRhbCBDYW1lcmEKKwkwNTgzICBEaWdpdGFsIENhbWVyYQorCTA1ODQgIENYNjQ0NQorCTA1ODUgIERpZ2l0YWwgQ2FtZXJhCisJMDU4NiAgQ1g3NTI1CisJMDU4NyAgRGlnaXRhbCBDYW1lcmEKKwkwNTg4ICBEaWdpdGFsIENhbWVyYQorCTA1ODkgIEVhc3lTaGFyZSBDMzYwCisJMDU4YSAgQzMxMAorCTA1OGIgIERpZ2l0YWwgQ2FtZXJhCisJMDU4YyAgQzMzMAorCTA1OGQgIEMzNDAKKwkwNThlICBWNTMwCisJMDU4ZiAgVjU1MAorCTA1OTAgIERpZ2l0YWwgQ2FtZXJhCisJMDU5MSAgRGlnaXRhbCBDYW1lcmEKKwkwNTkyICBEaWdpdGFsIENhbWVyYQorCTA1OTMgIERpZ2l0YWwgQ2FtZXJhCisJMDU5NCAgRGlnaXRhbCBDYW1lcmEKKwkwNTk1ICBEaWdpdGFsIENhbWVyYQorCTA1OTYgIERpZ2l0YWwgQ2FtZXJhCisJMDU5NyAgRGlnaXRhbCBDYW1lcmEKKwkwNTk4ICBEaWdpdGFsIENhbWVyYQorCTA1OTkgIERpZ2l0YWwgQ2FtZXJhCisJMDU5YSAgRGlnaXRhbCBDYW1lcmEKKwkwNTliICBEaWdpdGFsIENhbWVyYQorCTA1OWMgIERpZ2l0YWwgQ2FtZXJhCisJMDU5ZCAgRGlnaXRhbCBDYW1lcmEKKwkwNTllICBEaWdpdGFsIENhbWVyYQorCTA1OWYgIERpZ2l0YWwgQ2FtZXJhCisJMDVhMCAgRGlnaXRhbCBDYW1lcmEKKwkwNWExICBEaWdpdGFsIENhbWVyYQorCTA1YTIgIERpZ2l0YWwgQ2FtZXJhCisJMDVhMyAgRGlnaXRhbCBDYW1lcmEKKwkwNWE0ICBEaWdpdGFsIENhbWVyYQorCTA1YTUgIERpZ2l0YWwgQ2FtZXJhCisJMDVhNiAgRGlnaXRhbCBDYW1lcmEKKwkwNWE3ICBEaWdpdGFsIENhbWVyYQorCTA1YTggIERpZ2l0YWwgQ2FtZXJhCisJMDVhOSAgRGlnaXRhbCBDYW1lcmEKKwkwNWFhICBEaWdpdGFsIENhbWVyYQorCTA1YWIgIERpZ2l0YWwgQ2FtZXJhCisJMDVhYyAgRGlnaXRhbCBDYW1lcmEKKwkwNWFkICBEaWdpdGFsIENhbWVyYQorCTA1YWUgIERpZ2l0YWwgQ2FtZXJhCisJMDVhZiAgRGlnaXRhbCBDYW1lcmEKKwkwNWIwICBEaWdpdGFsIENhbWVyYQorCTA1YjEgIERpZ2l0YWwgQ2FtZXJhCisJMDViMiAgRGlnaXRhbCBDYW1lcmEKKwkwNWIzICBFYXN5U2hhcmUgWjcxMCBDYW1lcmEKKwkwNWI0ICBEaWdpdGFsIENhbWVyYQorCTA1YjUgIERpZ2l0YWwgQ2FtZXJhCisJMDViNiAgRGlnaXRhbCBDYW1lcmEKKwkwNWI3ICBEaWdpdGFsIENhbWVyYQorCTA1YjggIERpZ2l0YWwgQ2FtZXJhCisJMDViOSAgRGlnaXRhbCBDYW1lcmEKKwkwNWJhICBEaWdpdGFsIENhbWVyYQorCTA1YmIgIERpZ2l0YWwgQ2FtZXJhCisJMDViYyAgRGlnaXRhbCBDYW1lcmEKKwkwNWJkICBEaWdpdGFsIENhbWVyYQorCTA1YmUgIERpZ2l0YWwgQ2FtZXJhCisJMDViZiAgRGlnaXRhbCBDYW1lcmEKKwkwNWMwICBEaWdpdGFsIENhbWVyYQorCTA1YzEgIERpZ2l0YWwgQ2FtZXJhCisJMDVjMiAgRGlnaXRhbCBDYW1lcmEKKwkwNWMzICBEaWdpdGFsIENhbWVyYQorCTA1YzQgIERpZ2l0YWwgQ2FtZXJhCisJMDVjNSAgRGlnaXRhbCBDYW1lcmEKKwk0MDAwICBJbmtKZXQgQ29sb3IgUHJpbnRlcgorCTQxMGQgIEVhc3lTaGFyZSBHNjAwIFByaW50ZXIgRG9jaworCTUwMTAgIFdpcmVsZXNzIEFkYXB0ZXIKKwk1MDEyICBEQlQtMjIwIEJsdWV0b290aCBBZGFwdGVyCisJNjAwMSAgaTMwCisJNjAwMiAgaTQwCisJNjAwMyAgaTUwCisJNjAwNCAgaTYwCisJNjAwNSAgaTgwCiswNDBiICBXZWx0cmVuZCBTZW1pY29uZHVjdG9yCisJNjUxMCAgV2VsdHJlbmQgQmFyIENvZGUgUmVhZGVyCisJNjUyMCAgWEJPWCBYcGxvZGVyCiswNDBjICBWVGVjaCBDb21wdXRlcnMsIEx0ZAorMDQwZCAgVklBIFRlY2hub2xvZ2llcywgSW5jLgorCTMxODQgIFZOVCBWVDY2NTYgVVNCLTgwMi4xMSBXaXJlbGVzcyBMQU4gQWRhcHRlcgorCTYyMDUgIFVTQiAyLjAgQ2FyZCBSZWFkZXIKKzA0MGUgIE1DQ0kKKzA0MGYgIEVjaG8gU3BlZWNoIENvcnAuCiswNDExICBNZWxDby4sIEluYy4KKwkwMDAxICBMVUEtVFggRXRoZXJuZXQgW3BlZ2FzdXNdCisJMDAwNSAgTFVBLVRYIEV0aGVybmV0CisJMDAwNiAgV0xJLVVTQi1MMTEgV2lyZWxlc3MgTEFOIEFkYXB0ZXIKKwkwMDA5ICBMVUEyLVRYIEV0aGVybmV0CisJMDAwYiAgV0xJLVVTQi1MMTFHLVdSIFdpcmVsZXNzIExBTiBBZGFwdGVyCisJMDAwZCAgV0xJLVVTQi1MMTFHIFdpcmVsZXNzIExBTiBBZGFwdGVyCisJMDAxMiAgTFVBLUtUWCBFdGhlcm5ldAorCTAwMTMgIFVTQjItSURFIEFkYXB0ZXIKKwkwMDE2ICBXTEktVVNCLVMxMSA4MDIuMTFiIEFkYXB0ZXIKKwkwMDE4ICBVU0IyLUlERSBBZGFwdGVyCisJMDAxYyAgVVNCLUlERSBCcmlkZ2U6IERVQi1QeHhHCisJMDAyNyAgV0xJLVVTQi1LUzExRyA4MDIuMTFiIEFkYXB0ZXIKKwkwMDNkICBMVUEtVTItS1RYIEV0aGVybmV0CisJMDA0NCAgV0xJLVVTQi1LQjExIFdpcmVsZXNzIExBTiBBZGFwdGVyCisJMDA0ZCAgV0xJLVVTQi1CMTEgV2lyZWxlc3MgTEFOIEFkYXB0ZXIKKwkwMDUwICBXTEkyLVVTQjItRzU0IFdpcmVsZXNzIExBTiBBZGFwdGVyCisJMDA1ZSAgV0xJLVUyLUtHNTQtWUIgV0xBTgorCTAwNjUgIFB5dGhvbjIgV0RNIEVuY29kZXIKKwkwMDY2ICBXTEktVTItS0c1NCBXTEFOCisJMDA2NyAgV0xJLVUyLUtHNTQtQUkgV0xBTgorCTAwOGIgIE5pbnRlbmRvIFdpLUZpCisJMDA5MSAgV0xJLVUyLUtBTUc1NCBXaXJlbGVzcyBMQU4gQWRhcHRlcgorCTAwOTIgIFdMSS1VMi1LQU1HNTQgQm9vdGxvYWRlcgorCTAwOTcgIFdMSS1VMi1LRzU0LUJCCisJMDBhOSAgV0xJLVUyLUFNRzU0SFAgV2lyZWxlc3MgTEFOIEFkYXB0ZXIKKwkwMGFhICBXTEktVTItQU1HNTRIUCBCb290bG9hZGVyCisJMDBiMyAgUEMtT1AtUlMxIFJlbW90ZVN0YXRpb24KKwkwMGNhICA4MDIuMTFuIE5ldHdvcmsgQWRhcHRlcgorCTAwY2IgIFdMSS1VMi1HMzAwTiA4MDIuMTFuIEFkYXB0ZXIKKwkwMGQ4ICBXTEktVTItU0c1NEhQCisJMDBkOSAgV0xJLVUyLUc1NEhQCisJMDBkYSAgV0xJLVUyLUtHNTRMCiswNDEyICBBd2FyZCBTb2Z0d2FyZSBJbnRlcm5hdGlvbmFsCiswNDEzICBMZWFkdGVrIFJlc2VhcmNoLCBJbmMuCisJMTMxMCAgV2luRmFzdCBUViAtIE5UU0MgKyBGTQorCTEzMTEgIFdpbkZhc3QgVFYgLSBOVFNDICsgTVRTICsgRk0KKwkxMzEyICBXaW5GYXN0IFRWIC0gUEFMIEJHICsgRk0KKwkxMzEzICBXaW5GYXN0IFRWIC0gUEFMIEJHK1RYVCArIEZNCisJMTMxNCAgV2luRmFzdCBUViBBdWRpbyAtIFBIUCBQQUwgSQorCTEzMTUgIFdpbkZhc3QgVFYgQXVkaW8gLSBQSFAgUEFMIEkrVFhUCisJMTMxNiAgV2luRmFzdCBUViBBdWRpbyAtIFBIUCBQQUwgREsKKwkxMzE3ICBXaW5GYXN0IFRWIEF1ZGlvIC0gUEhQIFBBTCBESytUWFQKKwkxMzE4ICBXaW5GYXN0IFRWIC0gUEFMIEkvREsgKyBGTQorCTEzMTkgIFdpbkZhc3QgVFYgLSBQQUwgTiArIEZNCisJMTMxYSAgV2luRmFzdCBUViBBdWRpbyAtIFBIUCBTRUNBTSBMTAorCTEzMWIgIFdpbkZhc3QgVFYgQXVkaW8gLSBQSFAgU0VDQU0gTEwrVFhUCisJMTMxYyAgV2luRmFzdCBUViBBdWRpbyAtIFBIUCBTRUNBTSBESworCTEzMWQgIFdpbkZhc3QgVFYgLSBTRUNBTSBESyArIFRYVCArIEZNCisJMTMxZSAgV2luRmFzdCBUViAtIE5UU0MgSmFwYW4gKyBGTQorCTEzMjAgIFdpbkZhc3QgVFYgLSBOVFNDCisJMTMyMSAgV2luRmFzdCBUViAtIE5UU0MgKyBNVFMKKwkxMzIyICBXaW5GYXN0IFRWIC0gUEFMIEJHCisJMTMyMyAgV2luRmFzdCBUViAtIFBBTCBCRytUWFQKKwkxMzI0ICBXaW5GYXN0IFRWIEF1ZGlvIC0gUEhQIFBBTCBJCisJMTMyNSAgV2luRmFzdCBUViBBdWRpbyAtIFBIUCBQQUwgSStUWFQKKwkxMzI2ICBXaW5GYXN0IFRWIEF1ZGlvIC0gUEhQIFBBTCBESworCTEzMjcgIFdpbkZhc3QgVFYgQXVkaW8gLSBQSFAgUEFMIERLK1RYVAorCTEzMjggIFdpbkZhc3QgVFYgLSBQQUwgSS9ESworCTEzMjkgIFdpbkZhc3QgVFYgLSBQQUwgTgorCTEzMmEgIFdpbkZhc3QgVFYgQXVkaW8gLSBQSFAgU0VDQU0gTEwKKwkxMzJiICBXaW5GYXN0IFRWIEF1ZGlvIC0gUEhQIFNFQ0FNIExMK1RYVAorCTEzMmMgIFdpbkZhc3QgVFYgQXVkaW8gLSBQSFAgU0VDQU0gREsKKwkxMzJkICBXaW5GYXN0IFRWIC0gU0VDQU0gREsgKyBUWFQKKwkxMzJlICBXaW5GYXN0IFRWIC0gTlRTQyBKYXBhbgorCTYwMjMgIEVNUCBBdWRpbyBEZXZpY2UKKwk2MDI0ICBXaW5GYXN0IFBhbG1Ub3AvTm92byBUViBWaWRlbworCTYwMjUgIFdpbkZhc3QgRFRWIERvbmdsZSAoY29sZCBzdGF0ZSkKKwk2MDI2ICBXaW5GYXN0IERUViBEb25nbGUgKHdhcm0gc3RhdGUpCisJNjEyNSAgV2luRmFzdCBEVFYgRG9uZ2xlCisJNjEyNiAgV2luRmFzdCBEVFYgRG9uZ2xlIEJEQSBEcml2ZXIKKwk2ZjAwICBXaW5GYXN0IERUViBEb25nbGUgKFNUSzc3MDBQIGJhc2VkKQorMDQxNCAgR2lnYS1CeXRlIFRlY2hub2xvZ3kgQ28uLCBMdGQKKzA0MTYgIFdpbmJvbmQgRWxlY3Ryb25pY3MgQ29ycC4KKwkwMDM1ICBXODlDMzUgODAyLjExYmcgV0xBTiBBZGFwdGVyCisJMDEwMSAgSHViCisJMDk2MSAgQVZMIEZsYXNoIENhcmQgUmVhZGVyCisJMzgxMCAgU21hcnQgQ2FyZCBDb250cm9sbGVyCisJMzgxMSAgR2VuZXJpYyBDb250cm9sbGVyIC0gU2luZ2xlIGludGVyZmFjZQorCTM4MTIgIFNtYXJ0IENhcmQgQ29udHJvbGxlcl8ySW50ZXJmYWNlCisJMzgxMyAgUGFuZWwgRGlzcGxheQorCTU1MTggIDQtUG9ydCBIdWIKKwk1NTFhICBQQyBTeW5jIEtleXBhZAorCTU1MWIgIFBDIEFzeW5jIEtleXBhZAorCTU1MWMgIFN5bmMgVGVua2V5CisJNTUxZCAgQXN5bmMgVGVua2V5CisJNTUxZSAgS2V5Ym9hcmQKKwk1NTFmICBLZXlib2FyZCB3LyBTeXMgYW5kIE1lZGlhCisJNTUyMSAgS2V5Ym9hcmQKKwk2NDgxICAxNi1iaXQgU2Nhbm5lcgorCTc3MjEgIE1lbW9yeSBTdGljayBSZWFkZXIvV3JpdGVyCisJNzcyMiAgTWVtb3J5IFN0aWNrIFJlYWRlci9Xcml0ZXIKKwk3NzIzICBTRCBDYXJkIFJlYWRlcgorMDQxNyAgU3ltYmlvcyBMb2dpYworMDQxOCAgQVNUIFJlc2VhcmNoCiswNDE5ICBTYW1zdW5nIEluZm8uIFN5c3RlbXMgQW1lcmljYSwgSW5jLgorCTAwMDEgIElyREEgUmVtb3RlIENvbnRyb2xsZXIKKwkzMDAxICBYZXJveCBQMTIwMiBMYXNlciBQcmludGVyCisJMzAwMyAgT2xpdmV0dGkgUEcgTDEyTAorCTMyMDEgIERvY3VwcmludCBQOGV4CisJMzQwNCAgU0NYLTV4MTIgU2VyaWVzCisJMzQwNiAgTUZQIDgzMCBTZXJpZXMKKwkzNDA3ICBNTC05MTIKKwkzNjAxICBJbmtKZXQgQ29sb3IgUHJpbnRlcgorCTM2MDIgIElua0pldCBDb2xvciBQcmludGVyCisJNDYwMiAgUmVtb3RlIE5ESVMgTmV0d29yayBEZXZpY2UKKwk4MDAxICBIdWIKKwk4MDAyICBTeW5jTWFzdGVyIDc1N0RGWCBISUQgRGV2aWNlCiswNDFhICBQaG9lbml4IFRlY2hub2xvZ2llcywgTHRkCiswNDFiICBkJ1RWCiswNDFkICBTMywgSW5jLgorMDQxZSAgQ3JlYXRpdmUgVGVjaG5vbG9neSwgTHRkCisJMTAwMiAgTm9tYWQgSUkKKwkxMDAzICBCbGFzdGVyIEdhbWVQYWQgQ29icmEKKwkxMDUwICBHYW1lUGFkIENvYnJhCisJMzAwMCAgU291bmRCbGFzdGVyIEV4dGlneQorCTMwMDIgIFNCIEV4dGVybmFsIENvbXBvc2l0ZSBEZXZpY2UKKwkzMDEwICBTb3VuZEJsYXN0ZXIgTVAzKworCTMwMTQgIFNCIEV4dGVybmFsIENvbXBvc2l0ZSBEZXZpY2UKKwkzMDE1ICBTb3VuZCBCbGFzdGVyIERpZ2l0YWwgTXVzaWMgTFgKKwkzMDIwICBTb3VuZEJsYXN0ZXIgQXVkaWd5IDIgTlgKKwkzMDMwICBTQiBFeHRlcm5hbCBDb21wb3NpdGUgRGV2aWNlCisJMzA0MCAgU291bmRCbGFzdGVyIExpdmUhIDI0LWJpdCBFeHRlcm5hbCBTQjA0OTAKKwkzMDYwICBTb3VuZCBCbGFzdGVyIEF1ZGlneSAyIFpTIEV4dGVybmFsCisJMzA2MSAgU291bmRCbGFzdGVyIEF1ZGlneSAyIFpTIFZpZGVvIEVkaXRvcgorCTMwOTAgIFNvdW5kIEJsYXN0ZXIgRGlnaXRhbCBNdXNpYyBTWAorCTNmMDIgIEUtTXUgMDIwMgorCTNmMDQgIEUtTXUgMDQwNAorCTQwMDMgIFZpZGVvQmxhc3RlciBXZWJDYW0gR28gUGx1cyBbVzk5NjdDRl0KKwk0MDA0ICBOb21hZCBJSSBNRworCTQwMDUgIFdlYkNhbSBCbGFzdGVyIEdvIEVTCisJNDAwNyAgR28gTWluaQorCTQwMGEgIFBDLUNhbSAzMDAKKwk0MDBiICBQQy1DYW0gNjAwCisJNDAwYyAgV2ViQ2FtIDUgW3B3Y10KKwk0MDBkICBXZWJDYW0gUEQxMDAxCisJNDAwZiAgUEMtQ0FNIDU1MCAoQ29tcG9zaXRlKQorCTQwMTEgIFdlYkNhbSBQUk8gZVgKKwk0MDEyICBQQy1DQU0zNTAKKwk0MDEzICBQQy1DYW0gNzUwCisJNDAxNSAgQ2FyZENhbSBWYWx1ZQorCTQwMTYgIENhcmRDYW0KKwk0MDE3ICBXZWJDYW0gTW9iaWxlCisJNDAxOCAgV2ViQ2FtIFZpc3RhCisJNDAxOSAgQXVkaW8gRGV2aWNlCisJNDAxYyAgV2ViQ2FtIE5YIFtQRDExMTBdCisJNDAxZCAgV2ViQ2FtIE5YIFVsdHJhCisJNDAxZSAgV2ViQ2FtIE5YIFBybworCTQwMWYgIFdlYmNhbSBOb3RlYm9vaworCTQwMjAgIFdlYkNhbSBOWAorCTQwMjEgIFdlYkNhbSBOWCBVbHRyYQorCTQwMjIgIFdlYkNhbSBOWCBQcm8KKwk0MDI4ICBWaXN0YSBQbHVzIGNhbSBbVkYwMDkwXQorCTQwMmYgIERDLUNBTSAzMDAwWgorCTQwMzQgIFdlYkNhbSBJbnN0YW50CisJNDAzNSAgV2ViQ2FtIEluc3RhbnQKKwk0MDM2ICBXZWJjYW0gTGl2ZSEvTGl2ZSEgUHJvCisJNDAzNyAgV2ViQ2FtIExpdmUhCisJNDAzOCAgT1JJVEUgQ0NEIFdlYmNhbShQQzM3MFIpCisJNDAzOSAgV2ViQ2FtIExpdmUhIEVmZmVjdHMKKwk0MDNhICBXZWJDYW0gTlggUHJvIDIKKwk0MDNjICBXZWJDYW0gTGl2ZSEgVWx0cmEKKwk0MDNkICBXZWJDYW0gTm90ZWJvb2sgVWx0cmEKKwk0MDNlICBXZWJDYW0gVmlzdGEgUGx1cworCTQwNDEgIFdlYkNhbSBMaXZlISBNb3Rpb24KKwk0MDQ1ICBMaXZlISBDYW0gVm9pY2UKKwk0MDQ5ICBMaXZlISBDYW0gVm9pY2UKKwk0MDUxICBMaXZlISBDYW0gTm90ZWJvb2sgUHJvCisJNDA1MiAgTGl2ZSEgQ2FtIFZpc3RhIElNCisJNDA1MyAgTGl2ZSEgQ2FtIFZpZGVvIElNCisJNDA1NCAgTGl2ZSEgQ2FtIFZpZGVvIElNCisJNDA1NSAgTGl2ZSEgQ2FtIFZpZGVvIElNIFBybworCTQwNTYgIExpdmUhIENhbSBWaWRlbyBJTSBQcm8KKwk0MDU3ICBMaXZlISBDYW0gT3B0aWEKKwk0MDU4ICBMaXZlISBDYW0gT3B0aWEgQUYKKwk0MDY4ICBXZWJDYW0gTGl2ZSEgTm90ZWJvb2sKKwk0MTAwICBOb21hZCBKdWtlYm94IDIKKwk0MTAxICBOb21hZCBKdWtlYm94IDMKKwk0MTAyICBOT01BRCBNdVZvXjIKKwk0MTA2ICBOb21hZCBNdVZvCisJNDEwNyAgTk9NQUQgTXVWbworCTQxMDggIE5vbWFkIEp1a2Vib3ggWmVuCisJNDEwOSAgTm9tYWQgSnVrZWJveCBaZW4gTlgKKwk0MTBiICBOb21hZCBKdWtlYm94IFplbiBVU0IgMi4wCisJNDEwYyAgTm9tYWQgTXVWbyBOWAorCTQxMGYgIE5PTUFEIE11Vm9eMiAoRmxhc2gpCisJNDExMCAgTm9tYWQgSnVrZWJveCBaZW4gWHRyYQorCTQxMTEgIERlbGwgRGlnaXRhbCBKdWtlYm94CisJNDExNiAgTXVWb14yCisJNDExNyAgTm9tYWQgTXVWbyBUWAorCTQxMWIgIFplbiBUb3VjaAorCTQxMWMgIE5vbWFkIE11Vm8gVVNCIDIuMAorCTQxMWQgIFplbgorCTQxMWUgIFplbiBNaWNybworCTQxMjMgIFplbiBQb3J0YWJsZSBNZWRpYSBDZW50ZXIKKwk0MTI0ICBNdVZvXjIgRk0gKHVIREQpCisJNDEyNiAgRGVsbCBESiAoMm5kIGdlbikKKwk0MTI3ICBEZWxsIERKCisJNDEyOCAgTk9NQUQgSnVrZWJveCBaZW4gWHRyYSAobXRwKQorCTQxMmIgIE11Vm8gTjIwMCB3aXRoIEZNIHJhZGlvCisJNDEzMCAgWmVuIE1pY3JvIChtdHApCisJNDEzMSAgWmVuIFRvdWNoIChtdHApCisJNDEzMyAgTWFzcyBTdG9yYWdlIERldmljZQorCTQxMzQgIFplbiBOZWVvbgorCTQxMzYgIFplbiBTbGVlaworCTQxMzcgIFplbiBTbGVlayAobXRwKQorCTQxMzkgIFplbiBOYW5vIFBsdXMKKwk0MTNjICBaZW4gTWljcm9QaG90bworCTQxNTEgIFplbiBWaXNpb246TSAobXRwKQorCTQxNTUgIFplbiBTdG9uZSBwbHVzCisJNTAwZiAgQnJvYWRiYW5kIEJsYXN0ZXIgODAxMlUtVgorCTUwMTUgIFRFQ09NIEJsdWV0b290aCBEZXZpY2UKKwlmZmZmICBXZWJDYW0gTGl2ZSEgVWx0cmEKKzA0MWYgIExDUyBUZWxlZ3JhcGhpY3MKKzA0MjAgIENoaXBzIGFuZCBUZWNobm9sb2dpZXMKKwkxMzA3ICBDZWxseSBTSU0gQ2FyZCBSZWFkZXIKKzA0MjEgIE5va2lhIE1vYmlsZSBQaG9uZXMKKwkwMDE4ICA2Mjg4IEdTTSBTbWFydHBob25lCisJMDAxOSAgNjI4OCBHU00gU21hcnRwaG9uZSAoaW1hZ2luZyBtb2RlKQorCTAwMWEgIDYyODggR1NNIFNtYXJ0cGhvbmUgKGZpbGUgdHJhbnNmZXIgbW9kZSkKKwkwMDI0ICA1NjEwIFhwcmVzc011c2ljIChTdG9yYWdlIG1vZGUpCisJMDAyNSAgNTYxMCBYcHJlc3NNdXNpYyAoUEMtU3VpdGUgbW9kZSkKKwkwMDI4ICA1NjEwIFhwcmVzc011c2ljIChJbWFnaW5nIG1vZGUpCisJMDA5NiAgTjgxMCBJbnRlcm5ldCBUYWJsZXQKKwkwMTAzICBBREwgRmxhc2hpbmcgRW5naW5lIEFWQUxPTiBQYXJlbnQKKwkwMTA0ICBBREwgUmUtRmxhc2hpbmcgRW5naW5lIFBhcmVudAorCTAxMDUgIEUtNjEgKEZpcm13YXJlIHVwZGF0ZSBtb2RlKQorCTAxMDYgIFJPTSBQYXJlbnQKKwkwNDAwICA3NjAwIFBob25lIFBhcmVudAorCTA0MDEgIDY2NTAgR1NNIFBob25lCisJMDQwMiAgNjI1NSBQaG9uZSBQYXJlbnQKKwkwNDA0ICA1NTEwCisJMDQwNSAgOTUwMCBHU00gQ29tbXVuaWNhdG9yCisJMDQwNyAgTXVzaWMgUGxheWVyIEhEUi0xKHRtKQorCTA0MGIgIE4tR2FnZSBHU00gUGhvbmUKKwkwNDBkICA2NjIwIFBob25lIFBhcmVudAorCTA0MGUgIDY2NTEgUGhvbmUgUGFyZW50CisJMDQwZiAgNjIzMCBHU00gUGhvbmUKKwkwNDEwICA2NjMwIEltYWdpbmcgU21hcnRwaG9uZQorCTA0MTEgIDc2MTAgUGhvbmUgUGFyZW50CisJMDQxMyAgNjI2MCBQaG9uZSBQYXJlbnQKKwkwNDE0ICA3MzcwCisJMDQxNSAgOTMwMCBHU00gU21hcnRwaG9uZQorCTA0MTYgIDYxNzAgUGhvbmUgUGFyZW50CisJMDQxNyAgNzI3MCBQaG9uZSBQYXJlbnQKKwkwNDE4ICBFLTcwIChQQy1TdWl0ZSBtb2RlKQorCTA0MTkgIEUtNjAgKFBDLVN1aXRlIG1vZGUpCisJMDQxYSAgOTUwMCBHU00gQ29tbXVuaWNhdG9yIChSTkRJUykKKwkwNDFiICA5MzAwIEdTTSBTbWFydHBob25lIChSTkRJUykKKwkwNDFjICA3NzEwIFBob25lIFBhcmVudAorCTA0MWQgIDY2NzAgUGhvbmUgUGFyZW50CisJMDQxZSAgNjY4MAorCTA0MWYgIDYyMzUgUGhvbmUgUGFyZW50CisJMDQyMSAgMzIzMCBQaG9uZSBQYXJlbnQKKwkwNDIyICA2NjgxIFBob25lIFBhcmVudAorCTA0MjMgIDY2ODIgUGhvbmUgUGFyZW50CisJMDQyOCAgNjIzMGkgTW9kZW0KKwkwNDI5ICA2MjMwaSBNdWx0aU1lZGlhIENhcmQKKwkwNDMxICA3NzAgSW50ZXJuZXQgVGFibGV0CisJMDQzMiAgTjkwIFBob25lIFBhcmVudAorCTA0MzUgIEUtNzAgKElQIFBhc3N0aHJvdWdoL1JORElTIG1vZGUpCisJMDQzNiAgRS02MCAoSVAgUGFzc3Rocm91Z2gvUk5ESVMgbW9kZSkKKwkwNDM3ICA2MjY1IFBob25lIFBhcmVudAorCTA0M2EgIE43MCBVU0IgUGhvbmUgUGFyZW50CisJMDQzYiAgMzE1NSBQaG9uZSBQYXJlbnQKKwkwNDNjICA2MTU1IFBob25lIFBhcmVudAorCTA0M2QgIDYyNzAgUGhvbmUgUGFyZW50CisJMDQ0MyAgTjcwIFBob25lIFBhcmVudAorCTA0NGMgIE5NODUwaUcgUGhvbmUgUGFyZW50CisJMDQ0ZCAgRS02MSAoUEMgU3VpdGUgbW9kZSkKKwkwNDRlICBFLTYxIChEYXRhIEV4Y2hhbmdlIG1vZGUpCisJMDQ0ZiAgRS02MSAoSVAgUGFzc3Rocm91Z2gvUk5ESVMgbW9kZSkKKwkwNDUzICA5MzAwIFBob25lIFBhcmVudAorCTA0NTYgIDYxMTEgUGhvbmUgUGFyZW50CisJMDQ1YSAgNjI4MCBQaG9uZSBQYXJlbnQKKwkwNDVkICA2MjgyIFBob25lIFBhcmVudAorCTA0NmUgIDYxMTAgTmF2aWdhdG9yCisJMDQ4NSAgTVRQIERldmljZQorCTA0YzMgIE44MDAgSW50ZXJuZXQgVGFibGV0CisJMDRjZSAgRTkwIENvbW11bmljYXRvciAoUEMtU3VpdGUgbW9kZSkKKwkwNGNmICBFOTAgQ29tbXVuaWNhdG9yIChTdG9yYWdlIG1vZGUpCisJMDRmOSAgNjMwMCAoUEMtU3VpdGUgbW9kZSkKKwkwNjAwICBEaWdpdGFsIFBlbiBTVS0xQgorCTA4MDAgIENvbm5lY3Rpdml0eSBDYWJsZSBES1UtNQorCTA4MDEgIERhdGEgQ2FibGUgREtVLTYKKwkwODAyICBDQS00MiBQaG9uZSBQYXJlbnQKKzA0MjIgIEFESSBTeXN0ZW1zLCBJbmMuCiswNDIzICBDb21wdXRlciBBY2Nlc3MgVGVjaG5vbG9neSBDb3JwLgorCTAwMGEgIE5ldE1hdGUgRXRoZXJuZXQKKwkwMDBjICBOZXRNYXRlMiBFdGhlcm5ldAorCTAwMGQgIFVTQiBDaGllZiBBbmFseXplcgorCTAxMDAgIEdlbmVyaWMgVW5pdmVyc2FsIFByb3RvY29sIEFuYWx5emVyCisJMDEwMSAgVVBBIFVTQlRyYWNlcgorCTAyMDAgIEdlbmVyaWMgMTBLIFVuaXZlcnNhbCBQcm90b2NvbCBBbmFseXplcgorCTAyMGEgIFBFVHJhY2VyIE1MCisJMDMwMCAgR2VuZXJpYyBVbml2ZXJzYWwgUHJvdG9jb2wgQW5hbHl6ZXIKKwkwMzAxICAyNTAwSCBUcmFjZXIgVHJhaW5lcgorCTAzMGEgIFBFVHJhY2VyIHgxCisJMTIzNyAgQW5kcm9tZWRhIEh1YgorMDQyNCAgU3RhbmRhcmQgTWljcm9zeXN0ZW1zIENvcnAuCisJMDAwMSAgSW50ZWdyYXRlZCBIdWIKKwkwYWNkICBTaXRlY29tIEludGVybmFsIE11bHRpIE1lbW9yeSByZWFkZXIvd3JpdGVyIE1ELTAwNQorCTBmZGMgIEZsb3BweQorCTEwY2QgIFNpdGVjb20gSW50ZXJuYWwgTXVsdGkgTWVtb3J5IHJlYWRlci93cml0ZXIgTUQtMDA1CisJMjAyMCAgVVNCIEh1YgorCTIwY2QgIFNpdGVjb20gSW50ZXJuYWwgTXVsdGkgTWVtb3J5IHJlYWRlci93cml0ZXIgTUQtMDA1CisJMjBmYyAgNi1pbi0xIENhcmQgUmVhZGVyCisJMjIyOCAgOS1pbi0yIENhcmQgUmVhZGVyCisJMjIzYSAgOC1pbi0xIENhcmQgUmVhZGVyCisJMjUwMyAgVVNCIDIuMCBIdWIKKwkyNTA0ICBVU0IgMi4wIEh1YgorCTI1MjQgIFVTQiBNdWx0aVN3aXRjaCBIdWIKKzA0MjUgIE1vdG9yb2xhIFNlbWljb25kdWN0b3JzIEhLLCBMdGQKKwkwMTAxICBHLVRlY2ggV2lyZWxlc3MgTW91c2UgJiBLZXlib2FyZAorMDQyNiAgSW50ZWdyYXRlZCBEZXZpY2UgVGVjaG5vbG9neSwgSW5jLgorCTA0MjYgIFdETSBEcml2ZXIKKzA0MjcgIE1vdG9yb2xhIEVsZWN0cm9uaWNzIFRhaXdhbiwgTHRkCiswNDI4ICBBZHZhbmNlZCBHcmF2aXMgQ29tcHV0ZXIgVGVjaCwgTHRkCisJNDAwMSAgR2FtZVBhZCBQcm8KKzA0MjkgIENpcnJ1cyBMb2dpYworMDQyYSAgRXJpY3Nzb24gQXVzdHJpYW4sIEFHCiswNDJiICBJbnRlbCBDb3JwLgorCTkzMTYgIDh4OTMxSHggQ3VzdG9tZXIgSHViCiswNDJjICBJbm5vdmF0aXZlIFNlbWljb25kdWN0b3JzLCBJbmMuCiswNDJkICBNaWNyb25pY3MKKzA0MmUgIEFjZXIsIEluYy4KKwkwMzgwICBNUDMgUGxheWVyCiswNDJmICBNb2xleCwgSW5jLgorMDQzMCAgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorCTAwMDIgIDEwOSBLZXlib2FyZAorCTAwMDUgIFR5cGUgNiBLZXlib2FyZAorCTAwMGEgIDEwOSBKYXBhbmVzZSBLZXlib2FyZAorCTAwMGIgIDEwOSBKYXBhbmVzZSBLZXlib2FyZAorCTAwODIgIDEwOSBKYXBhbmVzZSBLZXlib2FyZAorCTAwODMgIDEwOSBKYXBhbmVzZSBLZXlib2FyZAorCTAxMDAgIDMtYnV0dG9uIE1vdXNlCisJMzZiYSAgQnVzIFBvd2VyZWQgSHViCiswNDMxICBJdGFjIFN5c3RlbXMsIEluYy4KKwkwMTAwICBNb3VzZS1UcmFrIDMtYnV0dG9uIFRyYWNrIEJhbGwKKzA0MzIgIFVuaXN5cyBDb3JwLgorMDQzMyAgQWxwcyBFbGVjdHJpYywgSW5jLgorCTExMDEgIElCTSBHYW1lIENvbnRyb2xsZXIKKwlhYmFiICBLZXlib2FyZAorMDQzNCAgU2Ftc3VuZyBJbmZvLiBTeXN0ZW1zIEFtZXJpY2EsIEluYy4KKzA0MzUgIEh5dW5kYWkgRWxlY3Ryb25pY3MgQW1lcmljYQorMDQzNiAgVGF1Z2FncmVpbmluZyBIRgorCTAwMDUgIENhbWVyYU1hdGUgKERQQ01fVVNCKQorMDQzNyAgRnJhbWF0b21lIENvbm5lY3RvcnMgVVNBCiswNDM4ICBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCiswNDM5ICBWb2ljZSBUZWNobm9sb2dpZXMgR3JvdXAKKzA0M2QgIExleG1hcmsgSW50ZXJuYXRpb25hbCwgSW5jLgorCTAwMDEgIExhc2VyIFByaW50ZXIKKwkwMDAyICBPcHRyYSBFMzEwIFByaW50ZXIKKwkwMDAzICBMYXNlciBQcmludGVyCisJMDAwNCAgTGFzZXIgUHJpbnRlcgorCTAwMDUgIExhc2VyIFByaW50ZXIKKwkwMDA2ICBMYXNlciBQcmludGVyCisJMDAwNyAgTGFzZXIgUHJpbnRlcgorCTAwMDggIElua2pldCBDb2xvciBQcmludGVyCisJMDAwOSAgT3B0cmEgUzI0NTAgUHJpbnRlcgorCTAwMGEgIExhc2VyIFByaW50ZXIKKwkwMDBiICBJbmtqZXQgQ29sb3IgUHJpbnRlcgorCTAwMGMgIE9wdHJhIEUzMTIgUHJpbnRlcgorCTAwMGQgIExhc2VyIFByaW50ZXIKKwkwMDBlICBMYXNlciBQcmludGVyCisJMDAwZiAgTGFzZXIgUHJpbnRlcgorCTAwMTAgIExhc2VyIFByaW50ZXIKKwkwMDExICBMYXNlciBQcmludGVyCisJMDAxMiAgSW5ramV0IENvbG9yIFByaW50ZXIKKwkwMDEzICBJbmtqZXQgQ29sb3IgUHJpbnRlcgorCTAwMTQgIElua0pldCBDb2xvciBQcmludGVyCisJMDAxNSAgSW5rSmV0IENvbG9yIFByaW50ZXIKKwkwMDE2ICBaMTIgQ29sb3IgSmV0cHJpbnRlcgorCTAwMTcgIFozMiBwcmludGVyCisJMDAxOCAgWjUyIFByaW50ZXIKKwkwMDE5ICBGb3JtcyBQcmludGVyCisJMDAxYSAgWjY1IFByaW50ZXIKKwkwMDFiICBJbmtKZXQgUGhvdG8gUHJpbnRlcgorCTAwMWMgIEtvZGFrIFBlcnNvbmFsIFBpY3R1cmUgTWFrZXIgMjAwIFByaW50ZXIKKwkwMDFkICBJbmtKZXQgQ29sb3IgUHJpbnRlcgorCTAwMWUgIElua0pldCBQaG90byBQcmludGVyCisJMDAxZiAgS29kYWsgUGVyc29uYWwgUGljdHVyZSBNYWtlciAyMDAgQ2FyZCBSZWFkZXIKKwkwMDIwICBaNTEgUHJpbnRlcgorCTAwMjEgIFozMyBQcmludGVyCisJMDAyMiAgSW5rSmV0IENvbG9yIFByaW50ZXIKKwkwMDIzICBMYXNlciBQcmludGVyCisJMDAyNCAgTGFzZXIgUHJpbnRlcgorCTAwMjUgIElua0pldCBDb2xvciBQcmludGVyCisJMDAyNiAgSW5rSmV0IENvbG9yIFByaW50ZXIKKwkwMDI3ICBJbmtKZXQgQ29sb3IgUHJpbnRlcgorCTAwMjggIElua0pldCBDb2xvciBQcmludGVyCisJMDAyOSAgU2NhbiBQcmludCBDb3B5CisJMDAyYSAgU2NhbiBQcmludCBDb3B5CisJMDAyYiAgU2NhbiBQcmludCBDb3B5CisJMDAyYyAgU2NhbiBQcmludCBDb3B5CisJMDAyZCAgWDcwL1g3MyBTY2FuL1ByaW50L0NvcHkKKwkwMDJlICBTY2FuIFByaW50IENvcHkKKwkwMDJmICBTY2FuIFByaW50IENvcHkKKwkwMDMwICBTY2FuIFByaW50IENvcHkKKwkwMDMxICBTY2FuIFByaW50IENvcHkKKwkwMDMyICBTY2FuIFByaW50IENvcHkKKwkwMDMzICBTY2FuIFByaW50IENvcHkKKwkwMDM0ICBTY2FuIFByaW50IENvcHkKKwkwMDM1ICBTY2FuIFByaW50IENvcHkKKwkwMDM2ICBTY2FuIFByaW50IENvcHkKKwkwMDM3ICBTY2FuIFByaW50IENvcHkKKwkwMDM4ICBTY2FuIFByaW50IENvcHkKKwkwMDM5ICBTY2FuIFByaW50IENvcHkKKwkwMDNhICBTY2FuIFByaW50IENvcHkKKwkwMDNiICBTY2FuIFByaW50IENvcHkKKwkwMDNjICBTY2FuIFByaW50IENvcHkKKwkwMDNkICBYODMgU2Nhbi9QcmludC9Db3B5CisJMDAzZSAgU2NhbiBQcmludCBDb3B5CisJMDAzZiAgU2NhbiBQcmludCBDb3B5CisJMDA0MCAgU2NhbiBQcmludCBDb3B5CisJMDA0MSAgU2NhbiBQcmludCBDb3B5CisJMDA0MiAgU2NhbiBQcmludCBDb3B5CisJMDA0MyAgU2NhbiBQcmludCBDb3B5CisJMDA0NCAgU2NhbiBQcmludCBDb3B5CisJMDA0NSAgU2NhbiBQcmludCBDb3B5CisJMDA0NiAgU2NhbiBQcmludCBDb3B5CisJMDA0NyAgU2NhbiBQcmludCBDb3B5CisJMDA0OCAgU2NhbiBQcmludCBDb3B5CisJMDA0OSAgU2NhbiBQcmludCBDb3B5CisJMDA0YSAgU2NhbiBQcmludCBDb3B5CisJMDA0YiAgU2NhbiBQcmludCBDb3B5CisJMDA0YyAgU2NhbiBQcmludCBDb3B5CisJMDA0ZCAgTGFzZXIgUHJpbnRlcgorCTAwNGUgIExhc2VyIFByaW50ZXIKKwkwMDRmICBJbmtKZXQgQ29sb3IgUHJpbnRlcgorCTAwNTAgIElua0pldCBDb2xvciBQcmludGVyCisJMDA1MSAgTGFzZXIgUHJpbnRlcgorCTAwNTIgIExhc2VyIFByaW50ZXIKKwkwMDUzICBJbmtKZXQgQ29sb3IgUHJpbnRlcgorCTAwNTQgIElua0pldCBDb2xvciBQcmludGVyCisJMDA1NyAgWjM1IFByaW50ZXIKKwkwMDU4ICBMYXNlciBQcmludGVyCisJMDA1YSAgWDYzCisJMDA1YyAgSW5rSmV0IENvbG9yIFByaW50ZXIKKwkwMDYwICBYNzQvWDc1IFNjYW5uZXIKKwkwMDYxICBYNzQgSHViCisJMDA2NSAgWDUxMzAKKwkwMDY5ICBYNzQvWDc1IFByaW50ZXIKKwkwMDZkICBYMTI1CisJMDA3MiAgWDYxNzAgUHJpbnRlcgorCTAwNzMgIElua0pldCBDb2xvciBQcmludGVyCisJMDA3OCAgSW5rSmV0IENvbG9yIFByaW50ZXIKKwkwMDc5ICBJbmtKZXQgQ29sb3IgUHJpbnRlcgorCTAwN2EgIEdlbmVyaWMgSHViCisJMDA3YiAgSW5rSmV0IENvbG9yIFByaW50ZXIKKwkwMDdjICBMZXhtYXJrIFgxMTEwL1gxMTMwL1gxMTQwL1gxMTUwL1gxMTcwL1gxMTgwL1gxMTg1CisJMDA3ZCAgUGhvdG8gMzE1MAorCTAwOGEgIDQyMDAgU2VyaWVzCisJMDA4YiAgSW5rSmV0IENvbG9yIFByaW50ZXIKKwkwMDhjICB0byBDRi9TTS9TRC9NUyBDYXJkIFJlYWRlcgorCTAwOGUgIElua0pldCBDb2xvciBQcmludGVyCisJMDA4ZiAgWDQyMgorCTAwOTMgIFg1MjUwCisJMDA5NSAgRTIyMCBQcmludGVyCisJMDA5NiAgMjIwMCBTZXJpZXMKKwkwMDk3ICBQNjI1MAorCTAwOTggIDcxMDAgU2VyaWVzCisJMDA5ZSAgUDkxMCBTZXJpZXMgSHVtYW4gSW50ZXJmYWNlIERldmljZQorCTAwOWYgIElua0pldCBDb2xvciBQcmludGVyCisJMDBhOSAgSUJNIEluZm9wcmludCAxNDEwIE1GUAorCTAwYWIgIElua0pldCBDb2xvciBQcmludGVyCisJMDBiMiAgMzMwMCBTZXJpZXMKKwkwMGI4ICA3MzAwIFNlcmllcworCTAwYjkgIDgzMDAgU2VyaWVzCisJMDBiYSAgSW5rSmV0IENvbG9yIFByaW50ZXIKKwkwMGJiICAyMzAwIFNlcmllcworCTAwYmQgIFByaW50aW5nIFN1cHBvcnQKKwkwMGJlICBQcmludGluZyBTdXBwb3J0CisJMDBiZiAgUHJpbnRpbmcgU3VwcG9ydAorCTAwYzAgIDYzMDAgU2VyaWVzCisJMDBjMSAgNDMwMCBTZXJpZXMKKwkwMGM3ICBQcmludGluZyBTdXBwb3J0CisJMDBjOCAgUHJpbnRpbmcgU3VwcG9ydAorCTAwYzkgIFByaW50aW5nIFN1cHBvcnQKKwkwMGNiICBQcmludGluZyBTdXBwb3J0CisJMDBkMCAgOTMwMCBTZXJpZXMKKwkwMGQzICBYMzQwIFNjYW5uZXIKKwkwMGQ0ICBYMzQybiBTY2FubmVyCisJMDBkNSAgUHJpbnRpbmcgU3VwcG9ydAorCTAwZDYgIFgzNDAgU2Nhbm5lcgorCTAwZTggIFg2NDJlCisJMDBlOSAgMjQwMCBTZXJpZXMKKwkwMGY2ICAzNDAwIFNlcmllcworCTAwZjcgIElua0pldCBDb2xvciBQcmludGVyCisJMDBmZiAgSW5rSmV0IENvbG9yIFByaW50ZXIKKwkwMTBiICAyNTAwIFNlcmllcworCTAxMGQgIDM1MDAtNDUwMCBTZXJpZXMKKwkwMTBmICA2NTAwIFNlcmllcworCTQzMDMgIFhlcm94IFdvcmtDZW50cmUgUHJvIDQxMgorMDQzZSAgTEcgRWxlY3Ryb25pY3MgVVNBLCBJbmMuCisJNDJiZCAgRmxhdHJvbiA3OTVGVCBQbHVzIE1vbml0b3IKKwk0YTRkICBGbGF0cm9uIDkxNUZUIFBsdXMgTW9uaXRvcgorCTcwMDEgIE1GLVBEMTAwIFNvdWwgRGlnaXRhbCBNUDMgUGxheWVyCisJNzAxMyAgTVAzIFBsYXllcgorCTg0ODQgIExQQy1VMzAgV2ViY2FtIElJCisJODU4NSAgTFBDLVVDMzUgV2ViY2FtCisJODg4OCAgRWxlY3Ryb25pY3MgVkNTIENhbWVyYSBJSShMUEMtVTIwKQorCTk4MDAgIFJlbW90ZSBDb250cm9sIFJlY2VpdmVyX2lNT04KKwk5ODAzICBlSG9tZSBJbmZyYXJlZCBSZWNlaXZlcgorCTk4MDQgIERNQiBSZWNlaXZlciBDb250cm9sCisJOWMwMSAgTEdFIFN5bmMKKzA0M2YgIFJhZGlTeXMgQ29ycC4KKzA0NDAgIEVpem8gTmFuYW8gQ29ycC4KKzA0NDEgIFdpbmJvbmQgU3lzdGVtcyBMYWIuCisJMTQ1NiAgSHViCiswNDQyICBFcmljc3NvbiwgSW5jLgorCWFiYmEgIEJsdWV0b290aCBEZXZpY2UKKzA0NDMgIEdhdGV3YXksIEluYy4KKwkwMDBlICBNdWx0aW1lZGlhIEtleWJvYXJkCisJMDAyZSAgTWlsbGVubml1bSBLZXlib2FyZAorMDQ0NSAgTHVjZW50IFRlY2hub2xvZ2llcywgSW5jLgorMDQ0NiAgTk1CIFRlY2hub2xvZ2llcyBDb3JwLgorCTY3ODEgIEtleWJvYXJkIHdpdGggUFMvMiBNb3VzZSBQb3J0CisJNjc4MiAgS2V5Ym9hcmQKKzA0NDcgIE1vbWVudHVtIE1pY3Jvc3lzdGVtcworMDQ0YSAgU2hhbXJvY2sgVGVjaC4gQ28uLCBMdGQKKzA0NGIgIFdTSQorMDQ0YyAgQ0NML0lUUkkKKzA0NGQgIFNpZW1lbnMgTml4ZG9yZiBBRworMDQ0ZSAgQWxwcyBFbGVjdHJpYyBDby4sIEx0ZAorCTExMDQgIEphcGFuZXNlIEtleWJvYXJkCisJMjAwMiAgTUQtNTUwMCBQcmludGVyCisJMjAxNCAgQmx1ZXRvb3RoIERldmljZQorCTMwMDEgIFVHVFo0IEJsdWV0b290aAorCTMwMDIgIEJsdWV0b290aCBEZXZpY2UKKwkzMDAzICBCbHVldG9vdGggRGV2aWNlCisJMzAwNCAgQmx1ZXRvb3RoIEFkYXB0ZXIKKwkzMDA1ICBJbnRlZ3JhdGVkIEJsdWV0b290aCBEZXZpY2UKKwkzMDA2ICBCbHVldG9vdGggQWRhcHRlcgorCTMwMDcgIEdsaWRlUG9pbnQgUFMvMiBUb3VjaFBhZAorCTMwMGMgIEJsdWV0b290aCBDb250cm9sbGVyIChBTFBTL1VHUFo2KQorCTMwMGQgIEJsdWV0b290aCBDb250cm9sbGVyIChBTFBTL1VHUFo2KQorCWZmZmYgIENvbXBhcSBCbHVldG9vdGggTXVsdGlwb3J0IE1vZHVsZQorMDQ0ZiAgVGhydXN0TWFzdGVyLCBJbmMuCisJMDQwMCAgSE9UQVMgQ291Z2FyCisJYTAwMyAgUmFnZSAzRCBHYW1lIFBhZAorCWEwMWIgIFBLLUdQMzAxIERyaXZpbmcgV2hlZWwKKwlhMGEwICBUb3AgR3VuIEpveXN0aWNrCisJYTBhMSAgVG9wIEd1biBKb3lzdGljayAocmV2MikKKwlhMGEzICBGdXNpb24gRGlnaXRhbCBHYW1lUGFkCisJYTIwMSAgUEstR1AyMDEgUGxheVN0aWNrCisJYjIwMyAgMzYwIE1vZGVuYSBQcm8gV2hlZWwKKwliMzAwICBGaXJlc3Rvcm0gRHVhbCBQb3dlcgorCWIzMDQgIEZpcmVzdG9ybSBEdWFsIFBvd2VyCisJYjMwNyAgdmlicmF0aW5nIFVwYWQKKwliNjAzICBmb3JjZSBmZWVkYmFjayBXaGVlbAorCWI2MDUgIGZvcmNlIGZlZWRiYWNrIFJhY2luZyBXaGVlbAorCWI3MDAgIFRhY3RpY2FsYm9hcmQKKzA0NTAgIERGSSwgSW5jLgorMDQ1MSAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKwkxMjM0ICBCbHVldG9vdGggRGV2aWNlCisJMTQyOCAgSHViCisJMTQ0NiAgVFVTQjIwNDAvMjA3MCBIdWIKKwkyMDM2ICBUVVNCMjAzNiBIdWIKKwkyMDQ2ICBUVVNCMjA0NiBIdWIKKwkyMDc3ICBUVVNCMjA3NyBIdWIKKwkzNDEwICBUVVNCMzQxMCBNaWNyb2NvbnRyb2xsZXIKKwkzZjAyICBTTUMgV1NLUDEwMCBXaS1GaSBQaG9uZQorCTU0MDkgIEZyb250aWVyIExhYnMgTkVYIElBKyBEaWdpdGFsIEF1ZGlvIFBsYXllcgorCTYwMDAgIEFVNSBBRFNMIE1vZGVtIChwcmUtcmVlbnVtKQorCTYwMDEgIEFVNSBBRFNMIE1vZGVtCisJNjA2MCAgUk5ESVMvQmVXQU4gQURTTDIrCisJNjA3MCAgUk5ESVMvQmVXQU4gQURTTDIrCisJNjI1ZiAgVHJla3N0b3IgVVNCLVN0aWNrIDEyIENTLUQgMTIgR0IKKwlkYmMwICBEZXZpY2UgQmF5IENvbnRyb2xsZXIKKwllMDAxICBHcmFwaExpbmsKKwllMDA0ICBUSS04OSBUaXRhbml1bSBDYWxjdWxhdG9yCisJZTAwOCAgVEktODQgUGx1cyBTaWx2ZXIgQ2FsY3VsYXRvcgorCWY0MzAgIE1TUC1GRVQ0MzBVSUYgSlRBRyBUb29sCisJZmZmZiAgQmx1ZXRvb3RoIERldmljZQorMDQ1MiAgTWl0c3ViaXNoaSBFbGVjdHJvbmljcyBBbWVyaWNhLCBJbmMuCisJMDAyMSAgSElEIE1vbml0b3IgQ29udHJvbHMKKwkwMDUwICBEaWFtb25kIFBybyA5MDB1IENSVCBNb25pdG9yCisJMDA1MSAgSW50ZWdyYXRlZCBIdWIKKzA0NTMgIENNRCBUZWNobm9sb2d5CisJNjc4MSAgTk1CIEtleWJvYXJkCisJNjc4MyAgQ2hpY29ueSBDb21wb3NpdGUgS2V5Ym9hcmQKKzA0NTQgIFZvYmlzIE1pY3JvY29tcHV0ZXIgQUcKKzA0NTUgIFRlbGVtYXRpY3MgSW50ZXJuYXRpb25hbCwgSW5jLgorMDQ1NiAgQW5hbG9nIERldmljZXMsIEluYy4KKzA0NTcgIFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW1zIENvcnAuCisJMDE1MCAgU3VwZXIgVGFsZW50IDFHQiBGbGFzaCBEcml2ZQorCTAxNTEgIFN1cGVyIEZsYXNoIDFHQiAvIEdYVCAgNjRNQiBGbGFzaCBEcml2ZQorCTAxNjIgIFNpUzE2MiB1c2IgV2lyZWxlc3MgTEFOIEFkYXB0ZXIKKwkwMTYzICA4MDIuMTEgV2lyZWxlc3MgTEFOIEFkYXB0ZXIKKwk1NDAxICBXaXJlbGVzcyBBZGFwdGVyIFJPODAyMTFHUy1VU0IKKzA0NTggIEtZRSBTeXN0ZW1zIENvcnAuIChNb3VzZSBTeXN0ZW1zKQorCTAwMDEgIE1vdXNlCisJMDAwMiAgR2VuaXVzIE5ldE1vdXNlIFBybworCTAwMDMgIEdlbml1cyBOZXRTY3JvbGwrCisJMDAwNiAgRWFzeSBNb3VzZSsgVVNCKFVTQlxWaWRfMDQ1OCZQaWQ7XzAwMDYpIE1vdXNlCisJMDAwYiAgTmV0TW91c2UgV2hlZWwoUCtVKQorCTAwMGMgIFRBQ09NQSBGaW5nZXJwcmludCBWMS4wNi4wMQorCTAwMGUgIFZpZGVvQ0FNIFdlYgorCTAwMTMgIFRBQ09NQSBGaW5nZXJwcmludCBNb3VzZSBWMS4wNi4wMQorCTAwMWEgIEdlbml1cyBXZWJTY3JvbGwrCisJMDAzNiAgUG9ja2V0IE1vdXNlIExFCisJMDA0YyAgU2xpbXN0YXIgUHJvIEtleWJvYXJkCisJMDA1NiAgRXJnbyAzMDAgTW91c2UKKwkwMDU3ICBFbmhhbmNlZCBHYW1pbmcgRGV2aWNlCisJMDA1OSAgRW5oYW5jZWQgTGFzZXIgRGV2aWNlCisJMDA1YSAgRW5oYW5jZWQgRGV2aWNlCisJMDA1YiAgRW5oYW5jZWQgRGV2aWNlCisJMDA1YyAgRW5oYW5jZWQgTGFzZXIgR2FtaW5nIERldmljZQorCTAwNWQgIEVuaGFuY2VkIERldmljZQorCTAwNjEgIEJsdWV0b290aCBEb25nbGUKKwkwMDgzICBCbHVldG9vdGggRG9uZ2xlCisJMDEwMCAgRWFzeVBlbiBUYWJsZXQKKwkwMTAxICBDdWVDYXQKKwkxMDAxICBKb3lzdGljaworCTEwMDIgIEdhbWUgUGFkCisJMTAwMyAgR2VuaXVzIFZpZGVvQ2FtCisJMTAwNCAgRmxpZ2h0MjAwMCBGLTIzIEpveXN0aWNrCisJMTAwYSAgQWFzaGltYSBUZWNobm9sb2d5IFRydXN0IFNpZ2h0IEZpZ2h0ZXIgVmlicmF0aW9uIEZlZWRiYWNrIEpveXN0aWNrCisJMjAwMSAgQ29sb3JQYWdlLVZpdmlkIFBybyBTY2FubmVyCisJMjAwNCAgQ29sb3JQYWdlLUhSNiBWMSBTY2FubmVyCisJMjAwNSAgQ29sb3JQYWdlLUhSNi9WaXZpZDMKKwkyMDA3ICBDb2xvclBhZ2UtSFI2IFYyIFNjYW5uZXIKKwkyMDA4ICBDb2xvclBhZ2UtSFI2IFYyIFNjYW5uZXIKKwkyMDA5ICBDb2xvclBhZ2UtSFI2QSBTY2FubmVyCisJMjAxMSAgQ29sb3JQYWdlLVZpdmlkM3ggU2Nhbm5lcgorCTIwMTIgIFBsdXN0ZWsgU2Nhbm5lcgorCTIwMTMgIENvbG9yUGFnZS1IUjcgU2Nhbm5lcgorCTIwMTQgIENvbG9yUGFnZS1WaXZpZDQKKwkyMDE1ICBDb2xvclBhZ2UtSFI3TEUgU2Nhbm5lcgorCTIwMTYgIENvbG9yUGFnZS1IUjZYIFNjYW5uZXIKKwkyMDE3ICBDb2xvclBhZ2UtVml2aWQzeGUKKwkyMDE4ICBDb2xvclBhZ2UtSFI3WAorCTIwMTkgIENvbG9yUGFnZS1IUjZYIFNsaW0KKwkyMDFhICBDb2xvclBhZ2UtVml2aWQ0eGUKKwkyMDFiICBDb2xvclBhZ2UtVml2aWQ0eAorCTIwMWMgIENvbG9yUGFnZS1IUjgKKwkyMDFkICBDb2xvclBhZ2UtVml2aWQgMTIwMCBYCisJMjAxZSAgQ29sb3JQYWdlLVNsaW0gMTIwMAorCTIwMWYgIENvbG9yUGFnZS1WaXZpZCAxMjAwIFhFCisJMjAyMCAgQ29sb3JQYWdlLVNsaW0gMTIwMCBVU0IyCisJMjAyMSAgQ29sb3JQYWdlLVNGNjAwCisJMzAxZCAgR2VuaXVzIE1heEZpcmUgTWluaVBhZAorCTYwMDEgIEdGMzAwMEYgRXRoZXJuZXQgQWRhcHRlcgorCTcwMDQgIFZpZGVvQ0FNIEV4cHJlc3MKKwk3MDA3ICBWaWRlb0NBTSBXZWIKKwk3MDA5ICBHLVNob3QgRzMxMiBTdGlsbCBDYW1lcmEgRGV2aWNlCisJNzAwYyAgVmlkZW9DQU0gV2ViIFYzCisJNzAwZCAgRy1TaG90IEc1MTEgQ29tcG9zaXRlIERldmljZQorCTcwMGYgIFZpZGVvQ0FNIFdlYiBWNAorCTcwMTIgIFdlYkNBTSBVU0IyLjAKKwk3MDE0ICBWaWRlb0NBTSBMaXZlIFYzCisJNzAxYyAgRy1TaG90IEc1MTIgU3RpbGwgQ2FtZXJhCisJNzAyMCAgU2ltIDMyMUMKKzA0NTkgIEFkb2JlIFN5c3RlbXMsIEluYy4KKzA0NWEgIFNPTklDYmx1ZSwgSW5jLgorCTA3ZGEgIFN1cHJhIEV4cHJlc3MgNTZLIG1vZGVtCisJMGI0YSAgU3VwcmFNYXggMjg5MCA1NksgTW9kZW0gW0x1Y2VudCBBdGxhc10KKwkwYjY4ICBTdXByYU1heCA1NksgTW9kZW0KKwk1MDAxICBSaW8gNjAwIE1QMyBQbGF5ZXIKKwk1MDAyICBSaW8gODAwIE1QMyBQbGF5ZXIKKwk1MDAzICBOaWtlIFBzYS9QbGF5IE1QMyBQbGF5ZXIKKwk1MDA1ICBSaW8gUzEwIE1QMyBQbGF5ZXIKKwk1MDA2ICBSaW8gUzUwIE1QMyBQbGF5ZXIKKwk1MDA3ICBSaW8gUzM1IE1QMyBQbGF5ZXIKKwk1MDA4ICBSaW8gOTAwIE1QMyBQbGF5ZXIKKwk1MDA5ICBSaW8gUzMwIE1QMyBQbGF5ZXIKKwk1MDBkICBGdXNlIE1QMyBQbGF5ZXIKKwk1MDBlICBDaGliYSBNUDMgUGxheWVyCisJNTAwZiAgQ2FsaSBNUDMgUGxheWVyCisJNTAxMCAgUmlvIFMxMSBNUDMgUGxheWVyCisJNTAxYyAgVmlyZ2luIE1QRi0xMDAwCisJNTAxZCAgUmlvIEZ1c2UKKwk1MDFlICBSaW8gQ2hpYmEKKwk1MDFmICBSaW8gQ2FsaQorCTUwM2YgIENhbGkyNTYgTVAzIFBsYXllcgorCTUyMDIgIFJpbyBSaW90IE1QMyBQbGF5ZXIKKwk1MjEwICBSaW8gS2FybWEgTXVzaWMgUGxheWVyCisJNTIyMCAgUmlvIE5pdHJ1cyBNUDMgUGxheWVyCisJNTIyMSAgUmlvIEVpZ2VuCiswNDViICBIaXRhY2hpLCBMdGQKKzA0NWQgIE5vcnRlbCBOZXR3b3JrcywgTHRkCiswNDVlICBNaWNyb3NvZnQgQ29ycC4KKwkwMDA3ICBTaWRlV2luZGVyIEdhbWUgUGFkCisJMDAwOCAgU2lkZVdpbmRlciBQcmVjaXNpb24gUHJvCisJMDAwOSAgSW50ZWxsaU1vdXNlCisJMDAwYiAgTmF0dXJhbCBLZXlib2FyZCBFbGl0ZQorCTAwMGUgIFNpZGVXaW5kZXLCriBGcmVlc3R5bGUgUHJvCisJMDAxNCAgRGlnaXRhbCBTb3VuZCBTeXN0ZW0gODAKKwkwMDFhICBTaWRlV2luZGVyIFByZWNpc2lvbiBSYWNpbmcgV2hlZWwKKwkwMDFiICBTaWRlV2luZGVyIEZvcmNlIEZlZWRiYWNrIDIgSm95c3RpY2sKKwkwMDFjICBJbnRlcm5ldCBLZXlib2FyZCBQcm8KKwkwMDFkICBOYXR1cmFsIEtleWJvYXJkIFBybworCTAwMWUgIEludGVsbGlNb3VzZSBFeHBsb3JlcgorCTAwMjMgIFRyYWNrYmFsbCBPcHRpY2FsCisJMDAyNCAgVHJhY2tiYWxsIEV4cGxvcmVyCisJMDAyNSAgSW50ZWxsaUV5ZSBNb3VzZQorCTAwMjYgIFNpZGVXaW5kZXIgR2FtZVBhZCBQcm8KKwkwMDI3ICBTaWRlV2luZGVyIFBuUCBHYW1lUGFkCisJMDAyOCAgU2lkZVdpbmRlciBEdWFsIFN0cmlrZQorCTAwMjkgIEludGVsbGlNb3VzZSBPcHRpY2FsCisJMDAyYiAgSW50ZXJuZXQgS2V5Ym9hcmQgUHJvCisJMDAyZCAgSW50ZXJuZXQgS2V5Ym9hcmQKKwkwMDJmICBJbnRlZ3JhdGVkIEh1YgorCTAwMzMgIFNpZGV3aW5kZXIgU3RyYXRlZ2ljIENvbW1hbmRlcgorCTAwMzQgIFNpZGVXaW5kZXIgRm9yY2UgRmVlZGJhY2sgV2hlZWwKKwkwMDM4ICBTaWRlV2luZGVyIFByZWNpc2lvbiAyCisJMDAzOSAgSW50ZWxsaU1vdXNlIE9wdGljYWwKKwkwMDNiICBTaWRlV2luZGVyIEdhbWUgVm9pY2UKKwkwMDNjICBTaWRlV2luZGVyIEpveXN0aWNrCisJMDA0MCAgV2hlZWwgTW91c2UgT3B0aWNhbAorCTAwNDcgIEludGVsbGlNb3VzZSBFeHBsb3JlciAzLjAKKwkwMDQ4ICBPZmZpY2UgS2V5Ym9hcmQgMS4wQQorCTAwNTMgIE9wdGljYWwgTW91c2UKKwkwMDU5ICBXaXJlbGVzcyBJbnRlbGxpTW91c2UgRXhwbG9yZXIKKwkwMDVjICBPZmZpY2UgS2V5Ym9hcmQgKDEwNi8xMDkpCisJMDA1ZiAgV2lyZWxlc3MgTXVsdGlNZWRpYSBLZXlib2FyZAorCTAwNjEgIFdpcmVsZXNzIE11bHRpTWVkaWEgS2V5Ym9hcmQgKDEwNi8xMDkpCisJMDA2MyAgV2lyZWxlc3MgTmF0dXJhbCBNdWx0aU1lZGlhIEtleWJvYXJkCisJMDA2NSAgV2lyZWxlc3MgTmF0dXJhbCBNdWx0aU1lZGlhIEtleWJvYXJkICgxMDYvMTA5KQorCTAwNmEgIFdpcmVsZXNzIE9wdGljYWwgTW91c2UgKEludGVsbGlQb2ludCkKKwkwMDZkICBlSG9tZSBSZW1vdGUgQ29udHJvbCBLZXlib2FyZCBrZXlzCisJMDA2ZSAgTU41MTAgODAyLjExYiBBZGFwdGVyCisJMDA2ZiAgU21hcnQgRGlzcGxheSBSZWZlcmVuY2UgRGV2aWNlCisJMDA3MCAgV2lyZWxlc3MgTXVsdGlNZWRpYSBLZXlib2FyZAorCTAwNzEgIFdpcmVsZXNzIE11bHRpTWVkaWEgS2V5Ym9hcmQgKDEwNi8xMDkpCisJMDA3MiAgV2lyZWxlc3MgTmF0dXJhbCBNdWx0aU1lZGlhIEtleWJvYXJkCisJMDA3MyAgV2lyZWxlc3MgTmF0dXJhbCBNdWx0aU1lZGlhIEtleWJvYXJkICgxMDYvMTA5KQorCTAwN2EgIDEwLzEwMCBVU0IgTklDCisJMDA3ZCAgTm90ZWJvb2sgT3B0aWNhbCBNb3VzZQorCTAwN2UgIFdpcmVsZXNzIFRyYW5zY2VpdmVyIGZvciBCbHVldG9vdGgKKwkwMDgwICBEaWdpdGFsIE1lZGlhIFBybyBLZXlib2FyZAorCTAwODMgIEJhc2ljIE9wdGljYWwgTW91c2UKKwkwMDg0ICBCYXNpYyBPcHRpY2FsIE1vdXNlCisJMDA4YSAgV2lyZWxlc3MgS2V5Ym9hcmQgYW5kIE1vdXNlCisJMDA4YiAgRHVhbCBSZWNlaXZlciBXaXJlbGVzcyBNb3VzZSAoSW50ZWxsaVBvaW50KQorCTAwOGMgIFdpcmVsZXNzIEludGVsbGltb3VzZSBFeHBsb3JlciAyLjAKKwkwMDk1ICBJbnRlbGxpTW91c2UgRXhwbG9yZXIgNC4wIChJbnRlbGxpUG9pbnQpCisJMDA5YyAgV2lyZWxlc3MgVHJhbnNjZWl2ZXIgZm9yIEJsdWV0b290aCAyLjAKKwkwMGEwICBlSG9tZSBJbmZyYXJlZCBSZWNlaXZlcgorCTAwYjAgIERpZ2l0YWwgTWVkaWEgUHJvIEtleWJvYXJkCisJMDBiOSAgV2lyZWxlc3MgT3B0aWNhbCBNb3VzZSAzLjAKKwkwMGJiICBGaW5nZXJwcmludCBSZWFkZXIKKwkwMGJjICBGaW5nZXJwcmludCBSZWFkZXIKKwkwMGJkICBGaW5nZXJwcmludCBSZWFkZXIKKwkwMGMyICBXaXJlbGVzcyBBZGFwdGVyIE1OLTcxMAorCTAwYzkgIE1UUCBEZXZpY2UKKwkwMGNlICBHZW5lcmljIFBQQyBGbGFzaCBkZXZpY2UKKwkwMGQxICBPcHRpY2FsIE1vdXNlIHdpdGggVGlsdCBXaGVlbAorCTAwZGEgIGVIb21lIEluZnJhcmVkIFJlY2VpdmVyCisJMDBkYiAgTmF0dXJhbCBFcmdvbm9taWMgS2V5Ym9hcmQgNDAwMCBWMS4wCisJMDBlMSAgV2lyZWxlc3MgTGFzZXIgTW91c2UgNjAwMCBSZWNpZXZlcgorCTAwZjQgIExpZmVDYW0gVlgtNjAwMC4KKwkwMGY1ICBMaWZlQ2FtIFZYLTMwMDAuCisJMDBmNyAgTGlmZUNhbSBWWC0xMDAwLgorCTAwZjggIExpZmVDYW0gTlgtNjAwMC4KKwkwMjAyICBYYm94IENvbnRyb2xsZXIKKwkwMjgwICBYQm94IERldmljZQorCTAyODQgIFhib3ggRFZEIFBsYXliYWNrIEtpdAorCTAyODUgIFhib3ggQ29udHJvbGxlciBTCisJMDI4OCAgWGJveCBDb250cm9sbGVyIFMgSHViCisJMDI4OSAgWGJveCBDb250cm9sbGVyIFMKKwkwMjhiICBYYm94MzYwIERWRCBFbXVsYXRvcgorCTAyOGQgIFhib3gzNjAgTWVtb3J5IFVuaXQgNjRNQgorCTAyOGUgIFhib3gzNjAgQ29udHJvbGxlcgorCTAyOGYgIFhib3gzNjAgV2lyZWxlc3MgQ29udHJvbGxlcgorCTAyOTAgIFhib3gzNjAgUGVyZm9ybWFuY2UgUGlwZSAoUElYKQorCTAyOTIgIFhib3gzNjAgV2lyZWxlc3MgTmV0d29ya2luZyBBZGFwdGVyCisJMDI5YyAgWGJveDM2MCBIRC1EVkQgRHJpdmUKKwkwMjlkICBYYm94MzYwIEhELURWRCBEcml2ZQorCTAyOWUgIFhib3gzNjAgSEQtRFZEIE1lbW9yeSBVbml0CisJMDQwMCAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyCisJMDQwMSAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyCisJMDQwMiAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyCisJMDQwMyAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyCisJMDQwNCAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyCisJMDQwNSAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyCisJMDQwNiAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyCisJMDQwNyAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyCisJMDQwOCAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyCisJMDQwOSAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyCisJMDQwYSAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyCisJMDQwYiAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyCisJMDQwYyAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyCisJMDQwZCAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyCisJMDQwZSAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyCisJMDQwZiAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyCisJMDQxMCAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyCisJMDQxMSAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyCisJMDQxMiAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyCisJMDQxMyAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyCisJMDQxNCAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyCisJMDQxNSAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyCisJMDQxNiAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyCisJMDQxNyAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyCisJMDQzMiAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQzMyAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQzNCAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQzNSAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQzNiAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQzNyAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQzOCAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQzOSAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQzYSAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQzYiAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQzYyAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQzZCAgQmVja2VyIFRyYWZmaWMgQXNzaXN0IEhpZ2hzcGVlZCA3OTM0CisJMDQzZSAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQzZiAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ0MCAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ0MSAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ0MiAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ0MyAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ0NCAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ0NSAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ0NiAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ0NyAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ0OCAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ0OSAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ0YSAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ0YiAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ0YyAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ0ZCAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ0ZSAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ0ZiAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ1MCAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ1MSAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ1MiAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ1MyAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ1NCAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ1NSAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ1NiAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ1NyAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ1OCAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ1OSAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ1YSAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ1YiAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ1YyAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ1ZCAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ1ZSAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ1ZiAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ2MCAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ2MSAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ2MiAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ2MyAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ2NCAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ2NSAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ2NiAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ2NyAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ2OCAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ2OSAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ2YSAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ2YiAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ2YyAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ2ZCAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ2ZSAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ2ZiAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ3MCAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ3MSAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ3MiAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ3MyAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ3NCAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ3NSAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ3NiAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ3NyAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ3OCAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ3OSAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ3YSAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDQ3YiAgV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzCisJMDRjOCAgV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMgorCTA0YzkgIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDIKKwkwNGNhICBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAyCisJMDRjYiAgV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMgorCTA0Y2MgIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDIKKwkwNGNkICBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAyCisJMDRjZSAgV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMgorCTA0ZDcgIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMKKwkwNGQ4ICBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzCisJMDRkOSAgV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMworCTA0ZGEgIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMKKwkwNGRiICBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzCisJMDRkYyAgV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMworCTA0ZGQgIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMKKwkwNGRlICBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzCisJMDRkZiAgV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMworCTA0ZTAgIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMKKwkwNGUxICBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzCisJMDRlMiAgV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMworCTA0ZTMgIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMKKwkwNGU0ICBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzCisJMDRlNSAgV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMworCTA0ZTYgIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMKKwkwNGU3ICBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzCisJMDRlOCAgV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMworCTA0ZTkgIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMKKwkwNGVhICBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzCisJMDcwOCAgVHJhbnNjZWl2ZXIgdiAzLjAgZm9yIEJsdWV0b290aAorCTA3MGEgIENoYXJvbiBCbHVldG9vdGggRG9uZ2xlIChERlUpCisJOTMwYSAgSVNPVVNCLlNZUyBJbnRlbCA4MjkzMCBJc29jaHJvbm91cyBJTyBUZXN0IEJvYXJkCisJZmZmOCAgS2V5Ym9hcmQKKzA0NjAgIEFjZSBDYWQgRW50ZXJwcmlzZSBDby4sIEx0ZAorMDQ2MSAgUHJpbWF4IEVsZWN0cm9uaWNzLCBMdGQKKwkwMzAwICBHMi0zMDAgU2Nhbm5lcgorCTAzMDEgIEcyRS0zMDAgU2Nhbm5lcgorCTAzMDIgIEcyLTMwMCAjMiBTY2FubmVyCisJMDMwMyAgRzJFLTMwMCAjMiBTY2FubmVyCisJMDM0MCAgQ29sb3JhZG8gOTYwMCBTY2FubmVyCisJMDM0MSAgQ29sb3JhZG8gNjAwdSBTY2FubmVyCisJMDM0NSAgVmlzaW9uZWVyIDYyMDAgU2Nhbm5lcgorCTAzNDYgIE1lbW9yZXggTWF4eCA2MTM2dSBTY2FubmVyCisJMDM0NyAgUHJpbWFzY2FuIENvbG9yYWRvIDI2MDB1L1Zpc2lvbmVlciA0NDAwIFNjYW5uZXIKKwkwMzYwICBDb2xvcmFkbyAxOTIwMCBTY2FubmVyCisJMDM2MSAgQ29sb3JhZG8gMTIwMHUgU2Nhbm5lcgorCTAzNjMgIFZpc3RhU2NhbiBBc3RyYSAzNjAwKEVORykKKwkwMzY0ICBMRyBFbGVjdHJvbmljcyBTY2Fud29ya3MgNjAwVSBTY2FubmVyCisJMDM2NSAgVmlzdGFTY2FuIEFzdHJhIDM2MDAoRU5HKQorCTAzNjYgIDY0MDAKKwkwMzY3ICBWaXN0YVNjYW4gQXN0cmEgMzYwMChFTkcpCisJMDM3MSAgVmlzaW9uZWVyIE9uZXRvdWNoIDg5MjAgU2Nhbm5lcgorCTAzNzQgIFVNQVggQXN0cmEgMjUwMAorCTAzNzUgIFZpc3RhU2NhbiBBc3RyYSAzNjAwKEVORykKKwkwMzc3ICBNZWRpb24gTUQgNTM0NSBTY2FubmVyCisJMDM3OCAgVmlzdGFTY2FuIEFzdHJhIDM2MDAoRU5HKQorCTAzN2IgIE1lZGlvbiBNRCA2MTkwIFNjYW5uZXIKKwkwMzdjICBWaXN0YVNjYW4gQXN0cmEgMzYwMChFTkcpCisJMDM4MCAgRzItNjAwIFNjYW5uZXIKKwkwMzgxICBSZWFkeVNjYW4gNjM2aSBTY2FubmVyCisJMDM4MiAgRzItNjAwICMyIFNjYW5uZXIKKwkwMzgzICBHMkUtNjAwIFNjYW5uZXIKKwkwMzhhICBVTUFYIEFzdHJhIDMwMDAvMzYwMAorCTAzOGIgIFhlcm94IDI0MDAgT25ldG91Y2gKKwkwMzhjICBVTUFYIEFzdHJhIDQxMDAKKwkwMzkyICBNZWRpb24vTGlmZXRlYy9UZXZpb24vQ3l0cm9uIE1EIDYxOTAKKwkwM2E4ICA5NDIwTQorCTA4MTMgIElCTSBVbHRyYVBvcnQgQ2FtZXJhCisJMDgxNSAgTWljcm8gSW5ub3ZhdGlvbnMgV2ViQ2FtCisJMDgxOSAgRnVqaWZpbG0gSVgtMzAgQ2FtZXJhIFt3ZWJjYW0gbW9kZV0KKwkwODFhICBGdWppZmlsbSBJWC0zMCBDYW1lcmEgW3N0b3JhZ2UgbW9kZV0KKwkwODFjICBFbGl0ZWdyb3VwIEVDUy1DMTEgQ2FtZXJhCisJMDgxZCAgRWxpdGVncm91cCBFQ1MtQzExIFN0b3JhZ2UKKwkwYTAwICBXZWIgQ2FtIDMyMAorCTRkMDEgIENvbWZvcnQgS2V5Ym9hcmQKKwk0ZDAyICBNb3VzZS1pbi1hLUJveAorCTRkMDMgIEtlbnNpbmd0b24gTW91c2UtaW4tYS1ib3gKKwk0ZDA0ICBNb3VzZQorCTRkMDYgIEJhbGxlc3MgTW91c2UgKEhJRCkKKwk0ZDJhICBQb1BvIEVsaXhpciBNb3VzZSAoSElEKQorCTRkMmIgIFdpcmVsZXNzIExhc2VyIE1pbmkgTW91c2UgKEhJRCkKKwk0ZDJjICBQb1BvIE1pbmkgUG9pbnRlciBNb3VzZSAoSElEKQorCTRkMmUgIE9wdGljYWwgTW9iaWxlIE1vdXNlIChISUQpCiswNDYzICBNR0UgVVBTIFN5c3RlbXMKKwkwMDAxICBVUFMKKwlmZmZmICBVUFMKKzA0NjQgIEFNUC9UeWNvZWxlY3Ryb25pY3MgQ29ycC4KKzA0NjcgIEFUJlQgUGFyYWR5bmUKKzA0NjggIFdpZXNvbiBUZWNobm9sb2dpZXMgQ28uLCBMdGQKKzA0NmEgIENoZXJyeSBHbWJICisJMDAwMSAgTXkzMDAwIEtleWJvYXJkCisJMDAwMyAgTXkzMDAwIEh1YgorCTAwMDQgIEN5Qm9hcmQgS2V5Ym9hcmQKKwkwMDA1ICBYWDMzIFNtYXJ0Q2FyZCBSZWFkZXIgS2V5Ym9hcmQKKwkwMDEwICBTbWFydEJvYXJkIFhYNDQKKwkwMDIzICBDeW1vdGlvbiBNYXN0ZXIgTGludXggS2V5Ym9hcmQKKwkwMDJkICBTbWFydFRlcm1pbmFsIFhYNDQKKwkwMDNlICBTbWFydFRlcm1pbmFsIFNULTJ4eHgKKzA0NmIgIEFtZXJpY2FuIE1lZ2F0cmVuZHMsIEluYy4KKwkwMDAxICBLZXlib2FyZAorCTAxMDEgIFBTLzIgS2V5Ym9hcmQsIE1vdXNlICYgSm95c3RpY2sgUG9ydHMKKwkwMzAxICBVU0IgMS4wIEh1YgorCTA1MDAgIFNlcmlhbCAmIFBhcmFsbGVsIFBvcnRzCiswNDZjICBUb3NoaWJhIENvcnAuLCBEaWdpdGFsIE1lZGlhIEVxdWlwbWVudAorMDQ2ZCAgTG9naXRlY2gsIEluYy4KKwkwMDgyICBBY2VyIEFzcGlyZSA1NjcyIFdlYmNhbQorCTAyMDAgIFdpbmdNYW4gRXh0cmVtZSBKb3lzdGljaworCTAyMDMgIE0yNDUyIEtleWJvYXJkCisJMDMwMSAgTTQ4NDggTW91c2UKKwkwNDAxICBIUCBQYWdlU2NhbgorCTA0MDIgIE5FQyBQYWdlU2NhbgorCTA0MGYgIExvZ2l0ZWNoL1N0b3JtIFBhZ2VTY2FuCisJMDQzMCAgTWljIChDb3JkbGVzcykKKwkwODAxICBRdWlja0NhbSBIb21lCisJMDgxMCAgUXVpY2tDYW0gUHJvCisJMDgyMCAgUXVpY2tDYW0gVkMKKwkwODMwICBRdWlja0NsaXAKKwkwODQwICBRdWlja0NhbSBFeHByZXNzCisJMDg1MCAgUXVpY2tDYW0gV2ViCisJMDg3MCAgUXVpY2tDYW0gRXhwcmVzcworCTA4OTAgIFF1aWNrQ2FtIFRyYXZlbGVyCisJMDg5MiAgT3JiaUNhbQorCTA4OTQgIENyeXN0YWxDYW0KKwkwODk1ICBRdWlja0NhbSBmb3IgRGVsbCBOb3RlYm9va3MKKwkwODk2ICBPcmJpQ2FtCisJMDg5NyAgUXVpY2tDYW0gZm9yIERlbGwgTm90ZWJvb2tzCisJMDg5OSAgUXVpY2tDYW0gZm9yIERlbGwgTm90ZWJvb2tzCisJMDhhMCAgUXVpY2tDYW0gSU0KKwkwOGExICBRdWlja0NhbSBJTSB3aXRoIHNvdW5kCisJMDhhMiAgTGFidGVjIFdlYkNhbSBQcm8KKwkwOGEzICBRdWlja0NhbSBRdWlja0NhbSBDaGF0CisJMDhhNiAgUXVpY2tDYW0gSU0KKwkwOGE3ICBRdWlja0NhbSBJbWFnZQorCTA4YTkgIE5vdGVib29rIERlbHV4ZQorCTA4YWEgIExhYnRlYyBOb3RlYm9va3MKKwkwOGFjICBRdWlja0NhbSBDb29sCisJMDhhZCAgUXVpY2tDYW0gQ29tbXVuaWNhdGUgU1RYCisJMDhhZSAgUXVpY2tjYW0gZm9yIE5vdGVib29rcworCTA4YWYgIFF1aWNrQ2FtIEVhc3kvQ29vbAorCTA4YjAgIFF1aWNrQ2FtIDMwMDAgUHJvIFtwd2NdCisJMDhiMSAgUXVpY2tDYW0gTm90ZWJvb2sgUHJvCisJMDhiMiAgUXVpY2tDYW0gUHJvIDQwMDAKKwkwOGIzICBRdWlja0NhbSBab29tCisJMDhiNCAgUXVpY2tDYW0gWm9vbQorCTA4YjUgIFF1aWNrQ2FtIFNwaGVyZQorCTA4YjkgIFF1aWNrQ2FtIElNCisJMDhiZCAgTWljcm9waG9uZSAoUHJvIDQwMDApCisJMDhjMCAgUXVpY2tDYW0gUHJvIDMwMDAKKwkwOGMxICBRdWlja0NhbSBGdXNpb24KKwkwOGMyICBRdWlja0NhbSBQVFoKKwkwOGMzICBDYW1lcmEgKE5vdGVib29rcyBQcm8pCisJMDhjNSAgUXVpY2tDYW0gUHJvIDUwMDAKKwkwOGM2ICBRdWlja0NhbSBmb3IgREVMTCBOb3RlYm9va3MKKwkwOGM5ICBRdWlja0NhbSBVbHRyYSBWaXNpb24KKwkwOGNhICBNaWMgKEZ1c2lvbikKKwkwOGNiICBNaWMgKE5vdGVib29rcyBQcm8pCisJMDhjYyAgTWljIChQVFopCisJMDhjZSAgUXVpY2tDYW0gUHJvIDUwMDAKKwkwOGNmICBRdWlja0NhbSBVcGRhdGVNZQorCTA4ZDAgIFF1aWNrQ2FtIEV4cHJlc3MKKwkwOGQ3ICBRdWlja0NhbSBDb21tdW5pY2F0ZSBTVFgKKwkwOGQ4ICBRdWlja0NhbSBmb3IgTm90ZWJvb2sgRGVsdXhlCisJMDhkOSAgUXVpY2tDYW0gSU0vQ29ubmVjdAorCTA4ZGEgIFF1aWNrQ2FtIE1lc3NhbmdlcgorCTA4ZGQgIFF1aWNrQ2FtIGZvciBOb3RlYm9va3MKKwkwOGUwICBRdWlja0NhbSBFeHByZXNzCisJMDhlMSAgTGFidGVjIFdlYkNhbQorCTA4ZjAgIFF1aWNrQ2FtIE1lc3NlbmdlcgorCTA4ZjEgIFF1aWNrQ2FtIEV4cHJlc3MKKwkwOGYyICBNaWNyb3Bob25lIChNZXNzZW5nZXIpCisJMDhmMyAgUXVpY2tDYW0gRXhwcmVzcworCTA4ZjQgIExhYnRlYyBXZWJDYW0KKwkwOGY1ICBRdWlja0NhbSBNZXNzZW5nZXIgQ29tbXVuaWNhdGUKKwkwOGY2ICBRdWlja2NhbSBNZXNzZW5nZXIgUGx1cworCTA5MDAgIENsaWNrU21hcnQgMzEwCisJMDkwMSAgQ2xpY2tTbWFydCA1MTAKKwkwOTAzICBDbGlja1NtYXJ0IDgyMAorCTA5MDUgIENsaWNrU21hcnQgODIwCisJMDkxMCAgUXVpY2tDYW0gQ29yZGxlc3MKKwkwOTIwICBRdWlja0NhbSBFeHByZXNzCisJMDkyMSAgTGFidGVjIFdlYkNhbQorCTA5MjIgIFF1aWNrQ2FtIExpdmUKKwkwOTI4ICBRdWlja2NhbSBFeHByZXNzCisJMDkyOSAgTGFidGVjIFdlYkNhbSBQcm8KKwkwOTJhICBRdWlja0NhbSBmb3IgTm90ZWJvb2tzCisJMDkyYiAgTGFidGVjIFdlYkNhbSBQbHVzCisJMDkyYyAgUXVpY2tDYW0gQ2hhdAorCTA5MmQgIFF1aWNrQ2FtIEV4cHJlc3MgLyBHbworCTA5MmUgIFF1aWNrQ2FtIENoYXQKKwkwOTJmICBRdWlja0NhbSBFeHByZXNzIFBsdXMKKwkwOTUwICBQb2NrZXQgQ2FtZXJhCisJMDk2MCAgQ2xpY2tTbWFydCA0MjAKKwkwOTcwICBQb2NrZXQ3NTAKKwkwOTkwICBRdWlja0NhbSBQcm8gOTAwMAorCTA5OTEgIFF1aWNrQ2FtIFBybyBmb3IgTm90ZWJvb2tzCisJMDk5MiAgUXVpY2tDYW0gQ29tbXVuaWNhdGUgRGVsdXhlCisJMDk5NCAgUXVpY2tDYW0gT3JiaXQvU3BoZXJlIEFGCisJMDliMCAgT3JiaUNhbQorCTA5YzAgIFF1aWNrQ2FtIGZvciBEZWxsIE5vdGVib29rcyBNaWMKKwkwOWMxICBRdWlja0NhbSBEZWx1eGUgZm9yIE5vdGVib29rcworCTBhMDEgIFVTQiBIZWFkc2V0CisJMGEwMiAgUHJlbWl1bSBTdGVyZW8gVVNCIEhlYWRzZXQgMzUwCisJMGEwMyAgTG9naXRlY2ggVVNCIE1pY3JvcGhvbmUKKwkwYTA0ICBWMjAgcG9ydGFibGUgc3BlYWtlcnMgKFVTQiBwb3dlcmVkKQorCTBiMDIgIEJUIE1pbmktUmVjZWl2ZXIgKEhJRCBwcm94eSBtb2RlKQorCTg4MDEgIFZpZGVvIENhbWVyYQorCWIzMDUgIEJUIE1pbmktUmVjZWl2ZXIKKwliZmU0ICBQcmVtaXVtIE9wdGljYWwgV2hlZWwgTW91c2UKKwljMDAwICBONDMgW1BpbG90IE1vdXNlXQorCWMwMDEgIE40OC9NLUJCNDggW0ZpcnN0TW91c2UgUGx1c10KKwljMDAyICBNLUJBNDcgW01vdXNlTWFuIFBsdXNdCisJYzAwMyAgTW91c2VNYW4KKwljMDA0ICBXaW5nTWFuIEdhbWluZyBNb3VzZQorCWMwMDUgIFdpbmdNYW4gR2FtaW5nIFdoZWVsIE1vdXNlCisJYzAwYiAgTW91c2VNYW4gV2hlZWwKKwljMDBjICBPcHRpY2FsIFdoZWVsIE1vdXNlCisJYzAwZCAgTW91c2VNYW4gV2hlZWwrCisJYzAwZSAgTS1CSjU4L00tQko2OSBPcHRpY2FsIFdoZWVsIE1vdXNlCisJYzAwZiAgTW91c2VNYW4gVHJhdmVsZXIvTW9iaWxlCisJYzAxMSAgT3B0aWNhbCBNb3VzZU1hbgorCWMwMTIgIE1vdXNlbWFuIER1YWwgT3B0aWNhbAorCWMwMTQgIENvcmRlZCBXb3Jrc3RhdGlvbiBNb3VzZQorCWMwMTUgIENvcmRlZCBXb3Jrc3RhdGlvbiBNb3VzZQorCWMwMTYgIE0tVVY2OWEvSFAgTS1VVjk2IE9wdGljYWwgV2hlZWwgTW91c2UKKwljMDE4ICBPcHRpY2FsIFdoZWVsIE1vdXNlCisJYzAxOSAgT3B0aWNhbCBUaWx0IFdoZWVsIE1vdXNlCisJYzAxYSAgTS1CUTg1IE9wdGljYWwgV2hlZWwgTW91c2UKKwljMDFiICBNWDMxMCBPcHRpY2FsIE1vdXNlCisJYzAxYyAgT3B0aWNhbCBNb3VzZQorCWMwMWQgIE1YNTEwIE9wdGljYWwgTW91c2UKKwljMDFlICBNWDUxOCBPcHRpY2FsIE1vdXNlCisJYzAyNCAgTVgzMDAgT3B0aWNhbCBNb3VzZQorCWMwMjUgIE1YNTAwIE9wdGljYWwgTW91c2UKKwljMDMwICBpRmVlbCBNb3VzZQorCWMwMzEgIGlGZWVsIE1vdXNlKworCWMwMzIgIE1vdXNlTWFuIGlGZWVsCisJYzAzMyAgaUZlZWwgTW91c2VNYW4rCisJYzAzNCAgTW91c2VNYW4gT3B0aWNhbAorCWMwMzUgIE1vdXNlCisJYzAzNiAgTW91c2UKKwljMDM3ICBNb3VzZQorCWMwMzggIE1vdXNlCisJYzAzZCAgTS1CVDY5YSBQaWxvdCBPcHRpY2FsIE1vdXNlCisJYzAzZSAgUHJlbWl1bSBPcHRpY2FsIFdoZWVsIE1vdXNlCisJYzAzZiAgVWx0cmFYIE9wdGljYWwgTW91c2UKKwljMDQwICBDb3JkZWQgVGlsdC1XaGVlbCBNb3VzZQorCWMwNDMgIE1YMzIwIExhc2VyIE1vdXNlCisJYzA0NCAgTFgzIE9wdGljYWwgTW91c2UKKwljMDQ1ICBPcHRpY2FsIE1vdXNlCisJYzA0NiAgUlgxMDAwIExhc2VyIE1vdXNlCisJYzA0NyAgTGFzZXIgTW91c2UKKwljMDQ5ICBHNSBMYXNlciBNb3VzZQorCWMwNTAgIFJYIDI1MCBPcHRpY2FsIE1vdXNlCisJYzA1MSAgRzMgKE1YNTE4KSBPcHRpY2FsIE1vdXNlCisJYzA1MyAgTGFzZXIgTW91c2UKKwljMTAxICBVbHRyYVggTWVkaWEgUmVtb3RlCisJYzIwMSAgV2luZ01hbiBFeHRyZW1lIEpveXN0aWNrIHdpdGggVGhyb3R0bGUKKwljMjAyICBXaW5nTWFuIEZvcm11bGEKKwljMjA3ICBXaW5nTWFuIEV4dHJlbWUgRGlnaXRhbCAzRAorCWMyMDggIFdpbmdNYW4gR2FtZXBhZCBFeHRyZW1lCisJYzIwOSAgV2luZ01hbiBHYW1lcGFkCisJYzIwYSAgV2luZ01hbiBSdW1ibGVQYWQKKwljMjBiICBXaW5nTWFuIEFjdGlvbiBQYWQKKwljMjBjICBXaW5nTWFuIFByZWNpc2lvbgorCWMyMGQgIFdpbmdNYW4gQXR0YWNrIDIKKwljMjBlICBXaW5nTWFuIEZvcm11bGEgR1AKKwljMjExICBpVG91Y2ggQ29yZGxlc3MgUmVjaWV2ZXIKKwljMjEyICBXaW5nTWFuIEV4dHJlbWUgRGlnaXRhbCAzRAorCWMyMTMgIEotVUgxNiAoRnJlZWRvbSAyLjQgQ29yZGxlc3MgSm95c3RpY2spCisJYzIxNCAgQVRLMyAoQXR0YWNrIElJSSBKb3lzdGljaykKKwljMjE1ICBFeHRyZW1lIDNEIFBybworCWMyMTYgIER1YWwgQWN0aW9uIEdhbWVwYWQKKwljMjE4ICBMb2dpdGVjaCBSdW1ibGVQYWQgMiBVU0IKKwljMjE5ICBDb3JkbGVzcyBSdW1ibGVQYWQgMgorCWMyMWEgIFByZWNpc2lvbiBHYW1lcGFkCisJYzIyMSAgRzE1IEtleWJvYXJkIC8gS2V5Ym9hcmQKKwljMjIyICBHMTUgS2V5Ym9hcmQgLyBMQ0QKKwljMjIzICBHMTUgS2V5Ym9hcmQgLyBVU0IgSHViCisJYzI4MSAgV2luZ01hbiBGb3JjZQorCWMyODMgIFdpbmdNYW4gRm9yY2UgM0QKKwljMjg1ICBXaW5nTWFuIFN0cmlrZSBGb3JjZSAzRAorCWMyODYgIEZvcmNlIDNEIFBybworCWMyOTEgIFdpbmdNYW4gRm9ybXVsYSBGb3JjZQorCWMyOTMgIFdpbmdNYW4gRm9ybXVsYSBGb3JjZSBHUAorCWMyOTQgIERyaXZpbmcgRm9yY2UKKwljMjk1ICBNb21vIEZvcmNlIFN0ZWVyaW5nIFdoZWVsCisJYzI5OCAgRHJpdmluZyBGb3JjZSBQcm8KKwljMmEwICBXaW5nbWFuIEZvcmNlIEZlZWRiYWNrIE1vdXNlCisJYzJhMSAgV2luZ01hbiBGb3JjZSBGZWVkYmFjayBNb3VzZQorCWMzMDEgIGlUb3VjaCBLZXlib2FyZAorCWMzMDIgIGlUb3VjaCBQcm8gS2V5Ym9hcmQKKwljMzAzICBpVG91Y2ggS2V5Ym9hcmQKKwljMzA1ICBJbnRlcm5ldCBLZXlib2FyZAorCWMzMDcgIEludGVybmV0IEtleWJvYXJkCisJYzMwOCAgSW50ZXJuZXQgTmF2aWdhdG9yIEtleWJvYXJkCisJYzMwOSAgSW50ZXJuZXQgS2V5Ym9hcmQKKwljMzBhICBpVG91Y2ggQ29tcG9zaXRlCisJYzMwYyAgSW50ZXJuZXQgS2V5cyAoWCkKKwljMzBkICBJbnRlcm5ldCBLZXlzCisJYzMwZSAgVWx0cmFYIEtleXMgKFgpCisJYzMwZiAgTG9naWNvb2wgSElELUNvbXBsaWFudCBLZXlib2FyZCAoMTA2IGtleSkKKwljMzE1ICBDbGFzc2ljIE5ldyBUb3VjaCBLZXlib2FyZAorCWMzMTYgIEhJRC1Db21wbGlhbnQgS2V5Ym9hcmQKKwljNDAxICBUcmFja01hbiBNYXJibGUgV2hlZWwKKwljNDAyICBNYXJibGUgTW91c2UgKDItYnV0dG9uKQorCWM0MDMgIFR1cmJvIFRyYWNrTWFuIE1hcmJsZSBGWAorCWM0MDQgIFRyYWNrTWFuIFdoZWVsCisJYzQwOCAgTWFyYmxlIE1vdXNlICg0LWJ1dHRvbikKKwljNTAxICBDb3JkbGVzcyBNb3VzZSBSZWNlaXZlcgorCWM1MDIgIENvcmRsZXNzIE1vdXNlICYgaVRvdWNoIEtleXMKKwljNTAzICBDb3JkbGVzcyBNb3VzZStLZXlib2FyZCBSZWNlaXZlcgorCWM1MDQgIENvcmRsZXNzIE1vdXNlK0tleWJvYXJkIFJlY2VpdmVyCisJYzUwNSAgQ29yZGxlc3MgTW91c2UrS2V5Ym9hcmQgUmVjZWl2ZXIKKwljNTA2ICBNWC03MDAgQ29yZGxlc3MgTW91c2UgUmVjZWl2ZXIKKwljNTA4ICBDb3JkbGVzcyBUcmFja2JhbGwKKwljNTA5ICBDb3JkbGVzcyBLZXlib2FyZAorCWM1MGEgIENvcmRsZXNzIE1vdXNlCisJYzUwYiAgQ29yZGxlc3MgRGVza3RvcCBPcHRpY2FsCisJYzUwZCAgQ29yZGxlc3MgTW91c2UKKwljNTBlICBNWC0xMDAwIENvcmRsZXNzIE1vdXNlIFJlY2VpdmVyCisJYzUxMCAgQ29yZGxlc3MgTW91c2UKKwljNTEyICBMWC03MDAgQ29yZGxlc3MgRGVza3RvcCBSZWNlaXZlcgorCWM1MTMgIE1YMzAwMCBDb3JkbGVzcyBEZXNrdG9wIFJlY2VpdmVyCisJYzUxNCAgQ29yZGxlc3MgTW91c2UKKwljNTE3ICBMWDcxMCBDb3JkbGVzcyBEZXNrdG9wIExhc2VyCisJYzUxOCAgTVg2MTAgTGFzZXIgQ29yZGxlc3MgTW91c2UKKwljNTFhICBNWCBSZXZvbHV0aW9uL0c3IENvcmRsZXNzIE1vdXNlCisJYzUyMSAgTVg2MjAgTGFzZXIgQ29yZGxlc3MgTW91c2UKKwljNjI1ICAzRGNvbm5leGlvbiBTcGFjZSBQaWxvdCAzRCBNb3VzZQorCWM2MjYgIDNEQ29ubmV4aW9uIFNwYWNlIE5hdmlnYXRvciAzRCBNb3VzZQorCWM2MjcgIDNEQ29ubmV4aW9uIFNwYWNlIEV4cGxvcmVyIDNEIE1vdXNlCisJYzcwMiAgQ29yZGxlc3MgUHJlc2VudGVyCisJYzcwMyAgRWxpdGUgS2V5Ym9hcmQgWS1SUDIwICsgTW91c2UgTVg5MDAgKEJsdWV0b290aCkKKwljNzA3ICBCbHVldG9vdGggd2lyZWxlc3MgaHViCisJYzcwOCAgQmx1ZXRvb3RoIHdpcmVsZXNzIGh1YgorCWM3MDkgIEJUIE1pbmktUmVjZWl2ZXIgKEhDSSBtb2RlKQorCWM3MGEgIE1YNTAwMCBDb3JkbGVzcyBEZXNrdG9wCisJYzcwYiAgQlQgTWluaS1SZWNlaXZlciAoSElEIHByb3h5IG1vZGUpCisJYzcwYyAgQlQgTWluaS1SZWNlaXZlciAoSElEIHByb3h5IG1vZGUpCisJYzcwZCAgQmx1ZXRvb3RoIHdpcmVsZXNzIGh1YgorCWM3MGUgIE1YMTAwMCBCbHVldG9vdGggTGFzZXIgTW91c2UKKwljNzBmICBCbHVldG9vdGggd2lyZWxlc3MgaHViCisJYzcxMiAgQmx1ZXRvb3RoIHdpcmVsZXNzIGh1YgorCWM3MTUgIEJsdWV0b290aCB3aXJlbGVzcyBodWIKKwljNzFhICBCbHVldG9vdGggd2lyZWxlc3MgaHViCisJYzcxZCAgQmx1ZXRvb3RoIHdpcmVsZXNzIGh1YgorCWM3MjAgIEJsdWV0b290aCB3aXJlbGVzcyBodWIKKwljYTAzICBNT01PIFJhY2luZworCWNhMDQgIEZvcm11bGEgVmlicmF0aW9uIEZlZWRiYWNrIFdoZWVsCisJZDAwMSAgUXVpY2tDYW0gUHJvCiswNDZlICBCZWhhdmlvciBUZWNoLiBDb21wdXRlciBDb3JwLgorCTAxMDAgIEtleWJvYXJkCisJMzAwMSAgTWFzcyBTdG9yYWdlIERldmljZQorCTMwMDIgIE1hc3MgU3RvcmFnZSBEZXZpY2UKKwkzMDAzICBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJMzAwNSAgTWFzcyBTdG9yYWdlIERldmljZQorCTMwMDggIE1hc3MgU3RvcmFnZSBEZXZpY2UKKwk1MjUwICBLZXlNYWVzdHJvIE11bHRpbWVkaWEgS2V5Ym9hcmQKKwk1MjczICBLZXlNYWVzdHJvIE11bHRpbWVkaWEgS2V5Ym9hcmQKKwk1MzA4ICBLZXlNYWVzdHJvIEtleWJvYXJkCisJNTQwOCAgS2V5TWFlc3RybyBNdWx0aW1lZGlhIEtleWJvYXJkL0h1YgorCTU3MjAgIFNtYXJ0IENhcmQgUmVhZGVyCisJNjc4MiAgQlRDIDc5MzIgbW91c2Ura2V5Ym9hcmQKKzA0NmYgIENyeXN0YWwgU2VtaWNvbmR1Y3RvcgorMDQ3MSAgUGhpbGlwcworCTAxMDEgIERTUzM1MCBEaWdpdGFsIFNwZWFrZXIgU3lzdGVtCisJMDEwNCAgRFNTMzMwIERpZ2l0YWwgU3BlYWtlciBTeXN0ZW0gW3VkYTEzMjFdCisJMDEwNSAgVURBMTMyMQorCTAxNjAgIE1QMyBQbGF5ZXIKKwkwMTYxICBNUDMgUGxheWVyCisJMDIwMSAgSHViCisJMDIyMiAgQ3JlYXRpdmUgTm9tYWQgSnVrZWJveAorCTAzMDIgIFBDQTY0NVZDIFdlYkNhbSBbcHdjXQorCTAzMDMgIFBDQTY0NlZDIFdlYkNhbSBbcHdjXQorCTAzMDQgIEFza2V5IFZDMDEwIFdlYkNhbSBbcHdjXQorCTAzMDcgIFBDVkM2NzVLIFdlYkNhbSBbcHdjXQorCTAzMDggIFBDVkM2ODBLIFdlYkNhbSBbcHdjXQorCTAzMGIgIFBDIFZHQSBDYW1lcmEgKFZlc3RhIEZ1bikKKwkwMzBjICBQQ1ZDNjkwSyBXZWJDYW0gW3B3Y10KKwkwMzEwICBQQ1ZDNzMwSyBXZWJDYW0gW3B3Y10KKwkwMzExICBQQ1ZDNzQwSyBUb1VjYW0gUHJvIFtwd2NdCisJMDMxMiAgUENWQzc1MEsgV2ViQ2FtIFtwd2NdCisJMDMxNCAgRE1WQyAxMDAwSworCTAzMTYgIERNVkMgMjAwMEsgVmlkZW8gQ2FwdHVyZQorCTAzMjEgIEZ1bkNhbQorCTAzMjUgIFNQQyAyMDBOQyBQQyBDYW1lcmEKKwkwMzI2ICBTUEMgMzAwTkMgUEMgQ2FtZXJhCisJMDMyNyAgV2ViQ2FtIFNQQyA2MDAwIE5DIChXZWJDYW0gdy8gbWljKQorCTAzMjkgIE9SSVRFIENDRCBXZWJjYW0oUEMzNzBSKQorCTA0MDEgIFNlbWljb25kdWN0b3JzIENJQ1QgS2V5Ym9hcmQKKwkwNDAyICBQUy8yIE1vdXNlIG9uIFNlbWljb25kdWN0b3JzIENJQ1QgS2V5Ym9hcmQKKwkwNDA2ICAxNSBpbmNoIERldGFjaGFibGUgTW9uaXRvcgorCTA0MDcgIDEwIGluY2ggTW9iaWxlIE1vbml0b3IKKwkwNDcxICBEaWdpdGFsIFNwZWFrZXIgU3lzdGVtCisJMDYwMSAgT1ZVMTAyMCBJUiBEb25nbGUgKEtiZCtNb3VzZSkKKwkwNjAyICBBVEkgUmVtb3RlIFdvbmRlciBJSSBJbnB1dCBEZXZpY2UKKwkwNjAzICBBVEkgUmVtb3RlIFdvbmRlciBJSSBDb250cm9sbGVyCisJMDYwOCAgZUhvbWUgSW5mcmFyZWQgUmVjZWl2ZXIKKwkwNjBhICBUU1U5NjAwIFJlbW90ZSBDb250cm9sCisJMDYwZSAgUkYgRG9uZ2xlCisJMDYxOSAgVFNVOTQwMCBSZW1vdGUgQ29udHJvbAorCTA3MDAgIFNlbWljb25kdWN0b3JzIENJQ1QgSHViCisJMDcwMSAgMTUwUDEgVEZUIERpc3BsYXkKKwkwODA5ICBBVk5FVCBCbHVldG9vdGggRGV2aWNlCisJMDgxMSAgSlIyNCBDRFJXCisJMDgxNSAgZUhvbWUgSW5mcmFyZWQgUmVjZWl2ZXIKKwkxMTIwICBDcmVhdGl2ZSBSaG9tYmEgTVAzIHBsYXllcgorCTExMjUgIE5pa2UgcHNhWzEyOG1heCBQbGF5ZXIKKwkxMTM3ICBIREQwNjUgTVAzIHBsYXllcgorCTEyMDEgIEFyaW1hIEJsdWV0b290aCBEZXZpY2UKKwkxMjMwICBXaXJlbGVzcyBBZGFwdGVyIDExZworCTEyMzIgIFNOVTY1MDAgV2lyZWxlc3MgQWRhcHRlcgorCTEyMzMgIFdpcmVsZXNzIEFkYXB0ZXIgQm9vdGxvYWRlciBEb3dubG9hZAorCTEyMzYgIFNOVTU2MDAKKwkxMjM3ICBUYWxrVGFsayBTTlU1NjMwTlMvMDUgV2lyZWxlc3MgQWRhcHRlcgorCTE1NTIgIElTUCAxNTgxIEhpLVNwZWVkIFVTQiBNUEVHMiBFbmNvZGVyIFJlZmVyZW5jZSBLaXQKKwkxODAxICBEaXZhIE1QMyBwbGF5ZXIKKwkyMDBhICBXaXJlbGVzcyBOZXR3b3JrIEFkYXB0ZXIKKwkyMDBmICA4MDIuMTFuIFdpcmVsZXNzIEFkYXB0ZXIKKwk0ODVkICBTZW5zZWxvY2sgU2Vuc2VJViB2Mi54CiswNDcyICBDaGljb255IEVsZWN0cm9uaWNzIENvLiwgTHRkCisJMDA2NSAgUEZVLTY1IEtleWJvYXJkCiswNDczICBTYW55byBJbmZvcm1hdGlvbiBCdXNpbmVzcyBDby4sIEx0ZAorMDQ3NCAgU2FueW8gRWxlY3RyaWMgQ28uLCBMdGQKKwkwMTEwICBEaWdpdGFsIFZvaWNlIFJlY29yZGVyIFIyMDAKKwkwMjE3ICBYYWN0aSBKMgorCTAyMmYgIEM1IERpZ2l0YWwgTWVkaWEgQ2FtZXJhIChtYXNzIHN0b3JhZ2UgbW9kZSkKKwkwMjMwICBDNSBEaWdpdGFsIE1lZGlhIENhbWVyYSAoUGljdEJyaWRnZSBtb2RlKQorCTAyMzEgIEM1IERpZ2l0YWwgTWVkaWEgQ2FtZXJhIChQQyBjb250cm9sIG1vZGUpCisJMDQwMSAgT3B0aWNhbCBEcml2ZQorCTA3MDEgIFNDUC00OTAwIENlbGxwaG9uZQorCTA3MWYgIFVzYiBDb20gUG9ydCBFbnVtZXJhdG9yCiswNDc1ICBSZWxpc3lzL1RlY28gSW5mb3JtYXRpb24gU3lzdGVtCisJMDEwMCAgTkVDIFBldGlzY2FuCisJMDEwMyAgRWNsaXBzZSAxMjAwVS9FcGlzb2RlCisJMDIxMCAgU2NvcnBpbyBVbHRyYSAzCiswNDc2ICBBRVNQCiswNDc3ICBTZWFnYXRlIFRlY2hub2xvZ3ksIEluYy4KKzA0NzggIENvbm5lY3RpeCBDb3JwLgorCTAwMDEgIFF1aWNrQ2FtCisJMDAwMiAgUXVpY2tDbGlwCisJMDAwMyAgUXVpY2tDYW0gUHJvCiswNDc5ICBBZHZhbmNlZCBQZXJpcGhlcmFsIExhYm9yYXRvcmllcworMDQ3YSAgU2VtdGVjaCBDb3JwLgorCTAwMDQgIFNjcmVlbkNvZGVyIFVSN0hDVFMyLVVTQgorMDQ3YiAgU2lsaXRlayBDb3JwLgorCTAwMDEgIEtleWJvYXJkCisJMDAwMiAgS2V5Ym9hcmQgYW5kIE1vdXNlCisJMDBmOSAgU0stMTc4OXUgS2V5Ym9hcmQKKwkwMTAxICBCbHVlVG9vdGggS2V5Ym9hcmQgYW5kIE1vdXNlCisJMDIwYiAgU0stMzEwNSBTbWFydENhcmQgUmVhZGVyCisJMDUwZSAgSW50ZXJuZXQgQ29tcGFjdCBLZXlib2FyZAorCTEwMDAgIFRydXN0IE9mZmljZSBTY2FuIFVTQiAxOTIwMAorCTEwMDIgIEhQIFNjYW5KZXQgNDMwMGMgUGFyYWxsZWwgUG9ydAorMDQ3YyAgRGVsbCBDb21wdXRlciBDb3JwLgorMDQ3ZCAgS2Vuc2luZ3RvbgorCTEwMDEgIE1vdXNlKmluKmEqQm94CisJMTAwMiAgRXhwZXJ0IE1vdXNlIFBybworCTEwMDMgIE9yYml0IFRyYWNrQmFsbAorCTEwMDQgIE1vdXNlV29ya3MKKwkxMDA1ICBUdXJib0JhbGwKKwkxMDA2ICBUdXJib1JpbmcKKwkxMDA5ICBPcmJpdCBUcmFja0JhbGwgZm9yIE1hYworCTEwMTIgIFBvY2tldE1vdXNlCisJMTAxMyAgTW91c2UqaW4qYSpCb3ggT3B0aWNhbCBQcm8KKwkxMDE0ICBFeHBlcnQgTW91c2UgUHJvIFdpcmVsZXNzCisJMTAxNSAgRXhwZXJ0IE1vdXNlCisJMTAxNiAgQURCL1VTQiBPcmJpdAorCTEwMTggIFN0dWRpbyBNb3VzZQorCTEwMWQgIE1vdXNlKmluKmEqQm94IE9wdGljYWwgUHJvCisJMTAxZSAgU3R1ZGlvIE1vdXNlIFdpcmVsZXNzCisJMTAxZiAgUG9ja2V0TW91c2UgUHJvCisJMTAyMCAgRXhwZXJ0IE1vdXNlIFRyYWNrYmFsbAorCTEwMjEgIEV4cGVydCBNb3VzZSBXaXJlbGVzcworCTEwMjIgIE9yYml0IE9wdGljYWwKKwkxMDIzICBQb2NrZXQgTW91c2UgUHJvIFdpcmVsZXNzCisJMTAyNCAgUG9ja2V0TW91c2UKKwkxMDI1ICBNb3VzZSppbiphKkJveCBPcHRpY2FsIEVsaXRlIFdpcmVsZXNzCisJMTAyNiAgUG9ja2V0IE1vdXNlIFBybworCTEwMjcgIFN0dWRpb01vdXNlCisJMTAyOCAgU3R1ZGlvTW91c2UgV2lyZWxlc3MKKwkxMDI5ICBNb3VzZSppbiphKkJveCBPcHRpY2FsIEVsaXRlCisJMTAyYSAgTW91c2UqaW4qYSpCb3ggT3B0aWNhbAorCTEwMmIgIFBvY2tldE1vdXNlCisJMTAyYyAgSXJpZGlvCisJMTAyZCAgUGlsb3QgT3B0aWNhbAorCTEwMmUgIFBpbG90IE9wdGljYWwgUHJvCisJMTAyZiAgUGlsb3QgT3B0aWNhbCBQcm8gV2lyZWxlc3MKKwkxMDRhICBQaWxvdE1vdXNlIE1pbmkgUmV0cmFjdGFibGUKKwkxMDVkICBQb2NrZXRNb3VzZSBCbHVldG9vdGgKKwkxMDVlICBCbHVldG9vdGggRURSIERvbmdsZQorCTEwNjEgIFBvY2tldE1vdXNlIEdyaXAKKwkxMDYyICBQb2NrZXRNb3VzZSBNYXgKKwkxMDYzICBQb2NrZXRNb3VzZSBNYXggV2lyZWxlc3MKKwkxMDY0ICBQb2NrZXRNb3VzZSAyLjAgV2lyZWxlc3MKKwkxMDY1ICBQb2NrZXRNb3VzZSAyLjAKKwkxMDY2ICBQb2NrZXRNb3VzZSBNYXggR2xvdworCTEwNjcgIFZhbHVlTW91c2UKKwkxMDY4ICBWYWx1ZU9wdCBXaGl0ZQorCTEwNjkgIFZhbHVlT3B0IEJsYWNrCisJMTA2YSAgUGlsb3RNb3VzZSBMYXNlciBXaXJlbGVzcyBNaW5pCisJMTA2YiAgUGlsb3RNb3VzZSBMYXNlciAtIDMgQnV0dG9uCisJMTA2YyAgUGlsb3RNb3VzZSBMYXNlciAtIEdhbWluZworCTEwNmQgIFBpbG90TW91c2UgTGFzZXIgLSBXaXJlZAorCTEwNmUgIFBpbG90TW91c2UgTWljcm8gTGFzZXIKKwkxMDcwICBWYWx1ZU9wdCBUcmF2ZWwKKwkxMDcxICBWYWx1ZU9wdCBSRiBUWAorCTEwNzIgIFBvY2tldE1vdXNlIENvbG91cgorCTEwNzMgIFBpbG90TW91c2UgTGFzZXIgLSA2IEJ1dHRvbgorCTEwNzQgIFBpbG90TW91c2UgTGFzZXIgV2lyZWxlc3MgTWluaQorCTEwNzUgIFNsaW1CbGFkZSBQcmVzZW50ZXIgTWVkaWEgTW91c2UKKwkxMDc2ICBTbGltQmxhZGUgTWVkaWEgTW91c2UKKwkxMDc3ICBTbGltQmxhZGUgUHJlc2VudGVyIE1vdXNlCisJMTE1MiAgQmx1ZXRvb3RoIEVEUiBEb25nbGUKKwkyMDAyICBPcHRpY2FsIEVsaXRlIFdpcmVsZXNzCisJMjAxMCAgV2lyZWxlc3MgUHJlc2VudGF0aW9uIFJlbW90ZQorCTIwMjEgIFBpbG90Qm9hcmQgV2lyZWxlc3MKKwkyMDMwICBQaWxvdEJvYXJkIFdpcmVsZXNzCisJMjAzNCAgU2xpbUJsYWRlIE1lZGlhIE5vdGVib29rIFNldAorCTQwMDMgIEdyYXZpcyBYdGVybWluYXRvciBEaWdpdGFsIEdhbWVwYWQKKwk0MDA1ICBHcmF2aXMgRWxpbWluYXRvciBHYW1lUGFkIFBybworCTQwMDYgIEdyYXZpcyBFbGltaW5hdG9yIEFmdGVyU2hvY2sKKwk0MDA3ICBHcmF2aXMgWHRlcm1pbmF0b3IgRm9yY2UKKwk0MDA4ICBHcmF2aXMgRGVzdHJveWVyIFRpbHRQYWQKKwk1MDAxICBDYWJvIEkgQ2FtZXJhCisJNTAwMiAgVmlkZW9DYW0gQ0FCTyBJSQorCTUwMDMgIFZpZGVvQ2FtCiswNDdlICBBZ2VyZSBTeXN0ZW1zLCBJbmMuIChMdWNlbnQpCisJMDMwMCAgT1JpTk9DTyBDYXJkCisJMTAwMSAgVVNTNzIwIFBhcmFsbGVsIFBvcnQKKwkyODkyICBTeXN0ZW1zIFNvZnQgTW9kZW0KKwliYWQxICBMdWNlbnQgNTZrIE1vZGVtCisJZjEwMSAgQXRsYXMgTW9kZW0KKzA0N2YgIFBsYW50cm9uaWNzLCBJbmMuCisJMDEwMSAgQnVsayBEcml2ZXIKKwkwMzAxICBCdWxrIERyaXZlcgorCTBjYTEgIFVTQiBEU1AgdjQgQXVkaW8gSW50ZXJmYWNlCiswNDgwICBUb3NoaWJhIEFtZXJpY2EgSW5mby4gU3lzdGVtcywgSW5jLgorCTAwMDEgIEluVG91Y2ggTW9kdWxlCisJMDAwNCAgSW5Ub3VjaCBNb2R1bGUKKwkwMDExICBJblRvdWNoIE1vZHVsZQorCTAwMTQgIEluVG91Y2ggTW9kdWxlCiswNDgxICBaZW5pdGggRGF0YSBTeXN0ZW1zCiswNDgyICBLeW9jZXJhIENvcnAuCisJMDAwZSAgRlMtMTAyMEQgUHJpbnRlcgorCTAxMDAgIEZpbmVjYW0gUzN4CisJMDEwMSAgRmluZWNhbSBTNAorCTAxMDMgIEZpbmVjYW0gUzUKKwkwMTA1ICBGaW5lY2FtIEwzCisJMDEwNiAgRmluZWNhbQorCTAxMDcgIERpZ2l0YWwgQ2FtZXJhIERldmljZQorCTAxMDggIERpZ2l0YWwgQ2FtZXJhIERldmljZQorCTAyMDMgIEFILUszMDAxVgorCTAyMDQgIGlCdXJzdCBUZXJtaW5hbAorMDQ4MyAgU0dTIFRob21zb24gTWljcm9lbGVjdHJvbmljcworCTAxMzcgIEJlV0FOIEFEU0wgVVNCIFNUIChibHVlIG9yIGdyZWVuKQorCTEzMDcgIEN5dHJvbml4IDZpbjEgY2FyZCByZWFkZXIKKwkxNjNkICBDb29sIEljYW0gRGlnaS1NUDMKKwkyMDE1ICBUb3VjaENoaXDCriBGaW5nZXJwcmludCBSZWFkZXIKKwkyMDE2ICBGaW5nZXJwcmludCBSZWFkZXIKKwkyMDE3ICBCaW9tZXRyaWMgU21hcnQgQ2FyZCBSZWFkZXIKKwkyMDE4ICBCaW9TaW1LZXkKKwkyMzAyICBQb3J0YWJsZSBGbGFzaCBEZXZpY2UgKFBGRCkKKwk0ODEwICBJU0ROIGFkYXB0ZXIKKwk0ODFkICBCVCBEaWdpdGFsIEFjY2VzcyBhZGFwdGVyCisJNTAwMCAgU1QgTWljcm8gQmx1ZXRvb3RoIERldmljZQorCTUwMDEgIFNUIE1pY3JvIEJsdWV0b290aCBEZXZpY2UKKwk3MjcwICBTVCBNaWNybyBTZXJpYWwgQnJpZGdlCisJNzU1NCAgNTZrIFNvZnRNb2RlbQorCWZmMTAgIFN3YW5uIFNUNTYgTW9kZW0KKzA0ODQgIFNwZWNpYWxpeAorMDQ4NSAgTm9raWEgTW9uaXRvcnMKKzA0ODYgIEFTVVMgQ29tcHV0ZXJzLCBJbmMuCiswNDg3ICBTdGV3YXJ0IENvbm5lY3RvcgorMDQ4OCAgQ2lycXVlIENvcnAuCiswNDg5ICBGb3hjb25uIC8gSG9uIEhhaQorCTA1MDIgIFNtYXJ0TWVkaWEgQ2FyZCBSZWFkZXIgRmlybXdhcmUgTG9hZGVyCisJMDUwMyAgU21hcnRNZWRpYSBDYXJkIFJlYWRlcgorMDQ4YSAgUy1NT1MgU3lzdGVtcywgSW5jLgorMDQ4YyAgQWxwcyBFbGVjdHJpYyBJcmVsYW5kLCBMdGQKKzA0OGQgIEludGVncmF0ZWQgVGVjaG5vbG9neSBFeHByZXNzLCBJbmMuCiswNDhmICBFaWNvbiBUZWNoLgorMDQ5MCAgVW5pdGVkIE1pY3JvZWxlY3Ryb25pY3MgQ29ycC4KKzA0OTEgIENhcGV0cm9uaWMKKwkwMDAzICBUYXhhbiBNb25pdG9yIENvbnRyb2wKKzA0OTIgIFNhbXN1bmcgU2VtaUNvbmR1Y3RvciwgSW5jLgorMDQ5MyAgTUFHIFRlY2hub2xvZ3kgQ28uLCBMdGQKKzA0OTUgIEVTUyBUZWNobm9sb2d5LCBJbmMuCiswNDk2ICBNaWNyb24gRWxlY3Ryb25pY3MKKzA0OTcgIFNtaWxlIEludGVybmF0aW9uYWwKKzA0OTggIENhcGV0cm9uaWMgKEthb2hzaXVuZykgQ29ycC4KKzA0OTkgIFlhbWFoYSBDb3JwLgorCTEwMDAgIFVYMjU2IE1JREkgSS9GCisJMTAwMSAgTVUxMDAwCisJMTAwMiAgTVUyMDAwCisJMTAwMyAgTVU1MDAKKwkxMDA0ICBVVzUwMAorCTEwMDUgIE1PVElGNgorCTEwMDYgIE1PVElGNworCTEwMDcgIE1PVElGOAorCTEwMDggIFVYOTYgTUlESSBJL0YKKwkxMDA5ICBVWDE2IE1JREkgSS9GCisJMTAwYSAgRU9TIEJYCisJMTAwYyAgVUMtTVgKKwkxMDBkICBVQy1LWAorCTEwMGUgIFMwOAorCTEwMGYgIENMUC0xNTAKKwkxMDEwICBDTFAtMTcwCisJMTAxMSAgUC0yNTAKKwkxMDEyICBUWVJPUworCTEwMTMgIFBGLTUwMAorCTEwMTQgIFM5MAorCTEwMTUgIE1PVElGLVIKKwkxMDE2ICBNRFAtNQorCTEwMTcgIENWUC0yMDQKKwkxMDE4ICBDVlAtMjA2CisJMTAxOSAgQ1ZQLTIwOAorCTEwMWEgIENWUC0yMTAKKwkxMDFiICBQU1ItMTEwMAorCTEwMWMgIFBTUi0yMTAwCisJMTAxZCAgQ0xQLTE3NQorCTEwMWUgIFBTUi1LMQorCTEwMWYgIEVaLUoyNAorCTEwMjAgIEVaLTI1MGkKKwkxMDIxICBNT1RJRiBFUyA2CisJMTAyMiAgTU9USUYgRVMgNworCTEwMjMgIE1PVElGIEVTIDgKKwkxMDI0ICBDVlAtMzAxCisJMTAyNSAgQ1ZQLTMwMworCTEwMjYgIENWUC0zMDUKKwkxMDI3ICBDVlAtMzA3CisJMTAyOCAgQ1ZQLTMwOQorCTEwMjkgIENWUC0zMDlHUAorCTEwMmEgIFBTUi0xNTAwCisJMTAyYiAgUFNSLTMwMDAKKwkxMDJlICBFTFMtMDEvMDFDCisJMTAzMCAgUFNSLTI5NS8yOTMKKwkxMDMxICBER1gtMjA1LzIwMworCTEwMzIgIERHWC0zMDUKKwkxMDMzICBER1gtNTA1CisJMjAwMCAgREdQLTcKKwkyMDAxICBER1AtNQorCTMwMDEgIFlTVC1NUzU1RCBVU0IgU3BlYWtlcgorCTQwMDAgIE5ldFZvbGFudGUgUlRBNTRpIEJyb2FkYmFuZCZJU0ROIFJvdXRlcgorCTQwMDEgIE5ldFZvbGFudGUgUlRXNjViIEJyb2FkYmFuZCBXaXJlbGVzcyBSb3V0ZXIKKwk0MDAyICBOZXRWb2xhbnRlIFJUVzY1aSBCcm9hZGJhbmQmSVNETiBXaXJlbGVzcyBSb3V0ZXIKKwk0MDA0ICBOZXRWb2xhbnRlIFJUQTU1aSBCcm9hZGJhbmQgVm9JUCBSb3V0ZXIKKwk1MDAwICBDUzFECisJNTAwMSAgRFNQMUQKKwk1MDAyICBETUUzMgorCTUwMDMgIERNMjAwMAorCTUwMDQgIDAyUjk2CisJNTAwNSAgQUNVMTYtQworCTUwMDYgIE5IQjMyLUMKKwk1MDA3ICBETTEwMDAKKwk1MDA4ICAwMVY5NgorCTUwMDkgIFNQWDIwMDAKKwk1MDBhICBQTTVECisJNTAwYiAgRE1FNjROCisJNTAwYyAgRE1FMjROCisJNjAwMSAgQ1JXMjIwMFVYIExpZ2h0c3BlZWQgMiBFeHRlcm5hbCBDRC1SVyBEcml2ZQorCTcwMDAgIERUWAorCTcwMTAgIFVCOTkKKzA0OWEgIEdhbmRhbGYgVGVjaG5vbG9naWVzLCBMdGQKKzA0OWIgIEN1cnRpcyBDb21wdXRlciBQcm9kdWN0cworMDQ5YyAgQWNlciBBZHZhbmNlZCBMYWJzLCBJbmMuCisJMDAwMiAgS2V5Ym9hcmQgKD8/PykKKzA0OWQgIFZMU0kgVGVjaG5vbG9neQorMDQ5ZiAgQ29tcGFxIENvbXB1dGVyIENvcnAuCisJMDAwMiAgSW5rSmV0IENvbG9yIFByaW50ZXIKKwkwMDAzICBpUEFRIFBvY2tldFBDCisJMDAwZSAgSW50ZXJuZXQgS2V5Ym9hcmQKKwkwMDEyICBJbmtKZXQgQ29sb3IgUHJpbnRlcgorCTAwMTggIFBBLTEvUEEtMiBNUDMgUGxheWVyCisJMDAxOSAgSW5rSmV0IENvbG9yIFByaW50ZXIKKwkwMDFhICBTNCAxMDAgU2Nhbm5lcgorCTAwMWUgIElKNjUwIElua2pldCBQcmludGVyCisJMDAxZiAgV0wyMTUgQWRhcHRlcgorCTAwMjEgIFMyMDAgU2Nhbm5lcgorCTAwMjcgIEJsdWV0b290aCBNdWx0aXBvcnQgTW9kdWxlIGJ5IENvbXBhcQorCTAwMmEgIDE0MDBQIElua2pldCBQcmludGVyCisJMDAyYiAgQTMwMDAKKwkwMDJjICBMZXhtYXJrIFgxMjUKKwkwMDMyICA4MDIuMTFiIEFkYXB0ZXIgW2lwYXEgaDU0MDBdCisJMDAzMyAgODAyLjExYiBBZGFwdGVyIFtvcmlub2NvXQorCTAwMzYgIEJsdWV0b290aCBNdWx0aXBvcnQgTW9kdWxlCisJMDA1MSAgS1UtMDEzMyBFYXN5IEFjY2VzcyBJbnRlcm5lciBLZXlib2FyZAorCTAwNzYgIFdpcmVsZXNzIExBTiBNdWx0aVBvcnQgVzIwMAorCTAwODAgIEdQUlMgTXVsdGlwb3J0CisJMDA4NiAgQmx1ZXRvb3RoIERldmljZQorCTUwNGEgIFBlcnNvbmFsIEp1a2Vib3ggUEpCMTAwCisJNTA1YSAgTGludXgtVVNCICJDREMgU3Vic2V0IiBEZXZpY2UsIG9yIEl0c3kgKGV4cGVyaW1lbnRhbCkKKwk4NTExICBpUEFRIE5ldHdvcmtpbmcgMTAvMTAwIEV0aGVybmV0IFtwZWdhc3VzMl0KKzA0YTAgIERpZ2l0YWwgRXF1aXBtZW50IENvcnAuCiswNGExICBTeXN0ZW1Tb2Z0IENvcnAuCisJZmZmMCAgVGVsZXggQ29tcG9zaXRlIERldmljZQorMDRhMiAgRmlyZVBvd2VyIFN5c3RlbXMKKzA0YTMgIFRyaWRlbnQgTWljcm9zeXN0ZW1zLCBJbmMuCiswNGE0ICBIaXRhY2hpLCBMdGQKKwkwMDA0ICBEVkQtQ0FNIERaLU1WMTAwQSBDYW1jb3JkZXIKKwkwMDFlICBEVkRDQU0gVVNCIEhTIEludGVyZmFjZQorMDRhNSAgQWNlciBQZXJpcGhlcmFscyBJbmMuIChub3cgQmVuUSBDb3JwLikKKwkwMDAxICBLZXlib2FyZAorCTAwMDIgIEFQSSBFcmdvIEsvQgorCTAwMDMgIEFQSSBHZW5lcmljIEsvQiBNb3VzZQorCTEyYTYgIEFjZXJTY2FuIEMzMTBVCisJMWEyMCAgUHJpc2EgMzEwVQorCTFhMmEgIFByaXNhIDYyMFUKKwkyMDIyICBQcmlzYSAzMjBVLzM0MFUKKwkyMDQwICBQcmlzYSA2MjBVVAorCTIwNWUgIFNjYW5QcmlzYSA2NDBCVQorCTIwNjAgIFByaXNhIDYyMFUrLzY0MFUKKwkyMDdlICBQcmlzYSA2NDBCVQorCTIwOWUgIFNjYW5QcmlzYSA2NDBCVAorCTIwYWUgIFMyVyAzMDAwVQorCTIwYjAgIFMyVyAzMzAwVS80MzAwVQorCTIwYmUgIFByaXNhIDY0MEJUCisJMjBjMCAgUHJpc2EgMTI0MFVUCisJMjBkZSAgUzJXIDQzMDBVKworCTIwZjggIEJlbnEgNTAwMAorCTIwZmMgIEJlbnEgNTAwMAorCTIwZmUgIFNXMiA1MzAwVQorCTIxMzcgIEJlbnEgNTE1MC81MjUwCisJMjIwMiAgQmVucSA3NDAwVVQKKwkzMDAzICBCZW5xIFdlYkNhbQorCTMwMDggIEJlbnEgMTUwMAorCTMwMGEgIEJlbnEgMzQxMAorCTMwMGMgIEJlbnEgMTAxNgorCTMwMTkgIEJlbnEgREMgQzQwCisJNDAwMCAgUDMwIENvbXBvc2l0ZSBEZXZpY2UKKwk2MDAxICBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJNjAwMiAgTWFzcyBTdG9yYWdlIERldmljZQorCTYwMDMgIEFUQS9BVEFQSSBBZGFwdGVyCisJNjAwNCAgTWFzcyBTdG9yYWdlIERldmljZQorCTYwMDUgIE1hc3MgU3RvcmFnZSBEZXZpY2UKKwk2MDA2ICBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJNjAwNyAgTWFzcyBTdG9yYWdlIERldmljZQorCTYwMDggIE1hc3MgU3RvcmFnZSBEZXZpY2UKKwk2MDA5ICBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJNjAwYSAgTWFzcyBTdG9yYWdlIERldmljZQorCTYwMGIgIE1hc3MgU3RvcmFnZSBEZXZpY2UKKwk2MDBjICBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJNjAwZCAgTWFzcyBTdG9yYWdlIERldmljZQorCTYwMGUgIE1hc3MgU3RvcmFnZSBEZXZpY2UKKwk2MDBmICBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJNjAxMCAgTWFzcyBTdG9yYWdlIERldmljZQorCTYwMTEgIE1hc3MgU3RvcmFnZSBEZXZpY2UKKwk2MDEyICBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJNjAxMyAgTWFzcyBTdG9yYWdlIERldmljZQorCTYwMTQgIE1hc3MgU3RvcmFnZSBEZXZpY2UKKwk2MDE1ICBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJNjEyNSAgTVAzIFBsYXllcgorCTYxODAgIE1QMyBQbGF5ZXIKKwk2MjAwICBNUDMgUGxheWVyCisJNzUwMCAgSGktU3BlZWQgTWFzcyBTdG9yYWdlIERldmljZQorCTkwMDAgIEFXTDMwMCBXaXJlbGVzcyBBZGFwdGVyCisJOTAwMSAgQVdMNDAwIFdpcmVsZXNzIEFkYXB0ZXIKKwk5MjEzICBLYmQgSHViCiswNGE2ICBOb2tpYSBEaXNwbGF5IFByb2R1Y3RzCisJMDBiOSAgQXVkaW8KKwkwMTgwICBIdWIgVHlwZSBQCisJMDE4MSAgSElEIE1vbml0b3IgQ29udHJvbHMKKzA0YTcgIFZpc2lvbmVlcgorCTAxMDAgIFN0cm9iZVBybworCTAxMDEgIFN0cm9iZSBQcm8gU2Nhbm5lciAoMS4wMSkKKwkwMTAyICBTdHJvYmVQcm8gU2Nhbm5lcgorCTAyMTEgIE9uZVRvdWNoIDc2MDAgU2Nhbm5lcgorCTAyMjEgIE9uZVRvdWNoIDUzMDAgU2Nhbm5lcgorCTAyMjMgIE9uZVRvdWNoIDgyMDAKKwkwMjI0ICBPbmVUb3VjaCA0ODAwIFVTQi9NaWNyb3RlayBTY2FucG9ydCAzMDAwCisJMDIyNSAgVmlzdGFTY2FuIEFzdHJhIDM2MDAoRU5HKQorCTAyMjYgIE9uZVRvdWNoIDUzMDAgVVNCCisJMDIyOSAgT25lVG91Y2ggNzEwMAorCTAyMmEgIE9uZVRvdWNoIDY2MDAKKwkwMjJjICBPbmVUb3VjaCA5MDAwLzkwMjAKKwkwMjMxICA2MTAwIFNjYW5uZXIKKwkwMzExICA2MjAwIEVQUC9VU0IgU2Nhbm5lcgorCTAzMjEgIE9uZVRvdWNoIDgxMDAgRVBQL1VTQiBTY2FubmVyCisJMDMzMSAgT25lVG91Y2ggODYwMCBFUFAvVVNCIFNjYW5uZXIKKwkwMzQxICA2NDAwCisJMDM2MSAgVmlzdGFTY2FuIEFzdHJhIDM2MDAoRU5HKQorCTAzNjIgIE9uZVRvdWNoIDkzMjAKKwkwMzcxICBPbmVUb3VjaCA4NzAwLzg5MjAKKwkwMzgwICBPbmVUb3VjaCA3NzAwCisJMDM4MiAgUGhvdG8gUG9ydCA3NzAwCisJMDM5MCAgOTY1MAorCTAzYTAgIFhlcm94IDQ4MDAgT25lIFRvdWNoCisJMDQxMCAgT25lVG91Y2ggUHJvIDg4MDAvODgyMAorCTA0MjEgIDk0NTAgVVNCCisJMDQyMyAgOTc1MCBTY2FubmVyCisJMDQyNCAgU3Ryb2JlIFhQIDQ1MAorCTA0MjUgIFN0cm9iZSBYUCAxMDAKKwkwNDI2ICBTdHJvYmUgWFAgMjAwCisJMDQyNyAgU3Ryb2JlIFhQIDEwMAorCTA0NDQgIE9uZVRvdWNoIDczMDAKKwkwNDQ1ICBDYXJkUmVhZGVyIDEwMAorCTA0NDYgIFhlcm94IERvY3VNYXRlIDUxMAorCTA0NDcgIFhFUk9YIERvY3VNYXRlIDUyMAorCTA0NDggIFhFUk9YIERvY3VNYXRlIDI1MAorCTA0NDkgIFhlcm94IERvY3VNYXRlIDI1MgorCTA0NGEgIFhlcm94IDY0MDAKKwkwNDRjICBYZXJveCBEb2N1TWF0ZSAyNjIKKwkwNDc0ICBTdHJvYmUgWFAgMzAwCisJMDQ3NSAgWGVyb3ggRG9jdU1hdGUgMjcyCisJMDQ3OCAgU3Ryb2JlIFhQIDIyMAorCTA0NzkgIFN0cm9iZSBYUCA0NzAKKwkwNDdhICA5NDUwCisJMDQ3YiAgOTY1MAorCTA0N2QgIDk0MjAKKwkwNDgwICA5NTIwCisJMDQ4ZiAgU3Ryb2JlIFhQIDQ3MAorCTA0OTEgIFN0cm9iZSBYUCA0NTAKKwkwNDkzICA5NzUwCisJMDQ5NCAgU3Ryb2JlIFhQIDEyMAorCTA0OTcgIFBhdHJpb3QgNDMwCisJMDQ5OCAgUGF0cmlvdCA2ODAKKwkwNDk5ICBQYXRyaW90IDc4MAorCTA0OWIgIFN0cm9iZSBYUCAxMDAKKwkwNGEwICA3NDAwCiswNGE4ICBNdWx0aXZpZGVvIExhYnMsIEluYy4KKwkwMTAxICBIdWIKKwkwMzAzICBQZXJpcGhlcmFsIFN3aXRjaAorCTA0MDQgIFBlcmlwaGVyYWwgU3dpdGNoCiswNGE5ICBDYW5vbiwgSW5jLgorCTEwMDUgIEJKIFByaW50ZXIgSHViCisJMTAzNSAgUEQgUHJpbnRlciBTdG9yYWdlCisJMTA1MCAgQkpDLTgyMDAKKwkxMDUxICBCSkMtMzAwMCBDb2xvciBQcmludGVyCisJMTA1MiAgQkpDLTYxMDAKKwkxMDUzICBCSkMtNjIwMAorCTEwNTQgIEJKQy02NTAwCisJMTA1NSAgQkpDLTg1CisJMTA1NiAgQkpDLTIxMTAgQ29sb3IgUHJpbnRlcgorCTEwNTcgIExSMQorCTEwNWEgIEJKQy01NQorCTEwNWIgIFM2MDAgUHJpbnRlcgorCTEwNWMgIFM0MDAKKwkxMDVkICBTNDUwIFByaW50ZXIKKwkxMDVlICBTODAwCisJMTA2MiAgUzUwMCBQcmludGVyCisJMTA2MyAgUzQ1MDAKKwkxMDY0ICBTMzAwIFByaW50ZXIKKwkxMDY1ICBTMTAwCisJMTA2NiAgUzYzMAorCTEwNjcgIFM5MDAKKwkxMDY4ICBTOTAwMAorCTEwNjkgIFM4MjAKKwkxMDZhICBTMjAwIFByaW50ZXIKKwkxMDZiICBTNTIwIFByaW50ZXIKKwkxMDZkICBTNzUwIFByaW50ZXIKKwkxMDZlICBTODIwRAorCTEwNzAgIFM1MzBECisJMTA3MiAgSTg1MCBQcmludGVyCisJMTA3MyAgSTU1MCBQcmludGVyCisJMTA3NCAgUzMzMCBQcmludGVyCisJMTA3NiAgaTcwCisJMTA3NyAgaTk1MAorCTEwN2EgIFM4MzBECisJMTA3YiAgaTMyMAorCTEwN2MgIGk0NzBECisJMTA3ZCAgaTkxMDAKKwkxMDdlICBpNDUwCisJMTA3ZiAgaTg2MAorCTEwODIgIGkzNTAKKwkxMDg0ICBpMjUwCisJMTA4NSAgaTI1NQorCTEwODYgIGk1NjAKKwkxMDg4ICBpOTY1CisJMTA4YSAgaTQ1NQorCTEwOGIgIGk5MDBECisJMTA4YyAgaTQ3NUQKKwkxMDhkICBQSVhNQSBpUDIwMDAKKwkxMDhmICBpODAKKwkxMDkwICBpOTkwMCBQaG90byBQcmludGVyCisJMTA5MSAgUElYTUEgaVAxNTAwCisJMTA5MyAgUElYTUEgaVA0MDAwCisJMTA5NCAgUElYTUEgaVAzMDAweCBQcmludGVyCisJMTA5NSAgUElYTUEgaVA2MDAwRAorCTEwOTcgIFBJWE1BIGlQNTAwMAorCTEwOTggIFBJWE1BIGlQMTAwMAorCTEwOTkgIFBJWE1BIGlQODUwMAorCTEwOWMgIFBJWE1BIGlQNDAwMFIKKwkxMDlkICBpUDkwCisJMTBhMCAgUElYTUEgaVAxNjAwIFByaW50ZXIKKwkxMGEyICBpUDQyMDAKKwkxMGE0ICBpUDUyMDBSCisJMTBhNSAgaVA1MjAwCisJMTBhNyAgaVA2MjEwRAorCTEwYTggIGlQNjIyMEQKKwkxMGE5ICBpUDY2MDBECisJMTBiNiAgUElYTUEgaVA0MzAwIFByaW50ZXIKKwkxNDA0ICBXNjQwMFBHCisJMTQwNSAgVzg0MDBQRworCTE1MGYgIEJJSjIzNTAgUENMCisJMTUxMCAgQklKMTM1MCBQQ0wKKwkxNTEyICBCSUoxMzUwRCBQQ0wKKwkxNjAxICBEUi0yMDgwQyBTY2FubmVyCisJMTYwNyAgRFItNjA4MCBTY2FubmVyCisJMTcwMCAgUElYTUEgTVAxMTAgU2Nhbm5lcgorCTE3MDEgIFBJWE1BIE1QMTMwIFNjYW5uZXIKKwkxNzAyICBNUDQxMCBDb21wb3NpdGUKKwkxNzAzICBNUDQzMCBDb21wb3NpdGUKKwkxNzA0ICBNUDMzMCBDb21wb3NpdGUKKwkxNzA2ICBQSVhNQSBNUDc1MCBTY2FubmVyCisJMTcwNyAgUElYTUEgTVA3ODAgU2Nhbm5lcgorCTE3MDggIFBJWE1BIE1QNzYwIFNjYW5uZXIKKwkxNzA5ICBQSVhNQSBNUDE1MCBTY2FubmVyCisJMTcwYSAgUElYTUEgTVAxNzAgU2Nhbm5lcgorCTE3MGIgIFBJWE1BIE1QNDUwIFNjYW5uZXIKKwkxNzBjICBQSVhNQSBNUDUwMCBTY2FubmVyCisJMTcwZCAgUElYTUEgTVA4MDAgU2Nhbm5lcgorCTE3MGUgIE1QODAwUgorCTE3MTAgIE1QOTUwCisJMTcxMiAgTVA1MzAKKwkxNzEzICBQSVhNQSBNUDgzMCBTY2FubmVyCisJMTcxNCAgTVAxNjAKKwkxNzE1ICBNUDE4MCBTdG9yYWdlCisJMTcxNiAgTVA0NjAgQ29tcG9zaXRlCisJMTcxNyAgTVA1MTAKKwkxNzE4ICBNUDYwMCBTdG9yYWdlCisJMTcxYSAgTVA4MTAgU3RvcmFnZQorCTE3MWIgIE1QOTYwCisJMTcyMSAgTVAyMTAgc2VyCisJMTcyMyAgTVA0NzAgc2VyCisJMTcyNSAgTVA2MTAgc2VyCisJMTcyNiAgTVA5NzAgc2VyCisJMTcyNyAgTVgzMDAgc2VyCisJMTcyOCAgTVgzMTAgc2VyCisJMTcyOSAgTVg3MDAgc2VyCisJMTcyYiAgTVAxNDAgc2VyCisJMjIwMCAgQ2Fub1NjYW4gTGlERSAyNQorCTIyMDEgIENhbm9TY2FuIEZCMzIwVQorCTIyMDIgIENhbm9TY2FuIEZCNjIwVQorCTIyMDQgIENhbm9TY2FuIEZCNjMwVQorCTIyMDUgIENhbm9TY2FuIEZCMTIxMFUKKwkyMjA2ICBDYW5vU2NhbiBONjUwVS9ONjU2VQorCTIyMDcgIENhbm9TY2FuIDEyMjBVCisJMjIwOCAgQ2Fub1NjYW4gRDY2MFUKKwkyMjBhICBDYW5vU2NhbiBEMjQwMFVGCisJMjIwYiAgQ2Fub1NjYW4gRDY0NlUKKwkyMjBjICBDYW5vU2NhbiBEMTI1MFUyCisJMjIwZCAgQ2Fub1NjYW4gTjY3MFUvTjY3NlUvTGlERSAyMAorCTIyMGUgIENhbm9TY2FuIE4xMjQwVS9MaURFIDMwCisJMjIwZiAgQ2Fub1NjYW4gODAwMEYKKwkyMjEwICBDYW5vU2NhbiA5OTAwRgorCTIyMTIgIENhbm9TY2FuIDUwMDBGCisJMjIxMyAgQ2Fub1NjYW4gTGlERSA1MC9MaURFIDM1L0xpREUgNDAKKwkyMjE0ICBDYW5vU2NhbiBMaURFIDgwCisJMjIxNSAgQ2Fub1NjYW4gMzAwMC8zMDAwRi8zMDAwZXgKKwkyMjE2ICBDYW5vU2NhbiAzMjAwRgorCTIyMTcgIENhbm9TY2FuIDUyMDBGCisJMjIxOSAgQ2Fub1NjYW4gOTk1MEYKKwkyMjFiICBDYW5vU2NhbiA0MjAwRgorCTIyMWMgIENhbm9TY2FuIExpREUgNjAKKwkyMjFlICBDYW5vU2NhbiA4NDAwRgorCTIyMWYgIENhbm9TY2FuIExpREUgNTAwRgorCTIyMjAgIENhbm9TY2FuIExJREUgMjUKKwkyMjI1ICBDYW5vU2NhbiBMaURFIDcwCisJMjIyOCAgQ2Fub1NjYW4gNDQwMEYKKwkyNjAyICBNdWx0aVBBU1MgQzU1NQorCTI2MDMgIE11bHRpUEFTUyBDNzU1CisJMjYwYSAgQ0FQVCBQcmludGVyCisJMjYwZSAgTEJQLTIwMDAKKwkyNjEwICBNUEM2MDBGCisJMjYxMSAgU21hcnRCYXNlIE1QQzQwMAorCTI2MTIgIE11bHRpUEFTUyBDODU1CisJMjYxNyAgQ0FQVCBQcmludGVyCisJMjYxYSAgaVIxNjAwCisJMjYxYiAgaVIxNjEwCisJMjYxYyAgaUMyMzAwCisJMjYxZiAgTVBDMjAwIFByaW50ZXIKKwkyNjIxICBpUjIwMDAKKwkyNjIyICBpUjIwMTAKKwkyNjIzICBGQVgtQjE4MEMKKwkyNjI5ICBGQVhQSE9ORSBMNzUKKwkyNjJiICBMYXNlclNob3QgTEJQLTExMjAgUHJpbnRlcgorCTI2MmQgIGlSIEMzMjAwCisJMjYyZiAgTXVsdGlQQVNTIE1QNzMwCisJMjYzMCAgTXVsdGlQQVNTIE1QNzAwCisJMjYzMSAgTEFTRVIgQ0xBU1MgNzAwCisJMjYzMiAgRkFYLUwyMDAwCisJMjYzNSAgTVBDMTkwCisJMjYzNyAgaVIgQzY4MDAKKwkyNjM4ICBpUiBDMzEwMAorCTI2M2MgIFNtYXJ0YmFzZSBNUDM2MAorCTI2M2QgIE1QMzcwCisJMjYzZSAgTVAzOTAgRkFYCisJMjYzZiAgTVAzNzUKKwkyNjQ2ICBNRjU1MzAgU2Nhbm5lciBEZXZpY2UgVjEuOS4xCisJMjY0NyAgTUY1NTUwIENvbXBvc2l0ZQorCTI2NGUgIE1GNTYzMAorCTI2NGYgIE1GNTY1MCAoRkFYKQorCTI2NTAgIGlSIDY4MDBDIEVVUgorCTI2NTEgIGlSIDMxMDBDIEVVUgorCTI2NTUgIEZQLUwxNzAvTUYzNTAvTDM4MC9MMzk4CisJMjY1OSAgTUY4MTAwCisJMjY1YiAgQ0FQVCBQcmludGVyCisJMjY1YyAgaVIgQzMyMjAKKwkyNjVkICBNRjU3MzAKKwkyNjVlICBNRjU3NTAKKwkyNjVmICBNRjU3NzAKKwkyNjYwICBNRjMxMTAKKwkyNjYzICBpUjM1NzAvaVI0NTcwCisJMjY2NCAgaVIyMjcwL2lSMjg3MAorCTI2NjUgIGlSIEMyNjIwCisJMjY2NiAgaVIgQzU4MDAKKwkyNjY3ICBpUjg1UExVUworCTI2NjkgIGlSMTA1UExVUworCTI2NmEgIENBUFQgRGV2aWNlCisJMjY2YiAgaVI4MDcwCisJMjY2YyAgaVI5MDcwCisJMjY2ZCAgaVIgNTgwMEMgRVVSCisJMjY2ZSAgQ0FQVCBEZXZpY2UKKwkyNjZmICBpUjIyMzAKKwkyNjcwICBpUjM1MzAKKwkyNjcxICBpUjU1NzAvaVI2NTcwCisJMjY3MiAgaVIgQzMxNzAKKwkyNjczICBpUiAzMTcwQyBFVVIKKwkyNjc0ICBMMTIwCisJMjY3NSAgaVIyODMwCisJMjY3NiAgQ0FQVCBEZXZpY2UKKwkyNjc3ICBpUiBDMjU3MAorCTI2NzggIGlSIDI1NzBDIEVVUgorCTI2NzkgIENBUFQgRGV2aWNlCisJMjY3YSAgaVIyMDE2CisJMjY3YiAgaVIyMDIwCisJMjY3ZCAgTUY3MTAwIFNlcmllcworCTI2ODQgIE1GMzIwMCBTZXJpZXMKKwkyNjg3ICBpUjQ1MzAKKwkyNjg4ICBMQlAzNDYwCisJMjY4YyAgaVIgQzY4NzAKKwkyNjhkICBpUiA2ODcwQyBFVVIKKwkyNjhlICBpUiBDNTg3MAorCTI2OGYgIGlSIDU4NzBDIEVVUgorCTI2OTEgIGlSNzEwNQorCTI2YTMgIE1GNDEwMCBTZXJpZXMKKwkyNmI1ICBNRjQyMDAgU2VyaWVzCisJMzA0MSAgUG93ZXJTaG90IFMxMAorCTMwNDIgIENhbm9TY2FuIEZTNDAwMFVTIEZpbG0gU2Nhbm5lcgorCTMwNDMgIFBvd2VyU2hvdCBTMjAKKwkzMDQ0ICBFT1MgRDMwCisJMzA0NSAgUG93ZXJTaG90IFMxMDAKKwkzMDQ2ICBJWFkgRGlnaXRhbAorCTMwNDcgIERpZ2l0YWwgSVhVUworCTMwNDggIFBvd2VyU2hvdCBHMQorCTMwNDkgIFBvd2VyU2hvdCBQcm85MCBJUworCTMwNGEgIENQLTEwCisJMzA0YiAgSVhZIERpZ2l0YWwgMzAwCisJMzA0YyAgUG93ZXJTaG90IFMzMDAKKwkzMDRkICBEaWdpdGFsIElYVVMgMzAwCisJMzA0ZSAgUG93ZXJTaG90IEEyMAorCTMwNGYgIFBvd2VyU2hvdCBBMTAKKwkzMDUwICBQb3dlclNob3QgdW5rbm93biAxCisJMzA1MSAgUG93ZXJTaG90IFMxMTAKKwkzMDUyICBEaWdpdGFsIElYVVMgVgorCTMwNTUgIFBvd2VyU2hvdCBHMgorCTMwNTYgIFBvd2VyU2hvdCBTNDAKKwkzMDU3ICBQb3dlclNob3QgUzMwCisJMzA1OCAgUG93ZXJTaG90IEE0MAorCTMwNTkgIFBvd2VyU2hvdCBBMzAKKwkzMDViICBaUjQ1TUMgRGlnaXRhbCBDYW1jb3JkZXIKKwkzMDVjICBQb3dlclNob3QgdW5rbm93biAyCisJMzA2MCAgRU9TIEQ2MAorCTMwNjEgIFBvd2VyU2hvdCBBMTAwCisJMzA2MiAgUG93ZXJTaG90IEEyMDAKKwkzMDYzICBDUC0xMDAKKwkzMDY1ICBQb3dlclNob3QgUzIwMAorCTMwNjYgIERpZ2l0YWwgSVhVUyAzMzAKKwkzMDY3ICBNVjU1MGkgRGlnaXRhbCBWaWRlbyBDYW1lcmEKKwkzMDY5ICBQb3dlclNob3QgRzMKKwkzMDZhICBEaWdpdGFsIHVua25vd24gMworCTMwNmIgIE1WWDJpIERpZ2l0YWwgVmlkZW8gQ2FtZXJhCisJMzA2YyAgUG93ZXJTaG90IFM0NQorCTMwNmQgIFBvd2VyU2hvdCBTNDUgUHRQIE1vZGUKKwkzMDZlICBQb3dlclNob3QgRzMgKG5vcm1hbCBtb2RlKQorCTMwNmYgIFBvd2VyU2hvdCBHMyAocHRwKQorCTMwNzAgIFBvd2VyU2hvdCBTMjMwCisJMzA3MSAgUG93ZXJTaG90IFMyMzAgKHB0cCkKKwkzMDcyICBQb3dlclNob3QgU0QxMDAgLyBEaWdpdGFsIElYVVMgSUkgKHB0cCkKKwkzMDczICBQb3dlclNob3QgQTcwIChwdHApCisJMzA3NCAgUG93ZXJTaG90IEE2MCAocHRwKQorCTMwNzUgIElYVVMgNDAwIENhbWVyYQorCTMwNzYgIFBvd2VyU2hvdCBBMzAwCisJMzA3NyAgUG93ZXJTaG90IFM1MAorCTMwNzggIFpSNzBNQyBEaWdpdGFsIENhbWNvcmRlcgorCTMwN2EgIE1WNjUwaSAobm9ybWFsIG1vZGUpCisJMzA3YiAgTVY2MzBpIERpZ2l0YWwgVmlkZW8gQ2FtZXJhCisJMzA3YyAgTVY2MzBpIChub3JtYWwgbW9kZSkKKwkzMDdkICBDUC0zMDAKKwkzMDdmICBPcHR1cmEgMjAKKwkzMDgwICBNVlgxNTBpIChub3JtYWwgbW9kZSkgLyBPcHR1cmEgMjAgKG5vcm1hbCBtb2RlKQorCTMwODEgIE9wdHVyYSAxMAorCTMwODIgIE1WWDEwMGkgLyBPcHR1cmEgMTAKKwkzMDgzICBFT1MgMTBECisJMzA4NCAgRU9TIDMwMEQgLyBFT1MgRGlnaXRhbCBSZWJlbAorCTMwODUgIFBvd2VyU2hvdCBHNQorCTMwODcgIEVsdXJhIDUwIChQVFAgbW9kZSkKKwkzMDg4ICBFbHVyYSA1MCAobm9ybWFsIG1vZGUpCisJMzA4ZCAgTVZYM2kKKwkzMDhlICBGViBNMSAobm9ybWFsIG1vZGUpIC8gTVZYIDNpIChub3JtYWwgbW9kZSkgLyBPcHR1cmEgWGkgKG5vcm1hbCBtb2RlKQorCTMwOTMgIE9wdHVyYSAzMDAKKwkzMDk2ICBJWFkgRFYgTTIgKG5vcm1hbCBtb2RlKSAvIE1WWCAxMGkgKG5vcm1hbCBtb2RlKQorCTMwOTkgIEVPUyAzMDBEIChwdHApCisJMzA5YSAgUG93ZXJTaG90IEE4MAorCTMwOWIgIERpZ2l0YWwgSVhVUyAocHRwKQorCTMwOWMgIFBvd2VyU2hvdCBTMSBJUworCTMwOWQgIENhbWVyYQorCTMwOWYgIENhbWVyYQorCTMwYTAgIENhbWVyYQorCTMwYTEgIENhbWVyYQorCTMwYTIgIENhbWVyYQorCTMwYTggIEVsdXJhIDYwRS9PcHR1cmEgNDAgKHB0cCkKKwkzMGE5ICBNVlgyNWkgKG5vcm1hbCBtb2RlKSAvIE9wdHVyYSA0MCAobm9ybWFsIG1vZGUpCisJMzBiMSAgUG93ZXJTaG90IFM3MCAobm9ybWFsIG1vZGUpIC8gUG93ZXJTaG90IFM3MCAoUFRQIG1vZGUpCisJMzBiMiAgUG93ZXJTaG90IFM2MCAobm9ybWFsIG1vZGUpIC8gUG93ZXJTaG90IFM2MCAoUFRQIG1vZGUpCisJMzBiMyAgUG93ZXJTaG90IEc2IChub3JtYWwgbW9kZSkgLyBQb3dlclNob3QgRzYgKFBUUCBtb2RlKQorCTMwYjQgIFBvd2VyU2hvdCBTNTAwCisJMzBiNSAgUG93ZXJTaG90IEE3NQorCTMwYjYgIERpZ2l0YWwgSVhVUyBJSTIgIC8gRGlnaXRhbCBJWFVTIElJMiAoUFRQIG1vZGUpIC8gUG93ZXJTaG90IFNEMTEwIChQVFAgbW9kZSkgLyBQb3dlclNob3QgU0QxMTAgRGlnaXRhbCBFTFBICisJMzBiNyAgUG93ZXJTaG90IEE0MDAgLyBQb3dlclNob3QgQTQwMCAoUFRQIG1vZGUpCisJMzBiOCAgUG93ZXJTaG90IEEzMTAgLyBQb3dlclNob3QgQTMxMCAoUFRQIG1vZGUpCisJMzBiOSAgUG93ZXJzaG90IEE4NQorCTMwYmEgIFBvd2VyU2hvdCBTNDEwIERpZ2l0YWwgRWxwaAorCTMwYmIgIFBvd2VyU2hvdCBBOTUKKwkzMGJkICBDUC0yMjAKKwkzMGJlICBDUC0zMzAKKwkzMGJmICBEaWdpdGFsIElYVVMgNDAKKwkzMGMwICBEaWdpdGFsIElYVVMgMzAgKFBUUCBtb2RlKSAvIFBvd2VyU2hvdCBTRDIwMCAoUFRQIG1vZGUpCisJMzBjMSAgRGlnaXRhbCBJWFVTIDUwIChub3JtYWwgbW9kZSkgLyBJWFkgRGlnaXRhbCA1NSAobm9ybWFsIG1vZGUpIC8gUG93ZXJTaG90IEE1MjAgKFBUUCBtb2RlKSAvIFBvd2VyU2hvdCBTRDQwMCAobm9ybWFsIG1vZGUpCisJMzBjMiAgUG93ZXJTaG90IEE1MTAgKG5vcm1hbCBtb2RlKSAvIFBvd2VyU2hvdCBBNTEwIChQVFAgbW9kZSkKKwkzMGM0ICBEaWdpdGFsIElYVVMgaTUgKG5vcm1hbCBtb2RlKSAvIElYWSBEaWdpdGFsIEwyIChub3JtYWwgbW9kZSkgLyBQb3dlclNob3QgU0QyMCAobm9ybWFsIG1vZGUpCisJMzBlYSAgRU9TIDFEIE1hcmsgSUkgKFBUUCBtb2RlKQorCTMwZWIgIEVPUyAyMEQKKwkzMGVjICBFT1MgMjBEIChwdHApCisJMzBlZSAgRU9TIDM1MEQKKwkzMGVmICBFT1MgMzUwRCAocHRwKQorCTMwZjAgIFBvd2VyU2hvdCBTMiBJUyAoUFRQIG1vZGUpCisJMzBmMiAgRGlnaXRhbCBJWFVTIDcwMCAobm9ybWFsIG1vZGUpIC8gRGlnaXRhbCBJWFVTIDcwMCAoUFRQIG1vZGUpIC8gSVhZIERpZ2l0YWwgNjAwIChub3JtYWwgbW9kZSkgLyBQb3dlclNob3QgU0Q1MDAgKG5vcm1hbCBtb2RlKSAvIFBvd2VyU2hvdCBTRDUwMCAoUFRQIG1vZGUpCisJMzBmNiAgU0VMUEhZIENQNDAwCisJMzBmOCAgUG93ZXJzaG90IEE0MzAKKwkzMGY5ICBQb3dlclNob3QgQTQxMCAoUFRQIG1vZGUpCisJMzBmYyAgUG93ZXJTaG90IEE2MjAgKFBUUCBtb2RlKQorCTMwZmQgIFBvd2VyU2hvdCBBNjEwIChub3JtYWwgbW9kZSkvUG93ZXJTaG90IEE2MTAgKFBUUCBtb2RlKQorCTMwZmYgIERpZ2l0YWwgSVhVUyA1NSAoUFRQIG1vZGUpL1Bvd2VyU2hvdCBTRDQ1MCAoUFRQIG1vZGUpCisJMzEwYiAgU0VMUEhZIENQNjAwCisJMzEwZSAgRGlnaXRhbCBJWFVTIDUwIChQVFAgbW9kZSkKKwkzMTE2ICBEaWdpdGFsIElYVVMgNzUwIChQVFAgbW9kZSkKKwkzMTE3ICBQb3dlclNob3QgQTcwMAorCTMxMzggIFBvd2VyU2hvdCBBNzEwIElTCisJMzE1YSAgUG93ZXJTaG90IEc5CisJMzE3NiAgUG93ZXJTaG90IEE1OTAKKwkzMWZmICBEaWdpdGFsIElYVVMgNTUKKzA0YWEgIERhZVdvbyBUZWxlY29tLCBMdGQKKzA0YWIgIENocm9tYXRpYyBSZXNlYXJjaAorMDRhYyAgTWljcm8gQXVkaW9tZXRyaWNzIENvcnAuCiswNGFkICBEb29pbiBFbGVjdHJvbmljcworCTI1MDEgIEJsdWV0b290aCBEZXZpY2UKKzA0YWYgIFdpbm5vdiBMLlAuCiswNGIwICBOaWtvbiBDb3JwLgorCTAxMDIgIENvb2xwaXggOTkwCisJMDEwMyAgQ29vbHBpeCA4ODAKKwkwMTA0ICBDb29scGl4IDk5NQorCTAxMDYgIENvb2xwaXggNzc1CisJMDEwNyAgQ29vbHBpeCA1MDAwCisJMDEwOCAgQ29vbHBpeCAyNTAwCisJMDEwOSAgQ29vbHBpeCAyNTAwIChwdHApCisJMDEwYSAgQ29vbHBpeCA0NTAwCisJMDEwYiAgQ29vbHBpeCA0NTAwIChwdHApCisJMDEwZCAgQ29vbHBpeCA1NzAwIChwdHApCisJMDEwZSAgQ29vbHBpeCA0MzAwIChzdG9yYWdlKQorCTAxMGYgIENvb2xwaXggNDMwMCAocHRwKQorCTAxMTAgIENvb2xwaXggMzUwMCAoU2llcnJhIE1vZGUpCisJMDExMSAgQ29vbHBpeCAzNTAwIChwdHApCisJMDExMiAgQ29vbHBpeCA4ODUgKHB0cCkKKwkwMTEzICBDb29scGl4IDUwMDAgKHB0cCkKKwkwMTE0ICBDb29scGl4IDMxMDAgKHN0b3JhZ2UpCisJMDExNSAgQ29vbHBpeCAzMTAwIChwdHApCisJMDExNyAgQ29vbHBpeCAyMTAwIChwdHApCisJMDExOSAgQ29vbHBpeCA1NDAwIChwdHApCisJMDExZCAgQ29vbHBpeCAzNzAwIChwdHApCisJMDEyMSAgQ29vbHBpeCAzMjAwIChwdHApCisJMDEyMiAgQ29vbHBpeCAyMjAwIChwdHApCisJMDEyNiAgQ29vbHBpeCA4ODAwCisJMDEyOSAgQ29vbHBpeCA0ODAwIChwdHApCisJMDEyYyAgQ29vbHBpeCA0MTAwIChzdG9yYWdlKQorCTAxMmQgIENvb2xwaXggNDEwMCAocHRwKQorCTAxMmUgIENvb2xwaXggNTYwMCAocHRwKQorCTAxMzAgIENvb2xwaXggNDYwMCAocHRwKQorCTAxMzUgIENvb2xwaXggNTkwMCAocHRwKQorCTAxMzYgIENvb2xwaXggNzkwMCAoc3RvcmFnZSkKKwkwMTM3ICBDb29scGl4IDc5MDAgKHB0cCkKKwkwMTQxICBDb29scGl4IFAyIChzdG9yYWdlKQorCTAxNDIgIENvb2xwaXggUDIgKHB0cCkKKwkwMTYzICBDb29scGl4IFA1MTAwIChwdHApCisJMDE2OSAgQ29vbHBpeCBQNTAgKHB0cCkKKwkwMjAyICBDb29scGl4IFNRIChwdHApCisJMDIwMyAgQ29vbHBpeCA0MjAwIChtYXNzIHN0b3JhZ2UgbW9kZSkKKwkwMjA0ICBDb29scGl4IDQyMDAgKHB0cCkKKwkwMjA1ICBDb29scGl4IDUyMDAgKHN0b3JhZ2UpCisJMDIwNiAgQ29vbHBpeCA1MjAwIChwdHApCisJMDMwMSAgQ29vbHBpeCAyMDAwIChzdG9yYWdlKQorCTAzMDIgIENvb2xwaXggMjAwMCAocHRwKQorCTA0MDIgIERTQyBEMTAwIChwdHApCisJMDQwMyAgRDJIIChtYXNzIHN0b3JhZ2UgbW9kZSkKKwkwNDA0ICBEMkggU0xSIChwdHApCisJMDQwNSAgRDcwIChtYXNzIHN0b3JhZ2UgbW9kZSkKKwkwNDA2ICBEU0MgRDcwIChwdHApCisJMDQwOCAgRDJYIFNMUiAocHRwKQorCTA0MDkgIEQ1MCBkaWdpdGFsIGNhbWVyYQorCTA0MGEgIEQ1MCAocHRwKQorCTA0MGMgIEQySHMKKwkwNDBlICBEU0MgRDcwcyAocHRwKQorCTA0MTMgIEQ0MCAobWFzcyBzdG9yYWdlIG1vZGUpCisJNDAwMCAgQ29vbHNjYW4gTFMgNDAgRUQKKwk0MDAxICBMUyA1MCBFRC9Db29sc2NhbiBWIEVECisJNDAwMiAgU3VwZXIgQ29vbHNjYW4gTFMtNTAwMCBFRAorMDRiMSAgUGFuIEludGVybmF0aW9uYWwKKzA0YjMgIElCTSBDb3JwLgorCTMwMDMgIFJhcGlkIEFjY2VzcyBJSUkgS2V5Ym9hcmQKKwkzMDA0ICBNZWRpYSBBY2Nlc3MgUHJvIEtleWJvYXJkCisJMzAwYSAgUmFwaWQgQWNjZXNzIElJSWUgS2V5Ym9hcmQKKwkzMDE2ICBVbHRyYU5hdiBLZXlib2FyZCBIdWIKKwkzMDE4ICBVbHRyYU5hdiBLZXlib2FyZAorCTMwMWIgIFNLLTg4MTUgS2V5Ym9hcmQKKwkzMDFjICBFbmhhbmNlZCBQZXJmb3JtYW5jZSBLZXlib2FyZAorCTMwMjAgIEVuaGFuY2VkIFBlcmZvcm1hbmNlIEtleWJvYXJkCisJMzEwMCAgTmV0VmlzdGEgTW91c2UKKwkzMTAzICBTY3JvbGxQb2ludCBQcm8gTW91c2UKKwkzMTA0ICBTY3JvbGxQb2ludCBXaXJlbGVzcyBNb3VzZQorCTMxMDUgIFNjcm9sbFBvaW50IE9wdGljYWwgKEhJRCkKKwkzMTA3ICBUaGlua1BhZCA4MDBkcGkgT3B0aWNhbCBUcmF2ZWwgTW91c2UKKwkzMTA4ICA4MDBkcGkgT3B0aWNhbCBNb3VzZSB3LyBTY3JvbGwgUG9pbnQKKwkzMTA5ICBPcHRpY2FsIFNjcm9sbFBvaW50IFBybyBNb3VzZQorCTMxMGIgIFJlZCBXaGVlbCBNb3VzZQorCTQ0MjcgIFBvcnRhYmxlIENEIFJPTQorCTQ0ODIgIFNlcmlhbCBDb252ZXJ0ZXIKKwk0NTI1ICBEb3VibGUgc2lkZWQgQ1JUCisJNDU1MCAgTlZSQU0gKDEyOCBLQikKKwk0NTU0ICBDYXNoIERyYXdlcgorCTQ1ODAgIEh1YiB3LyBOVlJBTQorCTQ1ODEgIDQ4MDAtMnh4IEh1YiB3LyBDYXNoIERyYXdlcgorCTQ2MDQgIEtleWJvYXJkIHcvIENhcmQgUmVhZGVyCisJNDY3MSAgNDgyMCBMQ0Qgdy8gTVNSL0tCCiswNGI0ICBDeXByZXNzIFNlbWljb25kdWN0b3IgQ29ycC4KKwkwMDAwICBEYWNhbCBEQy0xMDEgQ0QgTGlicmFyeQorCTAwMDEgIE1vdXNlCisJMDAwMiAgQ1k3QzYzeDB4IFRoZXJtb21ldGVyCisJMDEwMSAgS2V5Ym9hcmQvSHViCisJMDEwMiAgS2V5Ym9hcmQgd2l0aCBBUE0KKwkwMTMwICBNeUlSQyBSZW1vdGUgUmVjZWl2ZXIKKwkwYmFkICBNZXRhR2VlayBXaS1TcHkKKwkxMDAyICBDWTdDNjMwMDEgUjEwMCBGTSBSYWRpbworCTEwMDYgIEh1bWFuIEludGVyZmFjZSBEZXZpY2UKKwk0MzgxICBTQ0FQUyBVU0MtMSBTY2FubmVyIENvbnRyb2xsZXIKKwk0NjExICBTdG9yYWdlIEFkYXB0ZXIgRlgyIChDWSkKKwk0NjE2ICBGbGFzaCBEaXNrIChUUFApCisJNTUwMCAgSElELT5DT00gUlMyMzIgQWRhcHRlcgorCTYzNzAgIFZpZXdNYXRlIERlc2t0b3AgTW91c2UgQ0MyMjAxCisJNjU2MCAgQ1k3QzY1NjQwIFVTQi0yLjAgIlRldHJhSHViIgorCTY4MzAgIENZN0M2ODMwMEEgRVotVVNCIEFUMiBVU0IgMi4wIHRvIEFUQS9BVEFQSQorCTY4MzEgIFN0b3JhZ2UgQWRhcHRlciBJU0QtMzAwTFAgKENZKQorCTc0MTcgIFdpcmVsZXNzIFBDIExvY2sKKwk4NjEzICBDWTdDNjgwMTMgRVotVVNCIEZYMiBVU0IgMi4wIERldmVsb3BtZW50IEtpdAorCTg2MTQgIERUVi1EVkIgVURTVDcwMjBCREEgRFZCLVMgQm94KERWQlMgZm9yIE1DRTIwMDUpCisJY2MwNCAgQ2VudG9yIFVTQiBSQUNJQS1BTFZBUiBVU0IgUE9SVAorCWNjMDYgIENlbnRvci1QIFJBQ0lBLUFMVkFSIFVTQiBQT1JUCisJZDVkNSAgQ1k3QzYzeDB4IFpvbHRyaXggWi1Cb3hlciBHYW1lUGFkCisJZjAwMCAgQ1kzMDcwMCBMaWNvcmljZSBldmFsdWF0aW9uIGJvYXJkCiswNGI1ICBST0hNIExTSSBTeXN0ZW1zIFVTQSwgTExDCiswNGI2ICBIaW50IENvcnAuCiswNGI3ICBDb21wYWwgRWxlY3Ryb25pY3MsIEluYy4KKzA0YjggIFNlaWtvIEVwc29uIENvcnAuCisJMDAwMSAgU3R5bHVzIENvbG9yIDc0MCAvIFBob3RvIDc1MAorCTAwMDIgIElTRCBTbWFydCBDYWJsZSBmb3IgTWFjCisJMDAwMyAgSVNEIFNtYXJ0IENhYmxlCisJMDAwNCAgUHJpbnRlcgorCTAwMDUgIFN0eWx1cyBEODgrCisJMDAwNiAgUHJpbnRlcgorCTAwMDcgIFByaW50ZXIKKwkwMTAxICBQZXJmZWN0aW9uIDYzNgorCTAxMDIgIEdULTIyMDAKKwkwMTAzICBQZXJmZWN0aW9uIDYxMAorCTAxMDQgIFBlcmZlY3Rpb24gMTIwMAorCTAxMDUgIFN0eWx1c1NjYW4gMjAwMAorCTAxMDYgIFN0eWx1cyBTY2FuIDI1MDAKKwkwMTA3ICBFeHByZXNzaW9uIDE2MDBVCisJMDEwOSAgRXhwcmVzc2lvbiAxNjQwIFhMCisJMDEwYSAgUGVyZmVjdGlvbiAxNjQwU1UKKwkwMTBiICBQZXJmZWN0aW9uIDEyNDAKKwkwMTBjICBQZXJmZWN0aW9uIDY0MAorCTAxMGUgIFBlcmZlY3Rpb24gMTY4MAorCTAxMGYgIFBlcmZlY3Rpb24gMTI1MAorCTAxMTAgIFBlcmZlY3Rpb24gMTY1MAorCTAxMTIgIFBlcmZlY3Rpb24gMjQ1MAorCTAxMTQgIFBlcmZlY3Rpb24gNjYwCisJMDExNiAgUGVyZmVjdGlvbiAzMTcwIChHVC05NDAwKQorCTAxMTggIFBlcmZlY3Rpb24gNDE4MCAoR0YtRjYwMCkKKwkwMTE5ICBQZXJmZWN0aW9uIDQ0OTAgUGhvdG8KKwkwMTFhICAxMDAwIElDUworCTAxMWIgIFBlcmZlY3Rpb24gMjQwMCBQaG90bworCTAxMWMgIFBlcmZlY3Rpb24gMzIwMAorCTAxMWQgIFBlcmZlY3Rpb24gMTI2MCBQaG90bworCTAxMWUgIFBlcmZlY3Rpb24gMTY2MCBQaG90bworCTAxMWYgIFBlcmZlY3Rpb24gMTY3MAorCTAxMjAgIFBlcmZlY3Rpb24gMTI3MCBzY2FubmVyCisJMDEyMSAgUGVyZmVjdGlvbiAyNDgwIFBob3RvCisJMDEyMiAgUGVyZmVjdGlvbiAzNTkwIHNjYW5uZXIKKwkwMTI2ICBHVC0xNTAwMCAoRVMtNzAwMCkKKwkwMTI4ICBQZXJmZWN0aW9uIDQ4NzAgKEdULVg3MDApCisJMDEyOSAgRXhwcmVzc2lvbiAxMDAwMFhMIChFUy0xMDAwMEcpCisJMDEyYSAgUGVyZmVjdGlvbiA0OTkwIFBob3RvIHNjYW5uZXIKKwkwMTJiICBHVC0yNTAwIChFUy1IMzAwKQorCTAxMmMgIFBlcmZlY3Rpb24gVjM1MCAoR1QtRjcwMCkKKwkwMTJkICBQZXJmZWN0aW9uIFYxMC9WMTAwIChHVC1TNjAwL0Y2NTApCisJMDEyZiAgUGVyZmVjdGlvbiBWMzUwIChHVC1GNzAwKQorCTAyMDIgIFJlY2VpcHQgUHJpbnRlciBNMTI5QworCTA0MDEgIENQIDgwMCBEaWdpdGFsIENhbWVyYQorCTA0MDIgIFBob3RvUEMgODUwegorCTA0MDMgIFBob3RvUEMgMzAwMHoKKwkwNTA5ICBKVkMgUElYLU1DMTAKKwkwNjAxICBTdHlsdXMgUGhvdG8gODc1REMgQ2FyZCBSZWFkZXIKKwkwNjAyICBTdHlsdXMgUGhvdG8gODk1IENhcmQgUmVhZGVyCisJMDgwMSAgU3R5bHVzIENYNTIwMC9DWDU0MDAvQ1g2NjAwCisJMDgwMiAgU3R5bHVzIENYMzIwMAorCTA4MDMgIFByaW50ZXIgKENvbXBvc2l0ZSBEZXZpY2UpCisJMDgwNCAgU3RvcmFnZSBEZXZpY2UKKwkwODA1ICBTdHlsdXMgQ1g2NDAwCisJMDgwNiAgU3R5bHVzIFBob3RvIFJYNjAwLzYxMAorCTA4MDcgIFN0eWx1cyBQaG90byBSWDUwMC81MTAKKwkwODA4ICBTdHlsdXMgQ1g1MjAwCisJMDgwOSAgU3RvcmFnZSBEZXZpY2UKKwkwODBhICBTdG9yYWdlIERldmljZQorCTA4MGMgIE1FMTAwCisJMDgwZCAgU3R5bHVzIENYNDUwMC80NjAwCisJMDgwZSAgQ1gtMzUwMC8zNjAwLzM2NTAgTUZQCisJMDgwZiAgU3R5bHVzIFBob3RvIFJYNDI1IHNjYW5uZXIKKwkwODEwICBTdHlsdXMgUGhvdG8gUlg3MDAgKFBNLUE5MDApCisJMDgxMSAgU3R5bHVzIFBob3RvIFJYNjIwIGFsbC1pbi1vbmUKKwkwODEyICBNRlAgQ29tcG9zaXRlIERldmljZQorCTA4MTMgIFN0eWx1cyBDWDY1MDAvNjYwMAorCTA4MTQgIChQTS1BNzAwKQorCTA4MTUgIEFjdUxhc2VyIENYMTEgKExQLUE1MDApCisJMDgxNiAgUHJpbnRlciAoQ29tcG9zaXRlIERldmljZSkKKwkwODE3ICAoTFAtTTU1MDApCisJMDgxOCAgU3R5bHVzIENYMzcwMC9DWDM4MDAvRFgzODAwCisJMDgxOSAgU3R5bHVzIENYNDcwMC9DWDQ4MDAvRFg0ODAwIChQWC1BNzUwKQorCTA4MWEgIFN0eWx1cyBQaG90byBSWDUyMC9SWDUzMCAoUE0tQTc1MCkKKwkwODFiICBNRlAgQ29tcG9zaXRlIERldmljZQorCTA4MWMgIFN0eWx1cyBQaG90byBSWDY0MC9SWDY1MCAoUE0tQTg5MCkKKwkwODFkICAoUE0tQTk1MCkKKwkwODFlICBNRlAgQ29tcG9zaXRlIERldmljZQorCTA4MWYgIFN0eWx1cyBDWDc3MDAvNzgwMAorCTA4MjAgIENYNDIwMCBNUCBzY2FubmVyCisJMDgyMSAgTUZQIENvbXBvc2l0ZSBEZXZpY2UKKwkwODIyICBTdG9yYWdlIERldmljZQorCTA4MjMgIE1GUCBDb21wb3NpdGUgRGV2aWNlCisJMDgyNCAgU3RvcmFnZSBEZXZpY2UKKwkwODI1ICBNRlAgQ29tcG9zaXRlIERldmljZQorCTA4MjYgIFN0b3JhZ2UgRGV2aWNlCisJMDgyNyAgU3R5bHVzIFBob3RvIFJYNTYwLzU4MC81OTAgKFBNLUE4MjApCisJMDgyOCAgKFBNLUE5NzApCisJMDgyOSAgKFBNLVQ5OTApCisJMDgyYSAgKFBNLUE5MjApCisJMDgyYiAgU3R5bHVzIERYNTA1MAorCTA4MmMgIFN0b3JhZ2UgRGV2aWNlCisJMDgyZCAgU3RvcmFnZSBEZXZpY2UKKwkwODJlICAweDA4MmUgIERYLTYweDAgTUZQIHNjYW5uZXIKKwkwODJmICBTdHlsdXMgRFg0MDUwCisJMDgzMCAgU3R5bHVzIENYMjgwMC9DWDI5MDAvTUUyMDAKKwkwODMxICBNRlAgQ29tcG9zaXRlIERldmljZQorCTA4MzIgIE1GUCBDb21wb3NpdGUgRGV2aWNlCisJMDgzMyAgKExQLU01NjAwKQorCTA4MzQgIE1GUCBDb21wb3NpdGUgRGV2aWNlCisJMDgzNSAgQWN1TGFzZXIgQ1gyMQorCTA4MzYgIE1GUCBDb21wb3NpdGUgRGV2aWNlCisJMDgzNyAgTUZQIENvbXBvc2l0ZSBEZXZpY2UKKwkwODM4ICBDWDczMDAvQ1g3NDAwL0RYNzQwMAorCTA4MzkgIENYODMwMC9DWDg0MDAvRFg4NDAwCisJMDgzYSAgQ1g5MzAwRi9DWDk0MDBGYXgvRFg5NDAwRgorCTA4M2IgIE1GUCBDb21wb3NpdGUgRGV2aWNlCisJMDgzYyAgTUZQIENvbXBvc2l0ZSBEZXZpY2UKKwkwODNkICBNRlAgQ29tcG9zaXRlIERldmljZQorCTA4M2UgIE1GUCBDb21wb3NpdGUgRGV2aWNlCisJMDgzZiAgU3R5bHVzIERYNDQ1MAorMDRiOSAgUmFpbmJvdyBUZWNobm9sb2dpZXMsIEluYy4KKwkwMzAwICBTYWZlTmV0IFVTQiBTdXBlclByby9VbHRyYVBybworCTEwMDAgIGlLZXkgMTAwMCBUb2tlbgorCTEwMDEgIGlLZXkgMTIwMCBUb2tlbgorCTEwMDIgIGlLZXkgVG9rZW4KKwkxMDAzICBpS2V5IFRva2VuCisJMTAwNCAgaUtleSBUb2tlbgorCTEwMDUgIGlLZXkgVG9rZW4KKwkxMDA2ICBpS2V5IFRva2VuCisJMTIwMCAgaUtleSAyMDAwIFRva2VuCisJMTIwMSAgaUtleSBUb2tlbgorCTEyMDIgIGlLZXkgMjAzMiBUb2tlbgorCTEyMDMgIGlLZXkgVG9rZW4KKwkxMjA0ICBpS2V5IFRva2VuCisJMTIwNSAgaUtleSBUb2tlbgorCTEyMDYgIGlLZXkgVG9rZW4KKwkxMzAwICBpS2V5IDMwMDAgVG9rZW4KKwkxMzAxICBpS2V5IDMwMDAKKwkxMzAyICBpS2V5IFRva2VuCisJMTMwMyAgaUtleSBUb2tlbgorCTEzMDQgIGlLZXkgVG9rZW4KKwkxMzA1ICBpS2V5IFRva2VuCisJMTMwNiAgaUtleSBUb2tlbgorMDRiYSAgVG91Y2FuIFN5c3RlbXMsIEx0ZAorMDRiYiAgSS1PIERhdGEgRGV2aWNlLCBJbmMuCisJMDEwMSAgVVNCMi1JREUvQVRBUEkgQnJpZGdlIEFkYXB0ZXIKKwkwMjAxICBVU0IyLUlERS9BVEFQSSBCcmlkZ2UgQWRhcHRlcgorCTAyMDQgIERWRCBNdWx0aS1wbHVzIHVuaXQgaVUtQ0QyCisJMDIwNiAgRFZEIE11bHRpLXBsdXMgdW5pdCBEVlItVUVIOAorCTAzMDEgIFN0b3JhZ2UgRGV2aWNlCisJMDMxNCAgVVNCLVNTTVJXIFNELWNhcmQKKwkwMzE5ICBVU0IyLUlERS9BVEFQSSBCcmlkZ2UgQWRhcHRlcgorCTAzMWEgIFVTQjItSURFL0FUQVBJIEJyaWRnZSBBZGFwdGVyCisJMDMxYiAgVVNCMi1JREUvQVRBUEkgQnJpZGdlIEFkYXB0ZXIKKwkwMzFlICBVU0ItU0RSVyBTRC1jYXJkCisJMDUwMiAgTm9nYXRlY2ggTGl2ZSEgKEJUKQorCTA5MDEgIFVTQiBFVFQKKwkwOTA0ICBFVC9UWCBFdGhlcm5ldCBbcGVnYXN1c10KKwkwOTEzICBFVC9UWC1TIEV0aGVybmV0IFtwZWdhc3VzMl0KKwkwOTE5ICBVU0IgV04tQjExCisJMDkyMiAgSU9EYXRhIEFpclBvcnQgV04tQjExL1VTQlMgODAyLjExYgorCTA5MzAgIEVURy1VUzIKKwkwOTM3ICBXTi1XQUcvVVNMIFdpcmVsZXNzIExBTiBBZGFwdGVyCisJMDkzOCAgV04tRzU0L1VTTCBXaXJlbGVzcyBMQU4gQWRhcHRlcgorCTBhMDMgIFNlcmlhbCBVU0ItUlNBUTEKKwkwYTA3ICBVU0IyLWlDTiBBZGFwdGVyCisJMGEwOCAgVVNCMi1pQ04gQWRhcHRlcgorCTBjMDEgIEZNLTEwIFBybyBEaXNrCiswNGJkICBUb3NoaWJhIEVsZWN0cm9uaWNzIFRhaXdhbiBDb3JwLgorMDRiZSAgVGVsaWEgUmVzZWFyY2ggQUIKKzA0YmYgIFRESyBDb3JwLgorCTAxMDAgIE1lZGlhUmVhZGVyIENGCisJMDExNSAgVVNCLVBEQyBBZGFwdGVyIFVQQTk2NjQKKwkwMTE2ICBVU0ItY2RtYU9uZSBBZGFwdGVyIFVDQTE0NjQKKwkwMTE3ICBVU0ItUEhTIEFkYXB0ZXIgVUhBNjQwMAorCTAxMTggIFVTQi1QSFMgQWRhcHRlciBVUEE2NDAwCisJMDEzNSAgTWVkaWFSZWFkZXIgRHVhbAorCTAyMDIgIDczUzExMjFGIFNtYXJ0IENhcmQgUmVhZGVyLQorCTAzMDkgIEJsdWV0b290aCBVU0IgZG9uZ2xlCisJMDMwYSAgSUJNIEJsdWV0b290aCBVbHRyYXBvcnQgTW9kdWxlCisJMDMwYiAgQmx1ZXRvb3RoIERldmljZQorCTAzMGMgIFVsdHJhcG9ydCBCbHVldG9vdGggRGV2aWNlCisJMDMxMCAgSW50ZWdyYXRlZCBCbHVldG9vdGgKKwkwMzExICBJbnRlZ3JhdGVkIEJsdWV0b290aCBEZXZpY2UKKwkwMzE3ICBCbHVldG9vdGggVWx0cmFQb3J0IE1vZHVsZSBmcm9tIElCTQorCTAzMTggIElCTSBJbnRlZ3JhdGVkIEJsdWV0b290aAorCTAzMTkgIEJsdWV0b290aCBBZGFwdGVyCisJMDMyMCAgQmx1ZXRvb3RoIEFkYXB0ZXIKKwkwMzIxICBCbHVldG9vdGggRGV2aWNlCisJMGEyOCAgSU5ESSBBVi1JTiBEZXZpY2UKKzA0YzEgIFUuUy4gUm9ib3RpY3MgKDNDb20pCisJMDAyMCAgNTZLIFZvaWNlIFBybworCTAwMjIgIDU2SyBWb2ljZSBQcm8KKwkwMDdlICBJU0ROIFRBCisJMDA4MiAgT2ZmaWNlQ29ubmVjdCBBbmFsb2cgTW9kZW0KKwkwMDhmICBQcm8gSVNETiBUQQorCTAwOTcgIE9mZmljZUNvbm5lY3QgQW5hbG9nCisJMDA5ZCAgSG9tZUNvbm5lY3QgV2ViQ2FtIFt2aWNhbV0KKwkwMGE5ICBJU0ROIFBybyBUQS1VCisJMDBiOSAgSG9tZUNvbm5lY3QgSURTTCBNb2RlbQorCTMwMjEgIDU2ayBWb2ljZSBGYXhNb2RlbSBQcm8KKzA0YzIgIE1ldGhvZGUgRWxlY3Ryb25pY3MgRmFyIEVhc3QgUFRFLCBMdGQKKzA0YzMgIE1heGkgU3dpdGNoLCBJbmMuCisJMTEwMiAgTW91c2UKKwkyMTAyICBNb3VzZQorMDRjNCAgTG9ja2hlZWQgTWFydGluIEVuZXJneSBSZXNlYXJjaAorMDRjNSAgRnVqaXRzdSwgTHRkCisJMTAyOSAgZmktNDAxMGMgU2Nhbm5lcgorCTEwMzMgIGZpLTQxMTBDVQorCTEwNDEgIGZpLTQxMjBjIFNjYW5uZXIKKwkxMDQyICBmaS00MjIwYyBTY2FubmVyCisJMTA1YiAgQUgtRjQwMVUgQWlyIEggZGV2aWNlCisJMTA5NiAgZmktNTExMEVPWAorCTEwOTcgIGZpLTUxMTBDCisJMTBhZSAgZmktNDEyMEMyCisJMTBhZiAgZmktNDIyMEMyCisJMTBlMCAgZmktNTEyMGMgU2Nhbm5lcgorCTEwZTEgIGZpLTUyMjBDCisJMTBlNyAgZmktNTkwMEMKKwkxMGZlICBTNTAwCiswNGM2ICBUb3NoaWJhIEFtZXJpY2EgRWxlY3Ryb25pYyBDb21wb25lbnRzCiswNGM3ICBNaWNybyBNYWNybyBUZWNobm9sb2dpZXMKKzA0YzggIEtvbmljYSBDb3JwLgorCTA3MjAgIERpZ2l0YWwgQ29sb3IgQ2FtZXJhCisJMDcyMSAgZS1taW5pRCBDYW1lcmEKKwkwNzIyICBlLW1pbmkKKwkwNzIzICBLRC0yMDBaIENhbWVyYQorCTA3MjYgIEtELTMxMFogQ2FtZXJhCisJMDcyOCAgUmV2aW8gQzIgTWFzcyBTdG9yYWdlIERldmljZQorCTA3MjkgIFJldmlvIEMyIERpZ2l0YWwgQ2FtZXJhCisJMDcyYyAgUmV2aW8gS0QyME0KKwkwNzJkICBSZXZpbyBLRDQxMFoKKzA0Y2EgIExpdGUtT24gVGVjaG5vbG9neSBDb3JwLgorCTE3NjYgIEhJRCBNb25pdG9yIENvbnRyb2xzCisJOTMwNCAgSHViCiswNGNiICBGdWppIFBob3RvIEZpbG0gQ28uLCBMdGQKKwkwMTAwICBGaW5lUGl4IDMwaS80MGkvNTBpLCBBMTAxLzIwMSwgMTMwMC8yMjAwLCAxNDAwLzI0MDAvMjYwMC8yODAwLzQ1MDAvNDcwMC80ODAwLzQ5MDAvNjgwMC82OTAwIFpvb20KKwkwMTAzICBGaW5lUGl4IE5YLTUwMC9OWC03MDAgcHJpbnRlcgorCTAxMDQgIEZpbmVQaXggQTEwMSwgMjYwMC8yODAwLzQ4MDAvNjgwMCBab29tIChQQyBDQU0pCisJMDEwOCAgRmluZVBpeCBGNjAxIFpvb20gKERTQykKKwkwMTA5ICBGaW5lUGl4IEY2MDEgWm9vbSAoUEMgQ0FNKQorCTAxMGEgIEZpbmVQaXggUzYwMiAoUHJvKSBab29tIChEU0MpCisJMDEwYiAgRmluZVBpeCBTNjAyIChQcm8pIFpvb20gKFBDIENBTSkKKwkwMTBkICBGaW5lUGl4IERpZ2l0YWwgQ2FtZXJhIDAyMDUzMQorCTAxMGUgIEZpbmVQaXggRjQwMiBab29tIChEU0MpCisJMDEwZiAgRmluZVBpeCBGNDAyIFpvb20gKFBDIENBTSkKKwkwMTEwICBGaW5lUGl4IE02MDMgWm9vbSAoRFNDKQorCTAxMTEgIEZpbmVQaXggTTYwMyBab29tIChQQyBDQU0pCisJMDExMiAgRmluZVBpeCBBMjAyLCBBMjAwIFpvb20gKERTQykKKwkwMTEzICBGaW5lUGl4IEEyMDIsIEEyMDAgWm9vbSAoUEMgQ0FNKQorCTAxMTQgIEZpbmVQaXggRjQwMSBab29tIChEU0MpCisJMDExNSAgRmluZVBpeCBGNDAxIFpvb20gKFBDIENBTSkKKwkwMTE2ICBGaW5lUGl4IEEyMDMgWm9vbSAoRFNDKQorCTAxMTcgIEZpbmVQaXggQTIwMyBab29tIChQQyBDQU0pCisJMDExOCAgRmluZVBpeCBBMzAzIFpvb20gKERTQykKKwkwMTE5ICBGaW5lUGl4IEEzMDMgWm9vbSAoUEMgQ0FNKQorCTAxMWEgIEZpbmVQaXggUzMwNC8zODAwIFpvb20gKERTQykKKwkwMTFiICBGaW5lUGl4IFMzMDQvMzgwMCBab29tIChQQyBDQU0pCisJMDExYyAgRmluZVBpeCBBMjA0LzI2NTAgWm9vbSAoRFNDKQorCTAxMWQgIEZpbmVQaXggQTIwNC8yNjUwIFpvb20gKFBDIENBTSkKKwkwMTIwICBGaW5lUGl4IEY3MDAgWm9vbSAoRFNDKQorCTAxMjEgIEZpbmVQaXggRjcwMCBab29tIChQQyBDQU0pCisJMDEyMiAgRmluZVBpeCBGNDEwIFpvb20gKERTQykKKwkwMTIzICBGaW5lUGl4IEY0MTAgWm9vbSAoUEMgQ0FNKQorCTAxMjQgIEZpbmVQaXggQTMxMCBab29tIChEU0MpCisJMDEyNSAgRmluZVBpeCBBMzEwIFpvb20gKFBDIENBTSkKKwkwMTI2ICBGaW5lUGl4IEEyMTAgWm9vbSAoRFNDKQorCTAxMjcgIEZpbmVQaXggQTIxMCBab29tIChQQyBDQU0pCisJMDEyOCAgRmluZVBpeCBBMjA1KFMpIFpvb20gKERTQykKKwkwMTI5ICBGaW5lUGl4IEEyMDUoUykgWm9vbSAoUEMgQ0FNKQorCTAxMmEgIEZpbmVQaXggRjYxMCBab29tIChEU0MpCisJMDEyYiAgRmluZVBpeCBEaWdpdGFsIENhbWVyYSAwMzA1MTMKKwkwMTJjICBGaW5lUGl4IFM3MDAwIFpvb20gKERTQykKKwkwMTJkICBGaW5lUGl4IFM3MDAwIFpvb20gKFBDIENBTSkKKwkwMTJmICBGaW5lUGl4IERpZ2l0YWwgQ2FtZXJhIDAzMDczMQorCTAxMzAgIEZpbmVQaXggUzUwMDAgWm9vbSAoRFNDKQorCTAxMzEgIEZpbmVQaXggUzUwMDAgWm9vbSAoUEMgQ0FNKQorCTAxM2IgIEZpbmVQaXggRGlnaXRhbCBDYW1lcmEgMDMwNzIyCisJMDEzYyAgRmluZVBpeCBTMzAwMCBab29tIChEU0MpCisJMDEzZCAgRmluZVBpeCBTMzAwMCBab29tIChQQyBDQU0pCisJMDEzZSAgRmluZVBpeCBGNDIwIFpvb20gKERTQykKKwkwMTNmICBGaW5lUGl4IEY0MjAgWm9vbSAoUEMgQ0FNKQorCTAxNDIgIEZpbmVQaXggUzcwMDAgWm9vbSAoUFRQKQorCTAxNDggIEZpbmVQaXggQTMzMCBab29tIChEU0MpCisJMDE0OSAgRmluZVBpeCBBMzMwIFpvb20gKFVWQykKKwkwMTRhICBGaW5lUGl4IEEzMzAgWm9vbSAoUFRQKQorCTAxNGIgIEZpbmVQaXggQTM0MCBab29tIChEU0MpCisJMDE1OSAgRmluZVBpeCBGNzEwIFpvb20gKERTQykKKwkwMTY1ICBGaW5lUGl4IFMzNTAwIFpvb20gKERTQykKKwkwMTY4ICBGaW5lUGl4IEU1MDAgWm9vbSAoRFNDKQorCTAxNjkgIEZpbmVQaXggRTUwMCBab29tIChVVkMpCisJMDE2YiAgRmluZVBpeCBFNTEwIFpvb20gKERTQykKKwkwMTZjICBGaW5lUGl4IEU1MTAgWm9vbSAoUEMgQ0FNKQorCTAxNmUgIEZpbmVQaXggUzU1MDAgWm9vbSAoRFNDKQorCTAxNmYgIEZpbmVQaXggUzU1MDAgWm9vbSAoVVZDKQorCTAxNzEgIEZpbmVQaXggRTU1MCBab29tIChEU0MpCisJMDE3MiAgRmluZVBpeCBFNTUwIFpvb20gKFBUUCkKKwkwMTc3ICBGaW5lUGl4IEYxMCAoRFNDKQorCTAxNzkgIEZpbmVwaXggRjEwIChQVFApCisJMDE4NiAgRmluZVBpeCBTNTIwMC9TNTYwMCBab29tIChEU0MpCisJMDE4OCAgRmluZVBpeCBTNTIwMC9TNTYwMCBab29tIChQVFApCisJMDE4ZSAgRmluZVBpeCBTOTUwMCBab29tIChEU0MpCisJMDE4ZiAgRmluZVBpeCBTOTUwMCBab29tIChQVFApCisJMDE5MiAgRmluZVBpeCBFOTAwIFpvb20gKERTQykKKwkwMTkzICBGaW5lUGl4IEU5MDAgWm9vbSAoUFRQKQorCTAxOWIgIEZpbmVQaXggRjMwIChQVFApCisJMDFiZiAgRmluZVBpeCBGNjAwMGZkL1M2NTAwZmQgWm9vbSAoUFRQKQorCTAxYzAgIEZpbmVQaXggRjIwIChQVFApCisJMDFjMSAgRmluZVBpeCBGMzFmZCAoUFRQKQorCTAxYzQgIEZpbmVQaXggUzU3MDAgWm9vbSAoUFRQKQorCTAxYzUgIEZpbmVQaXggRjQwZmQgKFBUUCkKKwkwMWM2ICBGaW5lUGl4IEE4MjAgWm9vbSAoUFRQKQorCTAxZDIgIEZpbmVQaXggQTgwMCBab29tIChQVFApCisJMDFkNSAgRmluZVBpeCBGNDcgKFBUUCkKKzA0Y2MgIFBoaWxpcHMgU2VtaWNvbmR1Y3RvcnMKKwkxMTIyICBIdWIKKwkxNTIxICBVU0IgMi4wIEh1YgorCTgxMTYgIENhbWVyYQorMDRjZCAgVGF0dW5nIENvLiBPZiBBbWVyaWNhCiswNGNlICBTY2FuTG9naWMgQ29ycC4KKwkwMDAyICBTTDExUi1JREUgSURFIEJyaWRnZQorCTAxMDAgIFVTQjJQUk4gUHJpbnRlciBDbGFzcworCTAzMDAgIFBoYW50b20gMzM2Q1ggLSBDMyBzY2FubmVyCisJMDRjZSAgU0wxMURFTU8sIFZJRDogMHg0Y2UsIFBJRDogMHg0Y2UKKwkwN2QxICBTTDExUiwgVklEOiAweDRjZSwgUElEOiAweDA3RDEKKzA0Y2YgIE15c29uIENlbnR1cnksIEluYy4KKwkwODAwICBNVFA4MDAgTWFzcyBTdG9yYWdlIERldmljZQorCTg4MTAgIENTODgxMCBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJODgxMSAgQ1M4ODExIE1hc3MgU3RvcmFnZSBEZXZpY2UKKwk4ODEzICBDUzg4MTMgTWFzcyBTdG9yYWdlIERldmljZQorCTg4MTggIFVTQjIuMCB0byBBVEFQSSBCcmlkZ2UgQ29udHJvbGxlcgorMDRkMCAgRGlnaSBJbnRlcm5hdGlvbmFsCiswNGQxICBJVFQgQ2Fub24KKzA0ZDIgIEFsdGVjIExhbnNpbmcgVGVjaG5vbG9naWVzCisJMDA3MCAgQURBNzAgU3BlYWtlcnMKKwkwMzA1ICBOb24tQ29tcGxpYW50IEF1ZGlvIERldmljZQorCTAzMTEgIEFEQS0zMTAgU3BlYWtlcnMKKwkyMDYwICBDbGFyaXRlbC1pNzUwIC0gdnAKKwlmZjA1ICBBREEtMzA1IFNwZWFrZXJzCisJZmY0NyAgTGFuc2luZyBISUQgQXVkaW8gQ29udHJvbHMKKwlmZjQ5ICBMYW5zaW5nIEhJRCBBdWRpbyBDb250cm9scworMDRkMyAgVmlkVVMsIEluYy4KKzA0ZDQgIExTSSBMb2dpYywgSW5jLgorMDRkNSAgRm9ydGUgVGVjaG5vbG9naWVzLCBJbmMuCiswNGQ2ICBNZW50b3IgR3JhcGhpY3MKKzA0ZDcgIE9raSBTZW1pY29uZHVjdG9yCisJMWJlNCAgQmx1ZXRvb3RoIERldmljZQorMDRkOCAgTWljcm9jaGlwIFRlY2hub2xvZ3ksIEluYy4KKwkwMDAyICBVU0ItTENEIDJ4MjAKKwk4MDAwICBJbi1DaXJjdWl0IERlYnVnZ2VyCisJODAwMSAgSUNEMiBpbi1jaXJjdWl0IGRlYnVnZ2VyCiswNGQ5ICBIb2x0ZWsgU2VtaWNvbmR1Y3RvciwgSW5jLgorCTEyMDMgIE1DIEluZHVzdHJpZXMgS2V5Ym9hcmQKKzA0ZGEgIFBhbmFzb25pYyAoTWF0c3VzaGl0YSkKKwkwOTAxICBMUy0xMjAgQ2FtZXJhCisJMGIwMSAgQ0QtUi9SVyBEcml2ZQorCTBiMDMgIFN1cGVyRGlzayAyNDBNQgorCTBkMDEgIENELVIgRHJpdmUgS1hMLTg0MEFOCisJMGQwOSAgQ0QtUiBEcml2ZSBLWEwtUlczMkFOCisJMGQwYSAgQ0QtUiBEcml2ZSBLWEwtQ0IyMEFOCisJMGQwZCAgQ0RSQ0IwMworCTBkMGUgIERWRC1ST00gJiBDRC1SL1JXCisJMGY0MCAgUHJpbnRlcgorCTE1MDAgIE1GU1VTQiBEcml2ZXIKKwkxYjAwICBNdWx0aU1lZGlhQ2FyZAorCTIxMjEgIEVCLVZTNgorCTIzMTcgIERWQyBVU0ItU0VSSUFMIERyaXZlciBmb3IgV2luWFAKKwkyMzE5ICBOVi1HUzE1ICh3ZWJjYW0gbW9kZSkKKwkyMzFkICBEVkMgV2ViIENhbWVyYSBEZXZpY2UKKwkyMzFlICBEVkMgRFYgU3RyZWFtIERldmljZQorCTIzNzIgIEx1bWl4IERNQy1GWjEwIENhbWVyYQorCTIzNzQgIERNQy1GWjIwCiswNGRiICBIeXBlcnRlYyBQdHksIEx0ZAorMDRkYyAgSHVhbiBIc2luIEhvbGRpbmdzLCBMdGQKKzA0ZGQgIFNoYXJwIENvcnAuCisJMTNhNiAgTUZDMjAwMAorCTYwMDYgIEFMLTEyMTYKKwk2MDA3ICBBTC0xMDQ1CisJNjAwOCAgQUwtMTI1NQorCTYwMDkgIEFMLTE1MzBDUworCTYwMGEgIEFMLTE1NDBDUworCTYwMGIgIEFMLTE0NTYKKwk2MDBjICBBTC0xNTU1CisJNjAwZCAgQUwtMTIyNQorCTYwMGUgIEFMLTE1NTFDUworCTYwMGYgIEFSLTEyMkUKKwk2MDEwICBBUi0xNTJFCisJNjAxMSAgQVItMTU3RQorCTYwMTIgIFNOLTEwNDUKKwk2MDEzICBTTi0xMjU1CisJNjAxNCAgU04tMTQ1NgorCTYwMTUgIFNOLTE1NTUKKwk2MDE2ICBBUi0xNTNFCisJNjAxNyAgQVItMTIyRSBOCisJNjAxOCAgQVItMTUzRSBOCisJNjAxOSAgQVItMTUyRSBOCisJNjAxYSAgQVItMTU3RSBOCisJNjAxYiAgQUwtMTIxNworCTYwMWMgIEFMLTEyMjYKKwk2MDFkICBBUi0xMjNFCisJNzAwMiAgRFZDIFZlci4xLjAKKwk3MDA0ICBWRS1DRzQwVSBEaWdpdGFsIFN0aWxsIENhbWVyYQorCTcwMDUgIFZFLUNHMzAgRGlnaXRhbCBTdGlsbCBDYW1lcmEKKwk3MDA3ICBWTC1aN1MgRGlnaXRhbCBDYW1jb3JkZXIKKwk4MDA0ICBaYXVydXMgU0wtNTAwMEQvU0wtNTUwMCBQREEKKwk4MDA1ICBaYXVydXMgQS0zMDAKKwk4MDA2ICBaYXVydXMgU0wtQjUwMC9TTC01NjAwIFBEQQorCTgwMDcgIFphdXJ1cyBDLTcwMCBQREEKKwk5MDE0ICBJTS1EUjgwIFBvcnRhYmxlIE5ldE1EIFBsYXllcgorCTkwMzEgIFphdXJ1cyBDLTc1MC9DLTc2MC9DLTg2MC9TTC1DMzAwMCBQREEKKwk5MDMyICBaYXVydXMgU0wtNjAwMAorCTkwM2EgIEdTTSBHUFJTCisJOTA1MCAgWmF1cnVzIEMtODYwIFBEQQorCTkwNTYgIFZpZXdjYW0gWgorCTkwNzMgIEFNLTkwMAorCTkwNzQgIEdTTSBHUFJTCisJOTBhOSAgU2hhcnAgQ29tcG9zaXRlCisJOTBkMCAgVVNCLXRvLVNlcmlhbCBDb21tLiBQb3J0CisJOTBmMiAgU2hhcnAgM0cgR1NNIFVTQiBDb250cm9sCisJOTEyMCAgV1MwMDRTSAorCTkxMjIgIFdTMDA3U0gKKwk5MTIzICBXLVpFUk8zIEVTIFNtYXJ0cGhvbmUKKwk5MWEzICA5MjJTSCBJbnRlcm5ldCBNYWNoaW5lCiswNGRlICBNaW5kU2hhcmUsIEluYy4KKzA0ZGYgIEludGVybGluayBFbGVjdHJvbmljcworMDRlMSAgSWl5YW1hIE5vcnRoIEFtZXJpY2EsIEluYy4KKwkwMjAxICBNb25pdG9yIEh1YgorMDRlMiAgRXhhciBDb3JwLgorMDRlMyAgWmlsb2csIEluYy4KKzA0ZTQgIEFDQyBNaWNyb2VsZWN0cm9uaWNzCiswNGU1ICBQcm9taXNlIFRlY2hub2xvZ3kKKzA0ZTYgIFNDTSBNaWNyb3N5c3RlbXMsIEluYy4KKwkwMDAxICBFLVVTQiBBVEEgQnJpZGdlCisJMDAwMiAgZVVTQ1NJIFNDU0kgQnJpZGdlCisJMDAwMyAgZVVTQiBTbWFydE1lZGlhIENhcmQgUmVhZGVyCisJMDAwNSAgZVVTQiBTbWFydE1lZGlhL0NvbXBhY3RGbGFzaCBDYXJkIFJlYWRlcgorCTAwMDYgIGVVU0IgU21hcnRNZWRpYSBDYXJkIFJlYWRlcgorCTAwMDcgIEhpZmQKKwkwMDA5ICBlVVNCIEFUQS9BVEFQSSBBZGFwdGVyCisJMDAwYSAgZVVTQiBDb21wYWN0Rmxhc2ggQWRhcHRlcgorCTAwMGIgIGVVU0NTSSBCcmlkZ2UKKwkwMDBjICBlVVNDU0kgQnJpZGdlCisJMDAwZCAgRGF6emxlIE1TCisJMDAxMiAgRGF6emxlIFNEL01NQworCTAxMDEgIGVVU0IgQVRBIEJyaWRnZQorCTAzMTEgIERhenpsZSBETS1DRgorCTAzMTIgIERhenpsZSBETS1TRC9NTUMKKwkwMzEzICBEYXp6bGUgU00KKwkwMzE0ICBEYXp6bGUgTVMKKwkwMzIyICBlLUZpbG0gUmVhZGVyLTUKKwkwMzI1ICBlVVNCIE9SQ0EgUXVhZCBSZWFkZXIKKwkwMzI3ICBEaWdpdGFsIE1lZGlhIFJlYWRlcgorCTAzZmUgIERNSFMyIERGVSBBZGFwdGVyCisJMDQwNiAgZVVTQiBTbWFydERNIFJlYWRlcgorCTA0ZTYgIGVVU0IgREZVIEFkYXB0ZXIKKwkwNGU3ICBTVENJSSBERlUgQWRhcHRlcgorCTA0ZTggIGVVU0JETSBERlUgQWRhcHRlcgorCTA0ZTkgIERNLUUgREZVIEFkYXB0ZXIKKwkwNTAwICBWZXJpZGljb20gNXRoU2Vuc2UgRmluZ2VycHJpbnQgU2Vuc29yIGFuZCBlVVNCIFNtYXJ0Q2FyZAorCTA3MDEgIERDUzIwMCBMb2FkZXIgRGV2aWNlCisJMDcwMiAgRFZEIENyZWF0aW9uIFN0YXRpb24gMjAwCisJMDcwMyAgRFZDMTAwIExvYWRlciBEZXZpY2UKKwkwNzA0ICBEaWdpdGFsIFZpZGVvIENyZWF0b3IgMTAwCisJMTAwMSAgU0NSMzAwIFNtYXJ0IENhcmQgUmVhZGVyCisJMTAxMCAgVVNCQVQtMiBDb21wYWN0Rmxhc2ggQ2FyZCBSZWFkZXIKKwkxMDE0ICBlLUZpbG0gUmVhZGVyLTMKKwkxMDIwICBVU0JBVCBBVEEvQVRBUEkgQWRhcHRlcgorCTIwMDcgIFJTQSBTZWN1cklEIENvbWJvUmVhZGVyCisJMjAwOSAgQ2l0aWJhbmsgU21hcnQgQ2FyZCBSZWFkZXIKKwkyMDBhICBSZWZsZXggdi4yIFNtYXJ0IENhcmQgUmVhZGVyCisJMjAwZCAgU1RSMzkxIFJlYWRlcgorCTUxMTEgIFNDUjMzMS1ESSBTbWFydENhcmQgUmVhZGVyCisJNTExMyAgU0NSMzMzIFNtYXJ0Q2FyZCBSZWFkZXIKKwk1MTE0ICBTQ1IzMzEtREkgU21hcnRDYXJkIFJlYWRlcgorCTUxMTUgIFNDUjMzNSBTbWFydENhcmQgUmVhZGVyCisJNTExNiAgU0NSMzMxLUxDMSBTbWFydENhcmQgUmVhZGVyCisJNTExNyAgU0NSMzMyMCAtIFNtYXJ0IENhcmQgUmVhZGVyCisJNTExOCAgRXhwcmVzc2NhcmQgU0lNIENhcmQgUmVhZGVyCisJNTExOSAgU0NSMzM0MCAtIEV4cHJlc3NDYXJkNTQgU21hcnQgQ2FyZCBSZWFkZXIKKwk1MTFiICBTbWFydENhcmQgUmVhZGVyCisJNTExZCAgU0NSMzMxMSBTbWFydCBDYXJkIFJlYWRlcgorCTUxMjAgIFNDUjMzMS1ESSBTbWFydENhcmQgUmVhZGVyCisJNTEyMSAgU0RJMDEwIFNtYXJ0IENhcmQgUmVhZGVyCisJNTE1MSAgU0NSMzM4IEtleWJvYXJkIFNtYXJ0IENhcmQgUmVhZGVyCisJNTQxMCAgU0NSMzV4eCBTbWFydCBDYXJkIFJlYWRlcgorCWUwMDAgIFNDUngzMSBSZWFkZXIKKwllMDAxICBTQ1IzMzEgU21hcnRDYXJkIFJlYWRlcgorCWUwMDMgIFNQUjUzMiBQaW5QYWQgU21hcnRDYXJkIFJlYWRlcgorMDRlNyAgRWxvIFRvdWNoU3lzdGVtcworCTAwMDEgIFRvdWNoU2NyZWVuCisJMDAwMiAgVG91Y2htb25pdG9yIEludGVyZmFjZSAyNjAwIFJldiAyCisJMDAwNCAgNDAwMFUgQ2Fycm9sbFRvdWNowq4gVG91Y2htb25pdG9yIEludGVyZmFjZQorCTAwMDcgIDI1MDBVIEludGVsbGlUb3VjaMKuIFRvdWNobW9uaXRvciBJbnRlcmZhY2UKKwkwMDA4ICAzMDAwVSBBY2N1VG91Y2jCriBUb3VjaG1vbml0b3IgSW50ZXJmYWNlCisJMDAwOSAgNDAwMFUgQ2Fycm9sbFRvdWNowq4gVG91Y2htb25pdG9yIEludGVyZmFjZQorCTAwMjAgIFRvdWNoc2NyZWVuIEludGVyZmFjZSAoMjcwMCkKKwkwMDIxICBUb3VjaG1vbml0b3IgSW50ZXJmYWNlCisJMDAzMCAgNDUwMFUgQ2Fycm9sbFRvdWNowq4gVG91Y2htb25pdG9yIEludGVyZmFjZQorCTAwMzIgIFRvdWNobW9uaXRvciBJbnRlcmZhY2UKKwkwMDMzICBUb3VjaG1vbml0b3IgSW50ZXJmYWNlCisJMDA0MSAgNTAxMCBTdXJmYWNlIENhcGFjaXRpdmUgVG91Y2htb25pdG9yIEludGVyZmFjZQorCTAwNDIgIFRvdWNobW9uaXRvciBJbnRlcmZhY2UKKwkwMDUwICAyMjE2IEFjY3VUb3VjaMKuIFRvdWNobW9uaXRvciBJbnRlcmZhY2UKKwkwMDcxICBUb3VjaG1vbml0b3IgSW50ZXJmYWNlCisJMDA3MiAgVG91Y2htb25pdG9yIEludGVyZmFjZQorCTAwODEgIFRvdWNobW9uaXRvciBJbnRlcmZhY2UKKwkwMDgyICBUb3VjaG1vbml0b3IgSW50ZXJmYWNlCisJMDBmZiAgVG91Y2htb25pdG9yIEludGVyZmFjZQorMDRlOCAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZAorCTAxMTAgIENvbm5lY3QzRCBGbGFzaCBEcml2ZQorCTAxMTEgIENvbm5lY3QzRCBGbGFzaCBEcml2ZQorCTEwMDMgIE1QMyBQbGF5ZXIgYW5kIFJlY29yZGVyCisJMTAwNiAgU0RDLTIwMFoKKwkzMDA0ICBNTC00NjAwCisJMzAwNSAgRG9jdXByaW50IFAxMjEwCisJMzAwOCAgTUwtNjA2MCBsYXNlciBwcmludGVyCisJMzAwYyAgTUwtMTIxMCBQcmludGVyCisJMzAwZSAgTGFzZXIgUHJpbnRlcgorCTMxMDQgIE1MLTM1NTBOCisJMzIyNiAgTGFzZXIgUHJpbnRlcgorCTMyMjggIExhc2VyIFByaW50ZXIKKwkzMjJhICBMYXNlciBQcmludGVyCisJMzIyYyAgTGFzZXIgUHJpbnRlcgorCTMyMzAgIE1MLTE0NDAKKwkzMjMyICBMYXNlciBQcmludGVyCisJMzIzNiAgTUwtMTQ1MAorCTMyMzggIE1MLTE0MzAKKwkzMjNhICBNTC0xNzEwIFByaW50ZXIKKwkzMjNiICBQaGFzZXIgMzEzMAorCTMyM2MgIExhc2VyIFByaW50ZXIKKwkzMjNkICBQaGFzZXIgMzEyMAorCTMyM2UgIExhc2VyIFByaW50ZXIKKwkzMjQwICBMYXNlciBQcmludGVyCisJMzI0MiAgTGFzZXIgUHJpbnRlcgorCTMyNDggIENvbG9yIExhc2VyIFByaW50ZXIKKwkzMjRhICBMYXNlciBQcmludGVyCisJMzI0YyAgTUwtMTc0MCBQcmludGVyCisJMzI0ZCAgUGhhc2VyIDMxMjEKKwkzMjVmICBQaGFzZXIgMzQyNSBMYXNlciBQcmludGVyCisJMzI2MCAgQ0xQLTUxMCBDb2xvciBMYXNlciBQcmludGVyCisJMzI2OCAgTUwtMTYxMCBNb25vIExhc2VyIFByaW50ZXIKKwkzMjZjICBNTC0yMDEwUCBNb25vIExhc2VyIFByaW50ZXIKKwkzNDA5ICBTQ1gtNDIxNkYgU2Nhbm5lcgorCTM0MGMgIFNDWC01eDE1IFNlcmllcworCTM0MGQgIFNDWC02eDIwIFNlcmllcworCTM0MGUgIE1GUCA1NjAgU2VyaWVzCisJMzQwZiAgUHJpbnRpbmcgU3VwcG9ydAorCTM0MTIgIFNDWC00eDIwIFNlcmllcworCTM0MTMgIFNDWC00MTAwIFNjYW5uZXIKKwkzNDE1ICBDb21wb3NpdGUgRGV2aWNlCisJMzQxOSAgQ29tcG9zaXRlIERldmljZQorCTM0MWEgIFByaW50aW5nIFN1cHBvcnQKKwkzNDFiICBTQ1gtNDIwMCBTZXJpZXMKKwkzNDFjICBDb21wb3NpdGUgRGV2aWNlCisJMzQxZCAgQ29tcG9zaXRlIERldmljZQorCTM0MWYgIENvbXBvc2l0ZSBEZXZpY2UKKwkzNDIwICBDb21wb3NpdGUgRGV2aWNlCisJMzYwNSAgSW5rSmV0IENvbG9yIFByaW50ZXIKKwkzNjA2ICBJbmtKZXQgQ29sb3IgUHJpbnRlcgorCTM2MDkgIElua0pldCBDb2xvciBQcmludGVyCisJMzkwMiAgSW5rSmV0IENvbG9yIFByaW50ZXIKKwkzOTAzICBYZXJveCBXb3JrQ2VudHJlIFhLNTBjeAorCTM5MGYgIElua0pldCBDb2xvciBQcmludGVyCisJMzkxMSAgU0NYLTEwMjAgU2VyaWVzCisJNTAwMCAgWVAtTUYgU2VyaWVzCisJNTAwMSAgWVAtMTAwCisJNTAwMiAgWVAtMzAKKwk1MDAzICBZUC03MDAKKwk1MDA0ICBZUC0zMAorCTUwMDUgIFlQLTMwMAorCTUwMDYgIFlQLTc1MAorCTUwMGQgIE1QMyBQbGF5ZXIKKwk1MDEwICBNUDMgUGxheWVyCisJNTAxMSAgWVAtNzgwCisJNTAxMyAgWVAtNjAKKwk1MDE1ICB5ZXBwIHVwZ3JhZGUKKwk1MDFiICBNUDMgUGxheWVyCisJNTAzYiAgWVAtVTEgTVAzIFBsYXllcgorCTUwNTAgIFlQLVUyIE1QMyBQbGF5ZXIKKwk1MDdkICBZUC1VMyBNUDMgUGxheWVyCisJNTA4YiAgWVAtUzUgTVAzIFBsYXllcgorCTVhMDAgIFlQLU5FVQorCTVhMDEgIFlQLU5EVQorCTVhMDMgIFllcHAgTVAzIFBsYXllcgorCTVhMDQgIFlQLTgwMAorCTVhMDggIFlQLTkwCisJNWEwZiAgTVRQIERldmljZQorCTViMDEgIE1lbW9yeSBTdGljayBSZWFkZXIvV3JpdGVyCisJNWIwMiAgTWVtb3J5IFN0aWNrIFJlYWRlci9Xcml0ZXIKKwk1YjAzICBNZW1vcnkgU3RpY2sgUmVhZGVyL1dyaXRlcgorCTViMDQgIE1lbW9yeSBTdGljayBSZWFkZXIvV3JpdGVyCisJNWIwNSAgTWVtb3J5IFN0aWNrIFJlYWRlci9Xcml0ZXIKKwk1YjExICBTRVctMjAwMXUgQ2FyZAorCTVmMDAgIE5FWGlPIFN5bmMKKwk1ZjAxICBORVhpTyBTeW5jCisJNWYwMiAgTkVYaU8gU3luYworCTVmMDMgIE5FWGlPIFN5bmMKKwk1ZjA0ICBORVhpTyBTeW5jCisJNjYwMSAgWjEwMCBNb2JpbGUgUGhvbmUKKwk2NjExICBNSVRzIFN5bmMKKwk2NjEzICBNSVRzIFN5bmMKKwk2NjE1ICBNSVRzIFN5bmMKKwk2NjE3ICBNSVRzIFN5bmMKKwk2NjE5ICBNSVRzIFN5bmMKKwk2NjFiICBNSVRzIFN5bmMKKwk2NjFlICBIYW5kaGVsZAorCTY2MjAgIEhhbmRoZWxkCisJNjYyMiAgSGFuZGhlbGQKKwk2NjI0ICBIYW5kaGVsZAorCTY2MmUgIE1JVHMgU3luYworCTY2MzAgIE1JVHMgU3luYworCTY2MzIgIE1JVHMgU3luYworCTY2M2YgIFNHSC1FNzIwL1NHSC1FODQwCisJNjY0MCAgVXNiIE1vZGVtIEVudW1lcmF0b3IKKwk3MDExICBTRVctMjAwM1UgQ2FyZAorCTcwMjEgIEJsdWV0b290aCBEZXZpY2UKKwk3MDYxICBlSG9tZSBJbmZyYXJlZCBSZWNlaXZlcgorCTcwODEgIEh1bWFuIEludGVyZmFjZSBEZXZpY2UKKwk4MDAxICBIYW5kaGVsZAorCWUwMjAgIFNFUkkgRTAyIFNDT00gNjIwMCBVTVRTIFBob25lCisJZTAyMSAgU0VSSSBFMDIgU0NPTSA2MjAwIFZpcnR1YWwgVUFSVHMKKwllMDIyICBTRVJJIEUwMiBTQ09NIDYyMDAgRmxhc2ggTG9hZCBEaXNrCisJZmYzMCAgU0dfaU1PTgorMDRlOSAgUEMtVGVsLCBJbmMuCiswNGVhICBCcm9va3RyZWUgQ29ycC4KKzA0ZWIgIE5vcnRoc3RhciBTeXN0ZW1zLCBJbmMuCiswNGVjICBUb2t5byBFbGVjdHJvbiBEZXZpY2UsIEx0ZAorMDRlZCAgQW5uYWJvb2tzCiswNGVmICBQYWNpZmljIEVsZWN0cm9uaWMgSW50ZXJuYXRpb25hbCwgSW5jLgorMDRmMCAgRGFld29vIEVsZWN0cm9uaWNzIENvLiwgTHRkCiswNGYxICBWaWN0b3IgQ29tcGFueSBvZiBKYXBhbiwgTHRkCisJMDAwMSAgR0MtUVgzIERpZ2l0YWwgU3RpbGwgQ2FtZXJhCisJMDAwNCAgR1ItRFZMODE1VSBEaWdpdGFsIFZpZGVvIENhbWVyYQorCTAwMDYgIERWIENhbWVyYSBTdG9yYWdlCisJMDAwOCAgR1otTUczMEFBL01DNTAwRSBEaWdpdGFsIFZpZGVvIENhbWVyYQorCTAwMDkgIEdSLURYMjVFSyBEaWdpdGFsIFZpZGVvIENhbWVyYQorCTAwMGEgIEdSLUQ3MiBEaWdpdGFsIFZpZGVvIENhbWVyYQorCTMwMDggIE1QLVBSWDEgRXRoZXJuZXQKKzA0ZjIgIENoaWNvbnkgRWxlY3Ryb25pY3MgQ28uLCBMdGQKKwkwMDAxICBLVS04OTMzIEtleWJvYXJkCisJMDAwMiAgTlQ2OFA4MSBLZXlib2FyZAorCTAxMTAgIEtVLTI5NzEgS2V5Ym9hcmQKKwkwMTExICBLVS05OTA4IEtleWJvYXJkCisJMDExMiAgS1UtODkzMyBLZXlib2FyZCB3aXRoIFBTLzIgTW91c2UgcG9ydAorCTAxMTYgIEtVLTI5NzEgR2VybWFuIEtleWJvYXJkCisJMDQwMyAgS1UtMDQyMCBrZXlib2FyZAorCWEwMDEgIEUtVmlkZW8gREMtMTAwIENhbWVyYQorCWExMjAgIE9SSVRFIENDRCBXZWJjYW0oUEMzNzBSKQorCWExMjEgIE9SSVRFIENDRCBXZWJjYW0oUEMzNzBSKQorCWExMjIgIE9SSVRFIENDRCBXZWJjYW0oUEMzNzBSKQorCWExMjMgIE9SSVRFIENDRCBXZWJjYW0oUEMzNzBSKQorCWExMjQgIE9SSVRFIENDRCBXZWJjYW0oUEMzNzBSKQorCWExMzMgIEdhdGV3YXkgV2ViY2FtCisJYTIwNCAgRFNDIFdJQSBEZXZpY2UgKDEzMDApCisJYTIwOCAgRFNDIFdJQSBEZXZpY2UgKDIzMjApCisJYTIwOSAgTGFidGVjIERDLTIzMjAKKwlhMjBhICBEU0MgV0lBIERldmljZSAoMzMxMCkKKwlhMjBjICBEU0MgV0lBIERldmljZSAoMzMyMCkKKwlhMjEwICBBdWRpbyBEZXZpY2UKKwliMDA5ICBJbnRlZ3JhdGVkIENhbWVyYQorCWIwMTAgIEludGVncmF0ZWQgQ2FtZXJhCisJYjAxMiAgMS4zIE1QaXhlbCBVVkMgd2ViY2FtCisJYjAxOCAgVmlkZW8gRGV2aWNlCisJYjAyMiAgQ2FtZXJhCisJYjAyNSAgQ2FtZXJhCisJYjAyNyAgR2F0ZXdheSBXZWJjYW0KKwliMDI4ICBWR0EgVVZDIFdlYkNhbQorMDRmMyAgRWxhbiBNaWNyb2VsZWN0cm9uaWNzIENvcnAuCisJMDIxMCAgQU0tNDAwIEhhbWEgT3B0aWNhbCBNb3VzZQorMDRmNCAgSGFydGluZyBFbGVrdHJvbmlrLCBJbmMuCiswNGY1ICBGdWppdHN1LUlDTCBTeXN0ZW1zLCBJbmMuCiswNGY2ICBOb3JhbmQgQ29ycC4KKzA0ZjcgIE5ld25leCBUZWNobm9sb2d5IENvcnAuCiswNGY4ICBGdXR1cmVQbHVzIFN5c3RlbXMKKzA0ZjkgIEJyb3RoZXIgSW5kdXN0cmllcywgTHRkCisJMDAwMiAgSEwtMTA1MCBMYXNlciBQcmludGVyCisJMDAwNSAgUHJpbnRlcgorCTAwMDYgIEhMLTEyNDAgTGFzZXIgUHJpbnRlcgorCTAwMDcgIEhMLTEyNTAgTGFzZXIgUHJpbnRlcgorCTAwMDggIEhMLTEyNzAgTGFzZXIgUHJpbnRlcgorCTAwMDkgIFByaW50ZXIKKwkwMDBhICBQMjUwMCBTZXJpZXMKKwkwMDBiICBQcmludGVyCisJMDAwYyAgUHJpbnRlcgorCTAwMGQgIEhMLTE0NDAgTGFzZXIgUHJpbnRlcgorCTAwMGUgIEhMLTE0NTAgc2VyaWVzCisJMDAwZiAgSEwtMTQ3ME4gc2VyaWVzCisJMDAxMCAgUHJpbnRlcgorCTAwMTEgIFByaW50ZXIKKwkwMDEyICBQcmludGVyCisJMDAxMyAgUHJpbnRlcgorCTAwMTQgIFByaW50ZXIKKwkwMDE1ICBQcmludGVyCisJMDAxNiAgUHJpbnRlcgorCTAwMTcgIFByaW50ZXIKKwkwMDE4ICBQcmludGVyCisJMDAxYyAgUHJpbnRlcgorCTAwMWUgIFByaW50ZXIKKwkwMDIwICBITC01MTMwIHNlcmllcworCTAwMjEgIEhMLTUxNDAgc2VyaWVzCisJMDAyMiAgSEwtNTE1MEQgc2VyaWVzCisJMDAyMyAgSEwtNTE3MEROIHNlcmllcworCTAwMjQgIFByaW50ZXIKKwkwMDI1ICBQcmludGVyCisJMDAyNyAgSEwtMjAzMCBMYXNlciBQcmludGVyCisJMDAyOCAgUHJpbnRlcgorCTAwMjkgIFByaW50ZXIKKwkwMDJhICBQcmludGVyCisJMDAyYiAgUHJpbnRlcgorCTAwMmMgIFByaW50ZXIKKwkwMDJkICBQcmludGVyCisJMDEwMCAgTUZDODYwMC85NjUwIFNlcmllcworCTAxMDEgIE1GQzk2MDAvOTg3MCBTZXJpZXMKKwkwMTAyICBNRkM5NzUwLzEyMDAgU2VyaWVzCisJMDEwNCAgTUZDLTgzMDBKCisJMDEwNSAgTUZDLTk2MDBKCisJMDEwNiAgTUZDLTczMDBDCisJMDEwNyAgTUZDLTc0MDBDCisJMDEwOCAgTUZDLTkyMDBDCisJMDEwOSAgTUZDLTgzMAorCTAxMGEgIE1GQy04NDAKKwkwMTBiICBNRkMtODYwCisJMDEwYyAgTUZDLTc0MDBKCisJMDEwZCAgTUZDLTkyMDBKCisJMDEwZSAgTUZDMzEwMEMgU2Nhbm5lcgorCTAxMGYgIE1GQyA1MTAwQworCTAxMTAgIE1GQzQ4MDAgU2Nhbm5lcgorCTAxMTEgIE1GQyA2ODAwCisJMDExMiAgRENQMTAwMCBQb3J0KEZheE1vZGVtKQorCTAxMTMgIE1GQy04NTAwCisJMDExNCAgTUZDOTcwMCBQb3J0KEZheE1vZGVtKQorCTAxMTUgIE1GQzk4MDAgU2Nhbm5lcgorCTAxMTYgIERDUDE0MDAgU2Nhbm5lcgorCTAxMTkgIE1GQy05NjYwCisJMDExYiAgTUZDLTk4ODAKKwkwMTFjICBNRkMtOTc2MAorCTAxMWQgIE1GQy05MDcwCisJMDExZSAgTUZDLTkxODAKKwkwMTFmICBNRkMtOTE2MAorCTAxMjAgIE1GQzU4MCBQb3J0KEZheE1vZGVtKQorCTAxMjEgIE1GQy01OTAKKwkwMTIyICBNRkMtNTEwMEoKKwkwMTI5ICBJbWFnaXN0aWNzIDI1MDAgKE1GQy04NjQwRCBjbG9uZSkKKwkwMTJmICBGQVgtNDc1MGUKKwkwMTMyICBNRkMtNTIwMEMgUmVtb3ZhYmxlRGlzaworCTAxMzUgIE1GQy0xMDAgU2Nhbm5lcgorCTAxMzYgIE1GQy0xNTBDTCBTY2FubmVyCisJMDEzYyAgTUZDLTg5MCBQb3J0CisJMDEzZCAgTUZDLTUyMDBKIFByaW50ZXIKKwkwMTNlICBNRkMtNDQyMEMgUmVtb3ZhYmxlRGlzaworCTAxM2YgIE1GQy00ODIwQyBSZW1vdmFibGVEaXNrCisJMDE0MCAgRENQLTgwMjAKKwkwMTQxICBEQ1AtODAyNUQKKwkwMTQyICBNRkMtODQyMAorCTAxNDMgIE1GQy04ODIwRAorCTAxNDQgIERDUC00MDIwQyBSZW1vdmFibGVEaXNrCisJMDE0NiAgTUZDLTMyMjBDCisJMDE0NyAgRkFYLTE4MjBDIFByaW50ZXIKKwkwMTQ4ICBNRkMtMzMyMENOIFByaW50ZXIKKwkwMTQ5ICBGQVgtMTkyMENOIFByaW50ZXIKKwkwMTRhICBNRkMtMzQyMEMKKwkwMTRiICBNRkMtMzgyMENOCisJMDE0ZCAgRkFYLTE4MTVDIFByaW50ZXIKKwkwMTRlICBNRkMtODgyMEoKKwkwMTUwICBNRkMtODIyMCBQb3J0KEZheE1vZGVtKQorCTAxNTEgIE1GQy04MjEwSgorCTAxNTcgIE1GQy0zNDIwSiBQcmludGVyCisJMDE1OCAgTUZDLTM4MjBKTiBQb3J0KEZheE1vZGVtKQorCTAxNWQgIE1GQyBDb21wb3NpdGUgRGV2aWNlCisJMDE1ZSAgRENQLTgwNDVECisJMDE1ZiAgTUZDLTg0NDAKKwkwMTYwICBNRkMtODg0MEQKKwkwMTYxICBNRkMtMjEwQworCTAxNjIgIE1GQy00MjBDTiBSZW1vdGUgU2V0dXAgUG9ydAorCTAxNjMgIE1GQy00MTBDTiBSZW1vdmFibGVEaXNrCisJMDE2NSAgTUZDLTYyMENOCisJMDE2NiAgTUZDLTYxMENMTiBSZW1vdmFibGVEaXNrCisJMDE2OCAgTUZDLTYyMENMTgorCTAxNjkgIERDUC0xMTBDIFJlbW92YWJsZURpc2sKKwkwMTZiICBEQ1AtMzEwQ04gUmVtb3ZhYmxlRGlzaworCTAxNmMgIEZBWC0yNDQwQyBQcmludGVyCisJMDE2ZCAgTUZDLTU0NDBDTgorCTAxNmUgIE1GQy01ODQwQ04gUmVtb3RlIFNldHVwIFBvcnQKKwkwMTcwICBGQVgtMTg0MEMgUHJpbnRlcgorCTAxNzEgIEZBWC0xODM1QyBQcmludGVyCisJMDE3MiAgRkFYLTE5NDBDTiBQcmludGVyCisJMDE3MyAgTUZDLTMyNDBDIFJlbW90ZSBTZXR1cCBQb3J0CisJMDE3NCAgTUZDLTMzNDBDTiBSZW1vdmFibGVEaXNrCisJMDE3YiAgSW1hZ2lzdGljcyBzeDIxMDAKKwkwMTgwICBNRkMtNzQyMAorCTAxODEgIE1GQy03ODIwTiBQb3J0KEZheE1vZGVtKQorCTAxODIgIENvbXBvc2l0ZSBEZXZpY2UKKwkwMTgzICBEQ1AtNzAyMAorCTAxODQgIERDUC03MDI1IFByaW50ZXIKKwkwMTg1ICBNRkMtNzIyMCBQcmludGVyCisJMDE4NiAgQ29tcG9zaXRlIERldmljZQorCTAxODcgIEZBWC0yODIwIFByaW50ZXIKKwkwMTg4ICBGQVgtMjkyMCBQcmludGVyCisJMDE4YSAgTUZDLTk0MjBDTgorCTAxOGMgIERDUC0xMTVDCisJMDE4ZCAgRENQLTExNkMKKwkwMThlICBEQ1AtMTE3QworCTAxOGYgIERDUC0xMThDCisJMDE5MCAgRENQLTEyMEMKKwkwMTkxICBEQ1AtMzE1Q04KKwkwMTkyICBEQ1AtMzQwQ1cKKwkwMTkzICBNRkMtMjE1QworCTAxOTQgIE1GQy00MjVDTgorCTAxOTUgIE1GQy04MjBDVyBSZW1vdGUgU2V0dXAgUG9ydAorCTAxOTYgIE1GQy04MjBDTiBSZW1vdGUgU2V0dXAgUG9ydAorCTAxOTcgIE1GQy02NDBDVworCTAxOWEgIE1GQy04NDBDTE4gUmVtb3RlIFNldHVwIFBvcnQKKwkwMWEyICBNRkMtODY0MEQKKwkwMWEzICBDb21wb3NpdGUgRGV2aWNlCisJMDFhNCAgRENQLTgwNjVETiBQcmludGVyCisJMDFhNSAgTUZDLTg0NjBOIFBvcnQoRmF4TW9kZW0pCisJMDFhNiAgTUZDLTg4NjBETiBQb3J0KEZheE1vZGVtKQorCTAxYTcgIE1GQy04ODcwRFcgUHJpbnRlcgorCTAxYTggIERDUC0xMzBDCisJMDFhOSAgRENQLTMzMEMKKwkwMWFhICBEQ1AtNTQwQ04KKwkwMWFiICBNRkMtMjQwQworCTAxYWUgIERDUC03NTBDVyBSZW1vdmFibGVEaXNrCisJMDFhZiAgTUZDLTQ0MENOCisJMDFiMCAgTUZDLTY2MENOCisJMDFiMSAgTUZDLTY2NUNXIFJlbW90ZSBTZXR1cCBQb3J0CisJMDFiMiAgTUZDLTg0NUNXIFJlbW90ZSBTZXR1cCBQb3J0CisJMDFiNCAgTUZDLTQ2MENOIFJlbW90ZSBTZXR1cCBQb3J0CisJMDFiNSAgTUZDLTYzMENECisJMDFiNiAgTUZDLTg1MENETgorCTAxYjcgIE1GQy01NDYwQ04gUmVtb3RlIFNldHVwIFBvcnQKKwkwMWI4ICBNRkMtNTg2MENOCisJMDFiYSAgTUZDLTMzNjBDCisJMDFiZCAgTUZDLTg2NjBETgorCTAxYmUgIERDUC03NTBDTiBSZW1vdmFibGVEaXNrCisJMDFiZiAgTUZDLTg2MENETiBSZW1vdGUgU2V0dXAgUG9ydAorCTAxYzAgIERDUC0xMjhDCisJMDFjMSAgRENQLTEyOUMKKwkwMWMyICBEQ1AtMTMxQworCTAxYzMgIERDUC0zMjlDCisJMDFjNCAgRENQLTMzMUMKKwkwMWM1ICBNRkMtMjM5QworCTAxY2EgIE1GQy05NDQwQ04gUmVtb3RlIFNldHVwIFBvcnQKKwkwMWNlICBEQ1AtMTM1QworCTAxY2YgIERDUC0xNTBDCisJMDFkMCAgRENQLTM1MEMKKwkwMWQxICBEQ1AtNTYwQ04KKwkwMWQ0ICBNRkMtMjMwQworCTAxZDUgIE1GQy0yMzVDCisJMDFkNiAgTUZDLTI2MEMKKwkwMWRmICBEQ1AtMTU1QworCTAxZTAgIE1GQy0yNjVDCisJMDFlMSAgRENQLTE1M0MKKwkwMWUyICBEQ1AtMTU3QworCTAxZTMgIERDUC0zNTNDCisJMDFlNCAgRENQLTM1N0MKKwkxMDAwICBQcmludGVyCisJMTAwMiAgUHJpbnRlcgorCTIwMDIgIFBUVVNCIFByaW50aW5nCisJMjAwNCAgUFQtMjMwMC8yMzEwIHAtVG91Y2ggTGFiZXIgUHJpbnRlcgorCTIwMTUgIFFMLTUwMCBQLXRvdWNoIGxhYmVsIHByaW50ZXIKKwkyMTAwICBDYXJkIFJlYWRlciBXcml0ZXIKKzA0ZmEgIERhbGxhcyBTZW1pY29uZHVjdG9yCisJMjQ5MCAgRFMxNDkwRiAyLWluLTEgRm9iLCAxLVdpcmUgYWRhcHRlcgorCTQyMDEgIERTNDIwMSBBdWRpbyBEQUMKKzA0ZmIgIEJpb3N0YXIgTWljcm90ZWNoIEludGVybmF0aW9uYWwgQ29ycC4KKzA0ZmMgIFN1bnBsdXMgVGVjaG5vbG9neSBDby4sIEx0ZAorCTAwMDMgIENNMTA5MiBPcHRpY2FsIFNjcm9sbGVyIE1vdXNlCisJMDAxMyAgVmlld01hdGUgRGVza3RvcCBNb3VzZSBDQzIyMDEKKwkwMDE1ICBWaWV3TWF0ZSBEZXNrdG9wIE1vdXNlIENDMjIwMQorCTAyMzIgIEZpbmdlcnByaW50CisJMDU2MSAgRmxleGNhbSAxMDAKKwkxNTMzICBNYXNzIFN0b3JhZ2UKKwk1MDRhICBTUENBNTA0YSBEaWdpdGFsIENhbWVyYQorCTUwNGIgIEFpcHRlaywgMS4zIG1lZ2EgUG9ja2VyQ2FtCisJNTMzMCAgRGlnaXRyZXggMjExMAorCTUzMzEgIFZpdml0YXIgVml2aWNhbSAxMAorCTU3MjAgIENhcmQgUmVhZGVyIERyaXZlcgorCTczMzMgIEZpbmV0IFRlY2hub2xvZ3kgUGFsbXBpeCBEQy04NQorCTc1N2EgIEFpcHRlaywgTVAzMTUgTVAzIFBsYXllcgorCWZmZmYgIFB1cmVEaWdpdGFsIFJpdHogRGlzcG9zYWJsZQorMDRmZCAgU29saXRvbiBTeXN0ZW1zLCBLLksuCisJMDAwMyAgU21hcnQgQ2FyZCBSZWFkZXIgSUkKKzA0ZmUgIFBGVSwgTHRkCiswNGZmICBFLUNNT1MgQ29ycC4KKzA1MDAgIFNpYW0gVW5pdGVkIEhpLVRlY2gKKwkwMDAxICBEQVJUIEtleWJvYXJkIE1vdXNlCisJMDAwMiAgREFSVC0yIEtleWJvYXJkCiswNTAxICBGdWppa3VyYSBEREssIEx0ZAorMDUwMiAgQWNlciwgSW5jLgorCTAwMDEgIEhhbmRoZWxkCisJMDczNiAgSGFuZGhlbGQKKwkxNWIxICBQREEgbjMxMQorCTE2MzEgIGMxMCBTZXJpZXMKKwkxNjMyICBjMjAgU2VyaWVzCisJMTZlMSAgbjEwIEhhbmRoZWxkIFN5bmMKKwkxNmUyICBuMjAgUG9ja2V0IFBDIFN5bmMKKwkxNmUzICBuMzAgSGFuZGhlbGQgU3luYworCWQwMDEgIERpdmlvIE5XODAxL0RWQy1WNisgRGlnaXRhbCBDYW1lcmEKKzA1MDMgIEhpdGFjaGkgQW1lcmljYSwgTHRkCiswNTA0ICBIYXllcyBNaWNyb2NvbXB1dGVyIFByb2R1Y3RzCiswNTA2ICAzQ29tIENvcnAuCisJMDA5ZCAgSG9tZUNvbm5lY3QgQ2FtZXJhCisJMDBhMCAgM0NSRUI5NiBCbHVldG9vdGggQWRhcHRlcgorCTAwYTEgIEJsdWV0b290aCBEZXZpY2UKKwkwMGEyICBCbHVldG9vdGggRGV2aWNlCisJMDBkZiAgM0NvbSBIb21lIENvbm5lY3QgbGl0ZQorCTAxMDAgIEhvbWVDb25uZWN0IEFEU0wgTW9kZW0gRHJpdmVyCisJMDNlOCAgM0MxOTI1MCBFdGhlcm5ldCBba2xzaV0KKwkwYTAxICAzQ1JTSEVXNjk2IFdpcmVsZXNzIEFkYXB0ZXIKKwkwYTExICAzQ1JXRTI1NEc3MiA4MDIuMTFnIEFkYXB0ZXIKKwkxMWY4ICBIb21lQ29ubmVjdCAzQzQ2MAorCTI5MjIgIEhvbWVDb25uZWN0IENhYmxlIE1vZGVtIEV4dGVybmFsIHdpdGgKKwkzMDIxICBVLlMuUm9ib3RpY3MgNTYwMDAgVm9pY2UgRmF4TW9kZW0gUHJvCisJNDYwMSAgM0M0NjBCIDEwLzEwMCBFdGhlcm5ldCBBZGFwdGVyCisJZjAwMiAgM0NQNDIxOCBBRFNMIE1vZGVtIChwcmUtaW5pdCkKKwlmMDAzICAzQ1A0MjE4IEFEU0wgTW9kZW0KKwlmMTAwICAzQ1A0MjE4IEFEU0wgTW9kZW0gKHByZS1pbml0KQorMDUwNyAgSG9zaWRlbiBDb3JwLgorCTAwMTEgIEtvbmFtaSBQYXJhUGFyYVBhcmFkaXNlIENvbnRyb2xsZXIKKzA1MDggIENsYXJpb24gQ28uLCBMdGQKKzA1MDkgIEF6dGVjaCBTeXN0ZW1zLCBMdGQKKwkwODAxICBBRFNMIE1vZGVtCisJMDgwMiAgQURTTCBNb2RlbSAoUkZDMTQ4MykKKwkwODA2ICBEU0wgTW9kZW0KKwkwODBmICBCaW5hdG9uZSBBRFNMNTAwIE1vZGVtIE5ldHdvcmsgSW50ZXJmYWNlCisJMDgxMiAgUGlyZWxsaSBBRFNMIE1vZGVtIE5ldHdvcmsgSW50ZXJmYWNlCiswNTBhICBDaW5jaCBDb25uZWN0b3JzCiswNTBiICBDYWJsZSBTeXN0ZW0gSW50ZXJuYXRpb25hbAorMDUwYyAgSW5ub01lZGlhLCBJbmMuCiswNTBkICBCZWxraW4gQ29tcG9uZW50cworCTAwMDQgIERpcmVjdCBDb25uZWN0CisJMDAxMiAgRjhUMDEyIEJsdWV0b290aCBBZGFwdGVyCisJMDAxMyAgRjhUMDEzIEJsdWV0b290aCBBZGFwdGVyCisJMDA1MCAgRjVENjA1MCA4MDIuMTFiIFdpcmVsZXNzIEFkYXB0ZXIKKwkwMDgxICBGOFQwMDF2MiBCbHVldG9vdGgKKwkwMDgzICBCbHVldG9vdGggRGV2aWNlCisJMDA4NCAgRjhUMDAzdjIgQmx1ZXRvb3RoCisJMDEwMiAgRmxpcCBLVk0KKwkwMTAzICBGNVUxMDMgU2VyaWFsIEFkYXB0ZXIgW2V0ZWtdCisJMDEwNiAgVmlkZW9CdXMgSUkgQWRhcHRlciwgVmlkZW8KKwkwMTA4ICBGMURFMTA4QiBLVk0KKwkwMTA5ICBGNVUxMDkvRjVVNDA5IFBEQSBBZGFwdGVyCisJMDExNSAgU0NTSSBBZGFwdGVyCisJMDExOSAgRjVVMTIwLVBDIER1YWwgUFMvMiBQb3J0cworCTAxMjEgIEY1RDUwNTAgMTAwTWJwcyBFdGhlcm5ldAorCTAxMjIgIEV0aGVybmV0IEFkYXB0ZXIKKwkwMTMxICBCbHVldG9vdGggRGV2aWNlIHdpdGggdHJhY2UgZmlsdGVyCisJMDIwMSAgUGVyaXBoZXJhbCBTd2l0Y2gKKwkwMjA4ICBVU0JWaWV3IElJIFZpZGVvIEFkYXB0ZXIgW250MTAwNF0KKwkwMjEwICBGNVUyMjggSGktU3BlZWQgVVNCIDIuMCBEVkQgQ3JlYXRvcgorCTAyMTEgIEY1VTIxMSBVU0IgMi4wIDE1LWluLTEgTWVkaWEgUmVhZGVyICYgV3JpdGVyCisJMDIyNCAgRjVVMjI0IFVTQiAyLjAgNC1Qb3J0IEh1YgorCTAyMzQgIEY1VTIzNCBVU0IgMi4wIDQtUG9ydCBIdWIKKwkwMjM3ICBGNVUyMzcgVVNCIDIuMCA3LVBvcnQgSHViCisJMDI0MCAgRjVVMjQwIFVTQiAyLjAgQ0YgQ2FyZCBSZWFkZXIKKwkwMjU3ICBGNVUyNTcgU2VyaWFsCisJMDQwOSAgRjVVNDA5IFNlcmlhbAorCTA1NTEgIEY2QzU1MC1BVlIgVVBTCisJMDgwMiAgTm9zdHJvbW8gbjQwIEdhbWVwYWQKKwkwODAzICBOb3N0cm9tbyAxNzQ1IEdhbWVQYWQKKwkwODA1ICBOb3N0cm9tbyBONTAgR2FtZVBhZAorCTA4MTUgIE5vc3Ryb21vIG41MiBISUQgU3BlZWRQYWQgTW91c2UgV2hlZWwKKwkwODI2ICBFcmdvRml0IFdpcmVsZXNzIE9wdGljYWwgTW91c2UgKEhJRCkKKwkwOTgwICBISUQgVVBTIEJhdHRlcnkKKwkxMjAyICBGNVUxMjAtUEMgUGFyYWxsZWwgUHJpbnRlciBQb3J0CisJMTIwMyAgRjVVMTIwLVBDIFNlcmlhbCBQb3J0CisJMjU4YSAgRjVVMjU4IEhvc3QgdG8gSG9zdCBjYWJsZQorCTMxMDEgIEYxREYxMDJVL0YxREcxMDJVIEZsaXAgSHViCisJMzIwMSAgRjFERjEwMlUvRjFERzEwMlUgRmxpcCBLVk0KKwk0MDUwICBaRDEyMTFCCisJNTA1NSAgRjVENTA1NQorCTYwNTEgIDExTWJwcyBXaXJlbGVzcyBOZXR3b3JrIEFkYXB0ZXIKKwk3MDUwICBGNUQ3MDUwIHZlciAxMDAwIFdpRmkKKwk3MDUxICBGNUQ3MDUxIDU0ZyBVU0IgTmV0d29yayBBZGFwdGVyCisJNzA1YSAgRjVENzA1MEEgV2lyZWxlc3MgQWRhcHRlcgorCTcwNWIgIFdpcmVsZXNzIEcgQWRhcHRlcgorCTcwNWMgIEY1RDcwNTAgdjQwMDAgV2lyZWxlc3MgQWRhcHRlcgorCTkwNWIgIEY1RDkwNTAgdmVyIDMgV2lyZWxlc3MgQWRhcHRlcgorCTkwNWMgIFdpcmVsZXNzIEcgUGx1cyBNSU1PIE5ldHdvcmsgQWRhcHRlcgorMDUwZSAgTmVvbiBUZWNobm9sb2d5LCBJbmMuCiswNTBmICBLQyBUZWNobm9sb2d5LCBJbmMuCisJMDAwMSAgSHViCisJMDAwMyAgS0M4MkMxNjBTIEh1YgorCTAxODAgIEtDLTE4MCBJckRBIERvbmdsZQorCTAxOTAgIEtDMjE5MCBVU0IgSG9zdC10by1Ib3N0IGNhYmxlCiswNTEwICBTZWppbiBFbGVjdHJvbiwgSW5jLgorCTAwMDEgIEtleWJvYXJkCisJMTAwMCAgS2V5Ym9hcmQgd2l0aCBQUy8yIE1vdXNlIFBvcnQKKwllMDAxICBNb3VzZQorMDUxMSAgTidBYmxlIChEYXRhQm9vaykgVGVjaG5vbG9naWVzLCBJbmMuCiswNTEyICBIdWFsb24gTWljcm9lbGVjdHJvbmljcyBDb3JwLgorMDUxMyAgZGlnaXRhbC1YLCBJbmMuCiswNTE0ICBGQ0kgRWxlY3Ryb25pY3MKKzA1MTUgIEFDVEMKKzA1MTYgIExvbmd3ZWxsIEVsZWN0cm9uaWNzCiswNTE3ICBCdXR0ZXJmbHkgQ29tbXVuaWNhdGlvbnMKKzA1MTggIEV6S0VZIENvcnAuCisJMDAwMSAgVVNCIHRvIFBTMiBBZGFwdG9yIHYxLjA5CisJMDAwMiAgRVotOTkwMEMgS2V5Ym9hcmQKKzA1MTkgIFN0YXIgTWljcm9uaWNzIENvLiwgTHRkCisJYzAwMiAgWGxpdmUgQmx1ZXRvb3RoIFhCTS0xMDBTIE1QMyBQbGF5ZXIKKzA1MWEgIFdZU0UgVGVjaG5vbG9neQorCWEwMDUgIFNtYXJ0IERpc3BsYXkgVmVyc2lvbiA5OTczCiswNTFiICBTaWxpY29uIEdyYXBoaWNzCiswNTFjICBTaHV0dGxlLCBJbmMuCisJYzAwMSAgZUhvbWUgSW5mcmFyZWQgUmVjZWl2ZXIKKwljMDAyICBlSG9tZSBJbmZyYXJlZCBSZWNlaXZlcgorMDUxZCAgQW1lcmljYW4gUG93ZXIgQ29udmVyc2lvbgorCTAwMDEgIFVQUworCTAwMDIgIFVuaW50ZXJydXB0aWJsZSBQb3dlciBTdXBwbHkKKwkwMDAzICBVUFMKKzA1MWUgIFNjaWVudGlmaWMgQXRsYW50YSwgSW5jLgorMDUxZiAgSU8gU3lzdGVtcyAoRWxpdGUgRWxlY3Ryb25pY3MpLCBJbmMuCiswNTIwICBUYWl3YW4gU2VtaWNvbmR1Y3RvciBNYW51ZmFjdHVyaW5nIENvLgorMDUyMSAgQWlyYm9ybiBDb25uZWN0b3JzCiswNTIyICBBZHZhbmNlZCBDb25uZWN0ZWssIEluYy4KKzA1MjMgIEFURU4gR21iSAorMDUyNCAgU29sYSBFbGVjdHJvbmljcworMDUyNSAgTmV0Y2hpcCBUZWNobm9sb2d5LCBJbmMuCisJMTAwZCAgUkZNRCBCbHVldG9vdGggRGV2aWNlCisJMTA4MCAgTkVUMTA4MCBVU0ItVVNCIEJyaWRnZQorCWExNDAgIFVTQiBDbGlrISA0MAorCWExNDEgIChPTUUpIFBvY2tldFppcCA0MCBNUDMgUGxheWVyIERyaXZlcgorCWEyMjAgIEdWQyBCbHVldG9vdGggV2lyZWxlc3MgQWRhcHRlcgorCWE0YTAgIExpbnV4LVVTQiAiR2FkZ2V0IFplcm8iCisJYTRhMSAgTGludXgtVVNCIEV0aGVybmV0IEdhZGdldAorCWE0YTIgIExpbnV4LVVTQiBFdGhlcm5ldC9STkRJUyBHYWRnZXQKKwlhNGEzICBMaW51eC1VU0IgdXNlci1tb2RlIGlzb2Nocm9ub3VzIHNvdXJjZS9zaW5rCisJYTRhNCAgTGludXgtVVNCIHVzZXItbW9kZSBidWxrIHNvdXJjZS9zaW5rCisJYTRhNSAgTGludXgtVVNCIEZpbGUgU3RvcmFnZSBHYWRnZXQKKwlhNGE2ICBMaW51eC1VU0IgU2VyaWFsIEdhZGdldAorCWE0YTcgIExpbnV4LVVTQiBTZXJpYWwgR2FkZ2V0IChDREMgQUNNIG1vZGUpCisJYTRhOCAgTGludXgtVVNCIFByaW50ZXIgR2FkZ2V0CiswNTI2ICBUZW1pYyBNSFMgUy5BLgorMDUyNyAgQUxUUkEKKzA1MjggIEFUSSBUZWNobm9sb2dpZXMsIEluYy4KKwk3NTYxICBUViBXb25kZXIKKwk3NTYyICBUViBXb25kZXIsIEVkaXRpb24gKEZONSkKKwk3NTYzICBUViBXb25kZXIsIEVkaXRpb24gKEZJKQorCTc1NjQgIFRWIFdvbmRlciwgRWRpdGlvbiAoRlEpCisJNzU2NSAgVFYgV29uZGVyLCBFZGl0aW9uIChOVFNDKykKKwk3NTY2ICBUViBXb25kZXIsIEVkaXRpb24gKEZONSkKKwk3NTY3ICBUViBXb25kZXIsIEVkaXRpb24gKEZJKQorCTc1NjggIFRWIFdvbmRlciwgRWRpdGlvbiAoRlEpCisJNzU2OSAgTGl2ZSEgUHJvIChBKQorCTc1NmEgIExpdmUhIFBybyBBdWRpbyAoTykKKzA1MjkgIEFsYWRkaW4gS25vd2xlZGdlIFN5c3RlbXMKKwkwMDAxICBIQVNQIHYwLjA2CisJMDMwYiAgZVRva2VuIFIxIHYzLjEuMy54CisJMDMxMyAgZVRva2VuIFIxIHYzLjIuMy54CisJMDMxYiAgZVRva2VuIFIxIHYzLjMuMy54CisJMDMyMyAgZVRva2VuIFIxIHYzLjQuMy54CisJMDQxMiAgZVRva2VuIFIyIHYyLjIuNC54CisJMDQxYSAgZVRva2VuIFIyIHYyLjIuNC54CisJMDQyMiAgZVRva2VuIFIyIHYyLjQuNC54CisJMDQyYSAgZVRva2VuIFIyIHYyLjUuNC54CisJMDUwYyAgZVRva2VuIFBybyB2NC4xLjUueAorCTA1MTQgIGVUb2tlbiBQcm8gdjQuMi41LjQKKwkwNjAwICBlVG9rZW4gUHJvIDY0ayAoNC4yKQorMDUyYSAgQ3Jlc2NlbnQgSGVhcnQgU29mdHdhcmUKKzA1MmIgIFRla29tIFRlY2hub2xvZ2llcywgSW5jLgorCTAxMDIgIENhNTA4QSBIUDEwMjAgQ2FtZXJhIHYuMS4zLjEuNgorCTA4MDEgIFlha3VtbyBNZWdhSW1hZ2UgMzcKKwkxNTEyICBZYWt1bW8gTWVnYUltYWdlIElWCisJMTUxMyAgQW9zdGEgQ1gxMDAgV2ViQ2FtCisJMTUxNCAgQW9zdGEgQ1gxMDAgV2ViQ2FtIFN0b3JhZ2UKKwkxOTA1ICBZYWt1bW8gTWVnYUltYWdlIDQ3CisJMTkxMSAgWWFrdW1vIE1lZ2FJbWFnZSA0NyBTTAorCTIyMDIgIFdETSBTdGlsbCBJbWFnZSBDYXB0dXJlCisJMjIwMyAgU291bmQgVmlzaW9uIFN0cmVhbSBEcml2ZXIKKwkzYTA2ICBEaWdpTGlmZSBERFYtNTEyMEEKKwlkMDAxICBQMzVVIENhbWVyYSBDYXB0dXJlCiswNTJjICBDYW5vbiBJbmZvcm1hdGlvbiBTeXN0ZW1zLCBJbmMuCiswNTJkICBBdmlkIEVsZWN0cm9uaWNzIENvcnAuCiswNTJlICBTdGFuZGFyZCBNaWNyb3N5c3RlbXMgQ29ycC4KKzA1MmYgIFVuaWNvcmUgU29mdHdhcmUsIEluYy4KKzA1MzAgIEFtZXJpY2FuIE1pY3Jvc3lzdGVtcywgSW5jLgorMDUzMSAgV2Fjb20gVGVjaG5vbG9neSBDb3JwLgorMDUzMiAgU3lzdGVjaCBDb3JwLgorMDUzMyAgQWxjYXRlbCBNb2JpbGUgUGhvbmVzCiswNTM0ICBNb3Rvcm9sYSwgSW5jLgorMDUzNSAgTElIIFRaVSBFbGVjdHJpYyBDby4sIEx0ZAorMDUzNiAgSGFuZCBIZWxkIFByb2R1Y3RzIChXZWxjaCBBbGx5biwgSW5jLikKKwkwMWEwICBQRFQKKzA1MzcgIEludmVudGVjIENvcnAuCiswNTM4ICBDYWxkZXJhIEludGVybmF0aW9uYWwsIEluYy4gKFNDTykKKzA1MzkgIFNoeWggU2hpdW4gVGVybWluYWxzIENvLiwgTHRkCiswNTNhICBQcmVoIFdlcmtlIEdtYkggJiBDby4gS0cKKzA1M2IgIEdsb2JhbCBWaWxsYWdlIENvbW11bmljYXRpb24KKzA1M2MgIEluc3RpdHV0IG9mIE1pY3JvZWxlY3Ryb25pYyAmIE1lY2hhdHJvbmljIFN5c3RlbXMKKzA1M2QgIFNpbGljb24gQXJjaGl0ZWN0CiswNTNlICBNb2JpbGl0eSBFbGVjdHJvbmljcworMDUzZiAgU3lub3BzeXMsIEluYy4KKzA1NDAgIFVuaUFjY2VzcyBBQgorCTAxMDEgIFBhbmFjaGUgU3VyZiBJU0ROIFRBCiswNTQxICBTaXJmIFRlY2hub2xvZ3ksIEluYy4KKzA1NDMgIFZpZXdTb25pYyBDb3JwLgorCTAwZmUgIEc3NzMgTW9uaXRvciBIdWIKKwkwMGZmICBQODE1IE1vbml0b3IgSHViCisJMGJmMiAgYWlycGFuZWwgVjE1MCBXaXJlbGVzcyBTbWFydCBEaXNwbGF5CisJMGJmMyAgYWlycGFuZWwgVjExMCBXaXJlbGVzcyBTbWFydCBEaXNwbGF5CisJMGVkOSAgQ29sb3IgUG9ja2V0IFBDIFYzNQorCTBmMDEgIGFpcnN5bmMgV2ktRmkgV2lyZWxlc3MgQWRhcHRlcgorCTE1MjcgIENvbG9yIFBvY2tldCBQQyBWMzYKKwkxNTI5ICBDb2xvciBQb2NrZXQgUEMgVjM3CisJMTUyYiAgQ29sb3IgUG9ja2V0IFBDIFYzOAorCTE1MmUgIFBvY2tldCBQQworCTE5MjEgIENvbW11bmljYXRvciBQb2NrZXQgUEMKKwkxOTIyICBTbWFydHBob25lCisJMTkyMyAgUG9ja2V0IFBDIFYzMAorCTFhMTEgIFdpcmVsZXNzIDgwMi4xMWcgQWRhcHRlcgorCTFlNjAgIFRBMzEwIC0gQVRTQy9OVFNDL1BBTCBEcml2ZXIoUENNNCkKKwk0MTUzICBWaWV3U29uaWMgRzc3MyBDb250cm9sICg/KQorMDU0NCAgQ3Jpc3RpZSBFbGVjdHJvbmljcywgTHRkCiswNTQ1ICBYaXJsaW5rLCBJbmMuCisJNzMzMyAgVHJ1dGlvbiBXZWIgQ2FtZXJhCisJODAwMiAgSUJNIE5ldENhbWVyYQorCTgwMDkgIFZlbyBQQyBDYW1lcmEKKwk4MDBjICBWZW8gU3RpbmdSYXkKKwk4MDBkICBWZW8gUEMgQ2FtZXJhCisJODA4MCAgSUJNIEMtSXQgV2ViQ2FtCisJODA4YSAgVmVvIFBDIENhbWVyYQorCTgwOGIgIFZlbyBQQyBDYW1lcmEKKwk4MDhkICBWZW8gUEMgQ2FtZXJhCisJODEwYSAgVmVvIEFkdmFuY2VkIENvbm5lY3QgV2ViQ2FtCisJODEwYiAgVmVvIFBDIENhbWVyYQorCTgxMGMgIFZlbyBQQyBDYW1lcmEKKwk4MTM1ICBWZW8gTW9iaWxlL0FkdmFuY2VkIFdlYiBDYW1lcmEKKwk4MTNhICBWZW8gUEMgQ2FtZXJhCisJODEzYiAgVmVvIFBDIENhbWVyYQorCTgxM2MgIFZlbyBNb2JpbGUvQWR2YW5jZWQgV2ViIENhbWVyYQorCTgzMzMgIFZlbyBTdGluZ3JheS9Db25uZWN0IFdlYiBDYW1lcmEKKwk4ODhjICBlVmlzaW9uIDEyMyBkaWdpdGFsIGNhbWVyYQorCTg4OGQgIGVWaXNpb24gMTIzIGRpZ2l0YWwgY2FtZXJhCiswNTQ2ICBQb2xhcm9pZCBDb3JwLgorCTBkYWYgIFBEQyAyMzAwWgorCTFiZWQgIFBEQyAxMzIwIENhbWVyYQorCTMwOTcgIFBEQyAzMTAKKwkzMTg3ICBEaWdpdGFsIENhbQorCWRjY2YgIFNvdW5kIFZpc2lvbiBTdHJlYW0gRHJpdmVyCiswNTQ3ICBBbmNob3IgQ2hpcHMsIEluYy4KKwkwMDAxICBJQ1NJIEJsdWV0b290aCBEZXZpY2UKKwkxMDAyICBQeXRob24yIFdETSBFbmNvZGVyCisJMjEzMSAgQU4yMTMxIEVaVVNCIE1pY3JvY29udHJvbGxlcgorCTIyMzUgIEFOMjIzNSBFWlVTQi1GWCBNaWNyb2NvbnRyb2xsZXIKKwkyNzEwICBFWi1MaW5rIExvYWRlciAoRVpMTktMRFIuU1lTKQorCTI3MjAgIEFOMjcyMCBVU0ItVVNCIEJyaWRnZQorCTI3MjcgIFhpcmNvbSBQR1VORVQgVVNCLVVTQiBCcmlkZ2UKKwkyNzUwICBFWi1MaW5rIChFWkxOS1VTQi5TWVMpCisJMjgxMCAgQ3lwcmVzcyBVU0IgQVRBUEkgQnJpZGdlCisJNzc3NyAgQmx1ZXRvb3RoIERldmljZQorCTk5OTkgIEFOMjEzMSB1bmluaXRpYWxpemVkICg/KQorMDU0OCAgVHlhbiBDb21wdXRlciBDb3JwLgorCTEwMDUgIEVaIENhcnQgSUkgR2FtZUJveSBGbGFzaCBQcm9ncmFtbWVyCiswNTQ5ICBQaXhlcmEgQ29ycC4KKzA1NGEgIEZ1aml0c3UgTWljcm9lbGVjdHJvbmljcywgSW5jLgorMDU0YiAgTmV3IE1lZGlhIENvcnAuCiswNTRjICBTb255IENvcnAuCisJMDAwMSAgSFVCCisJMDAwMiAgU3RhbmRhcmQgSFVCCisJMDAxMCAgRFNDLVMzMC9TNzAvUzc1L0Y1MDVWL0Y1MDUvRkQ5Mi9XMSBDeWJlcnNob3QvTWF2aWNhIERpZ2l0YWwgQ2FtZXJhCisJMDAxNCAgTm9nYXRlY2ggVVNCVmlzaW9uIChTWSkKKwkwMDIyICBTdG9yYWdlIEFkYXB0ZXIgVjIgKFRQUCkKKwkwMDIzICBDRCBXcml0ZXIKKwkwMDI0ICBNYXZpY2EgQ0QtMTAwMCBDYW1lcmEKKwkwMDI1ICBOVy1NUzcgV2Fsa21hbiBNZW1vcnlTdGljayBSZWFkZXIKKwkwMDJiICBQb3J0YWJsZSBVU0IgSGFyZGRyaXZlIFYyCisJMDAyYyAgVVNCIEZsb3BweSBEaXNrIERyaXZlCisJMDAyZCAgTVNBQy1VUzEgTWVtb3J5U3RpY2sgUmVhZGVyCisJMDAyZSAgU29ueSBIYW5keUNhbSBNZW1vcnlTdGljayBSZWFkZXIKKwkwMDMwICBTdG9yYWdlIEFkYXB0ZXIgVjIgKFRQUCkKKwkwMDMyICBNZW1vcnlTdGljayBNU0MtVTAxIFJlYWRlcgorCTAwMzUgIE5ldHdvcmsgV2Fsa21hbiAoRSkKKwkwMDM2ICBOZXQgTUQKKwkwMDM3ICBNRyBNZW1vcnkgU3RpY2sgUmVhZGVyL1dyaXRlcgorCTAwMzggIENsaWUgUEVHLVMzMDAvRCBQYWxtT1MgUERBCisJMDAzOSAgTmV0d29yayBXYWxrbWFuIChNUykKKwkwMDNjICBWQUlPLU1YIExDRCBDb250cm9sCisJMDA0NSAgRGlnaXRhbCBJbWFnaW5nIFZpZGVvCisJMDA0NiAgTmV0d29yayBXYWxrbWFuCisJMDA0YSAgTWVtb3J5IFN0aWNrIEhpLUZpIFN5c3RlbQorCTAwNGIgIE1lbW9yeSBTdGljayBSZWFkZXIvV3JpdGVyCisJMDA0ZSAgRFNDLXh4eCAocHRwKQorCTAwNTYgIE1HIE1lbW9yeSBTdGljayBSZWFkZXIvV3JpdGVyCisJMDA1OCAgQ2xpZSBQRUctTjd4MEMgUGFsbU9TIFBEQSBNYXNzIFN0b3JhZ2UKKwkwMDY2ICBDbGllIFBFRy1ON3gwQy9QRUctVDQyNSBQYWxtT1MgUERBIFNlcmlhbAorCTAwNjkgIE1lbW9yeXN0aWNrIE1TQy1VMDMgUmVhZGVyCisJMDA2ZCAgQ2xpZSBQRUctVDQyNSBQREEgTWFzcyBTdG9yYWdlCisJMDA2ZiAgTmV0d29yayBXYWxrbWFuIChFVikKKwkwMDczICBTdG9yYWdlIENSWDE3NTBVCisJMDA3NSAgTmV0IE1ECisJMDA3NiAgU3RvcmFnZSBBZGFwdGVyIEFDUi1VMjAKKwkwMDdjICBOZXQgTUQKKwkwMDdmICBJQyBSZWNvcmRlciAoTVMpCisJMDA4MCAgTmV0IE1ECisJMDA4MSAgTmV0IE1ECisJMDA4NCAgTmV0IE1ECisJMDA4NSAgTmV0IE1ECisJMDA4NiAgTmV0IE1ECisJMDA4YiAgTWljcm8gVmF1bHQgNjRNIE1hc3MgU3RvcmFnZQorCTAwOTUgIFNvbnkgQ2xpZSBzMzYwCisJMDA5OSAgQ2xpZSBOUjcwIFBEQSBNYXNzIFN0b3JhZ2UKKwkwMDlhICBDbGllIE5SNzAgUERBIFNlcmlhbAorCTAwYWIgIFZpc3VhbCBDb21tdW5pY2F0aW9uIENhbWVyYSAoUENHQS1VVkMxMCkKKwkwMGFmICBEUFAtRVggU2VyaWVzIERpZ2l0YWwgUGhvdG8gUHJpbnRlcgorCTAwYmYgIElDIFJlY29yZGVyIChTKQorCTAwYzAgIEhhbmR5Y2FtIERDUi0zMAorCTAwYzYgIE5ldCBNRAorCTAwYzcgIE5ldCBNRAorCTAwYzggIE1aLU43MTAgTWluaWRpc2MgV2Fsa21hbgorCTAwYzkgIE5ldCBNRAorCTAwY2EgIE1aLURONDMwIE1pbmlkaXNjIFdhbGttYW4KKwkwMGNiICBNU0FDLVVTMjAgTWVtb3J5IFN0aWNrIFJlYWRlcgorCTAwZGEgIFNvbnkgQ2xpZSBueDYwCisJMDBlOCAgTmV0d29yayBXYWxrbWFuIChNUykKKwkwMGU5ICBIYW5kaGVsZAorCTAwZWIgIE5ldCBNRAorCTAxMDEgIE5ldCBNRAorCTAxMDMgIElDIFJlY29yZGVyIChTVCkKKwkwMTA1ICBNaWNybyBWYXVsdCBIdWIKKwkwMTA3ICBWQ0MtVTAxIFZpc3VhbCBDb21tdW5pY2F0aW9uIENhbWVyYQorCTAxMTAgIERpZ2l0YWwgSW1hZ2luZyBWaWRlbworCTAxMTMgIE5ldCBNRAorCTAxMTYgIElDIFJlY29yZGVyIChQKQorCTAxNDQgIENsaWUgUEVHLVRINTUgUERBCisJMDE0NyAgVmlzdWFsIENvbW11bmljYXRpb24gQ2FtZXJhIChQQ0dBLVVWQzExKQorCTAxNGMgIEFpd2EgQU0tTlg5IE5ldCBNRCBNdXNpYyBSZWNvcmRlciBNRExQCisJMDE0ZCAgTWVtb3J5IFN0aWNrIFJlYWRlci9Xcml0ZXIKKwkwMTU0ICBFeWV0b3kgQXVkaW8gRGV2aWNlCisJMDE1ZiAgSUMgUmVjb3JkZXIgKEJNKQorCTAxNjkgIENsaWUgUEVHLVRKMzUgUERBIFNlcmlhbAorCTAxNmEgIENsaWUgUEVHLVRKMzUgUERBIE1hc3MgU3RvcmFnZQorCTAxNmIgIE1vYmlsZSBIREQKKwkwMTZkICBJQyBSZWNvcmRlciAoU1gpCisJMDE2ZSAgRFBQLUVYNTAgRGlnaXRhbCBQaG90byBQcmludGVyCisJMDE3MSAgRmluZ2VycHJpbnQgU2Vuc29yIDM1MDAKKwkwMTdlICBOZXQgTUQKKwkwMTdmICBIaS1NRCBXQUxLTUFOCisJMDE4MCAgTmV0IE1ECisJMDE4MSAgSGktTUQgV0FMS01BTgorCTAxODIgIE5ldCBNRAorCTAxODMgIEhpLU1EIFdBTEtNQU4KKwkwMTg0ICBOZXQgTUQKKwkwMTg1ICBIaS1NRCBXQUxLTUFOCisJMDE4NiAgTmV0IE1ECisJMDE4NyAgSGktTUQgV0FMS01BTgorCTAxODggIE5ldCBNRAorCTAxOGEgIE5ldCBNRAorCTAxOGIgIEhpLU1EIFNPVU5EIEdBVEUKKwkwMTllICBNaWNybyBWYXVsdCAxLjBHIE1hc3MgU3RvcmFnZQorCTAxYWQgIEFUUkFDIEhERCBQQQorCTAxYmQgIE1SVzYyRSBNdWx0aS1DYXJkIFJlYWRlci9Xcml0ZXIKKwkwMWMzICBOVy1FNTUgTmV0d29yayBXYWxrbWFuCisJMDFjNiAgTUVNT1JZIFAtQVVESU8KKwkwMWM3ICBQcmludGluZyBTdXBwb3J0CisJMDFkMCAgRFZEK1JXIEV4dGVybmFsIERyaXZlIERSVS03MDBBCisJMDFkNSAgSUMgUkVDT1JERVIKKwkwMWRlICBWUkQtVkMxMCBbVmlkZW8gQ2FwdHVyZV0KKwkwMWU5ICBOZXQgTUQKKwkwMWVhICBIaS1NRCBXQUxLTUFOCisJMDFlZSAgSUMgUkVDT1JERVIKKwkwMWZhICBTb255IElDIFJlY29yZGVyIChQKQorCTAxZmIgIE5XLUU0MDUgTmV0d29yayBXYWxrbWFuCisJMDIwZiAgRGV2aWNlCisJMDIxMCAgQVRSQUMgSEREIFBBCisJMDIxOSAgTmV0IE1ECisJMDIxYSAgSGktTUQgV0FMS01BTgorCTAyMWIgIE5ldCBNRAorCTAyMWMgIEhpLU1EIFdBTEtNQU4KKwkwMjFkICBOZXQgTUQKKwkwMjI3ICBQcmludGluZyBTdXBwb3J0CisJMDIyYyAgTmV0IE1ECisJMDIyZCAgSGktTUQgQVVESU8KKwkwMjMzICBBVFJBQyBIREQgUEEKKwkwMjM2ICBNb2JpbGUgSERECisJMDIzYiAgRFZEK1JXIEV4dGVybmFsIERyaXZlIERSVS04MDBVTAorCTAyM2MgIE5ldCBNRAorCTAyM2QgIEhpLU1EIFdBTEtNQU4KKwkwMjQzICBNaWNyb1ZhdWx0IEZsYXNoIERyaXZlCisJMDI1NyAgSUZVLVdMTTIgVVNCIFdpcmVsZXNzIExBTiBNb2R1bGUgKFdpcmVsZXNzIE1vZGUpCisJMDI1OCAgSUZVLVdMTTIgVVNCIFdpcmVsZXNzIExBTiBNb2R1bGUgKE1lbW9yeSBNb2RlKQorCTAyNTkgIElDIFJFQ09SREVSCisJMDI2NyAgVGFjaGlrb21hIERldmljZQorCTAyNjggIEJhdG9oIERldmljZQorCTAyNjkgIEhERCBXQUxLTUFOCisJMDI2YSAgSEREIFdBTEtNQU4KKwkwMjcxICBJQyBSZWNvcmRlciAoUCkKKwkwMjdjICBORVRXT1JLIFdBTEtNQU4KKwkwMjdlICBTT05ZIENvbW11bmljYXRvcgorCTAyN2YgIElDIFJFQ09SREVSCisJMDI4NiAgTmV0IE1ECisJMDI4NyAgSGktTUQgV0FMS01BTgorCTAyOWIgIFBSUy01MDAgZUJvb2sgcmVhZGVyCisJMDJhZSAgUGxheVN0YXRpb24gMyBNZW1vcnkgQ2FyZCBBZGFwdG9yCisJMDJhZiAgSGFuZHljYW0gRENSLURWRDMwNkUKKwkwMmM0ICBEZXZpY2UKKwkwMmQyICBQU1AKKzA1NGQgIFRyeSBDb3JwLgorMDU0ZSAgUHJvc2lkZSBDb3JwLgorMDU0ZiAgV1lTRSBUZWNobm9sb2d5IFRhaXdhbgorMDU1MCAgRnVqaSBYZXJveCBDby4sIEx0ZAorCTAwMDIgIElua0pldCBDb2xvciBQcmludGVyCisJMDAwNCAgSW5rSmV0IENvbG9yIFByaW50ZXIKKwkwMDA1ICBJbmtKZXQgQ29sb3IgUHJpbnRlcgorMDU1MSAgQ29tcHVUcmVuZCBTeXN0ZW1zLCBJbmMuCiswNTUyICBQaGlsaXBzIE1vbml0b3JzCiswNTUzICBTVE1pY3JvZWxlY3Ryb25pY3MgSW1hZ2luZyBEaXZpc2lvbiAoVkxTSSBWaXNpb24pCisJMDAwMSAgVGVycmFDQU0KKwkwMDAyICBDUGlBIFdlYkNhbQorCTAxMDAgIFNUVjA2NzIgQ2FtZXJhCisJMDE0MCAgVmlkZW8gQ2FtZXJhCisJMDE1MCAgQ0RFIENBTSAxMDAKKwkwMTUxICBEaWdpdGFsIEJsdWUgUVg1IE1pY3Jvc2NvcGUKKwkwMjAwICBEdWFsLW1vZGUgQ2FtZXJhMAorCTAyMDEgIER1YWwtbW9kZSBDYW1lcmExCisJMDIwMiAgQWlwdGVrIFBlbkNhbSAxCisJMDY3NCAgTXVsdGktbW9kZSBDYW1lcmEKKwkwNjc5ICBOTVMgVmlkZW8gQ2FtZXJhIChXZWJjYW0pCisJMTAwMiAgQ2hlLWV6ISBTcGxhc2gKKzA1NTQgIERpY3RhcGhvbmUgQ29ycC4KKzA1NTUgIEFOQU0gUyZUIENvLiwgTHRkCiswNTU2ICBBc2FoaSBLYXNlaSBNaWNyb3N5c3RlbXMgQ28uLCBMdGQKKwkwMDAxICBBSzUzNzAgSS9GIEEvRCBDb252ZXJ0ZXIKKzA1NTcgIEFURU4gSW50ZXJuYXRpb25hbCBDby4sIEx0ZAorCTIwMDEgIFVDLTEyODQgUHJpbnRlciBQb3J0CisJMjAwMiAgMTBNYnBzIEV0aGVybmV0IFtrbHNpXQorCTIwMDQgIFVDLTEwMEtNIFBTLzIgTW91c2UgYW5kIEtleWJvYXJkIGFkYXB0ZXIKKwkyMDA2ICBVQy0xMjg0QiBQcmludGVyIFBvcnQKKwkyMDA3ICBVQy0xMTBUIDEwME1icHMgRXRoZXJuZXQgW3BlZ2FzdXNdCisJMjAwOCAgVUMtMjMyQSBTZXJpYWwgUG9ydCBbcGwyMzAzXQorCTIwMDkgIFVDLTIxMFQgRXRoZXJuZXQKKwkyMjAyICBDUzEyNFUgTWluaXZpZXcgSUkgS1ZNIFN3aXRjaAorCTI2MDAgIElERSBCcmlkZ2UKKwk0MDAwICBEU0ItNjUwIDEwTWJwcyBFdGhlcm5ldCBba2xzaV0KKwk3MDAwICBIdWIKKzA1NTggIFRydWV2aXNpb24sIEluYy4KKzA1NTkgIENhZGVuY2UgRGVzaWduIFN5c3RlbXMsIEluYy4KKzA1NWEgIEtlbndvb2QgVVNBCiswNTViICBLbm93bGVkZ2VUZWssIEluYy4KKzA1NWMgIFByb3RvbiBFbGVjdHJvbmljIEluZC4KKzA1NWQgIFNhbXN1bmcgRWxlY3Ryby1NZWNoYW5pY3MgQ28uCisJMDAwMSAgS2V5Ym9hcmQKKwkwYmIxICBCbHVldG9vdGggRGV2aWNlCisJMTAzMCAgT3B0aWNhbCBXaGVlbCBNb3VzZSAoT01TM0NCL09NR0IzMCkKKwkxMDMxICBPcHRpY2FsIFdoZWVsIE1vdXNlIChPTUEzQ0IvT01HSTMwKQorCTEwNDAgIE1vdXNlIEhJRCBEZXZpY2UKKwkxMDUwICBFLU1haWwgT3B0aWNhbCBXaGVlbCBNb3VzZSAoT01TM0NFKQorCTEwODAgIE9wdGljYWwgV2hlZWwgTW91c2UgKE9NUzNDSCkKKwkyMDIwICBGbG9wcHkgRGlzayBEcml2ZQorCTY3ODAgIEtleWJvYXJkIFYxCisJNjc4MSAgS2V5Ym9hcmQgTW91c2UKKwk4MDAxICBFLk0uIEh1YgorCTkwMDAgIEFueUNhbSBbcHdjXQorCTkwMDEgIE1QQy1DMzAgQW55Q2FtIFByZW1pdW0gZm9yIE5vdGVib29rcyBbcHdjXQorCWEwMTAgIFdMQU4gQWRhcHRlcihTV0wtMjMwMCkKKwlhMDExICBCb290IERldmljZQorCWEwMTIgIFdMQU4gQWRhcHRlcihTV0wtMjMwMCkKKwlhMDEzICBXTEFOIEFkYXB0ZXIoU1dMLTIzNTApCisJYTIzMCAgQm9vdCBEZXZpY2UKKwliMDAwICAxMU1icHMgV0xBTiBNaW5pIEFkYXB0ZXIKKwliMjMwICBOZXRvcGlhIDgwMi4xMWIgV0xBTiBBZGFwdGVyCisJYjIzMSAgTEcgV2lyZWxlc3MgTEFOIDExYiBBZGFwdGVyCiswNTVlICBDVFggT3B0by1FbGVjdHJvbmljcyBDb3JwLgorMDU1ZiAgTXVzdGVrIFN5c3RlbXMsIEluYy4KKwkwMDAxICBTY2FuRXhwcmVzcyAxMjAwIENVCisJMDAwMiAgU2NhbkV4cHJlc3MgNjAwIENVCisJMDAwMyAgU2NhbkV4cHJlc3MgMTIwMCBVU0IKKwkwMDA2ICBTY2FuRXhwcmVzcyAxMjAwIFVCCisJMDAwNyAgU2NhbkV4cHJlc3MgMTIwMCBVU0IgUGx1cworCTAwMDggIFNjYW5FeHByZXNzIDEyMDAgQ1UgUGx1cworCTAwMTAgIEJlYXJQYXcgMTIwMEYKKwkwMjEwICBTY2FuRXhwcmVzcyBBMyBVU0IKKwkwMjE4ICBCZWFyUGF3IDI0MDAgVEEKKwkwMjE5ICBCZWFyUGF3IDI0MDAgVEEgUGx1cworCTAyMWEgIEJlYXJQYXcgMjQ0OCBUQSBQbHVzCisJMDIxYyAgQmVhclBhdyAxMjAwIENVIFBsdXMKKwkwMjFkICBCZWFyUGF3IDI0MDAgQ1UgUGx1cworCTAyMWUgIEJlYXJQYXcgMTIwMCBUQS9DUworCTAyMWYgIFNOQVBTQ0FOIGUyMgorCTA0MDAgIEJlYXJQYXcgMjQwMCBUQSBQcm8KKwkwNDAxICBQIDM2MDAgQTMgUHJvCisJMDQwOCAgQmVhclBhdyAyNDQ4IENVIFBybworCTA4NzMgIFNjYW5FeHByZXNzIDYwMCBVU0IKKwkxMDAwICBCZWFyUGF3IDQ4MDAgVEEgUHJvCisJYTM1MCAgZ1NtYXJ0IDM1MAorCWE4MDAgIE1EQyA4MDAgQ2FtZXJhCisJYjUwMCAgTURDIDMwMDAgQ2FtZXJhCisJYzAwNSAgUEMgQ0FNIDMwMEEKKwljMjAwICBnU21hcnQgMzAwCisJYzIyMCAgZ1NtYXJ0IG1pbmkKKwljMzYwICBNdXN0ZWsgRFYgNDAwMAorCWM0MjAgIGdTbWFydCBtaW5pIDIKKwljNDQwICBNdXN0ZWsgRFYgMzAwMAorCWM1MjAgIGdTbWFydCBtaW5pIDMKKwljNTMwICBNdXN0ZWsgR3NtYXJ0IExDRCAyCisJYzYzMSAgTURDLTQwMDAKKwljNjUwICBNdXN0ZWsgTURDNTUwMFoKKwlkMDAxICBXQ2FtIDMwMAorCWQwMDMgIFBDIENBTSAzMDBBCisJZDAwNCAgUEMgQ0FNIDMwMEEKKzA1NjAgIEludGVyZmFjZSBDb3JwLgorMDU2MSAgT2FzaXMgRGVzaWduLCBJbmMuCiswNTYyICBUZWxleCBDb21tdW5pY2F0aW9ucywgSW5jLgorCTAwMDEgIEVuaGFuY2VkIE1pY3JvcGhvbmUKKwkwMDAyICBUZWxleCBNaWNyb3Bob25lCiswNTYzICBJbW1lcnNpb24gQ29ycC4KKzA1NjQgIENoaW5vbiBJbmR1c3RyaWVzLCBJbmMuCiswNTY1ICBQZXJhY29tIE5ldHdvcmtzLCBJbmMuCisJMDAwMSAgU2VyaWFsIFBvcnQgW2V0ZWtdCisJMDAwMiAgRW5ldCBFdGhlcm5ldCBba2xzaV0KKwkwMDAzICBASG9tZSBOZXR3b3JrcyBFdGhlcm5ldCBba2xzaV0KKwkwMDA1ICBFbmV0MiBFdGhlcm5ldCBba2xzaV0KKwkwMDQxICBQZXJhY29tIFJlbW90ZSBORElTIEV0aGVybmV0IEFkYXB0ZXIKKzA1NjYgIE1vbnRlcmV5IEludGVybmF0aW9uYWwgQ29ycC4KKwkwMTEwICBWaWV3TWF0ZSBEZXNrdG9wIE1vdXNlIENDMjIwMQorCTEwMDEgIFZpZXdNYXRlIERlc2t0b3AgTW91c2UgQ0MyMjAxCisJMTAwMiAgVmlld01hdGUgRGVza3RvcCBNb3VzZSBDQzIyMDEKKwkxMDAzICBWaWV3TWF0ZSBEZXNrdG9wIE1vdXNlIENDMjIwMQorCTEwMDQgIFZpZXdNYXRlIERlc2t0b3AgTW91c2UgQ0MyMjAxCisJMTAwNSAgVmlld01hdGUgRGVza3RvcCBNb3VzZSBDQzIyMDEKKwkxMDA2ICBWaWV3TWF0ZSBEZXNrdG9wIE1vdXNlIENDMjIwMQorCTEwMDcgIFZpZXdNYXRlIERlc2t0b3AgTW91c2UgQ0MyMjAxCisJMjgwMCAgTUlDIEsvQgorCTI4MDEgIE1JQyBLL0IgTW91c2UKKwkyODAyICBLYmQgSHViCiswNTY3ICBYeXJhdGV4IEludGVybmF0aW9uYWwsIEx0ZAorMDU2OCAgUXVhcnR6IEluZ2VuaWVyaWUKKzA1NjkgIFNlZ2FTb2Z0CiswNTZhICBXYWNvbSBDby4sIEx0ZAorCTAwMDAgIFBlblBhcnRuZXIKKwkwMDAxICBQZW5QYXJ0bmVyIDR4NQorCTAwMDIgIFBlblBhcnRuZXIgNng4CisJMDAxMCAgR3JhcGhpcmUKKwkwMDExICBHcmFwaGlyZSAyCisJMDAxMyAgR3JhcGhpcmUgMyA0eDUKKwkwMDIwICBJbnR1b3MgNHg1CisJMDAyMSAgSW50dW9zIDZ4OAorCTAwMjIgIEludHVvcyA5eDEyCisJMDAyMyAgSW50dW9zIDEyeDEyCisJMDAyNCAgSW50dW9zIDEyeDE4CisJMDAzMCAgUEw0MDAKKwkwMDMxICBQTDUwMAorCTAwMzIgIFBMNjAwCisJMDAzNCAgUEw1NTAKKwkwMDM1ICBQTDgwMAorCTAwNDEgIEludHVvczIgNHg1CisJMDA0MiAgSW50dW9zIDIgNng4CisJMDA0MyAgSW50dW9zIDIKKwkwMDQ0ICBJbnR1b3MyIDEyeDEyCisJMDA0NSAgSW50dW9zMiAxMngxOAorCTA0MDAgIFBlblBhcnRuZXIgNHg1CisJNDg1MCAgUGVuUGFydG5lciA2eDgKKzA1NmIgIERlY2ljb24sIEluYy4KKzA1NmMgIGVURUsgTGFicworCTAwMDYgIEt3aWtMaW5rIEhvc3QtSG9zdCBDb25uZWN0b3IKKwk4MDA3ICBLd2lrMjMyIFNlcmlhbCBQb3J0CisJODEwMCAgS3dpa0xpbmsgSG9zdC1Ib3N0IENvbm5lY3RvcgorCTgxMDEgIEt3aWtMaW5rIFVTQi1VU0IgQnJpZGdlCiswNTZkICBFSVpPIENvcnAuCisJMDAwMCAgSHViCisJMDAwMSAgTW9uaXRvcgorCTAwMDIgIEhJRCBNb25pdG9yIENvbnRyb2xzCisJMDAwMyAgRGV2aWNlIEJheSBDb250cm9sbGVyCiswNTZlICBFbGVjb20gQ28uLCBMdGQKKwkwMDAyICAyOVVPIE1vdXNlCisJMjAwYyAgTEQtVVNCL1RYCisJNDAwMiAgTGFuZWVkIDEwME1icHMgRXRoZXJuZXQgTEQtVVNCL1RYIFtwZWdhc3VzXQorCTQwMDUgIExELVVTQkwvVFgKKwk0MDBiICBMRC1VU0IvVFgKKwk0MDEwICBMRC1VU0IyMAorCTUwMDMgIFVDLVNHVAorCTUwMDQgIFVDLVNHVAorCWFiYzEgIExELVVTQi9UWAorMDU2ZiAgS29yZWEgRGF0YSBTeXN0ZW1zIENvLiwgTHRkCisJY2QwMCAgQ0RNLTc1MSBDRCBvcmdhbml6ZXIKKzA1NzAgIEVwc29uIEFtZXJpY2EKKzA1NzEgIEludGVyZXgsIEluYy4KKwkwMDAyICBlY2hvRlggSW50ZXJWaWV3IExpdGUKKzA1NzIgIENvbmV4YW50IFN5c3RlbXMgKFJvY2t3ZWxsKSwgSW5jLgorCTAwMDEgIEV6Y2FtIElJIFdlYkNhbQorCTAwMDIgIEV6Y2FtIElJIFdlYkNhbQorCTAwNDAgIFdvbmRlcmV5ZSBDUC0xMTUgV2ViQ2FtCisJMDA0MSAgV2ViQ2FtIE5vdGVib29rCisJMDA0MiAgV2ViQ2FtIE5vdGVib29rCisJMTIzMiAgVi45MCBtb2RlbQorCTEyMzQgIFR5cGhvb24gUmVkZnVuIE1vZGVtIFY5MCA1NmsKKwkxMjUyICBIQ0YgVjkwIERhdGEgRmF4IFZvaWNlIE1vZGVtCisJMTI1MyAgWm9vbSBWLjkyIEZheG1vZGVtCisJMTMwMCAgU29mdEs1NiBEYXRhIEZheCBWb2ljZSBDQVJQCisJMTMwMSAgTW9kZW0gRW51bWVyYXRvcgorCTIwMDAgIFNvZnRHYXRlIDgwMi4xMSBBZGFwdGVyCisJMjAwMiAgU29mdEdhdGUgODAyLjExIEFkYXB0ZXIKKwk4MzkwICBXaW5GYXN0IFBhbG1Ub3AvTm92byBUViBWaWRlbworCTgzOTIgIFdpbkZhc3QgUGFsbVRvcC9Ob3ZvIFRWIFZpZGVvCisJY2FmZSAgQWNjZXNzUnVubmVyIEFEU0wgTW9kZW0KKwljYjAwICBFLVRlY2ggQURTTCBNb2RlbSB2MgorCWNiMDEgIEdlZWtBRFNMIFByb21heCBRMzEgQURTTCBNb2RlbQorCWNiMDYgIFN0YXJNb2RlbSBOZXR3b3JrIEludGVyZmFjZQorMDU3MyAgWm9yYW4gQ28uIFBlcnNvbmFsIE1lZGlhIERpdmlzaW9uIChOb2dhdGVjaCkKKwkwMDAzICBVU0JHZWFyIFVTQkctVjEKKwkwNDAwICBELUxpbmsgVjEwMAorCTA2MDAgIERhenpsZSBVU0JWaXNpb24gKDEwMDYpCisJMTMwMCAgbGVhZHRlayBVU0JWaXNpb24gKDEwMDYpCisJMjAwMCAgWDEwIHZhMTBhIFdpcmVsZXNzIENhbWVyYQorCTIwMDEgIERhenpsZSBFbU1lICgyMDAxKQorCTIxMDEgIFpvcmFuIENvLiBQTUQgKE5vZ2F0ZWNoKSBBVi1ncmFiYmVyIE1hbmhhdHRhbgorCTJkMDAgIE9zcHJleSA1MAorCTJkMDEgIEhhdXBwYXVnZSBVU0ItTGl2ZSBNb2RlbCA2MDAKKwkzMDAwICBEYXp6bGUgTWljcm9DYW0gKE5UU0MpCisJMzAwMSAgRGF6emxlIE1pY3JvQ2FtIChQQUwpCisJNDAwMCAgTm9nYXRlY2ggVFYhIChOVFNDKQorCTQwMDEgIE5vZ2F0ZWNoIFRWISAoUEFMKQorCTQwMDIgIE5vZ2F0ZWNoIFRWISAoUEFMLUktKQorCTQwMDMgIE5vZ2F0ZWNoIFRWISAoTUYtKQorCTQwMDggIE5vZ2F0ZWNoIFRWISAoTlRTQykgKFQpCisJNDAwOSAgTm9nYXRlY2ggVFYhIChQQUwpIChUKQorCTQwMTAgIE5vZ2F0ZWNoIFRWISAoTlRTQykgKEEpCisJNDEwMCAgVVNCLVRWIEZNIChOVFNDKQorCTQxMTAgIFBOWSBVU0ItVFYgKE5UU0MpIEZNCisJNDQwMCAgTm9nYXRlY2ggVFYhIFBybyAoTlRTQykKKwk0NDAxICBOb2dhdGVjaCBUViEgUHJvIChQQUwpCisJNDQ1MCAgUGl4ZWxWaWV3IFBsYXlUdi1VU0IgUFJPIChQQUwpIEZNCisJNDQ1MSAgTm9nYXRlY2ggVFYhIFBybyAoUEFMKykKKwk0NDUyICBOb2dhdGVjaCBUViEgUHJvIChQQUwtSSspCisJNDUwMCAgTm9nYXRlY2ggVFYhIFBybyAoTlRTQykKKwk0NTAxICBOb2dhdGVjaCBUViEgUHJvIChQQUwpCisJNDU1MCAgWlRWIFpULTcyMSAyLjRHSHogVVNCIEEvViBSZWNlaXZlcgorCTQ1NTEgIERhenpsZSBUViEgUHJvIEF1ZGlvIChQKykKKwk0ZDAwICBIYXVwcGF1Z2UgV2luVFYtVVNCIFVTQQorCTRkMDEgIEhhdXBwYXVnZSBXaW5UVi1VU0IKKwk0ZDAyICBIYXVwcGF1Z2UgV2luVFYtVVNCIFVLCisJNGQwMyAgSGF1cHBhdWdlIFdpblRWLVVTQiBGcmFuY2UKKwk0ZDA0ICBIYXVwcGF1Z2UgV2luVFYgKFBBTCBEL0spCisJNGQxMCAgSGF1cHBhdWdlIFdpblRWLVVTQiB3aXRoIEZNIFVTQSByYWRpbworCTRkMTEgIEhhdXBwYXVnZSBXaW5UVi1VU0IgKFBBTCkgd2l0aCBGTSByYWRpbworCTRkMTIgIEhhdXBwYXVnZSBXaW5UVi1VU0IgVUsgd2l0aCBGTSBSYWRpbworCTRkMTQgIEhhdXBwYXVnZSBXaW5UViAoUEFMIEQvSyBGTSkKKwk0ZDIwICBIYXVwcGF1Z2UgV2luVFYtVVNCIElJIChQQUwpIHdpdGggRk0gcmFkaW8KKwk0ZDIxICBIYXVwcGF1Z2UgV2luVFYtVVNCIElJIChQQUwpCisJNGQyMiAgSGF1cHBhdWdlIFdpblRWLVVTQiBJSSAoUEFMKSBNb2RlbCA1NjYKKwk0ZDIzICBIYXVwcGF1Z2UgV2luVFYtVVNCIEZyYW5jZSA0RDIzCisJNGQyNCAgSGF1cHBhdWdlIFdpblRWIFBybyAoUEFMIEQvSykKKwk0ZDI1ICBIYXVwcGF1Z2UgV2luVFYtVVNCIE1vZGVsIDQwMjA5IHJldiBCMjM0CisJNGQyNiAgSGF1cHBhdWdlIFdpblRWLVVTQiBNb2RlbCA0MDIwOSByZXYgQjI0MworCTRkMjcgIEhhdXBwYXVnZSBXaW5UVi1VU0IgTW9kZWwgNDAyMDQgUmV2IEIyODEKKwk0ZDI4ICBIYXVwcGF1Z2UgV2luVFYtVVNCIE1vZGVsIDQwMjA0IHJldiBCMjgzCisJNGQyOSAgSGF1cHBhdWdlIFdpblRWLVVTQiBNb2RlbCA0MDIwNSByZXYgQjI5OAorCTRkMmEgIEhhdXBwYWd1ZSBXaW5UVi1VU0IgTW9kZWwgNjAyIFJldiBCMjg1CisJNGQyYiAgSGF1cHBhZ3VlIFdpblRWLVVTQiBNb2RlbCA2MDIgUmV2IEIyODIKKwk0ZDJjICBIYXVwcGF1Z2UgV2luVFYgUHJvIChQQUwvU0VDQU0pCisJNGQzMCAgSGF1cHBhdWdlIFdpblRWLVVTQiBGTSBNb2RlbCA0MDIxMSBSZXYgQjEyMworCTRkMzEgIEhhdXBwYXVnZSBXaW5UVi1VU0IgSUlJIChQQUwpIHdpdGggRk0gcmFkaW8gTW9kZWwgNTY4CisJNGQzMiAgSGF1cHBhdWdlIFdpblRWLVVTQiBJSUkgKFBBTCkgRk0gTW9kZWwgNTczCisJNGQzNCAgSGF1cHBhdWdlIFdpblRWIFBybyAoUEFMIEQvSyBGTSkKKwk0ZDM1ICBIYXVwcGF1Z2UgV2luVFYtVVNCIElJSSAoUEFMKSBGTSBNb2RlbCA1OTcKKwk0ZDM2ICBIYXVwcGF1Z2UgV2luVFYgUHJvIChQQUwgQi9HIEZNKQorCTRkMzcgIEhhdXBwYXVnZSBXaW5UVi1VU0IgTW9kZWwgNDAyMTkgcmV2IEUxODkKKwk0ZDM4ICBIYXVwcGF1Z2UgV2luVFYgUHJvIChOVFNDIEZNKQorMDU3NCAgQ2l0eSBVbml2ZXJzaXR5IG9mIEhvbmcgS29uZworMDU3NSAgUGhpbGlwcyBDcmVhdGl2ZSBEaXNwbGF5IFNvbHV0aW9ucworMDU3NiAgQkFGTy9RdWFsaXR5IENvbXB1dGVyIEFjY2Vzc29yaWVzCiswNTc3ICBFTFNBCiswNTc4ICBJbnRyaW5zaXggQ29ycC4KKzA1NzkgIEdWQyBDb3JwLgorMDU3YSAgU2Ftc3VuZyBFbGVjdHJvbmljcyBBbWVyaWNhCiswNTdiICBZLUUgRGF0YSwgSW5jLgorCTAwMDAgIEZsYXNoQnVzdGVyLVUgRmxvcHB5CisJMDAwMSAgVHJpLU1lZGlhIFJlYWRlciBGbG9wcHkKKwkwMDA2ICBUcmktTWVkaWEgUmVhZGVyIENhcmQgUmVhZGVyCisJMDAxMCAgTWVtb3J5IFN0aWNrIFJlYWRlciBXcml0ZXIKKwkwMDIwICBIRVhBIE1lZGlhIERyaXZlIDYtaW4tMSBDYXJkIFJlYWRlciBXcml0ZXIKKwkwMDMwICBNZW1vcnkgQ2FyZCBWaWV3ZXIgKFRWKQorMDU3YyAgQVZNIEdtYkgKKwkwYjAwICBJU0ROLUNvbnRyb2xsZXIgQjEgRmFtaWx5CisJMGMwMCAgSVNETi1Db250cm9sbGVyIEZSSVRaIUNhcmQKKwkxMDAwICBJU0ROLUNvbnRyb2xsZXIgRlJJVFohQ2FyZCB2Mi4wCisJMTkwMCAgSVNETi1Db250cm9sbGVyIEZSSVRaIUNhcmQgdjIuMQorCTIwMDAgIElTRE4tQ29ubmVjdG9yIEZSSVRaIVgKKwkyMjAwICBCbHVlRlJJVFohCisJMjMwMCAgVGVsZWRhdCBYMTMwIERTTAorCTI4MDAgIElTRE4tQ29ubmVjdG9yIFRBCisJMzIwMCAgVGVsZWRhdCBYMTMwIERTTAorCTM1MDAgIEZSSVRaIUNhcmQgRFNMIFNMCisJMzcwMSAgRlJJVFohQm94IFNMCisJMzcwMiAgRlJJVFohQm94CisJMzgwMCAgQmx1ZUZSSVRaISBCbHVldG9vdGggU3RpY2sKKwkzYTAwICBGUklUWiFCb3ggRm9uCisJM2MwMCAgRlJJVFohQm94IFdMQU4KKwkzZDAwICBGcml0eiFCb3gKKwkzZTAxICBGUklUWiFCb3ggKEFubmV4IEEpCisJNDAwMSAgRlJJVFohQm94IEZvbiAoQW5uZXggQSkKKwk0MTAxICBGUklUWiFCb3ggV0xBTiAoQW5uZXggQSkKKwk0MjAxICBGUklUWiFCb3ggRm9uIFdMQU4gKEFubmV4IEEpCisJNDYwMSAgRXVtZXggNTUyMFBDIChXaW5YUC8yMDAwKQorCTQ2MDIgIEV1bWV4IDQwMCAoV2luWFAvMjAwMCkKKwk0NzAxICBBVk0gRlJJVFohQm94IEZvbiBhdGEKKwk1NDAxICBFdW1leCAzMDAgSVAKKwk1NjAxICBBVk0gRlJJVFohV0xBTiBTdGljaworCTYyMDEgIFdMQU4gVVNCIHYxLjEKKwk2MmZmICBXTEFOIFVTQiB2MS4xIFtubyBmaXJtd2FyZV0KKzA1N2QgIFNoYXJrIE11bHRpbWVkaWEsIEluYy4KKzA1N2UgIE5pbnRlbmRvIENvLiwgTHRkCisJMDMwNiAgV2lpIFJlbW90ZSBDb250cm9sbGVyIFJWTC0wMDMKKzA1N2YgIFF1aWNrU2hvdCwgTHRkCisJNjIzOCAgVVNCIFN0cmlrZVBhZAorMDU4MCAgRGVucm9uLCBJbmMuCiswNTgxICBSYWNhbCBEYXRhIEdyb3VwCiswNTgyICBSb2xhbmQgQ29ycC4KKwkwMDAwICBVQS0xMDAKKwkwMDAyICBVTS00L01QVS02NCBNSURJIEludGVyZmFjZQorCTAwMDMgIFNvdW5kQ2FudmFzIFNDLTg4NTAKKwkwMDA0ICBVLTgKKwkwMDA1ICBFZGlyb2wgVU0tMiBNSURJIEFkYXB0ZXIKKwkwMDA3ICBTb3VuZENhbnZhcyBTQy04ODIwCisJMDAwOCAgUEMtMzAwCisJMDAwOSAgRWRpcm9sIFVNLTFTWCBNSURJIEFkYXB0ZXIKKwkwMDBiICBTSy01MDAKKwkwMDBjICBTQy1ENzAKKwkwMDEwICBFRElST0wgVUEtNQorCTAwMTEgIEVkaXJvbCBVQS01IFNvdW5kIENhcHR1cmUKKwkwMDEyICBYVi01MDUwCisJMDAxMyAgWFYtNTA1MAorCTAwMTQgIEVESVJPTCBVTS04ODAgTUlESSBJL0YgKG5hdGl2ZSkKKwkwMDE1ICBFRElST0wgVU0tODgwIE1JREkgSS9GIChnZW5lcmljKQorCTAwMTYgIEVESVJPTCBTRC05MAorCTAwMTcgIEVESVJPTCBTRC05MAorCTAwMWIgIE1NUC0yCisJMDAxYyAgTU1QLTIKKwkwMDFkICBWLVNZTlRICisJMDAxZSAgVi1TWU5USAorCTAwMjMgIEVESVJPTCBVTS01NTAKKwkwMDI0ICBFRElST0wgVU0tNTUwCisJMDAyNSAgRURJUk9MIFVBLTIwCisJMDAyNiAgRURJUk9MIFVBLTIwCisJMDAyNyAgRURJUk9MIFNELTIwCisJMDAyOCAgRURJUk9MIFNELTIwCisJMDAyOSAgRURJUk9MIFNELTgwCisJMDAyYSAgRURJUk9MIFNELTgwCisJMDAyYiAgRURJUk9MIFVBLTcwMAorCTAwMmMgIEVESVJPTCBVQS03MDAKKwkwMDJkICBYVi0yMDIwIFN5bnRoZXNpemVyCisJMDAyZSAgWFYtMjAyMCBTeW50aGVzaXplcgorCTAwMmYgIFZhcmlPUworCTAwMzAgIFZhcmlPUworCTAwMzMgIEVESVJPTCBQQ1IKKwkwMDM0ICBFRElST0wgUENSCisJMDAzNyAgRGlnaXRhbCBQaWFubworCTAwMzggIERpZ2l0YWwgUGlhbm8KKwkwMDNiICBCT1NTIEdTLTEwCisJMDAzYyAgQk9TUyBHUy0xMAorCTAwNDAgIEdJLTIwCisJMDA0MSAgR0ktMjAKKwkwMDQyICBSUy03MAorCTAwNDMgIFJTLTcwCisJMDA0NCAgRURJUk9MIFVBLTEwMDAKKwkwMDQ3ICBFRElST0wgVVItODAgV0FWRQorCTAwNDggIEVESVJPTCBVUi04MCBNSURJCisJMDA0OSAgRURJUk9MIFVSLTgwIFdBVkUKKwkwMDRhICBFRElST0wgVVItODAgTUlESQorCTAwNGIgIEVESVJPTCBNLTEwMEZYCisJMDA0YyAgRURJUk9MIFBDUi1BIFdBVkUKKwkwMDRkICBFRElST0wgUENSLUEgTUlESQorCTAwNGUgIEVESVJPTCBQQ1ItQSBXQVZFCisJMDA0ZiAgRURJUk9MIFBDUi1BIE1JREkKKwkwMDUwICBFRElST0wgVUEtM0ZYCisJMDA1MiAgRURJUk9MIFVNLTFTWAorCTAwNTQgIERpZ2l0YWwgUGlhbm8KKwkwMDYwICBFWFIgU2VyaWVzCisJMDA2NCAgRURJUk9MIFBDUi0xIFdBVkUKKwkwMDY1ICBFRElST0wgUENSLTEgTUlESQorCTAwNjYgIEVESVJPTCBQQ1ItMSBXQVZFCisJMDA2NyAgRURJUk9MIFBDUi0xIE1JREkKKwkwMDZhICBTUC02MDYKKwkwMDZiICBTUC02MDYKKwkwMDZkICBGQU5UT00tWAorCTAwNmUgIEZBTlRPTS1YCisJMDA3MyAgRURJUk9MIFVBLTI1CisJMDA3NCAgRURJUk9MIFVBLTI1CisJMDA3NSAgQk9TUyBEUi04ODAKKwkwMDc2ICBCT1NTIERSLTg4MAorCTAwN2EgIFJECisJMDA3YiAgUkQKKwkwMDdkICBFRElST0wgVUEtMTAxCisJMDA4MCAgRy03MAorCTAwODEgIEctNzAKKwkwMDhiICBFRElST0wgUEMtNTAKKwkwMDhjICBFRElST0wgUEMtNTAKKwkwMDhkICBFRElST0wgVUEtMTAxIFVTQjEKKwkwMDkyICBFRElST0wgUEMtODAgV0FWRQorCTAwOTMgIEVESVJPTCBQQy04MCBNSURJCisJMDA5NiAgRURJUk9MIFVBLTFFWAorCTAwOWEgIEVESVJPTCBVTS0zRVgKKwkwMDlkICBFRElST0wgVU0tMQorCTAwYTIgIERpZ2l0YWwgUGlhbm8KKwkwMGEzICBFRElST0wgVUEtNEZYCisJMDBhNiAgSnVuby1HCisJMDBhZCAgU0gtMjAxCisJMDBjNCAgRURJUk9MIE0tMTZEWAorMDU4MyAgUGFkaXggQ28uLCBMdGQgKFJvY2tmaXJlKQorCTIwMzAgIFJNLTIwMyBVU0IgTmVzdCBbbW9kZSAxXQorCTIwMzEgIFJNLTIwMyBVU0IgTmVzdCBbbW9kZSAyXQorCTIwMzIgIFJNLTIwMyBVU0IgTmVzdCBbbW9kZSAzXQorCTIwMzMgIFJNLTIwMyBVU0IgTmVzdCBbbW9kZSA0XQorCTIwNTAgIFBYLTIwNSBQU1ggQnJpZGdlCisJMzA1MCAgUUYtMzA1dSBHYW1lcGFkCisJNjg4ZiAgUUYtNjg4dXYgV2luZHN0b3JtIFBybyBKb3lzdGljaworCTcwNzAgIFFGLTcwN3UgQmF6b29rYSBKb3lzdGljaworMDU4NCAgUkFUT0MgU3lzdGVtLCBJbmMuCisJMDAwOCAgRnVqaWZpbG0gTWVtb3J5Q2FyZCBSZWFkZXJXcml0ZXIKKwliMDAwICBSRVgtVVNCNjAKKzA1ODUgIEZsYXNoUG9pbnQgVGVjaG5vbG9neSwgSW5jLgorCTAwMDEgIERpZ2l0YWwgQ2FtZXJhCisJMDAwMiAgRGlnaXRhbCBDYW1lcmEKKwkwMDAzICBEaWdpdGFsIENhbWVyYQorCTAwMDQgIERpZ2l0YWwgQ2FtZXJhCisJMDAwNSAgRGlnaXRhbCBDYW1lcmEKKwkwMDA2ICBEaWdpdGFsIENhbWVyYQorCTAwMDcgIERpZ2l0YWwgQ2FtZXJhCisJMDAwOCAgRGlnaXRhbCBDYW1lcmEKKwkwMDA5ICBEaWdpdGFsIENhbWVyYQorCTAwMGEgIERpZ2l0YWwgQ2FtZXJhCisJMDAwYiAgRGlnaXRhbCBDYW1lcmEKKwkwMDBjICBEaWdpdGFsIENhbWVyYQorCTAwMGQgIERpZ2l0YWwgQ2FtZXJhCisJMDAwZSAgRGlnaXRhbCBDYW1lcmEKKwkwMDBmICBEaWdpdGFsIENhbWVyYQorMDU4NiAgWnlYRUwgQ29tbXVuaWNhdGlvbnMgQ29ycC4KKwkxMDAwICBPbW5pIE5FVCBNb2RlbSAvIElTRE4gVEEKKwkxNTAwICBPbW5pIDU2SyBQbHVzCisJMjAxMSAgU2NvcnBpb24tOTgwTiBrZXlib2FyZAorCTMzMDQgIExBTiBNb2RlbQorCTMzMGEgIEFEU0wgTW9kZW0gSW50ZXJmYWNlCisJMzMwZSAgVVNCIEJyb2FkYmFuZCBBRFNMIE1vZGVtIFJldiAxLjEwCisJMzQwMCAgWnlBSVIgQi0yMjAgSUVFRSA4MDIuMTFiIEFkYXB0ZXIKKwkzNDAxICBaeUFJUiBHLTIyMAorCTM0MDIgIChaRDEyMTEpSUVFRSA4MDIuMTFiK2cgQWRhcHRlcgorCTM0MDcgIEctMjAwIHYyCisJMzQwOSAgQUctMjI1SAorCTM0MGEgIE0tMjAyCisJMzQwZiAgRy0yMjAgdjIKKwkzNDEwICBXaS1GaSBXaXJlbGVzcyBMQU4gQWRhcHRlcgorCTM0MTIgIFdpLUZpIFdpcmVsZXNzIExBTiBBZGFwdGVyCisJMzQxMyAgQUctMjI1SCB2MiA4MDIuMTFhL2cgV2ktRmkgRmluZGVyICYgQWRhcHRlcgorCTM0MTUgIEctMjEwSCA4MDIuMTFnIFdpcmVsZXNzIEFkYXB0ZXIKKzA1ODcgIEFtZXJpY2EgS290b2J1a2kgRWxlY3Ryb25pY3MgSW5kdXN0cmllcywgSW5jLgorMDU4OCAgU2FwaWVuIERlc2lnbgorMDU4OSAgVmljdHJvbgorMDU4YSAgTm9oYXUgQ29ycC4KKzA1OGIgIEluZmluZW9uIFRlY2hub2xvZ2llcworMDU4YyAgSW4gRm9jdXMgU3lzdGVtcworCTAwMDcgIEZsYXNoCisJMDAwOCAgTFAxMzAKKwkwMDBhICBMUDUzMAorCTAwMTAgIFByb2plY3RvcgorCTAwMTEgIFByb2plY3RvcgorCTAwMTIgIFByb2plY3RvcgorCTAwMTMgIFByb2plY3RvcgorCTAwMTQgIFByb2plY3RvcgorCTAwMTUgIFByb2plY3RvcgorCTAwMTYgIFByb2plY3RvcgorCTAwMTcgIFByb2plY3RvcgorCTAwMTggIFByb2plY3RvcgorCTAwMTkgIFByb2plY3RvcgorCTAwMWEgIFByb2plY3RvcgorCTAwMWIgIFByb2plY3RvcgorCTAwMWMgIFByb2plY3RvcgorCTAwMWQgIFByb2plY3RvcgorCTAwMWUgIFByb2plY3RvcgorCTAwMWYgIFByb2plY3RvcgorMDU4ZCAgTWljcmVsIFNlbWljb25kdWN0b3IKKzA1OGUgIFRyaXBhdGggVGVjaG5vbG9neSwgSW5jLgorMDU4ZiAgQWxjb3IgTWljcm8gQ29ycC4KKwkyNDEyICBTQ2FyZCBSL1cgQ1NSLTE0NQorCTI4MDIgIE1vbnRlcmV5IEtleWJvYXJkCisJNTQ5MiAgSHViCisJNjIzMiAgSGktU3BlZWQgMTYtaW4tMSBGbGFzaCBDYXJkIFJlYWRlci9Xcml0ZXIKKwk2MzYwICBNdWx0aW1lZGlhIENhcmQgUmVhZGVyCisJNjM2MSAgTXVsdGltZWRpYSBDYXJkIFJlYWRlcgorCTYzNjIgIEhpLVNwZWVkIDIxLWluLTEgRmxhc2ggQ2FyZCBSZWFkZXIvV3JpdGVyIChJbnRlcm5hbC9FeHRlcm5hbCkKKwk2Mzc3ICBNdWx0aW1lZGlhIENhcmQgUmVhZGVyCisJNjM4NiAgTWVtb3J5IENhcmQKKwk2Mzg3ICBUcmFuc2NlbmQgSmV0Rmxhc2ggRmxhc2ggRHJpdmUKKwk2MzkwICBVU0IgMi4wLUlERSBicmlkZ2UKKwk5MjEzICBNYWNBbGx5IEtiZCBIdWIKKwk5MjE1ICBBVTk4MTQgSHViCisJOTI1NCAgSHViCisJOTMxMCAgTWFzcyBTdG9yYWdlIChVSUQ0LzVBICYgVUlEN0EpCisJOTMyMCAgTWljcm8gU3RvcmFnZSBEcml2ZXIgZm9yIFdpbjk4CisJOTMyMSAgTWljcm8gU3RvcmFnZSBEcml2ZXIgZm9yIFdpbjk4CisJOTMzMCAgU0QgUmVhZGVyCisJOTMzMSAgTWljcm8gU3RvcmFnZSBEcml2ZXIgZm9yIFdpbjk4CisJOTM0MCAgRGVsa2luIGVGaWxtIFJlYWRlci0zMgorCTkzNTAgIERlbGtpbiBlRmlsbSBSZWFkZXItMzIKKwk5MzYwICA4LWluLTEgTWVkaWEgQ2FyZCBSZWFkZXIKKwk5MzYxICBNdWx0aW1lZGlhIENhcmQgUmVhZGVyCisJOTM2OCAgTXVsdGltZWRpYSBDYXJkIFJlYWRlcgorCTkzODAgIEZsYXNoIGRyaXZlCisJOTM4MiAgQWNlci9Td2VleCBGbGFzaCBkcml2ZQorCTk0MTAgIEtleWJvYXJkCisJOTQ3MiAgS2V5Ym9hcmQgSHViCisJOTUxMCAgQ2h1bmdod2FUTCBVU0IwMiBTbWFydGNhcmQgUmVhZGVyCisJOTUyMCAgRU1WIENlcnRpZmllZCBTbWFydCBDYXJkIFJlYWRlcgorCTk3MjAgIFVTQi1TZXJpYWwgQWRhcHRlcgorMDU5MCAgT21yb24gQ29ycC4KKwkwMDA0ICBDYWJsZSBNb2RlbQorCTAwMGIgIE1SNTZTVlMKKwkwMDI4ICBISi03MjBJVCBQZWRvbWV0ZXIKKzA1OTEgIFF1ZXN0cmEgQ29uc3VsdGluZworMDU5MiAgUG93ZXJ3YXJlIENvcnAuCisJMDAwMiAgVVBTIChYLVNsb3QpCiswNTkzICBJbmNpdGUKKzA1OTQgIFByaW5jZXRvbiBHcmFwaGljIFN5c3RlbXMKKzA1OTUgIFpvcmFuIE1pY3JvZWxlY3Ryb25pY3MsIEx0ZAorCTEwMDEgIERpZ2l0cmV4IERTQy0xMzAwL0RTQy0yMTAwIChtYXNzIHN0b3JhZ2UgbW9kZSkKKwk0MzQzICBEaWdpdGFsIENhbWVyYSBFWC0yMCBEU0MKKzA1OTYgIE1pY3JvVG91Y2ggU3lzdGVtcywgSW5jLgorCTAwMDEgIFRvdWNoc2NyZWVuCisJMDAwMiAgVG91Y2ggU2NyZWVuIENvbnRyb2xsZXIKKzA1OTcgIFRyaXNpZ25hbCBDb21tdW5pY2F0aW9ucworMDU5OCAgTmlpZ2F0YSBDYW5vdGVjIENvLiwgSW5jLgorMDU5OSAgQnJpbGxpYW5jZSBTZW1pY29uZHVjdG9yLCBJbmMuCiswNTlhICBTcGVjdHJ1bSBTaWduYWwgUHJvY2Vzc2luZywgSW5jLgorMDU5YiAgSW9tZWdhIENvcnAuCisJMDAwMSAgWmlwIDEwMCAoVHlwZSAxKQorCTAwMGIgIFppcCAxMDAgKFR5cGUgMikKKwkwMDIxICBXaW45OCBEaXNrIENvbnRyb2xsZXIKKwkwMDMwICBaaXAgMjUwIChWZXIgMSkKKwkwMDMxICBaaXAgMTAwIChUeXBlIDMpCisJMDAzMiAgWmlwIDI1MCAoVmVyIDIpCisJMDAzNCAgWmlwIDEwMCBEcml2ZXIKKwkwMDM3ICBaaXAgNzUwIE1CCisJMDA0MCAgU0NTSSBCcmlkZ2UKKwkwMDQyICBSZXYgNzAgR0IKKwkwMDUwICBaaXAgQ0QgNjUwIFdyaXRlcgorCTAwNTMgIENEUlc1NTI5MkVYVCBDRC1SVyBFeHRlcm5hbCBEcml2ZQorCTAwNTcgIE1hc3MgU3RvcmFnZSBEZXZpY2UKKwkwMDVkICBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJMDA1ZiAgTWFzcyBTdG9yYWdlIERldmljZQorCTAwNjAgIFBDTUNJQSBQb2NrZXRaaXAgRG9jaworCTAwNjEgIFZhcm8gUG9ja2V0WmlwIDQwIE1QMyBQbGF5ZXIKKwkwMDZkICBIaXBaaXAgTVAzIFBsYXllcgorCTAwN2MgIFVsdHJhIE1heCBVU0IvMTM5NAorCTAwZGIgIEZvdG9TaG93IFppcCAyNTAgRHJpdmVyCisJMDE1MCAgTWFzcyBTdG9yYWdlIERldmljZQorCTAxNWQgIFN1cGVyIERWRCBXcml0ZXIKKwkwMTczICBIaS1TcGVlZCBVU0ItdG8tSURFIEJyaWRnZSBDb250cm9sbGVyCisJMDE3NCAgSGktU3BlZWQgVVNCLXRvLUlERSBCcmlkZ2UgQ29udHJvbGxlcgorCTAxNzYgIEhpLVNwZWVkIFVTQi10by1JREUgQnJpZGdlIENvbnRyb2xsZXIKKwkwMTc3ICBIaS1TcGVlZCBVU0ItdG8tSURFIEJyaWRnZSBDb250cm9sbGVyCisJMDE3OCAgSGktU3BlZWQgVVNCLXRvLUlERSBCcmlkZ2UgQ29udHJvbGxlcgorCTAxNzkgIEhpLVNwZWVkIFVTQi10by1JREUgQnJpZGdlIENvbnRyb2xsZXIKKwkwMTdhICBIREQKKwkwMTdiICBIREQvMTM5NEEKKwkwMTdjICBIREQvMTM5NEIKKwkwMjUxICBPcHRpY2FsCisJMDI1MiAgT3B0aWNhbAorCTEwNTIgIERWRCtSVyBFeHRlcm5hbCBEcml2ZQorMDU5YyAgQS1UcmVuZCBUZWNobm9sb2d5IENvLiwgTHRkCiswNTlkICBBZHZhbmNlZCBJbnB1dCBEZXZpY2VzCiswNTllICBJbnRlbGxpZ2VudCBJbnN0cnVtZW50YXRpb24KKzA1OWYgIExhQ2llLCBMdGQKKwkwMjAxICBTdHVkaW9Ecml2ZSBVU0IyCisJMDIwMiAgU3R1ZGlvRHJpdmUgVVNCMgorCTAyMDMgIFN0dWRpb0RyaXZlIFVTQjIKKwkwMjExICBQb2NrZXREcml2ZQorCTAyMTIgIFBvY2tldERyaXZlCisJMDIxMyAgUG9ja2V0RHJpdmUgVVNCMgorCTAzMjMgIExhQ2llIGQyIERyaXZlIFVTQjIKKwkwNjQxICBNb2JpbGUgSGFyZCBEcml2ZQorCTEwMTAgIERlc2t0b3AgSGFyZCBEcml2ZQorCWE2MDEgIEhhcmREcml2ZQorCWE2MDIgIENEIFIvVworMDVhMCAgVmV0cm9uaXggQ29ycC4KKzA1YTEgIFVTQyBDb3JwLgorMDVhMiAgRnVqaSBGaWxtIE1pY3JvZGV2aWNlcyBDby4sIEx0ZAorMDVhMyAgQVJDIEludGVybmF0aW9uYWwKKzA1YTQgIE9ydGVrIFRlY2hub2xvZ3ksIEluYy4KKwk5NzIwICBLZXlib2FyZCBNb3VzZQorCTk3MjIgIEtleWJvYXJkCisJOTczMSAgTUNLLTYwMFcvTUNLLTgwMFVTQiBLZXlib2FyZAorMDVhNSAgU2FtcG8gVGVjaG5vbG9neSBDb3JwLgorMDVhNiAgQ2lzY28gU3lzdGVtcywgSW5jLgorCTAwMDEgIENWQTEyNCBDYWJsZSBWb2ljZSBBZGFwdGVyIChXRE0pCisJMDAwMiAgQ1ZBMTIyIENhYmxlIFZvaWNlIEFkYXB0ZXIgKFdETSkKKwkwMDAzICBDVkExMjRFIENhYmxlIFZvaWNlIEFkYXB0ZXIgKFdETSkKKwkwMDA0ICBDVkExMjJFIENhYmxlIFZvaWNlIEFkYXB0ZXIgKFdETSkKKzA1YTcgIEJvc2UgQ29ycC4KKzA1YTggIFNwYWNldGVjIElNQyBDb3JwLgorMDVhOSAgT21uaVZpc2lvbiBUZWNobm9sb2dpZXMsIEluYy4KKwkwNTExICBPVjUxMSBXZWJDYW0KKwkwNTE4ICBPVjUxOCBXZWJDYW0KKwkwNTE5ICBPVjUxOSBNaWNyb3Bob25lCisJMTU1MCAgVkVITyBGaWxtc2Nhbm5lcgorCTI4MDAgIFN1cGVyQ0FNCisJNDUxOSAgV2ViY2FtIENsYXNzaWMKKwk4NTE5ICBPVjUxOSBXZWJDYW0KKwlhNTExICBPVjUxMSsgV2ViQ2FtCisJYTUxOCAgRC1MaW5rIERTQi1DMzEwIFdlYkNhbQorMDVhYSAgVXRpbHV4IFNvdXRoIENoaW5hLCBMdGQKKzA1YWIgIEluLVN5c3RlbSBEZXNpZ24KKwkwMDAyICBQYXJhbGxlbCBQb3J0CisJMDAzMCAgU3RvcmFnZSBBZGFwdGVyIFYyIChUUFApCisJMDAzMSAgQVRBIEJyaWRnZQorCTAwNjAgIFVTQiAyLjAgQVRBIEJyaWRnZQorCTAwNjEgIFN0b3JhZ2UgQWRhcHRlciBWMyAoVFBQLUkpCisJMDEwMSAgU3RvcmFnZSBBZGFwdGVyIChUUFApCisJMDEzMCAgQ29tcGFjdCBGbGFzaCBhbmQgTWljcm9kcml2ZSBSZWFkZXIgKFRQUCkKKwkwMjAwICBVU1M3MjUgQVRBIEJyaWRnZQorCTAyMDEgIFN0b3JhZ2UgQWRhcHRlciAoVFBQKQorCTAyMDIgIEFUQSBCcmlkZ2UKKwkwMzAwICBQb3J0YWJsZSBIYXJkIERyaXZlIChUUFApCisJMDMwMSAgUG9ydGFibGUgSGFyZCBEcml2ZSBWMgorCTAzNTAgIFBvcnRhYmxlIEhhcmQgRHJpdmUgKFRQUCkKKwkwMzUxICBQb3J0YWJsZSBIYXJkIERyaXZlIFYyCisJMDgxYSAgQVRBIEJyaWRnZQorCTBjZGEgIEFUQSBCcmlkZ2UgZm9yIENELVIvUlcKKwkxMDAxICBCQVlJIFByaW50ZXIgQ2xhc3MgU3VwcG9ydAorCTU3MDAgIFN0b3JhZ2UgQWRhcHRlciBWMiAoVFBQKQorCTU3MDEgIFVTQiBTdG9yYWdlIEFkYXB0ZXIgVjIKKwk1OTAxICBTbWFydCBCb2FyZCAoVFBQKQorCTVhMDEgIEFUSSBTdG9yYWdlIEFkYXB0ZXIgKFRQUCkKKwk1ZDAxICBEYXRhQm9vayBBZGFwdGVyIChUUFApCiswNWFjICBBcHBsZSwgSW5jLgorCTAyMDEgIFVTQiBLZXlib2FyZCBbQWxwcyBvciBMb2dpdGVjaCwgTTI0NTJdCisJMDIwMiAgS2V5Ym9hcmQgW0FMUFNdCisJMDIwNSAgRXh0ZW5kZWQgS2V5Ym9hcmQgW01pdHN1bWldCisJMDIwNiAgRXh0ZW5kZWQgS2V5Ym9hcmQgW01pdHN1bWldCisJMDIwYiAgUHJvIEtleWJvYXJkIFtNaXRzdW1pLCBBMTA0OC9VUyBsYXlvdXRdCisJMDIwYyAgRXh0ZW5kZWQgS2V5Ym9hcmQgW01pdHN1bWldCisJMDIwZCAgUHJvIEtleWJvYXJkIFtNaXRzdW1pLCBBMTA0OC9KSVMgbGF5b3V0XQorCTAyMGUgIEludGVybmFsIEtleWJvYXJkL1RyYWNrcGFkCisJMDIwZiAgSW50ZXJuYWwgS2V5Ym9hcmQvVHJhY2twYWQKKwkwMjFiICBJbnRlcm5hbCBLZXlib2FyZC9UcmFja3BhZAorCTAyMjAgIEFsdW1pbnVtIEtleWJvYXJkCisJMDIyMSAgS2V5Ym9hcmQgKEFsdW1pbml1bSkgKElTTykKKwkwMjI5ICBJbnRlcm5hbCBLZXlib2FyZC9UcmFja3BhZCAoTWFjQm9vayBQcm8pIChBTlNJKQorCTAyMmEgIEludGVybmFsIEtleWJvYXJkL1RyYWNrcGFkIChNYWNCb29rIFBybykgKElTTykKKwkwMjJiICBJbnRlcm5hbCBLZXlib2FyZC9UcmFja3BhZCAoTWFjQm9vayBQcm8pIChKSVMpCisJMDMwMSAgVVNCIE1vdXNlIFtNaXRzdW1pLCBNNDg0OF0KKwkwMzAyICBPcHRpY2FsIE1vdXNlIFtGdWppdHN1XQorCTAzMDQgIE9wdGljYWwgVVNCIE1vdXNlIFtNaXRzdW1pXQorCTAzMDYgIE9wdGljYWwgVVNCIE1vdXNlIFtGdWppdHN1XQorCTEwMDAgIEJsdWV0b290aCBIQ0kgTWFjQm9va1BybyAoSElEIG1vZGUpCisJMTAwMSAgS2V5Ym9hcmQgSHViIFtBTFBTXQorCTEwMDIgIEV4dGVuZGVkIEtleWJvYXJkIEh1YiBbTWl0c3VtaV0KKwkxMDAzICBIdWIgaW4gUHJvIEtleWJvYXJkIFtNaXRzdW1pLCBBMTA0OF0KKwkxMDA2ICBIdWIgaW4gQWx1bWludW0gS2V5Ym9hcmQKKwkxMTAxICBTcGVha2VycworCTEyMDEgIDNHIGlQb2QKKwkxMjAyICBpUG9kIDJHCisJMTIwMyAgaVBvZCA0LkdlbiBHcmF5c2NhbGUgNDBHCisJMTIwNCAgaVBvZCBbUGhvdG9dCisJMTIwNSAgaVBvZCBNaW5pIDEuR2VuLzIuR2VuCisJMTIwNiAgaVBvZCAnMDYnCisJMTIwNyAgaVBvZCAnMDcnCisJMTIwOCAgaVBvZCAnMDgnCisJMTIwOSAgaVBvZCBWaWRlbworCTEyMGEgIGlQb2QgTmFubworCTEyNjAgIGlQb2QgTmFubyAyLkdlbgorCTEyNjEgIGlQb2QgQ2xhc3NpYworCTEzMDAgIGlQb2QgU2h1ZmZsZQorCTEzMDEgIGlQb2QgU2h1ZmZsZSAyLkdlbgorCTgyMDIgIEhDRiBWLjkwIERhdGEvRmF4IE1vZGVtCisJODIwMyAgQmx1ZXRvb3RoIEhDSQorCTgyMDQgIEJsdWV0b290aCBIQ0kgW0JsdWV0b290aCAyLjAgKyBFRFIsIGJ1aWxkLWluXQorCTgyMDUgIEJsdWV0b290aCBIQ0kgTWFjQm9va1BybworCTgyMDYgIEJsdWV0b290aCBVU0IgSG9zdCBDb250cm9sbGVyCisJODI0MCAgSVIgUmVjZWl2ZXIgW2J1aWxkLWluXQorCTgzMDAgIEJ1aWx0LWluIGlTaWdodCAobm8gZmlybXdhcmUgbG9hZGVkKQorCTg1MDEgIEJ1aWx0LWluIGlTaWdodCBbTWljcm9uXQorCTkxMmYgIEh1YiBpbiAzMCIgQ2luZW1hIERpc3BsYXkKKwk5MjIxICAzMCIgQ2luZW1hIERpc3BsYXkKKwlmZmZmICBCbHVldG9vdGggaW4gREZVIG1vZGUgLSBEcml2ZXIKKzA1YWQgIFkuQy4gQ2FibGUgVS5TLkEuLCBJbmMuCiswNWFlICBTeW5vcHN5cywgSW5jLgorMDVhZiAgSmluZy1Nb2xkIEVudGVycHJpc2UgQ28uLCBMdGQKKwkwODIxICBJREUgdG8KKwk5MTY3ICBLQiA5MTUxQiAtIDY3OAorCTkyNjcgIEtCIDkyNTFCIC0gNjc4IE1vdXNlCiswNWIwICBGb3VudGFpbiBUZWNobm9sb2dpZXMsIEluYy4KKzA1YjEgIEZpcnN0IEludGVybmF0aW9uYWwgQ29tcHV0ZXIsIEluYy4KKwkxMzg5ICBCbHVldG9vdGggV2lyZWxlc3MgQWRhcHRlcgorMDViNCAgTEcgU2VtaWNvbiBDby4sIEx0ZAorCTQ4NTcgIE0tQW55IERBSC0yMTAKKwk2MDAxICBEaWdpc2V0dGUgRFVPLU1QMyBBUi0xMDAKKzA1YjUgIERpYWxvZ2ljIENvcnAuCiswNWI2ICBQcm94aW1hIENvcnAuCiswNWI3ICBNZWRpYW5peCBTZW1pY29uZHVjdG9yLCBJbmMuCiswNWI4ICBBZ2lsZXIsIEluYy4KKwkzMDAyICBTY3JvbGwgTW91c2UKKzA1YjkgIFBoaWxpcHMgUmVzZWFyY2ggTGFib3JhdG9yaWVzCiswNWJhICBEaWdpdGFsUGVyc29uYSwgSW5jLgorMDViYiAgR3JleSBDZWxsIFN5c3RlbXMKKzA1YmMgIDNHIEdyZWVuIEdyZWVuIEdsb2JlIENvLiwgTHRkCisJMDAwNCAgVHJhY2tiYWxsCiswNWJkICBSQUZJIEdtYkggJiBDby4gS0cKKzA1YmUgIFR5Y28gRWxlY3Ryb25pY3MgKFJheWNoZW0pCiswNWJmICBTICYgUyBSZXNlYXJjaAorMDVjMCAgS2VpbCBTb2Z0d2FyZQorMDVjMSAgS2F3YXNha2kgTWljcm9lbGVjdHJvbmljcywgSW5jLgorMDVjMiAgTWVkaWEgUGhvbmljcyAoU3Vpc3NlKSBTLkEuCiswNWM1ICBEaWdpIEludGVybmF0aW9uYWwsIEluYy4KKwkwMDAyICBBY2NlbGVQb3J0IFVTQiAyCisJMDAwNCAgQWNjZWxlUG9ydCBVU0IgNAorCTAwMDggIEFjY2VsZVBvcnQgVVNCIDgKKzA1YzYgIFF1YWxjb21tLCBJbmMuCisJMzEwMCAgQ0RNQSBXaXJlbGVzcyBNb2RlbS9QaG9uZQorCTMxOTYgIENETUEgV2lyZWxlc3MgTW9kZW0KKwkzMTk3ICBDRE1BIFdpcmVsZXNzIE1vZGVtL1Bob25lCiswNWM3ICBRdHJvbml4IENvcnAuCisJMDExMyAgUEMgTGluZSBNb3VzZQorCTEwMDEgIEx5bnggTW91c2UKKwkyMDAxICBLZXlib2FyZAorCTIwMTEgIFNDb3JwaXVzIEtleWJvYXJkCisJNjAwMSAgVGVuLUtleXBhZAorMDVjOCAgQ2hlbmcgVWVpIFByZWNpc2lvbiBJbmR1c3RyeSBDby4sIEx0ZCAoRm94bGluaykKKzA1YzkgIFNlbXRlY2ggQ29ycC4KKzA1Y2EgIFJpY29oIENvLiwgTHRkCisJMDEwMSAgUkRDLTUzMDAgQ2FtZXJhCisJMDMyNSAgQ2FwbGlvIEdYIChwdHApCisJMDMyZCAgQ2FwbGlvIEdYIDggKHB0cCkKKwkwMzJmICBDYXBsaW8gUjMgKHB0cCkKKwkwM2ExICBJUzIwMGUKKwkwNDAzICBQcmludGluZyBTdXBwb3J0CisJMDQwNSAgVHlwZSAxMDEKKwkwNDA2ICBUeXBlIDEwMgorCTE4MzAgIFZpc3VhbCBDb21tdW5pY2F0aW9uIENhbWVyYSBWR1AtVkNDMgorCTE4MzUgIFZpc3VhbCBDb21tdW5pY2F0aW9uIENhbWVyYSBWR1AtVkNDNQorCTE4NzAgIFdlYmNhbSAxMDAwCisJMjIwMSAgUkRDLTcgQ2FtZXJhCisJMjIwMiAgQ2FwbGlvIFJSMzAKKwkyMjAzICBDYXBsaW8gMzAwRworCTIyMDQgIENhcGxpbyBHMworCTIyMDUgIENhcGxpbyBSUjMwIC8gTWVkaW9uIE1EIDYxMjYgQ2FtZXJhCisJMjIwNiAgS29uaWNhIERHLTNaCisJMjIwNyAgQ2FwbGlvIFBybyBHMworCTIyMDggIENhcGxpbyBHNAorCTIyMDkgIENhcGxpbyA0MDBHIHdpZGUKKwkyMjBhICBLT05JQ0EgTUlOT0xUQSBERy00V2lkZQorCTIyMGIgIENhcGxpbyBSWAorCTIyMGMgIENhcGxpbyBHWAorCTIyMGQgIENhcGxpbyBSMS9SWjEKKwkyMjBlICBTZWEgJiBTZWEgNTAwMEcKKwkyMjBmICBSb2xsZWkgZHI1IC8gUm9sbGVpIGRyNSAoUFRQIG1vZGUpCisJMjIxMSAgQ2FwbGlvIFIxUworCTIyMTIgIENhcGxpbyBSMXYgQ2FtZXJhCisJMjIxMyAgQ2FwbGlvIFIyCisJMjIxNCAgQ2FwbGlvIEdYIDgKKwkyMjE1ICBEU0MgNzI1CisJMjIxNiAgQ2FwbGlvIFIzCisJMjIyMiAgUkRDLWk1MDAKKzA1Y2IgIFBvd2VyVmlzaW9uIFRlY2hub2xvZ2llcywgSW5jLgorCTE0ODMgIFBWODYzMCBpbnRlcmZhY2UgKHNjYW5uZXJzLCB3ZWJjYW1zKQorMDVjYyAgRUxTQSBBRworCTIxMDAgIE1pY3JvTGluayBJU0ROIE9mZmljZQorCTIyMTkgIE1pY3JvTGluayBJU0ROCisJMjI2NSAgTWljcm9MaW5rIDU2aworCTIyNjcgIE1pY3JvTGluayA1NmsgKFYuMjUwKQorCTIyODAgIE1pY3JvTGluayA1NmsgRnVuCisJMzAwMCAgTWljb2xpbmsgVVNCMkV0aGVybmV0IFtwZWdhc3VzXQorCTMxMDAgIEFpckxhbmNlciBVU0ItMTEKKwkzMzYzICBNaWNyb0xpbmsgQURTTCBGdW4KKzA1Y2QgIFNpbGljb20sIEx0ZAorMDVjZSAgc2NpLXdvcnggR21iSAorMDVjZiAgU3VuZyBGb3JuIENvLiwgTHRkCiswNWQwICBHRSBNZWRpY2FsIFN5c3RlbXMgTHVuYXIKKzA1ZDEgIEJyYWluYm94ZXMsIEx0ZAorCTAwMDMgIEJsdWV0b290aCBBZGFwdGVyIEJMLTU1NAorMDVkMiAgV2F2ZSBTeXN0ZW1zIENvcnAuCiswNWQzICBUb2hva3UgUmljb2ggQ28uLCBMdGQKKzA1ZDUgIFN1cGVyIEdhdGUgVGVjaG5vbG9neSBDby4sIEx0ZAorMDVkNiAgUGhpbGlwcyBTZW1pY29uZHVjdG9ycywgQ0lDVAorMDVkNyAgVGhvbWFzICYgQmV0dHMgQ29ycC4KKwkwMDk5ICAxME1icHMgRXRoZXJuZXQgW2tsc2ldCiswNWQ4ICBVbHRpbWEgRWxlY3Ryb25pY3MgQ29ycC4KKwk0MDAxICBBcnRlYyBVbHRpbWEgMjAwMAorCTQwMDIgIEFydGVjIFVsdGltYSAyMDAwIChHVDY4MDEgYmFzZWQpL0xpZmV0ZWMgTFQ5Mzg1L1NjYW5NYWdpYyAxMjAwIFVCIFBsdXMgU2Nhbm5lcgorCTQwMDMgIEFydGVjIEUrIDQ4VQorCTQwMDQgIEFydGVjIEUrIFBybworCTQwMDUgIE1FTTQ4VQorCTQwMDYgIFRSVVNUIEVBU1kgV0VCU0NBTiAxOTIwMAorCTQwMDcgIFRSVVNUIDI0MEggRUFTWSBXRUJTQ0FOIEdPTEQKKwk0MDA4ICBUcnVzdCBFYXN5IFdlYnNjYW4gMTkyMDAKKwk0MDA5ICBVbWF4IEFzdHJhc2xpbQorCTQwMTMgIElUIFNjYW4gMTIwMAorCTgxMDUgIEFydGVjIFQxIFVTQiBUVkJPWCAoY29sZCkKKwk4MTA2ICBBcnRlYyBUMSBVU0IgVFZCT1ggKHdhcm0pCisJODEwNyAgQXJ0ZWMgVDEgVVNCIFRWQk9YIHdpdGggQU4yMjM1IChjb2xkKQorCTgxMDggIEFydGVjIFQxIFVTQiBUVkJPWCB3aXRoIEFOMjIzNSAod2FybSkKKwk4MTA5ICBBcnRlYyBUMSBVU0IyLjAgVFZCT1ggKGNvbGQKKzA1ZDkgIEF4aW9obSBUcmFuc2FjdGlvbiBTb2x1dGlvbnMKKwlhMjI1ICBBMjI1IFByaW50ZXIKKwlhNzU4ICBBNzU4IFByaW50ZXIKKwlhNzk0ICBBNzk0IFByaW50ZXIKKzA1ZGEgIE1pY3JvdGVrIEludGVybmF0aW9uYWwsIEluYy4KKwkwMDkxICBTY2FuTWFrZXIgWDZ1CisJMDA5MyAgU2Nhbk1ha2VyIFY2VVNMCisJMDA5NCAgUGhhbnRvbSAzMzZDWC9DMworCTAwOTkgIFNjYW5NYWtlciBYNi9YNlUKKwkwMDlhICBQaGFudG9tIEM2CisJMDBhMCAgUGhhbnRvbSAzMzZDWC9DMyAoIzIpCisJMDBhMyAgU2Nhbk1ha2VyIFY2VVNMCisJMDBhYyAgU2Nhbk1ha2VyIFY2VUwKKwkwMGI2ICBTY2FuTWFrZXIgVjZVUEwKKwkwMGVmICBTY2FuTWFrZXIgVjZVUEwKKwkxMDA2ICBKZW5vcHRpayBKRDM1MCBlbnRyYW5jZQorCTEwMTEgIE5ISiBDaGUtZXohIEtpc3MgRGlnaXRhbCBDYW1lcmEKKwkxMDE4ICBEaWdpdGFsIERyZWFtIEVuaWdtYSAxLjMKKwkxMDIwICBEaWdpdGFsIERyZWFtIGwnZXNwaW9uIHh0cmEKKwkxMDI1ICBUYWtlLWl0IFN0aWxsIENhbWVyYSBEZXZpY2UKKwkxMDI2ICBUYWtlLWl0CisJMTA0MyAgVGFrZS1JdCAxMzAwIERTQyBCdWxrIERyaXZlcgorCTEwNDUgIFRha2UtaXQgRDEKKwkxMDQ3ICBUYWtlLWl0IENhbWVyYSBDb21wb3NpdGUgRGV2aWNlCisJMTA0OCAgVGFrZS1pdCBRMworCTEwNDkgIDNNIFN0aWxsIENhbWVyYSBEZXZpY2UKKwkxMDUxICBDYW1jb3JkZXIgU2VyaWVzCisJMTA1MiAgTWFzcyBTdG9yYWdlIERldmljZQorCTEwNTMgIFRha2UtaXQgRFYgQ29tcG9zaXRlIERldmljZQorCTEwNTQgIE1hc3MgU3RvcmFnZSBEZXZpY2UKKwkxMDU1ICBEaWdpdGFsIENhbWVyYSBTZXJpZXMoNTM2KQorCTEwNTYgIE1hc3MgU3RvcmFnZSBEZXZpY2UKKwkxMDU3ICBUYWtlLWl0IERTQyBDYW1lcmEgRGV2aWNlKDUzNikKKwkxMDU4ICBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJMTA1OSAgQ2FtY29yZGVyIERTQyBTZXJpZXMKKwkxMDYwICBNaWNyb3RlayBUYWtlLWl0IE1WNTAwCisJMjAwNyAgQXJ0aXhTY2FuIERJIDEyMTAKKwkyMDBjICAxMzk0X1VTQjIgU2Nhbm5lcgorCTIwMGUgIEFydGl4U2NhbiBESSA4MTAKKwkyMDE3ICBVRiBJQ0UgU2Nhbm5lcgorCTIwMWMgIDQ4MDAgU2Nhbm5lcgorCTIwMWQgIEFydGl4U2NhbiBESSAxNjEwCisJMjAxZiAgNDgwMCBTY2FubmVyLUlDRQorCTIwMmUgIEFydGl4U2NhbiBESSAyMDIwCisJMjA4YiAgU2Nhbk1ha2VyIDY4MDAKKwkyMDhmICBBcnRpeFNjYW4gREkgMjAxMAorCTIwOWUgIFNjYW5NYWtlciA0NzAwTFAKKwkyMGE3ICBTY2FuTWFrZXIgNTYwMAorCTIwYjAgIFNjYW5NYWtlciBYMTJVU0wKKwkyMGIxICBTY2FuTWFrZXIgODcwMAorCTIwYjQgIFNjYW5NYWtlciA0NzAwCisJMjBiZCAgU2Nhbk1ha2VyIDU3MDAKKwkyMGM5ICBTY2FuTWFrZXIgNjcwMAorCTIwZDIgIE1pY3JvdGVrIEFydGl4U2NhbiAxODAwZgorCTIwZDYgIFBTNDAwMAorCTIwZGUgIFNjYW5NYWtlciA5ODAwWEwKKwkyMGUwICBTY2FuTWFrZXIgOTcwMFhMCisJMjBlZCAgU2Nhbk1ha2VyIDQ3MDAKKwkyMGVlICBNaWNvcnRlayBTY2FuTWFrZXIgWDEyVVNMCisJMzAwOCAgU2Nhbm5lcgorCTMwMGEgIDQ4MDAgSUNFIFNjYW5uZXIKKwkzMDBiICA0ODAwIFNjYW5uZXIKKwkzMDBmICBNaW5pU2NhbiBDNQorCTMwMjAgIDQ4MDBkcGkgU2Nhbm5lcgorCTMwMjEgIDEyMDBkcGkgU2Nhbm5lcgorCTMwMjIgIFNjYW5uZXIgNDgwMGRwaQorCTMwMjMgIFVTQjEyMDBJSSBTY2FubmVyCisJMzBjMSAgVVNCNjAwIFNjYW5uZXIKKwkzMGNlICBTY2FuTWFrZXIgMzgwMAorCTMwY2YgIFNjYW5NYWtlciA0ODAwCisJMzBkNCAgVVNCMTIwMCBTY2FubmVyCisJMzBkOCAgU2Nhbm5lcgorCTMwZDkgIFVTQjI0MDAgU2Nhbm5lcgorCTMwZTQgIFNjYW5NYWtlciA0MTAwCisJMzBlNSAgVVNCMzIwMCBTY2FubmVyCisJMzBlNiAgU2Nhbk1ha2VyIGkzMjAKKwk0MGIzICBTY2FuTWFrZXIgMzYwMAorCTQwYjggIFNjYW5NYWtlciAzNzAwCisJNDBjNyAgU2Nhbk1ha2VyIDQ2MDAKKwk0MGNhICBTY2FuTWFrZXIgMzYwMAorCTQwY2IgIFNjYW5NYWtlciAzNzAwCisJNDBkZCAgU2Nhbk1ha2VyIDM3NTBpCisJNDBmZiAgU2Nhbk1ha2VyIDM2MDAKKwk1MDAzICBHb3lhCisJNTAxMyAgMzIwMCBTY2FubmVyCisJODBhMyAgU2Nhbk1ha2VyIFY2VVNMICgjMikKKwk4MGFjICBTY2FuTWFrZXIgVjZVTC9TcGljeVUKKzA1ZGIgIFN1biBDb3JwLiAoU3VudGFjPykKKwkwMDAzICBTVU5UQUMgVS1DYWJsZSB0eXBlIEQyCisJMDAwNSAgU1VOVEFDIFUtQ2FibGUgdHlwZSBQMQorCTAwMDkgIFNVTlRBQyBTbGlwcGVyIFUKKwkwMDBhICBTVU5UQUMgSXItVHJpbml0eQorCTAwMGIgIFNVTlRBQyBVLUNhYmxlIHR5cGUgQTMKKwkwMDExICBTVU5UQUMgVS1DYWJsZSB0eXBlIEE0CiswNWRjICBMZXhhciBNZWRpYSwgSW5jLgorCTAwMDEgIGp1bXBTSE9UIENvbXBhY3RGbGFzaCBSZWFkZXIKKwkwMDAyICBKdW1wU2hvdAorCTAwMDMgIEp1bXBTaG90CisJMDA4MCAgSnVtcGRyaXZlIFNlY3VyZSA2NE1CCisJMDA4MSAgUkJDIENvbXBhY3QgRmxhc2ggRHJpdmUKKwkwMGE3ICBKdW1wRHJpdmUgSW1wYWN0CisJMDEwMCAgSnVtcERyaXZlIFBSTworCTAyMDAgIEp1bXBEcml2ZSAyLjAgUHJvCisJMDMwMCAgSnVtcGRyaXZlIEdleXNyCisJMDMwMSAgSnVtcERyaXZlIENsYXNzaWMKKwkwMzAyICBKRCBNaWNybworCTAzMDMgIEpEIE1pY3JvIFBybworCTAzMDQgIEpEIFNlY3VyZSBJSQorCTAzMTAgIEp1bXBEcml2ZQorCTAzMTEgIEp1bXBEcml2ZSBDbGFzc2ljCisJMDMxMiAgSkQgTWljcm8KKwkwMzEzICBKRCBNaWNybyBQcm8KKwkwMzIwICBKdW1wRHJpdmUKKwkwMzIxICBKRCBNaWNybworCTAzMjIgIEpEIE1pY3JvIFBybworCTAzMjMgIFVGQworCTAzMzAgIEp1bXBEcml2ZSBFeHByZXNzaW9uCisJMDM0MCAgSnVtcERyaXZlIFRBRAorCTAzNTAgIEV4cHJlc3MgQ2FyZAorCTA0MDAgIFVGREMKKwkwNDAxICBVRkRDCisJMDQwMyAgTG9ja2VkIEIgRGV2aWNlCisJMDQwNSAgTG9ja2VkIEMgRGV2aWNlCisJMDQwNyAgTG9ja2VkIEQgRGV2aWNlCisJMDQwOSAgTG9ja2VkIEUgRGV2aWNlCisJMDQwYiAgTG9ja2VkIEYgRGV2aWNlCisJMDQwZCAgTG9ja2VkIEcgRGV2aWNlCisJMDQwZiAgTG9ja2VkIEggRGV2aWNlCisJMDQxMCAgSnVtcERyaXZlCisJMDQxMSAgSnVtcERyaXZlCisJMDQxMyAgTG9ja2VkIEogRGV2aWNlCisJMDQxNSAgTG9ja2VkIEsgRGV2aWNlCisJMDQxNyAgTG9ja2VkIEwgRGV2aWNlCisJMDQxOSAgTG9ja2VkIE0gRGV2aWNlCisJMDQxYiAgTG9ja2VkIE4gRGV2aWNlCisJMDQxZCAgTG9ja2VkIE8gRGV2aWNlCisJMDQxZiAgTG9ja2VkIFAgRGV2aWNlCisJMDQyMCAgSnVtcERyaXZlCisJMDQyMSAgSnVtcERyaXZlCisJMDQyMyAgTG9ja2VkIFIgRGV2aWNlCisJMDQyNSAgTG9ja2VkIFMgRGV2aWNlCisJMDQyNyAgTG9ja2VkIFQgRGV2aWNlCisJMDQyOSAgTG9ja2VkIFUgRGV2aWNlCisJMDQyYiAgTG9ja2VkIFYgRGV2aWNlCisJMDQyZCAgTG9ja2VkIFcgRGV2aWNlCisJMDQyZiAgTG9ja2VkIFggRGV2aWNlCisJMDQzMSAgTG9ja2VkIFkgRGV2aWNlCisJMDQzMyAgTG9ja2VkIFogRGV2aWNlCisJNGQwMiAgTVAzIFBsYXllcgorCTRkMTIgIE1QMyBQbGF5ZXIKKwlhMzAwICBKdW1wRHJpdmUyCisJYTQwMCAgSnVtcERyaXZlIHRyYWRlOyBQcm8gNDAtNTAxCisJYTQxMCAgSnVtcERyaXZlIDEyOE1CLzI1Nk1CCisJYTQxMSAgSnVtcERyaXZlIFRyYXZlbGVyCisJYTQyMCAgSnVtcERyaXZlIFBybworCWE0MjEgIEp1bXBEcml2ZSBQcm8gSUkKKwlhNDIyICBKdW1wRHJpdmUgTWljcm8gUHJvCisJYTQzMCAgSnVtcERyaXZlIFNlY3VyZQorCWE0MzEgIEp1bXBEcml2ZSBTZWN1cmUgSUkKKwlhNDMyICBKdW1wRHJpdmUgQ2xhc3NpYworCWE0NDAgIEp1bXBEcml2ZSBMaWdodG5pbmcKKwlhNDUwICBKdW1wRHJpdmUgVG91Y2hHdWFyZAorCWE0NjAgIEpEIE1lcmN1cnkKKwlhNTAxICBKdW1wRHJpdmUgQ2xhc3NpYworCWE1MTAgIEp1bXBEcml2ZSBTcG9ydAorCWE1MzAgIEp1bXBEcml2ZSBFeHByZXNzaW9uCisJYTUzMSAgSnVtcERyaXZlIFNlY3VyZSBJSQorCWE1NjAgIEp1bXBEcml2ZSBGaXJlRmx5CisJYTcwMSAgSnVtcERyaXZlIEZpcmVGbHkKKwliMDAyICBVU0IgQ0YgUmVhZGVyCisJYjAxOCAgTXVsdGktQ2FyZCBSZWFkZXIKKzA1ZGQgIERlbHRhIEVsZWN0cm9uaWNzLCBJbmMuCisJZmYzMSAgQVdVLTEyMAorCWZmMzIgIEZyaWVuZGx5TkVUIEFlcm9MQU4gQUwyMDExCisJZmYzNSAgUENXIDEwMCAtIFdpcmVsZXNzIDgwMi4xMWIgQWRhcHRlcgorCWZmOTEgIDJXaXJlIFBDIFBvcnQgUGhvbmVsaW5lIDEwTWJwcyBBZGFwdGVyCiswNWRmICBTaWxpY29uIFZpc2lvbiwgSW5jLgorMDVlMCAgU3ltYm9sIFRlY2hub2xvZ2llcworCTA3MDAgIEJhciBDb2RlIFNjYW5uZXIgKENTMTUwNCkKKwkwODAwICBTcGVjdHJ1bTI0IFdpcmVsZXNzIExBTiBBZGFwdGVyCisJMTIwMCAgRFM2NjA4IEJhciBDb2RlIFNjYW5uZXIKKwkxOTAwICBTTkFQSSBJbWFnaW5nIERldmljZQorCTIwMDAgIE1DMzA5MCBSdWdnZWQgTW9iaWxlIENvbXB1dGVyCisJMjAwZCAgTUM3MCBSdWdnZWQgTW9iaWxlIENvbXB1dGVyCiswNWUxICBTeW50ZWsgU2VtaWNvbmR1Y3RvciBDby4sIEx0ZAorCTA1MDAgIERDLTExMlgKKwkwNTAxICBXZWJDYW0sIENoaXBzZXQgREMtMTEyNSBzaW1pbGFyIHRvIDE3NGY6YTMxMSAtIEFzdXMgRjJGLCBGMkosIEYzSiwgRjNULCBHMSwgWjUzSkEKKwkwODkwICBTVEswMTEgQ2FtZXJhCisJMDg5MiAgU1RLMDEzIENhbWVyYQorCTA4OTUgIFNUSzAxNiBDYW1lcmEKKwkwODk2ICBTVEswMTcgQ2FtZXJhCiswNWUyICBFbGVjVmlzaW9uLCBJbmMuCiswNWUzICBHZW5lc3lzIExvZ2ljLCBJbmMuCisJMDAwYSAgS2V5Ym9hcmQgd2l0aCBQUy8yIFBvcnQKKwkwMDBiICBNb3VzZQorCTAxMDAgIE5pbnRlbmRvIEdhbWUgQm95IEFkdmFuY2UgU1AKKwkwMTIwICBQYWNpZmljIEltYWdlIEVsZWN0cm9uaWNzIFByaW1lRmlsbSAxODAwdSBzbGlkZS9uZWdhdGl2ZSBzY2FubmVyCisJMDEzMSAgQ0YvU00gUmVhZGVyL1dyaXRlcgorCTAxNDIgIE11bHRpcGxlIFNsaWRlcyBTY2FubmVyLTM2MDAKKwkwMTQzICBNdWx0aXBsZSBGcmFtZXMgRmlsbSBTY2FubmVyLTM2c2VyaWVzCisJMDE4MCAgUGx1c3RlayBTY2FubmVyCisJMDE4MiAgV2l6ZSBNZWRpYSAxMDAwCisJMDE4OSAgU2NhbkpldCA0NjAwIHNlcmllcworCTAxOGEgIFhlcm94IDY0MDAKKwkwMzAwICBHTFVTQjk4UFQgUGFyYWxsZWwgUG9ydAorCTAzMDEgIFVTQjJMUFQgQ2FibGUgUmVsZWFzZTIKKwkwNDA2ICBIdWIKKwkwNTAxICBHTDYyMFVTQiBIb3N0LUhvc3QgaW50ZXJmYWNlCisJMDUwMiAgR0w2MjBVU0IgR2VuZUxpbmsgVVNCLVVTQiBCcmlkZ2UKKwkwNTA0ICBISUQgS2V5Ym9hcmQgRmlsdGVyCisJMDYwNCAgVVNCIDEuMSBIdWIKKwkwNjA1ICBVU0IgMi4wIEh1YiBbZWRuZXRdCisJMDYwNiAgVVNCIDIuMCBIdWIgLyBELUxpbmsgRFVCLUg0IFVTQiAyLjAgSHViCisJMDYwOCAgVVNCLTIuMCA0LVBvcnQgSFVCCisJMDY2MCAgVVNCIDIuMCBIdWIKKwkwNzAwICBTSUlHIFVTMjI1NiBDb21wYWN0Rmxhc2ggQ2FyZCBSZWFkZXIKKwkwNzAxICBVU0IgMi4wIElERSBBZGFwdGVyCisJMDcwMiAgVVNCIDIuMCBJREUgQWRhcHRlcgorCTA3MDMgIENhcmQgUmVhZGVyCisJMDcwNCAgQ2FyZCBSZWFkZXIKKwkwNzA1ICBDYXJkIFJlYWRlcgorCTA3MDYgIENhcmQgUmVhZGVyCisJMDcwNyAgQ2FyZCBSZWFkZXIKKwkwNzA4ICBDYXJkIFJlYWRlcgorCTA3MDkgIENhcmQgUmVhZGVyCisJMDcwYSAgUGVuIEZsYXNoCisJMDcwYiAgRE1IUzFCIFJldiAzIERGVSBBZGFwdGVyCisJMDcwZSAgWC1QUk8gQ1IyMHhBIFVTQiAyLjAgSW50ZXJuYWwgQ2FyZCBSZWFkZXIKKwkwNzBmICBQZW4gRmxhc2gKKwkwNzEwICBVU0IgMi4wIDMzLWluLTEgQ2FyZCBSZWFkZXIKKwkwNzExICBDYXJkIFJlYWRlcgorCTA3MTIgIERlbGtpbiBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJMDcxNSAgVVNCIDIuMCBtaWNyb1NEIFJlYWRlcgorCTA3NjAgIFVTQiAyLjAgQ2FyZCBSZWFkZXIvV3JpdGVyCisJMDc2MSAgR2VuZXN5cyBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJMDc4MCAgVVNCRlMgREZVIEFkYXB0ZXIKKwkwN2EwICBQZW4gRmxhc2gKKwkwOTI3ICBDYXJkIFJlYWRlcgorCTEyMDUgIEFmaWxpYXMgT3B0aWNhbCBNb3VzZSBIMzAwMworCWE3MDAgIFBlbiBGbGFzaAorCWYxMDIgIFZYNzAxMiBUViBCb3gKKwlmMTAzICBWWDcwMTIgVFYgQm94CisJZjEwNCAgVlg3MDEyIFRWIEJveAorCWZkMjEgIDNNIFRMMjAgVGVtcGVyYXR1cmUgTG9nZ2VyCisJZmUwMCAgUmF6ZXIgTW91c2UKKzA1ZTQgIFJlZCBXaW5nIENvcnAuCiswNWU1ICBGdWppIEVsZWN0cmljIENvLiwgTHRkCiswNWU2ICBLZWl0aGxleSBJbnN0cnVtZW50cworMDVlOCAgSUNDLCBJbmMuCiswNWU5ICBLYXdhc2FraSBMU0kKKwkwMDA4ICBLTDVLVVNCMTAxQiBFdGhlcm5ldCBba2xzaV0KKwkwMDA5ICBTb255IDEwTWJwcyBFdGhlcm5ldCBbcGVnYXN1c10KKwkwMDBjICBVU0ItdG8tUlMtMjMyCisJMDAwZCAgVVNCLXRvLVJTLTIzMgorCTAwMTQgIFJTLTIzMiBKMTA0CisJMDA0MCAgRXRoZXJuZXQgQWRhcHRlcgorCTIwMDggIEV0aGVybmV0IEFkYXB0ZXIKKzA1ZWIgIEZGQywgTHRkCiswNWVjICBDT00yMSwgSW5jLgorMDVlZSAgQ3l0ZWNoaW5mbyBJbmMuCiswNWVmICBBVkIsIEluYy4gW2Fua28/XQorCTAyMGEgIFRvcCBTaG90IFBlZ2FzdXMgSm95c3RpY2sKKwk4ODg0ICBNYWcgVHVyYm8gRm9yY2UgV2hlZWwKKwk4ODg4ICBUb3AgU2hvdCBGb3JjZSBGZWVkYmFjayBSYWNpbmcgV2hlZWwKKzA1ZjAgIENhbm9wdXMgQ28uLCBMdGQKKwkwMTAxICBEQS1Qb3J0IERBQworMDVmMSAgQ29tcGFzcyBDb21tdW5pY2F0aW9ucworMDVmMiAgRGV4aW4gQ29ycC4sIEx0ZAorCTAwMTAgIEFRIE1vdXNlCiswNWYzICBQSSBFbmdpbmVlcmluZywgSW5jLgorCTAwMDcgIEtpbmVzaXMgQWR2YW50YWdlIFBSTyBNUEMvVVNCIEtleWJvYXJkCisJMDA4MSAgS2luZXNpcyBJbnRlZ3JhdGVkIEh1YgorCTAyMGIgIFBTMiBBZGFwdGVyCisJMDIzMiAgWC1LZXlzIFN3aXRjaCBJbnRlcmZhY2UsIFByb2dyYW1taW5nIE1vZGUKKwkwMjYxICBYLUtleXMgU3dpdGNoIEludGVyZmFjZSwgU1BMQVQgTW9kZQorCTAyNjQgIFgtS2V5cyBTd2l0Y2ggSW50ZXJmYWNlLCBDb21wb3NpdGUgTW9kZQorMDVmNSAgVW5peHRhciBUZWNobm9sb2d5LCBJbmMuCiswNWY2ICBBT0MgSW50ZXJuYXRpb25hbAorMDVmNyAgUkZDIERpc3RyaWJ1dGlvbihzKSBQVEUsIEx0ZAorMDVmOSAgUFNDIFNjYW5uaW5nLCBJbmMuCiswNWZhICBTaWVtZW5zIFRlbGVjb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBMdGQKKwkzMzAxICBLZXlib2FyZCB3aXRoIFBTLzIgTW91c2UgUG9ydAorCTMzMDIgIEtleWJvYXJkCisJMzMwMyAgS2V5Ym9hcmQgd2l0aCBQUy8yIE1vdXNlIFBvcnQKKzA1ZmMgIEhhcm1hbiBNdWx0aW1lZGlhCisJNzg0OSAgSGFybWFuL0thcmRvbiBTb3VuZFN0aWNrcworMDVmZCAgSW50ZXJBY3QsIEluYy4KKwkwMjM5ICBTVi0yMzkgSGFtbWVySGVhZCBEaWdpdGFsCisJMDI1MSAgUmFpZGVyIFBybworCTAyNTMgIFByb1BhZCA4IERpZ2l0YWwKKwkwMjg2ICBTVi0yODYgQ3ljbG9uZSBEaWdpdGFsCisJMjYyYSAgM2RmeCBIYW1tZXJIZWFkIEZYCisJMjYyZiAgSGFtbWVySGVhZCBGeAorCWRhYWUgIEdhbWUgU2hhcmsKKzA1ZmUgIENoaWMgVGVjaG5vbG9neSBDb3JwLgorCTAwMDEgIE1vdXNlCisJMDAwMyAgQ3lwcmVzcyBVU0IgTW91c2UKKwkwMDA1ICBWaWV3bWFzdGVyIDREIEJyb3dzZXIgTW91c2UKKwkwMDA3ICBUd2luaGVhZCBNb3VzZQorCTAwMDkgIElubGFuZCBQcm8gNDUwMC81MDAwIE1vdXNlCisJMDAxMSAgQnJvd3NlciBNb3VzZQorCTEwMTAgIE9wdGljYWwgV2lyZWxlc3MKKzA1ZmYgIExlQ3JveSBDb3JwLgorMDYwMCAgQmFyY28gRGlzcGxheSBTeXN0ZW1zCiswNjAxICBKYXp6IEhpcHN0ZXIgQ29ycC4KKwkwMDAzICBJbnRlcm5ldCBTZWN1cml0eSBDby4sIEx0ZC4gU2VjdXJlS2V5CiswNjAyICBWaXN0YSBJbWFnaW5nLCBJbmMuCisJMTAwMSAgVmlDYW0gV2ViQ2FtCiswNjAzICBOb3ZhdGVrIE1pY3JvZWxlY3Ryb25pY3MgQ29ycC4KKwkwMGYxICBLZXlib2FyZAorCTY4NzEgIE1vdXNlCiswNjA0ICBKZWFuIENvLiwgTHRkCiswNjA1ICBBbmNob3IgQyZDIENvLiwgTHRkCiswNjA2ICBSb3lhbCBJbmZvcm1hdGlvbiBFbGVjdHJvbmljcyBDby4sIEx0ZAorMDYwNyAgQnJpZGdlIEluZm9ybWF0aW9uIENvLiwgTHRkCiswNjA4ICBHZW5yYWQgQWRzCiswNjA5ICBTTUsgTWFudWZhY3R1cmluZywgSW5jLgorCTAzMWQgIGVIb21lIEluZnJhcmVkIFJlY2VpdmVyCisJMDMyMiAgZUhvbWUgSW5mcmFyZWQgUmVjZWl2ZXIKKwlmZjEyICBTTUsgQmx1ZXRvb3RoIERldmljZQorMDYwYSAgV29ydGhpbmd0b24gRGF0YSBTb2x1dGlvbnMsIEluYy4KKzA2MGIgIFNvbGlkIFllYXIKKwkwMDAxICBNYWNBbGx5IEtleWJvYXJkCisJMTAwNiAgSmFwYW5lc2UgS2V5Ym9hcmQgLSAyNjBVCisJMjEwMSAgS2V5Ym9hcmQKKwk1ODExICBBQ0stNTcxVSBXaXJlbGVzcyBLZXlib2FyZAorCTU5MDMgIEphcGFuZXNlIEtleWJvYXJkIC0gNTk1VQorCTYwMDEgIFNvbGlkVGVrIFVTQiAycCBIVUIKKwk2MDAyICBTb2xpZFRlayBVU0IgS2V5Ym9hcmQKKwk2MDAzICBKYXBhbmVzZSBLZXlib2FyZCAtIDYwMEhNCisJYTAwMSAgTWF4d2VsbCBDb21wYWN0IFBjIFBNMworMDYwYyAgRUVIIERhdGFsaW5rIEdtYkgKKzA2MGQgIEF1Y3RvciBDb3JwLgorMDYwZSAgVHJhbnNtb25kZSBUZWNobm9sb2dpZXMsIEluYy4KKzA2MGYgIEpvaW5zb29uIEVsZWN0cm9uaWNzIE1mZy4gQ28uLCBMdGQKKzA2MTAgIENvc3RhciBFbGVjdHJvbmljcywgSW5jLgorMDYxMSAgVG90b2t1IEVsZWN0cmljIENvLiwgTHRkCiswNjEzICBUcmFuc0FjdCBUZWNobm9sb2dpZXMsIEluYy4KKzA2MTQgIEJpby1SYWQgTGFib3JhdG9yaWVzCiswNjE1ICBRdWFiYmluIFdpcmUgJiBDYWJsZSBDby4sIEluYy4KKzA2MTYgIEZ1dHVyZSBUZWNobm8gRGVzaWducyBQVlQsIEx0ZAorMDYxNyAgU3dpc3MgRmVkZXJhbCBJbnNpdHV0ZSBvZiBUZWNobm9sb2d5CiswNjE4ICBNYWNBbGx5CisJMDEwMSAgTW91c2UKKzA2MTkgIFNlaWtvIEluc3RydW1lbnRzLCBJbmMuCisJMDEwMSAgU0xQLTEwMCBEcml2ZXIKKwkwMTAyICBTTFAtMjAwIERyaXZlcgorCTAxMDMgIFNMUC0xMDBOIERyaXZlcgorCTAxMDQgIFNMUC0yMDBOIERyaXZlcgorCTAxMDUgIFNMUC0yNDAgRHJpdmVyCiswNjFhICBWZXJpZGljb20gSW50ZXJuYXRpb25hbCwgSW5jLgorCTAxMTAgIDV0aFNlbnNlIEZpbmdlcnByaW50IFNlbnNvcgorCTAyMDAgIEZQUzIwMCBGaW5nZXJwcmludCBTZW5zb3IKKwk4MjAwICBWS0ktQSBGaW5nZXJwcmludCBTZW5zb3IvRmxhc2ggU3RvcmFnZSAoZHVtYikKKwk5MjAwICBWS0ktQiBGaW5nZXJwcmludCBTZW5zb3IvRmxhc2ggU3RvcmFnZSAoc21hcnQpCiswNjFiICBQcm9tcHR1cyBDb21tdW5pY2F0aW9ucywgSW5jLgorMDYxYyAgQWN0IExhYnMsIEx0ZAorMDYxZCAgUXVhdGVjaCwgSW5jLgorMDYxZSAgTmlzc2VpIEVsZWN0cmljIENvLgorCTAwMDEgIG5pc3NlaSAxMjhERS1VU0IgLQorCTAwMTAgIG5pc3NlaSAxMjhERS1QTkEgLQorMDYyMCAgQWxhcmlzLCBJbmMuCisJMDAwNCAgUXVpY2tWaWRlbyB3ZWVDYW0KKwkwMDA3ICBRdWlja1ZpZGVvIHdlZUNhbQorCTAwMGEgIFF1aWNrVmlkZW8gd2VlQ2FtCisJMDAwYiAgUXVpY2tWaWRlbyB3ZWVDYW0KKzA2MjEgIE9EVS1TdGVja3ZlcmJpbmR1bmdzc3lzdGVtZSBHbWJIICYgQ28uIEtHCiswNjIyICBJb3RlY2gsIEluYy4KKzA2MjMgIExpdHRlbGZ1c2UsIEluYy4KKzA2MjQgIEF2b2NlbnQgQ29ycC4KKzA2MjUgIFRpTWVkaWEgVGVjaG5vbG9neSBDby4sIEx0ZAorMDYyNiAgTmlwcG9uIFN5c3RlbXMgRGV2ZWxvcG1lbnQgQ28uLCBMdGQKKzA2MjcgIEFkb21heCBUZWNobm9sb2d5IENvLiwgTHRkCiswNjI4ICBUYXNraW5nIFNvZnR3YXJlLCBJbmMuCiswNjI5ICBaaWRhIFRlY2hub2xvZ2llcywgTHRkCiswNjJhICBDcmVhdGl2ZSBMYWJzCisJMDAwMCAgT3B0aWNhbCBtb3VzZQorCTAwMDEgIE5vdGVib29rIE9wdGljYWwgTW91c2UKKwkwMjAxICBEZWZlbmRlciBPZmZpY2UgS2V5Ym9hcmQgKEs3MzEwKSBTIFpvZGlhayBLTS05MDEwCisJOTAwMyAgVm9JUCBDb25mZXJlbmNlIEh1YiAoQTE2R0gpCisJOTAwNCAgVVNSOTYwMiBVU0IgSW50ZXJuZXQgTWluaSBQaG9uZQorMDYyYiAgR3JlYXRsaW5rIEVsZWN0cm9uaWNzIFRhaXdhbiwgTHRkCiswNjJjICBJbnN0aXR1dGUgZm9yIEluZm9ybWF0aW9uIEluZHVzdHJ5CiswNjJkICBUYWl3YW4gVGFpLUhhbyBFbnRlcnByaXNlcyBDby4sIEx0ZAorMDYyZSAgTWFpbnN1cGVyIEVudGVycHJpc2VzIENvLiwgTHRkCiswNjJmICBTaW4gU2hlbmcgVGVybWluYWwgJiBNYWNoaW5lLCBJbmMuCiswNjMxICBKVUpPIEVsZWN0cm9uaWNzIENvcnAuCiswNjMzICBDeXJpeCBDb3JwLgorMDYzNCAgTWljcm9uIFRlY2hub2xvZ3ksIEluYy4KKzA2MzUgIE1ldGhvZGUgRWxlY3Ryb25pY3MsIEluYy4KKzA2MzYgIFNpZXJyYSBJbWFnaW5nLCBJbmMuCisJMDAwMyAgVml2aWNhbSAzNVh4CiswNjM4ICBBdmlzaW9uLCBJbmMuCisJMDI2OCAgaVZpbmEgMTIwMFUgU2Nhbm5lcgorCTAyNmEgIE1pbm9sdGEgRGltYWdlIFNjYW4gRHVhbCBJSQorCTBhMTAgIGlWaW5hIEZCMTYwMC9VTUFYIEFzdHJhIDQ1MDAKKwkwYTEzICBBVjYwMFUKKwkwYTE2ICBTQy0yMTUKKwkwYTMwICBVTUFYIEFzdHJhIDY3MDAgU2Nhbm5lcgorCTBhNDEgIEF2aXNpb24gQU0zMDAwL01GMzAwMCBTZXJpZXMKKwkwZjAxICBmaS00MDEwQ1UKKwk0MDA0ICBNaW5vbHRhIERpbWFnZSBTY2FuIEVsaXRlIElJCiswNjM5ICBDaHJvbnRlbCwgSW5jLgorMDYzYSAgVGVjaHdpbiBDb3JwLgorMDYzYiAgVGF1Z2FncmVpbmluZyBIRgorMDYzYyAgWWFtYWljaGkgRWxlY3Ryb25pY3MgQ28uLCBMdGQgKFNha3VyYSkKKzA2M2QgIEZvbmcgS2FpIEluZHVzdHJpYWwgQ28uLCBMdGQKKzA2M2UgIFJlYWxNZWRpYSBUZWNobm9sb2d5LCBJbmMuCiswNjNmICBOZXcgVGVjaG5vbG9neSBDYWJsZSwgTHRkCiswNjQwICBIaXRleCBEZXZlbG9wbWVudCBUb29scworMDY0MSAgV29vZHMgSW5kdXN0cmllcywgSW5jLgorMDY0MiAgVklBIE1lZGljYWwgQ29ycC4KKzA2NDQgIFRFQUMgQ29ycC4KKwkwMDAwICBGbG9wcHkKKwkxMDAwICBDRC1ST00gRHJpdmUKKwk4MDBkICBUQVNDQU0gUG9ydGFzdHVkaW8gRFAtMDFGWAorCWQwMDEgIENELVIvUlcgVW5pdAorCWQwMDIgIENELVIvUlcgVW5pdAorCWQwMTAgIENELVJXL0RWRCBVbml0CiswNjQ1ICBXaG8/IFZpc2lvbiBTeXN0ZW1zLCBJbmMuCiswNjQ2ICBVTUFYCiswNjQ3ICBBY3RvbiBSZXNlYXJjaCBDb3JwLgorCTAxMDAgIEFSQyBTcGVjdHJhUHJvIFVWL1ZJUy9JUiBNb25vY2hyb21hdG9yL1NwZWN0cm9ncmFwaAorCTAxMDEgIEFSQyBBTS1WTSBNb25vIEFpcnBhdGgvVmFjdXVtIE1vbm9jaHJvbWF0b3IvU3BlY3Ryb2dyYXBoCisJMDEwMiAgQVJDIEluc3BlY3RydW0gTW9ubworCTAxMDMgIEFSQyBGaWx0ZXJ3aGVlbAorCTAzZTkgIEluc3BlY3RydW0gMTI4eDEwMjQgRiBWSVMgU3BlY3Ryb2dyYXBoCisJMDNlYSAgSW5zcGVjdHJ1bSAyNTZ4MTAyNCBGIFZJUyBTcGVjdHJvZ3JhcGgKKwkwM2ViICBJbnNwZWN0cnVtIDEyOHgxMDI0IEIgVklTIFNwZWN0cm9ncmFwaAorCTAzZWMgIEluc3BlY3RydW0gMjU2eDEwMjQgQiBWSVMgU3BlY3Ryb2dyYXBoCiswNjQ4ICBJbnNpZGUgT3V0IE5ldHdvcmtzCiswNjQ5ICBXZWxpIFNjaWVuY2UgQ28uLCBMdGQKKzA2NGIgIFdoaXRlIE1vdW50YWluIERTUCwgSW5jLgorMDY0YyAgSmktSGF3IEluZHVzdHJpYWwgQ28uLCBMdGQKKzA2NGQgIFRyaVRlY2ggTWljcm9lbGVjdHJvbmljcywgTHRkCiswNjRlICBTdXlpbiBDb3JwLgorMDY0ZiAgV0lCVS1TeXN0ZW1zIEFHCisJMGJkNyAgQk9YL1UKKwkwYmQ4ICBCT1gvUlUKKzA2NTAgIER5bmFwcm8gU3lzdGVtcworMDY1MSAgTGlrb20gVGVjaG5vbG9neSBTZG4uIEJoZC4KKzA2NTIgIFN0YXJnYXRlIFNvbHV0aW9ucywgSW5jLgorMDY1MyAgQ05GLCBJbmMuCiswNjU0ICBHcmFuaXRlIE1pY3Jvc3lzdGVtcywgSW5jLgorCTAwMDUgIERldmljZSBCYXkgQ29udHJvbGxlcgorCTAwMDYgIEh1YgorCTAwMDcgIERldmljZSBCYXkgQ29udHJvbGxlcgorCTAwMTYgIEh1YgorMDY1NSAgU3BhY2UgU2h1dHRsZSBIaS1UZWNoIENvLiwgTHRkCiswNjU2ICBHbG9yeSBNYXJrIEVsZWN0cm9uaWMsIEx0ZAorMDY1NyAgVGVrY29uIEVsZWN0cm9uaWNzIENvcnAuCiswNjU4ICBTaWdtYSBEZXNpZ25zLCBJbmMuCiswNjU5ICBBZXRocmEKKzA2NWEgIE9wdG9lbGVjdHJvbmljcyBDby4sIEx0ZAorCTAwMDEgIEJhcmNvZGUgc2Nhbm5lcgorMDY1YiAgVHJhY2V3ZWxsIFN5c3RlbXMKKzA2NWUgIFNpbGljb24gR3JhcGhpY3MKKzA2NWYgIEdvb2QgV2F5IFRlY2hub2xvZ3kgQ28uLCBMdGQgJiBHV0MgdGVjaG5vbG9neSBJbmMuCiswNjYwICBUU0FZLUUgKEJWSSkgSW50ZXJuYXRpb25hbCwgSW5jLgorMDY2MSAgSGFtYW1hdHN1IFBob3RvbmljcyBLLksuCiswNjYyICBLYW5zYWkgRWxlY3RyaWMgQ28uLCBMdGQKKzA2NjMgIFRvcG1heCBFbGVjdHJvbmljIENvLiwgTHRkCisJMDEwMyAgQ29icmFQYWQKKzA2NjcgIEFpd2EgQ28uLCBMdGQKKwkwZmExICBURC1VODAwMCBUYXBlIERyaXZlCiswNjY4ICBXb3JkV2FuZAorMDY2OSAgT2NlJyBQcmludGluZyBTeXN0ZW1zIEdtYkgKKzA2NmEgIFRvdGFsIFRlY2hub2xvZ2llcywgTHRkCiswNjZiICBMaW5rc3lzLCBJbmMuCisJMDEwNSAgU0NNIGVVU0IgU21hcnRNZWRpYSBDYXJkIFJlYWRlcgorCTAxMGEgIE1lbGNvIE1DUi1VMiBTbWFydE1lZGlhIC8gQ29tcGFjdEZsYXNoIFJlYWRlcgorCTIwMGMgIFVTQjEwVFgKKwkyMjAyICBVU0IxMFRYIEV0aGVybmV0IFtwZWdhc3VzXQorCTIyMDMgIFVTQjEwMFRYIEV0aGVybmV0IFtwZWdhc3VzXQorCTIyMDQgIFVTQjEwMFRYIEhvbWVQTkEgRXRoZXJuZXQgW3BlZ2FzdXNdCisJMjIwNiAgVVNCIEV0aGVybmV0IFtwZWdhc3VzXQorCTIyMDcgIEhvbWVMaW5rIFBob25lbGluZSAxME0gTmV0d29yayBBZGFwdGVyCisJMjIxMSAgV1VTQjExIDgwMi4xMWIgQWRhcHRlcgorCTIyMTIgIFdVU0IxMXYyLjUgODAyLjExYiBBZGFwdGVyCisJMjIxMyAgV1VTQjEydjEuMSA4MDIuMTFiIEFkYXB0ZXIKKwkyMjE5ICBJbnN0YW50IFdpcmVsZXNzIE5ldHdvcmsgQWRhcHRlcgorCTQwMGIgIFVTQjEwVFgKKzA2NmQgIEVudHJlZ2EsIEluYy4KKzA2NmUgIEFjZXIgU2VtaWNvbmR1Y3RvciBBbWVyaWNhLCBJbmMuCiswNjZmICBTaWdtYVRlbCwgSW5jLgorCTAwM2IgIE1QMyBQbGF5ZXIKKwkwMDNlICBNUDMgUGxheWVyCisJMDAzZiAgTVAzIFBsYXllcgorCTAwNDAgIE1QMyBQbGF5ZXIKKwkwMDQxICBNUDMgUGxheWVyCisJMDA0MiAgTVAzIFBsYXllcgorCTAwNDMgIE1QMyBQbGF5ZXIKKwkwMDRiICBBLU1heCBQQTExIE1QMyBQbGF5ZXIKKwkzNDAwICBTVE1QMzQwMCBELU1ham9yIE1QMyBQbGF5ZXIKKwkzNDEwICBTVE1QMzQxMCBELU1ham9yIE1QMyBQbGF5ZXIKKwkzNTAwICBQbGF5ZXIgUmVjb3ZlcnkgRGV2aWNlCisJNDIwMCAgU1RJcjQyMDAgSXJEQSBCcmlkZ2UKKwk0MjEwICBTVElyNDIxMCBJckRBIEJyaWRnZQorCTgwMDAgIE1TQ04gTVAzIFBsYXllcgorCTgwMDEgIFNpZ21hVGVsIE1TQ04gQXVkaW8gUGxheWVyCisJODAwNCAgTVNDTk1NQyBNUDMgUGxheWVyCisJODAwOCAgaS1CZWFkIDEwMCBNUDMgUGxheWVyCisJODAyMCAgTVAzIFBsYXllcgorCTgwMzQgIE1QMyBQbGF5ZXIKKwk4MDM2ICBNUDMgUGxheWVyCisJODAzOCAgTVAzIFBsYXllcgorCTgwNTYgIE1QMyBQbGF5ZXIKKwk4MDYwICBNUDMgUGxheWVyCisJODA2NiAgTVAzIFBsYXllcgorCTgwN2UgIE1QMyBQbGF5ZXIKKwk4MDkyICBNUDMgUGxheWVyCisJODA5NiAgTVAzIFBsYXllcgorCTgwOWEgIE1QMyBQbGF5ZXIKKwk4MGFhICBNUDMgUGxheWVyCisJODBhYyAgTVAzIFBsYXllcgorCTgwYjggIE1QMyBQbGF5ZXIKKwk4MGJhICBNUDMgUGxheWVyCisJODBiYyAgTVAzIFBsYXllcgorCTgwYmYgIE1QMyBQbGF5ZXIKKwk4MGM1ICBNUDMgUGxheWVyCisJODBjOCAgTVAzIFBsYXllcgorCTgwY2EgIE1QMyBQbGF5ZXIKKwk4MGNjICBNUDMgUGxheWVyCisJODEwNCAgTVAzIFBsYXllcgorCTgxMDYgIE1QMyBQbGF5ZXIKKwk4MTA4ICBNUDMgUGxheWVyCisJODEwYSAgTVAzIFBsYXllcgorCTgxMGMgIE1QMyBQbGF5ZXIKKwk4MTIyICBNUDMgUGxheWVyCisJODEyNCAgTVAzIFBsYXllcgorCTgxMjYgIE1QMyBQbGF5ZXIKKwk4MTI4ICBNUDMgUGxheWVyCisJODEzNCAgTVAzIFBsYXllcgorCTgxMzYgIE1QMyBQbGF5ZXIKKwk4MTM4ICBNUDMgUGxheWVyCisJODEzYSAgTVAzIFBsYXllcgorCTgxM2UgIE1QMyBQbGF5ZXIKKwk4MTQwICBNUDMgUGxheWVyCisJODE0MiAgTVAzIFBsYXllcgorCTgxNDQgIE1QMyBQbGF5ZXIKKwk4MTQ2ICBNUDMgUGxheWVyCisJODE0OCAgTVAzIFBsYXllcgorCTgxNGMgIE1QMyBQbGF5ZXIKKwk4MjAxICBNUDMgUGxheWVyCisJODIwMiAgSmVucyBvZiBTd2VkZW4gLyBJLUJFQUQgMTUwTS8xNTBIIE1QMyBwbGF5ZXIKKwk4MjAzICBNUDMgUGxheWVyCisJODIwNCAgTVAzIFBsYXllcgorCTgyMDUgIE1QMyBQbGF5ZXIKKwk4MjA2ICBEaWdpdGFsIE1QMyBNdXNpYyBQbGF5ZXIKKwk4MjA3ICBNUDMgUGxheWVyCisJODIwOCAgTVAzIFBsYXllcgorCTgyMDkgIE1QMyBQbGF5ZXIKKwk4MjBhICBNUDMgUGxheWVyCisJODIwYiAgTVAzIFBsYXllcgorCTgyMGMgIE1QMyBQbGF5ZXIKKwk4MjBkICBNUDMgUGxheWVyCisJODIwZSAgTVAzIFBsYXllcgorCTgyMGYgIE1QMyBQbGF5ZXIKKwk4MjEwICBNUDMgUGxheWVyCisJODIxMSAgTVAzIFBsYXllcgorCTgyMTIgIE1QMyBQbGF5ZXIKKwk4MjEzICBNUDMgUGxheWVyCisJODIxNCAgTVAzIFBsYXllcgorCTgyMTUgIE1QMyBQbGF5ZXIKKwk4MjE2ICBNUDMgUGxheWVyCisJODIxNyAgTVAzIFBsYXllcgorCTgyMTggIE1QMyBQbGF5ZXIKKwk4MjE5ICBNUDMgUGxheWVyCisJODIxYSAgTVAzIFBsYXllcgorCTgyMWIgIE1QMyBQbGF5ZXIKKwk4MjFjICBNUDMgUGxheWVyCisJODIxZCAgTVAzIFBsYXllcgorCTgyMWUgIE1QMyBQbGF5ZXIKKwk4MjFmICBNUDMgUGxheWVyCisJODIyMCAgTVAzIFBsYXllcgorCTgyMjEgIE1QMyBQbGF5ZXIKKwk4MjIyICBNUDMgUGxheWVyCisJODIyMyAgTVAzIFBsYXllcgorCTgyMjQgIE1QMyBQbGF5ZXIKKwk4MjI1ICBNUDMgUGxheWVyCisJODIyNiAgTVAzIFBsYXllcgorCTgyMjcgIE1QMyBQbGF5ZXIKKwk4MjI4ICBNUDMgUGxheWVyCisJODIyOSAgTVAzIFBsYXllcgorCTgyMzAgIE1QMyBQbGF5ZXIKKwk5MDAwICBNUDMgUGxheWVyCisJOTAwMSAgTVAzIFBsYXllcgorCTkwMDIgIE1QMyBQbGF5ZXIKKzA2NzIgIExhYnRlYywgSW5jLgorCTEwNDEgIExDUzEwNDAgU3BlYWtlciBTeXN0ZW0KKwk1MDAwICBTcGFjZUJhbGwgNDAwMCBGTFgKKzA2NzMgIEhDTAorCTUwMDAgIEtleWJvYXJkCiswNjc0ICBLZXkgTW91c2UgRWxlY3Ryb25pYyBFbnRlcnByaXNlIENvLiwgTHRkCiswNjc1ICBEcmF5dGVjaAorCTAxMTAgIFZpZ29yIDEyOCBJU0ROIFRBCisJMDU1MCAgVmlnb3I1NTAKKzA2NzYgIFRlbGVzIEFHCiswNjc3ICBBaXdhIENvLiwgTHRkCisJMDdkNSAgVE0tRUQxMjg1KFVTQikKKwkwZmExICBURC1VODAwMCBUYXBlIERyaXZlCiswNjc4ICBBQ2FyZCBUZWNobm9sb2d5IENvcnAuCiswNjdiICBQcm9saWZpYyBUZWNobm9sb2d5LCBJbmMuCisJMDAwMCAgUEwyMzAxIFVTQi1VU0IgQnJpZGdlCisJMDAwMSAgUEwyMzAyIFVTQi1VU0IgQnJpZGdlCisJMDRiYiAgUEwyMzAzIFNlcmlhbCAoSU9EQVRBIFVTQi1SU0FRMikKKwkwNjEwICBPbmV4dCBFRzIxMFUgTU9ERU0KKwkwNjExICBBbERpZ2EgQUwtMTFVIFF1YWQtYmFuZCBHU00vR1BSUy9FREdFIG1vZGVtCisJMjMwMyAgUEwyMzAzIFNlcmlhbCBQb3J0CisJMjMwNSAgUEwyMzA1IFBhcmFsbGVsIFBvcnQKKwkyMzA3ICBQTDIzMDcgVVNCLUFUQVBJNCBCcmlkZ2UKKwkyMzEzICBGSVRFTCBQSFMgVSBDYWJsZSBBZGFwdG9yCisJMjMxNSAgRmxhc2ggRGlzayBFbWJlZGRlZCBIdWIKKwkyMzE2ICBGbGFzaCBEaXNrIFNlY3VyaXR5IERldmljZQorCTIzMTcgIE1hc3MgU3RvcmFnZSBEZXZpY2UKKwkyNTAxICBQTDI1MDEgVVNCLVVTQiBCcmlkZ2UgKFVTQiAyLjApCisJMjUwNyAgUEwyNTA3IEhpLXNwZWVkIFVTQiB0byBJREUgYnJpZGdlIGNvbnRyb2xsZXIKKwkyNTE1ICBGbGFzaCBEaXNrIEVtYmVkZGVkIEh1YgorCTI1MTcgIEZsYXNoIERpc2sgTWFzcyBTdG9yYWdlIERldmljZQorCTI1YTEgIFBMMjVBMSBIb3N0LUhvc3QgQnJpZGdlCisJMzQwMCAgSGktU3BlZWQgRmxhc2ggRGlzayB3aXRoIFRydWVQcmludCBBRVMzNDAwCisJMzUwMCAgSGktU3BlZWQgRmxhc2ggRGlzayB3aXRoIFRydWVQcmludCBBRVMzNTAwCisJMzUwNyAgUEwzNTA3IEFUQVBJNiBCcmlkZ2UKKwlhYWEwICBQcm9saWZpYyBQaGFyb3MKKwlhYWEyICBQTDIzMDMgU2VyaWFsIEFkYXB0ZXIgKElPREFUQSBVU0ItUlNBUTMpCiswNjdjICBFZmZpY2llbnQgTmV0d29ya3MsIEluYy4KKwkxMDAxICBTaWVtZW5zIFNwZWVkU3RyZWFtIDEwME1CcHMgRXRoZXJuZXQKKwkxMDIyICBTaWVtZW5zIFNwZWVkU3RyZWFtIDEwMjIgODAyLjExYiBBZGFwdGVyCisJMTAyMyAgU3BlZWRTdHJlYW0gV2lyZWxlc3MKKwk0MDIwICBTcGVlZFN0cmVhbSA0MDIwIEFUTS9BRFNMIEluc3RhbGxlcgorCTQwMzEgIEVmZmljaWVudCBBRFNMIE1vZGVtCisJNDAzMiAgU3BlZWRTdHJlYW0gNDAzMSBBVE0vQURTTCBJbnN0YWxsZXIKKwk0MDMzICBTcGVlZFN0cmVhbSA0MDMxIEFUTS9BRFNMIEluc3RhbGxlcgorCTQwNjAgIEFsY2F0ZWwgU3BlZWRzdHJlYW0gNDA2MCBBRFNMIE1vZGVtCisJNDA2MiAgRWZmaWNpZW50IE5ldHdvcmtzIDQwNjAgTG9hZGVyCisJNTY2NyAgRWZmaWNpZW50IE5ldHdvcmtzIFZpcnR1YWwgQnVzIGZvciBBRFNMIE1vZGVtCisJYzAzMSAgU3BlZWRTdHJlYW0gNDAzMSBBVE0vQURTTCBJbnN0YWxsZXIKKwljMDMyICBTcGVlZFN0cmVhbSA0MDMxIEFUTS9BRFNMIEluc3RhbGxlcgorCWMwMzMgIFNwZWVkU3RyZWFtIDQwMzEgQVRNL0FEU0wgSW5zdGFsbGVyCisJYzA2MCAgU3BlZWRTdHJlYW0gNDA2MCBNaW5pcG9ydCBBVE0vQURTTCBBZGFwdGVyCisJZDY2NyAgRWZmaWNpZW50IE5ldHdvcmtzIFZpcnR1YWwgQnVzIGZvciBBRFNMIE1vZGVtCisJZTI0MCAgU3BlZWRzdHJlYW0gRXRoZXJuZXQgQWRhcHRlciBFMjQwCisJZTU0MCAgU3BlZWRzdHJlYW0gRXRoZXJuZXQgQWRhcHRlciBFMjQwCiswNjdkICBIb2huZXIgQ29ycC4KKzA2N2UgIEludGVybWVjCisJMTAwMSAgTW9iaWxlIENvbXB1dGVyCiswNjdmICBWaXJhdGEsIEx0ZAorCTQ1NTIgIERTTC0yMDAgQURTTCBNb2RlbQorCTY1NDIgIERTTCBNb2RlbQorCTY1NDkgIERTTCBNb2RlbQorCTc1NDEgIERTTCBNb2RlbQorMDY4MCAgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuLCBDUFAgRGl2LiAoQXZhbmNlIExvZ2ljKQorCTAwMDIgIEFyb3dhbmEgT3B0aWNhbCBXaGVlbCBNb3VzZSBNU09QLTAxCiswNjgxICBTaWVtZW5zIEluZm9ybWF0aW9uIGFuZCBDb21tdW5pY2F0aW9uIFByb2R1Y3RzCisJMDAwMSAgRGVjdCBCYXNlCisJMDAwMiAgR2lnYXNldCAzMDc1IFBhc3NpdmUgSVNETgorCTAwMDUgIElELU1vdXNlIHdpdGggRmluZ2VycHJpbnQgUmVhZGVyCisJMDAxMiAgSS1HYXRlIDgwMi4xMWIgQWRhcHRlcgorCTAwMWIgIFdMTDAxMworCTAwMjIgIEdpZ2FzZXQgU1gzNTMgSVNETgorCTAwMmIgIEEtMTAwLUkgQURTTCBNb2RlbQorCTAwMmUgIEFEU0wgUm91dGVyX1MtMTQxCisJMDAzNCAgR1NNIG1vZHVsZSBNQzM1L0VTNzUgVVNCIE1vZGVtCisJM2MwNiAgNTRnIFVTQiBOZXR3b3JrIEFkYXB0ZXIKKzA2ODIgIFZpY3RvciBDb21wYW55IG9mIEphcGFuLCBMdGQKKzA2ODQgIEFjdGlvbnRlYyBFbGVjdHJvbmljcywgSW5jLgorMDY4NiAgTWlub2x0YSBDby4sIEx0ZAorCTIwMDEgIFBhZ2VQcm8gNDExMFcKKwkzMDAxICBQYWdlUHJvIDQxMDAKKwkzMDA2ICBQYWdlUHJvIDEyNTBXCisJMzAyZSAgRGV2ZWxvcCBEIDE2NTBpRCBQQ0wKKwkzMDM0ICBEZXZlbG9wIEQgMjA1MGlEIFBDTAorCTQwMDEgIERpbWFnZSAyMzAwCisJNDAwMyAgRGltYWdlIDIzMzAgWm9vbSBDYW1lcmEKKwk0MDA0ICBTY2FuIEVsaXRlIElJCisJNDAwNSAgTWlub2x0YSBEaU1BR0UgRTIwMSBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJNDAwNiAgRGltYWdlIDcgQ2FtZXJhCisJNDAwNyAgRGltYWdlIFMzMDQgQ2FtZXJhCisJNDAwOCAgRGltYWdlIDUgQ2FtZXJhCisJNDAwOSAgRGltYWdlIFggQ2FtZXJhCisJNDAwYSAgRGltYWdlIFM0MDQgQ2FtZXJhCisJNDAwYiAgRGltYWdlIDdpIENhbWVyYQorCTQwMGMgIERpbWFnZSBGMTAwIENhbWVyYQorCTQwMGQgIFNjYW4gRHVhbCBJSUkKKwk0MDBlICBEaW1hZ2UgNTQwMAorCTQwMGYgIERpbWFnZSA3SGkgQ2FtZXJhCisJNDAxMCAgRGltYWdlIFhpIENhbWVyYQorCTQwMTEgIERpbWFnZSBGMzAwIENhbWVyYQorCTQwMTIgIERpbWFnZSBGMjAwIENhbWVyYQorCTQwMTQgIERpbWFnZSBTNDE0IENhbWVyYQorCTQwMTUgIERpbWFnZSBYVCBDYW1lcmEgW3N0b3JhZ2VdCisJNDAxNiAgRGltYWdlIFhUIENhbWVyYSBbcmVtb3RlIG1vZGVdCisJNDAxNyAgRGltYWdlIEUyMjMKKwk0MDE4ICBEaW1hZ2UgWjEgIENhbWVyYQorCTQwMWEgIERpbWFnZSBBMSBDYW1lcmEKKwk0MDFjICBEaW1hZ2UgWDIwIENhbWVyYQorCTQwMWUgIERpbWFnZSBFMzIzIENhbWVyYQorMDY4YSAgUGVydGVjaCwgSW5jLgorMDY4YiAgUG90cmFucyBJbnRlcm5hdGlvbmFsLCBJbmMuCiswNjhlICBDSCBQcm9kdWN0cywgSW5jLgorCTAwZTIgIEhGWCBPRU0gSm95c3RpY2sKKwkwMGYxICBQcm8gVGhyb3R0bGUKKwkwMGYyICBGbGlnaHQgU2ltIFBlZGFscworCTAwZjMgIEZpZ2h0ZXJzdGljaworCTAwZmYgIEZsaWdodCBTaW0gWW9rZQorCTA1MDAgIEdhbWVTdGljayAzRAorCTA1MDEgIENIIFBybyBQZWRhbHMKKwkwNTA0ICBGLTE2IENvbWJhdCBTdGljaworMDY5MCAgR29sZGVuIEJyaWRnZSBFbGVjdGVjaCwgSW5jLgorMDY5MyAgSGFnaXdhcmEgU3lzLUNvbSBDby4sIEx0ZAorCTAwMDIgIEZsYXNoR2F0ZSBTbWFydE1lZGlhIENhcmQgUmVhZGVyCisJMDAwMyAgRmxhc2hHYXRlIENvbXBhY3RGbGFzaCBDYXJkIFJlYWRlcgorCTAwMDUgIEZsYXNoR2F0ZQorCTAwMDYgIFNNIFBDQ2FyZCBSL1cgYW5kIFNQRAorCTAwMDcgIEZsYXNoR2F0ZSBNRSAoQXV0aGVudGljYXRlZCkKKwkwMDBhICBTRENhcmQvTU1DIFJlYWRlci9Xcml0ZXIKKzA2OTQgIExlZ28gR3JvdXAKKwkwMDAxICBNaW5kc3Rvcm1zIFRvd2VyCiswNjk4ICBDaHVudGV4IChDVFgpCisJMTc4NiAgMTMwMGV4IE1vbml0b3IKKwk5OTk5ICBWTHh4eHggTW9uaXRvcitIdWIKKzA2OTkgIFRla3Ryb25peCwgSW5jLgorMDY5YSAgQXNrZXkgQ29tcHV0ZXIgQ29ycC4KKwkwMDAxICBWQzAxMCBXZWJDYW0gW3B3Y10KKwkwMzAzICBDYWJsZSBNb2RlbQorCTAzMTEgIEFEU0wgUm91dGVyIFJlbW90ZSBORElTIERldmljZQorCTAzMTggIFJlbW90ZSBORElTIERldmljZQorCTAzMTkgIDIyMFYgUmVtb3RlIE5ESVMgRGV2aWNlCisJMDMyMCAgSUVFRSA4MDIuMTFiIFdpcmVsZXNzIExBTiBDYXJkCisJMDMyMSAgRHluYWxpbmsgV0xMMDEzIC8gQ29tcGV4IFdMVTExQSA4MDIuMTFiIEFkYXB0ZXIKKwkwNDAyICBTY2llbnRpZmljIEF0bGFudGEgV2ViU1RBUiAxMDAgJiAyMDAgc2VyaWVzIENhYmxlIE1vZGVtCisJMDgxMSAgQlQgVmlydHVhbCBCdXMgZm9yIEhlbGl1bQorCTA4MjEgIEJUIFZveWFnZXIgMTAxMCA4MDIuMTFiIEFkYXB0ZXIKKwk0NDAyICBTY2llbnRpZmljIEF0bGFudGEgV2ViU1RBUiAyMDAwIHNlcmllcyBDYWJsZSBNb2RlbQorCTQ0MDMgIFNjaWVudGlmaWMgQXRsYW50YSBXZWJTVEFSIDMwMCBzZXJpZXMgQ2FibGUgTW9kZW0KKwk0NTAxICBTY2llbnRpZmljLUF0bGFudGEgV2ViU1RBUiAyMDAwIHNlcmllcyBDYWJsZSBNb2RlbQorMDY5YiAgVGhvbXNvbiwgSW5jLgorCTA3MDQgIERDTTI0NSBDYWJsZSBNb2RlbQorCTA3MGMgIE1QMyBQbGF5ZXIKKwkwNzBkICBNUDMgUGxheWVyCisJMDcwZSAgTVAzIFBsYXllcgorCTA3MGYgIFJDQSBMeXJhIFJEMTA3MSBNUDMgUGxheWVyCisJMjIyMCAgUkNBIEthem9vIFJEMTAwMCBNUDMgUGxheWVyCisJMzAwYSAgUkNBIEx5cmEgTVAzIFBsYXllcgorCTMwMTIgIE1QMyBQbGF5ZXIKKwkzMDEzICBNUDMgUGxheWVyCisJNTU1NyAgUkNBIENEUzYzMDAKKzA2OWQgIEh1Z2hlcyBOZXR3b3JrIFN5c3RlbXMgKEhOUykKKwkwMDAxICBTYXRlbGxpdGUgUmVjZWl2ZXIgRGV2aWNlCisJMDAwMiAgU2F0ZWxsaXRlIERldmljZQorMDY5ZSAgTWFyeAorCTAwMDUgIENyeXB0b0JveCB2MS4yCiswNjlmICBBbGxpZWQgRGF0YSBUZWNobm9sb2dpZXMgQlYKKwkwMDEwICBUb3JuYWRvIFNwZWFrZXJwaG9uZSBGYXhNb2RlbSA1Ni4wCisJMDAxMSAgVG9ybmFkbyBTcGVha2VycGhvbmUgRmF4TW9kZW0gNTYuMAorCTEwMDAgIEFEVCBWdkJ1cyBmb3IgQ29wcGVySmV0CiswNmEyICBUb3BybyBUZWNobm9sb2d5LCBJbmMuCiswNmEzICBTYWl0ZWsgUExDCisJMDAwNiAgQ3lib3JnIEdvbGQgSm95c3RpY2sKKwkwMTA5ICBQODgwIFBhZAorCTAxNjAgIFNUMjkwIFBybworCTAyMDAgIFhib3ggQWRyZW5hbGluIEh1YgorCTAyNDEgIFhib3ggQWRyZW5hbGluIEdhbWVwYWQKKwkwMjU1ICBYNTIgRmxpZ2h0IENvbnRyb2xsZXIKKwkwNDBiICBQOTkwIER1YWwgQW5hbG9nIFBhZAorCTA0MGMgIFAyOTAwIFdpcmVsZXNzIFBhZAorCTA0MjIgIFNUOTAgSm95c3RpY2sKKwkwNDYwICBTVDI5MCBQcm8gRmxpZ2h0IFN0aWNrCisJMDQ2MyAgU1QyOTAKKwkwNDY0ICBDeWJvcmcgRXZvCisJMDQ3MSAgQ3lib3JnIEdyYXBoaXRlIFN0aWNrCisJMDUwMSAgUjEwMCBTcG9ydHMgV2hlZWwKKwkwNTAyICBTVDIwMCBTdGljaworCTA1MDYgIFIyMjAgRGlnaXRhbCBXaGVlbAorCTA1MWUgIEN5Ym9yZyBEaWdpdGFsIElJIFN0aWNrCisJMDUyZCAgUDc1MCBHYW1lcGFkCisJMDUzYyAgWDQ1IEZsaWdodCBDb250cm9sbGVyCisJMDUzZiAgWDM2RiBGbGlnaHRzdGljaworCTA1NmMgIFAyMDAwIFRpbHQgUGFkCisJMDU2ZiAgUDIwMDAgVGlsdCBQYWQKKwkwNWQyICBQQyBEYXNoIDIKKwkwNzVjICBYNTIgRmxpZ2h0IENvbnRyb2xsZXIKKwkwODA1ICBSNDQwIEZvcmNlIFdoZWVsCisJMTAwMyAgR00yIEFjdGlvbiBQYWQKKwkxMDA5ICBBY3Rpb24gUGFkCisJMTAwYSAgU1A1NTAgUGFkIGFuZCBKb3lzdGljayBDb21ibworCTEwMGIgIFNQNTUwIFBhZAorCTE1MDkgIFAzMDAwIFdpcmVsZXNzIFBhZAorCTE1ODkgIFAzMDAwIFdpcmVsZXNzIFBhZAorCTI1NDEgIFg0NSBGbGlnaHQgQ29udHJvbGxlcgorCTM1MDkgIFAzMDAwIFJGIEdhbWVQYWQKKwkzNTNlICBDeWJvcmcgRXZvIFdpcmVsZXNzCisJMzU4OSAgUDMwMDAgV2lyZWxlc3MgUGFkCisJMzViZSAgQ3lib3JnIEV2bworCTU1MDkgIFAzMDAwIFdpcmVsZXNzIFBhZAorCTgwMDAgIEdhbWVycycgS2V5Ym9hcmQKKwk4MDFlICBDeWJvcmcgM0QgRGlnaXRhbCBTdGljayBJSQorCTgwMjEgIEVjbGlwc2UgSUkgS2V5Ym9hcmQKKwk4MDJkICBQNzUwIFBhZAorCTgwM2YgIFgzNiBGbGlnaHQgQ29udHJvbGxlcgorCTgwNmYgIFAyMDAwIFRpbHQgUGFkCisJODBjMCAgUHJvIEdhbWVyIENvbW1hbmQgVW5pdAorCWE1MDIgIEdhbWluZyBNb3VzZQorCWZmMDQgIFI0NDAgRm9yY2UgV2hlZWwKKwlmZjBjICBDeWJvcmcgRm9yY2UgUnVtYmxlIFBhZAorCWZmMGQgIFAyNjAwIFJ1bWJsZSBGb3JjZSBQYWQKKwlmZjEyICBDeWJvcmcgM0QgRm9yY2UgU3RpY2sKKwlmZjE3ICBTVCAzMzAgUnVtYmxlIEZvcmNlIFN0aWNrCisJZmY1MiAgQ3lib3JnIDNEIFJ1bWJsZSBGb3JjZSBKb3lzdGljaworCWZmYjUgIEN5Ym9yZyBFdm8gRm9yY2UgSm95c3RpY2sKKzA2YTQgIFhpYW1lbiBEb293ZWxsIEVsZWN0cm9uIENvLiwgTHRkCiswNmE1ICBEaXZpbworCTAwMDAgIFR5cGhvb24gV2ViY2FtIDEwMGsgW253ODAwMF0KKwlkMDAxICBQcm9MaW5rIERTMzMwM3UgV2ViQ2FtCisJZDgwMCAgQ2hpY29ueSBUd2lua2xlQ2FtCisJZDgyMCAgV2l6ZSBNZWRpYSAxMDAwCiswNmE3ICBNaWNyb1N0b3JlLCBJbmMuCiswNmE4ICBUb3BheiBTeXN0ZW1zLCBJbmMuCisJMDA0MiAgU2lnbmF0dXJlR2VtIDFYNSBQYWQKKwkwMDQzICBTaWduYXR1cmVHZW0gMVg1LUhJRCBQYWQKKzA2YTkgIFdlc3RlbGwKKwkwMDA1ICBXaXJlU3BlZWQgRHVhbCBDb25uZWN0IE1vZGVtCisJMDAwNiAgV2lyZVNwZWVkIER1YWwgQ29ubmVjdCBNb2RlbQorCTAwMGEgIFdpcmVTcGVlZCBEdWFsIENvbm5lY3QgTW9kZW0KKwkwMDBiICBXaXJlU3BlZWQgRHVhbCBDb25uZWN0IE1vZGVtCisJMDAwZSAgODAyLjExZyBBZGFwdGVyCiswNmFhICBTeXNncmF0aW9uLCBMdGQKKzA2YWMgIEZ1aml0c3UgTGFib3JhdG9yaWVzIG9mIEFtZXJpY2EsIEluYy4KKzA2YWQgIEdyZWF0bGFuZCBFbGVjdHJvbmljcyBUYWl3YW4sIEx0ZAorMDZhZSAgUHJvZmVzc2lvbmFsIE11bHRpbWVkaWEgVGVzdGluZyBDZW50cmUKKzA2YWYgIEhhcnRpbmcsIEluYy4gb2YgTm9ydGggQW1lcmljYQorMDZiOCAgUGl4ZWxhIENvcnAuCiswNmI5ICBBbGNhdGVsIFRlbGVjb20KKwkwMTIxICBTcGVlZFRvdWNoIDEyMWcgV2lyZWxlc3MgRG9uZ2xlCisJMjAwMSAgU1BFRUQgVE9VQ0ggQ2FyZAorCTQwNjEgIFNwZWVkVG91Y2ggSVNETiBvciBBRFNMIE1vZGVtCisJYTVhNSAgRHluYU1pVGUgTW9kZW0KKzA2YmEgIFNtb290aCBDb3JkICYgQ29ubmVjdG9yIENvLiwgTHRkCiswNmJiICBFREEsIEluYy4KKzA2YmMgIE9raSBEYXRhIENvcnAuCiswNmJkICBBR0ZBLUdldmFlcnQgTlYKKwkwMDAxICBTbmFwU2NhbiAxMjEyVQorCTAwMDIgIFNuYXBTY2FuIDEyMzZVCisJMDEwMCAgU25hcFNjYW4gVG91Y2gKKwkwMTAxICBTTkFQU0NBTiBFTElURQorCTAyMDAgIFNjYW5NYWtlciA4NzAwCisJMDJiZiAgRFVPU0NBTiBmNDAKKwkwNDAwICBDTDMwCisJMDQwMSAgTWFzcyBTdG9yYWdlCisJMDQwMyAgZVBob3RvIENMMTggQ2FtZXJhCisJMDQwNCAgZVBob3RvIENMMjAgQ2FtZXJhCisJMjA2MSAgU25hcFNjYW4gMTIxMlUgKD8pCisJMjA4ZCAgU25hcHNjYW4gZTQwCisJMjA4ZiAgU25hcFNjYW4gZTUwCisJMjA5MSAgU25hcFNjYW4gZTIwCisJMjA5MyAgU25hcFNjYW4gZTEwCisJMjA5NSAgU25hcFNjYW4gZTI1CisJMjA5NyAgU25hcFNjYW4gZTI2CisJMjBmZCAgU25hcFNjYW4gZTUyCisJMjBmZiAgU25hcFNjYW4gZTQyCiswNmJlICBBTUUgT3B0aW1lZGlhIFRlY2hub2xvZ3kgQ28uLCBMdGQKKwkxMDA1ICBEYXp6bGUgRFBWTSEgKDEwMDUpCisJZDAwMSAgUDM1VSBDYW1lcmEgQ2FwdHVyZQorMDZiZiAgTGVvY28gQ29ycC4KKzA2YzIgIFBoaWRnZXRzIEluYy4gKGZvcm1lcmx5IEdMQUIpCisJMDAzMCAgUGhpZGdldFJGSUQKKwkwMDM4ICA0LU1vdG9yIFBoaWRnZXRTZXJ2byB2My4wCisJMDAzOSAgMS1Nb3RvciBQaGlkZ2V0U2Vydm8gdjMuMAorCTAwM2EgIDgtTW90b3IgUGhpZGdldEF2YW5jZWRTZXJ2bworCTAwNDAgIFBoaWRnZXRJbnRlcmZhY2UgS2l0IDAtMC00CisJMDA0NCAgUGhpZGdldEludGVyZmFjZSBLaXQgMC0xNi0xNgorCTAwNDUgIFBoaWRnZXRJbnRlcmZhY2UgS2l0IDgtOC04CisJMDA0OCAgUGhpZGdldFN0ZXBwZXIgKFVuZGVyIERldmVsb3BtZW50KQorCTAwNDkgIFBoaWRnZXRUZXh0TEVEIFZlciAxLjAKKwkwMDRhICBQaGlkZ2V0TEVEIFZlciAxLjAKKwkwMDRiICBQaGlkZ2V0RW5jb2RlciBWZXIgMS4wCisJMDA1MSAgUGhpZGdldEludGVyZmFjZSBLaXQgMC01LTcgKEN1c3RvbSkKKwkwMDUyICBQaGlkZ2V0VGV4dExDRAorCTAwNTMgIFBoaWRnZXRJbnRlcmZhY2VLaXQgMC04LTgKKwkwMDU4ICBQaGlkZ2V0TW90b3JDb250cm9sIFZlciAxLjAKKwkwMDcwICBQaGlkZ2V0VGVtcGVyYXR1cmVTZW5zb3IgVmVyIDEuMAorCTAwNzEgIFBoaWRnZXRBY2NlbGVyb21ldGVyIFZlciAxLjAKKwkwMDcyICBQaGlkZ2V0V2VpZ2h0U2Vuc29yIFZlciAxLjAKKwkwMDczICBQaGlkZ2V0SHVtaWRpdHlTZW5zb3IKKwkwMDc0ICBQaGlkZ2V0UEhTZW5zb3IKKwkwMDc1ICBQaGlkZ2V0R3lyb3Njb3BlCiswNmM0ICBCaXpsaW5rIEludGVybmF0aW9uYWwgQ29ycC4KKzA2YzUgIEhhZ2VudWssIEdtYkgKKzA2YzYgIEluZm93YXZlIFNvZnR3YXJlLCBJbmMuCiswNmM4ICBTSUlHLCBJbmMuCiswNmM5ICBUYXhhbiAoRXVyb3BlKSwgTHRkCisJMDAwNSAgTW9uaXRvciBDb250cm9sCisJMDAwNyAgTW9uaXRvciBDb250cm9sCisJMDAwOSAgTW9uaXRvciBDb250cm9sCiswNmNhICBOZXdlciBUZWNobm9sb2d5LCBJbmMuCiswNmNiICBTeW5hcHRpY3MsIEluYy4KKwkwMDAxICBISUQgRGV2aWNlCisJMDAwMiAgSElEIERldmljZQorCTAwMDMgIEhJRCBEZXZpY2UKKwkwMDA1ICBUb3VjaHBhZC9GUFMKKwkwMDA2ICBISUQgRGV2aWNlCisJMDAwNyAgSElEIERldmljZQorCTAwMDggIEhJRCBEZXZpY2UKKwkwMDA5ICBDb21wb3NpdGUgVG91Y2hQYWQgYW5kIFRyYWNrUG9pbnQKKwkwMDBlICBISUQgRGV2aWNlCisJMDAxMCAgQ29tcG9zaXRlIEh1bWFuIEludGVyZmFjZSBEZXZpY2UKKwkwMDEzICBIdW1hbiBJbnRlcmZhY2UgRGV2aWNlCiswNmNjICBUZXJheW9uIENvbW11bmljYXRpb24gU3lzdGVtcworCTAxMDEgIENhYmxlIE1vZGVtCisJMDEwMiAgQ2FibGUgTW9kZW0KKwkwMTAzICBDYWJsZSBNb2RlbQorCTAxMDQgIENhYmxlIE1vZGVtCisJMDMwNCAgQ2FibGUgTW9kZW0KKzA2Y2QgIEtleXNwYW4KKwkwMTAxICBVU0EtMjggUERBIFtubyBmaXJtd2FyZV0KKwkwMTAyICBVU0EtMjhYIFBEQSBbbm8gZmlybXdhcmVdCisJMDEwMyAgVVNBLTE5IFBEQSBbbm8gZmlybXdhcmVdCisJMDEwNCAgUERBIFtwcmVyZW51bV0KKwkwMTA1ICBVU0EtMThYIFBEQSBbbm8gZmlybXdhcmVdCisJMDEwNiAgVVNBLTE5VyBQREEgW25vIGZpcm13YXJlXQorCTAxMDcgIFVTQS0xOSBQREEKKwkwMTA4ICBVU0EtMTlXIFBEQQorCTAxMDkgIFVTQS00OVcgc2VyaWFsIGFkYXB0ZXIgW25vIGZpcm13YXJlXQorCTAxMGEgIFVTQS00OVcgc2VyaWFsIGFkYXB0ZXIKKwkwMTBiICBVU0EtMTlRaSBzZXJpYWwgYWRhcHRlciBbbm8gZmlybXdhcmVdCisJMDEwYyAgVVNBLTE5UWkgc2VyaWFsIGFkYXB0ZXIKKwkwMTBkICBVU0EtMTlRIHNlcmlhbCBBZGFwdGVyIChubyBmaXJtd2FyZSkKKwkwMTBlICBVU0EtMTlRIHNlcmlhbCBBZGFwdGVyCisJMDEwZiAgVVNBLTI4IFBEQQorCTAxMTAgIFVTQS0yOFhiIFBEQQorCTAxMTEgIFVTQS0xOCBzZXJpYWwgQWRhcHRlcgorCTAxMTIgIFVTQS0xOFggUERBCisJMDExMyAgVVNBLTI4WGIgUERBIFtubyBmaXJtd2FyZV0KKwkwMTE0ICBVU0EtMjhYYSBQREEgW25vIGZpcm13YXJlXQorCTAxMTUgIFVTQS0yOFhhIFBEQQorCTAxMTYgIFVTQS0xOFhBIHNlcmlhbCBBZGFwdGVyIChubyBmaXJtd2FyZSkKKwkwMTE3ICBVU0EtMThYQSBzZXJpYWwgQWRhcHRlcgorCTAxMTggIFVTQS0xOVFXIFBEQSBbbm8gZmlybXdhcmVdCisJMDExOSAgVVNBLTE5UVcgUERBCisJMDExYSAgVVNBLTQ5V2xjIHNlcmlhbCBhZGFwdGVyIFtubyBmaXJtd2FyZV0KKwkwMTFiICBNUFIgU2VyaWFsIFByZWxvYWRlciAoTVBSUUkpCisJMDExYyAgTVBSIFNlcmlhbCAoTVBSUUkpCisJMDExZCAgTVBSIFNlcmlhbCBQcmVsb2FkZXIgKE1QUlEpCisJMDExZSAgTVBSIFNlcmlhbCAoTVBSUSkKKwkwMTIxICBVU0EtMTlocyBzZXJpYWwgYWRhcHRlcgorCTAxMmEgIFVTQS00OVdsYyBzZXJpYWwgYWRhcHRlcgorCTAyMDEgIERpZ2l0YWwgTWVkaWEgUmVtb3RlCisJMDIwMiAgVUlBLTExIHJlbW90ZSBjb250cm9sCiswNmNmICBTcGhlcm9uVlIgQUcKKwkxMDEwICBQYW5vQ2FtIDEwCisJMTAxMiAgUGFub0NhbSAxMi8xMlgKKzA2ZDAgIExhcExpbmssIEluYy4KKwkwNjIyICBMYXBMaW5rIEdvbGQgVVNCLVVTQiBCcmlkZ2UgW25ldDEwODBdCiswNmQxICBEYWV3b28gRWxlY3Ryb25pY3MgQ28uLCBMdGQKKzA2ZDMgIE1pdHN1YmlzaGkgRWxlY3RyaWMgQ29ycC4KKwkwMzgwICBDUDgwMDBEIFBvcnQKKwkwMzgxICBDUDc3MEQgUG9ydAorCTAzODUgIENQOTAwRCBQb3J0CisJMDM4NyAgQ1A5ODBEIFBvcnQKKwkwMzhiICBDUDMwMjBEIFBvcnQKKwkwMzhjICBDUDkwMERXKElEKSBQb3J0CisJMDM5MyAgQ1A5NTAwRC9EVyBQb3J0CisJMDM5NCAgQ1A5MDAwRC9EVyBQb3J0CisJMDNhMSAgQ1A5NTUwRC9EVyBQb3J0CiswNmQ0ICBDaXNjbyBTeXN0ZW1zCiswNmQ1ICBUb3NoaWJhCisJNDAwMCAgSmFwYW5lc2UgS2V5Ym9hcmQKKzA2ZDYgIEFhc2hpbWEgVGVjaG5vbG9neSBCLlYuCisJMDAyZCAgVHJ1c3QgUG93ZXJDQG0gMzUwRlQKKwkwMDJlICBUcnVzdCBQb3dlckNAbSAzNTBGUworCTAwMzAgIFRydXN0IDcxMCBMQ0QgUE9XRVJDQE0gWk9PTSAtIE1TRAorCTAwMzEgIFRydXN0IDcxMCBMQ0QgUE9XRVJDQE0gWk9PTQorCTAwM2EgIFRydXN0IFBvd2VyQ0BtIDc3MFoKKwkwMDNjICBUcnVzdCA5MTB6IFBvd2VyQ0BtCisJMDAzZiAgVHJ1c3QgNzM1UyBQT1dFUkNATSBaT09NLCBXRE0gRFNDIEJ1bGsgRHJpdmVyCisJMDA1MCAgVHJ1c3QgNzM4QVYgTENEIFBWIERpZ2l0YWwgQ2FtZXJhCisJMDA2MiAgVFJVU1QgNzgyQVYgTENEIFAuIFYuIFZpZGVvIENhcHR1cmUKKwkwMDY2ICBUUlVTVCBEaWdpdGFsIFBDVFYgYW5kIE1vdmllIEVkaXRvcgorCTAwNmIgIFRSVVNUIEFVRElPIFZJREVPIEVESVRPUgorMDZkNyAgTmV0d29yayBDb21wdXRpbmcgRGV2aWNlcyAoTkNEKQorMDZkOCAgVGVjaG5pY2FsIE1hcmtldGluZyBSZXNlYXJjaCwgSW5jLgorMDZkYSAgUGhvZW5peHRlYyBQb3dlciBDby4sIEx0ZAorCTAwMDIgIFVQUworMDZkYiAgUGFyYWR5bmUKKzA2ZGMgIEZveGxpbmsgSW1hZ2UgVGVjaG5vbG9neSBDby4sIEx0ZAorCTAwMTIgIFNjYW4gMTIwMGMgU2Nhbm5lcgorCTAwMTQgIFByb2xpbmsgV2luc2NhbiBQcm8gMjQ0OFUKKzA2ZGUgIEhlaXNlaSBFbGVjdHJvbmljcyBDby4sIEx0ZAorMDZlMCAgTXVsdGktVGVjaCBTeXN0ZW1zLCBJbmMuCisJZjEwMSAgTVQ1NjM0WkJBLVVTQiBNdWx0aU1vZGVtVVNCIChvbGQgZmlybXdhcmUpCisJZjEwMyAgTVQ1NjM0TVUgTXVsdGlNb2JpbGVVU0IKKwlmMTA0ICBNVDU2MzRaQkEtVVNCIE11bHRpTW9kZW1VU0IgKG5ldyBmaXJtd2FyZSkKKwlmMTA3ICBNVDU2MzRaQkEtVVNCLVY5MiBNdWx0aU1vZGVtVVNCCiswNmUxICBBRFMgVGVjaG5vbG9naWVzLCBJbmMuCisJMDAwOCAgVUJTLTEwQlQgRXRoZXJuZXQgW2tsc2ldCisJMDAwOSAgVUJTLTEwQlQgRXRoZXJuZXQKKwkwODMzICBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJYTE2MCAgSW5zdGFudCBWaWRlby1Uby1HbyBSRFgtMTYwIChubyBmaXJtd2FyZSkKKwlhMTYxICBJbnN0YW50IFZpZGVvLVRvLUdvIFJEWC0xNjAKKwlhMTkwICBJbnN0YW5kIFZDRCBDYXB0dXJlCisJYTE5MSAgSW5zdGFudCBWaWRlb1hwcmVzcworCWEzMzcgIE1pbmkgRGlnaXRhbFRWCisJYTcwMSAgRFZEIFhwcmVzcworCWIzMzcgIE1pbmkgRGlnaXRhbFRWCisJYjcwMSAgRFZEIFhwcmVzcyBCCiswNmU0ICBBbGNhdGVsIE1pY3JvZWxlY3Ryb25pY3MKKzA2ZTYgIFRpZ2VyIEpldCBOZXR3b3JrLCBJbmMuCisJMDIwMCAgSW50ZXJuZXQgUGhvbmUKKwkwMjAxICBJbnRlcm5ldCBQaG9uZQorCTAyMDIgIENvbXBvc2l0ZSBEZXZpY2UKKwkwMjAzICBJbnRlcm5ldCBQaG9uZQorCTAyMTAgIENvbXBvc2l0ZSBEZXZpY2UKKwkwMjExICBJbnRlcm5ldCBQaG9uZQorCTAyMTIgIEludGVybmV0IFBob25lCisJMDMxYyAgSW50ZXJuZXQgUGhvbmUKKwkwMzFkICBJbnRlcm5ldCBQaG9uZQorCTAzMWUgIEludGVybmV0IFBob25lCisJMzIwMCAgQ29tcG9zaXRlIERldmljZQorCTMyMDEgIEludGVybmV0IFBob25lCisJMzIwMiAgQ29tcG9zaXRlIERldmljZQorCTMyMDMgIENvbXBvc2l0ZSBEZXZpY2UKKwk3MjAwICBDb21wb3NpdGUgRGV2aWNlCisJNzIxMCAgQ29tcG9zaXRlIERldmljZQorCTcyNTAgIENvbXBvc2l0ZSBEZXZpY2UKKwk4MjVjICBJbnRlcm5ldCBQaG9uZQorCTgzMWMgIEludGVybmV0IFBob25lCisJODMxZCAgQ29tcG9zaXRlIERldmljZQorCTgzMWUgIENvbXBvc2l0ZSBEZXZpY2UKKwliMjAwICBDb21wb3NpdGUgRGV2aWNlCisJYjIwMSAgQ29tcG9zaXRlIERldmljZQorCWIyMDIgIEludGVybmV0IFBob25lCisJYjIxMCAgSW50ZXJuZXQgUGhvbmUKKwliMjExICBDb21wb3NpdGUgRGV2aWNlCisJYjIxMiAgQ29tcG9zaXRlIERldmljZQorCWIyNTAgIENvbXBvc2l0ZSBEZXZpY2UKKwliMjUxICBJbnRlcm5ldCBQaG9uZQorCWIyNTIgIEludGVybmV0IFBob25lCisJYzIwMCAgSW50ZXJuZXQgUGhvbmUKKwljMjAxICBJbnRlcm5ldCBQaG9uZQorCWMyMDIgIENvbXBvc2l0ZSBEZXZpY2UKKwljMjAzICBJbnRlcm5ldCBQaG9uZQorCWMyMTAgIFBlcnNvbmFsIFBob25lR2F0ZXdheQorCWMyMTEgIFBlcnNvbmFsIFBob25lR2F0ZXdheQorCWMyMTIgIFBlcnNvbmFsIFBob25lR2F0ZXdheQorCWMyMTMgIFBQRyBEZXZpY2UKKwljMjVjICBDb21wb3NpdGUgRGV2aWNlCisJYzI5MCAgUFBHIERldmljZQorCWMyOTEgIFBQRyBEZXZpY2UKKwljMjkyICBQUEcgRGV2aWNlCisJYzI5MyAgUGVyc29uYWwgUGhvbmVHYXRld2F5CisJYzMxYyAgQ29tcG9zaXRlIERldmljZQorCWMzOWMgIFBlcnNvbmFsIFBob25lR2F0ZXdheQorCWMzOWQgIFBQRyBEZXZpY2UKKwljMzllICBQUEcgRGV2aWNlCisJYzM5ZiAgUFBHIERldmljZQorCWM3MDAgIEludGVybmV0IFBob25lCisJYzcwMSAgSW50ZXJuZXQgUGhvbmUKKwljNzAyICBDb21wb3NpdGUgRGV2aWNlCisJYzcwMyAgSW50ZXJuZXQgUGhvbmUKKwljNzEwICBWb0lQIENvbWJvIERldmljZQorCWM3MTEgIFZvSVAgQ29tYm8KKwljNzEyICBWb0lQIENvbWJvIERldmljZQorCWM3MTMgIFZvSVAgQ29tYm8gRGV2aWNlCisJY2YwMCAgQ29tcG9zaXRlIERldmljZQorCWNmMDEgIEludGVybmV0IFBob25lCisJY2YwMiAgSW50ZXJuZXQgUGhvbmUKKwljZjAzICBDb21wb3NpdGUgRGV2aWNlCisJZDIxMCAgUGVyc29uYWwgUGhvbmVHYXRld2F5CisJZDIxMSAgUFBHIERldmljZQorCWQyMTIgIFBQRyBEZXZpY2UKKwlkMjEzICBQZXJzb25hbCBQaG9uZUdhdGV3YXkKKwlkNzAwICBDb21wb3NpdGUgRGV2aWNlCisJZDcwMSAgQ29tcG9zaXRlIERldmljZQorCWQ3MDIgIEludGVybmV0IFBob25lCisJZDcwMyAgQ29tcG9zaXRlIERldmljZQorCWQ3MTAgIFZvSVAgQ29tYm8KKwlkNzExICBWb0lQIENvbWJvIERldmljZQorCWQ3MTIgIFZvSVAgQ29tYm8KKwlkNzEzICBWb0lQIENvbWJvCisJZGYwMCAgQ29tcG9zaXRlIERldmljZQorCWRmMDEgIENvbXBvc2l0ZSBEZXZpY2UKKwlkZjAyICBJbnRlcm5ldCBQaG9uZQorCWRmMDMgIEludGVybmV0IFBob25lCisJZjIwMCAgSW50ZXJuZXQgUGhvbmUKKwlmMjAxICBJbnRlcm5ldCBQaG9uZQorCWYyMDIgIENvbXBvc2l0ZSBEZXZpY2UKKwlmMjAzICBDb21wb3NpdGUgRGV2aWNlCisJZjIxMCAgSW50ZXJuZXQgUGhvbmUKKwlmMjUwICBDb21wb3NpdGUgRGV2aWNlCisJZjI1MiAgSW50ZXJuZXQgUGhvbmUKKwlmMzEwICBJbnRlcm5ldCBQaG9uZQorCWYzNTAgIENvbXBvc2l0ZSBEZXZpY2UKKzA2ZWEgIFNpcml1cyBUZWNobm9sb2dpZXMKKwkwMDAxICBOZXRDb20gUm9hZHN0ZXIgSUkgNTZrCisJMDAwMiAgUm9hZHN0ZXIgSUkgNTZrCiswNmViICBQQyBFeHBlcnQgVGVjaC4gQ28uLCBMdGQKKzA2ZWYgIEkuQS5DLiBHZW9tZXRyaXNjaGUgSW5nZW5pZXVycyBCLlYuCiswNmYwICBULk4uQyBJbmR1c3RyaWFsIENvLiwgTHRkCisJZGUwMSAgRHVhbENhbSBWaWRlbyBDYW1lcmEKKwlkZTAyICBEdWFsQ2FtIFN0aWxsIENhbWVyYQorMDZmMSAgT3Bjb2RlIFN5c3RlbXMsIEluYy4KKwlhMDExICBTb25pY1BvcnQKKwlhMDIxICBTb25pY1BvcnQgT3B0aWNhbAorMDZmMiAgRW1pbmUgVGVjaG5vbG9neSBDby4KKwkwMDExICBLVk0gU3dpdGNoIEtleWJvYXJkCiswNmY2ICBXaW50cmVuZCBUZWNobm9sb2d5IENvLiwgTHRkCiswNmY3ICBXYWlsbHkgVGVjaG5vbG9neSBMdGQKKwkwMDAzICBVU0ItPkRpbiA0IEFkYXB0b3IKKzA2ZjggIEd1aWxsZW1vdCBDb3JwLgorCWEzMDAgIER1YWwgQW5hbG9nIExlYWRlciBHYW1lUGFkCisJYjAwMCAgSGVyY3VsZXMgREogQ29uc29sZQorCWMwMDAgIEhlcmN1bGVzIE11c2UgUG9ja2V0CisJZDAwMiAgSGVyY3VsZXMgREogQ29uc29sZQorCWUwMDAgIEhXR1VTQjItNTQgV0xBTgorCWUwMTAgIEhXR1VTQjItNTQtTEIKKwllMDIwICBIV0dVU0IyLTU0VjItQVAKKzA2ZmEgIEhTRCBTLnIuTAorMDZmYyAgTW90b3JvbGEgU2VtaWNvbmR1Y3RvciBQcm9kdWN0cyBTZWN0b3IKKzA2ZmQgIEJvc3RvbiBBY291c3RpY3MKKwkwMTAxICBBdWRpbyBEZXZpY2UKKwkwMTAyICBBdWRpbyBEZXZpY2UKKwkwMjAxICAyLXBpZWNlIEF1ZGlvIERldmljZQorMDZmZSAgR2FsbGFudCBDb21wdXRlciwgSW5jLgorMDcwMSAgU3VwZXJjb21hbCBXaXJlICYgQ2FibGUgU0ROLiBCSEQuCiswNzAzICBCdnRlY2ggSW5kdXN0cnksIEluYy4KKzA3MDUgIE5LSyBDb3JwLgorMDcwNiAgQXJpZWwgQ29ycC4KKzA3MDcgIFN0YW5kYXJkIE1pY3Jvc3lzdGVtcyBDb3JwLgorCTAxMDAgIDIyMDIgRXRoZXJuZXQgW2tsc2ldCisJMDIwMCAgMjIwMiBFdGhlcm5ldCBbcGVnYXN1c10KKwkwMjAxICBFWiBDb25uZWN0IFVTQiBFdGhlcm5ldAorCWVlMDQgIFNNQ1dVU0IzMiA4MDIuMTFiIFdpcmVsZXNzIExBTiBDYXJkCisJZWUwNiAgRVotQ29ubmVjdCA4MDIuMTFnIEFkYXB0ZXIKKwllZTEzICBFWi1Db25uZWN0IDgwMi4xMWcgQWRhcHRlcgorMDcwOCAgUHV0ZXJjb20gQ28uLCBMdGQKKwkwNDdlICBVU0ItMTI4NCBCUklER0UKKzA3MDkgIFNpbGljb24gU3lzdGVtcywgTHRkIChTU0wpCiswNzBhICBPa2kgRWxlY3RyaWMgSW5kdXN0cnkgQ28uLCBMdGQKKwk0MDAyICBCbHVldG9vdGggRGV2aWNlCisJNDAwMyAgQmx1ZXRvb3RoIERldmljZQorMDcwZCAgQ29tb3NzIEVsZWN0cm9uaWMgQ28uLCBMdGQKKzA3MGUgIEV4Y2VsIENlbGwgRWxlY3Ryb25pYyBDby4sIEx0ZAorMDcxMCAgQ29ubmVjdCBUZWNoLCBJbmMuCisJMDAwMSAgV2hpdGVIZWF0IChmYWtlIElEKQorCTgwMDEgIFdoaXRlSGVhdAorMDcxMSAgTWFnaWMgQ29udHJvbCBUZWNobm9sb2d5IENvcnAuCisJMDEwMCAgSHViCisJMDE4MCAgSVJYcHJlc3MgSW5mcmFyZWQgRGV2aWNlCisJMDE4MSAgSVJYcHJlc3MgSW5mcmFyZWQgRGV2aWNlCisJMDIwMCAgQkFZLTNVMVMxUCBTZXJpYWwgUG9ydAorCTAyMTAgIE1DVDFTIFNlcmlhbCBQb3J0CisJMDIzMCAgTUNULTIzMiBTZXJpYWwgUG9ydAorCTAyMzEgIFBTLzIgTW91c2UgUG9ydAorCTAyMzIgIFNlcmlhbCBPbiBQb3J0CisJMDI0MCAgUFMvMiB0byBVU0IgQ29udmVydGVyCisJMDMwMCAgQkFZLTNVMVMxUCBQYXJhbGxlbCBQb3J0CisJMDMwMiAgUGFyYWxsZWwgUG9ydAorCTA5MDAgIFNWR0EgQWRhcHRlcgorMDcxMyAgSW50ZXJ2YWwgUmVzZWFyY2ggQ29ycC4KKzA3MTQgIE5ld01vdGlvbiwgSW5jLgorCTAwMDMgIEFEQiB0byBVU0IgY29udmVydG9yCiswNzE3ICBaTksgQ29ycC4KKzA3MTggIEltYXRpb24gQ29ycC4KKwkwMDAyICBTdXBlckRpc2sgMTIwTUIKKwkwMDAzICBTdXBlckRpc2sgMTIwTUIgKEF1dGhlbnRpY2F0ZWQpCisJMDA2MCAgRmxhc2ggRHJpdmUKKwkwMDYxICBGbGFzaCBEcml2ZQorCTAwNjIgIEZsYXNoIERyaXZlCisJMDA2MyAgU3dpdmVsIEZsYXNoIERyaXZlCisJMDA2NCAgRmxhc2ggRHJpdmUKKwkwMDY1ICBGbGFzaCBEcml2ZQorCTAwNjYgIEZsYXNoIERyaXZlCisJMDA2NyAgRmxhc2ggRHJpdmUKKwkwMDY4ICBGbGFzaCBEcml2ZQorCTAwODQgIFVTQiBGbGFzaCBEcml2ZSBNaW5pCiswNzE5ICBUcmVtb24gRW50ZXJwcmlzZXMgQ28uLCBMdGQKKzA3MWIgIERvbWFpbiBUZWNobm9sb2dpZXMsIEluYy4KKwkwMDAyICBEVEktNTYzNjItVVNCIERpZ2l0YWwgSW50ZXJmYWNlIFVuaXQKKwkwMTAxICBBdWRpbzQtVVNCIERTUCBEYXRhIEFjcXVpc2l0aW9uIFVuaXQKKwkwMjAxICBBdWRpbzQtNTQxMCBEU1AgRGF0YSBBY3F1aXNpdGlvbiBVbml0CisJMDMwMSAgU0ItVVNCIEpUQUcgRW11bGF0b3IKKzA3MWMgIFhpb25pY3MgRG9jdW1lbnQgVGVjaG5vbG9naWVzLCBJbmMuCiswNzFkICBFaWNvbiBOZXR3b3JrcyBDb3JwLgorCTEwMDAgIERpdmEgSVNETiBUQQorCTEwMDMgIERpdmEKKwkyMDAwICBUZWxlZGF0IFN1cmYKKzA3MWUgIEFyaXN0b24gVGVjaG5vbG9naWVzCiswNzIzICBDZW50aWxsaXVtIENvbW11bmljYXRpb25zIENvcnAuCisJMDAwMiAgUGFsbGFkaWEgMzAwLzQwMCBBZHNsIE1vZGVtCiswNzI2ICBWYW5ndWFyZCBJbnRlcm5hdGlvbmFsIFNlbWljb25kdWN0b3ItQW1lcmljYQorMDcyOSAgQW1pdG0KKwkxMDAwICBVU0MtMTAwMCBTZXJpYWwgUG9ydAorMDcyZSAgU3VuaXggQ28uLCBMdGQKKzA3MmYgIEFkdmFuY2VkIENhcmQgU3lzdGVtcywgTHRkCisJMDAwMSAgQUMxMDMwLWJhc2VkIFNtYXJ0Q2FyZCBSZWFkZXIKKwkwMDA4ICBBQ1IgODAgU21hcnQgQ2FyZCBSZWFkZXIKKwkxMDAwICBQTERUIERyaXZlCisJMTAwMSAgUExEVCBEcml2ZQorCTgwMDIgIEFFVDYzIEJpb1RSVVNUS2V5CisJODAwMyAgQUNSMTIwCisJODEwMyAgQUNSMTIwCisJOTAwMCAgQUNSMzggQUMxMDM4LWJhc2VkIFNtYXJ0IENhcmQgUmVhZGVyCisJOTBjYyAgQUNSMzggU21hcnRDYXJkIFJlYWRlcgorCTkwY2YgIEFDUjM4IFNBTSBTbWFydCBDYXJkIFJlYWRlcgorCTkwZDAgIFBlcnRvU21hcnQgRU1WIC0gQ2FyZCBSZWFkZXIKKzA3MzEgIFN1c3RlZW4sIEluYy4KKwkwNTI4ICBTb255RXJpY3Nzb24gRENVLTExIENhYmxlCiswNzMyICBHb2xkZnVsbCBFbGVjdHJvbmljcyAmIFRlbGVjb21tdW5pY2F0aW9ucyBDb3JwLgorMDczMyAgVmlld1F1ZXN0IFRlY2hub2xvZ2llcywgSW5jLgorCTAxMDEgIERpZ2l0YWwgVmlkZW8gQ2FtZXJhCisJMDExMCAgVlExMTAKKwkwNDAxICBDUzMzMCBXZWJDYW0KKwkwNDAyICBNLTMxOEIgV2ViQ2FtCisJMDQzMCAgSW50ZWwgUHJvIFNoYXJlIFdlYkNhbQorCTA2MzAgIFZRNjMwIER1YWwgTW9kZSBEaWdpdGFsIENhbWVyYShCdWxrKQorCTA2MzEgIEhlcmN1bGVzIER1YWxwaXgKKwkwNzgwICBTbWFydCBDYW0gRGVsdXhlKGNvbXBvc2l0ZSkKKwkxMzEwICBFcHNpbG9uIDEuMy9KZW5vcHRpayBKRCBDMS4zL1VNQVggQXN0cmFQaXggNDcwCisJMTMxMSAgRGlnaXRhbCBEcmVhbSBFcHNpbG9uIDEuMworCTIyMTEgIEplbm9wdGlrCiswNzM0ICBMYXNhdCBDb21tdW5pY2F0aW9ucyBBL1MKKwkwMDAxICA1NjBWIE1vZGVtCisJMDAwMiAgTGFzYXQgNTYwViBNb2RlbQorCTA0M2EgIERWUyBBdWRpbworMDczNSAgQXN1c2NvbSBOZXR3b3JrCisJMjEwMCAgSVNETiBBZGFwdGVyCisJMjEwMSAgSVNETiBBZGFwdGVyCisJNjY5NCAgSVNETiBBZGFwdGVyCisJYzU0MSAgSVNETiBUQSAyODAKKzA3MzYgIExvcm9tIEluZHVzdHJpYWwgQ28uLCBMdGQKKzA3MzggIE1hZCBDYXR6LCBJbmMuCisJNDUwNyAgWEJveCBEZXZpY2UKKwk0NTE2ICBYQm94IERldmljZQorCTQ1MjAgIFhCb3ggRGV2aWNlCisJNDUyNiAgWEJveCBEZXZpY2UKKwk0NTM2ICBYQm94IERldmljZQorCTQ1NDAgIFhCb3ggRGV2aWNlCisJNDU1NiAgWEJveCBEZXZpY2UKKwk0NTY2ICBYQm94IERldmljZQorCTQ1NzYgIFhCb3ggRGV2aWNlCisJNDU4NiAgWEJveCBEZXZpY2UKKwk0NTg4ICBYQm94IERldmljZQorMDczYSAgQ2hhcGxldCBTeXN0ZW1zLCBJbmMuCiswNzNiICBTdW5jb20gVGVjaG5vbG9naWVzCiswNzNkICBFdXRyb24gUy5wLmEuCisJMDAwNSAgQ3J5cHRvIFRva2VuCisJMDAwNyAgQ3J5cHRvSWRlbnRpdHkgQ0NJRAorCTAwMjUgIFNtYXJ0S2V5IDMKKwkwYzAwICBQb2NrZXQgUmVhZGVyCisJMGQwMCAgU3RhclNpZ24gQmlvIFRva2VuIDMuMCBFVQorMDczYyAgSW5kdXN0cmlhbCBFbGVjdHJvbmljIEVuZ2luZWVycywgSW5jLgorCTAzMDUgIFBvbGUgRGlzcGxheSAoUEMzMDUtMzQxNSAgMiB4IDIwIExpbmUgRGlzcGxheSkKKwkwMzIyICBQb2xlIERpc3BsYXkgKFBDMzIyLTM0MTUgIDIgeCAyMCBMaW5lIERpc3BsYXkpCisJMDMyNCAgUG9sZSBEaXNwbGF5IChMQjMyNC1VU0IgICA0IHggMjAgTGluZSBEaXNwbGF5KQorCTAzMzAgIFBvbGUgRGlzcGxheSAoUDMzMC0zNDE1ICAgMiB4IDIwIExpbmUgRGlzcGxheSkKKwkwNDUwICBQb2xlIERpc3BsYXkgKEw0NTAtVVNCICAgR3JhcGhpYyBMaW5lIERpc3BsYXkpCisJMDUwNSAgUG9sZSBEaXNwbGF5IChTUEM1MDUtMzQxNSAyIHggMjAgTGluZSBEaXNwbGF5KQorCTA1MjIgIFBvbGUgRGlzcGxheSAoU1BDNTIyLTM0MTUgMiB4IDIwIExpbmUgRGlzcGxheSkKKwkwNjI0ICBQb2xlIERpc3BsYXkgKFNQMzI0LTM0MTUgIDIgeCAyMCBMaW5lIERpc3BsYXkpCiswNzNlICBORUMsIEluYy4KKwkwMzAxICBHYW1lIFBhZAorMDc0NSAgU3ludGVjaCBJbmZvcm1hdGlvbiBDby4sIEx0ZAorMDc0NiAgT25reW8gQ29ycC4KKwk1NTAwICBTRS1VNTUgQXVkaW8gRGV2aWNlCiswNzQ3ICBMYWJ3YXkgQ29ycC4KKzA3NDggIFN0cm9uZyBNYW4gRW50ZXJwcmlzZSBDby4sIEx0ZAorMDc0OSAgRVZlciBFbGVjdHJvbmljcyBDb3JwLgorMDc0YSAgTWluZyBGb3J0dW5lIEluZHVzdHJ5IENvLiwgTHRkCiswNzRiICBQb2xlc3RhciBUZWNoLiBDb3JwLgorMDc0YyAgQy1DLUMgR3JvdXAgUExDCiswNzRkICBNaWNyb25hcyBHbWJICisJMzU1MyAgQ29tcG9zaXRlIFVTQi1EZXZpY2UKKwkzNTU0ICBDb21wb3NpdGUgVVNCLURldmljZQorCTM1NTYgIENvbXBvc2l0ZSBVU0ItRGV2aWNlCiswNzRlICBEaWdpdGFsIFN0cmVhbSBDb3JwLgorCTAwMDEgIFBTLzIgQWRhcHRlcgorCTAwMDIgIFBTLzIgQWRhcHRlcgorMDc1NSAgQXVyZWFsIFNlbWljb25kdWN0b3IKKzA3NTcgIE5ldHdvcmsgVGVjaG5vbG9naWVzLCBJbmMuCiswNzViICBTb3BoaXN0aWNhdGVkIENpcmN1aXRzLCBJbmMuCisJMDAwMSAgS2ljay1vZmYhIFdhdGNoZG9nCiswNzYzICBNaWRpbWFuCisJMDExNSAgS2V5UmlnIDI1CisJMDExNyAgVHJpZ2dlciBGaW5nZXIKKwkwMTE5ICBNaWRBaXIKKwkwMTUwICBNLUF1ZGlvIFVubworCTAxNjAgIE0tQXVkaW8gMXgxCisJMDE5MiAgTS1BdWRpbyBLZXlzdGF0aW9uIDg4ZXMKKwkwMTkzICBQcm9LZXlzIDg4CisJMDE5NCAgUHJvS2V5cyA4OHN4CisJMDE5NSAgT3h5Z2VuIDggdjIKKwkwMTk2ICBPeHlnZW4gNDkKKwkwMTk3ICBPeHlnZW4gNjEKKwkwMTk4ICBBeGlvbSAyNQorCTAxOTkgIEF4aW9tIDQ5CisJMDE5YSAgQXhpb20gNjEKKwkwMTliICBLZXlSaWcgNDkKKwkwMTljICBLZXlTdHVkaW8KKwkxMDAxICBNaWRpU3BvcnQgMngyCisJMTAwMiAgTWlkaVNwb3J0IDJ4MgorCTEwMDMgIE1pZGlTcG9ydCAyeDIKKwkxMDEwICBNaWRpU3BvcnQgMXgxCisJMTAxMSAgTWlkaVNwb3J0IDF4MQorCTEwMTQgIE0tQXVkaW8gS2V5c3RhdGlvbiBMb2FkZXIKKwkxMDE1ICBNLUF1ZGlvIEtleXN0YXRpb24KKwkxMDIwICBNaWRpc3BvcnQgNHg0CisJMTAyMSAgTWlkaVNwb3J0IDR4NAorCTEwMzAgIE1pZGlzcG9ydCA4eDgKKwkxMDMxICBNaWRpU3BvcnQgOHg4L3MgTG9hZGVyCisJMTAzMyAgTWlkaVNwb3J0IDh4OC9zCisJMTA0MCAgTS1BdWRpbyBNaWRpU3BvcnQgMng0IExvYWRlcgorCTEwNDEgIE0tQXVkaW8gTWlkaVNwb3J0IDJ4NAorCTIwMDEgIE0gQXVkaW8gUXVhdHRybworCTIwMDIgIE0gQXVkaW8gRHVvCisJMjAwMyAgTSBBdWRpbyBBdWRpb1BoaWxlCisJMjAwNCAgTS1BdWRpbyBNb2JpbGVQcmUKKwkyMDA2ICBNLUF1ZGlvIFRyYW5zaXQKKwkyMDA3ICBNLUF1ZGlvIFNvbmljYSBUaGVhdGVyCisJMjAwOCAgTS1BdWRpbyBPem9uZQorCTIwMGQgIE0tQXVkaW8gT21uaVN0dWRpbworCTIwMGYgIE0tQXVkaW8gTW9iaWxlUHJlCisJMjAxMCAgTS1BdWRpbyBGYXN0IFRyYWNrCisJMjAxMyAgTS1BdWRpbyBKYW1MYWIKKwkyMDE1ICBNLUF1ZGlvIFJ1blRpbWUgREZVCisJMjAxNiAgTS1BdWRpbyBSdW5UaW1lIERGVQorCTIwMTkgIE0tQXVkaW8gT3pvbmUgQWNhZGVtaWMKKwkyMDFhICBNLUF1ZGlvIE1pY3JvCisJMjAxYiAgTS1BdWRpbyBSdW5UaW1lIERGVQorCTIwMWQgIE0tQXVkaW8gUHJvZHVjZXIKKwkyMDgwICBNLUF1ZGlvIFJ1blRpbWUgREZVCisJMjA4MSAgTS1BdWRpbyBSdW5UaW1lIERGVQorCTI4MDMgIE0tQXVkaW8gQXVkaW9waGlsZSBERlUKKwkyODA0ICBNLUF1ZGlvIE1vYmlsZVByZSBERlUKKwkyODA2ICBNLUF1ZGlvIFRyYW5zaXQgREZVCisJMjgxNSAgTS1BdWRpbyBERlUKKwkyODE2ICBNLUF1ZGlvIERGVQorCTI4MWIgIE0tQXVkaW8gREZVCisJMjg4MCAgTS1BdWRpbyBERlUKKwkyODgxICBNLUF1ZGlvIERGVQorMDc2NCAgQ3liZXIgUG93ZXIgU3lzdGVtLCBJbmMuCisJMDAwNSAgQ3liZXIgUG93ZXIgVVBTCisJMDUwMSAgQ1AxNTAwIEFWUiBVUFMKKzA3NjUgIFgtUml0ZSwgSW5jLgorMDc2NiAgSmVzcy1MaW5rIFByb2R1Y3RzIENvLiwgTHRkCiswNzY3ICBUb2toZWltIENvcnAuCiswNzY4ICBDYW10ZWwgVGVjaG5vbG9neSBDb3JwLgorCTAwMDYgIENhbXRlbCBUZWNobm9sb2d5IFVTQiBUViBHZW5pZSBQcm8gRk0gTW9kZWwgVFZCMzMwCisJMDAyMyAgZUhvbWUgSW5mcmFyZWQgUmVjZWl2ZXIKKzA3NjkgIFN1cmVjb20gVGVjaG5vbG9neSBDb3JwLgorCTExZjIgIEVQLTkwMDEtZyA4MDIuMTFnIDU0TSBXTEFOIEFkYXB0ZXIKKwkxMWYzICBSVDI1NzAKKwkxMWY3ICA4MDIuMTFnIDU0TSBXTEFOIEFkYXB0ZXIKKwkzMWYzICBSVDI1NzMKKzA3NmEgIFNtYXJ0IFRlY2hub2xvZ3kgRW5hYmxlcnMsIEluYy4KKzA3NmIgIE9tbmlLZXkgQUcKKwkwNTk2ICBDYXJkTWFuIDIwMjAKKwkxMDIxICBDYXJkTWFuIDEwMjEKKwkxMjIxICBDYXJkTWFuIDEyMjEKKwkxNzg0ICBDYXJkTWFuIDYwMjAKKwkzMDIxICBDYXJkTWFuIDMxMjEKKwkzNjEwICBDYXJkTWFuIDM2MjAKKwkzNjIxICBDYXJkTWFuIDM2MjEKKwkzODIxICBDYXJkTWFuIDM4MjEKKwk0MzIxICBDYXJkTWFuIDQzMjEKKwk1MTIxICBDYXJkTWFuIDUxMjEKKwk1MTI1ICBDYXJkTWFuIDUxMjUKKwk2NjIyICBDYXJkTWFuIDYxMjEKKwlhMDExICBDQ0lEIFNtYXJ0IENhcmQgUmVhZGVyIEtleWJvYXJkCisJYTAyMSAgQ0NJRCBTbWFydCBDYXJkIFJlYWRlcgorCWEwMjIgIENhcmRNYW4gU21hcnRATGluaworCWMwMDAgIENhcmRNYW4gM3gyMSBDUworCWMwMDEgIENhcmRNYW4gNTEyMSBDUworMDc2YyAgUGFydG5lciBUZWNoCiswNzZkICBEZW5zbyBDb3JwLgorMDc2ZSAgS3VhbiBUZWNoIEVudGVycHJpc2UgQ28uLCBMdGQKKzA3NmYgIEpoZW4gVmVpIEVsZWN0cm9uaWMgQ28uLCBMdGQKKzA3NzAgIFdlbGNoIEFsbHluLCBJbmMgLSBNZWRpY2FsIERpdmlzaW9uCiswNzc0ICBBbVRSQU4gVGVjaG5vbG9neSBDby4sIEx0ZAorMDc3NSAgTG9uZ3NoaW5lIEVsZWN0cm9uaWNzIENvcnAuCiswNzc2ICBJbmFsd2F5cyBDb3JwLgorMDc3NyAgQ29tZGEgRW50ZXJwcmlzZSBDb3JwLgorMDc3OCAgVm9sZXgsIEluYy4KKzA3NzkgIEZhaXJjaGlsZCBTZW1pY29uZHVjdG9yCiswNzdhICBTYW5reW8gU2Vpa2kgTWZnLiBDby4sIEx0ZAorMDc3YiAgTGlua3N5cworCTA4YmUgIEJFRkNNVTEwIHY0IENhYmxlIE1vZGVtCisJMjIxOSAgV1VTQjExIFYyLjYgODAyLjExYiBBZGFwdGVyCisJMjIyNiAgVVNCMjAwTSAxMDBiYXNlVFggQWRhcHRlcgorMDc3YyAgRm9yd2FyZCBFbGVjdHJvbmljcyBDby4sIEx0ZAorCTAwMDUgIE5FQyBLZXlib2FyZAorMDc3ZCAgR3JpZmZpbiBUZWNobm9sb2d5CisJMDIyMyAgSU1pYyBBdWRpbyBJbi9PdXQKKwkwNDA1ICBpTWF0ZSwgQURCIEFkYXB0ZXIKKwkwNDEwICBQb3dlck1hdGUKKwkwNDFhICBQb3dlcldhdmUKKwkwN2FmICBpTWljCisJNjI3YSAgUmFkaW8gU0hBUksKKzA3N2YgIFdlbGwgRXhjZWxsZW50ICYgTW9zdCBDb3JwLgorMDc4MSAgU2FuRGlzayBDb3JwLgorCTAwMDEgIFNERFItMDVhIEltYWdlTWF0ZSBDb21wYWN0Rmxhc2ggUmVhZGVyCisJMDAwMiAgU0REUi0zMSBJbWFnZU1hdGUgSUkgQ29tcGFjdEZsYXNoIFJlYWRlcgorCTAwMDUgIFNERFItMDViIChDRiBJSSkgSW1hZ2VNYXRlIENvbXBhY3RGbGFzaCBSZWFkZXIKKwkwMTAwICBJbWFnZU1hdGUgU0REUi0xMgorCTAyMDAgIFNERFItMDkgKFNTRkRDKSBJbWFnZU1hdGUgU21hcnRNZWRpYSBSZWFkZXIgW2V1c2JdCisJMDQwMCAgU2VjdXJlTWF0ZSBTRC9NTUMgUmVhZGVyCisJMDYyMSAgU0REUi04NiBJbWFnZW1hdGUgNi1pbi0xIFJlYWRlcgorCTA3MjAgIFNhbnNhIEMyMDAgc2VyaWVzIGluIHJlY292ZXJ5IG1vZGUKKwkwNzI5ICBTYW5zYSBFMjAwIHNlcmllcyBpbiByZWNvdmVyeSBtb2RlCisJMDgxMCAgU0REUi03NSBJbWFnZU1hdGUgQ0YtU00gUmVhZGVyCisJMDgzMCAgSW1hZ2VNYXRlIENGL01NQy9TRCBSZWFkZXIKKwkxMjM0ICBDcnV6ZXIgTWluaSBGbGFzaCBEcml2ZQorCTUxNTAgIFNEQ1oyIENydXplciBNaW5pIEZsYXNoIERyaXZlICh0aGluKQorCTUxNTEgIENydXplciBNaWNybyAyNTYvNTEyTUIgRmxhc2ggRHJpdmUKKwk1MTUzICBDcnV6ZXIgVVNCLUZsYXNoLURyaXZlCisJNTQwNiAgQ3J1emVyIE1pY3JvIDEvNEdCIEZsYXNoIERyaXZlCisJNTQwOCAgQ3J1emVyIFRpdGFuaXVtIFUzCisJNjEwMCAgVWx0cmEgSUkgU0QgUGx1cyAyR0IKKwk3MTAwICBDcnV6ZXIgTWluaQorCTcxMDEgIFBlbiBGbGFzaAorCTcxMDIgIENydXplciBNaW5pCisJNzEwMyAgQ3J1emVyIE1pbmkKKwk3MTA0ICBDcnV6ZXIgTWljcm8gTWluaSAyNTZNQiBGbGFzaCBEcml2ZQorCTcxMDUgIENydXplciBNaW5pCisJNzEwNiAgQ3J1emVyIE1pbmkKKwk3MTEyICBDcnV6ZXIgTWljcm8gMTI4TUIgRmxhc2ggRHJpdmUKKwk3MTEzICBDcnV6ZXIgTWljcm8gMjU2TUIgRmxhc2ggRHJpdmUKKwk3MTE0ICBDcnV6ZXIgTWluaQorCTcxMTUgIENydXplciBNaW5pCisJNzQyMCAgU2Fuc2EgRTIwMCBzZXJpZXMgKG10cCkKKwk3NDIxICBTYW5zYSBFMjAwIHNlcmllcworCTc0MzIgIFNhbnNhIENsaXAgKG10cCkKKwk3NDMzICBTYW5zYSBDbGlwIChtc2MpCisJNzQ1MCAgU2Fuc2EgQzI1MAorCTc0NTEgIFNhbnNhIEMyNDAKKwk3NDgwICBTYW5zYSBDb25uZWN0CisJNzQ4MSAgU2Fuc2EgQ29ubmVjdCAoaW4gcmVjb3ZlcnkgbW9kZSkKKwk4MTgxICBQZW4gRmxhc2gKKwk4MTgzICBIaS1TcGVlZCBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJODE4NSAgU0RDWjIgQ3J1emVyIE1pbmkgRmxhc2ggRHJpdmUgKG9sZGVyLCB0aGljaykKKwk4ODg4ICBDYXJkIFJlYWRlcgorCTg4ODkgIFNERFItODggSW1hZ2VtYXRlIDgtaW4tMSBSZWFkZXIKKwk4OTE5ICBDYXJkIFJlYWRlcgorCTg5ODkgIEltYWdlTWF0ZSAxMi1pbi0xIFJlYWRlcgorCTkxOTEgIEltYWdlTWF0ZSBDRgorCTkyMTkgIENhcmQgUmVhZGVyCisJOTI5MiAgSW1hZ2VNYXRlIENGIFJlYWRlci9Xcml0ZXIKKwk5MzkzICBJbWFnZU1hdGUgU0QtTU1DCisJOTU5NSAgSW1hZ2VNYXRlIHhELVNNCisJOTc5NyAgSW1hZ2VNYXRlIE1TLVBSTworCTk5MTkgIENhcmQgUmVhZGVyCisJOTk5OSAgU0REUi05OSA1LWluLTEgUmVhZGVyCisJYTdlOCAgU0REUi0xMTMgTWljcm9NYXRlIFNESEMgUmVhZGVyCisJYjJiMyAgU0REUi0xMDMgTW9iaWxlTWF0ZSBTRCsgUmVhZGVyCiswNzgyICBUcmFja2VyYmFsbAorMDc4MyAgQzNQTworCTAwMDMgIExUQzMxIFNtYXJ0Q2FyZCBSZWFkZXIKKzA3ODQgIFZpdml0YXIsIEluYy4KKwkwMTAwICBWaXZpY2FtIDI2NTUKKwkxMzEwICBWaXZpY2FtIDMzMDUKKwkxNjg4ICBWaXZpY2FtIDM2NjUKKwkxNjg5ICBHYXRld2F5IERDLU00Mi9MYWJ0ZWMgREMtNTA1L1Zpdml0YXIgVml2aWNhbSAzNzA1CisJMjYyMCAgQU9MIFBob3RvY2FtIFBsdXMKKwkyODg4ICBQb2xhcm9pZCBEQzcwMAorCTMzMzAgIE55dGVjIE5ELTMyMDAgQ2FtZXJhCisJNDMwMCAgVHJhdmVsZXIgRDEKKwk1MjYwICBXZXJsaXNhIFNwb3J0IFBYIDEwMCAvIEpWQyBHQy1BMzMgQ2FtZXJhCisJNTMwMCAgUHJldGVjIGRjNTMwCiswNzg1ICBOVFQtTUUKKwkwMDAxICBNTjEyOG1pbmktViBJU0ROIFRBCisJMDAwMyAgTU4xMjhtaW5pLUogSVNETiBUQQorMDc4OSAgTG9naXRlYyBDb3JwLgorCTAwMjYgIExIRCBEZXZpY2UKKwkwMDMzICBEVkQgTXVsdGktcGx1cyB1bml0IExEUi1INDQzU1UyCisJMDA2MyAgTERSIERldmljZQorCTAwNjQgIExEUi1SIERldmljZQorCTAwYjMgIERWRCBNdWx0aS1wbHVzIHVuaXQgTERSLUg0NDNVMgorCTAxMGMgIFJlYWx0ZWsgUlRMODE4NyBXaXJlbGVzcyA4MDIuMTFnIDU0TWJwcyBOZXR3b3JrIEFkYXB0ZXIKKzA3OGIgIEhhcHAgQ29udHJvbHMsIEluYy4KKwkwMDEwICBEcml2aW5nIFVHQ0kKKwkwMDIwICBGbHlpbmcgVUdDSQorCTAwMzAgIEZpZ2h0aW5nIFVHQ0kKKzA3OGMgIEdUQ08vQ2FsQ29tcAorCTA0MDAgIERpZ2l0aXplciAoV2hpdGVib2FyZCkKKzA3OGUgIEJyaW5jb20sIEluYy4KKzA3OTAgIFByby1JbWFnZSBNYW51ZmFjdHVyaW5nIENvLiwgTHRkCiswNzkxICBDb3BhcnRuZXIgV2lyZSBhbmQgQ2FibGUgTWZnLiBDb3JwLgorMDc5MiAgQXhpcyBDb21tdW5pY2F0aW9ucyBBQgorMDc5MyAgV2hhIFl1IEluZHVzdHJpYWwgQ28uLCBMdGQKKzA3OTQgIEFCTCBFbGVjdHJvbmljcyBDb3JwLgorMDc5NSAgUmVhbENoaXAsIEluYy4KKzA3OTYgIENlcnRpY29tIENvcnAuCiswNzk3ICBHcmFuZHRlY2ggU2VtaWNvbmR1Y3RvciBDb3JwLgorCTY4MDEgIEZsYXRiZWQgU2Nhbm5lcgorCTY4MDIgIElua0pldCBDb2xvciBQcmludGVyCisJODAwMSAgU21hcnRDYW0KKwk4MDFhICBUeXBob29uIFN0eWxvQ2FtCisJODAxYyAgTWVhZGUgQmlub2N1bGFycy9DYW1lcmEKKwk4OTAxICBTY2FuSGV4IFNYLTM1YQorCTg5MDkgIFNjYW5IZXggU1gtMzViCisJODkxMSAgU2NhbkhleCBTWC0zNWMKKzA3OTggIE9wdGVsZWMKKwkwMDAxICBCcmFpbGxlIFZveWFnZXIKKzA3OWIgIFNhZ2VtCisJMDAyNyAgVVNCLVNlcmlhbCBDb250cm9sbGVyCisJMDA0YSAgWEctNzYwQQorCTAwNGIgIFdpLUZpIDExZyBhZGFwdGVyCisJMDA1NiAgQWdmYSBBUDExMDAgUGhvdG8gUHJpbnRlcgorCTAwNjIgIFhHLTc2TkEKKzA3OWQgIEFsZmFkYXRhIENvbXB1dGVyIENvcnAuCisJMDIwMSAgR2FtZVBvcnQgQWRhcHRlcgorMDdhMSAgRGlnaWNvbSBTLnAuQS4KKwlkOTUyICBQYWxsYWRpbyBVU0IgVi45MiBNb2RlbQorMDdhMiAgTmF0aW9uYWwgVGVjaG5pY2FsIFN5c3RlbXMKKzA3YTMgIE9ubnRvIENvcnAuCiswN2E0ICBCZSwgSW5jLgorMDdhNiAgQURNdGVrLCBJbmMuCisJMDdjMiAgQU45ODZBIEV0aGVybmV0CisJMDk4NiAgQU45ODYgUGVnYXN1cyBFdGhlcm5ldAorCTgyNjYgIEluZmluZW9uIFdpbGRDYXJkLVVTQiBXaXJlbGVzcyBMQU4gQWRhcHRlcgorCTg1MTEgIEFETTg1MTEgUGVnYXN1cyBJSSBFdGhlcm5ldAorCTg1MTMgIEFOODUxMyBFdGhlcm5ldAorCTg1MTUgIEFOODUxNSBFdGhlcm5ldAorMDdhYSAgQ29yZWdhIEsuSy4KKwkwMDAxICBFdGhlciBVU0ItVCBFdGhlcm5ldCBba2xzaV0KKwkwMDA0ICBGRXRoZXIgVVNCLVRYIEV0aGVybmV0IFtwZWdhc3VzXQorCTAwMGMgIFdpcmVsZXNzTEFOIFVTQi0xMQorCTAwMGQgIEZFdGhlciBVU0ItVFhTCisJMDAxMiAgU3RpY2stMTEgODAyLjExYiBBZGFwdGVyCisJMDAxNyAgRkV0aGVyIFVTQjItVFgKKwkwMDFhICBVTFVTQi0xMSBLZXkKKwkwMDJmICBDRy1XTFVTQjJHTkwKKwk3NjEzICBTdGljay0xMSBWMiA4MDIuMTFiIEFkYXB0ZXIKKwk5NjAxICBGRXRoZXIgVVNCLVRYQworMDdhYiAgRnJlZWNvbSBUZWNobm9sb2dpZXMKKwlmYzAxICBJREUgYnJpZGdlCisJZmMwMiAgQ2FibGUgSUkgVVNCLTIKKwlmYzAzICBVU0IyLUlERSBJREUgYnJpZGdlCisJZmNmOCAgRnJlZWNvbSBDbGFzc2ljIFNMIE5ldHdvcmsgRHJpdmUKKzA3YWYgIE1pY3JvdGVjaAorCTAwMDQgIFNDU0ktREIyNSBTQ1NJIEJyaWRnZSBbc2h1dHRsZV0KKwkwMDA1ICBTQ1NJLUhENTAgU0NTSSBCcmlkZ2UgW3NodXR0bGVdCisJMDAwNiAgQ2FtZXJhTWF0ZSBTbWFydE1lZGlhIGFuZCBDb21wYWN0Rmxhc2ggQ2FyZCBSZWFkZXIgW2V1c2Ivc2h1dHRsZV0KKwlmYzAxICBGcmVlY29tIFVTQi1JREUKKzA3YjAgIFRydXN0IFRlY2hub2xvZ2llcworCTAwMDEgIElTRE4gVEEKKwkwMDAyICBJU0ROIFRBMTI4IFBsdXMKKwkwMDAzICBJU0ROIFRBMTI4IERlbHV4ZQorCTAwMDUgIElTRE4gVEExMjggU0UKKwkwMDA2ICBJU0ROIFRBMTI4IENFCisJMDAwNyAgSVNETiBUQQorCTAwMDggIElTRE4gVEEKKzA3YjEgIElNUCwgSW5jLgorMDdiMiAgTW90b3JvbGEgQkNTLCBJbmMuCisJMDEwMCAgU1VSRmJvYXJkIFZvaWNlIG92ZXIgSVAgQ2FibGUgTW9kZW0KKwkwOTAwICBTVVJGYm9hcmQgR2F0ZXdheQorCTA5NTAgIFNVUkZib2FyZCBTQkc5NTAgR2F0ZXdheQorCTEwMDAgIFNVUkZib2FyZCBTQkcxMDAwIEdhdGV3YXkKKwk0MTAwICBTdXJmQm9hcmQgU0I0MTAwIENhYmxlIE1vZGVtCisJNDIwMCAgU3VyZkJvYXJkIFNCNDIwMCBDYWJsZSBNb2RlbQorCTQyMTAgIFN1cmZCb2FyZCA0MjEwIENhYmxlIE1vZGVtCisJNDIyMCAgU1VSRmJvYXJkIFNCNDIyMCBDYWJsZSBNb2RlbQorCTQ1MDAgIENHNDUwMCBDb21tdW5pY2F0aW9ucyBHYXRld2F5CisJNDUwYiAgQ0c0NTAxIENvbW11bmljYXRpb25zIEdhdGV3YXkKKwk0NTBlICBDRzQ1MDBFIENvbW11bmljYXRpb25zIEdhdGV3YXkKKwk1MTAwICBTdXJmQm9hcmQgU0I1MTAwIENhYmxlIE1vZGVtCisJNTEwMSAgU3VyZkJvYXJkIFNCNTEwMSBDYWJsZSBNb2RlbQorCTUxMjAgIFN1cmZCb2FyZCBTQjUxMjAgQ2FibGUgTW9kZW0gKFJORElTKQorCTcwMzAgIFdpcmVsZXNzIEFkYXB0ZXIgV1U4MzBHCiswN2IzICBQbHVzdGVrLCBJbmMuCisJMDAwMSAgT3B0aWNQcm8gMTIxMlUgU2Nhbm5lcgorCTAwMDMgIFNjYW5uZXIKKwkwMDEwICBPcHRpY1BybyBVMTIgU2Nhbm5lcgorCTAwMTEgIE9wdGljUHJvIFUyNCBTY2FubmVyCisJMDAxMyAgT3B0aWNQcm8gVVQxMiBTY2FubmVyCisJMDAxNCAgU2Nhbm5lcgorCTAwMTUgIE9wdGljUHJvIFUyNCBTY2FubmVyCisJMDAxNyAgT3B0aWNQcm8gVVQxMi8xNi8yNCBTY2FubmVyCisJMDIwNCAgU2Nhbm5lcgorCTA0MDAgIE9wdGljUHJvIDEyNDhVIFNjYW5uZXIKKwkwNDAxICBPcHRpY1BybyAxMjQ4VSBTY2FubmVyICMyCisJMDQwMyAgT3B0aWNQcm8gVTE2QiBTY2FubmVyCisJMDQwNCAgU2Nhbm5lcgorCTA0MDUgIEE4IE5hbWVjYXJkLXMgQ29udHJvbGxlcgorCTA0MDYgIEE4IE5hbWVjYXJkLUQgQ29udHJvbGxlcgorCTA0MTAgIFNjYW5uZXIKKwkwNDEyICBTY2FubmVyCisJMDgwMCAgT3B0aWNQcm8gU1Q0OCBTY2FubmVyCisJMGMwMyAgT3B0aWNQcm8gU1Q2NCsgU2Nhbm5lcgorMDdiNCAgT2x5bXB1cyBPcHRpY2FsIENvLiwgTHRkCisJMDEwMCAgQ2FtZWRpYSBDLTIxMDAvQy0zMDAwIFVsdHJhIFpvb20gQ2FtZXJhCisJMDEwMiAgQ2FtZWRpYSBFLTEwL0MtMjIwL0MtNTAgQ2FtZXJhCisJMDEwNSAgQ2FtZWRpYSBDLTMxMFovQy03MDAvQy03NTBVWi9DLTc1NS9DLTc2NVVaL0MtMzA0MC9DLTQwMDAvQy01MDUwWi9ELTU2MC9DLTMwMjBaIFpvb20gQ2FtZXJhCisJMDEwOSAgQy0zNzBaL0QtNTM1Wi9YLTQ1MAorCTAxMTIgIE1BVVNCLTEwMCB4RCBDYXJkIFJlYWRlcgorCTAxMTMgIE1qdSA1MDAKKwkwMTE0ICBDLTM1MFogQ2FtZXJhCisJMDExOCAgTWp1IE1pbmkgRGlnaXRhbC9NanUgRGlnaXRhbCA1MDAgQ2FtZXJhCisJMDE4NCAgUC1TMTAwIHBvcnQKKwkwMjAzICBEaWdpdGFsIFZvaWNlIFJlY29yZGVyIERXLTkwCisJMDIwNiAgRGlnaXRhbCBWb2ljZSBSZWNvcmRlciBEUy0zMzAKKwkwMjA3ICBEaWdpdGFsIFZvaWNlIFJlY29yZGVyICYgQ2FtZXJhIFctMTAKKwkwMjA5ICBEaWdpdGFsIFZvaWNlIFJlY29yZGVyIERNLTIwCisJMDIwZCAgRGlnaXRhbCBWb2ljZSBSZWNvcmRlciBWTi0yNDBQQworMDdiNSAgTWVnYSBXb3JsZCBJbnRlcm5hdGlvbmFsLCBMdGQKKwkwMDE3ICBKb3lzdGljaworCTAyMTMgIFRocnVzdG1hc3RlciBGaXJlc3Rvcm0gRGlnaXRhbCAzIEdhbWVwYWQKKwk5OTAyICBHYW1lUGFkCiswN2I2ICBNYXJ1YnVuIENvcnAuCiswN2I3ICBUSU1FIEludGVyY29ubmVjdCwgTHRkCiswN2I4ICBELUxpbmsgQ29ycC4KKwkxMTBjICBYWDEKKwkxMjAxICBJRUVFIDgwMi4xMWIgQWRhcHRlcgorCTIwMGMgIFhYMgorCTI1NzMgIFdpcmVsZXNzIExBTiBDYXJkCisJNDAwMCAgRFUtRTEwIEV0aGVybmV0IFtrbHNpXQorCTQwMDIgIERVLUUxMDAgRXRoZXJuZXQgW3BlZ2FzdXNdCisJNDAwMyAgMS8xMC8xMDAgRXRoZXJuZXQgQWRhcHRlcgorCTQwMDQgIFhYNAorCTQwMDcgIFhYNQorCTQwMGIgIFhYNgorCTQwMGMgIFhYNworCTQwMWEgIFJUTDgxNTEKKwk0MTAyICBVU0IgMS4xIDEwLzEwME0gRmFzdCBFdGhlcm5ldCBBZGFwdGVyCisJNDEwNCAgWFg5CisJNDIwYSAgVUYyMDAgRXRoZXJuZXQKKwk2MDAxICBXTDU0CisJYTAwMSAgV2lyZWxlc3MgTmV0d29yayBBZGFwdGVyCisJYWJjMSAgRFUtRTEwIEV0aGVybmV0IFtwZWdhc3VzXQorCWIwMDAgIEJXVTYxMworCWIwMmEgIEFib0NvbSBCbHVldG9vdGggRGV2aWNlCisJYjAyYiAgQmx1ZXRvb3RoIGRvbmdsZQorCWIwMmMgIEJDTTkyMDQ1REctRmxhc2ggd2l0aCB0cmFjZSBmaWx0ZXIKKwliMDJkICBCQ005MjA0NURHLUZsYXNoIHdpdGggdHJhY2UgZmlsdGVyCisJYjAyZSAgQkNNOTIwNDVERy1GbGFzaCB3aXRoIHRyYWNlIGZpbHRlcgorCWIwMzAgIEJDTTkyMDQ1REctRmxhc2ggd2l0aCB0cmFjZSBmaWx0ZXIKKwliMDMxICBCQ005MjA0NURHLUZsYXNoIHdpdGggdHJhY2UgZmlsdGVyCisJYjAzMiAgQkNNOTIwNDVERy1GbGFzaCB3aXRoIHRyYWNlIGZpbHRlcgorCWIwMzMgIEJDTTkyMDQ1REctRmxhc2ggd2l0aCB0cmFjZSBmaWx0ZXIKKwliMjFhICA4MDIuMTFnIFdpcmVsZXNzIEFkYXB0ZXIKKwliMjFiICBIV1U1NERNCisJYjIxYyAgUlQyNTczCisJYjIxZCAgUlQyNTczCisJYjIxZSAgUlQyNTczCisJYjIxZiAgV1VHMjcwMAorCWQwMTEgIE1QMyBQbGF5ZXIKKwllMDAxICBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJZTAwMiAgTWFzcyBTdG9yYWdlIERldmljZQorCWUwMDMgIE1hc3MgU3RvcmFnZSBEZXZpY2UKKwllMDA0ICBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJZTAwNSAgTWFzcyBTdG9yYWdlIERldmljZQorCWUwMDYgIE1hc3MgU3RvcmFnZSBEZXZpY2UKKwllMDA3ICBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJZTAwOCAgTWFzcyBTdG9yYWdlIERldmljZQorCWUwMDkgIE1hc3MgU3RvcmFnZSBEZXZpY2UKKwllMDBhICBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJZTRmMCAgQ2FyZCBSZWFkZXIgRHJpdmVyCisJZjEwMSAgRFNCLTU2MCBNb2RlbSBbYXRsYXNdCiswN2JjICBDYW5vbiBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCiswN2JkICBXZWJnZWFyLCBJbmMuCiswN2JlICBWZXJpZGljb20KKzA3YzAgIENvZGUgTWVyY2VuYXJpZXMgSGFyZC0gdW5kIFNvZnR3YXJlIEdtYkgKKwkxMTIxICBUaGUgQ2xhdworCTE1MDAgIElPLVdhcnJpb3IgNDAKKwkxNTAxICBJTy1XYXJyaW9yIDI0CisJMTUwMiAgSU8tV2FycmlvciA0OAorCTE1MDMgIElPLVdhcnJpb3IgMjgKKzA3YzEgIEtlaXNva3VnaWtlbgorCTAwNjggIEhLUy0wMjAwIFVTQkRBUQorMDdjNCAgRGF0YWZhYiBTeXN0ZW1zLCBJbmMuCisJMDEwMiAgVVNCIHRvIExTMTIwCisJMDEwMyAgVVNCIHRvIElERQorCTEyMzQgIFVTQiB0byBBVEFQSQorCWEwMDAgIENvbXBhY3RGbGFzaCBDYXJkIFJlYWRlcgorCWEwMDEgIENvbXBhY3RGbGFzaCAmIFNtYXJ0TWVkaWEgQ2FyZCBSZWFkZXIgW2V1c2JdCisJYTAwMiAgRGlzayBEcml2ZQorCWEwMDMgIERhdGFmYWItYmFzZWQgUmVhZGVyCisJYTAwNCAgVVNCIHRvIE1NQyBDbGFzcyBEcml2ZQorCWEwMDUgIENvbXBhY3RGbGFzaCAmIFNtYXJ0TWVkaWEgQ2FyZCBSZWFkZXIKKwlhMDA2ICBTbWFydE1lZGlhIENhcmQgUmVhZGVyCisJYTAwNyAgTWVtb3J5IFN0aWNrIENsYXNzIERyaXZlCisJYTEwMyAgTURTTS1CIHJlYWRlcgorCWExMDcgIFVTQiB0byBNZW1vcnkgU3RpY2sgKExDMSkgRHJpdmUKKwlhMTA5ICBMQzEgQ29tcGFjdEZsYXNoICYgU21hcnRNZWRpYSBDYXJkIFJlYWRlcgorCWExMGIgIFVTQiB0byBDRitNUyhMQzEpCisJYTIwMCAgREYtVVQtMDYgSGFtYSBNTUMvU0QgUmVhZGVyCisJYTQwMCAgQ29tcGFjdEZsYXNoICYgTWljcm9kcml2ZSBSZWFkZXIKKwlhNjAwICBDYXJkIFJlYWRlcgorCWFkMDEgIE1hc3MgU3RvcmFnZSBEZXZpY2UKKwlhZTAxICBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJYWYwMSAgTWFzcyBTdG9yYWdlIERldmljZQorCWIwMDAgIFVTQiB0byBDRihMQzEpCisJYjAwMSAgVVNCIHRvIENGK1BDTUNJQQorCWIwMDQgIE1NQy9TRCBSZWFkZXIKKwliMDA2ICBVU0IgdG8gUENNQ0lBCisJYjAwYSAgVVNCIHRvIENGK1NEIERyaXZlKExDMSkKKwliMDBiICBVU0IgdG8gTWVtb3J5IFN0aWNrKExDMSkKKzA3YzUgIEFQRyBDYXNoIERyYXdlcgorMDdjNiAgU2hhcmVXYXZlLCBJbmMuCiswN2M3ICBQb3dlcnRlY2ggSW5kdXN0cmlhbCBDby4sIEx0ZAorMDdjOCAgQi5VLkcuLCBJbmMuCisJMDIwMiAgTU4xMjgtU09ITyBQQUwKKzA3YzkgIEFsbGllZCBUZWxlc3luIEludGVybmF0aW9uYWwKKwliMTAwICBBVC1VU0IxMDAKKzA3Y2EgIEFWZXJNZWRpYSBUZWNobm9sb2dpZXMsIEluYy4KKwkwMDAyICBBVmVyVFYgUFZSIFVTQi9FWk1ha2VyIFBybyBEZXZpY2UKKwkwMDI2ICBBVmVyVFYKKwkxMjI4ICBNUEVHLTIgQ2FwdHVyZSBEZXZpY2UgKE0wMzgpCisJZTg4MCAgTVBFRy0yIENhcHR1cmUgRGV2aWNlIChFODgwKQorCWU4ODIgIE1QRUctMiBDYXB0dXJlIERldmljZSAoRTg4MikKKzA3Y2IgIEtpbmdtYXggVGVjaG5vbG9neSwgSW5jLgorMDdjYyAgQ2FycnkgQ29tcHV0ZXIgRW5nLiwgQ28uLCBMdGQKKwkwMDAwICBDRiBDYXJkIFJlYWRlcgorCTAwMDEgIFJlYWRlciAoVUlDU0UpCisJMDAwMiAgUmVhZGVyIChVSVMpCisJMDAwMyAgU00gQ2FyZCBSZWFkZXIKKwkwMDA0ICBTTS9DRi9QQ01DSUEgQ2FyZCBSZWFkZXIKKwkwMDA1ICBSZWFkZXIgKFVJU0EyU0UpCisJMDAwNiAgU00vQ0YvUENNQ0lBIENhcmQgUmVhZGVyCisJMDAwNyAgUmVhZGVyIChVSVNBNlNFKQorCTAwMGMgIFNNL0NGIENhcmQgUmVhZGVyCisJMDAwZCAgU00vQ0YgQ2FyZCBSZWFkZXIKKwkwMDBlICBSZWFkZXIgKFVJU0RBKQorCTAwMGYgIFJlYWRlciAoVUlDTElLKQorCTAwMTAgIFJlYWRlciAoVUlTTUEpCisJMDAxMiAgUmVhZGVyIChVSVNDNlNFLUZMQVNIKQorCTAwMTQgIExpdHJvbmljIEZvcnRlenphIFJlYWRlcgorCTAwMzAgIE1hc3MgU3RvcmFnZSAoVUlTRE1DMTJTKQorCTAwNDAgIE1hc3MgU3RvcmFnZSAoVUlTRE1DMTNTKQorCTAxMDAgIFJlYWRlciAoVUlEKQorCTAxMDEgIFJlYWRlciAoVUlNKQorCTAxMDIgIFJlYWRlciAoVUlTRE1BKQorCTAxMDMgIFJlYWRlciAoVUlTRE1DKQorCTAxMDQgIFJlYWRlciAoVUlTRE0pCisJMDIwMCAgNi1pbi0xIENhcmQgUmVhZGVyCisJMDIwMSAgTWFzcyBTdG9yYWdlIChVSVNETUMxUyAmIFVJU0RNQzNTKQorCTAyMDIgIE1hc3MgU3RvcmFnZSAoVUlTRE1DNVMpCisJMDIwMyAgTWFzcyBTdG9yYWdlIChVSVNNQzVTKQorCTAyMDQgIE1hc3MgU3RvcmFnZSAoVUlNNC81UyAmIFVJTTdTKQorCTAyMDUgIE1hc3MgU3RvcmFnZSAoVUlTNC81UyAmIFVJUzdTKQorCTAyMDYgIE1hc3MgU3RvcmFnZSAoVUlTRE1DMTBTICYgVUlTRE1DMTFTKQorCTAyMDcgIE1hc3MgU3RvcmFnZSAoVVBJRE1BKQorCTAyMDggIE1hc3MgU3RvcmFnZSAoVUNGQyBJSSkKKwkwMjEwICBNYXNzIFN0b3JhZ2UgKFVQSVhYQSkKKwkwMjEzICBNYXNzIFN0b3JhZ2UgKFVQSURBKQorCTAyMTQgIE1hc3MgU3RvcmFnZSAoVVBJTUEpCisJMDIxNSAgTWFzcyBTdG9yYWdlIChVUElTQSkKKwkwMjE3ICBNYXNzIFN0b3JhZ2UgKFVQSVNETUEpCisJMDIyMyAgTWFzcyBTdG9yYWdlIChVQ0lEQSkKKwkwMjI0ICBNYXNzIFN0b3JhZ2UgKFVDSU1BKQorCTAyMjUgIE1hc3MgU3RvcmFnZSAoVUlTN1MpCisJMDIyNyAgTWFzcyBTdG9yYWdlIChVQ0lETUEpCisJMDIzNCAgTWFzcyBTdG9yYWdlIChVSU03UykKKwkwMjM1ICBNYXNzIFN0b3JhZ2UgKFVJUzRTLVMpCisJMDIzNyAgVmVscGVyIChVSVNETUM0UykKKwkwMzAwICA2LWluLTEgQ2FyZCBSZWFkZXIKKwkwMzAxICA2LWluLTEgQ2FyZCBSZWFkZXIKKwkwMzAzICBNYXNzIFN0b3JhZ2UgKFVJRDEwVykKKwkwMzA0ICBNYXNzIFN0b3JhZ2UgKFVJTTEwVykKKwkwMzA1ICBNYXNzIFN0b3JhZ2UgKFVJUzEwVykKKwkwMzA4ICBNYXNzIFN0b3JhZ2UgKFVJQzEwVykKKwkwMzA5ICBNYXNzIFN0b3JhZ2UgKFVJU0MzVykKKwkwMzEwICBNYXNzIFN0b3JhZ2UgKFVJU0RNQTJXKQorCTAzMTEgIE1hc3MgU3RvcmFnZSAoVUlTRE1DMTRXKQorCTAzMjAgIE1hc3MgU3RvcmFnZSAoVUlTRE1DNFcpCisJMDMyMSAgTWFzcyBTdG9yYWdlIChVSVNETUMzN1cpCisJMDMzMCAgV0lOVEVSUkVBREVSIFJlYWRlcgorCTAzNTAgIDktaW4tMSBDYXJkIFJlYWRlcgorCTA1MDAgIE1hc3MgU3RvcmFnZQorCTA1MDEgIE1hc3MgU3RvcmFnZQorMDdjZCAgRWxla3RvcgorCTAwMDEgIFVTQnVhcnQgU2VyaWFsIFBvcnQKKzA3Y2YgIENhc2lvIENvbXB1dGVyIENvLiwgTHRkCisJMTAwMSAgUVYtODAwMFNYLzU3MDAvMzAwMEVYIERpZ2ljYW07IEV4aWxpbSBFWC1NMjAKKwkxMDAzICBFeGlsaW0gRVgtUzUwMAorCTEwMDQgIEV4aWxpbSBFWC1aMTIwCisJMTAxMSAgVVNCLUNBU0lPIFBDIENBTUVSQQorCTIwMDIgIEUtMTI1IENhc3Npb3BlaWEgUG9ja2V0IFBDCisJMzgwMSAgV01QLTEgTVAzLVdhdGNoCisJNDAwMSAgTGFiZWwgUHJpbnRlciBLTC1QMTAwMAorCTQwMDcgIENXNTAgRGV2aWNlCisJNDEwNCAgQ3c3NSBEZXZpY2UKKwk0MTA3ICBDVy1MMzAwIERldmljZQorCTQ1MDAgIExWLTIwIERpZ2l0YWwgQ2FtZXJhCisJNjgwMSAgUEwtNDBSCisJNjgwMiAgTUlESSBLZXlib2FyZAorMDdkMCAgRGF6emxlCisJMDAwMSAgRGlnaXRhbCBWaWRlbyBDcmVhdG9yIEkKKwkwMDAyICBHbG9iYWwgVmlsbGFnZSBWaWRlb0ZYIEdyYWJiZXIKKwkwMDAzICBGdXNpb24gTW9kZWwgRFZDLTUwIFJldiAxIChOVFNDKQorCTAwMDQgIERWQy04MDAgKFBBTCkgR3JhYmJlcgorCTAwMDUgIEZ1c2lvbiBWaWRlbyBhbmQgQXVkaW8gUG9ydHMKKwkwMDA2ICBEVkMgMTUwIExvYWRlciBEZXZpY2UKKwkwMDA3ICBEVkMgMTUwCisJMDMyNyAgRnVzaW9uIERpZ2l0YWwgTWVkaWEgUmVhZGVyCisJMTAwMSAgRE0tRkxFWCBERlUgQWRhcHRlcgorCTEwMDIgIERNSFMyIERGVSBBZGFwdGVyCisJMTEwMiAgQ0YgUmVhZGVyL1dyaXRlcgorCTExMDMgIFNEIFJlYWRlci9Xcml0ZXIKKwkxMTA0ICBTTSBSZWFkZXIvV3JpdGVyCisJMTEwNSAgTVMgUmVhZGVyL1dyaXRlcgorCTExMDYgIHhEL1NNIFJlYWRlci9Xcml0ZXIKKwkxMjAyICBNdWx0aVNsb3QgUmVhZGVyL1dyaXRlcgorCTIwMDAgIEZYMiBERlUgQWRhcHRlcgorCTIwMDEgIGVVU0IgQ29tcGFjdEZsYXNoIFJlYWRlcgorCTQxMDAgIEtpbmdzdW4gU0YtNjIwIEluZnJhcmVkIEFkYXB0ZXIKKwk0OTU5ICBLaW5nc3VuIEtTLTk1OSBJbmZyYXJlZCBBZGFwdGVyCiswN2QxICBELUxpbmsgU3lzdGVtCisJMTNlYyAgVnZCdXMgZm9yIEhlbGl1bSAyeHgKKwkxM2VkICBWdkJ1cyBmb3IgSGVsaXVtIDJ4eAorCTEzZjEgIERTTC0zMDJHIE1vZGVtCisJMTNmMiAgRFNMLTUwMkcgUm91dGVyCisJM2EwNyAgV1VBLTIzNDAgQWRhcHRlcgorCTNhMDggIHByZWRhdG9yIEJvb3Rsb2FkZXIgRG93bmxvYWQKKwkzYTBkICBEV0EtMTIwIFdpcmVsZXNzIDEwOEcgQWRhcHRlcgorCTNiMDEgIEFpclBsdXMgRyBEV0wtRzEyMiBXaXJlbGVzcyBBZGFwdGVyCisJM2IxMCAgUmFuZ2VCb29zdGVyIE4gQWRhcHRlcgorCTNiMTEgIFdpcmVsZXNzIE4gQWRhcHRlciBEV0EtMTMwCisJM2MwMyAgRFdMLUcxMjIgODAyLjExZyBBZGFwdGVyIFtyYWxpbmsgcnQ3M10KKwkzYzA0ICBXVUEtMTM0MAorCTNjMDUgIEVIMTAzIFdpcmVsZXNzIEcgQWRhcHRlcgorCTNjMDcgIFdpcmVsZXNzIEcgRFdBLTExMCBBZGFwdGVyCisJM2MwOSAgRFdBLTE0MCA4MDIuMTFuIEFkYXB0ZXIgW3JhbGluayBydDI4NzBdCisJNTEwMCAgUmVtb3RlIE5ESVMgRGV2aWNlCisJZjEwMSAgREJULTEyMiBCbHVldG9vdGgKKwlmYzAxICBEQlQtMTIwIEJsdWV0b290aCBBZGFwdGVyCiswN2QyICBBcHRpbyBQcm9kdWN0cywgSW5jLgorMDdkMyAgQ3liZXJkYXRhIENvcnAuCiswN2Q3ICBHQ0MgVGVjaG5vbG9naWVzLCBJbmMuCiswN2RhICBBcmFzYW4gQ2hpcCBTeXN0ZW1zCiswN2RlICBEaWFtb25kIE11bHRpbWVkaWEKKwkyODIwICBWQzUwMCBWaWRlbyBDYXB0dXJlIERvbmdsZQorMDdkZiAgRGF2aWQgRWxlY3Ryb25pY3MgQ28uLCBMdGQKKzA3ZTEgIEFtYmllbnQgVGVjaG5vbG9naWVzLCBJbmMuCisJNTIwMSAgVi45MCBNb2RlbQorMDdlMiAgRWxtZWcgR21iSCAmIENvLiwgTHRkCiswN2UzICBQbGFuZXggQ29tbXVuaWNhdGlvbnMsIEluYy4KKzA3ZTQgIE1vdmFkbyBFbnRlcnByaXNlIENvLiwgTHRkCisJMDk2NyAgU0NhcmQgUi9XIENTUi0xNDUKKwkwOTY4ICBTQ2FyZCBSL1cgQ1NSLTE0NQorMDdlNSAgUVBTLCBJbmMuCisJMDVjMiAgSURFLXRvLVVTQjIuMCBQQ0EKKwk1YzAxICBRdWUhIENEUlcKKzA3ZTYgIEFsbGllZCBDYWJsZSBDb3JwLgorMDdlNyAgTWlydm8gVG95cywgSW5jLgorMDdlOCAgTGFic3lzdGVtcworMDdlYSAgSXdhdHN1IEVsZWN0cmljIENvLiwgTHRkCiswN2ViICBEb3VibGUtSCBUZWNobm9sb2d5IENvLiwgTHRkCiswN2VjICBUYWl5byBFbGVjdHJpYyBXaXJlICYgQ2FibGUgQ28uLCBMdGQKKzA3ZWUgIFRvcmV4IFJldGFpbCAoZm9ybWVybHkgTG9nd2FyZSkKKwkwMDAyICBDYXNoIERyYXdlciBJL0YKKzA3ZWYgIFNUU04KKwkwMDAxICBJbnRlcm5ldCBBY2Nlc3MgRGV2aWNlCiswN2Y2ICBDaXJjdWl0IEFzc2VtYmx5IENvcnAuCiswN2Y3ICBDZW50dXJ5IENvcnAuCisJMDAwNSAgU2NhbkxvZ2ljL0NlbnR1cnkgQ29ycG9yYXRpb24gdUFUQQorCTAxMWUgIENlbnR1cnkgVVNCIERpc2sgRW5jbG9zdXJlCiswN2Y5ICBEb3RvcCBUZWNobm9sb2d5LCBJbmMuCiswN2ZhICBEcmF5dGVrCisJMDc3OCAgbWluaVZpZ29yIDEyOCBJU0ROIFRBCisJMTAxMiAgQmVXQU4gQURTTCBVU0IgU1QgKGdyZXkpCisJYTkwNCAgQmVXQU4gQURTTAorCWE5MDUgIEJlV0FOIEFEU0wgU1QKKzA3ZmQgIE1hcmsgb2YgdGhlIFVuaWNvcm4KKwkwMDAwICBGYXN0TGFuZSBNSURJIEludGVyZmFjZQorCTAwMDEgIEZhc3RMYW5lIFF1YWQgTUlESSBJbnRlcmZhY2UKKwkwMDAyICBNT1RVIEF1ZGlvIGZvciA2NCBiaXQKKzA4MDEgIE1hZy1UZWsKKwkwMDAyICBNaW5pIFN3aXBlIFJlYWRlcgorMDgwMiAgTWFrbyBUZWNobm9sb2dpZXMsIExMQworMDgwMyAgWm9vbSBUZWxlcGhvbmljcywgSW5jLgorCTEzMDAgIFY5MiBGYXhtb2RlbQorCTQzMTAgIFdpcmVsZXNzLUcKKwk1MjQxICBDYWJsZSBNb2RlbQorCTU1NTEgIERTTCBNb2RlbQorCTk3MDAgIDI5ODZMIEZheE1vZGVtCisJOTgwMCAgQ2FibGUgTW9kZW0KKwlhMzEyICBXaXJlbGVzcy1HCiswODA5ICBHZW5pY29tIFRlY2hub2xvZ3ksIEluYy4KKzA4MGEgIEV2ZXJtdWNoIFRlY2hub2xvZ3kgQ28uLCBMdGQKKzA4MGMgIERhdGFsb2dpYyBTLnAuQS4KKwkwMzAwICBHcnlwaG9uIEQxMjAgQmFyY29kZSBTY2FubmVyCisJMDQwMCAgR3J5cGhvbiBEMTIwIEJhcmNvZGUgU2Nhbm5lcgorCTA1MDAgIEdyeXBob24gRDEyMCBCYXJjb2RlIFNjYW5uZXIKKwkwNjAwICBHcnlwaG9uIE0xMDAgQmFyY29kZSBTY2FubmVyCiswODBkICBUZWNvIEltYWdlIFN5c3RlbXMgQ28uLCBMdGQKKwkwMTAyICBIZXJjdWxlcyBTY2FuQGhvbWUgNDgKKwkwMTA0ICAzLjJTbGltCisJMDExMCAgVU1BWCBBc3RyYVNsaW0gMTIwMCBTY2FubmVyCiswODEwICBQZXJzb25hbCBDb21tdW5pY2F0aW9uIFN5c3RlbXMsIEluYy4KKzA4MTMgIE1hdHRlbCwgSW5jLgorCTAwMDEgIEludGVsIFBsYXkgUVgzIE1pY3Jvc2NvcGUKKwkwMDAyICBEdWFsIE1vZGUgQ2FtZXJhIFBsdXMKKzA4MWEgIE1HIExvZ2ljCisJMTAwMCAgRHVvIFBlbiBUYWJsZXQKKzA4MWIgIEluZGlnaXRhIENvcnAuCisJMDYwMCAgU3RvcmFnZSBBZGFwdGVyCisJMDYwMSAgU3RvcmFnZSBBZGFwdGVyCiswODFjICBNaXBzeXMKKzA4MWUgIEFscGhhU21hcnQsIEluYy4KKwlkZjAwICBIYW5kaGVsZAorMDgyMiAgUmV1ZG8gQ29ycC4KKwkyMDAxICBJUlhwcmVzcyBJbmZyYXJlZCBEZXZpY2UKKzA4MjUgIEdDIFByb3Ryb25pY3MKKzA4MjYgIERhdGEgVHJhbnNpdAorMDgyNyAgQnJvYWRMb2dpYywgSW5jLgorMDgyOCAgU2F0byBDb3JwLgorMDgyOSAgRGlyZWNUViBCcm9hZGJhbmQsIEluYy4gKFRlbG9jaXR5KQorMDgyZCAgSGFuZHNwcmluZworCTAxMDAgIFZpc29yCisJMDIwMCAgVHJlbworCTAzMDAgIFRyZW8gNjAwCisJMDQwMCAgSGFuZGhlbGQKKwkwNTAwICBIYW5kaGVsZAorCTA2MDAgIEhhbmRoZWxkCiswODMwICBQYWxtLCBJbmMuCisJMDAwMSAgbTUwMAorCTAwMDIgIG01MDUKKwkwMDAzICBtNTE1CisJMDAwNCAgSGFuZGhlbGQKKwkwMDA1ICBIYW5kaGVsZAorCTAwMDYgIEhhbmRoZWxkCisJMDAxMCAgSGFuZGhlbGQKKwkwMDExICBIYW5kaGVsZAorCTAwMTIgIEhhbmRoZWxkCisJMDAxMyAgSGFuZGhlbGQKKwkwMDE0ICBIYW5kaGVsZAorCTAwMjAgIGk3MDUKKwkwMDIxICBIYW5kaGVsZAorCTAwMjIgIEhhbmRoZWxkCisJMDAyMyAgSGFuZGhlbGQKKwkwMDI0ICBIYW5kaGVsZAorCTAwMzAgIEhhbmRoZWxkCisJMDAzMSAgVHVuZ3N0ZW4gVworCTAwMzIgIEhhbmRoZWxkCisJMDAzMyAgSGFuZGhlbGQKKwkwMDM0ICBIYW5kaGVsZAorCTAwNDAgIG0xMjUKKwkwMDQxICBIYW5kaGVsZAorCTAwNDIgIEhhbmRoZWxkCisJMDA0MyAgSGFuZGhlbGQKKwkwMDQ0ICBIYW5kaGVsZAorCTAwNTAgIG0xMzAKKwkwMDUxICBIYW5kaGVsZAorCTAwNTIgIEhhbmRoZWxkCisJMDA1MyAgSGFuZGhlbGQKKwkwMDU0ICBIYW5kaGVsZAorCTAwNjAgIFR1bmdzdGVuIEMvRS9UL1QyL1QzIC8gWmlyZSA3MQorCTAwNjEgIExpZmVkcml2ZSAvIFRyZW8gNjUwLzY4MCAvIFR1bnN0ZW4gRTIvVDUvVFggLyBaaXJlIDIxLzMxLzcyIC8gWjIyCisJMDA2MiAgSGFuZGhlbGQKKwkwMDYzICBIYW5kaGVsZAorCTAwNjQgIEhhbmRoZWxkCisJMDA3MCAgWmlyZQorCTAwNzEgIEhhbmRoZWxkCisJMDA3MiAgSGFuZGhlbGQKKwkwMDgwICBTZXJpYWwgQWRhcHRlciBbZm9yIFBhbG0gSUlJXQorCTAwODEgIEhhbmRoZWxkCisJMDA4MiAgSGFuZGhlbGQKKzA4MzIgIEtvdXdlbGwgRWxlY3Ryb25pY3MgQ29ycC4KKwk1ODUwICBDYWJsZQorMDgzMyAgU291cmNlbmV4dCBDb3JwLgorCTAxMmUgIEtlaWthaURlbndhIDggd2l0aCBjaGFyZ2VyCisJMDM5ZiAgS2Vpa2FpRGVud2EgOAorMDgzNSAgQWN0aW9uIFN0YXIgRW50ZXJwcmlzZSBDby4sIEx0ZAorMDgzOSAgU2Ftc3VuZyBUZWNod2luIENvLiwgTHRkCisJMDAwNSAgRGlnaW1heCBDYW1lcmEKKwkwMDA4ICBEaWdpbWF4IDIzMCBDYW1lcmEKKwkwMDA5ICBEaWdpbWF4IDM0MAorCTAwMGEgIERpZ2ltYXggNDEwCisJMDAwZSAgRGlnaW1heCAzNjAKKwkwMDEwICBEaWdpbWF4IDMwMAorCTEwMDMgIERpZ2ltYXggMjEwU0UKKwkxMDA1ICBEaWdpbWF4IDIyMAorCTEwMDkgIERpZ2ltYXggVjQKKwkxMDEyICA2NTAwIERvY3VtZW50IENhbWVyYQorCTEwNTggIFM3MzAgQ2FtZXJhCisJMTU0MiAgRGlnaW1heCA1MCBEdW8KKwkzMDAwICBEaWdpbWF4IDM1IE1QMworMDgzYSAgQWNjdG9uIFRlY2hub2xvZ3kgQ29ycC4KKwkxMDQ2ICAxMC8xMDAgRXRoZXJuZXQgW3BlZ2FzdXNdCisJMTA2MCAgSG9tZUxpbmUgQWRhcHRlcgorCTFmNGQgIFNNQzgwMTNXRyBCcm9hZGJhbmQgUmVtb3RlIE5ESVMgRGV2aWNlCisJMzA0NiAgMTAvMTAwIFNlcmllcyBBZGFwdGVyCisJMzA2MCAgMS8xMC8xMDAgQWRhcHRlcgorCTM1MDEgIDI2NjRXCisJMzUwMiAgV04zNTAxRCBXaXJlbGVzcyBBZGFwdGVyCisJMzUwMyAgVC1TaW51cyAxMTEgV2lyZWxlc3MgQWRhcHRlcgorCTQ1MDEgIFQtU2ludXMgMTU0ZGF0YQorCTQ1MDUgIFNNQ1dVU0ItRworCTUwNDYgIFNwZWVkU3RyZWFtIDEwLzEwMCBFdGhlcm5ldCBbcGVnYXN1c10KKwk1NTAxICBXaXJlbGVzcyBBZGFwdGVyIDExZworCTY1MDAgIENhYmxlIE1vZGVtCisJNjYxOCAgODAyLjExbiBXaXJlbGVzcyBBZGFwdGVyCisJNzUyMiAgODAyLjExTiBXaXJlbGVzcyBBZGFwdGVyCisJYTYxOCAgU01DIEVaIENvbm5lY3QgTiBEcmFmdCAxMW4gV2lyZWxlc3MgQWRhcHRlcgorCWIwMDQgIENQV1VFMDAxIFVTQi9FdGhlcm5ldCBBZGFwdGVyCisJYjUyMiAgRVogQ29ubmVjdCBOIERyYWZ0IDExbiBXaXJlbGVzcyBVU0IyLjAgQWRhcHRlcgorCWJiMDEgIEJsdWVFeHBlcnQgQmx1ZXRvb3RoIERldmljZQorCWMwMDMgIDgwMi4xMWIgV2lyZWxlc3MgQWRhcHRlcgorCWM1MDEgIFpvb20gV2lyZWxlc3MtRworCWM1NjEgIDgwMi4xMWEvZyBXaXJlbGVzcyBBZGFwdGVyCisJZTUwMSAgWkQxMjExQgorCWY1MDEgIDgwMi4xMWcgV2lyZWxlc3MgQWRhcHRlcgorCWY1MDIgIDgwMi4xMWcgV2lyZWxlc3MgQWRhcHRlcgorMDgzZiAgR2xvYmFsIFZpbGxhZ2UKKwliMTAwICBUZWxlUG9ydCBWLjkwIEZheC9Nb2RlbQorMDg0MCAgQXJnb3N5IFJlc2VhcmNoLCBJbmMuCisJMDA2MCAgU3RvcmFnZSBBZGFwdGVyIEJyaWRnZSBNb2R1bGUKKzA4NDEgIFJpb3BvcnQuY29tLCBJbmMuCisJMDAwMSAgUmlvIDUwMAorMDg0NCAgV2VsbGFuZCBJbmR1c3RyaWFsIENvLiwgTHRkCiswODQ2ICBOZXRHZWFyLCBJbmMuCisJMTAwMSAgRUExMDEgRXRoZXJuZXQgW2tsc2ldCisJMTAwMiAgRXRoZXJuZXQKKwkxMDIwICBFdGhlcm5ldCAxMC8xMDAsIFVTQjEuMQorCTEwNDAgIFVTQiAyLjAgRXRoZXJuZXQKKwk0MTEwICBNQTExMSBXaUZpICh2MSkKKwk0MjAwICBXRzEyMSBXaUZpICh2MSkKKwk0MjEwICBXRzEyMSBXaUZpICh2MikKKwk0MjIwICBXRzExMSBXaUZpICh2MSkKKwk0MjMwICBNQTExMSBXaUZpICh2MikKKwk0MjQwICBXRzExMSBXaUZpICh2MikKKwk0MjYwICBXRzExMXYzIDgwMi4xMWcgQWRhcHRlciBbcmVhbHRlayBSVEw4MTg3Ql0KKwk0MzAwICBXRzExMVUKKwk0MzAxICBXRzExMVUgKG5vIGZpcm13YXJlKQorCTZhMDAgIFdHMTExIFdpRmkgKHYyKQorCTcxMDAgIFdOMTIxVCBXaXJlbGVzcyBBZGFwdGVyCisJOTAwMCAgUmFuZ2VNYXggTkVYVCBXaXJlbGVzcy1OIEFkYXB0ZXIgV04xMTEKKwlhMDAxICBQQTEwMSBQaG9uZWxpbmUxMFggQWRhcHRlcgorMDg0ZCAgTWludG9uIE9wdGljIEluZHVzdHJ5IENvLiwgSW5jLgorCTAwMDEgIEplbm9wdGlrIEpEODAwaQorCTAwMDMgIFMtQ2FtIEY1IERpZ2l0YWwgQ2FtZXJhCisJMDAxMSAgQXJndXMgREMzNTAwIERpZ2l0YWwgQ2FtZXJhCisJMDAxNCAgUHJha3RpY2EgREMgMzIKKwkwMDE5ICBQcmFrdGljYSBEUGl4MzAwMAorCTAwMjUgIFByYWt0aWNhIERDIDYwCisJMTAwMSAgU2NhbkhleCBTWC0zNWQKKzA4NGUgIEtCIEdlYXIKKwkwMDAxICBLQkdlYXIgSmFtQ2FtCisJMTAwMiAgUGFibG8gVGFibGV0CiswODRmICBFbXBlZworCTAwMDEgIEVtcGVnLUNhciBNYXJrIEkvSUkgUGxheWVyCiswODUwICBGYXN0IFBvaW50IFRlY2hub2xvZ2llcywgSW5jLgorMDg1MSAgTWFjcm9uaXggSW50ZXJuYXRpb25hbCBDby4sIEx0ZAorCTE1NDIgIFNpUGl4IEJsaW5rCisJMTU0MyAgTWF4ZWxsIFdTMzAgU2xpbSBEaWdpdGFsIENhbWVyYQorCWExNjggIE1YSUMKKzA4NTIgIENTRU0KKzA4NTMgIFRvcHJlIENvcnBvcmF0aW9uCisJMDEwMCAgSEhLQiBQcm9mZXNzaW9uYWwKKzA4NTQgIEFjdGl2ZVdpcmUsIEluYy4KKwkwMTAwICBJL08gQm9hcmQKKwkwMTAxICBJL08gQm9hcmQsIHJldjEKKzA4NTYgIEImQiBFbGVjdHJvbmljcworCWFjMDEgIHVMaW5rcyBVU09UTDQgUlM0MjIvNDg1IEFkYXB0ZXIKKzA4NTggIEhpdGFjaGkgTWF4ZWxsLCBMdGQKKwkzMTAyICBCbHVldG9vdGggRGV2aWNlCisJZmZmZiAgTWF4ZWxsIG1vZHVsZSB3aXRoIEJsdWVDb3JlIGluIERGVSBtb2RlCiswODU5ICBNaW5vbHRhIFN5c3RlbXMgTGFib3JhdG9yeSwgSW5jLgorMDg1YSAgWGlyY29tCisJMDAwMSAgUG9ydHN0YXRpb24gRHVhbCBTZXJpYWwgUG9ydAorCTAwMDMgIFBvcnRzdGF0aW9uIFBhcmFsbGVyIFBvcnQKKwkwMDA4ICBFdGhlcm5ldAorCTAwMDkgIEV0aGVybmV0CisJMDAwYiAgUG9ydHN0YXRpb24gRHVhbCBQUy8yIFBvcnQKKwkwMDIxICAxIHBvcnQgdG8gU2VyaWFsIENvbnZlcnRlcgorCTAwMjIgIFBhcmFsbGVsIFBvcnQKKwkwMDIzICAyIHBvcnQgdG8gU2VyaWFsIENvbnZlcnRlcgorCTAwMjQgIFBhcmFsbGVsIFBvcnQKKwkwMDI3ICAxIHBvcnQgdG8gU2VyaWFsIENvbnZlcnRlcgorCTAwMjggIFBvcnRHZWFyIHRvIFNDU0kgQ29udmVydGVyCisJMDAzMiAgUG9ydFN0YXRpb24gU0NTSSBNb2R1bGUKKwkwMDNjICBCbHVldG9vdGggQWRhcHRlcgorCTAyOTkgIENvbG9ydmlzaW9uLCBJbmMuIE1vbml0b3IgU3B5ZGVyCisJODAyMSAgMSBwb3J0IHRvIFNlcmlhbAorCTgwMjMgIDIgcG9ydCB0byBTZXJpYWwKKwk4MDI3ICBQR1NEQjkgU2VyaWFsIFBvcnQKKzA4NWMgIENvbG9yVmlzaW9uLCBJbmMuCisJMDIwMCAgTW9uaXRvciBTcHlkZXIKKzA4NjIgIFRlbGV0cm9sIFN5c3RlbXMsIEluYy4KKzA4NjMgIEZpbGFuZXQgQ29ycC4KKzA4NjQgIE5ldEdlYXIsIEluYy4KKwk0MTAwICBNQTEwMSA4MDIuMTFiIEFkYXB0ZXIKKwk0MTAyICBNQTEwMSA4MDIuMTFiIEFkYXB0ZXIKKzA4NjcgIERhdGEgVHJhbnNsYXRpb24sIEluYy4KKwk5ODEyICBFQ09OIERhdGEgYWNxdWlzaXRpb24gdW5pdAorCTk4MTYgIERUOTgxNiBFQ09OIGRhdGEgYWNxdWlzaXRpb24gbW9kdWxlCisJOTgzNiAgRFQ5ODM2IGRhdGEgYWNxdWlzaXRpb24gY2FyZAorMDg2YSAgRW1hZ2ljIFNvZnQtIHVuZCBIYXJkd2FyZSBHbWJICisJMDAwMSAgVW5pdG9yOAorCTAwMDIgIEFNVDgKKwkwMDAzICBNVDQKKzA4NmMgIERlVGVXZSAtIERldXRzY2hlIFRlbGVwaG9ud2Vya2UgQUcgJiBDby4KKwkxMDAxICBFdW1leCA1MDRQQyBJU0ROIFRBCisJMTAwMiAgRXVtZXggNTA0UEMgKEZsYXNoTG9hZCkKKwkxMDAzICBUQTMzIElTRE4gVEEKKwkxMDA0ICBUQTMzIChGbGFzaExvYWQpCisJMTAwNSAgRXVtZXggNjA0UEMgSG9tZU5ldAorCTEwMDYgIEV1bWV4IDYwNFBDIEhvbWVOZXQgKEZsYXNoTG9hZCkKKwkxMDA3ICBFdW1leCA3MDRQQyBEU0wKKwkxMDA4ICBFdW1leCA3MDRQQyBEU0wgKEZsYXNoTG9hZCkKKwkxMDA5ICBFdW1leCA3MjRQQyBEU0wKKwkxMDBhICBFdW1leCA3MjRQQyBEU0wgKEZsYXNoTG9hZCkKKwkxMDBiICBPcGVuQ29tIDMwCisJMTAwYyAgT3BlbkNvbSAzMCAoRmxhc2hMb2FkKQorCTEwMGQgIEJlZVRlbCBIb21lIDEwMAorCTEwMGUgIEJlZVRlbCBIb21lIDEwMCAoRmxhc2hMb2FkKQorCTEwMTEgIFVTQjJERUNUCisJMTAxMiAgVVNCMkRFQ1QgKEZsYXNoTG9hZCkKKwkxMDEzICBFdW1leCA3MDRQQyBMQU4KKwkxMDE0ICBFdW1leCA3MDRQQyBMQU4gKEZsYXNoTG9hZCkKKwkxMDIxICBPcGVuQ29tIDQwCisJMTAyMiAgT3BlbkNvbSA0MCAoRmxhc2hMb2FkKQorCTEwMjMgIE9wZW5Db20gNDUKKwkxMDI0ICBPcGVuQ29tIDQ1IChGbGFzaExvYWQpCisJMTAyNSAgU2ludXMgNjEgZGF0YQorCTEwMjkgIGRlY3QgQk9YCisJMTAyYyAgRXVtZXggNjA0UEMgSG9tZU5ldCBbRmxhc2hMb2FkXQorCTEwMzAgIEV1bWV4IDcwNFBDIERTTCBbRmxhc2hMb2FkXQorCTEwMzIgIE9wZW5Db20gNDAgW0ZsYXNoTG9hZF0KKwkxMDMzICBPcGVuQ29tIDMwIHBsdXMKKwkxMDM0ICBPcGVuQ29tIDMwIHBsdXMgKEZsYXNoTG9hZCkKKwkxMDU1ICBFdW1leCAyMjAgSVNETiBUQQorCTIwMDAgIE9wZW5Db20gMTAwMAorMDg2ZSAgU3lzdGVtIFRBTEtTLCBJbmMuCisJMTkyMCAgU0dDLVgyVUwKKzA4NmYgIE1FQyBJTUVYLCBJbmMuCiswODcwICBNZXRyaWNvbQorCTAwMDEgIFJpY29jaGV0IEdTCiswODcxICBTYW5EaXNrLCBJbmMuCisJMDAwMSAgU0REUi0wMSBDb21wYWN0IEZsYXNoIFJlYWRlcgorCTAwMDIgIFNERFItMzEgQ29tcGFjdCBGbGFzaCBSZWFkZXIKKwkwMDA1ICBTRERSLTA1IENvbXBhY3QgRmxhc2ggUmVhZGVyCiswODczICBYcGVlZCwgSW5jLgorMDg3NCAgQS1UZWMgU3Vic3lzdGVtLCBJbmMuCiswODc5ICBDb210cm9sIENvcnAuCiswODdjICBBZGVzc28vS2J0ZWsgQW1lcmljYSwgSW5jLgorMDg3ZCAgSmF0b24gQ29ycC4KKwk1NzA0ICBFdGhlcm5ldAorMDg3ZSAgRnVqaXRzdSBDb21wdXRlciBQcm9kdWN0cyBvZiBBbWVyaWNhCiswODdmICBWaXJ0dWFsIElQIEdyb3VwLCBJbmMuCiswODgwICBBUFQgVGVjaG5vbG9naWVzLCBJbmMuCiswODgzICBSZWNvcmRpbmcgSW5kdXN0cnkgQXNzb2NpYXRpb24gb2YgQW1lcmljYSAoUklBQSkKKzA4ODUgIEJvY2EgUmVzZWFyY2gsIEluYy4KKzA4ODYgIFhBQyBBdXRvbWF0aW9uIENvcnAuCisJMDYzMCAgSW50ZWwgUEMgQ2FtZXJhIENTNjMwCiswODg3ICBIYW5uc3RhciBFbGVjdHJvbmljcyBDb3JwLgorMDg4YiAgTWFzc1dvcmtzLCBJbmMuCisJNDk0NCAgTWFzc1dvcmtzIElELTc1IFRvdWNoU2NyZWVuCiswODkyICBEaW9HcmFwaHksIEluYy4KKwkwMTAxICBTbWFydGRpbyBSZWFkZXIvV3JpdGVyCiswODljICBVbml0ZWQgVGVjaG5vbG9naWVzIFJlc2VhcmNoIENudHIuCiswODlkICBJY3JvbiBUZWNobm9sb2dpZXMgQ29ycC4KKzA4OWUgIE5TVCBDby4sIEx0ZAorMDg5ZiAgUHJpbWV4IEFlcm9zcGFjZSBDby4KKzA4YTUgIGU5LCBJbmMuCiswOGE4ICBBbmRyZWEgRWxlY3Ryb25pY3MKKzA4YWUgIE1hY2FsbHkgKE1hY2UgR3JvdXAsIEluYy4pCiswOGI0ICBTb3JlbnNvbiBWaXNpb24sIEluYy4KKzA4YjggIEouIEdvcmRvbiBFbGVjdHJvbmljIERlc2lnbiwgSW5jLgorCTAxZjQgIFVTQlNJTU0xCiswOGI5ICBSYWRpb1NoYWNrIENvcnAuIChUYW5keSkKKzA4YmIgIFRleGFzIEluc3RydW1lbnRzIEphcGFuCisJMjcwMiAgU3BlYWtlcnMKKwkyOTAwICBQQ00yOTAwIEF1ZGlvIENvZGVjCisJMjkwNCAgUENNMjkwNCBBdWRpbyBDb2RlYworMDhiZCAgQ2l0aXplbiBXYXRjaCBDby4sIEx0ZAorCTExMDAgIFgxLVVTQiBGbG9wcHkKKzA4YzMgIFByZWNpc2UgQmlvbWV0cmljcworCTAwMDEgIDEwMCBTQworCTAwMDIgIDEwMCBBCisJMDAwMyAgMTAwIFNDIEJpb0tleWJvYXJkCisJMDAwNiAgMTAwIEEgQmlvS2V5Ym9hcmQKKwkwMTAwICAxMDAgTUMgSVNQCisJMDEwMSAgMTAwIE1DIEZpbmdlclByaW50IGFuZCBTbWFydENhcmQgUmVhZGVyCisJMDMwMCAgMTAwIEFYCisJMDQwMCAgMTAwIFNDCisJMDQwMSAgMTUwIE1DCisJMDQwMiAgMjAwIE1DIEZpbmdlclByaW50IGFuZCBTbWFydENhcmQgUmVhZGVyCisJMDQwNCAgMTAwIFNDIFVwZ3JhZGUKKwkwNDA1ICAxNTAgTUMgVXBncmFkZQorCTA0MDYgIDEwMCBNQyBVcGdyYWRlCiswOGM0ICBQcm94aW0sIEluYy4KKwkwMmYyICBGYXJhbGxvbiBIb21lIFBob25lbGluZSBBZGFwdGVyCiswOGM3ICBLZXkgTmljZSBFbnRlcnByaXNlIENvLiwgTHRkCiswOGM4ICAyV2lyZSwgSW5jLgorMDhjOSAgTmlwcG9uIFRlbGVncmFwaCBhbmQgVGVsZXBob25lIENvcnAuCiswOGNhICBBaXB0ZWsgSW50ZXJuYXRpb25hbCwgSW5jLgorCTAwMTAgIFRhYmxldAorCTAwMjAgIEFQVC02MDAwVSBUYWJsZXQKKwkwMDIxICBBUFQtMiBUYWJsZXQKKwkwMDIyICBUYWJsZXQKKwkwMDIzICBUYWJsZXQKKwkwMDI0ICBUYWJsZXQKKwkwMTAwICBQZW4gRHJpdmUKKwkwMTAyICBEdWFsQ2FtCisJMDEwMyAgUG9ja2V0IERWIERpZ2l0YWwgQ2FtZXJhCisJMDEwNCAgUG9ja2V0IERWSUkKKwkwMTA1ICBNZWdhIERWKERpc2spCisJMDEwNiAgUG9ja2V0IERWMzEwMCsKKwkwMTA3ICBQb2NrZXQgRFYgMzEwMAorCTAxMDkgIE5pc2lzIERWNCBEaWdpdGFsIENhbWVyYQorCTAxMGEgIFRydXN0IDczOEFWIExDRCBQViBNYXNzIFN0b3JhZ2UKKwkwMTExICBQZW5DYW0gVkdBIFBsdXMKKwkyMDA4ICBNaW5pIFBlbkNhbSAyCisJMjAxMCAgUG9ja2V0IENBTSAzIE1lZ2EgKHdlYmNhbSkKKwkyMDExICBQb2NrZXQgQ0FNIDMgTWVnYSAoc3RvcmFnZSkKKwkyMDE4ICBQZW5jYW0gU0QgMgorCTIwMjQgIFBvY2tldCBEVjM1MDAKKwkyMDQyICBEViA1MTAwTSBDb21wb3NpdGUgRGV2aWNlCisJMjA0MyAgRFYgNTEwME0oRGlzaykKKzA4Y2QgIEp1ZSBIc3VuIEluZC4gQ29ycC4KKzA4Y2UgIExvbmcgV2VsbCBFbGVjdHJvbmljcyBDb3JwLgorMDhjZiAgUHJvZHVjdGl2aXR5IEVuaGFuY2VtZW50IFByb2R1Y3RzCiswOGQxICBzbWFydEJyaWRnZXMsIEluYy4KKwkwMDAxICBzbWFydE5JQyBFdGhlcm5ldCBbY2F0Y10KKwkwMDAzICBzbWFydE5JQyAyIFBuUCBFdGhlcm5ldAorMDhkMyAgVmlydHVhbCBJbmsKKzA4ZDQgIEZ1aml0c3UgU2llbWVucyBDb21wdXRlcnMKKwkwMDA5ICBTQ1IgU21hcnRDYXJkIFJlYWRlcgorMDhkOSAgSW5jcmVtZW50IFAgQ29ycC4KKzA4ZGQgIEJpbGxpb250b24gU3lzdGVtcywgSW5jLgorCTAxMTIgIFdpcmVsZXNzIExBTiBBZGFwdGVyCisJMDExMyAgV2lyZWxlc3MgTEFOIEFkYXB0ZXIKKwkwOTg2ICBVU0ItMTAwTiBFdGhlcm5ldCBbcGVnYXN1c10KKwkwOTg3ICBVU0JMUC0xMDAgSG9tZVBOQSBFdGhlcm5ldCBbcGVnYXN1c10KKwkwOTg4ICBVU0JFTC0xMDAgRXRoZXJuZXQgW3BlZ2FzdXNdCisJMTk4NiAgMTAvMTAwIExBTiBBZGFwdGVyCisJMjEwMyAgRFZCLVQgVFYtVHVuZXIgQ2FyZC1SCisJODUxMSAgVVNCRS0xMDAgRXRoZXJuZXQgW3BlZ2FzdXMyXQorCTkwZmYgIFVTQjJBUiBFdGhlcm5ldAorMDhkZSAgPz8/CisJN2EwMSAgODAyLjExYiBBZGFwdGVyCiswOGRmICBTcHlydXMsIEluYy4KKwkwMDAxICBSb3NldHRhIFRva2VuIFYxCisJMDAwMiAgUm9zZXR0YSBUb2tlbiBWMgorCTAwMDMgIFJvc2V0dGEgVG9rZW4gVjMKKwkwYTAwICBMeW5rcyBJbnRlcmZhY2UKKzA4ZTMgIE9saXRlYywgSW5jLgorCTAwMDIgIFVTQi1SUzIzMiBCcmlkZ2UKKwkwMTAwICBJbnRlcmZhY2UgQURTTAorCTAxMDEgIEludGVyZmFjZSBBRFNMCisJMDEwMiAgQURTTAorCTAzMDEgIFJOSVMKKzA4ZTQgIFBpb25lZXIgQ29ycC4KKzA4ZTUgIExpdHJvbmljCiswOGU2ICBHZW1wbHVzCisJMDAwMSAgR2VtUEMtVG91Y2ggNDMwCisJMDQzMCAgR2VtUEM0MzAgU21hcnRDYXJkIFJlYWRlcgorCTA0MzIgIEdlbVBDNDMyIFNtYXJ0Q2FyZCBSZWFkZXIKKwkwNDM1ICBHZW1QQzQzNSBTbWFydENhcmQgUmVhZGVyCisJMDQzNyAgR2VtUEM0MzMgU0wgU21hcnRDYXJkIFJlYWRlcgorCTEzNTkgIFVBIFNFQ1VSRSBTVE9SQUdFIFRPS0VOCisJMjIwMiAgR2VtIGUtU2VhbCBQcm8gVG9rZW4KKwkzNDM3ICBHZW1QQyBUd2luIFNtYXJ0Q2FyZCBSZWFkZXIKKwkzNDM4ICBHZW1QQyBLZXkgU21hcnRDYXJkIFJlYWRlcgorCTM0NzggIFBpblBhZCBTbWFydCBDYXJkIFJlYWRlcgorCTQ0MzMgIEdlbVBDNDMzLVN3YXAKKwk1NTAxICBHZW1Qcm94LVBVIENvbnRhY3RsZXNzIFNtYXJ0IENhcmQgUmVhZGVyCisJYWNlMCAgVUEgSFlCUklEIFRPS0VOCiswOGU3ICBQYW4tSW50ZXJuYXRpb25hbCBXaXJlICYgQ2FibGUKKzA4ZTggIEludGVncmF0ZWQgTWVtb3J5IExvZ2ljCiswOGU5ICBFeHRlbmRlZCBTeXN0ZW1zLCBJbmMuCisJMDEwMCAgWFROREFjY2VzcyBJckRBIERvbmdsZQorMDhlYSAgRXJpY3Nzb24sIEluYy4sIEJsdWUgUmlkZ2UgTGFicworCTAwYzkgIEFEU0wgTW9kZW0gSE0xMjBkcCBMb2FkZXIKKwkwMGNhICBBRFNMIFdBTiBNb2RlbSBITTEyMGRwCisJMDBjZSAgSE0yMzBkIFZpcnR1YWwgQnVzIGZvciBIZWxpdW0KKwlhYmJhICBVU0IgRHJpdmVyIGZvciBCbHVldG9vdGggV2lyZWxlc3MgVGVjaG5vbG9neQorCWFiYmIgIEJsdWV0b290aCBEZXZpY2UgaW4gREZVIFN0YXRlCiswOGVjICBNLVN5c3RlbXMgRmxhc2ggRGlzayBQaW9uZWVycworCTAwMDEgIFRyYXZlbERyaXZlIDJDCisJMDAwMiAgVHJhdmVsRHJpdmUgMkMKKwkwMDA1ICBUcmF2ZWxEcml2ZSAyQworCTAwMDggIFRyYXZlbERyaXZlIDJDCisJMDAxMCAgRGlza09uS2V5CisJMDAxMSAgRGlza09uS2V5CisJMDAxMiAgVHJhdmVsRHJpdmUgMkMKKwkwMDE0ICBUcmF2ZWxEcml2ZSAyQworCTAwMTUgIEtpbmdzdG9uIERhdGFUcmF2ZWxlciBFTElURQorCTAwMTYgIEtpbmdzdG9uIERhdGFUcmF2ZWxlciBVMworCTAwMjAgIFRyYXZlbERyaXZlCisJMDAyMSAgVHJhdmVsRHJpdmUKKwkwMDIyICBUcmF2ZWxEcml2ZQorCTAwMjMgIFRyYXZlbERyaXZlCisJMDAyNCAgVHJhdmVsRHJpdmUKKwkwMDI1ICBUcmF2ZWxEcml2ZQorCTAwMjYgIFRyYXZlbERyaXZlCisJMDAyNyAgVHJhdmVsRHJpdmUKKwkwMDI4ICBUcmF2ZWxEcml2ZQorCTAwMjkgIFRyYXZlbERyaXZlCisJMDAzMCAgVHJhdmVsRHJpdmUKKwkwODIyICBUcmF2ZWxEcml2ZSAyQworCTA4MzIgIEhpLVNwZWVkIE1hc3MgU3RvcmFnZSBEZXZpY2UKKwkwOTk4ICBLaW5nc3RvbiBEYXRhIFRyYXZlbGVyMi4wIERpc2sgRHJpdmVyCisJMDk5OSAgS2luZ3N0b24gRGF0YSBUcmF2ZWxlcjIuMCBEaXNrIERyaXZlcgorCTEwMDAgIFRyYXZlbERyaXZlIDJDCisJMjAwMCAgVHJhdmVsRHJpdmUgMkMKKwkyMDM4ICBUcmF2ZWxEcml2ZQorCTIwMzkgIFRyYXZlbERyaXZlCisJMjA0YSAgVHJhdmVsRHJpdmUKKwkyMDRiICBUcmF2ZWxEcml2ZQorMDhlZSAgQ0NTSS9IZXNzbworMDhmMCAgQ29yZXggVGVjaG5vbG9naWVzCiswOGYxICBDVEkgRWxlY3Ryb25pY3MgQ29ycC4KKzA4ZjUgIFN5c1RlYyBDby4sIEx0ZAorMDhmNiAgTG9naWMgMyBJbnRlcm5hdGlvbmFsLCBMdGQKKzA4ZjcgIFZlcm5pZXIKKwkwMDAxICBMYWJQcm8KKwkwMDAyICBFYXN5VGVtcAorMDhmOCAgS2VlbiBUb3AgSW50ZXJuYXRpb25hbCBFbnRlcnByaXNlIENvLiwgTHRkCiswOGY5ICBXaXBybyBUZWNobm9sb2dpZXMKKzA4ZmEgIENhZXJlCiswOGZiICBTb2NrZXQgQ29tbXVuaWNhdGlvbnMKKzA4ZmMgIFNpY29uIENhYmxlIFRlY2hub2xvZ3kgQ28uLCBMdGQKKzA4ZmQgIERpZ2lhbnN3ZXIgQS9TCisJMDAwMSAgQmx1ZXRvb3RoIERldmljZQorMDhmZiAgQXV0aGVuVGVjLCBJbmMuCisJMTYwMCAgQUVTMTYwMAorCTE2MTAgIEFFUzE2MDAKKwkyNTAwICBBRVMyNTAxCisJMjUwMSAgQUVTMjUwMQorCTI1MDIgIEFFUzI1MDEKKwkyNTAzICBBRVMyNTAxCisJMjUwNCAgQUVTMjUwMQorCTI1MDUgIEFFUzI1MDEKKwkyNTA2ICBBRVMyNTAxCisJMjUwNyAgQUVTMjUwMQorCTI1MDggIEFFUzI1MDEKKwkyNTA5ICBBRVMyNTAxCisJMjUwYSAgQUVTMjUwMQorCTI1MGIgIEFFUzI1MDEKKwkyNTBjICBBRVMyNTAxCisJMjUwZCAgQUVTMjUwMQorCTI1MGUgIEFFUzI1MDEKKwkyNTBmICBBRVMyNTAxCisJMjUxMCAgQUVTMjUxMAorCTI1ODAgIEFFUzI1MDEgRmluZ2VycHJpbnQgU2Vuc29yCisJMjU4OCAgQUVTMjUwMQorCTI1ODkgIEFFUzI1MDEKKwkyNThhICBBRVMyNTAxCisJMjU4YiAgQUVTMjUwMQorCTI1OGMgIEFFUzI1MDEKKwkyNThkICBBRVMyNTAxCisJMjU4ZSAgQUVTMjUwMQorCTI1OGYgIEFFUzI1MDEKKwkzNDAwICBBRVMzNDAwIFRydWVQcmludCBTZW5zb3IKKwkzNDAxICBBRVMzNDAwIFNlbnNvcgorCTM0MDIgIEFFUzM0MDAgU2Vuc29yCisJMzQwMyAgQUVTMzQwMCBTZW5zb3IKKwkzNDA0ICBBRVMzNDAwIFRydWVQcmludCBTZW5zb3IKKwkzNDA1ICBBRVMzNDAwIFRydWVQcmludCBTZW5zb3IKKwkzNDA2ICBBRVMzNDAwIFRydWVQcmludCBTZW5zb3IKKwkzNDA3ICBBRVMzNDAwIFRydWVQcmludCBTZW5zb3IKKwk0OTAyICBCaW9NViB3aXRoIFRydWVQcmludCBBRVMzNTAwCisJNDkwMyAgQmlvTVYgd2l0aCBUcnVlUHJpbnQgQUVTMzQwMAorCTU1MDAgIEFFUzQwMDAKKwk1NTAxICBBRVM0MDAwIFRydWVQcmludCBTZW5zb3IKKwk1NTAzICBBRVM0MDAwIFRydWVQcmludCBTZW5zb3IKKwk1NTA1ICBBRVM0MDAwIFRydWVQcmludCBTZW5zb3IKKwk1NTA3ICBBRVM0MDAwIFRydWVQcmludCBTZW5zb3IKKwk1NWZmICBBRVM0MDAwIFRydWVQcmludCBTZW5zb3IuCisJNTcwMCAgQUVTMzUwMCBGaW5nZXJwcmludCBSZWFkZXIKKwk1NzAxICBBRVMzNTAwIFRydWVQcmludCBTZW5zb3IKKwk1NzAyICBBRVMzNTAwIFRydWVQcmludCBTZW5zb3IKKwk1NzAzICBBRVMzNTAwIFRydWVQcmludCBTZW5zb3IKKwk1NzA0ICBBRVMzNTAwLUJaIFRydWVQcmludCBTZW5zb3IKKwk1NzA1ICBBRVMzNTAwLUJaIFRydWVQcmludCBTZW5zb3IKKwk1NzA2ICBBRVMzNTAwLUJaIFRydWVQcmludCBTZW5zb3IKKwk1NzA3ICBBRVMzNTAwLUJaIFRydWVQcmludCBTZW5zb3IKKwk1NzEwICBBRVMzNTAwIFRydWVQcmludCBTZW5zb3IKKwk1NzExICBBRVMzNTAwIFRydWVQcmludCBTZW5zb3IKKwk1NzEyICBBRVMzNTAwIFRydWVQcmludCBTZW5zb3IKKwk1NzEzICBBRVMzNTAwIFRydWVQcmludCBTZW5zb3IKKwk1NzE0ICBBRVMzNTAwLUJaIFRydWVQcmludCBTZW5zb3IKKwk1NzE1ICBBRVMzNTAwLUJaIFRydWVQcmludCBTZW5zb3IKKwk1NzE2ICBBRVMzNTAwLUJaIFRydWVQcmludCBTZW5zb3IKKwk1NzE3ICBBRVMzNTAwLUJaIFRydWVQcmludCBTZW5zb3IKKwk1NzMwICBBRVMzNTAwIFRydWVQcmludCBTZW5zb3IKKwk1NzMxICBBRVMzNTAwIFRydWVQcmludCBTZW5zb3IKKwk1NzMyICBBRVMzNTAwIFRydWVQcmludCBTZW5zb3IKKwk1NzMzICBBRVMzNTAwIFRydWVQcmludCBTZW5zb3IKKwk1NzM0ICBBRVMzNTAwLUJaIFRydWVQcmludCBTZW5zb3IKKwk1NzM1ICBBRVMzNTAwLUJaIFRydWVQcmludCBTZW5zb3IKKwk1NzM2ICBBRVMzNTAwLUJaIFRydWVQcmludCBTZW5zb3IKKwk1NzM3ICBBRVMzNTAwLUJaIFRydWVQcmludCBTZW5zb3IKKwlhZmUzICBGaW5nZXJMb2MgU2Vuc29yIE1vZHVsZSAoQW5jaG9yKQorCWFmZTQgIEZpbmdlckxvYyBTZW5zb3IgTW9kdWxlIChBbmNob3IpCisJYWZlNSAgRmluZ2VyTG9jIFNlbnNvciBNb2R1bGUgKEFuY2hvcikKKwlhZmU2ICBGaW5nZXJMb2MgU2Vuc29yIE1vZHVsZSAoQW5jaG9yKQorCWZmZmQgIEFFUzI1MTAgU2Vuc29yIChVU0IgRW11bGF0b3IpCisJZmZmZiAgU2Vuc29yIChFbXVsYXRvcikKKzA5MDAgIFBpbm5hY2xlIFN5c3RlbXMsIEluYy4KKzA5MDEgIFZTVCBUZWNobm9sb2dpZXMKKwkwMDAxICBIYXJkIERyaXZlIEFkYXB0ZXIgKFRQUCkKKwkwMDAyICBTaWdtYURyaXZlIEFkYXB0ZXIgKFRQUCkKKzA5MDYgIEZhcmFkYXkgVGVjaG5vbG9neSBDb3JwLgorMDkwOSAgQXVkaW8tVGVjaG5pY2EgQ29ycC4KKzA5MGEgIFRydW1waW9uIE1pY3JvZWxlY3Ryb25pY3MsIEluYy4KKwkxMDAxICBUMzM1MjAgVVNCIEZsYXNoIENhcmQgQ29udHJvbGxlcgorCTExMDAgIENvbW90cm9uIEMzMzEwIE1QMyBwbGF5ZXIKKwkxMjAwICBNUDMgcGxheWVyCisJMTU0MCAgRGlnaXRleCBDb250YWluZXIgRmxhc2ggRGlzaworMDkwYiAgTmV1cm9zbWl0aAorMDkwYyAgRmVpeWEgVGVjaG5vbG9neSBDb3JwLgorCTEwMDAgIE1lbW9yeSBCYXIKKwkxMTMyICA1LWluLTEgQ2FyZCBSZWFkZXIKKzA5MGQgIE11bHRpcG9ydCBDb21wdXRlciBWZXJ0cmllYnMgR21iSAorMDkwZSAgU2hpbmluZyBUZWNobm9sb2d5LCBJbmMuCiswOTBmICBGdWppdHN1IERldmljZXMsIEluYy4KKzA5MTAgIEFsYXRpb24gU3lzdGVtcywgSW5jLgorMDkxMSAgUGhpbGlwcyBTcGVlY2ggUHJvY2Vzc2luZworCTI1MTIgIFNwZWVjaE1pa2UgUHJvCiswOTEyICBWb3F1ZXR0ZSwgSW5jLgorMDkxNSAgR2xvYmVTcGFuLCBJbmMuCisJMDAwMSAgRFNMIE1vZGVtCisJMDAwMiAgQURTTCBBVE0gTW9kZW0KKwkwMDA1ICBMQU4gTW9kZW0KKwkyMDAwICA4MDIuMTEgQWRhcHRlcgorCTIwMDIgIDgwMi4xMSBBZGFwdGVyCisJODAwMCAgQURTTCBMQU4gTW9kZW0KKwk4MDA1ICBEU0wtMzAyRyBNb2RlbQorCTgxMDEgIEFEU0wgV0FOIE1vZGVtCisJODEwMiAgRFNMLTIwMCBBRFNMIE1vZGVtCisJODEwMyAgRFNMLTIwMCBBRFNMIE1vZGVtCisJODEwNCAgRFNMLTIwMCBNb2RlbQorCTg0MDAgIERTTCBNb2RlbQorCTg0MDEgIERTTCBNb2RlbQorCTg0MDIgIERTTCBNb2RlbQorCTg1MDAgIERTTCBNb2RlbQorCTg1MDEgIERTTCBNb2RlbQorMDkxNyAgU21hcnREaXNrIENvcnAuCisJMDAwMSAgZUZpbG0gUmVhZGVyLTExIFNNL0NGCisJMDAwMiAgZUZpbG0gUmVhZGVyLTExIFNNCisJMDAwMyAgZUZpbG0gUmVhZGVyLTExIENGCisJMDIwMCAgRmlyZUZseQorCTAyMDEgIEZpcmVMaXRlCisJMDIwMiAgU1RPUkFHRSBBREFQVEVSIChGaXJlUG93ZXIpCisJMDIwNCAgRmxhc2hUcmF4IFN0b3JhZ2UKKwkwMjA1ICBTVE9SQUdFIEFEQVBURVIgKENyb3NzRmlyZSkKKwkwMjA2ICBGaXJlRmx5IDIwRyBIREQKKwkwMjA3ICBGaXJlTGl0ZQorCTAyMGYgIFNUT1JBR0UgQURBUFRFUiAoRmlyZUxpdGUpCisJZGEwMSAgZUZpbG0gUmVhZGVyLTExIFRlc3QKKwlmZmZmICBlRmlsbSBSZWFkZXItMTEgKENsYXNzL1BEUikKKzA5MTkgIFRpZ2VyIEVsZWN0cm9uaWNzCisJMDEwMCAgRmFzdCBGbGlja3MgRGlnaXRhbCBDYW1lcmEKKzA5MWUgIEdhcm1pbiBJbnRlcm5hdGlvbmFsCisJMDAwMyAgR1BTbWFwICh2YXJpb3VzIG1vZGVscykKKwkwMDA0ICBHYXJtaW4gaVF1ZSAzNjAwCisJMDIwMCAgRGF0YSBDYXJkIFByb2dyYW1tZXIgKGluc3RhbGwpCisJMTIwMCAgRGF0YSBDYXJkIFByb2dyYW1tZXIKKzA5MjAgIEVjaGVsb24gQ28uCisJNzUwMCAgTmV0d29yayBJbnRlcmZhY2UKKzA5MjEgIEdvSHVicywgSW5jLgorCTEwMDEgIEdvQ09NMjMyIFNlcmlhbAorMDkyMiAgRHltby1Db1N0YXIgQ29ycC4KKwkwMDA3ICBMYWJlbFdyaXRlciAzMzAKKwkwMDA5ICBMYWJlbFdyaXRlciAzMTAKKzA5MjMgIElDIE1lZGlhIENvcnAuCisJMDEwZiAgU0lJRyBNb2JpbGVDYW0KKzA5MjQgIFhlcm94CisJMjNkZCAgRG9jdVByaW50IE03NjAgKFg3NjBfVVNCKQorCTNkNWIgIFBoYXNlciA2MTE1TUZQIFRXQUlOIFNjYW5uZXIKKwk0MjBmICBXb3JrQ2VudHJlIFBFMjIwIFNlcmllcworCTQyMWYgIE0yMCBTY2FubmVyCisJNDIzYiAgUHJpbnRpbmcgU3VwcG9ydAorCWZmZWYgIFdvcmtDZW50ZXIgTTE1CisJZmZmYiAgRG9jdVByaW50IE03NTAgKFg3NTBfVVNCKQorMDkyNSAgTGFrZXZpZXcgUmVzZWFyY2gKKwk4MTAxICBQaGlkZ2V0cywgSW5jLiwgMS1Nb3RvciBQaGlkZ2V0U2Vydm8gdjIuMAorCTgxMDQgIFBoaWRnZXRzLCBJbmMuLCA0LU1vdG9yIFBoaWRnZXRTZXJ2byB2Mi4wCisJODgwMCAgV2lzZUdyb3VwIEx0ZCwgTVAtODgwMCBRdWFkIEpveXBhZAorCTg4NjYgIFdpc2VHcm91cCBMdGQsIE1QLTg4NjYgRHVhbCBKb3lwYWQKKzA5MjcgIFN1bW11cywgTHRkCiswOTI4ICBPeGZvcmQgU2VtaWNvbmR1Y3RvciwgTHRkCiswOTI5ICBBbWVyaWNhbiBCaW9tZXRyaWMgQ28uCiswOTJhICBUb3NoaWJhIEluZm9ybWF0aW9uICYgSW5kdXN0cmlhbCBTeXMuIEFuZCBTZXJ2aWNlcworMDkyYiAgU2VuYSBUZWNobm9sb2dpZXMsIEluYy4KKzA5MmYgIE5vcnRoZXJuIEVtYmVkZGVkIFNjaWVuY2UvQ0FWTkVYCisJMDAwNCAgSlRBRy00CisJMDAwNSAgSlRBRy01CiswOTMwICBUb3NoaWJhIENvcnAuCisJMDAwOSAgR2lnYWJlYXQgRi9YIChIREQgYXVkaW8gcGxheWVyKQorCTAwMGMgIEdpZ2FiZWF0IEYgKG10cCkKKwkwMDEwICBHaWdhYmVhdCBTIChtdHApCisJMDMwMSAgUENYMTEwMFUgQ2FibGUgTW9kZW0gKFdETSkKKwkwMzAyICBQQ1gyMDAwIENhYmxlIE1vZGVtIChXRE0pCisJMDMwNSAgQ2FibGUgTW9kZW0gUENYMzAwMAorCTAzMDcgIENhYmxlIE1vZGVtIFBDWDI1MDAKKwkwMzA4ICBQQ1gyMjAwIENhYmxlIE1vZGVtIChXRE0pCisJMDMwOSAgUENYNTAwMCBDYWJsZSBNb2RlbSAoV0RNKQorCTAzMGIgIENhYmxlIE1vZGVtIFBDWDI2MDAKKwkwNTAxICBCbHVldG9vdGggQ29udHJvbGxlcgorCTA1MDIgIEludGVncmF0ZWQgQmx1ZXRvb3RoCisJMDUwMyAgQmx1ZXRvb3RoIENvbnRyb2xsZXIKKwkwNTA1ICBJbnRlZ3JhdGVkIEJsdWV0b290aAorCTA1MDYgIEludGVncmF0ZWQgQmx1ZXRvb3RoCisJMDUwNyAgQmx1ZXRvb3RoIEFkYXB0ZXIKKwkwNTA4ICBJbnRlZ3JhdGVkIEJsdWV0b290aCBIQ0kKKwkwNTA5ICBCVCBFRFIgRG9uZ2xlCisJMDcwNiAgUG9ja2V0UEMgZTc0MAorCTA3MDcgIFBvY2tldCBQQyBlMzMwIFNlcmllcworCTA3MDggIFBvY2tldCBQQyBlMzUwwqBTZXJpZXMKKwkwNzA5ICBQb2NrZXQgUEMgZTc1MCBTZXJpZXMKKwkwNzBhICBQb2NrZXQgUEMgZTQwMCBTZXJpZXMKKwkwNzBiICBQb2NrZXQgUEMgZTgwMCBTZXJpZXMKKwkxMzAwICBXaXJlbGVzcyBCcm9hZGJhbmQgKENETUEgRVYtRE8pIFNNLUJ1cyBNaW5pY2FyZCBTdGF0dXMgUG9ydAorCTEzMDEgIFdpcmVsZXNzIEJyb2FkYmFuZCAoQ0RNQSBFVi1ETykgTWluaWNhcmQgU3RhdHVzIFBvcnQKKwkxMzAyICBXaXJlbGVzcyBCcm9hZGJhbmQgKDNHIEhTRFBBKSBTTS1CdXMgTWluaWNhcmQgU3RhdHVzIFBvcnQKKwkxMzAzICBXaXJlbGVzcyBCcm9hZGJhbmQgKDNHIEhTRFBBKSBNaW5pY2FyZCBTdGF0dXMgUG9ydAorCTEzMDggIEJyb2FkYmFuZCAoM0cgSFNEUEEpIFNNLUJ1cyBNaW5pY2FyZCBEaWFnbm9zdGljcyBQb3J0CisJNjQyZiAgVHJhdmVsRHJpdmUKKwk2NTA2ICBUcmF2ZWxEcml2ZSAyQworCTY1MDcgIFRyYXZlbERyaXZlIDJDCisJNjUwOCAgVHJhdmVsRHJpdmUgMkMKKwk2NTA5ICBUcmF2ZWxEcml2ZSAyQworCTY1MTAgIFRyYXZlbERyaXZlIDJDCisJNjUxNyAgVHJhdmVsRHJpdmUgMkMKKwk2NTE4ICBUcmF2ZWxEcml2ZSAyQworCTY1MTkgIEtpbmdzdG9uIERhdGFUcmF2ZWxlciAyLjAgVVNCIFN0aWNrCisJNjUxYSAgVHJhdmVsRHJpdmUgMkMKKwk2NTFiICBUcmF2ZWxEcml2ZSAyQworCTY1MWMgIFRyYXZlbERyaXZlIDJDCisJNjUxZCAgVHJhdmVsRHJpdmUgMkMKKwk2NTFlICBUcmF2ZWxEcml2ZSAyQworCTY1MWYgIFRyYXZlbERyaXZlIDJDCisJNjUyMCAgVHJhdmVsRHJpdmUgMkMKKwk2NTIxICBUcmF2ZWxEcml2ZSAyQworCTY1MjIgIFRyYXZlbERyaXZlIDJDCisJNjUyMyAgVHJhdmVsRHJpdmUKKwk2NTI0ICBUcmF2ZWxEcml2ZQorCTY1MjUgIFRyYXZlbERyaXZlCisJNjUyNiAgVHJhdmVsRHJpdmUKKwk2NTI3ICBUcmF2ZWxEcml2ZQorCTY1MjggIFRyYXZlbERyaXZlCisJNjUyOSAgVHJhdmVsRHJpdmUKKwk2NTJhICBUcmF2ZWxEcml2ZQorCTY1MmIgIFRyYXZlbERyaXZlCisJNjUyYyAgVHJhdmVsRHJpdmUKKwk2NTJkICBUcmF2ZWxEcml2ZQorCTY1MmYgIFRyYXZlbERyaXZlCisJNjUzMCAgVHJhdmVsRHJpdmUKKwk2NTMxICBUcmF2ZWxEcml2ZQorCTY1MzIgIDI1Nk0gVVNCIFN0aWNrCisJNjUzMyAgNTEyTSBVU0IgU3RpY2sKKwk2NTM0ICBUcmF2ZWxEcml2ZQorCTY1M2MgIEtpbmdzdG9uIERhdGFUcmF2ZWxlciAyLjAgVVNCIFN0aWNrICg1MTJNKQorCTY1M2QgIEtpbmdzdG9uIERhdGFUcmF2ZWxlciAyLjAgVVNCIFN0aWNrICgxR0IpCisJNjUzZSAgVVNCIEZsYXNoIE1lbW9yeQorCTY1NDAgIFRyYW5zTWVtb3J5IFVTQiBGbGFzaCBNZW1vcnkKKzA5MzEgIEhhcm1vbmljIERhdGEgU3lzdGVtcywgTHRkCiswOTMyICBDcmVzY2VudGVjIENvcnAuCisJMDMwMCAgVmlkZW9BZHZhbnRhZ2UKKwkwMzAyICBTeW50ZWsgREMtMTEyWAorCTAzMjAgIFZpZGVvQWR2YW50YWdlCisJMTEwMCAgVmlkZW8gRW5oYW1jZW1lbnQgRGV2aWNlCisJMTExMiAgVmVvIFdlYiBDYW1lcmEKKwlhMzExICBWaWRlbyBFbmhhbmNlbWVudCBEZXZpY2UKKzA5MzMgIFF1YW50dW0gQ29ycC4KKzA5MzQgIE5ldGNvbSBTeXN0ZW1zCiswOTM5ICBMdW1iZXJnLCBJbmMuCiswOTNhICBQaXhhcnQgSW1hZ2luZywgSW5jLgorCTAwMDcgIENNT1MgMTAwSy1SIFJldi4gMS45MAorCTAxMGUgIERpZ2l0YWwgY2FtZXJhLCBDRDMwMk4vRWx0YSBNZWRpQCBkaWdpLWNhbS9IRS01MDFBCisJMDEwZiAgQXJndXMgREMtMTYxMC9EQy0xNjIwL0VtcHJleCBQQ0QzNjAwL1BoaWxpcHMgUDQ0NDE3QiBrZXljaGFpbiBjYW1lcmEvUHJlY2lzaW9uIE1pbmksTW9kZWwgSEE1MTNBL1Zpdml0YXIgVml2aWNhbSA1NQorCTI0NjAgIFEtVEVDIFdFQkNBTSAxMDAKKwkyNDY4ICBDYW1tYWVzdHJvIDIuNURVL1gtRVlFL09yaXRlIFNDLTEyMC9JQ0dlYXIgVHJhdmVsQ2FtL0Vhc3kgU25hcCBTbmFrZSBFeWUgV2ViQ2FtCisJMjQ3MCAgU29DIFBDLUNhbWVyYQorCTI0NzEgIFNvQyBQQy1DYW1lcmEKKwkyNTAwICBVU0IgT3B0aWNhbCBNb3VzZQorCTI2MDAgIFR5cGhvb24gRWFzeWNhbSBVU0IgMzMwSyAobmV3ZXIpL1R5cGhvb24gRWFzeWNhbSBVU0IgMi4wIFZHQSAxLjNNL1NhbnN1biBTTi01MDgKKwkyNjAxICBTUEMgNjEwTkMgTGFwdG9wIENhbWVyYQorMDkzYiAgUGxleHRvciBDb3JwLgorCTAwMTAgIFN0b3JhZ2UgQWRhcHRlcgorCTAwMTEgIFBsZXhXcml0ZXIgNDAvMTIvNDBVCisJMDA0MiAgUFgtNzEyVUYgRFZEIFJXCisJYTAwMiAgQ29udmVydFggTTQwMlUgWExPQURFUgorCWEwMDMgIENvbnZlcnRYIEFWMTAwVSBBL1YgQ2FwdHVyZSBBdWRpbworCWEwMDQgIENvbnZlcnRYIFRWNDAyVSBYTE9BREVSCisJYTAwNSAgS1dvcmxkIEVNUCBBdWRpbyBEZXZpY2UKKwlhMTAyICBDb252ZXJ0WCBNNDAyVSBBL1YgQ2FwdHVyZQorCWExMDQgIENvbnZlcnRYIFBYLVRWNDAyVS9OQQorMDkzYyAgSW50cmVwaWQgQ29udHJvbCBTeXN0ZW1zLCBJbmMuCisJMDYwMSAgVmFsdWVDQU4KKwkwNzAxICBOZW9WSSBCbHVlIHZlaGljbGUgYnVzIGludGVyZmFjZQorMDkzZCAgSW5ub1N5bmMsIEluYy4KKzA5M2UgIEouUy5ULiBNZmcuIENvLiwgTHRkCiswOTNmICBPbHltcGlhIFRlbGVjb20gVmVydHJpZWJzIEdtYkgKKzA5NDAgIEphcGFuIFN0b3JhZ2UgQmF0dGVyeSBDby4sIEx0ZAorMDk0MSAgUGhvdG9iaXQgQ29ycC4KKzA5NDIgIGkyR28uY29tLCBMTEMKKzA5NDMgIEhDTCBUZWNobm9sb2dpZXMgSW5kaWEgUHJpdmF0ZSwgTHRkCiswOTQ0ICBLT1JHLCBJbmMuCiswOTQ1ICBQYXNjbyBTY2llbnRpZmljCiswOTQ4ICBLcm9uYXVlciBtdXNpYyBpbiBkaWdpdGFsCisJMDMwMSAgVVNCIFBybyAoMjQvNDgpCisJMDMwMiAgVVNCIFBybyAoMjQvOTYgcGxheWJhY2spCisJMDMwMyAgVVNCIFBybyAoMjQvOTYgcmVjb3JkKQorCTAzMDQgIFVTQiBQcm8gKDE2LzQ4KQorCTExMDUgIFVTQiBPbmUKKzA5NGIgIExpbmt1cCBTeXN0ZW1zIENvcnAuCiswOTRkICBDYWJsZSBUZWxldmlzaW9uIExhYm9yYXRvcmllcworMDk0ZiAgWWFubworCTAxMDEgIFU2NDBNTy0wMworCTA1ZmMgIE1FVEFMV0VBUi1IREQKKzA5NTEgIEtpbmdzdG9uIFRlY2hub2xvZ3kKKwkwMDA4ICBFdGhlcm5ldAorCTAwMGEgIEtOVTEwMVRYIDEwMGJhc2VUWCBFdGhlcm5ldAorCTE2MDAgIERhdGEgVHJhdmVsZXIgSUkgUGVuIERyaXZlCisJMTYwMSAgRGF0YSBUcmF2ZWxlciBJSSsgUGVuIERyaXZlCisJMTYwMiAgRGF0YSBUcmF2ZWxlciBNaW5pCisJMTYwMyAgRGF0YSBUcmF2ZWxlciAxR0IvMkdCIFBlbiBEcml2ZQorMDk1NCAgUlBNIFN5c3RlbXMgQ29ycC4KKzA5NTUgIE5WaWRpYSBDb3JwLgorMDk1NiAgQlNxdWFyZSBDb3JwLgorMDk1NyAgQWdpbGVudCBUZWNobm9sb2dpZXMsIEluYy4KKwkwMjAwICBFLVZpZGVvIERDLTM1MCBDYW1lcmEKKwkwMjAyICBFLVZpZGVvIERDLTM1MCBDYW1lcmEKKzA5NTggIENvbXB1TGluayBSZXNlYXJjaCwgSW5jLgorMDk1OSAgQ29sb2duZSBDaGlwIEFHCisJMmJkMCAgSW50ZWxsaWdlbnQgSVNETiAoVmVyLiAzLjYwLjA0KQorMDk1YSAgUG9ydHNtaXRoCisJMzAwMyAgRXhwcmVzcyBFdGhlcm5ldAorMDk1YiAgTWVkaWFsb2dpYyBDb3JwLgorMDk1YyAgSy1UZWMgRWxlY3Ryb25pY3MKKzA5NWQgIFBvbHljb20sIEluYy4KKwkwMDAxICBQb2x5Y29tIFZpYVZpZGVvCiswOTY3ICBBY2VyICg/PykKKwkwMjA0ICBXYXJwTGluayA4MDIuMTFiIEFkYXB0ZXIKKzA5NjggIENhdGFseXN0IEVudGVycHJpc2VzLCBJbmMuCiswOTZlICBGZWl0aWFuIFRlY2hub2xvZ2llcywgSW5jLgorCTA4MDIgIGVQYXNzMjAwMCAoRyZEIFNUQVJDT1MgU1BLIDIuNCkKKzA5NzEgIEdyZXRhZy1NYWNiZXRoIEFHCiswOTczICBTY2hsdW1iZXJnZXIKKwkwMDAxICBlLWdhdGUgU21hcnQgQ2FyZAorMDk3NCAgRGF0YWdyYXBoaXgsIGEgYnVzaW5lc3MgdW5pdCBvZiBBbmFjb21wCiswOTc1ICBPTCdFIENvbW11bmljYXRpb25zLCBJbmMuCiswOTc2ICBBZGlyb25kYWNrIFdpcmUgJiBDYWJsZQorMDk3NyAgTGlnaHRzdXJmIFRlY2hub2xvZ2llcworMDk3OCAgQmVja2hvZmYgR21iSAorMDk3OSAgSmVpbGluIFRlY2hub2xvZ3kgQ29ycC4sIEx0ZAorCTAyMjQgIEpMMjAwNUEgVG95IENhbWVyYQorCTAyMjYgIEpMMjAwNUEgVG95IENhbWVyYQorMDk3YSAgTWluZHMgQXQgV29yayBMTEMKKwkwMDAxICBEaWdpdGFsIFdhbGxldAorMDk3YiAgS251ZHNlbiBFbmdpbmVlcmluZywgTHRkCiswOTdjICBNYXJ1bml4IENvLiwgTHRkCiswOTdkICBSb3N1biBUZWNobm9sb2dpZXMsIEluYy4KKzA5N2YgIEJhcnVuIEVsZWN0cm9uaWNzIENvLiwgTHRkCiswOTgxICBPYWsgVGVjaG5vbG9neSwgTHRkCiswOTg0ICBBcHJpY29ybgorCTAyMDAgIEhhcmQgRHJpdmUgU3RvcmFnZSAoVFBQKQorMDk4NSAgY2FiIFByb2R1a3R0ZWNobmlrIEdtYkggJiBDbyBLRworCTAwYTMgIEEzLzIwMCBvciBBMy8zMDAgTGFiZWwgUHJpbnRlcgorMDk4NiAgTWF0c3VzaGl0YSBFbGVjdHJpYyBXb3JrcywgTHRkLgorMDk4YyAgVml0YW5hIENvcnAuCiswOThkICBJTkRlc2lnbgorMDk4ZSAgSW50ZWdyYXRlZCBJbnRlbGxlY3R1YWwgUHJvcGVydHksIEluYy4KKzA5OGYgIEtlbndvb2QgVE1JIENvcnAuCiswOTkzICBHZW1zdGFyIGVCb29rIEdyb3VwLCBMdGQKKwkwMDAxICBSRUIxMTAwIGVCb29rIFJlYWRlcgorCTAwMDIgIGVCb29rCiswOTk2ICBJbnRlZ3JhdGVkIFRlbGVjb20gRXhwcmVzcywgSW5jLgorMDk5YSAgWmlwcHkgVGVjaG5vbG9neSBDb3JwLgorCTYxMGMgIEVMLTYxMCBTdXBlciBNaW5pIEVsZWN0cm9uIGx1bWluZXNjZW50IEtleWJvYXJkCiswOWEzICBQYWlyR2FpbiBUZWNobm9sb2dpZXMKKzA5YTQgIENvbnRlY2ggUmVzZWFyY2gsIEluYy4KKzA5YTUgIFZDT04gVGVsZWNvbW11bmljYXRpb25zCiswOWE2ICBQb2luY2hpcHMKKwk4MDAxICBNYXNzIFN0b3JhZ2UgRGV2aWNlCiswOWE3ICBEYXRhIFRyYW5zbWlzc2lvbiBOZXR3b3JrIENvcnAuCiswOWE4ICBMaW4gU2hpdW5nIEVudGVycHJpc2UgQ28uLCBMdGQKKzA5YTkgIFNtYXJ0IENhcmQgVGVjaG5vbG9naWVzIENvLiwgTHRkCiswOWFhICBJbnRlcnNpbCBDb3JwLgorCTEwMDAgIFByaXNtIEdUIDgwMi4xMWIvZyBBZGFwdGVyCisJMzY0MiAgUHJpc20gMi54IDgwMi4xMWIgQWRhcHRlcgorMDlhYiAgSmFwYW4gQ2FzaCBNYWNoaW5lIENvLiwgTHRkLgorMDlhZSAgVHJpcHAgTGl0ZQorMDliMiAgRnJhbmtsaW4gRWxlY3Ryb25pYyBQdWJsaXNoZXJzLCBJbmMuCisJMDAwMSAgZUJvb2ttYW4gUGFsbSBDb21wdXRlcgorMDliMyAgQWx0aXVzIFNvbHV0aW9ucywgSW5jLgorMDliNCAgTURTIFRlbGVwaG9uZSBTeXN0ZW1zCiswOWI1ICBDZWxsdHJpeCBUZWNobm9sb2d5IENvLiwgTHRkCiswOWJjICBHcnVuZGlnCisJMDAwMiAgTVBheHggTVAxNTAgTVAzIFBsYXllcgorMDliZSAgTXlTbWFydC5Db20KKwkwMDAxICBNeVNtYXJ0UGFkCiswOWJmICBBdWVyc3dhbGQgR21iSCAmIENvLiBLRworCTAwYzAgIENPTXBhY3QgMjEwNCBJU0ROIFBCWAorCTAwZGIgIENPTXBhY3QgNDQxMC8yMjA2IElTRE4gSVNETgorCTAwZjEgIENPTWZvcnQgU3lzdGVtIFRlbGVwaG9uZXMKKzA5YzEgIEFycmlzIEludGVyYWN0aXZlIExMQworCTEzMzcgIFRPVUNIU1RPTkUgREVWSUNFCiswOWMyICBOaXNjYSBDb3JwLgorMDljMyAgQWN0aXZDYXJkLCBJbmMuCisJMDAwNyAgUmVhZGVyIFYyCisJMDAwOCAgU21hcnRDYXJkIFJlYWRlcgorMDljNCAgQUNUaVNZUyBDb3JwLgorCTAwMTEgIEFDVC1JUjIwMDBVIElyREEgRG9uZ2xlCiswOWM1ICBNZW1vcnkgQ29ycC4KKzA5Y2MgIFdvcmtiaXQgQ29ycC4KKwkwNDA0ICBCQUZPIFVTQi1BVEEvQVRBUEkgQnJpZGdlIENvbnRyb2xsZXIKKzA5Y2QgIFBzaW9uIERhY29tIEhvbWUgTmV0d29ya3MsIEx0ZAorMDljZSAgQ2l0eSBFbGVjdHJvbmljcywgTHRkCiswOWNmICBFbGVjdHJvbmljcyBUZXN0aW5nIENlbnRlciwgVGFpd2FuCiswOWQxICBOZW9NYWdpYywgSW5jLgorMDlkMiAgVnJlZWxpbiBFbmdpbmVlcmluZywgSW5jLgorMDlkMyAgQ29tIE9uZQorCTAwMDEgIElTRE4gVEEKKzA5ZDcgIE5vdmF0ZWwgV2lyZWxlc3MKKwkwMTAwICBOb3ZBdGVsIEZsZXhQYWNrIEdQUyByZWNlaXZlcgorMDlkOSAgS1JGIFRlY2gsIEx0ZAorMDlkYSAgQTQgVGVjaCBDby4sIEx0ZAorCTAwMDYgIE9wdGljYWwgTW91c2UgV09QLTM1IC8gVHJ1c3QgNDUwTCBPcHRpY2FsIE1vdXNlCisJMDAwYSAgUG9ydCBNb3VzZQorCTAwMTggIFRydXN0IEh1bWFuIEludGVyZmFjZSBEZXZpY2UKKwkwMDFhICBXaXJlbGVzcyBNb3VzZSAmIFJYTS0xNSBSZWNlaXZlcgorCTAwMmEgIFdpcmVsZXNzIE9wdGljYWwgTW91c2UgTkItMzAKKzA5ZGIgIE1lYXN1cmVtZW50IENvbXB1dGluZyBDb3JwLgorCTAwNzUgIE1pbmlMYWIgMTAwOAorCTAwNzYgIFBNRC0xMDI0CisJMDA3YSAgUE1ELTEyMDhMUworCTAwODEgIFVTQi0xNjE2RlMKKwkwMDg4ICBVU0ItMTYxNkZTIGludGVybmFsIGh1YgorMDlkYyAgQWltZXggQ29ycC4KKzA5ZGQgIEZlbGxvd2VzLCBJbmMuCiswOWRmICBBZGRvbmljcyBUZWNobm9sb2dpZXMgQ29ycC4KKzA5ZTEgIEludGVsbG9uIENvcnAuCisJNTEyMSAgTWljcm9MaW5rIGRMQU4KKzA5ZTUgIEpvLURhbiBJbnRlcm5hdGlvbmFsLCBJbmMuCiswOWU2ICBTaWx1dGlhLCBJbmMuCiswOWU3ICBSZWFsIDNELCBJbmMuCiswOWU4ICBBS0FJICBQcm9mZXNzaW9uYWwgTS5JLiBDb3JwLgorMDllOSAgQ2hlbi1Tb3VyY2UsIEluYy4KKzA5ZWIgIElNIE5ldHdvcmtzLCBJbmMuCisJNDMzMSAgaVJoeXRobSBUdW5lciBSZW1vdGUKKzA5ZWYgIFhpdGVsCisJMDEwMSAgTUQtUG9ydCBERzIgTWluaURpc2MgSW50ZXJmYWNlCiswOWY1ICBBcmVzQ29tCisJMDE2OCAgTmV0d29yayBBZGFwdGVyCisJMDE4OCAgTEFOIEFkYXB0ZXIKKwkwODUwICBBZGFwdGVyCiswOWY2ICBSb2NrZXRDaGlwcywgSW5jLgorMDlmNyAgRWR1LVNjaWVuY2UgKEguSy4pLCBMdGQKKzA5ZjggIFNvZnRDb25uZXggVGVjaG5vbG9naWVzLCBJbmMuCiswOWY5ICBCYXkgQXNzb2NpYXRlcworMDlmYSAgTXRlayBWaXNpb24KKzA5ZmIgIEFsdGVyYQorMDlmZiAgR2FpbiBUZWNobm9sb2d5IENvcnAuCiswYTAwICBMaXF1aWQgQXVkaW8KKzBhMDEgIFZpQSwgSW5jLgorMGEwNyAgT250cmFrIENvbnRyb2wgU3lzdGVtcyBJbmMuCisJMDA2NCAgQURVMTAwIERhdGEgQWNxdWlzaXRpb24gSW50ZXJmYWNlCisJMDBjOCAgQURVMjAwIFJlbGF5IEkvTyBJbnRlcmZhY2UKKwkwMGQwICBBRFUyMDggRGF0YSBBY3F1aXNpdGlvbiBJbnRlcmZhY2UKKzBhMGIgIEN5YmV4IENvbXB1dGVyIFByb2R1Y3RzIENvLgorMGExMSAgWGVudGVjLCBJbmMuCiswYTEyICBDYW1icmlkZ2UgU2lsaWNvbiBSYWRpbywgTHRkCisJMDAwMSAgQmx1ZXRvb3RoIERvbmdsZSAoSENJIG1vZGUpCisJMDAwMiAgRnJvbnRsaW5lIFRlc3QgRXF1aXBtZW50IEJsdWV0b290aCBEZXZpY2UKKwkwMDAzICBOYW5vc2lyYQorCTAwMDQgIE5hbm9zaXJhIFdIUUwgUmVmZXJlbmNlIFJhZGlvCisJMDAwNSAgTmFub3NpcmEtTXVsdGltZWRpYQorCTAwMDYgIE5hbm9zaXJhLU11bHRpbWVkaWEgV0hRTCBSZWZlcmVuY2UgUmFkaW8KKwkwMDA3ICBOYW5vc2lyYTMtUk9NCisJMDAwOCAgTmFub3NpcmEzLVJPTQorCTAwMDkgIE5hbm9zaXJhNC1FRFIgV0hRTCBSZWZlcmVuY2UgUmFkaW8KKwkwMDBhICBOYW5vc2lyYTQtRURSLVJPTQorCTAwMGIgIE5hbm9zaXJhNS1ST00KKwkwMDQzICBCbHVldG9vdGggRGV2aWNlCisJMDEwMCAgQ2FzaXJhIHdpdGggQmx1ZUNvcmUyLUV4dGVybmFsIE1vZHVsZQorCTAxMDEgIENhc2lyYSB3aXRoIEJsdWVDb3JlMi1GbGFzaCBNb2R1bGUKKwkwMTAyICBDYXNpcmEgd2l0aCBCbHVlQ29yZTMtTXVsdGltZWRpYSBNb2R1bGUKKwkwMTAzICBDYXNpcmEgd2l0aCBCbHVlQ29yZTMtRmxhc2ggTW9kdWxlCisJMDEwNCAgQ2FzaXJhIHdpdGggQmx1ZUNvcmU0LUV4dGVybmFsIE1vZHVsZQorCTAxMDUgIENhc2lyYSB3aXRoIEJsdWVDb3JlNC1NdWx0aW1lZGlhIE1vZHVsZQorCTEwMDAgIEJsdWV0b290aCBEb25nbGUgKEhJRCBwcm94eSBtb2RlKQorCTEwMTAgIEJsdWV0b290aCBEZXZpY2UKKwkxMDExICBCbHVldG9vdGggRGV2aWNlCisJMTAxMiAgQmx1ZXRvb3RoIERldmljZQorCWZmZmYgIFVTQiBCbHVldG9vdGggRGV2aWNlIGluIERGVSBTdGF0ZQorMGExMyAgVGVsZWJ5dGUsIEluYy4KKzBhMTQgIFNwYWNlbGFicyBNZWRpY2FsLCBJbmMuCiswYTE1ICBTY2FsYXIgQ29ycC4KKzBhMTYgIFRyZWsgVGVjaG5vbG9neSAoUykgUFRFLCBMdGQKKwkxMTExICBUaHVtYkRyaXZlCisJODg4OCAgSUJNIFVTQiBNZW1vcnkgS2V5CisJOTk4OCAgVHJlazIwMDAgVEQtRzIKKzBhMTcgIFBlbnRheCBDb3JwLgorCTAwMDQgIFBlbnRheCBPcHRpbyAzMzAKKwkwMDA2ICBQZW50YXggT3B0aW8gUworCTAwMDcgIFBlbnRheCBPcHRpbyA1NTAKKwkwMDA5ICBQZW50YXggT3B0aW8gMzNXUgorCTAwMGEgIFBlbnRheCBPcHRpbyA1NTUKKwkwMDBjICBQZW50YXggT3B0aW8gNDNXUiAobWFzcyBzdG9yYWdlIG1vZGUpCisJMDAwZCAgUGVudGF4IE9wdGlvIDQzV1IKKwkwMDE1ICBQZW50YXggT3B0aW8gUzQwL1M1aQorCTAwM2IgIFBlbnRheCBPcHRpbyA1MCAobWFzcyBzdG9yYWdlIG1vZGUpCisJMDAzZCAgUGVudGF4IE9wdGlvIFM1NQorCTAwNDMgIFBlbnRheCAqaXN0IERMCisJMDA0NyAgUGVudGF4IE9wdGlvIFM2MAorCTAwNTIgIE9wdGlvIDYwIERpZ2l0YWwgQ2FtZXJhCisJMDA2ZSAgUGVudGF4IEsxMEQKKwkwMDcwICBQZW50YXggSzEwMEQKKwkxMDAxICBFSTIwMDAgQ2FtZXJhIHBvd2VyZWQgYnkgRGlnaXRhIQorMGExOCAgSGVpZGVsYmVyZ2VyIERydWNrbWFzY2hpbmVuIEFHCiswYTE5ICBIdWEgR2VuZyBUZWNobm9sb2dpZXMsIEluYy4KKzBhMjEgIE1lZHRyb25pYyBQaHlzaW8gQ29udHJvbCBDb3JwLgorMGEyMiAgQ2VudHVyeSBTZW1pY29uZHVjdG9yIFVTQSwgSW5jLgorMGEyYyAgQUstTW9kdWwtQnVzIENvbXB1dGVyIEdtYkgKKwkwMDA4ICBHUElPIFBvcnRzCiswYTM0ICBURzMgRWxlY3Ryb25pY3MsIEluYy4KKwkwMTEwICBEZWNrIDgyLWtleSBiYWNrbGl0IGtleWJvYXJkCiswYTM5ICBHaWxhdCBTYXRlbGxpdGUgTmV0d29ya3MsIEx0ZAorMGEzYSAgUGVudGFNZWRpYSBDby4sIEx0ZAorCTAxNjMgIEtOLVc1MTBVIDEuMCBXaXJlbGVzcyBMQU4gQWRhcHRlcgorMGEzYyAgTlRUIERvQ29NbywgSW5jLgorMGEzZCAgVmFybyBWaXNpb24KKzBhM2YgIFN3aXNzb25pYyBBRworMGE0MyAgQm9jYSBTeXN0ZW1zLCBJbmMuCiswYTQ2ICBEYXZpY29tIFNlbWljb25kdWN0b3IsIEluYy4KKwkwMjY4ICBTVDI2OAorCTk2MDEgIERNOTYwMSBUbyBGYXN0IEV0aGVybmV0IEFkYXB0ZXIKKzBhNDcgIEhpcm9zZSBFbGVjdHJpYworMGE0OCAgSS9PIEludGVyY29ubmVjdAorCTMyMzMgIE11bHRpbWVkaWEgQ2FyZCBSZWFkZXIKKwkzMjM5ICBNdWx0aW1lZGlhIENhcmQgUmVhZGVyCisJMzI1OCAgRGFuZSBFbGVjIHpNYXRlIFNEIFJlYWRlcgorCTMyNTkgIERhbmUgRWxlYyB6TWF0ZSBDRiBSZWFkZXIKKwk1MDAwICBNZWRpYUdlYXIgeEQtU00KKwk1MDBhICBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJNTAwZiAgTWFzcyBTdG9yYWdlIERldmljZQorCTUwMTAgIE1hc3MgU3RvcmFnZSBEZXZpY2UKKwk1MDExICBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJNTAxNCAgTWFzcyBTdG9yYWdlIERldmljZQorCTUwMjAgIE1hc3MgU3RvcmFnZSBEZXZpY2UKKwk1MDIxICBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJNTAyMiAgTWFzcyBTdG9yYWdlIERldmljZQorCTUwMjMgIE1hc3MgU3RvcmFnZSBEZXZpY2UKKwk1MDI0ICBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJNTAyNSAgTWFzcyBTdG9yYWdlIERldmljZQorMGE0YiAgRnVqaXRzdSBNZWRpYSBEZXZpY2VzLCBMdGQKKzBhNGMgIENvbXB1dGV4IENvLiwgTHRkCiswYTRkICBFdm9sdXRpb24gRWxlY3Ryb25pY3MsIEx0ZAorCTAwNjQgIE1LLTIyNSBEcml2ZXIKKwkwMDY1ICBNSy0yMjVDIERyaXZlcgorCTAwNjYgIE1LLTIyNUMgRHJpdmVyCisJMDA2NyAgTUstNDI1QyBEcml2ZXIKKwkwMDc4ICBNSy0zNyBEcml2ZXIKKwkwMDc5ICBNSy0zN0MgRHJpdmVyCisJMDA3YSAgTUstMzdDIERyaXZlcgorCTAwOGMgIFRlcnJhVGVjIE1JREkgTUFTVEVSCisJMDA4ZCAgTUstMjQ5QyBEcml2ZXIKKwkwMDhlICBNSy0yNDlDIE1JREkgS2V5Ym9hcmQKKwkwMDhmICBNSy00NDlDIERyaXZlcgorCTAwOTAgIEtleXN0YXRpb24gNDllIERyaXZlcgorCTAwOTEgIEtleXN0YXRpb24gNjFlcyBEcml2ZXIKKwkwMGEwICBNSy0zNjEgRHJpdmVyCisJMDBhMSAgTUstMzYxQyBEcml2ZXIKKwkwMGEyICBNSy0zNjFDIERyaXZlcgorCTAwYTMgIE1LLTQ2MUMgTUlESSBLZXlib2FyZAorCTAwYjUgIEtleXN0YXRpb24gUHJvIDg4IERyaXZlcgorCTAwZDIgIEUtS2V5cyBEcml2ZXIKKwkwMGYwICBVQy0xNiBEcml2ZXIKKwkwMGYxICBYLVNlc3Npb24gRHJpdmVyCisJMDBmNSAgVUMtMzNlIE1JREkgQ29udHJvbGxlcgorMGE0ZSAgU3RlaW5iZXJnIFNvZnQtdW5kIEhhcmR3YXJlIEdtYkgKKzBhNGYgIExpdHRvbiBTeXN0ZW1zLCBJbmMuCiswYTUwICBNaW1ha2kgRW5naW5lZXJpbmcgQ28uLCBMdGQKKzBhNTEgIFNvbnkgRWxlY3Ryb25pY3MsIEluYy4KKzBhNTIgIEplYnNlZSBFbGVjdHJvbmljcyBDby4sIEx0ZAorMGE1MyAgUG9ydGFibGUgUGVyaXBoZXJhbCBDby4sIEx0ZAorCTEwMDAgIFNjYW5uZXIKKwkyMDAwICBRLVNjYW4gQTYgU2Nhbm5lcgorCTIwMDEgIFEtU2NhbiBBNiBTY2FubmVyCisJMjAxMyAgTWVkaWEgRHJpdmUgQTYgU2Nhbm5lcgorCTIwMTQgIE1lZGlhIERyaXZlIEE2IFNjYW5uZXIKKwkyMDE1ICBCaXpDYXJkUmVhZGVyIDYwMEMKKwkyMDE2ICBCaXpDYXJkUmVhZGVyIDYwMEMKKwkyMDJhICBTY2Fuc2hlbGwtQ1NTTgorCTMwMDAgIFEtU2NhbiBBOCBTY2FubmVyCisJMzAwMiAgUS1TY2FuIEE4IFJlYWRlcgorCTMwMTUgIEJpekNhcmRSZWFkZXIgMzAwRworCTUwMDEgIEJpekNhcmRSZWFkZXIgOTAwQworMGE1YSAgRWxlY3Ryb25pY3MgRm9yIEltYWdpbmcsIEluYy4KKzBhNWIgIEVBc2ljcyBOVgorMGE1YyAgQnJvYWRjb20gQ29ycC4KKwkwMjAxICBpTGluZTEwKHRtKSBOZXR3b3JrIEFkYXB0ZXIKKwkyMDAwICBCbHVldG9vdGggRGV2aWNlCisJMjAwOSAgQmx1ZXRvb3RoIENvbnRyb2xsZXIKKwkyMDBhICBCbHVldG9vdGggZG9uZ2xlCisJMjAwZiAgQmx1ZXRvb3RoIENvbnRyb2xsZXIKKwkyMDFkICBCbHVldG9vdGggRGV2aWNlCisJMjAxZSAgSUJNIEludGVncmF0ZWQgQmx1ZXRvb3RoIElWCisJMjAyMCAgQmx1ZXRvb3RoIERvbmdsZQorCTIwMzMgIEJDTTIwMzMgQmx1ZXRvb3RoCisJMjAzNSAgQkNNMjAzNSBCbHVldG9vdGgKKwkyMDM4ICBCbHV0b25pdW0gRGV2aWNlCisJMjAzOSAgQmx1ZXRvb3RoIERldmljZQorCTIwNDUgIEJsdWV0b290aCBDb250cm9sbGVyCisJMjA0NiAgQmx1ZXRvb3RoIERldmljZQorCTIwNDcgIEJsdWV0b290aCBEZXZpY2UKKwkyMDVlICBCbHVldG9vdGggRGV2aWNlCisJMjEwMCAgQmx1ZXRvb3RoIDIuMCtlRFIgZG9uZ2xlCisJMjEwMSAgQS1MaW5rIEJsdWVVc2JBMiBCbHVldG9vdGgKKwkyMTAyICBBTllDT00gQmx1ZSBVU0ItMjAwLzI1MAorCTIxMTAgIEJsdWV0b290aCBDb250cm9sbGVyCisJMjExMSAgQU5ZQ09NIEJsdWUgVVNCLVVIRSAyMDAvMjUwCisJMjEyMCAgMjA0NSBCbHVldG9vdGggMi4wIFVTQi1VSEUgRGV2aWNlIHdpdGggdHJhY2UgZmlsdGVyCisJMjEyMSAgQkNNMjIxMCBCbHVldG9vdGgKKwkyMTIyICBCbHVldG9vdGggMi4wK0VEUiBkb25nbGUKKwkyMTMwICAyMDQ1IEJsdWV0b290aCAyLjAgVVNCLVVIRSBEZXZpY2Ugd2l0aCB0cmFjZSBmaWx0ZXIKKwkyMTMxICAyMDQ1IEJsdWV0b290aCAyLjAgRGV2aWNlIHdpdGggdHJhY2UgZmlsdGVyCisJNjMwMCAgUGlyZWxsaSBSZW1vdGUgTkRJUyBEZXZpY2UKKzBhNWQgIERpYXRyZW5kIENvcnAuCiswYTVmICBaZWJyYQorCTAwMDkgIExQMjg0NCBQcmludGVyCisJOTMwYSAgUHJpbnRlcgorMGE2MiAgTVBNYW4KKwkwMDEwICBNUE1hbiBNUC1GNDAgTVAzIFBsYXllcgorMGE2NiAgQ2xlYXJDdWJlIFRlY2hub2xvZ3kKKzBhNjcgIE1lZGVsaSBFbGVjdHJvbmljcyBDby4sIEx0ZAorMGE2OCAgQ29tYWlkZSBDb3JwLgorMGE2OSAgQ2hyb21hIGF0ZSwgSW5jLgorMGE2YiAgR3JlZW4gSG91c2UgQ28uLCBMdGQKKwkwMDAxICBDb21wYWN0IEZsYXNoIFIvVyB3aXRoIE1QMyBwbGF5ZXIKKzBhNmMgIEludGVncmF0ZWQgQ2lyY3VpdCBTeXN0ZW1zLCBJbmMuCiswYTZkICBVUFMgTWFudWZhY3R1cmluZworMGE2ZSAgQmVud2luCiswYTZmICBDb3JlIFRlY2hub2xvZ3ksIEluYy4KKwkwNDAwICBYYW5ib28KKzBhNzAgIEludGVybmF0aW9uYWwgR2FtZSBUZWNobm9sb2d5CiswYTcyICBTYW53YSBEZW5zaGkKKzBhN2QgIE5TVEwsIEluYy4KKzBhN2UgIE9jdGFnb24gU3lzdGVtcyBDb3JwLgorMGE4MCAgUmV4b24gVGVjaG5vbG9neSBDb3JwLiwgTHRkCiswYTgxICBDaGVzZW4gRWxlY3Ryb25pY3MgQ29ycC4KKwkwMTAxICBLZXlib2FyZAorCTAxMDMgIEtleWJvYXJkCisJMDIwMyAgTW91c2UKKwkwMjA1ICBQUy8yIEtleWJvYXJkK01vdXNlIEFkYXB0ZXIKKzBhODIgIFN5c2NhbgorCTQ2MDAgIFRyYXZlbFNjYW4gNDYwLzQ2NAorMGE4MyAgTmV4dENvbW0sIEluYy4KKzBhODQgIE1hdWkgSW5ub3ZhdGl2ZSBQZXJpcGhlcmFscworMGE4NSAgSWRleHggTGFicworMGE4NiAgTklUR2VuIENvLiwgTHRkCiswYThkICBQaWN0dXJldGVsCiswYThlICBKYXBhbiBBdmlhdGlvbiBFbGVjdHJvbmljcyBJbmR1c3RyeSwgTHRkCisJMjAxMSAgRmlsdGVyIERyaXZlciBGb3IgSkFFIFhNQyBSL1cKKzBhOTAgIENhbmR5IFRlY2hub2xvZ3kgQ28uLCBMdGQKKzBhOTEgIEdsb2JsaW5rIFRlY2hub2xvZ3ksIEluYy4KKwkzODAxICBUYXJndXMgUEFLUDAwMyBNb3VzZQorMGE5MiAgRUdPIFNZU3RlbXMsIEluYy4KKwkwMDExICBTWVMgV2F2ZVRlcm1pbmFsIFUyQQorCTAwMjEgIEdJR0FQb3J0CisJMDAzMSAgR0lHQVBvcnRBRworCTAwNTMgIEF1ZGlvVHJhayBPcHRvcGxheQorCTAwNjEgIFdhdmV0ZXJtaW5hbCBVMjQKKwkwMDcxICBNQVlBIEVYNworCTAwOTEgIE1heWEgNDQKKwkwMGIxICBNQVlBIEVYNQorCTEwMDAgIE1JREkgTWF0ZQorCTEwMTAgIFJvTUkvTworCTEwMjAgIE00VQorCTEwMzAgIE04VQorCTEwOTAgIEtleUNvbnRyb2w0OQorCTEwYTAgIEtleUNvbnRyb2wyNQorMGE5MyAgQyBUZWNobm9sb2dpZXMgQUIKKwkwMDAyICBDLVBlbiAxMAorCTAwMDUgIE15UGVuIExpZ2h0CisJMDAwZCAgSW5wdXQgUGVuCisJMDAxMCAgQy1QZW4gMjAKKzBhOTQgIEludGVyc2Vuc2UKKzBhYTMgIExhdmEgQ29tcHV0ZXIgTWZnLiwgSW5jLgorMGFhNCAgRGV2ZWxjbyBFbGVrdHJvbmlrCiswYWE1ICBGaXJzdCBJbnRlcm5hdGlvbmFsIERpZ2l0YWwKKwkwMDAyICBpcm9jayEgNTAwIFNlcmllcworCTA4MDEgIE1QMyBQbGF5ZXIKKzBhYTYgIFBlcmNlcHRpb24gRGlnaXRhbCwgTHRkCisJMDEwMSAgSGVyY3VsZXMgSnVrZWJveAorCTE1MDEgIFN0b3JlICduJyBHbyBIRCBEcml2ZQorMGFhNyAgV2luY29yIE5peGRvcmYgSW50ZXJuYXRpb25hbCBHbWJICisJMDEwMCAgUE9TIEtleWJvYXJkLCBUQTU4UC1VU0IKKwkwMTAxICBQT1MgS2V5Ym9hcmQsIFRBODVQLVVTQgorCTAxMDIgIFBPUyBLZXlib2FyZCwgVEE1OS1VU0IKKwkwMTAzICBQT1MgS2V5Ym9hcmQsIFRBNjAtVVNCCisJMDEwNCAgU05Ja2V5IEtleWJvYXJkLCBTTklLZXktS0ItVVNCCisJMDIwMCAgT3BlcmF0b3IgRGlzcGxheSwgQkE2My1VU0IKKwkwMjAxICBPcGVyYXRvciBEaXNwbGF5LCBCQTY2LVVTQgorCTAyMDIgIE9wZXJhdG9yIERpc3BsYXkgJiBTY2FubmVyLCBYaUNoZWNrLUJBNjMKKwkwMjAzICBPcGVyYXRvciBEaXNwbGF5ICYgU2Nhbm5lciwgWGlDaGVjay1CQTY2CisJMDIwNCAgR3JhcGhpY3MgT3BlcmF0b3IgRGlzcGxheSwgQkE2M0dWCisJMDMwMCAgUE9TIFByaW50ZXIgKHByaW50ZXIgY2xhc3MgbW9kZSksIFRIMjEwCisJMDMwMSAgUE9TIFByaW50ZXIgKG5hdGl2ZSBtb2RlKSwgVEgyMTAKKwkwMzAyICBQT1MgUHJpbnRlciAocHJpbnRlciBjbGFzcyBtb2RlKSwgVEgyMjAKKwkwMzAzICBQT1MgUHJpbnRlciAobmF0aXZlIG1vZGUpLCBUSDIyMAorCTAzMDQgIFBPUyBQcmludGVyLCBUSDIzMAorCTAzMDUgIExvdHRlcnkgUHJpbnRlciwgWGlQcmludFBsdXMKKwkwMzA2ICBQT1MgUHJpbnRlciAocHJpbnRlciBjbGFzcyBtb2RlKSwgVEgzMjAKKwkwMzA3ICBQT1MgUHJpbnRlciAobmF0aXZlIG1vZGUpLCBUSDMyMAorCTAzMDggIFBPUyBQcmludGVyIChwcmludGVyIGNsYXNzIG1vZGUpLCBUSDQyMAorCTAzMDkgIFBPUyBQcmludGVyIChuYXRpdmUgbW9kZSksIFRINDIwCisJMDMwYSAgUE9TIFByaW50ZXIsIFRIMjAwQgorCTA0MDAgIExvdHRlcnkgU2Nhbm5lciwgWGlzY2FuIFMKKwkwNDAxICBMb3R0ZXJ5IFNjYW5uZXIsIFhpc2NhbiAzCisJNDMwNCAgQmFua2luZyBQcmludGVyIFRQMDcKKzBhYTggIFRyaUdlbSBDb21wdXRlciwgSW5jLgorCTAwNjAgIFRHIDExTWJwcyBXTEFOIE1pbmkgQWRhcHRlcgorCTEwMDEgIERyZWFtQ29tYm9NNDEwMAorCTMwMDIgIElua0pldCBDb2xvciBQcmludGVyCisJODAwMSAgVEdfaU1PTgorCTgwMDIgIFRHX0tMT1NTCisJYTAwMSAgVEdfWDIKKwlhMDAyICBUR1ZGRF9LTE9TUworCWZmZGEgIGlNT05fVkZECiswYWE5ICBCYXJvbXRlYyBDby4KKwlmMDFiICBNZWRpb24gTUQgNjI0MiBNUDMgUGxheWVyCiswYWFhICBKYXBhbiBDQk0gQ29ycC4KKzBhYWIgIFZpc2lvbiBTaGFwZSBFdXJvcGUgU0EKKzBhYWMgIGlDb21wcmVzc2lvbiwgSW5jLgorMGFhZCAgUm9oZGUgJiBTY2h3YXJ6IEdtYkggJiBDby4gS0cKKzBhYWUgIE5FQyBpbmZyb250aWEgQ29ycC4gKE5pdHN1a28pCiswYWFmICBEaWdpdGFsd2F5IENvLiwgTHRkCiswYWIwICBBcnJvdyBTdHJvbmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQKKzBhYmEgIEVsbGlzeXMKKwk4MDAxICBVU0IgVHJhY2tlciAxMTAgUHJvdG9jb2wgQW5hbHl6ZXIKKzBhYmUgIFN0ZXJlby1MaW5rCisJMDEwMSAgU0wxMjAwIERBQworMGFjMyAgU2FueW8gU2VtaWNvbmR1Y3RvciBDb21wYW55IE1pY3JvCiswYWM0ICBMZWNvIENvcnAuCiswYWM1ICBJICYgQyBDb3JwLgorMGFjNiAgU2luZ2luZyBFbGVjdHJvbnMsIEluYy4KKzBhYzcgIFBhbndlc3QgQ29ycC4KKzBhYzggIFotU3RhciBNaWNyb2VsZWN0cm9uaWNzIENvcnAuCisJMDMwMSAgV2ViIENhbWVyYQorCTAzMDIgIFpDMDMwMiBXZWJDYW0KKwkwMzIxICBVU0IgMi4wIFdlYmNhbQorCTAzMjMgIEx1eHlhIFdDLTEyMDAgVVNCIDIuMCBXZWJjYW0KKwkzMDFiICBaQzAzMDEgV2ViQ2FtCisJMzAzYiAgWkMwMzAzIFdlYkNhbQorCTMwNWIgIFpDMDMwNSBXZWJDYW0KKwkzMDdiICBVU0IgMS4xIFdlYkNhbQorCWMwMDIgIFZpc3VhbCBDb21tdW5pY2F0aW9uIENhbWVyYSBWR1AtVkNDMQorMGFjOSAgTWljcm8gU29sdXRpb25zLCBJbmMuCisJMDAwMCAgQmFja3BhY2sgQ0QtUmVXcml0ZXIKKwkwMDAxICBCQUNLUEFDSyAgMiBDYWJsZQorCTAwMTAgIEJBQ0tQQUNLCisJMDAxMSAgQmFja3BhY2sgNDBHQiBIYXJkIERyaXZlCisJMDExMCAgQkFDS1BBQ0sKKwkwMTExICBCYWNrUGFjaworCTEyMzQgIEJBQ0tQQUNLCiswYWNhICBPUEVOIE5ldHdvcmtzIEx0ZAorCTEwNjAgIE9QRU4gTlQxIFBsdXMgSUkKKzBhY2MgIEtvZ2EgRWxlY3Ryb25pY3MgQ28uCiswYWNkICBJRCBUZWNoCisJMDQwMSAgSUQgVEVDSCBTcGVjdHJ1bSBJSUkgSHlicmlkIFNtYXJ0Y2FyZCBSZWFkZXIKKzBhY2UgIFp5REFTCisJMTIwMSAgODAyLjExYiBXaUZpCisJMTIxMSAgODAyLjExYi9nIFVTQjIgV2lGaQorCTEyMTUgIFdMQS01NEwgV2lGaQorCTE2MDggIE9OTUkgRkFYTU9ERU0gNTZLIFVOTyAoWnlYRUwpCiswYWNmICBJbnRvdG8sIEluYy4KKzBhZDAgIEludGVsbGl4IENvcnAuCiswYWQxICBSZW1vdGVjIFRlY2hub2xvZ3ksIEx0ZAorMGFkMiAgU2VydmljZSAmIFF1YWxpdHkgVGVjaG5vbG9neSBDby4sIEx0ZAorMGFlMyAgQWxsaW9uIENvbXB1dGVyLCBJbmMuCiswYWU0ICBUYWl0byBDb3JwLgorMGFlNyAgTmVvZHltIFN5c3RlbXMsIEluYy4KKzBhZTggIFN5c3RlbSBTdXBwb3J0IENvLiwgTHRkCiswYWU5ICBOb3J0aCBTaG9yZSBDaXJjdWl0IERlc2lnbiBMLkwuUC4KKzBhZWEgIFNjaUVzc2VuY2UsIExMQworMGFlYiAgVFRQIENvbW11bmljYXRpb25zLCBMdGQKKzBhZWMgIE5lb2RpbyBUZWNobm9sb2dpZXMgQ29ycC4KKwkyMTAxICBTbWFydE1lZGlhIENhcmQgUmVhZGVyCisJMjEwMiAgQ29tcGFjdEZsYXNoIENhcmQgUmVhZGVyCisJMjEwMyAgTU1DL1NEIENhcmQgUmVhZGVyCisJMjEwNCAgTWVtb3J5U3RpY2sgQ2FyZCBSZWFkZXIKKwkyMjAxICBTbWFydE1lZGlhK0NvbXBhY3RGbGFzaCBDYXJkIFJlYWRlcgorCTIyMDIgIFNtYXJ0TWVkaWErTU1DL1NEIENhcmQgUmVhZGVyCisJMjIwMyAgU21hcnRNZWRpYStNZW1vcnlTdGljayBDYXJkIFJlYWRlcgorCTIyMDQgIENvbXBhY3RGbGFzaCtNTUMvU0QgQ2FyZCBSZWFkZXIKKwkyMjA1ICBDb21wYWN0Rmxhc2grTWVtb3J5U3RpY2sgQ2FyZCBSZWFkZXIKKwkyMjA2ICBNTUMvU0QrTWVtb3J5U3RpY2sgQ2FyZCBSZWFkZXIKKwkyMzAxICBTbWFydE1lZGlhK0NvbXBhY3RGbGFzaCtNTUMvU0QgQ2FyZCBSZWFkZXIKKwkyMzAyICBTbWFydE1lZGlhK0NvbXBhY3RGbGFzaCtNZW1vcnlTdGljayBDYXJkIFJlYWRlcgorCTIzMDMgIFNtYXJ0TWVkaWErTU1DL1NEK01lbW9yeVN0aWNrIENhcmQgUmVhZGVyCisJMjMwNCAgQ29tcGFjdEZsYXNoK01NQy9TRCtNZW1vcnlTdGljayBDYXJkIFJlYWRlcgorCTMwMTYgIE1NQy9TRCtNZW1vcnkgU3RpY2sgQ2FyZCBSZWFkZXIKKwkzMDUwICBORDMwNTAgOC1pbi0xIENhcmQgUmVhZGVyCisJMzA2MCAgMS4xIEZTIENhcmQgUmVhZGVyCisJMzEwMSAgTU1DL1NEIENhcmQgUmVhZGVyCisJMzEwMiAgTWVtb3J5U3RpY2sgQ2FyZCBSZWFkZXIKKwkzMjAxICBNTUMvU0QrTWVtb3J5U3RpY2sgQ2FyZCBSZWFkZXIKKwkzMjE2ICBIUyBDYXJkIFJlYWRlcgorCTMyNjAgIDctaW4tMSBDYXJkIFJlYWRlcgorCTUwMTAgIE5ENTAxMCBDYXJkIFJlYWRlcgorMGFmMCAgT3B0aW9uCisJNTAwMCAgVU1UUyBDYXJkCisJNjAwMCAgR2xvYmVUcm90dGVyIDNHIGRhdGFjYXJkCisJNjMwMCAgR1QgM0cgUXVhZCBVTVRTL0dQUlMgQ2FyZAorCTY2MDAgIEdsb2JlVHJvdHRlciAzRysgZGF0YWNhcmQKKzBhZjYgIFNpbHZlciBJIENvLiwgTHRkCiswYWY3ICBCMkMyLCBJbmMuCisJMDEwMSAgRGlnaXRhbCBUViBVU0IgUmVjZWl2ZXIgKERWQi1TL1QvQyAvIEFUU0MpCiswYWY5ICBIYW1hLCBJbmMuCisJMDAxMCAgVVNCIFNpZ2h0Q2FtIDEwMAorCTAwMTEgIE1pY3JvIElubm92YXRpb25zIElDNTBDIFdlYkNhbQorMGFmYyAgWmFwdHJvbml4IEx0ZAorMGFmZCAgVGF0ZW5vIERlbm5vdSwgSW5jLgorMGFmZSAgQ3VtbWlucyBFbmdpbmUgQ28uCiswYWZmICBKdW1wIFpvbmUgTmV0d29yayBQcm9kdWN0cywgSW5jLgorMGIwMCAgSU5HRU5JQ08KKzBiMDUgIEFTVVNUZWsgQ29tcHV0ZXIsIEluYy4KKwkxMTAxICBNYXNzIFN0b3JhZ2UgKFVJU0RNQzRTKQorCTE3MDYgIFdMLTE2N0cgODAyLjExZyBBZGFwdGVyIFtyYWxpbmtdCisJMTcwNyAgV0wtMTY3ZyBXaXJlbGVzcyBBZGFwdGVyCisJMTcwOCAgTWFzcyBTdG9yYWdlIERldmljZQorCTE3MGIgIE1hc3MgU3RvcmFnZSBEZXZpY2UKKwkxNzBjICBXTC0xNTlnCisJMTcwZCAgODAyLjExYi9nIFdpcmVsZXNzIE5ldHdvcmsgQWRhcHRlcgorCTE3MTIgIEJULTE4MyBCbHVldG9vdGggMi4wK0VEUiBhZGFwdGVyCisJMTcxNSAgMjA0NSBCbHVldG9vdGggMi4wIERldmljZSB3aXRoIHRyYWNlIGZpbHRlcgorCTE3MTYgIEJsdWV0b290aCBEZXZpY2UKKwkxNzFiICBBOVQgd2lyZWxlc3MKKwkxNzFjICA4MDIuMTFiL2cgV2lyZWxlc3MgTmV0d29yayBBZGFwdGVyCisJMTcyMyAgV0wtMTY3RyB2MiA4MDIuMTFnIEFkYXB0ZXIgW3JhbGlua10KKwkxNzI0ICBSVDI1NzMKKwkxNzI2ICBMYXB0b3AgT0xFRCBEaXNwbGF5CisJMTcyYSAgQVNVUyA4MDIuMTFuIE5ldHdvcmsgQWRhcHRlcgorCTE3MmIgIDgwMi4xMW4gTmV0d29yayBBZGFwdGVyCisJMTczMSAgQVNVUyA4MDIuMTFuIE5ldHdvcmsgQWRhcHRlcgorCTE3MzIgIDgwMi4xMW4gTmV0d29yayBBZGFwdGVyCisJMTczYyAgQlQtMTgzIEJsdWV0b290aCAyLjAKKwkxNzQyICA4MDIuMTFuIE5ldHdvcmsgQWRhcHRlcgorCTYxMDEgIENhYmxlIE1vZGVtCisJNjIwYSAgUmVtb3RlIE5ESVMgRGV2aWNlCiswYjBjICBUb2RvcyBEYXRhIFN5c3RlbSBBQgorCTAwMDkgIFRvZG9zIEFyZ29zIE1pbmkgSUkgU21hcnQgQ2FyZCBSZWFkZXIKKzBiMGUgIEdOIE5ldGNvbQorMGIwZiAgQVZJRCBUZWNobm9sb2d5CiswYjEwICBQY2FsbHkKKzBiMTEgIEkgVGVjaCBTb2x1dGlvbnMgQ28uLCBMdGQKKzBiMWUgIEVsZWN0cm9uaWMgV2FyZmFyZSBBc3NvYy4sIEluYy4gKEVXQSkKKzBiMWYgIEluc3lkZSBTb2Z0d2FyZSBDb3JwLgorMGIyMCAgVHJhbnNEaW1lbnNpb24sIEluYy4KKzBiMjEgIFlva29nYXdhIEVsZWN0cmljIENvcnAuCiswYjIyICBKYXBhbiBTeXN0ZW0gRGV2ZWxvcG1lbnQgQ28uLCBMdGQKKzBiMjMgIFBhbi1Bc2lhIEVsZWN0cm9uaWNzIENvLiwgTHRkCiswYjI0ICBMaW5rIEV2b2x1dGlvbiBDb3JwLgorMGIyNyAgUml0ZWsgQ29ycC4KKzBiMjggIEtlbndvb2QgQ29ycC4KKzBiMmMgIFZpbGxhZ2UgQ2VudGVyLCBJbmMuCiswYjMwICBQTlkgVGVjaG5vbG9naWVzLCBJbmMuCisJMDAwNiAgU00gTWVkaWEtU2h1dHRsZSBDYXJkIFJlYWRlcgorMGIzMyAgQ29udG91ciBEZXNpZ24sIEluYy4KKwkwMDIwICBTaHV0dGxlWHByZXNzCiswYjM3ICBIaXRhY2hpIFVMU0kgU3lzdGVtcyBDby4sIEx0ZAorMGIzOSAgT21uaWRpcmVjdGlvbmFsIENvbnRyb2wgVGVjaG5vbG9neSwgSW5jLgorCTAxMDkgIFVTQiBUTyBFdGhlcm5ldAorCTA0MjEgIFNlcmlhbAorCTA4MDEgIFVTQi1QYXJhbGxlbCBCcmlkZ2UKKwkwOTAxICBPQ1QgVG8gRmFzdCBFdGhlcm5ldCBDb252ZXJ0ZXIKKwkwYzAzICBMQU4gRE9DSyBTZXJpYWwgQ29udmVydGVyCiswYjNhICBJUGF4ZXNzCiswYjNiICBUZWtyYW0gVGVjaG5vbG9neSBDby4sIEx0ZAorCTAxNjMgIFRMLVdOMzIwRyAxLjAgV0xBTiBBZGFwdGVyCisJMTYwMSAgQWxsbmV0IDAxOTMgODAyLjExYiBBZGFwdGVyCisJMTYwMiAgWnlYRUwgWnlBSVIgQjIwMCA4MDIuMTFiIEFkYXB0ZXIKKwkxNjEyICBBSVIuTWF0ZSAyQG5ldCA4MDIuMTFiIEFkYXB0ZXIKKwkxNjEzICA4MDIuMTFiIFdpcmVsZXNzIExBTiBBZGFwdGVyCisJMTYyMCAgQWxsbmV0IFVTQiAyLjAgV2lyZWxlc3MgTmV0d29yayBBZGFwdGVyCisJMTYzMCAgUXVpY2tXTEFOCisJNTYzMCAgWkQxMjExCisJNjYzMCAgWkQxMjExCiswYjNjICBPbGl2ZXR0aSBUZWNoY2VudGVyCisJYTAxMCAgU2ltcGxlX1dheSBQcmludGVyL1NjYW5uZXIvQ29waWVyCiswYjNlICBLaWt1c3VpIEVsZWN0cm9uaWNzIENvcnAuCiswYjQxICBIYWwgQ29ycC4KKwkwMDExICBDcm9zc2FtMitVU0IgSVIgY29tbWFuZGVyCiswYjQzICBQbGF5LmNvbSwgSW5jLgorCTAwMDMgIFBTMiBDb250cm9sbGVyIENvbnZlcnRlcgorMGI0NyAgU3BvcnRidWcuY29tLCBJbmMuCiswYjQ4ICBUZWNobm9UcmVuZCBBRworCTEwMDMgIFRlY2hub3RyZW5kL0hhdXBwYXVnZSBVU0ItTm92YQorCTEwMDQgIFRULVBDbGluZQorCTEwMDUgIFRlY2hub3RyZW5kL0hhdXBwYXVnZSBVU0ItTm92YQorCTEwMDYgIFRlY2hub3RyZW5kL0hhdXBwYXVnZSBERUMzMDAwLXMKKwkxMDA3ICBUVC1taWNybyBwbHVzIERldmljZQorCTEwMDggIFRlY2hub3RyZW5kL0hhdXBwYXVnZSBERUMyMDAwLXQKKwkxMDA5ICBUZWNobm90cmVuZC9IYXVwcGF1Z2UgREVDMjU0MC10CiswYjQ5ICBBU0NJSSBDb3JwLgorCTA2NGYgIFRyYW5jZSBWaWJyYXRvcgorMGI0YiAgUGluZSBDb3JwLiBMdGQuCisJMDEwMCAgRCdtdXNpYyBNUDMgUGxheWVyCiswYjRkICBHcmFwaHRlYyBBbWVyaWNhLCBJbmMuCisJMTEwYSAgR3JhcGh0ZWMgQ0MyMDAtMjAKKzBiNGUgIE11c2ljYWwgRWxlY3Ryb25pY3MsIEx0ZAorCTY1MDAgIE1QMyBQbGF5ZXIKKwk4MDI4ICBNUDMgUGxheWVyCisJODkyMCAgTVAzIFBsYXllcgorMGI1MCAgRHVtcHJpZXMgQ28uLCBMdGQKKzBiNTEgIENvbWZvcnQgS2V5Ym9hcmQgQ28uCisJMDAyMCAgQ29tZm9ydCBLZXlib2FyZAorMGI1MiAgQ29sb3JhZG8gTWljcm9EaXNwbGF5LCBJbmMuCiswYjU0ICBTaW5ib24gRWxlY3Ryb25pY3MgQ28uLCBMdGQKKzBiNTYgIFRZSSBTeXN0ZW1zLCBMdGQKKzBiNTcgIEJlaWppbmcgSGFud2FuZ1RlY2hub2xvZ3kgQ28uLCBMdGQKKzBiNTkgIExha2UgQ29tbXVuaWNhdGlvbnMsIEx0ZAorMGI1YSAgQ29yZWwgQ29ycC4KKzBiNWYgIEdyZWVuIEVsZWN0cm9uaWNzIENvLiwgTHRkCiswYjYwICBOc2luZSwgTHRkCiswYjYxICBORUMgVmlld3RlY2hub2xvZ3ksIEx0ZAorMGI2MiAgT3JhbmdlIE1pY3JvLCBJbmMuCisJMDAwYiAgQmx1ZXRvb3RoIERldmljZQorCTAwNTkgIGlCT1QyIFdlYkNhbQorMGI2MyAgQURMaW5rIFRlY2hub2xvZ3ksIEluYy4KKzBiNjQgIFdvbmRlcmZ1bCBXaXJlIENhYmxlIENvLiwgTHRkCiswYjY1ICBFeHBlcnQgTWFnbmV0aWNzIENvcnAuCiswYjY5ICBDYWNoZVZpc2lvbgorMGI2YSAgTWF4aW0gSW50ZWdyYXRlZCBQcm9kdWN0cworMGI2ZiAgTmFnYW5vIEphcGFuIFJhZGlvIENvLiwgTHRkCiswYjcwICBQb3J0YWxQbGF5ZXIsIEluYy4KKwkwMGJhICBpUml2ZXIgSDEwIDIwR0IKKzBiNzEgIFNISU4tRUkgU2FuZ3lvIENvLiwgTHRkCiswYjcyICBFbWJlZGRlZCBXaXJlbGVzcyBUZWNobm9sb2d5IENvLiwgTHRkCiswYjczICBDb21wdXRvbmUgQ29ycC4KKzBiNzUgIFJvbGFuZCBERyBDb3JwLgorMGI3OSAgU3VucmlzZSBUZWxlY29tLCBJbmMuCiswYjdhICBaZWV2bywgSW5jLgorCTA3ZDAgIEJsdWV0b290aCBEb25nbGUKKzBiN2IgIFRhaWtvIERlbmtpIENvLiwgTHRkCiswYjdjICBJVFJBTiBDb21tdW5pY2F0aW9ucywgTHRkCiswYjdkICBBc3Ryb2Rlc2lnbiwgSW5jLgorMGI4NCAgUmV4dHJvbiBUZWNobm9sb2d5LCBJbmMuCiswYjg1ICBFbGthdCBFbGVjdHJvbmljcywgU2RuLiwgQmhkLgorMGI4NiAgRXhwdXRlciBTeXN0ZW1zLCBJbmMuCisJNTEwMCAgWE1DNTEwMCBaaXBweSBEcml2ZQorCTUxMTAgIFhNQzUxMTAgRmxhc2ggRHJpdmUKKwk1MjAwICBYTUM1MjAwIFppcHB5IERyaXZlCisJNTIwMSAgWE1DNTIwMCBaaXBweSBEcml2ZQorCTUyMDIgIFhNQzUyMDAgWmlwcHkgRHJpdmUKKwk1MjgwICBYTUM1MjgwIFN0b3JhZ2UgRHJpdmUKKwlmZmYwICBJU1A1MjAwIERlYnVnZ2VyCiswYjg3ICBQbHVzLU9uZSBJICYgVCwgSW5jLgorMGI4OCAgU2lnbWEgS29raSBDby4sIEx0ZCwgVGVjaG5vbG9neSBDZW50ZXIKKzBiODkgIEFkdmFuY2VkIERpZ2l0YWwgQnJvYWRjYXN0LCBMdGQKKzBiOTUgIEFTSVggRWxlY3Ryb25pY3MgQ29ycC4KKwkxNzIwICAxMC8xMDAgRXRoZXJuZXQKKwkxNzgwICBBWDg4MTc4CisJNzcyMCAgQVg4ODc3MgorMGI5NiAgU2V3b24gVGVsZWNvbQorMGI5NyAgTzIgTWljcm8sIEluYy4KKwk3NzMyICBTbWFydCBDYXJkIFJlYWRlcgorCTc3NjEgIE96Nzc2IDEuMSBIdWIKKwk3NzYyICBPejc3NiBTbWFydENhcmQgUmVhZGVyCisJNzc3MiAgT1o3NzYgQ0NJRCBTbWFydGNhcmQgUmVhZGVyCiswYjk4ICBQbGF5bWF0ZXMgVG95cywgSW5jLgorMGI5OSAgQXVkaW8gSW50ZXJuYXRpb25hbCwgSW5jLgorMGI5YiAgRGlwbC4tSW5nLiBTdGVmYW4gS3VuZGUKKwk0MDEyICBSZWZsZXggUkMtY29udHJvbGxlciBJbnRlcmZhY2UKKzBiOWQgIFNvZnRwcm90ZWMgQ28uCiswYjlmICBDaGlwcG8gVGVjaG5vbG9naWVzCiswYmFmICBVLlMuIFJvYm90aWNzCisJMDBlNSAgVVNSNjAwMAorCTAwZWIgIFVTUjExMjAgODAyLjExYiBBZGFwdGVyCisJMDBlYyAgNTZLIEZheG1vZGVtCisJMDBmMSAgU3VyZUNvbm5lY3QgQURTTCBBVE0gQWRhcHRlcgorCTAwZjIgIFN1cmVDb25uZWN0IEFEU0wgTG9hZGVyCisJMDBmNSAgU3VyZUNvbm5lY3QgQURTTCBBVE0gQWRhcHRlcgorCTAwZjYgIFN1cmVDb25uZWN0IEFEU0wgTG9hZGVyCisJMDBmNyAgU3VyZUNvbm5lY3QgQURTTCBBVE0gQWRhcHRlcgorCTAwZjggIFN1cmVDb25uZWN0IEFEU0wgTG9hZGVyCisJMDBmOSAgU3VyZUNvbm5lY3QgQURTTCBBVE0gQWRhcHRlcgorCTAwZmEgIFN1cmVDb25uZWN0IEFEU0wgTG9hZGVyCisJMDBmYiAgU3VyZUNvbm5lY3QgQURTTCBFdGhlcm5ldC9VU0IgUm91dGVyCisJMDExOCAgVTUgODAyLjExZyBBZGFwdGVyCisJMDExYiAgV2lyZWxlc3MgTUFYZyBBZGFwdGVyCisJMDEyMSAgVVNSNTQyMyBXTEFOCisJNjExMiAgRmF4TW9kZW0gTW9kZWwgNTYzMworMGJiMCAgQ29uY29yZCBDYW1lcmEgQ29ycC4KKwkwMTAwICBTb3VuZCBWaXNpb24gU3RyZWFtCisJNTAwNyAgMzM0MHovUm9sbGVpIERDMzEwMAorMGJiMSAgSW5maW5pbGluayBDb3JwLgorMGJiMiAgQW1iaXQgTWljcm9zeXN0ZW1zIENvcnAuCisJMDMwMiAgV0xBTgorCTYwOTggIFVTQiBDYWJsZSBNb2RlbQorMGJiMyAgT2Z1amkgVGVjaG5vbG9neQorMGJiNCAgSGlnaCBUZWNoIENvbXB1dGVyIENvcnAuCisJMDBjZSAgbW1PMiBYREEgR1NNL0dQUlMgUG9ja2V0IFBDCisJMDBjZiAgU1BWIEM1MDAgU21hcnQgUGhvbmUKKwkwYTAxICBQb2NrZXRQQyBTeW5jCisJMGEwMiAgSGltYWxheWEgR1NNL0dQUlMgUG9ja2V0IFBDCisJMGEwMyAgUG9ja2V0UEMgU3luYworCTBhMDQgIFBvY2tldFBDIFN5bmMKKwkwYTA1ICBQb2NrZXRQQyBTeW5jCisJMGEwNiAgUG9ja2V0UEMgU3luYworCTBhMDcgIE1hZ2ljaWFuIFBvY2tldFBDIFNtYXJ0UGhvbmUgLyBPMiBYREEKKwkwYTA4ICBQb2NrZXRQQyBTeW5jCisJMGEwOSAgUG9ja2V0UEMgU3luYworCTBhMGEgIFBvY2tldFBDIFN5bmMKKwkwYTBiICBQb2NrZXRQQyBTeW5jCisJMGEwYyAgUG9ja2V0UEMgU3luYworCTBhMGQgIFBvY2tldFBDIFN5bmMKKwkwYTBlICBQb2NrZXRQQyBTeW5jCisJMGEwZiAgUG9ja2V0UEMgU3luYworCTBhMTAgIFBvY2tldFBDIFN5bmMKKwkwYTExICBQb2NrZXRQQyBTeW5jCisJMGExMiAgUG9ja2V0UEMgU3luYworCTBhMTMgIFBvY2tldFBDIFN5bmMKKwkwYTE0ICBQb2NrZXRQQyBTeW5jCisJMGExNSAgUG9ja2V0UEMgU3luYworCTBhMTYgIFBvY2tldFBDIFN5bmMKKwkwYTE3ICBQb2NrZXRQQyBTeW5jCisJMGExOCAgUG9ja2V0UEMgU3luYworCTBhMTkgIFBvY2tldFBDIFN5bmMKKwkwYTFhICBQb2NrZXRQQyBTeW5jCisJMGExYiAgUG9ja2V0UEMgU3luYworCTBhMWMgIFBvY2tldFBDIFN5bmMKKwkwYTFkICBQb2NrZXRQQyBTeW5jCisJMGExZSAgUG9ja2V0UEMgU3luYworCTBhMWYgIFBvY2tldFBDIFN5bmMKKwkwYTIwICBQb2NrZXRQQyBTeW5jCisJMGEyMSAgUG9ja2V0UEMgU3luYworCTBhMjIgIFBvY2tldFBDIFN5bmMKKwkwYTIzICBQb2NrZXRQQyBTeW5jCisJMGEyNCAgUG9ja2V0UEMgU3luYworCTBhMjUgIFBvY2tldFBDIFN5bmMKKwkwYTI2ICBQb2NrZXRQQyBTeW5jCisJMGEyNyAgUG9ja2V0UEMgU3luYworCTBhMjggIFBvY2tldFBDIFN5bmMKKwkwYTI5ICBQb2NrZXRQQyBTeW5jCisJMGEyYSAgUG9ja2V0UEMgU3luYworCTBhMmIgIFBvY2tldFBDIFN5bmMKKwkwYTJjICBQb2NrZXRQQyBTeW5jCisJMGEyZCAgUG9ja2V0UEMgU3luYworCTBhMmUgIFBvY2tldFBDIFN5bmMKKwkwYTJmICBQb2NrZXRQQyBTeW5jCisJMGEzMCAgUG9ja2V0UEMgU3luYworCTBhMzEgIFBvY2tldFBDIFN5bmMKKwkwYTMyICBQb2NrZXRQQyBTeW5jCisJMGEzMyAgUG9ja2V0UEMgU3luYworCTBhMzQgIFBvY2tldFBDIFN5bmMKKwkwYTM1ICBQb2NrZXRQQyBTeW5jCisJMGEzNiAgUG9ja2V0UEMgU3luYworCTBhMzcgIFBvY2tldFBDIFN5bmMKKwkwYTM4ICBQb2NrZXRQQyBTeW5jCisJMGEzOSAgUG9ja2V0UEMgU3luYworCTBhM2EgIFBvY2tldFBDIFN5bmMKKwkwYTNiICBQb2NrZXRQQyBTeW5jCisJMGEzYyAgUG9ja2V0UEMgU3luYworCTBhM2QgIFBvY2tldFBDIFN5bmMKKwkwYTNlICBQb2NrZXRQQyBTeW5jCisJMGEzZiAgUG9ja2V0UEMgU3luYworCTBhNDAgIFBvY2tldFBDIFN5bmMKKwkwYTQxICBQb2NrZXRQQyBTeW5jCisJMGE0MiAgUG9ja2V0UEMgU3luYworCTBhNDMgIFBvY2tldFBDIFN5bmMKKwkwYTQ0ICBQb2NrZXRQQyBTeW5jCisJMGE0NSAgUG9ja2V0UEMgU3luYworCTBhNDYgIFBvY2tldFBDIFN5bmMKKwkwYTQ3ICBQb2NrZXRQQyBTeW5jCisJMGE0OCAgUG9ja2V0UEMgU3luYworCTBhNDkgIFBvY2tldFBDIFN5bmMKKwkwYTRhICBQb2NrZXRQQyBTeW5jCisJMGE0YiAgUG9ja2V0UEMgU3luYworCTBhNGMgIFBvY2tldFBDIFN5bmMKKwkwYTRkICBQb2NrZXRQQyBTeW5jCisJMGE0ZSAgUG9ja2V0UEMgU3luYworCTBhNGYgIFBvY2tldFBDIFN5bmMKKwkwYTUwICBIVEMgU21hcnRQaG9uZSBTeW5jCisJMGE1MSAgU1BWIEM0MDAgLyBULU1vYmlsZSBTREEgR1NNL0dQUlMgUG9ja2V0IFBDCisJMGE1MiAgU21hcnRQaG9uZSBTeW5jCisJMGE1MyAgU21hcnRQaG9uZSBTeW5jCisJMGE1NCAgU21hcnRQaG9uZSBTeW5jCisJMGE1NSAgU21hcnRQaG9uZSBTeW5jCisJMGE1NiAgU21hcnRQaG9uZSBTeW5jCisJMGE1NyAgU21hcnRQaG9uZSBTeW5jCisJMGE1OCAgU21hcnRQaG9uZSBTeW5jCisJMGE1OSAgU21hcnRQaG9uZSBTeW5jCisJMGE1YSAgU21hcnRQaG9uZSBTeW5jCisJMGE1YiAgU21hcnRQaG9uZSBTeW5jCisJMGE1YyAgU21hcnRQaG9uZSBTeW5jCisJMGE1ZCAgU21hcnRQaG9uZSBTeW5jCisJMGE1ZSAgU21hcnRQaG9uZSBTeW5jCisJMGE1ZiAgU21hcnRQaG9uZSBTeW5jCisJMGE2MCAgU21hcnRQaG9uZSBTeW5jCisJMGE2MSAgU21hcnRQaG9uZSBTeW5jCisJMGE2MiAgU21hcnRQaG9uZSBTeW5jCisJMGE2MyAgU21hcnRQaG9uZSBTeW5jCisJMGE2NCAgU21hcnRQaG9uZSBTeW5jCisJMGE2NSAgU21hcnRQaG9uZSBTeW5jCisJMGE2NiAgU21hcnRQaG9uZSBTeW5jCisJMGE2NyAgU21hcnRQaG9uZSBTeW5jCisJMGE2OCAgU21hcnRQaG9uZSBTeW5jCisJMGE2OSAgU21hcnRQaG9uZSBTeW5jCisJMGE2YSAgU21hcnRQaG9uZSBTeW5jCisJMGE2YiAgU21hcnRQaG9uZSBTeW5jCisJMGE2YyAgU21hcnRQaG9uZSBTeW5jCisJMGE2ZCAgU21hcnRQaG9uZSBTeW5jCisJMGE2ZSAgU21hcnRQaG9uZSBTeW5jCisJMGE2ZiAgU21hcnRQaG9uZSBTeW5jCisJMGE3MCAgU21hcnRQaG9uZSBTeW5jCisJMGE3MSAgU21hcnRQaG9uZSBTeW5jCisJMGE3MiAgU21hcnRQaG9uZSBTeW5jCisJMGE3MyAgU21hcnRQaG9uZSBTeW5jCisJMGE3NCAgU21hcnRQaG9uZSBTeW5jCisJMGE3NSAgU21hcnRQaG9uZSBTeW5jCisJMGE3NiAgU21hcnRQaG9uZSBTeW5jCisJMGE3NyAgU21hcnRQaG9uZSBTeW5jCisJMGE3OCAgU21hcnRQaG9uZSBTeW5jCisJMGE3OSAgU21hcnRQaG9uZSBTeW5jCisJMGE3YSAgU21hcnRQaG9uZSBTeW5jCisJMGE3YiAgU21hcnRQaG9uZSBTeW5jCisJMGE3YyAgU21hcnRQaG9uZSBTeW5jCisJMGE3ZCAgU21hcnRQaG9uZSBTeW5jCisJMGE3ZSAgU21hcnRQaG9uZSBTeW5jCisJMGE3ZiAgU21hcnRQaG9uZSBTeW5jCisJMGE4MCAgU21hcnRQaG9uZSBTeW5jCisJMGE4MSAgU21hcnRQaG9uZSBTeW5jCisJMGE4MiAgU21hcnRQaG9uZSBTeW5jCisJMGE4MyAgU21hcnRQaG9uZSBTeW5jCisJMGE4NCAgU21hcnRQaG9uZSBTeW5jCisJMGE4NSAgU21hcnRQaG9uZSBTeW5jCisJMGE4NiAgU21hcnRQaG9uZSBTeW5jCisJMGE4NyAgU21hcnRQaG9uZSBTeW5jCisJMGE4OCAgU21hcnRQaG9uZSBTeW5jCisJMGE4OSAgU21hcnRQaG9uZSBTeW5jCisJMGE4YSAgU21hcnRQaG9uZSBTeW5jCisJMGE4YiAgU21hcnRQaG9uZSBTeW5jCisJMGE4YyAgU21hcnRQaG9uZSBTeW5jCisJMGE4ZCAgU21hcnRQaG9uZSBTeW5jCisJMGE4ZSAgU21hcnRQaG9uZSBTeW5jCisJMGE4ZiAgU21hcnRQaG9uZSBTeW5jCisJMGE5MCAgU21hcnRQaG9uZSBTeW5jCisJMGE5MSAgU21hcnRQaG9uZSBTeW5jCisJMGE5MiAgU21hcnRQaG9uZSBTeW5jCisJMGE5MyAgU21hcnRQaG9uZSBTeW5jCisJMGE5NCAgU21hcnRQaG9uZSBTeW5jCisJMGE5NSAgU21hcnRQaG9uZSBTeW5jCisJMGE5NiAgU21hcnRQaG9uZSBTeW5jCisJMGE5NyAgU21hcnRQaG9uZSBTeW5jCisJMGE5OCAgU21hcnRQaG9uZSBTeW5jCisJMGE5OSAgU21hcnRQaG9uZSBTeW5jCisJMGE5YSAgU21hcnRQaG9uZSBTeW5jCisJMGE5YiAgU21hcnRQaG9uZSBTeW5jCisJMGE5YyAgU21hcnRQaG9uZSBTeW5jCisJMGE5ZCAgU21hcnRQaG9uZSBTeW5jCisJMGE5ZSAgU21hcnRQaG9uZSBTeW5jCisJMGE5ZiAgU21hcnRQaG9uZSBTeW5jCisJMGIwNCAgSGVybWVzIC8gVHlUTiAvIFQtTW9iaWxlIE1EQSBWYXJpbyBJSSAvIE8yIFhkYSBUcmlvbgorCTBiMDYgIEF0aGVuYSAvIEFkdmFudGFnZSB4NzUwMCAvIERvcG9kIFUxMDAwIC8gVC1Nb2JpbGUgQU1FTworCTBiMGMgIEVsZiAvIFRvdWNoIC8gUDM0NTAgLyBULU1vYmlsZSBNREEgVG91Y2ggLyBPMiBYZGEgTm92YSAvIERvcG9kIFMxCisJMGJjZSAgVmFyaW8gTURBCiswYmI1ICBNdXJhdGEgTWFudWZhY3R1cmluZyBDby4sIEx0ZAorMGJiNiAgTmV0d29yayBBbGNoZW15CiswYmI3ICBKb3l0ZWNoIENvbXB1dGVyIENvLiwgTHRkCiswYmI4ICBIaXRhY2hpIFNlbWljb25kdWN0b3IgYW5kIERldmljZXMgU2FsZXMgQ28uLCBMdGQKKzBiYjkgIEVpZ2VyIE0mQyBDby4sIEx0ZAorMGJiYSAgWkFjY2VzcyBTeXN0ZW1zCiswYmJiICBHZW5lcmFsIE1ldGVycyBDb3JwLgorMGJiYyAgQXNzaXN0aXZlIFRlY2hub2xvZ3ksIEluYy4KKzBiYmQgIFN5c3RlbSBDb25uZWN0aW9uLCBJbmMuCiswYmMwICBLbmlsaW5rIFRlY2hub2xvZ3ksIEluYy4KKzBiYzEgIEZ1dyBZbmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQKKzBiYzIgIFNlYWdhdGUgUlNTIExMQworCTIwMDAgIFN0b3JhZ2UgQWRhcHRlciBWMyAoVFBQKQorMGJjMyAgSVBXaXJlbGVzcywgSW5jLgorMGJjNCAgTWljcm9jdWJlIENvcnAuCiswYmM1ICBKQ04gQ28uLCBMdGQKKzBiYzYgIEV4V0FZLCBJbmMuCiswYmM3ICBYMTAgV2lyZWxlc3MgVGVjaG5vbG9neSwgSW5jLgorCTAwMDEgIEFjdGl2ZUhvbWUgKEFDUEktY29tcGxpYW50KQorCTAwMDIgIEZpcmVjcmFja2VyIEludGVyZmFjZSAoQUNQSS1jb21wbGlhbnQpCisJMDAwMyAgVkdBIFZpZGVvIFNlbmRlciAoQUNQSS1jb21wbGlhbnQpCisJMDAwNCAgWDEwIFJlY2VpdmVyCisJMDAwNSAgV2lyZWxlc3MgVHJhbnNjZWl2ZXIgKEFDUEktY29tcGxpYW50KQorCTAwMDYgIFdpcmVsZXNzIFRyYW5zY2VpdmVyIChBQ1BJLWNvbXBsaWFudCkKKwkwMDA3ICBXaXJlbGVzcyBUcmFuc2NlaXZlciAoQUNQSS1jb21wbGlhbnQpCisJMDAwOCAgV2lyZWxlc3MgVHJhbnNjZWl2ZXIgKEFDUEktY29tcGxpYW50KQorCTAwMDkgIFdpcmVsZXNzIFRyYW5zY2VpdmVyIChBQ1BJLWNvbXBsaWFudCkKKwkwMDBhICBXaXJlbGVzcyBUcmFuc2NlaXZlciAoQUNQSS1jb21wbGlhbnQpCisJMDAwYiAgVHJhbnNjZWl2ZXIgKEFDUEktY29tcGxpYW50KQorCTAwMGMgIFRyYW5zY2VpdmVyIChBQ1BJLWNvbXBsaWFudCkKKwkwMDBkICBUcmFuc2NlaXZlciAoQUNQSS1jb21wbGlhbnQpCisJMDAwZSAgVHJhbnNjZWl2ZXIgKEFDUEktY29tcGxpYW50KQorCTAwMGYgIFRyYW5zY2VpdmVyIChBQ1BJLWNvbXBsaWFudCkKKzBiYzggIFRlbG1heCBDb21tdW5pY2F0aW9ucworMGJjOSAgRUNJIFRlbGVjb20sIEx0ZAorMGJjYSAgU3RhcnRlayBFbmdpbmVlcmluZywgSW5jLgorMGJjYiAgUGVyZmVjdCBUZWNobmljIEVudGVycHJpc2UgQ28uLCBMdGQKKzBiZDcgIEFuZHJldyBQYXJnZXRlciAmIEFzc29jaWF0ZXMKKwlhMDIxICBBbXB0ZWsgRFA0IG11bHRpY2hhbm5lbCBzaWduYWwgYW5hbHl6ZXIKKzBiZGEgIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorCTAxMDMgIFVTQiAyLjAgQ2FyZCBSZWFkZXIKKwkwMTA0ICBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJMDEwNiAgTWFzcyBTdG9yYWdlIERldmljZQorCTAxMDcgIE1hc3MgU3RvcmFnZSBEZXZpY2UKKwkwMTA4ICBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJMDExMSAgQ2FyZCBSZWFkZXIKKwkwMTEzICBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJMDExNSAgTWFzcyBTdG9yYWdlIERldmljZQorCTAxMTYgIE1hc3MgU3RvcmFnZSBEZXZpY2UKKwkwMTE3ICBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJMDExOCAgTWFzcyBTdG9yYWdlIERldmljZQorCTAxNTEgIE1hc3MgU3Ryb2FnZSBEZXZpY2UKKwkwMTUyICBNYXNzIFN0cm9hZ2UgRGV2aWNlCisJMDE1MyAgTWFzcyBTdHJvYWdlIERldmljZQorCTAxNTYgIE1hc3MgU3Ryb2FnZSBEZXZpY2UKKwkwMTU3ICBNYXNzIFN0cm9hZ2UgRGV2aWNlCisJMDE1OCAgTWFzcyBTdHJvYWdlIERldmljZQorCTAxNjEgIE1hc3MgU3Ryb2FnZSBEZXZpY2UKKwkwMTY4ICBNYXNzIFN0cm9hZ2UgRGV2aWNlCisJMDE2OSAgTWFzcyBTdHJvYWdlIERldmljZQorCTAxNzEgIE1hc3MgU3Ryb2FnZSBEZXZpY2UKKwkwMTc2ICBNYXNzIFN0cm9hZ2UgRGV2aWNlCisJMDE3OCAgTWFzcyBTdHJvYWdlIERldmljZQorCTI4MzEgIDI4MzFVIERldmljZQorCTgxNTAgIFJUTDgxNTAgRmFzdCBFdGhlcm5ldCBBZGFwdGVyCisJODE1MSAgUlRMODE1MSBBZGFwdGVvbiBCdXNpbmVzcyBNb2JpbGUgTmV0d29ya3MgQlYKKwk4MTg3ICBSVEw4MTg3IFdpcmVsZXNzIEFkYXB0ZXIKKwk4MTg5ICBSVEw4MTg3QiBXaXJlbGVzcyA4MDIuMTFnIDU0TWJwcyBOZXR3b3JrIEFkYXB0ZXIKKwk4MTk3ICBSVEw4MTg3QiBXaXJlbGVzcyBBZGFwdGVyCiswYmRiICBFcmljc3NvbiBCdXNpbmVzcyBNb2JpbGUgTmV0d29ya3MgQlYKKwkxMDAwICBCViBCbHVldG9vdGggRGV2aWNlCisJMTAwMiAgQmx1ZXRvb3RoIERldmljZSAxLjIKKzBiZGMgIFkgTWVkaWEgQ29ycC4KKzBiZGQgIE9yYW5nZSBQQ1MKKzBiZTIgIEthbmRhIFRzdXNoaW4gS29neW8gQ28uLCBMdGQKKzBiZTMgIFRPWU8gQ29ycC4KKzBiZTQgIEVsa2EgSW50ZXJuYXRpb25hbCwgTHRkCiswYmU1ICBET01FIGltYWdpbmcgc3lzdGVtcywgSW5jLgorMGJlNiAgRG9uZyBHdWFuIEh1bWVuIFdvbmRlcmZ1bCBXaXJlIENhYmxlIEZhY3RvcnkKKzBiZWUgIExUSyBJbmR1c3RyaWVzLCBMdGQKKzBiZWYgIFdheTJDYWxsIENvbW11bmljYXRpb25zCiswYmYwICBQYWNlIE1pY3JvIFRlY2hub2xvZ3kgUExDCiswYmYxICBJbnRyYWNvbSBTLkEuCisJMDAwMSAgbmV0TW9kIERyaXZlciBWZXIgMi40LjE3IChDQVBJKQorCTAwMDIgIG5ldE1vZCBEcml2ZXIgVmVyIDIuNCAoQ0FQSSkKKwkwMDAzICBuZXRNb2QgRHJpdmVyIFZlciAyLjQgKENBUEkpCiswYmYyICBLb25leHgKKzBiZjYgIEFkZG9uaWNzIFRlY2hub2xvZ2llcywgSW5jLgorCTAxMDMgIFN0b3JhZ2UgRGV2aWNlCisJMTIzNCAgU3RvcmFnZSBEZXZpY2UKKwlhMDAwICBDYWJsZSAyMDUgKFRQUCkKKwlhMDAxICBDYWJsZSAyMDUKKwlhMDAyICBJREUgQnJpZGdlCiswYmY3ICBTdW5ueSBHaWtlbiwgSW5jLgorMGJmOCAgRnVqaXRzdSBTaWVtZW5zIENvbXB1dGVycworCTEwMDEgIEZ1aml0c3UgUG9ja2V0IExvb3ggNjAwIFBEQQorMGMwNCAgTU9UTyBEZXZlbG9wbWVudCBHcm91cCwgSW5jLgorMGMwNSAgQXBwaWFuIEdyYXBoaWNzCiswYzA2ICBIYXNicm8gR2FtZXMsIEluYy4KKzBjMDcgIEluZmluaXRlIERhdGEgU3RvcmFnZSwgTHRkCiswYzA4ICBBZ2F0ZQorCTAzNzggIFEgMTZNQiBTdG9yYWdlIERldmljZQorMGMwOSAgQ29tamV0IEluZm9ybWF0aW9uIFN5c3RlbQorCWE1YTUgIExpdHRvIFZlcnNpb24gVVNCMi4wCiswYzBhICBIaWdocG9pbnQgVGVjaG5vbG9naWVzLCBJbmMuCiswYzBiICBEdXJhIE1pY3JvLCBJbmMuIChBY29tZGF0YSkKKwkyN2NiICA2LWluLTEgRmxhc2ggUmVhZGVyIGFuZCBXcml0ZXIKKwkyN2Q3ICBNdWx0aSBNZW1vcnkgcmVhZGVyL3dyaXRlciBNRC0wMDUKKwkyN2RhICBNdWx0aSBNZW1vcnkgcmVhZGVyL3dyaXRlciBNRC0wMDUKKwkyN2RjICBNdWx0aSBNZW1vcnkgcmVhZGVyL3dyaXRlciBNRC0wMDUKKwkyN2U3ICAzLDUnJyBIREQgY2FzZSBNRC0yMzEKKwkyN2VlICAzLDUnJyBIREQgY2FzZSBNRC0yMzEKKwkyODE0ICAzLDUnJyBIREQgY2FzZSBNRC0yMzEKKwkyODE1ICAzLDUnJyBIREQgY2FzZSBNRC0yMzEKKwkyODFkICAzLDUnJyBIREQgY2FzZSBNRC0yMzEKKwlhMTA5ICBDRi9TTSBSZWFkZXIgYW5kIFdyaXRlcgorCWExMGMgIFNEL01TIFJlYWRlciBhbmQgV3JpdGVyCisJYjAwMSAgVVNCIDIuMCBNYXNzIFN0b3JhZ2UgSURFIGFkYXB0ZXIKKwliMDA0ICBNTUMvU0QgUmVhZGVyIGFuZCBXcml0ZXIKKzBjMTIgIFplcm9wbHVzCisJMDAwNSAgUFNYIFZpYnJhdGlvbiBGZWVkYmFjayBDb252ZXJ0ZXIKKwk4ODA5ICBSZWQgT2N0YW5lIElnbml0aW9uIFhib3ggRERSIFBhZAorMGMxNSAgSXJpcyBHcmFwaGljcworMGMxNiAgR3lyYXRpb24sIEluYy4KKwkwMDgwICBlSG9tZSBJbmZyYXJlZCBSZWNlaXZlcgorCTAwODEgIGVIb21lIEluZnJhcmVkIFJlY2VpdmVyCiswYzE3ICBDeWJlcmJvYXJkIEEvUworMGMxOCAgU3luZXJUZWsgS29yZWEsIEluYy4KKzBjMTkgIGN5YmVyUElYSUUsIEluYy4KKzBjMWEgIFNpbGljb24gTW90aW9uLCBJbmMuCiswYzFiICBNSVBTIFRlY2hub2xvZ2llcworMGMxYyAgSGFuZyBaaG91IFNpbGFuIEVsZWN0cm9uaWNzIENvLiwgTHRkCiswYzIyICBUYWxseSBQcmludGVyIENvcnAuCiswYzIzICBMZXJub3V0ICsgSGF1c3BpZQorMGMyNCAgVGFpeW8gWXVkZW4KKwkwMDAxICBCbHVldG9vdGggQWRhcHRvcgorCTAwMDIgIEJsdWV0b290aCBEZXZpY2UyCisJMDAwNSAgQmx1ZXRvb3RoIERldmljZShCQzA0LUV4dGVybmFsKQorCTAwMGIgIEJsdWV0b290aCBEZXZpY2UoQkMwNC1FeHRlcm5hbCkKKwkwMDBjICBCbHVldG9vdGggQWRhcHRvcgorCTAwMGUgIEJsdWV0b290aCBEZXZpY2UoQkMwNC1FeHRlcm5hbCkKKwkwMDBmICBCbHVldG9vdGggRHJpdmVyIChWMi4wK0VEUikKKwkwMDEwICBCbHVldG9vdGggRGV2aWNlKEJDMDQtRXh0ZXJuYWwpCisJMDAxMiAgQmx1ZXRvb3RoIERldmljZShCQzA0LUV4dGVybmFsKQorCTAwMTggIEJsdWV0b290aCBEZXZpY2UoQkMwNC1FeHRlcm5hbCkKKwkwMDE5ICBCbHVldG9vdGggRGV2aWNlCisJMGMyNCAgQmx1ZXRvb3RoIERldmljZShTQU1QTEUpCisJZmZmZiAgQmx1ZXRvb3RoIG1vZHVsZSB3aXRoIEJsdWVDb3JlIGluIERGVSBtb2RlCiswYzI1ICBTYW1wbyBDb3JwLgorCTAzMTAgIFNjcmVhbSBDYW0KKzBjMjcgIFJGSURlYXMsIEluYworCTNiZmEgIHBjUHJveCBDYXJkIFJlYWRlcgorMGMyZSAgTWV0cm8KKwkwMjAwICBNZXRyb2xvZ2ljIFNjYW5uZXIKKzBjMzUgIEVhZ2xldHJvbiwgSW5jLgorMGMzNiAgRSBJbmsgQ29ycC4KKzBjMzcgIGUuRGlnaXRhbAorMGMzOCAgRGVyIEFuIEVsZWN0cmljIFdpcmUgJiBDYWJsZSBDby4sIEx0ZAorMGMzOSAgSUZSCiswYzNhICBGdXJ1aSBQcmVjaXNlIENvbXBvbmVudCAoS3Vuc2hhbikgQ28uLCBMdGQKKzBjM2IgIEtvbWF0c3UsIEx0ZAorMGMzYyAgUmFkaXVzIENvLiwgTHRkCiswYzNkICBJbm5vY29tLCBJbmMuCiswYzNlICBOZXh0Y2VsbCwgSW5jLgorMGM0NCAgTW90b3JvbGEgaURFTgorCTAwMjEgIGlERU4gUDJrMCBEZXZpY2UKKwkwMDIyICBpREVOIFAyazEgRGV2aWNlCisJMDNhMiAgaURFTiBTbWFydHBob25lCiswYzQ1ICBNaWNyb2RpYQorCTEwMjAgIE1hc3MgU3RvcmFnZSBSZWFkZXIKKwkxMDI4ICBNYXNzIFN0b3JhZ2UgUmVhZGVyCisJMTAzMCAgTWFzcyBTdG9yYWdlIFJlYWRlcgorCTEwMzEgIFNvbml4IE1hc3MgU3RvcmFnZSBEZXZpY2UKKwkxMDMyICBNYXNzIFN0b3JhZ2UgUmVhZGVyCisJMTAzMyAgU29uaXggTWFzcyBTdG9yYWdlIERldmljZQorCTEwMzQgIE1hc3MgU3RvcmFnZSBSZWFkZXIKKwkxMDM1ICBNYXNzIFN0b3JhZ2UgUmVhZGVyCisJMTAzNiAgTWFzcyBTdG9yYWdlIFJlYWRlcgorCTEwMzcgIFNvbml4IE1hc3MgU3RvcmFnZSBEZXZpY2UKKwkxMDUwICBDRiBDYXJkIFJlYWRlcgorCTEwNTggIEhERCBSZWFkZXIKKwkxMDYwICBpRmxhc2ggU00tRGlyZWN0IENhcmQgUmVhZGVyCisJMTA2MSAgTWFzcyBTdG9yYWdlIFJlYWRlcgorCTEwNjIgIE1hc3MgU3RvcmFnZSBSZWFkZXIKKwkxMDYzICBTb25peCBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJMTA2NCAgTWFzcyBTdG9yYWdlIFJlYWRlcgorCTEwNjUgIE1hc3MgU3RvcmFnZSBSZWFkZXIKKwkxMDY2ICBNYXNzIFN0b3JhZ2UgUmVhZGVyCisJMTA2NyAgTWFzcyBTdG9yYWdlIFJlYWRlcgorCTExNTggIEE1NkFLCisJMTg0YyAgVm9JUCBQaG9uZQorCTYwMDEgIEdlbml1cyBWaWRlb0NBTSBOQgorCTYwMDUgIFN3ZWV4IE1pbmkgV2ViQ2FtCisJNjAwNyAgVmlkZW9DQU0gRXllCisJNjAwOSAgVmlkZW9DQU0gRXhwcmVzc0lJCisJNjAwZCAgVHdpbmtsZUNhbSBVU0IgY2FtZXJhCisJNjAxMSAgUEMgQ2FtZXJhIChTTjlDMTAyKQorCTYwMTkgIFBDIENhbWVyYSAoU045QzEwMikKKwk2MDI0ICBWaWRlb0NBTSBFeHByZXNzSUkKKwk2MDI1ICBWaWRlb0NBTSBFeHByZXNzSUkKKwk2MDI4ICBUeXBob29uIEVhc3ljYW0gVVNCIDMzMEsgKG9sZGVyKQorCTYwMjkgIFRyaXBsZXggaS1taW5pIFBDIENhbWVyYQorCTYwMmEgIE1lYWRlIEVUWC0xMDVFQyBDYW1lcmEKKwk2MDJiICBWaWRlb0NBTSBOQiAzMDAKKwk2MDJjICBDbGFzIE9obHNvbiBUV0MtMzBYT1AgV2ViQ2FtCisJNjAyZCAgVmlkZW9DQU0gRXhwcmVzc0lJCisJNjAyZSAgVmlkZW9DQU0gTWVzc2VuZ2VyCisJNjAzMCAgVmlkZW9DQU0gRXhwcmVzc0lJCisJNjAzZiAgVmlkZW9DQU0gRXhwcmVzc0lJCisJNjA0MCAgQ0NEIFBDIENhbWVyYSAoUEMzOTBBKQorCTYwNmEgIENDRCBQQyBDYW1lcmEgKFBDMzkwQSkKKwk2MDdhICBDQ0QgUEMgQ2FtZXJhIChQQzM5MEEpCisJNjA3YiAgV2luMiBQQyBDYW1lcmEKKwk2MDdjICBDQ0QgUEMgQ2FtZXJhIChQQzM5MEEpCisJNjA3ZSAgQ0NEIFBDIENhbWVyYSAoUEMzOTBBKQorCTYwODAgIEF1ZGlvIChNaWNyb3Bob25lKQorCTYwODIgIFZpZGVvQ0FNIExvb2sKKwk2MDgzICBWaWRlb0NBTSBMb29rCisJNjA4YyAgVmlkZW9DQU0gTG9vaworCTYwOGUgIFZpZGVvQ0FNIExvb2sKKwk2MDhmICBWaWRlb0NBTSBMb29rCisJNjBhOCAgVmlkZW9DQU0gTG9vaworCTYwYWEgIFZpZGVvQ0FNIExvb2sKKwk2MGFiICBQQyBDYW1lcmEKKwk2MGFmICBWaWRlb0NBTSBMb29rCisJNjBiMCAgR2VuaXVzIFZpZGVvQ2FtIExvb2sKKwk2MGMwICBQQyBDYW1lcmEgd2l0aCBNaWMgKFNOOUMxMDUpCisJNjBjOCAgV2luMiBQQyBDYW1lcmEKKwk2MGNjICBDb21wb3NpdGUgRGV2aWNlCisJNjBlYyAgQ29tcG9zaXRlIERldmljZQorCTYwZWYgIFdpbjIgUEMgQ2FtZXJhCisJNjBmYSAgUEMgQ2FtZXJhIHdpdGggTWljIChTTjlDMTA1KQorCTYwZmIgIENvbXBvc2l0ZSBEZXZpY2UKKwk2MGZjICBQQyBDYW1lcmEgd2l0aCBNaWMgKFNOOUMxMDUpCisJNjBmZSAgQXVkaW8gKE1pY3JvcGhvbmUpCisJNjEwOCAgV2luMiBQQyBDYW1lcmEKKwk2MTIyICBQQyBDYW1lcmEgKFNOOUMxMTApCisJNjEyMyAgUEMgQ2FtZXJhIChTTjlDMTEwKQorCTYxMmEgIFBDIENhbWVyYSAoU045QzExMCkKKwk2MTJjICBQQyBDYW1lcmEgKFNOOUMxMTApCisJNjEyZSAgUEMgQ2FtZXJhIChTTjlDMTEwKQorCTYxMmYgIFBDIENhbWVyYSAoU045QzExMCkKKwk2MTMwICBQQyBDYW1lcmEgKFNOOUMxMjApCisJNjEzOCAgV2luMiBQQyBDYW1lcmEKKwk2MTNhICBQQyBDYW1lcmEgKFNOOUMxMjApCisJNjEzYiAgV2luMiBQQyBDYW1lcmEKKwk2MTNjICBQQyBDYW1lcmEgKFNOOUMxMjApCisJNjEzZSAgUEMgQ2FtZXJhIChTTjlDMTIwKQorCTYyNDAgIFBDIENhbWVyYSAoU045QzIwMSkKKwk2MjQyICBQQyBDYW1lcmEgKFNOOUMyMDEpCisJNjI0MyAgUEMgQ2FtZXJhIChTTjlDMjAxKQorCTYyNDggIFBDIENhbWVyYSAoU045QzIwMSkKKwk2MjRiICBQQyBDYW1lcmEgKFNOOUMyMDEpCisJNjI0YyAgUEMgQ2FtZXJhIChTTjlDMjAxKQorCTYyNGUgIFBDIENhbWVyYSAoU045QzIwMSkKKwk2MjRmICBQQyBDYW1lcmEgKFNOOUMyMDEpCisJNjI2MCAgUEMgQ2FtZXJhIChTTjlDMjAxKQorCTYyNzAgIFUtQ0FNIFBDIENhbWVyYSBORTg3OAorCTYyN2EgIFBDIENhbWVyYSAoU045QzIwMSkKKwk2MjdiICBQQyBDYW1lcmEgKFNOOUMyMDEpCisJNjI3YyAgUEMgQ2FtZXJhIChTTjlDMjAxKQorCTYyN2YgIFBDIENhbWVyYSAoU045QzIwMSkKKwk2MjgwICBDb21wb3NpdGUgRGV2aWNlCisJNjI4MiAgQXVkaW8gKE1pY3JvcGhvbmUpCisJNjI4MyAgQXVkaW8gKE1pY3JvcGhvbmUpCisJNjI4OCAgQXVkaW8gKE1pY3JvcGhvbmUpCisJNjI4YSAgQ29tcG9zaXRlIERldmljZQorCTYyOGIgIFBDIENhbWVyYSAoU045QzIwMikKKwk2MjhjICBQQyBDYW1lcmEgKFNOOUMyMDIpCisJNjI4ZSAgQ29tcG9zaXRlIERldmljZQorCTYyOGYgIENvbXBvc2l0ZSBEZXZpY2UKKwk2MmEwICBBdWRpbyAoTWljcm9waG9uZSkKKwk2MmIwICBBdWRpbyAoTWljcm9waG9uZSkKKwk2MmJhICBQQyBDYW1lcmEgKFNOOUMyMDIpCisJNjJiYiAgUEMgQ2FtZXJhIChTTjlDMjAyKQorCTYyYmMgIENvbXBvc2l0ZSBEZXZpY2UKKwk2MmMwICBQYXZpbGlvbiBXZWJjYW0KKwk4MDAwICBEQzMxVkMKKwk4MDA2ICBEdWFsIE1vZGUgQ2FtZXJhICg4MDA2IFZHQSkKKwk4MDBhICBWaXZpdGFyIFZpdmljYW0zMzUwQgorMGM0NiAgV2F2ZVJpZGVyIENvbW11bmljYXRpb25zLCBJbmMuCiswYzRiICBSZWluZXIgU0NUIEthcnRlbnN5c3RlbWUgR21iSAorCTAxMDAgIGN5YmVySmFjayBlLWNvbS9waW5wYWQKKwkwMzAwICBjeWJlckphY2sgcGlucGFkKGEpCiswYzUyICBTZWFsZXZlbCBTeXN0ZW1zLCBJbmMuCisJMjEwMSAgU2VyaWFsIENvbnZlcnRlcgorMGM1MyAgVmlld1BMVVMsIEluYy4KKzBjNTQgIEdsb3J5LCBMdGQKKzBjNTUgIFNwZWN0cnVtIERpZ2l0YWwsIEluYy4KKwkwNTEwICBTcGVjdHJ1bSBEaWdpdGFsIFhEUzUxMCBKVEFHIERlYnVnZ2VyCisJMDU0MCAgU1BJNTQwCisJNTQxNiAgVE1TMzIwQzU0MTYgRFNLCisJNjQxNiAgVE1TMzIwQzY0MTYgRERCCiswYzU2ICBCaWxsaW9uIEJyaWdodCwgTHRkCiswYzU3ICBJbWFnaW5hdGl2ZSBEZXNpZ24gT3BlcmF0aW9uIENvLiwgTHRkCiswYzU4ICBWaWRhciBTeXN0ZW1zIENvcnAuCiswYzU5ICBEb25nIEd1YW4gU2hpbmtvIFdpcmUgQ28uLCBMdGQKKzBjNWEgIFRSUyBJbnRlcm5hdGlvbmFsIE1mZy4sIEluYy4KKzBjNWUgIFh5dHJvbml4IFJlc2VhcmNoICYgRGVzaWduCiswYzYyICBDaGFudCBTaW5jZXJlIENvLiwgTHRkCiswYzYzICBUb2tvLCBJbmMuCiswYzY0ICBTaWduYWxpdHkgU3lzdGVtIEVuZ2luZWVyaW5nIENvLiwgTHRkCiswYzY1ICBFbWluZW5jZSBFbnRlcnByaXNlIENvLiwgTHRkCiswYzY2ICBSZXhvbiBFbGVjdHJvbmljcyBDb3JwLgorMGM2NyAgQ29uY2VwdCBUZWxlY29tLCBMdGQKKzBjNzAgIE1DVCBFbGVrdHJvbmlrbGFkZW4KKwkwMDAwICBVU0IwOCBEZXZlbG9wbWVudCBib2FyZAorMGM3NCAgT3B0cm9uaWMgTGFib3JhdG9yaWVzIEluYy4KKwkwMDAyICBPTCA3MDAtMzAgR29uaW9tZXRlcgorMGM3NiAgSk1UZWssIExMQy4KKwkwMDAxICBNYXNzIFN0b3JhZ2UgQ29udHJvbGxlcgorCTAwMDIgIE1hc3MgU3RvcmFnZSBDb250cm9sbGVyCisJMDAwMyAgVVNCZGlzaworCTAwMDQgIE1hc3MgU3RvcmFnZSBDb250cm9sbGVyCisJMDAwNSAgVHJhbnNjZW5kIFVTQiBGbGFzaCBkaXNrCisJMDAwNiAgVHJhbnNjZW5kIEpldEZsYXNoCisJMDAwNyAgTWFzcyBTdG9yYWdlIERldmljZQorMGM3NyAgU2lwaXggR3JvdXAsIEx0ZAorCTEwMDEgIFNpUGl4IFdlYjIKKwkxMDAyICBTaVBpeCBTQzIxMDAKKwkxMDEwICBTaVBpeCBTbmFwCisJMTAxMSAgU2lQaXggQmxpbmsgMgorCTEwMTUgIFNpUGl4IENBTWVsZW9uCiswYzc4ICBEZXR0byBDb3JwLgorMGM3OSAgTnVDb25uZXggVGVjaG5vbG9naWVzIFB0ZS4sIEx0ZAorMGM3YSAgV2luZy1TcGFuIEVudGVycHJpc2UgQ28uLCBMdGQKKzBjODYgIE5EQSBUZWNobm9sb2dpZXMsIEluYy4KKzBjODggIEt5b2NlcmEgV2lyZWxlc3MgQ29ycC4KKwkwMDIxICBIYW5kaGVsZAorCTE3ZGEgIFF1YWxjb21tIEt5b2NlcmEgQ0RNQSBUZWNobm9sb2dpZXMgTVNNCiswYzg5ICBIb25kYSBUc3VzaGluIEtvZ3lvIENvLiwgTHRkCiswYzhhICBQYXRod2F5IENvbm5lY3Rpdml0eSwgSW5jLgorMGM4YiAgV2F2ZWZseSBDb3JwLgorMGM4YyAgQ29hY3RpdmUgTmV0d29ya3MKKzBjOGQgIFRlbXBvCiswYzhlICBDZXNzY29tIENvLiwgTHRkCisJNjAwMCAgTHV4aWFuIFNlcmllcworMGM4ZiAgQXBwbGllZCBNaWNyb3N5c3RlbXMKKzBjOTggIEJlcmtzaGlyZSBQcm9kdWN0cywgSW5jLgorCTExNDAgIFVTQiBQQyBXYXRjaGRvZworMGM5OSAgSW5ub2NoaXBzIENvLiwgTHRkCiswYzlhICBIYW53b29sIFJvYm90aWNzIENvcnAuCiswYzliICBKb2JpbiBZdm9uLCBJbmMuCiswYzlkICBTZW1UZWsKKwkwMTcwICAzODczIE1hbnVhbCBJbnNlcnQgY2FyZCByZWFkZXIKKzBjYTIgIFp5ZmVyCiswY2EzICBTZWdhIENvcnAuCiswY2E0ICBTVCZUIEluc3RydW1lbnQgQ29ycC4KKzBjYTUgIEJBRSBTeXN0ZW1zIENhbmFkYSwgSW5jLgorMGNhNiAgQ2FzdGxlcyBUZWNobm9sb2d5IENvLiwgTHRkCisJMDAxMCAgRVpVU0IgUEMvU0MgU21hcnQgQ2FyZCBSZWFkZXIKKwkwMDUwICBFWjIyMFBVIFJlYWRlciBDb250cm9sbGVyCisJMTA3NyAgQmx1ZHJpdmUgRmFtaWx5IFNtYXJ0IENhcmQgUmVhZGVyCisJMTA3ZSAgUmVhZGVyIENvbnRyb2xsZXIKKwkyMDEwICBteVBhZDExMCBQQy9TQyBTbWFydCBDYXJkIFJlYWRlcgorMGNhNyAgSW5mb3JtYXRpb24gU3lzdGVtcyBMYWJvcmF0b3JpZXMKKzBjYWQgIE1vdG9yb2xhIENHSVNTCisJOTAwMSAgUG93ZXJQYWQgUG9ja2V0IFBDwqBEZXZpY2UKKzBjYWUgIEFzY29tIEJ1c2luZXNzIFN5c3RlbXMsIEx0ZAorMGNhZiAgQnVzbGluaworCTI1MDcgIEhpLVNwZWVkIFVTQi10by1JREUgQnJpZGdlIENvbnRyb2xsZXIKKwkyNTE1ICBGbGFzaCBEaXNrIEVtYmVkZGVkIEh1YgorCTI1MTYgIEZsYXNoIERpc2sgU2VjdXJpdHkgRGV2aWNlCisJMjUxNyAgRmxhc2ggRGlzayBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJMjVjNyAgSGktU3BlZWQgVVNCLXRvLUlERSBCcmlkZ2UgQ29udHJvbGxlcgorCTNhMDAgIEhhcmQgRHJpdmUKKwkzYTIwICBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJM2FjZCAgTWFzcyBTdG9yYWdlIERldmljZQorMGNiMCAgRmx5aW5nIFBpZyBTeXN0ZW1zCiswY2IxICBJbm5vdm9uaWNzLCBJbmMuCiswY2I2ICBDZWxlc3RpeCBOZXR3b3JrcywgUHRlLiwgTHRkCiswY2I3ICBTaW5nYXRyb24gRW50ZXJwcmlzZSBDby4sIEx0ZAorMGNiOCAgT3B0aWNpcyBDby4sIEx0ZAorMGNiYSAgVHJ1c3QgRWxlY3Ryb25pYyAoU2hhbmdoYWkpIENvLiwgTHRkCiswY2JiICBTaGFuZ2hhaSBEYXJvbmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQKKzBjYmMgIFBhbG1heCBUZWNobm9sb2d5IENvLiwgTHRkCisJMDEwMSAgUG9ja2V0IFBDIFA2QworCTAyMDEgIFBlcnNvbmFsIERpZ2l0YWwgQXNzaXN0YW50CisJMDMwMSAgUGVyc29uYWwgRGlnaXRhbCBBc3Npc3RhbnQgUDZNKworCTA0MDEgIFBvY2tldCBQQworMGNiZCAgUGVudGVsIENvLiwgTHRkIChFbGVjdHJvbmljcyBFcXVpcG1lbnQgRGl2LikKKzBjYmUgIEtlcnl4IFRlY2hub2xvZ2llcywgSW5jLgorMGNiZiAgVW5pb24gR2VuaXVzIENvbXB1dGVyIENvLiwgTHRkCiswY2MwICBLdW9uIFlpIEluZHVzdHJpYWwgQ29ycC4KKzBjYzEgIEdpdmVuIEltYWdpbmcsIEx0ZAorMGNjMiAgVGltZXggQ29ycC4KKzBjYzMgIFJpbWFnZSBDb3JwLgorMGNjNCAgZW1zeXMgR21iSAorMGNjNSAgU2VuZG8KKzBjYzYgIEludGVybWFnaWMgQ29ycC4KKzBjYzcgIEtvbnRyb24gTWVkaWNhbCBBRworMGNjOCAgVGVjaG5vdG9vbHMgQ29ycC4KKzBjYzkgIEJyb2FkTUFYIFRlY2hub2xvZ2llcywgSW5jLgorMGNjYSAgQW1waGVub2wKKzBjY2IgIFNLTmV0IENvLiwgTHRkCiswY2NjICBEb21leCBUZWNobm9sb2d5IENvcnAuCiswY2NkICBUZXJyYVRlYyBFbGVjdHJvbmljIEdtYkgKKwkwMDEyICBQSEFTRSAyNgorCTAwMTMgIFBIQVNFIDI2CisJMDAxNCAgUEhBU0UgMjYKKwkwMDE1ICBGbGFzaCBVcGRhdGUgZm9yIFRlcnJhVGVjIFBIQVNFIDI2CisJMDAyMSAgQ2FtZW8gR3JhYnN0ZXIgMjAwCisJMDAyMyAgTXlzdGlmeSBDbGF3CisJMDAyOCAgQXVyZW9uIDUuMSBNa0lJCisJMDAzMiAgTUlESSBIVUJCTEUKKwkwMDM1ICBNaWRpdGVjaCBQbGF5J24gUm9sbAorCTAwMzYgIENpbmVyZ3kgMjUwIEF1ZGlvCisJMDAzNyAgQ2luZXJneSAyNTAgQXVkaW8KKwkwMDM4ICBDaW5lcmd5IFReMiBEVkItVCBSZWNlaXZlcgorCTAwMzkgIEdyYWJzdGVyIEFWIDQwMAorCTAwM2IgIENpbmVyZ3kgNDAwCisJMDAzYyAgR3JhYnN0ZXIgQVYgMjUwCisJMDA0MiAgQ2luZXJneSBIeWJyaWQgVCBYUworCTAwNDMgIENpbmVyZ3kgVCBYUworCTAwNGUgIENpbmVyZ3kgVCBYUworCTAwNGYgIENpbmVyZ3kgQW5hbG9nIFhTCisJMDA1YyAgQ2luZXJneSBUwrIKKwkwMDY5ICBDaW5lcmd5IFQgWEUgRFZCLVQgUmVjZWl2ZXIKKzBjZDQgIEJhbmcgT2x1ZnNlbgorCTAxMDEgIEJlb2xpbmtQQzIKKzBjZDcgIE5ld0NoaXAgUy5yLmwuCiswY2Q4ICBKUyBEaWdpdGVjaCwgSW5jLgorCTIwMDcgIFNtYXJ0IENhcmQgUmVhZGVyL0pTVFUtOTcwMAorMGNkOSAgSGl0YWNoaSBTaGluIERpbiBDYWJsZSwgTHRkCiswY2RlICBaLUNvbQorCTAwMDEgIE00WS03NTAKKwkwMDAyICBYSS03MjUvNzI2IFByaXNtMi41IDgwMi4xMWIgQWRhcHRlcgorCTAwMDMgIFNhZ2VtIDgwMi4xMWIgRG9uZ2xlCisJMDAwNCAgU2FnZW0gODAyLjExYiBEb25nbGUKKwkwMDA1ICBYSS03MzUgUHJpc20zIDgwMi4xMWIgQWRhcHRlcgorCTAwMDYgIE1lZGlvbiA0MDkwMCA4MDIuMTFiIEFkYXB0ZXIKKwkwMDA4ICBTaXRlY29tIFdpcmVsZXNzIE5ldHdvcmsgQWRhcHRlciAxMDBHKyBXTC0xMjUKKwkwMDA5ICAoWkQxMjExKUlFRUUgODAyLjExYitnIEFkYXB0ZXIKKwkwMDExICBaRDEyMTEKKwkwMDEyICBBUjU1MjMKKwkwMDEzICBBUjU1MjMgZHJpdmVyIChubyBmaXJtd2FyZSkKKwkwMDE0ICBOQiA4MDIuMTFnIFdpcmVsZXNzIExBTiBBZGFwdGVyKDM4ODdBKQorCTAwMTUgIFpvb20gV2lyZWxlc3MtRworCTAwMTYgIE5CIDgwMi4xMWcgV2lyZWxlc3MgTEFOIEFkYXB0ZXIoMzg4N0EpCisJMDAxOCAgTkIgODAyLjExYS9iL2cgV2lyZWxlc3MgTEFOIEFkYXB0ZXIoMzg4N0EpCisJMDAxYSAgWkQxMjExQgorCTAwMWMgIDgwMi4xMWIvZyBXaXJlbGVzcyBOZXR3b3JrIEFkYXB0ZXIKKwkwMDIwICBXaS1GaSBXaXJlbGVzcyBMQU4gQWRhcHRlcgorCTAwMjIgIDgwMi4xMWIvZy9uIFdpcmVsZXNzIE5ldHdvcmsgQWRhcHRlcgorMGNlOSAgcGljbyBUZWNobm9sb2d5CisJMTAwMSAgUGljb1Njb3BlMzIwNAorMGNmMSAgZS1Db25uIEVsZWN0cm9uaWMgQ28uLCBMdGQKKzBjZjIgIEVORSBUZWNobm9sb2d5LCBJbmMuCiswY2YzICBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCisJMDAwMSAgQVI1NTIzCisJMDAwMiAgQVI1NTIzIChubyBmaXJtd2FyZSkKKwkwMDAzICBBUjU1MjMKKwkwMDA0ICBBUjU1MjMgKG5vIGZpcm13YXJlKQorCTAwMDUgIEFSNTUyMworCTAwMDYgIEFSNTUyMyAobm8gZmlybXdhcmUpCiswY2Y0ICBGb210ZXggQ29ycC4KKzBjZjUgIENlbGxpbmsgQ28uLCBMdGQKKzBjZjYgIENvbXB1Y2FibGUgQ29ycC4KKzBjZjcgIGlzaG9uaSBOZXR3b3JrcworMGNmOCAgQ2xhcmlzeXMsIEluYy4KKwkwNzUwICBDbGFyaXRlbC1pNzUwIC0gdnAKKzBjZjkgIENlbnRyYWwgU3lzdGVtIFJlc2VhcmNoIENvLiwgTHRkCiswY2ZhICBJbnZpc28sIEluYy4KKzBjZmMgIE1pbm9sdGEtUU1TLCBJbmMuCiswY2ZmICBTQUZBIE1FRElBIENvLiwgTHRkLgorCTAzMjAgIFNSLTM4ME4KKzBkMDYgIHRlbG9zIEVEViBTeXN0ZW1lbnR3aWNrbHVuZyBHbWJICiswZDA4ICBVVFN0YXJjb20KKwkwNjAyICBEVjAwNyBbc2VyaWFsXQorCTA2MDMgIERWMDA3IFtzdG9yYWdlXQorMGQwYiAgQ29udGVtcG9yYXJ5IENvbnRyb2xzCiswZDBjICBBc3Ryb24gRWxlY3Ryb25pY3MgQ28uLCBMdGQKKzBkMGQgIE1LTmV0IENvcnAuCiswZDBlICBIeWJyaWQgTmV0d29ya3MsIEluYy4KKzBkMGYgIEZlbmcgU2hpbiBDYWJsZSBDby4sIEx0ZAorMGQxMCAgRWxhc3RpYyBOZXR3b3JrcworCTAwMDEgIFN0b3JtUG9ydCAoV0RNKQorMGQxMSAgTWFzcHJvIERlbmtvaCBDb3JwLgorMGQxMiAgSGFuc29sIEVsZWN0cm9uaWNzLCBJbmMuCiswZDEzICBCTUYgQ29ycC4KKzBkMTQgIEFycmF5IENvbW0sIEluYy4KKzBkMTUgIE9uU3RyZWFtIGIudi4KKzBkMTYgIEhpLVRvdWNoIEltYWdpbmcgVGVjaG5vbG9naWVzIENvLiwgTHRkCisJMDAwMSAgUGhvdG9TaHV0dGxlCisJMDAwMiAgUGhvdG8gUHJpbnRlciA3MzAgc2VyaWVzCisJMDAwNCAgUGhvdG8gUHJpbnRlciA2M3hQTC9QUworCTAxMDAgIFBob3RvIFByaW50ZXIgNjN4UEwvUFMKKwkwMTAyICBQaG90byBQcmludGVyIDY0eFBTCisJMDEwMyAgUGhvdG8gUHJpbnRlciA3MzAgc2VyaWVzCisJMDEwNCAgUGhvdG8gUHJpbnRlciA2M3hQTC9QUworCTAxMDUgIFBob3RvIFByaW50ZXIgNjR4UFMKKwkwMjAwICBQaG90byBQcmludGVyIDY0eERMCiswZDE3ICBOQUxURUMsIEluYy4KKzBkMTggIGNvYVhtZWRpYQorMGQxOSAgSGFuayBDb25uZWN0aW9uIEluZHVzdHJpYWwgQ28uLCBMdGQKKzBkMzIgIExlbyBIdWkgRWxlY3RyaWMgV2lyZSAmIENhYmxlIENvLiwgTHRkCiswZDMzICBBaXJTcGVhaywgSW5jLgorMGQzNCAgUmVhcmRlbiBTdGVlbCBUZWNobm9sb2dpZXMKKzBkMzUgIERhaCBLdW4gQ28uLCBMdGQKKzBkM2EgIFBvc2lmbGV4IFRlY2hub2xvZ2llcywgSW5jLgorMGQzYyAgU3JpIENhYmxlIFRlY2hub2xvZ3ksIEx0ZAorMGQzZCAgVGFuZ3RvcCBUZWNobm9sb2d5IENvLiwgTHRkCisJMDAwMSAgSElEIEtleWJvYXJkCiswZDNlICBGaXRjb20sIGluYy4KKzBkM2YgIE1UUyBTeXN0ZW1zIENvcnAuCiswZDQwICBBc2NvciwgSW5jLgorMGQ0MSAgVGEgWXVuIFRlcm1pbmFscyBJbmR1c3RyaWFsIENvLiwgTHRkCiswZDQyICBGdWxsIERlciBDby4sIEx0ZAorMGQ0NiAgS29iaWwgU3lzdGVtcyBHbWJICisJMjAxMiAgS0FBTiBTdGFuZGFyZCBQbHVzIChTbWFydGNhcmQgcmVhZGVyKQorCTMwMDMgIG1JRGVudGl0eSBMaWdodCAvIEtBQU4gU0lNIElJSQorCTQwMDAgIG1JRGVudGl0eSAobWFzcyBzdG9yYWdlKQorCTQwMDEgIG1JRGVudGl0eSBCYXNpYy9DbGFzc2ljIChjb21wb3NpdGUgZGV2aWNlKQorCTQwODEgIG1JRGVudGl0eSBCYXNpYy9DbGFzc2ljIChpbnN0YWxsYXRpb25sZXNzKQorMGQ0OSAgTWF4dG9yCisJMzAwMCAgRHJpdmUKKwkzMDEwICAzMDAwTEUgRHJpdmUKKwkzMTAwICBIaS1TcGVlZCBVU0ItSURFIEJyaWRnZSBDb250cm9sbGVyCisJNTAwMCAgNTAwMFhUIERyaXZlCisJNTAxMCAgNTAwMExFIERyaXZlCisJNTAyMCAgTW9iaWxlIEhhcmQgRGlzayBEcml2ZQorCTcwMDAgIE9uZVRvdWNoCisJNzAxMCAgT25lVG91Y2gKKzBkNGEgIE5GIENvcnAuCiswZDRiICBHcmFwZSBTeXN0ZW1zLCBJbmMuCiswZDRjICBUZWRhcyBBRworMGQ0ZCAgQ29oZXJlbnQsIEluYy4KKzBkNGUgIEFnZXJlIFN5c3RlbXMgTmV0aGVybGFuZCBCVgorCTA0N2EgIFdMQU4gQ2FyZAorCTEwMDAgIFdpcmVsZXNzIENhcmQgTW9kZWwgMDgwMQorCTEwMDEgIFdpcmVsZXNzIENhcmQgTW9kZWwgMDgwMgorMGQ0ZiAgRUFEUyBBaXJidXMgRnJhbmNlCiswZDUwICBDbGV3YXJlIEdtYkgKKwkwMDExICBVU0ItVGVtcDIgVGhlcm1vbWV0ZXIKKzBkNTEgIFZvbGV4IChBc2lhKSBQdGUuLCBMdGQKKzBkNTMgIEhNSSBDby4sIEx0ZAorMGQ1NCAgSG9sb24gQ29ycC4KKzBkNTUgIEFTS0EgVGVjaG5vbG9naWVzLCBJbmMuCiswZDU2ICBBVkxBQiBUZWNobm9sb2d5LCBJbmMuCiswZDU3ICBTb2xvbW9uIE1pY3JvdGVjaCwgTHRkCiswZDVjICBCZWxraW4KKwlhMDAyICBGNUQ2MDUwIDgwMi4xMWIgQWRhcHRlcgorMGQ1ZSAgTXlhY29tLCBMdGQKKwkyMzQ2ICBCVCBEaWdpdGFsIEFjY2VzcyBhZGFwdGVyCiswZDVmICBDU0ksIEluYy4KKzBkNjAgIElWTCBUZWNobm9sb2dpZXMsIEx0ZAorMGQ2MSAgTWVpbHUgRWxlY3Ryb25pY3MgKFNoZW56aGVuKSBDby4sIEx0ZAorMGQ2MiAgRGFyZm9uIEVsZWN0cm9uaWNzIENvcnAuCisJMDAwMyAgU21hcnRjYXJkIFJlYWRlcgorCTAwMDQgIEZpbHRlciBEcml2ZXIKKwkwMzA2ICBNNTMwIE1vdXNlCisJMDgwMCAgTWFnaWMgV2hlZWwKKwkyMDIxICBBTTgwNSBLZXlib2FyZAorCTIwMjYgIFRFQ09NIEJsdWV0b290aCBEZXZpY2UKKwlhMTAwICBCZW5xIE1vdXNlCiswZDYzICBGcml0eiBHZWdhdWYgQUcKKzBkNjQgIERYRyBUZWNobm9sb2d5IENvcnAuCisJMDEwNSAgRHVhbCBNb2RlIERpZ2l0YWwgQ2FtZXJhIDEuM00KKwkwMTA3ICBIb3J1cyBNVC00MDkgQ2FtZXJhCisJMDEwOCAgRHVhbCBNb2RlIERpZ2l0YWwgQ2FtZXJhCisJMDIwMiAgRHVhbCBNb2RlIFZpZGVvIENhbWVyYSBEZXZpY2UKKwkwMzAzICBEWEctMzA1ViBDYW1lcmEKKwkxMDAxICBTaVBpeCBTdHlsZWNhbS9VTUFYIEFzdHJhUGl4IDMyMHMKKwkxMDAyICBGYXNoaW9uIENhbSAwMSBEdWFsLU1vZGUgRFNDIChWaWRlbyBDYW1lcmEpCisJMTAwMyAgRmFzaGlvbiBDYW0gRHVhbC1Nb2RlIERTQyAoQ29udHJvbGxlcikKKwkxMDIxICBELUxpbmsgRFNDIDM1MEYKKwkxMjA4ICBEdWFsIE1vZGUgU3RpbGwgQ2FtZXJhIERldmljZQorCTIyMDggIE1hc3MgU3RvcmFnZQorCTMxMDUgIER1YWwgTW9kZSBEaWdpdGFsIENhbWVyYSBEaXNrCisJMzEwOCAgRGlnaWNhbSBNYXNzIFN0b3JhZ2UgRGV2aWNlCiswZDY1ICBLTUpQIENvLiwgTHRkCiswZDY2ICBUTVQKKzBkNjcgIEFkdmFuZXQsIEluYy4KKzBkNjggIFN1cGVyIExpbmsgRWxlY3Ryb25pY3MgQ28uLCBMdGQKKzBkNjkgIE5TSQorMGQ2YSAgTWVnYXBvd2VyIEludGVybmF0aW9uYWwgQ29ycC4KKzBkNmIgIEFuZC1PciBMb2dpYworMGQ3MCAgVHJ5IENvbXB1dGVyIENvLiwgTHRkCiswZDcxICBIaXJha2F3YSBIZXd0ZWNoIENvcnAuCiswZDcyICBXaW5tYXRlIENvbW11bmljYXRpb24sIEluYy4KKzBkNzMgIEhpdCdzIENvbW11bmljYXRpb25zLCBJbmMuCiswZDc2ICBNRlAgS29yZWEsIEluYy4KKzBkNzcgIFBvd2VyIFNlbnRyeS9OZXdwb2ludAorMGQ3OCAgSmFwYW4gRGlzdHJpYnV0b3IgQ29ycC4KKzBkN2EgIE1BUlggRGF0ZW50ZWNobmlrIEdtYkgKKzBkN2IgIFdlbGxjbyBUZWNobm9sb2d5IENvLiwgTHRkCiswZDdjICBUYWl3YW4gTGluZSBUZWsgRWxlY3Ryb25pYyBDby4sIEx0ZAorMGQ3ZCAgUGhpc29uIEVsZWN0cm9uaWNzIENvcnAuCisJMDEwMCAgUFMxMDAxLzEwMTEvMTAwNi8xMDI2IEZsYXNoIERpc2sKKwkwMTEwICBHaWdhYnl0ZSBGbGV4RHJpdmUKKwkwMTIwICBEaXNrIFBybyA2NE1CCisJMDEyNCAgR0lHQUJZVEUgRGlzaworCTAyNDAgIEkvTy1NYWdpYy9UcmFuc2NlbmQgNi1pbi0xIENhcmQgUmVhZGVyCisJMTEwZSAgTkVDIHVQRDcyMDEyMS8xMzAgVVNCLUFUQS9BVEFQSSBCcmlkZ2UKKwkxMjQwICBBcGFjZXIgNi1pbi0xIENhcmQgUmVhZGVyIDIuMAorCTEyNzAgIFdvbHZlcmluZSBTaXhQYWMgNjAwMAorCTEzMDAgIEZsYXNoIERpc2sKKwkxMzIwICBQUzIwMzEgRmxhc2ggRGlzaworCTE0MDAgIEF0dGFjaGUgMjU2TUIgVVNCIDIuMCBGbGFzaCBEcml2ZQorCTE0MjAgIFBTMjA0NCBQZW4gRHJpdmUKKwkxNDcwICBWb3NvbmljIFgncy1Ecml2ZSBJSSsgVlAyMTYwCisJMTkwMCAgVVNCIFRodW1iIERyaXZlCiswZDdlICBBbWVyaWNhbiBDb21wdXRlciAmIERpZ2l0YWwgQ29tcG9uZW50cworCTI1MDcgIEhpLVNwZWVkIFVTQi10by1JREUgQnJpZGdlIENvbnRyb2xsZXIKKwkyNTE3ICBIaS1TcGVlZCBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJMjVjNyAgSGktU3BlZWQgVVNCLXRvLUlERSBCcmlkZ2UgQ29udHJvbGxlcgorMGQ3ZiAgRXNzZW50aWFsIFJlYWxpdHkgTExDCiswZDgwICBILlIuIFNpbHZpbmUgRWxlY3Ryb25pY3MsIEluYy4KKzBkODEgIFRlY2hub1Zpc2lvbgorMGQ4MyAgVGhpbmsgT3V0c2lkZSwgSW5jLgorMGQ4OSAgT3ogU29mdHdhcmUKKzBkOGEgIEtpbmcgSmltIENvLiwgTHRkCisJMDEwMSAgVEVQUkEgUFJPCiswZDhiICBBc2NvbSBUZWxlY29tbXVuaWNhdGlvbnMsIEx0ZAorMGQ4YyAgQy1NZWRpYSBFbGVjdHJvbmljcywgSW5jLgorCTAwMDEgIEF1ZGlvIERldmljZQorCTAwMDIgIENvbXBvc2l0ZSBEZXZpY2UKKwkwMDAzICBTb3VuZCBEZXZpY2UKKwkwMDA2ICBTdG9ybSBIUC1VU0I1MDAgNS4xIEhlYWRzZXQKKwkwMDBjICBBdWRpbyBBZGFwdGVyCisJMDAwZCAgQ29tcG9zaXRlIERldmljZQorCTAwMGUgIEF1ZGlvIEFkYXB0ZXIgKFBsYW5ldCBVUC0xMDAsIEdlbml1cyBHLVRhbGspCisJMDEwMiAgQ00xMDYgTGlrZSBTb3VuZCBEZXZpY2UKKwkwMTAzICBUdXJ0bGUgQmVhY2ggQXVkaW8gQWR2YW50YWdlIE1pY3JvCisJMDIwMSAgQ002NTAxCisJNTAwMCAgTWFzcyBTdG9yYWdlIENvbnRyb2xsZXIKKwk1MjAwICBNYXNzIFN0b3JhZ2UgQ29udHJvbGxlcigwRDhDLDUyMDApCisJYjIxMyAgVVNCIFBob25lIENNMTA5IChha2EgQ1QyMDAwLFZQVDEwMDApCiswZDhkICBQcm9tb3Rpb24gJiBEaXNwbGF5IFRlY2hub2xvZ3ksIEx0ZAorCTAyMzQgIFYtMjM0IENvbXBvc2l0ZSBEZXZpY2UKKwkwNTUwICBWLTU1MCBDb21wb3NpdGUgRGV2aWNlCisJMDU1MSAgVi01NTEgQ29tcG9zaXRlIERldmljZQorCTA1NTIgIFYtNTUyIENvbXBvc2l0ZSBEZXZpY2UKKwkwNjUxICBWLTY1MSBDb21wb3NpdGUgRGV2aWNlCisJMDY1MiAgVi02NTIgQ29tcG9zaXRlIERldmljZQorCTA2NTMgIFYtNjUzIENvbXBvc2l0ZSBEZXZpY2UKKwkwNjU0ICBWLTY1NCBDb21wb3NpdGUgRGV2aWNlCisJMDY1NSAgVi02NTUgQ29tcG9zaXRlIERldmljZQorCTA2NTYgIFYtNjU2IENvbXBvc2l0ZSBEZXZpY2UKKwkwNjU3ICBWLTY1NyBDb21wb3NpdGUgRGV2aWNlCisJMDY1OCAgVi02NTggQ29tcG9zaXRlIERldmljZQorCTA2NTkgIFYtNjU5IENvbXBvc2l0ZSBEZXZpY2UKKwkwNjYwICBWLTY2MCBDb21wb3NpdGUgRGV2aWNlCisJMDY2MSAgVi02NjEgQ29tcG9zaXRlIERldmljZQorCTA2NjIgIFYtNjYyIENvbXBvc2l0ZSBEZXZpY2UKKwkwODUwICBWLTg1MCBDb21wb3NpdGUgRGV2aWNlCisJMDg1MSAgVi04NTEgQ29tcG9zaXRlIERldmljZQorCTA4NTIgIFYtODUyIENvbXBvc2l0ZSBEZXZpY2UKKwkwOTAxICBWLTkwMSBDb21wb3NpdGUgRGV2aWNlCisJMDkwMiAgVi05MDIgQ29tcG9zaXRlIERldmljZQorCTA5MDMgIFYtOTAzIENvbXBvc2l0ZSBEZXZpY2UKKwk0NzU0ICBWb3lhZ2VyIERNUCBDb21wb3NpdGUgRGV2aWNlCisJYmIwMCAgQmxvb21iZXJnIENvbXBvc2l0ZSBEZXZpY2UKKwliYjAxICBCbG9vbWJlcmcgQ29tcG9zaXRlIERldmljZQorCWJiMDIgIEJsb29tYmVyZyBDb21wb3NpdGUgRGV2aWNlCisJYmIwMyAgQmxvb21iZXJnIENvbXBvc2l0ZSBEZXZpY2UKKwliYjA0ICBCbG9vbWJlcmcgQ29tcG9zaXRlIERldmljZQorCWJiMDUgIEJsb29tYmVyZyBDb21wb3NpdGUgRGV2aWNlCisJZmZmZSAgR2xvYmFsIFR1bmVyIENvbXBvc2l0ZSBEZXZpY2UKKwlmZmZmICBWb3lhZ2VyIERNUCBDb21wb3NpdGUgRGV2aWNlCiswZDhlICBHbG9iYWwgU3VuIFRlY2hub2xvZ3ksIEluYy4KKwkwMTYzICA4MDIuMTFnIDU0IE1icHMgV2lyZWxlc3MgRG9uZ2xlCisJMTYyMSAgODAyLjExYiBXaXJlbGVzcyBBZGFwdGVyCisJMzc2MiAgODAyLjExZyBXaXJlbGVzcyBNaW5pIGFkYXB0ZXIKKwkzNzYzICA4MDIuMTFnIFdpcmVsZXNzIGRvbmdsZQorCTcxMDAgIDgwMi4xMWIgQWRhcHRlcgorCTcxMTAgIFdMLTIxMAorCTc4MDEgIEFSNTUyMworCTc4MDIgIEFSNTUyMyAobm8gZmlybXdhcmUpCisJNzgxMSAgQVI1NTIzCisJNzgxMiAgQVI1NTIzIChubyBmaXJtd2FyZSkKKwk3YTAxICBQUklTTTI1IDgwMi4xMWIgQWRhcHRlcgorMGQ4ZiAgUGl0bmV5IEJvd2VzCiswZDkwICBTdXJlLUZpcmUgRWxlY3RyaWNhbCBDb3JwLgorMGQ5NiAgU2thbmhleCBUZWNobm9sb2d5LCBJbmMuCisJMDAwMCAgSmVub3B0aWsgSkQzNTAgdmlkZW8KKwkzMzAwICBTWDMzMHogQ2FtZXJhCisJNDEwMCAgU1g0MTB6IENhbWVyYQorCTQxMDIgIE1EIDk3MDAgQ2FtZXJhCisJNDEwNCAgSmVub3B0aWsgSkQtNDEwMHozcworCTQxMGEgIE1lZGlvbiA5ODAxL05vdmF0ZWNoIFNYLTQxMHoKKwk1MjAwICBTWC01MjB6IENhbWVyYQorMGQ5NyAgU2FudGEgQmFyYmFyYSBJbnN0cnVtZW50IEdyb3VwCisJMDAwMSAgU0JJRyBBc3Ryb25vbXkgQ2FtZXJhICh3aXRob3V0IGZpcm13YXJlKQorCTAxMDEgIFNCSUcgQXN0cm9ub215IENhbWVyYSAod2l0aCBmaXJtd2FyZSkKKzBkOTggIE1hcnMgU2VtaWNvbmR1Y3RvciBDb3JwLgorCTAzMDAgIEF2YXlhIFdpcmVsZXNzIENhcmQKKzBkOTkgIFRyYXplciBUZWNobm9sb2dpZXMsIEluYy4KKzBkOWEgIFJUWCBUZWxlY29tIEFTCisJMDAwMSAgQmx1ZXRvb3RoIERldmljZQorMGQ5YiAgVGF0IFNoaW5nIEVsZWN0cmljYWwgQ28uCiswZDljICBDaGVlIENoZW4gSGktVGVjaG5vbG9neSBDby4sIEx0ZAorMGQ5ZCAgU2Fud2EgU3VwcGx5LCBJbmMuCiswZDllICBBdmF5YQorCTAzMDAgIFdpcmVsZXNzIENhcmQKKzBkOWYgIFBvd2VyY29tIENvLiwgTHRkCiswZGEwICBEYW5nZXIgUmVzZWFyY2gKKzBkYTEgIFN1emhvdSBQZXRlcidzIFByZWNpc2UgSW5kdXN0cmlhbCBDby4sIEx0ZAorMGRhMiAgTGFuZCBJbnN0cnVtZW50cyBJbnRlcm5hdGlvbmFsLCBMdGQKKzBkYTMgIE5pcHBvbiBFbGVjdHJvLVNlbnNvcnkgRGV2aWNlcyBDb3JwLgorMGRhNCAgUG9sYXIgRWxlY3RybyBPWQorCTAwMDEgIEludGVyZmFjZQorMGRhNyAgSU9HZWFyLCBJbmMuCiswZGE4ICBzb2Z0RFNQIENvLiwgTHRkCisJMDAwMSAgU0RTIDIwMEEgT3NjaWxsb3Njb3BlCiswZGFiICBDdWJpZyBHcm91cAorCTAxMDAgIERWUi9DVlItTTE0MCBNUDMgUGxheWVyCiswZGFkICBXZXN0b3ZlciBTY2llbnRpZmljCiswZGIwICBNaWNybyBTdGFyIEludGVybmF0aW9uYWwKKwkxMDIwICBQQzJQQyBXTEFOIENhcmQKKwkxOTY3ICBCbHVldG9vdGggRG9uZ2xlCisJNDAxMSAgTWVkaW9uIEZsYXNoIFhMIFYyLjAgQ2FyZCBSZWFkZXIKKwk0NjAwICA4MDIuMTFiL2cgVHVyYm8gV2lyZWxlc3MgQWRhcHRlcgorCTU1MDEgIE1hc3MgU3RvcmFnZSBEZXZpY2UKKwk1NTAyICBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJNTUxMyAgTVAzIFBsYXllcgorCTU1MTUgIE1QMyBQbGF5ZXIKKwk1NTE2ICBNUDMgUGxheWVyCisJNjgyMyAgVUIxMUIvTVMtNjgyMyA4MDIuMTFiIFdpLUZpIGFkYXB0ZXIKKwk2ODI2ICBJRUVFIDgwMi4xMWcgV2lyZWxlc3MgTmV0d29yayBBZGFwdGVyCisJNjg1NSAgQmx1ZXRvb3RoIERldmljZQorCTY4NjEgIE1TSS02ODYxIDgwMi4xMWcgV2lGaSBhZGFwdGVyCisJNjg2NSAgUlQyNTcwCisJNjg2OSAgUlQyNTcwCisJNjg3NCAgUlQyNTczCisJNjg3NyAgUlQyNTczCisJNjg4MSAgQmx1ZXRvb3RoIENsYXNzIEkgRURSIERldmljZQorCTY4OGEgIEJsdWV0b290aCBDbGFzcyBJIEVEUiBEZXZpY2UKKwk2OTcwICBCbHVldG9vdGggYWRhcHRlcgorCTY5N2EgIEJsdWV0b290aCBEb25nbGUKKwk2OTgyICBNZWRpb24gRmxhc2ggWEwgQ2FyZCBSZWFkZXIKKwlhODYxICBSVDI1NzMKKwlhODc0ICBSVDI1NzMKKwlhOTcwICBCbHVldG9vdGggZG9uZ2xlCisJYTk3YSAgQmx1ZXRvb3RoIEVEUiBEZXZpY2UKKwliOTcwICBCbHVldG9vdGggRURSIERldmljZQorCWI5N2EgIEJsdWV0b290aCBFRFIgRGV2aWNlCiswZGIxICBXZW4gVGUgRWxlY3Ryb25pY3MgQ28uLCBMdGQKKzBkYjIgIFNoaWFuIEh3aSBQbHVnIFBhcnRzLCBQbGFzdGljIEZhY3RvcnkKKzBkYjMgIFRla3JhbSBUZWNobm9sb2d5IENvLiwgTHRkCiswZGI0ICBDaHVuZyBGdSBDaGVuIFllaCBFbnRlcnByaXNlIENvcnAuCiswZGI3ICBFTENPTiBTeXN0ZW10ZWNobmlrCisJMDAwMiAgR29sZHBmZWlsIFAtTEFOCiswZGJlICBKaXVoIFNoaXVoIFByZWNpc2lvbiBJbmR1c3RyeSBDby4sIEx0ZAorMGRiZiAgUXVpayBUZWNoIFNvbHV0aW9ucworCTAwMDIgIFNtYXJ0RG9uZ2xlIFNlY3VyaXR5IEtleQorCTAyMDAgIEhERCBTdG9yYWdlIFNvbHV0aW9uCisJMDIxYiAgVVNCLTIuMCBJREUgQWRhcHRlcgorCTAzMDAgIFN0b3JhZ2UgQWRhcHRlcgorCTAzMzMgIFN0b3JhZ2UgQWRhcHRlcgorCTA3MDcgIFpJViBEcml2ZQorMGRjMCAgR3JlYXQgTm90aW9ucworMGRjMSAgVGFtYWdhd2EgU2Vpa2kgQ28uLCBMdGQKKzBkYzMgIEF0aGVuYSBTbWFydGNhcmQgU29sdXRpb25zLCBJbmMuCisJMDgwMSAgQVNFRHJpdmUgSUlJCisJMDgwMiAgQVNFRHJpdmUgSUlJZQorCTExMDQgIEFTRURyaXZlIElJSWUgS0IKKwkxNzAxICBBU0VLZXkKKwkxNzAyICBBU0VLZXkKKzBkYzQgIE1hY3Bvd2VyIFBlcmlwaGVyYWxzLCBMdGQKKwkwMDQwICBNYXNzIFN0b3JhZ2UgRGV2aWNlCisJMDA0MSAgTWFzcyBTdG9yYWdlIERldmljZQorCTAwNDIgIE1hc3MgU3RvcmFnZSBEZXZpY2UKKwkwMTAxICBIaS1TcGVlZCBNYXNzIFN0b3JhZ2UgRGV2aWNlCiswZGM1ICBTREsgQ28uLCBMdGQKKzBkYzYgIFByZWNpc2lvbiBTcXVhcmVkIFRlY2hub2xvZ3kgQ29ycC4KKzBkYzcgIEZpcnN0IENhYmxlIExpbmUsIEluYy4KKzBkY2QgIE5ldHdvcmtGYWIgQ29ycC4KKwkwMDAxICBSZW1vdGUgSW50ZXJmYWNlIEFkYXB0ZXIKKwkwMDAyICBIaWdoIEJhbmR3aWR0aCBDb2RlYworMGRkMCAgQWNjZXNzIFNvbHV0aW9ucworCTEwMDIgIFRyaXBsZSBUYWxrIFNwZWVjaCBTeW50aGVzaXplcgorMGRkMSAgQ29udGVrIEVsZWN0cm9uaWNzIENvLiwgTHRkCiswZGQyICBQb3dlciBRdW90aWVudCBJbnRlcm5hdGlvbmFsIENvLiwgTHRkCisJMDAwMyAgTWFzcyBTdG9yYWdlIChQKQorMGRkMyAgTWVkaWFRCiswZGQ0ICBDdXN0b20gRW5naW5lZXJpbmcgU1BBCiswZGQ1ICBDYWxpZm9ybmlhIE1pY3JvIERldmljZXMKKzBkZDcgIEtvY29tIENvLiwgTHRkCiswZGQ4ICBOZXRhYyBUZWNobm9sb2d5IENvLiwgTHRkCisJMTA2MCAgVVNCLUNGLUNhcmQKKwllMDA3ICBPbmx5RGlzayBVMjIyIFBlbmRyaXZlCiswZGQ5ICBIaWdoU3BlZWQgU3VyZmluZworMGRkYSAgSW50ZWdyYXRlZCBDaXJjdWl0IFNvbHV0aW9uLCBJbmMuCisJMDAwMSAgTXVsdGktQ2FyZCBSZWFkZXIgNmluMQorCTAwMDIgIE11bHRpLUNhcmQgUmVhZGVyIDdpbjEKKwkwMDAzICBGbGFzaCBEaXNrCisJMDAwNSAgSW50ZXJuYWwgTXVsdGktQ2FyZCBSZWFkZXIgNmluMQorCTAwMDggIFNEIHNpbmdsZSBjYXJkIHJlYWRlcgorCTAwMDkgIE1TIHNpbmdsZSBjYXJkIHJlYWRlcgorCTAwMGEgIE1TK1NEIER1YWwgQ2FyZCBSZWFkZXIKKwkwMDBiICBTTSBzaW5nbGUgY2FyZCByZWFkZXIKKwkwMTAxICBBbGwtSW4tT25lIENhcmQgUmVhZGVyCisJMDEwMiAgQWxsLUluLU9uZSBDYXJkIFJlYWRlcgorCTAzMDEgIE1QMyBQbGF5ZXIKKwkwMzAyICBNdWx0aS1DYXJkIE1QMyBQbGF5ZXIKKwkxMDAxICBNdWx0aS1GbGFzaCBEaXNrCisJMjAwMSAgTXVsdGktQ2FyZCBSZWFkZXIKKwkyMDAyICBRMDE4IGRlZmF1bHQgUElECisJMjAwMyAgTXVsdGktQ2FyZCBSZWFkZXIKKwkyMDA1ICBEYXRhbHV4IERMWC0xNjExIDE2aW4xIENhcmQgUmVhZGVyCisJMjAwNiAgQWxsLUluLU9uZSBDYXJkIFJlYWRlcgorCTIwMDcgIFVTQiB0byBBVEFQSSBicmlkZ2UKKwkyMDA4ICBBbGwtSW4tT25lIENhcmQgUmVhZGVyCisJMjAxMyAgU0QvTVMgQ29tYm8gQ2FyZCBSZWFkZXIKKwkyMDE0ICBTRC9NUyBTaW5nbGUgQ2FyZCBSZWFkZXIKKwkyMDIzICBjYXJkIHJlYWRlciBTRC9NUyBERU1PIGJvYXJkIHdpdGggSUNTSSBicmFuZCBuYW1lIChNYXNrUk9NIHZlcnNpb24pCisJMjAyNCAgY2FyZCByZWFkZXIgU0QvTVMgREVNTyBib2FyZCB3aXRoIEdlbmVyaWMgYnJhbmQgbmFtZSAoTWFza1JPTSB2ZXJzaW9uKQorCTIwMjYgIFVTQjIuMCBDYXJkIFJlYWRlcgorCTIwMjcgIFVTQiAyLjAgQ2FyZCBSZWFkZXIKKwkyMzE1ICBVRkQgTVAzIHBsYXllciAobW9kZWwgMikKKwkyMzE4ICBVRkQgTVAzIHBsYXllciAobW9kZWwgMSkKKwkyMzIxICBVRkQgTVAzIHBsYXllcgorMGRkYiAgVGFtYXJhY2ssIEluYy4KKzBkZGQgIERhdGVsaW5rIFRlY2hub2xvZ3kgQ28uLCBMdGQKKzBkZGUgIFViaWNvbSwgSW5jLgorMGRlMCAgQkQgQ29uc3VtZXIgSGVhbHRoY2FyZQorMGRlYSAgVVRFQ0ggRWxlY3Ryb25pYyAoRC5HLikgQ28uLCBMdGQuCiswZGVkICBOb3Zhc29uaWNzCiswZGVlICBMaWZldGltZSBNZW1vcnkgUHJvZHVjdHMKKwk0MDEwICBTdG9yYWdlIEFkYXB0ZXIKKzBkZWYgIEZ1bGwgUmlzZSBFbGVjdHJvbmljIENvLiwgTHRkCiswZGY2ICBTaXRlY29tIEV1cm9wZSBCLlYuCisJMDAwMSAgQy1NZWRpYSBWT0lQIERldmljZQorCTAwMDQgIEJsdWV0b290aCAyLjAgQWRhcHRlciAxMDBtCisJMDAwNyAgQmx1ZXRvb3RoIDIuMCBBZGFwdGVyIDEwbQorCTAwMGIgIEJsdWV0b290aCAyLjAuVVNCIEFkYXB0ZXIgREZVCisJMDAwZCAgV0wtMTY4IFdpcmVsZXNzIE5ldHdvcmsgQWRhcHRlciA1NGcKKwkwMDE3ICBXTC0xODIKKwkwMDE5ICBCbHVldG9vdGggMi4wIGFkYXB0ZXIgMTBtIENOLTUxMnYyIDAwMQorCTAwMWEgIEJsdWV0b290aCAyLjAgYWRhcHRlciAxMDBtIENOLTUyMXYyIDAwMQorCTA2MWMgIExOLTAyOAorCTIxZjQgIDQ0IFN0IEJsdWV0b290aCBEZXZpY2UKKwkyMjAwICBTaXRlY29tIGJsdWV0b290aDIuMCBjbGFzcyAyIGRvbmdsZSBDTi01MTIKKwkyMjA4ICBTaXRlY29tIGJsdWV0b290aDIuMCBjbGFzcyAyIGRvbmdsZSBDTi01MjAKKwkyMjA5ICBTaXRlY29tIGJsdWV0b290aDIuMCBjbGFzcyAxIGRvbmdsZSBDTi01MjEKKwk5MDcxICB6ZDEyMTEgODAyLjExZyBBZGFwdGVyCisJOTA3NSAgWkQxMjExQgorCTkwYWMgIFdMLTE3MgorCTk3MTIgIFdMLTExMyByZXYgMgorMGRmNyAgTW9iaWxlIEFjdGlvbiBUZWNobm9sb2d5LCBJbmMuCisJMDYyMCAgTUEtNjIwIEluZnJhcmVkIEFkYXB0ZXIKKwkwNzAwICBNQS03MDAgQmx1ZXRvb3RoIEFkYXB0ZXIKKwkwNzIwICBNQS03MjAgQmx1ZXRvb3RoIEFkYXB0ZXIKKwkwNzIyICBCbHVldG9vdGggRG9uZ2xlCisJMDgwMCAgRGF0YSBDYWJsZQorCTA4MjAgIERhdGEgQ2FibGUKKwkxODAwICBHZW5lcmljIENhcmQgUmVhZGVyCisJMTgwMiAgQ2FyZCBSZWFkZXIKKzBkZmEgIFRveW8gQ29tbXVuaWNhdGlvbiBFcXVpcG1lbnQgQ28uLCBMdGQKKzBkZmMgIEdlbmVyYWxUb3VjaCBUZWNobm9sb2d5IENvLiwgTHRkCisJMDAwMSAgVG91Y2hzY3JlZW4KKzBlMDMgIE5pcHBvbiBTeXN0ZW13YXJlIENvLiwgTHRkCiswZTA4ICBXaW5iZXN0IFRlY2hub2xvZ3kgQ28uLCBMdGQKKzBlMGMgIEdlc3l0ZWMKKwkwMTAxICBMb25VU0IgTG9uVGFsayBOZXR3b3JrIEFkYXB0ZXIKKzBlMTYgIEpNVGVrLCBMTEMKKzBlMTcgIFdhbGV4IEVsZWN0cm9uaWMsIEx0ZAorMGUxYiAgQ3Jld2F2ZQorMGUyMSAgQ293b24gU3lzdGVtcywgSW5jLgorCTAzMDAgIGlBdWRpbyBDVzIwMAorCTA0MDAgIE1QMyBQbGF5ZXIKKwkwNTEwICBpQXVkaW8gWDUKKwkwNTEzICBpQXVkaW8gWDUsIHNpZGUgVVNCIHBvcnQKKwkwNTIwICBpQXVkaW8gTTUKKwkwNzAwICBpQXVkaW8gVTMKKzBlMjIgIFN5bWJpYW4gTHRkLgorMGUyMyAgTGlvdSBZdWFuZSBFbnRlcnByaXNlIENvLiwgTHRkCiswZTI1ICBWaW5DaGlwIFN5c3RlbXMsIEluYy4KKzBlMjYgIEotUGhvbmUgRWFzdCBDby4sIEx0ZAorMGUzMCAgSGVhcnRNYXRoIExMQworMGUzNCAgTWljcm8gQ29tcHV0ZXIgQ29udHJvbCBDb3JwLgorMGUzNSAgM1BlYSBUZWNobm9sb2dpZXMsIEluYy4KKzBlMzYgIFRpZVBpZSBlbmdpbmVlcmluZworCTAwMDggIEhhbmR5c2NvcGUgSFMzCisJMDAwOSAgSGFuZHlzY29wZSBIUzMgKGJyKQorCTAwMGEgIEhhbmR5c2NvcGUgSFM0CisJMDAwYiAgSGFuZHlzY29wZSBIUzQgKGJyKQorCTAwMGUgIEhhbmR5c2NvcGUgSFM0IERpZmYKKwkwMDBmICBIYW5keXNjb3BlIEhTNCBEaWZmIChicikKKwkwMDEwICBIYW5keXNjb3BlIEhTMgorCTAwMTggIEhhbmR5cHJvYmUgSFAyCisJMDA0MiAgVGllUGllU0NPUEUgSFM4MDEKKwkwMGZkICBVU0IgVG8gUGFyYWxsZWwgYWRhcHRlcgorCTAwZmUgIFVTQiBUbyBQYXJhbGxlbCBhZGFwdGVyCiswZTM4ICBTdHJhdGl0ZWMsIEluYy4KKzBlMzkgIFNtYXJ0IE1vZHVsYXIgVGVjaG5vbG9naWVzLCBJbmMuCisJMDEzNyAgQmx1ZXRvb3RoIERldmljZQorMGUzYSAgTmVvc3RhciBUZWNobm9sb2d5IENvLiwgTHRkCisJMTEwMCAgQ1ctMTEwMCBXaXJlbGVzcyBOZXR3b3JrIEFkYXB0ZXIKKzBlM2IgIE1hbnNlbGxhLCBMdGQKKzBlNDEgIExpbmU2LCBJbmMuCisJNDI1MCAgQmFzc1BPRHh0CisJNDI1MiAgQmFzc1BPRHh0IFBybworCTQ2NDIgIEJhc3NQT0R4dCBMaXZlCisJNDY1MCAgUE9EeHQgTGl2ZQorCTQ3NTAgIEd1aXRhclBvcnQKKwk1MDQ0ICBQT0R4dAorCTUwNTAgIFBPRHh0IFBybworCTUzNGQgIFNlYU1vbmtleQorMGU0NCAgU3VuLVJpc2VmdWwgVGVjaG5vbG9neSBDby4sIEx0ZC4KKzBlNDggIEp1bGlhIENvcnAuLCBMdGQKKwkwMTAwICBDYXJkUHJvIFNtYXJ0Q2FyZCBSZWFkZXIKKzBlNGEgIFNoZW56aGVuIEJhbyBIaW5nIEVsZWN0cmljIFdpcmUgJiBDYWJsZSBNZnIuIENvLgorMGU0YyAgUmFkaWNhIEdhbWVzLCBMdGQKKzBlNTUgIFNwZWVkIERyYWdvbiBNdWx0aW1lZGlhLCBMdGQKKwkxMTBiICBNUzMzMDNIIFVTQi10by1TZXJpYWwgQnJpZGdlCiswZTU2ICBLaW5nc3RvbiBUZWNobm9sb2d5IENvbXBhbnksIEluYy4KKwk2MDIxICBLLVBFWCAxMDAKKzBlNWEgIEFjdGl2ZSBDby4sIEx0ZAorMGU1YiAgVW5pb24gUG93ZXIgSW5mb3JtYXRpb24gSW5kdXN0cmlhbCBDby4sIEx0ZAorMGU1YyAgQml0bGFuZCBJbmZvcm1hdGlvbiBUZWNobm9sb2d5IENvLiwgTHRkCisJNjExOCAgTENEIERldmljZQorCTYxMTkgIHJlbW90ZSByZWNlaXZlIGFuZCBjb250cm9sIGRldmljZQorCTY0NDEgIEMtTWVkaWEgU291bmQgRGV2aWNlCiswZTVkICBOZWx0cm9uIEluZHVzdHJpYWwgQ28uLCBMdGQKKzBlNjYgIEhhd2tpbmcKKwk0MDBiICBVRjEwMCAxMC8xMDAgTmV0d29yayBBZGFwdGVyCisJNDAwYyAgVUYxMDAgRXRoZXJuZXQgW3BlZ2FzdXMyXQorMGU2NyAgRm9zc2lsLCBJbmMuCisJMDAwMiAgV3Jpc3QgUERBCiswZTZhICBNZWdhd2luIFRlY2hub2xvZ3kgQ28uLCBMdGQKKzBlNzAgIFRva3lvIEVsZWN0cm9uaWMgSW5kdXN0cnkgQ28uLCBMdGQKKzBlNzIgIEhzaS1DaGluIEVsZWN0cm9uaWNzIENvLiwgTHRkCiswZTc1ICBUVlMgRWxlY3Ryb25pY3MsIEx0ZAorMGU3OSAgQXJjaG9zLCBJbmMuCisJMTEwNiAgUG9ja2V0IE1lZGFpIEFzc2lzdGFudCAtIFBNQTQwMAorMGU3YiAgT24tVGVjaCBJbmR1c3RyeSBDby4sIEx0ZAorMGU3ZSAgR21hdGUsIEluYy4KKwkwMDAxICBZb3B5IDMwMDAgUERBCisJMTAwMSAgWVAzWDAwIFBEQQorMGU4MiAgQ2hpbmcgVGFpIEVsZWN0cmljIFdpcmUgJiBDYWJsZSBDby4sIEx0ZAorMGU4MyAgU2hpbiBBbiBXaXJlICYgQ2FibGUgQ28uCiswZThjICBXZWxsIEZvcmNlIEVsZWN0cm9uaWMgQ28uLCBMdGQKKzBlOGQgIE1lZGlhVGVrIEluYy4KKzBlOGYgIEdyZWVuQXNpYSBJbmMuCisJMDAxMiAgSm95c3RpY2sKKzBlOTAgIFdpZWJlVGVjaCwgTExDCisJMDEwMCAgU3RvcmFnZSBBZGFwdGVyIFYxCiswZTkxICBWVGVjaCBFbmdpbmVlcmluZyBDYW5hZGEsIEx0ZAorMGU5MiAgQydzIEdsb3J5IEVudGVycHJpc2UgQ28uLCBMdGQKKzBlOTMgIGVNIFRlY2huaWNzIENvLiwgTHRkCiswZTk1ICBGdXR1cmUgVGVjaG5vbG9neSBDby4sIEx0ZAorMGU5NiAgQXBsdXggQ29tbXVuaWNhdGlvbnMsIEx0ZAorCWMwMDEgIFRSVVNUIDM4MCBVU0IyIFNQQUNFQ0BNCiswZTk3ICBGaW5nZXJ3b3JrcywgSW5jLgorMGU5OCAgQWR2YW5jZWQgQW5hbG9naWMgVGVjaG5vbG9naWVzLCBJbmMuCiswZTk5ICBQYXJhbGxlbCBEaWNlIENvLiwgTHRkCiswZTlhICBUQSBIU0lORyBJbmR1c3RyaWVzLCBMdGQKKzBlOWIgIEFEVEVDIENvcnAuCiswZTljICBTdHJlYW16YXAsIEluYy4KKwkwMDAwICBTdHJlYW16YXAgUmVtb3RlIENvbnRyb2wKKzBlOWYgIFRhbXVyYSBDb3JwLgorMGVhMCAgT3VycyBUZWNobm9sb2d5LCBJbmMuCisJMjEyNiAgNy1pbi0xIENhcmQgUmVhZGVyCisJMjE2OCAgVHJhbnNjZW5kIEpldEZsYXNoIDIuMCAvIEFzdG9uZSBVU0IgRHJpdmUKKwk2ODAzICBPVEktNjgwMyBGbGFzaCBEaXNrCisJNjgwOCAgT1RJLTY4MDggRmxhc2ggRGlzaworCTY4MjggIE9USS02ODI4IEZsYXNoIERpc2sKKzBlYTYgIE5paG9uIENvbXB1dGVyIENvLiwgTHRkCiswZWE3ICBNU0wgRW50ZXJwcmlzZXMgQ29ycC4KKzBlYTggIENlbkR5bmUsIEluYy4KKzBlYWQgIEh1bWF4IENvLiwgTHRkCiswZWIwICBOb3ZhVGVjaAorCTkwMjAgIE5vdmFUZWNoIE5WLTkwMlcKKwk5MDIxICBSVDI1NzMKKzBlYjEgIFdJUyBUZWNobm9sb2dpZXMsIEluYy4KKwk2NjY2ICBXaW5GYXN0IFdhbGtpZVRWIFRWIExvYWRlcgorCTY2NjggIFdpbkZhc3QgV2Fsa2llVFYgVFYgTG9hZGVyCisJNzAwNyAgV2luRmFzdCBXYWxraWVUViBXRE0gQ2FwdHVyZQorMGViMiAgWS1TIEVsZWN0cm9uaWMgQ28uLCBMdGQKKzBlYjMgIFNhaW50IFRlY2hub2xvZ3kgQ29ycC4KKzBlYjcgIEVuZG9yIEFHCiswZWJlICBWV2ViIENvcnAuCiswZWJmICBPbWVnYSBUZWNobm9sb2d5IG9mIFRhaXdhbiwgSW5jLgorMGVjMCAgTEhJIFRlY2hub2xvZ3kgKENoaW5hKSBDby4sIEx0ZAorMGVjMSAgQWJpdCBDb21wdXRlciBDb3JwLgorMGVjMiAgU3dlZXRyYXkgSW5kdXN0cmlhbCwgTHRkCiswZWMzICBBeGVsbCBDby4sIEx0ZAorMGVjNCAgQmFsbHJhY2luZyBEZXZlbG9wbWVudHMsIEx0ZAorMGVjNSAgR1QgSW5mb3JtYXRpb24gU3lzdGVtIENvLiwgTHRkCiswZWM2ICBJbm5vVklTSU9OIE11bHRpbWVkaWEsIEx0ZAorMGVjNyAgVGhldGEgTGluayBDb3JwLgorCTEwMDggIFNvLiwgU2hvdyAzMDEgRGlnaXRhbCBDYW1lcmEKKzBlY2QgIExpdGUtT24gSVQgQ29ycC4KKwkxNDAwICBDRFxSVyA0MFgKKzBlY2UgIFRhaVNvbCBFbGVjdHJvbmljcyBDby4sIEx0ZAorMGVjZiAgUGhvZ2VuaXggSW1hZ2luZywgTExDCiswZWQxICBXaW5NYXhHcm91cAorCTY2NjAgIFVTQiBGbGFzaCBEaXNrIDY0TS1DCisJNjY4MCAgVVNCIEZsYXNoIERpc2sgNjRNLUIKKwk3NjM0ICBNUDMgUGxheWVyCiswZWQyICBLeW90byBNaWNybyBDb21wdXRlciBDby4sIEx0ZAorMGVkMyAgV2luZy1UZWNoIEVudGVycHJpc2UgQ28uLCBMdGQKKzBlZDUgIEZpYmVyYnl0ZQorCWUwMDAgIFVTQi1pblN5bmMgRGV2aWNlCisJZjAwMCAgRmliZXJieXRlIFVTQi1pblN5bmMgRGV2aWNlCisJZjIwMSAgRmliZXJieXRlIFVTQi1pblN5bmMgREFRLTI1MDBYCiswZWRhICBOb3JpYWtlIEl0cm9uIENvcnAuCiswZWRmICBlLU1EVCBDby4sIEx0ZAorCTIwNjAgIEZJRCBpcm9jayEgMTAwIFNlcmllcworMGVlMCAgU2hpbWEgU2Vpa2kgTWZnLiwgTHRkCiswZWUxICBTYXJvdGVjaCBDby4sIEx0ZAorMGVlMiAgQU1JIFNlbWljb25kdWN0b3IsIEluYy4KKzBlZTMgIENvbVRydWUgVGVjaG5vbG9neSBDb3JwLgorCTEwMDAgIEltYWdlIFRhbmsgMS41CiswZWU0ICBTdW5yaWNoIFRlY2hub2xvZ3ksIEx0ZAorMGVlZSAgRGlnaXRhbCBTdHJlYW0gVGVjaG5vbG9neSwgSW5jLgorCTg4MTAgIE1hc3MgU3RvcmFnZSBEcml2ZQorMGVlZiAgRC1XQVYgU2NpZW50aWZpYyBDby4sIEx0ZAorCTAwMDEgIGVHYWxheCBUb3VjaFNjcmVlbgorCTAwMDIgIFRvdWNoc2NyZWVuIENvbnRyb2xsZXIoUHJvZmVzc2lvbmFsKQorMGVmMCAgSGl0YWNoaSBDYWJsZSwgTHRkCiswZWYxICBBaWNoaSBNaWNybyBJbnRlbGxpZ2VudCBDb3JwLgorMGVmMiAgSS9PIE1hZ2ljIENvcnAuCiswZWYzICBMeW5uIFByb2R1Y3RzLCBJbmMuCiswZWY0ICBEU0kgRGF0b3RlY2gKKzBlZjUgIFBvaW50Q2hpcHMKKwkyMjAyICBGbGFzaCBEaXNrCisJMjM2NiAgRmxhc2ggRGlzaworMGVmNiAgWWllbGQgTWljcm9lbGVjdHJvbmljcyBDb3JwLgorMGVmNyAgU00gVGVjaCBDby4sIEx0ZCAoVHVsaXApCiswZWZkICBPYXNpcyBTZW1pY29uZHVjdG9yCiswZWZlICBXZW0gVGVjaG5vbG9neSwgSW5jLgorMGYwNiAgVmlzdWFsIEZyb250aWVyIEVudGVycHJpc2UgQ28uLCBMdGQKKzBmMDggIENTTCBXaXJlICYgUGx1ZyAoU2hlbiBaaGVuKSBDby4KKzBmMGMgIENBUyBDb3JwLgorMGYwZCAgSG9yaSBDby4sIEx0ZAorMGYwZSAgRW5lcmd5IEZ1bGwgQ29ycC4KKzBmMTIgIE1hcnMgRW5naW5lZXJpbmcgQ29ycC4KKzBmMTMgIEFjZXRlayBUZWNobm9sb2d5IENvLiwgTHRkCiswZjE5ICBPcmFjb20gQ28uLCBMdGQKKzBmMWIgIE9uc2V0IENvbXB1dGVyIENvcnAuCiswZjFjICBGdW5haSBFbGVjdHJpYyBDby4sIEx0ZAorMGYxZCAgSXdpbGwgQ29ycC4KKzBmMjEgIElPSSBUZWNobm9sb2d5IENvcnAuCiswZjIyICBTZW5pb3IgSW5kdXN0cmllcywgSW5jLgorMGYyMyAgTGVhZGVyIFRlY2ggTWFudWZhY3R1cmVyIENvLiwgTHRkCiswZjI0ICBGbGV4LVAgSW5kdXN0cmllcywgU25kLiwgQmhkLgorMGYyZCAgVmlQb3dlciwgSW5jLgorMGYyZSAgR2VuaWFsaXR5IE1hcGxlIFRlY2hub2xvZ3kgQ28uLCBMdGQKKzBmMmYgIFByaXZhIERlc2lnbiBTZXJ2aWNlcworMGYzMCAgSmVzcyBUZWNobm9sb2d5IENvLiwgTHRkCisJMDAxYyAgUFMzIEd1aXRhciBDb250cm9sbGVyIERvbmdsZQorCTAxMTAgIDEwLUJ1dHRvbiBKb3lwYWQKKzBmMzEgIENocnlzYWxpcyBEZXZlbG9wbWVudAorMGYzMiAgWUZDLUJvbkVhZ2xlIEVsZWN0cmljIENvLiwgTHRkCiswZjM3ICBLb2t1eW8gQ28uLCBMdGQKKzBmMzggIE5pZW4tWWkgSW5kdXN0cmlhbCBDb3JwLgorMGYzZCAgQWlycHJpbWUsIEluY29ycG9yYXRlZAorCTAxMTIgIENETUEgMXhFVkRPIFBDIENhcmQsIFBDIDUyMjAKKzBmNDEgIFJEQyBTZW1pY29uZHVjdG9yIENvLiwgTHRkCiswZjQyICBOaXRhbCBDb25zdWx0aW5nIFNlcnZpY2VzLCBJbmMuCiswZjQ0ICBQb2xoZW11cworCWVmMTEgIFBhdHJpb3QgKGZpcm13YXJlIG5vdCBsb2FkZWQpCisJZWYxMiAgUGF0cmlvdAorCWZmMTEgIExpYmVydHkgKGZpcm13YXJlIG5vdCBsb2FkZWQpCisJZmYxMiAgTGliZXJ0eQorMGY0YiAgU3QuIEpvaG4gVGVjaG5vbG9neSBDby4sIEx0ZAorMGY0YyAgV29ybGRXaWRlIENhYmxlIE9wdG8gQ29ycC4KKzBmNGQgIE1pY3JvdHVuZSwgSW5jLgorCTEwMDAgIEJsdWV0b290aCBEb25nbGUKKzBmNGUgIEZyZWVkb20gU2NpZW50aWZpYworMGY1MiAgV2luZyBLZXkgRWxlY3RyaWNhbCBDby4sIEx0ZAorMGY1MyAgRG9uZ2d1YW4gV2hpdGUgSG9yc2UgQ2FibGUgRmFjdG9yeSwgTHRkCiswZjU0ICBLYXdhaSBNdXNpY2FsIEluc3RydW1lbnRzIE1mZy4gQ28uLCBMdGQKKzBmNTUgIEFtYmlDb20sIEluYy4KKzBmNWMgIFByYWlyaWVjb21tLCBJbmMuCiswZjVkICBOZXdBZ2UgSW50ZXJuYXRpb25hbCwgTExDCisJOTQ1NSAgQ29tcGFjdCBEcml2ZQorMGY1ZiAgS2V5IFRlY2hub2xvZ3kgQ29ycC4KKzBmNjAgIE5USywgTHRkCiswZjYxICBWYXJpYW4sIEluYy4KKzBmNjIgIEFjcm94IFRlY2hub2xvZ2llcyBDby4sIEx0ZAorCTEwMDEgIFRhcmd1cyBNaW5pIFRyYWNrYmFsbCBPcHRpY2FsIE1vdXNlCiswZjY4ICBLb2JlIFN0ZWVsLCBMdGQKKzBmNjkgIERpb25leCBDb3JwLgorMGY2YSAgVmlicmVuIFRlY2hub2xvZ2llcywgSW5jLgorMGY2ZSAgSU5URUxMSUdFTlQgU1lTVEVNUworCTAxMDAgIEdhbWVCb3kgQ29sb3IgRW11bGF0b3IKKwkwMjAxICBHYW1lQm95IEFkdmFuY2UgRmxhc2ggR2FuZyBXcml0ZXIKKwkwMjAyICBHYW1lQm95IEFkdmFuY2UgQ2FwdHVyZQorCTAzMDAgIEdhbWVjdWJlIERPTCBWaWV3ZXIKKwkwNDAwICBORFMgRW11bGF0b3IKKwkwNDAxICBORFMgVUlDCisJMDQwMiAgTkRTIFdyaXRlcgorCTA0MDMgIE5EUyBDYXB0dXJlCisJMDQwNCAgTkRTIEVtdWxhdG9yIChMaXRlKQorMGY3MyAgREZJCiswZjdjICBEUSBUZWNobm9sb2d5LCBJbmMuCiswZjdkICBOZXRCb3R6LCBJbmMuCiswZjdlICBGbHVrZSBDb3JwLgorMGY4OCAgVlRlY2ggSG9sZGluZ3MsIEx0ZAorCTMwMTIgIFJUMjU3MAorCTMwMTQgIFpEMTIxMUIKKzBmOGIgIFlhemFraSBDb3JwLgorMGY4YyAgWW91bmcgR2VuZXJhdGlvbiBJbnRlcm5hdGlvbmFsIENvcnAuCiswZjhkICBVbml3aWxsIENvbXB1dGVyIENvcnAuCiswZjhlICBLaW5nbmV0IFRlY2hub2xvZ3kgQ28uLCBMdGQKKzBmOGYgIFNvbWEgTmV0d29ya3MKKzBmOTcgIEN2aUx1eCBDb3JwLgorMGY5OCAgQ3liZXJCYW5rIENvcnAuCiswZjljICBIeXVuIFdvbiwgSW5jLgorCTAzMDEgIE0tQW55IFByZW1pdW0gREFILTYxMCBNUDMvV01BIFBsYXllcgorCTAzMzIgIG1vYmlCTFUgREFILTEyMDAgTVAzL09nZyBQbGF5ZXIKKzBmOWUgIEx1Y2VudCBUZWNobm9sb2dpZXMKKzBmYTMgIFN0YXJjb25uIEVsZWN0cm9uaWMgQ28uLCBMdGQKKzBmYTQgIEFUTCBUZWNobm9sb2d5CiswZmE1ICBTb3RlYyBDby4sIEx0ZAorMGZhNyAgRXBveCBDb21wdXRlciBDby4sIEx0ZAorMGZhOCAgTG9naWMgQ29udHJvbHMsIEluYy4KKzBmYWYgIFdpbnBvaW50IEVsZWN0cm9uaWMgQ29ycC4KKzBmYjAgIEhhdXJ0aWFuIFdpcmUgJiBDYWJsZSBDby4sIEx0ZAorMGZiMSAgSW5jbG9zZSBEZXNpZ24sIEluYy4KKzBmYjIgIEp1YW4tQ2hlcm4gSW5kdXN0cmlhbCBDby4sIEx0ZAorMGZiOCAgV2lzdHJvbiBDb3JwLgorCTAwMDIgIGVIb21lIEluZnJhcmVkIFJlY2VpdmVyCiswZmI5ICBBQUNvbSBDb3JwLgorMGZiYSAgU2FuIFNoaW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkCiswZmJiICBCaXR3aXNlIFN5c3RlbXMsIEluYy4KKzBmYzEgIE1pdGFjIEludGVybmF0aW5hbCBDb3JwLgorMGZjMiAgUGx1ZyBhbmQgSmFjayBJbmR1c3RyaWFsLCBJbmMuCiswZmM1ICBEZWxjb20gRW5naW5lZXJpbmcKKwkxMjIyICBJL08gRGV2ZWxvcG1lbnQgQm9hcmQKKzBmYzYgIERhdGFwbHVzIFN1cHBsaWVzLCBJbmMuCiswZmNhICBSZXNlYXJjaCBJbiBNb3Rpb24sIEx0ZC4KKwkwMDAxICBCbGFja2JlcnJ5IEhhbmRoZWxkCiswZmNlICBTb255IEVyaWNzc29uIE1vYmlsZSBDb21tdW5pY2F0aW9ucyBBQgorCTEwMTAgIFdNQyBNb2RlbQorCWQwMDggIFY4MDAtVm9kYWZvbmUgODAyU0UgV01DIE1vZGVtCisJZDAxNiAgSzc1MGkgUGhvbmUKKwlkMDE3ICBLNjA4aSBQaG9uZQorCWQwMTkgIFZEQyBFR1BSUyBNb2RlbQorCWQwMjUgIDUyMCBXTUMgRGF0YSBNb2RlbQorCWQwMzggIFc4NTBpIFBob25lCisJZDA0MSAgSzUxMGkgUGhvbmUKKwlkMDQyICBXODEwaSBQaG9uZQorCWQwNDYgIEs2MTBpIFBob25lCiswZmNmICBEeW5hc3RyZWFtIElubm92YXRpb25zLCBJbmMuCiswZmQwICBUdWxpcCBDb21wdXRlcnMgQi5WLgorMGZkMSAgR2lhbnQgRWxlY3Ryb25pY3MgTHRkLgorMGZkNCAgVGVub3ZpcyBHbWJIICYgQ28uLCBLRworMGZkNSAgRGlyZWN0IEFjY2VzcyBUZWNobm9sb2d5LCBJbmMuCiswZmRjICBNaWNybyBQbHVzCiswZmU0ICBJTi1UZWNoIEVsZWN0cm9uaWNzLCBMdGQKKzBmZTUgIEdyZWVuY29ubiAoVS5TLkEuKSwgSW5jLgorMGZlOSAgRFZJQ08KKwlkYjAwICBGdXNpb25IRFRWIERWQi1UIChNVDM1MitMZ1oyMDEpICh1bmluaXRpYWxpemVkKQorCWRiMDEgIEZ1c2lvbkhEVFYgRFZCLVQgKE1UMzUyK0xnWjIwMSkgKGluaXRpYWxpemVkKQorCWRiMTAgIEZ1c2lvbkhEVFYgRFZCLVQgKE1UMzUyK1Rob21zb243NTc5KSAodW5pbml0aWFsaXplZCkKKwlkYjExICBGdXNpb25IRFRWIERWQi1UIChNVDM1MitUaG9tc29uNzU3OSkgKGluaXRpYWxpemVkKQorMGZlYSAgVW5pdGVkIENvbXB1dGVyIEFjY2Vzc29yaWVzCiswZmViICBDUlMgRWxlY3Ryb25pYyBDby4sIEx0ZAorMGZlYyAgVU1DIEVsZWN0cm9uaWNzIENvLiwgTHRkCiswZmVkICBBY2Nlc3MgQ28uLCBMdGQKKzBmZWUgIFhzaWRvIENvcnAuCiswZmVmICBNSiBSZXNlYXJjaCwgSW5jLgorMGZmNiAgQ29yZSBWYWxsZXkgQ28uLCBMdGQKKzBmZjcgIENISSBTSElORyBDb21wdXRlciBBY2Nlc3NvcmllcyBDby4sIEx0ZAorMGZmZiAgQW9wZW4sIEluYy4KKzEwMDAgIFNwZWVkIFRlY2ggQ29ycC4KKzEwMDEgIFJpdHJvbmljcyBDb21wb25lbnRzIChTKSBQdGUuLCBMdGQKKzEwMDMgIFNpZ21hIENvcnAuCisJMDEwMCAgU2lnbWEgU0QxMAorMTAwNCAgTEcgRWxlY3Ryb25pY3MsIEluYy4KKwkxZmFlICBVODEyMCAzRyBDZWxscGhvbmUKKwk2MDAwICBWWDQ0MDAvVlg2MDAwIENlbGxwaG9uZQorCTYwMDUgIFQ1MTAwCisJNjgwMCAgQ0RNQSBNb2RlbQorCTcwMDAgIExHIExEUC03MDI0RChMRClVU0IKKzEwMDUgIEFwYWNlciBUZWNobm9sb2d5LCBJbmMuCisJMTAwMSAgTVAzIFBsYXllcgorCTEwMDQgIE1QMyBQbGF5ZXIKKwkxMDA2ICBNUDMgUGxheWVyCisJYjExMyAgSGFuZHkgU3Rlbm8gMi4wL0hUMjAzCisJYjIyMyAgQ0QtUlcgKyA2IGluIDEgQ2FyZCBSZWFkZXIgRGlnaXRhbCBTdG9yYWdlIC8gQ29udmVydGVyCisxMDA2ICBpUml2ZXIsIEx0ZC4KKwkzMDAxICBpSFAtMTAwCisJMzAwMiAgaUhQLTEyMC8xNDAgTVAzIFBsYXllcgorCTMwMDMgIEgzMjAvSDM0MAorCTMwMDQgIEgzNDAgKG10cCkKKzEwMDkgIEVtdXplZCwgSW5jLgorCTAwMGUgIGVIb21lIEluZnJhcmVkIFJlY2VpdmVyCisJMDAxMyAgQW5nZWwgTVBFRyBEZXZpY2UKKwkwMDE1ICBMdW1hbmF0ZSBXYXZlIFBBTCBTRUNBTSBEVkJUIERldmljZQorCTAwMTYgIEx1bWFuYXRlIFdhdmUgTlRTQy9BVFNDIENvbWJvIERldmljZQorMTAwYSAgQVYgQ2hhc2V3YXksIEx0ZAorCTI0MDIgIE1QMyBQbGF5ZXIKKwkyNDA0ICBNUDMgUGxheWVyCisJMjQwNSAgTVAzIFBsYXllcgorCTI0MDYgIE1QMyBQbGF5ZXIKKwlhMGMwICBNUDMgUGxheWVyCisxMDBiICBDaG91IENoaW4gSW5kdXN0cmlhbCBDby4sIEx0ZAorMTAwZCAgTmV0b3BpYSwgSW5jLgorCTMzNDIgIENheW1hbiAzMzUyIERTTCBNb2RlbQorCTMzODIgIDMzODAgU2VyaWVzIE5ldHdvcmsgSW50ZXJmYWNlCisJY2IwMSAgQ2F5bWFuIDMzNDEgRXRoZXJuZXQgRFNMIFJvdXRlcgorMTAxMCAgRnVrdWRhIERlbnNoaSBDby4sIEx0ZAorMTAxMSAgTW9iaWxlIE1lZGlhIFRlY2guCisJMDAwMSAgQWNjRmFzdCBNcDMKKzEwMTIgIFNES00gRmlicmVzLCBXaXJlcyAmIENhYmxlcyBCZXJoYWQKKzEwMTMgIFRTVC1Ub3VjaGxlc3MgU2Vuc29yIFRlY2hub2xvZ3kgQUcKKzEwMTQgIERlbnNpdHJvbiBUZWNobm9sb2dpZXMgUExDCisxMDE1ICBTb2Z0cm9uaWNzIFB0eS4sIEx0ZAorMTAxNiAgWGlhbWVuIEh1bmcncyBFbnRlcnByaXNlIENvLiwgTHRkCisxMDE3ICBTcGVlZHkgSW5kdXN0cmlhbCBTdXBwbGllcywgUHRlLiwgTHRkCisxMDE5ICBFbGl0ZWdyb3VwIENvbXB1dGVyIFN5c3RlbXMgKEVDUykKKwkwYzU1ICBVU0IgRmxhc2ggUmVhZGVyLCBEZXNrbm90ZSBVQ1ItNjFTMkIKKzEwMjAgIExhYnRlYworCTAwMGEgIFdpcmVsZXNzIE9wdGljYWwgTW91c2UKKzEwMjIgIFNoaW5rbyBTaG9qaSBDby4sIEx0ZAorMTAyNSAgSHlwZXItUGFsdGVrCisJMDA1ZSAgVVNCIERWQi1UIGRldmljZQorCTAwNWYgIFVTQiBEVkItVCBkZXZpY2UKKwkwMzAwICBNUDMgUGxheWVyCisJMDM1MCAgTVAzIFBsYXllcgorMTAyNiAgTmV3bHkgQ29ycC4KKzEwMjcgIFRpbWUgRG9tYWluCisxMDI4ICBJbm92eXMgQ29ycC4KKzEwMjkgIEF0bGFudGljIENvYXN0IFRlbGVzeXMKKzEwMmEgIFJhbW9zIFRlY2hub2xvZ3kgQ28uLCBMdGQKKzEwMmIgIEluZm90cm9uaWMgQW1lcmljYSwgSW5jLgorMTAyYyAgRXRvbXMgRWxlY3Ryb25pY3MgQ29ycC4KKwk2MjUxICBRLUNhbQorMTAyZCAgV2luaWMgQ29ycC4KKzEwMzEgIENvbWF4IFRlY2hub2xvZ3ksIEluYy4KKzEwMzIgIEMtT25lIFRlY2hub2xvZ3kgQ29ycC4KKzEwMzMgIE51Y2FtIENvcnAuCisJMDA2OCAgMyw1JycgSEREIGNhc2UgTUQtMjMxCisxMDM4ICBJZGVhem9uLCBJbmMuCisJMDEwMCAgWmJvYXJkCisxMDM5ICBkZXZvbG8gQUcKKwkyMTQwICBkc2wrIDExMDAgZHVvCisxMDNkICBTdGFudG9uCisJMDEwMCAgU2NyYXRjaEFtcAorCTAxMDEgIFNjcmF0Y2hBbXAKKzEwNDMgIGlDcmVhdGUgVGVjaG5vbG9naWVzIENvcnAuCisJMTYwZiAgV2lyZWxlc3MgTmV0d29yayBBZGFwdGVyCisJNDkwMSAgQVYtODM2IFZpZGVvIENhcHR1cmUgRGV2aWNlCisJODAwNiAgRmxhc2ggRGlzayAzMi0yNTYgTUIKKzEwNDQgIENodSBZdWVuIEVudGVycHJpc2UgQ28uLCBMdGQKKwk3MDAxICBVNzAwMCBUViB0dW5lciBkZXZpY2UKKwk4MDAxICBHTi01NEcKKwk4MDAyICBHTi1CUjQwMlcKKwk4MDAzICBHTi1XTEJNMTAxCisJODAwNCAgR04tV0xCWjEwMSA4MDIuMTFiIEFkYXB0ZXIKKwk4MDA1ICBHTi1XTEJaMjAxIDgwMi4xMWIgQWRhcHRlcgorCTgwMDYgIEdOLVdCWkItTSA4MDIuMTFiIEFkYXB0ZXIKKwk4MDA3ICBHTi1XQktHCisJODAwOCAgR04tV0IwMUdTCisJODAwYSAgR04tV0kwNUdTCisJODAwYiAgR04tV0IzME4gODAyLjExbiBXTEFOIENhcmQKKzEwNDYgIFdpbmJvbmQgRWxlY3Ryb25pY3MgQ29ycC4gW2hleF0KKwk4OTAxICBCbHVldG9vdGggRGV2aWNlCisJOTk2NyAgVzk5NjdDRi9XOTk2OENGIFdlYkNhbSBJQworMTA0OCAgVGFyZ3VzIEdyb3VwIEludGVybmF0aW9uYWwKKzEwNGMgIEFNQ08gVEVDIEludGVybmF0aW9uYWwsIEluYy4KKzEwNTMgIEltbWFudWVsIEVsZWN0cm9uaWNzIENvLiwgTHRkCisxMDU0ICBCTVMgSW50ZXJuYXRpb25hbCBCZWhlZXIgTi5WLgorCTUwMDQgIERTTCA3NDIwIExvYWRlcgorCTUwMDUgIERTTCA3NDIwIExBTiBNb2RlbQorMTA1NSAgQ29tcGxleCBNaWNybyBJbnRlcmNvbm5lY3Rpb24gQ28uLCBMdGQKKzEwNTYgIEhzaW4gQ2hlbiBFbnQgQ28uLCBMdGQKKzEwNTcgIE9OIFNlbWljb25kdWN0b3IKKzEwNTggIFdlc3Rlcm4gRGlnaXRhbCBUZWNobm9sb2dpZXMsIEluYy4KKwkwMjAwICBGaXJld2lyZSBVU0IgQ29tYm8KKwkwNDAwICBFeHRlcm5hbCBIREQKKwkwNTAwICBodWIKKwkwNzAyICBQYXNzcG9ydCBFeHRlcm5hbCBIREQKKwkwOTAxICBNeUJvb2sgRXh0ZXJuYWwgSERECisJMTAwMSAgRXh0ZXJuYWwgSGFyZCBEaXNrCisxMDU5ICBHaWVzZWNrZSAmIERldnJpZW50IEdtYkgKKwkwMDBiICBTdGFyU2lnbiBCaW8gVG9rZW4gMy4wCisxMDVjICBIb25nIEppIEVsZWN0cmljIFdpcmUgJiBDYWJsZSAoRG9uZ2d1YW4pIENvLiwgTHRkCisxMDVkICBEZWxraW4gRGV2aWNlcywgSW5jLgorMTA1ZSAgVmFsZW5jZSBTZW1pY29uZHVjdG9yIERlc2lnbiwgTHRkCisxMDVmICBDaGluIFNob25nIEVudGVycHJpc2UgQ28uLCBMdGQKKzEwNjAgIEVhc3Rob21lIEluZHVzdHJpYWwgQ28uLCBMdGQKKzEwNjMgIE1vdG9yb2xhIEVsZWN0cm9uaWNzIFRhaXdhbiwgTHRkIFtoZXhdCisJMTU1NSAgTUMxNDE1NTUgSHViCisJNDEwMCAgU0I0MTAwIFVTQiBDYWJsZSBNb2RlbQorMTA2NSAgQ0NZVSBUZWNobm9sb2d5CisJMDAyMCAgVVNCLURWUjIgRGV2IEJvYXJkCisJMjEzNiAgRWFzeURpc2sgRUQxMDY0CisxMDZhICBMb3lhbCBMZWdlbmQsIEx0ZAorMTA2YyAgQ3VyaXRlbCBDb21tdW5pY2F0aW9ucywgSW5jLgorCTExMDEgIENETUEgMjAwMCAxeFJUVCBVU0IgbW9kZW0gKEhYLTU1MEMpCisJMTEwMiAgUGFja2V0IFNlcnZpY2UKKwkxMTAzICBQYWNrZXQgU2VydmljZSBEaWFnbm9zdGljIFNlcmlhbCBQb3J0IChXRE0pCisJMTEwNCAgUGFja2V0IFNlcnZpY2UgRGlhZ25vc3RpYyBTZXJpYWwgUG9ydCAoV0RNKQorCTExMDUgIENvbXBvc2l0ZSBEZXZpY2UKKwkxMTA2ICBQYWNrZXQgU2VydmljZSBEaWFnbm9zdGljIFNlcmlhbCBQb3J0IChXRE0pCisJMTMwMSAgQ29tcG9zaXRlIERldmljZQorCTEzMDIgIFBhY2tldCBTZXJ2aWNlIERpYWdub3N0aWMgU2VyaWFsIFBvcnQgKFdETSkKKwkxMzAzICBQYWNrZXQgU2VydmljZQorCTEzMDQgIFBhY2tldCBTZXJ2aWNlCisJMTQwMSAgQ29tcG9zaXRlIERldmljZQorCTE0MDIgIFBhY2tldCBTZXJ2aWNlCisJMTQwMyAgUGFja2V0IFNlcnZpY2UgRGlhZ25vc3RpYyBTZXJpYWwgUG9ydCAoV0RNKQorCTE1MDEgIFBhY2tldCBTZXJ2aWNlCisJMTUwMiAgUGFja2V0IFNlcnZpY2UgRGlhZ25vc3RpYyBTZXJpYWwgUG9ydCAoV0RNKQorCTE1MDMgIFBhY2tldCBTZXJ2aWNlCisJMTYwMSAgUGFja2V0IFNlcnZpY2UKKwkxNjAyICBQYWNrZXQgU2VydmljZSBEaWFnbm9zdGljIFNlcmlhbCBQb3J0IChXRE0pCisJMTYwMyAgUGFja2V0IFNlcnZpY2UKKwkyMTAxICBBdWRpb1ZveCA4OTAwIENlbGwgUGhvbmUKKwkyMTAyICBQYWNrZXQgU2VydmljZQorCTIxMDMgIFBhY2tldCBTZXJ2aWNlIERpYWdub3N0aWMgU2VyaWFsIFBvcnQgKFdETSkKKwkyMzAxICBQYWNrZXQgU2VydmljZQorCTIzMDIgIFBhY2tldCBTZXJ2aWNlIERpYWdub3N0aWMgU2VyaWFsIFBvcnQgKFdETSkKKwkyMzAzICBQYWNrZXQgU2VydmljZQorCTI0MDEgIFBhY2tldCBTZXJ2aWNlIERpYWdub3N0aWMgU2VyaWFsIFBvcnQgKFdETSkKKwkyNDAyICBQYWNrZXQgU2VydmljZQorCTI0MDMgIFBhY2tldCBTZXJ2aWNlIERpYWdub3N0aWMgU2VyaWFsIFBvcnQgKFdETSkKKwkyNTAxICBQYWNrZXQgU2VydmljZQorCTI1MDIgIFBhY2tldCBTZXJ2aWNlIERpYWdub3N0aWMgU2VyaWFsIFBvcnQgKFdETSkKKwkyNTAzICBQYWNrZXQgU2VydmljZQorCTI2MDEgIFBhY2tldCBTZXJ2aWNlCisJMjYwMiAgUGFja2V0IFNlcnZpY2UgRGlhZ25vc3RpYyBTZXJpYWwgUG9ydCAoV0RNKQorCTI2MDMgIFBhY2tldCBTZXJ2aWNlCisJMzcwMSAgQnJvYWRiYW5kIFdpcmVsZXNzIG1vZGVtCisJMzcwMiAgUGFudGVjaCBQWC01MDAKKwkzZWI0ICBQYWNrZXQgU2VydmljZSBEaWFnbm9zdGljIFNlcmlhbCBQb3J0IChXRE0pCisJNDEwMSAgUGFja2V0IFNlcnZpY2UgRGlhZ25vc3RpYyBTZXJpYWwgUG9ydCAoV0RNKQorCTQxMDIgIFBhY2tldCBTZXJ2aWNlCisJNDMwMSAgQ29tcG9zaXRlIERldmljZQorCTQzMDIgIFBhY2tldCBTZXJ2aWNlIERpYWdub3N0aWMgU2VyaWFsIFBvcnQgKFdETSkKKwk0NDAxICBDb21wb3NpdGUgRGV2aWNlCisJNDQwMiAgUGFja2V0IFNlcnZpY2UKKwk0NTAxICBQYWNrZXQgU2VydmljZQorCTQ1MDIgIFBhY2tldCBTZXJ2aWNlIERpYWdub3N0aWMgU2VyaWFsIFBvcnQgKFdETSkKKwk0NjAxICBDb21wb3NpdGUgRGV2aWNlCisJNDYwMiAgUGFja2V0IFNlcnZpY2UgRGlhZ25vc3RpYyBTZXJpYWwgUG9ydCAoV0RNKQorCTUxMDEgIFBhY2tldCBTZXJ2aWNlCisJNTEwMiAgUGFja2V0IFNlcnZpY2UgRGlhZ25vc3RpYyBTZXJpYWwgUG9ydCAoV0RNKQorCTUzMDEgIFBhY2tldCBTZXJ2aWNlIERpYWdub3N0aWMgU2VyaWFsIFBvcnQgKFdETSkKKwk1MzAyICBQYWNrZXQgU2VydmljZQorCTU0MDEgIFBhY2tldCBTZXJ2aWNlCisJNTQwMiAgUGFja2V0IFNlcnZpY2UgRGlhZ25vc3RpYyBTZXJpYWwgUG9ydCAoV0RNKQorCTU1MDEgIFBhY2tldCBTZXJ2aWNlIERpYWdub3N0aWMgU2VyaWFsIFBvcnQgKFdETSkKKwk1NTAyICBQYWNrZXQgU2VydmljZQorCTU2MDEgIFBhY2tldCBTZXJ2aWNlIERpYWdub3N0aWMgU2VyaWFsIFBvcnQgKFdETSkKKwk1NjAyICBQYWNrZXQgU2VydmljZQorCTcxMDEgIENvbXBvc2l0ZSBEZXZpY2UKKwk3MTAyICBQYWNrZXQgU2VydmljZQorCWEwMDAgIFBhY2tldCBTZXJ2aWNlCisJYTAwMSAgUGFja2V0IFNlcnZpY2UgRGlhZ25vc3RpYyBTZXJpYWwgUG9ydCAoV0RNKQorCWMxMDAgIFBhY2tldCBTZXJ2aWNlCisJYzIwMCAgUGFja2V0IFNlcnZpY2UKKwljNTAwICBQYWNrZXQgU2VydmljZSBEaWFnbm9zdGljIFNlcmlhbCBQb3J0IChXRE0pCisJZTIwMCAgUGFja2V0IFNlcnZpY2UKKzEwNmQgIFNhbiBDaGllaCBNYW51ZmFjdHVyaW5nLCBMdGQKKzEwNmUgIENvbmVjdEwKKzEwNmYgIE1vbmV5IENvbnRyb2xzCisxMDc2ICBHQ1QgU2VtaWNvbmR1Y3RvciwgSW5jLgorCTAwMzEgIEJsdWV0b290aCBEZXZpY2UKKwkwMDMyICBCbHVldG9vdGggRGV2aWNlCisxMDdkICBBcmxlYyBBdXN0cmFsaWEsIEx0ZAorMTA3ZSAgTWlkb3JpeWEgRWxlY3RyaWMgQ28uLCBMdGQKKzEwN2YgIEtpZHpNb3VzZSwgSW5jLgorMTA4MiAgU2hpbi1FdHN1a2FrZW4gQ28uLCBMdGQKKzEwODMgIENhbm9uIEVsZWN0cm9uaWNzLCBJbmMuCisxMDg0ICBQYW50ZWNoIENvLiwgTHRkCisxMDhhICBDaGxvcmlkZSBQb3dlciBQcm90ZWN0aW9uCisxMDhiICBHcmFuZC10ZWsgVGVjaG5vbG9neSBDby4sIEx0ZAorMTA4YyAgUm9iZXJ0IEJvc2NoIEdtYkgKKzEwOGUgIExvdGVzIENvLiwgTHRkLgorMTA5OSAgU3VyZmFjZSBPcHRpY3MgQ29ycC4KKzEwOWEgIERBVEFTT0ZUIFN5c3RlbXMgR21iSAorMTA5ZiAgZVNPTCBDby4sIEx0ZAorCTMxNjMgIFRyaWdlbSBNb2JpbGUgU21hcnREaXNwbGF5ODQKKwkzMTY0ICBUcmlnZW0gTW9iaWxlIFNtYXJ0RGlzcGxheTEyMQorMTBhMCAgSGlyb3RlY2gsIEluYy4KKzEwYTMgIE1pdHN1YmlzaGkgTWF0ZXJpYWxzIENvcnAuCisxMGE5ICBTSyBUZWxldGVjaCBDby4sIEx0ZAorMTBhYSAgQ2FibGVzIFRvIEdvCisxMGFiICBVU0kgQ28uLCBMdGQKKwkxMDAyICBCbHVldG9vdGggRGV2aWNlCisJMTAwMyAgQkMwMi1FWFQgaW4gREZVCisJMTAwNSAgQmx1ZXRvb3RoIEFkcHRyCisJMTAwNiAgQkMwNC1FWFQgaW4gREZVCisJMTBjNSAgU29ueS1Fcmljc3NvbiAvIFNhbXN1bmcgRGF0YUNhYmxlCisxMGFjICBIb25leXdlbGwsIEluYy4KKzEwYWUgIFByaW5jZXRvbiBUZWNobm9sb2d5IENvcnAuCisxMGFmICBMaWViZXJ0IENvcnAuCisJMDAwMCAgVVBTCisJMDAwMSAgUG93ZXJTdXJlIFBTQSBVUFMKKwkwMDAyICBQb3dlclN1cmUgUFNUIFVQUworCTAwMDMgIFBvd2VyU3VyZSBQU1AgVVBTCisJMDAwNCAgUG93ZXJTdXJlIFBTSSBVUFMKKwkwMDA1ICBVUFN0YXRpb24gR1hUIDJVIFVQUworCTAwMDYgIFVQU3RhdGlvbiBHWFQgVVBTCisJMDAwNyAgTmZpbml0eSBQb3dlciBTeXN0ZW1zIFVQUworCTAwMDggIFBvd2VyU3VyZSBJbnRlcmFjdGl2ZSBVUFMKKzEwYjUgIENvbW9kbyAoUExYPykKKwk5MDYwICBUZXN0IEJvYXJkCisxMGI4ICBEaUJjb20KKwkwYmI4ICBEaUJjb20gVVNCIERWQi1UIHJlZmVyZW5jZSBkZXNpZ24gKE1PRDMwMCkgKGNvbGQpCisJMGJiOSAgRGlCY29tIFVTQiBEVkItVCByZWZlcmVuY2UgZGVzaWduIChNT0QzMDApICh3YXJtKQorCTBiYzYgIERpQmNvbSBVU0IyLjAgRFZCLVQgcmVmZXJlbmNlIGRlc2lnbiAoTU9EMzAwMFApIChjb2xkKQorCTBiYzcgIERpQmNvbSBVU0IyLjAgRFZCLVQgcmVmZXJlbmNlIGRlc2lnbiAoTU9EMzAwMFApICh3YXJtKQorMTBiYiAgVE0gVGVjaG5vbG9neSwgSW5jLgorMTBiYyAgRGluZ2luZyBUZWNobm9sb2d5IENvLiwgTHRkCisxMGJkICBUTVQgVGVjaG5vbG9neSwgSW5jLgorCTE0MjcgIEV0aGVybmV0CisxMGJmICBTbWFydEhvbWUKKwkwMDAxICBTbWFydEhvbWUgUG93ZXJMaW5jCisxMGM0ICBDeWduYWwgSW50ZWdyYXRlZCBQcm9kdWN0cywgSW5jLgorCTAwMDIgIEYzMnggVVNCWHByZXNzIERldmljZQorCTgwYTkgIENQMjEweCB0byBVQVJUIEJyaWRnZSBDb250cm9sbGVyCisJODBjYSAgQVRNMjQwMCBTZW5zb3IgRGV2aWNlCisJZWE2MCAgQ1AyMTB4IENvbXBvc2l0ZSBEZXZpY2UKKzEwYzUgIFNhbmVpIEVsZWN0cmljLCBJbmMuCisxMGM2ICBJbnRlYywgSW5jLgorMTBjYiAgRXJhdGVjaAorMTBjYyAgR0JNIENvbm5lY3RvciBDby4sIEx0ZAorCTExMDEgIE1QMyBQbGF5ZXIKKzEwY2QgIEt5Y29uLCBJbmMuCisxMGNlICBTaWxpY29uIExhYnMKKwllYTZhICBNb2JpRGF0YSBFREdFIFVTQiBNb2RlbQorMTBjZiAgVmVsbGVtYW4gQ29tcG9uZW50cywgSW5jLgorCTU1MDAgIDgwNTUgRXhwZXJpbWVudCBJbnRlcmZhY2UgQm9hcmQgKGFkZHJlc3M9MCkKKwk1NTAxICA4MDU1IEV4cGVyaW1lbnQgSW50ZXJmYWNlIEJvYXJkIChhZGRyZXNzPTEpCisJNTUwMiAgODA1NSBFeHBlcmltZW50IEludGVyZmFjZSBCb2FyZCAoYWRkcmVzcz0yKQorCTU1MDMgIDgwNTUgRXhwZXJpbWVudCBJbnRlcmZhY2UgQm9hcmQgKGFkZHJlc3M9MykKKzEwZDEgIEhvdHRpbmdlciBCYWxkd2luIE1lYXN1cmVtZW50CisJMDEwMSAgVVNCLU1vZHVsZSBmb3IgU3BpZGVyOCwgQ1AzMgorCTAyMDIgIENQMjIgLSBDb21tdW5pY2F0aW9uIFByb2Nlc3NvcgorCTAzMDEgIENQNDIgLSBDb21tdW5pY2F0aW9uIFByb2Nlc3NvcgorMTBkNCAgTWFuIEJvb24gTWFudWZhY3RvcnksIEx0ZAorMTBkNSAgVW5pIENsYXNzIFRlY2hub2xvZ3kgQ28uLCBMdGQKKzEwZDYgIEFjdGlvbnMgU2VtaWNvbmR1Y3RvciBDby4sIEx0ZAorCTEwMDAgIE1QMyBQbGF5ZXIKKwkxMTAwICBNUE1hbiBNUC1LaSAxMjggTVAzIFBsYXllci9SZWNvcmRlcgorCTExMDEgIEQtV2F2ZSAyR0IgTVA0IFBsYXllcgorCTg4ODggIEFERlUgRGV2aWNlCisJZmY1MSAgQURGVSBEZXZpY2UKKzEwZGUgIEF1dGhlbmV4LCBJbmMuCisxMGRmICBJbi1XaW4gRGV2ZWxvcG1lbnQsIEluYy4KKzEwZTAgIFBvc3QtT3AgVmlkZW8sIEluYy4KKzEwZTEgIENhYmxlUGx1cywgTHRkCisxMGUyICBOYWRhIEVsZWN0cm9uaWNzLCBMdGQKKzEwZWMgIFZhc3QgVGVjaG5vbG9naWVzLCBJbmMuCisxMGY1ICBUdXJ0bGUgQmVhY2gKKwkwMjAwICBBdWRpbyBBZHZhbnRhZ2UgUm9hZGllCisxMGZiICBQaWN0b3MgVGVjaG5vbG9naWVzLCBJbmMuCisxMGZkICBBbnViaXMgRWxlY3Ryb25pY3MsIEx0ZAorCTgwNGQgIFR5cGhvb24gV2Vic2hvdCBJSSBXZWJjYW0gW3pjMDMwMV0KKwk4MDUwICBGbHlDQU0tVVNCIDMwMCBYUDIKKwlkZTAwICBXaW5GYXN0IFdhbGtpZVRWIFdETSBDYXB0dXJlIERyaXZlci4KKzExMDAgIFZpclRvdWNoLCBMdGQKKwkwMDAxICBWVFBsYXllciBWVFAtMSBCcmFpbGxlIE1vdXNlCisxMTAxICBFYXN5UGFzcyBJbmR1c3RyaWFsIENvLiwgTHRkCisJMDAwMSAgRlNLIEVsZWN0cm9uaWNzIFN1cGVyIEdTTSBSZWFkZXIKKzExMDggIEJyaWdodGNvbSBUZWNobm9sb2dpZXMsIEx0ZAorMTExMCAgQW5hbG9nIERldmljZXMgQ2FuYWRhLCBMdGQgKEFsbGllZCBUZWxlc3luKQorCTVjMDEgIEh1YXdlaSBNVC04ODIgUmVtb3RlIE5ESVMgTmV0d29yayBEZXZpY2UKKwk2NDg5ICBBRFNMIEVUSC9VU0IgUlRSCisJOTAwMCAgQURTTCBMQU4gQWRhcHRlcgorCTkwMDEgIEFEU0wgTG9hZGVyCisJOTAwZiAgQVQtQVIyMTUgRFNMIE1vZGVtCisJOTAxMCAgQVQtQVIyMTUgRFNMIE1vZGVtCisJOTAyMSAgQURTTCBXQU4gQWRhcHRlcgorCTkwMjIgIEFEU0wgTG9hZGVyCisJOTAyMyAgQURTTCBXQU4gQWRhcHRlcgorCTkwMjQgIEFEU0wgTG9hZGVyCisJOTAzMSAgQURTTCBMQU4gQWRhcHRlcgorCTkwMzIgIEFEU0wgTG9hZGVyCisxMTExICBQYW5kb3JhIEludGVybmF0aW9uYWwgTHRkLgorCTg4ODggIEV2b2x1dGlvbiBEZXZpY2UKKzExMTIgIFlNIEVMRUNUUklDIENPLiwgTHRkCisxMTEzICBNZWRpb24gQUcKKzExMWUgIFZTTyBFbGVjdHJpYyBDby4sIEx0ZAorMTEyZSAgTWFzdGVyIEhpbGwgRWxlY3RyaWMgV2lyZSBhbmQgQ2FibGUgQ28uLCBMdGQKKzExMmYgIENlbGxvbiBJbnRlcm5hdGlvbmFsLCBJbmMuCisxMTMwICBUZW54IFRlY2hub2xvZ3ksIEluYy4KKwlmMjExICBVU0IgYXVkaW8gaGVhZHNldAorMTEzMSAgSW50ZWdyYXRlZCBTeXN0ZW0gU29sdXRpb24gQ29ycC4KKwkxMDAxICBLWS1CVDEwMCBCbHVldG9vdGggQWRhcHRlcgorCTEwMDIgIEJsdWV0b290aCBEZXZpY2UKKwkxMDAzICBCbHVldG9vdGggRGV2aWNlCisJMTAwNCAgQmx1ZXRvb3RoIERldmljZQorMTEzMiAgVG9zaGliYSBDb3JwLiwgRGlnaXRhbCBNZWRpYSBFcXVpcG1lbnQgW2hleF0KKwk0MzMxICBQRFItTTQvTTUvTTcwIERpZ2l0YWwgQ2FtZXJhCisJNDMzMiAgUERSLU02MCBEaWdpdGFsIENhbWVyYQorCTQzMzMgIFBEUi1NMjMwMC9QRFItTTcwMAorCTQzMzQgIFBEUi1NNjUKKwk0MzM1ICBQRFItTTYxCisJNDMzNyAgUERSLU0xMQorCTQzMzggIFBEUi1NMjUKKzExM2MgIEFyaW4gVGVjaCBDby4sIEx0ZAorMTEzZCAgTWFwb3dlciBFbGVjdHJvbmljcyBDby4sIEx0ZAorMTE0MSAgViBPbmUgTXVsdGltZWRpYSwgUHRlLiwgTHRkCisxMTQyICBDeWJlclNjYW4gVGVjaG5vbG9naWVzLCBJbmMuCisxMTQ1ICBKYXBhbiBSYWRpbyBDb21wYW55CisJMDAwMSAgQWlySCBQSE9ORSBBSC1KMzAwMVYvSjMwMDJWCisxMTQ2ICBTaGltYW5lIFNBTllPIEVsZWN0cmljIENvLiwgTHRkLgorMTE0NyAgRXZlciBHcmVhdCBFbGVjdHJpYyBXaXJlIGFuZCBDYWJsZSBDby4sIEx0ZAorMTE0YiAgU3BoYWlyb24gQWNjZXNzIFN5c3RlbXMgR21iSAorCTAxMTAgIFR1cmJvbGluayBVQjgwMVIgV0xBTiBVU0IgQWRhcHRlcgorMTE0YyAgVGluaXVzIE9sc2VuIFRlc3RpbmcgTWFjaGluZSBDby4sIEluYy4KKzExNGQgIEFscGhhIEltYWdpbmcgVGVjaG5vbG9neSBDb3JwLgorMTE1YiAgU2FsaXggVGVjaG5vbG9neSBDby4sIEx0ZC4KKzExNjIgIFNlY3VnZW4gQ29ycC4KKzExNjMgIERlTG9ybWUgUHVibGlzaGluZywgSW5jLgorCTAxMDAgIEVhcnRobWF0ZSBHUFMKKzExNjQgIFlVQU4gSGlnaC1UZWNoIERldmVsb3BtZW50IENvLiwgTHRkCisJMDMwMCAgRUxTQVZJU0lPTiA0NjBECisJMDYwMSAgQW5hbG9nIFRWIFR1bmVyCisJMDkwMCAgVGlnZXJCaXJkIEJNUDgzNyBVU0IyLjAgV0RNIEVuY29kZXIKKwkwYmM3ICBEaWdpdGFsIFRWIFR1bmVyCisxMTY1ICBUZWxzb24gRWxlY3Ryb25pY3MgQ28uLCBMdGQKKzExNjYgIEJhbnRhbSBJbnRlcmFjdGl2ZSBUZWNobm9sb2dpZXMKKzExNjcgIFNhbGllbnQgU3lzdGVtcyBDb3JwLgorMTE2OCAgQml6Q29ubiBJbnRlcm5hdGlvbmFsIENvcnAuCisxMTZlICBHaWdhc3RvcmFnZSBDb3JwLgorMTE2ZiAgU2lsaWNvbiAxMCBUZWNobm9sb2d5IENvcnAuCisxMTc1ICBTaGVuZ3lpaCBTdGVlbCBNb2xkIENvLiwgTHRkCisxMTdkICBTYW50YSBFbGVjdHJvbmljLCBJbmMuCisxMTdlICBKTkMsIEluYy4KKzExODIgIFZlbnR1cmUgQ29ycC4sIEx0ZAorMTE4MyAgQ29tcGFxIENvbXB1dGVyIENvcnAuIFtoZXhdIChEaWdpdGFsIERyZWFtID8/KQorCTAwMDEgIERpZ2l0YWxEcmVhbSBsJ2VzcGlvbiBYUworCTE5YzcgIElTRE4gVEEKKwk0MDA4ICA1NmsgRmF4TW9kZW0KKwk1MDRhICBQSkItMTAwIFBlcnNvbmFsIEp1a2Vib3gKKzExODQgIEt5b2NlcmEgRWxjbyBDb3JwLgorMTE4OCAgQmxvb21iZXJnIEwuUC4KKzExODkgIEFjZXIgQ29tbXVuaWNhdGlvbnMgJiBNdWx0aW1lZGlhCisJMDg5MyAgRVAtMTQyN1gtMiBFdGhlcm5ldCBBZGFwdGVyCisxMThmICBZb3UgWWFuZyBUZWNobm9sb2d5IENvLiwgTHRkCisxMTkwICBUcmlwYWNlCisxMTkxICBMb3lhbHR5IEZvdW5kZXIgRW50ZXJwcmlzZSBDby4sIEx0ZAorMTE5NiAgWWFua2VlIFJvYm90aWNzLCBMTEMKKwkwMDEwICBUcmlmaWQgQ2FtZXJhIHdpdGhvdXQgY29kZQorCTAwMTEgIFRyaWZpZCBDYW1lcmEKKzExOTcgIFRlY2hub2ltYWdpYSBDby4sIEx0ZAorMTE5OCAgU3RhclNoaW5lIFRlY2hub2xvZ3kgQ29ycC4KKzExOTkgIFNpZXJyYSBXaXJlbGVzcywgSW5jLgorCTAwMTkgIEFDNTk1VQorCTAwMjEgIEFDNTk3RQorCTAxMTAgIENvbXBvc2l0ZSBEZXZpY2UKKwkwMTEyICBDRE1BIDF4RVZETyBQQyBDYXJkLCBBaXJDYXJkIDU4MAorCTAxMjAgIEFDNTk1VQorCTAyMTggIE1DNTcyMCBXaXJlbGVzcyBNb2RlbQorCTY0NjcgIE1QIFNlcmllcyBOZXR3b3JrIEFkYXB0ZXIKKwk2NDY4ICBNUCBTZXJpZXMgTmV0d29yayBBZGFwdGVyCisJNjQ2OSAgTVAgU2VyaWVzIE5ldHdvcmsgQWRhcHRlcgorCTY4MDIgIE1DODc1NSBEZXZpY2UKKwk2ODAzICBNQzg3NjUgRGV2aWNlCisJNjgwNCAgTUM4NzU1IERldmljZQorCTY4MDUgIE1DODc2NSBEZXZpY2UKKwk2ODEyICBNQzg3NzUgRGV2aWNlCisJNjgyMCAgQUM4NzUgRGV2aWNlCisJNjgzMiAgTUM4NzgwIERldmljZQorCTY4MzMgIE1DODc4MSBEZXZpY2UKKwk2ODNhICBNQzg3ODUgRGV2aWNlCisJNjg1MCAgQWlyQ2FyZCA4ODAgRGV2aWNlCisJNjg1MSAgQWlyQ2FyZCA4ODEgRGV2aWNlCisJNjg1MiAgQWlyQ2FyZCA4ODBFIERldmljZQorCTY4NTMgIEFpckNhcmQgODgxRSBEZXZpY2UKKwk2ODU0ICBBaXJDYXJkIDg4NSBEZXZpY2UKKwk2ODcwICBNQzg3ODAgRGV2aWNlCisJNjg3MSAgTUM4NzgxIERldmljZQorMTE5YSAgWkhBTiBRSSBUZWNobm9sb2d5IENvLiwgTHRkCisxMTliICBydXdpZG8gYXVzdHJpYSBHbWJICisJMDQwMCAgSW5mcmFyZWQgS2V5Ym9hcmQgVjIuMDEKKzExYTAgIENoaXBjb24gQVMKKwllYjExICBDQzI0MDBFQiAyLjAgWmlnQmVlIFNuaWZmZXIKKzExYTMgIFRlY2hub3ZhcyBDby4sIEx0ZAorCTgwMzEgIE1QMyBQbGF5ZXIKKwk4MDMyICBNUDMgUGxheWVyCisxMWFhICBHbG9iYWxNZWRpYSBHcm91cCwgTExDCisJMTUxOCAgaVJFWiBLMgorMTFhYiAgRXhpdG8gRWxlY3Ryb25pY3MgQ28uLCBMdGQKKzExYjAgIEFURUNIIEZMQVNIIFRFQ0hOT0xPR1kKKzExZGIgIFRvcGZpZWxkIENvLiwgTHRkLgorCTEwMDAgIFBWUgorCTExMDAgIFBWUgorMTFlNiAgSy5JLiBUZWNobm9sb2d5IENvLiBMdGQuCisxMWY1ICBTaWVtZW5zIEFHICg/KQorCTAwMDEgIFNYMQorCTAwMDMgIE1vYmlsZSBwaG9uZSBVU0IgY2FibGUKKwkwMDA0ICBYNzUKKzExZjYgIFByb2xpZmljCisJMjAwMSAgV2lsbGNvbSBXU0lNCisxMWY3ICBBbGNhdGVsICg/KQorCTAyZGYgIFREMTAgTW9iaWxlIHBob25lIFVTQiBjYWJsZQorMTIwOSAgSW50ZXJCaW9tZXRyaWNzCisJMTAwMSAgVVNCIEh1YgorCTEwMDIgIFVTQiBSZWxhaXMKKwkxMDAzICBJQlNlY3VyZUNhbS1QCisJMTAwNCAgSUJTZWN1cmVDYW0tTworCTEwMDUgIElCU2VjdXJlQ2FtLU4KKzEyMGUgIEh1ZHNvbiBTb2Z0IENvLiwgTHRkCisxMjFlICBKdW5nc29mdCBDby4sIEx0ZAorCTM0MDMgIE11emlvIEpNMjUwIEF1ZGlvIFBsYXllcgorMTIyMyAgU0tZQ0FCTEUgRU5URVJQUklTRS4gQ08uLCBMVEQuCisxMjMwICBDaGlwaWRlYS1NaWNyb2VsZWN0cm9uaWNhLCBTLkEuCisxMjM1ICBOb3ZhdGlvbiBFTVMKKwkwMDAxICBSZU1PVEUgQXVkaW8vWFN0YXRpb24KKwkwMDAyICBTcGVlZGlvCisJNDY2MSAgUmVNT1RFMjUKKzEyNDEgIEJlbGtpbgorCTExMTEgIE1vdXNlCisJMTEyMiAgVHlwaG9vbiBTdHJlYW0gT3B0aWNhbCBNb3VzZSBVU0IrUFMvMgorCTExNTUgIFBTMi9VU0IgQnJvd3NlciBDb21ibyBNb3VzZQorCTExNjYgIE1JLTIxNTAgVHJ1c3QgTW91c2UKKwkxMTc3ICBGOEU4NDItREwgTW91c2UKKwkxNTAzICBLZXlib2FyZAorMTI0YSAgQWlyVmFzdAorCTQwMTcgIFBDLUNoaXBzIDgwMi4xMWIgQWRhcHRlcgorMTI0YiAgTnlrbyAoSG9uZXkgQmVlKQorCTRkMDEgIEFpcmZsbyBFWCBKb3lzdGljaworMTI1ZiAgQS1EQVRBIFRlY2hub2xvZ3kgQ28uLCBMdGQuCisxMjY0ICBDb3ZpZGllbiBFbmVyZ3ktYmFzZWQgRGV2aWNlcworMTI2NyAgTG9naWMzIC8gU3BlY3RyYVZpZGVvIHBsYworCTAxMDMgIEctNzIwIEtleWJvYXJkCisJMDIwMSAgQTRUZWNoIFNXT1AtMyBNb3VzZQorCWEwMDEgIEpQMjYwIFBDIEdhbWUgUGFkCisJYzAwMiAgV2lyZWxlc3MgT3B0aWNhbCBNb3VzZQorMTI2YyAgQXJpc3RvY3JhdCBUZWNobm9sb2dpZXMKKzEyNmQgIEJlbCBTdGV3YXJ0CisxMjZlICBTdHJvYmUgRGF0YSwgSW5jLgorMTI2ZiAgVHdpbk1PUworCTEzMjUgIE1vYmlsZSBEaXNrCisJMjE2OCAgTW9iaWxlIERpc2sgSUlJCisJYTAwNiAgRzI0MAorMTI3NSAgWGF4ZXJvIE1hcmluZSBTb2Z0d2FyZSBFbmdpbmVlcmluZywgTHRkLgorCTAwMDIgIFdlYXRoZXJGYXggMjAwMCBEZW1vZHVsYXRvcgorCTAwODAgIFNreUV5ZSBXZWF0aGVyIFNhdGVsbGl0ZSBSZWNlaXZlcgorMTI4NiAgTWFydmVsbCBTZW1pY29uZHVjdG9yLCBJbmMuCisJODAwMSAgQkxPQiBib290IGxvYWRlciBmaXJtd2FyZQorMTI5MiAgSW5ub21lZGlhCisJMDI1OCAgQ3JlYXRpdmUgTGFicyBWb0lQIEJsYXN0ZXIKKzEyOTMgIEJlbGtpbiBDb21wb25lbnRzIFtoZXhdCisJMDAwMiAgRjVVMDAyIFBhcmFsbGVsIFBvcnQgW3VzczcyMF0KKwkyMTAxICAxMDQta2V5IGtleWJvYXJkCisxMjk0ICBSSVNPIEtBR0FLVSBDT1JQLgorMTI5YiAgQ3liZXJUQU4gVGVjaG5vbG9neQorCTE2NjYgIFRHNTRVU0IKKzEyYTcgIFRyZW5kY2hpcCBUZWNobm9sb2dpZXMgQ29ycC4KKzEyYWIgIEhvbmV5IEJlZSBFbGVjdHJvbmljIEludGVybmF0aW9uYWwgTHRkLgorMTJiYSAgTGljZW5zZWQgYnkgU29ueSBDb21wdXRlciBFbnRlcnRhaW5tZW50IEFtZXJpY2EKKwkwMjAwICBIYXJtb25peCBHdWl0YXIgZm9yIFBsYXlTdGF0aW9uKFIpMworCTAyMTAgIEhhcm1vbml4IERydW0gS2l0IGZvciBQbGF5U3RhdGlvbihSKTMKKzEyZDEgIEh1YXdlaSBUZWNobm9sb2dpZXMgQ28uLCBMdGQuCisJMTAwMSAgRTYyMCBVU0IgTW9kZW0KKwkxMDAzICBFMjIwIEhTRFBBIE1vZGVtIC8gRTI3MCBIU0RQQS9IU1VQQSBNb2RlbQorMTJkMiAgTElORSBURUNIIElORFVTVFJJQUwgQ08uLCBMVEQuCisxMmQ3ICBCRVRURVIgV0lSRSBGQUNUT1JZIENPLiwgTFRELgorMTJlZiAgVGFwd2F2ZSwgSW5jLgorCTAxMDAgIFRhcHdhdmUgSGFuZGhlbGQgW1RhcHdhdmUgWm9kaWFjXQorMTJmNSAgRHluYW1pYyBTeXN0ZW0gRWxlY3Ryb25pY3MgQ29ycC4KKzEyZjcgIE1lbW9yZXggUHJvZHVjdHMsIEluYy4KKwkxYTAwICBURCBDbGFzc2ljIDAwM0IKKwkxZTIzICBUcmF2ZWxEcml2ZSAyMDA3IEZsYXNoIERyaXZlCisxMmZkICBBSU4gQ29tbS4gVGVjaG5vbG9neSBDby4sIEx0ZAorCTEwMDEgIEFXVTIwMDBiIDgwMi4xMWIgU3RpY2sKKzEzMDcgIFRyYW5zY2VuZCBJbmZvcm1hdGlvbiwgSW5jLgorCTAxNjMgIDUxMk1CIFVTQiBGbGFzaCBEcml2ZQorCTExNjkgIFRTMkdKRjIxMCBKZXRGbGFzaCAyMTAgMkdCCisxMzEwICBSb3BlcgorCTAwMDEgIENsYXNzIDEgQmx1ZXRvb3RoIERvbmdsZQorMTMxMiAgSUNTIEVsZWN0cm9uaWNzCisxMzFkICBOYXR1cmFsIFBvaW50CisJMDE1NSAgVHJhY2tJUiAzIFBybyBIZWFkIFRyYWNrZXIKKzEzMmIgIEtvbmljYSBNaW5vbHRhCisJMDAwMCAgRGltYWdlIEEyIENhbWVyYQorCTAwMDEgIE1pbm9sdGEgRGlNQUdFIEEyIChwdHApCisJMDAwMyAgRGltYWdlIFhnIENhbWVyYQorCTAwMDYgIERpbWFnZSBaMiBDYW1lcmEKKwkwMDA3ICBNaW5vbHRhIERpTUFHRSBaMiAoUGljdEJyaWRnZSBtb2RlKQorCTAwMDggIERpbWFnZSBYMjEgQ2FtZXJhCisJMDAwYSAgRGltYWdlIFNjYW4gRHVhbCBJVgorCTAwMGIgIERpbWFnZSBaMTAgQ2FtZXJhCisJMDAwZCAgRGltYWdlIFg1MCBDYW1lcmEgW3N0b3JhZ2U/XQorCTAwMGYgIERpbWFnZSBYNTAgQ2FtZXJhIFtwMnA/XQorCTAwMTAgIERpbWFnZSBHNjAwIENhbWVyYQorCTAwMTIgIERpbWFnZSBTY2FuIEVsaXRlNTQwMCAyCisJMDAxMyAgRGltYWdlIFgzMSBDYW1lcmEKKwkwMDE1ICBEaW1hZ2UgRzUzMCBDYW1lcmEKKwkwMDE3ICBEaW1hZ2UgWjMgQ2FtZXJhCisJMDAxOCAgTWlub2x0YSBEaU1BR0UgWjMgKFBpY3RCcmlkZ2UgbW9kZSkKKwkwMDE5ICBEaW1hZ2UgQTIwMCBDYW1lcmEKKwkwMDIxICBEaW1hZ2UgWjUgQ2FtZXJhCisJMDAyMiAgTWlub2x0YSBEaU1BR0UgWjUgKFBpY3RCcmlkZ2UgbW9kZSkKKzEzNDIgIE1vYmlsaXR5CisJMDIwMCAgRWFzaURvY2sgMjAwIEh1YgorCTAyMDEgIEVhc2lEb2NrIDIwMCBLZXlib2FyZCBhbmQgTW91c2UgUG9ydAorCTAyMDIgIEVhc2lEb2NrIDIwMCBTZXJpYWwgUG9ydAorCTAyMDMgIEVhc2lEb2NrIDIwMCBQcmludGVyIFBvcnQKKwkwMjA0ICBFdGhlcm5ldAorCTAzMDQgIEVhc2lEb2NrIEV0aGVybmV0CisxMzQ4ICBLYXRzdXJhZ2F3YSBFbGVjdHJpYyBDby4sIEx0ZC4KKzEzNGUgIERpZ2J5J3MgQml0cGlsZSwgSW5jLiBEQkEgRCBCaXQKKzEzNmIgIFNURUMKKzEzNzAgIFN3aXNzYml0CisJNjgyOCAgVmljdG9yaW5veCBGbGFzaCBEcml2ZQorMTM3MSAgRGljayBTbWl0aCBFbGVjdHJvbmljcworCTkwMjIgIFJUMjU3MworCTkwMzIgIEMtTmV0IENXRC04NTQgcmV2IEYKKzEzNzYgIFZpbXRyb24gRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisxMzg1ICBOZXRnZWFyLCBJbmMKKwk0MjUwICBXRzExMVQKKwk0MjUxICBXRzExMVQgKG5vIGZpcm13YXJlKQorCTVmMDAgIFdQTjExMSBSYW5nZU1heChUTSkgV2lyZWxlc3MgVVNCIDIuMCBBZGFwdGVyCisJNWYwMSAgV1BOMTExIChubyBmaXJtd2FyZSkKKzEzOGUgIEp1bmdvIExURAorCTkwMDAgIFJhaXNvbmFuY2UgUy5BLiBTVE0zMiBBUk0gZXZhbHVhdGlvbiBib2FyZAorMTM5MCAgVE9NVE9NIEIuVi4KKzEzOTUgIFNlbm5oZWlzZXIgQ29tbXVuaWNhdGlvbnMKKwkzNTU2ICBVU0IgSGVhZHNldAorMTM5OCAgUS10ZWMKKwkyMTAzICBVU0IgMi4wIFN0b3JhZ2UgRGV2aWNlCisxM2FkICBCYWx0ZWNoCisJOTk5OSAgQ2FyZCByZWFkZXIKKzEzYjAgIFBlcmtpbkVsbWVyIE9wdG9lbGVjdHJvbmljcworCTAwMGEgIEFsZXNpcyBQaG90b24gWDI1IE1JREkgQ29udHJvbGxlcgorMTNiMSAgTGlua3N5cworCTAwMGIgIFdVU0IxMSB2NC4wIDgwMi4xMWIgQWRhcHRlcgorCTAwMGQgIFdVU0I1NEcgV2lyZWxlc3MgQWRhcHRlcgorCTAwMTEgIFdVU0I1NEdQIHY0LjAgODAyLjExZyBBZGFwdGVyCisJMDAxOCAgVVNCMjAwTSAxMC8xMDAgRXRoZXJuZXQgQWRhcHRlcgorCTAwMWEgIEhVMjAwVFMgV2lyZWxlc3MgQWRhcHRlcgorCTAwMjAgIFdVU0I1NEdDIDgwMi4xMWcgQWRhcHRlciBbcmFsaW5rIHJ0NzNdCisJMDAyMyAgV1VTQjU0R1IKKwkwMDI0ICBXVVNCRjU0RyB2MS4xIDgwMi4xMWcgQWRhcHRlciB3LyBXaS1GaSBGaW5kZXIKKzEzYjMgIE5pcHBvbiBEaWNzIENvLiwgTHRkLgorMTNiZSAgUmljb2ggUHJpbnRpbmcgU3lzdGVtcywgTHRkLgorMTNjYSAgSnllVGFpIFByZWNpc2lvbiBJbmR1c3RyaWFsIENvLiwgTHRkLgorMTNjZiAgV2lzYWlyIEx0ZC4KKzEzZDEgIEEtTWF4IFRlY2hub2xvZ3kgTWFjYW8gQ29tbWVyY2lhbCBPZmZzaG9yZSBDby4gTHRkLgorMTNkMiAgU2hhcmsgTXVsdGltZWRpYQorCTA0MDAgIFBvY2tldCBFdGhlcm5ldCBba2xzaV0KKzEzZDMgIElNQyBOZXR3b3JrcworCTMyMDEgIFZpc2lvbkRUViBVU0ItVGVyL0hBTUEgVVNCIERWQi1UIGRldmljZSBjb2xkCisJMzIwMiAgVmlzaW9uRFRWIFVTQi1UZXIvSEFNQSBVU0IgRFZCLVQgZGV2aWNlIHdhcm0KKwkzMjAzICBEVFYtRFZCIFVEU1Q3MDIwQkRBIERWQi1TIEJveChEVkJTIGZvciBNQ0UyMDA1KQorCTMyMDQgIERUVi1EVkIgVURTVDcwMjBCREEgRFZCLVMgQm94KERWQlMgZm9yIE1DRTIwMDUpCisJMzIwNSAgRE5UViBMaXZlISBUaW55IFVTQjIgQkRBIChObyBSZW1vdGUpCisJMzIwNiAgRE5UViBMaXZlISBUaW55IFVTQjIgQkRBIChObyBSZW1vdGUpCisJMzIwNyAgRFRWLURWQiBVRFNUNzAyMEJEQSBEVkItUyBCb3goRFZCUyBmb3IgTUNFMjAwNSkKKwkzMjA4ICBEVFYtRFZCIFVEU1Q3MDIwQkRBIERWQi1TIEJveChEVkJTIGZvciBNQ0UyMDA1KQorCTMyMDkgIERUVi1EVkIgVURTVDcwMjJCREEgRFZCLVMgQm94KFdpdGhvdXQgSElEKQorCTMyMTEgIERUVi1EVkIgSHlicmlkIEFuYWxvZy9DYXB0dXJlIC8gUGlubmFjbGUgUENUViAzMTBlCisJMzIxMiAgRFRWLURWQiBVRFRUNzA0QyAtIERWQlQvTlRTQy9QQUwgRHJpdmVyKFBDTTQpCisJMzIxMyAgRFRWLURWQiBVRFRUNzA0RCAtIERWQlQvTlRTQy9QQUwgRHJpdmVyIChQQ000KQorCTMyMTQgIERUVi1EVkIgVURUVDcwNEYgLShNaW5pQ2FyZCkgRFZCVC9OVFNDL1BBTCBEcml2ZXIoV2l0aG91dCBISUQpCisJMzIxNSAgRFRWLURWQiBVREFUNzI0MCAtIEFUU0MvTlRTQy9QQUwgRHJpdmVyKFBDTTQpCisJMzIxNiAgRFRWLURWQiBVRFRUIDcwNDctVVNCIDIuMCBEVkItVCBEcml2ZXIKKwkzMjE3ICBEaWdpdGFsLVRWIFJlY2VpdmVyLgorCTMyMTkgIERUVi1EVkIgVURUVDcwNDkgLSBEVkItVCBEcml2ZXIoV2l0aG91dCBISUQpCisJMzIyMCAgRFRWLURWQiBVRFRUIDcwNDdNLVVTQiAyLjAgRFZCLVQgRHJpdmVyCisJMzIyMyAgRE5UViBMaXZlISBUaW55IFVTQjIgQkRBIChObyBSZW1vdGUpCisJMzIyNCAgRE5UViBMaXZlISBUaW55IFVTQjIgQkRBIChObyBSZW1vdGUpCisJMzIyNiAgRGlnaXRhbE5vdyBUaW55VHdpbiBEVkItVCBSZWNlaXZlcgorCTMyMzYgIERUVi1EVkIgVURUVCA3MDQ3QS1VU0IgMi4wIERWQi1UIERyaXZlcgorCTMyMzcgIERUVi1EVkIgVURUVCA3MDRKIC0gZHVhbCBEVkItVCBEcml2ZXIKKwkzMjM5ICBEVFYtRFZCIFVEVFQ3MDREIC0gRFZCVC9OVFNDL1BBTCBEcml2ZXIoV2l0aG91dCBISUQpCisJMzI0MCAgRFRWLURWQiBVRFhUVE02MDEwIC0gQS9EIERyaXZlcihXaXRob3V0IEhJRCkKKwkzMjQxICBEVFYtRFZCIFVEWFRUTTYwMTAgLSBBL0QgRHJpdmVyKFdpdGhvdXQgSElEKQorCTMyNDIgIERUVi1EVkIgVURBVDcyNDBMUCAtIEFUU0MvTlRTQy9QQUwgRHJpdmVyKFdpdGhvdXQgSElEKQorCTMyNDMgIERUVi1EVkIgVURYVFRNNjAxMCAtIEEvRCBEcml2ZXIoV2l0aG91dCBISUQpCisJMzI0NCAgRFRWLURWQiBVRFRUIDcwNDdaLVVTQiAyLjAgRFZCLVQgRHJpdmVyCisJMzI0NyAgODAyLjExIG4vZy9iIFdpcmVsZXNzIExBTiBBZGFwdGVyCisJNzAyMCAgRFRWLURWQiBVRFNUNzAyMEJEQSBEVkItUyBCb3goRFZCUyBmb3IgTUNFMjAwNSkKKwk3MDIyICBEVFYtRFZCIFVEU1Q3MDIyQkRBIERWQi1TIEJveChXaXRob3V0IEhJRCkKKzEzZGMgIEFMRVJFT04sIElOQy4KKzEzZGQgIGkuVGVjaCBEeW5hbWljIExpbWl0ZWQKKzEzZTEgIEthaWJvIFdpcmUgJiBDYWJsZSAoU2hlbnpoZW4pIENvLiwgTHRkLgorMTNlNSAgUmFuZQorCTAwMDEgIFNMLTEKKzEzZTYgIFRlY2hub1Njb3BlIENvLiwgTHRkLgorMTNmZCAgSW5pdGlvIENvcnBvcmF0aW9uCisxM2ZlICBLaW5nc3RvbiBUZWNobm9sb2d5IENvbXBhbnkgSW5jLgorCTFhMDAgIDUxMk1CLzFHQiBGbGFzaCBEcml2ZQorCTFhMjMgIDUxMk1CIEZsYXNoIERyaXZlCisJMWQwMCAgRGF0YVRyYXZlbGVyIDIuMCAxR0IvNEdCIEZsYXNoIERyaXZlIC8gUGF0cmlvdCBYcG9ydGVyIDRHQiBGbGFzaCBEcml2ZQorCTFmMDAgIERhdGFUcmF2ZWxlciAyLjAgNEdCIEZsYXNoIERyaXZlCisxNDAwICBBeHhpb24gR3JvdXAgQ29ycC4KKzE0MDIgIEJvd2UgQmVsbCAmIEhvd2VsbAorMTQwMyAgU2l0cm9uaXgKKwkwMDAxICBEaWdpdGFsIFBob3RvIEZyYW1lCisxNDBlICBUZWxlY2hpcHMsIEluYy4KKzE0MTAgIE5vdmF0ZWwgV2lyZWxlc3MKKwkxMTEwICBNZXJsaW4gUzYyMAorCTExMjAgIE1lcmxpbiBFWDcyMAorCTExMzAgIE1lcmxpbiBTNzIwCisJMTQwMCAgTWVybGluIFU3NDAKKwkyMTEwICBPdmF0aW9uIFU3MjAvTUNEMzAwMAorCTQxMDAgIFU3MjcKKzE0MTUgIE5hbSBUYWkgRSZFIFByb2R1Y3RzIEx0ZC4gb3IgT21uaVZpc2lvbiBUZWNobm9sb2dpZXMsIEluYy4KKwkwMDAwICBTb255IFNpbmdTdGFyIFVTQk1JQworCTIwMDAgIFNvbnkgUGxheXN0YXRpb24gRXllCisxNDE5ICBBQklMSVRZIEVOVEVSUFJJU0UgQ08uLCBMVEQuCisxNDI5ICBWZWdhIFRlY2hub2xvZ2llcyBJbmR1c3RyaWFsIChBdXN0cmlhKSBDby4KKzE0MzAgIFJlZE9jdGFuZQorMTQzMSAgUGVydGVjaCBSZXNvdXJjZXMsIEluYy4KKzE0MzUgIFdpc3Ryb24gTmVXZWIKKwkwNzExICBVUjA1NUcKKwkwODI2ICBBUjU1MjMKKwkwODI3ICBBUjU1MjMgKG5vIGZpcm13YXJlKQorCTA4MjggIEFSNTUyMworCTA4MjkgIEFSNTUyMyAobm8gZmlybXdhcmUpCisxNDM2ICBEZW5hbGkgU29mdHdhcmUsIEluYy4KKzE0M2MgIEFsdGVrIENvcnBvcmF0aW9uCisxNDUzICBSYWRpbyBTaGFjaworCTQwMjYgIDI2LTE4MyBTZXJpYWwgQ2FibGUKKzE0NTYgIEV4dGVuZGluZyBXaXJlICYgQ2FibGUgQ28uLCBMdGQuCisxNDU3ICBGaXJzdCBJbnRlcm5hdGlvbmFsIENvbXB1dGVyLCBJbmMuCisJNTExNyAgT3Blbk1va28gTmVvMTk3MyBrZXJuZWwgdXNibmV0IChnX2V0aGVyLCBDREMgRXRoZXJuZXQpIG1vZGUKKwk1MTE4ICBPcGVuTW9rbyBOZW8xOTczIERlYnVnIGJvYXJkIChWMispCisJNTExOSAgT3Blbk1va28gTmVvMTk3MyB1LWJvb3QgY2RjX2FjbSBzZXJpYWwgcG9ydAorCTUxMjAgIE9wZW5Nb2tvIE5lbzE5NzMgdS1ib290IHVzYnR0eSBnZW5lcmljIHNlcmlhbAorCTUxMjEgIE9wZW5Nb2tvIE5lbzE5NzMga2VybmVsIG1hc3Mgc3RvcmFnZSAoZ19zdG9yYWdlKSBtb2RlCisJNTEyMiAgT3Blbk1va28gTmVvMTk3MyBrZXJuZWwgY2RjX2V0aGVyIFVTQiBuZXR3b3JrCisJNTEyMyAgT3Blbk1va28gTmVvMTk3MyBpbnRlcm5hbCBVU0IgQ1NSNCBtb2R1bGUKKwk1MTI0ICBPcGVuTW9rbyBOZW8xOTczIEJsdWV0b290aCBEZXZpY2UgSUQgc2VydmljZQorMTQ2MSAgU3RhY2NhdG8gQ29tbXVuaWNhdGlvbnMKKzE0NjIgIE1pY3JvIFN0YXIgSW50ZXJuYXRpb25hbAorCTU1MTIgIE1lZ2FTdGljay0xIEZsYXNoIFN0aWNrCisxNDcyICBIdWF3ZWktM0NvbQorCTAwMDkgIEFvbHluayBXVUIzMjBnCisxNDdhICBGb3Jtb3NhIEluZHVzdHJpYWwgQ29tcHV0aW5nLCBJbmMuCisJZTAxNSAgZUhvbWUgSW5mcmFyZWQgUmVjZWl2ZXIKKwllMDE2ICBlSG9tZSBJbmZyYXJlZCBSZWNlaXZlcgorMTQ3ZiAgSGFtYSBHbWJIICYgQ28uLCBLRworMTQ4NCAgRWxzYSBBRyBbaGV4XQorCTE3NDYgIEVjb21vIDE5SDk5IE1vbml0b3IKKwk3NjE2ICBFbHNhIEh1YgorMTQ4NSAgU2lsaWNvbQorCTAwMDEgIFUyRQorCTAwMDIgIFBzaW9uIEdvbGQgUG9ydCBFdGhlcm5ldAorMTQ4NyAgRFNQIEdyb3VwLCBMdGQuCisxNDhlICBFVkFUUk9OSVggU0EKKzE0OGYgIFJhbGluayBUZWNobm9sb2d5LCBDb3JwLgorCTE3MDYgIFJUMjUwMFVTQiBXaXJlbGVzcyBBZGFwdGVyCisJMjU3MCAgODAyLjExZyBXaUZpCisJMjU3MyAgUlQyNTAxVVNCIFdpcmVsZXNzIEFkYXB0ZXIKKwkyNjcxICBSVDI2MDFVU0IgV2lyZWxlc3MgQWRhcHRlcgorCTkwMjAgIFJUMjUwMFVTQiBXaXJlbGVzcyBBZGFwdGVyCisJOTAyMSAgUlQyNTAxVVNCIFdpcmVsZXNzIEFkYXB0ZXIKKzE0OTcgIFBhbnN0cm9uZyBDb21wYW55IEx0ZC4KKzE0OWEgIEltYWdpbmF0aW9uIFRlY2hub2xvZ2llcworCTIxMDcgIERCWDEgRFNQIGNvcmUKKzE0YWEgIEFWZXJNZWRpYSAoYWdhaW4pIG9yIEMmRQorCTAwMDEgIEF2ZXJtZWRpYSBBdmVyVFYgRFZCVCBVU0IxLjEgKGNvbGQpCisJMDAwMiAgQXZlcm1lZGlhIEF2ZXJUViBEVkJUIFVTQjEuMSAod2FybSkKKwkwMjAxICBBVmVybWVkaWEvWWFrdW1vL0hhbWEvVHlwaG9vbiBEVkItVCBVU0IyLjAgKGNvbGQpCisJMDIyMSAgQVZlcm1lZGlhIERWQlQgVHVuZXIgRG9uZ2xlCisJMDMwMSAgQVZlcm1lZGlhL1lha3Vtby9IYW1hL1R5cGhvb24gRFZCLVQgVVNCMi4wICh3YXJtKQorMTRhZCAgQ1RLIENvcnBvcmF0aW9uCisxNGFlICBQcmludHJvbml4IEluYy4KKzE0YWYgIEFUUCBFbGVjdHJvbmljcyBJbmMuCisxNGIwICBTdGFyVGVjaC5jb20gTHRkLgorMTRiMiAgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMKKwkzYTkzICBVU0IgV0xBTiBEZXZpY2UKKwkzYzAyICBDNTRSVSBXTEFOCisJM2MyMiAgQzU0UlUKKzE0YzAgIFJvY2t3ZWxsIEF1dG9tYXRpb24sIEluYy4KKzE0YzIgIEdlbWxpZ2h0IENvbXB1dGVyLCBMdGQKKwkwMjUwICBTdG9yYWdlIEFkYXB0ZXIgVjIKKwkwMzUwICBTdG9yYWdlIEFkYXB0ZXIgVjIKKzE0Y2QgIFN1cGVyIFRvcAorCTY2MDAgIFVTQiAyLjAgSURFIERFVklDRQorMTRkOCAgSkFNRVIgSU5EVVNUUklFUyBDTy4sIExURC4KKzE0ZGQgIFJhcml0YW4gQ29tcHV0ZXIsIEluYy4KKzE0ZTUgIFNBSU4gSW5mb3JtYXRpb24gJiBDb21tdW5pY2F0aW9ucyBDby4sIEx0ZC4KKzE0ZWEgIFBsYW5leCBDb21tdW5pY2F0aW9ucworCWFiMTAgIEdXLVVTNTRHWgorCWFiMTEgIEdVLTEwMDBUCisJYWIxMyAgR1ctVVM1NE1pbmkKKzE0ZWQgIFNodXJlIEluYy4KKzE1MDAgIEVsbGlzeXMKKzE1MDEgIFBpbmUtVHVtIEVudGVycHJpc2UgQ28uLCBMdGQuCisxNTEzICBIeXBlcmNvbQorMTUxNiAgQ29tcFVTQQorCTg2MjggIDEyOE0gUGVuIERyaXZlCisxNTE4ICBDaGVzaGlyZSBFbmdpbmVlcmluZyBDb3JwLgorCTAwMDEgIEhEUmV5ZSBIaWdoIER5bmFtaWMgUmFuZ2UgQ2FtZXJhCisJMDAwMiAgSERSZXllIChiZWZvcmUgZmlybXdhcmUgbG9hZHMpCisxNTIwICBCaXR3aXJlIENvcnAuCisxNTI0ICBFTkUgVGVjaG5vbG9neSBJbmMKKwk2NjgwICBVVFMgNjY4MAorMTUyNyAgU2lsaWNvbiBQb3J0YWxzCisJMDIwMCAgWUFQIFBob25lIChubyBmaXJtd2FyZSkKKwkwMjAxICBZQVAgUGhvbmUKKzE1MjkgIFVCSVFVQU0gQ28uLCBMdGQuCisJMzEwMCAgQ0RNQSAxeFJUVCBVU0IgTW9kZW0gKFUtMTAwLzEwNS8yMDAvMzAwLzUyMCkKKzE1MmQgIEpNaWNyb24gVGVjaG5vbG9neSBDb3JwLiAvIEpNaWNyb24gVVNBIFRlY2hub2xvZ3kgQ29ycC4KKwkyMzM4ICBKTTIwMzM3IEhpLVNwZWVkIFVTQiB0byBTQVRBICYgUEFUQSBDb21ibyBCcmlkZ2UKKzE1MmUgIExHIChITERTKQorCWUwMDEgIEdTQS01MTIwRCBEVkQtUlcKKzE1MzIgIFJhemVyIFVTQSwgTHRkCisJMDAwMSAgUlowMS0wMjAzMDAgT3B0aWNhbCBNb3VzZSBbRGlhbW9uZGJhY2tdCisJMDAwMyAgS3JhaXQgTW91c2UKKwkwMDA3ICBEZWF0aEFkZGVyIE1vdXNlCisJMDEwMiAgVGFyYW50dWxhIEtleWJvYXJkCisxNTQ2ICBVLUJsb3ggQUcKKzE1NGIgIFBOWQorCTAwMTAgIFVTQiAyLjAgRmxhc2ggRHJpdmUKKzE1NGQgIENvbm5lY3RDb3VudHkgSG9sZGluZ3MgQmVyaGFkCisxNTRlICBEJk0gSG9sZGluZ3MsIEluYy4gKERlbm9uL01hcmFudHopCisJMzAwMCAgTWFyYW50eiBSQzkwMDEgUmVtb3RlIENvbnRyb2wKKzE1NTQgIFByb2xpbmsgTWljcm9zeXN0ZW1zIENvcnAuCisxNTU3ICBPUU8KKwkwMDAyICBtb2RlbCAwMSBXaUZpIGludGVyZmFjZQorCTAwMDMgIG1vZGVsIDAxIEJsdWV0b290aCBpbnRlcmZhY2UKKwk3NzIwICBtb2RlbCAwMSsgRXRoZXJuZXQKKwk4MTUwICBtb2RlbCAwMSBFdGhlcm5ldCBpbnRlcmZhY2UKKzE1NjggIFN1bmYgUHUgVGVjaG5vbG9neSBDby4sIEx0ZAorMTU2ZiAgUXVhbnR1bSBDb3Jwb3JhdGlvbgorMTU3MCAgQUxMVE9QIFRFQ0hOT0xPR1kgQ08uLCBMVEQuCisxNTdiICBLZXRyb24gU1JMCisxNTdlICBUUkVORG5ldAorCTMwMDYgIFRFVy00NDRVQiBFVQorCTMwMDcgIFRFVy00NDRVQiBFVSAobm8gZmlybXdhcmUpCisJMzAwYSAgVEVXLTQyOVVCIDgwMi4xMWcgQWRhcHRlciB3aXRoIEhvdFNwb3QgRGV0ZWN0b3IKKwkzMDBiICBURVctNDI5VUIKKwkzMDBkICBURVctNDI5VUIgQzEKKwkzMjA0ICBBTEwwMjk4IHYyCisJMzIwNSAgQVI1NTIzCisJMzIwNiAgQVI1NTIzIChubyBmaXJtd2FyZSkKKzE1ODIgIEZpYmVybGluZQorCTYwMDMgIFdMLTQzMFUKKzE1ODcgIFNNQSBUZWNobm9sb2dpZSBBRworMTU4ZCAgT2FrbGV5IEluYy4KKzE1OTggIEt1bnNoYW4gR3VvamkgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisxNWEyICBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorMTVhOCAgVGVhbXMgUG93ZXIgTGltaXRlZAorMTVhYSAgR2VhcndheSBFbGVjdHJvbmljcyAoRG9uZyBHdWFuKSBDby4sIEx0ZC4KKzE1YmEgIE9saW1leCBMdGQuCisJMDAwMyAgT3Blbk9DRCBKVEFHCisJMDAwNCAgT3Blbk9DRCBKVEFHIFRJTlkKKzE1YzIgIFNvdW5kR3JhcGggSW5jLgorCWZmZGMgIGlNT04gUEFEIFJlbW90ZSBDb250cm9sbGVyCisxNWM2ICBMYWJvcmF0b2lyZXMgTVhNCisJMTAwMCAgRGlnaXN0aW1TUCAoY29sZCkKKwkxMDAxICBEaWdpc3RpbVNQICh3YXJtKQorCTEwMDIgIERpZ2ltYXBTUCBVU0IgKGNvbGQpCisJMTAwMyAgRGlnaW1hcFNQIFVTQiAod2FybSkKKzE1YzkgIEQtQm94IFRlY2hub2xvZ2llcworMTVjYSAgVGV4dGVjaCBJbnRlcm5hdGlvbmFsIEx0ZC4KKwkwMGMzICBNaW5pIE9wdGljYWwgTW91c2UKKzE1ZDUgIENvdWxvbWIgRWxlY3Ryb25pY3MgTHRkLgorMTVkYyAgSHluaXggU2VtaWNvbmR1Y3RvciBJbmMuCisxNWUwICBTZW9uZyBKaSBJbmR1c3RyaWFsIENvLiwgTHRkLgorMTVlMSAgUlNBCisJMjAwNyAgUlNBIFNlY3VySUQgKFIpIEF1dGhlbnRpY2F0b3IKKzE1ZTggIFNvaG9XYXJlCisJOTEwMCAgTlVCMTAwIEV0aGVybmV0IFtwZWdhc3VzXQorCTkxMTAgIDEwLzEwMCBVU0IgRXRoZXJuZXQKKzE1ZTkgIFBhY2lmaWMgRGlnaXRhbCBDb3JwLgorCTA0Y2UgIE1lbW9yeUZyYW1lIE1GLTU3MAorCTE5NjggIE1lbW9yeUZyYW1lIE1GLTU3MAorCTE5NjkgIERpZ2l0YWwgRnJhbWUKKzE1ZWMgIEJlbGNhcnJhIFRlY2hub2xvZ2llcyBDb3JwLgorMTVmNCAgSGFuZlRlaworCTAwMDEgIEhhbmZUZWsgVU1ULTAxMCBVU0IyLjAgRFZCLVQgKGNvbGQpCisJMDAyNSAgSGFuZlRlayBVTVQtMDEwIFVTQjIuMCBEVkItVCAod2FybSkKKzE2MDQgIFRhc2NhbQorCTgwMDAgIFVTLTQyOCBBdWRpby9NaWRpIENvbnRyb2xsZXIgKHdpdGhvdXQgZncpCisJODAwMSAgVVMtNDI4IEF1ZGlvL01pZGkgQ29udHJvbGxlcgorCTgwMDQgIFVTLTIyNCBBdWRpby9NaWRpIENvbnRyb2xsZXIgKHdpdGhvdXQgZncpCisJODAwNSAgVVMtMjI0IEF1ZGlvL01pZGkgQ29udHJvbGxlcgorCTgwMDYgIFVTLTEyMiBBdWRpby9NaWRpIEludGVyZmFjZSAod2l0aG91dCBmdykKKwk4MDA3ICBVUy0xMjIgQXVkaW8vTWlkaSBJbnRlcmZhY2UKKzE2MDYgIFVtYXggW2hleF0KKwkwMDAyICBBc3RyYSAxMjM2VSBTY2FubmVyCisJMDAxMCAgQXN0cmEgMTIyMFUKKwkwMDMwICBBc3RyYSAyMDAwVQorCTAwNTAgIFNjYW5uZXIKKwkwMDYwICBBc3RyYSAzNDAwVQorCTAxMzAgIEFzdHJhIDIxMDBVCisJMDE2MCAgQXN0cmEgNTQwMFUKKwkwMjMwICBBc3RyYSAyMjAwLzIyMDBTVQorCTAzNTAgIEFzdHJhIDQ4MDAvNDg1MCBTY2FubmVyCisJMTAzMCAgQXN0cmEgNDAwMFUKKwkxMjIwICBHZW5lc3lzIExvZ2ljIFNjYW5uZXIgQ29udHJvbGxlciBOVDUuMAorCTIwMTAgIEFzdHJhQ2FtIERpZ2l0YWwgQ2FtZXJhCisJMjAyMCAgQXN0cmFDYW0gMTAwMAorCTIwMzAgIEFzdHJhQ2FtIDE4MDAgRGlnaXRhbCBDYW1lcmEKKzE2MDggIEluc2lkZSBPdXQgTmV0d29ya3MgW2hleF0KKwkwMDAxICBFZGdlUG9ydC80IFNlcmlhbCBQb3J0CisJMDAwMiAgRWRnZXBvcnQvOAorCTAwMDMgIFJhcGlkcG9ydC80CisJMDAwNCAgRWRnZXBvcnQvNAorCTAwMDUgIEVkZ2Vwb3J0LzIKKwkwMDA2ICBFZGdlcG9ydC80aQorCTAwMDcgIEVkZ2Vwb3J0LzJpCisJMDAwOCAgRWRnZXBvcnQvOAorCTAwMGMgIEVkZ2Vwb3J0LzQyMQorCTAwMGQgIEVkZ2Vwb3J0LzIxCisJMDAwZSAgRWRnZXBvcnQvNAorCTAwMGYgIEVkZ2Vwb3J0LzgKKwkwMDEwICBFZGdlcG9ydC8yCisJMDAxMSAgRWRnZXBvcnQvNAorCTAwMTIgIEVkZ2Vwb3J0LzQxNgorCTAwMTQgIEVkZ2Vwb3J0LzhpCisJMDAxOCAgRWRnZXBvcnQvNDEyCisJMDAxOSAgRWRnZXBvcnQvNDEyCisJMDAxYSAgRWRnZXBvcnQvMisyaQorCTAxMDEgIEVkZ2Vwb3J0LzQKKwkwMTA1ICBFZGdlcG9ydC8yCisJMDEwNiAgRWRnZXBvcnQvNGkKKwkwMTA3ICBFZGdlcG9ydC8yaQorCTAxMGMgIEVkZ2Vwb3J0LzQyMQorCTAxMGQgIEVkZ2Vwb3J0LzIxCisJMDExMCAgRWRnZXBvcnQvMgorCTAxMTEgIEVkZ2Vwb3J0LzQKKwkwMTEyICBFZGdlcG9ydC80MTYKKwkwMTE0ICBFZGdlcG9ydC84aQorCTAyMDEgIEVkZ2Vwb3J0LzQKKwkwMjAzICBSYXBpZHBvcnQvNAorCTAyMDQgIEVkZ2Vwb3J0LzQKKwkwMjA1ICBFZGdlcG9ydC8yCisJMDIwNiAgRWRnZXBvcnQvNGkKKwkwMjA3ICBFZGdlcG9ydC8yaQorCTAyMGMgIEVkZ2Vwb3J0LzQyMQorCTAyMGQgIEVkZ2Vwb3J0LzIxCisJMDIwZSAgRWRnZXBvcnQvNAorCTAyMGYgIEVkZ2Vwb3J0LzgKKwkwMjEwICBFZGdlcG9ydC8yCisJMDIxMSAgRWRnZXBvcnQvNAorCTAyMTIgIEVkZ2Vwb3J0LzQxNgorCTAyMTQgIEVkZ2Vwb3J0LzhpCisJMDIxNSAgRWRnZXBvcnQvMQorCTAyMTYgIEVQT1MvNDQKKwkwMjE3ICBFZGdlcG9ydC80MgorCTAyMWEgIEVkZ2Vwb3J0LzIrMmkKKwkwMjFiICBFZGdlcG9ydC8yYworCTAyMWMgIEVkZ2Vwb3J0LzIyMWMKKwkwMjFkICBFZGdlcG9ydC8yMmMKKwkwMjFlICBFZGdlcG9ydC8yMWMKKwkwMjFmICBFZGdlcG9ydC82MgorCTAyNDAgIEVkZ2Vwb3J0LzEKKwkwMjQxICBFZGdlcG9ydC8xaQorCTAyNDIgIEVkZ2Vwb3J0LzRzCisJMDI0MyAgRWRnZXBvcnQvOHMKKwkwMjQ0ICBFZGdlcG9ydC84CisJMDI0NSAgRWRnZXBvcnQvMjJjCisJMDMwMSAgV2F0Y2hwb3J0L1AKKwkwMzAyICBXYXRjaHBvcnQvTQorCTAzMDMgIFdhdGNocG9ydC9XCisJMDMwNCAgV2F0Y2hwb3J0L1QKKwkwMzA1ICBXYXRjaHBvcnQvSAorCTAzMDYgIFdhdGNocG9ydC9FCisJMDMwNyAgV2F0Y2hwb3J0L0wKKwkwMzA4ICBXYXRjaHBvcnQvUgorCTAzMDkgIFdhdGNocG9ydC9BCisJMDMwYSAgV2F0Y2hwb3J0L0QKKwkwMzBiICBXYXRjaHBvcnQvRAorCTAzMGMgIFBvd2VyIE1hbmFnZW1lbnQgUG9ydAorCTAzMGUgIFBvd2VyIE1hbmFnZW1lbnQgUG9ydAorCTAzMGYgIFdhdGNocG9ydC9HCisJMDMxMCAgV2F0Y2hwb3J0L1RjCisJMDMxMSAgV2F0Y2hwb3J0L0hjCisJMTQwMyAgTXVsdGlUZWNoIFN5c3RlbXMgTVQ0WDU2IE1vZGVtCisJMWExNyAgQWdpbGVudCBUZWNobm9sb2dpZXMgKEU2NDczKQorMTYxOSAgTCAmIEsgUHJlY2lzaW9uIFRlY2hub2xvZ3kgQ28uLCBMdGQuCisxNjIxICBXaW9uaWNzIFJlc2VhcmNoCisxNjI4ICBTdG9uZXN0cmVldCBPbmUsIEluYy4KKzE2MmEgIEFpcmdvIE5ldHdvcmtzIEluYy4KKzE2MmYgIFdpUXVlc3QgQ29tbXVuaWNhdGlvbnMsIEluYy4KKzE2MzEgIEdvb2QgV2F5IFRlY2hub2xvZ3kKKwk2MjAwICBHV1VTQjJFCisJYzAxOSAgUlQyNTczCisxNjQ1ICBFbnRyZWdhIFtoZXhdCisJMDAwMSAgMVMgU2VyaWFsIFBvcnQKKwkwMDAyICAyUyBTZXJpYWwgUG9ydAorCTAwMDMgIDFTMjUgU2VyaWFsIFBvcnQKKwkwMDA0ICA0UyBTZXJpYWwgUG9ydAorCTAwMDUgIEU0NSBFdGhlcm5ldCBba2xzaV0KKwkwMDA2ICBQYXJhbGxlbCBQb3J0CisJMDAwNyAgVTEtU0MyNSBTQ1NJCisJMDAwOCAgRXRoZXJuZXQKKwkwMDE2ICBCaS1kaXJlY3Rpb25hbCB0byBQYXJhbGxlbCBQcmludGVyIENvbnZlcnRlcgorCTAwODAgIDEgcG9ydCB0byBTZXJpYWwgQ29udmVydGVyCisJMDA4MSAgMSBwb3J0IHRvIFNlcmlhbCBDb252ZXJ0ZXIKKwkwMDkzICAxUzkgU2VyaWFsIFBvcnQKKwk4MDAwICBFWi1VU0IKKwk4MDAxICAxIHBvcnQgdG8gU2VyaWFsCisJODAwMiAgMnggU2VyaWFsIFBvcnQKKwk4MDAzICAxIHBvcnQgdG8gU2VyaWFsCisJODAwNCAgMlU0UyBzZXJpYWwvdXNiIGh1YgorCTgwMDUgIEV0aGVybmV0CisJODA4MCAgMSBwb3J0IHRvIFNlcmlhbAorCTgwODEgIDEgcG9ydCB0byBTZXJpYWwKKwk4MDkzICBQb3J0R2VhciBTZXJpYWwgUG9ydAorMTY0YSAgQ2hpcFgKKzE2NTcgIFN0cnVjayBJbm5vdmF0aXZlIFN5c3RlbWUgR21iSAorCTMxNTAgIFNJUzMxNTAgVVNCMi4wIHRvIFZNRSBpbnRlcmZhY2UKKzE2NjAgIENyZWF0aXggUG9seW1lZGlhIEdtYkgKKzE2NjggIEFjdGlvbnRlYyBFbGVjdHJvbmljcywgSW5jLiBbaGV4XQorCTAwMDkgIEdhdGV3YXkKKwkwMzMzICBNb2RlbQorCTAzNTggIEludGVybmV0UGhvbmVXaXphcmQKKwkwNDA1ICBHYXRld2F5CisJMDQwOCAgUHJpc20yLjUgODAyLjExYiBBZGFwdGVyCisJMDQxMyAgR2F0ZXdheQorCTA0MjEgIFByaXNtMi41IDgwMi4xMWIgQWRhcHRlcgorCTA0NDEgIElCTSBJbnRlZ3JhdGVkIEJsdWV0b290aCBJSQorCTA1MDAgIEJUTTIwMEIgQmx1ZVRvb3RoIEFkYXB0ZXIKKwkxMDUwICA4MDIuMTFnIFdpcmVsZXNzIE1pbmkgYWRhcHRlcgorCTE0NDEgIElCTSBJbnRlZ3JhdGVkIEJsdWV0b290aCBJSQorCTI0NDEgIEJNREMtMiBJQk0gQmx1ZXRvb3RoIElJSSB3LjU2aworCTM0NDEgIElCTSBJbnRlZ3JhdGVkIEJsdWV0b290aCBJSUkKKwk2MDEwICBHYXRld2F5CisJNjA5NyAgODAyLjExYiBXaXJlbGVzcyBBZGFwdGVyCisJNjEwNiAgUk9QRVggRnJlZUxhbiA4MDIuMTFiCisJNzYwNSAgVUFUMSBXaXJlbGVzcyBFdGhlcm5ldCBBZGFwdGVyCisxNjY5ICBQaUtST04gTHRkLiBbaGV4XQorCTEwMDEgIHVMYW4yVVNCIENvbnZlcnRlciAtIFBTMSBwcm90b2NvbAorMTY3OSAgVG90YWwgUGhhc2UKKwkyMDAxICBCZWFnbGUgVVNCIDEyIFByb3RvY29sIEFuYWx5emVyCisxNjgyICBNYXh3aXNlIFByb2R1Y3Rpb24gRW50ZXJwcmlzZSBMdGQuCisxNjg0ICBHb2RzcGVlZCBDb21wdXRlciBDb3JwLgorMTY4NiAgWk9PTSBDb3Jwb3JhdGlvbgorCTAwNDUgIEg0IERpZ2l0YWwgUmVjb3JkZXIKKzE2ODcgIEtpbmdtYXggRGlnaXRhbCBJbmMuCisxNjhjICBBdGhlcm9zIENvbW11bmljYXRpb25zCisJMDAwMSAgQVI1NTIzCisJMDAwMiAgQVI1NTIzIChubyBmaXJtd2FyZSkKKzE2OTAgIEFza2V5IENvbXB1dGVyIENvcnAuIFtoZXhdCisJMDEwMSAgQ3JlYXRpdmUgTW9kZW0gQmxhc3RlciBERTU2NzAKKwkwMTAyICBDREMgTW9kZW0gQm9hcmQKKwkwMTAzICBBc2tleSAxNDU2IFZRRS1SMyBNb2RlbSBbY29uZXhhbnRdCisJMDEwNCAgSENGIFY5MCBEYXRhIEZheCBSVEFEIE1vZGVtCisJMDEwNyAgSENGIFYuOTAgRGF0YSxGYXgsUlRBRCBNb2RlbQorCTAxMDkgIEFza2V5IE1hZ2ljWHByZXNzIFYuOTAgUG9ja2V0IE1vZGVtIFtjb25leGFudF0KKwkwMjAzICBWb3lhZ2VyIEFEU0wgTW9kZW0gTG9hZGVyCisJMDIwNCAgVm95YWdlciBBRFNMIE1vZGVtCisJMDIwNSAgRFNMIE1vZGVtCisJMDIwNiAgR2xvYmVTcGFuIEFEU0wgV0FOIE1vZGVtCisJMDIwOCAgRFNMIE1vZGVtCisJMDIwOSAgVm95YWdlciAxMDAgQURTTCBNb2RlbQorCTAyMTEgIEdsb2Jlc3BhbiBWaXJhdGEgQURTTCBMQU4gTW9kZW0KKwkwMjEyICBEU0wgTW9kZW0KKwkwMjEzICBITTEyMWQgRFNMIE1vZGVtCisJMDIxNCAgSE0xMjFkIERTTCBNb2RlbQorCTAyMTUgIFZveWFnZXIgMTA1IEFEU0wgTW9kZW0KKwkwNzAxICBXTEFOCisJMDcxMCAgU01DV1VTQlQtRworCTA3MTEgIFNNQ1dVU0JULUcgKG5vIGZpcm13YXJlKQorCTA3MTIgIEFSNTUyMworCTA3MTMgIEFSNTUyMyAobm8gZmlybXdhcmUpCisJMDcxNSAgVm95YWdlciAxMDU1IExhcHRvcCBBZGFwdGVyCisJMDcyMiAgUlQyNTczCisJMDcyNiAgV2ktRmkgV2lyZWxlc3MgTEFOIEFkYXB0ZXIKKwkwOTAxICBWb3lhZ2VyIDIwNSBBRFNMIFJvdXRlcgorMTY5NiAgSGl0YWNoaSBWaWRlbyBhbmQgSW5mb3JtYXRpb24gU3lzdGVtLCBJbmMuCisxNjk3ICBWVGVjIFRlc3QsIEluYy4KKzE2YTUgIFNoZW56aGVuIFpoZW5nZXJ5YSBDYWJsZSBDby4sIEx0ZC4KKzE2YWIgIEdsb2JhbCBTdW4gVGVjaG5vbG9neQorCTc4MDEgIEFSNTUyMworCTc4MDIgIEFSNTUyMyAobm8gZmlybXdhcmUpCisJNzgxMSAgQVI1NTIzCisJNzgxMiAgQVI1NTIzIChubyBmaXJtd2FyZSkKKzE2YWMgIERvbmdndWFuIENoaW5nTHVuZyBXaXJlICYgQ2FibGUgQ28uLCBMdGQuCisxNmMwICBWT1RJCisJMDNlOCAgZnJlZSBmb3IgaW50ZXJuYWwgbGFiIHVzZSAxMDAwCisJMDNlOSAgZnJlZSBmb3IgaW50ZXJuYWwgbGFiIHVzZSAxMDAxCisJMDNlYSAgZnJlZSBmb3IgaW50ZXJuYWwgbGFiIHVzZSAxMDAyCisJMDNlYiAgZnJlZSBmb3IgaW50ZXJuYWwgbGFiIHVzZSAxMDAzCisJMDNlYyAgZnJlZSBmb3IgaW50ZXJuYWwgbGFiIHVzZSAxMDA0CisJMDNlZCAgZnJlZSBmb3IgaW50ZXJuYWwgbGFiIHVzZSAxMDA1CisJMDNlZSAgZnJlZSBmb3IgaW50ZXJuYWwgbGFiIHVzZSAxMDA2CisJMDNlZiAgZnJlZSBmb3IgaW50ZXJuYWwgbGFiIHVzZSAxMDA3CisJMDNmMCAgZnJlZSBmb3IgaW50ZXJuYWwgbGFiIHVzZSAxMDA4CisJMDNmMSAgZnJlZSBmb3IgaW50ZXJuYWwgbGFiIHVzZSAxMDA5CisJMDc2YiAgT3BlblBDRCAxMy41Nk1IeiBSRklEIFJlYWRlcgorCTA3NmMgIE9wZW5QSUNDIDEzLjU2TUh6IFJGSUQgU2ltdWxhdG9yIChuYXRpdmUpCisJMDhhYyAgT3BlbkJlYWNvbiBVU0Igc3RpY2sKKzE2Y2MgIHNpbGV4IHRlY2hub2xvZ3ksIEluYy4KKzE2ZDMgIEZyb250bGluZSBUZXN0IEVxdWlwbWVudCwgSW5jLgorMTZkNSAgQW55REFUQSBDb3Jwb3JhdGlvbgorCTY1MDEgIENETUEgMjAwMCAxeFJUVC9FVi1ETyBVU0IgTW9kZW0KKzE2ZDggIENNT1RFQ0ggQ28uLCBMdGQuCisJNTE0MSAgQ01PVEVDSCBDRE1BIFRlY2hub2xvZ2llcyBVU0IgbW9kZW0KKwk1NTQzICBDRE1BIDIwMDAgMXhSVFQvMXhFVkRPIFVTQiBtb2RlbQorCTYyODAgIENNT1RFQ0ggQ0RNQSBUZWNobm9sb2dpZXMgVVNCIG1vZGVtCisxNmRmICBLaW5nIEJpbGxpb24gRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisxNmY1ICBGdXR1cmVsb2dpYyBJbmMuCisxNzA2ICBCbHVlVmlldyBUZWNobm9sb2dpZXMsIEluYy4KKzE3MDcgIEFSVElNSQorMTcwYiAgU3dpc3NvbmljCisJMDAxMSAgTUlESS1VU0IgMXgxCisxNzBkICBBdm5lcmEKKzE3MzMgIENlbGxpbmsgVGVjaG5vbG9neSBDby4sIEx0ZAorCTAxMDEgIFJGIFdpcmVsZXNzIE9wdGljYWwgTW91c2UgT1AtNzAxCisxNzM2ICBDQU5PTiBJTUFHSU5HIFNZU1RFTSBURUNITk9MT0dJRVMgSU5DLgorMTczNyAgTGlua3N5cworCTAwMzkgIFVTQjEwMDAKKzE3NDAgIFNlbmFvCisJMjAwMCAgTlVCLTgzMDEKKzE3NDMgIEdlbmVyYWwgQXRvbWljcworMTc0YyAgQVNNZWRpYSBUZWNobm9sb2d5IEluYy4KKzE3NGYgIFN5bnRlaworCTVhMzUgIDEuM01QaXhlbCBXZWIgQ2FtIC0gQXN1cyBHMXMKKwk2YTMxICBXZWIgQ2FtIC0gQXN1cyBBOEosIEYzUywgRjVSLCBWWDJTLCBWMVMKKwk2YTMzICBXZWIgQ2FtIC0gQXN1cyBGM1NBLCBGOUosIEY5UworCTZhNTEgIDIuME1QaXhlbCBXZWIgQ2FtIC0gQXN1cyBaOTZKLCBaOTZTLCBTOTZTCisJNmE1NCAgV2ViIENhbQorCTZkNTEgIDIuME1waXhlbCBXZWIgQ2FtIC0gRXVyb2NvbSBEOTAwQworCThhMTIgIDAuM01QaXhlbCBXZWIgQ2FtIC0gUGFja2FyZCBCZWxsIE1YMzctVC0wMDMKKwlhMzExICAxLjNNUGl4ZWwgV2ViIENhbSAtIEFzdXMgQTNBLCBBNkosIEE2SywgQTZNLCBBNlIsIEE2VCwgQTZWLCBBN1QsIEE3c3YsIEE3VQorCWEzMTIgIDEuM01QaXhlbCBXZWIgQ2FtCisJYTgyMSAgV2ViIENhbSAtIFBhY2thcmQgQmVsbCBCVTQ1LCBQQiBFYXN5bm90ZSBNWDY2LTIwOFcKKwlhYTExICBXZWIgQ2FtCisxNzU5ICBMdWNpZFBvcnQgVGVjaG5vbG9neSwgSW5jLgorMTc3MiAgU3lzdGVtIExldmVsIFNvbHV0aW9ucywgSW5jLgorMTc4MSAgTXVsdGlwbGUgVmVuZG9ycworCTA4M2UgIE1ldGFHZWVrIFdpLVNweQorCTA5MzggIElndWFuYXdvcmtzIFVTQiBJUiBUcmFuc2NlaXZlcgorMTc4MiAgU3ByZWFkdHJ1bSBDb21tdW5pY2F0aW9ucyBJbmMuCisxNzg0ICBUb3BTZWVkIFRlY2hub2xvZ3kgQ29ycC4KKzE3ODggIFNoZW5aaGVuIExpdGtjb25uIFRlY2hub2xvZ3kgQ28uLCBMdGQuCisxNzk2ICBQcmludHJleCwgSW5jLgorMTc5NyAgSkFMQ08gQ08uLCBMVEQuCisxN2E1ICBBZHZhbmNlZCBDb25uZWN0aW9uIFRlY2hub2xvZ3kgSW5jLgorMTdhNyAgTUlDT01TT0ZUIENPLiwgTFRELgorMTdiMyAgR3JleSBJbm5vdmF0aW9uCisJMDAwNCAgTGludXgtVVNCIE1pZGkgR2FkZ2V0CisxN2MzICBTaW5naW0gSW50ZXJuYXRpb25hbCBDb3JwLgorMTdjYyAgTmF0aXZlIEluc3RydW1lbnRzCisJMDgxNSAgQXVkaW8gS29udHJvbCAxCisJMTk0MCAgUmlnS29udHJvbDMKKwkxOTY5ICBSaWdLb250cm9sMgorCTE5NzggIEF1ZGlvIDggREoKKwk0NzExICBLb3JlIENvbnRyb2xsZXIKKwk0NzEyICBLb3JlIENvbnRyb2xsZXIgMgorMTdjZiAgSGlwIEhpbmcgQ2FibGUgJiBQbHVnIE1meS4gTHRkLgorMTdkMCAgU2FuZm9yZCBMLlAuCisxN2QzICBLb3JlYSBUZWNodHJvbiBDby4sIEx0ZC4KKzE3ZTkgIE5ld25oYW0gUmVzZWFyY2gKKwkwMDUxICBVU0IgVkdBIEFkYXB0b3IKKzE3ZWIgIENvcm5pY2UsIEluYy4KKzE3ZWYgIExlbm92bworCTM4MTUgIENoaXBzQm5rIDJHQiBVU0IgU3RpY2sKKzE3ZjUgIEsuSy4gUm9ja3kKKzE3ZjYgIFVuaWNvbXAsIEluYworMTgyMiAgVHdpbmhhbgorCTMyMDEgIFZpc2lvbkRUViBVU0ItVGVyL0hBTUEgVVNCIERWQi1UIGRldmljZSBjb2xkCisJMzIwMiAgVmlzaW9uRFRWIFVTQi1UZXIvSEFNQSBVU0IgRFZCLVQgZGV2aWNlIHdhcm0KKzE4MzEgIEd3byBKaW5uIEluZHVzdHJpZXMgQ28uLCBMdGQuCisxODMyICBIdWl6aG91IFNoZW5naHVhIEluZHVzdHJpYWwgQ28uLCBMdGQuCisxODU0ICBNZW1vcnkgRGV2aWNlcyBMdGQuCisxODViICBDb21wcm8KKwlkMDAwICBDb21wcm8gVmlkZW9tYXRlIERWQi1VMjAwMCAtIERWQi1UIFVTQiBjb2xkCisJZDAwMSAgQ29tcHJvIFZpZGVvbWF0ZSBEVkItVTIwMDAgLSBEVkItVCBVU0Igd2FybQorMTg2MSAgVGVjaCBUZWNobm9sb2d5IEluZHVzdHJpYWwgQ29tcGFueQorMTg2MiAgVGVyaWRpYW4gU2VtaWNvbmR1Y3RvciBDb3JwLgorMTg3MSAgQXZlbyBUZWNobm9sb2d5IENvcnAuCisxODk0ICBUb3BzZWVkCisJNTYzMiAgQXRlayBUb3RlIFJlbW90ZQorCTU2NDEgIFRTQU0tMDA0IFByZXNlbnRhdGlvbiBSZW1vdGUKKzE4OTcgIEV2ZXJ0b3AgV2lyZSBDYWJsZSBDby4KKzE4YjYgIE1pa2tvbiBUZWNobm9sb2d5IExpbWl0ZWQKKzE4YjcgIFpvdGVrIEVsZWN0cm9uaWMgQ28uLCBMdGQuCisxOGM1ICBBTUlUCisJMDAwMiAgQ0ctV0xVU0IyR08KKzE4ZDUgIFN0YXJsaW5lIEludGVybmF0aW9uYWwgR3JvdXAgTGltaXRlZAorMThkOSAgS2FiYQorCTAxeHkgIExFR0lDIGFkdmFudCBkZXNrdG9wIHJlYWRlcgorMThlMyAgRml0aXBvd2VyIEludGVncmF0ZWQgVGVjaG5vbG9neSBJbmMKKzE4ZTggIFFjb20KKwk2MTk2ICBSVDI1NzMKKwk2MjI5ICBSVDI1NzMKKzE4ZWEgIE1hdHJveCBHcmFwaGljcywgSW5jLgorCTAwMDIgIER1YWxIZWFkMkdvIFtBbmFsb2cgRWRpdGlvbl0KKwkwMDA0ICBUcmlwbGVIZWFkMkdvIFtEaWdpdGFsIEVkaXRpb25dCisxOGZkICBGaW5lQXJjaCBJbmMuCisxOTBkICBNb3Rvcm9sYSBHU0cKKzE5MTQgIEFsY28gRGlnaXRhbCBEZXZpY2VzIExpbWl0ZWQKKzE5MTUgIExpbmtzeXMKKwkyMjMzICBXVVNCMTEgdjIuOCA4MDIuMTFiIEFkYXB0ZXIKKwkyMjM0ICBXVVNCNTRHIDgwMi4xMWcgQWRhcHRlcgorMTkyZiAgQXZhZ28gVGVjaG5vbG9naWVzLCBQdGUuCisxOTMwICBTaGVuemhlbiBYaWFuaGUgVGVjaG5vbG9neSBDby4sIEx0ZC4KKzE5MzEgIE5pbmdibyBCcm9hZCBUZWxlY29tbXVuaWNhdGlvbiBDby4sIEx0ZC4KKzE5NDkgIExhYjEyNgorMTk1MSAgSHlwZXJzdG9uZSBBRworMTk1MyAgSXJvbmtleSBJbmMuCisxOTU0ICBSYWRpaWVudCBUZWNobm9sb2dpZXMKKzE5NWQgIEl0cm9uIFRlY2hub2xvZ3kgaU9ORQorCTcwMDIgIExpYnJhLVExMSBJUiByZW1vdGUKKwk3MDA2ICBMaWJyYS1RMjYgLyAxLjAgUmVtb3RlCisJNzc3NyAgU2NvcnBpdXMgd2lyZWxlc3Mga2V5Ym9hcmQKKzE5NjcgIENBU0lPIEhJVEFDSEkgTW9iaWxlIENvbW11bmljYXRpb25zIENvLiwgTHRkLgorMTk2YiAgV2lzcHJvIFRlY2hub2xvZ3kgSW5jLgorMTk3MCAgRGFuZS1FbGVjIENvcnAuIFVTQQorMTk3NSAgRG9uZ2d1YW4gR3VuZWV0YWwgV2lyZSAmIENhYmxlIENvLiwgTHRkLgorMTk3NiAgQ2hpcHNicmFuZCBNaWNyb2VsZWN0cm9uaWNzIChISykgQ28uLCBMdGQuCisxOTc3ICBULUxvZ2ljCisJMDExMSAgVEwyMDMgTVAzIFBsYXllciBhbmQgVm9pY2UgUmVjb3JkZXIKKzE5ODkgIE51Y29ubiBUZWNobm9sb2d5IENvcnAuCisxOThmICBCZWNlZW0gQ29tbXVuaWNhdGlvbnMgSW5jLgorMTk5MCAgQWNyb24gUHJlY2lzaW9uIEluZHVzdHJpYWwgQ28uLCBMdGQuCisxOTk1ICBUcmlsbGl1bSBUZWNobm9sb2d5IFB0eS4gTHRkLgorCTMyMDIgIFJFQy1BRFBULVVTQiAocmVjb3JkZXIpCisJMzIwMyAgUkVDLUEtQURQVC1VU0IgKHJlY29yZGVyKQorMTk5ZSAgVGhlIEltYWdpbmcgU291cmNlIEV1cm9wZSBHbWJICisxOTlmICBCZW5pY2EgQ29ycG9yYXRpb24KKzE5YTggIEJpZm9yc3QgVGVjaG5vbG9neSBJbmMuCisxOWFmICBTIExpZmUKKwk2NjExICBDZWxlc3RpYSBWb0lQIFBob25lCisxOWI1ICBCICYgVyBHcm91cAorMTliNiAgSW5mb3RlY2ggTG9naXN0aWMsIExMQworMTljYSAgTWluZHRyaWJlCisJMDAwMSAgU2FuZGlvIDNEIEhJRCBNb3VzZQorMTljZiAgUGFycm90IFNBCisxOWUxICBXZWlEdWFuIEVsZWN0cm9uaWMgQWNjZXNzb3J5IChTLlouKSBDby4sIEx0ZC4KKzE5ZTggIEluZHVzdHJpYWwgVGVjaG5vbG9neSBSZXNlYXJjaCBJbnN0aXR1dGUKKzE5ZWYgIFBhayBIZW5nIFRlY2hub2xvZ3kgKFNoZW56aGVuKSBDby4sIEx0ZC4KKzE5ZmYgIEJlc3QgQnV5CisJMDIwMSAgUm9ja2V0ZmlzaCBXaXJlbGVzcyAyLjRHIExhc2VyIE1vdXNlCisxYTA4ICBCZWxsd29vZCBJbnRlcm5hdGlvbmFsLCBJbmMuCisxYTBhICBVU0ItSUYgbm9uLXdvcmtzaG9wCisJYmFkZCAgVVNCIE9URyBDb21wbGlhbmNlIHRlc3QgZGV2aWNlCisxYTEyICBLRVMgQ28uLCBMdGQuCisxYTI1ICBBbXBoZW5vbCBFYXN0IEFzaWEgTHRkLgorMWEyYSAgU2VhZ2F0ZSBCcmFuZGVkIFNvbHV0aW9ucworMWEzNiAgQml3aW4gVGVjaG5vbG9neSBMdGQuCisxYTQwICBURVJNSU5VUyBURUNITk9MT0dZIElOQy4KKzFhNDEgIEFjdGlvbiBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKzFhNGEgIFNpbGljb24gSW1hZ2UKKzFhNGIgIFNhZmVCb290IEludGVybmF0aW9uYWwgQi5WLgorMWE2MSAgQWJib3R0IERpYWJldGVzIENhcmUKKzFhNmEgIFNwYW5zaW9uIEluYy4KKzFhNmQgIFNhbVlvdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkCisxYTZlICBHbG9iYWwgVW5pY2hpcCBDb3JwLgorMWE2ZiAgU2FnZW0gT3JnYSBHbWJICisxYTc5ICBCYXllciBIZWFsdGggQ2FyZSBMTEMKKzFhN2IgIEx1bWJlcmcgQ29ubmVjdCAgR21iSCAmIENvLiBLRworMWE4OSAgRHluYWxpdGggU3lzdGVtcyBDby4sIEx0ZC4KKzFhOGIgIFNHUyBUYWl3YW4gTHRkLgorMWE5OCAgTGVpY2EgQ2FtZXJhIEFHCisxYWE0ICBEYXRhIERyaXZlIFRocnUsIEluYy4KKzFhYTUgIFVCZWFjb24gVGVjaG5vbG9naWVzLCBJbmMuCisxYWE2ICBlRm9ydHVuZSBUZWNobm9sb2d5IENvcnAuCisxYWNiICBTYWxjb21wIFBsYworMWFkMSAgRGVzYXkgV2lyZSBDby4sIEx0ZC4KKzFhZTQgIGljLWRlc2lnbiBSZWluaGFyZCBHb3R0aW5nZXIgR21iSAorMWFlZCAgSGlnaCBUb3AgUHJlY2lzaW9uIEVsZWN0cm9uaWMgQ28uLCBMdGQuCisxYWVmICBDb25udGVjaCBFbGVjdHJvbmljIChTdXpob3UpIENvcnBvcmF0aW9uCisxYjA0ICBNZWlsaGF1cyBFbGVjdHJvbmljIEdtQkgKKwkwNjMwICBNRS02MzAKKwkwOTQwICBNRS05NAorCTA5NTAgIE1FLTk1CisJMDk2MCAgTUUtOTYKKwkxMDAwICBNRS0xMDAwCisJMTAwYSAgTUUtMTAwMAorCTEwMGIgIE1FLTEwMDAKKwkxNDAwICBNRS0xNDAwCisJMTQwYSAgTUUtMTQwMEEKKwkxNDBiICBNRS0xNDAwQgorCTE0MGMgIE1FLTE0MDBDCisJMTQwZCAgTUUtMTQwMEQKKwkxNDBlICBNRS0xNDAwRQorCTE0ZWEgIE1FLTE0MDBFQQorCTE0ZWIgIE1FLTE0MDBFQgorCTE2MDQgIE1FLTE2MDAvNFUKKwkxNjA4ICBNRS0xNjAwLzhVCisJMTYwYyAgTUUtMTYwMC8xMlUKKwkxNjBmICBNRS0xNjAwLzE2VQorCTE2OGYgIE1FLTE2MDAvMTZVOEkKKwk0NjEwICBNRS00NjEwCisJNDY1MCAgTUUtNDY1MAorCTQ2NjAgIE1FLTQ2NjAKKwk0NjYxICBNRS00NjYwSQorCTQ2NjIgIE1FLTQ2NjAKKwk0NjYzICBNRS00NjYwSQorCTQ2NzAgIE1FLTQ2NzAKKwk0NjcxICBNRS00NjcwSQorCTQ2NzIgIE1FLTQ2NzBTCisJNDY3MyAgTUUtNDY3MElTCisJNDY4MCAgTUUtNDY4MAorCTQ2ODEgIE1FLTQ2ODBJCisJNDY4MiAgTUUtNDY4MFMKKwk0NjgzICBNRS00NjgwSVMKKwk2MDA0ICBNRS02MDAwLzQKKwk2MDA4ICBNRS02MDAwLzgKKwk2MDBmICBNRS02MDAwLzE2CisJNjAxNCAgTUUtNjAwMEkvNAorCTYwMTggIE1FLTYwMDBJLzgKKwk2MDFmICBNRS02MDAwSS8xNgorCTYwMzQgIE1FLTYwMDBJU0xFLzQKKwk2MDM4ICBNRS02MDAwSVNMRS84CisJNjAzZiAgTUUtNjAwMElTTEUvMTYKKwk2MDQ0ICBNRS02MDAwLzQvRElPCisJNjA0OCAgTUUtNjAwMC84L0RJTworCTYwNGYgIE1FLTYwMDAvMTYvRElPCisJNjA1NCAgTUUtNjAwMEkvNC9ESU8KKwk2MDU4ICBNRS02MDAwSS84L0RJTworCTYwNWYgIE1FLTYwMDBJLzE2L0RJTworCTYwNzQgIE1FLTYwMDBJU0xFLzQvRElPCisJNjA3OCAgTUUtNjAwMElTTEUvOC9ESU8KKwk2MDdmICBNRS02MDAwSVNMRS8xNi9ESU8KKwk2MTA0ICBNRS02MTAwLzQKKwk2MTA4ICBNRS02MTAwLzgKKwk2MTBmICBNRS02MTAwLzE2CisJNjExNCAgTUUtNjEwMEkvNAorCTYxMTggIE1FLTYxMDBJLzgKKwk2MTFmICBNRS02MTAwSS8xNgorCTYxMzQgIE1FLTYxMDBJU0xFLzQKKwk2MTM4ICBNRS02MTAwSVNMRS84CisJNjEzZiAgTUUtNjEwMElTTEUvMTYKKwk2MTQ0ICBNRS02MTAwLzQvRElPCisJNjE0OCAgTUUtNjEwMC84L0RJTworCTYxNGYgIE1FLTYxMDAvMTYvRElPCisJNjE1NCAgTUUtNjEwMEkvNC9ESU8KKwk2MTU4ICBNRS02MTAwSS84L0RJTworCTYxNWYgIE1FLTYxMDBJLzE2L0RJTworCTYxNzQgIE1FLTYxMDBJU0xFLzQvRElPCisJNjE3OCAgTUUtNjEwMElTTEUvOC9ESU8KKwk2MTdmICBNRS02MTAwSVNMRS8xNi9ESU8KKwk2MjU5ICBNRS02MjAwSS85L0RJTworCTYzNTkgIE1FLTYzMDBJLzkvRElPCisJODEwYSAgTUUtODEwMEEKKwk4MTBiICBNRS04MTAwQgorCTgyMGEgIE1FLTgyMDBBCisJODIwYiAgTUUtODIwMEIKKzFiMjAgIE1TdGFyIFNlbWljb25kdWN0b3IsIEluYy4KKzFiMjIgIFdpTGlueCBDb3JwLgorMWIyNiAgQ2VsbGV4IFBvd2VyIFByb2R1Y3RzLCBJbmMuCisxYjI3ICBDdXJyZW50IEVsZWN0cm9uaWNzIEluYy4KKzFiMjggIE5BVklzaXMgSW5jLgorMWIzMiAgVWdvYmUgTGlmZSBGb3JtcywgSW5jLgorMWIzNiAgVmlYUyBTeXN0ZW1zLCBJbmMuCisxYjNmICBHZW5lcmFscGx1cyBUZWNobm9sb2d5IEluYy4KKzFiNDcgIEVuZXJnaXplciBIb2xkaW5ncywgSW5jLgorCTAwMDEgIENIVVNCIER1byBDaGFyZ2VyIChOaU1IIEFBL0FBQSBVU0Igc21hcnQgY2hhcmdlcikKKzFiNDggIFBsYXN0cm9uIFByZWNpc2lvbiBDby4sIEx0ZC4KKzFiNTkgIEsuUy4gVGVybWluYWxzIEluYy4KKzFiNWEgIENoYW8gWmhvdSBLYWkgWXVhbiBFbGVjdHJpYyBDby4sIEx0ZC4KKzFiNjUgIFRoZSBIb25nIEtvbmcgU3RhbmRhcmRzIGFuZCBUZXN0aW5nIENlbnRyZSBMdGQuCisxYjcyICBBVEVSR0kgVEVDSE5PTE9HWSBDTy4sIExURC4KKzFiNzYgIExlZ2VuZCBTaWxpY29uIENvcnAuCisxYjg2ICBEb25nZ3VhbiBHdWFuc2hhbmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisxYjg4ICBTaGVuTWluZyBFbGVjdHJvbiAoRG9uZyBHdWFuKSBDby4sIEx0ZC4KKzFiOGMgIEFsdGl1bSBMaW1pdGVkCisxYjhkICBlLU1PVkUgVGVjaG5vbG9neSBDby4sIEx0ZC4KKzFiOGUgIEFtbG9naWMsIEluYy4KKzFiOGYgIE1BIExBQlMsIEluYy4KKzFiOTggIFlNYXggQ29tbXVuaWNhdGlvbnMgQ29ycC4KKzFiOTkgIFNoZW56aGVuIFl1YW5jaHVhbiBFbGVjdHJvbmljCisxYmExICBKSU5RIENIRVJOIEVOVEVSUFJJU0UgQ08uLCBMVEQuCisxYmEyICBMaXRlIE1ldGFscyAmIFBsYXN0aWMgKFNoZW56aGVuKSBDby4sIEx0ZC4KKzFiYTQgIEVtYmVyIENvcnBvcmF0aW9uCisJMDAwMSAgSW5TaWdodCBVU0IgTGluaworMWJhOCAgQ2hpbmEgVGVsZWNvbW11bmljYXRpb24gVGVjaG5vbG9neSBMYWJzCisxYmFkICBIYXJtb25peCBNdXNpYworCTAwMDIgIEhhcm1vbml4IEd1aXRhciBmb3IgWGJveCAzNjAKKwkwMDAzICBIYXJtb25peCBEcnVtIEtpdCBmb3IgWGJveCAzNjAKKzFiYmIgIFQgJiBBIE1vYmlsZSBQaG9uZXMKKzFiYzQgIEZvcmQgTW90b3IgQ28uCisxYmM1ICBBVklYRSBUZWNobm9sb2d5IChDaGluYSkgTHRkLgorMWJjZSAgQ29udGFjIENhYmxlIEluZHVzdHJpYWwgTGltaXRlZAorMWJjZiAgU3VucGx1cyBJbm5vdmF0aW9uIFRlY2hub2xvZ3kgSW5jLgorMWJkMCAgSGFuZ3pob3UgUml5dWUgRWxlY3Ryb25pYyBDby4sIEx0ZC4KKzFiZGUgIFAtVFdPIElORFVTVFJJRVMsIElOQy4KKzFiZWYgIFNoZW56aGVuIFRvbmd5dWFuIE5ldHdvcmstQ29tbXVuaWNhdGlvbiBDYWJsZXMgQ28uLCBMdGQKKzFiZjAgIFJlYWxWaXNpb24gSW5jLgorMWJmNSAgRXh0cmFuZXQgU3lzdGVtcyBJbmMuCisxYmY2ICBPcmllbnQgU2VtaWNvbmR1Y3RvciBFbGVjdHJvbmljcywgTHRkLgorMWJmZCAgVG91Y2hQYWNrCisJMTY4OCAgUmVzaXN0aXZlIFRvdWNoIFNjcmVlbgorMWMwMiAgS3JldG9uIENvcnBvcmF0aW9uCisxYzA0ICBRTkFQIFN5c3RlbSBJbmMuCisxYzBkICBSZWxtIFdpcmVsZXNzCisxYzEwICBMYW50ZXJyYSBJbmR1c3RyaWFsIENvLiwgTHRkLgorMWMxMyAgQUxFQ1RST05JQyBMSU1JVEVECisxYzFhICBEYXRlbCBFbGVjdHJvbmljcyBMdGQuCisxYzFiICBWb2xrc3dhZ2VuIG9mIEFtZXJpY2EsIEluYy4KKzFjMWYgIEdvbGR2aXNoIFMuQS4KKzFjMjAgIEZ1amkgRWxlY3RyaWMgRGV2aWNlIFRlY2hub2xvZ3kgQ28uLCBMdGQuCisxYzIxICBBRERNTSBMTEMKKzFjMjIgIFpIT05HU0hBTiBDSElBTkcgWVUgRUxFQ1RSSUMgQ08uLCBMVEQuCisxYzI2ICBTaGFuZ2hhaSBIYWl5aW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorMWMyNyAgSHVpWWFuZyBEICYgUyBDYWJsZSBDby4sIEx0ZC4KKzFjMzEgIExTIENhYmxlIEx0ZC4KKzFjMzcgIEF1dGhvcml6ZXIgVGVjaG5vbG9naWVzLCBJbmMuCisxYzNkICBOT05JTiBNRURJQ0FMIElOQy4KKzFjM2UgIFdlcCBQZXJpcGhlcmFscworMWM0OSAgQ2hlcm5nIFdlZWkgVGVjaG5vbG9neSBDb3JwLgorMWM2YiAgUGhpbGlwcyAmIExpdGUtT04gRGlnaXRhbCBTb2x1dGlvbnMgQ29ycG9yYXRpb24KKzFjNmMgIFNreWRpZ2l0YWwgSW5jLgorMWM3NyAgS2FldGF0IEluZHVzdHJpYWwgQ28uLCBMdGQuCisxYzc4ICBEYXRhc2NvcGUgQ29ycC4KKzFjNzkgIFVuaWdlbiBDb3Jwb3JhdGlvbgorMWM3YSAgTGlnaFR1bmluZyBUZWNobm9sb2d5IEluYy4KKzFjN2IgIExVWFNIQVJFIFBSRUNJU0lPTiBJTkRVU1RSWSAoU0hFTlpIRU4pIENPLiwgTFRELgorMWM4NyAgMk4gVEVMRUtPTVVOSUtBQ0UgYS5zLgorMWM4OCAgU29tYWdpYywgSW5jLgorMWM4OSAgSE9OR0tPTkcgV0VJRElEQSBFTEVDVFJPTiBMSU1JVEVECisxYzhlICBBU1RST04gSU5URVJOQVRJT05BTCBDT1JQLgorMWM5OCAgQUxQSU5FIEVMRUNUUk9OSUNTLCBJTkMuCisxY2EwICBBQ0NBUklPIEluYy4KKzFjYjMgIEFjZXMgRWxlY3Ryb25pYyBDby4sIEx0ZC4KKzFjYjQgIE9QRVggQ09SUE9SQVRJT04KKzFjYmUgIEx1bWluYXJ5IE1pY3JvIEluYy4KKzFjYmYgIEZPUlRBVCBTS1lNQVJLIElORFVTVFJJQUwgQ09NUEFOWQorMWNjMCAgUGxhbnRTZW5zZQorMWNjYSAgTmV4dFdhdmUgQnJvYWRiYW5kIEluYy4KKzFjY2QgIEJvZGF0b25nIFRlY2hub2xvZ3kgKFNoZW56aGVuKSBDby4sIEx0ZC4KKzFjZDQgIGFkcCBjb3Jwb3JhdGlvbgorMWNkNSAgRmlyZWNvbW1zIEx0ZC4KKzFjZDYgIEFudG9uaW8gUHJlY2lzZSBQcm9kdWN0cyBNYW51ZmFjdG9yeSBMdGQuCisxY2RlICBUZWxlY29tbXVuaWNhdGlvbnMgVGVjaG5vbG9neSBBc3NvY2lhdGlvbiAoVFRBKQorMWNkZiAgV29uVGVuIFRlY2hub2xvZ3kgQ28uLCBMdGQuCisxY2UwICBFRElNQVggVEVDSE5PTE9HWSBDTy4sIExURC4KKzFjZTEgIEFtcGhlbm9sIEtBRQorMWNmYyAgQU5ERVMgVEVDSE5PTE9HWSBDT1JQT1JBVElPTgorMWNmZCAgRmxleHRyb25pY3MgRGlnaXRhbCBEZXNpZ24gSmFwYW4sIExURC4KKzFkMDggIE5JTkdCTyBIRU5URUsgRFJBR09OIEVMRUNUUk9OSUNTIENPLiwgTFRELgorMWQwOSAgVGVjaEZhaXRoIFdpcmVsZXNzIFRlY2hub2xvZ3kgTGltaXRlZAorMWQwYSAgSm9obnNvbiBDb250cm9scywgSW5jLiBUaGUgQXV0b21vdGl2ZSBCdXNpbmVzcyBVbml0CisxZDBiICBIQU4gSFVBIENBQkxFICYgV0lSRSBURUNITk9MT0dZIChKLlguKSBDTy4sIExURC4KKzFkMTQgIEFMUEhBLVNBVCBURUNITk9MT0dZIExJTUlURUQKKzFkMWYgIERpb3N0ZWNoIENvLiwgTHRkLgorMWQyMCAgU0FNVEFDSyBJTkMuCisxZDUwICBPcGVuTW9rbywgSW5jLgorMWQ1YiAgU21hcnRyb25peCwgSW5jLgorMWQ2YiAgTGludXggRm91bmRhdGlvbgorCTAwMDEgIDEuMSByb290IGh1YgorCTAwMDIgIDIuMCByb290IGh1YgorCTAwMDMgIDMuMCByb290IGh1YgorMWViYiAgTnVDT1JFIFRlY2hub2xvZ3ksIEluYy4KKzIwMDEgIEQtTGluayBDb3JwLiBbaGV4XQorCTAwMDEgIERXTC0xMjAgV0lSRUxFU1MgQURBUFRFUgorCTAyMDEgIERITi0xMjAgMTBNYiBIb21lIFBob25lbGluZSBBZGFwdGVyCisJMWEwMCAgMTAvMTAwIEV0aGVybmV0CisJMjAwYyAgMTAvMTAwIEV0aGVybmV0CisJMzIwMCAgRFdMLTEyMCA4MDIuMTFiIChBdG1lbCBSRk1ENTAzQSkgW3VzYnZuZXRyXQorCTM1MDAgIEVsaXRlZ3JvdXAgQ29tcHV0ZXIgU3lzdGVtcyBXTEFOIGNhcmQgV0wtMTYyCisJMzcwMCAgRFdMLTEyMiA4MDIuMTFiCisJMzcwMSAgRFdMLUcxMjAgU3Bpbm5ha2VyIDgwMi4xMWIKKwkzNzAyICBEV0wtMTIwIHJldiBGCisJMzcwMyAgRFdMLTEyMiA4MDIuMTFiCisJMzcwNCAgRFdMLUcxMjIgODAyLjExZyByZXYuIEEyCisJMzcwNSAgQWlyUGx1cyBHIERXTC1HMTIwIFdpcmVsZXNzIEFkYXB0ZXIocmV2LkMpCisJMzc2MSAgSUVFRSA4MDIuMTFnIFVTQjIuMCBXaXJlbGVzcyBOZXR3b3JrIEFkYXB0ZXItUE4KKwkzYTAwICBEV0wtQUcxMzIKKwkzYTAxICBEV0wtQUcxMzIgKG5vIGZpcm13YXJlKQorCTNhMDIgIERXTC1HMTMyCisJM2EwMyAgRFdMLUcxMzIgKG5vIGZpcm13YXJlKQorCTNhMDQgIERXTC1BRzEyMgorCTNhMDUgIERXTC1BRzEyMiAobm8gZmlybXdhcmUpCisJM2E4MCAgQWlyUGx1cyBYdHJlbWUgRyBEV0wtRzEzMiBXaXJlbGVzcyBBZGFwdGVyCisJM2E4MSAgcHJlZGF0b3IgQm9vdGxvYWRlciBEb3dubG9hZAorCTNhODIgIEFpclByZW1pZXIgQUcgRFdMLUFHMTMyIFdpcmVsZXNzIEFkYXB0ZXIKKwkzYTgzICBwcmVkYXRvciBCb290bG9hZGVyIERvd25sb2FkCisJM2IwMCAgQWlyUGx1cyBEV0wtMTIwKyBXaXJlbGVzcyBBZGFwdGVyCisJM2IwMSAgV0xBTiBCb290IERldmljZQorCTNjMDAgIERXTC1HMTIyIDgwMi4xMWcgcmV2LiBCMSBbcmFsaW5rXQorCTNjMDEgIEFpclBsdXMgQUcgRFdMLUFHMTIyIFdpcmVsZXNzIEFkYXB0ZXIKKwkzYzAyICBBaXJQbHVzIEcgRFdMLUcxMjIgV2lyZWxlc3MgQWRhcHRlcgorCTNjMDUgIERVQi1FMTAwIEZhc3QgRXRoZXJuZXQgW2FzaXhdCisJNDAwMCAgRFNCLTY1MEMgRXRoZXJuZXQgW2tsc2ldCisJNDAwMSAgRFNCLTY1MFRYIEV0aGVybmV0IFtwZWdhc3VzXQorCTQwMDIgIERTQi02NTBUWCBFdGhlcm5ldCBbcGVnYXN1c10KKwk0MDAzICBEU0ItNjUwVFgtUE5BIEV0aGVybmV0IFtwZWdhc3VzXQorCTQwMGIgIDEwLzEwMCBFdGhlcm5ldAorCTQxMDIgIDEwLzEwMCBFdGhlcm5ldAorCTUxMDAgIERTTC0yMDAgQURTTCBBVE0gTW9kZW0KKwk1MTAyICBEU0wtMjAwIEFEU0wgTG9hZGVyCisJNWIwMCAgUmVtb3RlIE5ESVMgTmV0d29yayBEZXZpY2UKKwk5NDE0ICBDYWJsZSBNb2RlbQorCTliMDAgIEJyb2FkYmFuZCBDYWJsZSBNb2RlbSBSZW1vdGUgTkRJUyBEZXZpY2UKKwlhYmMxICBEU0ItNjUwIEV0aGVybmV0IFtwZWdhc3VzXQorCWYwMTMgIERMaW5rIDcgcG9ydCBVU0IyLjAgSHViCisJZjEwZCAgQWNjZW50IENvbW11bmljYXRpb25zIE1vZGVtCisJZjExMCAgRFVCLUFWMzAwIEEvViBDYXB0dXJlCisJZjExMSAgREJULTEyMiBCbHVldG9vdGggYWRhcHRlcgorCWYxMTIgIERVQi1UMjEwIEF1ZGlvIERldmljZQorCWYxMTYgIEZvcm1vc2EgMgorCWYxMTcgIEZvcm1vc2EgMworCWYxMTggIEZvcm1vc2EgNAorMjAxOSAgUExBTkVYCisJMzIyMCAgR1ctVVMxMVMgV0xBTgorCTUzMDMgIEdXLVVTNTRHWFMKKwlhYjAxICBHVy1VUzU0SFAKKwlhYjUwICBHVy1VUzU0TWluaTIKKwljMDAyICBHVy1VUzU0U0cKKwljMDA3ICBHVy1VUzU0R1pMCisJZWQwMiAgR1ctVVNNTQorMjA0MCAgSGF1cHBhdWdlCisJNjUwMiAgV2luVFYgSFZSLTkwMAorCTY1MDMgIFdpblRWIEhWUi05MzAKKwk3MDUwICBOb3ZhLVQgU3RpY2sKKwk5MzAwICBXaW5UViBOT1ZBLVQgVVNCMiAoY29sZCkKKwk5MzAxICBXaW5UViBOT1ZBLVQgVVNCMiAod2FybSkKKzIxMDEgIEFjdGlvblN0YXIKKwkwMjAxICBTSUlHIDQtdG8tMiBQcmludGVyIFN3aXRjaAorMjE2MiAgQ3JlYXRpdmUgKD8pCisJMjAzMSAgTmV0d29yayBCbGFzdGVyIFdpcmVsZXNzIEFkYXB0ZXIKKwk1MDBjICBERTU3NzEgTW9kZW0gQmxhc3RlcgorCTgwMDEgIEJyb2FkeGVudCBCcml0ZVBvcnQgRFNMIEJyaWRnZSA4MDEwVQorMjIyMiAgTWFjQWxseQorCTAwMDQgIGlXZWJLZXkgS2V5Ym9hcmQKKwk0MDUwICBBaXJTdGljayBqb3lzdGljaworMjIzMyAgUmFkaW9TaGFjayBDb3Jwb3JhdGlvbgorCTYzMjMgIFVTQiBFbGVjdHJvbmljIFNjYWxlCisyMmI4ICBNb3Rvcm9sYSBQQ1MKKwkwMDAxICBXYWxseSAyLjIgY2hpcHNldAorCTAwMDIgIFdhbGx5IDIuNCBjaGlwc2V0CisJMDAwNSAgVi42MGMvVi42MGkgR1NNIFBob25lCisJMDg1MCAgQmx1ZXRvb3RoIERldmljZQorCTEwMDEgIFBhdHJpb3QgMS4wIChHU00pIGNoaXBzZXQKKwkxMDAyICBQYXRyaW90IDIuMCBjaGlwc2V0CisJMTAwNSAgVDI4MGUgR1NNL0dQUlMgUGhvbmUKKwkxMTAxICBQYXRyaW90IDEuMCAoVERNQSkgY2hpcHNldAorCTE4MDEgIFJhaW5ib3cgY2hpcHNldCBmbGFzaAorCTIwMzUgIEJsdWV0b290aCBEZXZpY2UKKwkyODA1ICBHU00gTW9kZW0KKwkyODIxICBUNzIwIEdTTSBQaG9uZQorCTI4MjIgIFYuMTIwZSBHU00gUGhvbmUKKwkyODIzICBGbGFzaCBJbnRlcmZhY2UKKwkyYTAxICBNU002MDUwIGNoaXBzZXQKKwkyYTAyICBDRE1BIG1vZGVtCisJMmEwMyAgTVNNNjA1MCBjaGlwc2V0IGZsYXNoCisJMmEyMSAgVjcxMCBHU00gUGhvbmUgKFAySykKKwkyYTIyICBWNzEwIEdTTSBQaG9uZSAoQVQpCisJMmEyMyAgTVNNNjEwMCBjaGlwc2V0IGZsYXNoCisJMmE0MSAgTVNNNjMwMCBjaGlwc2V0CisJMmE0MiAgVXNiIE1vZGVtCisJMmE0MyAgTVNNNjMwMCBjaGlwc2V0IGZsYXNoCisJMmE2MSAgRTgxNSBHU00gUGhvbmUgKFAySykKKwkyYTYyICBFODE1IEdTTSBQaG9uZSAoQVQpCisJMmE2MyAgTVNNNjUwMCBjaGlwc2V0IGZsYXNoCisJMmE4MSAgTVNNNjAyNSBjaGlwc2V0CisJMmE4MyAgTVNNNjAyNSBjaGlwc2V0IGZsYXNoCisJMmFjMSAgTVNNNjEwMCBjaGlwc2V0CisJMmFjMyAgTVNNNjEwMCBjaGlwc2V0IGZsYXNoCisJMzAwMSAgQTgzNS9FMTAwMCBHU00gUGhvbmUgKFAySykKKwkzMDAyICBBODM1L0UxMDAwIEdTTSBQaG9uZSAoQVQpCisJMzgwMSAgQzM1MEwvQzQ1MCAoUDJLKQorCTM4MDIgIEMzMzAvQzM1MEwvQzQ1MC9FWlggR1NNIFBob25lIChBVCkKKwkzODAzICBOZXB0dW5lIExUIGNoaXBzZXQgZmxhc2gKKwk0MDAxICBPTUFQIDEuMCBjaGlwc2V0CisJNDAwMiAgQTkyMC9BOTI1IFVNVFMgUGhvbmUKKwk0MDAzICBPTUFQIDEuMCBjaGlwc2V0IGZsYXNoCisJNDAwOCAgT01BUCAxLjAgY2hpcHNldCBSREwKKwk0MjA0ICBNUHgyMDAgU21hcnRwaG9uZQorCTQyMTQgIE1QYyBHU00KKwk0MjI0ICBNUHgyMjAgU21hcnRwaG9uZQorCTQyMzQgIE1QYyBDRE1BCisJNDI0NCAgTVB4MTAwIFNtYXJ0cGhvbmUKKwk0ODAxICBOZXB0dW5lIExUUyBjaGlwc2V0CisJNDgwMyAgTmVwdHVuZSBMVFMgY2hpcHNldCBmbGFzaAorCTQ4MTAgIFRyaXBsZXQgR1NNIFBob25lIChzdG9yYWdlKQorCTQ5MDEgIFRyaXBsZXQgR1NNIFBob25lIChQMkspCisJNDkwMiAgVHJpcGxldCBHU00gUGhvbmUgKEFUKQorCTQ5MDMgIE5lcHR1bmUgTFRFIGNoaXBzZXQgZmxhc2gKKwk0YTAxICBOZXB0dW5lIExUWCBjaGlwc2V0CisJNGEwMyAgTmVwdHVuZSBMVFggY2hpcHNldCBmbGFzaAorCTRhMzIgIEw2LWltb2RlIFBob25lCisJNTgwMSAgTmVwdHVuZSBVTFMgY2hpcHNldAorCTU4MDMgIE5lcHR1bmUgVUxTIGNoaXBzZXQgZmxhc2gKKwk1OTAxICBOZXB0dW5lIFZMVCBjaGlwc2V0CisJNTkwMyAgTmVwdHVuZSBWTFQgY2hpcHNldCBmbGFzaAorCTYwMDEgIERhbGhhcnQgRVpYCisJNjAwMyAgRGFsaGFydCBmbGFzaAorCTYwMDQgIEVaWCBHU00gUGhvbmUgKENEQyBOZXQpCisJNjAwOCAgRGFsaGFydCBSREwKKwk2MDA5ICBFWlggR1NNIFBob25lIChQMkspCisJNjAwYSAgRGFsaGFydCBFWlggY29uZmlnIDE3CisJNjAwYiAgRGFsaGFydCBFWlggY29uZmlnIDE4CisJNjAwYyAgRVpYIEdTTSBQaG9uZSAoVVNCTEFOKQorCTYwMjEgIEpVSVggY2hpcHNldAorCTYwMjMgIEpVSVggY2hpcHNldCBmbGFzaAorCTYwMjYgIEZsYXNoIFJBTSBEb3dubG9hZGVyL21pbmlPUworCTYwMjcgIFVTQkxBTgorCTYwNGMgIEVaWCBHU00gUGhvbmUgKFN0b3JhZ2UpCisJNjEwMSAgVGFsb24gaW50ZWdyYXRlZCBjaGlwc2V0CisJNjQwMSAgQXJnb24gY2hpcHNldAorCTY0MDMgIEFyZ29uIGNoaXBzZXQgZmxhc2gKKwk2NDE1ICBST0tSIFo2IChNVFAgbW9kZSkKKwk2NjA0ICBXYXNoaW5ndG9uIENETUEgUGhvbmUKKwk2NjMxICBDREMgTW9kZW0KKzIyYjkgIGVUdXJib1RvdWNoIFRlY2hub2xvZ3ksIEluYy4KKzIyYmEgIFRlY2hub2xvZ3kgSW5ub3ZhdGlvbiBIb2xkaW5ncywgTHRkCisyMzA0ICBQaW5uYWNsZSBTeXN0ZW1zLCBJbmMuIFtoZXhdCisJMDEwOSAgU3R1ZGlvIFBDVFYgVVNCIChTRUNBTSkKKwkwMTEwICBTdHVkaW8gUENUViBVU0IgKFBBTCkKKwkwMTExICBNaXJvIFBDVFYgVVNCCisJMDExMiAgU3R1ZGlvIFBDVFYgVVNCIChOVFNDKSB3aXRoIEZNIHJhZGlvCisJMDIwMSAgU3lzdGVtcyBNb3ZpZUJveCBEZXZpY2UKKwkwMjA0ICBNb3ZpZUJveCBVU0JfQgorCTAyMDUgIERWQyAxNTBCCisJMDIwNiAgU3lzdGVtcyBNb3ZpZUJveCBEZWx1eGUgRGV2aWNlCisJMDIwNyAgRGF6emxlIERWQzkwIFZpZGVvIERldmljZQorCTAyMDggIFN0dWRpbyBQQ1RWIFVTQjIKKwkwMjBlICBQQ1RWIDIwMGUKKwkwMjBmICBQQ1RWIDQwMGUgQkRBIERldmljZQorCTAyMTAgIFN0dWRpbyBQQ1RWIFVTQiAoUEFMKSB3aXRoIEZNIHJhZGlvCisJMDIxMiAgU3R1ZGlvIFBDVFYgVVNCIChOVFNDKQorCTAyMTMgIDUwMC1VU0IgRGV2aWNlCisJMDIxNCAgU3R1ZGlvIFBDVFYgVVNCIChQQUwpIHdpdGggRk0gcmFkaW8KKwkwMjE2ICBQQ1RWIDYwZQorCTAyMTkgIFBDVFYgMjYwZQorCTAyMWEgIERhenpsZSBEVkMxMDAgQXVkaW8gRGV2aWNlCisJMDIxYiAgRGF6emxlIERWQzEzMC9EVkMxNzAKKwkwMjFkICBEYXp6bGUgRFZDMTMwCisJMDIxZSAgRGF6emxlIERWQzE3MAorCTAyMWYgIFBDVFYgU2F0IEhEVFYgUHJvIEJEQSBEZXZpY2UKKwkwMjIyICBQQ1RWIFNhdCBQcm8gQkRBIERldmljZQorCTAyMjMgIERhenpsZVRWIFNhdCBCREEgRGV2aWNlCisJMDIyNiAgUENUViAzMzBlCisJMDIyNyAgUENUViBmb3IgTWFjLCBIRCBTdGljaworCTAyMjggIFBDVFYgRFZCLVQgRmxhc2ggU3RpY2sKKwkwMjJhICBQQ1RWIDE2MGUKKwkwMjJiICBQQ1RWIDcxZQorCTAyMzIgIFBDVFYgMTcwZQorCTAzMDAgIFN0dWRpbyBMaW54IFZpZGVvIGlucHV0IGNhYmxlIChOVFNDKQorCTAzMDEgIFN0dWRpbyBMaW54IFZpZGVvIGlucHV0IGNhYmxlIChQQUwpCisJMDMwMiAgRGF6emxlIERWQzEyMAorCTA0MTkgIFBDVFYgQnVuZ2VlIFVTQiAoUEFMKSB3aXRoIEZNIHJhZGlvCisJMDYxZCAgUENUViBEZWx1eGUgKE5UU0MpIERldmljZQorCTA2MWUgIFBDVFYgRGVsdXhlIChQQUwpIERldmljZQorMjMxOCAgU2hpbmluZyBUZWNobm9sb2dpZXMsIEluYy4gW2hleF0KKwkwMDExICBDaXRpRElTSyBKci4gSURFIEVuY2xvc3VyZQorMjM3NSAgRGlnaXRAbHdheSwgSW5jLgorCTAwMDEgIERpZ2l0YWwgQXVkaW8gUGxheWVyCisyNDA2ICBTQU5ITyBEaWdpdGFsIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorCTY2ODggIFBEN1ggUG9ydGFibGUgU3RvcmFnZQorMjQ3OCAgVHJpcHAtTGl0ZQorCTIwMDggIFUyMDktMDAwLVIgU2VyaWFsIFBvcnQKKzI2MzIgIFR3aW5NT1MKKwkzMjA5ICA3LWluLTEgQ2FyZCBSZWFkZXIKKzI2NTAgIEVsZWN0cm9uaWNzIEZvciBJbWFnaW5nLCBJbmMuIFtoZXhdCisyNzMwICBDaXRpemVuCisJMjAwZiAgQ1QtUzMxMCBMYWJlbCBwcmludGVyCisyNzM1ICBEaWdpdGFsV2F5CisJMDAwMyAgTVBJTyAxLjVHQiBIYXJkIERpc2MgRHJpdmUKKzI3NzAgIE5ISiwgTHRkCisJMGEwMSAgU2NhbkpldCA0NjAwIHNlcmllcworCTkwNWMgIENoZS1FeiBTbmFwIFNOQVAtVS9EaWdpZ3I4L1NvdW5kc3RhciBUREMtMzUKKwk5MDYwICBBMTMwCisJOTEyMCAgQ2hlLWV6ISBTbmFwIC8gaUNsaWNrIFRpbnkgVkdBIERpZ2l0YWwgQ2FtZXJhCisJOTEzMCAgVENHIDUwMQorCTkxM2MgIEFyZ3VzIERDLTE3MzAKKwk5MTUwICBNaW5pIENhbQorCTkxNTMgIGlDbGljayA1WAorCTkxNWQgIEN5YmVycGl4IFMtMjEwUyAvIExpdHRsZSBUaWtlcyBNeSBSZWFsIERpZ2l0YWwgQ2FtZXJhCisJOTMwYiAgQ0NEIFdlYmNhbShQQzM3MFIpCisJOTMwYyAgQ0NEIFdlYmNhbShQQzM3MFIpCisyODk5ICBUb3B0cm9uaWMgSW5kdXN0cmlhbCBDby4sIEx0ZAorMmMwMiAgUGxhbmV4IENvbW11bmljYXRpb25zCisJMTRlYSAgR1ctVVMxMUggV0xBTgorMmZiMiAgRnVqaXRzdSwgTHRkCiszMTI1ICBFYWdsZXRyb24KKwkwMDAxICBUcmFja2VyUG9kIENhbWVyYSBTdGFuZAorMzE3NiAgV2hhbmFtIEVsZWN0cm9uaWNzIENvLiwgTHRkCiszMjc1ICBWaWR6TWVkaWEgUHRlIEx0ZAorCTRmYjEgIE1vbnN0ZXJUViBQMkgKKzMzMzQgIEFFSQorCTE3MDEgIEZhc3QgRXRoZXJuZXQKKzMzNDAgIFlha3VtbworCTA0M2EgIE1pbyBBNzAxIERpZ2lXYWxrZXIgUFBDUGhvbmUKKwkwZTNhICBQb2NrZXQgUEMgMzAwIEdQUyBTTCAvIFR5cGhvb24gTXlHdWlkZSAzNTAwCisJYTBhMyAgZGVsdGFYIDUgQlQgKEQpIFBEQQorMzUwNCAgTWljcm8gU3RhcgorCWYxMTAgIFNlY3VyaXR5IEtleQorMzUzOCAgUG93ZXIgUXVvdGllbnQgSW50ZXJuYXRpb25hbCBDby4sIEx0ZAorCTAwMDEgIFRyYXZlbCBGbGFzaAorCTAwMTUgIE1hc3MgU3RvcmdlIERldmljZQorCTAwMjIgIEhpLVNwZWVkIE1hc3MgU3RvcmFnZSBEZXZpY2UKKwkwMDQyICBDb29sIERyaXZlIFUzMzkgRmxhc2ggRGlzaworMzU3OSAgRElWQQorCTY5MDEgIE1lZGlhIFJlYWRlcgorMzYzNiAgSW5WaWJybworMzgzOCAgV0VNCisJMDAwMSAgNS1pbi0xIENhcmQgUmVhZGVyCiszOTIzICBOYXRpb25hbCBJbnN0cnVtZW50cyBDb3JwLgorCTEyYzAgIERBUVBhZC02MDIwRQorCTEyZDAgIERBUVBhZC02NTA3CisJMTJlMCAgTkkgNDM1MAorCTEyZjAgIE5JIDUxMDIKKwkxNzUwICBEQVFQYWQtNjUwOAorCTE3YjAgIFVTQi1JU0EtQnJpZGdlCisJMTgyMCAgREFRUGFkLTYwMjBFICg2OCBwaW4gSS9PKQorCTE4MzAgIERBUVBhZC02MDIwRSAoQk5DKQorCTFmMDAgIERBUVBhZC02MDI0RQorCTFmMTAgIERBUVBhZC02MDI0RQorCTFmMjAgIERBUVBhZC02MDI1RQorCTFmMzAgIERBUVBhZC02MDI1RQorCTFmNDAgIERBUVBhZC02MDM2RQorCTFmNTAgIERBUVBhZC02MDM2RQorCTJmODAgIERBUVBhZC02MDUyRQorCTJmOTAgIERBUVBhZC02MDUyRQorCTcwM2MgIFVTQi00ODUgUlM0ODUgQ2FibGUKKwk3MjU0ICBOSSBNSU8gKGRhdGEgYWNxdWlzaXRpb24gY2FyZCkgZmlybXdhcmUgdXBkYXRlcgorCTcyOWUgIFVTQi02MjUxIChPRU0pIGRhdGEgYWNxdWlzaXRpb24gY2FyZAorNDBiYiAgSS1PIERhdGEKKwkwYTA5ICBVU0IyLjAtU0NTSSBCcmlkZ2UgVVNCMi1TQworNDEwMSAgaS1yb2NrcworCTEzMDEgIElSLTI1MTAgdXNiIHBob25lCis0MTAyICBpUml2ZXIsIEx0ZC4KKwkxMDAxICBpRlAtMTAwIHNlcmllcyBtcDMgcGxheWVyCisJMTAwMyAgaUZQLTMwMCBzZXJpZXMgbXAzIHBsYXllcgorCTEwMDUgIGlGUC01MDAgc2VyaWVzIG1wMyBwbGF5ZXIKKwkxMDA3ICBpRlAtNzAwIHNlcmllcyBtcDMvb2dnIHZvcmJpcyBwbGF5ZXIKKwkxMDA4ICBpRlAtODAwIHNlcmllcyBtcDMvb2dnIHZvcmJpcyBwbGF5ZXIKKwkxMDBhICBpRlAtMTAwMCBzZXJpZXMgbXAzL29nZyB2b3JiaXMgcGxheWVyCisJMTAxNCAgVDIwIHNlcmllcyBtcDMvb2dnIHZvcmJpcyBwbGF5ZXIgKHVtcyBmaXJtd2FyZSkKKwkxMTAxICBpRlAtMTAwIHNlcmllcyBtcDMgcGxheWVyICh1bXMgZmlybXdhcmUpCisJMTEwMyAgaUZQLTMwMCBzZXJpZXMgbXAzIHBsYXllciAodW1zIGZpcm13YXJlKQorCTExMDUgIGlGUC01MDAgc2VyaWVzIG1wMyBwbGF5ZXIgKHVtcyBmaXJtd2FyZSkKKwkxMTEzICBUMTAgKGFsdGVybmF0ZSkKKwkxMTE3ICBUMTAKKwkxMTE5ICBUMzAgc2VyaWVzIG1wMy9vZ2cvd21hIHBsYXllcgorCTIwMDIgIEgxMCA2R0IKKwkyMTAxICBIMTAgMjBHQiAobXRwKQorCTIxMDIgIEgxMCA1R0IgKG10cCkKKwkyMTA1ICBIMTAgNS82R0IgKG10cCkKKzQxM2MgIERlbGwgQ29tcHV0ZXIgQ29ycC4KKwkwMDU4ICBQb3J0IFJlcGxpY2F0b3IKKwkxMDAxICBLZXlib2FyZCBIdWIKKwkxMDAyICBLZXlib2FyZCBIdWIKKwkyMDAxICBLZXlib2FyZCBISUQgU3VwcG9ydAorCTIwMDIgIFNLLTgxMjUgS2V5Ym9hcmQKKwkyMDAzICBLZXlib2FyZAorCTIwMDUgIFJUN0Q1MCBLZXlib2FyZAorCTIxMDAgIFNLLTMxMDYgS2V5Ym9hcmQKKwkyMTAxICBTbWFydENhcmQgUmVhZGVyIEtleWJvYXJkCisJMjUwMCAgRFJBQzQgUmVtb3RlIEFjY2VzcyBDYXJkCisJMzAxMCAgT3B0aWNhbCBXaGVlbCBNb3VzZQorCTMyMDAgIE1vdXNlCisJNDAwMSAgQXhpbSBYNQorCTQwMDIgIEF4aW0gWDMKKwk0MDAzICBBeGltIFgzMAorCTQwMDQgIEF4aW0gU3luYworCTQwMDUgIEF4aW0gU3luYworCTQwMDYgIEF4aW0gU3luYworCTQwMDcgIEF4aW0gU3luYworCTQwMDggIEF4aW0gU3luYworCTQwMDkgIEF4aW0gU3luYworCTQwMTEgIEF4aW0gWDUxdgorCTUxMDMgIEFJTyBQcmludGVyIEE5NDAKKwk1MTA1ICBBSU8gUHJpbnRlciBBOTIwCisJNTEwNyAgQUlPIFByaW50ZXIgQTk2MAorCTUxMDkgIFBob3RvIEFJTyBQcmludGVyIDkyMgorCTUxMTAgIFBob3RvIEFJTyBQcmludGVyIDk2MgorCTUxMTEgIFBob3RvIEFJTyBQcmludGVyIDk0MgorCTUxMTIgIFBob3RvIEFJTyBQcmludGVyIDkyNAorCTUxMTMgIFBob3RvIEFJTyBQcmludGVyIDk0NAorCTUxMTQgIFBob3RvIEFJTyBQcmludGVyIDk2NAorCTUxMTUgIFBob3RvIEFJTyBQcmludGVyIDkyNgorCTUxMTYgIEFJTyBQcmludGVyIDk0NgorCTUxMTcgIFBob3RvIEFJTyBQcmludGVyIDk2NgorCTUxMTggIEFJTyA4MTAKKwk1MTI0ICBMYXNlciBNRlAgMTgxNQorCTUxMjggIFBob3RvIEFJTyA5MjgKKwk1MjAwICBMYXNlciBQcmludGVyCisJNTIwMiAgUHJpbnRpbmcgU3VwcG9ydAorCTUyMDMgIFByaW50aW5nIFN1cHBvcnQKKwk1MjEwICBQcmludGluZyBTdXBwb3J0CisJNTIxMSAgUHJpbnRpbmcgU3VwcG9ydAorCTUyMjAgIExhc2VyIE1GUCAxNjAwbgorCTUyMjUgIFByaW50aW5nIFN1cHBvcnQKKwk1MjI2ICBQcmludGluZyBTdXBwb3J0CisJNTMwMCAgTGFzZXIgUHJpbnRlcgorCTU0MDAgIExhc2VyIFByaW50ZXIKKwk1NDAxICBMYXNlciBQcmludGVyCisJNTYwMSAgTGFzZXIgUHJpbnRlciAzMTAwY24KKwk1NjAyICBMYXNlciBQcmludGVyIDMwMDBjbgorCTU2MzEgIExhc2VyIFByaW50ZXIgNTEwMGNuCisJNTkwNSAgUHJpbnRpbmcgU3VwcG9ydAorCTgwMDAgIEJDMDIgQmx1ZXRvb3RoIFVTQiBBZGFwdGVyCisJODAxMCAgVHJ1ZU1vYmlsZSBCbHVldG9vdGggTW9kdWxlIGluCisJODEwMCAgVHJ1ZU1vYmlsZSAxMTgwIDgwMi4xMWIgQWRhcHRlcgorCTgxMDIgIFRydWVNb2JpbGUgMTMwMCBVU0IyLjAgV0xBTiBDYXJkCisJODEwMyAgV2lyZWxlc3MgMzUwIEJsdWV0b290aAorCTgxMDQgIFdpcmVsZXNzIDE0NTAgRHVhbC1iYW5kICg4MDIuMTFhL2IvZykgVVNCMi4wIEFkYXB0ZXIKKwk4MTA1ICBVMiBpbiBISUQgLSBEcml2ZXIKKwk4MTA2ICBXaXJlbGVzcyAzNTAgQmx1ZXRvb3RoIEludGVybmFsIENhcmQgaW4KKwk4MTEwICBXaXJlbGVzcyAzeHggQmx1ZXRvb3RoIEludGVybmFsIENhcmQKKwk4MTExICBXaXJlbGVzcyAzeHggQmx1ZXRvb3RoIEludGVybmFsIENhcmQgaW4KKwk4MTE0ICBXaXJlbGVzcyA1NzAwIE1vYmlsZSBCcm9hZGJhbmQgKENETUEgRVYtRE8pIE1pbmljYXJkIE1vZGVtCisJODExNSAgV2lyZWxlc3MgNTUwMCBNb2JpbGUgQnJvYWRiYW5kICgzRyBIU0RQQSkgTWluaWNhcmQgTW9kZW0KKwk4MTE2ICBXaXJlbGVzcyA1NTA1IE1vYmlsZSBCcm9hZGJhbmQgKDNHIEhTRFBBKSBNaW5pY2FyZCBNb2RlbQorCTgxMTcgIFdpcmVsZXNzIDU3MDAgTW9iaWxlIEJyb2FkYmFuZCAoQ0RNQSBFVi1ETykgRXhwcmVzc2NhcmQgTW9kZW0KKwk4MTE4ICBXaXJlbGVzcyA1NTEwIE1vYmlsZSBCcm9hZGJhbmQgKDNHIEhTRFBBKSBFeHByZXNzY2FyZCBTdGF0dXMgUG9ydAorCTgxMjAgIEJsdWV0b290aCBhZGFwdGVyCisJODEyMSAgRWFzdGZvbGQgaW4gSElECisJODEyMiAgRWFzdGZvbGQgaW4gREZVCisJODEyMyAgZUhvbWUgSW5mcmFyZWQgUmVjZWl2ZXIKKwk4MTI0ICBlSG9tZSBJbmZyYXJlZCBSZWNlaXZlcgorCTgxMjYgIFdpcmVsZXNzIDM1NSBCbHVldG9vdGgKKwk4MTI3ICBXaXJlbGVzcyAzNTUgTW9kdWxlIHdpdGggQmx1ZXRvb3RoIDIuMCArIEVEUiBUZWNobm9sb2d5LgorCTgxMjggIFdpcmVsZXNzIDU3MDAtU3ByaW50IE1vYmlsZSBCcm9hZGJhbmQgKENETUEgRVYtRE8pIE1pbmktQ2FyZCBTdGF0dXMgUG9ydAorCTgxMjkgIFdpcmVsZXNzIDU3MDAtVGVsdXMgTW9iaWxlIEJyb2FkYmFuZCAoQ0RNQSBFVi1ETykgTWluaS1DYXJkIFN0YXR1cyBQb3J0CisJODEzMSAgV2lyZWxlc3MgMzYwIEJsdWV0b290aCAyLjAgKyBFRFIgbW9kdWxlLgorCTgxMzMgIFdpcmVsZXNzIDU3MjAgVlpXIE1vYmlsZSBCcm9hZGJhbmQgKEVWRE8gUmV2LUEpIE1pbmljYXJkIEdQUyBQb3J0CisJODEzNCAgV2lyZWxlc3MgNTcyMCBTcHJpbnQgTW9iaWxlIEJyb2FkYmFuZCAoRVZETyBSZXYtQSkgTWluaWNhcmQgU3RhdHVzIFBvcnQKKwk4MTM1ICBXaXJlbGVzcyA1NzIwIFRFTFVTIE1vYmlsZSBCcm9hZGJhbmQgKEVWRE8gUmV2LUEpIE1pbmljYXJkIERpYWdub3N0aWNzIFBvcnQKKwk4MTM2ICBXaXJlbGVzcyA1NTIwIENpbmd1bGFyIE1vYmlsZSBCcm9hZGJhbmQgKDNHIEhTRFBBKSBNaW5pY2FyZCBEaWFnbm9zdGljcyBQb3J0CisJODEzNyAgV2lyZWxlc3MgNTUyMCBWb2RhIEwgTW9iaWxlIEJyb2FkYmFuZCAoM0cgSFNEUEEpIE1pbmljYXJkIFN0YXR1cyBQb3J0CisJODEzOCAgV2lyZWxlc3MgNTUyMCBWb2RhIEkgTW9iaWxlIEJyb2FkYmFuZCAoM0cgSFNEUEEpIE1pbmljYXJkIEVBUC1TSU0gUG9ydAorCTgxNDAgIFdpcmVsZXNzIDM2MCBCbHVldG9vdGgKKwk4MTQyICBNb2JpbGUgMzYwIGluIERGVQorCTg1MDEgIEJsdWV0b290aCBBZGFwdGVyCisJYTAwMSAgSHViCisJYTAwNSAgSW50ZXJuYWwgMi4wIEh1YgorCWE3MDAgIEh1YiAoaW4gMTkwNUZQIExDRCBNb25pdG9yKQorNDE0NiAgVVNCZXN0IFRlY2hub2xvZ3kKKwk5MjgxICBJb21lZ2EgTWljcm8gTWluaSAxMjhNQiBGbGFzaCBEcml2ZQorCWJhMDEgIEludHVpeCBGbGFzaCBEcml2ZQorNDI0MiAgVVNCIERlc2lnbiBieSBFeGFtcGxlCisJNDIwMSAgQnV0dG9ucyBhbmQgTGlnaHRzIEhJRCBkZXZpY2UKKwk0MjIwICBFY2hvIDEgQ2FtZXJhCis0MzQ4ICBXaW5DaGlwSGVhZAorCTU1MjMgIFVTQi0+UlMgMjMyIGFkYXB0ZXIgd2l0aCBQcm9saWZlYyBQTCAyMzAzIGNoaXBzZXQKKwk1NTM3ICAxMy41Nk1oeiBSRklEIENhcmQgUmVhZGVyIGFuZCBXcml0ZXIKKwk1NTg0ICBDSDM0eCBwcmludGVyIGFkYXB0ZXIgY2FibGUKKzQ1NzIgIFNodXR0bGUsIEluYy4KKwk0NTcyICBTaHV0dGxlIFBOMzEgUmVtb3RlCis0NTg2ICBQYW5yYW0KKwkxMDI2ICBDcnlzdGFsIEJhciBGbGFzaCBEcml2ZQorNDY3MCAgRU1TIFByb2R1Y3Rpb24KKwk5Mzk0ICBHYW1lIEN1YmUgVVNCIE1lbW9yeSBBZGFwdG9yIDY0TQorNDc1MiAgTWlkaXRlY2gKKwkwMDExICBNaWRpc3RhcnQtMgorNDc2NiAgQWNlZWNhCisJMDAwMSAgTUVaMTAwMCBSREEKKzQ4NTUgIE1lbW9yZXgKKwk3Mjg4ICBVbHRyYSBUcmF2ZWxkcml2ZSAxNjBHIDIuNSIgSERECis1MDMyICBHcmFuZHRlYworCTBiYjggIEdyYW5kdGVjIFVTQjEuMSBEVkItVCAoY29sZCkKKwkwYmI5ICBHcmFuZHRlYyBVU0IxLjEgRFZCLVQgKHdhcm0pCisJMGZhMCAgR3JhbmR0ZWMgVVNCMS4xIERWQi1UIChjb2xkKQorCTBmYTEgIEdyYW5kdGVjIFVTQjEuMSBEVkItVCAod2FybSkKKzUwNDEgIExpbmtzeXMgKD8pCisJMjIzNCAgV1VTQjU0RyA4MDIuMTFnIEFkYXB0ZXIKKzUxNzMgIFN3ZWV4CisJMTgwOSAgWkQxMjExCis1MzQ1ICBPd29uCisJMTIzNCAgUERTNjA2MlQgT3NjaWxsb3Njb3BlCis1NDRkICBUcmFuc21ldGEgQ29ycC4KKzU1NDMgIFVDLUxvZ2ljIFRlY2hub2xvZ3kgQ29ycC4KKwkwMDAyICBTdXBlclBlbiBXUDMzMjVVIFRhYmxldAorCTAwMDMgIEdlbml1cyBNb3VzZVBlbiA0eDMgVGFibGV0L0FxdWlsYSBMMSBUYWJsZXQKKwkwMDA0ICBHZW5pdXMgTW91c2VQZW4gNXg0IFRhYmxldAorCTAwMDUgIEdlbml1cyBNb3VzZVBlbiA4eDYgVGFibGV0CisJMDA0MSAgR2VuaXVzIFBlblNrZXRjaCA2eDggVGFibGV0CisJMDA0MiAgR2VuaXVzIFBlblNrZXRjaCAxMng5IFRhYmxldAorNTVhYSAgT25TcGVjIEVsZWN0cm9uaWMsIEluYy4KKwkwMDE1ICBIYXJkIERyaXZlCisJMDEwMiAgU3VwZXJEaXNrCisJMDEwMyAgSURFIEhhcmQgRHJpdmUKKwkwMjAxICBEREkgdG8gUmVhZGVyLTE5CisJMTIzNCAgQVRBUEkgQnJpZGdlCisJYTEwMyAgU2FuZGlzayBTRERSLTU1IFNtYXJ0TWVkaWEgQ2FyZCBSZWFkZXIKKwliMDAwICBVU0IgdG8gQ29tcGFjdEZsYXNoIENhcmQgUmVhZGVyCisJYjAwNCAgT25TcGVjIE1NQy9TRCBSZWFkZXIvV3JpdGVyCisJYjAwYiAgVVNCIHRvIE1lbW9yeSBTdGljayBDYXJkIFJlYWRlcgorCWIwMGMgIFVTQiB0byBTbWFydE1lZGlhIENhcmQgUmVhZGVyCisJYjAxMiAgTWl0c3VtaSBGQTQwMk0gOC1pbi0yIENhcmQgUmVhZGVyCisJYjIwMCAgQ29tcGFjdCBGbGFzaCBSZWFkZXIKKwliMjA0ICBNTUMvIFNEIFJlYWRlcgorCWIyMDcgIE1lbW9yeSBTdGljayBSZWFkZXIKKzU5ODYgIEFjZXIsIEluYworCTAxMDIgIENyeXN0YWwgRXllIHdlYmNhbQorNWE1NyAgWmlud2VsbAorCTAyNjAgIFJUMjU3MAorNjE4OSAgU2l0ZWNvbQorCTE4MmQgIFVTQiAyLjAgRXRoZXJuZXQKKwkyMDY4ICBVU0IgdG8gc2VyaWFsIGNhYmxlICh2MikKKzYyNTMgIFR3aW5IYW4gVGVjaG5vbG9neSBDby4sIEx0ZAorCTAxMDAgIElyIHJlY2l2ZXIgZi4gcmVtb3RlIGNvbnRyb2wKKzYzNmMgIENvcmVMb2dpYywgSW5jLgorNjU0NyAgQXJrbWljcm8gVGVjaG5vbG9naWVzIEluYy4KKwkwMjMyICBBUkszMTE2IFNlcmlhbAorNjY2NiAgUHJvdG90eXBlIHByb2R1Y3QgVmVuZG9yIElECisJMDY2NyAgV2lzZUdyb3VwIFNtYXJ0IEpveSBQU1gsIFBTLVBDIFNtYXJ0IEpveVBhZAorCTI2NjcgIEpDT1AgQmx1ZVogU21hcnRjYXJkIHJlYWRlcgorCTg4MDQgIFdpc2VHcm91cCBTdXBlckpveSBCb3ggNQorNjg5MSAgM0NvbQorCWE3MjcgIDNDUlVTQjEwMDc1Cis2OTkzICBGcmVzaHRlbAorCWIwMDEgIEZULTEwMiBWb0lQIFVTQiBQaG9uZQorNmE3NSAgU2hhbmdoYWkgSnVqbyBFbGVjdHJvbmljcyBDby4sIEx0ZAorNzEwNCAgQ01FIChDZW50cmFsIE11c2ljIENvLikKKwkyMjAyICBVRjUvVUY2L1VGNy9VRjggTUlESSBNYXN0ZXIgS2V5Ym9hcmQKKzgwODYgIEludGVsIENvcnAuCisJMDAwMSAgQW55UG9pbnQgKFRNKSBIb21lIE5ldHdvcmsgMS42IE1icHMgV2lyZWxlc3MgQWRhcHRlcgorCTAxMDAgIFBlcnNvbmFsIEF1ZGlvIFBsYXllciAzMDAwCisJMDEwMSAgUGVyc29uYWwgQXVkaW8gUGxheWVyIDMwMDAKKwkwMTEwICBFYXN5IFBDIENhbWVyYQorCTAxMjAgIFBDIENhbWVyYSBDUzEyMAorCTAyMDAgIEFueVBvaW50KFRNKSBXaXJlbGVzcyBJSSBOZXR3b3JrIDExTWJwcyBBZGFwdGVyCisJMDQzMSAgSW50ZWwgUHJvIFZpZGVvIFBDIENhbWVyYQorCTA1MTAgIERpZ2l0YWwgTW92aWUgQ3JlYXRvcgorCTA2MzAgIFBvY2tldCBQQyBDYW1lcmEKKwkwNzgwICBDUzc4MCBNaWNyb3Bob25lIElucHV0CisJMDdkMyAgQkxPQiBib290IGxvYWRlciBmaXJtd2FyZQorCTBkYWQgIENoZXJyeSBNaW5pYXR1cmVDYXJkIEtleWJvYXJkCisJMTAxMCAgQW55UG9pbnQoVE0pIEhvbWUgTmV0d29yayAxMCBNYnBzIFBob25lbGluZSBBZGFwdGVyCisJMTEwYSAgQmx1ZXRvb3RoIENvbnRyb2xsZXIgZnJvbSAoRXJpY3Nzb24gUDRBKQorCTExMGIgIEJsdWV0b290aCBDb250cm9sbGVyIGZyb20gKEludGVsL0NTUikKKwkxMTEwICBQUk8vV2lyZWxlc3MgTEFOIE1vZHVsZQorCTExMTEgIFBSTy9XaXJlbGVzcyAyMDExQiA4MDIuMTFiIEFkYXB0ZXIKKwkxMTM0ICBIb2xsaXN0ZXIgTW9iaWxlIE1vbml0b3IKKwkxMjM0ICBQcm90b3R5cGUgUmVhZGVyL1dyaXRlcgorCTMxMDAgIFBSTy9EU0wgMzIyMCBNb2RlbSAtIFdBTgorCTMxMDEgIFBSTy9EU0wgMzIyMCBNb2RlbQorCTMyNDAgIEFueVBvaW50wq4gMzI0MCBNb2RlbSAtIFdBTgorCTMyNDEgIEFueVBvaW50wq4gMzI0MCBNb2RlbQorCTg2MDIgIE1pbmlhdHVyZSBDYXJkIFNsb3QKKwk5MzAzICBJbnRlbCA4eDkzMEh4IEh1YgorCTk4OTAgIDgyOTMwIFRlc3QgQm9hcmQKKwliZWVmICBTQ00gTWluaWF0dXJlIENhcmQgUmVhZGVyL1dyaXRlcgorCWMwMTMgIFdpcmVsZXNzIEhJRCBTdGF0aW9uCisJZjAwMSAgWFNjYWxlIFBYQTI3eCBCdWx2ZXJkZSBmbGFzaAorODM0MSAgRUdPIFN5c3RlbXMsIEluYy4KKwkyMDAwICBGbGFzaGRpc2sKKzkwMTYgIFNpdGVjb20KKwkxODJkICBXTC0wMjIKKzk3MTAgIE1vc0NoaXAgU2VtaWNvbmR1Y3RvcgorCTc3MDMgIE1DUzc3MDMgU2VyaWFsIFBvcnQgQWRhcHRlcgorCTc3MDUgIFByaW50ZXIgY2FibGUKKwk3NzE1ICBQcmludGVyIGNhYmxlCisJNzc4MCAgTVM3NzgwIDRNYnBzIEZhc3QgSVJEQSBBZGFwdGVyCisJNzgzMCAgTUNTNzgzMCBFdGhlcm5ldAorYTcyNyAgM0NvbQorCTY4OTMgIEFSNTUyMworCTY4OTUgIEFSNTUyMworCTY4OTcgIEFSNTUyMworYzI1MSAgS2VpbCBTb2Z0d2FyZSwgSW5jLgorCTI3MTAgIFVMaW5rCitlYjFhICBlTVBJQSBUZWNobm9sb2d5LCBJbmMuCisJMTdkZSAgS1dvcmxkIFYtU3RyZWFtIFhQRVJUIERUViAtIERWQi1UIFVTQiBjb2xkCisJMTdkZiAgS1dvcmxkIFYtU3RyZWFtIFhQRVJUIERUViAtIERWQi1UIFVTQiB3YXJtCisJMjcxMCAgU2lsdmVyQ3Jlc3QgV2ViQ2FtCisJMjc1MCAgRUNTIEVsaXRlZ3JvdXAgRzIyMCBpbnRlZ3JhdGVkIHdlYmNhbQorCTI4MDAgIFRlcnJhdGVjIENpbmVyZ3kgMjAwCisJMjgwMSAgR3JhYkJlZVgrIFZpZGVvIEVuY29kZXIKK2YwMDMgIEhld2xldHQgUGFja2FyZAorCTYwMDIgIFBob3RvU21hcnQgQzUwMAorCisjIExpc3Qgb2Yga25vd24gZGV2aWNlIGNsYXNzZXMsIHN1YmNsYXNzZXMgYW5kIHByb3RvY29scworCisjIFN5bnRheDoKKyMgQyBjbGFzcyAgY2xhc3NfbmFtZQorIwlzdWJjbGFzcyAgc3ViY2xhc3NfbmFtZQkJCTwtLSBzaW5nbGUgdGFiCisjCQlwcm90b2NvbCAgcHJvdG9jb2xfbmFtZQkJPC0tIHR3byB0YWJzCisKK0MgMDAgIChEZWZpbmVkIGF0IEludGVyZmFjZSBsZXZlbCkKK0MgMDEgIEF1ZGlvCisJMDEgIENvbnRyb2wgRGV2aWNlCisJMDIgIFN0cmVhbWluZworCTAzICBNSURJIFN0cmVhbWluZworQyAwMiAgQ29tbXVuaWNhdGlvbnMKKwkwMSAgRGlyZWN0IExpbmUKKwkwMiAgQWJzdHJhY3QgKG1vZGVtKQorCQkwMCAgTm9uZQorCQkwMSAgQVQtY29tbWFuZHMgKHYuMjV0ZXIpCisJCTAyICBBVC1jb21tYW5kcyAoUENDQTEwMSkKKwkJMDMgIEFULWNvbW1hbmRzIChQQ0NBMTAxICsgd2FrZXVwKQorCQkwNCAgQVQtY29tbWFuZHMgKEdTTSkKKwkJMDUgIEFULWNvbW1hbmRzICgzRykKKwkJMDYgIEFULWNvbW1hbmRzIChDRE1BKQorCQlmZSAgRGVmaW5lZCBieSBjb21tYW5kIHNldCBkZXNjcmlwdG9yCisJCWZmICBWZW5kb3IgU3BlY2lmaWMgKE1TRlQgUk5ESVM/KQorCTAzICBUZWxlcGhvbmUKKwkwNCAgTXVsdGktQ2hhbm5lbAorCTA1ICBDQVBJIENvbnRyb2wKKwkwNiAgRXRoZXJuZXQgTmV0d29ya2luZworCTA3ICBBVE0gTmV0d29ya2luZworCTA4ICBXaXJlbGVzcyBIYW5kc2V0IENvbnRyb2wKKwkwOSAgRGV2aWNlIE1hbmFnZW1lbnQKKwkwYSAgTW9iaWxlIERpcmVjdCBMaW5lCisJMGIgIE9CRVgKKwkwYyAgRXRoZXJuZXQgRW11bGF0aW9uCisJCTA3ICBFdGhlcm5ldCBFbXVsYXRpb24gKEVFTSkKK0MgMDMgIEh1bWFuIEludGVyZmFjZSBEZXZpY2UKKwkwMCAgTm8gU3ViY2xhc3MKKwkJMDAgIE5vbmUKKwkJMDEgIEtleWJvYXJkCisJCTAyICBNb3VzZQorCTAxICBCb290IEludGVyZmFjZSBTdWJjbGFzcworCQkwMCAgTm9uZQorCQkwMSAgS2V5Ym9hcmQKKwkJMDIgIE1vdXNlCitDIDA1ICBQaHlzaWNhbCBJbnRlcmZhY2UgRGV2aWNlCitDIDA2ICBJbWFnaW5nCisJMDEgIFN0aWxsIEltYWdlIENhcHR1cmUKKwkJMDEgIFBpY3R1cmUgVHJhbnNmZXIgUHJvdG9jb2wgKFBJTUEgMTU0NzApCitDIDA3ICBQcmludGVyCisJMDEgIFByaW50ZXIKKwkJMDAgIFJlc2VydmVkL1VuZGVmaW5lZAorCQkwMSAgVW5pZGlyZWN0aW9uYWwKKwkJMDIgIEJpZGlyZWN0aW9uYWwKKwkJMDMgIElFRUUgMTI4NC40IGNvbXBhdGlibGUgYmlkaXJlY3Rpb25hbAorCQlmZiAgVmVuZG9yIFNwZWNpZmljCitDIDA4ICBNYXNzIFN0b3JhZ2UKKwkwMSAgUkJDICh0eXBpY2FsbHkgRmxhc2gpCisJCTAwICBDb250cm9sL0J1bGsvSW50ZXJydXB0CisJCTAxICBDb250cm9sL0J1bGsKKwkJNTAgIEJ1bGsgKFppcCkKKwkwMiAgU0ZGLTgwMjBpLCBNTUMtMiAoQVRBUEkpCisJMDMgIFFJQy0xNTcKKwkwNCAgRmxvcHB5IChVRkkpCisJCTAwICBDb250cm9sL0J1bGsvSW50ZXJydXB0CisJCTAxICBDb250cm9sL0J1bGsKKwkJNTAgIEJ1bGsgKFppcCkKKwkwNSAgU0ZGLTgwNzBpCisJMDYgIFNDU0kKKwkJMDAgIENvbnRyb2wvQnVsay9JbnRlcnJ1cHQKKwkJMDEgIENvbnRyb2wvQnVsaworCQk1MCAgQnVsayAoWmlwKQorQyAwOSAgSHViCisJMDAgIFVudXNlZAorCQkwMCAgRnVsbCBzcGVlZCAob3Igcm9vdCkgaHViCisJCTAxICBTaW5nbGUgVFQKKwkJMDIgIFRUIHBlciBwb3J0CitDIDBhICBDREMgRGF0YQorCTAwICBVbnVzZWQKKwkJMzAgIEkuNDMwIElTRE4gQlJJCisJCTMxICBIRExDCisJCTMyICBUcmFuc3BhcmVudAorCQk1MCAgUS45MjFNCisJCTUxICBRLjkyMQorCQk1MiAgUS45MjFUTQorCQk5MCAgVi40MmJpcworCQk5MSAgUS45MzIgRXVyb0lTRE4KKwkJOTIgIFYuMTIwIFYuMjQgcmF0ZSBJU0ROCisJCTkzICBDQVBJIDIuMAorCQlmZCAgSG9zdCBCYXNlZCBEcml2ZXIKKwkJZmUgIENEQyBQVUYKKwkJZmYgIFZlbmRvciBzcGVjaWZpYworQyAwYiAgQ2hpcC9TbWFydENhcmQKK0MgMGQgIENvbnRlbnQgU2VjdXJpdHkKK0MgMGUgIFZpZGVvCisJMDAgIFVuZGVmaW5lZAorCTAxICBWaWRlbyBDb250cm9sCisJMDIgIFZpZGVvIFN0cmVhbWluZworCTAzICBWaWRlbyBJbnRlcmZhY2UgQ29sbGVjdGlvbgorQyBkYyAgRGlhZ25vc3RpYworCTAxICBSZXByb2dyYW1tYWJsZSBEaWFnbm9zdGljcworCQkwMSAgVVNCMiBDb21wbGlhbmNlCitDIGUwICBXaXJlbGVzcworCTAxICBSYWRpbyBGcmVxdWVuY3kKKwkJMDEgIEJsdWV0b290aAorCQkwMiAgVWx0cmEgV2lkZUJhbmQgUmFkaW8gQ29udHJvbAorCQkwMyAgUk5ESVMKKwkwMiAgV2lyZWxlc3MgVVNCIFdpcmUgQWRhcHRlcgorCQkwMSAgSG9zdCBXaXJlIEFkYXB0ZXIgQ29udHJvbC9EYXRhIFN0cmVhbWluZworCQkwMiAgRGV2aWNlIFdpcmUgQWRhcHRlciBDb250cm9sL0RhdGEgU3RyZWFtaW5nCisJCTAzICBEZXZpY2UgV2lyZSBBZGFwdGVyIElzb2Nocm9ub3VzIFN0cmVhbWluZworQyBlZiAgTWlzY2VsbGFuZW91cyBEZXZpY2UKKwkwMSAgPworCQkwMSAgTWljcm9zb2Z0IEFjdGl2ZVN5bmMKKwkJMDIgIFBhbG0gU3luYworCTAyICA/CisJCTAxICBJbnRlcmZhY2UgQXNzb2NpYXRpb24KKwkJMDIgIFdpcmUgQWRhcHRlciBNdWx0aWZ1bmN0aW9uIFBlcmlwaGVyYWwKKwkwMyAgPworCQkwMSAgQ2FibGUgQmFzZWQgQXNzb2NpYXRpb24KK0MgZmUgIEFwcGxpY2F0aW9uIFNwZWNpZmljIEludGVyZmFjZQorCTAxICBEZXZpY2UgRmlybXdhcmUgVXBkYXRlCisJMDIgIElSREEgQnJpZGdlCisJMDMgIFRlc3QgYW5kIE1lYXN1cmVtZW50CisJCTAxICBUTUMKKwkJMDIgIFVTQjQ4OAorQyBmZiAgVmVuZG9yIFNwZWNpZmljIENsYXNzCisJZmYgIFZlbmRvciBTcGVjaWZpYyBTdWJjbGFzcworCQlmZiAgVmVuZG9yIFNwZWNpZmljIFByb3RvY29sCisKKyMgTGlzdCBvZiBBdWRpbyBDbGFzcyBUZXJtaW5hbCBUeXBlcworCisjIFN5bnRheDoKKyMgQVQgdGVybWluYWxfdHlwZSAgdGVybWluYWxfdHlwZV9uYW1lCisKK0FUIDAxMDAgIFVTQiBVbmRlZmluZWQKK0FUIDAxMDEgIFVTQiBTdHJlYW1pbmcKK0FUIDAxZmYgIFVTQiBWZW5kb3IgU3BlY2lmaWMKK0FUIDAyMDAgIElucHV0IFVuZGVmaW5lZAorQVQgMDIwMSAgTWljcm9waG9uZQorQVQgMDIwMiAgRGVza3RvcCBNaWNyb3Bob25lCitBVCAwMjAzICBQZXJzb25hbCBNaWNyb3Bob25lCitBVCAwMjA0ICBPbW5pLWRpcmVjdGlvbmFsIE1pY3JvcGhvbmUKK0FUIDAyMDUgIE1pY3JvcGhvbmUgQXJyYXkKK0FUIDAyMDYgIFByb2Nlc3NpbmcgTWljcm9waG9uZSBBcnJheQorQVQgMDMwMCAgT3V0cHV0IFVuZGVmaW5lZAorQVQgMDMwMSAgU3BlYWtlcgorQVQgMDMwMiAgSGVhZHBob25lcworQVQgMDMwMyAgSGVhZCBNb3VudGVkIERpc3BsYXkgQXVkaW8KK0FUIDAzMDQgIERlc2t0b3AgU3BlYWtlcgorQVQgMDMwNSAgUm9vbSBTcGVha2VyCitBVCAwMzA2ICBDb21tdW5pY2F0aW9uIFNwZWFrZXIKK0FUIDAzMDcgIExvdyBGcmVxdWVuY3kgRWZmZWN0cyBTcGVha2VyCitBVCAwNDAwICBCaWRpcmVjdGlvbmFsIFVuZGVmaW5lZAorQVQgMDQwMSAgSGFuZHNldAorQVQgMDQwMiAgSGVhZHNldAorQVQgMDQwMyAgU3BlYWtlcnBob25lLCBubyBlY2hvIHJlZHVjdGlvbgorQVQgMDQwNCAgRWNoby1zdXBwcmVzc2luZyBzcGVha2VycGhvbmUKK0FUIDA0MDUgIEVjaG8tY2FuY2VsaW5nIHNwZWFrZXJwaG9uZQorQVQgMDUwMCAgVGVsZXBob255IFVuZGVmaW5lZAorQVQgMDUwMSAgUGhvbmUgbGluZQorQVQgMDUwMiAgVGVsZXBob25lCitBVCAwNTAzICBEb3duIExpbmUgUGhvbmUKK0FUIDA2MDAgIEV4dGVybmFsIFVuZGVmaW5lZAorQVQgMDYwMSAgQW5hbG9nIENvbm5lY3RvcgorQVQgMDYwMiAgRGlnaXRhbCBBdWRpbyBJbnRlcmZhY2UKK0FUIDA2MDMgIExpbmUgQ29ubmVjdG9yCitBVCAwNjA0ICBMZWdhY3kgQXVkaW8gQ29ubmVjdG9yCitBVCAwNjA1ICBTUERJRiBpbnRlcmZhY2UKK0FUIDA2MDYgIDEzOTQgREEgc3RyZWFtCitBVCAwNjA3ICAxMzk0IERWIHN0cmVhbSBzb3VuZHRyYWNrCitBVCAwNzAwICBFbWJlZGRlZCBVbmRlZmluZWQKK0FUIDA3MDEgIExldmVsIENhbGlicmF0aW9uIE5vaXNlIFNvdXJjZQorQVQgMDcwMiAgRXF1YWxpemF0aW9uIE5vaXNlCitBVCAwNzAzICBDRCBQbGF5ZXIKK0FUIDA3MDQgIERBVAorQVQgMDcwNSAgRENDCitBVCAwNzA2ICBNaW5pRGlzYworQVQgMDcwNyAgQW5hbG9nIFRhcGUKK0FUIDA3MDggIFBob25vZ3JhcGgKK0FUIDA3MDkgIFZDUiBBdWRpbworQVQgMDcwYSAgVmlkZW8gRGlzYyBBdWRpbworQVQgMDcwYiAgRFZEIEF1ZGlvCitBVCAwNzBjICBUViBUdW5lciBBdWRpbworQVQgMDcwZCAgU2F0ZWxsaXRlIFJlY2VpdmVyIEF1ZGlvCitBVCAwNzBlICBDYWJsZSBUdW5lciBBdWRpbworQVQgMDcwZiAgRFNTIEF1ZGlvCitBVCAwNzEwICBSYWRpbyBSZWNlaXZlcgorQVQgMDcxMSAgUmFkaW8gVHJhbnNtaXR0ZXIKK0FUIDA3MTIgIE11bHRpdHJhY2sgUmVjb3JkZXIKK0FUIDA3MTMgIFN5bnRoZXNpemVyCisKKyMgTGlzdCBvZiBISUQgRGVzY3JpcHRvciBUeXBlcworCisjIFN5bnRheDoKKyMgSElEIGRlc2NyaXB0b3JfdHlwZSAgZGVzY3JpcHRvcl90eXBlX25hbWUKKworSElEIDIxICBISUQKK0hJRCAyMiAgUmVwb3J0CitISUQgMjMgIFBoeXNpY2FsCisKKyMgTGlzdCBvZiBISUQgRGVzY3JpcHRvciBJdGVtIFR5cGVzCisjIE5vdGU6IDIgYml0cyBMU0IgZW5jb2RlIGRhdGEgbGVuZ3RoIGZvbGxvd2luZworCisjIFN5bnRheDoKKyMgUiBpdGVtX3R5cGUgIGl0ZW1fdHlwZV9uYW1lCisKKyMgTWFpbiBJdGVtcworUiA4MCAgSW5wdXQKK1IgOTAgIE91dHB1dAorUiBiMCAgRmVhdHVyZQorUiBhMCAgQ29sbGVjdGlvbgorUiBjMCAgRW5kIENvbGxlY3Rpb24KKworIyBHbG9iYWwgSXRlbXMKK1IgMDQgIFVzYWdlIFBhZ2UKK1IgMTQgIExvZ2ljYWwgTWluaW11bQorUiAyNCAgTG9naWNhbCBNYXhpbXVtCitSIDM0ICBQaHlzaWNhbCBNaW5pbXVtCitSIDQ0ICBQaHlzaWNhbCBNYXhpbXVtCitSIDU0ICBVbml0IEV4cG9uZW50CitSIDY0ICBVbml0CitSIDc0ICBSZXBvcnQgU2l6ZQorUiA4NCAgUmVwb3J0IElECitSIDk0ICBSZXBvcnQgQ291bnQKK1IgYTQgIFB1c2gKK1IgYjQgIFBvcAorCisjIExvY2FsIEl0ZW1zCitSIDA4ICBVc2FnZQorUiAxOCAgVXNhZ2UgTWluaW11bQorUiAyOCAgVXNhZ2UgTWF4aW11bQorUiAzOCAgRGVzaWduYXRvciBJbmRleAorUiA0OCAgRGVzaWduYXRvciBNaW5pbXVtCitSIDU4ICBEZXNpZ25hdG9yIE1heGltdW0KK1IgNzggIFN0cmluZyBJbmRleAorUiA4OCAgU3RyaW5nIE1pbmltdW0KK1IgOTggIFN0cmluZyBNYXhpbXVtCitSIGE4ICBEZWxpbWl0ZXIKKworIyBMaXN0IG9mIFBoeXNpY2FsIERlc2NyaXB0b3IgQmlhcyBUeXBlcworCisjIFN5bnRheDoKKyMgQklBUyBpdGVtX3R5cGUgIGl0ZW1fdHlwZV9uYW1lCisKK0JJQVMgMCAgTm90IEFwcGxpY2FibGUKK0JJQVMgMSAgUmlnaHQgSGFuZAorQklBUyAyICBMZWZ0IEhhbmQKK0JJQVMgMyAgQm90aCBIYW5kcworQklBUyA0ICBFaXRoZXIgSGFuZAorCisjIExpc3Qgb2YgUGh5c2ljYWwgRGVzY3JpcHRvciBJdGVtIFR5cGVzCisKKyMgU3ludGF4OgorIyBQSFkgaXRlbV90eXBlICBpdGVtX3R5cGVfbmFtZQorCitQSFkgMDAgIE5vbmUKK1BIWSAwMSAgSGFuZAorUEhZIDAyICBFeWViYWxsCitQSFkgMDMgIEV5ZWJyb3cKK1BIWSAwNCAgRXllbGlkCitQSFkgMDUgIEVhcgorUEhZIDA2ICBOb3NlCitQSFkgMDcgIE1vdXRoCitQSFkgMDggIFVwcGVyIExpcAorUEhZIDA5ICBMb3dlciBMaXAKK1BIWSAwYSAgSmF3CitQSFkgMGIgIE5lY2sKK1BIWSAwYyAgVXBwZXIgQXJtCitQSFkgMGQgIEVsYm93CitQSFkgMGUgIEZvcmVhcm0KK1BIWSAwZiAgV3Jpc3QKK1BIWSAxMCAgUGFsbQorUEhZIDExICBUaHVtYgorUEhZIDEyICBJbmRleCBGaW5nZXIKK1BIWSAxMyAgTWlkZGxlIEZpbmdlcgorUEhZIDE0ICBSaW5nIEZpbmdlcgorUEhZIDE1ICBMaXR0bGUgRmluZ2VyCitQSFkgMTYgIEhlYWQKK1BIWSAxNyAgU2hvdWxkZXIKK1BIWSAxOCAgSGlwCitQSFkgMTkgIFdhaXN0CitQSFkgMWEgIFRoaWdoCitQSFkgMWIgIEtuZWUKK1BIWSAxYyAgY2FsZgorUEhZIDFkICBBbmtsZQorUEhZIDFlICBGb290CitQSFkgMWYgIEhlZWwKK1BIWSAyMCAgQmFsbCBvZiBGb290CitQSFkgMjEgIEJpZyBUb2UKK1BIWSAyMiAgU2Vjb25kIFRvZQorUEhZIDIzICBUaGlyZCBUb2UKK1BIWSAyNCAgRm91cnRoIFRvZQorUEhZIDI1ICBGaWZ0aCBUb2UKK1BIWSAyNiAgQnJvdworUEhZIDI3ICBDaGVlaworCisjIExpc3Qgb2YgSElEIFVzYWdlcworCisjIFN5bnRheDoKKyMgSFVUIGhpICBfdXNhZ2VfcGFnZSAgaGlkX3VzYWdlX3BhZ2VfbmFtZQorIwloaWRfdXNhZ2UgIGhpZF91c2FnZV9uYW1lCisKK0hVVCAwMCAgVW5kZWZpbmVkCitIVVQgMDEgIEdlbmVyaWMgRGVza3RvcCBDb250cm9scworCTAwMCAgVW5kZWZpbmVkCisJMDAxICBQb2ludGVyCisJMDAyICBNb3VzZQorCTAwNCAgSm95c3RpY2sKKwkwMDUgIEdhbWVwYWQKKwkwMDYgIEtleWJvYXJkCisJMDA3ICBLZXlwYWQKKwkwMDggIE11bHRpLUF4aXMgQ29udHJvbGxlcgorCTAzMCAgRGlyZWN0aW9uLVgKKwkwMzEgIERpcmVjdGlvbi1ZCisJMDMyICBEaXJlY3Rpb24tWgorCTAzMyAgUm90YXRlLVgKKwkwMzQgIFJvdGF0ZS1ZCisJMDM1ICBSb3RhdGUtWgorCTAzNiAgU2xpZGVyCisJMDM3ICBEaWFsCisJMDM4ICBXaGVlbAorCTAzOSAgSGF0IFN3aXRjaAorCTAzYSAgQ291bnRlZCBCdWZmZXIKKwkwM2IgIEJ5dGUgQ291bnQKKwkwM2MgIE1vdGlvbiBXYWtldXAKKwkwM2QgIFN0YXJ0CisJMDNlICBTZWxlY3QKKwkwNDAgIFZlY3Rvci1YCisJMDQxICBWZWN0b3ItWQorCTA0MiAgVmVjdG9yLVoKKwkwNDMgIFZlY3Rvci1YIHJlbGF0aXZlIEJvZHkKKwkwNDQgIFZlY3Rvci1ZIHJlbGF0aXZlIEJvZHkKKwkwNDUgIFZlY3Rvci1aIHJlbGF0aXZlIEJvZHkKKwkwNDYgIFZlY3RvcgorCTA4MCAgU3lzdGVtIENvbnRyb2wKKwkwODEgIFN5c3RlbSBQb3dlciBEb3duCisJMDgyICBTeXN0ZW0gU2xlZXAKKwkwODMgIFN5c3RlbSBXYWtlIFVwCisJMDg0ICBTeXN0ZW0gQ29udGV4dCBNZW51CisJMDg1ICBTeXN0ZW0gTWFpbiBNZW51CisJMDg2ICBTeXN0ZW0gQXBwIE1lbnUKKwkwODcgIFN5c3RlbSBNZW51IEhlbHAKKwkwODggIFN5c3RlbSBNZW51IEV4aXQKKwkwODkgIFN5c3RlbSBNZW51IFNlbGVjdAorCTA4YSAgU3lzdGVtIE1lbnUgUmlnaHQKKwkwOGIgIFN5c3RlbSBNZW51IExlZnQKKwkwOGMgIFN5c3RlbSBNZW51IFVwCisJMDhkICBTeXN0ZW0gTWVudSBEb3duCisJMDkwICBEaXJlY3Rpb24gUGFkIFVwCisJMDkxICBEaXJlY3Rpb24gUGFkIERvd24KKwkwOTIgIERpcmVjdGlvbiBQYWQgUmlnaHQKKwkwOTMgIERpcmVjdGlvbiBQYWQgTGVmdAorSFVUIDAyICBTaW11bGF0aW9uIENvbnRyb2xzCisJMDAwICBVbmRlZmluZWQKKwkwMDEgIEZsaWdodCBTaW11bGF0aW9uIERldmljZQorCTAwMiAgQXV0b21vYmlsZSBTaW11bGF0aW9uIERldmljZQorCTAwMyAgVGFuayBTaW11bGF0aW9uIERldmljZQorCTAwNCAgU3BhY2VzaGlwIFNpbXVsYXRpb24gRGV2aWNlCisJMDA1ICBTdWJtYXJpbmUgU2ltdWxhdGlvbiBEZXZpY2UKKwkwMDYgIFNhaWxpbmcgU2ltdWxhdGlvbiBEZXZpY2UKKwkwMDcgIE1vdG9yY3ljbGUgU2ltdWxhdGlvbiBEZXZpY2UKKwkwMDggIFNwb3J0cyBTaW11bGF0aW9uIERldmljZQorCTAwOSAgQWlycGxhbmUgU2ltdWFsdGlvbiBEZXZpY2UKKwkwMGEgIEhlbGljb3B0ZXIgU2ltdWxhdGlvbiBEZXZpY2UKKwkwMGIgIE1hZ2ljIENhcnBldCBTaW11bGF0aW9uIERldmljZQorCTAwYyAgQmljeWNsZSBTaW11bGF0aW9uIERldmljZQorCTAyMCAgRmxpZ2h0IENvbnRyb2wgU3RpY2sKKwkwMjEgIEZsaWdodCBTdGljaworCTAyMiAgQ3ljbGljIENvbnRyb2wKKwkwMjMgIEN5Y2xpYyBUcmltCisJMDI0ICBGbGlnaHQgWW9rZQorCTAyNSAgVHJhY2sgQ29udHJvbAorCTBiMCAgQWlsZXJvbgorCTBiMSAgQWlsZXJvbiBUcmltCisJMGIyICBBbnRpLVRvcnF1ZSBDb250cm9sCisJMGIzICBBdXRvcGlsb3QgRW5hYmxlCisJMGI0ICBDaGFmZiBSZWxlYXNlCisJMGI1ICBDb2xsZWN0aXZlIENvbnRyb2wKKwkwYjYgIERpdmUgQnJlYWsKKwkwYjcgIEVsZWN0cm9uaWMgQ291bnRlcm1lYXN1cmVzCisJMGI4ICBFbGV2YXRvcgorCTBiOSAgRWxldmF0b3IgVHJpbQorCTBiYSAgUnVkZGVyCisJMGJiICBUaHJvdHRsZQorCTBiYyAgRmxpZ2h0IENPbW11bmljYXRpb25zCisJMGJkICBGbGFyZSBSZWxlYXNlCisJMGJlICBMYW5kaW5nIEdlYXIKKwkwYmYgIFRvZSBCcmVhaworCTBjMCAgVHJpZ2dlcgorCTBjMSAgV2VhcG9uIEFybQorCTBjMiAgV2VhcG9ucyBTZWxlY3QKKwkwYzMgIFdpbmcgRmxhcHMKKwkwYzQgIEFjY2VsZXJhdG9yCisJMGM1ICBCcmFrZQorCTBjNiAgQ2x1dGNoCisJMGM3ICBTaGlmdGVyCisJMGM4ICBTdGVlcmluZworCTBjOSAgVHVycmV0IERpcmVjdGlvbgorCTBjYSAgQmFycmVsIEVsZXZhdGlvbgorCTBjYiAgRHJpdmUgUGxhbmUKKwkwY2MgIEJhbGxhc3QKKwkwY2QgIEJpY3lsY2UgQ3JhbmsKKwkwY2UgIEhhbmRsZSBCYXJzCisJMGNmICBGcm9udCBCcmFrZQorCTBkMCAgUmVhciBCcmFrZQorSFVUIDAzICBWUiBDb250cm9scworCTAwMCAgVW5pZGVudGlmaWVkCisJMDAxICBCZWx0CisJMDAyICBCb2R5IFN1aXQKKwkwMDMgIEZsZXhvcgorCTAwNCAgR2xvdmUKKwkwMDUgIEhlYWQgVHJhY2tlcgorCTAwNiAgSGVhZCBNb3VudGVkIERpc3BsYXkKKwkwMDcgIEhhbmQgVHJhY2tlcgorCTAwOCAgT2N1bG9tZXRlcgorCTAwOSAgVmVzdAorCTAwYSAgQW5pbWF0cm9uaWMgRGV2aWNlCisJMDIwICBTdGVyZW8gRW5hYmxlCisJMDIxICBEaXNwbGF5IEVuYWJsZQorSFVUIDA0ICBTcG9ydCBDb250cm9scworCTAwMCAgVW5pZGVudGlmaWVkCisJMDAxICBCYXNlYmFsbCBCYXQKKwkwMDIgIEdvbGYgQ2x1YgorCTAwMyAgUm93aW5nIE1hY2hpbmUKKwkwMDQgIFRyZWFkbWlsbAorCTAzMCAgT2FyCisJMDMxICBTbG9wZQorCTAzMiAgUmF0ZQorCTAzMyAgU3RpY2sgU3BlZWQKKwkwMzQgIFN0aWNrIEZhY2UgQW5nbGUKKwkwMzUgIFN0aWNrIEhlZWwvVG9lCisJMDM2ICBTdGljayBGb2xsb3cgVGhyb3VnaAorCTA0NyAgU3RpY2sgVGVtcAorCTAzOCAgU3RpY2sgVHlwZQorCTAzOSAgU3RpY2sgSGVpZ2h0CisJMDUwICBQdXR0ZXIKKwkwNTEgIDEgSXJvbgorCTA1MiAgMiBJcm9uCisJMDUzICAzIElyb24KKwkwNTQgIDQgSXJvbgorCTA1NSAgNSBJcm9uCisJMDU2ICA2IElyb24KKwkwNTcgIDcgSXJvbgorCTA1OCAgOCBJcm9uCisJMDU5ICA5IElyb24KKwkwNWEgIDEwIElyb24KKwkwNWIgIDExIElyb24KKwkwNWMgIFNhbmQgV2VkZ2UKKwkwNWQgIExvZnQgV2VkZ2UKKwkwNWUgIFBvd2VyIFdlZGdlCisJMDVmICAxIFdvb2QKKwkwNjAgIDMgV29vZAorCTA2MSAgNSBXb29kCisJMDYyICA3IFdvb2QKKwkwNjMgIDkgV29vZAorSFVUIDA1ICBHYW1lIENvbnRyb2xzCisJMDAwICBVbmRlZmluZWQKKwkwMDEgIDNEIEdhbWUgQ29udHJvbGxlcgorCTAwMiAgUGluYmFsbCBEZXZpY2UKKwkwMDMgIEd1biBEZXZpY2UKKwkwMjAgIFBvaW50IE9mIFZpZXcKKwkwMjEgIFR1cm4gUmlnaHQvTGVmdAorCTAyMiAgUGl0Y2ggUmlnaHQvTGVmdAorCTAyMyAgUm9sbCBGb3J3YXJkL0JhY2t3YXJkCisJMDI0ICBNb3ZlIFJpZ2h0L0xlZnQKKwkwMjUgIE1vdmUgRm9yd2FyZC9CYWNrd2FyZAorCTAyNiAgTW92ZSBVcC9Eb3duCisJMDI3ICBMZWFuIFJpZ2h0L0xlZnQKKwkwMjggIExlYW4gRm9yd2FyZC9CYWNrd2FyZAorCTAyOSAgSGVpZ2h0IG9mIFBPVgorCTAyYSAgRmxpcHBlcgorCTAyYiAgU2Vjb25kYXJ5IEZsaXBwZXIKKwkwMmMgIEJ1bXAKKwkwMmQgIE5ldyBHYW1lCisJMDJlICBTaG9vdCBCYWxsCisJMDJmICBQbGF5ZXIKKwkwMzAgIEd1biBCb2x0CisJMDMxICBHdW4gQ2xpcAorCTAzMiAgR3VuIFNlbGVjdG9yCisJMDMzICBHdW4gU2luZ2xlIFNob3QKKwkwMzQgIEd1biBCdXJzdAorCTAzNSAgR3VuIEF1dG9tYXRpYworCTAzNiAgR3VuIFNhZmV0eQorCTAzNyAgR2FtZXBhZCBGaXJlL0p1bXAKKwkwMzggIEdhbWVwYWQgRnVuCisJMDM5ICBHYW1lcGFkIFRyaWdnZXIKK0hVVCAwNyAgS2V5Ym9hcmQKKwkwMDAgIE5vIEV2ZW50CisJMDAxICBLZXlib2FyZCBFcnJvclJvbGxPdmVyCisJMDAyICBLZXlib2FyZCBQT1NUZmFpbAorCTAwMyAgS2V5Ym9hcmQgRXJyb3IgVW5kZWZpbmVkCisJMDA0ICBBCisJMDA1ICBCCisJMDA2ICBDCisJMDA3ICBECisJMDA4ICBFCisJMDA5ICBGCisJMDBhICBHCisJMDBiICBICisJMDBjICBJCisJMDBkICBKCisJMDBlICBLCisJMDBmICBMCisJMDEwICBNCisJMDExICBOCisJMDEyICBPCisJMDEzICBQCisJMDE0ICBRCisJMDE1ICBSCisJMDE2ICBTCisJMDE3ICBUCisJMDE4ICBVCisJMDE5ICBWCisJMDFhICBXCisJMDFiICBYCisJMDFjICBZCisJMDFkICBaCisJMDFlICAxIGFuZCAhIChPbmUgYW5kIEV4Y2xhbWF0aW9uKQorCTAxZiAgMiBhbmQgQCAoMiBhbmQgYXQpCisJMDIwICAzIGFuZCAjICgzIGFuZCBIYXNoKQorCTAyMSAgNCBhbmQgJCAoNCBhbmQgRG9sbGFyIFNpZ24pCisJMDIyICA1IGFuZCAlICg1IGFuZCBQZXJjZW50IFNpZ24pCisJMDIzICA2IGFuZCBeICg2IGFuZCBjaXJjdW1mbGV4KQorCTAyNCAgNyBhbmQgJiAoU2V2ZW4gYW5kIEFtcGVyc2FuZCkKKwkwMjUgIDggYW5kICogKEVpZ2h0IGFuZCBhc3RlcmlzaykKKwkwMjYgIDkgYW5kICggKE5pbmUgYW5kIFBhcmVudGhlc2lzIExlZnQpCisJMDI3ICAwIGFuZCApIChaZXJvIGFuZCBQYXJlbnRoZXNpcyBSaWdodCkKKwkwMjggIFJldHVybiAoRW50ZXIpCisJMDI5ICBFc2NhcGUKKwkwMmEgIERlbGV0ZSAoQmFja3NwYWNlKQorCTAyYiAgVGFiCisJMDJjICBTcGFjZSBCYXIKKwkwMmQgIC0gYW5kIF8gKE1pbnVzIGFuZCB1bmRlcnNjb3JlKQorCTAyZSAgPSBhbmQgKyAoRXF1YWwgYW5kIFBsdXMpCisJMDJmICBbIGFuZCB7IChCcmFja2V0IGFuZCBCcmFjZXMgTGVmdCkKKwkwMzAgIF0gYW5kIH0gKEJyYWNrZXQgYW5kIEJyYWNlcyBSaWdodCkKKwkwMzEgIFwgYW5kIHwgKEJhY2tzbGFzaCBhbmQgQmFyKQorCTAzMiAgIyBhbmQgfiAoSGFzaCBhbmQgVGlsZGUsIE5vbi1VUyBLZXlib2FyZCBuZWFyIHJpZ2h0IHNoaWZ0KQorCTAzMyAgOyBhbmQgOiAoU2VtaWNvbG9uIGFuZCBDb2xvbikKKwkwMzQgILQgYW5kICIgKEFjY2VudCBBY3V0ZSBhbmQgRG91YmxlIFF1b3RlcykKKwkwMzUgIGAgYW5kIH4gKEFjY2VudCBHcmFjZSBhbmQgVGlsZGUpCisJMDM2ICAsIGFuZCA8IChDb21tYSBhbmQgTGVzcykKKwkwMzcgIC4gYW5kID4gKFBlcmlvZCBhbmQgR3JlYXRlcikKKwkwMzggIC8gYW5kID8gKFNsYXNoIGFuZCBRdWVzdGlvbiBNYXJrKQorCTAzOSAgQ2FwcyBMb2NrCisJMDNhICBGMQorCTAzYiAgRjIKKwkwM2MgIEYzCisJMDNkICBGNAorCTAzZSAgRjUKKwkwM2YgIEY2CisJMDQwICBGNworCTA0MSAgRjgKKwkwNDIgIEY5CisJMDQzICBGMTAKKwkwNDQgIEYxMQorCTA0NSAgRjEyCisJMDQ2ICBQcmludCBTY3JlZW4KKwkwNDcgIFNjcm9sbCBMb2NrCisJMDQ4ICBQYXVzZQorCTA0OSAgSW5zZXJ0CisJMDRhICBIb21lCisJMDRiICBQYWdlIFVwCisJMDRjICBEZWxldGUgRm9yd2FyZCAod2l0aG91dCBDaGFuZ2luZyBQb3NpdGlvbikKKwkwNGQgIEVuZAorCTA0ZSAgUGFnZSBEb3duCisJMDRmICBSaWdodCBBcnJvdworCTA1MCAgTGVmdCBBcnJvdworCTA1MSAgRG93biBBcnJvdworCTA1MiAgVXAgQXJyb3cKKwkwNTMgIE51bSBMb2NrIGFuZCBDbGVhcgorCTA1NCAgS2V5cGFkIC8gKERpdmlzaW9uIFNpZ24pCisJMDU1ICBLZXlwYWQgKiAoTXVsdGlwbGljYXRpb24gU2lnbikKKwkwNTYgIEtleXBhZCAtIChTdWJ0cmFjdGlvbiBTaWduKQorCTA1NyAgS2V5cGFkICsgKEFkZGl0aW9uIFNpZ24pCisJMDU4ICBLZXlwYWQgRW50ZXIKKwkwNTkgIEtleXBhZCAxIGFuZCBFTkQKKwkwNWEgIEtleXBhZCAyIGFuZCBEb3duIEFycm93CisJMDViICBLZXlwYWQgMyBhbmQgUGFnZSBEb3duCisJMDVjICBLZXlwYWQgNCBhbmQgTGVmdCBBcnJvdworCTA1ZCAgS2V5cGFkIDUgKFRhY3RpbGVpIFJhaXNlZCkKKwkwNWYgIEtleXBhZCA2IGFuZCBSaWdodCBBcnJvdworCTA2MCAgS2V5cGFkIDcgYW5kIEhvbWUKKwkwNjEgIEtleXBhZCA4IGFuZCBVcCBBcnJvdworCTA2MiAgS2V5cGFkIDggYW5kIFBhZ2UgVXAKKwkwNjMgIEtleXBhZCAuIChkZWNpbWFsIGRlbGltaXRlcikgYW5kIERlbGV0ZQorCTA2NCAgXCBhbmQgfCAoQmFja3NsYXNoIGFuZCBCYXIsIFVLIGFuZCBOb24tVVMgS2V5Ym9hcmQgbmVhciBsZWZ0IHNoaWZ0KQorCTA2NSAgS2V5Ym9hcmQgQXBwbGljYXRpb24gKFdpbmRvd3MgS2V5IGZvciBXaW45NSBvciBDb21wb3NlKQorCTA2NiAgUG93ZXIgKG5vdCBhIGtleSkKKwkwNjcgIEtleXBhZCA9IChFcXVhbCBTaWduKQorCTA2OCAgRjEzCisJMDY5ICBGMTQKKwkwNmEgIEYxNQorCTA2YiAgRjE2CisJMDZjICBGMTcKKwkwNmQgIEYxOAorCTA2ZSAgRjE5CisJMDZmICBGMjAKKwkwNzAgIEYyMQorCTA3MSAgRjIyCisJMDcyICBGMjMKKwkwNzMgIEYyNAorCTA3NCAgRXhlY3V0ZQorCTA3NSAgSGVscAorCTA3NiAgTWVudQorCTA3NyAgU2VsZWN0CisJMDc4ICBTdG9wCisJMDc5ICBBZ2FpbgorCTA3YSAgVW5kbworCTA3YiAgQ3V0CisJMDdjICBDb3B5CisJMDdkICBQYXN0ZQorCTA3ZSAgRmluZAorCTA3ZiAgTXV0ZQorCTA4MCAgVm9sdW1lIFVwCisJMDgxICBWb2x1bWUgRG93bgorCTA4MiAgTG9ja2luZyBDYXBzIExvY2sKKwkwODMgIExvY2tpbmcgTnVtIExvY2sKKwkwODQgIExvY2tpbmcgU2Nyb2xsIExvY2sKKwkwODUgIEtleXBhZCBDb21tYQorCTA4NiAgS2V5cGFkIEVxdWFsIFNpZ24gKEFTLzQwMCkKKwkwODcgIEludGVybmF0aW9uYWwgMSAoUEM5OCkKKwkwODggIEludGVybmF0aW9uYWwgMiAoUEM5OCkKKwkwODkgIEludGVybmF0aW9uYWwgMyAoUEM5OCkKKwkwOGEgIEludGVybmF0aW9uYWwgNCAoUEM5OCkKKwkwOGIgIEludGVybmF0aW9uYWwgNSAoUEM5OCkKKwkwOGMgIEludGVybmF0aW9uYWwgNiAoUEM5OCkKKwkwOGQgIEludGVybmF0aW9uYWwgNyAoVG9nZ2xlIFNpbmdsZS9Eb3VibGUgQnl0ZSBNb2RlKQorCTA4ZSAgSW50ZXJuYXRpb25hbCA4CisJMDhmICBJbnRlcm5hdGlvbmFsIDkKKwkwOTAgIExBTkcgMSAoSGFuZ3VsL0VuZ2xpc2ggVG9nZ2xlLCBLb3JlYSkKKwkwOTEgIExBTkcgMiAoSGFuamEgQ29udmVyc2lvbiwgS29yZWEpCisJMDkyICBMQU5HIDMgKEthdGFrYW5hLCBKYXBhbikKKwkwOTMgIExBTkcgNCAoSGlyYWdhbmEsIEphcGFuKQorCTA5NCAgTEFORyA1IChaZW5rYWt1L0hhbmtha3UsIEphcGFuKQorCTA5NSAgTEFORyA2CisJMDk2ICBMQU5HIDcKKwkwOTcgIExBTkcgOAorCTA5OCAgTEFORyA5CisJMDk5ICBBbHRlcm5hdGUgRXJhc2UKKwkwOWEgIFN5c1JlcS9BdHRlbnRpb24KKwkwOWIgIENhbmNlbAorCTA5YyAgQ2xlYXIKKwkwOWQgIFByaW9yCisJMDllICBSZXR1cm4KKwkwOWYgIFNlcGFyYXRvcgorCTBhMCAgT3V0CisJMGExICBPcGVuCisJMGEyICBDbGVhci9BZ2FpbgorCTBhMyAgQ3JTZWwvUHJvcHMKKwkwYTQgIEV4U2VsCisJMGUwICBDb250cm9sIExlZnQKKwkwZTEgIFNoaWZ0IExlZnQKKwkwZTIgIEFsdCBMZWZ0CisJMGUzICBHVUkgTGVmdAorCTBlNCAgQ29udHJvbCBSaWdodAorCTBlNSAgU2hpZnQgUmlnaHQKKwkwZTYgIEFsdCBSaWd0aAorCTBlNyAgR1VJIFJpZ2h0CitIVVQgMDggIExFRHMKKwkwMDAgIFVuZGVmaW5lZAorCTAwMSAgTnVtTG9jaworCTAwMiAgQ2Fwc0xvY2sKKwkwMDMgIFNjcm9sbCBMb2NrCisJMDA0ICBDb21wb3NlCisJMDA1ICBLYW5hCisJMDA2ICBQb3dlcgorCTAwNyAgU2hpZnQKKwkwMDggIERvIG5vdCBkaXN0dXJiCisJMDA5ICBNdXRlCisJMDBhICBUb25lIEVuYWJrZQorCTAwYiAgSGlnaCBDdXQgRmlsdGVyCisJMDBjICBMb3cgQ3V0IEZpbHRlcgorCTAwZCAgRXF1YWxpemVyIEVuYWJsZQorCTAwZSAgU291bmQgRmllbGQgT04KKwkwMGYgIFN1cnJvdW5kIE9uCisJMDEwICBSZXBlYXQKKwkwMTEgIFN0ZXJlbworCTAxMiAgU2FtcGxpbmcgUmF0ZSBEZXRlY3QKKwkwMTMgIFNwaW5uaW5nCisJMDE0ICBDQVYKKwkwMTUgIENMVgorCTAxNiAgUmVjb3JkaW5nIEZvcm1hdCBEZXRlY3QKKwkwMTcgIE9mZi1Ib29rCisJMDE4ICBSaW5nCisJMDE5ICBNZXNzYWdlIFdhaXRpbmcKKwkwMWEgIERhdGEgTW9kZQorCTAxYiAgQmF0dGVyeSBPcGVyYXRpb24KKwkwMWMgIEJhdHRlcnkgT0sKKwkwMWQgIEJhdHRlcnkgTG93CisJMDFlICBTcGVha2VyCisJMDFmICBIZWFkIFNldAorCTAyMCAgSG9sZAorCTAyMSAgTWljcm9waG9uZQorCTAyMiAgQ292ZXJhZ2UKKwkwMjMgIE5pZ2h0IE1vZGUKKwkwMjQgIFNlbmQgQ2FsbHMKKwkwMjUgIENhbGwgUGlja3VwCisJMDI2ICBDb25mZXJlbmNlCisJMDI3ICBTdGFuZC1ieQorCTAyOCAgQ2FtZXJhIE9uCisJMDI5ICBDYW1lcmEgT2ZmCisJMDJhICBPbi1MaW5lCisJMDJiICBPZmYtTGluZQorCTAyYyAgQnVzeQorCTAyZCAgUmVhZHkKKwkwMmUgIFBhcGVyLU91dAorCTAyZiAgUGFwZXItSmFtCisJMDMwICBSZW1vdGUKKwkwMzEgIEZvcndhcmQKKwkwMzIgIFJldmVyc2UKKwkwMzMgIFN0b3AKKwkwMzQgIFJld2luZAorCTAzNSAgRmFzdCBGb3J3YXJkCisJMDM2ICBQbGF5CisJMDM3ICBQYXVzZQorCTAzOCAgUmVjb3JkCisJMDM5ICBFcnJvcgorCTAzYSAgVXNhZ2UgU2VsZWN0ZWQgSW5kaWNhdG9yCisJMDNiICBVc2FnZSBJbiBVc2UgSW5kaWNhdG9yCisJMDNjICBVc2FnZSBNdWx0aSBJbmRpY2F0b3IKKwkwM2QgIEluZGljYXRvciBPbgorCTAzZSAgSW5kaWNhdG9yIEZsYXNoCisJMDNmICBJbmRpY2F0b3IgU2xvdyBCbGluaworCTA0MCAgSW5kaWNhdG9yIEZhc3QgQmxpbmsKKwkwNDEgIEluZGljYXRvciBPZmYKKwkwNDIgIEZsYXNoIE9uIFRpbWUKKwkwNDMgIFNsb3cgQmxpbmsgT24gVGltZQorCTA0NCAgU2xvdyBCbGluayBPZmYgVGltZQorCTA0NSAgRmFzdCBCbGluayBPbiBUaW1lCisJMDQ2ICBGYXN0IEJsaW5rIE9mZiBUaW1lCisJMDQ3ICBVc2FnZSBDb2xvciBJbmRpY2F0b3IKKwkwNDggIEluZGljYXRvciBSZWQKKwkwNDkgIEluZGljYXRvciBHcmVlbgorCTA0YSAgSW5kaWNhdG9yIEFtYmVyCisJMDRiICBHZW5lcmljIEluZGljYXRvcgorCTA0YyAgU3lzdGVtIFN1c3BlbmQKKwkwNGQgIEV4dGVybmFsIFBvd2VyIENvbm5lY3RlZAorSFVUIDA5ICBCdXR0b25zCisJMDAwICBObyBCdXR0b24gUHJlc3NlZAorCTAwMSAgQnV0dG9uIDEgKFByaW1hcnkpCisJMDAyICBCdXR0b24gMiAoU2Vjb25kYXJ5KQorCTAwMyAgQnV0dG9uIDMgKFRlcnRpYXJ5KQorCTAwNCAgQnV0dG9uIDQKKwkwMDUgIEJ1dHRvbiA1CitIVVQgMGEgIE9yZGluYWwKKwkwMDEgIEluc3RhbmNlIDEKKwkwMDIgIEluc3RhbmNlIDIKKwkwMDMgIEluc3RhbmNlIDMKK0hVVCAwYiAgVGVsZXBob255CisJMDAwICBVbmFzc2lnbmVkCisJMDAxICBQaG9uZQorCTAwMiAgQW5zd2VyaW5nIE1hY2hpbmUKKwkwMDMgIE1lc3NhZ2UgQ29udHJvbHMKKwkwMDQgIEhhbmRzZXQKKwkwMDUgIEhlYWRzZXQKKwkwMDYgIFRlbGVwaG9ueSBLZXkgUGFkCisJMDA3ICBQcm9ncmFtbWFibGUgQnV0dG9uCisJMDIwICBIb29rIFN3aXRjaAorCTAyMSAgRmxhc2gKKwkwMjIgIEZlYXR1cmUKKwkwMjMgIEhvbGQKKwkwMjQgIFJlZGlhbAorCTAyNSAgVHJhbnNmZXIKKwkwMjYgIERyb3AKKwkwMjcgIFBhcmsKKwkwMjggIEZvcndhcmQgQ2FsbHMKKwkwMjkgIEFsdGVybmF0ZSBGdW5jdGlvbgorCTAyYSAgTGluZQorCTAyYiAgU3BlYWtlciBQaG9uZQorCTAyYyAgQ29uZmVyZW5jZQorCTAyZCAgUmluZyBFbmFibGUKKwkwMmUgIFJpbmcgU2VsZWN0CisJMDJmICBQaG9uZSBNdXRlCisJMDMwICBDYWxsZXIgSUQKKwkwNTAgIFNwZWVkIERpYWwKKwkwNTEgIFN0b3JlIE51bWJlcgorCTA1MiAgUmVjYWxsIE51bWJlcgorCTA1MyAgUGhvbmUgRGlyZWN0b3J5CisJMDcwICBWb2ljZSBNYWlsCisJMDcxICBTY3JlZW4gQ2FsbHMKKwkwNzIgIERvIE5vdCBEaXN0dXJiCisJMDczICBNZXNzYWdlCisJMDc0ICBBbnN3ZXIgT24vT2ZmZgorCTA5MCAgSW5zaWRlIERpYWwgVG9uZQorCTA5MSAgT3V0c2lkZSBEaWFsIFRvbmUKKwkwOTIgIEluc2lkZSBSaW5nIFRvbmUKKwkwOTMgIE91dHNpZGUgUmluZyBUb25lCisJMDk0ICBQcmlvcml0eSBSaW5nIFRvbmUKKwkwOTUgIEluc2lkZSBSaW5nYmFjaworCTA5NiAgUHJpb3JpdHkgUmluZ2JhY2sKKwkwOTcgIExpbmUgQnVzeSBUb25lCisJMDk4ICBSZWNvcmRlciBUb25lCisJMDk5ICBDYWxsIFdhaXRpbmcgVG9uZQorCTA5YSAgQ29uZmlybWF0aW9uIFRvbmUgMQorCTA5YiAgQ29uZmlybWF0aW9uIFRvbmUgMgorCTA5YyAgVG9uZXMgT2ZmCisJMDlkICBPdXRzaWRlIFJpbmdiYWNrCisJMGIwICBLZXkgMQorCTBiMSAgS2V5IDIKKwkwYjMgIEtleSAzCisJMGI0ICBLZXkgNAorCTBiNSAgS2V5IDUKKwkwYjYgIEtleSA2CisJMGI3ICBLZXkgNworCTBiOCAgS2V5IDgKKwkwYjkgIEtleSA5CisJMGJhICBLZXkgU3RhcgorCTBiYiAgS2V5IFBvdW5kCisJMGJjICBLZXkgQQorCTBiZCAgS2V5IEIKKwkwYmUgIEtleSBDCisJMGJmICBLZXkgRAorSFVUIDBjICBDb25zdW1lcgorCTAwMCAgVW5hc3NpZ25lZAorCTAwMSAgQ29uc3VtZXIgQ29udHJvbAorCTAwMiAgTnVtZXJpYyBLZXkgUGFkCisJMDAzICBQcm9ncmFtbWFibGUgQnV0dG9ucworCTAyMCAgKzEwCisJMDIxICArMTAwCisJMDIyICBBTS9QTQorCTAzMCAgUG93ZXIKKwkwMzEgIFJlc2V0CisJMDMyICBTbGVlcAorCTAzMyAgU2xlZXAgQWZ0ZXIKKwkwMzQgIFNsZWVwIE1vZGUKKwkwMzUgIElsbHVtaW5hdGlvbgorCTAzNiAgRnVuY3Rpb24gQnV0dG9ucworCTA0MCAgTWVudQorCTA0MSAgTWVudSBQaWNrCisJMDQyICBNZW51IFVwCisJMDQzICBNZW51IERvd24KKwkwNDQgIE1lbnUgTGVmdAorCTA0NSAgTWVudSBSaWdodAorCTA0NiAgTWVudSBFc2NhcGUKKwkwNDcgIE1lbnUgVmFsdWUgSW5jcmVhc2UKKwkwNDggIE1lbnUgVmFsdWUgRGVjcmVhc2UKKwkwNjAgIERhdGEgb24gU2NyZWVuCisJMDYxICBDbG9zZWQgQ2FwdGlvbgorCTA2MiAgQ2xvc2VkIENhcHRpb24gU2VsZWN0CisJMDYzICBWQ1IvVFYKKwkwNjQgIEJyb2FkY2FzdCBNb2RlCisJMDY1ICBTbmFwc2hvdAorCTA2NiAgU3RpbGwKKwkwODAgIFNlbGVjdGlvbgorCTA4MSAgQXNzaWduIFNlbGVjdGlvbgorCTA4MiAgTW9kZSBTdGVwCisJMDgzICBSZWNhbGwgTGFzdAorCTA4NCAgRW50ZXIgQ2hhbm5lbAorCTA4NSAgT3JkZXIgTW92aWUKKwkwODYgIENoYW5uZWwKKwkwODcgIE1lZGlhIFNlbGVjdGlvbgorCTA4OCAgTWVkaWEgU2VsZWN0IENvbXB1dGVyCisJMDg5ICBNZWRpYSBTZWxlY3QgVFYKKwkwOGEgIE1lZGlhIFNlbGVjdCBXV1cKKwkwOGIgIE1lZGlhIFNlbGVjdCBEVkQKKwkwOGMgIE1lZGlhIFNlbGVjdCBUZWxlcGhvbmUKKwkwOGQgIE1lZGlhIFNlbGVjdCBQcm9ncmFtIEd1aWRlCisJMDhlICBNZWRpYSBTZWxlY3QgVmlkZW8gUGhvbmUKKwkwOGYgIE1lZGlhIFNlbGVjdCBHYW1lcworCTA5MCAgTWVkaWEgU2VsZWN0IE1lc3NhZ2VzCisJMDkxICBNZWRpYSBTZWxlY3QgQ0QKKwkwOTIgIE1lZGlhIFNlbGVjdCBWQ1IKKwkwOTMgIE1lZGlhIFNlbGVjdCBUdW5lcgorCTA5NCAgUXVpdAorCTA5NSAgSGVscAorCTA5NiAgTWVkaWEgU2VsZWN0IFRhcGUKKwkwOTcgIE1lZGlhIFNlbGVjdCBDYWJsZQorCTA5OCAgTWVkaWEgU2VsZWN0IFNhdGVsbGl0ZQorCTA5OSAgTWVkaWEgU2VsZWN0IFNlY3VyaXR5CisJMDlhICBNZWRpYSBTZWxlY3QgSG9tZQorCTA5YiAgTWVkaWEgU2VsZWN0IENhbGwKKwkwOWMgIENoYW5uZWwgSW5jcmVtZW50CisJMDlkICBDaGFubmVsIERlY3JlbWVudAorCTA5ZSAgTWVkaWEgU2VsZWN0IFNBUAorCTBhMCAgVkNSIFBsdXMKKwkwYTEgIE9uY2UKKwkwYTIgIERhaWx5CisJMGEzICBXZWVrbHkKKwkwYTQgIE1vbnRobHkKKwkwYjAgIFBsYXkKKwkwYjEgIFBhdXNlCisJMGIyICBSZWNvcmQKKwkwYjMgIEZhc3QgRm9yd2FyZAorCTBiNCAgUmV3aW5kCisJMGI1ICBTY2FuIE5leHQgVHJhY2sKKwkwYjYgIFNjYW4gUHJldmlvdXMgVHJhY2sKKwkwYjcgIFN0b3AKKwkwYjggIEVqZWN0CisJMGI5ICBSYW5kb20gUGxheQorCTBiYSAgU2VsZWN0IERpc2MKKwkwYmIgIEVudGVyIERpc2MKKwkwYmMgIFJlcGVhdAorCTBiZCAgVHJhY2tpbmcKKwkwYmUgIFRyYWNrIE5vcm1hbAorCTBiZiAgU2xvdyBUcmFja2luZworCTBjMCAgRnJhbWUgRm9yd2FyZAorCTBjMSAgRnJhbWUgQmFjaworCTBjMiAgTWFyaworCTBjMyAgQ2xlYXIgTWFyaworCTBjNCAgUmVwZWF0IGZyb20gTWFyaworCTBjNSAgUmV0dXJuIHRvIE1hcmsKKwkwYzYgIFNlYXJjaCBNYXJrIEZvcndhcmQKKwkwYzcgIFNlYXJjaCBNYXJrIEJhY2t3YXJkCisJMGM4ICBDb3VudGVyIFJlc2V0CisJMGM5ICBTaG93IENvdW50ZXIKKwkwY2EgIFRyYWNraW5nIEluY3JlbWVudAorCTBjYiAgVHJhY2tpbmcgRGVjcmVtZW50CisJMGNjICBTdG9wL0VqZWN0CisJMGNkICBQbGF5L1BhdXNlCisJMGNlICBQbGF5L1NraXAKKwkwZTAgIFZvbHVtZQorCTBlMSAgQmFsYW5jZQorCTBlMiAgTXV0ZQorCTBlMyAgQmFzcworCTBlNCAgVHJlYmxlCisJMGU1ICBCYXNzIEJvb3N0CisJMGU2ICBTdXJyb3VuZCBNb2RlCisJMGU3ICBMb3VkbmVzcworCTBlOCAgTVBYCisJMGU5ICBWb2x1bWUgSW5jcmVtZW50CisJMGVhICBWb2x1bWUgRGVjcmVtZW50CisJMGYwICBTcGVlZCBTZWxlY3QKKwkwZjEgIFBsYXliYWNrIFNwZWVkCisJMGYyICBTdGFuZGFyZCBQbGF5CisJMGYzICBMb25nIFBsYXkKKwkwZjQgIEV4dGVuZGVkIFBsYXkKKwkwZjUgIFNsb3cKKwkxMDAgIEZhbiBFbmFibGUKKwkxMDEgIEZhbiBTcGVlZAorCTEwMiAgTGlnaHQgRW5hYmxlCisJMTAzICBMaWdodCBJbGx1bWluYXRpb24gTGV2ZWwKKwkxMDQgIENsaW1hdGUgQ29udHJvbCBFbmFibGUKKwkxMDUgIFJvb20gVGVtcGVyYXR1cmUKKwkxMDYgIFNlY3VyaXR5IEVuYWJsZQorCTEwNyAgRmlyZSBBbGFybQorCTEwOCAgUG9saWNlIEFsYXJtCisJMTUwICBCYWxhbmNlIFJpZ2h0CisJMTUxICBCYWxhbmNlIExlZnQKKwkxNTIgIEJhc3MgSW5jcmVtZW50CisJMTUzICBCYXNzIERlY3JlbWVudAorCTE1NCAgVHJlYmxlIEluY3JlbWVudAorCTE1NSAgVHJlYmxlIERlY3JlbWVudAorCTE2MCAgU3BlYWtlciBTeXN0ZW0KKwkxNjEgIENoYW5uZWwgTGVmdAorCTE2MiAgQ2hhbm5lbCBSaWdodAorCTE2MyAgQ2hhbm5lbCBDZW50ZXIKKwkxNjQgIENoYW5uZWwgRnJvbnQKKwkxNjUgIENoYW5uZWwgQ2VudGVyIEZyb250CisJMTY2ICBDaGFubmVsIFNpZGUKKwkxNjcgIENoYW5uZWwgU3Vycm91bmQKKwkxNjggIENoYW5uZWwgTG93IEZyZXF1ZW5jeSBFbmhhbmNlbWVudAorCTE2OSAgQ2hhbm5lbCBUb3AKKwkxNmEgIENoYW5uZWwgVW5rbm93bgorCTE3MCAgU3ViLUNoYW5uZWwKKwkxNzEgIFN1Yi1DaGFubmVsIEluY3JlbWVudAorCTE3MiAgU3ViLUNoYW5uZWwgRGVjcmVtZW50CisJMTczICBBbHRlcm5hdGl2ZSBBdWRpbyBJbmNyZW1lbnQKKwkxNzQgIEFsdGVybmF0aXZlIEF1ZGlvIERlY3JlbWVudAorCTE4MCAgQXBwbGljYXRpb24gTGF1bmNoIEJ1dHRvbnMKKwkxODEgIEFMIExhdW5jaCBCdXR0b24gQ29uZmlndXJhdGlvbiBUb29sCisJMTgyICBBTCBMYXVuY2ggQnV0dG9uIENvbmZpZ3VyYXRpb24KKwkxODMgIEFMIENvbnN1bWVyIENvbnRyb2wgQ29uZmlndXJhdGlvbgorCTE4NCAgQUwgV29yZCBQcm9jZXNzb3IKKwkxODUgIEFMIFRleHQgRWRpdG9yCisJMTg2ICBBTCBTcHJlYWRzaGVldAorCTE4NyAgQUwgR3JhcGhpY3MgRWRpdG9yCisJMTg4ICBBTCBQcmVzZW50YXRpb24gQXBwCisJMTg5ICBBTCBEYXRhYmFzZSBBcHAKKwkxOGEgIEFMIEVtYWlsIFJlYWRlcgorCTE4YiAgQUwgTmV3c3JlYWRlcgorCTE4YyAgQUwgVm9pY2VtYWlsCisJMThkICBBTCBDb250YWN0cy9BZGRyZXNzIEJvb2sKKwkxOGUgIEFMIENhbGVuZGFyL1NjaGVkdWxlCisJMThmICBBTCBUYXNrL1Byb2plY3QgTWFuYWdlcgorCTE5MCAgQUwgTG9nL0pvdW5hbC9UaW1lY2FyZAorCTE5MSAgQUwgQ2hlY2tib29rL0ZpbmFuY2UKKwkxOTIgIEFMIENhbGN1bGF0b3IKKwkxOTMgIEFMIEEvViBDYXB0dXJlL1BsYXliYWNrCisJMTk0ICBBTCBMb2NhbCBNYWNoaW5lIEJyb3dzZXIKKwkxOTUgIEFMIExBTi9XYW4gQnJvd3NlcgorCTE5NiAgQUwgSW50ZXJuZXQgQnJvd3NlcgorCTE5NyAgQUwgUmVtb3RlIE5ldHdvcmtpbmcvSVNQIENvbm5lY3QKKwkxOTggIEFMIE5ldHdvcmsgQ29uZmVyZW5jZQorCTE5OSAgQUwgTmV0d29yayBDaGF0CisJMTlhICBBTCBUZWxlcGhvbnkvRGlhbGVyCisJMTliICBBTCBMb2dvbgorCTE5YyAgQUwgTG9nb2ZmCisJMTlkICBBTCBMb2dvbi9Mb2dvZmYKKwkxOWUgIEFMIFRlcm1pbmFsIExvY2FsL1NjcmVlbnNhdmVyCisJMTlmICBBTCBDb250cm9sIFBhbmVsCisJMWEwICBBTCBDb21tYW5kIExpbmUgUHJvY2Vzc29yL1J1bgorCTFhMSAgQUwgUHJvY2Vzcy9UYXNrIE1hbmFnZXIKKwkxYTIgIEFMIFNlbGVjdCBUYXNrL0FwcGxpY2F0aW9uCisJMWEzICBBTCBOZXh0IFRhc2svQXBwbGljYXRpb24KKwkxYTQgIEFMIFByZXZpb3VzIFRhc2svQXBwbGljYXRpb24KKwkxYTUgIEFMIFByZWVtcHRpdmUgSGFsdCBUYXNrL0FwcGxpY2F0aW9uCisJMjAwICBHZW5lcmljIEdVSSBBcHBsaWNhdGlvbiBDb250cm9scworCTIwMSAgQUMgTmV3CisJMjAyICBBQyBPcGVuCisJMjAzICBBQyBDTG9zZQorCTIwNCAgQUMgRXhpdAorCTIwNSAgQUMgTWF4aW1pemUKKwkyMDYgIEFDIE1pbmltaXplCisJMjA3ICBBQyBTYXZlCisJMjA4ICBBQyBQcmludAorCTIwOSAgQUMgUHJvcGVydGllcworCTIxYSAgQUMgVW5kbworCTIxYiAgQUMgQ29weQorCTIxYyAgQUMgQ3V0CisJMjFkICBBQyBQYXN0ZQorCTIxZSAgQUMgU2VsZWN0IEFsbAorCTIxZiAgQUMgRmluZAorCTIyMCAgQUMgRmluZCBhbmQgUmVwbGFjZQorCTIyMSAgQUMgU2VhcmNoCisJMjIyICBBQyBHbyBUbworCTIyMyAgQUMgSG9tZQorCTIyNCAgQUMgQmFjaworCTIyNSAgQUMgRm9yd2FyZAorCTIyNiAgQUMgU3RvcAorCTIyNyAgQUMgUmVmcmVzaAorCTIyOCAgQUMgUHJldmlvdXMgTGluaworCTIyOSAgQUMgTmV4dCBMaW5rCisJMjJiICBBQyBIaXN0b3J5CisJMjJjICBBQyBTdWJzY3JpcHRpb25zCisJMjJkICBBQyBab29tIEluCisJMjJlICBBQyBab29tIE91dAorCTIyZiAgQUMgWm9vbQorCTIzMCAgQUMgRnVsbCBTY3JlZW4gVmlldworCTIzMSAgQUMgTm9ybWFsIFZpZXcKKwkyMzIgIEFDIFZpZXcgVG9nZ2xlCisJMjMzICBBQyBTY3JvbGwgVXAKKwkyMzQgIEFDIFNjcm9sbCBEb3duCisJMjM1ICBBQyBTY3JvbGwKKwkyMzYgIEFDIFBhbiBMZWZ0CisJMjM3ICBBQyBQYW4gUmlnaHQKKwkyMzggIEFDIFBhbgorCTIzOSAgQUMgTmV3IFdpbmRvdworCTIzYSAgQUMgVGlsZSBIb3Jpem9udGFsbHkKKwkyM2IgIEFDIFRpbGUgVmVydGljYWxseQorCTIzYyAgQUMgRm9ybWF0CitIVVQgMGQgIERpZ2l0aXplcgorCTAwMCAgVW5kZWZpbmVkCisJMDAxICBEaWdpdGl6ZXIKKwkwMDIgIFBlbgorCTAwMyAgTGlnaHQgUGVuCisJMDA0ICBUb3VjaCBTY3JlZW4KKwkwMDUgIFRvdWNoIFBhZAorCTAwNiAgV2hpdGUgQm9hcmQKKwkwMDcgIENvb3JkaW5hdGUgTWVhc3VyaW5nIE1hY2hpbmUKKwkwMDggIDNEIERpZ2l0aXplcgorCTAwOSAgU3RlcmVvIFBsb3R0ZXIKKwkwMGEgIEFydGljdWxhdGVkIEFybQorCTAwYiAgQXJtYXR1cmUKKwkwMGMgIE11bHRpcGxlIFBvaW50IERpZ2l0aXplcgorCTAwZCAgRnJlZSBTcGFjZSBXYW5kCisJMDIwICBTdHlsdXMKKwkwMjEgIFB1Y2sKKwkwMjIgIEZpbmdlcgorCTAzMCAgVGlwIFByZXNzdXJlCisJMDMxICBCYXJyZWwgUHJlc3N1cmUKKwkwMzIgIEluIFJhbmdlCisJMDMzICBUb3VjaAorCTAzNCAgVW50b3VjaAorCTAzNSAgVGFwCisJMDM2ICBRdWFsaXR5CisJMDM3ICBEYXRhIFZhbGlkCisJMDM4ICBUcmFuc2R1Y2VyIEluZGV4CisJMDM5ICBUYWJsZXQgRnVuY3Rpb24gS2V5cworCTAzYSAgUHJvZ3JhbSBDaGFuZ2UgS2V5cworCTAzYiAgQmF0dGVyeSBTdHJlbmd0aAorCTAzYyAgSW52ZXJ0CisJMDNkICBYIFRpbHQKKwkwM2UgIFkgVGlsdAorCTAzZiAgQXppbXV0aAorCTA0MCAgQWx0aXR1ZGUKKwkwNDEgIFR3aXN0CisJMDQyICBUaXAgU3dpdGNoCisJMDQzICBTZWNvbmRhcnkgVGlwIFN3aXRjaAorCTA0NCAgQmFycmVsIFN3aXRjaAorCTA0NSAgRXJhc2VyCisJMDQ2ICBUYWJsZXQgUGljaworSFVUIDBmICBQSUQgUGFnZQorCTAwMCAgVW5kZWZpbmVkCisJMDAxICBQaHlzaWNhbCBJbnRlcmZhY2UgRGV2aWNlCisJMDIwICBOb3JtYWwKKwkwMjEgIFNldCBFZmZlY3QgUmVwb3J0CisJMDIyICBFZmZlY3QgQmxvY2sgSW5kZXgKKwkwMjMgIFBhcmFtZXRlciBCbG9jayBPZmZzZXQKKwkwMjQgIFJPTSBGbGFnCisJMDI1ICBFZmZlY3QgVHlwZQorCTAyNiAgRVQgQ29uc3RhbnQgRm9yY2UKKwkwMjcgIEVUIFJhbXAKKwkwMjggIEVUIEN1c3RvbSBGb3JjZSBEYXRhCisJMDMwICBFVCBTcXVhcmUKKwkwMzEgIEVUIFNpbmUKKwkwMzIgIEVUIFRyaWFuZ2xlCisJMDMzICBFVCBTYXd0b290aCBVcAorCTAzNCAgRVQgU2F3dG9vdGggRG93bgorCTA0MCAgRVQgU3ByaW5nCisJMDQxICBFVCBEYW1wZXIKKwkwNDIgIEVUIEluZXJ0aWEKKwkwNDMgIEVUIEZyaWN0aW9uCisJMDUwICBEdXJhdGlvbgorCTA1MSAgU2FtcGxlIFBlcmlvZAorCTA1MiAgR2FpbgorCTA1MyAgVHJpZ2dlciBCdXR0b24KKwkwNTQgIFRyaWdnZXIgUmVwZWF0IEludGVydmFsCisJMDU1ICBBeGVzIEVuYWJsZQorCTA1NiAgRGlyZWN0aW9uIEVuYWJsZQorCTA1NyAgRGlyZWN0aW9uCisJMDU4ICBUeXBlIFNwZWNpZmljIEJsb2NrIE9mZnNldAorCTA1OSAgQmxvY2sgVHlwZQorCTA1QSAgU2V0IEVudmVsb3BlIFJlcG9ydAorCTA1QiAgQXR0YWNrIExldmVsCisJMDVDICBBdHRhY2sgVGltZQorCTA1RCAgRmFkZSBMZXZlbAorCTA1RSAgRmFkZSBUaW1lCisJMDVGICBTZXQgQ29uZGl0aW9uIFJlcG9ydAorCTA2MCAgQ1AgT2Zmc2V0CisJMDYxICBQb3NpdGl2ZSBDb2VmZmljaWVudAorCTA2MiAgTmVnYXRpdmUgQ29lZmZpY2llbnQKKwkwNjMgIFBvc2l0aXZlIFNhdHVyYXRpb24KKwkwNjQgIE5lZ2F0aXZlIFNhdHVyYXRpb24KKwkwNjUgIERlYWQgQmFuZAorCTA2NiAgRG93bmxvYWQgRm9yY2UgU2FtcGxlCisJMDY3ICBJc29jaCBDdXN0b20gRm9yY2UgRW5hYmxlCisJMDY4ICBDdXN0b20gRm9yY2UgRGF0YSBSZXBvcnQKKwkwNjkgIEN1c3RvbSBGb3JjZSBEYXRhCisJMDZBICBDdXN0b20gRm9yY2UgVmVuZG9yIERlZmluZWQgRGF0YQorCTA2QiAgU2V0IEN1c3RvbSBGb3JjZSBSZXBvcnQKKwkwNkMgIEN1c3RvbSBGb3JjZSBEYXRhIE9mZnNldAorCTA2RCAgU2FtcGxlIENvdW50CisJMDZFICBTZXQgUGVyaW9kaWMgUmVwb3J0CisJMDZGICBPZmZzZXQKKwkwNzAgIE1hZ25pdHVkZQorCTA3MSAgUGhhc2UKKwkwNzIgIFBlcmlvZAorCTA3MyAgU2V0IENvbnN0YW50IEZvcmNlIFJlcG9ydAorCTA3NCAgU2V0IFJhbXAgRm9yY2UgUmVwb3J0CisJMDc1ICBSYW1wIFN0YXJ0CisJMDc2ICBSYW1wIEVuZAorCTA3NyAgRWZmZWN0IE9wZXJhdGlvbiBSZXBvcnQKKwkwNzggIEVmZmVjdCBPcGVyYXRpb24KKwkwNzkgIE9wIEVmZmVjdCBTdGFydAorCTA3QSAgT3AgRWZmZWN0IFN0YXJ0IFNvbG8KKwkwN0IgIE9wIEVmZmVjdCBTdG9wCisJMDdDICBMb29wIENvdW50CisJMDdEICBEZXZpY2UgR2FpbiBSZXBvcnQKKwkwN0UgIERldmljZSBHYWluCisJMDdGICBQSUQgUG9vbCBSZXBvcnQKKwkwODAgIFJBTSBQb29sIFNpemUKKwkwODEgIFJPTSBQb29sIFNpemUKKwkwODIgIFJPTSBFZmZlY3QgQmxvY2sgQ291bnQKKwkwODMgIFNpbXVsdGFuZW91cyBFZmZlY3RzIE1heAorCTA4NCAgUG9vbCBBbGlnbm1lbnQKKwkwODUgIFBJRCBQb29sIE1vdmUgUmVwb3J0CisJMDg2ICBNb3ZlIFNvdXJjZQorCTA4NyAgTW92ZSBEZXN0aW5hdGlvbgorCTA4OCAgTW92ZSBMZW5ndGgKKwkwODkgIFBJRCBCbG9jayBMb2FkIFJlcG9ydAorCTA4QiAgQmxvY2sgTG9hZCBTdGF0dXMKKwkwOEMgIEJsb2NrIExvYWQgU3VjY2VzcworCTA4RCAgQmxvY2sgTG9hZCBGdWxsCisJMDhFICBCbG9jayBMb2FkIEVycm9yCisJMDhGICBCbG9jayBIYW5kbGUKKwkwOTAgIFBJRCBCbG9jayBGcmVlIFJlcG9ydAorCTA5MSAgVHlwZSBTcGVjaWZpYyBCbG9jayBIYW5kbGUKKwkwOTIgIFBJRCBTdGF0ZSBSZXBvcnQKKwkwOTQgIEVmZmVjdCBQbGF5aW5nCisJMDk1ICBQSUQgRGV2aWNlIENvbnRyb2wgUmVwb3J0CisJMDk2ICBQSUQgRGV2aWNlIENvbnRyb2wKKwkwOTcgIERDIEVuYWJsZSBBY3R1YXRvcnMKKwkwOTggIERDIERpc2FibGUgQWN0dWF0b3JzCisJMDk5ICBEQyBTdG9wIEFsbCBFZmZlY3RzCisJMDlBICBEQyBEZXZpY2UgUmVzZXQKKwkwOUIgIERDIERldmljZSBQYXVzZQorCTA5QyAgREMgRGV2aWNlIENvbnRpbnVlCisJMDlGICBEZXZpY2UgUGF1c2VkCisJMEEwICBBY3R1YXRvcnMgRW5hYmxlZAorCTBBNCAgU2FmZXR5IFN3aXRjaAorCTBBNSAgQWN0dWF0b3IgT3ZlcnJpZGUgU3dpdGNoCisJMEE2ICBBY3R1YXRvciBQb3dlcgorCTBBNyAgU3RhcnQgRGVsYXkKKwkwQTggIFBhcmFtZXRlciBCbG9jayBTaXplCisJMEE5ICBEZXZpY2UgTWFuYWdlZCBQb29sCisJMEFBICBTaGFyZWQgUGFyYW1ldGVyIEJsb2NrcworCTBBQiAgQ3JlYXRlIE5ldyBFZmZlY3QgUmVwb3J0CisJMEFDICBSQU0gUG9vbCBBdmFpbGFibGUKK0hVVCAxMCAgVW5pY29kZQorSFVUIDE0ICBBbHBoYW51bWVyaWMgRGlzcGxheQorCTAwMCAgVW5kZWZpbmVkCisJMDAxICBBbHBoYW51bWVyaWMgRGlzcGxheQorCTAyMCAgRGlzcGxheSBBdHRyaWJ1dGVzIFJlcG9ydAorCTAyMSAgQVNDSUkgQ2hhcmFjdGVyIFNldAorCTAyMiAgRGF0YSBSZWFkIEJhY2sKKwkwMjMgIEZvbnQgUmVhZCBCYWNrCisJMDI0ICBEaXNwbGF5IENvbnRyb2wgUmVwb3J0CisJMDI1ICBDbGVhciBEaXNwbGF5CisJMDI2ICBEaXNwbGF5IEVuYWJsZQorCTAyNyAgU2NyZWVuIFNhdmVyIERlbGF5CisJMDI4ICBTY3JlZW4gU2F2ZXIgRW5hYmxlCisJMDI5ICBWZXJ0aWNhbCBTY3JvbGwKKwkwMmEgIEhvcml6b250YWwgU2Nyb2xsCisJMDJiICBDaGFyYWN0ZXIgUmVwb3J0CisJMDJjICBEaXNwbGF5IERhdGEKKwkwMmQgIERpc3BsYXkgU3RhdHVzCisJMDJlICBTdGF0IE5vdCBSZWFkeQorCTAyZiAgU3RhdCBSZWFkeQorCTAzMCAgRXJyIE5vdCBhIGxvYWRhYmxlIENoYXJhY3RlcgorCTAzMSAgRXJyIEZvbnQgRGF0YSBDYW5ub3QgQmUgUmVhZAorCTAzMiAgQ3Vyc3VyIFBvc2l0aW9uIFJlcG9ydAorCTAzMyAgUm93CisJMDM0ICBDb2x1bW4KKwkwMzUgIFJvd3MKKwkwMzYgIENvbHVtbnMKKwkwMzcgIEN1cnNvciBQaXhlbCBQb3NpdGlvbmluZworCTAzOCAgQ3Vyc29yIE1vZGUKKwkwMzkgIEN1cnNvciBFbmFibGUKKwkwM2EgIEN1cnNvciBCbGluaworCTAzYiAgRm9udCBSZXBvcnQKKwkwM2MgIEZvbnQgRGF0YQorCTAzZCAgQ2hhcmFjdGVyIFdpZHRoCisJMDNlICBDaGFyYWN0ZXIgSGVpZ2h0CisJMDNmICBDaGFyYWN0ZXIgU3BhY2luZyBIb3Jpem9udGFsCisJMDQwICBDaGFyYWN0ZXIgU3BhY2luZyBWZXJ0aWNhbAorCTA0MSAgVW5pY29kZSBDaGFyYWN0ZXIgU2V0CitIVVQgODAgIFVTQiBNb25pdG9yCisJMDAxICBNb25pdG9yIENvbnRyb2wKKwkwMDIgIEVESUQgSW5mb3JtYXRpb24KKwkwMDMgIFZESUYgSW5mb3JtYXRpb24KKwkwMDQgIFZFU0EgVmVyc2lvbgorSFVUIDgxICBVU0IgTW9uaXRvciBFbnVtZXJhdGVkIFZhbHVlcworSFVUIDgyICBNb25pdG9yIFZFU0EgVmlydHVhbCBDb250cm9scworCTAwMSAgRGVnYXVzcworCTAxMCAgQnJpZ2h0bmVzcworCTAxMiAgQ29udHJhc3QKKwkwMTYgIFJlZCBWaWRlbyBHYWluCisJMDE4ICBHcmVlbiBWaWRlbyBHYWluCisJMDFhICBCbHVlIFZpZGVvIEdhaW4KKwkwMWMgIEZvY3VzCisJMDIwICBIb3Jpem9udGFsIFBvc2l0aW9uCisJMDIyICBIb3Jpem9udGFsIFNpemUKKwkwMjQgIEhvcml6b250YWwgUGluY3VzaGlvbgorCTAyNiAgSG9yaXpvbnRhbCBQaW5jdXNoaW9uIEJhbGFuY2UKKwkwMjggIEhvcml6b250YWwgTWlzY29udmVyZ2VuY2UKKwkwMmEgIEhvcml6b250YWwgTGluZWFyaXR5CisJMDJjICBIb3Jpem9udGFsIExpbmVhcml0eSBCYWxhbmNlCisJMDMwICBWZXJ0aWNhbCBQb3NpdGlvbgorCTAzMiAgVmVydGljYWwgU2l6ZQorCTAzNCAgVmVydGljYWwgUGluY3VzaGlvbgorCTAzNiAgVmVydGljYWwgUGluY3VzaGlvbiBCYWxhbmNlCisJMDM4ICBWZXJ0aWNhbCBNaXNjb252ZXJnZW5jZQorCTAzYSAgVmVydGljYWwgTGluZWFyaXR5CisJMDNjICBWZXJ0aWNhbCBMaW5lYXJpdHkgQmFsYW5jZQorCTA0MCAgUGFyYWxsZWxvZ3JhbSBCYWxhbmNlIChLZXkgRGlzdG9ydGlvbikKKwkwNDIgIFRyYXBlem9pZGFsIERpc3RvcnRpb24gKEtleSkKKwkwNDQgIFRpbHQgKFJvdGF0aW9uKQorCTA0NiAgVG9wIENvcm5lciBEaXN0b3J0aW9uIENvbnRyb2wKKwkwNDggIFRvcCBDb3JuZXIgRGlzdG9ydGlvbiBCYWxhbmNlCisJMDRhICBCb3R0b20gQ29ybmVyIERpc3RvcnRpb24gQ29udHJvbAorCTA0YyAgQm90dG9tIENvcm5lciBEaXN0b3J0aW9uIEJhbGFuY2UKKwkwNTYgIEhvcml6b250YWwgTW9pcmUKKwkwNTggIFZlcnRpY2FsIE1vaXJlCisJMDVlICBJbnB1dCBMZXZlbCBTZWxlY3QKKwkwNjAgIElucHV0IFNvdXJjZSBTZWxlY3QKKwkwNmMgIFJlZCBWaWRlbyBCbGFjayBMZXZlbAorCTA2ZSAgR3JlZW4gVmlkZW8gQmxhY2sgTGV2ZWwKKwkwNzAgIEJsdWUgVmlkZW8gQmxhY2sgTGV2ZWwKKwkwYTIgIEF1dG8gU2l6ZSBDZW50ZXIKKwkwYTQgIFBvbGFyaXR5IEhvcml6b250YWwgU3ljaHJvbml6YXRpb24KKwkwYTYgIFBvbGFyaXR5IFZlcnRpY2FsIFN5bmNocm9uaXphdGlvbgorCTBhYSAgU2NyZWVuIE9yaWVudGF0aW9uCisJMGFjICBIb3Jpem9udGFsIEZyZXF1ZW5jeSBpbiBIegorCTBhZSAgVmVydGljYWwgRnJlcXVlbmN5IGluIDAuMSBIegorCTBiMCAgU2V0dGluZ3MKKwkwY2EgIE9uIFNjcmVlbiBEaXNwbGF5IChPU0QpCisJMGQ0ICBTdGVyZW8gTW9kZQorSFVUIDg0ICBQb3dlciBEZXZpY2UgUGFnZQorCTAwMCAgVW5kZWZpbmVkCisJMDAxICBpTmFtZQorCTAwMiAgUHJlc2VudCBTdGF0dXMKKwkwMDMgIENoYW5nZWQgU3RhdHVzCisJMDA0ICBVUFMKKwkwMDUgIFBvd2VyIFN1cHBseQorCTAxMCAgQmF0dGVyeSBTeXN0ZW0KKwkwMTEgIEJhdHRlcnkgU3lzdGVtIElECisJMDEyICBCYXR0ZXJ5CisJMDEzICBCYXR0ZXJ5IElECisJMDE0ICBDaGFyZ2VyCisJMDE1ICBDaGFyZ2VyIElECisJMDE2ICBQb3dlciBDb252ZXJ0ZXIKKwkwMTcgIFBvd2VyIENvbnZlcnRlciBJRAorCTAxOCAgT3V0bGV0IFN5c3RlbQorCTAxOSAgT3V0bGV0IFN5c3RlbSBJRAorCTAxYSAgSW5wdXQKKwkwMWIgIElucHV0IElECisJMDFjICBPdXRwdXQKKwkwMWQgIE91dHB1dCBJRAorCTAxZSAgRmxvdworCTAxZiAgRmxvdyBJRAorCTAyMCAgT3V0bGV0CisJMDIxICBPdXRsZXQgSUQKKwkwMjIgIEdhbmcKKwkwMjMgIEdhbmcgSUQKKwkwMjQgIFBvd2VyIFN1bW1hcnkKKwkwMjUgIFBvd2VyIFN1bW1hcnkgSUQKKwkwMzAgIFZvbHRhZ2UKKwkwMzEgIEN1cnJlbnQKKwkwMzIgIEZyZXF1ZW5jeQorCTAzMyAgQXBwYXJlbnQgUG93ZXIKKwkwMzQgIEFjdGl2ZSBQb3dlcgorCTAzNSAgUGVyY2VudCBMb2FkCisJMDM2ICBUZW1wZXJhdHVyZQorCTAzNyAgSHVtaWRpdHkKKwkwMzggIEJhZCBDb3VudAorCTA0MCAgQ29uZmlnIFZvbHRhZ2UKKwkwNDEgIENvbmZpZyBDdXJyZW50CisJMDQyICBDb25maWcgRnJlcXVlbmN5CisJMDQzICBDb25maWcgQXBwYXJlbnQgUG93ZXIKKwkwNDQgIENvbmZpZyBBY3RpdmUgUG93ZXIKKwkwNDUgIENvbmZpZyBQZXJjZW50IExvYWQKKwkwNDYgIENvbmZpZyBUZW1wZXJhdHVyZQorCTA0NyAgQ29uZmlnIEh1bWlkaXR5CisJMDUwICBTd2l0Y2ggT24gQ29udHJvbAorCTA1MSAgU3dpdGNoIE9mZiBDb250cm9sCisJMDUyICBUb2dnbGUgQ29udHJvbAorCTA1MyAgTG93IFZvbHRhZ2UgVHJhbnNmZXIKKwkwNTQgIEhpZ2ggVm9sdGFnZSBUcmFuc2ZlcgorCTA1NSAgRGVsYXkgQmVmb3JlIFJlYm9vdAorCTA1NiAgRGVsYXkgQmVmb3JlIFN0YXJ0dXAKKwkwNTcgIERlbGF5IEJlZm9yZSBTaHV0ZG93bgorCTA1OCAgVGVzdAorCTA1OSAgTW9kdWxlIFJlc2V0CisJMDVhICBBdWRpYmxlIEFsYXJtIENvbnRyb2wKKwkwNjAgIFByZXNlbnQKKwkwNjEgIEdvb2QKKwkwNjIgIEludGVybmFsIEZhaWx1cmUKKwkwNjMgIFZvbHRhZ2Ugb3V0IG9mIHJhbmdlCisJMDY0ICBGcmVxdWVuY3kgb3V0IG9mIHJhbmdlCisJMDY1ICBPdmVybG9hZAorCTA2NiAgT3ZlciBDaGFyZ2VkCisJMDY3ICBPdmVyIFRlbXBlcmF0dXJlCisJMDY4ICBTaHV0ZG93biBSZXF1ZXN0ZWQKKwkwNjkgIFNodXRkb3duICBJbW1pbmVudAorCTA2YSAgUmVzZXJ2ZWQKKwkwNmIgIFN3aXRjaCBPbi9PZmYKKwkwNmMgIFN3aXRjaGFibGUKKwkwNmQgIFVzZWQKKwkwNmUgIEJvb3N0CisJMDZmICBCdWNrCisJMDcwICBJbml0aWFsaXplZAorCTA3MSAgVGVzdGVkCisJMDcyICBBd2FpdGluZyBQb3dlcgorCTA3MyAgQ29tbXVuaWNhdGlvbiBMb3N0CisJMGZkICBpTWFudWZhY3R1cmVyCisJMGZlICBpUHJvZHVjdAorCTBmZiAgaVNlcmlhbE51bWJlcgorSFVUIDg1ICBCYXR0ZXJ5IFN5c3RlbSBQYWdlCisJMDAwICBVbmRlZmluZWQKKwkwMDEgIFNNQiBCYXR0ZXJ5IE1vZGUKKwkwMDIgIFNNQiBCYXR0ZXJ5IFN0YXR1cworCTAwMyAgU01CIEFsYXJtIFdhcm5pbmcKKwkwMDQgIFNNQiBDaGFyZ2VyIE1vZGUKKwkwMDUgIFNNQiBDaGFyZ2VyIFN0YXR1cworCTAwNiAgU01CIENoYXJnZXIgU3BlYyBJbmZvCisJMDA3ICBTTUIgU2VsZWN0b3IgU3RhdGUKKwkwMDggIFNNQiBTZWxlY3RvciBQcmVzZXRzCisJMDA5ICBTTUIgU2VsZWN0b3IgSW5mbworCTAxMCAgT3B0aW9uYWwgTWZnLiBGdW5jdGlvbiAxCisJMDExICBPcHRpb25hbCBNZmcuIEZ1bmN0aW9uIDIKKwkwMTIgIE9wdGlvbmFsIE1mZy4gRnVuY3Rpb24gMworCTAxMyAgT3B0aW9uYWwgTWZnLiBGdW5jdGlvbiA0CisJMDE0ICBPcHRpb25hbCBNZmcuIEZ1bmN0aW9uIDUKKwkwMTUgIENvbm5lY3Rpb24gdG8gU01CdXMKKwkwMTYgIE91dHB1dCBDb25uZWN0aW9uCisJMDE3ICBDaGFyZ2VyIENvbm5lY3Rpb24KKwkwMTggIEJhdHRlcnkgSW5zZXJ0aW9uCisJMDE5ICBVc2UgTmV4dAorCTAxYSAgT0sgdG8gdXNlCisJMDFiICBCYXR0ZXJ5ICBTdXBwb3J0ZWQKKwkwMWMgIFNlbGVjdG9yUmV2aXNpb24KKwkwMWQgIENoYXJnaW5nIEluZGljYXRvcgorCTAyOCAgTWFudWZhY3R1cmVyIEFjY2VzcworCTAyOSAgUmVtYWluaW5nIENhcGFjaXR5IExpbWl0CisJMDJhICBSZW1haW5pbmcgVGltZSBMaW1pdAorCTAyYiAgQXQgUmF0ZQorCTAyYyAgQ2FwYWNpdHkgTW9kZQorCTAyZCAgQnJvYWRjYXN0IFRvIENoYXJnZXIKKwkwMmUgIFByaW1hcnkgQmF0dGVyeQorCTAyZiAgQ2hhcmdlIENvbnRyb2xsZXIKKwkwNDAgIFRlcm1pbmF0ZSBDaGFyZ2UKKwkwNDEgIFRlcm1pbmF0ZSBEaXNjaGFyZ2UKKwkwNDIgIEJlbG93IFJlbWFpbmluZyBDYXBhY2l0eSBMaW1pdAorCTA0MyAgUmVtYWluaW5nIFRpbWUgTGltaXQgRXhwaXJlZAorCTA0NCAgQ2hhcmdpbmcKKwkwNDUgIERpc2NoYXJnaW5nCisJMDQ2ICBGdWxseSBDaGFyZ2VkCisJMDQ3ICBGdWxseSBEaXNjaGFyZ2VkCisJMDQ4ICBDb25kaXRpb25pbmcgRmxhZworCTA0OSAgQXQgUmF0ZSBPSworCTA0YSAgU01CIEVycm9yIENvZGUKKwkwNGIgIE5lZWQgUmVwbGFjZW1lbnQKKwkwNjAgIEF0IFJhdGUgVGltZSBUbyBGdWxsCisJMDYxICBBdCBSYXRlIFRpbWUgVG8gRW1wdHkKKwkwNjIgIEF2ZXJhZ2UgQ3VycmVudAorCTA2MyAgTWF4IEVycm9yCisJMDY0ICBSZWxhdGl2ZSBTdGF0ZSBPZiBDaGFyZ2UKKwkwNjUgIEFic29sdXRlIFN0YXRlIE9mIENoYXJnZQorCTA2NiAgUmVtYWluaW5nIENhcGFjaXR5CisJMDY3ICBGdWxsIENoYXJnZSBDYXBhY2l0eQorCTA2OCAgUnVuIFRpbWUgVG8gRW1wdHkKKwkwNjkgIEF2ZXJhZ2UgVGltZSBUbyBFbXB0eQorCTA2YSAgQXZlcmFnZSBUaW1lIFRvIEZ1bGwKKwkwNmIgIEN5Y2xlIENvdW50CisJMDgwICBCYXR0LiBQYWNrIE1vZGVsIExldmVsCisJMDgxICBJbnRlcm5hbCBDaGFyZ2UgQ29udHJvbGxlcgorCTA4MiAgUHJpbWFyeSBCYXR0ZXJ5IFN1cHBvcnQKKwkwODMgIERlc2lnbiBDYXBhY2l0eQorCTA4NCAgU3BlY2lmaWNhdGlvbiBJbmZvCisJMDg1ICBNYW51ZmFjdHVyZXIgRGF0ZQorCTA4NiAgU2VyaWFsIE51bWJlcgorCTA4NyAgaU1hbnVmYWN0dXJlck5hbWUKKwkwODggIGlEZXZpY2VOYW1lCisJMDg5ICBpRGV2aWNlQ2hlbWlzdHJ5CisJMDhhICBNYW51ZmFjdHVyZXIgRGF0YQorCTA4YiAgUmVjaGFyZ2VhYmxlCisJMDhjICBXYXJuaW5nIENhcGFjaXR5IExpbWl0CisJMDhkICBDYXBhY2l0eSBHcmFudWxhcml0eSAxCisJMDhlICBDYXBhY2l0eSBHcmFudWxhcml0eSAyCisJMDhmICBpT0VNSW5mb3JtYXRpb24KKwkwYzAgIEluaGliaXQgQ2hhcmdlCisJMGMxICBFbmFibGUgUG9sbGluZworCTBjMiAgUmVzZXQgVG8gWmVybworCTBkMCAgQUMgUHJlc2VudAorCTBkMSAgQmF0dGVyeSBQcmVzZW50CisJMGQyICBQb3dlciBGYWlsCisJMGQzICBBbGFybSBJbmhpYml0ZWQKKwkwZDQgIFRoZXJtaXN0b3IgVW5kZXIgUmFuZ2UKKwkwZDUgIFRoZXJtaXN0b3IgSG90CisJMGQ2ICBUaGVybWlzdG9yIENvbGQKKwkwZDcgIFRoZXJtaXN0b3IgT3ZlciBSYW5nZQorCTBkOCAgVm9sdGFnZSBPdXQgT2YgUmFuZ2UKKwkwZDkgIEN1cnJlbnQgT3V0IE9mIFJhbmdlCisJMGRhICBDdXJyZW50IE5vdCBSZWd1bGF0ZWQKKwkwZGIgIFZvbHRhZ2UgTm90IFJlZ3VsYXRlZAorCTBkYyAgTWFzdGVyIE1vZGUKKwkwZjAgIENoYXJnZXIgU2VsZWN0b3IgU3VwcG9ydAorCTBmMSAgQ2hhcmdlciBTcGVjCisJMGYyICBMZXZlbCAyCisJMGYzICBMZXZlbCAzCitIVVQgODYgIFBvd2VyIFBhZ2VzCitIVVQgODcgIFBvd2VyIFBhZ2VzCitIVVQgOGMgIEJhciBDb2RlIFNjYW5uZXIgUGFnZSAoUE9TKQorSFVUIDhkICBTY2FsZSBQYWdlIChQT1MpCitIVVQgOTAgIENhbWVyYSBDb250cm9sIFBhZ2UKK0hVVCA5MSAgQXJjYWRlIENvbnRyb2wgUGFnZQorSFVUIGYwICBDYXNoIERldmljZQorCTBmMSAgQ2FzaCBEcmF3ZXIKKwkwZjIgIENhc2ggRHJhd2VyIE51bWJlcgorCTBmMyAgQ2FzaCBEcmF3ZXIgU2V0CisJMGY0ICBDYXNoIERyYXdlciBTdGF0dXMKK0hVVCBmZiAgVmVuZG9yIFNwZWNpZmljCisKKyMgTGlzdCBvZiBMYW5ndWFnZXMKKworIyBTeW50YXg6CisjIEwgbGFuZ3VhZ2VfaWQgIGxhbmd1YWdlX25hbWUKKyMJZGlhbGVjdF9pZCAgZGlhbGVjdF9uYW1lCisKK0wgMDAwMSAgQXJhYmljCisJMDEgIFNhdWRpIEFyYWJpYQorCTAyICBJcmFxCisJMDMgIEVneXB0CisJMDQgIExpYnlhCisJMDUgIEFsZ2VyaWEKKwkwNiAgTW9yb2NjbworCTA3ICBUdW5lc2lhCisJMDggIE9tYW4KKwkwOSAgWWVtZW4KKwkwYSAgU3lyaWEKKwkwYiAgSm9yZGFuCisJMGMgIExlYmFub24KKwkwZCAgS3V3YWl0CisJMGUgIFUuQS5FCisJMGYgIEJhaHJhaW4KKwkxMCAgUWF0YXIKK0wgMDAwMiAgQnVsZ2FyaWFuCitMIDAwMDMgIENhdGFsYW4KK0wgMDAwNCAgQ2hpbmVzZQorCTAxICBUcmFkaXRpb25hbAorCTAyICBTaW1wbGlmaWVkCisJMDMgIEhvbmdrb25nIFNBUiwgUFJDCisJMDQgIFNpbmdhcG9yZQorCTA1ICBNYWNhdSBTQVIKK0wgMDAwNSAgQ3plY2gKK0wgMDAwNiAgRGFuaXNoCitMIDAwMDcgIEdlcm1hbgorCTAxICBHZXJtYW4KKwkwMiAgU3dpc3MKKwkwMyAgQXVzdHJpYW4KKwkwNCAgTHV4ZW1ib3VyZworCTA1ICBMaWVjaHRlbnN0ZWluCitMIDAwMDggIEdyZWVrCitMIDAwMDkgIEVuZ2xpc2gKKwkwMSAgVVMKKwkwMiAgVUsKKwkwMyAgQXVzdHJhbGlhbgorCTA0ICBDYW5hZGlhbgorCTA1ICBOZXcgWmVhbGFuZAorCTA2ICBJcmVsYW5kCisJMDcgIFNvdXRoIEFmcmljYQorCTA4ICBKYW1haWNhCisJMDkgIENhcnJpYmVhbgorCTBhICBCZWxpemUKKwkwYiAgVHJpbmlkYWQKKwkwYyAgWmltYmFid2UKKwkwZCAgUGhpbGlwcGluZXMKK0wgMDAwYSAgU3BhbmlzaAorCTAxICBDYXN0aWxpYW4KKwkwMiAgTWV4aWNhbgorCTAzICBNb2Rlcm4KKwkwNCAgR3VhdGVtYWxhCisJMDUgIENvc3RhIFJpY2EKKwkwNiAgUGFuYW1hCisJMDcgIERvbWluaWNhbiBSZXB1YmxpYworCTA4ICBWZW56dWVsYQorCTA5ICBDb2xvbWJpYQorCTBhICBQZXJ1CisJMGIgIEFyZ2VudGluYQorCTBjICBFY3VhZG9yCisJMGQgIENoaWxlCisJMGUgIFVydWd1YXkKKwkwZiAgUGFyYWd1YXkKKwkxMCAgQm9saXZpYQorCTExICBFbCBTYWx2YWRvcgorCTEyICBIb25kdXJhcworCTEzICBOaWNhcmFndWEKKwkxNCAgUHVlcnRvIFJpY28KK0wgMDAwYiAgRmlubmlzaAorTCAwMDBjICBGcmVuY2gKKwkwMSAgRnJlbmNoCisJMDIgIEJlbGdpYW4KKwkwMyAgQ2FuYWRpYW4KKwkwNCAgU3dpc3MKKwkwNSAgTHV4ZW1ib3VyZworCTA2ICBNb25hY28KK0wgMDAwZCAgSGVicmV3CitMIDAwMGUgIEh1bmdhcmlhbgorTCAwMDBmICBJZGVsYW5kaWMKK0wgMDAxMCAgSXRhbGlhbgorCTAxICBJdGFsaWFuCisJMDIgIFN3aXNzCitMIDAwMTEgIEphcGFuZXNlCitMIDAwMTIgIEtvcmVhbgorCTAxICBLb3JlYW4KK0wgMDAxMyAgRHV0Y2gKKwkwMSAgRHV0Y2gKKwkwMiAgQmVsZ2lhbgorTCAwMDE0ICBOb3J3ZWdpYW4KKwkwMSAgQm9rbWFsCisJMDIgIE55bm9yc2sKK0wgMDAxNSAgUG9saXNoCitMIDAwMTYJUG9ydHVndWVzZQorCTAxICBQb3J0dWd1ZXNlCisJMDIgIEJyYXppbGlhbgorTCAwMDE3ICBmb3Jnb3R0ZW4KK0wgMDAxOCAgUm9tYW5pYW4KK0wgMDAxOSAgUnVzc2lhbgorTCAwMDFhICBTZXJiaWFuCisJMDEgIENyb2F0aWFuCisJMDIgIExhdGluCisJMDMgIEN5cmlsbGljCitMIDAwMWIgIFNsb3ZhaworTCAwMDFjICBBbGJhbmlhbgorTCAwMDFkICBTd2VkaXNoCisJMDEgIFN3ZWRpc2gKKwkwMiAgRmlubGFuZAorTCAwMDFlICBUaGFpCitMIDAwMWYgIFR1cmtpc2gKK0wgMDAyMCAgVXJkdQorCTAxICBQYWtpc3RhbgorCTAyICBJbmRpYQorTCAwMDIxICBJbmRvbmVzaWFuCitMIDAwMjIgIFVrcmFpbmlhbgorTCAwMDIzICBCZWxhcnVzaWFuCitMIDAwMjQgIFNsb3ZlbmlhbgorTCAwMDI1ICBFc3RvbmlhbgorTCAwMDI2ICBMYXR2aWFuCitMIDAwMjcgIExpdGh1YW5pYW4KKwkwMSAgTGl0aHVhbmlhbgorTCAwMDI4ICBmb3Jnb3R0ZW4KK0wgMDAyOSAgRmFyc2kKK0wgMDAyYSAgVmlldG5hbWVzZQorTCAwMDJiICBBcm1lbmlhbgorTCAwMDJjICBBemVyaQorCTAxICBDeXJpbGxpYworCTAyICBMYXRpbgorTCAwMDJkICBCYXNxdWUKK0wgMDAyZSAgZm9yZ290dGVuCitMIDAwMmYgIE1hY2Vkb25pYW4KK0wgMDAzNiAgQWZyaWthYW5zCitMIDAwMzcgIEdlb3JnaWFuCitMIDAwMzggIEZhZXJvZXNlCitMIDAwMzkgIEhpbmRpCitMIDAwM2UgIE1hbGF5CisJMDEgIE1hbGF5c2lhCisJMDIgIEJydW5laSBEYXJhc3NhbGFtCitMIDAwM2YgIEthemFrCitMIDAwNDEgIEF3YWhpbGkKK0wgMDA0MyAgVXpiZWsKKwkwMSAgTGF0aW4KKwkwMiAgQ3lyaWxsaWMKK0wgMDA0NCAgVGF0YXIKK0wgMDA0NSAgQmVuZ2FsaQorTCAwMDQ2ICBQdW5qYWJpCitMIDAwNDcgIEd1amFyYXRpCitMIDAwNDggIE9yaXlhCitMIDAwNDkgIFRhbWlsCitMIDAwNGEgIFRlbHVndQorTCAwMDRiICBLYW5uYWRhCitMIDAwNGMgIE1hbGF5YWxhbQorTCAwMDRkICBBc3NhbWVzZQorTCAwMDRlICBNYXJhdGhpCitMIDAwNGYgIFNhbnNrcml0CitMIDAwNTcgIEtvbmthbmkKK0wgMDA1OCAgTWFuaXB1cmkKK0wgMDA1OSAgU2luZGhpCitMIDAwNjAgIEthc2htaXJpCisJMDIgIEluZGlhCitMIDAwNjEgIE5lcGFsaQorCTAyICBJbmRpYQorCisjIEhJRCBEZXNjcmlwdG9yIGJDb3VudHJ5Q29kZQorIyBISUQgU3BlY2lmaWNhdGlvbiAxLjExICgyMDAxLTA2LTI3KSBwYWdlIDIzCisjCisjIFN5bnRheDoKKyMgSENDIGNvdW50cnlfY29kZSBrZXltYXBfdHlwZQorCitIQ0MgMDAgIE5vdCBzdXBwb3J0ZWQKK0hDQyAwMSAgQXJhYmljCitIQ0MgMDIgIEJlbGdpYW4KK0hDQyAwMyAgQ2FuYWRpYW4tQmlsaW5ndWFsCitIQ0MgMDQgIENhbmFkaWFuLUZyZW5jaAorSENDIDA1ICBDemVjaCBSZXB1YmxpYworSENDIDA2ICBEYW5pc2gKK0hDQyAwNyAgRmlubmlzaAorSENDIDA4ICBGcmVuY2gKK0hDQyAwOSAgR2VybWFuCitIQ0MgMTAgIEdyZWVrCitIQ0MgMTEgIEhlYnJldworSENDIDEyICBIdW5nYXJ5CitIQ0MgMTMgIEludGVybmF0aW9uYWwgKElTTykKK0hDQyAxNCAgSXRhbGlhbgorSENDIDE1ICBKYXBhbiAoS2F0YWthbmEpCitIQ0MgMTYgIEtvcmVhbgorSENDIDE3ICBMYXRpbiBBbWVyaWNhbgorSENDIDE4ICBOZXRoZXJsYW5kcy9EdXRjaAorSENDIDE5ICBOb3J3ZWdpYW4KK0hDQyAyMCAgUGVyc2lhbiAoRmFyc2kpCitIQ0MgMjEgIFBvbGFuZAorSENDIDIyICBQb3J0dWd1ZXNlCitIQ0MgMjMgIFJ1c3NpYQorSENDIDI0ICBTbG92YWtpYQorSENDIDI1ICBTcGFuaXNoCitIQ0MgMjYgIFN3ZWRpc2gKK0hDQyAyNyAgU3dpc3MvRnJlbmNoCitIQ0MgMjggIFN3aXNzL0dlcm1hbgorSENDIDI5ICBTd2l0emVybGFuZAorSENDIDMwICBUYWl3YW4KK0hDQyAzMSAgVHVya2lzaC1RCitIQ0MgMzIgIFVLCitIQ0MgMzMgIFVTCitIQ0MgMzQgIFl1Z29zbGF2aWEKK0hDQyAzNSAgVHVya2lzaC1GCisKKyMgTGlzdCBvZiBWaWRlbyBDbGFzcyBUZXJtaW5hbCBUeXBlcworCisjIFN5bnRheDoKKyMgVlQgdGVybWluYWxfdHlwZSAgdGVybWluYWxfdHlwZV9uYW1lCisKK1ZUIDAxMDAgIFVTQiBWZW5kb3IgU3BlY2lmaWMKK1ZUIDAxMDEgIFVTQiBTdHJlYW1pbmcKK1ZUIDAyMDAgIElucHV0IFZlbmRvciBTcGVjaWZpYworVlQgMDIwMSAgQ2FtZXJhIFNlbnNvcgorVlQgMDIwMiAgU2VxdWVudGlhbCBNZWRpYQorVlQgMDMwMCAgT3V0cHV0IFZlbmRvciBTcGVjaWZpYworVlQgMDMwMSAgR2VuZXJpYyBEaXNwbGF5CitWVCAwMzAyICBTZXF1ZW50aWFsIE1lZGlhCitWVCAwNDAwICBFeHRlcm5hbCBWZW5kb3IgU3BlY2lmaWMKK1ZUIDA0MDEgIENvbXBvc2l0ZSBWaWRlbworVlQgMDQwMiAgUy1WaWRlbworVlQgMDQwMyAgQ29tcG9uZW50IFZpZGVvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaS5oIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2kuaAppbmRleCBkM2YxZTVmLi5kNWJjOGU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpLmgKQEAgLTE3LDkgKzE3LDE0IEBACiAgKiBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvaGNkLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAKIHN0cnVjdCB2aGNpX2RldmljZSB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CkBAIC0zMywxMiArMzgsMTEgQEAKIAkvKiBzcGVlZCBvZiBhIHJlbW90ZSBkZXZpY2UgKi8KIAllbnVtIHVzYl9kZXZpY2Vfc3BlZWQgc3BlZWQ7CiAKLQkvKiAgdmhjaSByb290LWh1YiBwb3J0IHRvIHdoaWNoIHRoaXMgZGV2aWNlIGlzIGF0dGFjaGVkICAqLworCS8qIHZoY2kgcm9vdC1odWIgcG9ydCB0byB3aGljaCB0aGlzIGRldmljZSBpcyBhdHRhY2hlZCAqLwogCV9fdTMyIHJocG9ydDsKIAogCXN0cnVjdCB1c2JpcF9kZXZpY2UgdWQ7CiAKLQogCS8qIGxvY2sgZm9yIHRoZSBiZWxvdyBsaW5rIGxpc3RzICovCiAJc3BpbmxvY2tfdCBwcml2X2xvY2s7CiAKQEAgLTU0LDcgKzU4LDYgQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0cV90eDsKIH07CiAKLQogLyogdXJiLT5oY3ByaXYsIHVzZSBjb250YWluZXJfb2YoKSAqLwogc3RydWN0IHZoY2lfcHJpdiB7CiAJdW5zaWduZWQgbG9uZyBzZXFudW07CkBAIC02NCw3ICs2Nyw2IEBACiAJc3RydWN0IHVyYiAqdXJiOwogfTsKIAotCiBzdHJ1Y3QgdmhjaV91bmxpbmsgewogCS8qIHNlcW51bSBvZiB0aGlzIHJlcXVlc3QgKi8KIAl1bnNpZ25lZCBsb25nIHNlcW51bTsKQEAgLTg1LDEyICs4NywxMiBAQAogCiAvKiBmb3IgdXNiX2J1cy5oY3ByaXYgKi8KIHN0cnVjdCB2aGNpX2hjZCB7Ci0Jc3BpbmxvY2tfdAlsb2NrOworCXNwaW5sb2NrX3QgbG9jazsKIAotCXUzMglwb3J0X3N0YXR1c1tWSENJX05QT1JUU107CisJdTMyIHBvcnRfc3RhdHVzW1ZIQ0lfTlBPUlRTXTsKIAotCXVuc2lnbmVkCXJlc3VtaW5nOjE7Ci0JdW5zaWduZWQgbG9uZwlyZV90aW1lb3V0OworCXVuc2lnbmVkIHJlc3VtaW5nOjE7CisJdW5zaWduZWQgbG9uZyByZV90aW1lb3V0OwogCiAJYXRvbWljX3Qgc2VxbnVtOwogCkBAIC0xMDIsMjUgKzEwNCwyMSBAQAogCXN0cnVjdCB2aGNpX2RldmljZSB2ZGV2W1ZIQ0lfTlBPUlRTXTsKIH07CiAKLQogZXh0ZXJuIHN0cnVjdCB2aGNpX2hjZCAqdGhlX2NvbnRyb2xsZXI7CiBleHRlcm4gc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBkZXZfYXR0cl9ncm91cDsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogcHJvdG90eXBlIGRlY2xhcmF0aW9uICovCisjZGVmaW5lIGhhcmR3YXJlICgmdGhlX2NvbnRyb2xsZXItPnBkZXYuZGV2KQogCiAvKiB2aGNpX2hjZC5jICovCiB2b2lkIHJoX3BvcnRfY29ubmVjdChpbnQgcmhwb3J0LCBlbnVtIHVzYl9kZXZpY2Vfc3BlZWQgc3BlZWQpOwogdm9pZCByaF9wb3J0X2Rpc2Nvbm5lY3QoaW50IHJocG9ydCk7CisKKy8qIHZoY2lfcnguYyAqLworc3RydWN0IHVyYiAqcGlja3VwX3VyYl9hbmRfZnJlZV9wcml2KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldiwgX191MzIgc2VxbnVtKTsKIGludCB2aGNpX3J4X2xvb3Aodm9pZCAqZGF0YSk7CisKKy8qIHZoY2lfdHguYyAqLwogaW50IHZoY2lfdHhfbG9vcCh2b2lkICpkYXRhKTsKIAotc3RydWN0IHVyYiAqcGlja3VwX3VyYl9hbmRfZnJlZV9wcml2KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldiwKLQkJCQkJICAgIF9fdTMyIHNlcW51bSk7Ci0KLSNkZWZpbmUgaGFyZHdhcmUJCSgmdGhlX2NvbnRyb2xsZXItPnBkZXYuZGV2KQotCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB2aGNpX2RldmljZSAqcG9ydF90b192ZGV2KF9fdTMyIHBvcnQpCiB7CiAJcmV0dXJuICZ0aGVfY29udHJvbGxlci0+dmRldltwb3J0XTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX2hjZC5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfaGNkLmMKaW5kZXggNGY0ZjEzMy4uYTc2ZThmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfaGNkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfaGNkLmMKQEAgLTE3LDIxICsxNywxOCBAQAogICogVVNBLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlICJ1c2JpcF9jb21tb24uaCIKICNpbmNsdWRlICJ2aGNpLmgiCiAKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjEuMCIKICNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiVGFrYWhpcm8gSGlyb2Z1Y2hpIgotI2RlZmluZSBEUklWRVJfREVTQyAiVmlydHVhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIERyaXZlciBmb3IgVVNCL0lQIgotI2RlZmluZSBEUklWRVJfTElDRU5DRSAiR1BMIgotTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKLU1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7Ci1NT0RVTEVfTElDRU5TRShEUklWRVJfTElDRU5DRSk7Ci0KLQorI2RlZmluZSBEUklWRVJfREVTQyAiVVNCL0lQICdWaXJ0dWFsJyBIb3N0IENvbnRyb2xsZXIgKFZIQ0kpIERyaXZlciIKIAogLyoKICAqIFRPRE8KQEAgLTQzLDE1ICs0MCwxMyBAQAogICoJLSBjbGVhbiB1cCBldmVyeXRoaW5nCiAgKi8KIAotCiAvKiBTZWUgdXNiIGdhZGdldCBkdW1teSBoY2QgKi8KIAotCiBzdGF0aWMgaW50IHZoY2lfaHViX3N0YXR1cyhzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBjaGFyICpidWZmKTsKIHN0YXRpYyBpbnQgdmhjaV9odWJfY29udHJvbChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCB1MTYgdHlwZVJlcSwgdTE2IHdWYWx1ZSwKLQkJdTE2IHdJbmRleCwgY2hhciAqYnVmZiwgdTE2IHdMZW5ndGgpOworCQkJICAgIHUxNiB3SW5kZXgsIGNoYXIgKmJ1ZmYsIHUxNiB3TGVuZ3RoKTsKIHN0YXRpYyBpbnQgdmhjaV91cmJfZW5xdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsCi0JCQkJCQkJZ2ZwX3QgbWVtX2ZsYWdzKTsKKwkJCSAgICBnZnBfdCBtZW1fZmxhZ3MpOwogc3RhdGljIGludCB2aGNpX3VyYl9kZXF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cyk7CiBzdGF0aWMgaW50IHZoY2lfc3RhcnQoc3RydWN0IHVzYl9oY2QgKnZoY2lfaGNkKTsKIHN0YXRpYyB2b2lkIHZoY2lfc3RvcChzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKQEAgLTYyLDU3ICs1Nyw1MyBAQAogCiBzdHJ1Y3QgdmhjaV9oY2QgKnRoZV9jb250cm9sbGVyOwogCi1zdGF0aWMgY29uc3QgY2hhciAqYml0X2Rlc2NbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYml0X2Rlc2NbXSA9IHsKIAkiQ09OTkVDVElPTiIsCQkvKjAqLwogCSJFTkFCTEUiLAkJLyoxKi8KIAkiU1VTUEVORCIsCQkvKjIqLwogCSJPVkVSX0NVUlJFTlQiLAkJLyozKi8KIAkiUkVTRVQiLAkJLyo0Ki8KLQkiUjUiLAkJLyo1Ki8KLQkiUjYiLAkJLyo2Ki8KLQkiUjciLAkJLyo3Ki8KKwkiUjUiLAkJCS8qNSovCisJIlI2IiwJCQkvKjYqLworCSJSNyIsCQkJLyo3Ki8KIAkiUE9XRVIiLAkJLyo4Ki8KIAkiTE9XU1BFRUQiLAkJLyo5Ki8KIAkiSElHSFNQRUVEIiwJCS8qMTAqLwogCSJQT1JUX1RFU1QiLAkJLyoxMSovCiAJIklORElDQVRPUiIsCQkvKjEyKi8KLQkiUjEzIiwJCS8qMTMqLwotCSJSMTQiLAkJLyoxNCovCi0JIlIxNSIsCQkvKjE1Ki8KKwkiUjEzIiwJCQkvKjEzKi8KKwkiUjE0IiwJCQkvKjE0Ki8KKwkiUjE1IiwJCQkvKjE1Ki8KIAkiQ19DT05ORUNUSU9OIiwJCS8qMTYqLwogCSJDX0VOQUJMRSIsCQkvKjE3Ki8KIAkiQ19TVVNQRU5EIiwJCS8qMTgqLwogCSJDX09WRVJfQ1VSUkVOVCIsCS8qMTkqLwogCSJDX1JFU0VUIiwJCS8qMjAqLwotCSJSMjEiLAkJLyoyMSovCi0JIlIyMiIsCQkvKjIyKi8KLQkiUjIzIiwJCS8qMjMqLwotCSJSMjQiLAkJLyoyNCovCi0JIlIyNSIsCQkvKjI1Ki8KLQkiUjI2IiwJCS8qMjYqLwotCSJSMjciLAkJLyoyNyovCi0JIlIyOCIsCQkvKjI4Ki8KLQkiUjI5IiwJCS8qMjkqLwotCSJSMzAiLAkJLyozMCovCi0JIlIzMSIsCQkvKjMxKi8KKwkiUjIxIiwJCQkvKjIxKi8KKwkiUjIyIiwJCQkvKjIyKi8KKwkiUjIzIiwJCQkvKjIzKi8KKwkiUjI0IiwJCQkvKjI0Ki8KKwkiUjI1IiwJCQkvKjI1Ki8KKwkiUjI2IiwJCQkvKjI2Ki8KKwkiUjI3IiwJCQkvKjI3Ki8KKwkiUjI4IiwJCQkvKjI4Ki8KKwkiUjI5IiwJCQkvKjI5Ki8KKwkiUjMwIiwJCQkvKjMwKi8KKwkiUjMxIiwJCQkvKjMxKi8KIH07CiAKLQogc3RhdGljIHZvaWQgZHVtcF9wb3J0X3N0YXR1cyh1MzIgc3RhdHVzKQogewogCWludCBpID0gMDsKIAotCXByaW50ayhLRVJOX0RFQlVHICJzdGF0dXMgJTA4eDoiLCBzdGF0dXMpOworCXByX2RlYnVnKCJzdGF0dXMgJTA4eDoiLCBzdGF0dXMpOwogCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CiAJCWlmIChzdGF0dXMgJiAoMSA8PCBpKSkKLQkJCXByaW50aygiICVzIiwgYml0X2Rlc2NbaV0pOworCQkJcHJfZGVidWcoIiAlcyIsIGJpdF9kZXNjW2ldKTsKIAl9Ci0KLQlwcmludGsoIlxuIik7CisJcHJfZGVidWcoIlxuIik7CiB9CiAKLQotCiB2b2lkIHJoX3BvcnRfY29ubmVjdChpbnQgcmhwb3J0LCBlbnVtIHVzYl9kZXZpY2Vfc3BlZWQgc3BlZWQpCiB7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKQEAgLTE1NiwyNiArMTQ3LDIwIEBACiAJdGhlX2NvbnRyb2xsZXItPnBvcnRfc3RhdHVzW3JocG9ydF0gfD0KIAkJCQkJKDEgPDwgVVNCX1BPUlRfRkVBVF9DX0NPTk5FQ1RJT04pOwogCi0KIAkvKiBub3QgeWV0IGNvbXBsZXRlIHRoZSBkaXNjb25uZWN0aW9uCiAJICogc3Bpbl9sb2NrKCZ2ZGV2LT51ZC5sb2NrKTsKIAkgKiB2ZGV2LT51ZC5zdGF0dXMgPSBWSENfU1RfRElTQ09OTkVDVDsKIAkgKiBzcGluX3VubG9jaygmdmRldi0+dWQubG9jayk7ICovCiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aGVfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOwotCiAJdXNiX2hjZF9wb2xsX3JoX3N0YXR1cyh2aGNpX3RvX2hjZCh0aGVfY29udHJvbGxlcikpOwogfQogCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2RlZmluZSBQT1JUX0NfTUFTSyBcCi0JKChVU0JfUE9SVF9TVEFUX0NfQ09OTkVDVElPTiBcCi0JICB8IFVTQl9QT1JUX1NUQVRfQ19FTkFCTEUgXAotCSAgfCBVU0JfUE9SVF9TVEFUX0NfU1VTUEVORCBcCi0JICB8IFVTQl9QT1JUX1NUQVRfQ19PVkVSQ1VSUkVOVCBcCisjZGVmaW5lIFBPUlRfQ19NQVNLCQkJCVwKKwkoKFVTQl9QT1JUX1NUQVRfQ19DT05ORUNUSU9OCQlcCisJICB8IFVTQl9QT1JUX1NUQVRfQ19FTkFCTEUJCVwKKwkgIHwgVVNCX1BPUlRfU1RBVF9DX1NVU1BFTkQJCVwKKwkgIHwgVVNCX1BPUlRfU1RBVF9DX09WRVJDVVJSRU5UCQlcCiAJICB8IFVTQl9QT1JUX1NUQVRfQ19SRVNFVCkgPDwgMTYpCiAKIC8qCkBAIC0yMTAsNyArMTk1LDYgQEAKIAlpbnQJCXJocG9ydDsKIAlpbnQJCWNoYW5nZWQgPSAwOwogCi0KIAkqZXZlbnRfYml0cyA9IDA7CiAKIAl2aGNpID0gaGNkX3RvX3ZoY2koaGNkKTsKQEAgLTIzMiw3ICsyMTYsNyBAQAogCQl9CiAJfQogCi0JdXNiaXBfdWluZm8oImNoYW5nZWQgJWRcbiIsIGNoYW5nZWQpOworCXByX2luZm8oImNoYW5nZWQgJWRcbiIsIGNoYW5nZWQpOwogCiAJaWYgKGhjZC0+c3RhdGUgPT0gSENfU1RBVEVfU1VTUEVOREVEKQogCQl1c2JfaGNkX3Jlc3VtZV9yb290X2h1YihoY2QpOwpAQCAtMjc4LDEwICsyNjIsOSBAQAogCSAqIHdJbmRleCBzaG93cyB0aGUgcG9ydCBudW1iZXIgYW5kIGJlZ2lucyBmcm9tIDEuCiAJICovCiAJdXNiaXBfZGJnX3ZoY2lfcmgoInR5cGVSZXEgJXggd1ZhbHVlICV4IHdJbmRleCAleFxuIiwgdHlwZVJlcSwgd1ZhbHVlLAotCQkJCQkJCQl3SW5kZXgpOworCQkJICB3SW5kZXgpOwogCWlmICh3SW5kZXggPiBWSENJX05QT1JUUykKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCBwb3J0IG51bWJlciAlZFxuIiwgX19mdW5jX18sCi0JCQkJCQkJCXdJbmRleCk7CisJCXByX2VycigiaW52YWxpZCBwb3J0IG51bWJlciAlZFxuIiwgd0luZGV4KTsKIAlyaHBvcnQgPSAoKF9fdTgpKHdJbmRleCAmIDB4MDBmZikpIC0gMTsKIAogCWR1bSA9IGhjZF90b192aGNpKGhjZCk7CkBAIC0zMTEsNyArMjk0LDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIFVTQl9QT1JUX0ZFQVRfUE9XRVI6CiAJCQl1c2JpcF9kYmdfdmhjaV9yaCgiIENsZWFyUG9ydEZlYXR1cmU6ICIKLQkJCQkJCSJVU0JfUE9SVF9GRUFUX1BPV0VSXG4iKTsKKwkJCQkJICAiVVNCX1BPUlRfRkVBVF9QT1dFUlxuIik7CiAJCQlkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0gPSAwOwogCQkJLyogZHVtLT5hZGRyZXNzID0gMDsgKi8KIAkJCS8qIGR1bS0+aGRldiA9IDA7ICovCkBAIC0zMTksMjMgKzMwMiwyNCBAQAogCQkJYnJlYWs7CiAJCWNhc2UgVVNCX1BPUlRfRkVBVF9DX1JFU0VUOgogCQkJdXNiaXBfZGJnX3ZoY2lfcmgoIiBDbGVhclBvcnRGZWF0dXJlOiAiCi0JCQkJCQkiVVNCX1BPUlRfRkVBVF9DX1JFU0VUXG4iKTsKKwkJCQkJICAiVVNCX1BPUlRfRkVBVF9DX1JFU0VUXG4iKTsKIAkJCXN3aXRjaCAoZHVtLT52ZGV2W3JocG9ydF0uc3BlZWQpIHsKIAkJCWNhc2UgVVNCX1NQRUVEX0hJR0g6CiAJCQkJZHVtLT5wb3J0X3N0YXR1c1tyaHBvcnRdIHw9Ci0JCQkJCQlVU0JfUE9SVF9TVEFUX0hJR0hfU1BFRUQ7CisJCQkJCVVTQl9QT1JUX1NUQVRfSElHSF9TUEVFRDsKIAkJCQlicmVhazsKIAkJCWNhc2UgVVNCX1NQRUVEX0xPVzoKIAkJCQlkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0gfD0KLQkJCQkJCVVTQl9QT1JUX1NUQVRfTE9XX1NQRUVEOworCQkJCQlVU0JfUE9SVF9TVEFUX0xPV19TUEVFRDsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJYnJlYWs7CiAJCQl9CiAJCWRlZmF1bHQ6CiAJCQl1c2JpcF9kYmdfdmhjaV9yaCgiIENsZWFyUG9ydEZlYXR1cmU6IGRlZmF1bHQgJXhcbiIsCi0JCQkJCQkJCXdWYWx1ZSk7CisJCQkJCSAgd1ZhbHVlKTsKIAkJCWR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSAmPSB+KDEgPDwgd1ZhbHVlKTsKKwkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgR2V0SHViRGVzY3JpcHRvcjoKQEAgLTM0OSw4ICszMzMsNyBAQAogCWNhc2UgR2V0UG9ydFN0YXR1czoKIAkJdXNiaXBfZGJnX3ZoY2lfcmgoIiBHZXRQb3J0U3RhdHVzIHBvcnQgJXhcbiIsIHdJbmRleCk7CiAJCWlmICh3SW5kZXggPiBWSENJX05QT1JUUyB8fCB3SW5kZXggPCAxKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnZhbGlkIHBvcnQgbnVtYmVyICVkXG4iLAotCQkJICAgICAgIF9fZnVuY19fLCB3SW5kZXgpOworCQkJcHJfZXJyKCJpbnZhbGlkIHBvcnQgbnVtYmVyICVkXG4iLCB3SW5kZXgpOwogCQkJcmV0dmFsID0gLUVQSVBFOwogCQl9CiAKQEAgLTM2MCw3ICszNDMsNiBAQAogCQkgKiBjb21wbGV0ZSBpdCEhCiAJCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCQlpZiAoZHVtLT5yZXN1bWluZyAmJiB0aW1lX2FmdGVyKGppZmZpZXMsIGR1bS0+cmVfdGltZW91dCkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vdCB5ZXRcbiIsIF9fZnVuY19fKTsKIAkJCWR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSB8PQogCQkJCQkoMSA8PCBVU0JfUE9SVF9GRUFUX0NfU1VTUEVORCk7CiAJCQlkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0gJj0KQEAgLTM3NSwzOSArMzU3LDM4IEBACiAJCX0KIAogCQlpZiAoKGR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSAmICgxIDw8IFVTQl9QT1JUX0ZFQVRfUkVTRVQpKSAhPQotCQkJCTAgJiYgdGltZV9hZnRlcihqaWZmaWVzLCBkdW0tPnJlX3RpbWVvdXQpKSB7CisJCSAgICAwICYmIHRpbWVfYWZ0ZXIoamlmZmllcywgZHVtLT5yZV90aW1lb3V0KSkgewogCQkJZHVtLT5wb3J0X3N0YXR1c1tyaHBvcnRdIHw9Ci0JCQkJCQkoMSA8PCBVU0JfUE9SVF9GRUFUX0NfUkVTRVQpOworCQkJCSgxIDw8IFVTQl9QT1JUX0ZFQVRfQ19SRVNFVCk7CiAJCQlkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0gJj0KLQkJCQkJCX4oMSA8PCBVU0JfUE9SVF9GRUFUX1JFU0VUKTsKKwkJCQl+KDEgPDwgVVNCX1BPUlRfRkVBVF9SRVNFVCk7CiAJCQlkdW0tPnJlX3RpbWVvdXQgPSAwOwogCiAJCQlpZiAoZHVtLT52ZGV2W3JocG9ydF0udWQuc3RhdHVzID09Ci0JCQkJCQkJVkRFVl9TVF9OT1RBU1NJR05FRCkgeworCQkJICAgIFZERVZfU1RfTk9UQVNTSUdORUQpIHsKIAkJCQl1c2JpcF9kYmdfdmhjaV9yaCgiIGVuYWJsZSByaHBvcnQgJWQgIgotCQkJCQkJIihzdGF0dXMgJXUpXG4iLAotCQkJCQkJcmhwb3J0LAotCQkJCQkJZHVtLT52ZGV2W3JocG9ydF0udWQuc3RhdHVzKTsKKwkJCQkJCSAgIihzdGF0dXMgJXUpXG4iLAorCQkJCQkJICByaHBvcnQsCisJCQkJCQkgIGR1bS0+dmRldltyaHBvcnRdLnVkLnN0YXR1cyk7CiAJCQkJZHVtLT5wb3J0X3N0YXR1c1tyaHBvcnRdIHw9Ci0JCQkJCQkJVVNCX1BPUlRfU1RBVF9FTkFCTEU7CisJCQkJCVVTQl9QT1JUX1NUQVRfRU5BQkxFOwogCQkJfQogI2lmIDAKIAkJCWlmIChkdW0tPmRyaXZlcikgewotCiAJCQkJZHVtLT5wb3J0X3N0YXR1c1tyaHBvcnRdIHw9Ci0JCQkJCQkJVVNCX1BPUlRfU1RBVF9FTkFCTEU7CisJCQkJCVVTQl9QT1JUX1NUQVRfRU5BQkxFOwogCQkJCS8qIGdpdmUgaXQgdGhlIGJlc3Qgc3BlZWQgd2UgYWdyZWUgb24gKi8KIAkJCQlkdW0tPmdhZGdldC5zcGVlZCA9IGR1bS0+ZHJpdmVyLT5zcGVlZDsKIAkJCQlkdW0tPmdhZGdldC5lcDAtPm1heHBhY2tldCA9IDY0OwogCQkJCXN3aXRjaCAoZHVtLT5nYWRnZXQuc3BlZWQpIHsKIAkJCQljYXNlIFVTQl9TUEVFRF9ISUdIOgogCQkJCQlkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0gfD0KLQkJCQkJVVNCX1BPUlRfU1RBVF9ISUdIX1NQRUVEOworCQkJCQkJVVNCX1BPUlRfU1RBVF9ISUdIX1NQRUVEOwogCQkJCQlicmVhazsKIAkJCQljYXNlIFVTQl9TUEVFRF9MT1c6CiAJCQkJCWR1bS0+Z2FkZ2V0LmVwMC0+bWF4cGFja2V0ID0gODsKIAkJCQkJZHVtLT5wb3J0X3N0YXR1c1tyaHBvcnRdIHw9Ci0JCQkJCVVTQl9QT1JUX1NUQVRfTE9XX1NQRUVEOworCQkJCQkJVVNCX1BPUlRfU1RBVF9MT1dfU1BFRUQ7CiAJCQkJCWJyZWFrOwogCQkJCWRlZmF1bHQ6CiAJCQkJCWR1bS0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX0ZVTEw7CkBAIC00MTUsMTQgKzM5NiwxMiBAQAogCQkJCX0KIAkJCX0KICNlbmRpZgotCiAJCX0KIAkJKCh1MTYgKikgYnVmKVswXSA9IGNwdV90b19sZTE2KGR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSk7Ci0JCSgodTE2ICopIGJ1ZilbMV0gPQotCQkJCWNwdV90b19sZTE2KGR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSA+PiAxNik7CisJCSgodTE2ICopIGJ1ZilbMV0gPSBjcHVfdG9fbGUxNihkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0gPj4gMTYpOwogCiAJCXVzYmlwX2RiZ192aGNpX3JoKCIgR2V0UG9ydFN0YXR1cyBieWUgJXggJXhcbiIsICgodTE2ICopYnVmKVswXSwKLQkJCQkJCQkoKHUxNiAqKWJ1ZilbMV0pOworCQkJCSAgKCh1MTYgKilidWYpWzFdKTsKIAkJYnJlYWs7CiAJY2FzZSBTZXRIdWJGZWF0dXJlOgogCQl1c2JpcF9kYmdfdmhjaV9yaCgiIFNldEh1YkZlYXR1cmVcbiIpOwpAQCAtNDMyLDExICs0MTEsMTAgQEAKIAkJc3dpdGNoICh3VmFsdWUpIHsKIAkJY2FzZSBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ6CiAJCQl1c2JpcF9kYmdfdmhjaV9yaCgiIFNldFBvcnRGZWF0dXJlOiAiCi0JCQkJCSJVU0JfUE9SVF9GRUFUX1NVU1BFTkRcbiIpOwotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogbm90IHlldFxuIiwgX19mdW5jX18pOworCQkJCQkgICJVU0JfUE9SVF9GRUFUX1NVU1BFTkRcbiIpOwogI2lmIDAKIAkJCWR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSB8PQotCQkJCQkJKDEgPDwgVVNCX1BPUlRfRkVBVF9TVVNQRU5EKTsKKwkJCQkoMSA8PCBVU0JfUE9SVF9GRUFUX1NVU1BFTkQpOwogCQkJaWYgKGR1bS0+ZHJpdmVyLT5zdXNwZW5kKSB7CiAJCQkJc3Bpbl91bmxvY2soJmR1bS0+bG9jayk7CiAJCQkJZHVtLT5kcml2ZXItPnN1c3BlbmQoJmR1bS0+Z2FkZ2V0KTsKQEAgLTQ0NiwxMyArNDI0LDEzIEBACiAJCQlicmVhazsKIAkJY2FzZSBVU0JfUE9SVF9GRUFUX1JFU0VUOgogCQkJdXNiaXBfZGJnX3ZoY2lfcmgoIiBTZXRQb3J0RmVhdHVyZTogIgotCQkJCQkJIlVTQl9QT1JUX0ZFQVRfUkVTRVRcbiIpOworCQkJCQkgICJVU0JfUE9SVF9GRUFUX1JFU0VUXG4iKTsKIAkJCS8qIGlmIGl0J3MgYWxyZWFkeSBydW5uaW5nLCBkaXNjb25uZWN0IGZpcnN0ICovCiAJCQlpZiAoZHVtLT5wb3J0X3N0YXR1c1tyaHBvcnRdICYgVVNCX1BPUlRfU1RBVF9FTkFCTEUpIHsKIAkJCQlkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0gJj0KLQkJCQkJCX4oVVNCX1BPUlRfU1RBVF9FTkFCTEUgfAotCQkJCQkJICBVU0JfUE9SVF9TVEFUX0xPV19TUEVFRCB8Ci0JCQkJCQkgIFVTQl9QT1JUX1NUQVRfSElHSF9TUEVFRCk7CisJCQkJCX4oVVNCX1BPUlRfU1RBVF9FTkFCTEUgfAorCQkJCQkgIFVTQl9QT1JUX1NUQVRfTE9XX1NQRUVEIHwKKwkJCQkJICBVU0JfUE9SVF9TVEFUX0hJR0hfU1BFRUQpOwogI2lmIDAKIAkJCQlpZiAoZHVtLT5kcml2ZXIpIHsKIAkJCQkJZGV2X2RiZyhoYXJkd2FyZSwgImRpc2Nvbm5lY3RcbiIpOwpAQCAtNDY4LDEzICs0NDYsMTQgQEAKIAkJCS8qIEZBTExUSFJPVUdIICovCiAJCWRlZmF1bHQ6CiAJCQl1c2JpcF9kYmdfdmhjaV9yaCgiIFNldFBvcnRGZWF0dXJlOiBkZWZhdWx0ICVkXG4iLAotCQkJCQkJCQl3VmFsdWUpOworCQkJCQkgIHdWYWx1ZSk7CiAJCQlkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0gfD0gKDEgPDwgd1ZhbHVlKTsKKwkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZGVmYXVsdDogbm8gc3VjaCByZXF1ZXN0XG4iLCBfX2Z1bmNfXyk7CisJCXByX2VycigiZGVmYXVsdDogbm8gc3VjaCByZXF1ZXN0XG4iKTsKIAkJLyogZGV2X2RiZyAoaGFyZHdhcmUsCiAJCSAqCQkiaHViIGNvbnRyb2wgcmVxJTA0eCB2JTA0eCBpJTA0eCBsJWRcbiIsCiAJCSAqCQl0eXBlUmVxLCB3VmFsdWUsIHdJbmRleCwgd0xlbmd0aCk7ICovCkBAIC00ODQsNyArNDYzLDcgQEAKIAl9CiAKIAlpZiAodXNiaXBfZGJnX2ZsYWdfdmhjaV9yaCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAicG9ydCAlZFxuIiwgcmhwb3J0KTsKKwkJcHJfZGVidWcoInBvcnQgJWRcbiIsIHJocG9ydCk7CiAJCWR1bXBfcG9ydF9zdGF0dXMocHJldl9wb3J0X3N0YXR1c1tyaHBvcnRdKTsKIAkJZHVtcF9wb3J0X3N0YXR1cyhkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0pOwogCX0KQEAgLTQ5NSwxMCArNDc0LDYgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQogc3RhdGljIHN0cnVjdCB2aGNpX2RldmljZSAqZ2V0X3ZkZXYoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCiB7CiAJaW50IGk7CkBAIC01MjAsNyArNDk1LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWc7CiAKIAlpZiAoIXZkZXYpIHsKLQkJZXJyKCJjb3VsZCBub3QgZ2V0IHZpcnR1YWwgZGV2aWNlIik7CisJCXByX2VycigiY291bGQgbm90IGdldCB2aXJ0dWFsIGRldmljZSIpOwogCQkvKiBCVUcoKTsgKi8KIAkJcmV0dXJuOwogCX0KQEAgLTUzOCwxNCArNTEzLDEzIEBACiAKIAlwcml2LT5zZXFudW0gPSBhdG9taWNfaW5jX3JldHVybigmdGhlX2NvbnRyb2xsZXItPnNlcW51bSk7CiAJaWYgKHByaXYtPnNlcW51bSA9PSAweGZmZmYpCi0JCXVzYmlwX3VpbmZvKCJzZXFudW0gbWF4XG4iKTsKKwkJZGV2X2luZm8oJnVyYi0+ZGV2LT5kZXYsICJzZXFudW0gbWF4XG4iKTsKIAogCXByaXYtPnZkZXYgPSB2ZGV2OwogCXByaXYtPnVyYiA9IHVyYjsKIAogCXVyYi0+aGNwcml2ID0gKHZvaWQgKikgcHJpdjsKIAotCiAJbGlzdF9hZGRfdGFpbCgmcHJpdi0+bGlzdCwgJnZkZXYtPnByaXZfdHgpOwogCiAJd2FrZV91cCgmdmRldi0+d2FpdHFfdHgpOwpAQCAtNTYxLDcgKzUzNSw3IEBACiAJc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2OwogCiAJdXNiaXBfZGJnX3ZoY2lfaGMoImVudGVyLCB1c2JfaGNkICVwIHVyYiAlcCBtZW1fZmxhZ3MgJWRcbiIsCi0JCSAgICBoY2QsIHVyYiwgbWVtX2ZsYWdzKTsKKwkJCSAgaGNkLCB1cmIsIG1lbV9mbGFncyk7CiAKIAkvKiBwYXRjaCB0byB1c2Jfc2dfaW5pdCgpIGlzIGluIDIuNS42MCAqLwogCUJVR19PTighdXJiLT50cmFuc2Zlcl9idWZmZXIgJiYgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKQEAgLTU3OCw4ICs1NTIsOSBAQAogCiAJLyogcmVmdXNlIGVucXVldWUgZm9yIGRlYWQgY29ubmVjdGlvbiAqLwogCXNwaW5fbG9jaygmdmRldi0+dWQubG9jayk7Ci0JaWYgKHZkZXYtPnVkLnN0YXR1cyA9PSBWREVWX1NUX05VTEwgfHwgdmRldi0+dWQuc3RhdHVzID09IFZERVZfU1RfRVJST1IpIHsKLQkJdXNiaXBfdWVycigiZW5xdWV1ZSBmb3IgaW5hY3RpdmUgcG9ydCAlZFxuIiwgdmRldi0+cmhwb3J0KTsKKwlpZiAodmRldi0+dWQuc3RhdHVzID09IFZERVZfU1RfTlVMTCB8fAorCSAgICB2ZGV2LT51ZC5zdGF0dXMgPT0gVkRFVl9TVF9FUlJPUikgeworCQlkZXZfZXJyKGRldiwgImVucXVldWUgZm9yIGluYWN0aXZlIHBvcnQgJWRcbiIsIHZkZXYtPnJocG9ydCk7CiAJCXNwaW5fdW5sb2NrKCZ2ZGV2LT51ZC5sb2NrKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGhlX2NvbnRyb2xsZXItPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC01OTksMTEgKzU3NCwxMCBAQAogCSAqICAyLiBTZXRfQWRkcmVzcyByZXF1ZXN0IHRvIERldkFkZHIoMCkgRW5kUG9pbnQoMCkKIAkgKgogCSAqLwotCiAJaWYgKHVzYl9waXBlZGV2aWNlKHVyYi0+cGlwZSkgPT0gMCkgewogCQlfX3U4IHR5cGUgPSB1c2JfcGlwZXR5cGUodXJiLT5waXBlKTsKIAkJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybHJlcSA9Ci0JCQkJKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKikgdXJiLT5zZXR1cF9wYWNrZXQ7CisJCQkoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKSB1cmItPnNldHVwX3BhY2tldDsKIAogCQlpZiAodHlwZSAhPSBQSVBFX0NPTlRST0wgfHwgIWN0cmxyZXEpIHsKIAkJCWRldl9lcnIoZGV2LCAiaW52YWxpZCByZXF1ZXN0IHRvIGRldm51bSAwXG4iKTsKQEAgLTYzNiw4ICs2MTAsOCBAQAogCQljYXNlIFVTQl9SRVFfR0VUX0RFU0NSSVBUT1I6CiAJCQlpZiAoY3RybHJlcS0+d1ZhbHVlID09IChVU0JfRFRfREVWSUNFIDw8IDgpKQogCQkJCXVzYmlwX2RiZ192aGNpX2hjKCJOb3QgeWV0PzogIgotCQkJCQkJIkdldF9EZXNjcmlwdG9yIHRvIGRldmljZSAwICIKLQkJCQkJCSIoZ2V0IG1heCBwaXBlIHNpemUpXG4iKTsKKwkJCQkJCSAgIkdldF9EZXNjcmlwdG9yIHRvIGRldmljZSAwICIKKwkJCQkJCSAgIihnZXQgbWF4IHBpcGUgc2l6ZSlcbiIpOwogCiAJCQlpZiAodmRldi0+dWRldikKIAkJCQl1c2JfcHV0X2Rldih2ZGV2LT51ZGV2KTsKQEAgLTY1Nyw3ICs2MzEsNiBAQAogCiBvdXQ6CiAJdmhjaV90eF91cmIodXJiKTsKLQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoZV9jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKQEAgLTcyNCw4ICs2OTcsNyBAQAogCXN0cnVjdCB2aGNpX3ByaXYgKnByaXY7CiAJc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2OwogCi0JdXNiaXBfdWluZm8oInZoY2lfaGNkOiBkZXF1ZXVlIGEgdXJiICVwXG4iLCB1cmIpOwotCisJcHJfaW5mbygiZGVxdWV1ZSBhIHVyYiAlcFxuIiwgdXJiKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0aGVfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOwogCkBAIC03NTUsOCArNzI3LDcgQEAKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmdmRldi0+cHJpdl9sb2NrLCBmbGFnczIpOwogCi0JCXVzYmlwX3VpbmZvKCJ2aGNpX2hjZDogZGV2aWNlICVwIHNlZW1zIHRvIGJlIGRpc2Nvbm5lY3RlZFxuIiwKLQkJCQkJCQkJCXZkZXYpOworCQlwcl9pbmZvKCJkZXZpY2UgJXAgc2VlbXMgdG8gYmUgZGlzY29ubmVjdGVkXG4iLCB2ZGV2KTsKIAkJbGlzdF9kZWwoJnByaXYtPmxpc3QpOwogCQlrZnJlZShwcml2KTsKIAkJdXJiLT5oY3ByaXYgPSBOVUxMOwpAQCAtNzY4LDE0ICs3MzksMTMgQEAKIAkJICogdmhjaV9yeCB3aWxsIHJlY2VpdmUgUkVUX1VOTElOSyBhbmQgZ2l2ZSBiYWNrIHRoZSBVUkIuCiAJCSAqIE90aGVyd2lzZSwgd2UgZ2l2ZSBiYWNrIGl0IGhlcmUuCiAJCSAqLwotCQl1c2JpcF91aW5mbygidmhjaV9oY2Q6IHZoY2lfdXJiX2RlcXVldWUoKSBnaXZlcyBiYWNrIHVyYiAlcFxuIiwKLQkJCQkJCQkJCXVyYik7CisJCXByX2luZm8oImdpdmVzIGJhY2sgdXJiICVwXG4iLCB1cmIpOwogCiAJCXVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKGhjZCwgdXJiKTsKIAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aGVfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOwogCQl1c2JfaGNkX2dpdmViYWNrX3VyYih2aGNpX3RvX2hjZCh0aGVfY29udHJvbGxlciksIHVyYiwKLQkJCQkJCQkJdXJiLT5zdGF0dXMpOworCQkJCSAgICAgdXJiLT5zdGF0dXMpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmdGhlX2NvbnRyb2xsZXItPmxvY2ssIGZsYWdzKTsKIAogCX0gZWxzZSB7CkBAIC03ODgsNyArNzU4LDcgQEAKIAkJLyogc2V0dXAgQ01EX1VOTElOSyBwZHUgKi8KIAkJdW5saW5rID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZoY2lfdW5saW5rKSwgR0ZQX0FUT01JQyk7CiAJCWlmICghdW5saW5rKSB7Ci0JCQl1c2JpcF91ZXJyKCJtYWxsb2MgdmhjaV91bmxpbmtcbiIpOworCQkJcHJfZXJyKCJtYWxsb2MgdmhjaV91bmxpbmtcbiIpOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmRldi0+cHJpdl9sb2NrLCBmbGFnczIpOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGhlX2NvbnRyb2xsZXItPmxvY2ssIGZsYWdzKTsKIAkJCXVzYmlwX2V2ZW50X2FkZCgmdmRldi0+dWQsIFZERVZfRVZFTlRfRVJST1JfTUFMTE9DKTsKQEAgLTc5NywxMiArNzY3LDExIEBACiAKIAkJdW5saW5rLT5zZXFudW0gPSBhdG9taWNfaW5jX3JldHVybigmdGhlX2NvbnRyb2xsZXItPnNlcW51bSk7CiAJCWlmICh1bmxpbmstPnNlcW51bSA9PSAweGZmZmYpCi0JCQl1c2JpcF91aW5mbygic2VxbnVtIG1heFxuIik7CisJCQlwcl9pbmZvKCJzZXFudW0gbWF4XG4iKTsKIAogCQl1bmxpbmstPnVubGlua19zZXFudW0gPSBwcml2LT5zZXFudW07CiAKLQkJdXNiaXBfdWluZm8oInZoY2lfaGNkOiBkZXZpY2UgJXAgc2VlbXMgdG8gYmUgc3RpbGwgY29ubmVjdGVkXG4iLAotCQkJCQkJCQkJdmRldik7CisJCXByX2luZm8oImRldmljZSAlcCBzZWVtcyB0byBiZSBzdGlsbCBjb25uZWN0ZWRcbiIsIHZkZXYpOwogCiAJCS8qIHNlbmQgY21kX3VubGluayBhbmQgdHJ5IHRvIGNhbmNlbCB0aGUgcGVuZGluZyBVUkIgaW4gdGhlCiAJCSAqIHBlZXIgKi8KQEAgLTgyNSw3ICs3OTQsNyBAQAogCXNwaW5fbG9jaygmdmRldi0+cHJpdl9sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1bmxpbmssIHRtcCwgJnZkZXYtPnVubGlua190eCwgbGlzdCkgewotCQl1c2JpcF91aW5mbygidW5saW5rIGNsZWFudXAgdHggJWx1XG4iLCB1bmxpbmstPnVubGlua19zZXFudW0pOworCQlwcl9pbmZvKCJ1bmxpbmsgY2xlYW51cCB0eCAlbHVcbiIsIHVubGluay0+dW5saW5rX3NlcW51bSk7CiAJCWxpc3RfZGVsKCZ1bmxpbmstPmxpc3QpOwogCQlrZnJlZSh1bmxpbmspOwogCX0KQEAgLTgzNCwxMiArODAzLDEyIEBACiAJCXN0cnVjdCB1cmIgKnVyYjsKIAogCQkvKiBnaXZlIGJhY2sgVVJCIG9mIHVuYW5zd2VyZWQgdW5saW5rIHJlcXVlc3QgKi8KLQkJdXNiaXBfdWluZm8oInVubGluayBjbGVhbnVwIHJ4ICVsdVxuIiwgdW5saW5rLT51bmxpbmtfc2VxbnVtKTsKKwkJcHJfaW5mbygidW5saW5rIGNsZWFudXAgcnggJWx1XG4iLCB1bmxpbmstPnVubGlua19zZXFudW0pOwogCiAJCXVyYiA9IHBpY2t1cF91cmJfYW5kX2ZyZWVfcHJpdih2ZGV2LCB1bmxpbmstPnVubGlua19zZXFudW0pOwogCQlpZiAoIXVyYikgewotCQkJdXNiaXBfdWluZm8oInRoZSB1cmIgKHNlcW51bSAlbHUpIHdhcyBhbHJlYWR5IGdpdmVuIGJhY2tcbiIsCi0JCQkJCQkJdW5saW5rLT51bmxpbmtfc2VxbnVtKTsKKwkJCXByX2luZm8oInRoZSB1cmIgKHNlcW51bSAlbHUpIHdhcyBhbHJlYWR5IGdpdmVuIGJhY2tcbiIsCisJCQkJdW5saW5rLT51bmxpbmtfc2VxbnVtKTsKIAkJCWxpc3RfZGVsKCZ1bmxpbmstPmxpc3QpOwogCQkJa2ZyZWUodW5saW5rKTsKIAkJCWNvbnRpbnVlOwpAQCAtODUxLDcgKzgyMCw4IEBACiAJCXVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKHZoY2lfdG9faGNkKHRoZV9jb250cm9sbGVyKSwgdXJiKTsKIAkJc3Bpbl91bmxvY2soJnRoZV9jb250cm9sbGVyLT5sb2NrKTsKIAotCQl1c2JfaGNkX2dpdmViYWNrX3VyYih2aGNpX3RvX2hjZCh0aGVfY29udHJvbGxlciksIHVyYiwgdXJiLT5zdGF0dXMpOworCQl1c2JfaGNkX2dpdmViYWNrX3VyYih2aGNpX3RvX2hjZCh0aGVfY29udHJvbGxlciksIHVyYiwKKwkJCQkgICAgIHVyYi0+c3RhdHVzKTsKIAogCQlsaXN0X2RlbCgmdW5saW5rLT5saXN0KTsKIAkJa2ZyZWUodW5saW5rKTsKQEAgLTg3MSw3ICs4NDEsNyBAQAogCiAJLyogbmVlZCB0aGlzPyBzZWUgc3R1Yl9kZXYuYyAqLwogCWlmICh1ZC0+dGNwX3NvY2tldCkgewotCQl1c2JpcF91ZGJnKCJzaHV0ZG93biB0Y3Bfc29ja2V0ICVwXG4iLCB1ZC0+dGNwX3NvY2tldCk7CisJCXByX2RlYnVnKCJzaHV0ZG93biB0Y3Bfc29ja2V0ICVwXG4iLCB1ZC0+dGNwX3NvY2tldCk7CiAJCWtlcm5lbF9zb2NrX3NodXRkb3duKHVkLT50Y3Bfc29ja2V0LCBTSFVUX1JEV1IpOwogCX0KIApAQCAtODgxLDE0ICs4NTEsMTQgQEAKIAlpZiAodmRldi0+dWQudGNwX3R4KQogCQlrdGhyZWFkX3N0b3AodmRldi0+dWQudGNwX3R4KTsKIAotCXVzYmlwX3VpbmZvKCJzdG9wIHRocmVhZHNcbiIpOworCXByX2luZm8oInN0b3AgdGhyZWFkc1xuIik7CiAKIAkvKiBhY3RpdmUgY29ubmVjdGlvbiBpcyBjbG9zZWQgKi8KIAlpZiAodmRldi0+dWQudGNwX3NvY2tldCAhPSBOVUxMKSB7CiAJCXNvY2tfcmVsZWFzZSh2ZGV2LT51ZC50Y3Bfc29ja2V0KTsKIAkJdmRldi0+dWQudGNwX3NvY2tldCA9IE5VTEw7CiAJfQotCXVzYmlwX3VpbmZvKCJyZWxlYXNlIHNvY2tldFxuIik7CisJcHJfaW5mbygicmVsZWFzZSBzb2NrZXRcbiIpOwogCiAJdmhjaV9kZXZpY2VfdW5saW5rX2NsZWFudXAodmRldik7CiAKQEAgLTkxNCw3ICs4ODQsNyBAQAogCSAqLwogCXJoX3BvcnRfZGlzY29ubmVjdCh2ZGV2LT5yaHBvcnQpOwogCi0JdXNiaXBfdWluZm8oImRpc2Nvbm5lY3QgZGV2aWNlXG4iKTsKKwlwcl9pbmZvKCJkaXNjb25uZWN0IGRldmljZVxuIik7CiB9CiAKIApAQCAtOTMyLDcgKzkwMiw2IEBACiAJdmRldi0+dWRldiA9IE5VTEw7CiAKIAl1ZC0+dGNwX3NvY2tldCA9IE5VTEw7Ci0KIAl1ZC0+c3RhdHVzID0gVkRFVl9TVF9OVUxMOwogCiAJc3Bpbl91bmxvY2soJnVkLT5sb2NrKTsKQEAgLTk0MSw5ICs5MTAsNyBAQAogc3RhdGljIHZvaWQgdmhjaV9kZXZpY2VfdW51c2FibGUoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpCiB7CiAJc3Bpbl9sb2NrKCZ1ZC0+bG9jayk7Ci0KIAl1ZC0+c3RhdHVzID0gVkRFVl9TVF9FUlJPUjsKLQogCXNwaW5fdW5sb2NrKCZ1ZC0+bG9jayk7CiB9CiAKQEAgLTk3Miw5ICs5MzksNiBAQAogCXVzYmlwX3N0YXJ0X2VoKCZ2ZGV2LT51ZCk7CiB9CiAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQogc3RhdGljIGludCB2aGNpX3N0YXJ0KHN0cnVjdCB1c2JfaGNkICpoY2QpCiB7CiAJc3RydWN0IHZoY2lfaGNkICp2aGNpID0gaGNkX3RvX3ZoY2koaGNkKTsKQEAgLTk4Myw3ICs5NDcsNiBAQAogCiAJdXNiaXBfZGJnX3ZoY2lfaGMoImVudGVyIHZoY2lfc3RhcnRcbiIpOwogCi0KIAkvKiBpbml0aWFsaXplIHByaXZhdGUgZGF0YSBvZiB1c2JfaGNkICovCiAKIAlmb3IgKHJocG9ydCA9IDA7IHJocG9ydCA8IFZIQ0lfTlBPUlRTOyByaHBvcnQrKykgewpAQCAtOTk1LDE3ICs5NTgsMTQgQEAKIAlhdG9taWNfc2V0KCZ2aGNpLT5zZXFudW0sIDApOwogCXNwaW5fbG9ja19pbml0KCZ2aGNpLT5sb2NrKTsKIAotCi0KIAloY2QtPnBvd2VyX2J1ZGdldCA9IDA7IC8qIG5vIGxpbWl0ICovCiAJaGNkLT5zdGF0ZSAgPSBIQ19TVEFURV9SVU5OSU5HOwogCWhjZC0+dXNlc19uZXdfcG9sbGluZyA9IDE7CiAKLQogCS8qIHZoY2lfaGNkIGlzIG5vdyByZWFkeSB0byBiZSBjb250cm9sbGVkIHRocm91Z2ggc3lzZnMgKi8KIAllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnZoY2lfZGV2KHZoY2kpLT5rb2JqLCAmZGV2X2F0dHJfZ3JvdXApOwogCWlmIChlcnIpIHsKLQkJdXNiaXBfdWVycigiY3JlYXRlIHN5c2ZzIGZpbGVzXG4iKTsKKwkJcHJfZXJyKCJjcmVhdGUgc3lzZnMgZmlsZXNcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtMTAxOSw3ICs5NzksNiBAQAogCiAJdXNiaXBfZGJnX3ZoY2lfaGMoInN0b3AgVkhDSSBjb250cm9sbGVyXG4iKTsKIAotCiAJLyogMS4gcmVtb3ZlIHRoZSB1c2VybGFuZCBpbnRlcmZhY2Ugb2YgdmhjaV9oY2QgKi8KIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnZoY2lfZGV2KHZoY2kpLT5rb2JqLCAmZGV2X2F0dHJfZ3JvdXApOwogCkBAIC0xMDMwLDIwICs5ODksMTQgQEAKIAkJdXNiaXBfZXZlbnRfYWRkKCZ2ZGV2LT51ZCwgVkRFVl9FVkVOVF9SRU1PVkVEKTsKIAkJdXNiaXBfc3RvcF9laCgmdmRldi0+dWQpOwogCX0KLQotCi0JdXNiaXBfdWluZm8oInZoY2lfc3RvcCBkb25lXG4iKTsKIH0KIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQogc3RhdGljIGludCB2aGNpX2dldF9mcmFtZV9udW1iZXIoc3RydWN0IHVzYl9oY2QgKmhjZCkKIHsKLQl1c2JpcF91ZXJyKCJOb3QgeWV0IGltcGxlbWVudGVkXG4iKTsKKwlwcl9lcnIoIk5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIpOwogCXJldHVybiAwOwogfQogCi0KICNpZmRlZiBDT05GSUdfUE0KIAogLyogRklYTUU6IHN1c3BlbmQvcmVzdW1lICovCkBAIC0xMDkxLDggKzEwNDQsNiBAQAogI2RlZmluZSB2aGNpX2J1c19yZXN1bWUgICAgICAgTlVMTAogI2VuZGlmCiAKLQotCiBzdGF0aWMgc3RydWN0IGhjX2RyaXZlciB2aGNpX2hjX2RyaXZlciA9IHsKIAkuZGVzY3JpcHRpb24JPSBkcml2ZXJfbmFtZSwKIAkucHJvZHVjdF9kZXNjCT0gZHJpdmVyX2Rlc2MsCkBAIC0xMTE5LDggKzEwNzAsNiBAQAogCXN0cnVjdCB1c2JfaGNkCQkqaGNkOwogCWludAkJCXJldDsKIAotCXVzYmlwX3VpbmZvKCJwcm92aW5nLi4uXG4iKTsKLQogCXVzYmlwX2RiZ192aGNpX2hjKCJuYW1lICVzIGlkICVkXG4iLCBwZGV2LT5uYW1lLCBwZGV2LT5pZCk7CiAKIAkvKiB3aWxsIGJlIHJlbW92ZWQgKi8KQEAgLTExMzUsNyArMTA4NCw3IEBACiAJICovCiAJaGNkID0gdXNiX2NyZWF0ZV9oY2QoJnZoY2lfaGNfZHJpdmVyLCAmcGRldi0+ZGV2LCBkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CiAJaWYgKCFoY2QpIHsKLQkJdXNiaXBfdWVycigiY3JlYXRlIGhjZCBmYWlsZWRcbiIpOworCQlwcl9lcnIoImNyZWF0ZSBoY2QgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWhjZC0+aGFzX3R0ID0gMTsKQEAgLTExNDksMTggKzEwOTgsMTYgQEAKIAkgKi8KIAlyZXQgPSB1c2JfYWRkX2hjZChoY2QsIDAsIDApOwogCWlmIChyZXQgIT0gMCkgewotCQl1c2JpcF91ZXJyKCJ1c2JfYWRkX2hjZCBmYWlsZWQgJWRcbiIsIHJldCk7CisJCXByX2VycigidXNiX2FkZF9oY2QgZmFpbGVkICVkXG4iLCByZXQpOwogCQl1c2JfcHV0X2hjZChoY2QpOwogCQl0aGVfY29udHJvbGxlciA9IE5VTEw7CiAJCXJldHVybiByZXQ7CiAJfQogCi0KIAl1c2JpcF9kYmdfdmhjaV9oYygiYnllXG4iKTsKIAlyZXR1cm4gMDsKIH0KIAotCiBzdGF0aWMgaW50IHZoY2lfaGNkX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCB1c2JfaGNkCSpoY2Q7CkBAIC0xMTc4LDEyICsxMTI1LDkgQEAKIAl1c2JfcHV0X2hjZChoY2QpOwogCXRoZV9jb250cm9sbGVyID0gTlVMTDsKIAotCiAJcmV0dXJuIDA7CiB9CiAKLQotCiAjaWZkZWYgQ09ORklHX1BNCiAKIC8qIHdoYXQgc2hvdWxkIGhhcHBlbiBmb3IgVVNCL0lQIHVuZGVyIHN1c3BlbmQvcmVzdW1lPyAqLwpAQCAtMTE5NCwyNSArMTEzOCwyMyBAQAogCWludCBjb25uZWN0ZWQgPSAwOwogCWludCByZXQgPSAwOwogCi0JZGV2X2RiZygmcGRldi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKLQogCWhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJc3Bpbl9sb2NrKCZ0aGVfY29udHJvbGxlci0+bG9jayk7CiAKIAlmb3IgKHJocG9ydCA9IDA7IHJocG9ydCA8IFZIQ0lfTlBPUlRTOyByaHBvcnQrKykKIAkJaWYgKHRoZV9jb250cm9sbGVyLT5wb3J0X3N0YXR1c1tyaHBvcnRdICYKLQkJCQkJCVVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTikKKwkJICAgIFVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTikKIAkJCWNvbm5lY3RlZCArPSAxOwogCiAJc3Bpbl91bmxvY2soJnRoZV9jb250cm9sbGVyLT5sb2NrKTsKIAogCWlmIChjb25uZWN0ZWQgPiAwKSB7Ci0JCXVzYmlwX3VpbmZvKCJXZSBoYXZlICVkIGFjdGl2ZSBjb25uZWN0aW9uJXMuIERvIG5vdCBzdXNwZW5kLlxuIiwKLQkJCQljb25uZWN0ZWQsIChjb25uZWN0ZWQgPT0gMSA/ICIiIDogInMiKSk7CisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJXZSBoYXZlICVkIGFjdGl2ZSBjb25uZWN0aW9uJXMuIERvIG5vdCAiCisJCQkgInN1c3BlbmQuXG4iLCBjb25uZWN0ZWQsIChjb25uZWN0ZWQgPT0gMSA/ICIiIDogInMiKSk7CiAJCXJldCA9ICAtRUJVU1k7CiAJfSBlbHNlIHsKLQkJdXNiaXBfdWluZm8oInN1c3BlbmQgdmhjaV9oY2QiKTsKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgInN1c3BlbmQgdmhjaV9oY2QiKTsKIAkJY2xlYXJfYml0KEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUsICZoY2QtPmZsYWdzKTsKIAl9CiAKQEAgLTEyMzksNyArMTE4MSw2IEBACiAKICNlbmRpZgogCi0KIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHZoY2lfZHJpdmVyID0gewogCS5wcm9iZQk9IHZoY2lfaGNkX3Byb2JlLAogCS5yZW1vdmUJPSBfX2RldmV4aXRfcCh2aGNpX2hjZF9yZW1vdmUpLApAQCAtMTI1MSw4ICsxMTkyLDYgQEAKIAl9LAogfTsKIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQogLyoKICAqIFRoZSBWSENJICdkZXZpY2UnIGlzICd2aXJ0dWFsJzsgbm90IGEgcmVhbCBwbHVnJnBsYXkgaGFyZHdhcmUuCiAgKiBXZSBuZWVkIHRvIGFkZCB0aGlzIHZpcnR1YWwgZGV2aWNlIGFzIGEgcGxhdGZvcm0gZGV2aWNlIGFyYml0cmFyaWx5OgpAQCAtMTI3NywxMyArMTIxNiw5IEBACiB7CiAJaW50IHJldDsKIAotCXVzYmlwX2RiZ192aGNpX2hjKCJlbnRlclxuIik7CiAJaWYgKHVzYl9kaXNhYmxlZCgpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogJXMsICVzXG4iLCBkcml2ZXJfbmFtZSwKLQkgICAgICAgRFJJVkVSX1ZFUlNJT04pOwotCiAJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ2aGNpX2RyaXZlcik7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX2RyaXZlcl9yZWdpc3RlcjsKQEAgLTEyOTIsMjYgKzEyMjcsMjUgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJfcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyOwogCi0JdXNiaXBfZGJnX3ZoY2lfaGMoImJ5ZVxuIik7CisJcHJfaW5mbyhEUklWRVJfREVTQyAiIHYiIFVTQklQX1ZFUlNJT04gIlxuIik7CiAJcmV0dXJuIHJldDsKIAotCS8qIGVycm9yIG9jY3VycmVkICovCiBlcnJfcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyOgogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ2aGNpX2RyaXZlcik7Ci0KIGVycl9kcml2ZXJfcmVnaXN0ZXI6Ci0JdXNiaXBfZGJnX3ZoY2lfaGMoImJ5ZVxuIik7CiAJcmV0dXJuIHJldDsKIH0KLW1vZHVsZV9pbml0KHZoY2lfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB2aGNpX2NsZWFudXAodm9pZCkKIHsKLQl1c2JpcF9kYmdfdmhjaV9oYygiZW50ZXJcbiIpOwotCiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJnRoZV9wZGV2KTsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdmhjaV9kcml2ZXIpOwotCi0JdXNiaXBfZGJnX3ZoY2lfaGMoImJ5ZVxuIik7CiB9CisKK21vZHVsZV9pbml0KHZoY2lfaW5pdCk7CiBtb2R1bGVfZXhpdCh2aGNpX2NsZWFudXApOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKFVTQklQX1ZFUlNJT04pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3J4LmMKaW5kZXggMmZmYzk2YS4uZTQyY2U5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfcnguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9yeC5jCkBAIC0xNywxNiArMTcsMTQgQEAKICAqIFVTQS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlICJ1c2JpcF9jb21tb24uaCIKICNpbmNsdWRlICJ2aGNpLmgiCiAKLQogLyogZ2V0IFVSQiBmcm9tIHRyYW5zbWl0dGVkIHVyYiBxdWV1ZS4gY2FsbGVyIG11c3QgaG9sZCB2ZGV2LT5wcml2X2xvY2sgKi8KLXN0cnVjdCB1cmIgKnBpY2t1cF91cmJfYW5kX2ZyZWVfcHJpdihzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYsCi0JCQkJCSAgICBfX3UzMiBzZXFudW0pCitzdHJ1Y3QgdXJiICpwaWNrdXBfdXJiX2FuZF9mcmVlX3ByaXYoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LCBfX3UzMiBzZXFudW0pCiB7CiAJc3RydWN0IHZoY2lfcHJpdiAqcHJpdiwgKnRtcDsKIAlzdHJ1Y3QgdXJiICp1cmIgPSBOVUxMOwpAQCAtMzgsMTIgKzM2LDEyIEBACiAJCQlzdGF0dXMgPSB1cmItPnN0YXR1czsKIAogCQkJdXNiaXBfZGJnX3ZoY2lfcngoImZpbmQgdXJiICVwIHZ1cmIgJXAgc2VxbnVtICV1XG4iLAotCQkJCSAgICB1cmIsIHByaXYsIHNlcW51bSk7CisJCQkJCSAgdXJiLCBwcml2LCBzZXFudW0pOwogCiAJCQkvKiBUT0RPOiBmaXggbG9naWMgaGVyZSB0byBpbXByb3ZlIGluZGVudCBzaXR1dGF0aW9uICovCiAJCQlpZiAoc3RhdHVzICE9IC1FSU5QUk9HUkVTUykgewogCQkJCWlmIChzdGF0dXMgPT0gLUVOT0VOVCB8fAotCQkJCSAgICAgc3RhdHVzID09IC1FQ09OTlJFU0VUKQorCQkJCSAgICBzdGF0dXMgPT0gLUVDT05OUkVTRVQpCiAJCQkJCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LAogCQkJCQkJICJ1cmIgJXAgd2FzIHVubGlua2VkICIKIAkJCQkJCSAiJXNzeW5jaHJvbnVvdXNseS5cbiIsIHVyYiwKQEAgLTY2LDM2ICs2NCwzMCBAQAogfQogCiBzdGF0aWMgdm9pZCB2aGNpX3JlY3ZfcmV0X3N1Ym1pdChzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYsCi0JCQkJCQlzdHJ1Y3QgdXNiaXBfaGVhZGVyICpwZHUpCisJCQkJIHN0cnVjdCB1c2JpcF9oZWFkZXIgKnBkdSkKIHsKIAlzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCA9ICZ2ZGV2LT51ZDsKIAlzdHJ1Y3QgdXJiICp1cmI7CiAKIAlzcGluX2xvY2soJnZkZXYtPnByaXZfbG9jayk7Ci0KIAl1cmIgPSBwaWNrdXBfdXJiX2FuZF9mcmVlX3ByaXYodmRldiwgcGR1LT5iYXNlLnNlcW51bSk7Ci0KIAlzcGluX3VubG9jaygmdmRldi0+cHJpdl9sb2NrKTsKIAogCWlmICghdXJiKSB7Ci0JCXVzYmlwX3VlcnIoImNhbm5vdCBmaW5kIGEgdXJiIG9mIHNlcW51bSAldVxuIiwKLQkJCQkJCQlwZHUtPmJhc2Uuc2VxbnVtKTsKLQkJdXNiaXBfdWluZm8oIm1heCBzZXFudW0gJWRcbiIsCi0JCQkJCWF0b21pY19yZWFkKCZ0aGVfY29udHJvbGxlci0+c2VxbnVtKSk7CisJCXByX2VycigiY2Fubm90IGZpbmQgYSB1cmIgb2Ygc2VxbnVtICV1XG4iLCBwZHUtPmJhc2Uuc2VxbnVtKTsKKwkJcHJfaW5mbygibWF4IHNlcW51bSAlZFxuIiwKKwkJCWF0b21pY19yZWFkKCZ0aGVfY29udHJvbGxlci0+c2VxbnVtKSk7CiAJCXVzYmlwX2V2ZW50X2FkZCh1ZCwgVkRFVl9FVkVOVF9FUlJPUl9UQ1ApOwogCQlyZXR1cm47CiAJfQogCi0KIAkvKiB1bnBhY2sgdGhlIHBkdSB0byBhIHVyYiAqLwogCXVzYmlwX3BhY2tfcGR1KHBkdSwgdXJiLCBVU0JJUF9SRVRfU1VCTUlULCAwKTsKIAotCiAJLyogcmVjdiB0cmFuc2ZlciBidWZmZXIgKi8KIAlpZiAodXNiaXBfcmVjdl94YnVmZih1ZCwgdXJiKSA8IDApCiAJCXJldHVybjsKIAotCiAJLyogcmVjdiBpc29fcGFja2V0X2Rlc2NyaXB0b3IgKi8KIAlpZiAodXNiaXBfcmVjdl9pc28odWQsIHVyYikgPCAwKQogCQlyZXR1cm47CkBAIC0xMDcsNyArOTksNiBAQAogCWlmICh1c2JpcF9kYmdfZmxhZ192aGNpX3J4KQogCQl1c2JpcF9kdW1wX3VyYih1cmIpOwogCi0KIAl1c2JpcF9kYmdfdmhjaV9yeCgibm93IGdpdmViYWNrIHVyYiAlcFxuIiwgdXJiKTsKIAogCXNwaW5fbG9jaygmdGhlX2NvbnRyb2xsZXItPmxvY2spOwpAQCAtMTE2LDI1ICsxMDcsMjMgQEAKIAogCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiKHZoY2lfdG9faGNkKHRoZV9jb250cm9sbGVyKSwgdXJiLCB1cmItPnN0YXR1cyk7CiAKLQogCXVzYmlwX2RiZ192aGNpX3J4KCJMZWF2ZVxuIik7CiAKIAlyZXR1cm47CiB9CiAKLQogc3RhdGljIHN0cnVjdCB2aGNpX3VubGluayAqZGVxdWV1ZV9wZW5kaW5nX3VubGluayhzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYsCi0JCXN0cnVjdCB1c2JpcF9oZWFkZXIgKnBkdSkKKwkJCQkJCSAgc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1KQogewogCXN0cnVjdCB2aGNpX3VubGluayAqdW5saW5rLCAqdG1wOwogCiAJc3Bpbl9sb2NrKCZ2ZGV2LT5wcml2X2xvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVubGluaywgdG1wLCAmdmRldi0+dW5saW5rX3J4LCBsaXN0KSB7Ci0JCXVzYmlwX3VpbmZvKCJ1bmxpbmstPnNlcW51bSAlbHVcbiIsIHVubGluay0+c2VxbnVtKTsKKwkJcHJfaW5mbygidW5saW5rLT5zZXFudW0gJWx1XG4iLCB1bmxpbmstPnNlcW51bSk7CiAJCWlmICh1bmxpbmstPnNlcW51bSA9PSBwZHUtPmJhc2Uuc2VxbnVtKSB7CiAJCQl1c2JpcF9kYmdfdmhjaV9yeCgiZm91bmQgcGVuZGluZyB1bmxpbmssICVsdVxuIiwKLQkJCQkJCQl1bmxpbmstPnNlcW51bSk7CisJCQkJCSAgdW5saW5rLT5zZXFudW0pOwogCQkJbGlzdF9kZWwoJnVubGluay0+bGlzdCk7CiAKIAkJCXNwaW5fdW5sb2NrKCZ2ZGV2LT5wcml2X2xvY2spOwpAQCAtMTQ3LDkgKzEzNiw4IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLQogc3RhdGljIHZvaWQgdmhjaV9yZWN2X3JldF91bmxpbmsoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LAotCQkJCQkJc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1KQorCQkJCSBzdHJ1Y3QgdXNiaXBfaGVhZGVyICpwZHUpCiB7CiAJc3RydWN0IHZoY2lfdW5saW5rICp1bmxpbms7CiAJc3RydWN0IHVyYiAqdXJiOwpAQCAtMTU4LDE1ICsxNDYsMTMgQEAKIAogCXVubGluayA9IGRlcXVldWVfcGVuZGluZ191bmxpbmsodmRldiwgcGR1KTsKIAlpZiAoIXVubGluaykgewotCQl1c2JpcF91aW5mbygiY2Fubm90IGZpbmQgdGhlIHBlbmRpbmcgdW5saW5rICV1XG4iLAotCQkJCQkJCXBkdS0+YmFzZS5zZXFudW0pOworCQlwcl9pbmZvKCJjYW5ub3QgZmluZCB0aGUgcGVuZGluZyB1bmxpbmsgJXVcbiIsCisJCQlwZHUtPmJhc2Uuc2VxbnVtKTsKIAkJcmV0dXJuOwogCX0KIAogCXNwaW5fbG9jaygmdmRldi0+cHJpdl9sb2NrKTsKLQogCXVyYiA9IHBpY2t1cF91cmJfYW5kX2ZyZWVfcHJpdih2ZGV2LCB1bmxpbmstPnVubGlua19zZXFudW0pOwotCiAJc3Bpbl91bmxvY2soJnZkZXYtPnByaXZfbG9jayk7CiAKIAlpZiAoIXVyYikgewpAQCAtMTc1LDIxICsxNjEsMjEgQEAKIAkJICogYWxyZWFkeSByZWNlaXZlZCB0aGUgcmVzdWx0IG9mIGl0cyBzdWJtaXQgcmVzdWx0IGFuZCBnYXZlCiAJCSAqIGJhY2sgdGhlIFVSQi4KIAkJICovCi0JCXVzYmlwX3VpbmZvKCJ0aGUgdXJiIChzZXFudW0gJWQpIHdhcyBhbHJlYWR5IGdpdmVuIGJhY2tlZFxuIiwKLQkJCQkJCQlwZHUtPmJhc2Uuc2VxbnVtKTsKKwkJcHJfaW5mbygidGhlIHVyYiAoc2VxbnVtICVkKSB3YXMgYWxyZWFkeSBnaXZlbiBiYWNrZWRcbiIsCisJCQlwZHUtPmJhc2Uuc2VxbnVtKTsKIAl9IGVsc2UgewogCQl1c2JpcF9kYmdfdmhjaV9yeCgibm93IGdpdmViYWNrIHVyYiAlcFxuIiwgdXJiKTsKIAogCQkvKiBJZiB1bmxpbmsgaXMgc3VjY2VlZCwgc3RhdHVzIGlzIC1FQ09OTlJFU0VUICovCiAJCXVyYi0+c3RhdHVzID0gcGR1LT51LnJldF91bmxpbmsuc3RhdHVzOwotCQl1c2JpcF91aW5mbygiJWRcbiIsIHVyYi0+c3RhdHVzKTsKKwkJcHJfaW5mbygidXJiLT5zdGF0dXMgJWRcbiIsIHVyYi0+c3RhdHVzKTsKIAogCQlzcGluX2xvY2soJnRoZV9jb250cm9sbGVyLT5sb2NrKTsKIAkJdXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAodmhjaV90b19oY2QodGhlX2NvbnRyb2xsZXIpLCB1cmIpOwogCQlzcGluX3VubG9jaygmdGhlX2NvbnRyb2xsZXItPmxvY2spOwogCiAJCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiKHZoY2lfdG9faGNkKHRoZV9jb250cm9sbGVyKSwgdXJiLAotCQkJCQkJCQl1cmItPnN0YXR1cyk7CisJCQkJICAgICB1cmItPnN0YXR1cyk7CiAJfQogCiAJa2ZyZWUodW5saW5rKTsKQEAgLTIwMiw5ICsxODgsNyBAQAogCWludCBlbXB0eSA9IDA7CiAKIAlzcGluX2xvY2soJnZkZXYtPnByaXZfbG9jayk7Ci0KIAllbXB0eSA9IGxpc3RfZW1wdHkoJnZkZXYtPnByaXZfcngpOwotCiAJc3Bpbl91bmxvY2soJnZkZXYtPnByaXZfbG9jayk7CiAKIAlyZXR1cm4gZW1wdHk7CkBAIC0yMTcsNyArMjAxLDYgQEAKIAlzdHJ1Y3QgdXNiaXBfaGVhZGVyIHBkdTsKIAlzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYgPSBjb250YWluZXJfb2YodWQsIHN0cnVjdCB2aGNpX2RldmljZSwgdWQpOwogCi0KIAl1c2JpcF9kYmdfdmhjaV9yeCgiRW50ZXJcbiIpOwogCiAJbWVtc2V0KCZwZHUsIDAsIHNpemVvZihwZHUpKTsKQEAgLTIyNiwyNiArMjA5LDI2IEBACiAJcmV0ID0gdXNiaXBfeG1pdCgwLCB1ZC0+dGNwX3NvY2tldCwgKGNoYXIgKikgJnBkdSwgc2l6ZW9mKHBkdSksIDApOwogCWlmIChyZXQgPCAwKSB7CiAJCWlmIChyZXQgPT0gLUVDT05OUkVTRVQpCi0JCQl1c2JpcF91aW5mbygiY29ubmVjdGlvbiByZXNldCBieSBwZWVyXG4iKTsKKwkJCXByX2luZm8oImNvbm5lY3Rpb24gcmVzZXQgYnkgcGVlclxuIik7CiAJCWVsc2UgaWYgKHJldCA9PSAtRUFHQUlOKSB7CiAJCQkvKiBpZ25vcmUgaWYgY29ubmVjdGlvbiB3YXMgaWRsZSAqLwogCQkJaWYgKHZoY2lfcHJpdl90eF9lbXB0eSh2ZGV2KSkKIAkJCQlyZXR1cm47Ci0JCQl1c2JpcF91aW5mbygiY29ubmVjdGlvbiB0aW1lZCBvdXQgd2l0aCBwZW5kaW5nIHVyYnNcbiIpOworCQkJcHJfaW5mbygiY29ubmVjdGlvbiB0aW1lZCBvdXQgd2l0aCBwZW5kaW5nIHVyYnNcbiIpOwogCQl9IGVsc2UgaWYgKHJldCAhPSAtRVJFU1RBUlRTWVMpCi0JCQl1c2JpcF91aW5mbygieG1pdCBmYWlsZWQgJWRcbiIsIHJldCk7CisJCQlwcl9pbmZvKCJ4bWl0IGZhaWxlZCAlZFxuIiwgcmV0KTsKIAogCQl1c2JpcF9ldmVudF9hZGQodWQsIFZERVZfRVZFTlRfRVJST1JfVENQKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAocmV0ID09IDApIHsKLQkJdXNiaXBfdWluZm8oImNvbm5lY3Rpb24gY2xvc2VkIik7CisJCXByX2luZm8oImNvbm5lY3Rpb24gY2xvc2VkIik7CiAJCXVzYmlwX2V2ZW50X2FkZCh1ZCwgVkRFVl9FVkVOVF9ET1dOKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAocmV0ICE9IHNpemVvZihwZHUpKSB7Ci0JCXVzYmlwX3VlcnIoInJlY2VpdmVkIHBkdSBzaXplIGlzICVkLCBzaG91bGQgYmUgJWRcbiIsCi0JCQkJCXJldCwgKHVuc2lnbmVkIGludClzaXplb2YocGR1KSk7CisJCXByX2VycigicmVjZWl2ZWQgcGR1IHNpemUgaXMgJWQsIHNob3VsZCBiZSAlZFxuIiwgcmV0LAorCQkgICAgICAgKHVuc2lnbmVkIGludClzaXplb2YocGR1KSk7CiAJCXVzYmlwX2V2ZW50X2FkZCh1ZCwgVkRFVl9FVkVOVF9FUlJPUl9UQ1ApOwogCQlyZXR1cm47CiAJfQpAQCAtMjYzLDIxICsyNDYsMTggQEAKIAkJdmhjaV9yZWN2X3JldF91bmxpbmsodmRldiwgJnBkdSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCS8qIE5PVFJFQUNIRUQgKi8KLQkJdXNiaXBfdWVycigidW5rbm93biBwZHUgJXVcbiIsIHBkdS5iYXNlLmNvbW1hbmQpOworCQkvKiBOT1QgUkVBQ0hFRCAqLworCQlwcl9lcnIoInVua25vd24gcGR1ICV1XG4iLCBwZHUuYmFzZS5jb21tYW5kKTsKIAkJdXNiaXBfZHVtcF9oZWFkZXIoJnBkdSk7CiAJCXVzYmlwX2V2ZW50X2FkZCh1ZCwgVkRFVl9FVkVOVF9FUlJPUl9UQ1ApOworCQlicmVhazsKIAl9CiB9CiAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQogaW50IHZoY2lfcnhfbG9vcCh2b2lkICpkYXRhKQogewogCXN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkID0gZGF0YTsKIAotCiAJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKIAkJaWYgKHVzYmlwX2V2ZW50X2hhcHBlbmVkKHVkKSkKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfc3lzZnMuYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3N5c2ZzLmMKaW5kZXggZTJkYWRiZC4uZDk3MzZmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfc3lzZnMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9zeXNmcy5jCkBAIC0xNywxMiArMTcsMTIgQEAKICAqIFVTQS4KICAqLwogCisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldC5oPgorCiAjaW5jbHVkZSAidXNiaXBfY29tbW9uLmgiCiAjaW5jbHVkZSAidmhjaS5oIgogCi0jaW5jbHVkZSA8bGludXgvaW4uaD4KLSNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+Ci0KIC8qIFRPRE86IHJlZmluZSBsb2NraW5nID8qLwogCiAvKiBTeXNmcyBlbnRyeSB0byBzaG93IHBvcnQgc3RhdHVzICovCkBAIC01MywyMCArNTMsMTkgQEAKIAkJc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2ID0gcG9ydF90b192ZGV2KGkpOwogCiAJCXNwaW5fbG9jaygmdmRldi0+dWQubG9jayk7Ci0KIAkJb3V0ICs9IHNwcmludGYob3V0LCAiJTAzdSAlMDN1ICIsIGksIHZkZXYtPnVkLnN0YXR1cyk7CiAKIAkJaWYgKHZkZXYtPnVkLnN0YXR1cyA9PSBWREVWX1NUX1VTRUQpIHsKIAkJCW91dCArPSBzcHJpbnRmKG91dCwgIiUwM3UgJTA4eCAiLAotCQkJCQl2ZGV2LT5zcGVlZCwgdmRldi0+ZGV2aWQpOworCQkJCSAgICAgICB2ZGV2LT5zcGVlZCwgdmRldi0+ZGV2aWQpOwogCQkJb3V0ICs9IHNwcmludGYob3V0LCAiJTE2cCAiLCB2ZGV2LT51ZC50Y3Bfc29ja2V0KTsKIAkJCW91dCArPSBzcHJpbnRmKG91dCwgIiVzIiwgZGV2X25hbWUoJnZkZXYtPnVkZXYtPmRldikpOwogCi0JCX0gZWxzZQorCQl9IGVsc2UgewogCQkJb3V0ICs9IHNwcmludGYob3V0LCAiMDAwIDAwMCAwMDAgMDAwMDAwMDAwMDAwMDAwMCAwLTAiKTsKKwkJfQogCiAJCW91dCArPSBzcHJpbnRmKG91dCwgIlxuIik7Ci0KIAkJc3Bpbl91bmxvY2soJnZkZXYtPnVkLmxvY2spOwogCX0KIApAQCAtOTAsNyArODksNyBAQAogCiAJc3Bpbl9sb2NrKCZ2ZGV2LT51ZC5sb2NrKTsKIAlpZiAodmRldi0+dWQuc3RhdHVzID09IFZERVZfU1RfTlVMTCkgewotCQl1c2JpcF91ZXJyKCJub3QgY29ubmVjdGVkICVkXG4iLCB2ZGV2LT51ZC5zdGF0dXMpOworCQlwcl9lcnIoIm5vdCBjb25uZWN0ZWQgJWRcbiIsIHZkZXYtPnVkLnN0YXR1cyk7CiAKIAkJLyogdW5sb2NrICovCiAJCXNwaW5fdW5sb2NrKCZ2ZGV2LT51ZC5sb2NrKTsKQEAgLTExOCw3ICsxMTcsNyBAQAogCiAJLyogY2hlY2sgcmhwb3J0ICovCiAJaWYgKHJocG9ydCA+PSBWSENJX05QT1JUUykgewotCQl1c2JpcF91ZXJyKCJpbnZhbGlkIHBvcnQgJXVcbiIsIHJocG9ydCk7CisJCWRldl9lcnIoZGV2LCAiaW52YWxpZCBwb3J0ICV1XG4iLCByaHBvcnQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTEyNyw2ICsxMjYsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXVzYmlwX2RiZ192aGNpX3N5c2ZzKCJMZWF2ZVxuIik7CisKIAlyZXR1cm4gY291bnQ7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoZGV0YWNoLCBTX0lXVVNSLCBOVUxMLCBzdG9yZV9kZXRhY2gpOwpAQCAtMTM2LDcgKzEzNiw3IEBACiB7CiAJLyogY2hlY2sgcmhwb3J0ICovCiAJaWYgKChyaHBvcnQgPCAwKSB8fCAocmhwb3J0ID49IFZIQ0lfTlBPUlRTKSkgewotCQl1c2JpcF91ZXJyKCJwb3J0ICV1XG4iLCByaHBvcnQpOworCQlwcl9lcnIoInBvcnQgJXVcbiIsIHJocG9ydCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTQ4LDcgKzE0OCw3IEBACiAJY2FzZSBVU0JfU1BFRURfV0lSRUxFU1M6CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXVzYmlwX3VlcnIoInNwZWVkICVkXG4iLCBzcGVlZCk7CisJCXByX2Vycigic3BlZWQgJWRcbiIsIHNwZWVkKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xODMsOCArMTgzLDcgQEAKIAlzc2NhbmYoYnVmLCAiJXUgJXUgJXUgJXUiLCAmcmhwb3J0LCAmc29ja2ZkLCAmZGV2aWQsICZzcGVlZCk7CiAKIAl1c2JpcF9kYmdfdmhjaV9zeXNmcygicmhwb3J0KCV1KSBzb2NrZmQoJXUpIGRldmlkKCV1KSBzcGVlZCgldSlcbiIsCi0JCQkJcmhwb3J0LCBzb2NrZmQsIGRldmlkLCBzcGVlZCk7Ci0KKwkJCSAgICAgcmhwb3J0LCBzb2NrZmQsIGRldmlkLCBzcGVlZCk7CiAKIAkvKiBjaGVjayByZWNlaXZlZCBwYXJhbWV0ZXJzICovCiAJaWYgKHZhbGlkX2FyZ3Mocmhwb3J0LCBzcGVlZCkgPCAwKQpAQCAtMTk5LDkgKzE5OCw3IEBACiAKIAkvKiBiZWdpbiBhIGxvY2sgKi8KIAlzcGluX2xvY2soJnRoZV9jb250cm9sbGVyLT5sb2NrKTsKLQogCXZkZXYgPSBwb3J0X3RvX3ZkZXYocmhwb3J0KTsKLQogCXNwaW5fbG9jaygmdmRldi0+dWQubG9jayk7CiAKIAlpZiAodmRldi0+dWQuc3RhdHVzICE9IFZERVZfU1RfTlVMTCkgewpAQCAtMjA5LDEyICsyMDYsMTIgQEAKIAkJc3Bpbl91bmxvY2soJnZkZXYtPnVkLmxvY2spOwogCQlzcGluX3VubG9jaygmdGhlX2NvbnRyb2xsZXItPmxvY2spOwogCi0JCXVzYmlwX3VlcnIoInBvcnQgJWQgYWxyZWFkeSB1c2VkXG4iLCByaHBvcnQpOworCQlkZXZfZXJyKGRldiwgInBvcnQgJWQgYWxyZWFkeSB1c2VkXG4iLCByaHBvcnQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQl1c2JpcF91aW5mbygicmhwb3J0KCV1KSBzb2NrZmQoJWQpIGRldmlkKCV1KSBzcGVlZCgldSlcbiIsCi0JCQkJcmhwb3J0LCBzb2NrZmQsIGRldmlkLCBzcGVlZCk7CisJZGV2X2luZm8oZGV2LCAicmhwb3J0KCV1KSBzb2NrZmQoJWQpIGRldmlkKCV1KSBzcGVlZCgldSlcbiIsCisJCSByaHBvcnQsIHNvY2tmZCwgZGV2aWQsIHNwZWVkKTsKIAogCXZkZXYtPmRldmlkICAgICAgICAgPSBkZXZpZDsKIAl2ZGV2LT5zcGVlZCAgICAgICAgID0gc3BlZWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV90eC5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfdHguYwppbmRleCBkOWFiNDlkLi45YjQzN2U3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV90eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3R4LmMKQEAgLTE3LDI5ICsxNywyNiBAQAogICogVVNBLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgInVzYmlwX2NvbW1vbi5oIgogI2luY2x1ZGUgInZoY2kuaCIKIAotCiBzdGF0aWMgdm9pZCBzZXR1cF9jbWRfc3VibWl0X3BkdShzdHJ1Y3QgdXNiaXBfaGVhZGVyICpwZHVwLCAgc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCB2aGNpX3ByaXYgKnByaXYgPSAoKHN0cnVjdCB2aGNpX3ByaXYgKil1cmItPmhjcHJpdik7CiAJc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2ID0gcHJpdi0+dmRldjsKIAogCXVzYmlwX2RiZ192aGNpX3R4KCJVUkIsIGxvY2FsIGRldm51bSAldSwgcmVtb3RlIGRldmlkICV1XG4iLAotCQkJCXVzYl9waXBlZGV2aWNlKHVyYi0+cGlwZSksIHZkZXYtPmRldmlkKTsKKwkJCSAgdXNiX3BpcGVkZXZpY2UodXJiLT5waXBlKSwgdmRldi0+ZGV2aWQpOwogCi0JcGR1cC0+YmFzZS5jb21tYW5kID0gVVNCSVBfQ01EX1NVQk1JVDsKLQlwZHVwLT5iYXNlLnNlcW51bSAgPSBwcml2LT5zZXFudW07Ci0JcGR1cC0+YmFzZS5kZXZpZCAgID0gdmRldi0+ZGV2aWQ7Ci0JaWYgKHVzYl9waXBlaW4odXJiLT5waXBlKSkKLQkJcGR1cC0+YmFzZS5kaXJlY3Rpb24gPSBVU0JJUF9ESVJfSU47Ci0JZWxzZQotCQlwZHVwLT5iYXNlLmRpcmVjdGlvbiA9IFVTQklQX0RJUl9PVVQ7Ci0JcGR1cC0+YmFzZS5lcCAgICAgID0gdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpOworCXBkdXAtPmJhc2UuY29tbWFuZCAgID0gVVNCSVBfQ01EX1NVQk1JVDsKKwlwZHVwLT5iYXNlLnNlcW51bSAgICA9IHByaXYtPnNlcW51bTsKKwlwZHVwLT5iYXNlLmRldmlkICAgICA9IHZkZXYtPmRldmlkOworCXBkdXAtPmJhc2UuZGlyZWN0aW9uID0gdXNiX3BpcGVpbih1cmItPnBpcGUpID8KKwkJVVNCSVBfRElSX0lOIDogVVNCSVBfRElSX09VVDsKKwlwZHVwLT5iYXNlLmVwCSAgICAgPSB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSk7CiAKIAl1c2JpcF9wYWNrX3BkdShwZHVwLCB1cmIsIFVTQklQX0NNRF9TVUJNSVQsIDEpOwogCkBAIC02NSw4ICs2Miw2IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLQotCiBzdGF0aWMgaW50IHZoY2lfc2VuZF9jbWRfc3VibWl0KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldikKIHsKIAlzdHJ1Y3QgdmhjaV9wcml2ICpwcml2ID0gTlVMTDsKQEAgLTkwLDcgKzg1LDYgQEAKIAogCQl1c2JpcF9kYmdfdmhjaV90eCgic2V0dXAgdHhkYXRhIHVyYiAlcFxuIiwgdXJiKTsKIAotCiAJCS8qIDEuIHNldHVwIHVzYmlwX2hlYWRlciAqLwogCQlzZXR1cF9jbWRfc3VibWl0X3BkdSgmcGR1X2hlYWRlciwgdXJiKTsKIAkJdXNiaXBfaGVhZGVyX2NvcnJlY3RfZW5kaWFuKCZwZHVfaGVhZGVyLCAxKTsKQEAgLTEyNCw4ICsxMTgsOCBAQAogCiAJCXJldCA9IGtlcm5lbF9zZW5kbXNnKHZkZXYtPnVkLnRjcF9zb2NrZXQsICZtc2csIGlvdiwgMywgdHhzaXplKTsKIAkJaWYgKHJldCAhPSB0eHNpemUpIHsKLQkJCXVzYmlwX3VlcnIoInNlbmRtc2cgZmFpbGVkISwgcmV0dmFsICVkIGZvciAlemRcbiIsIHJldCwKLQkJCQkJCQkJCXR4c2l6ZSk7CisJCQlwcl9lcnIoInNlbmRtc2cgZmFpbGVkISwgcmV0PSVkIGZvciAlemRcbiIsIHJldCwKKwkJCSAgICAgICB0eHNpemUpOwogCQkJa2ZyZWUoaXNvX2J1ZmZlcik7CiAJCQl1c2JpcF9ldmVudF9hZGQoJnZkZXYtPnVkLCBWREVWX0VWRU5UX0VSUk9SX1RDUCk7CiAJCQlyZXR1cm4gLTE7CkBAIC0xNDAsOSArMTM0LDYgQEAKIAlyZXR1cm4gdG90YWxfc2l6ZTsKIH0KIAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCiBzdGF0aWMgc3RydWN0IHZoY2lfdW5saW5rICpkZXF1ZXVlX2Zyb21fdW5saW5rX3R4KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTgyLDcgKzE3Myw2IEBACiAKIAkJdXNiaXBfZGJnX3ZoY2lfdHgoInNldHVwIGNtZCB1bmxpbmssICVsdVxuIiwgdW5saW5rLT5zZXFudW0pOwogCi0KIAkJLyogMS4gc2V0dXAgdXNiaXBfaGVhZGVyICovCiAJCXBkdV9oZWFkZXIuYmFzZS5jb21tYW5kID0gVVNCSVBfQ01EX1VOTElOSzsKIAkJcGR1X2hlYWRlci5iYXNlLnNlcW51bSAgPSB1bmxpbmstPnNlcW51bTsKQEAgLTE5OCwxMyArMTg4LDEyIEBACiAKIAkJcmV0ID0ga2VybmVsX3NlbmRtc2codmRldi0+dWQudGNwX3NvY2tldCwgJm1zZywgaW92LCAxLCB0eHNpemUpOwogCQlpZiAocmV0ICE9IHR4c2l6ZSkgewotCQkJdXNiaXBfdWVycigic2VuZG1zZyBmYWlsZWQhLCByZXR2YWwgJWQgZm9yICV6ZFxuIiwgcmV0LAotCQkJCQkJCQkJdHhzaXplKTsKKwkJCXByX2Vycigic2VuZG1zZyBmYWlsZWQhLCByZXQ9JWQgZm9yICV6ZFxuIiwgcmV0LAorCQkJICAgICAgIHR4c2l6ZSk7CiAJCQl1c2JpcF9ldmVudF9hZGQoJnZkZXYtPnVkLCBWREVWX0VWRU5UX0VSUk9SX1RDUCk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAotCiAJCXVzYmlwX2RiZ192aGNpX3R4KCJzZW5kIHR4ZGF0YVxuIik7CiAKIAkJdG90YWxfc2l6ZSArPSB0eHNpemU7CkBAIC0yMTMsOSArMjAyLDYgQEAKIAlyZXR1cm4gdG90YWxfc2l6ZTsKIH0KIAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCiBpbnQgdmhjaV90eF9sb29wKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHVzYmlwX2RldmljZSAqdWQgPSBkYXRhOwpAQCAtMjI5LDkgKzIxNSw5IEBACiAJCQlicmVhazsKIAogCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUodmRldi0+d2FpdHFfdHgsCi0JCQkJKCFsaXN0X2VtcHR5KCZ2ZGV2LT5wcml2X3R4KSB8fAotCQkJCSAhbGlzdF9lbXB0eSgmdmRldi0+dW5saW5rX3R4KSB8fAotCQkJCSBrdGhyZWFkX3Nob3VsZF9zdG9wKCkpKTsKKwkJCQkJICghbGlzdF9lbXB0eSgmdmRldi0+cHJpdl90eCkgfHwKKwkJCQkJICAhbGlzdF9lbXB0eSgmdmRldi0+dW5saW5rX3R4KSB8fAorCQkJCQkgIGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkpOwogCiAJCXVzYmlwX2RiZ192aGNpX3R4KCJwZW5kaW5nIHVyYnMgPywgbm93IHdha2UgdXBcbiIpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvYnNzZGIuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvYnNzZGIuYwppbmRleCA1N2MxY2M5Li41Nzc1OTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2Jzc2RiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9ic3NkYi5jCkBAIC0xMjg5LDcgKzEyODksNyBAQAogICAgICAgICAgICAgIG1lbXNldChwRGV2aWNlLT5za2ItPmNiLCAwLCBzaXplb2YocERldmljZS0+c2tiLT5jYikpOwogICAgICAgICAgICAgIG5ldGlmX3J4KHBEZXZpY2UtPnNrYik7CiAgICAgICAgICAgICAgcERldmljZS0+c2tiID0gZGV2X2FsbG9jX3NrYigoaW50KXBEZXZpY2UtPnJ4X2J1Zl9zeik7Ci0gICAgICAgICB9OworICAgICAgICAgfQogICAgI2lmZGVmIFdQQV9TVVBQTElDQU5UX0RSSVZFUl9XRVhUX1NVUFBPUlQKICAgLy8gaWYocERldmljZS0+YldQQVN1cHBXZXh0RW5hYmxlZCA9PSB0cnVlKQogICAgICAgewpAQCAtMTQ4OSw3ICsxNDg5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmICgocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfSUJTU19TVEEpIHx8CiAgICAgICAgICAgICAocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX0FQKSkgewpAQCAtMTU0Myw5ICsxNTQzLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9OworICAgIH0KIAogICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kZXZpY2UuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZGV2aWNlLmgKaW5kZXggMmU3YzJmZC4uNzgwMjA1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kZXZpY2UuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RldmljZS5oCkBAIC0zOTYsNyArMzk2LDcgQEAKIAogICAgIHN0cnVjdCBwY2lfZGV2KiAgICAgICAgICAgICBwY2lkOwogCi0jaWYgQ09ORklHX1BNCisjaWZkZWYgQ09ORklHX1BNCiAgICAgdTMyICAgICAgICAgICAgICAgICAgICAgICAgIHBjaV9zdGF0ZVsxNl07CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kZXZpY2VfbWFpbi5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kZXZpY2VfbWFpbi5jCmluZGV4IGFkMzljODcuLjNkMmE5YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZGV2aWNlX21haW4uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RldmljZV9tYWluLmMKQEAgLTkwMCw3ICs5MDAsNyBAQAogCSAgICAgICAgaWYoaWk+MjApCiAJCSAgYnJlYWs7CiAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgfTsKKyAgICAgICAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNDQ2LDcgKzE0NDYsNyBAQAogICAgICAgICBpZiAoIWRldmljZV9hbGxvY19mcmFnX2J1ZihwRGV2aWNlLCBwRGVGKSkgewogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfRVJSLEtFUk5fRVJSICIlczogY2FuIG5vdCBhbGxvYyBmcmFnIGJ1ZnNcbiIsCiAgICAgICAgICAgICAgICAgcERldmljZS0+ZGV2LT5uYW1lKTsKLSAgICAgICAgfTsKKyAgICAgICAgfQogICAgIH0KICAgICBwRGV2aWNlLT5jYkRGQ0IgPSBDQl9NQVhfUlhfRlJBRzsKICAgICBwRGV2aWNlLT5jYkZyZWVERkNCID0gcERldmljZS0+Y2JERkNCOwpAQCAtMjEwNCw3ICsyMTA0LDcgQEAKICAgICAgICAgZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKICAgICAgICAgc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfTsKKyAgICB9CiAKICAgICBjYk1QRFVMZW4gPSBza2ItPmxlbjsKICAgICBwYk1QRFUgPSBza2ItPmRhdGE7CkBAIC0yMTM2LDcgKzIxMzYsNyBAQAogICAgIGlmIChwRGV2aWNlLT5iU3RvcFR4MFBrdCA9PSB0cnVlKSB7CiAgICAgICAgIGRldl9rZnJlZV9za2JfaXJxKHNrYik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9OworICAgIH0KIAogICAgIGlmIChBVkFJTF9URChwRGV2aWNlLCBUWVBFX1RYRE1BMCkgPD0gMCkgewogICAgICAgICBkZXZfa2ZyZWVfc2tiX2lycShza2IpOwpAQCAtMjg2NSw3ICsyODY1LDcgQEAKICAgICAgICAgICAgIHBEZXZpY2UtPmJCZWFjb25TZW50ID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAocERldmljZS0+YkVuYWJsZVBTTW9kZSkgewogICAgICAgICAgICAgICAgIFBTYklzTmV4dFRCVFRXYWtlVXAoKHZvaWQgKilwRGV2aWNlKTsKLSAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICgocERldmljZS0+ZU9QTW9kZSA9PSBPUF9NT0RFX0FQKSB8fAogICAgICAgICAgICAgICAgIChwRGV2aWNlLT5lT1BNb2RlID09IE9QX01PREVfQURIT0MpKSB7CkBAIC0yODc2LDcgKzI4NzYsNyBAQAogCiAgICAgICAgICAgICBpZiAocERldmljZS0+ZU9QTW9kZSA9PSBPUF9NT0RFX0FESE9DICYmIHBEZXZpY2UtPnBNZ210LT53Q3VyckFUSU1XaW5kb3cgPiAwKSB7CiAgICAgICAgICAgICAgICAgLy8gdG9kbyBhZGhvYyBQUyBtb2RlCi0gICAgICAgICAgICB9OworICAgICAgICAgICAgfQogCiAgICAgICAgIH0KIApAQCAtMjg4NSw3ICsyODg1LDcgQEAKICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5lT1BNb2RlID09IE9QX01PREVfQURIT0MpIHsKICAgICAgICAgICAgICAgICBwRGV2aWNlLT5iSXNCZWFjb25CdWZSZWFkeVNldCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIHBEZXZpY2UtPmNiQmVhY29uQnVmUmVhZHlTZXRDbnQgPSAwOwotICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmVPUE1vZGUgPT0gT1BfTU9ERV9BUCkgewogICAgICAgICAgICAgICAgIGlmKHBNZ210LT5ieURUSU1Db3VudCA+IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZHBjLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RwYy5jCmluZGV4IDE1MTMwNzMuLmNmMGRlYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZHBjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kcGMuYwpAQCAtNzAwLDcgKzcwMCw3IEBACiAgICAgICAgICAgICAgICAgcERldmljZS0+cE1nbXQtPmJJblRJTVdha2UgPSBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH07CisgICAgfQogCiAgICAgLy8gTm93IGl0IG9ubHkgc3VwcG9ydHMgODAyLjExZyBJbmZyYXN0cnVjdHVyZSBNb2RlLCBhbmQgc3VwcG9ydCByYXRlIG11c3QgdXAgdG8gNTQgTWJwcwogICAgIGlmIChwRGV2aWNlLT5iRGl2ZXJzaXR5RW5hYmxlICYmIChGcmFtZVNpemU+NTApICYmCkBAIC04ODQsNyArODg0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgIG1lbXNldChwRGV2aWNlLT5za2ItPmNiLCAwLCBzaXplb2YocERldmljZS0+c2tiLT5jYikpOwogICAgICAgICAgICAgICAgICAgICAgbmV0aWZfcngocERldmljZS0+c2tiKTsKICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPnNrYiA9IGRldl9hbGxvY19za2IoKGludClwRGV2aWNlLT5yeF9idWZfc3opOwotICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTEwNDksNyArMTA0OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gImRwYzogc2VuZCB2TWdyRGVBdXRoZW5CZWdpblN0YSAxXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKHBNZ210LT5zTm9kZURCVGFibGVbaVNBTm9kZUluZGV4XS5lTm9kZVN0YXRlIDwgTk9ERV9BU1NPQykgewogICAgICAgICAgICAgICAgICAgICAvLyBzZW5kIGRlYXNzb2Mgbm90aWZpY2F0aW9uCiAgICAgICAgICAgICAgICAgICAgIC8vIHJlYXNvbiA9ICg3KSBjbGFzcyAzIHJlY2VpdmVkIGZyb20gbm9uYXNzb2Mgc3RhCkBAIC0xMDYxLDcgKzEwNjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJkcGM6IHNlbmQgdk1nckRpc2Fzc29jQmVnaW5TdGEgMlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKHBNZ210LT5zTm9kZURCVGFibGVbaVNBTm9kZUluZGV4XS5iUFNFbmFibGUpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gZGVsY2FyZSByZWNlaXZlZCBwcy1wb2xsIGV2ZW50CkBAIC0xNDg2LDcgKzE0ODYsNyBAQAogICAgICAgICAgICAgICAgICAgICBiUmVsYXlPbmx5ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH07CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoYlJlbGF5T25seSB8fCBiUmVsYXlBbmRGb3J3YXJkKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2lvY3RsLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2lvY3RsLmMKaW5kZXggNTYyNGE0MS4uOGNmODhjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9pb2N0bC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvaW9jdGwuYwpAQCAtOTEsNyArOTEsNyBAQAogICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoJnNTY2FuQ21kLCBwUmVxLT5kYXRhLCBzaXplb2YoU0NtZFNjYW4pKSkgewogCQkJcmVzdWx0ID0gLUVGQVVMVDsKIAkJCWJyZWFrOwotCQl9OworCQl9CiAKICAgICAgICAgcEl0ZW1TU0lEID0gKFBXTEFOX0lFX1NTSUQpc1NjYW5DbWQuc3NpZDsKICAgICAgICAgaWYgKHBJdGVtU1NJRC0+bGVuICE9IDApIHsKQEAgLTEyOCw3ICsxMjgsNyBAQAogICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoJnNab25lVHlwZUNtZCwgcFJlcS0+ZGF0YSwgc2l6ZW9mKFNDbWRab25lVHlwZVNldCkpKSB7CiAJCQlyZXN1bHQgPSAtRUZBVUxUOwogCQkJYnJlYWs7Ci0JCX07CisJCX0KIAogICAgICAgICAgIGlmKHNab25lVHlwZUNtZC5iV3JpdGU9PXRydWUpIHsKIAkgIC8vLy8vL3dyaXRlIHpvbmV0eXBlCkBAIC0xNjcsNyArMTY3LDcgQEAKIAkgICBpZiAoY29weV90b191c2VyKHBSZXEtPmRhdGEsICZzWm9uZVR5cGVDbWQsIHNpemVvZihTQ21kWm9uZVR5cGVTZXQpKSkgewogCQkJcmVzdWx0ID0gLUVGQVVMVDsKIAkJCWJyZWFrOwotCQl9OworCQl9CiAJfQogCiAJICAgICBicmVhazsKQEAgLTE4Niw3ICsxODYsNyBAQAogICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoJnNKb2luQ21kLCBwUmVxLT5kYXRhLCBzaXplb2YoU0NtZEJTU0pvaW4pKSkgewogCQkJcmVzdWx0ID0gLUVGQVVMVDsKIAkJCWJyZWFrOwotCQl9OworCQl9CiAKICAgICAgICAgcEl0ZW1TU0lEID0gKFBXTEFOX0lFX1NTSUQpc0pvaW5DbWQuc3NpZDsKICAgICAgICAgbWVtc2V0KHBNZ210LT5hYnlEZXNpcmVTU0lELCAwLCBXTEFOX0lFSERSX0xFTiArIFdMQU5fU1NJRF9NQVhMRU4gKyAxKTsKQEAgLTIzNCw3ICsyMzQsNyBAQAogICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoJnNXRVBDbWQsIHBSZXEtPmRhdGEsIHNpemVvZihTQ21kU2V0V0VQKSkpIHsKIAkJCXJlc3VsdCA9IC1FRkFVTFQ7CiAJCQlicmVhazsKLQkJfTsKKwkJfQogCSAgICBpZiAoc1dFUENtZC5iRW5hYmxlV2VwICE9IHRydWUpIHsKICAgICAgICAgICAgIHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID0gZmFsc2U7CiAgICAgICAgICAgICBwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uRGlzYWJsZWQ7CkBAIC0zMDAsNyArMzAwLDcgQEAKICAgICAgICAgaWYgKGNvcHlfdG9fdXNlcihwUmVxLT5kYXRhLCAmc0xpbmtTdGF0dXMsIHNpemVvZihTQ21kTGlua1N0YXR1cykpKSB7CiAJCQlyZXN1bHQgPSAtRUZBVUxUOwogCQkJYnJlYWs7Ci0JCX07CisJCX0KIAogICAgICAgICBicmVhazsKIApAQCAtMzEyLDEyICszMTIsMTIgQEAKICAgICAgICAgICAgIGlmICghcEJTUy0+YkFjdGl2ZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGNiTGlzdENvdW50Kys7Ci0gICAgICAgIH07CisgICAgICAgIH0KICAgICAgICAgc0xpc3QudUl0ZW0gPSBjYkxpc3RDb3VudDsKICAgICAgICAgaWYgKGNvcHlfdG9fdXNlcihwUmVxLT5kYXRhLCAmc0xpc3QsIHNpemVvZihTQlNTSURMaXN0KSkpIHsKIAkJCXJlc3VsdCA9IC1FRkFVTFQ7CiAJCQlicmVhazsKLQkJfTsKKwkJfQogICAgICAgICBwUmVxLT53UmVzdWx0ID0gMDsKICAgICAgICAgYnJlYWs7CiAKQEAgLTMyNSw3ICszMjUsNyBAQAogICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoJnNMaXN0LCBwUmVxLT5kYXRhLCBzaXplb2YoU0JTU0lETGlzdCkpKSB7CiAJCQlyZXN1bHQgPSAtRUZBVUxUOwogCQkJYnJlYWs7Ci0JCX07CisJCX0KICAgICAgICAgcExpc3QgPSAoUFNCU1NJRExpc3Qpa21hbGxvYyhzaXplb2YoU0JTU0lETGlzdCkgKyAoc0xpc3QudUl0ZW0gKiBzaXplb2YoU0JTU0lESXRlbSkpLCAoaW50KUdGUF9BVE9NSUMpOwogICAgICAgICBpZiAocExpc3QgPT0gTlVMTCkgewogICAgICAgICAgICAgcmVzdWx0ID0gLUVOT01FTTsKQEAgLTM2Nyw3ICszNjcsNyBAQAogICAgICAgICBpZiAoY29weV90b191c2VyKHBSZXEtPmRhdGEsIHBMaXN0LCBzaXplb2YoU0JTU0lETGlzdCkgKyAoc0xpc3QudUl0ZW0gKiBzaXplb2YoU0JTU0lESXRlbSkpKSkgewogCQkJcmVzdWx0ID0gLUVGQVVMVDsKIAkJCWJyZWFrOwotCQl9OworCQl9CiAgICAgICAgIGtmcmVlKHBMaXN0KTsKICAgICAgICAgcFJlcS0+d1Jlc3VsdCA9IDA7CiAgICAgICAgIGJyZWFrOwpAQCAtMzc2LDE0ICszNzYsMTQgQEAKICAgICAgICAgaWYgKGNvcHlfdG9fdXNlcihwUmVxLT5kYXRhLCAmKHBEZXZpY2UtPnM4MDJfMTFDb3VudGVyKSwgc2l6ZW9mKFNEb3QxMU1JQkNvdW50KSkpIHsKIAkJCXJlc3VsdCA9IC1FRkFVTFQ7CiAJCQlicmVhazsKLQkJfTsKKwkJfQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgV0xBTl9DTURfR0VUX1NUQVQ6CiAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIocFJlcS0+ZGF0YSwgJihwRGV2aWNlLT5zY1N0YXRpc3RpYyksIHNpemVvZihTU3RhdENvdW50ZXIpKSkgewogCQkJcmVzdWx0ID0gLUVGQVVMVDsKIAkJCWJyZWFrOwotCQl9OworCQl9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV0xBTl9DTURfU1RPUF9NQUM6CiAKQEAgLTQyNyw3ICs0MjcsNyBAQAogICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoJnNWYWx1ZSwgcFJlcS0+ZGF0YSwgc2l6ZW9mKFNDbWRWYWx1ZSkpKSB7CiAJCQlyZXN1bHQgPSAtRUZBVUxUOwogCQkJYnJlYWs7Ci0JCX07CisJCX0KIAkJaWYgKHNWYWx1ZS5kd1ZhbHVlID09IDEpIHsKICAgICAgICAgICAgIGlmICh2dDY2NTVfaG9zdGFwX3NldF9ob3N0YXBkKHBEZXZpY2UsIDEsIDEpID09IDApewogICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkVuYWJsZSBIT1NUQVBcbiIpOwpAQCAtNDU1LDcgKzQ1NSw3IEBACiAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmc1ZhbHVlLCBwUmVxLT5kYXRhLCBzaXplb2YoU0NtZFZhbHVlKSkpIHsKIAkJCXJlc3VsdCA9IC1FRkFVTFQ7CiAJCQlicmVhazsKLQkJfTsKKwkJfQogCiAJCWlmIChzVmFsdWUuZHdWYWx1ZSA9PSAxKSB7CiAgICAgICAgICAgICBwRGV2aWNlLT5iRW5hYmxlODAyMXggPSB0cnVlOwpAQCAtNDc1LDcgKzQ3NSw3IEBACiAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmc1ZhbHVlLCBwUmVxLT5kYXRhLCBzaXplb2YoU0NtZFZhbHVlKSkpIHsKIAkJCXJlc3VsdCA9IC1FRkFVTFQ7CiAJCQlicmVhazsKLQkJfTsKKwkJfQogCiAJCWlmIChzVmFsdWUuZHdWYWx1ZSA9PSAxKSB7CiAgICAgICAgICAgICBwRGV2aWNlLT5iRW5hYmxlSG9zdFdFUCA9IHRydWU7CkBAIC00OTQsNyArNDk0LDcgQEAKICAgICAgICAgaWYgKGNvcHlfZnJvbV91c2VyKCZzVmFsdWUsIHBSZXEtPmRhdGEsIHNpemVvZihTQ21kVmFsdWUpKSkgewogCQkJcmVzdWx0ID0gLUVGQVVMVDsKIAkJCWJyZWFrOwotCQl9OworCQl9CiAJCWlmIChzVmFsdWUuZHdWYWx1ZSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJ1cCB3cGFkZXZcbiIpOwogCQkgICBtZW1jcHkocERldmljZS0+d3BhZGV2LT5kZXZfYWRkciwgcERldmljZS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwpAQCAtNTE5LDcgKzUxOSw3IEBACiAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmc1N0YXJ0QVBDbWQsIHBSZXEtPmRhdGEsIHNpemVvZihTQ21kU3RhcnRBUCkpKSB7CiAJCQlyZXN1bHQgPSAtRUZBVUxUOwogCQkJYnJlYWs7Ci0JCX07CisJCX0KIAogCSAgICBpZiAoc1N0YXJ0QVBDbWQud0JTU1R5cGUgPT0gQVApIHsKIAkgICAgICAgIHBNZ210LT5lQ29uZmlnTW9kZSA9IFdNQUNfQ09ORklHX0FQOwpAQCAtNjA2LDEzICs2MDYsMTMgQEAKICAgICAgICAgICAgIGlmICghcE5vZGUtPmJBY3RpdmUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBjYkxpc3RDb3VudCsrOwotICAgICAgICB9OworICAgICAgICB9CiAKICAgICAgICAgc05vZGVMaXN0LnVJdGVtID0gY2JMaXN0Q291bnQ7CiAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIocFJlcS0+ZGF0YSwgJnNOb2RlTGlzdCwgc2l6ZW9mKFNOb2RlTGlzdCkpKSB7CiAJCQlyZXN1bHQgPSAtRUZBVUxUOwogCQkJYnJlYWs7Ci0JCX07CisJCX0KICAgICAgICAgcFJlcS0+d1Jlc3VsdCA9IDA7CiAgICAgICAgIGJyZWFrOwogCkBAIC02MjEsNyArNjIxLDcgQEAKICAgICAgICAgaWYgKGNvcHlfZnJvbV91c2VyKCZzTm9kZUxpc3QsIHBSZXEtPmRhdGEsIHNpemVvZihTTm9kZUxpc3QpKSkgewogCQkJcmVzdWx0ID0gLUVGQVVMVDsKIAkJCWJyZWFrOwotCQl9OworCQl9CiAgICAgICAgIHBOb2RlTGlzdCA9IChQU05vZGVMaXN0KWttYWxsb2Moc2l6ZW9mKFNOb2RlTGlzdCkgKyAoc05vZGVMaXN0LnVJdGVtICogc2l6ZW9mKFNOb2RlSXRlbSkpLCAoaW50KUdGUF9BVE9NSUMpOwogICAgICAgICBpZiAocE5vZGVMaXN0ID09IE5VTEwpIHsKICAgICAgICAgICAgIHJlc3VsdCA9IC1FTk9NRU07CkBAIC02NTcsMTEgKzY1NywxMSBAQAogICAgIAkJICAgIGlmIChqaiA+PSBwTm9kZUxpc3QtPnVJdGVtKQogICAgIAkJICAgICAgICBicmVhazsKICAgICAJCX0KLQkJfTsKKwkJfQogICAgICAgICBpZiAoY29weV90b191c2VyKHBSZXEtPmRhdGEsIHBOb2RlTGlzdCwgc2l6ZW9mKFNOb2RlTGlzdCkgKyAoc05vZGVMaXN0LnVJdGVtICogc2l6ZW9mKFNOb2RlSXRlbSkpKSkgewogCQkJcmVzdWx0ID0gLUVGQVVMVDsKIAkJCWJyZWFrOwotCQl9OworCQl9CiAgICAgICAgIGtmcmVlKHBOb2RlTGlzdCk7CiAgICAgICAgIHBSZXEtPndSZXN1bHQgPSAwOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvcG93ZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvcG93ZXIuYwppbmRleCA3MjA3YWNhLi40YzBiMDJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3Bvd2VyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9wb3dlci5jCkBAIC0yMjEsNyArMjIxLDcgQEAKICAgICAgICAgKChwRGV2aWNlLT5kd0lzciYgSVNSX1JYRE1BMCkgIT0gMCkgJiYKICAgICAgICAgKChwRGV2aWNlLT5kd0lzciAmIElTUl9SWERNQTEpICE9IDApKXsKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH07CisgICAgfQogCiAgICAgaWYgKHBNZ210LT5lQ3Vyck1vZGUgIT0gV01BQ19NT0RFX0lCU1NfU1RBKSB7CiAgICAgICAgIGlmIChiQ2hlY2tDb3VudFRvV2FrZVVwICYmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3J4dHguYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvcnh0eC5jCmluZGV4IGM5MjBjZjYuLjY5MzViMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvcnh0eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvcnh0eC5jCkBAIC0yOTAyLDEzICsyOTAyLDEzIEBACiAgICAgICAgIGlmIChwRGV2aWNlLT5iRW5hYmxlSG9zdFdFUCkgewogICAgICAgICAgICAgdU5vZGVJbmRleCA9IDA7CiAgICAgICAgICAgICBiTm9kZUV4aXN0ID0gdHJ1ZTsKLSAgICAgICAgfTsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgaWYgKHBEZXZpY2UtPmJFbmFibGVIb3N0V0VQKSB7CiAgICAgICAgICAgICBpZiAoQlNTREJiSXNTVEFJbk5vZGVEQihwRGV2aWNlLT5wTWdtdCwgKHVuc2lnbmVkIGNoYXIgKikocDgwMjExSGVhZGVyLT5zQTMuYWJ5QWRkcjEpLCAmdU5vZGVJbmRleCkpCiAgICAgICAgICAgICAgICAgYk5vZGVFeGlzdCA9IHRydWU7Ci0gICAgICAgIH07CisgICAgICAgIH0KICAgICAgICAgYk5lZWRBQ0sgPSB0cnVlOwogICAgICAgICBwVHhCdWZIZWFkLT53RklGT0N0bCB8PSBGSUZPQ1RMX05FRURBQ0s7CiAgICAgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd2NtZC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93Y21kLmMKaW5kZXggYzMwMTcwYS4uYmFiM2IwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93Y21kLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93Y21kLmMKQEAgLTM4NSw3ICszODUsNyBAQAogICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAgICAgICAgICAgICAgICAgdkNvbW1hbmRUaW1lcldhaXQoKHZvaWQgKilwRGV2aWNlLCAxMCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHBNZ210LT51U2NhbkNoYW5uZWwgPT0gMCApIHsKICAgICAgICAgICAgICAgICBwTWdtdC0+dVNjYW5DaGFubmVsID0gcERldmljZS0+YnlNaW5DaGFubmVsOwpAQCAtNTE5LDcgKzUxOSw3IEBACiAgICAgICAgICAgICAgICAgdkNvbW1hbmRUaW1lcldhaXQoKHZvaWQgKilwRGV2aWNlLCAxMCk7CiAgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9OworICAgICAgICAgICAgfQogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgQ0FSRGJSYWRpb1Bvd2VyT2ZmXG4iKTsKIAkvLzIwMDgtMDktMDIgIDxtYXJrPglieSBjaGVzdGVyCiAgICAgICAgICAgIC8vIENBUkRiUmFkaW9Qb3dlck9mZihwRGV2aWNlKTsKQEAgLTUzMiw3ICs1MzIsNyBAQAogICAgICAgICAgICAgICAgIHZDb21tYW5kVGltZXJXYWl0KCh2b2lkICopcERldmljZSwgMTApOwogICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KIC8vMjAwOC0wOS0wMiAgPG1hcms+IGJ5IGNoZXN0ZXIKICAgICAgICAgICAgLy8gQ0FSRGJSYWRpb1Bvd2VyT2ZmKHBEZXZpY2UpOwogICAgICAgICAgICAgc19iQ29tbWFuZENvbXBsZXRlKHBEZXZpY2UpOwpAQCAtNjE5LDcgKzYxOSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHZNZ3JDcmVhdGVPd25JQlNTKCh2b2lkICopcERldmljZSwgJlN0YXR1cyk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChTdGF0dXMgIT0gQ01EX1NUQVRVU19TVUNDRVNTKXsKICAgICAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiBXTEFOX0NNRF9JQlNTX0NSRUFURSBmYWlsICEgXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBCU1N2QWRkTXVsdGljYXN0Tm9kZShwRGV2aWNlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC02MzEsNyArNjMxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgdk1nckNyZWF0ZU93bklCU1MoKHZvaWQgKilwRGV2aWNlLCAmU3RhdHVzKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKFN0YXR1cyAhPSBDTURfU1RBVFVTX1NVQ0NFU1MpewogICAgICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgV0xBTl9DTURfSUJTU19DUkVBVEUgZmFpbCAhIFxuIik7Ci0gICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgQlNTdkFkZE11bHRpY2FzdE5vZGUocERldmljZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKHBEZXZpY2UtPmRldikpewogICAgICAgICAgICAgICAgICAgICAgICAgbmV0aWZfd2FrZV9xdWV1ZShwRGV2aWNlLT5kZXYpOwpAQCAtNzgzLDcgKzc4Myw3IEBACiAgICAgICAgICAgICAgICAgdk1nckNyZWF0ZU93bklCU1MoKHZvaWQgKilwRGV2aWNlLCAmU3RhdHVzKTsKICAgICAgICAgICAgICAgICBpZiAoU3RhdHVzICE9IENNRF9TVEFUVVNfU1VDQ0VTUyl7CiAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiB2TWdyQ3JlYXRlT3duSUJTUyBmYWlsICEgXG4iKTsKLSAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAvLyBhbHdheSB0dXJuIG9mZiB1bmljYXN0IGJpdAogICAgICAgICAgICAgICAgIE1BQ3ZSZWdCaXRzT2ZmKHBEZXZpY2UtPlBvcnRPZmZzZXQsIE1BQ19SRUdfUkNSLCBSQ1JfVU5JQ0FTVCk7CiAgICAgICAgICAgICAgICAgcERldmljZS0+YnlSeE1vZGUgJj0gflJDUl9VTklDQVNUOwpAQCAtODE0LDcgKzgxNCw3IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVswXS53RW5RdWV1ZUNudC0tOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIFBTIG5vZGVzIHR4CiAgICAgICAgICAgICBmb3IgKGlpID0gMTsgaWkgPCAoTUFYX05PREVfTlVNICsgMSk7IGlpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd21nci5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93bWdyLmMKaW5kZXggZTU0MDExMC4uYWIyODljMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93bWdyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93bWdyLmMKQEAgLTY2MSw3ICs2NjEsNyBAQAogICAgIGlmICgqcFN0YXR1cyA9PSBDTURfU1RBVFVTX1BFTkRJTkcpIHsKICAgICAgICAgcE1nbXQtPmVDdXJyU3RhdGUgPSBXTUFDX1NUQVRFX0lETEU7CiAgICAgICAgICpwU3RhdHVzID0gQ01EX1NUQVRVU19TVUNDRVNTOwotICAgIH07CisgICAgfQogCiAgICAgcmV0dXJuOwogfQpAQCAtMTAxOSw3ICsxMDE5LDcgQEAKICAgICAgICAgICAgIChzRnJhbWUucFN1cHBSYXRlcyA9PSAwKSl7CiAgICAgICAgICAgICBEQkdfUE9SVDgwKDB4Q0MpOwogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9OworICAgICAgICB9CiAKICAgICAgICAgcE1nbXQtPnNBc3NvY0luZm8uQXNzb2NJbmZvLlJlc3BvbnNlRml4ZWRJRXMuQ2FwYWJpbGl0aWVzID0gKihzRnJhbWUucHdDYXBJbmZvKTsKICAgICAgICAgcE1nbXQtPnNBc3NvY0luZm8uQXNzb2NJbmZvLlJlc3BvbnNlRml4ZWRJRXMuU3RhdHVzQ29kZSA9ICooc0ZyYW1lLnB3U3RhdHVzKTsKQEAgLTEwMzksNyArMTAzOSw3IEBACiAgICAgICAgICAgICBpZiAoIChwTWdtdC0+d0N1cnJBSUQgPj4gMTQpICE9IChCSVQwIHwgQklUMSkgKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkFJRCBmcm9tIEFQLCBoYXMgdHdvIG1zYiBjbGVhci5cbiIpOwotICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0lORk8sIEtFUk5fSU5GTyAiQXNzb2NpYXRpb24gU3VjY2Vzc2Z1bCwgQUlEPSVkLlxuIiwgcE1nbXQtPndDdXJyQUlEICYgfihCSVQxNHxCSVQxNSkpOwogICAgICAgICAgICAgcE1nbXQtPmVDdXJyU3RhdGUgPSBXTUFDX1NUQVRFX0FTU09DOwogICAgICAgICAgICAgQlNTdlVwZGF0ZUFQTm9kZSgodm9pZCAqKXBEZXZpY2UsIHNGcmFtZS5wd0NhcEluZm8sIHNGcmFtZS5wU3VwcFJhdGVzLCBzRnJhbWUucEV4dFN1cHBSYXRlcyk7CkBAIC0xNjkyLDcgKzE2OTIsNyBAQAogICAgICAgICAvL3RyeSB0byBzZW5kIGFzc29jaWF0ZSBwYWNrZXQgYWdhaW4gYmVjYXVzZSBvZiBpbmFjdGl2aXR5IHRpbWVvdXQKICAgICAgIC8vICBpZiAocE1nbXQtPmVDdXJyU3RhdGUgPT0gV01BQ19TVEFURV9BU1NPQykgewogICAgICAgIC8vICAgICB2TWdyUmVBc3NvY0JlZ2luU3RhKChQU0RldmljZSlwRGV2aWNlLCBwTWdtdCwgJkNtZFN0YXR1cyk7Ci0gICAgICAvLyAgfTsKKyAgICAgIC8vICB9CiAgICAgICAgIGlmICgocERldmljZS0+YldQQURFVlVwKSAmJiAocERldmljZS0+c2tiICE9IE5VTEwpKSB7CiAgICAgICAgICAgICAgd3BhaGRyID0gKHZpYXdnZXRfd3BhX2hlYWRlciAqKXBEZXZpY2UtPnNrYi0+ZGF0YTsKICAgICAgICAgICAgICB3cGFoZHItPnR5cGUgPSBWSUFXR0VUX0RJU0FTU09DX01TRzsKQEAgLTE3MDcsNyArMTcwNyw3IEBACiAgICAgICAgICAgICAgbWVtc2V0KHBEZXZpY2UtPnNrYi0+Y2IsIDAsIHNpemVvZihwRGV2aWNlLT5za2ItPmNiKSk7CiAgICAgICAgICAgICAgbmV0aWZfcngocERldmljZS0+c2tiKTsKICAgICAgICAgICAgICBwRGV2aWNlLT5za2IgPSBkZXZfYWxsb2Nfc2tiKChpbnQpcERldmljZS0+cnhfYnVmX3N6KTsKLSAgICAgICAgIH07CisgICAgICAgICB9CiAKICAjaWZkZWYgV1BBX1NVUFBMSUNBTlRfRFJJVkVSX1dFWFRfU1VQUE9SVAogICAvLyBpZihwRGV2aWNlLT5iV1BBU3VwcFdleHRFbmFibGVkID09IHRydWUpCkBAIC0xNzc4LDcgKzE3NzgsNyBAQAogICAgICAgICAgICAgICAgICAgICBuZXRpZl9zdG9wX3F1ZXVlKHBEZXZpY2UtPmRldik7CiAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJMaW5rUGFzcyA9IGZhbHNlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICgocERldmljZS0+YldQQURFVlVwKSAmJiAocERldmljZS0+c2tiICE9IE5VTEwpKSB7CiAgICAgICAgICAgICAgICAgIHdwYWhkciA9ICh2aWF3Z2V0X3dwYV9oZWFkZXIgKilwRGV2aWNlLT5za2ItPmRhdGE7CkBAIC0xNzkzLDcgKzE3OTMsNyBAQAogICAgICAgICAgICAgICAgICBtZW1zZXQocERldmljZS0+c2tiLT5jYiwgMCwgc2l6ZW9mKHBEZXZpY2UtPnNrYi0+Y2IpKTsKICAgICAgICAgICAgICAgICAgbmV0aWZfcngocERldmljZS0+c2tiKTsKICAgICAgICAgICAgICAgICAgcERldmljZS0+c2tiID0gZGV2X2FsbG9jX3NrYigoaW50KXBEZXZpY2UtPnJ4X2J1Zl9zeik7Ci0gICAgICAgICAgIH07CisgICAgICAgICAgIH0KIAogICAgI2lmZGVmIFdQQV9TVVBQTElDQU5UX0RSSVZFUl9XRVhUX1NVUFBPUlQKICAgLy8gaWYocERldmljZS0+YldQQVN1cHBXZXh0RW5hYmxlZCA9PSB0cnVlKQpAQCAtMTkxMiw3ICsxOTEyLDcgQEAKICAgICAgICAgKHNGcmFtZS5wU3VwcFJhdGVzID09IDApICkgewogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJSeCBiZWFjb24gZnJhbWUgZXJyb3JcbiIpOwogICAgICAgICByZXR1cm47Ci0gICAgfTsKKyAgICB9CiAKIAogICAgIGlmIChzRnJhbWUucERTUGFybXMgIT0gTlVMTCkgewpAQCAtMjA1NCw3ICsyMDU0LDcgQEAKICAgICAgICAgICAgICAgICAgICBzRnJhbWUucFNTSUQtPmxlbgogICAgICAgICAgICAgICAgICAgICkgPT0gMCkgewogICAgICAgICAgICAgYklzU1NJREVxdWFsID0gdHJ1ZTsKLSAgICAgICAgfTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGlmICgoV0xBTl9HRVRfQ0FQX0lORk9fRVNTKCpzRnJhbWUucHdDYXBJbmZvKT09IHRydWUpICYmCkBAIC0yMTM4LDggKzIxMzgsOCBAQAogICAgIGlmIChXTEFOX0dFVF9DQVBfSU5GT19FU1MoKnNGcmFtZS5wd0NhcEluZm8pKSB7CiAgICAgICAgIGlmIChzRnJhbWUucENGUGFybXMtPndDRlBEdXJSZW1haW5pbmcgPiAwKSB7CiAgICAgICAgICAgICAvLyBUT0RPOiBkZWFsIHdpdGggQ0ZQIHBlcmlvZCB0byBzZXQgTkFWCi0gICAgICAgIH07Ci0gICAgfTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIEhJRFdPUkQocXdUaW1lc3RhbXApID0gY3B1X3RvX2xlMzIoSElEV09SRCgqc0ZyYW1lLnBxd1RpbWVzdGFtcCkpOwogICAgIExPRFdPUkQocXdUaW1lc3RhbXApID0gY3B1X3RvX2xlMzIoTE9EV09SRCgqc0ZyYW1lLnBxd1RpbWVzdGFtcCkpOwpAQCAtMjE2MCw3ICsyMTYwLDcgQEAKICAgICB9CiAgICAgZWxzZSBpZiAoSElEV09SRChxd1RpbWVzdGFtcCkgPCBISURXT1JEKHF3TG9jYWxUU0YpKSB7CiAgICAgICAgIGJUU0ZPZmZzZXRQb3N0aXZlID0gZmFsc2U7Ci0gICAgfTsKKyAgICB9CiAKICAgICBpZiAoYlRTRk9mZnNldFBvc3RpdmUpIHsKICAgICAgICAgcXdUU0ZPZmZzZXQgPSBDQVJEcUdldFRTRk9mZnNldChwUnhQYWNrZXQtPmJ5UnhSYXRlLCAocXdUaW1lc3RhbXApLCAocXdMb2NhbFRTRikpOwpAQCAtMjIxOCw3ICsyMjE4LDcgQEAKICAgICAgICAgICAgICAgICBpZiAocE1nbXQtPmJJblRJTSkgewogICAgICAgICAgICAgICAgICAgICBQU3ZTZW5kUFNQT0xMKChQU0RldmljZSlwRGV2aWNlKTsKIC8vICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJCQ046UFMtUE9MTCBzZW50Li5cbiIpOwotICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKQEAgLTIyMzEsNyArMjIzMSw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmKFBTYkNvbnNpZGVyUG93ZXJEb3duKHBEZXZpY2UsIGZhbHNlLCBmYWxzZSkpIHsKICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJCQ046IFBvd2VyIGRvd24gbm93Li4uXG4iKTsKLSAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAogICAgICAgICB9CkBAIC0yMzE2LDcgKzIzMTYsNyBAQAogICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0uYkFjdGl2ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVswXS51SW5BY3RpdmVDb3VudCA9IDA7CiAKLSAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoYklzU1NJREVxdWFsKSB7CiAKQEAgLTIzNTYsOSArMjM1Niw5IEBACiAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVwYXJlIGJlYWNvbiBmcmFtZQogICAgICAgICAgICAgICAgICAgICAgYk1nclByZXBhcmVCZWFjb25Ub1NlbmQoKHZvaWQgKilwRGV2aWNlLCBwTWdtdCk7CiAgICAgICAgICAgICAgIC8vICB9Ci0gICAgICAgICAgICB9OworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfTsKKyAgICB9CiAgICAgLy8gZW5kaWFuIGlzc3VlID8/PwogICAgIC8vIFVwZGF0ZSBUU0YKICAgICBpZiAoYlVwZGF0ZVRTRikgewpAQCAtMjU5MCw3ICsyNTkwLDcgQEAKICAgICAgICAgICAgIHBNZ210LT5ieUNTU1BLID0gS0VZX0NUTF9XRVA7CiAgICAgICAgICAgICBwTWdtdC0+YnlDU1NHSyA9IEtFWV9DVExfV0VQOwogICAgICAgICB9Ci0gICAgfTsKKyAgICB9CiAKICAgICBwTWdtdC0+YnlFUlBDb250ZXh0ID0gMDsKIApAQCAtMjY4Myw3ICsyNjgzLDcgQEAKICAgICAgICAqcFN0YXR1cyA9IENNRF9TVEFUVVNfUkVTT1VSQ0VTOwogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9OT1RJQ0UsIEtFUk5fSU5GTyAiQlNTIGZpbmRpbmc6QlNTIGxpc3QgaXMgZW1wdHkuXG4iKTsKICAgICAgICByZXR1cm47Ci0gICAgfTsKKyAgICB9CiAKICAgICAvLyBtZW1zZXQocE1nbXQtPmFieURlc2lyZUJTU0lELCAwLCAgV0xBTl9CU1NJRF9MRU4pOwogICAgIC8vIFNlYXJjaCBrbm93biBCU1MgbGlzdCBmb3IgcHJlZmVyIEJTU0lEIG9yIFNTSUQKQEAgLTI2OTksNyArMjY5OSw3IEBACiAgICAgICAgcEl0ZW1TU0lEID0gKFBXTEFOX0lFX1NTSUQpcE1nbXQtPmFieURlc2lyZVNTSUQ7CiAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfTk9USUNFLCBLRVJOX0lORk8gIlNjYW5uaW5nIFslc10gbm90IGZvdW5kLCBkaXNjb25uZWN0ZWQgIVxuIiwgcEl0ZW1TU0lELT5hYnlTU0lEKTsKICAgICAgICByZXR1cm47Ci0gICAgfTsKKyAgICB9CiAKICAgICBEQkdfUFJUKE1TR19MRVZFTF9OT1RJQ0UsIEtFUk5fSU5GTyAiQVAoQlNTKSBmaW5kaW5nOkZvdW5kIGEgQVAoQlNTKS4uXG4iKTsKICAgICBpZiAoV0xBTl9HRVRfQ0FQX0lORk9fRVNTKGNwdV90b19sZTE2KHBDdXJyLT53Q2FwSW5mbykpKXsKQEAgLTMxNzksNyArMzE3OSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB3RW5kSW5kZXggPSBpaTsKICAgICAgICAgfQotICAgIH07CisgICAgfQogCiAKICAgICAvLyBSb3VuZCBzdGFydCBpbmRleCBkb3duIHRvIG5lYXJlc3QgZXZlbiBudW1iZXIKQEAgLTQzNDMsNyArNDM0Myw3IEBACiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlByb2JlIHJlc3A6RmFpbCBhZGRyOlslcF0gXG4iLCBwUnhQYWNrZXQtPnA4MDIxMUhlYWRlcik7CiAgICAgICAgIERCR19QT1JUODAoMHhDQyk7CiAgICAgICAgIHJldHVybjsKLSAgICB9OworICAgIH0KIAogICAgIGlmKHNGcmFtZS5wU1NJRC0+bGVuID09IDApCiAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiUnggUHJvYmUgcmVzcDogU1NJRCBsZW4gPSAwIFxuIik7CkBAIC00NjI1LDcgKzQ2MjUsNyBAQAogICAgICAgICAgICAgLy9EQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJyeCBiZWFjb25cbiIpOwogICAgICAgICAgICAgaWYgKHBNZ210LT5lU2NhblN0YXRlICE9IFdNQUNfTk9fU0NBTk5JTkcpIHsKICAgICAgICAgICAgICAgICBiSW5TY2FuID0gdHJ1ZTsKLSAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBzX3ZNZ3JSeEJlYWNvbihwRGV2aWNlLCBwTWdtdCwgcFJ4UGFja2V0LCBiSW5TY2FuKTsKICAgICAgICAgICAgIGJyZWFrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dwYWN0bC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93cGFjdGwuYwppbmRleCBmYmFlMTZkLi5hMGY5OTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dwYWN0bC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd3BhY3RsLmMKQEAgLTY1Myw3ICs2NTMsNyBAQAogCiAgICAgICAgICB9CiAKLSAgICB9OworICAgIH0KIAogICBrZnJlZShwdGVtcEJTUyk7CiAKQEAgLTY3OSw3ICs2NzksNyBAQAogICAgICAgICBpZiAoIXBCU1MtPmJBY3RpdmUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgY291bnQrKzsKLSAgICB9OworICAgIH0KIAogICAgIHBCdWYgPSBrY2FsbG9jKGNvdW50LCBzaXplb2Yoc3RydWN0IHZpYXdnZXRfc2Nhbl9yZXN1bHQpLCAoaW50KUdGUF9BVE9NSUMpOwogCkBAIC03MjMsNyArNzIzLDcgQEAKIAogICAgIGlmIChjb3B5X3RvX3VzZXIocGFyYW0tPnUuc2Nhbl9yZXN1bHRzLmJ1ZiwgcEJ1Ziwgc2l6ZW9mKHN0cnVjdCB2aWF3Z2V0X3NjYW5fcmVzdWx0KSAqIGNvdW50KSkgewogCQlyZXQgPSAtRUZBVUxUOwotCX07CisJfQogCXBhcmFtLT51LnNjYW5fcmVzdWx0cy5zY2FuX2NvdW50ID0gY291bnQ7CiAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiIHBhcmFtLT51LnNjYW5fcmVzdWx0cy5zY2FuX2NvdW50ID0gJWRcbiIsIGNvdW50KQogCkBAIC04MzIsNyArODMyLDcgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbkRpc2FibGVkOwotCX07CisJfQogCiAvL0RhdmlkV2FuZyBhZGQgZm9yIFdQQV9zdXBwbGljYW50IHN1cHBvcnQgb3Blbi9zaGFyZSBtb2RlCiAKQEAgLTg3NSw3ICs4NzUsNyBAQAogICAgIGlmIChwQ3VyciA9PSBOVUxMKXsKICAgICBwcmludGsoIndwYV9zZXRfYXNzb2NpYXRlLS0tLT5oaWRkZW4gbW9kZSBzaXRlIHN1cnZleSBiZWZvcmUgYXNzb2NpYXRlLi4uLi4uLlxuIik7CiAgICAgYlNjaGVkdWxlQ29tbWFuZCgodm9pZCAqKSBwRGV2aWNlLCBXTEFOX0NNRF9CU1NJRF9TQ0FOLCBwTWdtdC0+YWJ5RGVzaXJlU1NJRCk7Ci0gIH07CisgIH0KIH0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAgIGJTY2hlZHVsZUNvbW1hbmQoKHZvaWQgKikgcERldmljZSwgV0xBTl9DTURfU1NJRCwgTlVMTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2Jzc2RiLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2Jzc2RiLmMKaW5kZXggMmJkZDBhMi4uYWYwMDZkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9ic3NkYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvYnNzZGIuYwpAQCAtMTE5Miw3ICsxMTkyLDcgQEAKICAgICAgICAgICAgICBtZW1zZXQocERldmljZS0+c2tiLT5jYiwgMCwgc2l6ZW9mKHBEZXZpY2UtPnNrYi0+Y2IpKTsKICAgICAgICAgICAgICBuZXRpZl9yeChwRGV2aWNlLT5za2IpOwogICAgICAgICAgICAgIHBEZXZpY2UtPnNrYiA9IGRldl9hbGxvY19za2IoKGludClwRGV2aWNlLT5yeF9idWZfc3opOwotICAgICAgICAgfTsKKyAgICAgICAgIH0KICAgICNpZmRlZiBXUEFfU1VQUExJQ0FOVF9EUklWRVJfV0VYVF9TVVBQT1JUCiAgIC8vIGlmKHBEZXZpY2UtPmJXUEFTdXBwV2V4dEVuYWJsZWQgPT0gVFJVRSkKICAgICAgIHsKQEAgLTE0MTYsNyArMTQxNiw3IEBACiAJCQl9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9OworICAgICAgICB9CiAKIAlpZiAoKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0lCU1NfU1RBKSB8fAogICAgICAgICAgICAgKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0VTU19BUCkpIHsKQEAgLTE0NzIsOSArMTQ3Miw5IEBACiAJCSAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9OworICAgIH0KIAogICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9kcGMuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvZHBjLmMKaW5kZXggZjRmYjBjNi4uY2I4MTdjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9kcGMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2RwYy5jCkBAIC03MzAsNyArNzMwLDcgQEAKICAgICAgICAgICAgICAgICBwTWdtdC0+YkluVElNV2FrZSA9IEZBTFNFOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfTsKKyAgICB9CiAKICAgICAvLyBOb3cgaXQgb25seSBzdXBwb3J0cyA4MDIuMTFnIEluZnJhc3RydWN0dXJlIE1vZGUsIGFuZCBzdXBwb3J0IHJhdGUgbXVzdCB1cCB0byA1NCBNYnBzCiAgICAgaWYgKHBEZXZpY2UtPmJEaXZlcnNpdHlFbmFibGUgJiYgKEZyYW1lU2l6ZT41MCkgJiYKQEAgLTkxMyw3ICs5MTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KHBEZXZpY2UtPnNrYi0+Y2IsIDAsIHNpemVvZihwRGV2aWNlLT5za2ItPmNiKSk7CiAgICAgICAgICAgICAgICAgICAgICBuZXRpZl9yeChwRGV2aWNlLT5za2IpOwogICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+c2tiID0gZGV2X2FsbG9jX3NrYigoaW50KXBEZXZpY2UtPnJ4X2J1Zl9zeik7Ci0gICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKIApAQCAtMTA0NSw3ICsxMDQ1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiZHBjOiBzZW5kIHZNZ3JEZUF1dGhlbkJlZ2luU3RhIDFcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKLSAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAocE1nbXQtPnNOb2RlREJUYWJsZVtpU0FOb2RlSW5kZXhdLmVOb2RlU3RhdGUgPCBOT0RFX0FTU09DKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIHNlbmQgZGVhc3NvYyBub3RpZmljYXRpb24KICAgICAgICAgICAgICAgICAgICAgLy8gcmVhc29uID0gKDcpIGNsYXNzIDMgcmVjZWl2ZWQgZnJvbSBub25hc3NvYyBzdGEKQEAgLTEwNTcsNyArMTA1Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gImRwYzogc2VuZCB2TWdyRGlzYXNzb2NCZWdpblN0YSAyXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAocE1nbXQtPnNOb2RlREJUYWJsZVtpU0FOb2RlSW5kZXhdLmJQU0VuYWJsZSkgewogICAgICAgICAgICAgICAgICAgICAvLyBkZWxjYXJlIHJlY2VpdmVkIHBzLXBvbGwgZXZlbnQKQEAgLTE0ODgsNyArMTQ4OCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGJSZWxheU9ubHkgPSBUUlVFOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChiUmVsYXlPbmx5IHx8IGJSZWxheUFuZEZvcndhcmQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvaW9jdGwuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvaW9jdGwuYwppbmRleCAyZmUwNzFjLi5jZmU5Yzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2lvY3RsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9pb2N0bC5jCkBAIC05MCw3ICs5MCw3IEBACiAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmc1NjYW5DbWQsIHBSZXEtPmRhdGEsIHNpemVvZihTQ21kU2NhbikpKSB7CiAJCQlyZXN1bHQgPSAtRUZBVUxUOwogCQkJYnJlYWs7Ci0JCX07CisJCX0KIAogICAgICAgICBwSXRlbVNTSUQgPSAoUFdMQU5fSUVfU1NJRClzU2NhbkNtZC5zc2lkOwogICAgICAgICBpZiAocEl0ZW1TU0lELT5sZW4gIT0gMCkgewpAQCAtMTI0LDcgKzEyNCw3IEBACiAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmc1pvbmVUeXBlQ21kLCBwUmVxLT5kYXRhLCBzaXplb2YoU0NtZFpvbmVUeXBlU2V0KSkpIHsKIAkJCXJlc3VsdCA9IC1FRkFVTFQ7CiAJCQlicmVhazsKLQkJfTsKKwkJfQogCiAgICAgICAgICAgaWYoc1pvbmVUeXBlQ21kLmJXcml0ZT09VFJVRSkgewogCSAgLy8vLy8vd3JpdGUgem9uZXR5cGUKQEAgLTE2Myw3ICsxNjMsNyBAQAogCSAgIGlmIChjb3B5X3RvX3VzZXIocFJlcS0+ZGF0YSwgJnNab25lVHlwZUNtZCwgc2l6ZW9mKFNDbWRab25lVHlwZVNldCkpKSB7CiAJCQlyZXN1bHQgPSAtRUZBVUxUOwogCQkJYnJlYWs7Ci0JCX07CisJCX0KIAl9CiAKIAkgICAgIGJyZWFrOwpAQCAtMTczLDcgKzE3Myw3IEBACiAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmc0pvaW5DbWQsIHBSZXEtPmRhdGEsIHNpemVvZihTQ21kQlNTSm9pbikpKSB7CiAJCQlyZXN1bHQgPSAtRUZBVUxUOwogCQkJYnJlYWs7Ci0JCX07CisJCX0KIAogICAgICAgICBwSXRlbVNTSUQgPSAoUFdMQU5fSUVfU1NJRClzSm9pbkNtZC5zc2lkOwogICAgICAgICBtZW1zZXQocE1nbXQtPmFieURlc2lyZVNTSUQsIDAsIFdMQU5fSUVIRFJfTEVOICsgV0xBTl9TU0lEX01BWExFTiArIDEpOwpAQCAtMjIzLDcgKzIyMyw3IEBACiAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmc1dFUENtZCwgcFJlcS0+ZGF0YSwgc2l6ZW9mKFNDbWRTZXRXRVApKSkgewogCQkJcmVzdWx0ID0gLUVGQVVMVDsKIAkJCWJyZWFrOwotCQl9OworCQl9CiAJICAgIGlmIChzV0VQQ21kLmJFbmFibGVXZXAgIT0gVFJVRSkgewogCSAgICAgICAgaW50IHV1OwogCkBAIC0yOTUsNyArMjk1LDcgQEAKICAgICAgICAgaWYgKGNvcHlfdG9fdXNlcihwUmVxLT5kYXRhLCAmc0xpbmtTdGF0dXMsIHNpemVvZihTQ21kTGlua1N0YXR1cykpKSB7CiAJCQlyZXN1bHQgPSAtRUZBVUxUOwogCQkJYnJlYWs7Ci0JCX07CisJCX0KIAogICAgICAgICBicmVhazsKIApAQCAtMzA3LDEyICszMDcsMTIgQEAKICAgICAgICAgICAgIGlmICghcEJTUy0+YkFjdGl2ZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGNiTGlzdENvdW50Kys7Ci0gICAgICAgIH07CisgICAgICAgIH0KICAgICAgICAgc0xpc3QudUl0ZW0gPSBjYkxpc3RDb3VudDsKICAgICAgICAgaWYgKGNvcHlfdG9fdXNlcihwUmVxLT5kYXRhLCAmc0xpc3QsIHNpemVvZihTQlNTSURMaXN0KSkpIHsKIAkJCXJlc3VsdCA9IC1FRkFVTFQ7CiAJCQlicmVhazsKLQkJfTsKKwkJfQogICAgICAgICBwUmVxLT53UmVzdWx0ID0gMDsKICAgICAgICAgYnJlYWs7CiAKQEAgLTMyMCw3ICszMjAsNyBAQAogICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoJnNMaXN0LCBwUmVxLT5kYXRhLCBzaXplb2YoU0JTU0lETGlzdCkpKSB7CiAJCQlyZXN1bHQgPSAtRUZBVUxUOwogCQkJYnJlYWs7Ci0JCX07CisJCX0KICAgICAgICAgcExpc3QgPSAoUFNCU1NJRExpc3Qpa21hbGxvYyhzaXplb2YoU0JTU0lETGlzdCkgKyAoc0xpc3QudUl0ZW0gKiBzaXplb2YoU0JTU0lESXRlbSkpLCAoaW50KUdGUF9BVE9NSUMpOwogICAgICAgICBpZiAocExpc3QgPT0gTlVMTCkgewogICAgICAgICAgICAgcmVzdWx0ID0gLUVOT01FTTsKQEAgLTM2Miw3ICszNjIsNyBAQAogICAgICAgICBpZiAoY29weV90b191c2VyKHBSZXEtPmRhdGEsIHBMaXN0LCBzaXplb2YoU0JTU0lETGlzdCkgKyAoc0xpc3QudUl0ZW0gKiBzaXplb2YoU0JTU0lESXRlbSkpKSkgewogCQkJcmVzdWx0ID0gLUVGQVVMVDsKIAkJCWJyZWFrOwotCQl9OworCQl9CiAgICAgICAgIGtmcmVlKHBMaXN0KTsKICAgICAgICAgcFJlcS0+d1Jlc3VsdCA9IDA7CiAgICAgICAgIGJyZWFrOwpAQCAtMzcxLDE0ICszNzEsMTQgQEAKICAgICAgICAgaWYgKGNvcHlfdG9fdXNlcihwUmVxLT5kYXRhLCAmKHBEZXZpY2UtPnM4MDJfMTFDb3VudGVyKSwgc2l6ZW9mKFNEb3QxMU1JQkNvdW50KSkpIHsKIAkJCXJlc3VsdCA9IC1FRkFVTFQ7CiAJCQlicmVhazsKLQkJfTsKKwkJfQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgV0xBTl9DTURfR0VUX1NUQVQ6CiAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIocFJlcS0+ZGF0YSwgJihwRGV2aWNlLT5zY1N0YXRpc3RpYyksIHNpemVvZihTU3RhdENvdW50ZXIpKSkgewogCQkJcmVzdWx0ID0gLUVGQVVMVDsKIAkJCWJyZWFrOwotCQl9OworCQl9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV0xBTl9DTURfU1RPUF9NQUM6CiAKQEAgLTQxNSw3ICs0MTUsNyBAQAogICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoJnNWYWx1ZSwgcFJlcS0+ZGF0YSwgc2l6ZW9mKFNDbWRWYWx1ZSkpKSB7CiAJCQlyZXN1bHQgPSAtRUZBVUxUOwogCQkJYnJlYWs7Ci0JCX07CisJCX0KIAkJaWYgKHNWYWx1ZS5kd1ZhbHVlID09IDEpIHsKICAgICAgICAgICAgIGlmICh2dDY2NTZfaG9zdGFwX3NldF9ob3N0YXBkKHBEZXZpY2UsIDEsIDEpID09IDApewogICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkVuYWJsZSBIT1NUQVBcbiIpOwpAQCAtNDQzLDcgKzQ0Myw3IEBACiAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmc1ZhbHVlLCBwUmVxLT5kYXRhLCBzaXplb2YoU0NtZFZhbHVlKSkpIHsKIAkJCXJlc3VsdCA9IC1FRkFVTFQ7CiAJCQlicmVhazsKLQkJfTsKKwkJfQogCiAJCWlmIChzVmFsdWUuZHdWYWx1ZSA9PSAxKSB7CiAgICAgICAgICAgICBwRGV2aWNlLT5iRW5hYmxlODAyMXggPSBUUlVFOwpAQCAtNDYzLDcgKzQ2Myw3IEBACiAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmc1ZhbHVlLCBwUmVxLT5kYXRhLCBzaXplb2YoU0NtZFZhbHVlKSkpIHsKIAkJCXJlc3VsdCA9IC1FRkFVTFQ7CiAJCQlicmVhazsKLQkJfTsKKwkJfQogCiAJCWlmIChzVmFsdWUuZHdWYWx1ZSA9PSAxKSB7CiAgICAgICAgICAgICBwRGV2aWNlLT5iRW5hYmxlSG9zdFdFUCA9IFRSVUU7CkBAIC00ODIsNyArNDgyLDcgQEAKICAgICAgICAgaWYgKGNvcHlfZnJvbV91c2VyKCZzVmFsdWUsIHBSZXEtPmRhdGEsIHNpemVvZihTQ21kVmFsdWUpKSkgewogCQkJcmVzdWx0ID0gLUVGQVVMVDsKIAkJCWJyZWFrOwotCQl9OworCQl9CiAJCWlmIChzVmFsdWUuZHdWYWx1ZSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJ1cCB3cGFkZXZcbiIpOwogCQkgICBtZW1jcHkocERldmljZS0+d3BhZGV2LT5kZXZfYWRkciwKQEAgLTUwNyw3ICs1MDcsNyBAQAogICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoJnNTdGFydEFQQ21kLCBwUmVxLT5kYXRhLCBzaXplb2YoU0NtZFN0YXJ0QVApKSkgewogCQkJcmVzdWx0ID0gLUVGQVVMVDsKIAkJCWJyZWFrOwotCQl9OworCQl9CiAKIAkgICAgaWYgKHNTdGFydEFQQ21kLndCU1NUeXBlID09IEFQKSB7CiAJICAgICAgICBwTWdtdC0+ZUNvbmZpZ01vZGUgPSBXTUFDX0NPTkZJR19BUDsKQEAgLTU5NCwxMyArNTk0LDEzIEBACiAgICAgICAgICAgICBpZiAoIXBOb2RlLT5iQWN0aXZlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY2JMaXN0Q291bnQrKzsKLSAgICAgICAgfTsKKyAgICAgICAgfQogCiAgICAgICAgIHNOb2RlTGlzdC51SXRlbSA9IGNiTGlzdENvdW50OwogICAgICAgICBpZiAoY29weV90b191c2VyKHBSZXEtPmRhdGEsICZzTm9kZUxpc3QsIHNpemVvZihTTm9kZUxpc3QpKSkgewogCQkJcmVzdWx0ID0gLUVGQVVMVDsKIAkJCWJyZWFrOwotCQl9OworCQl9CiAgICAgICAgIHBSZXEtPndSZXN1bHQgPSAwOwogICAgICAgICBicmVhazsKIApAQCAtNjA5LDcgKzYwOSw3IEBACiAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmc05vZGVMaXN0LCBwUmVxLT5kYXRhLCBzaXplb2YoU05vZGVMaXN0KSkpIHsKIAkJCXJlc3VsdCA9IC1FRkFVTFQ7CiAJCQlicmVhazsKLQkJfTsKKwkJfQogICAgICAgICBwTm9kZUxpc3QgPSAoUFNOb2RlTGlzdClrbWFsbG9jKHNpemVvZihTTm9kZUxpc3QpICsgKHNOb2RlTGlzdC51SXRlbSAqIHNpemVvZihTTm9kZUl0ZW0pKSwgKGludClHRlBfQVRPTUlDKTsKICAgICAgICAgaWYgKHBOb2RlTGlzdCA9PSBOVUxMKSB7CiAgICAgICAgICAgICByZXN1bHQgPSAtRU5PTUVNOwpAQCAtNjQ1LDExICs2NDUsMTEgQEAKICAgICAJCSAgICBpZiAoamogPj0gcE5vZGVMaXN0LT51SXRlbSkKICAgICAJCSAgICAgICAgYnJlYWs7CiAgICAgCQl9Ci0JCX07CisJCX0KICAgICAgICAgaWYgKGNvcHlfdG9fdXNlcihwUmVxLT5kYXRhLCBwTm9kZUxpc3QsIHNpemVvZihTTm9kZUxpc3QpICsgKHNOb2RlTGlzdC51SXRlbSAqIHNpemVvZihTTm9kZUl0ZW0pKSkpIHsKIAkJCXJlc3VsdCA9IC1FRkFVTFQ7CiAJCQlicmVhazsKLQkJfTsKKwkJfQogICAgICAgICBrZnJlZShwTm9kZUxpc3QpOwogICAgICAgICBwUmVxLT53UmVzdWx0ID0gMDsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21haW5fdXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21haW5fdXNiLmMKaW5kZXggYWYxNGFiMC4uZTE4ZWZkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9tYWluX3VzYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWFpbl91c2IuYwpAQCAtNzA5LDcgKzcwOSw3IEBACiAJICAgICAgICBpZihpaT4yMCkKIAkJICBicmVhazsKICAgICAgICAgICAgICAgfQotICAgICAgICAgICB9OworICAgICAgICAgICB9CiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKQEAgLTk1NSw3ICs5NTUsNiBAQAogCXBEZXZpY2UtPnBJbnRlcnJ1cHRVUkIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpOwogCWlmIChwRGV2aWNlLT5wSW50ZXJydXB0VVJCID09IE5VTEwpIHsKIAkgICAgREJHX1BSVChNU0dfTEVWRUxfRVJSLEtFUk5fRVJSIkZhaWxlZCB0byBhbGxvYyBpbnQgdXJiXG4iKTsKLSAgIAkgICAgdXNiX2tpbGxfdXJiKHBEZXZpY2UtPnBDb250cm9sVVJCKTsKIAkgICAgdXNiX2ZyZWVfdXJiKHBEZXZpY2UtPnBDb250cm9sVVJCKTsKIAkgICAgZ290byBmcmVlX3J4X3R4OwogCX0KQEAgLTk2Myw4ICs5NjIsNiBAQAogICAgIHBEZXZpY2UtPmludEJ1Zi5wRGF0YUJ1ZiA9IGttYWxsb2MoTUFYX0lOVEVSUlVQVF9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAocERldmljZS0+aW50QnVmLnBEYXRhQnVmID09IE5VTEwpIHsKIAkgICAgREJHX1BSVChNU0dfTEVWRUxfRVJSLEtFUk5fRVJSIkZhaWxlZCB0byBhbGxvYyBpbnQgYnVmXG4iKTsKLSAgIAkgICAgdXNiX2tpbGxfdXJiKHBEZXZpY2UtPnBDb250cm9sVVJCKTsKLSAgIAkgICAgdXNiX2tpbGxfdXJiKHBEZXZpY2UtPnBJbnRlcnJ1cHRVUkIpOwogCSAgICB1c2JfZnJlZV91cmIocERldmljZS0+cENvbnRyb2xVUkIpOwogCSAgICB1c2JfZnJlZV91cmIocERldmljZS0+cEludGVycnVwdFVSQik7CiAJICAgIGdvdG8gZnJlZV9yeF90eDsKQEAgLTk5NSw3ICs5OTIsNyBAQAogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfRVJSLEtFUk5fRVJSICIlczogY2FuIG5vdCBhbGxvYyBmcmFnIGJ1ZnNcbiIsCiAgICAgICAgICAgICAgICAgcERldmljZS0+ZGV2LT5uYW1lKTsKICAgICAgICAgICAgIGdvdG8gZnJlZV9mcmFnOwotICAgICAgICB9OworICAgICAgICB9CiAgICAgfQogICAgIHBEZXZpY2UtPmNiREZDQiA9IENCX01BWF9SWF9GUkFHOwogICAgIHBEZXZpY2UtPmNiRnJlZURGQ0IgPSBwRGV2aWNlLT5jYkRGQ0I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3J4dHguYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcnh0eC5jCmluZGV4IDUxODVkNjEuLjliNjRiMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcnh0eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcnh0eC5jCkBAIC0yNDQxLDEzICsyNDQxLDEzIEBACiAgICAgICAgIGlmIChwRGV2aWNlLT5iRW5hYmxlSG9zdFdFUCkgewogICAgICAgICAgICAgdU5vZGVJbmRleCA9IDA7CiAgICAgICAgICAgICBiTm9kZUV4aXN0ID0gVFJVRTsKLSAgICAgICAgfTsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgaWYgKHBEZXZpY2UtPmJFbmFibGVIb3N0V0VQKSB7CiAgICAgICAgICAgICBpZiAoQlNTYklzU1RBSW5Ob2RlREIocERldmljZSwgKFBCWVRFKShwODAyMTFIZWFkZXItPnNBMy5hYnlBZGRyMSksICZ1Tm9kZUluZGV4KSkKICAgICAgICAgICAgICAgICBiTm9kZUV4aXN0ID0gVFJVRTsKLSAgICAgICAgfTsKKyAgICAgICAgfQogICAgICAgICBiTmVlZEFDSyA9IFRSVUU7CiAgICAgICAgIHBUeEJ1ZkhlYWQtPndGSUZPQ3RsIHw9IEZJRk9DVExfTkVFREFDSzsKICAgICB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni93Y21kLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3djbWQuYwppbmRleCAwMTlmYjUyLi43OGVhMTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3djbWQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3djbWQuYwpAQCAtNjQyLDcgKzY0Miw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIChTdGF0dXMgIT0gQ01EX1NUQVRVU19TVUNDRVNTKXsKIAkJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLAogCQkJCUtFUk5fSU5GTyAiV0xBTl9DTURfSUJTU19DUkVBVEUgZmFpbCFcbiIpOwotICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIEJTU3ZBZGRNdWx0aWNhc3ROb2RlKHBEZXZpY2UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzX2JDbGVhckJTU0lEX1NDQU4ocERldmljZSk7CkBAIC02NTgsNyArNjU4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgKFN0YXR1cyAhPSBDTURfU1RBVFVTX1NVQ0NFU1MpewogCQkJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsCiAJCQkJS0VSTl9JTkZPICJXTEFOX0NNRF9JQlNTX0NSRUFURSBmYWlsIVxuIik7Ci0gICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgQlNTdkFkZE11bHRpY2FzdE5vZGUocERldmljZSk7CiAgICAgICAgICAgICAgICAgICAgIHNfYkNsZWFyQlNTSURfU0NBTihwRGV2aWNlKTsKIC8qCkBAIC03OTMsNyArNzkzLDcgQEAKIAkJaWYgKFN0YXR1cyAhPSBDTURfU1RBVFVTX1NVQ0NFU1MpIHsKIAkJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLAogCQkJCUtFUk5fSU5GTyAidk1nckNyZWF0ZU93bklCU1MgZmFpbCFcbiIpOwotICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIC8vIGFsd2F5IHR1cm4gb2ZmIHVuaWNhc3QgYml0CiAgICAgICAgICAgICAgICAgTUFDdlJlZ0JpdHNPZmYocERldmljZSwgTUFDX1JFR19SQ1IsIFJDUl9VTklDQVNUKTsKICAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieVJ4TW9kZSAmPSB+UkNSX1VOSUNBU1Q7CkBAIC04MjcsNyArODI3LDcgQEAKIAogICAgICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlWzBdLndFblF1ZXVlQ250LS07CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gUFMgbm9kZXMgdHgKICAgICAgICAgICAgIGZvciAoaWkgPSAxOyBpaSA8IChNQVhfTk9ERV9OVU0gKyAxKTsgaWkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni93bWdyLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3dtZ3IuYwppbmRleCAyZWMyMDBkLi5kNjc3NDhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3dtZ3IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3dtZ3IuYwpAQCAtNTkzLDcgKzU5Myw3IEBACiAgICAgaWYgKCpwU3RhdHVzID09IENNRF9TVEFUVVNfUEVORElORykgewogICAgICAgICBwTWdtdC0+ZUN1cnJTdGF0ZSA9IFdNQUNfU1RBVEVfSURMRTsKICAgICAgICAgKnBTdGF0dXMgPSBDTURfU1RBVFVTX1NVQ0NFU1M7Ci0gICAgfTsKKyAgICB9CiAKICAgICByZXR1cm47CiB9CkBAIC05NDIsNyArOTQyLDcgQEAKIAkgICAgfHwgKHNGcmFtZS5wU3VwcFJhdGVzID09IE5VTEwpKSB7CiAJCURCR19QT1JUODAoMHhDQyk7CiAJCXJldHVybjsKLSAgICAgICAgfTsKKyAgICAgICAgfQogCiAgICAgICAgIHBNZ210LT5zQXNzb2NJbmZvLkFzc29jSW5mby5SZXNwb25zZUZpeGVkSUVzLkNhcGFiaWxpdGllcyA9ICooc0ZyYW1lLnB3Q2FwSW5mbyk7CiAgICAgICAgIHBNZ210LT5zQXNzb2NJbmZvLkFzc29jSW5mby5SZXNwb25zZUZpeGVkSUVzLlN0YXR1c0NvZGUgPSAqKHNGcmFtZS5wd1N0YXR1cyk7CkBAIC05NjIsNyArOTYyLDcgQEAKICAgICAgICAgICAgIGlmICggKHBNZ210LT53Q3VyckFJRCA+PiAxNCkgIT0gKEJJVDAgfCBCSVQxKSApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiQUlEIGZyb20gQVAsIGhhcyB0d28gbXNiIGNsZWFyLlxuIik7Ci0gICAgICAgICAgICB9OworICAgICAgICAgICAgfQogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfSU5GTywgS0VSTl9JTkZPICJBc3NvY2lhdGlvbiBTdWNjZXNzZnVsLCBBSUQ9JWQuXG4iLCBwTWdtdC0+d0N1cnJBSUQgJiB+KEJJVDE0fEJJVDE1KSk7CiAgICAgICAgICAgICBwTWdtdC0+ZUN1cnJTdGF0ZSA9IFdNQUNfU1RBVEVfQVNTT0M7CiAJICAgIEJTU3ZVcGRhdGVBUE5vZGUoKHZvaWQgKikgcERldmljZSwKQEAgLTE2MjEsNyArMTYyMSw3IEBACiAgICAgICAgICAgICAgbWVtc2V0KHBEZXZpY2UtPnNrYi0+Y2IsIDAsIHNpemVvZihwRGV2aWNlLT5za2ItPmNiKSk7CiAgICAgICAgICAgICAgbmV0aWZfcngocERldmljZS0+c2tiKTsKICAgICAgICAgICAgICBwRGV2aWNlLT5za2IgPSBkZXZfYWxsb2Nfc2tiKChpbnQpcERldmljZS0+cnhfYnVmX3N6KTsKLSAgICAgICAgIH07CisgICAgICAgICB9CiAKICAgICAgICAgLy9UT0RPOiBkbyBzb21ldGhpbmcgbGV0IHVwcGVyIGxheWVyIGtub3cgb3IKICAgICAgICAgLy90cnkgdG8gc2VuZCBhc3NvY2lhdGUgcGFja2V0IGFnYWluIGJlY2F1c2Ugb2YgaW5hY3Rpdml0eSB0aW1lb3V0CkBAIC0xNjM2LDcgKzE2MzYsNyBAQAogCQkgIHBEZXZpY2UtPmJ5UmVBc3NvY0NvdW50ICsrOwogCQkgIHJldHVybjsgICAgICAgLy9taWtlIGFkZDogeW91J2xsIHJldHJ5IGZvciBtYW55IHRpbWVzLCBzbyBpdCBjYW5uJ3QgYmUgcmVnYXJkZWQgYXMgZGlzY29ubmVjdGVkIQogICAgICAgICAgICAgICB9Ci0gICAgICAgIH07CisgICAgICAgIH0KIAogICAgI2lmZGVmIFdQQV9TVVBQTElDQU5UX0RSSVZFUl9XRVhUX1NVUFBPUlQKICAgLy8gaWYocERldmljZS0+YldQQVN1cHBXZXh0RW5hYmxlZCA9PSBUUlVFKQpAQCAtMTcxMCw3ICsxNzEwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+YkxpbmtQYXNzID0gRkFMU0U7CiAgICAgICAgICAgICAgICAgICAgIENvbnRyb2x2TWFza0J5dGUocERldmljZSxNRVNTQUdFX1JFUVVFU1RfTUFDUkVHLE1BQ19SRUdfUEFQRURFTEFZLExFRFNUU19TVFMsTEVEU1RTX1NMT1cpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICgocERldmljZS0+YldQQURFVlVwKSAmJiAocERldmljZS0+c2tiICE9IE5VTEwpKSB7CiAgICAgICAgICAgICAgICAgIHdwYWhkciA9ICh2aWF3Z2V0X3dwYV9oZWFkZXIgKilwRGV2aWNlLT5za2ItPmRhdGE7CkBAIC0xNzI1LDcgKzE3MjUsNyBAQAogICAgICAgICAgICAgICAgICBtZW1zZXQocERldmljZS0+c2tiLT5jYiwgMCwgc2l6ZW9mKHBEZXZpY2UtPnNrYi0+Y2IpKTsKICAgICAgICAgICAgICAgICAgbmV0aWZfcngocERldmljZS0+c2tiKTsKICAgICAgICAgICAgICAgICAgcERldmljZS0+c2tiID0gZGV2X2FsbG9jX3NrYigoaW50KXBEZXZpY2UtPnJ4X2J1Zl9zeik7Ci0gICAgICAgICAgIH07CisgICAgICAgICAgIH0KIAogICAgI2lmZGVmIFdQQV9TVVBQTElDQU5UX0RSSVZFUl9XRVhUX1NVUFBPUlQKICAgLy8gaWYocERldmljZS0+YldQQVN1cHBXZXh0RW5hYmxlZCA9PSBUUlVFKQpAQCAtMTg0NSw3ICsxODQ1LDcgQEAKIAogCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlJ4IGJlYWNvbiBmcmFtZSBlcnJvclxuIik7CiAJcmV0dXJuOwotICAgIH07CisgICAgfQogCiAgICAgaWYoIGJ5Q3VyckNoYW5uZWwgPiBDQl9NQVhfQ0hBTk5FTF8yNEcgKQogICAgIHsKQEAgLTE5NzQsNyArMTk3NCw3IEBACiAgICAgICAgICAgICAgICAgICAgc0ZyYW1lLnBTU0lELT5sZW4KICAgICAgICAgICAgICAgICAgICApID09IDApIHsKICAgICAgICAgICAgIGJJc1NTSURFcXVhbCA9IFRSVUU7Ci0gICAgICAgIH07CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoKFdMQU5fR0VUX0NBUF9JTkZPX0VTUygqc0ZyYW1lLnB3Q2FwSW5mbyk9PSBUUlVFKSAmJgpAQCAtMjA3NCw4ICsyMDc0LDggQEAKICAgICBpZiAoV0xBTl9HRVRfQ0FQX0lORk9fRVNTKCpzRnJhbWUucHdDYXBJbmZvKSkgewogICAgICAgICBpZiAoc0ZyYW1lLnBDRlBhcm1zLT53Q0ZQRHVyUmVtYWluaW5nID4gMCkgewogICAgICAgICAgICAgLy8gVE9ETzogZGVhbCB3aXRoIENGUCBwZXJpb2QgdG8gc2V0IE5BVgotICAgICAgICB9OwotICAgIH07CisgICAgICAgIH0KKyAgICB9CiAKICAgICBISURXT1JEKHF3VGltZXN0YW1wKSA9IGNwdV90b19sZTMyKEhJRFdPUkQoKnNGcmFtZS5wcXdUaW1lc3RhbXApKTsKICAgICBMT0RXT1JEKHF3VGltZXN0YW1wKSA9IGNwdV90b19sZTMyKExPRFdPUkQoKnNGcmFtZS5wcXdUaW1lc3RhbXApKTsKQEAgLTIwOTYsNyArMjA5Niw3IEBACiAgICAgfQogICAgIGVsc2UgaWYgKEhJRFdPUkQocXdUaW1lc3RhbXApIDwgSElEV09SRChxd0xvY2FsVFNGKSkgewogICAgICAgICBiVFNGT2Zmc2V0UG9zdGl2ZSA9IEZBTFNFOwotICAgIH07CisgICAgfQogCiAgICAgaWYgKGJUU0ZPZmZzZXRQb3N0aXZlKSB7CiAgICAgICAgIHF3VFNGT2Zmc2V0ID0gQ0FSRHFHZXRUU0ZPZmZzZXQocFJ4UGFja2V0LT5ieVJ4UmF0ZSwgKHF3VGltZXN0YW1wKSwgKHF3TG9jYWxUU0YpKTsKQEAgLTIxNTQsNyArMjE1NCw3IEBACiAgICAgICAgICAgICAgICAgaWYgKHBNZ210LT5iSW5USU0pIHsKICAgICAgICAgICAgICAgICAgICAgUFN2U2VuZFBTUE9MTCgoUFNEZXZpY2UpcERldmljZSk7CiAvLyAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiQkNOOlBTLVBPTEwgc2VudC4uXG4iKTsKLSAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7CkBAIC0yMTY3LDcgKzIxNjcsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZihQU2JDb25zaWRlclBvd2VyRG93bihwRGV2aWNlLCBGQUxTRSwgRkFMU0UpKSB7CiAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiQkNOOiBQb3dlciBkb3duIG5vdy4uLlxuIik7Ci0gICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKICAgICAgICAgfQpAQCAtMjI0Nyw3ICsyMjQ3LDcgQEAKICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlWzBdLmJBY3RpdmUgPSBUUlVFOwogICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0udUluQWN0aXZlQ291bnQgPSAwOwogCi0gICAgICAgICAgICB9OworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGJJc1NTSURFcXVhbCkgewogCkBAIC0yMjkyLDkgKzIyOTIsOSBAQAogICAgICAgICAgICAgICAgICAgICAgLy8gUHJlcGFyZSBiZWFjb24gZnJhbWUKIAkJCWJNZ3JQcmVwYXJlQmVhY29uVG9TZW5kKCh2b2lkICopIHBEZXZpY2UsIHBNZ210KTsKICAgICAgICAgICAgICAgLy8gIH0KLSAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9OworICAgIH0KICAgICAvLyBlbmRpYW4gaXNzdWUgPz8/CiAgICAgLy8gVXBkYXRlIFRTRgogICAgIGlmIChiVXBkYXRlVFNGKSB7CkBAIC0yNTU2LDcgKzI1NTYsNyBAQAogICAgICAgICAgICAgcE1nbXQtPmJ5Q1NTUEsgPSBLRVlfQ1RMX1dFUDsKICAgICAgICAgICAgIHBNZ210LT5ieUNTU0dLID0gS0VZX0NUTF9XRVA7CiAgICAgICAgIH0KLSAgICB9OworICAgIH0KIAogICAgIHBNZ210LT5ieUVSUENvbnRleHQgPSAwOwogCkBAIC0yNjE0LDcgKzI2MTQsNyBAQAogICAgICAgICpwU3RhdHVzID0gQ01EX1NUQVRVU19SRVNPVVJDRVM7CiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX05PVElDRSwgS0VSTl9JTkZPICJCU1MgZmluZGluZzpCU1MgbGlzdCBpcyBlbXB0eS5cbiIpOwogICAgICAgIHJldHVybjsKLSAgICB9OworICAgIH0KIAogICAgIC8vIG1lbXNldChwTWdtdC0+YWJ5RGVzaXJlQlNTSUQsIDAsICBXTEFOX0JTU0lEX0xFTik7CiAgICAgLy8gU2VhcmNoIGtub3duIEJTUyBsaXN0IGZvciBwcmVmZXIgQlNTSUQgb3IgU1NJRApAQCAtMjYzMCw3ICsyNjMwLDcgQEAKICAgICAgICBwSXRlbVNTSUQgPSAoUFdMQU5fSUVfU1NJRClwTWdtdC0+YWJ5RGVzaXJlU1NJRDsKICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9OT1RJQ0UsIEtFUk5fSU5GTyAiU2Nhbm5pbmcgWyVzXSBub3QgZm91bmQsIGRpc2Nvbm5lY3RlZCAhXG4iLCBwSXRlbVNTSUQtPmFieVNTSUQpOwogICAgICAgIHJldHVybjsKLSAgICB9OworICAgIH0KIAogICAgIERCR19QUlQoTVNHX0xFVkVMX05PVElDRSwgS0VSTl9JTkZPICJBUChCU1MpIGZpbmRpbmc6Rm91bmQgYSBBUChCU1MpLi5cbiIpOwogCkBAIC0zMDYxLDcgKzMwNjEsNyBAQAogICAgICAgICBNQUN2UmVnQml0c09uKHBEZXZpY2UsIE1BQ19SRUdfUkNSLCBSQ1JfQlNTSUQpOwogICAgICAgICBwRGV2aWNlLT5ieVJ4TW9kZSB8PSBSQ1JfQlNTSUQ7CiAgICAgICAgIHBNZ210LT5iQ3VyckJTU0lERmlsdGVyT24gPSBUUlVFOwotICAgIH07CisgICAgfQogCiAgICAgaWYgKHBEZXZpY2UtPmJ5QkJUeXBlID09IEJCX1RZUEVfMTFBKSB7CiAgICAgICAgIG1lbWNweShwTWdtdC0+YWJ5Q3VyclN1cHBSYXRlcywgJmFieUN1cnJTdXBwUmF0ZXNBWzBdLCBzaXplb2YoYWJ5Q3VyclN1cHBSYXRlc0EpKTsKQEAgLTMxNjcsNyArMzE2Nyw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB3RW5kSW5kZXggPSAoV09SRClpaTsKICAgICAgICAgfQotICAgIH07CisgICAgfQogCiAKICAgICAvLyBSb3VuZCBzdGFydCBpbmRleCBkb3duIHRvIG5lYXJlc3QgZXZlbiBudW1iZXIKQEAgLTQyMDksNyArNDIwOSw3IEBACiAJCXBSeFBhY2tldC0+cDgwMjExSGVhZGVyKTsKIAlEQkdfUE9SVDgwKDB4Q0MpOwogCXJldHVybjsKLSAgICB9OworICAgIH0KIAogICAgIGlmKHNGcmFtZS5wU1NJRC0+bGVuID09IDApCiAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiUnggUHJvYmUgcmVzcDogU1NJRCBsZW4gPSAwIFxuIik7CkBAIC00NDkxLDcgKzQ0OTEsNyBAQAogICAgICAgICAgICAgLy9EQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJyeCBiZWFjb25cbiIpOwogICAgICAgICAgICAgaWYgKHBNZ210LT5lU2NhblN0YXRlICE9IFdNQUNfTk9fU0NBTk5JTkcpIHsKICAgICAgICAgICAgICAgICBiSW5TY2FuID0gVFJVRTsKLSAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBzX3ZNZ3JSeEJlYWNvbihwRGV2aWNlLCBwTWdtdCwgcFJ4UGFja2V0LCBiSW5TY2FuKTsKICAgICAgICAgICAgIGJyZWFrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3dwYWN0bC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni93cGFjdGwuYwppbmRleCA4NzUyNzM2Li45MjE2ZGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3dwYWN0bC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd3BhY3RsLmMKQEAgLTY2MCw3ICs2NjAsNyBAQAogCiAgICAgICAgICB9CiAKLSAgICB9OworICAgIH0KIAogICBrZnJlZShwdGVtcEJTUyk7CiAKQEAgLTY3Myw3ICs2NzMsNyBAQAogICAgICAgICBpZiAoIXBCU1MtPmJBY3RpdmUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgY291bnQrKzsKLSAgICB9OworICAgIH0KIAogICAgIHBCdWYgPSBrY2FsbG9jKGNvdW50LCBzaXplb2Yoc3RydWN0IHZpYXdnZXRfc2Nhbl9yZXN1bHQpLCAoaW50KUdGUF9BVE9NSUMpOwogCkBAIC03MjksNyArNzI5LDcgQEAKIAogICAgIGlmIChjb3B5X3RvX3VzZXIocGFyYW0tPnUuc2Nhbl9yZXN1bHRzLmJ1ZiwgcEJ1Ziwgc2l6ZW9mKHN0cnVjdCB2aWF3Z2V0X3NjYW5fcmVzdWx0KSAqIGNvdW50KSkgewogCQlyZXQgPSAtRUZBVUxUOwotCX07CisJfQogCXBhcmFtLT51LnNjYW5fcmVzdWx0cy5zY2FuX2NvdW50ID0gY291bnQ7CiAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiIHBhcmFtLT51LnNjYW5fcmVzdWx0cy5zY2FuX2NvdW50ID0gJWRcbiIsIGNvdW50KQogCkBAIC04MzEsNyArODMxLDcgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbkRpc2FibGVkOwotCX07CisJfQogCiAgICAgICAgICAgIHBNZ210LT5Sb2FtX2RibSA9IHBhcmFtLT51LndwYV9hc3NvY2lhdGUucm9hbV9kYm07CiAgICAgICAgICAvLyBpZiAoKHBNZ210LT5Sb2FtX2RibSA+IDQwKSYmKHBNZ210LT5Sb2FtX2RibTw4MCkpCkBAIC04ODYsNyArODg2LDcgQEAKICAgICBiU2NoZWR1bGVDb21tYW5kKCh2b2lkICopIHBEZXZpY2UsCiAJCSAgICAgV0xBTl9DTURfQlNTSURfU0NBTiwKIAkJICAgICBwTWdtdC0+YWJ5RGVzaXJlU1NJRCk7Ci0gIH07CisgIH0KIH0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2FyY2gvYXJtL21hY2gtb21hcDIvY3lhc2hhbG9tYXBfa2VybmVsLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2FyY2gvYXJtL21hY2gtb21hcDIvY3lhc2hhbG9tYXBfa2VybmVsLmMKaW5kZXggM2JjZWRjZS4uZGQ0Y2Q0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9hcmNoL2FybS9tYWNoLW9tYXAyL2N5YXNoYWxvbWFwX2tlcm5lbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jeWFzaGFsb21hcF9rZXJuZWwuYwpAQCAtNzY4LDcgKzc2OCw3IEBACiAJCWN5X2FzX2hhbF9wcmludF9tZXNzYWdlKEtFUk5fSU5GTyAiJXMgdmlydF9hZGRyPSV4XG4iLAogCQkJCQlncGlvX3ZtYV90YWJbaV0ubmFtZSwKIAkJCQkJKHUzMilncGlvX3ZtYV90YWJbaV0udmlydF9hZGRyKTsKLQl9OworCX0KIAogCS8qCiAJICogZm9yY2UgT01BUF9HUElPXzEyNiAgdG8gcmxlYXNlZCBzdGF0ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYmxvY2svY3lhc2Jsa2Rldl9ibG9jay5jIGIvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9ibG9jay9jeWFzYmxrZGV2X2Jsb2NrLmMKaW5kZXggMjg5NzI5ZC4uODc0NTJiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9ibG9jay9jeWFzYmxrZGV2X2Jsb2NrLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9ibG9jay9jeWFzYmxrZGV2X2Jsb2NrLmMKQEAgLTUxNSw3ICs1MTUsNyBAQAogCXdoaWxlIChibGtfZW5kX3JlcXVlc3QoZ2xfYmQtPnF1ZXVlLnJlcSwKIAlzdGF0dXMsIGJsa19ycV9zZWN0b3JzKGdsX2JkLT5xdWV1ZS5yZXEpKjUxMikpIHsKIAkJcmV0cnlfY250Kys7Ci0JfTsKKwl9CiAKIAkjaWZuZGVmIFdFU1RCUklER0VfTkRFQlVHCiAJY3lfYXNfaGFsX3ByaW50X21lc3NhZ2UoCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tdG8uYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL210by5jCmluZGV4IGMwM2U1MDEuLjUyNTAyMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL210by5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL210by5jCkBAIC00MCwxNCArNDAsOSBAQAogCTIsIDQsIDExLCAyMiwgMTIsIDE4LCAyNCwgMzYsIDQ4LCA3MiwgOTYsIDEwOAogfTsKIAotc3RhdGljIGludCBUb3RhbFR4UGt0Owotc3RhdGljIGludCBUb3RhbFR4UGt0UmV0cnk7CiAvKiB0aGlzIHJlY29yZCB0aGUgcmV0cnkgcmF0ZSBhdCBkaWZmZXJlbnQgZGF0YSByYXRlICovCiBzdGF0aWMgaW50IHJldHJ5cmF0ZV9yZWNbTVRPX01BWF9EQVRBX1JBVEVfTEVWRUxTXTsKIAotc3RhdGljIGludCBQZXJpb2RUb3RhbFR4UGt0Owotc3RhdGljIGludCBQZXJpb2RUb3RhbFR4UGt0UmV0cnk7Ci0KIHN0YXRpYyB1OCBib1NwYXJzZVR4VHJhZmZpYzsKIAogdm9pZCBNVE9fSW5pdChzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKmFkYXB0ZXIpOwpAQCAtMTc0LDkgKzE2OSw0IEBACiAJCU1UT19IQUwoKS0+ZHRvX3R4X3JldHJ5X2NvdW50ICs9IGluZGV4OwogCQlNVE9fSEFMKCktPmR0b190eF9mcmFnX2NvdW50ICs9IChpbmRleCArIDEpOwogCX0KLQlUb3RhbFR4UGt0Kys7Ci0JVG90YWxUeFBrdFJldHJ5ICs9IChpbmRleCArIDEpOwotCi0JUGVyaW9kVG90YWxUeFBrdCsrOwotCVBlcmlvZFRvdGFsVHhQa3RSZXRyeSArPSAoaW5kZXggKyAxKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3BoeV9jYWxpYnJhdGlvbi5jIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvcGh5X2NhbGlicmF0aW9uLmMKaW5kZXggMDk4NDRkYi4uNzllNTNlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvcGh5X2NhbGlicmF0aW9uLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvcGh5X2NhbGlicmF0aW9uLmMKQEAgLTI3LDEwICsyNywxMCBAQAogI2RlZmluZSBERUcyUkFEKFgpICAgICAgMC4wMTc0NTMgKiAoWCkKIAogc3RhdGljIGNvbnN0IHMzMiBBbmdsZXNbXSA9IHsKLSAgICBGSVhFRChERUcyUkFEKDQ1LjApKSwgICAgIEZJWEVEKERFRzJSQUQoMjYuNTY1KSksICAgRklYRUQoREVHMlJBRCgxNC4wMzYyKSksCi0gICAgRklYRUQoREVHMlJBRCg3LjEyNTAyKSksICBGSVhFRChERUcyUkFEKDMuNTc2MzMpKSwgIEZJWEVEKERFRzJSQUQoMS43ODk5MSkpLAotICAgIEZJWEVEKERFRzJSQUQoMC44OTUxNzQpKSwgRklYRUQoREVHMlJBRCgwLjQ0NzYxNCkpLCBGSVhFRChERUcyUkFEKDAuMjIzODExKSksCi0gICAgRklYRUQoREVHMlJBRCgwLjExMTkwNikpLCBGSVhFRChERUcyUkFEKDAuMDU1OTUzKSksIEZJWEVEKERFRzJSQUQoMC4wMjc5NzcpKQorCUZJWEVEKERFRzJSQUQoNDUuMCkpLCAgICAgRklYRUQoREVHMlJBRCgyNi41NjUpKSwgICBGSVhFRChERUcyUkFEKDE0LjAzNjIpKSwKKwlGSVhFRChERUcyUkFEKDcuMTI1MDIpKSwgIEZJWEVEKERFRzJSQUQoMy41NzYzMykpLCAgRklYRUQoREVHMlJBRCgxLjc4OTkxKSksCisJRklYRUQoREVHMlJBRCgwLjg5NTE3NCkpLCBGSVhFRChERUcyUkFEKDAuNDQ3NjE0KSksIEZJWEVEKERFRzJSQUQoMC4yMjM4MTEpKSwKKwlGSVhFRChERUcyUkFEKDAuMTExOTA2KSksIEZJWEVEKERFRzJSQUQoMC4wNTU5NTMpKSwgRklYRUQoREVHMlJBRCgwLjAyNzk3NykpCiB9OwogCiAvKioqKioqKioqKioqKioqKioqIExPQ0FMIEZVTkNUSU9OIERFQ0xBUkFUSU9OIFNFQ1RJT04gKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzV0eC5jIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXR4LmMKaW5kZXggNDRmYzNmZS4uNWRmMzlkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXR4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXR4LmMKQEAgLTI5MSw3ICsyOTEsNiBAQAogCWlmIChhdG9taWNfaW5jX3JldHVybigmcFdiMzVUeC0+VHhSZXN1bHRDb3VudCkgPT0gMSkgewogCQlwV2IzNVR4LT5FUDJ2bV9zdGF0ZSA9IFZNX1JVTk5JTkc7CiAJCVdiMzVUeF9FUDJWTShhZGFwdGVyKTsKLQl9Ci0JZWxzZQorCX0gZWxzZQogCQlhdG9taWNfZGVjKCZwV2IzNVR4LT5UeFJlc3VsdENvdW50KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi9YR0lfbWFpbi5oIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL1hHSV9tYWluLmgKaW5kZXggNDZiNTk1OC4uZjZjZDIyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL1hHSV9tYWluLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL1hHSV9tYWluLmgKQEAgLTksNyArOSw3IEBACiAjaW5jbHVkZSAidmJfc3RydWN0LmgiCiAjaW5jbHVkZSAidmJfZGVmLmgiCiAKLSNkZWZpbmUgWEdJRkFJTCh4KSBkbyB7IHByaW50ayh4ICJcbiIpOyByZXR1cm4gLUVJTlZBTDsgfSB3aGlsZSgwKQorI2RlZmluZSBYR0lGQUlMKHgpIGRvIHsgcHJpbnRrKHggIlxuIik7IHJldHVybiAtRUlOVkFMOyB9IHdoaWxlICgwKQogCiAjZGVmaW5lIFZFUl9NQUpPUiAgICAgICAgICAgICAgICAgMAogI2RlZmluZSBWRVJfTUlOT1IgICAgICAgICAgICAgICAgIDgKQEAgLTQ0LDExICs0NCwxNSBAQAogI2RlZmluZSBYR0lJTklUU1RBVElDIHN0YXRpYwogCiBzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoeGdpZmJfcGNpX3RhYmxlKSA9IHsKLQl7IFBDSV9WRU5ET1JfSURfWEcsIFBDSV9ERVZJQ0VfSURfWEdfMjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAotCXsgUENJX1ZFTkRPUl9JRF9YRywgUENJX0RFVklDRV9JRF9YR18yNywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMX0sCi0JeyBQQ0lfVkVORE9SX0lEX1hHLCBQQ0lfREVWSUNFX0lEX1hHXzQwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAyfSwKLQl7IFBDSV9WRU5ET1JfSURfWEcsIFBDSV9ERVZJQ0VfSURfWEdfNDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDN9LAotCXsgMCB9CisJe1BDSV9WRU5ET1JfSURfWEcsIFBDSV9ERVZJQ0VfSURfWEdfMjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCisJIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX1hHLCBQQ0lfREVWSUNFX0lEX1hHXzI3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAorCSAwLCAwLCAxfSwKKwl7UENJX1ZFTkRPUl9JRF9YRywgUENJX0RFVklDRV9JRF9YR180MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKKwkgMCwgMCwgMn0sCisJe1BDSV9WRU5ET1JfSURfWEcsIFBDSV9ERVZJQ0VfSURfWEdfNDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCisJIDAsIDAsIDN9LAorCXswfQogfTsKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHhnaWZiX3BjaV90YWJsZSk7CkBAIC0xNDgsMTAgKzE1MiwxMCBAQAogI2RlZmluZSBYR0lfREFUQV9CVVNfNjQgICAgICAgIDB4MDAKICNkZWZpbmUgWEdJX0RBVEFfQlVTXzEyOCAgICAgICAweDAxCiAjZGVmaW5lIFhHSV9EVUFMX0NIQU5ORUxfTUFTSyAgMHgwQwotI2RlZmluZSBYR0lfU0lOR0xFX0NIQU5ORUxfMV9SQU5LICAJMHgwCi0jZGVmaW5lIFhHSV9TSU5HTEVfQ0hBTk5FTF8yX1JBTksgIAkweDEKLSNkZWZpbmUgWEdJX0FTWU1fRERSCQkgIAkweDAyCi0jZGVmaW5lIFhHSV9EVUFMX0NIQU5ORUxfMV9SQU5LICAgIAkweDMKKyNkZWZpbmUgWEdJX1NJTkdMRV9DSEFOTkVMXzFfUkFOSyAweDAKKyNkZWZpbmUgWEdJX1NJTkdMRV9DSEFOTkVMXzJfUkFOSyAweDEKKyNkZWZpbmUgWEdJX0FTWU1fRERSCQkgIDB4MDIKKyNkZWZpbmUgWEdJX0RVQUxfQ0hBTk5FTF8xX1JBTksJICAweDMKIAogI2RlZmluZSBYR0k1NTBfRFJBTV9TSVpFX01BU0sgICAgIDB4M0YgIC8qIDU1MC82NTAvNzQwIFNSMTQgKi8KICNkZWZpbmUgWEdJNTUwX0RSQU1fU0laRV80TUIgICAgICAweDAwCkBAIC0xOTAsMTEgKzE5NCwxMSBAQAogI2RlZmluZSBYR0lfVkJfQ1JUMiAgICAgICAgICAgICAgIDB4MTAKICNkZWZpbmUgWEdJX0NSVDEgICAgICAgICAgICAgICAgICAweDIwCiAjZGVmaW5lIFhHSV9WQl9ISVZJU0lPTiAgICAgICAgICAgMHg0MAotI2RlZmluZSBYR0lfVkJfWVBCUFIgICAgICAgICAgICAgICAgMHg4MAotI2RlZmluZSBYR0lfVkJfVFYgICAgICAgICAgICAgICAgIChYR0lfVkJfQ09NUE9TSVRFIHwgWEdJX1ZCX1NWSURFTyB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEdJX1ZCX1NDQVJUIHwgWEdJX1ZCX0hJVklTSU9OfFhHSV9WQl9ZUEJQUikKKyNkZWZpbmUgWEdJX1ZCX1lQQlBSICAgICAgICAgICAgICAweDgwCisjZGVmaW5lIFhHSV9WQl9UVgkJICAoWEdJX1ZCX0NPTVBPU0lURSB8IFhHSV9WQl9TVklERU8gfCBcCisJCQkJICAgWEdJX1ZCX1NDQVJUIHwgWEdJX1ZCX0hJVklTSU9OfFhHSV9WQl9ZUEJQUikKIAotI2RlZmluZSBYR0lfRVhURVJOQUxfQ0hJUF9NQVNLICAgIAkgICAweDBFICAvKiBDUjM3ICovCisjZGVmaW5lIFhHSV9FWFRFUk5BTF9DSElQX01BU0sJCSAgIDB4MEUgIC8qIENSMzcgKi8KICNkZWZpbmUgWEdJX0VYVEVSTkFMX0NISVBfWEdJMzAxICAgICAgICAgICAweDAxICAvKiBpbiBDUjM3IDw8IDEgISAqLwogI2RlZmluZSBYR0lfRVhURVJOQUxfQ0hJUF9MVkRTICAgICAgICAgICAgIDB4MDIgIC8qIGluIENSMzcgPDwgMSAhICovCiAjZGVmaW5lIFhHSV9FWFRFUk5BTF9DSElQX1RSVU1QSU9OICAgICAgICAgMHgwMyAgLyogaW4gQ1IzNyA8PCAxICEgKi8KQEAgLTIxNiw0NiArMjIwLDEwIEBACiAjZGVmaW5lIFNSX0JVRkZFUl9TSVpFICAgICAgICAgICAgNQogI2RlZmluZSBDUl9CVUZGRVJfU0laRSAgICAgICAgICAgIDUKIAotLyogVXNlZnVsIG1hY3JvcyAqLwotI2RlZmluZSBpblhHSVJFRyhiYXNlKSAgICAgICAgICBpbmIoYmFzZSkKLSNkZWZpbmUgb3V0WEdJUkVHKGJhc2UsdmFsKSAgICAgb3V0Yih2YWwsYmFzZSkKLSNkZWZpbmUgb3JYR0lSRUcoYmFzZSx2YWwpICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBfX1RlbXAgPSBpbmIoYmFzZSk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRYR0lSRUcoYmFzZSwgX19UZW1wIHwgKHZhbCkpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApCi0jZGVmaW5lIGFuZFhHSVJFRyhiYXNlLHZhbCkgICAgIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19UZW1wID0gaW5iKGJhc2UpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0WEdJUkVHKGJhc2UsIF9fVGVtcCAmICh2YWwpKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKQotI2RlZmluZSBpblhHSUlEWFJFRyhiYXNlLGlkeCx2YXIpICAgZG8geyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGIoaWR4LGJhc2UpOyB2YXI9aW5iKChiYXNlKSsxKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCkKLSNkZWZpbmUgb3V0WEdJSURYUkVHKGJhc2UsaWR4LHZhbCkgIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRiKGlkeCxiYXNlKTsgb3V0YigodmFsKSwoYmFzZSkrMSk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApCi0jZGVmaW5lIG9yWEdJSURYUkVHKGJhc2UsaWR4LHZhbCkgICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBfX1RlbXA7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0YihpZHgsYmFzZSk7ICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1RlbXAgPSBpbmIoKGJhc2UpKzEpfCh2YWwpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dFhHSUlEWFJFRyhiYXNlLGlkeCxfX1RlbXApOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKQotI2RlZmluZSBhbmRYR0lJRFhSRUcoYmFzZSxpZHgsYW5kKSAgZG8geyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19UZW1wOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGIoaWR4LGJhc2UpOyAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19UZW1wID0gaW5iKChiYXNlKSsxKSYoYW5kKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRYR0lJRFhSRUcoYmFzZSxpZHgsX19UZW1wKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCkKLSNkZWZpbmUgc2V0WEdJSURYUkVHKGJhc2UsaWR4LGFuZCxvcikgICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19UZW1wOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRiKGlkeCxiYXNlKTsgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1RlbXAgPSAoaW5iKChiYXNlKSsxKSYoYW5kKSl8KG9yKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0WEdJSURYUkVHKGJhc2UsaWR4LF9fVGVtcCk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tIEdsb2JhbCBWYXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogLyogRmJjb24gdmFyaWFibGVzICovCi1zdGF0aWMgc3RydWN0IGZiX2luZm8qIGZiX2luZm87CitzdGF0aWMgc3RydWN0IGZiX2luZm8gKmZiX2luZm87CiAKIAogc3RhdGljIGludCAgICB2aWRlb190eXBlID0gRkJfVFlQRV9QQUNLRURfUElYRUxTOwpAQCAtMzA0LDcgKzI3Miw3IEBACiBzdGF0aWMgaW50IFhHSWZiX2NydDFvZmYgPSAwOwogc3RhdGljIGludCBYR0lmYl9mb3JjZWNydDEgPSAtMTsKIHN0YXRpYyBpbnQgWEdJZmJfdXNlcm9tID0gMDsKLS8vc3RhdGljIGludCBYR0lmYl91c2VvZW0gPSAtMTsKKy8qc3RhdGljIGludCBYR0lmYl91c2VvZW0gPSAtMTsgKi8KIAogLyogZ2xvYmFsIGZsYWdzICovCiBzdGF0aWMgaW50IFhHSWZiX3JlZ2lzdGVyZWQ7CkBAIC0zMTYsOCArMjg0LDEwIEBACiAKIHN0YXRpYyBpbnQgWEdJZmJfQ1JUMl93cml0ZV9lbmFibGUgPSAwOwogCi1zdGF0aWMgaW50IFhHSWZiX2NydDJ0eXBlID0gLTE7IC8qIFRXOiBDUlQyIHR5cGUgKGZvciBvdmVycmlkaW5nIGF1dG9kZXRlY3Rpb24pICovCi1zdGF0aWMgaW50IFhHSWZiX3R2cGx1ZyA9IC0xOyAvKiBQUjogVHYgcGx1ZyB0eXBlIChmb3Igb3ZlcnJpZGluZyBhdXRvZGV0ZWN0aW9uKSAqLworLyogVFc6IENSVDIgdHlwZSAoZm9yIG92ZXJyaWRpbmcgYXV0b2RldGVjdGlvbikgKi8KK3N0YXRpYyBpbnQgWEdJZmJfY3J0MnR5cGUgPSAtMTsKKy8qIFBSOiBUdiBwbHVnIHR5cGUgKGZvciBvdmVycmlkaW5nIGF1dG9kZXRlY3Rpb24pICovCitzdGF0aWMgaW50IFhHSWZiX3R2cGx1ZyA9IC0xOwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBYR0lmYl9kZXRlY3RlZHBkYyA9IDA7CiAKQEAgLTM1NCw4MiArMzI0LDE1NSBAQAogCXU4ICBjaGlwc2V0OwogfSBYR0liaW9zX21vZGVbXSA9IHsKICNkZWZpbmUgTU9ERV9JTkRFWF9OT05FICAgICAgICAgICAwICAvKiBUVzogaW5kZXggZm9yIG1vZGU9bm9uZSAqLwotCXsibm9uZSIsICAgICAgICAgMHhGRiwgMHgwMDAwLCAweDAwMDAsICAgIDAsICAgIDAsICAwLCAwLCAgIDAsICAwLCBNRF9YR0kzMDB8TURfWEdJMzE1fSwgIC8qIFRXOiBmb3IgbW9kZSAibm9uZSIgKi8KLQl7IjMyMHgyNDB4MTYiLCAgIDB4NTYsIDB4MDAwMCwgMHgwMDAwLCAgMzIwLCAgMjQwLCAxNiwgMSwgIDQwLCAxNSwgICAgICAgICAgIE1EX1hHSTMxNX0sCi0JeyIzMjB4NDgweDgiLCAgICAweDVBLCAweDAwMDAsIDB4MDAwMCwgIDMyMCwgIDQ4MCwgIDgsIDEsICA0MCwgMzAsICAgICAgICAgICBNRF9YR0kzMTV9LCAgLyogVFc6IEZTVE4gKi8KLQl7IjMyMHg0ODB4MTYiLCAgIDB4NUIsIDB4MDAwMCwgMHgwMDAwLCAgMzIwLCAgNDgwLCAxNiwgMSwgIDQwLCAzMCwgICAgICAgICAgIE1EX1hHSTMxNX0sICAvKiBUVzogRlNUTiAqLwotCXsiNjQweDQ4MHg4IiwgICAgMHgyRSwgMHgwMTAxLCAweDAxMDEsICA2NDAsICA0ODAsICA4LCAxLCAgODAsIDMwLCBNRF9YR0kzMDB8TURfWEdJMzE1fSwKLQl7IjY0MHg0ODB4MTYiLCAgIDB4NDQsIDB4MDExMSwgMHgwMTExLCAgNjQwLCAgNDgwLCAxNiwgMSwgIDgwLCAzMCwgTURfWEdJMzAwfE1EX1hHSTMxNX0sCi0JeyI2NDB4NDgweDI0IiwgICAweDYyLCAweDAxM2EsIDB4MDExMiwgIDY0MCwgIDQ4MCwgMzIsIDEsICA4MCwgMzAsIE1EX1hHSTMwMHxNRF9YR0kzMTV9LCAgLyogVFc6IFRoYXQncyBmb3IgcGVvcGxlIHdobyBtaXggdXAgY29sb3ItIGFuZCBmYiBkZXB0aCAqLwotCXsiNjQweDQ4MHgzMiIsICAgMHg2MiwgMHgwMTNhLCAweDAxMTIsICA2NDAsICA0ODAsIDMyLCAxLCAgODAsIDMwLCBNRF9YR0kzMDB8TURfWEdJMzE1fSwKLQl7IjcyMHg0ODB4OCIsICAgIDB4MzEsIDB4MDAwMCwgMHgwMDAwLCAgNzIwLCAgNDgwLCAgOCwgMSwgIDkwLCAzMCwgTURfWEdJMzAwfE1EX1hHSTMxNX0sCi0JeyI3MjB4NDgweDE2IiwgICAweDMzLCAweDAwMDAsIDB4MDAwMCwgIDcyMCwgIDQ4MCwgMTYsIDEsICA5MCwgMzAsIE1EX1hHSTMwMHxNRF9YR0kzMTV9LAotCXsiNzIweDQ4MHgyNCIsICAgMHgzNSwgMHgwMDAwLCAweDAwMDAsICA3MjAsICA0ODAsIDMyLCAxLCAgOTAsIDMwLCBNRF9YR0kzMDB8TURfWEdJMzE1fSwKLQl7IjcyMHg0ODB4MzIiLCAgIDB4MzUsIDB4MDAwMCwgMHgwMDAwLCAgNzIwLCAgNDgwLCAzMiwgMSwgIDkwLCAzMCwgTURfWEdJMzAwfE1EX1hHSTMxNX0sCi0JeyI3MjB4NTc2eDgiLCAgICAweDMyLCAweDAwMDAsIDB4MDAwMCwgIDcyMCwgIDU3NiwgIDgsIDEsICA5MCwgMzYsIE1EX1hHSTMwMHxNRF9YR0kzMTV9LAotCXsiNzIweDU3NngxNiIsICAgMHgzNCwgMHgwMDAwLCAweDAwMDAsICA3MjAsICA1NzYsIDE2LCAxLCAgOTAsIDM2LCBNRF9YR0kzMDB8TURfWEdJMzE1fSwKLQl7IjcyMHg1NzZ4MjQiLCAgIDB4MzYsIDB4MDAwMCwgMHgwMDAwLCAgNzIwLCAgNTc2LCAzMiwgMSwgIDkwLCAzNiwgTURfWEdJMzAwfE1EX1hHSTMxNX0sCi0JeyI3MjB4NTc2eDMyIiwgICAweDM2LCAweDAwMDAsIDB4MDAwMCwgIDcyMCwgIDU3NiwgMzIsIDEsICA5MCwgMzYsIE1EX1hHSTMwMHxNRF9YR0kzMTV9LAotCXsiODAweDQ4MHg4IiwgICAgMHg3MCwgMHgwMDAwLCAweDAwMDAsICA4MDAsICA0ODAsICA4LCAxLCAxMDAsIDMwLCBNRF9YR0kzMDB8TURfWEdJMzE1fSwKLQl7IjgwMHg0ODB4MTYiLCAgIDB4N2EsIDB4MDAwMCwgMHgwMDAwLCAgODAwLCAgNDgwLCAxNiwgMSwgMTAwLCAzMCwgTURfWEdJMzAwfE1EX1hHSTMxNX0sCi0JeyI4MDB4NDgweDI0IiwgICAweDc2LCAweDAwMDAsIDB4MDAwMCwgIDgwMCwgIDQ4MCwgMzIsIDEsIDEwMCwgMzAsIE1EX1hHSTMwMHxNRF9YR0kzMTV9LAotCXsiODAweDQ4MHgzMiIsICAgMHg3NiwgMHgwMDAwLCAweDAwMDAsICA4MDAsICA0ODAsIDMyLCAxLCAxMDAsIDMwLCBNRF9YR0kzMDB8TURfWEdJMzE1fSwKKwl7Im5vbmUiLCAgICAgICAgIDB4RkYsIDB4MDAwMCwgMHgwMDAwLCAgICAwLCAgICAwLCAgMCwgMCwgICAwLCAgMCwKKwkgTURfWEdJMzAwfE1EX1hHSTMxNX0sICAvKiBUVzogZm9yIG1vZGUgIm5vbmUiICovCisJeyIzMjB4MjQweDE2IiwgICAweDU2LCAweDAwMDAsIDB4MDAwMCwgIDMyMCwgIDI0MCwgMTYsIDEsICA0MCwgMTUsCisJIE1EX1hHSTMxNX0sCisJeyIzMjB4NDgweDgiLCAgICAweDVBLCAweDAwMDAsIDB4MDAwMCwgIDMyMCwgIDQ4MCwgIDgsIDEsICA0MCwgMzAsCisJIE1EX1hHSTMxNX0sICAvKiBUVzogRlNUTiAqLworCXsiMzIweDQ4MHgxNiIsICAgMHg1QiwgMHgwMDAwLCAweDAwMDAsICAzMjAsICA0ODAsIDE2LCAxLCAgNDAsIDMwLAorCSBNRF9YR0kzMTV9LCAgLyogVFc6IEZTVE4gKi8KKwl7IjY0MHg0ODB4OCIsICAgIDB4MkUsIDB4MDEwMSwgMHgwMTAxLCAgNjQwLCAgNDgwLCAgOCwgMSwgIDgwLCAzMCwKKwkgTURfWEdJMzAwfE1EX1hHSTMxNX0sCisJeyI2NDB4NDgweDE2IiwgICAweDQ0LCAweDAxMTEsIDB4MDExMSwgIDY0MCwgIDQ4MCwgMTYsIDEsICA4MCwgMzAsCisJIE1EX1hHSTMwMHxNRF9YR0kzMTV9LAorCXsiNjQweDQ4MHgyNCIsICAgMHg2MiwgMHgwMTNhLCAweDAxMTIsICA2NDAsICA0ODAsIDMyLCAxLCAgODAsIDMwLAorCSBNRF9YR0kzMDB8TURfWEdJMzE1fSwgIC8qIFRXOiBUaGF0J3MgZm9yIHBlb3BsZSB3aG8gbWl4IHVwIGNvbG9yLQorCQkJCQlhbmQgZmIgZGVwdGggKi8KKwl7IjY0MHg0ODB4MzIiLCAgIDB4NjIsIDB4MDEzYSwgMHgwMTEyLCAgNjQwLCAgNDgwLCAzMiwgMSwgIDgwLCAzMCwKKwkgTURfWEdJMzAwfE1EX1hHSTMxNX0sCisJeyI3MjB4NDgweDgiLCAgICAweDMxLCAweDAwMDAsIDB4MDAwMCwgIDcyMCwgIDQ4MCwgIDgsIDEsICA5MCwgMzAsCisJIE1EX1hHSTMwMHxNRF9YR0kzMTV9LAorCXsiNzIweDQ4MHgxNiIsICAgMHgzMywgMHgwMDAwLCAweDAwMDAsICA3MjAsICA0ODAsIDE2LCAxLCAgOTAsIDMwLAorCSBNRF9YR0kzMDB8TURfWEdJMzE1fSwKKwl7IjcyMHg0ODB4MjQiLCAgIDB4MzUsIDB4MDAwMCwgMHgwMDAwLCAgNzIwLCAgNDgwLCAzMiwgMSwgIDkwLCAzMCwKKwkgTURfWEdJMzAwfE1EX1hHSTMxNX0sCisJeyI3MjB4NDgweDMyIiwgICAweDM1LCAweDAwMDAsIDB4MDAwMCwgIDcyMCwgIDQ4MCwgMzIsIDEsICA5MCwgMzAsCisJIE1EX1hHSTMwMHxNRF9YR0kzMTV9LAorCXsiNzIweDU3Nng4IiwgICAgMHgzMiwgMHgwMDAwLCAweDAwMDAsICA3MjAsICA1NzYsICA4LCAxLCAgOTAsIDM2LAorCSBNRF9YR0kzMDB8TURfWEdJMzE1fSwKKwl7IjcyMHg1NzZ4MTYiLCAgIDB4MzQsIDB4MDAwMCwgMHgwMDAwLCAgNzIwLCAgNTc2LCAxNiwgMSwgIDkwLCAzNiwKKwkgTURfWEdJMzAwfE1EX1hHSTMxNX0sCisJeyI3MjB4NTc2eDI0IiwgICAweDM2LCAweDAwMDAsIDB4MDAwMCwgIDcyMCwgIDU3NiwgMzIsIDEsICA5MCwgMzYsCisJIE1EX1hHSTMwMHxNRF9YR0kzMTV9LAorCXsiNzIweDU3NngzMiIsICAgMHgzNiwgMHgwMDAwLCAweDAwMDAsICA3MjAsICA1NzYsIDMyLCAxLCAgOTAsIDM2LAorCSBNRF9YR0kzMDB8TURfWEdJMzE1fSwKKwl7IjgwMHg0ODB4OCIsICAgIDB4NzAsIDB4MDAwMCwgMHgwMDAwLCAgODAwLCAgNDgwLCAgOCwgMSwgMTAwLCAzMCwKKwkgTURfWEdJMzAwfE1EX1hHSTMxNX0sCisJeyI4MDB4NDgweDE2IiwgICAweDdhLCAweDAwMDAsIDB4MDAwMCwgIDgwMCwgIDQ4MCwgMTYsIDEsIDEwMCwgMzAsCisJIE1EX1hHSTMwMHxNRF9YR0kzMTV9LAorCXsiODAweDQ4MHgyNCIsICAgMHg3NiwgMHgwMDAwLCAweDAwMDAsICA4MDAsICA0ODAsIDMyLCAxLCAxMDAsIDMwLAorCSBNRF9YR0kzMDB8TURfWEdJMzE1fSwKKwl7IjgwMHg0ODB4MzIiLCAgIDB4NzYsIDB4MDAwMCwgMHgwMDAwLCAgODAwLCAgNDgwLCAzMiwgMSwgMTAwLCAzMCwKKwkgTURfWEdJMzAwfE1EX1hHSTMxNX0sCiAjZGVmaW5lIERFRkFVTFRfTU9ERSAgICAgICAgICAgICAgMjEgLyogVFc6IGluZGV4IGZvciA4MDB4NjAweDggKi8KICNkZWZpbmUgREVGQVVMVF9MQ0RNT0RFICAgICAgICAgICAyMSAvKiBUVzogaW5kZXggZm9yIDgwMHg2MDB4OCAqLwogI2RlZmluZSBERUZBVUxUX1RWTU9ERSAgICAgICAgICAgIDIxIC8qIFRXOiBpbmRleCBmb3IgODAweDYwMHg4ICovCi0JeyI4MDB4NjAweDgiLCAgICAweDMwLCAweDAxMDMsIDB4MDEwMywgIDgwMCwgIDYwMCwgIDgsIDEsIDEwMCwgMzcsIE1EX1hHSTMwMHxNRF9YR0kzMTV9LAotCXsiODAweDYwMHgxNiIsICAgMHg0NywgMHgwMTE0LCAweDAxMTQsICA4MDAsICA2MDAsIDE2LCAxLCAxMDAsIDM3LCBNRF9YR0kzMDB8TURfWEdJMzE1fSwKLQl7IjgwMHg2MDB4MjQiLCAgIDB4NjMsIDB4MDEzYiwgMHgwMTE1LCAgODAwLCAgNjAwLCAzMiwgMSwgMTAwLCAzNywgTURfWEdJMzAwfE1EX1hHSTMxNX0sCi0JeyI4MDB4NjAweDMyIiwgICAweDYzLCAweDAxM2IsIDB4MDExNSwgIDgwMCwgIDYwMCwgMzIsIDEsIDEwMCwgMzcsIE1EX1hHSTMwMHxNRF9YR0kzMTV9LAotCXsiMTAyNHg1NzZ4OCIsICAgMHg3MSwgMHgwMDAwLCAweDAwMDAsIDEwMjQsICA1NzYsICA4LCAxLCAxMjgsIDM2LCBNRF9YR0kzMDB8TURfWEdJMzE1fSwKLQl7IjEwMjR4NTc2eDE2IiwgIDB4NzQsIDB4MDAwMCwgMHgwMDAwLCAxMDI0LCAgNTc2LCAxNiwgMSwgMTI4LCAzNiwgTURfWEdJMzAwfE1EX1hHSTMxNX0sCi0JeyIxMDI0eDU3NngyNCIsICAweDc3LCAweDAwMDAsIDB4MDAwMCwgMTAyNCwgIDU3NiwgMzIsIDEsIDEyOCwgMzYsIE1EX1hHSTMwMHxNRF9YR0kzMTV9LAotCXsiMTAyNHg1NzZ4MzIiLCAgMHg3NywgMHgwMDAwLCAweDAwMDAsIDEwMjQsICA1NzYsIDMyLCAxLCAxMjgsIDM2LCBNRF9YR0kzMDB8TURfWEdJMzE1fSwKLQl7IjEwMjR4NjAweDgiLCAgIDB4MjAsIDB4MDAwMCwgMHgwMDAwLCAxMDI0LCAgNjAwLCAgOCwgMSwgMTI4LCAzNywgTURfWEdJMzAwICAgICAgICAgIH0sICAvKiBUVzogMzAwIHNlcmllcyBvbmx5ICovCi0JeyIxMDI0eDYwMHgxNiIsICAweDIxLCAweDAwMDAsIDB4MDAwMCwgMTAyNCwgIDYwMCwgMTYsIDEsIDEyOCwgMzcsIE1EX1hHSTMwMCAgICAgICAgICB9LAotCXsiMTAyNHg2MDB4MjQiLCAgMHgyMiwgMHgwMDAwLCAweDAwMDAsIDEwMjQsICA2MDAsIDMyLCAxLCAxMjgsIDM3LCBNRF9YR0kzMDAgICAgICAgICAgfSwKLQl7IjEwMjR4NjAweDMyIiwgIDB4MjIsIDB4MDAwMCwgMHgwMDAwLCAxMDI0LCAgNjAwLCAzMiwgMSwgMTI4LCAzNywgTURfWEdJMzAwICAgICAgICAgIH0sCi0JeyIxMDI0eDc2OHg4IiwgICAweDM4LCAweDAxMDUsIDB4MDEwNSwgMTAyNCwgIDc2OCwgIDgsIDEsIDEyOCwgNDgsIE1EX1hHSTMwMHxNRF9YR0kzMTV9LAotCXsiMTAyNHg3Njh4MTYiLCAgMHg0QSwgMHgwMTE3LCAweDAxMTcsIDEwMjQsICA3NjgsIDE2LCAxLCAxMjgsIDQ4LCBNRF9YR0kzMDB8TURfWEdJMzE1fSwKLQl7IjEwMjR4NzY4eDI0IiwgIDB4NjQsIDB4MDEzYywgMHgwMTE4LCAxMDI0LCAgNzY4LCAzMiwgMSwgMTI4LCA0OCwgTURfWEdJMzAwfE1EX1hHSTMxNX0sCi0JeyIxMDI0eDc2OHgzMiIsICAweDY0LCAweDAxM2MsIDB4MDExOCwgMTAyNCwgIDc2OCwgMzIsIDEsIDEyOCwgNDgsIE1EX1hHSTMwMHxNRF9YR0kzMTV9LAotCXsiMTE1Mng3Njh4OCIsICAgMHgyMywgMHgwMDAwLCAweDAwMDAsIDExNTIsICA3NjgsICA4LCAxLCAxNDQsIDQ4LCBNRF9YR0kzMDAgICAgICAgICAgfSwgIC8qIFRXOiAzMDAgc2VyaWVzIG9ubHkgKi8KLQl7IjExNTJ4NzY4eDE2IiwgIDB4MjQsIDB4MDAwMCwgMHgwMDAwLCAxMTUyLCAgNzY4LCAxNiwgMSwgMTQ0LCA0OCwgTURfWEdJMzAwICAgICAgICAgIH0sCi0JeyIxMTUyeDc2OHgyNCIsICAweDI1LCAweDAwMDAsIDB4MDAwMCwgMTE1MiwgIDc2OCwgMzIsIDEsIDE0NCwgNDgsIE1EX1hHSTMwMCAgICAgICAgICB9LAotCXsiMTE1Mng3Njh4MzIiLCAgMHgyNSwgMHgwMDAwLCAweDAwMDAsIDExNTIsICA3NjgsIDMyLCAxLCAxNDQsIDQ4LCBNRF9YR0kzMDAgICAgICAgICAgfSwKLQl7IjEyODB4NzIweDgiLCAgIDB4NzksIDB4MDAwMCwgMHgwMDAwLCAxMjgwLCAgNzIwLCAgOCwgMSwgMTYwLCA0NSwgTURfWEdJMzAwfE1EX1hHSTMxNX0sCi0JeyIxMjgweDcyMHgxNiIsICAweDc1LCAweDAwMDAsIDB4MDAwMCwgMTI4MCwgIDcyMCwgMTYsIDEsIDE2MCwgNDUsIE1EX1hHSTMwMHxNRF9YR0kzMTV9LAotCXsiMTI4MHg3MjB4MjQiLCAgMHg3OCwgMHgwMDAwLCAweDAwMDAsIDEyODAsICA3MjAsIDMyLCAxLCAxNjAsIDQ1LCBNRF9YR0kzMDB8TURfWEdJMzE1fSwKLQl7IjEyODB4NzIweDMyIiwgIDB4NzgsIDB4MDAwMCwgMHgwMDAwLCAxMjgwLCAgNzIwLCAzMiwgMSwgMTYwLCA0NSwgTURfWEdJMzAwfE1EX1hHSTMxNX0sCi0JeyIxMjgweDc2OHg4IiwgICAweDIzLCAweDAwMDAsIDB4MDAwMCwgMTI4MCwgIDc2OCwgIDgsIDEsIDE2MCwgNDgsICAgICAgICAgICBNRF9YR0kzMTV9LCAgLyogVFc6IDMxMC8zMjUgc2VyaWVzIG9ubHkgKi8KLQl7IjEyODB4NzY4eDE2IiwgIDB4MjQsIDB4MDAwMCwgMHgwMDAwLCAxMjgwLCAgNzY4LCAxNiwgMSwgMTYwLCA0OCwgICAgICAgICAgIE1EX1hHSTMxNX0sCi0JeyIxMjgweDc2OHgyNCIsICAweDI1LCAweDAwMDAsIDB4MDAwMCwgMTI4MCwgIDc2OCwgMzIsIDEsIDE2MCwgNDgsICAgICAgICAgICBNRF9YR0kzMTV9LAotCXsiMTI4MHg3Njh4MzIiLCAgMHgyNSwgMHgwMDAwLCAweDAwMDAsIDEyODAsICA3NjgsIDMyLCAxLCAxNjAsIDQ4LCAgICAgICAgICAgTURfWEdJMzE1fSwKKwl7IjgwMHg2MDB4OCIsICAgIDB4MzAsIDB4MDEwMywgMHgwMTAzLCAgODAwLCAgNjAwLCAgOCwgMSwgMTAwLCAzNywKKwkgTURfWEdJMzAwfE1EX1hHSTMxNX0sCisJeyI4MDB4NjAweDE2IiwgICAweDQ3LCAweDAxMTQsIDB4MDExNCwgIDgwMCwgIDYwMCwgMTYsIDEsIDEwMCwgMzcsCisJIE1EX1hHSTMwMHxNRF9YR0kzMTV9LAorCXsiODAweDYwMHgyNCIsICAgMHg2MywgMHgwMTNiLCAweDAxMTUsICA4MDAsICA2MDAsIDMyLCAxLCAxMDAsIDM3LAorCSBNRF9YR0kzMDB8TURfWEdJMzE1fSwKKwl7IjgwMHg2MDB4MzIiLCAgIDB4NjMsIDB4MDEzYiwgMHgwMTE1LCAgODAwLCAgNjAwLCAzMiwgMSwgMTAwLCAzNywKKwkgTURfWEdJMzAwfE1EX1hHSTMxNX0sCisJeyIxMDI0eDU3Nng4IiwgICAweDcxLCAweDAwMDAsIDB4MDAwMCwgMTAyNCwgIDU3NiwgIDgsIDEsIDEyOCwgMzYsCisJIE1EX1hHSTMwMHxNRF9YR0kzMTV9LAorCXsiMTAyNHg1NzZ4MTYiLCAgMHg3NCwgMHgwMDAwLCAweDAwMDAsIDEwMjQsICA1NzYsIDE2LCAxLCAxMjgsIDM2LAorCSBNRF9YR0kzMDB8TURfWEdJMzE1fSwKKwl7IjEwMjR4NTc2eDI0IiwgIDB4NzcsIDB4MDAwMCwgMHgwMDAwLCAxMDI0LCAgNTc2LCAzMiwgMSwgMTI4LCAzNiwKKwkgTURfWEdJMzAwfE1EX1hHSTMxNX0sCisJeyIxMDI0eDU3NngzMiIsICAweDc3LCAweDAwMDAsIDB4MDAwMCwgMTAyNCwgIDU3NiwgMzIsIDEsIDEyOCwgMzYsCisJIE1EX1hHSTMwMHxNRF9YR0kzMTV9LAorCXsiMTAyNHg2MDB4OCIsICAgMHgyMCwgMHgwMDAwLCAweDAwMDAsIDEwMjQsICA2MDAsICA4LCAxLCAxMjgsIDM3LAorCSBNRF9YR0kzMDAgICAgICAgICAgfSwgIC8qIFRXOiAzMDAgc2VyaWVzIG9ubHkgKi8KKwl7IjEwMjR4NjAweDE2IiwgIDB4MjEsIDB4MDAwMCwgMHgwMDAwLCAxMDI0LCAgNjAwLCAxNiwgMSwgMTI4LCAzNywKKwkgTURfWEdJMzAwICAgICAgICAgIH0sCisJeyIxMDI0eDYwMHgyNCIsICAweDIyLCAweDAwMDAsIDB4MDAwMCwgMTAyNCwgIDYwMCwgMzIsIDEsIDEyOCwgMzcsCisJIE1EX1hHSTMwMCAgICAgICAgICB9LAorCXsiMTAyNHg2MDB4MzIiLCAgMHgyMiwgMHgwMDAwLCAweDAwMDAsIDEwMjQsICA2MDAsIDMyLCAxLCAxMjgsIDM3LAorCSBNRF9YR0kzMDAgICAgICAgICAgfSwKKwl7IjEwMjR4NzY4eDgiLCAgIDB4MzgsIDB4MDEwNSwgMHgwMTA1LCAxMDI0LCAgNzY4LCAgOCwgMSwgMTI4LCA0OCwKKwkgTURfWEdJMzAwfE1EX1hHSTMxNX0sCisJeyIxMDI0eDc2OHgxNiIsICAweDRBLCAweDAxMTcsIDB4MDExNywgMTAyNCwgIDc2OCwgMTYsIDEsIDEyOCwgNDgsCisJIE1EX1hHSTMwMHxNRF9YR0kzMTV9LAorCXsiMTAyNHg3Njh4MjQiLCAgMHg2NCwgMHgwMTNjLCAweDAxMTgsIDEwMjQsICA3NjgsIDMyLCAxLCAxMjgsIDQ4LAorCSBNRF9YR0kzMDB8TURfWEdJMzE1fSwKKwl7IjEwMjR4NzY4eDMyIiwgIDB4NjQsIDB4MDEzYywgMHgwMTE4LCAxMDI0LCAgNzY4LCAzMiwgMSwgMTI4LCA0OCwKKwkgTURfWEdJMzAwfE1EX1hHSTMxNX0sCisJeyIxMTUyeDc2OHg4IiwgICAweDIzLCAweDAwMDAsIDB4MDAwMCwgMTE1MiwgIDc2OCwgIDgsIDEsIDE0NCwgNDgsCisJIE1EX1hHSTMwMCAgICAgICAgICB9LCAgLyogVFc6IDMwMCBzZXJpZXMgb25seSAqLworCXsiMTE1Mng3Njh4MTYiLCAgMHgyNCwgMHgwMDAwLCAweDAwMDAsIDExNTIsICA3NjgsIDE2LCAxLCAxNDQsIDQ4LAorCSBNRF9YR0kzMDAgICAgICAgICAgfSwKKwl7IjExNTJ4NzY4eDI0IiwgIDB4MjUsIDB4MDAwMCwgMHgwMDAwLCAxMTUyLCAgNzY4LCAzMiwgMSwgMTQ0LCA0OCwKKwkgTURfWEdJMzAwICAgICAgICAgIH0sCisJeyIxMTUyeDc2OHgzMiIsICAweDI1LCAweDAwMDAsIDB4MDAwMCwgMTE1MiwgIDc2OCwgMzIsIDEsIDE0NCwgNDgsCisJIE1EX1hHSTMwMCAgICAgICAgICB9LAorCXsiMTI4MHg3MjB4OCIsICAgMHg3OSwgMHgwMDAwLCAweDAwMDAsIDEyODAsICA3MjAsICA4LCAxLCAxNjAsIDQ1LAorCSBNRF9YR0kzMDB8TURfWEdJMzE1fSwKKwl7IjEyODB4NzIweDE2IiwgIDB4NzUsIDB4MDAwMCwgMHgwMDAwLCAxMjgwLCAgNzIwLCAxNiwgMSwgMTYwLCA0NSwKKwkgTURfWEdJMzAwfE1EX1hHSTMxNX0sCisJeyIxMjgweDcyMHgyNCIsICAweDc4LCAweDAwMDAsIDB4MDAwMCwgMTI4MCwgIDcyMCwgMzIsIDEsIDE2MCwgNDUsCisJIE1EX1hHSTMwMHxNRF9YR0kzMTV9LAorCXsiMTI4MHg3MjB4MzIiLCAgMHg3OCwgMHgwMDAwLCAweDAwMDAsIDEyODAsICA3MjAsIDMyLCAxLCAxNjAsIDQ1LAorCSBNRF9YR0kzMDB8TURfWEdJMzE1fSwKKwl7IjEyODB4NzY4eDgiLCAgIDB4MjMsIDB4MDAwMCwgMHgwMDAwLCAxMjgwLCAgNzY4LCAgOCwgMSwgMTYwLCA0OCwKKwkgTURfWEdJMzE1fSwgIC8qIFRXOiAzMTAvMzI1IHNlcmllcyBvbmx5ICovCisJeyIxMjgweDc2OHgxNiIsICAweDI0LCAweDAwMDAsIDB4MDAwMCwgMTI4MCwgIDc2OCwgMTYsIDEsIDE2MCwgNDgsCisJIE1EX1hHSTMxNX0sCisJeyIxMjgweDc2OHgyNCIsICAweDI1LCAweDAwMDAsIDB4MDAwMCwgMTI4MCwgIDc2OCwgMzIsIDEsIDE2MCwgNDgsCisJIE1EX1hHSTMxNX0sCisJeyIxMjgweDc2OHgzMiIsICAweDI1LCAweDAwMDAsIDB4MDAwMCwgMTI4MCwgIDc2OCwgMzIsIDEsIDE2MCwgNDgsCisJIE1EX1hHSTMxNX0sCiAjZGVmaW5lIE1PREVJTkRFWF8xMjgweDk2MCA0OAotCXsiMTI4MHg5NjB4OCIsICAgMHg3QywgMHgwMDAwLCAweDAwMDAsIDEyODAsICA5NjAsICA4LCAxLCAxNjAsIDYwLCBNRF9YR0kzMDB8TURfWEdJMzE1fSwgIC8qIFRXOiBNb2RlbnVtYmVycyBiZWluZyBwYXRjaGVkICovCi0JeyIxMjgweDk2MHgxNiIsICAweDdELCAweDAwMDAsIDB4MDAwMCwgMTI4MCwgIDk2MCwgMTYsIDEsIDE2MCwgNjAsIE1EX1hHSTMwMHxNRF9YR0kzMTV9LAotCXsiMTI4MHg5NjB4MjQiLCAgMHg3RSwgMHgwMDAwLCAweDAwMDAsIDEyODAsICA5NjAsIDMyLCAxLCAxNjAsIDYwLCBNRF9YR0kzMDB8TURfWEdJMzE1fSwKLQl7IjEyODB4OTYweDMyIiwgIDB4N0UsIDB4MDAwMCwgMHgwMDAwLCAxMjgwLCAgOTYwLCAzMiwgMSwgMTYwLCA2MCwgTURfWEdJMzAwfE1EX1hHSTMxNX0sCi0JeyIxMjgweDEwMjR4OCIsICAweDNBLCAweDAxMDcsIDB4MDEwNywgMTI4MCwgMTAyNCwgIDgsIDEsIDE2MCwgNjQsIE1EX1hHSTMwMHxNRF9YR0kzMTV9LAotCXsiMTI4MHgxMDI0eDE2IiwgMHg0RCwgMHgwMTFhLCAweDAxMWEsIDEyODAsIDEwMjQsIDE2LCAxLCAxNjAsIDY0LCBNRF9YR0kzMDB8TURfWEdJMzE1fSwKLQl7IjEyODB4MTAyNHgyNCIsIDB4NjUsIDB4MDEzZCwgMHgwMTFiLCAxMjgwLCAxMDI0LCAzMiwgMSwgMTYwLCA2NCwgTURfWEdJMzAwfE1EX1hHSTMxNX0sCi0JeyIxMjgweDEwMjR4MzIiLCAweDY1LCAweDAxM2QsIDB4MDExYiwgMTI4MCwgMTAyNCwgMzIsIDEsIDE2MCwgNjQsIE1EX1hHSTMwMHxNRF9YR0kzMTV9LAotCXsiMTQwMHgxMDUweDgiLCAgMHgyNiwgMHgwMDAwLCAweDAwMDAsIDE0MDAsIDEwNTAsICA4LCAxLCAxNzUsIDY1LCAgICAgICAgICAgTURfWEdJMzE1fSwgIC8qIFRXOiAzMTAvMzI1IHNlcmllcyBvbmx5ICovCi0JeyIxNDAweDEwNTB4MTYiLCAweDI3LCAweDAwMDAsIDB4MDAwMCwgMTQwMCwgMTA1MCwgMTYsIDEsIDE3NSwgNjUsICAgICAgICAgICBNRF9YR0kzMTV9LAotCXsiMTQwMHgxMDUweDI0IiwgMHgyOCwgMHgwMDAwLCAweDAwMDAsIDE0MDAsIDEwNTAsIDMyLCAxLCAxNzUsIDY1LCAgICAgICAgICAgTURfWEdJMzE1fSwKLQl7IjE0MDB4MTA1MHgzMiIsIDB4MjgsIDB4MDAwMCwgMHgwMDAwLCAxNDAwLCAxMDUwLCAzMiwgMSwgMTc1LCA2NSwgICAgICAgICAgIE1EX1hHSTMxNX0sCi0JeyIxNjAweDEyMDB4OCIsICAweDNDLCAweDAxMzAsIDB4MDExYywgMTYwMCwgMTIwMCwgIDgsIDEsIDIwMCwgNzUsIE1EX1hHSTMwMHxNRF9YR0kzMTV9LAotCXsiMTYwMHgxMjAweDE2IiwgMHgzRCwgMHgwMTMxLCAweDAxMWUsIDE2MDAsIDEyMDAsIDE2LCAxLCAyMDAsIDc1LCBNRF9YR0kzMDB8TURfWEdJMzE1fSwKLQl7IjE2MDB4MTIwMHgyNCIsIDB4NjYsIDB4MDEzZSwgMHgwMTFmLCAxNjAwLCAxMjAwLCAzMiwgMSwgMjAwLCA3NSwgTURfWEdJMzAwfE1EX1hHSTMxNX0sCi0JeyIxNjAweDEyMDB4MzIiLCAweDY2LCAweDAxM2UsIDB4MDExZiwgMTYwMCwgMTIwMCwgMzIsIDEsIDIwMCwgNzUsIE1EX1hHSTMwMHxNRF9YR0kzMTV9LAotCXsiMTkyMHgxNDQweDgiLCAgMHg2OCwgMHgwMTNmLCAweDAwMDAsIDE5MjAsIDE0NDAsICA4LCAxLCAyNDAsIDc1LCBNRF9YR0kzMDB8TURfWEdJMzE1fSwKLQl7IjE5MjB4MTQ0MHgxNiIsIDB4NjksIDB4MDE0MCwgMHgwMDAwLCAxOTIwLCAxNDQwLCAxNiwgMSwgMjQwLCA3NSwgTURfWEdJMzAwfE1EX1hHSTMxNX0sCi0JeyIxOTIweDE0NDB4MjQiLCAweDZCLCAweDAxNDEsIDB4MDAwMCwgMTkyMCwgMTQ0MCwgMzIsIDEsIDI0MCwgNzUsIE1EX1hHSTMwMHxNRF9YR0kzMTV9LAotCXsiMTkyMHgxNDQweDMyIiwgMHg2QiwgMHgwMTQxLCAweDAwMDAsIDE5MjAsIDE0NDAsIDMyLCAxLCAyNDAsIDc1LCBNRF9YR0kzMDB8TURfWEdJMzE1fSwKLQl7IjIwNDh4MTUzNng4IiwgIDB4NmMsIDB4MDAwMCwgMHgwMDAwLCAyMDQ4LCAxNTM2LCAgOCwgMSwgMjU2LCA5NiwgICAgICAgICAgIE1EX1hHSTMxNX0sICAvKiBUVzogMzEwLzMyNSBzZXJpZXMgb25seSAqLwotCXsiMjA0OHgxNTM2eDE2IiwgMHg2ZCwgMHgwMDAwLCAweDAwMDAsIDIwNDgsIDE1MzYsIDE2LCAxLCAyNTYsIDk2LCAgICAgICAgICAgTURfWEdJMzE1fSwKLQl7IjIwNDh4MTUzNngyNCIsIDB4NmUsIDB4MDAwMCwgMHgwMDAwLCAyMDQ4LCAxNTM2LCAzMiwgMSwgMjU2LCA5NiwgICAgICAgICAgIE1EX1hHSTMxNX0sCi0JeyIyMDQ4eDE1MzZ4MzIiLCAweDZlLCAweDAwMDAsIDB4MDAwMCwgMjA0OCwgMTUzNiwgMzIsIDEsIDI1NiwgOTYsICAgICAgICAgICBNRF9YR0kzMTV9LAorCXsiMTI4MHg5NjB4OCIsICAgMHg3QywgMHgwMDAwLCAweDAwMDAsIDEyODAsICA5NjAsICA4LCAxLCAxNjAsIDYwLAorCSBNRF9YR0kzMDB8TURfWEdJMzE1fSwgIC8qIFRXOiBNb2RlbnVtYmVycyBiZWluZyBwYXRjaGVkICovCisJeyIxMjgweDk2MHgxNiIsICAweDdELCAweDAwMDAsIDB4MDAwMCwgMTI4MCwgIDk2MCwgMTYsIDEsIDE2MCwgNjAsCisJIE1EX1hHSTMwMHxNRF9YR0kzMTV9LAorCXsiMTI4MHg5NjB4MjQiLCAgMHg3RSwgMHgwMDAwLCAweDAwMDAsIDEyODAsICA5NjAsIDMyLCAxLCAxNjAsIDYwLAorCSBNRF9YR0kzMDB8TURfWEdJMzE1fSwKKwl7IjEyODB4OTYweDMyIiwgIDB4N0UsIDB4MDAwMCwgMHgwMDAwLCAxMjgwLCAgOTYwLCAzMiwgMSwgMTYwLCA2MCwKKwkgTURfWEdJMzAwfE1EX1hHSTMxNX0sCisJeyIxMjgweDEwMjR4OCIsICAweDNBLCAweDAxMDcsIDB4MDEwNywgMTI4MCwgMTAyNCwgIDgsIDEsIDE2MCwgNjQsCisJIE1EX1hHSTMwMHxNRF9YR0kzMTV9LAorCXsiMTI4MHgxMDI0eDE2IiwgMHg0RCwgMHgwMTFhLCAweDAxMWEsIDEyODAsIDEwMjQsIDE2LCAxLCAxNjAsIDY0LAorCSBNRF9YR0kzMDB8TURfWEdJMzE1fSwKKwl7IjEyODB4MTAyNHgyNCIsIDB4NjUsIDB4MDEzZCwgMHgwMTFiLCAxMjgwLCAxMDI0LCAzMiwgMSwgMTYwLCA2NCwKKwkgTURfWEdJMzAwfE1EX1hHSTMxNX0sCisJeyIxMjgweDEwMjR4MzIiLCAweDY1LCAweDAxM2QsIDB4MDExYiwgMTI4MCwgMTAyNCwgMzIsIDEsIDE2MCwgNjQsCisJIE1EX1hHSTMwMHxNRF9YR0kzMTV9LAorCXsiMTQwMHgxMDUweDgiLCAgMHgyNiwgMHgwMDAwLCAweDAwMDAsIDE0MDAsIDEwNTAsICA4LCAxLCAxNzUsIDY1LAorCSBNRF9YR0kzMTV9LCAgLyogVFc6IDMxMC8zMjUgc2VyaWVzIG9ubHkgKi8KKwl7IjE0MDB4MTA1MHgxNiIsIDB4MjcsIDB4MDAwMCwgMHgwMDAwLCAxNDAwLCAxMDUwLCAxNiwgMSwgMTc1LCA2NSwKKwkgTURfWEdJMzE1fSwKKwl7IjE0MDB4MTA1MHgyNCIsIDB4MjgsIDB4MDAwMCwgMHgwMDAwLCAxNDAwLCAxMDUwLCAzMiwgMSwgMTc1LCA2NSwKKwkgTURfWEdJMzE1fSwKKwl7IjE0MDB4MTA1MHgzMiIsIDB4MjgsIDB4MDAwMCwgMHgwMDAwLCAxNDAwLCAxMDUwLCAzMiwgMSwgMTc1LCA2NSwKKwkgTURfWEdJMzE1fSwKKwl7IjE2MDB4MTIwMHg4IiwgIDB4M0MsIDB4MDEzMCwgMHgwMTFjLCAxNjAwLCAxMjAwLCAgOCwgMSwgMjAwLCA3NSwKKwkgTURfWEdJMzAwfE1EX1hHSTMxNX0sCisJeyIxNjAweDEyMDB4MTYiLCAweDNELCAweDAxMzEsIDB4MDExZSwgMTYwMCwgMTIwMCwgMTYsIDEsIDIwMCwgNzUsCisJIE1EX1hHSTMwMHxNRF9YR0kzMTV9LAorCXsiMTYwMHgxMjAweDI0IiwgMHg2NiwgMHgwMTNlLCAweDAxMWYsIDE2MDAsIDEyMDAsIDMyLCAxLCAyMDAsIDc1LAorCSBNRF9YR0kzMDB8TURfWEdJMzE1fSwKKwl7IjE2MDB4MTIwMHgzMiIsIDB4NjYsIDB4MDEzZSwgMHgwMTFmLCAxNjAwLCAxMjAwLCAzMiwgMSwgMjAwLCA3NSwKKwkgTURfWEdJMzAwfE1EX1hHSTMxNX0sCisJeyIxOTIweDE0NDB4OCIsICAweDY4LCAweDAxM2YsIDB4MDAwMCwgMTkyMCwgMTQ0MCwgIDgsIDEsIDI0MCwgNzUsCisJIE1EX1hHSTMwMHxNRF9YR0kzMTV9LAorCXsiMTkyMHgxNDQweDE2IiwgMHg2OSwgMHgwMTQwLCAweDAwMDAsIDE5MjAsIDE0NDAsIDE2LCAxLCAyNDAsIDc1LAorCSBNRF9YR0kzMDB8TURfWEdJMzE1fSwKKwl7IjE5MjB4MTQ0MHgyNCIsIDB4NkIsIDB4MDE0MSwgMHgwMDAwLCAxOTIwLCAxNDQwLCAzMiwgMSwgMjQwLCA3NSwKKwkgTURfWEdJMzAwfE1EX1hHSTMxNX0sCisJeyIxOTIweDE0NDB4MzIiLCAweDZCLCAweDAxNDEsIDB4MDAwMCwgMTkyMCwgMTQ0MCwgMzIsIDEsIDI0MCwgNzUsCisJIE1EX1hHSTMwMHxNRF9YR0kzMTV9LAorCXsiMjA0OHgxNTM2eDgiLCAgMHg2YywgMHgwMDAwLCAweDAwMDAsIDIwNDgsIDE1MzYsICA4LCAxLCAyNTYsIDk2LAorCSBNRF9YR0kzMTV9LCAgLyogVFc6IDMxMC8zMjUgc2VyaWVzIG9ubHkgKi8KKwl7IjIwNDh4MTUzNngxNiIsIDB4NmQsIDB4MDAwMCwgMHgwMDAwLCAyMDQ4LCAxNTM2LCAxNiwgMSwgMjU2LCA5NiwKKwkgTURfWEdJMzE1fSwKKwl7IjIwNDh4MTUzNngyNCIsIDB4NmUsIDB4MDAwMCwgMHgwMDAwLCAyMDQ4LCAxNTM2LCAzMiwgMSwgMjU2LCA5NiwKKwkgTURfWEdJMzE1fSwKKwl7IjIwNDh4MTUzNngzMiIsIDB4NmUsIDB4MDAwMCwgMHgwMDAwLCAyMDQ4LCAxNTM2LCAzMiwgMSwgMjU2LCA5NiwKKwkgTURfWEdJMzE1fSwKIAl7IlwwIiwgMHgwMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0KIH07CiAKQEAgLTQzNyw0NCArNDgwLDQ1IEBACiAjaWZkZWYgTU9EVUxFCiBzdGF0aWMgaW50IHhnaWZiX21vZGVfaWR4ID0gMTsKICNlbHNlCi1zdGF0aWMgaW50IHhnaWZiX21vZGVfaWR4ID0gLTE7ICAgICAgICAgICAgICAgLyogVXNlIGEgZGVmYXVsdCBtb2RlIGlmIHdlIGFyZSBpbnNpZGUgdGhlIGtlcm5lbCAqLworc3RhdGljIGludCB4Z2lmYl9tb2RlX2lkeCA9IC0xOyAvKiBVc2UgYSBkZWZhdWx0IG1vZGUgaWYgd2UgYXJlCisJCQkJCWluc2lkZSB0aGUga2VybmVsICovCiAjZW5kaWYKIHN0YXRpYyB1OCAgWEdJZmJfbW9kZV9ubyAgPSAwOwogc3RhdGljIHU4ICBYR0lmYl9yYXRlX2lkeCA9IDA7CiAKIC8qIFRXOiBDUjM2IGV2YWx1YXRpb24gKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBYR0kzMDBwYW5lbHR5cGVbXSA9Ci0gICAgeyBMQ0RfVU5LTk9XTiwgICBMQ0RfODAweDYwMCwgIExDRF8xMDI0eDc2OCwgIExDRF8xMjgweDEwMjQsCi0gICAgICBMQ0RfMTI4MHg5NjAsICBMQ0RfNjQweDQ4MCwgIExDRF8xMDI0eDYwMCwgIExDRF8xMTUyeDc2OCwKLSAgICAgICBMQ0RfMTAyNHg3NjgsIExDRF8xMDI0eDc2OCwgIExDRF8xMDI0eDc2OCwKLSAgICAgIExDRF8xMDI0eDc2OCwgIExDRF8xMDI0eDc2OCwgTENEXzEwMjR4NzY4LCAgTENEXzEwMjR4NzY4IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgWEdJMzAwcGFuZWx0eXBlW10gPSB7CisJIExDRF9VTktOT1dOLCAgTENEXzgwMHg2MDAsIExDRF8xMDI0eDc2OCwgTENEXzEyODB4MTAyNCwKKwlMQ0RfMTI4MHg5NjAsICBMQ0RfNjQweDQ4MCwgTENEXzEwMjR4NjAwLCBMQ0RfMTE1Mng3NjgsCisJTENEXzEwMjR4NzY4LCBMQ0RfMTAyNHg3NjgsIExDRF8xMDI0eDc2OCwKKwlMQ0RfMTAyNHg3NjgsIExDRF8xMDI0eDc2OCwgTENEXzEwMjR4NzY4LCBMQ0RfMTAyNHg3Njh9OwogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgWEdJMzEwcGFuZWx0eXBlW10gPQotICAgIHsgTENEX1VOS05PV04sICAgTENEXzgwMHg2MDAsICBMQ0RfMTAyNHg3NjgsICBMQ0RfMTI4MHgxMDI0LAotICAgICAgTENEXzY0MHg0ODAsICAgTENEXzEwMjR4NjAwLCBMQ0RfMTE1Mng4NjQsICBMQ0RfMTI4MHg5NjAsCi0gICAgICBMQ0RfMTE1Mng3NjgsICBMQ0RfMTQwMHgxMDUwLExDRF8xMjgweDc2OCwgIExDRF8xNjAweDEyMDAsCi0gICAgICBMQ0RfMTAyNHg3NjgsIExDRF8xMDI0eDc2OCwgIExDRF8xMDI0eDc2OCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IFhHSTMxMHBhbmVsdHlwZVtdID0geworCSBMQ0RfVU5LTk9XTiwgICBMQ0RfODAweDYwMCwgTENEXzEwMjR4NzY4LCBMQ0RfMTI4MHgxMDI0LAorCSBMQ0RfNjQweDQ4MCwgIExDRF8xMDI0eDYwMCwgTENEXzExNTJ4ODY0LCBMQ0RfMTI4MHg5NjAsCisJTENEXzExNTJ4NzY4LCBMQ0RfMTQwMHgxMDUwLCBMQ0RfMTI4MHg3NjgsIExDRF8xNjAweDEyMDAsCisJTENEXzEwMjR4NzY4LCAgTENEXzEwMjR4NzY4LCBMQ0RfMTAyNHg3Njh9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IF9YR0lfY3J0MnR5cGUgewogCWNoYXIgbmFtZVsxMF07CiAJaW50IHR5cGVfbm87CiAJaW50IHR2cGx1Z19ubzsKIH0gWEdJX2NydDJ0eXBlW10gPSB7Ci0JeyJOT05FIiwgCTAsIAkJLTF9LAotCXsiTENEIiwgIAlESVNQVFlQRV9MQ0QsIAktMX0sCi0JeyJUViIsICAgCURJU1BUWVBFX1RWLCAJLTF9LAotCXsiVkdBIiwgIAlESVNQVFlQRV9DUlQyLCAJLTF9LAotCXsiU1ZJREVPIiwgCURJU1BUWVBFX1RWLCAJVFZQTFVHX1NWSURFT30sCi0JeyJDT01QT1NJVEUiLCAJRElTUFRZUEVfVFYsIAlUVlBMVUdfQ09NUE9TSVRFfSwKLQl7IlNDQVJUIiwgCURJU1BUWVBFX1RWLCAJVFZQTFVHX1NDQVJUfSwKLQl7Im5vbmUiLCAJMCwgCQktMX0sCi0JeyJsY2QiLCAgCURJU1BUWVBFX0xDRCwgCS0xfSwKLQl7InR2IiwgICAJRElTUFRZUEVfVFYsIAktMX0sCi0JeyJ2Z2EiLCAgCURJU1BUWVBFX0NSVDIsIAktMX0sCi0JeyJzdmlkZW8iLCAJRElTUFRZUEVfVFYsIAlUVlBMVUdfU1ZJREVPfSwKLQl7ImNvbXBvc2l0ZSIsIAlESVNQVFlQRV9UViwgCVRWUExVR19DT01QT1NJVEV9LAotCXsic2NhcnQiLCAJRElTUFRZUEVfVFYsIAlUVlBMVUdfU0NBUlR9LAotCXsiXDAiLCAgCS0xLCAJCS0xfQorCXsiTk9ORSIsCTAsCQktMX0sCisJeyJMQ0QiLAkJRElTUFRZUEVfTENELAktMX0sCisJeyJUViIsCQlESVNQVFlQRV9UViwJLTF9LAorCXsiVkdBIiwJCURJU1BUWVBFX0NSVDIsCS0xfSwKKwl7IlNWSURFTyIsCURJU1BUWVBFX1RWLAlUVlBMVUdfU1ZJREVPfSwKKwl7IkNPTVBPU0lURSIsCURJU1BUWVBFX1RWLAlUVlBMVUdfQ09NUE9TSVRFfSwKKwl7IlNDQVJUIiwJRElTUFRZUEVfVFYsCVRWUExVR19TQ0FSVH0sCisJeyJub25lIiwJMCwJCS0xfSwKKwl7ImxjZCIsCQlESVNQVFlQRV9MQ0QsCS0xfSwKKwl7InR2IiwJCURJU1BUWVBFX1RWLAktMX0sCisJeyJ2Z2EiLAkJRElTUFRZUEVfQ1JUMiwJLTF9LAorCXsic3ZpZGVvIiwJRElTUFRZUEVfVFYsCVRWUExVR19TVklERU99LAorCXsiY29tcG9zaXRlIiwJRElTUFRZUEVfVFYsCVRWUExVR19DT01QT1NJVEV9LAorCXsic2NhcnQiLAlESVNQVFlQRV9UViwJVFZQTFVHX1NDQVJUfSwKKwl7IlwwIiwJCS0xLAkJLTF9CiB9OwogCiAvKiBUViBzdGFuZGFyZCAqLwpAQCAtNDgyLDExICs1MjYsMTEgQEAKIAljaGFyIG5hbWVbNl07CiAJaW50IHR5cGVfbm87CiB9IFhHSV90dnR5cGVbXSA9IHsKLQl7IlBBTCIsICAJMX0sCi0JeyJOVFNDIiwgCTJ9LAotCXsicGFsIiwgCTF9LAotCXsibnRzYyIsICAJMn0sCi0JeyJcMCIsICAgCS0xfQorCXsiUEFMIiwJCTF9LAorCXsiTlRTQyIsCTJ9LAorCXsicGFsIiwJCTF9LAorCXsibnRzYyIsCTJ9LAorCXsiXDAiLAkJLTF9CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IF9YR0lfdnJhdGUgewpAQCAtNDk1LDEzICs1MzksMTkgQEAKIAl1MTYgeXJlczsKIAl1MTYgcmVmcmVzaDsKIH0gWEdJZmJfdnJhdGVbXSA9IHsKLQl7MSwgIDY0MCwgIDQ4MCwgNjB9LCB7MiwgIDY0MCwgIDQ4MCwgIDcyfSwgezMsIDY0MCwgICA0ODAsICA3NX0sIHs0LCAgNjQwLCA0ODAsICA4NX0sCi0JezUsICA2NDAsICA0ODAsMTAwfSwgezYsICA2NDAsICA0ODAsIDEyMH0sIHs3LCA2NDAsICAgNDgwLCAxNjB9LCB7OCwgIDY0MCwgNDgwLCAyMDB9LAorCXsxLCAgNjQwLCAgNDgwLCA2MH0sIHsyLCAgNjQwLCAgNDgwLCAgNzJ9LAorCXszLCA2NDAsICAgNDgwLCAgNzV9LCB7NCwgIDY0MCwgNDgwLCAgODV9LAorCisJezUsICA2NDAsICA0ODAsIDEwMH0sIHs2LCAgNjQwLCAgNDgwLCAxMjB9LAorCXs3LCA2NDAsICAgNDgwLCAxNjB9LCB7OCwgIDY0MCwgNDgwLCAyMDB9LAorCiAJezEsICA3MjAsICA0ODAsIDYwfSwKIAl7MSwgIDcyMCwgIDU3NiwgNTh9LAogCXsxLCAgODAwLCAgNDgwLCA2MH0sIHsyLCAgODAwLCAgNDgwLCAgNzV9LCB7MywgODAwLCAgIDQ4MCwgIDg1fSwKLSAgICAgICAgezEsICA4MDAsICA2MDAsICA2MH0sIHsyLCA4MDAsICAgNjAwLCAgNzJ9LCB7MywgIDgwMCwgNjAwLCAgNzV9LAotCXs0LCAgODAwLCAgNjAwLCA4NX0sIHs1LCAgODAwLCAgNjAwLCAxMDB9LCB7NiwgODAwLCAgIDYwMCwgMTIwfSwgezcsICA4MDAsIDYwMCwgMTYwfSwKKwl7MSwgIDgwMCwgIDYwMCwgIDYwfSwgezIsIDgwMCwgICA2MDAsICA3Mn0sIHszLCAgODAwLCA2MDAsICA3NX0sCisJezQsICA4MDAsICA2MDAsIDg1fSwgezUsICA4MDAsICA2MDAsIDEwMH0sCisJezYsIDgwMCwgICA2MDAsIDEyMH0sIHs3LCAgODAwLCA2MDAsIDE2MH0sCisKIAl7MSwgMTAyNCwgIDc2OCwgIDYwfSwgezIsIDEwMjQsICA3NjgsICA3MH0sIHszLCAxMDI0LCA3NjgsICA3NX0sCiAJezQsIDEwMjQsICA3NjgsIDg1fSwgezUsIDEwMjQsICA3NjgsIDEwMH0sIHs2LCAxMDI0LCAgNzY4LCAxMjB9LAogCXsxLCAxMDI0LCAgNTc2LCA2MH0sIHsyLCAxMDI0LCAgNTc2LCAgNzV9LCB7MywgMTAyNCwgIDU3NiwgIDg1fSwKQEAgLTUwOSwyNzkgKzU1OSwxODcgQEAKIAl7MSwgMTE1MiwgIDc2OCwgNjB9LAogCXsxLCAxMjgwLCAgNzIwLCA2MH0sIHsyLCAxMjgwLCAgNzIwLCAgNzV9LCB7MywgMTI4MCwgIDcyMCwgIDg1fSwKIAl7MSwgMTI4MCwgIDc2OCwgNjB9LAotICAgICAgICB7MSwgMTI4MCwgMTAyNCwgIDYwfSwgezIsIDEyODAsIDEwMjQsICA3NX0sIHszLCAxMjgwLCAxMDI0LCAgODV9LAorCXsxLCAxMjgwLCAxMDI0LCAgNjB9LCB7MiwgMTI4MCwgMTAyNCwgIDc1fSwgezMsIDEyODAsIDEwMjQsICA4NX0sCiAJezEsIDEyODAsICA5NjAsIDcwfSwKIAl7MSwgMTQwMCwgMTA1MCwgNjB9LAotCXsxLCAxNjAwLCAxMjAwLCA2MH0sIHsyLCAxNjAwLCAxMjAwLCAgNjV9LCB7MywgMTYwMCwgMTIwMCwgIDcwfSwgezQsIDE2MDAsIDEyMDAsICA3NX0sCi0JezUsIDE2MDAsIDEyMDAsIDg1fSwgezYsIDE2MDAsIDEyMDAsIDEwMH0sIHs3LCAxNjAwLCAxMjAwLCAxMjB9LAotCXsxLCAxOTIwLCAxNDQwLCA2MH0sIHsyLCAxOTIwLCAxNDQwLCAgNjV9LCB7MywgMTkyMCwgMTQ0MCwgIDcwfSwgezQsIDE5MjAsIDE0NDAsICA3NX0sCisJezEsIDE2MDAsIDEyMDAsIDYwfSwgezIsIDE2MDAsIDEyMDAsICA2NX0sCisJezMsIDE2MDAsIDEyMDAsICA3MH0sIHs0LCAxNjAwLCAxMjAwLCAgNzV9LAorCisJezUsIDE2MDAsIDEyMDAsIDg1fSwgezYsIDE2MDAsIDEyMDAsIDEwMH0sCisJezcsIDE2MDAsIDEyMDAsIDEyMH0sCisKKwl7MSwgMTkyMCwgMTQ0MCwgNjB9LCB7MiwgMTkyMCwgMTQ0MCwgIDY1fSwKKwl7MywgMTkyMCwgMTQ0MCwgIDcwfSwgezQsIDE5MjAsIDE0NDAsICA3NX0sCisKIAl7NSwgMTkyMCwgMTQ0MCwgODV9LCB7NiwgMTkyMCwgMTQ0MCwgMTAwfSwKLQl7MSwgMjA0OCwgMTUzNiwgNjB9LCB7MiwgMjA0OCwgMTUzNiwgIDY1fSwgezMsIDIwNDgsIDE1MzYsICA3MH0sIHs0LCAyMDQ4LCAxNTM2LCAgNzV9LAorCXsxLCAyMDQ4LCAxNTM2LCA2MH0sIHsyLCAyMDQ4LCAxNTM2LCAgNjV9LAorCXszLCAyMDQ4LCAxNTM2LCAgNzB9LCB7NCwgMjA0OCwgMTUzNiwgIDc1fSwKKwogCXs1LCAyMDQ4LCAxNTM2LCA4NX0sCiAJezAsIDAsIDAsIDB9CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IF9jaHN3dGFibGUgewotICAgIGludCBzdWJzeXNWZW5kb3I7Ci0gICAgaW50IHN1YnN5c0NhcmQ7Ci0gICAgY2hhciAqdmVuZG9yTmFtZTsKLSAgICBjaGFyICpjYXJkTmFtZTsKKwlpbnQgc3Vic3lzVmVuZG9yOworCWludCBzdWJzeXNDYXJkOworCWNoYXIgKnZlbmRvck5hbWU7CisJY2hhciAqY2FyZE5hbWU7CiB9IG15Y2hzd3RhYmxlW10gPSB7Ci0gICAgICAgIHsgMHgxNjMxLCAweDEwMDIsICJNaXRhY2hpIiwgIjB4MTAwMiIgfSwKKwl7IDB4MTYzMSwgMHgxMDAyLCAiTWl0YWNoaSIsICIweDEwMDIiIH0sCiAJeyAwLCAgICAgIDAsICAgICAgIiIgICAgICAgLCAiIiAgICAgICB9CiB9OwogCi0vLyBFZGVuIENoZW4KKy8qIEVkZW4gQ2hlbiAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBfWEdJX1RWX2ZpbHRlciB7CiAJdTggZmlsdGVyWzldWzRdOwogfSBYR0lfVFZfZmlsdGVyW10gPSB7Ci0JeyB7ezB4MDAsMHgwMCwweDAwLDB4NDB9LCAgLyogTlRTQ0ZpbHRlcl8wICovCi0JICAgezB4MDAsMHhFMCwweDEwLDB4NjB9LAotCSAgIHsweDAwLDB4RUUsMHgxMCwweDQ0fSwKLQkgICB7MHgwMCwweEY0LDB4MTAsMHgzOH0sCi0JICAgezB4RjgsMHhGNCwweDE4LDB4Mzh9LAotCSAgIHsweEZDLDB4RkIsMHgxNCwweDJBfSwKLQkgICB7MHgwMCwweDAwLDB4MTAsMHgyMH0sCi0JICAgezB4MDAsMHgwNCwweDEwLDB4MTh9LAotCSAgIHsweEZGLDB4RkYsMHhGRiwweEZGfSB9fSwKLQl7IHt7MHgwMCwweDAwLDB4MDAsMHg0MH0sICAvKiBOVFNDRmlsdGVyXzEgKi8KLQkgICB7MHgwMCwweEUwLDB4MTAsMHg2MH0sCi0JICAgezB4MDAsMHhFRSwweDEwLDB4NDR9LAotCSAgIHsweDAwLDB4RjQsMHgxMCwweDM4fSwKLQkgICB7MHhGOCwweEY0LDB4MTgsMHgzOH0sCi0JICAgezB4RkMsMHhGQiwweDE0LDB4MkF9LAotCSAgIHsweDAwLDB4MDAsMHgxMCwweDIwfSwKLQkgICB7MHgwMCwweDA0LDB4MTAsMHgxOH0sCi0JICAgezB4RkYsMHhGRiwweEZGLDB4RkZ9IH19LAotCXsge3sweDAwLDB4MDAsMHgwMCwweDQwfSwgIC8qIE5UU0NGaWx0ZXJfMiAqLwotCSAgIHsweEY1LDB4RUUsMHgxQiwweDQ0fSwKLQkgICB7MHhGOCwweEY0LDB4MTgsMHgzOH0sCi0JICAgezB4RUIsMHgwNCwweDI1LDB4MTh9LAotCSAgIHsweEYxLDB4MDUsMHgxRiwweDE2fSwKLQkgICB7MHhGNiwweDA2LDB4MUEsMHgxNH0sCi0JICAgezB4RkEsMHgwNiwweDE2LDB4MTR9LAotCSAgIHsweDAwLDB4MDQsMHgxMCwweDE4fSwKLQkgICB7MHhGRiwweEZGLDB4RkYsMHhGRn0gfX0sCi0JeyB7ezB4MDAsMHgwMCwweDAwLDB4NDB9LCAgLyogTlRTQ0ZpbHRlcl8zICovCi0JICAgezB4RjEsMHgwNCwweDFGLDB4MTh9LAotCSAgIHsweEVFLDB4MEQsMHgyMiwweDA2fSwKLQkgICB7MHhGNywweDA2LDB4MTksMHgxNH0sCi0JICAgezB4RjQsMHgwQiwweDFDLDB4MEF9LAotCSAgIHsweEZBLDB4MDcsMHgxNiwweDEyfSwKLQkgICB7MHhGOSwweDBBLDB4MTcsMHgwQ30sCi0JICAgezB4MDAsMHgwNywweDEwLDB4MTJ9LAotCSAgIHsweEZGLDB4RkYsMHhGRiwweEZGfSB9fSwKLQl7IHt7MHgwMCwweDAwLDB4MDAsMHg0MH0sICAvKiBOVFNDRmlsdGVyXzQgKi8KLQkgICB7MHgwMCwweEUwLDB4MTAsMHg2MH0sCi0JICAgezB4MDAsMHhFRSwweDEwLDB4NDR9LAotCSAgIHsweDAwLDB4RjQsMHgxMCwweDM4fSwKLQkgICB7MHhGOCwweEY0LDB4MTgsMHgzOH0sCi0JICAgezB4RkMsMHhGQiwweDE0LDB4MkF9LAotCSAgIHsweDAwLDB4MDAsMHgxMCwweDIwfSwKLQkgICB7MHgwMCwweDA0LDB4MTAsMHgxOH0sCi0JICAgezB4RkYsMHhGRiwweEZGLDB4RkZ9IH19LAotCXsge3sweDAwLDB4MDAsMHgwMCwweDQwfSwgIC8qIE5UU0NGaWx0ZXJfNSAqLwotCSAgIHsweEY1LDB4RUUsMHgxQiwweDQ0fSwKLQkgICB7MHhGOCwweEY0LDB4MTgsMHgzOH0sCi0JICAgezB4RUIsMHgwNCwweDI1LDB4MTh9LAotCSAgIHsweEYxLDB4MDUsMHgxRiwweDE2fSwKLQkgICB7MHhGNiwweDA2LDB4MUEsMHgxNH0sCi0JICAgezB4RkEsMHgwNiwweDE2LDB4MTR9LAotCSAgIHsweDAwLDB4MDQsMHgxMCwweDE4fSwKLQkgICB7MHhGRiwweEZGLDB4RkYsMHhGRn0gfX0sCi0JeyB7ezB4MDAsMHgwMCwweDAwLDB4NDB9LCAgLyogTlRTQ0ZpbHRlcl82ICovCi0JICAgezB4RUIsMHgwNCwweDI1LDB4MTh9LAotCSAgIHsweEU3LDB4MEUsMHgyOSwweDA0fSwKLQkgICB7MHhFRSwweDBDLDB4MjIsMHgwOH0sCi0JICAgezB4RjYsMHgwQiwweDFBLDB4MEF9LAotCSAgIHsweEY5LDB4MEEsMHgxNywweDBDfSwKLQkgICB7MHhGQywweDBBLDB4MTQsMHgwQ30sCi0JICAgezB4MDAsMHgwOCwweDEwLDB4MTB9LAotCSAgIHsweEZGLDB4RkYsMHhGRiwweEZGfSB9fSwKLQl7IHt7MHgwMCwweDAwLDB4MDAsMHg0MH0sICAvKiBOVFNDRmlsdGVyXzcgKi8KLQkgICB7MHhFQywweDAyLDB4MjQsMHgxQ30sCi0JICAgezB4RjIsMHgwNCwweDFFLDB4MTh9LAotCSAgIHsweEVCLDB4MTUsMHgyNSwweEY2fSwKLQkgICB7MHhGNCwweDEwLDB4MUMsMHgwMH0sCi0JICAgezB4RjgsMHgwRiwweDE4LDB4MDJ9LAotCSAgIHsweDAwLDB4MDQsMHgxMCwweDE4fSwKLQkgICB7MHgwMSwweDA2LDB4MEYsMHgxNH0sCi0JICAgezB4RkYsMHhGRiwweEZGLDB4RkZ9IH19LAotCXsge3sweDAwLDB4MDAsMHgwMCwweDQwfSwgIC8qIFBBTEZpbHRlcl8wICovCi0JICAgezB4MDAsMHhFMCwweDEwLDB4NjB9LAotCSAgIHsweDAwLDB4RUUsMHgxMCwweDQ0fSwKLQkgICB7MHgwMCwweEY0LDB4MTAsMHgzOH0sCi0JICAgezB4RjgsMHhGNCwweDE4LDB4Mzh9LAotCSAgIHsweEZDLDB4RkIsMHgxNCwweDJBfSwKLQkgICB7MHgwMCwweDAwLDB4MTAsMHgyMH0sCi0JICAgezB4MDAsMHgwNCwweDEwLDB4MTh9LAotCSAgIHsweEZGLDB4RkYsMHhGRiwweEZGfSB9fSwKLQl7IHt7MHgwMCwweDAwLDB4MDAsMHg0MH0sICAvKiBQQUxGaWx0ZXJfMSAqLwotCSAgIHsweDAwLDB4RTAsMHgxMCwweDYwfSwKLQkgICB7MHgwMCwweEVFLDB4MTAsMHg0NH0sCi0JICAgezB4MDAsMHhGNCwweDEwLDB4Mzh9LAotCSAgIHsweEY4LDB4RjQsMHgxOCwweDM4fSwKLQkgICB7MHhGQywweEZCLDB4MTQsMHgyQX0sCi0JICAgezB4MDAsMHgwMCwweDEwLDB4MjB9LAotCSAgIHsweDAwLDB4MDQsMHgxMCwweDE4fSwKLQkgICB7MHhGRiwweEZGLDB4RkYsMHhGRn0gfX0sCi0JeyB7ezB4MDAsMHgwMCwweDAwLDB4NDB9LCAgLyogUEFMRmlsdGVyXzIgKi8KLQkgICB7MHhGNSwweEVFLDB4MUIsMHg0NH0sCi0JICAgezB4RjgsMHhGNCwweDE4LDB4Mzh9LAotCSAgIHsweEYxLDB4RjcsMHgwMSwweDMyfSwKLQkgICB7MHhGNSwweEZCLDB4MUIsMHgyQX0sCi0JICAgezB4RjksMHhGRiwweDE3LDB4MjJ9LAotCSAgIHsweEZCLDB4MDEsMHgxNSwweDFFfSwKLQkgICB7MHgwMCwweDA0LDB4MTAsMHgxOH0sCi0JICAgezB4RkYsMHhGRiwweEZGLDB4RkZ9IH19LAotCXsge3sweDAwLDB4MDAsMHgwMCwweDQwfSwgIC8qIFBBTEZpbHRlcl8zICovCi0JICAgezB4RjUsMHhGQiwweDFCLDB4MkF9LAotCSAgIHsweEVFLDB4RkUsMHgyMiwweDI0fSwKLQkgICB7MHhGMywweDAwLDB4MUQsMHgyMH0sCi0JICAgezB4RjksMHgwMywweDE3LDB4MUF9LAotCSAgIHsweEZCLDB4MDIsMHgxNCwweDFFfSwKLQkgICB7MHhGQiwweDA0LDB4MTUsMHgxOH0sCi0JICAgezB4MDAsMHgwNiwweDEwLDB4MTR9LAotCSAgIHsweEZGLDB4RkYsMHhGRiwweEZGfSB9fSwKLQl7IHt7MHgwMCwweDAwLDB4MDAsMHg0MH0sICAvKiBQQUxGaWx0ZXJfNCAqLwotCSAgIHsweDAwLDB4RTAsMHgxMCwweDYwfSwKLQkgICB7MHgwMCwweEVFLDB4MTAsMHg0NH0sCi0JICAgezB4MDAsMHhGNCwweDEwLDB4Mzh9LAotCSAgIHsweEY4LDB4RjQsMHgxOCwweDM4fSwKLQkgICB7MHhGQywweEZCLDB4MTQsMHgyQX0sCi0JICAgezB4MDAsMHgwMCwweDEwLDB4MjB9LAotCSAgIHsweDAwLDB4MDQsMHgxMCwweDE4fSwKLQkgICB7MHhGRiwweEZGLDB4RkYsMHhGRn0gfX0sCi0JeyB7ezB4MDAsMHgwMCwweDAwLDB4NDB9LCAgLyogUEFMRmlsdGVyXzUgKi8KLQkgICB7MHhGNSwweEVFLDB4MUIsMHg0NH0sCi0JICAgezB4RjgsMHhGNCwweDE4LDB4Mzh9LAotCSAgIHsweEYxLDB4RjcsMHgxRiwweDMyfSwKLQkgICB7MHhGNSwweEZCLDB4MUIsMHgyQX0sCi0JICAgezB4RjksMHhGRiwweDE3LDB4MjJ9LAotCSAgIHsweEZCLDB4MDEsMHgxNSwweDFFfSwKLQkgICB7MHgwMCwweDA0LDB4MTAsMHgxOH0sCi0JICAgezB4RkYsMHhGRiwweEZGLDB4RkZ9IH19LAotCXsge3sweDAwLDB4MDAsMHgwMCwweDQwfSwgIC8qIFBBTEZpbHRlcl82ICovCi0JICAgezB4RjUsMHhFRSwweDFCLDB4MkF9LAotCSAgIHsweEVFLDB4RkUsMHgyMiwweDI0fSwKLQkgICB7MHhGMywweDAwLDB4MUQsMHgyMH0sCi0JICAgezB4RjksMHgwMywweDE3LDB4MUF9LAotCSAgIHsweEZCLDB4MDIsMHgxNCwweDFFfSwKLQkgICB7MHhGQiwweDA0LDB4MTUsMHgxOH0sCi0JICAgezB4MDAsMHgwNiwweDEwLDB4MTR9LAotCSAgIHsweEZGLDB4RkYsMHhGRiwweEZGfSB9fSwKLQl7IHt7MHgwMCwweDAwLDB4MDAsMHg0MH0sICAvKiBQQUxGaWx0ZXJfNyAqLwotCSAgIHsweEY1LDB4RUUsMHgxQiwweDQ0fSwKLQkgICB7MHhGOCwweEY0LDB4MTgsMHgzOH0sCi0JICAgezB4RkMsMHhGQiwweDE0LDB4MkF9LAotCSAgIHsweEVCLDB4MDUsMHgyNSwweDE2fSwKLQkgICB7MHhGMSwweDA1LDB4MUYsMHgxNn0sCi0JICAgezB4RkEsMHgwNywweDE2LDB4MTJ9LAotCSAgIHsweDAwLDB4MDcsMHgxMCwweDEyfSwKLQkgICB7MHhGRiwweEZGLDB4RkYsMHhGRn0gfX0KKwl7IHsgezB4MDAsIDB4MDAsIDB4MDAsIDB4NDB9LCAgLyogTlRTQ0ZpbHRlcl8wICovCisJICAgIHsweDAwLCAweEUwLCAweDEwLCAweDYwfSwKKwkgICAgezB4MDAsIDB4RUUsIDB4MTAsIDB4NDR9LAorCSAgICB7MHgwMCwgMHhGNCwgMHgxMCwgMHgzOH0sCisJICAgIHsweEY4LCAweEY0LCAweDE4LCAweDM4fSwKKwkgICAgezB4RkMsIDB4RkIsIDB4MTQsIDB4MkF9LAorCSAgICB7MHgwMCwgMHgwMCwgMHgxMCwgMHgyMH0sCisJICAgIHsweDAwLCAweDA0LCAweDEwLCAweDE4fSwKKwkgICAgezB4RkYsIDB4RkYsIDB4RkYsIDB4RkZ9IH0gfSwKKwl7IHsgezB4MDAsIDB4MDAsIDB4MDAsIDB4NDB9LCAgLyogTlRTQ0ZpbHRlcl8xICovCisJICAgIHsweDAwLCAweEUwLCAweDEwLCAweDYwfSwKKwkgICAgezB4MDAsIDB4RUUsIDB4MTAsIDB4NDR9LAorCSAgICB7MHgwMCwgMHhGNCwgMHgxMCwgMHgzOH0sCisJICAgIHsweEY4LCAweEY0LCAweDE4LCAweDM4fSwKKwkgICAgezB4RkMsIDB4RkIsIDB4MTQsIDB4MkF9LAorCSAgICB7MHgwMCwgMHgwMCwgMHgxMCwgMHgyMH0sCisJICAgIHsweDAwLCAweDA0LCAweDEwLCAweDE4fSwKKwkgICAgezB4RkYsIDB4RkYsIDB4RkYsIDB4RkZ9IH0gfSwKKwl7IHsgezB4MDAsIDB4MDAsIDB4MDAsIDB4NDB9LCAgLyogTlRTQ0ZpbHRlcl8yICovCisJICAgIHsweEY1LCAweEVFLCAweDFCLCAweDQ0fSwKKwkgICAgezB4RjgsIDB4RjQsIDB4MTgsIDB4Mzh9LAorCSAgICB7MHhFQiwgMHgwNCwgMHgyNSwgMHgxOH0sCisJICAgIHsweEYxLCAweDA1LCAweDFGLCAweDE2fSwKKwkgICAgezB4RjYsIDB4MDYsIDB4MUEsIDB4MTR9LAorCSAgICB7MHhGQSwgMHgwNiwgMHgxNiwgMHgxNH0sCisJICAgIHsweDAwLCAweDA0LCAweDEwLCAweDE4fSwKKwkgICAgezB4RkYsIDB4RkYsIDB4RkYsIDB4RkZ9IH0gfSwKKwl7IHsgezB4MDAsIDB4MDAsIDB4MDAsIDB4NDB9LCAgLyogTlRTQ0ZpbHRlcl8zICovCisJICAgIHsweEYxLCAweDA0LCAweDFGLCAweDE4fSwKKwkgICAgezB4RUUsIDB4MEQsIDB4MjIsIDB4MDZ9LAorCSAgICB7MHhGNywgMHgwNiwgMHgxOSwgMHgxNH0sCisJICAgIHsweEY0LCAweDBCLCAweDFDLCAweDBBfSwKKwkgICAgezB4RkEsIDB4MDcsIDB4MTYsIDB4MTJ9LAorCSAgICB7MHhGOSwgMHgwQSwgMHgxNywgMHgwQ30sCisJICAgIHsweDAwLCAweDA3LCAweDEwLCAweDEyfSwKKwkgICAgezB4RkYsIDB4RkYsIDB4RkYsIDB4RkZ9IH0gfSwKKwl7IHsgezB4MDAsIDB4MDAsIDB4MDAsIDB4NDB9LCAgLyogTlRTQ0ZpbHRlcl80ICovCisJICAgIHsweDAwLCAweEUwLCAweDEwLCAweDYwfSwKKwkgICAgezB4MDAsIDB4RUUsIDB4MTAsIDB4NDR9LAorCSAgICB7MHgwMCwgMHhGNCwgMHgxMCwgMHgzOH0sCisJICAgIHsweEY4LCAweEY0LCAweDE4LCAweDM4fSwKKwkgICAgezB4RkMsIDB4RkIsIDB4MTQsIDB4MkF9LAorCSAgICB7MHgwMCwgMHgwMCwgMHgxMCwgMHgyMH0sCisJICAgIHsweDAwLCAweDA0LCAweDEwLCAweDE4fSwKKwkgICAgezB4RkYsIDB4RkYsIDB4RkYsIDB4RkZ9IH0gfSwKKwl7IHsgezB4MDAsIDB4MDAsIDB4MDAsIDB4NDB9LCAgLyogTlRTQ0ZpbHRlcl81ICovCisJICAgIHsweEY1LCAweEVFLCAweDFCLCAweDQ0fSwKKwkgICAgezB4RjgsIDB4RjQsIDB4MTgsIDB4Mzh9LAorCSAgICB7MHhFQiwgMHgwNCwgMHgyNSwgMHgxOH0sCisJICAgIHsweEYxLCAweDA1LCAweDFGLCAweDE2fSwKKwkgICAgezB4RjYsIDB4MDYsIDB4MUEsIDB4MTR9LAorCSAgICB7MHhGQSwgMHgwNiwgMHgxNiwgMHgxNH0sCisJICAgIHsweDAwLCAweDA0LCAweDEwLCAweDE4fSwKKwkgICAgezB4RkYsIDB4RkYsIDB4RkYsIDB4RkZ9IH0gfSwKKwl7IHsgezB4MDAsIDB4MDAsIDB4MDAsIDB4NDB9LCAgLyogTlRTQ0ZpbHRlcl82ICovCisJICAgIHsweEVCLCAweDA0LCAweDI1LCAweDE4fSwKKwkgICAgezB4RTcsIDB4MEUsIDB4MjksIDB4MDR9LAorCSAgICB7MHhFRSwgMHgwQywgMHgyMiwgMHgwOH0sCisJICAgIHsweEY2LCAweDBCLCAweDFBLCAweDBBfSwKKwkgICAgezB4RjksIDB4MEEsIDB4MTcsIDB4MEN9LAorCSAgICB7MHhGQywgMHgwQSwgMHgxNCwgMHgwQ30sCisJICAgIHsweDAwLCAweDA4LCAweDEwLCAweDEwfSwKKwkgICAgezB4RkYsIDB4RkYsIDB4RkYsIDB4RkZ9IH0gfSwKKwl7IHsgezB4MDAsIDB4MDAsIDB4MDAsIDB4NDB9LCAgLyogTlRTQ0ZpbHRlcl83ICovCisJICAgIHsweEVDLCAweDAyLCAweDI0LCAweDFDfSwKKwkgICAgezB4RjIsIDB4MDQsIDB4MUUsIDB4MTh9LAorCSAgICB7MHhFQiwgMHgxNSwgMHgyNSwgMHhGNn0sCisJICAgIHsweEY0LCAweDEwLCAweDFDLCAweDAwfSwKKwkgICAgezB4RjgsIDB4MEYsIDB4MTgsIDB4MDJ9LAorCSAgICB7MHgwMCwgMHgwNCwgMHgxMCwgMHgxOH0sCisJICAgIHsweDAxLCAweDA2LCAweDBGLCAweDE0fSwKKwkgICAgezB4RkYsIDB4RkYsIDB4RkYsIDB4RkZ9IH0gfSwKKwl7IHsgezB4MDAsIDB4MDAsIDB4MDAsIDB4NDB9LCAgLyogUEFMRmlsdGVyXzAgKi8KKwkgICAgezB4MDAsIDB4RTAsIDB4MTAsIDB4NjB9LAorCSAgICB7MHgwMCwgMHhFRSwgMHgxMCwgMHg0NH0sCisJICAgIHsweDAwLCAweEY0LCAweDEwLCAweDM4fSwKKwkgICAgezB4RjgsIDB4RjQsIDB4MTgsIDB4Mzh9LAorCSAgICB7MHhGQywgMHhGQiwgMHgxNCwgMHgyQX0sCisJICAgIHsweDAwLCAweDAwLCAweDEwLCAweDIwfSwKKwkgICAgezB4MDAsIDB4MDQsIDB4MTAsIDB4MTh9LAorCSAgICB7MHhGRiwgMHhGRiwgMHhGRiwgMHhGRn0gfSB9LAorCXsgeyB7MHgwMCwgMHgwMCwgMHgwMCwgMHg0MH0sICAvKiBQQUxGaWx0ZXJfMSAqLworCSAgICB7MHgwMCwgMHhFMCwgMHgxMCwgMHg2MH0sCisJICAgIHsweDAwLCAweEVFLCAweDEwLCAweDQ0fSwKKwkgICAgezB4MDAsIDB4RjQsIDB4MTAsIDB4Mzh9LAorCSAgICB7MHhGOCwgMHhGNCwgMHgxOCwgMHgzOH0sCisJICAgIHsweEZDLCAweEZCLCAweDE0LCAweDJBfSwKKwkgICAgezB4MDAsIDB4MDAsIDB4MTAsIDB4MjB9LAorCSAgICB7MHgwMCwgMHgwNCwgMHgxMCwgMHgxOH0sCisJICAgIHsweEZGLCAweEZGLCAweEZGLCAweEZGfSB9IH0sCisJeyB7IHsweDAwLCAweDAwLCAweDAwLCAweDQwfSwgIC8qIFBBTEZpbHRlcl8yICovCisJICAgIHsweEY1LCAweEVFLCAweDFCLCAweDQ0fSwKKwkgICAgezB4RjgsIDB4RjQsIDB4MTgsIDB4Mzh9LAorCSAgICB7MHhGMSwgMHhGNywgMHgwMSwgMHgzMn0sCisJICAgIHsweEY1LCAweEZCLCAweDFCLCAweDJBfSwKKwkgICAgezB4RjksIDB4RkYsIDB4MTcsIDB4MjJ9LAorCSAgICB7MHhGQiwgMHgwMSwgMHgxNSwgMHgxRX0sCisJICAgIHsweDAwLCAweDA0LCAweDEwLCAweDE4fSwKKwkgICAgezB4RkYsIDB4RkYsIDB4RkYsIDB4RkZ9IH0gfSwKKwl7IHsgezB4MDAsIDB4MDAsIDB4MDAsIDB4NDB9LCAgLyogUEFMRmlsdGVyXzMgKi8KKwkgICAgezB4RjUsIDB4RkIsIDB4MUIsIDB4MkF9LAorCSAgICB7MHhFRSwgMHhGRSwgMHgyMiwgMHgyNH0sCisJICAgIHsweEYzLCAweDAwLCAweDFELCAweDIwfSwKKwkgICAgezB4RjksIDB4MDMsIDB4MTcsIDB4MUF9LAorCSAgICB7MHhGQiwgMHgwMiwgMHgxNCwgMHgxRX0sCisJICAgIHsweEZCLCAweDA0LCAweDE1LCAweDE4fSwKKwkgICAgezB4MDAsIDB4MDYsIDB4MTAsIDB4MTR9LAorCSAgICB7MHhGRiwgMHhGRiwgMHhGRiwgMHhGRn0gfSB9LAorCXsgeyB7MHgwMCwgMHgwMCwgMHgwMCwgMHg0MH0sICAvKiBQQUxGaWx0ZXJfNCAqLworCSAgICB7MHgwMCwgMHhFMCwgMHgxMCwgMHg2MH0sCisJICAgIHsweDAwLCAweEVFLCAweDEwLCAweDQ0fSwKKwkgICAgezB4MDAsIDB4RjQsIDB4MTAsIDB4Mzh9LAorCSAgICB7MHhGOCwgMHhGNCwgMHgxOCwgMHgzOH0sCisJICAgIHsweEZDLCAweEZCLCAweDE0LCAweDJBfSwKKwkgICAgezB4MDAsIDB4MDAsIDB4MTAsIDB4MjB9LAorCSAgICB7MHgwMCwgMHgwNCwgMHgxMCwgMHgxOH0sCisJICAgIHsweEZGLCAweEZGLCAweEZGLCAweEZGfSB9IH0sCisJeyB7IHsweDAwLCAweDAwLCAweDAwLCAweDQwfSwgIC8qIFBBTEZpbHRlcl81ICovCisJICAgIHsweEY1LCAweEVFLCAweDFCLCAweDQ0fSwKKwkgICAgezB4RjgsIDB4RjQsIDB4MTgsIDB4Mzh9LAorCSAgICB7MHhGMSwgMHhGNywgMHgxRiwgMHgzMn0sCisJICAgIHsweEY1LCAweEZCLCAweDFCLCAweDJBfSwKKwkgICAgezB4RjksIDB4RkYsIDB4MTcsIDB4MjJ9LAorCSAgICB7MHhGQiwgMHgwMSwgMHgxNSwgMHgxRX0sCisJICAgIHsweDAwLCAweDA0LCAweDEwLCAweDE4fSwKKwkgICAgezB4RkYsIDB4RkYsIDB4RkYsIDB4RkZ9IH0gfSwKKwl7IHsgezB4MDAsIDB4MDAsIDB4MDAsIDB4NDB9LCAgLyogUEFMRmlsdGVyXzYgKi8KKwkgICAgezB4RjUsIDB4RUUsIDB4MUIsIDB4MkF9LAorCSAgICB7MHhFRSwgMHhGRSwgMHgyMiwgMHgyNH0sCisJICAgIHsweEYzLCAweDAwLCAweDFELCAweDIwfSwKKwkgICAgezB4RjksIDB4MDMsIDB4MTcsIDB4MUF9LAorCSAgICB7MHhGQiwgMHgwMiwgMHgxNCwgMHgxRX0sCisJICAgIHsweEZCLCAweDA0LCAweDE1LCAweDE4fSwKKwkgICAgezB4MDAsIDB4MDYsIDB4MTAsIDB4MTR9LAorCSAgICB7MHhGRiwgMHhGRiwgMHhGRiwgMHhGRn0gfSB9LAorCXsgeyB7MHgwMCwgMHgwMCwgMHgwMCwgMHg0MH0sICAvKiBQQUxGaWx0ZXJfNyAqLworCSAgICB7MHhGNSwgMHhFRSwgMHgxQiwgMHg0NH0sCisJICAgIHsweEY4LCAweEY0LCAweDE4LCAweDM4fSwKKwkgICAgezB4RkMsIDB4RkIsIDB4MTQsIDB4MkF9LAorCSAgICB7MHhFQiwgMHgwNSwgMHgyNSwgMHgxNn0sCisJICAgIHsweEYxLCAweDA1LCAweDFGLCAweDE2fSwKKwkgICAgezB4RkEsIDB4MDcsIDB4MTYsIDB4MTJ9LAorCSAgICB7MHgwMCwgMHgwNywgMHgxMCwgMHgxMn0sCisJICAgIHsweEZGLCAweEZGLCAweEZGLCAweEZGfSB9IH0KIH07CiAKIHN0YXRpYyBpbnQgICAgICAgICAgIGZpbHRlciA9IC0xOwogc3RhdGljIHVuc2lnbmVkIGNoYXIgZmlsdGVyX3RiOwogCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUm91dGluZSBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyogSW50ZXJmYWNlIHVzZWQgYnkgdGhlIHdvcmxkICovCi0jaWZuZGVmIE1PRFVMRQotWEdJSU5JVFNUQVRJQyBpbnQgX19pbml0IFhHSWZiX3NldHVwKGNoYXIgKm9wdGlvbnMpOwotI2VuZGlmCi0KLS8qIEludGVyZmFjZSB0byB0aGUgbG93IGxldmVsIGNvbnNvbGUgZHJpdmVyICovCi0KLQotCi0vKiBmYmRldiByb3V0aW5lcyAqLwotWEdJSU5JVFNUQVRJQyBpbnQgX19pbml0IHhnaWZiX2luaXQodm9pZCk7Ci1zdGF0aWMgaW50ICAgICAgWEdJZmJfc2V0X3BhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Ci1zdGF0aWMgaW50ICAgICAgWEdJZmJfYmxhbmsoaW50IGJsYW5rLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLS8qc3RhdGljIGludCAJWEdJZmJfbW1hcChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZpbGUgKmZpbGUsCi0JCSAgICAgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwotKi8KLQotLyoKLWV4dGVybiBpbnQJWEdJZmJfbW9kZV9yYXRlX3RvX2RjbG9jayhWQl9ERVZJQ0VfSU5GTyAqWEdJX1ByLAotCQkJICAgICAgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCi0JCQkgICAgICB1bnNpZ25lZCBjaGFyIG1vZGVubywgdW5zaWduZWQgY2hhciByYXRlaW5kZXgpOwotZXh0ZXJuIGludCAgICAgIFhHSWZiX21vZGVfcmF0ZV90b19kZGF0YShWQl9ERVZJQ0VfSU5GTyAqWEdJX1ByLCBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKLQkJCSB1bnNpZ25lZCBjaGFyIG1vZGVubywgdW5zaWduZWQgY2hhciByYXRlaW5kZXgsCi0JCQkgdW5zaWduZWQgaW50ICpsZWZ0X21hcmdpbiwgdW5zaWduZWQgaW50ICpyaWdodF9tYXJnaW4sCi0JCQkgdW5zaWduZWQgaW50ICp1cHBlcl9tYXJnaW4sIHVuc2lnbmVkIGludCAqbG93ZXJfbWFyZ2luLAotCQkJIHVuc2lnbmVkIGludCAqaHN5bmNfbGVuLCB1bnNpZ25lZCBpbnQgKnZzeW5jX2xlbiwKLQkJCSB1bnNpZ25lZCBpbnQgKnN5bmMsIHVuc2lnbmVkIGludCAqdm1vZGUpOwotKi8KLWV4dGVybiB1bnNpZ25lZCBjaGFyIFhHSV9TZWFyY2hNb2RlSUQodW5zaWduZWQgc2hvcnQgTW9kZU5vLAotCQkJCXVuc2lnbmVkIHNob3J0ICpNb2RlSWRJbmRleCwKLQkJCQlzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7Ci1zdGF0aWMgaW50ICAgICAgWEdJZmJfZ2V0X2ZpeChzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gKmZpeCwgaW50IGNvbiwKLQkJCSAgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLQotLyogSW50ZXJuYWwgZ2VuZXJhbCByb3V0aW5lcyAqLwotc3RhdGljIHZvaWQgICAgIFhHSWZiX3NlYXJjaF9tb2RlKGNvbnN0IGNoYXIgKm5hbWUpOwotc3RhdGljIGludCAgICAgIFhHSWZiX3ZhbGlkYXRlX21vZGUoaW50IG1vZGVpbmRleCk7Ci1zdGF0aWMgdTggICAgICAgWEdJZmJfc2VhcmNoX3JlZnJlc2hfcmF0ZSh1bnNpZ25lZCBpbnQgcmF0ZSk7Ci1zdGF0aWMgaW50ICAgICAgWEdJZmJfc2V0Y29scmVnKHVuc2lnbmVkIHJlZ25vLCB1bnNpZ25lZCByZWQsIHVuc2lnbmVkIGdyZWVuLAotCQkJdW5zaWduZWQgYmx1ZSwgdW5zaWduZWQgdHJhbnNwLAotCQkJc3RydWN0IGZiX2luZm8gKmZiX2luZm8pOwotc3RhdGljIGludCAgICAgIFhHSWZiX2RvX3NldF92YXIoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIGludCBpc2FjdGl2ZSwKLQkJICAgICAgCXN0cnVjdCBmYl9pbmZvICppbmZvKTsKLXN0YXRpYyB2b2lkICAgICBYR0lmYl9wcmVfc2V0bW9kZSh2b2lkKTsKLXN0YXRpYyB2b2lkICAgICBYR0lmYl9wb3N0X3NldG1vZGUodm9pZCk7Ci0KLS8qIEludGVybmFsIGhhcmR3YXJlIGFjY2VzcyByb3V0aW5lcyAqLwotdm9pZCAgICAgICAgICAgIFhHSWZiX3NldF9yZWc0KHUxNiBwb3J0LCB1bnNpZ25lZCBsb25nIGRhdGEpOwotdTMyICAgICAgICAgICAgIFhHSWZiX2dldF9yZWczKHUxNiBwb3J0KTsKLQotLyogQ2hpcHNldC1kZXBlbmRlbnQgaW50ZXJuYWwgcm91dGluZXMgKi8KLQotCi1zdGF0aWMgaW50ICAgICAgWEdJZmJfZ2V0X2RyYW1fc2l6ZSh2b2lkKTsKLXN0YXRpYyB2b2lkICAgICBYR0lmYl9kZXRlY3RfVkIodm9pZCk7Ci1zdGF0aWMgdm9pZCAgICAgWEdJZmJfZ2V0X1ZCX3R5cGUodm9pZCk7Ci1zdGF0aWMgaW50ICAgICAgWEdJZmJfaGFzX1ZCKHZvaWQpOwotCi0KLS8qIEludGVybmFsIHJvdXRpbmVzIHRvIGFjY2VzcyBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSAqLwotdW5zaWduZWQgY2hhciBYR0lmYl9xdWVyeV9WR0FfY29uZmlnX3NwYWNlKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKnBYR0lod19leHQsCi0JCQkJCSAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotCQkJCQkgICB1bnNpZ25lZCBsb25nIHNldCwKLQkJCQkJICAgdW5zaWduZWQgbG9uZyAqdmFsdWUpOwotLy9CT09MRUFOICAgICAgICAgWEdJZmJfcXVlcnlfbm9ydGhfYnJpZGdlX3NwYWNlKFBYR0lfSFdfREVWSUNFX0lORk8gcFhHSWh3X2V4dCwKLS8vCSAgICAgICAgIAl1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzZXQsIHVuc2lnbmVkIGxvbmcgKnZhbHVlKTsKLQotCi0vKiBSb3V0aW5lcyBmcm9tIGluaXQuYy9pbml0MzAxLmMgKi8KLWV4dGVybiB2b2lkICAgICBJbml0VG8zMzBQb2ludGVyKHVuc2lnbmVkIGNoYXIsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Ci1leHRlcm4gdW5zaWduZWQgY2hhciAgWEdJSW5pdE5ldyhzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbik7Ci1leHRlcm4gdW5zaWduZWQgY2hhciBYR0lTZXRNb2RlTmV3KHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAotCQkJCSAgIHVuc2lnbmVkIHNob3J0IE1vZGVObyk7Ci0vL2V4dGVybiB2b2lkICAgICBYR0lfU2V0RW5hYmxlRHN0bihWQl9ERVZJQ0VfSU5GTyAqWEdJX1ByKTsKLWV4dGVybiB2b2lkICAgICBYR0lfTG9uZ1dhaXQoc3RydWN0IHZiX2RldmljZV9pbmZvICpYR0lfUHIpOwotZXh0ZXJuIHVuc2lnbmVkIHNob3J0IFhHSV9HZXRSYXRlUHRyQ1JUMihzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpwWEdJSFdERSwKLQkJCQkJIHVuc2lnbmVkIHNob3J0IE1vZGVObywKLQkJCQkJIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAotCQkJCQkgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKLS8qIFRXOiBDaHJvbnRlbCBUViBmdW5jdGlvbnMgKi8KLWV4dGVybiB1bnNpZ25lZCBzaG9ydCBYR0lfR2V0Q0g3MDB4KHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqWEdJX1ByLAotCQkJCSAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wYngpOwotZXh0ZXJuIHZvaWQgWEdJX1NldENINzAweChzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKlhHSV9QciwgdW5zaWduZWQgc2hvcnQgdGVtcGJ4KTsKLWV4dGVybiB1bnNpZ25lZCBzaG9ydCBYR0lfR2V0Q0g3MDF4KHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqWEdJX1ByLAotCQkJCSAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wYngpOwotZXh0ZXJuIHZvaWQgWEdJX1NldENINzAxeChzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKlhHSV9QciwgdW5zaWduZWQgc2hvcnQgdGVtcGJ4KTsKLWV4dGVybiB2b2lkIFhHSV9TZXRDSDcweHhBTkRPUihzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKlhHSV9QciwKLQkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wYXgsCi0JCQkgICAgICAgdW5zaWduZWQgc2hvcnQgdGVtcGJoKTsKLWV4dGVybiB2b2lkIFhHSV9EREMyRGVsYXkoc3RydWN0IHZiX2RldmljZV9pbmZvICpYR0lfUHIsIHVuc2lnbmVkIHNob3J0IGRlbGF5dGltZSk7Ci0KLS8qIFRXOiBTZW5zaW5nIHJvdXRpbmVzICovCi12b2lkICAgICAgICAgICAgWEdJX1NlbnNlMzB4KHZvaWQpOwotaW50ICAgICAgICAgICAgIFhHSURvU2Vuc2UoaW50IHRlbXBibCwgaW50IHRlbXBiaCwgaW50IHRlbXBjbCwgaW50IHRlbXBjaCk7Ci0KLWV4dGVybiBzdHJ1Y3QgWEdJMjFfTFZEU0NhcFN0cnVjdCBYR0kyMV9MQ0RDYXBMaXN0WzEzXTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL1hHSV9tYWluXzI2LmMgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvWEdJX21haW5fMjYuYwppbmRleCA3MjFiZDI1Li5jYWRlYzJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvWEdJX21haW5fMjYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvWEdJX21haW5fMjYuYwpAQCAtMzMsNyArMzMsNyBAQAogI2RlZmluZSBYR0lGQl9QQU4KICNlbmRpZgogCi0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpZmRlZiBDT05GSUdfTVRSUgogI2luY2x1ZGUgPGFzbS9tdHJyLmg+CiAjZW5kaWYKQEAgLTQxLDcgKzQxLDkgQEAKICNpbmNsdWRlICJYR0lmYi5oIgogI2luY2x1ZGUgInZnYXR5cGVzLmgiCiAjaW5jbHVkZSAiWEdJX21haW4uaCIKKyNpbmNsdWRlICJ2Yl9pbml0LmgiCiAjaW5jbHVkZSAidmJfdXRpbC5oIgorI2luY2x1ZGUgInZiX3NldG1vZGUuaCIKIAogI2RlZmluZSBJbmRleF9DUl9HUElPX1JlZzEgMHg0OAogI2RlZmluZSBJbmRleF9DUl9HUElPX1JlZzIgMHg0OQpAQCAtNTAsNyArNTIsNiBAQAogI2RlZmluZSBHUElPR19FTiAgICAoMTw8NikKICNkZWZpbmUgR1BJT0dfV1JJVEUgKDE8PDYpCiAjZGVmaW5lIEdQSU9HX1JFQUQgICgxPDwxKQotaW50IFhHSWZiX0dldFhHMjFEZWZhdWx0TFZEU01vZGVJZHgodm9pZCk7CiAKICNkZWZpbmUgWEdJRkJfUk9NX1NJWkUJNjU1MzYKIApAQCAtNjksNjkgKzcwLDY5IEBACiB7CiAJdTggaSwgcmVnOwogCi0Jb3V0WEdJSURYUkVHKFhHSVNSLCAweDA1LCAweDg2KTsKKwl4Z2lmYl9yZWdfc2V0KFhHSVNSLCAweDA1LCAweDg2KTsKIAkvKgotCW91dFhHSUlEWFJFRyhYR0lTUiwgMHgwOCwgMHg0Zik7Ci0Jb3V0WEdJSURYUkVHKFhHSVNSLCAweDBmLCAweDIwKTsKLQlvdXRYR0lJRFhSRUcoWEdJU1IsIDB4MTEsIDB4NGYpOwotCW91dFhHSUlEWFJFRyhYR0lTUiwgMHgxMywgMHg0NSk7Ci0Jb3V0WEdJSURYUkVHKFhHSVNSLCAweDE0LCAweDUxKTsKLQlvdXRYR0lJRFhSRUcoWEdJU1IsIDB4MWUsIDB4NDEpOwotCW91dFhHSUlEWFJFRyhYR0lTUiwgMHgxZiwgMHgwKTsKLQlvdXRYR0lJRFhSRUcoWEdJU1IsIDB4MjAsIDB4YTEpOwotCW91dFhHSUlEWFJFRyhYR0lTUiwgMHgyMiwgMHhmYik7Ci0Jb3V0WEdJSURYUkVHKFhHSVNSLCAweDI2LCAweDIyKTsKLQlvdXRYR0lJRFhSRUcoWEdJU1IsIDB4M2UsIDB4MDcpOworCXhnaWZiX3JlZ19zZXQoWEdJU1IsIDB4MDgsIDB4NGYpOworCXhnaWZiX3JlZ19zZXQoWEdJU1IsIDB4MGYsIDB4MjApOworCXhnaWZiX3JlZ19zZXQoWEdJU1IsIDB4MTEsIDB4NGYpOworCXhnaWZiX3JlZ19zZXQoWEdJU1IsIDB4MTMsIDB4NDUpOworCXhnaWZiX3JlZ19zZXQoWEdJU1IsIDB4MTQsIDB4NTEpOworCXhnaWZiX3JlZ19zZXQoWEdJU1IsIDB4MWUsIDB4NDEpOworCXhnaWZiX3JlZ19zZXQoWEdJU1IsIDB4MWYsIDB4MCk7CisJeGdpZmJfcmVnX3NldChYR0lTUiwgMHgyMCwgMHhhMSk7CisJeGdpZmJfcmVnX3NldChYR0lTUiwgMHgyMiwgMHhmYik7CisJeGdpZmJfcmVnX3NldChYR0lTUiwgMHgyNiwgMHgyMik7CisJeGdpZmJfcmVnX3NldChYR0lTUiwgMHgzZSwgMHgwNyk7CiAJKi8KIAotCS8qIG91dFhHSUlEWFJFRyhYR0lDUiwgMHgxOSwgMHgwMCk7ICovCi0JLyogb3V0WEdJSURYUkVHKFhHSUNSLCAweDFhLCAweDNDKTsgKi8KLQkvKiBvdXRYR0lJRFhSRUcoWEdJQ1IsIDB4MjIsIDB4ZmYpOyAqLwotCS8qIG91dFhHSUlEWFJFRyhYR0lDUiwgMHgzRCwgMHgxMCk7ICovCisJLyogeGdpZmJfcmVnX3NldChYR0lDUiwgMHgxOSwgMHgwMCk7ICovCisJLyogeGdpZmJfcmVnX3NldChYR0lDUiwgMHgxYSwgMHgzQyk7ICovCisJLyogeGdpZmJfcmVnX3NldChYR0lDUiwgMHgyMiwgMHhmZik7ICovCisJLyogeGdpZmJfcmVnX3NldChYR0lDUiwgMHgzRCwgMHgxMCk7ICovCiAKLQkvKiBvdXRYR0lJRFhSRUcoWEdJQ1IsIDB4NGEsIDB4ZjMpOyAqLworCS8qIHhnaWZiX3JlZ19zZXQoWEdJQ1IsIDB4NGEsIDB4ZjMpOyAqLwogCi0JLyogb3V0WEdJSURYUkVHKFhHSUNSLCAweDU3LCAweDApOyAqLwotCS8qIG91dFhHSUlEWFJFRyhYR0lDUiwgMHg3YSwgMHgyYyk7ICovCisJLyogeGdpZmJfcmVnX3NldChYR0lDUiwgMHg1NywgMHgwKTsgKi8KKwkvKiB4Z2lmYl9yZWdfc2V0KFhHSUNSLCAweDdhLCAweDJjKTsgKi8KIAotCS8qIG91dFhHSUlEWFJFRyhYR0lDUiwgMHg4MiwgMHhjYyk7ICovCi0JLyogb3V0WEdJSURYUkVHKFhHSUNSLCAweDhjLCAweDApOyAqLworCS8qIHhnaWZiX3JlZ19zZXQoWEdJQ1IsIDB4ODIsIDB4Y2MpOyAqLworCS8qIHhnaWZiX3JlZ19zZXQoWEdJQ1IsIDB4OGMsIDB4MCk7ICovCiAJLyoKLQlvdXRYR0lJRFhSRUcoWEdJQ1IsIDB4OTksIDB4MSk7Ci0Jb3V0WEdJSURYUkVHKFhHSUNSLCAweDQxLCAweDQwKTsKKwl4Z2lmYl9yZWdfc2V0KFhHSUNSLCAweDk5LCAweDEpOworCXhnaWZiX3JlZ19zZXQoWEdJQ1IsIDB4NDEsIDB4NDApOwogCSovCiAKIAlmb3IgKGkgPSAwOyBpIDwgMHg0ZjsgaSsrKSB7Ci0JCWluWEdJSURYUkVHKFhHSVNSLCBpLCByZWcpOworCQlyZWcgPSB4Z2lmYl9yZWdfZ2V0KFhHSVNSLCBpKTsKIAkJcHJpbnRrKCJcbm8gM2M0ICV4IiwgaSk7CiAJCXByaW50aygiXG5pIDNjNSA9PiAleCIsIHJlZyk7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IDB4RjA7IGkrKykgewotCQlpblhHSUlEWFJFRyhYR0lDUiwgaSwgcmVnKTsKKwkJcmVnID0geGdpZmJfcmVnX2dldChYR0lDUiwgaSk7CiAJCXByaW50aygiXG5vIDNkNCAleCIsIGkpOwogCQlwcmludGsoIlxuaSAzZDUgPT4gJXgiLCByZWcpOwogCX0KIAkvKgotCW91dFhHSUlEWFJFRyhYR0lQQVJUMSwweDJGLDEpOworCXhnaWZiX3JlZ19zZXQoWEdJUEFSVDEsMHgyRiwxKTsKIAlmb3IgKGk9MTsgaSA8IDB4NTA7IGkrKykgewotCQlpblhHSUlEWFJFRyhYR0lQQVJUMSwgaSwgcmVnKTsKKwkJcmVnID0geGdpZmJfcmVnX2dldChYR0lQQVJUMSwgaSk7CiAJCXByaW50aygiXG5vIGQwMDQgJXgiLCBpKTsKIAkJcHJpbnRrKCJcbmkgZDAwNSA9PiAleCIsIHJlZyk7CiAJfQogCiAJZm9yIChpPTA7IGkgPCAweDUwOyBpKyspIHsKLQkJIGluWEdJSURYUkVHKFhHSVBBUlQyLCBpLCByZWcpOworCQkgcmVnID0geGdpZmJfcmVnX2dldChYR0lQQVJUMiwgaSk7CiAJCSBwcmludGsoIlxubyBkMDEwICV4IiwgaSk7CiAJCSBwcmludGsoIlxuaSBkMDExID0+ICV4IiwgcmVnKTsKIAl9CiAJZm9yIChpPTA7IGkgPCAweDUwOyBpKyspIHsKLQkJaW5YR0lJRFhSRUcoWEdJUEFSVDMsIGksIHJlZyk7CisJCXJlZyA9IHhnaWZiX3JlZ19nZXQoWEdJUEFSVDMsIGkpOwogCQlwcmludGsoIlxubyBkMDEyICV4IixpKTsKIAkJcHJpbnRrKCJcbmkgZDAxMyA9PiAleCIscmVnKTsKIAl9CiAJZm9yIChpPTA7IGkgPCAweDUwOyBpKyspIHsKLQkJaW5YR0lJRFhSRUcoWEdJUEFSVDQsIGksIHJlZyk7CisJCXJlZyA9IHhnaWZiX3JlZ19nZXQoWEdJUEFSVDQsIGkpOwogCQlwcmludGsoIlxubyBkMDE0ICV4IixpKTsKIAkJcHJpbnRrKCJcbmkgZDAxNSA9PiAleCIscmVnKTsKIAl9CkBAIC0zNDgsMTAgKzM0OSwxMCBAQAogCWVsc2UgewogCQlqID0gMDsKIAkJd2hpbGUgKFhHSV9Qci0+RU1vZGVJRFRhYmxlW2pdLkV4dF9Nb2RlSUQgIT0gMHhmZikgewotCQkJaWYgKFhHSV9Qci0+RU1vZGVJRFRhYmxlW2pdLkV4dF9Nb2RlSUQKLQkJCQkJPT0gWEdJX1ByLT5SZWZJbmRleFtSZWZyZXNoUmF0ZVRhYmxlSW5kZXhdLk1vZGVJRCkgewotCQkJCWlmIChYR0lfUHItPkVNb2RlSURUYWJsZVtqXS5FeHRfTW9kZUZsYWcKLQkJCQkJCSYgRG91YmxlU2Nhbk1vZGUpIHsKKwkJCWlmIChYR0lfUHItPkVNb2RlSURUYWJsZVtqXS5FeHRfTW9kZUlEID09CisJCQkgICAgWEdJX1ByLT5SZWZJbmRleFtSZWZyZXNoUmF0ZVRhYmxlSW5kZXhdLk1vZGVJRCkgeworCQkJCWlmIChYR0lfUHItPkVNb2RlSURUYWJsZVtqXS5FeHRfTW9kZUZsYWcgJgorCQkJCSAgICBEb3VibGVTY2FuTW9kZSkgewogCQkJCQkqdm1vZGUgPSBGQl9WTU9ERV9ET1VCTEU7CiAJCQkJfQogCQkJCWJyZWFrOwpAQCAtMzc3LDMwICszNzgsMjIgQEAKIAlYR0lfUHItPlAzYzggPSBCYXNlQWRkciArIDB4MTg7CiAJWEdJX1ByLT5QM2M5ID0gQmFzZUFkZHIgKyAweDE5OwogCVhHSV9Qci0+UDNkYSA9IEJhc2VBZGRyICsgMHgyQTsKLQlYR0lfUHItPlBhcnQxUG9ydCA9IEJhc2VBZGRyICsgWEdJX0NSVDJfUE9SVF8wNDsgLyogRGlnaXRhbCB2aWRlbyBpbnRlcmZhY2UgcmVnaXN0ZXJzIChMQ0QpICovCi0JWEdJX1ByLT5QYXJ0MlBvcnQgPSBCYXNlQWRkciArIFhHSV9DUlQyX1BPUlRfMTA7IC8qIDMwMSBUViBFbmNvZGVyIHJlZ2lzdGVycyAqLwotCVhHSV9Qci0+UGFydDNQb3J0ID0gQmFzZUFkZHIgKyBYR0lfQ1JUMl9QT1JUXzEyOyAvKiAzMDEgTWFjcm92aXNpb24gcmVnaXN0ZXJzICovCi0JWEdJX1ByLT5QYXJ0NFBvcnQgPSBCYXNlQWRkciArIFhHSV9DUlQyX1BPUlRfMTQ7IC8qIDMwMSBWR0EyIChhbmQgTENEKSByZWdpc3RlcnMgKi8KLQlYR0lfUHItPlBhcnQ1UG9ydCA9IEJhc2VBZGRyICsgWEdJX0NSVDJfUE9SVF8xNCArIDI7IC8qIDMwMSBwYWxldHRlIGFkZHJlc3MgcG9ydCByZWdpc3RlcnMgKi8KKwkvKiBEaWdpdGFsIHZpZGVvIGludGVyZmFjZSByZWdpc3RlcnMgKExDRCkgKi8KKwlYR0lfUHItPlBhcnQxUG9ydCA9IEJhc2VBZGRyICsgWEdJX0NSVDJfUE9SVF8wNDsKKwkvKiAzMDEgVFYgRW5jb2RlciByZWdpc3RlcnMgKi8KKwlYR0lfUHItPlBhcnQyUG9ydCA9IEJhc2VBZGRyICsgWEdJX0NSVDJfUE9SVF8xMDsKKwkvKiAzMDEgTWFjcm92aXNpb24gcmVnaXN0ZXJzICovCisJWEdJX1ByLT5QYXJ0M1BvcnQgPSBCYXNlQWRkciArIFhHSV9DUlQyX1BPUlRfMTI7CisJLyogMzAxIFZHQTIgKGFuZCBMQ0QpIHJlZ2lzdGVycyAqLworCVhHSV9Qci0+UGFydDRQb3J0ID0gQmFzZUFkZHIgKyBYR0lfQ1JUMl9QT1JUXzE0OworCS8qIDMwMSBwYWxldHRlIGFkZHJlc3MgcG9ydCByZWdpc3RlcnMgKi8KKwlYR0lfUHItPlBhcnQ1UG9ydCA9IEJhc2VBZGRyICsgWEdJX0NSVDJfUE9SVF8xNCArIDI7CiAKIH0KIAotdm9pZCBYR0lmYl9zZXRfcmVnNCh1MTYgcG9ydCwgdW5zaWduZWQgbG9uZyBkYXRhKQotewotCW91dGwoKHUzMikoZGF0YSAmIDB4ZmZmZmZmZmYpLCBwb3J0KTsKLX0KLQotdTMyIFhHSWZiX2dldF9yZWczKHUxNiBwb3J0KQotewotCXUzMiBkYXRhOwotCi0JZGF0YSA9IGlubChwb3J0KTsKLQlyZXR1cm4gZGF0YTsKLX0KLQogLyogLS0tLS0tLS0tLS0tIEludGVyZmFjZSBmb3IgaW5pdCAmIG1vZGUgc3dpdGNoaW5nIGNvZGUgLS0tLS0tLS0tLS0tLSAqLwogCi11bnNpZ25lZCBjaGFyIFhHSWZiX3F1ZXJ5X1ZHQV9jb25maWdfc3BhY2UoCitzdGF0aWMgdW5zaWduZWQgY2hhciBYR0lmYl9xdWVyeV9WR0FfY29uZmlnX3NwYWNlKAogCQlzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpwWEdJaHdfZXh0LCB1bnNpZ25lZCBsb25nIG9mZnNldCwKIAkJdW5zaWduZWQgbG9uZyBzZXQsIHVuc2lnbmVkIGxvbmcgKnZhbHVlKQogewpAQCAtNDM2LDYzICs0MjksMzUgQEAKIAlyZXR1cm4gMTsKIH0KIAotLyoKLXVuc2lnbmVkIGNoYXIgWEdJZmJfcXVlcnlfbm9ydGhfYnJpZGdlX3NwYWNlKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKnBYR0lod19leHQsCi0JdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2V0LCB1bnNpZ25lZCBsb25nICp2YWx1ZSkKLXsKLQlzdGF0aWMgc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOwotCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGluaXQgPSAwLCB2YWxpZF9wZGV2ID0gMDsKLQl1MTYgbmJyaWRnZV9pZCA9IDA7Ci0KLQlpZiAoIWluaXQpIHsKLQkJaW5pdCA9IDE7Ci0JCXN3aXRjaCAoeGdpX3ZpZGVvX2luZm8uY2hpcCkgewotCQljYXNlIFhHSV81NDA6Ci0JCQluYnJpZGdlX2lkID0gUENJX0RFVklDRV9JRF9YR181NDA7Ci0JCQlicmVhazsKLQkJY2FzZSBYR0lfNjMwOgotCQkJbmJyaWRnZV9pZCA9IFBDSV9ERVZJQ0VfSURfWEdfNjMwOwotCQkJYnJlYWs7Ci0JCWNhc2UgWEdJXzczMDoKLQkJCW5icmlkZ2VfaWQgPSBQQ0lfREVWSUNFX0lEX1hHXzczMDsKLQkJCWJyZWFrOwotCQljYXNlIFhHSV81NTA6Ci0JCQluYnJpZGdlX2lkID0gUENJX0RFVklDRV9JRF9YR181NTA7Ci0JCQlicmVhazsKLQkJY2FzZSBYR0lfNjUwOgotCQkJbmJyaWRnZV9pZCA9IFBDSV9ERVZJQ0VfSURfWEdfNjUwOwotCQkJYnJlYWs7Ci0JCWNhc2UgWEdJXzc0MDoKLQkJCW5icmlkZ2VfaWQgPSBQQ0lfREVWSUNFX0lEX1hHXzc0MDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJbmJyaWRnZV9pZCA9IDA7Ci0JCQlicmVhazsKLQkJfQotCi0JCXBkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX1NJLCBuYnJpZGdlX2lkLCBwZGV2KTsKLQkJaWYgKHBkZXYpIHsKLQkJCXZhbGlkX3BkZXYgPSAxOwotCQkJcGNpX2Rldl9wdXQocGRldik7Ci0JCX0KLQl9Ci0KLQlpZiAoIXZhbGlkX3BkZXYpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlhHSWZiOiBDYW4ndCBmaW5kIFhHSSAlZCBOb3J0aCBCcmlkZ2UgZGV2aWNlLlxuIiwKLQkJCW5icmlkZ2VfaWQpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoc2V0ID09IDApCi0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBvZmZzZXQsICh1MzIgKil2YWx1ZSk7Ci0JZWxzZQotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIG9mZnNldCwgKHUzMikoKnZhbHVlKSk7Ci0KLQlyZXR1cm4gMTsKLX0KLSovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0gSW50ZXJuYWwgaGVscGVyIHJvdXRpbmVzIC0tLS0tLS0tLS0tLS0tLS0tICovCiAKK3N0YXRpYyBpbnQgWEdJZmJfR2V0WEcyMURlZmF1bHRMVkRTTW9kZUlkeCh2b2lkKQoreworCisJaW50IGZvdW5kX21vZGUgPSAwOworCWludCBYR0lmYl9tb2RlX2lkeCA9IDA7CisKKwlmb3VuZF9tb2RlID0gMDsKKwl3aGlsZSAoKFhHSWJpb3NfbW9kZVtYR0lmYl9tb2RlX2lkeF0ubW9kZV9ubyAhPSAwKQorCQkJJiYgKFhHSWJpb3NfbW9kZVtYR0lmYl9tb2RlX2lkeF0ueHJlcworCQkJCQk8PSBYR0kyMV9MQ0RDYXBMaXN0WzBdLkxWRFNIREUpKSB7CisJCWlmICgoWEdJYmlvc19tb2RlW1hHSWZiX21vZGVfaWR4XS54cmVzCisJCQkJPT0gWEdJMjFfTENEQ2FwTGlzdFswXS5MVkRTSERFKQorCQkJCSYmIChYR0liaW9zX21vZGVbWEdJZmJfbW9kZV9pZHhdLnlyZXMKKwkJCQkJCT09IFhHSTIxX0xDRENhcExpc3RbMF0uTFZEU1ZERSkKKwkJCQkmJiAoWEdJYmlvc19tb2RlW1hHSWZiX21vZGVfaWR4XS5icHAgPT0gOCkpIHsKKwkJCVhHSWZiX21vZGVfbm8gPSBYR0liaW9zX21vZGVbWEdJZmJfbW9kZV9pZHhdLm1vZGVfbm87CisJCQlmb3VuZF9tb2RlID0gMTsKKwkJCWJyZWFrOworCQl9CisJCVhHSWZiX21vZGVfaWR4Kys7CisJfQorCWlmICghZm91bmRfbW9kZSkKKwkJWEdJZmJfbW9kZV9pZHggPSAwOworCisJcmV0dXJuIFhHSWZiX21vZGVfaWR4OworfQorCiBzdGF0aWMgdm9pZCBYR0lmYl9zZWFyY2hfbW9kZShjb25zdCBjaGFyICpuYW1lKQogewogCWludCBpID0gMCwgaiA9IDAsIGw7CkBAIC01NTEsOCArNTE2LDggQEAKIAl2ZXNhbW9kZSAmPSAweDFkZmY7IC8qIENsZWFuIFZFU0EgbW9kZSBudW1iZXIgZnJvbSBvdGhlciBmbGFncyAqLwogCiAJd2hpbGUgKFhHSWJpb3NfbW9kZVtpXS5tb2RlX25vICE9IDApIHsKLQkJaWYgKChYR0liaW9zX21vZGVbaV0udmVzYV9tb2RlX25vXzEgPT0gdmVzYW1vZGUpCi0JCQkJfHwgKFhHSWJpb3NfbW9kZVtpXS52ZXNhX21vZGVfbm9fMiA9PSB2ZXNhbW9kZSkpIHsKKwkJaWYgKChYR0liaW9zX21vZGVbaV0udmVzYV9tb2RlX25vXzEgPT0gdmVzYW1vZGUpIHx8CisJCSAgICAoWEdJYmlvc19tb2RlW2ldLnZlc2FfbW9kZV9ub18yID09IHZlc2Ftb2RlKSkgewogCQkJeGdpZmJfbW9kZV9pZHggPSBpOwogCQkJaiA9IDE7CiAJCQlicmVhazsKQEAgLTU2OSwxMSArNTM0LDEzIEBACiAJdW5zaWduZWQgY2hhciAqcERhdGE7CiAJaW50IGksIGosIGs7CiAKLQlpblhHSUlEWFJFRyhYR0lTUiwgMHgxZSwgdG1wKTsKLQlvdXRYR0lJRFhSRUcoWEdJU1IsIDB4MWUsIHRtcCB8IDQpOworCXRtcCA9IHhnaWZiX3JlZ19nZXQoWEdJU1IsIDB4MWUpOworCXhnaWZiX3JlZ19zZXQoWEdJU1IsIDB4MWUsIHRtcCB8IDQpOwogCiAJcERhdGEgPSB4Z2lfdmlkZW9faW5mby5tbWlvX3ZiYXNlICsgMHgyMDAwMDsKLQlpZiAoKHBEYXRhWzB4MF0gPT0gMHg1NSkgJiYgKHBEYXRhWzB4MV0gPT0gMHhBQSkgJiYgKHBEYXRhWzB4NjVdICYgMHgxKSkgeworCWlmICgocERhdGFbMHgwXSA9PSAweDU1KSAmJgorCSAgICAocERhdGFbMHgxXSA9PSAweEFBKSAmJgorCSAgICAocERhdGFbMHg2NV0gJiAweDEpKSB7CiAJCWkgPSBwRGF0YVsweDMxNl0gfCAocERhdGFbMHgzMTddIDw8IDgpOwogCQlqID0gcERhdGFbaSAtIDFdOwogCQlpZiAoaiA9PSAweGZmKQpAQCAtNjE2LDMzICs1ODMsNiBAQAogCXJldHVybiAwOwogfQogCi1pbnQgWEdJZmJfR2V0WEcyMURlZmF1bHRMVkRTTW9kZUlkeCh2b2lkKQotewotCi0JaW50IGZvdW5kX21vZGUgPSAwOwotCWludCBYR0lmYl9tb2RlX2lkeCA9IDA7Ci0KLQlmb3VuZF9tb2RlID0gMDsKLQl3aGlsZSAoKFhHSWJpb3NfbW9kZVtYR0lmYl9tb2RlX2lkeF0ubW9kZV9ubyAhPSAwKQotCQkJJiYgKFhHSWJpb3NfbW9kZVtYR0lmYl9tb2RlX2lkeF0ueHJlcwotCQkJCQk8PSBYR0kyMV9MQ0RDYXBMaXN0WzBdLkxWRFNIREUpKSB7Ci0JCWlmICgoWEdJYmlvc19tb2RlW1hHSWZiX21vZGVfaWR4XS54cmVzCi0JCQkJPT0gWEdJMjFfTENEQ2FwTGlzdFswXS5MVkRTSERFKQotCQkJCSYmIChYR0liaW9zX21vZGVbWEdJZmJfbW9kZV9pZHhdLnlyZXMKLQkJCQkJCT09IFhHSTIxX0xDRENhcExpc3RbMF0uTFZEU1ZERSkKLQkJCQkmJiAoWEdJYmlvc19tb2RlW1hHSWZiX21vZGVfaWR4XS5icHAgPT0gOCkpIHsKLQkJCVhHSWZiX21vZGVfbm8gPSBYR0liaW9zX21vZGVbWEdJZmJfbW9kZV9pZHhdLm1vZGVfbm87Ci0JCQlmb3VuZF9tb2RlID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JCVhHSWZiX21vZGVfaWR4Kys7Ci0JfQotCWlmICghZm91bmRfbW9kZSkKLQkJWEdJZmJfbW9kZV9pZHggPSAwOwotCi0JcmV0dXJuIFhHSWZiX21vZGVfaWR4OwotfQotCiBzdGF0aWMgaW50IFhHSWZiX3ZhbGlkYXRlX21vZGUoaW50IG15aW5kZXgpCiB7CiAJdTE2IHhyZXMsIHlyZXM7CkBAIC02NTYsOCArNTk2LDggQEAKIAkJCQlyZXR1cm4gLTE7CiAJCQlpZiAoWEdJYmlvc19tb2RlW215aW5kZXhdLnlyZXMgPiB5cmVzKQogCQkJCXJldHVybiAtMTsKLQkJCWlmICgoWEdJYmlvc19tb2RlW215aW5kZXhdLnhyZXMgPCB4cmVzKQotCQkJCQkmJiAoWEdJYmlvc19tb2RlW215aW5kZXhdLnlyZXMgPCB5cmVzKSkgeworCQkJaWYgKChYR0liaW9zX21vZGVbbXlpbmRleF0ueHJlcyA8IHhyZXMpICYmCisJCQkgICAgKFhHSWJpb3NfbW9kZVtteWluZGV4XS55cmVzIDwgeXJlcykpIHsKIAkJCQlpZiAoWEdJYmlvc19tb2RlW215aW5kZXhdLmJwcCA+IDgpCiAJCQkJCXJldHVybiAtMTsKIAkJCX0KQEAgLTczMyw3ICs2NzMsNyBAQAogCQlpZiAoWEdJYmlvc19tb2RlW215aW5kZXhdLnlyZXMgPiB5cmVzKQogCQkJcmV0dXJuIC0xOwogCQlpZiAoKFhHSWh3X2V4dC51bEV4dGVybmFsQ2hpcCA9PSAweDAxKSB8fCAvKiBMVkRTICovCi0JCQkJKFhHSWh3X2V4dC51bEV4dGVybmFsQ2hpcCA9PSAweDA1KSkgeyAvKiBMVkRTK0Nocm9udGVsICovCisJCSAgICAoWEdJaHdfZXh0LnVsRXh0ZXJuYWxDaGlwID09IDB4MDUpKSB7IC8qIExWRFMrQ2hyb250ZWwgKi8KIAkJCXN3aXRjaCAoWEdJYmlvc19tb2RlW215aW5kZXhdLnhyZXMpIHsKIAkJCWNhc2UgNTEyOgogCQkJCWlmIChYR0liaW9zX21vZGVbbXlpbmRleF0ueXJlcyAhPSA1MTIpCkBAIC03NTIsMTMgKzY5MiwxMSBAQAogCQkJCQlyZXR1cm4gLTE7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDEwMjQ6Ci0JCQkJaWYgKChYR0liaW9zX21vZGVbbXlpbmRleF0ueXJlcyAhPSA2MDApCi0JCQkJCQkmJiAoWEdJYmlvc19tb2RlW215aW5kZXhdLnlyZXMKLQkJCQkJCQkJIT0gNzY4KSkKKwkJCQlpZiAoKFhHSWJpb3NfbW9kZVtteWluZGV4XS55cmVzICE9IDYwMCkgJiYKKwkJCQkgICAgKFhHSWJpb3NfbW9kZVtteWluZGV4XS55cmVzICE9IDc2OCkpCiAJCQkJCXJldHVybiAtMTsKLQkJCQlpZiAoKFhHSWJpb3NfbW9kZVtteWluZGV4XS55cmVzID09IDYwMCkKLQkJCQkJCSYmIChYR0lod19leHQudWxDUlQyTENEVHlwZQotCQkJCQkJCQkhPSBMQ0RfMTAyNHg2MDApKQorCQkJCWlmICgoWEdJYmlvc19tb2RlW215aW5kZXhdLnlyZXMgPT0gNjAwKSAmJgorCQkJCSAgICAoWEdJaHdfZXh0LnVsQ1JUMkxDRFR5cGUgIT0gTENEXzEwMjR4NjAwKSkKIAkJCQkJcmV0dXJuIC0xOwogCQkJCWJyZWFrOwogCQkJY2FzZSAxMTUyOgpAQCAtNzY4LDEzICs3MDYsMTEgQEAKIAkJCQkJcmV0dXJuIC0xOwogCQkJCWJyZWFrOwogCQkJY2FzZSAxMjgwOgotCQkJCWlmICgoWEdJYmlvc19tb2RlW215aW5kZXhdLnlyZXMgIT0gNzY4KQotCQkJCQkJJiYgKFhHSWJpb3NfbW9kZVtteWluZGV4XS55cmVzCi0JCQkJCQkJCSE9IDEwMjQpKQorCQkJCWlmICgoWEdJYmlvc19tb2RlW215aW5kZXhdLnlyZXMgIT0gNzY4KSAmJgorCQkJCSAgICAoWEdJYmlvc19tb2RlW215aW5kZXhdLnlyZXMgIT0gMTAyNCkpCiAJCQkJCXJldHVybiAtMTsKLQkJCQlpZiAoKFhHSWJpb3NfbW9kZVtteWluZGV4XS55cmVzID09IDc2OCkKLQkJCQkJCSYmIChYR0lod19leHQudWxDUlQyTENEVHlwZQotCQkJCQkJCQkhPSBMQ0RfMTI4MHg3NjgpKQorCQkJCWlmICgoWEdJYmlvc19tb2RlW215aW5kZXhdLnlyZXMgPT0gNzY4KSAmJgorCQkJCSAgICAoWEdJaHdfZXh0LnVsQ1JUMkxDRFR5cGUgIT0gTENEXzEyODB4NzY4KSkKIAkJCQkJcmV0dXJuIC0xOwogCQkJCWJyZWFrOwogCQkJY2FzZSAxNDAwOgpAQCAtNzk1LDkgKzczMSw4IEBACiAJCQkJCXJldHVybiAtMTsKIAkJCQlicmVhazsKIAkJCWNhc2UgNjQwOgotCQkJCWlmICgoWEdJYmlvc19tb2RlW215aW5kZXhdLnlyZXMgIT0gNDAwKQotCQkJCQkJJiYgKFhHSWJpb3NfbW9kZVtteWluZGV4XS55cmVzCi0JCQkJCQkJCSE9IDQ4MCkpCisJCQkJaWYgKChYR0liaW9zX21vZGVbbXlpbmRleF0ueXJlcyAhPSA0MDApICYmCisJCQkJICAgIChYR0liaW9zX21vZGVbbXlpbmRleF0ueXJlcyAhPSA0ODApKQogCQkJCQlyZXR1cm4gLTE7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDgwMDoKQEAgLTgwOSwxMyArNzQ0LDEyIEBACiAJCQkJCXJldHVybiAtMTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMTI4MDoKLQkJCQlpZiAoKFhHSWJpb3NfbW9kZVtteWluZGV4XS55cmVzICE9IDk2MCkKLQkJCQkJCSYmIChYR0liaW9zX21vZGVbbXlpbmRleF0ueXJlcwotCQkJCQkJCQkhPSAxMDI0KSkKKwkJCQlpZiAoKFhHSWJpb3NfbW9kZVtteWluZGV4XS55cmVzICE9IDk2MCkgJiYKKwkJCQkgICAgKFhHSWJpb3NfbW9kZVtteWluZGV4XS55cmVzICE9IDEwMjQpKQogCQkJCQlyZXR1cm4gLTE7CiAJCQkJaWYgKFhHSWJpb3NfbW9kZVtteWluZGV4XS55cmVzID09IDk2MCkgewotCQkJCQlpZiAoWEdJaHdfZXh0LnVsQ1JUMkxDRFR5cGUKLQkJCQkJCQk9PSBMQ0RfMTQwMHgxMDUwKQorCQkJCQlpZiAoWEdJaHdfZXh0LnVsQ1JUMkxDRFR5cGUgPT0KKwkJCQkJICAgIExDRF8xNDAweDEwNTApCiAJCQkJCQlyZXR1cm4gLTE7CiAJCQkJfQogCQkJCWJyZWFrOwpAQCAtODQ3LDggKzc4MSw4IEBACiAJCQkJCXJldHVybiAtMTsKIAkJCX0KIAkJCS8qICBUVzogTFZEUy9DSFJPTlRFTCBkb2VzIG5vdCBzdXBwb3J0IDcyMCAqLwotCQkJaWYgKHhnaV92aWRlb19pbmZvLmhhc1ZCID09IEhBU1ZCX0xWRFNfQ0hST05URUwKLQkJCQkJfHwgeGdpX3ZpZGVvX2luZm8uaGFzVkIJPT0gSEFTVkJfQ0hST05URUwpIHsKKwkJCWlmICh4Z2lfdmlkZW9faW5mby5oYXNWQiA9PSBIQVNWQl9MVkRTX0NIUk9OVEVMIHx8CisJCQkgICAgeGdpX3ZpZGVvX2luZm8uaGFzVkIgPT0gSEFTVkJfQ0hST05URUwpIHsKIAkJCQlyZXR1cm4gLTE7CiAJCQl9CiAJCQlicmVhazsKQEAgLTkwMCwzMSArODM0LDMxIEBACiAKIAlYR0lmYl9yYXRlX2lkeCA9IDA7CiAJd2hpbGUgKChYR0lmYl92cmF0ZVtpXS5pZHggIT0gMCkgJiYgKFhHSWZiX3ZyYXRlW2ldLnhyZXMgPD0geHJlcykpIHsKLQkJaWYgKChYR0lmYl92cmF0ZVtpXS54cmVzID09IHhyZXMpICYmIChYR0lmYl92cmF0ZVtpXS55cmVzCi0JCQkJPT0geXJlcykpIHsKKwkJaWYgKChYR0lmYl92cmF0ZVtpXS54cmVzID09IHhyZXMpICYmCisJCSAgICAoWEdJZmJfdnJhdGVbaV0ueXJlcyA9PSB5cmVzKSkgewogCQkJaWYgKFhHSWZiX3ZyYXRlW2ldLnJlZnJlc2ggPT0gcmF0ZSkgewogCQkJCVhHSWZiX3JhdGVfaWR4ID0gWEdJZmJfdnJhdGVbaV0uaWR4OwogCQkJCWJyZWFrOwogCQkJfSBlbHNlIGlmIChYR0lmYl92cmF0ZVtpXS5yZWZyZXNoID4gcmF0ZSkgewogCQkJCWlmICgoWEdJZmJfdnJhdGVbaV0ucmVmcmVzaCAtIHJhdGUpIDw9IDMpIHsKIAkJCQkJRFBSSU5USygiWEdJZmI6IEFkanVzdGluZyByYXRlIGZyb20gJWQgdXAgdG8gJWRcbiIsCi0JCQkJCQkJcmF0ZSwgWEdJZmJfdnJhdGVbaV0ucmVmcmVzaCk7CisJCQkJCQlyYXRlLCBYR0lmYl92cmF0ZVtpXS5yZWZyZXNoKTsKIAkJCQkJWEdJZmJfcmF0ZV9pZHggPSBYR0lmYl92cmF0ZVtpXS5pZHg7Ci0JCQkJCXhnaV92aWRlb19pbmZvLnJlZnJlc2hfcmF0ZQotCQkJCQkJCT0gWEdJZmJfdnJhdGVbaV0ucmVmcmVzaDsKKwkJCQkJeGdpX3ZpZGVvX2luZm8ucmVmcmVzaF9yYXRlID0KKwkJCQkJCVhHSWZiX3ZyYXRlW2ldLnJlZnJlc2g7CiAJCQkJfSBlbHNlIGlmICgoKHJhdGUgLSBYR0lmYl92cmF0ZVtpIC0gMV0ucmVmcmVzaCkKIAkJCQkJCTw9IDIpICYmIChYR0lmYl92cmF0ZVtpXS5pZHgKIAkJCQkJCSE9IDEpKSB7CiAJCQkJCURQUklOVEsoIlhHSWZiOiBBZGp1c3RpbmcgcmF0ZSBmcm9tICVkIGRvd24gdG8gJWRcbiIsCi0JCQkJCQkJcmF0ZSwgWEdJZmJfdnJhdGVbaS0xXS5yZWZyZXNoKTsKKwkJCQkJCXJhdGUsIFhHSWZiX3ZyYXRlW2ktMV0ucmVmcmVzaCk7CiAJCQkJCVhHSWZiX3JhdGVfaWR4ID0gWEdJZmJfdnJhdGVbaSAtIDFdLmlkeDsKLQkJCQkJeGdpX3ZpZGVvX2luZm8ucmVmcmVzaF9yYXRlCi0JCQkJCQkJPSBYR0lmYl92cmF0ZVtpIC0gMV0ucmVmcmVzaDsKKwkJCQkJeGdpX3ZpZGVvX2luZm8ucmVmcmVzaF9yYXRlID0KKwkJCQkJCVhHSWZiX3ZyYXRlW2kgLSAxXS5yZWZyZXNoOwogCQkJCX0KIAkJCQlicmVhazsKIAkJCX0gZWxzZSBpZiAoKHJhdGUgLSBYR0lmYl92cmF0ZVtpXS5yZWZyZXNoKSA8PSAyKSB7CiAJCQkJRFBSSU5USygiWEdJZmI6IEFkanVzdGluZyByYXRlIGZyb20gJWQgZG93biB0byAlZFxuIiwKLQkJCQkJCXJhdGUsIFhHSWZiX3ZyYXRlW2ldLnJlZnJlc2gpOworCQkJCQlyYXRlLCBYR0lmYl92cmF0ZVtpXS5yZWZyZXNoKTsKIAkJCQlYR0lmYl9yYXRlX2lkeCA9IFhHSWZiX3ZyYXRlW2ldLmlkeDsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTkzNCw4ICs4NjgsOCBAQAogCWlmIChYR0lmYl9yYXRlX2lkeCA+IDApIHsKIAkJcmV0dXJuIFhHSWZiX3JhdGVfaWR4OwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJCQkiWEdJZmI6IFVuc3VwcG9ydGVkIHJhdGUgJWQgZm9yICVkeCVkXG4iLCByYXRlLCB4cmVzLCB5cmVzKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiWEdJZmI6IFVuc3VwcG9ydGVkIHJhdGUgJWQgZm9yICVkeCVkXG4iLAorCQkgICAgICAgcmF0ZSwgeHJlcywgeXJlcyk7CiAJCXJldHVybiAwOwogCX0KIH0KQEAgLTk5MSw2ICs5MjUsMjgyIEBACiAJfQogfQogCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gU2V0TW9kZSByb3V0aW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyB2b2lkIFhHSWZiX3ByZV9zZXRtb2RlKHZvaWQpCit7CisJdTggY3IzMCA9IDAsIGNyMzEgPSAwOworCisJY3IzMSA9IHhnaWZiX3JlZ19nZXQoWEdJQ1IsIDB4MzEpOworCWNyMzEgJj0gfjB4NjA7CisKKwlzd2l0Y2ggKHhnaV92aWRlb19pbmZvLmRpc3Bfc3RhdGUgJiBESVNQVFlQRV9ESVNQMikgeworCWNhc2UgRElTUFRZUEVfQ1JUMjoKKwkJY3IzMCA9IChYR0lfVkJfT1VUUFVUX0NSVDIgfCBYR0lfU0lNVUxUQU5FT1VTX1ZJRVdfRU5BQkxFKTsKKwkJY3IzMSB8PSBYR0lfRFJJVkVSX01PREU7CisJCWJyZWFrOworCWNhc2UgRElTUFRZUEVfTENEOgorCQljcjMwID0gKFhHSV9WQl9PVVRQVVRfTENEIHwgWEdJX1NJTVVMVEFORU9VU19WSUVXX0VOQUJMRSk7CisJCWNyMzEgfD0gWEdJX0RSSVZFUl9NT0RFOworCQlicmVhazsKKwljYXNlIERJU1BUWVBFX1RWOgorCQlpZiAoeGdpX3ZpZGVvX2luZm8uVFZfdHlwZSA9PSBUVk1PREVfSElWSVNJT04pCisJCQljcjMwID0gKFhHSV9WQl9PVVRQVVRfSElWSVNJT04KKwkJCQkJfCBYR0lfU0lNVUxUQU5FT1VTX1ZJRVdfRU5BQkxFKTsKKwkJZWxzZSBpZiAoeGdpX3ZpZGVvX2luZm8uVFZfcGx1ZyA9PSBUVlBMVUdfU1ZJREVPKQorCQkJY3IzMCA9IChYR0lfVkJfT1VUUFVUX1NWSURFTworCQkJCQl8IFhHSV9TSU1VTFRBTkVPVVNfVklFV19FTkFCTEUpOworCQllbHNlIGlmICh4Z2lfdmlkZW9faW5mby5UVl9wbHVnID09IFRWUExVR19DT01QT1NJVEUpCisJCQljcjMwID0gKFhHSV9WQl9PVVRQVVRfQ09NUE9TSVRFCisJCQkJCXwgWEdJX1NJTVVMVEFORU9VU19WSUVXX0VOQUJMRSk7CisJCWVsc2UgaWYgKHhnaV92aWRlb19pbmZvLlRWX3BsdWcgPT0gVFZQTFVHX1NDQVJUKQorCQkJY3IzMCA9IChYR0lfVkJfT1VUUFVUX1NDQVJUCisJCQkJCXwgWEdJX1NJTVVMVEFORU9VU19WSUVXX0VOQUJMRSk7CisJCWNyMzEgfD0gWEdJX0RSSVZFUl9NT0RFOworCisJCWlmIChYR0lmYl90dm1vZGUgPT0gMSB8fCB4Z2lfdmlkZW9faW5mby5UVl90eXBlID09IFRWTU9ERV9QQUwpCisJCQljcjMxIHw9IDB4MDE7CisJCWVsc2UKKwkJCWNyMzEgJj0gfjB4MDE7CisJCWJyZWFrOworCWRlZmF1bHQ6IC8qIGRpc2FibGUgQ1JUMiAqLworCQljcjMwID0gMHgwMDsKKwkJY3IzMSB8PSAoWEdJX0RSSVZFUl9NT0RFIHwgWEdJX1ZCX09VVFBVVF9ESVNBQkxFKTsKKwl9CisKKwl4Z2lmYl9yZWdfc2V0KFhHSUNSLCBJTkRfWEdJX1NDUkFUQ0hfUkVHX0NSMzAsIGNyMzApOworCXhnaWZiX3JlZ19zZXQoWEdJQ1IsIElORF9YR0lfU0NSQVRDSF9SRUdfQ1IzMSwgY3IzMSk7CisJeGdpZmJfcmVnX3NldChYR0lDUiwgSU5EX1hHSV9TQ1JBVENIX1JFR19DUjMzLCAoWEdJZmJfcmF0ZV9pZHggJiAweDBGKSk7Cit9CisKK3N0YXRpYyB2b2lkIFhHSWZiX3Bvc3Rfc2V0bW9kZSh2b2lkKQoreworCXU4IHJlZzsKKwl1bnNpZ25lZCBjaGFyIGRvaXQgPSAxOworCS8qCisJeGdpZmJfcmVnX3NldChYR0lTUixJTkRfWEdJX1BBU1NXT1JELFhHSV9QQVNTV09SRCk7CisJeGdpZmJfcmVnX3NldChYR0lDUiwgMHgxMywgMHgwMCk7CisJeGdpZmJfcmVnX2FuZF9vcihYR0lTUiwweDBFLCAweEYwLCAweDAxKTsKKwkqdGVzdCoKKwkqLworCWlmICh4Z2lfdmlkZW9faW5mby52aWRlb19icHAgPT0gOCkgeworCQkvKiBUVzogV2UgY2FuJ3Qgc3dpdGNoIG9mZiBDUlQxIG9uIExWRFMvQ2hyb250ZWwKKwkJICogaW4gOGJwcCBNb2RlcyAqLworCQlpZiAoKHhnaV92aWRlb19pbmZvLmhhc1ZCID09IEhBU1ZCX0xWRFMpIHx8CisJCSAgICAoeGdpX3ZpZGVvX2luZm8uaGFzVkIgPT0gSEFTVkJfTFZEU19DSFJPTlRFTCkpIHsKKwkJCWRvaXQgPSAwOworCQl9CisJCS8qIFRXOiBXZSBjYW4ndCBzd2l0Y2ggb2ZmIENSVDEgb24gMzAxQi1ESAorCQkgKiBpbiA4YnBwIE1vZGVzIGlmIHVzaW5nIExDRCAqLworCQlpZiAoeGdpX3ZpZGVvX2luZm8uZGlzcF9zdGF0ZSAmIERJU1BUWVBFX0xDRCkKKwkJCWRvaXQgPSAwOworCX0KKworCS8qIFRXOiBXZSBjYW4ndCBzd2l0Y2ggb2ZmIENSVDEgaWYgYnJpZGdlIGlzIGluIHNsYXZlIG1vZGUgKi8KKwlpZiAoeGdpX3ZpZGVvX2luZm8uaGFzVkIgIT0gSEFTVkJfTk9ORSkgeworCQlyZWcgPSB4Z2lmYl9yZWdfZ2V0KFhHSVBBUlQxLCAweDAwKTsKKworCQlpZiAoKHJlZyAmIDB4NTApID09IDB4MTApCisJCQlkb2l0ID0gMDsKKworCX0gZWxzZSB7CisJCVhHSWZiX2NydDFvZmYgPSAwOworCX0KKworCXJlZyA9IHhnaWZiX3JlZ19nZXQoWEdJQ1IsIDB4MTcpOworCWlmICgoWEdJZmJfY3J0MW9mZikgJiYgKGRvaXQpKQorCQlyZWcgJj0gfjB4ODA7CisJZWxzZQorCQlyZWcgfD0gMHg4MDsKKwl4Z2lmYl9yZWdfc2V0KFhHSUNSLCAweDE3LCByZWcpOworCisJeGdpZmJfcmVnX2FuZChYR0lTUiwgSU5EX1hHSV9SQU1EQUNfQ09OVFJPTCwgfjB4MDQpOworCisJaWYgKCh4Z2lfdmlkZW9faW5mby5kaXNwX3N0YXRlICYgRElTUFRZUEVfVFYpICYmICh4Z2lfdmlkZW9faW5mby5oYXNWQgorCQkJPT0gSEFTVkJfMzAxKSkgeworCisJCXJlZyA9IHhnaWZiX3JlZ19nZXQoWEdJUEFSVDQsIDB4MDEpOworCisJCWlmIChyZWcgPCAweEIwKSB7IC8qIFNldCBmaWx0ZXIgZm9yIFhHSTMwMSAqLworCQkJc3dpdGNoICh4Z2lfdmlkZW9faW5mby52aWRlb193aWR0aCkgeworCQkJY2FzZSAzMjA6CisJCQkJZmlsdGVyX3RiID0gKHhnaV92aWRlb19pbmZvLlRWX3R5cGUgPT0KKwkJCQkJICAgICBUVk1PREVfTlRTQykgPyA0IDogMTI7CisJCQkJYnJlYWs7CisJCQljYXNlIDY0MDoKKwkJCQlmaWx0ZXJfdGIgPSAoeGdpX3ZpZGVvX2luZm8uVFZfdHlwZSA9PQorCQkJCQkgICAgIFRWTU9ERV9OVFNDKSA/IDUgOiAxMzsKKwkJCQlicmVhazsKKwkJCWNhc2UgNzIwOgorCQkJCWZpbHRlcl90YiA9ICh4Z2lfdmlkZW9faW5mby5UVl90eXBlID09CisJCQkJCSAgICAgVFZNT0RFX05UU0MpID8gNiA6IDE0OworCQkJCWJyZWFrOworCQkJY2FzZSA4MDA6CisJCQkJZmlsdGVyX3RiID0gKHhnaV92aWRlb19pbmZvLlRWX3R5cGUgPT0KKwkJCQkJICAgICBUVk1PREVfTlRTQykgPyA3IDogMTU7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWZpbHRlciA9IC0xOworCQkJCWJyZWFrOworCQkJfQorCQkJeGdpZmJfcmVnX29yKFhHSVBBUlQxLCBYR0lmYl9DUlQyX3dyaXRlX2VuYWJsZSwgMHgwMSk7CisKKwkJCWlmICh4Z2lfdmlkZW9faW5mby5UVl90eXBlID09IFRWTU9ERV9OVFNDKSB7CisKKwkJCQl4Z2lmYl9yZWdfYW5kKFhHSVBBUlQyLCAweDNhLCAweDFmKTsKKworCQkJCWlmICh4Z2lfdmlkZW9faW5mby5UVl9wbHVnID09IFRWUExVR19TVklERU8pIHsKKworCQkJCQl4Z2lmYl9yZWdfYW5kKFhHSVBBUlQyLCAweDMwLCAweGRmKTsKKworCQkJCX0gZWxzZSBpZiAoeGdpX3ZpZGVvX2luZm8uVFZfcGx1ZworCQkJCQkJPT0gVFZQTFVHX0NPTVBPU0lURSkgeworCisJCQkJCXhnaWZiX3JlZ19vcihYR0lQQVJUMiwgMHgzMCwgMHgyMCk7CisKKwkJCQkJc3dpdGNoICh4Z2lfdmlkZW9faW5mby52aWRlb193aWR0aCkgeworCQkJCQljYXNlIDY0MDoKKwkJCQkJCXhnaWZiX3JlZ19zZXQoWEdJUEFSVDIsCisJCQkJCQkJICAgICAgMHgzNSwKKwkJCQkJCQkgICAgICAweEVCKTsKKwkJCQkJCXhnaWZiX3JlZ19zZXQoWEdJUEFSVDIsCisJCQkJCQkJICAgICAgMHgzNiwKKwkJCQkJCQkgICAgICAweDA0KTsKKwkJCQkJCXhnaWZiX3JlZ19zZXQoWEdJUEFSVDIsCisJCQkJCQkJICAgICAgMHgzNywKKwkJCQkJCQkgICAgICAweDI1KTsKKwkJCQkJCXhnaWZiX3JlZ19zZXQoWEdJUEFSVDIsCisJCQkJCQkJICAgICAgMHgzOCwKKwkJCQkJCQkgICAgICAweDE4KTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDcyMDoKKwkJCQkJCXhnaWZiX3JlZ19zZXQoWEdJUEFSVDIsCisJCQkJCQkJICAgICAgMHgzNSwKKwkJCQkJCQkgICAgICAweEVFKTsKKwkJCQkJCXhnaWZiX3JlZ19zZXQoWEdJUEFSVDIsCisJCQkJCQkJICAgICAgMHgzNiwKKwkJCQkJCQkgICAgICAweDBDKTsKKwkJCQkJCXhnaWZiX3JlZ19zZXQoWEdJUEFSVDIsCisJCQkJCQkJICAgICAgMHgzNywKKwkJCQkJCQkgICAgICAweDIyKTsKKwkJCQkJCXhnaWZiX3JlZ19zZXQoWEdJUEFSVDIsCisJCQkJCQkJICAgICAgMHgzOCwKKwkJCQkJCQkgICAgICAweDA4KTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDgwMDoKKwkJCQkJCXhnaWZiX3JlZ19zZXQoWEdJUEFSVDIsCisJCQkJCQkJICAgICAgMHgzNSwKKwkJCQkJCQkgICAgICAweEVCKTsKKwkJCQkJCXhnaWZiX3JlZ19zZXQoWEdJUEFSVDIsCisJCQkJCQkJICAgICAgMHgzNiwKKwkJCQkJCQkgICAgICAweDE1KTsKKwkJCQkJCXhnaWZiX3JlZ19zZXQoWEdJUEFSVDIsCisJCQkJCQkJICAgICAgMHgzNywKKwkJCQkJCQkgICAgICAweDI1KTsKKwkJCQkJCXhnaWZiX3JlZ19zZXQoWEdJUEFSVDIsCisJCQkJCQkJICAgICAgMHgzOCwKKwkJCQkJCQkgICAgICAweEY2KTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCisJCQl9IGVsc2UgaWYgKHhnaV92aWRlb19pbmZvLlRWX3R5cGUgPT0gVFZNT0RFX1BBTCkgeworCisJCQkJeGdpZmJfcmVnX2FuZChYR0lQQVJUMiwgMHgzQSwgMHgxRik7CisKKwkJCQlpZiAoeGdpX3ZpZGVvX2luZm8uVFZfcGx1ZyA9PSBUVlBMVUdfU1ZJREVPKSB7CisKKwkJCQkJeGdpZmJfcmVnX2FuZChYR0lQQVJUMiwgMHgzMCwgMHhERik7CisKKwkJCQl9IGVsc2UgaWYgKHhnaV92aWRlb19pbmZvLlRWX3BsdWcKKwkJCQkJCT09IFRWUExVR19DT01QT1NJVEUpIHsKKworCQkJCQl4Z2lmYl9yZWdfb3IoWEdJUEFSVDIsIDB4MzAsIDB4MjApOworCisJCQkJCXN3aXRjaCAoeGdpX3ZpZGVvX2luZm8udmlkZW9fd2lkdGgpIHsKKwkJCQkJY2FzZSA2NDA6CisJCQkJCQl4Z2lmYl9yZWdfc2V0KFhHSVBBUlQyLAorCQkJCQkJCSAgICAgIDB4MzUsCisJCQkJCQkJICAgICAgMHhGMSk7CisJCQkJCQl4Z2lmYl9yZWdfc2V0KFhHSVBBUlQyLAorCQkJCQkJCSAgICAgIDB4MzYsCisJCQkJCQkJICAgICAgMHhGNyk7CisJCQkJCQl4Z2lmYl9yZWdfc2V0KFhHSVBBUlQyLAorCQkJCQkJCSAgICAgIDB4MzcsCisJCQkJCQkJICAgICAgMHgxRik7CisJCQkJCQl4Z2lmYl9yZWdfc2V0KFhHSVBBUlQyLAorCQkJCQkJCSAgICAgIDB4MzgsCisJCQkJCQkJICAgICAgMHgzMik7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSA3MjA6CisJCQkJCQl4Z2lmYl9yZWdfc2V0KFhHSVBBUlQyLAorCQkJCQkJCSAgICAgIDB4MzUsCisJCQkJCQkJICAgICAgMHhGMyk7CisJCQkJCQl4Z2lmYl9yZWdfc2V0KFhHSVBBUlQyLAorCQkJCQkJCSAgICAgIDB4MzYsCisJCQkJCQkJICAgICAgMHgwMCk7CisJCQkJCQl4Z2lmYl9yZWdfc2V0KFhHSVBBUlQyLAorCQkJCQkJCSAgICAgIDB4MzcsCisJCQkJCQkJICAgICAgMHgxRCk7CisJCQkJCQl4Z2lmYl9yZWdfc2V0KFhHSVBBUlQyLAorCQkJCQkJCSAgICAgIDB4MzgsCisJCQkJCQkJICAgICAgMHgyMCk7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSA4MDA6CisJCQkJCQl4Z2lmYl9yZWdfc2V0KFhHSVBBUlQyLAorCQkJCQkJCSAgICAgIDB4MzUsCisJCQkJCQkJICAgICAgMHhGQyk7CisJCQkJCQl4Z2lmYl9yZWdfc2V0KFhHSVBBUlQyLAorCQkJCQkJCSAgICAgIDB4MzYsCisJCQkJCQkJICAgICAgMHhGQik7CisJCQkJCQl4Z2lmYl9yZWdfc2V0KFhHSVBBUlQyLAorCQkJCQkJCSAgICAgIDB4MzcsCisJCQkJCQkJICAgICAgMHgxNCk7CisJCQkJCQl4Z2lmYl9yZWdfc2V0KFhHSVBBUlQyLAorCQkJCQkJCSAgICAgIDB4MzgsCisJCQkJCQkJICAgICAgMHgyQSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJaWYgKChmaWx0ZXIgPj0gMCkgJiYgKGZpbHRlciA8PSA3KSkgeworCQkJCURQUklOVEsoIkZpbHRlclRhYmxlWyVkXS0lZDogJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKKwkJCQkJZmlsdGVyX3RiLCBmaWx0ZXIsCisJCQkJCVhHSV9UVl9maWx0ZXJbZmlsdGVyX3RiXS4KKwkJCQkJCWZpbHRlcltmaWx0ZXJdWzBdLAorCQkJCQlYR0lfVFZfZmlsdGVyW2ZpbHRlcl90Yl0uCisJCQkJCQlmaWx0ZXJbZmlsdGVyXVsxXSwKKwkJCQkJWEdJX1RWX2ZpbHRlcltmaWx0ZXJfdGJdLgorCQkJCQkJZmlsdGVyW2ZpbHRlcl1bMl0sCisJCQkJCVhHSV9UVl9maWx0ZXJbZmlsdGVyX3RiXS4KKwkJCQkJCWZpbHRlcltmaWx0ZXJdWzNdCisJCQkJKTsKKwkJCQl4Z2lmYl9yZWdfc2V0KAorCQkJCQlYR0lQQVJUMiwKKwkJCQkJMHgzNSwKKwkJCQkJKFhHSV9UVl9maWx0ZXJbZmlsdGVyX3RiXS4KKwkJCQkJCWZpbHRlcltmaWx0ZXJdWzBdKSk7CisJCQkJeGdpZmJfcmVnX3NldCgKKwkJCQkJWEdJUEFSVDIsCisJCQkJCTB4MzYsCisJCQkJCShYR0lfVFZfZmlsdGVyW2ZpbHRlcl90Yl0uCisJCQkJCQlmaWx0ZXJbZmlsdGVyXVsxXSkpOworCQkJCXhnaWZiX3JlZ19zZXQoCisJCQkJCVhHSVBBUlQyLAorCQkJCQkweDM3LAorCQkJCQkoWEdJX1RWX2ZpbHRlcltmaWx0ZXJfdGJdLgorCQkJCQkJZmlsdGVyW2ZpbHRlcl1bMl0pKTsKKwkJCQl4Z2lmYl9yZWdfc2V0KAorCQkJCQlYR0lQQVJUMiwKKwkJCQkJMHgzOCwKKwkJCQkJKFhHSV9UVl9maWx0ZXJbZmlsdGVyX3RiXS4KKwkJCQkJCWZpbHRlcltmaWx0ZXJdWzNdKSk7CisJCQl9CisJCX0KKwl9Cit9CisKIHN0YXRpYyBpbnQgWEdJZmJfZG9fc2V0X3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgaW50IGlzYWN0aXZlLAogCQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKQEAgLTEwMzksNyArMTI0OSwxMCBAQAogCX0KIAogCXByaW50ayhLRVJOX0RFQlVHICJYR0lmYjogQ2hhbmdlIG1vZGUgdG8gJWR4JWR4JWQtJWRIelxuIiwKLQkJCXZhci0+eHJlcywgdmFyLT55cmVzLCB2YXItPmJpdHNfcGVyX3BpeGVsLCB4Z2lfdmlkZW9faW5mby5yZWZyZXNoX3JhdGUpOworCSAgICAgICB2YXItPnhyZXMsCisJICAgICAgIHZhci0+eXJlcywKKwkgICAgICAgdmFyLT5iaXRzX3Blcl9waXhlbCwKKwkgICAgICAgeGdpX3ZpZGVvX2luZm8ucmVmcmVzaF9yYXRlKTsKIAogCW9sZF9tb2RlID0geGdpZmJfbW9kZV9pZHg7CiAJeGdpZmJfbW9kZV9pZHggPSAwOwpAQCAtMTA2NCw4ICsxMjc3LDggQEAKIAkJeGdpZmJfbW9kZV9pZHggPSAtMTsKIAogCWlmICh4Z2lmYl9tb2RlX2lkeCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJYR0lmYjogTW9kZSAlZHglZHglZCBub3Qgc3VwcG9ydGVkXG4iLCB2YXItPnhyZXMsCi0JCQkJdmFyLT55cmVzLCB2YXItPmJpdHNfcGVyX3BpeGVsKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJYR0lmYjogTW9kZSAlZHglZHglZCBub3Qgc3VwcG9ydGVkXG4iLAorCQkgICAgICAgdmFyLT54cmVzLCB2YXItPnlyZXMsIHZhci0+Yml0c19wZXJfcGl4ZWwpOwogCQl4Z2lmYl9tb2RlX2lkeCA9IG9sZF9tb2RlOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xMDc5LDE2ICsxMjkyLDE5IEBACiAKIAkJWEdJZmJfcHJlX3NldG1vZGUoKTsKIAkJaWYgKFhHSVNldE1vZGVOZXcoJlhHSWh3X2V4dCwgWEdJZmJfbW9kZV9ubykgPT0gMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJYR0lmYjogU2V0dGluZyBtb2RlWzB4JXhdIGZhaWxlZFxuIiwgWEdJZmJfbW9kZV9ubyk7CisJCQlwcmludGsoS0VSTl9FUlIgIlhHSWZiOiBTZXR0aW5nIG1vZGVbMHgleF0gZmFpbGVkXG4iLAorCQkJICAgICAgIFhHSWZiX21vZGVfbm8pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJaW5mby0+Zml4LmxpbmVfbGVuZ3RoID0gKChpbmZvLT52YXIueHJlc192aXJ0dWFsCiAJCQkJKiBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwpID4+IDYpOwogCi0JCW91dFhHSUlEWFJFRyhYR0lTUiwgSU5EX1hHSV9QQVNTV09SRCwgWEdJX1BBU1NXT1JEKTsKKwkJeGdpZmJfcmVnX3NldChYR0lTUiwgSU5EX1hHSV9QQVNTV09SRCwgWEdJX1BBU1NXT1JEKTsKIAotCQlvdXRYR0lJRFhSRUcoWEdJQ1IsIDB4MTMsIChpbmZvLT5maXgubGluZV9sZW5ndGggJiAweDAwZmYpKTsKLQkJb3V0WEdJSURYUkVHKFhHSVNSLCAweDBFLCAoaW5mby0+Zml4LmxpbmVfbGVuZ3RoICYgMHhmZjAwKSA+PiA4KTsKKwkJeGdpZmJfcmVnX3NldChYR0lDUiwgMHgxMywgKGluZm8tPmZpeC5saW5lX2xlbmd0aCAmIDB4MDBmZikpOworCQl4Z2lmYl9yZWdfc2V0KFhHSVNSLAorCQkJICAgICAgMHgwRSwKKwkJCSAgICAgIChpbmZvLT5maXgubGluZV9sZW5ndGggJiAweGZmMDApID4+IDgpOwogCiAJCVhHSWZiX3Bvc3Rfc2V0bW9kZSgpOwogCkBAIC0xMTEyLDE2ICsxMzI4LDE2IEBACiAJCQl4Z2lfdmlkZW9faW5mby5YR0kzMTBfQWNjZWxEZXB0aCA9IDB4MDAwMDAwMDA7CiAJCQl4Z2lfdmlkZW9faW5mby52aWRlb19jbWFwX2xlbiA9IDI1NjsKICNpZiBkZWZpbmVkKF9fcG93ZXJwY19fKQotCQkJaW5YR0lJRFhSRUcoWEdJQ1IsIDB4NEQsIGNyX2RhdGEpOwotCQkJb3V0WEdJSURYUkVHKFhHSUNSLCAweDRELCAoY3JfZGF0YSAmIDB4RTApKTsKKwkJCWNyX2RhdGEgPSB4Z2lmYl9yZWdfZ2V0KFhHSUNSLCAweDREKTsKKwkJCXhnaWZiX3JlZ19zZXQoWEdJQ1IsIDB4NEQsIChjcl9kYXRhICYgMHhFMCkpOwogI2VuZGlmCiAJCQlicmVhazsKIAkJY2FzZSAxNjoKIAkJCXhnaV92aWRlb19pbmZvLkRzdENvbG9yID0gMHg4MDAwOwogCQkJeGdpX3ZpZGVvX2luZm8uWEdJMzEwX0FjY2VsRGVwdGggPSAweDAwMDEwMDAwOwogI2lmIGRlZmluZWQoX19wb3dlcnBjX18pCi0JCQlpblhHSUlEWFJFRyhYR0lDUiwgMHg0RCwgY3JfZGF0YSk7Ci0JCQlvdXRYR0lJRFhSRUcoWEdJQ1IsIDB4NEQsICgoY3JfZGF0YSAmIDB4RTApIHwgMHgwQikpOworCQkJY3JfZGF0YSA9IHhnaWZiX3JlZ19nZXQoWEdJQ1IsIDB4NEQpOworCQkJeGdpZmJfcmVnX3NldChYR0lDUiwgMHg0RCwgKChjcl9kYXRhICYgMHhFMCkgfCAweDBCKSk7CiAjZW5kaWYKIAkJCXhnaV92aWRlb19pbmZvLnZpZGVvX2NtYXBfbGVuID0gMTY7CiAJCQlicmVhazsKQEAgLTExMzAsMTMgKzEzNDYsMTQgQEAKIAkJCXhnaV92aWRlb19pbmZvLlhHSTMxMF9BY2NlbERlcHRoID0gMHgwMDAyMDAwMDsKIAkJCXhnaV92aWRlb19pbmZvLnZpZGVvX2NtYXBfbGVuID0gMTY7CiAjaWYgZGVmaW5lZChfX3Bvd2VycGNfXykKLQkJCWluWEdJSURYUkVHKFhHSUNSLCAweDRELCBjcl9kYXRhKTsKLQkJCW91dFhHSUlEWFJFRyhYR0lDUiwgMHg0RCwgKChjcl9kYXRhICYgMHhFMCkgfCAweDE1KSk7CisJCQljcl9kYXRhID0geGdpZmJfcmVnX2dldChYR0lDUiwgMHg0RCk7CisJCQl4Z2lmYl9yZWdfc2V0KFhHSUNSLCAweDRELCAoKGNyX2RhdGEgJiAweEUwKSB8IDB4MTUpKTsKICNlbmRpZgogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQl4Z2lfdmlkZW9faW5mby52aWRlb19jbWFwX2xlbiA9IDE2OwotCQkJcHJpbnRrKEtFUk5fRVJSICJYR0lmYjogVW5zdXBwb3J0ZWQgZGVwdGggJWQiLCB4Z2lfdmlkZW9faW5mby52aWRlb19icHApOworCQkJcHJpbnRrKEtFUk5fRVJSICJYR0lmYjogVW5zdXBwb3J0ZWQgZGVwdGggJWQiLAorCQkJICAgICAgIHhnaV92aWRlb19pbmZvLnZpZGVvX2JwcCk7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTExNzksMjAgKzEzOTYsMjMgQEAKIAkJYnJlYWs7CiAJfQogCi0Jb3V0WEdJSURYUkVHKFhHSVNSLCBJTkRfWEdJX1BBU1NXT1JELCBYR0lfUEFTU1dPUkQpOworCXhnaWZiX3JlZ19zZXQoWEdJU1IsIElORF9YR0lfUEFTU1dPUkQsIFhHSV9QQVNTV09SRCk7CiAKLQlvdXRYR0lJRFhSRUcoWEdJQ1IsIDB4MEQsIGJhc2UgJiAweEZGKTsKLQlvdXRYR0lJRFhSRUcoWEdJQ1IsIDB4MEMsIChiYXNlID4+IDgpICYgMHhGRik7Ci0Jb3V0WEdJSURYUkVHKFhHSVNSLCAweDBELCAoYmFzZSA+PiAxNikgJiAweEZGKTsKLQlvdXRYR0lJRFhSRUcoWEdJU1IsIDB4MzcsIChiYXNlID4+IDI0KSAmIDB4MDMpOwotCXNldFhHSUlEWFJFRyhYR0lTUiwgMHgzNywgMHhERiwgKGJhc2UgPj4gMjEpICYgMHgwNCk7CisJeGdpZmJfcmVnX3NldChYR0lDUiwgMHgwRCwgYmFzZSAmIDB4RkYpOworCXhnaWZiX3JlZ19zZXQoWEdJQ1IsIDB4MEMsIChiYXNlID4+IDgpICYgMHhGRik7CisJeGdpZmJfcmVnX3NldChYR0lTUiwgMHgwRCwgKGJhc2UgPj4gMTYpICYgMHhGRik7CisJeGdpZmJfcmVnX3NldChYR0lTUiwgMHgzNywgKGJhc2UgPj4gMjQpICYgMHgwMyk7CisJeGdpZmJfcmVnX2FuZF9vcihYR0lTUiwgMHgzNywgMHhERiwgKGJhc2UgPj4gMjEpICYgMHgwNCk7CiAKIAlpZiAoeGdpX3ZpZGVvX2luZm8uZGlzcF9zdGF0ZSAmIERJU1BUWVBFX0RJU1AyKSB7Ci0JCW9yWEdJSURYUkVHKFhHSVBBUlQxLCBYR0lmYl9DUlQyX3dyaXRlX2VuYWJsZSwgMHgwMSk7Ci0JCW91dFhHSUlEWFJFRyhYR0lQQVJUMSwgMHgwNiwgKGJhc2UgJiAweEZGKSk7Ci0JCW91dFhHSUlEWFJFRyhYR0lQQVJUMSwgMHgwNSwgKChiYXNlID4+IDgpICYgMHhGRikpOwotCQlvdXRYR0lJRFhSRUcoWEdJUEFSVDEsIDB4MDQsICgoYmFzZSA+PiAxNikgJiAweEZGKSk7Ci0JCXNldFhHSUlEWFJFRyhYR0lQQVJUMSwgMHgwMiwgMHg3RiwgKChiYXNlID4+IDI0KSAmIDB4MDEpIDw8IDcpOworCQl4Z2lmYl9yZWdfb3IoWEdJUEFSVDEsIFhHSWZiX0NSVDJfd3JpdGVfZW5hYmxlLCAweDAxKTsKKwkJeGdpZmJfcmVnX3NldChYR0lQQVJUMSwgMHgwNiwgKGJhc2UgJiAweEZGKSk7CisJCXhnaWZiX3JlZ19zZXQoWEdJUEFSVDEsIDB4MDUsICgoYmFzZSA+PiA4KSAmIDB4RkYpKTsKKwkJeGdpZmJfcmVnX3NldChYR0lQQVJUMSwgMHgwNCwgKChiYXNlID4+IDE2KSAmIDB4RkYpKTsKKwkJeGdpZmJfcmVnX2FuZF9vcihYR0lQQVJUMSwKKwkJCQkgMHgwMiwKKwkJCQkgMHg3RiwKKwkJCQkgKChiYXNlID4+IDI0KSAmIDB4MDEpIDw8IDcpOwogCX0KIAkvKiBwcmludGsoIkVuZCBvZiBwYW5fdmFyIik7ICovCiAJcmV0dXJuIDA7CkBAIC0xMjM1LDE1ICsxNDU1LDE1IEBACiAKIAlzd2l0Y2ggKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCkgewogCWNhc2UgODoKLQkJb3V0WEdJUkVHKFhHSURBQ0EsIHJlZ25vKTsKLQkJb3V0WEdJUkVHKFhHSURBQ0QsIChyZWQgPj4gMTApKTsKLQkJb3V0WEdJUkVHKFhHSURBQ0QsIChncmVlbiA+PiAxMCkpOwotCQlvdXRYR0lSRUcoWEdJREFDRCwgKGJsdWUgPj4gMTApKTsKKwkJb3V0YihyZWdubywgWEdJREFDQSk7CisJCW91dGIoKHJlZCA+PiAxMCksIFhHSURBQ0QpOworCQlvdXRiKChncmVlbiA+PiAxMCksIFhHSURBQ0QpOworCQlvdXRiKChibHVlID4+IDEwKSwgWEdJREFDRCk7CiAJCWlmICh4Z2lfdmlkZW9faW5mby5kaXNwX3N0YXRlICYgRElTUFRZUEVfRElTUDIpIHsKLQkJCW91dFhHSVJFRyhYR0lEQUMyQSwgcmVnbm8pOwotCQkJb3V0WEdJUkVHKFhHSURBQzJELCAocmVkID4+IDgpKTsKLQkJCW91dFhHSVJFRyhYR0lEQUMyRCwgKGdyZWVuID4+IDgpKTsKLQkJCW91dFhHSVJFRyhYR0lEQUMyRCwgKGJsdWUgPj4gOCkpOworCQkJb3V0YihyZWdubywgWEdJREFDMkEpOworCQkJb3V0YigocmVkID4+IDgpLCBYR0lEQUMyRCk7CisJCQlvdXRiKChncmVlbiA+PiA4KSwgWEdJREFDMkQpOworCQkJb3V0YigoYmx1ZSA+PiA4KSwgWEdJREFDMkQpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgMTY6CkBAIC0xMjYyLDYgKzE0ODIsNDEgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogLS0tLS0tLS0tLS0gRkJEZXYgcmVsYXRlZCByb3V0aW5lcyBmb3IgYWxsIHNlcmllcyAtLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgWEdJZmJfZ2V0X2ZpeChzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gKmZpeCwgaW50IGNvbiwKKwkJc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJREVCVUdQUk4oImluc2lkZSBnZXRfZml4Iik7CisJbWVtc2V0KGZpeCwgMCwgc2l6ZW9mKHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbykpOworCisJc3RyY3B5KGZpeC0+aWQsIG15aWQpOworCisJZml4LT5zbWVtX3N0YXJ0ID0geGdpX3ZpZGVvX2luZm8udmlkZW9fYmFzZTsKKworCWZpeC0+c21lbV9sZW4gPSB4Z2lfdmlkZW9faW5mby52aWRlb19zaXplOworCisJZml4LT50eXBlID0gdmlkZW9fdHlwZTsKKwlmaXgtPnR5cGVfYXV4ID0gMDsKKwlpZiAoeGdpX3ZpZGVvX2luZm8udmlkZW9fYnBwID09IDgpCisJCWZpeC0+dmlzdWFsID0gRkJfVklTVUFMX1BTRVVET0NPTE9SOworCWVsc2UKKwkJZml4LT52aXN1YWwgPSBGQl9WSVNVQUxfRElSRUNUQ09MT1I7CisJZml4LT54cGFuc3RlcCA9IDA7CisjaWZkZWYgWEdJRkJfUEFOCisJaWYgKFhHSWZiX3lwYW4pCisJCWZpeC0+eXBhbnN0ZXAgPSAxOworI2VuZGlmCisJZml4LT55d3JhcHN0ZXAgPSAwOworCWZpeC0+bGluZV9sZW5ndGggPSB4Z2lfdmlkZW9faW5mby52aWRlb19saW5lbGVuZ3RoOworCWZpeC0+bW1pb19zdGFydCA9IHhnaV92aWRlb19pbmZvLm1taW9fYmFzZTsKKwlmaXgtPm1taW9fbGVuID0geGdpX3ZpZGVvX2luZm8ubW1pb19zaXplOworCWZpeC0+YWNjZWwgPSBGQl9BQ0NFTF9YR0lfWEFCUkU7CisKKwlERUJVR1BSTigiZW5kIG9mIGdldF9maXgiKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBYR0lmYl9zZXRfcGFyKHN0cnVjdCBmYl9pbmZvICppbmZvKQogewogCWludCBlcnI7CkBAIC0xMzA3LDcgKzE1NjIsOCBAQAogCWlmICh2YXItPnBpeGNsb2NrICYmIGh0b3RhbCAmJiB2dG90YWwpIHsKIAkJZHJhdGUgPSAxMDAwMDAwMDAwIC8gdmFyLT5waXhjbG9jazsKIAkJaHJhdGUgPSAoZHJhdGUgKiAxMDAwKSAvIGh0b3RhbDsKLQkJeGdpX3ZpZGVvX2luZm8ucmVmcmVzaF9yYXRlID0gKHVuc2lnbmVkIGludCkgKGhyYXRlICogMgkvIHZ0b3RhbCk7CisJCXhnaV92aWRlb19pbmZvLnJlZnJlc2hfcmF0ZSA9CisJCQkodW5zaWduZWQgaW50KSAoaHJhdGUgKiAyIC8gdnRvdGFsKTsKIAkJcHJpbnRrKEtFUk5fREVCVUcKIAkJCSIlczogcGl4Y2xvY2sgPSAlZCAsaHRvdGFsPSVkLCB2dG90YWw9JWRcbiIKIAkJCSIlczogZHJhdGU9JWQsIGhyYXRlPSVkLCByZWZyZXNoX3JhdGU9JWRcbiIsCkBAIC0xMzUwLDEwICsxNjA2LDEwIEBACiAJCQl2YXItPnhyZXMsIHZhci0+eXJlcywgdmFyLT5iaXRzX3Blcl9waXhlbCk7CiAJCXNlYXJjaF9pZHggPSAwOwogCQl3aGlsZSAoWEdJYmlvc19tb2RlW3NlYXJjaF9pZHhdLm1vZGVfbm8gIT0gMCkgewotCiAJCQlpZiAoKHZhci0+eHJlcyA8PSBYR0liaW9zX21vZGVbc2VhcmNoX2lkeF0ueHJlcykgJiYKLQkJCQkodmFyLT55cmVzIDw9IFhHSWJpb3NfbW9kZVtzZWFyY2hfaWR4XS55cmVzKSAmJgotCQkJCSh2YXItPmJpdHNfcGVyX3BpeGVsID09IFhHSWJpb3NfbW9kZVtzZWFyY2hfaWR4XS5icHApKSB7CisJCQkgICAgKHZhci0+eXJlcyA8PSBYR0liaW9zX21vZGVbc2VhcmNoX2lkeF0ueXJlcykgJiYKKwkJCSAgICAodmFyLT5iaXRzX3Blcl9waXhlbCA9PQorCQkJICAgICBYR0liaW9zX21vZGVbc2VhcmNoX2lkeF0uYnBwKSkgewogCQkJCWlmIChYR0lmYl92YWxpZGF0ZV9tb2RlKHNlYXJjaF9pZHgpID4gMCkgewogCQkJCQlmb3VuZF9tb2RlID0gMTsKIAkJCQkJYnJlYWs7CkBAIC0xMzkzLDcgKzE2NDksOCBAQAogCX0gLyogZWxzZSB7ICovCiAJCS8qIFRXOiBOb3cgcGF0Y2ggeXJlc192aXJ0dWFsIGlmIHdlIHVzZSBwYW5uaW5nICovCiAJCS8qIE1heSBJIGRvIHRoaXM/ICovCi0JCS8qIHZhci0+eXJlc192aXJ0dWFsID0geGdpX3ZpZGVvX2luZm8uaGVhcHN0YXJ0IC8gKHZhci0+eHJlcyAqICh2YXItPmJpdHNfcGVyX3BpeGVsID4+IDMpKTsgKi8KKwkJLyogdmFyLT55cmVzX3ZpcnR1YWwgPSB4Z2lfdmlkZW9faW5mby5oZWFwc3RhcnQgLworCQkJKHZhci0+eHJlcyAqICh2YXItPmJpdHNfcGVyX3BpeGVsID4+IDMpKTsgKi8KIAkJLyogaWYgKHZhci0+eXJlc192aXJ0dWFsIDw9IHZhci0+eXJlcykgeyAqLwogCQkvKiBUVzogUGFyYW5vaWEgY2hlY2sgKi8KIAkJLyogdmFyLT55cmVzX3ZpcnR1YWwgPSB2YXItPnlyZXM7ICovCkBAIC0xNDYwLDUxICsxNzE3LDE2IEBACiB7CiAJdTggcmVnOwogCi0JaW5YR0lJRFhSRUcoWEdJQ1IsIDB4MTcsIHJlZyk7CisJcmVnID0geGdpZmJfcmVnX2dldChYR0lDUiwgMHgxNyk7CiAKIAlpZiAoYmxhbmsgPiAwKQogCQlyZWcgJj0gMHg3ZjsKIAllbHNlCiAJCXJlZyB8PSAweDgwOwogCi0Jb3V0WEdJSURYUkVHKFhHSUNSLCAweDE3LCByZWcpOwotCW91dFhHSUlEWFJFRyhYR0lTUiwgMHgwMCwgMHgwMSk7IC8qIFN5bmNocm9ub3VzIFJlc2V0ICovCi0Jb3V0WEdJSURYUkVHKFhHSVNSLCAweDAwLCAweDAzKTsgLyogRW5kIFJlc2V0ICovCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tIEZCRGV2IHJlbGF0ZWQgcm91dGluZXMgZm9yIGFsbCBzZXJpZXMgLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgaW50IFhHSWZiX2dldF9maXgoc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXgsIGludCBjb24sCi0JCXN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCURFQlVHUFJOKCJpbnNpZGUgZ2V0X2ZpeCIpOwotCW1lbXNldChmaXgsIDAsIHNpemVvZihzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8pKTsKLQotCXN0cmNweShmaXgtPmlkLCBteWlkKTsKLQotCWZpeC0+c21lbV9zdGFydCA9IHhnaV92aWRlb19pbmZvLnZpZGVvX2Jhc2U7Ci0KLQlmaXgtPnNtZW1fbGVuID0geGdpX3ZpZGVvX2luZm8udmlkZW9fc2l6ZTsKLQotCWZpeC0+dHlwZSA9IHZpZGVvX3R5cGU7Ci0JZml4LT50eXBlX2F1eCA9IDA7Ci0JaWYgKHhnaV92aWRlb19pbmZvLnZpZGVvX2JwcCA9PSA4KQotCQlmaXgtPnZpc3VhbCA9IEZCX1ZJU1VBTF9QU0VVRE9DT0xPUjsKLQllbHNlCi0JCWZpeC0+dmlzdWFsID0gRkJfVklTVUFMX0RJUkVDVENPTE9SOwotCWZpeC0+eHBhbnN0ZXAgPSAwOwotI2lmZGVmIFhHSUZCX1BBTgotCWlmIChYR0lmYl95cGFuKQotCQlmaXgtPnlwYW5zdGVwID0gMTsKLSNlbmRpZgotCWZpeC0+eXdyYXBzdGVwID0gMDsKLQlmaXgtPmxpbmVfbGVuZ3RoID0geGdpX3ZpZGVvX2luZm8udmlkZW9fbGluZWxlbmd0aDsKLQlmaXgtPm1taW9fc3RhcnQgPSB4Z2lfdmlkZW9faW5mby5tbWlvX2Jhc2U7Ci0JZml4LT5tbWlvX2xlbiA9IHhnaV92aWRlb19pbmZvLm1taW9fc2l6ZTsKLQlmaXgtPmFjY2VsID0gRkJfQUNDRUxfWEdJX1hBQlJFOwotCi0JREVCVUdQUk4oImVuZCBvZiBnZXRfZml4Iik7CisJeGdpZmJfcmVnX3NldChYR0lDUiwgMHgxNywgcmVnKTsKKwl4Z2lmYl9yZWdfc2V0KFhHSVNSLCAweDAwLCAweDAxKTsgLyogU3luY2hyb25vdXMgUmVzZXQgKi8KKwl4Z2lmYl9yZWdfc2V0KFhHSVNSLCAweDAwLCAweDAzKTsgLyogRW5kIFJlc2V0ICovCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1MzcsOSArMTc1OSw5IEBACiAKIAkvKiB4b3JnIGRyaXZlciBzZXRzIDMyTUIgKiAxIGNoYW5uZWwgKi8KIAlpZiAoeGdpX3ZpZGVvX2luZm8uY2hpcCA9PSBYRzI3KQotCQlvdXRYR0lJRFhSRUcoWEdJU1IsIElORF9YR0lfRFJBTV9TSVpFLCAweDUxKTsKKwkJeGdpZmJfcmVnX3NldChYR0lTUiwgSU5EX1hHSV9EUkFNX1NJWkUsIDB4NTEpOwogCi0JaW5YR0lJRFhSRUcoWEdJU1IsIElORF9YR0lfRFJBTV9TSVpFLCByZWcpOworCXJlZyA9IHhnaWZiX3JlZ19nZXQoWEdJU1IsIElORF9YR0lfRFJBTV9TSVpFKTsKIAlzd2l0Y2ggKChyZWcgJiBYR0lfRFJBTV9TSVpFX01BU0spID4+IDQpIHsKIAljYXNlIFhHSV9EUkFNX1NJWkVfMU1COgogCQl4Z2lfdmlkZW9faW5mby52aWRlb19zaXplID0gMHgxMDAwMDA7CkBAIC0xNjE0LDggKzE4MzYsOSBAQAogCS8qIHhnaV92aWRlb19pbmZvLnZpZGVvX3NpemUgPSAweDIwMDAwMDsgKi8gLyogMTAyNHg3Njh4MTYgKi8KIAkvKiB4Z2lfdmlkZW9faW5mby52aWRlb19zaXplID0gMHgxMDAwMDAwOyAqLyAvKiBiZW5jaG1hcmsgKi8KIAotCXByaW50aygiWEdJZmI6IFNSMTQ9JXggRHJhbVN6aWUgJXggQ2hhbm5lbE51bSAleFxuIiwgcmVnLAotCQkJeGdpX3ZpZGVvX2luZm8udmlkZW9fc2l6ZSwgQ2hhbm5lbE51bSk7CisJcHJpbnRrKCJYR0lmYjogU1IxND0leCBEcmFtU3ppZSAleCBDaGFubmVsTnVtICV4XG4iLAorCSAgICAgICByZWcsCisJICAgICAgIHhnaV92aWRlb19pbmZvLnZpZGVvX3NpemUsIENoYW5uZWxOdW0pOwogCXJldHVybiAwOwogCiB9CkBAIC0xNjM2LDcgKzE4NTksNyBAQAogCQlicmVhazsKIAl9CiAKLQlpblhHSUlEWFJFRyhYR0lDUiwgSU5EX1hHSV9TQ1JBVENIX1JFR19DUjMyLCBjcjMyKTsKKwljcjMyID0geGdpZmJfcmVnX2dldChYR0lDUiwgSU5EX1hHSV9TQ1JBVENIX1JFR19DUjMyKTsKIAogCWlmICgoY3IzMiAmIFhHSV9DUlQxKSAmJiAhWEdJZmJfY3J0MW9mZikKIAkJWEdJZmJfY3J0MW9mZiA9IDA7CkBAIC0xNjczLDcgKzE4OTYsNyBAQAogCQl4Z2lfdmlkZW9faW5mby5UVl9wbHVnID0gVFZQTFVHX1NDQVJUOwogCiAJaWYgKHhnaV92aWRlb19pbmZvLlRWX3R5cGUgPT0gMCkgewotCQlpblhHSUlEWFJFRyhYR0lDUiwgMHgzOCwgdGVtcCk7CisJCXRlbXAgPSB4Z2lmYl9yZWdfZ2V0KFhHSUNSLCAweDM4KTsKIAkJaWYgKHRlbXAgJiAweDEwKQogCQkJeGdpX3ZpZGVvX2luZm8uVFZfdHlwZSA9IFRWTU9ERV9QQUw7CiAJCWVsc2UKQEAgLTE2ODksMzAgKzE5MTIsMTEgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIFhHSWZiX2dldF9WQl90eXBlKHZvaWQpCi17Ci0JdTggcmVnOwotCi0JaWYgKCFYR0lmYl9oYXNfVkIoKSkgewotCQlpblhHSUlEWFJFRyhYR0lDUiwgSU5EX1hHSV9TQ1JBVENIX1JFR19DUjM3LCByZWcpOwotCQlzd2l0Y2ggKChyZWcgJiBYR0lfRVhURVJOQUxfQ0hJUF9NQVNLKSA+PiAxKSB7Ci0JCWNhc2UgWEdJMzEwX0VYVEVSTkFMX0NISVBfTFZEUzoKLQkJCXhnaV92aWRlb19pbmZvLmhhc1ZCID0gSEFTVkJfTFZEUzsKLQkJCWJyZWFrOwotCQljYXNlIFhHSTMxMF9FWFRFUk5BTF9DSElQX0xWRFNfQ0hST05URUw6Ci0JCQl4Z2lfdmlkZW9faW5mby5oYXNWQiA9IEhBU1ZCX0xWRFNfQ0hST05URUw7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JfQotfQotCiBzdGF0aWMgaW50IFhHSWZiX2hhc19WQih2b2lkKQogewogCXU4IHZiX2NoaXBpZDsKIAotCWluWEdJSURYUkVHKFhHSVBBUlQ0LCAweDAwLCB2Yl9jaGlwaWQpOworCXZiX2NoaXBpZCA9IHhnaWZiX3JlZ19nZXQoWEdJUEFSVDQsIDB4MDApOwogCXN3aXRjaCAodmJfY2hpcGlkKSB7CiAJY2FzZSAweDAxOgogCQl4Z2lfdmlkZW9faW5mby5oYXNWQiA9IEhBU1ZCXzMwMTsKQEAgLTE3MjcsMzQ0ICsxOTMxLDIzIEBACiAJcmV0dXJuIDE7CiB9CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLSBTZW5zaW5nIHJvdXRpbmVzIC0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKiBUVzogRGV0ZXJtaW5lIGFuZCBkZXRlY3QgYXR0YWNoZWQgZGV2aWNlcyBvbiBYR0kzMHggKi8KLWludCBYR0lEb1NlbnNlKGludCB0ZW1wYmwsIGludCB0ZW1wYmgsIGludCB0ZW1wY2wsIGludCB0ZW1wY2gpCi17Ci0JaW50IHRlbXAsIGk7Ci0KLQlvdXRYR0lJRFhSRUcoWEdJUEFSVDQsIDB4MTEsIHRlbXBibCk7Ci0JdGVtcCA9IHRlbXBiaCB8IHRlbXBjbDsKLQlzZXRYR0lJRFhSRUcoWEdJUEFSVDQsIDB4MTAsIDB4ZTAsIHRlbXApOwotCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQotCQlYR0lfTG9uZ1dhaXQoJlhHSV9Qcik7Ci0JdGVtcGNoICY9IDB4N2Y7Ci0JaW5YR0lJRFhSRUcoWEdJUEFSVDQsIDB4MDMsIHRlbXApOwotCXRlbXAgXj0gMHgwZTsKLQl0ZW1wICY9IHRlbXBjaDsKLQlyZXR1cm4gdGVtcDsKLX0KLQotdm9pZCBYR0lfU2Vuc2UzMHgodm9pZCkKLXsKLQl1OCBiYWNrdXBQNF8wZDsKLQl1OCB0ZXN0c3Zoc190ZW1wYmwsIHRlc3RzdmhzX3RlbXBiaDsKLQl1OCB0ZXN0c3Zoc190ZW1wY2wsIHRlc3RzdmhzX3RlbXBjaDsKLQl1OCB0ZXN0Y3Zic190ZW1wYmwsIHRlc3RjdmJzX3RlbXBiaDsKLQl1OCB0ZXN0Y3Zic190ZW1wY2wsIHRlc3RjdmJzX3RlbXBjaDsKLQl1OCB0ZXN0dmdhMl90ZW1wYmwsIHRlc3R2Z2EyX3RlbXBiaDsKLQl1OCB0ZXN0dmdhMl90ZW1wY2wsIHRlc3R2Z2EyX3RlbXBjaDsKLQlpbnQgbXlmbGFnLCByZXN1bHQ7Ci0KLQlpblhHSUlEWFJFRyhYR0lQQVJUNCwgMHgwZCwgYmFja3VwUDRfMGQpOwotCW91dFhHSUlEWFJFRyhYR0lQQVJUNCwgMHgwZCwgKGJhY2t1cFA0XzBkIHwgMHgwNCkpOwotCi0JdGVzdHZnYTJfdGVtcGJoID0gMHgwMDsKLQl0ZXN0dmdhMl90ZW1wYmwgPSAweGQxOwotCXRlc3RzdmhzX3RlbXBiaCA9IDB4MDA7Ci0JdGVzdHN2aHNfdGVtcGJsID0gMHhiOTsKLQl0ZXN0Y3Zic190ZW1wYmggPSAweDAwOwotCXRlc3RjdmJzX3RlbXBibCA9IDB4YjM7Ci0JaWYgKChYR0lod19leHQudWpWQkNoaXBJRCAhPSBWQl9DSElQXzMwMSkgJiYgKFhHSWh3X2V4dC51alZCQ2hpcElECi0JCQkhPSBWQl9DSElQXzMwMikpIHsKLQkJdGVzdHZnYTJfdGVtcGJoID0gMHgwMTsKLQkJdGVzdHZnYTJfdGVtcGJsID0gMHg5MDsKLQkJdGVzdHN2aHNfdGVtcGJoID0gMHgwMTsKLQkJdGVzdHN2aHNfdGVtcGJsID0gMHg2YjsKLQkJdGVzdGN2YnNfdGVtcGJoID0gMHgwMTsKLQkJdGVzdGN2YnNfdGVtcGJsID0gMHg3NDsKLQkJaWYgKFhHSWh3X2V4dC51alZCQ2hpcElEID09IFZCX0NISVBfMzAxTFYKLQkJCQl8fCBYR0lod19leHQudWpWQkNoaXBJRCA9PSBWQl9DSElQXzMwMkxWKSB7Ci0JCQl0ZXN0dmdhMl90ZW1wYmggPSAweDAwOwotCQkJdGVzdHZnYTJfdGVtcGJsID0gMHgwMDsKLQkJCXRlc3RzdmhzX3RlbXBiaCA9IDB4MDI7Ci0JCQl0ZXN0c3Zoc190ZW1wYmwgPSAweDAwOwotCQkJdGVzdGN2YnNfdGVtcGJoID0gMHgwMTsKLQkJCXRlc3RjdmJzX3RlbXBibCA9IDB4MDA7Ci0JCX0KLQl9Ci0JaWYgKFhHSWh3X2V4dC51alZCQ2hpcElEICE9IFZCX0NISVBfMzAxTFYgJiYgWEdJaHdfZXh0LnVqVkJDaGlwSUQKLQkJCSE9IFZCX0NISVBfMzAyTFYpIHsKLQkJaW5YR0lJRFhSRUcoWEdJUEFSVDQsIDB4MDEsIG15ZmxhZyk7Ci0JCWlmIChteWZsYWcgJiAweDA0KSB7Ci0JCQl0ZXN0dmdhMl90ZW1wYmggPSAweDAwOwotCQkJdGVzdHZnYTJfdGVtcGJsID0gMHhmZDsKLQkJCXRlc3RzdmhzX3RlbXBiaCA9IDB4MDA7Ci0JCQl0ZXN0c3Zoc190ZW1wYmwgPSAweGRkOwotCQkJdGVzdGN2YnNfdGVtcGJoID0gMHgwMDsKLQkJCXRlc3RjdmJzX3RlbXBibCA9IDB4ZWU7Ci0JCX0KLQl9Ci0JaWYgKChYR0lod19leHQudWpWQkNoaXBJRCA9PSBWQl9DSElQXzMwMUxWKSB8fCAoWEdJaHdfZXh0LnVqVkJDaGlwSUQKLQkJCT09IFZCX0NISVBfMzAyTFYpKSB7Ci0JCXRlc3R2Z2EyX3RlbXBiaCA9IDB4MDA7Ci0JCXRlc3R2Z2EyX3RlbXBibCA9IDB4MDA7Ci0JCXRlc3R2Z2EyX3RlbXBjaCA9IDB4MDA7Ci0JCXRlc3R2Z2EyX3RlbXBjbCA9IDB4MDA7Ci0JCXRlc3RzdmhzX3RlbXBjaCA9IDB4MDQ7Ci0JCXRlc3RzdmhzX3RlbXBjbCA9IDB4MDg7Ci0JCXRlc3RjdmJzX3RlbXBjaCA9IDB4MDg7Ci0JCXRlc3RjdmJzX3RlbXBjbCA9IDB4MDg7Ci0JfSBlbHNlIHsKLQkJdGVzdHZnYTJfdGVtcGNoID0gMHgwZTsKLQkJdGVzdHZnYTJfdGVtcGNsID0gMHgwODsKLQkJdGVzdHN2aHNfdGVtcGNoID0gMHgwNjsKLQkJdGVzdHN2aHNfdGVtcGNsID0gMHgwNDsKLQkJdGVzdGN2YnNfdGVtcGNoID0gMHgwODsKLQkJdGVzdGN2YnNfdGVtcGNsID0gMHgwNDsKLQl9Ci0KLQlpZiAodGVzdHZnYTJfdGVtcGNoIHx8IHRlc3R2Z2EyX3RlbXBjbCB8fCB0ZXN0dmdhMl90ZW1wYmgKLQkJCXx8IHRlc3R2Z2EyX3RlbXBibCkgewotCQlyZXN1bHQgPSBYR0lEb1NlbnNlKHRlc3R2Z2EyX3RlbXBibCwgdGVzdHZnYTJfdGVtcGJoLAotCQkJCXRlc3R2Z2EyX3RlbXBjbCwgdGVzdHZnYTJfdGVtcGNoKTsKLQkJaWYgKHJlc3VsdCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiWEdJZmI6IERldGVjdGVkIHNlY29uZGFyeSBWR0EgY29ubmVjdGlvblxuIik7Ci0JCQlvclhHSUlEWFJFRyhYR0lDUiwgMHgzMiwgMHgxMCk7Ci0JCX0KLQl9Ci0KLQlyZXN1bHQgPSBYR0lEb1NlbnNlKHRlc3RzdmhzX3RlbXBibCwgdGVzdHN2aHNfdGVtcGJoLCB0ZXN0c3Zoc190ZW1wY2wsCi0JCQl0ZXN0c3Zoc190ZW1wY2gpOwotCWlmIChyZXN1bHQpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiWEdJZmI6IERldGVjdGVkIFRWIGNvbm5lY3RlZCB0byBTVkhTIG91dHB1dFxuIik7Ci0JCS8qIFRXOiBTbyB3ZSBjYW4gYmUgc3VyZSB0aGF0IHRoZXJlIElTIGEgU1ZIUyBvdXRwdXQgKi8KLQkJeGdpX3ZpZGVvX2luZm8uVFZfcGx1ZyA9IFRWUExVR19TVklERU87Ci0JCW9yWEdJSURYUkVHKFhHSUNSLCAweDMyLCAweDAyKTsKLQl9Ci0KLQlpZiAoIXJlc3VsdCkgewotCQlyZXN1bHQgPSBYR0lEb1NlbnNlKHRlc3RjdmJzX3RlbXBibCwgdGVzdGN2YnNfdGVtcGJoLAotCQkJCXRlc3RjdmJzX3RlbXBjbCwgdGVzdGN2YnNfdGVtcGNoKTsKLQkJaWYgKHJlc3VsdCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiWEdJZmI6IERldGVjdGVkIFRWIGNvbm5lY3RlZCB0byBDVkJTIG91dHB1dFxuIik7Ci0JCQkvKiBUVzogU28gd2UgY2FuIGJlIHN1cmUgdGhhdCB0aGVyZSBJUyBhIENWQlMgb3V0cHV0ICovCi0JCQl4Z2lfdmlkZW9faW5mby5UVl9wbHVnID0gVFZQTFVHX0NPTVBPU0lURTsKLQkJCW9yWEdJSURYUkVHKFhHSUNSLCAweDMyLCAweDAxKTsKLQkJfQotCX0KLQlYR0lEb1NlbnNlKDAsIDAsIDAsIDApOwotCi0Jb3V0WEdJSURYUkVHKFhHSVBBUlQ0LCAweDBkLCBiYWNrdXBQNF8wZCk7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTZXRNb2RlIHJvdXRpbmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHZvaWQgWEdJZmJfcHJlX3NldG1vZGUodm9pZCkKLXsKLQl1OCBjcjMwID0gMCwgY3IzMSA9IDA7Ci0KLQlpblhHSUlEWFJFRyhYR0lDUiwgMHgzMSwgY3IzMSk7Ci0JY3IzMSAmPSB+MHg2MDsKLQotCXN3aXRjaCAoeGdpX3ZpZGVvX2luZm8uZGlzcF9zdGF0ZSAmIERJU1BUWVBFX0RJU1AyKSB7Ci0JY2FzZSBESVNQVFlQRV9DUlQyOgotCQljcjMwID0gKFhHSV9WQl9PVVRQVVRfQ1JUMiB8IFhHSV9TSU1VTFRBTkVPVVNfVklFV19FTkFCTEUpOwotCQljcjMxIHw9IFhHSV9EUklWRVJfTU9ERTsKLQkJYnJlYWs7Ci0JY2FzZSBESVNQVFlQRV9MQ0Q6Ci0JCWNyMzAgPSAoWEdJX1ZCX09VVFBVVF9MQ0QgfCBYR0lfU0lNVUxUQU5FT1VTX1ZJRVdfRU5BQkxFKTsKLQkJY3IzMSB8PSBYR0lfRFJJVkVSX01PREU7Ci0JCWJyZWFrOwotCWNhc2UgRElTUFRZUEVfVFY6Ci0JCWlmICh4Z2lfdmlkZW9faW5mby5UVl90eXBlID09IFRWTU9ERV9ISVZJU0lPTikKLQkJCWNyMzAgPSAoWEdJX1ZCX09VVFBVVF9ISVZJU0lPTgotCQkJCQl8IFhHSV9TSU1VTFRBTkVPVVNfVklFV19FTkFCTEUpOwotCQllbHNlIGlmICh4Z2lfdmlkZW9faW5mby5UVl9wbHVnID09IFRWUExVR19TVklERU8pCi0JCQljcjMwID0gKFhHSV9WQl9PVVRQVVRfU1ZJREVPCi0JCQkJCXwgWEdJX1NJTVVMVEFORU9VU19WSUVXX0VOQUJMRSk7Ci0JCWVsc2UgaWYgKHhnaV92aWRlb19pbmZvLlRWX3BsdWcgPT0gVFZQTFVHX0NPTVBPU0lURSkKLQkJCWNyMzAgPSAoWEdJX1ZCX09VVFBVVF9DT01QT1NJVEUKLQkJCQkJfCBYR0lfU0lNVUxUQU5FT1VTX1ZJRVdfRU5BQkxFKTsKLQkJZWxzZSBpZiAoeGdpX3ZpZGVvX2luZm8uVFZfcGx1ZyA9PSBUVlBMVUdfU0NBUlQpCi0JCQljcjMwID0gKFhHSV9WQl9PVVRQVVRfU0NBUlQKLQkJCQkJfCBYR0lfU0lNVUxUQU5FT1VTX1ZJRVdfRU5BQkxFKTsKLQkJY3IzMSB8PSBYR0lfRFJJVkVSX01PREU7Ci0KLQkJaWYgKFhHSWZiX3R2bW9kZSA9PSAxIHx8IHhnaV92aWRlb19pbmZvLlRWX3R5cGUgPT0gVFZNT0RFX1BBTCkKLQkJCWNyMzEgfD0gMHgwMTsKLQkJZWxzZQotCQkJY3IzMSAmPSB+MHgwMTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDogLyogZGlzYWJsZSBDUlQyICovCi0JCWNyMzAgPSAweDAwOwotCQljcjMxIHw9IChYR0lfRFJJVkVSX01PREUgfCBYR0lfVkJfT1VUUFVUX0RJU0FCTEUpOwotCX0KLQotCW91dFhHSUlEWFJFRyhYR0lDUiwgSU5EX1hHSV9TQ1JBVENIX1JFR19DUjMwLCBjcjMwKTsKLQlvdXRYR0lJRFhSRUcoWEdJQ1IsIElORF9YR0lfU0NSQVRDSF9SRUdfQ1IzMSwgY3IzMSk7Ci0Jb3V0WEdJSURYUkVHKFhHSUNSLCBJTkRfWEdJX1NDUkFUQ0hfUkVHX0NSMzMsIChYR0lmYl9yYXRlX2lkeCAmIDB4MEYpKTsKLX0KLQotc3RhdGljIHZvaWQgWEdJZmJfcG9zdF9zZXRtb2RlKHZvaWQpCitzdGF0aWMgdm9pZCBYR0lmYl9nZXRfVkJfdHlwZSh2b2lkKQogewogCXU4IHJlZzsKLQl1bnNpZ25lZCBjaGFyIGRvaXQgPSAxOwotCS8qCi0Jb3V0WEdJSURYUkVHKFhHSVNSLElORF9YR0lfUEFTU1dPUkQsWEdJX1BBU1NXT1JEKTsKLQlvdXRYR0lJRFhSRUcoWEdJQ1IsIDB4MTMsIDB4MDApOwotCXNldFhHSUlEWFJFRyhYR0lTUiwweDBFLCAweEYwLCAweDAxKTsKLQkqdGVzdCoKLQkqLwotCWlmICh4Z2lfdmlkZW9faW5mby52aWRlb19icHAgPT0gOCkgewotCQkvKiBUVzogV2UgY2FuJ3Qgc3dpdGNoIG9mZiBDUlQxIG9uIExWRFMvQ2hyb250ZWwgaW4gOGJwcCBNb2RlcyAqLwotCQlpZiAoKHhnaV92aWRlb19pbmZvLmhhc1ZCID09IEhBU1ZCX0xWRFMpCi0JCQkJfHwgKHhnaV92aWRlb19pbmZvLmhhc1ZCID09IEhBU1ZCX0xWRFNfQ0hST05URUwpKSB7Ci0JCQlkb2l0ID0gMDsKKworCWlmICghWEdJZmJfaGFzX1ZCKCkpIHsKKwkJcmVnID0geGdpZmJfcmVnX2dldChYR0lDUiwgSU5EX1hHSV9TQ1JBVENIX1JFR19DUjM3KTsKKwkJc3dpdGNoICgocmVnICYgWEdJX0VYVEVSTkFMX0NISVBfTUFTSykgPj4gMSkgeworCQljYXNlIFhHSTMxMF9FWFRFUk5BTF9DSElQX0xWRFM6CisJCQl4Z2lfdmlkZW9faW5mby5oYXNWQiA9IEhBU1ZCX0xWRFM7CisJCQlicmVhazsKKwkJY2FzZSBYR0kzMTBfRVhURVJOQUxfQ0hJUF9MVkRTX0NIUk9OVEVMOgorCQkJeGdpX3ZpZGVvX2luZm8uaGFzVkIgPSBIQVNWQl9MVkRTX0NIUk9OVEVMOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKIAkJfQotCQkvKiBUVzogV2UgY2FuJ3Qgc3dpdGNoIG9mZiBDUlQxIG9uIDMwMUItREggaW4gOGJwcCBNb2RlcyBpZiB1c2luZyBMQ0QgKi8KLQkJaWYgKHhnaV92aWRlb19pbmZvLmRpc3Bfc3RhdGUgJiBESVNQVFlQRV9MQ0QpCi0JCQlkb2l0ID0gMDsKIAl9Ci0KLQkvKiBUVzogV2UgY2FuJ3Qgc3dpdGNoIG9mZiBDUlQxIGlmIGJyaWRnZSBpcyBpbiBzbGF2ZSBtb2RlICovCi0JaWYgKHhnaV92aWRlb19pbmZvLmhhc1ZCICE9IEhBU1ZCX05PTkUpIHsKLQkJaW5YR0lJRFhSRUcoWEdJUEFSVDEsIDB4MDAsIHJlZyk7Ci0KLQkJaWYgKChyZWcgJiAweDUwKSA9PSAweDEwKQotCQkJZG9pdCA9IDA7Ci0KLQl9IGVsc2UgewotCQlYR0lmYl9jcnQxb2ZmID0gMDsKLQl9Ci0KLQlpblhHSUlEWFJFRyhYR0lDUiwgMHgxNywgcmVnKTsKLQlpZiAoKFhHSWZiX2NydDFvZmYpICYmIChkb2l0KSkKLQkJcmVnICY9IH4weDgwOwotCWVsc2UKLQkJcmVnIHw9IDB4ODA7Ci0Jb3V0WEdJSURYUkVHKFhHSUNSLCAweDE3LCByZWcpOwotCi0JYW5kWEdJSURYUkVHKFhHSVNSLCBJTkRfWEdJX1JBTURBQ19DT05UUk9MLCB+MHgwNCk7Ci0KLQlpZiAoKHhnaV92aWRlb19pbmZvLmRpc3Bfc3RhdGUgJiBESVNQVFlQRV9UVikgJiYgKHhnaV92aWRlb19pbmZvLmhhc1ZCCi0JCQk9PSBIQVNWQl8zMDEpKSB7Ci0KLQkJaW5YR0lJRFhSRUcoWEdJUEFSVDQsIDB4MDEsIHJlZyk7Ci0KLQkJaWYgKHJlZyA8IDB4QjApIHsgLyogU2V0IGZpbHRlciBmb3IgWEdJMzAxICovCi0KLQkJCXN3aXRjaCAoeGdpX3ZpZGVvX2luZm8udmlkZW9fd2lkdGgpIHsKLQkJCWNhc2UgMzIwOgotCQkJCWZpbHRlcl90YiA9ICh4Z2lfdmlkZW9faW5mby5UVl90eXBlID09IFRWTU9ERV9OVFNDKSA/IDQgOiAxMjsKLQkJCQlicmVhazsKLQkJCWNhc2UgNjQwOgotCQkJCWZpbHRlcl90YiA9ICh4Z2lfdmlkZW9faW5mby5UVl90eXBlID09IFRWTU9ERV9OVFNDKSA/IDUgOiAxMzsKLQkJCQlicmVhazsKLQkJCWNhc2UgNzIwOgotCQkJCWZpbHRlcl90YiA9ICh4Z2lfdmlkZW9faW5mby5UVl90eXBlID09IFRWTU9ERV9OVFNDKSA/IDYgOiAxNDsKLQkJCQlicmVhazsKLQkJCWNhc2UgODAwOgotCQkJCWZpbHRlcl90YiA9ICh4Z2lfdmlkZW9faW5mby5UVl90eXBlID09IFRWTU9ERV9OVFNDKSA/IDcgOiAxNTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJZmlsdGVyID0gLTE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCW9yWEdJSURYUkVHKFhHSVBBUlQxLCBYR0lmYl9DUlQyX3dyaXRlX2VuYWJsZSwgMHgwMSk7Ci0KLQkJCWlmICh4Z2lfdmlkZW9faW5mby5UVl90eXBlID09IFRWTU9ERV9OVFNDKSB7Ci0KLQkJCQlhbmRYR0lJRFhSRUcoWEdJUEFSVDIsIDB4M2EsIDB4MWYpOwotCi0JCQkJaWYgKHhnaV92aWRlb19pbmZvLlRWX3BsdWcgPT0gVFZQTFVHX1NWSURFTykgewotCi0JCQkJCWFuZFhHSUlEWFJFRyhYR0lQQVJUMiwgMHgzMCwgMHhkZik7Ci0KLQkJCQl9IGVsc2UgaWYgKHhnaV92aWRlb19pbmZvLlRWX3BsdWcKLQkJCQkJCT09IFRWUExVR19DT01QT1NJVEUpIHsKLQotCQkJCQlvclhHSUlEWFJFRyhYR0lQQVJUMiwgMHgzMCwgMHgyMCk7Ci0KLQkJCQkJc3dpdGNoICh4Z2lfdmlkZW9faW5mby52aWRlb193aWR0aCkgewotCQkJCQljYXNlIDY0MDoKLQkJCQkJCW91dFhHSUlEWFJFRyhYR0lQQVJUMiwgMHgzNSwgMHhFQik7Ci0JCQkJCQlvdXRYR0lJRFhSRUcoWEdJUEFSVDIsIDB4MzYsIDB4MDQpOwotCQkJCQkJb3V0WEdJSURYUkVHKFhHSVBBUlQyLCAweDM3LCAweDI1KTsKLQkJCQkJCW91dFhHSUlEWFJFRyhYR0lQQVJUMiwgMHgzOCwgMHgxOCk7Ci0JCQkJCQlicmVhazsKLQkJCQkJY2FzZSA3MjA6Ci0JCQkJCQlvdXRYR0lJRFhSRUcoWEdJUEFSVDIsIDB4MzUsIDB4RUUpOwotCQkJCQkJb3V0WEdJSURYUkVHKFhHSVBBUlQyLCAweDM2LCAweDBDKTsKLQkJCQkJCW91dFhHSUlEWFJFRyhYR0lQQVJUMiwgMHgzNywgMHgyMik7Ci0JCQkJCQlvdXRYR0lJRFhSRUcoWEdJUEFSVDIsIDB4MzgsIDB4MDgpOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgODAwOgotCQkJCQkJb3V0WEdJSURYUkVHKFhHSVBBUlQyLCAweDM1LCAweEVCKTsKLQkJCQkJCW91dFhHSUlEWFJFRyhYR0lQQVJUMiwgMHgzNiwgMHgxNSk7Ci0JCQkJCQlvdXRYR0lJRFhSRUcoWEdJUEFSVDIsIDB4MzcsIDB4MjUpOwotCQkJCQkJb3V0WEdJSURYUkVHKFhHSVBBUlQyLCAweDM4LCAweEY2KTsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJfQotCi0JCQl9IGVsc2UgaWYgKHhnaV92aWRlb19pbmZvLlRWX3R5cGUgPT0gVFZNT0RFX1BBTCkgewotCi0JCQkJYW5kWEdJSURYUkVHKFhHSVBBUlQyLCAweDNBLCAweDFGKTsKLQotCQkJCWlmICh4Z2lfdmlkZW9faW5mby5UVl9wbHVnID09IFRWUExVR19TVklERU8pIHsKLQotCQkJCQlhbmRYR0lJRFhSRUcoWEdJUEFSVDIsIDB4MzAsIDB4REYpOwotCi0JCQkJfSBlbHNlIGlmICh4Z2lfdmlkZW9faW5mby5UVl9wbHVnCi0JCQkJCQk9PSBUVlBMVUdfQ09NUE9TSVRFKSB7Ci0KLQkJCQkJb3JYR0lJRFhSRUcoWEdJUEFSVDIsIDB4MzAsIDB4MjApOwotCi0JCQkJCXN3aXRjaCAoeGdpX3ZpZGVvX2luZm8udmlkZW9fd2lkdGgpIHsKLQkJCQkJY2FzZSA2NDA6Ci0JCQkJCQlvdXRYR0lJRFhSRUcoWEdJUEFSVDIsIDB4MzUsIDB4RjEpOwotCQkJCQkJb3V0WEdJSURYUkVHKFhHSVBBUlQyLCAweDM2LCAweEY3KTsKLQkJCQkJCW91dFhHSUlEWFJFRyhYR0lQQVJUMiwgMHgzNywgMHgxRik7Ci0JCQkJCQlvdXRYR0lJRFhSRUcoWEdJUEFSVDIsIDB4MzgsIDB4MzIpOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgNzIwOgotCQkJCQkJb3V0WEdJSURYUkVHKFhHSVBBUlQyLCAweDM1LCAweEYzKTsKLQkJCQkJCW91dFhHSUlEWFJFRyhYR0lQQVJUMiwgMHgzNiwgMHgwMCk7Ci0JCQkJCQlvdXRYR0lJRFhSRUcoWEdJUEFSVDIsIDB4MzcsIDB4MUQpOwotCQkJCQkJb3V0WEdJSURYUkVHKFhHSVBBUlQyLCAweDM4LCAweDIwKTsKLQkJCQkJCWJyZWFrOwotCQkJCQljYXNlIDgwMDoKLQkJCQkJCW91dFhHSUlEWFJFRyhYR0lQQVJUMiwgMHgzNSwgMHhGQyk7Ci0JCQkJCQlvdXRYR0lJRFhSRUcoWEdJUEFSVDIsIDB4MzYsIDB4RkIpOwotCQkJCQkJb3V0WEdJSURYUkVHKFhHSVBBUlQyLCAweDM3LCAweDE0KTsKLQkJCQkJCW91dFhHSUlEWFJFRyhYR0lQQVJUMiwgMHgzOCwgMHgyQSk7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQotCQkJaWYgKChmaWx0ZXIgPj0gMCkgJiYgKGZpbHRlciA8PSA3KSkgewotCQkJCURQUklOVEsoIkZpbHRlclRhYmxlWyVkXS0lZDogJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwgZmlsdGVyX3RiLCBmaWx0ZXIsCi0JCQkJCQlYR0lfVFZfZmlsdGVyW2ZpbHRlcl90Yl0uZmlsdGVyW2ZpbHRlcl1bMF0sCi0JCQkJCQlYR0lfVFZfZmlsdGVyW2ZpbHRlcl90Yl0uZmlsdGVyW2ZpbHRlcl1bMV0sCi0JCQkJCQlYR0lfVFZfZmlsdGVyW2ZpbHRlcl90Yl0uZmlsdGVyW2ZpbHRlcl1bMl0sCi0JCQkJCQlYR0lfVFZfZmlsdGVyW2ZpbHRlcl90Yl0uZmlsdGVyW2ZpbHRlcl1bM10KLQkJCQkpOwotCQkJCW91dFhHSUlEWFJFRygKLQkJCQkJCVhHSVBBUlQyLAotCQkJCQkJMHgzNSwKLQkJCQkJCShYR0lfVFZfZmlsdGVyW2ZpbHRlcl90Yl0uZmlsdGVyW2ZpbHRlcl1bMF0pKTsKLQkJCQlvdXRYR0lJRFhSRUcoCi0JCQkJCQlYR0lQQVJUMiwKLQkJCQkJCTB4MzYsCi0JCQkJCQkoWEdJX1RWX2ZpbHRlcltmaWx0ZXJfdGJdLmZpbHRlcltmaWx0ZXJdWzFdKSk7Ci0JCQkJb3V0WEdJSURYUkVHKAotCQkJCQkJWEdJUEFSVDIsCi0JCQkJCQkweDM3LAotCQkJCQkJKFhHSV9UVl9maWx0ZXJbZmlsdGVyX3RiXS5maWx0ZXJbZmlsdGVyXVsyXSkpOwotCQkJCW91dFhHSUlEWFJFRygKLQkJCQkJCVhHSVBBUlQyLAotCQkJCQkJMHgzOCwKLQkJCQkJCShYR0lfVFZfZmlsdGVyW2ZpbHRlcl90Yl0uZmlsdGVyW2ZpbHRlcl1bM10pKTsKLQkJCX0KLQotCQl9Ci0KLQl9Ci0KIH0KIAogWEdJSU5JVFNUQVRJQyBpbnQgX19pbml0IFhHSWZiX3NldHVwKGNoYXIgKm9wdGlvbnMpCkBAIC0yMDg2LDE1ICsxOTY5LDE5IEBACiAJCWlmICghc3RybmNtcCh0aGlzX29wdCwgIm1vZGU6IiwgNSkpIHsKIAkJCVhHSWZiX3NlYXJjaF9tb2RlKHRoaXNfb3B0ICsgNSk7CiAJCX0gZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJ2ZXNhOiIsIDUpKSB7Ci0JCQlYR0lmYl9zZWFyY2hfdmVzYW1vZGUoc2ltcGxlX3N0cnRvdWwodGhpc19vcHQgKyA1LCBOVUxMLCAwKSk7CisJCQlYR0lmYl9zZWFyY2hfdmVzYW1vZGUoc2ltcGxlX3N0cnRvdWwoCisJCQkJCQl0aGlzX29wdCArIDUsIE5VTEwsIDApKTsKIAkJfSBlbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgIm1vZGU6IiwgNSkpIHsKIAkJCVhHSWZiX3NlYXJjaF9tb2RlKHRoaXNfb3B0ICsgNSk7CiAJCX0gZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJ2ZXNhOiIsIDUpKSB7Ci0JCQlYR0lmYl9zZWFyY2hfdmVzYW1vZGUoc2ltcGxlX3N0cnRvdWwodGhpc19vcHQgKyA1LCBOVUxMLCAwKSk7CisJCQlYR0lmYl9zZWFyY2hfdmVzYW1vZGUoc2ltcGxlX3N0cnRvdWwoCisJCQkJCQl0aGlzX29wdCArIDUsIE5VTEwsIDApKTsKIAkJfSBlbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgInZyYXRlOiIsIDYpKSB7Ci0JCQl4Z2lfdmlkZW9faW5mby5yZWZyZXNoX3JhdGUgPSBzaW1wbGVfc3RydG91bCh0aGlzX29wdCArIDYsIE5VTEwsIDApOworCQkJeGdpX3ZpZGVvX2luZm8ucmVmcmVzaF9yYXRlID0gc2ltcGxlX3N0cnRvdWwoCisJCQkJCQl0aGlzX29wdCArIDYsIE5VTEwsIDApOwogCQl9IGVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAicmF0ZToiLCA1KSkgewotCQkJeGdpX3ZpZGVvX2luZm8ucmVmcmVzaF9yYXRlID0gc2ltcGxlX3N0cnRvdWwodGhpc19vcHQgKyA1LCBOVUxMLCAwKTsKKwkJCXhnaV92aWRlb19pbmZvLnJlZnJlc2hfcmF0ZSA9IHNpbXBsZV9zdHJ0b3VsKAorCQkJCQkJdGhpc19vcHQgKyA1LCBOVUxMLCAwKTsKIAkJfSBlbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgIm9mZiIsIDMpKSB7CiAJCQlYR0lmYl9vZmYgPSAxOwogCQl9IGVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAiY3J0MW9mZiIsIDcpKSB7CkBAIC0yMTA0LDcgKzE5OTEsOCBAQAogCQl9IGVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAiZm9yY2VjcnQydHlwZToiLCAxNCkpIHsKIAkJCVhHSWZiX3NlYXJjaF9jcnQydHlwZSh0aGlzX29wdCArIDE0KTsKIAkJfSBlbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgImZvcmNlY3J0MToiLCAxMCkpIHsKLQkJCVhHSWZiX2ZvcmNlY3J0MSA9IChpbnQpc2ltcGxlX3N0cnRvdWwodGhpc19vcHQgKyAxMCwgTlVMTCwgMCk7CisJCQlYR0lmYl9mb3JjZWNydDEgPSAoaW50KXNpbXBsZV9zdHJ0b3VsKAorCQkJCQkJdGhpc19vcHQgKyAxMCwgTlVMTCwgMCk7CiAJCX0gZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJ0dm1vZGU6IiwgNykpIHsKIAkJCVhHSWZiX3NlYXJjaF90dnN0ZCh0aGlzX29wdCArIDcpOwogCQl9IGVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAidHZzdGFuZGFyZDoiLCAxMSkpIHsKQEAgLTIxMjIsMTIgKzIwMTAsMTUgQEAKIAkJfSBlbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgIm5veXBhbiIsIDYpKSB7CiAJCQlYR0lmYl95cGFuID0gMDsKIAkJfSBlbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgInVzZXJvbToiLCA3KSkgewotCQkJWEdJZmJfdXNlcm9tID0gKGludClzaW1wbGVfc3RydG91bCh0aGlzX29wdCArIDcsIE5VTEwsIDApOworCQkJWEdJZmJfdXNlcm9tID0gKGludClzaW1wbGVfc3RydG91bCgKKwkJCQkJCXRoaXNfb3B0ICsgNywgTlVMTCwgMCk7CiAJCQkvKiB9IGVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAidXNlb2VtOiIsIDcpKSB7ICovCi0JCQkvKiBYR0lmYl91c2VvZW0gPSAoaW50KXNpbXBsZV9zdHJ0b3VsKHRoaXNfb3B0ICsgNywgTlVMTCwgMCk7ICovCisJCQkvKiBYR0lmYl91c2VvZW0gPSAoaW50KXNpbXBsZV9zdHJ0b3VsKAorCQkJCQkJdGhpc19vcHQgKyA3LCBOVUxMLCAwKTsgKi8KIAkJfSBlbHNlIHsKIAkJCVhHSWZiX3NlYXJjaF9tb2RlKHRoaXNfb3B0KTsKLQkJCS8qIHByaW50ayhLRVJOX0lORk8gIlhHSWZiOiBJbnZhbGlkIG9wdGlvbiAlc1xuIiwgdGhpc19vcHQpOyAqLworCQkJLyogcHJpbnRrKEtFUk5fSU5GTyAiWEdJZmI6IEludmFsaWQgb3B0aW9uICVzXG4iLAorCQkJCSAgdGhpc19vcHQpOyAqLwogCQl9CiAKIAkJLyogVFc6IFBhbm5pbmcgb25seSB3aXRoIGFjY2VsZXJhdGlvbiAqLwpAQCAtMjE3OCw3ICsyMDY5LDkgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAl4Z2lfdmlkZW9faW5mby5jaGlwX2lkID0gcGRldi0+ZGV2aWNlOwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9SRVZJU0lPTl9JRCwgJnhnaV92aWRlb19pbmZvLnJldmlzaW9uX2lkKTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LAorCQkJICAgICBQQ0lfUkVWSVNJT05fSUQsCisJCQkgICAgICZ4Z2lfdmlkZW9faW5mby5yZXZpc2lvbl9pZCk7CiAJWEdJaHdfZXh0LmpDaGlwUmV2aXNpb24gPSB4Z2lfdmlkZW9faW5mby5yZXZpc2lvbl9pZDsKIAogCXhnaV92aWRlb19pbmZvLnBjaWJ1cyA9IHBkZXYtPmJ1cy0+bnVtYmVyOwpAQCAtMjE5NCw3ICsyMDg3LDcgQEAKIAlYR0lod19leHQucGpJT0FkZHJlc3MgPSAodW5zaWduZWQgY2hhciAqKXhnaV92aWRlb19pbmZvLnZnYV9iYXNlOwogCS8qIFhHSV9Qci5SZWxJTyAgPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKSwgMTI4KSArIDB4MzA7ICovCiAJcHJpbnRrKCJYR0lmYjogUmVsb2NhdGUgSU8gYWRkcmVzczogJWx4IFslMDhseF1cbiIsCi0JCQkodW5zaWduZWQgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMiksIFhHSV9Qci5SZWxJTyk7CisJICAgICAgICh1bnNpZ25lZCBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKSwgWEdJX1ByLlJlbElPKTsKIAogCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgewogCQlyZXQgPSAtRUlPOwpAQCAtMjIwMyw4ICsyMDk2LDggQEAKIAogCVhHSVJlZ0luaXQoJlhHSV9QciwgKHVuc2lnbmVkIGxvbmcpWEdJaHdfZXh0LnBqSU9BZGRyZXNzKTsKIAotCW91dFhHSUlEWFJFRyhYR0lTUiwgSU5EX1hHSV9QQVNTV09SRCwgWEdJX1BBU1NXT1JEKTsKLQlpblhHSUlEWFJFRyhYR0lTUiwgSU5EX1hHSV9QQVNTV09SRCwgcmVnMSk7CisJeGdpZmJfcmVnX3NldChYR0lTUiwgSU5EX1hHSV9QQVNTV09SRCwgWEdJX1BBU1NXT1JEKTsKKwlyZWcxID0geGdpZmJfcmVnX2dldChYR0lTUiwgSU5EX1hHSV9QQVNTV09SRCk7CiAKIAlpZiAocmVnMSAhPSAweGExKSB7IC8qSS9PIGVycm9yICovCiAJCXByaW50aygiXG5YR0lmYjogSS9PIGVycm9yISEhIik7CkBAIC0yMjE0LDggKzIxMDcsOCBAQAogCiAJc3dpdGNoICh4Z2lfdmlkZW9faW5mby5jaGlwX2lkKSB7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX1hHXzIwOgotCQlvclhHSUlEWFJFRyhYR0lDUiwgSW5kZXhfQ1JfR1BJT19SZWczLCBHUElPR19FTik7Ci0JCWluWEdJSURYUkVHKFhHSUNSLCBJbmRleF9DUl9HUElPX1JlZzEsIENSNDgpOworCQl4Z2lmYl9yZWdfb3IoWEdJQ1IsIEluZGV4X0NSX0dQSU9fUmVnMywgR1BJT0dfRU4pOworCQlDUjQ4ID0geGdpZmJfcmVnX2dldChYR0lDUiwgSW5kZXhfQ1JfR1BJT19SZWcxKTsKIAkJaWYgKENSNDgmR1BJT0dfUkVBRCkKIAkJCXhnaV92aWRlb19pbmZvLmNoaXAgPSBYRzIxOwogCQllbHNlCkBAIC0yMjQ5LDcgKzIxNDIsOCBAQAogCWlmICgoeGdpX3ZpZGVvX2luZm8uY2hpcCA9PSBYRzIxKSB8fCAoWEdJZmJfdXNlcm9tKSkgewogCQlYR0lod19leHQucGpWaXJ0dWFsUm9tQmFzZSA9IHhnaWZiX2NvcHlfcm9tKHBkZXYpOwogCQlpZiAoWEdJaHdfZXh0LnBqVmlydHVhbFJvbUJhc2UpCi0JCQlwcmludGsoS0VSTl9JTkZPICJYR0lmYjogVmlkZW8gUk9NIGZvdW5kIGFuZCBtYXBwZWQgdG8gJXBcbiIsIFhHSWh3X2V4dC5walZpcnR1YWxSb21CYXNlKTsKKwkJCXByaW50ayhLRVJOX0lORk8gIlhHSWZiOiBWaWRlbyBST00gZm91bmQgYW5kIG1hcHBlZCB0byAlcFxuIiwKKwkJCSAgICAgICBYR0lod19leHQucGpWaXJ0dWFsUm9tQmFzZSk7CiAJCWVsc2UKIAkJCXByaW50ayhLRVJOX0lORk8gIlhHSWZiOiBWaWRlbyBST00gbm90IGZvdW5kXG4iKTsKIAl9IGVsc2UgewpAQCAtMjI2NCwxNyArMjE1OCwyMyBAQAogCQlnb3RvIGVycm9yOwogCX0KIAotCWlmICgoeGdpZmJfbW9kZV9pZHggPCAwKSB8fCAoKFhHSWJpb3NfbW9kZVt4Z2lmYl9tb2RlX2lkeF0ubW9kZV9ubykgIT0gMHhGRikpIHsKKwlpZiAoKHhnaWZiX21vZGVfaWR4IDwgMCkgfHwKKwkgICAgKChYR0liaW9zX21vZGVbeGdpZmJfbW9kZV9pZHhdLm1vZGVfbm8pICE9IDB4RkYpKSB7CiAJCS8qIEVuYWJsZSBQQ0lfTElORUFSX0FERFJFU1NJTkcgYW5kIE1NSU9fRU5BQkxFICAqLwotCQlvclhHSUlEWFJFRyhYR0lTUiwgSU5EX1hHSV9QQ0lfQUREUkVTU19TRVQsIChYR0lfUENJX0FERFJfRU5BQkxFIHwgWEdJX01FTV9NQVBfSU9fRU5BQkxFKSk7CisJCXhnaWZiX3JlZ19vcihYR0lTUiwKKwkJCSAgICAgSU5EX1hHSV9QQ0lfQUREUkVTU19TRVQsCisJCQkgICAgIChYR0lfUENJX0FERFJfRU5BQkxFIHwgWEdJX01FTV9NQVBfSU9fRU5BQkxFKSk7CiAJCS8qIEVuYWJsZSAyRCBhY2NlbGVyYXRvciBlbmdpbmUgKi8KLQkJb3JYR0lJRFhSRUcoWEdJU1IsIElORF9YR0lfTU9EVUxFX0VOQUJMRSwgWEdJX0VOQUJMRV8yRCk7CisJCXhnaWZiX3JlZ19vcihYR0lTUiwgSU5EX1hHSV9NT0RVTEVfRU5BQkxFLCBYR0lfRU5BQkxFXzJEKTsKIAl9CiAKIAlYR0lod19leHQudWxWaWRlb01lbW9yeVNpemUgPSB4Z2lfdmlkZW9faW5mby52aWRlb19zaXplOwogCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oeGdpX3ZpZGVvX2luZm8udmlkZW9fYmFzZSwgeGdpX3ZpZGVvX2luZm8udmlkZW9fc2l6ZSwgIlhHSWZiIEZCIikpIHsKLQkJcHJpbnRrKCJ1bmFibGUgcmVxdWVzdCBtZW1vcnkgc2l6ZSAleCIsIHhnaV92aWRlb19pbmZvLnZpZGVvX3NpemUpOworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHhnaV92aWRlb19pbmZvLnZpZGVvX2Jhc2UsCisJCQkJeGdpX3ZpZGVvX2luZm8udmlkZW9fc2l6ZSwKKwkJCQkiWEdJZmIgRkIiKSkgeworCQlwcmludGsoInVuYWJsZSByZXF1ZXN0IG1lbW9yeSBzaXplICV4IiwKKwkJICAgICAgIHhnaV92aWRlb19pbmZvLnZpZGVvX3NpemUpOwogCQlwcmludGsoS0VSTl9FUlIgIlhHSWZiOiBGYXRhbCBlcnJvcjogVW5hYmxlIHRvIHJlc2VydmUgZnJhbWUgYnVmZmVyIG1lbW9yeVxuIik7CiAJCXByaW50ayhLRVJOX0VSUiAiWEdJZmI6IElzIHRoZXJlIGFub3RoZXIgZnJhbWVidWZmZXIgZHJpdmVyIGFjdGl2ZT9cbiIpOwogCQlyZXQgPSAtRU5PREVWOwpAQCAtMjI5NSw3ICsyMTk1LDkgQEAKIAkJCQkJICAgIHhnaV92aWRlb19pbmZvLm1taW9fc2l6ZSk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJYR0lmYjogRnJhbWVidWZmZXIgYXQgMHglbHgsIG1hcHBlZCB0byAweCVwLCBzaXplICVka1xuIiwKLQkJCXhnaV92aWRlb19pbmZvLnZpZGVvX2Jhc2UsIHhnaV92aWRlb19pbmZvLnZpZGVvX3ZiYXNlLCB4Z2lfdmlkZW9faW5mby52aWRlb19zaXplIC8gMTAyNCk7CisJICAgICAgIHhnaV92aWRlb19pbmZvLnZpZGVvX2Jhc2UsCisJICAgICAgIHhnaV92aWRlb19pbmZvLnZpZGVvX3ZiYXNlLAorCSAgICAgICB4Z2lfdmlkZW9faW5mby52aWRlb19zaXplIC8gMTAyNCk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJYR0lmYjogTU1JTyBhdCAweCVseCwgbWFwcGVkIHRvIDB4JXAsIHNpemUgJWxka1xuIiwKIAkgICAgICAgeGdpX3ZpZGVvX2luZm8ubW1pb19iYXNlLCB4Z2lfdmlkZW9faW5mby5tbWlvX3ZiYXNlLApAQCAtMjMwOCwxOSArMjIxMCwyMSBAQAogCiAJeGdpX3ZpZGVvX2luZm8ubXRyciA9ICh1bnNpZ25lZCBpbnQpIDA7CiAKLQlpZiAoKHhnaWZiX21vZGVfaWR4IDwgMCkgfHwgKChYR0liaW9zX21vZGVbeGdpZmJfbW9kZV9pZHhdLm1vZGVfbm8pICE9IDB4RkYpKSB7CisJaWYgKCh4Z2lmYl9tb2RlX2lkeCA8IDApIHx8CisJICAgICgoWEdJYmlvc19tb2RlW3hnaWZiX21vZGVfaWR4XS5tb2RlX25vKSAhPSAweEZGKSkgewogCQl4Z2lfdmlkZW9faW5mby5oYXNWQiA9IEhBU1ZCX05PTkU7Ci0JCWlmICgoeGdpX3ZpZGVvX2luZm8uY2hpcCA9PSBYRzIwKSB8fCAoeGdpX3ZpZGVvX2luZm8uY2hpcCA9PSBYRzI3KSkgeworCQlpZiAoKHhnaV92aWRlb19pbmZvLmNoaXAgPT0gWEcyMCkgfHwKKwkJICAgICh4Z2lfdmlkZW9faW5mby5jaGlwID09IFhHMjcpKSB7CiAJCQl4Z2lfdmlkZW9faW5mby5oYXNWQiA9IEhBU1ZCX05PTkU7CiAJCX0gZWxzZSBpZiAoeGdpX3ZpZGVvX2luZm8uY2hpcCA9PSBYRzIxKSB7Ci0JCQlpblhHSUlEWFJFRyhYR0lDUiwgMHgzOCwgQ1IzOCk7CisJCQlDUjM4ID0geGdpZmJfcmVnX2dldChYR0lDUiwgMHgzOCk7CiAJCQlpZiAoKENSMzgmMHhFMCkgPT0gMHhDMCkgewogCQkJCXhnaV92aWRlb19pbmZvLmRpc3Bfc3RhdGUgPSBESVNQVFlQRV9MQ0Q7CiAJCQkJaWYgKCFYR0lmYl9HZXRYRzIxTFZEU0RhdGEoKSkgewogCQkJCQlpbnQgbTsKIAkJCQkJZm9yIChtID0gMDsgbSA8IHNpemVvZihYR0kyMV9MQ0RDYXBMaXN0KS9zaXplb2Yoc3RydWN0IFhHSTIxX0xWRFNDYXBTdHJ1Y3QpOyBtKyspIHsKIAkJCQkJCWlmICgoWEdJMjFfTENEQ2FwTGlzdFttXS5MVkRTSERFID09IFhHSWJpb3NfbW9kZVt4Z2lmYl9tb2RlX2lkeF0ueHJlcykgJiYKLQkJCQkJCQkJKFhHSTIxX0xDRENhcExpc3RbbV0uTFZEU1ZERSA9PSBYR0liaW9zX21vZGVbeGdpZmJfbW9kZV9pZHhdLnlyZXMpKSB7CisJCQkJCQkgICAgKFhHSTIxX0xDRENhcExpc3RbbV0uTFZEU1ZERSA9PSBYR0liaW9zX21vZGVbeGdpZmJfbW9kZV9pZHhdLnlyZXMpKSB7CiAJCQkJCQkJeGdpZmJfcmVnX3NldChYR0lfUHIuUDNkNCwgMHgzNiwgbSk7CiAJCQkJCQl9CiAJCQkJCX0KQEAgLTIzNDAsNyArMjI0NCw3IEBACiAKIAkJc3dpdGNoICh4Z2lfdmlkZW9faW5mby5oYXNWQikgewogCQljYXNlIEhBU1ZCXzMwMToKLQkJCWluWEdJSURYUkVHKFhHSVBBUlQ0LCAweDAxLCByZWcpOworCQkJcmVnID0geGdpZmJfcmVnX2dldChYR0lQQVJUNCwgMHgwMSk7CiAJCQlpZiAocmVnID49IDB4RTApIHsKIAkJCQlYR0lod19leHQudWpWQkNoaXBJRCA9IFZCX0NISVBfMzAyTFY7CiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAiWEdJZmI6IFhHSTMwMkxWIGJyaWRnZSBkZXRlY3RlZCAocmV2aXNpb24gMHglMDJ4KVxuIiwgcmVnKTsKQEAgLTIzNTAsNyArMjI1NCw3IEBACiAJCQl9CiAJCQkvKiBlbHNlIGlmIChyZWcgPj0gMHhCMCkgewogCQkJCVhHSWh3X2V4dC51alZCQ2hpcElEID0gVkJfQ0hJUF8zMDFCOwotCQkJCWluWEdJSURYUkVHKFhHSVBBUlQ0LCAweDIzLCByZWcxKTsKKwkJCQlyZWcxID0geGdpZmJfcmVnX2dldChYR0lQQVJUNCwgMHgyMyk7CiAJCQkJcHJpbnRrKCJYR0lmYjogWEdJMzAxQiBicmlkZ2UgZGV0ZWN0ZWRcbiIpOwogCQkJfSAqLwogCQkJZWxzZSB7CkBAIC0yMzU5LDcgKzIyNjMsNyBAQAogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgSEFTVkJfMzAyOgotCQkJaW5YR0lJRFhSRUcoWEdJUEFSVDQsIDB4MDEsIHJlZyk7CisJCQlyZWcgPSB4Z2lmYl9yZWdfZ2V0KFhHSVBBUlQ0LCAweDAxKTsKIAkJCWlmIChyZWcgPj0gMHhFMCkgewogCQkJCVhHSWh3X2V4dC51alZCQ2hpcElEID0gVkJfQ0hJUF8zMDJMVjsKIAkJCQlwcmludGsoS0VSTl9JTkZPICJYR0lmYjogWEdJMzAyTFYgYnJpZGdlIGRldGVjdGVkIChyZXZpc2lvbiAweCUwMngpXG4iLCByZWcpOwpAQCAtMjM2Nyw3ICsyMjcxLDcgQEAKIAkJCQlYR0lod19leHQudWpWQkNoaXBJRCA9IFZCX0NISVBfMzAxTFY7CiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAiWEdJZmI6IFhHSTMwMkxWIGJyaWRnZSBkZXRlY3RlZCAocmV2aXNpb24gMHglMDJ4KVxuIiwgcmVnKTsKIAkJCX0gZWxzZSBpZiAocmVnID49IDB4QjApIHsKLQkJCQlpblhHSUlEWFJFRyhYR0lQQVJUNCwgMHgyMywgcmVnMSk7CisJCQkJcmVnMSA9IHhnaWZiX3JlZ19nZXQoWEdJUEFSVDQsIDB4MjMpOwogCiAJCQkJWEdJaHdfZXh0LnVqVkJDaGlwSUQgPSBWQl9DSElQXzMwMkI7CiAKQEAgLTI0MDQsMTQgKzIzMDgsMTYgQEAKIAkJCWlmIChYR0lmYl9jcnQxb2ZmKQogCQkJCXhnaV92aWRlb19pbmZvLmRpc3Bfc3RhdGUgfD0gRElTUE1PREVfU0lOR0xFOwogCQkJZWxzZQotCQkJCXhnaV92aWRlb19pbmZvLmRpc3Bfc3RhdGUgfD0gKERJU1BNT0RFX01JUlJPUiB8IERJU1BUWVBFX0NSVDEpOworCQkJCXhnaV92aWRlb19pbmZvLmRpc3Bfc3RhdGUgfD0gKERJU1BNT0RFX01JUlJPUiB8CisJCQkJCQkJICAgICAgRElTUFRZUEVfQ1JUMSk7CiAJCX0gZWxzZSB7Ci0JCQl4Z2lfdmlkZW9faW5mby5kaXNwX3N0YXRlID0gRElTUE1PREVfU0lOR0xFIHwgRElTUFRZUEVfQ1JUMTsKKwkJCXhnaV92aWRlb19pbmZvLmRpc3Bfc3RhdGUgPSBESVNQTU9ERV9TSU5HTEUgfAorCQkJCQkJICAgIERJU1BUWVBFX0NSVDE7CiAJCX0KIAogCQlpZiAoeGdpX3ZpZGVvX2luZm8uZGlzcF9zdGF0ZSAmIERJU1BUWVBFX0xDRCkgewogCQkJaWYgKCFlbmFibGVfZHN0bikgewotCQkJCWluWEdJSURYUkVHKFhHSUNSLCBJTkRfWEdJX0xDRF9QQU5FTCwgcmVnKTsKKwkJCQlyZWcgPSB4Z2lmYl9yZWdfZ2V0KFhHSUNSLCBJTkRfWEdJX0xDRF9QQU5FTCk7CiAJCQkJcmVnICY9IDB4MGY7CiAJCQkJWEdJaHdfZXh0LnVsQ1JUMkxDRFR5cGUgPSBYR0kzMTBwYW5lbHR5cGVbcmVnXTsKIApAQCAtMjQzMSwyMSArMjMzNywyNSBAQAogCQkJCShYR0lod19leHQudWpWQkNoaXBJRCA9PSBWQl9DSElQXzMwMUxWKSB8fAogCQkJCShYR0lod19leHQudWpWQkNoaXBJRCA9PSBWQl9DSElQXzMwMkxWKSkgewogCQkJaW50IHRtcDsKLQkJCWluWEdJSURYUkVHKFhHSUNSLCAweDM0LCB0bXApOworCQkJdG1wID0geGdpZmJfcmVnX2dldChYR0lDUiwgMHgzNCk7CiAJCQlpZiAodG1wIDw9IDB4MTMpIHsKLQkJCQkvKiBDdXJyZW50bHkgb24gTENEQT8gKFNvbWUgQklPU2VzIGxlYXZlIENSMzgpICovCi0JCQkJaW5YR0lJRFhSRUcoWEdJQ1IsIDB4MzgsIHRtcCk7CisJCQkJLyogQ3VycmVudGx5IG9uIExDREE/CisJCQkJICooU29tZSBCSU9TZXMgbGVhdmUgQ1IzOCkgKi8KKwkJCQl0bXAgPSB4Z2lmYl9yZWdfZ2V0KFhHSUNSLCAweDM4KTsKIAkJCQlpZiAoKHRtcCAmIDB4MDMpID09IDB4MDMpIHsKIAkJCQkJLyogWEdJX1ByLlhHSV9Vc2VMQ0RBID0gMTsgKi8KIAkJCQl9IGVsc2UgewotCQkJCQkvKiBDdXJyZW50bHkgb24gTENEQT8gKFNvbWUgbmV3ZXIgQklPU2VzIHNldCBEMCBpbiBDUjM1KSAqLwotCQkJCQlpblhHSUlEWFJFRyhYR0lDUiwgMHgzNSwgdG1wKTsKKwkJCQkJLyogQ3VycmVudGx5IG9uIExDREE/CisJCQkJCSAqKFNvbWUgbmV3ZXIgQklPU2VzIHNldCBEMCBpbiBDUjM1KSAqLworCQkJCQl0bXAgPSB4Z2lmYl9yZWdfZ2V0KFhHSUNSLCAweDM1KTsKIAkJCQkJaWYgKHRtcCAmIDB4MDEpIHsKIAkJCQkJCS8qIFhHSV9Qci5YR0lfVXNlTENEQSA9IDE7ICovCiAJCQkJCX0gZWxzZSB7Ci0JCQkJCQlpblhHSUlEWFJFRyhYR0lDUiwgMHgzMCwgdG1wKTsKKwkJCQkJCXRtcCA9IHhnaWZiX3JlZ19nZXQoWEdJQ1IsCisJCQkJCQkJCSAgICAweDMwKTsKIAkJCQkJCWlmICh0bXAgJiAweDIwKSB7Ci0JCQkJCQkJaW5YR0lJRFhSRUcoWEdJUEFSVDEsIDB4MTMsIHRtcCk7CisJCQkJCQkJdG1wID0geGdpZmJfcmVnX2dldCgKKwkJCQkJCQkJWEdJUEFSVDEsIDB4MTMpOwogCQkJCQkJCWlmICh0bXAgJiAweDA0KSB7CiAJCQkJCQkJCS8qIFhHSV9Qci5YR0lfVXNlTENEQSA9IDE7ICovCiAJCQkJCQkJfQpAQCAtMjQ2NCw3ICsyMzc0LDggQEAKIAkJCWNhc2UgRElTUFRZUEVfTENEOgogCQkJCXhnaWZiX21vZGVfaWR4ID0gREVGQVVMVF9MQ0RNT0RFOwogCQkJCWlmICh4Z2lfdmlkZW9faW5mby5jaGlwID09IFhHMjEpCi0JCQkJCXhnaWZiX21vZGVfaWR4ID0gWEdJZmJfR2V0WEcyMURlZmF1bHRMVkRTTW9kZUlkeCgpOworCQkJCQl4Z2lmYl9tb2RlX2lkeCA9CisJCQkJCSAgICBYR0lmYl9HZXRYRzIxRGVmYXVsdExWRFNNb2RlSWR4KCk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIERJU1BUWVBFX1RWOgogCQkJCXhnaWZiX21vZGVfaWR4ID0gREVGQVVMVF9UVk1PREU7CkBAIC0yNDc3LDE4ICsyMzg4LDI2IEBACiAKIAkJWEdJZmJfbW9kZV9ubyA9IFhHSWJpb3NfbW9kZVt4Z2lmYl9tb2RlX2lkeF0ubW9kZV9ubzsKIAorCQkvKiB5aWxpbiBzZXQgZGVmYXVsdCByZWZyZXNoIHJhdGUgKi8KIAkJaWYgKHhnaV92aWRlb19pbmZvLnJlZnJlc2hfcmF0ZSA9PSAwKQotCQkJeGdpX3ZpZGVvX2luZm8ucmVmcmVzaF9yYXRlID0gNjA7IC8qIHlpbGluIHNldCBkZWZhdWx0IHJlZnJlc2ggcmF0ZSAqLwotCQlpZiAoWEdJZmJfc2VhcmNoX3JlZnJlc2hfcmF0ZSh4Z2lfdmlkZW9faW5mby5yZWZyZXNoX3JhdGUpID09IDApIHsKKwkJCXhnaV92aWRlb19pbmZvLnJlZnJlc2hfcmF0ZSA9IDYwOworCQlpZiAoWEdJZmJfc2VhcmNoX3JlZnJlc2hfcmF0ZSgKKwkJCQl4Z2lfdmlkZW9faW5mby5yZWZyZXNoX3JhdGUpID09IDApIHsKIAkJCVhHSWZiX3JhdGVfaWR4ID0gWEdJYmlvc19tb2RlW3hnaWZiX21vZGVfaWR4XS5yYXRlX2lkeDsKIAkJCXhnaV92aWRlb19pbmZvLnJlZnJlc2hfcmF0ZSA9IDYwOwogCQl9CiAKIAkJeGdpX3ZpZGVvX2luZm8udmlkZW9fYnBwID0gWEdJYmlvc19tb2RlW3hnaWZiX21vZGVfaWR4XS5icHA7Ci0JCXhnaV92aWRlb19pbmZvLnZpZGVvX3Z3aWR0aCA9IHhnaV92aWRlb19pbmZvLnZpZGVvX3dpZHRoID0gWEdJYmlvc19tb2RlW3hnaWZiX21vZGVfaWR4XS54cmVzOwotCQl4Z2lfdmlkZW9faW5mby52aWRlb192aGVpZ2h0ID0geGdpX3ZpZGVvX2luZm8udmlkZW9faGVpZ2h0ID0gWEdJYmlvc19tb2RlW3hnaWZiX21vZGVfaWR4XS55cmVzOworCQl4Z2lfdmlkZW9faW5mby52aWRlb192d2lkdGggPQorCQkJeGdpX3ZpZGVvX2luZm8udmlkZW9fd2lkdGggPQorCQkJCVhHSWJpb3NfbW9kZVt4Z2lmYl9tb2RlX2lkeF0ueHJlczsKKwkJeGdpX3ZpZGVvX2luZm8udmlkZW9fdmhlaWdodCA9CisJCQl4Z2lfdmlkZW9faW5mby52aWRlb19oZWlnaHQgPQorCQkJCVhHSWJpb3NfbW9kZVt4Z2lmYl9tb2RlX2lkeF0ueXJlczsKIAkJeGdpX3ZpZGVvX2luZm8ub3JnX3ggPSB4Z2lfdmlkZW9faW5mby5vcmdfeSA9IDA7Ci0JCXhnaV92aWRlb19pbmZvLnZpZGVvX2xpbmVsZW5ndGggPSB4Z2lfdmlkZW9faW5mby52aWRlb193aWR0aCAqICh4Z2lfdmlkZW9faW5mby52aWRlb19icHAgPj4gMyk7CisJCXhnaV92aWRlb19pbmZvLnZpZGVvX2xpbmVsZW5ndGggPQorCQkJeGdpX3ZpZGVvX2luZm8udmlkZW9fd2lkdGggKgorCQkJKHhnaV92aWRlb19pbmZvLnZpZGVvX2JwcCA+PiAzKTsKIAkJc3dpdGNoICh4Z2lfdmlkZW9faW5mby52aWRlb19icHApIHsKIAkJY2FzZSA4OgogCQkJeGdpX3ZpZGVvX2luZm8uRHN0Q29sb3IgPSAweDAwMDA7CkBAIC0yNTA3LDE2ICsyNDI2LDIzIEBACiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXhnaV92aWRlb19pbmZvLnZpZGVvX2NtYXBfbGVuID0gMTY7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJYR0lmYjogVW5zdXBwb3J0ZWQgZGVwdGggJWQiLCB4Z2lfdmlkZW9faW5mby52aWRlb19icHApOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiWEdJZmI6IFVuc3VwcG9ydGVkIGRlcHRoICVkIiwKKwkJCSAgICAgICB4Z2lfdmlkZW9faW5mby52aWRlb19icHApOwogCQkJYnJlYWs7CiAJCX0KIAogCQlwcmludGsoS0VSTl9JTkZPICJYR0lmYjogRGVmYXVsdCBtb2RlIGlzICVkeCVkeCVkICglZEh6KVxuIiwKLQkJCQl4Z2lfdmlkZW9faW5mby52aWRlb193aWR0aCwgeGdpX3ZpZGVvX2luZm8udmlkZW9faGVpZ2h0LCB4Z2lfdmlkZW9faW5mby52aWRlb19icHAsCi0JCQkJeGdpX3ZpZGVvX2luZm8ucmVmcmVzaF9yYXRlKTsKKwkJICAgICAgIHhnaV92aWRlb19pbmZvLnZpZGVvX3dpZHRoLAorCQkgICAgICAgeGdpX3ZpZGVvX2luZm8udmlkZW9faGVpZ2h0LAorCQkgICAgICAgeGdpX3ZpZGVvX2luZm8udmlkZW9fYnBwLAorCQkgICAgICAgeGdpX3ZpZGVvX2luZm8ucmVmcmVzaF9yYXRlKTsKIAotCQlkZWZhdWx0X3Zhci54cmVzID0gZGVmYXVsdF92YXIueHJlc192aXJ0dWFsID0geGdpX3ZpZGVvX2luZm8udmlkZW9fd2lkdGg7Ci0JCWRlZmF1bHRfdmFyLnlyZXMgPSBkZWZhdWx0X3Zhci55cmVzX3ZpcnR1YWwgPSB4Z2lfdmlkZW9faW5mby52aWRlb19oZWlnaHQ7CisJCWRlZmF1bHRfdmFyLnhyZXMgPQorCQkJZGVmYXVsdF92YXIueHJlc192aXJ0dWFsID0KKwkJCQl4Z2lfdmlkZW9faW5mby52aWRlb193aWR0aDsKKwkJZGVmYXVsdF92YXIueXJlcyA9CisJCQlkZWZhdWx0X3Zhci55cmVzX3ZpcnR1YWwgPQorCQkJCXhnaV92aWRlb19pbmZvLnZpZGVvX2hlaWdodDsKIAkJZGVmYXVsdF92YXIuYml0c19wZXJfcGl4ZWwgPSB4Z2lfdmlkZW9faW5mby52aWRlb19icHA7CiAKIAkJWEdJZmJfYnBwX3RvX3ZhcigmZGVmYXVsdF92YXIpOwpAQCAtMjUzMiwxMCArMjQ1OCwxMiBAQAogCQkJJmRlZmF1bHRfdmFyLmhzeW5jX2xlbiwgJmRlZmF1bHRfdmFyLnZzeW5jX2xlbiwKIAkJCSZkZWZhdWx0X3Zhci5zeW5jLCAmZGVmYXVsdF92YXIudm1vZGUpKSB7CiAKLQkJCWlmICgoZGVmYXVsdF92YXIudm1vZGUgJiBGQl9WTU9ERV9NQVNLKSA9PSBGQl9WTU9ERV9JTlRFUkxBQ0VEKSB7CisJCQlpZiAoKGRlZmF1bHRfdmFyLnZtb2RlICYgRkJfVk1PREVfTUFTSykgPT0KKwkJCSAgICBGQl9WTU9ERV9JTlRFUkxBQ0VEKSB7CiAJCQkJZGVmYXVsdF92YXIueXJlcyA8PD0gMTsKIAkJCQlkZWZhdWx0X3Zhci55cmVzX3ZpcnR1YWwgPDw9IDE7Ci0JCQl9IGVsc2UgaWYgKChkZWZhdWx0X3Zhci52bW9kZSAmIEZCX1ZNT0RFX01BU0spID09IEZCX1ZNT0RFX0RPVUJMRSkgeworCQkJfSBlbHNlIGlmICgoZGVmYXVsdF92YXIudm1vZGUgJiBGQl9WTU9ERV9NQVNLKSA9PQorCQkJCSAgIEZCX1ZNT0RFX0RPVUJMRSkgewogCQkJCWRlZmF1bHRfdmFyLnBpeGNsb2NrID4+PSAxOwogCQkJCWRlZmF1bHRfdmFyLnlyZXMgPj49IDE7CiAJCQkJZGVmYXVsdF92YXIueXJlc192aXJ0dWFsID4+PSAxOwpAQCAtMjU1NSw5ICsyNDgzLDEwIEBACiAJCWZiX2FsbG9jX2NtYXAoJmZiX2luZm8tPmNtYXAsIDI1NiAsIDApOwogCiAjaWZkZWYgQ09ORklHX01UUlIKLQkJeGdpX3ZpZGVvX2luZm8ubXRyciA9IG10cnJfYWRkKCh1bnNpZ25lZCBpbnQpIHhnaV92aWRlb19pbmZvLnZpZGVvX2Jhc2UsCi0JCQkJKHVuc2lnbmVkIGludCkgeGdpX3ZpZGVvX2luZm8udmlkZW9fc2l6ZSwKLQkJCQlNVFJSX1RZUEVfV1JDT01CLCAxKTsKKwkJeGdpX3ZpZGVvX2luZm8ubXRyciA9IG10cnJfYWRkKAorCQkJKHVuc2lnbmVkIGludCkgeGdpX3ZpZGVvX2luZm8udmlkZW9fYmFzZSwKKwkJCSh1bnNpZ25lZCBpbnQpIHhnaV92aWRlb19pbmZvLnZpZGVvX3NpemUsCisJCQlNVFJSX1RZUEVfV1JDT01CLCAxKTsKIAkJaWYgKHhnaV92aWRlb19pbmZvLm10cnIpCiAJCQlwcmludGsoS0VSTl9JTkZPICJYR0lmYjogQWRkZWQgTVRSUnNcbiIpOwogI2VuZGlmCkBAIC0yNTcwLDcgKzI0OTksNyBAQAogCQlYR0lmYl9yZWdpc3RlcmVkID0gMTsKIAogCQlwcmludGsoS0VSTl9JTkZPICJmYiVkOiAlcyBmcmFtZSBidWZmZXIgZGV2aWNlLCBWZXJzaW9uICVkLiVkLiUwMmRcbiIsCi0JCQkJZmJfaW5mby0+bm9kZSwgbXlpZCwgVkVSX01BSk9SLCBWRVJfTUlOT1IsIFZFUl9MRVZFTCk7CisJCSAgICAgICBmYl9pbmZvLT5ub2RlLCBteWlkLCBWRVJfTUFKT1IsIFZFUl9NSU5PUiwgVkVSX0xFVkVMKTsKIAogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL1hHSWZiLmggYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvWEdJZmIuaAppbmRleCBiNDNhNzU4Li40NWI2MDE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvWEdJZmIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvWEdJZmIuaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgX0xJTlVYX1hHSUZCCiAjZGVmaW5lIF9MSU5VWF9YR0lGQgotI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2RlZmluZSBESVNQVFlQRV9DUlQxICAgICAgIDB4MDAwMDAwMDhMCiAjZGVmaW5lIERJU1BUWVBFX0NSVDIgICAgICAgMHgwMDAwMDAwNEwKQEAgLTEzLDk5ICsxMyw5OSBAQAogI2RlZmluZSBESVNQTU9ERV9NSVJST1IJICAgIDB4MDAwMDAwMTBMCiAjZGVmaW5lIERJU1BNT0RFX0RVQUxWSUVXICAgMHgwMDAwMDA0MEwKIAotI2RlZmluZSBIQVNWQl9OT05FICAgICAgCTB4MDAKLSNkZWZpbmUgSEFTVkJfMzAxICAgICAgIAkweDAxCi0jZGVmaW5lIEhBU1ZCX0xWRFMgICAgICAJMHgwMgotI2RlZmluZSBIQVNWQl9UUlVNUElPTiAgCTB4MDQKLSNkZWZpbmUgSEFTVkJfTFZEU19DSFJPTlRFTAkweDEwCi0jZGVmaW5lIEhBU1ZCXzMwMiAgICAgICAJMHgyMAotI2RlZmluZSBIQVNWQl8zMDMgICAgICAgCTB4NDAKLSNkZWZpbmUgSEFTVkJfQ0hST05URUwgIAkweDgwCisjZGVmaW5lIEhBU1ZCX05PTkUJICAgIDB4MDAKKyNkZWZpbmUgSEFTVkJfMzAxCSAgICAweDAxCisjZGVmaW5lIEhBU1ZCX0xWRFMJICAgIDB4MDIKKyNkZWZpbmUgSEFTVkJfVFJVTVBJT04JICAgIDB4MDQKKyNkZWZpbmUgSEFTVkJfTFZEU19DSFJPTlRFTCAweDEwCisjZGVmaW5lIEhBU1ZCXzMwMgkgICAgMHgyMAorI2RlZmluZSBIQVNWQl8zMDMJICAgIDB4NDAKKyNkZWZpbmUgSEFTVkJfQ0hST05URUwJICAgIDB4ODAKIAogI2lmbmRlZiBYR0lGQl9JRAotI2RlZmluZSBYR0lGQl9JRCAgICAgICAgICAweDUzNDk1MzQ2ICAgIC8qIElkZW50aWZ5IG15c2VsZiB3aXRoICdYR0lGJyAqLworI2RlZmluZSBYR0lGQl9JRAkweDUzNDk1MzQ2IC8qIElkZW50aWZ5IG15c2VsZiB3aXRoICdYR0lGJyAqLwogI2VuZGlmCiAKIGVudW0gWEdJX0NISVBfVFlQRSB7Ci0gICAgWEc0MCA9IDMyLAotICAgIFhHNDEsCi0gICAgWEc0MiwKLSAgICBYRzQ1LAotICAgIFhHMjAgPSA0OCwKLSAgICBYRzIxLAotICAgIFhHMjcsCisJWEc0MCA9IDMyLAorCVhHNDEsCisJWEc0MiwKKwlYRzQ1LAorCVhHMjAgPSA0OCwKKwlYRzIxLAorCVhHMjcsCiB9OwogCiBlbnVtIHhnaV90dnR5cGUgewogCVRWTU9ERV9OVFNDID0gMCwKIAlUVk1PREVfUEFMLAogCVRWTU9ERV9ISVZJU0lPTiwKLQlUVlRZUEVfUEFMTSwJLy8gdmlja2lAMDMwMjI2Ci0gICAgCVRWVFlQRV9QQUxOLAkvLyB2aWNraUAwMzAyMjYKLSAgICAJVFZUWVBFX05UU0NKLAkvLyB2aWNraUAwMzAyMjYKKwlUVlRZUEVfUEFMTSwJLyogdmlja2lAMDMwMjI2ICovCisJVFZUWVBFX1BBTE4sCS8qIHZpY2tpQDAzMDIyNiAqLworCVRWVFlQRV9OVFNDSiwJLyogdmlja2lAMDMwMjI2ICovCiAJVFZNT0RFX1RPVEFMCiB9OwogCi1lbnVtIHhnaV90dl9wbHVnIHsJLyogdmlja2lAMDMwMjI2ICovCi0vLwlUVlBMVUdfTGVnYWN5ID0gMCwKLS8vCVRWUExVR19DT01QT1NJVEUsCi0vLwlUVlBMVUdfU1ZJREVPLAotLy8JVFZQTFVHX1NDQVJULAotLy8JVFZQTFVHX1RPVEFMCi0gICAgCVRWUExVR19VTktOT1dOID0gMCwKLSAgICAJVFZQTFVHX0NPTVBPU0lURSA9IDEsCi0gICAgCVRWUExVR19TVklERU8gPSAyLAotICAgIAlUVlBMVUdfQ09NUE9TSVRFX0FORF9TVklERU8gPSAzLAotICAgIAlUVlBMVUdfU0NBUlQgPSA0LAotICAgIAlUVlBMVUdfWVBCUFJfNTI1aSA9IDUsCi0gICAgCVRWUExVR19ZUEJQUl81MjVQID0gNiwKLSAgICAJVFZQTFVHX1lQQlBSXzc1MFAgPSA3LAotICAgIAlUVlBMVUdfWVBCUFJfMTA4MGkgPSA4LAorZW51bSB4Z2lfdHZfcGx1ZyB7IC8qIHZpY2tpQDAzMDIyNiAqLworLyoJVFZQTFVHX0xlZ2FjeSA9IDAsICovCisvKglUVlBMVUdfQ09NUE9TSVRFLCAgKi8KKy8qCVRWUExVR19TVklERU8sCSAgICovCisvKglUVlBMVUdfU0NBUlQsCSAgICovCisvKglUVlBMVUdfVE9UQUwJICAgKi8KKwlUVlBMVUdfVU5LTk9XTiA9IDAsCisJVFZQTFVHX0NPTVBPU0lURSA9IDEsCisJVFZQTFVHX1NWSURFTyA9IDIsCisJVFZQTFVHX0NPTVBPU0lURV9BTkRfU1ZJREVPID0gMywKKwlUVlBMVUdfU0NBUlQgPSA0LAorCVRWUExVR19ZUEJQUl81MjVpID0gNSwKKwlUVlBMVUdfWVBCUFJfNTI1UCA9IDYsCisJVFZQTFVHX1lQQlBSXzc1MFAgPSA3LAorCVRWUExVR19ZUEJQUl8xMDgwaSA9IDgsCiAJVFZQTFVHX1RPVEFMCiB9OwogCi1zdHJ1Y3QgdmlkZW9faW5mb3sKLSAgICAgICAgaW50ICAgICAgICAgICBjaGlwX2lkOwotICAgICAgICB1bnNpZ25lZCBpbnQgIHZpZGVvX3NpemU7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgdmlkZW9fYmFzZTsKLSAgICAgICAgY2hhciAgKiAgICAgICB2aWRlb192YmFzZTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBtbWlvX2Jhc2U7CitzdHJ1Y3QgdmlkZW9faW5mbyB7CisJaW50ICAgICAgICAgICBjaGlwX2lkOworCXVuc2lnbmVkIGludCAgdmlkZW9fc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHZpZGVvX2Jhc2U7CisJY2hhcgkgICAgICAqdmlkZW9fdmJhc2U7CisJdW5zaWduZWQgbG9uZyBtbWlvX2Jhc2U7CiAJdW5zaWduZWQgbG9uZyBtbWlvX3NpemU7Ci0gICAgICAgIGNoYXIgICogICAgICAgbW1pb192YmFzZTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyB2Z2FfYmFzZTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBtdHJyOworCWNoYXIJICAgICAgKm1taW9fdmJhc2U7CisJdW5zaWduZWQgbG9uZyB2Z2FfYmFzZTsKKwl1bnNpZ25lZCBsb25nIG10cnI7CiAKLSAgICAgICAgaW50ICAgIHZpZGVvX2JwcDsKLSAgICAgICAgaW50ICAgIHZpZGVvX2NtYXBfbGVuOwotICAgICAgICBpbnQgICAgdmlkZW9fd2lkdGg7Ci0gICAgICAgIGludCAgICB2aWRlb19oZWlnaHQ7Ci0gICAgICAgIGludCAgICB2aWRlb192d2lkdGg7Ci0gICAgICAgIGludCAgICB2aWRlb192aGVpZ2h0OwotICAgICAgICBpbnQgICAgb3JnX3g7Ci0gICAgICAgIGludCAgICBvcmdfeTsKLSAgICAgICAgaW50ICAgIHZpZGVvX2xpbmVsZW5ndGg7Ci0gICAgICAgIHVuc2lnbmVkIGludCByZWZyZXNoX3JhdGU7CisJaW50ICAgIHZpZGVvX2JwcDsKKwlpbnQgICAgdmlkZW9fY21hcF9sZW47CisJaW50ICAgIHZpZGVvX3dpZHRoOworCWludCAgICB2aWRlb19oZWlnaHQ7CisJaW50ICAgIHZpZGVvX3Z3aWR0aDsKKwlpbnQgICAgdmlkZW9fdmhlaWdodDsKKwlpbnQgICAgb3JnX3g7CisJaW50ICAgIG9yZ195OworCWludCAgICB2aWRlb19saW5lbGVuZ3RoOworCXVuc2lnbmVkIGludCByZWZyZXNoX3JhdGU7CiAKLSAgICAgICAgdW5zaWduZWQgbG9uZyBkaXNwX3N0YXRlOwotICAgICAgICB1bnNpZ25lZCBjaGFyIGhhc1ZCOwotICAgICAgICB1bnNpZ25lZCBjaGFyIFRWX3R5cGU7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgVFZfcGx1ZzsKKwl1bnNpZ25lZCBsb25nIGRpc3Bfc3RhdGU7CisJdW5zaWduZWQgY2hhciBoYXNWQjsKKwl1bnNpZ25lZCBjaGFyIFRWX3R5cGU7CisJdW5zaWduZWQgY2hhciBUVl9wbHVnOwogCiAJZW51bSBYR0lfQ0hJUF9UWVBFIGNoaXA7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgcmV2aXNpb25faWQ7CisJdW5zaWduZWQgY2hhciByZXZpc2lvbl9pZDsKIAotICAgICAgICB1bnNpZ25lZCBzaG9ydCBEc3RDb2xvcjsKLSAgICAgICAgdW5zaWduZWQgbG9uZyAgWEdJMzEwX0FjY2VsRGVwdGg7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgIENvbW1hbmRSZWc7CisJdW5zaWduZWQgc2hvcnQgRHN0Q29sb3I7CisJdW5zaWduZWQgbG9uZyAgWEdJMzEwX0FjY2VsRGVwdGg7CisJdW5zaWduZWQgbG9uZyAgQ29tbWFuZFJlZzsKIAotICAgICAgICB1bnNpZ25lZCBpbnQgICBwY2lidXM7Ci0gICAgICAgIHVuc2lnbmVkIGludCAgIHBjaXNsb3Q7Ci0gICAgICAgIHVuc2lnbmVkIGludCAgIHBjaWZ1bmM7CisJdW5zaWduZWQgaW50ICAgcGNpYnVzOworCXVuc2lnbmVkIGludCAgIHBjaXNsb3Q7CisJdW5zaWduZWQgaW50ICAgcGNpZnVuYzsKIAotICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdWJzeXN2ZW5kb3I7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0IHN1YnN5c2RldmljZTsKKwl1bnNpZ25lZCBzaG9ydCBzdWJzeXN2ZW5kb3I7CisJdW5zaWduZWQgc2hvcnQgc3Vic3lzZGV2aWNlOwogCi0gICAgICAgIGNoYXIgcmVzZXJ2ZWRbMjM2XTsKKwljaGFyIHJlc2VydmVkWzIzNl07CiB9OwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9kZWYuaCBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9kZWYuaAppbmRleCA0ZGUxODJiLi4zMzljMDcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfZGVmLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX2RlZi5oCkBAIC0xLDQgKzEsNSBAQAotLyogJFhGcmVlODY6IHhjL3Byb2dyYW1zL1hzZXJ2ZXIvaHcveGZyZWU4Ni9kcml2ZXJzL3hnaS9pbml0ZGVmLmgsdiAxLjQgMjAwMC8xMi8wMiAwMToxNjoxNyBkYXdlcyBFeHAgJCAqLworLyogJFhGcmVlODY6IHhjL3Byb2dyYW1zL1hzZXJ2ZXIvaHcveGZyZWU4Ni9kcml2ZXJzL3hnaS9pbml0ZGVmLmgKKyAqICx2IDEuNCAyMDAwLzEyLzAyIDAxOjE2OjE3IGRhd2VzIEV4cCAkKi8KICNpZm5kZWYgX0lOSVRERUZfCiAjZGVmaW5lIF9JTklUREVGXwogCkBAIC03LDM4ICs4LDM4IEBACiAjZW5kaWYKIC8qIHNoYW1wb28gKi8KIAotI2RlZmluZSBTRVFfQUREUkVTU19QT1JUCSAgMHgwMDE0Ci0jZGVmaW5lIFNFUV9EQVRBX1BPUlQJCSAgMHgwMDE1Ci0jZGVmaW5lIE1JU0NfT1VUUFVUX1JFR19SRUFEX1BPUlQgMHgwMDFDCi0jZGVmaW5lIE1JU0NfT1VUUFVUX1JFR19XUklURV9QT1JUIDB4MDAxMgotI2RlZmluZSBHUkFQSF9EQVRBX1BPUlQJCSAgMHgxRgotI2RlZmluZSBHUkFQSF9BRERSRVNTX1BPUlQJICAweDFFCi0jZGVmaW5lIFhHSV9NQVNLX0RVQUxfQ0hJUAkgIDB4MDQgIC8qIFNSM0EgKi8KLSNkZWZpbmUgQ1JUQ19BRERSRVNTX1BPUlRfQ09MT1IgICAweDAwMjQKKyNkZWZpbmUgU0VRX0FERFJFU1NfUE9SVCAgICAgICAgICAgIDB4MDAxNAorI2RlZmluZSBTRVFfREFUQV9QT1JUICAgICAgICAgICAgICAgMHgwMDE1CisjZGVmaW5lIE1JU0NfT1VUUFVUX1JFR19SRUFEX1BPUlQgICAweDAwMUMKKyNkZWZpbmUgTUlTQ19PVVRQVVRfUkVHX1dSSVRFX1BPUlQgIDB4MDAxMgorI2RlZmluZSBHUkFQSF9EQVRBX1BPUlQgICAgICAgICAgICAgMHgxRgorI2RlZmluZSBHUkFQSF9BRERSRVNTX1BPUlQgICAgICAgICAgMHgxRQorI2RlZmluZSBYR0lfTUFTS19EVUFMX0NISVAgICAgICAgICAgMHgwNCAgLyogU1IzQSAqLworI2RlZmluZSBDUlRDX0FERFJFU1NfUE9SVF9DT0xPUiAgICAgMHgwMDI0CiAjZGVmaW5lIFZJREVPX1NVQlNZU1RFTV9FTkFCTEVfUE9SVCAweDAwMTMKLSNkZWZpbmUgUENJX0NPTU1BTkQJCTB4MDQKKyNkZWZpbmUgUENJX0NPTU1BTkQgICAgICAgICAgICAgICAgIDB4MDQKIAogLyogfnNoYW1wb28gKi8KIAogCi0jZGVmaW5lIFZCX1hHSTMwMQkgICAgICAweDAwMDEgIC8qMzAxYiovCi0jZGVmaW5lIFZCX1hHSTMwMUIgICAgICAgIDB4MDAwMgotI2RlZmluZSBWQl9YR0kzMDJCICAgICAgICAweDAwMDQKKyNkZWZpbmUgVkJfWEdJMzAxICAgICAgIDB4MDAwMSAvKjMwMWIqLworI2RlZmluZSBWQl9YR0kzMDFCICAgICAgMHgwMDAyCisjZGVmaW5lIFZCX1hHSTMwMkIgICAgICAweDAwMDQKICNkZWZpbmUgVkJfWEdJMzAxTFYgICAgIDB4MDAwOCAvKjMwMWx2Ki8KICNkZWZpbmUgVkJfWEdJMzAyTFYgICAgIDB4MDAxMAotI2RlZmluZSBWQl9YR0kzMDFDICAgICAgMHgwMDIwICAgICAgIC8qIGZvciAzMDFDICovCi0jZGVmaW5lICBWQl9Ob0xDRCAgICAgICAgMHg4MDAwCisjZGVmaW5lIFZCX1hHSTMwMUMgICAgICAweDAwMjAgLyogZm9yIDMwMUMgKi8KKyNkZWZpbmUgIFZCX05vTENEICAgICAgIDB4ODAwMAogLyplbmQgMzAxYiovCiAKLSNkZWZpbmUgVkJfWVBiUHJJbmZvICAgICAweDA3ICAgICAgICAgIC8qMzAxbHYqLwotI2RlZmluZSBWQl9ZUGJQcjUyNWkgICAgIDB4MDAKLSNkZWZpbmUgVkJfWVBiUHI1MjVwICAgICAweDAxCi0jZGVmaW5lIFZCX1lQYlByNzUwcCAgICAgMHgwMgotI2RlZmluZSBWQl9ZUGJQcjEwODBpICAgIDB4MDMKKyNkZWZpbmUgVkJfWVBiUHJJbmZvICAgIDB4MDcgICAvKjMwMWx2Ki8KKyNkZWZpbmUgVkJfWVBiUHI1MjVpICAgIDB4MDAKKyNkZWZpbmUgVkJfWVBiUHI1MjVwICAgIDB4MDEKKyNkZWZpbmUgVkJfWVBiUHI3NTBwICAgIDB4MDIKKyNkZWZpbmUgVkJfWVBiUHIxMDgwaSAgIDB4MDMKIAogLyogI2RlZmluZSBDUlQxTGVuIDE3ICovCi0jZGVmaW5lIExWRFNDUlQxTGVuICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIENIVFZSZWdEYXRhTGVuICAgICAgICAgIDUKKyNkZWZpbmUgTFZEU0NSVDFMZW4gICAgIDE1CisjZGVmaW5lIENIVFZSZWdEYXRhTGVuICA1CiAKIC8qICNkZWZpbmUgTW9kZUluZm9GbGFnIDB4MDcgKi8KIC8qICNkZWZpbmUgSXNUZXh0TW9kZSAweDA3ICovCkBAIC03MCw4ICs3MSw4IEBACiAjZGVmaW5lIE5vU3VwcG9ydFRWICAgICAgICAgICAgIDB4MDA3MAogI2RlZmluZSBOb1N1cHBvcnRIaVZpc2lvblRWICAgICAweDAwNjAKICNkZWZpbmUgTm9TdXBwb3J0TENEICAgICAgICAgICAgMHgwMDU4Ci0jZGVmaW5lIFN1cHBvcnRDSFRWIAkJMHgwODAwCi0jZGVmaW5lIFN1cHBvcnRDUlQyaW4zMDFDICAgICAgIDB4MDEwMCAgICAgICAvKiBmb3IgMzAxQyAqLworI2RlZmluZSBTdXBwb3J0Q0hUViAgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgU3VwcG9ydENSVDJpbjMwMUMgICAgICAgMHgwMTAwICAvKiBmb3IgMzAxQyAqLwogI2RlZmluZSBTdXBwb3J0VFYxMDI0ICAgICAgICAgICAweDA4MDAgIC8qMzAxYiovCiAjZGVmaW5lIFN1cHBvcnRZUGJQciAgICAgICAgICAgIDB4MTAwMCAgLyozMDFsdiovCiAjZGVmaW5lIEludGVybGFjZU1vZGUgICAgICAgICAgIDB4MDA4MApAQCAtMTA0LDcgKzEwNSw3IEBACiAjZGVmaW5lIERpc2FibGVDUlQyRGlzcGxheSAgICAgIDB4MjAwMAogI2RlZmluZSBEcml2ZXJNb2RlICAgICAgICAgICAgICAweDQwMDAKICNkZWZpbmUgSG90S2V5U3dpdGNoICAgICAgICAgICAgMHg4MDAwCi0jZGVmaW5lIFNldENIVFZPdmVyU2NhbiAgCTB4ODAwMAorI2RlZmluZSBTZXRDSFRWT3ZlclNjYW4gICAgICAgICAweDgwMDAKIC8qICNkZWZpbmUgU2V0Q1JUMlRvTENEQSAweDgwMDAgMzAxYiAqLwogI2RlZmluZSBQYW5lbFJHQjE4Qml0ICAgICAgICAgICAweDAxMDAKICNkZWZpbmUgUGFuZWxSR0IyNEJpdCAgICAgICAgICAgMHgwMDAwCkBAIC0xMTIsOCArMTEzLDggQEAKICNkZWZpbmUgVFZPdmVyU2NhbiAgICAgICAgICAgICAgMHgxMAogI2RlZmluZSBUVk92ZXJTY2FuU2hpZnQgICAgICAgICA0CiAjZGVmaW5lIENsZWFyQnVmZmVyRmxhZyAgICAgICAgIDB4MjAKLSNkZWZpbmUgRW5hYmxlRHVhbEVkZ2UgCQkweDAxCQkvKjMwMWIqLwotI2RlZmluZSBTZXRUb0xDREEJCTB4MDIKKyNkZWZpbmUgRW5hYmxlRHVhbEVkZ2UgICAgICAgICAgMHgwMSAvKjMwMWIqLworI2RlZmluZSBTZXRUb0xDREEgICAgICAgICAgICAgICAweDAyCiAKICNkZWZpbmUgWVBiUHJNb2RlSW5mbyAgICAgICAgICAgMHgzOAogLyogI2RlZmluZSBZUGJQck1vZGU1MjVpIDB4MDAgKi8KQEAgLTEyMyw3ICsxMjQsNyBAQAogCiAjZGVmaW5lIFNldFNDQVJUT3V0cHV0ICAgICAgICAgIDB4MDEKICNkZWZpbmUgQm9hcmRUVlR5cGUgICAgICAgICAgICAgMHgwMgotI2RlZmluZSAgRW5hYmxlUEFMTU4gICAgICAgICAgIDB4NDAKKyNkZWZpbmUgIEVuYWJsZVBBTE1OICAgICAgICAgICAgMHg0MAogLyogI2RlZmluZSBQcm9ncmFtbWluZ0NSVDIgMHgwMSAqLwogLyogI2RlZmluZSBUVlNpbXVNb2RlIDB4MDIgKi8KIC8qICNkZWZpbmUgUlBMTERJVjJYTyAweDA0ICovCkBAIC0xMzMsOSArMTM0LDkgQEAKICNkZWZpbmUgQ2hlY2tXaW5Eb3MgICAgICAgICAgICAgMHg0MAogI2RlZmluZSBTZXRKRE9TTW9kZSAgICAgICAgICAgICAweDgwCiAKLSNkZWZpbmUgUGFuZWwzMjB4NDgwICAgICAgICAgICAgICAweDA3Lypmc3RuKi8KKyNkZWZpbmUgUGFuZWwzMjB4NDgwICAgICAgICAgICAgMHgwNyAvKmZzdG4qLwogLyogW3ljY2hlbl0gMDIvMTIvMDMgTW9kaWZ5IGZvciBNdWx0aS1TeW5jLiBMQ0QgU3VwcG9ydCAqLwotI2RlZmluZSBQYW5lbFJlc0luZm8gICAgICAgICAgICAweDFGCS8qIENSMzYgUGFuZWwgVHlwZS9MQ0RSZXNJbmZvICovCisjZGVmaW5lIFBhbmVsUmVzSW5mbyAgICAgICAgICAgIDB4MUYgLyogQ1IzNiBQYW5lbCBUeXBlL0xDRFJlc0luZm8gKi8KICNkZWZpbmUgUGFuZWxSZWZJbmZvICAgICAgICAgICAgMHg2MAogI2RlZmluZSBQYW5lbDgwMHg2MDAgICAgICAgICAgICAweDAxCiAjZGVmaW5lIFBhbmVsMTAyNHg3NjggICAgICAgICAgIDB4MDIKQEAgLTIwMCw3ICsyMDEsNyBAQAogI2RlZmluZSBTb2Z0RHJhbVR5cGUgICAgICAgICAgICAweDgwCiAjZGVmaW5lIFZDTEs0MCAgICAgICAgICAgICAgICAgIDB4MDQKIAotI2RlZmluZSBWQ0xLMTYyICAgICAgICAgICAgIAkweDIxCisjZGVmaW5lIFZDTEsxNjIgICAgICAgICAgICAgICAgIDB4MjEKIAogI2RlZmluZSBMQ0RSR0IxOEJpdCAgICAgICAgICAgICAweDAxCiAjZGVmaW5lIExvYWREQUNGbGFnICAgICAgICAgICAgIDB4MTAwMApAQCAtMjI4LDExICsyMjksMTEgQEAKICNkZWZpbmUgU3RTdHJ1Y3RTaXplICAgICAgICAgICAgMHgwNgogCiAKLSNkZWZpbmUgWEdJX0NSVDJfUE9SVF8wMCAgICAgICAgMHgwMCAtIDB4MDMwCi0jZGVmaW5lIFhHSV9DUlQyX1BPUlRfMDQgICAgICAgIDB4MDQgLSAweDAzMAotI2RlZmluZSBYR0lfQ1JUMl9QT1JUXzEwICAgICAgICAweDEwIC0gMHgzMAotI2RlZmluZSBYR0lfQ1JUMl9QT1JUXzEyICAgICAgICAweDEyIC0gMHgzMAotI2RlZmluZSBYR0lfQ1JUMl9QT1JUXzE0ICAgICAgICAweDE0IC0gMHgzMAorI2RlZmluZSBYR0lfQ1JUMl9QT1JUXzAwICAgICAgICAoMHgwMCAtIDB4MDMwKQorI2RlZmluZSBYR0lfQ1JUMl9QT1JUXzA0ICAgICAgICAoMHgwNCAtIDB4MDMwKQorI2RlZmluZSBYR0lfQ1JUMl9QT1JUXzEwICAgICAgICAoMHgxMCAtIDB4MzApCisjZGVmaW5lIFhHSV9DUlQyX1BPUlRfMTIgICAgICAgICgweDEyIC0gMHgzMCkKKyNkZWZpbmUgWEdJX0NSVDJfUE9SVF8xNCAgICAgICAgKDB4MTQgLSAweDMwKQogCiAKICNkZWZpbmUgTENETm9uRXhwYW5kaW5nICAgICAgICAgMHgxMApAQCAtMjc0LDggKzI3NSw4IEBACiAjZGVmaW5lIF9QYW5lbFR5cGUwRSAgICAgICAgICAgICAweDcwCiAjZGVmaW5lIF9QYW5lbFR5cGUwRiAgICAgICAgICAgICAweDc4CiAKLQotI2RlZmluZSBQUklNQVJZX1ZHQSAgICAgICAwICAgICAvKiAxOiBYR0kgaXMgcHJpbWFyeSB2Z2EgMDpYR0kgaXMgc2Vjb25kYXJ5IHZnYSAqLworLyogMTogWEdJIGlzIHByaW1hcnkgdmdhIDA6WEdJIGlzIHNlY29uZGFyeSB2Z2EgKi8KKyNkZWZpbmUgUFJJTUFSWV9WR0EgICAgICAgICAgICAgMAogI2RlZmluZSBCSU9TSURDb2RlQWRkciAgICAgICAgICAweDIzNQogI2RlZmluZSBPRU1VdGlsSURDb2RlQWRkciAgICAgICAweDIzNwogI2RlZmluZSBWQk1vZGVJRFRhYmxlQWRkciAgICAgICAweDIzOQpAQCAtMzYyLDY1NiArMzYzLDY2MCBAQAogI2RlZmluZSBWaWRlb1NlbnNlRGF0YU9mZnNldCAgMHhDMQogI2RlZmluZSBPdXRwdXRTZWxlY3RPZmZzZXQgICAgMHhGMwogCi0jZGVmaW5lIEVDTEtfTUNMS19ESVNUQU5DRSAgMHgxNAorI2RlZmluZSBFQ0xLX01DTEtfRElTVEFOQ0UgICAgICAgIDB4MTQKICNkZWZpbmUgVkJJT1NUYWJsZVBvaW50ZXJTdGFydCAgICAweDIwMAotI2RlZmluZSBTdGFuZFRhYmxlUHRyT2Zmc2V0ICAgICAgIFZCSU9TVGFibGVQb2ludGVyU3RhcnQrMHgwMgotI2RlZmluZSBFTW9kZUlEVGFibGVQdHJPZmZzZXQgICAgIFZCSU9TVGFibGVQb2ludGVyU3RhcnQrMHgwNAotI2RlZmluZSBDUlQxVGFibGVQdHJPZmZzZXQgICAgICAgIFZCSU9TVGFibGVQb2ludGVyU3RhcnQrMHgwNgotI2RlZmluZSBTY3JlZW5PZmZzZXRQdHJPZmZzZXQgICAgIFZCSU9TVGFibGVQb2ludGVyU3RhcnQrMHgwOAotI2RlZmluZSBWQ0xLRGF0YVB0ck9mZnNldCAgICAgICAgIFZCSU9TVGFibGVQb2ludGVyU3RhcnQrMHgwQQotI2RlZmluZSBNQ0xLRGF0YVB0ck9mZnNldCAgICAgICAgIFZCSU9TVGFibGVQb2ludGVyU3RhcnQrMHgwRQotI2RlZmluZSBDUlQyUHRyRGF0YVB0ck9mZnNldCAgICAgIFZCSU9TVGFibGVQb2ludGVyU3RhcnQrMHgxMAotI2RlZmluZSBUVkFudGlGbGlja1B0ck9mZnNldCAgICAgIFZCSU9TVGFibGVQb2ludGVyU3RhcnQrMHgxMgotI2RlZmluZSBUVkRlbGF5UHRyMU9mZnNldCAgICAgICAgIFZCSU9TVGFibGVQb2ludGVyU3RhcnQrMHgxNAotI2RlZmluZSBUVlBoYXNlSW5jclB0cjFPZmZzZXQgICAgIFZCSU9TVGFibGVQb2ludGVyU3RhcnQrMHgxNgotI2RlZmluZSBUVllGaWx0ZXJQdHIxT2Zmc2V0ICAgICAgIFZCSU9TVGFibGVQb2ludGVyU3RhcnQrMHgxOAotI2RlZmluZSBMQ0REZWxheVB0cjFPZmZzZXQgICAgICAgIFZCSU9TVGFibGVQb2ludGVyU3RhcnQrMHgyMAotI2RlZmluZSBUVkVkZ2VQdHIxT2Zmc2V0ICAgICAgICAgIFZCSU9TVGFibGVQb2ludGVyU3RhcnQrMHgyNAotI2RlZmluZSBDUlQyRGVsYXkxT2Zmc2V0ICAgICAgICAgIFZCSU9TVGFibGVQb2ludGVyU3RhcnQrMHgyOAotI2RlZmluZSBMQ0REYXRhRGVzT2Zmc2V0ICAgICBWQklPU1RhYmxlUG9pbnRlclN0YXJ0LTB4MDIKLSNkZWZpbmUgTENERGF0YVB0ck9mZnNldCAgICAgICAgICBWQklPU1RhYmxlUG9pbnRlclN0YXJ0KzB4MkEKLSNkZWZpbmUgTENERGVzRGF0YVB0ck9mZnNldCAgICAgVkJJT1NUYWJsZVBvaW50ZXJTdGFydCsweDJDCi0jZGVmaW5lIExDRERhdGFMaXN0CQlWQklPU1RhYmxlUG9pbnRlclN0YXJ0KzB4MjIJLyogYWRkIGZvciBHZXRMQ0RQdHIgKi8KLSNkZWZpbmUgVFZEYXRhTGlzdAkJVkJJT1NUYWJsZVBvaW50ZXJTdGFydCsweDM2CS8qIGFkZCBmb3IgR2V0VFZQdHIgKi8KKyNkZWZpbmUgU3RhbmRUYWJsZVB0ck9mZnNldCAgICAgICAoVkJJT1NUYWJsZVBvaW50ZXJTdGFydCsweDAyKQorI2RlZmluZSBFTW9kZUlEVGFibGVQdHJPZmZzZXQgICAgIChWQklPU1RhYmxlUG9pbnRlclN0YXJ0KzB4MDQpCisjZGVmaW5lIENSVDFUYWJsZVB0ck9mZnNldCAgICAgICAgKFZCSU9TVGFibGVQb2ludGVyU3RhcnQrMHgwNikKKyNkZWZpbmUgU2NyZWVuT2Zmc2V0UHRyT2Zmc2V0ICAgICAoVkJJT1NUYWJsZVBvaW50ZXJTdGFydCsweDA4KQorI2RlZmluZSBWQ0xLRGF0YVB0ck9mZnNldCAgICAgICAgIChWQklPU1RhYmxlUG9pbnRlclN0YXJ0KzB4MEEpCisjZGVmaW5lIE1DTEtEYXRhUHRyT2Zmc2V0ICAgICAgICAgKFZCSU9TVGFibGVQb2ludGVyU3RhcnQrMHgwRSkKKyNkZWZpbmUgQ1JUMlB0ckRhdGFQdHJPZmZzZXQgICAgICAoVkJJT1NUYWJsZVBvaW50ZXJTdGFydCsweDEwKQorI2RlZmluZSBUVkFudGlGbGlja1B0ck9mZnNldCAgICAgIChWQklPU1RhYmxlUG9pbnRlclN0YXJ0KzB4MTIpCisjZGVmaW5lIFRWRGVsYXlQdHIxT2Zmc2V0ICAgICAgICAgKFZCSU9TVGFibGVQb2ludGVyU3RhcnQrMHgxNCkKKyNkZWZpbmUgVFZQaGFzZUluY3JQdHIxT2Zmc2V0ICAgICAoVkJJT1NUYWJsZVBvaW50ZXJTdGFydCsweDE2KQorI2RlZmluZSBUVllGaWx0ZXJQdHIxT2Zmc2V0ICAgICAgIChWQklPU1RhYmxlUG9pbnRlclN0YXJ0KzB4MTgpCisjZGVmaW5lIExDRERlbGF5UHRyMU9mZnNldCAgICAgICAgKFZCSU9TVGFibGVQb2ludGVyU3RhcnQrMHgyMCkKKyNkZWZpbmUgVFZFZGdlUHRyMU9mZnNldCAgICAgICAgICAoVkJJT1NUYWJsZVBvaW50ZXJTdGFydCsweDI0KQorI2RlZmluZSBDUlQyRGVsYXkxT2Zmc2V0ICAgICAgICAgIChWQklPU1RhYmxlUG9pbnRlclN0YXJ0KzB4MjgpCisjZGVmaW5lIExDRERhdGFEZXNPZmZzZXQgICAgICAgICAgKFZCSU9TVGFibGVQb2ludGVyU3RhcnQtMHgwMikKKyNkZWZpbmUgTENERGF0YVB0ck9mZnNldCAgICAgICAgICAoVkJJT1NUYWJsZVBvaW50ZXJTdGFydCsweDJBKQorI2RlZmluZSBMQ0REZXNEYXRhUHRyT2Zmc2V0ICAgICAgIChWQklPU1RhYmxlUG9pbnRlclN0YXJ0KzB4MkMpCisvKiBhZGQgTENERGF0YUxpc3QgZm9yIEdldExDRFB0ciAqLworI2RlZmluZSBMQ0REYXRhTGlzdCAgICAgICAgICAgICAgIChWQklPU1RhYmxlUG9pbnRlclN0YXJ0KzB4MjIpCisvKiBhZGQgVFZEYXRhTGlzdCBmb3IgR2V0VFZQdHIgKi8KKyNkZWZpbmUgVFZEYXRhTGlzdCAgICAgICAgICAgICAgICAoVkJJT1NUYWJsZVBvaW50ZXJTdGFydCsweDM2KQogLyogICovCiAvKiBNb2RpZnkgZnJvbSAzMTAuaW5jICovCiAvKiAgKi8KIC8qICAqLwogCiAKLSNkZWZpbmUJCVNob3dNc2dGbGFnICAgICAgICAgICAgICAgICAgMHgyMCAgICAgICAgICAgICAgIC8qIFNvZnRTZXR0aW5nICovCi0jZGVmaW5lCQlTaG93VkVTQUZsYWcgICAgICAgICAgICAgICAgIDB4MTAKLSNkZWZpbmUJCUhvdFBsdWdGdW5jdGlvbiAgICAgICAgICAgICAgMHgwOAotI2RlZmluZQkJTW9kZVNvZnRTZXR0aW5nICAgICAgICAgICAgICAweDA0Ci0jZGVmaW5lCQlUVlNvZnRTZXR0aW5nICAgICAgICAgICAgICAgIDB4MDIKLSNkZWZpbmUJCUxDRFNvZnRTZXR0aW5nICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBTaG93TXNnRmxhZyAgICAgICAgICAgICAgICAgIDB4MjAgICAgLyogU29mdFNldHRpbmcgKi8KKyNkZWZpbmUgU2hvd1ZFU0FGbGFnICAgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIEhvdFBsdWdGdW5jdGlvbiAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBNb2RlU29mdFNldHRpbmcgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgVFZTb2Z0U2V0dGluZyAgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIExDRFNvZnRTZXR0aW5nICAgICAgICAgICAgICAgMHgwMQogCi0jZGVmaW5lCQlHYXRpbmdDUlRpbkxDREEgICAgICAgICAgICAgIDB4MTAKLSNkZWZpbmUJCVNldEhpVFZPdXRwdXQgICAgICAgICAgICAgICAgMHgwOAotI2RlZmluZQkJU2V0WVBiUHJPdXRwdXQgICAgICAgICAgICAgICAweDA0Ci0jZGVmaW5lCQlCb2FyZFRWVHlwZSAgICAgICAgICAgICAgICAgIDB4MDIKLSNkZWZpbmUJCVNldFNDQVJUT3V0cHV0ICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBHYXRpbmdDUlRpbkxDREEgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgU2V0SGlUVk91dHB1dCAgICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIFNldFlQYlByT3V0cHV0ICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBCb2FyZFRWVHlwZSAgICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgU2V0U0NBUlRPdXRwdXQgICAgICAgICAgICAgICAweDAxCiAKLSNkZWZpbmUJCU1vZGVTZXR0aW5nWVBiUHIgICAgICAgICAgICAgMHgwMiAgICAgICAgICAgICAgIC8qIFRWTW9kZVNldHRpbmcsIE90aGVycyBhcyBzYW1lIGFzIENSMzAgKi8KKy8qIFRWTW9kZVNldHRpbmcsIE90aGVycyBhcyBzYW1lIGFzIENSMzAgKi8KKyNkZWZpbmUgTW9kZVNldHRpbmdZUGJQciAgICAgICAgICAgICAweDAyCiAKIC8qIFRWTW9kZVNldHRpbmcgc2FtZSBhcyBDUjM1ICovCiAKIC8qIExDRE1vZGVTZXR0aW5nIHNhbWUgYXMgQ1IzNyAqLwogCi0jZGVmaW5lCQlFbmFibGVOZXdUVkZvbnQgICAgICAgICAgICAgIDB4MTAgICAgICAgICAgICAgICAvKiBNaXNjQ2FwYWJpbGl0eSAqLworI2RlZmluZSBFbmFibGVOZXdUVkZvbnQgICAgICAgICAgICAgIDB4MTAgICAgLyogTWlzY0NhcGFiaWxpdHkgKi8KIAotI2RlZmluZQkJRW5hYmxlTENET3V0cHV0ICAgICAgICAgICAgICAweDgwICAgICAgICAgICAgICAgLyogTENEQ2ZnU2V0dGluZyAqLworI2RlZmluZSBFbmFibGVMQ0RPdXRwdXQgICAgICAgICAgICAgIDB4ODAgICAgLyogTENEQ2ZnU2V0dGluZyAqLwogCi0jZGVmaW5lCQlTb2Z0RFJBTVR5cGUgICAgICAgICAgICAgICAgIDB4ODAgICAgICAgICAgICAgICAvKiBEUkFNU2V0dGluZyAqLwotI2RlZmluZQkJU29mdERSQU1Db25maWcgICAgICAgICAgICAgICAweDQwCi0jZGVmaW5lCQlNb3NTZWxEUkFNVHlwZSAgICAgICAgICAgICAgIDB4MjAKLSNkZWZpbmUJCVNEUkFNICAgICAgICAgICAgICAgICAgICAgICAgMDAwaAotI2RlZmluZQkJU0dSQU0gICAgICAgICAgICAgICAgICAgICAgICAweDAxCi0jZGVmaW5lCQlFU0RSQU0gICAgICAgICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgU29mdERSQU1UeXBlICAgICAgICAgICAgICAgICAweDgwICAgIC8qIERSQU1TZXR0aW5nICovCisjZGVmaW5lIFNvZnREUkFNQ29uZmlnICAgICAgICAgICAgICAgMHg0MAorI2RlZmluZSBNb3NTZWxEUkFNVHlwZSAgICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgU0RSQU0gICAgICAgICAgICAgICAgICAgICAgICAwMDBoCisjZGVmaW5lIFNHUkFNICAgICAgICAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBFU0RSQU0gICAgICAgICAgICAgICAgICAgICAgIDB4MDIKIAotI2RlZmluZQkJRW5hYmxlQUdQQ2ZnU2V0dGluZyAgICAgICAgICAweDAxICAgICAgICAgICAgICAgLyogQUdQQ2ZnU2V0dGluZyAqLworI2RlZmluZSBFbmFibGVBR1BDZmdTZXR0aW5nICAgICAgICAgIDB4MDEgICAgLyogQUdQQ2ZnU2V0dGluZyAqLwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tIFNldE1vZGUgU3RhY2sgKi8KLSNkZWZpbmUJCUNSVDFMZW4gICAgICAgICAgICAgICAgICAgICAgMTUKLSNkZWZpbmUJCVZDTEtMZW4gICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZQkJRGVmVGhyZXNob2xkICAgICAgICAgICAgICAgICAweDAxMDAKLSNkZWZpbmUJCUV4dFJlZ3NTaXplICAgICAgICAgICAgICAgICAgKDU3KzgrMzcrNzArNjMrMjgrNzY4KzEpLzY0KzEKKyNkZWZpbmUgQ1JUMUxlbiAgICAgICAgICAgMTUKKyNkZWZpbmUgVkNMS0xlbiAgICAgICAgICAgNAorI2RlZmluZSBEZWZUaHJlc2hvbGQgICAgICAweDAxMDAKKyNkZWZpbmUgRXh0UmVnc1NpemUgICAgICAgKCg1Nys4KzM3KzcwKzYzKzI4Kzc2OCsxKS82NCsxKQogCi0jZGVmaW5lCQlWR0FfWEdJMzE1ICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgICAgICAvKiBWR0EgVHlwZSBJbmZvICovCi0jZGVmaW5lCQlWR0FfU05ld2lzMzE1ZSAgICAgICAgICAgICAgICAgIDB4MDAwMiAgICAgICAvKiAzMTUgc2VyaWVzICovCi0jZGVmaW5lCQlWR0FfWEdJNTUwICAgICAgICAgICAgICAgICAgIDB4MDAwNAotI2RlZmluZQkJVkdBX1hHSTY0MCAgICAgICAgICAgICAgICAgICAweDAwMDgKLSNkZWZpbmUJCVZHQV9YR0k3NDAgICAgICAgICAgICAgICAgICAgMHgwMDEwCi0jZGVmaW5lCQlWR0FfWEdJNjUwICAgICAgICAgICAgICAgICAgIDB4MDAyMAotI2RlZmluZQkJVkdBX1hHSTY1ME0gICAgICAgICAgICAgICAgICAweDAwNDAKLSNkZWZpbmUJCVZHQV9YR0k2NTEgICAgICAgICAgICAgICAgICAgMHgwMDgwCi0jZGVmaW5lCQlWR0FfWEdJMzQwICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgICAgICAvKiAzNDAgc2VyaWVzICovCi0jZGVmaW5lCQlWR0FfWEdJMzMwICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgICAgICAvKiAzMzAgc2VyaWVzICovCi0jZGVmaW5lCQlWR0FfWEdJNjYwICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgICAgICAvKiA2NjAgc2VyaWVzICovCisjZGVmaW5lIFZHQV9YR0kzMTUgICAgICAgIDB4MDAwMSAgICAgICAvKiBWR0EgVHlwZSBJbmZvICovCisjZGVmaW5lIFZHQV9TTmV3aXMzMTVlICAgIDB4MDAwMiAgICAgICAvKiAzMTUgc2VyaWVzICovCisjZGVmaW5lIFZHQV9YR0k1NTAgICAgICAgIDB4MDAwNAorI2RlZmluZSBWR0FfWEdJNjQwICAgICAgICAweDAwMDgKKyNkZWZpbmUgVkdBX1hHSTc0MCAgICAgICAgMHgwMDEwCisjZGVmaW5lIFZHQV9YR0k2NTAgICAgICAgIDB4MDAyMAorI2RlZmluZSBWR0FfWEdJNjUwTSAgICAgICAweDAwNDAKKyNkZWZpbmUgVkdBX1hHSTY1MSAgICAgICAgMHgwMDgwCisjZGVmaW5lIFZHQV9YR0kzNDAgICAgICAgIDB4MDAwMSAgICAgICAvKiAzNDAgc2VyaWVzICovCisjZGVmaW5lIFZHQV9YR0kzMzAgICAgICAgIDB4MDAwMSAgICAgICAvKiAzMzAgc2VyaWVzICovCisjZGVmaW5lIFZHQV9YR0k2NjAgICAgICAgIDB4MDAwMSAgICAgICAvKiA2NjAgc2VyaWVzICovCiAKLSNkZWZpbmUJCVZCX1hHSTMwMSAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAgICAgIC8qIFZCIFR5cGUgSW5mbyAqLwotI2RlZmluZQkJVkJfWEdJMzAxQiAgICAgICAgICAgICAgICAgICAweDAwMDIgICAgICAgLyogMzAxIHNlcmllcyAqLwotI2RlZmluZQkJVkJfWEdJMzAyQiAgICAgICAgICAgICAgICAgICAweDAwMDQKLSNkZWZpbmUJCVZCX05vTENEICAgICAgICAgICAgICAgICAgICAgMHg4MDAwCi0jZGVmaW5lCQlWQl9YR0kzMDFMViAgICAgICAgICAgICAgICAgIDB4MDAwOAotI2RlZmluZQkJVkJfWEdJMzAyTFYgICAgICAgICAgICAgICAgICAweDAwMTAKLSNkZWZpbmUJCVZCX0xWRFNfTlMgICAgICAgICAgICAgICAgICAgMHgwMDAxICAgICAgIC8qIDNyZCBwYXJ0eSBjaGlwICovCi0jZGVmaW5lCQlWQl9DSDcwMTcgICAgICAgICAgICAgICAgICAgIDB4MDAwMgotI2RlZmluZSAgICAgICAgIFZCX0NINzAwNyAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAgICAgIC8qIFtCaWxseV0gMDcvMDUvMDMgKi8KKyNkZWZpbmUgVkJfWEdJMzAxICAgICAgICAgMHgwMDAxICAgICAgIC8qIFZCIFR5cGUgSW5mbyAqLworI2RlZmluZSBWQl9YR0kzMDFCICAgICAgICAweDAwMDIgICAgICAgLyogMzAxIHNlcmllcyAqLworI2RlZmluZSBWQl9YR0kzMDJCICAgICAgICAweDAwMDQKKyNkZWZpbmUgVkJfTm9MQ0QgICAgICAgICAgMHg4MDAwCisjZGVmaW5lIFZCX1hHSTMwMUxWICAgICAgIDB4MDAwOAorI2RlZmluZSBWQl9YR0kzMDJMViAgICAgICAweDAwMTAKKyNkZWZpbmUgVkJfTFZEU19OUyAgICAgICAgMHgwMDAxICAgICAgIC8qIDNyZCBwYXJ0eSBjaGlwICovCisjZGVmaW5lIFZCX0NINzAxNyAgICAgICAgIDB4MDAwMgorI2RlZmluZSBWQl9DSDcwMDcgICAgICAgICAweDAwODAgICAgICAgLyogW0JpbGx5XSAwNy8wNS8wMyAqLwogLyogI2RlZmluZSBWQl9MVkRTX1NJIDB4MDAwNCAqLwogCi0jZGVmaW5lCQlNb2RlSW5mb0ZsYWcgICAgICAgICAgICAgICAgIDB4MDAwNwotI2RlZmluZQkJSXNUZXh0TW9kZSAgICAgICAgICAgICAgICAgICAweDAwMDcKLSNkZWZpbmUJCU1vZGVUZXh0ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwCi0jZGVmaW5lCQlNb2RlQ0dBICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQotI2RlZmluZQkJTW9kZUVHQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgICAgICAgLyogMTYgY29sb3JzIG1vZGUgKi8KLSNkZWZpbmUJCU1vZGVWR0EgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzICAgICAgIC8qIDI1NiBjb2xvcnMgbW9kZSAqLwotI2RlZmluZQkJTW9kZTE1QnBwICAgICAgICAgICAgICAgICAgICAweDAwMDQgICAgICAgLyogMTUgQnBwIENvbG9yIE1vZGUgKi8KLSNkZWZpbmUJCU1vZGUxNkJwcCAgICAgICAgICAgICAgICAgICAgMHgwMDA1ICAgICAgIC8qIDE2IEJwcCBDb2xvciBNb2RlICovCi0jZGVmaW5lCQlNb2RlMjRCcHAgICAgICAgICAgICAgICAgICAgIDB4MDAwNiAgICAgICAvKiAyNCBCcHAgQ29sb3IgTW9kZSAqLwotI2RlZmluZQkJTW9kZTMyQnBwICAgICAgICAgICAgICAgICAgICAweDAwMDcgICAgICAgLyogMzIgQnBwIENvbG9yIE1vZGUgKi8KKyNkZWZpbmUgTW9kZUluZm9GbGFnICAgICAgMHgwMDA3CisjZGVmaW5lIElzVGV4dE1vZGUgICAgICAgIDB4MDAwNworI2RlZmluZSBNb2RlVGV4dCAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgTW9kZUNHQSAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIE1vZGVFR0EgICAgICAgICAgIDB4MDAwMiAgICAvKiAxNiBjb2xvcnMgbW9kZSAqLworI2RlZmluZSBNb2RlVkdBICAgICAgICAgICAweDAwMDMgICAgLyogMjU2IGNvbG9ycyBtb2RlICovCisjZGVmaW5lIE1vZGUxNUJwcCAgICAgICAgIDB4MDAwNCAgICAvKiAxNSBCcHAgQ29sb3IgTW9kZSAqLworI2RlZmluZSBNb2RlMTZCcHAgICAgICAgICAweDAwMDUgICAgLyogMTYgQnBwIENvbG9yIE1vZGUgKi8KKyNkZWZpbmUgTW9kZTI0QnBwICAgICAgICAgMHgwMDA2ICAgIC8qIDI0IEJwcCBDb2xvciBNb2RlICovCisjZGVmaW5lIE1vZGUzMkJwcCAgICAgICAgIDB4MDAwNyAgICAvKiAzMiBCcHAgQ29sb3IgTW9kZSAqLwogCi0jZGVmaW5lCQlEQUNJbmZvRmxhZyAgICAgICAgICAgICAgICAgIDB4MDAxOAotI2RlZmluZQkJTU9OT0RBQyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAKLSNkZWZpbmUJCUNHQURBQyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4Ci0jZGVmaW5lCQlFR0FEQUMgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAotI2RlZmluZQkJVkdBREFDICAgICAgICAgICAgICAgICAgICAgICAweDAwMTgKKyNkZWZpbmUgREFDSW5mb0ZsYWcgICAgICAgMHgwMDE4CisjZGVmaW5lIE1PTk9EQUMgICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBDR0FEQUMgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgRUdBREFDICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFZHQURBQyAgICAgICAgICAgIDB4MDAxOAogCi0jZGVmaW5lCQlNZW1vcnlJbmZvRmxhZyAgICAgICAgICAgICAgIDB4MDFlMAotI2RlZmluZQkJTWVtb3J5U2l6ZVNoaWZ0ICAgICAgICAgICAgICA1Ci0jZGVmaW5lCQlOZWVkMU1TaXplICAgICAgICAgICAgICAgICAgIDB4MDAwMAotI2RlZmluZQkJTmVlZDJNU2l6ZSAgICAgICAgICAgICAgICAgICAweDAwMjAKLSNkZWZpbmUJCU5lZWQ0TVNpemUgICAgICAgICAgICAgICAgICAgMHgwMDYwCi0jZGVmaW5lCQlOZWVkOE1TaXplICAgICAgICAgICAgICAgICAgIDB4MDBlMAotI2RlZmluZQkJTmVlZDE2TVNpemUgICAgICAgICAgICAgICAgICAweDAxZTAKKyNkZWZpbmUgTWVtb3J5SW5mb0ZsYWcgICAgMHgwMWUwCisjZGVmaW5lIE1lbW9yeVNpemVTaGlmdCAgIDUKKyNkZWZpbmUgTmVlZDFNU2l6ZSAgICAgICAgMHgwMDAwCisjZGVmaW5lIE5lZWQyTVNpemUgICAgICAgIDB4MDAyMAorI2RlZmluZSBOZWVkNE1TaXplICAgICAgICAweDAwNjAKKyNkZWZpbmUgTmVlZDhNU2l6ZSAgICAgICAgMHgwMGUwCisjZGVmaW5lIE5lZWQxNk1TaXplICAgICAgIDB4MDFlMAogCi0jZGVmaW5lCQlDaGFyeDhEb3QgICAgICAgICAgICAgICAgICAgIDB4MDIwMAotI2RlZmluZQkJTGluZUNvbXBhcmVPZmYgICAgICAgICAgICAgICAweDA0MDAKLSNkZWZpbmUJCUNSVDJNb2RlICAgICAgICAgICAgICAgICAgICAgMHgwODAwCi0jZGVmaW5lCQlIYWxmRENMSyAgICAgICAgICAgICAgICAgICAgIDB4MTAwMAotI2RlZmluZQkJTm9TdXBwb3J0U2ltdVRWICAgICAgICAgICAgICAweDIwMDAKLSNkZWZpbmUJCURvdWJsZVNjYW5Nb2RlICAgICAgICAgICAgICAgMHg4MDAwCisjZGVmaW5lIENoYXJ4OERvdCAgICAgICAgIDB4MDIwMAorI2RlZmluZSBMaW5lQ29tcGFyZU9mZiAgICAweDA0MDAKKyNkZWZpbmUgQ1JUMk1vZGUgICAgICAgICAgMHgwODAwCisjZGVmaW5lIEhhbGZEQ0xLICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBOb1N1cHBvcnRTaW11VFYgICAweDIwMDAKKyNkZWZpbmUgRG91YmxlU2Nhbk1vZGUgICAgMHg4MDAwCiAKIC8qIC0tLS0tLS0tLS0tLS0tIEV4dF9JbmZvRmxhZyAqLwotI2RlZmluZQkJU3VwcG9ydE1vZGVJbmZvICAgICAgICAgICAgICAweDAwMDcKLSNkZWZpbmUJCVN1cHBvcnQyNTYgICAgICAgICAgICAgICAgICAgMHgwMDAzCi0jZGVmaW5lCQlTdXBwb3J0MTVCcHAgICAgICAgICAgICAgICAgIDB4MDAwNAotI2RlZmluZQkJU3VwcG9ydDE2QnBwICAgICAgICAgICAgICAgICAweDAwMDUKLSNkZWZpbmUJCVN1cHBvcnQyNEJwcCAgICAgICAgICAgICAgICAgMHgwMDA2Ci0jZGVmaW5lCQlTdXBwb3J0MzJCcHAgICAgICAgICAgICAgICAgIDB4MDAwNworI2RlZmluZSBTdXBwb3J0TW9kZUluZm8gICAgIDB4MDAwNworI2RlZmluZSBTdXBwb3J0MjU2ICAgICAgICAgIDB4MDAwMworI2RlZmluZSBTdXBwb3J0MTVCcHAgICAgICAgIDB4MDAwNAorI2RlZmluZSBTdXBwb3J0MTZCcHAgICAgICAgIDB4MDAwNQorI2RlZmluZSBTdXBwb3J0MjRCcHAgICAgICAgIDB4MDAwNgorI2RlZmluZSBTdXBwb3J0MzJCcHAgICAgICAgIDB4MDAwNwogCi0jZGVmaW5lCQlTdXBwb3J0QWxsQ1JUMiAgICAgICAgICAgICAgIDB4MDA3OAotI2RlZmluZQkJU3VwcG9ydFRWICAgICAgICAgICAgICAgICAgICAweDAwMDgKLSNkZWZpbmUJCVN1cHBvcnRIaVZpc2lvblRWICAgICAgICAgICAgMHgwMDEwCi0jZGVmaW5lCQlTdXBwb3J0TENEICAgICAgICAgICAgICAgICAgIDB4MDAyMAotI2RlZmluZQkJU3VwcG9ydFJBTURBQzIgICAgICAgICAgICAgICAweDAwNDAKLSNkZWZpbmUJCU5vU3VwcG9ydFRWICAgICAgICAgICAgICAgICAgMHgwMDcwCi0jZGVmaW5lCQlOb1N1cHBvcnRIaVZpc2lvblRWICAgICAgICAgIDB4MDA2MAotI2RlZmluZQkJTm9TdXBwb3J0TENEICAgICAgICAgICAgICAgICAweDAwNTgKLSNkZWZpbmUJCVN1cHBvcnRUVjEwMjQgICAgICAgICAgICAgICAgMHgwODAwICAgICAgIC8qIDMwMWJ0ZXN0ICovCi0jZGVmaW5lCQlTdXBwb3J0WVBiUHIgICAgICAgICAgICAgICAgIDB4MTAwMCAgICAgICAvKiAzMDFsdiAqLwotI2RlZmluZQkJSW50ZXJsYWNlTW9kZSAgICAgICAgICAgICAgICAweDAwODAKLSNkZWZpbmUJCVN5bmNQUCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwCi0jZGVmaW5lCQlTeW5jUE4gICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMAotI2RlZmluZQkJU3luY05QICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAKLSNkZWZpbmUJCVN5bmNOTiAgICAgICAgICAgICAgICAgICAgICAgMHhDMDAwCisjZGVmaW5lIFN1cHBvcnRBbGxDUlQyICAgICAgMHgwMDc4CisjZGVmaW5lIFN1cHBvcnRUViAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFN1cHBvcnRIaVZpc2lvblRWICAgMHgwMDEwCisjZGVmaW5lIFN1cHBvcnRMQ0QgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFN1cHBvcnRSQU1EQUMyICAgICAgMHgwMDQwCisjZGVmaW5lIE5vU3VwcG9ydFRWICAgICAgICAgMHgwMDcwCisjZGVmaW5lIE5vU3VwcG9ydEhpVmlzaW9uVFYgMHgwMDYwCisjZGVmaW5lIE5vU3VwcG9ydExDRCAgICAgICAgMHgwMDU4CisjZGVmaW5lIFN1cHBvcnRUVjEwMjQgICAgICAgMHgwODAwIC8qIDMwMWJ0ZXN0ICovCisjZGVmaW5lIFN1cHBvcnRZUGJQciAgICAgICAgMHgxMDAwIC8qIDMwMWx2ICovCisjZGVmaW5lIEludGVybGFjZU1vZGUgICAgICAgMHgwMDgwCisjZGVmaW5lIFN5bmNQUCAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIFN5bmNQTiAgICAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIFN5bmNOUCAgICAgICAgICAgICAgMHg4MDAwCisjZGVmaW5lIFN5bmNOTiAgICAgICAgICAgICAgMHhDMDAwCiAKIC8qIC0tLS0tLS0tLS0tLS0tIFNldE1vZGUgU3RhY2svU2NyYXRjaCAqLwotI2RlZmluZQkJU2V0U2ltdVNjYW5Nb2RlICAgICAgICAgICAgICAweDAwMDEgICAgICAgLyogVkJJbmZvL0NSMzAgJiBDUjMxICovCi0jZGVmaW5lCQlTd2l0Y2hUb0NSVDIgICAgICAgICAgICAgICAgIDB4MDAwMgotI2RlZmluZQkJU2V0Q1JUMlRvVFYxICAgICAgICAgICAgICAgICAweDAwOUMKLSNkZWZpbmUJCVNldENSVDJUb1RWICAgICAgICAgICAgICAgICAgMHgwODlDCi0jZGVmaW5lCQlTZXRDUlQyVG9BVklERU8gICAgICAgICAgICAgIDB4MDAwNAotI2RlZmluZQkJU2V0Q1JUMlRvU1ZJREVPICAgICAgICAgICAgICAweDAwMDgKLSNkZWZpbmUJCVNldENSVDJUb1NDQVJUICAgICAgICAgICAgICAgMHgwMDEwCi0jZGVmaW5lCQlTZXRDUlQyVG9MQ0QgICAgICAgICAgICAgICAgIDB4MDAyMAotI2RlZmluZQkJU2V0Q1JUMlRvUkFNREFDICAgICAgICAgICAgICAweDAwNDAKLSNkZWZpbmUJCVNldENSVDJUb0hpVmlzaW9uVFYgICAgICAgICAgMHgwMDgwCi0jZGVmaW5lCQlTZXRDUlQyVG9MQ0RBICAgICAgICAgICAgICAgIDB4MDEwMAotI2RlZmluZQkJU2V0SW5TbGF2ZU1vZGUgICAgICAgICAgICAgICAweDAyMDAKLSNkZWZpbmUJCVNldE5vdFNpbXVNb2RlICAgICAgICAgICAgICAgMHgwNDAwCi0jZGVmaW5lCQlIS0V2ZW50TW9kZSAgICAgICAgICAgICAgICAgIDB4MDgwMAotI2RlZmluZQkJU2V0Q1JUMlRvWVBiUHIgICAgICAgICAgICAgICAweDA4MDAKLSNkZWZpbmUJCUxvYWREQUNGbGFnICAgICAgICAgICAgICAgICAgMHgxMDAwCi0jZGVmaW5lCQlEaXNhYmxlQ1JUMkRpc3BsYXkgICAgICAgICAgIDB4MjAwMAotI2RlZmluZQkJRHJpdmVyTW9kZSAgICAgICAgICAgICAgICAgICAweDQwMDAKLSNkZWZpbmUJCVNldENSVDJUb0R1YWxFZGdlICAgICAgICAgICAgMHg4MDAwCi0jZGVmaW5lCQlIb3RLZXlTd2l0Y2ggICAgICAgICAgICAgICAgIDB4ODAwMAorI2RlZmluZSBTZXRTaW11U2Nhbk1vZGUgICAgIDB4MDAwMSAgICAvKiBWQkluZm8vQ1IzMCAmIENSMzEgKi8KKyNkZWZpbmUgU3dpdGNoVG9DUlQyICAgICAgICAweDAwMDIKKyNkZWZpbmUgU2V0Q1JUMlRvVFYxICAgICAgICAweDAwOUMKKyNkZWZpbmUgU2V0Q1JUMlRvVFYgICAgICAgICAweDA4OUMKKyNkZWZpbmUgU2V0Q1JUMlRvQVZJREVPICAgICAweDAwMDQKKyNkZWZpbmUgU2V0Q1JUMlRvU1ZJREVPICAgICAweDAwMDgKKyNkZWZpbmUgU2V0Q1JUMlRvU0NBUlQgICAgICAweDAwMTAKKyNkZWZpbmUgU2V0Q1JUMlRvTENEICAgICAgICAweDAwMjAKKyNkZWZpbmUgU2V0Q1JUMlRvUkFNREFDICAgICAweDAwNDAKKyNkZWZpbmUgU2V0Q1JUMlRvSGlWaXNpb25UViAweDAwODAKKyNkZWZpbmUgU2V0Q1JUMlRvTENEQSAgICAgICAweDAxMDAKKyNkZWZpbmUgU2V0SW5TbGF2ZU1vZGUgICAgICAweDAyMDAKKyNkZWZpbmUgU2V0Tm90U2ltdU1vZGUgICAgICAweDA0MDAKKyNkZWZpbmUgSEtFdmVudE1vZGUgICAgICAgICAweDA4MDAKKyNkZWZpbmUgU2V0Q1JUMlRvWVBiUHIgICAgICAweDA4MDAKKyNkZWZpbmUgTG9hZERBQ0ZsYWcgICAgICAgICAweDEwMDAKKyNkZWZpbmUgRGlzYWJsZUNSVDJEaXNwbGF5ICAweDIwMDAKKyNkZWZpbmUgRHJpdmVyTW9kZSAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgU2V0Q1JUMlRvRHVhbEVkZ2UgICAweDgwMDAKKyNkZWZpbmUgSG90S2V5U3dpdGNoICAgICAgICAweDgwMDAKIAotI2RlZmluZQkJUHJvZ3JhbW1pbmdDUlQyICAgICAgICAgICAgICAweDAwMDEgICAgICAgLyogU2V0IEZsYWcgKi8KLSNkZWZpbmUJCUVuYWJsZVZDTW9kZSAgICAgICAgICAgICAgICAgMHgwMDAyCi0jZGVmaW5lCQlTZXRIS0V2ZW50TW9kZSAgICAgICAgICAgICAgIDB4MDAwNAotI2RlZmluZQkJUmVzZXJ2ZVRWT3B0aW9uICAgICAgICAgICAgICAweDAwMDgKLSNkZWZpbmUJCURpc2FibGVSZWxvY2F0ZUlPICAgICAgICAgICAgMHgwMDEwCi0jZGVmaW5lCQlXaW45eERPU01vZGUgICAgICAgICAgICAgICAgIDB4MDAyMAotI2RlZmluZQkJSkRPU01vZGUgICAgICAgICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgUHJvZ3JhbW1pbmdDUlQyICAgICAweDAwMDEgICAgICAgLyogU2V0IEZsYWcgKi8KKyNkZWZpbmUgRW5hYmxlVkNNb2RlICAgICAgICAweDAwMDIKKyNkZWZpbmUgU2V0SEtFdmVudE1vZGUgICAgICAweDAwMDQKKyNkZWZpbmUgUmVzZXJ2ZVRWT3B0aW9uICAgICAweDAwMDgKKyNkZWZpbmUgRGlzYWJsZVJlbG9jYXRlSU8gICAweDAwMTAKKyNkZWZpbmUgV2luOXhET1NNb2RlICAgICAgICAweDAwMjAKKyNkZWZpbmUgSkRPU01vZGUgICAgICAgICAgICAweDAwNDAKIC8qICNkZWZpbmUgU2V0V2luOXhmb3JKYXAgMHgwMDgwIC8vIG5vdCB1c2VkIG5vdyAqLwogLyogI2RlZmluZSBTZXRXaW45eGZvcktvcmVhIDB4MDEwMCAvLyBub3QgdXNlZCBub3cgKi8KLSNkZWZpbmUJCUdhdGluZ0NSVCAgICAgICAgICAgICAgICAgICAgMHgwODAwCi0jZGVmaW5lCQlEaXNhYmxlQ2hCICAgICAgICAgICAgICAgICAgIDB4MTAwMAotI2RlZmluZQkJRW5hYmxlQ2hCICAgICAgICAgICAgICAgICAgICAweDIwMDAKLSNkZWZpbmUJCURpc2FibGVDaEEgICAgICAgICAgICAgICAgICAgMHg0MDAwCi0jZGVmaW5lCQlFbmFibGVDaEEgICAgICAgICAgICAgICAgICAgIDB4ODAwMAorI2RlZmluZSBHYXRpbmdDUlQgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBEaXNhYmxlQ2hCICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBFbmFibGVDaEIgICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBEaXNhYmxlQ2hBICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBFbmFibGVDaEEgICAgICAgICAgIDB4ODAwMAogCi0jZGVmaW5lCQlTZXROVFNDVFYgICAgICAgICAgICAgICAgICAgIDB4MDAwMCAgICAgICAvKiBUViBJbmZvICovCi0jZGVmaW5lCQlTZXRQQUxUViAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQotI2RlZmluZQkJU2V0TlRTQ0ogICAgICAgICAgICAgICAgICAgICAweDAwMDIKLSNkZWZpbmUJCVNldFBBTE1UViAgICAgICAgICAgICAgICAgICAgMHgwMDA0Ci0jZGVmaW5lCQlTZXRQQUxOVFYgICAgICAgICAgICAgICAgICAgIDB4MDAwOAotI2RlZmluZQkJU2V0Q0hUVlVuZGVyU2NhbiAgICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgU2V0TlRTQ1RWICAgICAgICAgICAweDAwMDAgLyogVFYgSW5mbyAqLworI2RlZmluZSBTZXRQQUxUViAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBTZXROVFNDSiAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBTZXRQQUxNVFYgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBTZXRQQUxOVFYgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBTZXRDSFRWVW5kZXJTY2FuICAgIDB4MDAwMAogLyogI2RlZmluZSBTZXRDSFRWT3ZlclNjYW4gMHgwMDEwICovCi0jZGVmaW5lCQlTZXRZUGJQck1vZGU1MjVpICAgICAgICAgICAgIDB4MDAyMAotI2RlZmluZQkJU2V0WVBiUHJNb2RlNTI1cCAgICAgICAgICAgICAweDAwNDAKLSNkZWZpbmUJCVNldFlQYlByTW9kZTc1MHAgICAgICAgICAgICAgMHgwMDgwCi0jZGVmaW5lCQlTZXRZUGJQck1vZGUxMDgwaSAgICAgICAgICAgIDB4MDEwMAotI2RlZmluZQkJU2V0VFZTdGRNb2RlICAgICAgICAgICAgICAgICAweDAyMDAKLSNkZWZpbmUJCVNldFRWTG93UmVzb2x1dGlvbiAgICAgICAgICAgMHgwNDAwCi0jZGVmaW5lCQlTZXRUVlNpbXVNb2RlICAgICAgICAgICAgICAgIDB4MDgwMAotI2RlZmluZQkJVFZTaW11TW9kZSAgICAgICAgICAgICAgICAgICAweDA4MDAKLSNkZWZpbmUJCVJQTExESVYyWE8gICAgICAgICAgICAgICAgICAgMHgxMDAwCi0jZGVmaW5lCQlOVFNDMTAyNHg3NjggICAgICAgICAgICAgICAgIDB4MjAwMAotI2RlZmluZQkJU2V0VFZMb2NrTW9kZSAgICAgICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgU2V0WVBiUHJNb2RlNTI1aSAgICAgMHgwMDIwCisjZGVmaW5lIFNldFlQYlByTW9kZTUyNXAgICAgIDB4MDA0MAorI2RlZmluZSBTZXRZUGJQck1vZGU3NTBwICAgICAweDAwODAKKyNkZWZpbmUgU2V0WVBiUHJNb2RlMTA4MGkgICAgMHgwMTAwCisjZGVmaW5lIFNldFRWU3RkTW9kZSAgICAgICAgIDB4MDIwMAorI2RlZmluZSBTZXRUVkxvd1Jlc29sdXRpb24gICAweDA0MDAKKyNkZWZpbmUgU2V0VFZTaW11TW9kZSAgICAgICAgMHgwODAwCisjZGVmaW5lIFRWU2ltdU1vZGUgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBSUExMRElWMlhPICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgTlRTQzEwMjR4NzY4ICAgICAgICAgMHgyMDAwCisjZGVmaW5lIFNldFRWTG9ja01vZGUgICAgICAgIDB4NDAwMAogCi0jZGVmaW5lCQlMQ0RWRVNBVGltaW5nICAgICAgICAgICAgICAgIDB4MDAwMSAgICAgICAvKiBMQ0QgSW5mby9DUjM3ICovCi0jZGVmaW5lCQlFbmFibGVMVkRTRERBICAgICAgICAgICAgICAgIDB4MDAwMgotI2RlZmluZQkJRW5hYmxlU2NhbGluZ0xDRCAgICAgICAgICAgICAweDAwMDgKLSNkZWZpbmUJCVNldFBXREVuYWJsZSAgICAgICAgICAgICAgICAgMHgwMDA0Ci0jZGVmaW5lCQlTZXRMQ0R0b05vbkV4cGFuZGluZyAgICAgICAgIDB4MDAxMAotI2RlZmluZQkJU2V0TENEUG9sYXJpdHkgICAgICAgICAgICAgICAweDAwZTAKLSNkZWZpbmUJCVNldExDRER1YWxMaW5rICAgICAgICAgICAgICAgMHgwMTAwCi0jZGVmaW5lCQlTZXRMQ0RMb3dSZXNvbHV0aW9uICAgICAgICAgIDB4MDIwMAotI2RlZmluZQkJU2V0TENEU3RkTW9kZSAgICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgTENEVkVTQVRpbWluZyAgICAgICAgMHgwMDAxIC8qIExDRCBJbmZvL0NSMzcgKi8KKyNkZWZpbmUgRW5hYmxlTFZEU0REQSAgICAgICAgMHgwMDAyCisjZGVmaW5lIEVuYWJsZVNjYWxpbmdMQ0QgICAgIDB4MDAwOAorI2RlZmluZSBTZXRQV0RFbmFibGUgICAgICAgICAweDAwMDQKKyNkZWZpbmUgU2V0TENEdG9Ob25FeHBhbmRpbmcgMHgwMDEwCisjZGVmaW5lIFNldExDRFBvbGFyaXR5ICAgICAgIDB4MDBlMAorI2RlZmluZSBTZXRMQ0REdWFsTGluayAgICAgICAweDAxMDAKKyNkZWZpbmUgU2V0TENETG93UmVzb2x1dGlvbiAgMHgwMjAwCisjZGVmaW5lIFNldExDRFN0ZE1vZGUgICAgICAgIDB4MDQwMAogCi0jZGVmaW5lCQlEZWZhdWx0TENEQ2FwICAgICAgICAgICAgICAgIDB4ODBlYSAgICAgICAvKiBMQ0QgQ2FwYWJpbGl0eSBzaGFtcG9vICovCi0jZGVmaW5lCQlSTFZEU0RITDAwICAgICAgICAgICAgICAgICAgIDB4MDAwMAotI2RlZmluZQkJUkxWRFNESEwwMSAgICAgICAgICAgICAgICAgICAweDAwMDEKLSNkZWZpbmUJCVJMVkRTREhMMTAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAgICAgIC8qIGRlZmF1bHQgKi8KLSNkZWZpbmUJCVJMVkRTREhMMTEgICAgICAgICAgICAgICAgICAgMHgwMDAzCi0jZGVmaW5lCQlFbmFibGVMQ0QyNGJwcCAgICAgICAgICAgICAgIDB4MDAwNCAgICAgICAvKiBkZWZhdWx0ICovCi0jZGVmaW5lCQlEaXNhYmxlTENEMjRicHAgICAgICAgICAgICAgIDB4MDAwMAotI2RlZmluZQkJUkxWRFNDbGtTRlQwICAgICAgICAgICAgICAgICAweDAwMDAKLSNkZWZpbmUJCVJMVkRTQ2xrU0ZUMSAgICAgICAgICAgICAgICAgMHgwMDA4ICAgICAgIC8qIGRlZmF1bHQgKi8KLSNkZWZpbmUJCUVuYWJsZUxWRFNEQ0JhbCAgICAgICAgICAgICAgMHgwMDEwCi0jZGVmaW5lCQlEaXNhYmxlTFZEU0RDQmFsICAgICAgICAgICAgIDB4MDAwMCAgICAgICAvKiBkZWZhdWx0ICovCi0jZGVmaW5lCQlTaW5nbGVQb2xhcml0eSAgICAgICAgICAgICAgIDB4MDAyMCAgICAgICAvKiBkZWZhdWx0ICovCi0jZGVmaW5lCQlNdWx0aVBvbGFyaXR5ICAgICAgICAgICAgICAgIDB4MDAwMAotI2RlZmluZQkJTENEUG9sYXJpdHkgICAgICAgICAgICAgICAgICAweDAwYzAgICAgICAgLyogZGVmYXVsdDogU3luY05OICovCi0jZGVmaW5lCQlMQ0RTaW5nbGVMaW5rICAgICAgICAgICAgICAgIDB4MDAwMCAgICAgICAvKiBkZWZhdWx0ICovCi0jZGVmaW5lCQlMQ0REdWFsTGluayAgICAgICAgICAgICAgICAgIDB4MDEwMAotI2RlZmluZQkJRW5hYmxlU3BlY3RydW0gICAgICAgICAgICAgICAweDAyMDAKLSNkZWZpbmUJCURpc2FibGVTcGVjdHJ1bSAgICAgICAgICAgICAgMHgwMDAwICAgICAgIC8qIGRlZmF1bHQgKi8KLSNkZWZpbmUJCVBXREVuYWJsZSAgICAgICAgICAgICAgICAgICAgMHgwNDAwCi0jZGVmaW5lCQlQV0REaXNhYmxlICAgICAgICAgICAgICAgICAgIDB4MDAwMCAgICAgICAvKiBkZWZhdWx0ICovCi0jZGVmaW5lCQlQV01FbmFibGUgICAgICAgICAgICAgICAgICAgIDB4MDgwMAotI2RlZmluZQkJUFdNRGlzYWJsZSAgICAgICAgICAgICAgICAgICAweDAwMDAgICAgICAgLyogZGVmYXVsdCAqLwotI2RlZmluZQkJRW5hYmxlVkJDTEtEUlZMT1cgICAgICAgICAgICAweDQwMDAKLSNkZWZpbmUJCUVuYWJsZVZCQ0xLRFJWSGlnaCAgICAgICAgICAgMHgwMDAwICAgICAgIC8qIGRlZmF1bHQgKi8KLSNkZWZpbmUJCUVuYWJsZVBMTFNQTE9XICAgICAgICAgICAgICAgMHg4MDAwCi0jZGVmaW5lCQlFbmFibGVQTExTUEhpZ2ggICAgICAgICAgICAgIDB4MDAwMCAgICAgICAvKiBkZWZhdWx0ICovCisvKiBMQ0QgQ2FwYWJpbGl0eSBzaGFtcG9vICovCisjZGVmaW5lIERlZmF1bHRMQ0RDYXAgICAgICAgIDB4ODBlYQorI2RlZmluZSBSTFZEU0RITDAwICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgUkxWRFNESEwwMSAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIFJMVkRTREhMMTAgICAgICAgICAgIDB4MDAwMiAvKiBkZWZhdWx0ICovCisjZGVmaW5lIFJMVkRTREhMMTEgICAgICAgICAgIDB4MDAwMworI2RlZmluZSBFbmFibGVMQ0QyNGJwcCAgICAgICAweDAwMDQgLyogZGVmYXVsdCAqLworI2RlZmluZSBEaXNhYmxlTENEMjRicHAgICAgICAweDAwMDAKKyNkZWZpbmUgUkxWRFNDbGtTRlQwICAgICAgICAgMHgwMDAwCisjZGVmaW5lIFJMVkRTQ2xrU0ZUMSAgICAgICAgIDB4MDAwOCAvKiBkZWZhdWx0ICovCisjZGVmaW5lIEVuYWJsZUxWRFNEQ0JhbCAgICAgIDB4MDAxMAorI2RlZmluZSBEaXNhYmxlTFZEU0RDQmFsICAgICAweDAwMDAgLyogZGVmYXVsdCAqLworI2RlZmluZSBTaW5nbGVQb2xhcml0eSAgICAgICAweDAwMjAgLyogZGVmYXVsdCAqLworI2RlZmluZSBNdWx0aVBvbGFyaXR5ICAgICAgICAweDAwMDAKKyNkZWZpbmUgTENEUG9sYXJpdHkgICAgICAgICAgMHgwMGMwIC8qIGRlZmF1bHQ6IFN5bmNOTiAqLworI2RlZmluZSBMQ0RTaW5nbGVMaW5rICAgICAgICAweDAwMDAgLyogZGVmYXVsdCAqLworI2RlZmluZSBMQ0REdWFsTGluayAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgRW5hYmxlU3BlY3RydW0gICAgICAgMHgwMjAwCisjZGVmaW5lIERpc2FibGVTcGVjdHJ1bSAgICAgIDB4MDAwMCAvKiBkZWZhdWx0ICovCisjZGVmaW5lIFBXREVuYWJsZSAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBQV0REaXNhYmxlICAgICAgICAgICAweDAwMDAgLyogZGVmYXVsdCAqLworI2RlZmluZSBQV01FbmFibGUgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgUFdNRGlzYWJsZSAgICAgICAgICAgMHgwMDAwIC8qIGRlZmF1bHQgKi8KKyNkZWZpbmUgRW5hYmxlVkJDTEtEUlZMT1cgICAgMHg0MDAwCisjZGVmaW5lIEVuYWJsZVZCQ0xLRFJWSGlnaCAgIDB4MDAwMCAvKiBkZWZhdWx0ICovCisjZGVmaW5lIEVuYWJsZVBMTFNQTE9XICAgICAgIDB4ODAwMAorI2RlZmluZSBFbmFibGVQTExTUEhpZ2ggICAgICAweDAwMDAgLyogZGVmYXVsdCAqLwogCi0jZGVmaW5lCQlMQ0RCVG9BICAgICAgICAgICAgICAgICAgICAgIDB4MjAgICAgICAgICAgICAgICAvKiBMQ0QgU2V0RmxhZyAqLwotI2RlZmluZQkJU3RMQ0RCVG9BICAgICAgICAgICAgICAgICAgICAweDQwCi0jZGVmaW5lCQlMb2NrTENEQlRvQSAgICAgICAgICAgICAgICAgIDB4ODAKLSNkZWZpbmUgCUxDRFRvRnVsbCAgICAgICAgICAgICAJICAgICAweDEwCi0jZGVmaW5lCQlBVklERU9TZW5zZSAgICAgICAgICAgICAgICAgIDB4MDEgICAgICAgICAgICAgICAvKiBDUjMyICovCi0jZGVmaW5lCQlTVklERU9TZW5zZSAgICAgICAgICAgICAgICAgIDB4MDIKLSNkZWZpbmUJCVNDQVJUU2Vuc2UgICAgICAgICAgICAgICAgICAgMHgwNAotI2RlZmluZQkJTENEU2Vuc2UgICAgICAgICAgICAgICAgICAgICAweDA4Ci0jZGVmaW5lCQlNb25pdG9yMlNlbnNlICAgICAgICAgICAgICAgIDB4MTAKLSNkZWZpbmUJCU1vbml0b3IxU2Vuc2UgICAgICAgICAgICAgICAgMHgyMAotI2RlZmluZQkJSGlUVlNlbnNlICAgICAgICAgICAgICAgICAgICAweDQwCisjZGVmaW5lIExDREJUb0EgICAgICAgICAgICAgIDB4MjAgICAvKiBMQ0QgU2V0RmxhZyAqLworI2RlZmluZSBTdExDREJUb0EgICAgICAgICAgICAweDQwCisjZGVmaW5lIExvY2tMQ0RCVG9BICAgICAgICAgIDB4ODAKKyNkZWZpbmUgICBMQ0RUb0Z1bGwgICAgICAgICAgMHgxMAorI2RlZmluZSBBVklERU9TZW5zZSAgICAgICAgICAweDAxICAgLyogQ1IzMiAqLworI2RlZmluZSBTVklERU9TZW5zZSAgICAgICAgICAweDAyCisjZGVmaW5lIFNDQVJUU2Vuc2UgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgTENEU2Vuc2UgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBNb25pdG9yMlNlbnNlICAgICAgICAweDEwCisjZGVmaW5lIE1vbml0b3IxU2Vuc2UgICAgICAgIDB4MjAKKyNkZWZpbmUgSGlUVlNlbnNlICAgICAgICAgICAgMHg0MAogCi0jaWZkZWYgICAgICAgICAgICAgICAgICAgTmV3U2NyYXRjaAotI2RlZmluZQkJWVBiUHJTZW5zZSAgICAgICAgICAgICAgICAgICAweDgwICAgIC8qIE5FVyBTQ1JBVENIICovCisjaWZkZWYgTmV3U2NyYXRjaAorI2RlZmluZSBZUGJQclNlbnNlICAgICAgICAgICAweDgwICAgLyogTkVXIFNDUkFUQ0ggKi8KICNlbmRpZgogCi0jZGVmaW5lCQlUVlNlbnNlICAgICAgICAgICAgICAgICAgICAgIDB4YzcKKyNkZWZpbmUgVFZTZW5zZSAgICAgICAgICAgICAgMHhjNwogCi0jZGVmaW5lCQlUVk92ZXJTY2FuICAgICAgICAgICAgICAgICAgIDB4MTAgICAgICAgICAgICAgICAvKiBDUjM1ICovCi0jZGVmaW5lCQlUVk92ZXJTY2FuU2hpZnQgICAgICAgICAgICAgIDQKKyNkZWZpbmUgVFZPdmVyU2NhbiAgICAgICAgICAgMHgxMCAgICAgICAgICAgICAgIC8qIENSMzUgKi8KKyNkZWZpbmUgVFZPdmVyU2NhblNoaWZ0ICAgICAgNAogCi0jaWZkZWYgICAgICAgICAgICAgICAgICAgTmV3U2NyYXRjaAotI2RlZmluZQkJTlRTQ01vZGUgICAgICAgICAgICAgICAgICAgICAweDAwCi0jZGVmaW5lCQlQQUxNb2RlICAgICAgICAgICAgICAgICAgICAgIDB4MDAKLSNkZWZpbmUJCU5UU0NKTW9kZSAgICAgICAgICAgICAgICAgICAgMHgwMgotI2RlZmluZQkJUEFMTU5Nb2RlICAgICAgICAgICAgICAgICAgICAweDBjCi0jZGVmaW5lCQlZUGJQck1vZGUgICAgICAgICAgICAgICAgICAgIDB4ZTAKLSNkZWZpbmUJCVlQYlByTW9kZTUyNWkgICAgICAgICAgICAgICAgMHgwMAotI2RlZmluZQkJWVBiUHJNb2RlNTI1cCAgICAgICAgICAgICAgICAweDIwCi0jZGVmaW5lCQlZUGJQck1vZGU3NTBwICAgICAgICAgICAgICAgIDB4NDAKLSNkZWZpbmUJCVlQYlByTW9kZTEwODBpICAgICAgICAgICAgICAgMHg2MAorI2lmZGVmIE5ld1NjcmF0Y2gKKyNkZWZpbmUgTlRTQ01vZGUgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBQQUxNb2RlICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIE5UU0NKTW9kZSAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgUEFMTU5Nb2RlICAgICAgICAgICAgMHgwYworI2RlZmluZSBZUGJQck1vZGUgICAgICAgICAgICAweGUwCisjZGVmaW5lIFlQYlByTW9kZTUyNWkgICAgICAgIDB4MDAKKyNkZWZpbmUgWVBiUHJNb2RlNTI1cCAgICAgICAgMHgyMAorI2RlZmluZSBZUGJQck1vZGU3NTBwICAgICAgICAweDQwCisjZGVmaW5lIFlQYlByTW9kZTEwODBpICAgICAgIDB4NjAKICNlbHNlICAgICAgICAgICAgICAgICAgICAvKiBPbGQgU2NyYXRjaCAqLwotI2RlZmluZQkJQ2xlYXJCdWZmZXJGbGFnICAgICAgICAgICAgICAweDIwCisjZGVmaW5lIENsZWFyQnVmZmVyRmxhZyAgICAgIDB4MjAKICNlbmRpZgogCiAKLSNkZWZpbmUJCUxDRFJHQjE4Qml0ICAgICAgICAgICAgICAgICAgMHgwMSAgICAgICAgICAgICAgIC8qIENSMzcgKi8KLSNkZWZpbmUJCUxDRE5vbkV4cGFuZGluZyAgICAgICAgICAgICAgMHgxMAotI2RlZmluZQkJTENETm9uRXhwYW5kaW5nU2hpZnQgICAgICAgICA0Ci0jZGVmaW5lCQlMQ0RTeW5jICAgICAgICAgICAgICAgICAgICAgIDB4MjAKLSNkZWZpbmUJCUxDRFN5bmNCaXQgICAgICAgICAgICAgICAgICAgMHhlMCAgICAgICAgICAgICAgIC8qIEgvViBwb2xhcml0eSAmIHN5bmMgSUQgKi8KLSNkZWZpbmUJCUxDRFN5bmNTaGlmdCAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBMQ0RSR0IxOEJpdCAgICAgICAgICAweDAxICAgICAgICAgICAgICAgLyogQ1IzNyAqLworI2RlZmluZSBMQ0ROb25FeHBhbmRpbmcgICAgICAweDEwCisjZGVmaW5lIExDRE5vbkV4cGFuZGluZ1NoaWZ0IDQKKyNkZWZpbmUgTENEU3luYyAgICAgICAgICAgICAgMHgyMAorI2RlZmluZSBMQ0RTeW5jQml0ICAgICAgICAgICAweGUwIC8qIEgvViBwb2xhcml0eSAmIHN5bmMgSUQgKi8KKyNkZWZpbmUgTENEU3luY1NoaWZ0ICAgICAgICAgNgogCi0jaWZkZWYgICAgICAgICAgICAgICAgICAgTmV3U2NyYXRjaAotI2RlZmluZQkJU2NhbGluZ0xDRCAgICAgICAgICAgICAgICAgICAweDA4CisjaWZkZWYgTmV3U2NyYXRjaAorI2RlZmluZSBTY2FsaW5nTENEICAgICAgICAgICAweDA4CisjZWxzZSAgLyogT2xkIFNjcmF0Y2ggKi8KKyNkZWZpbmUgRXh0Q2hpcFR5cGUgICAgICAgICAgMHgwZQorI2RlZmluZSBFeHRDaGlwMzAxICAgICAgICAgICAweDAyCisjZGVmaW5lIEV4dENoaXBMVkRTICAgICAgICAgIDB4MDQKKyNkZWZpbmUgRXh0Q2hpcENINzAxOSAgICAgICAgMHgwNgorI2RlZmluZSBTY2FsaW5nTENEICAgICAgICAgICAweDEwCisjZW5kaWYKKworI2RlZmluZSBFbmFibGVEdWFsRWRnZSAgICAgICAweDAxIC8qIENSMzggKi8KKyNkZWZpbmUgU2V0VG9MQ0RBICAgICAgICAgICAgMHgwMgorI2lmZGVmIE5ld1NjcmF0Y2gKKyNkZWZpbmUgU2V0WVBiUHIgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBEaXNhYmxlQ2hhbm5lbEEgICAgICAweDA4CisjZGVmaW5lIERpc2FibGVDaGFubmVsQiAgICAgIDB4MTAKKyNkZWZpbmUgRXh0Q2hpcFR5cGUgICAgICAgICAgMHhlMAorI2RlZmluZSBFeHRDaGlwMzAxICAgICAgICAgICAweDIwCisjZGVmaW5lIEV4dENoaXBMVkRTICAgICAgICAgIDB4NDAKKyNkZWZpbmUgRXh0Q2hpcENINzAxOSAgICAgICAgMHg2MAogI2Vsc2UgICAgICAgICAgICAgICAgICAgIC8qIE9sZCBTY3JhdGNoICovCi0jZGVmaW5lCQlFeHRDaGlwVHlwZSAgICAgICAgICAgICAgICAgIDB4MGUKLSNkZWZpbmUJCUV4dENoaXAzMDEgICAgICAgICAgICAgICAgICAgMHgwMgotI2RlZmluZQkJRXh0Q2hpcExWRFMgICAgICAgICAgICAgICAgICAweDA0Ci0jZGVmaW5lCQlFeHRDaGlwQ0g3MDE5ICAgICAgICAgICAgICAgIDB4MDYKLSNkZWZpbmUJCVNjYWxpbmdMQ0QgICAgICAgICAgICAgICAgICAgMHgxMAorI2RlZmluZSBZUGJQclNlbnNlICAgICAgICAgICAweDA0CisjZGVmaW5lIFNldFlQYlByICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgWVBiUHJNb2RlICAgICAgICAgICAgMHgzMAorI2RlZmluZSBZUGJQck1vZGU1MjVpICAgICAgICAweDAwCisjZGVmaW5lIFlQYlByTW9kZTUyNXAgICAgICAgIDB4MTAKKyNkZWZpbmUgWVBiUHJNb2RlNzUwcCAgICAgICAgMHgyMAorI2RlZmluZSBZUGJQck1vZGUxMDgwaSAgICAgICAweDMwCisjZGVmaW5lIFBBTE1OTW9kZSAgICAgICAgICAgIDB4YzAKICNlbmRpZgogCi0jZGVmaW5lCQlFbmFibGVEdWFsRWRnZSAgICAgICAgICAgICAgIDB4MDEgICAgICAgICAgICAgICAvKiBDUjM4ICovCi0jZGVmaW5lCQlTZXRUb0xDREEgICAgICAgICAgICAgICAgICAgIDB4MDIKLSNpZmRlZiAgICAgICAgICAgICAgICAgICBOZXdTY3JhdGNoCi0jZGVmaW5lCQlTZXRZUGJQciAgICAgICAgICAgICAgICAgICAgIDB4MDQKLSNkZWZpbmUJCURpc2FibGVDaGFubmVsQSAgICAgICAgICAgICAgMHgwOAotI2RlZmluZQkJRGlzYWJsZUNoYW5uZWxCICAgICAgICAgICAgICAweDEwCi0jZGVmaW5lCQlFeHRDaGlwVHlwZSAgICAgICAgICAgICAgICAgIDB4ZTAKLSNkZWZpbmUJCUV4dENoaXAzMDEgICAgICAgICAgICAgICAgICAgMHgyMAotI2RlZmluZQkJRXh0Q2hpcExWRFMgICAgICAgICAgICAgICAgICAweDQwCi0jZGVmaW5lCQlFeHRDaGlwQ0g3MDE5ICAgICAgICAgICAgICAgIDB4NjAKLSNlbHNlICAgICAgICAgICAgICAgICAgICAvKiBPbGQgU2NyYXRjaCAqLwotI2RlZmluZQkJWVBiUHJTZW5zZSAgICAgICAgICAgICAgICAgICAweDA0Ci0jZGVmaW5lCQlTZXRZUGJQciAgICAgICAgICAgICAgICAgICAgIDB4MDgKLSNkZWZpbmUJCVlQYlByTW9kZSAgICAgICAgICAgICAgICAgICAgMHgzMAotI2RlZmluZQkJWVBiUHJNb2RlNTI1aSAgICAgICAgICAgICAgICAweDAwCi0jZGVmaW5lCQlZUGJQck1vZGU1MjVwICAgICAgICAgICAgICAgIDB4MTAKLSNkZWZpbmUJCVlQYlByTW9kZTc1MHAgICAgICAgICAgICAgICAgMHgyMAotI2RlZmluZQkJWVBiUHJNb2RlMTA4MGkgICAgICAgICAgICAgICAweDMwCi0jZGVmaW5lCQlQQUxNTk1vZGUgICAgICAgICAgICAgICAgICAgIDB4YzAKLSNlbmRpZgorI2RlZmluZSBCYWNrbGlnaHRDb250cm9sQml0ICAweDAxIC8qIENSM0EgKi8KKyNkZWZpbmUgV2luOXhmb3JKYXAgICAgICAgICAgMHg0MAorI2RlZmluZSBXaW45eGZvcktvcmVhICAgICAgICAweDgwCiAKLSNkZWZpbmUJCUJhY2tsaWdodENvbnRyb2xCaXQgICAgICAgICAgMHgwMSAgICAgICAgICAgICAgIC8qIENSM0EgKi8KLSNkZWZpbmUJCVdpbjl4Zm9ySmFwICAgICAgICAgICAgICAgICAgMHg0MAotI2RlZmluZQkJV2luOXhmb3JLb3JlYSAgICAgICAgICAgICAgICAweDgwCisjZGVmaW5lIEZvcmNlTURCaXRzICAgICAgICAgIDB4MDcgLyogQ1IzQiAqLworI2RlZmluZSBGb3JjZU1EX0pET1MgICAgICAgICAweDAwCisjZGVmaW5lIEZvcmNlTURfNjQweDQwMFQgICAgIDB4MDEKKyNkZWZpbmUgRm9yY2VNRF82NDB4MzUwVCAgICAgMHgwMgorI2RlZmluZSBGb3JjZU1EXzcyMHg0MDBUICAgICAweDAzCisjZGVmaW5lIEZvcmNlTURfNjQweDQ4MEUgICAgIDB4MDQKKyNkZWZpbmUgRm9yY2VNRF82NDB4NDAwRSAgICAgMHgwNQorI2RlZmluZSBGb3JjZVAxQml0ICAgICAgICAgICAweDEwCisjZGVmaW5lIEZvcmNlUDJCaXQgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgRW5hYmxlRm9yY2VNRGluQklPUyAgMHg0MAorI2RlZmluZSBFbmFibGVGb3JjZU1EaW5EcnYgICAweDgwCiAKLSNkZWZpbmUJCUZvcmNlTURCaXRzICAgICAgICAgICAgICAgICAgMHgwNyAgICAgICAgICAgICAgIC8qIENSM0IgKi8KLSNkZWZpbmUJCUZvcmNlTURfSkRPUyAgICAgICAgICAgICAgICAgMHgwMAotI2RlZmluZQkJRm9yY2VNRF82NDB4NDAwVCAgICAgICAgICAgICAweDAxCi0jZGVmaW5lCQlGb3JjZU1EXzY0MHgzNTBUICAgICAgICAgICAgIDB4MDIKLSNkZWZpbmUJCUZvcmNlTURfNzIweDQwMFQgICAgICAgICAgICAgMHgwMwotI2RlZmluZQkJRm9yY2VNRF82NDB4NDgwRSAgICAgICAgICAgICAweDA0Ci0jZGVmaW5lCQlGb3JjZU1EXzY0MHg0MDBFICAgICAgICAgICAgIDB4MDUKLSNkZWZpbmUJCUZvcmNlUDFCaXQgICAgICAgICAgICAgICAgICAgMHgxMAotI2RlZmluZQkJRm9yY2VQMkJpdCAgICAgICAgICAgICAgICAgICAweDIwCi0jZGVmaW5lCQlFbmFibGVGb3JjZU1EaW5CSU9TICAgICAgICAgIDB4NDAKLSNkZWZpbmUJCUVuYWJsZUZvcmNlTURpbkRydiAgICAgICAgICAgMHg4MAotCi0jaWZkZWYgICAgICAgICAgICAgICAgICAgTmV3U2NyYXRjaCAgICAgICAgICAgICAgICAgICAgICAvKiBOZXcgU2NyYXRjaCAqLworI2lmZGVmIE5ld1NjcmF0Y2ggLyogTmV3IFNjcmF0Y2ggKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVlVNQSBJbmZvcm1hdGlvbiAqLwotI2RlZmluZQkJTENEU2V0dGluZ0Zyb21DTU9TICAgICAgICAgICAweDA0ICAgICAgICAgICAgICAgLyogQ1IzQyAqLwotI2RlZmluZQkJVFZTZXR0aW5nRnJvbUNNT1MgICAgICAgICAgICAweDA4Ci0jZGVmaW5lCQlEaXNwbGF5RGV2aWNlRnJvbUNNT1MgICAgICAgIDB4MTAKLSNkZWZpbmUJCUhLU3VwcG9ydEluU0JJT1MgICAgICAgICAgICAgMHgyMAotI2RlZmluZQkJT1NEU3VwcG9ydEluU0JJT1MgICAgICAgICAgICAweDQwCi0jZGVmaW5lCQlEaXNhYmxlTG9nbyAgICAgICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgTENEU2V0dGluZ0Zyb21DTU9TICAgIDB4MDQgLyogQ1IzQyAqLworI2RlZmluZSBUVlNldHRpbmdGcm9tQ01PUyAgICAgMHgwOAorI2RlZmluZSBEaXNwbGF5RGV2aWNlRnJvbUNNT1MgMHgxMAorI2RlZmluZSBIS1N1cHBvcnRJblNCSU9TICAgICAgMHgyMAorI2RlZmluZSBPU0RTdXBwb3J0SW5TQklPUyAgICAgMHg0MAorI2RlZmluZSBEaXNhYmxlTG9nbyAgICAgICAgICAgMHg4MAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhLIEV2bmV0IERlZmluaXRpb24gKi8KLSNkZWZpbmUJCUhLRXZlbnQgICAgICAgICAgICAgICAgICAgICAgMHgwZiAgICAgICAgICAgICAgIC8qIENSM0QgKi8KLSNkZWZpbmUJCUhLX01vZGVTd2l0Y2ggICAgICAgICAgICAgICAgMHgwMQotI2RlZmluZQkJSEtfRXhwYW5kaW5nICAgICAgICAgICAgICAgICAweDAyCi0jZGVmaW5lCQlIS19PdmVyU2NhbiAgICAgICAgICAgICAgICAgIDB4MDMKLSNkZWZpbmUJCUhLX0JyaWdodG5lc3MgICAgICAgICAgICAgICAgMHgwNAotI2RlZmluZQkJSEtfQ29udHJhc3QgICAgICAgICAgICAgICAgICAweDA1Ci0jZGVmaW5lCQlIS19NdXRlICAgICAgICAgICAgICAgICAgICAgIDB4MDYKLSNkZWZpbmUJCUhLX1ZvbHVtZSAgICAgICAgICAgICAgICAgICAgMHgwNwotI2RlZmluZQkJTW9kZVN3aXRjaFN0YXR1cyAgICAgICAgICAgICAweGYwCi0jZGVmaW5lCQlBY3RpdmVDUlQxICAgICAgICAgICAgICAgICAgIDB4MTAKLSNkZWZpbmUJCUFjdGl2ZUxDRCAgICAgICAgICAgICAgICAgICAgMHgwMDIwCi0jZGVmaW5lCQlBY3RpdmVUViAgICAgICAgICAgICAgICAgICAgIDB4NDAKLSNkZWZpbmUJCUFjdGl2ZUNSVDIgICAgICAgICAgICAgICAgICAgMHg4MAorI2RlZmluZSBIS0V2ZW50ICAgICAgICAgICAgICAgMHgwZiAvKiBDUjNEICovCisjZGVmaW5lIEhLX01vZGVTd2l0Y2ggICAgICAgICAweDAxCisjZGVmaW5lIEhLX0V4cGFuZGluZyAgICAgICAgICAweDAyCisjZGVmaW5lIEhLX092ZXJTY2FuICAgICAgICAgICAweDAzCisjZGVmaW5lIEhLX0JyaWdodG5lc3MgICAgICAgICAweDA0CisjZGVmaW5lIEhLX0NvbnRyYXN0ICAgICAgICAgICAweDA1CisjZGVmaW5lIEhLX011dGUgICAgICAgICAgICAgICAweDA2CisjZGVmaW5lIEhLX1ZvbHVtZSAgICAgICAgICAgICAweDA3CisjZGVmaW5lIE1vZGVTd2l0Y2hTdGF0dXMgICAgICAweGYwCisjZGVmaW5lIEFjdGl2ZUNSVDEgICAgICAgICAgICAweDEwCisjZGVmaW5lIEFjdGl2ZUxDRCAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgQWN0aXZlVFYgICAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgQWN0aXZlQ1JUMiAgICAgICAgICAgIDB4ODAKIAotI2RlZmluZQkJVFZTd2l0Y2hTdGF0dXMgICAgICAgICAgICAgICAweDFmICAgICAgICAgICAgICAgLyogQ1IzRSAqLwotI2RlZmluZQkJQWN0aXZlQVZpZGVvICAgICAgICAgICAgICAgICAweDAxCi0jZGVmaW5lCQlBY3RpdmVTVmlkZW8gICAgICAgICAgICAgICAgIDB4MDIKLSNkZWZpbmUJCUFjdGl2ZVNDQVJUICAgICAgICAgICAgICAgICAgMHgwNAotI2RlZmluZQkJQWN0aXZlSGlUViAgICAgICAgICAgICAgICAgICAweDA4Ci0jZGVmaW5lCQlBY3RpdmVZUGJQciAgICAgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgVFZTd2l0Y2hTdGF0dXMgICAgICAgIDB4MWYgLyogQ1IzRSAqLworI2RlZmluZSBBY3RpdmVBVmlkZW8gICAgICAgICAgMHgwMQorI2RlZmluZSBBY3RpdmVTVmlkZW8gICAgICAgICAgMHgwMgorI2RlZmluZSBBY3RpdmVTQ0FSVCAgICAgICAgICAgMHgwNAorI2RlZmluZSBBY3RpdmVIaVRWICAgICAgICAgICAgMHgwOAorI2RlZmluZSBBY3RpdmVZUGJQciAgICAgICAgICAgMHgxMAogCi0jZGVmaW5lCQlFbmFibGVIS0V2ZW50ICAgICAgICAgICAgICAgIDB4MDEgICAgICAgICAgICAgICAvKiBDUjNGICovCi0jZGVmaW5lCQlFbmFibGVPU0RFdmVudCAgICAgICAgICAgICAgIDB4MDIKLSNkZWZpbmUJCVN0YXJ0T1NERXZlbnQgICAgICAgICAgICAgICAgMHgwNAotI2RlZmluZQkJSWdub3JlSEtFdmVudCAgICAgICAgICAgICAgICAweDA4Ci0jZGVmaW5lCQlJZ25vcmVPU0RFdmVudCAgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgRW5hYmxlSEtFdmVudCAgICAgICAgIDB4MDEgLyogQ1IzRiAqLworI2RlZmluZSBFbmFibGVPU0RFdmVudCAgICAgICAgMHgwMgorI2RlZmluZSBTdGFydE9TREV2ZW50ICAgICAgICAgMHgwNAorI2RlZmluZSBJZ25vcmVIS0V2ZW50ICAgICAgICAgMHgwOAorI2RlZmluZSBJZ25vcmVPU0RFdmVudCAgICAgICAgMHgxMAogI2Vsc2UgICAgICAgICAgICAgICAgICAgIC8qIE9sZCBTY3JhdGNoICovCi0jZGVmaW5lCQlPU0RfU0JJT1MgICAgICAgICAgICAgICAgICAgIDB4MDIgICAgICAgLyogU1IxNyAqLwotI2RlZmluZQkJRGlzYWJsZUxvZ28gICAgICAgICAgICAgICAgICAweDA0Ci0jZGVmaW5lCQlTZWxlY3RLRE9TICAgICAgICAgICAgICAgICAgIDB4MDgKLSNkZWZpbmUJCUtvcldpbk1vZGUgICAgICAgICAgICAgICAgICAgMHgxMAotI2RlZmluZQkJS29yTW9kZTNCaXQgICAgICAgICAgICAgICAgICAweDAwMjAKLSNkZWZpbmUJCVBTQ0N0cmxCaXQgICAgICAgICAgICAgICAgICAweDQwCi0jZGVmaW5lCQlOUFNDQ3RybEJpdFNoaWZ0ICAgICAgICAgICAgIDYKLSNkZWZpbmUJCUJsdWVTY3JlZW5CaXQgICAgICAgICAgICAgICAgMHg4MAorI2RlZmluZSBPU0RfU0JJT1MgICAgICAgICAgICAgICAweDAyIC8qIFNSMTcgKi8KKyNkZWZpbmUgRGlzYWJsZUxvZ28gICAgICAgICAgICAgMHgwNAorI2RlZmluZSBTZWxlY3RLRE9TICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIEtvcldpbk1vZGUgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgS29yTW9kZTNCaXQgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFBTQ0N0cmxCaXQgICAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgTlBTQ0N0cmxCaXRTaGlmdCAgICAgICAgNgorI2RlZmluZSBCbHVlU2NyZWVuQml0ICAgICAgICAgICAweDgwCiAKLSNkZWZpbmUJCUhLRXZlbnQgICAgICAgICAgICAgICAgICAgICAgMHgwZiAgICAgICAvKiBDUjc5ICovCi0jZGVmaW5lCQlIS19Nb2RlU3dpdGNoICAgICAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUJCUhLX0V4cGFuZGluZyAgICAgICAgICAgICAgICAgMHgwMgotI2RlZmluZQkJSEtfT3ZlclNjYW4gICAgICAgICAgICAgICAgICAweDAzCi0jZGVmaW5lCQlIS19CcmlnaHRuZXNzICAgICAgICAgICAgICAgIDB4MDQKLSNkZWZpbmUJCUhLX0NvbnRyYXN0ICAgICAgICAgICAgICAgICAgMHgwNQotI2RlZmluZQkJSEtfTXV0ZSAgICAgICAgICAgICAgICAgICAgICAweDA2Ci0jZGVmaW5lCQlIS19Wb2x1bWUgICAgICAgICAgICAgICAgICAgIDB4MDcKLSNkZWZpbmUJCUFjdGl2ZVBBTCAgICAgICAgICAgICAgICAgICAgMHgwMDIwCi0jZGVmaW5lCQlBY3RpdmVQQUxTaGlmdCAgICAgICAgICAgICAgIDUKLSNkZWZpbmUJCUFjdGl2ZU5vbkV4cGFuZGluZyAgICAgICAgICAgMHg0MAotI2RlZmluZQkJQWN0aXZlTm9uRXhwYW5kaW5nU2hpZnQgICAgICA2Ci0jZGVmaW5lCQlBY3RpdmVPdmVyU2NhbiAgICAgICAgICAgICAgIDB4ODAKLSNkZWZpbmUJCUFjdGl2ZU92ZXJTY2FuU2hpZnQgICAgICAgICAgNworI2RlZmluZSBIS0V2ZW50ICAgICAgICAgICAgICAgICAweDBmIC8qIENSNzkgKi8KKyNkZWZpbmUgSEtfTW9kZVN3aXRjaCAgICAgICAgICAgMHgwMQorI2RlZmluZSBIS19FeHBhbmRpbmcgICAgICAgICAgICAweDAyCisjZGVmaW5lIEhLX092ZXJTY2FuICAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgSEtfQnJpZ2h0bmVzcyAgICAgICAgICAgMHgwNAorI2RlZmluZSBIS19Db250cmFzdCAgICAgICAgICAgICAweDA1CisjZGVmaW5lIEhLX011dGUgICAgICAgICAgICAgICAgIDB4MDYKKyNkZWZpbmUgSEtfVm9sdW1lICAgICAgICAgICAgICAgMHgwNworI2RlZmluZSBBY3RpdmVQQUwgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgQWN0aXZlUEFMU2hpZnQgICAgICAgICAgNQorI2RlZmluZSBBY3RpdmVOb25FeHBhbmRpbmcgICAgICAweDQwCisjZGVmaW5lIEFjdGl2ZU5vbkV4cGFuZGluZ1NoaWZ0IDYKKyNkZWZpbmUgQWN0aXZlT3ZlclNjYW4gICAgICAgICAgMHg4MAorI2RlZmluZSBBY3RpdmVPdmVyU2NhblNoaWZ0ICAgICA3CiAKLSNkZWZpbmUJCU1vZGVTd2l0Y2hTdGF0dXMgICAgICAgICAgICAgMHgwYiAgICAgICAvKiBTUjE1ICovCi0jZGVmaW5lCQlBY3RpdmVDUlQxICAgICAgICAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUJCUFjdGl2ZUxDRCAgICAgICAgICAgICAgICAgICAgMHgwMgotI2RlZmluZQkJQWN0aXZlQ1JUMiAgICAgICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIE1vZGVTd2l0Y2hTdGF0dXMgICAgICAgIDB4MGIgLyogU1IxNSAqLworI2RlZmluZSBBY3RpdmVDUlQxICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIEFjdGl2ZUxDRCAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQWN0aXZlQ1JUMiAgICAgICAgICAgICAgMHgwOAogCi0jZGVmaW5lCQlUVlN3aXRjaFN0YXR1cyAgICAgICAgICAgICAgIDB4ZjAgICAgICAgLyogU1IxNiAqLwotI2RlZmluZQkJVFZDb25maWdTaGlmdCAgICAgICAgICAgICAgICAzCi0jZGVmaW5lCQlBY3RpdmVUViAgICAgICAgICAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUJCUFjdGl2ZVlQYlByICAgICAgICAgICAgICAgICAgMHgwNAotI2RlZmluZQkJQWN0aXZlQVZpZGVvICAgICAgICAgICAgICAgICAweDEwCi0jZGVmaW5lCQlBY3RpdmVTVmlkZW8gICAgICAgICAgICAgICAgIDB4MDAyMAotI2RlZmluZQkJQWN0aXZlU0NBUlQgICAgICAgICAgICAgICAgICAweDQwCi0jZGVmaW5lCQlBY3RpdmVIaVRWICAgICAgICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgVFZTd2l0Y2hTdGF0dXMgICAgICAgICAgMHhmMCAvKiBTUjE2ICovCisjZGVmaW5lIFRWQ29uZmlnU2hpZnQgICAgICAgICAgIDMKKyNkZWZpbmUgQWN0aXZlVFYgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBBY3RpdmVZUGJQciAgICAgICAgICAgICAweDA0CisjZGVmaW5lIEFjdGl2ZUFWaWRlbyAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgQWN0aXZlU1ZpZGVvICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIEFjdGl2ZVNDQVJUICAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgQWN0aXZlSGlUViAgICAgICAgICAgICAgMHg4MAogCi0jZGVmaW5lCQlFbmFibGVIS0V2ZW50ICAgICAgICAgICAgICAgIDB4MDEgICAgICAgLyogQ1I3QSAqLwotI2RlZmluZQkJRW5hYmxlT1NERXZlbnQgICAgICAgICAgICAgICAweDAyCi0jZGVmaW5lCQlTdGFydE9TREV2ZW50ICAgICAgICAgICAgICAgIDB4MDQKLSNkZWZpbmUJCUNNT1NTdXBwb3J0ICAgICAgICAgICAgICAgICAgMHgwOAotI2RlZmluZQkJSG90S2V5U3VwcG9ydCAgICAgICAgICAgICAgICAweDEwCi0jZGVmaW5lCQlJbmdvcmVIS09TREV2ZW50ICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgRW5hYmxlSEtFdmVudCAgICAgICAgICAgMHgwMSAvKiBDUjdBICovCisjZGVmaW5lIEVuYWJsZU9TREV2ZW50ICAgICAgICAgIDB4MDIKKyNkZWZpbmUgU3RhcnRPU0RFdmVudCAgICAgICAgICAgMHgwNAorI2RlZmluZSBDTU9TU3VwcG9ydCAgICAgICAgICAgICAweDA4CisjZGVmaW5lIEhvdEtleVN1cHBvcnQgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgSW5nb3JlSEtPU0RFdmVudCAgICAgICAgMHgyMAogI2VuZGlmCiAKIC8qIC8vLS0tLS0tLS0tLS0tLSBNaXNjLiBEZWZpbml0aW9uICovCi0jZGVmaW5lCQlTZWxlY3RDUlQxUmF0ZSAgICAgICAgICAgICAgIDAwaAorI2RlZmluZSBTZWxlY3RDUlQxUmF0ZSAgICAgICAgICAgICAgIDAwaAogLyogI2RlZmluZSBTZWxlY3RDUlQyUmF0ZSAwNGggKi8KIAotI2RlZmluZQkJRERDMURlbGF5VGltZSAgICAgICAgICAgICAgICAxMDAwCi0jaWZkZWYgICAgICAgICAgIFRSVU1QSU9OCi0jZGVmaW5lCQlEREMyRGVsYXlUaW1lICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIEREQzFEZWxheVRpbWUgICAgICAgICAgIDEwMDAKKyNpZmRlZiBUUlVNUElPTgorI2RlZmluZSBEREMyRGVsYXlUaW1lICAgICAgICAgICAxNQogI2Vsc2UKLSNkZWZpbmUJCUREQzJEZWxheVRpbWUgICAgICAgICAgICAgICAgMTUwCisjZGVmaW5lIEREQzJEZWxheVRpbWUgICAgICAgICAgIDE1MAogI2VuZGlmCiAKLSNkZWZpbmUJCVJfRkFDVE9SICAgICAgICAgICAgICAgICAgICAgMDREaAotI2RlZmluZQkJR19GQUNUT1IgICAgICAgICAgICAgICAgICAgICAwOTdoCi0jZGVmaW5lCQlCX0ZBQ1RPUiAgICAgICAgICAgICAgICAgICAgIDAxQ2gKKyNkZWZpbmUgUl9GQUNUT1IgICAgICAgICAgICAgICAgMDREaAorI2RlZmluZSBHX0ZBQ1RPUiAgICAgICAgICAgICAgICAwOTdoCisjZGVmaW5lIEJfRkFDVE9SICAgICAgICAgICAgICAgIDAxQ2gKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogdHJhbnNsYXRlZCBmcm9tIGFzbSBjb2RlIDMwMWRlZi5oICovCiAvKiAgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotI2RlZmluZQkJTENERGF0YUxlbiAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lCQlIaVRWRGF0YUxlbiAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lCQlUVkRhdGFMZW4gICAgICAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lCQlMVkRTQ1JUMUxlbl9IICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUJCUxWRFNDUlQxTGVuX1YgICAgICAgICAgICAgICAgNwotI2RlZmluZQkJTFZEU0RhdGFMZW4gICAgICAgICAgICAgICAgICA2Ci0jZGVmaW5lCQlMVkRTRGVzRGF0YUxlbiAgICAgICAgICAgICAgIDYKLSNkZWZpbmUJCUxDRERlc0RhdGFMZW4gICAgICAgICAgICAgICAgNgotI2RlZmluZQkJTFZEU0Rlc0RhdGFMZW4yICAgICAgICAgICAgICA4Ci0jZGVmaW5lCQlMQ0REZXNEYXRhTGVuMiAgICAgICAgICAgICAgIDgKLSNkZWZpbmUJCUNIVFZSZWdMZW4gICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUJCUNITFZSZWdMZW4gICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgTENERGF0YUxlbiAgICAgICAgICAgOAorI2RlZmluZSBIaVRWRGF0YUxlbiAgICAgICAgICAxMgorI2RlZmluZSBUVkRhdGFMZW4gICAgICAgICAgICAxMgorI2RlZmluZSBMVkRTQ1JUMUxlbl9IICAgICAgICA4CisjZGVmaW5lIExWRFNDUlQxTGVuX1YgICAgICAgIDcKKyNkZWZpbmUgTFZEU0RhdGFMZW4gICAgICAgICAgNgorI2RlZmluZSBMVkRTRGVzRGF0YUxlbiAgICAgICA2CisjZGVmaW5lIExDRERlc0RhdGFMZW4gICAgICAgIDYKKyNkZWZpbmUgTFZEU0Rlc0RhdGFMZW4yICAgICAgOAorI2RlZmluZSBMQ0REZXNEYXRhTGVuMiAgICAgICA4CisjZGVmaW5lIENIVFZSZWdMZW4gICAgICAgICAgIDE2CisjZGVmaW5lIENITFZSZWdMZW4gICAgICAgICAgIDEyCiAKLSNkZWZpbmUJCVN0SGlUVkhUICAgICAgICAgICAgICAgICAgICAgODkyCi0jZGVmaW5lCQlTdEhpVFZWVCAgICAgICAgICAgICAgICAgICAgIDExMjYKLSNkZWZpbmUJCVN0SGlUZXh0VFZIVCAgICAgICAgICAgICAgICAgMTAwMAotI2RlZmluZQkJU3RIaVRleHRUVlZUICAgICAgICAgICAgICAgICAxMTI2Ci0jZGVmaW5lCQlFeHRIaVRWSFQgICAgICAgICAgICAgICAgICAgIDIxMDAKLSNkZWZpbmUJCUV4dEhpVFZWVCAgICAgICAgICAgICAgICAgICAgMTEyNQotI2RlZmluZQkJTlRTQ0hUICAgICAgICAgICAgICAgICAgICAgICAxNzE2Ci0jZGVmaW5lCQlOVFNDVlQgICAgICAgICAgICAgICAgICAgICAgICA1MjUKLSNkZWZpbmUJCU5UU0MxMDI0eDc2OEhUICAgICAgICAgICAgICAgMTkwOAotI2RlZmluZQkJTlRTQzEwMjR4NzY4VlQgICAgICAgICAgICAgICAgNTI1Ci0jZGVmaW5lCQlQQUxIVCAgICAgICAgICAgICAgICAgICAgICAgIDE3MjgKLSNkZWZpbmUJCVBBTFZUICAgICAgICAgICAgICAgICAgICAgICAgIDYyNQorI2RlZmluZSBTdEhpVFZIVCAgICAgICAgICAgICA4OTIKKyNkZWZpbmUgU3RIaVRWVlQgICAgICAgICAgICAgMTEyNgorI2RlZmluZSBTdEhpVGV4dFRWSFQgICAgICAgICAxMDAwCisjZGVmaW5lIFN0SGlUZXh0VFZWVCAgICAgICAgIDExMjYKKyNkZWZpbmUgRXh0SGlUVkhUICAgICAgICAgICAgMjEwMAorI2RlZmluZSBFeHRIaVRWVlQgICAgICAgICAgICAxMTI1CisjZGVmaW5lIE5UU0NIVCAgICAgICAgICAgICAgIDE3MTYKKyNkZWZpbmUgTlRTQ1ZUICAgICAgICAgICAgICAgIDUyNQorI2RlZmluZSBOVFNDMTAyNHg3NjhIVCAgICAgICAxOTA4CisjZGVmaW5lIE5UU0MxMDI0eDc2OFZUICAgICAgICA1MjUKKyNkZWZpbmUgUEFMSFQgICAgICAgICAgICAgICAgMTcyOAorI2RlZmluZSBQQUxWVCAgICAgICAgICAgICAgICAgNjI1CiAKLSNkZWZpbmUJCVlQYlByVFY1MjVpSFQgICAgICAgICAgICAgICAgMTcxNiAgICAgICAgICAgIC8qIFlQYlByICovCi0jZGVmaW5lCQlZUGJQclRWNTI1aVZUICAgICAgICAgICAgICAgICA1MjUKLSNkZWZpbmUJCVlQYlByVFY1MjVwSFQgICAgICAgICAgICAgICAgMTcxNgotI2RlZmluZQkJWVBiUHJUVjUyNXBWVCAgICAgICAgICAgICAgICAgNTI1Ci0jZGVmaW5lCQlZUGJQclRWNzUwcEhUICAgICAgICAgICAgICAgIDE2NTAKLSNkZWZpbmUJCVlQYlByVFY3NTBwVlQgICAgICAgICAgICAgICAgIDc1MAorI2RlZmluZSBZUGJQclRWNTI1aUhUICAgICAgICAxNzE2IC8qIFlQYlByICovCisjZGVmaW5lIFlQYlByVFY1MjVpVlQgICAgICAgICA1MjUKKyNkZWZpbmUgWVBiUHJUVjUyNXBIVCAgICAgICAgMTcxNgorI2RlZmluZSBZUGJQclRWNTI1cFZUICAgICAgICAgNTI1CisjZGVmaW5lIFlQYlByVFY3NTBwSFQgICAgICAgIDE2NTAKKyNkZWZpbmUgWVBiUHJUVjc1MHBWVCAgICAgICAgIDc1MAogCi0jZGVmaW5lCQlDUlQyVkNMS1NlbCAgICAgICAgICAgICAgICAgIDB4YzAKKyNkZWZpbmUgQ1JUMlZDTEtTZWwgICAgICAgICAgMHhjMAogCi0jZGVmaW5lCQlDUlQyRGVsYXkxICAgICAgCSAgICAgMHgwNCAgICAgICAgICAgIC8qIFhHSTMwMSAqLwotI2RlZmluZQkJQ1JUMkRlbGF5MiAgICAgIAkgICAgIDB4MEEgICAgICAgICAgICAvKiAzMDFCLDMwMiAqLworI2RlZmluZSBDUlQyRGVsYXkxICAgICAgICAgICAweDA0IC8qIFhHSTMwMSAqLworI2RlZmluZSBDUlQyRGVsYXkyICAgICAgICAgICAweDBBIC8qIDMwMUIsMzAyICovCiAKIAotI2RlZmluZQkJVkNMSzI1XzE3NSAgICAgICAgICAgMHgwMAotI2RlZmluZQkJVkNMSzI4XzMyMiAgICAgICAgICAgMHgwMQotI2RlZmluZQkJVkNMSzMxXzUgICAgICAgICAgICAgMHgwMgotI2RlZmluZQkJVkNMSzM2ICAgICAgICAgICAgICAgMHgwMwotI2RlZmluZQkJVkNMSzQwICAgICAgICAgICAgICAgMHgwNAotI2RlZmluZQkJVkNMSzQzXzE2MyAgICAgICAgICAgMHgwNQotI2RlZmluZQkJVkNMSzQ0XzkgICAgICAgICAgICAgMHgwNgotI2RlZmluZQkJVkNMSzQ5XzUgICAgICAgICAgICAgMHgwNwotI2RlZmluZQkJVkNMSzUwICAgICAgICAgICAgICAgMHgwOAotI2RlZmluZQkJVkNMSzUyXzQwNiAgICAgICAgICAgMHgwOQotI2RlZmluZQkJVkNMSzU2XzI1ICAgICAgICAgICAgMHgwQQotI2RlZmluZQkJVkNMSzY1ICAgICAgICAgICAgICAgMHgwQgotI2RlZmluZQkJVkNMSzY3Xzc2NSAgICAgICAgICAgMHgwQwotI2RlZmluZQkJVkNMSzY4XzE3OSAgICAgICAgICAgMHgwRAotI2RlZmluZQkJVkNMSzcyXzg1MiAgICAgICAgICAgMHgwRQotI2RlZmluZQkJVkNMSzc1ICAgICAgICAgICAgICAgMHgwRgotI2RlZmluZQkJVkNMSzc1XzggICAgICAgICAgICAgMHgxMAotI2RlZmluZQkJVkNMSzc4Xzc1ICAgICAgICAgICAgMHgxMQotI2RlZmluZQkJVkNMSzc5XzQxMSAgICAgICAgICAgMHgxMgotI2RlZmluZQkJVkNMSzgzXzk1ICAgICAgICAgICAgMHgxMwotI2RlZmluZQkJVkNMSzg0XzggICAgICAgICAgICAgMHgxNAotI2RlZmluZQkJVkNMSzg2XzYgICAgICAgICAgICAgMHgxNQotI2RlZmluZQkJVkNMSzk0XzUgICAgICAgICAgICAgMHgxNgotI2RlZmluZQkJVkNMSzEwNF85OTggICAgICAgICAgMHgxNwotI2RlZmluZQkJVkNMSzEwNV84ODIgICAgICAgICAgMHgxOAotI2RlZmluZQkJVkNMSzEwOF8yICAgICAgICAgICAgMHgxOQotI2RlZmluZQkJVkNMSzEwOV8xNzUgICAgICAgICAgMHgxQQotI2RlZmluZQkJVkNMSzExM18zMDkgICAgICAgICAgMHgxQgotI2RlZmluZQkJVkNMSzExNl80MDYgICAgICAgICAgMHgxQwotI2RlZmluZQkJVkNMSzEzMl8yNTggICAgICAgICAgMHgxRAotI2RlZmluZQkJVkNMSzEzNV81ICAgICAgICAgICAgMHgxRQotI2RlZmluZQkJVkNMSzEzOV8wNTQgICAgICAgICAgMHgxRgotI2RlZmluZQkJVkNMSzE1N181ICAgICAgICAgICAgMHgyMAotI2RlZmluZQkJVkNMSzE2MiAgICAgICAgICAgICAgMHgyMQotI2RlZmluZQkJVkNMSzE3NSAgICAgICAgICAgICAgMHgyMgotI2RlZmluZQkJVkNMSzE4OSAgICAgICAgICAgICAgMHgyMwotI2RlZmluZQkJVkNMSzE5NF80ICAgICAgICAgICAgMHgyNAotI2RlZmluZQkJVkNMSzIwMl81ICAgICAgICAgICAgMHgyNQotI2RlZmluZQkJVkNMSzIyOV81ICAgICAgICAgICAgMHgyNgotI2RlZmluZQkJVkNMSzIzNCAgICAgICAgICAgICAgMHgyNwotI2RlZmluZQkJVkNMSzI1Ml82OTkgICAgICAgICAgMHgyOAotI2RlZmluZQkJVkNMSzI1NF84MTcgICAgICAgICAgMHgyOQotI2RlZmluZQkJVkNMSzI2NV83MjggICAgICAgICAgMHgyQQotI2RlZmluZQkJVkNMSzI2Nl85NTIgICAgICAgICAgMHgyQgotI2RlZmluZQkJVkNMSzI2OV82NTUgICAgICAgICAgMHgyQwotI2RlZmluZQkJVkNMSzI3Ml8wNDIgICAgICAgICAgMHgyRAotI2RlZmluZQkJVkNMSzI3N18wMTUgICAgICAgICAgMHgyRQotI2RlZmluZQkJVkNMSzI4Nl8zNTkgICAgICAgICAgMHgyRgotI2RlZmluZQkJVkNMSzI5MV8xMzIgICAgICAgICAgMHgzMAotI2RlZmluZQkJVkNMSzI5MV83NjYgICAgICAgICAgMHgzMQotI2RlZmluZQkJVkNMSzMwOV83ODkgICAgICAgICAgMHgzMgotI2RlZmluZQkJVkNMSzMxNV8xOTUgICAgICAgICAgMHgzMwotI2RlZmluZQkJVkNMSzMyM181ODYgICAgICAgICAgMHgzNAotI2RlZmluZQkJVkNMSzMzMF82MTUgICAgICAgICAgMHgzNQotI2RlZmluZQkJVkNMSzMzMl8xNzcgICAgICAgICAgMHgzNgotI2RlZmluZQkJVkNMSzM0MF80NzcgICAgICAgICAgMHgzNwotI2RlZmluZQkJVkNMSzM3NV84NDcgICAgICAgICAgMHgzOAotI2RlZmluZQkJVkNMSzM4OF82MzEgICAgICAgICAgMHgzOQotI2RlZmluZQkJVkNMSzEyNV85OTkgICAgICAgICAgMHg1MQotI2RlZmluZQkJVkNMSzE0OF81ICAgICAgICAgICAgMHg1MgotI2RlZmluZQkJVkNMSzE3OF85OTIgICAgICAgICAgMHg1NAotI2RlZmluZQkJVkNMSzIxN18zMjUgICAgICAgICAgMHg1NQotI2RlZmluZQkJVkNMSzI5OV81MDUgICAgICAgICAgMHg1NgotI2RlZmluZQkJWVBiUHI3NTBwVkNMSyAgICAgICAgMHg1NworI2RlZmluZSBWQ0xLMjVfMTc1ICAgICAgICAgICAweDAwCisjZGVmaW5lIFZDTEsyOF8zMjIgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgVkNMSzMxXzUgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBWQ0xLMzYgICAgICAgICAgICAgICAweDAzCisjZGVmaW5lIFZDTEs0MCAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgVkNMSzQzXzE2MyAgICAgICAgICAgMHgwNQorI2RlZmluZSBWQ0xLNDRfOSAgICAgICAgICAgICAweDA2CisjZGVmaW5lIFZDTEs0OV81ICAgICAgICAgICAgIDB4MDcKKyNkZWZpbmUgVkNMSzUwICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBWQ0xLNTJfNDA2ICAgICAgICAgICAweDA5CisjZGVmaW5lIFZDTEs1Nl8yNSAgICAgICAgICAgIDB4MEEKKyNkZWZpbmUgVkNMSzY1ICAgICAgICAgICAgICAgMHgwQgorI2RlZmluZSBWQ0xLNjdfNzY1ICAgICAgICAgICAweDBDCisjZGVmaW5lIFZDTEs2OF8xNzkgICAgICAgICAgIDB4MEQKKyNkZWZpbmUgVkNMSzcyXzg1MiAgICAgICAgICAgMHgwRQorI2RlZmluZSBWQ0xLNzUgICAgICAgICAgICAgICAweDBGCisjZGVmaW5lIFZDTEs3NV84ICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgVkNMSzc4Xzc1ICAgICAgICAgICAgMHgxMQorI2RlZmluZSBWQ0xLNzlfNDExICAgICAgICAgICAweDEyCisjZGVmaW5lIFZDTEs4M185NSAgICAgICAgICAgIDB4MTMKKyNkZWZpbmUgVkNMSzg0XzggICAgICAgICAgICAgMHgxNAorI2RlZmluZSBWQ0xLODZfNiAgICAgICAgICAgICAweDE1CisjZGVmaW5lIFZDTEs5NF81ICAgICAgICAgICAgIDB4MTYKKyNkZWZpbmUgVkNMSzEwNF85OTggICAgICAgICAgMHgxNworI2RlZmluZSBWQ0xLMTA1Xzg4MiAgICAgICAgICAweDE4CisjZGVmaW5lIFZDTEsxMDhfMiAgICAgICAgICAgIDB4MTkKKyNkZWZpbmUgVkNMSzEwOV8xNzUgICAgICAgICAgMHgxQQorI2RlZmluZSBWQ0xLMTEzXzMwOSAgICAgICAgICAweDFCCisjZGVmaW5lIFZDTEsxMTZfNDA2ICAgICAgICAgIDB4MUMKKyNkZWZpbmUgVkNMSzEzMl8yNTggICAgICAgICAgMHgxRAorI2RlZmluZSBWQ0xLMTM1XzUgICAgICAgICAgICAweDFFCisjZGVmaW5lIFZDTEsxMzlfMDU0ICAgICAgICAgIDB4MUYKKyNkZWZpbmUgVkNMSzE1N181ICAgICAgICAgICAgMHgyMAorI2RlZmluZSBWQ0xLMTYyICAgICAgICAgICAgICAweDIxCisjZGVmaW5lIFZDTEsxNzUgICAgICAgICAgICAgIDB4MjIKKyNkZWZpbmUgVkNMSzE4OSAgICAgICAgICAgICAgMHgyMworI2RlZmluZSBWQ0xLMTk0XzQgICAgICAgICAgICAweDI0CisjZGVmaW5lIFZDTEsyMDJfNSAgICAgICAgICAgIDB4MjUKKyNkZWZpbmUgVkNMSzIyOV81ICAgICAgICAgICAgMHgyNgorI2RlZmluZSBWQ0xLMjM0ICAgICAgICAgICAgICAweDI3CisjZGVmaW5lIFZDTEsyNTJfNjk5ICAgICAgICAgIDB4MjgKKyNkZWZpbmUgVkNMSzI1NF84MTcgICAgICAgICAgMHgyOQorI2RlZmluZSBWQ0xLMjY1XzcyOCAgICAgICAgICAweDJBCisjZGVmaW5lIFZDTEsyNjZfOTUyICAgICAgICAgIDB4MkIKKyNkZWZpbmUgVkNMSzI2OV82NTUgICAgICAgICAgMHgyQworI2RlZmluZSBWQ0xLMjcyXzA0MiAgICAgICAgICAweDJECisjZGVmaW5lIFZDTEsyNzdfMDE1ICAgICAgICAgIDB4MkUKKyNkZWZpbmUgVkNMSzI4Nl8zNTkgICAgICAgICAgMHgyRgorI2RlZmluZSBWQ0xLMjkxXzEzMiAgICAgICAgICAweDMwCisjZGVmaW5lIFZDTEsyOTFfNzY2ICAgICAgICAgIDB4MzEKKyNkZWZpbmUgVkNMSzMwOV83ODkgICAgICAgICAgMHgzMgorI2RlZmluZSBWQ0xLMzE1XzE5NSAgICAgICAgICAweDMzCisjZGVmaW5lIFZDTEszMjNfNTg2ICAgICAgICAgIDB4MzQKKyNkZWZpbmUgVkNMSzMzMF82MTUgICAgICAgICAgMHgzNQorI2RlZmluZSBWQ0xLMzMyXzE3NyAgICAgICAgICAweDM2CisjZGVmaW5lIFZDTEszNDBfNDc3ICAgICAgICAgIDB4MzcKKyNkZWZpbmUgVkNMSzM3NV84NDcgICAgICAgICAgMHgzOAorI2RlZmluZSBWQ0xLMzg4XzYzMSAgICAgICAgICAweDM5CisjZGVmaW5lIFZDTEsxMjVfOTk5ICAgICAgICAgIDB4NTEKKyNkZWZpbmUgVkNMSzE0OF81ICAgICAgICAgICAgMHg1MgorI2RlZmluZSBWQ0xLMTc4Xzk5MiAgICAgICAgICAweDU0CisjZGVmaW5lIFZDTEsyMTdfMzI1ICAgICAgICAgIDB4NTUKKyNkZWZpbmUgVkNMSzI5OV81MDUgICAgICAgICAgMHg1NgorI2RlZmluZSBZUGJQcjc1MHBWQ0xLICAgICAgICAweDU3CiAKLSNkZWZpbmUJCVRWVkNMS0RJVjIgICAgICAgICAgICAgIDB4M0EKLSNkZWZpbmUJCVRWVkNMSyAgICAgICAgICAgICAgICAgIDB4M0IKLSNkZWZpbmUJCUhpVFZWQ0xLRElWMiAgICAgICAgICAweDNDCi0jZGVmaW5lCQlIaVRWVkNMSyAgICAgICAgICAgICAgMHgzRAotI2RlZmluZQkJSGlUVlNpbXVWQ0xLICAgICAgICAgIDB4M0UKLSNkZWZpbmUJCUhpVFZUZXh0VkNMSyAgICAgICAgICAweDNGCi0jZGVmaW5lCQlWQ0xLMzlfNzcgICAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgVFZWQ0xLRElWMiAgICAgICAgICAgMHgzQQorI2RlZmluZSBUVlZDTEsgICAgICAgICAgICAgICAweDNCCisjZGVmaW5lIEhpVFZWQ0xLRElWMiAgICAgICAgIDB4M0MKKyNkZWZpbmUgSGlUVlZDTEsgICAgICAgICAgICAgMHgzRAorI2RlZmluZSBIaVRWU2ltdVZDTEsgICAgICAgICAweDNFCisjZGVmaW5lIEhpVFZUZXh0VkNMSyAgICAgICAgIDB4M0YKKyNkZWZpbmUgVkNMSzM5Xzc3ICAgICAgICAgICAgMHg0MAogLyogI2RlZmluZSBZUGJQcjc1MHBWQ0xLIDB4MEYgKi8KLSNkZWZpbmUJCVlQYlByNTI1cFZDTEsgICAgICAgICAgIDB4M0EKKyNkZWZpbmUgWVBiUHI1MjVwVkNMSyAgICAgICAgICAgMHgzQQogLyogI2RlZmluZSA7O1lQYlByNTI1aVZDTEsgMHgzQiAqLwogLyogI2RlZmluZSA7O1lQYlByNTI1aVZDTEtfMiAweDNBICovCi0jZGVmaW5lCQlOVFNDMTAyNFZDTEsgICAgICAgICAweDQxCi0jZGVmaW5lCQlWQ0xLMjVfMTc1XzQxICAgICAgICAweDQyICAgICAgICAgICAgICAgICAgLyogOyBTY2FsZUxDRCAqLwotI2RlZmluZQkJVkNMSzI1XzE3NV80MiAgICAgICAgMHg0MwotI2RlZmluZQkJVkNMSzI4XzMyMl80MyAgICAgICAgMHg0NAotI2RlZmluZQkJVkNMSzQwXzQ0ICAgICAgICAgICAgMHg0NQotI2RlZmluZQkJVkNMS1FWR0FfMSAgICAgICAgICAgMHg0NiAgICAgICAgICAgICAgICAgICAvKiA7IFFWR0EgKi8KLSNkZWZpbmUJCVZDTEtRVkdBXzIgICAgICAgICAgIDB4NDcKLSNkZWZpbmUJCVZDTEtRVkdBXzMgICAgICAgICAgIDB4NDgKLSNkZWZpbmUJCVZDTEszNV8yICAgICAgICAgICAgIDB4NDkgICAgICAgICAgICAgICAgICAgIC8qIDsgODAweDQ4MCAqLwotI2RlZmluZQkJVkNMSzEyMl82MSAgICAgICAgICAgMHg0QQotI2RlZmluZQkJVkNMSzgwXzM1MCAgICAgICAgICAgMHg0QgotI2RlZmluZQkJVkNMSzEwN18zODUgICAgICAgICAgMHg0QworI2RlZmluZSBOVFNDMTAyNFZDTEsgICAgICAgICAweDQxCisjZGVmaW5lIFZDTEsyNV8xNzVfNDEgICAgICAgIDB4NDIgLyogOyBTY2FsZUxDRCAqLworI2RlZmluZSBWQ0xLMjVfMTc1XzQyICAgICAgICAweDQzCisjZGVmaW5lIFZDTEsyOF8zMjJfNDMgICAgICAgIDB4NDQKKyNkZWZpbmUgVkNMSzQwXzQ0ICAgICAgICAgICAgMHg0NQorI2RlZmluZSBWQ0xLUVZHQV8xICAgICAgICAgICAweDQ2IC8qIDsgUVZHQSAqLworI2RlZmluZSBWQ0xLUVZHQV8yICAgICAgICAgICAweDQ3CisjZGVmaW5lIFZDTEtRVkdBXzMgICAgICAgICAgIDB4NDgKKyNkZWZpbmUgVkNMSzM1XzIgICAgICAgICAgICAgMHg0OSAvKiA7IDgwMHg0ODAgKi8KKyNkZWZpbmUgVkNMSzEyMl82MSAgICAgICAgICAgMHg0QQorI2RlZmluZSBWQ0xLODBfMzUwICAgICAgICAgICAweDRCCisjZGVmaW5lIFZDTEsxMDdfMzg1ICAgICAgICAgIDB4NEMKIAotI2RlZmluZQkJQ0hUVlZDTEszMF8yICAgICAgICAgMHg1MCAgICAgICAgICAgICAgICAgLyogOztDSFRWICovCi0jZGVmaW5lCQlDSFRWVkNMSzI4XzEgICAgICAgICAweDUxCi0jZGVmaW5lCQlDSFRWVkNMSzQzXzYgICAgICAgICAweDUyCi0jZGVmaW5lCQlDSFRWVkNMSzI2XzQgICAgICAgICAweDUzCi0jZGVmaW5lCQlDSFRWVkNMSzI0XzYgICAgICAgICAweDU0Ci0jZGVmaW5lCQlDSFRWVkNMSzQ3XzggICAgICAgICAweDU1Ci0jZGVmaW5lCQlDSFRWVkNMSzMxXzUgICAgICAgICAweDU2Ci0jZGVmaW5lCQlDSFRWVkNMSzI2XzIgICAgICAgICAweDU3Ci0jZGVmaW5lCQlDSFRWVkNMSzM5ICAgICAgICAgICAweDU4Ci0jZGVmaW5lCQlDSFRWVkNMSzM2ICAgICAgICAgICAweDU5CisjZGVmaW5lIENIVFZWQ0xLMzBfMiAgICAgICAgIDB4NTAgLyogOztDSFRWICovCisjZGVmaW5lIENIVFZWQ0xLMjhfMSAgICAgICAgIDB4NTEKKyNkZWZpbmUgQ0hUVlZDTEs0M182ICAgICAgICAgMHg1MgorI2RlZmluZSBDSFRWVkNMSzI2XzQgICAgICAgICAweDUzCisjZGVmaW5lIENIVFZWQ0xLMjRfNiAgICAgICAgIDB4NTQKKyNkZWZpbmUgQ0hUVlZDTEs0N184ICAgICAgICAgMHg1NQorI2RlZmluZSBDSFRWVkNMSzMxXzUgICAgICAgICAweDU2CisjZGVmaW5lIENIVFZWQ0xLMjZfMiAgICAgICAgIDB4NTcKKyNkZWZpbmUgQ0hUVlZDTEszOSAgICAgICAgICAgMHg1OAorI2RlZmluZSBDSFRWVkNMSzM2ICAgICAgICAgICAweDU5CiAKLSNkZWZpbmUJCUNINzAwN1RWVkNMSzMwXzIgICAgIDB4MDAgICAgICAgICAgICAgICAgIC8qIFtCaWxseV0gMjAwNy8wNS8xOCBGb3IgQ0g3MDA3ICovCi0jZGVmaW5lCQlDSDcwMDdUVlZDTEsyOF8xICAgICAweDAxCi0jZGVmaW5lCQlDSDcwMDdUVlZDTEs0M182ICAgICAweDAyCi0jZGVmaW5lCQlDSDcwMDdUVlZDTEsyNl80ICAgICAweDAzCi0jZGVmaW5lCQlDSDcwMDdUVlZDTEsyNF82ICAgICAweDA0Ci0jZGVmaW5lCQlDSDcwMDdUVlZDTEs0N184ICAgICAweDA1Ci0jZGVmaW5lCQlDSDcwMDdUVlZDTEszMV81ICAgICAweDA2Ci0jZGVmaW5lCQlDSDcwMDdUVlZDTEsyNl8yICAgICAweDA3Ci0jZGVmaW5lCQlDSDcwMDdUVlZDTEszOSAgICAgICAweDA4Ci0jZGVmaW5lCQlDSDcwMDdUVlZDTEszNiAgICAgICAweDA5CisjZGVmaW5lIENINzAwN1RWVkNMSzMwXzIgICAgIDB4MDAgLyogW0JpbGx5XSAyMDA3LzA1LzE4IEZvciBDSDcwMDcgKi8KKyNkZWZpbmUgQ0g3MDA3VFZWQ0xLMjhfMSAgICAgMHgwMQorI2RlZmluZSBDSDcwMDdUVlZDTEs0M182ICAgICAweDAyCisjZGVmaW5lIENINzAwN1RWVkNMSzI2XzQgICAgIDB4MDMKKyNkZWZpbmUgQ0g3MDA3VFZWQ0xLMjRfNiAgICAgMHgwNAorI2RlZmluZSBDSDcwMDdUVlZDTEs0N184ICAgICAweDA1CisjZGVmaW5lIENINzAwN1RWVkNMSzMxXzUgICAgIDB4MDYKKyNkZWZpbmUgQ0g3MDA3VFZWQ0xLMjZfMiAgICAgMHgwNworI2RlZmluZSBDSDcwMDdUVlZDTEszOSAgICAgICAweDA4CisjZGVmaW5lIENINzAwN1RWVkNMSzM2ICAgICAgIDB4MDkKIAotI2RlZmluZQkJUkVTMzIweDIwMCAgICAgICAgICAgICAgICAgICAweDAwCi0jZGVmaW5lCQlSRVMzMjB4MjQwICAgICAgICAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUJCVJFUzQwMHgzMDAgICAgICAgICAgICAgICAgICAgMHgwMgotI2RlZmluZQkJUkVTNTEyeDM4NCAgICAgICAgICAgICAgICAgICAweDAzCi0jZGVmaW5lCQlSRVM2NDB4NDAwICAgICAgICAgICAgICAgICAgIDB4MDQKLSNkZWZpbmUJCVJFUzY0MHg0ODB4NjAgICAgICAgICAgICAgICAgMHgwNQotI2RlZmluZQkJUkVTNjQweDQ4MHg3MiAgICAgICAgICAgICAgICAweDA2Ci0jZGVmaW5lCQlSRVM2NDB4NDgweDc1ICAgICAgICAgICAgICAgIDB4MDcKLSNkZWZpbmUJCVJFUzY0MHg0ODB4ODUgICAgICAgICAgICAgICAgMHgwOAotI2RlZmluZQkJUkVTNjQweDQ4MHgxMDAgICAgICAgICAgICAgICAweDA5Ci0jZGVmaW5lCQlSRVM2NDB4NDgweDEyMCAgICAgICAgICAgICAgIDB4MEEKLSNkZWZpbmUJCVJFUzY0MHg0ODB4MTYwICAgICAgICAgICAgICAgMHgwQgotI2RlZmluZQkJUkVTNjQweDQ4MHgyMDAgICAgICAgICAgICAgICAweDBDCi0jZGVmaW5lCQlSRVM4MDB4NjAweDU2ICAgICAgICAgICAgICAgIDB4MEQKLSNkZWZpbmUJCVJFUzgwMHg2MDB4NjAgICAgICAgICAgICAgICAgMHgwRQotI2RlZmluZQkJUkVTODAweDYwMHg3MiAgICAgICAgICAgICAgICAweDBGCi0jZGVmaW5lCQlSRVM4MDB4NjAweDc1ICAgICAgICAgICAgICAgIDB4MTAKLSNkZWZpbmUJCVJFUzgwMHg2MDB4ODUgICAgICAgICAgICAgICAgMHgxMQotI2RlZmluZQkJUkVTODAweDYwMHgxMDAgICAgICAgICAgICAgICAweDEyCi0jZGVmaW5lCQlSRVM4MDB4NjAweDEyMCAgICAgICAgICAgICAgIDB4MTMKLSNkZWZpbmUJCVJFUzgwMHg2MDB4MTYwICAgICAgICAgICAgICAgMHgxNAotI2RlZmluZQkJUkVTMTAyNHg3Njh4NDMgICAgICAgICAgICAgICAweDE1Ci0jZGVmaW5lCQlSRVMxMDI0eDc2OHg2MCAgICAgICAgICAgICAgIDB4MTYKLSNkZWZpbmUJCVJFUzEwMjR4NzY4eDcwICAgICAgICAgICAgICAgMHgxNwotI2RlZmluZQkJUkVTMTAyNHg3Njh4NzUgICAgICAgICAgICAgICAweDE4Ci0jZGVmaW5lCQlSRVMxMDI0eDc2OHg4NSAgICAgICAgICAgICAgIDB4MTkKLSNkZWZpbmUJCVJFUzEwMjR4NzY4eDEwMCAgICAgICAgICAgICAgMHgxQQotI2RlZmluZQkJUkVTMTAyNHg3Njh4MTIwICAgICAgICAgICAgICAweDFCCi0jZGVmaW5lCQlSRVMxMjgweDEwMjR4NDMgICAgICAgICAgICAgIDB4MUMKLSNkZWZpbmUJCVJFUzEyODB4MTAyNHg2MCAgICAgICAgICAgICAgMHgxRAotI2RlZmluZQkJUkVTMTI4MHgxMDI0eDc1ICAgICAgICAgICAgICAweDFFCi0jZGVmaW5lCQlSRVMxMjgweDEwMjR4ODUgICAgICAgICAgICAgIDB4MUYKLSNkZWZpbmUJCVJFUzE2MDB4MTIwMHg2MCAgICAgICAgICAgICAgMHgyMAotI2RlZmluZQkJUkVTMTYwMHgxMjAweDY1ICAgICAgICAgICAgICAweDIxCi0jZGVmaW5lCQlSRVMxNjAweDEyMDB4NzAgICAgICAgICAgICAgIDB4MjIKLSNkZWZpbmUJCVJFUzE2MDB4MTIwMHg3NSAgICAgICAgICAgICAgMHgyMwotI2RlZmluZQkJUkVTMTYwMHgxMjAweDg1ICAgICAgICAgICAgICAweDI0Ci0jZGVmaW5lCQlSRVMxNjAweDEyMDB4MTAwICAgICAgICAgICAgIDB4MjUKLSNkZWZpbmUJCVJFUzE2MDB4MTIwMHgxMjAgICAgICAgICAgICAgMHgyNgotI2RlZmluZQkJUkVTMTkyMHgxNDQweDYwICAgICAgICAgICAgICAweDI3Ci0jZGVmaW5lCQlSRVMxOTIweDE0NDB4NjUgICAgICAgICAgICAgIDB4MjgKLSNkZWZpbmUJCVJFUzE5MjB4MTQ0MHg3MCAgICAgICAgICAgICAgMHgyOQotI2RlZmluZQkJUkVTMTkyMHgxNDQweDc1ICAgICAgICAgICAgICAweDJBCi0jZGVmaW5lCQlSRVMxOTIweDE0NDB4ODUgICAgICAgICAgICAgIDB4MkIKLSNkZWZpbmUJCVJFUzE5MjB4MTQ0MHgxMDAgICAgICAgICAgICAgMHgyQwotI2RlZmluZQkJUkVTMjA0OHgxNTM2eDYwICAgICAgICAgICAgICAweDJECi0jZGVmaW5lCQlSRVMyMDQ4eDE1MzZ4NjUgICAgICAgICAgICAgIDB4MkUKLSNkZWZpbmUJCVJFUzIwNDh4MTUzNng3MCAgICAgICAgICAgICAgMHgyRgotI2RlZmluZQkJUkVTMjA0OHgxNTM2eDc1ICAgICAgICAgICAgICAweDMwCi0jZGVmaW5lCQlSRVMyMDQ4eDE1MzZ4ODUgICAgICAgICAgICAgIDB4MzEKLSNkZWZpbmUJCVJFUzgwMHg0ODB4NjAgICAgICAgICAgICAgICAgMHgzMgotI2RlZmluZQkJUkVTODAweDQ4MHg3NSAgICAgICAgICAgICAgICAweDMzCi0jZGVmaW5lCQlSRVM4MDB4NDgweDg1ICAgICAgICAgICAgICAgIDB4MzQKLSNkZWZpbmUJCVJFUzEwMjR4NTc2eDYwICAgICAgICAgICAgICAgMHgzNQotI2RlZmluZQkJUkVTMTAyNHg1NzZ4NzUgICAgICAgICAgICAgICAweDM2Ci0jZGVmaW5lCQlSRVMxMDI0eDU3Nng4NSAgICAgICAgICAgICAgIDB4MzcKLSNkZWZpbmUJCVJFUzEyODB4NzIweDYwICAgICAgICAgICAgICAgMHgzOAotI2RlZmluZQkJUkVTMTI4MHg3MjB4NzUgICAgICAgICAgICAgICAweDM5Ci0jZGVmaW5lCQlSRVMxMjgweDcyMHg4NSAgICAgICAgICAgICAgIDB4M0EKLSNkZWZpbmUJCVJFUzEyODB4OTYweDYwICAgICAgICAgICAgICAgMHgzQgotI2RlZmluZQkJUkVTNzIweDQ4MHg2MCAgICAgICAgICAgICAgICAweDNDCi0jZGVmaW5lCQlSRVM3MjB4NTc2eDU2ICAgICAgICAgICAgICAgIDB4M0QKLSNkZWZpbmUJCVJFUzg1Nng0ODB4NzlJICAgICAgICAgICAgICAgMHgzRQotI2RlZmluZQkJUkVTODU2eDQ4MHg2MCAgICAgICAgICAgICAgICAweDNGCi0jZGVmaW5lCQlSRVMxMjgweDc2OHg2MCAgICAgICAgICAgICAgIDB4NDAKLSNkZWZpbmUJCVJFUzE0MDB4MTA1MHg2MCAgICAgICAgICAgICAgMHg0MQotI2RlZmluZQkJUkVTMTE1Mng4NjR4NjAgICAgICAgICAgICAgICAweDQyCi0jZGVmaW5lCQlSRVMxMTUyeDg2NHg3NSAgICAgICAgICAgICAgIDB4NDMKLSNkZWZpbmUJCVJFUzEwMjR4NzY4eDE2MCAgICAgICAgICAgICAgMHg0NAotI2RlZmluZQkJUkVTMTI4MHg5NjB4NzUgICAgICAgICAgICAgICAweDQ1Ci0jZGVmaW5lCQlSRVMxMjgweDk2MHg4NSAgICAgICAgICAgICAgIDB4NDYKLSNkZWZpbmUJCVJFUzEyODB4OTYweDEyMCAgICAgICAgICAgICAgMHg0NworI2RlZmluZSBSRVMzMjB4MjAwICAgICAgICAgICAweDAwCisjZGVmaW5lIFJFUzMyMHgyNDAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgUkVTNDAweDMwMCAgICAgICAgICAgMHgwMgorI2RlZmluZSBSRVM1MTJ4Mzg0ICAgICAgICAgICAweDAzCisjZGVmaW5lIFJFUzY0MHg0MDAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgUkVTNjQweDQ4MHg2MCAgICAgICAgMHgwNQorI2RlZmluZSBSRVM2NDB4NDgweDcyICAgICAgICAweDA2CisjZGVmaW5lIFJFUzY0MHg0ODB4NzUgICAgICAgIDB4MDcKKyNkZWZpbmUgUkVTNjQweDQ4MHg4NSAgICAgICAgMHgwOAorI2RlZmluZSBSRVM2NDB4NDgweDEwMCAgICAgICAweDA5CisjZGVmaW5lIFJFUzY0MHg0ODB4MTIwICAgICAgIDB4MEEKKyNkZWZpbmUgUkVTNjQweDQ4MHgxNjAgICAgICAgMHgwQgorI2RlZmluZSBSRVM2NDB4NDgweDIwMCAgICAgICAweDBDCisjZGVmaW5lIFJFUzgwMHg2MDB4NTYgICAgICAgIDB4MEQKKyNkZWZpbmUgUkVTODAweDYwMHg2MCAgICAgICAgMHgwRQorI2RlZmluZSBSRVM4MDB4NjAweDcyICAgICAgICAweDBGCisjZGVmaW5lIFJFUzgwMHg2MDB4NzUgICAgICAgIDB4MTAKKyNkZWZpbmUgUkVTODAweDYwMHg4NSAgICAgICAgMHgxMQorI2RlZmluZSBSRVM4MDB4NjAweDEwMCAgICAgICAweDEyCisjZGVmaW5lIFJFUzgwMHg2MDB4MTIwICAgICAgIDB4MTMKKyNkZWZpbmUgUkVTODAweDYwMHgxNjAgICAgICAgMHgxNAorI2RlZmluZSBSRVMxMDI0eDc2OHg0MyAgICAgICAweDE1CisjZGVmaW5lIFJFUzEwMjR4NzY4eDYwICAgICAgIDB4MTYKKyNkZWZpbmUgUkVTMTAyNHg3Njh4NzAgICAgICAgMHgxNworI2RlZmluZSBSRVMxMDI0eDc2OHg3NSAgICAgICAweDE4CisjZGVmaW5lIFJFUzEwMjR4NzY4eDg1ICAgICAgIDB4MTkKKyNkZWZpbmUgUkVTMTAyNHg3Njh4MTAwICAgICAgMHgxQQorI2RlZmluZSBSRVMxMDI0eDc2OHgxMjAgICAgICAweDFCCisjZGVmaW5lIFJFUzEyODB4MTAyNHg0MyAgICAgIDB4MUMKKyNkZWZpbmUgUkVTMTI4MHgxMDI0eDYwICAgICAgMHgxRAorI2RlZmluZSBSRVMxMjgweDEwMjR4NzUgICAgICAweDFFCisjZGVmaW5lIFJFUzEyODB4MTAyNHg4NSAgICAgIDB4MUYKKyNkZWZpbmUgUkVTMTYwMHgxMjAweDYwICAgICAgMHgyMAorI2RlZmluZSBSRVMxNjAweDEyMDB4NjUgICAgICAweDIxCisjZGVmaW5lIFJFUzE2MDB4MTIwMHg3MCAgICAgIDB4MjIKKyNkZWZpbmUgUkVTMTYwMHgxMjAweDc1ICAgICAgMHgyMworI2RlZmluZSBSRVMxNjAweDEyMDB4ODUgICAgICAweDI0CisjZGVmaW5lIFJFUzE2MDB4MTIwMHgxMDAgICAgIDB4MjUKKyNkZWZpbmUgUkVTMTYwMHgxMjAweDEyMCAgICAgMHgyNgorI2RlZmluZSBSRVMxOTIweDE0NDB4NjAgICAgICAweDI3CisjZGVmaW5lIFJFUzE5MjB4MTQ0MHg2NSAgICAgIDB4MjgKKyNkZWZpbmUgUkVTMTkyMHgxNDQweDcwICAgICAgMHgyOQorI2RlZmluZSBSRVMxOTIweDE0NDB4NzUgICAgICAweDJBCisjZGVmaW5lIFJFUzE5MjB4MTQ0MHg4NSAgICAgIDB4MkIKKyNkZWZpbmUgUkVTMTkyMHgxNDQweDEwMCAgICAgMHgyQworI2RlZmluZSBSRVMyMDQ4eDE1MzZ4NjAgICAgICAweDJECisjZGVmaW5lIFJFUzIwNDh4MTUzNng2NSAgICAgIDB4MkUKKyNkZWZpbmUgUkVTMjA0OHgxNTM2eDcwICAgICAgMHgyRgorI2RlZmluZSBSRVMyMDQ4eDE1MzZ4NzUgICAgICAweDMwCisjZGVmaW5lIFJFUzIwNDh4MTUzNng4NSAgICAgIDB4MzEKKyNkZWZpbmUgUkVTODAweDQ4MHg2MCAgICAgICAgMHgzMgorI2RlZmluZSBSRVM4MDB4NDgweDc1ICAgICAgICAweDMzCisjZGVmaW5lIFJFUzgwMHg0ODB4ODUgICAgICAgIDB4MzQKKyNkZWZpbmUgUkVTMTAyNHg1NzZ4NjAgICAgICAgMHgzNQorI2RlZmluZSBSRVMxMDI0eDU3Nng3NSAgICAgICAweDM2CisjZGVmaW5lIFJFUzEwMjR4NTc2eDg1ICAgICAgIDB4MzcKKyNkZWZpbmUgUkVTMTI4MHg3MjB4NjAgICAgICAgMHgzOAorI2RlZmluZSBSRVMxMjgweDcyMHg3NSAgICAgICAweDM5CisjZGVmaW5lIFJFUzEyODB4NzIweDg1ICAgICAgIDB4M0EKKyNkZWZpbmUgUkVTMTI4MHg5NjB4NjAgICAgICAgMHgzQgorI2RlZmluZSBSRVM3MjB4NDgweDYwICAgICAgICAweDNDCisjZGVmaW5lIFJFUzcyMHg1NzZ4NTYgICAgICAgIDB4M0QKKyNkZWZpbmUgUkVTODU2eDQ4MHg3OUkgICAgICAgMHgzRQorI2RlZmluZSBSRVM4NTZ4NDgweDYwICAgICAgICAweDNGCisjZGVmaW5lIFJFUzEyODB4NzY4eDYwICAgICAgIDB4NDAKKyNkZWZpbmUgUkVTMTQwMHgxMDUweDYwICAgICAgMHg0MQorI2RlZmluZSBSRVMxMTUyeDg2NHg2MCAgICAgICAweDQyCisjZGVmaW5lIFJFUzExNTJ4ODY0eDc1ICAgICAgIDB4NDMKKyNkZWZpbmUgUkVTMTAyNHg3Njh4MTYwICAgICAgMHg0NAorI2RlZmluZSBSRVMxMjgweDk2MHg3NSAgICAgICAweDQ1CisjZGVmaW5lIFJFUzEyODB4OTYweDg1ICAgICAgIDB4NDYKKyNkZWZpbmUgUkVTMTI4MHg5NjB4MTIwICAgICAgMHg0NwogCi0jZGVmaW5lIAlMRkJEUkFNVHJhcCAgICAgICAgICAgICAgICAgIDB4MzAKKyNkZWZpbmUgTEZCRFJBTVRyYXAgICAgICAgICAgMHgzMAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfZXh0LmMgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfZXh0LmMKaW5kZXggZDdjMWIyZS4uN2UxZjc2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX2V4dC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9leHQuYwpAQCAtMSw1ICsxLDUgQEAKICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgIlhHSWZiLmgiCiAKQEAgLTI2LDcgKzI2LDkgQEAKIAkJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIFhHSU5ld19TZW5zZSh1bnNpZ25lZCBzaG9ydCB0ZW1wYngsIHVuc2lnbmVkIHNob3J0IHRlbXBjeCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQorc3RhdGljIHVuc2lnbmVkIGNoYXIgWEdJTmV3X1NlbnNlKHVuc2lnbmVkIHNob3J0IHRlbXBieCwKKwkJCQkgIHVuc2lnbmVkIHNob3J0IHRlbXBjeCwKKwkJCQkgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKIAl1bnNpZ25lZCBzaG9ydCB0ZW1wLCBpLCB0ZW1wY2g7CiAKQEAgLTUwLDcgKzUyLDkgQEAKIAkJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIFhHSU5ld19HZXRMQ0RERENJbmZvKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCitzdGF0aWMgdW5zaWduZWQgY2hhcgorWEdJTmV3X0dldExDREREQ0luZm8oc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCSAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogCXVuc2lnbmVkIHNob3J0IHRlbXA7CiAKQEAgLTE1NCw3ICsxNTgsOSBAQAogCX0KIH0KIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgWEdJTmV3X0JyaWRnZUlzRW5hYmxlKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCitzdGF0aWMgdW5zaWduZWQgY2hhcgorWEdJTmV3X0JyaWRnZUlzRW5hYmxlKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkgICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAJdW5zaWduZWQgc2hvcnQgZmxhZzsKIApAQCAtMTcwLDcgKzE3Niw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIFhHSU5ld19TZW5zZUhpVFYoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKK3N0YXRpYyB1bnNpZ25lZCBjaGFyCitYR0lOZXdfU2Vuc2VIaVRWKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogCXVuc2lnbmVkIHNob3J0IHRlbXBieCwgdGVtcGN4LCB0ZW1wLCBpLCB0ZW1wY2g7CiAKQEAgLTIzOCwyMSArMjQ2LDI5IEBACiAJfQogfQogCi12b2lkIFhHSV9HZXRTZW5zZVN0YXR1cyhzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQordm9pZCBYR0lfR2V0U2Vuc2VTdGF0dXMoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCQlzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0JdW5zaWduZWQgc2hvcnQgdGVtcGF4ID0gMCwgdGVtcGJ4LCB0ZW1wY3gsIHRlbXAsIFAycmVnMCA9IDAsIFNlbnNlTW9kZU5vID0gMCwKLQkJCU91dHB1dFNlbGVjdCA9ICpwVkJJbmZvLT5wT3V0cHV0U2VsZWN0LCBNb2RlSWRJbmRleCwgaTsKKwl1bnNpZ25lZCBzaG9ydCAgdGVtcGF4ID0gMCwgdGVtcGJ4LCB0ZW1wY3gsIHRlbXAsCisJCQlQMnJlZzAgPSAwLCBTZW5zZU1vZGVObyA9IDAsCisJCQlPdXRwdXRTZWxlY3QgPSAqcFZCSW5mby0+cE91dHB1dFNlbGVjdCwKKwkJCU1vZGVJZEluZGV4LCBpOwogCXBWQkluZm8tPkJhc2VBZGRyID0gKHVuc2lnbmVkIGxvbmcpIEh3RGV2aWNlRXh0ZW5zaW9uLT5waklPQWRkcmVzczsKIAogCWlmIChwVkJJbmZvLT5JRl9ERUZfTFZEUyA9PSAxKSB7Ci0JCXRlbXBheCA9IHhnaWZiX3JlZ19nZXQocFZCSW5mby0+UDNjNCwgMHgxQSk7IC8qIHlubGFpIDAyLzI3LzIwMDIgKi8KKwkJLyogeW5sYWkgMDIvMjcvMjAwMiAqLworCQl0ZW1wYXggPSB4Z2lmYl9yZWdfZ2V0KHBWQkluZm8tPlAzYzQsIDB4MUEpOwogCQl0ZW1wYnggPSB4Z2lmYl9yZWdfZ2V0KHBWQkluZm8tPlAzYzQsIDB4MUIpOwogCQl0ZW1wYXggPSAoKHRlbXBheCAmIDB4RkUpID4+IDEpIHwgKHRlbXBieCA8PCA4KTsKIAkJaWYgKHRlbXBheCA9PSAweDAwKSB7IC8qIEdldCBQYW5lbCBpZCBmcm9tIEREQyAqLwogCQkJdGVtcCA9IFhHSU5ld19HZXRMQ0RERENJbmZvKEh3RGV2aWNlRXh0ZW5zaW9uLCBwVkJJbmZvKTsKIAkJCWlmICh0ZW1wID09IDEpIHsgLyogTENEIGNvbm5lY3QgKi8KLQkJCQl4Z2lmYl9yZWdfYW5kX29yKHBWQkluZm8tPlAzZDQsIDB4MzksIDB4RkYsIDB4MDEpOyAvKiBzZXQgQ1IzOSBiaXQwPSIxIiAqLwotCQkJCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UDNkNCwgMHgzNywgMHhFRiwgMHgwMCk7IC8qIGNsZWFuIENSMzcgYml0ND0iMCIgKi8KKwkJCQkvKiBzZXQgQ1IzOSBiaXQwPSIxIiAqLworCQkJCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UDNkNCwKKwkJCQkJCSAweDM5LCAweEZGLCAweDAxKTsKKwkJCQkvKiBjbGVhbiBDUjM3IGJpdDQ9IjAiICovCisJCQkJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2Q0LAorCQkJCQkJIDB4MzcsIDB4RUYsIDB4MDApOwogCQkJCXRlbXAgPSBMQ0RTZW5zZTsKIAkJCX0gZWxzZSB7IC8qIExDRCBkb24ndCBjb25uZWN0ICovCiAJCQkJdGVtcCA9IDA7CkBAIC0yNzMsMjUgKzI4OSw0NyBAQAogCQkJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2Q0LCAweDMyLCAweEEwLCB0ZW1wKTsKIAkJfSBlbHNlIHsKIAkJCWlmIChYR0lfQnJpZGdlSXNPbihwVkJJbmZvKSkgewotCQkJCVAycmVnMCA9IHhnaWZiX3JlZ19nZXQocFZCSW5mby0+UGFydDJQb3J0LCAweDAwKTsKLQkJCQlpZiAoIVhHSU5ld19CcmlkZ2VJc0VuYWJsZShId0RldmljZUV4dGVuc2lvbiwgcFZCSW5mbykpIHsKKwkJCQlQMnJlZzAgPSB4Z2lmYl9yZWdfZ2V0KHBWQkluZm8tPlBhcnQyUG9ydCwKKwkJCQkJCSAgICAgICAweDAwKTsKKwkJCQlpZiAoIVhHSU5ld19CcmlkZ2VJc0VuYWJsZShId0RldmljZUV4dGVuc2lvbiwKKwkJCQkJCQkgICBwVkJJbmZvKSkgewogCQkJCQlTZW5zZU1vZGVObyA9IDB4MmU7Ci0JCQkJCS8qIHhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNkNCwgMHgzMCwgMHg0MSk7ICovCi0JCQkJCS8qIFhHSVNldE1vZGVOZXcoSHdEZXZpY2VFeHRlbnNpb24sIDB4MmUpOyAvLyB5bmxhaSBJbml0TW9kZSAqLworCQkJCS8qIHhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNkNCwgMHgzMCwgMHg0MSk7CisJCQkJICogWEdJU2V0TW9kZU5ldyhId0RldmljZUV4dGVuc2lvbiwgMHgyZSk7CisJCQkJICogLy8geW5sYWkgSW5pdE1vZGUgKi8KIAotCQkJCQl0ZW1wID0gWEdJX1NlYXJjaE1vZGVJRChTZW5zZU1vZGVObywgJk1vZGVJZEluZGV4LCBwVkJJbmZvKTsKLQkJCQkJWEdJX0dldFZHQVR5cGUoSHdEZXZpY2VFeHRlbnNpb24sIHBWQkluZm8pOworCQkJCQl0ZW1wID0gWEdJX1NlYXJjaE1vZGVJRChTZW5zZU1vZGVObywKKwkJCQkJCQkJJk1vZGVJZEluZGV4LAorCQkJCQkJCQlwVkJJbmZvKTsKKwkJCQkJWEdJX0dldFZHQVR5cGUoSHdEZXZpY2VFeHRlbnNpb24sCisJCQkJCQkgICAgICAgcFZCSW5mbyk7CiAJCQkJCVhHSV9HZXRWQlR5cGUocFZCSW5mbyk7CiAJCQkJCXBWQkluZm8tPlNldEZsYWcgPSAweDAwOwogCQkJCQlwVkJJbmZvLT5Nb2RlVHlwZSA9IE1vZGVWR0E7Ci0JCQkJCXBWQkluZm8tPlZCSW5mbyA9IFNldENSVDJUb1JBTURBQyB8IExvYWREQUNGbGFnIHwgU2V0SW5TbGF2ZU1vZGU7Ci0JCQkJCVhHSV9HZXRMQ0RJbmZvKDB4MmUsIE1vZGVJZEluZGV4LCBwVkJJbmZvKTsKLQkJCQkJWEdJX0dldFRWSW5mbygweDJlLCBNb2RlSWRJbmRleCwgcFZCSW5mbyk7Ci0JCQkJCVhHSV9FbmFibGVCcmlkZ2UoSHdEZXZpY2VFeHRlbnNpb24sIHBWQkluZm8pOwotCQkJCQlYR0lfU2V0Q1JUMkdyb3VwMzAxKFNlbnNlTW9kZU5vLCBId0RldmljZUV4dGVuc2lvbiwgcFZCSW5mbyk7Ci0JCQkJCVhHSV9TZXRDUlQyTW9kZVJlZ3MoMHgyZSwgSHdEZXZpY2VFeHRlbnNpb24sIHBWQkluZm8pOwotCQkJCQkvKiBYR0lfRGlzYWJsZUJyaWRnZSggSHdEZXZpY2VFeHRlbnNpb24sIHBWQkluZm8gKSA7ICovCi0JCQkJCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UDNjNCwgMHgwMSwgMHhERiwgMHgyMCk7IC8qIERpc3BsYXkgT2ZmIDAyMTIgKi8KKwkJCQkJcFZCSW5mby0+VkJJbmZvID0gU2V0Q1JUMlRvUkFNREFDIHwKKwkJCQkJCQkgIExvYWREQUNGbGFnIHwKKwkJCQkJCQkgIFNldEluU2xhdmVNb2RlOworCQkJCQlYR0lfR2V0TENESW5mbygweDJlLAorCQkJCQkJICAgICAgIE1vZGVJZEluZGV4LAorCQkJCQkJICAgICAgIHBWQkluZm8pOworCQkJCQlYR0lfR2V0VFZJbmZvKDB4MmUsCisJCQkJCQkgICAgICBNb2RlSWRJbmRleCwKKwkJCQkJCSAgICAgIHBWQkluZm8pOworCQkJCQlYR0lfRW5hYmxlQnJpZGdlKEh3RGV2aWNlRXh0ZW5zaW9uLAorCQkJCQkJCSBwVkJJbmZvKTsKKwkJCQkJWEdJX1NldENSVDJHcm91cDMwMShTZW5zZU1vZGVObywKKwkJCQkJCQkgICAgSHdEZXZpY2VFeHRlbnNpb24sCisJCQkJCQkJICAgIHBWQkluZm8pOworCQkJCQlYR0lfU2V0Q1JUMk1vZGVSZWdzKDB4MmUsCisJCQkJCQkJICAgIEh3RGV2aWNlRXh0ZW5zaW9uLAorCQkJCQkJCSAgICBwVkJJbmZvKTsKKwkJCQkJLyogWEdJX0Rpc2FibGVCcmlkZ2UoSHdEZXZpY2VFeHRlbnNpb24sCisJCQkJCSAqCQkgICAgIHBWQkluZm8gKSA7ICovCisJCQkJCS8qIERpc3BsYXkgT2ZmIDAyMTIgKi8KKwkJCQkJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2M0LAorCQkJCQkJCSAweDAxLAorCQkJCQkJCSAweERGLAorCQkJCQkJCSAweDIwKTsKIAkJCQkJZm9yIChpID0gMDsgaSA8IDIwOyBpKyspCiAJCQkJCQlYR0lfTG9uZ1dhaXQocFZCSW5mbyk7CiAJCQkJfQpAQCAtMzA0LDI5ICszNDIsMzggQEAKIAogCQkJCXRlbXBjeCA9IDB4MEUwODsKIAkJCQlpZiAoWEdJTmV3X1NlbnNlKHRlbXBieCwgdGVtcGN4LCBwVkJJbmZvKSkgewotCQkJCQlpZiAoWEdJTmV3X1NlbnNlKHRlbXBieCwgdGVtcGN4LCBwVkJJbmZvKSkKKwkJCQkJaWYgKFhHSU5ld19TZW5zZSh0ZW1wYngsCisJCQkJCQkJIHRlbXBjeCwKKwkJCQkJCQkgcFZCSW5mbykpCiAJCQkJCQl0ZW1wYXggfD0gTW9uaXRvcjJTZW5zZTsKIAkJCQl9CiAKIAkJCQlpZiAocFZCSW5mby0+VkJUeXBlICYgVkJfWEdJMzAxQykKLQkJCQkJeGdpZmJfcmVnX29yKHBWQkluZm8tPlBhcnQ0UG9ydCwgMHgwZCwgMHgwNCk7CisJCQkJCXhnaWZiX3JlZ19vcihwVkJJbmZvLT5QYXJ0NFBvcnQsCisJCQkJCQkgICAgIDB4MGQsCisJCQkJCQkgICAgIDB4MDQpOwogCi0JCQkJaWYgKFhHSU5ld19TZW5zZUhpVFYoSHdEZXZpY2VFeHRlbnNpb24sIHBWQkluZm8pKSB7IC8qIGFkZCBieSBrdWt1IGZvciBNdWx0aS1hZGFwdGVyIHNlbnNlIEhpVFYgKi8KKwkJCQkvKiBhZGQgYnkga3VrdSBmb3IgTXVsdGktYWRhcHRlciBzZW5zZSBIaVRWICovCisJCQkJaWYgKFhHSU5ld19TZW5zZUhpVFYoSHdEZXZpY2VFeHRlbnNpb24sCisJCQkJCQkgICAgIHBWQkluZm8pKSB7CiAJCQkJCXRlbXBheCB8PSBIaVRWU2Vuc2U7CiAJCQkJCWlmICgocFZCSW5mby0+VkJUeXBlICYgVkJfWEdJMzAxQykpCi0JCQkJCQl0ZW1wYXggXj0gKEhpVFZTZW5zZSB8IFlQYlByU2Vuc2UpOworCQkJCQkJdGVtcGF4IF49IChIaVRWU2Vuc2UgfAorCQkJCQkJCSAgIFlQYlByU2Vuc2UpOwogCQkJCX0KIAotCQkJCWlmICghKHRlbXBheCAmIChIaVRWU2Vuc2UgfCBZUGJQclNlbnNlKSkpIHsgLyogc3RhcnQgKi8KLQorCQkJCS8qIHN0YXJ0ICovCisJCQkJaWYgKCEodGVtcGF4ICYgKEhpVFZTZW5zZSB8IFlQYlByU2Vuc2UpKSkgewogCQkJCQl0ZW1wYnggPSAqcFZCSW5mby0+cFlDU2Vuc2VEYXRhOwotCiAJCQkJCWlmICghKFhHSU5ld19JczMwMUIocFZCSW5mbykpKQogCQkJCQkJdGVtcGJ4ID0gKnBWQkluZm8tPnBZQ1NlbnNlRGF0YTI7Ci0KIAkJCQkJdGVtcGN4ID0gMHgwNjA0OwotCQkJCQlpZiAoWEdJTmV3X1NlbnNlKHRlbXBieCwgdGVtcGN4LCBwVkJJbmZvKSkgewotCQkJCQkJaWYgKFhHSU5ld19TZW5zZSh0ZW1wYngsIHRlbXBjeCwgcFZCSW5mbykpCisJCQkJCWlmIChYR0lOZXdfU2Vuc2UodGVtcGJ4LAorCQkJCQkJCSB0ZW1wY3gsCisJCQkJCQkJIHBWQkluZm8pKSB7CisJCQkJCQlpZiAoWEdJTmV3X1NlbnNlKHRlbXBieCwKKwkJCQkJCQkJIHRlbXBjeCwKKwkJCQkJCQkJIHBWQkluZm8pKQogCQkJCQkJCXRlbXBheCB8PSBTVklERU9TZW5zZTsKIAkJCQkJfQogCkBAIC0zMzcsOCArMzg0LDEyIEBACiAJCQkJCQkJdGVtcGJ4ID0gKnBWQkluZm8tPnBWaWRlb1NlbnNlRGF0YTI7CiAKIAkJCQkJCXRlbXBjeCA9IDB4MDgwNDsKLQkJCQkJCWlmIChYR0lOZXdfU2Vuc2UodGVtcGJ4LCB0ZW1wY3gsIHBWQkluZm8pKSB7Ci0JCQkJCQkJaWYgKFhHSU5ld19TZW5zZSh0ZW1wYngsIHRlbXBjeCwgcFZCSW5mbykpCisJCQkJCQlpZiAoWEdJTmV3X1NlbnNlKHRlbXBieCwKKwkJCQkJCQkJIHRlbXBjeCwKKwkJCQkJCQkJIHBWQkluZm8pKSB7CisJCQkJCQkJaWYgKFhHSU5ld19TZW5zZSh0ZW1wYngsCisJCQkJCQkJCQkgdGVtcGN4LAorCQkJCQkJCQkJIHBWQkluZm8pKQogCQkJCQkJCQl0ZW1wYXggfD0gQVZJREVPU2Vuc2U7CiAJCQkJCQl9CiAJCQkJCX0gZWxzZSB7CkBAIC0zNDksNyArNDAwLDkgQEAKIAkJCQkJCQkJdGVtcGJ4ID0gKnBWQkluZm8tPnBWaWRlb1NlbnNlRGF0YTI7CiAKIAkJCQkJCQl0ZW1wY3ggPSAweDA4MDQ7Ci0JCQkJCQkJaWYgKFhHSU5ld19TZW5zZSh0ZW1wYngsIHRlbXBjeCwgcFZCSW5mbykpIHsKKwkJCQkJCQlpZiAoWEdJTmV3X1NlbnNlKHRlbXBieCwKKwkJCQkJCQkJCSB0ZW1wY3gsCisJCQkJCQkJCQkgcFZCSW5mbykpIHsKIAkJCQkJCQkJaWYgKFhHSU5ld19TZW5zZSh0ZW1wYngsIHRlbXBjeCwgcFZCSW5mbykpCiAJCQkJCQkJCQl0ZW1wYXggfD0gQVZJREVPU2Vuc2U7CiAJCQkJCQkJfQpAQCAtMzcwLDcgKzQyMyw5IEBACiAKIAkJCWlmICghKFAycmVnMCAmIDB4MjApKSB7CiAJCQkJcFZCSW5mby0+VkJJbmZvID0gRGlzYWJsZUNSVDJEaXNwbGF5OwotCQkJCS8qIFhHSV9TZXRDUlQyR3JvdXAzMDEoU2Vuc2VNb2RlTm8sIEh3RGV2aWNlRXh0ZW5zaW9uLCBwVkJJbmZvKTsgKi8KKwkJCQkvKiBYR0lfU2V0Q1JUMkdyb3VwMzAxKFNlbnNlTW9kZU5vLAorCQkJCSAqCQkgICAgICAgSHdEZXZpY2VFeHRlbnNpb24sCisJCQkJICoJCSAgICAgICBwVkJJbmZvKTsgKi8KIAkJCX0KIAkJfQogCX0KQEAgLTM3OCw3ICs0MzMsOCBAQAogCiB9CiAKLXVuc2lnbmVkIHNob3J0IFhHSU5ld19TZW5zZUxDRChzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQordW5zaWduZWQgc2hvcnQgWEdJTmV3X1NlbnNlTENEKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkJICAgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKIAkvKiB1bnNpZ25lZCBzaG9ydCBTb2Z0U2V0dGluZyA7ICovCiAJdW5zaWduZWQgc2hvcnQgdGVtcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9leHQuaCBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9leHQuaAppbmRleCBjYWJlMzY1Li44MTRhNDQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfZXh0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX2V4dC5oCkBAIC0xLDI3ICsxLDI4IEBACi0jaWZuZGVmICBfVkJFWFRfCi0jZGVmaW5lICBfVkJFWFRfCisjaWZuZGVmIF9WQkVYVF8KKyNkZWZpbmUgX1ZCRVhUXwogCiBzdHJ1Y3QgRFdPUkRSRUdTIHsKLSAgICB1bnNpZ25lZCBsb25nICAgIEVheCwgRWJ4LCBFY3gsIEVkeCwgRXNpLCBFZGksIEVicDsKKwl1bnNpZ25lZCBsb25nIEVheCwgRWJ4LCBFY3gsIEVkeCwgRXNpLCBFZGksIEVicDsKIH07CiAKIHN0cnVjdCBXT1JEUkVHUyB7Ci0gICAgdW5zaWduZWQgc2hvcnQgYXgsIGhpX2F4LCBieCwgaGlfYngsIGN4LCBoaV9jeCwgZHgsIGhpX2R4LCBzaSwKLQkgICAgaGlfc2ksIGRpLCBoaV9kaSwgYnAsIGhpX2JwOworCXVuc2lnbmVkIHNob3J0ICBheCwgaGlfYXgsIGJ4LCBoaV9ieCwgY3gsIGhpX2N4LCBkeCwgaGlfZHgsIHNpLAorCQkJaGlfc2ksIGRpLCBoaV9kaSwgYnAsIGhpX2JwOwogfTsKIAogc3RydWN0IEJZVEVSRUdTIHsKLSAgICAgdW5zaWduZWQgY2hhciBhbCwgYWgsIGhpX2FsLCBoaV9haCwgYmwsIGJoLCBoaV9ibCwgaGlfYmgsIGNsLCBjaCwKLQkgICAgIGhpX2NsLCBoaV9jaCwgZGwsIGRoLCBoaV9kbCwgaGlfZGg7CisJdW5zaWduZWQgY2hhciAgIGFsLCBhaCwgaGlfYWwsIGhpX2FoLCBibCwgYmgsIGhpX2JsLCBoaV9iaCwgY2wsIGNoLAorCQkJaGlfY2wsIGhpX2NoLCBkbCwgZGgsIGhpX2RsLCBoaV9kaDsKIH07CiAKLXR5cGVkZWYgdW5pb24gICBfWDg2X1JFR1MgICAgewotICAgIHN0cnVjdCAgRFdPUkRSRUdTIGU7Ci0gICAgc3RydWN0ICBXT1JEUkVHUyB4OwotICAgIHN0cnVjdCAgQllURVJFR1MgaDsKK3R5cGVkZWYgdW5pb24gX1g4Nl9SRUdTIHsKKwlzdHJ1Y3QgIERXT1JEUkVHUyBlOworCXN0cnVjdCAgV09SRFJFR1MgeDsKKwlzdHJ1Y3QgIEJZVEVSRUdTIGg7CiB9IFg4Nl9SRUdTLCAqUFg4Nl9SRUdTOwogCi1leHRlcm4gICB2b2lkICAgICBYR0lfR2V0U2Vuc2VTdGF0dXMoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7CitleHRlcm4gdm9pZCBYR0lfR2V0U2Vuc2VTdGF0dXMoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCQkgICAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKIGV4dGVybiB1bnNpZ25lZCBzaG9ydCBYR0lOZXdfU2Vuc2VMQ0Qoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqLAogCQkJCSAgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9pbml0LmMgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfaW5pdC5jCmluZGV4IDYxZDEzNzAuLjMzYzY4NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9pbml0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX2luaXQuYwpAQCAtMTMsNyArMTMsNyBAQAogI2luY2x1ZGUgInZiX2V4dC5oIgogCiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBYR0lOZXdfQ2hhbm5lbEFCLCBYR0lOZXdfRGF0YUJ1c1dpZHRoOwogCkBAIC0zOSw4ICszOSw5IEBACiAKIHN0YXRpYyBpbnQgWEdJTmV3X1JBTVR5cGU7CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIFhHSU5ld19HZXRYRzIwRFJBTVR5cGUoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCi0JCQkJCXN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKK3N0YXRpYyB1bnNpZ25lZCBjaGFyCitYR0lOZXdfR2V0WEcyMERSQU1UeXBlKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkgICAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogCXVuc2lnbmVkIGNoYXIgZGF0YSwgdGVtcDsKIApAQCAtNTAsMTAgKzUxLDkgQEAKIAkJCXJldHVybiBkYXRhOwogCQl9IGVsc2UgewogCQkJZGF0YSA9IHhnaWZiX3JlZ19nZXQocFZCSW5mby0+UDNjNCwgMHgzOSkgJiAweDAyOwotCiAJCQlpZiAoZGF0YSA9PSAwKQotCQkJCWRhdGEgPSAoeGdpZmJfcmVnX2dldChwVkJJbmZvLT5QM2M0LCAweDNBKSAmIDB4MDIpID4+IDE7Ci0KKwkJCQlkYXRhID0gKHhnaWZiX3JlZ19nZXQocFZCSW5mby0+UDNjNCwgMHgzQSkgJgorCQkJCSAgICAgICAweDAyKSA+PiAxOwogCQkJcmV0dXJuIGRhdGE7CiAJCX0KIAl9IGVsc2UgaWYgKEh3RGV2aWNlRXh0ZW5zaW9uLT5qQ2hpcFR5cGUgPT0gWEcyNykgewpAQCAtNjIsMTkgKzYyLDIyIEBACiAJCQlyZXR1cm4gZGF0YTsKIAkJfQogCQl0ZW1wID0geGdpZmJfcmVnX2dldChwVkJJbmZvLT5QM2M0LCAweDNCKTsKLQotCQlpZiAoKHRlbXAgJiAweDg4KSA9PSAweDgwKSAvKiBTUjNCWzddWzNdTUFBMTUgTUFBMTEgKFBvd2VyIG9uIFRyYXBwaW5nKSAqLworCQkvKiBTUjNCWzddWzNdTUFBMTUgTUFBMTEgKFBvd2VyIG9uIFRyYXBwaW5nKSAqLworCQlpZiAoKHRlbXAgJiAweDg4KSA9PSAweDgwKQogCQkJZGF0YSA9IDA7IC8qIEREUiAqLwogCQllbHNlCiAJCQlkYXRhID0gMTsgLyogRERSSUkgKi8KIAkJcmV0dXJuIGRhdGE7CiAJfSBlbHNlIGlmIChId0RldmljZUV4dGVuc2lvbi0+akNoaXBUeXBlID09IFhHMjEpIHsKLQkJeGdpZmJfcmVnX2FuZChwVkJJbmZvLT5QM2Q0LCAweEI0LCB+MHgwMik7IC8qIEluZGVwZW5kZW50IEdQSU8gY29udHJvbCAqLworCQkvKiBJbmRlcGVuZGVudCBHUElPIGNvbnRyb2wgKi8KKwkJeGdpZmJfcmVnX2FuZChwVkJJbmZvLT5QM2Q0LCAweEI0LCB+MHgwMik7CiAJCXVkZWxheSg4MDApOwogCQl4Z2lmYl9yZWdfb3IocFZCSW5mby0+UDNkNCwgMHg0QSwgMHg4MCk7IC8qIEVuYWJsZSBHUElPSCByZWFkICovCi0JCXRlbXAgPSB4Z2lmYl9yZWdfZ2V0KHBWQkluZm8tPlAzZDQsIDB4NDgpOyAvKiBHUElPRiAwOkRWSSAxOkRWTyAqLworCQkvKiBHUElPRiAwOkRWSSAxOkRWTyAqLworCQl0ZW1wID0geGdpZmJfcmVnX2dldChwVkJJbmZvLT5QM2Q0LCAweDQ4KTsKIAkJLyogSE9UUExVR19TVVBQT1JUICovCi0JCS8qIGZvciBjdXJyZW50IFhHMjAgJiBYRzIxLCBHUElPSCBpcyBmbG9hdGluZywgZHJpdmVyIHdpbGwgZml4IEREUiB0ZW1wb3JhcmlseSAqLworCQkvKiBmb3IgY3VycmVudCBYRzIwICYgWEcyMSwgR1BJT0ggaXMgZmxvYXRpbmcsIGRyaXZlciB3aWxsCisJCSAqIGZpeCBERFIgdGVtcG9yYXJpbHkgKi8KIAkJaWYgKHRlbXAgJiAweDAxKSAvKiBEVkkgcmVhZCBHUElPSCAqLwogCQkJZGF0YSA9IDE7IC8qIEREUklJICovCiAJCWVsc2UKQEAgLTkyLDcgKzk1LDggQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIFhHSU5ld19ERFIxeF9NUlNfMzQwKHVuc2lnbmVkIGxvbmcgUDNjNCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQorc3RhdGljIHZvaWQgWEdJTmV3X0REUjF4X01SU18zNDAodW5zaWduZWQgbG9uZyBQM2M0LAorCQkJCSBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAJeGdpZmJfcmVnX3NldChQM2M0LCAweDE4LCAweDAxKTsKIAl4Z2lmYl9yZWdfc2V0KFAzYzQsIDB4MTksIDB4MjApOwpAQCAtMTI2LDI0ICsxMzAsNDIgQEAKIAkJc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogCi0JeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LCAweDI4LCBwVkJJbmZvLT5NQ0xLRGF0YVtYR0lOZXdfUkFNVHlwZV0uU1IyOCk7Ci0JeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LCAweDI5LCBwVkJJbmZvLT5NQ0xLRGF0YVtYR0lOZXdfUkFNVHlwZV0uU1IyOSk7Ci0JeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LCAweDJBLCBwVkJJbmZvLT5NQ0xLRGF0YVtYR0lOZXdfUkFNVHlwZV0uU1IyQSk7CisJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LAorCQkgICAgICAweDI4LAorCQkgICAgICBwVkJJbmZvLT5NQ0xLRGF0YVtYR0lOZXdfUkFNVHlwZV0uU1IyOCk7CisJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LAorCQkgICAgICAweDI5LAorCQkgICAgICBwVkJJbmZvLT5NQ0xLRGF0YVtYR0lOZXdfUkFNVHlwZV0uU1IyOSk7CisJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LAorCQkgICAgICAweDJBLAorCQkgICAgICBwVkJJbmZvLT5NQ0xLRGF0YVtYR0lOZXdfUkFNVHlwZV0uU1IyQSk7CiAKLQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsIDB4MkUsIHBWQkluZm8tPkVDTEtEYXRhW1hHSU5ld19SQU1UeXBlXS5TUjJFKTsKLQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsIDB4MkYsIHBWQkluZm8tPkVDTEtEYXRhW1hHSU5ld19SQU1UeXBlXS5TUjJGKTsKLQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsIDB4MzAsIHBWQkluZm8tPkVDTEtEYXRhW1hHSU5ld19SQU1UeXBlXS5TUjMwKTsKKwl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsCisJCSAgICAgIDB4MkUsCisJCSAgICAgIHBWQkluZm8tPkVDTEtEYXRhW1hHSU5ld19SQU1UeXBlXS5TUjJFKTsKKwl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsCisJCSAgICAgIDB4MkYsCisJCSAgICAgIHBWQkluZm8tPkVDTEtEYXRhW1hHSU5ld19SQU1UeXBlXS5TUjJGKTsKKwl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsCisJCSAgICAgIDB4MzAsCisJCSAgICAgIHBWQkluZm8tPkVDTEtEYXRhW1hHSU5ld19SQU1UeXBlXS5TUjMwKTsKIAotCS8qIFtWaWNlbnRdIDIwMDQvMDcvMDcsIFdoZW4gWEc0MiBFQ0xLID0gTUNMSyA9IDIwN01IeiwgU2V0IFNSMzIgRFsxOjBdID0gMTBiICovCi0JLyogW0hzdWFuXSAyMDA0LzA4LzIwLCBNb2RpZnkgU1IzMiB2YWx1ZSwgd2hlbiBNQ0xLPTIwN01IWiwgRUxDSz0yNTBNSHosIFNldCBTUjMyIERbMTowXSA9IDEwYiAqLworCS8qIFtWaWNlbnRdIDIwMDQvMDcvMDcsCisJICogV2hlbiBYRzQyIEVDTEsgPSBNQ0xLID0gMjA3TUh6LCBTZXQgU1IzMiBEWzE6MF0gPSAxMGIgKi8KKwkvKiBbSHN1YW5dIDIwMDQvMDgvMjAsCisJICogTW9kaWZ5IFNSMzIgdmFsdWUsIHdoZW4gTUNMSz0yMDdNSFosIEVMQ0s9MjUwTUh6LAorCSAqIFNldCBTUjMyIERbMTowXSA9IDEwYiAqLwogCWlmIChId0RldmljZUV4dGVuc2lvbi0+akNoaXBUeXBlID09IFhHNDIpIHsKLQkJaWYgKChwVkJJbmZvLT5NQ0xLRGF0YVtYR0lOZXdfUkFNVHlwZV0uU1IyOCA9PSAweDFDKQotCQkJCSYmIChwVkJJbmZvLT5NQ0xLRGF0YVtYR0lOZXdfUkFNVHlwZV0uU1IyOSA9PSAweDAxKQotCQkJCSYmICgoKHBWQkluZm8tPkVDTEtEYXRhW1hHSU5ld19SQU1UeXBlXS5TUjJFID09IDB4MUMpCi0JCQkJCQkmJiAocFZCSW5mby0+RUNMS0RhdGFbWEdJTmV3X1JBTVR5cGVdLlNSMkYgPT0gMHgwMSkpCi0JCQkJCXx8ICgocFZCSW5mby0+RUNMS0RhdGFbWEdJTmV3X1JBTVR5cGVdLlNSMkUgPT0gMHgyMikKLQkJCQkJCSYmIChwVkJJbmZvLT5FQ0xLRGF0YVtYR0lOZXdfUkFNVHlwZV0uU1IyRiA9PSAweDAxKSkpKQotCQkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LCAweDMyLCAoKHVuc2lnbmVkIGNoYXIpIHhnaWZiX3JlZ19nZXQocFZCSW5mby0+UDNjNCwgMHgzMikgJiAweEZDKSB8IDB4MDIpOworCQlpZiAoKHBWQkluZm8tPk1DTEtEYXRhW1hHSU5ld19SQU1UeXBlXS5TUjI4ID09IDB4MUMpICYmCisJCSAgICAocFZCSW5mby0+TUNMS0RhdGFbWEdJTmV3X1JBTVR5cGVdLlNSMjkgPT0gMHgwMSkgJiYKKwkJICAgICgoKHBWQkluZm8tPkVDTEtEYXRhW1hHSU5ld19SQU1UeXBlXS5TUjJFID09IDB4MUMpICYmCisJCSAgICAgIChwVkJJbmZvLT5FQ0xLRGF0YVtYR0lOZXdfUkFNVHlwZV0uU1IyRiA9PSAweDAxKSkgfHwKKwkJICAgICAoKHBWQkluZm8tPkVDTEtEYXRhW1hHSU5ld19SQU1UeXBlXS5TUjJFID09IDB4MjIpICYmCisJCSAgICAgIChwVkJJbmZvLT5FQ0xLRGF0YVtYR0lOZXdfUkFNVHlwZV0uU1IyRiA9PSAweDAxKSkpKQorCQkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LAorCQkJCSAgICAgIDB4MzIsCisJCQkJICAgICAgKCh1bnNpZ25lZCBjaGFyKSB4Z2lmYl9yZWdfZ2V0KAorCQkJCQkgIHBWQkluZm8tPlAzYzQsIDB4MzIpICYgMHhGQykgfCAweDAyKTsKIAl9CiB9CiAKQEAgLTE1Miw3ICsxNzQsOCBAQAogCQkJdW5zaWduZWQgbG9uZyBQM2M0LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAJdW5zaWduZWQgbG9uZyBQM2Q0ID0gUDNjNCArIDB4MTA7Ci0JWEdJTmV3X1JBTVR5cGUgPSAoaW50KSBYR0lOZXdfR2V0WEcyMERSQU1UeXBlKEh3RGV2aWNlRXh0ZW5zaW9uLCBwVkJJbmZvKTsKKwlYR0lOZXdfUkFNVHlwZSA9IChpbnQpIFhHSU5ld19HZXRYRzIwRFJBTVR5cGUoSHdEZXZpY2VFeHRlbnNpb24sCisJCQkJCQkgICAgICBwVkJJbmZvKTsKIAlYR0lOZXdfU2V0TWVtb3J5Q2xvY2soSHdEZXZpY2VFeHRlbnNpb24sIHBWQkluZm8pOwogCiAJLyogU2V0IERvdWJsZSBGcmVxdWVuY3kgKi8KQEAgLTIxNiw3ICsyMzksOCBAQAogCXhnaWZiX3JlZ19zZXQoUDNjNCwgMHgxNiwgMHhBMCk7IC8qIFNldCBTUjE2ICovCiAJdWRlbGF5KDE1KTsKIAotCXhnaWZiX3JlZ19zZXQoUDNjNCwgMHgxQiwgMHgwNCk7IC8qIFNldCBTUjFCIHJlZnJlc2ggY29udHJvbCAwMDA6Y2xvc2U7IDAxMDpvcGVuICovCisJLyogU2V0IFNSMUIgcmVmcmVzaCBjb250cm9sIDAwMDpjbG9zZTsgMDEwOm9wZW4gKi8KKwl4Z2lmYl9yZWdfc2V0KFAzYzQsIDB4MUIsIDB4MDQpOwogCXVkZWxheSgyMDApOwogCiB9CkBAIC0yMjYsNyArMjUwLDggQEAKIHsKIAl1bnNpZ25lZCBsb25nIFAzZDQgPSBQM2M0ICsgMHgxMDsKIAotCVhHSU5ld19SQU1UeXBlID0gKGludCkgWEdJTmV3X0dldFhHMjBEUkFNVHlwZShId0RldmljZUV4dGVuc2lvbiwgcFZCSW5mbyk7CisJWEdJTmV3X1JBTVR5cGUgPSAoaW50KSBYR0lOZXdfR2V0WEcyMERSQU1UeXBlKEh3RGV2aWNlRXh0ZW5zaW9uLAorCQkJCQkJICAgICAgcFZCSW5mbyk7CiAJWEdJTmV3X1NldE1lbW9yeUNsb2NrKEh3RGV2aWNlRXh0ZW5zaW9uLCBwVkJJbmZvKTsKIAogCXhnaWZiX3JlZ19zZXQoUDNkNCwgMHg5NywgMHgxMSk7IC8qIENSOTcgKi8KQEAgLTI2OCw5ICsyOTMsOSBAQAogCXVkZWxheSgyMDApOwogfQogCi1zdGF0aWMgdm9pZCBYR0lOZXdfRERSMXhfTVJTX1hHMjAodW5zaWduZWQgbG9uZyBQM2M0LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCitzdGF0aWMgdm9pZCBYR0lOZXdfRERSMXhfTVJTX1hHMjAodW5zaWduZWQgbG9uZyBQM2M0LAorCQkJCSAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotCiAJeGdpZmJfcmVnX3NldChQM2M0LCAweDE4LCAweDAxKTsKIAl4Z2lmYl9yZWdfc2V0KFAzYzQsIDB4MTksIDB4NDApOwogCXhnaWZiX3JlZ19zZXQoUDNjNCwgMHgxNiwgMHgwMCk7CkBAIC0zMDYsOSArMzMxLDE1IEBACiAKIAlpZiAoSHdEZXZpY2VFeHRlbnNpb24tPmpDaGlwVHlwZSA+PSBYRzIwKSB7CiAJCVhHSU5ld19TZXRNZW1vcnlDbG9jayhId0RldmljZUV4dGVuc2lvbiwgcFZCSW5mbyk7Ci0JCXhnaWZiX3JlZ19zZXQoUDNkNCwgMHg4MiwgcFZCSW5mby0+Q1I0MFsxMV1bWEdJTmV3X1JBTVR5cGVdKTsgLyogQ1I4MiAqLwotCQl4Z2lmYl9yZWdfc2V0KFAzZDQsIDB4ODUsIHBWQkluZm8tPkNSNDBbMTJdW1hHSU5ld19SQU1UeXBlXSk7IC8qIENSODUgKi8KLQkJeGdpZmJfcmVnX3NldChQM2Q0LCAweDg2LCBwVkJJbmZvLT5DUjQwWzEzXVtYR0lOZXdfUkFNVHlwZV0pOyAvKiBDUjg2ICovCisJCXhnaWZiX3JlZ19zZXQoUDNkNCwKKwkJCSAgICAgIDB4ODIsCisJCQkgICAgICBwVkJJbmZvLT5DUjQwWzExXVtYR0lOZXdfUkFNVHlwZV0pOyAvKiBDUjgyICovCisJCXhnaWZiX3JlZ19zZXQoUDNkNCwKKwkJCSAgICAgIDB4ODUsCisJCQkgICAgICBwVkJJbmZvLT5DUjQwWzEyXVtYR0lOZXdfUkFNVHlwZV0pOyAvKiBDUjg1ICovCisJCXhnaWZiX3JlZ19zZXQoUDNkNCwKKwkJCSAgICAgIDB4ODYsCisJCQkgICAgICBwVkJJbmZvLT5DUjQwWzEzXVtYR0lOZXdfUkFNVHlwZV0pOyAvKiBDUjg2ICovCiAKIAkJeGdpZmJfcmVnX3NldChQM2Q0LCAweDk4LCAweDAxKTsKIAkJeGdpZmJfcmVnX3NldChQM2Q0LCAweDlBLCAweDAyKTsKQEAgLTMyMCwyNCArMzUxLDQ2IEBACiAJCXN3aXRjaCAoSHdEZXZpY2VFeHRlbnNpb24tPmpDaGlwVHlwZSkgewogCQljYXNlIFhHNDE6CiAJCWNhc2UgWEc0MjoKLQkJCXhnaWZiX3JlZ19zZXQoUDNkNCwgMHg4MiwgcFZCSW5mby0+Q1I0MFsxMV1bWEdJTmV3X1JBTVR5cGVdKTsgLyogQ1I4MiAqLwotCQkJeGdpZmJfcmVnX3NldChQM2Q0LCAweDg1LCBwVkJJbmZvLT5DUjQwWzEyXVtYR0lOZXdfUkFNVHlwZV0pOyAvKiBDUjg1ICovCi0JCQl4Z2lmYl9yZWdfc2V0KFAzZDQsIDB4ODYsIHBWQkluZm8tPkNSNDBbMTNdW1hHSU5ld19SQU1UeXBlXSk7IC8qIENSODYgKi8KKwkJCS8qIENSODIgKi8KKwkJCXhnaWZiX3JlZ19zZXQoUDNkNCwKKwkJCQkgICAgICAweDgyLAorCQkJCSAgICAgIHBWQkluZm8tPkNSNDBbMTFdW1hHSU5ld19SQU1UeXBlXSk7CisJCQkvKiBDUjg1ICovCisJCQl4Z2lmYl9yZWdfc2V0KFAzZDQsCisJCQkJICAgICAgMHg4NSwKKwkJCQkgICAgICBwVkJJbmZvLT5DUjQwWzEyXVtYR0lOZXdfUkFNVHlwZV0pOworCQkJLyogQ1I4NiAqLworCQkJeGdpZmJfcmVnX3NldChQM2Q0LAorCQkJCSAgICAgIDB4ODYsCisJCQkJICAgICAgcFZCSW5mby0+Q1I0MFsxM11bWEdJTmV3X1JBTVR5cGVdKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJeGdpZmJfcmVnX3NldChQM2Q0LCAweDgyLCAweDg4KTsKIAkJCXhnaWZiX3JlZ19zZXQoUDNkNCwgMHg4NiwgMHgwMCk7Ci0JCQl4Z2lmYl9yZWdfZ2V0KFAzZDQsIDB4ODYpOyAvKiBJbnNlcnQgcmVhZCBjb21tYW5kIGZvciBkZWxheSAqLworCQkJLyogSW5zZXJ0IHJlYWQgY29tbWFuZCBmb3IgZGVsYXkgKi8KKwkJCXhnaWZiX3JlZ19nZXQoUDNkNCwgMHg4Nik7CiAJCQl4Z2lmYl9yZWdfc2V0KFAzZDQsIDB4ODYsIDB4ODgpOwogCQkJeGdpZmJfcmVnX2dldChQM2Q0LCAweDg2KTsKLQkJCXhnaWZiX3JlZ19zZXQoUDNkNCwgMHg4NiwgcFZCSW5mby0+Q1I0MFsxM11bWEdJTmV3X1JBTVR5cGVdKTsKKwkJCXhnaWZiX3JlZ19zZXQoUDNkNCwKKwkJCQkgICAgICAweDg2LAorCQkJCSAgICAgIHBWQkluZm8tPkNSNDBbMTNdW1hHSU5ld19SQU1UeXBlXSk7CiAJCQl4Z2lmYl9yZWdfc2V0KFAzZDQsIDB4ODIsIDB4NzcpOwogCQkJeGdpZmJfcmVnX3NldChQM2Q0LCAweDg1LCAweDAwKTsKLQkJCXhnaWZiX3JlZ19nZXQoUDNkNCwgMHg4NSk7IC8qIEluc2VydCByZWFkIGNvbW1hbmQgZm9yIGRlbGF5ICovCisKKwkJCS8qIEluc2VydCByZWFkIGNvbW1hbmQgZm9yIGRlbGF5ICovCisJCQl4Z2lmYl9yZWdfZ2V0KFAzZDQsIDB4ODUpOwogCQkJeGdpZmJfcmVnX3NldChQM2Q0LCAweDg1LCAweDg4KTsKLQkJCXhnaWZiX3JlZ19nZXQoUDNkNCwgMHg4NSk7IC8qIEluc2VydCByZWFkIGNvbW1hbmQgZm9yIGRlbGF5ICovCi0JCQl4Z2lmYl9yZWdfc2V0KFAzZDQsIDB4ODUsIHBWQkluZm8tPkNSNDBbMTJdW1hHSU5ld19SQU1UeXBlXSk7IC8qIENSODUgKi8KLQkJCXhnaWZiX3JlZ19zZXQoUDNkNCwgMHg4MiwgcFZCSW5mby0+Q1I0MFsxMV1bWEdJTmV3X1JBTVR5cGVdKTsgLyogQ1I4MiAqLworCisJCQkvKiBJbnNlcnQgcmVhZCBjb21tYW5kIGZvciBkZWxheSAqLworCQkJeGdpZmJfcmVnX2dldChQM2Q0LCAweDg1KTsKKwkJCS8qIENSODUgKi8KKwkJCXhnaWZiX3JlZ19zZXQoUDNkNCwKKwkJCQkgICAgICAweDg1LAorCQkJCSAgICAgIHBWQkluZm8tPkNSNDBbMTJdW1hHSU5ld19SQU1UeXBlXSk7CisJCQkvKiBDUjgyICovCisJCQl4Z2lmYl9yZWdfc2V0KFAzZDQsCisJCQkJICAgICAgMHg4MiwKKwkJCQkgICAgICBwVkJJbmZvLT5DUjQwWzExXVtYR0lOZXdfUkFNVHlwZV0pOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMzU0LDEzICs0MDcsMTUgQEAKIHsKIAl1bnNpZ25lZCBsb25nIFAzZDQgPSBQb3J0LCBQM2M0ID0gUG9ydCAtIDB4MTA7CiAKLQkvKiBrZWVwIGZvbGxvd2luZyBzZXR0aW5nIHNlcXVlbmNlLCBlYWNoIHNldHRpbmcgaW4gdGhlIHNhbWUgcmVnIGluc2VydCBpZGxlICovCisJLyoga2VlcCBmb2xsb3dpbmcgc2V0dGluZyBzZXF1ZW5jZSwgZWFjaCBzZXR0aW5nIGluCisJICogdGhlIHNhbWUgcmVnIGluc2VydCBpZGxlICovCiAJeGdpZmJfcmVnX3NldChQM2Q0LCAweDgyLCAweDc3KTsKIAl4Z2lmYl9yZWdfc2V0KFAzZDQsIDB4ODYsIDB4MDApOwogCXhnaWZiX3JlZ19nZXQoUDNkNCwgMHg4Nik7IC8qIEluc2VydCByZWFkIGNvbW1hbmQgZm9yIGRlbGF5ICovCiAJeGdpZmJfcmVnX3NldChQM2Q0LCAweDg2LCAweDg4KTsKIAl4Z2lmYl9yZWdfZ2V0KFAzZDQsIDB4ODYpOyAvKiBJbnNlcnQgcmVhZCBjb21tYW5kIGZvciBkZWxheSAqLwotCXhnaWZiX3JlZ19zZXQoUDNkNCwgMHg4NiwgcFZCSW5mby0+Q1I0MFsxM11bWEdJTmV3X1JBTVR5cGVdKTsgLyogQ1I4NiAqLworCS8qIENSODYgKi8KKwl4Z2lmYl9yZWdfc2V0KFAzZDQsIDB4ODYsIHBWQkluZm8tPkNSNDBbMTNdW1hHSU5ld19SQU1UeXBlXSk7CiAJeGdpZmJfcmVnX3NldChQM2Q0LCAweDgyLCAweDc3KTsKIAl4Z2lmYl9yZWdfc2V0KFAzZDQsIDB4ODUsIDB4MDApOwogCXhnaWZiX3JlZ19nZXQoUDNkNCwgMHg4NSk7IC8qIEluc2VydCByZWFkIGNvbW1hbmQgZm9yIGRlbGF5ICovCkBAIC0zNjgsNyArNDIzLDggQEAKIAl4Z2lmYl9yZWdfZ2V0KFAzZDQsIDB4ODUpOyAvKiBJbnNlcnQgcmVhZCBjb21tYW5kIGZvciBkZWxheSAqLwogCXhnaWZiX3JlZ19zZXQoUDNkNCwgMHg4NSwgcFZCSW5mby0+Q1I0MFsxMl1bWEdJTmV3X1JBTVR5cGVdKTsgLyogQ1I4NSAqLwogCWlmIChId0RldmljZUV4dGVuc2lvbi0+akNoaXBUeXBlID09IFhHMjcpCi0JCXhnaWZiX3JlZ19zZXQoUDNkNCwgMHg4MiwgcFZCSW5mby0+Q1I0MFsxMV1bWEdJTmV3X1JBTVR5cGVdKTsgLyogQ1I4MiAqLworCQkvKiBDUjgyICovCisJCXhnaWZiX3JlZ19zZXQoUDNkNCwgMHg4MiwgcFZCSW5mby0+Q1I0MFsxMV1bWEdJTmV3X1JBTVR5cGVdKTsKIAllbHNlCiAJCXhnaWZiX3JlZ19zZXQoUDNkNCwgMHg4MiwgMHhBOCk7IC8qIENSODIgKi8KIApAQCAtMzk1LDEyICs0NTEsMTQgQEAKIAogCXRlbXAyID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCXRlbXAgPSBwVkJJbmZvLT5DUjZCW1hHSU5ld19SQU1UeXBlXVtpXTsgLyogQ1I2QiBEUVMgZmluZSB0dW5lIGRlbGF5ICovCisJCS8qIENSNkIgRFFTIGZpbmUgdHVuZSBkZWxheSAqLworCQl0ZW1wID0gcFZCSW5mby0+Q1I2QltYR0lOZXdfUkFNVHlwZV1baV07CiAJCWZvciAoaiA9IDA7IGogPCA0OyBqKyspIHsKIAkJCXRlbXAxID0gKCh0ZW1wID4+ICgyICogaikpICYgMHgwMykgPDwgMjsKIAkJCXRlbXAyIHw9IHRlbXAxOwogCQkJeGdpZmJfcmVnX3NldChQM2Q0LCAweDZCLCB0ZW1wMik7Ci0JCQl4Z2lmYl9yZWdfZ2V0KFAzZDQsIDB4NkIpOyAvKiBJbnNlcnQgcmVhZCBjb21tYW5kIGZvciBkZWxheSAqLworCQkJLyogSW5zZXJ0IHJlYWQgY29tbWFuZCBmb3IgZGVsYXkgKi8KKwkJCXhnaWZiX3JlZ19nZXQoUDNkNCwgMHg2Qik7CiAJCQl0ZW1wMiAmPSAweEYwOwogCQkJdGVtcDIgKz0gMHgxMDsKIAkJfQpAQCAtNDA4LDEyICs0NjYsMTQgQEAKIAogCXRlbXAyID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCXRlbXAgPSBwVkJJbmZvLT5DUjZFW1hHSU5ld19SQU1UeXBlXVtpXTsgLyogQ1I2RSBEUU0gZmluZSB0dW5lIGRlbGF5ICovCisJCS8qIENSNkUgRFFNIGZpbmUgdHVuZSBkZWxheSAqLworCQl0ZW1wID0gcFZCSW5mby0+Q1I2RVtYR0lOZXdfUkFNVHlwZV1baV07CiAJCWZvciAoaiA9IDA7IGogPCA0OyBqKyspIHsKIAkJCXRlbXAxID0gKCh0ZW1wID4+ICgyICogaikpICYgMHgwMykgPDwgMjsKIAkJCXRlbXAyIHw9IHRlbXAxOwogCQkJeGdpZmJfcmVnX3NldChQM2Q0LCAweDZFLCB0ZW1wMik7Ci0JCQl4Z2lmYl9yZWdfZ2V0KFAzZDQsIDB4NkUpOyAvKiBJbnNlcnQgcmVhZCBjb21tYW5kIGZvciBkZWxheSAqLworCQkJLyogSW5zZXJ0IHJlYWQgY29tbWFuZCBmb3IgZGVsYXkgKi8KKwkJCXhnaWZiX3JlZ19nZXQoUDNkNCwgMHg2RSk7CiAJCQl0ZW1wMiAmPSAweEYwOwogCQkJdGVtcDIgKz0gMHgxMDsKIAkJfQpAQCAtNDIxLDE1ICs0ODEsMTggQEAKIAogCXRlbXAzID0gMDsKIAlmb3IgKGsgPSAwOyBrIDwgNDsgaysrKSB7Ci0JCXhnaWZiX3JlZ19hbmRfb3IoUDNkNCwgMHg2RSwgMHhGQywgdGVtcDMpOyAvKiBDUjZFX0RbMTowXSBzZWxlY3QgY2hhbm5lbCAqLworCQkvKiBDUjZFX0RbMTowXSBzZWxlY3QgY2hhbm5lbCAqLworCQl4Z2lmYl9yZWdfYW5kX29yKFAzZDQsIDB4NkUsIDB4RkMsIHRlbXAzKTsKIAkJdGVtcDIgPSAwOwogCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCQl0ZW1wID0gcFZCSW5mby0+Q1I2RltYR0lOZXdfUkFNVHlwZV1bOCAqIGsgKyBpXTsgLyogQ1I2RiBEUSBmaW5lIHR1bmUgZGVsYXkgKi8KKwkJCS8qIENSNkYgRFEgZmluZSB0dW5lIGRlbGF5ICovCisJCQl0ZW1wID0gcFZCSW5mby0+Q1I2RltYR0lOZXdfUkFNVHlwZV1bOCAqIGsgKyBpXTsKIAkJCWZvciAoaiA9IDA7IGogPCA0OyBqKyspIHsKIAkJCQl0ZW1wMSA9ICh0ZW1wID4+ICgyICogaikpICYgMHgwMzsKIAkJCQl0ZW1wMiB8PSB0ZW1wMTsKIAkJCQl4Z2lmYl9yZWdfc2V0KFAzZDQsIDB4NkYsIHRlbXAyKTsKLQkJCQl4Z2lmYl9yZWdfZ2V0KFAzZDQsIDB4NkYpOyAvKiBJbnNlcnQgcmVhZCBjb21tYW5kIGZvciBkZWxheSAqLworCQkJCS8qIEluc2VydCByZWFkIGNvbW1hbmQgZm9yIGRlbGF5ICovCisJCQkJeGdpZmJfcmVnX2dldChQM2Q0LCAweDZGKTsKIAkJCQl0ZW1wMiAmPSAweEY4OwogCQkJCXRlbXAyICs9IDB4MDg7CiAJCQl9CkBAIC00NDEsNyArNTA0LDggQEAKIAl4Z2lmYl9yZWdfc2V0KFAzZDQsIDB4ODEsIHBWQkluZm8tPkNSNDBbMTBdW1hHSU5ld19SQU1UeXBlXSk7IC8qIENSODEgKi8KIAogCXRlbXAyID0gMHg4MDsKLQl0ZW1wID0gcFZCSW5mby0+Q1I4OVtYR0lOZXdfUkFNVHlwZV1bMF07IC8qIENSODkgdGVybWluYXRvciB0eXBlIHNlbGVjdCAqLworCS8qIENSODkgdGVybWluYXRvciB0eXBlIHNlbGVjdCAqLworCXRlbXAgPSBwVkJJbmZvLT5DUjg5W1hHSU5ld19SQU1UeXBlXVswXTsKIAlmb3IgKGogPSAwOyBqIDwgNDsgaisrKSB7CiAJCXRlbXAxID0gKHRlbXAgPj4gKDIgKiBqKSkgJiAweDAzOwogCQl0ZW1wMiB8PSB0ZW1wMTsKQEAgLTQ2OCwxOSArNTMyLDIwIEBACiAJaWYgKEh3RGV2aWNlRXh0ZW5zaW9uLT5qQ2hpcFR5cGUgPT0gWEcyNykKIAkJeGdpZmJfcmVnX3NldChQM2Q0LCAweDhGLCAqcFZCSW5mby0+cENSOEYpOyAvKiBDUjhGICovCiAKLQlmb3IgKGogPSAwOyBqIDw9IDY7IGorKykKKwlmb3IgKGogPSAwOyBqIDw9IDY7IGorKykgLyogQ1I5MCAtIENSOTYgKi8KIAkJeGdpZmJfcmVnX3NldChQM2Q0LCAoMHg5MCArIGopLAotCQkJCXBWQkluZm8tPkNSNDBbMTQgKyBqXVtYR0lOZXdfUkFNVHlwZV0pOyAvKiBDUjkwIC0gQ1I5NiAqLworCQkJCXBWQkluZm8tPkNSNDBbMTQgKyBqXVtYR0lOZXdfUkFNVHlwZV0pOwogCi0JZm9yIChqID0gMDsgaiA8PSAyOyBqKyspCisJZm9yIChqID0gMDsgaiA8PSAyOyBqKyspIC8qIENSQzMgLSBDUkM1ICovCiAJCXhnaWZiX3JlZ19zZXQoUDNkNCwgKDB4QzMgKyBqKSwKLQkJCQlwVkJJbmZvLT5DUjQwWzIxICsgal1bWEdJTmV3X1JBTVR5cGVdKTsgLyogQ1JDMyAtIENSQzUgKi8KKwkJCQlwVkJJbmZvLT5DUjQwWzIxICsgal1bWEdJTmV3X1JBTVR5cGVdKTsKIAotCWZvciAoaiA9IDA7IGogPCAyOyBqKyspCisJZm9yIChqID0gMDsgaiA8IDI7IGorKykgLyogQ1I4QSAtIENSOEIgKi8KIAkJeGdpZmJfcmVnX3NldChQM2Q0LCAoMHg4QSArIGopLAotCQkJCXBWQkluZm8tPkNSNDBbMSArIGpdW1hHSU5ld19SQU1UeXBlXSk7IC8qIENSOEEgLSBDUjhCICovCisJCQkJcFZCSW5mby0+Q1I0MFsxICsgal1bWEdJTmV3X1JBTVR5cGVdKTsKIAotCWlmICgoSHdEZXZpY2VFeHRlbnNpb24tPmpDaGlwVHlwZSA9PSBYRzQxKSB8fCAoSHdEZXZpY2VFeHRlbnNpb24tPmpDaGlwVHlwZSA9PSBYRzQyKSkKKwlpZiAoKEh3RGV2aWNlRXh0ZW5zaW9uLT5qQ2hpcFR5cGUgPT0gWEc0MSkgfHwKKwkgICAgKEh3RGV2aWNlRXh0ZW5zaW9uLT5qQ2hpcFR5cGUgPT0gWEc0MikpCiAJCXhnaWZiX3JlZ19zZXQoUDNkNCwgMHg4QywgMHg4Nyk7CiAKIAl4Z2lmYl9yZWdfc2V0KFAzZDQsIDB4NTksIHBWQkluZm8tPkNSNDBbNF1bWEdJTmV3X1JBTVR5cGVdKTsgLyogQ1I1OSAqLwpAQCAtNTUwLDcgKzYxNSwxMCBAQAogCQltZW1zaXplID0gZGF0YSA+PiA0OwogCiAJCS8qIFsyMDA0LzAzLzI1XSBWaWNlbnQsIEZpeCBEUkFNIFNpemluZyBFcnJvciAqLwotCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsIDB4MTQsICh4Z2lmYl9yZWdfZ2V0KHBWQkluZm8tPlAzYzQsIDB4MTQpICYgMHgwRikgfCAoZGF0YSAmIDB4RjApKTsKKwkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LAorCQkJICAgICAgMHgxNCwKKwkJCSAgICAgICh4Z2lmYl9yZWdfZ2V0KHBWQkluZm8tPlAzYzQsIDB4MTQpICYgMHgwRikgfAorCQkJICAgICAgIChkYXRhICYgMHhGMCkpOwogCiAJCS8qIGRhdGEgfD0gWEdJTmV3X0NoYW5uZWxBQiA8PCAyOyAqLwogCQkvKiBkYXRhIHw9IChYR0lOZXdfRGF0YUJ1c1dpZHRoIC8gNjQpIDw8IDE7ICovCkBAIC01OTEsNyArNjU5LDEwIEBACiAJCW1lbXNpemUgPSBkYXRhID4+IDQ7CiAKIAkJLyogWzIwMDQvMDMvMjVdIFZpY2VudCwgRml4IERSQU0gU2l6aW5nIEVycm9yICovCi0JCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNjNCwgMHgxNCwgKHhnaWZiX3JlZ19nZXQocFZCSW5mby0+UDNjNCwgMHgxNCkgJiAweDBGKSB8IChkYXRhICYgMHhGMCkpOworCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsCisJCQkgICAgICAweDE0LAorCQkJICAgICAgKHhnaWZiX3JlZ19nZXQocFZCSW5mby0+UDNjNCwgMHgxNCkgJiAweDBGKSB8CisJCQkJKGRhdGEgJiAweEYwKSk7CiAJCXVkZWxheSgxNSk7CiAKIAkJLyogZGF0YSB8PSBYR0lOZXdfQ2hhbm5lbEFCIDw8IDI7ICovCkBAIC02MTcsNyArNjg4LDggQEAKIAkJKigodW5zaWduZWQgbG9uZyAqKSAocFZCSW5mby0+RkJBZGRyICsgUG9zaXRpb24pKSA9IFBvc2l0aW9uOwogCX0KIAotCXVkZWxheSg1MDApOyAvKiBbVmljZW50XSAyMDA0LzA0LzE2LiBGaXggIzE3NTkgTWVtb3J5IFNpemUgZXJyb3IgaW4gTXVsdGktQWRhcHRlci4gKi8KKwl1ZGVsYXkoNTAwKTsgLyogW1ZpY2VudF0gMjAwNC8wNC8xNi4KKwkJCUZpeCAjMTc1OSBNZW1vcnkgU2l6ZSBlcnJvciBpbiBNdWx0aS1BZGFwdGVyLiAqLwogCiAJUG9zaXRpb24gPSAwOwogCkBAIC02MjYsNyArNjk4LDggQEAKIAogCWZvciAoaSA9IFN0YXJ0QWRkcjsgaSA8PSBTdG9wQWRkcjsgaSsrKSB7CiAJCVBvc2l0aW9uID0gMSA8PCBpOwotCQlpZiAoKCoodW5zaWduZWQgbG9uZyAqKSAocFZCSW5mby0+RkJBZGRyICsgUG9zaXRpb24pKSAhPSBQb3NpdGlvbikKKwkJaWYgKCgqKHVuc2lnbmVkIGxvbmcgKikgKHBWQkluZm8tPkZCQWRkciArIFBvc2l0aW9uKSkgIT0KKwkJICAgIFBvc2l0aW9uKQogCQkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAxOwpAQCAtNjY1LDY3ICs3MzgsOTYgQEAKIAkJCQkJPiAweDEwMDAwMDApIHsKIAogCQkJCVhHSU5ld19EYXRhQnVzV2lkdGggPSAzMjsgLyogMzIgYml0cyAqLwotCQkJCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNjNCwgMHgxMywgMHhCMSk7IC8qIDIyYml0ICsgMiByYW5rICsgMzJiaXQgKi8KKwkJCQkvKiAyMmJpdCArIDIgcmFuayArIDMyYml0ICovCisJCQkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LCAweDEzLCAweEIxKTsKIAkJCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsIDB4MTQsIDB4NTIpOwogCQkJCXVkZWxheSgxNSk7CiAKIAkJCQlpZiAoWEdJTmV3X1JlYWRXcml0ZVJlc3QoMjQsIDIzLCBwVkJJbmZvKSA9PSAxKQogCQkJCQlyZXR1cm47CiAKLQkJCQlpZiAoKEh3RGV2aWNlRXh0ZW5zaW9uLT51bFZpZGVvTWVtb3J5U2l6ZSAtIDEpID4gMHg4MDAwMDApIHsKLQkJCQkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LCAweDEzLCAweDMxKTsgLyogMjJiaXQgKyAxIHJhbmsgKyAzMmJpdCAqLwotCQkJCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsIDB4MTQsIDB4NDIpOworCQkJCWlmICgoSHdEZXZpY2VFeHRlbnNpb24tPnVsVmlkZW9NZW1vcnlTaXplIC0gMSkgPgorCQkJCSAgICAweDgwMDAwMCkgeworCQkJCQkvKiAyMmJpdCArIDEgcmFuayArIDMyYml0ICovCisJCQkJCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNjNCwKKwkJCQkJCSAgICAgIDB4MTMsCisJCQkJCQkgICAgICAweDMxKTsKKwkJCQkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LAorCQkJCQkJICAgICAgMHgxNCwKKwkJCQkJCSAgICAgIDB4NDIpOwogCQkJCQl1ZGVsYXkoMTUpOwogCi0JCQkJCWlmIChYR0lOZXdfUmVhZFdyaXRlUmVzdCgyMywgMjMsIHBWQkluZm8pID09IDEpCisJCQkJCWlmIChYR0lOZXdfUmVhZFdyaXRlUmVzdCgyMywKKwkJCQkJCQkJIDIzLAorCQkJCQkJCQkgcFZCSW5mbykgPT0gMSkKIAkJCQkJCXJldHVybjsKIAkJCQl9CiAJCQl9CiAKLQkJCWlmICgoSHdEZXZpY2VFeHRlbnNpb24tPnVsVmlkZW9NZW1vcnlTaXplIC0gMSkgPiAweDgwMDAwMCkgeworCQkJaWYgKChId0RldmljZUV4dGVuc2lvbi0+dWxWaWRlb01lbW9yeVNpemUgLSAxKSA+CisJCQkgICAgMHg4MDAwMDApIHsKIAkJCQlYR0lOZXdfRGF0YUJ1c1dpZHRoID0gMTY7IC8qIDE2IGJpdHMgKi8KLQkJCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsIDB4MTMsIDB4QjEpOyAvKiAyMmJpdCArIDIgcmFuayArIDE2Yml0ICovCisJCQkJLyogMjJiaXQgKyAyIHJhbmsgKyAxNmJpdCAqLworCQkJCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNjNCwgMHgxMywgMHhCMSk7CiAJCQkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LCAweDE0LCAweDQxKTsKIAkJCQl1ZGVsYXkoMTUpOwogCiAJCQkJaWYgKFhHSU5ld19SZWFkV3JpdGVSZXN0KDIzLCAyMiwgcFZCSW5mbykgPT0gMSkKIAkJCQkJcmV0dXJuOwogCQkJCWVsc2UKLQkJCQkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LCAweDEzLCAweDMxKTsKKwkJCQkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LAorCQkJCQkJICAgICAgMHgxMywKKwkJCQkJCSAgICAgIDB4MzEpOwogCQkJCXVkZWxheSgxNSk7CiAJCQl9CiAKIAkJfSBlbHNlIHsgLyogRHVhbF8xNl84ICovCi0JCQlpZiAoKEh3RGV2aWNlRXh0ZW5zaW9uLT51bFZpZGVvTWVtb3J5U2l6ZSAtIDEpID4gMHg4MDAwMDApIHsKLQorCQkJaWYgKChId0RldmljZUV4dGVuc2lvbi0+dWxWaWRlb01lbW9yeVNpemUgLSAxKSA+CisJCQkgICAgMHg4MDAwMDApIHsKIAkJCQlYR0lOZXdfRGF0YUJ1c1dpZHRoID0gMTY7IC8qIDE2IGJpdHMgKi8KLQkJCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsIDB4MTMsIDB4QjEpOyAvKiAoMHgzMToxMng4eDIpIDIyYml0ICsgMiByYW5rICovCi0JCQkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LCAweDE0LCAweDQxKTsgLyogMHg0MToxNk14MTYgYml0Ki8KKwkJCQkvKiAoMHgzMToxMng4eDIpIDIyYml0ICsgMiByYW5rICovCisJCQkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LCAweDEzLCAweEIxKTsKKwkJCQkvKiAweDQxOjE2TXgxNiBiaXQqLworCQkJCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNjNCwgMHgxNCwgMHg0MSk7CiAJCQkJdWRlbGF5KDE1KTsKIAogCQkJCWlmIChYR0lOZXdfUmVhZFdyaXRlUmVzdCgyMywgMjIsIHBWQkluZm8pID09IDEpCiAJCQkJCXJldHVybjsKIAotCQkJCWlmICgoSHdEZXZpY2VFeHRlbnNpb24tPnVsVmlkZW9NZW1vcnlTaXplIC0gMSkgPiAweDQwMDAwMCkgewotCQkJCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsIDB4MTMsIDB4MzEpOyAvKiAoMHgzMToxMng4eDIpIDIyYml0ICsgMSByYW5rICovCi0JCQkJCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNjNCwgMHgxNCwgMHgzMSk7IC8qIDB4MzE6OE14MTYgYml0Ki8KKwkJCQlpZiAoKEh3RGV2aWNlRXh0ZW5zaW9uLT51bFZpZGVvTWVtb3J5U2l6ZSAtIDEpID4KKwkJCQkgICAgMHg0MDAwMDApIHsKKwkJCQkJLyogKDB4MzE6MTJ4OHgyKSAyMmJpdCArIDEgcmFuayAqLworCQkJCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsCisJCQkJCQkgICAgICAweDEzLAorCQkJCQkJICAgICAgMHgzMSk7CisJCQkJCS8qIDB4MzE6OE14MTYgYml0Ki8KKwkJCQkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LAorCQkJCQkJICAgICAgMHgxNCwKKwkJCQkJCSAgICAgIDB4MzEpOwogCQkJCQl1ZGVsYXkoMTUpOwogCi0JCQkJCWlmIChYR0lOZXdfUmVhZFdyaXRlUmVzdCgyMiwgMjIsIHBWQkluZm8pID09IDEpCisJCQkJCWlmIChYR0lOZXdfUmVhZFdyaXRlUmVzdCgyMiwKKwkJCQkJCQkJIDIyLAorCQkJCQkJCQkgcFZCSW5mbykgPT0gMSkKIAkJCQkJCXJldHVybjsKIAkJCQl9CiAJCQl9CiAKLQkJCWlmICgoSHdEZXZpY2VFeHRlbnNpb24tPnVsVmlkZW9NZW1vcnlTaXplIC0gMSkgPiAweDQwMDAwMCkgeworCQkJaWYgKChId0RldmljZUV4dGVuc2lvbi0+dWxWaWRlb01lbW9yeVNpemUgLSAxKSA+CisJCQkgICAgMHg0MDAwMDApIHsKIAkJCQlYR0lOZXdfRGF0YUJ1c1dpZHRoID0gODsgLyogOCBiaXRzICovCi0JCQkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LCAweDEzLCAweEIxKTsgLyogKDB4MzE6MTJ4OHgyKSAyMmJpdCArIDIgcmFuayAqLwotCQkJCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNjNCwgMHgxNCwgMHgzMCk7IC8qIDB4MzA6OE14OCBiaXQqLworCQkJCS8qICgweDMxOjEyeDh4MikgMjJiaXQgKyAyIHJhbmsgKi8KKwkJCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsIDB4MTMsIDB4QjEpOworCQkJCS8qIDB4MzA6OE14OCBiaXQqLworCQkJCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNjNCwgMHgxNCwgMHgzMCk7CiAJCQkJdWRlbGF5KDE1KTsKIAogCQkJCWlmIChYR0lOZXdfUmVhZFdyaXRlUmVzdCgyMiwgMjEsIHBWQkluZm8pID09IDEpCiAJCQkJCXJldHVybjsKLQkJCQllbHNlCi0JCQkJCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNjNCwgMHgxMywgMHgzMSk7IC8qICgweDMxOjEyeDh4MikgMjJiaXQgKyAxIHJhbmsgKi8KKwkJCQllbHNlIC8qICgweDMxOjEyeDh4MikgMjJiaXQgKyAxIHJhbmsgKi8KKwkJCQkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LAorCQkJCQkJICAgICAgMHgxMywKKwkJCQkJCSAgICAgIDB4MzEpOwogCQkJCXVkZWxheSgxNSk7CiAJCQl9CiAJCX0KQEAgLTkxMSwxMyArMTAxMywxOCBAQAogCiAJaWYgKEh3RGV2aWNlRXh0ZW5zaW9uLT5qQ2hpcFR5cGUgPj0gWEcyMCkgewogCQlmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykgewotCQkJWEdJTmV3X1NldERSQU1TaXppbmdUeXBlKGksIFhHSU5ld19ERFJEUkFNX1RZUEUyMCwgcFZCSW5mbyk7Ci0JCQltZW1zaXplID0gWEdJTmV3X1NldERSQU1TaXplMjBSZWcoaSwgWEdJTmV3X0REUkRSQU1fVFlQRTIwLCBwVkJJbmZvKTsKKwkJCVhHSU5ld19TZXREUkFNU2l6aW5nVHlwZShpLAorCQkJCQkJIFhHSU5ld19ERFJEUkFNX1RZUEUyMCwKKwkJCQkJCSBwVkJJbmZvKTsKKwkJCW1lbXNpemUgPSBYR0lOZXdfU2V0RFJBTVNpemUyMFJlZyhpLAorCQkJCQkJCSAgWEdJTmV3X0REUkRSQU1fVFlQRTIwLAorCQkJCQkJCSAgcFZCSW5mbyk7CiAJCQlpZiAobWVtc2l6ZSA9PSAwKQogCQkJCWNvbnRpbnVlOwogCiAJCQlhZGRyID0gbWVtc2l6ZSArIChYR0lOZXdfQ2hhbm5lbEFCIC0gMikgKyAyMDsKLQkJCWlmICgoSHdEZXZpY2VFeHRlbnNpb24tPnVsVmlkZW9NZW1vcnlTaXplIC0gMSkgPCAodW5zaWduZWQgbG9uZykgKDEgPDwgYWRkcikpCisJCQlpZiAoKEh3RGV2aWNlRXh0ZW5zaW9uLT51bFZpZGVvTWVtb3J5U2l6ZSAtIDEpIDwKKwkJCSAgICAodW5zaWduZWQgbG9uZykgKDEgPDwgYWRkcikpCiAJCQkJY29udGludWU7CiAKIAkJCWlmIChYR0lOZXdfUmVhZFdyaXRlUmVzdChhZGRyLCA1LCBwVkJJbmZvKSA9PSAxKQpAQCAtOTI1LDE0ICsxMDMyLDE5IEBACiAJCX0KIAl9IGVsc2UgewogCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCQlYR0lOZXdfU2V0RFJBTVNpemluZ1R5cGUoaSwgWEdJTmV3X0REUkRSQU1fVFlQRTM0MCwgcFZCSW5mbyk7Ci0JCQltZW1zaXplID0gWEdJTmV3X1NldERSQU1TaXplUmVnKGksIFhHSU5ld19ERFJEUkFNX1RZUEUzNDAsIHBWQkluZm8pOworCQkJWEdJTmV3X1NldERSQU1TaXppbmdUeXBlKGksCisJCQkJCQkgWEdJTmV3X0REUkRSQU1fVFlQRTM0MCwKKwkJCQkJCSBwVkJJbmZvKTsKKwkJCW1lbXNpemUgPSBYR0lOZXdfU2V0RFJBTVNpemVSZWcoaSwKKwkJCQkJCQlYR0lOZXdfRERSRFJBTV9UWVBFMzQwLAorCQkJCQkJCXBWQkluZm8pOwogCiAJCQlpZiAobWVtc2l6ZSA9PSAwKQogCQkJCWNvbnRpbnVlOwogCiAJCQlhZGRyID0gbWVtc2l6ZSArIChYR0lOZXdfQ2hhbm5lbEFCIC0gMikgKyAyMDsKLQkJCWlmICgoSHdEZXZpY2VFeHRlbnNpb24tPnVsVmlkZW9NZW1vcnlTaXplIC0gMSkgPCAodW5zaWduZWQgbG9uZykgKDEgPDwgYWRkcikpCisJCQlpZiAoKEh3RGV2aWNlRXh0ZW5zaW9uLT51bFZpZGVvTWVtb3J5U2l6ZSAtIDEpIDwKKwkJCSAgICAodW5zaWduZWQgbG9uZykgKDEgPDwgYWRkcikpCiAJCQkJY29udGludWU7CiAKIAkJCWlmIChYR0lOZXdfUmVhZFdyaXRlUmVzdChhZGRyLCA5LCBwVkJJbmZvKSA9PSAxKQpAQCAtOTUzLDcgKzEwNjUsOCBAQAogCVhHSVNldE1vZGVOZXcoSHdEZXZpY2VFeHRlbnNpb24sIDB4MmUpOwogCiAJZGF0YSA9IHhnaWZiX3JlZ19nZXQocFZCSW5mby0+UDNjNCwgMHgyMSk7Ci0JeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LCAweDIxLCAodW5zaWduZWQgc2hvcnQpIChkYXRhICYgMHhERikpOyAvKiBkaXNhYmxlIHJlYWQgY2FjaGUgKi8KKwkvKiBkaXNhYmxlIHJlYWQgY2FjaGUgKi8KKwl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsIDB4MjEsICh1bnNpZ25lZCBzaG9ydCkgKGRhdGEgJiAweERGKSk7CiAJWEdJX0Rpc3BsYXlPZmYoSHdEZXZpY2VFeHRlbnNpb24sIHBWQkluZm8pOwogCiAJLyogZGF0YSA9IHhnaWZiX3JlZ19nZXQocFZCSW5mby0+UDNjNCwgMHgxKTsgKi8KQEAgLTk2MSwxMiArMTA3NCwxNSBAQAogCS8qIHhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNjNCwgMHgwMSwgZGF0YSk7ICovLyogVHVybiBPRkYgRGlzcGxheSAqLwogCVhHSU5ld19ERFJTaXppbmczNDAoSHdEZXZpY2VFeHRlbnNpb24sIHBWQkluZm8pOwogCWRhdGEgPSB4Z2lmYl9yZWdfZ2V0KHBWQkluZm8tPlAzYzQsIDB4MjEpOwotCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNjNCwgMHgyMSwgKHVuc2lnbmVkIHNob3J0KSAoZGF0YSB8IDB4MjApKTsgLyogZW5hYmxlIHJlYWQgY2FjaGUgKi8KKwkvKiBlbmFibGUgcmVhZCBjYWNoZSAqLworCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNjNCwgMHgyMSwgKHVuc2lnbmVkIHNob3J0KSAoZGF0YSB8IDB4MjApKTsKIH0KIAotc3RhdGljIHZvaWQgUmVhZFZCSU9TVGFibERhdGEodW5zaWduZWQgY2hhciBDaGlwVHlwZSwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQorc3RhdGljIHZvaWQgUmVhZFZCSU9TVGFibERhdGEodW5zaWduZWQgY2hhciBDaGlwVHlwZSwKKwkJCSAgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwVmlkZW9NZW1vcnkgPSAodW5zaWduZWQgY2hhciAqKSBwVkJJbmZvLT5ST01BZGRyOworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnBWaWRlb01lbW9yeSA9CisJCSh1bnNpZ25lZCBjaGFyICopIHBWQkluZm8tPlJPTUFkZHI7CiAJdW5zaWduZWQgbG9uZyBpOwogCXVuc2lnbmVkIGNoYXIgaiwgazsKIAkvKiBWb2xhcmkgY3VzdG9taXplIGRhdGEgYXJlYSBlbmQgKi8KQEAgLTk4MCwyNCArMTA5NiwzNCBAQAogCQkJaWYgKGogIT0gMHhmZikgewogCQkJCWsgPSAwOwogCQkJCWRvIHsKLQkJCQkJcFZCSW5mby0+WEcyMV9MVkRTQ2FwTGlzdFtrXS5MVkRTX0NhcGFiaWxpdHkKLQkJCQkJCT0gcFZpZGVvTWVtb3J5W2ldIHwgKHBWaWRlb01lbW9yeVtpICsgMV0gPDwgOCk7CisJCQkJCXBWQkluZm8tPlhHMjFfTFZEU0NhcExpc3Rba10uCisJCQkJCQkgTFZEU19DYXBhYmlsaXR5CisJCQkJCQk9IHBWaWRlb01lbW9yeVtpXSB8CisJCQkJCQkgKHBWaWRlb01lbW9yeVtpICsgMV0gPDwgOCk7CiAJCQkJCXBWQkluZm8tPlhHMjFfTFZEU0NhcExpc3Rba10uTFZEU0hUCi0JCQkJCQk9IHBWaWRlb01lbW9yeVtpICsgMl0gfCAocFZpZGVvTWVtb3J5W2kgKyAzXSA8PCA4KTsKKwkJCQkJCT0gcFZpZGVvTWVtb3J5W2kgKyAyXSB8CisJCQkJCQkgIChwVmlkZW9NZW1vcnlbaSArIDNdIDw8IDgpOwogCQkJCQlwVkJJbmZvLT5YRzIxX0xWRFNDYXBMaXN0W2tdLkxWRFNWVAotCQkJCQkJPSBwVmlkZW9NZW1vcnlbaSArIDRdIHwgKHBWaWRlb01lbW9yeVtpCSsgNV0gPDwgOCk7CisJCQkJCQk9IHBWaWRlb01lbW9yeVtpICsgNF0gfAorCQkJCQkJICAocFZpZGVvTWVtb3J5W2kgKyA1XSA8PCA4KTsKIAkJCQkJcFZCSW5mby0+WEcyMV9MVkRTQ2FwTGlzdFtrXS5MVkRTSERFCi0JCQkJCQk9IHBWaWRlb01lbW9yeVtpICsgNl0gfCAocFZpZGVvTWVtb3J5W2kJKyA3XSA8PCA4KTsKKwkJCQkJCT0gcFZpZGVvTWVtb3J5W2kgKyA2XSB8CisJCQkJCQkgIChwVmlkZW9NZW1vcnlbaSArIDddIDw8IDgpOwogCQkJCQlwVkJJbmZvLT5YRzIxX0xWRFNDYXBMaXN0W2tdLkxWRFNWREUKLQkJCQkJCT0gcFZpZGVvTWVtb3J5W2kgKyA4XSB8IChwVmlkZW9NZW1vcnlbaSArIDldIDw8IDgpOworCQkJCQkJPSBwVmlkZW9NZW1vcnlbaSArIDhdIHwKKwkJCQkJCSAgKHBWaWRlb01lbW9yeVtpICsgOV0gPDwgOCk7CiAJCQkJCXBWQkluZm8tPlhHMjFfTFZEU0NhcExpc3Rba10uTFZEU0hGUAotCQkJCQkJPSBwVmlkZW9NZW1vcnlbaSArIDEwXSB8IChwVmlkZW9NZW1vcnlbaSArIDExXSA8PCA4KTsKKwkJCQkJCT0gcFZpZGVvTWVtb3J5W2kgKyAxMF0gfAorCQkJCQkJICAocFZpZGVvTWVtb3J5W2kgKyAxMV0gPDwgOCk7CiAJCQkJCXBWQkluZm8tPlhHMjFfTFZEU0NhcExpc3Rba10uTFZEU1ZGUAotCQkJCQkJPSBwVmlkZW9NZW1vcnlbaSArIDEyXSB8IChwVmlkZW9NZW1vcnlbaSArIDEzXSA8PCA4KTsKKwkJCQkJCT0gcFZpZGVvTWVtb3J5W2kgKyAxMl0gfAorCQkJCQkJICAocFZpZGVvTWVtb3J5W2kgKyAxM10gPDwgOCk7CiAJCQkJCXBWQkluZm8tPlhHMjFfTFZEU0NhcExpc3Rba10uTFZEU0hTWU5DCi0JCQkJCQk9IHBWaWRlb01lbW9yeVtpICsgMTRdIHwgKHBWaWRlb01lbW9yeVtpICsgMTVdIDw8IDgpOworCQkJCQkJPSBwVmlkZW9NZW1vcnlbaSArIDE0XSB8CisJCQkJCQkgIChwVmlkZW9NZW1vcnlbaSArIDE1XSA8PCA4KTsKIAkJCQkJcFZCSW5mby0+WEcyMV9MVkRTQ2FwTGlzdFtrXS5MVkRTVlNZTkMKLQkJCQkJCT0gcFZpZGVvTWVtb3J5W2kgKyAxNl0gfCAocFZpZGVvTWVtb3J5W2kgKyAxN10gPDwgOCk7CisJCQkJCQk9IHBWaWRlb01lbW9yeVtpICsgMTZdIHwKKwkJCQkJCSAgKHBWaWRlb01lbW9yeVtpICsgMTddIDw8IDgpOwogCQkJCQlwVkJJbmZvLT5YRzIxX0xWRFNDYXBMaXN0W2tdLlZDTEtEYXRhMQogCQkJCQkJPSBwVmlkZW9NZW1vcnlbaSArIDE4XTsKIAkJCQkJcFZCSW5mby0+WEcyMV9MVkRTQ2FwTGlzdFtrXS5WQ0xLRGF0YTIKQEAgLTEwMTUsMjYgKzExNDEsMzggQEAKIAkJCQkJaSArPSAyNTsKIAkJCQkJai0tOwogCQkJCQlrKys7Ci0JCQkJfSB3aGlsZSAoKGogPiAwKSAmJiAoayA8IChzaXplb2YoWEdJMjFfTENEQ2FwTGlzdCkgLyBzaXplb2Yoc3RydWN0IFhHSTIxX0xWRFNDYXBTdHJ1Y3QpKSkpOworCQkJCX0gd2hpbGUgKChqID4gMCkgJiYKKwkJCQkJIChrIDwgKHNpemVvZihYR0kyMV9MQ0RDYXBMaXN0KSAvCisJCQkJCSAgICAgICBzaXplb2Yoc3RydWN0CisJCQkJCQkJWEdJMjFfTFZEU0NhcFN0cnVjdCkpKSk7CiAJCQl9IGVsc2UgewogCQkJCXBWQkluZm8tPlhHMjFfTFZEU0NhcExpc3RbMF0uTFZEU19DYXBhYmlsaXR5Ci0JCQkJCQk9IHBWaWRlb01lbW9yeVtpXSB8IChwVmlkZW9NZW1vcnlbaSArIDFdIDw8IDgpOworCQkJCQkJPSBwVmlkZW9NZW1vcnlbaV0gfAorCQkJCQkJICAocFZpZGVvTWVtb3J5W2kgKyAxXSA8PCA4KTsKIAkJCQlwVkJJbmZvLT5YRzIxX0xWRFNDYXBMaXN0WzBdLkxWRFNIVAotCQkJCQkJPSBwVmlkZW9NZW1vcnlbaSArIDJdIHwgKHBWaWRlb01lbW9yeVtpICsgM10gPDwgOCk7CisJCQkJCQk9IHBWaWRlb01lbW9yeVtpICsgMl0gfAorCQkJCQkJICAocFZpZGVvTWVtb3J5W2kgKyAzXSA8PCA4KTsKIAkJCQlwVkJJbmZvLT5YRzIxX0xWRFNDYXBMaXN0WzBdLkxWRFNWVAotCQkJCQkJPSBwVmlkZW9NZW1vcnlbaSArIDRdIHwgKHBWaWRlb01lbW9yeVtpICsgNV0gPDwgOCk7CisJCQkJCQk9IHBWaWRlb01lbW9yeVtpICsgNF0gfAorCQkJCQkJICAocFZpZGVvTWVtb3J5W2kgKyA1XSA8PCA4KTsKIAkJCQlwVkJJbmZvLT5YRzIxX0xWRFNDYXBMaXN0WzBdLkxWRFNIREUKLQkJCQkJCT0gcFZpZGVvTWVtb3J5W2kgKyA2XSB8IChwVmlkZW9NZW1vcnlbaSArIDddIDw8IDgpOworCQkJCQkJPSBwVmlkZW9NZW1vcnlbaSArIDZdIHwKKwkJCQkJCSAgKHBWaWRlb01lbW9yeVtpICsgN10gPDwgOCk7CiAJCQkJcFZCSW5mby0+WEcyMV9MVkRTQ2FwTGlzdFswXS5MVkRTVkRFCi0JCQkJCQk9IHBWaWRlb01lbW9yeVtpICsgOF0gfCAocFZpZGVvTWVtb3J5W2kgKyA5XSA8PCA4KTsKKwkJCQkJCT0gcFZpZGVvTWVtb3J5W2kgKyA4XSB8CisJCQkJCQkgIChwVmlkZW9NZW1vcnlbaSArIDldIDw8IDgpOwogCQkJCXBWQkluZm8tPlhHMjFfTFZEU0NhcExpc3RbMF0uTFZEU0hGUAotCQkJCQkJPSBwVmlkZW9NZW1vcnlbaSArIDEwXSB8IChwVmlkZW9NZW1vcnlbaSArIDExXSA8PCA4KTsKKwkJCQkJCT0gcFZpZGVvTWVtb3J5W2kgKyAxMF0gfAorCQkJCQkJICAocFZpZGVvTWVtb3J5W2kgKyAxMV0gPDwgOCk7CiAJCQkJcFZCSW5mby0+WEcyMV9MVkRTQ2FwTGlzdFswXS5MVkRTVkZQCi0JCQkJCQk9IHBWaWRlb01lbW9yeVtpICsgMTJdIHwgKHBWaWRlb01lbW9yeVtpICsgMTNdIDw8IDgpOworCQkJCQkJPSBwVmlkZW9NZW1vcnlbaSArIDEyXSB8CisJCQkJCQkgIChwVmlkZW9NZW1vcnlbaSArIDEzXSA8PCA4KTsKIAkJCQlwVkJJbmZvLT5YRzIxX0xWRFNDYXBMaXN0WzBdLkxWRFNIU1lOQwotCQkJCQkJPSBwVmlkZW9NZW1vcnlbaSArIDE0XSB8IChwVmlkZW9NZW1vcnlbaSArIDE1XSA8PCA4KTsKKwkJCQkJCT0gcFZpZGVvTWVtb3J5W2kgKyAxNF0gfAorCQkJCQkJICAocFZpZGVvTWVtb3J5W2kgKyAxNV0gPDwgOCk7CiAJCQkJcFZCSW5mby0+WEcyMV9MVkRTQ2FwTGlzdFswXS5MVkRTVlNZTkMKLQkJCQkJCT0gcFZpZGVvTWVtb3J5W2kgKyAxNl0gfCAocFZpZGVvTWVtb3J5W2kgKyAxN10gPDwgOCk7CisJCQkJCQk9IHBWaWRlb01lbW9yeVtpICsgMTZdIHwKKwkJCQkJCSAgKHBWaWRlb01lbW9yeVtpICsgMTddIDw8IDgpOwogCQkJCXBWQkluZm8tPlhHMjFfTFZEU0NhcExpc3RbMF0uVkNMS0RhdGExCiAJCQkJCQk9IHBWaWRlb01lbW9yeVtpICsgMThdOwogCQkJCXBWQkluZm8tPlhHMjFfTFZEU0NhcExpc3RbMF0uVkNMS0RhdGEyCkBAIC0xMTk3LDIxICsxMzM1LDMxIEBACiAJaWYgKChwVmlkZW9NZW1vcnlbMHg2NV0gJiAweDAxKSkgeyAvKiBGb3IgWEcyMSBMVkRTICovCiAJCXBWQkluZm8tPklGX0RFRl9MVkRTID0gMTsKIAkJeGdpZmJfcmVnX29yKHBWQkluZm8tPlAzZDQsIDB4MzIsIExDRFNlbnNlKTsKLQkJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2Q0LCAweDM4LCB+MHhFMCwgMHhDMCk7IC8qIExWRFMgb24gY2hpcCAqLworCQkvKiBMVkRTIG9uIGNoaXAgKi8KKwkJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2Q0LCAweDM4LCB+MHhFMCwgMHhDMCk7CiAJfSBlbHNlIHsKICNlbmRpZgotCQl4Z2lmYl9yZWdfYW5kX29yKHBWQkluZm8tPlAzZDQsIDB4NEEsIH4weDAzLCAweDAzKTsgLyogRW5hYmxlIEdQSU9BL0IgcmVhZCAgKi8KKwkJLyogRW5hYmxlIEdQSU9BL0IgcmVhZCAgKi8KKwkJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2Q0LCAweDRBLCB+MHgwMywgMHgwMyk7CiAJCVRlbXAgPSB4Z2lmYl9yZWdfZ2V0KHBWQkluZm8tPlAzZDQsIDB4NDgpICYgMHhDMDsKIAkJaWYgKFRlbXAgPT0gMHhDMCkgeyAvKiBEVkkgJiBEVk8gR1BJT0EvQiBwdWxsIGhpZ2ggKi8KIAkJCVhHSU5ld19TZW5zZUxDRChId0RldmljZUV4dGVuc2lvbiwgcFZCSW5mbyk7CiAJCQl4Z2lmYl9yZWdfb3IocFZCSW5mby0+UDNkNCwgMHgzMiwgTENEU2Vuc2UpOwotCQkJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2Q0LCAweDRBLCB+MHgyMCwgMHgyMCk7IC8qIEVuYWJsZSByZWFkIEdQSU9GICovCisJCQkvKiBFbmFibGUgcmVhZCBHUElPRiAqLworCQkJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2Q0LCAweDRBLCB+MHgyMCwgMHgyMCk7CiAJCQlUZW1wID0geGdpZmJfcmVnX2dldChwVkJJbmZvLT5QM2Q0LCAweDQ4KSAmIDB4MDQ7CiAJCQlpZiAoIVRlbXApCi0JCQkJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2Q0LCAweDM4LCB+MHhFMCwgMHg4MCk7IC8qIFRNRFMgb24gY2hpcCAqLworCQkJCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UDNkNCwKKwkJCQkJCSAweDM4LAorCQkJCQkJIH4weEUwLAorCQkJCQkJIDB4ODApOyAvKiBUTURTIG9uIGNoaXAgKi8KIAkJCWVsc2UKLQkJCQl4Z2lmYl9yZWdfYW5kX29yKHBWQkluZm8tPlAzZDQsIDB4MzgsIH4weEUwLCAweEEwKTsgLyogT25seSBEVk8gb24gY2hpcCAqLwotCQkJeGdpZmJfcmVnX2FuZChwVkJJbmZvLT5QM2Q0LCAweDRBLCB+MHgyMCk7IC8qIERpc2FibGUgcmVhZCBHUElPRiAqLworCQkJCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UDNkNCwKKwkJCQkJCSAweDM4LAorCQkJCQkJIH4weEUwLAorCQkJCQkJIDB4QTApOyAvKiBPbmx5IERWTyBvbiBjaGlwICovCisJCQkvKiBEaXNhYmxlIHJlYWQgR1BJT0YgKi8KKwkJCXhnaWZiX3JlZ19hbmQocFZCSW5mby0+UDNkNCwgMHg0QSwgfjB4MjApOwogCQl9CiAjaWYgMQogCX0KQEAgLTEyMjUsMTYgKzEzNzMsMTkgQEAKIAogCXBWQkluZm8tPklGX0RFRl9MVkRTID0gMDsKIAliQ1I0QSA9IHhnaWZiX3JlZ19nZXQocFZCSW5mby0+UDNkNCwgMHg0QSk7Ci0JeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2Q0LCAweDRBLCB+MHgwNywgMHgwNyk7IC8qIEVuYWJsZSBHUElPQS9CL0MgcmVhZCAgKi8KKwkvKiBFbmFibGUgR1BJT0EvQi9DIHJlYWQgICovCisJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2Q0LCAweDRBLCB+MHgwNywgMHgwNyk7CiAJVGVtcCA9IHhnaWZiX3JlZ19nZXQocFZCSW5mby0+UDNkNCwgMHg0OCkgJiAweDA3OwogCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNkNCwgMHg0QSwgYkNSNEEpOwogCiAJaWYgKFRlbXAgPD0gMHgwMikgewogCQlwVkJJbmZvLT5JRl9ERUZfTFZEUyA9IDE7Ci0JCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UDNkNCwgMHgzOCwgfjB4RTAsIDB4QzApOyAvKiBMVkRTIHNldHRpbmcgKi8KKwkJLyogTFZEUyBzZXR0aW5nICovCisJCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UDNkNCwgMHgzOCwgfjB4RTAsIDB4QzApOwogCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzZDQsIDB4MzAsIDB4MjEpOwogCX0gZWxzZSB7Ci0JCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UDNkNCwgMHgzOCwgfjB4RTAsIDB4QTApOyAvKiBUTURTL0RWTyBzZXR0aW5nICovCisJCS8qIFRNRFMvRFZPIHNldHRpbmcgKi8KKwkJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2Q0LCAweDM4LCB+MHhFMCwgMHhBMCk7CiAJfQogCXhnaWZiX3JlZ19vcihwVkJJbmZvLT5QM2Q0LCAweDMyLCBMQ0RTZW5zZSk7CiAKQEAgLTEyNDUsNyArMTM5Niw4IEBACiAJdW5zaWduZWQgY2hhciBDUjM4LCBDUjRBLCB0ZW1wOwogCiAJQ1I0QSA9IHhnaWZiX3JlZ19nZXQocFZCSW5mby0+UDNkNCwgMHg0QSk7Ci0JeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2Q0LCAweDRBLCB+MHgxMCwgMHgxMCk7IC8qIGVuYWJsZSBHUElPRSByZWFkICovCisJLyogZW5hYmxlIEdQSU9FIHJlYWQgKi8KKwl4Z2lmYl9yZWdfYW5kX29yKHBWQkluZm8tPlAzZDQsIDB4NEEsIH4weDEwLCAweDEwKTsKIAlDUjM4ID0geGdpZmJfcmVnX2dldChwVkJJbmZvLT5QM2Q0LCAweDM4KTsKIAl0ZW1wID0gMDsKIAlpZiAoKENSMzggJiAweEUwKSA+IDB4ODApIHsKQEAgLTEyNjQsNyArMTQxNiw4IEBACiAJdW5zaWduZWQgY2hhciBDUjRBLCB0ZW1wOwogCiAJQ1I0QSA9IHhnaWZiX3JlZ19nZXQocFZCSW5mby0+UDNkNCwgMHg0QSk7Ci0JeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2Q0LCAweDRBLCB+MHgwMywgMHgwMyk7IC8qIGVuYWJsZSBHUElPQS9CL0MgcmVhZCAqLworCS8qIGVuYWJsZSBHUElPQS9CL0MgcmVhZCAqLworCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UDNkNCwgMHg0QSwgfjB4MDMsIDB4MDMpOwogCXRlbXAgPSB4Z2lmYl9yZWdfZ2V0KHBWQkluZm8tPlAzZDQsIDB4NDgpOwogCWlmICh0ZW1wIDw9IDIpCiAJCXRlbXAgJj0gMHgwMzsKQEAgLTEzNDQsNyArMTQ5Nyw4IEBACiAJcHJpbnRrKCI1Iik7CiAKIAlpZiAoSHdEZXZpY2VFeHRlbnNpb24tPmpDaGlwVHlwZSA8IFhHMjApIC8qIGt1a3UgMjAwNC8wNi8yNSAqLwotCQlYR0lfR2V0VkJUeXBlKHBWQkluZm8pOyAvKiBSdW4gWEdJX0dldFZCVHlwZSBiZWZvcmUgSW5pdFRvMzMwUG9pbnRlciAqLworCQkvKiBSdW4gWEdJX0dldFZCVHlwZSBiZWZvcmUgSW5pdFRvMzMwUG9pbnRlciAqLworCQlYR0lfR2V0VkJUeXBlKHBWQkluZm8pOwogCiAJSW5pdFRvMzMwUG9pbnRlcihId0RldmljZUV4dGVuc2lvbi0+akNoaXBUeXBlLCBwVkJJbmZvKTsKIApAQCAtMTM4MSw3ICsxNTM1LDggQEAKIAkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LCBpLCAwKTsKIAlwcmludGsoIjkiKTsKIAotCWlmIChId0RldmljZUV4dGVuc2lvbi0+akNoaXBUeXBlID09IFhHNDIpIC8qIFtIc3Vhbl0gMjAwNC8wOC8yMCBBdXRvIG92ZXIgZHJpdmVyIGZvciBYRzQyICovCisJLyogW0hzdWFuXSAyMDA0LzA4LzIwIEF1dG8gb3ZlciBkcml2ZXIgZm9yIFhHNDIgKi8KKwlpZiAoSHdEZXZpY2VFeHRlbnNpb24tPmpDaGlwVHlwZSA9PSBYRzQyKQogCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsIDB4M0IsIDB4QzApOwogCiAJLyogZm9yIChpID0gMHgzMDsgaSA8PSAweDNGOyBpKyspICovCkBAIC0xMzk3LDcgKzE1NTIsOCBAQAogCiAJLyogMy5TZXRNZW1vcnlDbG9jawogCi0JIFhHSU5ld19SQU1UeXBlID0gKGludClYR0lOZXdfR2V0WEcyMERSQU1UeXBlKEh3RGV2aWNlRXh0ZW5zaW9uLCBwVkJJbmZvKTsKKwkgWEdJTmV3X1JBTVR5cGUgPSAoaW50KVhHSU5ld19HZXRYRzIwRFJBTVR5cGUoSHdEZXZpY2VFeHRlbnNpb24sCisJCQkJCQkgICAgICBwVkJJbmZvKTsKIAkqLwogCiAJcHJpbnRrKCIxMSIpOwpAQCAtMTQxMSw4ICsxNTY3LDEwIEBACiAJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LCAweDExLCAweDBGKTsKIAl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsIDB4MUYsICpwVkJJbmZvLT5wU1IxRik7CiAJLyogeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LCAweDIwLCAweDIwKTsgKi8KLQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsIDB4MjAsIDB4QTApOyAvKiBhbGFuLCAyMDAxLzYvMjYgRnJhbWUgYnVmZmVyIGNhbiByZWFkL3dyaXRlIFNSMjAgKi8KLQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsIDB4MzYsIDB4NzApOyAvKiBIc3VhbiwgMjAwNi8wMS8wMSBIL1cgcmVxdWVzdCBmb3Igc2xvdyBjb3JuZXIgY2hpcCAqLworCS8qIGFsYW4sIDIwMDEvNi8yNiBGcmFtZSBidWZmZXIgY2FuIHJlYWQvd3JpdGUgU1IyMCAqLworCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNjNCwgMHgyMCwgMHhBMCk7CisJLyogSHN1YW4sIDIwMDYvMDEvMDEgSC9XIHJlcXVlc3QgZm9yIHNsb3cgY29ybmVyIGNoaXAgKi8KKwl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsIDB4MzYsIDB4NzApOwogCWlmIChId0RldmljZUV4dGVuc2lvbi0+akNoaXBUeXBlID09IFhHMjcpIC8qIEFsYW4gMTIvMDcvMjAwNiAqLwogCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsIDB4MzYsICpwVkJJbmZvLT5wU1IzNik7CiAKQEAgLTE0NDEsMTQgKzE1OTksMjQgQEAKIAogCQkJQ2hpcHNldElEICY9IDB4MDAwMEZGRkY7CiAKLQkJCWlmICgoQ2hpcHNldElEID09IDB4NzAwRSkgfHwgKENoaXBzZXRJRCA9PSAweDEwMjIpIHx8IChDaGlwc2V0SUQgPT0gMHgxMTA2KSB8fCAoQ2hpcHNldElEID09IDB4MTBERSkpIHsKKwkJCWlmICgoQ2hpcHNldElEID09IDB4NzAwRSkgfHwKKwkJCSAgICAoQ2hpcHNldElEID09IDB4MTAyMikgfHwKKwkJCSAgICAoQ2hpcHNldElEID09IDB4MTEwNikgfHwKKwkJCSAgICAoQ2hpcHNldElEID09IDB4MTBERSkpIHsKIAkJCQlpZiAoQ2hpcHNldElEID09IDB4MTEwNikgewotCQkJCQlpZiAoKFZlbmRvcklEID09IDB4MTAxOSkgJiYgKEdyYXBoaWNWZW5kb3JJRCA9PSAweDEwMTkpKQotCQkJCQkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2Q0LCAweDVGLCAweDBEKTsKKwkJCQkJaWYgKChWZW5kb3JJRCA9PSAweDEwMTkpICYmCisJCQkJCSAgICAoR3JhcGhpY1ZlbmRvcklEID09IDB4MTAxOSkpCisJCQkJCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzZDQsCisJCQkJCQkJICAgICAgMHg1RiwKKwkJCQkJCQkgICAgICAweDBEKTsKIAkJCQkJZWxzZQotCQkJCQkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2Q0LCAweDVGLCAweDBCKTsKKwkJCQkJCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNkNCwKKwkJCQkJCQkgICAgICAweDVGLAorCQkJCQkJCSAgICAgIDB4MEIpOwogCQkJCX0gZWxzZSB7Ci0JCQkJCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNkNCwgMHg1RiwgMHgwQik7CisJCQkJCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNkNCwKKwkJCQkJCSAgICAgIDB4NUYsCisJCQkJCQkgICAgICAweDBCKTsKIAkJCQl9CiAJCQl9CiAJCX0KQEAgLTE0NTgsMTMgKzE2MjYsMTkgQEAKIAogCQkvKiBTZXQgQUdQIGN1c3RvbWl6ZSByZWdpc3RlcnMgKGluIFNldERlZkFHUFJlZ3MpIFN0YXJ0ICovCiAJCWZvciAoaSA9IDB4NDc7IGkgPD0gMHg0QzsgaSsrKQotCQkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2Q0LCBpLCBwVkJJbmZvLT5BR1BSZWdbaSAtIDB4NDddKTsKKwkJCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNkNCwKKwkJCQkgICAgICBpLAorCQkJCSAgICAgIHBWQkluZm8tPkFHUFJlZ1tpIC0gMHg0N10pOwogCiAJCWZvciAoaSA9IDB4NzA7IGkgPD0gMHg3MTsgaSsrKQotCQkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2Q0LCBpLCBwVkJJbmZvLT5BR1BSZWdbNiArIGkgLSAweDcwXSk7CisJCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzZDQsCisJCQkJICAgICAgaSwKKwkJCQkgICAgICBwVkJJbmZvLT5BR1BSZWdbNiArIGkgLSAweDcwXSk7CiAKIAkJZm9yIChpID0gMHg3NDsgaSA8PSAweDc3OyBpKyspCi0JCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzZDQsIGksIHBWQkluZm8tPkFHUFJlZ1s4ICsgaSAtIDB4NzRdKTsKKwkJCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNkNCwKKwkJCQkgICAgICBpLAorCQkJCSAgICAgIHBWQkluZm8tPkFHUFJlZ1s4ICsgaSAtIDB4NzRdKTsKIAkJLyogU2V0IEFHUCBjdXN0b21pemUgcmVnaXN0ZXJzIChpbiBTZXREZWZBR1BSZWdzKSBFbmQgKi8KIAkJLyogW0hzdWFuXTIwMDQvMTIvMTQgQUdQIElucHV0IERlbGF5IEFkanVzdG1lbnQgb24gODUwICovCiAJCS8qICAgICAgICBvdXRsKDB4ODAwMDAwMDAsIDB4Y2Y4KTsgKi8KQEAgLTE0NzIsNyArMTY0NiwxMCBAQAogCQkvKiAgICAgICAgaWYgKENoaXBzZXRJRCA9PSAweDI1MzA4MDg2KSAqLwogCQkvKiAgICAgICAgICAgIHhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNkNCwgMHg3NywgMHhGMCk7ICovCiAKLQkJSHdEZXZpY2VFeHRlbnNpb24tPnBRdWVyeVZHQUNvbmZpZ1NwYWNlKEh3RGV2aWNlRXh0ZW5zaW9uLCAweDUwLCAwLCAmVGVtcCk7IC8qIEdldCAqLworCQlId0RldmljZUV4dGVuc2lvbi0+cFF1ZXJ5VkdBQ29uZmlnU3BhY2UoSHdEZXZpY2VFeHRlbnNpb24sCisJCQkJCQkJMHg1MCwKKwkJCQkJCQkwLAorCQkJCQkJCSZUZW1wKTsgLyogR2V0ICovCiAJCVRlbXAgPj49IDIwOwogCQlUZW1wICY9IDB4RjsKIApAQCAtMTQ5MCwxMiArMTY2NywxNiBAQAogCWlmIChId0RldmljZUV4dGVuc2lvbi0+akNoaXBUeXBlIDwgWEcyMCkgeyAvKiBrdWt1IDIwMDQvMDYvMjUgKi8KIAkJLyogU2V0IFZCICovCiAJCVhHSV9VbkxvY2tDUlQyKEh3RGV2aWNlRXh0ZW5zaW9uLCBwVkJJbmZvKTsKLQkJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QYXJ0MFBvcnQsIDB4M0YsIDB4RUYsIDB4MDApOyAvKiBhbGFuLCBkaXNhYmxlIFZpZGVvQ2FwdHVyZSAqLworCQkvKiBhbGFuLCBkaXNhYmxlIFZpZGVvQ2FwdHVyZSAqLworCQl4Z2lmYl9yZWdfYW5kX29yKHBWQkluZm8tPlBhcnQwUG9ydCwgMHgzRiwgMHhFRiwgMHgwMCk7CiAJCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UGFydDFQb3J0LCAweDAwLCAweDAwKTsKLQkJdGVtcDEgPSAodW5zaWduZWQgY2hhcikgeGdpZmJfcmVnX2dldChwVkJJbmZvLT5QM2Q0LCAweDdCKTsgLyogY2hrIGlmIEJDTEs+PTEwME1IeiAqLworCQkvKiBjaGsgaWYgQkNMSz49MTAwTUh6ICovCisJCXRlbXAxID0gKHVuc2lnbmVkIGNoYXIpIHhnaWZiX3JlZ19nZXQocFZCSW5mby0+UDNkNCwgMHg3Qik7CiAJCXRlbXAgPSAodW5zaWduZWQgY2hhcikgKCh0ZW1wMSA+PiA0KSAmIDB4MEYpOwogCi0JCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UGFydDFQb3J0LCAweDAyLCAoKnBWQkluZm8tPnBDUlQyRGF0YV8xXzIpKTsKKwkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QYXJ0MVBvcnQsCisJCQkgICAgICAweDAyLAorCQkJICAgICAgKCpwVkJJbmZvLT5wQ1JUMkRhdGFfMV8yKSk7CiAKIAkJcHJpbnRrKCIxNiIpOwogCkBAIC0xNTA0LDEwICsxNjg1LDE1IEBACiAKIAl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsIDB4MjcsIDB4MUYpOwogCi0JaWYgKChId0RldmljZUV4dGVuc2lvbi0+akNoaXBUeXBlID09IFhHNDIpCi0JCQkmJiBYR0lOZXdfR2V0WEcyMERSQU1UeXBlKEh3RGV2aWNlRXh0ZW5zaW9uLCBwVkJJbmZvKSAhPSAwKSB7IC8qIE5vdCBERFIgKi8KLQkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LCAweDMxLCAoKnBWQkluZm8tPnBTUjMxICYgMHgzRikgfCAweDQwKTsKLQkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LCAweDMyLCAoKnBWQkluZm8tPnBTUjMyICYgMHhGQykgfCAweDAxKTsKKwlpZiAoKEh3RGV2aWNlRXh0ZW5zaW9uLT5qQ2hpcFR5cGUgPT0gWEc0MikgJiYKKwkgICAgWEdJTmV3X0dldFhHMjBEUkFNVHlwZShId0RldmljZUV4dGVuc2lvbiwgcFZCSW5mbykgIT0gMCkgeworCQkvKiBOb3QgRERSICovCisJCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNjNCwKKwkJCSAgICAgIDB4MzEsCisJCQkgICAgICAoKnBWQkluZm8tPnBTUjMxICYgMHgzRikgfCAweDQwKTsKKwkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LAorCQkJICAgICAgMHgzMiwKKwkJCSAgICAgICgqcFZCSW5mby0+cFNSMzIgJiAweEZDKSB8IDB4MDEpOwogCX0gZWxzZSB7CiAJCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNjNCwgMHgzMSwgKnBWQkluZm8tPnBTUjMxKTsKIAkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LCAweDMyLCAqcFZCSW5mby0+cFNSMzIpOwpAQCAtMTUyMiw5ICsxNzA4LDE1IEBACiAJCWlmIChYR0lfQnJpZGdlSXNPbihwVkJJbmZvKSA9PSAxKSB7CiAJCQlpZiAocFZCSW5mby0+SUZfREVGX0xWRFMgPT0gMCkgewogCQkJCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UGFydDJQb3J0LCAweDAwLCAweDFDKTsKLQkJCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlBhcnQ0UG9ydCwgMHgwRCwgKnBWQkluZm8tPnBDUlQyRGF0YV80X0QpOwotCQkJCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UGFydDRQb3J0LCAweDBFLCAqcFZCSW5mby0+cENSVDJEYXRhXzRfRSk7Ci0JCQkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QYXJ0NFBvcnQsIDB4MTAsICpwVkJJbmZvLT5wQ1JUMkRhdGFfNF8xMCk7CisJCQkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QYXJ0NFBvcnQsCisJCQkJCSAgICAgIDB4MEQsCisJCQkJCSAgICAgICpwVkJJbmZvLT5wQ1JUMkRhdGFfNF9EKTsKKwkJCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlBhcnQ0UG9ydCwKKwkJCQkJICAgICAgMHgwRSwKKwkJCQkJICAgICAgKnBWQkluZm8tPnBDUlQyRGF0YV80X0UpOworCQkJCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UGFydDRQb3J0LAorCQkJCQkgICAgICAweDEwLAorCQkJCQkgICAgICAqcFZCSW5mby0+cENSVDJEYXRhXzRfMTApOwogCQkJCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UGFydDRQb3J0LCAweDBGLCAweDNGKTsKIAkJCX0KIApAQCAtMTU0MiwzMSArMTczNCw0MiBAQAogCXByaW50aygiMTgzIik7CiAJLyogWEdJTmV3X0RldGVjdE1vbml0b3IoSHdEZXZpY2VFeHRlbnNpb24pOyAqLwogCXBWQkluZm8tPklGX0RFRl9DSDcwMDcgPSAwOwotCWlmICgoSHdEZXZpY2VFeHRlbnNpb24tPmpDaGlwVHlwZSA9PSBYRzIxKSAmJiAocFZCSW5mby0+SUZfREVGX0NINzAwNykpIHsKKwlpZiAoKEh3RGV2aWNlRXh0ZW5zaW9uLT5qQ2hpcFR5cGUgPT0gWEcyMSkgJiYKKwkgICAgKHBWQkluZm8tPklGX0RFRl9DSDcwMDcpKSB7CiAJCXByaW50aygiMTg0Iik7Ci0JCVhHSV9HZXRTZW5zZVN0YXR1cyhId0RldmljZUV4dGVuc2lvbiwgcFZCSW5mbyk7IC8qIHNlbnNlIENSVDIgKi8KKwkJLyogc2Vuc2UgQ1JUMiAqLworCQlYR0lfR2V0U2Vuc2VTdGF0dXMoSHdEZXZpY2VFeHRlbnNpb24sIHBWQkluZm8pOwogCQlwcmludGsoIjE4NSIpOwogCiAJfQogCWlmIChId0RldmljZUV4dGVuc2lvbi0+akNoaXBUeXBlID09IFhHMjEpIHsKIAkJcHJpbnRrKCIxODYiKTsKIAotCQl4Z2lmYl9yZWdfYW5kX29yKHBWQkluZm8tPlAzZDQsIDB4MzIsIH5Nb25pdG9yMVNlbnNlLCBNb25pdG9yMVNlbnNlKTsgLyogWjkgZGVmYXVsdCBoYXMgQ1JUICovCisJCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UDNkNCwKKwkJCQkgMHgzMiwKKwkJCQkgfk1vbml0b3IxU2Vuc2UsCisJCQkJIE1vbml0b3IxU2Vuc2UpOyAvKiBaOSBkZWZhdWx0IGhhcyBDUlQgKi8KIAkJdGVtcCA9IEdldFhHMjFGUEJpdHMocFZCSW5mbyk7CiAJCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UDNkNCwgMHgzNywgfjB4MDEsIHRlbXApOwogCQlwcmludGsoIjE4NyIpOwogCiAJfQogCWlmIChId0RldmljZUV4dGVuc2lvbi0+akNoaXBUeXBlID09IFhHMjcpIHsKLQkJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2Q0LCAweDMyLCB+TW9uaXRvcjFTZW5zZSwgTW9uaXRvcjFTZW5zZSk7IC8qIFo5IGRlZmF1bHQgaGFzIENSVCAqLworCQl4Z2lmYl9yZWdfYW5kX29yKHBWQkluZm8tPlAzZDQsCisJCQkJIDB4MzIsCisJCQkJIH5Nb25pdG9yMVNlbnNlLAorCQkJCSBNb25pdG9yMVNlbnNlKTsgLyogWjkgZGVmYXVsdCBoYXMgQ1JUICovCiAJCXRlbXAgPSBHZXRYRzI3RlBCaXRzKHBWQkluZm8pOwogCQl4Z2lmYl9yZWdfYW5kX29yKHBWQkluZm8tPlAzZDQsIDB4MzcsIH4weDAzLCB0ZW1wKTsKIAl9CiAJcHJpbnRrKCIxOSIpOwogCi0JWEdJTmV3X1JBTVR5cGUgPSAoaW50KSBYR0lOZXdfR2V0WEcyMERSQU1UeXBlKEh3RGV2aWNlRXh0ZW5zaW9uLCBwVkJJbmZvKTsKKwlYR0lOZXdfUkFNVHlwZSA9IChpbnQpIFhHSU5ld19HZXRYRzIwRFJBTVR5cGUoSHdEZXZpY2VFeHRlbnNpb24sCisJCQkJCQkgICAgICBwVkJJbmZvKTsKIAotCVhHSU5ld19TZXREUkFNRGVmYXVsdFJlZ2lzdGVyMzQwKEh3RGV2aWNlRXh0ZW5zaW9uLCBwVkJJbmZvLT5QM2Q0LCBwVkJJbmZvKTsKKwlYR0lOZXdfU2V0RFJBTURlZmF1bHRSZWdpc3RlcjM0MChId0RldmljZUV4dGVuc2lvbiwKKwkJCQkJIHBWQkluZm8tPlAzZDQsCisJCQkJCSBwVkJJbmZvKTsKIAogCXByaW50aygiMjAiKTsKIAlYR0lOZXdfU2V0RFJBTVNpemVfMzQwKEh3RGV2aWNlRXh0ZW5zaW9uLCBwVkJJbmZvKTsKQEAgLTE1OTQsNyArMTc5Nyw5IEBACiAJLyogT3V0UG9ydExvbmcoMHhjZjgsIGJhc2UpOyAqLwogCS8qIFRlbXAgPSAoSW5Qb3J0TG9uZygweGNmYykgJiAweEZGRkYpOyAqLwogCS8qIGlmIChUZW1wID09IDB4MTAzOSkgeyAqLwotCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNjNCwgMHgyMiwgKHVuc2lnbmVkIGNoYXIpICgoKnBWQkluZm8tPnBTUjIyKSAmIDB4RkUpKTsKKwl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsCisJCSAgICAgIDB4MjIsCisJCSAgICAgICh1bnNpZ25lZCBjaGFyKSAoKCpwVkJJbmZvLT5wU1IyMikgJiAweEZFKSk7CiAJLyogfSBlbHNlIHsgKi8KIAkvKgl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsIDB4MjIsICpwVkJJbmZvLT5wU1IyMik7ICovCiAJLyogfSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX2luaXQuaCBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9pbml0LmgKaW5kZXggYjQ3MzUyYi4uNmI3NzIzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX2luaXQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfaW5pdC5oCkBAIC0xLDcgKzEsNiBAQAotI2lmbmRlZiAgX1ZCSU5JVF8KLSNkZWZpbmUgIF9WQklOSVRfCi1leHRlcm4gICB1bnNpZ25lZCBjaGFyICAgIFhHSUluaXROZXcoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24pIDsKKyNpZm5kZWYgX1ZCSU5JVF8KKyNkZWZpbmUgX1ZCSU5JVF8KK2V4dGVybiB1bnNpZ25lZCBjaGFyIFhHSUluaXROZXcoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24pOwogZXh0ZXJuIHN0cnVjdCBYR0kyMV9MVkRTQ2FwU3RydWN0ICBYR0kyMV9MQ0RDYXBMaXN0WzEzXTsKLQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9zZXRtb2RlLmMgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfc2V0bW9kZS5jCmluZGV4IDk2NjljMjIuLjI2NjliMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9zZXRtb2RlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX3NldG1vZGUuYwpAQCAtMSw1ICsxLDUgQEAKIAotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KQEAgLTcxLDcgKzcxLDggQEAKIAkJCT0gKHN0cnVjdCBYR0lfQ1JUMVRhYmxlU3RydWN0ICopIFhHSV9DUlQxVGFibGU7CiAKIAkvKiBhZGQgZm9yIG5ldyBVTklWR0FCSU9TICovCi0JLyogWEdJTmV3X1VCTENERGF0YVRhYmxlID0gKHN0cnVjdCBYR0lfTENERGF0YVRhYmxTdHJ1Y3QgKikgWEdJX0xDRERhdGFUYWJsZTsgKi8KKwkvKiBYR0lOZXdfVUJMQ0REYXRhVGFibGUgPQorCSAqCShzdHJ1Y3QgWEdJX0xDRERhdGFUYWJsU3RydWN0ICopIFhHSV9MQ0REYXRhVGFibGU7ICovCiAJLyogWEdJTmV3X1VCVFZEYXRhVGFibGUgPSAoWEdJX1RWRGF0YVRhYmxTdHJ1Y3QgKikgWEdJX1RWRGF0YVRhYmxlOyAqLwogCiAJcFZCSW5mby0+TUNMS0RhdGEgPSAoc3RydWN0IFhHSV9NQ0xLRGF0YVN0cnVjdCAqKSBYR0kzNDBOZXdfTUNMS0RhdGE7CkBAIC0xOTAsOCArMTkxLDkgQEAKIAogfQogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBYR0lfR2V0TW9kZVB0cih1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAotCQlzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCitzdGF0aWMgdW5zaWduZWQgY2hhciBYR0lfR2V0TW9kZVB0cih1bnNpZ25lZCBzaG9ydCBNb2RlTm8sCisJCQkJICAgIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkJCSAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAJdW5zaWduZWQgY2hhciBpbmRleDsKIApAQCAtMjA3LDIxICsyMDksMjQgQEAKIH0KIAogLyoKLXVuc2lnbmVkIGNoYXIgWEdJX1NldEJJT1NEYXRhKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgpIHsKK3Vuc2lnbmVkIGNoYXIgWEdJX1NldEJJT1NEYXRhKHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCSAgICAgIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4KSB7CiAJcmV0dXJuICgwKTsKIH0KICovCiAKLS8qIHVuc2lnbmVkIGNoYXIgWEdJX0NsZWFyQmFua1JlZ3ModW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCkgeworLyogdW5zaWduZWQgY2hhciBYR0lfQ2xlYXJCYW5rUmVncyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sCisJCQkJICAgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgpIHsKIAlyZXR1cm4oIDAgKSA7CiB9CiAqLwogCi1zdGF0aWMgdm9pZCBYR0lfU2V0U2VxUmVncyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IFN0YW5kVGFibGVJbmRleCwKLQkJdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKK3N0YXRpYyB2b2lkIFhHSV9TZXRTZXFSZWdzKHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCSAgIHVuc2lnbmVkIHNob3J0IFN0YW5kVGFibGVJbmRleCwKKwkJCSAgIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkJICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogCXVuc2lnbmVkIGNoYXIgdGVtcGFoLCBTUmRhdGE7Ci0KIAl1bnNpZ25lZCBzaG9ydCBpLCBtb2RlZmxhZzsKIAogCWlmIChNb2RlTm8gPD0gMHgxMykKQEAgLTI0NiwxOSArMjUxLDI1IEBACiAJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LCAweDAxLCB0ZW1wYWgpOyAvKiBTZXQgU1IxICovCiAKIAlmb3IgKGkgPSAwMjsgaSA8PSAwNDsgaSsrKSB7Ci0JCVNSZGF0YSA9IHBWQkluZm8tPlN0YW5kVGFibGVbU3RhbmRUYWJsZUluZGV4XS5TUltpIC0gMV07IC8qIEdldCBTUjIsMyw0IGZyb20gZmlsZSAqLworCQkvKiBHZXQgU1IyLDMsNCBmcm9tIGZpbGUgKi8KKwkJU1JkYXRhID0gcFZCSW5mby0+U3RhbmRUYWJsZVtTdGFuZFRhYmxlSW5kZXhdLlNSW2kgLSAxXTsKIAkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LCBpLCBTUmRhdGEpOyAvKiBTZXQgU1IyIDMgNCAqLwogCX0KIH0KIAogc3RhdGljIHZvaWQgWEdJX1NldE1pc2NSZWdzKHVuc2lnbmVkIHNob3J0IFN0YW5kVGFibGVJbmRleCwKLQkJc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQorCQkJICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKIAl1bnNpZ25lZCBjaGFyIE1pc2NkYXRhOwogCi0JTWlzY2RhdGEgPSBwVkJJbmZvLT5TdGFuZFRhYmxlW1N0YW5kVGFibGVJbmRleF0uTUlTQzsgLyogR2V0IE1pc2MgZnJvbSBmaWxlICovCisJLyogR2V0IE1pc2MgZnJvbSBmaWxlICovCisJTWlzY2RhdGEgPSBwVkJJbmZvLT5TdGFuZFRhYmxlW1N0YW5kVGFibGVJbmRleF0uTUlTQzsKIAkvKgotCWlmIChwVkJJbmZvLT5WQlR5cGUgJiAoVkJfWEdJMzAxQiB8IFZCX1hHSTMwMkIgfCBWQl9YR0kzMDFMViB8IFZCX1hHSTMwMkxWIHwgVkJfWEdJMzAxQykpIHsKKwlpZiAocFZCSW5mby0+VkJUeXBlICYgKFZCX1hHSTMwMUIgfAorCQkJICAgICAgIFZCX1hHSTMwMkIgfAorCQkJICAgICAgIFZCX1hHSTMwMUxWIHwKKwkJCSAgICAgICBWQl9YR0kzMDJMViB8CisJCQkgICAgICAgVkJfWEdJMzAxQykpIHsKIAkJaWYgKHBWQkluZm8tPlZCSW5mbyAmIFNldENSVDJUb0xDREEpIHsKIAkJCU1pc2NkYXRhIHw9IDB4MEM7CiAJCX0KQEAgLTI2OSw3ICsyODAsOCBAQAogfQogCiBzdGF0aWMgdm9pZCBYR0lfU2V0Q1JUQ1JlZ3Moc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCi0JCXVuc2lnbmVkIHNob3J0IFN0YW5kVGFibGVJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQorCQkJICAgIHVuc2lnbmVkIHNob3J0IFN0YW5kVGFibGVJbmRleCwKKwkJCSAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAJdW5zaWduZWQgY2hhciBDUlRDZGF0YTsKIAl1bnNpZ25lZCBzaG9ydCBpOwpAQCAtMjc5LDExICsyOTEsMTMgQEAKIAl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzZDQsIDB4MTEsIENSVENkYXRhKTsgLyogVW5sb2NrIENSVEMgKi8KIAogCWZvciAoaSA9IDA7IGkgPD0gMHgxODsgaSsrKSB7Ci0JCUNSVENkYXRhID0gcFZCSW5mby0+U3RhbmRUYWJsZVtTdGFuZFRhYmxlSW5kZXhdLkNSVENbaV07IC8qIEdldCBDUlRDIGZyb20gZmlsZSAqLworCQkvKiBHZXQgQ1JUQyBmcm9tIGZpbGUgKi8KKwkJQ1JUQ2RhdGEgPSBwVkJJbmZvLT5TdGFuZFRhYmxlW1N0YW5kVGFibGVJbmRleF0uQ1JUQ1tpXTsKIAkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2Q0LCBpLCBDUlRDZGF0YSk7IC8qIFNldCBDUlRDKDNkNCkgKi8KIAl9CiAJLyoKLQlpZiAoKEh3RGV2aWNlRXh0ZW5zaW9uLT5qQ2hpcFR5cGUgPT0gWEdJXzYzMCkgJiYgKEh3RGV2aWNlRXh0ZW5zaW9uLT5qQ2hpcFJldmlzaW9uID09IDB4MzApKSB7CisJaWYgKChId0RldmljZUV4dGVuc2lvbi0+akNoaXBUeXBlID09IFhHSV82MzApICYmCisJICAgIChId0RldmljZUV4dGVuc2lvbi0+akNoaXBSZXZpc2lvbiA9PSAweDMwKSkgewogCQlpZiAocFZCSW5mby0+VkJJbmZvICYgU2V0SW5TbGF2ZU1vZGUpIHsKIAkJCWlmIChwVkJJbmZvLT5WQkluZm8gJiAoU2V0Q1JUMlRvTENEIHwgU2V0Q1JUMlRvVFYpKSB7CiAJCQkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2Q0LCAweDE4LCAweEZFKTsKQEAgLTI5Myw4ICszMDcsMTAgQEAKIAkqLwogfQogCi1zdGF0aWMgdm9pZCBYR0lfU2V0QVRUUmVncyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IFN0YW5kVGFibGVJbmRleCwKLQkJdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKK3N0YXRpYyB2b2lkIFhHSV9TZXRBVFRSZWdzKHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCSAgIHVuc2lnbmVkIHNob3J0IFN0YW5kVGFibGVJbmRleCwKKwkJCSAgIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkJICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogCXVuc2lnbmVkIGNoYXIgQVJkYXRhOwogCXVuc2lnbmVkIHNob3J0IGksIG1vZGVmbGFnOwpAQCAtMzEzLDggKzMyOSw4IEBACiAJCQkJfSBlbHNlIHsKIAkJCQkJaWYgKHBWQkluZm8tPlZCSW5mbyAmIChTZXRDUlQyVG9UVgogCQkJCQkJCXwgU2V0Q1JUMlRvTENEKSkgewotCQkJCQkJaWYgKHBWQkluZm8tPlZCSW5mbwotCQkJCQkJCQkmIFNldEluU2xhdmVNb2RlKQorCQkJCQkJaWYgKHBWQkluZm8tPlZCSW5mbyAmCisJCQkJCQkgICAgU2V0SW5TbGF2ZU1vZGUpCiAJCQkJCQkJQVJkYXRhID0gMDsKIAkJCQkJfQogCQkJCX0KQEAgLTMzNCwxMyArMzUwLDE0IEBACiB9CiAKIHN0YXRpYyB2b2lkIFhHSV9TZXRHUkNSZWdzKHVuc2lnbmVkIHNob3J0IFN0YW5kVGFibGVJbmRleCwKLQkJc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQorCQkJICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogCXVuc2lnbmVkIGNoYXIgR1JkYXRhOwogCXVuc2lnbmVkIHNob3J0IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDw9IDB4MDg7IGkrKykgewotCQlHUmRhdGEgPSBwVkJJbmZvLT5TdGFuZFRhYmxlW1N0YW5kVGFibGVJbmRleF0uR1JDW2ldOyAvKiBHZXQgR1IgZnJvbSBmaWxlICovCisJCS8qIEdldCBHUiBmcm9tIGZpbGUgKi8KKwkJR1JkYXRhID0gcFZCSW5mby0+U3RhbmRUYWJsZVtTdGFuZFRhYmxlSW5kZXhdLkdSQ1tpXTsKIAkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2NlLCBpLCBHUmRhdGEpOyAvKiBTZXQgR1IoM2NlKSAqLwogCX0KIApAQCAtMzgyLDcgKzM5OSw4IEBACiAJdW5zaWduZWQgc2hvcnQgdGVtcGF4LCB0ZW1wYngsIHJlc2luZm8sIG1vZGVmbGFnLCBpbmZvZmxhZzsKIAogCWlmIChNb2RlTm8gPD0gMHgxMykKLQkJbW9kZWZsYWcgPSBwVkJJbmZvLT5TTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLlN0X01vZGVGbGFnOyAvKiBzaStTdF9Nb2RlRmxhZyAqLworCQkvKiBzaStTdF9Nb2RlRmxhZyAqLworCQltb2RlZmxhZyA9IHBWQkluZm8tPlNNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uU3RfTW9kZUZsYWc7CiAJZWxzZQogCQltb2RlZmxhZyA9IHBWQkluZm8tPkVNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uRXh0X01vZGVGbGFnOwogCkBAIC0zOTgsMTIgKzQxNiwxNCBAQAogCQkJCXRlbXBheCB8PSBTdXBwb3J0Q1JUMmluMzAxQzsKIAkJfQogCi0JCWlmIChwVkJJbmZvLT5WQkluZm8gJiAoU2V0Q1JUMlRvTENEIHwgU2V0Q1JUMlRvTENEQSkpIHsgLyogMzAxYiAqLworCQkvKiAzMDFiICovCisJCWlmIChwVkJJbmZvLT5WQkluZm8gJiAoU2V0Q1JUMlRvTENEIHwgU2V0Q1JUMlRvTENEQSkpIHsKIAkJCXRlbXBheCB8PSBTdXBwb3J0TENEOwogCiAJCQlpZiAocFZCSW5mby0+TENEUmVzSW5mbyAhPSBQYW5lbDEyODB4MTAyNCkgewogCQkJCWlmIChwVkJJbmZvLT5MQ0RSZXNJbmZvICE9IFBhbmVsMTI4MHg5NjApIHsKLQkJCQkJaWYgKHBWQkluZm8tPkxDREluZm8gJiBMQ0ROb25FeHBhbmRpbmcpIHsKKwkJCQkJaWYgKHBWQkluZm8tPkxDREluZm8gJgorCQkJCQkgICAgTENETm9uRXhwYW5kaW5nKSB7CiAJCQkJCQlpZiAocmVzaW5mbyA+PSA5KSB7CiAJCQkJCQkJdGVtcGF4ID0gMDsKIAkJCQkJCQlyZXR1cm4gMDsKQEAgLTQxNCw4ICs0MzQsOCBAQAogCQl9CiAKIAkJaWYgKHBWQkluZm8tPlZCSW5mbyAmIFNldENSVDJUb0hpVmlzaW9uVFYpIHsgLyogZm9yIEhpVFYgKi8KLQkJCWlmICgocFZCSW5mby0+VkJUeXBlICYgVkJfWEdJMzAxTFYpCi0JCQkJCSYmIChwVkJJbmZvLT5WQkV4dEluZm8gPT0gVkJfWVBiUHIxMDgwaSkpIHsKKwkJCWlmICgocFZCSW5mby0+VkJUeXBlICYgVkJfWEdJMzAxTFYpICYmCisJCQkgICAgKHBWQkluZm8tPlZCRXh0SW5mbyA9PSBWQl9ZUGJQcjEwODBpKSkgewogCQkJCXRlbXBheCB8PSBTdXBwb3J0WVBiUHI7CiAJCQkJaWYgKHBWQkluZm8tPlZCSW5mbyAmIFNldEluU2xhdmVNb2RlKSB7CiAJCQkJCWlmIChyZXNpbmZvID09IDQpCkBAIC00NDQsOSArNDY0LDExIEBACiAJCQkJfQogCQkJfQogCQl9IGVsc2UgewotCQkJaWYgKHBWQkluZm8tPlZCSW5mbyAmIChTZXRDUlQyVG9BVklERU8KLQkJCQkJfCBTZXRDUlQyVG9TVklERU8gfCBTZXRDUlQyVG9TQ0FSVAotCQkJCQl8IFNldENSVDJUb1lQYlByIHwgU2V0Q1JUMlRvSGlWaXNpb25UVikpIHsKKwkJCWlmIChwVkJJbmZvLT5WQkluZm8gJiAoU2V0Q1JUMlRvQVZJREVPIHwKKwkJCQkJICAgICAgIFNldENSVDJUb1NWSURFTyB8CisJCQkJCSAgICAgICBTZXRDUlQyVG9TQ0FSVCB8CisJCQkJCSAgICAgICBTZXRDUlQyVG9ZUGJQciB8CisJCQkJCSAgICAgICBTZXRDUlQyVG9IaVZpc2lvblRWKSkgewogCQkJCXRlbXBheCB8PSBTdXBwb3J0VFY7CiAKIAkJCQlpZiAocFZCSW5mby0+VkJUeXBlICYgKFZCX1hHSTMwMUIgfCBWQl9YR0kzMDJCCkBAIC00NTcsMTAgKzQ3OSwxMCBAQAogCiAJCQkJaWYgKCEocFZCSW5mby0+VkJJbmZvICYgU2V0UEFMVFYpKSB7CiAJCQkJCWlmIChtb2RlZmxhZyAmIE5vU3VwcG9ydFNpbXVUVikgewotCQkJCQkJaWYgKHBWQkluZm8tPlZCSW5mbwotCQkJCQkJCQkmIFNldEluU2xhdmVNb2RlKSB7Ci0JCQkJCQkJaWYgKCEocFZCSW5mby0+VkJJbmZvCi0JCQkJCQkJCQkmIFNldE5vdFNpbXVNb2RlKSkgeworCQkJCQkJaWYgKHBWQkluZm8tPlZCSW5mbyAmCisJCQkJCQkgICAgU2V0SW5TbGF2ZU1vZGUpIHsKKwkJCQkJCQlpZiAoIShwVkJJbmZvLT5WQkluZm8gJgorCQkJCQkJCSAgICAgIFNldE5vdFNpbXVNb2RlKSkgewogCQkJCQkJCQlyZXR1cm4gMDsKIAkJCQkJCQl9CiAJCQkJCQl9CkBAIC00OTAsMTAgKzUxMiwxMCBAQAogCQl9CiAJfQogCi0JZm9yICg7IHBWQkluZm8tPlJlZkluZGV4W1JlZnJlc2hSYXRlVGFibGVJbmRleCArICgqaSldLk1vZGVJRCA9PSB0ZW1wYng7ICgqaSktLSkgewotCQlpbmZvZmxhZwotCQkJCT0gcFZCSW5mby0+UmVmSW5kZXhbUmVmcmVzaFJhdGVUYWJsZUluZGV4Ci0JCQkJCQkrICgqaSldLkV4dF9JbmZvRmxhZzsKKwlmb3IgKDsgcFZCSW5mby0+UmVmSW5kZXhbUmVmcmVzaFJhdGVUYWJsZUluZGV4ICsgKCppKV0uTW9kZUlEID09CisJICAgICAgIHRlbXBieDsgKCppKS0tKSB7CisJCWluZm9mbGFnID0gcFZCSW5mby0+UmVmSW5kZXhbUmVmcmVzaFJhdGVUYWJsZUluZGV4ICsgKCppKV0uCisJCQkJRXh0X0luZm9GbGFnOwogCQlpZiAoaW5mb2ZsYWcgJiB0ZW1wYXgpCiAJCQlyZXR1cm4gMTsKIApAQCAtNTAyLDkgKzUyNCw4IEBACiAJfQogCiAJZm9yICgoKmkpID0gMDs7ICgqaSkrKykgewotCQlpbmZvZmxhZwotCQkJCT0gcFZCSW5mby0+UmVmSW5kZXhbUmVmcmVzaFJhdGVUYWJsZUluZGV4Ci0JCQkJCQkrICgqaSldLkV4dF9JbmZvRmxhZzsKKwkJaW5mb2ZsYWcgPSBwVkJJbmZvLT5SZWZJbmRleFtSZWZyZXNoUmF0ZVRhYmxlSW5kZXggKyAoKmkpXS4KKwkJCQlFeHRfSW5mb0ZsYWc7CiAJCWlmIChwVkJJbmZvLT5SZWZJbmRleFtSZWZyZXNoUmF0ZVRhYmxlSW5kZXggKyAoKmkpXS5Nb2RlSUQKIAkJCQkhPSB0ZW1wYngpIHsKIAkJCXJldHVybiAwOwpAQCAtNTIxLDcgKzU0Miw4IEBACiB7CiAJdW5zaWduZWQgc2hvcnQgc3luYywgdGVtcDsKIAotCXN5bmMgPSBwVkJJbmZvLT5SZWZJbmRleFtSZWZyZXNoUmF0ZVRhYmxlSW5kZXhdLkV4dF9JbmZvRmxhZyA+PiA4OyAvKiBkaSsweDAwICovCisJLyogZGkrMHgwMCAqLworCXN5bmMgPSBwVkJJbmZvLT5SZWZJbmRleFtSZWZyZXNoUmF0ZVRhYmxlSW5kZXhdLkV4dF9JbmZvRmxhZyA+PiA4OwogCXN5bmMgJj0gMHhDMDsKIAl0ZW1wID0gMHgyRjsKIAl0ZW1wIHw9IHN5bmM7CkBAIC01MzgsNyArNTYwLDggQEAKIAkvKiB4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzZDQsIDB4NTYsIDApOyAqLwogCS8qIHhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UDNkNCwgMHgxMSwgMHg3ZiwgMHgwMCk7ICovCiAKLQlkYXRhID0gKHVuc2lnbmVkIGNoYXIpIHhnaWZiX3JlZ19nZXQocFZCSW5mby0+UDNkNCwgMHgxMSk7IC8qIHVubG9jayBjcjAtNyAqLworCS8qIHVubG9jayBjcjAtNyAqLworCWRhdGEgPSAodW5zaWduZWQgY2hhcikgeGdpZmJfcmVnX2dldChwVkJJbmZvLT5QM2Q0LCAweDExKTsKIAlkYXRhICY9IDB4N0Y7CiAJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2Q0LCAweDExLCBkYXRhKTsKIApAQCAtNTkxLDggKzYxNCw5IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBYR0lfU2V0Q1JUMVRpbWluZ19WKHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCB1bnNpZ25lZCBzaG9ydCBNb2RlTm8sCi0JCXN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKK3N0YXRpYyB2b2lkIFhHSV9TZXRDUlQxVGltaW5nX1YodW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCQkJdW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkJCXN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKIAl1bnNpZ25lZCBjaGFyIGRhdGE7CiAJdW5zaWduZWQgc2hvcnQgaSwgajsKQEAgLTY1MCw3ICs2NzQsOCBAQAogCXVuc2lnbmVkIGNoYXIgaW5kZXgsIGRhdGE7CiAJdW5zaWduZWQgc2hvcnQgaTsKIAotCWluZGV4ID0gcFZCSW5mby0+UmVmSW5kZXhbUmVmcmVzaFJhdGVUYWJsZUluZGV4XS5FeHRfQ1JUMUNSVEM7IC8qIEdldCBpbmRleCAqLworCS8qIEdldCBpbmRleCAqLworCWluZGV4ID0gcFZCSW5mby0+UmVmSW5kZXhbUmVmcmVzaFJhdGVUYWJsZUluZGV4XS5FeHRfQ1JUMUNSVEM7CiAJaW5kZXggPSBpbmRleCAmIEluZGV4TWFzazsKIAogCWRhdGEgPSAodW5zaWduZWQgY2hhcikgeGdpZmJfcmVnX2dldChwVkJJbmZvLT5QM2Q0LCAweDExKTsKQEAgLTY4OCw5ICs3MTMsMTIgQEAKIAogCWlmIChNb2RlTm8gPD0gMHgxMykgewogCQlTdGFuZFRhYmxlSW5kZXggPSBYR0lfR2V0TW9kZVB0cihNb2RlTm8sIE1vZGVJZEluZGV4LCBwVkJJbmZvKTsKLQkJVGVtcGF4ID0gcFZCSW5mby0+U3RhbmRUYWJsZVtTdGFuZFRhYmxlSW5kZXhdLkNSVENbNF07IC8qIENSMDQgSFJTICovCi0JCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNjNCwgMHgyRSwgVGVtcGF4KTsgLyogU1IyRSBbNzowXS0+SFJTICovCi0JCVRlbXBieCA9IHBWQkluZm8tPlN0YW5kVGFibGVbU3RhbmRUYWJsZUluZGV4XS5DUlRDWzVdOyAvKiBUZW1wYng6IENSMDUgSFJFICovCisJCS8qIENSMDQgSFJTICovCisJCVRlbXBheCA9IHBWQkluZm8tPlN0YW5kVGFibGVbU3RhbmRUYWJsZUluZGV4XS5DUlRDWzRdOworCQkvKiBTUjJFIFs3OjBdLT5IUlMgKi8KKwkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LCAweDJFLCBUZW1wYXgpOworCQkvKiBUZW1wYng6IENSMDUgSFJFICovCisJCVRlbXBieCA9IHBWQkluZm8tPlN0YW5kVGFibGVbU3RhbmRUYWJsZUluZGV4XS5DUlRDWzVdOwogCQlUZW1wYnggJj0gMHgxRjsgLyogVGVtcGJ4OiBIUkVbNDowXSAqLwogCQlUZW1wY3ggPSBUZW1wYXg7CiAJCVRlbXBjeCAmPSAweEUwOyAvKiBUZW1wY3g6IEhSU1s3OjVdICovCkBAIC02OTgsMjcgKzcyNiwzNCBAQAogCQlpZiAoVGVtcGJ4IDwgKFRlbXBheCAmIDB4MUYpKSAvKiBJRiBIUkUgPCBIUlMgKi8KIAkJCVRlbXBkeCB8PSAweDIwOyAvKiBUZW1wZHg6IEhSRSA9IEhSRSArIDB4MjAgKi8KIAkJVGVtcGR4IDw8PSAyOyAvKiBUZW1wZHggPDwgMiAqLwotCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsIDB4MkYsIFRlbXBkeCk7IC8qIFNSMkYgWzc6Ml0tPkhSRSAqLworCQkvKiBTUjJGIFs3OjJdLT5IUkUgKi8KKwkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LCAweDJGLCBUZW1wZHgpOwogCQl4Z2lmYl9yZWdfYW5kX29yKHBWQkluZm8tPlAzYzQsIDB4MzAsIDB4RTMsIDAwKTsKIAotCQlUZW1wYXggPSBwVkJJbmZvLT5TdGFuZFRhYmxlW1N0YW5kVGFibGVJbmRleF0uQ1JUQ1sxNl07IC8qIFRlbXBheDogQ1IxNiBWUlMgKi8KKwkJLyogVGVtcGF4OiBDUjE2IFZSUyAqLworCQlUZW1wYXggPSBwVkJJbmZvLT5TdGFuZFRhYmxlW1N0YW5kVGFibGVJbmRleF0uQ1JUQ1sxNl07CiAJCVRlbXBieCA9IFRlbXBheDsgLyogVGVtcGJ4PVRlbXBheCAqLwogCQlUZW1wYXggJj0gMHgwMTsgLyogVGVtcGF4OiBWUlNbMF0gKi8KIAkJeGdpZmJfcmVnX29yKHBWQkluZm8tPlAzYzQsIDB4MzMsIFRlbXBheCk7IC8qIFNSMzNbMF0tPlZSUyAqLwotCQlUZW1wYXggPSBwVkJJbmZvLT5TdGFuZFRhYmxlW1N0YW5kVGFibGVJbmRleF0uQ1JUQ1s3XTsgLyogVGVtcGF4OiBDUjcgVlJTICovCisKKwkJLyogVGVtcGF4OiBDUjcgVlJTICovCisJCVRlbXBheCA9IHBWQkluZm8tPlN0YW5kVGFibGVbU3RhbmRUYWJsZUluZGV4XS5DUlRDWzddOwogCQlUZW1wZHggPSBUZW1wYnggPj4gMTsgLyogVGVtcGR4OiBWUlNbNzoxXSAqLwogCQlUZW1wY3ggPSBUZW1wYXggJiAweDA0OyAvKiBUZW1wY3g6IENSN1syXSAqLwogCQlUZW1wY3ggPDw9IDU7IC8qIFRlbXBjeFs3XTogVlJTWzhdICovCiAJCVRlbXBkeCB8PSBUZW1wY3g7IC8qIFRlbXBkeDogVlJTWzg6MV0gKi8KLQkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LCAweDM0LCBUZW1wZHgpOyAvKiBTUjM0Wzc6MF06IFZSU1s4OjFdICovCisJCS8qIFNSMzRbNzowXTogVlJTWzg6MV0gKi8KKwkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LCAweDM0LCBUZW1wZHgpOwogCi0JCVRlbXAxID0gVGVtcGN4IDw8IDE7IC8qIFRlbXAxWzhdOiBWUlNbOF0gdW5zaWduZWQgY2hhciAtPiB1bnNpZ25lZCBzaG9ydCAqLworCQkvKiBUZW1wMVs4XTogVlJTWzhdIHVuc2lnbmVkIGNoYXIgLT4gdW5zaWduZWQgc2hvcnQgKi8KKwkJVGVtcDEgPSBUZW1wY3ggPDwgMTsKIAkJVGVtcDEgfD0gVGVtcGJ4OyAvKiBUZW1wMVs4OjBdOiBWUlNbODowXSAqLwogCQlUZW1wYXggJj0gMHg4MDsgLyogVGVtcGF4WzddOiBDUjdbN10gKi8KIAkJVGVtcDIgPSBUZW1wYXggPDwgMjsgLyogVGVtcDJbOV06IFZSU1s5XSAqLwogCQlUZW1wMSB8PSBUZW1wMjsgLyogVGVtcDFbOTowXTogVlJTWzk6MF0gKi8KIAotCQlUZW1wYXggPSBwVkJJbmZvLT5TdGFuZFRhYmxlW1N0YW5kVGFibGVJbmRleF0uQ1JUQ1sxN107IC8qIENSMTYgVlJFICovCisJCS8qIENSMTYgVlJFICovCisJCVRlbXBheCA9IHBWQkluZm8tPlN0YW5kVGFibGVbU3RhbmRUYWJsZUluZGV4XS5DUlRDWzE3XTsKIAkJVGVtcGF4ICY9IDB4MEY7IC8qIFRlbXBheFszOjBdOiBWUkVbMzowXSAqLwogCQlUZW1wMiA9IFRlbXAxICYgMHgzRjA7IC8qIFRlbXAyWzk6NF06IFZSU1s5OjRdICovCiAJCVRlbXAyIHw9IFRlbXBheDsgLyogVGVtcDJbOTowXTogVlJFWzk6MF0gKi8KQEAgLTczMywxMiArNzY4LDE1IEBACiAJCVRlbXBieCA9ICh1bnNpZ25lZCBjaGFyKSBUZW1wMTsgLyogVGVtcGJ4WzE6MF06IFZSU1sxMDo5XSAqLwogCQlUZW1wYXggfD0gVGVtcGJ4OyAvKiBWUkVbNTowXVZSU1sxMDo5XSAqLwogCQlUZW1wYXggJj0gMHg3RjsKLQkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LCAweDNGLCBUZW1wYXgpOyAvKiBTUjNGIERbNzoyXS0+VlJFIERbMTowXS0+VlJTICovCisJCS8qIFNSM0YgRFs3OjJdLT5WUkUgRFsxOjBdLT5WUlMgKi8KKwkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LCAweDNGLCBUZW1wYXgpOwogCX0gZWxzZSB7CiAJCWluZGV4ID0gcFZCSW5mby0+UmVmSW5kZXhbUmVmcmVzaFJhdGVUYWJsZUluZGV4XS5FeHRfQ1JUMUNSVEM7Ci0JCVRlbXBheCA9IHBWQkluZm8tPlhHSU5FV1VCX0NSVDFUYWJsZVtpbmRleF0uQ1JbM107IC8qIFRlbXBheDogQ1I0IEhSUyAqLworCQkvKiBUZW1wYXg6IENSNCBIUlMgKi8KKwkJVGVtcGF4ID0gcFZCSW5mby0+WEdJTkVXVUJfQ1JUMVRhYmxlW2luZGV4XS5DUlszXTsKIAkJVGVtcGN4ID0gVGVtcGF4OyAvKiBUZW1wY3g6IEhSUyAqLwotCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsIDB4MkUsIFRlbXBheCk7IC8qIFNSMkVbNzowXS0+SFJTICovCisJCS8qIFNSMkVbNzowXS0+SFJTICovCisJCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNjNCwgMHgyRSwgVGVtcGF4KTsKIAogCQlUZW1wZHggPSBwVkJJbmZvLT5YR0lORVdVQl9DUlQxVGFibGVbaW5kZXhdLkNSWzVdOyAvKiBTUkIgKi8KIAkJVGVtcGR4ICY9IDB4QzA7IC8qIFRlbXBkeFs3OjZdOiBTUkJbNzo2XSAqLwpAQCAtNzY2LDE0ICs4MDQsMTcgQEAKIAkJVGVtcGF4IDw8PSAyOyAvKiBUZW1wYXhbNzoyXTogSFJFWzU6MF0gKi8KIAkJVGVtcGR4ID4+PSA2OyAvKiBUZW1wZHhbNzo2XS0+WzE6MF0gSFJTWzk6OF0gKi8KIAkJVGVtcGF4IHw9IFRlbXBkeDsgLyogSFJFWzU6MF1IUlNbOTo4XSAqLwotCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsIDB4MkYsIFRlbXBheCk7IC8qIFNSMkYgRFs3OjJdLT5IUkUsIERbMTowXS0+SFJTICovCisJCS8qIFNSMkYgRFs3OjJdLT5IUkUsIERbMTowXS0+SFJTICovCisJCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNjNCwgMHgyRiwgVGVtcGF4KTsKIAkJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2M0LCAweDMwLCAweEUzLCAwMCk7CiAKLQkJVGVtcGF4ID0gcFZCSW5mby0+WEdJTkVXVUJfQ1JUMVRhYmxlW2luZGV4XS5DUlsxMF07IC8qIENSMTAgVlJTICovCisJCS8qIENSMTAgVlJTICovCisJCVRlbXBheCA9IHBWQkluZm8tPlhHSU5FV1VCX0NSVDFUYWJsZVtpbmRleF0uQ1JbMTBdOwogCQlUZW1wYnggPSBUZW1wYXg7IC8qIFRlbXBieDogVlJTICovCiAJCVRlbXBheCAmPSAweDAxOyAvKiBUZW1wYXhbMF06IFZSU1swXSAqLwogCQl4Z2lmYl9yZWdfb3IocFZCSW5mby0+UDNjNCwgMHgzMywgVGVtcGF4KTsgLyogU1IzM1swXS0+VlJTWzBdICovCi0JCVRlbXBheCA9IHBWQkluZm8tPlhHSU5FV1VCX0NSVDFUYWJsZVtpbmRleF0uQ1JbOV07IC8qIENSN1syXVs3XSBWUkUgKi8KKwkJLyogQ1I3WzJdWzddIFZSRSAqLworCQlUZW1wYXggPSBwVkJJbmZvLT5YR0lORVdVQl9DUlQxVGFibGVbaW5kZXhdLkNSWzldOwogCQlUZW1wY3ggPSBUZW1wYnggPj4gMTsgLyogVGVtcGN4WzY6MF06IFZSU1s3OjFdICovCiAJCVRlbXBkeCA9IFRlbXBheCAmIDB4MDQ7IC8qIFRlbXBkeFsyXTogQ1I3WzJdICovCiAJCVRlbXBkeCA8PD0gNTsgLyogVGVtcGR4WzddOiBWUlNbOF0gKi8KQEAgLTc4NiwxNSArODI3LDE4IEBACiAJCVRlbXBheCAmPSAweDgwOwogCQlUZW1wMiA9IFRlbXBheCA8PCAyOyAvKiBUZW1wMls5XTogVlJTWzldICovCiAJCVRlbXAxIHw9IFRlbXAyOyAvKiBUZW1wMVs5OjBdOiBWUlNbOTowXSAqLwotCQlUZW1wYXggPSBwVkJJbmZvLT5YR0lORVdVQl9DUlQxVGFibGVbaW5kZXhdLkNSWzE0XTsgLyogVGVtcGF4OiBTUkEgKi8KKwkJLyogVGVtcGF4OiBTUkEgKi8KKwkJVGVtcGF4ID0gcFZCSW5mby0+WEdJTkVXVUJfQ1JUMVRhYmxlW2luZGV4XS5DUlsxNF07CiAJCVRlbXBheCAmPSAweDA4OyAvKiBUZW1wYXhbM106IFZSU1szXSAqLwogCQlUZW1wMiA9IFRlbXBheDsKIAkJVGVtcDIgPDw9IDc7IC8qIFRlbXAyWzEwXTogVlJTWzEwXSAqLwogCQlUZW1wMSB8PSBUZW1wMjsgLyogVGVtcDFbMTA6MF06IFZSU1sxMDowXSAqLwogCi0JCVRlbXBheCA9IHBWQkluZm8tPlhHSU5FV1VCX0NSVDFUYWJsZVtpbmRleF0uQ1JbMTFdOyAvKiBUZW1wYXg6IENSMTEgVlJFICovCisJCS8qIFRlbXBheDogQ1IxMSBWUkUgKi8KKwkJVGVtcGF4ID0gcFZCSW5mby0+WEdJTkVXVUJfQ1JUMVRhYmxlW2luZGV4XS5DUlsxMV07CiAJCVRlbXBheCAmPSAweDBGOyAvKiBUZW1wYXhbMzowXTogVlJFWzM6MF0gKi8KLQkJVGVtcGJ4ID0gcFZCSW5mby0+WEdJTkVXVUJfQ1JUMVRhYmxlW2luZGV4XS5DUlsxNF07IC8qIFRlbXBieDogU1JBICovCisJCS8qIFRlbXBieDogU1JBICovCisJCVRlbXBieCA9IHBWQkluZm8tPlhHSU5FV1VCX0NSVDFUYWJsZVtpbmRleF0uQ1JbMTRdOwogCQlUZW1wYnggJj0gMHgyMDsgLyogVGVtcGJ4WzVdOiBWUkVbNV0gKi8KIAkJVGVtcGJ4ID4+PSAxOyAvKiBUZW1wYnhbNF06IFZSRVs0XSAqLwogCQlUZW1wYXggfD0gVGVtcGJ4OyAvKiBUZW1wYXhbNDowXTogVlJFWzQ6MF0gKi8KQEAgLTgxMywyMSArODU3LDI2IEBACiAJCVRlbXBieCA9ICh1bnNpZ25lZCBjaGFyKSBUZW1wMTsKIAkJVGVtcGF4IHw9IFRlbXBieDsgLyogVGVtcGF4Wzc6MF06IFZSRVs1OjBdVlJTWzEwOjldICovCiAJCVRlbXBheCAmPSAweDdGOwotCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsIDB4M0YsIFRlbXBheCk7IC8qIFNSM0YgRFs3OjJdLT5WUkUgRFsxOjBdLT5WUlMgKi8KKwkJLyogU1IzRiBEWzc6Ml0tPlZSRSBEWzE6MF0tPlZSUyAqLworCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsIDB4M0YsIFRlbXBheCk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBYR0lfU2V0WEcyN0NSVEModW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKLQkJdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LAotCQlzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCitzdGF0aWMgdm9pZCBYR0lfU2V0WEcyN0NSVEModW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkJICAgIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkJICAgIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwKKwkJCSAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAJdW5zaWduZWQgc2hvcnQgU3RhbmRUYWJsZUluZGV4LCBpbmRleCwgVGVtcGF4LCBUZW1wYngsIFRlbXBjeCwgVGVtcGR4OwogCiAJaWYgKE1vZGVObyA8PSAweDEzKSB7CiAJCVN0YW5kVGFibGVJbmRleCA9IFhHSV9HZXRNb2RlUHRyKE1vZGVObywgTW9kZUlkSW5kZXgsIHBWQkluZm8pOwotCQlUZW1wYXggPSBwVkJJbmZvLT5TdGFuZFRhYmxlW1N0YW5kVGFibGVJbmRleF0uQ1JUQ1s0XTsgLyogQ1IwNCBIUlMgKi8KLQkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LCAweDJFLCBUZW1wYXgpOyAvKiBTUjJFIFs3OjBdLT5IUlMgKi8KLQkJVGVtcGJ4ID0gcFZCSW5mby0+U3RhbmRUYWJsZVtTdGFuZFRhYmxlSW5kZXhdLkNSVENbNV07IC8qIFRlbXBieDogQ1IwNSBIUkUgKi8KKwkJLyogQ1IwNCBIUlMgKi8KKwkJVGVtcGF4ID0gcFZCSW5mby0+U3RhbmRUYWJsZVtTdGFuZFRhYmxlSW5kZXhdLkNSVENbNF07CisJCS8qIFNSMkUgWzc6MF0tPkhSUyAqLworCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsIDB4MkUsIFRlbXBheCk7CisJCS8qIFRlbXBieDogQ1IwNSBIUkUgKi8KKwkJVGVtcGJ4ID0gcFZCSW5mby0+U3RhbmRUYWJsZVtTdGFuZFRhYmxlSW5kZXhdLkNSVENbNV07CiAJCVRlbXBieCAmPSAweDFGOyAvKiBUZW1wYng6IEhSRVs0OjBdICovCiAJCVRlbXBjeCA9IFRlbXBheDsKIAkJVGVtcGN4ICY9IDB4RTA7IC8qIFRlbXBjeDogSFJTWzc6NV0gKi8KQEAgLTgzNSwzOSArODg0LDUwIEBACiAJCWlmIChUZW1wYnggPCAoVGVtcGF4ICYgMHgxRikpIC8qIElGIEhSRSA8IEhSUyAqLwogCQkJVGVtcGR4IHw9IDB4MjA7IC8qIFRlbXBkeDogSFJFID0gSFJFICsgMHgyMCAqLwogCQlUZW1wZHggPDw9IDI7IC8qIFRlbXBkeCA8PCAyICovCi0JCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNjNCwgMHgyRiwgVGVtcGR4KTsgLyogU1IyRiBbNzoyXS0+SFJFICovCisJCS8qIFNSMkYgWzc6Ml0tPkhSRSAqLworCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsIDB4MkYsIFRlbXBkeCk7CiAJCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UDNjNCwgMHgzMCwgMHhFMywgMDApOwogCi0JCVRlbXBheCA9IHBWQkluZm8tPlN0YW5kVGFibGVbU3RhbmRUYWJsZUluZGV4XS5DUlRDWzE2XTsgLyogVGVtcGF4OiBDUjEwIFZSUyAqLworCQkvKiBUZW1wYXg6IENSMTAgVlJTICovCisJCVRlbXBheCA9IHBWQkluZm8tPlN0YW5kVGFibGVbU3RhbmRUYWJsZUluZGV4XS5DUlRDWzE2XTsKIAkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LCAweDM0LCBUZW1wYXgpOyAvKiBTUjM0Wzc6MF0tPlZSUyAqLwogCQlUZW1wY3ggPSBUZW1wYXg7IC8qIFRlbXBjeD1UZW1wYXg9VlJTWzc6MF0gKi8KLQkJVGVtcGF4ID0gcFZCSW5mby0+U3RhbmRUYWJsZVtTdGFuZFRhYmxlSW5kZXhdLkNSVENbN107IC8qIFRlbXBheFs3XVsyXTogQ1I3WzddWzJdIFZSU1s5XVs4XSAqLworCQkvKiBUZW1wYXhbN11bMl06IENSN1s3XVsyXSBWUlNbOV1bOF0gKi8KKwkJVGVtcGF4ID0gcFZCSW5mby0+U3RhbmRUYWJsZVtTdGFuZFRhYmxlSW5kZXhdLkNSVENbN107CiAJCVRlbXBieCA9IFRlbXBheDsgLyogVGVtcGJ4PUNSMDcgKi8KIAkJVGVtcGF4ICY9IDB4MDQ7IC8qIFRlbXBheFsyXTogQ1IwN1syXSBWUlNbOF0gKi8KIAkJVGVtcGF4ID4+PSAyOwotCQl4Z2lmYl9yZWdfYW5kX29yKHBWQkluZm8tPlAzYzQsIDB4MzUsIH4weDAxLCBUZW1wYXgpOyAvKiBTUjM1IERbMF0tPlZSUyBEWzhdICovCisJCS8qIFNSMzUgRFswXS0+VlJTIERbOF0gKi8KKwkJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2M0LCAweDM1LCB+MHgwMSwgVGVtcGF4KTsKIAkJVGVtcGN4IHw9IChUZW1wYXggPDwgOCk7IC8qIFRlbXBjeFs4XSB8PSBWUlNbOF0gKi8KIAkJVGVtcGN4IHw9IChUZW1wYnggJiAweDgwKSA8PCAyOyAvKiBUZW1wY3hbOV0gfD0gVlJTWzldICovCiAKLQkJVGVtcGF4ID0gcFZCSW5mby0+U3RhbmRUYWJsZVtTdGFuZFRhYmxlSW5kZXhdLkNSVENbMTddOyAvKiBDUjExIFZSRSAqLworCQkvKiBDUjExIFZSRSAqLworCQlUZW1wYXggPSBwVkJJbmZvLT5TdGFuZFRhYmxlW1N0YW5kVGFibGVJbmRleF0uQ1JUQ1sxN107CiAJCVRlbXBheCAmPSAweDBGOyAvKiBUZW1wYXg6IFZSRVszOjBdICovCiAJCVRlbXBieCA9IFRlbXBjeDsgLyogVGVtcGJ4PVRlbXBjeD1WUlNbOTowXSAqLwogCQlUZW1wYnggJj0gMHgzRjA7IC8qIFRlbXBieFs5OjRdOiBWUlNbOTo0XSAqLwogCQlUZW1wYnggfD0gVGVtcGF4OyAvKiBUZW1wYnhbOTowXTogVlJFWzk6MF0gKi8KIAkJaWYgKFRlbXBheCA8PSAoVGVtcGN4ICYgMHgwRikpIC8qIFZSRVszOjBdPD1WUlNbMzowXSAqLwogCQkJVGVtcGJ4IHw9IDB4MTA7IC8qIFRlbXBieDogVlJFICsgMHgxMCAqLwotCQlUZW1wYXggPSAodW5zaWduZWQgY2hhcikgVGVtcGJ4ICYgMHhGRjsgLyogVGVtcGF4Wzc6MF06IFZSRVs3OjBdICovCisJCS8qIFRlbXBheFs3OjBdOiBWUkVbNzowXSAqLworCQlUZW1wYXggPSAodW5zaWduZWQgY2hhcikgVGVtcGJ4ICYgMHhGRjsKIAkJVGVtcGF4IDw8PSAyOyAvKiBUZW1wYXggPDwgMjogVlJFWzU6MF0gKi8KIAkJVGVtcGN4ID0gKFRlbXBjeCAmIDB4NjAwKSA+PiA4OyAvKiBUZW1wY3ggVlJTWzEwOjldICovCi0JCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UDNjNCwgMHgzRiwgfjB4RkMsIFRlbXBheCk7IC8qIFNSM0YgRFs3OjJdLT5WUkUgRFs1OjBdICovCi0JCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UDNjNCwgMHgzNSwgfjB4MDYsIFRlbXBjeCk7IC8qIFNSMzUgRFsyOjFdLT5WUlNbMTA6OV0gKi8KKwkJLyogU1IzRiBEWzc6Ml0tPlZSRSBEWzU6MF0gKi8KKwkJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2M0LCAweDNGLCB+MHhGQywgVGVtcGF4KTsKKwkJLyogU1IzNSBEWzI6MV0tPlZSU1sxMDo5XSAqLworCQl4Z2lmYl9yZWdfYW5kX29yKHBWQkluZm8tPlAzYzQsIDB4MzUsIH4weDA2LCBUZW1wY3gpOwogCX0gZWxzZSB7CiAJCWluZGV4ID0gcFZCSW5mby0+UmVmSW5kZXhbUmVmcmVzaFJhdGVUYWJsZUluZGV4XS5FeHRfQ1JUMUNSVEM7Ci0JCVRlbXBheCA9IHBWQkluZm8tPlhHSU5FV1VCX0NSVDFUYWJsZVtpbmRleF0uQ1JbM107IC8qIFRlbXBheDogQ1I0IEhSUyAqLworCQkvKiBUZW1wYXg6IENSNCBIUlMgKi8KKwkJVGVtcGF4ID0gcFZCSW5mby0+WEdJTkVXVUJfQ1JUMVRhYmxlW2luZGV4XS5DUlszXTsKIAkJVGVtcGJ4ID0gVGVtcGF4OyAvKiBUZW1wYng6IEhSU1s3OjBdICovCi0JCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNjNCwgMHgyRSwgVGVtcGF4KTsgLyogU1IyRVs3OjBdLT5IUlMgKi8KKwkJLyogU1IyRVs3OjBdLT5IUlMgKi8KKwkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LCAweDJFLCBUZW1wYXgpOwogCi0JCVRlbXBheCA9IHBWQkluZm8tPlhHSU5FV1VCX0NSVDFUYWJsZVtpbmRleF0uQ1JbNV07IC8qIFNSMEIgKi8KKwkJLyogU1IwQiAqLworCQlUZW1wYXggPSBwVkJJbmZvLT5YR0lORVdVQl9DUlQxVGFibGVbaW5kZXhdLkNSWzVdOwogCQlUZW1wYXggJj0gMHhDMDsgLyogVGVtcGF4Wzc6Nl06IFNSMEJbNzo2XTogSFJTWzk6OF0qLwogCQlUZW1wYnggfD0gKFRlbXBheCA8PCAyKTsgLyogVGVtcGJ4OiBIUlNbOTowXSAqLwogCkBAIC04ODMsNyArOTQzLDggQEAKIAkJVGVtcGJ4ID0gVGVtcGJ4ICYgMHgzQzA7IC8qIFRlbXBieFs5OjZdOiBIUlNbOTo2XSAqLwogCQlUZW1wYnggfD0gVGVtcGN4OyAvKiBUZW1wYng6IEhSU1s5OjZdSFJFWzU6MF0gKi8KIAotCQlUZW1wYXggPSBwVkJJbmZvLT5YR0lORVdVQl9DUlQxVGFibGVbaW5kZXhdLkNSWzNdOyAvKiBUZW1wYXg6IENSNCBIUlMgKi8KKwkJLyogVGVtcGF4OiBDUjQgSFJTICovCisJCVRlbXBheCA9IHBWQkluZm8tPlhHSU5FV1VCX0NSVDFUYWJsZVtpbmRleF0uQ1JbM107CiAJCVRlbXBheCAmPSAweDNGOyAvKiBUZW1wYXg6IEhSU1s1OjBdICovCiAJCWlmIChUZW1wY3ggPD0gVGVtcGF4KSAvKiBIUkVbNTowXSA8IEhSU1s1OjBdICovCiAJCQlUZW1wYnggKz0gMHg0MDsgLyogVGVtcGJ4PSBUZW1wYnggKyAweDQwIDogSFJFWzk6MF0qLwpAQCAtODkyLDI3ICs5NTMsMzUgQEAKIAkJVGVtcGF4ICY9IDB4QzA7IC8qIFRlbXBheFs3OjZdOiBTUjBCWzc6Nl06IEhSU1s5OjhdKi8KIAkJVGVtcGF4ID4+PSA2OyAvKiBUZW1wYXhbMTowXTogSFJTWzk6OF0qLwogCQlUZW1wYXggfD0gKChUZW1wYnggPDwgMikgJiAweEZGKTsgLyogVGVtcGF4Wzc6Ml06IEhSRVs1OjBdICovCi0JCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNjNCwgMHgyRiwgVGVtcGF4KTsgLyogU1IyRiBbNzoyXVsxOjBdOiBIUkVbNTowXUhSU1s5OjhdICovCisJCS8qIFNSMkYgWzc6Ml1bMTowXTogSFJFWzU6MF1IUlNbOTo4XSAqLworCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsIDB4MkYsIFRlbXBheCk7CiAJCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UDNjNCwgMHgzMCwgMHhFMywgMDApOwogCi0JCVRlbXBheCA9IHBWQkluZm8tPlhHSU5FV1VCX0NSVDFUYWJsZVtpbmRleF0uQ1JbMTBdOyAvKiBDUjEwIFZSUyAqLwotCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsIDB4MzQsIFRlbXBheCk7IC8qIFNSMzRbNzowXS0+VlJTWzc6MF0gKi8KKwkJLyogQ1IxMCBWUlMgKi8KKwkJVGVtcGF4ID0gcFZCSW5mby0+WEdJTkVXVUJfQ1JUMVRhYmxlW2luZGV4XS5DUlsxMF07CisJCS8qIFNSMzRbNzowXS0+VlJTWzc6MF0gKi8KKwkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LCAweDM0LCBUZW1wYXgpOwogCiAJCVRlbXBjeCA9IFRlbXBheDsgLyogVGVtcGN4IDw9IFZSU1s3OjBdICovCi0JCVRlbXBheCA9IHBWQkluZm8tPlhHSU5FV1VCX0NSVDFUYWJsZVtpbmRleF0uQ1JbOV07IC8qIENSN1s3XVsyXSBWUlNbOV1bOF0gKi8KKwkJLyogQ1I3WzddWzJdIFZSU1s5XVs4XSAqLworCQlUZW1wYXggPSBwVkJJbmZvLT5YR0lORVdVQl9DUlQxVGFibGVbaW5kZXhdLkNSWzldOwogCQlUZW1wYnggPSBUZW1wYXg7IC8qIFRlbXBieCA8PSBDUjA3Wzc6MF0gKi8KIAkJVGVtcGF4ID0gVGVtcGF4ICYgMHgwNDsgLyogVGVtcGF4WzJdOiBDUjdbMl06IFZSU1s4XSAqLwogCQlUZW1wYXggPj49IDI7IC8qIFRlbXBheFswXTogVlJTWzhdICovCi0JCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UDNjNCwgMHgzNSwgfjB4MDEsIFRlbXBheCk7IC8qIFNSMzVbMF06IFZSU1s4XSAqLworCQkvKiBTUjM1WzBdOiBWUlNbOF0gKi8KKwkJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2M0LCAweDM1LCB+MHgwMSwgVGVtcGF4KTsKIAkJVGVtcGN4IHw9IChUZW1wYXggPDwgOCk7IC8qIFRlbXBjeCA8PSBWUlNbODowXSAqLwogCQlUZW1wY3ggfD0gKChUZW1wYnggJiAweDgwKSA8PCAyKTsgLyogVGVtcGN4IDw9IFZSU1s5OjBdICovCi0JCVRlbXBheCA9IHBWQkluZm8tPlhHSU5FV1VCX0NSVDFUYWJsZVtpbmRleF0uQ1JbMTRdOyAvKiBUZW1wYXg6IFNSMEEgKi8KKwkJLyogVGVtcGF4OiBTUjBBICovCisJCVRlbXBheCA9IHBWQkluZm8tPlhHSU5FV1VCX0NSVDFUYWJsZVtpbmRleF0uQ1JbMTRdOwogCQlUZW1wYXggJj0gMHgwODsgLyogU1IwQVszXSBWUlNbMTBdICovCiAJCVRlbXBjeCB8PSAoVGVtcGF4IDw8IDcpOyAvKiBUZW1wY3ggPD0gVlJTWzEwOjBdICovCiAKLQkJVGVtcGF4ID0gcFZCSW5mby0+WEdJTkVXVUJfQ1JUMVRhYmxlW2luZGV4XS5DUlsxMV07IC8qIFRlbXBheDogQ1IxMSBWUkUgKi8KKwkJLyogVGVtcGF4OiBDUjExIFZSRSAqLworCQlUZW1wYXggPSBwVkJJbmZvLT5YR0lORVdVQl9DUlQxVGFibGVbaW5kZXhdLkNSWzExXTsKIAkJVGVtcGF4ICY9IDB4MEY7IC8qIFRlbXBheFszOjBdOiBWUkVbMzowXSAqLwotCQlUZW1wYnggPSBwVkJJbmZvLT5YR0lORVdVQl9DUlQxVGFibGVbaW5kZXhdLkNSWzE0XTsgLyogVGVtcGJ4OiBTUjBBICovCisJCS8qIFRlbXBieDogU1IwQSAqLworCQlUZW1wYnggPSBwVkJJbmZvLT5YR0lORVdVQl9DUlQxVGFibGVbaW5kZXhdLkNSWzE0XTsKIAkJVGVtcGJ4ICY9IDB4MjA7IC8qIFRlbXBieFs1XTogU1IwQVs1XTogVlJFWzRdICovCiAJCVRlbXBieCA+Pj0gMTsgLyogVGVtcGJ4WzRdOiBWUkVbNF0gKi8KIAkJVGVtcGF4IHw9IFRlbXBieDsgLyogVGVtcGF4WzQ6MF06IFZSRVs0OjBdICovCkBAIC05MjMsMTAgKzk5MiwxMyBAQAogCQlpZiAoVGVtcGJ4IDw9IFRlbXBjeCkgLyogVlJFIDw9IFZSUyAqLwogCQkJVGVtcGJ4IHw9IDB4MjA7IC8qIFZSRSArIDB4MjAgKi8KIAotCQlUZW1wYXggPSAoVGVtcGJ4IDw8IDIpICYgMHhGRjsgLyogVGVtcGF4OiBUZW1wYXhbNzowXTsgVlJFWzU6MF0wMCAqLwotCQl4Z2lmYl9yZWdfYW5kX29yKHBWQkluZm8tPlAzYzQsIDB4M0YsIH4weEZDLCBUZW1wYXgpOyAvKiBTUjNGWzc6Ml06VlJFWzU6MF0gKi8KKwkJLyogVGVtcGF4OiBUZW1wYXhbNzowXTsgVlJFWzU6MF0wMCAqLworCQlUZW1wYXggPSAoVGVtcGJ4IDw8IDIpICYgMHhGRjsKKwkJLyogU1IzRls3OjJdOlZSRVs1OjBdICovCisJCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UDNjNCwgMHgzRiwgfjB4RkMsIFRlbXBheCk7CiAJCVRlbXBheCA9IFRlbXBjeCA+PiA4OwotCQl4Z2lmYl9yZWdfYW5kX29yKHBWQkluZm8tPlAzYzQsIDB4MzUsIH4weDA3LCBUZW1wYXgpOyAvKiBTUjM1WzI6MF06VlJTWzEwOjhdICovCisJCS8qIFNSMzVbMjowXTpWUlNbMTA6OF0gKi8KKwkJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2M0LCAweDM1LCB+MHgwNywgVGVtcGF4KTsKIAl9CiB9CiAKQEAgLTk3MCwyMCArMTA0MiwyNSBAQAogCWlmIChNb2RlTm8gPD0gMHgxMykgewogCQliM0NDID0gKHVuc2lnbmVkIGNoYXIpIGluYihYR0lfUDNjYyk7CiAJCWlmIChiM0NDICYgMHg0MCkKLQkJCXhnaWZiX3JlZ19vcihwVkJJbmZvLT5QM2M0LCAweDMwLCAweDIwKTsgLyogSHN5bmMgcG9sYXJpdHkgKi8KKwkJCS8qIEhzeW5jIHBvbGFyaXR5ICovCisJCQl4Z2lmYl9yZWdfb3IocFZCSW5mby0+UDNjNCwgMHgzMCwgMHgyMCk7CiAJCWlmIChiM0NDICYgMHg4MCkKLQkJCXhnaWZiX3JlZ19vcihwVkJJbmZvLT5QM2M0LCAweDM1LCAweDgwKTsgLyogVnN5bmMgcG9sYXJpdHkgKi8KKwkJCS8qIFZzeW5jIHBvbGFyaXR5ICovCisJCQl4Z2lmYl9yZWdfb3IocFZCSW5mby0+UDNjNCwgMHgzNSwgMHg4MCk7CiAJfSBlbHNlIHsKIAkJRGF0YSA9IHBWQkluZm8tPlJlZkluZGV4W1JlZnJlc2hSYXRlVGFibGVJbmRleF0uRXh0X0luZm9GbGFnOwogCQlpZiAoRGF0YSAmIDB4NDAwMCkKLQkJCXhnaWZiX3JlZ19vcihwVkJJbmZvLT5QM2M0LCAweDMwLCAweDIwKTsgLyogSHN5bmMgcG9sYXJpdHkgKi8KKwkJCS8qIEhzeW5jIHBvbGFyaXR5ICovCisJCQl4Z2lmYl9yZWdfb3IocFZCSW5mby0+UDNjNCwgMHgzMCwgMHgyMCk7CiAJCWlmIChEYXRhICYgMHg4MDAwKQotCQkJeGdpZmJfcmVnX29yKHBWQkluZm8tPlAzYzQsIDB4MzUsIDB4ODApOyAvKiBWc3luYyBwb2xhcml0eSAqLworCQkJLyogVnN5bmMgcG9sYXJpdHkgKi8KKwkJCXhnaWZiX3JlZ19vcihwVkJJbmZvLT5QM2M0LCAweDM1LCAweDgwKTsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIFhHSV9TZXRYRzI3TENEKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbywKLQkJdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCB1bnNpZ25lZCBzaG9ydCBNb2RlTm8pCisJCQkgICB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsCisJCQkgICB1bnNpZ25lZCBzaG9ydCBNb2RlTm8pCiB7CiAJdW5zaWduZWQgc2hvcnQgRGF0YSwgVGVtcCwgYjNDQzsKIAl1bnNpZ25lZCBzaG9ydCBYR0lfUDNjYzsKQEAgLTEwMTgsMTUgKzEwOTUsMTkgQEAKIAlpZiAoTW9kZU5vIDw9IDB4MTMpIHsKIAkJYjNDQyA9ICh1bnNpZ25lZCBjaGFyKSBpbmIoWEdJX1AzY2MpOwogCQlpZiAoYjNDQyAmIDB4NDApCi0JCQl4Z2lmYl9yZWdfb3IocFZCSW5mby0+UDNjNCwgMHgzMCwgMHgyMCk7IC8qIEhzeW5jIHBvbGFyaXR5ICovCisJCQkvKiBIc3luYyBwb2xhcml0eSAqLworCQkJeGdpZmJfcmVnX29yKHBWQkluZm8tPlAzYzQsIDB4MzAsIDB4MjApOwogCQlpZiAoYjNDQyAmIDB4ODApCi0JCQl4Z2lmYl9yZWdfb3IocFZCSW5mby0+UDNjNCwgMHgzNSwgMHg4MCk7IC8qIFZzeW5jIHBvbGFyaXR5ICovCisJCQkvKiBWc3luYyBwb2xhcml0eSAqLworCQkJeGdpZmJfcmVnX29yKHBWQkluZm8tPlAzYzQsIDB4MzUsIDB4ODApOwogCX0gZWxzZSB7CiAJCURhdGEgPSBwVkJJbmZvLT5SZWZJbmRleFtSZWZyZXNoUmF0ZVRhYmxlSW5kZXhdLkV4dF9JbmZvRmxhZzsKIAkJaWYgKERhdGEgJiAweDQwMDApCi0JCQl4Z2lmYl9yZWdfb3IocFZCSW5mby0+UDNjNCwgMHgzMCwgMHgyMCk7IC8qIEhzeW5jIHBvbGFyaXR5ICovCisJCQkvKiBIc3luYyBwb2xhcml0eSAqLworCQkJeGdpZmJfcmVnX29yKHBWQkluZm8tPlAzYzQsIDB4MzAsIDB4MjApOwogCQlpZiAoRGF0YSAmIDB4ODAwMCkKLQkJCXhnaWZiX3JlZ19vcihwVkJJbmZvLT5QM2M0LCAweDM1LCAweDgwKTsgLyogVnN5bmMgcG9sYXJpdHkgKi8KKwkJCS8qIFZzeW5jIHBvbGFyaXR5ICovCisJCQl4Z2lmYl9yZWdfb3IocFZCSW5mby0+UDNjNCwgMHgzNSwgMHg4MCk7CiAJfQogfQogCkBAIC0xMDM2LDggKzExMTcsOSBAQAogLyogT3V0cHV0IDogQ1JUMSBDUlRDICovCiAvKiBEZXNjcmlwdGlvbiA6IE1vZGlmeSBDUlQxIEhzeW5jL1ZzeW5jIHRvIGZpeCBMQ0QgbW9kZSB0aW1pbmcgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotc3RhdGljIHZvaWQgWEdJX1VwZGF0ZVhHMjFDUlRDKHVuc2lnbmVkIHNob3J0IE1vZGVObywgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvLAotCQl1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgpCitzdGF0aWMgdm9pZCBYR0lfVXBkYXRlWEcyMUNSVEModW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkJICAgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbywKKwkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgpCiB7CiAJaW50IGksIGluZGV4ID0gLTE7CiAKQEAgLTEwNDgsMTMgKzExMzAsMTMgQEAKIAkJCQlpbmRleCA9IGk7CiAJCX0KIAl9IGVsc2UgewotCQlpZiAoTW9kZU5vID09IDB4MkUKLQkJCQkmJiAocFZCSW5mby0+UmVmSW5kZXhbUmVmcmVzaFJhdGVUYWJsZUluZGV4XS5FeHRfQ1JUMUNSVEMKLQkJCQkJCT09IFJFUzY0MHg0ODB4NjApKQorCQlpZiAoTW9kZU5vID09IDB4MkUgJiYKKwkJICAgIChwVkJJbmZvLT5SZWZJbmRleFtSZWZyZXNoUmF0ZVRhYmxlSW5kZXhdLkV4dF9DUlQxQ1JUQyA9PQorCQkJCQkJCSAgICAgIFJFUzY0MHg0ODB4NjApKQogCQkJaW5kZXggPSAxMjsKLQkJZWxzZSBpZiAoTW9kZU5vID09IDB4MkUKLQkJCQkmJiAocFZCSW5mby0+UmVmSW5kZXhbUmVmcmVzaFJhdGVUYWJsZUluZGV4XS5FeHRfQ1JUMUNSVEMKLQkJCQkJCT09IFJFUzY0MHg0ODB4NzIpKQorCQllbHNlIGlmIChNb2RlTm8gPT0gMHgyRSAmJgorCQkJIChwVkJJbmZvLT5SZWZJbmRleFtSZWZyZXNoUmF0ZVRhYmxlSW5kZXhdLgorCQkJCUV4dF9DUlQxQ1JUQyA9PSBSRVM2NDB4NDgweDcyKSkKIAkJCWluZGV4ID0gMTM7CiAJCWVsc2UgaWYgKE1vZGVObyA9PSAweDJGKQogCQkJaW5kZXggPSAxNDsKQEAgLTExNTcsMTYgKzEyMzksMTkgQEAKIAl1bnNpZ25lZCBzaG9ydCByZXNpbmRleDsKIAogCWlmIChNb2RlTm8gPD0gMHgxMykKLQkJcmVzaW5kZXggPSBwVkJJbmZvLT5TTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLlN0X1Jlc0luZm87IC8qIHNpK1N0X1Jlc0luZm8gKi8KKwkJLyogc2krU3RfUmVzSW5mbyAqLworCQlyZXNpbmRleCA9IHBWQkluZm8tPlNNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uU3RfUmVzSW5mbzsKIAllbHNlCi0JCXJlc2luZGV4ID0gcFZCSW5mby0+RU1vZGVJRFRhYmxlW01vZGVJZEluZGV4XS5FeHRfUkVTSU5GTzsgLyogc2krRXh0X1Jlc0luZm8gKi8KKwkJLyogc2krRXh0X1Jlc0luZm8gKi8KKwkJcmVzaW5kZXggPSBwVkJJbmZvLT5FTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLkV4dF9SRVNJTkZPOwogCXJldHVybiByZXNpbmRleDsKIH0KIAotc3RhdGljIHZvaWQgWEdJX1NldENSVDFPZmZzZXQodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKLQkJdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LAotCQlzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKLQkJc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQorc3RhdGljIHZvaWQgWEdJX1NldENSVDFPZmZzZXQodW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkJICAgICAgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCQkgICAgICB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsCisJCQkgICAgICBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKKwkJCSAgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKIAl1bnNpZ25lZCBzaG9ydCB0ZW1wLCBhaCwgYWwsIHRlbXAyLCBpLCBEaXNwbGF5VW5pdDsKIApAQCAtMTI1NCwyOSArMTMzOSwzOSBAQAogewogCXVuc2lnbmVkIHNob3J0IHRlbXBieDsKIAotCXVuc2lnbmVkIHNob3J0IExDRFhsYXQxVkNMS1s0XSA9IHsgVkNMSzY1ICsgMiwgVkNMSzY1ICsgMiwgVkNMSzY1ICsgMiwKLQkJCVZDTEs2NSArIDIgfTsKLQl1bnNpZ25lZCBzaG9ydCBMQ0RYbGF0MlZDTEtbNF0gPSB7IFZDTEsxMDhfMiArIDUsIFZDTEsxMDhfMiArIDUsCi0JCQlWQ0xLMTA4XzIgKyA1LCBWQ0xLMTA4XzIgKyA1IH07CisJdW5zaWduZWQgc2hvcnQgTENEWGxhdDFWQ0xLWzRdID0geyBWQ0xLNjUgKyAyLAorCQkJCQkgICBWQ0xLNjUgKyAyLAorCQkJCQkgICBWQ0xLNjUgKyAyLAorCQkJCQkgICBWQ0xLNjUgKyAyIH07CisJdW5zaWduZWQgc2hvcnQgTENEWGxhdDJWQ0xLWzRdID0geyBWQ0xLMTA4XzIgKyA1LAorCQkJCQkgICBWQ0xLMTA4XzIgKyA1LAorCQkJCQkgICBWQ0xLMTA4XzIgKyA1LAorCQkJCQkgICBWQ0xLMTA4XzIgKyA1IH07CiAJdW5zaWduZWQgc2hvcnQgTFZEU1hsYXQxVkNMS1s0XSA9IHsgVkNMSzQwLCBWQ0xLNDAsIFZDTEs0MCwgVkNMSzQwIH07Ci0JdW5zaWduZWQgc2hvcnQgTFZEU1hsYXQyVkNMS1s0XSA9IHsgVkNMSzY1ICsgMiwgVkNMSzY1ICsgMiwgVkNMSzY1ICsgMiwKLQkJCVZDTEs2NSArIDIgfTsKLQl1bnNpZ25lZCBzaG9ydCBMVkRTWGxhdDNWQ0xLWzRdID0geyBWQ0xLNjUgKyAyLCBWQ0xLNjUgKyAyLCBWQ0xLNjUgKyAyLAotCQkJVkNMSzY1ICsgMiB9OworCXVuc2lnbmVkIHNob3J0IExWRFNYbGF0MlZDTEtbNF0gPSB7IFZDTEs2NSArIDIsCisJCQkJCSAgICBWQ0xLNjUgKyAyLAorCQkJCQkgICAgVkNMSzY1ICsgMiwKKwkJCQkJICAgIFZDTEs2NSArIDIgfTsKKwl1bnNpZ25lZCBzaG9ydCBMVkRTWGxhdDNWQ0xLWzRdID0geyBWQ0xLNjUgKyAyLAorCQkJCQkgICAgVkNMSzY1ICsgMiwKKwkJCQkJICAgIFZDTEs2NSArIDIsCisJCQkJCSAgICBWQ0xLNjUgKyAyIH07CiAKIAl1bnNpZ25lZCBzaG9ydCBDUlQySW5kZXgsIFZDTEtJbmRleDsKIAl1bnNpZ25lZCBzaG9ydCBtb2RlZmxhZywgcmVzaW5mbzsKIAl1bnNpZ25lZCBjaGFyICpDSFRWVkNMS1B0ciA9IE5VTEw7CiAKIAlpZiAoTW9kZU5vIDw9IDB4MTMpIHsKLQkJbW9kZWZsYWcgPSBwVkJJbmZvLT5TTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLlN0X01vZGVGbGFnOyAvKiBzaStTdF9SZXNJbmZvICovCisJCS8qIHNpK1N0X1Jlc0luZm8gKi8KKwkJbW9kZWZsYWcgPSBwVkJJbmZvLT5TTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLlN0X01vZGVGbGFnOwogCQlyZXNpbmZvID0gcFZCSW5mby0+U01vZGVJRFRhYmxlW01vZGVJZEluZGV4XS5TdF9SZXNJbmZvOwogCQlDUlQySW5kZXggPSBwVkJJbmZvLT5TTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLlN0X0NSVDJDUlRDOwogCX0gZWxzZSB7Ci0JCW1vZGVmbGFnID0gcFZCSW5mby0+RU1vZGVJRFRhYmxlW01vZGVJZEluZGV4XS5FeHRfTW9kZUZsYWc7IC8qIHNpK0V4dF9SZXNJbmZvICovCisJCS8qIHNpK0V4dF9SZXNJbmZvICovCisJCW1vZGVmbGFnID0gcFZCSW5mby0+RU1vZGVJRFRhYmxlW01vZGVJZEluZGV4XS5FeHRfTW9kZUZsYWc7CiAJCXJlc2luZm8gPSBwVkJJbmZvLT5FTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLkV4dF9SRVNJTkZPOwotCQlDUlQySW5kZXgKLQkJCQk9IHBWQkluZm8tPlJlZkluZGV4W1JlZnJlc2hSYXRlVGFibGVJbmRleF0uRXh0X0NSVDJDUlRDOworCQlDUlQySW5kZXggPSBwVkJJbmZvLT5SZWZJbmRleFtSZWZyZXNoUmF0ZVRhYmxlSW5kZXhdLgorCQkJCUV4dF9DUlQyQ1JUQzsKIAl9CiAKIAlpZiAocFZCSW5mby0+SUZfREVGX0xWRFMgPT0gMCkgewpAQCAtMTI5MSw0MSArMTM4NiwzNSBAQAogCQkJCWlmIChwVkJJbmZvLT5WQkluZm8gJiBTZXRDUlQyVG9IaVZpc2lvblRWKSB7CiAJCQkJCWlmIChwVkJJbmZvLT5TZXRGbGFnICYgUlBMTERJVjJYTykgewogCQkJCQkJVkNMS0luZGV4ID0gSGlUVlZDTEtESVYyOwotCiAJCQkJCQlWQ0xLSW5kZXggKz0gMjU7Ci0KIAkJCQkJfSBlbHNlIHsKIAkJCQkJCVZDTEtJbmRleCA9IEhpVFZWQ0xLOwotCiAJCQkJCQlWQ0xLSW5kZXggKz0gMjU7Ci0KIAkJCQkJfQogCiAJCQkJCWlmIChwVkJJbmZvLT5TZXRGbGFnICYgVFZTaW11TW9kZSkgewogCQkJCQkJaWYgKG1vZGVmbGFnICYgQ2hhcng4RG90KSB7Ci0JCQkJCQkJVkNMS0luZGV4Ci0JCQkJCQkJCQk9IEhpVFZTaW11VkNMSzsKLQorCQkJCQkJCVZDTEtJbmRleCA9CisJCQkJCQkJCUhpVFZTaW11VkNMSzsKIAkJCQkJCQlWQ0xLSW5kZXggKz0gMjU7Ci0KIAkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJVkNMS0luZGV4Ci0JCQkJCQkJCQk9IEhpVFZUZXh0VkNMSzsKLQorCQkJCQkJCVZDTEtJbmRleCA9CisJCQkJCQkJCUhpVFZUZXh0VkNMSzsKIAkJCQkJCQlWQ0xLSW5kZXggKz0gMjU7Ci0KIAkJCQkJCX0KIAkJCQkJfQogCi0JCQkJCWlmIChwVkJJbmZvLT5WQlR5cGUgJiBWQl9YR0kzMDFMVikgeyAvKiAzMDFsdiAqLwotCQkJCQkJaWYgKCEocFZCSW5mby0+VkJFeHRJbmZvCi0JCQkJCQkJCT09IFZCX1lQYlByMTA4MGkpKSB7Ci0JCQkJCQkJVkNMS0luZGV4Ci0JCQkJCQkJCQk9IFlQYlByNzUwcFZDTEs7CisJCQkJCS8qIDMwMWx2ICovCisJCQkJCWlmIChwVkJJbmZvLT5WQlR5cGUgJiBWQl9YR0kzMDFMVikgeworCQkJCQkJaWYgKCEocFZCSW5mby0+VkJFeHRJbmZvID09CisJCQkJCQkgICAgIFZCX1lQYlByMTA4MGkpKSB7CisJCQkJCQkJVkNMS0luZGV4ID0KKwkJCQkJCQkJWVBiUHI3NTBwVkNMSzsKIAkJCQkJCQlpZiAoIShwVkJJbmZvLT5WQkV4dEluZm8KLQkJCQkJCQkJCT09IFZCX1lQYlByNzUwcCkpIHsKLQkJCQkJCQkJVkNMS0luZGV4Ci0JCQkJCQkJCQkJPSBZUGJQcjUyNXBWQ0xLOworCQkJCQkJCQkJPT0KKwkJCQkJCQkgICAgIFZCX1lQYlByNzUwcCkpIHsKKwkJCQkJCQkJVkNMS0luZGV4ID0KKwkJCQkJCQkJICBZUGJQcjUyNXBWQ0xLOwogCQkJCQkJCQlpZiAoIShwVkJJbmZvLT5WQkV4dEluZm8KIAkJCQkJCQkJCQk9PSBWQl9ZUGJQcjUyNXApKSB7CiAJCQkJCQkJCQlWQ0xLSW5kZXgKQEAgLTEzNDAsMjcgKzE0MjksMjcgQEAKIAkJCQkJfQogCQkJCX0gZWxzZSB7CiAJCQkJCWlmIChwVkJJbmZvLT5WQkluZm8gJiBTZXRDUlQyVG9UVikgewotCQkJCQkJaWYgKHBWQkluZm8tPlNldEZsYWcKLQkJCQkJCQkJJiBSUExMRElWMlhPKSB7CisJCQkJCQlpZiAocFZCSW5mby0+U2V0RmxhZyAmCisJCQkJCQkgICAgUlBMTERJVjJYTykgewogCQkJCQkJCVZDTEtJbmRleCA9IFRWVkNMS0RJVjI7Ci0KIAkJCQkJCQlWQ0xLSW5kZXggKz0gMjU7Ci0KIAkJCQkJCX0gZWxzZSB7CiAJCQkJCQkJVkNMS0luZGV4ID0gVFZWQ0xLOwotCiAJCQkJCQkJVkNMS0luZGV4ICs9IDI1OwotCiAJCQkJCQl9CiAJCQkJCX0KIAkJCQl9CiAJCQl9IGVsc2UgeyAvKiBmb3IgQ1JUMiAqLworCQkJCS8qIFBvcnQgM2NjaCAqLwogCQkJCVZDTEtJbmRleCA9ICh1bnNpZ25lZCBjaGFyKSBpbmIoCi0JCQkJCQkocFZCSW5mby0+UDNjYSArIDB4MDIpKTsgLyogUG9ydCAzY2NoICovCisJCQkJCQkocFZCSW5mby0+UDNjYSArIDB4MDIpKTsKIAkJCQlWQ0xLSW5kZXggPSAoKFZDTEtJbmRleCA+PiAyKSAmIDB4MDMpOwogCQkJCWlmIChNb2RlTm8gPiAweDEzKSB7Ci0JCQkJCVZDTEtJbmRleAotCQkJCQkJCT0gcFZCSW5mby0+UmVmSW5kZXhbUmVmcmVzaFJhdGVUYWJsZUluZGV4XS5FeHRfQ1JUVkNMSzsgLyogZGkrRXh0X0NSVFZDTEsgKi8KKwkJCQkJLyogZGkrRXh0X0NSVFZDTEsgKi8KKwkJCQkJVkNMS0luZGV4ID0KKwkJCQkJCXBWQkluZm8tPlJlZkluZGV4WworCQkJCQkJCVJlZnJlc2hSYXRlVGFibGVJbmRleF0uCisJCQkJCQkJCUV4dF9DUlRWQ0xLOwogCQkJCQlWQ0xLSW5kZXggJj0gSW5kZXhNYXNrOwogCQkJCX0KIAkJCX0KQEAgLTE0MDMsMTIgKzE0OTIsMTEgQEAKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCVZDTEtJbmRleCA9IFZDTEtJbmRleCA+PiA2OwotCQkJaWYgKChwVkJJbmZvLT5MQ0RSZXNJbmZvID09IFBhbmVsODAweDYwMCkKLQkJCQkJfHwgKHBWQkluZm8tPkxDRFJlc0luZm8gPT0gUGFuZWwzMjB4NDgwKSkKKwkJCWlmICgocFZCSW5mby0+TENEUmVzSW5mbyA9PSBQYW5lbDgwMHg2MDApIHx8CisJCQkgICAgKHBWQkluZm8tPkxDRFJlc0luZm8gPT0gUGFuZWwzMjB4NDgwKSkKIAkJCQlWQ0xLSW5kZXggPSBMVkRTWGxhdDFWQ0xLW1ZDTEtJbmRleF07Ci0JCQllbHNlIGlmICgocFZCSW5mby0+TENEUmVzSW5mbyA9PSBQYW5lbDEwMjR4NzY4KQotCQkJCQl8fCAocFZCSW5mby0+TENEUmVzSW5mbwotCQkJCQkJCT09IFBhbmVsMTAyNHg3Njh4NzUpKQorCQkJZWxzZSBpZiAoKHBWQkluZm8tPkxDRFJlc0luZm8gPT0gUGFuZWwxMDI0eDc2OCkgfHwKKwkJCQkgKHBWQkluZm8tPkxDRFJlc0luZm8gPT0gUGFuZWwxMDI0eDc2OHg3NSkpCiAJCQkJVkNMS0luZGV4ID0gTFZEU1hsYXQyVkNMS1tWQ0xLSW5kZXhdOwogCQkJZWxzZQogCQkJCVZDTEtJbmRleCA9IExWRFNYbGF0M1ZDTEtbVkNMS0luZGV4XTsKQEAgLTE0MTksMTAgKzE1MDcsMTEgQEAKIAlyZXR1cm4gVkNMS0luZGV4OwogfQogCi1zdGF0aWMgdm9pZCBYR0lfU2V0Q1JUMVZDTEsodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKLQkJc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCi0JCXVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwKLQkJc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQorc3RhdGljIHZvaWQgWEdJX1NldENSVDFWQ0xLKHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCSAgICB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJCSAgICBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKKwkJCSAgICB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsCisJCQkgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogCXVuc2lnbmVkIGNoYXIgaW5kZXgsIGRhdGE7CiAJdW5zaWduZWQgc2hvcnQgdmNsa2luZGV4OwpAQCAtMTQ2MSw3ICsxNTUwLDggQEAKIAl9CiAKIAlpZiAoSHdEZXZpY2VFeHRlbnNpb24tPmpDaGlwVHlwZSA+PSBYRzIwKSB7Ci0JCWlmIChwVkJJbmZvLT5FTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLkV4dF9Nb2RlRmxhZyAmIEhhbGZEQ0xLKSB7CisJCWlmIChwVkJJbmZvLT5FTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLkV4dF9Nb2RlRmxhZyAmCisJCSAgICBIYWxmRENMSykgewogCQkJZGF0YSA9IHhnaWZiX3JlZ19nZXQocFZCSW5mby0+UDNjNCwgMHgyQik7CiAJCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsIDB4MkIsIGRhdGEpOwogCQkJZGF0YSA9IHhnaWZiX3JlZ19nZXQocFZCSW5mby0+UDNjNCwgMHgyQyk7CkBAIC0xNTc1LDEwICsxNjY1LDExIEBACiAKIAlpZiAoTW9kZU5vID4gMHgxMykgewogCQltb2RlZmxhZyA9IHBWQkluZm8tPkVNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uRXh0X01vZGVGbGFnOwotCQlpbmZvZmxhZwotCQkJCT0gcFZCSW5mby0+UmVmSW5kZXhbUmVmcmVzaFJhdGVUYWJsZUluZGV4XS5FeHRfSW5mb0ZsYWc7CisJCWluZm9mbGFnID0gcFZCSW5mby0+UmVmSW5kZXhbUmVmcmVzaFJhdGVUYWJsZUluZGV4XS4KKwkJCQlFeHRfSW5mb0ZsYWc7CiAJfSBlbHNlCi0JCW1vZGVmbGFnID0gcFZCSW5mby0+U01vZGVJRFRhYmxlW01vZGVJZEluZGV4XS5TdF9Nb2RlRmxhZzsgLyogc2krU3RfTW9kZUZsYWcgKi8KKwkJLyogc2krU3RfTW9kZUZsYWcgKi8KKwkJbW9kZWZsYWcgPSBwVkJJbmZvLT5TTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLlN0X01vZGVGbGFnOwogCiAJaWYgKHhnaWZiX3JlZ19nZXQocFZCSW5mby0+UDNkNCwgMHgzMSkgJiAweDAxKQogCQl4Z2lmYl9yZWdfYW5kX29yKHBWQkluZm8tPlAzYzQsIDB4MUYsIDB4M0YsIDB4MDApOwpAQCAtMTY1Miw3ICsxNzQzLDggQEAKIAogCS8qIGlmIChtb2RlZmxhZyZIYWxmRENMSykgLy8wMzAzMDUgZml4IGxvd3Jlc29sdXRpb24gYnVnICovCiAJLyogaWYgKFhHSU5ld19JRl9ERUZfTkVXX0xPV1JFUykgKi8KLQkvKiBYR0lfVmVzYUxvd1Jlc29sdXRpb24oTW9kZU5vLCBNb2RlSWRJbmRleCk7IC8vMDMwMzA1IGZpeCBsb3dyZXNvbHV0aW9uIGJ1ZyAqLworCS8qIFhHSV9WZXNhTG93UmVzb2x1dGlvbihNb2RlTm8sIE1vZGVJZEluZGV4KTsKKwkgKiAvLzAzMDMwNSBmaXggbG93cmVzb2x1dGlvbiBidWcgKi8KIAogCWRhdGEgPSB4Z2lmYl9yZWdfZ2V0KHBWQkluZm8tPlAzZDQsIDB4MzEpOwogCkBAIC0xNjgxLDcgKzE3NzMsOSBAQAogfQogCiAvKgotdm9pZCBYR0lfVmVzYUxvd1Jlc29sdXRpb24odW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQordm9pZCBYR0lfVmVzYUxvd1Jlc29sdXRpb24odW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkJICAgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCQkgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAJdW5zaWduZWQgc2hvcnQgbW9kZWZsYWc7CiAKQEAgLTE2OTMsMTcgKzE3ODcsMzcgQEAKIAlpZiAoTW9kZU5vID4gMHgxMykgewogCQlpZiAobW9kZWZsYWcgJiBEb3VibGVTY2FuTW9kZSkgewogCQkJaWYgKG1vZGVmbGFnICYgSGFsZkRDTEspIHsKLQkJCQlpZiAocFZCSW5mby0+VkJUeXBlICYgVkJfWEdJMzAxQiB8IFZCX1hHSTMwMkIgfCBWQl9YR0kzMDFMViB8IFZCX1hHSTMwMkxWIHwgVkJfWEdJMzAxQykpIHsKLQkJCQkJaWYgKCEocFZCSW5mby0+VkJJbmZvICYgU2V0Q1JUMlRvUkFNREFDKSkgewotCQkJCQkJaWYgKHBWQkluZm8tPlZCSW5mbyAmIFNldEluU2xhdmVNb2RlKSB7Ci0JCQkJCQkJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2M0LCAweDAxLCAweGY3LCAweDAwKTsKLQkJCQkJCQl4Z2lmYl9yZWdfYW5kX29yKHBWQkluZm8tPlAzYzQsIDB4MGYsIDB4N2YsIDB4MDApOworCQkJCWlmIChwVkJJbmZvLT5WQlR5cGUgJiBWQl9YR0kzMDFCIHwKKwkJCQkJCSAgICAgIFZCX1hHSTMwMkIgfAorCQkJCQkJICAgICAgVkJfWEdJMzAxTFYgfAorCQkJCQkJICAgICAgVkJfWEdJMzAyTFYgfAorCQkJCQkJICAgICAgVkJfWEdJMzAxQykpIHsKKwkJCQkJaWYgKCEocFZCSW5mby0+VkJJbmZvICYKKwkJCQkJICAgICBTZXRDUlQyVG9SQU1EQUMpKSB7CisJCQkJCQlpZiAocFZCSW5mby0+VkJJbmZvICYKKwkJCQkJCSAgICBTZXRJblNsYXZlTW9kZSkgeworCQkJCQkJCXhnaWZiX3JlZ19hbmRfb3IoCisJCQkJCQkJCXBWQkluZm8tPlAzYzQsCisJCQkJCQkJCTB4MDEsCisJCQkJCQkJCTB4ZjcsCisJCQkJCQkJCTB4MDApOworCQkJCQkJCXhnaWZiX3JlZ19hbmRfb3IoCisJCQkJCQkJCXBWQkluZm8tPlAzYzQsCisJCQkJCQkJCTB4MGYsCisJCQkJCQkJCTB4N2YsCisJCQkJCQkJCTB4MDApOwogCQkJCQkJCXJldHVybjsKIAkJCQkJCX0KIAkJCQkJfQogCQkJCX0KLQkJCQl4Z2lmYl9yZWdfYW5kX29yKHBWQkluZm8tPlAzYzQsIDB4MGYsIDB4ZmYsIDB4ODApOwotCQkJCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UDNjNCwgMHgwMSwgMHhmNywgMHgwMCk7CisJCQkJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2M0LAorCQkJCQkJIDB4MGYsCisJCQkJCQkgMHhmZiwKKwkJCQkJCSAweDgwKTsKKwkJCQl4Z2lmYl9yZWdfYW5kX29yKHBWQkluZm8tPlAzYzQsCisJCQkJCQkgMHgwMSwKKwkJCQkJCSAweGY3LAorCQkJCQkJIDB4MDApOwogCQkJCXJldHVybjsKIAkJCX0KIAkJfQpAQCAtMTcxMiw4ICsxODI2LDExIEBACiB9CiAqLwogCi1zdGF0aWMgdm9pZCBYR0lfV3JpdGVEQUModW5zaWduZWQgc2hvcnQgZGwsIHVuc2lnbmVkIHNob3J0IGFoLCB1bnNpZ25lZCBzaG9ydCBhbCwKLQkJdW5zaWduZWQgc2hvcnQgZGgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKK3N0YXRpYyB2b2lkIFhHSV9Xcml0ZURBQyh1bnNpZ25lZCBzaG9ydCBkbCwKKwkJCSB1bnNpZ25lZCBzaG9ydCBhaCwKKwkJCSB1bnNpZ25lZCBzaG9ydCBhbCwKKwkJCSB1bnNpZ25lZCBzaG9ydCBkaCwKKwkJCSBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAJdW5zaWduZWQgc2hvcnQgdGVtcCwgYmgsIGJsOwogCkBAIC0xODMxLDE1ICsxOTQ4LDE4IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBYR0lfR2V0TFZEU1Jlc0luZm8odW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKLQkJc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQorc3RhdGljIHZvaWQgWEdJX0dldExWRFNSZXNJbmZvKHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJCSAgICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAJdW5zaWduZWQgc2hvcnQgcmVzaW5kZXgsIHhyZXMsIHlyZXMsIG1vZGVmbGFnOwogCiAJaWYgKE1vZGVObyA8PSAweDEzKQotCQltb2RlZmxhZyA9IHBWQkluZm8tPlNNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uU3RfUmVzSW5mbzsgLyogc2krU3RfUmVzSW5mbyAqLworCQkvKiBzaStTdF9SZXNJbmZvICovCisJCW1vZGVmbGFnID0gcFZCSW5mby0+U01vZGVJRFRhYmxlW01vZGVJZEluZGV4XS5TdF9SZXNJbmZvOwogCWVsc2UKLQkJbW9kZWZsYWcgPSBwVkJJbmZvLT5FTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLkV4dF9SRVNJTkZPOyAvKiBzaStFeHRfUmVzSW5mbyAqLworCQkvKiBzaStFeHRfUmVzSW5mbyAqLworCQltb2RlZmxhZyA9IHBWQkluZm8tPkVNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uRXh0X1JFU0lORk87CiAKIAkvKiBpZiAoTW9kZU5vID4gMHgxMykgKi8KIAkvKgltb2RlZmxhZyA9IHBWQkluZm8tPkVNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uRXh0X01vZGVGbGFnOyAqLwpAQCAtMTg0Nyw5ICsxOTY3LDExIEBACiAJLyoJbW9kZWZsYWcgPSBwVkJJbmZvLT5TTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLlN0X01vZGVGbGFnOyAqLwogCiAJaWYgKE1vZGVObyA8PSAweDEzKQotCQlyZXNpbmRleCA9IHBWQkluZm8tPlNNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uU3RfUmVzSW5mbzsgLyogc2krU3RfUmVzSW5mbyAqLworCQkvKiBzaStTdF9SZXNJbmZvICovCisJCXJlc2luZGV4ID0gcFZCSW5mby0+U01vZGVJRFRhYmxlW01vZGVJZEluZGV4XS5TdF9SZXNJbmZvOwogCWVsc2UKLQkJcmVzaW5kZXggPSBwVkJJbmZvLT5FTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLkV4dF9SRVNJTkZPOyAvKiBzaStFeHRfUmVzSW5mbyAqLworCQkvKiBzaStFeHRfUmVzSW5mbyAqLworCQlyZXNpbmRleCA9IHBWQkluZm8tPkVNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uRXh0X1JFU0lORk87CiAKIAkvKiByZXNpbmRleCA9IFhHSV9HZXRSZXNJbmZvKE1vZGVObywgTW9kZUlkSW5kZXgsIHBWQkluZm8pOyAqLwogCkBAIC0xOTAzLDE5ICsyMDI1LDIxIEBACiAKIAlpZiAodGVtcGJ4IDw9IDEpIHsgLyogRXhwTGluayAqLwogCQlpZiAoTW9kZU5vIDw9IDB4MTMpIHsKLQkJCXRlbXBhbCA9IHBWQkluZm8tPlNNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uU3RfQ1JUMkNSVEM7IC8qIGZpbmQgbm8gRXh0X0NSVDJDUlRDMiAqLworCQkJLyogZmluZCBubyBFeHRfQ1JUMkNSVEMyICovCisJCQl0ZW1wYWwgPSBwVkJJbmZvLT5TTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLlN0X0NSVDJDUlRDOwogCQl9IGVsc2UgewotCQkJdGVtcGFsCi0JCQkJCT0gcFZCSW5mby0+UmVmSW5kZXhbUmVmcmVzaFJhdGVUYWJsZUluZGV4XS5FeHRfQ1JUMkNSVEM7CisJCQl0ZW1wYWwgPSBwVkJJbmZvLT5SZWZJbmRleFtSZWZyZXNoUmF0ZVRhYmxlSW5kZXhdLgorCQkJCQlFeHRfQ1JUMkNSVEM7CiAJCX0KIAogCQlpZiAocFZCSW5mby0+VkJJbmZvICYgU2V0Q1JUMlRvTENEQSkgewogCQkJaWYgKE1vZGVObyA8PSAweDEzKQotCQkJCXRlbXBhbAotCQkJCQkJPSBwVkJJbmZvLT5TTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLlN0X0NSVDJDUlRDMjsKKwkJCQl0ZW1wYWwgPSBwVkJJbmZvLT5TTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLgorCQkJCQkJU3RfQ1JUMkNSVEMyOwogCQkJZWxzZQotCQkJCXRlbXBhbAotCQkJCQkJPSBwVkJJbmZvLT5SZWZJbmRleFtSZWZyZXNoUmF0ZVRhYmxlSW5kZXhdLkV4dF9DUlQyQ1JUQzI7CisJCQkJdGVtcGFsID0gcFZCSW5mby0+UmVmSW5kZXhbCisJCQkJCQlSZWZyZXNoUmF0ZVRhYmxlSW5kZXhdLgorCQkJCQkJCUV4dF9DUlQyQ1JUQzI7CiAJCX0KIAogCQlpZiAodGVtcGJ4ICYgMHgwMSkKQEAgLTE5MzMsNyArMjA1Nyw4IEBACiAJCQl0ZW1wY3ggPSBMVkRTRGVzRGF0YUxlbjI7CiAJfQogCS8qIG1vdiBkaSwgd29yZCBwdHIgY3M6TENERGF0YUxpc3RbYnhdICovCi0JLyogdGVtcGRpID0gcFZpZGVvTWVtb3J5W0xDRERhdGFMaXN0ICsgdGVtcGJ4ICogMl0gfCAocFZpZGVvTWVtb3J5W0xDRERhdGFMaXN0ICsgdGVtcGJ4ICogMiArIDFdIDw8IDgpOyAqLworCS8qIHRlbXBkaSA9IHBWaWRlb01lbW9yeVtMQ0REYXRhTGlzdCArIHRlbXBieCAqIDJdIHwKKwkJICAgIChwVmlkZW9NZW1vcnlbTENERGF0YUxpc3QgKyB0ZW1wYnggKiAyICsgMV0gPDwgOCk7ICovCiAKIAlzd2l0Y2ggKHRlbXBieCkgewogCWNhc2UgMDoKQEAgLTIyNDMsMzYgKzIzNjgsMzYgQEAKIAkJCXJldHVybiAmWEdJX0NldExDRERlczEwMjR4NzY4RGF0YVt0ZW1wYWxdOwogCQkJYnJlYWs7CiAJCWNhc2UgMzoKLQkJCWlmICgocFZCSW5mby0+VkJUeXBlICYgVkJfWEdJMzAxTFYpIHx8IChwVkJJbmZvLT5WQlR5cGUKLQkJCQkJJiBWQl9YR0kzMDJMVikpCisJCQlpZiAoKHBWQkluZm8tPlZCVHlwZSAmIFZCX1hHSTMwMUxWKSB8fAorCQkJCShwVkJJbmZvLT5WQlR5cGUgJiBWQl9YR0kzMDJMVikpCiAJCQkJcmV0dXJuICZYR0lfRXh0TENERExEZXMxMjgweDEwMjREYXRhW3RlbXBhbF07CiAJCQllbHNlCiAJCQkJcmV0dXJuICZYR0lfRXh0TENERGVzMTI4MHgxMDI0RGF0YVt0ZW1wYWxdOwogCQkJYnJlYWs7CiAJCWNhc2UgNDoKLQkJCWlmICgocFZCSW5mby0+VkJUeXBlICYgVkJfWEdJMzAxTFYpIHx8IChwVkJJbmZvLT5WQlR5cGUKLQkJCQkJJiBWQl9YR0kzMDJMVikpCisJCQlpZiAoKHBWQkluZm8tPlZCVHlwZSAmIFZCX1hHSTMwMUxWKSB8fAorCQkJICAgIChwVkJJbmZvLT5WQlR5cGUgJiBWQl9YR0kzMDJMVikpCiAJCQkJcmV0dXJuICZYR0lfU3RMQ0RETERlczEyODB4MTAyNERhdGFbdGVtcGFsXTsKIAkJCWVsc2UKIAkJCQlyZXR1cm4gJlhHSV9TdExDRERlczEyODB4MTAyNERhdGFbdGVtcGFsXTsKIAkJCWJyZWFrOwogCQljYXNlIDU6Ci0JCQlpZiAoKHBWQkluZm8tPlZCVHlwZSAmIFZCX1hHSTMwMUxWKSB8fCAocFZCSW5mby0+VkJUeXBlCi0JCQkJCSYgVkJfWEdJMzAyTFYpKQorCQkJaWYgKChwVkJJbmZvLT5WQlR5cGUgJiBWQl9YR0kzMDFMVikgfHwKKwkJCSAgICAocFZCSW5mby0+VkJUeXBlICYgVkJfWEdJMzAyTFYpKQogCQkJCXJldHVybiAmWEdJX0NldExDRERMRGVzMTI4MHgxMDI0RGF0YVt0ZW1wYWxdOwogCQkJZWxzZQogCQkJCXJldHVybiAmWEdJX0NldExDRERlczEyODB4MTAyNERhdGFbdGVtcGFsXTsKIAkJCWJyZWFrOwogCQljYXNlIDY6Ci0JCQlpZiAoKHBWQkluZm8tPlZCVHlwZSAmIFZCX1hHSTMwMUxWKSB8fCAocFZCSW5mby0+VkJUeXBlCi0JCQkJCSYgVkJfWEdJMzAyTFYpKQorCQkJaWYgKChwVkJJbmZvLT5WQlR5cGUgJiBWQl9YR0kzMDFMVikgfHwKKwkJCSAgICAocFZCSW5mby0+VkJUeXBlICYgVkJfWEdJMzAyTFYpKQogCQkJCXJldHVybiAmWEdJX0V4dExDRERMRGVzMTQwMHgxMDUwRGF0YVt0ZW1wYWxdOwogCQkJZWxzZQogCQkJCXJldHVybiAmWEdJX0V4dExDRERlczE0MDB4MTA1MERhdGFbdGVtcGFsXTsKIAkJCWJyZWFrOwogCQljYXNlIDc6Ci0JCQlpZiAoKHBWQkluZm8tPlZCVHlwZSAmIFZCX1hHSTMwMUxWKSB8fCAocFZCSW5mby0+VkJUeXBlCi0JCQkJCSYgVkJfWEdJMzAyTFYpKQorCQkJaWYgKChwVkJJbmZvLT5WQlR5cGUgJiBWQl9YR0kzMDFMVikgfHwKKwkJCSAgICAocFZCSW5mby0+VkJUeXBlICYgVkJfWEdJMzAyTFYpKQogCQkJCXJldHVybiAmWEdJX1N0TENERExEZXMxNDAweDEwNTBEYXRhW3RlbXBhbF07CiAJCQllbHNlCiAJCQkJcmV0dXJuICZYR0lfU3RMQ0REZXMxNDAweDEwNTBEYXRhW3RlbXBhbF07CkBAIC0yMjg0LDE1ICsyNDA5LDE1IEBACiAJCQlyZXR1cm4gJlhHSV9DZXRMQ0REZXMxNDAweDEwNTBEYXRhMlt0ZW1wYWxdOwogCQkJYnJlYWs7CiAJCWNhc2UgMTA6Ci0JCQlpZiAoKHBWQkluZm8tPlZCVHlwZSAmIFZCX1hHSTMwMUxWKSB8fCAocFZCSW5mby0+VkJUeXBlCi0JCQkJCSYgVkJfWEdJMzAyTFYpKQorCQkJaWYgKChwVkJJbmZvLT5WQlR5cGUgJiBWQl9YR0kzMDFMVikgfHwKKwkJCSAgICAocFZCSW5mby0+VkJUeXBlICYgVkJfWEdJMzAyTFYpKQogCQkJCXJldHVybiAmWEdJX0V4dExDRERMRGVzMTYwMHgxMjAwRGF0YVt0ZW1wYWxdOwogCQkJZWxzZQogCQkJCXJldHVybiAmWEdJX0V4dExDRERlczE2MDB4MTIwMERhdGFbdGVtcGFsXTsKIAkJCWJyZWFrOwogCQljYXNlIDExOgotCQkJaWYgKChwVkJJbmZvLT5WQlR5cGUgJiBWQl9YR0kzMDFMVikgfHwgKHBWQkluZm8tPlZCVHlwZQotCQkJCQkmIFZCX1hHSTMwMkxWKSkKKwkJCWlmICgocFZCSW5mby0+VkJUeXBlICYgVkJfWEdJMzAxTFYpIHx8CisJCQkgICAgKHBWQkluZm8tPlZCVHlwZSAmIFZCX1hHSTMwMkxWKSkKIAkJCQlyZXR1cm4gJlhHSV9TdExDRERMRGVzMTYwMHgxMjAwRGF0YVt0ZW1wYWxdOwogCQkJZWxzZQogCQkJCXJldHVybiAmWEdJX1N0TENERGVzMTYwMHgxMjAwRGF0YVt0ZW1wYWxdOwpAQCAtMjMxMCwyMiArMjQzNSwyMiBAQAogCQkJcmV0dXJuICZYR0lfQ2V0TENERGVzMTAyNHg3Njh4NzVEYXRhW3RlbXBhbF07CiAJCQlicmVhazsKIAkJY2FzZSAxNjoKLQkJCWlmICgocFZCSW5mby0+VkJUeXBlICYgVkJfWEdJMzAxTFYpIHx8IChwVkJJbmZvLT5WQlR5cGUKLQkJCQkJJiBWQl9YR0kzMDJMVikpCisJCQlpZiAoKHBWQkluZm8tPlZCVHlwZSAmIFZCX1hHSTMwMUxWKSB8fAorCQkJICAgIChwVkJJbmZvLT5WQlR5cGUgJiBWQl9YR0kzMDJMVikpCiAJCQkJcmV0dXJuICZYR0lfRXh0TENERExEZXMxMjgweDEwMjR4NzVEYXRhW3RlbXBhbF07CiAJCQllbHNlCiAJCQkJcmV0dXJuICZYR0lfRXh0TENERGVzMTI4MHgxMDI0eDc1RGF0YVt0ZW1wYWxdOwogCQkJYnJlYWs7CiAJCWNhc2UgMTc6Ci0JCQlpZiAoKHBWQkluZm8tPlZCVHlwZSAmIFZCX1hHSTMwMUxWKSB8fCAocFZCSW5mby0+VkJUeXBlCi0JCQkJCSYgVkJfWEdJMzAyTFYpKQorCQkJaWYgKChwVkJJbmZvLT5WQlR5cGUgJiBWQl9YR0kzMDFMVikgfHwKKwkJCSAgICAocFZCSW5mby0+VkJUeXBlICYgVkJfWEdJMzAyTFYpKQogCQkJCXJldHVybiAmWEdJX1N0TENERExEZXMxMjgweDEwMjR4NzVEYXRhW3RlbXBhbF07CiAJCQllbHNlCiAJCQkJcmV0dXJuICZYR0lfU3RMQ0REZXMxMjgweDEwMjR4NzVEYXRhW3RlbXBhbF07CiAJCQlicmVhazsKIAkJY2FzZSAxODoKLQkJCWlmICgocFZCSW5mby0+VkJUeXBlICYgVkJfWEdJMzAxTFYpIHx8IChwVkJJbmZvLT5WQlR5cGUKLQkJCQkJJiBWQl9YR0kzMDJMVikpCisJCQlpZiAoKHBWQkluZm8tPlZCVHlwZSAmIFZCX1hHSTMwMUxWKSB8fAorCQkJICAgIChwVkJJbmZvLT5WQlR5cGUgJiBWQl9YR0kzMDJMVikpCiAJCQkJcmV0dXJuICZYR0lfQ2V0TENERExEZXMxMjgweDEwMjR4NzVEYXRhW3RlbXBhbF07CiAJCQllbHNlCiAJCQkJcmV0dXJuICZYR0lfQ2V0TENERGVzMTI4MHgxMDI0eDc1RGF0YVt0ZW1wYWxdOwpAQCAtMjQyMyw3ICsyNTQ4LDggQEAKIAkJaSsrOwogCX0KIAotCWlmICh0YWJsZSA9PSAweDAwKSB7IC8qIDA3LzA1LzIyICovCisJLyogMDcvMDUvMjIgKi8KKwlpZiAodGFibGUgPT0gMHgwMCkgewogCX0gZWxzZSBpZiAodGFibGUgPT0gMHgwMSkgewogCX0gZWxzZSBpZiAodGFibGUgPT0gMHgwNCkgewogCQlzd2l0Y2ggKHRlbXBkaVtpXS5EQVRBUFRSKSB7CkBAIC0yNTI4LDE0ICsyNjU0LDEyIEBACiAJaWYgKHBWQkluZm8tPlZCSW5mbyAmIChTZXRDUlQyVG9MQ0QgfCBTZXRDUlQyVG9MQ0RBKSkgewogCQlpZiAoIShwVkJJbmZvLT5MQ0RJbmZvICYgKFNldExDRHRvTm9uRXhwYW5kaW5nCiAJCQkJfCBFbmFibGVTY2FsaW5nTENEKSkpIHsKLQkJCWlmICgocFZCSW5mby0+TENEUmVzSW5mbyA9PSBQYW5lbDEwMjR4NzY4KQotCQkJCQl8fCAocFZCSW5mby0+TENEUmVzSW5mbwotCQkJCQkJCT09IFBhbmVsMTAyNHg3Njh4NzUpKSB7CisJCQlpZiAoKHBWQkluZm8tPkxDRFJlc0luZm8gPT0gUGFuZWwxMDI0eDc2OCkgfHwKKwkJCSAgICAocFZCSW5mby0+TENEUmVzSW5mbyA9PSBQYW5lbDEwMjR4NzY4eDc1KSkgewogCQkJCXBWQkluZm8tPkhERSA9IDEwMjQ7CiAJCQkJcFZCSW5mby0+VkRFID0gNzY4OwotCQkJfSBlbHNlIGlmICgocFZCSW5mby0+TENEUmVzSW5mbyA9PSBQYW5lbDEyODB4MTAyNCkKLQkJCQkJfHwgKHBWQkluZm8tPkxDRFJlc0luZm8KLQkJCQkJCQk9PSBQYW5lbDEyODB4MTAyNHg3NSkpIHsKKwkJCX0gZWxzZSBpZiAoKHBWQkluZm8tPkxDRFJlc0luZm8gPT0gUGFuZWwxMjgweDEwMjQpIHx8CisJCQkJICAgKHBWQkluZm8tPkxDRFJlc0luZm8gPT0gUGFuZWwxMjgweDEwMjR4NzUpKSB7CiAJCQkJcFZCSW5mby0+SERFID0gMTI4MDsKIAkJCQlwVkJJbmZvLT5WREUgPSAxMDI0OwogCQkJfSBlbHNlIGlmIChwVkJJbmZvLT5MQ0RSZXNJbmZvID09IFBhbmVsMTQwMHgxMDUwKSB7CkBAIC0yNTY5LDE3ICsyNjkzLDE3IEBACiAKIAlpbmRleCA9IGluZGV4ICYgSW5kZXhNYXNrOwogCi0JaWYgKChwVkJJbmZvLT5JRl9ERUZfU2NhbGVMQ0QgPT0gMCkgfHwgKChwVkJJbmZvLT5JRl9ERUZfU2NhbGVMQ0QgPT0gMSkKLQkJCSYmICghKHBWQkluZm8tPkxDREluZm8gJiBFbmFibGVTY2FsaW5nTENEKSkpKSB7CisJaWYgKChwVkJJbmZvLT5JRl9ERUZfU2NhbGVMQ0QgPT0gMCkgfHwKKwkgICAgKChwVkJJbmZvLT5JRl9ERUZfU2NhbGVMQ0QgPT0gMSkgJiYKKwkgICAgKCEocFZCSW5mby0+TENESW5mbyAmIEVuYWJsZVNjYWxpbmdMQ0QpKSkpIHsKIAkJdGVtcGJ4ID0gMDsKIAogCQlpZiAocFZCSW5mby0+VkJJbmZvICYgKFNldENSVDJUb0xDRCB8IFNldENSVDJUb0xDREEpKSB7Ci0JCQlMQ0RQdHIKLQkJCQkJPSAoc3RydWN0IFhHSV9MVkRTQ1JUMUhEYXRhU3RydWN0ICopIFhHSV9HZXRMY2RQdHIoCi0JCQkJCQkJdGVtcGJ4LCBNb2RlTm8sCi0JCQkJCQkJTW9kZUlkSW5kZXgsCi0JCQkJCQkJUmVmcmVzaFJhdGVUYWJsZUluZGV4LAotCQkJCQkJCXBWQkluZm8pOworCQkJTENEUHRyID0gKHN0cnVjdCBYR0lfTFZEU0NSVDFIRGF0YVN0cnVjdCAqKQorCQkJCQlYR0lfR2V0TGNkUHRyKHRlbXBieCwgTW9kZU5vLAorCQkJCQkJICAgICAgTW9kZUlkSW5kZXgsCisJCQkJCQkgICAgICBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsCisJCQkJCQkgICAgICBwVkJJbmZvKTsKIAogCQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKIAkJCQlwVkJJbmZvLT5UaW1pbmdIWzBdLmRhdGFbaV0gPSBMQ0RQdHJbMF0uUmVnW2ldOwpAQCAtMjU4NywyMyArMjcxMSwzMCBAQAogCiAJCWlmIChwVkJJbmZvLT5JRl9ERUZfQ0g3MDA3ID09IDEpIHsKIAkJCWlmIChwVkJJbmZvLT5WQkluZm8gJiBTZXRDUlQyVG9UVikgewotCQkJCUNINzAwN1RWX1RpbWluZ0hQdHIKLQkJCQkJCT0gKHN0cnVjdCBYR0lfQ0g3MDA3VFZfVGltaW5nSFN0cnVjdCAqKSBYR0lfR2V0VFZQdHIoCi0JCQkJCQkJCXRlbXBieCwKLQkJCQkJCQkJTW9kZU5vLAotCQkJCQkJCQlNb2RlSWRJbmRleCwKLQkJCQkJCQkJUmVmcmVzaFJhdGVUYWJsZUluZGV4LAotCQkJCQkJCQlwVkJJbmZvKTsKKwkJCQlDSDcwMDdUVl9UaW1pbmdIUHRyID0KKwkJCQkJKHN0cnVjdCBYR0lfQ0g3MDA3VFZfVGltaW5nSFN0cnVjdCAqKQorCQkJCQkJWEdJX0dldFRWUHRyKAorCQkJCQkJCXRlbXBieCwKKwkJCQkJCQlNb2RlTm8sCisJCQkJCQkJTW9kZUlkSW5kZXgsCisJCQkJCQkJUmVmcmVzaFJhdGVUYWJsZUluZGV4LAorCQkJCQkJCXBWQkluZm8pOwogCiAJCQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJCQkJcFZCSW5mby0+VGltaW5nSFswXS5kYXRhW2ldCi0JCQkJCQkJPSBDSDcwMDdUVl9UaW1pbmdIUHRyWzBdLmRhdGFbaV07CisJCQkJCXBWQkluZm8tPlRpbWluZ0hbMF0uZGF0YVtpXSA9CisJCQkJCQlDSDcwMDdUVl9UaW1pbmdIUHRyWzBdLmRhdGFbaV07CiAJCQl9CiAJCX0KIAogCQkvKiBpZiAocFZCSW5mby0+SUZfREVGX0NINzAxNyA9PSAxKSB7CiAJCQlpZiAocFZCSW5mby0+VkJJbmZvICYgU2V0Q1JUMlRvVFYpCi0JCQkJVFZQdHIgPSAoc3RydWN0IFhHSTMzMF9DSFRWRGF0YVN0cnVjdCAqKVhHSV9HZXRUVlB0cih0ZW1wYngsIE1vZGVObywgTW9kZUlkSW5kZXgsIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgcFZCSW5mbyk7CisJCQkJVFZQdHIgPSAoc3RydWN0IFhHSTMzMF9DSFRWRGF0YVN0cnVjdCAqKQorCQkJCQkJWEdJX0dldFRWUHRyKAorCQkJCQkJCXRlbXBieCwKKwkJCQkJCQlNb2RlTm8sCisJCQkJCQkJTW9kZUlkSW5kZXgsCisJCQkJCQkJUmVmcmVzaFJhdGVUYWJsZUluZGV4LAorCQkJCQkJCXBWQkluZm8pOwogCQl9CiAJCSovCiAKQEAgLTI2MTksMzQgKzI3NTAsNDEgQEAKIAkJdGVtcGJ4ID0gMTsKIAogCQlpZiAocFZCSW5mby0+VkJJbmZvICYgKFNldENSVDJUb0xDRCB8IFNldENSVDJUb0xDREEpKSB7Ci0JCQlMQ0RQdHIxCi0JCQkJCT0gKHN0cnVjdCBYR0lfTFZEU0NSVDFWRGF0YVN0cnVjdCAqKSBYR0lfR2V0TGNkUHRyKAotCQkJCQkJCXRlbXBieCwgTW9kZU5vLAotCQkJCQkJCU1vZGVJZEluZGV4LAotCQkJCQkJCVJlZnJlc2hSYXRlVGFibGVJbmRleCwKLQkJCQkJCQlwVkJJbmZvKTsKKwkJCUxDRFB0cjEgPSAoc3RydWN0IFhHSV9MVkRTQ1JUMVZEYXRhU3RydWN0ICopCisJCQkJCVhHSV9HZXRMY2RQdHIoCisJCQkJCQl0ZW1wYngsCisJCQkJCQlNb2RlTm8sCisJCQkJCQlNb2RlSWRJbmRleCwKKwkJCQkJCVJlZnJlc2hSYXRlVGFibGVJbmRleCwKKwkJCQkJCXBWQkluZm8pOwogCQkJZm9yIChpID0gMDsgaSA8IDc7IGkrKykKIAkJCQlwVkJJbmZvLT5UaW1pbmdWWzBdLmRhdGFbaV0gPSBMQ0RQdHIxWzBdLlJlZ1tpXTsKIAkJfQogCiAJCWlmIChwVkJJbmZvLT5JRl9ERUZfQ0g3MDA3ID09IDEpIHsKIAkJCWlmIChwVkJJbmZvLT5WQkluZm8gJiBTZXRDUlQyVG9UVikgewotCQkJCUNINzAwN1RWX1RpbWluZ1ZQdHIKLQkJCQkJCT0gKHN0cnVjdCBYR0lfQ0g3MDA3VFZfVGltaW5nVlN0cnVjdCAqKSBYR0lfR2V0VFZQdHIoCi0JCQkJCQkJCXRlbXBieCwKLQkJCQkJCQkJTW9kZU5vLAotCQkJCQkJCQlNb2RlSWRJbmRleCwKLQkJCQkJCQkJUmVmcmVzaFJhdGVUYWJsZUluZGV4LAotCQkJCQkJCQlwVkJJbmZvKTsKKwkJCQlDSDcwMDdUVl9UaW1pbmdWUHRyID0KKwkJCQkJKHN0cnVjdCBYR0lfQ0g3MDA3VFZfVGltaW5nVlN0cnVjdCAqKQorCQkJCQkJWEdJX0dldFRWUHRyKAorCQkJCQkJCXRlbXBieCwKKwkJCQkJCQlNb2RlTm8sCisJCQkJCQkJTW9kZUlkSW5kZXgsCisJCQkJCQkJUmVmcmVzaFJhdGVUYWJsZUluZGV4LAorCQkJCQkJCXBWQkluZm8pOwogCiAJCQkJZm9yIChpID0gMDsgaSA8IDc7IGkrKykKLQkJCQkJcFZCSW5mby0+VGltaW5nVlswXS5kYXRhW2ldCi0JCQkJCQkJPSBDSDcwMDdUVl9UaW1pbmdWUHRyWzBdLmRhdGFbaV07CisJCQkJCXBWQkluZm8tPlRpbWluZ1ZbMF0uZGF0YVtpXSA9CisJCQkJCQlDSDcwMDdUVl9UaW1pbmdWUHRyWzBdLmRhdGFbaV07CiAJCQl9CiAJCX0KIAkJLyogaWYgKHBWQkluZm8tPklGX0RFRl9DSDcwMTcgPT0gMSkgewogCQkJaWYgKHBWQkluZm8tPlZCSW5mbyAmIFNldENSVDJUb1RWKQotCQkJCVRWUHRyID0gKHN0cnVjdCBYR0kzMzBfQ0hUVkRhdGFTdHJ1Y3QgKilYR0lfR2V0VFZQdHIodGVtcGJ4LCBNb2RlTm8sIE1vZGVJZEluZGV4LCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHBWQkluZm8pOworCQkJCVRWUHRyID0gKHN0cnVjdCBYR0kzMzBfQ0hUVkRhdGFTdHJ1Y3QgKikKKwkJCQkJWEdJX0dldFRWUHRyKHRlbXBieCwKKwkJCQkJCSAgICAgTW9kZU5vLAorCQkJCQkJICAgICBNb2RlSWRJbmRleCwKKwkJCQkJCSAgICAgUmVmcmVzaFJhdGVUYWJsZUluZGV4LAorCQkJCQkJICAgICBwVkJJbmZvKTsKIAkJfQogCQkqLwogCkBAIC0yNzIzLDggKzI4NjEsOSBAQAogCXJldHVybiBpOwogfQogCi1zdGF0aWMgdm9pZCBYR0lfR2V0TENEU3luYyh1bnNpZ25lZCBzaG9ydCAqSFN5bmNXaWR0aCwgdW5zaWduZWQgc2hvcnQgKlZTeW5jV2lkdGgsCi0JCXN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKK3N0YXRpYyB2b2lkIFhHSV9HZXRMQ0RTeW5jKHVuc2lnbmVkIHNob3J0ICpIU3luY1dpZHRoLAorCQkJICAgdW5zaWduZWQgc2hvcnQgKlZTeW5jV2lkdGgsCisJCQkgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAJdW5zaWduZWQgc2hvcnQgSW5kZXg7CiAKQEAgLTI3NTQsMzMgKzI4OTMsMzUgQEAKIAkJCQkmIChTZXRDUlQyVG9MQ0QgfCBTZXRDUlQyVG9MQ0RBKSkpIHsKIAkJCWlmIChwVkJJbmZvLT5JRl9ERUZfT0VNVXRpbCA9PSAxKSB7CiAJCQkJdGVtcGJ4ID0gODsKLQkJCQlMQ0RQdHIKLQkJCQkJCT0gKHN0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAqKSBYR0lfR2V0TGNkUHRyKAotCQkJCQkJCQl0ZW1wYngsCi0JCQkJCQkJCU1vZGVObywKLQkJCQkJCQkJTW9kZUlkSW5kZXgsCi0JCQkJCQkJCVJlZnJlc2hSYXRlVGFibGVJbmRleCwKLQkJCQkJCQkJcFZCSW5mbyk7CisJCQkJTENEUHRyID0gKHN0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAqKQorCQkJCQlYR0lfR2V0TGNkUHRyKHRlbXBieCwKKwkJCQkJCSAgICAgIE1vZGVObywKKwkJCQkJCSAgICAgIE1vZGVJZEluZGV4LAorCQkJCQkJICAgICAgUmVmcmVzaFJhdGVUYWJsZUluZGV4LAorCQkJCQkJICAgICAgcFZCSW5mbyk7CiAJCQl9CiAKLQkJCWlmICgocFZCSW5mby0+SUZfREVGX09FTVV0aWwgPT0gMCkgfHwgKExDRFB0ciA9PSBOVUxMKSkgeworCQkJaWYgKChwVkJJbmZvLT5JRl9ERUZfT0VNVXRpbCA9PSAwKSB8fAorCQkJICAgIChMQ0RQdHIgPT0gTlVMTCkpIHsKIAkJCQl0ZW1wYnggPSAzOwogCQkJCWlmIChwVkJJbmZvLT5MQ0RJbmZvICYgRW5hYmxlU2NhbGluZ0xDRCkKLQkJCQkJTENEUHRyMQotCQkJCQkJCT0gKHN0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdDIgKikgWEdJX0dldExjZFB0cigKLQkJCQkJCQkJCXRlbXBieCwKLQkJCQkJCQkJCU1vZGVObywKLQkJCQkJCQkJCU1vZGVJZEluZGV4LAotCQkJCQkJCQkJUmVmcmVzaFJhdGVUYWJsZUluZGV4LAotCQkJCQkJCQkJcFZCSW5mbyk7CisJCQkJCUxDRFB0cjEgPQorCQkJCQkgICAgKHN0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdDIgKikKKwkJCQkJCQlYR0lfR2V0TGNkUHRyKAorCQkJCQkJCSAgdGVtcGJ4LAorCQkJCQkJCSAgTW9kZU5vLAorCQkJCQkJCSAgTW9kZUlkSW5kZXgsCisJCQkJCQkJICBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsCisJCQkJCQkJICBwVkJJbmZvKTsKIAkJCQllbHNlCi0JCQkJCUxDRFB0cgotCQkJCQkJCT0gKHN0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAqKSBYR0lfR2V0TGNkUHRyKAotCQkJCQkJCQkJdGVtcGJ4LAotCQkJCQkJCQkJTW9kZU5vLAotCQkJCQkJCQkJTW9kZUlkSW5kZXgsCi0JCQkJCQkJCQlSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsCi0JCQkJCQkJCQlwVkJJbmZvKTsKKwkJCQkJTENEUHRyID0KKwkJCQkJICAgIChzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgKikKKwkJCQkJCQlYR0lfR2V0TGNkUHRyKAorCQkJCQkJCSAgdGVtcGJ4LAorCQkJCQkJCSAgTW9kZU5vLAorCQkJCQkJCSAgTW9kZUlkSW5kZXgsCisJCQkJCQkJICBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsCisJCQkJCQkJICBwVkJJbmZvKTsKIAkJCX0KIAogCQkJWEdJX0dldExDRFN5bmMoJnRlbXBheCwgJnRlbXBieCwgcFZCSW5mbyk7CkBAIC0yNzg4LDE0ICsyOTI5LDEyIEBACiAJCQlwdXNoMiA9IHRlbXBheDsKIAogCQkJLyogR2V0TENEUmVzSW5mbyAqLwotCQkJaWYgKChwVkJJbmZvLT5MQ0RSZXNJbmZvID09IFBhbmVsMTAyNHg3NjgpCi0JCQkJCXx8IChwVkJJbmZvLT5MQ0RSZXNJbmZvCi0JCQkJCQkJPT0gUGFuZWwxMDI0eDc2OHg3NSkpIHsKKwkJCWlmICgocFZCSW5mby0+TENEUmVzSW5mbyA9PSBQYW5lbDEwMjR4NzY4KSB8fAorCQkJICAgIChwVkJJbmZvLT5MQ0RSZXNJbmZvID09IFBhbmVsMTAyNHg3Njh4NzUpKSB7CiAJCQkJdGVtcGF4ID0gMTAyNDsKIAkJCQl0ZW1wYnggPSA3Njg7Ci0JCQl9IGVsc2UgaWYgKChwVkJJbmZvLT5MQ0RSZXNJbmZvID09IFBhbmVsMTI4MHgxMDI0KQotCQkJCQl8fCAocFZCSW5mby0+TENEUmVzSW5mbwotCQkJCQkJCT09IFBhbmVsMTI4MHgxMDI0eDc1KSkgeworCQkJfSBlbHNlIGlmICgocFZCSW5mby0+TENEUmVzSW5mbyA9PSBQYW5lbDEyODB4MTAyNCkgfHwKKwkJCQkgICAocFZCSW5mby0+TENEUmVzSW5mbyA9PSBQYW5lbDEyODB4MTAyNHg3NSkpIHsKIAkJCQl0ZW1wYXggPSAxMjgwOwogCQkJCXRlbXBieCA9IDEwMjQ7CiAJCQl9IGVsc2UgaWYgKHBWQkluZm8tPkxDRFJlc0luZm8gPT0gUGFuZWwxNDAweDEwNTApIHsKQEAgLTI4MTMsOCArMjk1Miw4IEBACiAJCQkJcFZCSW5mby0+VkdBVkRFID0gdGVtcGJ4OwogCQkJfQogCi0JCQlpZiAoKHBWQkluZm8tPklGX0RFRl9TY2FsZUxDRCA9PSAxKQotCQkJCQkmJiAocFZCSW5mby0+TENESW5mbyAmIEVuYWJsZVNjYWxpbmdMQ0QpKSB7CisJCQlpZiAoKHBWQkluZm8tPklGX0RFRl9TY2FsZUxDRCA9PSAxKSAmJgorCQkJICAgIChwVkJJbmZvLT5MQ0RJbmZvICYgRW5hYmxlU2NhbGluZ0xDRCkpIHsKIAkJCQl0ZW1wYXggPSBwVkJJbmZvLT5IREU7CiAJCQkJdGVtcGJ4ID0gcFZCSW5mby0+VkRFOwogCQkJfQpAQCAtMjk2MSwxNiArMzEwMCwxOCBAQAogCiAJCQlpZiAocFZCSW5mby0+VkJUeXBlICYgVkJfWEdJMzAxQykgewogCQkJCXRlbXAyID0gcHVzaDM7Ci0JCQkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QYXJ0NFBvcnQsIDB4M2MsCi0JCQkJCQkodW5zaWduZWQgc2hvcnQpICh0ZW1wMiAmIDB4ZmYpKTsKLQkJCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlBhcnQ0UG9ydCwgMHgzYiwKLQkJCQkJCSh1bnNpZ25lZCBzaG9ydCkgKCh0ZW1wMiA+PiA4KQotCQkJCQkJCQkmIDB4ZmYpKTsKKwkJCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlBhcnQ0UG9ydCwKKwkJCQkJICAgICAgMHgzYywKKwkJCQkJICAgICAgKHVuc2lnbmVkIHNob3J0KSAodGVtcDIgJiAweGZmKSk7CisJCQkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QYXJ0NFBvcnQsCisJCQkJCSAgICAgIDB4M2IsCisJCQkJCSAgICAgICh1bnNpZ25lZCBzaG9ydCkgKCh0ZW1wMiA+PiA4KSAmCisJCQkJCSAgICAgIDB4ZmYpKTsKIAkJCQl0ZW1wYnggPSAodW5zaWduZWQgc2hvcnQpICh0ZW1wMiA+PiAxNik7CiAJCQkJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QYXJ0NFBvcnQsIDB4M2EsCiAJCQkJCQl+MHhjMCwKLQkJCQkJCSh1bnNpZ25lZCBzaG9ydCkgKCh0ZW1wYngKLQkJCQkJCQkJJiAweGZmKSA8PCA2KSk7CisJCQkJCQkodW5zaWduZWQgc2hvcnQpICgodGVtcGJ4ICYKKwkJCQkJCQkJICAgMHhmZikgPDwgNikpOwogCiAJCQkJdGVtcGN4ID0gcFZCSW5mby0+VkdBVkRFOwogCQkJCWlmICh0ZW1wY3ggPT0gcFZCSW5mby0+VkRFKQpAQCAtMzA3MiwxMiArMzIxMywxNCBAQAogCXVuc2lnbmVkIGNoYXIgKkNIVFZWQ0xLUHRyID0gTlVMTDsKIAogCWlmIChNb2RlTm8gPD0gMHgxMykKLQkJbW9kZWZsYWcgPSBwVkJJbmZvLT5TTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLlN0X01vZGVGbGFnOyAvKiBzaStTdF9SZXNJbmZvICovCisJCS8qIHNpK1N0X1Jlc0luZm8gKi8KKwkJbW9kZWZsYWcgPSBwVkJJbmZvLT5TTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLlN0X01vZGVGbGFnOwogCWVsc2UKLQkJbW9kZWZsYWcgPSBwVkJJbmZvLT5FTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLkV4dF9Nb2RlRmxhZzsgLyogc2krRXh0X1Jlc0luZm8gKi8KKwkJLyogc2krRXh0X1Jlc0luZm8gKi8KKwkJbW9kZWZsYWcgPSBwVkJJbmZvLT5FTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLkV4dF9Nb2RlRmxhZzsKIAotCWlmICgocFZCSW5mby0+U2V0RmxhZyAmIFByb2dyYW1taW5nQ1JUMikgJiYgKCEocFZCSW5mby0+TENESW5mbwotCQkJJiBFbmFibGVTY2FsaW5nTENEKSkpIHsgLyoge0xDREEvTENEQn0gKi8KKwlpZiAoKHBWQkluZm8tPlNldEZsYWcgJiBQcm9ncmFtbWluZ0NSVDIpICYmCisJICAgICghKHBWQkluZm8tPkxDREluZm8gJiBFbmFibGVTY2FsaW5nTENEKSkpIHsgLyoge0xDREEvTENEQn0gKi8KIAkJaW5kZXggPSBYR0lfR2V0TENEQ2FwUHRyKHBWQkluZm8pOwogCQl0ZW1wYWwgPSBwVkJJbmZvLT5MQ0RDYXBMaXN0W2luZGV4XS5MQ0RfVkNMSzsKIApAQCAtMzA4NSw4ICszMjI4LDEyIEBACiAJCQlyZXR1cm4gdGVtcGFsOwogCiAJCS8qIHtUVn0gKi8KLQkJaWYgKHBWQkluZm8tPlZCVHlwZSAmIChWQl9YR0kzMDFCIHwgVkJfWEdJMzAyQiB8IFZCX1hHSTMwMUxWCi0JCQkJfCBWQl9YR0kzMDJMViB8IFZCX1hHSTMwMUMpKSB7CisJCWlmIChwVkJJbmZvLT5WQlR5cGUgJgorCQkgICAgKFZCX1hHSTMwMUIgfAorCQkgICAgIFZCX1hHSTMwMkIgfAorCQkgICAgIFZCX1hHSTMwMUxWIHwKKwkJICAgICBWQl9YR0kzMDJMViB8CisJCSAgICAgVkJfWEdJMzAxQykpIHsKIAkJCWlmIChwVkJJbmZvLT5WQkluZm8gJiBTZXRDUlQyVG9IaVZpc2lvblRWKSB7CiAJCQkJdGVtcGFsID0gSGlUVlZDTEtESVYyOwogCQkJCWlmICghKHBWQkluZm8tPlRWSW5mbyAmIFJQTExESVYyWE8pKQpAQCAtMzEyMSwxMSArMzI2OCwxNCBAQAogCQkJaWYgKHBWQkluZm8tPlZCSW5mbyAmIFNldENSVDJUb1RWKQogCQkJCXJldHVybiB0ZW1wYWw7CiAJCX0KLQkJLyogZWxzZSBpZiAoKHBWQkluZm8tPklGX0RFRl9DSDcwMTc9PTEpJiYocFZCSW5mby0+VkJUeXBlJlZCX0NINzAxNykpIHsKKwkJLyogZWxzZSBpZiAoKHBWQkluZm8tPklGX0RFRl9DSDcwMTc9PTEpICYmCisJCQkgICAgKHBWQkluZm8tPlZCVHlwZSZWQl9DSDcwMTcpKSB7CiAJCQlpZiAoTW9kZU5vPD0weDEzKQotCQkJCSp0ZW1wYWwgPSBwVkJJbmZvLT5TTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLlN0X0NSVDJDUlRDOworCQkJCSp0ZW1wYWwgPSBwVkJJbmZvLT5TTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLgorCQkJCQkJU3RfQ1JUMkNSVEM7CiAJCQllbHNlCi0JCQkJKnRlbXBhbCA9IHBWQkluZm8tPlJlZkluZGV4W1JlZnJlc2hSYXRlVGFibGVJbmRleF0uRXh0X0NSVDJDUlRDOworCQkJCSp0ZW1wYWwgPSBwVkJJbmZvLT5SZWZJbmRleFsKKwkJCQkJUmVmcmVzaFJhdGVUYWJsZUluZGV4XS5FeHRfQ1JUMkNSVEM7CiAJCQkqdGVtcGFsID0gKnRlbXBhbCAmIDB4MUY7CiAJCQl0ZW1wYnggPSAwOwogCQkJaWYgKHBWQkluZm8tPlRWSW5mbyAmIFNldFBBTFRWKQpAQCAtMzEzNiwxNSArMzI4NiwxOCBAQAogCQl9ICovCiAJfSAvKiB7RW5kIG9mIFZCfSAqLwogCi0JaWYgKChwVkJJbmZvLT5JRl9ERUZfQ0g3MDA3ID09IDEpICYmIChwVkJJbmZvLT5WQlR5cGUgJiBWQl9DSDcwMDcpKSB7IC8qIFtCaWxseV0gMDcvMDUvMDggQ0g3MDA3ICovCi0JCS8qIFZpZGVvRGVidWdQcmludCgoMCwgIlhHSV9HZXRWQ0xLUHRyOiBwVkJJbmZvLT5JRl9ERUZfQ0g3MDA3PT0xXG4iKSk7ICovCisJaWYgKChwVkJJbmZvLT5JRl9ERUZfQ0g3MDA3ID09IDEpICYmCisJICAgIChwVkJJbmZvLT5WQlR5cGUgJiBWQl9DSDcwMDcpKSB7IC8qIFtCaWxseV0gMDcvMDUvMDggQ0g3MDA3ICovCisJCS8qIFZpZGVvRGVidWdQcmludCgoCisJCQkwLAorCQkJIlhHSV9HZXRWQ0xLUHRyOiBwVkJJbmZvLT5JRl9ERUZfQ0g3MDA3PT0xXG4iKSk7ICovCiAJCWlmICgocFZCSW5mby0+VkJJbmZvICYgU2V0Q1JUMlRvVFYpKSB7CiAJCQlpZiAoTW9kZU5vIDw9IDB4MTMpIHsKLQkJCQl0ZW1wYWwKLQkJCQkJCT0gcFZCSW5mby0+U01vZGVJRFRhYmxlW01vZGVJZEluZGV4XS5TdF9DUlQyQ1JUQzsKKwkJCQl0ZW1wYWwgPSBwVkJJbmZvLT5TTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLgorCQkJCQlTdF9DUlQyQ1JUQzsKIAkJCX0gZWxzZSB7Ci0JCQkJdGVtcGFsCi0JCQkJCQk9IHBWQkluZm8tPlJlZkluZGV4W1JlZnJlc2hSYXRlVGFibGVJbmRleF0uRXh0X0NSVDJDUlRDOworCQkJCXRlbXBhbCA9IHBWQkluZm8tPlJlZkluZGV4WworCQkJCQlSZWZyZXNoUmF0ZVRhYmxlSW5kZXhdLkV4dF9DUlQyQ1JUQzsKIAkJCX0KIAogCQkJdGVtcGFsID0gdGVtcGFsICYgMHgwRjsKQEAgLTMyMDgsNyArMzM2MSw4IEBACiAJdGVtcGFsID0gdGVtcGFsID4+IDI7CiAJdGVtcGFsICY9IDB4MDM7CiAKLQlpZiAoKHBWQkluZm8tPkxDREluZm8gJiBFbmFibGVTY2FsaW5nTENEKSAmJiAobW9kZWZsYWcgJiBDaGFyeDhEb3QpKSAvKiBmb3IgRG90OCBTY2FsaW5nIExDRCAqLworCS8qIGZvciBEb3Q4IFNjYWxpbmcgTENEICovCisJaWYgKChwVkJJbmZvLT5MQ0RJbmZvICYgRW5hYmxlU2NhbGluZ0xDRCkgJiYgKG1vZGVmbGFnICYgQ2hhcng4RG90KSkKIAkJdGVtcGFsID0gdGVtcGFsIF4gdGVtcGFsOyAvKiA7IHNldCB0byBWQ0xLMjVNSHogYWx3YXlzICovCiAKIAlpZiAoTW9kZU5vIDw9IDB4MTMpCkBAIC0zMjIyLDcgKzMzNzYsOSBAQAogCQl1bnNpZ25lZCBjaGFyICpkaV8xLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAJaWYgKHBWQkluZm8tPklGX0RFRl9DSDcwMDcgPT0gMSkgeyAvKiBbQmlsbHldIDIwMDcvMDUvMTYgKi8KLQkJLyogVmlkZW9EZWJ1Z1ByaW50KCgwLCAiWEdJX0dldFZDTEtMZW46IHBWQkluZm8tPklGX0RFRl9DSDcwMDc9PTFcbiIpKTsgKi8KKwkJLyogVmlkZW9EZWJ1Z1ByaW50KCgKKwkJCTAsCisJCQkiWEdJX0dldFZDTEtMZW46IHBWQkluZm8tPklGX0RFRl9DSDcwMDc9PTFcbiIpKTsgKi8KIAkJKmRpXzAgPSAodW5zaWduZWQgY2hhcikgWEdJX0NINzAwN1ZDTEtEYXRhW3RlbXBhbF0uU1IyQjsKIAkJKmRpXzEgPSAodW5zaWduZWQgY2hhcikgWEdJX0NINzAwN1ZDTEtEYXRhW3RlbXBhbF0uU1IyQzsKIAl9IGVsc2UgaWYgKHBWQkluZm8tPlZCVHlwZSAmIChWQl9YR0kzMDEgfCBWQl9YR0kzMDFCIHwgVkJfWEdJMzAyQgpAQCAtMzI5MSw3ICszNDQ3LDggQEAKIAkJdGVtcCAmPSAweDBmOwogCiAJCWlmICghKHRlbXAgPT0gMHgwOCkpIHsKLQkJCXRlbXBheCA9IHhnaWZiX3JlZ19nZXQocFZCSW5mby0+UGFydDFQb3J0LCAweDEzKTsgLyogQ2hlY2sgQ2hhbm5lbEEgYnkgUGFydDFfMTMgWzIwMDMvMTAvMDNdICovCisJCQkvKiBDaGVjayBDaGFubmVsQSBieSBQYXJ0MV8xMyBbMjAwMy8xMC8wM10gKi8KKwkJCXRlbXBheCA9IHhnaWZiX3JlZ19nZXQocFZCSW5mby0+UGFydDFQb3J0LCAweDEzKTsKIAkJCWlmICh0ZW1wYXggJiAweDA0KQogCQkJCXRlbXBjbCA9IHRlbXBjbCB8IEFjdGl2ZUxDRDsKIApAQCAtMzM4OCwxMyArMzU0NSwxMiBAQAogCQkJCQkJdGVtcGJ4ID0gVkJfWEdJMzAxTFY7CiAJCQkJCQlpZiAoZmxhZyA+PSAweEUwKSB7CiAJCQkJCQkJdGVtcGJ4ID0gVkJfWEdJMzAyTFY7Ci0JCQkJCQkJdGVtcGFoCi0JCQkJCQkJCQk9IHhnaWZiX3JlZ19nZXQoCi0JCQkJCQkJCQkJCXBWQkluZm8tPlBhcnQ0UG9ydCwKLQkJCQkJCQkJCQkJMHgzOSk7CisJCQkJCQkJdGVtcGFoID0geGdpZmJfcmVnX2dldCgKKwkJCQkJCQkgICAgcFZCSW5mby0+UGFydDRQb3J0LAorCQkJCQkJCSAgICAweDM5KTsKIAkJCQkJCQlpZiAodGVtcGFoICE9IDB4RkYpCi0JCQkJCQkJCXRlbXBieAotCQkJCQkJCQkJCT0gVkJfWEdJMzAxQzsKKwkJCQkJCQkJdGVtcGJ4ID0KKwkJCQkJCQkJICAgIFZCX1hHSTMwMUM7CiAJCQkJCQl9CiAJCQkJCX0KIAkJCQl9CkBAIC0zNDM2LDcgKzM1OTIsOCBAQAogCXRlbXBieCA9IDA7CiAKIAlpZiAocFZCSW5mby0+VkJUeXBlICYgMHhGRkZGKSB7Ci0JCXRlbXAgPSB4Z2lmYl9yZWdfZ2V0KHBWQkluZm8tPlAzZDQsIDB4MzApOyAvKiBDaGVjayBEaXNwbGF5IERldmljZSAqLworCQkvKiBDaGVjayBEaXNwbGF5IERldmljZSAqLworCQl0ZW1wID0geGdpZmJfcmVnX2dldChwVkJJbmZvLT5QM2Q0LCAweDMwKTsKIAkJdGVtcGJ4ID0gdGVtcGJ4IHwgdGVtcDsKIAkJdGVtcCA9IHhnaWZiX3JlZ19nZXQocFZCSW5mby0+UDNkNCwgMHgzMSk7CiAJCXB1c2ggPSB0ZW1wOwpAQCAtMzQ1NSwyOSArMzYxMiwzNCBAQAogCQkJaWYgKChwVkJJbmZvLT5TZXRfVkdBVHlwZSA+PSBYRzIwKQogCQkJCQl8fCAocFZCSW5mby0+U2V0X1ZHQVR5cGUgPj0gWEc0MCkpIHsKIAkJCQlpZiAocFZCSW5mby0+SUZfREVGX0xWRFMgPT0gMCkgewotCQkJCQkvKiBpZiAoKHBWQkluZm8tPlZCVHlwZSAmIFZCX1hHSTMwMkIpIHx8IChwVkJJbmZvLT5WQlR5cGUgJiBWQl9YR0kzMDFMVikgfHwgKHBWQkluZm8tPlZCVHlwZSAmIFZCX1hHSTMwMkxWKSB8fCAocFZCSW5mby0+VkJUeXBlICYgVkJfWEdJMzAxQykpICovCi0JCQkJCWlmIChwVkJJbmZvLT5WQlR5cGUgJiAoVkJfWEdJMzAyQgotCQkJCQkJCXwgVkJfWEdJMzAxTFYKLQkJCQkJCQl8IFZCX1hHSTMwMkxWCi0JCQkJCQkJfCBWQl9YR0kzMDFDKSkgeworCQkJCQkvKiBpZiAoKHBWQkluZm8tPlZCVHlwZSAmIFZCX1hHSTMwMkIpCisJCQkJCSAgICB8fCAocFZCSW5mby0+VkJUeXBlICYgVkJfWEdJMzAxTFYpCisJCQkJCSAgICB8fCAocFZCSW5mby0+VkJUeXBlICYgVkJfWEdJMzAyTFYpCisJCQkJCSAgICB8fCAocFZCSW5mby0+VkJUeXBlICYgVkJfWEdJMzAxQykpCisJCQkJCSovCisJCQkJCWlmIChwVkJJbmZvLT5WQlR5cGUgJgorCQkJCQkgICAgKFZCX1hHSTMwMkIgfAorCQkJCQkgICAgIFZCX1hHSTMwMUxWIHwKKwkJCQkJICAgICBWQl9YR0kzMDJMViB8CisJCQkJCSAgICAgVkJfWEdJMzAxQykpIHsKIAkJCQkJCWlmICh0ZW1wICYgRW5hYmxlRHVhbEVkZ2UpIHsKLQkJCQkJCQl0ZW1wYngKLQkJCQkJCQkJCXw9IFNldENSVDJUb0R1YWxFZGdlOworCQkJCQkJCXRlbXBieCB8PQorCQkJCQkJCSAgICBTZXRDUlQyVG9EdWFsRWRnZTsKIAogCQkJCQkJCWlmICh0ZW1wICYgU2V0VG9MQ0RBKQotCQkJCQkJCQl0ZW1wYngKLQkJCQkJCQkJCQl8PSBTZXRDUlQyVG9MQ0RBOworCQkJCQkJCQl0ZW1wYnggfD0KKwkJCQkJCQkJICBTZXRDUlQyVG9MQ0RBOwogCQkJCQkJfQogCQkJCQl9CiAJCQkJfSBlbHNlIGlmIChwVkJJbmZvLT5JRl9ERUZfQ0g3MDE3ID09IDEpIHsKIAkJCQkJaWYgKHBWQkluZm8tPlZCVHlwZSAmIFZCX0NINzAxNykgewogCQkJCQkJaWYgKHRlbXAgJiBFbmFibGVEdWFsRWRnZSkgewotCQkJCQkJCXRlbXBieAotCQkJCQkJCQkJfD0gU2V0Q1JUMlRvRHVhbEVkZ2U7CisJCQkJCQkJdGVtcGJ4IHw9CisJCQkJCQkJICAgIFNldENSVDJUb0R1YWxFZGdlOwogCiAJCQkJCQkJaWYgKHRlbXAgJiBTZXRUb0xDREEpCi0JCQkJCQkJCXRlbXBieAotCQkJCQkJCQkJCXw9IFNldENSVDJUb0xDREE7CisJCQkJCQkJCXRlbXBieCB8PQorCQkJCQkJCQkgIFNldENSVDJUb0xDREE7CiAJCQkJCQl9CiAJCQkJCX0KIAkJCQl9CkBAIC0zNDg1LDI5ICszNjQ3LDMwIEBACiAJCX0KIAogCQlpZiAocFZCSW5mby0+SUZfREVGX1lQYlByID09IDEpIHsKLQkJCWlmICgoKHBWQkluZm8tPklGX0RFRl9MVkRTID09IDApICYmICgocFZCSW5mby0+VkJUeXBlCi0JCQkJCSYgVkJfWEdJMzAxTFYpIHx8IChwVkJJbmZvLT5WQlR5cGUKLQkJCQkJJiBWQl9YR0kzMDJMVikgfHwgKHBWQkluZm8tPlZCVHlwZQotCQkJCQkmIFZCX1hHSTMwMUMpKSkKLQkJCQkJfHwgKChwVkJJbmZvLT5JRl9ERUZfQ0g3MDE3ID09IDEpCi0JCQkJCQkJJiYgKHBWQkluZm8tPlZCVHlwZQotCQkJCQkJCQkJJiBWQl9DSDcwMTcpKQotCQkJCQl8fCAoKHBWQkluZm8tPklGX0RFRl9DSDcwMDcgPT0gMSkKLQkJCQkJCQkmJiAocFZCSW5mby0+VkJUeXBlCi0JCQkJCQkJCQkmIFZCX0NINzAwNykpKSB7IC8qIFtCaWxseV0gMDcvMDUvMDQgKi8KKwkJCS8qIFtCaWxseV0gMDcvMDUvMDQgKi8KKwkJCWlmICgoKHBWQkluZm8tPklGX0RFRl9MVkRTID09IDApICYmCisJCQkgICAgKChwVkJJbmZvLT5WQlR5cGUgJiBWQl9YR0kzMDFMVikgfHwKKwkJCSAgICAocFZCSW5mby0+VkJUeXBlICYgVkJfWEdJMzAyTFYpIHx8CisJCQkgICAgKHBWQkluZm8tPlZCVHlwZSAmIFZCX1hHSTMwMUMpKSkgfHwKKwkJCSAgICAoKHBWQkluZm8tPklGX0RFRl9DSDcwMTcgPT0gMSkgJiYKKwkJCSAgICAocFZCSW5mby0+VkJUeXBlICYgVkJfQ0g3MDE3KSkgfHwKKwkJCSAgICAoKHBWQkluZm8tPklGX0RFRl9DSDcwMDcgPT0gMSkgJiYKKwkJCSAgICAocFZCSW5mby0+VkJUeXBlICYgVkJfQ0g3MDA3KSkpIHsKIAkJCQlpZiAodGVtcCAmIFNldFlQYlByKSB7IC8qIHRlbXAgPSBDUjM4ICovCiAJCQkJCWlmIChwVkJJbmZvLT5JRl9ERUZfSGlWaXNpb24gPT0gMSkgeworCQkJCQkJLyogc2hhbXBvbyBhZGQgZm9yIG5ldworCQkJCQkJICogc2NyYXRjaCAqLwogCQkJCQkJdGVtcCA9IHhnaWZiX3JlZ19nZXQoCiAJCQkJCQkJCXBWQkluZm8tPlAzZDQsCi0JCQkJCQkJCTB4MzUpOyAvKiBzaGFtcG9vIGFkZCBmb3IgbmV3IHNjcmF0Y2ggKi8KKwkJCQkJCQkJMHgzNSk7CiAJCQkJCQl0ZW1wICY9IFlQYlByTW9kZTsKIAkJCQkJCXRlbXBieCB8PSBTZXRDUlQyVG9IaVZpc2lvblRWOwogCiAJCQkJCQlpZiAodGVtcCAhPSBZUGJQck1vZGUxMDgwaSkgewotCQkJCQkJCXRlbXBieAotCQkJCQkJCQkJJj0gKH5TZXRDUlQyVG9IaVZpc2lvblRWKTsKLQkJCQkJCQl0ZW1wYngKLQkJCQkJCQkJCXw9IFNldENSVDJUb1lQYlByOworCQkJCQkJCXRlbXBieCAmPQorCQkJCQkJCSAoflNldENSVDJUb0hpVmlzaW9uVFYpOworCQkJCQkJCXRlbXBieCB8PQorCQkJCQkJCSBTZXRDUlQyVG9ZUGJQcjsKIAkJCQkJCX0KIAkJCQkJfQogCkBAIC0zNTMyLDExICszNjk1LDEzIEBACiAJCQl9CiAJCX0gZWxzZSB7IC8qIDNuZCBwYXJ0eSBjaGlwICovCiAJCQlpZiAocFZCSW5mby0+SUZfREVGX0NINzAxNyA9PSAxKQotCQkJCXRlbXAgPSAoU2V0Q1JUMlRvVFYgfCBTZXRDUlQyVG9MQ0QKLQkJCQkJCXwgU2V0Q1JUMlRvTENEQSk7Ci0JCQllbHNlIGlmIChwVkJJbmZvLT5JRl9ERUZfQ0g3MDA3ID09IDEpIHsgLyogW0JpbGx5XSAwNy8wNS8wMyAqLworCQkJCXRlbXAgPSAoU2V0Q1JUMlRvVFYgfAorCQkJCQlTZXRDUlQyVG9MQ0QgfAorCQkJCQlTZXRDUlQyVG9MQ0RBKTsKKwkJCS8qIFtCaWxseV0gMDcvMDUvMDMgKi8KKwkJCWVsc2UgaWYgKHBWQkluZm8tPklGX0RFRl9DSDcwMDcgPT0gMSkKIAkJCQl0ZW1wID0gU2V0Q1JUMlRvVFY7Ci0JCQl9IGVsc2UKKwkJCWVsc2UKIAkJCQl0ZW1wID0gU2V0Q1JUMlRvTENEOwogCQl9CiAKQEAgLTM1NDksNjAgKzM3MTQsNjcgQEAKIAkJCWlmICghKHBWQkluZm8tPlZCVHlwZSAmIFZCX05vTENEKSkgewogCQkJCWlmICh0ZW1wYnggJiBTZXRDUlQyVG9MQ0RBKSB7CiAJCQkJCWlmICh0ZW1wYnggJiBTZXRTaW11U2Nhbk1vZGUpCi0JCQkJCQl0ZW1wYngKLQkJCQkJCQkJJj0gKH4oU2V0Q1JUMlRvTENECi0JCQkJCQkJCQkJfCBTZXRDUlQyVG9SQU1EQUMKLQkJCQkJCQkJCQl8IFN3aXRjaFRvQ1JUMikpOworCQkJCQkJdGVtcGJ4ICY9ICh+KFNldENSVDJUb0xDRCB8CisJCQkJCQkJICAgU2V0Q1JUMlRvUkFNREFDIHwKKwkJCQkJCQkgICBTd2l0Y2hUb0NSVDIpKTsKIAkJCQkJZWxzZQotCQkJCQkJdGVtcGJ4Ci0JCQkJCQkJCSY9ICh+KFNldENSVDJUb0xDRAotCQkJCQkJCQkJCXwgU2V0Q1JUMlRvUkFNREFDCi0JCQkJCQkJCQkJfCBTZXRDUlQyVG9UVgotCQkJCQkJCQkJCXwgU3dpdGNoVG9DUlQyKSk7CisJCQkJCQl0ZW1wYnggJj0gKH4oU2V0Q1JUMlRvTENEIHwKKwkJCQkJCQkgICAgIFNldENSVDJUb1JBTURBQyB8CisJCQkJCQkJICAgICBTZXRDUlQyVG9UViB8CisJCQkJCQkJICAgICBTd2l0Y2hUb0NSVDIpKTsKIAkJCQl9CiAJCQl9CiAJCX0KIAogCQkvKiBzaGFtcG9vIGFkZCAqLwotCQlpZiAoISh0ZW1wYnggJiAoU3dpdGNoVG9DUlQyIHwgU2V0U2ltdVNjYW5Nb2RlKSkpIHsgLyogZm9yIGRyaXZlciBhYm5vcm1hbCAqLworCQkvKiBmb3IgZHJpdmVyIGFibm9ybWFsICovCisJCWlmICghKHRlbXBieCAmIChTd2l0Y2hUb0NSVDIgfCBTZXRTaW11U2Nhbk1vZGUpKSkgewogCQkJaWYgKHBWQkluZm8tPklGX0RFRl9DUlQyTW9uaXRvciA9PSAxKSB7CiAJCQkJaWYgKHRlbXBieCAmIFNldENSVDJUb1JBTURBQykgewotCQkJCQl0ZW1wYnggJj0gKDB4RkYwMCB8IFNldENSVDJUb1JBTURBQwotCQkJCQkJCXwgU3dpdGNoVG9DUlQyCi0JCQkJCQkJfCBTZXRTaW11U2Nhbk1vZGUpOworCQkJCQl0ZW1wYnggJj0gKDB4RkYwMCB8CisJCQkJCQkgICBTZXRDUlQyVG9SQU1EQUMgfAorCQkJCQkJICAgU3dpdGNoVG9DUlQyIHwKKwkJCQkJCSAgIFNldFNpbXVTY2FuTW9kZSk7CiAJCQkJCXRlbXBieCAmPSAoMHgwMEZGIHwgKH5TZXRDUlQyVG9ZUGJQcikpOwogCQkJCX0KIAkJCX0gZWxzZSB7Ci0JCQkJdGVtcGJ4ICY9ICh+KFNldENSVDJUb1JBTURBQyB8IFNldENSVDJUb0xDRAotCQkJCQkJfCBTZXRDUlQyVG9UVikpOworCQkJCXRlbXBieCAmPSAofihTZXRDUlQyVG9SQU1EQUMgfAorCQkJCQkgICBTZXRDUlQyVG9MQ0QgfAorCQkJCQkgICBTZXRDUlQyVG9UVikpOwogCQkJfQogCQl9CiAKIAkJaWYgKCEocFZCSW5mby0+VkJUeXBlICYgVkJfTm9MQ0QpKSB7CiAJCQlpZiAodGVtcGJ4ICYgU2V0Q1JUMlRvTENEKSB7Ci0JCQkJdGVtcGJ4ICY9ICgweEZGMDAgfCBTZXRDUlQyVG9MQ0QgfCBTd2l0Y2hUb0NSVDIKLQkJCQkJCXwgU2V0U2ltdVNjYW5Nb2RlKTsKKwkJCQl0ZW1wYnggJj0gKDB4RkYwMCB8CisJCQkJCSAgIFNldENSVDJUb0xDRCB8CisJCQkJCSAgIFN3aXRjaFRvQ1JUMiB8CisJCQkJCSAgIFNldFNpbXVTY2FuTW9kZSk7CiAJCQkJdGVtcGJ4ICY9ICgweDAwRkYgfCAoflNldENSVDJUb1lQYlByKSk7CiAJCQl9CiAJCX0KIAogCQlpZiAodGVtcGJ4ICYgU2V0Q1JUMlRvU0NBUlQpIHsKLQkJCXRlbXBieCAmPSAoMHhGRjAwIHwgU2V0Q1JUMlRvU0NBUlQgfCBTd2l0Y2hUb0NSVDIKLQkJCQkJfCBTZXRTaW11U2Nhbk1vZGUpOworCQkJdGVtcGJ4ICY9ICgweEZGMDAgfAorCQkJCSAgIFNldENSVDJUb1NDQVJUIHwKKwkJCQkgICBTd2l0Y2hUb0NSVDIgfAorCQkJCSAgIFNldFNpbXVTY2FuTW9kZSk7CiAJCQl0ZW1wYnggJj0gKDB4MDBGRiB8ICh+U2V0Q1JUMlRvWVBiUHIpKTsKIAkJfQogCiAJCWlmIChwVkJJbmZvLT5JRl9ERUZfWVBiUHIgPT0gMSkgewogCQkJaWYgKHRlbXBieCAmIFNldENSVDJUb1lQYlByKQotCQkJCXRlbXBieCAmPSAoMHhGRjAwIHwgU3dpdGNoVG9DUlQyCi0JCQkJCQl8IFNldFNpbXVTY2FuTW9kZSk7CisJCQkJdGVtcGJ4ICY9ICgweEZGMDAgfAorCQkJCQkgICBTd2l0Y2hUb0NSVDIgfAorCQkJCQkgICBTZXRTaW11U2Nhbk1vZGUpOwogCQl9CiAKIAkJaWYgKHBWQkluZm8tPklGX0RFRl9IaVZpc2lvbiA9PSAxKSB7CiAJCQlpZiAodGVtcGJ4ICYgU2V0Q1JUMlRvSGlWaXNpb25UVikKLQkJCQl0ZW1wYnggJj0gKDB4RkYwMCB8IFNldENSVDJUb0hpVmlzaW9uVFYKLQkJCQkJCXwgU3dpdGNoVG9DUlQyCi0JCQkJCQl8IFNldFNpbXVTY2FuTW9kZSk7CisJCQkJdGVtcGJ4ICY9ICgweEZGMDAgfAorCQkJCQkgICBTZXRDUlQyVG9IaVZpc2lvblRWIHwKKwkJCQkJICAgU3dpdGNoVG9DUlQyIHwKKwkJCQkJICAgU2V0U2ltdVNjYW5Nb2RlKTsKIAkJfQogCiAJCWlmICh0ZW1wYXggJiBEaXNhYmxlQ1JUMkRpc3BsYXkpIHsgLyogU2V0IERpc3BsYXkgRGV2aWNlIEluZm8gKi8KQEAgLTM2MTEsMzggKzM3ODMsMzUgQEAKIAkJfQogCiAJCWlmICghKHRlbXBieCAmIERpc2FibGVDUlQyRGlzcGxheSkpIHsKLQkJCWlmICgoISh0ZW1wYnggJiBEcml2ZXJNb2RlKSkKLQkJCQkJfHwgKCEobW9kZWZsYWcgJiBDUlQyTW9kZSkpKSB7CisJCQlpZiAoKCEodGVtcGJ4ICYgRHJpdmVyTW9kZSkpIHx8CisJCQkgICAgKCEobW9kZWZsYWcgJiBDUlQyTW9kZSkpKSB7CiAJCQkJaWYgKHBWQkluZm8tPklGX0RFRl9MQ0RBID09IDEpIHsKIAkJCQkJaWYgKCEodGVtcGJ4ICYgU2V0Q1JUMlRvTENEQSkpCi0JCQkJCQl0ZW1wYngKLQkJCQkJCQkJfD0gKFNldEluU2xhdmVNb2RlCi0JCQkJCQkJCQkJfCBTZXRTaW11U2Nhbk1vZGUpOworCQkJCQkJdGVtcGJ4IHw9IChTZXRJblNsYXZlTW9kZSB8CisJCQkJCQkJICAgU2V0U2ltdVNjYW5Nb2RlKTsKIAkJCQl9CiAKIAkJCQlpZiAocFZCSW5mby0+SUZfREVGX1ZpZGVvQ2FwdHVyZSA9PSAxKSB7Ci0JCQkJCWlmICgoKEh3RGV2aWNlRXh0ZW5zaW9uLT5qQ2hpcFR5cGUKLQkJCQkJCQk9PSBYRzQwKQotCQkJCQkJCSYmIChwVkJJbmZvLT5TZXRfVkdBVHlwZQotCQkJCQkJCQkJPT0gWEc0MCkpCi0JCQkJCQkJfHwgKChId0RldmljZUV4dGVuc2lvbi0+akNoaXBUeXBlCi0JCQkJCQkJCQk9PSBYRzQxKQotCQkJCQkJCQkJJiYgKHBWQkluZm8tPlNldF9WR0FUeXBlCi0JCQkJCQkJCQkJCT09IFhHNDEpKQotCQkJCQkJCXx8ICgoSHdEZXZpY2VFeHRlbnNpb24tPmpDaGlwVHlwZQotCQkJCQkJCQkJPT0gWEc0MikKLQkJCQkJCQkJCSYmIChwVkJJbmZvLT5TZXRfVkdBVHlwZQotCQkJCQkJCQkJCQk9PSBYRzQyKSkKLQkJCQkJCQl8fCAoKEh3RGV2aWNlRXh0ZW5zaW9uLT5qQ2hpcFR5cGUKLQkJCQkJCQkJCT09IFhHNDUpCi0JCQkJCQkJCQkmJiAocFZCSW5mby0+U2V0X1ZHQVR5cGUKLQkJCQkJCQkJCQkJPT0gWEc0NSkpKSB7CisJCQkJCWlmICgoKEh3RGV2aWNlRXh0ZW5zaW9uLT5qQ2hpcFR5cGUgPT0KKwkJCQkJICAgICAgWEc0MCkgJiYKKwkJCQkJICAgICAocFZCSW5mby0+U2V0X1ZHQVR5cGUgPT0gWEc0MCkpIHx8CisJCQkJCSAgICAoKEh3RGV2aWNlRXh0ZW5zaW9uLT5qQ2hpcFR5cGUgPT0KKwkJCQkJICAgICAgWEc0MSkgJiYKKwkJCQkJICAgICAocFZCSW5mby0+U2V0X1ZHQVR5cGUgPT0gWEc0MSkpIHx8CisJCQkJCSAgICAoKEh3RGV2aWNlRXh0ZW5zaW9uLT5qQ2hpcFR5cGUgPT0KKwkJCQkJICAgICAgWEc0MikgJiYKKwkJCQkJICAgICAocFZCSW5mby0+U2V0X1ZHQVR5cGUgPT0gWEc0MikpIHx8CisJCQkJCSAgICAoKEh3RGV2aWNlRXh0ZW5zaW9uLT5qQ2hpcFR5cGUgPT0KKwkJCQkJICAgICAgWEc0NSkgJiYKKwkJCQkJICAgICAocFZCSW5mby0+U2V0X1ZHQVR5cGUgPT0gWEc0NSkpKSB7CiAJCQkJCQlpZiAoTW9kZU5vIDw9IDEzKSB7Ci0JCQkJCQkJaWYgKCEodGVtcGJ4Ci0JCQkJCQkJCQkmIFNldENSVDJUb1JBTURBQykpIHsgLypDUlQyIG5vdCBuZWVkIHRvIHN1cHBvcnQqLwotCQkJCQkJCQl0ZW1wYngKLQkJCQkJCQkJCQkmPSAoMHgwMEZGCi0JCQkJCQkJCQkJCQl8ICh+U2V0SW5TbGF2ZU1vZGUpKTsKKwkJCQkJCQlpZiAoISh0ZW1wYnggJgorCQkJCQkJCSAgICAgU2V0Q1JUMlRvUkFNREFDKSkgeworCQkJCQkJCQkvKkNSVDIgbm90IG5lZWQKKwkJCQkJCQkJICogdG8gc3VwcG9ydCovCisJCQkJCQkJCXRlbXBieCAmPQorCQkJCQkJCQkgICgweDAwRkYgfAorCQkJCQkJCQkgICh+U2V0SW5TbGF2ZU1vZGUpKTsKIAkJCQkJCQkJcFZCSW5mby0+U2V0RmxhZwogCQkJCQkJCQkJCXw9IEVuYWJsZVZDTW9kZTsKIAkJCQkJCQl9CkBAIC0zNjUxLDExICszODIwLDEzIEBACiAJCQkJfQogCQkJfQogCi0JCQkvKiBMQ0QrVFYgY2FuJ3Qgc3VwcG9ydCBpbiBzbGF2ZSBtb2RlIChGb3JjZSBMQ0RBK1RWLT5MQ0RCKSAqLwotCQkJaWYgKCh0ZW1wYnggJiBTZXRJblNsYXZlTW9kZSkgJiYgKHRlbXBieAotCQkJCQkmIFNldENSVDJUb0xDREEpKSB7Ci0JCQkJdGVtcGJ4IF49IChTZXRDUlQyVG9MQ0QgfCBTZXRDUlQyVG9MQ0RBCi0JCQkJCQl8IFNldENSVDJUb0R1YWxFZGdlKTsKKwkJCS8qIExDRCtUViBjYW4ndCBzdXBwb3J0IGluIHNsYXZlIG1vZGUKKwkJCSAqIChGb3JjZSBMQ0RBK1RWLT5MQ0RCKSAqLworCQkJaWYgKCh0ZW1wYnggJiBTZXRJblNsYXZlTW9kZSkgJiYKKwkJCSAgICAodGVtcGJ4ICYgU2V0Q1JUMlRvTENEQSkpIHsKKwkJCQl0ZW1wYnggXj0gKFNldENSVDJUb0xDRCB8CisJCQkJCSAgU2V0Q1JUMlRvTENEQSB8CisJCQkJCSAgU2V0Q1JUMlRvRHVhbEVkZ2UpOwogCQkJCXBWQkluZm8tPlNldEZsYWcgfD0gUmVzZXJ2ZVRWT3B0aW9uOwogCQkJfQogCQl9CkBAIC0zNjc0LDMzICszODQ1LDQwIEBACiAKIAlpZiAocFZCSW5mby0+VkJJbmZvICYgU2V0Q1JUMlRvVFYpIHsKIAkJaWYgKE1vZGVObyA8PSAweDEzKSB7Ci0JCQltb2RlZmxhZwotCQkJCQk9IHBWQkluZm8tPlNNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uU3RfTW9kZUZsYWc7IC8qIHNpK1N0X01vZGVGbGFnICovCi0JCQlyZXNpbmZvID0gcFZCSW5mby0+U01vZGVJRFRhYmxlW01vZGVJZEluZGV4XS5TdF9SZXNJbmZvOyAvKiBzaStTdF9SZXNJbmZvICovCisJCQltb2RlZmxhZyA9IHBWQkluZm8tPlNNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uCisJCQkJCVN0X01vZGVGbGFnOyAvKiBzaStTdF9Nb2RlRmxhZyAqLworCQkJcmVzaW5mbyA9IHBWQkluZm8tPlNNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uCisJCQkJCVN0X1Jlc0luZm87IC8qIHNpK1N0X1Jlc0luZm8gKi8KIAkJfSBlbHNlIHsKLQkJCW1vZGVmbGFnCi0JCQkJCT0gcFZCSW5mby0+RU1vZGVJRFRhYmxlW01vZGVJZEluZGV4XS5FeHRfTW9kZUZsYWc7Ci0JCQlyZXNpbmZvCi0JCQkJCT0gcFZCSW5mby0+RU1vZGVJRFRhYmxlW01vZGVJZEluZGV4XS5FeHRfUkVTSU5GTzsgLyogc2krRXh0X1Jlc0luZm8gKi8KKwkJCW1vZGVmbGFnID0gcFZCSW5mby0+RU1vZGVJRFRhYmxlW01vZGVJZEluZGV4XS4KKwkJCQkJRXh0X01vZGVGbGFnOworCQkJcmVzaW5mbyA9IHBWQkluZm8tPkVNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uCisJCQkJCUV4dF9SRVNJTkZPOyAvKiBzaStFeHRfUmVzSW5mbyAqLwogCQl9CiAKIAkJaWYgKHBWQkluZm8tPlZCSW5mbyAmIFNldENSVDJUb1RWKSB7CiAJCQl0ZW1wID0geGdpZmJfcmVnX2dldChwVkJJbmZvLT5QM2Q0LCAweDM1KTsKIAkJCXRlbXBieCA9IHRlbXA7CiAJCQlpZiAodGVtcGJ4ICYgU2V0UEFMVFYpIHsKLQkJCQl0ZW1wYnggJj0gKFNldENIVFZPdmVyU2NhbiB8IFNldFBBTE1UVgotCQkJCQkJfCBTZXRQQUxOVFYgfCBTZXRQQUxUVik7CisJCQkJdGVtcGJ4ICY9IChTZXRDSFRWT3ZlclNjYW4gfAorCQkJCQkgICBTZXRQQUxNVFYgfAorCQkJCQkgICBTZXRQQUxOVFYgfAorCQkJCQkgICBTZXRQQUxUVik7CiAJCQkJaWYgKHRlbXBieCAmIFNldFBBTE1UVikKLQkJCQkJdGVtcGJ4ICY9IH5TZXRQQUxUVjsgLyogc2V0IHRvIE5UU0MgaWYgUEFMLU0gKi8KKwkJCQkJLyogc2V0IHRvIE5UU0MgaWYgUEFMLU0gKi8KKwkJCQkJdGVtcGJ4ICY9IH5TZXRQQUxUVjsKIAkJCX0gZWxzZQotCQkJCXRlbXBieCAmPSAoU2V0Q0hUVk92ZXJTY2FuIHwgU2V0TlRTQ0oKLQkJCQkJCXwgU2V0UEFMVFYpOworCQkJCXRlbXBieCAmPSAoU2V0Q0hUVk92ZXJTY2FuIHwKKwkJCQkJICAgU2V0TlRTQ0ogfAorCQkJCQkgICBTZXRQQUxUVik7CiAJCQkvKgogCQkJaWYgKHBWQkluZm8tPklGX0RFRl9MVkRTID09IDApIHsKLQkJCQlpbmRleDEgPSB4Z2lmYl9yZWdfZ2V0KHBWQkluZm8tPlAzZDQsIDB4MzgpOyAvL1BBTC1NL1BBTC1OIEluZm8KLQkJCQl0ZW1wMiA9IChpbmRleDEgJiAweEMwKSA+PiA1OyAvLzAwOlBBTCwgMDE6UEFMLU0sIDEwOlBBTC1OCisJCQkJLy9QQUwtTS9QQUwtTiBJbmZvCisJCQkJaW5kZXgxID0geGdpZmJfcmVnX2dldChwVkJJbmZvLT5QM2Q0LCAweDM4KTsKKwkJCQkvLzAwOlBBTCwgMDE6UEFMLU0sIDEwOlBBTC1OCisJCQkJdGVtcDIgPSAoaW5kZXgxICYgMHhDMCkgPj4gNTsKIAkJCQl0ZW1wYnggfD0gdGVtcDI7Ci0JCQkJaWYgKHRlbXAyICYgMHgwMikgICAgICAgICAgLy9QQUwtTQorCQkJCWlmICh0ZW1wMiAmIDB4MDIpIC8vUEFMLU0KIAkJCQkJdGVtcGJ4ICY9ICh+U2V0UEFMVFYpOwogCQkJfQogCQkJKi8KQEAgLTM3NDYsMTIgKzM5MjQsMTMgQEAKIAkJfQogCiAJCWlmIChwVkJJbmZvLT5JRl9ERUZfTFZEUyA9PSAwKSB7IC8qIHNoYW1wb28gKi8KLQkJCWlmICgocFZCSW5mby0+VkJJbmZvICYgU2V0SW5TbGF2ZU1vZGUpCi0JCQkJCSYmICghKHBWQkluZm8tPlZCSW5mbyAmIFNldE5vdFNpbXVNb2RlKSkpCisJCQlpZiAoKHBWQkluZm8tPlZCSW5mbyAmIFNldEluU2xhdmVNb2RlKSAmJgorCQkJICAgICghKHBWQkluZm8tPlZCSW5mbyAmIFNldE5vdFNpbXVNb2RlKSkpCiAJCQkJdGVtcGJ4IHw9IFRWU2ltdU1vZGU7CiAKLQkJCWlmICghKHRlbXBieCAmIFNldFBBTFRWKSAmJiAobW9kZWZsYWcgPiAxMykgJiYgKHJlc2luZm8KLQkJCQkJPT0gOCkpIC8qIE5UU0MgMTAyNHg3NjgsICovCisJCQlpZiAoISh0ZW1wYnggJiBTZXRQQUxUVikgJiYKKwkJCSAgICAobW9kZWZsYWcgPiAxMykgJiYKKwkJCSAgICAocmVzaW5mbyA9PSA4KSkgLyogTlRTQyAxMDI0eDc2OCwgKi8KIAkJCQl0ZW1wYnggfD0gTlRTQzEwMjR4NzY4OwogCiAJCQl0ZW1wYnggfD0gUlBMTERJVjJYTzsKQEAgLTM3NjAsMTIgKzM5MzksMTUgQEAKIAkJCQlpZiAocFZCSW5mby0+VkJJbmZvICYgU2V0SW5TbGF2ZU1vZGUpCiAJCQkJCXRlbXBieCAmPSAoflJQTExESVYyWE8pOwogCQkJfSBlbHNlIHsKLQkJCQlpZiAodGVtcGJ4ICYgKFNldFlQYlByTW9kZTUyNXAKLQkJCQkJCXwgU2V0WVBiUHJNb2RlNzUwcCkpCisJCQkJaWYgKHRlbXBieCAmCisJCQkJICAgIChTZXRZUGJQck1vZGU1MjVwIHwgU2V0WVBiUHJNb2RlNzUwcCkpCiAJCQkJCXRlbXBieCAmPSAoflJQTExESVYyWE8pOwotCQkJCWVsc2UgaWYgKCEocFZCSW5mby0+VkJUeXBlICYgKFZCX1hHSTMwMUIKLQkJCQkJCXwgVkJfWEdJMzAyQiB8IFZCX1hHSTMwMUxWCi0JCQkJCQl8IFZCX1hHSTMwMkxWIHwgVkJfWEdJMzAxQykpKSB7CisJCQkJZWxzZSBpZiAoIShwVkJJbmZvLT5WQlR5cGUgJgorCQkJCQkgKFZCX1hHSTMwMUIgfAorCQkJCQkgIFZCX1hHSTMwMkIgfAorCQkJCQkgIFZCX1hHSTMwMUxWIHwKKwkJCQkJICBWQl9YR0kzMDJMViB8CisJCQkJCSAgVkJfWEdJMzAxQykpKSB7CiAJCQkJCWlmICh0ZW1wYnggJiBUVlNpbXVNb2RlKQogCQkJCQkJdGVtcGJ4ICY9ICh+UlBMTERJVjJYTyk7CiAJCQkJfQpAQCAtMzc4NSwxMCArMzk2NywxMiBAQAogCXBWQkluZm8tPkxDREluZm8gPSAwOwogCiAJaWYgKE1vZGVObyA8PSAweDEzKSB7Ci0JCW1vZGVmbGFnID0gcFZCSW5mby0+U01vZGVJRFRhYmxlW01vZGVJZEluZGV4XS5TdF9Nb2RlRmxhZzsgLyogc2krU3RfTW9kZUZsYWcgLy8gKi8KKwkJLyogc2krU3RfTW9kZUZsYWcgLy8gKi8KKwkJbW9kZWZsYWcgPSBwVkJJbmZvLT5TTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLlN0X01vZGVGbGFnOwogCX0gZWxzZSB7CiAJCW1vZGVmbGFnID0gcFZCSW5mby0+RU1vZGVJRFRhYmxlW01vZGVJZEluZGV4XS5FeHRfTW9kZUZsYWc7Ci0JCXJlc2luZm8gPSBwVkJJbmZvLT5FTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLkV4dF9SRVNJTkZPOyAvKiBzaStFeHRfUmVzSW5mbyAvLyAqLworCQkvKiBzaStFeHRfUmVzSW5mbyAvLyAqLworCQlyZXNpbmZvID0gcFZCSW5mby0+RU1vZGVJRFRhYmxlW01vZGVJZEluZGV4XS5FeHRfUkVTSU5GTzsKIAl9CiAKIAl0ZW1wID0geGdpZmJfcmVnX2dldChwVkJJbmZvLT5QM2Q0LCAweDM2KTsgLyogR2V0IExDRCBSZXMuSW5mbyAqLwpAQCAtMzg1Nyw3ICs0MDQxLDggQEAKIAkJaWYgKChwVkJJbmZvLT5MQ0RSZXNJbmZvID09IFBhbmVsMTQwMHgxMDUwKSAmJiAocFZCSW5mby0+VkJJbmZvCiAJCQkJJiBTZXRDUlQyVG9MQ0QpICYmIChNb2RlTm8gPiAweDEzKSAmJiAocmVzaW5mbwogCQkJCT09IDkpICYmICghKHRlbXBieCAmIEVuYWJsZVNjYWxpbmdMQ0QpKSkKLQkJCXRlbXBieCB8PSBTZXRMQ0R0b05vbkV4cGFuZGluZzsgLyogc2V0IHRvIGNlbnRlciBpbiAxMjgweDEwMjQgTENEQiBmb3IgUGFuZWwxNDAweDEwNTAgKi8KKwkJCS8qIHNldCB0byBjZW50ZXIgaW4gMTI4MHgxMDI0IExDREIgZm9yIFBhbmVsMTQwMHgxMDUwICovCisJCQl0ZW1wYnggfD0gU2V0TENEdG9Ob25FeHBhbmRpbmc7CiAJfQogCiAJLyoKQEAgLTM4NzUsNyArNDA2MCw3IEBACiAJCQkJaWYgKE1vZGVObyA+IDB4MTMpIHsKIAkJCQkJaWYgKHBWQkluZm8tPkxDRFJlc0luZm8KIAkJCQkJCQk9PSBQYW5lbDEwMjR4NzY4KSB7Ci0JCQkJCQlpZiAocmVzaW5mbyA9PSA0KSB7IC8qIDUxMngzODQgICovCisJCQkJCQlpZiAocmVzaW5mbyA9PSA0KSB7LyogNTEyeDM4NCAqLwogCQkJCQkJCXRlbXBieCB8PSBFbmFibGVMVkRTRERBOwogCQkJCQkJfQogCQkJCQl9CkBAIC0zODk1LDggKzQwODAsOCBAQAogCiAJaWYgKHBWQkluZm8tPklGX0RFRl9QV0QgPT0gMSkgewogCQlpZiAocFZCSW5mby0+TENESW5mbyAmIFNldFBXREVuYWJsZSkgewotCQkJaWYgKChwVkJJbmZvLT5WQlR5cGUgJiBWQl9YR0kzMDJMVikgfHwgKHBWQkluZm8tPlZCVHlwZQotCQkJCQkmIFZCX1hHSTMwMUMpKSB7CisJCQlpZiAoKHBWQkluZm8tPlZCVHlwZSAmIFZCX1hHSTMwMkxWKSB8fAorCQkJICAgIChwVkJJbmZvLT5WQlR5cGUgJiBWQl9YR0kzMDFDKSkgewogCQkJCWlmICghKHRlbXBheCAmIFBXREVuYWJsZSkpCiAJCQkJCXBWQkluZm8tPkxDREluZm8gJj0gflNldFBXREVuYWJsZTsKIAkJCX0KQEAgLTM5MDgsMTMgKzQwOTMsMTMgQEAKIAkJCWlmIChwVkJJbmZvLT5WQkluZm8gJiBTZXRJblNsYXZlTW9kZSkgewogCQkJCWlmICghKHRlbXBheCAmIExvY2tMQ0RCVG9BKSkgewogCQkJCQlpZiAoTW9kZU5vIDw9IDB4MTMpIHsKLQkJCQkJCXBWQkluZm8tPlZCSW5mbwotCQkJCQkJCQkmPSB+KFNldFNpbXVTY2FuTW9kZQotCQkJCQkJCQkJCXwgU2V0SW5TbGF2ZU1vZGUKLQkJCQkJCQkJCQl8IFNldENSVDJUb0xDRCk7Ci0JCQkJCQlwVkJJbmZvLT5WQkluZm8KLQkJCQkJCQkJfD0gU2V0Q1JUMlRvTENEQQotCQkJCQkJCQkJCXwgU2V0Q1JUMlRvRHVhbEVkZ2U7CisJCQkJCQlwVkJJbmZvLT5WQkluZm8gJj0KKwkJCQkJCQl+KFNldFNpbXVTY2FuTW9kZSB8CisJCQkJCQkJICBTZXRJblNsYXZlTW9kZSB8CisJCQkJCQkJICBTZXRDUlQyVG9MQ0QpOworCQkJCQkJcFZCSW5mby0+VkJJbmZvIHw9CisJCQkJCQkJU2V0Q1JUMlRvTENEQSB8CisJCQkJCQkJU2V0Q1JUMlRvRHVhbEVkZ2U7CiAJCQkJCX0KIAkJCQl9CiAJCQl9CkBAIC0zOTI1LDkgKzQxMTAsMTUgQEAKIAlpZiAocFZCSW5mby0+SUZfREVGX0xWRFMgPT0gMCkgewogCQlpZiAodGVtcGF4ICYgKExvY2tMQ0RCVG9BIHwgU3RMQ0RCVG9BKSkgewogCQkJaWYgKHBWQkluZm8tPlZCSW5mbyAmIFNldEluU2xhdmVNb2RlKSB7Ci0JCQkJaWYgKCEoKCEodGVtcGF4ICYgTG9ja0xDREJUb0EpKSAmJiAoTW9kZU5vID4gMHgxMykpKSB7Ci0JCQkJCXBWQkluZm8tPlZCSW5mbyY9fihTZXRTaW11U2Nhbk1vZGV8U2V0SW5TbGF2ZU1vZGV8U2V0Q1JUMlRvTENEKTsKLQkJCQkJcFZCSW5mby0+VkJJbmZvfD1TZXRDUlQyVG9MQ0RBfFNldENSVDJUb0R1YWxFZGdlOworCQkJCWlmICghKCghKHRlbXBheCAmIExvY2tMQ0RCVG9BKSkgJiYKKwkJCQkgICAgKE1vZGVObyA+IDB4MTMpKSkgeworCQkJCQlwVkJJbmZvLT5WQkluZm8gJj0KKwkJCQkJCX4oU2V0U2ltdVNjYW5Nb2RlIHwKKwkJCQkJCSAgU2V0SW5TbGF2ZU1vZGUgfAorCQkJCQkJICBTZXRDUlQyVG9MQ0QpOworCQkJCQlwVkJJbmZvLT5WQkluZm8gfD0KKwkJCQkJCVNldENSVDJUb0xDREEgfAorCQkJCQkJU2V0Q1JUMlRvRHVhbEVkZ2U7CiAJCQkJfQogCQkJfQogCQl9CkBAIC0zOTQzLDExICs0MTM0LDE2IEBACiAJaWYgKE1vZGVObyA8PSA1KQogCQlNb2RlTm8gfD0gMTsKIAlpZiAoTW9kZU5vIDw9IDB4MTMpIHsKLQkJLyogZm9yICgqTW9kZUlkSW5kZXg9MDsgKk1vZGVJZEluZGV4IDwgc2l6ZW9mKHBWQkluZm8tPlNNb2RlSURUYWJsZSkgLyBzaXplb2Yoc3RydWN0IFhHSV9TdFN0cnVjdCk7ICgqTW9kZUlkSW5kZXgpKyspICovCisJCS8qIGZvciAoKk1vZGVJZEluZGV4PTA7CisJCQkqTW9kZUlkSW5kZXggPCBzaXplb2YocFZCSW5mby0+U01vZGVJRFRhYmxlKQorCQkJCS8gc2l6ZW9mKHN0cnVjdCBYR0lfU3RTdHJ1Y3QpOworCQkJKCpNb2RlSWRJbmRleCkrKykgKi8KIAkJZm9yICgqTW9kZUlkSW5kZXggPSAwOzsgKCpNb2RlSWRJbmRleCkrKykgewotCQkJaWYgKHBWQkluZm8tPlNNb2RlSURUYWJsZVsqTW9kZUlkSW5kZXhdLlN0X01vZGVJRCA9PSBNb2RlTm8pCisJCQlpZiAocFZCSW5mby0+U01vZGVJRFRhYmxlWypNb2RlSWRJbmRleF0uU3RfTW9kZUlEID09CisJCQkgICAgTW9kZU5vKQogCQkJCWJyZWFrOwotCQkJaWYgKHBWQkluZm8tPlNNb2RlSURUYWJsZVsqTW9kZUlkSW5kZXhdLlN0X01vZGVJRCA9PSAweEZGKQorCQkJaWYgKHBWQkluZm8tPlNNb2RlSURUYWJsZVsqTW9kZUlkSW5kZXhdLlN0X01vZGVJRCA9PQorCQkJICAgIDB4RkYpCiAJCQkJcmV0dXJuIDA7CiAJCX0KIApAQCAtMzk1NywxMSArNDE1MywxNiBAQAogCQkJKCpNb2RlSWRJbmRleCkgKz0gMjsgLyogNDAwIGxpbmVzICovCiAJCS8qIGVsc2UgMzUwIGxpbmVzICovCiAJfSBlbHNlIHsKLQkJLyogZm9yICgqTW9kZUlkSW5kZXg9MDsgKk1vZGVJZEluZGV4IDwgc2l6ZW9mKHBWQkluZm8tPkVNb2RlSURUYWJsZSkgLyBzaXplb2Yoc3RydWN0IFhHSV9FeHRTdHJ1Y3QpOyAoKk1vZGVJZEluZGV4KSsrKSAqLworCQkvKiBmb3IgKCpNb2RlSWRJbmRleD0wOworCQkJKk1vZGVJZEluZGV4IDwgc2l6ZW9mKHBWQkluZm8tPkVNb2RlSURUYWJsZSkKKwkJCQkvIHNpemVvZihzdHJ1Y3QgWEdJX0V4dFN0cnVjdCk7CisJCQkoKk1vZGVJZEluZGV4KSsrKSAqLwogCQlmb3IgKCpNb2RlSWRJbmRleCA9IDA7OyAoKk1vZGVJZEluZGV4KSsrKSB7Ci0JCQlpZiAocFZCSW5mby0+RU1vZGVJRFRhYmxlWypNb2RlSWRJbmRleF0uRXh0X01vZGVJRCA9PSBNb2RlTm8pCisJCQlpZiAocFZCSW5mby0+RU1vZGVJRFRhYmxlWypNb2RlSWRJbmRleF0uRXh0X01vZGVJRCA9PQorCQkJICAgIE1vZGVObykKIAkJCQlicmVhazsKLQkJCWlmIChwVkJJbmZvLT5FTW9kZUlEVGFibGVbKk1vZGVJZEluZGV4XS5FeHRfTW9kZUlEID09IDB4RkYpCisJCQlpZiAocFZCSW5mby0+RU1vZGVJRFRhYmxlWypNb2RlSWRJbmRleF0uRXh0X01vZGVJRCA9PQorCQkJICAgIDB4RkYpCiAJCQkJcmV0dXJuIDA7CiAJCX0KIAl9CkBAIC00MDAyLDE5ICs0MjAzLDIyIEBACiAJdG1wID0gdGVtcDsKIAogCWlmIChId0RldmljZUV4dGVuc2lvbi0+akNoaXBUeXBlID09IFhHNDApIHsKLQkJdGVtcCA9IDEgPDwgKCh0ZW1wICYgMHgwRjApID4+IDQpOyAvKiBtZW1vcnkgc2l6ZSBwZXIgY2hhbm5lbCBTUjE0Wzc6NF0gKi8KKwkJLyogbWVtb3J5IHNpemUgcGVyIGNoYW5uZWwgU1IxNFs3OjRdICovCisJCXRlbXAgPSAxIDw8ICgodGVtcCAmIDB4MEYwKSA+PiA0KTsKIAkJaWYgKCh0bXAgJiAweDBjKSA9PSAweDBDKSB7IC8qIFF1YWwgY2hhbm5lbHMgKi8KIAkJCXRlbXAgPDw9IDI7CiAJCX0gZWxzZSBpZiAoKHRtcCAmIDB4MGMpID09IDB4MDgpIHsgLyogRHVhbCBjaGFubmVscyAqLwogCQkJdGVtcCA8PD0gMTsKIAkJfQogCX0gZWxzZSBpZiAoSHdEZXZpY2VFeHRlbnNpb24tPmpDaGlwVHlwZSA9PSBYRzQyKSB7Ci0JCXRlbXAgPSAxIDw8ICgodGVtcCAmIDB4MEYwKSA+PiA0KTsgLyogbWVtb3J5IHNpemUgcGVyIGNoYW5uZWwgU1IxNFs3OjRdICovCisJCS8qIG1lbW9yeSBzaXplIHBlciBjaGFubmVsIFNSMTRbNzo0XSAqLworCQl0ZW1wID0gMSA8PCAoKHRlbXAgJiAweDBGMCkgPj4gNCk7CiAJCWlmICgodG1wICYgMHgwNCkgPT0gMHgwNCkgeyAvKiBEdWFsIGNoYW5uZWxzICovCiAJCQl0ZW1wIDw8PSAxOwogCQl9CiAJfSBlbHNlIGlmIChId0RldmljZUV4dGVuc2lvbi0+akNoaXBUeXBlID09IFhHNDUpIHsKLQkJdGVtcCA9IDEgPDwgKCh0ZW1wICYgMHgwRjApID4+IDQpOyAvKiBtZW1vcnkgc2l6ZSBwZXIgY2hhbm5lbCBTUjE0Wzc6NF0gKi8KKwkJLyogbWVtb3J5IHNpemUgcGVyIGNoYW5uZWwgU1IxNFs3OjRdICovCisJCXRlbXAgPSAxIDw8ICgodGVtcCAmIDB4MEYwKSA+PiA0KTsKIAkJaWYgKCh0bXAgJiAweDBjKSA9PSAweDBDKSB7IC8qIFF1YWwgY2hhbm5lbHMgKi8KIAkJCXRlbXAgPDw9IDI7CiAJCX0gZWxzZSBpZiAoKHRtcCAmIDB4MGMpID09IDB4MDgpIHsgLyogdHJpcGxlIGNoYW5uZWxzICovCkBAIC00MDMzLDcgKzQyMzcsMTMgQEAKICNlbmRpZgogCiAvKgotdm9pZCBYR0lOZXdfSXNMb3dSZXNvbHV0aW9uKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHVuc2lnbmVkIGNoYXIgWEdJTmV3X0NoZWNrTWVtb3J5U2l6ZShzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgdW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQordm9pZCBYR0lOZXdfSXNMb3dSZXNvbHV0aW9uKHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCSAgICB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJCSAgICB1bnNpZ25lZCBjaGFyIFhHSU5ld19DaGVja01lbW9yeVNpemUoCisJCQkJc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCQkJdW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkJCXVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkJCXN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKIAl1bnNpZ25lZCBzaG9ydCBkYXRhIDsKIAl1bnNpZ25lZCBzaG9ydCBNb2RlRmxhZyA7CkBAIC00MTIyLDM1ICs0MzMyLDQzIEBACiAJaWYgKHBYR0lIV0RFLT5qQ2hpcFR5cGUgPT0gWEcyMSkgewogCQlpZiAocFZCSW5mby0+SUZfREVGX0xWRFMgPT0gMSkgewogCQkJaWYgKCEoWEdJX1hHMjFHZXRQU0NWYWx1ZShwVkJJbmZvKSAmIDB4MSkpIHsKLQkJCQlYR0lfWEcyMUJMU2lnbmFsVkREKDB4MDEsIDB4MDEsIHBWQkluZm8pOyAvKiBMVkRTIFZERCBvbiAqLworCQkJCS8qIExWRFMgVkREIG9uICovCisJCQkJWEdJX1hHMjFCTFNpZ25hbFZERCgweDAxLCAweDAxLCBwVkJJbmZvKTsKIAkJCQlYR0lfWEcyMVNldFBhbmVsRGVsYXkoMiwgcFZCSW5mbyk7CiAJCQl9CiAJCQlpZiAoIShYR0lfWEcyMUdldFBTQ1ZhbHVlKHBWQkluZm8pICYgMHgyMCkpCi0JCQkJWEdJX1hHMjFCTFNpZ25hbFZERCgweDIwLCAweDIwLCBwVkJJbmZvKTsgLyogTFZEUyBzaWduYWwgb24gKi8KKwkJCQkvKiBMVkRTIHNpZ25hbCBvbiAqLworCQkJCVhHSV9YRzIxQkxTaWduYWxWREQoMHgyMCwgMHgyMCwgcFZCSW5mbyk7CiAJCQlYR0lfWEcyMVNldFBhbmVsRGVsYXkoMywgcFZCSW5mbyk7Ci0JCQlYR0lfWEcyMUJMU2lnbmFsVkREKDB4MDIsIDB4MDIsIHBWQkluZm8pOyAvKiBMVkRTIGJhY2tsaWdodCBvbiAqLworCQkJLyogTFZEUyBiYWNrbGlnaHQgb24gKi8KKwkJCVhHSV9YRzIxQkxTaWduYWxWREQoMHgwMiwgMHgwMiwgcFZCSW5mbyk7CiAJCX0gZWxzZSB7Ci0JCQlYR0lfWEcyMUJMU2lnbmFsVkREKDB4MjAsIDB4MjAsIHBWQkluZm8pOyAvKiBEVk8vRFZJIHNpZ25hbCBvbiAqLworCQkJLyogRFZPL0RWSSBzaWduYWwgb24gKi8KKwkJCVhHSV9YRzIxQkxTaWduYWxWREQoMHgyMCwgMHgyMCwgcFZCSW5mbyk7CiAJCX0KIAogCX0KIAotCWlmIChwVkJJbmZvLT5JRl9ERUZfQ0g3MDA3ID09IDEpIHsgLyogW0JpbGx5XSAwNy8wNS8yMyBGb3IgQ0g3MDA3ICovCi0KKwkvKiBbQmlsbHldIDA3LzA1LzIzIEZvciBDSDcwMDcgKi8KKwlpZiAocFZCSW5mby0+SUZfREVGX0NINzAwNyA9PSAxKSB7CiAJfQogCiAJaWYgKHBYR0lIV0RFLT5qQ2hpcFR5cGUgPT0gWEcyNykgewogCQlpZiAocFZCSW5mby0+SUZfREVGX0xWRFMgPT0gMSkgewogCQkJaWYgKCEoWEdJX1hHMjdHZXRQU0NWYWx1ZShwVkJJbmZvKSAmIDB4MSkpIHsKLQkJCQlYR0lfWEcyN0JMU2lnbmFsVkREKDB4MDEsIDB4MDEsIHBWQkluZm8pOyAvKiBMVkRTIFZERCBvbiAqLworCQkJCS8qIExWRFMgVkREIG9uICovCisJCQkJWEdJX1hHMjdCTFNpZ25hbFZERCgweDAxLCAweDAxLCBwVkJJbmZvKTsKIAkJCQlYR0lfWEcyMVNldFBhbmVsRGVsYXkoMiwgcFZCSW5mbyk7CiAJCQl9CiAJCQlpZiAoIShYR0lfWEcyN0dldFBTQ1ZhbHVlKHBWQkluZm8pICYgMHgyMCkpCi0JCQkJWEdJX1hHMjdCTFNpZ25hbFZERCgweDIwLCAweDIwLCBwVkJJbmZvKTsgLyogTFZEUyBzaWduYWwgb24gKi8KKwkJCQkvKiBMVkRTIHNpZ25hbCBvbiAqLworCQkJCVhHSV9YRzI3QkxTaWduYWxWREQoMHgyMCwgMHgyMCwgcFZCSW5mbyk7CiAJCQlYR0lfWEcyMVNldFBhbmVsRGVsYXkoMywgcFZCSW5mbyk7Ci0JCQlYR0lfWEcyN0JMU2lnbmFsVkREKDB4MDIsIDB4MDIsIHBWQkluZm8pOyAvKiBMVkRTIGJhY2tsaWdodCBvbiAqLworCQkJLyogTFZEUyBiYWNrbGlnaHQgb24gKi8KKwkJCVhHSV9YRzI3QkxTaWduYWxWREQoMHgwMiwgMHgwMiwgcFZCSW5mbyk7CiAJCX0gZWxzZSB7Ci0JCQlYR0lfWEcyN0JMU2lnbmFsVkREKDB4MjAsIDB4MjAsIHBWQkluZm8pOyAvKiBEVk8vRFZJIHNpZ25hbCBvbiAqLworCQkJLyogRFZPL0RWSSBzaWduYWwgb24gKi8KKwkJCVhHSV9YRzI3QkxTaWduYWxWREQoMHgyMCwgMHgyMCwgcFZCSW5mbyk7CiAJCX0KIAogCX0KQEAgLTQxNjIsMTAgKzQzODAsMTIgQEAKIAogCWlmIChwWEdJSFdERS0+akNoaXBUeXBlID09IFhHMjEpIHsKIAkJaWYgKHBWQkluZm8tPklGX0RFRl9MVkRTID09IDEpIHsKLQkJCVhHSV9YRzIxQkxTaWduYWxWREQoMHgwMiwgMHgwMCwgcFZCSW5mbyk7IC8qIExWRFMgYmFja2xpZ2h0IG9mZiAqLworCQkJLyogTFZEUyBiYWNrbGlnaHQgb2ZmICovCisJCQlYR0lfWEcyMUJMU2lnbmFsVkREKDB4MDIsIDB4MDAsIHBWQkluZm8pOwogCQkJWEdJX1hHMjFTZXRQYW5lbERlbGF5KDMsIHBWQkluZm8pOwogCQl9IGVsc2UgewotCQkJWEdJX1hHMjFCTFNpZ25hbFZERCgweDIwLCAweDAwLCBwVkJJbmZvKTsgLyogRFZPL0RWSSBzaWduYWwgb2ZmICovCisJCQkvKiBEVk8vRFZJIHNpZ25hbCBvZmYgKi8KKwkJCVhHSV9YRzIxQkxTaWduYWxWREQoMHgyMCwgMHgwMCwgcFZCSW5mbyk7CiAJCX0KIAl9CiAKQEAgLTQxNzcsMTIgKzQzOTcsMTQgQEAKIAogCWlmIChwWEdJSFdERS0+akNoaXBUeXBlID09IFhHMjcpIHsKIAkJaWYgKChYR0lfWEcyN0dldFBTQ1ZhbHVlKHBWQkluZm8pICYgMHgyKSkgewotCQkJWEdJX1hHMjdCTFNpZ25hbFZERCgweDAyLCAweDAwLCBwVkJJbmZvKTsgLyogTFZEUyBiYWNrbGlnaHQgb2ZmICovCisJCQkvKiBMVkRTIGJhY2tsaWdodCBvZmYgKi8KKwkJCVhHSV9YRzI3QkxTaWduYWxWREQoMHgwMiwgMHgwMCwgcFZCSW5mbyk7CiAJCQlYR0lfWEcyMVNldFBhbmVsRGVsYXkoMywgcFZCSW5mbyk7CiAJCX0KIAogCQlpZiAocFZCSW5mby0+SUZfREVGX0xWRFMgPT0gMCkKLQkJCVhHSV9YRzI3QkxTaWduYWxWREQoMHgyMCwgMHgwMCwgcFZCSW5mbyk7IC8qIERWTy9EVkkgc2lnbmFsIG9mZiAqLworCQkJLyogRFZPL0RWSSBzaWduYWwgb2ZmICovCisJCQlYR0lfWEcyN0JMU2lnbmFsVkREKDB4MjAsIDB4MDAsIHBWQkluZm8pOwogCX0KIAogCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UDNjNCwgMHgwMSwgMHhERiwgMHgyMCk7CkBAIC00MjAwLDggKzQ0MjIsMTAgQEAKICNpZiAwCiBzdGF0aWMgdm9pZCBYR0lfV2FpdERpc3BsYXkoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotCXdoaWxlICghKGluYihwVkJJbmZvLT5QM2RhKSAmIDB4MDEpKTsKLQl3aGlsZSAoaW5iKHBWQkluZm8tPlAzZGEpICYgMHgwMSk7CisJd2hpbGUgKCEoaW5iKHBWQkluZm8tPlAzZGEpICYgMHgwMSkpCisJCTsKKwl3aGlsZSAoaW5iKHBWQkluZm8tPlAzZGEpICYgMHgwMSkKKwkJOwogfQogI2VuZGlmCiAKQEAgLTQyMTEsMTggKzQ0MzUsMjEgQEAKIAkJeGdpZmJfcmVnX29yKHBWQkluZm8tPlBhcnQxUG9ydCwgMHgwMSwgMHg0MCk7CiB9CiAKLXN0YXRpYyB2b2lkIFhHSV9TYXZlQ1JUMkluZm8odW5zaWduZWQgc2hvcnQgTW9kZU5vLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCitzdGF0aWMgdm9pZCBYR0lfU2F2ZUNSVDJJbmZvKHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCSAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogCXVuc2lnbmVkIHNob3J0IHRlbXAxLCB0ZW1wMjsKIAotCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNkNCwgMHgzNCwgTW9kZU5vKTsgLyogcmVzZXJ2ZSBDUjM0IGZvciBDUlQxIE1vZGUgTm8gKi8KKwkvKiByZXNlcnZlIENSMzQgZm9yIENSVDEgTW9kZSBObyAqLworCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNkNCwgMHgzNCwgTW9kZU5vKTsKIAl0ZW1wMSA9IChwVkJJbmZvLT5WQkluZm8gJiBTZXRJblNsYXZlTW9kZSkgPj4gODsKIAl0ZW1wMiA9IH4oU2V0SW5TbGF2ZU1vZGUgPj4gOCk7CiAJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2Q0LCAweDMxLCB0ZW1wMiwgdGVtcDEpOwogfQogCi1zdGF0aWMgdm9pZCBYR0lfR2V0Q1JUMlJlc0luZm8odW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKLQkJc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQorc3RhdGljIHZvaWQgWEdJX0dldENSVDJSZXNJbmZvKHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJCSAgICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAJdW5zaWduZWQgc2hvcnQgeHJlcywgeXJlcywgbW9kZWZsYWcsIHJlc2luZGV4OwogCkBAIC00MjMwLDExICs0NDU3LDEzIEBACiAJaWYgKE1vZGVObyA8PSAweDEzKSB7CiAJCXhyZXMgPSBwVkJJbmZvLT5TdFJlc0luZm9bcmVzaW5kZXhdLkhUb3RhbDsKIAkJeXJlcyA9IHBWQkluZm8tPlN0UmVzSW5mb1tyZXNpbmRleF0uVlRvdGFsOwotCQkvKiBtb2RlZmxhZyA9IHBWQkluZm8tPlNNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uU3RfTW9kZUZsYWc7IHNpK1N0X1Jlc0luZm8gKi8KKwkJLyogc2krU3RfUmVzSW5mbyAqLworCQkvKiBtb2RlZmxhZyA9IHBWQkluZm8tPlNNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uU3RfTW9kZUZsYWc7Ki8KIAl9IGVsc2UgewogCQl4cmVzID0gcFZCSW5mby0+TW9kZVJlc0luZm9bcmVzaW5kZXhdLkhUb3RhbDsgLyogeHJlcy0+YXggKi8KIAkJeXJlcyA9IHBWQkluZm8tPk1vZGVSZXNJbmZvW3Jlc2luZGV4XS5WVG90YWw7IC8qIHlyZXMtPmJ4ICovCi0JCW1vZGVmbGFnID0gcFZCSW5mby0+RU1vZGVJRFRhYmxlW01vZGVJZEluZGV4XS5FeHRfTW9kZUZsYWc7IC8qIHNpK1N0X01vZGVGbGFnICovCisJCS8qIHNpK1N0X01vZGVGbGFnICovCisJCW1vZGVmbGFnID0gcFZCSW5mby0+RU1vZGVJRFRhYmxlW01vZGVJZEluZGV4XS5FeHRfTW9kZUZsYWc7CiAKIAkJLyoKIAkJaWYgKHBWQkluZm8tPklGX0RFRl9GU1ROKSB7CkBAIC00MzA2LDkgKzQ1MzUsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgWEdJX0dldFJBTURBQzJEQVRBKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCi0JCXVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwKLQkJc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQorc3RhdGljIHZvaWQgWEdJX0dldFJBTURBQzJEQVRBKHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsCisJCQkgICAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogCXVuc2lnbmVkIHNob3J0IHRlbXBheCwgdGVtcGJ4LCB0ZW1wMSwgdGVtcDIsIG1vZGVmbGFnID0gMCwgdGVtcGN4LAogCQkJU3RhbmRUYWJsZUluZGV4LCBDUlQxSW5kZXg7CkBAIC00MzI0LDI0ICs0NTU0LDIzIEBACiAJCXRlbXAxID0gcFZCSW5mby0+U3RhbmRUYWJsZVtTdGFuZFRhYmxlSW5kZXhdLkNSVENbN107CiAJfSBlbHNlIHsKIAkJbW9kZWZsYWcgPSBwVkJJbmZvLT5FTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLkV4dF9Nb2RlRmxhZzsKLQkJQ1JUMUluZGV4Ci0JCQkJPSBwVkJJbmZvLT5SZWZJbmRleFtSZWZyZXNoUmF0ZVRhYmxlSW5kZXhdLkV4dF9DUlQxQ1JUQzsKKwkJQ1JUMUluZGV4ID0gcFZCSW5mby0+UmVmSW5kZXhbUmVmcmVzaFJhdGVUYWJsZUluZGV4XS4KKwkJCQlFeHRfQ1JUMUNSVEM7CiAJCUNSVDFJbmRleCAmPSBJbmRleE1hc2s7Ci0JCXRlbXAxCi0JCQkJPSAodW5zaWduZWQgc2hvcnQpIHBWQkluZm8tPlhHSU5FV1VCX0NSVDFUYWJsZVtDUlQxSW5kZXhdLkNSWzBdOwotCQl0ZW1wMgotCQkJCT0gKHVuc2lnbmVkIHNob3J0KSBwVkJJbmZvLT5YR0lORVdVQl9DUlQxVGFibGVbQ1JUMUluZGV4XS5DUls1XTsKKwkJdGVtcDEgPSAodW5zaWduZWQgc2hvcnQpIHBWQkluZm8tPgorCQkJWEdJTkVXVUJfQ1JUMVRhYmxlW0NSVDFJbmRleF0uQ1JbMF07CisJCXRlbXAyID0gKHVuc2lnbmVkIHNob3J0KSBwVkJJbmZvLT4KKwkJCVhHSU5FV1VCX0NSVDFUYWJsZVtDUlQxSW5kZXhdLkNSWzVdOwogCQl0ZW1wYXggPSAodGVtcDEgJiAweEZGKSB8ICgodGVtcDIgJiAweDAzKSA8PCA4KTsKLQkJdGVtcGJ4Ci0JCQkJPSAodW5zaWduZWQgc2hvcnQpIHBWQkluZm8tPlhHSU5FV1VCX0NSVDFUYWJsZVtDUlQxSW5kZXhdLkNSWzhdOwotCQl0ZW1wY3gKLQkJCQk9ICh1bnNpZ25lZCBzaG9ydCkgcFZCSW5mby0+WEdJTkVXVUJfQ1JUMVRhYmxlW0NSVDFJbmRleF0uQ1JbMTRdCi0JCQkJCQk8PCA4OworCQl0ZW1wYnggPSAodW5zaWduZWQgc2hvcnQpIHBWQkluZm8tPgorCQkJWEdJTkVXVUJfQ1JUMVRhYmxlW0NSVDFJbmRleF0uQ1JbOF07CisJCXRlbXBjeCA9ICh1bnNpZ25lZCBzaG9ydCkgcFZCSW5mby0+CisJCQlYR0lORVdVQl9DUlQxVGFibGVbQ1JUMUluZGV4XS5DUlsxNF0gPDwgODsKIAkJdGVtcGN4ICY9IDB4MDEwMDsKIAkJdGVtcGN4ID0gdGVtcGN4IDw8IDI7CiAJCXRlbXBieCB8PSB0ZW1wY3g7Ci0JCXRlbXAxCi0JCQkJPSAodW5zaWduZWQgc2hvcnQpIHBWQkluZm8tPlhHSU5FV1VCX0NSVDFUYWJsZVtDUlQxSW5kZXhdLkNSWzldOworCQl0ZW1wMSA9ICh1bnNpZ25lZCBzaG9ydCkgcFZCSW5mby0+CisJCQlYR0lORVdVQl9DUlQxVGFibGVbQ1JUMUluZGV4XS5DUls5XTsKIAl9CiAKIAlpZiAodGVtcDEgJiAweDAxKQpAQCAtNDM3MywxMCArNDYwMiwxMiBAQAogCXN0cnVjdCBYR0lfVFZEYXRhU3RydWN0ICpUVlB0ciA9IE5VTEw7CiAKIAlpZiAoTW9kZU5vIDw9IDB4MTMpIHsKLQkJbW9kZWZsYWcgPSBwVkJJbmZvLT5TTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLlN0X01vZGVGbGFnOyAvKiBzaStTdF9SZXNJbmZvICovCisJCS8qIHNpK1N0X1Jlc0luZm8gKi8KKwkJbW9kZWZsYWcgPSBwVkJJbmZvLT5TTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLlN0X01vZGVGbGFnOwogCQlyZXNpbmZvID0gcFZCSW5mby0+U01vZGVJRFRhYmxlW01vZGVJZEluZGV4XS5TdF9SZXNJbmZvOwogCX0gZWxzZSB7Ci0JCW1vZGVmbGFnID0gcFZCSW5mby0+RU1vZGVJRFRhYmxlW01vZGVJZEluZGV4XS5FeHRfTW9kZUZsYWc7IC8qIHNpK0V4dF9SZXNJbmZvICovCisJCS8qIHNpK0V4dF9SZXNJbmZvICovCisJCW1vZGVmbGFnID0gcFZCSW5mby0+RU1vZGVJRFRhYmxlW01vZGVJZEluZGV4XS5FeHRfTW9kZUZsYWc7CiAJCXJlc2luZm8gPSBwVkJJbmZvLT5FTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLkV4dF9SRVNJTkZPOwogCX0KIApAQCAtNDU5OCw3ICs0ODI5LDggQEAKIAlyZXR1cm4gQ29sb3JEZXB0aFtpbmRleF07CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBYR0lfR2V0T2Zmc2V0KHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgWEdJX0dldE9mZnNldCh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sCisJCQkJICAgIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAogCQl1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsCiAJCXN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAogCQlzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCkBAIC00NjEwLDcgKzQ4NDIsOCBAQAogCWlmIChNb2RlTm8gPD0gMHgxNCkKIAkJaW5mb2ZsYWcgPSAwOwogCWVsc2UKLQkJaW5mb2ZsYWcgPSBwVkJJbmZvLT5SZWZJbmRleFtSZWZyZXNoUmF0ZVRhYmxlSW5kZXhdLkV4dF9JbmZvRmxhZzsKKwkJaW5mb2ZsYWcgPSBwVkJJbmZvLT4KKwkJCQlSZWZJbmRleFtSZWZyZXNoUmF0ZVRhYmxlSW5kZXhdLkV4dF9JbmZvRmxhZzsKIAogCWluZGV4ID0gKG1vZGVpbmZvID4+IDgpICYgMHhGRjsKIApAQCAtNDY1Nyw4ICs0ODkwLDEwIEBACiAKIHN0YXRpYyB2b2lkIFhHSV9TZXRDUlQyRklGTyhzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0JeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MDEsIDB4M0IpOyAvKiB0aHJlc2hvbGQgaGlnaCAsZGlzYWJsZSBhdXRvIHRocmVzaG9sZCAqLwotCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UGFydDFQb3J0LCAweDAyLCB+KDB4M0YpLCAweDA0KTsgLyogdGhyZXNob2xkIGxvdyBkZWZhdWx0IDA0aCAqLworCS8qIHRocmVzaG9sZCBoaWdoICxkaXNhYmxlIGF1dG8gdGhyZXNob2xkICovCisJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MDEsIDB4M0IpOworCS8qIHRocmVzaG9sZCBsb3cgZGVmYXVsdCAwNGggKi8KKwl4Z2lmYl9yZWdfYW5kX29yKHBWQkluZm8tPlBhcnQxUG9ydCwgMHgwMiwgfigweDNGKSwgMHgwNCk7CiB9CiAKIHN0YXRpYyB2b2lkIFhHSV9QcmVTZXRHcm91cDEodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKQEAgLTQ2NjksNyArNDkwNCw4IEBACiAJdW5zaWduZWQgc2hvcnQgdGVtcGN4ID0gMCwgQ1JUMUluZGV4ID0gMCwgcmVzaW5mbyA9IDA7CiAKIAlpZiAoTW9kZU5vID4gMHgxMykgewotCQlDUlQxSW5kZXggPSBwVkJJbmZvLT5SZWZJbmRleFtSZWZyZXNoUmF0ZVRhYmxlSW5kZXhdLkV4dF9DUlQxQ1JUQzsKKwkJQ1JUMUluZGV4ID0gcFZCSW5mby0+CisJCQkJUmVmSW5kZXhbUmVmcmVzaFJhdGVUYWJsZUluZGV4XS5FeHRfQ1JUMUNSVEM7CiAJCUNSVDFJbmRleCAmPSBJbmRleE1hc2s7CiAJCXJlc2luZm8gPSBwVkJJbmZvLT5FTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLkV4dF9SRVNJTkZPOwogCX0KQEAgLTQ2OTUsNyArNDkzMSw4IEBACiAJCQlwdXNoYnggPSAwLCBDUlQxSW5kZXggPSAwLCBtb2RlZmxhZywgcmVzaW5mbyA9IDA7CiAKIAlpZiAoTW9kZU5vID4gMHgxMykgewotCQlDUlQxSW5kZXggPSBwVkJJbmZvLT5SZWZJbmRleFtSZWZyZXNoUmF0ZVRhYmxlSW5kZXhdLkV4dF9DUlQxQ1JUQzsKKwkJQ1JUMUluZGV4ID0gcFZCSW5mby0+CisJCQkJUmVmSW5kZXhbUmVmcmVzaFJhdGVUYWJsZUluZGV4XS5FeHRfQ1JUMUNSVEM7CiAJCUNSVDFJbmRleCAmPSBJbmRleE1hc2s7CiAJCXJlc2luZm8gPSBwVkJJbmZvLT5FTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLkV4dF9SRVNJTkZPOwogCX0KQEAgLTQ3MDcsMTEgKzQ5NDQsMTMgQEAKIAogCS8qIGJhaW55IGNoYW5nZSB0YWJsZSBuYW1lICovCiAJaWYgKG1vZGVmbGFnICYgSGFsZkRDTEspIHsKLQkJdGVtcCA9IChwVkJJbmZvLT5WR0FIVCAvIDIgLSAxKSAmIDB4MEZGOyAvKiBCVFZHQTJIVCAweDA4LDB4MDkgKi8KKwkJLyogQlRWR0EySFQgMHgwOCwweDA5ICovCisJCXRlbXAgPSAocFZCSW5mby0+VkdBSFQgLyAyIC0gMSkgJiAweDBGRjsKIAkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MDgsIHRlbXApOwogCQl0ZW1wID0gKCgocFZCSW5mby0+VkdBSFQgLyAyIC0gMSkgJiAweEZGMDApID4+IDgpIDw8IDQ7CiAJCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UGFydDFQb3J0LCAweDA5LCB+MHgwRjAsIHRlbXApOwotCQl0ZW1wID0gKHBWQkluZm8tPlZHQUhERSAvIDIgKyAxNikgJiAweDBGRjsgLyogQlRWR0EySERFRSAweDBBLDB4MEMgKi8KKwkJLyogQlRWR0EySERFRSAweDBBLDB4MEMgKi8KKwkJdGVtcCA9IChwVkJJbmZvLT5WR0FIREUgLyAyICsgMTYpICYgMHgwRkY7CiAJCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UGFydDFQb3J0LCAweDBBLCB0ZW1wKTsKIAkJdGVtcGN4ID0gKChwVkJJbmZvLT5WR0FIVCAtIHBWQkluZm8tPlZHQUhERSkgLyAyKSA+PiAyOwogCQlwdXNoYnggPSBwVkJJbmZvLT5WR0FIREUgLyAyICsgMTY7CkBAIC00NzIxLDggKzQ5NjAsOSBAQAogCiAJCWlmIChwVkJJbmZvLT5WQkluZm8gJiBTZXRDUlQyVG9SQU1EQUMpIHsKIAkJCXRlbXBieCA9IHBWQkluZm8tPlhHSU5FV1VCX0NSVDFUYWJsZVtDUlQxSW5kZXhdLkNSWzRdOwotCQkJdGVtcGJ4IHw9ICgocFZCSW5mby0+WEdJTkVXVUJfQ1JUMVRhYmxlW0NSVDFJbmRleF0uQ1JbMTRdCi0JCQkJCQkJJiAweEMwKSA8PCAyKTsKKwkJCXRlbXBieCB8PSAoKHBWQkluZm8tPgorCQkJCQlYR0lORVdVQl9DUlQxVGFibGVbQ1JUMUluZGV4XS5DUlsxNF0gJgorCQkJCQkJMHhDMCkgPDwgMik7CiAJCQl0ZW1wYnggPSAodGVtcGJ4IC0gMykgPDwgMzsgLyogKFZHQUhSUy0zKSo4ICovCiAJCQl0ZW1wY3ggPSBwVkJJbmZvLT5YR0lORVdVQl9DUlQxVGFibGVbQ1JUMUluZGV4XS5DUls1XTsKIAkJCXRlbXBjeCAmPSAweDFGOwpAQCAtNDc0NSw3ICs0OTg1LDggQEAKIAkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MDgsIHRlbXApOwogCQl0ZW1wID0gKCgocFZCSW5mby0+VkdBSFQgLSAxKSAmIDB4RkYwMCkgPj4gOCkgPDwgNDsKIAkJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MDksIH4weDBGMCwgdGVtcCk7Ci0JCXRlbXAgPSAocFZCSW5mby0+VkdBSERFICsgMTYpICYgMHgwRkY7IC8qIEJUVkdBMkhERUUgMHgwQSwweDBDICovCisJCS8qIEJUVkdBMkhERUUgMHgwQSwweDBDICovCisJCXRlbXAgPSAocFZCSW5mby0+VkdBSERFICsgMTYpICYgMHgwRkY7CiAJCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UGFydDFQb3J0LCAweDBBLCB0ZW1wKTsKIAkJdGVtcGN4ID0gKHBWQkluZm8tPlZHQUhUIC0gcFZCSW5mby0+VkdBSERFKSA+PiAyOyAvKiBjeCAqLwogCQlwdXNoYnggPSBwVkJJbmZvLT5WR0FIREUgKyAxNjsKQEAgLTQ3NTUsOCArNDk5Niw5IEBACiAKIAkJaWYgKHBWQkluZm8tPlZCSW5mbyAmIFNldENSVDJUb1JBTURBQykgewogCQkJdGVtcGJ4ID0gcFZCSW5mby0+WEdJTkVXVUJfQ1JUMVRhYmxlW0NSVDFJbmRleF0uQ1JbM107Ci0JCQl0ZW1wYnggfD0gKChwVkJJbmZvLT5YR0lORVdVQl9DUlQxVGFibGVbQ1JUMUluZGV4XS5DUls1XQotCQkJCQkJCSYgMHhDMCkgPDwgMik7CisJCQl0ZW1wYnggfD0gKChwVkJJbmZvLT4KKwkJCQkJWEdJTkVXVUJfQ1JUMVRhYmxlW0NSVDFJbmRleF0uQ1JbNV0gJgorCQkJCQkJMHhDMCkgPDwgMik7CiAJCQl0ZW1wYnggPSAodGVtcGJ4IC0gMykgPDwgMzsgLyogKFZHQUhSUy0zKSo4ICovCiAJCQl0ZW1wY3ggPSBwVkJJbmZvLT5YR0lORVdVQl9DUlQxVGFibGVbQ1JUMUluZGV4XS5DUls0XTsKIAkJCXRlbXBjeCAmPSAweDFGOwpAQCAtNDgwMSw4ICs1MDQzLDEwIEBACiAJdGVtcGF4ID0gcFZCSW5mby0+VkdBVkRFOwogCXRlbXBieCA9IHBWQkluZm8tPlZHQVZERTsKIAl0ZW1wY3ggPSBwVkJJbmZvLT5WR0FWVDsKLQl0ZW1wYnggPSAocFZCSW5mby0+VkdBVlQgKyBwVkJJbmZvLT5WR0FWREUpID4+IDE7IC8qIEJUVkdBMlZSUyAweDEwLDB4MTEgKi8KLQl0ZW1wY3ggPSAoKHBWQkluZm8tPlZHQVZUIC0gcFZCSW5mby0+VkdBVkRFKSA+PiA0KSArIHRlbXBieCArIDE7IC8qIEJUVkdBMlZSRSAweDExICovCisJLyogQlRWR0EyVlJTIDB4MTAsMHgxMSAqLworCXRlbXBieCA9IChwVkJJbmZvLT5WR0FWVCArIHBWQkluZm8tPlZHQVZERSkgPj4gMTsKKwkvKiBCVFZHQTJWUkUgMHgxMSAqLworCXRlbXBjeCA9ICgocFZCSW5mby0+VkdBVlQgLSBwVkJJbmZvLT5WR0FWREUpID4+IDQpICsgdGVtcGJ4ICsgMTsKIAogCWlmIChwVkJJbmZvLT5WQkluZm8gJiBTZXRDUlQyVG9SQU1EQUMpIHsKIAkJdGVtcGJ4ID0gcFZCSW5mby0+WEdJTkVXVUJfQ1JUMVRhYmxlW0NSVDFJbmRleF0uQ1JbMTBdOwpAQCAtNDg2MCwxMiArNTEwNCwxNSBAQAogCQkJbW9kZWZsYWcsIENSVDFJbmRleDsKIAogCWlmIChNb2RlTm8gPD0gMHgxMykgewotCQltb2RlZmxhZyA9IHBWQkluZm8tPlNNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uU3RfTW9kZUZsYWc7IC8qIHNpK1N0X1Jlc0luZm8gKi8KKwkJLyogc2krU3RfUmVzSW5mbyAqLworCQltb2RlZmxhZyA9IHBWQkluZm8tPlNNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uU3RfTW9kZUZsYWc7CiAJCXJlc2luZm8gPSBwVkJJbmZvLT5TTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLlN0X1Jlc0luZm87CiAJfSBlbHNlIHsKLQkJbW9kZWZsYWcgPSBwVkJJbmZvLT5FTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLkV4dF9Nb2RlRmxhZzsgLyogc2krRXh0X1Jlc0luZm8gKi8KKwkJLyogc2krRXh0X1Jlc0luZm8gKi8KKwkJbW9kZWZsYWcgPSBwVkJJbmZvLT5FTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLkV4dF9Nb2RlRmxhZzsKIAkJcmVzaW5mbyA9IHBWQkluZm8tPkVNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uRXh0X1JFU0lORk87Ci0JCUNSVDFJbmRleCA9IHBWQkluZm8tPlJlZkluZGV4W1JlZnJlc2hSYXRlVGFibGVJbmRleF0uRXh0X0NSVDFDUlRDOworCQlDUlQxSW5kZXggPSBwVkJJbmZvLT4KKwkJCQlSZWZJbmRleFtSZWZyZXNoUmF0ZVRhYmxlSW5kZXhdLkV4dF9DUlQxQ1JUQzsKIAkJQ1JUMUluZGV4ICY9IEluZGV4TWFzazsKIAl9CiAKQEAgLTQ5MTEsOCArNTE1OCwxMCBAQAogCQl9CiAJfQogCi0JeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MDUsIHRlbXApOyAvKiAweDA1IEhvcml6b250YWwgRGlzcGxheSBTdGFydCAqLwotCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UGFydDFQb3J0LCAweDA2LCAweDAzKTsgLyogMHgwNiBIb3Jpem9udGFsIEJsYW5rIGVuZCAqLworCS8qIDB4MDUgSG9yaXpvbnRhbCBEaXNwbGF5IFN0YXJ0ICovCisJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MDUsIHRlbXApOworCS8qIDB4MDYgSG9yaXpvbnRhbCBCbGFuayBlbmQgKi8KKwl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlBhcnQxUG9ydCwgMHgwNiwgMHgwMyk7CiAKIAlpZiAoIShwVkJJbmZvLT5WQkluZm8gJiBEaXNhYmxlQ1JUMkRpc3BsYXkpKSB7IC8qIDAzMDIyNiBiYWlueSAqLwogCQlpZiAocFZCSW5mby0+VkJJbmZvICYgU2V0Q1JUMlRvVFYpCkBAIC00OTYwLDE1ICs1MjA5LDE0IEBACiAJCQkJaWYgKHBWQkluZm8tPkxDRFJlc0luZm8gIT0gUGFuZWwxMjgweDk2MCkgewogCQkJCQlpZiAocFZCSW5mby0+VkdBSERFID49IDgwMCkgewogCQkJCQkJdGVtcCAtPSA3OwotCQkJCQkJaWYgKHBWQkluZm8tPk1vZGVUeXBlCi0JCQkJCQkJCT09IE1vZGVFR0EpIHsKLQkJCQkJCQlpZiAocFZCSW5mby0+VkdBVkRFCi0JCQkJCQkJCQk9PSAxMDI0KSB7CisJCQkJCQlpZiAocFZCSW5mby0+TW9kZVR5cGUgPT0KKwkJCQkJCQlNb2RlRUdBKSB7CisJCQkJCQkJaWYgKHBWQkluZm8tPlZHQVZERSA9PQorCQkJCQkJCSAgICAxMDI0KSB7CiAJCQkJCQkJCXRlbXAgKz0gMTU7Ci0JCQkJCQkJCWlmIChwVkJJbmZvLT5MQ0RSZXNJbmZvCi0JCQkJCQkJCQkJIT0gUGFuZWwxMjgweDEwMjQpIHsKLQkJCQkJCQkJCXRlbXAKLQkJCQkJCQkJCQkJKz0gNzsKKwkJCQkJCQkJaWYgKHBWQkluZm8tPkxDRFJlc0luZm8gIT0gUGFuZWwxMjgweDEwMjQpIHsKKwkJCQkJCQkJCXRlbXAgKz0KKwkJCQkJCQkJCSAgICA3OwogCQkJCQkJCQl9CiAJCQkJCQkJfQogCQkJCQkJfQpAQCAtNDk4OSw4ICs1MjM3LDEwIEBACiAJCX0KIAl9CiAKLQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlBhcnQxUG9ydCwgMHgwNywgdGVtcCk7IC8qIDB4MDcgSG9yaXpvbnRhbCBSZXRyYWNlIFN0YXJ0ICovCi0JeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MDgsIDApOyAvKiAweDA4IEhvcml6b250YWwgUmV0cmFjZSBFbmQgKi8KKwkvKiAweDA3IEhvcml6b250YWwgUmV0cmFjZSBTdGFydCAqLworCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UGFydDFQb3J0LCAweDA3LCB0ZW1wKTsKKwkvKiAweDA4IEhvcml6b250YWwgUmV0cmFjZSBFbmQgKi8KKwl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlBhcnQxUG9ydCwgMHgwOCwgMCk7CiAKIAlpZiAocFZCSW5mby0+VkJJbmZvICYgU2V0Q1JUMlRvVFYpIHsKIAkJaWYgKHBWQkluZm8tPlRWSW5mbyAmIFRWU2ltdU1vZGUpIHsKQEAgLTUwODcsNyArNTMzNyw4IEBACiAJdGVtcCA9IHRlbXBieCAmIDB4MDBGRjsKIAl0ZW1wYngtLTsKIAl0ZW1wID0gdGVtcGJ4ICYgMHgwMEZGOwotCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UGFydDFQb3J0LCAweDEwLCB0ZW1wKTsgLyogMHgxMCB2ZXJ0aWNhbCBCbGFuayBTdGFydCAqLworCS8qIDB4MTAgdmVydGljYWwgQmxhbmsgU3RhcnQgKi8KKwl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlBhcnQxUG9ydCwgMHgxMCwgdGVtcCk7CiAJdGVtcGJ4ID0gcHVzaDI7CiAJdGVtcGJ4LS07CiAJdGVtcCA9IHRlbXBieCAmIDB4MDBGRjsKQEAgLTUxMTAsNyArNTM2MSw4IEBACiAJaWYgKHRlbXBieCAmIDB4MDQwMCkKIAkJdGVtcGN4IHw9IDB4MDYwMDsKIAotCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UGFydDFQb3J0LCAweDExLCAweDAwKTsgLyogMHgxMSBWZXJ0aXZhbCBCbGFuayBFbmQgKi8KKwkvKiAweDExIFZlcnRpdmFsIEJsYW5rIEVuZCAqLworCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UGFydDFQb3J0LCAweDExLCAweDAwKTsKIAogCXRlbXBheCA9IHB1c2gxOwogCXRlbXBheCAtPSB0ZW1wYng7IC8qIDB4MEMgVmVydGljYWwgUmV0cmFjZSBTdGFydCAqLwpAQCAtNTEyOSwxMiArNTM4MSwxMiBAQAogCQkJfSBlbHNlIHsKIAkJCQlpZiAocFZCSW5mby0+VFZJbmZvICYgVFZTaW11TW9kZSkgewogCQkJCQlpZiAocFZCSW5mby0+VFZJbmZvICYgU2V0UEFMVFYpIHsKLQkJCQkJCWlmIChwVkJJbmZvLT5WQlR5cGUKLQkJCQkJCQkJJiBWQl9YR0kzMDFMVikgewotCQkJCQkJCWlmICghKHBWQkluZm8tPlRWSW5mbwotCQkJCQkJCQkJJiAoU2V0WVBiUHJNb2RlNTI1cAotCQkJCQkJCQkJCQl8IFNldFlQYlByTW9kZTc1MHAKLQkJCQkJCQkJCQkJfCBTZXRZUGJQck1vZGUxMDgwaSkpKQorCQkJCQkJaWYgKHBWQkluZm8tPlZCVHlwZSAmCisJCQkJCQkgICAgVkJfWEdJMzAxTFYpIHsKKwkJCQkJCQlpZiAoIShwVkJJbmZvLT5UVkluZm8gJgorCQkJCQkJCSAgICAoU2V0WVBiUHJNb2RlNTI1cCB8CisJCQkJCQkJICAgIFNldFlQYlByTW9kZTc1MHAgfAorCQkJCQkJCSAgICBTZXRZUGJQck1vZGUxMDgwaSkpKQogCQkJCQkJCQl0ZW1wYnggKz0gNDA7CiAJCQkJCQl9IGVsc2UgewogCQkJCQkJCXRlbXBieCArPSA0MDsKQEAgLTUxNDksMTAgKzU0MDEsMTAgQEAKIAkJaWYgKHBWQkluZm8tPlRWSW5mbyAmIFRWU2ltdU1vZGUpIHsKIAkJCWlmIChwVkJJbmZvLT5UVkluZm8gJiBTZXRQQUxUVikgewogCQkJCWlmIChwVkJJbmZvLT5WQlR5cGUgJiBWQl9YR0kzMDFMVikgewotCQkJCQlpZiAoIShwVkJJbmZvLT5UVkluZm8KLQkJCQkJCQkmIChTZXRZUGJQck1vZGU1MjVwCi0JCQkJCQkJCQl8IFNldFlQYlByTW9kZTc1MHAKLQkJCQkJCQkJCXwgU2V0WVBiUHJNb2RlMTA4MGkpKSkKKwkJCQkJaWYgKCEocFZCSW5mby0+VFZJbmZvICYKKwkJCQkJICAgIChTZXRZUGJQck1vZGU1MjVwIHwKKwkJCQkJICAgICBTZXRZUGJQck1vZGU3NTBwIHwKKwkJCQkJICAgICBTZXRZUGJQck1vZGUxMDgwaSkpKQogCQkJCQkJdGVtcGJ4ICs9IDQwOwogCQkJCX0gZWxzZSB7CiAJCQkJCXRlbXBieCArPSA0MDsKQEAgLTUxOTksNyArNTQ1MSw4IEBACiAJdGVtcGJ4ID0gcHVzaDE7IC8qIHBvcCBheCAqLwogCXRlbXAgPSB0ZW1wYnggJiAweDAwRkY7CiAJdGVtcCAmPSAweDBGOwotCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UGFydDFQb3J0LCAweDBELCB0ZW1wKTsgLyogMHgwRCB2ZXJ0aWNhbCBSZXRyYWNlIEVuZCAqLworCS8qIDB4MEQgdmVydGljYWwgUmV0cmFjZSBFbmQgKi8KKwl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlBhcnQxUG9ydCwgMHgwRCwgdGVtcCk7CiAKIAlpZiAodGVtcGJ4ICYgMHgwMDEwKQogCQl0ZW1wY3ggfD0gMHgyMDAwOwpAQCAtNTI0MiwxNCArNTQ5NSwxNiBAQAogCXVuc2lnbmVkIGxvbmcgbG9uZ3RlbXAsIHRlbXBlYXgsIHRlbXBlYngsIHRlbXAyLCB0ZW1wZWN4OwogCiAJaWYgKE1vZGVObyA8PSAweDEzKSB7Ci0JCW1vZGVmbGFnID0gcFZCSW5mby0+U01vZGVJRFRhYmxlW01vZGVJZEluZGV4XS5TdF9Nb2RlRmxhZzsgLyogc2krU3RfUmVzSW5mbyAqLworCQkvKiBzaStTdF9SZXNJbmZvICovCisJCW1vZGVmbGFnID0gcFZCSW5mby0+U01vZGVJRFRhYmxlW01vZGVJZEluZGV4XS5TdF9Nb2RlRmxhZzsKIAkJcmVzaW5mbyA9IHBWQkluZm8tPlNNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uU3RfUmVzSW5mbzsKIAkJY3J0MmNydGMgPSBwVkJJbmZvLT5TTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLlN0X0NSVDJDUlRDOwogCX0gZWxzZSB7Ci0JCW1vZGVmbGFnID0gcFZCSW5mby0+RU1vZGVJRFRhYmxlW01vZGVJZEluZGV4XS5FeHRfTW9kZUZsYWc7IC8qIHNpK0V4dF9SZXNJbmZvICovCisJCS8qIHNpK0V4dF9SZXNJbmZvICovCisJCW1vZGVmbGFnID0gcFZCSW5mby0+RU1vZGVJRFRhYmxlW01vZGVJZEluZGV4XS5FeHRfTW9kZUZsYWc7CiAJCXJlc2luZm8gPSBwVkJJbmZvLT5FTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLkV4dF9SRVNJTkZPOwotCQljcnQyY3J0YwotCQkJCT0gcFZCSW5mby0+UmVmSW5kZXhbUmVmcmVzaFJhdGVUYWJsZUluZGV4XS5FeHRfQ1JUMkNSVEM7CisJCWNydDJjcnRjID0gcFZCSW5mby0+UmVmSW5kZXhbUmVmcmVzaFJhdGVUYWJsZUluZGV4XS4KKwkJCQlFeHRfQ1JUMkNSVEM7CiAJfQogCiAJdGVtcGF4ID0gMDsKQEAgLTUzMDgsNyArNTU2Myw4IEBACiAJCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UGFydDJQb3J0LCBpLCBUaW1pbmdQb2ludFtqXSk7CiAKIAlmb3IgKGkgPSAweDM5OyBpIDw9IDB4NDU7IGkrKywgaisrKQotCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlBhcnQyUG9ydCwgaSwgVGltaW5nUG9pbnRbal0pOyAvKiBkaS0+dGVtcDJbal0gKi8KKwkJLyogZGktPnRlbXAyW2pdICovCisJCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UGFydDJQb3J0LCBpLCBUaW1pbmdQb2ludFtqXSk7CiAKIAlpZiAocFZCSW5mby0+VkJJbmZvICYgU2V0Q1JUMlRvVFYpCiAJCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UGFydDJQb3J0LCAweDNBLCAweDFGLCAweDAwKTsKQEAgLTU0NTMsOSArNTcwOSwxMCBAQAogCQl0ZW1wYnggPSA4NTM7CiAKIAlpZiAocFZCSW5mby0+VkJJbmZvICYgU2V0Q1JUMlRvVFYpIHsKLQkJaWYgKHBWQkluZm8tPlZCVHlwZSAmIChWQl9YR0kzMDFMViB8IFZCX1hHSTMwMkxWIHwgVkJfWEdJMzAxQykpIHsKLQkJCWlmICghKHBWQkluZm8tPlRWSW5mbyAmIChTZXRZUGJQck1vZGU1MjVwCi0JCQkJCXwgU2V0WVBiUHJNb2RlNzUwcCkpKQorCQlpZiAocFZCSW5mby0+VkJUeXBlICYKKwkJICAgIChWQl9YR0kzMDFMViB8IFZCX1hHSTMwMkxWIHwgVkJfWEdJMzAxQykpIHsKKwkJCWlmICghKHBWQkluZm8tPlRWSW5mbyAmCisJCQkgICAgKFNldFlQYlByTW9kZTUyNXAgfCBTZXRZUGJQck1vZGU3NTBwKSkpCiAJCQkJdGVtcGJ4ID0gdGVtcGJ4ID4+IDE7CiAJCX0gZWxzZQogCQkJdGVtcGJ4ID0gdGVtcGJ4ID4+IDE7CkBAIC01Njg4LDEzICs1OTQ1LDE1IEBACiAJc3RydWN0IFhHSV9MQ0REZXNTdHJ1Y3QgKkxDREJEZXNQdHIgPSBOVUxMOwogCiAJaWYgKE1vZGVObyA8PSAweDEzKSB7Ci0JCW1vZGVmbGFnID0gcFZCSW5mby0+U01vZGVJRFRhYmxlW01vZGVJZEluZGV4XS5TdF9Nb2RlRmxhZzsgLyogc2krU3RfUmVzSW5mbyAqLworCQkvKiBzaStTdF9SZXNJbmZvICovCisJCW1vZGVmbGFnID0gcFZCSW5mby0+U01vZGVJRFRhYmxlW01vZGVJZEluZGV4XS5TdF9Nb2RlRmxhZzsKIAkJcmVzaW5mbyA9IHBWQkluZm8tPlNNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uU3RfUmVzSW5mbzsKIAl9IGVsc2UgewotCQltb2RlZmxhZyA9IHBWQkluZm8tPkVNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uRXh0X01vZGVGbGFnOyAvKiBzaStFeHRfUmVzSW5mbyAqLworCQkvKiBzaStFeHRfUmVzSW5mbyAqLworCQltb2RlZmxhZyA9IHBWQkluZm8tPkVNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uRXh0X01vZGVGbGFnOwogCQlyZXNpbmZvID0gcFZCSW5mby0+RU1vZGVJRFRhYmxlW01vZGVJZEluZGV4XS5FeHRfUkVTSU5GTzsKLQkJQ1JUMUluZGV4Ci0JCQkJPSBwVkJJbmZvLT5SZWZJbmRleFtSZWZyZXNoUmF0ZVRhYmxlSW5kZXhdLkV4dF9DUlQxQ1JUQzsKKwkJQ1JUMUluZGV4ID0gcFZCSW5mby0+UmVmSW5kZXhbUmVmcmVzaFJhdGVUYWJsZUluZGV4XS4KKwkJCUV4dF9DUlQxQ1JUQzsKIAkJQ1JUMUluZGV4ICY9IEluZGV4TWFzazsKIAl9CiAKQEAgLTU3NTUsNyArNjAxNCw4IEBACiAJaWYgKCh0ZW1wYWggPT0gUGFuZWwxMDI0eDc2OCkgfHwgKHRlbXBhaCA9PSBQYW5lbDEwMjR4NzY4eDc1KSkgewogCQl0ZW1wYnggPSAxMDI0OwogCQl0ZW1wY3ggPSA3Njg7Ci0JfSBlbHNlIGlmICgodGVtcGFoID09IFBhbmVsMTI4MHgxMDI0KSB8fCAodGVtcGFoID09IFBhbmVsMTI4MHgxMDI0eDc1KSkgeworCX0gZWxzZSBpZiAoKHRlbXBhaCA9PSBQYW5lbDEyODB4MTAyNCkgfHwKKwkJICAgKHRlbXBhaCA9PSBQYW5lbDEyODB4MTAyNHg3NSkpIHsKIAkJdGVtcGJ4ID0gMTI4MDsKIAkJdGVtcGN4ID0gMTAyNDsKIAl9IGVsc2UgaWYgKHRlbXBhaCA9PSBQYW5lbDE0MDB4MTA1MCkgewpAQCAtNTk2NSwxNiArNjIyNSwyMyBAQAogCWZvciAoaSA9IDB4ODAsIGogPSAwOyBpIDw9IDB4QkY7IGkrKywgaisrKQogCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlBhcnQyUG9ydCwgaSwgVGFwNFRpbWluZ1B0ci0+UmVnW2pdKTsKIAotCWlmICgocFZCSW5mby0+VkJJbmZvICYgU2V0Q1JUMlRvVFYpICYmICghKHBWQkluZm8tPlZCSW5mbyAmIFNldENSVDJUb0hpVmlzaW9uVFYpKSkgewotCQlUYXA0VGltaW5nUHRyID0gWEdJX0dldFRhcDRQdHIoMSwgcFZCSW5mbyk7IC8qIFNldCBWZXJ0aWNhbCBTY2FsaW5nICovCisJaWYgKChwVkJJbmZvLT5WQkluZm8gJiBTZXRDUlQyVG9UVikgJiYKKwkgICAgKCEocFZCSW5mby0+VkJJbmZvICYgU2V0Q1JUMlRvSGlWaXNpb25UVikpKSB7CisJCS8qIFNldCBWZXJ0aWNhbCBTY2FsaW5nICovCisJCVRhcDRUaW1pbmdQdHIgPSBYR0lfR2V0VGFwNFB0cigxLCBwVkJJbmZvKTsKIAkJZm9yIChpID0gMHhDMCwgaiA9IDA7IGkgPCAweEZGOyBpKyssIGorKykKLQkJCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UGFydDJQb3J0LCBpLCBUYXA0VGltaW5nUHRyLT5SZWdbal0pOworCQkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QYXJ0MlBvcnQsCisJCQkJICAgICAgaSwKKwkJCQkgICAgICBUYXA0VGltaW5nUHRyLT5SZWdbal0pOwogCX0KIAotCWlmICgocFZCSW5mby0+VkJJbmZvICYgU2V0Q1JUMlRvVFYpICYmICghKHBWQkluZm8tPlZCSW5mbyAmIFNldENSVDJUb0hpVmlzaW9uVFYpKSkKLQkJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QYXJ0MlBvcnQsIDB4NEUsIH4weDE0LCAweDA0KTsgLyogRW5hYmxlIFYuU2NhbGluZyAqLworCWlmICgocFZCSW5mby0+VkJJbmZvICYgU2V0Q1JUMlRvVFYpICYmCisJICAgICghKHBWQkluZm8tPlZCSW5mbyAmIFNldENSVDJUb0hpVmlzaW9uVFYpKSkKKwkJLyogRW5hYmxlIFYuU2NhbGluZyAqLworCQl4Z2lmYl9yZWdfYW5kX29yKHBWQkluZm8tPlBhcnQyUG9ydCwgMHg0RSwgfjB4MTQsIDB4MDQpOwogCWVsc2UKLQkJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QYXJ0MlBvcnQsIDB4NEUsIH4weDE0LCAweDEwKTsgLyogRW5hYmxlIEguU2NhbGluZyAqLworCQkvKiBFbmFibGUgSC5TY2FsaW5nICovCisJCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UGFydDJQb3J0LCAweDRFLCB+MHgxNCwgMHgxMCk7CiAjZW5kaWYKIH0KIApAQCAtNTk4Niw5ICs2MjUzLDExIEBACiAJdW5zaWduZWQgc2hvcnQgbW9kZWZsYWc7CiAKIAlpZiAoTW9kZU5vIDw9IDB4MTMpCi0JCW1vZGVmbGFnID0gcFZCSW5mby0+U01vZGVJRFRhYmxlW01vZGVJZEluZGV4XS5TdF9Nb2RlRmxhZzsgLyogc2krU3RfUmVzSW5mbyAqLworCQkvKiBzaStTdF9SZXNJbmZvICovCisJCW1vZGVmbGFnID0gcFZCSW5mby0+U01vZGVJRFRhYmxlW01vZGVJZEluZGV4XS5TdF9Nb2RlRmxhZzsKIAllbHNlCi0JCW1vZGVmbGFnID0gcFZCSW5mby0+RU1vZGVJRFRhYmxlW01vZGVJZEluZGV4XS5FeHRfTW9kZUZsYWc7IC8qIHNpK0V4dF9SZXNJbmZvICovCisJCS8qIHNpK0V4dF9SZXNJbmZvICovCisJCW1vZGVmbGFnID0gcFZCSW5mby0+RU1vZGVJRFRhYmxlW01vZGVJZEluZGV4XS5FeHRfTW9kZUZsYWc7CiAKIAl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlBhcnQzUG9ydCwgMHgwMCwgMHgwMCk7CiAJaWYgKHBWQkluZm8tPlRWSW5mbyAmIFNldFBBTFRWKSB7CkBAIC02MDQ3LDkgKzYzMTYsMTEgQEAKIAl1bnNpZ25lZCBsb25nIHRlbXBlYngsIHRlbXBlYXgsIHRlbXBsb25nOwogCiAJaWYgKE1vZGVObyA8PSAweDEzKQotCQltb2RlZmxhZyA9IHBWQkluZm8tPlNNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uU3RfTW9kZUZsYWc7IC8qIHNpK1N0X1Jlc0luZm8gKi8KKwkJLyogc2krU3RfUmVzSW5mbyAqLworCQltb2RlZmxhZyA9IHBWQkluZm8tPlNNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uU3RfTW9kZUZsYWc7CiAJZWxzZQotCQltb2RlZmxhZyA9IHBWQkluZm8tPkVNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uRXh0X01vZGVGbGFnOyAvKiBzaStFeHRfUmVzSW5mbyAqLworCQkvKiBzaStFeHRfUmVzSW5mbyAqLworCQltb2RlZmxhZyA9IHBWQkluZm8tPkVNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uRXh0X01vZGVGbGFnOwogCiAJdGVtcCA9IHBWQkluZm8tPlJWQkhDRkFDVDsKIAl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlBhcnQ0UG9ydCwgMHgxMywgdGVtcCk7CkBAIC02MTYyLDcgKzY0MzMsOSBAQAogCQlpZiAoWEdJX0lzTENERHVhbExpbmsocFZCSW5mbykpCiAJCQl0ZW1wYXggPSB0ZW1wYXggPj4gMTsKIAotCQkvKiBpZigocFZCSW5mby0+VkJJbmZvJihTZXRDUlQyVG9MQ0QpKXx8KChwVkJJbmZvLT5UVkluZm8mU2V0WVBiUHJNb2RlNTI1cCl8fChwVkJJbmZvLT5UVkluZm8mU2V0WVBiUHJNb2RlNzUwcCkpKSB7ICovCisJCS8qIGlmKChwVkJJbmZvLT5WQkluZm8mKFNldENSVDJUb0xDRCkpIHx8CisJCSAgICAgICgocFZCSW5mby0+VFZJbmZvJlNldFlQYlByTW9kZTUyNXApIHx8CisJCSAgICAgIChwVkJJbmZvLT5UVkluZm8mU2V0WVBiUHJNb2RlNzUwcCkpKSB7ICovCiAJCWlmIChwVkJJbmZvLT5WQkluZm8gJiBTZXRDUlQyVG9MQ0QpIHsKIAkJCWlmICh0ZW1wYXggPiA4MDApCiAJCQkJdGVtcGF4IC09IDgwMDsKQEAgLTYxNzksMTIgKzY0NTIsMTcgQEAKIAkJLyoKIAkJaWYgKHBWQkluZm8tPlZCSW5mbyAmIChTZXRDUlQyVG9UViB8IFNldENSVDJUb0hpVmlzaW9uVFYpKSB7CiAJCQlpZiAocFZCSW5mby0+VkJUeXBlICYgVkJfWEdJMzAxTFYpIHsKLQkJCQlpZiAoIShwVkJJbmZvLT5UVkluZm8gJiAoU2V0WVBiUHJNb2RlNTI1cCB8IFNldFlQYlByTW9kZTc1MHAgfCBTZXRZUGJQck1vZGUxMDgwaSkpKSB7CisJCQkJaWYgKCEocFZCSW5mby0+VFZJbmZvICYKKwkJCQkgICAgICAoU2V0WVBiUHJNb2RlNTI1cCB8CisJCQkJICAgICAgIFNldFlQYlByTW9kZTc1MHAgfAorCQkJCSAgICAgICBTZXRZUGJQck1vZGUxMDgwaSkpKSB7CiAJCQkJCWlmIChwVkJJbmZvLT5WR0FIREUgPiA4MDApIHsKIAkJCQkJCWlmIChwVkJJbmZvLT5WR0FIREUgPT0gMTAyNCkKLQkJCQkJCQl0ZW1wYXggPSAodGVtcGF4ICogMjUgLyAzMikgLSAxOworCQkJCQkJCXRlbXBheCA9KHRlbXBheCAqIDI1IC8KKwkJCQkJCQkJIDMyKSAtIDE7CiAJCQkJCQllbHNlCi0JCQkJCQkJdGVtcGF4ID0gKHRlbXBheCAqIDIwIC8gMzIpIC0gMTsKKwkJCQkJCQl0ZW1wYXggPSAodGVtcGF4ICogMjAgLworCQkJCQkJCQkgIDMyKSAtIDE7CiAJCQkJCX0KIAkJCQl9CiAJCQl9IGVsc2UgewpAQCAtNjI5Nyw3ICs2NTc1LDggQEAKIAlpZiAodGVtcGJoICYgMHgyMCkgewogCQl0ZW1wID0gKHRlbXBibCA+PiA0KSAmIDB4MDI7CiAKLQkJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2Q0LCAweEI0LCB+MHgwMiwgdGVtcCk7IC8qIENSIEI0WzFdICovCisJCS8qIENSIEI0WzFdICovCisJCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UDNkNCwgMHhCNCwgfjB4MDIsIHRlbXApOwogCiAJfQogCkBAIC02MzI1LDcgKzY2MDQsOCBAQAogCWlmICh0ZW1wYmggJiAweDIwKSB7CiAJCXRlbXAgPSAodGVtcGJsID4+IDQpICYgMHgwMjsKIAotCQl4Z2lmYl9yZWdfYW5kX29yKHBWQkluZm8tPlAzZDQsIDB4QjQsIH4weDAyLCB0ZW1wKTsgLyogQ1IgQjRbMV0gKi8KKwkJLyogQ1IgQjRbMV0gKi8KKwkJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2Q0LCAweEI0LCB+MHgwMiwgdGVtcCk7CiAKIAl9CiAJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2Q0LCAweEI0LCB+dGVtcGJoMCwgdGVtcGJsMCk7CkBAIC02MzkwLDExICs2NjcwLDEzIEBACiAJaWYgKE1vZGVObyA8PSAweDEzKSB7CiAJCXhyZXMgPSBwVkJJbmZvLT5TdFJlc0luZm9bcmVzaW5kZXhdLkhUb3RhbDsKIAkJeXJlcyA9IHBWQkluZm8tPlN0UmVzSW5mb1tyZXNpbmRleF0uVlRvdGFsOwotCQltb2RlZmxhZyA9IHBWQkluZm8tPlNNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uU3RfTW9kZUZsYWc7IC8qIHNpK1N0X1Jlc0luZm8gKi8KKwkJLyogc2krU3RfUmVzSW5mbyAqLworCQltb2RlZmxhZyA9IHBWQkluZm8tPlNNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uU3RfTW9kZUZsYWc7CiAJfSBlbHNlIHsKIAkJeHJlcyA9IHBWQkluZm8tPk1vZGVSZXNJbmZvW3Jlc2luZGV4XS5IVG90YWw7IC8qIHhyZXMtPmF4ICovCiAJCXlyZXMgPSBwVkJJbmZvLT5Nb2RlUmVzSW5mb1tyZXNpbmRleF0uVlRvdGFsOyAvKiB5cmVzLT5ieCAqLwotCQltb2RlZmxhZyA9IHBWQkluZm8tPkVNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uRXh0X01vZGVGbGFnOyAvKiBzaStTdF9Nb2RlRmxhZyAqLworCQkvKiBzaStTdF9Nb2RlRmxhZyAqLworCQltb2RlZmxhZyA9IHBWQkluZm8tPkVNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uRXh0X01vZGVGbGFnOwogCX0KIAogCWlmICghKG1vZGVmbGFnICYgQ2hhcng4RG90KSkgewpAQCAtNjQxOSwxMiArNjcwMSwxMyBAQAogCQlyZXR1cm4gMDsKIAogCWlmIChNb2RlTm8gPiAweDEzKSB7Ci0JCWlmICgoeHJlcwotCQkJCSE9IChwVkJJbmZvLT5YRzIxX0xWRFNDYXBMaXN0W2x2ZHN0YWJsZWluZGV4XS5MVkRTSERFKSkKLQkJCQl8fCAoeXJlcwotCQkJCQkJIT0gKHBWQkluZm8tPlhHMjFfTFZEU0NhcExpc3RbbHZkc3RhYmxlaW5kZXhdLkxWRFNWREUpKSkgewotCQkJY29sb3JkZXB0aCA9IFhHSV9HZXRDb2xvckRlcHRoKE1vZGVObywgTW9kZUlkSW5kZXgsCi0JCQkJCXBWQkluZm8pOworCQlpZiAoKHhyZXMgIT0gKHBWQkluZm8tPlhHMjFfTFZEU0NhcExpc3RbbHZkc3RhYmxlaW5kZXhdLgorCQkJCUxWRFNIREUpKSB8fAorCQkgICAgKHlyZXMgIT0gKHBWQkluZm8tPlhHMjFfTFZEU0NhcExpc3RbbHZkc3RhYmxlaW5kZXhdLgorCQkJCUxWRFNWREUpKSkgeworCQkJY29sb3JkZXB0aCA9IFhHSV9HZXRDb2xvckRlcHRoKE1vZGVObywKKwkJCQkJCSAgICAgICBNb2RlSWRJbmRleCwKKwkJCQkJCSAgICAgICBwVkJJbmZvKTsKIAkJCWlmIChjb2xvcmRlcHRoID4gMikKIAkJCQlyZXR1cm4gMDsKIApAQCAtNjQzOSw4ICs2NzIyLDEwIEBACiAKIAl0ZW1wID0geGdpZmJfcmVnX2dldChwVkJJbmZvLT5QM2Q0LCAweDM3KTsgLyogRFswXSAxOiAxOGJpdCAqLwogCXRlbXAgPSAodGVtcCAmIDEpIDw8IDY7Ci0JeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2M0LCAweDA2LCB+MHg0MCwgdGVtcCk7IC8qIFNSMDZbNl0gMThiaXQgRGl0aGVyICovCi0JeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2M0LCAweDA5LCB+MHhjMCwgdGVtcCB8IDB4ODApOyAvKiBTUjA5WzddIGVuYWJsZSBGUCBvdXRwdXQsIFNSMDlbNl0gMTogc2lnbGUgMThiaXRzLCAwOiBkdWFsIDEyYml0cyAqLworCS8qIFNSMDZbNl0gMThiaXQgRGl0aGVyICovCisJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2M0LCAweDA2LCB+MHg0MCwgdGVtcCk7CisJLyogU1IwOVs3XSBlbmFibGUgRlAgb3V0cHV0LCBTUjA5WzZdIDE6IHNpZ2xlIDE4Yml0cywgMDogZHVhbCAxMmJpdHMgKi8KKwl4Z2lmYl9yZWdfYW5kX29yKHBWQkluZm8tPlAzYzQsIDB4MDksIH4weGMwLCB0ZW1wIHwgMHg4MCk7CiAKIH0KIApAQCAtNjQ0OCwxNSArNjczMywxOSBAQAogewogCXVuc2lnbmVkIGNoYXIgdGVtcDsKIAotCXRlbXAgPSB4Z2lmYl9yZWdfZ2V0KHBWQkluZm8tPlAzZDQsIDB4MzcpOyAvKiBEWzE6MF0gMDE6IDE4Yml0LCAwMDogZHVhbCAxMiwgMTA6IHNpbmdsZSAyNCAqLworCS8qIERbMTowXSAwMTogMThiaXQsIDAwOiBkdWFsIDEyLCAxMDogc2luZ2xlIDI0ICovCisJdGVtcCA9IHhnaWZiX3JlZ19nZXQocFZCSW5mby0+UDNkNCwgMHgzNyk7CiAJdGVtcCA9ICh0ZW1wICYgMykgPDwgNjsKLQl4Z2lmYl9yZWdfYW5kX29yKHBWQkluZm8tPlAzYzQsIDB4MDYsIH4weGMwLCB0ZW1wICYgMHg4MCk7IC8qIFNSMDZbN10wOiBkdWFsIDEyLzE6IHNpbmdsZSAyNCBbNl0gMThiaXQgRGl0aGVyIDw9IDAgaC93IHJlY29tbWVuZCAqLwotCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UDNjNCwgMHgwOSwgfjB4YzAsIHRlbXAgfCAweDgwKTsgLyogU1IwOVs3XSBlbmFibGUgRlAgb3V0cHV0LCBTUjA5WzZdIDE6IHNpZ2xlIDE4Yml0cywgMDogMjRiaXRzICovCisJLyogU1IwNls3XTA6IGR1YWwgMTIvMTogc2luZ2xlIDI0IFs2XSAxOGJpdCBEaXRoZXIgPD0gMCBoL3cgcmVjb21tZW5kICovCisJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2M0LCAweDA2LCB+MHhjMCwgdGVtcCAmIDB4ODApOworCS8qIFNSMDlbN10gZW5hYmxlIEZQIG91dHB1dCwgU1IwOVs2XSAxOiBzaWdsZSAxOGJpdHMsIDA6IDI0Yml0cyAqLworCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UDNjNCwgMHgwOSwgfjB4YzAsIHRlbXAgfCAweDgwKTsKIAogfQogCi1zdGF0aWMgdm9pZCBYR0lfU2V0WEcyMUxWRFNQYXJhKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCi0JCXN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKK3N0YXRpYyB2b2lkIFhHSV9TZXRYRzIxTFZEU1BhcmEodW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkJCXVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkJCXN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKIAl1bnNpZ25lZCBjaGFyIHRlbXAsIE1pc2NkYXRhOwogCXVuc2lnbmVkIHNob3J0IHhyZXMsIHlyZXMsIG1vZGVmbGFnLCByZXNpbmRleCwgbHZkc3RhYmxlaW5kZXg7CkBAIC02NDY2LDI4ICs2NzU1LDMzIEBACiAKIAlsdmRzdGFibGVpbmRleCA9IFhHSV9HZXRMVkRTT0VNVGFibGVJbmRleChwVkJJbmZvKTsKIAotCXRlbXAgPSAodW5zaWduZWQgY2hhcikgKChwVkJJbmZvLT5YRzIxX0xWRFNDYXBMaXN0W2x2ZHN0YWJsZWluZGV4XS5MVkRTX0NhcGFiaWxpdHkKLQkJCQkJJiAoTENEUG9sYXJpdHkgPDwgOCkpID4+IDgpOworCXRlbXAgPSAodW5zaWduZWQgY2hhcikgKChwVkJJbmZvLT5YRzIxX0xWRFNDYXBMaXN0W2x2ZHN0YWJsZWluZGV4XS4KKwkJCQkJCUxWRFNfQ2FwYWJpbGl0eSAmCisJCQkJKExDRFBvbGFyaXR5IDw8IDgpKSA+PiA4KTsKIAl0ZW1wICY9IExDRFBvbGFyaXR5OwogCU1pc2NkYXRhID0gKHVuc2lnbmVkIGNoYXIpIGluYihwVkJJbmZvLT5QM2NjKTsKIAogCW91dGIoKE1pc2NkYXRhICYgMHgzRikgfCB0ZW1wLCBwVkJJbmZvLT5QM2MyKTsKIAotCXRlbXAgPSAodW5zaWduZWQgY2hhcikgKHBWQkluZm8tPlhHMjFfTFZEU0NhcExpc3RbbHZkc3RhYmxlaW5kZXhdLkxWRFNfQ2FwYWJpbGl0eQotCQkJCQkmIExDRFBvbGFyaXR5KTsKLQl4Z2lmYl9yZWdfYW5kX29yKHBWQkluZm8tPlAzYzQsIDB4MzUsIH4weDgwLCB0ZW1wICYgMHg4MCk7IC8qIFNSMzVbN10gRlAgVlN5bmMgcG9sYXJpdHkgKi8KLQl4Z2lmYl9yZWdfYW5kX29yKHBWQkluZm8tPlAzYzQsIDB4MzAsIH4weDIwLCAodGVtcCAmIDB4NDApID4+IDEpOyAvKiBTUjMwWzVdIEZQIEhTeW5jIHBvbGFyaXR5ICovCisJdGVtcCA9ICh1bnNpZ25lZCBjaGFyKSAocFZCSW5mby0+WEcyMV9MVkRTQ2FwTGlzdFtsdmRzdGFibGVpbmRleF0uCisJCQkJCQlMVkRTX0NhcGFiaWxpdHkgJiBMQ0RQb2xhcml0eSk7CisJLyogU1IzNVs3XSBGUCBWU3luYyBwb2xhcml0eSAqLworCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UDNjNCwgMHgzNSwgfjB4ODAsIHRlbXAgJiAweDgwKTsKKwkvKiBTUjMwWzVdIEZQIEhTeW5jIHBvbGFyaXR5ICovCisJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2M0LCAweDMwLCB+MHgyMCwgKHRlbXAgJiAweDQwKSA+PiAxKTsKIAogCVhHSV9TZXRYRzIxRlBCaXRzKHBWQkluZm8pOwogCXJlc2luZGV4ID0gWEdJX0dldFJlc0luZm8oTW9kZU5vLCBNb2RlSWRJbmRleCwgcFZCSW5mbyk7CiAJaWYgKE1vZGVObyA8PSAweDEzKSB7CiAJCXhyZXMgPSBwVkJJbmZvLT5TdFJlc0luZm9bcmVzaW5kZXhdLkhUb3RhbDsKIAkJeXJlcyA9IHBWQkluZm8tPlN0UmVzSW5mb1tyZXNpbmRleF0uVlRvdGFsOwotCQltb2RlZmxhZyA9IHBWQkluZm8tPlNNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uU3RfTW9kZUZsYWc7IC8qIHNpK1N0X1Jlc0luZm8gKi8KKwkJLyogc2krU3RfUmVzSW5mbyAqLworCQltb2RlZmxhZyA9IHBWQkluZm8tPlNNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uU3RfTW9kZUZsYWc7CiAJfSBlbHNlIHsKIAkJeHJlcyA9IHBWQkluZm8tPk1vZGVSZXNJbmZvW3Jlc2luZGV4XS5IVG90YWw7IC8qIHhyZXMtPmF4ICovCiAJCXlyZXMgPSBwVkJJbmZvLT5Nb2RlUmVzSW5mb1tyZXNpbmRleF0uVlRvdGFsOyAvKiB5cmVzLT5ieCAqLwotCQltb2RlZmxhZyA9IHBWQkluZm8tPkVNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uRXh0X01vZGVGbGFnOyAvKiBzaStTdF9Nb2RlRmxhZyAqLworCQkvKiBzaStTdF9Nb2RlRmxhZyAqLworCQltb2RlZmxhZyA9IHBWQkluZm8tPkVNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uRXh0X01vZGVGbGFnOwogCX0KIAogCWlmICghKG1vZGVmbGFnICYgQ2hhcng4RG90KSkKQEAgLTY2MTksMTggKzY5MTMsMjEgQEAKIAogCQl4Z2lmYl9yZWdfYW5kX29yKHBWQkluZm8tPlAzYzQsIDB4MzEsIH4weDMwLCB2YWx1ZSk7CiAJCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNjNCwKLQkJCQkweDJCLAotCQkJCXBWQkluZm8tPlhHMjFfTFZEU0NhcExpc3RbbHZkc3RhYmxlaW5kZXhdLlZDTEtEYXRhMSk7CisJCQkgICAgICAweDJCLAorCQkJICAgICAgcFZCSW5mby0+WEcyMV9MVkRTQ2FwTGlzdFtsdmRzdGFibGVpbmRleF0uCisJCQkJCQlWQ0xLRGF0YTEpOwogCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsCi0JCQkJMHgyQywKLQkJCQlwVkJJbmZvLT5YRzIxX0xWRFNDYXBMaXN0W2x2ZHN0YWJsZWluZGV4XS5WQ0xLRGF0YTIpOworCQkJICAgICAgMHgyQywKKwkJCSAgICAgIHBWQkluZm8tPlhHMjFfTFZEU0NhcExpc3RbbHZkc3RhYmxlaW5kZXhdLgorCQkJCQkJVkNMS0RhdGEyKTsKIAkJdmFsdWUgKz0gMHgxMDsKIAl9CiAKIAlpZiAoIShtb2RlZmxhZyAmIENoYXJ4OERvdCkpIHsKIAkJaW5iKHBWQkluZm8tPlAzZGEpOyAvKiByZXNldCAzZGEgKi8KIAkJb3V0YigweDEzLCBwVkJJbmZvLT5QM2MwKTsgLyogc2V0IGluZGV4ICovCi0JCW91dGIoMHgwMCwgcFZCSW5mby0+UDNjMCk7IC8qIHNldCBkYXRhLCBwYW5uaW5nID0gMCwgc2hpZnQgbGVmdCAxIGRvdCovCisJCS8qIHNldCBkYXRhLCBwYW5uaW5nID0gMCwgc2hpZnQgbGVmdCAxIGRvdCovCisJCW91dGIoMHgwMCwgcFZCSW5mby0+UDNjMCk7CiAKIAkJaW5iKHBWQkluZm8tPlAzZGEpOyAvKiBFbmFibGUgQXR0cmlidXRlICovCiAJCW91dGIoMHgyMCwgcFZCSW5mby0+UDNjMCk7CkBAIC02NjQxLDggKzY5MzgsOSBAQAogfQogCiAvKiBubyBzaGFkb3cgY2FzZSAqLwotc3RhdGljIHZvaWQgWEdJX1NldFhHMjdMVkRTUGFyYSh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAotCQlzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCitzdGF0aWMgdm9pZCBYR0lfU2V0WEcyN0xWRFNQYXJhKHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCQl1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJCQlzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAJdW5zaWduZWQgY2hhciB0ZW1wLCBNaXNjZGF0YTsKIAl1bnNpZ25lZCBzaG9ydCB4cmVzLCB5cmVzLCBtb2RlZmxhZywgcmVzaW5kZXgsIGx2ZHN0YWJsZWluZGV4OwpAQCAtNjY1MSwyOCArNjk0OSwzMyBAQAogCXVuc2lnbmVkIHNob3J0IHZhbHVlOwogCiAJbHZkc3RhYmxlaW5kZXggPSBYR0lfR2V0TFZEU09FTVRhYmxlSW5kZXgocFZCSW5mbyk7Ci0JdGVtcCA9ICh1bnNpZ25lZCBjaGFyKSAoKHBWQkluZm8tPlhHMjFfTFZEU0NhcExpc3RbbHZkc3RhYmxlaW5kZXhdLkxWRFNfQ2FwYWJpbGl0eQotCQkJCQkmIChMQ0RQb2xhcml0eSA8PCA4KSkgPj4gOCk7CisJdGVtcCA9ICh1bnNpZ25lZCBjaGFyKSAoKHBWQkluZm8tPlhHMjFfTFZEU0NhcExpc3RbbHZkc3RhYmxlaW5kZXhdLgorCQkJCQlMVkRTX0NhcGFiaWxpdHkgJgorCQkJCShMQ0RQb2xhcml0eSA8PCA4KSkgPj4gOCk7CiAJdGVtcCAmPSBMQ0RQb2xhcml0eTsKIAlNaXNjZGF0YSA9ICh1bnNpZ25lZCBjaGFyKSBpbmIocFZCSW5mby0+UDNjYyk7CiAKIAlvdXRiKChNaXNjZGF0YSAmIDB4M0YpIHwgdGVtcCwgcFZCSW5mby0+UDNjMik7CiAKLQl0ZW1wID0gKHVuc2lnbmVkIGNoYXIpIChwVkJJbmZvLT5YRzIxX0xWRFNDYXBMaXN0W2x2ZHN0YWJsZWluZGV4XS5MVkRTX0NhcGFiaWxpdHkKLQkJCQkJJiBMQ0RQb2xhcml0eSk7Ci0JeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2M0LCAweDM1LCB+MHg4MCwgdGVtcCAmIDB4ODApOyAvKiBTUjM1WzddIEZQIFZTeW5jIHBvbGFyaXR5ICovCi0JeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2M0LCAweDMwLCB+MHgyMCwgKHRlbXAgJiAweDQwKSA+PiAxKTsgLyogU1IzMFs1XSBGUCBIU3luYyBwb2xhcml0eSAqLworCXRlbXAgPSAodW5zaWduZWQgY2hhcikgKHBWQkluZm8tPlhHMjFfTFZEU0NhcExpc3RbbHZkc3RhYmxlaW5kZXhdLgorCQkJCQlMVkRTX0NhcGFiaWxpdHkgJiBMQ0RQb2xhcml0eSk7CisJLyogU1IzNVs3XSBGUCBWU3luYyBwb2xhcml0eSAqLworCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UDNjNCwgMHgzNSwgfjB4ODAsIHRlbXAgJiAweDgwKTsKKwkvKiBTUjMwWzVdIEZQIEhTeW5jIHBvbGFyaXR5ICovCisJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QM2M0LCAweDMwLCB+MHgyMCwgKHRlbXAgJiAweDQwKSA+PiAxKTsKIAogCVhHSV9TZXRYRzI3RlBCaXRzKHBWQkluZm8pOwogCXJlc2luZGV4ID0gWEdJX0dldFJlc0luZm8oTW9kZU5vLCBNb2RlSWRJbmRleCwgcFZCSW5mbyk7CiAJaWYgKE1vZGVObyA8PSAweDEzKSB7CiAJCXhyZXMgPSBwVkJJbmZvLT5TdFJlc0luZm9bcmVzaW5kZXhdLkhUb3RhbDsKIAkJeXJlcyA9IHBWQkluZm8tPlN0UmVzSW5mb1tyZXNpbmRleF0uVlRvdGFsOwotCQltb2RlZmxhZyA9IHBWQkluZm8tPlNNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uU3RfTW9kZUZsYWc7IC8qIHNpK1N0X1Jlc0luZm8gKi8KKwkJLyogc2krU3RfUmVzSW5mbyAqLworCQltb2RlZmxhZyA9IHBWQkluZm8tPlNNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uU3RfTW9kZUZsYWc7CiAJfSBlbHNlIHsKIAkJeHJlcyA9IHBWQkluZm8tPk1vZGVSZXNJbmZvW3Jlc2luZGV4XS5IVG90YWw7IC8qIHhyZXMtPmF4ICovCiAJCXlyZXMgPSBwVkJJbmZvLT5Nb2RlUmVzSW5mb1tyZXNpbmRleF0uVlRvdGFsOyAvKiB5cmVzLT5ieCAqLwotCQltb2RlZmxhZyA9IHBWQkluZm8tPkVNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uRXh0X01vZGVGbGFnOyAvKiBzaStTdF9Nb2RlRmxhZyAqLworCQkvKiBzaStTdF9Nb2RlRmxhZyAqLworCQltb2RlZmxhZyA9IHBWQkluZm8tPkVNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uRXh0X01vZGVGbGFnOwogCX0KIAogCWlmICghKG1vZGVmbGFnICYgQ2hhcng4RG90KSkKQEAgLTY3MTMsNyArNzAxNiw4IEBACiAJaWYgKExWRFNWUlMgPiBMVkRTVlQpCiAJCUxWRFNWUlMgLT0gTFZEU1ZUOwogCi0JTFZEU1ZSRSA9IExWRFNWUlMgKyBwVkJJbmZvLT5YRzIxX0xWRFNDYXBMaXN0W2x2ZHN0YWJsZWluZGV4XS5MVkRTVlNZTkM7CisJTFZEU1ZSRSA9IExWRFNWUlMgKyBwVkJJbmZvLT5YRzIxX0xWRFNDYXBMaXN0W2x2ZHN0YWJsZWluZGV4XS4KKwkJCQkJTFZEU1ZTWU5DOwogCWlmIChMVkRTVlJFID4gTFZEU1ZUKQogCQlMVkRTVlJFIC09IExWRFNWVDsKIApAQCAtNjgwMywxOCArNzEwNywyMSBAQAogCiAJCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UDNjNCwgMHgzMSwgfjB4MzAsIHZhbHVlKTsKIAkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LAotCQkJCTB4MkIsCi0JCQkJcFZCSW5mby0+WEcyMV9MVkRTQ2FwTGlzdFtsdmRzdGFibGVpbmRleF0uVkNMS0RhdGExKTsKKwkJCSAgICAgIDB4MkIsCisJCQkgICAgICBwVkJJbmZvLT5YRzIxX0xWRFNDYXBMaXN0W2x2ZHN0YWJsZWluZGV4XS4KKwkJCQkJVkNMS0RhdGExKTsKIAkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QM2M0LAotCQkJCTB4MkMsCi0JCQkJcFZCSW5mby0+WEcyMV9MVkRTQ2FwTGlzdFtsdmRzdGFibGVpbmRleF0uVkNMS0RhdGEyKTsKKwkJCSAgICAgIDB4MkMsCisJCQkgICAgICBwVkJJbmZvLT5YRzIxX0xWRFNDYXBMaXN0W2x2ZHN0YWJsZWluZGV4XS4KKwkJCQkJVkNMS0RhdGEyKTsKIAkJdmFsdWUgKz0gMHgxMDsKIAl9CiAKIAlpZiAoIShtb2RlZmxhZyAmIENoYXJ4OERvdCkpIHsKIAkJaW5iKHBWQkluZm8tPlAzZGEpOyAvKiByZXNldCAzZGEgKi8KIAkJb3V0YigweDEzLCBwVkJJbmZvLT5QM2MwKTsgLyogc2V0IGluZGV4ICovCi0JCW91dGIoMHgwMCwgcFZCSW5mby0+UDNjMCk7IC8qIHNldCBkYXRhLCBwYW5uaW5nID0gMCwgc2hpZnQgbGVmdCAxIGRvdCovCisJCS8qIHNldCBkYXRhLCBwYW5uaW5nID0gMCwgc2hpZnQgbGVmdCAxIGRvdCovCisJCW91dGIoMHgwMCwgcFZCSW5mby0+UDNjMCk7CiAKIAkJaW5iKHBWQkluZm8tPlAzZGEpOyAvKiBFbmFibGUgQXR0cmlidXRlICovCiAJCW91dGIoMHgyMCwgcFZCSW5mby0+UDNjMCk7CkBAIC02OTA4LDE0ICs3MjE1LDE5IEBACiAKIAkvKgogCWlmIChDSDcwMTcpIHsKLQkJaWYgKCEocFZCSW5mby0+VkJJbmZvICYgKFNldENSVDJUb0xDRCB8IFNldENSVDJ0b0xDREEpKSB8fCAoWEdJX0Rpc2FibGVDaElTTENEKHBWQkluZm8pKSkgeworCQlpZiAoIShwVkJJbmZvLT5WQkluZm8gJgorCQkgICAgKFNldENSVDJUb0xDRCB8IFNldENSVDJ0b0xDREEpKSB8fAorCQkgICAgKFhHSV9EaXNhYmxlQ2hJU0xDRChwVkJJbmZvKSkpIHsKIAkJCWlmICghWEdJX0lzTENET04ocFZCSW5mbykpIHsKIAkJCQlpZiAoRElTQ0hBUkdFKSB7CiAJCQkJCXRlbXBieCA9IFhHSU5ld19HZXRDSDcwMDUoMHg2MSk7Ci0JCQkJCWlmICh0ZW1wYnggPCAweDAxKSAvLyBmaXJzdCB0aW1lIHdlIHBvd2VyIHVwCi0JCQkJCQlYR0lOZXdfU2V0Q0g3MDA1KDB4MDA2Nik7IC8vIGFuZCBkaXNhYmxlIHBvd2VyIHNlcXVlbmNlCisJCQkJCS8vIGZpcnN0IHRpbWUgd2UgcG93ZXIgdXAKKwkJCQkJaWYgKHRlbXBieCA8IDB4MDEpCisJCQkJCQkvLyBhbmQgZGlzYWJsZSBwb3dlciBzZXF1ZW5jZQorCQkJCQkJWEdJTmV3X1NldENINzAwNSgweDAwNjYpOwogCQkJCQllbHNlCi0JCQkJCQlYR0lOZXdfU2V0Q0g3MDA1KDB4NWY2Nik7IC8vIGxlYXZlIFZERCBvbiAtIGRpc2FibGUgcG93ZXIKKwkJCQkJCS8vIGxlYXZlIFZERCBvbiAtIGRpc2FibGUgcG93ZXIKKwkJCQkJCVhHSU5ld19TZXRDSDcwMDUoMHg1ZjY2KTsKIAkJCQl9CiAJCQl9CiAJCX0KQEAgLTY5MjUsMjkgKzcyMzcsMzUgQEAKIAlpZiAocFZCSW5mby0+VkJUeXBlICYgKFZCX1hHSTMwMUIgfCBWQl9YR0kzMDJCIHwgVkJfWEdJMzAxTFYKIAkJCXwgVkJfWEdJMzAyTFYgfCBWQl9YR0kzMDFDKSkgewogCQl0ZW1wYWggPSAweDNGOwotCQlpZiAoIShwVkJJbmZvLT5WQkluZm8gJiAoRGlzYWJsZUNSVDJEaXNwbGF5IHwgU2V0U2ltdVNjYW5Nb2RlKSkpIHsKKwkJaWYgKCEocFZCSW5mby0+VkJJbmZvICYKKwkJICAgIChEaXNhYmxlQ1JUMkRpc3BsYXkgfCBTZXRTaW11U2Nhbk1vZGUpKSkgewogCQkJaWYgKHBWQkluZm8tPlZCSW5mbyAmIFNldENSVDJUb0xDREEpIHsKIAkJCQlpZiAocFZCSW5mby0+VkJJbmZvICYgU2V0Q1JUMlRvRHVhbEVkZ2UpIHsKIAkJCQkJdGVtcGFoID0gMHg3RjsgLyogRGlzYWJsZSBDaGFubmVsIEEgKi8KIAkJCQkJaWYgKCEocFZCSW5mby0+VkJJbmZvICYgU2V0Q1JUMlRvTENEQSkpCi0JCQkJCQl0ZW1wYWggPSAweEJGOyAvKiBEaXNhYmxlIENoYW5uZWwgQiAqLworCQkJCQkJLyogRGlzYWJsZSBDaGFubmVsIEIgKi8KKwkJCQkJCXRlbXBhaCA9IDB4QkY7CiAKIAkJCQkJaWYgKHBWQkluZm8tPlNldEZsYWcgJiBEaXNhYmxlQ2hCKQotCQkJCQkJdGVtcGFoICY9IDB4QkY7IC8qIGZvcmNlIHRvIGRpc2FibGUgQ2Fobm5lbCAqLworCQkJCQkJLyogZm9yY2UgdG8gZGlzYWJsZSBDYWhubmVsICovCisJCQkJCQl0ZW1wYWggJj0gMHhCRjsKIAogCQkJCQlpZiAocFZCSW5mby0+U2V0RmxhZyAmIERpc2FibGVDaEEpCi0JCQkJCQl0ZW1wYWggJj0gMHg3RjsgLyogRm9yY2UgdG8gZGlzYWJsZSBDaGFubmVsIEIgKi8KKwkJCQkJCS8qIEZvcmNlIHRvIGRpc2FibGUgQ2hhbm5lbCBCICovCisJCQkJCQl0ZW1wYWggJj0gMHg3RjsKIAkJCQl9CiAJCQl9CiAJCX0KIAotCQl4Z2lmYl9yZWdfYW5kKHBWQkluZm8tPlBhcnQ0UG9ydCwgMHgxRiwgdGVtcGFoKTsgLyogZGlzYWJsZSBwYXJ0NF8xZiAqLworCQkvKiBkaXNhYmxlIHBhcnQ0XzFmICovCisJCXhnaWZiX3JlZ19hbmQocFZCSW5mby0+UGFydDRQb3J0LCAweDFGLCB0ZW1wYWgpOwogCiAJCWlmIChwVkJJbmZvLT5WQlR5cGUgJiAoVkJfWEdJMzAyTFYgfCBWQl9YR0kzMDFDKSkgewogCQkJaWYgKCgocFZCSW5mby0+VkJJbmZvICYgKFNldENSVDJUb0xDRCB8IFNldENSVDJUb0xDREEpKSkKIAkJCQkJfHwgKFhHSV9EaXNhYmxlQ2hJU0xDRChwVkJJbmZvKSkKIAkJCQkJfHwgKFhHSV9Jc0xDRE9OKHBWQkluZm8pKSkKLQkJCQl4Z2lmYl9yZWdfb3IocFZCSW5mby0+UGFydDRQb3J0LCAweDMwLCAweDgwKTsgLyogTFZEUyBEcml2ZXIgcG93ZXIgZG93biAqLworCQkJCS8qIExWRFMgRHJpdmVyIHBvd2VyIGRvd24gKi8KKwkJCQl4Z2lmYl9yZWdfb3IocFZCSW5mby0+UGFydDRQb3J0LCAweDMwLCAweDgwKTsKIAkJfQogCiAJCWlmICgocFZCSW5mby0+U2V0RmxhZyAmIERpc2FibGVDaEEpIHx8IChwVkJJbmZvLT5WQkluZm8KQEAgLTY5NjEsMzggKzcyNzksNDggQEAKIAkJaWYgKHBWQkluZm8tPlZCSW5mbyAmIFNldENSVDJUb0xDREEpIHsKIAkJCWlmICgocFZCSW5mby0+U2V0RmxhZyAmIERpc2FibGVDaEEpIHx8IChwVkJJbmZvLT5WQkluZm8KIAkJCQkJJiBTZXRDUlQyVG9MQ0RBKSkKLQkJCQl4Z2lmYl9yZWdfYW5kKHBWQkluZm8tPlBhcnQxUG9ydCwgMHgxZSwgMHhkZik7IC8qIFBvd2VyIGRvd24gKi8KKwkJCQkvKiBQb3dlciBkb3duICovCisJCQkJeGdpZmJfcmVnX2FuZChwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MWUsIDB4ZGYpOwogCQl9CiAKLQkJeGdpZmJfcmVnX2FuZChwVkJJbmZvLT5QM2M0LCAweDMyLCAweGRmKTsgLyogZGlzYWJsZSBUViBhcyBwcmltYXJ5IFZHQSBzd2FwICovCisJCS8qIGRpc2FibGUgVFYgYXMgcHJpbWFyeSBWR0Egc3dhcCAqLworCQl4Z2lmYl9yZWdfYW5kKHBWQkluZm8tPlAzYzQsIDB4MzIsIDB4ZGYpOwogCiAJCWlmICgocFZCSW5mby0+VkJJbmZvICYgKFNldFNpbXVTY2FuTW9kZSB8IFNldENSVDJUb0R1YWxFZGdlKSkpCiAJCQl4Z2lmYl9yZWdfYW5kKHBWQkluZm8tPlBhcnQyUG9ydCwgMHgwMCwgMHhkZik7CiAKLQkJaWYgKChwVkJJbmZvLT5TZXRGbGFnICYgRGlzYWJsZUNoQikgfHwgKHBWQkluZm8tPlZCSW5mbwotCQkJCSYgKERpc2FibGVDUlQyRGlzcGxheSB8IFNldFNpbXVTY2FuTW9kZSkpCi0JCQkJfHwgKCghKHBWQkluZm8tPlZCSW5mbyAmIFNldENSVDJUb0xDREEpKQotCQkJCQkJJiYgKHBWQkluZm8tPlZCSW5mbwotCQkJCQkJCQkmIChTZXRDUlQyVG9SQU1EQUMKLQkJCQkJCQkJCQl8IFNldENSVDJUb0xDRAotCQkJCQkJCQkJCXwgU2V0Q1JUMlRvVFYpKSkpCi0JCQl4Z2lmYl9yZWdfb3IocFZCSW5mby0+UGFydDFQb3J0LCAweDAwLCAweDgwKTsgLyogQlNjcmVlbk9mZj0xICovCisJCWlmICgocFZCSW5mby0+U2V0RmxhZyAmIERpc2FibGVDaEIpIHx8CisJCSAgICAocFZCSW5mby0+VkJJbmZvICYKKwkJCShEaXNhYmxlQ1JUMkRpc3BsYXkgfCBTZXRTaW11U2Nhbk1vZGUpKSB8fAorCQkgICAgKCghKHBWQkluZm8tPlZCSW5mbyAmIFNldENSVDJUb0xDREEpKSAmJgorCQkgICAgKHBWQkluZm8tPlZCSW5mbyAmCisJCQkoU2V0Q1JUMlRvUkFNREFDIHwgU2V0Q1JUMlRvTENEIHwgU2V0Q1JUMlRvVFYpKSkpCisJCQkvKiBCU2NyZWVuT2ZmPTEgKi8KKwkJCXhnaWZiX3JlZ19vcihwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MDAsIDB4ODApOwogCi0JCWlmICgocFZCSW5mby0+U2V0RmxhZyAmIERpc2FibGVDaEIpIHx8IChwVkJJbmZvLT5WQkluZm8KLQkJCQkmIChEaXNhYmxlQ1JUMkRpc3BsYXkgfCBTZXRTaW11U2Nhbk1vZGUpKQotCQkJCXx8ICghKHBWQkluZm8tPlZCSW5mbyAmIFNldENSVDJUb0xDREEpKQotCQkJCXx8IChwVkJJbmZvLT5WQkluZm8gJiAoU2V0Q1JUMlRvUkFNREFDCi0JCQkJCQl8IFNldENSVDJUb0xDRCB8IFNldENSVDJUb1RWKSkpIHsKLQkJCXRlbXBhaCA9IHhnaWZiX3JlZ19nZXQocFZCSW5mby0+UGFydDFQb3J0LCAweDAwKTsgLyogc2F2ZSBQYXJ0MSBpbmRleCAwICovCi0JCQl4Z2lmYl9yZWdfb3IocFZCSW5mby0+UGFydDFQb3J0LCAweDAwLCAweDEwKTsgLyogQlREQUMgPSAxLCBhdm9pZCBWQiByZXNldCAqLwotCQkJeGdpZmJfcmVnX2FuZChwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MUUsIDB4REYpOyAvKiBkaXNhYmxlIENSVDIgKi8KLQkJCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UGFydDFQb3J0LCAweDAwLCB0ZW1wYWgpOyAvKiByZXN0b3JlIFBhcnQxIGluZGV4IDAgKi8KKwkJaWYgKChwVkJJbmZvLT5TZXRGbGFnICYgRGlzYWJsZUNoQikgfHwKKwkJICAgIChwVkJJbmZvLT5WQkluZm8gJgorCQkJKERpc2FibGVDUlQyRGlzcGxheSB8IFNldFNpbXVTY2FuTW9kZSkpIHx8CisJCSAgICAoIShwVkJJbmZvLT5WQkluZm8gJiBTZXRDUlQyVG9MQ0RBKSkgfHwKKwkJICAgIChwVkJJbmZvLT5WQkluZm8gJgorCQkJKFNldENSVDJUb1JBTURBQyB8IFNldENSVDJUb0xDRCB8IFNldENSVDJUb1RWKSkpIHsKKwkJCS8qIHNhdmUgUGFydDEgaW5kZXggMCAqLworCQkJdGVtcGFoID0geGdpZmJfcmVnX2dldChwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MDApOworCQkJLyogQlREQUMgPSAxLCBhdm9pZCBWQiByZXNldCAqLworCQkJeGdpZmJfcmVnX29yKHBWQkluZm8tPlBhcnQxUG9ydCwgMHgwMCwgMHgxMCk7CisJCQkvKiBkaXNhYmxlIENSVDIgKi8KKwkJCXhnaWZiX3JlZ19hbmQocFZCSW5mby0+UGFydDFQb3J0LCAweDFFLCAweERGKTsKKwkJCS8qIHJlc3RvcmUgUGFydDEgaW5kZXggMCAqLworCQkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MDAsIHRlbXBhaCk7CiAJCX0KIAl9IGVsc2UgeyAvKiB7MzAxfSAqLwogCQlpZiAocFZCSW5mby0+VkJJbmZvICYgKFNldENSVDJUb0xDRCB8IFNldENSVDJUb1RWKSkgewotCQkJeGdpZmJfcmVnX29yKHBWQkluZm8tPlBhcnQxUG9ydCwgMHgwMCwgMHg4MCk7IC8qIEJTY3JlZW5PZmY9MSAqLwotCQkJeGdpZmJfcmVnX2FuZChwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MUUsIDB4REYpOyAvKiBEaXNhYmxlIENSVDIgKi8KLQkJCXhnaWZiX3JlZ19hbmQocFZCSW5mby0+UDNjNCwgMHgzMiwgMHhERik7IC8qIERpc2FibGUgVFYgYXNQcmltYXJ5IFZHQSBzd2FwICovCisJCQkvKiBCU2NyZWVuT2ZmPTEgKi8KKwkJCXhnaWZiX3JlZ19vcihwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MDAsIDB4ODApOworCQkJLyogRGlzYWJsZSBDUlQyICovCisJCQl4Z2lmYl9yZWdfYW5kKHBWQkluZm8tPlBhcnQxUG9ydCwgMHgxRSwgMHhERik7CisJCQkvKiBEaXNhYmxlIFRWIGFzUHJpbWFyeSBWR0Egc3dhcCAqLworCQkJeGdpZmJfcmVnX2FuZChwVkJJbmZvLT5QM2M0LCAweDMyLCAweERGKTsKIAkJfQogCiAJCWlmIChwVkJJbmZvLT5WQkluZm8gJiAoRGlzYWJsZUNSVDJEaXNwbGF5IHwgU2V0Q1JUMlRvTENEQQpAQCAtNzExNiwxMiArNzQ0NCwxOSBAQAogCQkJLyoKIAkJCWlmIChwVkJJbmZvLT5WQkluZm8gJiBTZXRDUlQyVG9SQU1EQUMpCiAJCQkJdGVtcGJsID0gQ1JUMkRlbGF5MTsJLy8gR2V0IENSVDIgRGVsYXkKLQkJCWlmIChwVkJJbmZvLT5WQlR5cGUgJiAoVkJfWEdJMzAxQiB8IFZCX1hHSTMwMkIgfCBWQl9YR0kzMDFMViB8IFZCX1hHSTMwMkxWIHwgVkJfWEdJMzAxQykpCisJCQlpZiAocFZCSW5mby0+VkJUeXBlICYKKwkJCSAgICAoVkJfWEdJMzAxQiB8CisJCQkgICAgIFZCX1hHSTMwMkIgfAorCQkJICAgICBWQl9YR0kzMDFMViB8CisJCQkgICAgIFZCX1hHSTMwMkxWIHwKKwkJCSAgICAgVkJfWEdJMzAxQykpCiAJCQkJdGVtcGJsID0gQ1JUMkRlbGF5MjsKIAkJCSovCiAJCQlpZiAocFZCSW5mby0+VkJJbmZvICYgKFNldENSVDJUb0xDRCB8IFNldENSVDJUb0xDREEpKSB7Ci0JCQkJaW5kZXggPSBYR0lfR2V0TENEQ2FwUHRyKHBWQkluZm8pOyAvKiBHZXQgTENEIERlbGF5ICovCi0JCQkJdGVtcGJoID0gcFZCSW5mby0+TENEQ2FwTGlzdFtpbmRleF0uTENEX0RlbGF5Q29tcGVuc2F0aW9uOworCQkJCS8qIEdldCBMQ0QgRGVsYXkgKi8KKwkJCQlpbmRleCA9IFhHSV9HZXRMQ0RDYXBQdHIocFZCSW5mbyk7CisJCQkJdGVtcGJoID0gcFZCSW5mby0+TENEQ2FwTGlzdFtpbmRleF0uCisJCQkJCQlMQ0RfRGVsYXlDb21wZW5zYXRpb247CiAKIAkJCQlpZiAoIShwVkJJbmZvLT5WQkluZm8gJiBTZXRDUlQyVG9MQ0RBKSkKIAkJCQkJdGVtcGJsID0gdGVtcGJoOwpAQCAtNzE0Nyw5ICs3NDgyLDEwIEBACiAJCXRlbXBibCA9IDA7CiAJCXRlbXBiaCA9IDA7CiAJCWlmIChwVkJJbmZvLT5WQkluZm8gJiBTZXRDUlQyVG9MQ0QpIHsKLQkJCXRlbXBhaAotCQkJCQk9IHBWQkluZm8tPkxDRENhcExpc3RbWEdJX0dldExDRENhcFB0cigKLQkJCQkJCQlwVkJJbmZvKV0uTENEX0RlbGF5Q29tcGVuc2F0aW9uOyAvKiAvIEdldCBMQ0QgRGVsYXkgKi8KKwkJCS8qIC8gR2V0IExDRCBEZWxheSAqLworCQkJdGVtcGFoID0gcFZCSW5mby0+TENEQ2FwTGlzdFsKKwkJCQkJWEdJX0dldExDRENhcFB0cihwVkJJbmZvKV0uCisJCQkJCQlMQ0RfRGVsYXlDb21wZW5zYXRpb247CiAJCQl0ZW1wYWggJj0gMHgwZjsKIAkJCXRlbXBhaCA9IHRlbXBhaCA8PCA0OwogCQkJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MkQsIDB4MGYsCkBAIC03MTU4LDcgKzc0OTQsOCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgWEdJX1NldExDRENhcF9BKHVuc2lnbmVkIHNob3J0IHRlbXBjeCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQorc3RhdGljIHZvaWQgWEdJX1NldExDRENhcF9BKHVuc2lnbmVkIHNob3J0IHRlbXBjeCwKKwkJCSAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAJdW5zaWduZWQgc2hvcnQgdGVtcDsKIApAQCAtNzE2Niw3ICs3NTAzLDggQEAKIAogCWlmICh0ZW1wICYgTENEUkdCMThCaXQpIHsKIAkJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MTksIDB4MEYsCi0JCQkJKHVuc2lnbmVkIHNob3J0KSAoMHgyMCB8ICh0ZW1wY3ggJiAweDAwQzApKSk7IC8qIEVuYWJsZSBEaXRoZXIgKi8KKwkJCQkvKiBFbmFibGUgRGl0aGVyICovCisJCQkJKHVuc2lnbmVkIHNob3J0KSAoMHgyMCB8ICh0ZW1wY3ggJiAweDAwQzApKSk7CiAJCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UGFydDFQb3J0LCAweDFBLCAweDdGLCAweDgwKTsKIAl9IGVsc2UgewogCQl4Z2lmYl9yZWdfYW5kX29yKHBWQkluZm8tPlBhcnQxUG9ydCwgMHgxOSwgMHgwRiwKQEAgLTcxNzYsMTAgKzc1MTQsMTcgQEAKIAogCS8qCiAJaWYgKHRlbXBjeCAmIEVuYWJsZUxDRDI0YnBwKSB7CS8vIDI0Yml0cwotCQl4Z2lmYl9yZWdfYW5kX29yKHBWQkluZm8tPlBhcnQxUG9ydCwgMHgxOSwgMHgwRiwgKHVuc2lnbmVkIHNob3J0KSgweDMwIHwgKHRlbXBjeCYweDAwQzApKSk7CisJCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UGFydDFQb3J0LAorCQkJCSAweDE5LAorCQkJCSAweDBGLAorCQkJCSAodW5zaWduZWQgc2hvcnQpKDB4MzAgfCAodGVtcGN4JjB4MDBDMCkpKTsKIAkJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MUEsIDB4N0YsIDB4MDApOwogCX0gZWxzZSB7Ci0JCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UGFydDFQb3J0LCAweDE5LCAweDBGLCAodW5zaWduZWQgc2hvcnQpKDB4MjAgfCAodGVtcGN4JjB4MDBDMCkpKTsgLy8gRW5hYmxlIERpdGhlcgorCQl4Z2lmYl9yZWdfYW5kX29yKHBWQkluZm8tPlBhcnQxUG9ydCwKKwkJCQkgMHgxOSwKKwkJCQkgMHgwRiwKKwkJCQkgLy8gRW5hYmxlIERpdGhlcgorCQkJCSAodW5zaWduZWQgc2hvcnQpKDB4MjAgfCAodGVtcGN4JjB4MDBDMCkpKTsKIAkJeGdpZmJfcmVnX2FuZF9vcihwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MUEsIDB4N0YsIDB4ODApOwogCX0KIAkqLwpAQCAtNzE5MSw3ICs3NTM2LDggQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXN0YXRpYyB2b2lkIFhHSV9TZXRMQ0RDYXBfQih1bnNpZ25lZCBzaG9ydCB0ZW1wY3gsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKK3N0YXRpYyB2b2lkIFhHSV9TZXRMQ0RDYXBfQih1bnNpZ25lZCBzaG9ydCB0ZW1wY3gsCisJCQkgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogCWlmICh0ZW1wY3ggJiBFbmFibGVMQ0QyNGJwcCkgLyogMjRiaXRzICovCiAJCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UGFydDJQb3J0LCAweDFBLCAweEUwLApAQCAtNzIwOSw3ICs3NTU1LDggQEAKIAogCWluZGV4ID0gWEdJX0dldExDRENhcFB0cihwVkJJbmZvKTsKIAotCXhnaWZiX3JlZ19hbmQocFZCSW5mby0+UGFydDRQb3J0LCAweDMwLCAweDhGKTsgLyogZGlzYWJsZSBkb3duIHNwZWN0cnVtIERbNF0gKi8KKwkvKiBkaXNhYmxlIGRvd24gc3BlY3RydW0gRFs0XSAqLworCXhnaWZiX3JlZ19hbmQocFZCSW5mby0+UGFydDRQb3J0LCAweDMwLCAweDhGKTsKIAlYR0lfTG9uZ1dhaXQocFZCSW5mbyk7CiAJeGdpZmJfcmVnX29yKHBWQkluZm8tPlBhcnQ0UG9ydCwgMHgzMCwgMHgyMCk7IC8qIHJlc2V0IHNwZWN0cnVtICovCiAJWEdJX0xvbmdXYWl0KHBWQkluZm8pOwpAQCAtNzIzMiw5ICs3NTc5LDE0IEBACiAKIAl0ZW1wY3ggPSBwVkJJbmZvLT5MQ0RDYXBMaXN0W1hHSV9HZXRMQ0RDYXBQdHIocFZCSW5mbyldLkxDRF9DYXBhYmlsaXR5OwogCi0JaWYgKHBWQkluZm8tPlZCVHlwZSAmIChWQl9YR0kzMDFCIHwgVkJfWEdJMzAyQiB8IFZCX1hHSTMwMUxWCi0JCQl8IFZCX1hHSTMwMkxWIHwgVkJfWEdJMzAxQykpIHsKLQkJaWYgKHBWQkluZm8tPlZCVHlwZSAmIChWQl9YR0kzMDFMViB8IFZCX1hHSTMwMkxWIHwgVkJfWEdJMzAxQykpIHsgLyogMzAxTFYvMzAyTFYgb25seSAqLworCWlmIChwVkJJbmZvLT5WQlR5cGUgJgorCSAgICAoVkJfWEdJMzAxQiB8CisJICAgICBWQl9YR0kzMDJCIHwKKwkgICAgIFZCX1hHSTMwMUxWIHwKKwkgICAgIFZCX1hHSTMwMkxWIHwKKwkgICAgIFZCX1hHSTMwMUMpKSB7IC8qIDMwMUxWLzMwMkxWIG9ubHkgKi8KKwkJaWYgKHBWQkluZm8tPlZCVHlwZSAmCisJCSAgICAoVkJfWEdJMzAxTFYgfCBWQl9YR0kzMDJMViB8IFZCX1hHSTMwMUMpKSB7CiAJCQkvKiBTZXQgMzAxTFYgQ2FwYWJpbGl0eSAqLwogCQkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QYXJ0NFBvcnQsIDB4MjQsCiAJCQkJCSh1bnNpZ25lZCBjaGFyKSAodGVtcGN4ICYgMHgxRikpOwpAQCAtNzI2OSw4ICs3NjIxLDkgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6IFNldCBUViBDdXN0b21pemVkIFBhcmFtLiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1zdGF0aWMgdm9pZCBYR0lfU2V0QW50aUZsaWNrZXIodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKLQkJc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQorc3RhdGljIHZvaWQgWEdJX1NldEFudGlGbGlja2VyKHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJCSAgICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAJdW5zaWduZWQgc2hvcnQgdGVtcGJ4LCBpbmRleDsKIApAQCAtNzI5NCw4ICs3NjQ3LDkgQEAKIAl4Z2lmYl9yZWdfYW5kX29yKHBWQkluZm8tPlBhcnQyUG9ydCwgMHgwQSwgMHg4RiwgdGVtcGFoKTsKIH0KIAotc3RhdGljIHZvaWQgWEdJX1NldEVkZ2VFbmhhbmNlKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCi0JCXN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKK3N0YXRpYyB2b2lkIFhHSV9TZXRFZGdlRW5oYW5jZSh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sCisJCQkgICAgICAgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCQkgICAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogCXVuc2lnbmVkIHNob3J0IHRlbXBieCwgaW5kZXg7CiAKQEAgLTczODgsMTAgKzc3NDIsMTEgQEAKIAl9CiAKIAlpZiAoTW9kZU5vIDw9IDB4MTMpCi0JCXRlbXBhbCA9IHBWQkluZm8tPlNNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uVkJfU3RUVllGaWx0ZXJJbmRleDsKKwkJdGVtcGFsID0gcFZCSW5mby0+U01vZGVJRFRhYmxlW01vZGVJZEluZGV4XS4KKwkJCQlWQl9TdFRWWUZpbHRlckluZGV4OwogCWVsc2UKLQkJdGVtcGFsCi0JCQkJPSBwVkJJbmZvLT5FTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLlZCX0V4dFRWWUZpbHRlckluZGV4OworCQl0ZW1wYWwgPSBwVkJJbmZvLT5FTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLgorCQkJCVZCX0V4dFRWWUZpbHRlckluZGV4OwogCiAJaWYgKHRlbXBjbCA9PSAwKQogCQlpbmRleCA9IHRlbXBhbCAqIDQ7CkBAIC03NDI0LDggKzc3NzksOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogQ3VzdG9taXplZCBQYXJhbS4gZm9yIDMwMSAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1zdGF0aWMgdm9pZCBYR0lfT0VNMzEwU2V0dGluZyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAotCQlzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCitzdGF0aWMgdm9pZCBYR0lfT0VNMzEwU2V0dGluZyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sCisJCQkgICAgICB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJCSAgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKIAlpZiAocFZCSW5mby0+U2V0RmxhZyAmIFdpbjl4RE9TTW9kZSkKIAkJcmV0dXJuOwpAQCAtNzQ2Miw3ICs3ODE4LDggQEAKIAogCXVuc2lnbmVkIGNoYXIgdGVtcGFoOwogCi0JLyogeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MDMsIDB4MDApOyAvLyBmaXggd3JpdGUgcGFydDEgaW5kZXggMCBCVERSQU0gYml0IEJ1ZyAqLworCS8qIC8vIGZpeCB3cml0ZSBwYXJ0MSBpbmRleCAwIEJURFJBTSBiaXQgQnVnCisJICogeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MDMsIDB4MDApOyAqLwogCXRlbXBhaCA9IDA7CiAJaWYgKCEocFZCSW5mby0+VkJJbmZvICYgRGlzYWJsZUNSVDJEaXNwbGF5KSkgewogCQl0ZW1wYWggPSB4Z2lmYl9yZWdfZ2V0KHBWQkluZm8tPlBhcnQxUG9ydCwgMHgwMCk7CkBAIC03NDc2LDcgKzc4MzMsOCBAQAogCQkJCXRlbXBjbCA9IHBWQkluZm8tPk1vZGVUeXBlOwogCQkJCXRlbXBjbCAtPSBNb2RlVkdBOwogCQkJCWlmICh0ZW1wY2wgPj0gMCkgewotCQkJCQl0ZW1wYWggPSAoMHgwMDggPj4gdGVtcGNsKTsgLyogQlQgQ29sb3IgKi8KKwkJCQkJLyogQlQgQ29sb3IgKi8KKwkJCQkJdGVtcGFoID0gKDB4MDA4ID4+IHRlbXBjbCk7CiAJCQkJCWlmICh0ZW1wYWggPT0gMCkKIAkJCQkJCXRlbXBhaCA9IDE7CiAJCQkJCXRlbXBhaCB8PSAweDA0MDsKQEAgLTc1MjUsOCArNzg4Myw4IEBACiAKIAkJaWYgKHBWQkluZm8tPlZCSW5mbyAmIChTZXRDUlQyVG9SQU1EQUMgfCBTZXRDUlQyVG9UVgogCQkJCXwgU2V0Q1JUMlRvTENEIHwgU2V0Q1JUMlRvTENEQSkpIHsKLQkJCWlmICgocFZCSW5mby0+VkJJbmZvICYgU2V0Q1JUMlRvTENEQSkKLQkJCQkJJiYgKCEocFZCSW5mby0+VkJJbmZvICYgU2V0U2ltdVNjYW5Nb2RlKSkpIHsKKwkJCWlmICgocFZCSW5mby0+VkJJbmZvICYgU2V0Q1JUMlRvTENEQSkgJiYKKwkJCSAgICAoIShwVkJJbmZvLT5WQkluZm8gJiBTZXRTaW11U2Nhbk1vZGUpKSkgewogCQkJCXRlbXBibCAmPSAweGY3OwogCQkJCXRlbXBhaCB8PSAweDAxOwogCQkJCXhnaWZiX3JlZ19hbmRfb3IocFZCSW5mby0+UGFydDFQb3J0LCAweDJlLApAQCAtNzUzNywyMyArNzg5NSwyNiBAQAogCQkJCQl0ZW1wYWggfD0gMHgwMTsKIAkJCQl9CiAKLQkJCQlpZiAocFZCSW5mby0+VkJJbmZvICYgKFNldENSVDJUb1JBTURBQwotCQkJCQkJfCBTZXRDUlQyVG9UViB8IFNldENSVDJUb0xDRCkpIHsKKwkJCQlpZiAocFZCSW5mby0+VkJJbmZvICYKKwkJCQkgICAgKFNldENSVDJUb1JBTURBQyB8CisJCQkJICAgICBTZXRDUlQyVG9UViB8CisJCQkJICAgICBTZXRDUlQyVG9MQ0QpKSB7CiAJCQkJCXRlbXBibCAmPSAweGY4OwogCQkJCQl0ZW1wYWggPSAweDAxOwogCiAJCQkJCWlmICghKHBWQkluZm8tPlZCSW5mbyAmIFNldEluU2xhdmVNb2RlKSkKIAkJCQkJCXRlbXBhaCB8PSAweDAyOwogCi0JCQkJCWlmICghKHBWQkluZm8tPlZCSW5mbyAmIFNldENSVDJUb1JBTURBQykpIHsKKwkJCQkJaWYgKCEocFZCSW5mby0+VkJJbmZvICYKKwkJCQkJICAgICAgU2V0Q1JUMlRvUkFNREFDKSkgewogCQkJCQkJdGVtcGFoID0gdGVtcGFoIF4gMHgwNTsKLQkJCQkJCWlmICghKHBWQkluZm8tPlZCSW5mbwotCQkJCQkJCQkmIFNldENSVDJUb0xDRCkpCisJCQkJCQlpZiAoIShwVkJJbmZvLT5WQkluZm8gJgorCQkJCQkJICAgICAgU2V0Q1JUMlRvTENEKSkKIAkJCQkJCQl0ZW1wYWggPSB0ZW1wYWggXiAweDAxOwogCQkJCQl9CiAKLQkJCQkJaWYgKCEocFZCSW5mby0+VkJJbmZvCi0JCQkJCQkJJiBTZXRDUlQyVG9EdWFsRWRnZSkpCisJCQkJCWlmICghKHBWQkluZm8tPlZCSW5mbyAmCisJCQkJCSAgICAgIFNldENSVDJUb0R1YWxFZGdlKSkKIAkJCQkJCXRlbXBhaCB8PSAweDA4OwogCQkJCQl4Z2lmYl9yZWdfYW5kX29yKHBWQkluZm8tPlBhcnQxUG9ydCwKIAkJCQkJCQkweDJlLCB0ZW1wYmwsIHRlbXBhaCk7CkBAIC03NTc4LDcgKzc5MzksOCBAQAogCQl0ZW1wYWggfD0gMHgwODA7CiAKIAkJaWYgKHBWQkluZm8tPlZCSW5mbyAmIFNldENSVDJUb1RWKSB7Ci0JCQkvKiBpZiAoIShwVkJJbmZvLT5UVkluZm8gJiAoU2V0WVBiUHJNb2RlNTI1cCB8IFNldFlQYlByTW9kZTc1MHApKSkgeyAqLworCQkJLyogaWYgKCEocFZCSW5mby0+VFZJbmZvICYKKwkJCQkgKFNldFlQYlByTW9kZTUyNXAgfCBTZXRZUGJQck1vZGU3NTBwKSkpIHsgKi8KIAkJCXRlbXBhaCB8PSAweDAyMDsKIAkJCWlmIChNb2RlTm8gPiAweDEzKSB7CiAJCQkJaWYgKHBWQkluZm8tPlZCSW5mbyAmIERyaXZlck1vZGUpCkBAIC03NTk0LDcgKzc5NTYsOSBAQAogCQkJdGVtcGFoIHw9IDB4NDA7CiAKIAkJaWYgKHBWQkluZm8tPlZCSW5mbyAmIFNldENSVDJUb1RWKSB7Ci0JCQkvKiBpZiAoKCEocFZCSW5mby0+VkJJbmZvICYgU2V0Q1JUMlRvSGlWaXNpb25UVikpICYmICghKHBWQkluZm8tPlRWSW5mbyAmIChTZXRZUGJQck1vZGU1MjVwIHwgU2V0WVBiUHJNb2RlNzUwcCkpKSkgeyAqLworCQkJLyogaWYgKCghKHBWQkluZm8tPlZCSW5mbyAmIFNldENSVDJUb0hpVmlzaW9uVFYpKSAmJgorCQkJICAgICAgICghKHBWQkluZm8tPlRWSW5mbyAmCisJCQkJICAoU2V0WVBiUHJNb2RlNTI1cCB8IFNldFlQYlByTW9kZTc1MHApKSkpIHsgKi8KIAkJCWlmIChwVkJJbmZvLT5UVkluZm8gJiBSUExMRElWMlhPKQogCQkJCXRlbXBhaCB8PSAweDQwOwogCQkJLyogfSAqLwpAQCAtNzgwNSwxMyArODE2OSwxMiBAQAogCQkJCWlmIChwVkJJbmZvLT5WQlR5cGUgJiAoVkJfWEdJMzAxQiB8IFZCX1hHSTMwMkIKIAkJCQkJCXwgVkJfWEdJMzAxTFYgfCBWQl9YR0kzMDJMVgogCQkJCQkJfCBWQl9YR0kzMDFDKSkKLQkJCQkJdGVtcAotCQkJCQkJCT0gTENEQVJlZnJlc2hJbmRleFtwVkJJbmZvLT5MQ0RSZXNJbmZvCi0JCQkJCQkJCQkmIDB4MEZdOyAvKiAzMDFiICovCisJCQkJCS8qIDMwMWIgKi8KKwkJCQkJdGVtcCA9IExDREFSZWZyZXNoSW5kZXhbCisJCQkJCQlwVkJJbmZvLT5MQ0RSZXNJbmZvICYgMHgwRl07CiAJCQkJZWxzZQotCQkJCQl0ZW1wCi0JCQkJCQkJPSBMQ0RSZWZyZXNoSW5kZXhbcFZCSW5mby0+TENEUmVzSW5mbwotCQkJCQkJCQkJJiAweDBGXTsKKwkJCQkJdGVtcCA9IExDRFJlZnJlc2hJbmRleFsKKwkJCQkJCXBWQkluZm8tPkxDRFJlc0luZm8gJiAweDBGXTsKIAogCQkJCWlmIChpbmRleCA+IHRlbXApCiAJCQkJCWluZGV4ID0gdGVtcDsKQEAgLTc4MjUsMzUgKzgxODgsMzQgQEAKIAlNb2RlTm8gPSBwVkJJbmZvLT5SZWZJbmRleFtSZWZyZXNoUmF0ZVRhYmxlSW5kZXhdLk1vZGVJRDsKIAlpZiAocFhHSUhXREUtPmpDaGlwVHlwZSA+PSBYRzIwKSB7IC8qIGZvciBYRzIwLCBYRzIxLCBYRzI3ICovCiAJCS8qCi0JCWlmIChwVkJJbmZvLT5SZWZJbmRleFtSZWZyZXNoUmF0ZVRhYmxlSW5kZXhdLkV4dF9JbmZvRmxhZyAmIFhHMnhOb3RTdXBwb3J0KSB7CisJCWlmIChwVkJJbmZvLT5SZWZJbmRleFtSZWZyZXNoUmF0ZVRhYmxlSW5kZXhdLkV4dF9JbmZvRmxhZyAmCisJCSAgICBYRzJ4Tm90U3VwcG9ydCkgewogCQkJaW5kZXgrKzsKIAkJfQogCQkqLwotCQlpZiAoKHBWQkluZm8tPlJlZkluZGV4W1JlZnJlc2hSYXRlVGFibGVJbmRleF0uWFJlcyA9PSA4MDApCi0JCQkJJiYgKHBWQkluZm8tPlJlZkluZGV4W1JlZnJlc2hSYXRlVGFibGVJbmRleF0uWVJlcwotCQkJCQkJPT0gNjAwKSkgeworCQlpZiAoKHBWQkluZm8tPlJlZkluZGV4W1JlZnJlc2hSYXRlVGFibGVJbmRleF0uWFJlcyA9PSA4MDApICYmCisJCSAgICAocFZCSW5mby0+UmVmSW5kZXhbUmVmcmVzaFJhdGVUYWJsZUluZGV4XS5ZUmVzID09IDYwMCkpIHsKIAkJCWluZGV4Kys7CiAJCX0KLQkJLyogQWxhbiAxMC8xOS8yMDA3OyBkbyB0aGUgc2ltaWxhciBhZGp1c3RtZW50IGxpa2UgWEdJU2VhcmNoQ1JUMVJhdGUoKSAqLwotCQlpZiAoKHBWQkluZm8tPlJlZkluZGV4W1JlZnJlc2hSYXRlVGFibGVJbmRleF0uWFJlcyA9PSAxMDI0KQotCQkJCSYmIChwVkJJbmZvLT5SZWZJbmRleFtSZWZyZXNoUmF0ZVRhYmxlSW5kZXhdLllSZXMKLQkJCQkJCT09IDc2OCkpIHsKKwkJLyogQWxhbiAxMC8xOS8yMDA3OworCQkgKiBkbyB0aGUgc2ltaWxhciBhZGp1c3RtZW50IGxpa2UgWEdJU2VhcmNoQ1JUMVJhdGUoKSAqLworCQlpZiAoKHBWQkluZm8tPlJlZkluZGV4W1JlZnJlc2hSYXRlVGFibGVJbmRleF0uWFJlcyA9PSAxMDI0KSAmJgorCQkgICAgKHBWQkluZm8tPlJlZkluZGV4W1JlZnJlc2hSYXRlVGFibGVJbmRleF0uWVJlcyA9PSA3NjgpKSB7CiAJCQlpbmRleCsrOwogCQl9Ci0JCWlmICgocFZCSW5mby0+UmVmSW5kZXhbUmVmcmVzaFJhdGVUYWJsZUluZGV4XS5YUmVzID09IDEyODApCi0JCQkJJiYgKHBWQkluZm8tPlJlZkluZGV4W1JlZnJlc2hSYXRlVGFibGVJbmRleF0uWVJlcwotCQkJCQkJPT0gMTAyNCkpIHsKKwkJaWYgKChwVkJJbmZvLT5SZWZJbmRleFtSZWZyZXNoUmF0ZVRhYmxlSW5kZXhdLlhSZXMgPT0gMTI4MCkgJiYKKwkJICAgIChwVkJJbmZvLT5SZWZJbmRleFtSZWZyZXNoUmF0ZVRhYmxlSW5kZXhdLllSZXMgPT0gMTAyNCkpIHsKIAkJCWluZGV4Kys7CiAJCX0KIAl9CiAKIAlpID0gMDsKIAlkbyB7Ci0JCWlmIChwVkJJbmZvLT5SZWZJbmRleFtSZWZyZXNoUmF0ZVRhYmxlSW5kZXggKyBpXS5Nb2RlSUQKLQkJCQkhPSBNb2RlTm8pCisJCWlmIChwVkJJbmZvLT5SZWZJbmRleFtSZWZyZXNoUmF0ZVRhYmxlSW5kZXggKyBpXS4KKwkJCU1vZGVJRCAhPSBNb2RlTm8pCiAJCQlicmVhazsKLQkJdGVtcAotCQkJCT0gcFZCSW5mby0+UmVmSW5kZXhbUmVmcmVzaFJhdGVUYWJsZUluZGV4ICsgaV0uRXh0X0luZm9GbGFnOworCQl0ZW1wID0gcFZCSW5mby0+UmVmSW5kZXhbUmVmcmVzaFJhdGVUYWJsZUluZGV4ICsgaV0uCisJCQlFeHRfSW5mb0ZsYWc7CiAJCXRlbXAgJj0gTW9kZUluZm9GbGFnOwogCQlpZiAodGVtcCA8IHBWQkluZm8tPk1vZGVUeXBlKQogCQkJYnJlYWs7CkBAIC03ODYzLDkgKzgyMjUsOCBAQAogCX0gd2hpbGUgKGluZGV4ICE9IDB4RkZGRik7CiAJaWYgKCEocFZCSW5mby0+VkJJbmZvICYgU2V0Q1JUMlRvUkFNREFDKSkgewogCQlpZiAocFZCSW5mby0+VkJJbmZvICYgU2V0SW5TbGF2ZU1vZGUpIHsKLQkJCXRlbXAKLQkJCQkJPSBwVkJJbmZvLT5SZWZJbmRleFtSZWZyZXNoUmF0ZVRhYmxlSW5kZXgKLQkJCQkJCQkrIGkgLSAxXS5FeHRfSW5mb0ZsYWc7CisJCQl0ZW1wID0gcFZCSW5mby0+UmVmSW5kZXhbUmVmcmVzaFJhdGVUYWJsZUluZGV4ICsgaSAtIDFdLgorCQkJCUV4dF9JbmZvRmxhZzsKIAkJCWlmICh0ZW1wICYgSW50ZXJsYWNlTW9kZSkKIAkJCQlpKys7CiAJCX0KQEAgLTgwNTUsMTEgKzg0MTYsMTQgQEAKIAkJCXwgVkJfWEdJMzAyTFYgfCBWQl9YR0kzMDFDKSkgewogCQlpZiAoIShwVkJJbmZvLT5TZXRGbGFnICYgRGlzYWJsZUNoQSkpIHsKIAkJCWlmIChwVkJJbmZvLT5TZXRGbGFnICYgRW5hYmxlQ2hBKSB7Ci0JCQkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MUUsIDB4MjApOyAvKiBQb3dlciBvbiAqLworCQkJCS8qIFBvd2VyIG9uICovCisJCQkJeGdpZmJfcmVnX3NldChwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MUUsIDB4MjApOwogCQkJfSBlbHNlIHsKLQkJCQlpZiAocFZCSW5mby0+VkJJbmZvICYgU2V0Q1JUMlRvRHVhbEVkZ2UpIHsgLyogU2V0Q1JUMlRvTENEQSApICovCisJCQkJLyogU2V0Q1JUMlRvTENEQSApICovCisJCQkJaWYgKHBWQkluZm8tPlZCSW5mbyAmIFNldENSVDJUb0R1YWxFZGdlKSB7CisJCQkJCS8qIFBvd2VyIG9uICovCiAJCQkJCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UGFydDFQb3J0LAotCQkJCQkJCTB4MUUsIDB4MjApOyAvKiBQb3dlciBvbiAqLworCQkJCQkJCTB4MUUsIDB4MjApOwogCQkJCX0KIAkJCX0KIAkJfQpAQCAtODA3Miw3ICs4NDM2LDggQEAKIAkJCQkJCXBWQkluZm8tPlAzYzQsIDB4MzIpOwogCQkJCXRlbXBhaCAmPSAweERGOwogCQkJCWlmIChwVkJJbmZvLT5WQkluZm8gJiBTZXRJblNsYXZlTW9kZSkgewotCQkJCQlpZiAoIShwVkJJbmZvLT5WQkluZm8gJiBTZXRDUlQyVG9SQU1EQUMpKQorCQkJCQlpZiAoIShwVkJJbmZvLT5WQkluZm8gJgorCQkJCQkgICAgICBTZXRDUlQyVG9SQU1EQUMpKQogCQkJCQkJdGVtcGFoIHw9IDB4MjA7CiAJCQkJfQogCQkJCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNjNCwgMHgzMiwgdGVtcGFoKTsKQEAgLTgwODIsMTAgKzg0NDcsMTEgQEAKIAkJCQkJCXBWQkluZm8tPlBhcnQxUG9ydCwgMHgyRSk7CiAKIAkJCQlpZiAoISh0ZW1wYWggJiAweDgwKSkKKwkJCQkJLyogQlZCRE9FTkFCTEUgPSAxICovCiAJCQkJCXhnaWZiX3JlZ19vcihwVkJJbmZvLT5QYXJ0MVBvcnQsCi0JCQkJCQkJMHgyRSwgMHg4MCk7IC8qIEJWQkRPRU5BQkxFID0gMSAqLwotCi0JCQkJeGdpZmJfcmVnX2FuZChwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MDAsIDB4N0YpOyAvKiBCU2NyZWVuT0ZGID0gMCAqLworCQkJCQkJCTB4MkUsIDB4ODApOworCQkJCS8qIEJTY3JlZW5PRkYgPSAwICovCisJCQkJeGdpZmJfcmVnX2FuZChwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MDAsIDB4N0YpOwogCQkJfQogCQl9CiAKQEAgLTgwOTUsMTUgKzg0NjEsMTcgQEAKIAkJCQkJMHgyMCk7IC8qIHNoYW1wb28gMDEyOSAqLwogCQkJaWYgKHBWQkluZm8tPlZCVHlwZSAmIChWQl9YR0kzMDJMViB8IFZCX1hHSTMwMUMpKSB7CiAJCQkJaWYgKCFYR0lfRGlzYWJsZUNoSVNMQ0QocFZCSW5mbykpIHsKLQkJCQkJaWYgKFhHSV9FbmFibGVDaElTTENEKHBWQkluZm8pCi0JCQkJCQkJfHwgKHBWQkluZm8tPlZCSW5mbwotCQkJCQkJCQkJJiAoU2V0Q1JUMlRvTENECi0JCQkJCQkJCQkJCXwgU2V0Q1JUMlRvTENEQSkpKQorCQkJCQlpZiAoWEdJX0VuYWJsZUNoSVNMQ0QocFZCSW5mbykgfHwKKwkJCQkJICAgIChwVkJJbmZvLT5WQkluZm8gJgorCQkJCQkgICAgKFNldENSVDJUb0xDRCB8IFNldENSVDJUb0xDREEpKSkKKwkJCQkJCS8qIExWRFMgUExMIHBvd2VyIG9uICovCiAJCQkJCQl4Z2lmYl9yZWdfYW5kKAotCQkJCQkJCQlwVkJJbmZvLT5QYXJ0NFBvcnQsCi0JCQkJCQkJCTB4MkEsIDB4N0YpOyAvKiBMVkRTIFBMTCBwb3dlciBvbiAqLworCQkJCQkJCXBWQkluZm8tPlBhcnQ0UG9ydCwKKwkJCQkJCQkweDJBLAorCQkJCQkJCTB4N0YpOwogCQkJCX0KLQkJCQl4Z2lmYl9yZWdfYW5kKHBWQkluZm8tPlBhcnQ0UG9ydCwgMHgzMCwgMHg3Rik7IC8qIExWRFMgRHJpdmVyIHBvd2VyIG9uICovCisJCQkJLyogTFZEUyBEcml2ZXIgcG93ZXIgb24gKi8KKwkJCQl4Z2lmYl9yZWdfYW5kKHBWQkluZm8tPlBhcnQ0UG9ydCwgMHgzMCwgMHg3Rik7CiAJCQl9CiAJCX0KIApAQCAtODExNCwzMyArODQ4MiwzNSBAQAogCiAJCQlpZiAoIShwVkJJbmZvLT5WQkluZm8gJiBTZXRTaW11U2Nhbk1vZGUpKSB7CiAJCQkJaWYgKHBWQkluZm8tPlZCSW5mbyAmIFNldENSVDJUb0xDREEpIHsKLQkJCQkJaWYgKHBWQkluZm8tPlZCSW5mbyAmIFNldENSVDJUb0R1YWxFZGdlKSB7CisJCQkJCWlmIChwVkJJbmZvLT5WQkluZm8gJgorCQkJCQkgICAgU2V0Q1JUMlRvRHVhbEVkZ2UpIHsKIAkJCQkJCXRlbXBhaCA9IHRlbXBhaCAmIDB4NDA7Ci0JCQkJCQlpZiAocFZCSW5mby0+VkJJbmZvCi0JCQkJCQkJCSYgU2V0Q1JUMlRvTENEQSkKKwkJCQkJCWlmIChwVkJJbmZvLT5WQkluZm8gJgorCQkJCQkJICAgIFNldENSVDJUb0xDREEpCiAJCQkJCQkJdGVtcGFoID0gdGVtcGFoIF4gMHhDMDsKIAotCQkJCQkJaWYgKHBWQkluZm8tPlNldEZsYWcKLQkJCQkJCQkJJiBEaXNhYmxlQ2hCKQorCQkJCQkJaWYgKHBWQkluZm8tPlNldEZsYWcgJgorCQkJCQkJICAgIERpc2FibGVDaEIpCiAJCQkJCQkJdGVtcGFoICY9IDB4QkY7CiAKLQkJCQkJCWlmIChwVkJJbmZvLT5TZXRGbGFnCi0JCQkJCQkJCSYgRGlzYWJsZUNoQSkKKwkJCQkJCWlmIChwVkJJbmZvLT5TZXRGbGFnICYKKwkJCQkJCSAgICBEaXNhYmxlQ2hBKQogCQkJCQkJCXRlbXBhaCAmPSAweDdGOwogCi0JCQkJCQlpZiAocFZCSW5mby0+U2V0RmxhZwotCQkJCQkJCQkmIEVuYWJsZUNoQikKKwkJCQkJCWlmIChwVkJJbmZvLT5TZXRGbGFnICYKKwkJCQkJCSAgICBFbmFibGVDaEIpCiAJCQkJCQkJdGVtcGFoIHw9IDB4NDA7CiAKLQkJCQkJCWlmIChwVkJJbmZvLT5TZXRGbGFnCi0JCQkJCQkJCSYgRW5hYmxlQ2hBKQorCQkJCQkJaWYgKHBWQkluZm8tPlNldEZsYWcgJgorCQkJCQkJICAgIEVuYWJsZUNoQSkKIAkJCQkJCQl0ZW1wYWggfD0gMHg4MDsKIAkJCQkJfQogCQkJCX0KIAkJCX0KIAkJfQogCi0JCXhnaWZiX3JlZ19vcihwVkJJbmZvLT5QYXJ0NFBvcnQsIDB4MUYsIHRlbXBhaCk7IC8qIEVuYWJsZVBhcnQ0XzFGICovCisJCS8qIEVuYWJsZVBhcnQ0XzFGICovCisJCXhnaWZiX3JlZ19vcihwVkJJbmZvLT5QYXJ0NFBvcnQsIDB4MUYsIHRlbXBhaCk7CiAKIAkJaWYgKHBWQkluZm8tPlNldEZsYWcgJiBXaW45eERPU01vZGUpIHsKIAkJCVhHSV9EaXNwbGF5T24oSHdEZXZpY2VFeHRlbnNpb24sIHBWQkluZm8pOwpAQCAtODE1MCw3ICs4NTIwLDggQEAKIAkJaWYgKCEocFZCSW5mby0+U2V0RmxhZyAmIERpc2FibGVDaEEpKSB7CiAJCQlYR0lfVkJMb25nV2FpdChwVkJJbmZvKTsKIAkJCWlmICghKHBWQkluZm8tPlNldEZsYWcgJiBHYXRpbmdDUlQpKSB7Ci0JCQkJWEdJX0Rpc2FibGVHYXRpbmdDUlQoSHdEZXZpY2VFeHRlbnNpb24sIHBWQkluZm8pOworCQkJCVhHSV9EaXNhYmxlR2F0aW5nQ1JUKEh3RGV2aWNlRXh0ZW5zaW9uLAorCQkJCQkJICAgICBwVkJJbmZvKTsKIAkJCQlYR0lfRGlzcGxheU9uKEh3RGV2aWNlRXh0ZW5zaW9uLCBwVkJJbmZvKTsKIAkJCQlYR0lfVkJMb25nV2FpdChwVkJJbmZvKTsKIAkJCX0KQEAgLTgxNTksMTIgKzg1MzAsMTQgQEAKIAllbHNlIHsgLyogTFZEUyAqLwogCQlpZiAocFZCSW5mby0+VkJJbmZvICYgKFNldENSVDJUb1RWIHwgU2V0Q1JUMlRvTENECiAJCQkJfCBTZXRDUlQyVG9MQ0RBKSkKLQkJCXhnaWZiX3JlZ19vcihwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MUUsIDB4MjApOyAvKiBlbmFibGUgQ1JUMiAqLworCQkJLyogZW5hYmxlIENSVDIgKi8KKwkJCXhnaWZiX3JlZ19vcihwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MUUsIDB4MjApOwogCiAJCXRlbXBhaCA9ICh1bnNpZ25lZCBjaGFyKSB4Z2lmYl9yZWdfZ2V0KHBWQkluZm8tPlBhcnQxUG9ydCwKIAkJCQkweDJFKTsKIAkJaWYgKCEodGVtcGFoICYgMHg4MCkpCi0JCQl4Z2lmYl9yZWdfb3IocFZCSW5mby0+UGFydDFQb3J0LCAweDJFLCAweDgwKTsgLyogQlZCRE9FTkFCTEUgPSAxICovCisJCQkvKiBCVkJET0VOQUJMRSA9IDEgKi8KKwkJCXhnaWZiX3JlZ19vcihwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MkUsIDB4ODApOwogCiAJCXhnaWZiX3JlZ19hbmQocFZCSW5mby0+UGFydDFQb3J0LCAweDAwLCAweDdGKTsKIAkJWEdJX0Rpc3BsYXlPbihId0RldmljZUV4dGVuc2lvbiwgcFZCSW5mbyk7CkBAIC04MjIyLDggKzg1OTUsOCBAQAogCQkJCVJlZnJlc2hSYXRlVGFibGVJbmRleCwgcFZCSW5mbyk7CiAJfQogCi0JaWYgKChId0RldmljZUV4dGVuc2lvbi0+akNoaXBUeXBlID49IFhHMjApCi0JCQkmJiAoSHdEZXZpY2VFeHRlbnNpb24tPmpDaGlwVHlwZSA8IFhHMjcpKSB7IC8qIGZpeCBIL1cgRENMSy8yIGJ1ZyAqLworCWlmICgoSHdEZXZpY2VFeHRlbnNpb24tPmpDaGlwVHlwZSA+PSBYRzIwKSAmJgorCSAgICAoSHdEZXZpY2VFeHRlbnNpb24tPmpDaGlwVHlwZSA8IFhHMjcpKSB7IC8qIGZpeCBIL1cgRENMSy8yIGJ1ZyAqLwogCQlpZiAoKE1vZGVObyA9PSAweDAwKSB8IChNb2RlTm8gPT0gMHgwMSkpIHsKIAkJCXhnaWZiX3JlZ19zZXQocFZCSW5mby0+UDNjNCwgMHgyQiwgMHg0RSk7CiAJCQl4Z2lmYl9yZWdfc2V0KHBWQkluZm8tPlAzYzQsIDB4MkMsIDB4RTkpOwpAQCAtODI0Miw4ICs4NjE1LDEwIEBACiAJCXRlbXAgPSB4Z2lmYl9yZWdfZ2V0KHBWQkluZm8tPlAzZDQsIDB4MzgpOwogCQlpZiAodGVtcCAmIDB4QTApIHsKIAotCQkJLyogeGdpZmJfcmVnX2FuZChwVkJJbmZvLT5QM2Q0LCAweDRBLCB+MHgyMCk7ICovLyogRW5hYmxlIHdyaXRlIEdQSU9GICovCi0JCQkvKiB4Z2lmYl9yZWdfYW5kKHBWQkluZm8tPlAzZDQsIDB4NDgsIH4weDIwKTsgKi8vKiBQLiBEV04gKi8KKwkJCS8qIEVuYWJsZSB3cml0ZSBHUElPRiAqLworCQkJLyogeGdpZmJfcmVnX2FuZChwVkJJbmZvLT5QM2Q0LCAweDRBLCB+MHgyMCk7ICovCisJCQkvKiBQLiBEV04gKi8KKwkJCS8qIHhnaWZiX3JlZ19hbmQocFZCSW5mby0+UDNkNCwgMHg0OCwgfjB4MjApOyAqLwogCQkJLyogWEcyMSBDUlQxIFRpbWluZyAqLwogCQkJaWYgKEh3RGV2aWNlRXh0ZW5zaW9uLT5qQ2hpcFR5cGUgPT0gWEcyNykKIAkJCQlYR0lfU2V0WEcyN0NSVEMoTW9kZU5vLCBNb2RlSWRJbmRleCwKQEAgLTgyNzAsNyArODY0NSw4IEBACiAJCQkJCVhHSV9TZXRYRzIxTFZEU1BhcmEoTW9kZU5vLAogCQkJCQkJCU1vZGVJZEluZGV4LCBwVkJJbmZvKTsKIAkJCX0KLQkJCS8qIHhnaWZiX3JlZ19vcihwVkJJbmZvLT5QM2Q0LCAweDQ4LCAweDIwKTsgKi8vKiBQLiBPTiAqLworCQkJLyogUC4gT04gKi8KKwkJCS8qIHhnaWZiX3JlZ19vcihwVkJJbmZvLT5QM2Q0LCAweDQ4LCAweDIwKTsgKi8KIAkJfQogCX0KIApAQCAtODI4OSw3ICs4NjY1LDggQEAKIAkJCXVuc2lnbmVkIHNob3J0IE1vZGVObykKIHsKIAl1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleDsKLQkvKiB1bnNpZ25lZCBjaGFyICpwVkJJbmZvLT5GQkFkZHIgPSBId0RldmljZUV4dGVuc2lvbi0+cGpWaWRlb01lbW9yeUFkZHJlc3M7ICovCisJLyogdW5zaWduZWQgY2hhciAqcFZCSW5mby0+RkJBZGRyID0KKwkJCQlId0RldmljZUV4dGVuc2lvbi0+cGpWaWRlb01lbW9yeUFkZHJlc3M7ICovCiAJc3RydWN0IHZiX2RldmljZV9pbmZvIFZCSU5GOwogCXN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyA9ICZWQklORjsKIAlwVkJJbmZvLT5ST01BZGRyID0gSHdEZXZpY2VFeHRlbnNpb24tPnBqVmlydHVhbFJvbUJhc2U7CkBAIC04MzM0LDcgKzg3MTEsOCBAQAogCXBWQkluZm8tPlBhcnQ0UG9ydCA9IHBWQkluZm8tPkJhc2VBZGRyICsgWEdJX0NSVDJfUE9SVF8xNDsKIAlwVkJJbmZvLT5QYXJ0NVBvcnQgPSBwVkJJbmZvLT5CYXNlQWRkciArIFhHSV9DUlQyX1BPUlRfMTQgKyAyOwogCi0JaWYgKEh3RGV2aWNlRXh0ZW5zaW9uLT5qQ2hpcFR5cGUgPT0gWEcyMSkgeyAvKiBmb3IgeDg2IExpbnV4LCBYRzIxIExWRFMgKi8KKwkvKiBmb3IgeDg2IExpbnV4LCBYRzIxIExWRFMgKi8KKwlpZiAoSHdEZXZpY2VFeHRlbnNpb24tPmpDaGlwVHlwZSA9PSBYRzIxKSB7CiAJCWlmICgoeGdpZmJfcmVnX2dldChwVkJJbmZvLT5QM2Q0LCAweDM4KSAmIDB4RTApID09IDB4QzApCiAJCQlwVkJJbmZvLT5JRl9ERUZfTFZEUyA9IDE7CiAJfQpAQCAtODQxNywxNyArODc5NSwxNyBAQAogCX0gLyogIVhHMjAgKi8KIAllbHNlIHsKIAkJaWYgKHBWQkluZm8tPklGX0RFRl9MVkRTID09IDEpCi0JCQlpZiAoIVhHSV9YRzIxQ2hlY2tMVkRTTW9kZShNb2RlTm8sIE1vZGVJZEluZGV4LCBwVkJJbmZvKSkKKwkJCWlmICghWEdJX1hHMjFDaGVja0xWRFNNb2RlKE1vZGVObywKKwkJCQkJCSAgIE1vZGVJZEluZGV4LAorCQkJCQkJICAgcFZCSW5mbykpCiAJCQkJcmV0dXJuIDA7CiAKIAkJaWYgKE1vZGVObyA8PSAweDEzKSB7Ci0JCQlwVkJJbmZvLT5Nb2RlVHlwZQotCQkJCQk9IHBWQkluZm8tPlNNb2RlSURUYWJsZVtNb2RlSWRJbmRleF0uU3RfTW9kZUZsYWcKLQkJCQkJCQkmIE1vZGVJbmZvRmxhZzsKKwkJCXBWQkluZm8tPk1vZGVUeXBlID0gcFZCSW5mby0+U01vZGVJRFRhYmxlW01vZGVJZEluZGV4XS4KKwkJCQkJCVN0X01vZGVGbGFnICYgTW9kZUluZm9GbGFnOwogCQl9IGVsc2UgewotCQkJcFZCSW5mby0+TW9kZVR5cGUKLQkJCQkJPSBwVkJJbmZvLT5FTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLkV4dF9Nb2RlRmxhZwotCQkJCQkJCSYgTW9kZUluZm9GbGFnOworCQkJcFZCSW5mby0+TW9kZVR5cGUgPSBwVkJJbmZvLT5FTW9kZUlEVGFibGVbTW9kZUlkSW5kZXhdLgorCQkJCQkJRXh0X01vZGVGbGFnICYgTW9kZUluZm9GbGFnOwogCQl9CiAKIAkJcFZCSW5mby0+U2V0RmxhZyA9IDA7CkBAIC04NDU1LDcgKzg4MzMsMTAgQEAKIAlwVkJJbmZvLT5Nb2RlVHlwZSA9IG1vZGVmbGFnJk1vZGVJbmZvRmxhZzsKIAlwVkJJbmZvLT5TZXRGbGFnID0gMHgwMDsKIAlwVkJJbmZvLT5WQkluZm8gPSBEaXNhYmxlQ1JUMkRpc3BsYXk7Ci0JdGVtcCA9IFhHSU5ld19DaGVja01lbW9yeVNpemUoSHdEZXZpY2VFeHRlbnNpb24sIE1vZGVObywgTW9kZUlkSW5kZXgsIHBWQkluZm8pOworCXRlbXAgPSBYR0lOZXdfQ2hlY2tNZW1vcnlTaXplKEh3RGV2aWNlRXh0ZW5zaW9uLAorCQkJCSAgICAgIE1vZGVObywKKwkJCQkgICAgICBNb2RlSWRJbmRleCwKKwkJCQkgICAgICBwVkJJbmZvKTsKIAogCWlmICh0ZW1wID09IDApCiAJCXJldHVybiAoMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfc2V0bW9kZS5oIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX3NldG1vZGUuaAppbmRleCA3YTJlNTY0Li4xYmQ4NjY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfc2V0bW9kZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9zZXRtb2RlLmgKQEAgLTEsMzggKzEsNzEgQEAKLSNpZm5kZWYgIF9WQlNFVE1PREVfCi0jZGVmaW5lICBfVkJTRVRNT0RFXworI2lmbmRlZiBfVkJTRVRNT0RFXworI2RlZmluZSBfVkJTRVRNT0RFXwogCi1leHRlcm4gICB2b2lkICAgICBJbml0VG8zMzBQb2ludGVyKHVuc2lnbmVkIGNoYXIsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKLWV4dGVybiAgIHZvaWQgICAgIFhHSV9VbkxvY2tDUlQyKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7Ci1leHRlcm4gICB2b2lkICAgICBYR0lfTG9ja0NSVDIoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKLWV4dGVybiAgIHZvaWQgICAgIFhHSV9Mb25nV2FpdChzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7Ci1leHRlcm4gICB2b2lkICAgICBYR0lfU2V0Q1JUMk1vZGVSZWdzKHVuc2lnbmVkIHNob3J0IE1vZGVObywKLQkJCQkgICAgICBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICosCitleHRlcm4gdm9pZCBJbml0VG8zMzBQb2ludGVyKHVuc2lnbmVkIGNoYXIsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKK2V4dGVybiB2b2lkIFhHSV9VbkxvY2tDUlQyKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkJICAgc3RydWN0IHZiX2RldmljZV9pbmZvICopOworZXh0ZXJuIHZvaWQgWEdJX0xvY2tDUlQyKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkJIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKK2V4dGVybiB2b2lkIFhHSV9Mb25nV2FpdChzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7CitleHRlcm4gdm9pZCBYR0lfU2V0Q1JUMk1vZGVSZWdzKHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCQlzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICosCisJCQkJc3RydWN0IHZiX2RldmljZV9pbmZvICopOworZXh0ZXJuIHZvaWQgWEdJX0Rpc2FibGVCcmlkZ2Uoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCQkgICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7CitleHRlcm4gdm9pZCBYR0lfRW5hYmxlQnJpZGdlKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkJICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7CitleHRlcm4gdm9pZCBYR0lfRGlzcGxheU9mZihzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICosCisJCQkgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7CitleHRlcm4gdm9pZCBYR0lfRGlzcGxheU9uKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKiwKKwkJCSAgc3RydWN0IHZiX2RldmljZV9pbmZvICopOworZXh0ZXJuIHZvaWQgWEdJX0dldFZCVHlwZShzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7CitleHRlcm4gdm9pZCBYR0lfU2Vuc2VDUlQxKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKK2V4dGVybiB2b2lkIFhHSV9HZXRWR0FUeXBlKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkJICAgc3RydWN0IHZiX2RldmljZV9pbmZvICopOworZXh0ZXJuIHZvaWQgWEdJX0dldFZCSW5mbyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sCisJCQkgIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkJICBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKKwkJCSAgc3RydWN0IHZiX2RldmljZV9pbmZvICopOworZXh0ZXJuIHZvaWQgWEdJX0dldFRWSW5mbyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sCisJCQkgIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkJICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7CitleHRlcm4gdW5zaWduZWQgc2hvcnQgWEdJX0dldFJlc0luZm8odW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCQkJICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOworCitleHRlcm4gdW5zaWduZWQgY2hhciBYR0lTZXRNb2RlTmV3KHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkJCSAgIHVuc2lnbmVkIHNob3J0IE1vZGVObykgOworCitleHRlcm4gdW5zaWduZWQgY2hhciBYR0lfU2VhcmNoTW9kZUlEKHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCQkgICAgICB1bnNpZ25lZCBzaG9ydCAqTW9kZUlkSW5kZXgsCiAJCQkJICAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICopOwotZXh0ZXJuICAgdm9pZCAgICAgWEdJX0Rpc2FibGVCcmlkZ2Uoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKLWV4dGVybiAgIHZvaWQgICAgIFhHSV9FbmFibGVCcmlkZ2Uoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKLWV4dGVybiAgIHZvaWQgICAgIFhHSV9EaXNwbGF5T2ZmKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKiwgc3RydWN0IHZiX2RldmljZV9pbmZvICopOwotZXh0ZXJuICAgdm9pZCAgICAgWEdJX0Rpc3BsYXlPbihzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICosIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKLWV4dGVybiAgIHZvaWQgICAgIFhHSV9HZXRWQlR5cGUoc3RydWN0IHZiX2RldmljZV9pbmZvICopOwotZXh0ZXJuICAgdm9pZCAgICAgWEdJX1NlbnNlQ1JUMShzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7Ci1leHRlcm4gICB2b2lkICAgICBYR0lfR2V0VkdBVHlwZShzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICopOwotZXh0ZXJuICAgdm9pZCAgICAgWEdJX0dldFZCSW5mbyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICopOwotZXh0ZXJuICAgdm9pZCAgICAgWEdJX0dldFRWSW5mbyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7Ci1leHRlcm4gICB1bnNpZ25lZCBzaG9ydCAgIFhHSV9HZXRSZXNJbmZvKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7CitleHRlcm4gdW5zaWduZWQgY2hhciBYR0lfR2V0TENESW5mbyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sCisJCQkJICAgIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkJCSAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7CitleHRlcm4gdW5zaWduZWQgY2hhciBYR0lfQnJpZGdlSXNPbihzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7CiAKLWV4dGVybiAgIHVuc2lnbmVkIGNoYXIgIFhHSVNldE1vZGVOZXcoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHVuc2lnbmVkIHNob3J0IE1vZGVObykgOworZXh0ZXJuIHVuc2lnbmVkIGNoYXIKK1hHSV9TZXRDUlQyR3JvdXAzMDEodW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkgICAgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCSAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7CitleHRlcm4gdW5zaWduZWQgc2hvcnQgWEdJX0dldFJhdGVQdHJDUlQyKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKnBYR0lIV0RFLAorCQkJCQkgdW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkJCQkgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCQkJCSBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7CiAKLWV4dGVybiAgIHVuc2lnbmVkIGNoYXIgIFhHSV9TZWFyY2hNb2RlSUQodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCAgKk1vZGVJZEluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7Ci1leHRlcm4gICB1bnNpZ25lZCBjaGFyICBYR0lfR2V0TENESW5mbyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7Ci1leHRlcm4gICB1bnNpZ25lZCBjaGFyICBYR0lfQnJpZGdlSXNPbihzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7Ci1leHRlcm4gICB1bnNpZ25lZCBjaGFyICBYR0lfU2V0Q1JUMkdyb3VwMzAxKHVuc2lnbmVkIHNob3J0IE1vZGVObywgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKLWV4dGVybiAgIHVuc2lnbmVkIHNob3J0ICAgWEdJX0dldFJhdGVQdHJDUlQyKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKnBYR0lIV0RFLCB1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7Ci0KLWV4dGVybiAgIHZvaWQgICAgIFhHSV9TZXRYRzIxRlBCaXRzKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Ci1leHRlcm4gICB2b2lkICAgICBYR0lfU2V0WEcyN0ZQQml0cyhzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwotZXh0ZXJuICAgdm9pZCAgICAgWEdJX1hHMjFCTFNpZ25hbFZERCh1bnNpZ25lZCBzaG9ydCB0ZW1wYmgsIHVuc2lnbmVkIHNob3J0IHRlbXBibCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKLWV4dGVybiAgIHZvaWQgICAgIFhHSV9YRzI3QkxTaWduYWxWREQodW5zaWduZWQgc2hvcnQgdGVtcGJoLCB1bnNpZ25lZCBzaG9ydCB0ZW1wYmwsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Ci1leHRlcm4gICB2b2lkICAgICBYR0lfWEcyMVNldFBhbmVsRGVsYXkodW5zaWduZWQgc2hvcnQgdGVtcGJsLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwotZXh0ZXJuICAgdW5zaWduZWQgY2hhciAgWEdJX1hHMjFDaGVja0xWRFNNb2RlKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Ci1leHRlcm4gICB1bnNpZ25lZCBzaG9ydCBYR0lfR2V0TFZEU09FTVRhYmxlSW5kZXgoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK2V4dGVybiB2b2lkIFhHSV9TZXRYRzIxRlBCaXRzKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7CitleHRlcm4gdm9pZCBYR0lfU2V0WEcyN0ZQQml0cyhzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOworZXh0ZXJuIHZvaWQgWEdJX1hHMjFCTFNpZ25hbFZERCh1bnNpZ25lZCBzaG9ydCB0ZW1wYmgsCisJCQkJdW5zaWduZWQgc2hvcnQgdGVtcGJsLAorCQkJCXN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7CitleHRlcm4gdm9pZCBYR0lfWEcyN0JMU2lnbmFsVkREKHVuc2lnbmVkIHNob3J0IHRlbXBiaCwKKwkJCQl1bnNpZ25lZCBzaG9ydCB0ZW1wYmwsCisJCQkJc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK2V4dGVybiB2b2lkIFhHSV9YRzIxU2V0UGFuZWxEZWxheSh1bnNpZ25lZCBzaG9ydCB0ZW1wYmwsCisJCQkJICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgWEdJX1hHMjFDaGVja0xWRFNNb2RlKHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCQkJICAgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCQkJCSAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7CitleHRlcm4gdW5zaWduZWQgc2hvcnQgWEdJX0dldExWRFNPRU1UYWJsZUluZGV4KHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX3N0cnVjdC5oIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX3N0cnVjdC5oCmluZGV4IDljNmUwYzcuLjM3N2QyN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9zdHJ1Y3QuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfc3RydWN0LmgKQEAgLTcsMzY5ICs3LDMyNCBAQAogI2RlZmluZSBFWFRFUk4gZXh0ZXJuCiAjZW5kaWYKIAotCi0KLQotc3RydWN0IFhHSV9QYW5lbERlbGF5VGJsU3RydWN0Ci17Ci0gdW5zaWduZWQgY2hhciB0aW1lclsyXTsKK3N0cnVjdCBYR0lfUGFuZWxEZWxheVRibFN0cnVjdCB7CisJdW5zaWduZWQgY2hhciB0aW1lclsyXTsKIH07CiAKLXN0cnVjdCBYR0lfTENERGF0YVN0cnVjdAotewotIHVuc2lnbmVkIHNob3J0IFJWQkhDTUFYOwotIHVuc2lnbmVkIHNob3J0IFJWQkhDRkFDVDsKLSB1bnNpZ25lZCBzaG9ydCBWR0FIVDsKLSB1bnNpZ25lZCBzaG9ydCBWR0FWVDsKLSB1bnNpZ25lZCBzaG9ydCBMQ0RIVDsKLSB1bnNpZ25lZCBzaG9ydCBMQ0RWVDsKK3N0cnVjdCBYR0lfTENERGF0YVN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQgUlZCSENNQVg7CisJdW5zaWduZWQgc2hvcnQgUlZCSENGQUNUOworCXVuc2lnbmVkIHNob3J0IFZHQUhUOworCXVuc2lnbmVkIHNob3J0IFZHQVZUOworCXVuc2lnbmVkIHNob3J0IExDREhUOworCXVuc2lnbmVkIHNob3J0IExDRFZUOwogfTsKIAogCi1zdHJ1Y3QgWEdJX0xWRFNDUlQxSERhdGFTdHJ1Y3QKLXsKLSB1bnNpZ25lZCBjaGFyIFJlZ1s4XTsKK3N0cnVjdCBYR0lfTFZEU0NSVDFIRGF0YVN0cnVjdCB7CisJdW5zaWduZWQgY2hhciBSZWdbOF07CiB9OwogCi1zdHJ1Y3QgWEdJX0xWRFNDUlQxVkRhdGFTdHJ1Y3QKLXsKLSB1bnNpZ25lZCBjaGFyIFJlZ1s3XTsKK3N0cnVjdCBYR0lfTFZEU0NSVDFWRGF0YVN0cnVjdCB7CisJdW5zaWduZWQgY2hhciBSZWdbN107CiB9OwogCi0KLXN0cnVjdCBYR0lfVFZEYXRhU3RydWN0Ci17Ci0gdW5zaWduZWQgc2hvcnQgUlZCSENNQVg7Ci0gdW5zaWduZWQgc2hvcnQgUlZCSENGQUNUOwotIHVuc2lnbmVkIHNob3J0IFZHQUhUOwotIHVuc2lnbmVkIHNob3J0IFZHQVZUOwotIHVuc2lnbmVkIHNob3J0IFRWSERFOwotIHVuc2lnbmVkIHNob3J0IFRWVkRFOwotIHVuc2lnbmVkIHNob3J0IFJWQkhSUzsKLSB1bnNpZ25lZCBjaGFyIEZsaWNrZXJNb2RlOwotIHVuc2lnbmVkIHNob3J0IEhBTEZSVkJIUlM7Ci0gdW5zaWduZWQgY2hhciBSWTFDT0U7Ci0gdW5zaWduZWQgY2hhciBSWTJDT0U7Ci0gdW5zaWduZWQgY2hhciBSWTNDT0U7Ci0gdW5zaWduZWQgY2hhciBSWTRDT0U7CitzdHJ1Y3QgWEdJX1RWRGF0YVN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQgUlZCSENNQVg7CisJdW5zaWduZWQgc2hvcnQgUlZCSENGQUNUOworCXVuc2lnbmVkIHNob3J0IFZHQUhUOworCXVuc2lnbmVkIHNob3J0IFZHQVZUOworCXVuc2lnbmVkIHNob3J0IFRWSERFOworCXVuc2lnbmVkIHNob3J0IFRWVkRFOworCXVuc2lnbmVkIHNob3J0IFJWQkhSUzsKKwl1bnNpZ25lZCBjaGFyIEZsaWNrZXJNb2RlOworCXVuc2lnbmVkIHNob3J0IEhBTEZSVkJIUlM7CisJdW5zaWduZWQgY2hhciBSWTFDT0U7CisJdW5zaWduZWQgY2hhciBSWTJDT0U7CisJdW5zaWduZWQgY2hhciBSWTNDT0U7CisJdW5zaWduZWQgY2hhciBSWTRDT0U7CiB9OwogCi1zdHJ1Y3QgWEdJX0xWRFNEYXRhU3RydWN0Ci17Ci0gdW5zaWduZWQgc2hvcnQgVkdBSFQ7Ci0gdW5zaWduZWQgc2hvcnQgVkdBVlQ7Ci0gdW5zaWduZWQgc2hvcnQgTENESFQ7Ci0gdW5zaWduZWQgc2hvcnQgTENEVlQ7CitzdHJ1Y3QgWEdJX0xWRFNEYXRhU3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCBWR0FIVDsKKwl1bnNpZ25lZCBzaG9ydCBWR0FWVDsKKwl1bnNpZ25lZCBzaG9ydCBMQ0RIVDsKKwl1bnNpZ25lZCBzaG9ydCBMQ0RWVDsKIH07CiAKLXN0cnVjdCBYR0lfTFZEU0Rlc1N0cnVjdAotewotIHVuc2lnbmVkIHNob3J0IExDREhERVM7Ci0gdW5zaWduZWQgc2hvcnQgTENEVkRFUzsKK3N0cnVjdCBYR0lfTFZEU0Rlc1N0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQgTENESERFUzsKKwl1bnNpZ25lZCBzaG9ydCBMQ0RWREVTOwogfTsKIAotc3RydWN0IFhHSV9MVkRTQ1JUMURhdGFTdHJ1Y3QKLXsKLSB1bnNpZ25lZCBjaGFyIENSWzE1XTsKK3N0cnVjdCBYR0lfTFZEU0NSVDFEYXRhU3RydWN0IHsKKwl1bnNpZ25lZCBjaGFyIENSWzE1XTsKIH07CiAKIC8qYWRkIGZvciBMQ0RBKi8KIAotc3RydWN0IFhHSV9TdFN0cnVjdAotewotIHVuc2lnbmVkIGNoYXIgU3RfTW9kZUlEOwotIHVuc2lnbmVkIHNob3J0IFN0X01vZGVGbGFnOwotIHVuc2lnbmVkIGNoYXIgU3RfU3RUYWJsZUluZGV4OwotIHVuc2lnbmVkIGNoYXIgU3RfQ1JUMkNSVEM7Ci0gdW5zaWduZWQgY2hhciBTdF9DUlQyQ1JUQzI7Ci0gdW5zaWduZWQgY2hhciBTdF9SZXNJbmZvOwotIHVuc2lnbmVkIGNoYXIgVkJfU3RUVkZsaWNrZXJJbmRleDsKLSB1bnNpZ25lZCBjaGFyIFZCX1N0VFZFZGdlSW5kZXg7Ci0gdW5zaWduZWQgY2hhciBWQl9TdFRWWUZpbHRlckluZGV4Oworc3RydWN0IFhHSV9TdFN0cnVjdCB7CisJdW5zaWduZWQgY2hhciBTdF9Nb2RlSUQ7CisJdW5zaWduZWQgc2hvcnQgU3RfTW9kZUZsYWc7CisJdW5zaWduZWQgY2hhciBTdF9TdFRhYmxlSW5kZXg7CisJdW5zaWduZWQgY2hhciBTdF9DUlQyQ1JUQzsKKwl1bnNpZ25lZCBjaGFyIFN0X0NSVDJDUlRDMjsKKwl1bnNpZ25lZCBjaGFyIFN0X1Jlc0luZm87CisJdW5zaWduZWQgY2hhciBWQl9TdFRWRmxpY2tlckluZGV4OworCXVuc2lnbmVkIGNoYXIgVkJfU3RUVkVkZ2VJbmRleDsKKwl1bnNpZ25lZCBjaGFyIFZCX1N0VFZZRmlsdGVySW5kZXg7CiB9OwogCi1zdHJ1Y3QgWEdJX1N0YW5kVGFibGVTdHJ1Y3QKLXsKLSB1bnNpZ25lZCBjaGFyIENSVF9DT0xTOwotIHVuc2lnbmVkIGNoYXIgUk9XUzsKLSB1bnNpZ25lZCBjaGFyIENIQVJfSEVJR0hUOwotIHVuc2lnbmVkIHNob3J0IENSVF9MRU47Ci0gdW5zaWduZWQgY2hhciBTUls0XTsKLSB1bnNpZ25lZCBjaGFyIE1JU0M7Ci0gdW5zaWduZWQgY2hhciBDUlRDWzB4MTldOwotIHVuc2lnbmVkIGNoYXIgQVRUUlsweDE0XTsKLSB1bnNpZ25lZCBjaGFyIEdSQ1s5XTsKK3N0cnVjdCBYR0lfU3RhbmRUYWJsZVN0cnVjdCB7CisJdW5zaWduZWQgY2hhciBDUlRfQ09MUzsKKwl1bnNpZ25lZCBjaGFyIFJPV1M7CisJdW5zaWduZWQgY2hhciBDSEFSX0hFSUdIVDsKKwl1bnNpZ25lZCBzaG9ydCBDUlRfTEVOOworCXVuc2lnbmVkIGNoYXIgU1JbNF07CisJdW5zaWduZWQgY2hhciBNSVNDOworCXVuc2lnbmVkIGNoYXIgQ1JUQ1sweDE5XTsKKwl1bnNpZ25lZCBjaGFyIEFUVFJbMHgxNF07CisJdW5zaWduZWQgY2hhciBHUkNbOV07CiB9OwogCi1zdHJ1Y3QgWEdJX0V4dFN0cnVjdAotewotIHVuc2lnbmVkIGNoYXIgRXh0X01vZGVJRDsKLSB1bnNpZ25lZCBzaG9ydCBFeHRfTW9kZUZsYWc7Ci0gdW5zaWduZWQgc2hvcnQgRXh0X01vZGVJbmZvOwotIHVuc2lnbmVkIHNob3J0IEV4dF9Qb2ludDsKLSB1bnNpZ25lZCBzaG9ydCBFeHRfVkVTQUlEOwotIHVuc2lnbmVkIGNoYXIgRXh0X1ZFU0FNRU1TaXplOwotIHVuc2lnbmVkIGNoYXIgRXh0X1JFU0lORk87Ci0gdW5zaWduZWQgY2hhciBWQl9FeHRUVkZsaWNrZXJJbmRleDsKLSB1bnNpZ25lZCBjaGFyIFZCX0V4dFRWRWRnZUluZGV4OwotIHVuc2lnbmVkIGNoYXIgVkJfRXh0VFZZRmlsdGVySW5kZXg7Ci0gdW5zaWduZWQgY2hhciBSRUZpbmRleDsKK3N0cnVjdCBYR0lfRXh0U3RydWN0IHsKKwl1bnNpZ25lZCBjaGFyIEV4dF9Nb2RlSUQ7CisJdW5zaWduZWQgc2hvcnQgRXh0X01vZGVGbGFnOworCXVuc2lnbmVkIHNob3J0IEV4dF9Nb2RlSW5mbzsKKwl1bnNpZ25lZCBzaG9ydCBFeHRfUG9pbnQ7CisJdW5zaWduZWQgc2hvcnQgRXh0X1ZFU0FJRDsKKwl1bnNpZ25lZCBjaGFyIEV4dF9WRVNBTUVNU2l6ZTsKKwl1bnNpZ25lZCBjaGFyIEV4dF9SRVNJTkZPOworCXVuc2lnbmVkIGNoYXIgVkJfRXh0VFZGbGlja2VySW5kZXg7CisJdW5zaWduZWQgY2hhciBWQl9FeHRUVkVkZ2VJbmRleDsKKwl1bnNpZ25lZCBjaGFyIFZCX0V4dFRWWUZpbHRlckluZGV4OworCXVuc2lnbmVkIGNoYXIgUkVGaW5kZXg7CiB9OwogCi1zdHJ1Y3QgWEdJX0V4dDJTdHJ1Y3QKLXsKLSB1bnNpZ25lZCBzaG9ydCBFeHRfSW5mb0ZsYWc7Ci0gdW5zaWduZWQgY2hhciBFeHRfQ1JUMUNSVEM7Ci0gdW5zaWduZWQgY2hhciBFeHRfQ1JUVkNMSzsKLSB1bnNpZ25lZCBjaGFyIEV4dF9DUlQyQ1JUQzsKLSB1bnNpZ25lZCBjaGFyIEV4dF9DUlQyQ1JUQzI7Ci0gdW5zaWduZWQgY2hhciAgTW9kZUlEOwotIHVuc2lnbmVkIHNob3J0IFhSZXM7Ci0gdW5zaWduZWQgc2hvcnQgWVJlczsKLSAvKiB1bnNpZ25lZCBzaG9ydCBST01fT0ZGU0VUOyAqLworc3RydWN0IFhHSV9FeHQyU3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCBFeHRfSW5mb0ZsYWc7CisJdW5zaWduZWQgY2hhciBFeHRfQ1JUMUNSVEM7CisJdW5zaWduZWQgY2hhciBFeHRfQ1JUVkNMSzsKKwl1bnNpZ25lZCBjaGFyIEV4dF9DUlQyQ1JUQzsKKwl1bnNpZ25lZCBjaGFyIEV4dF9DUlQyQ1JUQzI7CisJdW5zaWduZWQgY2hhciAgTW9kZUlEOworCXVuc2lnbmVkIHNob3J0IFhSZXM7CisJdW5zaWduZWQgc2hvcnQgWVJlczsKKwkvKiB1bnNpZ25lZCBzaG9ydCBST01fT0ZGU0VUOyAqLwogfTsKIAogCi1zdHJ1Y3QgWEdJX01DTEtEYXRhU3RydWN0Ci17Ci0gdW5zaWduZWQgY2hhciBTUjI4LCBTUjI5LCBTUjJBOwotIHVuc2lnbmVkIHNob3J0IENMT0NLOworc3RydWN0IFhHSV9NQ0xLRGF0YVN0cnVjdCB7CisJdW5zaWduZWQgY2hhciBTUjI4LCBTUjI5LCBTUjJBOworCXVuc2lnbmVkIHNob3J0IENMT0NLOwogfTsKIAotc3RydWN0IFhHSV9FQ0xLRGF0YVN0cnVjdAotewotIHVuc2lnbmVkIGNoYXIgU1IyRSwgU1IyRiwgU1IzMDsKLSB1bnNpZ25lZCBzaG9ydCBDTE9DSzsKK3N0cnVjdCBYR0lfRUNMS0RhdGFTdHJ1Y3QgeworCXVuc2lnbmVkIGNoYXIgU1IyRSwgU1IyRiwgU1IzMDsKKwl1bnNpZ25lZCBzaG9ydCBDTE9DSzsKIH07CiAKLXN0cnVjdCBYR0lfVkNMS0RhdGFTdHJ1Y3QKLXsKLSB1bnNpZ25lZCBjaGFyIFNSMkIsIFNSMkM7Ci0gdW5zaWduZWQgc2hvcnQgQ0xPQ0s7CitzdHJ1Y3QgWEdJX1ZDTEtEYXRhU3RydWN0IHsKKwl1bnNpZ25lZCBjaGFyIFNSMkIsIFNSMkM7CisJdW5zaWduZWQgc2hvcnQgQ0xPQ0s7CiB9OwogCi1zdHJ1Y3QgWEdJX1ZCVkNMS0RhdGFTdHJ1Y3QKLXsKLSB1bnNpZ25lZCBjaGFyIFBhcnQ0X0EsIFBhcnQ0X0I7Ci0gdW5zaWduZWQgc2hvcnQgQ0xPQ0s7CitzdHJ1Y3QgWEdJX1ZCVkNMS0RhdGFTdHJ1Y3QgeworCXVuc2lnbmVkIGNoYXIgUGFydDRfQSwgUGFydDRfQjsKKwl1bnNpZ25lZCBzaG9ydCBDTE9DSzsKIH07CiAKLXN0cnVjdCBYR0lfU3RSZXNJbmZvU3RydWN0Ci17Ci0gdW5zaWduZWQgc2hvcnQgSFRvdGFsOwotIHVuc2lnbmVkIHNob3J0IFZUb3RhbDsKK3N0cnVjdCBYR0lfU3RSZXNJbmZvU3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCBIVG90YWw7CisJdW5zaWduZWQgc2hvcnQgVlRvdGFsOwogfTsKIAotc3RydWN0IFhHSV9Nb2RlUmVzSW5mb1N0cnVjdAotewotIHVuc2lnbmVkIHNob3J0IEhUb3RhbDsKLSB1bnNpZ25lZCBzaG9ydCBWVG90YWw7Ci0gdW5zaWduZWQgY2hhciAgWENoYXI7Ci0gdW5zaWduZWQgY2hhciAgWUNoYXI7CitzdHJ1Y3QgWEdJX01vZGVSZXNJbmZvU3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCBIVG90YWw7CisJdW5zaWduZWQgc2hvcnQgVlRvdGFsOworCXVuc2lnbmVkIGNoYXIgIFhDaGFyOworCXVuc2lnbmVkIGNoYXIgIFlDaGFyOwogfTsKIAotc3RydWN0IFhHSV9MQ0ROQkRlc1N0cnVjdAotewotICB1bnNpZ25lZCBjaGFyIE5CWzEyXTsKLX07Ci0gLyphZGQgZm9yIG5ldyBVTklWR0FCSU9TKi8KLXN0cnVjdCBYR0lfTENERGVzU3RydWN0Ci17Ci0gdW5zaWduZWQgc2hvcnQgTENESERFUzsKLSB1bnNpZ25lZCBzaG9ydCBMQ0RIUlM7Ci0gdW5zaWduZWQgc2hvcnQgTENEVkRFUzsKLSB1bnNpZ25lZCBzaG9ydCBMQ0RWUlM7CitzdHJ1Y3QgWEdJX0xDRE5CRGVzU3RydWN0IHsKKwl1bnNpZ25lZCBjaGFyIE5CWzEyXTsKIH07CiAKLXN0cnVjdCBYR0lfTENERGF0YVRhYmxTdHJ1Y3QKLXsKLSB1bnNpZ25lZCBjaGFyICBQQU5FTElEOwotIHVuc2lnbmVkIHNob3J0IE1BU0s7Ci0gdW5zaWduZWQgc2hvcnQgQ0FQOwotIHVuc2lnbmVkIHNob3J0IERBVEFQVFI7CisvKmFkZCBmb3IgbmV3IFVOSVZHQUJJT1MqLworc3RydWN0IFhHSV9MQ0REZXNTdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0IExDREhERVM7CisJdW5zaWduZWQgc2hvcnQgTENESFJTOworCXVuc2lnbmVkIHNob3J0IExDRFZERVM7CisJdW5zaWduZWQgc2hvcnQgTENEVlJTOwogfTsKIAotc3RydWN0IFhHSV9UVlRhYmxEYXRhU3RydWN0Ci17Ci0gdW5zaWduZWQgc2hvcnQgTUFTSzsKLSB1bnNpZ25lZCBzaG9ydCBDQVA7Ci0gdW5zaWduZWQgc2hvcnQgREFUQVBUUjsKK3N0cnVjdCBYR0lfTENERGF0YVRhYmxTdHJ1Y3QgeworCXVuc2lnbmVkIGNoYXIgIFBBTkVMSUQ7CisJdW5zaWduZWQgc2hvcnQgTUFTSzsKKwl1bnNpZ25lZCBzaG9ydCBDQVA7CisJdW5zaWduZWQgc2hvcnQgREFUQVBUUjsKIH07CiAKLXN0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdAotewotIHVuc2lnbmVkIHNob3J0IExDREhERVM7Ci0gdW5zaWduZWQgc2hvcnQgTENESFJTOwotIHVuc2lnbmVkIHNob3J0IExDRFZERVM7Ci0gdW5zaWduZWQgc2hvcnQgTENEVlJTOworc3RydWN0IFhHSV9UVlRhYmxEYXRhU3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCBNQVNLOworCXVuc2lnbmVkIHNob3J0IENBUDsKKwl1bnNpZ25lZCBzaG9ydCBEQVRBUFRSOworfTsKKworc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCBMQ0RIREVTOworCXVuc2lnbmVkIHNob3J0IExDREhSUzsKKwl1bnNpZ25lZCBzaG9ydCBMQ0RWREVTOworCXVuc2lnbmVkIHNob3J0IExDRFZSUzsKIH07CiAKIAotc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdAotewotIHVuc2lnbmVkIHNob3J0IFZHQUhUOwotIHVuc2lnbmVkIHNob3J0IFZHQVZUOwotIHVuc2lnbmVkIHNob3J0IExDREhUOwotIHVuc2lnbmVkIHNob3J0IExDRFZUOworc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQgVkdBSFQ7CisJdW5zaWduZWQgc2hvcnQgVkdBVlQ7CisJdW5zaWduZWQgc2hvcnQgTENESFQ7CisJdW5zaWduZWQgc2hvcnQgTENEVlQ7CiB9OwogCi1zdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QyCi17Ci0gdW5zaWduZWQgc2hvcnQgTENESERFUzsKLSB1bnNpZ25lZCBzaG9ydCBMQ0RIUlM7Ci0gdW5zaWduZWQgc2hvcnQgTENEVkRFUzsKLSB1bnNpZ25lZCBzaG9ydCBMQ0RWUlM7Ci0gdW5zaWduZWQgc2hvcnQgTENESFN5bmM7Ci0gdW5zaWduZWQgc2hvcnQgTENEVlN5bmM7CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QyIHsKKwl1bnNpZ25lZCBzaG9ydCBMQ0RIREVTOworCXVuc2lnbmVkIHNob3J0IExDREhSUzsKKwl1bnNpZ25lZCBzaG9ydCBMQ0RWREVTOworCXVuc2lnbmVkIHNob3J0IExDRFZSUzsKKwl1bnNpZ25lZCBzaG9ydCBMQ0RIU3luYzsKKwl1bnNpZ25lZCBzaG9ydCBMQ0RWU3luYzsKIH07CiAKLXN0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdAotewotIHVuc2lnbmVkIHNob3J0IFJWQkhDTUFYOwotIHVuc2lnbmVkIHNob3J0IFJWQkhDRkFDVDsKLSB1bnNpZ25lZCBzaG9ydCBWR0FIVDsKLSB1bnNpZ25lZCBzaG9ydCBWR0FWVDsKLSB1bnNpZ25lZCBzaG9ydCBMQ0RIVDsKLSB1bnNpZ25lZCBzaG9ydCBMQ0RWVDsKK3N0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQgUlZCSENNQVg7CisJdW5zaWduZWQgc2hvcnQgUlZCSENGQUNUOworCXVuc2lnbmVkIHNob3J0IFZHQUhUOworCXVuc2lnbmVkIHNob3J0IFZHQVZUOworCXVuc2lnbmVkIHNob3J0IExDREhUOworCXVuc2lnbmVkIHNob3J0IExDRFZUOwogfTsKIAogCi1zdHJ1Y3QgWEdJMzMwX1RWRGF0YVN0cnVjdAotewotIHVuc2lnbmVkIHNob3J0IFJWQkhDTUFYOwotIHVuc2lnbmVkIHNob3J0IFJWQkhDRkFDVDsKLSB1bnNpZ25lZCBzaG9ydCBWR0FIVDsKLSB1bnNpZ25lZCBzaG9ydCBWR0FWVDsKLSB1bnNpZ25lZCBzaG9ydCBUVkhERTsKLSB1bnNpZ25lZCBzaG9ydCBUVlZERTsKLSB1bnNpZ25lZCBzaG9ydCBSVkJIUlM7Ci0gdW5zaWduZWQgY2hhciBGbGlja2VyTW9kZTsKLSB1bnNpZ25lZCBzaG9ydCBIQUxGUlZCSFJTOworc3RydWN0IFhHSTMzMF9UVkRhdGFTdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0IFJWQkhDTUFYOworCXVuc2lnbmVkIHNob3J0IFJWQkhDRkFDVDsKKwl1bnNpZ25lZCBzaG9ydCBWR0FIVDsKKwl1bnNpZ25lZCBzaG9ydCBWR0FWVDsKKwl1bnNpZ25lZCBzaG9ydCBUVkhERTsKKwl1bnNpZ25lZCBzaG9ydCBUVlZERTsKKwl1bnNpZ25lZCBzaG9ydCBSVkJIUlM7CisJdW5zaWduZWQgY2hhciBGbGlja2VyTW9kZTsKKwl1bnNpZ25lZCBzaG9ydCBIQUxGUlZCSFJTOwogfTsKIAotc3RydWN0IFhHSTMzMF9MQ0REYXRhVGFibFN0cnVjdAotewotIHVuc2lnbmVkIGNoYXIgIFBBTkVMSUQ7Ci0gdW5zaWduZWQgc2hvcnQgTUFTSzsKLSB1bnNpZ25lZCBzaG9ydCBDQVA7Ci0gdW5zaWduZWQgc2hvcnQgREFUQVBUUjsKK3N0cnVjdCBYR0kzMzBfTENERGF0YVRhYmxTdHJ1Y3QgeworCXVuc2lnbmVkIGNoYXIgIFBBTkVMSUQ7CisJdW5zaWduZWQgc2hvcnQgTUFTSzsKKwl1bnNpZ25lZCBzaG9ydCBDQVA7CisJdW5zaWduZWQgc2hvcnQgREFUQVBUUjsKIH07CiAKLXN0cnVjdCBYR0kzMzBfVFZEYXRhVGFibFN0cnVjdAotewotIHVuc2lnbmVkIHNob3J0IE1BU0s7Ci0gdW5zaWduZWQgc2hvcnQgQ0FQOwotIHVuc2lnbmVkIHNob3J0IERBVEFQVFI7CitzdHJ1Y3QgWEdJMzMwX1RWRGF0YVRhYmxTdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0IE1BU0s7CisJdW5zaWduZWQgc2hvcnQgQ0FQOworCXVuc2lnbmVkIHNob3J0IERBVEFQVFI7CiB9OwogCiAKLXN0cnVjdCBYR0kzMzBfQ0hUVkRhdGFTdHJ1Y3QKLXsKLSB1bnNpZ25lZCBzaG9ydCBWR0FIVDsKLSB1bnNpZ25lZCBzaG9ydCBWR0FWVDsKLSB1bnNpZ25lZCBzaG9ydCBMQ0RIVDsKLSB1bnNpZ25lZCBzaG9ydCBMQ0RWVDsKK3N0cnVjdCBYR0kzMzBfQ0hUVkRhdGFTdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0IFZHQUhUOworCXVuc2lnbmVkIHNob3J0IFZHQVZUOworCXVuc2lnbmVkIHNob3J0IExDREhUOworCXVuc2lnbmVkIHNob3J0IExDRFZUOwogfTsKIAotc3RydWN0IFhHSV9UaW1pbmdIU3RydWN0Ci17Ci0gIHVuc2lnbmVkIGNoYXIgZGF0YVs4XTsKK3N0cnVjdCBYR0lfVGltaW5nSFN0cnVjdCB7CisJdW5zaWduZWQgY2hhciBkYXRhWzhdOwogfTsKIAotc3RydWN0IFhHSV9UaW1pbmdWU3RydWN0Ci17Ci0gIHVuc2lnbmVkIGNoYXIgZGF0YVs3XTsKK3N0cnVjdCBYR0lfVGltaW5nVlN0cnVjdCB7CisJdW5zaWduZWQgY2hhciBkYXRhWzddOwogfTsKIAotc3RydWN0IFhHSV9DSDcwMDdUVl9UaW1pbmdIU3RydWN0Ci17Ci0gIHVuc2lnbmVkIGNoYXIgZGF0YVsxMF07CitzdHJ1Y3QgWEdJX0NINzAwN1RWX1RpbWluZ0hTdHJ1Y3QgeworCXVuc2lnbmVkIGNoYXIgZGF0YVsxMF07CiB9OwogCi1zdHJ1Y3QgWEdJX0NINzAwN1RWX1RpbWluZ1ZTdHJ1Y3QKLXsKLSAgdW5zaWduZWQgY2hhciBkYXRhWzEwXTsKK3N0cnVjdCBYR0lfQ0g3MDA3VFZfVGltaW5nVlN0cnVjdCB7CisJdW5zaWduZWQgY2hhciBkYXRhWzEwXTsKIH07CiAKLXN0cnVjdCBYR0lfWEcyMUNSVDFTdHJ1Y3QKLXsKLSB1bnNpZ25lZCBjaGFyIE1vZGVJRCwgQ1IwMiwgQ1IwMywgQ1IxNSwgQ1IxNjsKK3N0cnVjdCBYR0lfWEcyMUNSVDFTdHJ1Y3QgeworCXVuc2lnbmVkIGNoYXIgTW9kZUlELCBDUjAyLCBDUjAzLCBDUjE1LCBDUjE2OwogfTsKIAotc3RydWN0IFhHSTMzMF9DSFRWUmVnRGF0YVN0cnVjdAotewotIHVuc2lnbmVkIGNoYXIgUmVnWzE2XTsKK3N0cnVjdCBYR0kzMzBfQ0hUVlJlZ0RhdGFTdHJ1Y3QgeworCXVuc2lnbmVkIGNoYXIgUmVnWzE2XTsKIH07CiAKLXN0cnVjdCBYR0kzMzBfTENEQ2FwU3RydWN0Ci17Ci0JCXVuc2lnbmVkIGNoYXIJICAgTENEX0lEOwotCQl1bnNpZ25lZCBzaG9ydAkgICBMQ0RfQ2FwYWJpbGl0eTsKLQkJdW5zaWduZWQgY2hhcgkgICBMQ0RfU2V0RmxhZzsKLQkJdW5zaWduZWQgY2hhcgkgICBMQ0RfRGVsYXlDb21wZW5zYXRpb247Ci0JCXVuc2lnbmVkIGNoYXIJICAgTENEX0hTeW5jV2lkdGg7Ci0JCXVuc2lnbmVkIGNoYXIJICAgTENEX1ZTeW5jV2lkdGg7Ci0JCXVuc2lnbmVkIGNoYXIJICAgTENEX1ZDTEs7Ci0JCXVuc2lnbmVkIGNoYXIJICAgTENEQV9WQ0xLRGF0YTE7Ci0JCXVuc2lnbmVkIGNoYXIJICAgTENEQV9WQ0xLRGF0YTI7Ci0JCXVuc2lnbmVkIGNoYXIJICAgTENVQ0hBUl9WQ0xLRGF0YTE7Ci0JCXVuc2lnbmVkIGNoYXIJICAgTENVQ0hBUl9WQ0xLRGF0YTI7Ci0JCXVuc2lnbmVkIGNoYXIJICAgUFNDX1MxOwotCQl1bnNpZ25lZCBjaGFyCSAgIFBTQ19TMjsKLQkJdW5zaWduZWQgY2hhcgkgICBQU0NfUzM7Ci0JCXVuc2lnbmVkIGNoYXIJICAgUFNDX1M0OwotCQl1bnNpZ25lZCBjaGFyCSAgIFBTQ19TNTsKLQkJdW5zaWduZWQgY2hhcgkgICBQV0RfMkI7Ci0JCXVuc2lnbmVkIGNoYXIJICAgUFdEXzJDOwotCQl1bnNpZ25lZCBjaGFyCSAgIFBXRF8yRDsKLQkJdW5zaWduZWQgY2hhcgkgICBQV0RfMkU7Ci0JCXVuc2lnbmVkIGNoYXIJICAgUFdEXzJGOwotCQl1bnNpZ25lZCBjaGFyCSAgIFNwZWN0cnVtXzMxOwotCQl1bnNpZ25lZCBjaGFyCSAgIFNwZWN0cnVtXzMyOwotCQl1bnNpZ25lZCBjaGFyCSAgIFNwZWN0cnVtXzMzOwotCQl1bnNpZ25lZCBjaGFyCSAgIFNwZWN0cnVtXzM0Oworc3RydWN0IFhHSTMzMF9MQ0RDYXBTdHJ1Y3QgeworCXVuc2lnbmVkIGNoYXIJTENEX0lEOworCXVuc2lnbmVkIHNob3J0CUxDRF9DYXBhYmlsaXR5OworCXVuc2lnbmVkIGNoYXIJTENEX1NldEZsYWc7CisJdW5zaWduZWQgY2hhcglMQ0RfRGVsYXlDb21wZW5zYXRpb247CisJdW5zaWduZWQgY2hhcglMQ0RfSFN5bmNXaWR0aDsKKwl1bnNpZ25lZCBjaGFyCUxDRF9WU3luY1dpZHRoOworCXVuc2lnbmVkIGNoYXIJTENEX1ZDTEs7CisJdW5zaWduZWQgY2hhcglMQ0RBX1ZDTEtEYXRhMTsKKwl1bnNpZ25lZCBjaGFyCUxDREFfVkNMS0RhdGEyOworCXVuc2lnbmVkIGNoYXIJTENVQ0hBUl9WQ0xLRGF0YTE7CisJdW5zaWduZWQgY2hhcglMQ1VDSEFSX1ZDTEtEYXRhMjsKKwl1bnNpZ25lZCBjaGFyCVBTQ19TMTsKKwl1bnNpZ25lZCBjaGFyCVBTQ19TMjsKKwl1bnNpZ25lZCBjaGFyCVBTQ19TMzsKKwl1bnNpZ25lZCBjaGFyCVBTQ19TNDsKKwl1bnNpZ25lZCBjaGFyCVBTQ19TNTsKKwl1bnNpZ25lZCBjaGFyCVBXRF8yQjsKKwl1bnNpZ25lZCBjaGFyCVBXRF8yQzsKKwl1bnNpZ25lZCBjaGFyCVBXRF8yRDsKKwl1bnNpZ25lZCBjaGFyCVBXRF8yRTsKKwl1bnNpZ25lZCBjaGFyCVBXRF8yRjsKKwl1bnNpZ25lZCBjaGFyCVNwZWN0cnVtXzMxOworCXVuc2lnbmVkIGNoYXIJU3BlY3RydW1fMzI7CisJdW5zaWduZWQgY2hhcglTcGVjdHJ1bV8zMzsKKwl1bnNpZ25lZCBjaGFyCVNwZWN0cnVtXzM0OwogfTsKIAotc3RydWN0IFhHSTIxX0xWRFNDYXBTdHJ1Y3QKLXsKLQkJdW5zaWduZWQgc2hvcnQJICAgTFZEU19DYXBhYmlsaXR5OwotCQl1bnNpZ25lZCBzaG9ydAkgICBMVkRTSFQ7Ci0JCXVuc2lnbmVkIHNob3J0CSAgIExWRFNWVDsKLQkJdW5zaWduZWQgc2hvcnQJICAgTFZEU0hERTsKLQkJdW5zaWduZWQgc2hvcnQJICAgTFZEU1ZERTsKLQkJdW5zaWduZWQgc2hvcnQJICAgTFZEU0hGUDsKLQkJdW5zaWduZWQgc2hvcnQJICAgTFZEU1ZGUDsKLQkJdW5zaWduZWQgc2hvcnQJICAgTFZEU0hTWU5DOwotCQl1bnNpZ25lZCBzaG9ydAkgICBMVkRTVlNZTkM7Ci0JCXVuc2lnbmVkIGNoYXIJICAgVkNMS0RhdGExOwotCQl1bnNpZ25lZCBjaGFyCSAgIFZDTEtEYXRhMjsKLQkJdW5zaWduZWQgY2hhcgkgICBQU0NfUzE7Ci0JCXVuc2lnbmVkIGNoYXIJICAgUFNDX1MyOwotCQl1bnNpZ25lZCBjaGFyCSAgIFBTQ19TMzsKLQkJdW5zaWduZWQgY2hhcgkgICBQU0NfUzQ7Ci0JCXVuc2lnbmVkIGNoYXIJICAgUFNDX1M1Oworc3RydWN0IFhHSTIxX0xWRFNDYXBTdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0IExWRFNfQ2FwYWJpbGl0eTsKKwl1bnNpZ25lZCBzaG9ydCBMVkRTSFQ7CisJdW5zaWduZWQgc2hvcnQgTFZEU1ZUOworCXVuc2lnbmVkIHNob3J0IExWRFNIREU7CisJdW5zaWduZWQgc2hvcnQgTFZEU1ZERTsKKwl1bnNpZ25lZCBzaG9ydCBMVkRTSEZQOworCXVuc2lnbmVkIHNob3J0IExWRFNWRlA7CisJdW5zaWduZWQgc2hvcnQgTFZEU0hTWU5DOworCXVuc2lnbmVkIHNob3J0IExWRFNWU1lOQzsKKwl1bnNpZ25lZCBjaGFyICBWQ0xLRGF0YTE7CisJdW5zaWduZWQgY2hhciAgVkNMS0RhdGEyOworCXVuc2lnbmVkIGNoYXIgIFBTQ19TMTsKKwl1bnNpZ25lZCBjaGFyICBQU0NfUzI7CisJdW5zaWduZWQgY2hhciAgUFNDX1MzOworCXVuc2lnbmVkIGNoYXIgIFBTQ19TNDsKKwl1bnNpZ25lZCBjaGFyICBQU0NfUzU7CiB9OwogCi1zdHJ1Y3QgWEdJX0NSVDFUYWJsZVN0cnVjdAotewotICB1bnNpZ25lZCBjaGFyIENSWzE2XTsKK3N0cnVjdCBYR0lfQ1JUMVRhYmxlU3RydWN0IHsKKwl1bnNpZ25lZCBjaGFyIENSWzE2XTsKIH07CiAKIAotc3RydWN0IFhHSTMzMF9WQ0xLRGF0YVN0cnVjdAotewotICAgIHVuc2lnbmVkIGNoYXIgU1IyQiwgU1IyQzsKLSAgICB1bnNpZ25lZCBzaG9ydCBDTE9DSzsKK3N0cnVjdCBYR0kzMzBfVkNMS0RhdGFTdHJ1Y3QgeworCXVuc2lnbmVkIGNoYXIgU1IyQiwgU1IyQzsKKwl1bnNpZ25lZCBzaG9ydCBDTE9DSzsKIH07CiAKLXN0cnVjdCBYR0kzMDFDX1RhcDRUaW1pbmdTdHJ1Y3QKLXsKLSAgICB1bnNpZ25lZCBzaG9ydCBERTsKLSAgICB1bnNpZ25lZCBjaGFyICBSZWdbNjRdOyAgIC8qIEMwLUZGICovCitzdHJ1Y3QgWEdJMzAxQ19UYXA0VGltaW5nU3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCBERTsKKwl1bnNpZ25lZCBjaGFyICBSZWdbNjRdOyAgIC8qIEMwLUZGICovCiB9OwogCi1zdHJ1Y3QgWEdJX05ld19TdGFuZFRhYmxlU3RydWN0Ci17CitzdHJ1Y3QgWEdJX05ld19TdGFuZFRhYmxlU3RydWN0IHsKIAl1bnNpZ25lZCBjaGFyICBDUlRfQ09MUzsKIAl1bnNpZ25lZCBjaGFyICBST1dTOwogCXVuc2lnbmVkIGNoYXIgIENIQVJfSEVJR0hUOwpAQCAtMzgxLDM2ICszMzYsMzcgQEAKIAl1bnNpZ25lZCBjaGFyICBHUkNbOV07CiB9OwogCi1zdHJ1Y3QgdmJfZGV2aWNlX2luZm8KLXsKLSAgICB1bnNpZ25lZCBjaGFyICBJU1hQRE9TOwotICAgIHVuc2lnbmVkIGxvbmcgICBQM2M0LFAzZDQsUDNjMCxQM2NlLFAzYzIsUDNjYzsKLSAgICB1bnNpZ25lZCBsb25nICAgUDNjYSxQM2M2LFAzYzcsUDNjOCxQM2M5LFAzZGE7Ci0gICAgdW5zaWduZWQgbG9uZyAgIFBhcnQwUG9ydCxQYXJ0MVBvcnQsUGFydDJQb3J0OwotICAgIHVuc2lnbmVkIGxvbmcgICBQYXJ0M1BvcnQsUGFydDRQb3J0LFBhcnQ1UG9ydDsKLSAgICB1bnNpZ25lZCBzaG9ydCAgIFJWQkhDRkFDVCxSVkJIQ01BWCxSVkJIUlM7Ci0gICAgdW5zaWduZWQgc2hvcnQgICBWR0FWVCxWR0FIVCxWR0FWREUsVkdBSERFOwotICAgIHVuc2lnbmVkIHNob3J0ICAgVlQsSFQsVkRFLEhERTsKLSAgICB1bnNpZ25lZCBzaG9ydCAgIExDREhSUyxMQ0RWUlMsTENESERFUyxMQ0RWREVTOworc3RydWN0IHZiX2RldmljZV9pbmZvIHsKKwl1bnNpZ25lZCBjaGFyICBJU1hQRE9TOworCXVuc2lnbmVkIGxvbmcgICBQM2M0LCBQM2Q0LCBQM2MwLCBQM2NlLCBQM2MyLCBQM2NjOworCXVuc2lnbmVkIGxvbmcgICBQM2NhLCBQM2M2LCBQM2M3LCBQM2M4LCBQM2M5LCBQM2RhOworCXVuc2lnbmVkIGxvbmcgICBQYXJ0MFBvcnQsIFBhcnQxUG9ydCwgUGFydDJQb3J0OworCXVuc2lnbmVkIGxvbmcgICBQYXJ0M1BvcnQsIFBhcnQ0UG9ydCwgUGFydDVQb3J0OworCXVuc2lnbmVkIHNob3J0ICAgUlZCSENGQUNULCBSVkJIQ01BWCwgUlZCSFJTOworCXVuc2lnbmVkIHNob3J0ICAgVkdBVlQsIFZHQUhULCBWR0FWREUsIFZHQUhERTsKKwl1bnNpZ25lZCBzaG9ydCAgIFZULCBIVCwgVkRFLCBIREU7CisJdW5zaWduZWQgc2hvcnQgICBMQ0RIUlMsIExDRFZSUywgTENESERFUywgTENEVkRFUzsKIAotICAgIHVuc2lnbmVkIHNob3J0ICAgTW9kZVR5cGU7Ci0gICAgdW5zaWduZWQgc2hvcnQgICBJRl9ERUZfTFZEUyxJRl9ERUZfVFJVTVBJT04sSUZfREVGX0RTVE47LyogLElGX0RFRl9GU1ROOyBhZGQgZm9yIGRzdG4gKi8KLSAgICB1bnNpZ25lZCBzaG9ydCAgIElGX0RFRl9DUlQyTW9uaXRvcixJRl9ERUZfVmlkZW9DYXB0dXJlOwotICAgIHVuc2lnbmVkIHNob3J0ICAgSUZfREVGX0xDREEsSUZfREVGX0NINzAxNyxJRl9ERUZfWVBiUHIsSUZfREVGX1NjYWxlTENELElGX0RFRl9PRU1VdGlsLElGX0RFRl9QV0Q7Ci0gICAgdW5zaWduZWQgc2hvcnQgICBJRl9ERUZfRXhwTGluazsKLSAgICB1bnNpZ25lZCBzaG9ydCAgIElGX0RFRl9DSDcwMDUsSUZfREVGX0hpVmlzaW9uOwotICAgIHVuc2lnbmVkIHNob3J0ICAgSUZfREVGX0NINzAwNzsgLyogQmlsbHkgMjAwNy8wNS8wMyAqLwotICAgIHVuc2lnbmVkIHNob3J0ICAgTENEUmVzSW5mbyxMQ0RUeXBlSW5mbywgVkJUeXBlOy8qMzAxYiovCi0gICAgdW5zaWduZWQgc2hvcnQgICBWQkluZm8sVFZJbmZvLExDREluZm8sIFNldF9WR0FUeXBlOwotICAgIHVuc2lnbmVkIHNob3J0ICAgVkJFeHRJbmZvOy8qMzAxbHYqLwotICAgIHVuc2lnbmVkIHNob3J0ICAgU2V0RmxhZzsKLSAgICB1bnNpZ25lZCBzaG9ydCAgIE5ld0ZsaWNrZXJNb2RlOwotICAgIHVuc2lnbmVkIHNob3J0ICAgU2VsZWN0Q1JUMlJhdGU7CisJdW5zaWduZWQgc2hvcnQgICBNb2RlVHlwZTsKKwkvKiAsSUZfREVGX0ZTVE47IGFkZCBmb3IgZHN0biAqLworCXVuc2lnbmVkIHNob3J0ICAgSUZfREVGX0xWRFMsIElGX0RFRl9UUlVNUElPTiwgSUZfREVGX0RTVE47CisJdW5zaWduZWQgc2hvcnQgICBJRl9ERUZfQ1JUMk1vbml0b3IsIElGX0RFRl9WaWRlb0NhcHR1cmU7CisJdW5zaWduZWQgc2hvcnQgICBJRl9ERUZfTENEQSwgSUZfREVGX0NINzAxNywgSUZfREVGX1lQYlByLAorCQkJIElGX0RFRl9TY2FsZUxDRCwgSUZfREVGX09FTVV0aWwsIElGX0RFRl9QV0Q7CisJdW5zaWduZWQgc2hvcnQgICBJRl9ERUZfRXhwTGluazsKKwl1bnNpZ25lZCBzaG9ydCAgIElGX0RFRl9DSDcwMDUsIElGX0RFRl9IaVZpc2lvbjsKKwl1bnNpZ25lZCBzaG9ydCAgIElGX0RFRl9DSDcwMDc7IC8qIEJpbGx5IDIwMDcvMDUvMDMgKi8KKwl1bnNpZ25lZCBzaG9ydCAgIExDRFJlc0luZm8sIExDRFR5cGVJbmZvLCBWQlR5cGU7LyozMDFiKi8KKwl1bnNpZ25lZCBzaG9ydCAgIFZCSW5mbywgVFZJbmZvLCBMQ0RJbmZvLCBTZXRfVkdBVHlwZTsKKwl1bnNpZ25lZCBzaG9ydCAgIFZCRXh0SW5mbzsvKjMwMWx2Ki8KKwl1bnNpZ25lZCBzaG9ydCAgIFNldEZsYWc7CisJdW5zaWduZWQgc2hvcnQgICBOZXdGbGlja2VyTW9kZTsKKwl1bnNpZ25lZCBzaG9ydCAgIFNlbGVjdENSVDJSYXRlOwogCi0gICAgdW5zaWduZWQgY2hhciAqUk9NQWRkcjsKLSAgICB1bnNpZ25lZCBjaGFyICpGQkFkZHI7Ci0gICAgdW5zaWduZWQgbG9uZyBCYXNlQWRkcjsKLSAgICB1bnNpZ25lZCBsb25nIFJlbElPOworCXVuc2lnbmVkIGNoYXIgKlJPTUFkZHI7CisJdW5zaWduZWQgY2hhciAqRkJBZGRyOworCXVuc2lnbmVkIGxvbmcgQmFzZUFkZHI7CisJdW5zaWduZWQgbG9uZyBSZWxJTzsKIAogCXVuc2lnbmVkIGNoYXIgKCpDUjZCKVs0XTsKIAl1bnNpZ25lZCBjaGFyICgqQ1I2RSlbNF07CkBAIC00MjAsMTA3ICszNzYsMTA2IEBACiAJdW5zaWduZWQgY2hhciAoKlNSMTUpWzhdOwogCXVuc2lnbmVkIGNoYXIgKCpDUjQwKVs4XTsKIAotICAgIHVuc2lnbmVkIGNoYXIgICpwU29mdFNldHRpbmc7Ci0gICAgdW5zaWduZWQgY2hhciAgKnBPdXRwdXRTZWxlY3Q7CisJdW5zaWduZWQgY2hhciAgKnBTb2Z0U2V0dGluZzsKKwl1bnNpZ25lZCBjaGFyICAqcE91dHB1dFNlbGVjdDsKIAotICAgIHVuc2lnbmVkIHNob3J0ICpwUkdCU2Vuc2VEYXRhOwotICAgIHVuc2lnbmVkIHNob3J0ICpwUkdCU2Vuc2VEYXRhMjsgLyozMDFiKi8KLSAgICB1bnNpZ25lZCBzaG9ydCAqcFZpZGVvU2Vuc2VEYXRhOwotICAgIHVuc2lnbmVkIHNob3J0ICpwVmlkZW9TZW5zZURhdGEyOwotICAgIHVuc2lnbmVkIHNob3J0ICpwWUNTZW5zZURhdGE7Ci0gICAgdW5zaWduZWQgc2hvcnQgKnBZQ1NlbnNlRGF0YTI7CisJdW5zaWduZWQgc2hvcnQgKnBSR0JTZW5zZURhdGE7CisJdW5zaWduZWQgc2hvcnQgKnBSR0JTZW5zZURhdGEyOyAvKjMwMWIqLworCXVuc2lnbmVkIHNob3J0ICpwVmlkZW9TZW5zZURhdGE7CisJdW5zaWduZWQgc2hvcnQgKnBWaWRlb1NlbnNlRGF0YTI7CisJdW5zaWduZWQgc2hvcnQgKnBZQ1NlbnNlRGF0YTsKKwl1bnNpZ25lZCBzaG9ydCAqcFlDU2Vuc2VEYXRhMjsKIAotICAgIHVuc2lnbmVkIGNoYXIgICpwU1IwNzsKLSAgICB1bnNpZ25lZCBjaGFyICAqQ1I0OTsKLSAgICB1bnNpZ25lZCBjaGFyICAqcFNSMUY7Ci0gICAgdW5zaWduZWQgY2hhciAgKkFHUFJlZzsKLSAgICB1bnNpZ25lZCBjaGFyICAqU1IxNjsKLSAgICB1bnNpZ25lZCBjaGFyICAqcFNSMjE7Ci0gICAgdW5zaWduZWQgY2hhciAgKnBTUjIyOwotICAgIHVuc2lnbmVkIGNoYXIgICpwU1IyMzsKLSAgICB1bnNpZ25lZCBjaGFyICAqcFNSMjQ7Ci0gICAgdW5zaWduZWQgY2hhciAgKlNSMjU7Ci0gICAgdW5zaWduZWQgY2hhciAgKnBTUjMxOwotICAgIHVuc2lnbmVkIGNoYXIgICpwU1IzMjsKLSAgICB1bnNpZ25lZCBjaGFyICAqcFNSMzM7Ci0gICAgdW5zaWduZWQgY2hhciAgKnBTUjM2OyAgICAgIC8qIGFsYW4gMTIvMDcvMjAwNiAqLwotICAgIHVuc2lnbmVkIGNoYXIgICpwQ1JDRjsKLSAgICB1bnNpZ25lZCBjaGFyICAqcENSRDA7ICAgICAgLyogYWxhbiAxMi8wNy8yMDA2ICovCi0gICAgdW5zaWduZWQgY2hhciAgKnBDUkRFOyAgICAgIC8qIGFsYW4gMTIvMDcvMjAwNiAqLwotICAgIHVuc2lnbmVkIGNoYXIgICpwQ1I4RjsgICAgICAvKiBhbGFuIDEyLzA3LzIwMDYgKi8KLSAgICB1bnNpZ25lZCBjaGFyICAqcFNSNDA7ICAgICAgLyogYWxhbiAxMi8wNy8yMDA2ICovCi0gICAgdW5zaWduZWQgY2hhciAgKnBTUjQxOyAgICAgIC8qIGFsYW4gMTIvMDcvMjAwNiAqLwotICAgIHVuc2lnbmVkIGNoYXIgICpwRFZPU2V0dGluZzsKLSAgICB1bnNpZ25lZCBjaGFyICAqcENSMkU7Ci0gICAgdW5zaWduZWQgY2hhciAgKnBDUjJGOwotICAgIHVuc2lnbmVkIGNoYXIgICpwQ1I0NjsKLSAgICB1bnNpZ25lZCBjaGFyICAqcENSNDc7Ci0gICAgdW5zaWduZWQgY2hhciAgKnBDUlQyRGF0YV8xXzI7Ci0gICAgdW5zaWduZWQgY2hhciAgKnBDUlQyRGF0YV80X0Q7Ci0gICAgdW5zaWduZWQgY2hhciAgKnBDUlQyRGF0YV80X0U7Ci0gICAgdW5zaWduZWQgY2hhciAgKnBDUlQyRGF0YV80XzEwOwotICAgIHN0cnVjdCBYR0lfTUNMS0RhdGFTdHJ1Y3QgICpNQ0xLRGF0YTsKLSAgICBzdHJ1Y3QgWEdJX0VDTEtEYXRhU3RydWN0ICAqRUNMS0RhdGE7CisJdW5zaWduZWQgY2hhciAgKnBTUjA3OworCXVuc2lnbmVkIGNoYXIgICpDUjQ5OworCXVuc2lnbmVkIGNoYXIgICpwU1IxRjsKKwl1bnNpZ25lZCBjaGFyICAqQUdQUmVnOworCXVuc2lnbmVkIGNoYXIgICpTUjE2OworCXVuc2lnbmVkIGNoYXIgICpwU1IyMTsKKwl1bnNpZ25lZCBjaGFyICAqcFNSMjI7CisJdW5zaWduZWQgY2hhciAgKnBTUjIzOworCXVuc2lnbmVkIGNoYXIgICpwU1IyNDsKKwl1bnNpZ25lZCBjaGFyICAqU1IyNTsKKwl1bnNpZ25lZCBjaGFyICAqcFNSMzE7CisJdW5zaWduZWQgY2hhciAgKnBTUjMyOworCXVuc2lnbmVkIGNoYXIgICpwU1IzMzsKKwl1bnNpZ25lZCBjaGFyICAqcFNSMzY7ICAgICAgLyogYWxhbiAxMi8wNy8yMDA2ICovCisJdW5zaWduZWQgY2hhciAgKnBDUkNGOworCXVuc2lnbmVkIGNoYXIgICpwQ1JEMDsgICAgICAvKiBhbGFuIDEyLzA3LzIwMDYgKi8KKwl1bnNpZ25lZCBjaGFyICAqcENSREU7ICAgICAgLyogYWxhbiAxMi8wNy8yMDA2ICovCisJdW5zaWduZWQgY2hhciAgKnBDUjhGOyAgICAgIC8qIGFsYW4gMTIvMDcvMjAwNiAqLworCXVuc2lnbmVkIGNoYXIgICpwU1I0MDsgICAgICAvKiBhbGFuIDEyLzA3LzIwMDYgKi8KKwl1bnNpZ25lZCBjaGFyICAqcFNSNDE7ICAgICAgLyogYWxhbiAxMi8wNy8yMDA2ICovCisJdW5zaWduZWQgY2hhciAgKnBEVk9TZXR0aW5nOworCXVuc2lnbmVkIGNoYXIgICpwQ1IyRTsKKwl1bnNpZ25lZCBjaGFyICAqcENSMkY7CisJdW5zaWduZWQgY2hhciAgKnBDUjQ2OworCXVuc2lnbmVkIGNoYXIgICpwQ1I0NzsKKwl1bnNpZ25lZCBjaGFyICAqcENSVDJEYXRhXzFfMjsKKwl1bnNpZ25lZCBjaGFyICAqcENSVDJEYXRhXzRfRDsKKwl1bnNpZ25lZCBjaGFyICAqcENSVDJEYXRhXzRfRTsKKwl1bnNpZ25lZCBjaGFyICAqcENSVDJEYXRhXzRfMTA7CisJc3RydWN0IFhHSV9NQ0xLRGF0YVN0cnVjdCAgKk1DTEtEYXRhOworCXN0cnVjdCBYR0lfRUNMS0RhdGFTdHJ1Y3QgICpFQ0xLRGF0YTsKIAotICAgIHVuc2lnbmVkIGNoYXIgICAqWEdJX1RWRGVsYXlMaXN0OwotICAgIHVuc2lnbmVkIGNoYXIgICAqWEdJX1RWRGVsYXlMaXN0MjsKLSAgICB1bnNpZ25lZCBjaGFyICAgKkNIVFZWQ0xLVU5UU0M7Ci0gICAgdW5zaWduZWQgY2hhciAgICpDSFRWVkNMS09OVFNDOwotICAgIHVuc2lnbmVkIGNoYXIgICAqQ0hUVlZDTEtVUEFMOwotICAgIHVuc2lnbmVkIGNoYXIgICAqQ0hUVlZDTEtPUEFMOwotICAgIHVuc2lnbmVkIGNoYXIgICAqTlRTQ1RpbWluZzsKLSAgICB1bnNpZ25lZCBjaGFyICAgKlBBTFRpbWluZzsKLSAgICB1bnNpZ25lZCBjaGFyICAgKkhpVFZFeHRUaW1pbmc7Ci0gICAgdW5zaWduZWQgY2hhciAgICpIaVRWU3QxVGltaW5nOwotICAgIHVuc2lnbmVkIGNoYXIgICAqSGlUVlN0MlRpbWluZzsKLSAgICB1bnNpZ25lZCBjaGFyICAgKkhpVFZUZXh0VGltaW5nOwotICAgIHVuc2lnbmVkIGNoYXIgICAqWVBiUHI3NTBwVGltaW5nOwotICAgIHVuc2lnbmVkIGNoYXIgICAqWVBiUHI1MjVwVGltaW5nOwotICAgIHVuc2lnbmVkIGNoYXIgICAqWVBiUHI1MjVpVGltaW5nOwotICAgIHVuc2lnbmVkIGNoYXIgICAqSGlUVkdyb3VwM0RhdGE7Ci0gICAgdW5zaWduZWQgY2hhciAgICpIaVRWR3JvdXAzU2ltdTsKLSAgICB1bnNpZ25lZCBjaGFyICAgKkhpVFZHcm91cDNUZXh0OwotICAgIHVuc2lnbmVkIGNoYXIgICAqUmVuNTI1cEdyb3VwMzsKLSAgICB1bnNpZ25lZCBjaGFyICAgKlJlbjc1MHBHcm91cDM7Ci0gICAgdW5zaWduZWQgY2hhciAgICpTY3JlZW5PZmZzZXQ7Ci0gICAgdW5zaWduZWQgY2hhciAgICpwWEdJTmV3X0RSQU1UeXBlRGVmaW5pdGlvbjsKLSAgICB1bnNpZ25lZCBjaGFyICAgKnBYR0lOZXdfSTJDRGVmaW5pdGlvbiA7Ci0gICAgdW5zaWduZWQgY2hhciAgICpwWEdJTmV3X0NSOTcgOworCXVuc2lnbmVkIGNoYXIgICAqWEdJX1RWRGVsYXlMaXN0OworCXVuc2lnbmVkIGNoYXIgICAqWEdJX1RWRGVsYXlMaXN0MjsKKwl1bnNpZ25lZCBjaGFyICAgKkNIVFZWQ0xLVU5UU0M7CisJdW5zaWduZWQgY2hhciAgICpDSFRWVkNMS09OVFNDOworCXVuc2lnbmVkIGNoYXIgICAqQ0hUVlZDTEtVUEFMOworCXVuc2lnbmVkIGNoYXIgICAqQ0hUVlZDTEtPUEFMOworCXVuc2lnbmVkIGNoYXIgICAqTlRTQ1RpbWluZzsKKwl1bnNpZ25lZCBjaGFyICAgKlBBTFRpbWluZzsKKwl1bnNpZ25lZCBjaGFyICAgKkhpVFZFeHRUaW1pbmc7CisJdW5zaWduZWQgY2hhciAgICpIaVRWU3QxVGltaW5nOworCXVuc2lnbmVkIGNoYXIgICAqSGlUVlN0MlRpbWluZzsKKwl1bnNpZ25lZCBjaGFyICAgKkhpVFZUZXh0VGltaW5nOworCXVuc2lnbmVkIGNoYXIgICAqWVBiUHI3NTBwVGltaW5nOworCXVuc2lnbmVkIGNoYXIgICAqWVBiUHI1MjVwVGltaW5nOworCXVuc2lnbmVkIGNoYXIgICAqWVBiUHI1MjVpVGltaW5nOworCXVuc2lnbmVkIGNoYXIgICAqSGlUVkdyb3VwM0RhdGE7CisJdW5zaWduZWQgY2hhciAgICpIaVRWR3JvdXAzU2ltdTsKKwl1bnNpZ25lZCBjaGFyICAgKkhpVFZHcm91cDNUZXh0OworCXVuc2lnbmVkIGNoYXIgICAqUmVuNTI1cEdyb3VwMzsKKwl1bnNpZ25lZCBjaGFyICAgKlJlbjc1MHBHcm91cDM7CisJdW5zaWduZWQgY2hhciAgICpTY3JlZW5PZmZzZXQ7CisJdW5zaWduZWQgY2hhciAgICpwWEdJTmV3X0RSQU1UeXBlRGVmaW5pdGlvbjsKKwl1bnNpZ25lZCBjaGFyICAgKnBYR0lOZXdfSTJDRGVmaW5pdGlvbiA7CisJdW5zaWduZWQgY2hhciAgICpwWEdJTmV3X0NSOTcgOwogCi0gICAgc3RydWN0IFhHSTMzMF9MQ0RDYXBTdHJ1Y3QgICpMQ0RDYXBMaXN0OwotICAgIHN0cnVjdCBYR0kyMV9MVkRTQ2FwU3RydWN0ICAqWEcyMV9MVkRTQ2FwTGlzdDsKKwlzdHJ1Y3QgWEdJMzMwX0xDRENhcFN0cnVjdCAgKkxDRENhcExpc3Q7CisJc3RydWN0IFhHSTIxX0xWRFNDYXBTdHJ1Y3QgICpYRzIxX0xWRFNDYXBMaXN0OwogCi0gICAgc3RydWN0IFhHSV9UaW1pbmdIU3RydWN0ICAqVGltaW5nSDsKLSAgICBzdHJ1Y3QgWEdJX1RpbWluZ1ZTdHJ1Y3QgICpUaW1pbmdWOworCXN0cnVjdCBYR0lfVGltaW5nSFN0cnVjdCAgKlRpbWluZ0g7CisJc3RydWN0IFhHSV9UaW1pbmdWU3RydWN0ICAqVGltaW5nVjsKIAotICAgIHN0cnVjdCBYR0lfU3RTdHJ1Y3QgICAgICAgICAgKlNNb2RlSURUYWJsZTsKLSAgICBzdHJ1Y3QgWEdJX1N0YW5kVGFibGVTdHJ1Y3QgICpTdGFuZFRhYmxlOwotICAgIHN0cnVjdCBYR0lfRXh0U3RydWN0ICAgICAgICAgKkVNb2RlSURUYWJsZTsKLSAgICBzdHJ1Y3QgWEdJX0V4dDJTdHJ1Y3QgICAgICAgICpSZWZJbmRleDsKLSAgICAvKiBYR0lOZXdfQ1JUMVRhYmxlU3RydWN0ICpDUlQxVGFibGU7ICovCi0gICAgc3RydWN0IFhHSV9DUlQxVGFibGVTdHJ1Y3QgICAgKlhHSU5FV1VCX0NSVDFUYWJsZTsKLSAgICBzdHJ1Y3QgWEdJX1ZDTEtEYXRhU3RydWN0ICAgICpWQ0xLRGF0YTsKLSAgICBzdHJ1Y3QgWEdJX1ZCVkNMS0RhdGFTdHJ1Y3QgICpWQlZDTEtEYXRhOwotICAgIHN0cnVjdCBYR0lfU3RSZXNJbmZvU3RydWN0ICAgKlN0UmVzSW5mbzsKLSAgICBzdHJ1Y3QgWEdJX01vZGVSZXNJbmZvU3RydWN0ICpNb2RlUmVzSW5mbzsKLSAgICBzdHJ1Y3QgWEdJX1hHMjFDUlQxU3RydWN0CSAgKlVwZGF0ZUNSVDE7CisJc3RydWN0IFhHSV9TdFN0cnVjdCAgICAgICAgICAqU01vZGVJRFRhYmxlOworCXN0cnVjdCBYR0lfU3RhbmRUYWJsZVN0cnVjdCAgKlN0YW5kVGFibGU7CisJc3RydWN0IFhHSV9FeHRTdHJ1Y3QgICAgICAgICAqRU1vZGVJRFRhYmxlOworCXN0cnVjdCBYR0lfRXh0MlN0cnVjdCAgICAgICAgKlJlZkluZGV4OworCS8qIFhHSU5ld19DUlQxVGFibGVTdHJ1Y3QgKkNSVDFUYWJsZTsgKi8KKwlzdHJ1Y3QgWEdJX0NSVDFUYWJsZVN0cnVjdCAgICAqWEdJTkVXVUJfQ1JUMVRhYmxlOworCXN0cnVjdCBYR0lfVkNMS0RhdGFTdHJ1Y3QgICAgKlZDTEtEYXRhOworCXN0cnVjdCBYR0lfVkJWQ0xLRGF0YVN0cnVjdCAgKlZCVkNMS0RhdGE7CisJc3RydWN0IFhHSV9TdFJlc0luZm9TdHJ1Y3QgICAqU3RSZXNJbmZvOworCXN0cnVjdCBYR0lfTW9kZVJlc0luZm9TdHJ1Y3QgKk1vZGVSZXNJbmZvOworCXN0cnVjdCBYR0lfWEcyMUNSVDFTdHJ1Y3QJICAqVXBkYXRlQ1JUMTsKIH07ICAvKiBfc3RydWN0IHZiX2RldmljZV9pbmZvICovCiAKIAotc3RydWN0IFRpbWluZ0luZm8KLXsKLSAgICB1bnNpZ25lZCBzaG9ydCAgICBIb3Jpem9udGFsX0FDVElWRTsKLSAgICB1bnNpZ25lZCBzaG9ydCAgICBIb3Jpem9udGFsX0ZQOwotICAgIHVuc2lnbmVkIHNob3J0ICAgIEhvcml6b250YWxfU1lOQzsKLSAgICB1bnNpZ25lZCBzaG9ydCAgICBIb3Jpem9udGFsX0JQOwotICAgIHVuc2lnbmVkIHNob3J0ICAgIFZlcnRpY2FsX0FDVElWRTsKLSAgICB1bnNpZ25lZCBzaG9ydCAgICBWZXJ0aWNhbF9GUDsKLSAgICB1bnNpZ25lZCBzaG9ydCAgICBWZXJ0aWNhbF9TWU5DOwotICAgIHVuc2lnbmVkIHNob3J0ICAgIFZlcnRpY2FsX0JQOwotICAgIGRvdWJsZSAgICBEQ0xLOwotICAgIHVuc2lnbmVkIGNoYXIgICAgIEZyYW1lUmF0ZTsKLSAgICB1bnNpZ25lZCBjaGFyICAgICBJbnRlcmxhY2U7Ci0gICAgdW5zaWduZWQgc2hvcnQgICAgTWFyZ2luOworc3RydWN0IFRpbWluZ0luZm8geworCXVuc2lnbmVkIHNob3J0IEhvcml6b250YWxfQUNUSVZFOworCXVuc2lnbmVkIHNob3J0IEhvcml6b250YWxfRlA7CisJdW5zaWduZWQgc2hvcnQgSG9yaXpvbnRhbF9TWU5DOworCXVuc2lnbmVkIHNob3J0IEhvcml6b250YWxfQlA7CisJdW5zaWduZWQgc2hvcnQgVmVydGljYWxfQUNUSVZFOworCXVuc2lnbmVkIHNob3J0IFZlcnRpY2FsX0ZQOworCXVuc2lnbmVkIHNob3J0IFZlcnRpY2FsX1NZTkM7CisJdW5zaWduZWQgc2hvcnQgVmVydGljYWxfQlA7CisJZG91YmxlCSAgICAgICBEQ0xLOworCXVuc2lnbmVkIGNoYXIgIEZyYW1lUmF0ZTsKKwl1bnNpZ25lZCBjaGFyICBJbnRlcmxhY2U7CisJdW5zaWduZWQgc2hvcnQgTWFyZ2luOwogfTsKIAogI2RlZmluZSBfVkJfU1RSVUNUXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX3RhYmxlLmggYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfdGFibGUuaAppbmRleCBkNzFjZDU1Li5kMTBkZTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfdGFibGUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfdGFibGUuaApAQCAtMSwxODYgKzEsMjA2IEBACiAjZGVmaW5lICBUYXA0CiAKLS8veWlsaW4gbW9kaWZ5IGZvciB4Z2kyMAotc3RhdGljIHN0cnVjdCBYR0lfTUNMS0RhdGFTdHJ1Y3QgWEdJMzQwTmV3X01DTEtEYXRhW10gPQotewotIHsgMHgxNiwweDAxLDB4MDEsMTY2fSwKLSB7IDB4MTksMHgwMiwweDAxLDEyNH0sCi0geyAweDdDLDB4MDgsMHgwMSwyMDB9LAotIHsgMHg3OSwweDA2LDB4MDEsMjUwfSwKLSB7IDB4MjksMHgwMSwweDgxLDMwMX0sCi0geyAweDVjLDB4MjMsMHgwMSwxNjZ9LAotIHsgMHg1YywweDIzLDB4MDEsMTY2fSwKLSB7IDB4NWMsMHgyMywweDAxLDE2Nn0KKy8qIHlpbGluIG1vZGlmeSBmb3IgeGdpMjAgKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJX01DTEtEYXRhU3RydWN0IFhHSTM0ME5ld19NQ0xLRGF0YVtdID0geworCXsweDE2LCAweDAxLCAweDAxLCAxNjZ9LAorCXsweDE5LCAweDAyLCAweDAxLCAxMjR9LAorCXsweDdDLCAweDA4LCAweDAxLCAyMDB9LAorCXsweDc5LCAweDA2LCAweDAxLCAyNTB9LAorCXsweDI5LCAweDAxLCAweDgxLCAzMDF9LAorCXsweDVjLCAweDIzLCAweDAxLCAxNjZ9LAorCXsweDVjLCAweDIzLCAweDAxLCAxNjZ9LAorCXsweDVjLCAweDIzLCAweDAxLCAxNjZ9CiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSV9NQ0xLRGF0YVN0cnVjdCBYR0kyN05ld19NQ0xLRGF0YVtdID0KLXsKLSB7IDB4NWMsMHgyMywweDAxLDE2Nn0sCi0geyAweDE5LDB4MDIsMHgwMSwxMjR9LAotIHsgMHg3QywweDA4LDB4ODAsMjAwfSwKLSB7IDB4NzksMHgwNiwweDgwLDI1MH0sCi0geyAweDI5LDB4MDEsMHg4MSwzMDB9LAotIHsgMHg1YywweDIzLDB4MDEsMTY2fSwKLSB7IDB4NWMsMHgyMywweDAxLDE2Nn0sCi0geyAweDVjLDB4MjMsMHgwMSwxNjZ9CitzdGF0aWMgc3RydWN0IFhHSV9NQ0xLRGF0YVN0cnVjdCBYR0kyN05ld19NQ0xLRGF0YVtdID0geworCXsweDVjLCAweDIzLCAweDAxLCAxNjZ9LAorCXsweDE5LCAweDAyLCAweDAxLCAxMjR9LAorCXsweDdDLCAweDA4LCAweDgwLCAyMDB9LAorCXsweDc5LCAweDA2LCAweDgwLCAyNTB9LAorCXsweDI5LCAweDAxLCAweDgxLCAzMDB9LAorCXsweDVjLCAweDIzLCAweDAxLCAxNjZ9LAorCXsweDVjLCAweDIzLCAweDAxLCAxNjZ9LAorCXsweDVjLCAweDIzLCAweDAxLCAxNjZ9CiB9OwogCi0vL3lpbGluIG1vZGlmeSBmb3IgeGdpMjAKLXN0YXRpYyBzdHJ1Y3QgWEdJX0VDTEtEYXRhU3RydWN0IFhHSTM0MF9FQ0xLRGF0YVtdID0KLXsKLSB7IDB4NWMsMHgyMywweDAxLDE2Nn0sCi0geyAweDU1LDB4ODQsMHgwMSwxMjN9LAotIHsgMHg3QywweDA4LDB4MDEsMjAwfSwKLSB7IDB4NzksMHgwNiwweDAxLDI1MH0sCi0geyAweDI5LDB4MDEsMHg4MSwzMDF9LAotIHsgMHg1YywweDIzLDB4MDEsMTY2fSwKLSB7IDB4NWMsMHgyMywweDAxLDE2Nn0sCi0geyAweDVjLDB4MjMsMHgwMSwxNjZ9CisvKiB5aWxpbiBtb2RpZnkgZm9yIHhnaTIwICovCitzdGF0aWMgc3RydWN0IFhHSV9FQ0xLRGF0YVN0cnVjdCBYR0kzNDBfRUNMS0RhdGFbXSA9IHsKKwl7MHg1YywgMHgyMywgMHgwMSwgMTY2fSwKKwl7MHg1NSwgMHg4NCwgMHgwMSwgMTIzfSwKKwl7MHg3QywgMHgwOCwgMHgwMSwgMjAwfSwKKwl7MHg3OSwgMHgwNiwgMHgwMSwgMjUwfSwKKwl7MHgyOSwgMHgwMSwgMHg4MSwgMzAxfSwKKwl7MHg1YywgMHgyMywgMHgwMSwgMTY2fSwKKwl7MHg1YywgMHgyMywgMHgwMSwgMTY2fSwKKwl7MHg1YywgMHgyMywgMHgwMSwgMTY2fQogfTsKIAotCi0KIHN0YXRpYyB1bnNpZ25lZCBjaGFyIFhHSTM0MF9TUjEzWzRdWzhdID0gewotezB4MzUsMHg0NSwweGIxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogU1IxMyAqLwotezB4NDEsMHg1MSwweDVjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogU1IxNCAqLwotezB4MzEsMHg0MiwweDQyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogU1IxOCAqLwotezB4MDMsMHgwMywweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0vKiBTUjFCICovCisJezB4MzUsIDB4NDUsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAvKiBTUjEzICovCisJezB4NDEsIDB4NTEsIDB4NWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAvKiBTUjE0ICovCisJezB4MzEsIDB4NDIsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAvKiBTUjE4ICovCisJezB4MDMsIDB4MDMsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9ICAvKiBTUjFCICovCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBYR0kzNDBfY3I0MVsyNF1bOF0gPQote3sweDIwLDB4NTAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDAgQ1I0MSAqLwotezB4YzQsMHg0MCwweDg0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMSBDUjhBICovCi17MHhjNCwweDQwLDB4ODQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwvKiAyIENSOEIgKi8KLXsweGI1LDB4YTQsMHhhNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotezB4ZjAsMHhmMCwweGYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi17MHg5MCwweDkwLDB4MjQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwvKiA1IENSNjggKi8KLXsweDc3LDB4NzcsMHg0NCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDYgQ1I2OSAqLwotezB4NzcsMHg3NywweDQ0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogNyBDUjZBICovCi17MHhmZiwweGZmLDB4ZmYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwvKiA4IENSNkQgKi8KLXsweDU1LDB4NTUsMHg1NSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDkgQ1I4MCAqLwotezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMTAgQ1I4MSAqLwotezB4ODgsMHhhOCwweDQ4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMTEgQ1I4MiAqLwotezB4NDQsMHg0NCwweDc3LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMTIgQ1I4NSAqLwotezB4NDgsMHg0OCwweDg4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMTMgQ1I4NiAqLwotezB4NTQsMHg1NCwweDQ0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMTQgQ1I5MCAqLwotezB4NTQsMHg1NCwweDQ0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMTUgQ1I5MSAqLwotezB4MGEsMHgwYSwweDA3LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMTYgQ1I5MiAqLwotezB4NDQsMHg0NCwweDQ0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMTcgQ1I5MyAqLwotezB4MTAsMHgxMCwweDBBLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMTggQ1I5NCAqLwotezB4MTEsMHgxMSwweDBhLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMTkgQ1I5NSAqLwotezB4MDUsMHgwNSwweDA1LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMjAgQ1I5NiAqLwotezB4ZjAsMHhmMCwweGYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMjEgQ1JDMyAqLwotezB4MDUsMHgwMCwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMjIgQ1JDNCAqLwotezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0vKiAyMyBDUkM1ICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBYR0kzNDBfY3I0MVsyNF1bOF0gPSB7CisJezB4MjAsIDB4NTAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAvKiAwIENSNDEgKi8KKwl7MHhjNCwgMHg0MCwgMHg4NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDEgQ1I4QSAqLworCXsweGM0LCAweDQwLCAweDg0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgLyogMiBDUjhCICovCisJezB4YjUsIDB4YTQsIDB4YTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweGYwLCAweGYwLCAweGYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwKKwl7MHg5MCwgMHg5MCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDUgQ1I2OCAqLworCXsweDc3LCAweDc3LCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgLyogNiBDUjY5ICovCisJezB4NzcsIDB4NzcsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAvKiA3IENSNkEgKi8KKwl7MHhmZiwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDggQ1I2RCAqLworCXsweDU1LCAweDU1LCAweDU1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgLyogOSBDUjgwICovCisJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAvKiAxMCBDUjgxICovCisJezB4ODgsIDB4YTgsIDB4NDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAvKiAxMSBDUjgyICovCisJezB4NDQsIDB4NDQsIDB4NzcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAvKiAxMiBDUjg1ICovCisJezB4NDgsIDB4NDgsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAvKiAxMyBDUjg2ICovCisJezB4NTQsIDB4NTQsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAvKiAxNCBDUjkwICovCisJezB4NTQsIDB4NTQsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAvKiAxNSBDUjkxICovCisJezB4MGEsIDB4MGEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAvKiAxNiBDUjkyICovCisJezB4NDQsIDB4NDQsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAvKiAxNyBDUjkzICovCisJezB4MTAsIDB4MTAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAvKiAxOCBDUjk0ICovCisJezB4MTEsIDB4MTEsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAvKiAxOSBDUjk1ICovCisJezB4MDUsIDB4MDUsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAvKiAyMCBDUjk2ICovCisJezB4ZjAsIDB4ZjAsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAvKiAyMSBDUkMzICovCisJezB4MDUsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAvKiAyMiBDUkM0ICovCisJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9ICAvKiAyMyBDUkM1ICovCiB9OwogCi0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIFhHSTI3X2NyNDFbMjRdWzhdID0KLXsKLXsweDIwLDB4NDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDAgQ1I0MSAqLwotezB4QzQsMHg0MCwweDg0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMSBDUjhBICovCi17MHhDNCwweDQwLDB4ODQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwvKiAyIENSOEIgKi8KLXsweEI1LDB4MTMsMHhhNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDMgQ1I0MFs3XSxDUjk5WzI6MF0sQ1I0NVszOjBdKi8KLXsweGYwLDB4ZjUsMHhmMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDQgQ1I1OSAqLwotezB4OTAsMHg5MCwweDI0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogNSBDUjY4ICovCi17MHg3NywweDY3LDB4NDQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwvKiA2IENSNjkgKi8KLXsweDc3LDB4NzcsMHg0NCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDcgQ1I2QSAqLwotezB4ZmYsMHhmZiwweGZmLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogOCBDUjZEICovCi17MHg1NSwweDU1LDB4NTUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwvKiA5IENSODAgKi8KLXsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDEwIENSODEgKi8KLXsweDg4LDB4Y2MsMHg0OCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDExIENSODIgKi8KLXsweDQ0LDB4ODgsMHg3NywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDEyIENSODUgKi8KLXsweDQ4LDB4ODgsMHg4OCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDEzIENSODYgKi8KLXsweDU0LDB4MzIsMHg0NCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDE0IENSOTAgKi8KLXsweDU0LDB4MzMsMHg0NCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDE1IENSOTEgKi8KLXsweDBhLDB4MDcsMHgwNywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDE2IENSOTIgKi8KLXsweDQ0LDB4NjMsMHg0NCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDE3IENSOTMgKi8KLXsweDEwLDB4MTQsMHgwQSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDE4IENSOTQgKi8KLXsweDExLDB4MEIsMHgwQywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDE5IENSOTUgKi8KLXsweDA1LDB4MjIsMHgwNSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDIwIENSOTYgKi8KLXsweGYwLDB4ZjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDIxIENSQzMgKi8KLXsweDA1LDB4MDAsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDIyIENSQzQgKi8KLXsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LyogMjMgQ1JDNSAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgWEdJMjdfY3I0MVsyNF1bOF0gPSB7CisJezB4MjAsIDB4NDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAvKiAwIENSNDEgKi8KKwl7MHhDNCwgMHg0MCwgMHg4NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDEgQ1I4QSAqLworCXsweEM0LCAweDQwLCAweDg0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgLyogMiBDUjhCICovCisJezB4QjUsIDB4MTMsIDB4YTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAvKiAzIENSNDBbN10sCisJCQkJCQkJICAgICAgIENSOTlbMjowXSwKKwkJCQkJCQkgICAgICAgQ1I0NVszOjBdKi8KKwl7MHhmMCwgMHhmNSwgMHhmMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDQgQ1I1OSAqLworCXsweDkwLCAweDkwLCAweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgLyogNSBDUjY4ICovCisJezB4NzcsIDB4NjcsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAvKiA2IENSNjkgKi8KKwl7MHg3NywgMHg3NywgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDcgQ1I2QSAqLworCXsweGZmLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgLyogOCBDUjZEICovCisJezB4NTUsIDB4NTUsIDB4NTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAvKiA5IENSODAgKi8KKwl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDEwIENSODEgKi8KKwl7MHg4OCwgMHhjYywgMHg0OCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDExIENSODIgKi8KKwl7MHg0NCwgMHg4OCwgMHg3NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDEyIENSODUgKi8KKwl7MHg0OCwgMHg4OCwgMHg4OCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDEzIENSODYgKi8KKwl7MHg1NCwgMHgzMiwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDE0IENSOTAgKi8KKwl7MHg1NCwgMHgzMywgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDE1IENSOTEgKi8KKwl7MHgwYSwgMHgwNywgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDE2IENSOTIgKi8KKwl7MHg0NCwgMHg2MywgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDE3IENSOTMgKi8KKwl7MHgxMCwgMHgxNCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDE4IENSOTQgKi8KKwl7MHgxMSwgMHgwQiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDE5IENSOTUgKi8KKwl7MHgwNSwgMHgyMiwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDIwIENSOTYgKi8KKwl7MHhmMCwgMHhmMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDIxIENSQzMgKi8KKwl7MHgwNSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIC8qIDIyIENSQzQgKi8KKwl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0gIC8qIDIzIENSQzUgKi8KIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIFhHSTM0MF9DUjZCWzhdWzRdID0gewotezB4YWEsMHhhYSwweGFhLDB4YWF9LAotezB4YWEsMHhhYSwweGFhLDB4YWF9LAotezB4YWEsMHhhYSwweGFhLDB4YWF9LAotezB4MDAsMHgwMCwweDAwLDB4MDB9LAotezB4MDAsMHgwMCwweDAwLDB4MDB9LAotezB4MDAsMHgwMCwweDAwLDB4MDB9LAotezB4MDAsMHgwMCwweDAwLDB4MDB9LAotezB4MDAsMHgwMCwweDAwLDB4MDB9CisJezB4YWEsIDB4YWEsIDB4YWEsIDB4YWF9LAorCXsweGFhLCAweGFhLCAweGFhLCAweGFhfSwKKwl7MHhhYSwgMHhhYSwgMHhhYSwgMHhhYX0sCisJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweDAwLCAweDAwLCAweDAwLCAweDAwfSwKKwl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweDAwLCAweDAwLCAweDAwLCAweDAwfQogfTsKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgWEdJMzQwX0NSNkVbOF1bNF0gPSB7Ci17MHgwMCwweDAwLDB4MDAsMHgwMH0sCi17MHgwMCwweDAwLDB4MDAsMHgwMH0sCi17MHgwMCwweDAwLDB4MDAsMHgwMH0sCi17MHgwMCwweDAwLDB4MDAsMHgwMH0sCi17MHgwMCwweDAwLDB4MDAsMHgwMH0sCi17MHgwMCwweDAwLDB4MDAsMHgwMH0sCi17MHgwMCwweDAwLDB4MDAsMHgwMH0sCi17MHgwMCwweDAwLDB4MDAsMHgwMH0KKwl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweDAwLCAweDAwLCAweDAwLCAweDAwfSwKKwl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweDAwLCAweDAwLCAweDAwLCAweDAwfSwKKwl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9CiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBYR0kzNDBfQ1I2Rls4XVszMl0gPSB7Ci17MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLXsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi17MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLXsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi17MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLXsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9CisJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwKKwl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwKKwl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfQogfTsKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgWEdJMzQwX0NSODlbOF1bMl0gPSB7Ci17MHgwMCwweDAwfSwKLXsweDAwLDB4MDB9LAotezB4MDAsMHgwMH0sCi17MHgwMCwweDAwfSwKLXsweDAwLDB4MDB9LAotezB4MDAsMHgwMH0sCi17MHgwMCwweDAwfSwKLXsweDAwLDB4MDB9CisJezB4MDAsIDB4MDB9LAorCXsweDAwLCAweDAwfSwKKwl7MHgwMCwgMHgwMH0sCisJezB4MDAsIDB4MDB9LAorCXsweDAwLCAweDAwfSwKKwl7MHgwMCwgMHgwMH0sCisJezB4MDAsIDB4MDB9LAorCXsweDAwLCAweDAwfQogfTsKLQkJCSAvKiBDUjQ3LENSNDgsQ1I0OSxDUjRBLENSNEIsQ1I0QyxDUjcwLENSNzEsQ1I3NCxDUjc1LENSNzYsQ1I3NyAqLworLyogQ1I0NyxDUjQ4LENSNDksQ1I0QSxDUjRCLENSNEMsQ1I3MCxDUjcxLENSNzQsQ1I3NSxDUjc2LENSNzcgKi8KIHN0YXRpYyB1bnNpZ25lZCBjaGFyIFhHSTM0MF9BR1BSZWdbMTJdID0gewotCQkJCSAgIDB4MjgsIDB4MjMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MjAsIDB4MDAsCi0JCQkJICAgMHgwNSwgMHhkMCwgMHgxMCwgMHgxMCwgMHgwMH07CisJMHgyOCwgMHgyMywgMHgwMCwgMHgyMCwgMHgwMCwgMHgyMCwKKwkweDAwLCAweDA1LCAweGQwLCAweDEwLCAweDEwLCAweDAwCit9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBYR0kzNDBfU1IxNls0XSA9IHsweDAzLCAweDgzLCAweDAzLCAweDgzfTsKIAogI2lmIDAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIFhHSTMzMF9TUjE1XzFbOF1bOF0gPSB7Ci17MHgwLDB4MCwweDAwLDB4MDAsMHgyMCwweDIwLDB4MDAsMHgwMH0sCi17MHg1LDB4MTUsMHgxNSwweDE1LDB4MTUsMHgxNSwweDAwLDB4MDB9LAotezB4YmEsMHhiYSwweGJhLDB4YmEsMHhCQSwweEJBLDB4MDAsMHgwMH0sCi17MHg1NSwweDU3LDB4NTcsMHhBQiwweEFCLDB4QUIsMHgwMCwweDAwfSwKLXsweDYwLDB4MzQsMHgzNCwweDM0LDB4MzQsMHgzNCwweDAwLDB4MDB9LAotezB4MCwweDgwLDB4ODAsMHg4MCwweDgzLDB4ODMsMHgwMCwweDAwfSwKLXsweDUwLDB4NTAsMHg1MCwweDNDLDB4M0MsMHgzQywweDAwLDB4MDB9LAotezB4MCwweGE1LDB4ZmIsMHhmNiwweEY2LDB4RjYsMHgwMCwweDAwfQorCXsweDAsIDB4MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHgwMH0sCisJezB4NSwgMHgxNSwgMHgxNSwgMHgxNSwgMHgxNSwgMHgxNSwgMHgwMCwgMHgwMH0sCisJezB4YmEsIDB4YmEsIDB4YmEsIDB4YmEsIDB4QkEsIDB4QkEsIDB4MDAsIDB4MDB9LAorCXsweDU1LCAweDU3LCAweDU3LCAweEFCLCAweEFCLCAweEFCLCAweDAwLCAweDAwfSwKKwl7MHg2MCwgMHgzNCwgMHgzNCwgMHgzNCwgMHgzNCwgMHgzNCwgMHgwMCwgMHgwMH0sCisJezB4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MywgMHg4MywgMHgwMCwgMHgwMH0sCisJezB4NTAsIDB4NTAsIDB4NTAsIDB4M0MsIDB4M0MsIDB4M0MsIDB4MDAsIDB4MDB9LAorCXsweDAsIDB4YTUsIDB4ZmIsIDB4ZjYsIDB4RjYsIDB4RjYsIDB4MDAsIDB4MDB9CiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBYR0kzMzBfY3I0MF8xWzE1XVs4XSA9IHsKLXsweDY2LDB4NDAsMHg0MCwweDI4LDB4MjQsMHgyNCwweDAwLDB4MDB9LAotezB4NjYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi17MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLXsweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHgwRiwweDAwLDB4MDB9LAotezB4MDAsMHhmMCwweGYwLDB4ZjAsMHhGMCwweEYwLDB4MDAsMHgwMH0sCi17MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLXsweDEwLDB4MTAsMHgxMCwweDEwLDB4MjAsMHgyMCwweDAwLDB4MDB9LAotezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi17MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLXsweDg4LDB4ODgsMHg4OCwweEFBLDB4QUMsMHhBQywweDAwLDB4MDB9LAotezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi17MHgwMCwweDAwLDB4MDAsMHgwMCwweDc3LDB4NzcsMHgwMCwweDAwfSwKLXsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi17MHgwMCwweEEyLDB4MDAsMHgwMCwweEEyLDB4QTIsMHgwMCwweDAwfSwKKwl7MHg2NiwgMHg0MCwgMHg0MCwgMHgyOCwgMHgyNCwgMHgyNCwgMHgwMCwgMHgwMH0sCisJezB4NjYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwKKwl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwRiwgMHgwRiwgMHgwMCwgMHgwMH0sCisJezB4MDAsIDB4ZjAsIDB4ZjAsIDB4ZjAsIDB4RjAsIDB4RjAsIDB4MDAsIDB4MDB9LAorCXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwKKwl7MHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHgwMH0sCisJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwKKwl7MHg4OCwgMHg4OCwgMHg4OCwgMHhBQSwgMHhBQywgMHhBQywgMHgwMCwgMHgwMH0sCisJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDc3LCAweDAwLCAweDAwfSwKKwl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweDAwLCAweEEyLCAweDAwLCAweDAwLCAweEEyLCAweEEyLCAweDAwLCAweDAwfSwKIH07CiAjZW5kaWYKIApAQCAtMTkxLDMyNDggKzIxMSwzMzgwIEBACiBzdGF0aWMgdW5zaWduZWQgY2hhciBYRzQwX0NSQ0YgPSAweDEzOwogc3RhdGljIHVuc2lnbmVkIGNoYXIgWEc0MF9EUkFNVHlwZURlZmluaXRpb24gPSAweEZGIDsKIAotc3RhdGljIHN0cnVjdCBYR0lfU3RTdHJ1Y3QgWEdJMzMwX1NNb2RlSURUYWJsZVtdID0KLXsKLSB7MHgwMSwweDkyMDgsMHgwMSwweDAwLDB4MTAsMHgwMCwweDAwLDB4MDEsMHgwMH0sCi0gezB4MDEsMHgxMjEwLDB4MTQsMHgwMSwweDAwLDB4MDEsMHgwMCwweDAxLDB4MDB9LAotIHsweDAxLDB4MTAxMCwweDE3LDB4MDIsMHgxMSwweDAwLDB4MDAsMHgwMSwweDAxfSwKLSB7MHgwMywweDgyMDgsMHgwMywweDAwLDB4MTQsMHgwMCwweDAwLDB4MDEsMHgwMn0sCi0gezB4MDMsMHgwMjEwLDB4MTYsMHgwMSwweDA0LDB4MDEsMHgwMCwweDAxLDB4MDJ9LAotIHsweDAzLDB4MDAxMCwweDE4LDB4MDIsMHgxNSwweDAwLDB4MDAsMHgwMSwweDAzfSwKLSB7MHgwNSwweDkyMDksMHgwNSwweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwNH0sCi0gezB4MDYsMHg4MjA5LDB4MDYsMHgwMCwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDV9LAotIHsweDA3LDB4MDAwMCwweDA3LDB4MDMsMHgwNSwweDAzLDB4MDAsMHgwMSwweDAzfSwKLSB7MHgwNywweDAwMDAsMHgxOSwweDAyLDB4MTUsMHgwMiwweDAwLDB4MDEsMHgwM30sCi0gezB4MGQsMHg5MjBhLDB4MGQsMHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDR9LAotIHsweDBlLDB4ODIwYSwweDBlLDB4MDAsMHgxNCwweDAwLDB4MDAsMHgwMCwweDA1fSwKLSB7MHgwZiwweDAyMDIsMHgxMSwweDAxLDB4MDQsMHgwMSwweDAwLDB4MDAsMHgwNX0sCi0gezB4MTAsMHgwMjEyLDB4MTIsMHgwMSwweDA0LDB4MDEsMHgwMCwweDAwLDB4MDV9LAotIHsweDExLDB4MDIxMiwweDFhLDB4MDQsMHgyNCwweDA0LDB4MDAsMHgwMCwweDA1fSwKLSB7MHgxMiwweDAyMTIsMHgxYiwweDA0LDB4MjQsMHgwNCwweDAwLDB4MDAsMHgwNX0sCi0gezB4MTMsMHgwMjFiLDB4MWMsMHgwMCwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDR9LAotIHsweDEyLDB4MDAxMCwweDE4LDB4MDIsMHgyNCwweDAyLDB4MDAsMHgwMCwweDA1fSwvKiBTdF9DUlQyQ1JUQzIgbm90IHN1cmUgKi8KLSB7MHgxMiwweDAyMTAsMHgxOCwweDAxLDB4MjQsMHgwMSwweDAwLDB4MDAsMHgwNX0sLyogU3RfQ1JUMkNSVEMyIG5vdCBzdXJlICovCi0gezB4ZmYsMHgwMDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9CitzdGF0aWMgc3RydWN0IFhHSV9TdFN0cnVjdCBYR0kzMzBfU01vZGVJRFRhYmxlW10gPSB7CisJezB4MDEsIDB4OTIwOCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMH0sCisJezB4MDEsIDB4MTIxMCwgMHgxNCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMH0sCisJezB4MDEsIDB4MTAxMCwgMHgxNywgMHgwMiwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMX0sCisJezB4MDMsIDB4ODIwOCwgMHgwMywgMHgwMCwgMHgxNCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMn0sCisJezB4MDMsIDB4MDIxMCwgMHgxNiwgMHgwMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMn0sCisJezB4MDMsIDB4MDAxMCwgMHgxOCwgMHgwMiwgMHgxNSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwM30sCisJezB4MDUsIDB4OTIwOSwgMHgwNSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNH0sCisJezB4MDYsIDB4ODIwOSwgMHgwNiwgMHgwMCwgMHgxNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNX0sCisJezB4MDcsIDB4MDAwMCwgMHgwNywgMHgwMywgMHgwNSwgMHgwMywgMHgwMCwgMHgwMSwgMHgwM30sCisJezB4MDcsIDB4MDAwMCwgMHgxOSwgMHgwMiwgMHgxNSwgMHgwMiwgMHgwMCwgMHgwMSwgMHgwM30sCisJezB4MGQsIDB4OTIwYSwgMHgwZCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNH0sCisJezB4MGUsIDB4ODIwYSwgMHgwZSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNX0sCisJezB4MGYsIDB4MDIwMiwgMHgxMSwgMHgwMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNX0sCisJezB4MTAsIDB4MDIxMiwgMHgxMiwgMHgwMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNX0sCisJezB4MTEsIDB4MDIxMiwgMHgxYSwgMHgwNCwgMHgyNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwNX0sCisJezB4MTIsIDB4MDIxMiwgMHgxYiwgMHgwNCwgMHgyNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwNX0sCisJezB4MTMsIDB4MDIxYiwgMHgxYywgMHgwMCwgMHgxNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNH0sCisJezB4MTIsIDB4MDAxMCwgMHgxOCwgMHgwMiwgMHgyNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwNX0sLyogU3RfQ1JUMkNSVEMyCisJCQkJCQkJCSAgICBub3Qgc3VyZSAqLworCXsweDEyLCAweDAyMTAsIDB4MTgsIDB4MDEsIDB4MjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDV9LC8qIFN0X0NSVDJDUlRDMgorCQkJCQkJCQkgICAgbm90IHN1cmUgKi8KKwl7MHhmZiwgMHgwMDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfQogfTsKIAogCi1zdGF0aWMgc3RydWN0IFhHSV9FeHRTdHJ1Y3QgIFhHSTMzMF9FTW9kZUlEVGFibGVbXSA9Ci17Ci0gezB4NmEsMHgyMjEyLDB4MDQwNywweDNhODEsMHgwMTAyLDB4MDgsMHgwNywweDAwLDB4MDAsMHgwNywweDBlfSwKLSB7MHgyZSwweDBhMWIsMHgwMzA2LDB4M2E1NywweDAxMDEsMHgwOCwweDA2LDB4MDAsMHgwMCwweDA1LDB4MDZ9LAotIHsweDJmLDB4MGExYiwweDAzMDUsMHgzYTUwLDB4MDEwMCwweDA4LDB4MDUsMHgwMCwweDAwLDB4MDUsMHgwNX0sCi0gezB4MzAsMHgyYTFiLDB4MDQwNywweDNhODEsMHgwMTAzLDB4MDgsMHgwNywweDAwLDB4MDAsMHgwNywweDBlfSwKLSB7MHgzMSwweDBhMWIsMHgwMzBkLDB4M2I4NSwweDAwMDAsMHgwOCwweDBkLDB4MDAsMHgwMCwweDA2LDB4M2R9LAotIHsweDMyLDB4MGExYiwweDBhMGUsMHgzYjhjLDB4MDAwMCwweDA4LDB4MGUsMHgwMCwweDAwLDB4MDYsMHgzZX0sCi0gezB4MzMsMHgwYTFkLDB4MGEwZCwweDNiODUsMHgwMDAwLDB4MDgsMHgwZCwweDAwLDB4MDAsMHgwNiwweDNkfSwKLSB7MHgzNCwweDJhMWQsMHgwYTBlLDB4M2I4YywweDAwMDAsMHgwOCwweDBlLDB4MDAsMHgwMCwweDA2LDB4M2V9LAotIHsweDM1LDB4MGExZiwweDBhMGQsMHgzYjg1LDB4MDAwMCwweDA4LDB4MGQsMHgwMCwweDAwLDB4MDYsMHgzZH0sCi0gezB4MzYsMHgyYTFmLDB4MGEwZSwweDNiOGMsMHgwMDAwLDB4MDgsMHgwZSwweDAwLDB4MDAsMHgwNiwweDNlfSwKLSB7MHgzNywweDAyMTIsMHgwNTA4LDB4M2FhYiwweDAxMDQsMHgwOCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MTZ9LAotIHsweDM4LDB4MGExYiwweDA1MDgsMHgzYWFiLDB4MDEwNSwweDA4LDB4MDgsMHgwMCwweDAwLDB4MDAsMHgxNn0sCi0gezB4M2EsMHgwZTNiLDB4MDYwOSwweDNhZGMsMHgwMTA3LDB4MDgsMHgwOSwweDAwLDB4MDAsMHgwMCwweDFlfSwKLSB7MHgzYywweDBlM2IsMHgwNzBhLDB4M2FmMiwweDAxMzAsMHgwOCwweDBhLDB4MDAsMHgwMCwweDAwLDB4MjJ9LAkvKiBtb2RlIDE2MDB4MTIwMCBhZGQgQ1JUMk1PREUgWzIwMDMvMTAvMDddICovCi0gezB4M2QsMHgwZTdkLDB4MDcwYSwweDNhZjIsMHgwMTMxLDB4MDgsMHgwYSwweDAwLDB4MDAsMHgwMCwweDIyfSwJLyogbW9kZSAxNjAweDEyMDAgYWRkIENSVDJNT0RFICovCi0gezB4NDAsMHg5YTFjLDB4MDAwMCwweDNhMzQsMHgwMTBkLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwNCwweDAwfSwKLSB7MHg0MSwweDlhMWQsMHgwMDAwLDB4M2EzNCwweDAxMGUsMHgwOCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MDB9LAkvKiBNb2RlSWRJbmRleCA9IDB4MTAgKi8KLSB7MHg0MywweDBhMWMsMHgwMzA2LDB4M2E1NywweDAxMTAsMHgwOCwweDA2LDB4MDAsMHgwMCwweDA1LDB4MDZ9LAotIHsweDQ0LDB4MGExZCwweDAzMDYsMHgzYTU3LDB4MDExMSwweDA4LDB4MDYsMHgwMCwweDAwLDB4MDUsMHgwNn0sCi0gezB4NDYsMHgyYTFjLDB4MDQwNywweDNhODEsMHgwMTEzLDB4MDgsMHgwNywweDAwLDB4MDAsMHgwNywweDBlfSwKLSB7MHg0NywweDJhMWQsMHgwNDA3LDB4M2E4MSwweDAxMTQsMHgwOCwweDA3LDB4MDAsMHgwMCwweDA3LDB4MGV9LAotIHsweDQ5LDB4MGEzYywweDA1MDgsMHgzYWFiLDB4MDExNiwweDA4LDB4MDgsMHgwMCwweDAwLDB4MDAsMHgxNn0sCi0gezB4NGEsMHgwYTNkLDB4MDUwOCwweDNhYWIsMHgwMTE3LDB4MDgsMHgwOCwweDAwLDB4MDAsMHgwMCwweDE2fSwKLSB7MHg0YywweDBlN2MsMHgwNjA5LDB4M2FkYywweDAxMTksMHgwOCwweDA5LDB4MDAsMHgwMCwweDAwLDB4MWV9LAotIHsweDRkLDB4MGU3ZCwweDA2MDksMHgzYWRjLDB4MDExYSwweDA4LDB4MDksMHgwMCwweDAwLDB4MDAsMHgxZX0sCi0gezB4NTAsMHg5YTFiLDB4MDAwMSwweDNhM2IsMHgwMTMyLDB4MDgsMHgwMSwweDAwLDB4MDAsMHgwNCwweDAyfSwKLSB7MHg1MSwweGJhMWIsMHgwMTAzLDB4M2E0MiwweDAxMzMsMHgwOCwweDAzLDB4MDAsMHgwMCwweDA3LDB4MDN9LAotIHsweDUyLDB4OWExYiwweDAyMDQsMHgzYTQ5LDB4MDEzNCwweDA4LDB4MDQsMHgwMCwweDAwLDB4MDAsMHgwNH0sCi0gezB4NTYsMHg5YTFkLDB4MDAwMSwweDNhM2IsMHgwMTM1LDB4MDgsMHgwMSwweDAwLDB4MDAsMHgwNCwweDAyfSwKLSB7MHg1NywweGJhMWQsMHgwMTAzLDB4M2E0MiwweDAxMzYsMHgwOCwweDAzLDB4MDAsMHgwMCwweDA3LDB4MDN9LAotIHsweDU4LDB4OWExZCwweDAyMDQsMHgzYTQ5LDB4MDEzNywweDA4LDB4MDQsMHgwMCwweDAwLDB4MDAsMHgwNH0sCi0gezB4NTksMHg5YTFiLDB4MDAwMCwweDNhMzQsMHgwMTM4LDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwNCwweDAwfSwKLSB7MHg1QSwweDAyMWIsMHgwMDE0LDB4M2I4MywweDAxMzgsMHgwOCwweDAxLDB4MDAsMHgwMCwweDA0LDB4M2Z9LAkvKiBNb2RlSWRJbmRleCA9IDB4MjAgKi8KLSB7MHg1QiwweDBhMWQsMHgwMDE0LDB4M2I4MywweDAxMzUsMHgwOCwweDAxLDB4MDAsMHgwMCwweDA0LDB4M2Z9LAotIHsweDVkLDB4MGExZCwweDAzMDUsMHgzYTUwLDB4MDEzOSwweDA4LDB4MDUsMHgwMCwweDAwLDB4MDcsMHgwNX0sCi0gezB4NjIsMHgwYTNmLDB4MDMwNiwweDNhNTcsMHgwMTNhLDB4MDgsMHgwNiwweDAwLDB4MDAsMHgwNSwweDA2fSwKLSB7MHg2MywweDJhM2YsMHgwNDA3LDB4M2E4MSwweDAxM2IsMHgwOCwweDA3LDB4MDAsMHgwMCwweDA3LDB4MGV9LAotIHsweDY0LDB4MGE3ZiwweDA1MDgsMHgzYWFiLDB4MDEzYywweDA4LDB4MDgsMHgwMCwweDAwLDB4MDAsMHgxNn0sCi0gezB4NjUsMHgwZWZmLDB4MDYwOSwweDNhZGMsMHgwMTNkLDB4MDgsMHgwOSwweDAwLDB4MDAsMHgwMCwweDFlfSwKLSB7MHg2NiwweDBlZmYsMHgwNzBhLDB4M2FmMiwweDAxM2UsMHgwOCwweDBhLDB4MDAsMHgwMCwweDAwLDB4MjJ9LAkvKiBtb2RlIDE2MDB4MTIwMCBhZGQgQ1JUMk1PREUgKi8KLSB7MHg2OCwweDA2N2IsMHgwODBiLDB4M2IxNywweDAxM2YsMHgwOCwweDBiLDB4MDAsMHgwMCwweDAwLDB4Mjl9LAotIHsweDY5LDB4MDZmZCwweDA4MGIsMHgzYjE3LDB4MDE0MCwweDA4LDB4MGIsMHgwMCwweDAwLDB4MDAsMHgyOX0sCi0gezB4NmIsMHgwN2ZmLDB4MDgwYiwweDNiMTcsMHgwMTQxLDB4MTAsMHgwYiwweDAwLDB4MDAsMHgwMCwweDI5fSwKLSB7MHg2YywweDA2N2IsMHgwOTBjLDB4M2IzNywweDAwMDAsMHgwOCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MmZ9LAotIHsweDZkLDB4MDZmZCwweDA5MGMsMHgzYjM3LDB4MDAwMCwweDEwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgyZn0sCi0gezB4NmUsMHgwN2ZmLDB4MDkwYywweDNiMzcsMHgwMDAwLDB4MTAsMHgwYywweDAwLDB4MDAsMHgwMCwweDJmfSwKLSB7MHg3MCwweDJhMWIsMHgwNDEwLDB4M2I1MiwweDAwMDAsMHgwOCwweDEwLDB4MDAsMHgwMCwweDA3LDB4MzR9LAotIHsweDcxLDB4MGExYiwweDA1MTEsMHgzYjYzLDB4MDAwMCwweDA4LDB4MTEsMHgwMCwweDAwLDB4MDAsMHgzN30sCi0gezB4NzQsMHgwYTFkLDB4MDUxMSwweDNiNjMsMHgwMDAwLDB4MDgsMHgxMSwweDAwLDB4MDAsMHgwMCwweDM3fSwJLyogTW9kZUlkSW5kZXggPSAweDMwICovCi0gezB4NzUsMHgwYTNkLDB4MDYxMiwweDNiNzQsMHgwMDAwLDB4MDgsMHgxMiwweDAwLDB4MDAsMHgwMCwweDNhfSwKLSB7MHg3NiwweDJhMWYsMHgwNDEwLDB4M2I1MiwweDAwMDAsMHgwOCwweDEwLDB4MDAsMHgwMCwweDA3LDB4MzR9LAotIHsweDc3LDB4MGExZiwweDA1MTEsMHgzYjYzLDB4MDAwMCwweDA4LDB4MTEsMHgwMCwweDAwLDB4MDAsMHgzN30sCi0gezB4NzgsMHgwYTNmLDB4MDYxMiwweDNiNzQsMHgwMDAwLDB4MDgsMHgxMiwweDAwLDB4MDAsMHgwMCwweDNhfSwKLSB7MHg3OSwweDBhM2IsMHgwNjEyLDB4M2I3NCwweDAwMDAsMHgwOCwweDEyLDB4MDAsMHgwMCwweDAwLDB4M2F9LAotIHsweDdhLDB4MmExZCwweDA0MTAsMHgzYjUyLDB4MDAwMCwweDA4LDB4MTAsMHgwMCwweDAwLDB4MDcsMHgzNH0sCi0gezB4N2IsMHgwZTNiLDB4MDYwZiwweDNhZDAsMHgwMDAwLDB4MDgsMHgwZiwweDAwLDB4MDAsMHgwMCwweDFkfSwKLSB7MHg3YywweDBlN2QsMHgwNjBmLDB4M2FkMCwweDAwMDAsMHgwOCwweDBmLDB4MDAsMHgwMCwweDAwLDB4MWR9LAotIHsweDdkLDB4MGVmZiwweDA2MGYsMHgzYWQwLDB4MDAwMCwweDA4LDB4MGYsMHgwMCwweDAwLDB4MDAsMHgxZH0sCi0gezB4MjAsMHgwZTNiLDB4MEQxNiwweDQ5ZTAsMHgwMDAwLDB4MDgsMHgxNiwweDAwLDB4MDAsMHgwMCwweDQzfSwKLSB7MHgyMSwweDBlN2QsMHgwRDE2LDB4NDllMCwweDAwMDAsMHgwOCwweDE2LDB4MDAsMHgwMCwweDAwLDB4NDN9LAotIHsweDIyLDB4MGVmZiwweDBEMTYsMHg0OWUwLDB4MDAwMCwweDA4LDB4MTYsMHgwMCwweDAwLDB4MDAsMHg0M30sCi0gezB4MjMsMHgwZTNiLDB4MDYxNCwweDQ5ZDUsMHgwMDAwLDB4MDgsMHgxNCwweDAwLDB4MDAsMHgwMCwweDQxfSwKLSB7MHgyNCwweDBlN2QsMHgwNjE0LDB4NDlkNSwweDAwMDAsMHgwOCwweDE0LDB4MDAsMHgwMCwweDAwLDB4NDF9LAotIHsweDI1LDB4MGVmZiwweDA2MTQsMHg0OWQ1LDB4MDAwMCwweDA4LDB4MTQsMHgwMCwweDAwLDB4MDAsMHg0MX0sCi0gezB4MjYsMHgwNjNiLDB4MGMxNSwweDQ5ZGMsMHgwMDAwLDB4MDgsMHgxNSwweDAwLDB4MDAsMHgwMCwweDQyfSwJLyogTW9kZUlkSW5kZXggPSAweDQwICovCi0gezB4MjcsMHgwNjdkLDB4MGMxNSwweDQ5ZGMsMHgwMDAwLDB4MDgsMHgxNSwweDAwLDB4MDAsMHgwMCwweDQyfSwKLSB7MHgyOCwweDA2ZmYsMHgwYzE1LDB4NDlkYywweDAwMDAsMHgwOCwweDE1LDB4MDAsMHgwMCwweDAwLDB4NDJ9LAotIHsweGZmLDB4MDAwMCwweDAwMDAsMHgwMDAwLDB4MDAwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0KK3N0YXRpYyBzdHJ1Y3QgWEdJX0V4dFN0cnVjdCBYR0kzMzBfRU1vZGVJRFRhYmxlW10gPSB7CisJezB4NmEsIDB4MjIxMiwgMHgwNDA3LCAweDNhODEsIDB4MDEwMiwgMHgwOCwKKwkJMHgwNywgMHgwMCwgMHgwMCwgMHgwNywgMHgwZX0sCisJezB4MmUsIDB4MGExYiwgMHgwMzA2LCAweDNhNTcsIDB4MDEwMSwgMHgwOCwKKwkJMHgwNiwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwNn0sCisJezB4MmYsIDB4MGExYiwgMHgwMzA1LCAweDNhNTAsIDB4MDEwMCwgMHgwOCwKKwkJMHgwNSwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwNX0sCisJezB4MzAsIDB4MmExYiwgMHgwNDA3LCAweDNhODEsIDB4MDEwMywgMHgwOCwKKwkJMHgwNywgMHgwMCwgMHgwMCwgMHgwNywgMHgwZX0sCisJezB4MzEsIDB4MGExYiwgMHgwMzBkLCAweDNiODUsIDB4MDAwMCwgMHgwOCwKKwkJMHgwZCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgzZH0sCisJezB4MzIsIDB4MGExYiwgMHgwYTBlLCAweDNiOGMsIDB4MDAwMCwgMHgwOCwKKwkJMHgwZSwgMHgwMCwgMHgwMCwgMHgwNiwgMHgzZX0sCisJezB4MzMsIDB4MGExZCwgMHgwYTBkLCAweDNiODUsIDB4MDAwMCwgMHgwOCwKKwkJMHgwZCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgzZH0sCisJezB4MzQsIDB4MmExZCwgMHgwYTBlLCAweDNiOGMsIDB4MDAwMCwgMHgwOCwKKwkJMHgwZSwgMHgwMCwgMHgwMCwgMHgwNiwgMHgzZX0sCisJezB4MzUsIDB4MGExZiwgMHgwYTBkLCAweDNiODUsIDB4MDAwMCwgMHgwOCwKKwkJMHgwZCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgzZH0sCisJezB4MzYsIDB4MmExZiwgMHgwYTBlLCAweDNiOGMsIDB4MDAwMCwgMHgwOCwKKwkJMHgwZSwgMHgwMCwgMHgwMCwgMHgwNiwgMHgzZX0sCisJezB4MzcsIDB4MDIxMiwgMHgwNTA4LCAweDNhYWIsIDB4MDEwNCwgMHgwOCwKKwkJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNn0sCisJezB4MzgsIDB4MGExYiwgMHgwNTA4LCAweDNhYWIsIDB4MDEwNSwgMHgwOCwKKwkJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNn0sCisJezB4M2EsIDB4MGUzYiwgMHgwNjA5LCAweDNhZGMsIDB4MDEwNywgMHgwOCwKKwkJMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZX0sCisJezB4M2MsIDB4MGUzYiwgMHgwNzBhLCAweDNhZjIsIDB4MDEzMCwgMHgwOCwKKwkJMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMn0sCS8qIG1vZGUgMTYwMHgxMjAwCisJCQkJCQkgICBhZGQgQ1JUMk1PREUgWzIwMDMvMTAvMDddICovCisJezB4M2QsIDB4MGU3ZCwgMHgwNzBhLCAweDNhZjIsIDB4MDEzMSwgMHgwOCwKKwkJMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMn0sCS8qIG1vZGUgMTYwMHgxMjAwCisJCQkJCQkgICBhZGQgQ1JUMk1PREUgKi8KKwl7MHg0MCwgMHg5YTFjLCAweDAwMDAsIDB4M2EzNCwgMHgwMTBkLCAweDA4LAorCQkweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwfSwKKwl7MHg0MSwgMHg5YTFkLCAweDAwMDAsIDB4M2EzNCwgMHgwMTBlLCAweDA4LAorCQkweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwfSwJLyogTW9kZUlkSW5kZXggPSAweDEwICovCisJezB4NDMsIDB4MGExYywgMHgwMzA2LCAweDNhNTcsIDB4MDExMCwgMHgwOCwKKwkJMHgwNiwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwNn0sCisJezB4NDQsIDB4MGExZCwgMHgwMzA2LCAweDNhNTcsIDB4MDExMSwgMHgwOCwKKwkJMHgwNiwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwNn0sCisJezB4NDYsIDB4MmExYywgMHgwNDA3LCAweDNhODEsIDB4MDExMywgMHgwOCwKKwkJMHgwNywgMHgwMCwgMHgwMCwgMHgwNywgMHgwZX0sCisJezB4NDcsIDB4MmExZCwgMHgwNDA3LCAweDNhODEsIDB4MDExNCwgMHgwOCwKKwkJMHgwNywgMHgwMCwgMHgwMCwgMHgwNywgMHgwZX0sCisJezB4NDksIDB4MGEzYywgMHgwNTA4LCAweDNhYWIsIDB4MDExNiwgMHgwOCwKKwkJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNn0sCisJezB4NGEsIDB4MGEzZCwgMHgwNTA4LCAweDNhYWIsIDB4MDExNywgMHgwOCwKKwkJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNn0sCisJezB4NGMsIDB4MGU3YywgMHgwNjA5LCAweDNhZGMsIDB4MDExOSwgMHgwOCwKKwkJMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZX0sCisJezB4NGQsIDB4MGU3ZCwgMHgwNjA5LCAweDNhZGMsIDB4MDExYSwgMHgwOCwKKwkJMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZX0sCisJezB4NTAsIDB4OWExYiwgMHgwMDAxLCAweDNhM2IsIDB4MDEzMiwgMHgwOCwKKwkJMHgwMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMn0sCisJezB4NTEsIDB4YmExYiwgMHgwMTAzLCAweDNhNDIsIDB4MDEzMywgMHgwOCwKKwkJMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgwM30sCisJezB4NTIsIDB4OWExYiwgMHgwMjA0LCAweDNhNDksIDB4MDEzNCwgMHgwOCwKKwkJMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNH0sCisJezB4NTYsIDB4OWExZCwgMHgwMDAxLCAweDNhM2IsIDB4MDEzNSwgMHgwOCwKKwkJMHgwMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMn0sCisJezB4NTcsIDB4YmExZCwgMHgwMTAzLCAweDNhNDIsIDB4MDEzNiwgMHgwOCwKKwkJMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgwM30sCisJezB4NTgsIDB4OWExZCwgMHgwMjA0LCAweDNhNDksIDB4MDEzNywgMHgwOCwKKwkJMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNH0sCisJezB4NTksIDB4OWExYiwgMHgwMDAwLCAweDNhMzQsIDB4MDEzOCwgMHgwOCwKKwkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMH0sCisJezB4NUEsIDB4MDIxYiwgMHgwMDE0LCAweDNiODMsIDB4MDEzOCwgMHgwOCwKKwkJMHgwMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgzZn0sCS8qIE1vZGVJZEluZGV4ID0gMHgyMCAqLworCXsweDVCLCAweDBhMWQsIDB4MDAxNCwgMHgzYjgzLCAweDAxMzUsIDB4MDgsCisJCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4M2Z9LAorCXsweDVkLCAweDBhMWQsIDB4MDMwNSwgMHgzYTUwLCAweDAxMzksIDB4MDgsCisJCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDV9LAorCXsweDYyLCAweDBhM2YsIDB4MDMwNiwgMHgzYTU3LCAweDAxM2EsIDB4MDgsCisJCTB4MDYsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDZ9LAorCXsweDYzLCAweDJhM2YsIDB4MDQwNywgMHgzYTgxLCAweDAxM2IsIDB4MDgsCisJCTB4MDcsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MGV9LAorCXsweDY0LCAweDBhN2YsIDB4MDUwOCwgMHgzYWFiLCAweDAxM2MsIDB4MDgsCisJCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTZ9LAorCXsweDY1LCAweDBlZmYsIDB4MDYwOSwgMHgzYWRjLCAweDAxM2QsIDB4MDgsCisJCTB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWV9LAorCXsweDY2LCAweDBlZmYsIDB4MDcwYSwgMHgzYWYyLCAweDAxM2UsIDB4MDgsCisJCTB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjJ9LAkvKiBtb2RlIDE2MDB4MTIwMAorCQkJCQkJICAgYWRkIENSVDJNT0RFICovCisJezB4NjgsIDB4MDY3YiwgMHgwODBiLCAweDNiMTcsIDB4MDEzZiwgMHgwOCwKKwkJMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOX0sCisJezB4NjksIDB4MDZmZCwgMHgwODBiLCAweDNiMTcsIDB4MDE0MCwgMHgwOCwKKwkJMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOX0sCisJezB4NmIsIDB4MDdmZiwgMHgwODBiLCAweDNiMTcsIDB4MDE0MSwgMHgxMCwKKwkJMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOX0sCisJezB4NmMsIDB4MDY3YiwgMHgwOTBjLCAweDNiMzcsIDB4MDAwMCwgMHgwOCwKKwkJMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZn0sCisJezB4NmQsIDB4MDZmZCwgMHgwOTBjLCAweDNiMzcsIDB4MDAwMCwgMHgxMCwKKwkJMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZn0sCisJezB4NmUsIDB4MDdmZiwgMHgwOTBjLCAweDNiMzcsIDB4MDAwMCwgMHgxMCwKKwkJMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZn0sCisJezB4NzAsIDB4MmExYiwgMHgwNDEwLCAweDNiNTIsIDB4MDAwMCwgMHgwOCwKKwkJMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgzNH0sCisJezB4NzEsIDB4MGExYiwgMHgwNTExLCAweDNiNjMsIDB4MDAwMCwgMHgwOCwKKwkJMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzN30sCisJezB4NzQsIDB4MGExZCwgMHgwNTExLCAweDNiNjMsIDB4MDAwMCwgMHgwOCwKKwkJMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzN30sCS8qIE1vZGVJZEluZGV4ID0gMHgzMCAqLworCXsweDc1LCAweDBhM2QsIDB4MDYxMiwgMHgzYjc0LCAweDAwMDAsIDB4MDgsCisJCTB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2F9LAorCXsweDc2LCAweDJhMWYsIDB4MDQxMCwgMHgzYjUyLCAweDAwMDAsIDB4MDgsCisJCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MzR9LAorCXsweDc3LCAweDBhMWYsIDB4MDUxMSwgMHgzYjYzLCAweDAwMDAsIDB4MDgsCisJCTB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Mzd9LAorCXsweDc4LCAweDBhM2YsIDB4MDYxMiwgMHgzYjc0LCAweDAwMDAsIDB4MDgsCisJCTB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2F9LAorCXsweDc5LCAweDBhM2IsIDB4MDYxMiwgMHgzYjc0LCAweDAwMDAsIDB4MDgsCisJCTB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2F9LAorCXsweDdhLCAweDJhMWQsIDB4MDQxMCwgMHgzYjUyLCAweDAwMDAsIDB4MDgsCisJCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MzR9LAorCXsweDdiLCAweDBlM2IsIDB4MDYwZiwgMHgzYWQwLCAweDAwMDAsIDB4MDgsCisJCTB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWR9LAorCXsweDdjLCAweDBlN2QsIDB4MDYwZiwgMHgzYWQwLCAweDAwMDAsIDB4MDgsCisJCTB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWR9LAorCXsweDdkLCAweDBlZmYsIDB4MDYwZiwgMHgzYWQwLCAweDAwMDAsIDB4MDgsCisJCTB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWR9LAorCXsweDIwLCAweDBlM2IsIDB4MEQxNiwgMHg0OWUwLCAweDAwMDAsIDB4MDgsCisJCTB4MTYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDN9LAorCXsweDIxLCAweDBlN2QsIDB4MEQxNiwgMHg0OWUwLCAweDAwMDAsIDB4MDgsCisJCTB4MTYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDN9LAorCXsweDIyLCAweDBlZmYsIDB4MEQxNiwgMHg0OWUwLCAweDAwMDAsIDB4MDgsCisJCTB4MTYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDN9LAorCXsweDIzLCAweDBlM2IsIDB4MDYxNCwgMHg0OWQ1LCAweDAwMDAsIDB4MDgsCisJCTB4MTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDF9LAorCXsweDI0LCAweDBlN2QsIDB4MDYxNCwgMHg0OWQ1LCAweDAwMDAsIDB4MDgsCisJCTB4MTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDF9LAorCXsweDI1LCAweDBlZmYsIDB4MDYxNCwgMHg0OWQ1LCAweDAwMDAsIDB4MDgsCisJCTB4MTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDF9LAorCXsweDI2LCAweDA2M2IsIDB4MGMxNSwgMHg0OWRjLCAweDAwMDAsIDB4MDgsCisJCTB4MTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDJ9LAkvKiBNb2RlSWRJbmRleCA9IDB4NDAgKi8KKwl7MHgyNywgMHgwNjdkLCAweDBjMTUsIDB4NDlkYywgMHgwMDAwLCAweDA4LAorCQkweDE1LCAweDAwLCAweDAwLCAweDAwLCAweDQyfSwKKwl7MHgyOCwgMHgwNmZmLCAweDBjMTUsIDB4NDlkYywgMHgwMDAwLCAweDA4LAorCQkweDE1LCAweDAwLCAweDAwLCAweDAwLCAweDQyfSwKKwl7MHhmZiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwLAorCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfQogfTsKIAotc3RhdGljIHN0cnVjdCBYR0lfU3RhbmRUYWJsZVN0cnVjdCBYR0kzMzBfU3RhbmRUYWJsZVtdID0KLXsKK3N0YXRpYyBzdHJ1Y3QgWEdJX1N0YW5kVGFibGVTdHJ1Y3QgWEdJMzMwX1N0YW5kVGFibGVbXSA9IHsKIC8qIE1EXzBfMjAwICovCi0gewotICAweDI4LDB4MTgsMHgwOCwweDA4MDAsCi0gIHsweDA5LDB4MDMsMHgwMCwweDAyfSwKLSAgMHg2MywKLSAgezB4MmQsMHgyNywweDI4LDB4OTAsMHgyYiwweGEwLDB4YmYsMHgxZiwKLSAgIDB4MDAsMHhjNywweDA2LDB4MDcsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSAgIDB4OWMsMHg4ZSwweDhmLDB4MTQsMHgxZiwweDk2LDB4YjksMHhhMywKLSAgIDB4ZmZ9LAotICB7MHgwMCwweDAxLDB4MDIsMHgwMywweDA0LDB4MDUsMHgwNiwweDA3LAotICAgMHgxMCwweDExLDB4MTIsMHgxMywweDE0LDB4MTUsMHgxNiwweDE3LAotICAgMHgwOCwweDAwLDB4MGYsMHgwMH0sCi0gIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDBlLDB4MDAsCi0gICAweGZmfQotIH0sCisJeworCQkweDI4LCAweDE4LCAweDA4LCAweDA4MDAsCisJCXsweDA5LCAweDAzLCAweDAwLCAweDAyfSwKKwkJMHg2MywKKwkJezB4MmQsIDB4MjcsIDB4MjgsIDB4OTAsIDB4MmIsIDB4YTAsIDB4YmYsIDB4MWYsCisJCSAweDAwLCAweGM3LCAweDA2LCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkgMHg5YywgMHg4ZSwgMHg4ZiwgMHgxNCwgMHgxZiwgMHg5NiwgMHhiOSwgMHhhMywKKwkJIDB4ZmZ9LAorCQl7MHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKwkJIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCisJCSAweDA4LCAweDAwLCAweDBmLCAweDAwfSwKKwkJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MGUsIDB4MDAsCisJCSAweGZmfQorCX0sCiAvKiBNRF8xXzIwMCAqLwotIHsKLSAgMHgyOCwweDE4LDB4MDgsMHgwODAwLAotICB7MHgwOSwweDAzLDB4MDAsMHgwMn0sCi0gIDB4NjMsCi0gIHsweDJkLDB4MjcsMHgyOCwweDkwLDB4MmIsMHhhMCwweGJmLDB4MWYsCi0gICAweDAwLDB4YzcsMHgwNiwweDA3LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0gICAweDljLDB4OGUsMHg4ZiwweDE0LDB4MWYsMHg5NiwweGI5LDB4YTMsCi0gICAweGZmfSwKLSAgezB4MDAsMHgwMSwweDAyLDB4MDMsMHgwNCwweDA1LDB4MDYsMHgwNywKLSAgIDB4MTAsMHgxMSwweDEyLDB4MTMsMHgxNCwweDE1LDB4MTYsMHgxNywKLSAgIDB4MDgsMHgwMCwweDBmLDB4MDB9LAotICB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHgwZSwweDAwLAotICAgMHhmZn0KLSB9LAorCXsKKwkJMHgyOCwgMHgxOCwgMHgwOCwgMHgwODAwLAorCQl7MHgwOSwgMHgwMywgMHgwMCwgMHgwMn0sCisJCTB4NjMsCisJCXsweDJkLCAweDI3LCAweDI4LCAweDkwLCAweDJiLCAweGEwLCAweGJmLCAweDFmLAorCQkgMHgwMCwgMHhjNywgMHgwNiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJIDB4OWMsIDB4OGUsIDB4OGYsIDB4MTQsIDB4MWYsIDB4OTYsIDB4YjksIDB4YTMsCisJCSAweGZmfSwKKwkJezB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisJCSAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAorCQkgMHgwOCwgMHgwMCwgMHgwZiwgMHgwMH0sCisJCXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDBlLCAweDAwLAorCQkgMHhmZn0KKwl9LAogLyogTURfMl8yMDAgKi8KLSB7Ci0gIDB4NTAsMHgxOCwweDA4LDB4MTAwMCwKLSAgezB4MDEsMHgwMywweDAwLDB4MDJ9LAotICAweDYzLAotICB7MHg1ZiwweDRmLDB4NTAsMHg4MiwweDU1LDB4ODEsMHhiZiwweDFmLAotICAgMHgwMCwweGM3LDB4MDYsMHgwNywweDAwLDB4MDAsMHgwMCwweDAwLAotICAgMHg5YywweDhlLDB4OGYsMHgyOCwweDFmLDB4OTYsMHhiOSwweGEzLAotICAgMHhmZn0sCi0gIHsweDAwLDB4MDEsMHgwMiwweDAzLDB4MDQsMHgwNSwweDA2LDB4MDcsCi0gICAweDEwLDB4MTEsMHgxMiwweDEzLDB4MTQsMHgxNSwweDE2LDB4MTcsCi0gICAweDA4LDB4MDAsMHgwZiwweDAwfSwKLSAgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4MGUsMHgwMCwKLSAgIDB4ZmZ9Ci0gfSwKKwl7CisJCTB4NTAsIDB4MTgsIDB4MDgsIDB4MTAwMCwKKwkJezB4MDEsIDB4MDMsIDB4MDAsIDB4MDJ9LAorCQkgMHg2MywKKwkJezB4NWYsIDB4NGYsIDB4NTAsIDB4ODIsIDB4NTUsIDB4ODEsIDB4YmYsIDB4MWYsCisJCSAweDAwLCAweGM3LCAweDA2LCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkgMHg5YywgMHg4ZSwgMHg4ZiwgMHgyOCwgMHgxZiwgMHg5NiwgMHhiOSwgMHhhMywKKwkJIDB4ZmZ9LAorCQl7MHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKwkJIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCisJCSAweDA4LCAweDAwLCAweDBmLCAweDAwfSwKKwkJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MGUsIDB4MDAsCisJCSAweGZmfQorCX0sCiAvKiBNRF8zXzIwMCAqLwotIHsKLSAgMHg1MCwweDE4LDB4MDgsMHgxMDAwLAotICB7MHgwMSwweDAzLDB4MDAsMHgwMn0sCi0gIDB4NjMsCi0gIHsweDVmLDB4NGYsMHg1MCwweDgyLDB4NTUsMHg4MSwweGJmLDB4MWYsCi0gICAweDAwLDB4YzcsMHgwNiwweDA3LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0gICAweDljLDB4OGUsMHg4ZiwweDI4LDB4MWYsMHg5NiwweGI5LDB4YTMsCi0gICAweGZmfSwKLSAgezB4MDAsMHgwMSwweDAyLDB4MDMsMHgwNCwweDA1LDB4MDYsMHgwNywKLSAgIDB4MTAsMHgxMSwweDEyLDB4MTMsMHgxNCwweDE1LDB4MTYsMHgxNywKLSAgIDB4MDgsMHgwMCwweDBmLDB4MDB9LAotICB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHgwZSwweDAwLAotICAgMHhmZn0KLSB9LAorCXsKKwkJMHg1MCwgMHgxOCwgMHgwOCwgMHgxMDAwLAorCQl7MHgwMSwgMHgwMywgMHgwMCwgMHgwMn0sCisJCSAweDYzLAorCQl7MHg1ZiwgMHg0ZiwgMHg1MCwgMHg4MiwgMHg1NSwgMHg4MSwgMHhiZiwgMHgxZiwKKwkJIDB4MDAsIDB4YzcsIDB4MDYsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCSAweDljLCAweDhlLCAweDhmLCAweDI4LCAweDFmLCAweDk2LCAweGI5LCAweGEzLAorCQkgMHhmZn0sCisJCXsweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorCQkgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywKKwkJIDB4MDgsIDB4MDAsIDB4MGYsIDB4MDB9LAorCQl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwZSwgMHgwMCwKKwkJIDB4ZmZ9CisJfSwKIC8qIE1EXzQgKi8KLSB7Ci0gIDB4MjgsMHgxOCwweDA4LDB4NDAwMCwKLSAgezB4MDksMHgwMywweDAwLDB4MDJ9LAotICAweDYzLAotICB7MHgyZCwweDI3LDB4MjgsMHg5MCwweDJjLDB4ODAsMHhiZiwweDFmLAotICAgMHgwMCwweGMxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotICAgMHg5YywweDhlLDB4OGYsMHgxNCwweDAwLDB4OTYsMHhiOSwweGEyLAotICAgMHhmZn0sCi0gIHsweDAwLDB4MTMsMHgxNSwweDE3LDB4MDIsMHgwNCwweDA2LDB4MDcsCi0gICAweDEwLDB4MTEsMHgxMiwweDEzLDB4MTQsMHgxNSwweDE2LDB4MTcsCi0gICAweDAxLDB4MDAsMHgwMywweDAwfSwKLSAgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4MGYsMHgwMCwKLSAgIDB4ZmZ9Ci0gfSwKKwl7CisJCTB4MjgsIDB4MTgsIDB4MDgsIDB4NDAwMCwKKwkJezB4MDksIDB4MDMsIDB4MDAsIDB4MDJ9LAorCQkgMHg2MywKKwkJezB4MmQsIDB4MjcsIDB4MjgsIDB4OTAsIDB4MmMsIDB4ODAsIDB4YmYsIDB4MWYsCisJCSAweDAwLCAweGMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkgMHg5YywgMHg4ZSwgMHg4ZiwgMHgxNCwgMHgwMCwgMHg5NiwgMHhiOSwgMHhhMiwKKwkJIDB4ZmZ9LAorCQl7MHgwMCwgMHgxMywgMHgxNSwgMHgxNywgMHgwMiwgMHgwNCwgMHgwNiwgMHgwNywKKwkJIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCisJCSAweDAxLCAweDAwLCAweDAzLCAweDAwfSwKKwkJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MGYsIDB4MDAsCisJCSAweGZmfQorCX0sCiAvKiBNRF81ICovCi0gewotICAweDI4LDB4MTgsMHgwOCwweDQwMDAsCi0gIHsweDA5LDB4MDMsMHgwMCwweDAyfSwKLSAgMHg2MywKLSAgezB4MmQsMHgyNywweDI4LDB4OTAsMHgyYywweDgwLDB4YmYsMHgxZiwKLSAgIDB4MDAsMHhjMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSAgIDB4OWMsMHg4ZSwweDhmLDB4MTQsMHgwMCwweDk2LDB4YjksMHhhMiwKLSAgIDB4ZmZ9LAotICB7MHgwMCwweDEzLDB4MTUsMHgxNywweDAyLDB4MDQsMHgwNiwweDA3LAotICAgMHgxMCwweDExLDB4MTIsMHgxMywweDE0LDB4MTUsMHgxNiwweDE3LAotICAgMHgwMSwweDAwLDB4MDMsMHgwMH0sCi0gIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDBmLDB4MDAsCi0gICAweGZmfQotIH0sCisJeworCQkweDI4LCAweDE4LCAweDA4LCAweDQwMDAsCisJCXsweDA5LCAweDAzLCAweDAwLCAweDAyfSwKKwkJIDB4NjMsCisJCXsweDJkLCAweDI3LCAweDI4LCAweDkwLCAweDJjLCAweDgwLCAweGJmLCAweDFmLAorCQkgMHgwMCwgMHhjMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJIDB4OWMsIDB4OGUsIDB4OGYsIDB4MTQsIDB4MDAsIDB4OTYsIDB4YjksIDB4YTIsCisJCSAweGZmfSwKKwkJezB4MDAsIDB4MTMsIDB4MTUsIDB4MTcsIDB4MDIsIDB4MDQsIDB4MDYsIDB4MDcsCisJCSAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAorCQkgMHgwMSwgMHgwMCwgMHgwMywgMHgwMH0sCisJCXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDBmLCAweDAwLAorCQkgMHhmZn0KKwl9LAogLyogTURfNiAqLwotIHsKLSAgMHg1MCwweDE4LDB4MDgsMHg0MDAwLAotICB7MHgwMSwweDAxLDB4MDAsMHgwNn0sCi0gIDB4NjMsCi0gIHsweDVmLDB4NGYsMHg1MCwweDgyLDB4NTUsMHg4MSwweGJmLDB4MWYsCi0gICAweDAwLDB4YzEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0gICAweDljLDB4OGUsMHg4ZiwweDI4LDB4MDAsMHg5NiwweGI5LDB4YzIsCi0gICAweGZmfSwKLSAgezB4MDAsMHgxNywweDE3LDB4MTcsMHgxNywweDE3LDB4MTcsMHgxNywKLSAgIDB4MTcsMHgxNywweDE3LDB4MTcsMHgxNywweDE3LDB4MTcsMHgxNywKLSAgIDB4MDEsMHgwMCwweDAxLDB4MDB9LAotICB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDAwLAotICAgMHhmZn0KLSB9LAorCXsKKwkJMHg1MCwgMHgxOCwgMHgwOCwgMHg0MDAwLAorCQl7MHgwMSwgMHgwMSwgMHgwMCwgMHgwNn0sCisJCSAweDYzLAorCQl7MHg1ZiwgMHg0ZiwgMHg1MCwgMHg4MiwgMHg1NSwgMHg4MSwgMHhiZiwgMHgxZiwKKwkJIDB4MDAsIDB4YzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCSAweDljLCAweDhlLCAweDhmLCAweDI4LCAweDAwLCAweDk2LCAweGI5LCAweGMyLAorCQkgMHhmZn0sCisJCXsweDAwLCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LCAweDE3LAorCQkgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywgMHgxNywKKwkJIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDB9LAorCQl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwMCwKKwkJIDB4ZmZ9CisJfSwKIC8qIE1EXzcgKi8KLSB7Ci0gIDB4NTAsMHgxOCwweDBlLDB4MTAwMCwKLSAgezB4MDAsMHgwMywweDAwLDB4MDN9LAotICAweGE2LAotICB7MHg1ZiwweDRmLDB4NTAsMHg4MiwweDU1LDB4ODEsMHhiZiwweDFmLAotICAgMHgwMCwweDRkLDB4MGIsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLAotICAgMHg4MywweDg1LDB4NWQsMHgyOCwweDBkLDB4NjMsMHhiYSwweGEzLAotICAgMHhmZn0sCi0gIHsweDAwLDB4MDgsMHgwOCwweDA4LDB4MDgsMHgwOCwweDA4LDB4MDgsCi0gICAweDEwLDB4MTgsMHgxOCwweDE4LDB4MTgsMHgxOCwweDE4LDB4MTgsCi0gICAweDBlLDB4MDAsMHgwZiwweDA4fSwKLSAgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4MGEsMHgwMCwKLSAgIDB4ZmZ9Ci0gfSwKKwl7CisJCTB4NTAsIDB4MTgsIDB4MGUsIDB4MTAwMCwKKwkJezB4MDAsIDB4MDMsIDB4MDAsIDB4MDN9LAorCQkgMHhhNiwKKwkJezB4NWYsIDB4NGYsIDB4NTAsIDB4ODIsIDB4NTUsIDB4ODEsIDB4YmYsIDB4MWYsCisJCSAweDAwLCAweDRkLCAweDBiLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkgMHg4MywgMHg4NSwgMHg1ZCwgMHgyOCwgMHgwZCwgMHg2MywgMHhiYSwgMHhhMywKKwkJIDB4ZmZ9LAorCQl7MHgwMCwgMHgwOCwgMHgwOCwgMHgwOCwgMHgwOCwgMHgwOCwgMHgwOCwgMHgwOCwKKwkJIDB4MTAsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsCisJCSAweDBlLCAweDAwLCAweDBmLCAweDA4fSwKKwkJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MGEsIDB4MDAsCisJCSAweGZmfQorCX0sCiAvKiBNREFfREFDICovCi0gewotICAweDAwLDB4MDAsMHgwMCwweDAwMDAsCi0gIHsweDAwLDB4MDAsMHgwMCwweDE1fSwKLSAgMHgxNSwKLSAgezB4MTUsMHgxNSwweDE1LDB4MTUsMHgxNSwweDE1LDB4MTUsMHgxNSwKLSAgIDB4MTUsMHgxNSwweDE1LDB4MTUsMHgxNSwweDE1LDB4M2YsMHgzZiwKLSAgIDB4M2YsMHgzZiwweDNmLDB4M2YsMHgzZiwweDNmLDB4MDAsMHgwMCwKLSAgIDB4MDB9LAotICB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTUsMHgxNSwweDE1LAotICAgMHgxNSwweDE1LDB4MTUsMHgxNSwweDE1LDB4MTUsMHgxNSwweDE1LAotICAgMHgxNSwweDE1LDB4MTUsMHgxNX0sCi0gIHsweDE1LDB4M2YsMHgzZiwweDNmLDB4M2YsMHgzZiwweDNmLDB4M2YsCi0gICAweDNmfQotIH0sCisJeworCQkweDAwLCAweDAwLCAweDAwLCAweDAwMDAsCisJCXsweDAwLCAweDAwLCAweDAwLCAweDE1fSwKKwkJIDB4MTUsCisJCXsweDE1LCAweDE1LCAweDE1LCAweDE1LCAweDE1LCAweDE1LCAweDE1LCAweDE1LAorCQkgMHgxNSwgMHgxNSwgMHgxNSwgMHgxNSwgMHgxNSwgMHgxNSwgMHgzZiwgMHgzZiwKKwkJIDB4M2YsIDB4M2YsIDB4M2YsIDB4M2YsIDB4M2YsIDB4M2YsIDB4MDAsIDB4MDAsCisJCSAweDAwfSwKKwkJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MTUsIDB4MTUsCisJCSAweDE1LCAweDE1LCAweDE1LCAweDE1LCAweDE1LCAweDE1LCAweDE1LCAweDE1LAorCQkgMHgxNSwgMHgxNSwgMHgxNSwgMHgxNX0sCisJCXsweDE1LCAweDNmLCAweDNmLCAweDNmLCAweDNmLCAweDNmLCAweDNmLCAweDNmLAorCQkgMHgzZn0KKwl9LAogLyogQ0dBX0RBQyAqLwotIHsKLSAgMHgwMCwweDEwLDB4MDQsMHgwMTE0LAotICB7MHgxMSwweDA5LDB4MTUsMHgwMH0sCi0gIDB4MTAsCi0gIHsweDA0LDB4MTQsMHgwMSwweDExLDB4MDksMHgxNSwweDJhLDB4M2EsCi0gICAweDJlLDB4M2UsMHgyYiwweDNiLDB4MmYsMHgzZiwweDJhLDB4M2EsCi0gICAweDJlLDB4M2UsMHgyYiwweDNiLDB4MmYsMHgzZiwweDAwLDB4MTAsCi0gICAweDA0fSwKLSAgezB4MTQsMHgwMSwweDExLDB4MDksMHgxNSwweDAwLDB4MTAsMHgwNCwKLSAgIDB4MTQsMHgwMSwweDExLDB4MDksMHgxNSwweDJhLDB4M2EsMHgyZSwKLSAgIDB4M2UsMHgyYiwweDNiLDB4MmZ9LAotICB7MHgzZiwweDJhLDB4M2EsMHgyZSwweDNlLDB4MmIsMHgzYiwweDJmLAotICAgMHgzZn0KLSB9LAorCXsKKwkJMHgwMCwgMHgxMCwgMHgwNCwgMHgwMTE0LAorCQl7MHgxMSwgMHgwOSwgMHgxNSwgMHgwMH0sCisJCSAweDEwLAorCQl7MHgwNCwgMHgxNCwgMHgwMSwgMHgxMSwgMHgwOSwgMHgxNSwgMHgyYSwgMHgzYSwKKwkJIDB4MmUsIDB4M2UsIDB4MmIsIDB4M2IsIDB4MmYsIDB4M2YsIDB4MmEsIDB4M2EsCisJCSAweDJlLCAweDNlLCAweDJiLCAweDNiLCAweDJmLCAweDNmLCAweDAwLCAweDEwLAorCQkgMHgwNH0sCisJCXsweDE0LCAweDAxLCAweDExLCAweDA5LCAweDE1LCAweDAwLCAweDEwLCAweDA0LAorCQkgMHgxNCwgMHgwMSwgMHgxMSwgMHgwOSwgMHgxNSwgMHgyYSwgMHgzYSwgMHgyZSwKKwkJIDB4M2UsIDB4MmIsIDB4M2IsIDB4MmZ9LAorCQl7MHgzZiwgMHgyYSwgMHgzYSwgMHgyZSwgMHgzZSwgMHgyYiwgMHgzYiwgMHgyZiwKKwkJIDB4M2Z9CisJfSwKIC8qIEVHQV9EQUMgKi8KLSB7Ci0gIDB4MDAsMHgxMCwweDA0LDB4MDExNCwKLSAgezB4MTEsMHgwNSwweDE1LDB4MjB9LAotICAweDMwLAotICB7MHgyNCwweDM0LDB4MjEsMHgzMSwweDI1LDB4MzUsMHgwOCwweDE4LAotICAgMHgwYywweDFjLDB4MDksMHgxOSwweDBkLDB4MWQsMHgyOCwweDM4LAotICAgMHgyYywweDNjLDB4MjksMHgzOSwweDJkLDB4M2QsMHgwMiwweDEyLAotICAgMHgwNn0sCi0gIHsweDE2LDB4MDMsMHgxMywweDA3LDB4MTcsMHgyMiwweDMyLDB4MjYsCi0gICAweDM2LDB4MjMsMHgzMywweDI3LDB4MzcsMHgwYSwweDFhLDB4MGUsCi0gICAweDFlLDB4MGIsMHgxYiwweDBmfSwKLSAgezB4MWYsMHgyYSwweDNhLDB4MmUsMHgzZSwweDJiLDB4M2IsMHgyZiwKLSAgIDB4M2Z9Ci0gfSwKKwl7CisJCTB4MDAsIDB4MTAsIDB4MDQsIDB4MDExNCwKKwkJezB4MTEsIDB4MDUsIDB4MTUsIDB4MjB9LAorCQkgMHgzMCwKKwkJezB4MjQsIDB4MzQsIDB4MjEsIDB4MzEsIDB4MjUsIDB4MzUsIDB4MDgsIDB4MTgsCisJCSAweDBjLCAweDFjLCAweDA5LCAweDE5LCAweDBkLCAweDFkLCAweDI4LCAweDM4LAorCQkgMHgyYywgMHgzYywgMHgyOSwgMHgzOSwgMHgyZCwgMHgzZCwgMHgwMiwgMHgxMiwKKwkJIDB4MDZ9LAorCQl7MHgxNiwgMHgwMywgMHgxMywgMHgwNywgMHgxNywgMHgyMiwgMHgzMiwgMHgyNiwKKwkJIDB4MzYsIDB4MjMsIDB4MzMsIDB4MjcsIDB4MzcsIDB4MGEsIDB4MWEsIDB4MGUsCisJCSAweDFlLCAweDBiLCAweDFiLCAweDBmfSwKKwkJezB4MWYsIDB4MmEsIDB4M2EsIDB4MmUsIDB4M2UsIDB4MmIsIDB4M2IsIDB4MmYsCisJCSAweDNmfQorCX0sCiAvKiBWR0FfREFDICovCi0gewotICAweDAwLDB4MTAsMHgwNCwweDAxMTQsCi0gIHsweDExLDB4MDksMHgxNSwweDJhfSwKLSAgMHgzYSwKLSAgezB4MmUsMHgzZSwweDJiLDB4M2IsMHgyZiwweDNmLDB4MDAsMHgwNSwKLSAgIDB4MDgsMHgwYiwweDBlLDB4MTEsMHgxNCwweDE4LDB4MWMsMHgyMCwKLSAgIDB4MjQsMHgyOCwweDJkLDB4MzIsMHgzOCwweDNmLDB4MDAsMHgxMCwKLSAgIDB4MWZ9LAotICB7MHgyZiwweDNmLDB4MWYsMHgyNywweDJmLDB4MzcsMHgzZiwweDJkLAotICAgMHgzMSwweDM2LDB4M2EsMHgzZiwweDAwLDB4MDcsMHgwZSwweDE1LAotICAgMHgxYywweDBlLDB4MTEsMHgxNX0sCi0gIHsweDE4LDB4MWMsMHgxNCwweDE2LDB4MTgsMHgxYSwweDFjLDB4MDAsCi0gICAweDA0fQotIH0sCi0gewotICAweDA4LDB4MGMsMHgxMCwweDBhMDgsCi0gIHsweDBjLDB4MGUsMHgxMCwweDBifSwKLSAgMHgwYywKLSAgezB4MGQsMHgwZiwweDEwLDB4MTAsMHgwMSwweDA4LDB4MDAsMHgwMCwKLSAgIDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMiwweDAyLDB4MDEsMHgwMCwKLSAgIDB4MDQsMHgwNCwweDAxLDB4MDAsMHgwNSwweDAyLDB4MDUsMHgwMCwKLSAgIDB4MDZ9LAotICB7MHgwMSwweDA2LDB4MDUsMHgwNiwweDAwLDB4MDgsMHgwMSwweDA4LAotICAgMHgwMCwweDA3LDB4MDIsMHgwNywweDA2LDB4MDcsMHgwMCwweDAwLAotICAgMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0gIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0gICAweDAwfQotIH0sCisJeworCQkweDAwLCAweDEwLCAweDA0LCAweDAxMTQsCisJCXsweDExLCAweDA5LCAweDE1LCAweDJhfSwKKwkJIDB4M2EsCisJCXsweDJlLCAweDNlLCAweDJiLCAweDNiLCAweDJmLCAweDNmLCAweDAwLCAweDA1LAorCQkgMHgwOCwgMHgwYiwgMHgwZSwgMHgxMSwgMHgxNCwgMHgxOCwgMHgxYywgMHgyMCwKKwkJIDB4MjQsIDB4MjgsIDB4MmQsIDB4MzIsIDB4MzgsIDB4M2YsIDB4MDAsIDB4MTAsCisJCSAweDFmfSwKKwkJezB4MmYsIDB4M2YsIDB4MWYsIDB4MjcsIDB4MmYsIDB4MzcsIDB4M2YsIDB4MmQsCisJCSAweDMxLCAweDM2LCAweDNhLCAweDNmLCAweDAwLCAweDA3LCAweDBlLCAweDE1LAorCQkgMHgxYywgMHgwZSwgMHgxMSwgMHgxNX0sCisJCXsweDE4LCAweDFjLCAweDE0LCAweDE2LCAweDE4LCAweDFhLCAweDFjLCAweDAwLAorCQkgMHgwNH0KKwl9LAorCXsKKwkJMHgwOCwgMHgwYywgMHgxMCwgMHgwYTA4LAorCQl7MHgwYywgMHgwZSwgMHgxMCwgMHgwYn0sCisJCSAweDBjLAorCQl7MHgwZCwgMHgwZiwgMHgxMCwgMHgxMCwgMHgwMSwgMHgwOCwgMHgwMCwgMHgwMCwKKwkJIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDIsIDB4MDEsIDB4MDAsCisJCSAweDA0LCAweDA0LCAweDAxLCAweDAwLCAweDA1LCAweDAyLCAweDA1LCAweDAwLAorCQkgMHgwNn0sCisJCXsweDAxLCAweDA2LCAweDA1LCAweDA2LCAweDAwLCAweDA4LCAweDAxLCAweDA4LAorCQkgMHgwMCwgMHgwNywgMHgwMiwgMHgwNywgMHgwNiwgMHgwNywgMHgwMCwgMHgwMCwKKwkJIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCQl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJIDB4MDB9CisJfSwKIC8qIE1EX0QgKi8KLSB7Ci0gIDB4MjgsMHgxOCwweDA4LDB4MjAwMCwKLSAgezB4MDksMHgwZiwweDAwLDB4MDZ9LAotICAweDYzLAotICB7MHgyZCwweDI3LDB4MjgsMHg5MCwweDJjLDB4ODAsMHhiZiwweDFmLAotICAgMHgwMCwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotICAgMHg5YywweDhlLDB4OGYsMHgxNCwweDAwLDB4OTYsMHhiOSwweGUzLAotICAgMHhmZn0sCi0gIHsweDAwLDB4MDEsMHgwMiwweDAzLDB4MDQsMHgwNSwweDA2LDB4MDcsCi0gICAweDEwLDB4MTEsMHgxMiwweDEzLDB4MTQsMHgxNSwweDE2LDB4MTcsCi0gICAweDAxLDB4MDAsMHgwZiwweDAwfSwKLSAgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHgwZiwKLSAgIDB4ZmZ9Ci0gfSwKKwl7CisJCTB4MjgsIDB4MTgsIDB4MDgsIDB4MjAwMCwKKwkJezB4MDksIDB4MGYsIDB4MDAsIDB4MDZ9LAorCQkgMHg2MywKKwkJezB4MmQsIDB4MjcsIDB4MjgsIDB4OTAsIDB4MmMsIDB4ODAsIDB4YmYsIDB4MWYsCisJCSAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkgMHg5YywgMHg4ZSwgMHg4ZiwgMHgxNCwgMHgwMCwgMHg5NiwgMHhiOSwgMHhlMywKKwkJIDB4ZmZ9LAorCQl7MHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKwkJIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCisJCSAweDAxLCAweDAwLCAweDBmLCAweDAwfSwKKwkJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MGYsCisJCSAweGZmfQorCX0sCiAvKiBNRF9FICovCi0gewotICAweDUwLDB4MTgsMHgwOCwweDQwMDAsCi0gIHsweDAxLDB4MGYsMHgwMCwweDA2fSwKLSAgMHg2MywKLSAgezB4NWYsMHg0ZiwweDUwLDB4ODIsMHg1NSwweDgxLDB4YmYsMHgxZiwKLSAgIDB4MDAsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSAgIDB4OWMsMHg4ZSwweDhmLDB4MjgsMHgwMCwweDk2LDB4YjksMHhlMywKLSAgIDB4ZmZ9LAotICB7MHgwMCwweDAxLDB4MDIsMHgwMywweDA0LDB4MDUsMHgwNiwweDA3LAotICAgMHgxMCwweDExLDB4MTIsMHgxMywweDE0LDB4MTUsMHgxNiwweDE3LAotICAgMHgwMSwweDAwLDB4MGYsMHgwMH0sCi0gIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4MGYsCi0gICAweGZmfQotIH0sCisJeworCQkweDUwLCAweDE4LCAweDA4LCAweDQwMDAsCisJCXsweDAxLCAweDBmLCAweDAwLCAweDA2fSwKKwkJIDB4NjMsCisJCXsweDVmLCAweDRmLCAweDUwLCAweDgyLCAweDU1LCAweDgxLCAweGJmLCAweDFmLAorCQkgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJIDB4OWMsIDB4OGUsIDB4OGYsIDB4MjgsIDB4MDAsIDB4OTYsIDB4YjksIDB4ZTMsCisJCSAweGZmfSwKKwkJezB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisJCSAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAorCQkgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMH0sCisJCXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDBmLAorCQkgMHhmZn0KKwl9LAogLyogRXh0VkdBVGFibGUgKi8KLSB7Ci0gIDB4MDAsMHgwMCwweDAwLDB4MDAwMCwKLSAgezB4MDEsMHgwZiwweDAwLDB4MGV9LAotICAweDIzLAotICB7MHg1ZiwweDRmLDB4NTAsMHg4MiwweDU0LDB4ODAsMHgwYiwweDNlLAotICAgMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotICAgMHhlYSwweDhjLDB4ZGYsMHgyOCwweDQwLDB4ZTcsMHgwNCwweGEzLAotICAgMHhmZn0sCi0gIHsweDAwLDB4MDEsMHgwMiwweDAzLDB4MDQsMHgwNSwweDA2LDB4MDcsCi0gICAweDA4LDB4MDksMHgwYSwweDBiLDB4MGMsMHgwZCwweDBlLDB4MGYsCi0gICAweDAxLDB4MDAsMHgwMCwweDAwfSwKLSAgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDUsMHgwZiwKLSAgIDB4ZmZ9Ci0gfSwKKwl7CisJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAwMCwKKwkJezB4MDEsIDB4MGYsIDB4MDAsIDB4MGV9LAorCQkgMHgyMywKKwkJezB4NWYsIDB4NGYsIDB4NTAsIDB4ODIsIDB4NTQsIDB4ODAsIDB4MGIsIDB4M2UsCisJCSAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkgMHhlYSwgMHg4YywgMHhkZiwgMHgyOCwgMHg0MCwgMHhlNywgMHgwNCwgMHhhMywKKwkJIDB4ZmZ9LAorCQl7MHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKwkJIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCisJCSAweDAxLCAweDAwLCAweDAwLCAweDAwfSwKKwkJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MGYsCisJCSAweGZmfQorCX0sCiAvKiBST01fU0FWRVBUUiAqLwotIHsKLSAgMHg5ZiwweDNiLDB4MDAsMHgwMGMwLAotICB7MHgwMCwweDAwLDB4MDAsMHgwMH0sCi0gIDB4MDAsCi0gIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGJiLDB4M2YsCi0gICAweDAwLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0gICAweDAwLDB4MDAsMHgxYSwweDAwLDB4YWMsMHgzZSwweDAwLDB4YzAsCi0gICAweDAwfSwKLSAgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSAgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSAgIDB4MDAsMHgwMCwweDAwLDB4MDB9LAotICB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotICAgMHgwMH0KLSB9LAorCXsKKwkJMHg5ZiwgMHgzYiwgMHgwMCwgMHgwMGMwLAorCQl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJCSAweDAwLAorCQl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYiwgMHgzZiwKKwkJIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCSAweDAwLCAweDAwLCAweDFhLCAweDAwLCAweGFjLCAweDNlLCAweDAwLCAweGMwLAorCQkgMHgwMH0sCisJCXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCQl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJIDB4MDB9CisJfSwKIC8qIE1EX0YgKi8KLSB7Ci0gIDB4NTAsMHgxOCwweDBlLDB4ODAwMCwKLSAgezB4MDEsMHgwZiwweDAwLDB4MDZ9LAotICAweGEyLAotICB7MHg1ZiwweDRmLDB4NTAsMHg4MiwweDU1LDB4ODEsMHhiZiwweDFmLAotICAgMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotICAgMHg4MiwweDg0LDB4NWQsMHgyOCwweDBmLDB4NjMsMHhiYSwweGUzLAotICAgMHhmZn0sCi0gIHsweDAwLDB4MDgsMHgwMCwweDAwLDB4MTgsMHgxOCwweDAwLDB4MDAsCi0gICAweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAwLDB4MDAsCi0gICAweDBiLDB4MDAsMHgwNSwweDAwfSwKLSAgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHgwNSwKLSAgIDB4ZmZ9Ci0gfSwKKwl7CisJCTB4NTAsIDB4MTgsIDB4MGUsIDB4ODAwMCwKKwkJezB4MDEsIDB4MGYsIDB4MDAsIDB4MDZ9LAorCQkgMHhhMiwKKwkJezB4NWYsIDB4NGYsIDB4NTAsIDB4ODIsIDB4NTUsIDB4ODEsIDB4YmYsIDB4MWYsCisJCSAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkgMHg4MiwgMHg4NCwgMHg1ZCwgMHgyOCwgMHgwZiwgMHg2MywgMHhiYSwgMHhlMywKKwkJIDB4ZmZ9LAorCQl7MHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgxOCwgMHgwMCwgMHgwMCwKKwkJIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsCisJCSAweDBiLCAweDAwLCAweDA1LCAweDAwfSwKKwkJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDUsCisJCSAweGZmfQorCX0sCiAvKiBNRF8xMCAqLwotIHsKLSAgMHg1MCwweDE4LDB4MGUsMHg4MDAwLAotICB7MHgwMSwweDBmLDB4MDAsMHgwNn0sCi0gIDB4YTMsCi0gIHsweDVmLDB4NGYsMHg1MCwweDgyLDB4NTUsMHg4MSwweGJmLDB4MWYsCi0gICAweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0gICAweDgyLDB4ODQsMHg1ZCwweDI4LDB4MGYsMHg2MywweGJhLDB4ZTMsCi0gICAweGZmfSwKLSAgezB4MDAsMHgwMSwweDAyLDB4MDMsMHgwNCwweDA1LDB4MTQsMHgwNywKLSAgIDB4MzgsMHgzOSwweDNhLDB4M2IsMHgzYywweDNkLDB4M2UsMHgzZiwKLSAgIDB4MDEsMHgwMCwweDBmLDB4MDB9LAotICB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweDBmLAotICAgMHhmZn0KLSB9LAorCXsKKwkJMHg1MCwgMHgxOCwgMHgwZSwgMHg4MDAwLAorCQl7MHgwMSwgMHgwZiwgMHgwMCwgMHgwNn0sCisJCSAweGEzLAorCQl7MHg1ZiwgMHg0ZiwgMHg1MCwgMHg4MiwgMHg1NSwgMHg4MSwgMHhiZiwgMHgxZiwKKwkJIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCSAweDgyLCAweDg0LCAweDVkLCAweDI4LCAweDBmLCAweDYzLCAweGJhLCAweGUzLAorCQkgMHhmZn0sCisJCXsweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDE0LCAweDA3LAorCQkgMHgzOCwgMHgzOSwgMHgzYSwgMHgzYiwgMHgzYywgMHgzZCwgMHgzZSwgMHgzZiwKKwkJIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDB9LAorCQl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwZiwKKwkJIDB4ZmZ9CisJfSwKIC8qIE1EXzBfMzUwICovCi0gewotICAweDI4LDB4MTgsMHgwZSwweDA4MDAsCi0gIHsweDA5LDB4MDMsMHgwMCwweDAyfSwKLSAgMHhhMywKLSAgezB4MmQsMHgyNywweDI4LDB4OTAsMHgyYiwweGIxLDB4YmYsMHgxZiwKLSAgIDB4MDAsMHg0ZCwweDBiLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSAgIDB4ODMsMHg4NSwweDVkLDB4MTQsMHgxZiwweDYzLDB4YmEsMHhhMywKLSAgIDB4ZmZ9LAotICB7MHgwMCwweDAxLDB4MDIsMHgwMywweDA0LDB4MDUsMHgxNCwweDA3LAotICAgMHgzOCwweDM5LDB4M2EsMHgzYiwweDNjLDB4M2QsMHgzZSwweDNmLAotICAgMHgwOCwweDAwLDB4MGYsMHgwMH0sCi0gIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDBlLDB4MDAsCi0gICAweGZmfQotIH0sCisJeworCQkweDI4LCAweDE4LCAweDBlLCAweDA4MDAsCisJCXsweDA5LCAweDAzLCAweDAwLCAweDAyfSwKKwkJIDB4YTMsCisJCXsweDJkLCAweDI3LCAweDI4LCAweDkwLCAweDJiLCAweGIxLCAweGJmLCAweDFmLAorCQkgMHgwMCwgMHg0ZCwgMHgwYiwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJIDB4ODMsIDB4ODUsIDB4NWQsIDB4MTQsIDB4MWYsIDB4NjMsIDB4YmEsIDB4YTMsCisJCSAweGZmfSwKKwkJezB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MTQsIDB4MDcsCisJCSAweDM4LCAweDM5LCAweDNhLCAweDNiLCAweDNjLCAweDNkLCAweDNlLCAweDNmLAorCQkgMHgwOCwgMHgwMCwgMHgwZiwgMHgwMH0sCisJCXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDBlLCAweDAwLAorCQkgMHhmZn0KKwl9LAogLyogTURfMV8zNTAgKi8KLSB7Ci0gIDB4MjgsMHgxOCwweDBlLDB4MDgwMCwKLSAgezB4MDksMHgwMywweDAwLDB4MDJ9LAotICAweGEzLAotICB7MHgyZCwweDI3LDB4MjgsMHg5MCwweDJiLDB4YTAsMHhiZiwweDFmLAotICAgMHgwMCwweDRkLDB4MGIsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLAotICAgMHg4MywweDg1LDB4NWQsMHgxNCwweDFmLDB4NjMsMHhiYSwweGEzLAotICAgMHhmZn0sCi0gIHsweDAwLDB4MDEsMHgwMiwweDAzLDB4MDQsMHgwNSwweDE0LDB4MDcsCi0gICAweDM4LDB4MzksMHgzYSwweDNiLDB4M2MsMHgzZCwweDNlLDB4M2YsCi0gICAweDA4LDB4MDAsMHgwZiwweDAwfSwKLSAgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4MGUsMHgwMCwKLSAgIDB4ZmZ9Ci0gfSwKKwl7CisJCTB4MjgsIDB4MTgsIDB4MGUsIDB4MDgwMCwKKwkJezB4MDksIDB4MDMsIDB4MDAsIDB4MDJ9LAorCQkgMHhhMywKKwkJezB4MmQsIDB4MjcsIDB4MjgsIDB4OTAsIDB4MmIsIDB4YTAsIDB4YmYsIDB4MWYsCisJCSAweDAwLCAweDRkLCAweDBiLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkgMHg4MywgMHg4NSwgMHg1ZCwgMHgxNCwgMHgxZiwgMHg2MywgMHhiYSwgMHhhMywKKwkJIDB4ZmZ9LAorCQl7MHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgxNCwgMHgwNywKKwkJIDB4MzgsIDB4MzksIDB4M2EsIDB4M2IsIDB4M2MsIDB4M2QsIDB4M2UsIDB4M2YsCisJCSAweDA4LCAweDAwLCAweDBmLCAweDAwfSwKKwkJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MGUsIDB4MDAsCisJCSAweGZmfQorCX0sCiAvKiBNRF8yXzM1MCAqLwotIHsKLSAgMHg1MCwweDE4LDB4MGUsMHgxMDAwLAotICB7MHgwMSwweDAzLDB4MDAsMHgwMn0sCi0gIDB4YTMsCi0gIHsweDVmLDB4NGYsMHg1MCwweDgyLDB4NTUsMHg4MSwweGJmLDB4MWYsCi0gICAweDAwLDB4NGQsMHgwYiwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0gICAweDgzLDB4ODUsMHg1ZCwweDI4LDB4MWYsMHg2MywweGJhLDB4YTMsCi0gICAweGZmfSwKLSAgezB4MDAsMHgwMSwweDAyLDB4MDMsMHgwNCwweDA1LDB4MTQsMHgwNywKLSAgIDB4MzgsMHgzOSwweDNhLDB4M2IsMHgzYywweDNkLDB4M2UsMHgzZiwKLSAgIDB4MDgsMHgwMCwweDBmLDB4MDB9LAotICB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHgwZSwweDAwLAotICAgMHhmZn0KLSB9LAorCXsKKwkJMHg1MCwgMHgxOCwgMHgwZSwgMHgxMDAwLAorCQl7MHgwMSwgMHgwMywgMHgwMCwgMHgwMn0sCisJCSAweGEzLAorCQl7MHg1ZiwgMHg0ZiwgMHg1MCwgMHg4MiwgMHg1NSwgMHg4MSwgMHhiZiwgMHgxZiwKKwkJIDB4MDAsIDB4NGQsIDB4MGIsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCSAweDgzLCAweDg1LCAweDVkLCAweDI4LCAweDFmLCAweDYzLCAweGJhLCAweGEzLAorCQkgMHhmZn0sCisJCXsweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDE0LCAweDA3LAorCQkgMHgzOCwgMHgzOSwgMHgzYSwgMHgzYiwgMHgzYywgMHgzZCwgMHgzZSwgMHgzZiwKKwkJIDB4MDgsIDB4MDAsIDB4MGYsIDB4MDB9LAorCQl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwZSwgMHgwMCwKKwkJIDB4ZmZ9CisJfSwKIC8qIE1EXzNfMzUwICovCi0gewotICAweDUwLDB4MTgsMHgwZSwweDEwMDAsCi0gIHsweDAxLDB4MDMsMHgwMCwweDAyfSwKLSAgMHhhMywKLSAgezB4NWYsMHg0ZiwweDUwLDB4ODIsMHg1NSwweDgxLDB4YmYsMHgxZiwKLSAgIDB4MDAsMHg0ZCwweDBiLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSAgIDB4ODMsMHg4NSwweDVkLDB4MjgsMHgxZiwweDYzLDB4YmEsMHhhMywKLSAgIDB4ZmZ9LAotICB7MHgwMCwweDAxLDB4MDIsMHgwMywweDA0LDB4MDUsMHgxNCwweDA3LAotICAgMHgzOCwweDM5LDB4M2EsMHgzYiwweDNjLDB4M2QsMHgzZSwweDNmLAotICAgMHgwOCwweDAwLDB4MGYsMHgwMH0sCi0gIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDBlLDB4MDAsCi0gICAweGZmfQotIH0sCisJeworCQkweDUwLCAweDE4LCAweDBlLCAweDEwMDAsCisJCXsweDAxLCAweDAzLCAweDAwLCAweDAyfSwKKwkJIDB4YTMsCisJCXsweDVmLCAweDRmLCAweDUwLCAweDgyLCAweDU1LCAweDgxLCAweGJmLCAweDFmLAorCQkgMHgwMCwgMHg0ZCwgMHgwYiwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJIDB4ODMsIDB4ODUsIDB4NWQsIDB4MjgsIDB4MWYsIDB4NjMsIDB4YmEsIDB4YTMsCisJCSAweGZmfSwKKwkJezB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MTQsIDB4MDcsCisJCSAweDM4LCAweDM5LCAweDNhLCAweDNiLCAweDNjLCAweDNkLCAweDNlLCAweDNmLAorCQkgMHgwOCwgMHgwMCwgMHgwZiwgMHgwMH0sCisJCXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDBlLCAweDAwLAorCQkgMHhmZn0KKwl9LAogLyogTURfMF8xXzQwMCAqLwotIHsKLSAgMHgyOCwweDE4LDB4MTAsMHgwODAwLAotICB7MHgwOCwweDAzLDB4MDAsMHgwMn0sCi0gIDB4NjcsCi0gIHsweDJkLDB4MjcsMHgyOCwweDkwLDB4MmIsMHhiMSwweGJmLDB4MWYsCi0gICAweDAwLDB4NGYsMHgwZCwweDBlLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0gICAweDljLDB4OGUsMHg4ZiwweDE0LDB4MWYsMHg5NiwweGI5LDB4YTMsCi0gICAweGZmfSwKLSAgezB4MDAsMHgwMSwweDAyLDB4MDMsMHgwNCwweDA1LDB4MTQsMHgwNywKLSAgIDB4MzgsMHgzOSwweDNhLDB4M2IsMHgzYywweDNkLDB4M2UsMHgzZiwKLSAgIDB4MGMsMHgwMCwweDBmLDB4MDh9LAotICB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHgwZSwweDAwLAotICAgMHhmZn0KLSB9LAorCXsKKwkJMHgyOCwgMHgxOCwgMHgxMCwgMHgwODAwLAorCQl7MHgwOCwgMHgwMywgMHgwMCwgMHgwMn0sCisJCSAweDY3LAorCQl7MHgyZCwgMHgyNywgMHgyOCwgMHg5MCwgMHgyYiwgMHhiMSwgMHhiZiwgMHgxZiwKKwkJIDB4MDAsIDB4NGYsIDB4MGQsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCSAweDljLCAweDhlLCAweDhmLCAweDE0LCAweDFmLCAweDk2LCAweGI5LCAweGEzLAorCQkgMHhmZn0sCisJCXsweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDE0LCAweDA3LAorCQkgMHgzOCwgMHgzOSwgMHgzYSwgMHgzYiwgMHgzYywgMHgzZCwgMHgzZSwgMHgzZiwKKwkJIDB4MGMsIDB4MDAsIDB4MGYsIDB4MDh9LAorCQl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwZSwgMHgwMCwKKwkJIDB4ZmZ9CisJfSwKIC8qIE1EXzJfM180MDAgKi8KLSB7Ci0gIDB4NTAsMHgxOCwweDEwLDB4MTAwMCwKLSAgezB4MDAsMHgwMywweDAwLDB4MDJ9LAotICAweDY3LAotICB7MHg1ZiwweDRmLDB4NTAsMHg4MiwweDU1LDB4ODEsMHhiZiwweDFmLAotICAgMHgwMCwweDRmLDB4MGQsMHgwZSwweDAwLDB4MDAsMHgwMCwweDAwLAotICAgMHg5YywweDhlLDB4OGYsMHgyOCwweDFmLDB4OTYsMHhiOSwweGEzLAotICAgMHhmZn0sCi0gIHsweDAwLDB4MDEsMHgwMiwweDAzLDB4MDQsMHgwNSwweDE0LDB4MDcsCi0gICAweDM4LDB4MzksMHgzYSwweDNiLDB4M2MsMHgzZCwweDNlLDB4M2YsCi0gICAweDBjLDB4MDAsMHgwZiwweDA4fSwKLSAgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4MGUsMHgwMCwKLSAgIDB4ZmZ9Ci0gfSwKKwl7CisJCTB4NTAsIDB4MTgsIDB4MTAsIDB4MTAwMCwKKwkJezB4MDAsIDB4MDMsIDB4MDAsIDB4MDJ9LAorCQkgMHg2NywKKwkJezB4NWYsIDB4NGYsIDB4NTAsIDB4ODIsIDB4NTUsIDB4ODEsIDB4YmYsIDB4MWYsCisJCSAweDAwLCAweDRmLCAweDBkLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkgMHg5YywgMHg4ZSwgMHg4ZiwgMHgyOCwgMHgxZiwgMHg5NiwgMHhiOSwgMHhhMywKKwkJIDB4ZmZ9LAorCQl7MHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgxNCwgMHgwNywKKwkJIDB4MzgsIDB4MzksIDB4M2EsIDB4M2IsIDB4M2MsIDB4M2QsIDB4M2UsIDB4M2YsCisJCSAweDBjLCAweDAwLCAweDBmLCAweDA4fSwKKwkJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MGUsIDB4MDAsCisJCSAweGZmfQorCX0sCiAvKiBNRF83XzQwMCAqLwotIHsKLSAgMHg1MCwweDE4LDB4MTAsMHgxMDAwLAotICB7MHgwMCwweDAzLDB4MDAsMHgwMn0sCi0gIDB4NjYsCi0gIHsweDVmLDB4NGYsMHg1MCwweDgyLDB4NTUsMHg4MSwweGJmLDB4MWYsCi0gICAweDAwLDB4NGYsMHgwZCwweDBlLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0gICAweDljLDB4OGUsMHg4ZiwweDI4LDB4MGYsMHg5NiwweGI5LDB4YTMsCi0gICAweGZmfSwKLSAgezB4MDAsMHgwOCwweDA4LDB4MDgsMHgwOCwweDA4LDB4MDgsMHgwOCwKLSAgIDB4MTAsMHgxOCwweDE4LDB4MTgsMHgxOCwweDE4LDB4MTgsMHgxOCwKLSAgIDB4MGUsMHgwMCwweDBmLDB4MDh9LAotICB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHgwYSwweDAwLAotICAgMHhmZn0KLSB9LAorCXsKKwkJMHg1MCwgMHgxOCwgMHgxMCwgMHgxMDAwLAorCQl7MHgwMCwgMHgwMywgMHgwMCwgMHgwMn0sCisJCSAweDY2LAorCQl7MHg1ZiwgMHg0ZiwgMHg1MCwgMHg4MiwgMHg1NSwgMHg4MSwgMHhiZiwgMHgxZiwKKwkJIDB4MDAsIDB4NGYsIDB4MGQsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCSAweDljLCAweDhlLCAweDhmLCAweDI4LCAweDBmLCAweDk2LCAweGI5LCAweGEzLAorCQkgMHhmZn0sCisJCXsweDAwLCAweDA4LCAweDA4LCAweDA4LCAweDA4LCAweDA4LCAweDA4LCAweDA4LAorCQkgMHgxMCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwKKwkJIDB4MGUsIDB4MDAsIDB4MGYsIDB4MDh9LAorCQl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwYSwgMHgwMCwKKwkJIDB4ZmZ9CisJfSwKIC8qIE1EXzExICovCi0gewotICAweDUwLDB4MWQsMHgxMCwweGEwMDAsCi0gIHsweDAxLDB4MGYsMHgwMCwweDA2fSwKLSAgMHhlMywKLSAgezB4NWYsMHg0ZiwweDUwLDB4ODIsMHg1NSwweDgxLDB4MGIsMHgzZSwKLSAgIDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSAgIDB4ZTksMHg4YiwweGRmLDB4MjgsMHgwMCwweGU3LDB4MDQsMHhjMywKLSAgIDB4ZmZ9LAotICB7MHgwMCwweDNmLDB4M2YsMHgzZiwweDNmLDB4M2YsMHgzZiwweDNmLAotICAgMHgzZiwweDNmLDB4M2YsMHgzZiwweDNmLDB4M2YsMHgzZiwweDNmLAotICAgMHgwMSwweDAwLDB4MGYsMHgwMH0sCi0gIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4MDEsCi0gICAweGZmfQotIH0sCisJeworCQkweDUwLCAweDFkLCAweDEwLCAweGEwMDAsCisJCXsweDAxLCAweDBmLCAweDAwLCAweDA2fSwKKwkJIDB4ZTMsCisJCXsweDVmLCAweDRmLCAweDUwLCAweDgyLCAweDU1LCAweDgxLCAweDBiLCAweDNlLAorCQkgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJIDB4ZTksIDB4OGIsIDB4ZGYsIDB4MjgsIDB4MDAsIDB4ZTcsIDB4MDQsIDB4YzMsCisJCSAweGZmfSwKKwkJezB4MDAsIDB4M2YsIDB4M2YsIDB4M2YsIDB4M2YsIDB4M2YsIDB4M2YsIDB4M2YsCisJCSAweDNmLCAweDNmLCAweDNmLCAweDNmLCAweDNmLCAweDNmLCAweDNmLCAweDNmLAorCQkgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMH0sCisJCXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDAxLAorCQkgMHhmZn0KKwl9LAogLyogRXh0RUdBVGFibGUgKi8KLSB7Ci0gIDB4NTAsMHgxZCwweDEwLDB4YTAwMCwKLSAgezB4MDEsMHgwZiwweDAwLDB4MDZ9LAotICAweGUzLAotICB7MHg1ZiwweDRmLDB4NTAsMHg4MiwweDU1LDB4ODEsMHgwYiwweDNlLAotICAgMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotICAgMHhlOSwweDhiLDB4ZGYsMHgyOCwweDAwLDB4ZTcsMHgwNCwweGUzLAotICAgMHhmZn0sCi0gIHsweDAwLDB4MDEsMHgwMiwweDAzLDB4MDQsMHgwNSwweDE0LDB4MDcsCi0gICAweDM4LDB4MzksMHgzYSwweDNiLDB4M2MsMHgzZCwweDNlLDB4M2YsCi0gICAweDAxLDB4MDAsMHgwZiwweDAwfSwKLSAgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHgwZiwKLSAgIDB4ZmZ9Ci0gfSwKKwl7CisJCTB4NTAsIDB4MWQsIDB4MTAsIDB4YTAwMCwKKwkJezB4MDEsIDB4MGYsIDB4MDAsIDB4MDZ9LAorCQkgMHhlMywKKwkJezB4NWYsIDB4NGYsIDB4NTAsIDB4ODIsIDB4NTUsIDB4ODEsIDB4MGIsIDB4M2UsCisJCSAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkgMHhlOSwgMHg4YiwgMHhkZiwgMHgyOCwgMHgwMCwgMHhlNywgMHgwNCwgMHhlMywKKwkJIDB4ZmZ9LAorCQl7MHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgxNCwgMHgwNywKKwkJIDB4MzgsIDB4MzksIDB4M2EsIDB4M2IsIDB4M2MsIDB4M2QsIDB4M2UsIDB4M2YsCisJCSAweDAxLCAweDAwLCAweDBmLCAweDAwfSwKKwkJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MGYsCisJCSAweGZmfQorCX0sCiAvKiBNRF8xMyAqLwotIHsKLSAgMHgyOCwweDE4LDB4MDgsMHgyMDAwLAotICB7MHgwMSwweDBmLDB4MDAsMHgwZX0sCi0gIDB4NjMsCi0gIHsweDVmLDB4NGYsMHg1MCwweDgyLDB4NTUsMHg4MSwweGJmLDB4MWYsCi0gICAweDAwLDB4NDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0gICAweDljLDB4OGUsMHg4ZiwweDI4LDB4NDAsMHg5NiwweGI5LDB4YTMsCi0gICAweGZmfSwKLSAgezB4MDAsMHgwMSwweDAyLDB4MDMsMHgwNCwweDA1LDB4MDYsMHgwNywKLSAgIDB4MDgsMHgwOSwweDBhLDB4MGIsMHgwYywweDBkLDB4MGUsMHgwZiwKLSAgIDB4NDEsMHgwMCwweDBmLDB4MDB9LAotICB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwNSwweDBmLAotICAgMHhmZn0KLSB9CisJeworCQkweDI4LCAweDE4LCAweDA4LCAweDIwMDAsCisJCXsweDAxLCAweDBmLCAweDAwLCAweDBlfSwKKwkJIDB4NjMsCisJCXsweDVmLCAweDRmLCAweDUwLCAweDgyLCAweDU1LCAweDgxLCAweGJmLCAweDFmLAorCQkgMHgwMCwgMHg0MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJIDB4OWMsIDB4OGUsIDB4OGYsIDB4MjgsIDB4NDAsIDB4OTYsIDB4YjksIDB4YTMsCisJCSAweGZmfSwKKwkJezB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisJCSAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLAorCQkgMHg0MSwgMHgwMCwgMHgwZiwgMHgwMH0sCisJCXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweDBmLAorCQkgMHhmZn0KKwl9CiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSV9UaW1pbmdIU3RydWN0IFhHSV9UaW1pbmdIW10gPQote3t7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX19OwotCi1zdGF0aWMgc3RydWN0IFhHSV9UaW1pbmdWU3RydWN0IFhHSV9UaW1pbmdWW10gPQote3t7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19fTsKLQotc3RhdGljIHN0cnVjdCBYR0lfWEcyMUNSVDFTdHJ1Y3QgWEdJX1VwZGF0ZUNSVDFUYWJsZVtdID0KLXsKLSB7MHgwMSwweDI3LDB4OTEsMHg4ZiwweGMwfSwJLyogMDAgKi8KLSB7MHgwMywweDRmLDB4ODMsMHg4ZiwweGMwfSwJLyogMDEgKi8KLSB7MHgwNSwweDI3LDB4OTEsMHg4ZiwweGMwfSwJLyogMDIgKi8KLSB7MHgwNiwweDRmLDB4ODMsMHg4ZiwweGMwfSwJLyogMDMgKi8KLSB7MHgwNywweDRmLDB4ODMsMHg4ZiwweGMwfSwJLyogMDQgKi8KLSB7MHgwZCwweDI3LDB4OTEsMHg4ZiwweGMwfSwJLyogMDUgKi8KLSB7MHgwZSwweDRmLDB4ODMsMHg4ZiwweGMwfSwJLyogMDYgKi8KLSB7MHgwZiwweDRmLDB4ODMsMHg1ZCwweGMwfSwJLyogMDcgKi8KLSB7MHgxMCwweDRmLDB4ODMsMHg1ZCwweGMwfSwJLyogMDggKi8KLSB7MHgxMSwweDRmLDB4ODMsMHhkZiwweDBjfSwJLyogMDkgKi8KLSB7MHgxMiwweDRmLDB4ODMsMHhkZiwweDBjfSwJLyogMTAgKi8KLSB7MHgxMywweDRmLDB4ODMsMHg4ZiwweGMwfSwJLyogMTEgKi8KLSB7MHgyZSwweDRmLDB4ODMsMHhkZiwweDBjfSwJLyogMTIgKi8KLSB7MHgyZSwweDRmLDB4ODcsMHhkZiwweGMwfSwJLyogMTMgKi8KLSB7MHgyZiwweDRmLDB4ODMsMHg4ZiwweGMwfSwJLyogMTQgKi8KLSB7MHg1MCwweDI3LDB4OTEsMHhkZiwweDBjfSwJLyogMTUgKi8KLSB7MHg1OSwweDI3LDB4OTEsMHg4ZiwweGMwfQkvKiAxNiAqLworc3RhdGljIHN0cnVjdCBYR0lfVGltaW5nSFN0cnVjdCBYR0lfVGltaW5nSFtdID0geworCXsgezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJX0NSVDFUYWJsZVN0cnVjdCBYR0lfQ1JUMVRhYmxlW10gPQotewotIHt7MHgyZCwweDI4LDB4OTAsMHgyYywweDkwLDB4MDAsMHgwNCwweDAwLAotICAgIDB4YmYsMHgxZiwweDljLDB4OGUsMHg5NiwweGI5LDB4MzB9fSwgLyogMHgwICovCi0ge3sweDJkLDB4MjgsMHg5MCwweDJjLDB4OTAsMHgwMCwweDA0LDB4MDAsCi0gICAgMHgwYiwweDNlLDB4ZTksMHg4YiwweGU3LDB4MDQsMHgwMH19LCAvKiAweDEgKi8KLSB7ezB4M0QsMHgzMSwweDgxLDB4MzcsMHgxRiwweDAwLDB4MDUsMHgwMCwKLSAgICAweDcyLDB4RjAsMHg1OCwweDhDLDB4NTcsMHg3MywweEEwfX0sIC8qIDB4MiAqLwotIHt7MHg0RiwweDNGLDB4OTMsMHg0NSwweDBELDB4MDAsMHgwMSwweDAwLAotICAgIDB4MjQsMHhGNSwweDAyLDB4ODgsMHhGRiwweDI1LDB4OTB9fSwgLyogMHgzICovCi0ge3sweDVGLDB4NTAsMHg4MiwweDU1LDB4ODEsMHgwMCwweDA1LDB4MDAsCi0gICAgMHhCRiwweDFGLDB4OUMsMHg4RSwweDk2LDB4QjksMHgzMH19LCAvKiAweDQgKi8KLSB7ezB4NUYsMHg1MCwweDgyLDB4NTUsMHg4MSwweDAwLDB4MDUsMHgwMCwKLSAgICAweDBCLDB4M0UsMHhFOSwweDhCLDB4RTcsMHgwNCwweDAwfX0sIC8qIDB4NSAqLwotIHt7MHg2MywweDUwLDB4ODYsMHg1NiwweDlCLDB4MDAsMHgwMSwweDAwLAotICAgIDB4MDYsMHgzRSwweEU4LDB4OEIsMHhFNywweEZGLDB4MTB9fSwgLyogMHg2ICovCi0ge3sweDY0LDB4NEYsMHg4OCwweDU1LDB4OUQsMHgwMCwweDAxLDB4MDAsCi0gICAgMHhGMiwweDFGLDB4RTAsMHg4MywweERGLDB4RjMsMHgxMH19LCAvKiAweDcgKi8KLSB7ezB4NjMsMHg0RiwweDg3LDB4NUEsMHg4MSwweDAwLDB4MDUsMHgwMCwKLSAgICAweEZCLDB4MUYsMHhFMCwweDgzLDB4REYsMHhGQywweDEwfX0sIC8qIDB4OCAqLwotIHt7MHg2NSwweDRGLDB4ODksMHg1OCwweDgwLDB4MDAsMHgwNSwweDYwLAotICAgIDB4RkIsMHgxRiwweEUwLDB4ODMsMHhERiwweEZDLDB4ODB9fSwgLyogMHg5ICovCi0ge3sweDY1LDB4NEYsMHg4OSwweDU4LDB4ODAsMHgwMCwweDA1LDB4NjAsCi0gICAgMHgwMSwweDNFLDB4RTAsMHg4MywweERGLDB4MDIsMHg4MH19LCAvKiAweGEgKi8KLSB7ezB4NjcsMHg0RiwweDhCLDB4NTgsMHg4MSwweDAwLDB4MDUsMHg2MCwKLSAgICAweDBELDB4M0UsMHhFMCwweDgzLDB4REYsMHgwRSwweDkwfX0sIC8qIDB4YiAqLwotIHt7MHg2NSwweDRGLDB4ODksMHg1NywweDlGLDB4MDAsMHgwMSwweDAwLAotICAgMHhGQiwweDFGLDB4RTYsMHg4QSwweERGLDB4RkMsMHgxMH19LCAvKiAweGMgKi8KLSB7ezB4N0IsMHg2MywweDlGLDB4NkEsMHg5MywweDAwLDB4MDUsMHgwMCwgICAgLyogOyAwRCAoODAweDYwMCw1Nkh6KSAqLwotICAgIDB4NkYsMHhGMCwweDU4LDB4OEEsMHg1NywweDcwLDB4QTB9fSwgICAgICAgICAvKiA7IChWQ0xLIDM2LjBNSHopICovCi0ge3sweDdGLDB4NjMsMHg4MywweDZDLDB4MUMsMHgwMCwweDA2LDB4MDAsICAgIC8qIDsgMEUgKDgwMHg2MDAsNjBIeikgKi8KLSAgICAweDcyLDB4RjAsMHg1OCwweDhDLDB4NTcsMHg3MywweEEwfX0sICAgICAgICAgLyogOyAoVkNMSyA0MC4wTUh6KSAqLwotIHt7MHg3RCwweDYzLDB4ODEsMHg2RSwweDFELDB4MDAsMHgwNiwweDAwLCAgICAvKiA7IDBGICg4MDB4NjAwLDcySHopICovCi0gICAgMHg5OCwweEYwLDB4N0MsMHg4MiwweDU3LDB4OTksMHg4MH19LCAgICAgICAgIC8qIDsgKFZDTEsgNTAuME1IeikgKi8KLSB7ezB4N0YsMHg2MywweDgzLDB4NjksMHgxMywweDAwLDB4MDYsMHgwMCwgICAgLyogOyAxMCAoODAweDYwMCw3NUh6KSAqLwotICAgIDB4NkYsMHhGMCwweDU4LDB4OEIsMHg1NywweDcwLDB4QTB9fSwgICAgICAgICAvKiA7IChWQ0xLIDQ5LjVNSHopICovCi0ge3sweDdFLDB4NjMsMHg4MiwweDZCLDB4MTMsMHgwMCwweDA2LDB4MDAsICAgIC8qIDsgMTEgKDgwMHg2MDAsODVIeikgKi8KLSAgICAweDc1LDB4RjAsMHg1OCwweDhCLDB4NTcsMHg3NiwweEEwfX0sICAgICAgICAgLyogOyAoVkNMSyA1Ni4yNU1IeikgKi8KLSB7ezB4ODEsMHg2MywweDg1LDB4NkQsMHgxOCwweDAwLDB4MDYsMHg2MCwgICAgLyogOyAxMiAoODAweDYwMCwxMDBIeikgKi8KLSAgICAweDdBLDB4RjAsMHg1OCwweDhCLDB4NTcsMHg3QiwweEEwfX0sICAgICAgICAgLyogOyAoVkNMSyA3NS44TUh6KSAqLwotIHt7MHg4MywweDYzLDB4ODcsMHg2RSwweDE5LDB4MDAsMHgwNiwweDYwLCAgICAvKiA7IDEzICg4MDB4NjAwLDEyMEh6KSAqLwotICAgIDB4ODEsMHhGMCwweDU4LDB4OEIsMHg1NywweDgyLDB4QTB9fSwgICAgICAgICAvKiA7IChWQ0xLIDc5LjQxMU1IeikgKi8KLSB7ezB4ODUsMHg2MywweDg5LDB4NkYsMHgxQSwweDAwLDB4MDYsMHg2MCwgICAgLyogOyAxNCAoODAweDYwMCwxNjBIeikgKi8KLSAgIDB4OTEsMHhGMCwweDU4LDB4OEIsMHg1NywweDkyLDB4QTB9fSwgICAgICAgICAvKiA7IChWQ0xLIDEwNS44MjJNSHopICovCi0ge3sweDk5LDB4N0YsMHg5RCwweDg0LDB4MUEsMHgwMCwweDAyLDB4MDAsCi0gICAgMHg5NiwweDFGLDB4N0YsMHg4MywweDdGLDB4OTcsMHgxMH19LCAvKiAweDE1ICovCi0ge3sweEEzLDB4N0YsMHg4NywweDg2LDB4OTcsMHgwMCwweDAyLDB4MDAsCi0gICAgMHgyNCwweEY1LDB4MDIsMHg4OCwweEZGLDB4MjUsMHg5MH19LCAvKiAweDE2ICovCi0ge3sweEExLDB4N0YsMHg4NSwweDg2LDB4OTcsMHgwMCwweDAyLDB4MDAsCi0gICAgMHgyNCwweEY1LDB4MDIsMHg4OCwweEZGLDB4MjUsMHg5MH19LCAvKiAweDE3ICovCi0ge3sweDlGLDB4N0YsMHg4MywweDg1LDB4OTEsMHgwMCwweDAyLDB4MDAsCi0gICAgMHgxRSwweEY1LDB4MDAsMHg4MywweEZGLDB4MUYsMHg5MH19LCAvKiAweDE4ICovCi0ge3sweEE3LDB4N0YsMHg4QiwweDg5LDB4OTUsMHgwMCwweDAyLDB4MDAsCi0gICAgMHgyNiwweEY1LDB4MDAsMHg4MywweEZGLDB4MjcsMHg5MH19LCAvKiAweDE5ICovCi0ge3sweEE5LDB4N0YsMHg4RCwweDhDLDB4OUEsMHgwMCwweDAyLDB4NjIsCi0gICAgMHgyQywweEY1LDB4MDAsMHg4MywweEZGLDB4MkQsMHgxNH19LCAvKiAweDFhICovCi0ge3sweEFCLDB4N0YsMHg4RiwweDhELDB4OUIsMHgwMCwweDAyLDB4NjIsCi0gICAgMHgzNSwweEY1LDB4MDAsMHg4MywweEZGLDB4MzYsMHgxNH19LCAvKiAweDFiICovCi0ge3sweENGLDB4OUYsMHg5MywweEIyLDB4MDEsMHgwMCwweDAzLDB4MDAsCi0gICAgMHgxNCwweEJBLDB4MDAsMHg4MywweEZGLDB4MTUsMHgwMH19LCAvKiAweDFjICovCi0ge3sweENFLDB4OUYsMHg5MiwweEE5LDB4MTcsMHgwMCwweDA3LDB4MDAsCi0gICAgMHgyOCwweDVBLDB4MDAsMHg4MywweEZGLDB4MjksMHg4OX19LCAvKiAweDFkICovCi0ge3sweENFLDB4OUYsMHg5MiwweEE1LDB4MTcsMHgwMCwweDA3LDB4MDAsCi0gICAgMHgyOCwweDVBLDB4MDAsMHg4MywweEZGLDB4MjksMHg4OX19LCAvKiAweDFlICovCi0ge3sweEQzLDB4OUYsMHg5NywweEFCLDB4MUYsMHgwMCwweDA3LDB4MDAsCi0gICAgMHgyRSwweDVBLDB4MDAsMHg4MywweEZGLDB4MkYsMHg4OX19LCAvKiAweDFmICovCi0ge3sweDA5LDB4QzcsMHg4RCwweEQzLDB4MEIsMHgwMSwweDA0LDB4MDAsCi0gICAgMHhFMCwweDEwLDB4QjAsMHg4MywweEFGLDB4RTEsMHgyRn19LCAvKiAweDIwICovCi0ge3sweDA5LDB4QzcsMHg4RCwweEQzLDB4MEIsMHgwMSwweDA0LDB4MDAsCi0gICAgMHhFMCwweDEwLDB4QjAsMHg4MywweEFGLDB4RTEsMHgyRn19LCAvKiAweDIxICovCi0ge3sweDA5LDB4QzcsMHg4RCwweEQzLDB4MEIsMHgwMSwweDA0LDB4MDAsCi0gICAgMHhFMCwweDEwLDB4QjAsMHg4MywweEFGLDB4RTEsMHgyRn19LCAvKiAweDIyICovCi0ge3sweDA5LDB4QzcsMHg4RCwweEQzLDB4MEIsMHgwMSwweDA0LDB4MDAsCi0gICAgMHhFMCwweDEwLDB4QjAsMHg4MywweEFGLDB4RTEsMHgyRn19LCAvKiAweDIzICovCi0ge3sweDA5LDB4QzcsMHg4RCwweEQzLDB4MEIsMHgwMSwweDA0LDB4MDAsCi0gICAgMHhFMCwweDEwLDB4QjAsMHg4MywweEFGLDB4RTEsMHgyRn19LCAvKiAweDI0ICovCi0ge3sweDA5LDB4QzcsMHg4RCwweEQzLDB4MEIsMHgwMSwweDA0LDB4MDAsCi0gICAgMHhFMCwweDEwLDB4QjAsMHg4MywweEFGLDB4RTEsMHgyRn19LCAvKiAweDI1ICovCi0ge3sweDA5LDB4QzcsMHg4RCwweEQzLDB4MEIsMHgwMSwweDA0LDB4MDAsCi0gICAgMHhFMCwweDEwLDB4QjAsMHg4MywweEFGLDB4RTEsMHgyRn19LCAvKiAweDI2ICovCi0ge3sweDQwLDB4RUYsMHg4NCwweDAzLDB4MUQsMHg0MSwweDAxLDB4MDAsCi0gICAgMHhEQSwweDFGLDB4QTAsMHg4MywweDlGLDB4REIsMHgxRn19LCAvKiAweDI3ICovCi0ge3sweDQzLDB4RUYsMHg4NywweDA2LDB4MDAsMHg0MSwweDA1LDB4NjIsCi0gICAgMHhENCwweDFGLDB4QTAsMHg4MywweDlGLDB4RDUsMHg5Rn19LCAvKiAweDI4ICovCi0ge3sweDQ1LDB4RUYsMHg4OSwweDA3LDB4MDEsMHg0MSwweDA1LDB4NjIsCi0gICAgMHhEOSwweDFGLDB4QTAsMHg4MywweDlGLDB4REEsMHg5Rn19LCAvKiAweDI5ICovCi0ge3sweDQwLDB4RUYsMHg4NCwweDAzLDB4MUQsMHg0MSwweDAxLDB4MDAsCi0gICAgMHhEQSwweDFGLDB4QTAsMHg4MywweDlGLDB4REIsMHgxRn19LCAvKiAweDJhICovCi0ge3sweDQwLDB4RUYsMHg4NCwweDAzLDB4MUQsMHg0MSwweDAxLDB4MDAsCi0gICAgMHhEQSwweDFGLDB4QTAsMHg4MywweDlGLDB4REIsMHgxRn19LCAvKiAweDJiICovCi0ge3sweDQwLDB4RUYsMHg4NCwweDAzLDB4MUQsMHg0MSwweDAxLDB4MDAsCi0gICAgMHhEQSwweDFGLDB4QTAsMHg4MywweDlGLDB4REIsMHgxRn19LCAvKiAweDJjICovCi0ge3sweDU5LDB4RkYsMHg5RCwweDE3LDB4MTMsMHg0MSwweDA1LDB4NDQsCi0gICAgMHgzMywweEJBLDB4MDAsMHg4MywweEZGLDB4MzQsMHgwRn19LCAvKiAweDJkICovCi0ge3sweDVCLDB4RkYsMHg5RiwweDE4LDB4MTQsMHg0MSwweDA1LDB4NDQsCi0gICAgMHgzOCwweEJBLDB4MDAsMHg4MywweEZGLDB4MzksMHgwRn19LCAvKiAweDJlICovCi0ge3sweDVCLDB4RkYsMHg5RiwweDE4LDB4MTQsMHg0MSwweDA1LDB4NDQsCi0gICAgMHgzRCwweEJBLDB4MDAsMHg4MywweEZGLDB4M0UsMHgwRn19LCAvKiAweDJmICovCi0ge3sweDVELDB4RkYsMHg4MSwweDE5LDB4OTUsMHg0MSwweDA1LDB4NDQsCi0gICAgMHg0MSwweEJBLDB4MDAsMHg4NCwweEZGLDB4NDIsMHgwRn19LCAvKiAweDMwICovCi0ge3sweDU1LDB4RkYsMHg5OSwweDBELDB4MEMsMHg0MSwweDA1LDB4MDAsCi0gICAgMHgzRSwweEJBLDB4MDAsMHg4NCwweEZGLDB4M0YsMHgwRn19LCAvKiAweDMxICovCi0ge3sweDdGLDB4NjMsMHg4MywweDZDLDB4MUMsMHgwMCwweDA2LDB4MDAsCi0gICAgMHg3MiwweEJBLDB4MjcsMHg4QiwweERGLDB4NzMsMHg4MH19LCAvKiAweDMyICovCi0ge3sweDdGLDB4NjMsMHg4MywweDY5LDB4MTMsMHgwMCwweDA2LDB4MDAsCi0gICAgMHg2RiwweEJBLDB4MjYsMHg4OSwweERGLDB4NkYsMHg4MH19LCAvKiAweDMzICovCi0ge3sweDdGLDB4NjMsMHg4MiwweDZCLDB4MTMsMHgwMCwweDA2LDB4MDAsCi0gICAgMHg3NSwweEJBLDB4MjksMHg4QywweERGLDB4NzUsMHg4MH19LCAvKiAweDM0ICovCi0ge3sweEEzLDB4N0YsMHg4NywweDg2LDB4OTcsMHgwMCwweDAyLDB4MDAsCi0gICAgMHgyNCwweEYxLDB4QUYsMHg4NSwweDNGLDB4MjUsMHhCMH19LCAvKiAweDM1ICovCi0ge3sweDlGLDB4N0YsMHg4MywweDg1LDB4OTEsMHgwMCwweDAyLDB4MDAsCi0gICAgMHgxRSwweEYxLDB4QUQsMHg4MSwweDNGLDB4MUYsMHhCMH19LCAvKiAweDM2ICovCi0ge3sweEE3LDB4N0YsMHg4OCwweDg5LDB4MTUsMHgwMCwweDAyLDB4MDAsCi0gICAgMHgyNiwweEYxLDB4QjEsMHg4NSwweDNGLDB4MjcsMHhCMH19LCAvKiAweDM3ICovCi0ge3sweENFLDB4OUYsMHg5MiwweEE5LDB4MTcsMHgwMCwweDA3LDB4MDAsCi0gICAgMHgyOCwweEM0LDB4N0EsMHg4RSwweENGLDB4MjksMHhBMX19LCAvKiAweDM4ICovCi0ge3sweENFLDB4OUYsMHg5MiwweEE1LDB4MTcsMHgwMCwweDA3LDB4MDAsCi0gICAgMHgyOCwweEQ0LDB4N0EsMHg4RSwweENGLDB4MjksMHhBMX19LCAvKiAweDM5ICovCi0ge3sweEQzLDB4OUYsMHg5NywweEFCLDB4MUYsMHgwMCwweDA3LDB4MDAsCi0gICAgMHgyRSwweEQ0LDB4N0QsMHg4MSwweENGLDB4MkYsMHhBMX19LCAvKiAweDNhICovCi0ge3sweERDLDB4OUYsMHgwMCwweEFCLDB4MTksMHgwMCwweDA3LDB4MDAsCi0gICAgMHhFNiwweEVGLDB4QzAsMHhDMywweEJGLDB4RTcsMHg5MH19LCAvKiAweDNiICovCi0ge3sweDZCLDB4NTksMHg4RiwweDVFLDB4OEMsMHgwMCwweDA1LDB4MDAsCi0gICAgMHgwQiwweDNFLDB4RTksMHg4QiwweEU3LDB4MDQsMHgwMH19LCAvKiAweDNjICovCi0ge3sweDdCLDB4NjMsMHg5RiwweDZBLDB4OTMsMHgwMCwweDA1LDB4MDAsCi0gICAgMHg2RiwweEYwLDB4NTgsMHg4QSwweDU3LDB4NzAsMHhBMH19LCAvKiAweDNkICovCi0ge3sweDg2LDB4NkEsMHg4YSwweDc0LDB4MDYsMHgwMCwweDAyLDB4MDAsCi0gICAgMHg4YywweDE1LDB4NGYsMHg4MywweGVmLDB4OGQsMHgzMH19LCAvKiAweDNlICovCi0ge3sweDgxLDB4NkEsMHg4NSwweDcwLDB4MDAsMHgwMCwweDAyLDB4MDAsCi0gICAgMHgwZiwweDNlLDB4ZWIsMHg4ZSwweGRmLDB4MTAsMHgwMH19LCAvKiAweDNmICovCi0ge3sweENFLDB4OUYsMHg5MiwweEE5LDB4MTcsMHgwMCwweDA3LDB4MDAsCi0gICAgMHgyMCwweEY1LDB4MDMsMHg4OCwweEZGLDB4MjEsMHg5MH19LCAvKiAweDQwICovCi0ge3sweEU2LDB4QUUsMHg4QSwweEJELDB4OTAsMHgwMCwweDAzLDB4MDAsCi0gICAgMHgzRCwweDEwLDB4MUEsMHg4RCwweDE5LDB4M0UsMHgyRn19LCAvKiAweDQxICovCi0ge3sweEI5LDB4OEYsMHg5RCwweDlCLDB4OEEsMHgwMCwweDA2LDB4MDAsCi0gICAgMHg3RCwweEZGLDB4NjAsMHg4MywweDVGLDB4N0UsMHg5MH19LCAvKiAweDQyICovCi0ge3sweEMzLDB4OEYsMHg4NywweDlCLDB4MEIsMHgwMCwweDA3LDB4MDAsCi0gICAgMHg4MiwweEZGLDB4NjAsMHg4MywweDVGLDB4ODMsMHg5MH19LCAgLyogMHg0MyAqLwotIHt7MHhBRCwweDdGLDB4OTEsMHg4RSwweDlDLDB4MDAsMHgwMiwweDgyLAotICAgIDB4NDksMHhGNSwweDAwLDB4ODMsMHhGRiwweDRBLDB4OTB9fSwgIC8qIDB4NDQgKi8KLSB7ezB4Q0QsMHg5RiwweDkxLDB4QTcsMHgxOSwweDAwLDB4MDcsMHg2MCwKLSAgICAweEU2LDB4RkYsMHhDMCwweDgzLDB4QkYsMHhFNywweDkwfX0sICAvKiAweDQ1ICovCi0ge3sweEQzLDB4OUYsMHg5NywweEFCLDB4MUYsMHgwMCwweDA3LDB4NjAsCi0gICAgMHhGMSwweEZGLDB4QzAsMHg4MywweEJGLDB4RjIsMHg5MH19LCAgLyogMHg0NiAqLwotIHt7MHhENywweDlGLDB4OUIsMHhBQywweDFFLDB4MDAsMHgwNywweDAwLAotICAgIDB4MDMsMHhERSwweEMwLDB4ODQsMHhCRiwweDA0LDB4OTB9fSAgLyogMHg0NyAqLworc3RhdGljIHN0cnVjdCBYR0lfVGltaW5nVlN0cnVjdCBYR0lfVGltaW5nVltdID0geworCXsgezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgWEdJX1hHMjFDUlQxU3RydWN0IFhHSV9VcGRhdGVDUlQxVGFibGVbXSA9IHsKKwl7MHgwMSwgMHgyNywgMHg5MSwgMHg4ZiwgMHhjMH0sCS8qIDAwICovCisJezB4MDMsIDB4NGYsIDB4ODMsIDB4OGYsIDB4YzB9LAkvKiAwMSAqLworCXsweDA1LCAweDI3LCAweDkxLCAweDhmLCAweGMwfSwJLyogMDIgKi8KKwl7MHgwNiwgMHg0ZiwgMHg4MywgMHg4ZiwgMHhjMH0sCS8qIDAzICovCisJezB4MDcsIDB4NGYsIDB4ODMsIDB4OGYsIDB4YzB9LAkvKiAwNCAqLworCXsweDBkLCAweDI3LCAweDkxLCAweDhmLCAweGMwfSwJLyogMDUgKi8KKwl7MHgwZSwgMHg0ZiwgMHg4MywgMHg4ZiwgMHhjMH0sCS8qIDA2ICovCisJezB4MGYsIDB4NGYsIDB4ODMsIDB4NWQsIDB4YzB9LAkvKiAwNyAqLworCXsweDEwLCAweDRmLCAweDgzLCAweDVkLCAweGMwfSwJLyogMDggKi8KKwl7MHgxMSwgMHg0ZiwgMHg4MywgMHhkZiwgMHgwY30sCS8qIDA5ICovCisJezB4MTIsIDB4NGYsIDB4ODMsIDB4ZGYsIDB4MGN9LAkvKiAxMCAqLworCXsweDEzLCAweDRmLCAweDgzLCAweDhmLCAweGMwfSwJLyogMTEgKi8KKwl7MHgyZSwgMHg0ZiwgMHg4MywgMHhkZiwgMHgwY30sCS8qIDEyICovCisJezB4MmUsIDB4NGYsIDB4ODcsIDB4ZGYsIDB4YzB9LAkvKiAxMyAqLworCXsweDJmLCAweDRmLCAweDgzLCAweDhmLCAweGMwfSwJLyogMTQgKi8KKwl7MHg1MCwgMHgyNywgMHg5MSwgMHhkZiwgMHgwY30sCS8qIDE1ICovCisJezB4NTksIDB4MjcsIDB4OTEsIDB4OGYsIDB4YzB9CS8qIDE2ICovCit9OworCitzdGF0aWMgc3RydWN0IFhHSV9DUlQxVGFibGVTdHJ1Y3QgWEdJX0NSVDFUYWJsZVtdID0geworCXsgezB4MmQsIDB4MjgsIDB4OTAsIDB4MmMsIDB4OTAsIDB4MDAsIDB4MDQsIDB4MDAsCisJICAweGJmLCAweDFmLCAweDljLCAweDhlLCAweDk2LCAweGI5LCAweDMwfSB9LCAvKiAweDAgKi8KKwl7IHsweDJkLCAweDI4LCAweDkwLCAweDJjLCAweDkwLCAweDAwLCAweDA0LCAweDAwLAorCSAgMHgwYiwgMHgzZSwgMHhlOSwgMHg4YiwgMHhlNywgMHgwNCwgMHgwMH0gfSwgLyogMHgxICovCisJeyB7MHgzRCwgMHgzMSwgMHg4MSwgMHgzNywgMHgxRiwgMHgwMCwgMHgwNSwgMHgwMCwKKwkgIDB4NzIsIDB4RjAsIDB4NTgsIDB4OEMsIDB4NTcsIDB4NzMsIDB4QTB9IH0sIC8qIDB4MiAqLworCXsgezB4NEYsIDB4M0YsIDB4OTMsIDB4NDUsIDB4MEQsIDB4MDAsIDB4MDEsIDB4MDAsCisJICAweDI0LCAweEY1LCAweDAyLCAweDg4LCAweEZGLCAweDI1LCAweDkwfSB9LCAvKiAweDMgKi8KKwl7IHsweDVGLCAweDUwLCAweDgyLCAweDU1LCAweDgxLCAweDAwLCAweDA1LCAweDAwLAorCSAgMHhCRiwgMHgxRiwgMHg5QywgMHg4RSwgMHg5NiwgMHhCOSwgMHgzMH0gfSwgLyogMHg0ICovCisJeyB7MHg1RiwgMHg1MCwgMHg4MiwgMHg1NSwgMHg4MSwgMHgwMCwgMHgwNSwgMHgwMCwKKwkgIDB4MEIsIDB4M0UsIDB4RTksIDB4OEIsIDB4RTcsIDB4MDQsIDB4MDB9IH0sIC8qIDB4NSAqLworCXsgezB4NjMsIDB4NTAsIDB4ODYsIDB4NTYsIDB4OUIsIDB4MDAsIDB4MDEsIDB4MDAsCisJICAweDA2LCAweDNFLCAweEU4LCAweDhCLCAweEU3LCAweEZGLCAweDEwfSB9LCAvKiAweDYgKi8KKwl7IHsweDY0LCAweDRGLCAweDg4LCAweDU1LCAweDlELCAweDAwLCAweDAxLCAweDAwLAorCSAgMHhGMiwgMHgxRiwgMHhFMCwgMHg4MywgMHhERiwgMHhGMywgMHgxMH0gfSwgLyogMHg3ICovCisJeyB7MHg2MywgMHg0RiwgMHg4NywgMHg1QSwgMHg4MSwgMHgwMCwgMHgwNSwgMHgwMCwKKwkgIDB4RkIsIDB4MUYsIDB4RTAsIDB4ODMsIDB4REYsIDB4RkMsIDB4MTB9IH0sIC8qIDB4OCAqLworCXsgezB4NjUsIDB4NEYsIDB4ODksIDB4NTgsIDB4ODAsIDB4MDAsIDB4MDUsIDB4NjAsCisJICAweEZCLCAweDFGLCAweEUwLCAweDgzLCAweERGLCAweEZDLCAweDgwfSB9LCAvKiAweDkgKi8KKwl7IHsweDY1LCAweDRGLCAweDg5LCAweDU4LCAweDgwLCAweDAwLCAweDA1LCAweDYwLAorCSAgMHgwMSwgMHgzRSwgMHhFMCwgMHg4MywgMHhERiwgMHgwMiwgMHg4MH0gfSwgLyogMHhhICovCisJeyB7MHg2NywgMHg0RiwgMHg4QiwgMHg1OCwgMHg4MSwgMHgwMCwgMHgwNSwgMHg2MCwKKwkgIDB4MEQsIDB4M0UsIDB4RTAsIDB4ODMsIDB4REYsIDB4MEUsIDB4OTB9IH0sIC8qIDB4YiAqLworCXsgezB4NjUsIDB4NEYsIDB4ODksIDB4NTcsIDB4OUYsIDB4MDAsIDB4MDEsIDB4MDAsCisJICAweEZCLCAweDFGLCAweEU2LCAweDhBLCAweERGLCAweEZDLCAweDEwfSB9LCAvKiAweGMgKi8KKwl7IHsweDdCLCAweDYzLCAweDlGLCAweDZBLCAweDkzLCAweDAwLCAweDA1LCAweDAwLCAvKiA7CisJCQkJCQkwRCAoODAweDYwMCw1Nkh6KSAqLworCSAgMHg2RiwgMHhGMCwgMHg1OCwgMHg4QSwgMHg1NywgMHg3MCwgMHhBMH0gfSwgICAgIC8qIDsKKwkJCQkJCShWQ0xLIDM2LjBNSHopICovCisJeyB7MHg3RiwgMHg2MywgMHg4MywgMHg2QywgMHgxQywgMHgwMCwgMHgwNiwgMHgwMCwgLyogOworCQkJCQkJMEUgKDgwMHg2MDAsNjBIeikgKi8KKwkgIDB4NzIsIDB4RjAsIDB4NTgsIDB4OEMsIDB4NTcsIDB4NzMsIDB4QTB9IH0sICAgICAvKiA7CisJCQkJCQkoVkNMSyA0MC4wTUh6KSAqLworCXsgezB4N0QsIDB4NjMsIDB4ODEsIDB4NkUsIDB4MUQsIDB4MDAsIDB4MDYsIDB4MDAsIC8qIDsKKwkJCQkJCTBGICg4MDB4NjAwLDcySHopICovCisJICAweDk4LCAweEYwLCAweDdDLCAweDgyLCAweDU3LCAweDk5LCAweDgwfSB9LCAgICAgLyogOworCQkJCQkJKFZDTEsgNTAuME1IeikgKi8KKwl7IHsweDdGLCAweDYzLCAweDgzLCAweDY5LCAweDEzLCAweDAwLCAweDA2LCAweDAwLCAvKiA7CisJCQkJCQkxMCAoODAweDYwMCw3NUh6KSAqLworCSAgMHg2RiwgMHhGMCwgMHg1OCwgMHg4QiwgMHg1NywgMHg3MCwgMHhBMH0gfSwgICAgIC8qIDsKKwkJCQkJCShWQ0xLIDQ5LjVNSHopICovCisJeyB7MHg3RSwgMHg2MywgMHg4MiwgMHg2QiwgMHgxMywgMHgwMCwgMHgwNiwgMHgwMCwgLyogOworCQkJCQkJMTEgKDgwMHg2MDAsODVIeikgKi8KKwkgIDB4NzUsIDB4RjAsIDB4NTgsIDB4OEIsIDB4NTcsIDB4NzYsIDB4QTB9IH0sICAgICAvKiA7CisJCQkJCQkoVkNMSyA1Ni4yNU1IeikgKi8KKwl7IHsweDgxLCAweDYzLCAweDg1LCAweDZELCAweDE4LCAweDAwLCAweDA2LCAweDYwLCAvKiA7CisJCQkJCQkxMiAoODAweDYwMCwxMDBIeikgKi8KKwkgIDB4N0EsIDB4RjAsIDB4NTgsIDB4OEIsIDB4NTcsIDB4N0IsIDB4QTB9IH0sICAgICAvKiA7CisJCQkJCQkoVkNMSyA3NS44TUh6KSAqLworCXsgezB4ODMsIDB4NjMsIDB4ODcsIDB4NkUsIDB4MTksIDB4MDAsIDB4MDYsIDB4NjAsIC8qIDsKKwkJCQkJCTEzICg4MDB4NjAwLDEyMEh6KSAqLworCSAgMHg4MSwgMHhGMCwgMHg1OCwgMHg4QiwgMHg1NywgMHg4MiwgMHhBMH0gfSwgICAgIC8qIDsKKwkJCQkJCShWQ0xLIDc5LjQxMU1IeikgKi8KKwl7IHsweDg1LCAweDYzLCAweDg5LCAweDZGLCAweDFBLCAweDAwLCAweDA2LCAweDYwLCAvKiA7CisJCQkJCQkxNCAoODAweDYwMCwxNjBIeikgKi8KKwkgIDB4OTEsIDB4RjAsIDB4NTgsIDB4OEIsIDB4NTcsIDB4OTIsIDB4QTB9IH0sICAgICAvKiA7CisJCQkJCQkoVkNMSyAxMDUuODIyTUh6KSAqLworCXsgezB4OTksIDB4N0YsIDB4OUQsIDB4ODQsIDB4MUEsIDB4MDAsIDB4MDIsIDB4MDAsCisJICAweDk2LCAweDFGLCAweDdGLCAweDgzLCAweDdGLCAweDk3LCAweDEwfSB9LCAvKiAweDE1ICovCisJeyB7MHhBMywgMHg3RiwgMHg4NywgMHg4NiwgMHg5NywgMHgwMCwgMHgwMiwgMHgwMCwKKwkgIDB4MjQsIDB4RjUsIDB4MDIsIDB4ODgsIDB4RkYsIDB4MjUsIDB4OTB9IH0sIC8qIDB4MTYgKi8KKwl7IHsweEExLCAweDdGLCAweDg1LCAweDg2LCAweDk3LCAweDAwLCAweDAyLCAweDAwLAorCSAgMHgyNCwgMHhGNSwgMHgwMiwgMHg4OCwgMHhGRiwgMHgyNSwgMHg5MH0gfSwgLyogMHgxNyAqLworCXsgezB4OUYsIDB4N0YsIDB4ODMsIDB4ODUsIDB4OTEsIDB4MDAsIDB4MDIsIDB4MDAsCisJICAweDFFLCAweEY1LCAweDAwLCAweDgzLCAweEZGLCAweDFGLCAweDkwfSB9LCAvKiAweDE4ICovCisJeyB7MHhBNywgMHg3RiwgMHg4QiwgMHg4OSwgMHg5NSwgMHgwMCwgMHgwMiwgMHgwMCwKKwkgIDB4MjYsIDB4RjUsIDB4MDAsIDB4ODMsIDB4RkYsIDB4MjcsIDB4OTB9IH0sIC8qIDB4MTkgKi8KKwl7IHsweEE5LCAweDdGLCAweDhELCAweDhDLCAweDlBLCAweDAwLCAweDAyLCAweDYyLAorCSAgMHgyQywgMHhGNSwgMHgwMCwgMHg4MywgMHhGRiwgMHgyRCwgMHgxNH0gfSwgLyogMHgxYSAqLworCXsgezB4QUIsIDB4N0YsIDB4OEYsIDB4OEQsIDB4OUIsIDB4MDAsIDB4MDIsIDB4NjIsCisJICAweDM1LCAweEY1LCAweDAwLCAweDgzLCAweEZGLCAweDM2LCAweDE0fSB9LCAvKiAweDFiICovCisJeyB7MHhDRiwgMHg5RiwgMHg5MywgMHhCMiwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwKKwkgIDB4MTQsIDB4QkEsIDB4MDAsIDB4ODMsIDB4RkYsIDB4MTUsIDB4MDB9IH0sIC8qIDB4MWMgKi8KKwl7IHsweENFLCAweDlGLCAweDkyLCAweEE5LCAweDE3LCAweDAwLCAweDA3LCAweDAwLAorCSAgMHgyOCwgMHg1QSwgMHgwMCwgMHg4MywgMHhGRiwgMHgyOSwgMHg4OX0gfSwgLyogMHgxZCAqLworCXsgezB4Q0UsIDB4OUYsIDB4OTIsIDB4QTUsIDB4MTcsIDB4MDAsIDB4MDcsIDB4MDAsCisJICAweDI4LCAweDVBLCAweDAwLCAweDgzLCAweEZGLCAweDI5LCAweDg5fSB9LCAvKiAweDFlICovCisJeyB7MHhEMywgMHg5RiwgMHg5NywgMHhBQiwgMHgxRiwgMHgwMCwgMHgwNywgMHgwMCwKKwkgIDB4MkUsIDB4NUEsIDB4MDAsIDB4ODMsIDB4RkYsIDB4MkYsIDB4ODl9IH0sIC8qIDB4MWYgKi8KKwl7IHsweDA5LCAweEM3LCAweDhELCAweEQzLCAweDBCLCAweDAxLCAweDA0LCAweDAwLAorCSAgMHhFMCwgMHgxMCwgMHhCMCwgMHg4MywgMHhBRiwgMHhFMSwgMHgyRn0gfSwgLyogMHgyMCAqLworCXsgezB4MDksIDB4QzcsIDB4OEQsIDB4RDMsIDB4MEIsIDB4MDEsIDB4MDQsIDB4MDAsCisJICAweEUwLCAweDEwLCAweEIwLCAweDgzLCAweEFGLCAweEUxLCAweDJGfSB9LCAvKiAweDIxICovCisJeyB7MHgwOSwgMHhDNywgMHg4RCwgMHhEMywgMHgwQiwgMHgwMSwgMHgwNCwgMHgwMCwKKwkgIDB4RTAsIDB4MTAsIDB4QjAsIDB4ODMsIDB4QUYsIDB4RTEsIDB4MkZ9IH0sIC8qIDB4MjIgKi8KKwl7IHsweDA5LCAweEM3LCAweDhELCAweEQzLCAweDBCLCAweDAxLCAweDA0LCAweDAwLAorCSAgMHhFMCwgMHgxMCwgMHhCMCwgMHg4MywgMHhBRiwgMHhFMSwgMHgyRn0gfSwgLyogMHgyMyAqLworCXsgezB4MDksIDB4QzcsIDB4OEQsIDB4RDMsIDB4MEIsIDB4MDEsIDB4MDQsIDB4MDAsCisJICAweEUwLCAweDEwLCAweEIwLCAweDgzLCAweEFGLCAweEUxLCAweDJGfSB9LCAvKiAweDI0ICovCisJeyB7MHgwOSwgMHhDNywgMHg4RCwgMHhEMywgMHgwQiwgMHgwMSwgMHgwNCwgMHgwMCwKKwkgIDB4RTAsIDB4MTAsIDB4QjAsIDB4ODMsIDB4QUYsIDB4RTEsIDB4MkZ9IH0sIC8qIDB4MjUgKi8KKwl7IHsweDA5LCAweEM3LCAweDhELCAweEQzLCAweDBCLCAweDAxLCAweDA0LCAweDAwLAorCSAgMHhFMCwgMHgxMCwgMHhCMCwgMHg4MywgMHhBRiwgMHhFMSwgMHgyRn0gfSwgLyogMHgyNiAqLworCXsgezB4NDAsIDB4RUYsIDB4ODQsIDB4MDMsIDB4MUQsIDB4NDEsIDB4MDEsIDB4MDAsCisJICAweERBLCAweDFGLCAweEEwLCAweDgzLCAweDlGLCAweERCLCAweDFGfSB9LCAvKiAweDI3ICovCisJeyB7MHg0MywgMHhFRiwgMHg4NywgMHgwNiwgMHgwMCwgMHg0MSwgMHgwNSwgMHg2MiwKKwkgIDB4RDQsIDB4MUYsIDB4QTAsIDB4ODMsIDB4OUYsIDB4RDUsIDB4OUZ9IH0sIC8qIDB4MjggKi8KKwl7IHsweDQ1LCAweEVGLCAweDg5LCAweDA3LCAweDAxLCAweDQxLCAweDA1LCAweDYyLAorCSAgMHhEOSwgMHgxRiwgMHhBMCwgMHg4MywgMHg5RiwgMHhEQSwgMHg5Rn0gfSwgLyogMHgyOSAqLworCXsgezB4NDAsIDB4RUYsIDB4ODQsIDB4MDMsIDB4MUQsIDB4NDEsIDB4MDEsIDB4MDAsCisJICAweERBLCAweDFGLCAweEEwLCAweDgzLCAweDlGLCAweERCLCAweDFGfSB9LCAvKiAweDJhICovCisJeyB7MHg0MCwgMHhFRiwgMHg4NCwgMHgwMywgMHgxRCwgMHg0MSwgMHgwMSwgMHgwMCwKKwkgIDB4REEsIDB4MUYsIDB4QTAsIDB4ODMsIDB4OUYsIDB4REIsIDB4MUZ9IH0sIC8qIDB4MmIgKi8KKwl7IHsweDQwLCAweEVGLCAweDg0LCAweDAzLCAweDFELCAweDQxLCAweDAxLCAweDAwLAorCSAgMHhEQSwgMHgxRiwgMHhBMCwgMHg4MywgMHg5RiwgMHhEQiwgMHgxRn0gfSwgLyogMHgyYyAqLworCXsgezB4NTksIDB4RkYsIDB4OUQsIDB4MTcsIDB4MTMsIDB4NDEsIDB4MDUsIDB4NDQsCisJICAweDMzLCAweEJBLCAweDAwLCAweDgzLCAweEZGLCAweDM0LCAweDBGfSB9LCAvKiAweDJkICovCisJeyB7MHg1QiwgMHhGRiwgMHg5RiwgMHgxOCwgMHgxNCwgMHg0MSwgMHgwNSwgMHg0NCwKKwkgIDB4MzgsIDB4QkEsIDB4MDAsIDB4ODMsIDB4RkYsIDB4MzksIDB4MEZ9IH0sIC8qIDB4MmUgKi8KKwl7IHsweDVCLCAweEZGLCAweDlGLCAweDE4LCAweDE0LCAweDQxLCAweDA1LCAweDQ0LAorCSAgMHgzRCwgMHhCQSwgMHgwMCwgMHg4MywgMHhGRiwgMHgzRSwgMHgwRn0gfSwgLyogMHgyZiAqLworCXsgezB4NUQsIDB4RkYsIDB4ODEsIDB4MTksIDB4OTUsIDB4NDEsIDB4MDUsIDB4NDQsCisJICAweDQxLCAweEJBLCAweDAwLCAweDg0LCAweEZGLCAweDQyLCAweDBGfSB9LCAvKiAweDMwICovCisJeyB7MHg1NSwgMHhGRiwgMHg5OSwgMHgwRCwgMHgwQywgMHg0MSwgMHgwNSwgMHgwMCwKKwkgIDB4M0UsIDB4QkEsIDB4MDAsIDB4ODQsIDB4RkYsIDB4M0YsIDB4MEZ9IH0sIC8qIDB4MzEgKi8KKwl7IHsweDdGLCAweDYzLCAweDgzLCAweDZDLCAweDFDLCAweDAwLCAweDA2LCAweDAwLAorCSAgMHg3MiwgMHhCQSwgMHgyNywgMHg4QiwgMHhERiwgMHg3MywgMHg4MH0gfSwgLyogMHgzMiAqLworCXsgezB4N0YsIDB4NjMsIDB4ODMsIDB4NjksIDB4MTMsIDB4MDAsIDB4MDYsIDB4MDAsCisJICAweDZGLCAweEJBLCAweDI2LCAweDg5LCAweERGLCAweDZGLCAweDgwfSB9LCAvKiAweDMzICovCisJeyB7MHg3RiwgMHg2MywgMHg4MiwgMHg2QiwgMHgxMywgMHgwMCwgMHgwNiwgMHgwMCwKKwkgIDB4NzUsIDB4QkEsIDB4MjksIDB4OEMsIDB4REYsIDB4NzUsIDB4ODB9IH0sIC8qIDB4MzQgKi8KKwl7IHsweEEzLCAweDdGLCAweDg3LCAweDg2LCAweDk3LCAweDAwLCAweDAyLCAweDAwLAorCSAgMHgyNCwgMHhGMSwgMHhBRiwgMHg4NSwgMHgzRiwgMHgyNSwgMHhCMH0gfSwgLyogMHgzNSAqLworCXsgezB4OUYsIDB4N0YsIDB4ODMsIDB4ODUsIDB4OTEsIDB4MDAsIDB4MDIsIDB4MDAsCisJICAweDFFLCAweEYxLCAweEFELCAweDgxLCAweDNGLCAweDFGLCAweEIwfSB9LCAvKiAweDM2ICovCisJeyB7MHhBNywgMHg3RiwgMHg4OCwgMHg4OSwgMHgxNSwgMHgwMCwgMHgwMiwgMHgwMCwKKwkgIDB4MjYsIDB4RjEsIDB4QjEsIDB4ODUsIDB4M0YsIDB4MjcsIDB4QjB9IH0sIC8qIDB4MzcgKi8KKwl7IHsweENFLCAweDlGLCAweDkyLCAweEE5LCAweDE3LCAweDAwLCAweDA3LCAweDAwLAorCSAgMHgyOCwgMHhDNCwgMHg3QSwgMHg4RSwgMHhDRiwgMHgyOSwgMHhBMX0gfSwgLyogMHgzOCAqLworCXsgezB4Q0UsIDB4OUYsIDB4OTIsIDB4QTUsIDB4MTcsIDB4MDAsIDB4MDcsIDB4MDAsCisJICAweDI4LCAweEQ0LCAweDdBLCAweDhFLCAweENGLCAweDI5LCAweEExfSB9LCAvKiAweDM5ICovCisJeyB7MHhEMywgMHg5RiwgMHg5NywgMHhBQiwgMHgxRiwgMHgwMCwgMHgwNywgMHgwMCwKKwkgIDB4MkUsIDB4RDQsIDB4N0QsIDB4ODEsIDB4Q0YsIDB4MkYsIDB4QTF9IH0sIC8qIDB4M2EgKi8KKwl7IHsweERDLCAweDlGLCAweDAwLCAweEFCLCAweDE5LCAweDAwLCAweDA3LCAweDAwLAorCSAgMHhFNiwgMHhFRiwgMHhDMCwgMHhDMywgMHhCRiwgMHhFNywgMHg5MH0gfSwgLyogMHgzYiAqLworCXsgezB4NkIsIDB4NTksIDB4OEYsIDB4NUUsIDB4OEMsIDB4MDAsIDB4MDUsIDB4MDAsCisJICAweDBCLCAweDNFLCAweEU5LCAweDhCLCAweEU3LCAweDA0LCAweDAwfSB9LCAvKiAweDNjICovCisJeyB7MHg3QiwgMHg2MywgMHg5RiwgMHg2QSwgMHg5MywgMHgwMCwgMHgwNSwgMHgwMCwKKwkgIDB4NkYsIDB4RjAsIDB4NTgsIDB4OEEsIDB4NTcsIDB4NzAsIDB4QTB9IH0sIC8qIDB4M2QgKi8KKwl7IHsweDg2LCAweDZBLCAweDhhLCAweDc0LCAweDA2LCAweDAwLCAweDAyLCAweDAwLAorCSAgMHg4YywgMHgxNSwgMHg0ZiwgMHg4MywgMHhlZiwgMHg4ZCwgMHgzMH0gfSwgLyogMHgzZSAqLworCXsgezB4ODEsIDB4NkEsIDB4ODUsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsCisJICAweDBmLCAweDNlLCAweGViLCAweDhlLCAweGRmLCAweDEwLCAweDAwfSB9LCAvKiAweDNmICovCisJeyB7MHhDRSwgMHg5RiwgMHg5MiwgMHhBOSwgMHgxNywgMHgwMCwgMHgwNywgMHgwMCwKKwkgIDB4MjAsIDB4RjUsIDB4MDMsIDB4ODgsIDB4RkYsIDB4MjEsIDB4OTB9IH0sIC8qIDB4NDAgKi8KKwl7IHsweEU2LCAweEFFLCAweDhBLCAweEJELCAweDkwLCAweDAwLCAweDAzLCAweDAwLAorCSAgMHgzRCwgMHgxMCwgMHgxQSwgMHg4RCwgMHgxOSwgMHgzRSwgMHgyRn0gfSwgLyogMHg0MSAqLworCXsgezB4QjksIDB4OEYsIDB4OUQsIDB4OUIsIDB4OEEsIDB4MDAsIDB4MDYsIDB4MDAsCisJICAweDdELCAweEZGLCAweDYwLCAweDgzLCAweDVGLCAweDdFLCAweDkwfSB9LCAvKiAweDQyICovCisJeyB7MHhDMywgMHg4RiwgMHg4NywgMHg5QiwgMHgwQiwgMHgwMCwgMHgwNywgMHgwMCwKKwkgIDB4ODIsIDB4RkYsIDB4NjAsIDB4ODMsIDB4NUYsIDB4ODMsIDB4OTB9IH0sICAvKiAweDQzICovCisJeyB7MHhBRCwgMHg3RiwgMHg5MSwgMHg4RSwgMHg5QywgMHgwMCwgMHgwMiwgMHg4MiwKKwkgIDB4NDksIDB4RjUsIDB4MDAsIDB4ODMsIDB4RkYsIDB4NEEsIDB4OTB9IH0sICAvKiAweDQ0ICovCisJeyB7MHhDRCwgMHg5RiwgMHg5MSwgMHhBNywgMHgxOSwgMHgwMCwgMHgwNywgMHg2MCwKKwkgIDB4RTYsIDB4RkYsIDB4QzAsIDB4ODMsIDB4QkYsIDB4RTcsIDB4OTB9IH0sICAvKiAweDQ1ICovCisJeyB7MHhEMywgMHg5RiwgMHg5NywgMHhBQiwgMHgxRiwgMHgwMCwgMHgwNywgMHg2MCwKKwkgIDB4RjEsIDB4RkYsIDB4QzAsIDB4ODMsIDB4QkYsIDB4RjIsIDB4OTB9IH0sICAvKiAweDQ2ICovCisJeyB7MHhENywgMHg5RiwgMHg5QiwgMHhBQywgMHgxRSwgMHgwMCwgMHgwNywgMHgwMCwKKwkgIDB4MDMsIDB4REUsIDB4QzAsIDB4ODQsIDB4QkYsIDB4MDQsIDB4OTB9IH0gIC8qIDB4NDcgKi8KIH07CiAKICNpZiAwCiBzdGF0aWMgc3RydWN0IFhHSTMzMF9DSFRWUmVnRGF0YVN0cnVjdCBYR0lfQ0hUVlJlZ1VOVFNDW10gPSB7Ci0gICAgICAgICAgICAgICAgLyogSW5kZXg6MDAwaCwwMDFoLDAwMmgsMDA0aCwwMDNoLDAwNWgsMDA2aCwwMDdoLDAwOGgsMDE1aCwwMUZoLDAwQ2gsMDBEaCwwMEVoLDAwRmgsMDEwaCAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHg0QSwweDc3LDB4QkIsMHg5NCwweDg0LDB4NDgsMHhGRSwweDUwLDB4MDQsMHgwMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSAgfX0sLyogMDAgKDY0MHgyMDAsNjQweDQwMCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4NEEsMHg3NywweEJCLDB4OTQsMHg4NCwweDQ4LDB4RkUsMHg1MCwweDA0LDB4MDAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEgIH19LC8qIDAxICg2NDB4MzUwKSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHg0QSwweDc3LDB4QkIsMHg5NCwweDg0LDB4NDgsMHhGRSwweDUwLDB4MDQsMHgwMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSAgfX0sLyogMDIgKDcyMHg0MDApICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweDRBLDB4NzcsMHhCQiwweDk0LDB4ODQsMHg0OCwweEZFLDB4NTAsMHgwNCwweDAwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxICB9fSwvKiAwMyAoNzIweDM1MCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4NkEsMHg3NywweEJCLDB4NkUsMHg4NCwweDJFLDB4MDIsMHg1QSwweDA0LDB4MDAsMHg4MCwweDIwLDB4N0UsMHg4MCwweDk3LDB4MDAgIH19LC8qIDA0ICg2NDB4NDgwKSA7OzUvNi8wMiAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHhDRiwweDc3LDB4QjcsMHhDOCwweDg0LDB4M0IsMHgwMiwweDVBLDB4MDQsMHgwMCwweDgwLDB4MTksMHg4OCwweEFFLDB4QTMsMHgwMCAgfX0sLyogMDUgKDgwMHg2MDApIDs7MS8xMi8wMiAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHhFRSwweDc3LDB4QkIsMHg2NiwweDg3LDB4MzIsMHgwMSwweDVBLDB4MDQsMHgwMCwweDgwLDB4MUIsMHhENCwweDJGLDB4NkYsMHgwMCAgfX0vKiAwNiAoMTAyNHg3NjgpIDs7NS82LzAyICovCi0gICAgICAgICAgfTsKKwkvKiBJbmRleDogMDAwaCwgMDAxaCwgMDAyaCwgMDA0aCwgMDAzaCwgMDA1aCwgMDA2aCwgMDA3aCwKKwkJICAwMDhoLCAwMTVoLCAwMUZoLCAwMENoLCAwMERoLCAwMEVoLCAwMEZoLCAwMTBoICovCisJLyogMDAgKDY0MHgyMDAsNjQweDQwMCkgKi8KKwl7IHsweDRBLCAweDc3LCAweEJCLCAweDk0LCAweDg0LCAweDQ4LCAweEZFLCAweDUwLAorCSAgIDB4MDQsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEgIH0gfSwKKwkvKiAwMSAoNjQweDM1MCkgKi8KKwl7IHsweDRBLCAweDc3LCAweEJCLCAweDk0LCAweDg0LCAweDQ4LCAweEZFLCAweDUwLAorCSAgIDB4MDQsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEgIH0gfSwKKwkvKiAwMiAoNzIweDQwMCkgKi8KKwl7IHsweDRBLCAweDc3LCAweEJCLCAweDk0LCAweDg0LCAweDQ4LCAweEZFLCAweDUwLAorCSAgIDB4MDQsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEgIH0gfSwKKwkvKiAwMyAoNzIweDM1MCkgKi8KKwl7IHsweDRBLCAweDc3LCAweEJCLCAweDk0LCAweDg0LCAweDQ4LCAweEZFLCAweDUwLAorCSAgIDB4MDQsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEgIH0gfSwKKwkvKiAwNCAoNjQweDQ4MCkgOzs1LzYvMDIgKi8KKwl7IHsweDZBLCAweDc3LCAweEJCLCAweDZFLCAweDg0LCAweDJFLCAweDAyLCAweDVBLAorCSAgIDB4MDQsIDB4MDAsIDB4ODAsIDB4MjAsIDB4N0UsIDB4ODAsIDB4OTcsIDB4MDAgIH0gfSwKKwkvKiAwNSAoODAweDYwMCkgOzsxLzEyLzAyICovCisJeyB7MHhDRiwgMHg3NywgMHhCNywgMHhDOCwgMHg4NCwgMHgzQiwgMHgwMiwgMHg1QSwKKwkgICAweDA0LCAweDAwLCAweDgwLCAweDE5LCAweDg4LCAweEFFLCAweEEzLCAweDAwICB9IH0sCisJLyogMDYgKDEwMjR4NzY4KSA7OzUvNi8wMiAqLworCXsgezB4RUUsIDB4NzcsIDB4QkIsIDB4NjYsIDB4ODcsIDB4MzIsIDB4MDEsIDB4NUEsCisJICAgMHgwNCwgMHgwMCwgMHg4MCwgMHgxQiwgMHhENCwgMHgyRiwgMHg2RiwgMHgwMCAgfSB9Cit9OwogCiBzdGF0aWMgc3RydWN0IFhHSTMzMF9DSFRWUmVnRGF0YVN0cnVjdCBYR0lfQ0hUVlJlZ09OVFNDW10gPSB7Ci0gICAgICAgICAgICAgICAgLyogSW5kZXg6MDAwaCwwMDFoLDAwMmgsMDA0aCwwMDNoLDAwNWgsMDA2aCwwMDdoLDAwOGgsMDE1aCwwMUZoLDAwQ2gsMDBEaCwwMEVoLDAwRmgsMDEwaCAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHg0OSwweDc3LDB4QkIsMHg3QiwweDg0LDB4MzQsMHgwMCwweDUwLDB4MDQsMHgwMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSAgfX0sLyogMDAgKDY0MHgyMDAsNjQweDQwMCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4NDksMHg3NywweEJCLDB4N0IsMHg4NCwweDM0LDB4MDAsMHg1MCwweDA0LDB4MDAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEgIH19LC8qIDAxICg2NDB4MzUwKSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHg0OSwweDc3LDB4QkIsMHg3QiwweDg0LDB4MzQsMHgwMCwweDUwLDB4MDQsMHgwMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSAgfX0sLyogMDIgKDcyMHg0MDApICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweDQ5LDB4NzcsMHhCQiwweDdCLDB4ODQsMHgzNCwweDAwLDB4NTAsMHgwNCwweDAwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxICB9fSwvKiAwMyAoNzIweDM1MCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4NjksMHg3NywweEJCLDB4NkUsMHg4NCwweDFFLDB4MDAsMHg1QSwweDA0LDB4MDAsMHg4MCwweDI1LDB4MUEsMHg4MCwweDI2LDB4MDAgIH19LC8qIDA0ICg2NDB4NDgwKSA7OzUvNi8wMiAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHhDRSwweDc3LDB4QjcsMHhCNiwweDgzLDB4MkMsMHgwMiwweDVBLDB4MDQsMHgwMCwweDgwLDB4MUMsMHgwMCwweDgyLDB4OTcsMHgwMCAgfX0sLyogMDUgKDgwMHg2MDApIDs7NS82LzAyICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweEVELDB4NzcsMHhCQiwweDY2LDB4OEMsMHgyMSwweDAyLDB4NUEsMHgwNCwweDAwLDB4ODAsMHgxRiwweEEwLDB4N0UsMHg3MywweDAwICB9fS8qIDA2ICgxMDI0eDc2OCkgOzs1LzYvMDIgKi8KLSAgICAgICAgICB9OworCS8qIEluZGV4OiAwMDBoLCAwMDFoLCAwMDJoLCAwMDRoLCAwMDNoLCAwMDVoLCAwMDZoLCAwMDdoLAorCQkgIDAwOGgsIDAxNWgsIDAxRmgsIDAwQ2gsIDAwRGgsIDAwRWgsIDAwRmgsIDAxMGggKi8KKwkvKiAwMCAoNjQweDIwMCw2NDB4NDAwKSAqLworCXsgezB4NDksIDB4NzcsIDB4QkIsIDB4N0IsIDB4ODQsIDB4MzQsIDB4MDAsIDB4NTAsCisJICAgMHgwNCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMX0gfSwKKwkvKiAwMSAoNjQweDM1MCkgKi8KKwl7IHsweDQ5LCAweDc3LCAweEJCLCAweDdCLCAweDg0LCAweDM0LCAweDAwICwgMHg1MCwKKwkgICAweDA0LCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxfSB9LAorCS8qIDAyICg3MjB4NDAwKSAqLworCXsgezB4NDksIDB4NzcsIDB4QkIsIDB4N0IsIDB4ODQsIDB4MzQsIDB4MDAgLCAweDUwLAorCSAgIDB4MDQsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDF9IH0sCisJLyogMDMgKDcyMHgzNTApICovCisJeyB7MHg0OSwgMHg3NywgMHhCQiwgMHg3QiwgMHg4NCwgMHgzNCwgMHgwMCAsIDB4NTAsCisJICAgMHgwNCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMX0gfSwKKwkvKiAwNCAoNjQweDQ4MCkgOzs1LzYvMDIgKi8KKwl7IHsweDY5LCAweDc3LCAweEJCLCAweDZFLCAweDg0LCAweDFFLCAweDAwICwgMHg1QSwKKwkgICAweDA0LCAweDAwLCAweDgwLCAweDI1LCAweDFBLCAweDgwLCAweDI2LCAweDAwfSB9LAorCS8qIDA1ICg4MDB4NjAwKSA7OzUvNi8wMiAqLworCXsgezB4Q0UsIDB4NzcsIDB4QjcsIDB4QjYsIDB4ODMsIDB4MkMsIDB4MDIgLCAweDVBLAorCSAgIDB4MDQsIDB4MDAsIDB4ODAsIDB4MUMsIDB4MDAsIDB4ODIsIDB4OTcsIDB4MDB9IH0sCisJLyogMDYgKDEwMjR4NzY4KSA7OzUvNi8wMiAqLworCXsgezB4RUQsIDB4NzcsIDB4QkIsIDB4NjYsIDB4OEMsIDB4MjEsIDB4MDIgLCAweDVBLAorCSAgIDB4MDQsIDB4MDAsIDB4ODAsIDB4MUYsIDB4QTAsIDB4N0UsIDB4NzMsIDB4MDB9IH0KK307CiAKIHN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0NIVFZSZWdEYXRhU3RydWN0IFhHSV9DSFRWUmVnVVBBTFtdID0gewotICAgICAgICAgICAgICAgIC8qIEluZGV4OjAwMGgsMDAxaCwwMDJoLDAwNGgsMDAzaCwwMDVoLDAwNmgsMDA3aCwwMDhoLDAxNWgsMDFGaCwwMENoLDAwRGgsMDBFaCwwMEZoLDAxMGggKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4NDEsMHg3RiwweEI3LDB4MzQsMHhBRCwweDUwLDB4MzQsMHg4MywweDA1LDB4MDAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEgIH19LC8qIDsgMDAgKDY0MHgyMDAsNjQweDQwMCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4NDEsMHg3RiwweEI3LDB4ODAsMHg4NSwweDUwLDB4MDAsMHg4MywweDA1LDB4MDAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEgIH19LC8qIDsgMDEgKDY0MHgzNTApICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweDQxLDB4N0YsMHhCNywweDM0LDB4QUQsMHg1MCwweDM0LDB4ODMsMHgwNSwweDAwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxICB9fSwvKiA7IDAyICg3MjB4NDAwKSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHg0MSwweDdGLDB4QjcsMHgxMiwweDg1LDB4NTAsMHgwMCwweDgzLDB4MDUsMHgwMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSAgfX0sLyogOyAwMyAoNzIweDM1MCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4NjEsMHg3RiwweEI3LDB4OTksMHg4NCwweDM1LDB4MDQsMHg1QSwweDA1LDB4MDAsMHg4MCwweDI2LDB4MkEsMHg1NSwweDVELDB4MDAgIH19LC8qIDsgMDQgKDY0MHg0ODApICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweEMzLDB4N0YsMHhCNywweDdBLDB4ODQsMHg0MCwweDAyLDB4NUEsMHgwNSwweDAwLDB4ODAsMHgxRiwweDg0LDB4M0QsMHgyOCwweDAwICB9fSwvKiA7IDA1ICg4MDB4NjAwKSA7OzEvMTIvMDIgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4RTUsMHg3RiwweEI3LDB4MUQsMHhBNywweDNFLDB4MDQsMHg1QSwweDA1LDB4MDAsMHg4MCwweDIwLDB4M0UsMHhFNCwweDIyLDB4MDAgIH19LyogOyAwNiAoMTAyNHg3NjgpIDs7MS8xMi8wMiAqLwotCSAgfTsKKwkvKiBJbmRleDogMDAwaCwgMDAxaCwgMDAyaCwgMDA0aCwgMDAzaCwgMDA1aCwgMDA2aCwgMDA3aCwKKwkJICAwMDhoLCAwMTVoLCAwMUZoLCAwMENoLCAwMERoLCAwMEVoLCAwMEZoLCAwMTBoICovCisJLyogOyAwMCAoNjQweDIwMCw2NDB4NDAwKSAqLworCXsgezB4NDEsIDB4N0YsIDB4QjcsIDB4MzQsIDB4QUQsIDB4NTAsIDB4MzQsIDB4ODMsCisJICAgMHgwNSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMX0gfSwKKwkvKiA7IDAxICg2NDB4MzUwKSAqLworCXsgezB4NDEsIDB4N0YsIDB4QjcsIDB4ODAsIDB4ODUsIDB4NTAsIDB4MDAsIDB4ODMsCisJICAgMHgwNSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMX0gfSwKKwkvKiA7IDAyICg3MjB4NDAwKSAqLworCXsgezB4NDEsIDB4N0YsIDB4QjcsIDB4MzQsIDB4QUQsIDB4NTAsIDB4MzQsIDB4ODMsCisJICAgMHgwNSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMX0gfSwKKwkvKiA7IDAzICg3MjB4MzUwKSAqLworCXsgezB4NDEsIDB4N0YsIDB4QjcsIDB4MTIsIDB4ODUsIDB4NTAsIDB4MDAsIDB4ODMsCisJICAgMHgwNSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMX0gfSwKKwkvKiA7IDA0ICg2NDB4NDgwKSAqLworCXsgezB4NjEsIDB4N0YsIDB4QjcsIDB4OTksIDB4ODQsIDB4MzUsIDB4MDQsIDB4NUEsCisJICAgMHgwNSwgMHgwMCwgMHg4MCwgMHgyNiwgMHgyQSwgMHg1NSwgMHg1RCwgMHgwMH0gfSwKKwkvKiA7IDA1ICg4MDB4NjAwKSA7OzEvMTIvMDIgKi8KKwl7IHsweEMzLCAweDdGLCAweEI3LCAweDdBLCAweDg0LCAweDQwLCAweDAyLCAweDVBLAorCSAgIDB4MDUsIDB4MDAsIDB4ODAsIDB4MUYsIDB4ODQsIDB4M0QsIDB4MjgsIDB4MDB9IH0sCisJLyogOyAwNiAoMTAyNHg3NjgpIDs7MS8xMi8wMiAqLworCXsgezB4RTUsIDB4N0YsIDB4QjcsIDB4MUQsIDB4QTcsIDB4M0UsIDB4MDQsIDB4NUEsCisJICAgMHgwNSwgMHgwMCwgMHg4MCwgMHgyMCwgMHgzRSwgMHhFNCwgMHgyMiwgMHgwMH0gfQorfTsKIAogc3RhdGljIHN0cnVjdCBYR0kzMzBfQ0hUVlJlZ0RhdGFTdHJ1Y3QgWEdJX0NIVFZSZWdPUEFMW10gPSB7Ci0gICAgICAgICAgICAgICAgLyogSW5kZXg6MDAwLDB4MDEsMHgwMiwweDA0LDB4MDMsMHgwNSwweDA2LDB4MDcsMHgwOCwweDE1LDB4MUYsMHgwQywweDBELDB4MEUsMHgwRiwweDEwaCAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHg0MSwweDdGLDB4QjcsMHgzNiwweEFELDB4NTAsMHgzNCwweDgzLDB4MDUsMHgwMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSB9fSwvKiAwMCAoNjQweDIwMCw2NDB4NDAwKSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHg0MSwweDdGLDB4QjcsMHg4NiwweDg1LDB4NTAsMHgwMCwweDgzLDB4MDUsMHgwMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSB9fSwvKiAwMSAoNjQweDM1MCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4NDEsMHg3RiwweEI3LDB4MzYsMHhBRCwweDUwLDB4MzQsMHg4MywweDA1LDB4MDAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEgfX0sLyogMDIgKDcyMHg0MDApICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweDQxLDB4N0YsMHhCNywweDg2LDB4ODUsMHg1MCwweDAwLDB4ODMsMHgwNSwweDAwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxIH19LC8qIDAzICg3MjB4MzUwKSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHg2MSwweDdGLDB4QjcsMHg5OSwweDg0LDB4MzUsMHgwNCwweDVBLDB4MDUsMHgwMCwweDgwLDB4MjYsMHgyQSwweDU1LDB4NUQsMHgwMCB9fSwvKiAwNCAoNjQweDQ4MCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4QzEsMHg3RiwweEI3LDB4NEQsMHg4QywweDFFLDB4MzEsMHg1QSwweDA1LDB4MDAsMHg4MCwweDI2LDB4NzgsMHgxOSwweDM0LDB4MDAgfX0sLyogMDUgKDgwMHg2MDApIDs7MS8xMi8wMiAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHhFNCwweDdGLDB4QjcsMHgxRSwweEFGLDB4MjksMHgzNywweDVBLDB4MDUsMHgwMCwweDgwLDB4MjUsMHg4QywweEIyLDB4MkEsMHgwMCB9fS8qIDA2ICgxMDI0eDc2OCkgOzsxLzEyLzAyICovCi0JICAgICB9OworCS8qIEluZGV4OiAwMDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDMsIDB4MDUsIDB4MDYsIDB4MDcsCisJCSAgMHgwOCwgMHgxNSwgMHgxRiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwgMHgxMGggKi8KKwkvKiAwMCAoNjQweDIwMCw2NDB4NDAwKSAqLworCXsgezB4NDEsIDB4N0YsIDB4QjcsIDB4MzYsIDB4QUQsIDB4NTAsIDB4MzQsIDB4ODMsCisJICAgMHgwNSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMX0gfSwKKwkvKiAwMSAoNjQweDM1MCkgKi8KKwl7IHsweDQxLCAweDdGLCAweEI3LCAweDg2LCAweDg1LCAweDUwLCAweDAwLCAweDgzLAorCSAgIDB4MDUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDF9IH0sCisJLyogMDIgKDcyMHg0MDApICovCisJeyB7MHg0MSwgMHg3RiwgMHhCNywgMHgzNiwgMHhBRCwgMHg1MCwgMHgzNCwgMHg4MywKKwkgICAweDA1LCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxfSB9LAorCS8qIDAzICg3MjB4MzUwKSAqLworCXsgezB4NDEsIDB4N0YsIDB4QjcsIDB4ODYsIDB4ODUsIDB4NTAsIDB4MDAsIDB4ODMsCisJICAgMHgwNSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMX0gfSwKKwkvKiAwNCAoNjQweDQ4MCkgKi8KKwl7IHsweDYxLCAweDdGLCAweEI3LCAweDk5LCAweDg0LCAweDM1LCAweDA0LCAweDVBLAorCSAgIDB4MDUsIDB4MDAsIDB4ODAsIDB4MjYsIDB4MkEsIDB4NTUsIDB4NUQsIDB4MDB9IH0sCisJLyogMDUgKDgwMHg2MDApIDs7MS8xMi8wMiAqLworCXsgezB4QzEsIDB4N0YsIDB4QjcsIDB4NEQsIDB4OEMsIDB4MUUsIDB4MzEsIDB4NUEsCisJICAgMHgwNSwgMHgwMCwgMHg4MCwgMHgyNiwgMHg3OCwgMHgxOSwgMHgzNCwgMHgwMH0gfSwKKwkvKiAwNiAoMTAyNHg3NjgpIDs7MS8xMi8wMiAqLworCXsgezB4RTQsIDB4N0YsIDB4QjcsIDB4MUUsIDB4QUYsIDB4MjksIDB4MzcsIDB4NUEsCisJICAgMHgwNSwgMHgwMCwgMHg4MCwgMHgyNSwgMHg4QywgMHhCMiwgMHgyQSwgMHgwMH0gfQorfTsKICNlbmRpZgogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBYR0lfQ0g3MDE3TFYxMDI0eDc2OFtdID0gewotCQkJCQkweDYwLCAweDAyLCAweDAwLCAweDA3LCAweDQwLCAweEVELCAweEEzLAotCQkJCQkweEM4LCAweEM3LCAweEFDLCAweEUwLCAweDAyfTsKKwkweDYwLCAweDAyLCAweDAwLCAweDA3LCAweDQwLCAweEVELAorCTB4QTMsIDB4QzgsIDB4QzcsIDB4QUMsIDB4RTAsIDB4MDJ9Owogc3RhdGljIHVuc2lnbmVkIGNoYXIgWEdJX0NINzAxN0xWMTQwMHgxMDUwW10gPSB7Ci0JCQkJCSAweDYwLCAweDAzLCAweDExLCAweDAwLCAweDQwLCAweEUzLCAweEFELAotCQkJCQkgMHhEQiwgMHhGNiwgMHhBQywgMHhFMCwgMHgwMn07Ci0KKwkweDYwLCAweDAzLCAweDExLCAweDAwLCAweDQwLCAweEUzLAorCTB4QUQsIDB4REIsIDB4RjYsIDB4QUMsIDB4RTAsIDB4MDJ9OwogCiAvKmFkZCBmb3IgbmV3IFVOSVZHQUJJT1MqLwotc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX1N0TENEMTAyNHg3NjhEYXRhW10gPQotewotIHsgICA2MiwgIDI1LCA4MDAsIDU0NiwxMzQ0LCA4MDZ9LAotIHsgICAzMiwgIDE1LCA5MzAsIDU0NiwxMzQ0LCA4MDZ9LAotIHsgICA2MiwgIDI1LCA4MDAsIDU0NiwxMzQ0LCA4MDZ9LCAvKiBjaGlhd2VuIGZvciBkb3Q5IC0+IGRvdDggKi8KLSB7ICAxMDQsICA0NSwgOTQ1LCA0OTYsMTM0NCwgODA2fSwKLSB7ICAgNjIsICAyNSwgODAwLCA1NDYsMTM0NCwgODA2fSwKLSB7ICAgMzEsICAxOCwxMDA4LCA2MjQsMTM0NCwgODA2fSwKLSB7ICAgIDEsICAgMSwxMzQ0LCA4MDYsMTM0NCwgODA2fQorc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX1N0TENEMTAyNHg3NjhEYXRhW10gPSB7CisJezYyLCAgMjUsIDgwMCwgIDU0NiwgMTM0NCwgODA2fSwKKwl7MzIsICAxNSwgOTMwLCAgNTQ2LCAxMzQ0LCA4MDZ9LAorCXs2MiwgIDI1LCA4MDAsICA1NDYsIDEzNDQsIDgwNn0sIC8qY2hpYXdlbmZvcmRvdDktPmRvdDgqLworCXsxMDQsIDQ1LCA5NDUsICA0OTYsIDEzNDQsIDgwNn0sCisJezYyLCAgMjUsIDgwMCwgIDU0NiwgMTM0NCwgODA2fSwKKwl7MzEsICAxOCwgMTAwOCwgNjI0LCAxMzQ0LCA4MDZ9LAorCXsxLCAgIDEsICAxMzQ0LCA4MDYsIDEzNDQsIDgwNn0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9FeHRMQ0QxMDI0eDc2OERhdGFbXSA9Ci17Ci0geyAgIDQyLCAgMjUsMTUzNiwgNDE5LDEzNDQsIDgwNn0sIC8qIHsgMTIsIDUsIDg5NiwgNTEyLDEzNDQsIDgwNn0sIC8vIGFsYW4gMDkvMTIvMjAwMyAqLwotIHsgICA0OCwgIDI1LDE1MzYsIDM2OSwxMzQ0LCA4MDZ9LCAvKiB7IDEyLCA1LCA4OTYsIDUxMCwxMzQ0LCA4MDZ9LCAvLyBhbGFuIDA5LzEyLzIwMDMgKi8KLSB7ICAgNDIsICAyNSwxNTM2LCA0MTksMTM0NCwgODA2fSwgLyogeyAzMiwgMTUsMTAwOCwgNTA1LDEzNDQsIDgwNn0sIC8vIGFsYW4gMDkvMTIvMjAwMyAqLwotIHsgICA0OCwgIDI1LDE1MzYsIDM2OSwxMzQ0LCA4MDZ9LCAvKiB7IDMyLCAxNSwxMDA4LCA1MTQsMTM0NCwgODA2fSwgLy8gYWxhbiAwOS8xMi8yMDAzICovCi0geyAgIDEyLCAgIDUsIDg5NiwgNTAwLDEzNDQsIDgwNn0sCi0geyAgIDQyLCAgMjUsMTAyNCwgNjI1LDEzNDQsIDgwNn0sCi0geyAgICAxLCAgIDEsMTM0NCwgODA2LDEzNDQsIDgwNn0sCi0geyAgIDEyLCAgIDUsIDg5NiwgNTAwLDEzNDQsIDgwNn0sCi0geyAgIDQyLCAgMjUsMTAyNCwgNjI1LDEzNDQsIDgwNn0sCi0geyAgICAxLCAgIDEsMTM0NCwgODA2LDEzNDQsIDgwNn0sCi0geyAgIDEyLCAgIDUsIDg5NiwgNTAwLDEzNDQsIDgwNn0sCi0geyAgIDQyLCAgMjUsMTAyNCwgNjI1LDEzNDQsIDgwNn0sCi0geyAgICAxLCAgIDEsMTM0NCwgODA2LDEzNDQsIDgwNn0KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9FeHRMQ0QxMDI0eDc2OERhdGFbXSA9IHsKKwkvKiB7IDEyLCA1LCA4OTYsIDUxMiwxMzQ0LCA4MDZ9LCAvLyBhbGFuIDA5LzEyLzIwMDMgKi8KKwl7NDIsIDI1LCAxNTM2LCA0MTksIDEzNDQsIDgwNn0sCisJLyogeyAxMiwgNSwgODk2LCA1MTAsMTM0NCwgODA2fSwgLy8gYWxhbiAwOS8xMi8yMDAzICovCisJezQ4LCAyNSwgMTUzNiwgMzY5LCAxMzQ0LCA4MDZ9LAorCS8qIHsgMzIsIDE1LDEwMDgsIDUwNSwxMzQ0LCA4MDZ9LCAvLyBhbGFuIDA5LzEyLzIwMDMgKi8KKwl7NDIsIDI1LCAxNTM2LCA0MTksIDEzNDQsIDgwNn0sCisJLyogeyAzMiwgMTUsMTAwOCwgNTE0LDEzNDQsIDgwNn0sIC8vIGFsYW4gMDkvMTIvMjAwMyAqLworCXs0OCwgMjUsIDE1MzYsIDM2OSwgMTM0NCwgODA2fSwKKwl7MTIsIDUsICA4OTYsICA1MDAsIDEzNDQsIDgwNn0sCisJezQyLCAyNSwgMTAyNCwgNjI1LCAxMzQ0LCA4MDZ9LAorCXsxLCAgMSwgIDEzNDQsIDgwNiwgMTM0NCwgODA2fSwKKwl7MTIsIDUsICA4OTYsICA1MDAsIDEzNDQsIDgwNn0sCisJezQyLCAyNSwgMTAyNCwgNjI1LCAxMzQ0LCA4MDZ9LAorCXsxLCAgMSwgIDEzNDQsIDgwNiwgMTM0NCwgODA2fSwKKwl7MTIsIDUsICA4OTYsICA1MDAsIDEzNDQsIDgwNn0sCisJezQyLCAyNSwgMTAyNCwgNjI1LCAxMzQ0LCA4MDZ9LAorCXsxLCAgMSwgIDEzNDQsIDgwNiwgMTM0NCwgODA2fQogfTsKIAotLypzdHJ1Y3QgWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9TdDJMQ0QxMDI0eDc2OERhdGFbXSA9Ci17Ci0geyAgIDYyLCAgMjUsIDgwMCwgNTQ2LDEzNDQsIDgwNn0sCi0geyAgIDMyLCAgMTUsIDkzMCwgNTQ2LDEzNDQsIDgwNn0sCi0geyAgIDYyLCAgMjUsIDgwMCwgNTQ2LDEzNDQsIDgwNn0sCi0geyAgMTA0LCAgNDUsIDk0NSwgNDk2LDEzNDQsIDgwNn0sCi0geyAgIDYyLCAgMjUsIDgwMCwgNTQ2LDEzNDQsIDgwNn0sCi0geyAgIDMxLCAgMTgsMTAwOCwgNjI0LDEzNDQsIDgwNn0sCi0geyAgICAxLCAgIDEsMTM0NCwgODA2LDEzNDQsIDgwNn0KKy8qc3RydWN0IFhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfU3QyTENEMTAyNHg3NjhEYXRhW10gPSB7CisJezYyLCAgMjUsIDgwMCwgIDU0NiwgMTM0NCwgODA2fSwKKwl7MzIsICAxNSwgOTMwLCAgNTQ2LCAxMzQ0LCA4MDZ9LAorCXs2MiwgIDI1LCA4MDAsICA1NDYsIDEzNDQsIDgwNn0sCisJezEwNCwgNDUsIDk0NSwgIDQ5NiwgMTM0NCwgODA2fSwKKwl7NjIsICAyNSwgODAwLCAgNTQ2LCAxMzQ0LCA4MDZ9LAorCXszMSwgIDE4LCAxMDA4LCA2MjQsIDEzNDQsIDgwNn0sCisJezEsICAgMSwgIDEzNDQsIDgwNiwgMTM0NCwgODA2fQogfTsqLwogCi1zdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfQ2V0TENEMTAyNHg3NjhEYXRhW10gPQotewotCXsgICAgICAgICAxLDEsMTM0NCw4MDYsMTM0NCw4MDYgICAgICAgICAgIH0sIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCi0gICAgICAgIHsgICAgICAgICAxLDEsMTM0NCw4MDYsMTM0NCw4MDYgICAgICAgICAgIH0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCi0gICAgICAgIHsgICAgICAgICAxLDEsMTM0NCw4MDYsMTM0NCw4MDYgICAgICAgICAgIH0sIC8qIDAyICgzNjB4NDAwLDcyMHg0MDApICovCi0gICAgICAgIHsgICAgICAgICAxLDEsMTM0NCw4MDYsMTM0NCw4MDYgICAgICAgICAgIH0sIC8qIDAzICg3MjB4MzUwKSAqLwotICAgICAgICB7ICAgICAgICAgMSwxLDEzNDQsODA2LDEzNDQsODA2ICAgICAgICAgICB9LCAvKiAwNCAoNjQweDQ4MHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgICAgMSwxLDEzNDQsODA2LDEzNDQsODA2ICAgICAgICAgICB9LCAvKiAwNSAoODAweDYwMHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgICAgMSwxLDEzNDQsODA2LDEzNDQsODA2ICAgICAgICAgICB9ICAvKiAwNiAoMTAyNHg3Njh4NjBIeikgKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9DZXRMQ0QxMDI0eDc2OERhdGFbXSA9IHsKKwl7MSwgMSwgMTM0NCwgODA2LCAxMzQ0LCA4MDZ9LCAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsCisJCQkJCSAgICAgICA2NDB4MjAwLDY0MHg0MDApICovCisJezEsIDEsIDEzNDQsIDgwNiwgMTM0NCwgODA2fSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KKwl7MSwgMSwgMTM0NCwgODA2LCAxMzQ0LCA4MDZ9LCAvKiAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLworCXsxLCAxLCAxMzQ0LCA4MDYsIDEzNDQsIDgwNn0sIC8qIDAzICg3MjB4MzUwKSAqLworCXsxLCAxLCAxMzQ0LCA4MDYsIDEzNDQsIDgwNn0sIC8qIDA0ICg2NDB4NDgweDYwSHopICovCisJezEsIDEsIDEzNDQsIDgwNiwgMTM0NCwgODA2fSwgLyogMDUgKDgwMHg2MDB4NjBIeikgKi8KKwl7MSwgMSwgMTM0NCwgODA2LCAxMzQ0LCA4MDZ9ICAvKiAwNiAoMTAyNHg3Njh4NjBIeikgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9TdExDRDEyODB4MTAyNERhdGFbXSA9Ci17Ci0geyAgIDIyLCAgIDUsIDgwMCwgNTEwLDE2NTAsMTA4OH0sCi0geyAgIDIyLCAgIDUsIDgwMCwgNTEwLDE2NTAsMTA4OH0sCi0geyAgMTc2LCAgNDUsIDkwMCwgNTEwLDE2NTAsMTA4OH0sCi0geyAgMTc2LCAgNDUsIDkwMCwgNTEwLDE2NTAsMTA4OH0sCi0geyAgIDIyLCAgIDUsIDgwMCwgNTEwLDE2NTAsMTA4OH0sCi0geyAgIDEzLCAgIDUsMTAyNCwgNjc1LDE1NjAsMTE1Mn0sCi0geyAgIDE2LCAgIDksMTI2NiwgODA0LDE2ODgsMTA3Mn0sCi0geyAgICAxLCAgIDEsMTY4OCwxMDY2LDE2ODgsMTA2Nn0KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9TdExDRDEyODB4MTAyNERhdGFbXSA9IHsKKwl7MjIsICA1LCAgODAwLCAgNTEwLCAgMTY1MCwgMTA4OH0sCisJezIyLCAgNSwgIDgwMCwgIDUxMCwgIDE2NTAsIDEwODh9LAorCXsxNzYsIDQ1LCA5MDAsICA1MTAsICAxNjUwLCAxMDg4fSwKKwl7MTc2LCA0NSwgOTAwLCAgNTEwLCAgMTY1MCwgMTA4OH0sCisJezIyLCAgNSwgIDgwMCwgIDUxMCwgIDE2NTAsIDEwODh9LAorCXsxMywgIDUsICAxMDI0LCA2NzUsICAxNTYwLCAxMTUyfSwKKwl7MTYsICA5LCAgMTI2NiwgODA0LCAgMTY4OCwgMTA3Mn0sCisJezEsICAgMSwgIDE2ODgsIDEwNjYsIDE2ODgsIDEwNjZ9CiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfRXh0TENEMTI4MHgxMDI0RGF0YVtdID0KLXsKLSB7ICAyMTEsICA2MCwxMDI0LCA1MDEsMTY4OCwxMDY2fSwKLSB7ICAyMTEsICA2MCwxMDI0LCA1MDgsMTY4OCwxMDY2fSwKLSB7ICAyMTEsICA2MCwxMDI0LCA1MDEsMTY4OCwxMDY2fSwKLSB7ICAyMTEsICA2MCwxMDI0LCA1MDgsMTY4OCwxMDY2fSwKLSB7ICAyMTEsICA2MCwxMDI0LCA1MDAsMTY4OCwxMDY2fSwKLSB7ICAyMTEsICA3NSwxMDI0LCA2MjUsMTY4OCwxMDY2fSwKLSB7ICAyMTEsIDEyMCwxMjgwLCA3OTgsMTY4OCwxMDY2fSwKLSB7ICAgIDEsICAgMSwxNjg4LDEwNjYsMTY4OCwxMDY2fQorc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX0V4dExDRDEyODB4MTAyNERhdGFbXSA9IHsKKwl7MjExLCA2MCwgIDEwMjQsIDUwMSwgIDE2ODgsIDEwNjZ9LAorCXsyMTEsIDYwLCAgMTAyNCwgNTA4LCAgMTY4OCwgMTA2Nn0sCisJezIxMSwgNjAsICAxMDI0LCA1MDEsICAxNjg4LCAxMDY2fSwKKwl7MjExLCA2MCwgIDEwMjQsIDUwOCwgIDE2ODgsIDEwNjZ9LAorCXsyMTEsIDYwLCAgMTAyNCwgNTAwLCAgMTY4OCwgMTA2Nn0sCisJezIxMSwgNzUsICAxMDI0LCA2MjUsICAxNjg4LCAxMDY2fSwKKwl7MjExLCAxMjAsIDEyODAsIDc5OCwgIDE2ODgsIDEwNjZ9LAorCXsxLCAgIDEsICAgMTY4OCwgMTA2NiwgMTY4OCwgMTA2Nn0KIH07CiAKICNpZiAwCi1zdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfU3QyTENEMTI4MHgxMDI0RGF0YVtdID0KLXsKLSB7ICAgMjIsICAgNSwgODAwLCA1MTAsMTY1MCwxMDg4fSwKLSB7ICAgMjIsICAgNSwgODAwLCA1MTAsMTY1MCwxMDg4fSwKLSB7ICAxNzYsICA0NSwgOTAwLCA1MTAsMTY1MCwxMDg4fSwKLSB7ICAxNzYsICA0NSwgOTAwLCA1MTAsMTY1MCwxMDg4fSwKLSB7ICAgMjIsICAgNSwgODAwLCA1MTAsMTY1MCwxMDg4fSwKLSB7ICAgMTMsICAgNSwxMDI0LCA2NzUsMTU2MCwxMTUyfSwKLSB7ICAgMTYsICAgOSwxMjY2LCA4MDQsMTY4OCwxMDcyfSwKLSB7ICAgIDEsICAgMSwxNjg4LDEwNjYsMTY4OCwxMDY2fQorc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX1N0MkxDRDEyODB4MTAyNERhdGFbXSA9IHsKKwl7MjIsICA1LCAgODAwLCAgNTEwLCAgMTY1MCwgMTA4OH0sCisJezIyLCAgNSwgIDgwMCwgIDUxMCwgIDE2NTAsIDEwODh9LAorCXsxNzYsIDQ1LCA5MDAsICA1MTAsICAxNjUwLCAxMDg4fSwKKwl7MTc2LCA0NSwgOTAwLCAgNTEwLCAgMTY1MCwgMTA4OH0sCisJezIyLCAgNSwgIDgwMCwgIDUxMCwgIDE2NTAsIDEwODh9LAorCXsxMywgIDUsICAxMDI0LCA2NzUsICAxNTYwLCAxMTUyfSwKKwl7MTYsICA5LCAgMTI2NiwgODA0LCAgMTY4OCwgMTA3Mn0sCisJezEsICAgMSwgIDE2ODgsIDEwNjYsIDE2ODgsIDEwNjZ9CiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9DZXRMQ0QxMjgweDEwMjREYXRhW10gPQotewotCXsgICAgICAgICAxLDEsMTY4OCwxMDY2LDE2ODgsMTA2NiAgICAgICAgIH0sIC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwotICAgICAgICB7ICAgICAgICAgMSwxLDE2ODgsMTA2NiwxNjg4LDEwNjYgICAgICAgICB9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwotICAgICAgICB7ICAgICAgICAgMSwxLDE2ODgsMTA2NiwxNjg4LDEwNjYgICAgICAgICB9LCAvKiAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLwotICAgICAgICB7ICAgICAgICAgMSwxLDE2ODgsMTA2NiwxNjg4LDEwNjYgICAgICAgICB9LCAvKiAwMyAoNzIweDM1MCkgKi8KLSAgICAgICAgeyAgICAgICAgIDEsMSwxNjg4LDEwNjYsMTY4OCwxMDY2ICAgICAgICAgfSwgLyogMDQgKDY0MHg0ODB4NjBIeikgKi8KLSAgICAgICAgeyAgICAgICAgIDEsMSwxNjg4LDEwNjYsMTY4OCwxMDY2ICAgICAgICAgfSwgLyogMDUgKDgwMHg2MDB4NjBIeikgKi8KLSAgICAgICAgeyAgICAgICAgIDEsMSwxNjg4LDEwNjYsMTY4OCwxMDY2ICAgICAgICAgfSwgLyogMDYgKDEwMjR4NzY4eDYwSHopICovCi0gICAgICAgIHsgICAgICAgICAxLDEsMTY4OCwxMDY2LDE2ODgsMTA2NiAgICAgICAgIH0sIC8qIDA3ICgxMjgweDEwMjR4NjBIeikgKi8KLSAgICAgICAgeyAgICAgICAgIDEsMSwxNjg4LDEwNjYsMTY4OCwxMDY2ICAgICAgICAgfSAvKiAwOCAoMTQwMHgxMDUweDYwSHopICovCitzdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfQ2V0TENEMTI4MHgxMDI0RGF0YVtdID0geworCXsxLCAxLCAxNjg4LCAxMDY2LCAxNjg4LCAxMDY2fSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCwKKwkJCQkJICAgICAgIDY0MHgyMDAsNjQweDQwMCkgKi8KKwl7MSwgMSwgMTY4OCwgMTA2NiwgMTY4OCwgMTA2Nn0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCisJezEsIDEsIDE2ODgsIDEwNjYsIDE2ODgsIDEwNjZ9LCAvKiAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLworCXsxLCAxLCAxNjg4LCAxMDY2LCAxNjg4LCAxMDY2fSwgLyogMDMgKDcyMHgzNTApICovCisJezEsIDEsIDE2ODgsIDEwNjYsIDE2ODgsIDEwNjZ9LCAvKiAwNCAoNjQweDQ4MHg2MEh6KSAqLworCXsxLCAxLCAxNjg4LCAxMDY2LCAxNjg4LCAxMDY2fSwgLyogMDUgKDgwMHg2MDB4NjBIeikgKi8KKwl7MSwgMSwgMTY4OCwgMTA2NiwgMTY4OCwgMTA2Nn0sIC8qIDA2ICgxMDI0eDc2OHg2MEh6KSAqLworCXsxLCAxLCAxNjg4LCAxMDY2LCAxNjg4LCAxMDY2fSwgLyogMDcgKDEyODB4MTAyNHg2MEh6KSAqLworCXsxLCAxLCAxNjg4LCAxMDY2LCAxNjg4LCAxMDY2fSAgLyogMDggKDE0MDB4MTA1MHg2MEh6KSAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX1N0TENEMTQwMHgxMDUwRGF0YVtdID0KLXsKLQl7ICAgICAgICAgMjExLDEwMCwyMTAwLDQwOCwxNjg4LDEwNjYgICAgICB9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KLSAgICAgICAgeyAgICAgICAgIDIxMSw2NCwxNTM2LDM1OCwxNjg4LDEwNjYgICAgICAgfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KLSAgICAgICAgeyAgICAgICAgIDIxMSwxMDAsMjEwMCw0MDgsMTY4OCwxMDY2ICAgICAgfSwgLyogMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KLSAgICAgICAgeyAgICAgICAgIDIxMSw2NCwxNTM2LDM1OCwxNjg4LDEwNjYgICAgICAgfSwgLyogMDMgKDcyMHgzNTApICovCi0gICAgICAgIHsgICAgICAgICAyMTEsNDgsODQwLDQ4OCwxNjg4LDEwNjYgICAgICAgIH0sIC8qIDA0ICg2NDB4NDgweDYwSHopICovCi0gICAgICAgIHsgICAgICAgICAyMTEsNzIsMTAwOCw2MDksMTY4OCwxMDY2ICAgICAgIH0sIC8qIDA1ICg4MDB4NjAweDYwSHopICovCi0gICAgICAgIHsgICAgICAgICAyMTEsMTI4LDE0MDAsNzc2LDE2ODgsMTA2NiAgICAgIH0sIC8qIDA2ICgxMDI0eDc2OHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgICAgMSwxLDE2ODgsMTA2NiwxNjg4LDEwNjYgICAgICAgICB9LCAvKiAwNyAoMTI4MHgxMDI0eDYwSHogdy9vIFNjYWxpbmcpICovCi0gICAgICAgIHsgICAgICAgICAxLDEsMTY4OCwxMDY2LDE2ODgsMTA2NiAgICAgICAgIH0gIC8qIDA4ICgxNDAweDEwNTB4NjBIeikgKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9TdExDRDE0MDB4MTA1MERhdGFbXSA9IHsKKwl7MjExLCAxMDAsIDIxMDAsIDQwOCwgIDE2ODgsIDEwNjZ9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLAorCQkJCQkJICAgNjQweDIwMCw2NDB4NDAwKSAqLworCXsyMTEsIDY0LCAgMTUzNiwgMzU4LCAgMTY4OCwgMTA2Nn0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCisJezIxMSwgMTAwLCAyMTAwLCA0MDgsICAxNjg4LCAxMDY2fSwgLyogMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KKwl7MjExLCA2NCwgIDE1MzYsIDM1OCwgIDE2ODgsIDEwNjZ9LCAvKiAwMyAoNzIweDM1MCkgKi8KKwl7MjExLCA0OCwgIDg0MCwgIDQ4OCwgIDE2ODgsIDEwNjZ9LCAvKiAwNCAoNjQweDQ4MHg2MEh6KSAqLworCXsyMTEsIDcyLCAgMTAwOCwgNjA5LCAgMTY4OCwgMTA2Nn0sIC8qIDA1ICg4MDB4NjAweDYwSHopICovCisJezIxMSwgMTI4LCAxNDAwLCA3NzYsICAxNjg4LCAxMDY2fSwgLyogMDYgKDEwMjR4NzY4eDYwSHopICovCisJezEsICAgMSwgICAxNjg4LCAxMDY2LCAxNjg4LCAxMDY2fSwgLyogMDcgKDEyODB4MTAyNHg2MEh6CisJCQkJCQkgIHcvbyBTY2FsaW5nKSAqLworCXsxLCAgIDEsICAgMTY4OCwgMTA2NiwgMTY4OCwgMTA2Nn0gIC8qIDA4ICgxNDAweDEwNTB4NjBIeikgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9FeHRMQ0QxNDAweDEwNTBEYXRhW10gPQotewotCXsgICAgICAgICAyMTEsMTAwLDIxMDAsNDA4LDE2ODgsMTA2NiAgICAgIH0sIC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwotICAgICAgICB7ICAgICAgICAgMjExLDY0LDE1MzYsMzU4LDE2ODgsMTA2NiAgICAgICB9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwotICAgICAgICB7ICAgICAgICAgMjExLDEwMCwyMTAwLDQwOCwxNjg4LDEwNjYgICAgICB9LCAvKiAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLwotICAgICAgICB7ICAgICAgICAgMjExLDY0LDE1MzYsMzU4LDE2ODgsMTA2NiAgICAgICB9LCAvKiAwMyAoNzIweDM1MCkgKi8KLSAgICAgICAgeyAgICAgICAgIDIxMSw0OCw4NDAsNDg4LDE2ODgsMTA2NiAgICAgICAgfSwgLyogMDQgKDY0MHg0ODB4NjBIeikgKi8KLSAgICAgICAgeyAgICAgICAgIDIxMSw3MiwxMDA4LDYwOSwxNjg4LDEwNjYgICAgICAgfSwgLyogMDUgKDgwMHg2MDB4NjBIeikgKi8KLSAgICAgICAgeyAgICAgICAgIDIxMSwxMjgsMTQwMCw3NzYsMTY4OCwxMDY2ICAgICAgfSwgLyogMDYgKDEwMjR4NzY4eDYwSHopICovCi0gICAgICAgIHsgICAgICAgICAxLDEsMTY4OCwxMDY2LDE2ODgsMTA2NiAgICAgICAgIH0sIC8qIDA3ICgxMjgweDEwMjR4NjBIeiB3L28gU2NhbGluZykgKi8KLSAgICAgICAgeyAgICAgICAgIDEsMSwxNjg4LDEwNjYsMTY4OCwxMDY2ICAgICAgICAgfSAgLyogMDggKDE0MDB4MTA1MHg2MEh6KSAqLworc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX0V4dExDRDE0MDB4MTA1MERhdGFbXSA9IHsKKwl7MjExLCAxMDAsIDIxMDAsIDQwOCwgIDE2ODgsIDEwNjZ9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLAorCQkJCQkJICAgNjQweDIwMCw2NDB4NDAwKSAqLworCXsyMTEsIDY0LCAgMTUzNiwgMzU4LCAgMTY4OCwgMTA2Nn0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCisJezIxMSwgMTAwLCAyMTAwLCA0MDgsICAxNjg4LCAxMDY2fSwgLyogMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KKwl7MjExLCA2NCwgIDE1MzYsIDM1OCwgIDE2ODgsIDEwNjZ9LCAvKiAwMyAoNzIweDM1MCkgKi8KKwl7MjExLCA0OCwgIDg0MCwgIDQ4OCwgIDE2ODgsIDEwNjZ9LCAvKiAwNCAoNjQweDQ4MHg2MEh6KSAqLworCXsyMTEsIDcyLCAgMTAwOCwgNjA5LCAgMTY4OCwgMTA2Nn0sIC8qIDA1ICg4MDB4NjAweDYwSHopICovCisJezIxMSwgMTI4LCAxNDAwLCA3NzYsICAxNjg4LCAxMDY2fSwgLyogMDYgKDEwMjR4NzY4eDYwSHopICovCisJezEsICAgMSwgICAxNjg4LCAxMDY2LCAxNjg4LCAxMDY2fSwgLyogMDcgKDEyODB4MTAyNHg2MEh6CisJCQkJCQkgIHcvbyBTY2FsaW5nKSAqLworCXsxLCAgIDEsICAgMTY4OCwgMTA2NiwgMTY4OCwgMTA2Nn0gIC8qIDA4ICgxNDAweDEwNTB4NjBIeikgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9FeHRMQ0QxNjAweDEyMDBEYXRhW10gPQotewotICAgICAgICB7ICAgICAgICAgNCwxLDE2MjAsNDIwLDIxNjAsMTI1MCAgICAgICAgICB9LCAvKiB7IDMsMSwyMTYwLDQyNSwyMTYwLDEyNTAgfSwgLy8gMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApIC8vIGFsYW4gMTAvMTQvMjAwMyAqLwotICAgICAgICB7ICAgICAgICAgMjcsNywxOTIwLDM3NSwyMTYwLDEyNTAgICAgICAgICB9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwotICAgICAgICB7ICAgICAgICAgNCwxLDE2MjAsNDIwLDIxNjAsMTI1MCAgICAgICAgICB9LCAvKiB7IDMsMSwyMTYwLDQyNSwyMTYwLDEyNTAgfSwgLy8gMDIgKDM2MHg0MDAsNzIweDQwMCkgLy8gYWxhbiAxMC8xNC8yMDAzICovCi0gICAgICAgIHsgICAgICAgICAyNyw3LDE5MjAsMzc1LDIxNjAsMTI1MCAgICAgICAgIH0sIC8qIDAzICg3MjB4MzUwKSAqLwotICAgICAgICB7ICAgICAgICAgMjcsNCw4MDAsNTAwLDIxNjAsMTI1MCAgICAgICAgICB9LCAvKiAwNCAoNjQweDQ4MHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgICAgNCwxLDEwODAsNjI1LDIxNjAsMTI1MCAgICAgICAgICB9LCAvKiAwNSAoODAweDYwMHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgICAgNSwyLDEzNTAsODAwLDIxNjAsMTI1MCAgICAgICAgICB9LCAvKiAwNiAoMTAyNHg3Njh4NjBIeikgKi8KLSAgICAgICAgeyAgICAgICAgIDI3LDE2LDE1MDAsMTA2NCwyMTYwLDEyNTAgICAgICAgfSwgLyogMDcgKDEyODB4MTAyNHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgICAgOSw3LDE5MjAsMTEwNiwyMTYwLDEyNTAgICAgICAgICB9LCAvKiAwOCAoMTQwMHgxMDUweDYwSHopICovCi0gICAgICAgIHsgICAgICAgICAxLDEsMjE2MCwxMjUwLDIxNjAsMTI1MCAgICAgICAgIH0gIC8qIDA5ICgxNjAweDEyMDB4NjBIeikgOzMwMmx2ICovCitzdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfRXh0TENEMTYwMHgxMjAwRGF0YVtdID0geworCXs0LCAgMSwgIDE2MjAsIDQyMCwgIDIxNjAsIDEyNTB9LCAvKiB7IDMsMSwyMTYwLDQyNSwyMTYwLDEyNTAgfSwKKwkJCQkJICAvLyAwMCAoMzIweDIwMCwzMjB4NDAwLAorCQkJCQkgIC8vCSA2NDB4MjAwLDY0MHg0MDApCisJCQkJCSAgLy8JIC8vIGFsYW4gMTAvMTQvMjAwMyAqLworCXsyNywgNywgIDE5MjAsIDM3NSwgIDIxNjAsIDEyNTB9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLworCXs0LCAgMSwgIDE2MjAsIDQyMCwgIDIxNjAsIDEyNTB9LCAvKiB7IDMsMSwyMTYwLDQyNSwyMTYwLDEyNTAgfSwKKwkJCQkJICAvLyAwMiAoMzYweDQwMCw3MjB4NDAwKQorCQkJCQkgIC8vIC8vIGFsYW4gMTAvMTQvMjAwMyAqLworCXsyNywgNywgIDE5MjAsIDM3NSwgIDIxNjAsIDEyNTB9LCAvKiAwMyAoNzIweDM1MCkgKi8KKwl7MjcsIDQsICA4MDAsICA1MDAsICAyMTYwLCAxMjUwfSwgLyogMDQgKDY0MHg0ODB4NjBIeikgKi8KKwl7NCwgIDEsICAxMDgwLCA2MjUsICAyMTYwLCAxMjUwfSwgLyogMDUgKDgwMHg2MDB4NjBIeikgKi8KKwl7NSwgIDIsICAxMzUwLCA4MDAsICAyMTYwLCAxMjUwfSwgLyogMDYgKDEwMjR4NzY4eDYwSHopICovCisJezI3LCAxNiwgMTUwMCwgMTA2NCwgMjE2MCwgMTI1MH0sIC8qIDA3ICgxMjgweDEwMjR4NjBIeikgKi8KKwl7OSwgIDcsICAxOTIwLCAxMTA2LCAyMTYwLCAxMjUwfSwgLyogMDggKDE0MDB4MTA1MHg2MEh6KSAqLworCXsxLCAgMSwgIDIxNjAsIDEyNTAsIDIxNjAsIDEyNTB9ICAvKiAwOSAoMTYwMHgxMjAweDYwSHopIDszMDJsdiAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX1N0TENEMTYwMHgxMjAwRGF0YVtdID0KLXsKLSAgICAgICAgeyAgICAgICAgIDI3LDQsODAwLDUwMCwyMTYwLDEyNTAgICAgICAgICAgfSwvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KLSAgICAgICAgeyAgICAgICAgIDI3LDQsODAwLDUwMCwyMTYwLDEyNTAgICAgICAgICAgfSwvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwotICAgICAgICB7ICAgICAgICAgMjcsNCw4MDAsNTAwLDIxNjAsMTI1MCAgICAgICAgICB9LC8qIDAyICgzNjB4NDAwLDcyMHg0MDApICovCi0gICAgICAgIHsgICAgICAgICAyNyw0LDgwMCw1MDAsMjE2MCwxMjUwICAgICAgICAgIH0sLyogMDMgKDcyMHgzNTApICovCi0gICAgICAgIHsgICAgICAgICAyNyw0LDgwMCw1MDAsMjE2MCwxMjUwICAgICAgICAgIH0sLyogMDQgKDMyMHgyNDAsNjQweDQ4MCkgKi8KLSAgICAgICAgeyAgICAgICAgIDQsMSwxMDgwLDYyNSwyMTYwLDEyNTAgICAgICAgICAgfSwvKiAwNSAoNDAweDMwMCw4MDB4NjAwKSAqLwotICAgICAgICB7ICAgICAgICAgNSwyLDEzNTAsODAwLDIxNjAsMTI1MCAgICAgICAgICB9LC8qIDA2ICg1MTJ4Mzg0LDEwMjR4NzY4KSAqLwotICAgICAgICB7ICAgICAgICAgMTM1LDg4LDE2MDAsMTEwMCwyMTYwLDEyNTAgICAgICB9LC8qIDA3ICgxMjgweDEwMjQpICovCi0gICAgICAgIHsgICAgICAgICAxLDEsMTgwMCwxNTAwLDIxNjAsMTI1MCAgICAgICAgIH0sLyogMDggKDE0MDB4MTA1MCkgKi8KLSAgICAgICAgeyAgICAgICAgIDEsMSwyMTYwLDEyNTAsMjE2MCwxMjUwICAgICAgICAgfSAvKiAwOSAoMTYwMHgxMjAwKSAqLworc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX1N0TENEMTYwMHgxMjAwRGF0YVtdID0geworCXsyNywgIDQsICA4MDAsICA1MDAsICAyMTYwLCAxMjUwfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCwKKwkJCQkJCSAgNjQweDIwMCw2NDB4NDAwKSAqLworCXsyNywgIDQsICA4MDAsICA1MDAsICAyMTYwLCAxMjUwfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KKwl7MjcsICA0LCAgODAwLCAgNTAwLCAgMjE2MCwgMTI1MH0sIC8qIDAyICgzNjB4NDAwLDcyMHg0MDApICovCisJezI3LCAgNCwgIDgwMCwgIDUwMCwgIDIxNjAsIDEyNTB9LCAvKiAwMyAoNzIweDM1MCkgKi8KKwl7MjcsICA0LCAgODAwLCAgNTAwLCAgMjE2MCwgMTI1MH0sIC8qIDA0ICgzMjB4MjQwLDY0MHg0ODApICovCisJezQsICAgMSwgIDEwODAsIDYyNSwgIDIxNjAsIDEyNTB9LCAvKiAwNSAoNDAweDMwMCw4MDB4NjAwKSAqLworCXs1LCAgIDIsICAxMzUwLCA4MDAsICAyMTYwLCAxMjUwfSwgLyogMDYgKDUxMngzODQsMTAyNHg3NjgpICovCisJezEzNSwgODgsIDE2MDAsIDExMDAsIDIxNjAsIDEyNTB9LCAvKiAwNyAoMTI4MHgxMDI0KSAqLworCXsxLCAgIDEsICAxODAwLCAxNTAwLCAyMTYwLCAxMjUwfSwgLyogMDggKDE0MDB4MTA1MCkgKi8KKwl7MSwgICAxLCAgMjE2MCwgMTI1MCwgMjE2MCwgMTI1MH0gIC8qIDA5ICgxNjAweDEyMDApICovCiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfQ2V0TENEMTQwMHgxMDUwRGF0YVtdID0KLXsKLQl7ICAgICAgICAgMSwxLDE2ODgsMTA2NiwxNjg4LDEwNjYgICAgICAgICB9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KLSAgICAgICAgeyAgICAgICAgIDEsMSwxNjg4LDEwNjYsMTY4OCwxMDY2ICAgICAgICAgfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KLSAgICAgICAgeyAgICAgICAgIDEsMSwxNjg4LDEwNjYsMTY4OCwxMDY2ICAgICAgICAgfSwgLyogMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KLSAgICAgICAgeyAgICAgICAgIDEsMSwxNjg4LDEwNjYsMTY4OCwxMDY2ICAgICAgICAgfSwgLyogMDMgKDcyMHgzNTApICovCi0gICAgICAgIHsgICAgICAgICAxLDEsMTY4OCwxMDY2LDE2ODgsMTA2NiAgICAgICAgIH0sIC8qIDA0ICg2NDB4NDgweDYwSHopICovCi0gICAgICAgIHsgICAgICAgICAxLDEsMTY4OCwxMDY2LDE2ODgsMTA2NiAgICAgICAgIH0sIC8qIDA1ICg4MDB4NjAweDYwSHopICovCi0gICAgICAgIHsgICAgICAgICAxLDEsMTY4OCwxMDY2LDE2ODgsMTA2NiAgICAgICAgIH0sIC8qIDA2ICgxMDI0eDc2OHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgICAgMSwxLDE2ODgsMTA2NiwxNjg4LDEwNjYgICAgICAgICB9LCAvKiAwNyAoMTI4MHgxMDI0eDYwSHopICovCi0gICAgICAgIHsgICAgICAgICAxLDEsMTY4OCwxMDY2LDE2ODgsMTA2NiAgICAgICAgIH0gIC8qIDA4ICgxNDAweDEwNTB4NjBIeikgKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9DZXRMQ0QxNDAweDEwNTBEYXRhW10gPSB7CisJezEsIDEsIDE2ODgsIDEwNjYsIDE2ODgsIDEwNjZ9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLAorCQkJCQkgICAgICAgNjQweDIwMCw2NDB4NDAwKSAqLworCXsxLCAxLCAxNjg4LCAxMDY2LCAxNjg4LCAxMDY2fSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KKwl7MSwgMSwgMTY4OCwgMTA2NiwgMTY4OCwgMTA2Nn0sIC8qIDAyICgzNjB4NDAwLDcyMHg0MDApICovCisJezEsIDEsIDE2ODgsIDEwNjYsIDE2ODgsIDEwNjZ9LCAvKiAwMyAoNzIweDM1MCkgKi8KKwl7MSwgMSwgMTY4OCwgMTA2NiwgMTY4OCwgMTA2Nn0sIC8qIDA0ICg2NDB4NDgweDYwSHopICovCisJezEsIDEsIDE2ODgsIDEwNjYsIDE2ODgsIDEwNjZ9LCAvKiAwNSAoODAweDYwMHg2MEh6KSAqLworCXsxLCAxLCAxNjg4LCAxMDY2LCAxNjg4LCAxMDY2fSwgLyogMDYgKDEwMjR4NzY4eDYwSHopICovCisJezEsIDEsIDE2ODgsIDEwNjYsIDE2ODgsIDEwNjZ9LCAvKiAwNyAoMTI4MHgxMDI0eDYwSHopICovCisJezEsIDEsIDE2ODgsIDEwNjYsIDE2ODgsIDEwNjZ9ICAvKiAwOCAoMTQwMHgxMDUweDYwSHopICovCiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfTm9TY2FsaW5nRGF0YVtdID0KLXsKLSB7ICAgIDEsICAgMSwgODAwLCA0NDksIDgwMCwgNDQ5fSwKLSB7ICAgIDEsICAgMSwgODAwLCA0NDksIDgwMCwgNDQ5fSwKLSB7ICAgIDEsICAgMSwgOTAwLCA0NDksIDkwMCwgNDQ5fSwKLSB7ICAgIDEsICAgMSwgOTAwLCA0NDksIDkwMCwgNDQ5fSwKLSB7ICAgIDEsICAgMSwgODAwLCA1MjUsIDgwMCwgNTI1fSwKLSB7ICAgIDEsICAgMSwxMDU2LCA2MjgsMTA1NiwgNjI4fSwKLSB7ICAgIDEsICAgMSwxMzQ0LCA4MDYsMTM0NCwgODA2fSwKLSB7ICAgIDEsICAgMSwxNjg4LDEwNjYsMTY4OCwxMDY2fQorc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX05vU2NhbGluZ0RhdGFbXSA9IHsKKwl7MSwgMSwgODAwLCAgNDQ5LCAgODAwLCAgNDQ5fSwKKwl7MSwgMSwgODAwLCAgNDQ5LCAgODAwLCAgNDQ5fSwKKwl7MSwgMSwgOTAwLCAgNDQ5LCAgOTAwLCAgNDQ5fSwKKwl7MSwgMSwgOTAwLCAgNDQ5LCAgOTAwLCAgNDQ5fSwKKwl7MSwgMSwgODAwLCAgNTI1LCAgODAwLCAgNTI1fSwKKwl7MSwgMSwgMTA1NiwgNjI4LCAgMTA1NiwgNjI4fSwKKwl7MSwgMSwgMTM0NCwgODA2LCAgMTM0NCwgODA2fSwKKwl7MSwgMSwgMTY4OCwgMTA2NiwgMTY4OCwgMTA2Nn0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9FeHRMQ0QxMDI0eDc2OHg3NURhdGFbXSA9Ci17Ci0gICAgICAgIHs0MiwyNSwxNTM2LDQxOSwxMzQ0LDgwNiB9LCAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwotICAgICAgICB7NDgsMjUsMTUzNiwzNjksMTM0NCw4MDYgfSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwotICAgICAgICB7NDIsMjUsMTUzNiw0MTksMTM0NCw4MDYgfSwgLyogOyAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLwotICAgICAgICB7NDgsMjUsMTUzNiwzNjksMTM0NCw4MDYgfSwgLyogOyAwMyAoNzIweDM1MCkgKi8KLSAgICAgICAgezgsNSwxMzEyLDUwMCwxMzEyLDgwMCAgIH0sIC8qIDsgMDQgKDY0MHg0ODB4NzVIeikgKi8KLSAgICAgICAgezQxLDI1LDEwMjQsNjI1LDEzMTIsODAwIH0sIC8qIDsgMDUgKDgwMHg2MDB4NzVIeikgKi8KLSAgICAgICAgezEsMSwxMzEyLDgwMCwxMzEyLDgwMCAgIH0gIC8qIDsgMDYgKDEwMjR4NzY4eDc1SHopICovCitzdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfRXh0TENEMTAyNHg3Njh4NzVEYXRhW10gPSB7CisJezQyLCAyNSwgMTUzNiwgNDE5LCAxMzQ0LCA4MDZ9LCAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsCisJCQkJCQkgNjQweDIwMCw2NDB4NDAwKSAqLworCXs0OCwgMjUsIDE1MzYsIDM2OSwgMTM0NCwgODA2fSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLworCXs0MiwgMjUsIDE1MzYsIDQxOSwgMTM0NCwgODA2fSwgLyogOyAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLworCXs0OCwgMjUsIDE1MzYsIDM2OSwgMTM0NCwgODA2fSwgLyogOyAwMyAoNzIweDM1MCkgKi8KKwl7OCwgIDUsICAxMzEyLCA1MDAsIDEzMTIsIDgwMH0sIC8qIDsgMDQgKDY0MHg0ODB4NzVIeikgKi8KKwl7NDEsIDI1LCAxMDI0LCA2MjUsIDEzMTIsIDgwMH0sIC8qIDsgMDUgKDgwMHg2MDB4NzVIeikgKi8KKwl7MSwgIDEsICAxMzEyLCA4MDAsIDEzMTIsIDgwMH0gIC8qIDsgMDYgKDEwMjR4NzY4eDc1SHopICovCiB9OwogCiAjaWYgMAotc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX1N0TENEMTAyNHg3Njh4NzVEYXRhW10gPQotewotICAgICAgICB7NDIsMjUsMTUzNiw0MTksMTM0NCw4MDYgfSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KLSAgICAgICAgezQ4LDI1LDE1MzYsMzY5LDEzNDQsODA2IH0sIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KLSAgICAgICAgezQyLDI1LDE1MzYsNDE5LDEzNDQsODA2IH0sIC8qIDsgMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KLSAgICAgICAgezQ4LDI1LDE1MzYsMzY5LDEzNDQsODA2IH0sIC8qIDsgMDMgKDcyMHgzNTApICovCi0gICAgICAgIHs4LDUsMTMxMiw1MDAsMTMxMiw4MDAgICB9LCAvKiA7IDA0ICg2NDB4NDgweDc1SHopICovCi0gICAgICAgIHs0MSwyNSwxMDI0LDYyNSwxMzEyLDgwMCB9LCAvKiA7IDA1ICg4MDB4NjAweDc1SHopICovCi0gICAgICAgIHsxLDEsMTMxMiw4MDAsMTMxMiw4MDAgICB9ICAvKiA7IDA2ICgxMDI0eDc2OHg3NUh6KSAqLworc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX1N0TENEMTAyNHg3Njh4NzVEYXRhW10gPSB7CisJezQyLCAyNSwgMTUzNiwgNDE5LCAxMzQ0LCA4MDZ9LCAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsCisJCQkJCQkgNjQweDIwMCw2NDB4NDAwKSAqLworCXs0OCwgMjUsIDE1MzYsIDM2OSwgMTM0NCwgODA2fSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLworCXs0MiwgMjUsIDE1MzYsIDQxOSwgMTM0NCwgODA2fSwgLyogOyAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLworCXs0OCwgMjUsIDE1MzYsIDM2OSwgMTM0NCwgODA2fSwgLyogOyAwMyAoNzIweDM1MCkgKi8KKwl7OCwgIDUsICAxMzEyLCA1MDAsIDEzMTIsIDgwMH0sIC8qIDsgMDQgKDY0MHg0ODB4NzVIeikgKi8KKwl7NDEsIDI1LCAxMDI0LCA2MjUsIDEzMTIsIDgwMH0sIC8qIDsgMDUgKDgwMHg2MDB4NzVIeikgKi8KKwl7MSwgIDEsICAxMzEyLCA4MDAsIDEzMTIsIDgwMH0gIC8qIDsgMDYgKDEwMjR4NzY4eDc1SHopICovCiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9DZXRMQ0QxMDI0eDc2OHg3NURhdGFbXSA9Ci17Ci0gICAgICAgIHsxLDEsMTMxMiw4MDAsMTMxMiw4MDB9LCAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwotICAgICAgICB7MSwxLDEzMTIsODAwLDEzMTIsODAwfSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwotICAgICAgICB7MSwxLDEzMTIsODAwLDEzMTIsODAwfSwgLyogOyAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLwotICAgICAgICB7MSwxLDEzMTIsODAwLDEzMTIsODAwfSwgLyogOyAwMyAoNzIweDM1MCkgKi8KLSAgICAgICAgezEsMSwxMzEyLDgwMCwxMzEyLDgwMH0sIC8qIDsgMDQgKDY0MHg0ODB4NzVIeikgKi8KLSAgICAgICAgezEsMSwxMzEyLDgwMCwxMzEyLDgwMH0sIC8qIDsgMDUgKDgwMHg2MDB4NzVIeikgKi8KLSAgICAgICAgezEsMSwxMzEyLDgwMCwxMzEyLDgwMH0gLyogOyAwNiAoMTAyNHg3Njh4NzVIeikgKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9DZXRMQ0QxMDI0eDc2OHg3NURhdGFbXSA9IHsKKwl7MSwgMSwgMTMxMiwgODAwLCAxMzEyLCA4MDB9LCAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsCisJCQkJCSAgICAgICA2NDB4MjAwLDY0MHg0MDApICovCisJezEsIDEsIDEzMTIsIDgwMCwgMTMxMiwgODAwfSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLworCXsxLCAxLCAxMzEyLCA4MDAsIDEzMTIsIDgwMH0sIC8qIDsgMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KKwl7MSwgMSwgMTMxMiwgODAwLCAxMzEyLCA4MDB9LCAvKiA7IDAzICg3MjB4MzUwKSAqLworCXsxLCAxLCAxMzEyLCA4MDAsIDEzMTIsIDgwMH0sIC8qIDsgMDQgKDY0MHg0ODB4NzVIeikgKi8KKwl7MSwgMSwgMTMxMiwgODAwLCAxMzEyLCA4MDB9LCAvKiA7IDA1ICg4MDB4NjAweDc1SHopICovCisJezEsIDEsIDEzMTIsIDgwMCwgMTMxMiwgODAwfSAgLyogOyAwNiAoMTAyNHg3Njh4NzVIeikgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9FeHRMQ0QxMjgweDEwMjR4NzVEYXRhW10gPQotewotICAgICAgICB7MjExLDYwLDEwMjQsNTAxLDE2ODgsMTA2NiAgIH0sIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCi0gICAgICAgIHsyMTEsNjAsMTAyNCw1MDgsMTY4OCwxMDY2ICAgfSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwotICAgICAgICB7MjExLDYwLDEwMjQsNTAxLDE2ODgsMTA2NiAgIH0sIC8qIDsgMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KLSAgICAgICAgezIxMSw2MCwxMDI0LDUwOCwxNjg4LDEwNjYgICB9LCAvKiA7IDAzICg3MjB4MzUwKSAqLwotICAgICAgICB7MjExLDQ1LDc2OCw0OTgsMTY4OCwxMDY2ICAgIH0sIC8qIDsgMDQgKDY0MHg0ODB4NzVIeikgKi8KLSAgICAgICAgezIxMSw3NSwxMDI0LDYyNSwxNjg4LDEwNjYgICB9LCAvKiA7IDA1ICg4MDB4NjAweDc1SHopICovCi0gICAgICAgIHsyMTEsMTIwLDEyODAsNzk4LDE2ODgsMTA2NiAgfSwgLyogOyAwNiAoMTAyNHg3Njh4NzVIeikgKi8KLSAgICAgICAgezEsMSwxNjg4LDEwNjYsMTY4OCwxMDY2ICAgICB9ICAvKiA7IDA3ICgxMjgweDEwMjR4NzVIeikgKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9FeHRMQ0QxMjgweDEwMjR4NzVEYXRhW10gPSB7CisJezIxMSwgNjAsICAxMDI0LCA1MDEsICAxNjg4LCAxMDY2fSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLAorCQkJCQkJICAgICA2NDB4MjAwLDY0MHg0MDApICovCisJezIxMSwgNjAsICAxMDI0LCA1MDgsICAxNjg4LCAxMDY2fSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLworCXsyMTEsIDYwLCAgMTAyNCwgNTAxLCAgMTY4OCwgMTA2Nn0sIC8qIDsgMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KKwl7MjExLCA2MCwgIDEwMjQsIDUwOCwgIDE2ODgsIDEwNjZ9LCAvKiA7IDAzICg3MjB4MzUwKSAqLworCXsyMTEsIDQ1LCAgNzY4LCAgNDk4LCAgMTY4OCwgMTA2Nn0sIC8qIDsgMDQgKDY0MHg0ODB4NzVIeikgKi8KKwl7MjExLCA3NSwgIDEwMjQsIDYyNSwgIDE2ODgsIDEwNjZ9LCAvKiA7IDA1ICg4MDB4NjAweDc1SHopICovCisJezIxMSwgMTIwLCAxMjgwLCA3OTgsICAxNjg4LCAxMDY2fSwgLyogOyAwNiAoMTAyNHg3Njh4NzVIeikgKi8KKwl7MSwgICAxLCAgIDE2ODgsIDEwNjYsIDE2ODgsIDEwNjZ9ICAvKiA7IDA3ICgxMjgweDEwMjR4NzVIeikgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9TdExDRDEyODB4MTAyNHg3NURhdGFbXSA9Ci17Ci0gICAgICAgIHsyMTEsNjAsMTAyNCw1MDEsMTY4OCwxMDY2IH0sIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCi0gICAgICAgIHsyMTEsNjAsMTAyNCw1MDgsMTY4OCwxMDY2IH0sIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KLSAgICAgICAgezIxMSw2MCwxMDI0LDUwMSwxNjg4LDEwNjYgfSwgLyogOyAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLwotICAgICAgICB7MjExLDYwLDEwMjQsNTA4LDE2ODgsMTA2NiB9LCAvKiA7IDAzICg3MjB4MzUwKSAqLwotICAgICAgICB7MjExLDQ1LDc2OCw0OTgsMTY4OCwxMDY2ICB9LCAvKiA7IDA0ICg2NDB4NDgweDc1SHopICovCi0gICAgICAgIHsyMTEsNzUsMTAyNCw2MjUsMTY4OCwxMDY2IH0sIC8qIDsgMDUgKDgwMHg2MDB4NzVIeikgKi8KLSAgICAgICAgezIxMSwxMjAsMTI4MCw3OTgsMTY4OCwxMDY2fSwgLyogOyAwNiAoMTAyNHg3Njh4NzVIeikgKi8KLSAgICAgICAgezEsMSwxNjg4LDEwNjYsMTY4OCwxMDY2ICAgfSAgLyogOyAwNyAoMTI4MHgxMDI0eDc1SHopICovCitzdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfU3RMQ0QxMjgweDEwMjR4NzVEYXRhW10gPSB7CisJezIxMSwgNjAsICAxMDI0LCA1MDEsICAxNjg4LCAxMDY2fSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLAorCQkJCQkJICAgICA2NDB4MjAwLDY0MHg0MDApICovCisJezIxMSwgNjAsICAxMDI0LCA1MDgsICAxNjg4LCAxMDY2fSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLworCXsyMTEsIDYwLCAgMTAyNCwgNTAxLCAgMTY4OCwgMTA2Nn0sIC8qIDsgMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KKwl7MjExLCA2MCwgIDEwMjQsIDUwOCwgIDE2ODgsIDEwNjZ9LCAvKiA7IDAzICg3MjB4MzUwKSAqLworCXsyMTEsIDQ1LCAgNzY4LCAgNDk4LCAgMTY4OCwgMTA2Nn0sIC8qIDsgMDQgKDY0MHg0ODB4NzVIeikgKi8KKwl7MjExLCA3NSwgIDEwMjQsIDYyNSwgIDE2ODgsIDEwNjZ9LCAvKiA7IDA1ICg4MDB4NjAweDc1SHopICovCisJezIxMSwgMTIwLCAxMjgwLCA3OTgsICAxNjg4LCAxMDY2fSwgLyogOyAwNiAoMTAyNHg3Njh4NzVIeikgKi8KKwl7MSwgICAxLCAgIDE2ODgsIDEwNjYsIDE2ODgsIDEwNjZ9ICAvKiA7IDA3ICgxMjgweDEwMjR4NzVIeikgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9DZXRMQ0QxMjgweDEwMjR4NzVEYXRhW10gPQotewotICAgICAgICB7MSwxLDE2ODgsMTA2NiwxNjg4LDEwNjZ9LCAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwotICAgICAgICB7MSwxLDE2ODgsMTA2NiwxNjg4LDEwNjZ9LCAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCi0gICAgICAgIHsxLDEsMTY4OCwxMDY2LDE2ODgsMTA2Nn0sIC8qIDsgMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KLSAgICAgICAgezEsMSwxNjg4LDEwNjYsMTY4OCwxMDY2fSwgLyogOyAwMyAoNzIweDM1MCkgKi8KLSAgICAgICAgezEsMSwxNjg4LDEwNjYsMTY4OCwxMDY2fSwgLyogOyAwNCAoNjQweDQ4MHg3NUh6KSAqLwotICAgICAgICB7MSwxLDE2ODgsMTA2NiwxNjg4LDEwNjZ9LCAvKiA7IDA1ICg4MDB4NjAweDc1SHopICovCi0gICAgICAgIHsxLDEsMTY4OCwxMDY2LDE2ODgsMTA2Nn0sIC8qIDsgMDYgKDEwMjR4NzY4eDc1SHopICovCi0gICAgICAgIHsxLDEsMTY4OCwxMDY2LDE2ODgsMTA2Nn0gIC8qIDsgMDcgKDEyODB4MTAyNHg3NUh6KSAqLworc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX0NldExDRDEyODB4MTAyNHg3NURhdGFbXSA9IHsKKwl7MSwgMSwgMTY4OCwgMTA2NiwgMTY4OCwgMTA2Nn0sIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCwKKwkJCQkJCSA2NDB4MjAwLDY0MHg0MDApICovCisJezEsIDEsIDE2ODgsIDEwNjYsIDE2ODgsIDEwNjZ9LCAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCisJezEsIDEsIDE2ODgsIDEwNjYsIDE2ODgsIDEwNjZ9LCAvKiA7IDAyICgzNjB4NDAwLDcyMHg0MDApICovCisJezEsIDEsIDE2ODgsIDEwNjYsIDE2ODgsIDEwNjZ9LCAvKiA7IDAzICg3MjB4MzUwKSAqLworCXsxLCAxLCAxNjg4LCAxMDY2LCAxNjg4LCAxMDY2fSwgLyogOyAwNCAoNjQweDQ4MHg3NUh6KSAqLworCXsxLCAxLCAxNjg4LCAxMDY2LCAxNjg4LCAxMDY2fSwgLyogOyAwNSAoODAweDYwMHg3NUh6KSAqLworCXsxLCAxLCAxNjg4LCAxMDY2LCAxNjg4LCAxMDY2fSwgLyogOyAwNiAoMTAyNHg3Njh4NzVIeikgKi8KKwl7MSwgMSwgMTY4OCwgMTA2NiwgMTY4OCwgMTA2Nn0gIC8qIDsgMDcgKDEyODB4MTAyNHg3NUh6KSAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX05vU2NhbGluZ0RhdGF4NzVbXSA9Ci17Ci0gICAgICAgIHsxLDEsODAwLDQ0OSw4MDAsNDQ5ICAgIH0sIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCi0gICAgICAgIHsxLDEsODAwLDQ0OSw4MDAsNDQ5ICAgIH0sIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KLSAgICAgICAgezEsMSw5MDAsNDQ5LDkwMCw0NDkgICAgfSwgLyogOyAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLwotICAgICAgICB7MSwxLDkwMCw0NDksOTAwLDQ0OSAgICB9LCAvKiA7IDAzICg3MjB4MzUwKSAqLwotICAgICAgICB7MSwxLDg0MCw1MDAsODQwLDUwMCAgICB9LCAvKiA7IDA0ICg2NDB4NDgweDc1SHopICovCi0gICAgICAgIHsxLDEsMTA1Niw2MjUsMTA1Niw2MjUgIH0sIC8qIDsgMDUgKDgwMHg2MDB4NzVIeikgKi8KLSAgICAgICAgezEsMSwxMzEyLDgwMCwxMzEyLDgwMCAgfSwgLyogOyAwNiAoMTAyNHg3Njh4NzVIeikgKi8KLSAgICAgICAgezEsMSwxNjg4LDEwNjYsMTY4OCwxMDY2fSwgLyogOyAwNyAoMTI4MHgxMDI0eDc1SHopICovCi0gICAgICAgIHsxLDEsMTY4OCwxMDY2LDE2ODgsMTA2Nn0sIC8qIDsgMDggKDE0MDB4MTA1MHg3NUh6KSA7O1t5Y2NoZW5dIDEyLzE5LzAyICovCi0gICAgICAgIHsxLDEsMjE2MCwxMjUwLDIxNjAsMTI1MH0sIC8qIDsgMDkgKDE2MDB4MTIwMHg3NUh6KSAqLwotICAgICAgICB7MSwxLDE2ODgsODA2LDE2ODgsODA2ICB9ICAvKiA7IDBBICgxMjgweDc2OHg3NUh6KSAqLworc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX05vU2NhbGluZ0RhdGF4NzVbXSA9IHsKKwl7MSwgMSwgODAwLCAgNDQ5LCAgODAwLCAgNDQ5fSwgIC8qIDsgMDAgKDMyMHgyMDAsIDMyMHg0MDAsCisJCQkJCQkgNjQweDIwMCwgNjQweDQwMCkgKi8KKwl7MSwgMSwgODAwLCAgNDQ5LCAgODAwLCAgNDQ5fSwgIC8qIDsgMDEgKDMyMHgzNTAsIDY0MHgzNTApICovCisJezEsIDEsIDkwMCwgIDQ0OSwgIDkwMCwgIDQ0OX0sICAvKiA7IDAyICgzNjB4NDAwLCA3MjB4NDAwKSAqLworCXsxLCAxLCA5MDAsICA0NDksICA5MDAsICA0NDl9LCAgLyogOyAwMyAoNzIweDM1MCkgKi8KKwl7MSwgMSwgODQwLCAgNTAwLCAgODQwLCAgNTAwfSwgIC8qIDsgMDQgKDY0MHg0ODB4NzVIeikgKi8KKwl7MSwgMSwgMTA1NiwgNjI1LCAgMTA1NiwgNjI1fSwgIC8qIDsgMDUgKDgwMHg2MDB4NzVIeikgKi8KKwl7MSwgMSwgMTMxMiwgODAwLCAgMTMxMiwgODAwfSwgIC8qIDsgMDYgKDEwMjR4NzY4eDc1SHopICovCisJezEsIDEsIDE2ODgsIDEwNjYsIDE2ODgsIDEwNjZ9LCAvKiA7IDA3ICgxMjgweDEwMjR4NzVIeikgKi8KKwl7MSwgMSwgMTY4OCwgMTA2NiwgMTY4OCwgMTA2Nn0sIC8qIDsgMDggKDE0MDB4MTA1MHg3NUh6KQorCQkJCQkgICA7O1t5Y2NoZW5dIDEyLzE5LzAyICovCisJezEsIDEsIDIxNjAsIDEyNTAsIDIxNjAsIDEyNTB9LCAvKiA7IDA5ICgxNjAweDEyMDB4NzVIeikgKi8KKwl7MSwgMSwgMTY4OCwgODA2LCAgMTY4OCwgODA2fSAgIC8qIDsgMEEgKDEyODB4NzY4eDc1SHopICovCiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfRXh0TENERGVzMTAyNHg3NjhEYXRhW10gPQotewotICAgeyAgOSwxMDU3LDAsIDc3MSAgfSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KLSAgIHsgIDksMTA1NywwLCA3NzEgIH0sIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KLSAgIHsgIDksMTA1NywwLCA3NzEgIH0sIC8qIDsgMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KLSAgIHsgIDksMTA1NywwLCA3NzEgIH0sIC8qIDsgMDMgKDcyMHgzNTApICovCi0gICB7ICA5LDEwNTcsMCwgNzcxICB9LCAvKiA7IDA0ICg2NDB4NDgweDYwSHopICovCi0gICB7ICA5LDEwNTcsMCwgNzcxICB9LCAvKiA7IDA1ICg4MDB4NjAweDYwSHopICovCi0gICB7ICA5LDEwNTcsODA1LCA3NzAgIH0gIC8qIDsgMDYgKDEwMjR4NzY4eDYwSHopICovCitzdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfRXh0TENERGVzMTAyNHg3NjhEYXRhW10gPSB7CisJezksIDEwNTcsIDAsICAgNzcxfSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KKwl7OSwgMTA1NywgMCwgICA3NzF9LCAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCisJezksIDEwNTcsIDAsICAgNzcxfSwgLyogOyAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLworCXs5LCAxMDU3LCAwLCAgIDc3MX0sIC8qIDsgMDMgKDcyMHgzNTApICovCisJezksIDEwNTcsIDAsICAgNzcxfSwgLyogOyAwNCAoNjQweDQ4MHg2MEh6KSAqLworCXs5LCAxMDU3LCAwLCAgIDc3MX0sIC8qIDsgMDUgKDgwMHg2MDB4NjBIeikgKi8KKwl7OSwgMTA1NywgODA1LCA3NzB9ICAvKiA7IDA2ICgxMDI0eDc2OHg2MEh6KSAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX1N0TENERGVzMTAyNHg3NjhEYXRhW10gPQotewotICAgICAgICB7IDksMTA1Nyw3MzcsNzAzICAgfSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KLSAgICAgICAgeyA5LDEwNTcsNjg2LDY1MSAgIH0sIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KLSAgICAgICAgeyA5LDEwNTcsNzM3LDcwMyAgIH0sIC8qIDsgMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KLSAgICAgICAgeyA5LDEwNTcsNjg2LDY1MSAgIH0sIC8qIDsgMDMgKDcyMHgzNTApICovCi0gICAgICAgIHsgOSwxMDU3LDc3Niw3NDEgICB9LCAvKiA7IDA0ICg2NDB4NDgweDYwSHopICovCi0gICAgICAgIHsgOSwxMDU3LCAwICw3NzEgICB9LCAvKiA7IDA1ICg4MDB4NjAweDYwSHopICovCi0gICAgICAgIHsgOSwxMDU3LDgwNSw3NzAgICB9ICAvKiA7IDA2ICgxMDI0eDc2OHg2MEh6KSAqLworc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX1N0TENERGVzMTAyNHg3NjhEYXRhW10gPSB7CisJezksIDEwNTcsIDczNywgNzAzfSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KKwl7OSwgMTA1NywgNjg2LCA2NTF9LCAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCisJezksIDEwNTcsIDczNywgNzAzfSwgLyogOyAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLworCXs5LCAxMDU3LCA2ODYsIDY1MX0sIC8qIDsgMDMgKDcyMHgzNTApICovCisJezksIDEwNTcsIDc3NiwgNzQxfSwgLyogOyAwNCAoNjQweDQ4MHg2MEh6KSAqLworCXs5LCAxMDU3LCAwLCAgIDc3MX0sIC8qIDsgMDUgKDgwMHg2MDB4NjBIeikgKi8KKwl7OSwgMTA1NywgODA1LCA3NzB9ICAvKiA7IDA2ICgxMDI0eDc2OHg2MEh6KSAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0NldExDRERlczEwMjR4NzY4RGF0YVtdID0KLXsKLSAgICAgICAJeyAgICAgIDExNTIsODU2LDYyMiw1ODcgICB9LCAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwotICAgICAgICB7ICAgICAgMTE1Miw4NTYsNTk3LDU2MiAgIH0sIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KLSAgICAgICAgeyAgICAgIDExNTIsODU2LDYyMiw1ODcgICB9LCAvKiA7IDAyICgzNjB4NDAwLDcyMHg0MDApICovCi0gICAgICAgIHsgICAgICAxMTUyLDg1Niw1OTcsNTYyICAgfSwgLyogOyAwMyAoNzIweDM1MCkgKi8KLSAgICAgICAgeyAgICAgIDExNTIsODU2LDY2Miw2MjcgICB9LCAvKiA7IDA0ICg2NDB4NDgweDYwSHopICovCi0gICAgICAgIHsgICAgICAxMjMyLDkzNiw3MjIsNjg3ICAgfSwgLyogOyAwNSAoODAweDYwMHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgMCwxMDQ4LDgwNSw3NzAgICB9ICAvKiA7IDA2ICgxMDI0eDc2OHg2MEh6KSAqLworc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0NldExDRERlczEwMjR4NzY4RGF0YVtdID0geworCXsxMTUyLCA4NTYsICA2MjIsIDU4N30sIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCisJezExNTIsIDg1NiwgIDU5NywgNTYyfSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLworCXsxMTUyLCA4NTYsICA2MjIsIDU4N30sIC8qIDsgMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KKwl7MTE1MiwgODU2LCAgNTk3LCA1NjJ9LCAvKiA7IDAzICg3MjB4MzUwKSAqLworCXsxMTUyLCA4NTYsICA2NjIsIDYyN30sIC8qIDsgMDQgKDY0MHg0ODB4NjBIeikgKi8KKwl7MTIzMiwgOTM2LCAgNzIyLCA2ODd9LCAvKiA7IDA1ICg4MDB4NjAweDYwSHopICovCisJezAsICAgIDEwNDgsIDgwNSwgNzcwfSAgLyogOyAwNiAoMTAyNHg3Njh4NjBIeikgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgWEdJX0V4dExDRERMRGVzMTI4MHgxMDI0RGF0YVtdID0KLXsKLSAgICAgICAgeyAgICAgIDE4LDEzNDYsOTgxLDk0MCAgICAgfSwvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KLSAgICAgICAgeyAgICAgIDE4LDEzNDYsOTI2LDg2NSAgICAgfSwvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwotICAgICAgICB7ICAgICAgMTgsMTM0Niw5ODEsOTQwICAgICB9LC8qIDAyICgzNjB4NDAwLDcyMHg0MDApICovCi0gICAgICAgIHsgICAgICAxOCwxMzQ2LDkyNiw4NjUgICAgIH0sLyogMDMgKDcyMHgzNTApICovCi0gICAgICAgIHsgICAgICAxOCwxMzQ2LDAsMTAyNSAgICAgfSwvKiAwNCAoNjQweDQ4MHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgMTgsMTM0NiwwLDEwMjUgICAgIH0sLyogMDUgKDgwMHg2MDB4NjBIeikgKi8KLSAgICAgICAgeyAgICAgIDE4LDEzNDYsMTA2NSwxMDI0ICAgICB9LC8qIDA2ICgxMDI0eDc2OHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgMTgsMTM0NiwxMDY1LDEwMjQgICAgIH0vKiAwNyAoMTI4MHgxMDI0eDYwSHopICovCitzdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0IFhHSV9FeHRMQ0RETERlczEyODB4MTAyNERhdGFbXSA9IHsKKwl7MTgsIDEzNDYsIDk4MSwgIDk0MH0sICAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KKwl7MTgsIDEzNDYsIDkyNiwgIDg2NX0sICAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLworCXsxOCwgMTM0NiwgOTgxLCAgOTQwfSwgIC8qIDAyICgzNjB4NDAwLDcyMHg0MDApICovCisJezE4LCAxMzQ2LCA5MjYsICA4NjV9LCAgLyogMDMgKDcyMHgzNTApICovCisJezE4LCAxMzQ2LCAwLCAgICAxMDI1fSwgLyogMDQgKDY0MHg0ODB4NjBIeikgKi8KKwl7MTgsIDEzNDYsIDAsICAgIDEwMjV9LCAvKiAwNSAoODAweDYwMHg2MEh6KSAqLworCXsxOCwgMTM0NiwgMTA2NSwgMTAyNH0sIC8qIDA2ICgxMDI0eDc2OHg2MEh6KSAqLworCXsxOCwgMTM0NiwgMTA2NSwgMTAyNH0gIC8qIDA3ICgxMjgweDEwMjR4NjBIeikgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgWEdJX1N0TENERExEZXMxMjgweDEwMjREYXRhW10gPQotewotICAgICAgICB7ICAgICAgMTgsMTM0Niw5NzAsOTA3ICAgICB9LC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwotICAgICAgICB7ICAgICAgMTgsMTM0Niw5MTcsODU0ICAgICB9LC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCi0gICAgICAgIHsgICAgICAxOCwxMzQ2LDk3MCw5MDcgICAgIH0sLyogMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KLSAgICAgICAgeyAgICAgIDE4LDEzNDYsOTE3LDg1NCAgICAgfSwvKiAwMyAoNzIweDM1MCkgKi8KLSAgICAgICAgeyAgICAgIDE4LDEzNDYsMCwxMDI1ICAgICB9LC8qIDA0ICg2NDB4NDgweDYwSHopICovCi0gICAgICAgIHsgICAgICAxOCwxMzQ2LDAsMTAyNSAgICAgfSwvKiAwNSAoODAweDYwMHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgMTgsMTM0NiwxMDY1LDEwMjQgICAgIH0sLyogMDYgKDEwMjR4NzY4eDYwSHopICovCi0gICAgICAgIHsgICAgICAxOCwxMzQ2LDEwNjUsMTAyNCAgICAgfS8qIDA3ICgxMjgweDEwMjR4NjBIeikgKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgWEdJX1N0TENERExEZXMxMjgweDEwMjREYXRhW10gPSB7CisJezE4LCAxMzQ2LCA5NzAsICA5MDd9LCAgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCisJezE4LCAxMzQ2LCA5MTcsICA4NTR9LCAgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KKwl7MTgsIDEzNDYsIDk3MCwgIDkwN30sICAvKiAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLworCXsxOCwgMTM0NiwgOTE3LCAgODU0fSwgIC8qIDAzICg3MjB4MzUwKSAqLworCXsxOCwgMTM0NiwgMCwgICAgMTAyNX0sIC8qIDA0ICg2NDB4NDgweDYwSHopICovCisJezE4LCAxMzQ2LCAwLCAgICAxMDI1fSwgLyogMDUgKDgwMHg2MDB4NjBIeikgKi8KKwl7MTgsIDEzNDYsIDEwNjUsIDEwMjR9LCAvKiAwNiAoMTAyNHg3Njh4NjBIeikgKi8KKwl7MTgsIDEzNDYsIDEwNjUsIDEwMjR9ICAvKiAwNyAoMTI4MHgxMDI0eDYwSHopICovCiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfQ2V0TENERExEZXMxMjgweDEwMjREYXRhW10gPQotewotICAgICAgICB7ICAgICAgMTM2OCwxMDA4LDc1Miw3MTEgICAgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCi0gICAgICAgIHsgICAgICAxMzY4LDEwMDgsNzI5LDY4OCAgICB9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwotICAgICAgICB7ICAgICAgMTM2OCwxMDA4LDc1Miw3MTEgICAgfSwgLyogMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KLSAgICAJeyAgICAgIDEzNjgsMTAwOCw3MjksNjg4ICAgIH0sIC8qIDAzICg3MjB4MzUwKSAqLwotICAgICAgICB7ICAgICAgMTM2OCwxMDA4LDc5NCw3NTMgICAgfSwgLyogMDQgKDY0MHg0ODB4NjBIeikgKi8KLSAgICAgICAgeyAgICAgIDE0NDgsMTA2OCw4NTQsODEzICAgIH0sIC8qIDA1ICg4MDB4NjAweDYwSHopICovCi0gICAgICAgIHsgICAgICAxNTYwLDEyMDAsOTM4LDg5NyAgICB9LCAvKiAwNiAoMTAyNHg3Njh4NjBIeikgKi8KLSAgICAgICAgeyAgICAgIDE4LDEzNDYsMTA2NSwxMDI0ICAgIH0gIC8qIDA3ICgxMjgweDEwMjR4NjBIeikgKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9DZXRMQ0RETERlczEyODB4MTAyNERhdGFbXSA9IHsKKwl7MTM2OCwgMTAwOCwgNzUyLCAgNzExfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCisJezEzNjgsIDEwMDgsIDcyOSwgIDY4OH0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCisJezEzNjgsIDEwMDgsIDc1MiwgIDcxMX0sIC8qIDAyICgzNjB4NDAwLDcyMHg0MDApICovCisJezEzNjgsIDEwMDgsIDcyOSwgIDY4OH0sIC8qIDAzICg3MjB4MzUwKSAqLworCXsxMzY4LCAxMDA4LCA3OTQsICA3NTN9LCAvKiAwNCAoNjQweDQ4MHg2MEh6KSAqLworCXsxNDQ4LCAxMDY4LCA4NTQsICA4MTN9LCAvKiAwNSAoODAweDYwMHg2MEh6KSAqLworCXsxNTYwLCAxMjAwLCA5MzgsICA4OTd9LCAvKiAwNiAoMTAyNHg3Njh4NjBIeikgKi8KKwl7MTgsICAgMTM0NiwgMTA2NSwgMTAyNH0gLyogMDcgKDEyODB4MTAyNHg2MEh6KSAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0V4dExDRERlczEyODB4MTAyNERhdGFbXSA9Ci17Ci0gICAgICAgIHsgICAgICA5LDEzMzcsOTgxLDk0MCAgICB9LCAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwotICAgICAgICB7ICAgICAgOSwxMzM3LDkyNiw4ODQgICAgfSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSBhbGFuLCAyMDAzLzA5LzMwICovCi0gICAgICAgIHsgICAgICA5LDEzMzcsOTgxLDk0MCAgICB9LCAvKiA7IDAyICgzNjB4NDAwLDcyMHg0MDApICovCi0gICAgICAgIHsgICAgICA5LDEzMzcsOTI2LDg4NCAgICB9LCAvKiA7IDAzICg3MjB4MzUwKSBhbGFuLCAyMDAzLzA5LzMwICovCi0gICAgICAgIHsgICAgICA5LDEzMzcsMCwxMDI1ICAgIH0sIC8qIDsgMDQgKDY0MHg0ODB4NjBIeikgKi8KLSAgICAgICAgeyAgICAgIDksMTMzNywwLDEwMjUgICAgfSwgLyogOyAwNSAoODAweDYwMHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgOSwxMzM3LDEwNjUsMTAyNCAgICB9LCAvKiA7IDA2ICgxMDI0eDc2OHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgOSwxMzM3LDEwNjUsMTAyNCAgICB9ICAvKiA7IDA3ICgxMjgweDEwMjR4NjBIeikgKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9FeHRMQ0REZXMxMjgweDEwMjREYXRhW10gPSB7CisJezksIDEzMzcsIDk4MSwgIDk0MH0sICAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLworCXs5LCAxMzM3LCA5MjYsICA4ODR9LCAgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSBhbGFuLCAyMDAzLzA5LzMwICovCisJezksIDEzMzcsIDk4MSwgIDk0MH0sICAvKiA7IDAyICgzNjB4NDAwLDcyMHg0MDApICovCisJezksIDEzMzcsIDkyNiwgIDg4NH0sICAvKiA7IDAzICg3MjB4MzUwKSBhbGFuLCAyMDAzLzA5LzMwICovCisJezksIDEzMzcsIDAsICAgIDEwMjV9LCAvKiA7IDA0ICg2NDB4NDgweDYwSHopICovCisJezksIDEzMzcsIDAsICAgIDEwMjV9LCAvKiA7IDA1ICg4MDB4NjAweDYwSHopICovCisJezksIDEzMzcsIDEwNjUsIDEwMjR9LCAvKiA7IDA2ICgxMDI0eDc2OHg2MEh6KSAqLworCXs5LCAxMzM3LCAxMDY1LCAxMDI0fSAgLyogOyAwNyAoMTI4MHgxMDI0eDYwSHopICovCiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfU3RMQ0REZXMxMjgweDEwMjREYXRhW10gPQotewotICAgICAgICB7ICAgICAgOSwxMzM3LDk3MCw5MDcgICAgfSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KLSAgICAgICAgeyAgICAgIDksMTMzNyw5MTcsODU0ICAgIH0sIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KLSAgICAgICAgeyAgICAgIDksMTMzNyw5NzAsOTA3ICAgIH0sIC8qIDsgMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KLSAgICAgICAgeyAgICAgIDksMTMzNyw5MTcsODU0ICAgIH0sIC8qIDsgMDMgKDcyMHgzNTApICovCi0gICAgICAgIHsgICAgICA5LDEzMzcsMCwxMDI1ICAgIH0sIC8qIDsgMDQgKDY0MHg0ODB4NjBIeikgKi8KLSAgICAgICAgeyAgICAgIDksMTMzNywwLDEwMjUgICAgfSwgLyogOyAwNSAoODAweDYwMHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgOSwxMzM3LDEwNjUsMTAyNCAgICB9LCAvKiA7IDA2ICgxMDI0eDc2OHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgOSwxMzM3LDEwNjUsMTAyNCAgICB9ICAvKiA7IDA3ICgxMjgweDEwMjR4NjBIeikgKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9TdExDRERlczEyODB4MTAyNERhdGFbXSA9IHsKKwl7OSwgMTMzNywgOTcwLCAgOTA3fSwgIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCisJezksIDEzMzcsIDkxNywgIDg1NH0sICAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCisJezksIDEzMzcsIDk3MCwgIDkwN30sICAvKiA7IDAyICgzNjB4NDAwLDcyMHg0MDApICovCisJezksIDEzMzcsIDkxNywgIDg1NH0sICAvKiA7IDAzICg3MjB4MzUwKSAqLworCXs5LCAxMzM3LCAwLCAgICAxMDI1fSwgLyogOyAwNCAoNjQweDQ4MHg2MEh6KSAqLworCXs5LCAxMzM3LCAwLCAgICAxMDI1fSwgLyogOyAwNSAoODAweDYwMHg2MEh6KSAqLworCXs5LCAxMzM3LCAxMDY1LCAxMDI0fSwgLyogOyAwNiAoMTAyNHg3Njh4NjBIeikgKi8KKwl7OSwgMTMzNywgMTA2NSwgMTAyNH0gIC8qIDsgMDcgKDEyODB4MTAyNHg2MEh6KSAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0NldExDRERlczEyODB4MTAyNERhdGFbXSA9Ci17Ci0gICAgICAgIHsgICAgICAxMzY4LDEwMDgsNzUyLDcxMSAgICB9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KLSAgICAgICAgeyAgICAgIDEzNjgsMTAwOCw3MjksNjg4ICAgIH0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCi0gICAgICAgIHsgICAgICAxMzY4LDEwMDgsNzUyLDcxMSAgICB9LCAvKiAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLwotICAgIAl7ICAgICAgMTM2OCwxMDA4LDcyOSw2ODggICAgfSwgLyogMDMgKDcyMHgzNTApICovCi0gICAgICAgIHsgICAgICAxMzY4LDEwMDgsNzk0LDc1MyAgICB9LCAvKiAwNCAoNjQweDQ4MHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgMTQ0OCwxMDY4LDg1NCw4MTMgICAgfSwgLyogMDUgKDgwMHg2MDB4NjBIeikgKi8KLSAgICAgICAgeyAgICAgIDE1NjAsMTIwMCw5MzgsODk3ICAgIH0sIC8qIDA2ICgxMDI0eDc2OHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgOSwxMzM3LDEwNjUsMTAyNCAgICB9ICAvKiAwNyAoMTI4MHgxMDI0eDYwSHopICovCitzdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfQ2V0TENERGVzMTI4MHgxMDI0RGF0YVtdID0geworCXsxMzY4LCAxMDA4LCA3NTIsICA3MTF9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KKwl7MTM2OCwgMTAwOCwgNzI5LCAgNjg4fSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KKwl7MTM2OCwgMTAwOCwgNzUyLCAgNzExfSwgLyogMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KKwl7MTM2OCwgMTAwOCwgNzI5LCAgNjg4fSwgLyogMDMgKDcyMHgzNTApICovCisJezEzNjgsIDEwMDgsIDc5NCwgIDc1M30sIC8qIDA0ICg2NDB4NDgweDYwSHopICovCisJezE0NDgsIDEwNjgsIDg1NCwgIDgxM30sIC8qIDA1ICg4MDB4NjAweDYwSHopICovCisJezE1NjAsIDEyMDAsIDkzOCwgIDg5N30sIC8qIDA2ICgxMDI0eDc2OHg2MEh6KSAqLworCXs5LCAgICAxMzM3LCAxMDY1LCAxMDI0fSAvKiAwNyAoMTI4MHgxMDI0eDYwSHopICovCiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfU3RMQ0RETERlczE0MDB4MTA1MERhdGFbXSA9Ci17Ci0gICAgICAgIHsgICAgICAxOCwxNDY0LDAsMTA1MSAgICB9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KLSAgICAgICAgeyAgICAgIDE4LDE0NjQsMCwxMDUxICAgIH0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCi0gICAgICAgIHsgICAgICAxOCwxNDY0LDAsMTA1MSAgICB9LCAvKiAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLwotICAgICAgICB7ICAgICAgMTgsMTQ2NCwwLDEwNTEgICAgfSwgLyogMDMgKDcyMHgzNTApICovCi0gICAgICAgIHsgICAgICAxOCwxNDY0LDAsMTA1MSAgICB9LCAvKiAwNCAoNjQweDQ4MHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgMTgsMTQ2NCwwLDEwNTEgICAgfSwgLyogMDUgKDgwMHg2MDB4NjBIeikgKi8KLSAgICAgICAgeyAgICAgIDE4LDE0NjQsMCwxMDUxICAgIH0sIC8qIDA2ICgxMDI0eDc2OHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgMTY0NiwxNDA2LDEwNTMsMTAzOCAgICB9LCAvKiAwNyAoMTI4MHgxMDI0eDYwSHopICovCi0gICAgICAgIHsgICAgICAxOCwxNDY0LDAsMTA1MSAgICB9ICAvKiAwOCAoMTQwMHgxMDUweDYwSHopICovCitzdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfU3RMQ0RETERlczE0MDB4MTA1MERhdGFbXSA9IHsKKwl7MTgsICAgMTQ2NCwgMCwgICAgMTA1MX0sIC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLworCXsxOCwgICAxNDY0LCAwLCAgICAxMDUxfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KKwl7MTgsICAgMTQ2NCwgMCwgICAgMTA1MX0sIC8qIDAyICgzNjB4NDAwLDcyMHg0MDApICovCisJezE4LCAgIDE0NjQsIDAsICAgIDEwNTF9LCAvKiAwMyAoNzIweDM1MCkgKi8KKwl7MTgsICAgMTQ2NCwgMCwgICAgMTA1MX0sIC8qIDA0ICg2NDB4NDgweDYwSHopICovCisJezE4LCAgIDE0NjQsIDAsICAgIDEwNTF9LCAvKiAwNSAoODAweDYwMHg2MEh6KSAqLworCXsxOCwgICAxNDY0LCAwLCAgICAxMDUxfSwgLyogMDYgKDEwMjR4NzY4eDYwSHopICovCisJezE2NDYsIDE0MDYsIDEwNTMsIDEwMzh9LCAvKiAwNyAoMTI4MHgxMDI0eDYwSHopICovCisJezE4LCAgIDE0NjQsIDAsICAgIDEwNTF9ICAvKiAwOCAoMTQwMHgxMDUweDYwSHopICovCiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfRXh0TENERExEZXMxNDAweDEwNTBEYXRhW10gPQotewotICAgICAgICB7ICAgICAgMTgsMTQ2NCwwLDEwNTEgICAgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCi0gICAgICAgIHsgICAgICAxOCwxNDY0LDAsMTA1MSAgICB9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwotICAgICAgICB7ICAgICAgMTgsMTQ2NCwwLDEwNTEgICAgfSwgLyogMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KLSAgICAgICAgeyAgICAgIDE4LDE0NjQsMCwxMDUxICAgIH0sIC8qIDAzICg3MjB4MzUwKSAqLwotICAgICAgICB7ICAgICAgMTgsMTQ2NCwwLDEwNTEgICAgfSwgLyogMDQgKDY0MHg0ODB4NjBIeikgKi8KLSAgICAgICAgeyAgICAgIDE4LDE0NjQsMCwxMDUxICAgIH0sIC8qIDA1ICg4MDB4NjAweDYwSHopICovCi0gICAgICAgIHsgICAgICAxOCwxNDY0LDAsMTA1MSAgICB9LCAvKiAwNiAoMTAyNHg3Njh4NjBIeikgKi8KLSAgICAgICAgeyAgICAgIDE2NDYsMTQwNiwxMDUzLDEwMzggICAgfSwgLyogMDcgKDEyODB4MTAyNHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgMTgsMTQ2NCwwLDEwNTEgICAgfSAgLyogMDggKDE0MDB4MTA1MHg2MEh6KSAqLworc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0V4dExDRERMRGVzMTQwMHgxMDUwRGF0YVtdID0geworCXsxOCwgICAxNDY0LCAwLCAgICAxMDUxfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCisJezE4LCAgIDE0NjQsIDAsICAgIDEwNTF9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLworCXsxOCwgICAxNDY0LCAwLCAgICAxMDUxfSwgLyogMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KKwl7MTgsICAgMTQ2NCwgMCwgICAgMTA1MX0sIC8qIDAzICg3MjB4MzUwKSAqLworCXsxOCwgICAxNDY0LCAwLCAgICAxMDUxfSwgLyogMDQgKDY0MHg0ODB4NjBIeikgKi8KKwl7MTgsICAgMTQ2NCwgMCwgICAgMTA1MX0sIC8qIDA1ICg4MDB4NjAweDYwSHopICovCisJezE4LCAgIDE0NjQsIDAsICAgIDEwNTF9LCAvKiAwNiAoMTAyNHg3Njh4NjBIeikgKi8KKwl7MTY0NiwgMTQwNiwgMTA1MywgMTAzOH0sIC8qIDA3ICgxMjgweDEwMjR4NjBIeikgKi8KKwl7MTgsICAgMTQ2NCwgMCwgICAgMTA1MX0gIC8qIDA4ICgxNDAweDEwNTB4NjBIeikgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9TdExDRERlczE0MDB4MTA1MERhdGFbXSA9Ci17Ci0gICAgICAgIHsgICAgICA5LDE0NTUsMCwxMDUxICAgICB9LC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwotICAgICAgICB7ICAgICAgOSwxNDU1LDAsMTA1MSAgICAgfSwvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwotICAgICAgICB7ICAgICAgOSwxNDU1LDAsMTA1MSAgICAgfSwvKiAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLwotICAgICAgICB7ICAgICAgOSwxNDU1LDAsMTA1MSAgICAgfSwvKiAwMyAoNzIweDM1MCkgKi8KLSAgICAgICAgeyAgICAgIDksMTQ1NSwwLDEwNTEgICAgIH0sLyogMDQgKDY0MHg0ODB4NjBIeikgKi8KLSAgICAgICAgeyAgICAgIDksMTQ1NSwwLDEwNTEgICAgIH0sLyogMDUgKDgwMHg2MDB4NjBIeikgKi8KLSAgICAgICAgeyAgICAgIDksMTQ1NSwwLDEwNTEgICAgIH0sLyogMDYgKDEwMjR4NzY4eDYwSHopICovCi0gICAgICAgIHsgICAgICAxNjM3LDEzOTcsMTA1MywxMDM4ICAgICB9LC8qIDA3ICgxMjgweDEwMjR4NjBIeikgKi8KLSAgICAgICAgeyAgICAgIDksMTQ1NSwwLDEwNTEgICAgIH0gLyogMDggKDE0MDB4MTA1MHg2MEh6KSAqLworc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX1N0TENERGVzMTQwMHgxMDUwRGF0YVtdID0geworCXs5LCAgICAxNDU1LCAwLCAgICAxMDUxfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCisJezksICAgIDE0NTUsIDAsICAgIDEwNTF9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLworCXs5LCAgICAxNDU1LCAwLCAgICAxMDUxfSwgLyogMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KKwl7OSwgICAgMTQ1NSwgMCwgICAgMTA1MX0sIC8qIDAzICg3MjB4MzUwKSAqLworCXs5LCAgICAxNDU1LCAwLCAgICAxMDUxfSwgLyogMDQgKDY0MHg0ODB4NjBIeikgKi8KKwl7OSwgICAgMTQ1NSwgMCwgICAgMTA1MX0sIC8qIDA1ICg4MDB4NjAweDYwSHopICovCisJezksICAgIDE0NTUsIDAsICAgIDEwNTF9LCAvKiAwNiAoMTAyNHg3Njh4NjBIeikgKi8KKwl7MTYzNywgMTM5NywgMTA1MywgMTAzOH0sIC8qIDA3ICgxMjgweDEwMjR4NjBIeikgKi8KKwl7OSwgICAgMTQ1NSwgMCwgICAgMTA1MX0gIC8qIDA4ICgxNDAweDEwNTB4NjBIeikgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9FeHRMQ0REZXMxNDAweDEwNTBEYXRhW10gPQotewotICAgICAgICB7ICAgICAgOSwxNDU1LDAsMTA1MSAgICAgfSwvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KLSAgICAgICAgeyAgICAgIDksMTQ1NSwwLDEwNTEgICAgIH0sLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KLSAgICAgICAgeyAgICAgIDksMTQ1NSwwLDEwNTEgICAgIH0sLyogMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KLSAgICAgICAgeyAgICAgIDksMTQ1NSwwLDEwNTEgICAgIH0sLyogMDMgKDcyMHgzNTApICovCi0gICAgICAgIHsgICAgICA5LDE0NTUsMCwxMDUxICAgICB9LC8qIDA0ICg2NDB4NDgweDYwSHopICovCi0gICAgICAgIHsgICAgICA5LDE0NTUsMCwxMDUxICAgICB9LC8qIDA1ICg4MDB4NjAweDYwSHopICovCi0gICAgICAgIHsgICAgICA5LDE0NTUsMCwxMDUxICAgICB9LC8qIDA2ICgxMDI0eDc2OHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgMTYzNywxMzk3LDEwNTMsMTAzOCAgICAgfSwvKiAwNyAoMTI4MHgxMDI0eDYwSHopICovCi0gICAgICAgIHsgICAgICA5LDE0NTUsMCwxMDUxICAgICB9IC8qIDA4ICgxNDAweDEwNTB4NjBIeikgKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9FeHRMQ0REZXMxNDAweDEwNTBEYXRhW10gPSB7CisJezksICAgIDE0NTUsIDAsICAgIDEwNTF9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KKwl7OSwgICAgMTQ1NSwgMCwgICAgMTA1MX0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCisJezksICAgIDE0NTUsIDAsICAgIDEwNTF9LCAvKiAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLworCXs5LCAgICAxNDU1LCAwLCAgICAxMDUxfSwgLyogMDMgKDcyMHgzNTApICovCisJezksICAgIDE0NTUsIDAsICAgIDEwNTF9LCAvKiAwNCAoNjQweDQ4MHg2MEh6KSAqLworCXs5LCAgICAxNDU1LCAwLCAgICAxMDUxfSwgLyogMDUgKDgwMHg2MDB4NjBIeikgKi8KKwl7OSwgICAgMTQ1NSwgMCwgICAgMTA1MX0sIC8qIDA2ICgxMDI0eDc2OHg2MEh6KSAqLworCXsxNjM3LCAxMzk3LCAxMDUzLCAxMDM4fSwgLyogMDcgKDEyODB4MTAyNHg2MEh6KSAqLworCXs5LCAgICAxNDU1LCAwLCAgICAxMDUxfSAgLyogMDggKDE0MDB4MTA1MHg2MEh6KSAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0NldExDRERlczE0MDB4MTA1MERhdGFbXSA9Ci17Ci0gICAgICAgIHsgICAgICAxMzA4LDEwNjgsNzgxLDc2NiAgICB9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KLSAgICAgICAgeyAgICAgIDEzMDgsMTA2OCw3ODEsNzY2ICAgIH0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCi0gICAgICAgIHsgICAgICAxMzA4LDEwNjgsNzgxLDc2NiAgICB9LCAvKiAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLwotICAgICAgICB7ICAgICAgMTMwOCwxMDY4LDc4MSw3NjYgICAgfSwgLyogMDMgKDcyMHgzNTApICovCi0gICAgICAgIHsgICAgICAxMzA4LDEwNjgsNzgxLDc2NiAgICB9LCAvKiAwNCAoNjQweDQ4MHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgMTM4OCwxMTQ4LDg0MSw4MjYgICAgfSwgLyogMDUgKDgwMHg2MDB4NjBIeikgKi8KLSAgICAgICAgeyAgICAgIDE0OTAsMTI1MCw5MjUsOTEwICAgIH0sIC8qIDA2ICgxMDI0eDc2OHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgMTY0NiwxNDA2LDEwNTMsMTAzOCAgICB9LCAvKiAwNyAoMTI4MHgxMDI0eDYwSHopICovCi0gICAgICAgIHsgICAgICAxOCwxNDY0LDAsMTA1MSAgICB9IC8qIDA4ICgxNDAweDEwNTB4NjBIeikgKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9DZXRMQ0REZXMxNDAweDEwNTBEYXRhW10gPSB7CisJezEzMDgsIDEwNjgsIDc4MSwgIDc2Nn0sICAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KKwl7MTMwOCwgMTA2OCwgNzgxLCAgNzY2fSwgIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCisJezEzMDgsIDEwNjgsIDc4MSwgIDc2Nn0sICAvKiAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLworCXsxMzA4LCAxMDY4LCA3ODEsICA3NjZ9LCAgLyogMDMgKDcyMHgzNTApICovCisJezEzMDgsIDEwNjgsIDc4MSwgIDc2Nn0sICAvKiAwNCAoNjQweDQ4MHg2MEh6KSAqLworCXsxMzg4LCAxMTQ4LCA4NDEsICA4MjZ9LCAgLyogMDUgKDgwMHg2MDB4NjBIeikgKi8KKwl7MTQ5MCwgMTI1MCwgOTI1LCAgOTEwfSwgIC8qIDA2ICgxMDI0eDc2OHg2MEh6KSAqLworCXsxNjQ2LCAxNDA2LCAxMDUzLCAxMDM4fSwgLyogMDcgKDEyODB4MTAyNHg2MEh6KSAqLworCXsxOCwgICAxNDY0LCAwLCAgICAxMDUxfSAgLyogMDggKDE0MDB4MTA1MHg2MEh6KSAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0NldExDRERlczE0MDB4MTA1MERhdGEyW10gPQotewotICAgICAgICB7ICAgICAgMCwxNDQ4LDAsMTA1MSAgICB9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KLSAgICAgICAgeyAgICAgIDAsMTQ0OCwwLDEwNTEgICAgfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KLSAgICAgICAgeyAgICAgIDAsMTQ0OCwwLDEwNTEgICAgfSwgLyogMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KLSAgICAgICAgeyAgICAgIDAsMTQ0OCwwLDEwNTEgICAgfSwgLyogMDMgKDcyMHgzNTApICovCi0gICAgICAgIHsgICAgICAwLDE0NDgsMCwxMDUxICAgIH0gIC8qIDA0ICg2NDB4NDgweDYwSHopICovCitzdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfQ2V0TENERGVzMTQwMHgxMDUwRGF0YTJbXSA9IHsKKwl7MCwgMTQ0OCwgMCwgMTA1MX0sIC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLworCXswLCAxNDQ4LCAwLCAxMDUxfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KKwl7MCwgMTQ0OCwgMCwgMTA1MX0sIC8qIDAyICgzNjB4NDAwLDcyMHg0MDApICovCisJezAsIDE0NDgsIDAsIDEwNTF9LCAvKiAwMyAoNzIweDM1MCkgKi8KKwl7MCwgMTQ0OCwgMCwgMTA1MX0gIC8qIDA0ICg2NDB4NDgweDYwSHopICovCiB9OwogCi0KLQotc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0V4dExDRERMRGVzMTYwMHgxMjAwRGF0YVtdID0KLXsKLQl7ICAgICAgMTgsMTY4MiwwLDEyMDEgICAgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCi0gICAgICAgIHsgICAgICAxOCwxNjgyLDAsMTIwMSAgICB9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwotICAgICAgICB7ICAgICAgMTgsMTY4MiwwLDEyMDEgICAgfSwgLyogMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KLSAgICAgICAgeyAgICAgIDE4LDE2ODIsMCwxMjAxICAgIH0sIC8qIDAzICg3MjB4MzUwKSAqLwotICAgICAgICB7ICAgICAgMTgsMTY4MiwwLDEyMDEgICAgfSwgLyogMDQgKDY0MHg0ODB4NjBIeikgKi8KLSAgICAgICAgeyAgICAgIDE4LDE2ODIsMCwxMjAxICAgIH0sIC8qIDA1ICg4MDB4NjAweDYwSHopICovCi0gICAgICAgIHsgICAgICAxOCwxNjgyLDAsMTIwMSAgICB9LCAvKiAwNiAoMTAyNHg3Njh4NjBIeikgKi8KLSAgICAgICAgeyAgICAgIDE4LDE2ODIsMCwxMjAxICAgIH0sIC8qIDA3ICgxMjgweDEwMjR4NjBIeikgKi8KLSAgICAgICAgeyAgICAgIDE4LDE2ODIsMCwxMjAxICAgIH0sIC8qIDA4ICgxNDAweDEwNTB4NjBIeikgKi8KLSAgICAgICAgeyAgICAgIDE4LDE2ODIsMCwxMjAxICAgIH0gIC8qIDA5ICgxNjAweDEyMDB4NjBIeikgKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9FeHRMQ0RETERlczE2MDB4MTIwMERhdGFbXSA9IHsKKwl7MTgsIDE2ODIsIDAsIDEyMDF9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KKwl7MTgsIDE2ODIsIDAsIDEyMDF9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLworCXsxOCwgMTY4MiwgMCwgMTIwMX0sIC8qIDAyICgzNjB4NDAwLDcyMHg0MDApICovCisJezE4LCAxNjgyLCAwLCAxMjAxfSwgLyogMDMgKDcyMHgzNTApICovCisJezE4LCAxNjgyLCAwLCAxMjAxfSwgLyogMDQgKDY0MHg0ODB4NjBIeikgKi8KKwl7MTgsIDE2ODIsIDAsIDEyMDF9LCAvKiAwNSAoODAweDYwMHg2MEh6KSAqLworCXsxOCwgMTY4MiwgMCwgMTIwMX0sIC8qIDA2ICgxMDI0eDc2OHg2MEh6KSAqLworCXsxOCwgMTY4MiwgMCwgMTIwMX0sIC8qIDA3ICgxMjgweDEwMjR4NjBIeikgKi8KKwl7MTgsIDE2ODIsIDAsIDEyMDF9LCAvKiAwOCAoMTQwMHgxMDUweDYwSHopICovCisJezE4LCAxNjgyLCAwLCAxMjAxfSAgLyogMDkgKDE2MDB4MTIwMHg2MEh6KSAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX1N0TENERExEZXMxNjAweDEyMDBEYXRhW10gPQotewotICAgICAgICB7ICAgICAgMTgsMTY4MiwxMTUwLDExMDEgICAgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCi0gICAgICAgIHsgICAgICAxOCwxNjgyLDEwODMsMTAzNCAgICB9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwotICAgICAgICB7ICAgICAgMTgsMTY4MiwxMTUwLDExMDEgICAgfSwgLyogMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KLSAgICAgICAgeyAgICAgIDE4LDE2ODIsMTA4MywxMDM0ICAgIH0sIC8qIDAzICg3MjB4MzUwKSAqLwotICAgICAgICB7ICAgICAgMTgsMTY4MiwwLDEyMDEgICAgfSwgLyogMDQgKDY0MHg0ODB4NjBIeikgKi8KLSAgICAgICAgeyAgICAgIDE4LDE2ODIsMCwxMjAxICAgIH0sIC8qIDA1ICg4MDB4NjAweDYwSHopICovCi0gICAgICAgIHsgICAgICAxOCwxNjgyLDAsMTIwMSAgICB9LCAvKiAwNiAoMTAyNHg3Njh4NjBIeikgKi8KLSAgICAgICAgeyAgICAgIDE4LDE2ODIsMTIzMiwxMTgzICAgIH0sIC8qIDA3ICgxMjgweDEwMjR4NjBIeikgKi8KLSAgICAgICAgeyAgICAgIDE4LDE2ODIsMCwxMjAxICAgIH0sIC8qIDA4ICgxNDAweDEwNTB4NjBIeikgKi8KLSAgICAgICAgeyAgICAgIDE4LDE2ODIsMCwxMjAxICAgIH0gLyogMDkgKDE2MDB4MTIwMHg2MEh6KSAqLworc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX1N0TENERExEZXMxNjAweDEyMDBEYXRhW10gPSB7CisJezE4LCAxNjgyLCAxMTUwLCAxMTAxfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCisJezE4LCAxNjgyLCAxMDgzLCAxMDM0fSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KKwl7MTgsIDE2ODIsIDExNTAsIDExMDF9LCAvKiAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLworCXsxOCwgMTY4MiwgMTA4MywgMTAzNH0sIC8qIDAzICg3MjB4MzUwKSAqLworCXsxOCwgMTY4MiwgMCwgICAgMTIwMX0sIC8qIDA0ICg2NDB4NDgweDYwSHopICovCisJezE4LCAxNjgyLCAwLCAgICAxMjAxfSwgLyogMDUgKDgwMHg2MDB4NjBIeikgKi8KKwl7MTgsIDE2ODIsIDAsICAgIDEyMDF9LCAvKiAwNiAoMTAyNHg3Njh4NjBIeikgKi8KKwl7MTgsIDE2ODIsIDEyMzIsIDExODN9LCAvKiAwNyAoMTI4MHgxMDI0eDYwSHopICovCisJezE4LCAxNjgyLCAwLCAgICAxMjAxfSwgLyogMDggKDE0MDB4MTA1MHg2MEh6KSAqLworCXsxOCwgMTY4MiwgMCwgICAgMTIwMX0gLyogMDkgKDE2MDB4MTIwMHg2MEh6KSAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0V4dExDRERlczE2MDB4MTIwMERhdGFbXSA9Ci17Ci0gICAgICAgIHsgICAgICA5LDE2NzMsMCwxMjAxICAgICB9LC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwotICAgICAgICB7ICAgICAgOSwxNjczLDAsMTIwMSAgICAgfSwvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwotICAgICAgICB7ICAgICAgOSwxNjczLDAsMTIwMSAgICAgfSwvKiAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLwotICAgICAgICB7ICAgICAgOSwxNjczLDAsMTIwMSAgICAgfSwvKiAwMyAoNzIweDM1MCkgKi8KLSAgICAgICAgeyAgICAgIDksMTY3MywwLDEyMDEgICAgIH0sLyogMDQgKDY0MHg0ODB4NjBIeikgKi8KLSAgICAgICAgeyAgICAgIDksMTY3MywwLDEyMDEgICAgIH0sLyogMDUgKDgwMHg2MDB4NjBIeikgKi8KLSAgICAgICAgeyAgICAgIDksMTY3MywwLDEyMDEgICAgIH0sLyogMDYgKDEwMjR4NzY4eDYwSHopICovCi0gICAgICAgIHsgICAgICA5LDE2NzMsMCwxMjAxICAgICB9LC8qIDA3ICgxMjgweDEwMjR4NjBIeikgKi8KLSAgICAgICAgeyAgICAgIDksMTY3MywwLDEyMDEgICAgIH0sLyogMDggKDE0MDB4MTA1MHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgOSwxNjczLDAsMTIwMSAgICAgfSAvKiAwOSAoMTYwMHgxMjAweDYwSHopICovCitzdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfRXh0TENERGVzMTYwMHgxMjAwRGF0YVtdID0geworCXs5LCAxNjczLCAwLCAxMjAxfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCisJezksIDE2NzMsIDAsIDEyMDF9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLworCXs5LCAxNjczLCAwLCAxMjAxfSwgLyogMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KKwl7OSwgMTY3MywgMCwgMTIwMX0sIC8qIDAzICg3MjB4MzUwKSAqLworCXs5LCAxNjczLCAwLCAxMjAxfSwgLyogMDQgKDY0MHg0ODB4NjBIeikgKi8KKwl7OSwgMTY3MywgMCwgMTIwMX0sIC8qIDA1ICg4MDB4NjAweDYwSHopICovCisJezksIDE2NzMsIDAsIDEyMDF9LCAvKiAwNiAoMTAyNHg3Njh4NjBIeikgKi8KKwl7OSwgMTY3MywgMCwgMTIwMX0sIC8qIDA3ICgxMjgweDEwMjR4NjBIeikgKi8KKwl7OSwgMTY3MywgMCwgMTIwMX0sIC8qIDA4ICgxNDAweDEwNTB4NjBIeikgKi8KKwl7OSwgMTY3MywgMCwgMTIwMX0gIC8qIDA5ICgxNjAweDEyMDB4NjBIeikgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9TdExDRERlczE2MDB4MTIwMERhdGFbXSA9Ci17Ci0JeyAgICAgIDksMTY3MywxMTUwLDExMDEgICAgIH0sLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCi0gICAgICAgIHsgICAgICA5LDE2NzMsMTA4MywxMDM0ICAgICB9LC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCi0gICAgICAgIHsgICAgICA5LDE2NzMsMTE1MCwxMTAxICAgICB9LC8qIDAyICgzNjB4NDAwLDcyMHg0MDApICovCi0gICAgICAgIHsgICAgICA5LDE2NzMsMTA4MywxMDM0ICAgICB9LC8qIDAzICg3MjB4MzUwKSAqLwotICAgICAgICB7ICAgICAgOSwxNjczLDAsMTIwMSAgICAgfSwvKiAwNCAoNjQweDQ4MHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgOSwxNjczLDAsMTIwMSAgICAgfSwvKiAwNSAoODAweDYwMHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgOSwxNjczLDAsMTIwMSAgICAgfSwvKiAwNiAoMTAyNHg3Njh4NjBIeikgKi8KLSAgICAgICAgeyAgICAgIDksMTY3MywxMjMyLDExODMgICAgIH0sLyogMDcgKDEyODB4MTAyNHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgOSwxNjczLDAsMTIwMSAgICAgfSwvKiAwOCAoMTQwMHgxMDUweDYwSHopICovCi0gICAgICAgIHsgICAgICA5LDE2NzMsMCwxMjAxICAgICB9IC8qIDA5ICgxNjAweDEyMDB4NjBIeikgKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9TdExDRERlczE2MDB4MTIwMERhdGFbXSA9IHsKKwl7OSwgMTY3MywgMTE1MCwgMTEwMX0sIC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLworCXs5LCAxNjczLCAxMDgzLCAxMDM0fSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KKwl7OSwgMTY3MywgMTE1MCwgMTEwMX0sIC8qIDAyICgzNjB4NDAwLDcyMHg0MDApICovCisJezksIDE2NzMsIDEwODMsIDEwMzR9LCAvKiAwMyAoNzIweDM1MCkgKi8KKwl7OSwgMTY3MywgMCwgICAgMTIwMX0sIC8qIDA0ICg2NDB4NDgweDYwSHopICovCisJezksIDE2NzMsIDAsICAgIDEyMDF9LCAvKiAwNSAoODAweDYwMHg2MEh6KSAqLworCXs5LCAxNjczLCAwLCAgICAxMjAxfSwgLyogMDYgKDEwMjR4NzY4eDYwSHopICovCisJezksIDE2NzMsIDEyMzIsIDExODN9LCAvKiAwNyAoMTI4MHgxMDI0eDYwSHopICovCisJezksIDE2NzMsIDAsICAgIDEyMDF9LCAvKiAwOCAoMTQwMHgxMDUweDYwSHopICovCisJezksIDE2NzMsIDAsICAgIDEyMDF9ICAvKiAwOSAoMTYwMHgxMjAweDYwSHopICovCiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0MiAgWEdJX05vU2NhbGluZ0Rlc0RhdGFbXSA9Ci17Ci0gICAgICAgIHsgICAgIDksNjU3LDQ0OCw0MDUsOTYsMiAgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCi0gICAgICAgIHsgICAgIDksNjU3LDQ0OCwzNTUsOTYsMiAgfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KLSAgICAgICAgeyAgICAgOSw2NTcsNDQ4LDQwNSw5NiwyICB9LCAvKiAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLwotICAgICAgICB7ICAgICA5LDY1Nyw0NDgsMzU1LDk2LDIgIH0sIC8qIDAzICg3MjB4MzUwKSAqLwotICAgICAgICB7ICAgICA5LDY1NywxLDQ4Myw5NiwyICB9LCAvKiAwNCAoNjQweDQ4MHg2MEh6KSAqLwotICAgICAgICB7ICAgICA5LDg0OSw2MjcsNjAwLDEyOCw0ICB9LCAvKiAwNSAoODAweDYwMHg2MEh6KSAqLwotICAgICAgICB7ICAgICA5LDEwNTcsODA1LDc3MCwwMTM2LDYgIH0sIC8qIDA2ICgxMDI0eDc2OHg2MEh6KSAqLwotICAgICAgICB7ICAgICA5LDEzMzcsMCwxMDI1LDExMiwzICB9LCAvKiAwNyAoMTI4MHgxMDI0eDYwSHopICovCi0gICAgICAgIHsgICAgIDksMTQ1NywwLDEwNTEsMTEyLDMgIH0sIC8qIDA4ICgxNDAweDEwNTB4NjBIeikgfSwgLy87W3ljY2hlbl0gMTIvMTkvMDIgKi8KLSAgICAgICAgeyAgICAgOSwxNjczLDAsMTIwMSwxOTIsMyAgfSwgLyogMDkgKDE2MDB4MTIwMHg2MEh6KSAqLwotICAgICAgICB7ICAgICA5LDEzMzcsMCw3NzEsMTEyLDYgIH0gIC8qIDBBICgxMjgweDc2OHg2MEh6KSAqLworc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdDIgIFhHSV9Ob1NjYWxpbmdEZXNEYXRhW10gPSB7CisJezksIDY1NywgIDQ0OCwgNDA1LCAgOTYsICAgMn0sIC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsCisJCQkJCSAgICAgIDY0MHgyMDAsNjQweDQwMCkgKi8KKwl7OSwgNjU3LCAgNDQ4LCAzNTUsICA5NiwgICAyfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KKwl7OSwgNjU3LCAgNDQ4LCA0MDUsICA5NiwgICAyfSwgLyogMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KKwl7OSwgNjU3LCAgNDQ4LCAzNTUsICA5NiwgICAyfSwgLyogMDMgKDcyMHgzNTApICovCisJezksIDY1NywgIDEsICAgNDgzLCAgOTYsICAgMn0sIC8qIDA0ICg2NDB4NDgweDYwSHopICovCisJezksIDg0OSwgIDYyNywgNjAwLCAgMTI4LCAgNH0sIC8qIDA1ICg4MDB4NjAweDYwSHopICovCisJezksIDEwNTcsIDgwNSwgNzcwLCAgMDEzNiwgNn0sIC8qIDA2ICgxMDI0eDc2OHg2MEh6KSAqLworCXs5LCAxMzM3LCAwLCAgIDEwMjUsIDExMiwgIDN9LCAvKiAwNyAoMTI4MHgxMDI0eDYwSHopICovCisJezksIDE0NTcsIDAsICAgMTA1MSwgMTEyLCAgM30sIC8qIDA4ICgxNDAweDEwNTB4NjBIeikgfSwKKwkJCQkJLy87W3ljY2hlbl0gMTIvMTkvMDIgKi8KKwl7OSwgMTY3MywgMCwgICAxMjAxLCAxOTIsICAzfSwgLyogMDkgKDE2MDB4MTIwMHg2MEh6KSAqLworCXs5LCAxMzM3LCAwLCAgIDc3MSwgIDExMiwgIDZ9ICAvKiAwQSAoMTI4MHg3Njh4NjBIeikgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9FeHRMQ0REZXMxMDI0eDc2OHg3NURhdGFbXSA9CQkvKiA7OzEwMjR4NzY4eDc1SHogKi8KLXsKLSAgICAgICAgezksMTA0OSwwLDc2OX0sICAgIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCi0gICAgICAgIHs5LDEwNDksMCw3Njl9LCAgICAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCi0gICAgICAgIHs5LDEwNDksMCw3Njl9LCAgICAvKiA7IDAyICgzNjB4NDAwLDcyMHg0MDApICovCi0gICAgICAgIHs5LDEwNDksMCw3Njl9LCAgICAvKiA7IDAzICg3MjB4MzUwKSAqLwotICAgICAgICB7OSwxMDQ5LDAsNzY5fSwgICAgLyogOyAwNCAoNjQweDQ4MHg3NUh6KSAqLwotICAgICAgICB7OSwxMDQ5LDAsNzY5fSwgICAgLyogOyAwNSAoODAweDYwMHg3NUh6KSAqLwotICAgICAgICB7OSwxMDQ5LDAsNzY5fSAgICAgLyogOyAwNiAoMTAyNHg3Njh4NzVIeikgKi8KKy8qIDs7MTAyNHg3Njh4NzVIeiAqLworc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0V4dExDRERlczEwMjR4NzY4eDc1RGF0YVtdID0geworCXs5LCAxMDQ5LCAwLCA3Njl9LCAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLworCXs5LCAxMDQ5LCAwLCA3Njl9LCAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCisJezksIDEwNDksIDAsIDc2OX0sIC8qIDsgMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KKwl7OSwgMTA0OSwgMCwgNzY5fSwgLyogOyAwMyAoNzIweDM1MCkgKi8KKwl7OSwgMTA0OSwgMCwgNzY5fSwgLyogOyAwNCAoNjQweDQ4MHg3NUh6KSAqLworCXs5LCAxMDQ5LCAwLCA3Njl9LCAvKiA7IDA1ICg4MDB4NjAweDc1SHopICovCisJezksIDEwNDksIDAsIDc2OX0gIC8qIDsgMDYgKDEwMjR4NzY4eDc1SHopICovCiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfU3RMQ0REZXMxMDI0eDc2OHg3NURhdGFbXSA9Ci17Ci0gICAgICAgIHs5LDEwNDksMCw3Njl9LCAgICAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwotICAgICAgICB7OSwxMDQ5LDAsNzY5fSwgICAgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwotICAgICAgICB7OSwxMDQ5LDAsNzY5fSwgICAgLyogOyAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLwotICAgICAgICB7OSwxMDQ5LDAsNzY5fSwgICAgLyogOyAwMyAoNzIweDM1MCkgKi8KLSAgICAgICAgezksMTA0OSwwLDc2OX0sICAgIC8qIDsgMDQgKDY0MHg0ODB4NzVIeikgKi8KLSAgICAgICAgezksMTA0OSwwLDc2OX0sICAgIC8qIDsgMDUgKDgwMHg2MDB4NzVIeikgKi8KLSAgICAgICAgezksMTA0OSwwLDc2OX0gICAgIC8qIDsgMDYgKDEwMjR4NzY4eDc1SHopICovCitzdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfU3RMQ0REZXMxMDI0eDc2OHg3NURhdGFbXSA9IHsKKwl7OSwgMTA0OSwgMCwgNzY5fSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KKwl7OSwgMTA0OSwgMCwgNzY5fSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLworCXs5LCAxMDQ5LCAwLCA3Njl9LCAvKiA7IDAyICgzNjB4NDAwLDcyMHg0MDApICovCisJezksIDEwNDksIDAsIDc2OX0sIC8qIDsgMDMgKDcyMHgzNTApICovCisJezksIDEwNDksIDAsIDc2OX0sIC8qIDsgMDQgKDY0MHg0ODB4NzVIeikgKi8KKwl7OSwgMTA0OSwgMCwgNzY5fSwgLyogOyAwNSAoODAweDYwMHg3NUh6KSAqLworCXs5LCAxMDQ5LCAwLCA3Njl9ICAvKiA7IDA2ICgxMDI0eDc2OHg3NUh6KSAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0NldExDRERlczEwMjR4NzY4eDc1RGF0YVtdID0JLyogOzsxMDI0eDc2OHg3NUh6ICovCi17Ci0gICAgICAgIHsxMTUyLDg1Niw2MjIsNTg3fSwgICAgIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCi0gICAgICAgIHsxMTUyLDg1Niw1OTcsNTYyfSwgICAgIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KLSAgICAgICAgezExOTIsODk2LDYyMiw1ODd9LCAgICAgLyogOyAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLwotICAgICAgICB7MTE5Miw4OTYsNTk3LDU2Mn0sICAgICAvKiA7IDAzICg3MjB4MzUwKSAqLwotICAgICAgICB7MTEyOSw4NTcsNjU2LDYyNX0sICAgICAvKiA7IDA0ICg2NDB4NDgweDc1SHopICovCi0gICAgICAgIHsxMjA5LDkzNyw3MTYsNjg1fSwgICAgIC8qIDsgMDUgKDgwMHg2MDB4NzVIeikgKi8KLSAgICAgICAgezksMTA0OSwwLDc2OX0gCSAgIAkvKiA7IDA2ICgxMDI0eDc2OHg3NUh6KSAqLworLyogOzsxMDI0eDc2OHg3NUh6ICovCitzdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfQ2V0TENERGVzMTAyNHg3Njh4NzVEYXRhW10gPSB7CisJezExNTIsIDg1NiwgIDYyMiwgNTg3fSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KKwl7MTE1MiwgODU2LCAgNTk3LCA1NjJ9LCAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCisJezExOTIsIDg5NiwgIDYyMiwgNTg3fSwgLyogOyAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLworCXsxMTkyLCA4OTYsICA1OTcsIDU2Mn0sIC8qIDsgMDMgKDcyMHgzNTApICovCisJezExMjksIDg1NywgIDY1NiwgNjI1fSwgLyogOyAwNCAoNjQweDQ4MHg3NUh6KSAqLworCXsxMjA5LCA5MzcsICA3MTYsIDY4NX0sIC8qIDsgMDUgKDgwMHg2MDB4NzVIeikgKi8KKwl7OSwgICAgMTA0OSwgMCwgICA3Njl9CS8qIDsgMDYgKDEwMjR4NzY4eDc1SHopICovCiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfRXh0TENERExEZXMxMjgweDEwMjR4NzVEYXRhW10gPSAgICAgICAgIC8qIDs7MTI4MHgxMDI0eDc1SHogKi8KLXsKLSAgICAgICAgezE4LDEzMTQsMCwxMDI1ICAgICB9LC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCi0gICAgICAgIHsxOCwxMzE0LDAsMTAyNSAgICAgfSwvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCi0gICAgICAgIHsxOCwxMzE0LDAsMTAyNSAgICAgfSwvKiA7IDAyICgzNjB4NDAwLDcyMHg0MDApICovCi0gICAgICAgIHsxOCwxMzE0LDAsMTAyNSAgICAgfSwvKiA7IDAzICg3MjB4MzUwKSAqLwotICAgICAgICB7MTgsMTMxNCwwLDEwMjUgICAgIH0sLyogOyAwNCAoNjQweDQ4MHg2MEh6KSAqLwotICAgICAgICB7MTgsMTMxNCwwLDEwMjUgICAgIH0sLyogOyAwNSAoODAweDYwMHg2MEh6KSAqLwotICAgICAgICB7MTgsMTMxNCwwLDEwMjUgICAgIH0sLyogOyAwNiAoMTAyNHg3Njh4NjBIeikgKi8KLSAgICAgICAgezE4LDEzMTQsMCwxMDI1ICAgICB9LyogOyAwNyAoMTI4MHgxMDI0eDYwSHopICovCisvKiA7OzEyODB4MTAyNHg3NUh6ICovCitzdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfRXh0TENERExEZXMxMjgweDEwMjR4NzVEYXRhW10gPSB7CisJezE4LCAxMzE0LCAwLCAxMDI1fSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KKwl7MTgsIDEzMTQsIDAsIDEwMjV9LCAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCisJezE4LCAxMzE0LCAwLCAxMDI1fSwgLyogOyAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLworCXsxOCwgMTMxNCwgMCwgMTAyNX0sIC8qIDsgMDMgKDcyMHgzNTApICovCisJezE4LCAxMzE0LCAwLCAxMDI1fSwgLyogOyAwNCAoNjQweDQ4MHg2MEh6KSAqLworCXsxOCwgMTMxNCwgMCwgMTAyNX0sIC8qIDsgMDUgKDgwMHg2MDB4NjBIeikgKi8KKwl7MTgsIDEzMTQsIDAsIDEwMjV9LCAvKiA7IDA2ICgxMDI0eDc2OHg2MEh6KSAqLworCXsxOCwgMTMxNCwgMCwgMTAyNX0gIC8qIDsgMDcgKDEyODB4MTAyNHg2MEh6KSAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX1N0TENERExEZXMxMjgweDEwMjR4NzVEYXRhW10gPQotewotICAgICAgICB7MTgsMTMxNCwwLDEwMjUgICAgIH0sLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KLSAgICAgICAgezE4LDEzMTQsMCwxMDI1ICAgICB9LC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KLSAgICAgICAgezE4LDEzMTQsMCwxMDI1ICAgICB9LC8qIDsgMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KLSAgICAgICAgezE4LDEzMTQsMCwxMDI1ICAgICB9LC8qIDsgMDMgKDcyMHgzNTApICovCi0gICAgICAgIHsxOCwxMzE0LDAsMTAyNSAgICAgfSwvKiA7IDA0ICg2NDB4NDgweDYwSHopICovCi0gICAgICAgIHsxOCwxMzE0LDAsMTAyNSAgICAgfSwvKiA7IDA1ICg4MDB4NjAweDYwSHopICovCi0gICAgICAgIHsxOCwxMzE0LDAsMTAyNSAgICAgfSwvKiA7IDA2ICgxMDI0eDc2OHg2MEh6KSAqLwotICAgICAgICB7MTgsMTMxNCwwLDEwMjUgICAgIH0vKiA7IDA3ICgxMjgweDEwMjR4NjBIeikgKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9TdExDRERMRGVzMTI4MHgxMDI0eDc1RGF0YVtdID0geworCXsxOCwgMTMxNCwgMCwgMTAyNX0sIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCisJezE4LCAxMzE0LCAwLCAxMDI1fSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLworCXsxOCwgMTMxNCwgMCwgMTAyNX0sIC8qIDsgMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KKwl7MTgsIDEzMTQsIDAsIDEwMjV9LCAvKiA7IDAzICg3MjB4MzUwKSAqLworCXsxOCwgMTMxNCwgMCwgMTAyNX0sIC8qIDsgMDQgKDY0MHg0ODB4NjBIeikgKi8KKwl7MTgsIDEzMTQsIDAsIDEwMjV9LCAvKiA7IDA1ICg4MDB4NjAweDYwSHopICovCisJezE4LCAxMzE0LCAwLCAxMDI1fSwgLyogOyAwNiAoMTAyNHg3Njh4NjBIeikgKi8KKwl7MTgsIDEzMTQsIDAsIDEwMjV9ICAvKiA7IDA3ICgxMjgweDEwMjR4NjBIeikgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9DZXRMQ0RETERlczEyODB4MTAyNHg3NURhdGFbXSA9CS8qIDEyODB4MTAyNHg3NUh6ICovCi17Ci0gICAgICAgIHsxMzY4LDEwMDgsNzUyLDcxMX0sICAgIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCi0gICAgICAgIHsxMzY4LDEwMDgsNzI5LDY4OH0sICAgIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KLSAgICAgICAgezE0MDgsMTA0OCw3NTIsNzExfSwgICAgLyogOyAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLwotICAgICAgICB7MTQwOCwxMDQ4LDcyOSw2ODh9LCAgICAvKiA7IDAzICg3MjB4MzUwKSAqLwotICAgICAgICB7MTM3Nyw5ODUsNzk0LDc1M30sICAgIC8qIDsgMDQgKDY0MHg0ODB4NzVIeikgKi8KLSAgICAgICAgezE0NTcsMTA2NSw4NTQsODEzfSwgICAgLyogOyAwNSAoODAweDYwMHg3NUh6KSAqLwotICAgICAgICB7MTU2OSwxMTc3LDkzOCw4OTd9LCAgICAvKiA7IDA2ICgxMDI0eDc2OHg3NUh6KSAqLwotICAgICAgICB7MTgsMTMxNCwwLDEwMjV9ICAgICAJICAvKiA7IDA3ICgxMjgweDEwMjR4NzVIeikgKi8KKy8qIDEyODB4MTAyNHg3NUh6ICovCitzdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfQ2V0TENERExEZXMxMjgweDEwMjR4NzVEYXRhW10gPSB7CisJezEzNjgsIDEwMDgsIDc1MiwgNzExfSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KKwl7MTM2OCwgMTAwOCwgNzI5LCA2ODh9LCAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCisJezE0MDgsIDEwNDgsIDc1MiwgNzExfSwgLyogOyAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLworCXsxNDA4LCAxMDQ4LCA3MjksIDY4OH0sIC8qIDsgMDMgKDcyMHgzNTApICovCisJezEzNzcsIDk4NSwgIDc5NCwgNzUzfSwgLyogOyAwNCAoNjQweDQ4MHg3NUh6KSAqLworCXsxNDU3LCAxMDY1LCA4NTQsIDgxM30sIC8qIDsgMDUgKDgwMHg2MDB4NzVIeikgKi8KKwl7MTU2OSwgMTE3NywgOTM4LCA4OTd9LCAvKiA7IDA2ICgxMDI0eDc2OHg3NUh6KSAqLworCXsxOCwgICAxMzE0LCAwLCAgIDEwMjV9IC8qIDsgMDcgKDEyODB4MTAyNHg3NUh6KSAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0V4dExDRERlczEyODB4MTAyNHg3NURhdGFbXSA9ICAgICAgICAgLyogOzsxMjgweDEwMjR4NzVIeiAqLwotewotCXs5LDEzMDUsMCwxMDI1fSwvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwotICAgICAgICB7OSwxMzA1LDAsMTAyNX0sLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwotICAgICAgICB7OSwxMzA1LDAsMTAyNX0sLyogOyAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLwotICAgICAgICB7OSwxMzA1LDAsMTAyNX0sLyogOyAwMyAoNzIweDM1MCkgKi8KLSAgICAgICAgezksMTMwNSwwLDEwMjV9LC8qIDsgMDQgKDY0MHg0ODB4NjBIeikgKi8KLSAgICAgICAgezksMTMwNSwwLDEwMjV9LC8qIDsgMDUgKDgwMHg2MDB4NjBIeikgKi8KLSAgICAgICAgezksMTMwNSwwLDEwMjV9LC8qIDsgMDYgKDEwMjR4NzY4eDYwSHopICovCi0gICAgICAgIHs5LDEzMDUsMCwxMDI1fSAvKiA7IDA3ICgxMjgweDEwMjR4NjBIeikgKi8KKy8qIDs7MTI4MHgxMDI0eDc1SHogKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9FeHRMQ0REZXMxMjgweDEwMjR4NzVEYXRhW10gPSB7CisJezksIDEzMDUsIDAsIDEwMjV9LCAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLworCXs5LCAxMzA1LCAwLCAxMDI1fSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLworCXs5LCAxMzA1LCAwLCAxMDI1fSwgLyogOyAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLworCXs5LCAxMzA1LCAwLCAxMDI1fSwgLyogOyAwMyAoNzIweDM1MCkgKi8KKwl7OSwgMTMwNSwgMCwgMTAyNX0sIC8qIDsgMDQgKDY0MHg0ODB4NjBIeikgKi8KKwl7OSwgMTMwNSwgMCwgMTAyNX0sIC8qIDsgMDUgKDgwMHg2MDB4NjBIeikgKi8KKwl7OSwgMTMwNSwgMCwgMTAyNX0sIC8qIDsgMDYgKDEwMjR4NzY4eDYwSHopICovCisJezksIDEzMDUsIDAsIDEwMjV9ICAvKiA7IDA3ICgxMjgweDEwMjR4NjBIeikgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9TdExDRERlczEyODB4MTAyNHg3NURhdGFbXSA9Ci17Ci0JezksMTMwNSwwLDEwMjV9LC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCi0gICAgICAgIHs5LDEzMDUsMCwxMDI1fSwvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCi0gICAgICAgIHs5LDEzMDUsMCwxMDI1fSwvKiA7IDAyICgzNjB4NDAwLDcyMHg0MDApICovCi0gICAgICAgIHs5LDEzMDUsMCwxMDI1fSwvKiA7IDAzICg3MjB4MzUwKSAqLwotICAgICAgICB7OSwxMzA1LDAsMTAyNX0sLyogOyAwNCAoNjQweDQ4MHg2MEh6KSAqLwotICAgICAgICB7OSwxMzA1LDAsMTAyNX0sLyogOyAwNSAoODAweDYwMHg2MEh6KSAqLwotICAgICAgICB7OSwxMzA1LDAsMTAyNX0sLyogOyAwNiAoMTAyNHg3Njh4NjBIeikgKi8KLSAgICAgICAgezksMTMwNSwwLDEwMjV9IC8qIDsgMDcgKDEyODB4MTAyNHg2MEh6KSAqLworc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX1N0TENERGVzMTI4MHgxMDI0eDc1RGF0YVtdID0geworCXs5LCAxMzA1LCAwLCAxMDI1fSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KKwl7OSwgMTMwNSwgMCwgMTAyNX0sIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KKwl7OSwgMTMwNSwgMCwgMTAyNX0sIC8qIDsgMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KKwl7OSwgMTMwNSwgMCwgMTAyNX0sIC8qIDsgMDMgKDcyMHgzNTApICovCisJezksIDEzMDUsIDAsIDEwMjV9LCAvKiA7IDA0ICg2NDB4NDgweDYwSHopICovCisJezksIDEzMDUsIDAsIDEwMjV9LCAvKiA7IDA1ICg4MDB4NjAweDYwSHopICovCisJezksIDEzMDUsIDAsIDEwMjV9LCAvKiA7IDA2ICgxMDI0eDc2OHg2MEh6KSAqLworCXs5LCAxMzA1LCAwLCAxMDI1fSAgLyogOyAwNyAoMTI4MHgxMDI0eDYwSHopICovCiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfQ2V0TENERGVzMTI4MHgxMDI0eDc1RGF0YVtdID0JLyogMTI4MHgxMDI0eDc1SHogKi8KLXsKLSAgICAgICAgezEzNjgsMTAwOCw3NTIsNzExfSwgICAgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KLSAgICAgICAgezEzNjgsMTAwOCw3MjksNjg4fSwgICAgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwotICAgICAgICB7MTQwOCwxMDQ4LDc1Miw3MTF9LCAgICAvKiA7IDAyICgzNjB4NDAwLDcyMHg0MDApICovCi0gICAgICAgIHsxNDA4LDEwNDgsNzI5LDY4OH0sICAgIC8qIDsgMDMgKDcyMHgzNTApICovCi0gICAgICAgIHsxMzc3LDk4NSw3OTQsNzUzfSwgICAgLyogOyAwNCAoNjQweDQ4MHg3NUh6KSAqLwotICAgICAgICB7MTQ1NywxMDY1LDg1NCw4MTN9LCAgICAvKiA7IDA1ICg4MDB4NjAweDc1SHopICovCi0gICAgICAgIHsxNTY5LDExNzcsOTM4LDg5N30sICAgIC8qIDsgMDYgKDEwMjR4NzY4eDc1SHopICovCi0gICAgICAgIHs5LDEzMDUsMCwxMDI1fSAgICAgCSAgLyogOyAwNyAoMTI4MHgxMDI0eDc1SHopICovCisvKiAxMjgweDEwMjR4NzVIeiAqLworc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0NldExDRERlczEyODB4MTAyNHg3NURhdGFbXSA9IHsKKwl7MTM2OCwgMTAwOCwgNzUyLCA3MTF9LCAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLworCXsxMzY4LCAxMDA4LCA3MjksIDY4OH0sIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KKwl7MTQwOCwgMTA0OCwgNzUyLCA3MTF9LCAvKiA7IDAyICgzNjB4NDAwLDcyMHg0MDApICovCisJezE0MDgsIDEwNDgsIDcyOSwgNjg4fSwgLyogOyAwMyAoNzIweDM1MCkgKi8KKwl7MTM3NywgOTg1LCAgNzk0LCA3NTN9LCAvKiA7IDA0ICg2NDB4NDgweDc1SHopICovCisJezE0NTcsIDEwNjUsIDg1NCwgODEzfSwgLyogOyAwNSAoODAweDYwMHg3NUh6KSAqLworCXsxNTY5LCAxMTc3LCA5MzgsIDg5N30sIC8qIDsgMDYgKDEwMjR4NzY4eDc1SHopICovCisJezksICAgIDEzMDUsIDAsICAgMTAyNX0gLyogOyAwNyAoMTI4MHgxMDI0eDc1SHopICovCiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0MiBYR0lfTm9TY2FsaW5nRGVzRGF0YXg3NVtdID0gLyogU2NhbGluZyBMQ0QgNzVIeiAqLwotewotCXs5LDY1Nyw0NDgsNDA1LDk2LDJ9LCAgIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCi0gICAgICAgIHs5LDY1Nyw0NDgsMzU1LDk2LDJ9LCAgIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KLSAgICAgICAgezksNzM4LDQ0OCw0MDUsMTA4LDJ9LCAgIC8qIDsgMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KLSAgICAgICAgezksNzM4LDQ0OCwzNTUsMTA4LDJ9LCAgIC8qIDsgMDMgKDcyMHgzNTApICovCi0gICAgICAgIHs5LDY2NSwwLDQ4MSw2NCwzfSwgICAvKiA7IDA0ICg2NDB4NDgweDc1SHopICovCi0gICAgICAgIHs5LDgyNSwwLDYwMSw4MCwzfSwgICAvKiA7IDA1ICg4MDB4NjAweDc1SHopICovCi0gICAgICAgIHs5LDEwNDksMCw3NjksOTYsM30sICAgLyogOyAwNiAoMTAyNHg3Njh4NzVIeikgKi8KLSAgICAgICAgezksMTMwNSwwLDEwMjUsMTQ0LDN9LCAgIC8qIDsgMDcgKDEyODB4MTAyNHg3NUh6KSAqLwotICAgICAgICB7OSwxNDU3LDAsMTA1MSwxMTIsM30sICAgLyogOyAwOCAoMTQwMHgxMDUweDYwSHopIDs7W3ljY2hlbl0gMTIvMTkvMDIgKi8KLSAgICAgICAgezksMTY3MywwLDEyMDEsMTkyLDN9LCAgIC8qIDsgMDkgKDE2MDB4MTIwMHg3NUh6KSAqLwotICAgICAgICB7OSwxMzM3LDAsNzcxLDExMiw2fSAgICAvKiA7IDBBICgxMjgweDc2OHg2MEh6KSAqLworLyogU2NhbGluZyBMQ0QgNzVIeiAqLworc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdDIgWEdJX05vU2NhbGluZ0Rlc0RhdGF4NzVbXSA9ICB7CisJezksIDY1NywgIDQ0OCwgNDA1LCAgOTYsICAyfSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLAorCQkJCQkgICAgICAgNjQweDIwMCw2NDB4NDAwKSAqLworCXs5LCA2NTcsICA0NDgsIDM1NSwgIDk2LCAgMn0sIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KKwl7OSwgNzM4LCAgNDQ4LCA0MDUsICAxMDgsIDJ9LCAvKiA7IDAyICgzNjB4NDAwLDcyMHg0MDApICovCisJezksIDczOCwgIDQ0OCwgMzU1LCAgMTA4LCAyfSwgLyogOyAwMyAoNzIweDM1MCkgKi8KKwl7OSwgNjY1LCAgMCwgICA0ODEsICA2NCwgIDN9LCAvKiA7IDA0ICg2NDB4NDgweDc1SHopICovCisJezksIDgyNSwgIDAsICAgNjAxLCAgODAsICAzfSwgLyogOyAwNSAoODAweDYwMHg3NUh6KSAqLworCXs5LCAxMDQ5LCAwLCAgIDc2OSwgIDk2LCAgM30sIC8qIDsgMDYgKDEwMjR4NzY4eDc1SHopICovCisJezksIDEzMDUsIDAsICAgMTAyNSwgMTQ0LCAzfSwgLyogOyAwNyAoMTI4MHgxMDI0eDc1SHopICovCisJezksIDE0NTcsIDAsICAgMTA1MSwgMTEyLCAzfSwgLyogOyAwOCAoMTQwMHgxMDUweDYwSHopCisJCQkJCSA7O1t5Y2NoZW5dIDEyLzE5LzAyICovCisJezksIDE2NzMsIDAsICAgMTIwMSwgMTkyLCAzfSwgLyogOyAwOSAoMTYwMHgxMjAweDc1SHopICovCisJezksIDEzMzcsIDAsICAgNzcxLCAgMTEyLCA2fSAgLyogOyAwQSAoMTI4MHg3Njh4NjBIeikgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX1RWRGF0YVN0cnVjdCAgWEdJX1N0UEFMRGF0YVtdID0KLXsKLSB7ICAgIDEsICAgMSwgODY0LCA1MjUsMTI3MCwgNDAwLCAxMDAsICAgMCwgNzYwfSwKLSB7ICAgIDEsICAgMSwgODY0LCA1MjUsMTI3MCwgMzUwLCAxMDAsICAgMCwgNzYwfSwKLSB7ICAgIDEsICAgMSwgODY0LCA1MjUsMTI3MCwgNDAwLCAgIDAsICAgMCwgNzIwfSwKLSB7ICAgIDEsICAgMSwgODY0LCA1MjUsMTI3MCwgMzUwLCAgIDAsICAgMCwgNzIwfSwKLSB7ICAgIDEsICAgMSwgODY0LCA1MjUsMTI3MCwgNDgwLCAgNTAsICAgMCwgNzYwfSwKLSB7ICAgIDEsICAgMSwgODY0LCA1MjUsMTI3MCwgNjAwLCAgNTAsICAgMCwgICAwfQorc3RhdGljIHN0cnVjdCBYR0kzMzBfVFZEYXRhU3RydWN0ICBYR0lfU3RQQUxEYXRhW10gPSB7CisJezEsIDEsIDg2NCwgNTI1LCAxMjcwLCA0MDAsIDEwMCwgMCwgNzYwfSwKKwl7MSwgMSwgODY0LCA1MjUsIDEyNzAsIDM1MCwgMTAwLCAwLCA3NjB9LAorCXsxLCAxLCA4NjQsIDUyNSwgMTI3MCwgNDAwLCAgIDAsIDAsIDcyMH0sCisJezEsIDEsIDg2NCwgNTI1LCAxMjcwLCAzNTAsICAgMCwgMCwgNzIwfSwKKwl7MSwgMSwgODY0LCA1MjUsIDEyNzAsIDQ4MCwgIDUwLCAwLCA3NjB9LAorCXsxLCAxLCA4NjQsIDUyNSwgMTI3MCwgNjAwLCAgNTAsIDAsICAgMH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX1RWRGF0YVN0cnVjdCAgWEdJX0V4dFBBTERhdGFbXSA9Ci17Ci0geyAgICAyLCAgIDEsMTA4MCwgNDYzLDEyNzAsIDUwMCwgIDUwLCAgIDAsICA1MH0sCi0geyAgIDE1LCAgIDcsMTE1MiwgNDEzLDEyNzAsIDUwMCwgIDUwLCAgIDAsICA1MH0sCi0geyAgICAyLCAgIDEsMTA4MCwgNDYzLDEyNzAsIDUwMCwgIDUwLCAgIDAsICA1MH0sCi0geyAgIDE1LCAgIDcsMTE1MiwgNDEzLDEyNzAsIDUwMCwgIDUwLCAgIDAsICA1MH0sCi0geyAgICAyLCAgIDEsIDkwMCwgNTQzLDEyNzAsIDUwMCwgICAwLCAgIDAsICA1MH0sCi0geyAgICA0LCAgIDMsMTA4MCwgNjYzLDEyNzAsIDUwMCwgNDM4LCAgIDAsIDQzOH0sCi0geyAgICAxLCAgIDEsMTEyNSwgODMxLDEyNzAsIDUwMCwgNjg2LCAgIDAsIDY4Nn0sICAgICAvKjMwMWIqLwotIHsgICAgMywgICAyLDEwODAsIDYxOSwxMjcwLCA1NDAsIDQzOCwgICAwLCA0Mzh9CitzdGF0aWMgc3RydWN0IFhHSTMzMF9UVkRhdGFTdHJ1Y3QgIFhHSV9FeHRQQUxEYXRhW10gPSB7CisJezIsICAxLCAxMDgwLCA0NjMsIDEyNzAsIDUwMCwgIDUwLCAwLCAgNTB9LAorCXsxNSwgNywgMTE1MiwgNDEzLCAxMjcwLCA1MDAsICA1MCwgMCwgIDUwfSwKKwl7MiwgIDEsIDEwODAsIDQ2MywgMTI3MCwgNTAwLCAgNTAsIDAsICA1MH0sCisJezE1LCA3LCAxMTUyLCA0MTMsIDEyNzAsIDUwMCwgIDUwLCAwLCAgNTB9LAorCXsyLCAgMSwgIDkwMCwgNTQzLCAxMjcwLCA1MDAsICAgMCwgMCwgIDUwfSwKKwl7NCwgIDMsIDEwODAsIDY2MywgMTI3MCwgNTAwLCA0MzgsIDAsIDQzOH0sCisJezEsICAxLCAxMTI1LCA4MzEsIDEyNzAsIDUwMCwgNjg2LCAwLCA2ODZ9LCAvKjMwMWIqLworCXszLCAgMiwgMTA4MCwgNjE5LCAxMjcwLCA1NDAsIDQzOCwgMCwgNDM4fQogfTsKIAotc3RhdGljIHN0cnVjdCBYR0kzMzBfVFZEYXRhU3RydWN0ICBYR0lfU3ROVFNDRGF0YVtdID0KLXsKLSB7ICAgIDEsICAgMSwgODU4LCA1MjUsMTI3MCwgNDAwLCAgNTAsICAgMCwgNzYwfSwKLSB7ICAgIDEsICAgMSwgODU4LCA1MjUsMTI3MCwgMzUwLCAgNTAsICAgMCwgNjQwfSwKLSB7ICAgIDEsICAgMSwgODU4LCA1MjUsMTI3MCwgNDAwLCAgIDAsICAgMCwgNzIwfSwKLSB7ICAgIDEsICAgMSwgODU4LCA1MjUsMTI3MCwgMzUwLCAgIDAsICAgMCwgNzIwfSwKLSB7ICAgIDEsICAgMSwgODU4LCA1MjUsMTI3MCwgNDgwLCAgIDAsICAgMCwgNzYwfQorc3RhdGljIHN0cnVjdCBYR0kzMzBfVFZEYXRhU3RydWN0ICBYR0lfU3ROVFNDRGF0YVtdID0geworCXsxLCAxLCA4NTgsIDUyNSwgMTI3MCwgNDAwLCA1MCwgMCwgNzYwfSwKKwl7MSwgMSwgODU4LCA1MjUsIDEyNzAsIDM1MCwgNTAsIDAsIDY0MH0sCisJezEsIDEsIDg1OCwgNTI1LCAxMjcwLCA0MDAsICAwLCAwLCA3MjB9LAorCXsxLCAxLCA4NTgsIDUyNSwgMTI3MCwgMzUwLCAgMCwgMCwgNzIwfSwKKwl7MSwgMSwgODU4LCA1MjUsIDEyNzAsIDQ4MCwgIDAsIDAsIDc2MH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX1RWRGF0YVN0cnVjdCAgWEdJX0V4dE5UU0NEYXRhW10gPQotewotIHsgICAgOSwgIDUsIDEwMDEsIDQ1MywxMjcwLCA0MjAsIDE3MSwgICAwLCAxNzF9LAotIHsgICAxMiwgIDUsICA4NTgsIDQwMywxMjcwLCA0MjAsIDE3MSwgICAwLCAxNzF9LAotIHsgICAgOSwgIDUsIDEwMDEsIDQ1MywxMjcwLCA0MjAsIDE3MSwgICAwLCAxNzF9LAotIHsgICAxMiwgIDUsICA4NTgsIDQwMywxMjcwLCA0MjAsIDE3MSwgICAwLCAxNzF9LAotIHsgIDE0MywgIDgwLCA4MzYsIDUyMywxMjcwLCA0MjAsIDIyNCwgICAwLCAgIDB9LAotIHsgIDE0MywgMTIwLDEwMDgsIDY0MywxMjcwLCA0MjAsICAgMCwgICAxLCAgIDB9LAotIHsgICAxLCAgICAxLDExMjAsIDgyMSwxNTE2LCA0MjAsICAgMCwgICAxLCAgIDB9LCAvKjMwMWIqLwotIHsgICAgMiwgICAxLCA4NTgsIDUwMywxNTg0LCA0ODAsICAgMCwgICAxLCAgIDB9LAotIHsgICAgMywgICAyLDEwMDEsIDUzMywxMjcwLCA0MjAsICAgMCwgICAwLCAgIDB9CitzdGF0aWMgc3RydWN0IFhHSTMzMF9UVkRhdGFTdHJ1Y3QgIFhHSV9FeHROVFNDRGF0YVtdID0geworCXs5LCAgICAgNSwgMTAwMSwgNDUzLCAxMjcwLCA0MjAsIDE3MSwgMCwgMTcxfSwKKwl7MTIsICAgIDUsICA4NTgsIDQwMywgMTI3MCwgNDIwLCAxNzEsIDAsIDE3MX0sCisJezksICAgICA1LCAxMDAxLCA0NTMsIDEyNzAsIDQyMCwgMTcxLCAwLCAxNzF9LAorCXsxMiwgICAgNSwgIDg1OCwgNDAzLCAxMjcwLCA0MjAsIDE3MSwgMCwgMTcxfSwKKwl7MTQzLCAgODAsICA4MzYsIDUyMywgMTI3MCwgNDIwLCAyMjQsIDAsICAgMH0sCisJezE0MywgMTIwLCAxMDA4LCA2NDMsIDEyNzAsIDQyMCwgICAwLCAxLCAgIDB9LAorCXsxLCAgICAgMSwgMTEyMCwgODIxLCAxNTE2LCA0MjAsICAgMCwgMSwgICAwfSwgLyozMDFiKi8KKwl7MiwgICAgIDEsICA4NTgsIDUwMywgMTU4NCwgNDgwLCAgIDAsIDEsICAgMH0sCisJezMsICAgICAyLCAxMDAxLCA1MzMsIDEyNzAsIDQyMCwgICAwLCAwLCAgIDB9CiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSTMzMF9UVkRhdGFTdHJ1Y3QgIFhHSV9TdDFIaVRWRGF0YVtdID0KLXsKLSAgICAJeyAgICAgICAgMSwxLDg5Miw1NjMsNjkwLDgwMCwwLDAsMCAgICAgICAgICAgICAgIH0sIC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwotICAgICAgICB7ICAgICAgICAxLDEsODkyLDU2Myw2OTAsNzAwLDAsMCwwICAgICAgICAgICAgICAgfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KLSAgICAgICAgeyAgICAgICAgMSwxLDEwMDAsNTYzLDc4NSw4MDAsMCwwLDAgICAgICAgICAgICAgIH0sIC8qIDAyICgzNjB4NDAwLDcyMHg0MDApICovCi0gICAgICAgIHsgICAgICAgIDEsMSwxMDAwLDU2Myw3ODUsNzAwLDAsMCwwICAgICAgICAgICAgICB9LCAvKiAwMyAoNzIweDM1MCkgKi8KLSAgICAgICAgeyAgICAgICAgMSwxLDg5Miw1NjMsNjkwLDk2MCwwLDAsMCAgICAgICAgICAgICAgIH0sIC8qIDA0ICgzMjB4MjQwLDY0MHg0ODApICovCi0gICAgICAgIHsgICAgICAgIDgsNSwxMDUwLDY4MywxNjQ4LDk2MCwweDE1MCwxLDAgICAgICAgICB9ICAvKiAwNSAoNDAweDMwMCw4MDB4NjAwKSAqLworc3RhdGljIHN0cnVjdCBYR0kzMzBfVFZEYXRhU3RydWN0ICBYR0lfU3QxSGlUVkRhdGFbXSA9IHsKKwl7MSwgMSwgODkyLCAgNTYzLCA2OTAsICA4MDAsIDAsICAgICAwLCAwfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCwKKwkJCQkJCQkgIDY0MHgyMDAsNjQweDQwMCkgKi8KKwl7MSwgMSwgODkyLCAgNTYzLCA2OTAsICA3MDAsIDAsICAgICAwLCAwfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KKwl7MSwgMSwgMTAwMCwgNTYzLCA3ODUsICA4MDAsIDAsICAgICAwLCAwfSwgLyogMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KKwl7MSwgMSwgMTAwMCwgNTYzLCA3ODUsICA3MDAsIDAsICAgICAwLCAwfSwgLyogMDMgKDcyMHgzNTApICovCisJezEsIDEsIDg5MiwgIDU2MywgNjkwLCAgOTYwLCAwLCAgICAgMCwgMH0sIC8qIDA0ICgzMjB4MjQwLDY0MHg0ODApICovCisJezgsIDUsIDEwNTAsIDY4MywgMTY0OCwgOTYwLCAweDE1MCwgMSwgMH0gIC8qIDA1ICg0MDB4MzAwLDgwMHg2MDApICovCiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSTMzMF9UVkRhdGFTdHJ1Y3QgIFhHSV9TdDJIaVRWRGF0YVtdID0KLXsKLSAgICAgICAgeyAgICAgICAgMywxLDg0MCw0ODMsMTY0OCw5NjAsMHgwMzIsMCwwICAgICAgICAgIH0sIC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwotICAgICAgICB7ICAgICAgICAxLDEsODkyLDU2Myw2OTAsNzAwLDAsMCwwICAgICAgICAgICAgICAgfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KLSAgICAgICAgeyAgICAgICAgMywxLDg0MCw0ODMsMTY0OCw5NjAsMHgwMzIsMCwwICAgICAgICAgIH0sIC8qIDAyICgzNjB4NDAwLDcyMHg0MDApICovCi0gICAgICAgIHsgICAgICAgIDEsMSwxMDAwLDU2Myw3ODUsNzAwLDAsMCwwICAgICAgICAgICAgICB9LCAvKiAwMyAoNzIweDM1MCkgKi8KLSAgICAgICAgeyAgICAgICAgNSwyLDg0MCw1NjMsMTY0OCw5NjAsMHgwOEQsMSwwICAgICAgICAgIH0sIC8qIDA0ICgzMjB4MjQwLDY0MHg0ODApICovCi0gICAgICAgIHsgICAgICAgIDgsNSwxMDUwLDY4MywxNjQ4LDk2MCwweDE3QywxLDAgICAgICAgICB9ICAvKiAwNSAoNDAweDMwMCw4MDB4NjAwKSAqLwotCitzdGF0aWMgc3RydWN0IFhHSTMzMF9UVkRhdGFTdHJ1Y3QgIFhHSV9TdDJIaVRWRGF0YVtdID0geworCXszLCAxLCA4NDAsICA0ODMsIDE2NDgsIDk2MCwgMHgwMzIsIDAsIDB9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLAorCQkJCQkJCSAgNjQweDIwMCw2NDB4NDAwKSAqLworCXsxLCAxLCA4OTIsICA1NjMsIDY5MCwgIDcwMCwgMCwgICAgIDAsIDB9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLworCXszLCAxLCA4NDAsICA0ODMsIDE2NDgsIDk2MCwgMHgwMzIsIDAsIDB9LCAvKiAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLworCXsxLCAxLCAxMDAwLCA1NjMsIDc4NSwgIDcwMCwgMCwgICAgIDAsIDB9LCAvKiAwMyAoNzIweDM1MCkgKi8KKwl7NSwgMiwgODQwLCAgNTYzLCAxNjQ4LCA5NjAsIDB4MDhELCAxLCAwfSwgLyogMDQgKDMyMHgyNDAsNjQweDQ4MCkgKi8KKwl7OCwgNSwgMTA1MCwgNjgzLCAxNjQ4LCA5NjAsIDB4MTdDLCAxLCAwfSAgLyogMDUgKDQwMHgzMDAsODAweDYwMCkgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX1RWRGF0YVN0cnVjdCAgWEdJX0V4dEhpVFZEYXRhW10gPQotewotICAgICAgICB7ICAgICAgICA2LDEsODQwLDU2MywxNjMyLDk2MCwwLDAsMCAgICAgICAgICAgICAgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCi0gICAgICAgIHsgICAgICAgIDMsMSw5NjAsNTYzLDE2MzIsOTYwLDAsMCwwICAgICAgICAgICAgICB9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwotICAgICAgICB7ICAgICAgICAzLDEsODQwLDQ4MywxNjMyLDk2MCwwLDAsMCAgICAgICAgICAgICAgfSwgLyogMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KLSAgICAgICAgeyAgICAgICAgMywxLDk2MCw1NjMsMTYzMiw5NjAsMCwwLDAgICAgICAgICAgICAgIH0sIC8qIDAzICg3MjB4MzUwKSAqLwotICAgICAgICB7ICAgICAgICA1LDEsODQwLDU2MywxNjQ4LDk2MCwweDE2NiwxLDAgICAgICAgICAgfSwgLyogMDQgKDMyMHgyNDAsNjQweDQ4MCkgKi8KLSAgICAgICAgeyAgICAgICAgMTYsNSwxMDUwLDY4MywxNjQ4LDk2MCwweDE0MywxLDAgICAgICAgIH0sIC8qIDA1ICg0MDB4MzAwLDgwMHg2MDApICovCi0gICAgICAgIHsgICAgICAgIDI1LDEyLDEyNjAsODUxLDE2NDgsOTYwLDB4MDMyLDAsMCAgICAgICB9LCAvKiAwNiAoNTEyeDM4NCwxMDI0eDc2OCkgKi8KLSAgICAgICAgeyAgICAgICAgNSw0LDE1NzUsMTEyNCwxNjQ4LDk2MCwweDEyOCwwLDAgICAgICAgIH0sIC8qIDA3ICgxMjgweDEwMjQpICovCi0gICAgICAgIHsgICAgICAgIDQsMSwxMDUwLDU2MywxNTQ4LDk2MCwweDE0MywxLDAgICAgICAgICB9LCAvKiAwOCAoODAweDQ4MCkgKi8KLSAgICAgICAgeyAgICAgICAgNSwyLDE0MDAsNjU5LDE2NDgsOTYwLDB4MDMyLDAsMCAgICAgICAgIH0sIC8qIDA5ICgxMDI0eDU3NikgKi8KLSAgICAgICAgeyAgICAgICAgOCw1LDE3NTAsODAzLDE2NDgsOTYwLDB4MTI4LDAsMCAgICAgICAgIH0gIC8qIDBBICgxMjgweDcyMCkgKi8KLQorc3RhdGljIHN0cnVjdCBYR0kzMzBfVFZEYXRhU3RydWN0ICBYR0lfRXh0SGlUVkRhdGFbXSA9IHsKKwl7NiwgIDEsICA4NDAsICA1NjMsICAxNjMyLCA5NjAsIDAsICAgICAwLCAwfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCwKKwkJCQkJCQkgICAgIDY0MHgyMDAsNjQweDQwMCkgKi8KKwl7MywgIDEsICA5NjAsICA1NjMsICAxNjMyLCA5NjAsIDAsICAgICAwLCAwfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KKwl7MywgIDEsICA4NDAsICA0ODMsICAxNjMyLCA5NjAsIDAsICAgICAwLCAwfSwgLyogMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KKwl7MywgIDEsICA5NjAsICA1NjMsICAxNjMyLCA5NjAsIDAsICAgICAwLCAwfSwgLyogMDMgKDcyMHgzNTApICovCisJezUsICAxLCAgODQwLCAgNTYzLCAgMTY0OCwgOTYwLCAweDE2NiwgMSwgMH0sIC8qIDA0ICgzMjB4MjQwLDY0MHg0ODApICovCisJezE2LCA1LCAgMTA1MCwgNjgzLCAgMTY0OCwgOTYwLCAweDE0MywgMSwgMH0sIC8qIDA1ICg0MDB4MzAwLDgwMHg2MDApICovCisJezI1LCAxMiwgMTI2MCwgODUxLCAgMTY0OCwgOTYwLCAweDAzMiwgMCwgMH0sIC8qIDA2ICg1MTJ4Mzg0LDEwMjR4NzY4KSovCisJezUsICA0LCAgMTU3NSwgMTEyNCwgMTY0OCwgOTYwLCAweDEyOCwgMCwgMH0sIC8qIDA3ICgxMjgweDEwMjQpICovCisJezQsICAxLCAgMTA1MCwgNTYzLCAgMTU0OCwgOTYwLCAweDE0MywgMSwgMH0sIC8qIDA4ICg4MDB4NDgwKSAqLworCXs1LCAgMiwgIDE0MDAsIDY1OSwgIDE2NDgsIDk2MCwgMHgwMzIsIDAsIDB9LCAvKiAwOSAoMTAyNHg1NzYpICovCisJezgsICA1LCAgMTc1MCwgODAzLCAgMTY0OCwgOTYwLCAweDEyOCwgMCwgMH0gIC8qIDBBICgxMjgweDcyMCkgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX1RWRGF0YVN0cnVjdCAgWEdJX0V4dFlQYlByNTI1aURhdGFbXSA9Ci17Ci0geyAgICA5LCAgNSwgMTAwMSwgNDUzLDEyNzAsIDQyMCwgMTcxLCAgIDAsIDE3MX0sCi0geyAgIDEyLCAgNSwgIDg1OCwgNDAzLDEyNzAsIDQyMCwgMTcxLCAgIDAsIDE3MX0sCi0geyAgICA5LCAgNSwgMTAwMSwgNDUzLDEyNzAsIDQyMCwgMTcxLCAgIDAsIDE3MX0sCi0geyAgIDEyLCAgNSwgIDg1OCwgNDAzLDEyNzAsIDQyMCwgMTcxLCAgIDAsIDE3MX0sCi0geyAgMTQzLCAgODAsIDgzNiwgNTIzLDEyNTAsIDQyMCwgMjI0LCAgIDAsICAgMH0sCi0geyAgMTQzLCAxMjAsMTAwOCwgNjQzLDEyNTAsIDQyMCwgICAwLCAgIDEsICAgMH0sCi0geyAgIDEsICAgIDEsMTEyMCwgODIxLDE1MTYsIDQyMCwgICAwLCAgIDEsICAgMH0sIC8qMzAxYiovCi0geyAgICAyLCAgIDEsIDg1OCwgNTAzLDE1ODQsIDQ4MCwgICAwLCAgIDEsICAgMH0sCi0geyAgICAzLCAgIDIsMTAwMSwgNTMzLDEyNTAsIDQyMCwgICAwLCAgIDAsICAgMH0KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX1RWRGF0YVN0cnVjdCAgWEdJX0V4dFlQYlByNTI1aURhdGFbXSA9IHsKKwl7ICA5LCAgNSwgIDEwMDEsIDQ1MywgMTI3MCwgNDIwLCAxNzEsICAgMCwgMTcxfSwKKwl7IDEyLCAgNSwgICA4NTgsIDQwMywgMTI3MCwgNDIwLCAxNzEsICAgMCwgMTcxfSwKKwl7ICA5LCAgNSwgIDEwMDEsIDQ1MywgMTI3MCwgNDIwLCAxNzEsICAgMCwgMTcxfSwKKwl7IDEyLCAgNSwgICA4NTgsIDQwMywgMTI3MCwgNDIwLCAxNzEsICAgMCwgMTcxfSwKKwl7MTQzLCAgODAsICA4MzYsIDUyMywgMTI1MCwgNDIwLCAyMjQsICAgMCwgICAwfSwKKwl7MTQzLCAxMjAsIDEwMDgsIDY0MywgMTI1MCwgNDIwLCAgIDAsICAgMSwgICAwfSwKKwl7IDEsICAgIDEsIDExMjAsIDgyMSwgMTUxNiwgNDIwLCAgIDAsICAgMSwgICAwfSwgLyozMDFiKi8KKwl7ICAyLCAgIDEsICA4NTgsIDUwMywgMTU4NCwgNDgwLCAgIDAsICAgMSwgICAwfSwKKwl7ICAzLCAgIDIsIDEwMDEsIDUzMywgMTI1MCwgNDIwLCAgIDAsICAgMCwgICAwfQogfTsKIAotc3RhdGljIHN0cnVjdCBYR0kzMzBfVFZEYXRhU3RydWN0ICBYR0lfU3RZUGJQcjUyNWlEYXRhW10gPQotewotIHsgICAgMSwgICAxLCA4NTgsIDUyNSwxMjcwLCA0MDAsICA1MCwgICAwLCA3NjB9LAotIHsgICAgMSwgICAxLCA4NTgsIDUyNSwxMjcwLCAzNTAsICA1MCwgICAwLCA2NDB9LAotIHsgICAgMSwgICAxLCA4NTgsIDUyNSwxMjcwLCA0MDAsICAgMCwgICAwLCA3MjB9LAotIHsgICAgMSwgICAxLCA4NTgsIDUyNSwxMjcwLCAzNTAsICAgMCwgICAwLCA3MjB9LAotIHsgICAgMSwgICAxLCA4NTgsIDUyNSwxMjcwLCA0ODAsICAgMCwgICAwLCA3NjB9LAorc3RhdGljIHN0cnVjdCBYR0kzMzBfVFZEYXRhU3RydWN0ICBYR0lfU3RZUGJQcjUyNWlEYXRhW10gPSB7CisJezEsIDEsIDg1OCwgNTI1LCAxMjcwLCA0MDAsIDUwLCAwLCA3NjB9LAorCXsxLCAxLCA4NTgsIDUyNSwgMTI3MCwgMzUwLCA1MCwgMCwgNjQwfSwKKwl7MSwgMSwgODU4LCA1MjUsIDEyNzAsIDQwMCwgIDAsIDAsIDcyMH0sCisJezEsIDEsIDg1OCwgNTI1LCAxMjcwLCAzNTAsICAwLCAwLCA3MjB9LAorCXsxLCAxLCA4NTgsIDUyNSwgMTI3MCwgNDgwLCAgMCwgMCwgNzYwfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX1RWRGF0YVN0cnVjdCAgWEdJX0V4dFlQYlByNTI1cERhdGFbXSA9Ci17Ci0geyAgICA5LCAgNSwgMTAwMSwgNDUzLDEyNzAsIDQyMCwgMTcxLCAgIDAsIDE3MX0sCi0geyAgIDEyLCAgNSwgIDg1OCwgNDAzLDEyNzAsIDQyMCwgMTcxLCAgIDAsIDE3MX0sCi0geyAgICA5LCAgNSwgMTAwMSwgNDUzLDEyNzAsIDQyMCwgMTcxLCAgIDAsIDE3MX0sCi0geyAgIDEyLCAgNSwgIDg1OCwgNDAzLDEyNzAsIDQyMCwgMTcxLCAgIDAsIDE3MX0sCi0geyAgMTQzLCAgODAsIDgzNiwgNTIzLDEyNzAsIDQyMCwgMjI0LCAgIDAsICAgMH0sCi0geyAgMTQzLCAxMjAsMTAwOCwgNjQzLDEyNzAsIDQyMCwgICAwLCAgIDEsICAgMH0sCi0geyAgIDEsICAgIDEsMTEyMCwgODIxLDE1MTYsIDQyMCwgICAwLCAgIDEsICAgMH0sIC8qMzAxYiovCi0geyAgICAyLCAgIDEsIDg1OCwgNTAzLDE1ODQsIDQ4MCwgICAwLCAgIDEsICAgMH0sCi0geyAgICAzLCAgIDIsMTAwMSwgNTMzLDEyNzAsIDQyMCwgICAwLCAgIDAsICAgMH0KLSB9OwotCi1zdGF0aWMgc3RydWN0IFhHSTMzMF9UVkRhdGFTdHJ1Y3QgIFhHSV9TdFlQYlByNTI1cERhdGFbXSA9Ci17Ci0geyAgICAxLCAgIDEsMTcxNiwgNTI1LDEyNzAsIDQwMCwgIDUwLCAgIDAsIDc2MH0sCi0geyAgICAxLCAgIDEsMTcxNiwgNTI1LDEyNzAsIDM1MCwgIDUwLCAgIDAsIDY0MH0sCi0geyAgICAxLCAgIDEsMTcxNiwgNTI1LDEyNzAsIDQwMCwgICAwLCAgIDAsIDcyMH0sCi0geyAgICAxLCAgIDEsMTcxNiwgNTI1LDEyNzAsIDM1MCwgICAwLCAgIDAsIDcyMH0sCi0geyAgICAxLCAgIDEsMTcxNiwgNTI1LDEyNzAsIDQ4MCwgICAwLCAgIDAsIDc2MH0sCitzdGF0aWMgc3RydWN0IFhHSTMzMF9UVkRhdGFTdHJ1Y3QgIFhHSV9FeHRZUGJQcjUyNXBEYXRhW10gPSB7CisJeyAgOSwgICA1LCAgMTAwMSwgNDUzLCAxMjcwLCA0MjAsIDE3MSwgMCwgMTcxfSwKKwl7IDEyLCAgIDUsICAgODU4LCA0MDMsIDEyNzAsIDQyMCwgMTcxLCAwLCAxNzF9LAorCXsgIDksICAgNSwgIDEwMDEsIDQ1MywgMTI3MCwgNDIwLCAxNzEsIDAsIDE3MX0sCisJeyAxMiwgICA1LCAgIDg1OCwgNDAzLCAxMjcwLCA0MjAsIDE3MSwgMCwgMTcxfSwKKwl7MTQzLCAgODAsICAgODM2LCA1MjMsIDEyNzAsIDQyMCwgMjI0LCAwLCAgIDB9LAorCXsxNDMsIDEyMCwgIDEwMDgsIDY0MywgMTI3MCwgNDIwLCAgIDAsIDEsICAgMH0sCisJeyAxLCAgICAxLCAgMTEyMCwgODIxLCAxNTE2LCA0MjAsICAgMCwgMSwgICAwfSwgLyozMDFiKi8KKwl7ICAyLCAgIDEsICAgODU4LCA1MDMsIDE1ODQsIDQ4MCwgICAwLCAxLCAgIDB9LAorCXsgIDMsICAgMiwgIDEwMDEsIDUzMywgMTI3MCwgNDIwLCAgIDAsIDAsICAgMH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX1RWRGF0YVN0cnVjdCAgWEdJX0V4dFlQYlByNzUwcERhdGFbXSA9Ci17Ci0geyAgICAzLCAgIDEsIDkzNSwgNDcwLDExMzAsIDY4MCwgIDUwLCAgIDAsICAgMH0sICAgICAgIC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwotIHsgICAyNCwgICA3LCA5MzUsIDQyMCwxMTMwLCA2ODAsICA1MCwgICAwLCAgIDB9LCAgICAgICAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwotIHsgICAgMywgICAxLCA5MzUsIDQ3MCwxMTMwLCA2ODAsICA1MCwgICAwLCAgIDB9LCAgICAgICAvKiAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLwotIHsgICAyNCwgICA3LCA5MzUsIDQyMCwxMTMwLCA2ODAsICA1MCwgICAwLCAgIDB9LCAgICAgICAvKiAwMyAoNzIweDM1MCkgKi8KLSB7ICAgIDIsICAgMSwxMTAwLCA1OTAsMTEzMCwgNjQwLCAgNTAsICAgMCwgICAwfSwgICAgICAgLyogMDQgKDMyMHgyNDAsNjQweDQ4MCkgKi8KLSB7ICAgIDMsICAgMiwxMjEwLCA2OTAsMTEzMCwgNjYwLCAgNTAsICAgMCwgICAwfSwgICAgICAgLyogMDUgKDQwMHgzMDAsODAweDYwMCkgKi8KLSB7ICAgIDEsICAgMSwxMzc1LCA4NzgsMTEzMCwgNjQwLCA2MzgsICAgMCwgICAwfSwgICAgICAgLyogMDYgKDEwMjR4NzY4KSAqLwotIHsgICAgMiwgICAxLCA4NTgsIDUwMywxMTMwLCA0ODAsICAgMCwgICAxLCAgIDB9LCAgICAgICAgLyogMDcgKDcyMHg0ODApICovCi0geyAgICA1LCAgIDQsMTgxNSwgNTcwLDExMzAsIDY2MCwgIDUwLCAgIDAsICAgMH0sCi0geyAgICA1LCAgIDMsMTEwMCwgNjg2LDExMzAsIDY0MCwgIDUwLCAgIDEsICAgMH0sCi0geyAgIDEwLCAgIDksMTMyMCwgODMwLDExMzAsIDY0MCwgIDUwLCAgIDAsICAgMH0KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX1RWRGF0YVN0cnVjdCAgWEdJX1N0WVBiUHI1MjVwRGF0YVtdID0geworCXsxLCAxLCAxNzE2LCA1MjUsIDEyNzAsIDQwMCwgNTAsIDAsIDc2MH0sCisJezEsIDEsIDE3MTYsIDUyNSwgMTI3MCwgMzUwLCA1MCwgMCwgNjQwfSwKKwl7MSwgMSwgMTcxNiwgNTI1LCAxMjcwLCA0MDAsICAwLCAwLCA3MjB9LAorCXsxLCAxLCAxNzE2LCA1MjUsIDEyNzAsIDM1MCwgIDAsIDAsIDcyMH0sCisJezEsIDEsIDE3MTYsIDUyNSwgMTI3MCwgNDgwLCAgMCwgMCwgNzYwfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX1RWRGF0YVN0cnVjdCAgWEdJX1N0WVBiUHI3NTBwRGF0YVtdID0KLXsKLSB7ICAgIDEsICAgMSwxNjUwLCA3NTAsMTI4MCwgNDAwLCAgNTAsICAgMCwgNzYwfSwKLSB7ICAgIDEsICAgMSwxNjUwLCA3NTAsMTI4MCwgMzUwLCAgNTAsICAgMCwgNjQwfSwKLSB7ICAgIDEsICAgMSwxNjUwLCA3NTAsMTI4MCwgNDAwLCAgIDAsICAgMCwgNzIwfSwKLSB7ICAgIDEsICAgMSwxNjUwLCA3NTAsMTI4MCwgMzUwLCAgIDAsICAgMCwgNzIwfSwKLSB7ICAgIDEsICAgMSwxNjUwLCA3NTAsMTI4MCwgNDgwLCAgIDAsICAgMCwgNzYwfSwKK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX1RWRGF0YVN0cnVjdCAgWEdJX0V4dFlQYlByNzUwcERhdGFbXSA9IHsKKwl7IDMsIDEsICA5MzUsIDQ3MCwgMTEzMCwgNjgwLCAgNTAsIDAsIDB9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLAorCQkJCQkJCSA2NDB4MjAwLDY0MHg0MDApICovCisJezI0LCA3LCAgOTM1LCA0MjAsIDExMzAsIDY4MCwgIDUwLCAwLCAwfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KKwl7IDMsIDEsICA5MzUsIDQ3MCwgMTEzMCwgNjgwLCAgNTAsIDAsIDB9LCAvKiAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLworCXsyNCwgNywgIDkzNSwgNDIwLCAxMTMwLCA2ODAsICA1MCwgMCwgMH0sIC8qIDAzICg3MjB4MzUwKSAqLworCXsgMiwgMSwgMTEwMCwgNTkwLCAxMTMwLCA2NDAsICA1MCwgMCwgMH0sIC8qIDA0ICgzMjB4MjQwLDY0MHg0ODApICovCisJeyAzLCAyLCAxMjEwLCA2OTAsIDExMzAsIDY2MCwgIDUwLCAwLCAwfSwgLyogMDUgKDQwMHgzMDAsODAweDYwMCkgKi8KKwl7IDEsIDEsIDEzNzUsIDg3OCwgMTEzMCwgNjQwLCA2MzgsIDAsIDB9LCAvKiAwNiAoMTAyNHg3NjgpICovCisJeyAyLCAxLCAgODU4LCA1MDMsIDExMzAsIDQ4MCwgICAwLCAxLCAwfSwgLyogMDcgKDcyMHg0ODApICovCisJeyA1LCA0LCAxODE1LCA1NzAsIDExMzAsIDY2MCwgIDUwLCAwLCAwfSwKKwl7IDUsIDMsIDExMDAsIDY4NiwgMTEzMCwgNjQwLCAgNTAsIDEsIDB9LAorCXsxMCwgOSwgMTMyMCwgODMwLCAxMTMwLCA2NDAsICA1MCwgMCwgMH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX1RWRGF0YVN0cnVjdCAgWEdJX1N0WVBiUHI3NTBwRGF0YVtdID0geworCXsxLCAxLCAxNjUwLCA3NTAsIDEyODAsIDQwMCwgNTAsIDAsIDc2MH0sCisJezEsIDEsIDE2NTAsIDc1MCwgMTI4MCwgMzUwLCA1MCwgMCwgNjQwfSwKKwl7MSwgMSwgMTY1MCwgNzUwLCAxMjgwLCA0MDAsICAwLCAwLCA3MjB9LAorCXsxLCAxLCAxNjUwLCA3NTAsIDEyODAsIDM1MCwgIDAsIDAsIDcyMH0sCisJezEsIDEsIDE2NTAsIDc1MCwgMTI4MCwgNDgwLCAgMCwgMCwgNzYwfSwKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIFhHSTMzMF9OVFNDVGltaW5nW10gPSB7Ci0gIDB4MTcsMHgxZCwweDAzLDB4MDksMHgwNSwweDA2LDB4MGMsMHgwYywKLSAgMHg5NCwweDQ5LDB4MDEsMHgwYSwweDA2LDB4MGQsMHgwNCwweDBhLAotICAweDA2LDB4MTQsMHgwZCwweDA0LDB4MGEsMHgwMCwweDg1LDB4MWIsCi0gIDB4MGMsMHg1MCwweDAwLDB4OTcsMHgwMCwweGRhLDB4NGEsMHgxNywKLSAgMHg3ZCwweDA1LDB4NGIsMHgwMCwweDAwLDB4ZTIsMHgwMCwweDAyLAotICAweDAzLDB4MGEsMHg2NSwweDlkLDB4MDgsMHg5MiwweDhmLDB4NDAsCi0gIDB4NjAsMHg4MCwweDE0LDB4OTAsMHg4YywweDYwLDB4MTQsMHg1MCwKLSAgMHgwMCwweDQwLDB4NDQsMHgwMCwweGRiLDB4MDIsMHgzYiwweDAwfTsKKwkweDE3LCAweDFkLCAweDAzLCAweDA5LCAweDA1LCAweDA2LCAweDBjLCAweDBjLAorCTB4OTQsIDB4NDksIDB4MDEsIDB4MGEsIDB4MDYsIDB4MGQsIDB4MDQsIDB4MGEsCisJMHgwNiwgMHgxNCwgMHgwZCwgMHgwNCwgMHgwYSwgMHgwMCwgMHg4NSwgMHgxYiwKKwkweDBjLCAweDUwLCAweDAwLCAweDk3LCAweDAwLCAweGRhLCAweDRhLCAweDE3LAorCTB4N2QsIDB4MDUsIDB4NGIsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4MDAsIDB4MDIsCisJMHgwMywgMHgwYSwgMHg2NSwgMHg5ZCwgMHgwOCwgMHg5MiwgMHg4ZiwgMHg0MCwKKwkweDYwLCAweDgwLCAweDE0LCAweDkwLCAweDhjLCAweDYwLCAweDE0LCAweDUwLAorCTB4MDAsIDB4NDAsIDB4NDQsIDB4MDAsIDB4ZGIsIDB4MDIsIDB4M2IsIDB4MDAKK307CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIFhHSTMzMF9QQUxUaW1pbmdbXSA9IHsKLSAgMHgyMSwweDVBLDB4MzUsMHg2ZSwweDA0LDB4MzgsMHgzZCwweDcwLAotICAweDk0LDB4NDksMHgwMSwweDEyLDB4MDYsMHgzZSwweDM1LDB4NmQsCi0gIDB4MDYsMHgxNCwweDNlLDB4MzUsMHg2ZCwweDAwLDB4NDUsMHgyYiwKLSAgMHg3MCwweDUwLDB4MDAsMHg5YiwweDAwLDB4ZDksMHg1ZCwweDE3LAotICAweDdkLDB4MDUsMHg0NSwweDAwLDB4MDAsMHhlOCwweDAwLDB4MDIsCi0gIDB4MGQsMHgwMCwweDY4LDB4YjAsMHgwYiwweDkyLDB4OGYsMHg0MCwKLSAgMHg2MCwweDgwLDB4MTQsMHg5MCwweDhjLDB4NjAsMHgxNCwweDYzLAotICAweDAwLDB4NDAsMHgzZSwweDAwLDB4ZTEsMHgwMiwweDI4LDB4MDB9OwotCi1zdGF0aWMgdW5zaWduZWQgY2hhciBYR0kzMzBfSGlUVkV4dFRpbWluZ1tdID0KLXsKLSAgICAgIDB4MkQsMHg2MCwweDJDLDB4NUYsMHgwOCwweDMxLDB4M0EsMHg2NCwKLSAgICAgIDB4MjgsMHgwMiwweDAxLDB4M0QsMHgwNiwweDNFLDB4MzUsMHg2RCwKLSAgICAgIDB4MDYsMHgxNCwweDNFLDB4MzUsMHg2RCwweDAwLDB4QzUsMHgzRiwKLSAgICAgIDB4NjQsMHg5MCwweDMzLDB4OEMsMHgxOCwweDM2LDB4M0UsMHgxMywKLSAgICAgIDB4MkEsMHhERSwweDJBLDB4NDQsMHg0MCwweDJBLDB4NDQsMHg0MCwKLSAgICAgIDB4OEUsMHg4RSwweDgyLDB4MDcsMHgwQiwKLSAgICAgIDB4OTIsMHgwRiwweDQwLDB4NjAsMHg4MCwweDE0LDB4OTAsMHg4QywKLSAgICAgIDB4NjAsMHgxNCwweDNELDB4NjMsMHg0RiwKLSAgICAgIDB4MjcsMHgwMCwweGZjLDB4ZmYsMHg2YSwweDAwCi0KKwkweDIxLCAweDVBLCAweDM1LCAweDZlLCAweDA0LCAweDM4LCAweDNkLCAweDcwLAorCTB4OTQsIDB4NDksIDB4MDEsIDB4MTIsIDB4MDYsIDB4M2UsIDB4MzUsIDB4NmQsCisJMHgwNiwgMHgxNCwgMHgzZSwgMHgzNSwgMHg2ZCwgMHgwMCwgMHg0NSwgMHgyYiwKKwkweDcwLCAweDUwLCAweDAwLCAweDliLCAweDAwLCAweGQ5LCAweDVkLCAweDE3LAorCTB4N2QsIDB4MDUsIDB4NDUsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDAsIDB4MDIsCisJMHgwZCwgMHgwMCwgMHg2OCwgMHhiMCwgMHgwYiwgMHg5MiwgMHg4ZiwgMHg0MCwKKwkweDYwLCAweDgwLCAweDE0LCAweDkwLCAweDhjLCAweDYwLCAweDE0LCAweDYzLAorCTB4MDAsIDB4NDAsIDB4M2UsIDB4MDAsIDB4ZTEsIDB4MDIsIDB4MjgsIDB4MDAKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIFhHSTMzMF9IaVRWU3QxVGltaW5nW10gPQotewotICAgICAgMHgzMiwweDY1LDB4MkMsMHg1RiwweDA4LDB4MzEsMHgzQSwweDY1LAotICAgICAgMHgyOCwweDAyLDB4MDEsMHgzRCwweDA2LDB4M0UsMHgzNSwweDZELAotICAgICAgMHgwNiwweDE0LDB4M0UsMHgzNSwweDZELDB4MDAsMHhDNSwweDNGLAotICAgICAgMHg2NSwweDkwLDB4N0IsMHhBOCwweDAzLDB4RjAsMHg4NywweDAzLAotICAgICAgMHgxMSwweDE1LDB4MTEsMHhDRiwweDEwLDB4MTEsMHhDRiwweDEwLAotICAgICAgMHgzNSwweDM1LDB4M0IsMHg2OSwweDFELAotICAgICAgMHg5MiwweDBGLDB4NDAsMHg2MCwweDgwLDB4MTQsMHg5MCwweDhDLAotICAgICAgMHg2MCwweDA0LDB4ODYsMHhBRiwweDVELAotICAgICAgMHgwRSwweDAwLDB4ZmMsMHhmZiwweDJkLDB4MDAKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIFhHSTMzMF9IaVRWRXh0VGltaW5nW10gPSB7CisJMHgyRCwgMHg2MCwgMHgyQywgMHg1RiwgMHgwOCwgMHgzMSwgMHgzQSwgMHg2NCwKKwkweDI4LCAweDAyLCAweDAxLCAweDNELCAweDA2LCAweDNFLCAweDM1LCAweDZELAorCTB4MDYsIDB4MTQsIDB4M0UsIDB4MzUsIDB4NkQsIDB4MDAsIDB4QzUsIDB4M0YsCisJMHg2NCwgMHg5MCwgMHgzMywgMHg4QywgMHgxOCwgMHgzNiwgMHgzRSwgMHgxMywKKwkweDJBLCAweERFLCAweDJBLCAweDQ0LCAweDQwLCAweDJBLCAweDQ0LCAweDQwLAorCTB4OEUsIDB4OEUsIDB4ODIsIDB4MDcsIDB4MEIsCisJMHg5MiwgMHgwRiwgMHg0MCwgMHg2MCwgMHg4MCwgMHgxNCwgMHg5MCwgMHg4QywKKwkweDYwLCAweDE0LCAweDNELCAweDYzLCAweDRGLAorCTB4MjcsIDB4MDAsIDB4ZmMsIDB4ZmYsIDB4NmEsIDB4MDAKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIFhHSTMzMF9IaVRWU3QyVGltaW5nW10gPQotewotICAgICAgMHgzMiwweDY1LDB4MkMsMHg1RiwweDA4LDB4MzEsMHgzQSwweDY0LAotICAgICAgMHgyOCwweDAyLDB4MDEsMHgzRCwweDA2LDB4M0UsMHgzNSwweDZELAotICAgICAgMHgwNiwweDE0LDB4M0UsMHgzNSwweDZELDB4MDAsMHhDNSwweDNGLAotICAgICAgMHg2NCwweDkwLDB4MzMsMHg4QywweDE4LDB4MzYsMHgzRSwweDEzLAotICAgICAgMHgyQSwweERFLDB4MkEsMHg0NCwweDQwLDB4MkEsMHg0NCwweDQwLAotICAgICAgMHg4RSwweDhFLDB4ODIsMHgwNywweDBCLAotICAgICAgMHg5MiwweDBGLDB4NDAsMHg2MCwweDgwLDB4MTQsMHg5MCwweDhDLAotICAgICAgMHg2MCwweDE0LDB4M0QsMHg2MywweDRGLAotICAgICAgMHgyNywweDAwLDB4RkMsMHhmZiwweDZhLDB4MDAKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIFhHSTMzMF9IaVRWU3QxVGltaW5nW10gPSB7CisJMHgzMiwgMHg2NSwgMHgyQywgMHg1RiwgMHgwOCwgMHgzMSwgMHgzQSwgMHg2NSwKKwkweDI4LCAweDAyLCAweDAxLCAweDNELCAweDA2LCAweDNFLCAweDM1LCAweDZELAorCTB4MDYsIDB4MTQsIDB4M0UsIDB4MzUsIDB4NkQsIDB4MDAsIDB4QzUsIDB4M0YsCisJMHg2NSwgMHg5MCwgMHg3QiwgMHhBOCwgMHgwMywgMHhGMCwgMHg4NywgMHgwMywKKwkweDExLCAweDE1LCAweDExLCAweENGLCAweDEwLCAweDExLCAweENGLCAweDEwLAorCTB4MzUsIDB4MzUsIDB4M0IsIDB4NjksIDB4MUQsCisJMHg5MiwgMHgwRiwgMHg0MCwgMHg2MCwgMHg4MCwgMHgxNCwgMHg5MCwgMHg4QywKKwkweDYwLCAweDA0LCAweDg2LCAweEFGLCAweDVELAorCTB4MEUsIDB4MDAsIDB4ZmMsIDB4ZmYsIDB4MmQsIDB4MDAKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIFhHSTMzMF9IaVRWVGV4dFRpbWluZ1tdID0KLXsKLSAgICAgIDB4MzIsMHg2NSwweDJDLDB4NUYsMHgwOCwweDMxLDB4M0EsMHg2NSwKLSAgICAgIDB4MjgsMHgwMiwweDAxLDB4M0QsMHgwNiwweDNFLDB4MzUsMHg2RCwKLSAgICAgIDB4MDYsMHgxNCwweDNFLDB4MzUsMHg2RCwweDAwLDB4QzUsMHgzRiwKLSAgICAgIDB4NjUsMHg5MCwweEU3LDB4QkMsMHgwMywweDBDLDB4OTcsMHgwMywKLSAgICAgIDB4MTQsMHg3OCwweDE0LDB4MDgsMHgyMCwweDE0LDB4MDgsMHgyMCwKLSAgICAgIDB4QzgsMHhDOCwweDNCLDB4RDIsMHgyNiwKLSAgICAgIDB4OTIsMHgwRiwweDQwLDB4NjAsMHg4MCwweDE0LDB4OTAsMHg4QywKLSAgICAgIDB4NjAsMHgwNCwweDk2LDB4NzIsMHg1QywKLSAgICAgIDB4MTEsMHgwMCwweEZDLDB4RkYsMHgzMiwweDAwCitzdGF0aWMgdW5zaWduZWQgY2hhciBYR0kzMzBfSGlUVlN0MlRpbWluZ1tdID0geworCTB4MzIsIDB4NjUsIDB4MkMsIDB4NUYsIDB4MDgsIDB4MzEsIDB4M0EsIDB4NjQsCisJMHgyOCwgMHgwMiwgMHgwMSwgMHgzRCwgMHgwNiwgMHgzRSwgMHgzNSwgMHg2RCwKKwkweDA2LCAweDE0LCAweDNFLCAweDM1LCAweDZELCAweDAwLCAweEM1LCAweDNGLAorCTB4NjQsIDB4OTAsIDB4MzMsIDB4OEMsIDB4MTgsIDB4MzYsIDB4M0UsIDB4MTMsCisJMHgyQSwgMHhERSwgMHgyQSwgMHg0NCwgMHg0MCwgMHgyQSwgMHg0NCwgMHg0MCwKKwkweDhFLCAweDhFLCAweDgyLCAweDA3LCAweDBCLAorCTB4OTIsIDB4MEYsIDB4NDAsIDB4NjAsIDB4ODAsIDB4MTQsIDB4OTAsIDB4OEMsCisJMHg2MCwgMHgxNCwgMHgzRCwgMHg2MywgMHg0RiwKKwkweDI3LCAweDAwLCAweEZDLCAweGZmLCAweDZhLCAweDAwCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBYR0kzMzBfWVBiUHI3NTBwVGltaW5nW10gPQotewotICAgICAgMHgzMCwweDFkLDB4ZTgsMHgwOSwweDA5LDB4ZWQsMHgwYywweDBjLAotICAgICAgMHg5OCwweDBhLDB4MDEsMHgwYywweDA2LDB4MGQsMHgwNCwweDBhLAotICAgICAgMHgwNiwweDE0LDB4MGQsMHgwNCwweDBhLDB4MDAsMHg4NSwweDNmLAotICAgICAgMHhlZCwweDUwLDB4NzAsMHg5ZiwweDE2LDB4NTksMHg2MCwweDEzLAotICAgICAgMHgyNywweDBiLDB4MjcsMHhmYywweDMwLDB4MjcsMHgxYywweGIwLAotICAgICAgMHg0YiwweDRiLDB4NmYsMHgyZiwweDYzLAotICAgICAgMHg5MiwweDBGLDB4NDAsMHg2MCwweDgwLDB4MTQsMHg5MCwweDhDLAotICAgICAgMHg2MCwweDE0LDB4NzMsMHgwMCwweDQwLAotICAgICAgMHgxMSwweDAwLDB4ZmMsMHhmZiwweDMyLDB4MDAKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIFhHSTMzMF9IaVRWVGV4dFRpbWluZ1tdID0geworCTB4MzIsIDB4NjUsIDB4MkMsIDB4NUYsIDB4MDgsIDB4MzEsIDB4M0EsIDB4NjUsCisJMHgyOCwgMHgwMiwgMHgwMSwgMHgzRCwgMHgwNiwgMHgzRSwgMHgzNSwgMHg2RCwKKwkweDA2LCAweDE0LCAweDNFLCAweDM1LCAweDZELCAweDAwLCAweEM1LCAweDNGLAorCTB4NjUsIDB4OTAsIDB4RTcsIDB4QkMsIDB4MDMsIDB4MEMsIDB4OTcsIDB4MDMsCisJMHgxNCwgMHg3OCwgMHgxNCwgMHgwOCwgMHgyMCwgMHgxNCwgMHgwOCwgMHgyMCwKKwkweEM4LCAweEM4LCAweDNCLCAweEQyLCAweDI2LAorCTB4OTIsIDB4MEYsIDB4NDAsIDB4NjAsIDB4ODAsIDB4MTQsIDB4OTAsIDB4OEMsCisJMHg2MCwgMHgwNCwgMHg5NiwgMHg3MiwgMHg1QywKKwkweDExLCAweDAwLCAweEZDLCAweEZGLCAweDMyLCAweDAwCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBYR0kzMzBfWVBiUHI1MjVwVGltaW5nW10gPQotewotICAgICAgMHgzRSwweDExLDB4MDYsMHgwOSwweDBiLDB4MGMsMHgwYywweDBjLAotICAgICAgMHg5OCwweDBhLDB4MDEsMHgwZCwweDA2LDB4MGQsMHgwNCwweDBhLAotICAgICAgMHgwNiwweDE0LDB4MGQsMHgwNCwweDBhLDB4MDAsMHg4NSwweDNmLAotICAgICAgMHgwYywweDUwLDB4YjIsMHg5ZiwweDE2LDB4NTksMHg0ZiwweDEzLAotICAgICAgMHhhZCwweDExLDB4YWQsMHgxZCwweDQwLDB4OGEsMHgzZCwweGI4LAotICAgICAgMHg1MSwweDVlLDB4NjAsMHg0OSwweDdkLAotICAgICAgMHg5MiwweDBGLDB4NDAsMHg2MCwweDgwLDB4MTQsMHg5MCwweDhDLAotICAgICAgMHg2MCwweDE0LDB4NEIsMHg0MywweDQxLAotICAgICAgMHgxMSwweDAwLDB4RkMsMHhGRiwweDMyLDB4MDAKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIFhHSTMzMF9ZUGJQcjc1MHBUaW1pbmdbXSA9IHsKKwkweDMwLCAweDFkLCAweGU4LCAweDA5LCAweDA5LCAweGVkLCAweDBjLCAweDBjLAorCTB4OTgsIDB4MGEsIDB4MDEsIDB4MGMsIDB4MDYsIDB4MGQsIDB4MDQsIDB4MGEsCisJMHgwNiwgMHgxNCwgMHgwZCwgMHgwNCwgMHgwYSwgMHgwMCwgMHg4NSwgMHgzZiwKKwkweGVkLCAweDUwLCAweDcwLCAweDlmLCAweDE2LCAweDU5LCAweDYwLCAweDEzLAorCTB4MjcsIDB4MGIsIDB4MjcsIDB4ZmMsIDB4MzAsIDB4MjcsIDB4MWMsIDB4YjAsCisJMHg0YiwgMHg0YiwgMHg2ZiwgMHgyZiwgMHg2MywKKwkweDkyLCAweDBGLCAweDQwLCAweDYwLCAweDgwLCAweDE0LCAweDkwLCAweDhDLAorCTB4NjAsIDB4MTQsIDB4NzMsIDB4MDAsIDB4NDAsCisJMHgxMSwgMHgwMCwgMHhmYywgMHhmZiwgMHgzMiwgMHgwMAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgWEdJMzMwX1lQYlByNTI1aVRpbWluZ1tdID0KLXsKLSAgICAgIDB4MUIsMHgyMSwweDAzLDB4MDksMHgwNSwweDA2LDB4MEMsMHgwQywKLSAgICAgIDB4OTQsMHg0OSwweDAxLDB4MEEsMHgwNiwweDBELDB4MDQsMHgwQSwKLSAgICAgIDB4MDYsMHgxNCwweDBELDB4MDQsMHgwQSwweDAwLDB4ODUsMHgxQiwKLSAgICAgIDB4MEMsMHg1MCwweDAwLDB4OTcsMHgwMCwweERBLDB4NEEsMHgxNywKLSAgICAgIDB4N0QsMHgwNSwweDRCLDB4MDAsMHgwMCwweEUyLDB4MDAsMHgwMiwKLSAgICAgIDB4MDMsMHgwQSwweDY1LDB4OUQsMHgwOCwKLSAgICAgIDB4OTIsMHg4RiwweDQwLDB4NjAsMHg4MCwweDE0LDB4OTAsMHg4QywKLSAgICAgIDB4NjAsMHgxNCwweDRCLDB4MDAsMHg0MCwKLSAgICAgIDB4NDQsMHgwMCwweERCLDB4MDIsMHgzQiwweDAwCi0KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIFhHSTMzMF9ZUGJQcjUyNXBUaW1pbmdbXSA9IHsKKwkweDNFLCAweDExLCAweDA2LCAweDA5LCAweDBiLCAweDBjLCAweDBjLCAweDBjLAorCTB4OTgsIDB4MGEsIDB4MDEsIDB4MGQsIDB4MDYsIDB4MGQsIDB4MDQsIDB4MGEsCisJMHgwNiwgMHgxNCwgMHgwZCwgMHgwNCwgMHgwYSwgMHgwMCwgMHg4NSwgMHgzZiwKKwkweDBjLCAweDUwLCAweGIyLCAweDlmLCAweDE2LCAweDU5LCAweDRmLCAweDEzLAorCTB4YWQsIDB4MTEsIDB4YWQsIDB4MWQsIDB4NDAsIDB4OGEsIDB4M2QsIDB4YjgsCisJMHg1MSwgMHg1ZSwgMHg2MCwgMHg0OSwgMHg3ZCwKKwkweDkyLCAweDBGLCAweDQwLCAweDYwLCAweDgwLCAweDE0LCAweDkwLCAweDhDLAorCTB4NjAsIDB4MTQsIDB4NEIsIDB4NDMsIDB4NDEsCisJMHgxMSwgMHgwMCwgMHhGQywgMHhGRiwgMHgzMiwgMHgwMAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgWEdJMzMwX0hpVFZHcm91cDNEYXRhW10gPQotewotICAgICAgMHgwMCwweDFBLDB4MjIsMHg2MywweDYyLDB4MjIsMHgwOCwweDVGLAotICAgICAgMHgwNSwweDIxLDB4QjIsMHhCMiwweDU1LDB4NzcsMHgyQSwweEE2LAotICAgICAgMHgyNSwweDJGLDB4NDcsMHhGQSwweEM4LDB4RkYsMHg4RSwweDIwLAotICAgICAgMHg4QywweDZFLDB4NjAsMHgyRSwweDU4LDB4NDgsMHg3MiwweDQ0LAotICAgICAgMHg1NiwweDM2LDB4NEYsMHg2RSwweDNGLDB4ODAsMHgwMCwweDgwLAotICAgICAgMHg0RiwweDdGLDB4MDMsMHhBOCwweDdELDB4MjAsMHgxQSwweEE5LAotICAgICAgMHgxNCwweDA1LDB4MDMsMHg3RSwweDY0LDB4MzEsMHgxNCwweDc1LAotICAgICAgMHgxOCwweDA1LDB4MTgsMHgwNSwweDRDLDB4QTgsMHgwMQorc3RhdGljIHVuc2lnbmVkIGNoYXIgWEdJMzMwX1lQYlByNTI1aVRpbWluZ1tdID0geworCTB4MUIsIDB4MjEsIDB4MDMsIDB4MDksIDB4MDUsIDB4MDYsIDB4MEMsIDB4MEMsCisJMHg5NCwgMHg0OSwgMHgwMSwgMHgwQSwgMHgwNiwgMHgwRCwgMHgwNCwgMHgwQSwKKwkweDA2LCAweDE0LCAweDBELCAweDA0LCAweDBBLCAweDAwLCAweDg1LCAweDFCLAorCTB4MEMsIDB4NTAsIDB4MDAsIDB4OTcsIDB4MDAsIDB4REEsIDB4NEEsIDB4MTcsCisJMHg3RCwgMHgwNSwgMHg0QiwgMHgwMCwgMHgwMCwgMHhFMiwgMHgwMCwgMHgwMiwKKwkweDAzLCAweDBBLCAweDY1LCAweDlELCAweDA4LAorCTB4OTIsIDB4OEYsIDB4NDAsIDB4NjAsIDB4ODAsIDB4MTQsIDB4OTAsIDB4OEMsCisJMHg2MCwgMHgxNCwgMHg0QiwgMHgwMCwgMHg0MCwKKwkweDQ0LCAweDAwLCAweERCLCAweDAyLCAweDNCLCAweDAwCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBYR0kzMzBfSGlUVkdyb3VwM1NpbXVbXSA9Ci17Ci0gICAgICAweDAwLDB4MUEsMHgyMiwweDYzLDB4NjIsMHgyMiwweDA4LDB4OTUsCi0gICAgICAweERCLDB4MjAsMHhCOCwweEI4LDB4NTUsMHg0NywweDJBLDB4QTYsCi0gICAgICAweDI1LDB4MkYsMHg0NywweEZBLDB4QzgsMHhGRiwweDhFLDB4MjAsCi0gICAgICAweDhDLDB4NkUsMHg2MCwweDE1LDB4MjYsMHhEMywweEU0LDB4MTEsCi0gICAgICAweDU2LDB4MzYsMHg0RiwweDZFLDB4M0YsMHg4MCwweDAwLDB4ODAsCi0gICAgICAweDY3LDB4MzYsMHgwMSwweDQ3LDB4MEUsMHgxMCwweEJFLDB4QjQsCi0gICAgICAweDAxLDB4MDUsMHgwMywweDdFLDB4NjUsMHgzMSwweDE0LDB4NzUsCi0gICAgICAweDE4LDB4MDUsMHgxOCwweDA1LDB4NEMsMHhBOCwweDAxCitzdGF0aWMgdW5zaWduZWQgY2hhciBYR0kzMzBfSGlUVkdyb3VwM0RhdGFbXSA9IHsKKwkweDAwLCAweDFBLCAweDIyLCAweDYzLCAweDYyLCAweDIyLCAweDA4LCAweDVGLAorCTB4MDUsIDB4MjEsIDB4QjIsIDB4QjIsIDB4NTUsIDB4NzcsIDB4MkEsIDB4QTYsCisJMHgyNSwgMHgyRiwgMHg0NywgMHhGQSwgMHhDOCwgMHhGRiwgMHg4RSwgMHgyMCwKKwkweDhDLCAweDZFLCAweDYwLCAweDJFLCAweDU4LCAweDQ4LCAweDcyLCAweDQ0LAorCTB4NTYsIDB4MzYsIDB4NEYsIDB4NkUsIDB4M0YsIDB4ODAsIDB4MDAsIDB4ODAsCisJMHg0RiwgMHg3RiwgMHgwMywgMHhBOCwgMHg3RCwgMHgyMCwgMHgxQSwgMHhBOSwKKwkweDE0LCAweDA1LCAweDAzLCAweDdFLCAweDY0LCAweDMxLCAweDE0LCAweDc1LAorCTB4MTgsIDB4MDUsIDB4MTgsIDB4MDUsIDB4NEMsIDB4QTgsIDB4MDEKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIFhHSTMzMF9IaVRWR3JvdXAzVGV4dFtdID0KLXsKLSAgICAgIDB4MDAsMHgxQSwweDIyLDB4NjMsMHg2MiwweDIyLDB4MDgsMHhBNywKLSAgICAgIDB4RjUsMHgyMCwweENFLDB4Q0UsMHg1NSwweDQ3LDB4MkEsMHhBNiwKLSAgICAgIDB4MjUsMHgyRiwweDQ3LDB4RkEsMHhDOCwweEZGLDB4OEUsMHgyMCwKLSAgICAgIDB4OEMsMHg2RSwweDYwLDB4MTgsMHgyQywweDBDLDB4MjAsMHgyMiwKLSAgICAgIDB4NTYsMHgzNiwweDRGLDB4NkUsMHgzRiwweDgwLDB4MDAsMHg4MCwKLSAgICAgIDB4OTMsMHgzQywweDAxLDB4NTAsMHgyRiwweDEwLDB4RjQsMHhDQSwKLSAgICAgIDB4MDEsMHgwNSwweDAzLDB4N0UsMHg2NSwweDMxLDB4MTQsMHg3NSwKLSAgICAgIDB4MTgsMHgwNSwweDE4LDB4MDUsMHg0QywweEE4LDB4MDEKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIFhHSTMzMF9IaVRWR3JvdXAzU2ltdVtdID0geworCTB4MDAsIDB4MUEsIDB4MjIsIDB4NjMsIDB4NjIsIDB4MjIsIDB4MDgsIDB4OTUsCisJMHhEQiwgMHgyMCwgMHhCOCwgMHhCOCwgMHg1NSwgMHg0NywgMHgyQSwgMHhBNiwKKwkweDI1LCAweDJGLCAweDQ3LCAweEZBLCAweEM4LCAweEZGLCAweDhFLCAweDIwLAorCTB4OEMsIDB4NkUsIDB4NjAsIDB4MTUsIDB4MjYsIDB4RDMsIDB4RTQsIDB4MTEsCisJMHg1NiwgMHgzNiwgMHg0RiwgMHg2RSwgMHgzRiwgMHg4MCwgMHgwMCwgMHg4MCwKKwkweDY3LCAweDM2LCAweDAxLCAweDQ3LCAweDBFLCAweDEwLCAweEJFLCAweEI0LAorCTB4MDEsIDB4MDUsIDB4MDMsIDB4N0UsIDB4NjUsIDB4MzEsIDB4MTQsIDB4NzUsCisJMHgxOCwgMHgwNSwgMHgxOCwgMHgwNSwgMHg0QywgMHhBOCwgMHgwMQogfTsKIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgWEdJMzMwX1JlbjUyNXBHcm91cDNbXSA9Ci17Ci0gIDB4MDAsMHgxNCwweDE1LDB4MjUsMHg1NSwweDE1LDB4MGIsMHgxMywKLSAgMHhCMSwweDQxLDB4NjIsMHg2MiwweEZGLDB4RjQsMHg0NSwweGE2LAotICAweDI1LDB4MkYsMHg2NywweEY2LDB4YmYsMHhGRiwweDhFLDB4MjAsCi0gIDB4QUMsMHhEQSwweDYwLDB4RmUsMHg2QSwweDlBLDB4MDYsMHgxMCwKLSAgMHhkMSwweDA0LDB4MTgsMHgwYSwweEZGLDB4ODAsMHgwMCwweDgwLAotICAweDNjLDB4NzcsMHgwMCwweEVGLDB4RTAsMHgxMCwweEIwLDB4RTAsCi0gIDB4MTAsMHg0RiwweDBGLDB4MEYsMHgwNSwweDBGLDB4MDgsMHg2RSwKLSAgMHgxYSwweDFGLDB4MjUsMHgyYSwweDRDLDB4QUEsMHgwMQorc3RhdGljIHVuc2lnbmVkIGNoYXIgWEdJMzMwX0hpVFZHcm91cDNUZXh0W10gPSB7CisJMHgwMCwgMHgxQSwgMHgyMiwgMHg2MywgMHg2MiwgMHgyMiwgMHgwOCwgMHhBNywKKwkweEY1LCAweDIwLCAweENFLCAweENFLCAweDU1LCAweDQ3LCAweDJBLCAweEE2LAorCTB4MjUsIDB4MkYsIDB4NDcsIDB4RkEsIDB4QzgsIDB4RkYsIDB4OEUsIDB4MjAsCisJMHg4QywgMHg2RSwgMHg2MCwgMHgxOCwgMHgyQywgMHgwQywgMHgyMCwgMHgyMiwKKwkweDU2LCAweDM2LCAweDRGLCAweDZFLCAweDNGLCAweDgwLCAweDAwLCAweDgwLAorCTB4OTMsIDB4M0MsIDB4MDEsIDB4NTAsIDB4MkYsIDB4MTAsIDB4RjQsIDB4Q0EsCisJMHgwMSwgMHgwNSwgMHgwMywgMHg3RSwgMHg2NSwgMHgzMSwgMHgxNCwgMHg3NSwKKwkweDE4LCAweDA1LCAweDE4LCAweDA1LCAweDRDLCAweEE4LCAweDAxCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBYR0kzMzBfUmVuNzUwcEdyb3VwM1tdID0KLXsKLSAgMHgwMCwweDE0LDB4MTUsMHgyNSwweDU1LDB4MTUsMHgwYiwweDdhLAotICAweDU0LDB4NDEsMHhFNywweEU3LDB4RkYsMHhGNCwweDQ1LDB4YTYsCi0gIDB4MjUsMHgyRiwweDY3LDB4RjYsMHhiZiwweEZGLDB4OEUsMHgyMCwKLSAgMHhBQywweDZBLDB4NjAsMHgyYiwweDUyLDB4Q0QsMHg2MSwweDEwLAotICAweDUxLDB4MDQsMHgxOCwweDBhLDB4MUYsMHg4MCwweDAwLDB4ODAsCi0gIDB4RkYsMHhBNCwweDA0LDB4MkIsMHg5NCwweDIxLDB4NzIsMHg5NCwKLSAgMHgyNiwweDA1LDB4MDEsMHgwRiwweGVkLDB4MEYsMHgwQSwweDY0LAotICAweDE4LDB4MUQsMHgyMywweDI4LDB4NEMsMHhBQSwweDAxCitzdGF0aWMgdW5zaWduZWQgY2hhciBYR0kzMzBfUmVuNTI1cEdyb3VwM1tdID0geworCTB4MDAsIDB4MTQsIDB4MTUsIDB4MjUsIDB4NTUsIDB4MTUsIDB4MGIsIDB4MTMsCisJMHhCMSwgMHg0MSwgMHg2MiwgMHg2MiwgMHhGRiwgMHhGNCwgMHg0NSwgMHhhNiwKKwkweDI1LCAweDJGLCAweDY3LCAweEY2LCAweGJmLCAweEZGLCAweDhFLCAweDIwLAorCTB4QUMsIDB4REEsIDB4NjAsIDB4RmUsIDB4NkEsIDB4OUEsIDB4MDYsIDB4MTAsCisJMHhkMSwgMHgwNCwgMHgxOCwgMHgwYSwgMHhGRiwgMHg4MCwgMHgwMCwgMHg4MCwKKwkweDNjLCAweDc3LCAweDAwLCAweEVGLCAweEUwLCAweDEwLCAweEIwLCAweEUwLAorCTB4MTAsIDB4NEYsIDB4MEYsIDB4MEYsIDB4MDUsIDB4MEYsIDB4MDgsIDB4NkUsCisJMHgxYSwgMHgxRiwgMHgyNSwgMHgyYSwgMHg0QywgMHhBQSwgMHgwMQorfTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgWEdJMzMwX1Jlbjc1MHBHcm91cDNbXSA9IHsKKwkweDAwLCAweDE0LCAweDE1LCAweDI1LCAweDU1LCAweDE1LCAweDBiLCAweDdhLAorCTB4NTQsIDB4NDEsIDB4RTcsIDB4RTcsIDB4RkYsIDB4RjQsIDB4NDUsIDB4YTYsCisJMHgyNSwgMHgyRiwgMHg2NywgMHhGNiwgMHhiZiwgMHhGRiwgMHg4RSwgMHgyMCwKKwkweEFDLCAweDZBLCAweDYwLCAweDJiLCAweDUyLCAweENELCAweDYxLCAweDEwLAorCTB4NTEsIDB4MDQsIDB4MTgsIDB4MGEsIDB4MUYsIDB4ODAsIDB4MDAsIDB4ODAsCisJMHhGRiwgMHhBNCwgMHgwNCwgMHgyQiwgMHg5NCwgMHgyMSwgMHg3MiwgMHg5NCwKKwkweDI2LCAweDA1LCAweDAxLCAweDBGLCAweGVkLCAweDBGLCAweDBBLCAweDY0LAorCTB4MTgsIDB4MUQsIDB4MjMsIDB4MjgsIDB4NEMsIDB4QUEsIDB4MDEKIH07CiAKICNpZiAwCi1zdGF0aWMgc3RydWN0IFhHSV9QYW5lbERlbGF5VGJsU3RydWN0IFhHSTMzMF9QYW5lbERlbGF5VGJsW10gPQotewote3sweDAwLDB4MDB9fSwKLXt7MHgwMCwweDAwfX0sCi17ezB4MDAsMHgwMH19LAote3sweDAwLDB4MDB9fSwKLXt7MHgwMCwweDAwfX0sCi17ezB4MDAsMHgwMH19LAote3sweDAwLDB4MDB9fSwKLXt7MHgwMCwweDAwfX0sCi17ezB4MDAsMHgwMH19LAote3sweDAwLDB4MDB9fSwKLXt7MHgwMCwweDAwfX0sCi17ezB4MDAsMHgwMH19LAote3sweDAwLDB4MDB9fSwKLXt7MHgwMCwweDAwfX0sCi17ezB4MDAsMHgwMH19LAote3sweDAwLDB4MDB9fQorc3RhdGljIHN0cnVjdCBYR0lfUGFuZWxEZWxheVRibFN0cnVjdCBYR0kzMzBfUGFuZWxEZWxheVRibFtdID0geworCXsgezB4MDAsIDB4MDB9IH0sCisJeyB7MHgwMCwgMHgwMH0gfSwKKwl7IHsweDAwLCAweDAwfSB9LAorCXsgezB4MDAsIDB4MDB9IH0sCisJeyB7MHgwMCwgMHgwMH0gfSwKKwl7IHsweDAwLCAweDAwfSB9LAorCXsgezB4MDAsIDB4MDB9IH0sCisJeyB7MHgwMCwgMHgwMH0gfSwKKwl7IHsweDAwLCAweDAwfSB9LAorCXsgezB4MDAsIDB4MDB9IH0sCisJeyB7MHgwMCwgMHgwMH0gfSwKKwl7IHsweDAwLCAweDAwfSB9LAorCXsgezB4MDAsIDB4MDB9IH0sCisJeyB7MHgwMCwgMHgwMH0gfSwKKwl7IHsweDAwLCAweDAwfSB9LAorCXsgezB4MDAsIDB4MDB9IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0kzMzBfTFZEUzMyMHg0ODBEYXRhXzFbXSA9Ci17Ci0gezg0OCwgNDMzLDQwMCw1MjV9LAotIHs4NDgsIDM4OSw0MDAsNTI1fSwKLSB7ODQ4LCA0MzMsNDAwLDUyNX0sCi0gezg0OCwgMzg5LDQwMCw1MjV9LAotIHs4NDgsIDUxOCw0MDAsIDUyNX0sCi0gezEwNTYsIDYyOCw0MDAsNTI1fSwKLSB7NDAwLCA1MjUsNDAwLDUyNX0sCi0gezgwMCwgNDQ5LDEwMDAsIDY0NH0sCi0gezgwMCwgNTI1LDEwMDAsIDYzNX0KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0kzMzBfTFZEUzMyMHg0ODBEYXRhXzFbXSA9IHsKKwl7ODQ4LCAgNDMzLCA0MDAsICA1MjV9LAorCXs4NDgsICAzODksIDQwMCwgIDUyNX0sCisJezg0OCwgIDQzMywgNDAwLCAgNTI1fSwKKwl7ODQ4LCAgMzg5LCA0MDAsICA1MjV9LAorCXs4NDgsICA1MTgsIDQwMCwgIDUyNX0sCisJezEwNTYsIDYyOCwgNDAwLCAgNTI1fSwKKwl7NDAwLCAgNTI1LCA0MDAsICA1MjV9LAorCXs4MDAsICA0NDksIDEwMDAsIDY0NH0sCisJezgwMCwgIDUyNSwgMTAwMCwgNjM1fQogfTsKIAotc3RhdGljIHN0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgIFhHSTMzMF9MVkRTODAweDYwMERhdGFfMVtdID0KLXsKLSB7ODQ4LCA0MzMsMTA2MCwgNjI5fSwKLSB7ODQ4LCAzODksMTA2MCwgNjI5fSwKLSB7ODQ4LCA0MzMsMTA2MCwgNjI5fSwKLSB7ODQ4LCAzODksMTA2MCwgNjI5fSwKLSB7ODQ4LCA1MTgsMTA2MCwgNjI5fSwKLSB7MTA1NiwgNjI4LDEwNTYsIDYyOH0sCi0gezEwNTYsIDYyOCwxMDU2LCA2Mjh9LAotIHs4MDAsIDQ0OSwxMDAwLCA2NDR9LAotIHs4MDAsIDUyNSwxMDAwLCA2MzV9CitzdGF0aWMgc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJMzMwX0xWRFM4MDB4NjAwRGF0YV8xW10gPSB7CisJezg0OCwgIDQzMywgMTA2MCwgNjI5fSwKKwl7ODQ4LCAgMzg5LCAxMDYwLCA2Mjl9LAorCXs4NDgsICA0MzMsIDEwNjAsIDYyOX0sCisJezg0OCwgIDM4OSwgMTA2MCwgNjI5fSwKKwl7ODQ4LCAgNTE4LCAxMDYwLCA2Mjl9LAorCXsxMDU2LCA2MjgsIDEwNTYsIDYyOH0sCisJezEwNTYsIDYyOCwgMTA1NiwgNjI4fSwKKwl7ODAwLCAgNDQ5LCAxMDAwLCA2NDR9LAorCXs4MDAsICA1MjUsIDEwMDAsIDYzNX0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0kzMzBfTFZEUzgwMHg2MDBEYXRhXzJbXSA9Ci17Ci0gezEwNTYsIDYyOCwxMDU2LCA2Mjh9LAotIHsxMDU2LCA2MjgsMTA1NiwgNjI4fSwKLSB7MTA1NiwgNjI4LDEwNTYsIDYyOH0sCi0gezEwNTYsIDYyOCwxMDU2LCA2Mjh9LAotIHsxMDU2LCA2MjgsMTA1NiwgNjI4fSwKLSB7MTA1NiwgNjI4LDEwNTYsIDYyOH0sCi0gezEwNTYsIDYyOCwxMDU2LCA2Mjh9LAotIHs4MDAsIDQ0OSwxMDAwLCA2NDR9LAotIHs4MDAsIDUyNSwxMDAwLCA2MzV9CitzdGF0aWMgc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJMzMwX0xWRFM4MDB4NjAwRGF0YV8yW10gPSB7CisJezEwNTYsIDYyOCwgMTA1NiwgNjI4fSwKKwl7MTA1NiwgNjI4LCAxMDU2LCA2Mjh9LAorCXsxMDU2LCA2MjgsIDEwNTYsIDYyOH0sCisJezEwNTYsIDYyOCwgMTA1NiwgNjI4fSwKKwl7MTA1NiwgNjI4LCAxMDU2LCA2Mjh9LAorCXsxMDU2LCA2MjgsIDEwNTYsIDYyOH0sCisJezEwNTYsIDYyOCwgMTA1NiwgNjI4fSwKKwl7ODAwLCAgNDQ5LCAxMDAwLCA2NDR9LAorCXs4MDAsICA1MjUsIDEwMDAsIDYzNX0KIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgIFhHSV9MVkRTMTAyNHg3NjhEYXRhXzFbXSA9Ci17Ci0geyA5NjAgLCA0MzggLCAxMzQ0ICwgODA2IH0gLAkvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KLSB7IDk2MCAsIDM4OCAsIDEzNDQgLCA4MDYgfSAsCS8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCi0geyAxMDQwLCA0MzggLCAxMzQ0ICwgODA2IH0gLAkvKiAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLwotIHsgMTA0MCwgMzg4ICwgMTM0NCAsIDgwNiB9ICwJLyogMDMgKDcyMHgzNTApICovCi0geyA5NjAgLCA1MTggLCAxMzQ0ICwgODA2IH0gLAkvKiAwNCAoMzIweDI0MCw2NDB4NDgwKSAqLwotIHsxMTIwICwgNjM4ICwgMTM0NCAsIDgwNiB9ICwJLyogMDUgKDQwMHgzMDAsODAweDYwMCkgKi8KLSB7MTM0NCAsIDgwNiAsIDEzNDQgLCA4MDYgfQkvKiAwNiAoNTEyeDM4NCwxMDI0eDc2OCkgKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0lfTFZEUzEwMjR4NzY4RGF0YV8xW10gPSB7CisJeyA5NjAsIDQzOCwgMTM0NCwgODA2fSwJLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCisJeyA5NjAsIDM4OCwgMTM0NCwgODA2fSwJLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KKwl7MTA0MCwgNDM4LCAxMzQ0LCA4MDZ9LAkvKiAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLworCXsxMDQwLCAzODgsIDEzNDQsIDgwNn0sCS8qIDAzICg3MjB4MzUwKSAqLworCXsgOTYwLCA1MTgsIDEzNDQsIDgwNn0sCS8qIDA0ICgzMjB4MjQwLDY0MHg0ODApICovCisJezExMjAsIDYzOCwgMTM0NCwgODA2fSwJLyogMDUgKDQwMHgzMDAsODAweDYwMCkgKi8KKwl7MTM0NCwgODA2LCAxMzQ0LCA4MDZ9CS8qIDA2ICg1MTJ4Mzg0LDEwMjR4NzY4KSAqLwogfTsKIAogCi1zdGF0aWMgc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJX0xWRFMxMDI0eDc2OERhdGFfMltdID0KLXsKLSB7MTM0NCwgODA2LDEzNDQsIDgwNn0sCi0gezEzNDQsIDgwNiwxMzQ0LCA4MDZ9LAotIHsxMzQ0LCA4MDYsMTM0NCwgODA2fSwKLSB7MTM0NCwgODA2LDEzNDQsIDgwNn0sCi0gezEzNDQsIDgwNiwxMzQ0LCA4MDZ9LAotIHsxMzQ0LCA4MDYsMTM0NCwgODA2fSwKLSB7MTM0NCwgODA2LDEzNDQsIDgwNn0sCi0gezgwMCwgNDQ5LDEyODAsIDgwMX0sCi0gezgwMCwgNTI1LDEyODAsIDgxM30KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0lfTFZEUzEwMjR4NzY4RGF0YV8yW10gPSB7CisJezEzNDQsIDgwNiwgMTM0NCwgODA2fSwKKwl7MTM0NCwgODA2LCAxMzQ0LCA4MDZ9LAorCXsxMzQ0LCA4MDYsIDEzNDQsIDgwNn0sCisJezEzNDQsIDgwNiwgMTM0NCwgODA2fSwKKwl7MTM0NCwgODA2LCAxMzQ0LCA4MDZ9LAorCXsxMzQ0LCA4MDYsIDEzNDQsIDgwNn0sCisJezEzNDQsIDgwNiwgMTM0NCwgODA2fSwKKwl7ODAwLCAgNDQ5LCAxMjgwLCA4MDF9LAorCXs4MDAsICA1MjUsIDEyODAsIDgxM30KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0lfTFZEUzEyODB4MTAyNERhdGFfMVtdID0KLXsKLSB7MTA0OCwgNDQyLDE2ODgsIDEwNjZ9LAotIHsxMDQ4LCAzOTIsMTY4OCwgMTA2Nn0sCi0gezEwNDgsIDQ0MiwxNjg4LCAxMDY2fSwKLSB7MTA0OCwgMzkyLDE2ODgsIDEwNjZ9LAotIHsxMDQ4LCA1MjIsMTY4OCwgMTA2Nn0sCi0gezEyMDgsIDY0MiwxNjg4LCAxMDY2fSwKLSB7MTQzMiwgODEwLDE2ODgsIDEwNjZ9LAotIHsxNjg4LCAxMDY2LDE2ODgsIDEwNjZ9CitzdGF0aWMgc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJX0xWRFMxMjgweDEwMjREYXRhXzFbXSA9IHsKKwl7MTA0OCwgNDQyLCAgMTY4OCwgMTA2Nn0sCisJezEwNDgsIDM5MiwgIDE2ODgsIDEwNjZ9LAorCXsxMDQ4LCA0NDIsICAxNjg4LCAxMDY2fSwKKwl7MTA0OCwgMzkyLCAgMTY4OCwgMTA2Nn0sCisJezEwNDgsIDUyMiwgIDE2ODgsIDEwNjZ9LAorCXsxMjA4LCA2NDIsICAxNjg4LCAxMDY2fSwKKwl7MTQzMiwgODEwLCAgMTY4OCwgMTA2Nn0sCisJezE2ODgsIDEwNjYsIDE2ODgsIDEwNjZ9CiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJX0xWRFMxMjgweDEwMjREYXRhXzJbXSA9Ci17Ci0gezEzNDQsIDgwNiwxMzQ0LCA4MDZ9LAotIHsxMzQ0LCA4MDYsMTM0NCwgODA2fSwKLSB7MTM0NCwgODA2LDEzNDQsIDgwNn0sCi0gezEzNDQsIDgwNiwxMzQ0LCA4MDZ9LAotIHsxMzQ0LCA4MDYsMTM0NCwgODA2fSwKLSB7MTM0NCwgODA2LDEzNDQsIDgwNn0sCi0gezEzNDQsIDgwNiwxMzQ0LCA4MDZ9LAotIHs4MDAsIDQ0OSwxMjgwLCA4MDF9LAotIHs4MDAsIDUyNSwxMjgwLCA4MTN9CitzdGF0aWMgc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJX0xWRFMxMjgweDEwMjREYXRhXzJbXSA9IHsKKwl7MTM0NCwgODA2LCAxMzQ0LCA4MDZ9LAorCXsxMzQ0LCA4MDYsIDEzNDQsIDgwNn0sCisJezEzNDQsIDgwNiwgMTM0NCwgODA2fSwKKwl7MTM0NCwgODA2LCAxMzQ0LCA4MDZ9LAorCXsxMzQ0LCA4MDYsIDEzNDQsIDgwNn0sCisJezEzNDQsIDgwNiwgMTM0NCwgODA2fSwKKwl7MTM0NCwgODA2LCAxMzQ0LCA4MDZ9LAorCXs4MDAsICA0NDksIDEyODAsIDgwMX0sCisJezgwMCwgIDUyNSwgMTI4MCwgODEzfQogfTsKIC8qCi1zdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0lfTFZEUzEyODB4NzY4RGF0YV8xW10gPQotewotIHs3NjgsNDM4LDE0MDgsODA2fSwKLSB7NzY4LDM4OCwxNDA4LDgwNn0sCi0gezc2OCw0MzgsMTQwOCw4MDZ9LAotIHs3NjgsMzg4LDE0MDgsODA2fSwKLSB7NzY4LDUxOCwxNDA4LDgwNn0sCi0gezkyOCw2MzgsMTQwOCw4MDZ9LAotIHsxNDA4LDgwNiwxNDA4LDgwNn0sCi0gezE0MDgsODA2LDE0MDgsODA2fSwKLSB7MTQwOCw4MDYsMTQwOCw4MDZ9CitzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0lfTFZEUzEyODB4NzY4RGF0YV8xW10gPSB7CisJezc2OCwgIDQzOCwgMTQwOCwgODA2fSwKKwl7NzY4LCAgMzg4LCAxNDA4LCA4MDZ9LAorCXs3NjgsICA0MzgsIDE0MDgsIDgwNn0sCisJezc2OCwgIDM4OCwgMTQwOCwgODA2fSwKKwl7NzY4LCAgNTE4LCAxNDA4LCA4MDZ9LAorCXs5MjgsICA2MzgsIDE0MDgsIDgwNn0sCisJezE0MDgsIDgwNiwgMTQwOCwgODA2fSwKKwl7MTQwOCwgODA2LCAxNDA4LCA4MDZ9LAorCXsxNDA4LCA4MDYsIDE0MDgsIDgwNn0KIH07CiAKLXN0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgIFhHSV9MVkRTMTI4MHg3NjhEYXRhXzJbXSA9Ci17Ci0gezE0MDgsIDgwNiwxNDA4LCA4MDZ9LAotIHsxNDA4LCA4MDYsMTQwOCwgODA2fSwKLSB7MTQwOCwgODA2LDE0MDgsIDgwNn0sCi0gezE0MDgsIDgwNiwxNDA4LCA4MDZ9LAotIHsxNDA4LCA4MDYsMTQwOCwgODA2fSwKLSB7MTQwOCwgODA2LDE0MDgsIDgwNn0sCi0gezE0MDgsIDgwNiwxNDA4LCA4MDZ9LAotIHsxNDA4LCA4MDYsMTQwOCwgODA2fSwKLSB7MTQwOCwgODA2LDE0MDgsIDgwNn0KK3N0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgIFhHSV9MVkRTMTI4MHg3NjhEYXRhXzJbXSA9IHsKKwl7MTQwOCwgODA2LCAxNDA4LCA4MDZ9LAorCXsxNDA4LCA4MDYsIDE0MDgsIDgwNn0sCisJezE0MDgsIDgwNiwgMTQwOCwgODA2fSwKKwl7MTQwOCwgODA2LCAxNDA4LCA4MDZ9LAorCXsxNDA4LCA4MDYsIDE0MDgsIDgwNn0sCisJezE0MDgsIDgwNiwgMTQwOCwgODA2fSwKKwl7MTQwOCwgODA2LCAxNDA4LCA4MDZ9LAorCXsxNDA4LCA4MDYsIDE0MDgsIDgwNn0sCisJezE0MDgsIDgwNiwgMTQwOCwgODA2fQogfTsKIAotc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJX0xWRFMxMjgweDc2OE5EYXRhXzFbXSA9Ci17Ci0gezcwNCwgNDM4LDEzNDQsIDgwNn0sCi0gezcwNCwgMzg4LDEzNDQsIDgwNn0sCi0gezcwNCwgNDM4LDEzNDQsIDgwNn0sCi0gezcwNCwgMzg4LDEzNDQsIDgwNn0sCi0gezcwNCwgNTE4LDEzNDQsIDgwNn0sCi0gezg2NCwgNjM4LDEzNDQsIDgwNn0sCi0gezEwODgsIDgwNiwxMzQ0LCA4MDZ9LAotIHsxMzQ0LCA4MDYsMTM0NCwgODA2fSwKLSB7MTM0NCwgODA2LDEzNDQsIDgwNn0KK3N0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgIFhHSV9MVkRTMTI4MHg3NjhORGF0YV8xW10gPSB7CisJezcwNCwgIDQzOCwgMTM0NCwgODA2fSwKKwl7NzA0LCAgMzg4LCAxMzQ0LCA4MDZ9LAorCXs3MDQsICA0MzgsIDEzNDQsIDgwNn0sCisJezcwNCwgIDM4OCwgMTM0NCwgODA2fSwKKwl7NzA0LCAgNTE4LCAxMzQ0LCA4MDZ9LAorCXs4NjQsICA2MzgsIDEzNDQsIDgwNn0sCisJezEwODgsIDgwNiwgMTM0NCwgODA2fSwKKwl7MTM0NCwgODA2LCAxMzQ0LCA4MDZ9LAorCXsxMzQ0LCA4MDYsIDEzNDQsIDgwNn0KIH07CiAKLXN0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgIFhHSV9MVkRTMTI4MHg3NjhORGF0YV8yW10gPQotewotIHsxMzQ0LCA4MDYsMTM0NCwgODA2fSwKLSB7MTM0NCwgODA2LDEzNDQsIDgwNn0sCi0gezEzNDQsIDgwNiwxMzQ0LCA4MDZ9LAotIHsxMzQ0LCA4MDYsMTM0NCwgODA2fSwKLSB7MTM0NCwgODA2LDEzNDQsIDgwNn0sCi0gezEzNDQsIDgwNiwxMzQ0LCA4MDZ9LAotIHsxMzQ0LCA4MDYsMTM0NCwgODA2fSwKLSB7MTM0NCwgODA2LDEzNDQsIDgwNn0sCi0gezEzNDQsIDgwNiwxMzQ0LCA4MDZ9CitzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0lfTFZEUzEyODB4NzY4TkRhdGFfMltdID0geworCXsxMzQ0LCA4MDYsIDEzNDQsIDgwNn0sCisJezEzNDQsIDgwNiwgMTM0NCwgODA2fSwKKwl7MTM0NCwgODA2LCAxMzQ0LCA4MDZ9LAorCXsxMzQ0LCA4MDYsIDEzNDQsIDgwNn0sCisJezEzNDQsIDgwNiwgMTM0NCwgODA2fSwKKwl7MTM0NCwgODA2LCAxMzQ0LCA4MDZ9LAorCXsxMzQ0LCA4MDYsIDEzNDQsIDgwNn0sCisJezEzNDQsIDgwNiwgMTM0NCwgODA2fSwKKwl7MTM0NCwgODA2LCAxMzQ0LCA4MDZ9CiB9OwogCi1zdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0lfTFZEUzEyODB4NzY4U0RhdGFfMVtdID0KLXsKLSB7MTA0OCw0MzgsMTY4OCw4MDZ9LAotIHsxMDQ4LDM4OCwxNjg4LDgwNn0sCi0gezExNDgsNDM4LDE2ODgsODA2fSwKLSB7MTE0OCwzODgsMTY4OCw4MDZ9LAotIHsxMDQ4LDUxOCwxNjg4LDgwNn0sCi0gezEyMDgsNjM4LDE2ODgsODA2fSwKLSB7MTQzMiw4MDYsMTY4OCw4MDZ9LAotIHsxNjg4LDgwNiwxNjg4LDgwNn0sCi0gezE2ODgsODA2LDE2ODgsODA2fQorc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJX0xWRFMxMjgweDc2OFNEYXRhXzFbXSA9IHsKKwl7MTA0OCwgNDM4LCAxNjg4LCA4MDZ9LAorCXsxMDQ4LCAzODgsIDE2ODgsIDgwNn0sCisJezExNDgsIDQzOCwgMTY4OCwgODA2fSwKKwl7MTE0OCwgMzg4LCAxNjg4LCA4MDZ9LAorCXsxMDQ4LCA1MTgsIDE2ODgsIDgwNn0sCisJezEyMDgsIDYzOCwgMTY4OCwgODA2fSwKKwl7MTQzMiwgODA2LCAxNjg4LCA4MDZ9LAorCXsxNjg4LCA4MDYsIDE2ODgsIDgwNn0sCisJezE2ODgsIDgwNiwgMTY4OCwgODA2fQogfTsKIAotc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJX0xWRFMxMjgweDc2OFNEYXRhXzJbXSA9Ci17Ci0gezE2ODgsODA2LDE2ODgsODA2fSwKLSB7MTY4OCw4MDYsMTY4OCw4MDZ9LAotIHsxNjg4LDgwNiwxNjg4LDgwNn0sCi0gezE2ODgsODA2LDE2ODgsODA2fSwKLSB7MTY4OCw4MDYsMTY4OCw4MDZ9LAotIHsxNjg4LDgwNiwxNjg4LDgwNn0sCi0gezE2ODgsODA2LDE2ODgsODA2fSwKLSB7MTY4OCw4MDYsMTY4OCw4MDZ9LAotIHsxNjg4LDgwNiwxNjg4LDgwNn0KK3N0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgIFhHSV9MVkRTMTI4MHg3NjhTRGF0YV8yW10gPSB7CisJezE2ODgsIDgwNiwgMTY4OCwgODA2fSwKKwl7MTY4OCwgODA2LCAxNjg4LCA4MDZ9LAorCXsxNjg4LCA4MDYsIDE2ODgsIDgwNn0sCisJezE2ODgsIDgwNiwgMTY4OCwgODA2fSwKKwl7MTY4OCwgODA2LCAxNjg4LCA4MDZ9LAorCXsxNjg4LCA4MDYsIDE2ODgsIDgwNn0sCisJezE2ODgsIDgwNiwgMTY4OCwgODA2fSwKKwl7MTY4OCwgODA2LCAxNjg4LCA4MDZ9LAorCXsxNjg4LCA4MDYsIDE2ODgsIDgwNn0KIH07CiAqLwotc3RhdGljIHN0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgIFhHSV9MVkRTMTQwMHgxMDUwRGF0YV8xW10gPQotewotIHs5MjgsNDE2LDE2ODgsMTA2Nn0sCi0gezkyOCwzNjYsMTY4OCwxMDY2fSwKLSB7OTI4LDQxNiwxNjg4LDEwNjZ9LAotIHs5MjgsMzY2LDE2ODgsMTA2Nn0sCi0gezkyOCw0OTYsMTY4OCwxMDY2fSwKLSB7MTA4OCw2MTYsMTY4OCwxMDY2fSwKLSB7MTMxMiw3ODQsMTY4OCwxMDY2fSwKLSB7MTU2OCwxMDQwLDE2ODgsMTA2Nn0sCi0gezE2ODgsMTA2NiwxNjg4LDEwNjZ9CitzdGF0aWMgc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJX0xWRFMxNDAweDEwNTBEYXRhXzFbXSA9IHsKKwl7OTI4LCAgIDQxNiwgMTY4OCwgMTA2Nn0sCisJezkyOCwgICAzNjYsIDE2ODgsIDEwNjZ9LAorCXs5MjgsICAgNDE2LCAxNjg4LCAxMDY2fSwKKwl7OTI4LCAgIDM2NiwgMTY4OCwgMTA2Nn0sCisJezkyOCwgICA0OTYsIDE2ODgsIDEwNjZ9LAorCXsxMDg4LCAgNjE2LCAxNjg4LCAxMDY2fSwKKwl7MTMxMiwgIDc4NCwgMTY4OCwgMTA2Nn0sCisJezE1NjgsIDEwNDAsIDE2ODgsIDEwNjZ9LAorCXsxNjg4LCAxMDY2LCAxNjg4LCAxMDY2fQogfTsKIAotc3RhdGljIHN0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgIFhHSV9MVkRTMTQwMHgxMDUwRGF0YV8yW10gPQotewotIHsxNjg4LDEwNjYsMTY4OCwxMDY2fSwKLSB7MTY4OCwxMDY2LDE2ODgsMTA2Nn0sCi0gezE2ODgsMTA2NiwxNjg4LDEwNjZ9LAotIHsxNjg4LDEwNjYsMTY4OCwxMDY2fSwKLSB7MTY4OCwxMDY2LDE2ODgsMTA2Nn0sCi0gezE2ODgsMTA2NiwxNjg4LDEwNjZ9LAotIHsxNjg4LDEwNjYsMTY4OCwxMDY2fSwKLSB7MTY4OCwxMDY2LDE2ODgsMTA2Nn0sCi0gezE2ODgsMTA2NiwxNjg4LDEwNjZ9CitzdGF0aWMgc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJX0xWRFMxNDAweDEwNTBEYXRhXzJbXSA9IHsKKwl7MTY4OCwgMTA2NiwgMTY4OCwgMTA2Nn0sCisJezE2ODgsIDEwNjYsIDE2ODgsIDEwNjZ9LAorCXsxNjg4LCAxMDY2LCAxNjg4LCAxMDY2fSwKKwl7MTY4OCwgMTA2NiwgMTY4OCwgMTA2Nn0sCisJezE2ODgsIDEwNjYsIDE2ODgsIDEwNjZ9LAorCXsxNjg4LCAxMDY2LCAxNjg4LCAxMDY2fSwKKwl7MTY4OCwgMTA2NiwgMTY4OCwgMTA2Nn0sCisJezE2ODgsIDEwNjYsIDE2ODgsIDEwNjZ9LAorCXsxNjg4LCAxMDY2LCAxNjg4LCAxMDY2fQogfTsKIAotc3RhdGljIHN0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxNjAweDEyMDBEYXRhXzFbXSA9Ci17ICAgICAgLyogOztbeWNjaGVuXSAxMi8wNS8wMiBMQ0RIVHhMQ0RWVD0yMDQ4eDEzMjAgKi8KLSAgICAgICAgeyAgICAgICAgMTA4OCw1MjAsMjA0OCwxMzIwICAgICAgfSwvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KLSAgICAgICAgeyAgICAgICAgMTA4OCw0NzAsMjA0OCwxMzIwICAgICAgfSwvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwotICAgICAgICB7ICAgICAgICAxMDg4LDUyMCwyMDQ4LDEzMjAgICAgICB9LC8qIDAyICgzNjB4NDAwLDcyMHg0MDApICovCi0gICAgICAgIHsgICAgICAgIDEwODgsNDcwLDIwNDgsMTMyMCAgICAgIH0sLyogMDMgKDcyMHgzNTApICovCi0gICAgICAgIHsgICAgICAgIDEwODgsNjAwLDIwNDgsMTMyMCAgICAgIH0sLyogMDQgKDMyMHgyNDAsNjQweDQ4MCkgKi8KLSAgICAgICAgeyAgICAgICAgMTI0OCw3MjAsMjA0OCwxMzIwICAgICAgfSwvKiAwNSAoNDAweDMwMCw4MDB4NjAwKSAqLwotICAgICAgICB7ICAgICAgICAxNDcyLDg4OCwyMDQ4LDEzMjAgICAgICB9LC8qIDA2ICg1MTJ4Mzg0LDEwMjR4NzY4KSAqLwotICAgICAgICB7ICAgICAgICAxNzI4LDExNDQsMjA0OCwxMzIwICAgICB9LC8qIDA3ICg2NDB4NTEyLDEyODB4MTAyNCkgKi8KLSAgICAgICAgeyAgICAgICAgMTg0OCwxMTcwLDIwNDgsMTMyMCAgICAgfSwvKiAwOCAoMTQwMHgxMDUwKSAqLwotICAgICAgICB7ICAgICAgICAyMDQ4LDEzMjAsMjA0OCwxMzIwICAgICB9IC8qIDA5ICgxNjAweDEyMDApICovCisvKiA7O1t5Y2NoZW5dIDEyLzA1LzAyIExDREhUeExDRFZUPTIwNDh4MTMyMCAqLworc3RhdGljIHN0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxNjAweDEyMDBEYXRhXzFbXSA9IHsKKwl7MTA4OCwgNTIwLCAgMjA0OCwgMTMyMH0sIC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLworCXsxMDg4LCA0NzAsICAyMDQ4LCAxMzIwfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KKwl7MTA4OCwgNTIwLCAgMjA0OCwgMTMyMH0sIC8qIDAyICgzNjB4NDAwLDcyMHg0MDApICovCisJezEwODgsIDQ3MCwgIDIwNDgsIDEzMjB9LCAvKiAwMyAoNzIweDM1MCkgKi8KKwl7MTA4OCwgNjAwLCAgMjA0OCwgMTMyMH0sIC8qIDA0ICgzMjB4MjQwLDY0MHg0ODApICovCisJezEyNDgsIDcyMCwgIDIwNDgsIDEzMjB9LCAvKiAwNSAoNDAweDMwMCw4MDB4NjAwKSAqLworCXsxNDcyLCA4ODgsICAyMDQ4LCAxMzIwfSwgLyogMDYgKDUxMngzODQsMTAyNHg3NjgpICovCisJezE3MjgsIDExNDQsIDIwNDgsIDEzMjB9LCAvKiAwNyAoNjQweDUxMiwxMjgweDEwMjQpICovCisJezE4NDgsIDExNzAsIDIwNDgsIDEzMjB9LCAvKiAwOCAoMTQwMHgxMDUwKSAqLworCXsyMDQ4LCAxMzIwLCAyMDQ4LCAxMzIwfSAgLyogMDkgKDE2MDB4MTIwMCkgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTTm9TY2FsaW5nRGF0YVtdID0KLXsKLSAgICAgICAgeyAgICAgICAgODAwLDQ0OSw4MDAsNDQ5ICAgICAgICAgICAgIH0sIC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwotICAgICAgICB7ICAgICAgICA4MDAsNDQ5LDgwMCw0NDkgICAgICAgICAgICAgfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KLSAgICAgICAgeyAgICAgICAgODAwLDQ0OSw4MDAsNDQ5ICAgICAgICAgICAgIH0sIC8qIDAyICgzNjB4NDAwLDcyMHg0MDApICovCi0gICAgICAgIHsgICAgICAgIDgwMCw0NDksODAwLDQ0OSAgICAgICAgICAgICB9LCAvKiAwMyAoNzIweDM1MCkgKi8KLSAgICAgICAgeyAgICAgICAgODAwLDUyNSw4MDAsNTI1ICAgICAgICAgICAgIH0sIC8qIDA0ICg2NDB4NDgweDYwSHopICovCi0gICAgICAgIHsgICAgICAgIDEwNTYsNjI4LDEwNTYsNjI4ICAgICAgICAgICB9LCAvKiAwNSAoODAweDYwMHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgICAxMzQ0LDgwNiwxMzQ0LDgwNiAgICAgICAgICAgfSwgLyogMDYgKDEwMjR4NzY4eDYwSHopICovCi0gICAgICAgIHsgICAgICAgIDE2ODgsMTA2NiwxNjg4LDEwNjYgICAgICAgICB9LCAvKiAwNyAoMTI4MHgxMDI0eDYwSHopICovCi0gICAgICAgIHsgICAgICAgIDE2ODgsMTA2NiwxNjg4LDEwNjYgICAgICAgICB9LCAvKiAwOCAoMTQwMHgxMDUweDYwSHopIDs7W3ljY2hlbl0gMTIvMTkvMDIgKi8KLSAgICAgICAgeyAgICAgICAgMjE2MCwxMjUwLDIxNjAsMTI1MCAgICAgICAgIH0sIC8qIDA5ICgxNjAweDEyMDB4NjBIeikgKi8KLSAgICAgICAgeyAgICAgICAgMTY4OCw4MDYsMTY4OCw4MDYgICAgICAgICAgIH0gIC8qIDBBICgxMjgweDc2OHg2MEh6KSAqLworc3RhdGljIHN0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFNOb1NjYWxpbmdEYXRhW10gPSB7CisJeyA4MDAsICA0NDksICA4MDAsICA0NDl9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KKwl7IDgwMCwgIDQ0OSwgIDgwMCwgIDQ0OX0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCisJeyA4MDAsICA0NDksICA4MDAsICA0NDl9LCAvKiAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLworCXsgODAwLCAgNDQ5LCAgODAwLCAgNDQ5fSwgLyogMDMgKDcyMHgzNTApICovCisJeyA4MDAsICA1MjUsICA4MDAsICA1MjV9LCAvKiAwNCAoNjQweDQ4MHg2MEh6KSAqLworCXsxMDU2LCAgNjI4LCAxMDU2LCAgNjI4fSwgLyogMDUgKDgwMHg2MDB4NjBIeikgKi8KKwl7MTM0NCwgIDgwNiwgMTM0NCwgIDgwNn0sIC8qIDA2ICgxMDI0eDc2OHg2MEh6KSAqLworCXsxNjg4LCAxMDY2LCAxNjg4LCAxMDY2fSwgLyogMDcgKDEyODB4MTAyNHg2MEh6KSAqLworCXsxNjg4LCAxMDY2LCAxNjg4LCAxMDY2fSwgLyogMDggKDE0MDB4MTA1MHg2MEh6KSA7O1t5Y2NoZW5dIDEyLzE5LzAyICovCisJezIxNjAsIDEyNTAsIDIxNjAsIDEyNTB9LCAvKiAwOSAoMTYwMHgxMjAweDYwSHopICovCisJezE2ODgsICA4MDYsIDE2ODgsICA4MDZ9ICAvKiAwQSAoMTI4MHg3Njh4NjBIeikgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTAyNHg3NjhEYXRhXzF4NzVbXSA9Ci17Ci0Jezk2MCw0MzgsMTMxMiw4MDAgIH0sIC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwotICAgICAgICB7OTYwLDM4OCwxMzEyLDgwMCAgfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KLSAgICAgICAgezEwNDAsNDM4LDEzMTIsODAwIH0sIC8qIDAyICgzNjB4NDAwLDcyMHg0MDApICovCi0gICAgICAgIHsxMDQwLDM4OCwxMzEyLDgwMCB9LCAvKiAwMyAoNzIweDM1MCkgKi8KLSAgICAgICAgezkyOCw1MTIsMTMxMiw4MDAgIH0sIC8qIDA0ICgzMjB4MjQwLDY0MHg0ODApICovCi0gICAgICAgIHsxMDg4LDYzMiwxMzEyLDgwMCB9LCAvKiAwNSAoNDAweDMwMCw4MDB4NjAwKSAqLwotICAgICAgICB7MTMxMiw4MDAsMTMxMiw4MDAgfSwgLyogMDYgKDUxMngzODQsMTAyNHg3NjgpICovCitzdGF0aWMgc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCBYR0lfTFZEUzEwMjR4NzY4RGF0YV8xeDc1W10gPSB7CisJeyA5NjAsIDQzOCwgMTMxMiwgODAwfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCisJeyA5NjAsIDM4OCwgMTMxMiwgODAwfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KKwl7MTA0MCwgNDM4LCAxMzEyLCA4MDB9LCAvKiAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLworCXsxMDQwLCAzODgsIDEzMTIsIDgwMH0sIC8qIDAzICg3MjB4MzUwKSAqLworCXsgOTI4LCA1MTIsIDEzMTIsIDgwMH0sIC8qIDA0ICgzMjB4MjQwLDY0MHg0ODApICovCisJezEwODgsIDYzMiwgMTMxMiwgODAwfSwgLyogMDUgKDQwMHgzMDAsODAweDYwMCkgKi8KKwl7MTMxMiwgODAwLCAxMzEyLCA4MDB9LCAvKiAwNiAoNTEyeDM4NCwxMDI0eDc2OCkgKi8KIH07CiAKIAotc3RhdGljIHN0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxMDI0eDc2OERhdGFfMng3NVtdID0KLXsKLSAgICAgICAgezEzMTIsODAwLDEzMTIsODAwfSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KLSAgICAgICAgezEzMTIsODAwLDEzMTIsODAwfSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwotICAgICAgICB7MTMxMiw4MDAsMTMxMiw4MDB9LCAvKiA7IDAyICgzNjB4NDAwLDcyMHg0MDApICovCi0gICAgICAgIHsxMzEyLDgwMCwxMzEyLDgwMH0sIC8qIDsgMDMgKDcyMHgzNTApICovCi0gICAgICAgIHsxMzEyLDgwMCwxMzEyLDgwMH0sIC8qIDsgMDQgKDMyMHgyNDAsNjQweDQ4MCkgKi8KLSAgICAgICAgezEzMTIsODAwLDEzMTIsODAwfSwgLyogOyAwNSAoNDAweDMwMCw4MDB4NjAwKSAqLwotICAgICAgICB7MTMxMiw4MDAsMTMxMiw4MDB9LCAvKiA7IDA2ICg1MTJ4Mzg0LDEwMjR4NzY4KSAqLworc3RhdGljIHN0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxMDI0eDc2OERhdGFfMng3NVtdID0geworCXsxMzEyLCA4MDAsIDEzMTIsIDgwMH0sIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCisJezEzMTIsIDgwMCwgMTMxMiwgODAwfSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLworCXsxMzEyLCA4MDAsIDEzMTIsIDgwMH0sIC8qIDsgMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KKwl7MTMxMiwgODAwLCAxMzEyLCA4MDB9LCAvKiA7IDAzICg3MjB4MzUwKSAqLworCXsxMzEyLCA4MDAsIDEzMTIsIDgwMH0sIC8qIDsgMDQgKDMyMHgyNDAsNjQweDQ4MCkgKi8KKwl7MTMxMiwgODAwLCAxMzEyLCA4MDB9LCAvKiA7IDA1ICg0MDB4MzAwLDgwMHg2MDApICovCisJezEzMTIsIDgwMCwgMTMxMiwgODAwfSwgLyogOyAwNiAoNTEyeDM4NCwxMDI0eDc2OCkgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTI4MHgxMDI0RGF0YV8xeDc1W10gPQotewotICAgICAgICB7MTA0OCw0NDIsMTY4OCwxMDY2ICB9LCAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwotICAgICAgICB7MTA0OCwzOTIsMTY4OCwxMDY2ICB9LCAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCi0gICAgICAgIHsxMTI4LDQ0MiwxNjg4LDEwNjYgIH0sIC8qIDsgMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KLSAgICAgICAgezExMjgsMzkyLDE2ODgsMTA2NiAgfSwgLyogOyAwMyAoNzIweDM1MCkgKi8KLSAgICAgICAgezEwNDgsNTIyLDE2ODgsMTA2NiAgfSwgLyogOyAwNCAoMzIweDI0MCw2NDB4NDgwKSAqLwotICAgICAgICB7MTIwOCw2NDIsMTY4OCwxMDY2ICB9LCAvKiA7IDA1ICg0MDB4MzAwLDgwMHg2MDApICovCi0gICAgICAgIHsxNDMyLDgxMCwxNjg4LDEwNjYgIH0sIC8qIDsgMDYgKDUxMngzODQsMTAyNHg3NjgpICovCi0gICAgICAgIHsxNjg4LDEwNjYsMTY4OCwxMDY2IH0sIC8qIDsgMDY7IDA3ICg2NDB4NTEyLDEyODB4MTAyNCkgKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTI4MHgxMDI0RGF0YV8xeDc1W10gPSB7CisJezEwNDgsICA0NDIsIDE2ODgsIDEwNjYgIH0sIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCisJezEwNDgsICAzOTIsIDE2ODgsIDEwNjYgIH0sIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KKwl7MTEyOCwgIDQ0MiwgMTY4OCwgMTA2NiAgfSwgLyogOyAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLworCXsxMTI4LCAgMzkyLCAxNjg4LCAxMDY2ICB9LCAvKiA7IDAzICg3MjB4MzUwKSAqLworCXsxMDQ4LCAgNTIyLCAxNjg4LCAxMDY2ICB9LCAvKiA7IDA0ICgzMjB4MjQwLDY0MHg0ODApICovCisJezEyMDgsICA2NDIsIDE2ODgsIDEwNjYgIH0sIC8qIDsgMDUgKDQwMHgzMDAsODAweDYwMCkgKi8KKwl7MTQzMiwgIDgxMCwgMTY4OCwgMTA2NiAgfSwgLyogOyAwNiAoNTEyeDM4NCwxMDI0eDc2OCkgKi8KKwl7MTY4OCwgMTA2NiwgMTY4OCwgMTA2NiB9LCAgLyogOyAwNjsgMDcgKDY0MHg1MTIsMTI4MHgxMDI0KSAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxMjgweDEwMjREYXRhXzJ4NzVbXSA9Ci17Ci0gICAgICAgIHsxNjg4LDEwNjYsMTY4OCwxMDY2IH0sIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCi0gICAgICAgIHsxNjg4LDEwNjYsMTY4OCwxMDY2IH0sIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KLSAgICAgICAgezE2ODgsMTA2NiwxNjg4LDEwNjYgfSwgLyogOyAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLwotICAgICAgICB7MTY4OCwxMDY2LDE2ODgsMTA2NiB9LCAvKiA7IDAzICg3MjB4MzUwKSAqLwotICAgICAgICB7MTY4OCwxMDY2LDE2ODgsMTA2NiB9LCAvKiA7IDA0ICgzMjB4MjQwLDY0MHg0ODApICovCi0gICAgICAgIHsxNjg4LDEwNjYsMTY4OCwxMDY2IH0sIC8qIDsgMDUgKDQwMHgzMDAsODAweDYwMCkgKi8KLSAgICAgICAgezE2ODgsMTA2NiwxNjg4LDEwNjYgfSwgLyogOyAwNiAoNTEyeDM4NCwxMDI0eDc2OCkgKi8KLSAgICAgICAgezE2ODgsMTA2NiwxNjg4LDEwNjYgfSwgLyogOyAwNjsgMDcgKDY0MHg1MTIsMTI4MHgxMDI0KSAqLworc3RhdGljIHN0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxMjgweDEwMjREYXRhXzJ4NzVbXSA9IHsKKwl7MTY4OCwgMTA2NiwgMTY4OCwgMTA2NiB9LCAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLworCXsxNjg4LCAxMDY2LCAxNjg4LCAxMDY2IH0sIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KKwl7MTY4OCwgMTA2NiwgMTY4OCwgMTA2NiB9LCAvKiA7IDAyICgzNjB4NDAwLDcyMHg0MDApICovCisJezE2ODgsIDEwNjYsIDE2ODgsIDEwNjYgfSwgLyogOyAwMyAoNzIweDM1MCkgKi8KKwl7MTY4OCwgMTA2NiwgMTY4OCwgMTA2NiB9LCAvKiA7IDA0ICgzMjB4MjQwLDY0MHg0ODApICovCisJezE2ODgsIDEwNjYsIDE2ODgsIDEwNjYgfSwgLyogOyAwNSAoNDAweDMwMCw4MDB4NjAwKSAqLworCXsxNjg4LCAxMDY2LCAxNjg4LCAxMDY2IH0sIC8qIDsgMDYgKDUxMngzODQsMTAyNHg3NjgpICovCisJezE2ODgsIDEwNjYsIDE2ODgsIDEwNjYgfSwgLyogOyAwNjsgMDcgKDY0MHg1MTIsMTI4MHgxMDI0KSAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFNOb1NjYWxpbmdEYXRheDc1W10gPQotewotICAgICAgICB7ODAwLDQ0OSw4MDAsNDQ5ICAgICB9LCAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwotICAgICAgICB7ODAwLDQ0OSw4MDAsNDQ5ICAgICB9LCAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCi0gICAgICAgIHs5MDAsNDQ5LDkwMCw0NDkgICAgIH0sIC8qIDsgMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KLSAgICAgICAgezkwMCw0NDksOTAwLDQ0OSAgICAgfSwgLyogOyAwMyAoNzIweDM1MCkgKi8KLSAgICAgICAgezgwMCw1MDAsODAwLDUwMCAgICAgfSwgLyogOyAwNCAoNjQweDQ4MHg3NUh6KSAqLwotICAgICAgICB7MTA1Niw2MjUsMTA1Niw2MjUgICB9LCAvKiA7IDA1ICg4MDB4NjAweDc1SHopICovCi0gICAgICAgIHsxMzEyLDgwMCwxMzEyLDgwMCAgIH0sIC8qIDsgMDYgKDEwMjR4NzY4eDc1SHopICovCi0gICAgICAgIHsxNjg4LDEwNjYsMTY4OCwxMDY2IH0sIC8qIDsgMDcgKDEyODB4MTAyNHg3NUh6KSAqLwotICAgICAgICB7MTY4OCwxMDY2LDE2ODgsMTA2NiB9LCAvKiA7IDA4ICgxNDAweDEwNTB4NzVIeikgOztbeWNjaGVuXSAxMi8xOS8wMiAqLwotICAgICAgICB7MjE2MCwxMjUwLDIxNjAsMTI1MCB9LCAvKiA7IDA5ICgxNjAweDEyMDB4NzVIeikgKi8KLSAgICAgICAgezE2ODgsODA2LDE2ODgsODA2ICAgfSwgLyogOyAwQSAoMTI4MHg3Njh4NzVIeikgKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTTm9TY2FsaW5nRGF0YXg3NVtdID0geworCXsgODAwLCAgNDQ5LCAgODAwLCA0NDl9LCAgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KKwl7IDgwMCwgIDQ0OSwgIDgwMCwgNDQ5fSwgIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KKwl7IDkwMCwgIDQ0OSwgIDkwMCwgNDQ5fSwgIC8qIDsgMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KKwl7IDkwMCwgIDQ0OSwgIDkwMCwgNDQ5fSwgIC8qIDsgMDMgKDcyMHgzNTApICovCisJeyA4MDAsICA1MDAsICA4MDAsIDUwMH0sICAvKiA7IDA0ICg2NDB4NDgweDc1SHopICovCisJezEwNTYsICA2MjUsIDEwNTYsIDYyNX0sICAvKiA7IDA1ICg4MDB4NjAweDc1SHopICovCisJezEzMTIsICA4MDAsIDEzMTIsIDgwMH0sICAvKiA7IDA2ICgxMDI0eDc2OHg3NUh6KSAqLworCXsxNjg4LCAxMDY2LCAxNjg4LCAxMDY2fSwgLyogOyAwNyAoMTI4MHgxMDI0eDc1SHopICovCisJezE2ODgsIDEwNjYsIDE2ODgsIDEwNjZ9LCAvKiA7IDA4ICgxNDAweDEwNTB4NzVIeikKKwkJCQkgICAgIDs7W3ljY2hlbl0gMTIvMTkvMDIgKi8KKwl7MjE2MCwgMTI1MCwgMjE2MCwgMTI1MH0sIC8qIDsgMDkgKDE2MDB4MTIwMHg3NUh6KSAqLworCXsxNjg4LCAgODA2LCAxNjg4LCA4MDZ9LCAgLyogOyAwQSAoMTI4MHg3Njh4NzVIeikgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTAyNHg3NjhEZXNfMVtdID0KLXsKLQl7ICAgICAgMCwxMDQ4LCAgIDAsIDc3MSAgICAgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCi0gICAgICAgIHsgICAgICAwLDEwNDgsICAgMCwgNzcxICAgICB9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwotICAgICAgICB7ICAgICAgMCwxMDQ4LCAgIDAsIDc3MSAgICAgfSwgLyogMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KLSAgICAgICAgeyAgICAgIDAsMTA0OCwgICAwLCA3NzEgICAgIH0sIC8qIDAzICg3MjB4MzUwKSAqLwotICAgICAgICB7ICAgICAgMCwxMDQ4LCAgIDAsIDc3MSAgICAgfSwgLyogMDQgKDY0MHg0ODB4NjBIeikgKi8KLSAgICAgICAgeyAgICAgIDAsMTA0OCwgICAwLCA3NzEgICAgIH0sIC8qIDA1ICg4MDB4NjAweDYwSHopICovCi0gICAgICAgIHsgICAgICAwLDEwNDgsIDgwNSwgNzcwICAgICB9ICAvKiAwNiAoMTAyNHg3Njh4NjBIeikgKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTAyNHg3NjhEZXNfMVtdID0geworCXswLCAxMDQ4LCAgIDAsIDc3MX0sIC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLworCXswLCAxMDQ4LCAgIDAsIDc3MX0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCisJezAsIDEwNDgsICAgMCwgNzcxfSwgLyogMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KKwl7MCwgMTA0OCwgICAwLCA3NzF9LCAvKiAwMyAoNzIweDM1MCkgKi8KKwl7MCwgMTA0OCwgICAwLCA3NzF9LCAvKiAwNCAoNjQweDQ4MHg2MEh6KSAqLworCXswLCAxMDQ4LCAgIDAsIDc3MX0sIC8qIDA1ICg4MDB4NjAweDYwSHopICovCisJezAsIDEwNDgsIDgwNSwgNzcwfSAgLyogMDYgKDEwMjR4NzY4eDYwSHopICovCiB9IDsKIAotc3RhdGljIHN0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxMDI0eDc2OERlc18yW10gPQotewotICAgIAl7ICAgICAgMTE0MiwgODU2LCA2MjIsIDU4NyAgICAgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCi0gICAgICAgIHsgICAgICAxMTQyLCA4NTYsIDU5NywgNTYyICAgICB9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwotICAgICAgICB7ICAgICAgMTE0MiwgODU2LCA2MjIsIDU4NyAgICAgfSwgLyogMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KLSAgICAgICAgeyAgICAgIDExNDIsIDg1NiwgNTk3LCA1NjIgICAgIH0sIC8qIDAzICg3MjB4MzUwKSAqLwotICAgICAgICB7ICAgICAgMTE0MiwxMDQ4LCA3MjIsIDY4NyAgICAgfSwgLyogMDQgKDY0MHg0ODB4NjBIeikgKi8KLSAgICAgICAgeyAgICAgIDEyMzIsIDkzNiwgNzIyLCA2ODcgICAgIH0sIC8qIDA1ICg4MDB4NjAweDYwSHopICovCi0gICAgICAgIHsgICAgICAgICAwLDEwNDgsIDgwNSwgNzcxICAgICB9ICAvKiAwNiAoMTAyNHg3Njh4NjBIeikgKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTAyNHg3NjhEZXNfMltdID0geworCXsxMTQyLCAgODU2LCA2MjIsIDU4N30sIC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLworCXsxMTQyLCAgODU2LCA1OTcsIDU2Mn0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCisJezExNDIsICA4NTYsIDYyMiwgNTg3fSwgLyogMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KKwl7MTE0MiwgIDg1NiwgNTk3LCA1NjJ9LCAvKiAwMyAoNzIweDM1MCkgKi8KKwl7MTE0MiwgMTA0OCwgNzIyLCA2ODd9LCAvKiAwNCAoNjQweDQ4MHg2MEh6KSAqLworCXsxMjMyLCAgOTM2LCA3MjIsIDY4N30sIC8qIDA1ICg4MDB4NjAweDYwSHopICovCisJeyAgIDAsIDEwNDgsIDgwNSwgNzcxfSAgLyogMDYgKDEwMjR4NzY4eDYwSHopICovCiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCBYR0lfTFZEUzEwMjR4NzY4RGVzXzNbXSA9Ci17Ci0gICAgCXsgICAgICAgMzIwLCAgMjQsIDYyMiwgNTg3ICAgICB9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KLSAgICAgICAgeyAgICAgICAzMjAsICAyNCwgNTk3LCA1NjIgICAgIH0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCi0gICAgICAgIHsgICAgICAgMzIwLCAgMjQsIDYyMiwgNTg3ICAgICB9LCAvKiAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLwotICAgICAgICB7ICAgICAgIDMyMCwgIDI0LCA1OTcsIDU2MiAgICAgfSwgLyogMDMgKDcyMHgzNTApICovCi0gICAgICAgIHsgICAgICAgMzIwLCAgMjQsIDcyMiwgNjg3ICAgICB9ICAvKiAwNCAoNjQweDQ4MHg2MEh6KSAqLworc3RhdGljIHN0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxMDI0eDc2OERlc18zW10gPSB7CisJezMyMCwgMjQsIDYyMiwgNTg3fSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCisJezMyMCwgMjQsIDU5NywgNTYyfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KKwl7MzIwLCAyNCwgNjIyLCA1ODd9LCAvKiAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLworCXszMjAsIDI0LCA1OTcsIDU2Mn0sIC8qIDAzICg3MjB4MzUwKSAqLworCXszMjAsIDI0LCA3MjIsIDY4N30gIC8qIDA0ICg2NDB4NDgweDYwSHopICovCiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCBYR0lfTFZEUzEyODB4MTAyNERlc18xW10gPQotewotICAgIAl7ICAgICAgMCwxMzI4LCAgICAwLCAxMDI1ICAgICB9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KLSAgICAgICAgeyAgICAgIDAsMTMyOCwgICAgMCwgMTAyNSAgICAgfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KLSAgICAgICAgeyAgICAgIDAsMTMyOCwgICAgMCwgMTAyNSAgICAgfSwgLyogMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KLSAgICAgICAgeyAgICAgIDAsMTMyOCwgICAgMCwgMTAyNSAgICAgfSwgLyogMDMgKDcyMHgzNTApICovCi0gICAgICAgIHsgICAgICAwLDEzMjgsICAgIDAsIDEwMjUgICAgIH0sIC8qIDA0ICg2NDB4NDgweDYwSHopICovCi0gICAgICAgIHsgICAgICAwLDEzMjgsICAgIDAsIDEwMjUgICAgIH0sIC8qIDA1ICg4MDB4NjAweDYwSHopICovCi0gICAgICAgIHsgICAgICAwLDEzMjgsICAgIDAsIDEwMjUgICAgIH0sIC8qIDA2ICgxMDI0eDc2OHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgMCwxMzI4LCAxMDY1LCAxMDI0ICAgICB9ICAvKiAwNyAoMTI4MHgxMDI0eDYwSHopICovCitzdGF0aWMgc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCBYR0lfTFZEUzEyODB4MTAyNERlc18xW10gPSB7CisJezAsIDEzMjgsICAgIDAsIDEwMjV9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KKwl7MCwgMTMyOCwgICAgMCwgMTAyNX0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCisJezAsIDEzMjgsICAgIDAsIDEwMjV9LCAvKiAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLworCXswLCAxMzI4LCAgICAwLCAxMDI1fSwgLyogMDMgKDcyMHgzNTApICovCisJezAsIDEzMjgsICAgIDAsIDEwMjV9LCAvKiAwNCAoNjQweDQ4MHg2MEh6KSAqLworCXswLCAxMzI4LCAgICAwLCAxMDI1fSwgLyogMDUgKDgwMHg2MDB4NjBIeikgKi8KKwl7MCwgMTMyOCwgICAgMCwgMTAyNX0sIC8qIDA2ICgxMDI0eDc2OHg2MEh6KSAqLworCXswLCAxMzI4LCAxMDY1LCAxMDI0fSAgLyogMDcgKDEyODB4MTAyNHg2MEh6KSAqLwogfTsKIAogIC8qIFRoZSBEaXNwbGF5IHNldHRpbmcgZm9yIERFIE1vZGUgUGFuZWwgKi8KLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTI4MHgxMDI0RGVzXzJbXSA9Ci17Ci0gICAgCXsgICAgICAxMzY4LDEwMDgsNzUyLDcxMSAgICAgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCi0gICAgICAgIHsgICAgICAxMzY4LDEwMDgsNzI5LDY4OCAgICAgfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KLSAgICAgICAgeyAgICAgIDE0MDgsMTA0OCw3NTIsNzExICAgICB9LCAvKiAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLwotICAgICAgICB7ICAgICAgMTQwOCwxMDQ4LDcyOSw2ODggICAgIH0sIC8qIDAzICg3MjB4MzUwKSAqLwotICAgICAgICB7ICAgICAgMTM2OCwxMDA4LDc5NCw3NTMgICAgIH0sIC8qIDA0ICg2NDB4NDgweDYwSHopICovCi0gICAgICAgIHsgICAgICAxNDQ4LDEwNjgsODU0LDgxMyAgICAgfSwgLyogMDUgKDgwMHg2MDB4NjBIeikgKi8KLSAgICAgICAgeyAgICAgIDE1NjAsMTIwMCw5MzgsODk3ICAgICB9LCAvKiAwNiAoMTAyNHg3Njh4NjBIeikgKi8KLSAgICAgICAgeyAgICAgIDAwMDAsMTMyOCwwLDEwMjUgICAgIH0gIC8qIDA3ICgxMjgweDEwMjR4NjBIeikgKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTI4MHgxMDI0RGVzXzJbXSA9IHsKKwl7MTM2OCwgMTAwOCwgNzUyLCA3MTF9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KKwl7MTM2OCwgMTAwOCwgNzI5LCA2ODh9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLworCXsxNDA4LCAxMDQ4LCA3NTIsIDcxMX0sIC8qIDAyICgzNjB4NDAwLDcyMHg0MDApICovCisJezE0MDgsIDEwNDgsIDcyOSwgNjg4fSwgLyogMDMgKDcyMHgzNTApICovCisJezEzNjgsIDEwMDgsIDc5NCwgNzUzfSwgLyogMDQgKDY0MHg0ODB4NjBIeikgKi8KKwl7MTQ0OCwgMTA2OCwgODU0LCA4MTN9LCAvKiAwNSAoODAweDYwMHg2MEh6KSAqLworCXsxNTYwLCAxMjAwLCA5MzgsIDg5N30sIC8qIDA2ICgxMDI0eDc2OHg2MEh6KSAqLworCXswMDAwLCAxMzI4LCAgIDAsIDEwMjV9IC8qIDA3ICgxMjgweDEwMjR4NjBIeikgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTQwMHgxMDUwRGVzXzFbXSA9Ci17Ci0gICAgCXsgICAgICAwLDE0NDgsMCwxMDUxICAgICB9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KLSAgICAgICAgeyAgICAgIDAsMTQ0OCwwLDEwNTEgICAgIH0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCi0gICAgICAgIHsgICAgICAwLDE0NDgsMCwxMDUxICAgICB9LCAvKiAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLwotICAgICAgICB7ICAgICAgMCwxNDQ4LDAsMTA1MSAgICAgfSwgLyogMDMgKDcyMHgzNTApICovCi0gICAgICAgIHsgICAgICAwLDE0NDgsMCwxMDUxICAgICB9LCAvKiAwNCAoNjQweDQ4MHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgMCwxNDQ4LDAsMTA1MSAgICAgfSwgLyogMDUgKDgwMHg2MDB4NjBIeikgKi8KLSAgICAgICAgeyAgICAgIDAsMTQ0OCwwLDEwNTEgICAgIH0sIC8qIDA2ICgxMDI0eDc2OHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgMCwxNDQ4LDAsMTA1MSAgICAgfSwgLyogMDcgKDEyODB4MTAyNHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgMCwxNDQ4LDAsMTA1MSAgICAgfSAgLyogMDggKDE0MDB4MTA1MHg2MEh6KSAqLworc3RhdGljIHN0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxNDAweDEwNTBEZXNfMVtdID0geworCXswLCAxNDQ4LCAwLCAxMDUxfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCisJezAsIDE0NDgsIDAsIDEwNTF9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLworCXswLCAxNDQ4LCAwLCAxMDUxfSwgLyogMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KKwl7MCwgMTQ0OCwgMCwgMTA1MX0sIC8qIDAzICg3MjB4MzUwKSAqLworCXswLCAxNDQ4LCAwLCAxMDUxfSwgLyogMDQgKDY0MHg0ODB4NjBIeikgKi8KKwl7MCwgMTQ0OCwgMCwgMTA1MX0sIC8qIDA1ICg4MDB4NjAweDYwSHopICovCisJezAsIDE0NDgsIDAsIDEwNTF9LCAvKiAwNiAoMTAyNHg3Njh4NjBIeikgKi8KKwl7MCwgMTQ0OCwgMCwgMTA1MX0sIC8qIDA3ICgxMjgweDEwMjR4NjBIeikgKi8KKwl7MCwgMTQ0OCwgMCwgMTA1MX0gIC8qIDA4ICgxNDAweDEwNTB4NjBIeikgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTQwMHgxMDUwRGVzXzJbXSA9Ci17Ci0gICAgCXsgICAgICAxMzA4LDEwNjgsIDc4MSwgNzY2ICAgICB9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KLSAgICAgICAgeyAgICAgIDEzMDgsMTA2OCwgNzgxLCA3NjYgICAgIH0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCi0gICAgICAgIHsgICAgICAxMzA4LDEwNjgsIDc4MSwgNzY2ICAgICB9LCAvKiAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLwotICAgICAgICB7ICAgICAgMTMwOCwxMDY4LCA3ODEsIDc2NiAgICAgfSwgLyogMDMgKDcyMHgzNTApICovCi0gICAgICAgIHsgICAgICAxMzA4LDEwNjgsIDc4MSwgNzY2ICAgICB9LCAvKiAwNCAoNjQweDQ4MHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgMTM4OCwxMTQ4LCA4NDEsIDgyNiAgICAgfSwgLyogMDUgKDgwMHg2MDB4NjBIeikgKi8KLSAgICAgICAgeyAgICAgIDE0OTAsMTI1MCwgOTI1LCA5MTAgICAgIH0sIC8qIDA2ICgxMDI0eDc2OHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgMTYwOCwxMzY4LDEwNTMsMTAzOCAgICAgfSwgLyogMDcgKDEyODB4MTAyNHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgMCwxNDQ4LDAsMTA1MSAgICAgfSAgLyogMDggKDE0MDB4MTA1MHg2MEh6KSAqLworc3RhdGljIHN0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxNDAweDEwNTBEZXNfMltdID0geworCXsxMzA4LCAxMDY4LCAgNzgxLCAgNzY2fSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCisJezEzMDgsIDEwNjgsICA3ODEsICA3NjZ9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLworCXsxMzA4LCAxMDY4LCAgNzgxLCAgNzY2fSwgLyogMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KKwl7MTMwOCwgMTA2OCwgIDc4MSwgIDc2Nn0sIC8qIDAzICg3MjB4MzUwKSAqLworCXsxMzA4LCAxMDY4LCAgNzgxLCAgNzY2fSwgLyogMDQgKDY0MHg0ODB4NjBIeikgKi8KKwl7MTM4OCwgMTE0OCwgIDg0MSwgIDgyNn0sIC8qIDA1ICg4MDB4NjAweDYwSHopICovCisJezE0OTAsIDEyNTAsICA5MjUsICA5MTB9LCAvKiAwNiAoMTAyNHg3Njh4NjBIeikgKi8KKwl7MTYwOCwgMTM2OCwgMTA1MywgMTAzOH0sIC8qIDA3ICgxMjgweDEwMjR4NjBIeikgKi8KKwl7ICAgMCwgMTQ0OCwgICAgMCwgMTA1MX0gIC8qIDA4ICgxNDAweDEwNTB4NjBIeikgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTYwMHgxMjAwRGVzXzFbXSA9Ci17Ci0gICAgCXsgICAgICAwLDE2NjQsMCwxMjAxICAgICB9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KLSAgICAgICAgeyAgICAgIDAsMTY2NCwwLDEyMDEgICAgIH0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCi0gICAgICAgIHsgICAgICAwLDE2NjQsMCwxMjAxICAgICB9LCAvKiAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLwotICAgICAgICB7ICAgICAgMCwxNjY0LDAsMTIwMSAgICAgfSwgLyogMDMgKDcyMHgzNTApICovCi0gICAgICAgIHsgICAgICAwLDE2NjQsMCwxMjAxICAgICB9LCAvKiAwNCAoNjQweDQ4MHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgMCwxNjY0LDAsMTIwMSAgICAgfSwgLyogMDUgKDgwMHg2MDB4NjBIeikgKi8KLSAgICAgICAgeyAgICAgIDAsMTY2NCwwLDEyMDEgICAgIH0sIC8qIDA2ICgxMDI0eDc2OHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgMCwxNjY0LDAsMTIwMSAgICAgfSwgLyogMDcgKDEyODB4MTAyNHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgMCwxNjY0LDAsMTIwMSAgICAgfSwgLyogMDggKDE0MDB4MTA1MHg2MEh6KSAqLwotICAgICAgICB7ICAgICAgMCwxNjY0LDAsMTIwMSAgICAgfSAgLyogMDkgKDE2MDB4MTIwMHg2MEh6KSAqLworc3RhdGljIHN0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxNjAweDEyMDBEZXNfMVtdID0geworCXswLCAxNjY0LCAwLCAxMjAxfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCisJezAsIDE2NjQsIDAsIDEyMDF9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLworCXswLCAxNjY0LCAwLCAxMjAxfSwgLyogMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KKwl7MCwgMTY2NCwgMCwgMTIwMX0sIC8qIDAzICg3MjB4MzUwKSAqLworCXswLCAxNjY0LCAwLCAxMjAxfSwgLyogMDQgKDY0MHg0ODB4NjBIeikgKi8KKwl7MCwgMTY2NCwgMCwgMTIwMX0sIC8qIDA1ICg4MDB4NjAweDYwSHopICovCisJezAsIDE2NjQsIDAsIDEyMDF9LCAvKiAwNiAoMTAyNHg3Njh4NjBIeikgKi8KKwl7MCwgMTY2NCwgMCwgMTIwMX0sIC8qIDA3ICgxMjgweDEwMjR4NjBIeikgKi8KKwl7MCwgMTY2NCwgMCwgMTIwMX0sIC8qIDA4ICgxNDAweDEwNTB4NjBIeikgKi8KKwl7MCwgMTY2NCwgMCwgMTIwMX0gIC8qIDA5ICgxNjAweDEyMDB4NjBIeikgKi8KIH07CiAKLQotCi1zdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0MiAgWEdJX0xWRFNOb1NjYWxpbmdEZXNEYXRhW10gPQotewotICAgIAl7ICAgICAwLCA2NDgsIDQ0OCwgNDA1LCAgOTYsICAgMiAgIH0sIC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwotICAgICAgICB7ICAgICAwLCA2NDgsIDQ0OCwgMzU1LCAgOTYsICAgMiAgIH0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCi0gICAgICAgIHsgICAgIDAsIDY0OCwgNDQ4LCA0MDUsICA5NiwgICAyICAgfSwgLyogMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KLSAgICAgICAgeyAgICAgMCwgNjQ4LCA0NDgsIDM1NSwgIDk2LCAgIDIgICB9LCAvKiAwMyAoNzIweDM1MCkgKi8KLSAgICAgICAgeyAgICAgMCwgNjQ4LCAgMSwgNDgzLCAgOTYsICAgMiAgIH0sIC8qIDA0ICg2NDB4NDgweDYwSHopICovCi0gICAgICAgIHsgICAgIDAsIDg0MCwgNjI3LCA2MDAsIDEyOCwgICA0ICAgfSwgLyogMDUgKDgwMHg2MDB4NjBIeikgKi8KLSAgICAgICAgeyAgICAgMCwxMDQ4LCA4MDUsIDc3MCwgMTM2LCAgIDYgICB9LCAvKiAwNiAoMTAyNHg3Njh4NjBIeikgKi8KLSAgICAgICAgeyAgICAgMCwxMzI4LDAsMTAyNSwgMTEyLCAgIDMgICB9LCAvKiAwNyAoMTI4MHgxMDI0eDYwSHopICovCi0gICAgICAgIHsgICAgIDAsMTQzOCwwLDEwNTEsIDExMiwgICAzICAgfSwgLyogMDggKDE0MDB4MTA1MHg2MEh6KSA7O1t5Y2NoZW5dIDEyLzE5LzAyICovCi0gICAgICAgIHsgICAgIDAsMTY2NCwwLDEyMDEsIDE5MiwgICAzICAgfSwgLyogMDkgKDE2MDB4MTIwMHg2MEh6KSAqLwotICAgICAgICB7ICAgICAwLDEzMjgsMCwwNzcxLCAxMTIsICAgNiAgIH0gIC8qIDBBICgxMjgweDc2OHg2MEh6KSAqLworc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdDIgIFhHSV9MVkRTTm9TY2FsaW5nRGVzRGF0YVtdID0geworCXswLCAgNjQ4LCAgNDQ4LCAgNDA1LCAgOTYsIDJ9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLAorCQkJCQkgICAgICA2NDB4MjAwLDY0MHg0MDApICovCisJezAsICA2NDgsICA0NDgsICAzNTUsICA5NiwgMn0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCisJezAsICA2NDgsICA0NDgsICA0MDUsICA5NiwgMn0sIC8qIDAyICgzNjB4NDAwLDcyMHg0MDApICovCisJezAsICA2NDgsICA0NDgsICAzNTUsICA5NiwgMn0sIC8qIDAzICg3MjB4MzUwKSAqLworCXswLCAgNjQ4LCAgICAxLCAgNDgzLCAgOTYsIDJ9LCAvKiAwNCAoNjQweDQ4MHg2MEh6KSAqLworCXswLCAgODQwLCAgNjI3LCAgNjAwLCAxMjgsIDR9LCAvKiAwNSAoODAweDYwMHg2MEh6KSAqLworCXswLCAxMDQ4LCAgODA1LCAgNzcwLCAxMzYsIDZ9LCAvKiAwNiAoMTAyNHg3Njh4NjBIeikgKi8KKwl7MCwgMTMyOCwgICAgMCwgMTAyNSwgMTEyLCAzfSwgLyogMDcgKDEyODB4MTAyNHg2MEh6KSAqLworCXswLCAxNDM4LCAgICAwLCAxMDUxLCAxMTIsIDN9LCAvKiAwOCAoMTQwMHgxMDUweDYwSHopCisJCQkJCTs7W3ljY2hlbl0gMTIvMTkvMDIgKi8KKwl7MCwgMTY2NCwgICAgMCwgMTIwMSwgMTkyLCAzfSwgLyogMDkgKDE2MDB4MTIwMHg2MEh6KSAqLworCXswLCAxMzI4LCAgICAwLCAwNzcxLCAxMTIsIDZ9ICAvKiAwQSAoMTI4MHg3Njh4NjBIeikgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTAyNHg3NjhEZXNfMXg3NVtdID0JCQkvKiA7IDEwMjR4NzY4IEZ1bGwtc2NyZWVuICovCi17Ci0gICAgICAgIHswLDEwNDAsMCw3Njl9LCAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwotICAgICAgICB7MCwxMDQwLDAsNzY5fSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwotICAgICAgICB7MCwxMDQwLDAsNzY5fSwgLyogOyAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLwotICAgICAgICB7MCwxMDQwLDAsNzY5fSwgLyogOyAwMyAoNzIweDM1MCkgKi8KLSAgICAgICAgezAsMTA0MCwwLDc2OX0sIC8qIDsgMDQgKDY0MHg0ODB4NzVIeikgKi8KLSAgICAgICAgezAsMTA0MCwwLDc2OX0sIC8qIDsgMDUgKDgwMHg2MDB4NzVIeikgKi8KLSAgICAgICAgezAsMTA0MCwwLDc2OX0gLyogOyAwNiAoMTAyNHg3Njh4NzVIeikgKi8KKy8qIDsgMTAyNHg3NjggRnVsbC1zY3JlZW4gKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTAyNHg3NjhEZXNfMXg3NVtdID0geworCXswLCAxMDQwLCAwLCA3Njl9LCAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLworCXswLCAxMDQwLCAwLCA3Njl9LCAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCisJezAsIDEwNDAsIDAsIDc2OX0sIC8qIDsgMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KKwl7MCwgMTA0MCwgMCwgNzY5fSwgLyogOyAwMyAoNzIweDM1MCkgKi8KKwl7MCwgMTA0MCwgMCwgNzY5fSwgLyogOyAwNCAoNjQweDQ4MHg3NUh6KSAqLworCXswLCAxMDQwLCAwLCA3Njl9LCAvKiA7IDA1ICg4MDB4NjAweDc1SHopICovCisJezAsIDEwNDAsIDAsIDc2OX0gIC8qIDsgMDYgKDEwMjR4NzY4eDc1SHopICovCiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCBYR0lfTFZEUzEwMjR4NzY4RGVzXzJ4NzVbXSA9IC8qIDsgMTAyNHg3NjggY2VudGVyLXNjcmVlbiAoRW5oLiBNb2RlKSAqLwotewotICAgICAgICB7MTE0MiwgODU2LDYyMiw1ODcgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCi0gICAgICAgIHsxMTQyLCA4NTYsNTk3LDU2MiB9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwotICAgICAgICB7MTE0MiwgODU2LDYyMiw1ODcgfSwgLyogMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KLSAgICAgICAgezExNDIsIDg1Niw1OTcsNTYyIH0sIC8qIDAzICg3MjB4MzUwKSAqLwotICAgICAgICB7MTE0MiwxMDQ4LDcyMiw2ODcgfSwgLyogMDQgKDY0MHg0ODB4NjBIeikgKi8KLSAgICAgICAgezEyMzIsIDkzNiw3MjIsNjg3IH0sIC8qIDA1ICg4MDB4NjAweDYwSHopICovCi0gICAgICAgIHsgICAwLDEwNDgsODA1LDc3MSB9ICAvKiAwNiAoMTAyNHg3Njh4NjBIeikgKi8KKy8qIDsgMTAyNHg3NjggY2VudGVyLXNjcmVlbiAoRW5oLiBNb2RlKSAqLworc3RhdGljIHN0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxMDI0eDc2OERlc18yeDc1W10gPSB7CisJezExNDIsICA4NTYsIDYyMiwgNTg3fSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCisJezExNDIsICA4NTYsIDU5NywgNTYyfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KKwl7MTE0MiwgIDg1NiwgNjIyLCA1ODd9LCAvKiAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLworCXsxMTQyLCAgODU2LCA1OTcsIDU2Mn0sIC8qIDAzICg3MjB4MzUwKSAqLworCXsxMTQyLCAxMDQ4LCA3MjIsIDY4N30sIC8qIDA0ICg2NDB4NDgweDYwSHopICovCisJezEyMzIsICA5MzYsIDcyMiwgNjg3fSwgLyogMDUgKDgwMHg2MDB4NjBIeikgKi8KKwl7ICAgMCwgMTA0OCwgODA1LCA3NzF9ICAvKiAwNiAoMTAyNHg3Njh4NjBIeikgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTAyNHg3NjhEZXNfM3g3NVtdID0gLyogOyAxMDI0eDc2OCBjZW50ZXItc2NyZWVuIChTdC5Nb2RlKSAqLwotewotICAgICAgICB7MzIwLDI0LDYyMiw1ODcgIH0sIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCi0gICAgICAgIHszMjAsMjQsNTk3LDU2MiAgfSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwotICAgICAgICB7MzIwLDI0LDYyMiw1ODcgIH0sIC8qIDsgMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KLSAgICAgICAgezMyMCwyNCw1OTcsNTYyICB9LCAvKiA7IDAzICg3MjB4MzUwKSAqLwotICAgICAgICB7MzIwLDI0LDcyMiw2ODcgIH0gLyogOyAwNCAoNjQweDQ4MHg2MEh6KSAqLworLyogOyAxMDI0eDc2OCBjZW50ZXItc2NyZWVuIChTdC5Nb2RlKSAqLworc3RhdGljIHN0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxMDI0eDc2OERlc18zeDc1W10gPSAgeworCXszMjAsIDI0LCA2MjIsIDU4N30sIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCisJezMyMCwgMjQsIDU5NywgNTYyfSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLworCXszMjAsIDI0LCA2MjIsIDU4N30sIC8qIDsgMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KKwl7MzIwLCAyNCwgNTk3LCA1NjJ9LCAvKiA7IDAzICg3MjB4MzUwKSAqLworCXszMjAsIDI0LCA3MjIsIDY4N30gIC8qIDsgMDQgKDY0MHg0ODB4NjBIeikgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTI4MHgxMDI0RGVzXzF4NzVbXSA9Ci17Ci0gICAgICAgIHswLDEyOTYsMCwxMDI1fSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KLSAgICAgICAgezAsMTI5NiwwLDEwMjV9LCAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCi0gICAgICAgIHswLDEyOTYsMCwxMDI1fSwgLyogOyAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLwotICAgICAgICB7MCwxMjk2LDAsMTAyNX0sIC8qIDsgMDMgKDcyMHgzNTApICovCi0gICAgICAgIHswLDEyOTYsMCwxMDI1fSwgLyogOyAwNCAoNjQweDQ4MHg3NUh6KSAqLwotICAgICAgICB7MCwxMjk2LDAsMTAyNX0sIC8qIDsgMDUgKDgwMHg2MDB4NzVIeikgKi8KLSAgICAgICAgezAsMTI5NiwwLDEwMjV9LCAvKiA7IDA2ICgxMDI0eDc2OHg3NUh6KSAqLwotICAgICAgICB7MCwxMjk2LDAsMTAyNX0gLyogOyAwNyAoMTI4MHgxMDI0eDc1SHopICovCitzdGF0aWMgc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCBYR0lfTFZEUzEyODB4MTAyNERlc18xeDc1W10gPSB7CisJezAsIDEyOTYsIDAsIDEwMjV9LCAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLworCXswLCAxMjk2LCAwLCAxMDI1fSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLworCXswLCAxMjk2LCAwLCAxMDI1fSwgLyogOyAwMiAoMzYweDQwMCw3MjB4NDAwKSAqLworCXswLCAxMjk2LCAwLCAxMDI1fSwgLyogOyAwMyAoNzIweDM1MCkgKi8KKwl7MCwgMTI5NiwgMCwgMTAyNX0sIC8qIDsgMDQgKDY0MHg0ODB4NzVIeikgKi8KKwl7MCwgMTI5NiwgMCwgMTAyNX0sIC8qIDsgMDUgKDgwMHg2MDB4NzVIeikgKi8KKwl7MCwgMTI5NiwgMCwgMTAyNX0sIC8qIDsgMDYgKDEwMjR4NzY4eDc1SHopICovCisJezAsIDEyOTYsIDAsIDEwMjV9ICAvKiA7IDA3ICgxMjgweDEwMjR4NzVIeikgKi8KIH07CiAKIC8qIFRoZSBEaXNwbGF5IHNldHRpbmcgZm9yIERFIE1vZGUgUGFuZWwgKi8KLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTI4MHgxMDI0RGVzXzJ4NzVbXSA9ICAgLyogW3ljY2hlbl0gMDIvMTgvMDMgU2V0IERFIGFzIGRlZmF1bHQgKi8KLXsKLSAgICAgICAgezEzNjgsOTc2LDc1Miw3MTEgfSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KLSAgICAgICAgezEzNjgsOTc2LDcyOSw2ODggfSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwotICAgICAgICB7MTQwOCw5NzYsNzUyLDcxMSB9LCAvKiA7IDAyICgzNjB4NDAwLDcyMHg0MDApICovCi0gICAgICAgIHsxNDA4LDk3Niw3MjksNjg4IH0sIC8qIDsgMDMgKDcyMHgzNTApICovCi0gICAgICAgIHsxMzY4LDk3Niw3OTQsNzUzIH0sIC8qIDsgMDQgKDY0MHg0ODB4NzVIeikgKi8KLSAgICAgICAgezE0NDgsMTAzNiw4NTQsODEzfSwgLyogOyAwNSAoODAweDYwMHg3NUh6KSAqLwotICAgICAgICB7MTU2MCwxMTY4LDkzOCw4OTd9LCAvKiA7IDA2ICgxMDI0eDc2OHg3NUh6KSAqLwotICAgICAgICB7MCwxMjk2LDAsMTAyNSAgICB9IC8qIDsgMDcgKDEyODB4MTAyNHg3NUh6KSAqLworLyogW3ljY2hlbl0gMDIvMTgvMDMgU2V0IERFIGFzIGRlZmF1bHQgKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTI4MHgxMDI0RGVzXzJ4NzVbXSA9IHsKKwl7MTM2OCwgIDk3NiwgNzUyLCAgNzExfSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KKwl7MTM2OCwgIDk3NiwgNzI5LCAgNjg4fSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLworCXsxNDA4LCAgOTc2LCA3NTIsICA3MTF9LCAvKiA7IDAyICgzNjB4NDAwLDcyMHg0MDApICovCisJezE0MDgsICA5NzYsIDcyOSwgIDY4OH0sIC8qIDsgMDMgKDcyMHgzNTApICovCisJezEzNjgsICA5NzYsIDc5NCwgIDc1M30sIC8qIDsgMDQgKDY0MHg0ODB4NzVIeikgKi8KKwl7MTQ0OCwgMTAzNiwgODU0LCAgODEzfSwgLyogOyAwNSAoODAweDYwMHg3NUh6KSAqLworCXsxNTYwLCAxMTY4LCA5MzgsICA4OTd9LCAvKiA7IDA2ICgxMDI0eDc2OHg3NUh6KSAqLworCXsgICAwLCAxMjk2LCAgIDAsIDEwMjV9ICAvKiA7IDA3ICgxMjgweDEwMjR4NzVIeikgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QyIFhHSV9MVkRTTm9TY2FsaW5nRGVzRGF0YXg3NVtdID0gIC8qIFNjYWxpbmcgTENEIDc1SHogKi8KLXsKLSAgICAgICB7IDAsNjQ4LDQ0OCw0MDUsOTYsMiAgfSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KLSAgICAgICB7IDAsNjQ4LDQ0OCwzNTUsOTYsMiAgfSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwotICAgICAgIHsgMCw3MjksNDQ4LDQwNSwxMDgsMiB9LCAvKiA7IDAyICgzNjB4NDAwLDcyMHg0MDApICovCi0gICAgICAgeyAwLDcyOSw0NDgsMzU1LDEwOCwyIH0sIC8qIDsgMDMgKDcyMHgzNTApICovCi0gICAgICAgeyAwLDY1NiwwLDQ4MSw2NCwzICAgIH0sIC8qIDsgMDQgKDY0MHg0ODB4NzVIeikgKi8KLSAgICAgICB7IDAsODE2LDAsNjAxLDgwLDMgICAgfSwgLyogOyAwNSAoODAweDYwMHg3NUh6KSAqLwotICAgICAgIHsgMCwxMDQwLDAsNzY5LDk2LDMgICB9LCAvKiA7IDA2ICgxMDI0eDc2OHg3NUh6KSAqLwotICAgICAgIHsgMCwxMjk2LDAsMTAyNSwxNDQsMyB9LCAvKiA7IDA3ICgxMjgweDEwMjR4NzVIeikgKi8KLSAgICAgICB7IDAsMTQ0OCwwLDEwNTEsMTEyLDMgfSwgLyogOyAwOCAoMTQwMHgxMDUweDc1SHopIDs7W3ljY2hlbl0gMTIvMTkvMDIgKi8KLSAgICAgICB7IDAsMTY2NCwwLDEyMDEsMTkyLDMgfSwgLyogOyAwOSAoMTYwMHgxMjAweDc1SHopICovCi0gICAgICAgeyAwLDEzMjgsMCw3NzEsMTEyLDYgIH0gIC8qIDsgMEEgKDEyODB4NzY4eDc1SHopICovCisvKiBTY2FsaW5nIExDRCA3NUh6ICovCitzdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0MiBYR0lfTFZEU05vU2NhbGluZ0Rlc0RhdGF4NzVbXSA9IHsKKwl7MCwgIDY0OCwgNDQ4LCAgNDA1LCAgOTYsIDJ9LCAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsCisJCQkJCSAgICAgICA2NDB4MjAwLDY0MHg0MDApICovCisJezAsICA2NDgsIDQ0OCwgIDM1NSwgIDk2LCAyfSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLworCXswLCAgNzI5LCA0NDgsICA0MDUsIDEwOCwgMn0sIC8qIDsgMDIgKDM2MHg0MDAsNzIweDQwMCkgKi8KKwl7MCwgIDcyOSwgNDQ4LCAgMzU1LCAxMDgsIDJ9LCAvKiA7IDAzICg3MjB4MzUwKSAqLworCXswLCAgNjU2LCAgIDAsICA0ODEsICA2NCwgM30sIC8qIDsgMDQgKDY0MHg0ODB4NzVIeikgKi8KKwl7MCwgIDgxNiwgICAwLCAgNjAxLCAgODAsIDN9LCAvKiA7IDA1ICg4MDB4NjAweDc1SHopICovCisJezAsIDEwNDAsICAgMCwgIDc2OSwgIDk2LCAzfSwgLyogOyAwNiAoMTAyNHg3Njh4NzVIeikgKi8KKwl7MCwgMTI5NiwgICAwLCAxMDI1LCAxNDQsIDN9LCAvKiA7IDA3ICgxMjgweDEwMjR4NzVIeikgKi8KKwl7MCwgMTQ0OCwgICAwLCAxMDUxLCAxMTIsIDN9LCAvKiA7IDA4ICgxNDAweDEwNTB4NzVIeikKKwkJCQkJIDs7W3ljY2hlbl0gMTIvMTkvMDIgKi8KKwl7MCwgMTY2NCwgICAwLCAxMjAxLCAxOTIsIDN9LCAvKiA7IDA5ICgxNjAweDEyMDB4NzVIeikgKi8KKwl7MCwgMTMyOCwgICAwLCAgNzcxLCAxMTIsIDZ9ICAvKiA7IDBBICgxMjgweDc2OHg3NUh6KSAqLwogfTsKIAogI2lmIDAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0kzMzBfTFZEUzY0MHg0ODBEYXRhXzFbXSA9Ci17Ci0gezgwMCwgNDQ5LCA4MDAsIDQ0OX0sCi0gezgwMCwgNDQ5LCA4MDAsIDQ0OX0sCi0gezgwMCwgNDQ5LCA4MDAsIDQ0OX0sCi0gezgwMCwgNDQ5LCA4MDAsIDQ0OX0sCi0gezgwMCwgNTI1LCA4MDAsIDUyNX0sCi0gezEwNTYsIDYyOCwxMDU2LCA2Mjh9LAotIHsxMDU2LCA2MjgsMTA1NiwgNjI4fSwKLSB7MTA1NiwgNjI4LDEwNTYsIDYyOH0sCi0gezEwNTYsIDYyOCwxMDU2LCA2Mjh9CitzdGF0aWMgc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJMzMwX0xWRFM2NDB4NDgwRGF0YV8xW10gPSB7CisJeyA4MDAsIDQ0OSwgIDgwMCwgNDQ5fSwKKwl7IDgwMCwgNDQ5LCAgODAwLCA0NDl9LAorCXsgODAwLCA0NDksICA4MDAsIDQ0OX0sCisJeyA4MDAsIDQ0OSwgIDgwMCwgNDQ5fSwKKwl7IDgwMCwgNTI1LCAgODAwLCA1MjV9LAorCXsxMDU2LCA2MjgsIDEwNTYsIDYyOH0sCisJezEwNTYsIDYyOCwgMTA1NiwgNjI4fSwKKwl7MTA1NiwgNjI4LCAxMDU2LCA2Mjh9LAorCXsxMDU2LCA2MjgsIDEwNTYsIDYyOH0KIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBYR0kzMzBfQ0hUVkRhdGFTdHJ1Y3QgIFhHSV9DSFRWVU5UU0NEYXRhW10gPQotewotIHs4NDAsIDYwMCwgODQwLCA2MDB9LAotIHs4NDAsIDYwMCwgODQwLCA2MDB9LAotIHs4NDAsIDYwMCwgODQwLCA2MDB9LAotIHs4NDAsIDYwMCwgODQwLCA2MDB9LAotIHs3ODQsIDYwMCwgNzg0LCA2MDB9LAotIHsxMDY0LCA3NTAsMTA2NCwgNzUwfQorc3RhdGljIHN0cnVjdCBYR0kzMzBfQ0hUVkRhdGFTdHJ1Y3QgIFhHSV9DSFRWVU5UU0NEYXRhW10gPSB7CisJeyA4NDAsIDYwMCwgIDg0MCwgNjAwfSwKKwl7IDg0MCwgNjAwLCAgODQwLCA2MDB9LAorCXsgODQwLCA2MDAsICA4NDAsIDYwMH0sCisJeyA4NDAsIDYwMCwgIDg0MCwgNjAwfSwKKwl7IDc4NCwgNjAwLCAgNzg0LCA2MDB9LAorCXsxMDY0LCA3NTAsIDEwNjQsIDc1MH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0NIVFZEYXRhU3RydWN0ICBYR0lfQ0hUVk9OVFNDRGF0YVtdID0KLXsKLSB7ODQwLCA1MjUsIDg0MCwgNTI1fSwKLSB7ODQwLCA1MjUsIDg0MCwgNTI1fSwKLSB7ODQwLCA1MjUsIDg0MCwgNTI1fSwKLSB7ODQwLCA1MjUsIDg0MCwgNTI1fSwKLSB7Nzg0LCA1MjUsIDc4NCwgNTI1fSwKLSB7MTA0MCwgNzAwLDEwNDAsIDcwMH0KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX0NIVFZEYXRhU3RydWN0ICBYR0lfQ0hUVk9OVFNDRGF0YVtdID0geworCXsgODQwLCA1MjUsICA4NDAsIDUyNX0sCisJeyA4NDAsIDUyNSwgIDg0MCwgNTI1fSwKKwl7IDg0MCwgNTI1LCAgODQwLCA1MjV9LAorCXsgODQwLCA1MjUsICA4NDAsIDUyNX0sCisJeyA3ODQsIDUyNSwgIDc4NCwgNTI1fSwKKwl7MTA0MCwgNzAwLCAxMDQwLCA3MDB9CiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSTMzMF9DSFRWRGF0YVN0cnVjdCAgWEdJX0NIVFZVUEFMRGF0YVtdID0KLXsKLSB7MTAwOCwgNjI1LDEwMDgsIDYyNX0sCi0gezEwMDgsIDYyNSwxMDA4LCA2MjV9LAotIHsxMDA4LCA2MjUsMTAwOCwgNjI1fSwKLSB7MTAwOCwgNjI1LDEwMDgsIDYyNX0sCi0gezg0MCwgNzUwLCA4NDAsIDc1MH0sCi0gezkzNiwgODM2LCA5MzYsIDgzNn0KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX0NIVFZEYXRhU3RydWN0ICBYR0lfQ0hUVlVQQUxEYXRhW10gPSB7CisJezEwMDgsIDYyNSwgMTAwOCwgNjI1fSwKKwl7MTAwOCwgNjI1LCAxMDA4LCA2MjV9LAorCXsxMDA4LCA2MjUsIDEwMDgsIDYyNX0sCisJezEwMDgsIDYyNSwgMTAwOCwgNjI1fSwKKwl7IDg0MCwgNzUwLCAgODQwLCA3NTB9LAorCXsgOTM2LCA4MzYsICA5MzYsIDgzNn0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0NIVFZEYXRhU3RydWN0ICBYR0lfQ0hUVk9QQUxEYXRhW10gPQotewotIHsxMDA4LCA2MjUsMTAwOCwgNjI1fSwKLSB7MTAwOCwgNjI1LDEwMDgsIDYyNX0sCi0gezEwMDgsIDYyNSwxMDA4LCA2MjV9LAotIHsxMDA4LCA2MjUsMTAwOCwgNjI1fSwKLSB7ODQwLCA2MjUsIDg0MCwgNjI1fSwKLSB7OTYwLCA3NTAsIDk2MCwgNzUwfQorc3RhdGljIHN0cnVjdCBYR0kzMzBfQ0hUVkRhdGFTdHJ1Y3QgIFhHSV9DSFRWT1BBTERhdGFbXSA9IHsKKwl7MTAwOCwgNjI1LCAxMDA4LCA2MjV9LAorCXsxMDA4LCA2MjUsIDEwMDgsIDYyNX0sCisJezEwMDgsIDYyNSwgMTAwOCwgNjI1fSwKKwl7MTAwOCwgNjI1LCAxMDA4LCA2MjV9LAorCXs4NDAsICA2MjUsICA4NDAsIDYyNX0sCisJezk2MCwgIDc1MCwgIDk2MCwgNzUwfQogfTsKIAotc3RhdGljIHN0cnVjdCBYR0lfTFZEU0NSVDFIRGF0YVN0cnVjdCAgWEdJX0xWRFNDUlQxMTAyNHg3NjhfMV9IW10gPQotewotCSAgICAgICAgLyogQ1IwMCxDUjAyLENSMDMsQ1IwNCxDUjA1LFNSMEIsU1IwQyxTUjBFICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweDRCLDB4MjcsMHg4RiwweDMyLDB4MUIsMHgwMCwweDQ1LDB4MDAgfX0sIC8qIDAwICgzMjB4KSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHg0QiwweDI3LDB4OEYsMHgyQiwweDAzLDB4MDAsMHg0NCwweDAwIH19LCAvKiAwMSAoMzYweCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4NTUsMHgzMSwweDk5LDB4NDYsMHgxRCwweDAwLDB4NTUsMHgwMCB9fSwgLyogMDIgKDQwMHgpICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweDYzLDB4M0YsMHg4NywweDRBLDB4OTMsMHgwMCwweDAxLDB4MDAgfX0sIC8qIDAzICg1MTJ4KSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHg3MywweDRGLDB4OTcsMHg1NSwweDg2LDB4MDAsMHgwNSwweDAwIH19LCAvKiAwNCAoNjQweCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4NzMsMHg0RiwweDk3LDB4NTUsMHg4NiwweDAwLDB4MDUsMHgwMCB9fSwgLyogMDUgKDcyMHgpICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweDg3LDB4NjMsMHg4QiwweDY5LDB4MUEsMHgwMCwweDI2LDB4MDAgfX0sIC8qIDA2ICg4MDB4KSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHhBMywweDdGLDB4ODcsMHg4NiwweDk3LDB4MDAsMHgwMiwweDAwIH19IC8qIDA3ICgxMDI0eCkgKi8KKy8qIENSMDAsQ1IwMixDUjAzLENSMDQsQ1IwNSxTUjBCLFNSMEMsU1IwRSAqLworc3RhdGljIHN0cnVjdCBYR0lfTFZEU0NSVDFIRGF0YVN0cnVjdCAgWEdJX0xWRFNDUlQxMTAyNHg3NjhfMV9IW10gPSB7CisJeyB7MHg0QiwgMHgyNywgMHg4RiwgMHgzMiwgMHgxQiwgMHgwMCwgMHg0NSwgMHgwMH0gfSwgLyogMDAgKDMyMHgpICovCisJeyB7MHg0QiwgMHgyNywgMHg4RiwgMHgyQiwgMHgwMywgMHgwMCwgMHg0NCwgMHgwMH0gfSwgLyogMDEgKDM2MHgpICovCisJeyB7MHg1NSwgMHgzMSwgMHg5OSwgMHg0NiwgMHgxRCwgMHgwMCwgMHg1NSwgMHgwMH0gfSwgLyogMDIgKDQwMHgpICovCisJeyB7MHg2MywgMHgzRiwgMHg4NywgMHg0QSwgMHg5MywgMHgwMCwgMHgwMSwgMHgwMH0gfSwgLyogMDMgKDUxMngpICovCisJeyB7MHg3MywgMHg0RiwgMHg5NywgMHg1NSwgMHg4NiwgMHgwMCwgMHgwNSwgMHgwMH0gfSwgLyogMDQgKDY0MHgpICovCisJeyB7MHg3MywgMHg0RiwgMHg5NywgMHg1NSwgMHg4NiwgMHgwMCwgMHgwNSwgMHgwMH0gfSwgLyogMDUgKDcyMHgpICovCisJeyB7MHg4NywgMHg2MywgMHg4QiwgMHg2OSwgMHgxQSwgMHgwMCwgMHgyNiwgMHgwMH0gfSwgLyogMDYgKDgwMHgpICovCisJeyB7MHhBMywgMHg3RiwgMHg4NywgMHg4NiwgMHg5NywgMHgwMCwgMHgwMiwgMHgwMH0gfSAgLyogMDcgKDEwMjR4KSAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBYR0lfTFZEU0NSVDFIRGF0YVN0cnVjdCAgWEdJX0xWRFNDUlQxMTI4MHgxMDI0XzFfSFtdID0KLXsKLQkJLyogQ1IwMCxDUjAyLENSMDMsQ1IwNCxDUjA1LFNSMEIsU1IwQyxTUjBFICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweDU2LDB4MjcsMHg5QSwweDMwLDB4MUUsMHgwMCwweDA1LDB4MDAgfX0sIC8qIDAwICgzMjB4KSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHg1NiwweDI3LDB4OUEsMHgzMCwweDFFLDB4MDAsMHgwNSwweDAwIH19LCAvKiAwMSAoMzYweCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4NjAsMHgzMSwweDg0LDB4M0EsMHg4OCwweDAwLDB4MDEsMHgwMCB9fSwgLyogMDIgKDQwMHgpICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweDZFLDB4M0YsMHg5MiwweDQ4LDB4OTYsMHgwMCwweDAxLDB4MDAgfX0sIC8qIDAzICg1MTJ4KSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHg3RSwweDRGLDB4ODIsMHg1OCwweDA2LDB4MDAsMHgwNiwweDAwIH19LCAvKiAwNCAoNjQweCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4N0UsMHg0RiwweDgyLDB4NTgsMHgwNiwweDAwLDB4MDYsMHgwMCB9fSwgLyogMDUgKDcyMHgpICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweDkyLDB4NjMsMHg5NiwweDZDLDB4MUEsMHgwMCwweDA2LDB4MDAgfX0sIC8qIDA2ICg4MDB4KSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHhBRSwweDdGLDB4OTIsMHg4OCwweDk2LDB4MDAsMHgwMiwweDAwIH19LCAvKiAwNyAoMTAyNHgpICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweENFLDB4OUYsMHg5MiwweEE4LDB4MTYsMHgwMCwweDA3LDB4MDAgfX0gLyogMDggKDEyODB4KSAqLworLyogQ1IwMCxDUjAyLENSMDMsQ1IwNCxDUjA1LFNSMEIsU1IwQyxTUjBFICovCitzdGF0aWMgc3RydWN0IFhHSV9MVkRTQ1JUMUhEYXRhU3RydWN0ICBYR0lfTFZEU0NSVDExMjgweDEwMjRfMV9IW10gPSB7CisJeyB7MHg1NiwgMHgyNywgMHg5QSwgMHgzMCwgMHgxRSwgMHgwMCwgMHgwNSwgMHgwMCB9IH0sIC8qIDAwICgzMjB4KSAqLworCXsgezB4NTYsIDB4MjcsIDB4OUEsIDB4MzAsIDB4MUUsIDB4MDAsIDB4MDUsIDB4MDAgfSB9LCAvKiAwMSAoMzYweCkgKi8KKwl7IHsweDYwLCAweDMxLCAweDg0LCAweDNBLCAweDg4LCAweDAwLCAweDAxLCAweDAwIH0gfSwgLyogMDIgKDQwMHgpICovCisJeyB7MHg2RSwgMHgzRiwgMHg5MiwgMHg0OCwgMHg5NiwgMHgwMCwgMHgwMSwgMHgwMCB9IH0sIC8qIDAzICg1MTJ4KSAqLworCXsgezB4N0UsIDB4NEYsIDB4ODIsIDB4NTgsIDB4MDYsIDB4MDAsIDB4MDYsIDB4MDAgfSB9LCAvKiAwNCAoNjQweCkgKi8KKwl7IHsweDdFLCAweDRGLCAweDgyLCAweDU4LCAweDA2LCAweDAwLCAweDA2LCAweDAwIH0gfSwgLyogMDUgKDcyMHgpICovCisJeyB7MHg5MiwgMHg2MywgMHg5NiwgMHg2QywgMHgxQSwgMHgwMCwgMHgwNiwgMHgwMCB9IH0sIC8qIDA2ICg4MDB4KSAqLworCXsgezB4QUUsIDB4N0YsIDB4OTIsIDB4ODgsIDB4OTYsIDB4MDAsIDB4MDIsIDB4MDAgfSB9LCAvKiAwNyAoMTAyNHgpICovCisJeyB7MHhDRSwgMHg5RiwgMHg5MiwgMHhBOCwgMHgxNiwgMHgwMCwgMHgwNywgMHgwMCB9IH0gIC8qIDA4ICgxMjgweCkgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJX0xWRFNDUlQxSERhdGFTdHJ1Y3QgIFhHSV9MVkRTQ1JUMTEwMjR4NzY4XzJfSFtdID0KLXsKLQkJLyogQ1IwMCxDUjAyLENSMDMsQ1IwNCxDUjA1LFNSMEIsU1IwQyxTUjBFICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweDYzLDB4MjcsMHg4NywweDNCLDB4OEMsMHgwMCwweDAxLDB4MDAgfX0sIC8qIDAwICgzMjB4KSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHg2MywweDI3LDB4ODcsMHgzQiwweDhDLDB4MDAsMHgwMSwweDAwIH19LCAvKiAwMSAoMzYweCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4NjMsMHgzMSwweDg3LDB4M0QsMHg4RSwweDAwLDB4MDEsMHgwMCB9fSwgLyogMDIgKDQwMHgpICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweDYzLDB4M0YsMHg4NywweDQ1LDB4OTYsMHgwMCwweDAxLDB4MDAgfX0sIC8qIDAzICg1MTJ4KSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHhBMywweDRGLDB4ODcsMHg2RSwweDlGLDB4MDAsMHgwNiwweDAwIH19LCAvKiAwNCAoNjQweCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4QTMsMHg0RiwweDg3LDB4NkUsMHg5RiwweDAwLDB4MDYsMHgwMCB9fSwgLyogMDUgKDcyMHgpICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweEEzLDB4NjMsMHg4NywweDc4LDB4ODksMHgwMCwweDAyLDB4MDAgfX0sIC8qIDA2ICg4MDB4KSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHhBMywweDdGLDB4ODcsMHg4NiwweDk3LDB4MDAsMHgwMiwweDAwIH19IC8qIDA3ICgxMDI0eCkgKi8KKy8qIENSMDAsQ1IwMixDUjAzLENSMDQsQ1IwNSxTUjBCLFNSMEMsU1IwRSAqLworc3RhdGljIHN0cnVjdCBYR0lfTFZEU0NSVDFIRGF0YVN0cnVjdCAgWEdJX0xWRFNDUlQxMTAyNHg3NjhfMl9IW10gPSB7CisJeyB7MHg2MywgMHgyNywgMHg4NywgMHgzQiwgMHg4QywgMHgwMCwgMHgwMSwgMHgwMH0gfSwgLyogMDAgKDMyMHgpICovCisJeyB7MHg2MywgMHgyNywgMHg4NywgMHgzQiwgMHg4QywgMHgwMCwgMHgwMSwgMHgwMH0gfSwgLyogMDEgKDM2MHgpICovCisJeyB7MHg2MywgMHgzMSwgMHg4NywgMHgzRCwgMHg4RSwgMHgwMCwgMHgwMSwgMHgwMH0gfSwgLyogMDIgKDQwMHgpICovCisJeyB7MHg2MywgMHgzRiwgMHg4NywgMHg0NSwgMHg5NiwgMHgwMCwgMHgwMSwgMHgwMH0gfSwgLyogMDMgKDUxMngpICovCisJeyB7MHhBMywgMHg0RiwgMHg4NywgMHg2RSwgMHg5RiwgMHgwMCwgMHgwNiwgMHgwMH0gfSwgLyogMDQgKDY0MHgpICovCisJeyB7MHhBMywgMHg0RiwgMHg4NywgMHg2RSwgMHg5RiwgMHgwMCwgMHgwNiwgMHgwMH0gfSwgLyogMDUgKDcyMHgpICovCisJeyB7MHhBMywgMHg2MywgMHg4NywgMHg3OCwgMHg4OSwgMHgwMCwgMHgwMiwgMHgwMH0gfSwgLyogMDYgKDgwMHgpICovCisJeyB7MHhBMywgMHg3RiwgMHg4NywgMHg4NiwgMHg5NywgMHgwMCwgMHgwMiwgMHgwMH0gfSAgLyogMDcgKDEwMjR4KSAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBYR0lfTFZEU0NSVDFIRGF0YVN0cnVjdCAgWEdJX0xWRFNDUlQxMTI4MHgxMDI0XzJfSFtdID0KLXsKLSAgICAgICAgICAgICAgICAvKiBDUjAwLENSMDIsQ1IwMyxDUjA0LENSMDUsU1IwQixTUjBDLFNSMEUgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4N0UsMHgzQiwweDlBLDB4NDQsMHgxMiwweDAwLDB4MDEsMHgwMCB9fSwgLyogMDAgKDMyMHgpICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweDdFLDB4M0IsMHg5QSwweDQ0LDB4MTIsMHgwMCwweDAxLDB4MDAgfX0sIC8qIDAxICgzNjB4KSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHg3RSwweDQwLDB4ODQsMHg0OSwweDkxLDB4MDAsMHgwMSwweDAwIH19LCAvKiAwMiAoNDAweCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4N0UsMHg0NywweDkzLDB4NTAsMHg5RSwweDAwLDB4MDEsMHgwMCB9fSwgLyogMDMgKDUxMngpICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweENFLDB4NzcsMHg4QSwweDgwLDB4OEUsMHgwMCwweDAyLDB4MDAgfX0sIC8qIDA0ICg2NDB4KSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHhDRSwweDc3LDB4OEEsMHg4MCwweDhFLDB4MDAsMHgwMiwweDAwIH19LCAvKiAwNSAoNzIweCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4Q0UsMHg4MSwweDk0LDB4OEEsMHg5OCwweDAwLDB4MDIsMHgwMCB9fSwgLyogMDYgKDgwMHgpICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweENFLDB4OEYsMHg4MiwweDk4LDB4MDYsMHgwMCwweDA3LDB4MDAgfX0sIC8qIDA3ICgxMDI0eCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4Q0UsMHg5RiwweDkyLDB4QTgsMHgxNiwweDAwLDB4MDcsMHgwMCB9fSAvKiAwOCAoMTI4MHgpICovCisvKiBDUjAwLENSMDIsQ1IwMyxDUjA0LENSMDUsU1IwQixTUjBDLFNSMEUgKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJX0xWRFNDUlQxSERhdGFTdHJ1Y3QgIFhHSV9MVkRTQ1JUMTEyODB4MTAyNF8yX0hbXSA9IHsKKwl7IHsweDdFLCAweDNCLCAweDlBLCAweDQ0LCAweDEyLCAweDAwLCAweDAxLCAweDAwfSB9LCAvKiAwMCAoMzIweCkgKi8KKwl7IHsweDdFLCAweDNCLCAweDlBLCAweDQ0LCAweDEyLCAweDAwLCAweDAxLCAweDAwfSB9LCAvKiAwMSAoMzYweCkgKi8KKwl7IHsweDdFLCAweDQwLCAweDg0LCAweDQ5LCAweDkxLCAweDAwLCAweDAxLCAweDAwfSB9LCAvKiAwMiAoNDAweCkgKi8KKwl7IHsweDdFLCAweDQ3LCAweDkzLCAweDUwLCAweDlFLCAweDAwLCAweDAxLCAweDAwfSB9LCAvKiAwMyAoNTEyeCkgKi8KKwl7IHsweENFLCAweDc3LCAweDhBLCAweDgwLCAweDhFLCAweDAwLCAweDAyLCAweDAwfSB9LCAvKiAwNCAoNjQweCkgKi8KKwl7IHsweENFLCAweDc3LCAweDhBLCAweDgwLCAweDhFLCAweDAwLCAweDAyLCAweDAwfSB9LCAvKiAwNSAoNzIweCkgKi8KKwl7IHsweENFLCAweDgxLCAweDk0LCAweDhBLCAweDk4LCAweDAwLCAweDAyLCAweDAwfSB9LCAvKiAwNiAoODAweCkgKi8KKwl7IHsweENFLCAweDhGLCAweDgyLCAweDk4LCAweDA2LCAweDAwLCAweDA3LCAweDAwfSB9LCAvKiAwNyAoMTAyNHgpICovCisJeyB7MHhDRSwgMHg5RiwgMHg5MiwgMHhBOCwgMHgxNiwgMHgwMCwgMHgwNywgMHgwMH0gfSAgLyogMDggKDEyODB4KSAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBYR0lfTFZEU0NSVDFIRGF0YVN0cnVjdCBYR0lfTFZEU0NSVDExNDAweDEwNTBfMV9IW10gPQoteyAgICAgICAgICAgICAgIC8qIENSMDAsQ1IwMixDUjAzLENSMDQsQ1IwNSxTUjBCLFNSMEMsU1IwRSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHg0NywweDI3LDB4OEIsMHgyQywweDFBLDB4MDAsMHgwNSwweDAwIH19LCAvKiAwMCAoMzIweCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4NDcsMHgyNywweDhCLDB4MzAsMHgxRSwweDAwLDB4MDUsMHgwMCB9fSwgLyogMDEgKDM2MHgpICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweDUxLDB4MzEsMHg5NSwweDM2LDB4MDQsMHgwMCwweDAxLDB4MDAgfX0sIC8qIDAyICg0MDB4KSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHg1RiwweDNGLDB4ODMsMHg0NCwweDkyLDB4MDAsMHgwMSwweDAwIH19LCAvKiAwMyAoNTEyeCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4NkYsMHg0RiwweDkzLDB4NTQsMHg4MiwweDAwLDB4MDUsMHgwMCB9fSwgLyogMDQgKDY0MHgpICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweDZGLDB4NEYsMHg5MywweDU0LDB4ODIsMHgwMCwweDA1LDB4MDAgfX0sIC8qIDA1ICg3MjB4KSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHg4MywweDYzLDB4ODcsMHg2OCwweDE2LDB4MDAsMHgwNiwweDAwIH19LCAvKiAwNiAoODAweCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4OUYsMHg3RiwweDgzLDB4ODQsMHg5MiwweDAwLDB4MDIsMHgwMCB9fSwgLyogMDcgKDEwMjR4KSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHhCRiwweDlGLDB4ODMsMHhBNCwweDEyLDB4MDAsMHgwNywweDAwIH19LCAvKiAwOCAoMTI4MHgpICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweENFLDB4QUUsMHg5MiwweEIzLDB4MDEsMHgwMCwweDAzLDB4MDAgfX0gLyogMDkgKDE0MDB4KSAqLworLyogQ1IwMCxDUjAyLENSMDMsQ1IwNCxDUjA1LFNSMEIsU1IwQyxTUjBFICovCitzdGF0aWMgc3RydWN0IFhHSV9MVkRTQ1JUMUhEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTE0MDB4MTA1MF8xX0hbXSA9IHsKKwl7IHsweDQ3LCAweDI3LCAweDhCLCAweDJDLCAweDFBLCAweDAwLCAweDA1LCAweDAwfSB9LCAvKiAwMCAoMzIweCkgKi8KKwl7IHsweDQ3LCAweDI3LCAweDhCLCAweDMwLCAweDFFLCAweDAwLCAweDA1LCAweDAwfSB9LCAvKiAwMSAoMzYweCkgKi8KKwl7IHsweDUxLCAweDMxLCAweDk1LCAweDM2LCAweDA0LCAweDAwLCAweDAxLCAweDAwfSB9LCAvKiAwMiAoNDAweCkgKi8KKwl7IHsweDVGLCAweDNGLCAweDgzLCAweDQ0LCAweDkyLCAweDAwLCAweDAxLCAweDAwfSB9LCAvKiAwMyAoNTEyeCkgKi8KKwl7IHsweDZGLCAweDRGLCAweDkzLCAweDU0LCAweDgyLCAweDAwLCAweDA1LCAweDAwfSB9LCAvKiAwNCAoNjQweCkgKi8KKwl7IHsweDZGLCAweDRGLCAweDkzLCAweDU0LCAweDgyLCAweDAwLCAweDA1LCAweDAwfSB9LCAvKiAwNSAoNzIweCkgKi8KKwl7IHsweDgzLCAweDYzLCAweDg3LCAweDY4LCAweDE2LCAweDAwLCAweDA2LCAweDAwfSB9LCAvKiAwNiAoODAweCkgKi8KKwl7IHsweDlGLCAweDdGLCAweDgzLCAweDg0LCAweDkyLCAweDAwLCAweDAyLCAweDAwfSB9LCAvKiAwNyAoMTAyNHgpICovCisJeyB7MHhCRiwgMHg5RiwgMHg4MywgMHhBNCwgMHgxMiwgMHgwMCwgMHgwNywgMHgwMH0gfSwgLyogMDggKDEyODB4KSAqLworCXsgezB4Q0UsIDB4QUUsIDB4OTIsIDB4QjMsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDB9IH0gIC8qIDA5ICgxNDAweCkgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJX0xWRFNDUlQxSERhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTQwMHgxMDUwXzJfSFtdID0KLXsgICAgICAgICAgICAgICAvKiBDUjAwLENSMDIsQ1IwMyxDUjA0LENSMDUsU1IwQixTUjBDLFNSMEUgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4NzYsMHgzRiwweDgzLDB4NDUsMHg4QywweDAwLDB4NDEsMHgwMCB9fSwgLyogMDAgKDMyMHgpICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweDc2LDB4M0YsMHg4MywweDQ1LDB4OEMsMHgwMCwweDQxLDB4MDAgfX0sIC8qIDAxICgzNjB4KSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHg3NiwweDMxLDB4OUEsMHg0OCwweDlGLDB4MDAsMHg0MSwweDAwIH19LCAvKiAwMiAoNDAweCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4NzYsMHgzRiwweDlBLDB4NEYsMHg5NiwweDAwLDB4NDEsMHgwMCB9fSwgLyogMDMgKDUxMngpICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweENFLDB4N0UsMHg4MiwweDg3LDB4OUUsMHgwMCwweDAyLDB4MDAgfX0sIC8qIDA0ICg2NDB4KSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHhDRSwweDdFLDB4ODIsMHg4NywweDlFLDB4MDAsMHgwMiwweDAwIH19LCAvKiAwNSAoNzIweCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4Q0UsMHg2MywweDkyLDB4OTYsMHgwNCwweDAwLDB4MDcsMHgwMCB9fSwgLyogMDYgKDgwMHgpICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweENFLDB4N0YsMHg5MiwweEE0LDB4MTIsMHgwMCwweDA3LDB4MDAgfX0sIC8qIDA3ICgxMDI0eCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4Q0UsMHg5RiwweDkyLDB4QjQsMHgwMiwweDAwLDB4MDMsMHgwMCB9fSwgLyogMDggKDEyODB4KSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHhDRSwweEFFLDB4OTIsMHhCQywweDBBLDB4MDAsMHgwMywweDAwIH19IC8qIDA5ICgxNDAweCkgKi8KKy8qIENSMDAsQ1IwMixDUjAzLENSMDQsQ1IwNSxTUjBCLFNSMEMsU1IwRSAqLworc3RhdGljIHN0cnVjdCBYR0lfTFZEU0NSVDFIRGF0YVN0cnVjdCBYR0lfTFZEU0NSVDExNDAweDEwNTBfMl9IW10gPSB7CisJeyB7MHg3NiwgMHgzRiwgMHg4MywgMHg0NSwgMHg4QywgMHgwMCwgMHg0MSwgMHgwMH0gfSwgLyogMDAgKDMyMHgpICovCisJeyB7MHg3NiwgMHgzRiwgMHg4MywgMHg0NSwgMHg4QywgMHgwMCwgMHg0MSwgMHgwMH0gfSwgLyogMDEgKDM2MHgpICovCisJeyB7MHg3NiwgMHgzMSwgMHg5QSwgMHg0OCwgMHg5RiwgMHgwMCwgMHg0MSwgMHgwMH0gfSwgLyogMDIgKDQwMHgpICovCisJeyB7MHg3NiwgMHgzRiwgMHg5QSwgMHg0RiwgMHg5NiwgMHgwMCwgMHg0MSwgMHgwMH0gfSwgLyogMDMgKDUxMngpICovCisJeyB7MHhDRSwgMHg3RSwgMHg4MiwgMHg4NywgMHg5RSwgMHgwMCwgMHgwMiwgMHgwMH0gfSwgLyogMDQgKDY0MHgpICovCisJeyB7MHhDRSwgMHg3RSwgMHg4MiwgMHg4NywgMHg5RSwgMHgwMCwgMHgwMiwgMHgwMH0gfSwgLyogMDUgKDcyMHgpICovCisJeyB7MHhDRSwgMHg2MywgMHg5MiwgMHg5NiwgMHgwNCwgMHgwMCwgMHgwNywgMHgwMH0gfSwgLyogMDYgKDgwMHgpICovCisJeyB7MHhDRSwgMHg3RiwgMHg5MiwgMHhBNCwgMHgxMiwgMHgwMCwgMHgwNywgMHgwMH0gfSwgLyogMDcgKDEwMjR4KSAqLworCXsgezB4Q0UsIDB4OUYsIDB4OTIsIDB4QjQsIDB4MDIsIDB4MDAsIDB4MDMsIDB4MDB9IH0sIC8qIDA4ICgxMjgweCkgKi8KKwl7IHsweENFLCAweEFFLCAweDkyLCAweEJDLCAweDBBLCAweDAwLCAweDAzLCAweDAwfSB9ICAvKiAwOSAoMTQwMHgpICovCiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSV9MVkRTQ1JUMUhEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTE2MDB4MTIwMF8xX0hbXSA9CiAvKiA7MzAybHYgY2hhbm5lbEEgW3ljY2hlbl0gMTIvMDUvMDIgTENESFQ9MjA0OCAqLwoteyAgIC8qIDsgQ1IwMCxDUjAyLENSMDMsQ1IwNCxDUjA1LFNSMEIsU1IwQyxTUjBFICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweDVCLDB4MjcsMHg5RiwweDMyLDB4MEEsMHgwMCwweDAxLDB4MDAgfX0sLyogMDAgKDMyMHgpICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweDVCLDB4MjcsMHg5RiwweDMyLDB4MEEsMHgwMCwweDAxLDB4MDAgfX0sLyogMDEgKDM2MHgpICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweDY1LDB4MzEsMHg4OSwweDNDLDB4OTQsMHgwMCwweDAxLDB4MDAgfX0sLyogMDIgKDQwMHgpICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweDczLDB4M0YsMHg5NywweDRBLDB4ODIsMHgwMCwweDA1LDB4MDAgfX0sLyogMDMgKDUxMngpICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweDgzLDB4NEYsMHg4NywweDUxLDB4MDksMHgwMCwweDA2LDB4MDAgfX0sLyogMDQgKDY0MHgpICovCi0JCXt7ICAgICAgMHg4MywweDRGLDB4ODcsMHg1MSwweDA5LDB4MDAsMHgwNiwweDAwIH19LC8qIDA1ICg3MjB4KSAqLwotCQl7eyAgICAgIDB4OTcsMHg2MywweDlCLDB4NjUsMHgxRCwweDAwLDB4MDYsMHhGMCB9fSwvKiAwNiAoODAweCkgKi8KLQkJe3sgICAgICAweEIzLDB4N0YsMHg5NywweDgxLDB4OTksMHgwMCwweDAyLDB4MDAgfX0sLyogMDcgKDEwMjR4KSAqLwotCQl7eyAgICAgIDB4RDMsMHg5RiwweDk3LDB4QTEsMHgxOSwweDAwLDB4MDcsMHgwMCB9fSwvKiAwOCAoMTI4MHgpICovCi0JCXt7ICAgICAgMHhFMiwweEFFLDB4ODYsMHhCOSwweDkxLDB4MDAsMHgwMywweDAwIH19LC8qIDA5ICgxNDAweCkgKi8KLQkJe3sgICAgICAweEZCLDB4QzcsMHg5RiwweEM5LDB4ODEsMHgwMCwweDA3LDB4MDAgfX0gLyogMEEgKDE2MDB4KSAqLworLyogOyBDUjAwLENSMDIsQ1IwMyxDUjA0LENSMDUsU1IwQixTUjBDLFNSMEUgKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJX0xWRFNDUlQxSERhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTYwMHgxMjAwXzFfSFtdID0geworCXsgezB4NUIsIDB4MjcsIDB4OUYsIDB4MzIsIDB4MEEsIDB4MDAsIDB4MDEsIDB4MDB9IH0sIC8qIDAwICgzMjB4KSAqLworCXsgezB4NUIsIDB4MjcsIDB4OUYsIDB4MzIsIDB4MEEsIDB4MDAsIDB4MDEsIDB4MDB9IH0sIC8qIDAxICgzNjB4KSAqLworCXsgezB4NjUsIDB4MzEsIDB4ODksIDB4M0MsIDB4OTQsIDB4MDAsIDB4MDEsIDB4MDB9IH0sIC8qIDAyICg0MDB4KSAqLworCXsgezB4NzMsIDB4M0YsIDB4OTcsIDB4NEEsIDB4ODIsIDB4MDAsIDB4MDUsIDB4MDB9IH0sIC8qIDAzICg1MTJ4KSAqLworCXsgezB4ODMsIDB4NEYsIDB4ODcsIDB4NTEsIDB4MDksIDB4MDAsIDB4MDYsIDB4MDB9IH0sIC8qIDA0ICg2NDB4KSAqLworCXsgezB4ODMsIDB4NEYsIDB4ODcsIDB4NTEsIDB4MDksIDB4MDAsIDB4MDYsIDB4MDB9IH0sIC8qIDA1ICg3MjB4KSAqLworCXsgezB4OTcsIDB4NjMsIDB4OUIsIDB4NjUsIDB4MUQsIDB4MDAsIDB4MDYsIDB4RjB9IH0sIC8qIDA2ICg4MDB4KSAqLworCXsgezB4QjMsIDB4N0YsIDB4OTcsIDB4ODEsIDB4OTksIDB4MDAsIDB4MDIsIDB4MDB9IH0sIC8qIDA3ICgxMDI0eCkgKi8KKwl7IHsweEQzLCAweDlGLCAweDk3LCAweEExLCAweDE5LCAweDAwLCAweDA3LCAweDAwfSB9LCAvKiAwOCAoMTI4MHgpICovCisJeyB7MHhFMiwgMHhBRSwgMHg4NiwgMHhCOSwgMHg5MSwgMHgwMCwgMHgwMywgMHgwMH0gfSwgLyogMDkgKDE0MDB4KSAqLworCXsgezB4RkIsIDB4QzcsIDB4OUYsIDB4QzksIDB4ODEsIDB4MDAsIDB4MDcsIDB4MDB9IH0gIC8qIDBBICgxNjAweCkgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJX0xWRFNDUlQxVkRhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTAyNHg3NjhfMV9WW10gPQoteyAgICAgICAgICAgICAgIC8qIENSMDYsQ1IwNyxDUjEwLENSMTEsQ1IxNSxDUjE2LFNSMEErQ1IwOSg1LT43KSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHg5NywweDFGLDB4NjAsMHg4NywweDVELDB4ODMsMHgxMCAgICAgIH19LCAvKiAwMCAoeDM1MCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4QjQsMHgxRiwweDkyLDB4ODksMHg4RiwweEI1LDB4MzAgICAgICB9fSwgLyogMDEgKHg0MDApICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweDA0LDB4M0UsMHhFMiwweDg5LDB4REYsMHgwNSwweDAwICAgICAgfX0sIC8qIDAyICh4NDgwKSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHg3QywweEYwLDB4NUEsMHg4RiwweDU3LDB4N0QsMHhBMCAgICAgIH19LCAvKiAwMyAoeDYwMCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4MjQsMHhGNSwweDAyLDB4ODgsMHhGRiwweDI1LDB4OTAgICAgICB9fSAvKiAwNCAoeDc2OCkgKi8KKy8qIENSMDYsQ1IwNyxDUjEwLENSMTEsQ1IxNSxDUjE2LFNSMEErQ1IwOSg1LT43KSAqLworc3RhdGljIHN0cnVjdCBYR0lfTFZEU0NSVDFWRGF0YVN0cnVjdCBYR0lfTFZEU0NSVDExMDI0eDc2OF8xX1ZbXSA9IHsKKwl7IHsweDk3LCAweDFGLCAweDYwLCAweDg3LCAweDVELCAweDgzLCAweDEwfSB9LCAvKiAwMCAoeDM1MCkgKi8KKwl7IHsweEI0LCAweDFGLCAweDkyLCAweDg5LCAweDhGLCAweEI1LCAweDMwfSB9LCAvKiAwMSAoeDQwMCkgKi8KKwl7IHsweDA0LCAweDNFLCAweEUyLCAweDg5LCAweERGLCAweDA1LCAweDAwfSB9LCAvKiAwMiAoeDQ4MCkgKi8KKwl7IHsweDdDLCAweEYwLCAweDVBLCAweDhGLCAweDU3LCAweDdELCAweEEwfSB9LCAvKiAwMyAoeDYwMCkgKi8KKwl7IHsweDI0LCAweEY1LCAweDAyLCAweDg4LCAweEZGLCAweDI1LCAweDkwfSB9ICAvKiAwNCAoeDc2OCkgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJX0xWRFNDUlQxVkRhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTAyNHg3NjhfMl9WW10gPQoteyAgICAgICAgICAgICAgIC8qIENSMDYsQ1IwNyxDUjEwLENSMTEsQ1IxNSxDUjE2LFNSMEEgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4MjQsMHhCQiwweDMxLDB4ODcsMHg1RCwweDI1LDB4MzAgICAgICB9fSwgLyogMDAgKHgzNTApICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweDI0LDB4QkIsMHg0QSwweDgwLDB4OEYsMHgyNSwweDMwICAgICAgfX0sIC8qIDAxICh4NDAwKSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHgyNCwweEJCLDB4NzIsMHg4OCwweERGLDB4MjUsMHgzMCAgICAgIH19LCAvKiAwMiAoeDQ4MCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4MjQsMHhGMSwweEFFLDB4ODQsMHg1NywweDI1LDB4QjAgICAgICB9fSwgLyogMDMgKHg2MDApICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweDI0LDB4RjUsMHgwMiwweDg4LDB4RkYsMHgyNSwweDkwICAgICAgfX0gLyogMDQgKHg3NjgpICovCisvKiBDUjA2LENSMDcsQ1IxMCxDUjExLENSMTUsQ1IxNixTUjBBICovCitzdGF0aWMgc3RydWN0IFhHSV9MVkRTQ1JUMVZEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTEwMjR4NzY4XzJfVltdID0geworCXsgezB4MjQsIDB4QkIsIDB4MzEsIDB4ODcsIDB4NUQsIDB4MjUsIDB4MzB9IH0sIC8qIDAwICh4MzUwKSAqLworCXsgezB4MjQsIDB4QkIsIDB4NEEsIDB4ODAsIDB4OEYsIDB4MjUsIDB4MzB9IH0sIC8qIDAxICh4NDAwKSAqLworCXsgezB4MjQsIDB4QkIsIDB4NzIsIDB4ODgsIDB4REYsIDB4MjUsIDB4MzB9IH0sIC8qIDAyICh4NDgwKSAqLworCXsgezB4MjQsIDB4RjEsIDB4QUUsIDB4ODQsIDB4NTcsIDB4MjUsIDB4QjB9IH0sIC8qIDAzICh4NjAwKSAqLworCXsgezB4MjQsIDB4RjUsIDB4MDIsIDB4ODgsIDB4RkYsIDB4MjUsIDB4OTB9IH0gIC8qIDA0ICh4NzY4KSAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBYR0lfTFZEU0NSVDFWRGF0YVN0cnVjdCBYR0lfTFZEU0NSVDExMjgweDEwMjRfMV9WW10gPQoteyAgICAgICAgICAgICAgIC8qIENSMDYsQ1IwNyxDUjEwLENSMTEsQ1IxNSxDUjE2LFNSMEEgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgICAweDg2LDB4MUYsMHg1RSwweDgyLDB4NUQsMHg4NywweDAwICAgICB9fSwgLyogMDAgKHgzNTApICovCi0gICAgICAgICAgICAgICAge3sgICAgICAgMHhCOCwweDFGLDB4OTAsMHg4NCwweDhGLDB4QjksMHgzMCAgICAgfX0sIC8qIDAxICh4NDAwKSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgIDB4MDgsMHgzRSwweEUwLDB4ODQsMHhERiwweDA5LDB4MDAgICAgIH19LCAvKiAwMiAoeDQ4MCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgICAweDgwLDB4RjAsMHg1OCwweDhDLDB4NTcsMHg4MSwweEEwICAgICB9fSwgLyogMDMgKHg2MDApICovCi0gICAgICAgICAgICAgICAge3sgICAgICAgMHgyOCwweEY1LDB4MDAsMHg4NCwweEZGLDB4MjksMHg5MCAgICAgfX0sIC8qIDA0ICh4NzY4KSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgIDB4MjgsMHg1QSwweDEzLDB4ODcsMHhGRiwweDI5LDB4QTkgICAgIH19IC8qIDA1ICh4MTAyNCkgKi8KKy8qIENSMDYsQ1IwNyxDUjEwLENSMTEsQ1IxNSxDUjE2LFNSMEEgKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJX0xWRFNDUlQxVkRhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTI4MHgxMDI0XzFfVltdID0geworCXsgezB4ODYsIDB4MUYsIDB4NUUsIDB4ODIsIDB4NUQsIDB4ODcsIDB4MDB9IH0sIC8qIDAwICh4MzUwKSAqLworCXsgezB4QjgsIDB4MUYsIDB4OTAsIDB4ODQsIDB4OEYsIDB4QjksIDB4MzB9IH0sIC8qIDAxICh4NDAwKSAqLworCXsgezB4MDgsIDB4M0UsIDB4RTAsIDB4ODQsIDB4REYsIDB4MDksIDB4MDB9IH0sIC8qIDAyICh4NDgwKSAqLworCXsgezB4ODAsIDB4RjAsIDB4NTgsIDB4OEMsIDB4NTcsIDB4ODEsIDB4QTB9IH0sIC8qIDAzICh4NjAwKSAqLworCXsgezB4MjgsIDB4RjUsIDB4MDAsIDB4ODQsIDB4RkYsIDB4MjksIDB4OTB9IH0sIC8qIDA0ICh4NzY4KSAqLworCXsgezB4MjgsIDB4NUEsIDB4MTMsIDB4ODcsIDB4RkYsIDB4MjksIDB4QTl9IH0gIC8qIDA1ICh4MTAyNCkgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJX0xWRFNDUlQxVkRhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTI4MHgxMDI0XzJfVltdID0KLXsgICAgICAgICAgICAgICAvKiBDUjA2LENSMDcsQ1IxMCxDUjExLENSMTUsQ1IxNixTUjBBICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweDI4LDB4RDIsMHhBRiwweDgzLDB4QUUsMHhEOCwweEExICAgICAgfX0sIC8qIDAwICh4MzUwKSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHgyOCwweEQyLDB4QzgsMHg4QywweEM3LDB4RjIsMHg4MSAgICAgIH19LCAvKiAwMSAoeDQwMCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4MjgsMHhEMiwweEYwLDB4ODQsMHhFRiwweDFBLDB4QjEgICAgICB9fSwgLyogMDIgKHg0ODApICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweDI4LDB4REUsMHgyQywweDhGLDB4MkIsMHg1NiwweDkxICAgICAgfX0sIC8qIDAzICh4NjAwKSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHgyOCwweERFLDB4ODAsMHg4MywweDdGLDB4QUEsMHg5MSAgICAgIH19LCAvKiAwNCAoeDc2OCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4MjgsMHg1QSwweDEzLDB4ODcsMHhGRiwweDI5LDB4QTkgICAgICB9fSAvKiAwNSAoeDEwMjQpICovCisvKiBDUjA2LENSMDcsQ1IxMCxDUjExLENSMTUsQ1IxNixTUjBBICovCitzdGF0aWMgc3RydWN0IFhHSV9MVkRTQ1JUMVZEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTEyODB4MTAyNF8yX1ZbXSA9IHsKKwl7IHsweDI4LCAweEQyLCAweEFGLCAweDgzLCAweEFFLCAweEQ4LCAweEExfSB9LCAvKiAwMCAoeDM1MCkgKi8KKwl7IHsweDI4LCAweEQyLCAweEM4LCAweDhDLCAweEM3LCAweEYyLCAweDgxfSB9LCAvKiAwMSAoeDQwMCkgKi8KKwl7IHsweDI4LCAweEQyLCAweEYwLCAweDg0LCAweEVGLCAweDFBLCAweEIxfSB9LCAvKiAwMiAoeDQ4MCkgKi8KKwl7IHsweDI4LCAweERFLCAweDJDLCAweDhGLCAweDJCLCAweDU2LCAweDkxfSB9LCAvKiAwMyAoeDYwMCkgKi8KKwl7IHsweDI4LCAweERFLCAweDgwLCAweDgzLCAweDdGLCAweEFBLCAweDkxfSB9LCAvKiAwNCAoeDc2OCkgKi8KKwl7IHsweDI4LCAweDVBLCAweDEzLCAweDg3LCAweEZGLCAweDI5LCAweEE5fSB9ICAvKiAwNSAoeDEwMjQpICovCiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSV9MVkRTQ1JUMVZEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTE0MDB4MTA1MF8xX1ZbXSA9Ci17ICAgICAgICAgICAgICAgLyogQ1IwNixDUjA3LENSMTAsQ1IxMSxDUjE1LENSMTYsU1IwQSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHg2QywweDFGLDB4NjAsMHg4NCwweDVELDB4NkQsMHgxMCAgICAgIH19LCAvKiAwMCAoeDM1MCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4OUUsMHgxRiwweDkzLDB4ODYsMHg4RiwweDlGLDB4MzAgICAgICB9fSwgLyogMDEgKHg0MDApICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweEVFLDB4MUYsMHhFMiwweDg2LDB4REYsMHhFRiwweDEwICAgICAgfX0sIC8qIDAyICh4NDgwKSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHg2NiwweEYwLDB4NUEsMHg4ZSwweDU3LDB4NjcsMHhBMCAgICAgIH19LCAvKiAwMyAoeDYwMCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4MEUsMHhGNSwweDAyLDB4ODYsMHhGRiwweDBGLDB4OTAgICAgICB9fSwgLyogMDQgKHg3NjgpICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweDBFLDB4NUEsMHgwMiwweDg2LDB4RkYsMHgwRiwweDg5ICAgICAgfX0sIC8qIDA1ICh4MTAyNCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4MjgsMHgxMCwweDFBLDB4ODAsMHgxOSwweDI5LDB4MEYgICAgICB9fSAvKiAwNiAoeDEwNTApICovCisvKiBDUjA2LENSMDcsQ1IxMCxDUjExLENSMTUsQ1IxNixTUjBBICovCitzdGF0aWMgc3RydWN0IFhHSV9MVkRTQ1JUMVZEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTE0MDB4MTA1MF8xX1ZbXSA9IHsKKwl7IHsweDZDLCAweDFGLCAweDYwLCAweDg0LCAweDVELCAweDZELCAweDEwfSB9LCAvKiAwMCAoeDM1MCkgKi8KKwl7IHsweDlFLCAweDFGLCAweDkzLCAweDg2LCAweDhGLCAweDlGLCAweDMwfSB9LCAvKiAwMSAoeDQwMCkgKi8KKwl7IHsweEVFLCAweDFGLCAweEUyLCAweDg2LCAweERGLCAweEVGLCAweDEwfSB9LCAvKiAwMiAoeDQ4MCkgKi8KKwl7IHsweDY2LCAweEYwLCAweDVBLCAweDhlLCAweDU3LCAweDY3LCAweEEwfSB9LCAvKiAwMyAoeDYwMCkgKi8KKwl7IHsweDBFLCAweEY1LCAweDAyLCAweDg2LCAweEZGLCAweDBGLCAweDkwfSB9LCAvKiAwNCAoeDc2OCkgKi8KKwl7IHsweDBFLCAweDVBLCAweDAyLCAweDg2LCAweEZGLCAweDBGLCAweDg5fSB9LCAvKiAwNSAoeDEwMjQpICovCisJeyB7MHgyOCwgMHgxMCwgMHgxQSwgMHg4MCwgMHgxOSwgMHgyOSwgMHgwRn0gfSAgLyogMDYgKHgxMDUwKSAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBYR0lfTFZEU0NSVDFWRGF0YVN0cnVjdCBYR0lfTFZEU0NSVDExNDAweDEwNTBfMl9WW10gPQoteyAgICAgICAgICAgICAgLyogQ1IwNixDUjA3LENSMTAsQ1IxMSxDUjE1LENSMTYsU1IwQSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHgyOCwweDkyLDB4QjYsMHg4MywweEI1LDB4Q0YsMHg4MSAgICAgIH19LCAvKiAwMCAoeDM1MCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4MjgsMHg5MiwweEQ1LDB4ODIsMHhENCwweEVFLDB4ODEgICAgICB9fSwgLyogMDEgKHg0MDApICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweDI4LDB4OTIsMHhGRCwweDhBLDB4RkMsMHgxNiwweEIxICAgICAgfX0sIC8qIDAyICh4NDgwKSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHgyOCwweEQ0LDB4MzksMHg4NiwweDU3LDB4MjksMHg4MSAgICAgIH19LCAvKiAwMyAoeDYwMCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4MjgsMHhENCwweDhELDB4OUEsMHhGRiwweDI5LDB4QTEgICAgICB9fSwgLyogMDQgKHg3NjgpICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweDI4LDB4NUEsMHgwRCwweDlBLDB4RkYsMHgyOSwweEE5ICAgICAgfX0sIC8qIDA1ICh4MTAyNCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4MjgsMHgxMCwweDFBLDB4ODcsMHgxOSwweDI5LDB4OEYgICAgICB9fSAvKiAwNiAoeDEwNTApICovCisvKiBDUjA2LENSMDcsQ1IxMCxDUjExLENSMTUsQ1IxNixTUjBBICovCitzdGF0aWMgc3RydWN0IFhHSV9MVkRTQ1JUMVZEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTE0MDB4MTA1MF8yX1ZbXSA9IHsKKwl7IHsweDI4LCAweDkyLCAweEI2LCAweDgzLCAweEI1LCAweENGLCAweDgxfSB9LCAvKiAwMCAoeDM1MCkgKi8KKwl7IHsweDI4LCAweDkyLCAweEQ1LCAweDgyLCAweEQ0LCAweEVFLCAweDgxfSB9LCAvKiAwMSAoeDQwMCkgKi8KKwl7IHsweDI4LCAweDkyLCAweEZELCAweDhBLCAweEZDLCAweDE2LCAweEIxfSB9LCAvKiAwMiAoeDQ4MCkgKi8KKwl7IHsweDI4LCAweEQ0LCAweDM5LCAweDg2LCAweDU3LCAweDI5LCAweDgxfSB9LCAvKiAwMyAoeDYwMCkgKi8KKwl7IHsweDI4LCAweEQ0LCAweDhELCAweDlBLCAweEZGLCAweDI5LCAweEExfSB9LCAvKiAwNCAoeDc2OCkgKi8KKwl7IHsweDI4LCAweDVBLCAweDBELCAweDlBLCAweEZGLCAweDI5LCAweEE5fSB9LCAvKiAwNSAoeDEwMjQpICovCisJeyB7MHgyOCwgMHgxMCwgMHgxQSwgMHg4NywgMHgxOSwgMHgyOSwgMHg4Rn0gfSAgLyogMDYgKHgxMDUwKSAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBYR0lfTFZEU0NSVDFWRGF0YVN0cnVjdCBYR0lfTFZEU0NSVDExNjAweDEyMDBfMV9WW10gPQotewotICAgICAgICAgICAgICAgLyogQ1IwNixDUjA3LENSMTAsQ1IxMSxDUjE1LENSMTYsU1IwQStDUjA5KDUtPjcpICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweGQ0LDB4MUYsMHg4MSwweDg0LDB4NUQsMHhkNSwweDEwICAgICAgfX0sIC8qIDAwICh4MzUwKSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHgwNiwweDNlLDB4YjMsMHg4NiwweDhGLDB4MDcsMHgyMCAgICAgIH19LCAvKiAwMSAoeDQwMCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4NTYsMHhiYSwweDAzLDB4ODYsMHhERiwweDU3LDB4MDAgICAgICB9fSwgLyogMDIgKHg0ODApICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweGNlLDB4RjAsMHg3YiwweDhlLDB4NTcsMHhjZiwweGEwICAgICAgfX0sIC8qIDAzICh4NjAwKSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHg3NiwweEY1LDB4MjMsMHg4NiwweEZGLDB4NzcsMHg5MCAgICAgIH19LCAvKiAwNCAoeDc2OCkgKi8KLSAgICAgICAgICAgICAgICB7eyAgICAgIDB4NzYsMHg1QSwweDIzLDB4ODYsMHhGRiwweDc3LDB4ODkgICAgICB9fSwgLyogMDUgKHgxMDI0KSAqLwotICAgICAgICAgICAgICAgIHt7ICAgICAgMHg5MCwweDEwLDB4MUEsMHg4RSwweDE5LDB4OTEsMHgyRiAgICAgIH19LCAvKiAwNiAoeDEwNTApICovCi0gICAgICAgICAgICAgICAge3sgICAgICAweDI2LDB4MTEsMHhkMywweDg2LDB4YUYsMHgyNywweDNmICAgICAgfX0gLyogMDcgKHgxMjAwKSAqLworLyogQ1IwNixDUjA3LENSMTAsQ1IxMSxDUjE1LENSMTYsU1IwQStDUjA5KDUtPjcpICovCitzdGF0aWMgc3RydWN0IFhHSV9MVkRTQ1JUMVZEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTE2MDB4MTIwMF8xX1ZbXSA9IHsKKwl7IHsweGQ0LCAweDFGLCAweDgxLCAweDg0LCAweDVELCAweGQ1LCAweDEwfSB9LCAvKiAwMCAoeDM1MCkgKi8KKwl7IHsweDA2LCAweDNlLCAweGIzLCAweDg2LCAweDhGLCAweDA3LCAweDIwfSB9LCAvKiAwMSAoeDQwMCkgKi8KKwl7IHsweDU2LCAweGJhLCAweDAzLCAweDg2LCAweERGLCAweDU3LCAweDAwfSB9LCAvKiAwMiAoeDQ4MCkgKi8KKwl7IHsweGNlLCAweEYwLCAweDdiLCAweDhlLCAweDU3LCAweGNmLCAweGEwfSB9LCAvKiAwMyAoeDYwMCkgKi8KKwl7IHsweDc2LCAweEY1LCAweDIzLCAweDg2LCAweEZGLCAweDc3LCAweDkwfSB9LCAvKiAwNCAoeDc2OCkgKi8KKwl7IHsweDc2LCAweDVBLCAweDIzLCAweDg2LCAweEZGLCAweDc3LCAweDg5fSB9LCAvKiAwNSAoeDEwMjQpICovCisJeyB7MHg5MCwgMHgxMCwgMHgxQSwgMHg4RSwgMHgxOSwgMHg5MSwgMHgyRn0gfSwgLyogMDYgKHgxMDUwKSAqLworCXsgezB4MjYsIDB4MTEsIDB4ZDMsIDB4ODYsIDB4YUYsIDB4MjcsIDB4M2Z9IH0gIC8qIDA3ICh4MTIwMCkgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJX0xWRFNDUlQxSERhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTAyNHg3NjhfMV9IeDc1W10gPQoteyAJLyogQ1IwMCxDUjAyLENSMDMsQ1IwNCxDUjA1LFNSMEIsU1IwQyxTUjBFICovCi0gICAge3sgICAgICAweDRCLDB4MjcsMHg4RiwweDMyLDB4MUIsMHgwMCwweDQ1LDB4MDAgfX0sLyogOyAwMCAoMzIweCkgKi8KLSAgICB7eyAgICAgIDB4NEIsMHgyNywweDhGLDB4MkIsMHgwMywweDAwLDB4NDQsMHgwMCB9fSwvKiA7IDAxICgzNjB4KSAqLwotICAgIHt7ICAgICAgMHg1NSwweDMxLDB4OTksMHg0NiwweDFELDB4MDAsMHg1NSwweDAwIH19LC8qIDsgMDIgKDQwMHgpICovCi0gICAge3sgICAgICAweDYzLDB4M0YsMHg4NywweDRBLDB4OTMsMHgwMCwweDAxLDB4MDAgfX0sLyogOyAwMyAoNTEyeCkgKi8KLSAgICB7eyAgICAgIDB4NkYsMHg0RiwweDkzLDB4NTQsMHg4MCwweDAwLDB4MDUsMHgwMCB9fSwvKiA7IDA0ICg2NDB4KSAqLwotICAgIHt7ICAgICAgMHg2RiwweDRGLDB4OTMsMHg1NCwweDgwLDB4MDAsMHgwNSwweDAwIH19LC8qIDsgMDUgKDcyMHgpICovCi0gICAge3sgICAgICAweDgzLDB4NjMsMHg4NywweDY4LDB4MTQsMHgwMCwweDI2LDB4MDAgfX0sLyogOyAwNiAoODAweCkgKi8KLSAgICB7eyAgICAgIDB4OUYsMHg3RiwweDgzLDB4ODUsMHg5MSwweDAwLDB4MDIsMHgwMCB9fSAvKiA7IDA3ICgxMDI0eCkgKi8KKy8qIENSMDAsQ1IwMixDUjAzLENSMDQsQ1IwNSxTUjBCLFNSMEMsU1IwRSAqLworc3RhdGljIHN0cnVjdCBYR0lfTFZEU0NSVDFIRGF0YVN0cnVjdCBYR0lfTFZEU0NSVDExMDI0eDc2OF8xX0h4NzVbXSA9IHsKKwl7IHsweDRCLCAweDI3LCAweDhGLCAweDMyLCAweDFCLCAweDAwLCAweDQ1LCAweDAwfSB9LC8qIDsgMDAgKDMyMHgpICovCisJeyB7MHg0QiwgMHgyNywgMHg4RiwgMHgyQiwgMHgwMywgMHgwMCwgMHg0NCwgMHgwMH0gfSwvKiA7IDAxICgzNjB4KSAqLworCXsgezB4NTUsIDB4MzEsIDB4OTksIDB4NDYsIDB4MUQsIDB4MDAsIDB4NTUsIDB4MDB9IH0sLyogOyAwMiAoNDAweCkgKi8KKwl7IHsweDYzLCAweDNGLCAweDg3LCAweDRBLCAweDkzLCAweDAwLCAweDAxLCAweDAwfSB9LC8qIDsgMDMgKDUxMngpICovCisJeyB7MHg2RiwgMHg0RiwgMHg5MywgMHg1NCwgMHg4MCwgMHgwMCwgMHgwNSwgMHgwMH0gfSwvKiA7IDA0ICg2NDB4KSAqLworCXsgezB4NkYsIDB4NEYsIDB4OTMsIDB4NTQsIDB4ODAsIDB4MDAsIDB4MDUsIDB4MDB9IH0sLyogOyAwNSAoNzIweCkgKi8KKwl7IHsweDgzLCAweDYzLCAweDg3LCAweDY4LCAweDE0LCAweDAwLCAweDI2LCAweDAwfSB9LC8qIDsgMDYgKDgwMHgpICovCisJeyB7MHg5RiwgMHg3RiwgMHg4MywgMHg4NSwgMHg5MSwgMHgwMCwgMHgwMiwgMHgwMH0gfSAvKiA7IDA3ICgxMDI0eCkgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJX0xWRFNDUlQxVkRhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTAyNHg3NjhfMV9WeDc1W10gPQotewkvKiBDUjA2LENSMDcsQ1IxMCxDUjExLENSMTUsQ1IxNixTUjBBK0NSMDkoNS0+NykgKi8KLSAgICB7eyAgICAgIDB4OTcsMHgxRiwweDYwLDB4ODcsMHg1RCwweDgzLDB4MTAgICAgICB9fSwvKiA7IDAwICh4MzUwKSAqLwotICAgIHt7ICAgICAgMHhCNCwweDFGLDB4OTIsMHg4OSwweDhGLDB4QjUsMHgzMCAgICAgIH19LC8qIDsgMDEgKHg0MDApICovCi0gICAge3sgICAgICAweEZFLDB4MUYsMHhFMCwweDg0LDB4REYsMHhGRiwweDEwICAgICAgfX0sLyogOyAwMiAoeDQ4MCkgKi8KLSAgICB7eyAgICAgIDB4NzYsMHhGMCwweDU4LDB4OEMsMHg1NywweDc3LDB4QTAgICAgICB9fSwvKiA7IDAzICh4NjAwKSAqLwotICAgIHt7ICAgICAgMHgxRSwweEY1LDB4MDAsMHg4MywweEZGLDB4MUYsMHg5MCAgICAgIH19IC8qIDsgMDQgKHg3NjgpICovCisvKiBDUjA2LENSMDcsQ1IxMCxDUjExLENSMTUsQ1IxNixTUjBBK0NSMDkoNS0+NykgKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJX0xWRFNDUlQxVkRhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTAyNHg3NjhfMV9WeDc1W10gPSB7CisJeyB7MHg5NywgMHgxRiwgMHg2MCwgMHg4NywgMHg1RCwgMHg4MywgMHgxMH0gfSwvKiA7IDAwICh4MzUwKSAqLworCXsgezB4QjQsIDB4MUYsIDB4OTIsIDB4ODksIDB4OEYsIDB4QjUsIDB4MzB9IH0sLyogOyAwMSAoeDQwMCkgKi8KKwl7IHsweEZFLCAweDFGLCAweEUwLCAweDg0LCAweERGLCAweEZGLCAweDEwfSB9LC8qIDsgMDIgKHg0ODApICovCisJeyB7MHg3NiwgMHhGMCwgMHg1OCwgMHg4QywgMHg1NywgMHg3NywgMHhBMH0gfSwvKiA7IDAzICh4NjAwKSAqLworCXsgezB4MUUsIDB4RjUsIDB4MDAsIDB4ODMsIDB4RkYsIDB4MUYsIDB4OTB9IH0gLyogOyAwNCAoeDc2OCkgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJX0xWRFNDUlQxSERhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTAyNHg3NjhfMl9IeDc1W10gPQoteyAgICAgICAvKiBDUjAwLENSMDIsQ1IwMyxDUjA0LENSMDUsU1IwQixTUjBDLFNSMEUgKi8KLSAgICB7eyAgICAgIDB4NjMsMHgyNywweDg3LDB4M0IsMHg4QywweDAwLDB4MDEsMHgwMCB9fSwvKiA7IDAwICgzMjB4KSAqLwotICAgIHt7ICAgICAgMHg2MywweDI3LDB4ODcsMHgzQiwweDhDLDB4MDAsMHgwMSwweDAwIH19LC8qIDsgMDEgKDM2MHgpICovCi0gICAge3sgICAgICAweDYzLDB4MzEsMHg4NywweDNELDB4OEUsMHgwMCwweDAxLDB4MDAgfX0sLyogOyAwMiAoNDAweCkgKi8KLSAgICB7eyAgICAgIDB4NjMsMHgzRiwweDg3LDB4NDUsMHg5NiwweDAwLDB4MDEsMHgwMCB9fSwvKiA7IDAzICg1MTJ4KSAqLwotICAgIHt7ICAgICAgMHhBMywweDRGLDB4ODcsMHg2RSwweDlGLDB4MDAsMHgwNiwweDAwIH19LC8qIDsgMDQgKDY0MHgpICovCi0gICAge3sgICAgICAweEEzLDB4NEYsMHg4NywweDZFLDB4OUYsMHgwMCwweDA2LDB4MDAgfX0sLyogOyAwNSAoNzIweCkgKi8KLSAgICB7eyAgICAgIDB4QTMsMHg2MywweDg3LDB4NzgsMHg4OSwweDAwLDB4MDIsMHgwMCB9fSwvKiA7IDA2ICg4MDB4KSAqLwotICAgIHt7ICAgICAgMHhBMywweDdGLDB4ODcsMHg4NiwweDk3LDB4MDAsMHgwMiwweDAwIH19IC8qIDsgMDcgKDEwMjR4KSAqLworLyogQ1IwMCxDUjAyLENSMDMsQ1IwNCxDUjA1LFNSMEIsU1IwQyxTUjBFICovCitzdGF0aWMgc3RydWN0IFhHSV9MVkRTQ1JUMUhEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTEwMjR4NzY4XzJfSHg3NVtdID0geworCXsgezB4NjMsIDB4MjcsIDB4ODcsIDB4M0IsIDB4OEMsIDB4MDAsIDB4MDEsIDB4MDB9IH0sLyogOyAwMCAoMzIweCkgKi8KKwl7IHsweDYzLCAweDI3LCAweDg3LCAweDNCLCAweDhDLCAweDAwLCAweDAxLCAweDAwfSB9LC8qIDsgMDEgKDM2MHgpICovCisJeyB7MHg2MywgMHgzMSwgMHg4NywgMHgzRCwgMHg4RSwgMHgwMCwgMHgwMSwgMHgwMH0gfSwvKiA7IDAyICg0MDB4KSAqLworCXsgezB4NjMsIDB4M0YsIDB4ODcsIDB4NDUsIDB4OTYsIDB4MDAsIDB4MDEsIDB4MDB9IH0sLyogOyAwMyAoNTEyeCkgKi8KKwl7IHsweEEzLCAweDRGLCAweDg3LCAweDZFLCAweDlGLCAweDAwLCAweDA2LCAweDAwfSB9LC8qIDsgMDQgKDY0MHgpICovCisJeyB7MHhBMywgMHg0RiwgMHg4NywgMHg2RSwgMHg5RiwgMHgwMCwgMHgwNiwgMHgwMH0gfSwvKiA7IDA1ICg3MjB4KSAqLworCXsgezB4QTMsIDB4NjMsIDB4ODcsIDB4NzgsIDB4ODksIDB4MDAsIDB4MDIsIDB4MDB9IH0sLyogOyAwNiAoODAweCkgKi8KKwl7IHsweEEzLCAweDdGLCAweDg3LCAweDg2LCAweDk3LCAweDAwLCAweDAyLCAweDAwfSB9IC8qIDsgMDcgKDEwMjR4KSAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBYR0lfTFZEU0NSVDFWRGF0YVN0cnVjdCBYR0lfTFZEU0NSVDExMDI0eDc2OF8yX1Z4NzVbXSA9Ci17ICAgICAgIC8qIENSMDYsQ1IwNyxDUjEwLENSMTEsQ1IxNSxDUjE2LFNSMEEgKi8KLSAgICB7eyAgICAgIDB4MjQsMHhCQiwweDMxLDB4ODcsMHg1RCwweDI1LDB4MzAgICAgICB9fSwvKiA7IDAwICh4MzUwKSAqLwotICAgIHt7ICAgICAgMHgyNCwweEJCLDB4NEEsMHg4MCwweDhGLDB4MjUsMHgzMCAgICAgIH19LC8qIDsgMDEgKHg0MDApICovCi0gICAge3sgICAgICAweDI0LDB4QkIsMHg3MiwweDg4LDB4REYsMHgyNSwweDMwICAgICAgfX0sLyogOyAwMiAoeDQ4MCkgKi8KLSAgICB7eyAgICAgIDB4MjQsMHhGMSwweEFFLDB4ODQsMHg1NywweDI1LDB4QjAgICAgICB9fSwvKiA7IDAzICh4NjAwKSAqLwotICAgIHt7ICAgICAgMHgyNCwweEY1LDB4MDIsMHg4OCwweEZGLDB4MjUsMHg5MCAgICAgIH19IC8qIDsgMDQgKHg3NjgpICovCisvKiBDUjA2LENSMDcsQ1IxMCxDUjExLENSMTUsQ1IxNixTUjBBICovCitzdGF0aWMgc3RydWN0IFhHSV9MVkRTQ1JUMVZEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTEwMjR4NzY4XzJfVng3NVtdID0geworCXsgezB4MjQsIDB4QkIsIDB4MzEsIDB4ODcsIDB4NUQsIDB4MjUsIDB4MzB9IH0sLyogOyAwMCAoeDM1MCkgKi8KKwl7IHsweDI0LCAweEJCLCAweDRBLCAweDgwLCAweDhGLCAweDI1LCAweDMwfSB9LC8qIDsgMDEgKHg0MDApICovCisJeyB7MHgyNCwgMHhCQiwgMHg3MiwgMHg4OCwgMHhERiwgMHgyNSwgMHgzMH0gfSwvKiA7IDAyICh4NDgwKSAqLworCXsgezB4MjQsIDB4RjEsIDB4QUUsIDB4ODQsIDB4NTcsIDB4MjUsIDB4QjB9IH0sLyogOyAwMyAoeDYwMCkgKi8KKwl7IHsweDI0LCAweEY1LCAweDAyLCAweDg4LCAweEZGLCAweDI1LCAweDkwfSB9IC8qIDsgMDQgKHg3NjgpICovCiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSV9MVkRTQ1JUMUhEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTEyODB4MTAyNF8xX0h4NzVbXSA9Ci17ICAgICAgLyogQ1IwMCxDUjAyLENSMDMsQ1IwNCxDUjA1LFNSMEIsU1IwQyxTUjBFICovCi0gICAge3sgICAgICAweDU2LDB4MjcsMHg5QSwweDMwLDB4MUUsMHgwMCwweDA1LDB4MDAgfX0sLyogOyAwMCAoMzIweCkgKi8KLSAgICB7eyAgICAgIDB4NTYsMHgyNywweDlBLDB4MzAsMHgxRSwweDAwLDB4MDUsMHgwMCB9fSwvKiA7IDAxICgzNjB4KSAqLwotICAgIHt7ICAgICAgMHg2MCwweDMxLDB4ODQsMHgzQSwweDg4LDB4MDAsMHgwMSwweDAwIH19LC8qIDsgMDIgKDQwMHgpICovCi0gICAge3sgICAgICAweDZFLDB4M0YsMHg5MiwweDQ4LDB4OTYsMHgwMCwweDAxLDB4MDAgfX0sLyogOyAwMyAoNTEyeCkgKi8KLSAgICB7eyAgICAgIDB4N0UsMHg0RiwweDgyLDB4NTQsMHgwNiwweDAwLDB4MDYsMHgwMCB9fSwvKiA7IDA0ICg2NDB4KSAqLwotICAgIHt7ICAgICAgMHg3RSwweDRGLDB4ODIsMHg1NCwweDA2LDB4MDAsMHgwNiwweDAwIH19LC8qIDsgMDUgKDcyMHgpICovCi0gICAge3sgICAgICAweDkyLDB4NjMsMHg5NiwweDY4LDB4MUEsMHgwMCwweDA2LDB4MDAgfX0sLyogOyAwNiAoODAweCkgKi8KLSAgICB7eyAgICAgIDB4QUUsMHg3RiwweDkyLDB4ODQsMHg5NiwweDAwLDB4MDIsMHgwMCB9fSwvKiA7IDA3ICgxMDI0eCkgKi8KLSAgICB7eyAgICAgIDB4Q0UsMHg5RiwweDkyLDB4QTUsMHgxNywweDAwLDB4MDcsMHgwMCB9fSAvKiA7IDA4ICgxMjgweCkgKi8KKy8qIENSMDAsQ1IwMixDUjAzLENSMDQsQ1IwNSxTUjBCLFNSMEMsU1IwRSAqLworc3RhdGljIHN0cnVjdCBYR0lfTFZEU0NSVDFIRGF0YVN0cnVjdCBYR0lfTFZEU0NSVDExMjgweDEwMjRfMV9IeDc1W10gPSB7CisJeyB7MHg1NiwgMHgyNywgMHg5QSwgMHgzMCwgMHgxRSwgMHgwMCwgMHgwNSwgMHgwMH0gfSwvKiA7IDAwICgzMjB4KSAqLworCXsgezB4NTYsIDB4MjcsIDB4OUEsIDB4MzAsIDB4MUUsIDB4MDAsIDB4MDUsIDB4MDB9IH0sLyogOyAwMSAoMzYweCkgKi8KKwl7IHsweDYwLCAweDMxLCAweDg0LCAweDNBLCAweDg4LCAweDAwLCAweDAxLCAweDAwfSB9LC8qIDsgMDIgKDQwMHgpICovCisJeyB7MHg2RSwgMHgzRiwgMHg5MiwgMHg0OCwgMHg5NiwgMHgwMCwgMHgwMSwgMHgwMH0gfSwvKiA7IDAzICg1MTJ4KSAqLworCXsgezB4N0UsIDB4NEYsIDB4ODIsIDB4NTQsIDB4MDYsIDB4MDAsIDB4MDYsIDB4MDB9IH0sLyogOyAwNCAoNjQweCkgKi8KKwl7IHsweDdFLCAweDRGLCAweDgyLCAweDU0LCAweDA2LCAweDAwLCAweDA2LCAweDAwfSB9LC8qIDsgMDUgKDcyMHgpICovCisJeyB7MHg5MiwgMHg2MywgMHg5NiwgMHg2OCwgMHgxQSwgMHgwMCwgMHgwNiwgMHgwMH0gfSwvKiA7IDA2ICg4MDB4KSAqLworCXsgezB4QUUsIDB4N0YsIDB4OTIsIDB4ODQsIDB4OTYsIDB4MDAsIDB4MDIsIDB4MDB9IH0sLyogOyAwNyAoMTAyNHgpICovCisJeyB7MHhDRSwgMHg5RiwgMHg5MiwgMHhBNSwgMHgxNywgMHgwMCwgMHgwNywgMHgwMH0gfSAvKiA7IDA4ICgxMjgweCkgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJX0xWRFNDUlQxVkRhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTI4MHgxMDI0XzFfVng3NVtdID0KLXsJLyogQ1IwNixDUjA3LENSMTAsQ1IxMSxDUjE1LENSMTYsU1IwQSAqLwotICAgIHt7ICAgICAgMHg4NiwweEQxLDB4QkMsMHg4MCwweEJCLDB4RTUsMHgwMCAgICAgIH19LC8qIDsgMDAgKHgzNTApICovCi0gICAge3sgICAgICAweEI4LDB4MUYsMHg5MCwweDg0LDB4OEYsMHhCOSwweDMwICAgICAgfX0sLyogOyAwMSAoeDQwMCkgKi8KLSAgICB7eyAgICAgIDB4MDgsMHgzRSwweEUwLDB4ODQsMHhERiwweDA5LDB4MDAgICAgICB9fSwvKiA7IDAyICh4NDgwKSAqLwotICAgIHt7ICAgICAgMHg4MCwweEYwLDB4NTgsMHg4QywweDU3LDB4ODEsMHhBMCAgICAgIH19LC8qIDsgMDMgKHg2MDApICovCi0gICAge3sgICAgICAweDI4LDB4RjUsMHgwMCwweDg0LDB4RkYsMHgyOSwweDkwICAgICAgfX0sLyogOyAwNCAoeDc2OCkgKi8KLSAgICB7eyAgICAgIDB4MjgsMHg1QSwweDEzLDB4ODcsMHhGRiwweDI5LDB4QTkgICAgICB9fSAvKiA7IDA1ICh4MTAyNCkgKi8KKy8qIENSMDYsQ1IwNyxDUjEwLENSMTEsQ1IxNSxDUjE2LFNSMEEgKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJX0xWRFNDUlQxVkRhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTI4MHgxMDI0XzFfVng3NVtdID0geworCXsgezB4ODYsIDB4RDEsIDB4QkMsIDB4ODAsIDB4QkIsIDB4RTUsIDB4MDB9IH0sLyogOyAwMCAoeDM1MCkgKi8KKwl7IHsweEI4LCAweDFGLCAweDkwLCAweDg0LCAweDhGLCAweEI5LCAweDMwfSB9LC8qIDsgMDEgKHg0MDApICovCisJeyB7MHgwOCwgMHgzRSwgMHhFMCwgMHg4NCwgMHhERiwgMHgwOSwgMHgwMH0gfSwvKiA7IDAyICh4NDgwKSAqLworCXsgezB4ODAsIDB4RjAsIDB4NTgsIDB4OEMsIDB4NTcsIDB4ODEsIDB4QTB9IH0sLyogOyAwMyAoeDYwMCkgKi8KKwl7IHsweDI4LCAweEY1LCAweDAwLCAweDg0LCAweEZGLCAweDI5LCAweDkwfSB9LC8qIDsgMDQgKHg3NjgpICovCisJeyB7MHgyOCwgMHg1QSwgMHgxMywgMHg4NywgMHhGRiwgMHgyOSwgMHhBOX0gfSAvKiA7IDA1ICh4MTAyNCkgKi8KK307CisvKiBDUjAwLENSMDIsQ1IwMyxDUjA0LENSMDUsU1IwQixTUjBDLFNSMEUgKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJX0xWRFNDUlQxSERhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTI4MHgxMDI0XzJfSHg3NVtdID0geworCXsgezB4N0UsIDB4M0IsIDB4OUEsIDB4NDQsIDB4MTIsIDB4MDAsIDB4MDEsIDB4MDB9IH0sLyogOyAwMCAoMzIweCkgKi8KKwl7IHsweDdFLCAweDNCLCAweDlBLCAweDQ0LCAweDEyLCAweDAwLCAweDAxLCAweDAwfSB9LC8qIDsgMDEgKDM2MHgpICovCisJeyB7MHg3RSwgMHg0MCwgMHg4NCwgMHg0OSwgMHg5MSwgMHgwMCwgMHgwMSwgMHgwMH0gfSwvKiA7IDAyICg0MDB4KSAqLworCXsgezB4N0UsIDB4NDcsIDB4OTMsIDB4NTAsIDB4OUUsIDB4MDAsIDB4MDEsIDB4MDB9IH0sLyogOyAwMyAoNTEyeCkgKi8KKwl7IHsweENFLCAweDc3LCAweDhBLCAweDgwLCAweDhFLCAweDAwLCAweDAyLCAweDAwfSB9LC8qIDsgMDQgKDY0MHgpICovCisJeyB7MHhDRSwgMHg3NywgMHg4QSwgMHg4MCwgMHg4RSwgMHgwMCwgMHgwMiwgMHgwMH0gfSwvKiA7IDA1ICg3MjB4KSAqLworCXsgezB4Q0UsIDB4ODEsIDB4OTQsIDB4OEEsIDB4OTgsIDB4MDAsIDB4MDIsIDB4MDB9IH0sLyogOyAwNiAoODAweCkgKi8KKwl7IHsweENFLCAweDhGLCAweDgyLCAweDk4LCAweDA2LCAweDAwLCAweDA3LCAweDAwfSB9LC8qIDsgMDcgKDEwMjR4KSAqLworCXsgezB4Q0UsIDB4OUYsIDB4OTIsIDB4QTgsIDB4MTYsIDB4MDAsIDB4MDcsIDB4MDB9IH0gLyogOyAwOCAoMTI4MHgpICovCiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSV9MVkRTQ1JUMUhEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTEyODB4MTAyNF8yX0h4NzVbXSA9Ci17Ci0JLyogQ1IwMCxDUjAyLENSMDMsQ1IwNCxDUjA1LFNSMEIsU1IwQyxTUjBFICovCi0gICAge3sgICAgICAweDdFLDB4M0IsMHg5QSwweDQ0LDB4MTIsMHgwMCwweDAxLDB4MDAgfX0sLyogOyAwMCAoMzIweCkgKi8KLSAgICB7eyAgICAgIDB4N0UsMHgzQiwweDlBLDB4NDQsMHgxMiwweDAwLDB4MDEsMHgwMCB9fSwvKiA7IDAxICgzNjB4KSAqLwotICAgIHt7ICAgICAgMHg3RSwweDQwLDB4ODQsMHg0OSwweDkxLDB4MDAsMHgwMSwweDAwIH19LC8qIDsgMDIgKDQwMHgpICovCi0gICAge3sgICAgICAweDdFLDB4NDcsMHg5MywweDUwLDB4OUUsMHgwMCwweDAxLDB4MDAgfX0sLyogOyAwMyAoNTEyeCkgKi8KLSAgICB7eyAgICAgIDB4Q0UsMHg3NywweDhBLDB4ODAsMHg4RSwweDAwLDB4MDIsMHgwMCB9fSwvKiA7IDA0ICg2NDB4KSAqLwotICAgIHt7ICAgICAgMHhDRSwweDc3LDB4OEEsMHg4MCwweDhFLDB4MDAsMHgwMiwweDAwIH19LC8qIDsgMDUgKDcyMHgpICovCi0gICAge3sgICAgICAweENFLDB4ODEsMHg5NCwweDhBLDB4OTgsMHgwMCwweDAyLDB4MDAgfX0sLyogOyAwNiAoODAweCkgKi8KLSAgICB7eyAgICAgIDB4Q0UsMHg4RiwweDgyLDB4OTgsMHgwNiwweDAwLDB4MDcsMHgwMCB9fSwvKiA7IDA3ICgxMDI0eCkgKi8KLSAgICB7eyAgICAgIDB4Q0UsMHg5RiwweDkyLDB4QTgsMHgxNiwweDAwLDB4MDcsMHgwMCB9fSAvKiA7IDA4ICgxMjgweCkgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgWEdJX0xWRFNDUlQxVkRhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTI4MHgxMDI0XzJfVng3NVtdID0KLXsKLSAgICAgICAgLyogQ1IwNixDUjA3LENSMTAsQ1IxMSxDUjE1LENSMTYsU1IwQSAqLwotICAgICB7eyAgICAgMHgyOCwweEQyLDB4QUYsMHg4MywweEFFLDB4RDgsMHhBMSAgICAgfX0sLyogOyAwMCAoeDM1MCkgKi8KLSAgICAge3sgICAgIDB4MjgsMHhEMiwweEM4LDB4OEMsMHhDNywweEYyLDB4ODEgICAgIH19LC8qIDsgMDEgKHg0MDApICovCi0gICAgIHt7ICAgICAweDI4LDB4RDIsMHhGMCwweDg0LDB4RUYsMHgxQSwweEIxICAgICB9fSwvKiA7IDAyICh4NDgwKSAqLwotICAgICB7eyAgICAgMHgyOCwweERFLDB4MkMsMHg4RiwweDJCLDB4NTYsMHg5MSAgICAgfX0sLyogOyAwMyAoeDYwMCkgKi8KLSAgICAge3sgICAgIDB4MjgsMHhERSwweDgwLDB4ODMsMHg3RiwweEFBLDB4OTEgICAgIH19LC8qIDsgMDQgKHg3NjgpICovCi0gICAgIHt7ICAgICAweDI4LDB4NUEsMHgxMywweDg3LDB4RkYsMHgyOSwweEE5ICAgICB9fSAvKiA7IDA1ICh4MTAyNCkgKi8KKy8qIENSMDYsQ1IwNyxDUjEwLENSMTEsQ1IxNSxDUjE2LFNSMEEgKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJX0xWRFNDUlQxVkRhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTI4MHgxMDI0XzJfVng3NVtdID0geworCXsgezB4MjgsIDB4RDIsIDB4QUYsIDB4ODMsIDB4QUUsIDB4RDgsIDB4QTF9IH0sLyogOyAwMCAoeDM1MCkgKi8KKwl7IHsweDI4LCAweEQyLCAweEM4LCAweDhDLCAweEM3LCAweEYyLCAweDgxfSB9LC8qIDsgMDEgKHg0MDApICovCisJeyB7MHgyOCwgMHhEMiwgMHhGMCwgMHg4NCwgMHhFRiwgMHgxQSwgMHhCMX0gfSwvKiA7IDAyICh4NDgwKSAqLworCXsgezB4MjgsIDB4REUsIDB4MkMsIDB4OEYsIDB4MkIsIDB4NTYsIDB4OTF9IH0sLyogOyAwMyAoeDYwMCkgKi8KKwl7IHsweDI4LCAweERFLCAweDgwLCAweDgzLCAweDdGLCAweEFBLCAweDkxfSB9LC8qIDsgMDQgKHg3NjgpICovCisJeyB7MHgyOCwgMHg1QSwgMHgxMywgMHg4NywgMHhGRiwgMHgyOSwgMHhBOX0gfSAvKiA7IDA1ICh4MTAyNCkgKi8KIH07CiAKICNpZiAwCi1zdGF0aWMgc3RydWN0IFhHSV9MVkRTQ1JUMURhdGFTdHJ1Y3QgIFhHSV9DSFRWQ1JUMVVOVFNDW10gPQotewotIHt7MHg2NCwweDRmLDB4ODgsMHg1NiwweDlmLDB4NTYsMHgzZSwKLSAgICAweGU4LDB4ODQsMHg4ZiwweDU3LDB4MjAsMHgwMCwweDAxLDB4MDAgfX0sCi0ge3sweDY0LDB4NGYsMHg4OCwweDU2LDB4OWYsMHg1NiwweDNlLAotICAgIDB4ZDAsMHg4MiwweDVkLDB4NTcsMHgwMCwweDAwLDB4MDEsMHgwMCB9fSwKLSB7ezB4NjQsMHg0ZiwweDg4LDB4NTYsMHg5ZiwweDU2LDB4M2UsCi0gICAgMHhlOCwweDg0LDB4OGYsMHg1NywweDIwLDB4MDAsMHgwMSwweDAwIH19LAotIHt7MHg2NCwweDRmLDB4ODgsMHg1NiwweDlmLDB4NTYsMHgzZSwKLSAgICAweGQwLDB4ODIsMHg1ZCwweDU3LDB4MDAsMHgwMCwweDAxLDB4MDAgfX0sCi0ge3sweDVkLDB4NGYsMHg4MSwweDUzLDB4OWMsMHg1NiwweGJhLAotICAgIDB4MTgsMHg4NCwweGRmLDB4NTcsMHgwMCwweDAwLDB4MDEsMHgwMCB9fSwKLSB7ezB4ODAsMHg2MywweDg0LDB4NmMsMHgxNywweGVjLDB4ZjAsCi0gICAweDkwLDB4OGMsMHg1NywweGVkLDB4MjAsMHgwMCwweDA2LDB4MDEgfX0KK3N0YXRpYyBzdHJ1Y3QgWEdJX0xWRFNDUlQxRGF0YVN0cnVjdCAgWEdJX0NIVFZDUlQxVU5UU0NbXSA9IHsKKwl7IHsweDY0LCAweDRmLCAweDg4LCAweDU2LCAweDlmLCAweDU2LCAweDNlLAorCSAgMHhlOCwgMHg4NCwgMHg4ZiwgMHg1NywgMHgyMCwgMHgwMCwgMHgwMSwgMHgwMCB9IH0sCisJeyB7MHg2NCwgMHg0ZiwgMHg4OCwgMHg1NiwgMHg5ZiwgMHg1NiwgMHgzZSwKKwkgIDB4ZDAsIDB4ODIsIDB4NWQsIDB4NTcsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAgfSB9LAorCXsgezB4NjQsIDB4NGYsIDB4ODgsIDB4NTYsIDB4OWYsIDB4NTYsIDB4M2UsCisJICAweGU4LCAweDg0LCAweDhmLCAweDU3LCAweDIwLCAweDAwLCAweDAxLCAweDAwIH0gfSwKKwl7IHsweDY0LCAweDRmLCAweDg4LCAweDU2LCAweDlmLCAweDU2LCAweDNlLAorCSAgMHhkMCwgMHg4MiwgMHg1ZCwgMHg1NywgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCB9IH0sCisJeyB7MHg1ZCwgMHg0ZiwgMHg4MSwgMHg1MywgMHg5YywgMHg1NiwgMHhiYSwKKwkgIDB4MTgsIDB4ODQsIDB4ZGYsIDB4NTcsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAgfSB9LAorCXsgezB4ODAsIDB4NjMsIDB4ODQsIDB4NmMsIDB4MTcsIDB4ZWMsIDB4ZjAsCisJICB4OTAsIDB4OGMsIDB4NTcsIDB4ZWQsIDB4MjAsIDB4MDAsIDB4MDYsIDB4MDEgfSB9CiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSV9MVkRTQ1JUMURhdGFTdHJ1Y3QgIFhHSV9DSFRWQ1JUMU9OVFNDW10gPQotewotIHt7MHg2NCwweDRmLDB4ODgsMHg1YSwweDlmLDB4MGIsMHgzZSwKLSAgICAweGMwLDB4ODQsMHg4ZiwweDBjLDB4MjAsMHgwMCwweDAxLDB4MDAgfX0sCi0ge3sweDY0LDB4NGYsMHg4OCwweDVhLDB4OWYsMHgwYiwweDNlLAotICAgIDB4YjAsMHg4ZCwweDVkLDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCB9fSwKLSB7ezB4NjQsMHg0ZiwweDg4LDB4NWEsMHg5ZiwweDBiLDB4M2UsCi0gICAgMHhjMCwweDg0LDB4OGYsMHgwYywweDIwLDB4MDAsMHgwMSwweDAwIH19LAotIHt7MHg2NCwweDRmLDB4ODgsMHg1YSwweDlmLDB4MGIsMHgzZSwKLSAgICAweGIwLDB4OGQsMHg1ZCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAgfX0sCi0ge3sweDVkLDB4NGYsMHg4MSwweDU2LDB4OWMsMHgwYiwweDNlLAotICAgIDB4ZTgsMHg4NCwweGRmLDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCB9fSwKLSB7ezB4N2QsMHg2MywweDgxLDB4NmEsMHgxNiwweGJhLDB4ZjAsCi0gICAweDdmLDB4ODYsMHg1NywweGJiLDB4MDAsMHgwMCwweDA2LDB4MDEgfX0KK3N0YXRpYyBzdHJ1Y3QgWEdJX0xWRFNDUlQxRGF0YVN0cnVjdCAgWEdJX0NIVFZDUlQxT05UU0NbXSA9IHsKKwl7IHsweDY0LCAweDRmLCAweDg4LCAweDVhLCAweDlmLCAweDBiLCAweDNlLAorCSAgMHhjMCwgMHg4NCwgMHg4ZiwgMHgwYywgMHgyMCwgMHgwMCwgMHgwMSwgMHgwMCB9IH0sCisJeyB7MHg2NCwgMHg0ZiwgMHg4OCwgMHg1YSwgMHg5ZiwgMHgwYiwgMHgzZSwKKwkgIDB4YjAsIDB4OGQsIDB4NWQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAgfSB9LAorCXsgezB4NjQsIDB4NGYsIDB4ODgsIDB4NWEsIDB4OWYsIDB4MGIsIDB4M2UsCisJICAweGMwLCAweDg0LCAweDhmLCAweDBjLCAweDIwLCAweDAwLCAweDAxLCAweDAwIH0gfSwKKwl7IHsweDY0LCAweDRmLCAweDg4LCAweDVhLCAweDlmLCAweDBiLCAweDNlLAorCSAgMHhiMCwgMHg4ZCwgMHg1ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCB9IH0sCisJeyB7MHg1ZCwgMHg0ZiwgMHg4MSwgMHg1NiwgMHg5YywgMHgwYiwgMHgzZSwKKwkgIDB4ZTgsIDB4ODQsIDB4ZGYsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAgfSB9LAorCXsgezB4N2QsIDB4NjMsIDB4ODEsIDB4NmEsIDB4MTYsIDB4YmEsIDB4ZjAsCisJICB4N2YsIDB4ODYsIDB4NTcsIDB4YmIsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDEgfSB9CiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSV9MVkRTQ1JUMURhdGFTdHJ1Y3QgIFhHSV9DSFRWQ1JUMVVQQUxbXSA9Ci17Ci0ge3sweDc5LDB4NGYsMHg5ZCwweDVhLDB4OTAsMHg2ZiwweDNlLAotICAgIDB4ZjgsMHg4MywweDhmLDB4NzAsMHgyMCwweDAwLDB4MDUsMHgwMCB9fSwKLSB7ezB4NzksMHg0ZiwweDlkLDB4NWEsMHg5MCwweDZmLDB4M2UsCi0gICAgMHhkZSwweDgxLDB4NWQsMHg3MCwweDAwLDB4MDAsMHgwNSwweDAwIH19LAotIHt7MHg3OSwweDRmLDB4OWQsMHg1YSwweDkwLDB4NmYsMHgzZSwKLSAgICAweGY4LDB4ODMsMHg4ZiwweDcwLDB4MjAsMHgwMCwweDA1LDB4MDAgfX0sCi0ge3sweDc5LDB4NGYsMHg5ZCwweDVhLDB4OTAsMHg2ZiwweDNlLAotICAgIDB4ZGUsMHg4MSwweDVkLDB4NzAsMHgwMCwweDAwLDB4MDUsMHgwMCB9fSwKLSB7ezB4NjQsMHg0ZiwweDg4LDB4NTUsMHg4MCwweGVjLDB4YmEsCi0gICAgMHg1MCwweDg0LDB4ZGYsMHhlZCwweDAwLDB4MDAsMHgwNSwweDAwIH19LAotIHt7MHg3MCwweDYzLDB4OTQsMHg2OCwweDhkLDB4NDIsMHhmMSwKLSAgIDB4YzgsMHg4YywweDU3LDB4ZTksMHgyMCwweDAwLDB4MDUsMHgwMSB9fQorc3RhdGljIHN0cnVjdCBYR0lfTFZEU0NSVDFEYXRhU3RydWN0ICBYR0lfQ0hUVkNSVDFVUEFMW10gPSB7CisJeyB7MHg3OSwgMHg0ZiwgMHg5ZCwgMHg1YSwgMHg5MCwgMHg2ZiwgMHgzZSwKKwkgIDB4ZjgsIDB4ODMsIDB4OGYsIDB4NzAsIDB4MjAsIDB4MDAsIDB4MDUsIDB4MDAgfSB9LAorCXsgezB4NzksIDB4NGYsIDB4OWQsIDB4NWEsIDB4OTAsIDB4NmYsIDB4M2UsCisJICAweGRlLCAweDgxLCAweDVkLCAweDcwLCAweDAwLCAweDAwLCAweDA1LCAweDAwIH0gfSwKKwl7IHsweDc5LCAweDRmLCAweDlkLCAweDVhLCAweDkwLCAweDZmLCAweDNlLAorCSAgMHhmOCwgMHg4MywgMHg4ZiwgMHg3MCwgMHgyMCwgMHgwMCwgMHgwNSwgMHgwMCB9IH0sCisJeyB7MHg3OSwgMHg0ZiwgMHg5ZCwgMHg1YSwgMHg5MCwgMHg2ZiwgMHgzZSwKKwkgIDB4ZGUsIDB4ODEsIDB4NWQsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAgfSB9LAorCXsgezB4NjQsIDB4NGYsIDB4ODgsIDB4NTUsIDB4ODAsIDB4ZWMsIDB4YmEsCisJICAweDUwLCAweDg0LCAweGRmLCAweGVkLCAweDAwLCAweDAwLCAweDA1LCAweDAwIH0gfSwKKwl7IHsweDcwLCAweDYzLCAweDk0LCAweDY4LCAweDhkLCAweDQyLCAweGYxLAorCSAgeGM4LCAweDhjLCAweDU3LCAweGU5LCAweDIwLCAweDAwLCAweDA1LCAweDAxIH0gfQogfTsKIAotc3RhdGljIHN0cnVjdCBYR0lfTFZEU0NSVDFEYXRhU3RydWN0ICBYR0lfQ0hUVkNSVDFPUEFMW10gPQotewotIHt7MHg3OSwweDRmLDB4OWQsMHg1YSwweDkwLDB4NmYsMHgzZSwKLSAgICAweGYwLDB4ODMsMHg4ZiwweDcwLDB4MjAsMHgwMCwweDA1LDB4MDAgfX0sCi0ge3sweDc5LDB4NGYsMHg5ZCwweDVhLDB4OTAsMHg2ZiwweDNlLAotICAgIDB4ZGUsMHg4MSwweDVkLDB4NzAsMHgwMCwweDAwLDB4MDUsMHgwMCB9fSwKLSB7ezB4NzksMHg0ZiwweDlkLDB4NWEsMHg5MCwweDZmLDB4M2UsCi0gICAgMHhmMCwweDgzLDB4OGYsMHg3MCwweDIwLDB4MDAsMHgwNSwweDAwIH19LAotIHt7MHg3OSwweDRmLDB4OWQsMHg1YSwweDkwLDB4NmYsMHgzZSwKLSAgICAweGRlLDB4ODEsMHg1ZCwweDcwLDB4MDAsMHgwMCwweDA1LDB4MDAgfX0sCi0ge3sweDY0LDB4NGYsMHg4OCwweDU1LDB4ODAsMHg2ZiwweGJhLAotICAgIDB4MjAsMHg4MywweGRmLDB4NzAsMHgwMCwweDAwLDB4MDUsMHgwMCB9fSwKLSB7ezB4NzMsMHg2MywweDk3LDB4NjksMHg4ZSwweGVjLDB4ZjAsCi0gICAweDkwLDB4OGMsMHg1NywweGVkLDB4MjAsMHgwMCwweDA1LDB4MDEgfX0KK3N0YXRpYyBzdHJ1Y3QgWEdJX0xWRFNDUlQxRGF0YVN0cnVjdCAgWEdJX0NIVFZDUlQxT1BBTFtdID0geworCXsgezB4NzksIDB4NGYsIDB4OWQsIDB4NWEsIDB4OTAsIDB4NmYsIDB4M2UsCisJICAweGYwLCAweDgzLCAweDhmLCAweDcwLCAweDIwLCAweDAwLCAweDA1LCAweDAwIH0gfSwKKwl7IHsweDc5LCAweDRmLCAweDlkLCAweDVhLCAweDkwLCAweDZmLCAweDNlLAorCSAgMHhkZSwgMHg4MSwgMHg1ZCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCB9IH0sCisJeyB7MHg3OSwgMHg0ZiwgMHg5ZCwgMHg1YSwgMHg5MCwgMHg2ZiwgMHgzZSwKKwkgIDB4ZjAsIDB4ODMsIDB4OGYsIDB4NzAsIDB4MjAsIDB4MDAsIDB4MDUsIDB4MDAgfSB9LAorCXsgezB4NzksIDB4NGYsIDB4OWQsIDB4NWEsIDB4OTAsIDB4NmYsIDB4M2UsCisJICAweGRlLCAweDgxLCAweDVkLCAweDcwLCAweDAwLCAweDAwLCAweDA1LCAweDAwIH0gfSwKKwl7IHsweDY0LCAweDRmLCAweDg4LCAweDU1LCAweDgwLCAweDZmLCAweGJhLAorCSAgMHgyMCwgMHg4MywgMHhkZiwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCB9IH0sCisJeyB7MHg3MywgMHg2MywgMHg5NywgMHg2OSwgMHg4ZSwgMHhlYywgMHhmMCwKKwkgIHg5MCwgMHg4YywgMHg1NywgMHhlZCwgMHgyMCwgMHgwMCwgMHgwNSwgMHgwMSB9IH0KIH07CiAjZW5kaWYKIAogLyphZGQgZm9yIG5ldyBVTklWR0FCSU9TKi8KLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFUYWJsU3RydWN0IFhHSV9MQ0REYXRhVGFibGVbXSA9Ci17Ci0gIHtQYW5lbDEwMjR4NzY4LDB4MDAxOSwweDAwMDEsMH0sICAvKiBYR0lfRXh0TENEMTAyNHg3NjhEYXRhICovCi0gIHtQYW5lbDEwMjR4NzY4LDB4MDAxOSwweDAwMDAsMX0sICAvKiBYR0lfU3RMQ0QxMDI0eDc2OERhdGEgKi8KLSAge1BhbmVsMTAyNHg3NjgsMHgwMDE4LDB4MDAxMCwyfSwgIC8qIFhHSV9DZXRMQ0QxMDI0eDc2OERhdGEgKi8KLSAge1BhbmVsMTI4MHgxMDI0LDB4MDAxOSwweDAwMDEsM30sICAvKiBYR0lfRXh0TENEMTI4MHgxMDI0RGF0YSAqLwotICB7UGFuZWwxMjgweDEwMjQsMHgwMDE5LDB4MDAwMCw0fSwgIC8qIFhHSV9TdExDRDEyODB4MTAyNERhdGEgKi8KLSAge1BhbmVsMTI4MHgxMDI0LDB4MDAxOCwweDAwMTAsNX0sICAvKiBYR0lfQ2V0TENEMTI4MHgxMDI0RGF0YSAqLwotICB7UGFuZWwxNDAweDEwNTAsMHgwMDE5LDB4MDAwMSw2fSwgIC8qIFhHSV9FeHRMQ0QxNDAweDEwNTBEYXRhICovCi0gIHtQYW5lbDE0MDB4MTA1MCwweDAwMTksMHgwMDAwLDd9LCAgLyogWEdJX1N0TENEMTQwMHgxMDUwRGF0YSAqLwotICB7UGFuZWwxNDAweDEwNTAsMHgwMDE4LDB4MDAxMCw4fSwgIC8qIFhHSV9DZXRMQ0QxNDAweDEwNTBEYXRhICovCi0gIHtQYW5lbDE2MDB4MTIwMCwweDAwMTksMHgwMDAxLDl9LCAgIC8qIFhHSV9FeHRMQ0QxNjAweDEyMDBEYXRhICovCi0gIHtQYW5lbDE2MDB4MTIwMCwweDAwMTksMHgwMDAwLDEwfSwgIC8qIFhHSV9TdExDRDE2MDB4MTIwMERhdGEgKi8KLSAge1BhbmVsUmVmNjBIeiwweDAwMDgsMHgwMDA4LDExfSwgIAkvKiBYR0lfTm9TY2FsaW5nRGF0YSAqLwotICB7UGFuZWwxMDI0eDc2OHg3NSwweDAwMTksMHgwMDAxLDEyfSwgCS8qIFhHSV9FeHRMQ0QxMDI0eDc2OHg3NURhdGEgKi8KLSAge1BhbmVsMTAyNHg3Njh4NzUsMHgwMDE5LDB4MDAwMCwxM30sIAkvKiBYR0lfU3RMQ0QxMDI0eDc2OHg3NURhdGEgKi8KLSAge1BhbmVsMTAyNHg3Njh4NzUsMHgwMDE4LDB4MDAxMCwxNH0sIAkvKiBYR0lfQ2V0TENEMTAyNHg3Njh4NzVEYXRhICovCi0gIHtQYW5lbDEyODB4MTAyNHg3NSwweDAwMTksMHgwMDAxLDE1fSwgLyogWEdJX0V4dExDRDEyODB4MTAyNHg3NURhdGEgKi8KLSAge1BhbmVsMTI4MHgxMDI0eDc1LDB4MDAxOSwweDAwMDAsMTZ9LCAvKiBYR0lfU3RMQ0QxMjgweDEwMjR4NzVEYXRhICovCi0gIHtQYW5lbDEyODB4MTAyNHg3NSwweDAwMTgsMHgwMDEwLDE3fSwgLyogWEdJX0NldExDRDEyODB4MTAyNHg3NURhdGEgKi8KLSAge1BhbmVsUmVmNzVIeiwweDAwMDgsMHgwMDA4LDE4fSwJLyogWEdJX05vU2NhbGluZ0RhdGF4NzUgKi8KLSAgezB4RkYsMHgwMDAwLDB4MDAwMCwwfSAgIAkJLyogRW5kIG9mIHRhYmxlICovCitzdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhVGFibFN0cnVjdCBYR0lfTENERGF0YVRhYmxlW10gPSB7CisJe1BhbmVsMTAyNHg3NjgsIDB4MDAxOSwgMHgwMDAxLCAwfSwgLyogWEdJX0V4dExDRDEwMjR4NzY4RGF0YSAqLworCXtQYW5lbDEwMjR4NzY4LCAweDAwMTksIDB4MDAwMCwgMX0sIC8qIFhHSV9TdExDRDEwMjR4NzY4RGF0YSAqLworCXtQYW5lbDEwMjR4NzY4LCAweDAwMTgsIDB4MDAxMCwgMn0sIC8qIFhHSV9DZXRMQ0QxMDI0eDc2OERhdGEgKi8KKwl7UGFuZWwxMjgweDEwMjQsIDB4MDAxOSwgMHgwMDAxLCAzfSwgLyogWEdJX0V4dExDRDEyODB4MTAyNERhdGEgKi8KKwl7UGFuZWwxMjgweDEwMjQsIDB4MDAxOSwgMHgwMDAwLCA0fSwgLyogWEdJX1N0TENEMTI4MHgxMDI0RGF0YSAqLworCXtQYW5lbDEyODB4MTAyNCwgMHgwMDE4LCAweDAwMTAsIDV9LCAvKiBYR0lfQ2V0TENEMTI4MHgxMDI0RGF0YSAqLworCXtQYW5lbDE0MDB4MTA1MCwgMHgwMDE5LCAweDAwMDEsIDZ9LCAvKiBYR0lfRXh0TENEMTQwMHgxMDUwRGF0YSAqLworCXtQYW5lbDE0MDB4MTA1MCwgMHgwMDE5LCAweDAwMDAsIDd9LCAvKiBYR0lfU3RMQ0QxNDAweDEwNTBEYXRhICovCisJe1BhbmVsMTQwMHgxMDUwLCAweDAwMTgsIDB4MDAxMCwgOH0sIC8qIFhHSV9DZXRMQ0QxNDAweDEwNTBEYXRhICovCisJe1BhbmVsMTYwMHgxMjAwLCAweDAwMTksIDB4MDAwMSwgOX0sIC8qIFhHSV9FeHRMQ0QxNjAweDEyMDBEYXRhICovCisJe1BhbmVsMTYwMHgxMjAwLCAweDAwMTksIDB4MDAwMCwgMTB9LCAvKiBYR0lfU3RMQ0QxNjAweDEyMDBEYXRhICovCisJe1BhbmVsUmVmNjBIeiwgMHgwMDA4LCAweDAwMDgsIDExfSwgLyogWEdJX05vU2NhbGluZ0RhdGEgKi8KKwl7UGFuZWwxMDI0eDc2OHg3NSwgMHgwMDE5LCAweDAwMDEsIDEyfSwgLyogWEdJX0V4dExDRDEwMjR4NzY4eDc1RGF0YSAqLworCXtQYW5lbDEwMjR4NzY4eDc1LCAweDAwMTksIDB4MDAwMCwgMTN9LCAvKiBYR0lfU3RMQ0QxMDI0eDc2OHg3NURhdGEgKi8KKwl7UGFuZWwxMDI0eDc2OHg3NSwgMHgwMDE4LCAweDAwMTAsIDE0fSwgLyogWEdJX0NldExDRDEwMjR4NzY4eDc1RGF0YSAqLworCXtQYW5lbDEyODB4MTAyNHg3NSwgMHgwMDE5LCAweDAwMDEsIDE1fSwgLyogWEdJX0V4dExDRDEyODB4MTAyNHg3NURhdGEqLworCXtQYW5lbDEyODB4MTAyNHg3NSwgMHgwMDE5LCAweDAwMDAsIDE2fSwgLyogWEdJX1N0TENEMTI4MHgxMDI0eDc1RGF0YSAqLworCXtQYW5lbDEyODB4MTAyNHg3NSwgMHgwMDE4LCAweDAwMTAsIDE3fSwgLyogWEdJX0NldExDRDEyODB4MTAyNHg3NURhdGEqLworCXtQYW5lbFJlZjc1SHosIDB4MDAwOCwgMHgwMDA4LCAxOH0sIC8qIFhHSV9Ob1NjYWxpbmdEYXRheDc1ICovCisJezB4RkYsIDB4MDAwMCwgMHgwMDAwLCAwfSAvKiBFbmQgb2YgdGFibGUgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFUYWJsU3RydWN0IFhHSV9MQ0REZXNEYXRhVGFibGVbXSA9Ci17Ci0gIHtQYW5lbDEwMjR4NzY4LDB4MDAxOSwweDAwMDEsMH0sIC8qIFhHSV9FeHRMQ0REZXMxMDI0eDc2OERhdGEgKi8KLSAge1BhbmVsMTAyNHg3NjgsMHgwMDE5LDB4MDAwMCwxfSwgLyogWEdJX1N0TENERGVzMTAyNHg3NjhEYXRhICovCi0gIHtQYW5lbDEwMjR4NzY4LDB4MDAxOCwweDAwMTAsMn0sIC8qIFhHSV9DZXRMQ0REZXMxMDI0eDc2OERhdGEgKi8KLSAge1BhbmVsMTI4MHgxMDI0LDB4MDAxOSwweDAwMDEsM30sIC8qIFhHSV9FeHRMQ0REZXMxMjgweDEwMjREYXRhICovCi0gIHtQYW5lbDEyODB4MTAyNCwweDAwMTksMHgwMDAwLDR9LCAvKiBYR0lfU3RMQ0REZXMxMjgweDEwMjREYXRhICovCi0gIHtQYW5lbDEyODB4MTAyNCwweDAwMTgsMHgwMDEwLDV9LCAvKiBYR0lfQ2V0TENERGVzMTI4MHgxMDI0RGF0YSAqLwotICB7UGFuZWwxNDAweDEwNTAsMHgwMDE5LDB4MDAwMSw2fSwgLyogWEdJX0V4dExDRERlczE0MDB4MTA1MERhdGEgKi8KLSAge1BhbmVsMTQwMHgxMDUwLDB4MDAxOSwweDAwMDAsN30sIC8qIFhHSV9TdExDRERlczE0MDB4MTA1MERhdGEgKi8KLSAge1BhbmVsMTQwMHgxMDUwLDB4MDQxOCwweDAwMTAsOH0sIC8qIFhHSV9DZXRMQ0REZXMxNDAweDEwNTBEYXRhICovCi0gIHtQYW5lbDE0MDB4MTA1MCwweDA0MTgsMHgwNDEwLDl9LCAvKiBYR0lfQ2V0TENERGVzMTQwMHgxMDUwRGF0YTIgKi8KLSAge1BhbmVsMTYwMHgxMjAwLDB4MDAxOSwweDAwMDEsMTB9LCAvKiBYR0lfRXh0TENERGVzMTYwMHgxMjAwRGF0YSAqLwotICB7UGFuZWwxNjAweDEyMDAsMHgwMDE5LDB4MDAwMCwxMX0sIC8qIFhHSV9TdExDRERlczE2MDB4MTIwMERhdGEgKi8KLSAge1BhbmVsUmVmNjBIeiwweDAwMDgsMHgwMDA4LDEyfSwgCS8qIFhHSV9Ob1NjYWxpbmdEZXNEYXRhICovCi0gIHtQYW5lbDEwMjR4NzY4eDc1LDB4MDAxOSwweDAwMDEsMTN9LCAJLyogWEdJX0V4dExDRERlczEwMjR4NzY4eDc1RGF0YSAqLwotICB7UGFuZWwxMDI0eDc2OHg3NSwweDAwMTksMHgwMDAwLDE0fSwJLyogWEdJX1N0TENERGVzMTAyNHg3Njh4NzVEYXRhICovCi0gIHtQYW5lbDEwMjR4NzY4eDc1LDB4MDAxOCwweDAwMTAsMTV9LCAgLyogWEdJX0NldExDRERlczEwMjR4NzY4eDc1RGF0YSAqLwotICB7UGFuZWwxMjgweDEwMjR4NzUsMHgwMDE5LDB4MDAwMSwxNn0sCS8qIFhHSV9FeHRMQ0REZXMxMjgweDEwMjR4NzVEYXRhICovCi0gIHtQYW5lbDEyODB4MTAyNHg3NSwweDAwMTksMHgwMDAwLDE3fSwgLyogWEdJX1N0TENERGVzMTI4MHgxMDI0eDc1RGF0YSAqLwotICB7UGFuZWwxMjgweDEwMjR4NzUsMHgwMDE4LDB4MDAxMCwxOH0sCS8qIFhHSV9DZXRMQ0REZXMxMjgweDEwMjR4NzVEYXRhICovCi0gIHtQYW5lbFJlZjc1SHosMHgwMDA4LDB4MDAwOCwxOX0sCS8qIFhHSV9Ob1NjYWxpbmdEZXNEYXRheDc1ICovCi0gIHsweEZGLDB4MDAwMCwweDAwMDAsMH0KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFUYWJsU3RydWN0IFhHSV9MQ0REZXNEYXRhVGFibGVbXSA9IHsKKwl7UGFuZWwxMDI0eDc2OCwgMHgwMDE5LCAweDAwMDEsIDB9LCAvKiBYR0lfRXh0TENERGVzMTAyNHg3NjhEYXRhICovCisJe1BhbmVsMTAyNHg3NjgsIDB4MDAxOSwgMHgwMDAwLCAxfSwgLyogWEdJX1N0TENERGVzMTAyNHg3NjhEYXRhICovCisJe1BhbmVsMTAyNHg3NjgsIDB4MDAxOCwgMHgwMDEwLCAyfSwgLyogWEdJX0NldExDRERlczEwMjR4NzY4RGF0YSAqLworCXtQYW5lbDEyODB4MTAyNCwgMHgwMDE5LCAweDAwMDEsIDN9LCAvKiBYR0lfRXh0TENERGVzMTI4MHgxMDI0RGF0YSAqLworCXtQYW5lbDEyODB4MTAyNCwgMHgwMDE5LCAweDAwMDAsIDR9LCAvKiBYR0lfU3RMQ0REZXMxMjgweDEwMjREYXRhICovCisJe1BhbmVsMTI4MHgxMDI0LCAweDAwMTgsIDB4MDAxMCwgNX0sIC8qIFhHSV9DZXRMQ0REZXMxMjgweDEwMjREYXRhICovCisJe1BhbmVsMTQwMHgxMDUwLCAweDAwMTksIDB4MDAwMSwgNn0sIC8qIFhHSV9FeHRMQ0REZXMxNDAweDEwNTBEYXRhICovCisJe1BhbmVsMTQwMHgxMDUwLCAweDAwMTksIDB4MDAwMCwgN30sIC8qIFhHSV9TdExDRERlczE0MDB4MTA1MERhdGEgKi8KKwl7UGFuZWwxNDAweDEwNTAsIDB4MDQxOCwgMHgwMDEwLCA4fSwgLyogWEdJX0NldExDRERlczE0MDB4MTA1MERhdGEgKi8KKwl7UGFuZWwxNDAweDEwNTAsIDB4MDQxOCwgMHgwNDEwLCA5fSwgLyogWEdJX0NldExDRERlczE0MDB4MTA1MERhdGEyICovCisJe1BhbmVsMTYwMHgxMjAwLCAweDAwMTksIDB4MDAwMSwgMTB9LCAvKiBYR0lfRXh0TENERGVzMTYwMHgxMjAwRGF0YSAqLworCXtQYW5lbDE2MDB4MTIwMCwgMHgwMDE5LCAweDAwMDAsIDExfSwgLyogWEdJX1N0TENERGVzMTYwMHgxMjAwRGF0YSAqLworCXtQYW5lbFJlZjYwSHosIDB4MDAwOCwgMHgwMDA4LCAxMn0sIC8qIFhHSV9Ob1NjYWxpbmdEZXNEYXRhICovCisJe1BhbmVsMTAyNHg3Njh4NzUsIDB4MDAxOSwgMHgwMDAxLCAxM30sIC8qWEdJX0V4dExDRERlczEwMjR4NzY4eDc1RGF0YSovCisJe1BhbmVsMTAyNHg3Njh4NzUsIDB4MDAxOSwgMHgwMDAwLCAxNH0sIC8qIFhHSV9TdExDRERlczEwMjR4NzY4eDc1RGF0YSovCisJe1BhbmVsMTAyNHg3Njh4NzUsIDB4MDAxOCwgMHgwMDEwLCAxNX0sIC8qWEdJX0NldExDRERlczEwMjR4NzY4eDc1RGF0YSovCisJLyogWEdJX0V4dExDRERlczEyODB4MTAyNHg3NURhdGEgKi8KKwl7UGFuZWwxMjgweDEwMjR4NzUsIDB4MDAxOSwgMHgwMDAxLCAxNn0sCisJLyogWEdJX1N0TENERGVzMTI4MHgxMDI0eDc1RGF0YSAqLworCXtQYW5lbDEyODB4MTAyNHg3NSwgMHgwMDE5LCAweDAwMDAsIDE3fSwKKwkvKiBYR0lfQ2V0TENERGVzMTI4MHgxMDI0eDc1RGF0YSAqLworCXtQYW5lbDEyODB4MTAyNHg3NSwgMHgwMDE4LCAweDAwMTAsIDE4fSwKKwl7UGFuZWxSZWY3NUh6LCAweDAwMDgsIDB4MDAwOCwgMTl9LCAvKiBYR0lfTm9TY2FsaW5nRGVzRGF0YXg3NSAqLworCXsweEZGLCAweDAwMDAsIDB4MDAwMCwgMH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFUYWJsU3RydWN0IFhHSV9FUExMQ0RDUlQxUHRyX0hbXSA9Ci17Ci0gIHtQYW5lbDEwMjR4NzY4LDB4MDAxOCwweDAwMDAsMH0sIC8qIFhHSV9MVkRTQ1JUMTEwMjR4NzY4XzFfSCAqLwotICB7UGFuZWwxMDI0eDc2OCwweDAwMTgsMHgwMDEwLDF9LCAvKiBYR0lfTFZEU0NSVDExMDI0eDc2OF8yX0ggKi8KLSAge1BhbmVsMTI4MHgxMDI0LDB4MDAxOCwweDAwMDAsMn0sIC8qIFhHSV9MVkRTQ1JUMTEyODB4MTAyNF8xX0ggKi8KLSAge1BhbmVsMTI4MHgxMDI0LDB4MDAxOCwweDAwMTAsM30sIC8qIFhHSV9MVkRTQ1JUMTEyODB4MTAyNF8yX0ggKi8KLSAge1BhbmVsMTQwMHgxMDUwLDB4MDAxOCwweDAwMDAsNH0sIC8qIFhHSV9MVkRTQ1JUMTE0MDB4MTA1MF8xX0ggKi8KLSAge1BhbmVsMTQwMHgxMDUwLDB4MDAxOCwweDAwMTAsNX0sIC8qIFhHSV9MVkRTQ1JUMTE0MDB4MTA1MF8yX0ggKi8KLSAge1BhbmVsMTYwMHgxMjAwLDB4MDAxOCwweDAwMDAsNn0sICAvKiBYR0lfTFZEU0NSVDExNjAweDEyMDBfMV9IICovCi0gIHtQYW5lbDEwMjR4NzY4eDc1LDB4MDAxOCwweDAwMDAsN30sCS8qIFhHSV9MVkRTQ1JUMTEwMjR4NzY4XzFfSHg3NSAqLwotICB7UGFuZWwxMDI0eDc2OHg3NSwweDAwMTgsMHgwMDEwLDh9LAkvKiBYR0lfTFZEU0NSVDExMDI0eDc2OF8yX0h4NzUgKi8KLSAge1BhbmVsMTI4MHgxMDI0eDc1LDB4MDAxOCwweDAwMDAsOX0sCS8qIFhHSV9MVkRTQ1JUMTEyODB4MTAyNF8xX0h4NzUgKi8KLSAge1BhbmVsMTI4MHgxMDI0eDc1LDB4MDAxOCwweDAwMTAsMTB9LAkvKiBYR0lfTFZEU0NSVDExMjgweDEwMjRfMl9IeDc1ICovCi0gIHsweEZGLDB4MDAwMCwweDAwMDAsMH0KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFUYWJsU3RydWN0IFhHSV9FUExMQ0RDUlQxUHRyX0hbXSA9IHsKKwl7UGFuZWwxMDI0eDc2OCwgMHgwMDE4LCAweDAwMDAsIDB9LCAvKiBYR0lfTFZEU0NSVDExMDI0eDc2OF8xX0ggKi8KKwl7UGFuZWwxMDI0eDc2OCwgMHgwMDE4LCAweDAwMTAsIDF9LCAvKiBYR0lfTFZEU0NSVDExMDI0eDc2OF8yX0ggKi8KKwl7UGFuZWwxMjgweDEwMjQsIDB4MDAxOCwgMHgwMDAwLCAyfSwgLyogWEdJX0xWRFNDUlQxMTI4MHgxMDI0XzFfSCAqLworCXtQYW5lbDEyODB4MTAyNCwgMHgwMDE4LCAweDAwMTAsIDN9LCAvKiBYR0lfTFZEU0NSVDExMjgweDEwMjRfMl9IICovCisJe1BhbmVsMTQwMHgxMDUwLCAweDAwMTgsIDB4MDAwMCwgNH0sIC8qIFhHSV9MVkRTQ1JUMTE0MDB4MTA1MF8xX0ggKi8KKwl7UGFuZWwxNDAweDEwNTAsIDB4MDAxOCwgMHgwMDEwLCA1fSwgLyogWEdJX0xWRFNDUlQxMTQwMHgxMDUwXzJfSCAqLworCXtQYW5lbDE2MDB4MTIwMCwgMHgwMDE4LCAweDAwMDAsIDZ9LCAvKiBYR0lfTFZEU0NSVDExNjAweDEyMDBfMV9IICovCisJe1BhbmVsMTAyNHg3Njh4NzUsIDB4MDAxOCwgMHgwMDAwLCA3fSwgLyogWEdJX0xWRFNDUlQxMTAyNHg3NjhfMV9IeDc1ICovCisJe1BhbmVsMTAyNHg3Njh4NzUsIDB4MDAxOCwgMHgwMDEwLCA4fSwgLyogWEdJX0xWRFNDUlQxMTAyNHg3NjhfMl9IeDc1ICovCisJe1BhbmVsMTI4MHgxMDI0eDc1LCAweDAwMTgsIDB4MDAwMCwgOX0sIC8qWEdJX0xWRFNDUlQxMTI4MHgxMDI0XzFfSHg3NSovCisJe1BhbmVsMTI4MHgxMDI0eDc1LCAweDAwMTgsIDB4MDAxMCwgMTB9LC8qWEdJX0xWRFNDUlQxMTI4MHgxMDI0XzJfSHg3NSovCisJezB4RkYsIDB4MDAwMCwgMHgwMDAwLCAwfQogfTsKIAotc3RhdGljIHN0cnVjdCBYR0kzMzBfTENERGF0YVRhYmxTdHJ1Y3QgWEdJX0VQTExDRENSVDFQdHJfVltdID0KLXsKLSAge1BhbmVsMTAyNHg3NjgsMHgwMDE4LDB4MDAwMCwwfSwgLyogWEdJX0xWRFNDUlQxMTAyNHg3NjhfMV9WICovCi0gIHtQYW5lbDEwMjR4NzY4LDB4MDAxOCwweDAwMTAsMX0sIC8qIFhHSV9MVkRTQ1JUMTEwMjR4NzY4XzJfViAqLwotICB7UGFuZWwxMjgweDEwMjQsMHgwMDE4LDB4MDAwMCwyfSwgLyogWEdJX0xWRFNDUlQxMTI4MHgxMDI0XzFfViAqLwotICB7UGFuZWwxMjgweDEwMjQsMHgwMDE4LDB4MDAxMCwzfSwgLyogWEdJX0xWRFNDUlQxMTI4MHgxMDI0XzJfViAqLwotICB7UGFuZWwxNDAweDEwNTAsMHgwMDE4LDB4MDAwMCw0fSwgLyogWEdJX0xWRFNDUlQxMTQwMHgxMDUwXzFfViAqLwotICB7UGFuZWwxNDAweDEwNTAsMHgwMDE4LDB4MDAxMCw1fSwgLyogWEdJX0xWRFNDUlQxMTQwMHgxMDUwXzJfViAqLwotICB7UGFuZWwxNjAweDEyMDAsMHgwMDE4LDB4MDAwMCw2fSwgLyogWEdJX0xWRFNDUlQxMTYwMHgxMjAwXzFfViAqLwotICB7UGFuZWwxMDI0eDc2OHg3NSwweDAwMTgsMHgwMDAwLDd9LAkvKiBYR0lfTFZEU0NSVDExMDI0eDc2OF8xX1Z4NzUgKi8KLSAge1BhbmVsMTAyNHg3Njh4NzUsMHgwMDE4LDB4MDAxMCw4fSwJLyogWEdJX0xWRFNDUlQxMTAyNHg3NjhfMl9WeDc1ICovCi0gIHtQYW5lbDEyODB4MTAyNHg3NSwweDAwMTgsMHgwMDAwLDl9LAkvKiBYR0lfTFZEU0NSVDExMjgweDEwMjRfMV9WeDc1ICovCi0gIHtQYW5lbDEyODB4MTAyNHg3NSwweDAwMTgsMHgwMDEwLDEwfSwJLyogWEdJX0xWRFNDUlQxMTI4MHgxMDI0XzJfVng3NSAqLwotICB7MHhGRiwweDAwMDAsMHgwMDAwLDB9CitzdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhVGFibFN0cnVjdCBYR0lfRVBMTENEQ1JUMVB0cl9WW10gPSB7CisJe1BhbmVsMTAyNHg3NjgsIDB4MDAxOCwgMHgwMDAwLCAwfSwgLyogWEdJX0xWRFNDUlQxMTAyNHg3NjhfMV9WICovCisJe1BhbmVsMTAyNHg3NjgsIDB4MDAxOCwgMHgwMDEwLCAxfSwgLyogWEdJX0xWRFNDUlQxMTAyNHg3NjhfMl9WICovCisJe1BhbmVsMTI4MHgxMDI0LCAweDAwMTgsIDB4MDAwMCwgMn0sIC8qIFhHSV9MVkRTQ1JUMTEyODB4MTAyNF8xX1YgKi8KKwl7UGFuZWwxMjgweDEwMjQsIDB4MDAxOCwgMHgwMDEwLCAzfSwgLyogWEdJX0xWRFNDUlQxMTI4MHgxMDI0XzJfViAqLworCXtQYW5lbDE0MDB4MTA1MCwgMHgwMDE4LCAweDAwMDAsIDR9LCAvKiBYR0lfTFZEU0NSVDExNDAweDEwNTBfMV9WICovCisJe1BhbmVsMTQwMHgxMDUwLCAweDAwMTgsIDB4MDAxMCwgNX0sIC8qIFhHSV9MVkRTQ1JUMTE0MDB4MTA1MF8yX1YgKi8KKwl7UGFuZWwxNjAweDEyMDAsIDB4MDAxOCwgMHgwMDAwLCA2fSwgLyogWEdJX0xWRFNDUlQxMTYwMHgxMjAwXzFfViAqLworCXtQYW5lbDEwMjR4NzY4eDc1LCAweDAwMTgsIDB4MDAwMCwgN30sIC8qIFhHSV9MVkRTQ1JUMTEwMjR4NzY4XzFfVng3NSAqLworCXtQYW5lbDEwMjR4NzY4eDc1LCAweDAwMTgsIDB4MDAxMCwgOH0sIC8qIFhHSV9MVkRTQ1JUMTEwMjR4NzY4XzJfVng3NSAqLworCXtQYW5lbDEyODB4MTAyNHg3NSwgMHgwMDE4LCAweDAwMDAsIDl9LCAvKlhHSV9MVkRTQ1JUMTEyODB4MTAyNF8xX1Z4NzUqLworCXtQYW5lbDEyODB4MTAyNHg3NSwgMHgwMDE4LCAweDAwMTAsIDEwfSwvKlhHSV9MVkRTQ1JUMTEyODB4MTAyNF8yX1Z4NzUqLworCXsweEZGLCAweDAwMDAsIDB4MDAwMCwgMH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFUYWJsU3RydWN0IFhHSV9FUExMQ0REYXRhUHRyW10gPQotewotICB7UGFuZWwxMDI0eDc2OCwweDAwMTgsMHgwMDAwLDB9LCAvKiBYR0lfTFZEUzEwMjR4NzY4RGF0YV8xICovCi0gIHtQYW5lbDEwMjR4NzY4LDB4MDAxOCwweDAwMTAsMX0sIC8qIFhHSV9MVkRTMTAyNHg3NjhEYXRhXzIgKi8KLSAge1BhbmVsMTI4MHgxMDI0LDB4MDAxOCwweDAwMDAsMn0sIC8qIFhHSV9MVkRTMTI4MHgxMDI0RGF0YV8xICovCi0gIHtQYW5lbDEyODB4MTAyNCwweDAwMTgsMHgwMDEwLDN9LCAvKiBYR0lfTFZEUzEyODB4MTAyNERhdGFfMiAqLwotICB7UGFuZWwxNDAweDEwNTAsMHgwMDE4LDB4MDAwMCw0fSwgLyogWEdJX0xWRFMxNDAweDEwNTBEYXRhXzEgKi8KLSAge1BhbmVsMTQwMHgxMDUwLDB4MDAxOCwweDAwMTAsNX0sIC8qIFhHSV9MVkRTMTQwMHgxMDUwRGF0YV8yICovCi0gIHtQYW5lbDE2MDB4MTIwMCwweDAwMTgsMHgwMDAwLDZ9LCAvKiBYR0lfTFZEUzE2MDB4MTIwMERhdGFfMSAqLwotICB7UGFuZWxSZWY2MEh6LDB4MDAwOCwweDAwMDgsN30sIC8qIFhHSV9MVkRTTm9TY2FsaW5nRGF0YSAqLwotICB7UGFuZWwxMDI0eDc2OHg3NSwweDAwMTgsMHgwMDAwLDh9LAkvKiBYR0lfTFZEUzEwMjR4NzY4RGF0YV8xeDc1ICovCi0gIHtQYW5lbDEwMjR4NzY4eDc1LDB4MDAxOCwweDAwMTAsOX0sCS8qIFhHSV9MVkRTMTAyNHg3NjhEYXRhXzJ4NzUgKi8KLSAge1BhbmVsMTI4MHgxMDI0eDc1LDB4MDAxOCwweDAwMDAsMTB9LAkvKiBYR0lfTFZEUzEyODB4MTAyNERhdGFfMXg3NSAqLwotICB7UGFuZWwxMjgweDEwMjR4NzUsMHgwMDE4LDB4MDAxMCwxMX0sIC8qIFhHSV9MVkRTMTI4MHgxMDI0RGF0YV8yeDc1ICovCi0gIHtQYW5lbFJlZjc1SHosMHgwMDA4LDB4MDAwOCwxMn0sCS8qIFhHSV9MVkRTTm9TY2FsaW5nRGF0YXg3NSAqLwotICB7MHhGRiwweDAwMDAsMHgwMDAwLDB9CitzdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhVGFibFN0cnVjdCBYR0lfRVBMTENERGF0YVB0cltdID0geworCXtQYW5lbDEwMjR4NzY4LCAweDAwMTgsIDB4MDAwMCwgMH0sIC8qIFhHSV9MVkRTMTAyNHg3NjhEYXRhXzEgKi8KKwl7UGFuZWwxMDI0eDc2OCwgMHgwMDE4LCAweDAwMTAsIDF9LCAvKiBYR0lfTFZEUzEwMjR4NzY4RGF0YV8yICovCisJe1BhbmVsMTI4MHgxMDI0LCAweDAwMTgsIDB4MDAwMCwgMn0sIC8qIFhHSV9MVkRTMTI4MHgxMDI0RGF0YV8xICovCisJe1BhbmVsMTI4MHgxMDI0LCAweDAwMTgsIDB4MDAxMCwgM30sIC8qIFhHSV9MVkRTMTI4MHgxMDI0RGF0YV8yICovCisJe1BhbmVsMTQwMHgxMDUwLCAweDAwMTgsIDB4MDAwMCwgNH0sIC8qIFhHSV9MVkRTMTQwMHgxMDUwRGF0YV8xICovCisJe1BhbmVsMTQwMHgxMDUwLCAweDAwMTgsIDB4MDAxMCwgNX0sIC8qIFhHSV9MVkRTMTQwMHgxMDUwRGF0YV8yICovCisJe1BhbmVsMTYwMHgxMjAwLCAweDAwMTgsIDB4MDAwMCwgNn0sIC8qIFhHSV9MVkRTMTYwMHgxMjAwRGF0YV8xICovCisJe1BhbmVsUmVmNjBIeiwgMHgwMDA4LCAweDAwMDgsIDd9LCAvKiBYR0lfTFZEU05vU2NhbGluZ0RhdGEgKi8KKwl7UGFuZWwxMDI0eDc2OHg3NSwgMHgwMDE4LCAweDAwMDAsIDh9LCAvKiBYR0lfTFZEUzEwMjR4NzY4RGF0YV8xeDc1ICovCisJe1BhbmVsMTAyNHg3Njh4NzUsIDB4MDAxOCwgMHgwMDEwLCA5fSwgLyogWEdJX0xWRFMxMDI0eDc2OERhdGFfMng3NSAqLworCXtQYW5lbDEyODB4MTAyNHg3NSwgMHgwMDE4LCAweDAwMDAsIDEwfSwgLyogWEdJX0xWRFMxMjgweDEwMjREYXRhXzF4NzUqLworCXtQYW5lbDEyODB4MTAyNHg3NSwgMHgwMDE4LCAweDAwMTAsIDExfSwgIC8qWEdJX0xWRFMxMjgweDEwMjREYXRhXzJ4NzUqLworCXtQYW5lbFJlZjc1SHosIDB4MDAwOCwgMHgwMDA4LCAxMn0sIC8qIFhHSV9MVkRTTm9TY2FsaW5nRGF0YXg3NSAqLworCXsweEZGLCAweDAwMDAsIDB4MDAwMCwgMH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFUYWJsU3RydWN0IFhHSV9FUExMQ0REZXNEYXRhUHRyW10gPQotewotICB7UGFuZWwxMDI0eDc2OCwweDAwMTgsMHgwMDAwLDB9LCAvKiBYR0lfTFZEUzEwMjR4NzY4RGVzXzEgKi8KLSAge1BhbmVsMTAyNHg3NjgsMHgwNjE4LDB4MDQxMCwxfSwgLyogWEdJX0xWRFMxMDI0eDc2OERlc18zICovCi0gIHtQYW5lbDEwMjR4NzY4LDB4MDAxOCwweDAwMTAsMn0sIC8qIFhHSV9MVkRTMTAyNHg3NjhEZXNfMiAqLwotICB7UGFuZWwxMjgweDEwMjQsMHgwMDE4LDB4MDAwMCwzfSwgLyogWEdJX0xWRFMxMjgweDEwMjREZXNfMSAqLwotICB7UGFuZWwxMjgweDEwMjQsMHgwMDE4LDB4MDAxMCw0fSwgLyogWEdJX0xWRFMxMjgweDEwMjREZXNfMiAqLwotICB7UGFuZWwxNDAweDEwNTAsMHgwMDE4LDB4MDAwMCw1fSwgLyogWEdJX0xWRFMxNDAweDEwNTBEZXNfMSAqLwotICB7UGFuZWwxNDAweDEwNTAsMHgwMDE4LDB4MDAxMCw2fSwgLyogWEdJX0xWRFMxNDAweDEwNTBEZXNfMiAqLwotICB7UGFuZWwxNjAweDEyMDAsMHgwMDE4LDB4MDAwMCw3fSwgLyogWEdJX0xWRFMxNjAweDEyMDBEZXNfMSAqLwotICB7UGFuZWxSZWY2MEh6LDB4MDAwOCwweDAwMDgsOH0sIAkvKiBYR0lfTFZEU05vU2NhbGluZ0Rlc0RhdGEgKi8KLSAge1BhbmVsMTAyNHg3Njh4NzUsMHgwMDE4LDB4MDAwMCw5fSwJLyogWEdJX0xWRFMxMDI0eDc2OERlc18xeDc1ICovCi0gIHtQYW5lbDEwMjR4NzY4eDc1LDB4MDYxOCwweDA0MTAsMTB9LAkvKiBYR0lfTFZEUzEwMjR4NzY4RGVzXzN4NzUgKi8KLSAge1BhbmVsMTAyNHg3Njh4NzUsMHgwMDE4LDB4MDAxMCwxMX0sCS8qIFhHSV9MVkRTMTAyNHg3NjhEZXNfMng3NSAqLwotICB7UGFuZWwxMjgweDEwMjR4NzUsMHgwMDE4LDB4MDAwMCwxMn0sCS8qIFhHSV9MVkRTMTI4MHgxMDI0RGVzXzF4NzUgKi8KLSAge1BhbmVsMTI4MHgxMDI0eDc1LDB4MDAxOCwweDAwMTAsMTN9LAkvKiBYR0lfTFZEUzEyODB4MTAyNERlc18yeDc1ICovCi0gIHtQYW5lbFJlZjc1SHosMHgwMDA4LDB4MDAwOCwxNH0sCS8qIFhHSV9MVkRTTm9TY2FsaW5nRGVzRGF0YXg3NSAqLwotICB7MHhGRiwweDAwMDAsMHgwMDAwLDB9CitzdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhVGFibFN0cnVjdCBYR0lfRVBMTENERGVzRGF0YVB0cltdID0geworCXtQYW5lbDEwMjR4NzY4LCAweDAwMTgsIDB4MDAwMCwgMH0sIC8qIFhHSV9MVkRTMTAyNHg3NjhEZXNfMSAqLworCXtQYW5lbDEwMjR4NzY4LCAweDA2MTgsIDB4MDQxMCwgMX0sIC8qIFhHSV9MVkRTMTAyNHg3NjhEZXNfMyAqLworCXtQYW5lbDEwMjR4NzY4LCAweDAwMTgsIDB4MDAxMCwgMn0sIC8qIFhHSV9MVkRTMTAyNHg3NjhEZXNfMiAqLworCXtQYW5lbDEyODB4MTAyNCwgMHgwMDE4LCAweDAwMDAsIDN9LCAvKiBYR0lfTFZEUzEyODB4MTAyNERlc18xICovCisJe1BhbmVsMTI4MHgxMDI0LCAweDAwMTgsIDB4MDAxMCwgNH0sIC8qIFhHSV9MVkRTMTI4MHgxMDI0RGVzXzIgKi8KKwl7UGFuZWwxNDAweDEwNTAsIDB4MDAxOCwgMHgwMDAwLCA1fSwgLyogWEdJX0xWRFMxNDAweDEwNTBEZXNfMSAqLworCXtQYW5lbDE0MDB4MTA1MCwgMHgwMDE4LCAweDAwMTAsIDZ9LCAvKiBYR0lfTFZEUzE0MDB4MTA1MERlc18yICovCisJe1BhbmVsMTYwMHgxMjAwLCAweDAwMTgsIDB4MDAwMCwgN30sIC8qIFhHSV9MVkRTMTYwMHgxMjAwRGVzXzEgKi8KKwl7UGFuZWxSZWY2MEh6LCAweDAwMDgsIDB4MDAwOCwgOH0sICAvKiBYR0lfTFZEU05vU2NhbGluZ0Rlc0RhdGEgKi8KKwl7UGFuZWwxMDI0eDc2OHg3NSwgMHgwMDE4LCAweDAwMDAsIDl9LCAvKiBYR0lfTFZEUzEwMjR4NzY4RGVzXzF4NzUgKi8KKwl7UGFuZWwxMDI0eDc2OHg3NSwgMHgwNjE4LCAweDA0MTAsIDEwfSwgLyogWEdJX0xWRFMxMDI0eDc2OERlc18zeDc1ICovCisJe1BhbmVsMTAyNHg3Njh4NzUsIDB4MDAxOCwgMHgwMDEwLCAxMX0sIC8qIFhHSV9MVkRTMTAyNHg3NjhEZXNfMng3NSAqLworCXtQYW5lbDEyODB4MTAyNHg3NSwgMHgwMDE4LCAweDAwMDAsIDEyfSwgLyogWEdJX0xWRFMxMjgweDEwMjREZXNfMXg3NSAqLworCXtQYW5lbDEyODB4MTAyNHg3NSwgMHgwMDE4LCAweDAwMTAsIDEzfSwgLyogWEdJX0xWRFMxMjgweDEwMjREZXNfMng3NSAqLworCXtQYW5lbFJlZjc1SHosIDB4MDAwOCwgMHgwMDA4LCAxNH0sIC8qIFhHSV9MVkRTTm9TY2FsaW5nRGVzRGF0YXg3NSAqLworCXsweEZGLCAweDAwMDAsIDB4MDAwMCwgMH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFUYWJsU3RydWN0IFhHSV9FUExDSExDRFJlZ1B0cltdID0KLXsKLSAge1BhbmVsMTAyNHg3NjgsMHgwMDAwLDB4MDAwMCwwfSwgLyogWEdJX0NINzAxN0xWMTAyNHg3NjggKi8KLSAge1BhbmVsMTQwMHgxMDUwLDB4MDAwMCwweDAwMDAsMX0sIC8qIFhHSV9DSDcwMTdMVjE0MDB4MTA1MCAqLwotICB7MHhGRiwweDAwMDAsMHgwMDAwLDB9CitzdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0REYXRhVGFibFN0cnVjdCBYR0lfRVBMQ0hMQ0RSZWdQdHJbXSA9IHsKKwl7UGFuZWwxMDI0eDc2OCwgMHgwMDAwLCAweDAwMDAsIDB9LCAvKiBYR0lfQ0g3MDE3TFYxMDI0eDc2OCAqLworCXtQYW5lbDE0MDB4MTA1MCwgMHgwMDAwLCAweDAwMDAsIDF9LCAvKiBYR0lfQ0g3MDE3TFYxNDAweDEwNTAgKi8KKwl7MHhGRiwgMHgwMDAwLCAweDAwMDAsIDB9CiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSTMzMF9UVkRhdGFUYWJsU3RydWN0IFhHSV9UVkRhdGFUYWJsZVtdID0KLXsKLSB7MHgwOUUxLDB4MDAwMSwwfSwJLyogWEdJX0V4dFBBTERhdGEgKi8KLSB7MHgwOUUxLDB4MDAwMCwxfSwJLyogWEdJX0V4dE5UU0NEYXRhICovCi0gezB4MDlFMSwweDA4MDEsMn0sCS8qIFhHSV9TdFBBTERhdGEgKi8KLSB7MHgwOUUxLDB4MDgwMCwzfSwJLyogWEdJX1N0TlRTQ0RhdGEgKi8KLSB7MHg0OUUwLDB4MDEwMCw0fSwJLyogWEdJX0V4dEhpVFZEYXRhICovCi0gezB4NDlFMCwweDQxMDAsNX0sCS8qIFhHSV9TdDJIaVRWRGF0YSAqLwotIHsweDQ5RTAsMHg0OTAwLDEzfSwJLyogWEdJX1N0MUhpVFZEYXRhICovCi0gezB4MDlFMCwweDAwMjAsNn0sCS8qIFhHSV9FeHRZUGJQcjUyNWlEYXRhICovCi0gezB4MDlFMCwweDAwNDAsN30sCS8qIFhHSV9FeHRZUGJQcjUyNXBEYXRhICovCi0gezB4MDlFMCwweDAwODAsOH0sCS8qIFhHSV9FeHRZUGJQcjc1MHBEYXRhICovCi0gezB4MDlFMCwweDA4MjAsOX0sCS8qIFhHSV9TdFlQYlByNTI1aURhdGEgKi8KLSB7MHgwOUUwLDB4MDg0MCwxMH0sCS8qIFhHSV9TdFlQYlByNTI1cERhdGEgKi8KLSB7MHgwOUUwLDB4MDg4MCwxMX0sIAkvKiBYR0lfU3RZUGJQcjc1MHBEYXRhICovCi0gezB4ZmZmZiwweDAwMDAsMTJ9ICAJLyogRU5EICovCitzdGF0aWMgc3RydWN0IFhHSTMzMF9UVkRhdGFUYWJsU3RydWN0IFhHSV9UVkRhdGFUYWJsZVtdID0geworCXsweDA5RTEsIDB4MDAwMSwgMH0sIC8qIFhHSV9FeHRQQUxEYXRhICovCisJezB4MDlFMSwgMHgwMDAwLCAxfSwgLyogWEdJX0V4dE5UU0NEYXRhICovCisJezB4MDlFMSwgMHgwODAxLCAyfSwgLyogWEdJX1N0UEFMRGF0YSAqLworCXsweDA5RTEsIDB4MDgwMCwgM30sIC8qIFhHSV9TdE5UU0NEYXRhICovCisJezB4NDlFMCwgMHgwMTAwLCA0fSwgLyogWEdJX0V4dEhpVFZEYXRhICovCisJezB4NDlFMCwgMHg0MTAwLCA1fSwgLyogWEdJX1N0MkhpVFZEYXRhICovCisJezB4NDlFMCwgMHg0OTAwLCAxM30sIC8qIFhHSV9TdDFIaVRWRGF0YSAqLworCXsweDA5RTAsIDB4MDAyMCwgNn0sIC8qIFhHSV9FeHRZUGJQcjUyNWlEYXRhICovCisJezB4MDlFMCwgMHgwMDQwLCA3fSwgLyogWEdJX0V4dFlQYlByNTI1cERhdGEgKi8KKwl7MHgwOUUwLCAweDAwODAsIDh9LCAvKiBYR0lfRXh0WVBiUHI3NTBwRGF0YSAqLworCXsweDA5RTAsIDB4MDgyMCwgOX0sIC8qIFhHSV9TdFlQYlByNTI1aURhdGEgKi8KKwl7MHgwOUUwLCAweDA4NDAsIDEwfSwgLyogWEdJX1N0WVBiUHI1MjVwRGF0YSAqLworCXsweDA5RTAsIDB4MDg4MCwgMTF9LCAvKiBYR0lfU3RZUGJQcjc1MHBEYXRhICovCisJezB4ZmZmZiwgMHgwMDAwLCAxMn0gIC8qIEVORCAqLwogfTsKIAogI2lmIDAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBUVkxlbkxpc3RbXSA9Ci17Ci0gICBMVkRTQ1JUMUxlbl9ILAotICAgTFZEU0NSVDFMZW5fViwKLSAgIExWRFNEYXRhTGVuLAotICAgMCwKLSAgIFRWRGF0YUxlbiwKLSAgIDAsCi0gICAwLAotICAgQ0hUVlJlZ0xlbgotfSA7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgVFZMZW5MaXN0W10gPSB7CisJTFZEU0NSVDFMZW5fSCwKKwlMVkRTQ1JUMUxlbl9WLAorCUxWRFNEYXRhTGVuLAorCTAsCisJVFZEYXRhTGVuLAorCTAsCisJMCwKKwlDSFRWUmVnTGVuCit9OwogI2VuZGlmCiAKIC8qIENocm9udGVsIDcwMTcgVFYgQ1JUMSBUaW1pbmcgTGlzdCAqLwotc3RhdGljIHN0cnVjdCBYR0kzMzBfVFZEYXRhVGFibFN0cnVjdCBYR0lfRVBMQ0hUVkNSVDFQdHJbXSA9Ci17Ci0gIHsweDAwMTEsMHgwMDAwLDB9LCAvKiBYR0lfQ0hUVkNSVDFVTlRTQyAqLwotICB7MHgwMDExLDB4MDAxMCwxfSwgLyogWEdJX0NIVFZDUlQxT05UU0MgKi8KLSAgezB4MDAxMSwweDAwMDEsMn0sIC8qIFhHSV9DSFRWQ1JUMVVQQUwgKi8KLSAgezB4MDAxMSwweDAwMTEsM30sIC8qIFhHSV9DSFRWQ1JUMU9QQUwgKi8KLSAgezB4RkZGRiwweDAwMDAsNH0KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX1RWRGF0YVRhYmxTdHJ1Y3QgWEdJX0VQTENIVFZDUlQxUHRyW10gPSB7CisJezB4MDAxMSwgMHgwMDAwLCAwfSwgLyogWEdJX0NIVFZDUlQxVU5UU0MgKi8KKwl7MHgwMDExLCAweDAwMTAsIDF9LCAvKiBYR0lfQ0hUVkNSVDFPTlRTQyAqLworCXsweDAwMTEsIDB4MDAwMSwgMn0sIC8qIFhHSV9DSFRWQ1JUMVVQQUwgKi8KKwl7MHgwMDExLCAweDAwMTEsIDN9LCAvKiBYR0lfQ0hUVkNSVDFPUEFMICovCisJezB4RkZGRiwgMHgwMDAwLCA0fQogfTsKIAogLyogOztDaHJvbnRlbCA3MDE3IFRWIFRpbWluZyBMaXN0ICovCi1zdGF0aWMgc3RydWN0IFhHSTMzMF9UVkRhdGFUYWJsU3RydWN0IFhHSV9FUExDSFRWRGF0YVB0cltdID0KLXsKLSAgezB4MDAxMSwweDAwMDAsMH0sIC8qIFhHSV9DSFRWVU5UU0NEYXRhICovCi0gIHsweDAwMTEsMHgwMDEwLDF9LCAvKiBYR0lfQ0hUVk9OVFNDRGF0YSAqLwotICB7MHgwMDExLDB4MDAwMSwyfSwgLyogWEdJX0NIVFZVUEFMRGF0YSAqLwotICB7MHgwMDExLDB4MDAxMSwzfSwgLyogWEdJX0NIVFZPUEFMRGF0YSAqLwotICB7MHhGRkZGLDB4MDAwMCw0fQorc3RhdGljIHN0cnVjdCBYR0kzMzBfVFZEYXRhVGFibFN0cnVjdCBYR0lfRVBMQ0hUVkRhdGFQdHJbXSA9IHsKKwl7MHgwMDExLCAweDAwMDAsIDB9LCAvKiBYR0lfQ0hUVlVOVFNDRGF0YSAqLworCXsweDAwMTEsIDB4MDAxMCwgMX0sIC8qIFhHSV9DSFRWT05UU0NEYXRhICovCisJezB4MDAxMSwgMHgwMDAxLCAyfSwgLyogWEdJX0NIVFZVUEFMRGF0YSAqLworCXsweDAwMTEsIDB4MDAxMSwgM30sIC8qIFhHSV9DSFRWT1BBTERhdGEgKi8KKwl7MHhGRkZGLCAweDAwMDAsIDR9CiB9OwogCiAvKiA7O0Nocm9udGVsIDcwMTcgVFYgUmVnLiBMaXN0ICovCi1zdGF0aWMgc3RydWN0IFhHSTMzMF9UVkRhdGFUYWJsU3RydWN0IFhHSV9FUExDSFRWUmVnUHRyW10gPQotewotICB7MHgwMDExLDB4MDAwMCwwfSwgLyogWEdJX0NIVFZSZWdVTlRTQyAqLwotICB7MHgwMDExLDB4MDAxMCwxfSwgLyogWEdJX0NIVFZSZWdPTlRTQyAqLwotICB7MHgwMDExLDB4MDAwMSwyfSwgLyogWEdJX0NIVFZSZWdVUEFMICovCi0gIHsweDAwMTEsMHgwMDExLDN9LCAvKiBYR0lfQ0hUVlJlZ09QQUwgKi8KLSAgezB4RkZGRiwweDAwMDAsNH0KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX1RWRGF0YVRhYmxTdHJ1Y3QgWEdJX0VQTENIVFZSZWdQdHJbXSA9IHsKKwl7MHgwMDExLCAweDAwMDAsIDB9LCAvKiBYR0lfQ0hUVlJlZ1VOVFNDICovCisJezB4MDAxMSwgMHgwMDEwLCAxfSwgLyogWEdJX0NIVFZSZWdPTlRTQyAqLworCXsweDAwMTEsIDB4MDAwMSwgMn0sIC8qIFhHSV9DSFRWUmVnVVBBTCAqLworCXsweDAwMTEsIDB4MDAxMSwgM30sIC8qIFhHSV9DSFRWUmVnT1BBTCAqLworCXsweEZGRkYsIDB4MDAwMCwgNH0KIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBMQ0RMZW5MaXN0W10gPQotewotICAgTFZEU0NSVDFMZW5fSCwKLSAgIExWRFNDUlQxTGVuX1YsCi0gICBMVkRTRGF0YUxlbiwKLSAgIExDRERlc0RhdGFMZW4sCi0gICBMQ0REYXRhTGVuLAotICAgTENERGVzRGF0YUxlbiwKLSAgIDAsCi0gICBMQ0REZXNEYXRhTGVuLAotICAgTENERGVzRGF0YUxlbiwKLSAgIDAKLX0gOworc3RhdGljIHVuc2lnbmVkIHNob3J0IExDRExlbkxpc3RbXSA9IHsKKwlMVkRTQ1JUMUxlbl9ILAorCUxWRFNDUlQxTGVuX1YsCisJTFZEU0RhdGFMZW4sCisJTENERGVzRGF0YUxlbiwKKwlMQ0REYXRhTGVuLAorCUxDRERlc0RhdGFMZW4sCisJMCwKKwlMQ0REZXNEYXRhTGVuLAorCUxDRERlc0RhdGFMZW4sCisJMAorfTsKIAogI2lmIDAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRENhcFN0cnVjdCAgWEdJNjYwX0xDRERMQ2FwTGlzdFtdID0gIC8qIDY2MCwgRHVhbCBsaW5rICovCi17CisvKiA2NjAsIER1YWwgbGluayAqLworc3RhdGljIHN0cnVjdCBYR0kzMzBfTENEQ2FwU3RydWN0ICBYR0k2NjBfTENERExDYXBMaXN0W10gPSB7CiAvKiBMQ0RDYXAxMDI0eDc2OCAqLwotCQl7UGFuZWwxMDI0eDc2OCwgRGVmYXVsdExDRENhcCwgMCwgMHgwMTQsIDB4ODgsIDB4MDYsIFZDTEs2NSwKLQkJIDB4NkMsIDB4QzMsIDB4MzUsIDB4NjIsIDB4MDIsIDB4MTQsIDB4MEEsIDB4MDIsIDB4MDAsCi0JCSAweDMwLCAweDEwLCAweDVBLCAweDEwLCAweDEwLCAweDBBLCAweEMwLCAweDI4LCAweDEwfSwKKwl7UGFuZWwxMDI0eDc2OCwgRGVmYXVsdExDRENhcCwgMCwgMHgwMTQsIDB4ODgsIDB4MDYsIFZDTEs2NSwKKwkgMHg2QywgMHhDMywgMHgzNSwgMHg2MiwgMHgwMiwgMHgxNCwgMHgwQSwgMHgwMiwgMHgwMCwKKwkgMHgzMCwgMHgxMCwgMHg1QSwgMHgxMCwgMHgxMCwgMHgwQSwgMHhDMCwgMHgyOCwgMHgxMH0sCiAvKiBMQ0RDYXAxMjgweDEwMjQgKi8KLSAgICAgICAgICAgICAgICB7UGFuZWwxMjgweDEwMjQsIExDRER1YWxMaW5rK0RlZmF1bHRMQ0RDYXAsIFN0TENEQlRvQSwgMHgwNTMsIDB4NzAsIDB4MDMsIFZDTEsxMDhfMiwKLQkJIDB4NzAsIDB4NDQsIDB4RjgsIDB4MkYsIDB4MDIsIDB4MTQsIDB4MEEsIDB4MDIsIDB4MDAsCi0JCSAweDMwLCAweDEwLCAweDVBLCAweDEwLCAweDEwLCAweDBBLCAweEMwLCAweDMwLCAweDEwfSwKKwl7UGFuZWwxMjgweDEwMjQsIExDRER1YWxMaW5rK0RlZmF1bHRMQ0RDYXAsIFN0TENEQlRvQSwKKwkweDA1MywgMHg3MCwgMHgwMywgVkNMSzEwOF8yLAorCSAweDcwLCAweDQ0LCAweEY4LCAweDJGLCAweDAyLCAweDE0LCAweDBBLCAweDAyLCAweDAwLAorCSAweDMwLCAweDEwLCAweDVBLCAweDEwLCAweDEwLCAweDBBLCAweEMwLCAweDMwLCAweDEwfSwKIC8qIExDRENhcDE0MDB4MTA1MCAqLwotICAgICAgICAgICAgICAgIHtQYW5lbDE0MDB4MTA1MCwgTENERHVhbExpbmsrRGVmYXVsdExDRENhcCwgU3RMQ0RCVG9BLCAweDA1MywgMHg3MCwgMHgwMywgVkNMSzEwOF8yLAotCQkgMHg3MCwgMHg0NCwgMHhGOCwgMHgyRiwgMHgwMiwgMHgxNCwgMHgwQSwgMHgwMiwgMHgwMCwKLQkJIDB4MzAsIDB4MTAsIDB4NUEsIDB4MTAsIDB4MTAsIDB4MEEsIDB4QzAsIDB4MzAsIDB4MTB9LAorCXtQYW5lbDE0MDB4MTA1MCwgTENERHVhbExpbmsrRGVmYXVsdExDRENhcCwgU3RMQ0RCVG9BLAorCTB4MDUzLCAweDcwLCAweDAzLCBWQ0xLMTA4XzIsCisJIDB4NzAsIDB4NDQsIDB4RjgsIDB4MkYsIDB4MDIsIDB4MTQsIDB4MEEsIDB4MDIsIDB4MDAsCisJIDB4MzAsIDB4MTAsIDB4NUEsIDB4MTAsIDB4MTAsIDB4MEEsIDB4QzAsIDB4MzAsIDB4MTB9LAogLyogTENEQ2FwMTYwMHgxMjAwICovCi0gICAgICAgICAgICAgICAge1BhbmVsMTYwMHgxMjAwLCBMQ0REdWFsTGluaytEZWZhdWx0TENEQ2FwLCBMQ0RUb0Z1bGwsIDB4MDUzLCAweEMwLCAweDAzLCBWQ0xLMTYyLAotCQkgMHg0MywgMHgyMiwgMHg3MCwgMHgyNCwgMHgwMiwgMHgxNCwgMHgwQSwgMHgwMiwgMHgwMCwKLQkJIDB4MzAsIDB4MTAsIDB4NUEsIDB4MTAsIDB4MTAsIDB4MEEsIDB4QzAsIDB4MzAsIDB4MTB9LAorCXtQYW5lbDE2MDB4MTIwMCwgTENERHVhbExpbmsrRGVmYXVsdExDRENhcCwgTENEVG9GdWxsLAorCTB4MDUzLCAweEMwLCAweDAzLCBWQ0xLMTYyLAorCSAweDQzLCAweDIyLCAweDcwLCAweDI0LCAweDAyLCAweDE0LCAweDBBLCAweDAyLCAweDAwLAorCSAweDMwLCAweDEwLCAweDVBLCAweDEwLCAweDEwLCAweDBBLCAweEMwLCAweDMwLCAweDEwfSwKIC8qIExDRENhcDEwMjR4NzY4eDc1ICovCi0JCXtQYW5lbDEwMjR4NzY4eDc1LCBEZWZhdWx0TENEQ2FwLCAwLCAweDAxNCwgMHg2MCwgMCwgVkNMSzc4Xzc1LAotCQkgMHgyQiwgMHg2MSwgMHgyQiwgMHg2MSwgMHgwMiwgMHgxNCwgMHgwQSwgMHgwMiwgMHgwMCwKLQkJIDB4MzAsIDB4MTAsIDB4NUEsIDB4MTAsIDB4MTAsIDB4MEEsIDB4QzAsIDB4MjgsIDB4MTB9LAorCXtQYW5lbDEwMjR4NzY4eDc1LCBEZWZhdWx0TENEQ2FwLCAwLCAweDAxNCwgMHg2MCwgMCwgVkNMSzc4Xzc1LAorCSAweDJCLCAweDYxLCAweDJCLCAweDYxLCAweDAyLCAweDE0LCAweDBBLCAweDAyLCAweDAwLAorCSAweDMwLCAweDEwLCAweDVBLCAweDEwLCAweDEwLCAweDBBLCAweEMwLCAweDI4LCAweDEwfSwKIC8qIExDRENhcDEyODB4MTAyNHg3NSAqLwotICAgICAgICAgICAgICAgIHtQYW5lbDEyODB4MTAyNHg3NSwgTENERHVhbExpbmsrRGVmYXVsdExDRENhcCwgU3RMQ0RCVG9BLCAweDA1MywgMHg5MCwgMHgwMywgVkNMSzEzNV81LAotCQkgMHg1NCwgMHg0MiwgMHg0QSwgMHg2MSwgMHgwMiwgMHgxNCwgMHgwQSwgMHgwMiwgMHgwMCwKLQkJIDB4MzAsIDB4MTAsIDB4NUEsIDB4MTAsIDB4MTAsIDB4MEEsIDB4QzAsIDB4MzAsIDB4MTB9LAorCXtQYW5lbDEyODB4MTAyNHg3NSwgTENERHVhbExpbmsrRGVmYXVsdExDRENhcCwgU3RMQ0RCVG9BLAorCTB4MDUzLCAweDkwLCAweDAzLCBWQ0xLMTM1XzUsCisJIDB4NTQsIDB4NDIsIDB4NEEsIDB4NjEsIDB4MDIsIDB4MTQsIDB4MEEsIDB4MDIsIDB4MDAsCisJIDB4MzAsIDB4MTAsIDB4NUEsIDB4MTAsIDB4MTAsIDB4MEEsIDB4QzAsIDB4MzAsIDB4MTB9LAogLyogTENEQ2FwRGVmYXVsdCAqLwotICAgICAgICAgICAgICAgIHsweEZGLCBEZWZhdWx0TENEQ2FwLCAwLCAweDA1MywgMHg4OCwgMHgwNiwgVkNMSzY1LAotCQkweDZDLCAweEMzLCAweDM1LCAweDYyLCAweDAyLCAweDE0LCAweDBBLCAweDAyLCAweDAwLAotCQkweDMwLCAweDEwLCAweDVBLCAweDEwLCAweDEwLCAweDBBLCAweEMwLCAweDI4LCAweDEwfQorCXsweEZGLCBEZWZhdWx0TENEQ2FwLCAwLCAweDA1MywgMHg4OCwgMHgwNiwgVkNMSzY1LAorCTB4NkMsIDB4QzMsIDB4MzUsIDB4NjIsIDB4MDIsIDB4MTQsIDB4MEEsIDB4MDIsIDB4MDAsCisJMHgzMCwgMHgxMCwgMHg1QSwgMHgxMCwgMHgxMCwgMHgwQSwgMHhDMCwgMHgyOCwgMHgxMH0KIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBYR0kzMzBfTENEQ2FwU3RydWN0ICBYR0lfTENERExDYXBMaXN0W10gPSAgLyogRHVhbCBsaW5rIG9ubHkgKi8KLXsKKy8qIER1YWwgbGluayBvbmx5ICovCitzdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0RDYXBTdHJ1Y3QgIFhHSV9MQ0RETENhcExpc3RbXSA9IHsKIC8qIExDRENhcDEwMjR4NzY4ICovCi0JCXtQYW5lbDEwMjR4NzY4LCBEZWZhdWx0TENEQ2FwLCAwLCAweDAxMiwgMHg4OCwgMHgwNiwgVkNMSzY1LAotCQkweDZDLCAweEMzLCAweDM1LCAweDYyLCAweDAyLCAweDE0LCAweDBBLCAweDAyLCAweDAwLAotCQkweDMwLCAweDEwLCAweDVBLCAweDEwLCAweDEwLCAweDBBLCAweEMwLCAweDI4LCAweDEwfSwKKwl7UGFuZWwxMDI0eDc2OCwgRGVmYXVsdExDRENhcCwgMCwgMHgwMTIsIDB4ODgsIDB4MDYsIFZDTEs2NSwKKwkweDZDLCAweEMzLCAweDM1LCAweDYyLCAweDAyLCAweDE0LCAweDBBLCAweDAyLCAweDAwLAorCTB4MzAsIDB4MTAsIDB4NUEsIDB4MTAsIDB4MTAsIDB4MEEsIDB4QzAsIDB4MjgsIDB4MTB9LAogLyogTENEQ2FwMTI4MHgxMDI0ICovCi0JCXtQYW5lbDEyODB4MTAyNCwgTENERHVhbExpbmsrRGVmYXVsdExDRENhcCwgU3RMQ0RCVG9BLCAweDAxMiwgMHg3MCwgMHgwMywgVkNMSzEwOF8yLAotCQkweDcwLCAweDQ0LCAweEY4LCAweDJGLCAweDAyLCAweDE0LCAweDBBLCAweDAyLCAweDAwLAotCQkweDMwLCAweDEwLCAweDVBLCAweDEwLCAweDEwLCAweDBBLCAweEMwLCAweDMwLCAweDEwfSwKKwl7UGFuZWwxMjgweDEwMjQsIExDRER1YWxMaW5rK0RlZmF1bHRMQ0RDYXAsIFN0TENEQlRvQSwKKwkweDAxMiwgMHg3MCwgMHgwMywgVkNMSzEwOF8yLAorCTB4NzAsIDB4NDQsIDB4RjgsIDB4MkYsIDB4MDIsIDB4MTQsIDB4MEEsIDB4MDIsIDB4MDAsCisJMHgzMCwgMHgxMCwgMHg1QSwgMHgxMCwgMHgxMCwgMHgwQSwgMHhDMCwgMHgzMCwgMHgxMH0sCiAvKiBMQ0RDYXAxNDAweDEwNTAgKi8KLQkJe1BhbmVsMTQwMHgxMDUwLCBMQ0REdWFsTGluaytEZWZhdWx0TENEQ2FwLCBTdExDREJUb0EsIDB4MDEyLCAweDcwLCAweDAzLCBWQ0xLMTA4XzIsCi0JCSAweDcwLCAweDQ0LCAweEY4LCAweDJGLCAweDAyLCAweDE0LCAweDBBLCAweDAyLCAweDAwLAotCQkgMHgzMCwgMHgxMCwgMHg1QSwgMHgxMCwgMHgxMCwgMHgwQSwgMHhDMCwgMHgzMCwgMHgxMH0sCisJe1BhbmVsMTQwMHgxMDUwLCBMQ0REdWFsTGluaytEZWZhdWx0TENEQ2FwLCBTdExDREJUb0EsCisJMHgwMTIsIDB4NzAsIDB4MDMsIFZDTEsxMDhfMiwKKwkgMHg3MCwgMHg0NCwgMHhGOCwgMHgyRiwgMHgwMiwgMHgxNCwgMHgwQSwgMHgwMiwgMHgwMCwKKwkgMHgzMCwgMHgxMCwgMHg1QSwgMHgxMCwgMHgxMCwgMHgwQSwgMHhDMCwgMHgzMCwgMHgxMH0sCiAvKiBMQ0RDYXAxNjAweDEyMDAgKi8KLQkJe1BhbmVsMTYwMHgxMjAwLCBMQ0REdWFsTGluaytEZWZhdWx0TENEQ2FwLCBMQ0RUb0Z1bGwsIDB4MDEyLCAweEMwLCAweDAzLCBWQ0xLMTYyLAotCQkgMHg0MywgMHgyMiwgMHg3MCwgMHgyNCwgMHgwMiwgMHgxNCwgMHgwQSwgMHgwMiwgMHgwMCwKLQkJIDB4MzAsIDB4MTAsIDB4NUEsIDB4MTAsIDB4MTAsIDB4MEEsIDB4QzAsIDB4MzAsIDB4MTB9LAorCXtQYW5lbDE2MDB4MTIwMCwgTENERHVhbExpbmsrRGVmYXVsdExDRENhcCwgTENEVG9GdWxsLAorCTB4MDEyLCAweEMwLCAweDAzLCBWQ0xLMTYyLAorCSAweDQzLCAweDIyLCAweDcwLCAweDI0LCAweDAyLCAweDE0LCAweDBBLCAweDAyLCAweDAwLAorCSAweDMwLCAweDEwLCAweDVBLCAweDEwLCAweDEwLCAweDBBLCAweEMwLCAweDMwLCAweDEwfSwKIC8qIExDRENhcDEwMjR4NzY4eDc1ICovCi0JCXtQYW5lbDEwMjR4NzY4eDc1LCBEZWZhdWx0TENEQ2FwLCAwLCAweDAxMiwgMHg2MCwgMCwgVkNMSzc4Xzc1LAotCQkgMHgyQiwgMHg2MSwgMHgyQiwgMHg2MSwgMHgwMiwgMHgxNCwgMHgwQSwgMHgwMiwgMHgwMCwKLQkJIDB4MzAsIDB4MTAsIDB4NUEsIDB4MTAsIDB4MTAsIDB4MEEsIDB4QzAsIDB4MjgsIDB4MTB9LAorCXtQYW5lbDEwMjR4NzY4eDc1LCBEZWZhdWx0TENEQ2FwLCAwLCAweDAxMiwgMHg2MCwgMCwgVkNMSzc4Xzc1LAorCSAweDJCLCAweDYxLCAweDJCLCAweDYxLCAweDAyLCAweDE0LCAweDBBLCAweDAyLCAweDAwLAorCSAweDMwLCAweDEwLCAweDVBLCAweDEwLCAweDEwLCAweDBBLCAweEMwLCAweDI4LCAweDEwfSwKIC8qIExDRENhcDEyODB4MTAyNHg3NSAqLwotCQl7UGFuZWwxMjgweDEwMjR4NzUsIExDRER1YWxMaW5rK0RlZmF1bHRMQ0RDYXAsIFN0TENEQlRvQSwgMHgwMTIsIDB4OTAsIDB4MDMsIFZDTEsxMzVfNSwKLQkJIDB4NTQsIDB4NDIsIDB4NEEsIDB4NjEsIDB4MDIsIDB4MTQsIDB4MEEsIDB4MDIsIDB4MDAsCi0JCSAweDMwLCAweDEwLCAweDVBLCAweDEwLCAweDEwLCAweDBBLCAweEMwLCAweDMwLCAweDEwfSwKKwl7UGFuZWwxMjgweDEwMjR4NzUsIExDRER1YWxMaW5rK0RlZmF1bHRMQ0RDYXAsIFN0TENEQlRvQSwKKwkweDAxMiwgMHg5MCwgMHgwMywgVkNMSzEzNV81LAorCSAweDU0LCAweDQyLCAweDRBLCAweDYxLCAweDAyLCAweDE0LCAweDBBLCAweDAyLCAweDAwLAorCSAweDMwLCAweDEwLCAweDVBLCAweDEwLCAweDEwLCAweDBBLCAweEMwLCAweDMwLCAweDEwfSwKIC8qIExDRENhcERlZmF1bHQgKi8KLQkJezB4RkYsIERlZmF1bHRMQ0RDYXAsIDAsIDB4MDEyLCAweDg4LCAweDA2LCBWQ0xLNjUsCi0JCTB4NkMsIDB4QzMsIDB4MzUsIDB4NjIsIDB4MDIsIDB4MTQsIDB4MEEsIDB4MDIsIDB4MDAsCi0JCTB4MzAsIDB4MTAsIDB4NUEsIDB4MTAsIDB4MTAsIDB4MEEsIDB4QzAsIDB4MjgsIDB4MTB9CisJezB4RkYsIERlZmF1bHRMQ0RDYXAsIDAsIDB4MDEyLCAweDg4LCAweDA2LCBWQ0xLNjUsCisJMHg2QywgMHhDMywgMHgzNSwgMHg2MiwgMHgwMiwgMHgxNCwgMHgwQSwgMHgwMiwgMHgwMCwKKwkweDMwLCAweDEwLCAweDVBLCAweDEwLCAweDEwLCAweDBBLCAweEMwLCAweDI4LCAweDEwfQogfTsKIAogI2lmIDAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzMwX0xDRENhcFN0cnVjdCAgWEdJNjYwX0xDRENhcExpc3RbXSA9Ci17CitzdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0RDYXBTdHJ1Y3QgIFhHSTY2MF9MQ0RDYXBMaXN0W10gPSB7CiAvKiBMQ0RDYXAxMDI0eDc2OCAqLwotICAgICAgICAgICAgICAgIHtQYW5lbDEwMjR4NzY4LCBEZWZhdWx0TENEQ2FwLCAwLCAweDAxNCwgMHg4OCwgMHgwNiwgVkNMSzY1LAotCQkweDZDLCAweEMzLCAweDM1LCAweDYyLCAweDAyLCAweDE0LCAweDBBLCAweDAyLCAweDAwLAotCQkweDMwLCAweDEwLCAweDVBLCAweDEwLCAweDEwLCAweDBBLCAweEMwLCAweDI4LCAweDEwfSwKKwl7UGFuZWwxMDI0eDc2OCwgRGVmYXVsdExDRENhcCwgMCwgMHgwMTQsIDB4ODgsIDB4MDYsIFZDTEs2NSwKKwkweDZDLCAweEMzLCAweDM1LCAweDYyLCAweDAyLCAweDE0LCAweDBBLCAweDAyLCAweDAwLAorCTB4MzAsIDB4MTAsIDB4NUEsIDB4MTAsIDB4MTAsIDB4MEEsIDB4QzAsIDB4MjgsIDB4MTB9LAogLyogTENEQ2FwMTI4MHgxMDI0ICovCi0gICAgICAgICAgICAgICAge1BhbmVsMTI4MHgxMDI0LCBEZWZhdWx0TENEQ2FwLCBTdExDREJUb0EsIDB4MDUzLCAweDcwLCAweDAzLCBWQ0xLMTA4XzIsCi0JCTB4NzAsIDB4NDQsIDB4RjgsIDB4MkYsIDB4MDIsIDB4MTQsIDB4MEEsIDB4MDIsIDB4MDAsCi0JCTB4MzAsIDB4MTAsIDB4NUEsIDB4MTAsIDB4MTAsIDB4MEEsIDB4QzAsIDB4MzAsIDB4MTB9LAorCXtQYW5lbDEyODB4MTAyNCwgRGVmYXVsdExDRENhcCwgU3RMQ0RCVG9BLCAweDA1MywgMHg3MCwgMHgwMywgVkNMSzEwOF8yLAorCTB4NzAsIDB4NDQsIDB4RjgsIDB4MkYsIDB4MDIsIDB4MTQsIDB4MEEsIDB4MDIsIDB4MDAsCisJMHgzMCwgMHgxMCwgMHg1QSwgMHgxMCwgMHgxMCwgMHgwQSwgMHhDMCwgMHgzMCwgMHgxMH0sCiAvKiBMQ0RDYXAxNDAweDEwNTAgKi8KLSAgICAgICAgICAgICAgICB7UGFuZWwxNDAweDEwNTAsIERlZmF1bHRMQ0RDYXAsIFN0TENEQlRvQSwgMHgwNTMsIDB4NzAsIDB4MDMsIFZDTEsxMDhfMiwKLQkJIDB4NzAsIDB4NDQsIDB4RjgsIDB4MkYsIDB4MDIsIDB4MTQsIDB4MEEsIDB4MDIsIDB4MDAsCi0JCSAweDMwLCAweDEwLCAweDVBLCAweDEwLCAweDEwLCAweDBBLCAweEMwLCAweDMwLCAweDEwfSwKKwl7UGFuZWwxNDAweDEwNTAsIERlZmF1bHRMQ0RDYXAsIFN0TENEQlRvQSwgMHgwNTMsIDB4NzAsIDB4MDMsIFZDTEsxMDhfMiwKKwkgMHg3MCwgMHg0NCwgMHhGOCwgMHgyRiwgMHgwMiwgMHgxNCwgMHgwQSwgMHgwMiwgMHgwMCwKKwkgMHgzMCwgMHgxMCwgMHg1QSwgMHgxMCwgMHgxMCwgMHgwQSwgMHhDMCwgMHgzMCwgMHgxMH0sCiAvKiBMQ0RDYXAxNjAweDEyMDAgKi8KLSAgICAgICAgICAgICAgICB7UGFuZWwxNjAweDEyMDAsIERlZmF1bHRMQ0RDYXAsIExDRFRvRnVsbCwgMHgwNTMsIDB4QzAsIDB4MDMsIFZDTEsxNjIsCi0JCSAweDVBLCAweDIzLCAweDVBLCAweDIzLCAweDAyLCAweDE0LCAweDBBLCAweDAyLCAweDAwLAotCQkgMHgzMCwgMHgxMCwgMHg1QSwgMHgxMCwgMHgxMCwgMHgwQSwgMHhDMCwgMHgzMCwgMHgxMH0sCisJe1BhbmVsMTYwMHgxMjAwLCBEZWZhdWx0TENEQ2FwLCBMQ0RUb0Z1bGwsIDB4MDUzLCAweEMwLCAweDAzLCBWQ0xLMTYyLAorCSAweDVBLCAweDIzLCAweDVBLCAweDIzLCAweDAyLCAweDE0LCAweDBBLCAweDAyLCAweDAwLAorCSAweDMwLCAweDEwLCAweDVBLCAweDEwLCAweDEwLCAweDBBLCAweEMwLCAweDMwLCAweDEwfSwKIC8qIExDRENhcDEwMjR4NzY4eDc1ICovCi0JCXtQYW5lbDEwMjR4NzY4eDc1LCBEZWZhdWx0TENEQ2FwLCAwLCAweDAxNCwgMHg2MCwgMCwgVkNMSzc4Xzc1LAotCQkgMHgyQiwgMHg2MSwgMHgyQiwgMHg2MSwgMHgwMiwgMHgxNCwgMHgwQSwgMHgwMiwgMHgwMCwKLQkJIDB4MzAsIDB4MTAsIDB4NUEsIDB4MTAsIDB4MTAsIDB4MEEsIDB4QzAsIDB4MjgsIDB4MTB9LAorCXtQYW5lbDEwMjR4NzY4eDc1LCBEZWZhdWx0TENEQ2FwLCAwLCAweDAxNCwgMHg2MCwgMCwgVkNMSzc4Xzc1LAorCSAweDJCLCAweDYxLCAweDJCLCAweDYxLCAweDAyLCAweDE0LCAweDBBLCAweDAyLCAweDAwLAorCSAweDMwLCAweDEwLCAweDVBLCAweDEwLCAweDEwLCAweDBBLCAweEMwLCAweDI4LCAweDEwfSwKIC8qIExDRENhcDEyODB4MTAyNHg3NSAqLwotICAgICAgICAgICAgICAgIHtQYW5lbDEyODB4MTAyNHg3NSwrRGVmYXVsdExDRENhcCwgU3RMQ0RCVG9BLCAweDA1MywgMHg5MCwgMHgwMywgVkNMSzEzNV81LAotCQkgMHg1NCwgMHg0MiwgMHg0QSwgMHg2MSwgMHgwMiwgMHgxNCwgMHgwQSwgMHgwMiwgMHgwMCwKLQkJIDB4MzAsIDB4MTAsIDB4NUEsIDB4MTAsIDB4MTAsIDB4MEEsIDB4QzAsIDB4MzAsIDB4MTB9LAorCXtQYW5lbDEyODB4MTAyNHg3NSwgKyBEZWZhdWx0TENEQ2FwLCBTdExDREJUb0EsCisJMHgwNTMsIDB4OTAsIDB4MDMsIFZDTEsxMzVfNSwKKwkgMHg1NCwgMHg0MiwgMHg0QSwgMHg2MSwgMHgwMiwgMHgxNCwgMHgwQSwgMHgwMiwgMHgwMCwKKwkgMHgzMCwgMHgxMCwgMHg1QSwgMHgxMCwgMHgxMCwgMHgwQSwgMHhDMCwgMHgzMCwgMHgxMH0sCiAvKiBMQ0RDYXBEZWZhdWx0ICovCi0gICAgICAgICAgICAgICAgezB4RkYsIERlZmF1bHRMQ0RDYXAsIDAsIDB4MDUzLCAweDg4LCAweDA2LCBWQ0xLNjUsCi0JCTB4NkMsIDB4QzMsIDB4MzUsIDB4NjIsIDB4MDIsIDB4MTQsIDB4MEEsIDB4MDIsIDB4MDAsCi0JCTB4MzAsIDB4MTAsIDB4NUEsIDB4MTAsIDB4MTAsIDB4MEEsIDB4QzAsIDB4MjgsIDB4MTB9CisJezB4RkYsIERlZmF1bHRMQ0RDYXAsIDAsIDB4MDUzLCAweDg4LCAweDA2LCBWQ0xLNjUsCisJMHg2QywgMHhDMywgMHgzNSwgMHg2MiwgMHgwMiwgMHgxNCwgMHgwQSwgMHgwMiwgMHgwMCwKKwkweDMwLCAweDEwLCAweDVBLCAweDEwLCAweDEwLCAweDBBLCAweEMwLCAweDI4LCAweDEwfQogfTsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IFhHSTMzMF9MQ0RDYXBTdHJ1Y3QgIFhHSV9MQ0RDYXBMaXN0W10gPQoteworc3RhdGljIHN0cnVjdCBYR0kzMzBfTENEQ2FwU3RydWN0ICBYR0lfTENEQ2FwTGlzdFtdID0gewogLyogTENEQ2FwMTAyNHg3NjggKi8KLQkJe1BhbmVsMTAyNHg3NjgsIERlZmF1bHRMQ0RDYXAsIDAsIDB4MDEyLCAweDg4LCAweDA2LCBWQ0xLNjUsCi0JCTB4NkMsIDB4QzMsIDB4MzUsIDB4NjIsIDB4MDIsIDB4MTQsIDB4MEEsIDB4MDIsIDB4MDAsCi0JCTB4MzAsIDB4MTAsIDB4NUEsIDB4MTAsIDB4MTAsIDB4MEEsIDB4QzAsIDB4MjgsIDB4MTB9LAorCXtQYW5lbDEwMjR4NzY4LCBEZWZhdWx0TENEQ2FwLCAwLCAweDAxMiwgMHg4OCwgMHgwNiwgVkNMSzY1LAorCTB4NkMsIDB4QzMsIDB4MzUsIDB4NjIsIDB4MDIsIDB4MTQsIDB4MEEsIDB4MDIsIDB4MDAsCisJMHgzMCwgMHgxMCwgMHg1QSwgMHgxMCwgMHgxMCwgMHgwQSwgMHhDMCwgMHgyOCwgMHgxMH0sCiAvKiBMQ0RDYXAxMjgweDEwMjQgKi8KLQkJe1BhbmVsMTI4MHgxMDI0LCBEZWZhdWx0TENEQ2FwLCBTdExDREJUb0EsIDB4MDEyLCAweDcwLCAweDAzLCBWQ0xLMTA4XzIsCi0JCTB4NzAsIDB4NDQsIDB4RjgsIDB4MkYsIDB4MDIsIDB4MTQsIDB4MEEsIDB4MDIsIDB4MDAsCi0JCTB4MzAsIDB4MTAsIDB4NUEsIDB4MTAsIDB4MTAsIDB4MEEsIDB4QzAsIDB4MzAsIDB4MTB9LAorCXtQYW5lbDEyODB4MTAyNCwgRGVmYXVsdExDRENhcCwgU3RMQ0RCVG9BLAorCTB4MDEyLCAweDcwLCAweDAzLCBWQ0xLMTA4XzIsCisJMHg3MCwgMHg0NCwgMHhGOCwgMHgyRiwgMHgwMiwgMHgxNCwgMHgwQSwgMHgwMiwgMHgwMCwKKwkweDMwLCAweDEwLCAweDVBLCAweDEwLCAweDEwLCAweDBBLCAweEMwLCAweDMwLCAweDEwfSwKIC8qIExDRENhcDE0MDB4MTA1MCAqLwotCQl7UGFuZWwxNDAweDEwNTAsIERlZmF1bHRMQ0RDYXAsIFN0TENEQlRvQSwgMHgwMTIsIDB4NzAsIDB4MDMsIFZDTEsxMDhfMiwKLQkJIDB4NzAsIDB4NDQsIDB4RjgsIDB4MkYsIDB4MDIsIDB4MTQsIDB4MEEsIDB4MDIsIDB4MDAsCi0JCSAweDMwLCAweDEwLCAweDVBLCAweDEwLCAweDEwLCAweDBBLCAweEMwLCAweDMwLCAweDEwfSwKKwl7UGFuZWwxNDAweDEwNTAsIERlZmF1bHRMQ0RDYXAsIFN0TENEQlRvQSwKKwkweDAxMiwgMHg3MCwgMHgwMywgVkNMSzEwOF8yLAorCSAweDcwLCAweDQ0LCAweEY4LCAweDJGLCAweDAyLCAweDE0LCAweDBBLCAweDAyLCAweDAwLAorCSAweDMwLCAweDEwLCAweDVBLCAweDEwLCAweDEwLCAweDBBLCAweEMwLCAweDMwLCAweDEwfSwKIC8qIExDRENhcDE2MDB4MTIwMCAqLwotCQl7UGFuZWwxNjAweDEyMDAsIERlZmF1bHRMQ0RDYXAsIExDRFRvRnVsbCwgMHgwMTIsIDB4QzAsIDB4MDMsIFZDTEsxNjIsCi0JCSAweDVBLCAweDIzLCAweDVBLCAweDIzLCAweDAyLCAweDE0LCAweDBBLCAweDAyLCAweDAwLAotCQkgMHgzMCwgMHgxMCwgMHg1QSwgMHgxMCwgMHgxMCwgMHgwQSwgMHhDMCwgMHgzMCwgMHgxMH0sCisJe1BhbmVsMTYwMHgxMjAwLCBEZWZhdWx0TENEQ2FwLCBMQ0RUb0Z1bGwsCisJMHgwMTIsIDB4QzAsIDB4MDMsIFZDTEsxNjIsCisJIDB4NUEsIDB4MjMsIDB4NUEsIDB4MjMsIDB4MDIsIDB4MTQsIDB4MEEsIDB4MDIsIDB4MDAsCisJIDB4MzAsIDB4MTAsIDB4NUEsIDB4MTAsIDB4MTAsIDB4MEEsIDB4QzAsIDB4MzAsIDB4MTB9LAogLyogTENEQ2FwMTAyNHg3Njh4NzUgKi8KLQkJe1BhbmVsMTAyNHg3Njh4NzUsIERlZmF1bHRMQ0RDYXAsIDAsIDB4MDEyLCAweDYwLCAwLCBWQ0xLNzhfNzUsCi0JCSAweDJCLCAweDYxLCAweDJCLCAweDYxLCAweDAyLCAweDE0LCAweDBBLCAweDAyLCAweDAwLAotCQkgMHgzMCwgMHgxMCwgMHg1QSwgMHgxMCwgMHgxMCwgMHgwQSwgMHhDMCwgMHgyOCwgMHgxMH0sCisJe1BhbmVsMTAyNHg3Njh4NzUsIERlZmF1bHRMQ0RDYXAsIDAsIDB4MDEyLCAweDYwLCAwLCBWQ0xLNzhfNzUsCisJIDB4MkIsIDB4NjEsIDB4MkIsIDB4NjEsIDB4MDIsIDB4MTQsIDB4MEEsIDB4MDIsIDB4MDAsCisJIDB4MzAsIDB4MTAsIDB4NUEsIDB4MTAsIDB4MTAsIDB4MEEsIDB4QzAsIDB4MjgsIDB4MTB9LAogLyogTENEQ2FwMTI4MHgxMDI0eDc1ICovCi0JCXtQYW5lbDEyODB4MTAyNHg3NSwgRGVmYXVsdExDRENhcCwgU3RMQ0RCVG9BLCAweDAxMiwgMHg5MCwgMHgwMywgVkNMSzEzNV81LAotCQkgMHg1NCwgMHg0MiwgMHg0QSwgMHg2MSwgMHgwMiwgMHgxNCwgMHgwQSwgMHgwMiwgMHgwMCwKLQkJIDB4MzAsIDB4MTAsIDB4NUEsIDB4MTAsIDB4MTAsIDB4MEEsIDB4QzAsIDB4MzAsIDB4MTB9LAorCXtQYW5lbDEyODB4MTAyNHg3NSwgRGVmYXVsdExDRENhcCwgU3RMQ0RCVG9BLAorCTB4MDEyLCAweDkwLCAweDAzLCBWQ0xLMTM1XzUsCisJIDB4NTQsIDB4NDIsIDB4NEEsIDB4NjEsIDB4MDIsIDB4MTQsIDB4MEEsIDB4MDIsIDB4MDAsCisJIDB4MzAsIDB4MTAsIDB4NUEsIDB4MTAsIDB4MTAsIDB4MEEsIDB4QzAsIDB4MzAsIDB4MTB9LAogLyogTENEQ2FwRGVmYXVsdCAqLwotCQl7MHhGRiwgRGVmYXVsdExDRENhcCwgMCwgMHgwMTIsIDB4ODgsIDB4MDYsIFZDTEs2NSwKLQkJMHg2QywgMHhDMywgMHgzNSwgMHg2MiwgMHgwMiwgMHgxNCwgMHgwQSwgMHgwMiwgMHgwMCwKLQkJMHgzMCwgMHgxMCwgMHg1QSwgMHgxMCwgMHgxMCwgMHgwQSwgMHhDMCwgMHgyOCwgMHgxMH0KKwl7MHhGRiwgRGVmYXVsdExDRENhcCwgMCwgMHgwMTIsIDB4ODgsIDB4MDYsIFZDTEs2NSwKKwkweDZDLCAweEMzLCAweDM1LCAweDYyLCAweDAyLCAweDE0LCAweDBBLCAweDAyLCAweDAwLAorCTB4MzAsIDB4MTAsIDB4NUEsIDB4MTAsIDB4MTAsIDB4MEEsIDB4QzAsIDB4MjgsIDB4MTB9CiB9OwogCi1zdHJ1Y3QgWEdJMjFfTFZEU0NhcFN0cnVjdCBYR0kyMV9MQ0RDYXBMaXN0W10gPQotewotICAgIHtEaXNhYmxlTENEMjRicHAgKyBMQ0RQb2xhcml0eSwKLSAgICAgMjE2MCwxMjUwLDE2MDAsMTIwMCwgIDY0LCAgMSwgIDE5MiwgICAzLAotICAgICAweDcwLDB4MjQsMHgyMCwweDA0LDB4MEEsMHgwMiwweEM4Ci0gICAgfSwKLSAgICB7RGlzYWJsZUxDRDI0YnBwICsgTENEUG9sYXJpdHksCi0gICAgIDE2ODgsMTA2NiwxMjgwLDEwMjQsICA0OCwgIDEsICAxMTIsICAgMywKLSAgICAgMHg3MCwweDQ0LDB4MjAsMHgwNCwweDBBLDB4MDIsMHhDOAotICAgIH0sCi0gICAge0Rpc2FibGVMQ0QyNGJwcCArIExDRFBvbGFyaXR5ICsgKExDRFBvbGFyaXR5IDw8IDgpLAotICAgICAxMzQ0LCA4MDYsMTAyNCwgNzY4LCAgMjQsICAzLCAgMTM2LCAgIDYsCi0gICAgIDB4NkMsMHg2NSwweDIwLDB4MDQsMHgwQSwweDAyLDB4QzgKLSAgICB9LAotICAgIHtEaXNhYmxlTENEMjRicHAgKyBMQ0RQb2xhcml0eSwKLSAgICAgMTA1NiwgNjI4LCA4MDAsIDYwMCwgIDQwLCAgIDEsIDEyOCwgICA0LAotICAgICAweDQyLDB4RTIsMHgyMCwweDE0LDB4MEEsMHgwMiwweDAwCi0gICAgfSwKLSAgICB7RGlzYWJsZUxDRDI0YnBwICsgTENEUG9sYXJpdHksCi0gICAgICA5MjgsIDUyNSwgODAwLCA0ODAsICA0MCwgIDEzLCAgNDgsICAgMywKLSAgICAgMHg1MiwweEM1LDB4MjAsMHgxNCwweDBBLDB4MDIsMHgwMAotICAgIH0sCi0gICAge0Rpc2FibGVMQ0QyNGJwcCArIExDRFBvbGFyaXR5ICsgKExDRFBvbGFyaXR5IDw8IDgpLAotICAgICAgODAwLCA1MjUsIDY0MCwgNDgwLCAgMTYsICAxMCwgIDk2LCAgIDIsCi0gICAgIDB4MUIsMHhFMSwweDIwLDB4MDQsMHgwQSwweDAyLDB4QzgKLSAgICB9Ci0KK3N0cnVjdCBYR0kyMV9MVkRTQ2FwU3RydWN0IFhHSTIxX0xDRENhcExpc3RbXSA9IHsKKwl7RGlzYWJsZUxDRDI0YnBwICsgTENEUG9sYXJpdHksCisJIDIxNjAsIDEyNTAsIDE2MDAsIDEyMDAsICAgNjQsICAgIDEsICAxOTIsICAgIDMsCisJIDB4NzAsIDB4MjQsIDB4MjAsIDB4MDQsIDB4MEEsIDB4MDIsIDB4QzgKKwl9LAorCXtEaXNhYmxlTENEMjRicHAgKyBMQ0RQb2xhcml0eSwKKwkgMTY4OCwgMTA2NiwgMTI4MCwgMTAyNCwgICA0OCwgICAgMSwgICAxMTIsICAgIDMsCisJIDB4NzAsIDB4NDQsIDB4MjAsIDB4MDQsIDB4MEEsIDB4MDIsIDB4QzgKKwl9LAorCXtEaXNhYmxlTENEMjRicHAgKyBMQ0RQb2xhcml0eSArIChMQ0RQb2xhcml0eSA8PCA4KSwKKwkgMTM0NCwgIDgwNiwgMTAyNCwgIDc2OCwgICAyNCwgICAgMywgICAxMzYsICAgIDYsCisJIDB4NkMsIDB4NjUsIDB4MjAsIDB4MDQsIDB4MEEsIDB4MDIsIDB4QzgKKwl9LAorCXtEaXNhYmxlTENEMjRicHAgKyBMQ0RQb2xhcml0eSwKKwkgMTA1NiwgIDYyOCwgIDgwMCwgIDYwMCwgICA0MCwgICAgMSwgIDEyOCwgICAgNCwKKwkgMHg0MiwgMHhFMiwgMHgyMCwgMHgxNCwgMHgwQSwgMHgwMiwgMHgwMAorCX0sCisJe0Rpc2FibGVMQ0QyNGJwcCArIExDRFBvbGFyaXR5LAorCSAgOTI4LCAgNTI1LCAgODAwLCAgNDgwLCAgIDQwLCAgIDEzLCAgIDQ4LCAgICAzLAorCSAweDUyLCAweEM1LCAweDIwLCAweDE0LCAweDBBLCAweDAyLCAweDAwCisJfSwKKwl7RGlzYWJsZUxDRDI0YnBwICsgTENEUG9sYXJpdHkgKyAoTENEUG9sYXJpdHkgPDwgOCksCisJICA4MDAsICA1MjUsICA2NDAsICA0ODAsICAgMTYsICAgMTAsICAgOTYsICAgIDIsCisJIDB4MUIsIDB4RTEsIDB4MjAsIDB4MDQsIDB4MEEsIDB4MDIsIDB4QzgKKwl9CiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSV9FeHQyU3RydWN0IFhHSTMzMF9SZWZJbmRleFtdID0KLXsKLXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0QWxsQ1JUMiArIFN5bmNQTiwJCQlSRVMzMjB4MjAwLAkgVkNMSzI1XzE3NSwgMHgwMCwweDEwLDB4NTksIDMyMCwgMjAwfSwvKiAwMCAqLwote1N1cHBvcnQzMkJwcCArIFN1cHBvcnRBbGxDUlQyICsgU3luY1BOLAkJCVJFUzMyMHgyMDAsCSBWQ0xLMjVfMTc1LCAweDAwLDB4MTAsMHgwMCwgMzIwLCA0MDB9LC8qIDAxICovCi17U3VwcG9ydDMyQnBwICsgU3VwcG9ydEFsbENSVDIgKyBTeW5jTk4sCQkJUkVTMzIweDI0MCwJIFZDTEsyNV8xNzUsIDB4MDQsMHgyMCwweDUwLCAzMjAsIDI0MH0sLyogMDIgKi8KLXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0QWxsQ1JUMiArIFN5bmNQUCwJCQlSRVM0MDB4MzAwLAkgVkNMSzQwLCAgICAgMHgwNSwweDMyLDB4NTEsIDQwMCwgMzAwfSwvKiAwMyAqLwote1N1cHBvcnQzMkJwcCArIE5vU3VwcG9ydFRWICsgU3luY05OICsgU3VwcG9ydFRWMTAyNCwJCVJFUzUxMngzODQsCSBWQ0xLNjUsICAgICAweDA2LDB4NDMsMHg1MiwgNTEyLCAzODR9LC8qIDA0ICovCi17U3VwcG9ydDMyQnBwICsgU3VwcG9ydEFsbENSVDIgKyBTeW5jUE4sCQkJUkVTNjQweDQwMCwJIFZDTEsyNV8xNzUsIDB4MDAsMHgxNCwweDJmLCA2NDAsIDQwMH0sLyogMDUgKi8KLXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0QWxsQ1JUMiArIFN5bmNOTiwJCQlSRVM2NDB4NDgweDYwLAkgVkNMSzI1XzE3NSwgMHgwNCwweDI0LDB4MmUsIDY0MCwgNDgwfSwvKiAwNiA2NDB4NDgweDYwSHogKExDRCA2NDB4NDgweDYweikgKi8KLXtTdXBwb3J0MzJCcHAgKyBOb1N1cHBvcnRIaVZpc2lvblRWICsgU3luY05OLAkJCVJFUzY0MHg0ODB4NzIsCSBWQ0xLMzFfNSwgICAweDA0LDB4MjQsMHgyZSwgNjQwLCA0ODB9LC8qIDA3IDY0MHg0ODB4NzJIeiAoTENEIDY0MHg0ODB4NzBIeikgKi8KLXtTdXBwb3J0MzJCcHAgKyBOb1N1cHBvcnRIaVZpc2lvblRWICsgU3luY05OLAkJCVJFUzY0MHg0ODB4NzUsCSBWQ0xLMzFfNSwgICAweDQ3LDB4MjQsMHgyZSwgNjQwLCA0ODB9LC8qIDA4IDY0MHg0ODB4NzVIeiAoTENEIDY0MHg0ODB4NzVIeikgKi8KLXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0UkFNREFDMiArIFN5bmNOTiwJCQlSRVM2NDB4NDgweDg1LAkgVkNMSzM2LCAgICAgMHg4QSwweDI0LDB4MmUsIDY0MCwgNDgwfSwvKiAwOSA2NDB4NDgweDg1SHogKi8KLXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0UkFNREFDMiArIFN5bmNQTiwJCQlSRVM2NDB4NDgweDEwMCwJIFZDTEs0M18xNjMsIDB4MDAsMHgyNCwweDJlLCA2NDAsIDQ4MH0sLyogMGEgNjQweDQ4MHgxMDBIeiAqLwote1N1cHBvcnQzMkJwcCArIFN1cHBvcnRSQU1EQUMyICsgU3luY1BOLAkJCVJFUzY0MHg0ODB4MTIwLAkgVkNMSzUyXzQwNiwgMHgwMCwweDI0LDB4MmUsIDY0MCwgNDgwfSwvKiAwYiA2NDB4NDgweDEyMEh6ICovCi17U3VwcG9ydDMyQnBwICsgU3VwcG9ydFJBTURBQzIgKyBTeW5jUE4sCQkJUkVTNjQweDQ4MHgxNjAsCSBWQ0xLNzJfODUyLCAweDAwLDB4MjQsMHgyZSwgNjQwLCA0ODB9LC8qIDBjIDY0MHg0ODB4MTYwSHogKi8KLXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0UkFNREFDMiArIFN5bmNOTiwJCQlSRVM2NDB4NDgweDIwMCwJIFZDTEs4Nl82LCAgIDB4MDAsMHgyNCwweDJlLCA2NDAsIDQ4MH0sLyogMGQgNjQweDQ4MHgyMDBIeiAqLwote1N1cHBvcnQzMkJwcCArIE5vU3VwcG9ydExDRCArIFN5bmNQUCwJCQkJUkVTODAweDYwMHg1NiwJIFZDTEszNiwgICAgIDB4MDUsMHgzNiwweDZhLCA4MDAsIDYwMH0sLyogMGUgODAweDYwMHg1Nkh6ICovCi17U3VwcG9ydDMyQnBwICsgTm9TdXBwb3J0VFYgKyBTeW5jUFAsCQkJCVJFUzgwMHg2MDB4NjAsCSBWQ0xLNDAsICAgICAweDA1LDB4MzYsMHg2YSwgODAwLCA2MDB9LC8qIDBmIDgwMHg2MDB4NjBIeiAoTENEIDgwMHg2MDB4NjBIeikgKi8KLXtTdXBwb3J0MzJCcHAgKyBOb1N1cHBvcnRIaVZpc2lvblRWICsgU3luY1BQLAkJCVJFUzgwMHg2MDB4NzIsCSBWQ0xLNTAsICAgICAweDQ4LDB4MzYsMHg2YSwgODAwLCA2MDB9LC8qIDEwIDgwMHg2MDB4NzJIeiAoTENEIDgwMHg2MDB4NzBIeikgKi8KLXtTdXBwb3J0MzJCcHAgKyBOb1N1cHBvcnRIaVZpc2lvblRWICsgU3luY1BQLAkJCVJFUzgwMHg2MDB4NzUsCSBWQ0xLNDlfNSwgICAweDhCLDB4MzYsMHg2YSwgODAwLCA2MDB9LC8qIDExIDgwMHg2MDB4NzVIeiAoTENEIDgwMHg2MDB4NzVIeikgKi8KLXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0UkFNREFDMiArIFN5bmNQUCwJCQlSRVM4MDB4NjAweDg1LAkgVkNMSzU2XzI1LCAgMHgwMCwweDM2LDB4NmEsIDgwMCwgNjAwfSwvKiAxMiA4MDB4NjAweDg1SHogKi8KLXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0UkFNREFDMiArIFN5bmNQTiwJCQlSRVM4MDB4NjAweDEwMCwJIFZDTEs2OF8xNzksIDB4MDAsMHgzNiwweDZhLCA4MDAsIDYwMH0sLyogMTMgODAweDYwMHgxMDBIeiAqLwote1N1cHBvcnQzMkJwcCArIFN1cHBvcnRSQU1EQUMyICsgU3luY1BOLAkJCVJFUzgwMHg2MDB4MTIwLAkgVkNMSzgzXzk1LCAgMHgwMCwweDM2LDB4NmEsIDgwMCwgNjAwfSwvKiAxNCA4MDB4NjAweDEyMEh6ICovCi17U3VwcG9ydDMyQnBwICsgU3VwcG9ydFJBTURBQzIgKyBTeW5jUE4sCQkJUkVTODAweDYwMHgxNjAsCSBWQ0xLMTE2XzQwNiwweDAwLDB4MzYsMHg2YSwgODAwLCA2MDB9LC8qIDE1IDgwMHg2MDB4MTYwSHogKi8KLXtTdXBwb3J0MzJCcHAgKyBJbnRlcmxhY2VNb2RlICsgU3luY1BQLAkJCQlSRVMxMDI0eDc2OHg0MywJIFZDTEs0NF85LCAgIDB4MDAsMHg0NywweDM3LDEwMjQsIDc2OH0sLyogMTYgMTAyNHg3Njh4NDNIeiAqLwote1N1cHBvcnQzMkJwcCArIE5vU3VwcG9ydFRWICsgU3luY05OICsgU3VwcG9ydFRWMTAyNCwJCVJFUzEwMjR4NzY4eDYwLAkgVkNMSzY1LCAgICAgMHgwNiwweDQ3LDB4MzcsMTAyNCwgNzY4fSwvKiAxNyAxMDI0eDc2OHg2MEh6IChMQ0QgMTAyNHg3Njh4NjBIeikgKi8KLXtTdXBwb3J0MzJCcHAgKyBOb1N1cHBvcnRIaVZpc2lvblRWICsgU3luY05OLAkJCVJFUzEwMjR4NzY4eDcwLAkgVkNMSzc1LCAgICAgMHg0OSwweDQ3LDB4MzcsMTAyNCwgNzY4fSwvKiAxOCAxMDI0eDc2OHg3MEh6IChMQ0QgMTAyNHg3Njh4NzBIeikgKi8KLXtTdXBwb3J0MzJCcHAgKyBOb1N1cHBvcnRIaVZpc2lvblRWICsgU3luY1BQLAkJCVJFUzEwMjR4NzY4eDc1LAkgVkNMSzc4Xzc1LCAgMHgwMCwweDQ3LDB4MzcsMTAyNCwgNzY4fSwvKiAxOSAxMDI0eDc2OHg3NUh6IChMQ0QgMTAyNHg3Njh4NzVIeikgKi8KLXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0UkFNREFDMiArIFN5bmNQUCwJCQlSRVMxMDI0eDc2OHg4NSwJIFZDTEs5NF81LCAgIDB4OEMsMHg0NywweDM3LDEwMjQsIDc2OH0sLyogMWEgMTAyNHg3Njh4ODVIeiAqLwote1N1cHBvcnQzMkJwcCArIFN1cHBvcnRSQU1EQUMyICsgU3luY1BOLAkJCVJFUzEwMjR4NzY4eDEwMCwgVkNMSzExM18zMDksMHgwMCwweDQ3LDB4MzcsMTAyNCwgNzY4fSwvKiAxYiAxMDI0eDc2OHgxMDBIeiAqLwote1N1cHBvcnQzMkJwcCArIFN1cHBvcnRSQU1EQUMyICsgU3luY1BOLAkJCVJFUzEwMjR4NzY4eDEyMCwgVkNMSzEzOV8wNTQsMHgwMCwweDQ3LDB4MzcsMTAyNCwgNzY4fSwvKiAxYyAxMDI0eDc2OHgxMjBIeiAqLwote1N1cHBvcnQzMkJwcCArIFN1cHBvcnRMQ0QgKyBTeW5jUFAsCQkJCVJFUzEyODB4OTYweDYwLAkgVkNMSzEwOF8yLCAgMHgwOCwweDU4LDB4N2IsMTI4MCwgOTYwfSwvKiAxZCAxMjgweDk2MHg2MEh6ICovCi17U3VwcG9ydDMyQnBwICsgSW50ZXJsYWNlTW9kZSArIFN5bmNQUCwJCQkJUkVTMTI4MHgxMDI0eDQzLCBWQ0xLNzhfNzUsICAweDAwLDB4NTgsMHgzYSwxMjgwLDEwMjR9LC8qIDFlIDEyODB4MTAyNHg0M0h6ICovCi17U3VwcG9ydDMyQnBwICsgTm9TdXBwb3J0VFYgKyBTeW5jUFAsCQkJCVJFUzEyODB4MTAyNHg2MCwgVkNMSzEwOF8yLCAgMHgwNywweDU4LDB4M2EsMTI4MCwxMDI0fSwvKiAxZiAxMjgweDEwMjR4NjBIeiAoTENEIDEyODB4MTAyNHg2MEh6KSAqLwote1N1cHBvcnQzMkJwcCArIE5vU3VwcG9ydFRWICsgU3luY1BQLAkJCQlSRVMxMjgweDEwMjR4NzUsIFZDTEsxMzVfNSwgIDB4MDAsMHg1OCwweDNhLDEyODAsMTAyNH0sLyogMjAgMTI4MHgxMDI0eDc1SHogKExDRCAxMjgweDEwMjR4NzVIeikgKi8KLXtTdXBwb3J0MzJCcHAgKyBTeW5jUFAsCQkJCQkJUkVTMTI4MHgxMDI0eDg1LCBWQ0xLMTU3XzUsICAweDAwLDB4NTgsMHgzYSwxMjgwLDEwMjR9LC8qIDIxIDEyODB4MTAyNHg4NUh6ICovCi17U3VwcG9ydDMyQnBwICsgU3VwcG9ydExDRCArIFN5bmNQUCArIFN1cHBvcnRDUlQyaW4zMDFDLAlSRVMxNjAweDEyMDB4NjAsIFZDTEsxNjIsICAgIDB4MDksMHg3QSwweDNjLDE2MDAsMTIwMH0sLyogMjIgMTYwMHgxMjAweDYwSHogKi8KLXtTdXBwb3J0MzJCcHAgKyBTeW5jUFAgKyBTdXBwb3J0Q1JUMmluMzAxQywJCQlSRVMxNjAweDEyMDB4NjUsIFZDTEsxNzUsICAgIDB4MDAsMHg2OSwweDNjLDE2MDAsMTIwMH0sLyogMjMgMTYwMHgxMjAweDY1SHogKi8KLXtTdXBwb3J0MzJCcHAgKyBTeW5jUFAgKyBTdXBwb3J0Q1JUMmluMzAxQywJCQlSRVMxNjAweDEyMDB4NzAsIFZDTEsxODksICAgIDB4MDAsMHg2OSwweDNjLDE2MDAsMTIwMH0sLyogMjQgMTYwMHgxMjAweDcwSHogKi8KLXtTdXBwb3J0MzJCcHAgKyBTeW5jUFAgKyBTdXBwb3J0Q1JUMmluMzAxQywJCQlSRVMxNjAweDEyMDB4NzUsIFZDTEsyMDJfNSwgIDB4MDAsMHg2OSwweDNjLDE2MDAsMTIwMH0sLyogMjUgMTYwMHgxMjAweDc1SHogKi8KLXtTdXBwb3J0MzJCcHAgKyBTeW5jUFAsCQkJCQkJUkVTMTYwMHgxMjAweDg1LCBWQ0xLMjI5XzUsICAweDAwLDB4NjksMHgzYywxNjAwLDEyMDB9LC8qIDI2IDE2MDB4MTIwMHg4NUh6ICovCi17U3VwcG9ydDMyQnBwICsgU3luY1BQLAkJCQkJCVJFUzE2MDB4MTIwMHgxMDAsVkNMSzI2OV82NTUsMHgwMCwweDY5LDB4M2MsMTYwMCwxMjAwfSwvKiAyNyAxNjAweDEyMDB4MTAwSHogKi8KLXtTdXBwb3J0MzJCcHAgKyBTeW5jUFAsCQkJCQkJUkVTMTYwMHgxMjAweDEyMCxWQ0xLMzIzXzU4NiwweDAwLDB4NjksMHgzYywxNjAwLDEyMDB9LC8qIDI4IDE2MDB4MTIwMHgxMjBIeiAqLwote1N1cHBvcnQzMkJwcCArIFN1cHBvcnRMQ0QgKyBTeW5jTlAsCQkJCVJFUzE5MjB4MTQ0MHg2MCwgVkNMSzIzNCwgICAgMHgwMCwweDAwLDB4NjgsMTkyMCwxNDQwfSwvKiAyOSAxOTIweDE0NDB4NjBIeiAqLwote1N1cHBvcnQzMkJwcCArIFN5bmNQTiwJCQkJCQlSRVMxOTIweDE0NDB4NjUsIFZDTEsyNTRfODE3LDB4MDAsMHgwMCwweDY4LDE5MjAsMTQ0MH0sLyogMmEgMTkyMHgxNDQweDY1SHogKi8KLXtTdXBwb3J0MzJCcHAgKyBTeW5jUE4sCQkJCQkJUkVTMTkyMHgxNDQweDcwLCBWQ0xLMjc3XzAxNSwweDAwLDB4MDAsMHg2OCwxOTIwLDE0NDB9LC8qIDJiIDE5MjB4MTQ0MHg3MEh6ICovCi17U3VwcG9ydDMyQnBwICsgU3luY1BOLAkJCQkJCVJFUzE5MjB4MTQ0MHg3NSwgVkNMSzI5MV8xMzIsMHgwMCwweDAwLDB4NjgsMTkyMCwxNDQwfSwvKiAyYyAxOTIweDE0NDB4NzVIeiAqLwote1N1cHBvcnQzMkJwcCArIFN5bmNQTiwJCQkJCQlSRVMxOTIweDE0NDB4ODUsIFZDTEszMzBfNjE1LDB4MDAsMHgwMCwweDY4LDE5MjAsMTQ0MH0sLyogMmQgMTkyMHgxNDQweDg1SHogKi8KLXtTdXBwb3J0MTZCcHAgKyBTeW5jUE4sCQkJCQkJUkVTMTkyMHgxNDQweDEwMCxWQ0xLMzg4XzYzMSwweDAwLDB4MDAsMHg2OCwxOTIwLDE0NDB9LC8qIDJlIDE5MjB4MTQ0MHgxMDBIeiAqLwote1N1cHBvcnQzMkJwcCArIFN1cHBvcnRMQ0QgKyBTeW5jUE4sCQkJCVJFUzIwNDh4MTUzNng2MCwgVkNMSzI2Nl85NTIsMHgwMCwweDAwLDB4NmMsMjA0OCwxNTM2fSwvKiAyZiAyMDQ4eDE1MzZ4NjBIeiAqLwote1N1cHBvcnQzMkJwcCArIFN5bmNQTiwJCQkJCQlSRVMyMDQ4eDE1MzZ4NjUsIFZDTEsyOTFfNzY2LDB4MDAsMHgwMCwweDZjLDIwNDgsMTUzNn0sLyogMzAgMjA0OHgxNTM2eDY1SHogKi8KLXtTdXBwb3J0MzJCcHAgKyBTeW5jUE4sCQkJCQkJUkVTMjA0OHgxNTM2eDcwLCBWQ0xLMzE1XzE5NSwweDAwLDB4MDAsMHg2YywyMDQ4LDE1MzZ9LC8qIDMxIDIwNDh4MTUzNng3MEh6ICovCi17U3VwcG9ydDMyQnBwICsgU3luY1BOLAkJCQkJCVJFUzIwNDh4MTUzNng3NSwgVkNMSzM0MF80NzcsMHgwMCwweDAwLDB4NmMsMjA0OCwxNTM2fSwvKiAzMiAyMDQ4eDE1MzZ4NzVIeiAqLwote1N1cHBvcnQxNkJwcCArIFN5bmNQTiwJCQkJCQlSRVMyMDQ4eDE1MzZ4ODUsIFZDTEszNzVfODQ3LDB4MDAsMHgwMCwweDZjLDIwNDgsMTUzNn0sLyogMzMgMjA0OHgxNTM2eDg1SHogKi8KLXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0SGlWaXNpb25UViArIFN1cHBvcnRSQU1EQUMyICsgU3luY1BQICsgU3VwcG9ydFlQYlByLAlSRVM4MDB4NDgweDYwLAkgVkNMSzM5Xzc3LCAgMHgwOCwweDAwLDB4NzAsIDgwMCwgNDgwfSwvKiAzNCA4MDB4NDgweDYwSHogKi8KLXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0UkFNREFDMiArIFN5bmNQUCwJCQlSRVM4MDB4NDgweDc1LAkgVkNMSzQ5XzUsICAgMHgwOCwweDAwLDB4NzAsIDgwMCwgNDgwfSwvKiAzNSA4MDB4NDgweDc1SHogKi8KLXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0UkFNREFDMiArIFN5bmNQUCwJCQlSRVM4MDB4NDgweDg1LAkgVkNMSzU2XzI1LCAgMHgwOCwweDAwLDB4NzAsIDgwMCwgNDgwfSwvKiAzNiA4MDB4NDgweDg1SHogKi8KLXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0SGlWaXNpb25UViArIFN1cHBvcnRSQU1EQUMyICsgU3luY1BQICsgU3VwcG9ydFlQYlByLAlSRVMxMDI0eDU3Nng2MCwJIFZDTEs2NSwgICAgIDB4MDksMHgwMCwweDcxLDEwMjQsIDU3Nn0sLyogMzcgMTAyNHg1NzZ4NjBIeiAqLwote1N1cHBvcnQzMkJwcCArIFN1cHBvcnRSQU1EQUMyICsgU3luY1BQLAkJCVJFUzEwMjR4NTc2eDc1LAkgVkNMSzc4Xzc1LCAgMHgwOSwweDAwLDB4NzEsMTAyNCwgNTc2fSwvKiAzOCAxMDI0eDU3Nng3NUh6ICovCi17U3VwcG9ydDMyQnBwICsgU3VwcG9ydFJBTURBQzIgKyBTeW5jUFAsCQkJUkVTMTAyNHg1NzZ4ODUsCSBWQ0xLOTRfNSwgICAweDA5LDB4MDAsMHg3MSwxMDI0LCA1NzZ9LC8qIDM5IDEwMjR4NTc2eDg1SHogKi8KLXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0SGlWaXNpb25UViArIFN1cHBvcnRSQU1EQUMyICsgU3luY1BQICsgU3VwcG9ydFlQYlByLAlSRVMxMjgweDcyMHg2MCwJIFZDTEsxMDhfMiwgIDB4MEEsMHgwMCwweDc1LDEyODAsIDcyMH0sLyogM2EgMTI4MHg3MjB4NjBIeiAqLwote1N1cHBvcnQzMkJwcCArIFN1cHBvcnRSQU1EQUMyICsgU3luY1BQLAkJCVJFUzEyODB4NzIweDc1LAkgVkNMSzEzNV81LCAgMHgwQSwweDAwLDB4NzUsMTI4MCwgNzIwfSwvKiAzYiAxMjgweDcyMHg3NUh6ICovCi17U3VwcG9ydDMyQnBwICsgU3VwcG9ydFJBTURBQzIgKyBTeW5jUFAsCQkJUkVTMTI4MHg3MjB4ODUsCSBWQ0xLMTU3XzUsICAweDBBLDB4MDAsMHg3NSwxMjgwLCA3MjB9LC8qIDNjIDEyODB4NzIweDg1SHogKi8KLXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0VFYgKyBTeW5jTk4sCQkJCVJFUzcyMHg0ODB4NjAsCSBWQ0xLMjhfMzIyLCAweDA2LDB4MDAsMHgzMSwgNzIwLCA0ODB9LC8qIDNkIDcyMHg0ODB4NjBIeiAqLwote1N1cHBvcnQzMkJwcCArIFN1cHBvcnRUViArIFN5bmNQUCwJCQkJUkVTNzIweDU3Nng1NiwJIFZDTEszNiwgICAgIDB4MDYsMHgwMCwweDMyLCA3MjAsIDU3Nn0sLyogM2UgNzIweDU3Nng1Nkh6ICovCi17U3VwcG9ydDMyQnBwICsgSW50ZXJsYWNlTW9kZSArIE5vU3VwcG9ydExDRCArIFN5bmNQUCwJCVJFUzg1Nng0ODB4NzlJLAkgVkNMSzM1XzIsICAgMHgwMCwweDAwLDB4MDAsIDg1NiwgNDgwfSwvKiAzZiA4NTZ4NDgweDc5SSAqLwote1N1cHBvcnQzMkJwcCArIE5vU3VwcG9ydExDRCArIFN5bmNOTiwJCQkJUkVTODU2eDQ4MHg2MCwJIFZDTEszNV8yLCAgIDB4MDAsMHgwMCwweDAwLCA4NTYsIDQ4MH0sLyogNDAgODU2eDQ4MHg2MEh6ICovCi17U3VwcG9ydDMyQnBwICsgTm9TdXBwb3J0SGlWaXNpb25UViArIFN5bmNQUCwJCQlSRVMxMjgweDc2OHg2MCwJIFZDTEs3OV80MTEsIDB4MDgsMHg0OCwweDIzLDEyODAsIDc2OH0sLyogNDEgMTI4MHg3Njh4NjBIeiAqLwote1N1cHBvcnQzMkJwcCArIE5vU3VwcG9ydEhpVmlzaW9uVFYgKyBTeW5jUFAsCQkJUkVTMTQwMHgxMDUweDYwLCBWQ0xLMTIyXzYxLCAweDA4LDB4NjksMHgyNiwxNDAwLDEwNTB9LC8qIDQyIDE0MDB4MTA1MHg2MEh6ICovCi17U3VwcG9ydDMyQnBwICsgU3VwcG9ydFJBTURBQzIgKyBTeW5jUFAsCQkJUkVTMTE1Mng4NjR4NjAsCSBWQ0xLODBfMzUwLCAweDM3LDB4MDAsMHgyMCwxMTUyLCA4NjR9LC8qIDQzIDExNTJ4ODY0eDYwSHogKi8KLXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0UkFNREFDMiArIFN5bmNQUCwJCQlSRVMxMTUyeDg2NHg3NSwJIFZDTEsxMDdfMzg1LDB4MzcsMHgwMCwweDIwLDExNTIsIDg2NH0sLyogNDQgMTE1Mng4NjR4NzVIeiAqLwote1N1cHBvcnQzMkJwcCArIFN1cHBvcnRMQ0QgKyBTdXBwb3J0UkFNREFDMiArIFN5bmNQUCwJCVJFUzEyODB4OTYweDc1LAkgVkNMSzEyNV85OTksMHgzQSwweDg4LDB4N2IsMTI4MCwgOTYwfSwvKiA0NSAxMjgweDk2MHg3NUh6ICovCi17U3VwcG9ydDMyQnBwICsgU3VwcG9ydExDRCArIFN1cHBvcnRSQU1EQUMyICsgU3luY1BQLAkJUkVTMTI4MHg5NjB4ODUsCSBWQ0xLMTQ4XzUsICAweDBBLDB4ODgsMHg3YiwxMjgwLCA5NjB9LC8qIDQ2IDEyODB4OTYweDg1SHogKi8KLXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0TENEICsgU3VwcG9ydFJBTURBQzIgKyBTeW5jUFAsCQlSRVMxMjgweDk2MHgxMjAsIFZDTEsyMTdfMzI1LDB4M0EsMHg4OCwweDdiLDEyODAsIDk2MH0sLyogNDcgMTI4MHg5NjB4MTIwSHogKi8KLXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0UkFNREFDMiArIFN5bmNQTiwJCQlSRVMxMDI0eDc2OHgxNjAsIFZDTEsxMzlfMDU0LDB4MzAsMHg0NywweDM3LDEwMjQsIDc2OH0sLyogNDggMTAyNHg3Njh4MTYwSHogKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJX0V4dDJTdHJ1Y3QgWEdJMzMwX1JlZkluZGV4W10gPSB7CisJe1N1cHBvcnQzMkJwcCArIFN1cHBvcnRBbGxDUlQyICsgU3luY1BOLCBSRVMzMjB4MjAwLCBWQ0xLMjVfMTc1LAorCTB4MDAsIDB4MTAsIDB4NTksIDMyMCwgMjAwfSwvKiAwMCAqLworCXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0QWxsQ1JUMiArIFN5bmNQTiwgUkVTMzIweDIwMCwgVkNMSzI1XzE3NSwKKwkweDAwLCAweDEwLCAweDAwLCAzMjAsIDQwMH0sLyogMDEgKi8KKwl7U3VwcG9ydDMyQnBwICsgU3VwcG9ydEFsbENSVDIgKyBTeW5jTk4sIFJFUzMyMHgyNDAsIFZDTEsyNV8xNzUsCisJMHgwNCwgMHgyMCwgMHg1MCwgMzIwLCAyNDB9LC8qIDAyICovCisJe1N1cHBvcnQzMkJwcCArIFN1cHBvcnRBbGxDUlQyICsgU3luY1BQLCBSRVM0MDB4MzAwLCBWQ0xLNDAsCisJMHgwNSwgMHgzMiwgMHg1MSwgNDAwLCAzMDB9LC8qIDAzICovCisJe1N1cHBvcnQzMkJwcCArIE5vU3VwcG9ydFRWICsgU3luY05OICsgU3VwcG9ydFRWMTAyNCwgUkVTNTEyeDM4NCwKKwlWQ0xLNjUsIDB4MDYsIDB4NDMsIDB4NTIsIDUxMiwgMzg0fSwvKiAwNCAqLworCXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0QWxsQ1JUMiArIFN5bmNQTiwgUkVTNjQweDQwMCwgVkNMSzI1XzE3NSwKKwkweDAwLCAweDE0LCAweDJmLCA2NDAsIDQwMH0sLyogMDUgKi8KKwl7U3VwcG9ydDMyQnBwICsgU3VwcG9ydEFsbENSVDIgKyBTeW5jTk4sIFJFUzY0MHg0ODB4NjAsIFZDTEsyNV8xNzUsCisJMHgwNCwgMHgyNCwgMHgyZSwgNjQwLCA0ODB9LC8qIDA2IDY0MHg0ODB4NjBIeiAoTENEIDY0MHg0ODB4NjB6KSAqLworCXtTdXBwb3J0MzJCcHAgKyBOb1N1cHBvcnRIaVZpc2lvblRWICsgU3luY05OLCBSRVM2NDB4NDgweDcyLCBWQ0xLMzFfNSwKKwkweDA0LCAweDI0LCAweDJlLCA2NDAsIDQ4MH0sLyogMDcgNjQweDQ4MHg3Mkh6IChMQ0QgNjQweDQ4MHg3MEh6KSAqLworCXtTdXBwb3J0MzJCcHAgKyBOb1N1cHBvcnRIaVZpc2lvblRWICsgU3luY05OLCBSRVM2NDB4NDgweDc1LCBWQ0xLMzFfNSwKKwkweDQ3LCAweDI0LCAweDJlLCA2NDAsIDQ4MH0sLyogMDggNjQweDQ4MHg3NUh6IChMQ0QgNjQweDQ4MHg3NUh6KSAqLworCXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0UkFNREFDMiArIFN5bmNOTiwgUkVTNjQweDQ4MHg4NSwgVkNMSzM2LAorCTB4OEEsIDB4MjQsIDB4MmUsIDY0MCwgNDgwfSwvKiAwOSA2NDB4NDgweDg1SHogKi8KKwl7U3VwcG9ydDMyQnBwICsgU3VwcG9ydFJBTURBQzIgKyBTeW5jUE4sIFJFUzY0MHg0ODB4MTAwLCBWQ0xLNDNfMTYzLAorCTB4MDAsIDB4MjQsIDB4MmUsIDY0MCwgNDgwfSwvKiAwYSA2NDB4NDgweDEwMEh6ICovCisJe1N1cHBvcnQzMkJwcCArIFN1cHBvcnRSQU1EQUMyICsgU3luY1BOLCBSRVM2NDB4NDgweDEyMCwgVkNMSzUyXzQwNiwKKwkweDAwLCAweDI0LCAweDJlLCA2NDAsIDQ4MH0sLyogMGIgNjQweDQ4MHgxMjBIeiAqLworCXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0UkFNREFDMiArIFN5bmNQTiwgUkVTNjQweDQ4MHgxNjAsIFZDTEs3Ml84NTIsCisJMHgwMCwgMHgyNCwgMHgyZSwgNjQwLCA0ODB9LC8qIDBjIDY0MHg0ODB4MTYwSHogKi8KKwl7U3VwcG9ydDMyQnBwICsgU3VwcG9ydFJBTURBQzIgKyBTeW5jTk4sIFJFUzY0MHg0ODB4MjAwLCBWQ0xLODZfNiwKKwkweDAwLCAweDI0LCAweDJlLCA2NDAsIDQ4MH0sLyogMGQgNjQweDQ4MHgyMDBIeiAqLworCXtTdXBwb3J0MzJCcHAgKyBOb1N1cHBvcnRMQ0QgKyBTeW5jUFAsIFJFUzgwMHg2MDB4NTYsIFZDTEszNiwKKwkweDA1LCAweDM2LCAweDZhLCA4MDAsIDYwMH0sLyogMGUgODAweDYwMHg1Nkh6ICovCisJe1N1cHBvcnQzMkJwcCArIE5vU3VwcG9ydFRWICsgU3luY1BQLCBSRVM4MDB4NjAweDYwLCBWQ0xLNDAsCisJMHgwNSwgMHgzNiwgMHg2YSwgODAwLCA2MDB9LC8qIDBmIDgwMHg2MDB4NjBIeiAoTENEIDgwMHg2MDB4NjBIeikgKi8KKwl7U3VwcG9ydDMyQnBwICsgTm9TdXBwb3J0SGlWaXNpb25UViArIFN5bmNQUCwgUkVTODAweDYwMHg3MiwgVkNMSzUwLAorCTB4NDgsIDB4MzYsIDB4NmEsIDgwMCwgNjAwfSwvKiAxMCA4MDB4NjAweDcySHogKExDRCA4MDB4NjAweDcwSHopICovCisJe1N1cHBvcnQzMkJwcCArIE5vU3VwcG9ydEhpVmlzaW9uVFYgKyBTeW5jUFAsIFJFUzgwMHg2MDB4NzUsIFZDTEs0OV81LAorCTB4OEIsIDB4MzYsIDB4NmEsIDgwMCwgNjAwfSwvKiAxMSA4MDB4NjAweDc1SHogKExDRCA4MDB4NjAweDc1SHopICovCisJe1N1cHBvcnQzMkJwcCArIFN1cHBvcnRSQU1EQUMyICsgU3luY1BQLCBSRVM4MDB4NjAweDg1LCBWQ0xLNTZfMjUsCisJMHgwMCwgMHgzNiwgMHg2YSwgODAwLCA2MDB9LC8qIDEyIDgwMHg2MDB4ODVIeiAqLworCXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0UkFNREFDMiArIFN5bmNQTiwgUkVTODAweDYwMHgxMDAsIFZDTEs2OF8xNzksCisJMHgwMCwgMHgzNiwgMHg2YSwgODAwLCA2MDB9LC8qIDEzIDgwMHg2MDB4MTAwSHogKi8KKwl7U3VwcG9ydDMyQnBwICsgU3VwcG9ydFJBTURBQzIgKyBTeW5jUE4sIFJFUzgwMHg2MDB4MTIwLCBWQ0xLODNfOTUsCisJMHgwMCwgMHgzNiwgMHg2YSwgODAwLCA2MDB9LC8qIDE0IDgwMHg2MDB4MTIwSHogKi8KKwl7U3VwcG9ydDMyQnBwICsgU3VwcG9ydFJBTURBQzIgKyBTeW5jUE4sIFJFUzgwMHg2MDB4MTYwLCBWQ0xLMTE2XzQwNiwKKwkweDAwLCAweDM2LCAweDZhLCA4MDAsIDYwMH0sLyogMTUgODAweDYwMHgxNjBIeiAqLworCXtTdXBwb3J0MzJCcHAgKyBJbnRlcmxhY2VNb2RlICsgU3luY1BQLCBSRVMxMDI0eDc2OHg0MywgVkNMSzQ0XzksCisJMHgwMCwgMHg0NywgMHgzNywgMTAyNCwgNzY4fSwvKiAxNiAxMDI0eDc2OHg0M0h6ICovCisJLyogMTcgMTAyNHg3Njh4NjBIeiAoTENEIDEwMjR4NzY4eDYwSHopICovCisJe1N1cHBvcnQzMkJwcCArIE5vU3VwcG9ydFRWICsgU3luY05OICsgU3VwcG9ydFRWMTAyNCwgUkVTMTAyNHg3Njh4NjAsCisJVkNMSzY1LCAweDA2LCAweDQ3LCAweDM3LCAxMDI0LCA3Njh9LAorCXtTdXBwb3J0MzJCcHAgKyBOb1N1cHBvcnRIaVZpc2lvblRWICsgU3luY05OLCBSRVMxMDI0eDc2OHg3MCwgVkNMSzc1LAorCTB4NDksIDB4NDcsIDB4MzcsIDEwMjQsIDc2OH0sLyogMTggMTAyNHg3Njh4NzBIeiAoTENEIDEwMjR4NzY4eDcwSHopICovCisJe1N1cHBvcnQzMkJwcCArIE5vU3VwcG9ydEhpVmlzaW9uVFYgKyBTeW5jUFAsIFJFUzEwMjR4NzY4eDc1LCBWQ0xLNzhfNzUsCisJMHgwMCwgMHg0NywgMHgzNywgMTAyNCwgNzY4fSwvKiAxOSAxMDI0eDc2OHg3NUh6IChMQ0QgMTAyNHg3Njh4NzVIeikgKi8KKwl7U3VwcG9ydDMyQnBwICsgU3VwcG9ydFJBTURBQzIgKyBTeW5jUFAsIFJFUzEwMjR4NzY4eDg1LCBWQ0xLOTRfNSwKKwkweDhDLCAweDQ3LCAweDM3LCAxMDI0LCA3Njh9LC8qIDFhIDEwMjR4NzY4eDg1SHogKi8KKwl7U3VwcG9ydDMyQnBwICsgU3VwcG9ydFJBTURBQzIgKyBTeW5jUE4sIFJFUzEwMjR4NzY4eDEwMCwgVkNMSzExM18zMDksCisJMHgwMCwgMHg0NywgMHgzNywgMTAyNCwgNzY4fSwvKiAxYiAxMDI0eDc2OHgxMDBIeiAqLworCXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0UkFNREFDMiArIFN5bmNQTiwgUkVTMTAyNHg3Njh4MTIwLCBWQ0xLMTM5XzA1NCwKKwkweDAwLCAweDQ3LCAweDM3LCAxMDI0LCA3Njh9LC8qIDFjIDEwMjR4NzY4eDEyMEh6ICovCisJe1N1cHBvcnQzMkJwcCArIFN1cHBvcnRMQ0QgKyBTeW5jUFAsIFJFUzEyODB4OTYweDYwLCBWQ0xLMTA4XzIsCisJMHgwOCwgMHg1OCwgMHg3YiwgMTI4MCwgOTYwfSwvKiAxZCAxMjgweDk2MHg2MEh6ICovCisJe1N1cHBvcnQzMkJwcCArIEludGVybGFjZU1vZGUgKyBTeW5jUFAsIFJFUzEyODB4MTAyNHg0MywgVkNMSzc4Xzc1LAorCTB4MDAsIDB4NTgsIDB4M2EsIDEyODAsIDEwMjR9LC8qIDFlIDEyODB4MTAyNHg0M0h6ICovCisJe1N1cHBvcnQzMkJwcCArIE5vU3VwcG9ydFRWICsgU3luY1BQLCBSRVMxMjgweDEwMjR4NjAsIFZDTEsxMDhfMiwKKwkweDA3LCAweDU4LCAweDNhLCAxMjgwLCAxMDI0fSwvKjFmIDEyODB4MTAyNHg2MEh6IChMQ0QgMTI4MHgxMDI0eDYwSHopKi8KKwl7U3VwcG9ydDMyQnBwICsgTm9TdXBwb3J0VFYgKyBTeW5jUFAsIFJFUzEyODB4MTAyNHg3NSwgVkNMSzEzNV81LAorCTB4MDAsIDB4NTgsIDB4M2EsIDEyODAsIDEwMjR9LC8qMjAgMTI4MHgxMDI0eDc1SHogKExDRCAxMjgweDEwMjR4NzVIeikqLworCXtTdXBwb3J0MzJCcHAgKyBTeW5jUFAsIFJFUzEyODB4MTAyNHg4NSwgVkNMSzE1N181LAorCTB4MDAsIDB4NTgsIDB4M2EsIDEyODAsIDEwMjR9LC8qIDIxIDEyODB4MTAyNHg4NUh6ICovCisJLyogMjIgMTYwMHgxMjAweDYwSHogKi8KKwl7U3VwcG9ydDMyQnBwICsgU3VwcG9ydExDRCArIFN5bmNQUCArIFN1cHBvcnRDUlQyaW4zMDFDLAorCVJFUzE2MDB4MTIwMHg2MCwgVkNMSzE2MiwgMHgwOSwgMHg3QSwgMHgzYywgMTYwMCwgMTIwMH0sCisJe1N1cHBvcnQzMkJwcCArIFN5bmNQUCArIFN1cHBvcnRDUlQyaW4zMDFDLCBSRVMxNjAweDEyMDB4NjUsIFZDTEsxNzUsCisJMHgwMCwgMHg2OSwgMHgzYywgMTYwMCwgMTIwMH0sLyogMjMgMTYwMHgxMjAweDY1SHogKi8KKwl7U3VwcG9ydDMyQnBwICsgU3luY1BQICsgU3VwcG9ydENSVDJpbjMwMUMsIFJFUzE2MDB4MTIwMHg3MCwgVkNMSzE4OSwKKwkweDAwLCAweDY5LCAweDNjLCAxNjAwLCAxMjAwfSwvKiAyNCAxNjAweDEyMDB4NzBIeiAqLworCXtTdXBwb3J0MzJCcHAgKyBTeW5jUFAgKyBTdXBwb3J0Q1JUMmluMzAxQywgUkVTMTYwMHgxMjAweDc1LCBWQ0xLMjAyXzUsCisJMHgwMCwgMHg2OSwgMHgzYywgMTYwMCwgMTIwMH0sLyogMjUgMTYwMHgxMjAweDc1SHogKi8KKwl7U3VwcG9ydDMyQnBwICsgU3luY1BQLCBSRVMxNjAweDEyMDB4ODUsIFZDTEsyMjlfNSwKKwkweDAwLCAweDY5LCAweDNjLCAxNjAwLCAxMjAwfSwvKiAyNiAxNjAweDEyMDB4ODVIeiAqLworCXtTdXBwb3J0MzJCcHAgKyBTeW5jUFAsIFJFUzE2MDB4MTIwMHgxMDAsIFZDTEsyNjlfNjU1LAorCTB4MDAsIDB4NjksIDB4M2MsIDE2MDAsIDEyMDB9LC8qIDI3IDE2MDB4MTIwMHgxMDBIeiAqLworCXtTdXBwb3J0MzJCcHAgKyBTeW5jUFAsIFJFUzE2MDB4MTIwMHgxMjAsIFZDTEszMjNfNTg2LAorCTB4MDAsIDB4NjksIDB4M2MsIDE2MDAsIDEyMDB9LC8qIDI4IDE2MDB4MTIwMHgxMjBIeiAqLworCXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0TENEICsgU3luY05QLCBSRVMxOTIweDE0NDB4NjAsIFZDTEsyMzQsCisJMHgwMCwgMHgwMCwgMHg2OCwgMTkyMCwgMTQ0MH0sLyogMjkgMTkyMHgxNDQweDYwSHogKi8KKwl7U3VwcG9ydDMyQnBwICsgU3luY1BOLCBSRVMxOTIweDE0NDB4NjUsIFZDTEsyNTRfODE3LAorCTB4MDAsIDB4MDAsIDB4NjgsIDE5MjAsIDE0NDB9LC8qIDJhIDE5MjB4MTQ0MHg2NUh6ICovCisJe1N1cHBvcnQzMkJwcCArIFN5bmNQTiwgUkVTMTkyMHgxNDQweDcwLCBWQ0xLMjc3XzAxNSwKKwkweDAwLCAweDAwLCAweDY4LCAxOTIwLCAxNDQwfSwvKiAyYiAxOTIweDE0NDB4NzBIeiAqLworCXtTdXBwb3J0MzJCcHAgKyBTeW5jUE4sIFJFUzE5MjB4MTQ0MHg3NSwgVkNMSzI5MV8xMzIsCisJMHgwMCwgMHgwMCwgMHg2OCwgMTkyMCwgMTQ0MH0sLyogMmMgMTkyMHgxNDQweDc1SHogKi8KKwl7U3VwcG9ydDMyQnBwICsgU3luY1BOLCBSRVMxOTIweDE0NDB4ODUsIFZDTEszMzBfNjE1LAorCTB4MDAsIDB4MDAsIDB4NjgsIDE5MjAsIDE0NDB9LC8qIDJkIDE5MjB4MTQ0MHg4NUh6ICovCisJe1N1cHBvcnQxNkJwcCArIFN5bmNQTiwgUkVTMTkyMHgxNDQweDEwMCwgVkNMSzM4OF82MzEsCisJMHgwMCwgMHgwMCwgMHg2OCwgMTkyMCwgMTQ0MH0sLyogMmUgMTkyMHgxNDQweDEwMEh6ICovCisJe1N1cHBvcnQzMkJwcCArIFN1cHBvcnRMQ0QgKyBTeW5jUE4sIFJFUzIwNDh4MTUzNng2MCwgVkNMSzI2Nl85NTIsCisJMHgwMCwgMHgwMCwgMHg2YywgMjA0OCwgMTUzNn0sLyogMmYgMjA0OHgxNTM2eDYwSHogKi8KKwl7U3VwcG9ydDMyQnBwICsgU3luY1BOLCBSRVMyMDQ4eDE1MzZ4NjUsIFZDTEsyOTFfNzY2LAorCTB4MDAsIDB4MDAsIDB4NmMsIDIwNDgsIDE1MzZ9LC8qIDMwIDIwNDh4MTUzNng2NUh6ICovCisJe1N1cHBvcnQzMkJwcCArIFN5bmNQTiwgUkVTMjA0OHgxNTM2eDcwLCBWQ0xLMzE1XzE5NSwKKwkweDAwLCAweDAwLCAweDZjLCAyMDQ4LCAxNTM2fSwvKiAzMSAyMDQ4eDE1MzZ4NzBIeiAqLworCXtTdXBwb3J0MzJCcHAgKyBTeW5jUE4sIFJFUzIwNDh4MTUzNng3NSwgVkNMSzM0MF80NzcsCisJMHgwMCwgMHgwMCwgMHg2YywgMjA0OCwgMTUzNn0sLyogMzIgMjA0OHgxNTM2eDc1SHogKi8KKwl7U3VwcG9ydDE2QnBwICsgU3luY1BOLCBSRVMyMDQ4eDE1MzZ4ODUsIFZDTEszNzVfODQ3LAorCTB4MDAsIDB4MDAsIDB4NmMsIDIwNDgsIDE1MzZ9LC8qIDMzIDIwNDh4MTUzNng4NUh6ICovCisJe1N1cHBvcnQzMkJwcCArIFN1cHBvcnRIaVZpc2lvblRWICsgU3VwcG9ydFJBTURBQzIgKworCSBTeW5jUFAgKyBTdXBwb3J0WVBiUHIsIFJFUzgwMHg0ODB4NjAsIFZDTEszOV83NywKKwkgMHgwOCwgMHgwMCwgMHg3MCwgODAwLCA0ODB9LC8qIDM0IDgwMHg0ODB4NjBIeiAqLworCXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0UkFNREFDMiArIFN5bmNQUCwgUkVTODAweDQ4MHg3NSwgVkNMSzQ5XzUsCisJMHgwOCwgMHgwMCwgMHg3MCwgODAwLCA0ODB9LC8qIDM1IDgwMHg0ODB4NzVIeiAqLworCXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0UkFNREFDMiArIFN5bmNQUCwgUkVTODAweDQ4MHg4NSwgVkNMSzU2XzI1LAorCTB4MDgsIDB4MDAsIDB4NzAsIDgwMCwgNDgwfSwvKiAzNiA4MDB4NDgweDg1SHogKi8KKwl7U3VwcG9ydDMyQnBwICsgU3VwcG9ydEhpVmlzaW9uVFYgKyBTdXBwb3J0UkFNREFDMiArCisJIFN5bmNQUCArIFN1cHBvcnRZUGJQciwgUkVTMTAyNHg1NzZ4NjAsIFZDTEs2NSwKKwkgMHgwOSwgMHgwMCwgMHg3MSwgMTAyNCwgNTc2fSwvKiAzNyAxMDI0eDU3Nng2MEh6ICovCisJe1N1cHBvcnQzMkJwcCArIFN1cHBvcnRSQU1EQUMyICsgU3luY1BQLCBSRVMxMDI0eDU3Nng3NSwgVkNMSzc4Xzc1LAorCTB4MDksIDB4MDAsIDB4NzEsIDEwMjQsIDU3Nn0sLyogMzggMTAyNHg1NzZ4NzVIeiAqLworCXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0UkFNREFDMiArIFN5bmNQUCwgUkVTMTAyNHg1NzZ4ODUsIFZDTEs5NF81LAorCTB4MDksIDB4MDAsIDB4NzEsIDEwMjQsIDU3Nn0sLyogMzkgMTAyNHg1NzZ4ODVIeiAqLworCXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0SGlWaXNpb25UViArIFN1cHBvcnRSQU1EQUMyICsKKwlTeW5jUFAgKyBTdXBwb3J0WVBiUHIsIFJFUzEyODB4NzIweDYwLCBWQ0xLMTA4XzIsCisJMHgwQSwgMHgwMCwgMHg3NSwgMTI4MCwgNzIwfSwvKiAzYSAxMjgweDcyMHg2MEh6Ki8KKwl7U3VwcG9ydDMyQnBwICsgU3VwcG9ydFJBTURBQzIgKyBTeW5jUFAsIFJFUzEyODB4NzIweDc1LCBWQ0xLMTM1XzUsCisJMHgwQSwgMHgwMCwgMHg3NSwgMTI4MCwgNzIwfSwvKiAzYiAxMjgweDcyMHg3NUh6ICovCisJe1N1cHBvcnQzMkJwcCArIFN1cHBvcnRSQU1EQUMyICsgU3luY1BQLCBSRVMxMjgweDcyMHg4NSwgVkNMSzE1N181LAorCTB4MEEsIDB4MDAsIDB4NzUsIDEyODAsIDcyMH0sLyogM2MgMTI4MHg3MjB4ODVIeiAqLworCXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0VFYgKyBTeW5jTk4sIFJFUzcyMHg0ODB4NjAsIFZDTEsyOF8zMjIsCisJMHgwNiwgMHgwMCwgMHgzMSwgIDcyMCwgNDgwfSwvKiAzZCA3MjB4NDgweDYwSHogKi8KKwl7U3VwcG9ydDMyQnBwICsgU3VwcG9ydFRWICsgU3luY1BQLCBSRVM3MjB4NTc2eDU2LCBWQ0xLMzYsCisJMHgwNiwgMHgwMCwgMHgzMiwgNzIwLCA1NzZ9LC8qIDNlIDcyMHg1NzZ4NTZIeiAqLworCXtTdXBwb3J0MzJCcHAgKyBJbnRlcmxhY2VNb2RlICsgTm9TdXBwb3J0TENEICsgU3luY1BQLCBSRVM4NTZ4NDgweDc5SSwKKwlWQ0xLMzVfMiwgMHgwMCwgMHgwMCwgMHgwMCwgIDg1NiwgNDgwfSwvKiAzZiA4NTZ4NDgweDc5SSAqLworCXtTdXBwb3J0MzJCcHAgKyBOb1N1cHBvcnRMQ0QgKyBTeW5jTk4sIFJFUzg1Nng0ODB4NjAsIFZDTEszNV8yLAorCTB4MDAsIDB4MDAsIDB4MDAsICA4NTYsIDQ4MH0sLyogNDAgODU2eDQ4MHg2MEh6ICovCisJe1N1cHBvcnQzMkJwcCArIE5vU3VwcG9ydEhpVmlzaW9uVFYgKyBTeW5jUFAsIFJFUzEyODB4NzY4eDYwLAorCVZDTEs3OV80MTEsIDB4MDgsIDB4NDgsIDB4MjMsIDEyODAsIDc2OH0sLyogNDEgMTI4MHg3Njh4NjBIeiAqLworCXtTdXBwb3J0MzJCcHAgKyBOb1N1cHBvcnRIaVZpc2lvblRWICsgU3luY1BQLCBSRVMxNDAweDEwNTB4NjAsCisJVkNMSzEyMl82MSwgMHgwOCwgMHg2OSwgMHgyNiwgMTQwMCwgMTA1MH0sLyogNDIgMTQwMHgxMDUweDYwSHogKi8KKwl7U3VwcG9ydDMyQnBwICsgU3VwcG9ydFJBTURBQzIgKyBTeW5jUFAsIFJFUzExNTJ4ODY0eDYwLCBWQ0xLODBfMzUwLAorCTB4MzcsIDB4MDAsIDB4MjAsIDExNTIsIDg2NH0sLyogNDMgMTE1Mng4NjR4NjBIeiAqLworCXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0UkFNREFDMiArIFN5bmNQUCwgUkVTMTE1Mng4NjR4NzUsIFZDTEsxMDdfMzg1LAorCTB4MzcsIDB4MDAsIDB4MjAsIDExNTIsIDg2NH0sLyogNDQgMTE1Mng4NjR4NzVIeiAqLworCXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0TENEICsgU3VwcG9ydFJBTURBQzIgKyBTeW5jUFAsIFJFUzEyODB4OTYweDc1LAorCVZDTEsxMjVfOTk5LCAweDNBLCAweDg4LCAweDdiLCAxMjgwLCA5NjB9LC8qIDQ1IDEyODB4OTYweDc1SHogKi8KKwl7U3VwcG9ydDMyQnBwICsgU3VwcG9ydExDRCArIFN1cHBvcnRSQU1EQUMyICsgU3luY1BQLCBSRVMxMjgweDk2MHg4NSwKKwlWQ0xLMTQ4XzUsIDB4MEEsIDB4ODgsIDB4N2IsIDEyODAsIDk2MH0sLyogNDYgMTI4MHg5NjB4ODVIeiAqLworCXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0TENEICsgU3VwcG9ydFJBTURBQzIgKyBTeW5jUFAsIFJFUzEyODB4OTYweDEyMCwKKwlWQ0xLMjE3XzMyNSwgMHgzQSwgMHg4OCwgMHg3YiwgMTI4MCwgOTYwfSwvKiA0NyAxMjgweDk2MHgxMjBIeiAqLworCXtTdXBwb3J0MzJCcHAgKyBTdXBwb3J0UkFNREFDMiArIFN5bmNQTiwgUkVTMTAyNHg3Njh4MTYwLCBWQ0xLMTM5XzA1NCwKKwkweDMwLCAweDQ3LCAweDM3LCAxMDI0LCA3Njh9LC8qIDQ4IDEwMjR4NzY4eDE2MEh6ICovCiB9OwogCiAKICNpZiAwCi1zdGF0aWMgc3RydWN0IFhHSTMzMF9WQ0xLRGF0YVN0cnVjdCBYR0kzMzBfVkNMS0RhdGFbXSA9Ci17Ci0geyAweDFiLDB4ZTEsIDI1fSwgLyogMHgwICovCi0geyAweDRlLDB4ZTQsIDI4fSwgLyogMHgxICovCi0geyAweDU3LDB4ZTQsIDMxfSwgLyogMHgyICovCi0geyAweGMzLDB4YzgsIDM2fSwgLyogMHgzICovCi0geyAweDQyLDB4ZTIsIDQwfSwgLyogMHg0ICovCi0geyAweGZlLDB4Y2QsIDQzfSwgLyogMHg1ICovCi0geyAweDVkLDB4YzQsIDQ0fSwgLyogMHg2ICovCi0geyAweDUyLDB4ZTIsIDQ5fSwgLyogMHg3ICovCi0geyAweDUzLDB4ZTIsIDUwfSwgLyogMHg4ICovCi0geyAweDc0LDB4NjcsIDUyfSwgLyogMHg5ICovCi0geyAweDZkLDB4NjYsIDU2fSwgLyogMHhhICovCi0geyAweDZjLDB4YzMsIDY1fSwgLyogMHhiICovCi0geyAweDQ2LDB4NDQsIDY3fSwgLyogMHhjICovCi0geyAweGIxLDB4NDYsIDY4fSwgLyogMHhkICovCi0geyAweGQzLDB4NGEsIDcyfSwgLyogMHhlICovCi0geyAweDI5LDB4NjEsIDc1fSwgLyogMHhmICovCi0geyAweDZlLDB4NDYsIDc2fSwgLyogMHgxMCAqLwotIHsgMHgyYiwweDYxLCA3OH0sIC8qIDB4MTEgKi8KLSB7IDB4MzEsMHg0MiwgNzl9LCAvKiAweDEyICovCi0geyAweGFiLDB4NDQsIDgzfSwgLyogMHgxMyAqLwotIHsgMHg0NiwweDI1LCA4NH0sIC8qIDB4MTQgKi8KLSB7IDB4NzgsMHgyOSwgODZ9LCAvKiAweDE1ICovCi0geyAweDYyLDB4NDQsIDk0fSwgLyogMHgxNiAqLwotIHsgMHgyYiwweDQxLDEwNH0sIC8qIDB4MTcgKi8KLSB7IDB4M2EsMHgyMywxMDV9LCAvKiAweDE4ICovCi0geyAweDcwLDB4NDQsMTA4fSwgLyogMHgxOSAqLwotIHsgMHgzYywweDIzLDEwOX0sIC8qIDB4MWEgKi8KLSB7IDB4NWUsMHg0MywxMTN9LCAvKiAweDFiICovCi0geyAweGJjLDB4NDQsMTE2fSwgLyogMHgxYyAqLwotIHsgMHhlMCwweDQ2LDEzMn0sIC8qIDB4MWQgKi8KLSB7IDB4NTQsMHg0MiwxMzV9LCAvKiAweDFlICovCi0geyAweGVhLDB4MmEsMTM5fSwgLyogMHgxZiAqLwotIHsgMHg0MSwweDIyLDE1N30sIC8qIDB4MjAgKi8KLSB7IDB4NzAsMHgyNCwxNjJ9LCAvKiAweDIxICovCi0geyAweDMwLDB4MjEsMTc1fSwgLyogMHgyMiAqLwotIHsgMHg0ZSwweDIyLDE4OX0sIC8qIDB4MjMgKi8KLSB7IDB4ZGUsMHgyNiwxOTR9LCAvKiAweDI0ICovCi0geyAweDYyLDB4MDYsMjAyfSwgLyogMHgyNSAqLwotIHsgMHgzZiwweDAzLDIyOX0sIC8qIDB4MjYgKi8KLSB7IDB4YjgsMHgwNiwyMzR9LCAvKiAweDI3ICovCi0geyAweDM0LDB4MDIsMjUzfSwgLyogMHgyOCAqLwotIHsgMHg1OCwweDA0LDI1NX0sIC8qIDB4MjkgKi8KLSB7IDB4MjQsMHgwMSwyNjV9LCAvKiAweDJhICovCi0geyAweDliLDB4MDIsMjY3fSwgLyogMHgyYiAqLwotIHsgMHg3MCwweDA1LDI3MH0sIC8qIDB4MmMgKi8KLSB7IDB4MjUsMHgwMSwyNzJ9LCAvKiAweDJkICovCi0geyAweDljLDB4MDIsMjc3fSwgLyogMHgyZSAqLwotIHsgMHgyNywweDAxLDI4Nn0sIC8qIDB4MmYgKi8KLSB7IDB4M2MsMHgwMiwyOTF9LCAvKiAweDMwICovCi0geyAweGVmLDB4MGEsMjkyfSwgLyogMHgzMSAqLwotIHsgMHhmNiwweDBhLDMxMH0sIC8qIDB4MzIgKi8KLSB7IDB4OTUsMHgwMSwzMTV9LCAvKiAweDMzICovCi0geyAweGYwLDB4MDksMzI0fSwgLyogMHgzNCAqLwotIHsgMHhmZSwweDBhLDMzMX0sIC8qIDB4MzUgKi8KLSB7IDB4ZjMsMHgwOSwzMzJ9LCAvKiAweDM2ICovCi0geyAweGVhLDB4MDgsMzQwfSwgLyogMHgzNyAqLwotIHsgMHhlOCwweDA3LDM3Nn0sIC8qIDB4MzggKi8KLSB7IDB4ZGUsMHgwNiwzODl9LCAvKiAweDM5ICovCi0geyAweDUyLDB4MmEsIDU0fSwgLyogMHgzYSAqLwotIHsgMHg1MiwweDZhLCAyN30sIC8qIDB4M2IgKi8KLSB7IDB4NjIsMHgyNCwgNzB9LCAvKiAweDNjICovCi0geyAweDYyLDB4NjQsIDcwfSwgLyogMHgzZCAqLwotIHsgMHhhOCwweDRjLCAzMH0sIC8qIDB4M2UgKi8KLSB7IDB4MjAsMHgyNiwgMzN9LCAvKiAweDNmICovCi0geyAweDMxLDB4YzIsIDM5fSwgLyogMHg0MCAqLwotIHsgMHg2MCwweDM2LCAzMH0sIC8qIDB4NDEgKi8KLSB7IDB4NDAsMHg0QSwgMjh9LCAvKiAweDQyICovCi0geyAweDlGLDB4NDYsIDQ0fSwgLyogMHg0MyAqLwotIHsgMHg5NywweDJDLCAyNn0sIC8qIDB4NDQgKi8KLSB7IDB4NDQsMHhFNCwgMjV9LCAvKiAweDQ1ICovCi0geyAweDdFLDB4MzIsIDQ3fSwgLyogMHg0NiAqLwotIHsgMHgwOCwweDI0LCAzMX0sIC8qIDB4NDcgKi8KLSB7IDB4OTcsMHgyYywgMjZ9LCAvKiAweDQ4ICovCi0geyAweENFLDB4M2MsIDM5fSwgLyogMHg0OSAqLwotIHsgMHg1MiwweDRBLCAzNn0sIC8qIDB4NGEgKi8KLSB7IDB4MkMsMHg2MSwgOTV9LCAvKiAweDRiICovCi0geyAweDc4LDB4MjcsMTA4fSwgLyogMHg0YyAqLwotIHsgMHg2NiwweDQzLDEyM30sICAvKiAweDRkICovCi0geyAweDJjLDB4NjEsIDgwfSwgIC8qIDB4NGUgKi8KLSB7IDB4M2IsMHg2MSwxMDh9ICAvKiAweDRmICovCitzdGF0aWMgc3RydWN0IFhHSTMzMF9WQ0xLRGF0YVN0cnVjdCBYR0kzMzBfVkNMS0RhdGFbXSA9IHsKKwl7MHgxYiwgMHhlMSwgIDI1fSwgLyogMHgwICovCisJezB4NGUsIDB4ZTQsICAyOH0sIC8qIDB4MSAqLworCXsweDU3LCAweGU0LCAgMzF9LCAvKiAweDIgKi8KKwl7MHhjMywgMHhjOCwgIDM2fSwgLyogMHgzICovCisJezB4NDIsIDB4ZTIsICA0MH0sIC8qIDB4NCAqLworCXsweGZlLCAweGNkLCAgNDN9LCAvKiAweDUgKi8KKwl7MHg1ZCwgMHhjNCwgIDQ0fSwgLyogMHg2ICovCisJezB4NTIsIDB4ZTIsICA0OX0sIC8qIDB4NyAqLworCXsweDUzLCAweGUyLCAgNTB9LCAvKiAweDggKi8KKwl7MHg3NCwgMHg2NywgIDUyfSwgLyogMHg5ICovCisJezB4NmQsIDB4NjYsICA1Nn0sIC8qIDB4YSAqLworCXsweDZjLCAweGMzLCAgNjV9LCAvKiAweGIgKi8KKwl7MHg0NiwgMHg0NCwgIDY3fSwgLyogMHhjICovCisJezB4YjEsIDB4NDYsICA2OH0sIC8qIDB4ZCAqLworCXsweGQzLCAweDRhLCAgNzJ9LCAvKiAweGUgKi8KKwl7MHgyOSwgMHg2MSwgIDc1fSwgLyogMHhmICovCisJezB4NmUsIDB4NDYsICA3Nn0sIC8qIDB4MTAgKi8KKwl7MHgyYiwgMHg2MSwgIDc4fSwgLyogMHgxMSAqLworCXsweDMxLCAweDQyLCAgNzl9LCAvKiAweDEyICovCisJezB4YWIsIDB4NDQsICA4M30sIC8qIDB4MTMgKi8KKwl7MHg0NiwgMHgyNSwgIDg0fSwgLyogMHgxNCAqLworCXsweDc4LCAweDI5LCAgODZ9LCAvKiAweDE1ICovCisJezB4NjIsIDB4NDQsICA5NH0sIC8qIDB4MTYgKi8KKwl7MHgyYiwgMHg0MSwgMTA0fSwgLyogMHgxNyAqLworCXsweDNhLCAweDIzLCAxMDV9LCAvKiAweDE4ICovCisJezB4NzAsIDB4NDQsIDEwOH0sIC8qIDB4MTkgKi8KKwl7MHgzYywgMHgyMywgMTA5fSwgLyogMHgxYSAqLworCXsweDVlLCAweDQzLCAxMTN9LCAvKiAweDFiICovCisJezB4YmMsIDB4NDQsIDExNn0sIC8qIDB4MWMgKi8KKwl7MHhlMCwgMHg0NiwgMTMyfSwgLyogMHgxZCAqLworCXsweDU0LCAweDQyLCAxMzV9LCAvKiAweDFlICovCisJezB4ZWEsIDB4MmEsIDEzOX0sIC8qIDB4MWYgKi8KKwl7MHg0MSwgMHgyMiwgMTU3fSwgLyogMHgyMCAqLworCXsweDcwLCAweDI0LCAxNjJ9LCAvKiAweDIxICovCisJezB4MzAsIDB4MjEsIDE3NX0sIC8qIDB4MjIgKi8KKwl7MHg0ZSwgMHgyMiwgMTg5fSwgLyogMHgyMyAqLworCXsweGRlLCAweDI2LCAxOTR9LCAvKiAweDI0ICovCisJezB4NjIsIDB4MDYsIDIwMn0sIC8qIDB4MjUgKi8KKwl7MHgzZiwgMHgwMywgMjI5fSwgLyogMHgyNiAqLworCXsweGI4LCAweDA2LCAyMzR9LCAvKiAweDI3ICovCisJezB4MzQsIDB4MDIsIDI1M30sIC8qIDB4MjggKi8KKwl7MHg1OCwgMHgwNCwgMjU1fSwgLyogMHgyOSAqLworCXsweDI0LCAweDAxLCAyNjV9LCAvKiAweDJhICovCisJezB4OWIsIDB4MDIsIDI2N30sIC8qIDB4MmIgKi8KKwl7MHg3MCwgMHgwNSwgMjcwfSwgLyogMHgyYyAqLworCXsweDI1LCAweDAxLCAyNzJ9LCAvKiAweDJkICovCisJezB4OWMsIDB4MDIsIDI3N30sIC8qIDB4MmUgKi8KKwl7MHgyNywgMHgwMSwgMjg2fSwgLyogMHgyZiAqLworCXsweDNjLCAweDAyLCAyOTF9LCAvKiAweDMwICovCisJezB4ZWYsIDB4MGEsIDI5Mn0sIC8qIDB4MzEgKi8KKwl7MHhmNiwgMHgwYSwgMzEwfSwgLyogMHgzMiAqLworCXsweDk1LCAweDAxLCAzMTV9LCAvKiAweDMzICovCisJezB4ZjAsIDB4MDksIDMyNH0sIC8qIDB4MzQgKi8KKwl7MHhmZSwgMHgwYSwgMzMxfSwgLyogMHgzNSAqLworCXsweGYzLCAweDA5LCAzMzJ9LCAvKiAweDM2ICovCisJezB4ZWEsIDB4MDgsIDM0MH0sIC8qIDB4MzcgKi8KKwl7MHhlOCwgMHgwNywgMzc2fSwgLyogMHgzOCAqLworCXsweGRlLCAweDA2LCAzODl9LCAvKiAweDM5ICovCisJezB4NTIsIDB4MmEsICA1NH0sIC8qIDB4M2EgKi8KKwl7MHg1MiwgMHg2YSwgIDI3fSwgLyogMHgzYiAqLworCXsweDYyLCAweDI0LCAgNzB9LCAvKiAweDNjICovCisJezB4NjIsIDB4NjQsICA3MH0sIC8qIDB4M2QgKi8KKwl7MHhhOCwgMHg0YywgIDMwfSwgLyogMHgzZSAqLworCXsweDIwLCAweDI2LCAgMzN9LCAvKiAweDNmICovCisJezB4MzEsIDB4YzIsICAzOX0sIC8qIDB4NDAgKi8KKwl7MHg2MCwgMHgzNiwgIDMwfSwgLyogMHg0MSAqLworCXsweDQwLCAweDRBLCAgMjh9LCAvKiAweDQyICovCisJezB4OUYsIDB4NDYsICA0NH0sIC8qIDB4NDMgKi8KKwl7MHg5NywgMHgyQywgIDI2fSwgLyogMHg0NCAqLworCXsweDQ0LCAweEU0LCAgMjV9LCAvKiAweDQ1ICovCisJezB4N0UsIDB4MzIsICA0N30sIC8qIDB4NDYgKi8KKwl7MHgwOCwgMHgyNCwgIDMxfSwgLyogMHg0NyAqLworCXsweDk3LCAweDJjLCAgMjZ9LCAvKiAweDQ4ICovCisJezB4Q0UsIDB4M2MsICAzOX0sIC8qIDB4NDkgKi8KKwl7MHg1MiwgMHg0QSwgIDM2fSwgLyogMHg0YSAqLworCXsweDJDLCAweDYxLCAgOTV9LCAvKiAweDRiICovCisJezB4NzgsIDB4MjcsIDEwOH0sIC8qIDB4NGMgKi8KKwl7MHg2NiwgMHg0MywgMTIzfSwgIC8qIDB4NGQgKi8KKwl7MHgyYywgMHg2MSwgIDgwfSwgIC8qIDB4NGUgKi8KKwl7MHgzYiwgMHg2MSwgMTA4fSAgLyogMHg0ZiAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBYR0lfVkJWQ0xLRGF0YVN0cnVjdCBYR0kzMzBfVkJWQ0xLRGF0YVtdID0KLXsKLSB7IDB4MWIsMHhlMSwgMjV9LCAvKiAweDAgKi8KLSB7IDB4NGUsMHhlNCwgMjh9LCAvKiAweDEgKi8KLSB7IDB4NTcsMHhlNCwgMzF9LCAvKiAweDIgKi8KLSB7IDB4YzMsMHhjOCwgMzZ9LCAvKiAweDMgKi8KLSB7IDB4NDIsMHg0NywgNDB9LCAvKiAweDQgKi8KLSB7IDB4ZmUsMHhjZCwgNDN9LCAvKiAweDUgKi8KLSB7IDB4NWQsMHhjNCwgNDR9LCAvKiAweDYgKi8KLSB7IDB4NTIsMHg0NywgNDl9LCAvKiAweDcgKi8KLSB7IDB4NTMsMHg0NywgNTB9LCAvKiAweDggKi8KLSB7IDB4NzQsMHg2NywgNTJ9LCAvKiAweDkgKi8KLSB7IDB4NmQsMHg2NiwgNTZ9LCAvKiAweGEgKi8KLSB7IDB4NWEsMHg2NCwgNjV9LCAvKiAweGIgKi8KLSB7IDB4NDYsMHg0NCwgNjd9LCAvKiAweGMgKi8KLSB7IDB4YjEsMHg0NiwgNjh9LCAvKiAweGQgKi8KLSB7IDB4ZDMsMHg0YSwgNzJ9LCAvKiAweGUgKi8KLSB7IDB4MjksMHg2MSwgNzV9LCAvKiAweGYgKi8KLSB7IDB4NmQsMHg0NiwgNzV9LCAvKiAweDEwICovCi0geyAweDQxLDB4NDMsIDc4fSwgLyogMHgxMSAqLwotIHsgMHgzMSwweDQyLCA3OX0sIC8qIDB4MTIgKi8KLSB7IDB4YWIsMHg0NCwgODN9LCAvKiAweDEzICovCi0geyAweDQ2LDB4MjUsIDg0fSwgLyogMHgxNCAqLwotIHsgMHg3OCwweDI5LCA4Nn0sIC8qIDB4MTUgKi8KLSB7IDB4NjIsMHg0NCwgOTR9LCAvKiAweDE2ICovCi0geyAweDJiLDB4MjIsMTA0fSwgLyogMHgxNyAqLwotIHsgMHg0OSwweDI0LDEwNX0sIC8qIDB4MTggKi8KLSB7IDB4ZjgsMHgyZiwxMDh9LCAvKiAweDE5ICovCi0geyAweDNjLDB4MjMsMTA5fSwgLyogMHgxYSAqLwotIHsgMHg1ZSwweDQzLDExM30sIC8qIDB4MWIgKi8KLSB7IDB4YmMsMHg0NCwxMTZ9LCAvKiAweDFjICovCi0geyAweGUwLDB4NDYsMTMyfSwgLyogMHgxZCAqLwotIHsgMHhkNCwweDI4LDEzNX0sIC8qIDB4MWUgKi8KLSB7IDB4ZWEsMHgyYSwxMzl9LCAvKiAweDFmICovCi0geyAweDQxLDB4MjIsMTU3fSwgLyogMHgyMCAqLwotIHsgMHg3MCwweDI0LDE2Mn0sIC8qIDB4MjEgKi8KLSB7IDB4MzAsMHgyMSwxNzV9LCAvKiAweDIyICovCi0geyAweDRlLDB4MjIsMTg5fSwgLyogMHgyMyAqLwotIHsgMHhkZSwweDI2LDE5NH0sIC8qIDB4MjQgKi8KLSB7IDB4NzAsMHgwNywyMDJ9LCAvKiAweDI1ICovCi0geyAweDNmLDB4MDMsMjI5fSwgLyogMHgyNiAqLwotIHsgMHhiOCwweDA2LDIzNH0sIC8qIDB4MjcgKi8KLSB7IDB4MzQsMHgwMiwyNTN9LCAvKiAweDI4ICovCi0geyAweDU4LDB4MDQsMjU1fSwgLyogMHgyOSAqLwotIHsgMHgyNCwweDAxLDI2NX0sIC8qIDB4MmEgKi8KLSB7IDB4OWIsMHgwMiwyNjd9LCAvKiAweDJiICovCi0geyAweDcwLDB4MDUsMjcwfSwgLyogMHgyYyAqLwotIHsgMHgyNSwweDAxLDI3Mn0sIC8qIDB4MmQgKi8KLSB7IDB4OWMsMHgwMiwyNzd9LCAvKiAweDJlICovCi0geyAweDI3LDB4MDEsMjg2fSwgLyogMHgyZiAqLwotIHsgMHgzYywweDAyLDI5MX0sIC8qIDB4MzAgKi8KLSB7IDB4ZWYsMHgwYSwyOTJ9LCAvKiAweDMxICovCi0geyAweGY2LDB4MGEsMzEwfSwgLyogMHgzMiAqLwotIHsgMHg5NSwweDAxLDMxNX0sIC8qIDB4MzMgKi8KLSB7IDB4ZjAsMHgwOSwzMjR9LCAvKiAweDM0ICovCi0geyAweGZlLDB4MGEsMzMxfSwgLyogMHgzNSAqLwotIHsgMHhmMywweDA5LDMzMn0sIC8qIDB4MzYgKi8KLSB7IDB4ZWEsMHgwOCwzNDB9LCAvKiAweDM3ICovCi0geyAweGU4LDB4MDcsMzc2fSwgLyogMHgzOCAqLwotIHsgMHhkZSwweDA2LDM4OX0sIC8qIDB4MzkgKi8KLSB7IDB4NTIsMHgyYSwgNTR9LCAvKiAweDNhICovCi0geyAweDUyLDB4NmEsIDI3fSwgLyogMHgzYiAqLwotIHsgMHg2MiwweDI0LCA3MH0sIC8qIDB4M2MgKi8KLSB7IDB4NjIsMHg2NCwgNzB9LCAvKiAweDNkICovCi0geyAweGE4LDB4NGMsIDMwfSwgLyogMHgzZSAqLwotIHsgMHgyMCwweDI2LCAzM30sIC8qIDB4M2YgKi8KLSB7IDB4MzEsMHhjMiwgMzl9LCAvKiAweDQwICovCi0geyAweDJlLDB4NDgsIDI1fSwgLyogMHg0MSAqLwotIHsgMHgyNCwweDQ2LCAyNX0sIC8qIDB4NDIgKi8KLSB7IDB4MjYsMHg2NCwgMjh9LCAvKiAweDQzICovCi0geyAweDM3LDB4NjQsIDQwfSwgLyogMHg0NCAqLwotIHsgMHhhMSwweDQyLDEwOH0sIC8qIDB4NDUgKi8KLSB7IDB4MzcsMHg2MSwxMDB9LCAvKiAweDQ2ICovCi0geyAweDc4LDB4MjcsMTA4fSwgLyogMHg0NyAqLwotIHsgMHg1ZSwweDY0LDY4fSwgIC8qIDB4NDggY2hpYXdlbiBmb3IgZnVqMTI4MHg3NjgqLwotIHsgMHg3MCwweDQ0LDEwOH0sIC8qIDB4NDkgY2hpYXdlbiBmb3IgMTQwMHgxMDUwKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJX1ZCVkNMS0RhdGFTdHJ1Y3QgWEdJMzMwX1ZCVkNMS0RhdGFbXSA9IHsKKwl7MHgxYiwgMHhlMSwgIDI1fSwgLyogMHgwICovCisJezB4NGUsIDB4ZTQsICAyOH0sIC8qIDB4MSAqLworCXsweDU3LCAweGU0LCAgMzF9LCAvKiAweDIgKi8KKwl7MHhjMywgMHhjOCwgIDM2fSwgLyogMHgzICovCisJezB4NDIsIDB4NDcsICA0MH0sIC8qIDB4NCAqLworCXsweGZlLCAweGNkLCAgNDN9LCAvKiAweDUgKi8KKwl7MHg1ZCwgMHhjNCwgIDQ0fSwgLyogMHg2ICovCisJezB4NTIsIDB4NDcsICA0OX0sIC8qIDB4NyAqLworCXsweDUzLCAweDQ3LCAgNTB9LCAvKiAweDggKi8KKwl7MHg3NCwgMHg2NywgIDUyfSwgLyogMHg5ICovCisJezB4NmQsIDB4NjYsICA1Nn0sIC8qIDB4YSAqLworCXsweDVhLCAweDY0LCAgNjV9LCAvKiAweGIgKi8KKwl7MHg0NiwgMHg0NCwgIDY3fSwgLyogMHhjICovCisJezB4YjEsIDB4NDYsICA2OH0sIC8qIDB4ZCAqLworCXsweGQzLCAweDRhLCAgNzJ9LCAvKiAweGUgKi8KKwl7MHgyOSwgMHg2MSwgIDc1fSwgLyogMHhmICovCisJezB4NmQsIDB4NDYsICA3NX0sIC8qIDB4MTAgKi8KKwl7MHg0MSwgMHg0MywgIDc4fSwgLyogMHgxMSAqLworCXsweDMxLCAweDQyLCAgNzl9LCAvKiAweDEyICovCisJezB4YWIsIDB4NDQsICA4M30sIC8qIDB4MTMgKi8KKwl7MHg0NiwgMHgyNSwgIDg0fSwgLyogMHgxNCAqLworCXsweDc4LCAweDI5LCAgODZ9LCAvKiAweDE1ICovCisJezB4NjIsIDB4NDQsICA5NH0sIC8qIDB4MTYgKi8KKwl7MHgyYiwgMHgyMiwgMTA0fSwgLyogMHgxNyAqLworCXsweDQ5LCAweDI0LCAxMDV9LCAvKiAweDE4ICovCisJezB4ZjgsIDB4MmYsIDEwOH0sIC8qIDB4MTkgKi8KKwl7MHgzYywgMHgyMywgMTA5fSwgLyogMHgxYSAqLworCXsweDVlLCAweDQzLCAxMTN9LCAvKiAweDFiICovCisJezB4YmMsIDB4NDQsIDExNn0sIC8qIDB4MWMgKi8KKwl7MHhlMCwgMHg0NiwgMTMyfSwgLyogMHgxZCAqLworCXsweGQ0LCAweDI4LCAxMzV9LCAvKiAweDFlICovCisJezB4ZWEsIDB4MmEsIDEzOX0sIC8qIDB4MWYgKi8KKwl7MHg0MSwgMHgyMiwgMTU3fSwgLyogMHgyMCAqLworCXsweDcwLCAweDI0LCAxNjJ9LCAvKiAweDIxICovCisJezB4MzAsIDB4MjEsIDE3NX0sIC8qIDB4MjIgKi8KKwl7MHg0ZSwgMHgyMiwgMTg5fSwgLyogMHgyMyAqLworCXsweGRlLCAweDI2LCAxOTR9LCAvKiAweDI0ICovCisJezB4NzAsIDB4MDcsIDIwMn0sIC8qIDB4MjUgKi8KKwl7MHgzZiwgMHgwMywgMjI5fSwgLyogMHgyNiAqLworCXsweGI4LCAweDA2LCAyMzR9LCAvKiAweDI3ICovCisJezB4MzQsIDB4MDIsIDI1M30sIC8qIDB4MjggKi8KKwl7MHg1OCwgMHgwNCwgMjU1fSwgLyogMHgyOSAqLworCXsweDI0LCAweDAxLCAyNjV9LCAvKiAweDJhICovCisJezB4OWIsIDB4MDIsIDI2N30sIC8qIDB4MmIgKi8KKwl7MHg3MCwgMHgwNSwgMjcwfSwgLyogMHgyYyAqLworCXsweDI1LCAweDAxLCAyNzJ9LCAvKiAweDJkICovCisJezB4OWMsIDB4MDIsIDI3N30sIC8qIDB4MmUgKi8KKwl7MHgyNywgMHgwMSwgMjg2fSwgLyogMHgyZiAqLworCXsweDNjLCAweDAyLCAyOTF9LCAvKiAweDMwICovCisJezB4ZWYsIDB4MGEsIDI5Mn0sIC8qIDB4MzEgKi8KKwl7MHhmNiwgMHgwYSwgMzEwfSwgLyogMHgzMiAqLworCXsweDk1LCAweDAxLCAzMTV9LCAvKiAweDMzICovCisJezB4ZjAsIDB4MDksIDMyNH0sIC8qIDB4MzQgKi8KKwl7MHhmZSwgMHgwYSwgMzMxfSwgLyogMHgzNSAqLworCXsweGYzLCAweDA5LCAzMzJ9LCAvKiAweDM2ICovCisJezB4ZWEsIDB4MDgsIDM0MH0sIC8qIDB4MzcgKi8KKwl7MHhlOCwgMHgwNywgMzc2fSwgLyogMHgzOCAqLworCXsweGRlLCAweDA2LCAzODl9LCAvKiAweDM5ICovCisJezB4NTIsIDB4MmEsICA1NH0sIC8qIDB4M2EgKi8KKwl7MHg1MiwgMHg2YSwgIDI3fSwgLyogMHgzYiAqLworCXsweDYyLCAweDI0LCAgNzB9LCAvKiAweDNjICovCisJezB4NjIsIDB4NjQsICA3MH0sIC8qIDB4M2QgKi8KKwl7MHhhOCwgMHg0YywgIDMwfSwgLyogMHgzZSAqLworCXsweDIwLCAweDI2LCAgMzN9LCAvKiAweDNmICovCisJezB4MzEsIDB4YzIsICAzOX0sIC8qIDB4NDAgKi8KKwl7MHgyZSwgMHg0OCwgIDI1fSwgLyogMHg0MSAqLworCXsweDI0LCAweDQ2LCAgMjV9LCAvKiAweDQyICovCisJezB4MjYsIDB4NjQsICAyOH0sIC8qIDB4NDMgKi8KKwl7MHgzNywgMHg2NCwgIDQwfSwgLyogMHg0NCAqLworCXsweGExLCAweDQyLCAxMDh9LCAvKiAweDQ1ICovCisJezB4MzcsIDB4NjEsIDEwMH0sIC8qIDB4NDYgKi8KKwl7MHg3OCwgMHgyNywgMTA4fSwgLyogMHg0NyAqLworCXsweDVlLCAweDY0LCA2OH0sICAvKiAweDQ4IGNoaWF3ZW4gZm9yIGZ1ajEyODB4NzY4Ki8KKwl7MHg3MCwgMHg0NCwgMTA4fSwgLyogMHg0OSBjaGlhd2VuIGZvciAxNDAweDEwNTAqLwogfTsKICNlbmRpZgogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBYR0kzMzBfU2NyZWVuT2Zmc2V0W10gPSB7Ci0JCQkJCTB4MTQsIDB4MTksIDB4MjAsIDB4MjgsIDB4MzIsIDB4NDAsCi0JCQkJCTB4NTAsIDB4NjQsIDB4NzgsIDB4ODAsIDB4MmQsIDB4MzUsCi0JCQkJCTB4NTcsIDB4NDh9OwotCi1zdGF0aWMgc3RydWN0IFhHSV9TdFJlc0luZm9TdHJ1Y3QgWEdJMzMwX1N0UmVzSW5mb1tdID0KLXsKLSB7IDY0MCw0MDB9LAotIHsgNjQwLDM1MH0sCi0geyA3MjAsNDAwfSwKLSB7IDcyMCwzNTB9LAotIHsgNjQwLDQ4MH0KKwkweDE0LCAweDE5LCAweDIwLCAweDI4LCAweDMyLCAweDQwLAorCTB4NTAsIDB4NjQsIDB4NzgsIDB4ODAsIDB4MmQsIDB4MzUsCisJMHg1NywgMHg0OAogfTsKIAotc3RhdGljIHN0cnVjdCBYR0lfTW9kZVJlc0luZm9TdHJ1Y3QgWEdJMzMwX01vZGVSZXNJbmZvW10gPQotewotIHsgIDMyMCwgMjAwLCA4LCA4fSwKLSB7ICAzMjAsIDI0MCwgOCwgOH0sCi0geyAgMzIwLCA0MDAsIDgsIDh9LAotIHsgIDQwMCwgMzAwLCA4LCA4fSwKLSB7ICA1MTIsIDM4NCwgOCwgOH0sCi0geyAgNjQwLCA0MDAsIDgsMTZ9LAotIHsgIDY0MCwgNDgwLCA4LDE2fSwKLSB7ICA4MDAsIDYwMCwgOCwxNn0sCi0geyAxMDI0LCA3NjgsIDgsMTZ9LAotIHsgMTI4MCwxMDI0LCA4LDE2fSwKLSB7IDE2MDAsMTIwMCwgOCwxNn0sCi0geyAxOTIwLDE0NDAsIDgsMTZ9LAotIHsgMjA0OCwxNTM2LCA4LDE2fSwKLSB7ICA3MjAsIDQ4MCwgOCwxNn0sCi0geyAgNzIwLCA1NzYsIDgsMTZ9LAotIHsgMTI4MCwgOTYwLCA4LDE2fSwKLSB7ICA4MDAsIDQ4MCwgOCwxNn0sCi0geyAxMDI0LCA1NzYsIDgsMTZ9LAotIHsgMTI4MCwgNzIwLCA4LDE2fSwKLSB7ICA4NTYsIDQ4MCwgOCwxNn0sCi0geyAxMjgwLCA3NjgsIDgsMTZ9LAotIHsgMTQwMCwxMDUwLCA4LDE2fSwKLSB7IDExNTIsIDg2NCwgOCwxNn0KK3N0YXRpYyBzdHJ1Y3QgWEdJX1N0UmVzSW5mb1N0cnVjdCBYR0kzMzBfU3RSZXNJbmZvW10gPSB7CisJezY0MCwgNDAwfSwKKwl7NjQwLCAzNTB9LAorCXs3MjAsIDQwMH0sCisJezcyMCwgMzUwfSwKKwl7NjQwLCA0ODB9Cit9OworCitzdGF0aWMgc3RydWN0IFhHSV9Nb2RlUmVzSW5mb1N0cnVjdCBYR0kzMzBfTW9kZVJlc0luZm9bXSA9IHsKKwl7IDMyMCwgIDIwMCwgOCwgIDh9LAorCXsgMzIwLCAgMjQwLCA4LCAgOH0sCisJeyAzMjAsICA0MDAsIDgsICA4fSwKKwl7IDQwMCwgIDMwMCwgOCwgIDh9LAorCXsgNTEyLCAgMzg0LCA4LCAgOH0sCisJeyA2NDAsICA0MDAsIDgsIDE2fSwKKwl7IDY0MCwgIDQ4MCwgOCwgMTZ9LAorCXsgODAwLCAgNjAwLCA4LCAxNn0sCisJezEwMjQsICA3NjgsIDgsIDE2fSwKKwl7MTI4MCwgMTAyNCwgOCwgMTZ9LAorCXsxNjAwLCAxMjAwLCA4LCAxNn0sCisJezE5MjAsIDE0NDAsIDgsIDE2fSwKKwl7MjA0OCwgMTUzNiwgOCwgMTZ9LAorCXsgNzIwLCAgNDgwLCA4LCAxNn0sCisJeyA3MjAsICA1NzYsIDgsIDE2fSwKKwl7MTI4MCwgIDk2MCwgOCwgMTZ9LAorCXsgODAwLCAgNDgwLCA4LCAxNn0sCisJezEwMjQsICA1NzYsIDgsIDE2fSwKKwl7MTI4MCwgIDcyMCwgOCwgMTZ9LAorCXsgODU2LCAgNDgwLCA4LCAxNn0sCisJezEyODAsICA3NjgsIDgsIDE2fSwKKwl7MTQwMCwgMTA1MCwgOCwgMTZ9LAorCXsxMTUyLCAgODY0LCA4LCAxNn0KIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIFhHSTMzMF9PdXRwdXRTZWxlY3QgPSAweDQwOwpAQCAtMzQ0MSwyMiArMzU5MywyMiBAQAogCiAjaWYgMAogc3RhdGljIHVuc2lnbmVkIGNoYXIgWEdJMzMwTmV3X1NSMTVbOF1bOF0gPSB7Ci17MHgwLDB4NCwweDYwLDB4NjB9LAotezB4ZiwweGYsMHhmLDB4Zn0sCi17MHhiYSwweGJhLDB4YmEsMHhiYX0sCi17MHhhOSwweGE5LDB4YWMsMHhhY30sCi17MHhhMCwweGEwLDB4YTAsMHhhOH0sCi17MHgwLDB4MCwweDIsMHgyfSwKLXsweDMwLDB4MzAsMHg0MCwweDQwfSwKLXsweDAsMHhhNSwweGZiLDB4ZjZ9CisJeyAweDAsICAweDQsIDB4NjAsIDB4NjB9LAorCXsgMHhmLCAgMHhmLCAgMHhmLCAgMHhmfSwKKwl7MHhiYSwgMHhiYSwgMHhiYSwgMHhiYX0sCisJezB4YTksIDB4YTksIDB4YWMsIDB4YWN9LAorCXsweGEwLCAweGEwLCAweGEwLCAweGE4fSwKKwl7IDB4MCwgIDB4MCwgIDB4MiwgIDB4Mn0sCisJezB4MzAsIDB4MzAsIDB4NDAsIDB4NDB9LAorCXsgMHgwLCAweGE1LCAweGZiLCAweGY2fQogfTsKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgWEdJMzMwTmV3X0NSNDBbNV1bOF0gPSB7Ci17MHg3NywweDc3LDB4NDQsMHg0NH0sCi17MHg3NywweDc3LDB4NDQsMHg0NH0sCi17MHgwLDB4MCwweDAsMHgwfSwKLXsweDViLDB4NWIsMHhhYiwweGFifSwKLXsweDAsMHgwLDB4ZjAsMHhmOH0KKwl7MHg3NywgMHg3NywgMHg0NCwgMHg0NH0sCisJezB4NzcsIDB4NzcsIDB4NDQsIDB4NDR9LAorCXsgMHgwLCAgMHgwLCAgMHgwLCAgMHgwfSwKKwl7MHg1YiwgMHg1YiwgMHhhYiwgMHhhYn0sCisJeyAweDAsICAweDAsIDB4ZjAsIDB4Zjh9CiB9OwogI2VuZGlmCiAKQEAgLTM1MDksNyArMzY2MSw5IEBACiBzdGF0aWMgdW5zaWduZWQgY2hhciBYRzI3X0NSOTcgPSAweEMxIDsKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIFhHMjdfU1IzNiA9IDB4MzAgOwogc3RhdGljIHVuc2lnbmVkIGNoYXIgWEcyN19DUjhGID0gMHgwQyA7Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBYRzI3X0NSRDBbXSA9IHswLCAwLCAwLCAwLCAwLCAwLCAwLCAweDgyLCAweDAwLCAweDY2LCAweDAxLCAweDAwfTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIFhHMjdfQ1JEMFtdID0geworCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDB4ODIsIDB4MDAsIDB4NjYsIDB4MDEsIDB4MDAKK307CiBzdGF0aWMgdW5zaWduZWQgY2hhciBYRzI3X0NSREVbXSA9IHswLCAwfTsKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIFhHMjdfU1I0MCA9IDB4MDQgOwogc3RhdGljIHVuc2lnbmVkIGNoYXIgWEcyN19TUjQxID0gMHgwMCA7CkBAIC0zNTIyLDg3MSArMzY3Niw2NjAgQEAKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgWEdJMzMwX0NIVFZWQ0xLT1BBTFtdID0gezB4MDB9OwogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBYR0k3MDA3X0NIVFZWQ0xLVU5UU0NbXSA9IHtDSDcwMDdUVlZDTEszMF8yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENINzAwN1RWVkNMSzMwXzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0g3MDA3VFZWQ0xLMzBfMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSDcwMDdUVlZDTEszMF8yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENINzAwN1RWVkNMSzI4XzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0g3MDA3VFZWQ0xLNDdfOAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgWEdJNzAwN19DSFRWVkNMS09OVFNDW10gPSB7Q0g3MDA3VFZWQ0xLMjZfNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSDcwMDdUVlZDTEsyNl80LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENINzAwN1RWVkNMSzI2XzQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0g3MDA3VFZWQ0xLMjZfNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSDcwMDdUVlZDTEsyNF82LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENINzAwN1RWVkNMSzQzXzYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIFhHSTcwMDdfQ0hUVlZDTEtVUEFMW10gPSB7Q0g3MDA3VFZWQ0xLMzFfNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENINzAwN1RWVkNMSzMxXzUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSDcwMDdUVlZDTEszMV81LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0g3MDA3VFZWQ0xLMzFfNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENINzAwN1RWVkNMSzI2XzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSDcwMDdUVlZDTEszOQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwotCi1zdGF0aWMgdW5zaWduZWQgY2hhciBYR0k3MDA3X0NIVFZWQ0xLT1BBTFtdID0ge0NINzAwN1RWVkNMSzMxXzUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSDcwMDdUVlZDTEszMV81LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0g3MDA3VFZWQ0xLMzFfNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENINzAwN1RWVkNMSzMxXzUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSDcwMDdUVlZDTEsyNl8yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0g3MDA3VFZWQ0xLMzYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKLQotc3RhdGljIHN0cnVjdCBYR0kzMzBfVkNMS0RhdGFTdHJ1Y3QgWEdJX0NINzAwN1ZDTEtEYXRhW10gPQotewotIHsgMHg2MCwweDM2LDMwfSwgIC8qIDAgMzAuMiBNSFogKi8KLSB7IDB4NDAsMHg0QSwyOH0sICAvKiAxIDI4LjE5IE1IWiAqLwotIHsgMHg5RiwweDQ2LDQ0fSwgIC8qIDIgNDMuNiBNSFogKi8KLSB7IDB4OTcsMHgyQywyNn0sICAvKiAzIDI2LjQgTUhaICovCi0geyAweDQ0LDB4RTQsMjV9LCAgLyogNCAyNC42IE1IWiAqLwotIHsgMHg3RSwweDMyLDQ3fSwgIC8qIDUgNDcuODMyIE1IWiAqLwotIHsgMHg4QSwweDI0LDMxfSwgIC8qIDYgMzEuNSBNSFogKi8KLSB7IDB4OTcsMHgyQywyNn0sICAvKiA3IDI2LjIgTUhaICovCi0geyAweENFLDB4M0MsMzl9LCAgLyogOCAzOSBNSFogICAqLwotIHsgMHg1MiwweDRBLDM2fSwgIC8qIDkgMzYgTUhaICAgKi8KLSB7IDB4RkYsMHgwMCwwIH0gICAvKiBFbmQgbWFyayAgICAgICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBYR0k3MDA3X0NIVFZWQ0xLVU5UU0NbXSA9IHsKKwlDSDcwMDdUVlZDTEszMF8yLAorCUNINzAwN1RWVkNMSzMwXzIsCisJQ0g3MDA3VFZWQ0xLMzBfMiwKKwlDSDcwMDdUVlZDTEszMF8yLAorCUNINzAwN1RWVkNMSzI4XzEsCisJQ0g3MDA3VFZWQ0xLNDdfOAogfTsKIAotc3RhdGljIHN0cnVjdCBYR0kzMzBfVkNMS0RhdGFTdHJ1Y3QgWEdJX1ZDTEtEYXRhW10gPQotewotICAgICAgICAgICAgICAgCS8qIFNSMkIsU1IyQyxTUjJEICovCi0gCQl7ICAgICAgMHgxQiwweEUxLDI1ICAgICAgICAgICAgICAgfSwvKiAwMCAoMjUuMTc1TUh6KSAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgWEdJNzAwN19DSFRWVkNMS09OVFNDW10gPSB7CisJQ0g3MDA3VFZWQ0xLMjZfNCwKKwlDSDcwMDdUVlZDTEsyNl80LAorCUNINzAwN1RWVkNMSzI2XzQsCisJQ0g3MDA3VFZWQ0xLMjZfNCwKKwlDSDcwMDdUVlZDTEsyNF82LAorCUNINzAwN1RWVkNMSzQzXzYKK307CiAKLQkJeyAgICAgIDB4NEUsMHhFNCwyOCAgICAgICAgICAgICAgIH0sLyogMDEgKDI4LjMyMk1IeikgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIFhHSTcwMDdfQ0hUVlZDTEtVUEFMW10gPSB7CisJQ0g3MDA3VFZWQ0xLMzFfNSwKKwlDSDcwMDdUVlZDTEszMV81LAorCUNINzAwN1RWVkNMSzMxXzUsCisJQ0g3MDA3VFZWQ0xLMzFfNSwKKwlDSDcwMDdUVlZDTEsyNl8yLAorCUNINzAwN1RWVkNMSzM5Cit9OwogCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4NTcsMHhFNCwzMSAgICAgICAgICAgICAgIH0sLyogMDIgKDMxLjUwME1IeikgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIFhHSTcwMDdfQ0hUVlZDTEtPUEFMW10gPSB7CisJQ0g3MDA3VFZWQ0xLMzFfNSwKKwlDSDcwMDdUVlZDTEszMV81LAorCUNINzAwN1RWVkNMSzMxXzUsCisJQ0g3MDA3VFZWQ0xLMzFfNSwKKwlDSDcwMDdUVlZDTEsyNl8yLAorCUNINzAwN1RWVkNMSzM2Cit9OwogCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4QzMsMHhDOCwzNiAgICAgICAgICAgICAgIH0sLyogMDMgKDM2LjAwME1IeikgKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX1ZDTEtEYXRhU3RydWN0IFhHSV9DSDcwMDdWQ0xLRGF0YVtdID0geworCXsweDYwLCAweDM2LCAzMH0sICAvKiAwIDMwLjIgTUhaICovCisJezB4NDAsIDB4NEEsIDI4fSwgIC8qIDEgMjguMTkgTUhaICovCisJezB4OUYsIDB4NDYsIDQ0fSwgIC8qIDIgNDMuNiBNSFogKi8KKwl7MHg5NywgMHgyQywgMjZ9LCAgLyogMyAyNi40IE1IWiAqLworCXsweDQ0LCAweEU0LCAyNX0sICAvKiA0IDI0LjYgTUhaICovCisJezB4N0UsIDB4MzIsIDQ3fSwgIC8qIDUgNDcuODMyIE1IWiAqLworCXsweDhBLCAweDI0LCAzMX0sICAvKiA2IDMxLjUgTUhaICovCisJezB4OTcsIDB4MkMsIDI2fSwgIC8qIDcgMjYuMiBNSFogKi8KKwl7MHhDRSwgMHgzQywgMzl9LCAgLyogOCAzOSBNSFogICAqLworCXsweDUyLCAweDRBLCAzNn0sICAvKiA5IDM2IE1IWiAgICovCisJezB4RkYsIDB4MDAsICAwfSAgIC8qIEVuZCBtYXJrICAgICAgKi8KK307CiAKLSAgICAgICAgICAgICAgICB7ICAgICAgMHg0MiwweEUyLDQwICAgICAgICAgICAgICAgfSwvKiAwNCAoNDAuMDAwTUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4RkUsMHhDRCw0MyAgICAgICAgICAgICAgIH0sLyogMDUgKDQzLjE2M01IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDVELDB4QzQsNDQgICAgICAgICAgICAgICB9LC8qIDA2ICg0NC45MDBNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHg1MiwweEUyLDQ5ICAgICAgICAgICAgICAgfSwvKiAwNyAoNDkuNTAwTUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4NTMsMHhFMiw1MCAgICAgICAgICAgICAgIH0sLyogMDggKDUwLjAwME1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDc0LDB4NjcsNTIgICAgICAgICAgICAgICB9LC8qIDA5ICg1Mi40MDZNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHg2RCwweDY2LDU2ICAgICAgICAgICAgICAgfSwvKiAwQSAoNTYuMjUwTUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4NkMsMHhDMyw2NSAgICAgICAgICAgICAgIH0sLyogMEIgKDY1LjAwME1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDQ2LDB4NDQsNjcgICAgICAgICAgICAgICB9LC8qIDBDICg2Ny43NjVNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHhCMSwweDQ2LDY4ICAgICAgICAgICAgICAgfSwvKiAwRCAoNjguMTc5TUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4RDMsMHg0QSw3MiAgICAgICAgICAgICAgIH0sLyogMEUgKDcyLjg1Mk1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDI5LDB4NjEsNzUgICAgICAgICAgICAgIH0sLyogMEYgKDc1LjAwME1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDZFLDB4NDYsNzYgICAgICAgICAgICAgICB9LC8qIDEwICg3NS44MDBNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHgyQiwweDYxLDc4ICAgICAgICAgICAgICAgfSwvKiAxMSAoNzguNzUwTUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4MzEsMHg0Miw3OSAgICAgICAgICAgICAgIH0sLyogMTIgKDc5LjQxMU1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweEFCLDB4NDQsODMgICAgICAgICAgICAgICB9LC8qIDEzICg4My45NTBNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHg0NiwweDI1LDg0ICAgICAgICAgICAgICAgfSwvKiAxNCAoODQuODAwTUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4NzgsMHgyOSw4NiAgICAgICAgICAgICAgIH0sLyogMTUgKDg2LjYwME1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDYyLDB4NDQsOTQgICAgICAgICAgICAgICB9LC8qIDE2ICg5NC41MDBNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHgyQiwweDQxLDEwNCAgICAgICAgICAgICAgIH0sLyogMTcgKDEwNC45OThNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHgzQSwweDIzLDEwNSAgICAgICAgICAgICAgIH0sLyogMTggKDEwNS44ODJNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHg3MCwweDQ0LDEwOCAgICAgICAgICAgICAgIH0sLyogMTkgKDEwNy44NjJNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHgzQywweDIzLDEwOSAgICAgICAgICAgICAgIH0sLyogMUEgKDEwOS4xNzVNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHg1RSwweDQzLDExMyAgICAgICAgICAgICAgfSwvKiAxQiAoMTEzLjMwOU1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweEJDLDB4NDQsMTE2ICAgICAgICAgICAgICB9LC8qIDFDICgxMTYuNDA2TUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4RTAsMHg0NiwxMzIgICAgICAgICAgICAgIH0sLyogMUQgKDEzMi4yNThNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHg1NCwweDQyLDEzNSAgICAgICAgICAgICAgIH0sLyogMUUgKDEzNS41MDBNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHg5QywweDIyLDEzOSAgICAgICAgICAgICAgIH0sLyogMUYgKDEzOS4yNzVNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHg0MSwweDIyLDE1NyAgICAgICAgICAgICAgIH0sLyogMjAgKDE1Ny41MDBNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHg3MCwweDI0LDE2MiAgICAgICAgICAgICAgIH0sLyogMjEgKDE2MS43OTNNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHgzMCwweDIxLDE3NSAgICAgICAgICAgICAgIH0sLyogMjIgKDE3NS4wMDBNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHg0RSwweDIyLDE4OSAgICAgICAgICAgICAgfSwvKiAyMyAoMTg4LjUyME1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweERFLDB4MjYsMTk0ICAgICAgICAgICAgICB9LC8qIDI0ICgxOTQuNDAwTUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4NjIsMHgwNiwyMDIgICAgICAgICAgICAgICB9LC8qIDI1ICgyMDIuNTAwTUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4M0YsMHgwMywyMjkgICAgICAgICAgICAgICB9LC8qIDI2ICgyMjkuNTAwTUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4QjgsMHgwNiwyMzQgICAgICAgICAgICAgICB9LC8qIDI3ICgyMzMuMTc4TUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4MzQsMHgwMiwyNTMgICAgICAgICAgICAgICB9LC8qIDI4ICgyNTIuNjk5TUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4NTgsMHgwNCwyNTUgICAgICAgICAgICAgICB9LC8qIDI5ICgyNTQuODE3TUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4MjQsMHgwMSwyNjUgICAgICAgICAgICAgIH0sLyogMkEgKDI2NS43MjhNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHg5QiwweDAyLDI2NyAgICAgICAgICAgICAgIH0sLyogMkIgKDI2Ni45NTJNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHg3MCwweDA1LDI3MCAgICAgICAgICAgICAgIH0sLyogMkMgKDI2OS42NTU2N01IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDI1LDB4MDEsMjcyICAgICAgICAgICAgICAgfSwvKiAyRCAoMjcyLjA0MTk5TUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4OUMsMHgwMiwyNzcgICAgICAgICAgICAgICB9LC8qIDJFICgyNzcuMDE1TUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4MjcsMHgwMSwyODYgICAgICAgICAgICAgICB9LC8qIDJGICgyODYuMzU5OTg1TUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4QjMsMHgwNCwyOTEgICAgICAgICAgICAgICB9LC8qIDMwICgyOTEuMTMyNjZNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHhCQywweDA1LDI5MiAgICAgICAgICAgICAgIH0sLyogMzEgKDI5MS43NjZNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHhGNiwweDBBLDMxMCAgICAgICAgICAgICAgIH0sLyogMzIgKDMwOS43ODk0NTlNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHg5NSwweDAxLDMxNSAgICAgICAgICAgICAgIH0sLyogMzMgKDMxNS4xOTVNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHhGMCwweDA5LDMyNCAgICAgICAgICAgICAgIH0sLyogMzQgKDMyMy41ODY3OTJNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHhGRSwweDBBLDMzMSAgICAgICAgICAgICAgIH0sLyogMzUgKDMzMC42MTU2MzFNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHhGMywweDA5LDMzMiAgICAgICAgICAgICAgfSwvKiAzNiAoMzMyLjE3NzYxMk1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDVFLDB4MDMsMzQwICAgICAgICAgICAgICB9LC8qIDM3ICgzNDAuNDc3TUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4RTgsMHgwNywzNzYgICAgICAgICAgICAgIH0sLyogMzggKDM3NS44NDc1MDRNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHhERSwgMHgwNiwzODkgICAgICAgICAgICAgfSwvKiAzOSAoMzg4LjYzMTQzOU1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDUyLDB4MkEsNTQgICAgICAgICAgICAgICB9LC8qIDNBICg1NC4wMDBNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHg1MiwweDZBLDI3ICAgICAgICAgICAgICB9LC8qIDNCICgyNy4wMDBNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHg2MiwweDI0LDcwICAgICAgICAgICAgICAgfSwvKiAzQyAoNzAuODc0OTkxTUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4NjIsMHg2NCw3MCAgICAgICAgICAgICAgIH0sLyogM0QgKDcwLjEwNDg5MTJNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHhBOCwweDRDLDMwICAgICAgICAgICAgICAgfSwvKiAzRSAoMzAuMTA0ODkxMk1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDIwLDB4MjYsMzMgICAgICAgICAgICAgICB9LC8qIDNGICgzMy43NDk5OTU3TUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4MzEsMHhjMiwzOSAgICAgICAgICAgICAgIH0sLyogNDAgKDM5Ljc3TUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4MTEsMHgyMSwzMCAgICAgICAgICAgICAgIH0sLyogNDEgKDMwTUh6KSB9Ly8gTlRTQyAxMDI0WDc2OCAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4MkUsMHg0OCwyNSAgICAgICAgICAgICAgIH0sLyogNDIgKDI1LjE3NU1IeikgfS8vIFNjYWxlTENEICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHgyNCwweDQ2LDI1ICAgICAgICAgICAgICAgfSwvKiA0MyAoMjUuMTc1TUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4MjYsMHg2NCwyOCAgICAgICAgICAgICAgIH0sLyogNDQgKDI4LjMyMk1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDM3LDB4NjQsNDAgICAgICAgICAgICAgICB9LC8qIDQ1ICg0MC4wMDBNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHhBMSwweDQyLDEwOCAgICAgICAgICAgICAgIH0sLyogNDYgKDk1LjAwME1IeikgfS8vIFFWR0EgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDM3LDB4NjEsMTAwICAgICAgICAgICAgICAgfSwvKiA0NyAoMTAwLjAwTUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4NzgsMHgyNywxMDggICAgICAgICAgICAgICB9LC8qIDQ4ICgxMDguMjAwTUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4QkYsMHhDOCwzNSAgICAgICAgICAgICAgIH0sLyogNDkgKDM1LjJNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHg2NiwweDQzLDEyMyAgICAgICAgICAgICAgIH0sLyogNEEgKDEyMi42MU1oeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDJDLDB4NjEsODAgICAgICAgICAgICAgICB9LC8qIDRCICg4MC4zNTBNaHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHgzQiwweDYxLDEwOCAgICAgICAgICAgICAgIH0sLyogNEMgKDEwNy4zODVNaHopICovCi0KLQotLyogICAgICAgICAgICAgICAgeyAgICAgIDB4NjAsMHgzNiwzMCAgICAgICAgICAgICAgIH0sLy8gNEQgKDMwLjIwME1IeikgICB9Ly8gTm8gdXNlCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHg2MCwweDM2LDMwICAgICAgICAgICAgICAgfSwvLyA0RSAoMzAuMjAwTUh6KSAgIH0vLyBObyB1c2UKLQotICAgICAgICAgICAgICAgIHsgICAgICAweDYwLDB4MzYsMzAgICAgICAgICAgICAgICB9LC8vIDRGICgzMC4yMDBNSHopICAgfS8vIE5vIHVzZQotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4NjAsMHgzNiwzMCAgICAgICAgICAgICAgIH0sLy8gNTAgKDMwLjIwME1IeikgICB9Ly8gQ0hUVgotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4NDAsMHg0QSwyOCAgICAgICAgICAgICAgIH0sLy8gNTEgKDI4LjE5ME1IeikKLQotICAgICAgICAgICAgICAgIHsgICAgICAweDlGLDB4NDYsNDQgICAgICAgICAgICAgICB9LC8vIDUyICg0My42MDBNSHopCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHg5NywweDJDLDI2ICAgICAgICAgICAgICAgfSwvLyA1MyAoMjYuNDAwTUh6KQotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4NDQsMHhFNCwyNSAgICAgICAgICAgICAgIH0sLy8gNTQgKDI0LjYwME1IeikKLQotICAgICAgICAgICAgICAgIHsgICAgICAweDdFLDB4MzIsNDcgICAgICAgICAgICAgICB9LC8vIDU1ICg0Ny44MzJNSHopCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHg4QSwweDI0LDMxICAgICAgICAgICAgICAgfSwvLyA1NiAoMzEuNTAwTUh6KQotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4OTcsMHgyQywyNiAgICAgICAgICAgICAgIH0sLy8gNTcgKDI2LjIwME1IeikKLQotICAgICAgICAgICAgICAgIHsgICAgICAweENFLDB4M0MsMzkgICAgICAgICAgICAgICB9LC8vIDU4ICgzOS4wMDBNSHopCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHg1MiwweDRBLDM2ICAgICAgICAgICAgICAgfSwvLyA1OSAoMzYuMDAwTUh6KQotCi0qLwotCQl7ICAgICAgMHg2OSwweDYxLDE5MQkJICB9LCAvKiA0RCAoMTkwLjk2TUh6ICkgKi8KLQkJeyAgICAgIDB4NEYsMHgyMiwxOTIJCSAgfSwgLyogNEUgKDE5Mi4wNjlNSHopICovCi0JCXsgICAgICAweDI4LDB4MjYsMzIyCQkgIH0sIC8qIDRGICgzMjIuMjczTUh6KSAqLwotCQl7ICAgICAgMHg1QywweDZCLDI3CQkgIH0sIC8qIDUwICgyNy43NEhNeikgKi8KLQkJeyAgICAgIDB4NTcsMHgyNCwxMjYJCSAgfSwgLyogNTEgKDEyNS45OTlNSHopICovCi0JCXsgICAgICAweDVDLDB4NDIsMTQ4CQkgIH0sIC8qIDUyICgxNDguNU1IeikgKi8KLQkJeyAgICAgIDB4NDIsMHg2MSwxMjAJCSAgfSwgLyogNTMgKDEyMC44MzlNSHopICovCi0JCXsgICAgICAweDYyLDB4NjEsMTc4CQkgIH0sIC8qIDU0ICgxNzguOTkyTUh6KSAqLwotCQl7ICAgICAgMHg1OSwweDIyLDIxNwkJICB9LCAvKiA1NSAoMjE3LjMyNU1IeikgKi8KLQkJeyAgICAgIDB4MjksMHgwMSwzMDAJCSAgfSwgLyogNTYgKDI5OS41MDVNaHopICovCi0JCXsgICAgICAweDUyLDB4NjMsNzQJCSAgfSwgLyogNTcgKDc0LjI1TUh6KSAqLwotCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHhGRiwweDAwLDAgICAgICAgICAgICAgICAgfS8qIEVuZCBtYXJrICovCi0gfSAgOwotCi1zdGF0aWMgc3RydWN0IFhHSTMzMF9WQ0xLRGF0YVN0cnVjdCBYR0lfVkJWQ0xLRGF0YVtdID0KLXsKLSAgICAgICAgICAgICAgICB7ICAgICAgMHgxQiwweEUxLDI1ICAgICAgICAgICAgICAgfSwvKiAwMCAoMjUuMTc1TUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4NEUsMHhFNCwyOCAgICAgICAgICAgICAgIH0sLyogMDEgKDI4LjMyMk1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDU3LDB4RTQsMzEgICAgICAgICAgICAgICB9LC8qIDAyICgzMS41MDBNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHhDMywweEM4LDM2ICAgICAgICAgICAgICAgfSwvKiAwMyAoMzYuMDAwTUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4NDIsMHg0Nyw0MCAgICAgICAgICAgICAgIH0sLyogMDQgKDQwLjAwME1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweEZFLDB4Q0QsNDMgICAgICAgICAgICAgICB9LC8qIDA1ICg0My4xNjNNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHg1RCwweEM0LDQ0ICAgICAgICAgICAgICAgfSwvKiAwNiAoNDQuOTAwTUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4NTIsMHg0Nyw0OSAgICAgICAgICAgICAgIH0sLyogMDcgKDQ5LjUwME1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDUzLDB4NDcsNTAgICAgICAgICAgICAgICB9LC8qIDA4ICg1MC4wMDBNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHg3NCwweDY3LDUyICAgICAgICAgICAgICAgfSwvKiAwOSAoNTIuNDA2TUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4NkQsMHg2Niw1NiAgICAgICAgICAgICAgIH0sLyogMEEgKDU2LjI1ME1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDM1LDB4NjIsNjUgICAgICAgICAgICAgICB9LC8qIDBCICg2NS4wMDBNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHg0NiwweDQ0LDY3ICAgICAgICAgICAgICAgfSwvKiAwQyAoNjcuNzY1TUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4QjEsMHg0Niw2OCAgICAgICAgICAgICAgIH0sLyogMEQgKDY4LjE3OU1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweEQzLDB4NEEsNzIgICAgICAgICAgICAgICB9LC8qIDBFICg3Mi44NTJNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHgyOSwweDYxLDc1ICAgICAgICAgICAgICAgfSwvKiAwRiAoNzUuMDAwTUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4NkQsMHg0Niw3NSAgICAgICAgICAgICAgIH0sLyogMTAgKDc1LjgwME1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDQxLDB4NDMsNzggICAgICAgICAgICAgICB9LC8qIDExICg3OC43NTBNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHgzMSwweDQyLDc5ICAgICAgICAgICAgICAgfSwvKiAxMiAoNzkuNDExTUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4QUIsMHg0NCw4MyAgICAgICAgICAgICAgIH0sLyogMTMgKDgzLjk1ME1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDQ2LDB4MjUsODQgICAgICAgICAgICAgICB9LC8qIDE0ICg4NC44MDBNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHg3OCwweDI5LDg2ICAgICAgICAgICAgICAgfSwvKiAxNSAoODYuNjAwTUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4NjIsMHg0NCw5NCAgICAgICAgICAgICAgIH0sLyogMTYgKDk0LjUwME1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDJCLDB4MjIsMTA0ICAgICAgICAgICAgICAgfSwvKiAxNyAoMTA0Ljk5OE1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDQ5LDB4MjQsMTA1ICAgICAgICAgICAgICAgfSwvKiAxOCAoMTA1Ljg4Mk1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweEY4LDB4MkYsMTA4ICAgICAgICAgICAgICAgfSwvKiAxOSAoMTA4LjI3OU1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDNDLDB4MjMsMTA5ICAgICAgICAgICAgICAgfSwvKiAxQSAoMTA5LjE3NU1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDVFLDB4NDMsMTEzICAgICAgICAgICAgICAgfSwvKiAxQiAoMTEzLjMwOU1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweEJDLDB4NDQsMTE2ICAgICAgICAgICAgICAgfSwvKiAxQyAoMTE2LjQwNk1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweEUwLDB4NDYsMTMyICAgICAgICAgICAgICAgfSwvKiAxRCAoMTMyLjI1OE1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweEQ0LDB4MjgsMTM1ICAgICAgICAgICAgICAgfSwvKiAxRSAoMTM1LjIyME1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweEVBLDB4MkEsMTM5ICAgICAgICAgICAgICAgfSwvKiAxRiAoMTM5LjI3NU1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDQxLDB4MjIsMTU3ICAgICAgICAgICAgICAgfSwvKiAyMCAoMTU3LjUwME1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDcwLDB4MjQsMTYyICAgICAgICAgICAgICAgfSwvKiAyMSAoMTYxLjc5M01IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDMwLDB4MjEsMTc1ICAgICAgICAgICAgICAgfSwvKiAyMiAoMTc1LjAwME1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDRFLDB4MjIsMTg5ICAgICAgICAgICAgICAgfSwvKiAyMyAoMTg4LjUyME1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweERFLDB4MjYsMTk0ICAgICAgICAgICAgICAgfSwvKiAyNCAoMTk0LjQwME1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDcwLDB4MDcsMjAyICAgICAgICAgICAgICAgfSwvKiAyNSAoMjAyLjUwME1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDNGLDB4MDMsMjI5ICAgICAgICAgICAgICAgfSwvKiAyNiAoMjI5LjUwME1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweEI4LDB4MDYsMjM0ICAgICAgICAgICAgICAgfSwvKiAyNyAoMjMzLjE3OE1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDM0LDB4MDIsMjUzICAgICAgICAgICAgICAgfSwvKiAyOCAoMjUyLjY5OTk5NyBNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHg1OCwweDA0LDI1NSAgICAgICAgICAgICAgIH0sLyogMjkgKDI1NC44MTdNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHgyNCwweDAxLDI2NSAgICAgICAgICAgICAgIH0sLyogMkEgKDI2NS43MjhNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHg5QiwweDAyLDI2NyAgICAgICAgICAgICAgIH0sLyogMkIgKDI2Ni45NTJNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHg3MCwweDA1LDI3MCAgICAgICAgICAgICAgIH0sLyogMkMgKDI2OS42NTU2NyBNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHgyNSwweDAxLDI3MiAgICAgICAgICAgICAgIH0sLyogMkQgKDI3Mi4wNDE5OTIgTUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4OUMsMHgwMiwyNzcgICAgICAgICAgICAgICB9LC8qIDJFICgyNzcuMDE1TUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4MjcsMHgwMSwyODYgICAgICAgICAgICAgICB9LC8qIDJGICgyODYuMzU5OTg1IE1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDNDLDB4MDIsMjkxICAgICAgICAgICAgICAgfSwvKiAzMCAoMjkxLjEzMjY2MCBNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHhFRiwweDBBLDI5MiAgICAgICAgICAgICAgIH0sLyogMzEgKDI5MS43NjZNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHhGNiwweDBBLDMxMCAgICAgICAgICAgICAgIH0sLyogMzIgKDMwOS43ODk0NTkgTUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4OTUsMHgwMSwzMTUgICAgICAgICAgICAgICB9LC8qIDMzICgzMTUuMTk1TUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4RjAsMHgwOSwzMjQgICAgICAgICAgICAgICB9LC8qIDM0ICgzMjMuNTg2NzkyIE1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweEZFLDB4MEEsMzMxICAgICAgICAgICAgICAgfSwvKiAzNSAoMzMwLjYxNTYzMSBNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHhGMywweDA5LDMzMiAgICAgICAgICAgICAgIH0sLyogMzYgKDMzMi4xNzc2MTIgTUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4RUEsMHgwOCwzNDAgICAgICAgICAgICAgICB9LC8qIDM3ICgzNDAuNDc3TUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4RTgsMHgwNywzNzYgICAgICAgICAgICAgICB9LC8qIDM4ICgzNzUuODQ3NTA0IE1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweERFLDB4MDYsMzg5ICAgICAgICAgICAgICAgfSwvKiAzOSAoMzg4LjYzMTQzOSBNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHg1MiwweDJBLDU0ICAgICAgICAgICAgICAgIH0sLyogM0EgKDU0LjAwME1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDUyLDB4NkEsMjcgICAgICAgICAgICAgICAgfSwvKiAzQiAoMjcuMDAwTUh6KSAqLwotCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHg2MiwweDI0LDcwICAgICAgICAgICAgICAgIH0sLyogM0MgKDcwLjg3NDk5MU1IeikgKi8KLQotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4NjIsMHg2NCw3MCAgICAgICAgICAgICAgICB9LC8qIDNEICg3MC4xMDQ4OTEyTUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4QTgsMHg0QywzMCAgICAgICAgICAgICAgICB9LC8qIDNFICgzMC4xMDQ4OTEyTUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4MjAsMHgyNiwzMyAgICAgICAgICAgICAgICB9LC8qIDNGICgzMy43NDk5OTU3TUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4MzEsMHhjMiwzOSAgICAgICAgICAgICAgICB9LC8qIDQwICgzOS43N01IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDExLDB4MjEsMzAgICAgICAgICAgICAgICAgfSwvKiA0MSAoMzBNSHopIH0vLyBOVFNDIDEwMjRYNzY4ICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHgyRSwweDQ4LDI1ICAgICAgICAgICAgICAgIH0sLyogNDIgKDI1LjE3NU1IeikgfS8vIFNjYWxlTENEICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHgyNCwweDQ2LDI1ICAgICAgICAgICAgICAgIH0sLyogNDMgKDI1LjE3NU1IeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDI2LDB4NjQsMjggICAgICAgICAgICAgICAgfSwvKiA0NCAoMjguMzIyTUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4MzcsMHg2NCw0MCAgICAgICAgICAgICAgICB9LC8qIDQ1ICg0MC4wMDBNSHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHhBMSwweDQyLDEwOCAgICAgICAgICAgICAgIH0sLyogNDYgKDk1LjAwME1IeikgfS8vIFFWR0EgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDM3LDB4NjEsMTAwICAgICAgICAgICAgICAgfSwvKiA0NyAoMTAwLjAwTUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4NzgsMHgyNywxMDggICAgICAgICAgICAgICB9LC8qIDQ4ICgxMDguMjAwTUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4QkYsMHhDOCwzNSAgICAgICAgICAgICAgICB9LC8qIDQ5ICgzNS4yTUh6KSAqLwotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4NjYsMHg0MywxMjMgICAgICAgICAgICAgICB9LC8qIDRBICgxMjIuNjFNaHopICovCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHgyQywweDYxLDgwICAgICAgICAgICAgICAgIH0sLyogNEIgKDgwLjM1ME1oeikgKi8KLQotICAgICAgICAgICAgICAgIHsgICAgICAweDNCLDB4NjEsMTA4ICAgICAgICAgICAgICAgfSwvKiA0QyAoMTA3LjM4NU1oeikgKi8KLQorc3RhdGljIHN0cnVjdCBYR0kzMzBfVkNMS0RhdGFTdHJ1Y3QgWEdJX1ZDTEtEYXRhW10gPSB7CisJLyogU1IyQixTUjJDLFNSMkQgKi8KKwl7MHgxQiwgMHhFMSwgIDI1fSwgLyogMDAgKDI1LjE3NU1IeikgKi8KKwl7MHg0RSwgMHhFNCwgIDI4fSwgLyogMDEgKDI4LjMyMk1IeikgKi8KKwl7MHg1NywgMHhFNCwgIDMxfSwgLyogMDIgKDMxLjUwME1IeikgKi8KKwl7MHhDMywgMHhDOCwgIDM2fSwgLyogMDMgKDM2LjAwME1IeikgKi8KKwl7MHg0MiwgMHhFMiwgIDQwfSwgLyogMDQgKDQwLjAwME1IeikgKi8KKwl7MHhGRSwgMHhDRCwgIDQzfSwgLyogMDUgKDQzLjE2M01IeikgKi8KKwl7MHg1RCwgMHhDNCwgIDQ0fSwgLyogMDYgKDQ0LjkwME1IeikgKi8KKwl7MHg1MiwgMHhFMiwgIDQ5fSwgLyogMDcgKDQ5LjUwME1IeikgKi8KKwl7MHg1MywgMHhFMiwgIDUwfSwgLyogMDggKDUwLjAwME1IeikgKi8KKwl7MHg3NCwgMHg2NywgIDUyfSwgLyogMDkgKDUyLjQwNk1IeikgKi8KKwl7MHg2RCwgMHg2NiwgIDU2fSwgLyogMEEgKDU2LjI1ME1IeikgKi8KKwl7MHg2QywgMHhDMywgIDY1fSwgLyogMEIgKDY1LjAwME1IeikgKi8KKwl7MHg0NiwgMHg0NCwgIDY3fSwgLyogMEMgKDY3Ljc2NU1IeikgKi8KKwl7MHhCMSwgMHg0NiwgIDY4fSwgLyogMEQgKDY4LjE3OU1IeikgKi8KKwl7MHhEMywgMHg0QSwgIDcyfSwgLyogMEUgKDcyLjg1Mk1IeikgKi8KKwl7MHgyOSwgMHg2MSwgIDc1fSwgLyogMEYgKDc1LjAwME1IeikgKi8KKwl7MHg2RSwgMHg0NiwgIDc2fSwgLyogMTAgKDc1LjgwME1IeikgKi8KKwl7MHgyQiwgMHg2MSwgIDc4fSwgLyogMTEgKDc4Ljc1ME1IeikgKi8KKwl7MHgzMSwgMHg0MiwgIDc5fSwgLyogMTIgKDc5LjQxMU1IeikgKi8KKwl7MHhBQiwgMHg0NCwgIDgzfSwgLyogMTMgKDgzLjk1ME1IeikgKi8KKwl7MHg0NiwgMHgyNSwgIDg0fSwgLyogMTQgKDg0LjgwME1IeikgKi8KKwl7MHg3OCwgMHgyOSwgIDg2fSwgLyogMTUgKDg2LjYwME1IeikgKi8KKwl7MHg2MiwgMHg0NCwgIDk0fSwgLyogMTYgKDk0LjUwME1IeikgKi8KKwl7MHgyQiwgMHg0MSwgMTA0fSwgLyogMTcgKDEwNC45OThNSHopICovCisJezB4M0EsIDB4MjMsIDEwNX0sIC8qIDE4ICgxMDUuODgyTUh6KSAqLworCXsweDcwLCAweDQ0LCAxMDh9LCAvKiAxOSAoMTA3Ljg2Mk1IeikgKi8KKwl7MHgzQywgMHgyMywgMTA5fSwgLyogMUEgKDEwOS4xNzVNSHopICovCisJezB4NUUsIDB4NDMsIDExM30sIC8qIDFCICgxMTMuMzA5TUh6KSAqLworCXsweEJDLCAweDQ0LCAxMTZ9LCAvKiAxQyAoMTE2LjQwNk1IeikgKi8KKwl7MHhFMCwgMHg0NiwgMTMyfSwgLyogMUQgKDEzMi4yNThNSHopICovCisJezB4NTQsIDB4NDIsIDEzNX0sIC8qIDFFICgxMzUuNTAwTUh6KSAqLworCXsweDlDLCAweDIyLCAxMzl9LCAvKiAxRiAoMTM5LjI3NU1IeikgKi8KKwl7MHg0MSwgMHgyMiwgMTU3fSwgLyogMjAgKDE1Ny41MDBNSHopICovCisJezB4NzAsIDB4MjQsIDE2Mn0sIC8qIDIxICgxNjEuNzkzTUh6KSAqLworCXsweDMwLCAweDIxLCAxNzV9LCAvKiAyMiAoMTc1LjAwME1IeikgKi8KKwl7MHg0RSwgMHgyMiwgMTg5fSwgLyogMjMgKDE4OC41MjBNSHopICovCisJezB4REUsIDB4MjYsIDE5NH0sIC8qIDI0ICgxOTQuNDAwTUh6KSAqLworCXsweDYyLCAweDA2LCAyMDJ9LCAvKiAyNSAoMjAyLjUwME1IeikgKi8KKwl7MHgzRiwgMHgwMywgMjI5fSwgLyogMjYgKDIyOS41MDBNSHopICovCisJezB4QjgsIDB4MDYsIDIzNH0sIC8qIDI3ICgyMzMuMTc4TUh6KSAqLworCXsweDM0LCAweDAyLCAyNTN9LCAvKiAyOCAoMjUyLjY5OU1IeikgKi8KKwl7MHg1OCwgMHgwNCwgMjU1fSwgLyogMjkgKDI1NC44MTdNSHopICovCisJezB4MjQsIDB4MDEsIDI2NX0sIC8qIDJBICgyNjUuNzI4TUh6KSAqLworCXsweDlCLCAweDAyLCAyNjd9LCAvKiAyQiAoMjY2Ljk1Mk1IeikgKi8KKwl7MHg3MCwgMHgwNSwgMjcwfSwgLyogMkMgKDI2OS42NTU2N01IeikgKi8KKwl7MHgyNSwgMHgwMSwgMjcyfSwgLyogMkQgKDI3Mi4wNDE5OU1IeikgKi8KKwl7MHg5QywgMHgwMiwgMjc3fSwgLyogMkUgKDI3Ny4wMTVNSHopICovCisJezB4MjcsIDB4MDEsIDI4Nn0sIC8qIDJGICgyODYuMzU5OTg1TUh6KSAqLworCXsweEIzLCAweDA0LCAyOTF9LCAvKiAzMCAoMjkxLjEzMjY2TUh6KSAqLworCXsweEJDLCAweDA1LCAyOTJ9LCAvKiAzMSAoMjkxLjc2Nk1IeikgKi8KKwl7MHhGNiwgMHgwQSwgMzEwfSwgLyogMzIgKDMwOS43ODk0NTlNSHopICovCisJezB4OTUsIDB4MDEsIDMxNX0sIC8qIDMzICgzMTUuMTk1TUh6KSAqLworCXsweEYwLCAweDA5LCAzMjR9LCAvKiAzNCAoMzIzLjU4Njc5Mk1IeikgKi8KKwl7MHhGRSwgMHgwQSwgMzMxfSwgLyogMzUgKDMzMC42MTU2MzFNSHopICovCisJezB4RjMsIDB4MDksIDMzMn0sIC8qIDM2ICgzMzIuMTc3NjEyTUh6KSAqLworCXsweDVFLCAweDAzLCAzNDB9LCAvKiAzNyAoMzQwLjQ3N01IeikgKi8KKwl7MHhFOCwgMHgwNywgMzc2fSwgLyogMzggKDM3NS44NDc1MDRNSHopICovCisJezB4REUsIDB4MDYsIDM4OX0sIC8qIDM5ICgzODguNjMxNDM5TUh6KSAqLworCXsweDUyLCAweDJBLCAgNTR9LCAvKiAzQSAoNTQuMDAwTUh6KSAqLworCXsweDUyLCAweDZBLCAgMjd9LCAvKiAzQiAoMjcuMDAwTUh6KSAqLworCXsweDYyLCAweDI0LCAgNzB9LCAvKiAzQyAoNzAuODc0OTkxTUh6KSAqLworCXsweDYyLCAweDY0LCAgNzB9LCAvKiAzRCAoNzAuMTA0ODkxMk1IeikgKi8KKwl7MHhBOCwgMHg0QywgIDMwfSwgLyogM0UgKDMwLjEwNDg5MTJNSHopICovCisJezB4MjAsIDB4MjYsICAzM30sIC8qIDNGICgzMy43NDk5OTU3TUh6KSAqLworCXsweDMxLCAweGMyLCAgMzl9LCAvKiA0MCAoMzkuNzdNSHopICovCisJezB4MTEsIDB4MjEsICAzMH0sIC8qIDQxICgzME1IeikgfS8vIE5UU0MgMTAyNFg3NjggKi8KKwl7MHgyRSwgMHg0OCwgIDI1fSwgLyogNDIgKDI1LjE3NU1IeikgfS8vIFNjYWxlTENEICovCisJezB4MjQsIDB4NDYsICAyNX0sIC8qIDQzICgyNS4xNzVNSHopICovCisJezB4MjYsIDB4NjQsICAyOH0sIC8qIDQ0ICgyOC4zMjJNSHopICovCisJezB4MzcsIDB4NjQsICA0MH0sIC8qIDQ1ICg0MC4wMDBNSHopICovCisJezB4QTEsIDB4NDIsIDEwOH0sIC8qIDQ2ICg5NS4wMDBNSHopIH0vLyBRVkdBICovCisJezB4MzcsIDB4NjEsIDEwMH0sIC8qIDQ3ICgxMDAuMDBNSHopICovCisJezB4NzgsIDB4MjcsIDEwOH0sIC8qIDQ4ICgxMDguMjAwTUh6KSAqLworCXsweEJGLCAweEM4LCAgMzV9LCAvKiA0OSAoMzUuMk1IeikgKi8KKwl7MHg2NiwgMHg0MywgMTIzfSwgLyogNEEgKDEyMi42MU1oeikgKi8KKwl7MHgyQywgMHg2MSwgIDgwfSwgLyogNEIgKDgwLjM1ME1oeikgKi8KKwl7MHgzQiwgMHg2MSwgMTA4fSwgLyogNEMgKDEwNy4zODVNaHopICovCiAvKgotICAgICAgICAgICAgICAgIHsgICAgICAweDYwLDB4MzYsMzAgICAgICAgICAgICAgICB9LC8vIDREICgzMC4yMDBNSHopICAgfS8vIE5vIHVzZQotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4NjAsMHgzNiwzMCAgICAgICAgICAgICAgIH0sLy8gNEUgKDMwLjIwME1IeikgICB9Ly8gTm8gdXNlCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHg2MCwweDM2LDMwICAgICAgICAgICAgICAgfSwvLyA0RiAoMzAuMjAwTUh6KSAgIH0vLyBObyB1c2UKLQotICAgICAgICAgICAgICAgIHsgICAgICAweDYwLDB4MzYsMzAgICAgICAgICAgICAgICB9LC8vIDUwICgzMC4yMDBNSHopICAgfS8vIENIVFYKLQotICAgICAgICAgICAgICAgIHsgICAgICAweDQwLDB4NEEsMjggICAgICAgICAgICAgICB9LC8vIDUxICgyOC4xOTBNSHopCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHg5RiwweDQ2LDQ0ICAgICAgICAgICAgICAgfSwvLyA1MiAoNDMuNjAwTUh6KQotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4OTcsMHgyQywyNiAgICAgICAgICAgICAgIH0sLy8gNTMgKDI2LjQwME1IeikKLQotICAgICAgICAgICAgICAgIHsgICAgICAweDQ0LDB4RTQsMjUgICAgICAgICAgICAgICB9LC8vIDU0ICgyNC42MDBNSHopCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHg3RSwweDMyLDQ3ICAgICAgICAgICAgICAgfSwvLyA1NSAoNDcuODMyTUh6KQotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4OEEsMHgyNCwzMSAgICAgICAgICAgICAgIH0sLy8gNTYgKDMxLjUwME1IeikKLQotICAgICAgICAgICAgICAgIHsgICAgICAweDk3LDB4MkMsMjYgICAgICAgICAgICAgICB9LC8vIDU3ICgyNi4yMDBNSHopCi0KLSAgICAgICAgICAgICAgICB7ICAgICAgMHhDRSwweDNDLDM5ICAgICAgICAgICAgICAgfSwvLyA1OCAoMzkuMDAwTUh6KQotCi0gICAgICAgICAgICAgICAgeyAgICAgIDB4NTIsMHg0QSwzNiAgICAgICAgICAgICAgIH0sLy8gNTkgKDM2LjAwME1IeikKKwl7MHg2MCwgMHgzNiwgMzB9LC8vIDREICgzMC4yMDBNSHopICAgfS8vIE5vIHVzZQorCXsweDYwLCAweDM2LCAzMH0sLy8gNEUgKDMwLjIwME1IeikgICB9Ly8gTm8gdXNlCisJezB4NjAsIDB4MzYsIDMwfSwvLyA0RiAoMzAuMjAwTUh6KSAgIH0vLyBObyB1c2UKKwl7MHg2MCwgMHgzNiwgMzB9LC8vIDUwICgzMC4yMDBNSHopICAgfS8vIENIVFYKKwl7MHg0MCwgMHg0QSwgMjh9LC8vIDUxICgyOC4xOTBNSHopCisJezB4OUYsIDB4NDYsIDQ0fSwvLyA1MiAoNDMuNjAwTUh6KQorCXsweDk3LCAweDJDLCAyNn0sLy8gNTMgKDI2LjQwME1IeikKKwl7MHg0NCwgMHhFNCwgMjV9LC8vIDU0ICgyNC42MDBNSHopCisJezB4N0UsIDB4MzIsIDQ3fSwvLyA1NSAoNDcuODMyTUh6KQorCXsweDhBLCAweDI0LCAzMX0sLy8gNTYgKDMxLjUwME1IeikKKwl7MHg5NywgMHgyQywgMjZ9LC8vIDU3ICgyNi4yMDBNSHopCisJezB4Q0UsIDB4M0MsIDM5fSwvLyA1OCAoMzkuMDAwTUh6KQorCXsweDUyLCAweDRBLCAzNn0sLy8gNTkgKDM2LjAwME1IeikKICovCi0JCXsgICAgICAweDY5LDB4NjEsMTkxCQkgIH0sIC8qIDREICgxOTAuOTZNSHogKSAqLwotCQl7ICAgICAgMHg0RiwweDIyLDE5MgkJICB9LCAvKiA0RSAoMTkyLjA2OU1IeikgKi8KLQkJeyAgICAgIDB4MjgsMHgyNiwzMjIJCSAgfSwgLyogNEYgKDMyMi4yNzNNSHopICovCi0JCXsgICAgICAweDVDLDB4NkIsMjcJCSAgfSwgLyogNTAgKDI3Ljc0SE16KSAqLwotCQl7ICAgICAgMHg1NywweDI0LDEyNgkJICB9LCAvKiA1MSAoMTI1Ljk5OU1IeikgKi8KLQkJeyAgICAgIDB4NUMsMHg0MiwxNDgJCSAgfSwgLyogNTIgKDE0OC41TUh6KSAqLwotCQl7ICAgICAgMHg0MiwweDYxLDEyMAkJICB9LCAvKiA1MyAoMTIwLjgzOU1IeikgKi8KLQkJeyAgICAgIDB4NjIsMHg2MSwxNzgJCSAgfSwgLyogNTQgKDE3OC45OTJNSHopICovCi0JCXsgICAgICAweDU5LDB4MjIsMjE3CQkgIH0sIC8qIDU1ICgyMTcuMzI1TUh6KSAqLwotCQl7ICAgICAgMHgyOSwweDAxLDMwMAkJICB9LCAvKiA1NiAoMjk5LjUwNU1oeikgKi8KLQkJeyAgICAgIDB4NTIsMHg2Myw3NAkJICB9LCAvKiA1NyAoNzQuMjVNSHopICovCisJezB4NjksIDB4NjEsIDE5MX0sIC8qIDREICgxOTAuOTZNSHogKSAqLworCXsweDRGLCAweDIyLCAxOTJ9LCAvKiA0RSAoMTkyLjA2OU1IeikgKi8KKwl7MHgyOCwgMHgyNiwgMzIyfSwgLyogNEYgKDMyMi4yNzNNSHopICovCisJezB4NUMsIDB4NkIsICAyN30sIC8qIDUwICgyNy43NEhNeikgKi8KKwl7MHg1NywgMHgyNCwgMTI2fSwgLyogNTEgKDEyNS45OTlNSHopICovCisJezB4NUMsIDB4NDIsIDE0OH0sIC8qIDUyICgxNDguNU1IeikgKi8KKwl7MHg0MiwgMHg2MSwgMTIwfSwgLyogNTMgKDEyMC44MzlNSHopICovCisJezB4NjIsIDB4NjEsIDE3OH0sIC8qIDU0ICgxNzguOTkyTUh6KSAqLworCXsweDU5LCAweDIyLCAyMTd9LCAvKiA1NSAoMjE3LjMyNU1IeikgKi8KKwl7MHgyOSwgMHgwMSwgMzAwfSwgLyogNTYgKDI5OS41MDVNaHopICovCisJezB4NTIsIDB4NjMsICA3NH0sIC8qIDU3ICg3NC4yNU1IeikgKi8KKwl7MHhGRiwgMHgwMCwgICAwfSAgLyogRW5kIG1hcmsgKi8KK307CiAKLQotICAgICAgICAgICAgICAgIHsgICAgICAweEZGLDB4MDAsMCAgICAgICAgICAgICAgICB9ICAgICAgLyogRW5kIG1hcmsgKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJMzMwX1ZDTEtEYXRhU3RydWN0IFhHSV9WQlZDTEtEYXRhW10gPSB7CisJezB4MUIsIDB4RTEsICAyNX0sIC8qIDAwICgyNS4xNzVNSHopICovCisJezB4NEUsIDB4RTQsICAyOH0sIC8qIDAxICgyOC4zMjJNSHopICovCisJezB4NTcsIDB4RTQsICAzMX0sIC8qIDAyICgzMS41MDBNSHopICovCisJezB4QzMsIDB4QzgsICAzNn0sIC8qIDAzICgzNi4wMDBNSHopICovCisJezB4NDIsIDB4NDcsICA0MH0sIC8qIDA0ICg0MC4wMDBNSHopICovCisJezB4RkUsIDB4Q0QsICA0M30sIC8qIDA1ICg0My4xNjNNSHopICovCisJezB4NUQsIDB4QzQsICA0NH0sIC8qIDA2ICg0NC45MDBNSHopICovCisJezB4NTIsIDB4NDcsICA0OX0sIC8qIDA3ICg0OS41MDBNSHopICovCisJezB4NTMsIDB4NDcsICA1MH0sIC8qIDA4ICg1MC4wMDBNSHopICovCisJezB4NzQsIDB4NjcsICA1Mn0sIC8qIDA5ICg1Mi40MDZNSHopICovCisJezB4NkQsIDB4NjYsICA1Nn0sIC8qIDBBICg1Ni4yNTBNSHopICovCisJezB4MzUsIDB4NjIsICA2NX0sIC8qIDBCICg2NS4wMDBNSHopICovCisJezB4NDYsIDB4NDQsICA2N30sIC8qIDBDICg2Ny43NjVNSHopICovCisJezB4QjEsIDB4NDYsICA2OH0sIC8qIDBEICg2OC4xNzlNSHopICovCisJezB4RDMsIDB4NEEsICA3Mn0sIC8qIDBFICg3Mi44NTJNSHopICovCisJezB4MjksIDB4NjEsICA3NX0sIC8qIDBGICg3NS4wMDBNSHopICovCisJezB4NkQsIDB4NDYsICA3NX0sIC8qIDEwICg3NS44MDBNSHopICovCisJezB4NDEsIDB4NDMsICA3OH0sIC8qIDExICg3OC43NTBNSHopICovCisJezB4MzEsIDB4NDIsICA3OX0sIC8qIDEyICg3OS40MTFNSHopICovCisJezB4QUIsIDB4NDQsICA4M30sIC8qIDEzICg4My45NTBNSHopICovCisJezB4NDYsIDB4MjUsICA4NH0sIC8qIDE0ICg4NC44MDBNSHopICovCisJezB4NzgsIDB4MjksICA4Nn0sIC8qIDE1ICg4Ni42MDBNSHopICovCisJezB4NjIsIDB4NDQsICA5NH0sIC8qIDE2ICg5NC41MDBNSHopICovCisJezB4MkIsIDB4MjIsIDEwNH0sIC8qIDE3ICgxMDQuOTk4TUh6KSAqLworCXsweDQ5LCAweDI0LCAxMDV9LCAvKiAxOCAoMTA1Ljg4Mk1IeikgKi8KKwl7MHhGOCwgMHgyRiwgMTA4fSwgLyogMTkgKDEwOC4yNzlNSHopICovCisJezB4M0MsIDB4MjMsIDEwOX0sIC8qIDFBICgxMDkuMTc1TUh6KSAqLworCXsweDVFLCAweDQzLCAxMTN9LCAvKiAxQiAoMTEzLjMwOU1IeikgKi8KKwl7MHhCQywgMHg0NCwgMTE2fSwgLyogMUMgKDExNi40MDZNSHopICovCisJezB4RTAsIDB4NDYsIDEzMn0sIC8qIDFEICgxMzIuMjU4TUh6KSAqLworCXsweEQ0LCAweDI4LCAxMzV9LCAvKiAxRSAoMTM1LjIyME1IeikgKi8KKwl7MHhFQSwgMHgyQSwgMTM5fSwgLyogMUYgKDEzOS4yNzVNSHopICovCisJezB4NDEsIDB4MjIsIDE1N30sIC8qIDIwICgxNTcuNTAwTUh6KSAqLworCXsweDcwLCAweDI0LCAxNjJ9LCAvKiAyMSAoMTYxLjc5M01IeikgKi8KKwl7MHgzMCwgMHgyMSwgMTc1fSwgLyogMjIgKDE3NS4wMDBNSHopICovCisJezB4NEUsIDB4MjIsIDE4OX0sIC8qIDIzICgxODguNTIwTUh6KSAqLworCXsweERFLCAweDI2LCAxOTR9LCAvKiAyNCAoMTk0LjQwME1IeikgKi8KKwl7MHg3MCwgMHgwNywgMjAyfSwgLyogMjUgKDIwMi41MDBNSHopICovCisJezB4M0YsIDB4MDMsIDIyOX0sIC8qIDI2ICgyMjkuNTAwTUh6KSAqLworCXsweEI4LCAweDA2LCAyMzR9LCAvKiAyNyAoMjMzLjE3OE1IeikgKi8KKwl7MHgzNCwgMHgwMiwgMjUzfSwgLyogMjggKDI1Mi42OTk5OTcgTUh6KSAqLworCXsweDU4LCAweDA0LCAyNTV9LCAvKiAyOSAoMjU0LjgxN01IeikgKi8KKwl7MHgyNCwgMHgwMSwgMjY1fSwgLyogMkEgKDI2NS43MjhNSHopICovCisJezB4OUIsIDB4MDIsIDI2N30sIC8qIDJCICgyNjYuOTUyTUh6KSAqLworCXsweDcwLCAweDA1LCAyNzB9LCAvKiAyQyAoMjY5LjY1NTY3IE1IeikgKi8KKwl7MHgyNSwgMHgwMSwgMjcyfSwgLyogMkQgKDI3Mi4wNDE5OTIgTUh6KSAqLworCXsweDlDLCAweDAyLCAyNzd9LCAvKiAyRSAoMjc3LjAxNU1IeikgKi8KKwl7MHgyNywgMHgwMSwgMjg2fSwgLyogMkYgKDI4Ni4zNTk5ODUgTUh6KSAqLworCXsweDNDLCAweDAyLCAyOTF9LCAvKiAzMCAoMjkxLjEzMjY2MCBNSHopICovCisJezB4RUYsIDB4MEEsIDI5Mn0sIC8qIDMxICgyOTEuNzY2TUh6KSAqLworCXsweEY2LCAweDBBLCAzMTB9LCAvKiAzMiAoMzA5Ljc4OTQ1OSBNSHopICovCisJezB4OTUsIDB4MDEsIDMxNX0sIC8qIDMzICgzMTUuMTk1TUh6KSAqLworCXsweEYwLCAweDA5LCAzMjR9LCAvKiAzNCAoMzIzLjU4Njc5MiBNSHopICovCisJezB4RkUsIDB4MEEsIDMzMX0sIC8qIDM1ICgzMzAuNjE1NjMxIE1IeikgKi8KKwl7MHhGMywgMHgwOSwgMzMyfSwgLyogMzYgKDMzMi4xNzc2MTIgTUh6KSAqLworCXsweEVBLCAweDA4LCAzNDB9LCAvKiAzNyAoMzQwLjQ3N01IeikgKi8KKwl7MHhFOCwgMHgwNywgMzc2fSwgLyogMzggKDM3NS44NDc1MDQgTUh6KSAqLworCXsweERFLCAweDA2LCAzODl9LCAvKiAzOSAoMzg4LjYzMTQzOSBNSHopICovCisJezB4NTIsIDB4MkEsICA1NH0sIC8qIDNBICg1NC4wMDBNSHopICovCisJezB4NTIsIDB4NkEsICAyN30sIC8qIDNCICgyNy4wMDBNSHopICovCisJezB4NjIsIDB4MjQsICA3MH0sIC8qIDNDICg3MC44NzQ5OTFNSHopICovCisJezB4NjIsIDB4NjQsICA3MH0sIC8qIDNEICg3MC4xMDQ4OTEyTUh6KSAqLworCXsweEE4LCAweDRDLCAgMzB9LCAvKiAzRSAoMzAuMTA0ODkxMk1IeikgKi8KKwl7MHgyMCwgMHgyNiwgIDMzfSwgLyogM0YgKDMzLjc0OTk5NTdNSHopICovCisJezB4MzEsIDB4YzIsICAzOX0sIC8qIDQwICgzOS43N01IeikgKi8KKwl7MHgxMSwgMHgyMSwgIDMwfSwgLyogNDEgKDMwTUh6KSB9Ly8gTlRTQyAxMDI0WDc2OCAqLworCXsweDJFLCAweDQ4LCAgMjV9LCAvKiA0MiAoMjUuMTc1TUh6KSB9Ly8gU2NhbGVMQ0QgKi8KKwl7MHgyNCwgMHg0NiwgIDI1fSwgLyogNDMgKDI1LjE3NU1IeikgKi8KKwl7MHgyNiwgMHg2NCwgIDI4fSwgLyogNDQgKDI4LjMyMk1IeikgKi8KKwl7MHgzNywgMHg2NCwgIDQwfSwgLyogNDUgKDQwLjAwME1IeikgKi8KKwl7MHhBMSwgMHg0MiwgMTA4fSwgLyogNDYgKDk1LjAwME1IeikgfS8vIFFWR0EgKi8KKwl7MHgzNywgMHg2MSwgMTAwfSwgLyogNDcgKDEwMC4wME1IeikgKi8KKwl7MHg3OCwgMHgyNywgMTA4fSwgLyogNDggKDEwOC4yMDBNSHopICovCisJezB4QkYsIDB4QzgsIDM1IH0sIC8qIDQ5ICgzNS4yTUh6KSAqLworCXsweDY2LCAweDQzLCAxMjN9LCAvKiA0QSAoMTIyLjYxTWh6KSAqLworCXsweDJDLCAweDYxLCA4MCB9LCAvKiA0QiAoODAuMzUwTWh6KSAqLworCXsweDNCLCAweDYxLCAxMDh9LCAvKiA0QyAoMTA3LjM4NU1oeikgKi8KKy8qCisJezB4NjAsIDB4MzYsIDMwfSwgLy8gNEQgKDMwLjIwME1IeikgICB9Ly8gTm8gdXNlCisJezB4NjAsIDB4MzYsIDMwfSwgLy8gNEUgKDMwLjIwME1IeikgICB9Ly8gTm8gdXNlCisJezB4NjAsIDB4MzYsIDMwfSwgLy8gNEYgKDMwLjIwME1IeikgICB9Ly8gTm8gdXNlCisJezB4NjAsIDB4MzYsIDMwfSwgLy8gNTAgKDMwLjIwME1IeikgICB9Ly8gQ0hUVgorCXsweDQwLCAweDRBLCAyOH0sIC8vIDUxICgyOC4xOTBNSHopCisJezB4OUYsIDB4NDYsIDQ0fSwgLy8gNTIgKDQzLjYwME1IeikKKwl7MHg5NywgMHgyQywgMjZ9LCAvLyA1MyAoMjYuNDAwTUh6KQorCXsweDQ0LCAweEU0LCAyNX0sIC8vIDU0ICgyNC42MDBNSHopCisJezB4N0UsIDB4MzIsIDQ3fSwgLy8gNTUgKDQ3LjgzMk1IeikKKwl7MHg4QSwgMHgyNCwgMzF9LCAvLyA1NiAoMzEuNTAwTUh6KQorCXsweDk3LCAweDJDLCAyNn0sIC8vIDU3ICgyNi4yMDBNSHopCisJezB4Q0UsIDB4M0MsIDM5fSwgLy8gNTggKDM5LjAwME1IeikKKwl7MHg1MiwgMHg0QSwgMzZ9LCAvLyA1OSAoMzYuMDAwTUh6KQorKi8KKwl7MHg2OSwgMHg2MSwgMTkxfSwgLyogNEQgKDE5MC45Nk1IeiApICovCisJezB4NEYsIDB4MjIsIDE5Mn0sIC8qIDRFICgxOTIuMDY5TUh6KSAqLworCXsweDI4LCAweDI2LCAzMjJ9LCAvKiA0RiAoMzIyLjI3M01IeikgKi8KKwl7MHg1QywgMHg2QiwgIDI3fSwgLyogNTAgKDI3Ljc0SE16KSAqLworCXsweDU3LCAweDI0LCAxMjZ9LCAvKiA1MSAoMTI1Ljk5OU1IeikgKi8KKwl7MHg1QywgMHg0MiwgMTQ4fSwgLyogNTIgKDE0OC41TUh6KSAqLworCXsweDQyLCAweDYxLCAxMjB9LCAvKiA1MyAoMTIwLjgzOU1IeikgKi8KKwl7MHg2MiwgMHg2MSwgMTc4fSwgLyogNTQgKDE3OC45OTJNSHopICovCisJezB4NTksIDB4MjIsIDIxN30sIC8qIDU1ICgyMTcuMzI1TUh6KSAqLworCXsweDI5LCAweDAxLCAzMDB9LCAvKiA1NiAoMjk5LjUwNU1oeikgKi8KKwl7MHg1MiwgMHg2MywgIDc0fSwgLyogNTcgKDc0LjI1TUh6KSAqLworCXsweEZGLCAweDAwLCAgIDB9ICAvKiBFbmQgbWFyayAqLwogfTsKIAogI2lmIDAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIFhHSTY2MF9UVkRlbGF5TGlzdFtdID0KLXsKLSAgICAgICAgICAweDQ0LCAgICAgICAgICAgIC8qIDsgMCBFeHROVFNDRGVsYXkgKi8KLSAgICAgICAgICAweDQ0LCAgICAgICAgICAgIC8qIDsgMSBTdE5UU0NEZWxheSAqLwotICAgICAgICAgIDB4NDQsICAgICAgICAgICAgLyogOyAyIEV4dFBBTERlbGF5ICovCi0gICAgICAgICAgMHg0NCwgICAgICAgICAgICAvKiA7IDMgU3RQQUxEZWxheSAqLwotICAgICAgICAgIDB4NDQsICAgICAgICAgICAgLyogOyA0IEV4dEhpVFZEZWxheSgxMDgwaSkgKi8KLSAgICAgICAgICAweDQ0LCAgICAgICAgICAgIC8qIDsgNSBTdEhpVFZEZWxheSgxMDgwaSkgKi8KLSAgICAgICAgICAweDQ0LCAgICAgICAgICAgIC8qIDsgNiBFeHRZUGJQckRlbGF5KDUyNWkpICovCi0gICAgICAgICAgMHg0NCwgICAgICAgICAgICAvKiA7IDcgU3RZUGJQckRlYWx5KDUyNWkpICovCi0gICAgICAgICAgMHg0NCwgICAgICAgICAgICAvKiA7IDggRXh0WVBiUHJEZWxheSg1MjVwKSAqLwotICAgICAgICAgIDB4NDQsICAgICAgICAgICAgLyogOyA5IFN0WVBiUHJEZWFseSg1MjVwKSAqLwotICAgICAgICAgIDB4NDQsICAgICAgICAgICAgLyogOyBBIEV4dFlQYlByRGVsYXkoNzUwcCkgKi8KLSAgICAgICAgICAweDQ0ICAgICAgICAgICAgIC8qIDsgQiBTdFlQYlByRGVhbHkoNzUwcCkgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIFhHSTY2MF9UVkRlbGF5TGlzdFtdID0geworCTB4NDQsIC8qIDsgMCBFeHROVFNDRGVsYXkgKi8KKwkweDQ0LCAvKiA7IDEgU3ROVFNDRGVsYXkgKi8KKwkweDQ0LCAvKiA7IDIgRXh0UEFMRGVsYXkgKi8KKwkweDQ0LCAvKiA7IDMgU3RQQUxEZWxheSAqLworCTB4NDQsIC8qIDsgNCBFeHRIaVRWRGVsYXkoMTA4MGkpICovCisJMHg0NCwgLyogOyA1IFN0SGlUVkRlbGF5KDEwODBpKSAqLworCTB4NDQsIC8qIDsgNiBFeHRZUGJQckRlbGF5KDUyNWkpICovCisJMHg0NCwgLyogOyA3IFN0WVBiUHJEZWFseSg1MjVpKSAqLworCTB4NDQsIC8qIDsgOCBFeHRZUGJQckRlbGF5KDUyNXApICovCisJMHg0NCwgLyogOyA5IFN0WVBiUHJEZWFseSg1MjVwKSAqLworCTB4NDQsIC8qIDsgQSBFeHRZUGJQckRlbGF5KDc1MHApICovCisJMHg0NCAgLyogOyBCIFN0WVBiUHJEZWFseSg3NTBwKSAqLwogfTsKIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgWEdJNjYwX1RWRGVsYXlMaXN0MltdID0KLXsKLSAgICAgICAgICAweDQ0LCAgICAgICAgICAgLyogOyAwIEV4dE5UU0NEZWxheSAqLwotICAgICAgICAgIDB4NDQsICAgICAgICAgICAvKiA7IDEgU3ROVFNDRGVsYXkgKi8KLSAgICAgICAgICAweDQ0LCAgICAgICAgICAgLyogOyAyIEV4dFBBTERlbGF5ICovCi0gICAgICAgICAgMHg0NCwgICAgICAgICAgIC8qIDsgMyBTdFBBTERlbGF5ICovCi0gICAgICAgICAgMHg0NCwgICAgICAgICAgIC8qIDsgNCBFeHRIaVRWRGVsYXkgKi8KLSAgICAgICAgICAweDQ0LCAgICAgICAgICAgLyogOyA1IFN0SGlUVkRlbGF5ICovCi0gICAgICAgICAgMHg0NCwgICAgICAgICAgIC8qIDsgNiBFeHRZUGJQckRlbGF5KDUyNWkpICovCi0gICAgICAgICAgMHg0NCwgICAgICAgICAgIC8qIDsgNyBTdFlQYlByRGVhbHkoNTI1aSkgKi8KLSAgICAgICAgICAweDQ0LCAgICAgICAgICAgLyogOyA4IEV4dFlQYlByRGVsYXkoNTI1cCkgKi8KLSAgICAgICAgICAweDQ0LCAgICAgICAgICAgLyogOyA5IFN0WVBiUHJEZWFseSg1MjVwKSAqLwotICAgICAgICAgIDB4NDQsICAgICAgICAgICAvKiA7IEEgRXh0WVBiUHJEZWxheSg3NTBwKSAqLwotICAgICAgICAgIDB4NDQgICAgICAgICAgICAvKiA7IEIgU3RZUGJQckRlYWx5KDc1MHApICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBYR0k2NjBfVFZEZWxheUxpc3QyW10gPSB7CisJMHg0NCwgLyogOyAwIEV4dE5UU0NEZWxheSAqLworCTB4NDQsIC8qIDsgMSBTdE5UU0NEZWxheSAqLworCTB4NDQsIC8qIDsgMiBFeHRQQUxEZWxheSAqLworCTB4NDQsIC8qIDsgMyBTdFBBTERlbGF5ICovCisJMHg0NCwgLyogOyA0IEV4dEhpVFZEZWxheSAqLworCTB4NDQsIC8qIDsgNSBTdEhpVFZEZWxheSAqLworCTB4NDQsIC8qIDsgNiBFeHRZUGJQckRlbGF5KDUyNWkpICovCisJMHg0NCwgLyogOyA3IFN0WVBiUHJEZWFseSg1MjVpKSAqLworCTB4NDQsIC8qIDsgOCBFeHRZUGJQckRlbGF5KDUyNXApICovCisJMHg0NCwgLyogOyA5IFN0WVBiUHJEZWFseSg1MjVwKSAqLworCTB4NDQsIC8qIDsgQSBFeHRZUGJQckRlbGF5KDc1MHApICovCisJMHg0NCAgLyogOyBCIFN0WVBiUHJEZWFseSg3NTBwKSAqLwogfTsKICNlbmRpZgogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBYR0kzMDFUVkRlbGF5TGlzdFtdID0KLXsKLQkweDIyLCAgICAgICAgICAgIC8qIDsgMCBFeHROVFNDRGVsYXkgKi8KLQkweDIyLCAgICAgICAgICAgIC8qIDsgMSBTdE5UU0NEZWxheSAqLwotCTB4MjIsICAgICAgICAgICAgLyogOyAyIEV4dFBBTERlbGF5ICovCi0JMHgyMiwgICAgICAgICAgICAvKiA7IDMgU3RQQUxEZWxheSAqLwotCTB4ODgsICAgICAgICAgICAgLyogOyA0IEV4dEhpVFZEZWxheSgxMDgwaSkgKi8KLQkweEJCLCAgICAgICAgICAgIC8qIDsgNSBTdEhpVFZEZWxheSgxMDgwaSkgKi8KLQkweDIyLCAgICAgICAgICAgIC8qIDsgNiBFeHRZUGJQckRlbGF5KDUyNWkpICovCi0JMHgyMiwgICAgICAgICAgICAvKiA7IDcgU3RZUGJQckRlYWx5KDUyNWkpICovCi0JMHgyMiwgICAgICAgICAgICAvKiA7IDggRXh0WVBiUHJEZWxheSg1MjVwKSAqLwotCTB4MjIsICAgICAgICAgICAgLyogOyA5IFN0WVBiUHJEZWFseSg1MjVwKSAqLwotCTB4MjIsICAgICAgICAgICAgLyogOyBBIEV4dFlQYlByRGVsYXkoNzUwcCkgKi8KLQkweDIyICAgICAgICAgICAgLyogQiBTdFlQYlByRGVhbHkoNzUwcCkgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIFhHSTMwMVRWRGVsYXlMaXN0W10gPSB7CisJMHgyMiwgLyogOyAwIEV4dE5UU0NEZWxheSAqLworCTB4MjIsIC8qIDsgMSBTdE5UU0NEZWxheSAqLworCTB4MjIsIC8qIDsgMiBFeHRQQUxEZWxheSAqLworCTB4MjIsIC8qIDsgMyBTdFBBTERlbGF5ICovCisJMHg4OCwgLyogOyA0IEV4dEhpVFZEZWxheSgxMDgwaSkgKi8KKwkweEJCLCAvKiA7IDUgU3RIaVRWRGVsYXkoMTA4MGkpICovCisJMHgyMiwgLyogOyA2IEV4dFlQYlByRGVsYXkoNTI1aSkgKi8KKwkweDIyLCAvKiA7IDcgU3RZUGJQckRlYWx5KDUyNWkpICovCisJMHgyMiwgLyogOyA4IEV4dFlQYlByRGVsYXkoNTI1cCkgKi8KKwkweDIyLCAvKiA7IDkgU3RZUGJQckRlYWx5KDUyNXApICovCisJMHgyMiwgLyogOyBBIEV4dFlQYlByRGVsYXkoNzUwcCkgKi8KKwkweDIyICAvKiBCIFN0WVBiUHJEZWFseSg3NTBwKSAqLwogfTsKIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgWEdJMzAxVFZEZWxheUxpc3QyW10gPQotewotCTB4MjIsICAgICAgICAgICAvKiA7IDAgRXh0TlRTQ0RlbGF5ICovCi0JMHgyMiwgICAgICAgICAgIC8qIDsgMSBTdE5UU0NEZWxheSAqLwotCTB4MjIsICAgICAgICAgICAvKiA7IDIgRXh0UEFMRGVsYXkgKi8KLQkweDIyLCAgICAgICAgICAgLyogOyAzIFN0UEFMRGVsYXkgKi8KLQkweDIyLCAgICAgICAgICAgLyogOyA0IEV4dEhpVFZEZWxheSAqLwotCTB4MjIsICAgICAgICAgICAvKiA7IDUgU3RIaVRWRGVsYXkgKi8KLQkweDIyLCAgICAgICAgICAgLyogOyA2IEV4dFlQYlByRGVsYXkoNTI1aSkgKi8KLQkweDIyLCAgICAgICAgICAgLyogOyA3IFN0WVBiUHJEZWFseSg1MjVpKSAqLwotCTB4MjIsICAgICAgICAgICAvKiA7IDggRXh0WVBiUHJEZWxheSg1MjVwKSAqLwotCTB4MjIsICAgICAgICAgICAvKiA7IDkgU3RZUGJQckRlYWx5KDUyNXApICovCi0JMHgyMiwgICAgICAgICAgIC8qIDsgQSBFeHRZUGJQckRlbGF5KDc1MHApICovCi0JMHgyMiAgICAgICAgICAgIC8qIDsgQiBTdFlQYlByRGVhbHkoNzUwcCkgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIFhHSTMwMVRWRGVsYXlMaXN0MltdID0geworCTB4MjIsIC8qIDsgMCBFeHROVFNDRGVsYXkgKi8KKwkweDIyLCAvKiA7IDEgU3ROVFNDRGVsYXkgKi8KKwkweDIyLCAvKiA7IDIgRXh0UEFMRGVsYXkgKi8KKwkweDIyLCAvKiA7IDMgU3RQQUxEZWxheSAqLworCTB4MjIsIC8qIDsgNCBFeHRIaVRWRGVsYXkgKi8KKwkweDIyLCAvKiA7IDUgU3RIaVRWRGVsYXkgKi8KKwkweDIyLCAvKiA7IDYgRXh0WVBiUHJEZWxheSg1MjVpKSAqLworCTB4MjIsIC8qIDsgNyBTdFlQYlByRGVhbHkoNTI1aSkgKi8KKwkweDIyLCAvKiA7IDggRXh0WVBiUHJEZWxheSg1MjVwKSAqLworCTB4MjIsIC8qIDsgOSBTdFlQYlByRGVhbHkoNTI1cCkgKi8KKwkweDIyLCAvKiA7IEEgRXh0WVBiUHJEZWxheSg3NTBwKSAqLworCTB4MjIgIC8qIDsgQiBTdFlQYlByRGVhbHkoNzUwcCkgKi8KIH07CiAKIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgVFZBbnRpRmxpY2tMaXN0W10gPQotey8qIE5UU0NBbnRpRmxpY2tlciAqLwotICAgICAgICAgICAgICAgICAgICAgIDB4MDQsICAgICAgICAgICAvKiA7IDAgQWRhcHRpdmUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAweDAwLCAgICAgICAgICAgLyogOyAxIG5ldyBhbnRpLWZsaWNrZXIgPyAqLwotLyogUEFMQW50aUZsaWNrZXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAweDA0LCAgICAgICAgICAgLyogOyAwIEFkYXB0aXZlICovCi0gICAgICAgICAgICAgICAgICAgICAgMHgwOCwgICAgICAgICAgIC8qIDsgMSBuZXcgYW50aS1mbGlja2VyID8gKi8KLS8qIEhpVFZBbnRpRmxpY2tlciAqLwotICAgICAgICAgICAgICAgICAgICAgIDB4MDQsICAgICAgICAgICAvKiA7IDAgPyAqLwotICAgICAgICAgICAgICAgICAgICAgIDB4MDAgICAgICAgICAgICAvKiA7IDEgbmV3IGFudGktZmxpY2tlciA/ICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBUVkFudGlGbGlja0xpc3RbXSA9IHsvKiBOVFNDQW50aUZsaWNrZXIgKi8KKwkweDA0LCAvKiA7IDAgQWRhcHRpdmUgKi8KKwkweDAwLCAvKiA7IDEgbmV3IGFudGktZmxpY2tlciA/ICovCisKKwkweDA0LCAvKiA7IDAgQWRhcHRpdmUgKi8KKwkweDA4LCAvKiA7IDEgbmV3IGFudGktZmxpY2tlciA/ICovCisKKwkweDA0LCAvKiA7IDAgPyAqLworCTB4MDAgIC8qIDsgMSBuZXcgYW50aS1mbGlja2VyID8gKi8KIH07CiAKIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgVFZFZGdlTGlzdFtdID0KLXsKLSAgICAgIDB4MDAsICAgICAgICAgICAgLyogOyAwIE5UU0MgTm8gRWRnZSBlbmhhbmNlICovCi0gICAgICAweDA0LCAgICAgICAgICAgIC8qIDsgMSBOVFNDIEFkYXB0aXZlIEVkZ2UgZW5oYW5jZSAqLwotICAgICAgMHgwMCwgICAgICAgICAgICAvKiA7IDAgUEFMIE5vIEVkZ2UgZW5oYW5jZSAqLwotICAgICAgMHgwNCwgICAgICAgICAgICAvKiA7IDEgUEFMIEFkYXB0aXZlIEVkZ2UgZW5oYW5jZSAqLwotICAgICAgMHgwMCwgICAgICAgICAgICAvKiA7IDAgSGlUViAqLwotICAgICAgMHgwMCAgICAgICAgICAgICAvKiA7IDEgSGlUViAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgVFZFZGdlTGlzdFtdID0geworCTB4MDAsIC8qIDsgMCBOVFNDIE5vIEVkZ2UgZW5oYW5jZSAqLworCTB4MDQsIC8qIDsgMSBOVFNDIEFkYXB0aXZlIEVkZ2UgZW5oYW5jZSAqLworCTB4MDAsIC8qIDsgMCBQQUwgTm8gRWRnZSBlbmhhbmNlICovCisJMHgwNCwgLyogOyAxIFBBTCBBZGFwdGl2ZSBFZGdlIGVuaGFuY2UgKi8KKwkweDAwLCAvKiA7IDAgSGlUViAqLworCTB4MDAgIC8qIDsgMSBIaVRWICovCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBUVlBoYXNlTGlzdFtdID0KLXsgICAgICAweDA4QkFFRDIxLCAvKiA7IDAgTlRTQyBwaGFzZSAqLwotICAgICAgIDB4MDBFMzA1MkEsIC8qIDsgMSBQQUwgcGhhc2UgKi8KLSAgICAgICAweDlCMkVFNDIxLCAvKiA7IDIgUEFMLU0gcGhhc2UgKi8KLSAgICAgICAweEJBM0VGNDIxLCAvKiA7IDMgUEFMLU4gcGhhc2UgKi8KLSAgICAgICAweEE3QTI4QjFFLCAvKiA7IDQgTlRTQyAxMDI0eDc2OCAqLwotICAgICAgIDB4RTAwQTgzMUUsIC8qIDsgNSBQQUwtTSAxMDI0eDc2OCAqLwotICAgICAgIDB4MDAwMDAwMDAsIC8qIDsgNiByZXNlcnZlZCAqLwotICAgICAgIDB4MDAwMDAwMDAsIC8qIDsgNyByZXNlcnZlZCAqLwotICAgICAgIDB4RDY3QkYwMjEsIC8qIDsgOCBOVFNDIHBoYXNlICovCi0gICAgICAgMHhFOTg2MDkyQSwgLyogOyA5IFBBTCBwaGFzZSAqLwotICAgICAgIDB4QTRFRkU2MjEsIC8qIDsgQSBQQUwtTSBwaGFzZSAqLwotICAgICAgIDB4NDY5NEY2MjEsIC8qIDsgQiBQQUwtTiBwaGFzZSAqLwotICAgICAgIDB4OEJERTcxMUMsIC8qIDsgQyBOVFNDIDEwMjR4NzY4ICovCi0gICAgICAgMHhFMDBBODMxRSAgLyogOyBEIFBBTC1NIDEwMjR4NzY4ICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBUVlBoYXNlTGlzdFtdID0geworCTB4MDhCQUVEMjEsIC8qIDsgMCBOVFNDIHBoYXNlICovCisJMHgwMEUzMDUyQSwgLyogOyAxIFBBTCBwaGFzZSAqLworCTB4OUIyRUU0MjEsIC8qIDsgMiBQQUwtTSBwaGFzZSAqLworCTB4QkEzRUY0MjEsIC8qIDsgMyBQQUwtTiBwaGFzZSAqLworCTB4QTdBMjhCMUUsIC8qIDsgNCBOVFNDIDEwMjR4NzY4ICovCisJMHhFMDBBODMxRSwgLyogOyA1IFBBTC1NIDEwMjR4NzY4ICovCisJMHgwMDAwMDAwMCwgLyogOyA2IHJlc2VydmVkICovCisJMHgwMDAwMDAwMCwgLyogOyA3IHJlc2VydmVkICovCisJMHhENjdCRjAyMSwgLyogOyA4IE5UU0MgcGhhc2UgKi8KKwkweEU5ODYwOTJBLCAvKiA7IDkgUEFMIHBoYXNlICovCisJMHhBNEVGRTYyMSwgLyogOyBBIFBBTC1NIHBoYXNlICovCisJMHg0Njk0RjYyMSwgLyogOyBCIFBBTC1OIHBoYXNlICovCisJMHg4QkRFNzExQywgLyogOyBDIE5UU0MgMTAyNHg3NjggKi8KKwkweEUwMEE4MzFFICAvKiA7IEQgUEFMLU0gMTAyNHg3NjggKi8KIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIE5UU0NZRmlsdGVyMVtdID0KLXsKLQkJICAgICAgMHgwMCwweEY0LDB4MTAsMHgzOCAgICAgLC8qIDAgOiAzMjB4IHRleHQgbW9kZSAqLwotICAgICAgICAgICAgICAgICAgICAgIDB4MDAsMHhGNCwweDEwLDB4MzggICAgICwvKiAxIDogMzYweCB0ZXh0IG1vZGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAweEVCLDB4MDQsMHgyNSwweDE4ICAgICAsLyogMiA6IDY0MHggdGV4dCBtb2RlICovCi0gICAgICAgICAgICAgICAgICAgICAgMHhGMSwweDA0LDB4MUYsMHgxOCAgICAgLC8qIDMgOiA3MjB4IHRleHQgbW9kZSAqLwotICAgICAgICAgICAgICAgICAgICAgIDB4MDAsMHhGNCwweDEwLDB4MzggICAgICwvKiA0IDogMzIweCBncmEuIG1vZGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAweEVCLDB4MDQsMHgyNSwweDE4ICAgICAsLyogNSA6IDY0MHggZ3JhLiBtb2RlICovCi0gICAgICAgICAgICAgICAgICAgICAgMHhFQiwweDE1LDB4MjUsMHhGNiAgICAgLyogNiA6IDgwMHggZ3JhLiBtb2RlICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBOVFNDWUZpbHRlcjFbXSA9IHsKKwkweDAwLCAweEY0LCAweDEwLCAweDM4LCAvKiAwIDogMzIweCB0ZXh0IG1vZGUgKi8KKwkweDAwLCAweEY0LCAweDEwLCAweDM4LCAvKiAxIDogMzYweCB0ZXh0IG1vZGUgKi8KKwkweEVCLCAweDA0LCAweDI1LCAweDE4LCAvKiAyIDogNjQweCB0ZXh0IG1vZGUgKi8KKwkweEYxLCAweDA0LCAweDFGLCAweDE4LCAvKiAzIDogNzIweCB0ZXh0IG1vZGUgKi8KKwkweDAwLCAweEY0LCAweDEwLCAweDM4LCAvKiA0IDogMzIweCBncmEuIG1vZGUgKi8KKwkweEVCLCAweDA0LCAweDI1LCAweDE4LCAvKiA1IDogNjQweCBncmEuIG1vZGUgKi8KKwkweEVCLCAweDE1LCAweDI1LCAweEY2ICAvKiA2IDogODAweCBncmEuIG1vZGUgKi8KIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIFBBTFlGaWx0ZXIxW10gPQotewotCQkgICAgICAweDAwLDB4RjQsMHgxMCwweDM4LCAvKiAwIDogMzIweCB0ZXh0IG1vZGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAweDAwLDB4RjQsMHgxMCwweDM4ICAgICAsLyogMSA6IDM2MHggdGV4dCBtb2RlICovCi0gICAgICAgICAgICAgICAgICAgICAgMHhGMSwweEY3LDB4MUYsMHgzMiAgICAgLC8qIDIgOiA2NDB4IHRleHQgbW9kZSAqLwotICAgICAgICAgICAgICAgICAgICAgIDB4RjMsMHgwMCwweDFELDB4MjAgICAgICwvKiAzIDogNzIweCB0ZXh0IG1vZGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAweDAwLDB4RjQsMHgxMCwweDM4ICAgICAsLyogNCA6IDMyMHggZ3JhLiBtb2RlICovCi0gICAgICAgICAgICAgICAgICAgICAgMHhGMSwweEY3LDB4MUYsMHgzMiAgICAgLC8qIDUgOiA2NDB4IGdyYS4gbW9kZSAqLwotICAgICAgICAgICAgICAgICAgICAgIDB4RkMsMHhGQiwweDE0LDB4MkEgICAgIC8qIDYgOiA4MDB4IGdyYS4gbW9kZSAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgUEFMWUZpbHRlcjFbXSA9IHsKKwkweDAwLCAweEY0LCAweDEwLCAweDM4LCAvKiAwIDogMzIweCB0ZXh0IG1vZGUgKi8KKwkweDAwLCAweEY0LCAweDEwLCAweDM4LCAvKiAxIDogMzYweCB0ZXh0IG1vZGUgKi8KKwkweEYxLCAweEY3LCAweDFGLCAweDMyLCAvKiAyIDogNjQweCB0ZXh0IG1vZGUgKi8KKwkweEYzLCAweDAwLCAweDFELCAweDIwLCAvKiAzIDogNzIweCB0ZXh0IG1vZGUgKi8KKwkweDAwLCAweEY0LCAweDEwLCAweDM4LCAvKiA0IDogMzIweCBncmEuIG1vZGUgKi8KKwkweEYxLCAweEY3LCAweDFGLCAweDMyLCAvKiA1IDogNjQweCBncmEuIG1vZGUgKi8KKwkweEZDLCAweEZCLCAweDE0LCAweDJBICAvKiA2IDogODAweCBncmEuIG1vZGUgKi8KIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIFBBTE1ZRmlsdGVyMVtdID0KLXsKLQkJICAgICAgMHgwMCwweEY0LDB4MTAsMHgzOCwgLyogMCA6IDMyMHggdGV4dCBtb2RlICovCi0gICAgICAgICAgICAgICAgICAgICAgMHgwMCwweEY0LDB4MTAsMHgzOCwgLyogMSA6IDM2MHggdGV4dCBtb2RlICovCi0gICAgICAgICAgICAgICAgICAgICAgMHhFQiwweDA0LDB4MTAsMHgxOCwgLyogMiA6IDY0MHggdGV4dCBtb2RlICovCi0gICAgICAgICAgICAgICAgICAgICAgMHhGNywweDA2LDB4MTksMHgxNCwgLyogMyA6IDcyMHggdGV4dCBtb2RlICovCi0gICAgICAgICAgICAgICAgICAgICAgMHgwMCwweEY0LDB4MTAsMHgzOCwgLyogNCA6IDMyMHggZ3JhLiBtb2RlICovCi0gICAgICAgICAgICAgICAgICAgICAgMHhFQiwweDA0LDB4MjUsMHgxOCwgLyogNSA6IDY0MHggZ3JhLiBtb2RlICovCi0gICAgICAgICAgICAgICAgICAgICAgMHhFQiwweDE1LDB4MjUsMHhGNiwgLyogNiA6IDgwMHggZ3JhLiBtb2RlICovCi0gICAgICAgICAgICAgICAgICAgICAgMHhGRiwweEZGLDB4RkYsMHhGRiAgLyogRW5kIG9mIFRhYmxlICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBQQUxNWUZpbHRlcjFbXSA9IHsKKwkweDAwLCAweEY0LCAweDEwLCAweDM4LCAvKiAwIDogMzIweCB0ZXh0IG1vZGUgKi8KKwkweDAwLCAweEY0LCAweDEwLCAweDM4LCAvKiAxIDogMzYweCB0ZXh0IG1vZGUgKi8KKwkweEVCLCAweDA0LCAweDEwLCAweDE4LCAvKiAyIDogNjQweCB0ZXh0IG1vZGUgKi8KKwkweEY3LCAweDA2LCAweDE5LCAweDE0LCAvKiAzIDogNzIweCB0ZXh0IG1vZGUgKi8KKwkweDAwLCAweEY0LCAweDEwLCAweDM4LCAvKiA0IDogMzIweCBncmEuIG1vZGUgKi8KKwkweEVCLCAweDA0LCAweDI1LCAweDE4LCAvKiA1IDogNjQweCBncmEuIG1vZGUgKi8KKwkweEVCLCAweDE1LCAweDI1LCAweEY2LCAvKiA2IDogODAweCBncmEuIG1vZGUgKi8KKwkweEZGLCAweEZGLCAweEZGLCAweEZGICAvKiBFbmQgb2YgVGFibGUgKi8KIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIFBBTE5ZRmlsdGVyMVtdID0KLXsKLQkJICAgICAgMHgwMCwweEY0LDB4MTAsMHgzOCwgLyogMCA6IDMyMHggdGV4dCBtb2RlICovCi0gICAgICAgICAgICAgICAgICAgICAgMHgwMCwweEY0LDB4MTAsMHgzOCwgLyogMSA6IDM2MHggdGV4dCBtb2RlICovCi0gICAgICAgICAgICAgICAgICAgICAgMHhFQiwweDA0LDB4MTAsMHgxOCwgLyogMiA6IDY0MHggdGV4dCBtb2RlICovCi0gICAgICAgICAgICAgICAgICAgICAgMHhGNywweDA2LDB4MTksMHgxNCwgLyogMyA6IDcyMHggdGV4dCBtb2RlICovCi0gICAgICAgICAgICAgICAgICAgICAgMHgwMCwweEY0LDB4MTAsMHgzOCwgLyogNCA6IDMyMHggZ3JhLiBtb2RlICovCi0gICAgICAgICAgICAgICAgICAgICAgMHhFQiwweDA0LDB4MjUsMHgxOCwgLyogNSA6IDY0MHggZ3JhLiBtb2RlICovCi0gICAgICAgICAgICAgICAgICAgICAgMHhFQiwweDE1LDB4MjUsMHhGNiwgLyogNiA6IDgwMHggZ3JhLiBtb2RlICovCi0gICAgICAgICAgICAgICAgICAgICAgMHhGRiwweEZGLDB4RkYsMHhGRiAgLyogRW5kIG9mIFRhYmxlICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBQQUxOWUZpbHRlcjFbXSA9IHsKKwkweDAwLCAweEY0LCAweDEwLCAweDM4LCAvKiAwIDogMzIweCB0ZXh0IG1vZGUgKi8KKwkweDAwLCAweEY0LCAweDEwLCAweDM4LCAvKiAxIDogMzYweCB0ZXh0IG1vZGUgKi8KKwkweEVCLCAweDA0LCAweDEwLCAweDE4LCAvKiAyIDogNjQweCB0ZXh0IG1vZGUgKi8KKwkweEY3LCAweDA2LCAweDE5LCAweDE0LCAvKiAzIDogNzIweCB0ZXh0IG1vZGUgKi8KKwkweDAwLCAweEY0LCAweDEwLCAweDM4LCAvKiA0IDogMzIweCBncmEuIG1vZGUgKi8KKwkweEVCLCAweDA0LCAweDI1LCAweDE4LCAvKiA1IDogNjQweCBncmEuIG1vZGUgKi8KKwkweEVCLCAweDE1LCAweDI1LCAweEY2LCAvKiA2IDogODAweCBncmEuIG1vZGUgKi8KKwkweEZGLCAweEZGLCAweEZGLCAweEZGICAvKiBFbmQgb2YgVGFibGUgKi8KIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIE5UU0NZRmlsdGVyMltdID0KLXsKLQkJICAgICAgMHhGRiwweDAzLDB4MDIsMHhGNiwweEZDLDB4MjcsMHg0NiwgLyogMCA6IDMyMHggdGV4dCBtb2RlICovCi0gICAgICAgICAgICAgICAgICAgICAgMHgwMSwweDAyLDB4RkUsMHhGNywweDAzLDB4MjcsMHgzQywgLyogMSA6IDM2MHggdGV4dCBtb2RlICovCi0gICAgICAgICAgICAgICAgICAgICAgMHhGRiwweDAzLDB4MDIsMHhGNiwweEZDLDB4MjcsMHg0NiwgLyogMiA6IDY0MHggdGV4dCBtb2RlICovCi0gICAgICAgICAgICAgICAgICAgICAgMHgwMSwweDAyLDB4RkUsMHhGNywweDAzLDB4MjcsMHgzQywgLyogMyA6IDcyMHggdGV4dCBtb2RlICovCi0gICAgICAgICAgICAgICAgICAgICAgMHhGRiwweDAzLDB4MDIsMHhGNiwweEZDLDB4MjcsMHg0NiwgLyogNCA6IDMyMHggZ3JhLiBtb2RlICovCi0gICAgICAgICAgICAgICAgICAgICAgMHhGRiwweDAzLDB4MDIsMHhGNiwweEZDLDB4MjcsMHg0NiwgLyogNSA6IDY0MHggZ3JhLiBtb2RlICovCi0gICAgICAgICAgICAgICAgICAgICAgMHgwMSwweDAxLDB4RkMsMHhGOCwweDA4LDB4MjYsMHgzOCwgLyogNiA6IDgwMHggZ3JhLiBtb2RlICovCi0gICAgICAgICAgICAgICAgICAgICAgMHhGRiwweEZGLDB4RkMsMHgwMCwweDBGLDB4MjIsMHgyOCAgLyogNyA6IDEwMjR4Z3JhLiBtb2RlICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBOVFNDWUZpbHRlcjJbXSA9IHsKKwkweEZGLCAweDAzLCAweDAyLCAweEY2LCAweEZDLCAweDI3LCAweDQ2LCAvKiAwIDogMzIweCB0ZXh0IG1vZGUgKi8KKwkweDAxLCAweDAyLCAweEZFLCAweEY3LCAweDAzLCAweDI3LCAweDNDLCAvKiAxIDogMzYweCB0ZXh0IG1vZGUgKi8KKwkweEZGLCAweDAzLCAweDAyLCAweEY2LCAweEZDLCAweDI3LCAweDQ2LCAvKiAyIDogNjQweCB0ZXh0IG1vZGUgKi8KKwkweDAxLCAweDAyLCAweEZFLCAweEY3LCAweDAzLCAweDI3LCAweDNDLCAvKiAzIDogNzIweCB0ZXh0IG1vZGUgKi8KKwkweEZGLCAweDAzLCAweDAyLCAweEY2LCAweEZDLCAweDI3LCAweDQ2LCAvKiA0IDogMzIweCBncmEuIG1vZGUgKi8KKwkweEZGLCAweDAzLCAweDAyLCAweEY2LCAweEZDLCAweDI3LCAweDQ2LCAvKiA1IDogNjQweCBncmEuIG1vZGUgKi8KKwkweDAxLCAweDAxLCAweEZDLCAweEY4LCAweDA4LCAweDI2LCAweDM4LCAvKiA2IDogODAweCBncmEuIG1vZGUgKi8KKwkweEZGLCAweEZGLCAweEZDLCAweDAwLCAweDBGLCAweDIyLCAweDI4ICAvKiA3IDogMTAyNHhncmEuIG1vZGUgKi8KIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIFBBTFlGaWx0ZXIyW10gPQotewotCQkgICAgICAweEZGLDB4MDMsMHgwMiwweEY2LDB4RkMsMHgyNywweDQ2LCAvKiAwIDogMzIweCB0ZXh0IG1vZGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAweDAxLDB4MDIsMHhGRSwweEY3LDB4MDMsMHgyNywweDNDLCAvKiAxIDogMzYweCB0ZXh0IG1vZGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAweEZGLDB4MDMsMHgwMiwweEY2LDB4RkMsMHgyNywweDQ2LCAvKiAyIDogNjQweCB0ZXh0IG1vZGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAweDAxLDB4MDIsMHhGRSwweEY3LDB4MDMsMHgyNywweDNDLCAvKiAzIDogNzIweCB0ZXh0IG1vZGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAweEZGLDB4MDMsMHgwMiwweEY2LDB4RkMsMHgyNywweDQ2LCAvKiA0IDogMzIweCBncmEuIG1vZGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAweEZGLDB4MDMsMHgwMiwweEY2LDB4RkMsMHgyNywweDQ2LCAvKiA1IDogNjQweCBncmEuIG1vZGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAweDAxLDB4MDEsMHhGQywweEY4LDB4MDgsMHgyNiwweDM4LCAvKiA2IDogODAweCBncmEuIG1vZGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAweEZGLDB4RkYsMHhGQywweDAwLDB4MEYsMHgyMiwweDI4ICAvKiA3IDogMTAyNHhncmEuIG1vZGUgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIFBBTFlGaWx0ZXIyW10gPSB7CisJMHhGRiwgMHgwMywgMHgwMiwgMHhGNiwgMHhGQywgMHgyNywgMHg0NiwgLyogMCA6IDMyMHggdGV4dCBtb2RlICovCisJMHgwMSwgMHgwMiwgMHhGRSwgMHhGNywgMHgwMywgMHgyNywgMHgzQywgLyogMSA6IDM2MHggdGV4dCBtb2RlICovCisJMHhGRiwgMHgwMywgMHgwMiwgMHhGNiwgMHhGQywgMHgyNywgMHg0NiwgLyogMiA6IDY0MHggdGV4dCBtb2RlICovCisJMHgwMSwgMHgwMiwgMHhGRSwgMHhGNywgMHgwMywgMHgyNywgMHgzQywgLyogMyA6IDcyMHggdGV4dCBtb2RlICovCisJMHhGRiwgMHgwMywgMHgwMiwgMHhGNiwgMHhGQywgMHgyNywgMHg0NiwgLyogNCA6IDMyMHggZ3JhLiBtb2RlICovCisJMHhGRiwgMHgwMywgMHgwMiwgMHhGNiwgMHhGQywgMHgyNywgMHg0NiwgLyogNSA6IDY0MHggZ3JhLiBtb2RlICovCisJMHgwMSwgMHgwMSwgMHhGQywgMHhGOCwgMHgwOCwgMHgyNiwgMHgzOCwgLyogNiA6IDgwMHggZ3JhLiBtb2RlICovCisJMHhGRiwgMHhGRiwgMHhGQywgMHgwMCwgMHgwRiwgMHgyMiwgMHgyOCAgLyogNyA6IDEwMjR4Z3JhLiBtb2RlICovCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBQQUxNWUZpbHRlcjJbXSA9Ci17Ci0JCSAgICAgIDB4RkYsMHgwMywweDAyLDB4RjYsMHhGQywweDI3LDB4NDYsIC8qIDAgOiAzMjB4IHRleHQgbW9kZSAqLwotICAgICAgICAgICAgICAgICAgICAgIDB4MDEsMHgwMiwweEZFLDB4RjcsMHgwMywweDI3LDB4M0MsIC8qIDEgOiAzNjB4IHRleHQgbW9kZSAqLwotICAgICAgICAgICAgICAgICAgICAgIDB4RkYsMHgwMywweDAyLDB4RjYsMHhGQywweDI3LDB4NDYsIC8qIDIgOiA2NDB4IHRleHQgbW9kZSAqLwotICAgICAgICAgICAgICAgICAgICAgIDB4MDEsMHgwMiwweEZFLDB4RjcsMHgwMywweDI3LDB4M0MsIC8qIDMgOiA3MjB4IHRleHQgbW9kZSAqLwotICAgICAgICAgICAgICAgICAgICAgIDB4RkYsMHgwMywweDAyLDB4RjYsMHhGQywweDI3LDB4NDYsIC8qIDQgOiAzMjB4IGdyYS4gbW9kZSAqLwotICAgICAgICAgICAgICAgICAgICAgIDB4RkYsMHgwMywweDAyLDB4RjYsMHhGQywweDI3LDB4NDYsIC8qIDUgOiA2NDB4IGdyYS4gbW9kZSAqLwotICAgICAgICAgICAgICAgICAgICAgIDB4MDEsMHgwMSwweEZDLDB4RjgsMHgwOCwweDI2LDB4MzgsIC8qIDYgOiA4MDB4IGdyYS4gbW9kZSAqLwotICAgICAgICAgICAgICAgICAgICAgIDB4RkYsMHhGRiwweEZDLDB4MDAsMHgwRiwweDIyLDB4MjggIC8qIDcgOiAxMDI0eGdyYS4gbW9kZSAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgUEFMTVlGaWx0ZXIyW10gPSB7CisJMHhGRiwgMHgwMywgMHgwMiwgMHhGNiwgMHhGQywgMHgyNywgMHg0NiwgLyogMCA6IDMyMHggdGV4dCBtb2RlICovCisJMHgwMSwgMHgwMiwgMHhGRSwgMHhGNywgMHgwMywgMHgyNywgMHgzQywgLyogMSA6IDM2MHggdGV4dCBtb2RlICovCisJMHhGRiwgMHgwMywgMHgwMiwgMHhGNiwgMHhGQywgMHgyNywgMHg0NiwgLyogMiA6IDY0MHggdGV4dCBtb2RlICovCisJMHgwMSwgMHgwMiwgMHhGRSwgMHhGNywgMHgwMywgMHgyNywgMHgzQywgLyogMyA6IDcyMHggdGV4dCBtb2RlICovCisJMHhGRiwgMHgwMywgMHgwMiwgMHhGNiwgMHhGQywgMHgyNywgMHg0NiwgLyogNCA6IDMyMHggZ3JhLiBtb2RlICovCisJMHhGRiwgMHgwMywgMHgwMiwgMHhGNiwgMHhGQywgMHgyNywgMHg0NiwgLyogNSA6IDY0MHggZ3JhLiBtb2RlICovCisJMHgwMSwgMHgwMSwgMHhGQywgMHhGOCwgMHgwOCwgMHgyNiwgMHgzOCwgLyogNiA6IDgwMHggZ3JhLiBtb2RlICovCisJMHhGRiwgMHhGRiwgMHhGQywgMHgwMCwgMHgwRiwgMHgyMiwgMHgyOCAgLyogNyA6IDEwMjR4Z3JhLiBtb2RlICovCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBQQUxOWUZpbHRlcjJbXSA9Ci17Ci0JCSAgICAgIDB4RkYsMHgwMywweDAyLDB4RjYsMHhGQywweDI3LDB4NDYsIC8qIDAgOiAzMjB4IHRleHQgbW9kZSAqLwotICAgICAgICAgICAgICAgICAgICAgIDB4MDEsMHgwMiwweEZFLDB4RjcsMHgwMywweDI3LDB4M0MsIC8qIDEgOiAzNjB4IHRleHQgbW9kZSAqLwotICAgICAgICAgICAgICAgICAgICAgIDB4RkYsMHgwMywweDAyLDB4RjYsMHhGQywweDI3LDB4NDYsIC8qIDIgOiA2NDB4IHRleHQgbW9kZSAqLwotICAgICAgICAgICAgICAgICAgICAgIDB4MDEsMHgwMiwweEZFLDB4RjcsMHgwMywweDI3LDB4M0MsIC8qIDMgOiA3MjB4IHRleHQgbW9kZSAqLwotICAgICAgICAgICAgICAgICAgICAgIDB4RkYsMHgwMywweDAyLDB4RjYsMHhGQywweDI3LDB4NDYsIC8qIDQgOiAzMjB4IGdyYS4gbW9kZSAqLwotICAgICAgICAgICAgICAgICAgICAgIDB4RkYsMHgwMywweDAyLDB4RjYsMHhGQywweDI3LDB4NDYsIC8qIDUgOiA2NDB4IGdyYS4gbW9kZSAqLwotICAgICAgICAgICAgICAgICAgICAgIDB4MDEsMHgwMSwweEZDLDB4RjgsMHgwOCwweDI2LDB4MzgsIC8qIDYgOiA4MDB4IGdyYS4gbW9kZSAqLwotICAgICAgICAgICAgICAgICAgICAgIDB4RkYsMHhGRiwweEZDLDB4MDAsMHgwRiwweDIyLDB4MjggIC8qIDcgOiAxMDI0eGdyYS4gbW9kZSAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgUEFMTllGaWx0ZXIyW10gPSB7CisJMHhGRiwgMHgwMywgMHgwMiwgMHhGNiwgMHhGQywgMHgyNywgMHg0NiwgLyogMCA6IDMyMHggdGV4dCBtb2RlICovCisJMHgwMSwgMHgwMiwgMHhGRSwgMHhGNywgMHgwMywgMHgyNywgMHgzQywgLyogMSA6IDM2MHggdGV4dCBtb2RlICovCisJMHhGRiwgMHgwMywgMHgwMiwgMHhGNiwgMHhGQywgMHgyNywgMHg0NiwgLyogMiA6IDY0MHggdGV4dCBtb2RlICovCisJMHgwMSwgMHgwMiwgMHhGRSwgMHhGNywgMHgwMywgMHgyNywgMHgzQywgLyogMyA6IDcyMHggdGV4dCBtb2RlICovCisJMHhGRiwgMHgwMywgMHgwMiwgMHhGNiwgMHhGQywgMHgyNywgMHg0NiwgLyogNCA6IDMyMHggZ3JhLiBtb2RlICovCisJMHhGRiwgMHgwMywgMHgwMiwgMHhGNiwgMHhGQywgMHgyNywgMHg0NiwgLyogNSA6IDY0MHggZ3JhLiBtb2RlICovCisJMHgwMSwgMHgwMSwgMHhGQywgMHhGOCwgMHgwOCwgMHgyNiwgMHgzOCwgLyogNiA6IDgwMHggZ3JhLiBtb2RlICovCisJMHhGRiwgMHhGRiwgMHhGQywgMHgwMCwgMHgwRiwgMHgyMiwgMHgyOCAgLyogNyA6IDEwMjR4Z3JhLiBtb2RlICovCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBYR0lfTlRTQzEwMjRBZGpUaW1lW10gPQotewotICAgICAgMHhhNywweDA3LDB4ZjIsMHg2ZSwweDE3LDB4OGIsMHg3MywweDUzLAotICAgICAgMHgxMywweDQwLDB4MzQsMHhGNCwweDYzLDB4QkIsMHhDQywweDdBLAotICAgICAgMHg1OCwweGU0LDB4NzMsMHhkMCwweDEzCitzdGF0aWMgdW5zaWduZWQgY2hhciBYR0lfTlRTQzEwMjRBZGpUaW1lW10gPSB7CisJMHhhNywgMHgwNywgMHhmMiwgMHg2ZSwgMHgxNywgMHg4YiwgMHg3MywgMHg1MywKKwkweDEzLCAweDQwLCAweDM0LCAweEY0LCAweDYzLCAweEJCLCAweENDLCAweDdBLAorCTB4NTgsIDB4ZTQsIDB4NzMsIDB4ZDAsIDB4MTMKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzAxQ19UYXA0VGltaW5nU3RydWN0IEhpVFZUYXA0VGltaW5nW10gPQotewotCXswLHsKLQkweDAwLDB4MjAsMHgwMCwweDAwLDB4N0YsMHgyMCwweDAyLDB4N0YsIC8qIDsgQzAtQzcgKi8KLQkweDdELDB4MjAsMHgwNCwweDdGLDB4N0QsMHgxRiwweDA2LDB4N0UsIC8qIDsgQzgtQ0YgKi8KLQkweDdDLDB4MUQsMHgwOSwweDdFLDB4N0MsMHgxQiwweDBCLDB4N0UsIC8qIDsgRDAtRDcgKi8KLQkweDdDLDB4MTksMHgwRSwweDdELDB4N0MsMHgxNywweDExLDB4N0MsIC8qIDsgRDgtREYgKi8KLQkweDdDLDB4MTQsMHgxNCwweDdDLDB4N0MsMHgxMSwweDE3LDB4N0MsIC8qIDsgRTAtRTcgKi8KLQkweDdELDB4MEUsMHgxOSwweDdDLDB4N0UsMHgwQiwweDFCLDB4N0MsIC8qIDsgRUEtRUYgKi8KLQkweDdFLDB4MDksMHgxRCwweDdDLDB4N0YsMHgwNiwweDFGLDB4N0MsIC8qIDsgRjAtRjcgKi8KLQkweDdGLDB4MDQsMHgyMCwweDdELDB4MDAsMHgwMiwweDIwLDB4N0UgIC8qIDsgRjgtRkYgKi8KK3N0YXRpYyBzdHJ1Y3QgWEdJMzAxQ19UYXA0VGltaW5nU3RydWN0IEhpVFZUYXA0VGltaW5nW10gPSB7CisJezAsIHsKKwkweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDdGLCAweDIwLCAweDAyLCAweDdGLCAvKiA7IEMwLUM3ICovCisJMHg3RCwgMHgyMCwgMHgwNCwgMHg3RiwgMHg3RCwgMHgxRiwgMHgwNiwgMHg3RSwgLyogOyBDOC1DRiAqLworCTB4N0MsIDB4MUQsIDB4MDksIDB4N0UsIDB4N0MsIDB4MUIsIDB4MEIsIDB4N0UsIC8qIDsgRDAtRDcgKi8KKwkweDdDLCAweDE5LCAweDBFLCAweDdELCAweDdDLCAweDE3LCAweDExLCAweDdDLCAvKiA7IEQ4LURGICovCisJMHg3QywgMHgxNCwgMHgxNCwgMHg3QywgMHg3QywgMHgxMSwgMHgxNywgMHg3QywgLyogOyBFMC1FNyAqLworCTB4N0QsIDB4MEUsIDB4MTksIDB4N0MsIDB4N0UsIDB4MEIsIDB4MUIsIDB4N0MsIC8qIDsgRUEtRUYgKi8KKwkweDdFLCAweDA5LCAweDFELCAweDdDLCAweDdGLCAweDA2LCAweDFGLCAweDdDLCAvKiA7IEYwLUY3ICovCisJMHg3RiwgMHgwNCwgMHgyMCwgMHg3RCwgMHgwMCwgMHgwMiwgMHgyMCwgMHg3RSAgLyogOyBGOC1GRiAqLwogCX0KIAl9CiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSTMwMUNfVGFwNFRpbWluZ1N0cnVjdCBFbmxhcmdlVGFwNFRpbWluZ1tdID0KLXsKLQl7MCx7Ci0JMHgwMCwweDIwLDB4MDAsMHgwMCwweDdGLDB4MjAsMHgwMiwweDdGLCAvKiA7IEMwLUM3ICovCi0JMHg3RCwweDIwLDB4MDQsMHg3RiwweDdELDB4MUYsMHgwNiwweDdFLCAvKiA7IEM4LUNGICovCi0JMHg3QywweDFELDB4MDksMHg3RSwweDdDLDB4MUIsMHgwQiwweDdFLCAvKiA7IEQwLUQ3ICovCi0JMHg3QywweDE5LDB4MEUsMHg3RCwweDdDLDB4MTcsMHgxMSwweDdDLCAvKiA7IEQ4LURGICovCi0JMHg3QywweDE0LDB4MTQsMHg3QywweDdDLDB4MTEsMHgxNywweDdDLCAvKiA7IEUwLUU3ICovCi0JMHg3RCwweDBFLDB4MTksMHg3QywweDdFLDB4MEIsMHgxQiwweDdDLCAvKiA7IEVBLUVGICovCi0JMHg3RSwweDA5LDB4MUQsMHg3QywweDdGLDB4MDYsMHgxRiwweDdDLCAvKiA7IEYwLUY3ICovCi0JMHg3RiwweDA0LDB4MjAsMHg3RCwweDAwLDB4MDIsMHgyMCwweDdFICAgLyogOyBGOC1GRiAqLworc3RhdGljIHN0cnVjdCBYR0kzMDFDX1RhcDRUaW1pbmdTdHJ1Y3QgRW5sYXJnZVRhcDRUaW1pbmdbXSA9IHsKKwl7MCwgeworCTB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4N0YsIDB4MjAsIDB4MDIsIDB4N0YsIC8qIDsgQzAtQzcgKi8KKwkweDdELCAweDIwLCAweDA0LCAweDdGLCAweDdELCAweDFGLCAweDA2LCAweDdFLCAvKiA7IEM4LUNGICovCisJMHg3QywgMHgxRCwgMHgwOSwgMHg3RSwgMHg3QywgMHgxQiwgMHgwQiwgMHg3RSwgLyogOyBEMC1ENyAqLworCTB4N0MsIDB4MTksIDB4MEUsIDB4N0QsIDB4N0MsIDB4MTcsIDB4MTEsIDB4N0MsIC8qIDsgRDgtREYgKi8KKwkweDdDLCAweDE0LCAweDE0LCAweDdDLCAweDdDLCAweDExLCAweDE3LCAweDdDLCAvKiA7IEUwLUU3ICovCisJMHg3RCwgMHgwRSwgMHgxOSwgMHg3QywgMHg3RSwgMHgwQiwgMHgxQiwgMHg3QywgLyogOyBFQS1FRiAqLworCTB4N0UsIDB4MDksIDB4MUQsIDB4N0MsIDB4N0YsIDB4MDYsIDB4MUYsIDB4N0MsIC8qIDsgRjAtRjcgKi8KKwkweDdGLCAweDA0LCAweDIwLCAweDdELCAweDAwLCAweDAyLCAweDIwLCAweDdFICAgLyogOyBGOC1GRiAqLwogCX0KIAl9CiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSTMwMUNfVGFwNFRpbWluZ1N0cnVjdCBOb1NjYWxlVGFwNFRpbWluZ1tdID0KLXsKLQl7MCx7Ci0JMHgwMCwweDIwLDB4MDAsMHgwMCwweDdGLDB4MjAsMHgwMiwweDdGLCAvKiA7IEMwLUM3ICovCi0JMHg3RCwweDIwLDB4MDQsMHg3RiwweDdELDB4MUYsMHgwNiwweDdFLCAvKiA7IEM4LUNGICovCi0JMHg3QywweDFELDB4MDksMHg3RSwweDdDLDB4MUIsMHgwQiwweDdFLCAvKiA7IEQwLUQ3ICovCi0JMHg3QywweDE5LDB4MEUsMHg3RCwweDdDLDB4MTcsMHgxMSwweDdDLCAvKiA7IEQ4LURGICovCi0JMHg3QywweDE0LDB4MTQsMHg3QywweDdDLDB4MTEsMHgxNywweDdDLCAvKiA7IEUwLUU3ICovCi0JMHg3RCwweDBFLDB4MTksMHg3QywweDdFLDB4MEIsMHgxQiwweDdDLCAvKiA7IEVBLUVGICovCi0JMHg3RSwweDA5LDB4MUQsMHg3QywweDdGLDB4MDYsMHgxRiwweDdDLCAvKiA7IEYwLUY3ICovCi0JMHg3RiwweDA0LDB4MjAsMHg3RCwweDAwLDB4MDIsMHgyMCwweDdFICAvKiA7IEY4LUZGICovCitzdGF0aWMgc3RydWN0IFhHSTMwMUNfVGFwNFRpbWluZ1N0cnVjdCBOb1NjYWxlVGFwNFRpbWluZ1tdID0geworCXswLCB7CisJMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg3RiwgMHgyMCwgMHgwMiwgMHg3RiwgLyogOyBDMC1DNyAqLworCTB4N0QsIDB4MjAsIDB4MDQsIDB4N0YsIDB4N0QsIDB4MUYsIDB4MDYsIDB4N0UsIC8qIDsgQzgtQ0YgKi8KKwkweDdDLCAweDFELCAweDA5LCAweDdFLCAweDdDLCAweDFCLCAweDBCLCAweDdFLCAvKiA7IEQwLUQ3ICovCisJMHg3QywgMHgxOSwgMHgwRSwgMHg3RCwgMHg3QywgMHgxNywgMHgxMSwgMHg3QywgLyogOyBEOC1ERiAqLworCTB4N0MsIDB4MTQsIDB4MTQsIDB4N0MsIDB4N0MsIDB4MTEsIDB4MTcsIDB4N0MsIC8qIDsgRTAtRTcgKi8KKwkweDdELCAweDBFLCAweDE5LCAweDdDLCAweDdFLCAweDBCLCAweDFCLCAweDdDLCAvKiA7IEVBLUVGICovCisJMHg3RSwgMHgwOSwgMHgxRCwgMHg3QywgMHg3RiwgMHgwNiwgMHgxRiwgMHg3QywgLyogOyBGMC1GNyAqLworCTB4N0YsIDB4MDQsIDB4MjAsIDB4N0QsIDB4MDAsIDB4MDIsIDB4MjAsIDB4N0UgIC8qIDsgRjgtRkYgKi8KIAl9CiAJfQogfTsKIAotc3RhdGljIHN0cnVjdCBYR0kzMDFDX1RhcDRUaW1pbmdTdHJ1Y3QgUEFMVGFwNFRpbWluZ1tdID0KLXsKLQl7NjAwLCAgewotICAgICAgICAgICAgICAgIDB4MDUsMHgxOSwweDA1LDB4N0QsMHgwMywweDE5LDB4MDYsMHg3RSwgLyogOyBDMC1DNyAqLwotICAgICAgICAgICAgICAgIDB4MDIsMHgxOSwweDA4LDB4N0QsMHgwMSwweDE4LDB4MEEsMHg3RCwgLyogOyBDOC1DRiAqLwotICAgICAgICAgICAgICAgIDB4MDAsMHgxOCwweDBDLDB4N0MsMHg3RiwweDE3LDB4MEUsMHg3QywgLyogOyBEMC1ENyAqLwotICAgICAgICAgICAgICAgIDB4N0UsMHgxNiwweDBGLDB4N0QsMHg3RSwweDE0LDB4MTEsMHg3RCwgLyogOyBEOC1ERiAqLwotICAgICAgICAgICAgICAgIDB4N0QsMHgxMywweDEzLDB4N0QsMHg3RCwweDExLDB4MTQsMHg3RSwgLyogOyBFMC1FNyAqLwotICAgICAgICAgICAgICAgIDB4N0QsMHgwRiwweDE2LDB4N0UsMHg3RCwweDBFLDB4MTcsMHg3RSwgLyogOyBFQS1FRiAqLwotICAgICAgICAgICAgICAgIDB4N0QsMHgwQywweDE4LDB4N0YsMHg3RCwweDBBLDB4MTgsMHgwMSwgLyogOyBGMC1GNyAqLwotICAgICAgICAgICAgICAgIDB4N0QsMHgwOCwweDE5LDB4MDIsMHg3RCwweDA2LDB4MTksMHgwNCAgLyogOyBGOC1GRiAqLwotICAgICAgICAgICAgICAgIH0KLSAJfSwKLSAgICAgICAgezc2OCwJewotICAgICAgICAgICAgICAgIDB4MDgsMHgxMiwweDA4LDB4N0UsMHgwNywweDEyLDB4MDksMHg3RSwgLyogOyBDMC1DNyAqLwotICAgICAgICAgICAgICAgIDB4MDYsMHgxMiwweDBBLDB4N0UsMHgwNSwweDExLDB4MEIsMHg3RiwgLyogOyBDOC1DRiAqLwotICAgICAgICAgICAgICAgIDB4MDQsMHgxMSwweDBDLDB4N0YsMHgwMywweDExLDB4MEMsMHgwMCwgLyogOyBEMC1ENyAqLwotICAgICAgICAgICAgICAgIDB4MDMsMHgxMCwweDBELDB4MDAsMHgwMiwweDBGLDB4MEUsMHgwMSwgLyogOyBEOC1ERiAqLwotICAgICAgICAgICAgICAgIDB4MDEsMHgwRiwweDBGLDB4MDEsMHgwMSwweDBFLDB4MEYsMHgwMiwgLyogOyBFMC1FNyAqLwotICAgICAgICAgICAgICAgIDB4MDAsMHgwRCwweDEwLDB4MDMsMHg3RiwweDBDLDB4MTEsMHgwNCwgLyogOyBFQS1FRiAqLwotICAgICAgICAgICAgICAgIDB4N0YsMHgwQywweDExLDB4MDQsMHg3RiwweDBCLDB4MTEsMHgwNSwgLyogOyBGMC1GNyAqLwotICAgICAgICAgICAgICAgIDB4N0UsMHgwQSwweDEyLDB4MDYsMHg3RSwweDA5LDB4MTIsMHgwNyAgLyogOyBGOC1GRiAqLwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgezB4RkZGRiwKLSAgICAgICAgCXsKLSAgICAgICAgICAgICAgICAweDA0LDB4MUEsMHgwNCwweDdFLDB4MDIsMHgxQiwweDA1LDB4N0UsIC8qIDsgQzAtQzcgKi8KLSAgICAgICAgICAgICAgICAweDAxLDB4MUEsMHgwNywweDdFLDB4MDAsMHgxQSwweDA5LDB4N0QsIC8qIDsgQzgtQ0YgKi8KLSAgICAgICAgICAgICAgICAweDdGLDB4MTksMHgwQiwweDdELDB4N0UsMHgxOCwweDBELDB4N0QsIC8qIDsgRDAtRDcgKi8KLSAgICAgICAgICAgICAgICAweDdELDB4MTcsMHgxMCwweDdDLDB4N0QsMHgxNSwweDEyLDB4N0MsIC8qIDsgRDgtREYgKi8KLSAgICAgICAgICAgICAgICAweDdDLDB4MTQsMHgxNCwweDdDLDB4N0MsMHgxMiwweDE1LDB4N0QsIC8qIDsgRTAtRTcgKi8KLSAgICAgICAgICAgICAgICAweDdDLDB4MTAsMHgxNywweDdELDB4N0MsMHgwRCwweDE4LDB4N0YsIC8qIDsgRUEtRUYgKi8KLSAgICAgICAgICAgICAgICAweDdELDB4MEIsMHgxOSwweDdGLDB4N0QsMHgwOSwweDFBLDB4MDAsIC8qIDsgRjAtRjcgKi8KLSAgICAgICAgICAgICAgICAweDdELDB4MDcsMHgxQSwweDAyLDB4N0UsMHgwNSwweDFCLDB4MDIgIC8qIDsgRjgtRkYgKi8KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KK3N0YXRpYyBzdHJ1Y3QgWEdJMzAxQ19UYXA0VGltaW5nU3RydWN0IFBBTFRhcDRUaW1pbmdbXSA9IHsKKwl7NjAwLAl7CisJCTB4MDUsIDB4MTksIDB4MDUsIDB4N0QsIDB4MDMsIDB4MTksIDB4MDYsIDB4N0UsIC8qIDsgQzAtQzcgKi8KKwkJMHgwMiwgMHgxOSwgMHgwOCwgMHg3RCwgMHgwMSwgMHgxOCwgMHgwQSwgMHg3RCwgLyogOyBDOC1DRiAqLworCQkweDAwLCAweDE4LCAweDBDLCAweDdDLCAweDdGLCAweDE3LCAweDBFLCAweDdDLCAvKiA7IEQwLUQ3ICovCisJCTB4N0UsIDB4MTYsIDB4MEYsIDB4N0QsIDB4N0UsIDB4MTQsIDB4MTEsIDB4N0QsIC8qIDsgRDgtREYgKi8KKwkJMHg3RCwgMHgxMywgMHgxMywgMHg3RCwgMHg3RCwgMHgxMSwgMHgxNCwgMHg3RSwgLyogOyBFMC1FNyAqLworCQkweDdELCAweDBGLCAweDE2LCAweDdFLCAweDdELCAweDBFLCAweDE3LCAweDdFLCAvKiA7IEVBLUVGICovCisJCTB4N0QsIDB4MEMsIDB4MTgsIDB4N0YsIDB4N0QsIDB4MEEsIDB4MTgsIDB4MDEsIC8qIDsgRjAtRjcgKi8KKwkJMHg3RCwgMHgwOCwgMHgxOSwgMHgwMiwgMHg3RCwgMHgwNiwgMHgxOSwgMHgwNCAgLyogOyBGOC1GRiAqLworCQl9CisJfSwKKwl7NzY4LAl7CisJCTB4MDgsIDB4MTIsIDB4MDgsIDB4N0UsIDB4MDcsIDB4MTIsIDB4MDksIDB4N0UsIC8qIDsgQzAtQzcgKi8KKwkJMHgwNiwgMHgxMiwgMHgwQSwgMHg3RSwgMHgwNSwgMHgxMSwgMHgwQiwgMHg3RiwgLyogOyBDOC1DRiAqLworCQkweDA0LCAweDExLCAweDBDLCAweDdGLCAweDAzLCAweDExLCAweDBDLCAweDAwLCAvKiA7IEQwLUQ3ICovCisJCTB4MDMsIDB4MTAsIDB4MEQsIDB4MDAsIDB4MDIsIDB4MEYsIDB4MEUsIDB4MDEsIC8qIDsgRDgtREYgKi8KKwkJMHgwMSwgMHgwRiwgMHgwRiwgMHgwMSwgMHgwMSwgMHgwRSwgMHgwRiwgMHgwMiwgLyogOyBFMC1FNyAqLworCQkweDAwLCAweDBELCAweDEwLCAweDAzLCAweDdGLCAweDBDLCAweDExLCAweDA0LCAvKiA7IEVBLUVGICovCisJCTB4N0YsIDB4MEMsIDB4MTEsIDB4MDQsIDB4N0YsIDB4MEIsIDB4MTEsIDB4MDUsIC8qIDsgRjAtRjcgKi8KKwkJMHg3RSwgMHgwQSwgMHgxMiwgMHgwNiwgMHg3RSwgMHgwOSwgMHgxMiwgMHgwNyAgLyogOyBGOC1GRiAqLworCQl9CisJfSwKKwl7MHhGRkZGLCB7CisJCSAweDA0LCAweDFBLCAweDA0LCAweDdFLCAweDAyLCAweDFCLCAweDA1LCAweDdFLCAvKiA7IEMwLUM3ICovCisJCSAweDAxLCAweDFBLCAweDA3LCAweDdFLCAweDAwLCAweDFBLCAweDA5LCAweDdELCAvKiA7IEM4LUNGICovCisJCSAweDdGLCAweDE5LCAweDBCLCAweDdELCAweDdFLCAweDE4LCAweDBELCAweDdELCAvKiA7IEQwLUQ3ICovCisJCSAweDdELCAweDE3LCAweDEwLCAweDdDLCAweDdELCAweDE1LCAweDEyLCAweDdDLCAvKiA7IEQ4LURGICovCisJCSAweDdDLCAweDE0LCAweDE0LCAweDdDLCAweDdDLCAweDEyLCAweDE1LCAweDdELCAvKiA7IEUwLUU3ICovCisJCSAweDdDLCAweDEwLCAweDE3LCAweDdELCAweDdDLCAweDBELCAweDE4LCAweDdGLCAvKiA7IEVBLUVGICovCisJCSAweDdELCAweDBCLCAweDE5LCAweDdGLCAweDdELCAweDA5LCAweDFBLCAweDAwLCAvKiA7IEYwLUY3ICovCisJCSAweDdELCAweDA3LCAweDFBLCAweDAyLCAweDdFLCAweDA1LCAweDFCLCAweDAyICAvKiA7IEY4LUZGICovCisJCSB9CisJfQogfTsKIAotc3RhdGljIHN0cnVjdCBYR0kzMDFDX1RhcDRUaW1pbmdTdHJ1Y3QgTlRTQ1RhcDRUaW1pbmdbXSA9Ci17CitzdGF0aWMgc3RydWN0IFhHSTMwMUNfVGFwNFRpbWluZ1N0cnVjdCBOVFNDVGFwNFRpbWluZ1tdID0gewogCXs0ODAsCXsKLSAgICAgICAgICAgICAgCTB4MDQsMHgxQSwweDA0LDB4N0UsMHgwMywweDFBLDB4MDYsMHg3RCwgLyogOyBDMC1DNyAqLwotICAgICAgICAgICAgICAJMHgwMSwweDFBLDB4MDgsMHg3RCwweDAwLDB4MTksMHgwQSwweDdELCAvKiA7IEM4LUNGICovCi0gICAgICAgICAgICAgIAkweDdGLDB4MTksMHgwQywweDdDLDB4N0UsMHgxOCwweDBFLDB4N0MsIC8qIDsgRDAtRDcgKi8KLSAgICAgICAgICAgICAgCTB4N0UsMHgxNywweDEwLDB4N0IsMHg3RCwweDE1LDB4MTIsMHg3QywgLyogOyBEOC1ERiAqLwotICAgICAgICAgICAgICAJMHg3RCwweDEzLDB4MTMsMHg3RCwweDdDLDB4MTIsMHgxNSwweDdELCAvKiA7IEUwLUU3ICovCi0gICAgICAgICAgICAgIAkweDdDLDB4MTAsMHgxNywweDdELDB4N0MsMHgwRSwweDE4LDB4N0UsIC8qIDsgRUEtRUYgKi8KLSAgICAgICAgICAgICAgCTB4N0QsMHgwQywweDE5LDB4N0UsMHg3RCwweDBBLDB4MTksMHgwMCwgLyogOyBGMC1GNyAqLwotICAgICAgICAgICAgICAJMHg3RCwweDA4LDB4MUEsMHgwMSwweDdFLDB4MDYsMHgxQSwweDAyICAvKiA7IEY4LUZGICovCi0gICAgICAgIAl9Ci0gICAgICAgIH0sCi0gICAgICAgIHs2MDAsCXsKLSAgICAgICAgICAgICAgCTB4MDcsMHgxNCwweDA3LDB4N0UsMHgwNiwweDE0LDB4MDksMHg3RCwgLyogOyBDMC1DNyAqLwotICAgICAgICAgICAgICAJMHgwNSwweDE0LDB4MEEsMHg3RCwweDA0LDB4MTMsMHgwQiwweDdFLCAvKiA7IEM4LUNGICovCi0gICAgICAgICAgICAgIAkweDAzLDB4MTMsMHgwQywweDdFLDB4MDIsMHgxMiwweDBELDB4N0YsIC8qIDsgRDAtRDcgKi8KLSAgICAgICAgICAgICAgCTB4MDEsMHgxMiwweDBFLDB4N0YsMHgwMSwweDExLDB4MEYsMHg3RiwgLyogOyBEOC1ERiAqLwotICAgICAgICAgICAgICAJMHgwMSwweDEwLDB4MTAsMHgwMCwweDdGLDB4MEYsMHgxMSwweDAxLCAvKiA7IEUwLUU3ICovCi0gICAgICAgICAgICAgIAkweDdGLDB4MEUsMHgxMiwweDAxLDB4N0UsMHgwRCwweDEyLDB4MDMsIC8qIDsgRUEtRUYgKi8KLSAgICAgICAgICAgICAgCTB4N0UsMHgwQywweDEzLDB4MDMsMHg3RSwweDBCLDB4MTMsMHgwNCwgLyogOyBGMC1GNyAqLwotICAgICAgICAgICAgICAJMHg3RSwweDBBLDB4MTQsMHgwNCwweDdELDB4MDksMHgxNCwweDA2ICAvKiA7IEY4LUZGICovCi0gICAgICAgIAl9Ci0gICAgICAgIH0sCi0gICAgICAgIHsweEZGRkYsCi0gICAgICAgIAl7Ci0gICAgICAgICAgICAgIAkweDA5LDB4MEYsMHgwOSwweDdGLDB4MDgsMHgwRiwweDA5LDB4MDAsIC8qIDsgQzAtQzcgKi8KLSAgICAgICAgICAgICAgCTB4MDcsMHgwRiwweDBBLDB4MDAsMHgwNiwweDBGLDB4MEEsMHgwMSwgLyogOyBDOC1DRiAqLwotICAgICAgICAgICAgICAJMHgwNiwweDBFLDB4MEIsMHgwMSwweDA1LDB4MEUsMHgwQiwweDAyLCAvKiA7IEQwLUQ3ICovCi0gICAgICAgICAgICAgIAkweDA0LDB4MEUsMHgwQywweDAyLDB4MDQsMHgwRCwweDBDLDB4MDMsIC8qIDsgRDgtREYgKi8KLSAgICAgICAgICAgICAgCTB4MDMsMHgwRCwweDBELDB4MDMsMHgwMiwweDBDLDB4MEQsMHgwNSwgLyogOyBFMC1FNyAqLwotICAgICAgICAgICAgICAJMHgwMiwweDBDLDB4MEUsMHgwNCwweDAxLDB4MEIsMHgwRSwweDA2LCAvKiA7IEVBLUVGICovCi0gICAgICAgICAgICAgIAkweDAxLDB4MEIsMHgwRSwweDA2LDB4MDAsMHgwQSwweDBGLDB4MDcsIC8qIDsgRjAtRjcgKi8KLSAgICAgICAgICAgICAgCTB4MDAsMHgwQSwweDBGLDB4MDcsMHgwMCwweDA5LDB4MEYsMHgwOCAgLyogOyBGOC1GRiAqLwotICAgICAgICAJfQotICAgICAgICB9CisJCTB4MDQsIDB4MUEsIDB4MDQsIDB4N0UsIDB4MDMsIDB4MUEsIDB4MDYsIDB4N0QsIC8qIDsgQzAtQzcgKi8KKwkJMHgwMSwgMHgxQSwgMHgwOCwgMHg3RCwgMHgwMCwgMHgxOSwgMHgwQSwgMHg3RCwgLyogOyBDOC1DRiAqLworCQkweDdGLCAweDE5LCAweDBDLCAweDdDLCAweDdFLCAweDE4LCAweDBFLCAweDdDLCAvKiA7IEQwLUQ3ICovCisJCTB4N0UsIDB4MTcsIDB4MTAsIDB4N0IsIDB4N0QsIDB4MTUsIDB4MTIsIDB4N0MsIC8qIDsgRDgtREYgKi8KKwkJMHg3RCwgMHgxMywgMHgxMywgMHg3RCwgMHg3QywgMHgxMiwgMHgxNSwgMHg3RCwgLyogOyBFMC1FNyAqLworCQkweDdDLCAweDEwLCAweDE3LCAweDdELCAweDdDLCAweDBFLCAweDE4LCAweDdFLCAvKiA7IEVBLUVGICovCisJCTB4N0QsIDB4MEMsIDB4MTksIDB4N0UsIDB4N0QsIDB4MEEsIDB4MTksIDB4MDAsIC8qIDsgRjAtRjcgKi8KKwkJMHg3RCwgMHgwOCwgMHgxQSwgMHgwMSwgMHg3RSwgMHgwNiwgMHgxQSwgMHgwMiAgLyogOyBGOC1GRiAqLworCQl9CisJfSwKKwl7NjAwLAl7CisJCTB4MDcsIDB4MTQsIDB4MDcsIDB4N0UsIDB4MDYsIDB4MTQsIDB4MDksIDB4N0QsIC8qIDsgQzAtQzcgKi8KKwkJMHgwNSwgMHgxNCwgMHgwQSwgMHg3RCwgMHgwNCwgMHgxMywgMHgwQiwgMHg3RSwgLyogOyBDOC1DRiAqLworCQkweDAzLCAweDEzLCAweDBDLCAweDdFLCAweDAyLCAweDEyLCAweDBELCAweDdGLCAvKiA7IEQwLUQ3ICovCisJCTB4MDEsIDB4MTIsIDB4MEUsIDB4N0YsIDB4MDEsIDB4MTEsIDB4MEYsIDB4N0YsIC8qIDsgRDgtREYgKi8KKwkJMHgwMSwgMHgxMCwgMHgxMCwgMHgwMCwgMHg3RiwgMHgwRiwgMHgxMSwgMHgwMSwgLyogOyBFMC1FNyAqLworCQkweDdGLCAweDBFLCAweDEyLCAweDAxLCAweDdFLCAweDBELCAweDEyLCAweDAzLCAvKiA7IEVBLUVGICovCisJCTB4N0UsIDB4MEMsIDB4MTMsIDB4MDMsIDB4N0UsIDB4MEIsIDB4MTMsIDB4MDQsIC8qIDsgRjAtRjcgKi8KKwkJMHg3RSwgMHgwQSwgMHgxNCwgMHgwNCwgMHg3RCwgMHgwOSwgMHgxNCwgMHgwNiAgLyogOyBGOC1GRiAqLworCQl9CisJfSwKKwl7MHhGRkZGLCB7CisJCSAweDA5LCAweDBGLCAweDA5LCAweDdGLCAweDA4LCAweDBGLCAweDA5LCAweDAwLCAvKiA7IEMwLUM3ICovCisJCSAweDA3LCAweDBGLCAweDBBLCAweDAwLCAweDA2LCAweDBGLCAweDBBLCAweDAxLCAvKiA7IEM4LUNGICovCisJCSAweDA2LCAweDBFLCAweDBCLCAweDAxLCAweDA1LCAweDBFLCAweDBCLCAweDAyLCAvKiA7IEQwLUQ3ICovCisJCSAweDA0LCAweDBFLCAweDBDLCAweDAyLCAweDA0LCAweDBELCAweDBDLCAweDAzLCAvKiA7IEQ4LURGICovCisJCSAweDAzLCAweDBELCAweDBELCAweDAzLCAweDAyLCAweDBDLCAweDBELCAweDA1LCAvKiA7IEUwLUU3ICovCisJCSAweDAyLCAweDBDLCAweDBFLCAweDA0LCAweDAxLCAweDBCLCAweDBFLCAweDA2LCAvKiA7IEVBLUVGICovCisJCSAweDAxLCAweDBCLCAweDBFLCAweDA2LCAweDAwLCAweDBBLCAweDBGLCAweDA3LCAvKiA7IEYwLUY3ICovCisJCSAweDAwLCAweDBBLCAweDBGLCAweDA3LCAweDAwLCAweDA5LCAweDBGLCAweDA4ICAvKiA7IEY4LUZGICovCisJCSB9CisJfQogfTsKIAotc3RhdGljIHN0cnVjdCBYR0kzMDFDX1RhcDRUaW1pbmdTdHJ1Y3QgWVBiUHI1MjVwVGFwNFRpbWluZ1tdID0KLXsKK3N0YXRpYyBzdHJ1Y3QgWEdJMzAxQ19UYXA0VGltaW5nU3RydWN0IFlQYlByNTI1cFRhcDRUaW1pbmdbXSA9IHsKIAl7NDgwLAl7Ci0gICAgICAgICAgICAgIAkweDA0LDB4MUEsMHgwNCwweDdFLDB4MDMsMHgxQSwweDA2LDB4N0QsIC8qIDsgQzAtQzcgKi8KLSAgICAgICAgICAgICAgCTB4MDEsMHgxQSwweDA4LDB4N0QsMHgwMCwweDE5LDB4MEEsMHg3RCwgLyogOyBDOC1DRiAqLwotICAgICAgICAgICAgICAJMHg3RiwweDE5LDB4MEMsMHg3QywweDdFLDB4MTgsMHgwRSwweDdDLCAvKiA7IEQwLUQ3ICovCi0gICAgICAgICAgICAgIAkweDdFLDB4MTcsMHgxMCwweDdCLDB4N0QsMHgxNSwweDEyLDB4N0MsIC8qIDsgRDgtREYgKi8KLSAgICAgICAgICAgICAgCTB4N0QsMHgxMywweDEzLDB4N0QsMHg3QywweDEyLDB4MTUsMHg3RCwgLyogOyBFMC1FNyAqLwotICAgICAgICAgICAgICAJMHg3QywweDEwLDB4MTcsMHg3RCwweDdDLDB4MEUsMHgxOCwweDdFLCAvKiA7IEVBLUVGICovCi0gICAgICAgICAgICAgIAkweDdELDB4MEMsMHgxOSwweDdFLDB4N0QsMHgwQSwweDE5LDB4MDAsIC8qIDsgRjAtRjcgKi8KLSAgICAgICAgICAgICAgCTB4N0QsMHgwOCwweDFBLDB4MDEsMHg3RSwweDA2LDB4MUEsMHgwMiAgLyogOyBGOC1GRiAqLwotICAgICAgICAJfQotICAgICAgICB9LAotICAgICAgICB7NjAwLAl7Ci0gICAgICAgICAgICAgIAkweDA3LDB4MTQsMHgwNywweDdFLDB4MDYsMHgxNCwweDA5LDB4N0QsIC8qIDsgQzAtQzcgKi8KLSAgICAgICAgICAgICAgCTB4MDUsMHgxNCwweDBBLDB4N0QsMHgwNCwweDEzLDB4MEIsMHg3RSwgLyogOyBDOC1DRiAqLwotICAgICAgICAgICAgICAJMHgwMywweDEzLDB4MEMsMHg3RSwweDAyLDB4MTIsMHgwRCwweDdGLCAvKiA7IEQwLUQ3ICovCi0gICAgICAgICAgICAgIAkweDAxLDB4MTIsMHgwRSwweDdGLDB4MDEsMHgxMSwweDBGLDB4N0YsIC8qIDsgRDgtREYgKi8KLSAgICAgICAgICAgICAgCTB4MDEsMHgxMCwweDEwLDB4MDAsMHg3RiwweDBGLDB4MTEsMHgwMSwgLyogOyBFMC1FNyAqLwotICAgICAgICAgICAgICAJMHg3RiwweDBFLDB4MTIsMHgwMSwweDdFLDB4MEQsMHgxMiwweDAzLCAvKiA7IEVBLUVGICovCi0gICAgICAgICAgICAgIAkweDdFLDB4MEMsMHgxMywweDAzLDB4N0UsMHgwQiwweDEzLDB4MDQsIC8qIDsgRjAtRjcgKi8KLSAgICAgICAgICAgICAgCTB4N0UsMHgwQSwweDE0LDB4MDQsMHg3RCwweDA5LDB4MTQsMHgwNiAgLyogOyBGOC1GRiAqLwotICAgICAgICAJfQotICAgICAgICB9LAotICAgICAgICB7MHhGRkZGLAotICAgICAgICAJewotICAgICAgICAgICAgICAJMHgwOSwweDBGLDB4MDksMHg3RiwweDA4LDB4MEYsMHgwOSwweDAwLCAvKiA7IEMwLUM3ICovCi0gICAgICAgICAgICAgIAkweDA3LDB4MEYsMHgwQSwweDAwLDB4MDYsMHgwRiwweDBBLDB4MDEsIC8qIDsgQzgtQ0YgKi8KLSAgICAgICAgICAgICAgCTB4MDYsMHgwRSwweDBCLDB4MDEsMHgwNSwweDBFLDB4MEIsMHgwMiwgLyogOyBEMC1ENyAqLwotICAgICAgICAgICAgICAJMHgwNCwweDBFLDB4MEMsMHgwMiwweDA0LDB4MEQsMHgwQywweDAzLCAvKiA7IEQ4LURGICovCi0gICAgICAgICAgICAgIAkweDAzLDB4MEQsMHgwRCwweDAzLDB4MDIsMHgwQywweDBELDB4MDUsIC8qIDsgRTAtRTcgKi8KLSAgICAgICAgICAgICAgCTB4MDIsMHgwQywweDBFLDB4MDQsMHgwMSwweDBCLDB4MEUsMHgwNiwgLyogOyBFQS1FRiAqLwotICAgICAgICAgICAgICAJMHgwMSwweDBCLDB4MEUsMHgwNiwweDAwLDB4MEEsMHgwRiwweDA3LCAvKiA7IEYwLUY3ICovCi0gICAgICAgICAgICAgIAkweDAwLDB4MEEsMHgwRiwweDA3LDB4MDAsMHgwOSwweDBGLDB4MDggIC8qIDsgRjgtRkYgKi8KLSAgICAgICAgCX0KLSAgICAgICAgfQorCQkweDA0LCAweDFBLCAweDA0LCAweDdFLCAweDAzLCAweDFBLCAweDA2LCAweDdELCAvKiA7IEMwLUM3ICovCisJCTB4MDEsIDB4MUEsIDB4MDgsIDB4N0QsIDB4MDAsIDB4MTksIDB4MEEsIDB4N0QsIC8qIDsgQzgtQ0YgKi8KKwkJMHg3RiwgMHgxOSwgMHgwQywgMHg3QywgMHg3RSwgMHgxOCwgMHgwRSwgMHg3QywgLyogOyBEMC1ENyAqLworCQkweDdFLCAweDE3LCAweDEwLCAweDdCLCAweDdELCAweDE1LCAweDEyLCAweDdDLCAvKiA7IEQ4LURGICovCisJCTB4N0QsIDB4MTMsIDB4MTMsIDB4N0QsIDB4N0MsIDB4MTIsIDB4MTUsIDB4N0QsIC8qIDsgRTAtRTcgKi8KKwkJMHg3QywgMHgxMCwgMHgxNywgMHg3RCwgMHg3QywgMHgwRSwgMHgxOCwgMHg3RSwgLyogOyBFQS1FRiAqLworCQkweDdELCAweDBDLCAweDE5LCAweDdFLCAweDdELCAweDBBLCAweDE5LCAweDAwLCAvKiA7IEYwLUY3ICovCisJCTB4N0QsIDB4MDgsIDB4MUEsIDB4MDEsIDB4N0UsIDB4MDYsIDB4MUEsIDB4MDIgIC8qIDsgRjgtRkYgKi8KKwkJfQorCX0sCisJezYwMCwJeworCQkweDA3LCAweDE0LCAweDA3LCAweDdFLCAweDA2LCAweDE0LCAweDA5LCAweDdELCAvKiA7IEMwLUM3ICovCisJCTB4MDUsIDB4MTQsIDB4MEEsIDB4N0QsIDB4MDQsIDB4MTMsIDB4MEIsIDB4N0UsIC8qIDsgQzgtQ0YgKi8KKwkJMHgwMywgMHgxMywgMHgwQywgMHg3RSwgMHgwMiwgMHgxMiwgMHgwRCwgMHg3RiwgLyogOyBEMC1ENyAqLworCQkweDAxLCAweDEyLCAweDBFLCAweDdGLCAweDAxLCAweDExLCAweDBGLCAweDdGLCAvKiA7IEQ4LURGICovCisJCTB4MDEsIDB4MTAsIDB4MTAsIDB4MDAsIDB4N0YsIDB4MEYsIDB4MTEsIDB4MDEsIC8qIDsgRTAtRTcgKi8KKwkJMHg3RiwgMHgwRSwgMHgxMiwgMHgwMSwgMHg3RSwgMHgwRCwgMHgxMiwgMHgwMywgLyogOyBFQS1FRiAqLworCQkweDdFLCAweDBDLCAweDEzLCAweDAzLCAweDdFLCAweDBCLCAweDEzLCAweDA0LCAvKiA7IEYwLUY3ICovCisJCTB4N0UsIDB4MEEsIDB4MTQsIDB4MDQsIDB4N0QsIDB4MDksIDB4MTQsIDB4MDYgIC8qIDsgRjgtRkYgKi8KKwkJfQorCX0sCisJezB4RkZGRiwgeworCQkweDA5LCAweDBGLCAweDA5LCAweDdGLCAweDA4LCAweDBGLCAweDA5LCAweDAwLCAvKiA7IEMwLUM3ICovCisJCTB4MDcsIDB4MEYsIDB4MEEsIDB4MDAsIDB4MDYsIDB4MEYsIDB4MEEsIDB4MDEsIC8qIDsgQzgtQ0YgKi8KKwkJMHgwNiwgMHgwRSwgMHgwQiwgMHgwMSwgMHgwNSwgMHgwRSwgMHgwQiwgMHgwMiwgLyogOyBEMC1ENyAqLworCQkweDA0LCAweDBFLCAweDBDLCAweDAyLCAweDA0LCAweDBELCAweDBDLCAweDAzLCAvKiA7IEQ4LURGICovCisJCTB4MDMsIDB4MEQsIDB4MEQsIDB4MDMsIDB4MDIsIDB4MEMsIDB4MEQsIDB4MDUsIC8qIDsgRTAtRTcgKi8KKwkJMHgwMiwgMHgwQywgMHgwRSwgMHgwNCwgMHgwMSwgMHgwQiwgMHgwRSwgMHgwNiwgLyogOyBFQS1FRiAqLworCQkweDAxLCAweDBCLCAweDBFLCAweDA2LCAweDAwLCAweDBBLCAweDBGLCAweDA3LCAvKiA7IEYwLUY3ICovCisJCTB4MDAsIDB4MEEsIDB4MEYsIDB4MDcsIDB4MDAsIDB4MDksIDB4MEYsIDB4MDggIC8qIDsgRjgtRkYgKi8KKwkJfQorCX0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgWEdJMzAxQ19UYXA0VGltaW5nU3RydWN0IFlQYlByNTI1aVRhcDRUaW1pbmdbXSA9Ci17CitzdGF0aWMgc3RydWN0IFhHSTMwMUNfVGFwNFRpbWluZ1N0cnVjdCBZUGJQcjUyNWlUYXA0VGltaW5nW10gPSB7CiAJezQ4MCwJewotICAgICAgICAgICAgICAJMHgwNCwweDFBLDB4MDQsMHg3RSwweDAzLDB4MUEsMHgwNiwweDdELCAvKiA7IEMwLUM3ICovCi0gICAgICAgICAgICAgIAkweDAxLDB4MUEsMHgwOCwweDdELDB4MDAsMHgxOSwweDBBLDB4N0QsIC8qIDsgQzgtQ0YgKi8KLSAgICAgICAgICAgICAgCTB4N0YsMHgxOSwweDBDLDB4N0MsMHg3RSwweDE4LDB4MEUsMHg3QywgLyogOyBEMC1ENyAqLwotICAgICAgICAgICAgICAJMHg3RSwweDE3LDB4MTAsMHg3QiwweDdELDB4MTUsMHgxMiwweDdDLCAvKiA7IEQ4LURGICovCi0gICAgICAgICAgICAgIAkweDdELDB4MTMsMHgxMywweDdELDB4N0MsMHgxMiwweDE1LDB4N0QsIC8qIDsgRTAtRTcgKi8KLSAgICAgICAgICAgICAgCTB4N0MsMHgxMCwweDE3LDB4N0QsMHg3QywweDBFLDB4MTgsMHg3RSwgLyogOyBFQS1FRiAqLwotICAgICAgICAgICAgICAJMHg3RCwweDBDLDB4MTksMHg3RSwweDdELDB4MEEsMHgxOSwweDAwLCAvKiA7IEYwLUY3ICovCi0gICAgICAgICAgICAgIAkweDdELDB4MDgsMHgxQSwweDAxLDB4N0UsMHgwNiwweDFBLDB4MDIgIC8qIDsgRjgtRkYgKi8KLSAgICAgICAgCX0KLSAgICAgICAgfSwKLSAgICAgICAgezYwMCwJewotICAgICAgICAgICAgICAJMHgwNywweDE0LDB4MDcsMHg3RSwweDA2LDB4MTQsMHgwOSwweDdELCAvKiA7IEMwLUM3ICovCi0gICAgICAgICAgICAgIAkweDA1LDB4MTQsMHgwQSwweDdELDB4MDQsMHgxMywweDBCLDB4N0UsIC8qIDsgQzgtQ0YgKi8KLSAgICAgICAgICAgICAgCTB4MDMsMHgxMywweDBDLDB4N0UsMHgwMiwweDEyLDB4MEQsMHg3RiwgLyogOyBEMC1ENyAqLwotICAgICAgICAgICAgICAJMHgwMSwweDEyLDB4MEUsMHg3RiwweDAxLDB4MTEsMHgwRiwweDdGLCAvKiA7IEQ4LURGICovCi0gICAgICAgICAgICAgIAkweDAxLDB4MTAsMHgxMCwweDAwLDB4N0YsMHgwRiwweDExLDB4MDEsIC8qIDsgRTAtRTcgKi8KLSAgICAgICAgICAgICAgCTB4N0YsMHgwRSwweDEyLDB4MDEsMHg3RSwweDBELDB4MTIsMHgwMywgLyogOyBFQS1FRiAqLwotICAgICAgICAgICAgICAJMHg3RSwweDBDLDB4MTMsMHgwMywweDdFLDB4MEIsMHgxMywweDA0LCAvKiA7IEYwLUY3ICovCi0gICAgICAgICAgICAgIAkweDdFLDB4MEEsMHgxNCwweDA0LDB4N0QsMHgwOSwweDE0LDB4MDYgIC8qIDsgRjgtRkYgKi8KLSAgICAgICAgCX0KLSAgICAgICAgfSwKLSAgICAgICAgezB4RkZGRiwKLSAgICAgICAgCXsKLSAgICAgICAgICAgICAgCTB4MDksMHgwRiwweDA5LDB4N0YsMHgwOCwweDBGLDB4MDksMHgwMCwgLyogOyBDMC1DNyAqLwotICAgICAgICAgICAgICAJMHgwNywweDBGLDB4MEEsMHgwMCwweDA2LDB4MEYsMHgwQSwweDAxLCAvKiA7IEM4LUNGICovCi0gICAgICAgICAgICAgIAkweDA2LDB4MEUsMHgwQiwweDAxLDB4MDUsMHgwRSwweDBCLDB4MDIsIC8qIDsgRDAtRDcgKi8KLSAgICAgICAgICAgICAgCTB4MDQsMHgwRSwweDBDLDB4MDIsMHgwNCwweDBELDB4MEMsMHgwMywgLyogOyBEOC1ERiAqLwotICAgICAgICAgICAgICAJMHgwMywweDBELDB4MEQsMHgwMywweDAyLDB4MEMsMHgwRCwweDA1LCAvKiA7IEUwLUU3ICovCi0gICAgICAgICAgICAgIAkweDAyLDB4MEMsMHgwRSwweDA0LDB4MDEsMHgwQiwweDBFLDB4MDYsIC8qIDsgRUEtRUYgKi8KLSAgICAgICAgICAgICAgCTB4MDEsMHgwQiwweDBFLDB4MDYsMHgwMCwweDBBLDB4MEYsMHgwNywgLyogOyBGMC1GNyAqLwotICAgICAgICAgICAgICAJMHgwMCwweDBBLDB4MEYsMHgwNywweDAwLDB4MDksMHgwRiwweDA4ICAvKiA7IEY4LUZGICovCi0gICAgICAgIAl9Ci0gICAgICAgIH0KKwkJMHgwNCwgMHgxQSwgMHgwNCwgMHg3RSwgMHgwMywgMHgxQSwgMHgwNiwgMHg3RCwgLyogOyBDMC1DNyAqLworCQkweDAxLCAweDFBLCAweDA4LCAweDdELCAweDAwLCAweDE5LCAweDBBLCAweDdELCAvKiA7IEM4LUNGICovCisJCTB4N0YsIDB4MTksIDB4MEMsIDB4N0MsIDB4N0UsIDB4MTgsIDB4MEUsIDB4N0MsIC8qIDsgRDAtRDcgKi8KKwkJMHg3RSwgMHgxNywgMHgxMCwgMHg3QiwgMHg3RCwgMHgxNSwgMHgxMiwgMHg3QywgLyogOyBEOC1ERiAqLworCQkweDdELCAweDEzLCAweDEzLCAweDdELCAweDdDLCAweDEyLCAweDE1LCAweDdELCAvKiA7IEUwLUU3ICovCisJCTB4N0MsIDB4MTAsIDB4MTcsIDB4N0QsIDB4N0MsIDB4MEUsIDB4MTgsIDB4N0UsIC8qIDsgRUEtRUYgKi8KKwkJMHg3RCwgMHgwQywgMHgxOSwgMHg3RSwgMHg3RCwgMHgwQSwgMHgxOSwgMHgwMCwgLyogOyBGMC1GNyAqLworCQkweDdELCAweDA4LCAweDFBLCAweDAxLCAweDdFLCAweDA2LCAweDFBLCAweDAyICAvKiA7IEY4LUZGICovCisJCX0KKwl9LAorCXs2MDAsCXsKKwkJMHgwNywgMHgxNCwgMHgwNywgMHg3RSwgMHgwNiwgMHgxNCwgMHgwOSwgMHg3RCwgLyogOyBDMC1DNyAqLworCQkweDA1LCAweDE0LCAweDBBLCAweDdELCAweDA0LCAweDEzLCAweDBCLCAweDdFLCAvKiA7IEM4LUNGICovCisJCTB4MDMsIDB4MTMsIDB4MEMsIDB4N0UsIDB4MDIsIDB4MTIsIDB4MEQsIDB4N0YsIC8qIDsgRDAtRDcgKi8KKwkJMHgwMSwgMHgxMiwgMHgwRSwgMHg3RiwgMHgwMSwgMHgxMSwgMHgwRiwgMHg3RiwgLyogOyBEOC1ERiAqLworCQkweDAxLCAweDEwLCAweDEwLCAweDAwLCAweDdGLCAweDBGLCAweDExLCAweDAxLCAvKiA7IEUwLUU3ICovCisJCTB4N0YsIDB4MEUsIDB4MTIsIDB4MDEsIDB4N0UsIDB4MEQsIDB4MTIsIDB4MDMsIC8qIDsgRUEtRUYgKi8KKwkJMHg3RSwgMHgwQywgMHgxMywgMHgwMywgMHg3RSwgMHgwQiwgMHgxMywgMHgwNCwgLyogOyBGMC1GNyAqLworCQkweDdFLCAweDBBLCAweDE0LCAweDA0LCAweDdELCAweDA5LCAweDE0LCAweDA2ICAvKiA7IEY4LUZGICovCisJCX0KKwl9LAorCXsweEZGRkYsIHsKKwkJMHgwOSwgMHgwRiwgMHgwOSwgMHg3RiwgMHgwOCwgMHgwRiwgMHgwOSwgMHgwMCwgLyogOyBDMC1DNyAqLworCQkweDA3LCAweDBGLCAweDBBLCAweDAwLCAweDA2LCAweDBGLCAweDBBLCAweDAxLCAvKiA7IEM4LUNGICovCisJCTB4MDYsIDB4MEUsIDB4MEIsIDB4MDEsIDB4MDUsIDB4MEUsIDB4MEIsIDB4MDIsIC8qIDsgRDAtRDcgKi8KKwkJMHgwNCwgMHgwRSwgMHgwQywgMHgwMiwgMHgwNCwgMHgwRCwgMHgwQywgMHgwMywgLyogOyBEOC1ERiAqLworCQkweDAzLCAweDBELCAweDBELCAweDAzLCAweDAyLCAweDBDLCAweDBELCAweDA1LCAvKiA7IEUwLUU3ICovCisJCTB4MDIsIDB4MEMsIDB4MEUsIDB4MDQsIDB4MDEsIDB4MEIsIDB4MEUsIDB4MDYsIC8qIDsgRUEtRUYgKi8KKwkJMHgwMSwgMHgwQiwgMHgwRSwgMHgwNiwgMHgwMCwgMHgwQSwgMHgwRiwgMHgwNywgLyogOyBGMC1GNyAqLworCQkweDAwLCAweDBBLCAweDBGLCAweDA3LCAweDAwLCAweDA5LCAweDBGLCAweDA4ICAvKiA7IEY4LUZGICovCisJCX0KKwl9CiB9OwogCi1zdGF0aWMgc3RydWN0IFhHSTMwMUNfVGFwNFRpbWluZ1N0cnVjdCBZUGJQcjc1MHBUYXA0VGltaW5nW10gPQoteyAgICAgICAgezB4RkZGRiwKLSAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIDB4MDUsMHgxOSwweDA1LDB4N0QsMHgwMywweDE5LDB4MDYsMHg3RSwgLyogOyBDMC1DNyAqLwotICAgICAgICAgICAgICAgMHgwMiwweDE5LDB4MDgsMHg3RCwweDAxLDB4MTgsMHgwQSwweDdELCAvKiA7IEM4LUNGICovCi0gICAgICAgICAgICAgICAweDAwLDB4MTgsMHgwQywweDdDLDB4N0YsMHgxNywweDBFLDB4N0MsIC8qIDsgRDAtRDcgKi8KLSAgICAgICAgICAgICAgIDB4N0UsMHgxNiwweDBGLDB4N0QsMHg3RSwweDE0LDB4MTEsMHg3RCwgLyogOyBEOC1ERiAqLwotICAgICAgICAgICAgICAgMHg3RCwweDEzLDB4MTMsMHg3RCwweDdELDB4MTEsMHgxNCwweDdFLCAvKiA7IEUwLUU3ICovCi0gICAgICAgICAgICAgICAweDdELDB4MEYsMHgxNiwweDdFLDB4N0QsMHgwRSwweDE3LDB4N0UsIC8qIDsgRUEtRUYgKi8KLSAgICAgICAgICAgICAgIDB4N0QsMHgwQywweDE4LDB4N0YsMHg3RCwweDBBLDB4MTgsMHgwMSwgLyogOyBGMC1GNyAqLwotICAgICAgICAgICAgICAgMHg3RCwweDA4LDB4MTksMHgwMiwweDdELDB4MDYsMHgxOSwweDA0IC8qIEY4LUZGICovCi0gICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KK3N0YXRpYyBzdHJ1Y3QgWEdJMzAxQ19UYXA0VGltaW5nU3RydWN0IFlQYlByNzUwcFRhcDRUaW1pbmdbXSA9IHsKKwl7MHhGRkZGLCB7CisJCSAweDA1LCAweDE5LCAweDA1LCAweDdELCAweDAzLCAweDE5LCAweDA2LCAweDdFLCAvKiA7IEMwLUM3ICovCisJCSAweDAyLCAweDE5LCAweDA4LCAweDdELCAweDAxLCAweDE4LCAweDBBLCAweDdELCAvKiA7IEM4LUNGICovCisJCSAweDAwLCAweDE4LCAweDBDLCAweDdDLCAweDdGLCAweDE3LCAweDBFLCAweDdDLCAvKiA7IEQwLUQ3ICovCisJCSAweDdFLCAweDE2LCAweDBGLCAweDdELCAweDdFLCAweDE0LCAweDExLCAweDdELCAvKiA7IEQ4LURGICovCisJCSAweDdELCAweDEzLCAweDEzLCAweDdELCAweDdELCAweDExLCAweDE0LCAweDdFLCAvKiA7IEUwLUU3ICovCisJCSAweDdELCAweDBGLCAweDE2LCAweDdFLCAweDdELCAweDBFLCAweDE3LCAweDdFLCAvKiA7IEVBLUVGICovCisJCSAweDdELCAweDBDLCAweDE4LCAweDdGLCAweDdELCAweDBBLCAweDE4LCAweDAxLCAvKiA7IEYwLUY3ICovCisJCSAweDdELCAweDA4LCAweDE5LCAweDAyLCAweDdELCAweDA2LCAweDE5LCAweDA0IC8qIEY4LUZGICovCisJCSB9CisJfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl91dGlsLmMgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfdXRpbC5jCmluZGV4IGE5N2U0NGYuLmVhMmI3OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl91dGlsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX3V0aWwuYwpAQCAtMyw3ICszLDcgQEAKICNpbmNsdWRlICJ2Yl9zdHJ1Y3QuaCIKIAogI2luY2x1ZGUgIlhHSWZiLmgiCi0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaW5jbHVkZSAidmJfdXRpbC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZnYXR5cGVzLmggYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmdhdHlwZXMuaAppbmRleCBkNjEzZTg0Li41YWViM2E0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmdhdHlwZXMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmdhdHlwZXMuaApAQCAtMSw0ICsxLDMgQEAKLQogI2lmbmRlZiBfVkdBVFlQRVNfCiAjZGVmaW5lIF9WR0FUWVBFU18KIApAQCAtNiw3OSArNSw3OSBAQAogCiAjaWZuZGVmIFhHSV9WQl9DSElQX1RZUEUKIGVudW0gWEdJX1ZCX0NISVBfVFlQRSB7Ci0gICAgVkJfQ0hJUF9MZWdhY3kgPSAwLAotICAgIFZCX0NISVBfMzAxLAotICAgIFZCX0NISVBfMzAxQiwKLSAgICBWQl9DSElQXzMwMUxWLAotICAgIFZCX0NISVBfMzAyLAotICAgIFZCX0NISVBfMzAyQiwKLSAgICBWQl9DSElQXzMwMkxWLAotICAgIFZCX0NISVBfMzAxQywKLSAgICBWQl9DSElQXzMwMkVMViwKLSAgICBWQl9DSElQX1VOS05PV04sIC8qIG90aGVyIHZpZGVvIGJyaWRnZSBvciBubyB2aWRlbyBicmlkZ2UgKi8KLSAgICBNQVhfVkJfQ0hJUAorCVZCX0NISVBfTGVnYWN5ID0gMCwKKwlWQl9DSElQXzMwMSwKKwlWQl9DSElQXzMwMUIsCisJVkJfQ0hJUF8zMDFMViwKKwlWQl9DSElQXzMwMiwKKwlWQl9DSElQXzMwMkIsCisJVkJfQ0hJUF8zMDJMViwKKwlWQl9DSElQXzMwMUMsCisJVkJfQ0hJUF8zMDJFTFYsCisJVkJfQ0hJUF9VTktOT1dOLCAvKiBvdGhlciB2aWRlbyBicmlkZ2Ugb3Igbm8gdmlkZW8gYnJpZGdlICovCisJTUFYX1ZCX0NISVAKIH07CiAjZW5kaWYKIAogI2lmbmRlZiBYR0lfTENEX1RZUEUKIGVudW0gWEdJX0xDRF9UWVBFIHsKLSAgICBMQ0RfSU5WQUxJRCA9IDAsCi0gICAgTENEXzMyMHg0ODAsICAgICAgIC8qIEZTVE4sIERTVE4gKi8KLSAgICBMQ0RfNjQweDQ4MCwKLSAgICBMQ0RfNjQweDQ4MF8yLCAgICAgLyogRlNUTiwgRFNUTiAqLwotICAgIExDRF82NDB4NDgwXzMsICAgICAvKiBGU1ROLCBEU1ROICovCi0gICAgTENEXzgwMHg2MDAsCi0gICAgTENEXzg0OHg0ODAsCi0gICAgTENEXzEwMjR4NjAwLAotICAgIExDRF8xMDI0eDc2OCwKLSAgICBMQ0RfMTE1Mng3NjgsCi0gICAgTENEXzExNTJ4ODY0LAotICAgIExDRF8xMjgweDcyMCwKLSAgICBMQ0RfMTI4MHg3NjgsCi0gICAgTENEXzEyODB4ODAwLAotICAgIExDRF8xMjgweDk2MCwKLSAgICBMQ0RfMTI4MHgxMDI0LAotICAgIExDRF8xNDAweDEwNTAsCi0gICAgTENEXzE2MDB4MTIwMCwKLSAgICBMQ0RfMTY4MHgxMDUwLAotICAgIExDRF8xOTIweDE0NDAsCi0gICAgTENEXzIwNDh4MTUzNiwKLSAgICBMQ0RfQ1VTVE9NLAotICAgIExDRF9VTktOT1dOCisJTENEX0lOVkFMSUQgPSAwLAorCUxDRF8zMjB4NDgwLCAgICAgICAvKiBGU1ROLCBEU1ROICovCisJTENEXzY0MHg0ODAsCisJTENEXzY0MHg0ODBfMiwgICAgIC8qIEZTVE4sIERTVE4gKi8KKwlMQ0RfNjQweDQ4MF8zLCAgICAgLyogRlNUTiwgRFNUTiAqLworCUxDRF84MDB4NjAwLAorCUxDRF84NDh4NDgwLAorCUxDRF8xMDI0eDYwMCwKKwlMQ0RfMTAyNHg3NjgsCisJTENEXzExNTJ4NzY4LAorCUxDRF8xMTUyeDg2NCwKKwlMQ0RfMTI4MHg3MjAsCisJTENEXzEyODB4NzY4LAorCUxDRF8xMjgweDgwMCwKKwlMQ0RfMTI4MHg5NjAsCisJTENEXzEyODB4MTAyNCwKKwlMQ0RfMTQwMHgxMDUwLAorCUxDRF8xNjAweDEyMDAsCisJTENEXzE2ODB4MTA1MCwKKwlMQ0RfMTkyMHgxNDQwLAorCUxDRF8yMDQ4eDE1MzYsCisJTENEX0NVU1RPTSwKKwlMQ0RfVU5LTk9XTgogfTsKICNlbmRpZgogCi1zdHJ1Y3QgWEdJX0RTUmVnCi17Ci0gIHVuc2lnbmVkIGNoYXIgIGpJZHg7Ci0gIHVuc2lnbmVkIGNoYXIgIGpWYWw7CitzdHJ1Y3QgWEdJX0RTUmVnIHsKKwl1bnNpZ25lZCBjaGFyIGpJZHg7CisJdW5zaWduZWQgY2hhciBqVmFsOwogfTsKIAotc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbwotewotICAgIHVuc2lnbmVkIGxvbmcgIHVsRXh0ZXJuYWxDaGlwOyAgICAgICAvKiBOTyBWQiBvciBvdGhlciB2aWRlbyBicmlkZ2UqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaWYgdWpWQkNoaXBJRCA9IFZCX0NISVBfVU5LTk9XTiwgKi8KK3N0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8geworCXVuc2lnbmVkIGxvbmcgdWxFeHRlcm5hbENoaXA7IC8qIE5PIFZCIG9yIG90aGVyIHZpZGVvIGJyaWRnZSovCisJCQkJICAgICAgLyogaWYgdWpWQkNoaXBJRCA9IFZCX0NISVBfVU5LTk9XTiwgKi8KIAotICAgIHVuc2lnbmVkIGNoYXIgKnBqVmlydHVhbFJvbUJhc2U7ICAgIC8qIFJPTSBpbWFnZSAqLworCXVuc2lnbmVkIGNoYXIgKnBqVmlydHVhbFJvbUJhc2U7IC8qIFJPTSBpbWFnZSAqLwogCi0gICAgdW5zaWduZWQgY2hhciAqcGpWaWRlb01lbW9yeUFkZHJlc3M7LyogYmFzZSB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvZiBMaW5lYXIgVkdBIG1lbW9yeSAqLworCXVuc2lnbmVkIGNoYXIgKnBqVmlkZW9NZW1vcnlBZGRyZXNzOy8qIGJhc2UgdmlydHVhbCBtZW1vcnkgYWRkcmVzcyAqLworCQkJCQkgICAgLyogb2YgTGluZWFyIFZHQSBtZW1vcnkgKi8KIAotICAgIHVuc2lnbmVkIGxvbmcgIHVsVmlkZW9NZW1vcnlTaXplOyAgICAvKiBzaXplLCBpbiBieXRlcywgb2YgdGhlIG1lbW9yeSBvbiB0aGUgYm9hcmQgKi8KKwl1bnNpZ25lZCBsb25nIHVsVmlkZW9NZW1vcnlTaXplOyAvKiBzaXplLCBpbiBieXRlcywgb2YgdGhlCisJCQkJCSAgICBtZW1vcnkgb24gdGhlIGJvYXJkICovCiAKLSAgICB1bnNpZ25lZCBjaGFyICpwaklPQWRkcmVzczsgICAgICAgICAgLyogYmFzZSBJL08gYWRkcmVzcyBvZiBWR0EgcG9ydHMgKDB4M0IwKSAqLworCXVuc2lnbmVkIGNoYXIgKnBqSU9BZGRyZXNzOyAvKiBiYXNlIEkvTyBhZGRyZXNzIG9mIFZHQSBwb3J0cyAoMHgzQjApICovCiAKLSAgICB1bnNpZ25lZCBjaGFyICBqQ2hpcFR5cGU7ICAgICAgICAgICAgLyogVXNlZCB0byBJZGVudGlmeSBHcmFwaGljcyBDaGlwICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZpbmVkIGluIHRoZSBkYXRhIHN0cnVjdHVyZSB0eXBlICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIlhHSV9DSElQX1RZUEUiICovCisJdW5zaWduZWQgY2hhciBqQ2hpcFR5cGU7IC8qIFVzZWQgdG8gSWRlbnRpZnkgR3JhcGhpY3MgQ2hpcCAqLworCQkJCSAvKiBkZWZpbmVkIGluIHRoZSBkYXRhIHN0cnVjdHVyZSB0eXBlICAqLworCQkJCSAvKiAiWEdJX0NISVBfVFlQRSIgKi8KIAotICAgIHVuc2lnbmVkIGNoYXIgIGpDaGlwUmV2aXNpb247ICAgICAgICAvKiBVc2VkIHRvIElkZW50aWZ5IEdyYXBoaWNzIENoaXAgUmV2aXNpb24gKi8KKwl1bnNpZ25lZCBjaGFyIGpDaGlwUmV2aXNpb247IC8qIFVzZWQgdG8gSWRlbnRpZnkgR3JhcGhpY3MKKwkJCQkJQ2hpcCBSZXZpc2lvbiAqLwogCi0gICAgdW5zaWduZWQgY2hhciAgdWpWQkNoaXBJRDsgICAgICAgICAgIC8qIHRoZSBJRCBvZiB2aWRlbyBicmlkZ2UgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmluZWQgaW4gdGhlIGRhdGEgc3RydWN0dXJlIHR5cGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICJYR0lfVkJfQ0hJUF9UWVBFIiAqLworCXVuc2lnbmVkIGNoYXIgdWpWQkNoaXBJRDsgLyogdGhlIElEIG9mIHZpZGVvIGJyaWRnZSAqLworCQkJCSAgLyogZGVmaW5lZCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUgdHlwZSAqLworCQkJCSAgLyogIlhHSV9WQl9DSElQX1RZUEUiICovCiAKLSAgICB1bnNpZ25lZCBsb25nICB1bENSVDJMQ0RUeXBlOyAgICAgICAgLyogZGVmaW5lZCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUgdHlwZSAqLworCXVuc2lnbmVkIGxvbmcgdWxDUlQyTENEVHlwZTsgLyogZGVmaW5lZCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUgdHlwZSAqLwogCiAJdW5zaWduZWQgY2hhcigqcFF1ZXJ5VkdBQ29uZmlnU3BhY2UpKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKiwKIAkJCQkJICAgIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsCkBAIC04Nyw3ICs4Niw1IEBACiAKIC8qIEFkZGl0aW9uYWwgSU9DVEwgZm9yIGNvbW11bmljYXRpb24geGdpZmIgPD4gWCBkcml2ZXIgICAgICAgICovCiAvKiBJZiBjaGFuZ2luZyB0aGlzLCB4Z2lmYi5oIG11c3QgYWxzbyBiZSBjaGFuZ2VkIChmb3IgeGdpZmIpICovCi0KLQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L0tjb25maWcgYi9kcml2ZXJzL3RhcmdldC9LY29uZmlnCmluZGV4IDllZjJkYmIuLjVjYjBmMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L0tjb25maWcKKysrIGIvZHJpdmVycy90YXJnZXQvS2NvbmZpZwpAQCAtMzAsNSArMzAsNiBAQAogCXBhc3N0aHJvdWdoIGFjY2VzcyB0byBMaW51eC9TQ1NJIGRldmljZQogCiBzb3VyY2UgImRyaXZlcnMvdGFyZ2V0L2xvb3BiYWNrL0tjb25maWciCitzb3VyY2UgImRyaXZlcnMvdGFyZ2V0L3RjbV9mYy9LY29uZmlnIgogCiBlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvTWFrZWZpbGUgYi9kcml2ZXJzL3RhcmdldC9NYWtlZmlsZQppbmRleCAxMTc4YmJmLi4yMWRmODA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3RhcmdldC9NYWtlZmlsZQpAQCAtMjQsMyArMjQsNSBAQAogCiAjIEZhYnJpYyBtb2R1bGVzCiBvYmotJChDT05GSUdfTE9PUEJBQ0tfVEFSR0VUKQkrPSBsb29wYmFjay8KKworb2JqLSQoQ09ORklHX1RDTV9GQykJCSs9IHRjbV9mYy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2FsdWEuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2FsdWEuYwppbmRleCAzMGNiYjc0Li40N2FiYjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9hbHVhLmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfYWx1YS5jCkBAIC0xMDM2LDcgKzEwMzYsNyBAQAogCWx1X2dwID0ga21lbV9jYWNoZV96YWxsb2ModDEwX2FsdWFfbHVfZ3BfY2FjaGUsIEdGUF9LRVJORUwpOwogCWlmICghKGx1X2dwKSkgewogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBhbGxvY2F0ZSBzdHJ1Y3QgdDEwX2FsdWFfbHVfZ3BcbiIpOwotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTs7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCX0KIAlJTklUX0xJU1RfSEVBRCgmbHVfZ3AtPmx1X2dwX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZsdV9ncC0+bHVfZ3BfbWVtX2xpc3QpOwpAQCAtMTA0NCw3ICsxMDQ0LDcgQEAKIAlhdG9taWNfc2V0KCZsdV9ncC0+bHVfZ3BfcmVmX2NudCwgMCk7CiAKIAlpZiAoZGVmX2dyb3VwKSB7Ci0JCWx1X2dwLT5sdV9ncF9pZCA9IHNlX2dsb2JhbC0+YWx1YV9sdV9ncHNfY291bnRlcisrOzsKKwkJbHVfZ3AtPmx1X2dwX2lkID0gc2VfZ2xvYmFsLT5hbHVhX2x1X2dwc19jb3VudGVyKys7CiAJCWx1X2dwLT5sdV9ncF92YWxpZF9pZCA9IDE7CiAJCXNlX2dsb2JhbC0+YWx1YV9sdV9ncHNfY291bnQrKzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV90cmFuc3BvcnQuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3RyYW5zcG9ydC5jCmluZGV4IDk1ODNiMjMuLmI5ZDM1MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3RyYW5zcG9ydC5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3RyYW5zcG9ydC5jCkBAIC0yMTI4LDcgKzIxMjgsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmU0VfSEJBKGRldiktPmhiYV9xdWV1ZV9sb2NrLCBmbGFncyk7OworCXNwaW5fbG9ja19pcnFzYXZlKCZTRV9IQkEoZGV2KS0+aGJhX3F1ZXVlX2xvY2ssIGZsYWdzKTsKIAlhdG9taWNfaW5jKCZkZXYtPmRlcHRoX2xlZnQpOwogCWF0b21pY19pbmMoJlNFX0hCQShkZXYpLT5sZWZ0X3F1ZXVlX2RlcHRoKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZTRV9IQkEoZGV2KS0+aGJhX3F1ZXVlX2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RjbV9mYy9LY29uZmlnIGIvZHJpdmVycy90YXJnZXQvdGNtX2ZjL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBjYWY0NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RjbV9mYy9LY29uZmlnCkBAIC0wLDAgKzEsNSBAQAorY29uZmlnIFRDTV9GQworCXRyaXN0YXRlICJUQ01fRkMgZmFicmljIFBsdWdpbiIKKwlkZXBlbmRzIG9uIExJQkZDCisJaGVscAorCVNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBUQ00gRkMgcGx1Z2luIGZvciBhY2Nlc3NpbmcgRkMgZmFicmljcyBpbiBUQ00KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RjbV9mYy9NYWtlZmlsZSBiL2RyaXZlcnMvdGFyZ2V0L3RjbV9mYy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTVjMmI2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy90YXJnZXQvdGNtX2ZjL01ha2VmaWxlCkBAIC0wLDAgKzEsMTUgQEAKK0VYVFJBX0NGTEFHUyArPSAtSSQoc3JjdHJlZSkvZHJpdmVycy90YXJnZXQvIFwKKwkJLUkkKHNyY3RyZWUpL2RyaXZlcnMvc2NzaS8gXAorCQktSSQoc3JjdHJlZSkvaW5jbHVkZS9zY3NpLyBcCisJCS1JJChzcmN0cmVlKS9kcml2ZXJzL3RhcmdldC90Y21fZmMvCisKK3RjbV9mYy15ICs9CXRmY19jbWQubyBcCisJCXRmY19jb25mLm8gXAorCQl0ZmNfaW8ubyBcCisJCXRmY19zZXNzLm8KKworb2JqLSQoQ09ORklHX1RDTV9GQykJKz0gdGNtX2ZjLm8KKworaWZkZWYgQ09ORklHRlNfVENNX0ZDX0RFQlVHCitFWFRSQV9DRkxBR1MJKz0gLURUQ01fRkNfREVCVUcKK2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90Y21fZmMvdGNtX2ZjLmggYi9kcml2ZXJzL3RhcmdldC90Y21fZmMvdGNtX2ZjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVmZmYzMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RjbV9mYy90Y21fZmMuaApAQCAtMCwwICsxLDIxNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworI2lmbmRlZiBfX1RDTV9GQ19IX18KKyNkZWZpbmUgX19UQ01fRkNfSF9fCisKKyNkZWZpbmUgRlRfVkVSU0lPTiAiMC4zIgorCisjZGVmaW5lIEZUX05BTUVMRU4gMzIJCS8qIGxlbmd0aCBvZiBBU0NJSSBXV1BOcyBpbmNsdWRpbmcgcGFkICovCisjZGVmaW5lIEZUX1RQR19OQU1FTEVOIDMyCS8qIG1heCBsZW5ndGggb2YgVFBHIG5hbWUgKi8KKyNkZWZpbmUgRlRfTFVOX05BTUVMRU4gMzIJLyogbWF4IGxlbmd0aCBvZiBMVU4gbmFtZSAqLworCisvKgorICogRGVidWcgb3B0aW9ucy4KKyAqLworI2RlZmluZSBGVF9ERUJVR19DT05GCTB4MDEJLyogY29uZmlndXJhdGlvbiBtZXNzYWdlcyAqLworI2RlZmluZQlGVF9ERUJVR19TRVNTCTB4MDIJLyogc2Vzc2lvbiBtZXNzYWdlcyAqLworI2RlZmluZQlGVF9ERUJVR19UTQkweDA0CS8qIFRNIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUJRlRfREVCVUdfSU8JMHgwOAkvKiBJL08gY29tbWFuZHMgKi8KKyNkZWZpbmUJRlRfREVCVUdfREFUQQkweDEwCS8qIERhdGEgdHJhbnNmZXIgKi8KKworZXh0ZXJuIHVuc2lnbmVkIGludCBmdF9kZWJ1Z19sb2dnaW5nOwkvKiBkZWJ1ZyBvcHRpb25zICovCisKKyNkZWZpbmUgRlRfREVCVUcobWFzaywgZm10LCBhcmdzLi4uKQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJaWYgKGZ0X2RlYnVnX2xvZ2dpbmcgJiAobWFzaykpCQkJCVwKKwkJCXByaW50ayhLRVJOX0lORk8gInRjbV9mYzogJXM6ICIgZm10LAkJXAorCQkJCV9fZnVuY19fLCAjI2FyZ3MpOwkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lCUZUX0NPTkZfREJHKGZtdCwgYXJncy4uLikJRlRfREVCVUcoRlRfREVCVUdfQ09ORiwgZm10LCAjI2FyZ3MpCisjZGVmaW5lCUZUX1NFU1NfREJHKGZtdCwgYXJncy4uLikJRlRfREVCVUcoRlRfREVCVUdfU0VTUywgZm10LCAjI2FyZ3MpCisjZGVmaW5lCUZUX1RNX0RCRyhmbXQsIGFyZ3MuLi4pCQlGVF9ERUJVRyhGVF9ERUJVR19UTSwgZm10LCAjI2FyZ3MpCisjZGVmaW5lCUZUX0lPX0RCRyhmbXQsIGFyZ3MuLi4pCQlGVF9ERUJVRyhGVF9ERUJVR19JTywgZm10LCAjI2FyZ3MpCisjZGVmaW5lCUZUX0RBVEFfREJHKGZtdCwgYXJncy4uLikJRlRfREVCVUcoRlRfREVCVUdfREFUQSwgZm10LCAjI2FyZ3MpCisKK3N0cnVjdCBmdF90cmFuc3BvcnRfaWQgeworCV9fdTgJZm9ybWF0OworCV9fdTgJX19yZXN2ZDFbN107CisJX191OAl3d3BuWzhdOworCV9fdTgJX19yZXN2ZDJbOF07Cit9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKworLyoKKyAqIFNlc3Npb24gKHJlbW90ZSBwb3J0KS4KKyAqLworc3RydWN0IGZ0X3Nlc3MgeworCXUzMiBwb3J0X2lkOwkJCS8qIGZvciBoYXNoIGxvb2t1cCB1c2Ugb25seSAqLworCXUzMiBwYXJhbXM7CisJdTE2IG1heF9mcmFtZTsJCQkvKiBtYXhpbXVtIGZyYW1lIHNpemUgKi8KKwl1NjQgcG9ydF9uYW1lOwkJCS8qIHBvcnQgbmFtZSBmb3IgdHJhbnNwb3J0IElEICovCisJc3RydWN0IGZ0X3Rwb3J0ICp0cG9ydDsKKwlzdHJ1Y3Qgc2Vfc2Vzc2lvbiAqc2Vfc2VzczsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBoYXNoOwkJLyogbGlua2FnZSBpbiBmdF9zZXNzX2hhc2ggdGFibGUgKi8KKwlzdHJ1Y3QgcmN1X2hlYWQgcmN1OworCXN0cnVjdCBrcmVmIGtyZWY7CQkvKiByZWYgZm9yIGhhc2ggYW5kIG91dHN0YW5kaW5nIEkvT3MgKi8KK307CisKKy8qCisgKiBIYXNoIHRhYmxlIG9mIHNlc3Npb25zIHBlciBsb2NhbCBwb3J0LgorICogSGFzaCBsb29rdXAgYnkgcmVtb3RlIHBvcnQgRkNfSUQuCisgKi8KKyNkZWZpbmUJRlRfU0VTU19IQVNIX0JJVFMJNgorI2RlZmluZQlGVF9TRVNTX0hBU0hfU0laRQkoMSA8PCBGVF9TRVNTX0hBU0hfQklUUykKKworLyoKKyAqIFBlciBsb2NhbCBwb3J0IGRhdGEuCisgKiBUaGlzIGlzIGNyZWF0ZWQgb25seSBhZnRlciBhIFRQRyBleGlzdHMgdGhhdCBhbGxvd3MgdGFyZ2V0IGZ1bmN0aW9uCisgKiBmb3IgdGhlIGxvY2FsIHBvcnQuICBJZiB0aGUgVFBHIGV4aXN0cywgdGhpcyBpcyBhbGxvY2F0ZWQgd2hlbgorICogd2UncmUgbm90aWZpZWQgdGhhdCB0aGUgbG9jYWwgcG9ydCBoYXMgYmVlbiBjcmVhdGVkLCBvciB3aGVuCisgKiB0aGUgZmlyc3QgUFJMSSBwcm92aWRlciBjYWxsYmFjayBpcyByZWNlaXZlZC4KKyAqLworc3RydWN0IGZ0X3Rwb3J0IHsKKwlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0OworCXN0cnVjdCBmdF90cGcgKnRwZzsJCS8qIE5VTEwgaWYgVFBHIGRlbGV0ZWQgYmVmb3JlIHRwb3J0ICovCisJdTMyCXNlc3NfY291bnQ7CQkvKiBudW1iZXIgb2Ygc2Vzc2lvbnMgaW4gaGFzaCAqLworCXN0cnVjdCByY3VfaGVhZCByY3U7CisJc3RydWN0IGhsaXN0X2hlYWQgaGFzaFtGVF9TRVNTX0hBU0hfU0laRV07CS8qIGxpc3Qgb2Ygc2Vzc2lvbnMgKi8KK307CisKKy8qCisgKiBOb2RlIElEIGFuZCBhdXRoZW50aWNhdGlvbi4KKyAqLworc3RydWN0IGZ0X25vZGVfYXV0aCB7CisJdTY0CXBvcnRfbmFtZTsKKwl1NjQJbm9kZV9uYW1lOworfTsKKworLyoKKyAqIE5vZGUgQUNMIGZvciBGQyByZW1vdGUgcG9ydCBzZXNzaW9uLgorICovCitzdHJ1Y3QgZnRfbm9kZV9hY2wgeworCXN0cnVjdCBmdF9ub2RlX2F1dGggbm9kZV9hdXRoOworCXN0cnVjdCBzZV9ub2RlX2FjbCBzZV9ub2RlX2FjbDsKK307CisKK3N0cnVjdCBmdF9sdW4geworCXUzMiBpbmRleDsKKwljaGFyIG5hbWVbRlRfTFVOX05BTUVMRU5dOworfTsKKworLyoKKyAqIFRhcmdldCBwb3J0YWwgZ3JvdXAgKGxvY2FsIHBvcnQpLgorICovCitzdHJ1Y3QgZnRfdHBnIHsKKwl1MzIgaW5kZXg7CisJc3RydWN0IGZ0X2xwb3J0X2FjbCAqbHBvcnRfYWNsOworCXN0cnVjdCBmdF90cG9ydCAqdHBvcnQ7CQkvKiBhY3RpdmUgdHBvcnQgb3IgTlVMTCAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJCS8qIGxpbmthZ2UgaW4gZnRfbHBvcnRfYWNsIHRwZ19saXN0ICovCisJc3RydWN0IGxpc3RfaGVhZCBsdW5fbGlzdDsJLyogaGVhZCBvZiBMVU5zICovCisJc3RydWN0IHNlX3BvcnRhbF9ncm91cCBzZV90cGc7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0aHJlYWQ7CS8qIHByb2Nlc3NpbmcgdGhyZWFkICovCisJc3RydWN0IHNlX3F1ZXVlX29iaiBxb2JqOwkvKiBxdWV1ZSBmb3IgcHJvY2Vzc2luZyB0aHJlYWQgKi8KK307CisKK3N0cnVjdCBmdF9scG9ydF9hY2wgeworCXU2NCB3d3BuOworCWNoYXIgbmFtZVtGVF9OQU1FTEVOXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCB0cGdfbGlzdDsKKwlzdHJ1Y3Qgc2Vfd3duIGZjX2xwb3J0X3d3bjsKK307CisKK2VudW0gZnRfY21kX3N0YXRlIHsKKwlGQ19DTURfU1RfTkVXID0gMCwKKwlGQ19DTURfU1RfUkVKCit9OworCisvKgorICogQ29tbWFuZHMKKyAqLworc3RydWN0IGZ0X2NtZCB7CisJZW51bSBmdF9jbWRfc3RhdGUgc3RhdGU7CisJdTE2IGx1bjsJCQkvKiBMVU4gZnJvbSByZXF1ZXN0ICovCisJc3RydWN0IGZ0X3Nlc3MgKnNlc3M7CQkvKiBzZXNzaW9uIGhlbGQgZm9yIGNtZCAqLworCXN0cnVjdCBmY19zZXEgKnNlcTsJCS8qIHNlcXVlbmNlIGluIGV4Y2hhbmdlIG1nciAqLworCXN0cnVjdCBzZV9jbWQgc2VfY21kOwkJLyogTG9jYWwgVENNIEkvTyBkZXNjcmlwdG9yICovCisJc3RydWN0IGZjX2ZyYW1lICpyZXFfZnJhbWU7CisJdW5zaWduZWQgY2hhciAqY2RiOwkJLyogcG9pbnRlciB0byBDREIgaW5zaWRlIGZyYW1lICovCisJdTMyIHdyaXRlX2RhdGFfbGVuOwkJLyogZGF0YSByZWNlaXZlZCBvbiB3cml0ZXMgKi8KKwlzdHJ1Y3Qgc2VfcXVldWVfcmVxIHNlX3JlcTsKKwkvKiBMb2NhbCBzZW5zZSBidWZmZXIgKi8KKwl1bnNpZ25lZCBjaGFyIGZ0X3NlbnNlX2J1ZmZlcltUUkFOU1BPUlRfU0VOU0VfQlVGRkVSXTsKKwl1MzIgd2FzX2RkcF9zZXR1cDoxOwkJLyogU2V0IG9ubHkgaWYgZGRwIGlzIHNldHVwICovCisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsJCS8qIFNldCBvbmx5IGlmIEREUCBpcyBzZXR1cCAqLworCXUzMiBzZ19jbnQ7CQkJLyogTm8uIG9mIGl0ZW0gaW4gc2NhdHRlcmxpc3QgKi8KK307CisKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGZ0X2xwb3J0X2xpc3Q7CitleHRlcm4gc3RydWN0IG11dGV4IGZ0X2xwb3J0X2xvY2s7CitleHRlcm4gc3RydWN0IGZjNF9wcm92IGZ0X3Byb3Y7CitleHRlcm4gc3RydWN0IHRhcmdldF9mYWJyaWNfY29uZmlnZnMgKmZ0X2NvbmZpZ2ZzOworCisvKgorICogRmFicmljIG1ldGhvZHMuCisgKi8KKworLyoKKyAqIFNlc3Npb24gb3BzLgorICovCit2b2lkIGZ0X3Nlc3NfcHV0KHN0cnVjdCBmdF9zZXNzICopOworaW50IGZ0X3Nlc3Nfc2h1dGRvd24oc3RydWN0IHNlX3Nlc3Npb24gKik7Cit2b2lkIGZ0X3Nlc3NfY2xvc2Uoc3RydWN0IHNlX3Nlc3Npb24gKik7Cit2b2lkIGZ0X3Nlc3Nfc3RvcChzdHJ1Y3Qgc2Vfc2Vzc2lvbiAqLCBpbnQsIGludCk7CitpbnQgZnRfc2Vzc19sb2dnZWRfaW4oc3RydWN0IHNlX3Nlc3Npb24gKik7Cit1MzIgZnRfc2Vzc19nZXRfaW5kZXgoc3RydWN0IHNlX3Nlc3Npb24gKik7Cit1MzIgZnRfc2Vzc19nZXRfcG9ydF9uYW1lKHN0cnVjdCBzZV9zZXNzaW9uICosIHVuc2lnbmVkIGNoYXIgKiwgdTMyKTsKK3ZvaWQgZnRfc2Vzc19zZXRfZXJsMChzdHJ1Y3Qgc2Vfc2Vzc2lvbiAqKTsKKwordm9pZCBmdF9scG9ydF9hZGQoc3RydWN0IGZjX2xwb3J0ICosIHZvaWQgKik7Cit2b2lkIGZ0X2xwb3J0X2RlbChzdHJ1Y3QgZmNfbHBvcnQgKiwgdm9pZCAqKTsKK2ludCBmdF9scG9ydF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcsIHZvaWQgKik7CisKKy8qCisgKiBJTyBtZXRob2RzLgorICovCit2b2lkIGZ0X2NoZWNrX3N0b3BfZnJlZShzdHJ1Y3Qgc2VfY21kICopOwordm9pZCBmdF9yZWxlYXNlX2NtZChzdHJ1Y3Qgc2VfY21kICopOworaW50IGZ0X3F1ZXVlX3N0YXR1cyhzdHJ1Y3Qgc2VfY21kICopOworaW50IGZ0X3F1ZXVlX2RhdGFfaW4oc3RydWN0IHNlX2NtZCAqKTsKK2ludCBmdF93cml0ZV9wZW5kaW5nKHN0cnVjdCBzZV9jbWQgKik7CitpbnQgZnRfd3JpdGVfcGVuZGluZ19zdGF0dXMoc3RydWN0IHNlX2NtZCAqKTsKK3UzMiBmdF9nZXRfdGFza190YWcoc3RydWN0IHNlX2NtZCAqKTsKK2ludCBmdF9nZXRfY21kX3N0YXRlKHN0cnVjdCBzZV9jbWQgKik7Cit2b2lkIGZ0X25ld19jbWRfZmFpbHVyZShzdHJ1Y3Qgc2VfY21kICopOworaW50IGZ0X3F1ZXVlX3RtX3Jlc3Aoc3RydWN0IHNlX2NtZCAqKTsKK2ludCBmdF9pc19zdGF0ZV9yZW1vdmUoc3RydWN0IHNlX2NtZCAqKTsKKworLyoKKyAqIG90aGVyIGludGVybmFsIGZ1bmN0aW9ucy4KKyAqLworaW50IGZ0X3RocmVhZCh2b2lkICopOwordm9pZCBmdF9yZWN2X3JlcShzdHJ1Y3QgZnRfc2VzcyAqLCBzdHJ1Y3QgZmNfZnJhbWUgKik7CitzdHJ1Y3QgZnRfdHBnICpmdF9scG9ydF9maW5kX3RwZyhzdHJ1Y3QgZmNfbHBvcnQgKik7CitzdHJ1Y3QgZnRfbm9kZV9hY2wgKmZ0X2FjbF9nZXQoc3RydWN0IGZ0X3RwZyAqLCBzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqKTsKKwordm9pZCBmdF9yZWN2X3dyaXRlX2RhdGEoc3RydWN0IGZ0X2NtZCAqLCBzdHJ1Y3QgZmNfZnJhbWUgKik7Cit2b2lkIGZ0X2R1bXBfY21kKHN0cnVjdCBmdF9jbWQgKiwgY29uc3QgY2hhciAqY2FsbGVyKTsKKworc3NpemVfdCBmdF9mb3JtYXRfd3duKGNoYXIgKiwgc2l6ZV90LCB1NjQpOworCisjZW5kaWYgLyogX19UQ01fRkNfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90Y21fZmMvdGZjX2NtZC5jIGIvZHJpdmVycy90YXJnZXQvdGNtX2ZjL3RmY19jbWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWU1MTc3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy90YXJnZXQvdGNtX2ZjL3RmY19jbWQuYwpAQCAtMCwwICsxLDY5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisvKiBYWFggVEJEIHNvbWUgaW5jbHVkZXMgbWF5IGJlIGV4dHJhbmVvdXMgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGdlbmVyYXRlZC91dHNyZWxlYXNlLmg+CisjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvY29uZmlnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KKyNpbmNsdWRlIDxzY3NpL2xpYmZjLmg+CisjaW5jbHVkZSA8c2NzaS9mY19lbmNvZGUuaD4KKworI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV9iYXNlLmg+CisjaW5jbHVkZSA8dGFyZ2V0L3RhcmdldF9jb3JlX3RyYW5zcG9ydC5oPgorI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV9mYWJyaWNfb3BzLmg+CisjaW5jbHVkZSA8dGFyZ2V0L3RhcmdldF9jb3JlX2RldmljZS5oPgorI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV90cGcuaD4KKyNpbmNsdWRlIDx0YXJnZXQvdGFyZ2V0X2NvcmVfY29uZmlnZnMuaD4KKyNpbmNsdWRlIDx0YXJnZXQvdGFyZ2V0X2NvcmVfYmFzZS5oPgorI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV90bXIuaD4KKyNpbmNsdWRlIDx0YXJnZXQvY29uZmlnZnNfbWFjcm9zLmg+CisKKyNpbmNsdWRlICJ0Y21fZmMuaCIKKworLyoKKyAqIER1bXAgY21kIHN0YXRlIGZvciBkZWJ1Z2dpbmcuCisgKi8KK3ZvaWQgZnRfZHVtcF9jbWQoc3RydWN0IGZ0X2NtZCAqY21kLCBjb25zdCBjaGFyICpjYWxsZXIpCit7CisJc3RydWN0IGZjX2V4Y2ggKmVwOworCXN0cnVjdCBmY19zZXEgKnNwOworCXN0cnVjdCBzZV9jbWQgKnNlX2NtZDsKKwlzdHJ1Y3Qgc2VfbWVtICptZW07CisJc3RydWN0IHNlX3RyYW5zcG9ydF90YXNrICp0YXNrOworCisJaWYgKCEoZnRfZGVidWdfbG9nZ2luZyAmIEZUX0RFQlVHX0lPKSkKKwkJcmV0dXJuOworCisJc2VfY21kID0gJmNtZC0+c2VfY21kOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBjbWQgJXAgc3RhdGUgJWQgc2VzcyAlcCBzZXEgJXAgc2VfY21kICVwXG4iLAorCQljYWxsZXIsIGNtZCwgY21kLT5zdGF0ZSwgY21kLT5zZXNzLCBjbWQtPnNlcSwgc2VfY21kKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogY21kICVwIGNkYiAlcFxuIiwKKwkJY2FsbGVyLCBjbWQsIGNtZC0+Y2RiKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogY21kICVwIGx1biAlZFxuIiwgY2FsbGVyLCBjbWQsIGNtZC0+bHVuKTsKKworCXRhc2sgPSBUX1RBU0soc2VfY21kKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogY21kICVwIHRhc2sgJXAgc2VfbnVtICV1IGJ1ZiAlcCBsZW4gJXUgc2VfY21kX2ZsYWdzIDwweCV4PlxuIiwKKwkgICAgICAgY2FsbGVyLCBjbWQsIHRhc2ssIHRhc2stPnRfdGFza3Nfc2VfbnVtLAorCSAgICAgICB0YXNrLT50X3Rhc2tfYnVmLCBzZV9jbWQtPmRhdGFfbGVuZ3RoLCBzZV9jbWQtPnNlX2NtZF9mbGFncyk7CisJaWYgKHRhc2stPnRfbWVtX2xpc3QpCisJCWxpc3RfZm9yX2VhY2hfZW50cnkobWVtLCB0YXNrLT50X21lbV9saXN0LCBzZV9saXN0KQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNtZCAlcCBtZW0gJXAgcGFnZSAlcCAiCisJCQkgICAgICAgImxlbiAweCV4IG9mZiAweCV4XG4iLAorCQkJICAgICAgIGNhbGxlciwgY21kLCBtZW0sCisJCQkgICAgICAgbWVtLT5zZV9wYWdlLCBtZW0tPnNlX2xlbiwgbWVtLT5zZV9vZmYpOworCXNwID0gY21kLT5zZXE7CisJaWYgKHNwKSB7CisJCWVwID0gZmNfc2VxX2V4Y2goc3ApOworCQlwcmludGsoS0VSTl9JTkZPICIlczogY21kICVwIHNpZCAleCBkaWQgJXggIgorCQkJIm94X2lkICV4IHJ4X2lkICV4IHNlcV9pZCAleCBlX3N0YXQgJXhcbiIsCisJCQljYWxsZXIsIGNtZCwgZXAtPnNpZCwgZXAtPmRpZCwgZXAtPm94aWQsIGVwLT5yeGlkLAorCQkJc3AtPmlkLCBlcC0+ZXNiX3N0YXQpOworCX0KKwlwcmludF9oZXhfZHVtcChLRVJOX0lORk8sICJmdF9kdW1wX2NtZCAiLCBEVU1QX1BSRUZJWF9OT05FLAorCQkxNiwgNCwgY21kLT5jZGIsIE1BWF9DT01NQU5EX1NJWkUsIDApOworfQorCisvKgorICogR2V0IExVTiBmcm9tIENEQi4KKyAqLworc3RhdGljIGludCBmdF9nZXRfbHVuX2Zvcl9jbWQoc3RydWN0IGZ0X2NtZCAqY21kLCB1OCAqbHVucCkKK3sKKwl1NjQgbHVuOworCisJbHVuID0gbHVucFsxXTsKKwlzd2l0Y2ggKGx1bnBbMF0gPj4gNikgeworCWNhc2UgMDoKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlsdW4gfD0gKGx1bnBbMF0gJiAweDNmKSA8PCA4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJfQorCWlmIChsdW4gPj0gVFJBTlNQT1JUX01BWF9MVU5TX1BFUl9UUEcpCisJCXJldHVybiAtMTsKKwljbWQtPmx1biA9IGx1bjsKKwlyZXR1cm4gdHJhbnNwb3J0X2dldF9sdW5fZm9yX2NtZCgmY21kLT5zZV9jbWQsIE5VTEwsIGx1bik7Cit9CisKK3N0YXRpYyB2b2lkIGZ0X3F1ZXVlX2NtZChzdHJ1Y3QgZnRfc2VzcyAqc2Vzcywgc3RydWN0IGZ0X2NtZCAqY21kKQoreworCXN0cnVjdCBzZV9xdWV1ZV9vYmogKnFvYmo7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXFvYmogPSAmc2Vzcy0+dHBvcnQtPnRwZy0+cW9iajsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcW9iai0+Y21kX3F1ZXVlX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZjbWQtPnNlX3JlcS5xcl9saXN0LCAmcW9iai0+cW9ial9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxb2JqLT5jbWRfcXVldWVfbG9jaywgZmxhZ3MpOworCWF0b21pY19pbmMoJnFvYmotPnF1ZXVlX2NudCk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZxb2JqLT50aHJlYWRfd3EpOworfQorCitzdGF0aWMgc3RydWN0IGZ0X2NtZCAqZnRfZGVxdWV1ZV9jbWQoc3RydWN0IHNlX3F1ZXVlX29iaiAqcW9iaikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzZV9xdWV1ZV9yZXEgKnFyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnFvYmotPmNtZF9xdWV1ZV9sb2NrLCBmbGFncyk7CisJaWYgKGxpc3RfZW1wdHkoJnFvYmotPnFvYmpfbGlzdCkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcW9iai0+Y21kX3F1ZXVlX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXFyID0gbGlzdF9maXJzdF9lbnRyeSgmcW9iai0+cW9ial9saXN0LCBzdHJ1Y3Qgc2VfcXVldWVfcmVxLCBxcl9saXN0KTsKKwlsaXN0X2RlbCgmcXItPnFyX2xpc3QpOworCWF0b21pY19kZWMoJnFvYmotPnF1ZXVlX2NudCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcW9iai0+Y21kX3F1ZXVlX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gY29udGFpbmVyX29mKHFyLCBzdHJ1Y3QgZnRfY21kLCBzZV9yZXEpOworfQorCitzdGF0aWMgdm9pZCBmdF9mcmVlX2NtZChzdHJ1Y3QgZnRfY21kICpjbWQpCit7CisJc3RydWN0IGZjX2ZyYW1lICpmcDsKKwlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0OworCisJaWYgKCFjbWQpCisJCXJldHVybjsKKwlmcCA9IGNtZC0+cmVxX2ZyYW1lOworCWxwb3J0ID0gZnJfZGV2KGZwKTsKKwlpZiAoZnJfc2VxKGZwKSkKKwkJbHBvcnQtPnR0LnNlcV9yZWxlYXNlKGZyX3NlcShmcCkpOworCWZjX2ZyYW1lX2ZyZWUoZnApOworCWZ0X3Nlc3NfcHV0KGNtZC0+c2Vzcyk7CS8qIHVuZG8gZ2V0IGZyb20gbG9va3VwIGF0IHJlY3YgKi8KKwlrZnJlZShjbWQpOworfQorCit2b2lkIGZ0X3JlbGVhc2VfY21kKHN0cnVjdCBzZV9jbWQgKnNlX2NtZCkKK3sKKwlzdHJ1Y3QgZnRfY21kICpjbWQgPSBjb250YWluZXJfb2Yoc2VfY21kLCBzdHJ1Y3QgZnRfY21kLCBzZV9jbWQpOworCisJZnRfZnJlZV9jbWQoY21kKTsKK30KKwordm9pZCBmdF9jaGVja19zdG9wX2ZyZWUoc3RydWN0IHNlX2NtZCAqc2VfY21kKQoreworCXRyYW5zcG9ydF9nZW5lcmljX2ZyZWVfY21kKHNlX2NtZCwgMCwgMSwgMCk7Cit9CisKKy8qCisgKiBTZW5kIHJlc3BvbnNlLgorICovCitpbnQgZnRfcXVldWVfc3RhdHVzKHN0cnVjdCBzZV9jbWQgKnNlX2NtZCkKK3sKKwlzdHJ1Y3QgZnRfY21kICpjbWQgPSBjb250YWluZXJfb2Yoc2VfY21kLCBzdHJ1Y3QgZnRfY21kLCBzZV9jbWQpOworCXN0cnVjdCBmY19mcmFtZSAqZnA7CisJc3RydWN0IGZjcF9yZXNwX3dpdGhfZXh0ICpmY3A7CisJc3RydWN0IGZjX2xwb3J0ICpscG9ydDsKKwlzdHJ1Y3QgZmNfZXhjaCAqZXA7CisJc2l6ZV90IGxlbjsKKworCWZ0X2R1bXBfY21kKGNtZCwgX19mdW5jX18pOworCWVwID0gZmNfc2VxX2V4Y2goY21kLT5zZXEpOworCWxwb3J0ID0gZXAtPmxwOworCWxlbiA9IHNpemVvZigqZmNwKSArIHNlX2NtZC0+c2NzaV9zZW5zZV9sZW5ndGg7CisJZnAgPSBmY19mcmFtZV9hbGxvYyhscG9ydCwgbGVuKTsKKwlpZiAoIWZwKSB7CisJCS8qIFhYWCBzaG91bGRuJ3QganVzdCBkcm9wIGl0IC0gcmVxdWV1ZSBhbmQgcmV0cnk/ICovCisJCXJldHVybiAwOworCX0KKwlmY3AgPSBmY19mcmFtZV9wYXlsb2FkX2dldChmcCwgbGVuKTsKKwltZW1zZXQoZmNwLCAwLCBsZW4pOworCWZjcC0+cmVzcC5mcl9zdGF0dXMgPSBzZV9jbWQtPnNjc2lfc3RhdHVzOworCisJbGVuID0gc2VfY21kLT5zY3NpX3NlbnNlX2xlbmd0aDsKKwlpZiAobGVuKSB7CisJCWZjcC0+cmVzcC5mcl9mbGFncyB8PSBGQ1BfU05TX0xFTl9WQUw7CisJCWZjcC0+ZXh0LmZyX3Nuc19sZW4gPSBodG9ubChsZW4pOworCQltZW1jcHkoKGZjcCArIDEpLCBzZV9jbWQtPnNlbnNlX2J1ZmZlciwgbGVuKTsKKwl9CisKKwkvKgorCSAqIFRlc3QgdW5kZXJmbG93IGFuZCBvdmVyZmxvdyB3aXRoIG9uZSBtYXNrLiAgVXN1YWxseSBib3RoIGFyZSBvZmYuCisJICogQmlkaXJlY3Rpb25hbCBjb21tYW5kcyBhcmUgbm90IGhhbmRsZWQgeWV0LgorCSAqLworCWlmIChzZV9jbWQtPnNlX2NtZF9mbGFncyAmIChTQ0ZfT1ZFUkZMT1dfQklUIHwgU0NGX1VOREVSRkxPV19CSVQpKSB7CisJCWlmIChzZV9jbWQtPnNlX2NtZF9mbGFncyAmIFNDRl9PVkVSRkxPV19CSVQpCisJCQlmY3AtPnJlc3AuZnJfZmxhZ3MgfD0gRkNQX1JFU0lEX09WRVI7CisJCWVsc2UKKwkJCWZjcC0+cmVzcC5mcl9mbGFncyB8PSBGQ1BfUkVTSURfVU5ERVI7CisJCWZjcC0+ZXh0LmZyX3Jlc2lkID0gY3B1X3RvX2JlMzIoc2VfY21kLT5yZXNpZHVhbF9jb3VudCk7CisJfQorCisJLyoKKwkgKiBTZW5kIHJlc3BvbnNlLgorCSAqLworCWNtZC0+c2VxID0gbHBvcnQtPnR0LnNlcV9zdGFydF9uZXh0KGNtZC0+c2VxKTsKKwlmY19maWxsX2ZjX2hkcihmcCwgRkNfUkNUTF9ERF9DTURfU1RBVFVTLCBlcC0+ZGlkLCBlcC0+c2lkLCBGQ19UWVBFX0ZDUCwKKwkJICAgICAgIEZDX0ZDX0VYX0NUWCB8IEZDX0ZDX0xBU1RfU0VRIHwgRkNfRkNfRU5EX1NFUSwgMCk7CisKKwlscG9ydC0+dHQuc2VxX3NlbmQobHBvcnQsIGNtZC0+c2VxLCBmcCk7CisJbHBvcnQtPnR0LmV4Y2hfZG9uZShjbWQtPnNlcSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBmdF93cml0ZV9wZW5kaW5nX3N0YXR1cyhzdHJ1Y3Qgc2VfY21kICpzZV9jbWQpCit7CisJc3RydWN0IGZ0X2NtZCAqY21kID0gY29udGFpbmVyX29mKHNlX2NtZCwgc3RydWN0IGZ0X2NtZCwgc2VfY21kKTsKKworCXJldHVybiBjbWQtPndyaXRlX2RhdGFfbGVuICE9IHNlX2NtZC0+ZGF0YV9sZW5ndGg7Cit9CisKKy8qCisgKiBTZW5kIFRYX1JEWSAodHJhbnNmZXIgcmVhZHkpLgorICovCitpbnQgZnRfd3JpdGVfcGVuZGluZyhzdHJ1Y3Qgc2VfY21kICpzZV9jbWQpCit7CisJc3RydWN0IGZ0X2NtZCAqY21kID0gY29udGFpbmVyX29mKHNlX2NtZCwgc3RydWN0IGZ0X2NtZCwgc2VfY21kKTsKKwlzdHJ1Y3QgZmNfZnJhbWUgKmZwOworCXN0cnVjdCBmY3BfdHhyZHkgKnR4cmR5OworCXN0cnVjdCBmY19scG9ydCAqbHBvcnQ7CisJc3RydWN0IGZjX2V4Y2ggKmVwOworCXN0cnVjdCBmY19mcmFtZV9oZWFkZXIgKmZoOworCXUzMiBmX2N0bDsKKworCWZ0X2R1bXBfY21kKGNtZCwgX19mdW5jX18pOworCisJZXAgPSBmY19zZXFfZXhjaChjbWQtPnNlcSk7CisJbHBvcnQgPSBlcC0+bHA7CisJZnAgPSBmY19mcmFtZV9hbGxvYyhscG9ydCwgc2l6ZW9mKCp0eHJkeSkpOworCWlmICghZnApCisJCXJldHVybiBQWVhfVFJBTlNQT1JUX09VVF9PRl9NRU1PUllfUkVTT1VSQ0VTOworCisJdHhyZHkgPSBmY19mcmFtZV9wYXlsb2FkX2dldChmcCwgc2l6ZW9mKCp0eHJkeSkpOworCW1lbXNldCh0eHJkeSwgMCwgc2l6ZW9mKCp0eHJkeSkpOworCXR4cmR5LT5mdF9idXJzdF9sZW4gPSBodG9ubChzZV9jbWQtPmRhdGFfbGVuZ3RoKTsKKworCWNtZC0+c2VxID0gbHBvcnQtPnR0LnNlcV9zdGFydF9uZXh0KGNtZC0+c2VxKTsKKwlmY19maWxsX2ZjX2hkcihmcCwgRkNfUkNUTF9ERF9EQVRBX0RFU0MsIGVwLT5kaWQsIGVwLT5zaWQsIEZDX1RZUEVfRkNQLAorCQkgICAgICAgRkNfRkNfRVhfQ1RYIHwgRkNfRkNfRU5EX1NFUSB8IEZDX0ZDX1NFUV9JTklULCAwKTsKKworCWZoID0gZmNfZnJhbWVfaGVhZGVyX2dldChmcCk7CisJZl9jdGwgPSBudG9oMjQoZmgtPmZoX2ZfY3RsKTsKKworCS8qIE9ubHkgaWYgaXQgaXMgJ0V4Y2hhbmdlIFJlc3BvbmRlcicgKi8KKwlpZiAoZl9jdGwgJiBGQ19GQ19FWF9DVFgpIHsKKwkJLyogVGFyZ2V0IGlzICdleGNoYW5nZSByZXNwb25kZXInIGFuZCBzZW5kaW5nIFhGRVJfUkVBRFkKKwkJICogdG8gJ2V4Y2hhbmdlIGluaXRpYXRvciAoaW5pdGlhdG9yKScKKwkJICovCisJCWlmICgoZXAtPnhpZCA8PSBscG9ydC0+bHJvX3hpZCkgJiYKKwkJICAgIChmaC0+Zmhfcl9jdGwgPT0gRkNfUkNUTF9ERF9EQVRBX0RFU0MpKSB7CisJCQlpZiAoc2VfY21kLT5zZV9jbWRfZmxhZ3MgJiBTQ0ZfU0NTSV9EQVRBX1NHX0lPX0NEQikgeworCQkJCS8qCisJCQkJICogTWFwIHNlX21lbSBsaXN0IHRvIHNjYXR0ZXJsaXN0LCBzbyB0aGF0CisJCQkJICogRERQIGNhbiBiZSBzZXR1cC4gRERQIHNldHVwIGZ1bmN0aW9uIHJlcXVpcmUKKwkJCQkgKiBzY2F0dGVybGlzdC4gc2VfbWVtX2xpc3QgaXMgaW50ZXJuYWwgdG8KKwkJCQkgKiBUQ00vTElPIHRhcmdldAorCQkJCSAqLworCQkJCXRyYW5zcG9ydF9kb190YXNrX3NnX2NoYWluKHNlX2NtZCk7CisJCQkJY21kLT5zZyA9IFRfVEFTSyhzZV9jbWQpLT50X3Rhc2tzX3NnX2NoYWluZWQ7CisJCQkJY21kLT5zZ19jbnQgPQorCQkJCQlUX1RBU0soc2VfY21kKS0+dF90YXNrc19zZ19jaGFpbmVkX25vOworCQkJfQorCQkJaWYgKGNtZC0+c2cgJiYgbHBvcnQtPnR0LmRkcF9zZXR1cChscG9ydCwgZXAtPnhpZCwKKwkJCQkJCSAgICBjbWQtPnNnLCBjbWQtPnNnX2NudCkpCisJCQkJY21kLT53YXNfZGRwX3NldHVwID0gMTsKKwkJfQorCX0KKwlscG9ydC0+dHQuc2VxX3NlbmQobHBvcnQsIGNtZC0+c2VxLCBmcCk7CisJcmV0dXJuIDA7Cit9CisKK3UzMiBmdF9nZXRfdGFza190YWcoc3RydWN0IHNlX2NtZCAqc2VfY21kKQoreworCXN0cnVjdCBmdF9jbWQgKmNtZCA9IGNvbnRhaW5lcl9vZihzZV9jbWQsIHN0cnVjdCBmdF9jbWQsIHNlX2NtZCk7CisKKwlyZXR1cm4gZmNfc2VxX2V4Y2goY21kLT5zZXEpLT5yeGlkOworfQorCitpbnQgZnRfZ2V0X2NtZF9zdGF0ZShzdHJ1Y3Qgc2VfY21kICpzZV9jbWQpCit7CisJc3RydWN0IGZ0X2NtZCAqY21kID0gY29udGFpbmVyX29mKHNlX2NtZCwgc3RydWN0IGZ0X2NtZCwgc2VfY21kKTsKKworCXJldHVybiBjbWQtPnN0YXRlOworfQorCitpbnQgZnRfaXNfc3RhdGVfcmVtb3ZlKHN0cnVjdCBzZV9jbWQgKnNlX2NtZCkKK3sKKwlyZXR1cm4gMDsJLyogWFhYIFRCRCAqLworfQorCit2b2lkIGZ0X25ld19jbWRfZmFpbHVyZShzdHJ1Y3Qgc2VfY21kICpzZV9jbWQpCit7CisJLyogWFhYIFRCRCAqLworCXByaW50ayhLRVJOX0lORk8gIiVzOiBzZV9jbWQgJXBcbiIsIF9fZnVuY19fLCBzZV9jbWQpOworfQorCisvKgorICogRkMgc2VxdWVuY2UgcmVzcG9uc2UgaGFuZGxlciBmb3IgZm9sbG93LW9uIHNlcXVlbmNlcyAoZGF0YSkgYW5kIGFib3J0cy4KKyAqLworc3RhdGljIHZvaWQgZnRfcmVjdl9zZXEoc3RydWN0IGZjX3NlcSAqc3AsIHN0cnVjdCBmY19mcmFtZSAqZnAsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgZnRfY21kICpjbWQgPSBhcmc7CisJc3RydWN0IGZjX2ZyYW1lX2hlYWRlciAqZmg7CisKKwlpZiAoSVNfRVJSKGZwKSkgeworCQkvKiBYWFggbmVlZCB0byBmaW5kIGNtZCBpZiBxdWV1ZWQgKi8KKwkJY21kLT5zZV9jbWQudF9zdGF0ZSA9IFRSQU5TUE9SVF9SRU1PVkU7CisJCWNtZC0+c2VxID0gTlVMTDsKKwkJdHJhbnNwb3J0X2dlbmVyaWNfZnJlZV9jbWQoJmNtZC0+c2VfY21kLCAwLCAxLCAwKTsKKwkJcmV0dXJuOworCX0KKworCWZoID0gZmNfZnJhbWVfaGVhZGVyX2dldChmcCk7CisKKwlzd2l0Y2ggKGZoLT5maF9yX2N0bCkgeworCWNhc2UgRkNfUkNUTF9ERF9TT0xfREFUQToJLyogd3JpdGUgZGF0YSAqLworCQlmdF9yZWN2X3dyaXRlX2RhdGEoY21kLCBmcCk7CisJCWJyZWFrOworCWNhc2UgRkNfUkNUTF9ERF9VTlNPTF9DVEw6CS8qIGNvbW1hbmQgKi8KKwljYXNlIEZDX1JDVExfRERfU09MX0NUTDoJLyogdHJhbnNmZXIgcmVhZHkgKi8KKwljYXNlIEZDX1JDVExfRERfREFUQV9ERVNDOgkvKiB0cmFuc2ZlciByZWFkeSAqLworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiB1bmhhbmRsZWQgZnJhbWUgcl9jdGwgJXhcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgZmgtPmZoX3JfY3RsKTsKKwkJZmNfZnJhbWVfZnJlZShmcCk7CisJCXRyYW5zcG9ydF9nZW5lcmljX2ZyZWVfY21kKCZjbWQtPnNlX2NtZCwgMCwgMSwgMCk7CisJCWJyZWFrOworCX0KK30KKworLyoKKyAqIFNlbmQgYSBGQ1AgcmVzcG9uc2UgaW5jbHVkaW5nIFNDU0kgc3RhdHVzIGFuZCBvcHRpb25hbCBGQ1AgcnNwX2NvZGUuCisgKiBzdGF0dXMgaXMgU0FNX1NUQVRfR09PRCAoemVybykgaWZmIGNvZGUgaXMgdmFsaWQuCisgKiBUaGlzIGlzIHVzZWQgaW4gZXJyb3IgY2FzZXMsIHN1Y2ggYXMgYWxsb2NhdGlvbiBmYWlsdXJlcy4KKyAqLworc3RhdGljIHZvaWQgZnRfc2VuZF9yZXNwX3N0YXR1cyhzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0LAorCQkJCWNvbnN0IHN0cnVjdCBmY19mcmFtZSAqcnhfZnAsCisJCQkJdTMyIHN0YXR1cywgZW51bSBmY3BfcmVzcF9yc3BfY29kZXMgY29kZSkKK3sKKwlzdHJ1Y3QgZmNfZnJhbWUgKmZwOworCXN0cnVjdCBmY19zZXEgKnNwOworCWNvbnN0IHN0cnVjdCBmY19mcmFtZV9oZWFkZXIgKmZoOworCXNpemVfdCBsZW47CisJc3RydWN0IGZjcF9yZXNwX3dpdGhfZXh0ICpmY3A7CisJc3RydWN0IGZjcF9yZXNwX3JzcF9pbmZvICppbmZvOworCisJZmggPSBmY19mcmFtZV9oZWFkZXJfZ2V0KHJ4X2ZwKTsKKwlGVF9JT19EQkcoIkZDUCBlcnJvciByZXNwb25zZTogZGlkICV4IG94aWQgJXggc3RhdHVzICV4IGNvZGUgJXhcbiIsCisJCSAgbnRvaDI0KGZoLT5maF9zX2lkKSwgbnRvaHMoZmgtPmZoX294X2lkKSwgc3RhdHVzLCBjb2RlKTsKKwlsZW4gPSBzaXplb2YoKmZjcCk7CisJaWYgKHN0YXR1cyA9PSBTQU1fU1RBVF9HT09EKQorCQlsZW4gKz0gc2l6ZW9mKCppbmZvKTsKKwlmcCA9IGZjX2ZyYW1lX2FsbG9jKGxwb3J0LCBsZW4pOworCWlmICghZnApCisJCXJldHVybjsKKwlmY3AgPSBmY19mcmFtZV9wYXlsb2FkX2dldChmcCwgbGVuKTsKKwltZW1zZXQoZmNwLCAwLCBsZW4pOworCWZjcC0+cmVzcC5mcl9zdGF0dXMgPSBzdGF0dXM7CisJaWYgKHN0YXR1cyA9PSBTQU1fU1RBVF9HT09EKSB7CisJCWZjcC0+ZXh0LmZyX3JzcF9sZW4gPSBodG9ubChzaXplb2YoKmluZm8pKTsKKwkJZmNwLT5yZXNwLmZyX2ZsYWdzIHw9IEZDUF9SU1BfTEVOX1ZBTDsKKwkJaW5mbyA9IChzdHJ1Y3QgZmNwX3Jlc3BfcnNwX2luZm8gKikoZmNwICsgMSk7CisJCWluZm8tPnJzcF9jb2RlID0gY29kZTsKKwl9CisKKwlmY19maWxsX3JlcGx5X2hkcihmcCwgcnhfZnAsIEZDX1JDVExfRERfQ01EX1NUQVRVUywgMCk7CisJc3AgPSBmcl9zZXEoZnApOworCWlmIChzcCkKKwkJbHBvcnQtPnR0LnNlcV9zZW5kKGxwb3J0LCBzcCwgZnApOworCWVsc2UKKwkJbHBvcnQtPnR0LmZyYW1lX3NlbmQobHBvcnQsIGZwKTsKK30KKworLyoKKyAqIFNlbmQgZXJyb3Igb3IgdGFzayBtYW5hZ2VtZW50IHJlc3BvbnNlLgorICogQWx3YXlzIGZyZWVzIHRoZSBjbWQgYW5kIGFzc29jaWF0ZWQgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkIGZ0X3NlbmRfcmVzcF9jb2RlKHN0cnVjdCBmdF9jbWQgKmNtZCwgZW51bSBmY3BfcmVzcF9yc3BfY29kZXMgY29kZSkKK3sKKwlmdF9zZW5kX3Jlc3Bfc3RhdHVzKGNtZC0+c2Vzcy0+dHBvcnQtPmxwb3J0LAorCQkJICAgIGNtZC0+cmVxX2ZyYW1lLCBTQU1fU1RBVF9HT09ELCBjb2RlKTsKKwlmdF9mcmVlX2NtZChjbWQpOworfQorCisvKgorICogSGFuZGxlIFRhc2sgTWFuYWdlbWVudCBSZXF1ZXN0LgorICovCitzdGF0aWMgdm9pZCBmdF9zZW5kX3RtKHN0cnVjdCBmdF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3Qgc2VfdG1yX3JlcSAqdG1yOworCXN0cnVjdCBmY3BfY21uZCAqZmNwOworCXU4IHRtX2Z1bmM7CisKKwlmY3AgPSBmY19mcmFtZV9wYXlsb2FkX2dldChjbWQtPnJlcV9mcmFtZSwgc2l6ZW9mKCpmY3ApKTsKKworCXN3aXRjaCAoZmNwLT5mY190bV9mbGFncykgeworCWNhc2UgRkNQX1RNRl9MVU5fUkVTRVQ6CisJCXRtX2Z1bmMgPSBUTVJfTFVOX1JFU0VUOworCQlpZiAoZnRfZ2V0X2x1bl9mb3JfY21kKGNtZCwgZmNwLT5mY19sdW4pIDwgMCkgeworCQkJZnRfZHVtcF9jbWQoY21kLCBfX2Z1bmNfXyk7CisJCQl0cmFuc3BvcnRfc2VuZF9jaGVja19jb25kaXRpb25fYW5kX3NlbnNlKCZjbWQtPnNlX2NtZCwKKwkJCQljbWQtPnNlX2NtZC5zY3NpX3NlbnNlX3JlYXNvbiwgMCk7CisJCQlmdF9zZXNzX3B1dChjbWQtPnNlc3MpOworCQkJcmV0dXJuOworCQl9CisJCWJyZWFrOworCWNhc2UgRkNQX1RNRl9UR1RfUkVTRVQ6CisJCXRtX2Z1bmMgPSBUTVJfVEFSR0VUX1dBUk1fUkVTRVQ7CisJCWJyZWFrOworCWNhc2UgRkNQX1RNRl9DTFJfVEFTS19TRVQ6CisJCXRtX2Z1bmMgPSBUTVJfQ0xFQVJfVEFTS19TRVQ7CisJCWJyZWFrOworCWNhc2UgRkNQX1RNRl9BQlRfVEFTS19TRVQ6CisJCXRtX2Z1bmMgPSBUTVJfQUJPUlRfVEFTS19TRVQ7CisJCWJyZWFrOworCWNhc2UgRkNQX1RNRl9DTFJfQUNBOgorCQl0bV9mdW5jID0gVE1SX0NMRUFSX0FDQTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyoKKwkJICogRkNQNHIwMSBpbmRpY2F0ZXMgaGF2aW5nIGEgY29tYmluYXRpb24gb2YKKwkJICogdG1fZmxhZ3Mgc2V0IGlzIGludmFsaWQuCisJCSAqLworCQlGVF9UTV9EQkcoImludmFsaWQgRkNQIHRtX2ZsYWdzICV4XG4iLCBmY3AtPmZjX3RtX2ZsYWdzKTsKKwkJZnRfc2VuZF9yZXNwX2NvZGUoY21kLCBGQ1BfQ01ORF9GSUVMRFNfSU5WQUxJRCk7CisJCXJldHVybjsKKwl9CisKKwlGVF9UTV9EQkcoImFsbG9jIHRtIGNtZCBmbiAlZFxuIiwgdG1fZnVuYyk7CisJdG1yID0gY29yZV90bXJfYWxsb2NfcmVxKCZjbWQtPnNlX2NtZCwgY21kLCB0bV9mdW5jKTsKKwlpZiAoIXRtcikgeworCQlGVF9UTV9EQkcoImFsbG9jIGZhaWxlZFxuIik7CisJCWZ0X3NlbmRfcmVzcF9jb2RlKGNtZCwgRkNQX1RNRl9GQUlMRUQpOworCQlyZXR1cm47CisJfQorCWNtZC0+c2VfY21kLnNlX3Rtcl9yZXEgPSB0bXI7CisJdHJhbnNwb3J0X2dlbmVyaWNfaGFuZGxlX3RtcigmY21kLT5zZV9jbWQpOworfQorCisvKgorICogU2VuZCBzdGF0dXMgZnJvbSBjb21wbGV0ZWQgdGFzayBtYW5hZ2VtZW50IHJlcXVlc3QuCisgKi8KK2ludCBmdF9xdWV1ZV90bV9yZXNwKHN0cnVjdCBzZV9jbWQgKnNlX2NtZCkKK3sKKwlzdHJ1Y3QgZnRfY21kICpjbWQgPSBjb250YWluZXJfb2Yoc2VfY21kLCBzdHJ1Y3QgZnRfY21kLCBzZV9jbWQpOworCXN0cnVjdCBzZV90bXJfcmVxICp0bXIgPSBzZV9jbWQtPnNlX3Rtcl9yZXE7CisJZW51bSBmY3BfcmVzcF9yc3BfY29kZXMgY29kZTsKKworCXN3aXRjaCAodG1yLT5yZXNwb25zZSkgeworCWNhc2UgVE1SX0ZVTkNUSU9OX0NPTVBMRVRFOgorCQljb2RlID0gRkNQX1RNRl9DTVBMOworCQlicmVhazsKKwljYXNlIFRNUl9MVU5fRE9FU19OT1RfRVhJU1Q6CisJCWNvZGUgPSBGQ1BfVE1GX0lOVkFMSURfTFVOOworCQlicmVhazsKKwljYXNlIFRNUl9GVU5DVElPTl9SRUpFQ1RFRDoKKwkJY29kZSA9IEZDUF9UTUZfUkVKRUNURUQ7CisJCWJyZWFrOworCWNhc2UgVE1SX1RBU0tfRE9FU19OT1RfRVhJU1Q6CisJY2FzZSBUTVJfVEFTS19TVElMTF9BTExFR0lBTlQ6CisJY2FzZSBUTVJfVEFTS19GQUlMT1ZFUl9OT1RfU1VQUE9SVEVEOgorCWNhc2UgVE1SX1RBU0tfTUdNVF9GVU5DVElPTl9OT1RfU1VQUE9SVEVEOgorCWNhc2UgVE1SX0ZVTkNUSU9OX0FVVEhPUklaQVRJT05fRkFJTEVEOgorCWRlZmF1bHQ6CisJCWNvZGUgPSBGQ1BfVE1GX0ZBSUxFRDsKKwkJYnJlYWs7CisJfQorCUZUX1RNX0RCRygidG1yIGZuICVkIHJlc3AgJWQgZmNwIGNvZGUgJWRcbiIsCisJCSAgdG1yLT5mdW5jdGlvbiwgdG1yLT5yZXNwb25zZSwgY29kZSk7CisJZnRfc2VuZF9yZXNwX2NvZGUoY21kLCBjb2RlKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEhhbmRsZSBpbmNvbWluZyBGQ1AgY29tbWFuZC4KKyAqLworc3RhdGljIHZvaWQgZnRfcmVjdl9jbWQoc3RydWN0IGZ0X3Nlc3MgKnNlc3MsIHN0cnVjdCBmY19mcmFtZSAqZnApCit7CisJc3RydWN0IGZ0X2NtZCAqY21kOworCXN0cnVjdCBmY19scG9ydCAqbHBvcnQgPSBzZXNzLT50cG9ydC0+bHBvcnQ7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFjbWQpCisJCWdvdG8gYnVzeTsKKwljbWQtPnNlc3MgPSBzZXNzOworCWNtZC0+c2VxID0gbHBvcnQtPnR0LnNlcV9hc3NpZ24obHBvcnQsIGZwKTsKKwlpZiAoIWNtZC0+c2VxKSB7CisJCWtmcmVlKGNtZCk7CisJCWdvdG8gYnVzeTsKKwl9CisJY21kLT5yZXFfZnJhbWUgPSBmcDsJCS8qIGhvbGQgZnJhbWUgZHVyaW5nIGNtZCAqLworCWZ0X3F1ZXVlX2NtZChzZXNzLCBjbWQpOworCXJldHVybjsKKworYnVzeToKKwlGVF9JT19EQkcoImNtZCBvciBzZXEgYWxsb2NhdGlvbiBmYWlsdXJlIC0gc2VuZGluZyBCVVNZXG4iKTsKKwlmdF9zZW5kX3Jlc3Bfc3RhdHVzKGxwb3J0LCBmcCwgU0FNX1NUQVRfQlVTWSwgMCk7CisJZmNfZnJhbWVfZnJlZShmcCk7CisJZnRfc2Vzc19wdXQoc2Vzcyk7CQkvKiB1bmRvIGdldCBmcm9tIGxvb2t1cCAqLworfQorCisKKy8qCisgKiBIYW5kbGUgaW5jb21pbmcgRkNQIGZyYW1lLgorICogQ2FsbGVyIGhhcyB2ZXJpZmllZCB0aGF0IHRoZSBmcmFtZSBpcyB0eXBlIEZDUC4KKyAqLwordm9pZCBmdF9yZWN2X3JlcShzdHJ1Y3QgZnRfc2VzcyAqc2Vzcywgc3RydWN0IGZjX2ZyYW1lICpmcCkKK3sKKwlzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICpmaCA9IGZjX2ZyYW1lX2hlYWRlcl9nZXQoZnApOworCisJc3dpdGNoIChmaC0+Zmhfcl9jdGwpIHsKKwljYXNlIEZDX1JDVExfRERfVU5TT0xfQ01EOgkvKiBjb21tYW5kICovCisJCWZ0X3JlY3ZfY21kKHNlc3MsIGZwKTsKKwkJYnJlYWs7CisJY2FzZSBGQ19SQ1RMX0REX1NPTF9EQVRBOgkvKiB3cml0ZSBkYXRhICovCisJY2FzZSBGQ19SQ1RMX0REX1VOU09MX0NUTDoKKwljYXNlIEZDX1JDVExfRERfU09MX0NUTDoKKwljYXNlIEZDX1JDVExfRERfREFUQV9ERVNDOgkvKiB0cmFuc2ZlciByZWFkeSAqLworCWNhc2UgRkNfUkNUTF9FTFM0X1JFUToJCS8qIFNSUiwgcGVyaGFwcyAqLworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiB1bmhhbmRsZWQgZnJhbWUgcl9jdGwgJXhcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgZmgtPmZoX3JfY3RsKTsKKwkJZmNfZnJhbWVfZnJlZShmcCk7CisJCWZ0X3Nlc3NfcHV0KHNlc3MpOwkvKiB1bmRvIGdldCBmcm9tIGxvb2t1cCAqLworCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBTZW5kIG5ldyBjb21tYW5kIHRvIHRhcmdldC4KKyAqLworc3RhdGljIHZvaWQgZnRfc2VuZF9jbWQoc3RydWN0IGZ0X2NtZCAqY21kKQoreworCXN0cnVjdCBmY19mcmFtZV9oZWFkZXIgKmZoID0gZmNfZnJhbWVfaGVhZGVyX2dldChjbWQtPnJlcV9mcmFtZSk7CisJc3RydWN0IHNlX2NtZCAqc2VfY21kOworCXN0cnVjdCBmY3BfY21uZCAqZmNwOworCWludCBkYXRhX2RpcjsKKwl1MzIgZGF0YV9sZW47CisJaW50IHRhc2tfYXR0cjsKKwlpbnQgcmV0OworCisJZmNwID0gZmNfZnJhbWVfcGF5bG9hZF9nZXQoY21kLT5yZXFfZnJhbWUsIHNpemVvZigqZmNwKSk7CisJaWYgKCFmY3ApCisJCWdvdG8gZXJyOworCisJaWYgKGZjcC0+ZmNfZmxhZ3MgJiBGQ1BfQ0ZMX0xFTl9NQVNLKQorCQlnb3RvIGVycjsJCS8qIG5vdCBoYW5kbGluZyBsb25nZXIgQ0RCcyB5ZXQgKi8KKworCWlmIChmY3AtPmZjX3RtX2ZsYWdzKSB7CisJCXRhc2tfYXR0ciA9IEZDUF9QVEFfU0lNUExFOworCQlkYXRhX2RpciA9IERNQV9OT05FOworCQlkYXRhX2xlbiA9IDA7CisJfSBlbHNlIHsKKwkJc3dpdGNoIChmY3AtPmZjX2ZsYWdzICYgKEZDUF9DRkxfUkREQVRBIHwgRkNQX0NGTF9XUkRBVEEpKSB7CisJCWNhc2UgMDoKKwkJCWRhdGFfZGlyID0gRE1BX05PTkU7CisJCQlicmVhazsKKwkJY2FzZSBGQ1BfQ0ZMX1JEREFUQToKKwkJCWRhdGFfZGlyID0gRE1BX0ZST01fREVWSUNFOworCQkJYnJlYWs7CisJCWNhc2UgRkNQX0NGTF9XUkRBVEE6CisJCQlkYXRhX2RpciA9IERNQV9UT19ERVZJQ0U7CisJCQlicmVhazsKKwkJY2FzZSBGQ1BfQ0ZMX1dSREFUQSB8IEZDUF9DRkxfUkREQVRBOgorCQkJZ290byBlcnI7CS8qIFRCRCBub3Qgc3VwcG9ydGVkIGJ5IHRjbV9mYyB5ZXQgKi8KKwkJfQorCisJCS8qIEZDUF9QVEFfIG1hcHMgMToxIHRvIFRBU0tfQVRUUl8gKi8KKwkJdGFza19hdHRyID0gZmNwLT5mY19wcmlfdGEgJiBGQ1BfUFRBX01BU0s7CisJCWRhdGFfbGVuID0gbnRvaGwoZmNwLT5mY19kbCk7CisJCWNtZC0+Y2RiID0gZmNwLT5mY19jZGI7CisJfQorCisJc2VfY21kID0gJmNtZC0+c2VfY21kOworCS8qCisJICogSW5pdGlhbGl6ZSBzdHJ1Y3Qgc2VfY21kIGRlc2NyaXB0b3IgZnJvbSB0YXJnZXRfY29yZV9tb2QKKwkgKiBpbmZyYXN0cnVjdHVyZQorCSAqLworCXRyYW5zcG9ydF9pbml0X3NlX2NtZChzZV9jbWQsICZmdF9jb25maWdmcy0+dGZfb3BzLCBjbWQtPnNlc3MtPnNlX3Nlc3MsCisJCQkgICAgICBkYXRhX2xlbiwgZGF0YV9kaXIsIHRhc2tfYXR0ciwKKwkJCSAgICAgICZjbWQtPmZ0X3NlbnNlX2J1ZmZlclswXSk7CisJLyoKKwkgKiBDaGVjayBmb3IgRkNQIHRhc2sgbWFuYWdlbWVudCBmbGFncworCSAqLworCWlmIChmY3AtPmZjX3RtX2ZsYWdzKSB7CisJCWZ0X3NlbmRfdG0oY21kKTsKKwkJcmV0dXJuOworCX0KKworCWZjX3NlcV9leGNoKGNtZC0+c2VxKS0+bHAtPnR0LnNlcV9zZXRfcmVzcChjbWQtPnNlcSwgZnRfcmVjdl9zZXEsIGNtZCk7CisKKwlyZXQgPSBmdF9nZXRfbHVuX2Zvcl9jbWQoY21kLCBmY3AtPmZjX2x1bik7CisJaWYgKHJldCA8IDApIHsKKwkJZnRfZHVtcF9jbWQoY21kLCBfX2Z1bmNfXyk7CisJCXRyYW5zcG9ydF9zZW5kX2NoZWNrX2NvbmRpdGlvbl9hbmRfc2Vuc2UoJmNtZC0+c2VfY21kLAorCQkJY21kLT5zZV9jbWQuc2NzaV9zZW5zZV9yZWFzb24sIDApOworCQlyZXR1cm47CisJfQorCisJcmV0ID0gdHJhbnNwb3J0X2dlbmVyaWNfYWxsb2NhdGVfdGFza3Moc2VfY21kLCBjbWQtPmNkYik7CisKKwlGVF9JT19EQkcoInJfY3RsICV4IGFsbG9jIHRhc2sgcmV0ICVkXG4iLCBmaC0+Zmhfcl9jdGwsIHJldCk7CisJZnRfZHVtcF9jbWQoY21kLCBfX2Z1bmNfXyk7CisKKwlpZiAocmV0ID09IC0xKSB7CisJCXRyYW5zcG9ydF9zZW5kX2NoZWNrX2NvbmRpdGlvbl9hbmRfc2Vuc2Uoc2VfY21kLAorCQkJCVRDTV9MT0dJQ0FMX1VOSVRfQ09NTVVOSUNBVElPTl9GQUlMVVJFLCAwKTsKKwkJdHJhbnNwb3J0X2dlbmVyaWNfZnJlZV9jbWQoc2VfY21kLCAwLCAxLCAwKTsKKwkJcmV0dXJuOworCX0KKwlpZiAocmV0ID09IC0yKSB7CisJCWlmIChzZV9jbWQtPnNlX2NtZF9mbGFncyAmIFNDRl9TQ1NJX1JFU0VSVkFUSU9OX0NPTkZMSUNUKQorCQkJZnRfcXVldWVfc3RhdHVzKHNlX2NtZCk7CisJCWVsc2UKKwkJCXRyYW5zcG9ydF9zZW5kX2NoZWNrX2NvbmRpdGlvbl9hbmRfc2Vuc2Uoc2VfY21kLAorCQkJCQlzZV9jbWQtPnNjc2lfc2Vuc2VfcmVhc29uLCAwKTsKKwkJdHJhbnNwb3J0X2dlbmVyaWNfZnJlZV9jbWQoc2VfY21kLCAwLCAxLCAwKTsKKwkJcmV0dXJuOworCX0KKwl0cmFuc3BvcnRfZ2VuZXJpY19oYW5kbGVfY2RiKHNlX2NtZCk7CisJcmV0dXJuOworCitlcnI6CisJZnRfc2VuZF9yZXNwX2NvZGUoY21kLCBGQ1BfQ01ORF9GSUVMRFNfSU5WQUxJRCk7CisJcmV0dXJuOworfQorCisvKgorICogSGFuZGxlIHJlcXVlc3QgaW4gdGhlIGNvbW1hbmQgdGhyZWFkLgorICovCitzdGF0aWMgdm9pZCBmdF9leGVjX3JlcShzdHJ1Y3QgZnRfY21kICpjbWQpCit7CisJRlRfSU9fREJHKCJjbWQgc3RhdGUgJXhcbiIsIGNtZC0+c3RhdGUpOworCXN3aXRjaCAoY21kLT5zdGF0ZSkgeworCWNhc2UgRkNfQ01EX1NUX05FVzoKKwkJZnRfc2VuZF9jbWQoY21kKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCisvKgorICogUHJvY2Vzc2luZyB0aHJlYWQuCisgKiBDdXJyZW50bHkgb25lIHRocmVhZCBwZXIgdHBnLgorICovCitpbnQgZnRfdGhyZWFkKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgZnRfdHBnICp0cGcgPSBhcmc7CisJc3RydWN0IHNlX3F1ZXVlX29iaiAqcW9iaiA9ICZ0cGctPnFvYmo7CisJc3RydWN0IGZ0X2NtZCAqY21kOworCWludCByZXQ7CisKKwlzZXRfdXNlcl9uaWNlKGN1cnJlbnQsIC0yMCk7CisKKwl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocW9iai0+dGhyZWFkX3dxLAorCQkJYXRvbWljX3JlYWQoJnFvYmotPnF1ZXVlX2NudCkgfHwga3RocmVhZF9zaG91bGRfc3RvcCgpKTsKKwkJaWYgKHJldCA8IDAgfHwga3RocmVhZF9zaG91bGRfc3RvcCgpKQorCQkJZ290byBvdXQ7CisJCWNtZCA9IGZ0X2RlcXVldWVfY21kKHFvYmopOworCQlpZiAoY21kKQorCQkJZnRfZXhlY19yZXEoY21kKTsKKwl9CisKK291dDoKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RjbV9mYy90ZmNfY29uZi5jIGIvZHJpdmVycy90YXJnZXQvdGNtX2ZjL3RmY19jb25mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNkYmJmZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RjbV9mYy90ZmNfY29uZi5jCkBAIC0wLDAgKzEsNjc3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6ICB0Y21fZmMuYworICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgY29uZmlnZnMgaW1wbGVtZW50YXRpb24gZm9yIFRDTV9mYyBmYWJyaWMgbm9kZS4KKyAqIEJhc2VkIG9uIHRjbV9sb29wX2NvbmZpZ2ZzLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgQ2lzY28gU3lzdGVtcywgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgUmlzaW5nIFRpZGUsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIExpbnV4LWlTQ1NJLm9yZworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIE5pY2hvbGFzIEEuIEJlbGxpbmdlciA8bmFiQGxpbnV4LWlzY3NpLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGdlbmVyYXRlZC91dHNyZWxlYXNlLmg+CisjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvY29uZmlnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorI2luY2x1ZGUgPHNjc2kvbGliZmMuaD4KKworI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV9iYXNlLmg+CisjaW5jbHVkZSA8dGFyZ2V0L3RhcmdldF9jb3JlX3RyYW5zcG9ydC5oPgorI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV9mYWJyaWNfb3BzLmg+CisjaW5jbHVkZSA8dGFyZ2V0L3RhcmdldF9jb3JlX2ZhYnJpY19jb25maWdmcy5oPgorI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV9mYWJyaWNfbGliLmg+CisjaW5jbHVkZSA8dGFyZ2V0L3RhcmdldF9jb3JlX2RldmljZS5oPgorI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV90cGcuaD4KKyNpbmNsdWRlIDx0YXJnZXQvdGFyZ2V0X2NvcmVfY29uZmlnZnMuaD4KKyNpbmNsdWRlIDx0YXJnZXQvdGFyZ2V0X2NvcmVfYmFzZS5oPgorI2luY2x1ZGUgPHRhcmdldC9jb25maWdmc19tYWNyb3MuaD4KKworI2luY2x1ZGUgInRjbV9mYy5oIgorCitzdHJ1Y3QgdGFyZ2V0X2ZhYnJpY19jb25maWdmcyAqZnRfY29uZmlnZnM7CisKK0xJU1RfSEVBRChmdF9scG9ydF9saXN0KTsKK0RFRklORV9NVVRFWChmdF9scG9ydF9sb2NrKTsKKwordW5zaWduZWQgaW50IGZ0X2RlYnVnX2xvZ2dpbmc7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWdfbG9nZ2luZywgZnRfZGVidWdfbG9nZ2luZywgaW50LCBTX0lSVUdPfFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1Z19sb2dnaW5nLCAiYSBiaXQgbWFzayBvZiBsb2dnaW5nIGxldmVscyIpOworCisvKgorICogUGFyc2UgV1dOLgorICogSWYgc3RyaWN0LCB3ZSByZXF1aXJlIGxvd2VyLWNhc2UgaGV4IGFuZCBjb2xvbiBzZXBhcmF0b3JzIHRvIGJlIHN1cmUKKyAqIHRoZSBuYW1lIGlzIHRoZSBzYW1lIGFzIHdoYXQgd291bGQgYmUgZ2VuZXJhdGVkIGJ5IGZ0X2Zvcm1hdF93d24oKQorICogc28gdGhlIG5hbWUgYW5kIHd3biBhcmUgbWFwcGVkIG9uZS10by1vbmUuCisgKi8KK3N0YXRpYyBzc2l6ZV90IGZ0X3BhcnNlX3d3bihjb25zdCBjaGFyICpuYW1lLCB1NjQgKnd3biwgaW50IHN0cmljdCkKK3sKKwljb25zdCBjaGFyICpjcDsKKwljaGFyIGM7CisJdTMyIG5pYmJsZTsKKwl1MzIgYnl0ZSA9IDA7CisJdTMyIHBvcyA9IDA7CisJdTMyIGVycjsKKworCSp3d24gPSAwOworCWZvciAoY3AgPSBuYW1lOyBjcCA8ICZuYW1lW0ZUX05BTUVMRU4gLSAxXTsgY3ArKykgeworCQljID0gKmNwOworCQlpZiAoYyA9PSAnXG4nICYmIGNwWzFdID09ICdcMCcpCisJCQljb250aW51ZTsKKwkJaWYgKHN0cmljdCAmJiBwb3MrKyA9PSAyICYmIGJ5dGUrKyA8IDcpIHsKKwkJCXBvcyA9IDA7CisJCQlpZiAoYyA9PSAnOicpCisJCQkJY29udGludWU7CisJCQllcnIgPSAxOworCQkJZ290byBmYWlsOworCQl9CisJCWlmIChjID09ICdcMCcpIHsKKwkJCWVyciA9IDI7CisJCQlpZiAoc3RyaWN0ICYmIGJ5dGUgIT0gOCkKKwkJCQlnb3RvIGZhaWw7CisJCQlyZXR1cm4gY3AgLSBuYW1lOworCQl9CisJCWVyciA9IDM7CisJCWlmIChpc2RpZ2l0KGMpKQorCQkJbmliYmxlID0gYyAtICcwJzsKKwkJZWxzZSBpZiAoaXN4ZGlnaXQoYykgJiYgKGlzbG93ZXIoYykgfHwgIXN0cmljdCkpCisJCQluaWJibGUgPSB0b2xvd2VyKGMpIC0gJ2EnICsgMTA7CisJCWVsc2UKKwkJCWdvdG8gZmFpbDsKKwkJKnd3biA9ICgqd3duIDw8IDQpIHwgbmliYmxlOworCX0KKwllcnIgPSA0OworZmFpbDoKKwlGVF9DT05GX0RCRygiZXJyICV1IGxlbiAlenUgcG9zICV1IGJ5dGUgJXVcbiIsCisJCSAgICBlcnIsIGNwIC0gbmFtZSwgcG9zLCBieXRlKTsKKwlyZXR1cm4gLTE7Cit9CisKK3NzaXplX3QgZnRfZm9ybWF0X3d3bihjaGFyICpidWYsIHNpemVfdCBsZW4sIHU2NCB3d24pCit7CisJdTggYls4XTsKKworCXB1dF91bmFsaWduZWRfYmU2NCh3d24sIGIpOworCXJldHVybiBzbnByaW50ZihidWYsIGxlbiwKKwkJICIlMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeCIsCisJCSBiWzBdLCBiWzFdLCBiWzJdLCBiWzNdLCBiWzRdLCBiWzVdLCBiWzZdLCBiWzddKTsKK30KKworc3RhdGljIHNzaXplX3QgZnRfd3duX3Nob3codm9pZCAqYXJnLCBjaGFyICpidWYpCit7CisJdTY0ICp3d24gPSBhcmc7CisJc3NpemVfdCBsZW47CisKKwlsZW4gPSBmdF9mb3JtYXRfd3duKGJ1ZiwgUEFHRV9TSVpFIC0gMiwgKnd3bik7CisJYnVmW2xlbisrXSA9ICdcbic7CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHNzaXplX3QgZnRfd3duX3N0b3JlKHZvaWQgKmFyZywgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCXNzaXplX3QgcmV0OworCXU2NCB3d247CisKKwlyZXQgPSBmdF9wYXJzZV93d24oYnVmLCAmd3duLCAwKTsKKwlpZiAocmV0ID4gMCkKKwkJKih1NjQgKilhcmcgPSB3d247CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEFDTCBhdXRoIG9wcy4KKyAqLworCitzdGF0aWMgc3NpemVfdCBmdF9uYWNsX3Nob3dfcG9ydF9uYW1lKAorCXN0cnVjdCBzZV9ub2RlX2FjbCAqc2VfbmFjbCwKKwljaGFyICpwYWdlKQoreworCXN0cnVjdCBmdF9ub2RlX2FjbCAqYWNsID0gY29udGFpbmVyX29mKHNlX25hY2wsCisJCQlzdHJ1Y3QgZnRfbm9kZV9hY2wsIHNlX25vZGVfYWNsKTsKKworCXJldHVybiBmdF93d25fc2hvdygmYWNsLT5ub2RlX2F1dGgucG9ydF9uYW1lLCBwYWdlKTsKK30KKworc3RhdGljIHNzaXplX3QgZnRfbmFjbF9zdG9yZV9wb3J0X25hbWUoCisJc3RydWN0IHNlX25vZGVfYWNsICpzZV9uYWNsLAorCWNvbnN0IGNoYXIgKnBhZ2UsCisJc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBmdF9ub2RlX2FjbCAqYWNsID0gY29udGFpbmVyX29mKHNlX25hY2wsCisJCQlzdHJ1Y3QgZnRfbm9kZV9hY2wsIHNlX25vZGVfYWNsKTsKKworCXJldHVybiBmdF93d25fc3RvcmUoJmFjbC0+bm9kZV9hdXRoLnBvcnRfbmFtZSwgcGFnZSwgY291bnQpOworfQorCitURl9OQUNMX0JBU0VfQVRUUihmdCwgcG9ydF9uYW1lLCBTX0lSVUdPIHwgU19JV1VTUik7CisKK3N0YXRpYyBzc2l6ZV90IGZ0X25hY2xfc2hvd19ub2RlX25hbWUoCisJc3RydWN0IHNlX25vZGVfYWNsICpzZV9uYWNsLAorCWNoYXIgKnBhZ2UpCit7CisJc3RydWN0IGZ0X25vZGVfYWNsICphY2wgPSBjb250YWluZXJfb2Yoc2VfbmFjbCwKKwkJCXN0cnVjdCBmdF9ub2RlX2FjbCwgc2Vfbm9kZV9hY2wpOworCisJcmV0dXJuIGZ0X3d3bl9zaG93KCZhY2wtPm5vZGVfYXV0aC5ub2RlX25hbWUsIHBhZ2UpOworfQorCitzdGF0aWMgc3NpemVfdCBmdF9uYWNsX3N0b3JlX25vZGVfbmFtZSgKKwlzdHJ1Y3Qgc2Vfbm9kZV9hY2wgKnNlX25hY2wsCisJY29uc3QgY2hhciAqcGFnZSwKKwlzaXplX3QgY291bnQpCit7CisJc3RydWN0IGZ0X25vZGVfYWNsICphY2wgPSBjb250YWluZXJfb2Yoc2VfbmFjbCwKKwkJCXN0cnVjdCBmdF9ub2RlX2FjbCwgc2Vfbm9kZV9hY2wpOworCisJcmV0dXJuIGZ0X3d3bl9zdG9yZSgmYWNsLT5ub2RlX2F1dGgubm9kZV9uYW1lLCBwYWdlLCBjb3VudCk7Cit9CisKK1RGX05BQ0xfQkFTRV9BVFRSKGZ0LCBub2RlX25hbWUsIFNfSVJVR08gfCBTX0lXVVNSKTsKKworc3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKmZ0X25hY2xfYmFzZV9hdHRyc1tdID0geworCSZmdF9uYWNsX3BvcnRfbmFtZS5hdHRyLAorCSZmdF9uYWNsX25vZGVfbmFtZS5hdHRyLAorCU5VTEwsCit9OworCisvKgorICogQUNMIG9wcy4KKyAqLworCisvKgorICogQWRkIEFDTCBmb3IgYW4gaW5pdGlhdG9yLiAgVGhlIEFDTCBpcyBuYW1lZCBhcmJpdHJhcmlseS4KKyAqIFRoZSBwb3J0X25hbWUgYW5kL29yIG5vZGVfbmFtZSBhcmUgYXR0cmlidXRlcy4KKyAqLworc3RhdGljIHN0cnVjdCBzZV9ub2RlX2FjbCAqZnRfYWRkX2FjbCgKKwlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICpzZV90cGcsCisJc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsCisJY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgZnRfbm9kZV9hY2wgKmFjbDsKKwlzdHJ1Y3QgZnRfdHBnICp0cGc7CisJdTY0IHd3cG47CisJdTMyIHFfZGVwdGg7CisKKwlGVF9DT05GX0RCRygiYWRkIGFjbCAlc1xuIiwgbmFtZSk7CisJdHBnID0gY29udGFpbmVyX29mKHNlX3RwZywgc3RydWN0IGZ0X3RwZywgc2VfdHBnKTsKKworCWlmIChmdF9wYXJzZV93d24obmFtZSwgJnd3cG4sIDEpIDwgMCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlhY2wgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZnRfbm9kZV9hY2wpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIShhY2wpKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwlhY2wtPm5vZGVfYXV0aC5wb3J0X25hbWUgPSB3d3BuOworCisJcV9kZXB0aCA9IDMyOwkJLyogWFhYIGJvZ3VzIGRlZmF1bHQgLSBnZXQgZnJvbSB0cGc/ICovCisJcmV0dXJuIGNvcmVfdHBnX2FkZF9pbml0aWF0b3Jfbm9kZV9hY2woJnRwZy0+c2VfdHBnLAorCQkJCSZhY2wtPnNlX25vZGVfYWNsLCBuYW1lLCBxX2RlcHRoKTsKK30KKworc3RhdGljIHZvaWQgZnRfZGVsX2FjbChzdHJ1Y3Qgc2Vfbm9kZV9hY2wgKnNlX2FjbCkKK3sKKwlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICpzZV90cGcgPSBzZV9hY2wtPnNlX3RwZzsKKwlzdHJ1Y3QgZnRfdHBnICp0cGc7CisJc3RydWN0IGZ0X25vZGVfYWNsICphY2wgPSBjb250YWluZXJfb2Yoc2VfYWNsLAorCQkJCXN0cnVjdCBmdF9ub2RlX2FjbCwgc2Vfbm9kZV9hY2wpOworCisJRlRfQ09ORl9EQkcoImRlbCBhY2wgJXNcbiIsCisJCWNvbmZpZ19pdGVtX25hbWUoJnNlX2FjbC0+YWNsX2dyb3VwLmNnX2l0ZW0pKTsKKworCXRwZyA9IGNvbnRhaW5lcl9vZihzZV90cGcsIHN0cnVjdCBmdF90cGcsIHNlX3RwZyk7CisJRlRfQ09ORl9EQkcoImRlbCBhY2wgJXAgc2VfYWNsICVwIHRwZyAlcCBzZV90cGcgJXBcbiIsCisJCSAgICBhY2wsIHNlX2FjbCwgdHBnLCAmdHBnLT5zZV90cGcpOworCisJY29yZV90cGdfZGVsX2luaXRpYXRvcl9ub2RlX2FjbCgmdHBnLT5zZV90cGcsIHNlX2FjbCwgMSk7CisJa2ZyZWUoYWNsKTsKK30KKworc3RydWN0IGZ0X25vZGVfYWNsICpmdF9hY2xfZ2V0KHN0cnVjdCBmdF90cGcgKnRwZywgc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhKQoreworCXN0cnVjdCBmdF9ub2RlX2FjbCAqZm91bmQgPSBOVUxMOworCXN0cnVjdCBmdF9ub2RlX2FjbCAqYWNsOworCXN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZyA9ICZ0cGctPnNlX3RwZzsKKwlzdHJ1Y3Qgc2Vfbm9kZV9hY2wgKnNlX2FjbDsKKworCXNwaW5fbG9ja19iaCgmc2VfdHBnLT5hY2xfbm9kZV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNlX2FjbCwgJnNlX3RwZy0+YWNsX25vZGVfbGlzdCwgYWNsX2xpc3QpIHsKKwkJYWNsID0gY29udGFpbmVyX29mKHNlX2FjbCwgc3RydWN0IGZ0X25vZGVfYWNsLCBzZV9ub2RlX2FjbCk7CisJCUZUX0NPTkZfREJHKCJhY2wgJXAgcG9ydF9uYW1lICVsbHhcbiIsCisJCQlhY2wsICh1bnNpZ25lZCBsb25nIGxvbmcpYWNsLT5ub2RlX2F1dGgucG9ydF9uYW1lKTsKKwkJaWYgKGFjbC0+bm9kZV9hdXRoLnBvcnRfbmFtZSA9PSByZGF0YS0+aWRzLnBvcnRfbmFtZSB8fAorCQkgICAgYWNsLT5ub2RlX2F1dGgubm9kZV9uYW1lID09IHJkYXRhLT5pZHMubm9kZV9uYW1lKSB7CisJCQlGVF9DT05GX0RCRygiYWNsICVwIHBvcnRfbmFtZSAlbGx4IG1hdGNoZWRcbiIsIGFjbCwKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyZGF0YS0+aWRzLnBvcnRfbmFtZSk7CisJCQlmb3VuZCA9IGFjbDsKKwkJCS8qIFhYWCBuZWVkIHRvIGhvbGQgb250byBBQ0wgKi8KKwkJCWJyZWFrOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2JoKCZzZV90cGctPmFjbF9ub2RlX2xvY2spOworCXJldHVybiBmb3VuZDsKK30KKworc3RydWN0IHNlX25vZGVfYWNsICpmdF90cGdfYWxsb2NfZmFicmljX2FjbChzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICpzZV90cGcpCit7CisJc3RydWN0IGZ0X25vZGVfYWNsICphY2w7CisKKwlhY2wgPSBremFsbG9jKHNpemVvZigqYWNsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCEoYWNsKSkgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBhbGxvY2F0ZSBzdHJ1Y3QgZnRfbm9kZV9hY2xcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJRlRfQ09ORl9EQkcoImFjbCAlcFxuIiwgYWNsKTsKKwlyZXR1cm4gJmFjbC0+c2Vfbm9kZV9hY2w7Cit9CisKK3N0YXRpYyB2b2lkIGZ0X3RwZ19yZWxlYXNlX2ZhYnJpY19hY2woc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnLAorCQkJCSAgICAgIHN0cnVjdCBzZV9ub2RlX2FjbCAqc2VfYWNsKQoreworCXN0cnVjdCBmdF9ub2RlX2FjbCAqYWNsID0gY29udGFpbmVyX29mKHNlX2FjbCwKKwkJCQlzdHJ1Y3QgZnRfbm9kZV9hY2wsIHNlX25vZGVfYWNsKTsKKworCUZUX0NPTkZfREJHKEtFUk5fSU5GTyAiYWNsICVwXG4iLCBhY2wpOworCWtmcmVlKGFjbCk7Cit9CisKKy8qCisgKiBsb2NhbF9wb3J0IHBvcnRfZ3JvdXAgKHRwZykgb3BzLgorICovCitzdGF0aWMgc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqZnRfYWRkX3RwZygKKwlzdHJ1Y3Qgc2Vfd3duICp3d24sCisJc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsCisJY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgZnRfbHBvcnRfYWNsICpsYWNsOworCXN0cnVjdCBmdF90cGcgKnRwZzsKKwl1bnNpZ25lZCBsb25nIGluZGV4OworCWludCByZXQ7CisKKwlGVF9DT05GX0RCRygidGNtX2ZjOiBhZGQgdHBnICVzXG4iLCBuYW1lKTsKKworCS8qCisJICogTmFtZSBtdXN0IGJlICJ0cGd0XyIgZm9sbG93ZWQgYnkgdGhlIGluZGV4LgorCSAqLworCWlmIChzdHJzdHIobmFtZSwgInRwZ3RfIikgIT0gbmFtZSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKHN0cmljdF9zdHJ0b3VsKG5hbWUgKyA1LCAxMCwgJmluZGV4KSB8fCBpbmRleCA+IFVJTlRfTUFYKQorCQlyZXR1cm4gTlVMTDsKKworCWxhY2wgPSBjb250YWluZXJfb2Yod3duLCBzdHJ1Y3QgZnRfbHBvcnRfYWNsLCBmY19scG9ydF93d24pOworCXRwZyA9IGt6YWxsb2Moc2l6ZW9mKCp0cGcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRwZykKKwkJcmV0dXJuIE5VTEw7CisJdHBnLT5pbmRleCA9IGluZGV4OworCXRwZy0+bHBvcnRfYWNsID0gbGFjbDsKKwlJTklUX0xJU1RfSEVBRCgmdHBnLT5sdW5fbGlzdCk7CisJdHJhbnNwb3J0X2luaXRfcXVldWVfb2JqKCZ0cGctPnFvYmopOworCisJcmV0ID0gY29yZV90cGdfcmVnaXN0ZXIoJmZ0X2NvbmZpZ2ZzLT50Zl9vcHMsIHd3biwgJnRwZy0+c2VfdHBnLAorCQkJCSh2b2lkICopdHBnLCBUUkFOU1BPUlRfVFBHX1RZUEVfTk9STUFMKTsKKwlpZiAocmV0IDwgMCkgeworCQlrZnJlZSh0cGcpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwl0cGctPnRocmVhZCA9IGt0aHJlYWRfcnVuKGZ0X3RocmVhZCwgdHBnLCAiZnRfdHBnJWx1IiwgaW5kZXgpOworCWlmIChJU19FUlIodHBnLT50aHJlYWQpKSB7CisJCWtmcmVlKHRwZyk7CisJCXJldHVybiBOVUxMOworCX0KKworCW11dGV4X2xvY2soJmZ0X2xwb3J0X2xvY2spOworCWxpc3RfYWRkX3RhaWwoJnRwZy0+bGlzdCwgJmxhY2wtPnRwZ19saXN0KTsKKwltdXRleF91bmxvY2soJmZ0X2xwb3J0X2xvY2spOworCisJcmV0dXJuICZ0cGctPnNlX3RwZzsKK30KKworc3RhdGljIHZvaWQgZnRfZGVsX3RwZyhzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICpzZV90cGcpCit7CisJc3RydWN0IGZ0X3RwZyAqdHBnID0gY29udGFpbmVyX29mKHNlX3RwZywgc3RydWN0IGZ0X3RwZywgc2VfdHBnKTsKKworCUZUX0NPTkZfREJHKCJkZWwgdHBnICVzXG4iLAorCQkgICAgY29uZmlnX2l0ZW1fbmFtZSgmdHBnLT5zZV90cGcudHBnX2dyb3VwLmNnX2l0ZW0pKTsKKworCWt0aHJlYWRfc3RvcCh0cGctPnRocmVhZCk7CisKKwkvKiBXYWl0IGZvciBzZXNzaW9ucyB0byBiZSBmcmVlZCB0aHJ1IFJDVSwgZm9yIEJVR19PTiBiZWxvdyAqLworCXN5bmNocm9uaXplX3JjdSgpOworCisJbXV0ZXhfbG9jaygmZnRfbHBvcnRfbG9jayk7CisJbGlzdF9kZWwoJnRwZy0+bGlzdCk7CisJaWYgKHRwZy0+dHBvcnQpIHsKKwkJdHBnLT50cG9ydC0+dHBnID0gTlVMTDsKKwkJdHBnLT50cG9ydCA9IE5VTEw7CisJfQorCW11dGV4X3VubG9jaygmZnRfbHBvcnRfbG9jayk7CisKKwljb3JlX3RwZ19kZXJlZ2lzdGVyKHNlX3RwZyk7CisJa2ZyZWUodHBnKTsKK30KKworLyoKKyAqIFZlcmlmeSB0aGF0IGFuIGxwb3J0IGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSB0Y21fZmMgbW9kdWxlLCBhbmQgcmV0dXJuCisgKiB0aGUgdGFyZ2V0IHBvcnQgZ3JvdXAgdGhhdCBzaG91bGQgYmUgdXNlZC4KKyAqCisgKiBUaGUgY2FsbGVyIGhvbGRzIGZ0X2xwb3J0X2xvY2suCisgKi8KK3N0cnVjdCBmdF90cGcgKmZ0X2xwb3J0X2ZpbmRfdHBnKHN0cnVjdCBmY19scG9ydCAqbHBvcnQpCit7CisJc3RydWN0IGZ0X2xwb3J0X2FjbCAqbGFjbDsKKwlzdHJ1Y3QgZnRfdHBnICp0cGc7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxhY2wsICZmdF9scG9ydF9saXN0LCBsaXN0KSB7CisJCWlmIChsYWNsLT53d3BuID09IGxwb3J0LT53d3BuKSB7CisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRwZywgJmxhY2wtPnRwZ19saXN0LCBsaXN0KQorCQkJCXJldHVybiB0cGc7IC8qIFhYWCBmb3Igbm93IHJldHVybiBmaXJzdCBlbnRyeSAqLworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiB0YXJnZXQgY29uZmlnIGluc3RhbmNlIG9wcy4KKyAqLworCisvKgorICogQWRkIGxwb3J0IHRvIGFsbG93ZWQgY29uZmlnLgorICogVGhlIG5hbWUgaXMgdGhlIFdXUE4gaW4gbG93ZXItY2FzZSBBU0NJSSwgY29sb24tc2VwYXJhdGVkIGJ5dGVzLgorICovCitzdGF0aWMgc3RydWN0IHNlX3d3biAqZnRfYWRkX2xwb3J0KAorCXN0cnVjdCB0YXJnZXRfZmFicmljX2NvbmZpZ2ZzICp0ZiwKKwlzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwKKwljb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBmdF9scG9ydF9hY2wgKmxhY2w7CisJc3RydWN0IGZ0X2xwb3J0X2FjbCAqb2xkX2xhY2w7CisJdTY0IHd3cG47CisKKwlGVF9DT05GX0RCRygiYWRkIGxwb3J0ICVzXG4iLCBuYW1lKTsKKwlpZiAoZnRfcGFyc2Vfd3duKG5hbWUsICZ3d3BuLCAxKSA8IDApCisJCXJldHVybiBOVUxMOworCWxhY2wgPSBremFsbG9jKHNpemVvZigqbGFjbCksIEdGUF9LRVJORUwpOworCWlmICghbGFjbCkKKwkJcmV0dXJuIE5VTEw7CisJbGFjbC0+d3dwbiA9IHd3cG47CisJSU5JVF9MSVNUX0hFQUQoJmxhY2wtPnRwZ19saXN0KTsKKworCW11dGV4X2xvY2soJmZ0X2xwb3J0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkob2xkX2xhY2wsICZmdF9scG9ydF9saXN0LCBsaXN0KSB7CisJCWlmIChvbGRfbGFjbC0+d3dwbiA9PSB3d3BuKSB7CisJCQltdXRleF91bmxvY2soJmZ0X2xwb3J0X2xvY2spOworCQkJa2ZyZWUobGFjbCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKwlsaXN0X2FkZF90YWlsKCZsYWNsLT5saXN0LCAmZnRfbHBvcnRfbGlzdCk7CisJZnRfZm9ybWF0X3d3bihsYWNsLT5uYW1lLCBzaXplb2YobGFjbC0+bmFtZSksIHd3cG4pOworCW11dGV4X3VubG9jaygmZnRfbHBvcnRfbG9jayk7CisKKwlyZXR1cm4gJmxhY2wtPmZjX2xwb3J0X3d3bjsKK30KKworc3RhdGljIHZvaWQgZnRfZGVsX2xwb3J0KHN0cnVjdCBzZV93d24gKnd3bikKK3sKKwlzdHJ1Y3QgZnRfbHBvcnRfYWNsICpsYWNsID0gY29udGFpbmVyX29mKHd3biwKKwkJCQlzdHJ1Y3QgZnRfbHBvcnRfYWNsLCBmY19scG9ydF93d24pOworCisJRlRfQ09ORl9EQkcoImRlbCBscG9ydCAlc1xuIiwKKwkJCWNvbmZpZ19pdGVtX25hbWUoJnd3bi0+d3duX2dyb3VwLmNnX2l0ZW0pKTsKKwltdXRleF9sb2NrKCZmdF9scG9ydF9sb2NrKTsKKwlsaXN0X2RlbCgmbGFjbC0+bGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZmdF9scG9ydF9sb2NrKTsKKworCWtmcmVlKGxhY2wpOworfQorCitzdGF0aWMgc3NpemVfdCBmdF93d25fc2hvd19hdHRyX3ZlcnNpb24oCisJc3RydWN0IHRhcmdldF9mYWJyaWNfY29uZmlnZnMgKnRmLAorCWNoYXIgKnBhZ2UpCit7CisJcmV0dXJuIHNwcmludGYocGFnZSwgIlRDTSBGQyAiIEZUX1ZFUlNJT04gIiBvbiAlcy8lcyBvbiAiCisJCSIiVVRTX1JFTEVBU0UiXG4iLCAgdXRzbmFtZSgpLT5zeXNuYW1lLCB1dHNuYW1lKCktPm1hY2hpbmUpOworfQorCitURl9XV05fQVRUUl9STyhmdCwgdmVyc2lvbik7CisKK3N0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICpmdF93d25fYXR0cnNbXSA9IHsKKwkmZnRfd3duX3ZlcnNpb24uYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIGNoYXIgKmZ0X2dldF9mYWJyaWNfbmFtZSh2b2lkKQoreworCXJldHVybiAiZmMiOworfQorCitzdGF0aWMgY2hhciAqZnRfZ2V0X2ZhYnJpY193d24oc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnKQoreworCXN0cnVjdCBmdF90cGcgKnRwZyA9IHNlX3RwZy0+c2VfdHBnX2ZhYnJpY19wdHI7CisKKwlyZXR1cm4gdHBnLT5scG9ydF9hY2wtPm5hbWU7Cit9CisKK3N0YXRpYyB1MTYgZnRfZ2V0X3RhZyhzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICpzZV90cGcpCit7CisJc3RydWN0IGZ0X3RwZyAqdHBnID0gc2VfdHBnLT5zZV90cGdfZmFicmljX3B0cjsKKworCS8qCisJICogVGhpcyB0YWcgaXMgdXNlZCB3aGVuIGZvcm1pbmcgU0NTSSBOYW1lIGlkZW50aWZpZXIgaW4gRVZQRD0xIDB4ODMKKwkgKiB0byByZXByZXNlbnQgdGhlIFNDU0kgVGFyZ2V0IFBvcnQuCisJICovCisJcmV0dXJuIHRwZy0+aW5kZXg7Cit9CisKK3N0YXRpYyB1MzIgZnRfZ2V0X2RlZmF1bHRfZGVwdGgoc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGZ0X2NoZWNrX2ZhbHNlKHN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZnRfc2V0X2RlZmF1bHRfbm9kZV9hdHRyKHN0cnVjdCBzZV9ub2RlX2FjbCAqc2VfbmFjbCkKK3sKK30KKworc3RhdGljIHUxNiBmdF9nZXRfZmFicmljX3NlbnNlX2xlbih2b2lkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdTE2IGZ0X3NldF9mYWJyaWNfc2Vuc2VfbGVuKHN0cnVjdCBzZV9jbWQgKnNlX2NtZCwgdTMyIHNlbnNlX2xlbikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBmdF90cGdfZ2V0X2luc3RfaW5kZXgoc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnKQoreworCXN0cnVjdCBmdF90cGcgKnRwZyA9IHNlX3RwZy0+c2VfdHBnX2ZhYnJpY19wdHI7CisKKwlyZXR1cm4gdHBnLT5pbmRleDsKK30KKworc3RhdGljIHU2NCBmdF9wYWNrX2x1bih1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisJV0FSTl9PTihpbmRleCA+PSAyNTYpOworCS8qIENhbGxlciB3YW50cyB0aGlzIGJ5dGUtc3dhcHBlZCAqLworCXJldHVybiBjcHVfdG9fbGU2NCgoaW5kZXggJiAweGZmKSA8PCA4KTsKK30KKworc3RhdGljIHN0cnVjdCB0YXJnZXRfY29yZV9mYWJyaWNfb3BzIGZ0X2ZhYnJpY19vcHMgPSB7CisJLmdldF9mYWJyaWNfbmFtZSA9CQlmdF9nZXRfZmFicmljX25hbWUsCisJLmdldF9mYWJyaWNfcHJvdG9faWRlbnQgPQlmY19nZXRfZmFicmljX3Byb3RvX2lkZW50LAorCS50cGdfZ2V0X3d3biA9CQkJZnRfZ2V0X2ZhYnJpY193d24sCisJLnRwZ19nZXRfdGFnID0JCQlmdF9nZXRfdGFnLAorCS50cGdfZ2V0X2RlZmF1bHRfZGVwdGggPQlmdF9nZXRfZGVmYXVsdF9kZXB0aCwKKwkudHBnX2dldF9wcl90cmFuc3BvcnRfaWQgPQlmY19nZXRfcHJfdHJhbnNwb3J0X2lkLAorCS50cGdfZ2V0X3ByX3RyYW5zcG9ydF9pZF9sZW4gPQlmY19nZXRfcHJfdHJhbnNwb3J0X2lkX2xlbiwKKwkudHBnX3BhcnNlX3ByX291dF90cmFuc3BvcnRfaWQgPSBmY19wYXJzZV9wcl9vdXRfdHJhbnNwb3J0X2lkLAorCS50cGdfY2hlY2tfZGVtb19tb2RlID0JCWZ0X2NoZWNrX2ZhbHNlLAorCS50cGdfY2hlY2tfZGVtb19tb2RlX2NhY2hlID0JZnRfY2hlY2tfZmFsc2UsCisJLnRwZ19jaGVja19kZW1vX21vZGVfd3JpdGVfcHJvdGVjdCA9IGZ0X2NoZWNrX2ZhbHNlLAorCS50cGdfY2hlY2tfcHJvZF9tb2RlX3dyaXRlX3Byb3RlY3QgPSBmdF9jaGVja19mYWxzZSwKKwkudHBnX2FsbG9jX2ZhYnJpY19hY2wgPQkJZnRfdHBnX2FsbG9jX2ZhYnJpY19hY2wsCisJLnRwZ19yZWxlYXNlX2ZhYnJpY19hY2wgPQlmdF90cGdfcmVsZWFzZV9mYWJyaWNfYWNsLAorCS50cGdfZ2V0X2luc3RfaW5kZXggPQkJZnRfdHBnX2dldF9pbnN0X2luZGV4LAorCS5jaGVja19zdG9wX2ZyZWUgPQkJZnRfY2hlY2tfc3RvcF9mcmVlLAorCS5yZWxlYXNlX2NtZF90b19wb29sID0JCWZ0X3JlbGVhc2VfY21kLAorCS5yZWxlYXNlX2NtZF9kaXJlY3QgPQkJZnRfcmVsZWFzZV9jbWQsCisJLnNodXRkb3duX3Nlc3Npb24gPQkJZnRfc2Vzc19zaHV0ZG93biwKKwkuY2xvc2Vfc2Vzc2lvbiA9CQlmdF9zZXNzX2Nsb3NlLAorCS5zdG9wX3Nlc3Npb24gPQkJCWZ0X3Nlc3Nfc3RvcCwKKwkuZmFsbF9iYWNrX3RvX2VybDAgPQkJZnRfc2Vzc19zZXRfZXJsMCwKKwkuc2Vzc19sb2dnZWRfaW4gPQkJZnRfc2Vzc19sb2dnZWRfaW4sCisJLnNlc3NfZ2V0X2luZGV4ID0JCWZ0X3Nlc3NfZ2V0X2luZGV4LAorCS5zZXNzX2dldF9pbml0aWF0b3Jfc2lkID0JTlVMTCwKKwkud3JpdGVfcGVuZGluZyA9CQlmdF93cml0ZV9wZW5kaW5nLAorCS53cml0ZV9wZW5kaW5nX3N0YXR1cyA9CQlmdF93cml0ZV9wZW5kaW5nX3N0YXR1cywKKwkuc2V0X2RlZmF1bHRfbm9kZV9hdHRyaWJ1dGVzID0JZnRfc2V0X2RlZmF1bHRfbm9kZV9hdHRyLAorCS5nZXRfdGFza190YWcgPQkJCWZ0X2dldF90YXNrX3RhZywKKwkuZ2V0X2NtZF9zdGF0ZSA9CQlmdF9nZXRfY21kX3N0YXRlLAorCS5uZXdfY21kX2ZhaWx1cmUgPQkJZnRfbmV3X2NtZF9mYWlsdXJlLAorCS5xdWV1ZV9kYXRhX2luID0JCWZ0X3F1ZXVlX2RhdGFfaW4sCisJLnF1ZXVlX3N0YXR1cyA9CQkJZnRfcXVldWVfc3RhdHVzLAorCS5xdWV1ZV90bV9yc3AgPQkJCWZ0X3F1ZXVlX3RtX3Jlc3AsCisJLmdldF9mYWJyaWNfc2Vuc2VfbGVuID0JCWZ0X2dldF9mYWJyaWNfc2Vuc2VfbGVuLAorCS5zZXRfZmFicmljX3NlbnNlX2xlbiA9CQlmdF9zZXRfZmFicmljX3NlbnNlX2xlbiwKKwkuaXNfc3RhdGVfcmVtb3ZlID0JCWZ0X2lzX3N0YXRlX3JlbW92ZSwKKwkucGFja19sdW4gPQkJCWZ0X3BhY2tfbHVuLAorCS8qCisJICogU2V0dXAgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIGdlbmVyaWMgbG9naWMgaW4KKwkgKiB0YXJnZXRfY29yZV9mYWJyaWNfY29uZmlnZnMuYworCSAqLworCS5mYWJyaWNfbWFrZV93d24gPQkJJmZ0X2FkZF9scG9ydCwKKwkuZmFicmljX2Ryb3Bfd3duID0JCSZmdF9kZWxfbHBvcnQsCisJLmZhYnJpY19tYWtlX3RwZyA9CQkmZnRfYWRkX3RwZywKKwkuZmFicmljX2Ryb3BfdHBnID0JCSZmdF9kZWxfdHBnLAorCS5mYWJyaWNfcG9zdF9saW5rID0JCU5VTEwsCisJLmZhYnJpY19wcmVfdW5saW5rID0JCU5VTEwsCisJLmZhYnJpY19tYWtlX25wID0JCU5VTEwsCisJLmZhYnJpY19kcm9wX25wID0JCU5VTEwsCisJLmZhYnJpY19tYWtlX25vZGVhY2wgPQkJJmZ0X2FkZF9hY2wsCisJLmZhYnJpY19kcm9wX25vZGVhY2wgPQkJJmZ0X2RlbF9hY2wsCit9OworCitpbnQgZnRfcmVnaXN0ZXJfY29uZmlnZnModm9pZCkKK3sKKwlzdHJ1Y3QgdGFyZ2V0X2ZhYnJpY19jb25maWdmcyAqZmFicmljOworCWludCByZXQ7CisKKwkvKgorCSAqIFJlZ2lzdGVyIHRoZSB0b3AgbGV2ZWwgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgd2l0aCBUQ00gY29yZQorCSAqLworCWZhYnJpYyA9IHRhcmdldF9mYWJyaWNfY29uZmlnZnNfaW5pdChUSElTX01PRFVMRSwgImZjIik7CisJaWYgKCFmYWJyaWMpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHRhcmdldF9mYWJyaWNfY29uZmlnZnNfaW5pdCgpIGZhaWxlZCFcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCXJldHVybiAtMTsKKwl9CisJZmFicmljLT50Zl9vcHMgPSBmdF9mYWJyaWNfb3BzOworCisJLyogQWxsb3dpbmcgc3VwcG9ydCBmb3IgdGFza19zZ19jaGFpbmluZyAqLworCWZhYnJpYy0+dGZfb3BzLnRhc2tfc2dfY2hhaW5pbmcgPSAxOworCisJLyoKKwkgKiBTZXR1cCBkZWZhdWx0IGF0dHJpYnV0ZSBsaXN0cyBmb3IgdmFyaW91cyBmYWJyaWMtPnRmX2NpdF90bXBsCisJICovCisJVEZfQ0lUX1RNUEwoZmFicmljKS0+dGZjX3d3bl9jaXQuY3RfYXR0cnMgPSBmdF93d25fYXR0cnM7CisJVEZfQ0lUX1RNUEwoZmFicmljKS0+dGZjX3RwZ19iYXNlX2NpdC5jdF9hdHRycyA9IE5VTEw7CisJVEZfQ0lUX1RNUEwoZmFicmljKS0+dGZjX3RwZ19hdHRyaWJfY2l0LmN0X2F0dHJzID0gTlVMTDsKKwlURl9DSVRfVE1QTChmYWJyaWMpLT50ZmNfdHBnX3BhcmFtX2NpdC5jdF9hdHRycyA9IE5VTEw7CisJVEZfQ0lUX1RNUEwoZmFicmljKS0+dGZjX3RwZ19ucF9iYXNlX2NpdC5jdF9hdHRycyA9IE5VTEw7CisJVEZfQ0lUX1RNUEwoZmFicmljKS0+dGZjX3RwZ19uYWNsX2Jhc2VfY2l0LmN0X2F0dHJzID0KKwkJCQkJCSAgICBmdF9uYWNsX2Jhc2VfYXR0cnM7CisJVEZfQ0lUX1RNUEwoZmFicmljKS0+dGZjX3RwZ19uYWNsX2F0dHJpYl9jaXQuY3RfYXR0cnMgPSBOVUxMOworCVRGX0NJVF9UTVBMKGZhYnJpYyktPnRmY190cGdfbmFjbF9hdXRoX2NpdC5jdF9hdHRycyA9IE5VTEw7CisJVEZfQ0lUX1RNUEwoZmFicmljKS0+dGZjX3RwZ19uYWNsX3BhcmFtX2NpdC5jdF9hdHRycyA9IE5VTEw7CisJLyoKKwkgKiByZWdpc3RlciB0aGUgZmFicmljIGZvciB1c2Ugd2l0aGluIFRDTQorCSAqLworCXJldCA9IHRhcmdldF9mYWJyaWNfY29uZmlnZnNfcmVnaXN0ZXIoZmFicmljKTsKKwlpZiAocmV0IDwgMCkgeworCQlGVF9DT05GX0RCRygidGFyZ2V0X2ZhYnJpY19jb25maWdmc19yZWdpc3RlcigpIGZvciIKKwkJCSAgICAiIEZDIFRhcmdldCBmYWlsZWQhXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgIiVzOiB0YXJnZXRfZmFicmljX2NvbmZpZ2ZzX3JlZ2lzdGVyKCkgZmFpbGVkIVxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJdGFyZ2V0X2ZhYnJpY19jb25maWdmc19mcmVlKGZhYnJpYyk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKgorCSAqIFNldHVwIG91ciBsb2NhbCBwb2ludGVyIHRvICpmYWJyaWMuCisJICovCisJZnRfY29uZmlnZnMgPSBmYWJyaWM7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZnRfZGVyZWdpc3Rlcl9jb25maWdmcyh2b2lkKQoreworCWlmICghZnRfY29uZmlnZnMpCisJCXJldHVybjsKKwl0YXJnZXRfZmFicmljX2NvbmZpZ2ZzX2RlcmVnaXN0ZXIoZnRfY29uZmlnZnMpOworCWZ0X2NvbmZpZ2ZzID0gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBmdF9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGZ0X2xwb3J0X25vdGlmeQorfTsKKworc3RhdGljIGludCBfX2luaXQgZnRfaW5pdCh2b2lkKQoreworCWlmIChmdF9yZWdpc3Rlcl9jb25maWdmcygpKQorCQlyZXR1cm4gLTE7CisJaWYgKGZjX2ZjNF9yZWdpc3Rlcl9wcm92aWRlcihGQ19UWVBFX0ZDUCwgJmZ0X3Byb3YpKSB7CisJCWZ0X2RlcmVnaXN0ZXJfY29uZmlnZnMoKTsKKwkJcmV0dXJuIC0xOworCX0KKwlibG9ja2luZ19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmZmNfbHBvcnRfbm90aWZpZXJfaGVhZCwgJmZ0X25vdGlmaWVyKTsKKwlmY19scG9ydF9pdGVyYXRlKGZ0X2xwb3J0X2FkZCwgTlVMTCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBmdF9leGl0KHZvaWQpCit7CisJYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmZmNfbHBvcnRfbm90aWZpZXJfaGVhZCwKKwkJCQkJICAgJmZ0X25vdGlmaWVyKTsKKwlmY19mYzRfZGVyZWdpc3Rlcl9wcm92aWRlcihGQ19UWVBFX0ZDUCwgJmZ0X3Byb3YpOworCWZjX2xwb3J0X2l0ZXJhdGUoZnRfbHBvcnRfZGVsLCBOVUxMKTsKKwlmdF9kZXJlZ2lzdGVyX2NvbmZpZ2ZzKCk7CisJc3luY2hyb25pemVfcmN1KCk7Cit9CisKKyNpZmRlZiBNT0RVTEUKK01PRFVMRV9ERVNDUklQVElPTigiRkMgVENNIGZhYnJpYyBkcml2ZXIgIiBGVF9WRVJTSU9OKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK21vZHVsZV9pbml0KGZ0X2luaXQpOworbW9kdWxlX2V4aXQoZnRfZXhpdCk7CisjZW5kaWYgLyogTU9EVUxFICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90Y21fZmMvdGZjX2lvLmMgYi9kcml2ZXJzL3RhcmdldC90Y21fZmMvdGZjX2lvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMzYzBlZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RjbV9mYy90ZmNfaW8uYwpAQCAtMCwwICsxLDM3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKgorICogUG9ydGlvbnMgYmFzZWQgb24gdGNtX2xvb3BfZmFicmljX3Njc2kuYyBhbmQgbGliZmMvZmNfZmNwLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOCBNaWtlIENocmlzdGllCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgUmlzaW5nIFRpZGUsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOSBMaW51eC1pU0NTSS5vcmcKKyAqIENvcHlyaWdodCAoYykgMjAwOSBOaWNob2xhcyBBLiBCZWxsaW5nZXIgPG5hYkBsaW51eC1pc2NzaS5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisvKiBYWFggVEJEIHNvbWUgaW5jbHVkZXMgbWF5IGJlIGV4dHJhbmVvdXMgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGdlbmVyYXRlZC91dHNyZWxlYXNlLmg+CisjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvY29uZmlnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KKyNpbmNsdWRlIDxzY3NpL2xpYmZjLmg+CisjaW5jbHVkZSA8c2NzaS9mY19lbmNvZGUuaD4KKworI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV9iYXNlLmg+CisjaW5jbHVkZSA8dGFyZ2V0L3RhcmdldF9jb3JlX3RyYW5zcG9ydC5oPgorI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV9mYWJyaWNfb3BzLmg+CisjaW5jbHVkZSA8dGFyZ2V0L3RhcmdldF9jb3JlX2RldmljZS5oPgorI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV90cGcuaD4KKyNpbmNsdWRlIDx0YXJnZXQvdGFyZ2V0X2NvcmVfY29uZmlnZnMuaD4KKyNpbmNsdWRlIDx0YXJnZXQvdGFyZ2V0X2NvcmVfYmFzZS5oPgorI2luY2x1ZGUgPHRhcmdldC9jb25maWdmc19tYWNyb3MuaD4KKworI2luY2x1ZGUgInRjbV9mYy5oIgorCisvKgorICogRGVsaXZlciByZWFkIGRhdGEgYmFjayB0byBpbml0aWF0b3IuCisgKiBYWFggVEJEIGhhbmRsZSByZXNvdXJjZSBwcm9ibGVtcyBsYXRlci4KKyAqLworaW50IGZ0X3F1ZXVlX2RhdGFfaW4oc3RydWN0IHNlX2NtZCAqc2VfY21kKQoreworCXN0cnVjdCBmdF9jbWQgKmNtZCA9IGNvbnRhaW5lcl9vZihzZV9jbWQsIHN0cnVjdCBmdF9jbWQsIHNlX2NtZCk7CisJc3RydWN0IHNlX3RyYW5zcG9ydF90YXNrICp0YXNrOworCXN0cnVjdCBmY19mcmFtZSAqZnAgPSBOVUxMOworCXN0cnVjdCBmY19leGNoICplcDsKKwlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0OworCXN0cnVjdCBzZV9tZW0gKm1lbTsKKwlzaXplX3QgcmVtYWluaW5nOworCXUzMiBmX2N0bCA9IEZDX0ZDX0VYX0NUWCB8IEZDX0ZDX1JFTF9PRkY7CisJdTMyIG1lbV9vZmY7CisJdTMyIGZoX29mZiA9IDA7CisJdTMyIGZyYW1lX29mZiA9IDA7CisJc2l6ZV90IGZyYW1lX2xlbiA9IDA7CisJc2l6ZV90IG1lbV9sZW47CisJc2l6ZV90IHRsZW47CisJc2l6ZV90IG9mZl9pbl9wYWdlOworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCB1c2Vfc2c7CisJaW50IGVycm9yOworCXZvaWQgKnBhZ2VfYWRkcjsKKwl2b2lkICpmcm9tOworCXZvaWQgKnRvID0gTlVMTDsKKworCWVwID0gZmNfc2VxX2V4Y2goY21kLT5zZXEpOworCWxwb3J0ID0gZXAtPmxwOworCWNtZC0+c2VxID0gbHBvcnQtPnR0LnNlcV9zdGFydF9uZXh0KGNtZC0+c2VxKTsKKworCXRhc2sgPSBUX1RBU0soc2VfY21kKTsKKwlCVUdfT04oIXRhc2spOworCXJlbWFpbmluZyA9IHNlX2NtZC0+ZGF0YV9sZW5ndGg7CisKKwkvKgorCSAqIFNldHVwIHRvIHVzZSBmaXJzdCBtZW0gbGlzdCBlbnRyeSBpZiBhbnkuCisJICovCisJaWYgKHRhc2stPnRfdGFza3Nfc2VfbnVtKSB7CisJCW1lbSA9IGxpc3RfZmlyc3RfZW50cnkodGFzay0+dF9tZW1fbGlzdCwKKwkJCSBzdHJ1Y3Qgc2VfbWVtLCBzZV9saXN0KTsKKwkJbWVtX2xlbiA9IG1lbS0+c2VfbGVuOworCQltZW1fb2ZmID0gbWVtLT5zZV9vZmY7CisJCXBhZ2UgPSBtZW0tPnNlX3BhZ2U7CisJfSBlbHNlIHsKKwkJbWVtID0gTlVMTDsKKwkJbWVtX2xlbiA9IHJlbWFpbmluZzsKKwkJbWVtX29mZiA9IDA7CisJCXBhZ2UgPSBOVUxMOworCX0KKworCS8qIG5vIHNjYXR0ZXIvZ2F0aGVyIGluIHNrYiBmb3Igb2RkIHdvcmQgbGVuZ3RoIGR1ZSB0byBmY19zZXFfc2VuZCgpICovCisJdXNlX3NnID0gIShyZW1haW5pbmcgJSA0KTsKKworCXdoaWxlIChyZW1haW5pbmcpIHsKKwkJaWYgKCFtZW1fbGVuKSB7CisJCQlCVUdfT04oIW1lbSk7CisJCQltZW0gPSBsaXN0X2VudHJ5KG1lbS0+c2VfbGlzdC5uZXh0LAorCQkJCXN0cnVjdCBzZV9tZW0sIHNlX2xpc3QpOworCQkJbWVtX2xlbiA9IG1pbigoc2l6ZV90KW1lbS0+c2VfbGVuLCByZW1haW5pbmcpOworCQkJbWVtX29mZiA9IG1lbS0+c2Vfb2ZmOworCQkJcGFnZSA9IG1lbS0+c2VfcGFnZTsKKwkJfQorCQlpZiAoIWZyYW1lX2xlbikgeworCQkJLyoKKwkJCSAqIElmIGxwb3J0J3MgaGFzIGNhcGFiaWxpdHkgb2YgTGFyZ2UgU2VuZCBPZmZsb2FkIExTTykKKwkJCSAqICwgdGhlbiBhbGxvdyAnZnJhbWVfbGVuJyB0byBiZSBhcyBiaWcgYXMgJ2xzb19tYXgnCisJCQkgKiBpZiBpbmRpY2F0ZWQgdHJhbnNmZXIgbGVuZ3RoIGlzID49IGxwb3J0LT5sc29fbWF4CisJCQkgKi8KKwkJCWZyYW1lX2xlbiA9IChscG9ydC0+c2VxX29mZmxvYWQpID8gbHBvcnQtPmxzb19tYXggOgorCQkJCQkJCSAgY21kLT5zZXNzLT5tYXhfZnJhbWU7CisJCQlmcmFtZV9sZW4gPSBtaW4oZnJhbWVfbGVuLCByZW1haW5pbmcpOworCQkJZnAgPSBmY19mcmFtZV9hbGxvYyhscG9ydCwgdXNlX3NnID8gMCA6IGZyYW1lX2xlbik7CisJCQlpZiAoIWZwKQorCQkJCXJldHVybiAtRU5PTUVNOworCQkJdG8gPSBmY19mcmFtZV9wYXlsb2FkX2dldChmcCwgMCk7CisJCQlmaF9vZmYgPSBmcmFtZV9vZmY7CisJCQlmcmFtZV9vZmYgKz0gZnJhbWVfbGVuOworCQkJLyoKKwkJCSAqIFNldHVwIHRoZSBmcmFtZSdzIG1heCBwYXlsb2FkIHdoaWNoIGlzIHVzZWQgYnkgYmFzZQorCQkJICogZHJpdmVyIHRvIGluZGljYXRlIEhXIGFib3V0IG1heCBmcmFtZSBzaXplLCBzbyB0aGF0CisJCQkgKiBIVyBjYW4gZG8gZnJhZ21lbnRhdGlvbiBhcHByb3ByaWF0ZWx5IGJhc2VkIG9uCisJCQkgKiAiZ3NvX21heF9zaXplIiBvZiB1bmRlcmxpbmUgbmV0ZGV2LgorCQkJICovCisJCQlmcl9tYXhfcGF5bG9hZChmcCkgPSBjbWQtPnNlc3MtPm1heF9mcmFtZTsKKwkJfQorCQl0bGVuID0gbWluKG1lbV9sZW4sIGZyYW1lX2xlbik7CisKKwkJaWYgKHVzZV9zZykgeworCQkJaWYgKCFtZW0pIHsKKwkJCQlCVUdfT04oIXRhc2stPnRfdGFza19idWYpOworCQkJCXBhZ2VfYWRkciA9IHRhc2stPnRfdGFza19idWYgKyBtZW1fb2ZmOworCQkJCS8qCisJCQkJICogSW4gdGhpcyBjYXNlLCBvZmZzZXQgaXMgJ29mZnNldF9pbl9wYWdlJyBvZgorCQkJCSAqICh0X3Rhc2tfYnVmICsgbWVtX29mZikgaW5zdGVhZCBvZiAnbWVtX29mZicuCisJCQkJICovCisJCQkJb2ZmX2luX3BhZ2UgPSBvZmZzZXRfaW5fcGFnZShwYWdlX2FkZHIpOworCQkJCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UocGFnZV9hZGRyKTsKKwkJCQl0bGVuID0gbWluKHRsZW4sIFBBR0VfU0laRSAtIG9mZl9pbl9wYWdlKTsKKwkJCX0gZWxzZQorCQkJCW9mZl9pbl9wYWdlID0gbWVtX29mZjsKKwkJCUJVR19PTighcGFnZSk7CisJCQlnZXRfcGFnZShwYWdlKTsKKwkJCXNrYl9maWxsX3BhZ2VfZGVzYyhmcF9za2IoZnApLAorCQkJCQkgICBza2Jfc2hpbmZvKGZwX3NrYihmcCkpLT5ucl9mcmFncywKKwkJCQkJICAgcGFnZSwgb2ZmX2luX3BhZ2UsIHRsZW4pOworCQkJZnJfbGVuKGZwKSArPSB0bGVuOworCQkJZnBfc2tiKGZwKS0+ZGF0YV9sZW4gKz0gdGxlbjsKKwkJCWZwX3NrYihmcCktPnRydWVzaXplICs9CisJCQkJCVBBR0VfU0laRSA8PCBjb21wb3VuZF9vcmRlcihwYWdlKTsKKwkJfSBlbHNlIGlmIChtZW0pIHsKKwkJCUJVR19PTighcGFnZSk7CisJCQlmcm9tID0ga21hcF9hdG9taWMocGFnZSArIChtZW1fb2ZmID4+IFBBR0VfU0hJRlQpLAorCQkJCQkgICBLTV9TT0ZUSVJRMCk7CisJCQlwYWdlX2FkZHIgPSBmcm9tOworCQkJZnJvbSArPSBtZW1fb2ZmICYgflBBR0VfTUFTSzsKKwkJCXRsZW4gPSBtaW4odGxlbiwgKHNpemVfdCkoUEFHRV9TSVpFIC0KKwkJCQkJCShtZW1fb2ZmICYgflBBR0VfTUFTSykpKTsKKwkJCW1lbWNweSh0bywgZnJvbSwgdGxlbik7CisJCQlrdW5tYXBfYXRvbWljKHBhZ2VfYWRkciwgS01fU09GVElSUTApOworCQkJdG8gKz0gdGxlbjsKKwkJfSBlbHNlIHsKKwkJCWZyb20gPSB0YXNrLT50X3Rhc2tfYnVmICsgbWVtX29mZjsKKwkJCW1lbWNweSh0bywgZnJvbSwgdGxlbik7CisJCQl0byArPSB0bGVuOworCQl9CisKKwkJbWVtX29mZiArPSB0bGVuOworCQltZW1fbGVuIC09IHRsZW47CisJCWZyYW1lX2xlbiAtPSB0bGVuOworCQlyZW1haW5pbmcgLT0gdGxlbjsKKworCQlpZiAoZnJhbWVfbGVuICYmCisJCSAgICAoc2tiX3NoaW5mbyhmcF9za2IoZnApKS0+bnJfZnJhZ3MgPCBGQ19GUkFNRV9TR19MRU4pKQorCQkJY29udGludWU7CisJCWlmICghcmVtYWluaW5nKQorCQkJZl9jdGwgfD0gRkNfRkNfRU5EX1NFUTsKKwkJZmNfZmlsbF9mY19oZHIoZnAsIEZDX1JDVExfRERfU09MX0RBVEEsIGVwLT5kaWQsIGVwLT5zaWQsCisJCQkgICAgICAgRkNfVFlQRV9GQ1AsIGZfY3RsLCBmaF9vZmYpOworCQllcnJvciA9IGxwb3J0LT50dC5zZXFfc2VuZChscG9ydCwgY21kLT5zZXEsIGZwKTsKKwkJaWYgKGVycm9yKSB7CisJCQkvKiBYWFggRm9yIG5vdywgaW5pdGlhdG9yIHdpbGwgcmV0cnkgKi8KKwkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIHNlbmQgZnJhbWUgJXAsICIKKwkJCQkJCSJ4aWQgPDB4JXg+LCByZW1haW5pbmcgPDB4JXg+LCAiCisJCQkJCQkibHNvX21heCA8MHgleD5cbiIsCisJCQkJCQlfX2Z1bmNfXywgZnAsIGVwLT54aWQsCisJCQkJCQlyZW1haW5pbmcsIGxwb3J0LT5sc29fbWF4KTsKKwkJfQorCX0KKwlyZXR1cm4gZnRfcXVldWVfc3RhdHVzKHNlX2NtZCk7Cit9CisKKy8qCisgKiBSZWNlaXZlIHdyaXRlIGRhdGEgZnJhbWUuCisgKi8KK3ZvaWQgZnRfcmVjdl93cml0ZV9kYXRhKHN0cnVjdCBmdF9jbWQgKmNtZCwgc3RydWN0IGZjX2ZyYW1lICpmcCkKK3sKKwlzdHJ1Y3Qgc2VfY21kICpzZV9jbWQgPSAmY21kLT5zZV9jbWQ7CisJc3RydWN0IGZjX3NlcSAqc2VxID0gY21kLT5zZXE7CisJc3RydWN0IGZjX2V4Y2ggKmVwOworCXN0cnVjdCBmY19scG9ydCAqbHBvcnQ7CisJc3RydWN0IHNlX3RyYW5zcG9ydF90YXNrICp0YXNrOworCXN0cnVjdCBmY19mcmFtZV9oZWFkZXIgKmZoOworCXN0cnVjdCBzZV9tZW0gKm1lbTsKKwl1MzIgbWVtX29mZjsKKwl1MzIgcmVsX29mZjsKKwlzaXplX3QgZnJhbWVfbGVuOworCXNpemVfdCBtZW1fbGVuOworCXNpemVfdCB0bGVuOworCXN0cnVjdCBwYWdlICpwYWdlOworCXZvaWQgKnBhZ2VfYWRkcjsKKwl2b2lkICpmcm9tOworCXZvaWQgKnRvOworCXUzMiBmX2N0bDsKKwl2b2lkICpidWY7CisKKwl0YXNrID0gVF9UQVNLKHNlX2NtZCk7CisJQlVHX09OKCF0YXNrKTsKKworCWZoID0gZmNfZnJhbWVfaGVhZGVyX2dldChmcCk7CisJaWYgKCEobnRvaDI0KGZoLT5maF9mX2N0bCkgJiBGQ19GQ19SRUxfT0ZGKSkKKwkJZ290byBkcm9wOworCisJLyoKKwkgKiBEb2Vzbid0IGV4cGVjdCBldmVuIHNpbmdsZSBieXRlIG9mIHBheWxvYWQuIFBheWxvYWQKKwkgKiBpcyBleHBlY3RlZCB0byBiZSBjb3BpZWQgZGlyZWN0bHkgdG8gdXNlciBidWZmZXJzCisJICogZHVlIHRvIEREUCAoTGFyZ2UgUnggb2ZmbG9hZCkgZmVhdHVyZSwgaGVuY2UKKwkgKiBCVUdfT04gaWYgQlVGIGlzIG5vbi1OVUxMCisJICovCisJYnVmID0gZmNfZnJhbWVfcGF5bG9hZF9nZXQoZnAsIDEpOworCWlmIChjbWQtPndhc19kZHBfc2V0dXAgJiYgYnVmKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBXaGVuIEREUCB3YXMgc2V0dXAsIG5vdCBleHBlY3RlZCB0byIKKwkJCQkgInJlY2VpdmUgZnJhbWUgd2l0aCBwYXlsb2FkLCBQYXlsb2FkIHNoYWxsIGJlIgorCQkJCSAiY29waWVkIGRpcmVjdGx5IHRvIGJ1ZmZlciBpbnN0ZWFkIG9mIGNvbWluZyAiCisJCQkJICJ2aWEuIGxlZ2FjeSByZWNlaXZlIHF1ZXVlc1xuIiwgX19mdW5jX18pOworCQlCVUdfT04oYnVmKTsKKwl9CisKKwkvKgorCSAqIElmIGZ0X2NtZCBpbmRpY2F0ZWQgJ2RkcF9zZXR1cCcsIGluIHRoYXQgY2FzZSBvbmx5IHRoZSBsYXN0IGZyYW1lCisJICogc2hvdWxkIGNvbWUgd2l0aCAnVFNJIGJpdCBiZWluZyBzZXQnLiBJZiAnVFNJIGJpdCBpcyBub3Qgc2V0IGFuZCBpZgorCSAqIGRhdGEgZnJhbWUgYXBwZWFycyBoZXJlLCBtZWFucyBlcnJvciBjb25kaXRpb24uIEluIGJvdGggdGhlIGNhc2VzCisJICogcmVsZWFzZSB0aGUgRERQIGNvbnRleHQgKGRkcF9wdXQpIGFuZCBpbiBlcnJvciBjYXNlLCBhcyB3ZWxsCisJICogaW5pdGlhdGUgZXJyb3IgcmVjb3ZlcnkgbWVjaGFuaXNtLgorCSAqLworCWVwID0gZmNfc2VxX2V4Y2goc2VxKTsKKwlpZiAoY21kLT53YXNfZGRwX3NldHVwKSB7CisJCUJVR19PTighZXApOworCQlscG9ydCA9IGVwLT5scDsKKwkJQlVHX09OKCFscG9ydCk7CisJfQorCWlmIChjbWQtPndhc19kZHBfc2V0dXAgJiYgZXAtPnhpZCAhPSBGQ19YSURfVU5LTk9XTikgeworCQlmX2N0bCA9IG50b2gyNChmaC0+ZmhfZl9jdGwpOworCQkvKgorCQkgKiBJZiBUU0kgYml0IHNldCBpbiBmX2N0bCwgbWVhbnMgbGFzdCB3cml0ZSBkYXRhIGZyYW1lIGlzCisJCSAqIHJlY2VpdmVkIHN1Y2Nlc3NmdWxseSB3aGVyZSBwYXlsb2FkIGlzIHBvc3RlZCBkaXJlY3RseQorCQkgKiB0byB1c2VyIGJ1ZmZlciBhbmQgb25seSB0aGUgbGFzdCBmcmFtZSdzIGhlYWRlciBpcyBwb3N0ZWQKKwkJICogaW4gbGVnYWN5IHJlY2VpdmUgcXVldWUKKwkJICovCisJCWlmIChmX2N0bCAmIEZDX0ZDX1NFUV9JTklUKSB7IC8qIFRTSSBiaXQgc2V0IGluIEZDIGZyYW1lICovCisJCQljbWQtPndyaXRlX2RhdGFfbGVuID0gbHBvcnQtPnR0LmRkcF9kb25lKGxwb3J0LAorCQkJCQkJCQllcC0+eGlkKTsKKwkJCWdvdG8gbGFzdF9mcmFtZTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBVcGRhdGluZyB0aGUgd3JpdGVfZGF0YV9sZW4gbWF5IGJlIG1lYW5pbmdsZXNzIGF0CisJCQkgKiB0aGlzIHBvaW50LCBidXQganVzdCBpbiBjYXNlIGlmIHJlcXVpcmVkIGluIGZ1dHVyZQorCQkJICogZm9yIGRlYnVnZ2luZyBvciBhbnkgb3RoZXIgcHVycG9zZQorCQkJICovCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBSZWNlaXZlZCBmcmFtZSB3aXRoIFRTSSBiaXQgbm90IgorCQkJCQkiIGJlaW5nIFNFVCwgZHJvcHBpbmcgdGhlIGZyYW1lLCAiCisJCQkJCSJjbWQtPnNnIDwlcD4sIGNtZC0+c2dfY250IDwweCV4PlxuIiwKKwkJCQkJX19mdW5jX18sIGNtZC0+c2csIGNtZC0+c2dfY250KTsKKwkJCWNtZC0+d3JpdGVfZGF0YV9sZW4gPSBscG9ydC0+dHQuZGRwX2RvbmUobHBvcnQsCisJCQkJCQkJICAgICAgZXAtPnhpZCk7CisJCQlscG9ydC0+dHQuc2VxX2V4Y2hfYWJvcnQoY21kLT5zZXEsIDApOworCQkJZ290byBkcm9wOworCQl9CisJfQorCisJcmVsX29mZiA9IG50b2hsKGZoLT5maF9wYXJtX29mZnNldCk7CisJZnJhbWVfbGVuID0gZnJfbGVuKGZwKTsKKwlpZiAoZnJhbWVfbGVuIDw9IHNpemVvZigqZmgpKQorCQlnb3RvIGRyb3A7CisJZnJhbWVfbGVuIC09IHNpemVvZigqZmgpOworCWZyb20gPSBmY19mcmFtZV9wYXlsb2FkX2dldChmcCwgMCk7CisJaWYgKHJlbF9vZmYgPj0gc2VfY21kLT5kYXRhX2xlbmd0aCkKKwkJZ290byBkcm9wOworCWlmIChmcmFtZV9sZW4gKyByZWxfb2ZmID4gc2VfY21kLT5kYXRhX2xlbmd0aCkKKwkJZnJhbWVfbGVuID0gc2VfY21kLT5kYXRhX2xlbmd0aCAtIHJlbF9vZmY7CisKKwkvKgorCSAqIFNldHVwIHRvIHVzZSBmaXJzdCBtZW0gbGlzdCBlbnRyeSBpZiBhbnkuCisJICovCisJaWYgKHRhc2stPnRfdGFza3Nfc2VfbnVtKSB7CisJCW1lbSA9IGxpc3RfZmlyc3RfZW50cnkodGFzay0+dF9tZW1fbGlzdCwKKwkJCQkgICAgICAgc3RydWN0IHNlX21lbSwgc2VfbGlzdCk7CisJCW1lbV9sZW4gPSBtZW0tPnNlX2xlbjsKKwkJbWVtX29mZiA9IG1lbS0+c2Vfb2ZmOworCQlwYWdlID0gbWVtLT5zZV9wYWdlOworCX0gZWxzZSB7CisJCW1lbSA9IE5VTEw7CisJCXBhZ2UgPSBOVUxMOworCQltZW1fb2ZmID0gMDsKKwkJbWVtX2xlbiA9IGZyYW1lX2xlbjsKKwl9CisKKwl3aGlsZSAoZnJhbWVfbGVuKSB7CisJCWlmICghbWVtX2xlbikgeworCQkJQlVHX09OKCFtZW0pOworCQkJbWVtID0gbGlzdF9lbnRyeShtZW0tPnNlX2xpc3QubmV4dCwKKwkJCQkJIHN0cnVjdCBzZV9tZW0sIHNlX2xpc3QpOworCQkJbWVtX2xlbiA9IG1lbS0+c2VfbGVuOworCQkJbWVtX29mZiA9IG1lbS0+c2Vfb2ZmOworCQkJcGFnZSA9IG1lbS0+c2VfcGFnZTsKKwkJfQorCQlpZiAocmVsX29mZiA+PSBtZW1fbGVuKSB7CisJCQlyZWxfb2ZmIC09IG1lbV9sZW47CisJCQltZW1fbGVuID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCW1lbV9vZmYgKz0gcmVsX29mZjsKKwkJbWVtX2xlbiAtPSByZWxfb2ZmOworCQlyZWxfb2ZmID0gMDsKKworCQl0bGVuID0gbWluKG1lbV9sZW4sIGZyYW1lX2xlbik7CisKKwkJaWYgKG1lbSkgeworCQkJdG8gPSBrbWFwX2F0b21pYyhwYWdlICsgKG1lbV9vZmYgPj4gUEFHRV9TSElGVCksCisJCQkJCSBLTV9TT0ZUSVJRMCk7CisJCQlwYWdlX2FkZHIgPSB0bzsKKwkJCXRvICs9IG1lbV9vZmYgJiB+UEFHRV9NQVNLOworCQkJdGxlbiA9IG1pbih0bGVuLCAoc2l6ZV90KShQQUdFX1NJWkUgLQorCQkJCQkJKG1lbV9vZmYgJiB+UEFHRV9NQVNLKSkpOworCQkJbWVtY3B5KHRvLCBmcm9tLCB0bGVuKTsKKwkJCWt1bm1hcF9hdG9taWMocGFnZV9hZGRyLCBLTV9TT0ZUSVJRMCk7CisJCX0gZWxzZSB7CisJCQl0byA9IHRhc2stPnRfdGFza19idWYgKyBtZW1fb2ZmOworCQkJbWVtY3B5KHRvLCBmcm9tLCB0bGVuKTsKKwkJfQorCQlmcm9tICs9IHRsZW47CisJCWZyYW1lX2xlbiAtPSB0bGVuOworCQltZW1fb2ZmICs9IHRsZW47CisJCW1lbV9sZW4gLT0gdGxlbjsKKwkJY21kLT53cml0ZV9kYXRhX2xlbiArPSB0bGVuOworCX0KK2xhc3RfZnJhbWU6CisJaWYgKGNtZC0+d3JpdGVfZGF0YV9sZW4gPT0gc2VfY21kLT5kYXRhX2xlbmd0aCkKKwkJdHJhbnNwb3J0X2dlbmVyaWNfaGFuZGxlX2RhdGEoc2VfY21kKTsKK2Ryb3A6CisJZmNfZnJhbWVfZnJlZShmcCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90Y21fZmMvdGZjX3Nlc3MuYyBiL2RyaXZlcnMvdGFyZ2V0L3RjbV9mYy90ZmNfc2Vzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYmQ1N2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3RhcmdldC90Y21fZmMvdGZjX3Nlc3MuYwpAQCAtMCwwICsxLDU0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisvKiBYWFggVEJEIHNvbWUgaW5jbHVkZXMgbWF5IGJlIGV4dHJhbmVvdXMgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGdlbmVyYXRlZC91dHNyZWxlYXNlLmg+CisjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvY29uZmlnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisjaW5jbHVkZSA8c2NzaS9saWJmYy5oPgorCisjaW5jbHVkZSA8dGFyZ2V0L3RhcmdldF9jb3JlX2Jhc2UuaD4KKyNpbmNsdWRlIDx0YXJnZXQvdGFyZ2V0X2NvcmVfdHJhbnNwb3J0Lmg+CisjaW5jbHVkZSA8dGFyZ2V0L3RhcmdldF9jb3JlX2ZhYnJpY19vcHMuaD4KKyNpbmNsdWRlIDx0YXJnZXQvdGFyZ2V0X2NvcmVfZGV2aWNlLmg+CisjaW5jbHVkZSA8dGFyZ2V0L3RhcmdldF9jb3JlX3RwZy5oPgorI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV9jb25maWdmcy5oPgorI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV9iYXNlLmg+CisjaW5jbHVkZSA8dGFyZ2V0L2NvbmZpZ2ZzX21hY3Jvcy5oPgorCisjaW5jbHVkZSA8c2NzaS9saWJmYy5oPgorI2luY2x1ZGUgInRjbV9mYy5oIgorCitzdGF0aWMgdm9pZCBmdF9zZXNzX2RlbGV0ZV9hbGwoc3RydWN0IGZ0X3Rwb3J0ICopOworCisvKgorICogTG9va3VwIG9yIGFsbG9jYXRlIHRhcmdldCBsb2NhbCBwb3J0LgorICogQ2FsbGVyIGhvbGRzIGZ0X2xwb3J0X2xvY2suCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZnRfdHBvcnQgKmZ0X3Rwb3J0X2NyZWF0ZShzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0KQoreworCXN0cnVjdCBmdF90cGcgKnRwZzsKKwlzdHJ1Y3QgZnRfdHBvcnQgKnRwb3J0OworCWludCBpOworCisJdHBvcnQgPSByY3VfZGVyZWZlcmVuY2UobHBvcnQtPnByb3ZbRkNfVFlQRV9GQ1BdKTsKKwlpZiAodHBvcnQgJiYgdHBvcnQtPnRwZykKKwkJcmV0dXJuIHRwb3J0OworCisJdHBnID0gZnRfbHBvcnRfZmluZF90cGcobHBvcnQpOworCWlmICghdHBnKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICh0cG9ydCkgeworCQl0cG9ydC0+dHBnID0gdHBnOworCQlyZXR1cm4gdHBvcnQ7CisJfQorCisJdHBvcnQgPSBremFsbG9jKHNpemVvZigqdHBvcnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRwb3J0KQorCQlyZXR1cm4gTlVMTDsKKworCXRwb3J0LT5scG9ydCA9IGxwb3J0OworCXRwb3J0LT50cGcgPSB0cGc7CisJdHBnLT50cG9ydCA9IHRwb3J0OworCWZvciAoaSA9IDA7IGkgPCBGVF9TRVNTX0hBU0hfU0laRTsgaSsrKQorCQlJTklUX0hMSVNUX0hFQUQoJnRwb3J0LT5oYXNoW2ldKTsKKworCXJjdV9hc3NpZ25fcG9pbnRlcihscG9ydC0+cHJvdltGQ19UWVBFX0ZDUF0sIHRwb3J0KTsKKwlyZXR1cm4gdHBvcnQ7Cit9CisKKy8qCisgKiBGcmVlIHRwb3J0IHZpYSBSQ1UuCisgKi8KK3N0YXRpYyB2b2lkIGZ0X3Rwb3J0X3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqcmN1KQoreworCXN0cnVjdCBmdF90cG9ydCAqdHBvcnQgPSBjb250YWluZXJfb2YocmN1LCBzdHJ1Y3QgZnRfdHBvcnQsIHJjdSk7CisKKwlrZnJlZSh0cG9ydCk7Cit9CisKKy8qCisgKiBEZWxldGUgYSB0YXJnZXQgbG9jYWwgcG9ydC4KKyAqIENhbGxlciBob2xkcyBmdF9scG9ydF9sb2NrLgorICovCitzdGF0aWMgdm9pZCBmdF90cG9ydF9kZWxldGUoc3RydWN0IGZ0X3Rwb3J0ICp0cG9ydCkKK3sKKwlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0OworCXN0cnVjdCBmdF90cGcgKnRwZzsKKworCWZ0X3Nlc3NfZGVsZXRlX2FsbCh0cG9ydCk7CisJbHBvcnQgPSB0cG9ydC0+bHBvcnQ7CisJQlVHX09OKHRwb3J0ICE9IGxwb3J0LT5wcm92W0ZDX1RZUEVfRkNQXSk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKGxwb3J0LT5wcm92W0ZDX1RZUEVfRkNQXSwgTlVMTCk7CisKKwl0cGcgPSB0cG9ydC0+dHBnOworCWlmICh0cGcpIHsKKwkJdHBnLT50cG9ydCA9IE5VTEw7CisJCXRwb3J0LT50cGcgPSBOVUxMOworCX0KKwljYWxsX3JjdSgmdHBvcnQtPnJjdSwgZnRfdHBvcnRfcmN1X2ZyZWUpOworfQorCisvKgorICogQWRkIGxvY2FsIHBvcnQuCisgKiBDYWxsZWQgdGhydSBmY19scG9ydF9pdGVyYXRlKCkuCisgKi8KK3ZvaWQgZnRfbHBvcnRfYWRkKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsIHZvaWQgKmFyZykKK3sKKwltdXRleF9sb2NrKCZmdF9scG9ydF9sb2NrKTsKKwlmdF90cG9ydF9jcmVhdGUobHBvcnQpOworCW11dGV4X3VubG9jaygmZnRfbHBvcnRfbG9jayk7Cit9CisKKy8qCisgKiBEZWxldGUgbG9jYWwgcG9ydC4KKyAqIENhbGxlZCB0aHJ1IGZjX2xwb3J0X2l0ZXJhdGUoKS4KKyAqLwordm9pZCBmdF9scG9ydF9kZWwoc3RydWN0IGZjX2xwb3J0ICpscG9ydCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBmdF90cG9ydCAqdHBvcnQ7CisKKwltdXRleF9sb2NrKCZmdF9scG9ydF9sb2NrKTsKKwl0cG9ydCA9IGxwb3J0LT5wcm92W0ZDX1RZUEVfRkNQXTsKKwlpZiAodHBvcnQpCisJCWZ0X3Rwb3J0X2RlbGV0ZSh0cG9ydCk7CisJbXV0ZXhfdW5sb2NrKCZmdF9scG9ydF9sb2NrKTsKK30KKworLyoKKyAqIE5vdGlmaWNhdGlvbiBvZiBsb2NhbCBwb3J0IGNoYW5nZSBmcm9tIGxpYmZjLgorICogQ3JlYXRlIG9yIGRlbGV0ZSBsb2NhbCBwb3J0IGFuZCBhc3NvY2lhdGVkIHRwb3J0LgorICovCitpbnQgZnRfbHBvcnRfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0ID0gYXJnOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgRkNfTFBPUlRfRVZfQUREOgorCQlmdF9scG9ydF9hZGQobHBvcnQsIE5VTEwpOworCQlicmVhazsKKwljYXNlIEZDX0xQT1JUX0VWX0RFTDoKKwkJZnRfbHBvcnRfZGVsKGxwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworLyoKKyAqIEhhc2ggZnVuY3Rpb24gZm9yIEZDX0lEcy4KKyAqLworc3RhdGljIHUzMiBmdF9zZXNzX2hhc2godTMyIHBvcnRfaWQpCit7CisJcmV0dXJuIGhhc2hfMzIocG9ydF9pZCwgRlRfU0VTU19IQVNIX0JJVFMpOworfQorCisvKgorICogRmluZCBzZXNzaW9uIGluIGxvY2FsIHBvcnQuCisgKiBTZXNzaW9ucyBhbmQgaGFzaCBsaXN0cyBhcmUgUkNVLXByb3RlY3RlZC4KKyAqIEEgcmVmZXJlbmNlIGlzIHRha2VuIHdoaWNoIG11c3QgYmUgZXZlbnR1YWxseSBmcmVlZC4KKyAqLworc3RhdGljIHN0cnVjdCBmdF9zZXNzICpmdF9zZXNzX2dldChzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0LCB1MzIgcG9ydF9pZCkKK3sKKwlzdHJ1Y3QgZnRfdHBvcnQgKnRwb3J0OworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBobGlzdF9ub2RlICpwb3M7CisJc3RydWN0IGZ0X3Nlc3MgKnNlc3M7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJdHBvcnQgPSByY3VfZGVyZWZlcmVuY2UobHBvcnQtPnByb3ZbRkNfVFlQRV9GQ1BdKTsKKwlpZiAoIXRwb3J0KQorCQlnb3RvIG91dDsKKworCWhlYWQgPSAmdHBvcnQtPmhhc2hbZnRfc2Vzc19oYXNoKHBvcnRfaWQpXTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2VzcywgcG9zLCBoZWFkLCBoYXNoKSB7CisJCWlmIChzZXNzLT5wb3J0X2lkID09IHBvcnRfaWQpIHsKKwkJCWtyZWZfZ2V0KCZzZXNzLT5rcmVmKTsKKwkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJRlRfU0VTU19EQkcoInBvcnRfaWQgJXggZm91bmQgJXBcbiIsIHBvcnRfaWQsIHNlc3MpOworCQkJcmV0dXJuIHNlc3M7CisJCX0KKwl9CitvdXQ6CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJRlRfU0VTU19EQkcoInBvcnRfaWQgJXggbm90IGZvdW5kXG4iLCBwb3J0X2lkKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIEFsbG9jYXRlIHNlc3Npb24gYW5kIGVudGVyIGl0IGluIHRoZSBoYXNoIGZvciB0aGUgbG9jYWwgcG9ydC4KKyAqIENhbGxlciBob2xkcyBmdF9scG9ydF9sb2NrLgorICovCitzdGF0aWMgc3RydWN0IGZ0X3Nlc3MgKmZ0X3Nlc3NfY3JlYXRlKHN0cnVjdCBmdF90cG9ydCAqdHBvcnQsIHUzMiBwb3J0X2lkLAorCQkJCSAgICAgIHN0cnVjdCBmdF9ub2RlX2FjbCAqYWNsKQoreworCXN0cnVjdCBmdF9zZXNzICpzZXNzOworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBobGlzdF9ub2RlICpwb3M7CisKKwloZWFkID0gJnRwb3J0LT5oYXNoW2Z0X3Nlc3NfaGFzaChwb3J0X2lkKV07CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNlc3MsIHBvcywgaGVhZCwgaGFzaCkKKwkJaWYgKHNlc3MtPnBvcnRfaWQgPT0gcG9ydF9pZCkKKwkJCXJldHVybiBzZXNzOworCisJc2VzcyA9IGt6YWxsb2Moc2l6ZW9mKCpzZXNzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZXNzKQorCQlyZXR1cm4gTlVMTDsKKworCXNlc3MtPnNlX3Nlc3MgPSB0cmFuc3BvcnRfaW5pdF9zZXNzaW9uKCk7CisJaWYgKCFzZXNzLT5zZV9zZXNzKSB7CisJCWtmcmVlKHNlc3MpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJc2Vzcy0+c2Vfc2Vzcy0+c2Vfbm9kZV9hY2wgPSAmYWNsLT5zZV9ub2RlX2FjbDsKKwlzZXNzLT50cG9ydCA9IHRwb3J0OworCXNlc3MtPnBvcnRfaWQgPSBwb3J0X2lkOworCWtyZWZfaW5pdCgmc2Vzcy0+a3JlZik7CS8qIHJlZiBmb3IgdGFibGUgZW50cnkgKi8KKwlobGlzdF9hZGRfaGVhZF9yY3UoJnNlc3MtPmhhc2gsIGhlYWQpOworCXRwb3J0LT5zZXNzX2NvdW50Kys7CisKKwlGVF9TRVNTX0RCRygicG9ydF9pZCAleCBzZXNzICVwXG4iLCBwb3J0X2lkLCBzZXNzKTsKKworCXRyYW5zcG9ydF9yZWdpc3Rlcl9zZXNzaW9uKCZ0cG9ydC0+dHBnLT5zZV90cGcsICZhY2wtPnNlX25vZGVfYWNsLAorCQkJCSAgIHNlc3MtPnNlX3Nlc3MsIHNlc3MpOworCXJldHVybiBzZXNzOworfQorCisvKgorICogVW5oYXNoIHRoZSBzZXNzaW9uLgorICogQ2FsbGVyIGhvbGRzIGZ0X2xwb3J0X2xvY2suCisgKi8KK3N0YXRpYyB2b2lkIGZ0X3Nlc3NfdW5oYXNoKHN0cnVjdCBmdF9zZXNzICpzZXNzKQoreworCXN0cnVjdCBmdF90cG9ydCAqdHBvcnQgPSBzZXNzLT50cG9ydDsKKworCWhsaXN0X2RlbF9yY3UoJnNlc3MtPmhhc2gpOworCUJVR19PTighdHBvcnQtPnNlc3NfY291bnQpOworCXRwb3J0LT5zZXNzX2NvdW50LS07CisJc2Vzcy0+cG9ydF9pZCA9IC0xOworCXNlc3MtPnBhcmFtcyA9IDA7Cit9CisKKy8qCisgKiBEZWxldGUgc2Vzc2lvbiBmcm9tIGhhc2guCisgKiBDYWxsZXIgaG9sZHMgZnRfbHBvcnRfbG9jay4KKyAqLworc3RhdGljIHN0cnVjdCBmdF9zZXNzICpmdF9zZXNzX2RlbGV0ZShzdHJ1Y3QgZnRfdHBvcnQgKnRwb3J0LCB1MzIgcG9ydF9pZCkKK3sKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zOworCXN0cnVjdCBmdF9zZXNzICpzZXNzOworCisJaGVhZCA9ICZ0cG9ydC0+aGFzaFtmdF9zZXNzX2hhc2gocG9ydF9pZCldOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZXNzLCBwb3MsIGhlYWQsIGhhc2gpIHsKKwkJaWYgKHNlc3MtPnBvcnRfaWQgPT0gcG9ydF9pZCkgeworCQkJZnRfc2Vzc191bmhhc2goc2Vzcyk7CisJCQlyZXR1cm4gc2VzczsKKwkJfQorCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIERlbGV0ZSBhbGwgc2Vzc2lvbnMgZnJvbSB0cG9ydC4KKyAqIENhbGxlciBob2xkcyBmdF9scG9ydF9sb2NrLgorICovCitzdGF0aWMgdm9pZCBmdF9zZXNzX2RlbGV0ZV9hbGwoc3RydWN0IGZ0X3Rwb3J0ICp0cG9ydCkKK3sKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zOworCXN0cnVjdCBmdF9zZXNzICpzZXNzOworCisJZm9yIChoZWFkID0gdHBvcnQtPmhhc2g7CisJICAgICBoZWFkIDwgJnRwb3J0LT5oYXNoW0ZUX1NFU1NfSEFTSF9TSVpFXTsgaGVhZCsrKSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZXNzLCBwb3MsIGhlYWQsIGhhc2gpIHsKKwkJCWZ0X3Nlc3NfdW5oYXNoKHNlc3MpOworCQkJdHJhbnNwb3J0X2RlcmVnaXN0ZXJfc2Vzc2lvbl9jb25maWdmcyhzZXNzLT5zZV9zZXNzKTsKKwkJCWZ0X3Nlc3NfcHV0KHNlc3MpOwkvKiByZWxlYXNlIGZyb20gdGFibGUgKi8KKwkJfQorCX0KK30KKworLyoKKyAqIFRDTSBvcHMgZm9yIHNlc3Npb25zLgorICovCisKKy8qCisgKiBEZXRlcm1pbmUgd2hldGhlciBzZXNzaW9uIGlzIGFsbG93ZWQgdG8gYmUgc2h1dGRvd24gaW4gdGhlIGN1cnJlbnQgY29udGV4dC4KKyAqIFJldHVybnMgbm9uLXplcm8gaWYgdGhlIHNlc3Npb24gc2hvdWxkIGJlIHNodXRkb3duLgorICovCitpbnQgZnRfc2Vzc19zaHV0ZG93bihzdHJ1Y3Qgc2Vfc2Vzc2lvbiAqc2Vfc2VzcykKK3sKKwlzdHJ1Y3QgZnRfc2VzcyAqc2VzcyA9IHNlX3Nlc3MtPmZhYnJpY19zZXNzX3B0cjsKKworCUZUX1NFU1NfREJHKCJwb3J0X2lkICV4XG4iLCBzZXNzLT5wb3J0X2lkKTsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFJlbW92ZSBzZXNzaW9uIGFuZCBzZW5kIFBSTE8uCisgKiBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBBQ0wgaXMgYmVpbmcgZGVsZXRlZCBvciBxdWV1ZSBkZXB0aCBpcyBjaGFuZ2luZy4KKyAqLwordm9pZCBmdF9zZXNzX2Nsb3NlKHN0cnVjdCBzZV9zZXNzaW9uICpzZV9zZXNzKQoreworCXN0cnVjdCBmdF9zZXNzICpzZXNzID0gc2Vfc2Vzcy0+ZmFicmljX3Nlc3NfcHRyOworCXN0cnVjdCBmY19scG9ydCAqbHBvcnQ7CisJdTMyIHBvcnRfaWQ7CisKKwltdXRleF9sb2NrKCZmdF9scG9ydF9sb2NrKTsKKwlscG9ydCA9IHNlc3MtPnRwb3J0LT5scG9ydDsKKwlwb3J0X2lkID0gc2Vzcy0+cG9ydF9pZDsKKwlpZiAocG9ydF9pZCA9PSAtMSkgeworCQltdXRleF9sb2NrKCZmdF9scG9ydF9sb2NrKTsKKwkJcmV0dXJuOworCX0KKwlGVF9TRVNTX0RCRygicG9ydF9pZCAleFxuIiwgcG9ydF9pZCk7CisJZnRfc2Vzc191bmhhc2goc2Vzcyk7CisJbXV0ZXhfdW5sb2NrKCZmdF9scG9ydF9sb2NrKTsKKwl0cmFuc3BvcnRfZGVyZWdpc3Rlcl9zZXNzaW9uX2NvbmZpZ2ZzKHNlX3Nlc3MpOworCWZ0X3Nlc3NfcHV0KHNlc3MpOworCS8qIFhYWCBTZW5kIExPR08gb3IgUFJMTyAqLworCXN5bmNocm9uaXplX3JjdSgpOwkJLyogbGV0IHRyYW5zcG9ydCBkZXJlZ2lzdGVyIGhhcHBlbiAqLworfQorCit2b2lkIGZ0X3Nlc3Nfc3RvcChzdHJ1Y3Qgc2Vfc2Vzc2lvbiAqc2Vfc2VzcywgaW50IHNlc3Nfc2xlZXAsIGludCBjb25uX3NsZWVwKQoreworCXN0cnVjdCBmdF9zZXNzICpzZXNzID0gc2Vfc2Vzcy0+ZmFicmljX3Nlc3NfcHRyOworCisJRlRfU0VTU19EQkcoInBvcnRfaWQgJXhcbiIsIHNlc3MtPnBvcnRfaWQpOworfQorCitpbnQgZnRfc2Vzc19sb2dnZWRfaW4oc3RydWN0IHNlX3Nlc3Npb24gKnNlX3Nlc3MpCit7CisJc3RydWN0IGZ0X3Nlc3MgKnNlc3MgPSBzZV9zZXNzLT5mYWJyaWNfc2Vzc19wdHI7CisKKwlyZXR1cm4gc2Vzcy0+cG9ydF9pZCAhPSAtMTsKK30KKwordTMyIGZ0X3Nlc3NfZ2V0X2luZGV4KHN0cnVjdCBzZV9zZXNzaW9uICpzZV9zZXNzKQoreworCXN0cnVjdCBmdF9zZXNzICpzZXNzID0gc2Vfc2Vzcy0+ZmFicmljX3Nlc3NfcHRyOworCisJcmV0dXJuIHNlc3MtPnBvcnRfaWQ7CS8qIFhYWCBUQkQgcHJvYmFibHkgbm90IHdoYXQgaXMgbmVlZGVkICovCit9CisKK3UzMiBmdF9zZXNzX2dldF9wb3J0X25hbWUoc3RydWN0IHNlX3Nlc3Npb24gKnNlX3Nlc3MsCisJCQkgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdTMyIGxlbikKK3sKKwlzdHJ1Y3QgZnRfc2VzcyAqc2VzcyA9IHNlX3Nlc3MtPmZhYnJpY19zZXNzX3B0cjsKKworCXJldHVybiBmdF9mb3JtYXRfd3duKGJ1ZiwgbGVuLCBzZXNzLT5wb3J0X25hbWUpOworfQorCit2b2lkIGZ0X3Nlc3Nfc2V0X2VybDAoc3RydWN0IHNlX3Nlc3Npb24gKnNlX3Nlc3MpCit7CisJLyogWFhYIFRCRCBjYWxsZWQgd2hlbiBvdXQgb2YgbWVtb3J5ICovCit9CisKKy8qCisgKiBsaWJmYyBvcHMgaW52b2x2aW5nIHNlc3Npb25zLgorICovCisKK3N0YXRpYyBpbnQgZnRfcHJsaV9sb2NrZWQoc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhLCB1MzIgc3BwX2xlbiwKKwkJCSAgY29uc3Qgc3RydWN0IGZjX2Vsc19zcHAgKnJzcHAsIHN0cnVjdCBmY19lbHNfc3BwICpzcHApCit7CisJc3RydWN0IGZ0X3Rwb3J0ICp0cG9ydDsKKwlzdHJ1Y3QgZnRfc2VzcyAqc2VzczsKKwlzdHJ1Y3QgZnRfbm9kZV9hY2wgKmFjbDsKKwl1MzIgZmNwX3Bhcm07CisKKwl0cG9ydCA9IGZ0X3Rwb3J0X2NyZWF0ZShyZGF0YS0+bG9jYWxfcG9ydCk7CisJaWYgKCF0cG9ydCkKKwkJcmV0dXJuIDA7CS8qIG5vdCBhIHRhcmdldCBmb3IgdGhpcyBsb2NhbCBwb3J0ICovCisKKwlhY2wgPSBmdF9hY2xfZ2V0KHRwb3J0LT50cGcsIHJkYXRhKTsKKwlpZiAoIWFjbCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXJzcHApCisJCWdvdG8gZmlsbDsKKworCWlmIChyc3BwLT5zcHBfZmxhZ3MgJiAoRkNfU1BQX09QQV9WQUwgfCBGQ19TUFBfUlBBX1ZBTCkpCisJCXJldHVybiBGQ19TUFBfUkVTUF9OT19QQTsKKworCS8qCisJICogSWYgYm90aCB0YXJnZXQgYW5kIGluaXRpYXRvciBiaXRzIGFyZSBvZmYsIHRoZSBTUFAgaXMgaW52YWxpZC4KKwkgKi8KKwlmY3BfcGFybSA9IG50b2hsKHJzcHAtPnNwcF9wYXJhbXMpOworCWlmICghKGZjcF9wYXJtICYgKEZDUF9TUFBGX0lOSVRfRkNOIHwgRkNQX1NQUEZfVEFSR19GQ04pKSkKKwkJcmV0dXJuIEZDX1NQUF9SRVNQX0lOVkw7CisKKwkvKgorCSAqIENyZWF0ZSBzZXNzaW9uIChpbWFnZSBwYWlyKSBvbmx5IGlmIHJlcXVlc3RlZCBieQorCSAqIEVTVF9JTUdfUEFJUiBmbGFnIGFuZCBpZiB0aGUgcmVxdWVzdG9yIGlzIGFuIGluaXRpYXRvci4KKwkgKi8KKwlpZiAocnNwcC0+c3BwX2ZsYWdzICYgRkNfU1BQX0VTVF9JTUdfUEFJUikgeworCQlzcHAtPnNwcF9mbGFncyB8PSBGQ19TUFBfRVNUX0lNR19QQUlSOworCQlpZiAoIShmY3BfcGFybSAmIEZDUF9TUFBGX0lOSVRfRkNOKSkKKwkJCXJldHVybiBGQ19TUFBfUkVTUF9DT05GOworCQlzZXNzID0gZnRfc2Vzc19jcmVhdGUodHBvcnQsIHJkYXRhLT5pZHMucG9ydF9pZCwgYWNsKTsKKwkJaWYgKCFzZXNzKQorCQkJcmV0dXJuIEZDX1NQUF9SRVNQX1JFUzsKKwkJaWYgKCFzZXNzLT5wYXJhbXMpCisJCQlyZGF0YS0+cHJsaV9jb3VudCsrOworCQlzZXNzLT5wYXJhbXMgPSBmY3BfcGFybTsKKwkJc2Vzcy0+cG9ydF9uYW1lID0gcmRhdGEtPmlkcy5wb3J0X25hbWU7CisJCXNlc3MtPm1heF9mcmFtZSA9IHJkYXRhLT5tYXhmcmFtZV9zaXplOworCisJCS8qIFhYWCBUQkQgLSBjbGVhcmluZyBhY3Rpb25zLiAgdW5pdCBhdHRuLCBzZWUgNC4xMCAqLworCX0KKworCS8qCisJICogT1IgaW4gb3VyIHNlcnZpY2UgcGFyYW1ldGVycyB3aXRoIG90aGVyIHByb3ZpZGVyIChpbml0aWF0b3IpLCBpZiBhbnkuCisJICogVEJEIFhYWCAtIGluZGljYXRlIFJFVFJZIGNhcGFiaWxpdHk/CisJICovCitmaWxsOgorCWZjcF9wYXJtID0gbnRvaGwoc3BwLT5zcHBfcGFyYW1zKTsKKwlzcHAtPnNwcF9wYXJhbXMgPSBodG9ubChmY3BfcGFybSB8IEZDUF9TUFBGX1RBUkdfRkNOKTsKKwlyZXR1cm4gRkNfU1BQX1JFU1BfQUNLOworfQorCisvKioKKyAqIHRjbV9mY3BfcHJsaSgpIC0gSGFuZGxlIGluY29taW5nIG9yIG91dGdvaW5nIFBSTEkgZm9yIHRoZSBGQ1AgdGFyZ2V0CisgKiBAcmRhdGE6IHJlbW90ZSBwb3J0IHByaXZhdGUKKyAqIEBzcHBfbGVuOiBzZXJ2aWNlIHBhcmFtZXRlciBwYWdlIGxlbmd0aAorICogQHJzcHA6IHJlY2VpdmVkIHNlcnZpY2UgcGFyYW1ldGVyIHBhZ2UgKE5VTEwgZm9yIG91dGdvaW5nIFBSTEkpCisgKiBAc3BwOiByZXNwb25zZSBzZXJ2aWNlIHBhcmFtZXRlciBwYWdlCisgKgorICogUmV0dXJucyBzcHAgcmVzcG9uc2UgY29kZS4KKyAqLworc3RhdGljIGludCBmdF9wcmxpKHN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YSwgdTMyIHNwcF9sZW4sCisJCSAgIGNvbnN0IHN0cnVjdCBmY19lbHNfc3BwICpyc3BwLCBzdHJ1Y3QgZmNfZWxzX3NwcCAqc3BwKQoreworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZmdF9scG9ydF9sb2NrKTsKKwlyZXQgPSBmdF9wcmxpX2xvY2tlZChyZGF0YSwgc3BwX2xlbiwgcnNwcCwgc3BwKTsKKwltdXRleF91bmxvY2soJmZ0X2xwb3J0X2xvY2spOworCUZUX1NFU1NfREJHKCJwb3J0X2lkICV4IGZsYWdzICV4IHJldCAleFxuIiwKKwkgICAgICAgcmRhdGEtPmlkcy5wb3J0X2lkLCByc3BwID8gcnNwcC0+c3BwX2ZsYWdzIDogMCwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBmdF9zZXNzX3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqcmN1KQoreworCXN0cnVjdCBmdF9zZXNzICpzZXNzID0gY29udGFpbmVyX29mKHJjdSwgc3RydWN0IGZ0X3Nlc3MsIHJjdSk7CisKKwl0cmFuc3BvcnRfZGVyZWdpc3Rlcl9zZXNzaW9uKHNlc3MtPnNlX3Nlc3MpOworCWtmcmVlKHNlc3MpOworfQorCitzdGF0aWMgdm9pZCBmdF9zZXNzX2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IGZ0X3Nlc3MgKnNlc3MgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGZ0X3Nlc3MsIGtyZWYpOworCisJY2FsbF9yY3UoJnNlc3MtPnJjdSwgZnRfc2Vzc19yY3VfZnJlZSk7Cit9CisKK3ZvaWQgZnRfc2Vzc19wdXQoc3RydWN0IGZ0X3Nlc3MgKnNlc3MpCit7CisJaW50IHNlc3NfaGVsZCA9IGF0b21pY19yZWFkKCZzZXNzLT5rcmVmLnJlZmNvdW50KTsKKworCUJVR19PTighc2Vzc19oZWxkKTsKKwlrcmVmX3B1dCgmc2Vzcy0+a3JlZiwgZnRfc2Vzc19mcmVlKTsKK30KKworc3RhdGljIHZvaWQgZnRfcHJsbyhzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGEpCit7CisJc3RydWN0IGZ0X3Nlc3MgKnNlc3M7CisJc3RydWN0IGZ0X3Rwb3J0ICp0cG9ydDsKKworCW11dGV4X2xvY2soJmZ0X2xwb3J0X2xvY2spOworCXRwb3J0ID0gcmN1X2RlcmVmZXJlbmNlKHJkYXRhLT5sb2NhbF9wb3J0LT5wcm92W0ZDX1RZUEVfRkNQXSk7CisJaWYgKCF0cG9ydCkgeworCQltdXRleF91bmxvY2soJmZ0X2xwb3J0X2xvY2spOworCQlyZXR1cm47CisJfQorCXNlc3MgPSBmdF9zZXNzX2RlbGV0ZSh0cG9ydCwgcmRhdGEtPmlkcy5wb3J0X2lkKTsKKwlpZiAoIXNlc3MpIHsKKwkJbXV0ZXhfdW5sb2NrKCZmdF9scG9ydF9sb2NrKTsKKwkJcmV0dXJuOworCX0KKwltdXRleF91bmxvY2soJmZ0X2xwb3J0X2xvY2spOworCXRyYW5zcG9ydF9kZXJlZ2lzdGVyX3Nlc3Npb25fY29uZmlnZnMoc2Vzcy0+c2Vfc2Vzcyk7CisJZnRfc2Vzc19wdXQoc2Vzcyk7CQkvKiByZWxlYXNlIGZyb20gdGFibGUgKi8KKwlyZGF0YS0+cHJsaV9jb3VudC0tOworCS8qIFhYWCBUQkQgLSBjbGVhcmluZyBhY3Rpb25zLiAgdW5pdCBhdHRuLCBzZWUgNC4xMCAqLworfQorCisvKgorICogSGFuZGxlIGluY29taW5nIEZDUCByZXF1ZXN0LgorICogQ2FsbGVyIGhhcyB2ZXJpZmllZCB0aGF0IHRoZSBmcmFtZSBpcyB0eXBlIEZDUC4KKyAqLworc3RhdGljIHZvaWQgZnRfcmVjdihzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0LCBzdHJ1Y3QgZmNfZnJhbWUgKmZwKQoreworCXN0cnVjdCBmdF9zZXNzICpzZXNzOworCXUzMiBzaWQgPSBmY19mcmFtZV9zaWQoZnApOworCisJRlRfU0VTU19EQkcoInNpZCAleFxuIiwgc2lkKTsKKworCXNlc3MgPSBmdF9zZXNzX2dldChscG9ydCwgc2lkKTsKKwlpZiAoIXNlc3MpIHsKKwkJRlRfU0VTU19EQkcoInNpZCAleCBzZXNzIGxvb2t1cCBmYWlsZWRcbiIsIHNpZCk7CisJCS8qIFRCRCBYWFggLSBpZiBGQ1BfQ01ORCwgc2VuZCBQUkxPICovCisJCWZjX2ZyYW1lX2ZyZWUoZnApOworCQlyZXR1cm47CisJfQorCWZ0X3JlY3ZfcmVxKHNlc3MsIGZwKTsJLyogbXVzdCBkbyBmdF9zZXNzX3B1dCgpICovCit9CisKKy8qCisgKiBQcm92aWRlciBvcHMgZm9yIGxpYmZjLgorICovCitzdHJ1Y3QgZmM0X3Byb3YgZnRfcHJvdiA9IHsKKwkucHJsaSA9IGZ0X3BybGksCisJLnBybG8gPSBmdF9wcmxvLAorCS5yZWN2ID0gZnRfcmVjdiwKKwkubW9kdWxlID0gVEhJU19NT0RVTEUsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvS2NvbmZpZyBiL2RyaXZlcnMvdHR5L0tjb25maWcKaW5kZXggM2ZkNzE5OS4uYmQ3Y2MwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvS2NvbmZpZworKysgYi9kcml2ZXJzL3R0eS9LY29uZmlnCkBAIC0zMTksMyArMzE5LDM0IEBACiAJICBUaGlzIGxpbmUgZGlzY2lwbGluZSBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgR1NNIE1VWCBwcm90b2NvbCBhbmQKIAkgIHByZXNlbnRzIHRoZSBtdXggYXMgYSBzZXQgb2YgNjEgaW5kaXZpZHVhbCB0dHkgZGV2aWNlcy4KIAorY29uZmlnIFRSQUNFX1JPVVRFUgorCXRyaXN0YXRlICJUcmFjZSBkYXRhIHJvdXRlciBmb3IgTUlQSSBQMTE0OS43IGNKVEFHIHN0YW5kYXJkIgorCWRlcGVuZHMgb24gVFJBQ0VfU0lOSworCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoZSB0cmFjZSByb3V0ZXIgdXNlcyB0aGUgTGludXggdHR5IGxpbmUgZGlzY2lwbGluZSBmcmFtZXdvcmsgdG8KKwkgIHJvdXRlIHRyYWNlIGRhdGEgY29taW5nIGZyb20gYSB0dHkgcG9ydCAoc2F5IFVBUlQgZm9yIGV4YW1wbGUpIHRvCisJICB0aGUgdHJhY2Ugc2luayBsaW5lIGRpc2NpcGxpbmUgZHJpdmVyIGFuZCB0byBhbm90aGVyIHR0eSBwb3J0IChzYXkKKwkgIFVTQikuIFRoaXMgaXMgcGFydCBvZiBhIHNvbHV0aW9uIGZvciB0aGUgTUlQSSBQMTE0OS43LCBjb21wYWN0IEpUQUcsCisJICBzdGFuZGFyZCwgd2hpY2ggaXMgZm9yIGRlYnVnZ2luZyBtb2JpbGUgZGV2aWNlcy4gVGhlIFBUSSBkcml2ZXIgaW4KKwkgIGRyaXZlcnMvbWlzYy9wdGkuYyBkZWZpbmVzIHRoZSBtYWpvcml0eSBvZiB0aGlzIE1JUEkgc29sdXRpb24uCisKKwkgIFlvdSBzaG91bGQgc2VsZWN0IHRoaXMgZHJpdmVyIGlmIHRoZSB0YXJnZXQga2VybmVsIGlzIG1lYW50IGZvcgorCSAgYSBtb2JpbGUgZGV2aWNlIGNvbnRhaW5pbmcgYSBtb2RlbS4gIFRoZW4geW91IHdpbGwgbmVlZCB0byBzZWxlY3QKKwkgICJUcmFjZSBkYXRhIHNpbmsgZm9yIE1JUEkgUDExNDkuNyBjSlRBRyBzdGFuZGFyZCIgbGluZSBkaXNjaXBsaW5lCisJICBkcml2ZXIuCisKK2NvbmZpZyBUUkFDRV9TSU5LCisJdHJpc3RhdGUgIlRyYWNlIGRhdGEgc2luayBmb3IgTUlQSSBQMTE0OS43IGNKVEFHIHN0YW5kYXJkIgorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoZSB0cmFjZSBzaW5rIHVzZXMgdGhlIExpbnV4IGxpbmUgZGlzY2lwbGluZSBmcmFtZXdvcmsgdG8gcmVjZWl2ZQorCSAgdHJhY2UgZGF0YSBjb21pbmcgZnJvbSB0aGUgdHJhY2Ugcm91dGVyIGxpbmUgZGlzY2lwbGluZSBkcml2ZXIKKwkgIHRvIGEgdXNlci1kZWZpbmVkIHR0eSBwb3J0IHRhcmdldCwgbGlrZSBVU0IuCisJICBUaGlzIGlzIHRvIHByb3ZpZGUgYSB3YXkgdG8gZXh0cmFjdCBtb2RlbSB0cmFjZSBkYXRhIG9uCisJICBkZXZpY2VzIHRoYXQgZG8gbm90IGhhdmUgYSBQVEkgSFcgbW9kdWxlLCBvciBqdXN0IG5lZWQgbW9kZW0KKwkgIHRyYWNlIGRhdGEgdG8gY29tZSBvdXQgb2YgYSBkaWZmZXJlbnQgSFcgb3V0cHV0IHBvcnQuCisJICBUaGlzIGlzIHBhcnQgb2YgYSBzb2x1dGlvbiBmb3IgdGhlIFAxMTQ5LjcsIGNvbXBhY3QgSlRBRywgc3RhbmRhcmQuCisKKwkgIElmIHlvdSBzZWxlY3QgdGhpcyBvcHRpb24sIHlvdSBuZWVkIHRvIHNlbGVjdAorCSAgIlRyYWNlIGRhdGEgcm91dGVyIGZvciBNSVBJIFAxMTQ5LjcgY0pUQUcgc3RhbmRhcmQiLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvTWFrZWZpbGUgYi9kcml2ZXJzL3R0eS9NYWtlZmlsZQppbmRleCA2OTA1MjJmLi5lYTg5YjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3R0eS9NYWtlZmlsZQpAQCAtNiw2ICs2LDggQEAKIG9iai0kKENPTkZJR19NQUdJQ19TWVNSUSkJKz0gc3lzcnEubwogb2JqLSQoQ09ORklHX05fSERMQykJCSs9IG5faGRsYy5vCiBvYmotJChDT05GSUdfTl9HU00pCQkrPSBuX2dzbS5vCitvYmotJChDT05GSUdfVFJBQ0VfUk9VVEVSKQkrPSBuX3RyYWNlcm91dGVyLm8KK29iai0kKENPTkZJR19UUkFDRV9TSU5LKQkrPSBuX3RyYWNlc2luay5vCiBvYmotJChDT05GSUdfUjM5NjQpCQkrPSBuX3IzOTY0Lm8KIAogb2JqLXkJCQkJKz0gdnQvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9hbWlzZXJpYWwuYyBiL2RyaXZlcnMvdHR5L2FtaXNlcmlhbC5jCmluZGV4IGYyMTRlNTAuLjIyMDU3OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L2FtaXNlcmlhbC5jCisrKyBiL2RyaXZlcnMvdHR5L2FtaXNlcmlhbC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICBsaW51eC9kcml2ZXJzL2NoYXIvYW1pc2VyaWFsLmMKLSAqCiAgKiBTZXJpYWwgZHJpdmVyIGZvciB0aGUgYW1pZ2EgYnVpbHRpbiBwb3J0LgogICoKICAqIFRoaXMgY29kZSB3YXMgY3JlYXRlZCBieSB0YWtpbmcgc2VyaWFsLmMgdmVyc2lvbiA0LjMwIGZyb20ga2VybmVsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9jeWNsYWRlcy5jIGIvZHJpdmVycy90dHkvY3ljbGFkZXMuYwppbmRleCBjOTk3MjhmLi5iZmEwNWU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9jeWNsYWRlcy5jCisrKyBiL2RyaXZlcnMvdHR5L2N5Y2xhZGVzLmMKQEAgLTMsOCArMyw2IEBACiAjdW5kZWYJWl9FWFRfQ0hBUlNfSU5fQlVGRkVSCiAKIC8qCi0gKiAgbGludXgvZHJpdmVycy9jaGFyL2N5Y2xhZGVzLmMKLSAqCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRyaXZlciBmb3IgdGhlIEN5Y2xhZGVzIGFzeW5jIG11bHRpcG9ydAogICogc2VyaWFsIGJvYXJkcy4KICAqCkBAIC0xNDQ1LDEzICsxNDQzLDExIEBACiB7CiAJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNhcmQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgY2hhbm5lbDsKIAogCWlmICghKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkpCiAJCXJldHVybjsKIAogCWNhcmQgPSBpbmZvLT5jYXJkOwotCWNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY2FyZC0+Zmlyc3RfbGluZTsKIAlpZiAoIWN5X2lzX1ooY2FyZCkpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCkBAIC0xNDc2LDYgKzE0NzIsNyBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAl9IGVsc2UgewogI2lmZGVmIENZX0RFQlVHX09QRU4KKwkJaW50IGNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY2FyZC0+Zmlyc3RfbGluZTsKIAkJcHJpbnRrKEtFUk5fREVCVUcgImN5YyBzaHV0ZG93biBaIGNhcmQgJWQsIGNoYW5uZWwgJWQsICIKIAkJCSJiYXNlX2FkZHIgJXBcbiIsIGNhcmQsIGNoYW5uZWwsIGNhcmQtPmJhc2VfYWRkcik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L2lwd2lyZWxlc3MvTWFrZWZpbGUgYi9kcml2ZXJzL3R0eS9pcHdpcmVsZXNzL01ha2VmaWxlCmluZGV4IGRiODA4NzNkLi5mZTJlMTczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9pcHdpcmVsZXNzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdHR5L2lwd2lyZWxlc3MvTWFrZWZpbGUKQEAgLTEsNiArMSw0IEBACiAjCi0jIGRyaXZlcnMvY2hhci9wY21jaWEvaXB3aXJlbGVzcy9NYWtlZmlsZQotIwogIyBNYWtlZmlsZSBmb3IgdGhlIElQV2lyZWxlc3MgZHJpdmVyCiAjCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L21veGEuYyBiL2RyaXZlcnMvdHR5L21veGEuYwppbmRleCAzNWIwYzM4Li5iYTY3OWNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9tb3hhLmMKKysrIGIvZHJpdmVycy90dHkvbW94YS5jCkBAIC0zNzEsNyArMzcxLDcgQEAKIAkJCQkJdG1wLmNmbGFnID0gcC0+Y2ZsYWc7CiAJCQkJZWxzZQogCQkJCQl0bXAuY2ZsYWcgPSB0dHlwLT50ZXJtaW9zLT5jX2NmbGFnOwotCQkJCXR0eV9rcmVmX3B1dCh0dHkpOworCQkJCXR0eV9rcmVmX3B1dCh0dHlwKTsKIGNvcHk6CiAJCQkJaWYgKGNvcHlfdG9fdXNlcihhcmdtLCAmdG1wLCBzaXplb2YodG1wKSkpCiAJCQkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTEyOSw3ICsxMTI5LDYgQEAKIAlzdHJ1Y3QgbW94YV9wb3J0ICpjaCA9IGNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgbW94YV9wb3J0LCBwb3J0KTsKICAgICAgICAgTW94YVBvcnREaXNhYmxlKGNoKTsKIAlNb3hhUG9ydEZsdXNoRGF0YShjaCwgMik7Ci0JY2xlYXJfYml0KEFTWU5DQl9OT1JNQUxfQUNUSVZFLCAmcG9ydC0+ZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IG1veGFfY2Fycmllcl9yYWlzZWQoc3RydWN0IHR0eV9wb3J0ICpwb3J0KQpAQCAtMTE1NSw3ICsxMTU0LDYgQEAKIAlzdHJ1Y3QgbW94YV9ib2FyZF9jb25mICpicmQ7CiAJc3RydWN0IG1veGFfcG9ydCAqY2g7CiAJaW50IHBvcnQ7Ci0JaW50IHJldHZhbDsKIAogCXBvcnQgPSB0dHktPmluZGV4OwogCWlmIChwb3J0ID09IE1BWF9QT1JUUykgewpAQCAtMTE5MCwxMCArMTE4OCw3IEBACiAJbXV0ZXhfdW5sb2NrKCZjaC0+cG9ydC5tdXRleCk7CiAJbXV0ZXhfdW5sb2NrKCZtb3hhX29wZW5sb2NrKTsKIAotCXJldHZhbCA9IHR0eV9wb3J0X2Jsb2NrX3RpbF9yZWFkeSgmY2gtPnBvcnQsIHR0eSwgZmlscCk7Ci0JaWYgKHJldHZhbCA9PSAwKQotCSAgICAgICAgc2V0X2JpdChBU1lOQ0JfTk9STUFMX0FDVElWRSwgJmNoLT5wb3J0LmZsYWdzKTsKLQlyZXR1cm4gcmV0dmFsOworCXJldHVybiB0dHlfcG9ydF9ibG9ja190aWxfcmVhZHkoJmNoLT5wb3J0LCB0dHksIGZpbHApOwogfQogCiBzdGF0aWMgdm9pZCBtb3hhX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKQpAQCAtMTIwNywxNCArMTIwMiwxNSBAQAogCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3QgbW94YV9wb3J0ICpjaCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgbGVuOwogCiAJaWYgKGNoID09IE5VTEwpCiAJCXJldHVybiAwOwogCi0Jc3Bpbl9sb2NrX2JoKCZtb3hhX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZtb3hhX2xvY2ssIGZsYWdzKTsKIAlsZW4gPSBNb3hhUG9ydFdyaXRlRGF0YSh0dHksIGJ1ZiwgY291bnQpOwotCXNwaW5fdW5sb2NrX2JoKCZtb3hhX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1veGFfbG9jaywgZmxhZ3MpOwogCiAJc2V0X2JpdChMT1dXQUlULCAmY2gtPnN0YXR1c2ZsYWdzKTsKIAlyZXR1cm4gbGVuOwpAQCAtMTI4MSwxMCArMTI3Nyw4IEBACiAJCQkgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQogewogCXN0cnVjdCBtb3hhX3BvcnQgKmNoOwotCWludCBwb3J0OwogCWludCBkdHIsIHJ0czsKIAotCXBvcnQgPSB0dHktPmluZGV4OwogCW11dGV4X2xvY2soJm1veGFfb3BlbmxvY2spOwogCWNoID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlpZiAoIWNoKSB7CkBAIC0xNzU2LDExICsxNzUwLDkgQEAKIAkJc3BlZWRfdCBiYXVkKQogewogCXZvaWQgX19pb21lbSAqb2ZzQWRkcjsKLQl0Y2ZsYWdfdCBjZmxhZzsKIAl0Y2ZsYWdfdCBtb2RlID0gMDsKIAogCW9mc0FkZHIgPSBwb3J0LT50YWJsZUFkZHI7Ci0JY2ZsYWcgPSB0ZXJtaW8tPmNfY2ZsYWc7CS8qIHRlcm1pby0+Y19jZmxhZyAqLwogCiAJbW9kZSA9IHRlcm1pby0+Y19jZmxhZyAmIENTSVpFOwogCWlmIChtb2RlID09IENTNSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L25fZ3NtLmMgYi9kcml2ZXJzL3R0eS9uX2dzbS5jCmluZGV4IDc0MjczZTYuLmE0YzQyYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L25fZ3NtLmMKKysrIGIvZHJpdmVycy90dHkvbl9nc20uYwpAQCAtNTI2LDE5ICs1MjYsNiBAQAogCXJldHVybiBvbGVuOwogfQogCi1zdGF0aWMgdm9pZCBoZXhfcGFja2V0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAsIGludCBsZW4pCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCWlmIChpICYmIChpICUgMTYpID09IDApIHsKLQkJCXByX2NvbnQoIlxuIik7Ci0JCQlwcl9kZWJ1ZygiIik7Ci0JCX0KLQkJcHJfY29udCgiJTAyWCAiLCAqcCsrKTsKLQl9Ci0JcHJfY29udCgiXG4iKTsKLX0KLQogLyoqCiAgKglnc21fc2VuZAktCXNlbmQgYSBjb250cm9sIGZyYW1lCiAgKglAZ3NtOiBvdXIgR1NNIG11eApAQCAtNjg1LDEwICs2NzIsMTAgQEAKIAkJCWxlbiA9IG1zZy0+bGVuICsgMjsKIAkJfQogCi0JCWlmIChkZWJ1ZyAmIDQpIHsKLQkJCXByX2RlYnVnKCJnc21fZGF0YV9raWNrOlxuIik7Ci0JCQloZXhfcGFja2V0KGdzbS0+dHhmcmFtZSwgbGVuKTsKLQkJfQorCQlpZiAoZGVidWcgJiA0KQorCQkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoImdzbV9kYXRhX2tpY2s6ICIsCisJCQkJCSAgICAgRFVNUF9QUkVGSVhfT0ZGU0VULAorCQkJCQkgICAgIGdzbS0+dHhmcmFtZSwgbGVuKTsKIAogCQlpZiAoZ3NtLT5vdXRwdXQoZ3NtLCBnc20tPnR4ZnJhbWUgKyBza2lwX3NvZiwKIAkJCQkJCWxlbiAtIHNraXBfc29mKSA8IDApCkBAIC0yMDk1LDEwICsyMDgyLDkgQEAKIAkJc2V0X2JpdChUVFlfRE9fV1JJVEVfV0FLRVVQLCAmZ3NtLT50dHktPmZsYWdzKTsKIAkJcmV0dXJuIC1FTk9TUEM7CiAJfQotCWlmIChkZWJ1ZyAmIDQpIHsKLQkJcHJfZGVidWcoIi0tPiVkIGJ5dGVzIG91dFxuIiwgbGVuKTsKLQkJaGV4X3BhY2tldChkYXRhLCBsZW4pOwotCX0KKwlpZiAoZGVidWcgJiA0KQorCQlwcmludF9oZXhfZHVtcF9ieXRlcygiZ3NtbGRfb3V0cHV0OiAiLCBEVU1QX1BSRUZJWF9PRkZTRVQsCisJCQkJICAgICBkYXRhLCBsZW4pOwogCWdzbS0+dHR5LT5vcHMtPndyaXRlKGdzbS0+dHR5LCBkYXRhLCBsZW4pOwogCXJldHVybiBsZW47CiB9CkBAIC0yMTI4LDcgKzIxMTQsNyBAQAogCiAvKioKICAqCWdzbWxkX2RldGFjaF9nc20JLQlzdG9wIGRvaW5nIDA3MTAgbXV4Ci0gKglAdHR5OiB0dHkgYXR0dGFjaGVkIHRvIHRoZSBtdXgKKyAqCUB0dHk6IHR0eSBhdHRhY2hlZCB0byB0aGUgbXV4CiAgKglAZ3NtOiBtdXgKICAqCiAgKglTaHV0ZG93biBhbmQgdGhlbiBjbGVhbiB1cCB0aGUgcmVzb3VyY2VzIHVzZWQgYnkgdGhlIGxpbmUgZGlzY2lwbGluZQpAQCAtMjE0Miw4ICsyMTI4LDggQEAKIAlnc20tPnR0eSA9IE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIGdzbWxkX3JlY2VpdmVfYnVmKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwLAotCQkJICAgICAgY2hhciAqZnAsIGludCBjb3VudCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ3NtbGRfcmVjZWl2ZV9idWYoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqY3AsIGNoYXIgKmZwLCBpbnQgY291bnQpCiB7CiAJc3RydWN0IGdzbV9tdXggKmdzbSA9IHR0eS0+ZGlzY19kYXRhOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRwOwpAQCAtMjE1MiwxMCArMjEzOCw5IEBACiAJY2hhciBidWZbNjRdOwogCWNoYXIgZmxhZ3M7CiAKLQlpZiAoZGVidWcgJiA0KSB7Ci0JCXByX2RlYnVnKCJJbmJ5dGVzICVkZFxuIiwgY291bnQpOwotCQloZXhfcGFja2V0KGNwLCBjb3VudCk7Ci0JfQorCWlmIChkZWJ1ZyAmIDQpCisJCXByaW50X2hleF9kdW1wX2J5dGVzKCJnc21sZF9yZWNlaXZlOiAiLCBEVU1QX1BSRUZJWF9PRkZTRVQsCisJCQkJICAgICBjcCwgY291bnQpOwogCiAJZm9yIChpID0gY291bnQsIGRwID0gY3AsIGYgPSBmcDsgaTsgaS0tLCBkcCsrKSB7CiAJCWZsYWdzID0gKmYrKzsKQEAgLTIxNzcsNiArMjE2Miw4IEBACiAJfQogCS8qIEZBU1lOQyBpZiBuZWVkZWQgPyAqLwogCS8qIElmIGNsb2dnZWQgY2FsbCB0dHlfdGhyb3R0bGUodHR5KTsgKi8KKworCXJldHVybiBjb3VudDsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9uX2hkbGMuYyBiL2RyaXZlcnMvdHR5L25faGRsYy5jCmluZGV4IGNlYTU2MDMuLmNhYzY2NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L25faGRsYy5jCisrKyBiL2RyaXZlcnMvdHR5L25faGRsYy5jCkBAIC0xODgsOCArMTg4LDggQEAKIAkJCQkgICAgcG9sbF90YWJsZSAqd2FpdCk7CiBzdGF0aWMgaW50IG5faGRsY190dHlfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIHN0YXRpYyB2b2lkIG5faGRsY190dHlfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7Ci1zdGF0aWMgdm9pZCBuX2hkbGNfdHR5X3JlY2VpdmUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgX191OCAqY3AsCi0JCQkgICAgICAgY2hhciAqZnAsIGludCBjb3VudCk7CitzdGF0aWMgdW5zaWduZWQgaW50IG5faGRsY190dHlfcmVjZWl2ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQljb25zdCBfX3U4ICpjcCwgY2hhciAqZnAsIGludCBjb3VudCk7CiBzdGF0aWMgdm9pZCBuX2hkbGNfdHR5X3dha2V1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIAogI2RlZmluZSBic2V0KHAsYikJKChwKVsoYikgPj4gNV0gfD0gKDEgPDwgKChiKSAmIDB4MWYpKSkKQEAgLTUwOSw4ICs1MDksOCBAQAogICogQ2FsbGVkIGJ5IHR0eSBsb3cgbGV2ZWwgZHJpdmVyIHdoZW4gcmVjZWl2ZSBkYXRhIGlzIGF2YWlsYWJsZS4gRGF0YSBpcwogICogaW50ZXJwcmV0ZWQgYXMgb25lIEhETEMgZnJhbWUuCiAgKi8KLXN0YXRpYyB2b2lkIG5faGRsY190dHlfcmVjZWl2ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCBfX3U4ICpkYXRhLAotCQkJICAgICAgIGNoYXIgKmZsYWdzLCBpbnQgY291bnQpCitzdGF0aWMgdW5zaWduZWQgaW50IG5faGRsY190dHlfcmVjZWl2ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQljb25zdCBfX3U4ICpkYXRhLCBjaGFyICpmbGFncywgaW50IGNvdW50KQogewogCXJlZ2lzdGVyIHN0cnVjdCBuX2hkbGMgKm5faGRsYyA9IHR0eTJuX2hkbGMgKHR0eSk7CiAJcmVnaXN0ZXIgc3RydWN0IG5faGRsY19idWYgKmJ1ZjsKQEAgLTUyMSwyMCArNTIxLDIwIEBACiAJCQogCS8qIFRoaXMgY2FuIGhhcHBlbiBpZiBzdHVmZiBjb21lcyBpbiBvbiB0aGUgYmFja3VwIHR0eSAqLwogCWlmICghbl9oZGxjIHx8IHR0eSAhPSBuX2hkbGMtPnR0eSkKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT0RFVjsKIAkJCiAJLyogdmVyaWZ5IGxpbmUgaXMgdXNpbmcgSERMQyBkaXNjaXBsaW5lICovCiAJaWYgKG5faGRsYy0+bWFnaWMgIT0gSERMQ19NQUdJQykgewogCQlwcmludGsoIiVzKCVkKSBsaW5lIG5vdCB1c2luZyBIRExDIGRpc2NpcGxpbmVcbiIsCiAJCQlfX0ZJTEVfXyxfX0xJTkVfXyk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCQogCWlmICggY291bnQ+bWF4ZnJhbWUgKSB7CiAJCWlmIChkZWJ1Z2xldmVsID49IERFQlVHX0xFVkVMX0lORk8pCQogCQkJcHJpbnRrKCIlcyglZCkgcnggY291bnQ+bWF4ZnJhbWVzaXplLCBkYXRhIGRpc2NhcmRlZFxuIiwKIAkJCSAgICAgICBfX0ZJTEVfXyxfX0xJTkVfXyk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogZ2V0IGEgZnJlZSBIRExDIGJ1ZmZlciAqLwkKQEAgLTU1MCw3ICs1NTAsNyBAQAogCQlpZiAoZGVidWdsZXZlbCA+PSBERUJVR19MRVZFTF9JTkZPKQkKIAkJCXByaW50aygiJXMoJWQpIG5vIG1vcmUgcnggYnVmZmVycywgZGF0YSBkaXNjYXJkZWRcbiIsCiAJCQkgICAgICAgX19GSUxFX18sX19MSU5FX18pOwotCQlyZXR1cm47CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAkJCiAJLyogY29weSByZWNlaXZlZCBkYXRhIHRvIEhETEMgYnVmZmVyICovCkBAIC01NjUsNiArNTY1LDggQEAKIAlpZiAobl9oZGxjLT50dHktPmZhc3luYyAhPSBOVUxMKQogCQlraWxsX2Zhc3luYyAoJm5faGRsYy0+dHR5LT5mYXN5bmMsIFNJR0lPLCBQT0xMX0lOKTsKIAorCXJldHVybiBjb3VudDsKKwogfQkvKiBlbmQgb2Ygbl9oZGxjX3R0eV9yZWNlaXZlKCkgKi8KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9uX3IzOTY0LmMgYi9kcml2ZXJzL3R0eS9uX3IzOTY0LmMKaW5kZXggNWM2YzMxNC4uYTRiYzM5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvbl9yMzk2NC5jCisrKyBiL2RyaXZlcnMvdHR5L25fcjM5NjQuYwpAQCAtMTM5LDggKzEzOSw4IEBACiBzdGF0aWMgdm9pZCByMzk2NF9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCk7CiBzdGF0aWMgdW5zaWduZWQgaW50IHIzOTY0X3BvbGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCXN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCk7Ci1zdGF0aWMgdm9pZCByMzk2NF9yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpjcCwKLQkJY2hhciAqZnAsIGludCBjb3VudCk7CitzdGF0aWMgdW5zaWduZWQgaW50IHIzOTY0X3JlY2VpdmVfYnVmKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwLCBjaGFyICpmcCwgaW50IGNvdW50KTsKIAogc3RhdGljIHN0cnVjdCB0dHlfbGRpc2Nfb3BzIHR0eV9sZGlzY19OX1IzOTY0ID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLApAQCAtMTIzOSw4ICsxMjM5LDggQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgdm9pZCByMzk2NF9yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpjcCwKLQkJCWNoYXIgKmZwLCBpbnQgY291bnQpCitzdGF0aWMgdW5zaWduZWQgaW50IHIzOTY0X3JlY2VpdmVfYnVmKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwLCBjaGFyICpmcCwgaW50IGNvdW50KQogewogCXN0cnVjdCByMzk2NF9pbmZvICpwSW5mbyA9IHR0eS0+ZGlzY19kYXRhOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnA7CkBAIC0xMjU3LDYgKzEyNTcsOCBAQAogCQl9CiAKIAl9CisKKwlyZXR1cm4gY291bnQ7CiB9CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L25fdHJhY2Vyb3V0ZXIuYyBiL2RyaXZlcnMvdHR5L25fdHJhY2Vyb3V0ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjA2M2QzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy90dHkvbl90cmFjZXJvdXRlci5jCkBAIC0wLDAgKzEsMjQzIEBACisvKgorICogIG5fdHJhY2Vyb3V0ZXIuYyAtIFRyYWNlIGRhdGEgcm91dGVyIHRocm91Z2ggdHR5IHNwYWNlCisgKgorICogIENvcHlyaWdodCAoQykgSW50ZWwgMjAxMQorICoKKyAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICoKKyAqIFRoaXMgdHJhY2Ugcm91dGVyIHVzZXMgdGhlIExpbnV4IGxpbmUgZGlzY2lwbGluZSBmcmFtZXdvcmsgdG8gcm91dGUKKyAqIHRyYWNlIGRhdGEgY29taW5nIGZyb20gYSBIVyBNb2RlbSB0byBhIFBUSSAoUGFyYWxsZWwgVHJhY2UgTW9kdWxlKSBwb3J0LgorICogVGhlIHNvbHV0aW9uIGlzIG5vdCBzcGVjaWZpYyB0byBhIEhXIG1vZGVtIGFuZCB0aGlzIGxpbmUgZGlzY2lwbGUgY2FuCisgKiBiZSB1c2VkIHRvIHJvdXRlIGFueSBzdHJlYW0gb2YgZGF0YSBpbiBrZXJuZWwgc3BhY2UuCisgKiBUaGlzIGlzIHBhcnQgb2YgYSBzb2x1dGlvbiBmb3IgdGhlIFAxMTQ5LjcsIGNvbXBhY3QgSlRBRywgc3RhbmRhcmQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2xkaXNjLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9idWcuaD4KKyNpbmNsdWRlICJuX3RyYWNlc2luay5oIgorCisvKgorICogT3RoZXIgbGRpc2MgZHJpdmVycyB1c2UgNjU1MzYgd2hpY2ggYmFzaWNhbGx5IG1lYW5zLAorICogJ0kgY2FuIGFsd2F5cyBhY2NlcHQgNjRrJyBhbmQgZmxvdyBjb250cm9sIGlzIG9mZi4KKyAqIFRoaXMgbnVtYmVyIGlzIGRlZW1lZCBhcHByb3ByaWF0ZSBmb3IgdGhpcyBkcml2ZXIuCisgKi8KKyNkZWZpbmUgUkVDRUlWRV9ST09NCTY1NTM2CisjZGVmaW5lIERSSVZFUk5BTUUJIm5fdHJhY2Vyb3V0ZXIiCisKKy8qCisgKiBzdHJ1Y3QgdG8gaG9sZCBwcml2YXRlIGNvbmZpZ3VyYXRpb24gZGF0YSBmb3IgdGhpcyBsZGlzYy4KKyAqIG9wZW5jYWxsZWQgaXMgdXNlZCB0byBob2xkIGlmIHRoaXMgbGRpc2MgaGFzIGJlZW4gb3BlbmVkLgorICoga3JlZl90dHkgaG9sZHMgdGhlIHR0eSByZWZlcmVuY2UgdGhlIGxkaXNjIHNpdHMgb24gdG9wIG9mLgorICovCitzdHJ1Y3QgdHJhY2Vyb3V0ZXJfZGF0YSB7CisJdTggb3BlbmNhbGxlZDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqa3JlZl90dHk7Cit9Oworc3RhdGljIHN0cnVjdCB0cmFjZXJvdXRlcl9kYXRhICp0cl9kYXRhOworCisvKiBsb2NrIGZvciB3aGVuIHR0eSByZWZlcmVuY2UgaXMgYmVpbmcgdXNlZCAqLworc3RhdGljIERFRklORV9NVVRFWChyb3V0ZWxvY2spOworCisvKioKKyAqIG5fdHJhY2Vyb3V0ZXJfb3BlbigpIC0gQ2FsbGVkIHdoZW4gYSB0dHkgaXMgb3BlbmVkIGJ5IGEgU1cgZW50aXR5LgorICogQHR0eTogdGVybWluYWwgZGV2aWNlIHRvIHRoZSBsZGlzYy4KKyAqCisgKiBSZXR1cm46CisgKiAgICAgIDAgZm9yIHN1Y2Nlc3MuCisgKgorICogQ2F2ZWF0czogVGhpcyBzaG91bGQgb25seSBiZSBvcGVuZWQgb25lIHRpbWUgcGVyIFNXIGVudGl0eS4KKyAqLworc3RhdGljIGludCBuX3RyYWNlcm91dGVyX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlpbnQgcmV0dmFsID0gLUVFWElTVDsKKworCW11dGV4X2xvY2soJnJvdXRlbG9jayk7CisJaWYgKHRyX2RhdGEtPm9wZW5jYWxsZWQgPT0gMCkgeworCisJCXRyX2RhdGEtPmtyZWZfdHR5ID0gdHR5X2tyZWZfZ2V0KHR0eSk7CisJCWlmICh0cl9kYXRhLT5rcmVmX3R0eSA9PSBOVUxMKSB7CisJCQlyZXR2YWwgPSAtRUZBVUxUOworCQl9IGVsc2UgeworCQkJdHJfZGF0YS0+b3BlbmNhbGxlZCA9IDE7CisJCQl0dHktPmRpc2NfZGF0YSAgICAgID0gdHJfZGF0YTsKKwkJCXR0eS0+cmVjZWl2ZV9yb29tICAgPSBSRUNFSVZFX1JPT007CisJCQl0dHlfZHJpdmVyX2ZsdXNoX2J1ZmZlcih0dHkpOworCQkJcmV0dmFsID0gMDsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJnJvdXRlbG9jayk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqCisgKiBuX3RyYWNlcm91dGVyX2Nsb3NlKCkgLSBjbG9zZSBjb25uZWN0aW9uCisgKiBAdHR5OiB0ZXJtaW5hbCBkZXZpY2UgdG8gdGhlIGxkaXNjLgorICoKKyAqIENhbGxlZCB3aGVuIGEgc29mdHdhcmUgZW50aXR5IHdhbnRzIHRvIGNsb3NlIGEgY29ubmVjdGlvbi4KKyAqLworc3RhdGljIHZvaWQgbl90cmFjZXJvdXRlcl9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCB0cmFjZXJvdXRlcl9kYXRhICp0cHRyID0gdHR5LT5kaXNjX2RhdGE7CisKKwltdXRleF9sb2NrKCZyb3V0ZWxvY2spOworCVdBUk5fT04odHB0ci0+a3JlZl90dHkgIT0gdHJfZGF0YS0+a3JlZl90dHkpOworCXR0eV9kcml2ZXJfZmx1c2hfYnVmZmVyKHR0eSk7CisJdHR5X2tyZWZfcHV0KHRyX2RhdGEtPmtyZWZfdHR5KTsKKwl0cl9kYXRhLT5rcmVmX3R0eSA9IE5VTEw7CisJdHJfZGF0YS0+b3BlbmNhbGxlZCA9IDA7CisJdHR5LT5kaXNjX2RhdGEgPSBOVUxMOworCW11dGV4X3VubG9jaygmcm91dGVsb2NrKTsKK30KKworLyoqCisgKiBuX3RyYWNlcm91dGVyX3JlYWQoKSAtIHJlYWQgcmVxdWVzdCBmcm9tIHVzZXIgc3BhY2UKKyAqIEB0dHk6ICB0ZXJtaW5hbCBkZXZpY2UgcGFzc2VkIGludG8gdGhlIGxkaXNjLgorICogQGZpbGU6IHBvaW50ZXIgdG8gb3BlbiBmaWxlIG9iamVjdC4KKyAqIEBidWY6ICBwb2ludGVyIHRvIHRoZSBkYXRhIGJ1ZmZlciB0aGF0IGdldHMgZXZlbnR1YWxseSByZXR1cm5lZC4KKyAqIEBucjogICBudW1iZXIgb2YgYnl0ZXMgb2YgdGhlIGRhdGEgYnVmZmVyIHRoYXQgaXMgcmV0dXJuZWQuCisgKgorICogZnVuY3Rpb24gdGhhdCBhbGxvd3MgcmVhZCgpIGZ1bmN0aW9uYWxpdHkgaW4gdXNlcnNwYWNlLiBCeSBkZWZhdWx0IGlmIHRoaXMKKyAqIGlzIG5vdCBpbXBsZW1lbnRlZCBpdCByZXR1cm5zIC1FSU8uIFRoaXMgbW9kdWxlIGlzIGZ1bmN0aW9uaW5nIGxpa2UgYQorICogcm91dGVyIHZpYSBuX3RyYWNlcm91dGVyX3JlY2VpdmVidWYoKSwgYW5kIHRoZXJlIGlzIG5vIHJlYWwgcmVxdWlyZW1lbnQKKyAqIHRvIGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLiBIb3dldmVyLCBhbiBlcnJvciByZXR1cm4gdmFsdWUgb3RoZXIgdGhhbgorICogLUVJTyBzaG91bGQgYmUgdXNlZCBqdXN0IHRvIHNob3cgdGhhdCB0aGVyZSB3YXMgYW4gaW50ZW50IG5vdCB0byBoYXZlCisgKiB0aGlzIGZ1bmN0aW9uIGltcGxlbWVudGVkLiAgUmV0dXJuIHZhbHVlIGJhc2VkIG9uIHJlYWQoKSBtYW4gcGFnZXMuCisgKgorICogUmV0dXJuOgorICoJIC1FSU5WQUwKKyAqLworc3RhdGljIHNzaXplX3Qgbl90cmFjZXJvdXRlcl9yZWFkKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCSAgdW5zaWduZWQgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IG5yKSB7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qKgorICogbl90cmFjZXJvdXRlcl93cml0ZSgpIC0gRnVuY3Rpb24gdGhhdCBhbGxvd3Mgd3JpdGUoKSBpbiB1c2Vyc3BhY2UuCisgKiBAdHR5OiAgdGVybWluYWwgZGV2aWNlIHBhc3NlZCBpbnRvIHRoZSBsZGlzYy4KKyAqIEBmaWxlOiBwb2ludGVyIHRvIG9wZW4gZmlsZSBvYmplY3QuCisgKiBAYnVmOiAgcG9pbnRlciB0byB0aGUgZGF0YSBidWZmZXIgdGhhdCBnZXRzIGV2ZW50dWFsbHkgcmV0dXJuZWQuCisgKiBAbnI6ICAgbnVtYmVyIG9mIGJ5dGVzIG9mIHRoZSBkYXRhIGJ1ZmZlciB0aGF0IGlzIHJldHVybmVkLgorICoKKyAqIEJ5IGRlZmF1bHQgaWYgdGhpcyBpcyBub3QgaW1wbGVtZW50ZWQsIGl0IHJldHVybnMgLUVJTy4KKyAqIFRoaXMgc2hvdWxkIG5vdCBiZSBpbXBsZW1lbnRlZCwgZXZlciwgYmVjYXVzZQorICogMS4gdGhpcyBkcml2ZXIgaXMgZnVuY3Rpb25pbmcgbGlrZSBhIHJvdXRlciB2aWEKKyAqICAgIG5fdHJhY2Vyb3V0ZXJfcmVjZWl2ZWJ1ZigpCisgKiAyLiBObyB3cml0ZXMgdG8gSFcgd2lsbCBldmVyIGdvIHRocm91Z2ggdGhpcyBsaW5lIGRpc2NwbGluZSBkcml2ZXIuCisgKiBIb3dldmVyLCBhbiBlcnJvciByZXR1cm4gdmFsdWUgb3RoZXIgdGhhbiAtRUlPIHNob3VsZCBiZSB1c2VkCisgKiBqdXN0IHRvIHNob3cgdGhhdCB0aGVyZSB3YXMgYW4gaW50ZW50IG5vdCB0byBoYXZlIHRoaXMgZnVuY3Rpb24KKyAqIGltcGxlbWVudGVkLiAgUmV0dXJuIHZhbHVlIGJhc2VkIG9uIHdyaXRlKCkgbWFuIHBhZ2VzLgorICoKKyAqIFJldHVybjoKKyAqCS1FSU5WQUwKKyAqLworc3RhdGljIHNzaXplX3Qgbl90cmFjZXJvdXRlcl93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBucikgeworCXJldHVybiAtRUlOVkFMOworfQorCisvKioKKyAqIG5fdHJhY2Vyb3V0ZXJfcmVjZWl2ZWJ1ZigpIC0gUm91dGluZyBmdW5jdGlvbiBmb3IgZHJpdmVyLgorICogQHR0eTogdGVybWluYWwgZGV2aWNlIHBhc3NlZCBpbnRvIHRoZSBsZGlzYy4gIEl0J3MgYXNzdW1lZAorICogICAgICAgdHR5IHdpbGwgbmV2ZXIgYmUgTlVMTC4KKyAqIEBjcDogIGJ1ZmZlciwgYmxvY2sgb2YgY2hhcmFjdGVycyB0byBiZSBldmVudHVhbGx5IHJlYWQgYnkKKyAqICAgICAgIHNvbWVvbmUsIHNvbWV3aGVyZSAodXNlciByZWFkKCkgY2FsbCBvciBzb21lIGtlcm5lbCBmdW5jdGlvbikuCisgKiBAZnA6ICBmbGFnIGJ1ZmZlci4KKyAqIEBjb3VudDogbnVtYmVyIG9mIGNoYXJhY3RlcnMgKGFrYSwgYnl0ZXMpIGluIGNwLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgdGhlIGlucHV0IGJ1ZmZlciwgY3AsIGFuZCBwYXNzZXMgaXQgdG8KKyAqIGFuIGV4dGVybmFsIEFQSSBmdW5jdGlvbiBmb3IgcHJvY2Vzc2luZy4KKyAqLworc3RhdGljIHZvaWQgbl90cmFjZXJvdXRlcl9yZWNlaXZlYnVmKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwLAorCQkJCQljaGFyICpmcCwgaW50IGNvdW50KQoreworCW11dGV4X2xvY2soJnJvdXRlbG9jayk7CisJbl90cmFjZXNpbmtfZGF0YWRyYWluKCh1OCAqKSBjcCwgY291bnQpOworCW11dGV4X3VubG9jaygmcm91dGVsb2NrKTsKK30KKworLyoKKyAqIEZsdXNoIGJ1ZmZlciBpcyBub3QgaW1wZWxlbWVudGVkIGFzIHRoZSBsZGlzYyBoYXMgbm8gaW50ZXJuYWwgYnVmZmVyaW5nCisgKiBzbyB0aGUgdHR5X2RyaXZlcl9mbHVzaF9idWZmZXIoKSBpcyBzdWZmaWNpZW50IGZvciB0aGlzIGRyaXZlcidzIG5lZWRzLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgdHR5X2xkaXNjX29wcyB0dHlfcHRpcm91dGVyX2xkaXNjID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkubWFnaWMJCT0gVFRZX0xESVNDX01BR0lDLAorCS5uYW1lCQk9IERSSVZFUk5BTUUsCisJLm9wZW4JCT0gbl90cmFjZXJvdXRlcl9vcGVuLAorCS5jbG9zZQkJPSBuX3RyYWNlcm91dGVyX2Nsb3NlLAorCS5yZWFkCQk9IG5fdHJhY2Vyb3V0ZXJfcmVhZCwKKwkud3JpdGUJCT0gbl90cmFjZXJvdXRlcl93cml0ZSwKKwkucmVjZWl2ZV9idWYJPSBuX3RyYWNlcm91dGVyX3JlY2VpdmVidWYKK307CisKKy8qKgorICogbl90cmFjZXJvdXRlcl9pbml0IC0JbW9kdWxlIGluaXRpYWxpc2F0aW9uCisgKgorICogUmVnaXN0ZXJzIHRoaXMgbW9kdWxlIGFzIGEgbGluZSBkaXNjaXBsaW5lIGRyaXZlci4KKyAqCisgKiBSZXR1cm46CisgKgkwIGZvciBzdWNjZXNzLCBhbnkgb3RoZXIgdmFsdWUgZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IG5fdHJhY2Vyb3V0ZXJfaW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisKKwl0cl9kYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRyYWNlcm91dGVyX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAodHJfZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCisJLyogTm90ZSBOX1RSQUNFUk9VVEVSIGlzIGRlZmluZWQgaW4gbGludXgvdHR5LmggKi8KKwlyZXR2YWwgPSB0dHlfcmVnaXN0ZXJfbGRpc2MoTl9UUkFDRVJPVVRFUiwgJnR0eV9wdGlyb3V0ZXJfbGRpc2MpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCXByX2VycigiJXM6IFJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXG4iLCBfX2Z1bmNfXywgcmV0dmFsKTsKKwkJa2ZyZWUodHJfZGF0YSk7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKKy8qKgorICogbl90cmFjZXJvdXRlcl9leGl0IC0JbW9kdWxlIHVubG9hZAorICoKKyAqIFJlbW92ZXMgdGhpcyBtb2R1bGUgYXMgYSBsaW5lIGRpc2NpcGxpbmUgZHJpdmVyLgorICovCitzdGF0aWMgdm9pZCBfX2V4aXQgbl90cmFjZXJvdXRlcl9leGl0KHZvaWQpCit7CisJaW50IHJldHZhbCA9IHR0eV91bnJlZ2lzdGVyX2xkaXNjKE5fVFJBQ0VST1VURVIpOworCisJaWYgKHJldHZhbCA8IDApCisJCXByX2VycigiJXM6IFVucmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsIF9fZnVuY19fLCAgcmV0dmFsKTsKKwllbHNlCisJCWtmcmVlKHRyX2RhdGEpOworfQorCittb2R1bGVfaW5pdChuX3RyYWNlcm91dGVyX2luaXQpOworbW9kdWxlX2V4aXQobl90cmFjZXJvdXRlcl9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiSmF5IEZyZXllbnNlZSIpOworTU9EVUxFX0FMSUFTX0xESVNDKE5fVFJBQ0VST1VURVIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUcmFjZSByb3V0ZXIgbGRpc2MgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9uX3RyYWNlc2luay5jIGIvZHJpdmVycy90dHkvbl90cmFjZXNpbmsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGNlNThiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy90dHkvbl90cmFjZXNpbmsuYwpAQCAtMCwwICsxLDIzOCBAQAorLyoKKyAqICBuX3RyYWNlc2luay5jIC0gVHJhY2UgZGF0YSByb3V0ZXIgYW5kIHNpbmsgcGF0aCB0aHJvdWdoIHR0eSBzcGFjZS4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSBJbnRlbCAyMDExCisgKgorICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgKgorICogVGhlIHRyYWNlIHNpbmsgdXNlcyB0aGUgTGludXggbGluZSBkaXNjaXBsaW5lIGZyYW1ld29yayB0byByZWNlaXZlCisgKiB0cmFjZSBkYXRhIGNvbWluZyBmcm9tIHRoZSBQVEkgc291cmNlIGxpbmUgZGlzY2lwbGluZSBkcml2ZXIKKyAqIHRvIGEgdXNlci1kZXNpcmVkIHR0eSBwb3J0LCBsaWtlIFVTQi4KKyAqIFRoaXMgaXMgdG8gcHJvdmlkZSBhIHdheSB0byBleHRyYWN0IG1vZGVtIHRyYWNlIGRhdGEgb24KKyAqIGRldmljZXMgdGhhdCBkbyBub3QgaGF2ZSBhIFBUSSBIVyBtb2R1bGUsIG9yIGp1c3QgbmVlZCBtb2RlbQorICogdHJhY2UgZGF0YSB0byBjb21lIG91dCBvZiBhIGRpZmZlcmVudCBIVyBvdXRwdXQgcG9ydC4KKyAqIFRoaXMgaXMgcGFydCBvZiBhIHNvbHV0aW9uIGZvciB0aGUgUDExNDkuNywgY29tcGFjdCBKVEFHLCBzdGFuZGFyZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfbGRpc2MuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2J1Zy5oPgorI2luY2x1ZGUgIm5fdHJhY2VzaW5rLmgiCisKKy8qCisgKiBPdGhlciBsZGlzYyBkcml2ZXJzIHVzZSA2NTUzNiB3aGljaCBiYXNpY2FsbHkgbWVhbnMsCisgKiAnSSBjYW4gYWx3YXlzIGFjY2VwdCA2NGsnIGFuZCBmbG93IGNvbnRyb2wgaXMgb2ZmLgorICogVGhpcyBudW1iZXIgaXMgZGVlbWVkIGFwcHJvcHJpYXRlIGZvciB0aGlzIGRyaXZlci4KKyAqLworI2RlZmluZSBSRUNFSVZFX1JPT00JNjU1MzYKKyNkZWZpbmUgRFJJVkVSTkFNRQkibl90cmFjZXNpbmsiCisKKy8qCisgKiB0aGVyZSBpcyBhIHF1aXJrIHdpdGggdGhpcyBsZGlzYyBpcyBoZSBjYW4gd3JpdGUgZGF0YQorICogdG8gYSB0dHkgZnJvbSBhbnlvbmUgY2FsbGluZyBoaXMga2VybmVsIEFQSSwgd2hpY2gKKyAqIG1lZXRzIGN1c3RvbWVyIHJlcXVpcmVtZW50cyBpbiB0aGUgZHJpdmVycy9taXNjL3B0aS5jCisgKiBwcm9qZWN0LiAgU28gaGUgbmVlZHMgdG8ga25vdyB3aGVuIGhlIGNhbiBhbmQgY2Fubm90IHdyaXRlIHdoZW4KKyAqIHRoZSBBUEkgaXMgY2FsbGVkLiBJbiB0aGVvcnksIHRoZSBBUEkgY2FuIGJlIGNhbGxlZAorICogYWZ0ZXIgYW4gaW5pdCgpIGJ1dCBiZWZvcmUgYSBzdWNjZXNzZnVsIG9wZW4oKSB3aGljaAorICogd291bGQgY3Jhc2ggdGhlIHN5c3RlbSBpZiB0dHkgaXMgbm90IGNoZWNrZWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdHR5X3N0cnVjdCAqdGhpc190dHk7CitzdGF0aWMgREVGSU5FX01VVEVYKHdyaXRlbG9jayk7CisKKy8qKgorICogbl90cmFjZXNpbmtfb3BlbigpIC0gQ2FsbGVkIHdoZW4gYSB0dHkgaXMgb3BlbmVkIGJ5IGEgU1cgZW50aXR5LgorICogQHR0eTogdGVybWluYWwgZGV2aWNlIHRvIHRoZSBsZGlzYy4KKyAqCisgKiBSZXR1cm46CisgKiAgICAgIDAgZm9yIHN1Y2Nlc3MsCisgKiAgICAgIC1FRkFVTFQgPSBjb3VsZG4ndCBnZXQgYSB0dHkga3JlZiBuX3RyYWNlc2luayB3aWxsIHNpdAorICogICAgICAgb24gdG9wIG9mCisgKiAgICAgIC1FRVhJU1QgPSBvcGVuKCkgY2FsbGVkIHN1Y2Nlc3NmdWxseSBvbmNlIGFuZCBpdCBjYW5ub3QKKyAqICAgICAgYmUgY2FsbGVkIGFnYWluLgorICoKKyAqIENhdmVhdHM6IG9wZW4oKSBzaG91bGQgb25seSBiZSBzdWNjZXNzZnVsIHRoZSBmaXJzdCB0aW1lIGEKKyAqIFNXIGVudGl0eSBjYWxscyBpdC4KKyAqLworc3RhdGljIGludCBuX3RyYWNlc2lua19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJaW50IHJldHZhbCA9IC1FRVhJU1Q7CisKKwltdXRleF9sb2NrKCZ3cml0ZWxvY2spOworCWlmICh0aGlzX3R0eSA9PSBOVUxMKSB7CisJCXRoaXNfdHR5ID0gdHR5X2tyZWZfZ2V0KHR0eSk7CisJCWlmICh0aGlzX3R0eSA9PSBOVUxMKSB7CisJCQlyZXR2YWwgPSAtRUZBVUxUOworCQl9IGVsc2UgeworCQkJdHR5LT5kaXNjX2RhdGEgPSB0aGlzX3R0eTsKKwkJCXR0eV9kcml2ZXJfZmx1c2hfYnVmZmVyKHR0eSk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJfQorCW11dGV4X3VubG9jaygmd3JpdGVsb2NrKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qKgorICogbl90cmFjZXNpbmtfY2xvc2UoKSAtIGNsb3NlIGNvbm5lY3Rpb24KKyAqIEB0dHk6IHRlcm1pbmFsIGRldmljZSB0byB0aGUgbGRpc2MuCisgKgorICogQ2FsbGVkIHdoZW4gYSBzb2Z0d2FyZSBlbnRpdHkgd2FudHMgdG8gY2xvc2UgYSBjb25uZWN0aW9uLgorICovCitzdGF0aWMgdm9pZCBuX3RyYWNlc2lua19jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCW11dGV4X2xvY2soJndyaXRlbG9jayk7CisJdHR5X2RyaXZlcl9mbHVzaF9idWZmZXIodHR5KTsKKwl0dHlfa3JlZl9wdXQodGhpc190dHkpOworCXRoaXNfdHR5ID0gTlVMTDsKKwl0dHktPmRpc2NfZGF0YSA9IE5VTEw7CisJbXV0ZXhfdW5sb2NrKCZ3cml0ZWxvY2spOworfQorCisvKioKKyAqIG5fdHJhY2VzaW5rX3JlYWQoKSAtIHJlYWQgcmVxdWVzdCBmcm9tIHVzZXIgc3BhY2UKKyAqIEB0dHk6ICB0ZXJtaW5hbCBkZXZpY2UgcGFzc2VkIGludG8gdGhlIGxkaXNjLgorICogQGZpbGU6IHBvaW50ZXIgdG8gb3BlbiBmaWxlIG9iamVjdC4KKyAqIEBidWY6ICBwb2ludGVyIHRvIHRoZSBkYXRhIGJ1ZmZlciB0aGF0IGdldHMgZXZlbnR1YWxseSByZXR1cm5lZC4KKyAqIEBucjogICBudW1iZXIgb2YgYnl0ZXMgb2YgdGhlIGRhdGEgYnVmZmVyIHRoYXQgaXMgcmV0dXJuZWQuCisgKgorICogZnVuY3Rpb24gdGhhdCBhbGxvd3MgcmVhZCgpIGZ1bmN0aW9uYWxpdHkgaW4gdXNlcnNwYWNlLiBCeSBkZWZhdWx0IGlmIHRoaXMKKyAqIGlzIG5vdCBpbXBsZW1lbnRlZCBpdCByZXR1cm5zIC1FSU8uIFRoaXMgbW9kdWxlIGlzIGZ1bmN0aW9uaW5nIGxpa2UgYQorICogcm91dGVyIHZpYSBuX3RyYWNlc2lua19yZWNlaXZlYnVmKCksIGFuZCB0aGVyZSBpcyBubyByZWFsIHJlcXVpcmVtZW50CisgKiB0byBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4gSG93ZXZlciwgYW4gZXJyb3IgcmV0dXJuIHZhbHVlIG90aGVyIHRoYW4KKyAqIC1FSU8gc2hvdWxkIGJlIHVzZWQganVzdCB0byBzaG93IHRoYXQgdGhlcmUgd2FzIGFuIGludGVudCBub3QgdG8gaGF2ZQorICogdGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRlZC4gIFJldHVybiB2YWx1ZSBiYXNlZCBvbiByZWFkKCkgbWFuIHBhZ2VzLgorICoKKyAqIFJldHVybjoKKyAqCSAtRUlOVkFMCisgKi8KK3N0YXRpYyBzc2l6ZV90IG5fdHJhY2VzaW5rX3JlYWQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJdW5zaWduZWQgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IG5yKSB7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qKgorICogbl90cmFjZXNpbmtfd3JpdGUoKSAtIEZ1bmN0aW9uIHRoYXQgYWxsb3dzIHdyaXRlKCkgaW4gdXNlcnNwYWNlLgorICogQHR0eTogIHRlcm1pbmFsIGRldmljZSBwYXNzZWQgaW50byB0aGUgbGRpc2MuCisgKiBAZmlsZTogcG9pbnRlciB0byBvcGVuIGZpbGUgb2JqZWN0LgorICogQGJ1ZjogIHBvaW50ZXIgdG8gdGhlIGRhdGEgYnVmZmVyIHRoYXQgZ2V0cyBldmVudHVhbGx5IHJldHVybmVkLgorICogQG5yOiAgIG51bWJlciBvZiBieXRlcyBvZiB0aGUgZGF0YSBidWZmZXIgdGhhdCBpcyByZXR1cm5lZC4KKyAqCisgKiBCeSBkZWZhdWx0IGlmIHRoaXMgaXMgbm90IGltcGxlbWVudGVkLCBpdCByZXR1cm5zIC1FSU8uCisgKiBUaGlzIHNob3VsZCBub3QgYmUgaW1wbGVtZW50ZWQsIGV2ZXIsIGJlY2F1c2UKKyAqIDEuIHRoaXMgZHJpdmVyIGlzIGZ1bmN0aW9uaW5nIGxpa2UgYSByb3V0ZXIgdmlhCisgKiAgICBuX3RyYWNlc2lua19yZWNlaXZlYnVmKCkKKyAqIDIuIE5vIHdyaXRlcyB0byBIVyB3aWxsIGV2ZXIgZ28gdGhyb3VnaCB0aGlzIGxpbmUgZGlzY3BsaW5lIGRyaXZlci4KKyAqIEhvd2V2ZXIsIGFuIGVycm9yIHJldHVybiB2YWx1ZSBvdGhlciB0aGFuIC1FSU8gc2hvdWxkIGJlIHVzZWQKKyAqIGp1c3QgdG8gc2hvdyB0aGF0IHRoZXJlIHdhcyBhbiBpbnRlbnQgbm90IHRvIGhhdmUgdGhpcyBmdW5jdGlvbgorICogaW1wbGVtZW50ZWQuICBSZXR1cm4gdmFsdWUgYmFzZWQgb24gd3JpdGUoKSBtYW4gcGFnZXMuCisgKgorICogUmV0dXJuOgorICoJLUVJTlZBTAorICovCitzdGF0aWMgc3NpemVfdCBuX3RyYWNlc2lua193cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbnIpIHsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoqCisgKiBuX3RyYWNlc2lua19kYXRhZHJhaW4oKSAtIEtlcm5lbCBBUEkgZnVuY3Rpb24gdXNlZCB0byByb3V0ZQorICoJCQkgICAgIHRyYWNlIGRlYnVnZ2luZyBkYXRhIHRvIHVzZXItZGVmaW5lZAorICoJCQkgICAgIHBvcnQgbGlrZSBVU0IuCisgKgorICogQGJ1ZjogICBUcmFjZSBkZWJ1Z2luZyBkYXRhIGJ1ZmZlciB0byB3cml0ZSB0byB0dHkgdGFyZ2V0CisgKiAgICAgICAgIHBvcnQuIE51bGwgdmFsdWUgd2lsbCByZXR1cm4gd2l0aCBubyB3cml0ZSBvY2N1cnJpbmcuCisgKiBAY291bnQ6IFNpemUgb2YgYnVmLiBWYWx1ZSBvZiAwIG9yIGEgbmVnYXRpdmUgbnVtYmVyIHdpbGwKKyAqICAgICAgICAgcmV0dXJuIHdpdGggbm8gd3JpdGUgb2NjdXJpbmcuCisgKgorICogQ2F2ZWF0OiBJZiB0aGlzIGxpbmUgZGlzY2lwbGluZSBkb2VzIG5vdCBzZXQgdGhlIHR0eSBpdCBzaXRzCisgKiBvbiB0b3Agb2YgdmlhIGFuIG9wZW4oKSBjYWxsLCB0aGlzIEFQSSBmdW5jdGlvbiB3aWxsIG5vdAorICogY2FsbCB0aGUgdHR5J3Mgd3JpdGUoKSBjYWxsIGJlY2F1c2UgaXQgd2lsbCBoYXZlIG5vIHBvaW50ZXIKKyAqIHRvIGNhbGwgdGhlIHdyaXRlKCkuCisgKi8KK3ZvaWQgbl90cmFjZXNpbmtfZGF0YWRyYWluKHU4ICpidWYsIGludCBjb3VudCkKK3sKKwltdXRleF9sb2NrKCZ3cml0ZWxvY2spOworCisJaWYgKChidWYgIT0gTlVMTCkgJiYgKGNvdW50ID4gMCkgJiYgKHRoaXNfdHR5ICE9IE5VTEwpKQorCQl0aGlzX3R0eS0+b3BzLT53cml0ZSh0aGlzX3R0eSwgYnVmLCBjb3VudCk7CisKKwltdXRleF91bmxvY2soJndyaXRlbG9jayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuX3RyYWNlc2lua19kYXRhZHJhaW4pOworCisvKgorICogRmx1c2ggYnVmZmVyIGlzIG5vdCBpbXBlbGVtZW50ZWQgYXMgdGhlIGxkaXNjIGhhcyBubyBpbnRlcm5hbCBidWZmZXJpbmcKKyAqIHNvIHRoZSB0dHlfZHJpdmVyX2ZsdXNoX2J1ZmZlcigpIGlzIHN1ZmZpY2llbnQgZm9yIHRoaXMgZHJpdmVyJ3MgbmVlZHMuCisgKi8KKworLyoKKyAqIHR0eV9sZGlzYyBmdW5jdGlvbiBvcGVyYXRpb25zIGZvciB0aGlzIGRyaXZlci4KKyAqLworc3RhdGljIHN0cnVjdCB0dHlfbGRpc2Nfb3BzIHR0eV9uX3RyYWNlc2luayA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm1hZ2ljCQk9IFRUWV9MRElTQ19NQUdJQywKKwkubmFtZQkJPSBEUklWRVJOQU1FLAorCS5vcGVuCQk9IG5fdHJhY2VzaW5rX29wZW4sCisJLmNsb3NlCQk9IG5fdHJhY2VzaW5rX2Nsb3NlLAorCS5yZWFkCQk9IG5fdHJhY2VzaW5rX3JlYWQsCisJLndyaXRlCQk9IG5fdHJhY2VzaW5rX3dyaXRlCit9OworCisvKioKKyAqIG5fdHJhY2VzaW5rX2luaXQtCW1vZHVsZSBpbml0aWFsaXNhdGlvbgorICoKKyAqIFJlZ2lzdGVycyB0aGlzIG1vZHVsZSBhcyBhIGxpbmUgZGlzY2lwbGluZSBkcml2ZXIuCisgKgorICogUmV0dXJuOgorICoJMCBmb3Igc3VjY2VzcywgYW55IG90aGVyIHZhbHVlIGVycm9yLgorICovCitzdGF0aWMgaW50IF9faW5pdCBuX3RyYWNlc2lua19pbml0KHZvaWQpCit7CisJLyogTm90ZSBOX1RSQUNFU0lOSyBpcyBkZWZpbmVkIGluIGxpbnV4L3R0eS5oICovCisJaW50IHJldHZhbCA9IHR0eV9yZWdpc3Rlcl9sZGlzYyhOX1RSQUNFU0lOSywgJnR0eV9uX3RyYWNlc2luayk7CisKKwlpZiAocmV0dmFsIDwgMCkKKwkJcHJfZXJyKCIlczogUmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsIF9fZnVuY19fLCByZXR2YWwpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqCisgKiBuX3RyYWNlc2lua19leGl0IC0JbW9kdWxlIHVubG9hZAorICoKKyAqIFJlbW92ZXMgdGhpcyBtb2R1bGUgYXMgYSBsaW5lIGRpc2NpcGxpbmUgZHJpdmVyLgorICovCitzdGF0aWMgdm9pZCBfX2V4aXQgbl90cmFjZXNpbmtfZXhpdCh2b2lkKQoreworCWludCByZXR2YWwgPSB0dHlfdW5yZWdpc3Rlcl9sZGlzYyhOX1RSQUNFU0lOSyk7CisKKwlpZiAocmV0dmFsIDwgMCkKKwkJcHJfZXJyKCIlczogVW5yZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgX19mdW5jX18sICByZXR2YWwpOworfQorCittb2R1bGVfaW5pdChuX3RyYWNlc2lua19pbml0KTsKK21vZHVsZV9leGl0KG5fdHJhY2VzaW5rX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJKYXkgRnJleWVuc2VlIik7CitNT0RVTEVfQUxJQVNfTERJU0MoTl9UUkFDRVNJTkspOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUcmFjZSBzaW5rIGxkaXNjIGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvbl90cmFjZXNpbmsuaCBiL2RyaXZlcnMvdHR5L25fdHJhY2VzaW5rLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY4YmI0NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdHR5L25fdHJhY2VzaW5rLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqICBuX3RyYWNlc2luay5oIC0gS2VybmVsIGRyaXZlciBBUEkgdG8gcm91dGUgdHJhY2UgZGF0YSBpbiBrZXJuZWwgc3BhY2UuCisgKgorICogIENvcHlyaWdodCAoQykgSW50ZWwgMjAxMQorICoKKyAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICoKKyAqIFRoZSBQVEkgKFBhcmFsbGVsIFRyYWNlIEludGVyZmFjZSkgZHJpdmVyIGRpcmVjdHMgdHJhY2UgZGF0YSByb3V0ZWQgZnJvbQorICogdmFyaW91cyBwYXJ0cyBpbiB0aGUgc3lzdGVtIG91dCB0aHJvdWdoIHRoZSBJbnRlbCBQZW53ZWxsIFBUSSBwb3J0IGFuZAorICogb3V0IG9mIHRoZSBtb2JpbGUgZGV2aWNlIGZvciBhbmFseXNpcyB3aXRoIGEgZGVidWdnaW5nIHRvb2wKKyAqIChMYXV0ZXJiYWNoLCBGaWRvKS4gVGhpcyBpcyBwYXJ0IG9mIGEgc29sdXRpb24gZm9yIHRoZSBNSVBJIFAxMTQ5LjcsCisgKiBjb21wYWN0IEpUQUcsIHN0YW5kYXJkLgorICoKKyAqIFRoaXMgaGVhZGVyIGZpbGUgaXMgdXNlZCBieSBuX3RyYWNlcm91dGVyIHRvIGJlIGFibGUgdG8gc2VuZCB0aGUKKyAqIGRhdGEgb2YgaXQncyB0dHkgcG9ydCB0byB0aGUgdHR5IHBvcnQgdGhpcyBtb2R1bGUgc2l0cy4gIFRoaXMKKyAqIG1lY2hhbmlzbSBjYW4gYWxzbyBiZSB1c2VkIGluZGVwZW5kZW50IG9mIHRoZSBQVEkgbW9kdWxlLgorICoKKyAqLworCisjaWZuZGVmIE5fVFJBQ0VTSU5LX0hfCisjZGVmaW5lIE5fVFJBQ0VTSU5LX0hfCisKK3ZvaWQgbl90cmFjZXNpbmtfZGF0YWRyYWluKHU4ICpidWYsIGludCBjb3VudCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvbl90dHkuYyBiL2RyaXZlcnMvdHR5L25fdHR5LmMKaW5kZXggMGFkMzI4OC4uOTVkMGE5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvbl90dHkuYworKysgYi9kcml2ZXJzL3R0eS9uX3R0eS5jCkBAIC04MSwzOCArODEsNiBAQAogCXJldHVybiBwdXRfdXNlcih4LCBwdHIpOwogfQogCi0vKioKLSAqCW5fdHR5X3NldF9fcm9vbQktCXJlY2VpdmUgc3BhY2UKLSAqCUB0dHk6IHRlcm1pbmFsCi0gKgotICoJQ2FsbGVkIGJ5IHRoZSBkcml2ZXIgdG8gZmluZCBvdXQgaG93IG11Y2ggZGF0YSBpdCBpcwotICoJcGVybWl0dGVkIHRvIGZlZWQgdG8gdGhlIGxpbmUgZGlzY2lwbGluZSB3aXRob3V0IGFueSBiZWluZyBsb3N0Ci0gKglhbmQgdGh1cyB0byBtYW5hZ2UgZmxvdyBjb250cm9sLiBOb3Qgc2VyaWFsaXplZC4gQW5zd2VycyBmb3IgdGhlCi0gKgkiaW5zdGFudCIuCi0gKi8KLQotc3RhdGljIHZvaWQgbl90dHlfc2V0X3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLQkvKiB0dHktPnJlYWRfY250IGlzIG5vdCByZWFkIGxvY2tlZCA/ICovCi0JaW50CWxlZnQgPSBOX1RUWV9CVUZfU0laRSAtIHR0eS0+cmVhZF9jbnQgLSAxOwotCWludCBvbGRfbGVmdDsKLQotCS8qCi0JICogSWYgd2UgYXJlIGRvaW5nIGlucHV0IGNhbm9uaWNhbGl6YXRpb24sIGFuZCB0aGVyZSBhcmUgbm8KLQkgKiBwZW5kaW5nIG5ld2xpbmVzLCBsZXQgY2hhcmFjdGVycyB0aHJvdWdoIHdpdGhvdXQgbGltaXQsIHNvCi0JICogdGhhdCBlcmFzZSBjaGFyYWN0ZXJzIHdpbGwgYmUgaGFuZGxlZC4gIE90aGVyIGV4Y2VzcwotCSAqIGNoYXJhY3RlcnMgd2lsbCBiZSBiZWVwZWQuCi0JICovCi0JaWYgKGxlZnQgPD0gMCkKLQkJbGVmdCA9IHR0eS0+aWNhbm9uICYmICF0dHktPmNhbm9uX2RhdGE7Ci0Jb2xkX2xlZnQgPSB0dHktPnJlY2VpdmVfcm9vbTsKLQl0dHktPnJlY2VpdmVfcm9vbSA9IGxlZnQ7Ci0KLQkvKiBEaWQgdGhpcyBvcGVuIHVwIHRoZSByZWNlaXZlIGJ1ZmZlcj8gV2UgbWF5IG5lZWQgdG8gZmxpcCAqLwotCWlmIChsZWZ0ICYmICFvbGRfbGVmdCkKLQkJc2NoZWR1bGVfd29yaygmdHR5LT5idWYud29yayk7Ci19Ci0KIHN0YXRpYyB2b2lkIHB1dF90dHlfcXVldWVfbm9sb2NrKHVuc2lnbmVkIGNoYXIgYywgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlpZiAodHR5LT5yZWFkX2NudCA8IE5fVFRZX0JVRl9TSVpFKSB7CkBAIC0xODQsNyArMTUyLDYgQEAKIAogCXR0eS0+Y2Fub25faGVhZCA9IHR0eS0+Y2Fub25fZGF0YSA9IHR0eS0+ZXJhc2luZyA9IDA7CiAJbWVtc2V0KCZ0dHktPnJlYWRfZmxhZ3MsIDAsIHNpemVvZiB0dHktPnJlYWRfZmxhZ3MpOwotCW5fdHR5X3NldF9yb29tKHR0eSk7CiAJY2hlY2tfdW50aHJvdHRsZSh0dHkpOwogfQogCkBAIC0xMzYwLDE3ICsxMzI3LDE5IEBACiAgKgljYWxscyBvbmUgYXQgYSB0aW1lIGFuZCBpbiBvcmRlciAob3IgdXNpbmcgZmx1c2hfdG9fbGRpc2MpCiAgKi8KIAotc3RhdGljIHZvaWQgbl90dHlfcmVjZWl2ZV9idWYoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqY3AsCi0JCQkgICAgICBjaGFyICpmcCwgaW50IGNvdW50KQorc3RhdGljIHVuc2lnbmVkIGludCBuX3R0eV9yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQljb25zdCB1bnNpZ25lZCBjaGFyICpjcCwgY2hhciAqZnAsIGludCBjb3VudCkKIHsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpwOwogCWNoYXIgKmYsIGZsYWdzID0gVFRZX05PUk1BTDsKIAlpbnQJaTsKIAljaGFyCWJ1Zls2NF07CiAJdW5zaWduZWQgbG9uZyBjcHVmbGFnczsKKwlpbnQgbGVmdDsKKwlpbnQgcmV0ID0gMDsKIAogCWlmICghdHR5LT5yZWFkX2J1ZikKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAogCWlmICh0dHktPnJlYWxfcmF3KSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHktPnJlYWRfbG9jaywgY3B1ZmxhZ3MpOwpAQCAtMTM4MCw2ICsxMzQ5LDcgQEAKIAkJbWVtY3B5KHR0eS0+cmVhZF9idWYgKyB0dHktPnJlYWRfaGVhZCwgY3AsIGkpOwogCQl0dHktPnJlYWRfaGVhZCA9ICh0dHktPnJlYWRfaGVhZCArIGkpICYgKE5fVFRZX0JVRl9TSVpFLTEpOwogCQl0dHktPnJlYWRfY250ICs9IGk7CisJCXJldCArPSBpOwogCQljcCArPSBpOwogCQljb3VudCAtPSBpOwogCkBAIC0xMzg5LDggKzEzNTksMTAgQEAKIAkJbWVtY3B5KHR0eS0+cmVhZF9idWYgKyB0dHktPnJlYWRfaGVhZCwgY3AsIGkpOwogCQl0dHktPnJlYWRfaGVhZCA9ICh0dHktPnJlYWRfaGVhZCArIGkpICYgKE5fVFRZX0JVRl9TSVpFLTEpOwogCQl0dHktPnJlYWRfY250ICs9IGk7CisJCXJldCArPSBpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0dHktPnJlYWRfbG9jaywgY3B1ZmxhZ3MpOwogCX0gZWxzZSB7CisJCXJldCA9IGNvdW50OwogCQlmb3IgKGkgPSBjb3VudCwgcCA9IGNwLCBmID0gZnA7IGk7IGktLSwgcCsrKSB7CiAJCQlpZiAoZikKIAkJCQlmbGFncyA9ICpmKys7CkBAIC0xNDE4LDggKzEzOTAsNiBAQAogCQkJdHR5LT5vcHMtPmZsdXNoX2NoYXJzKHR0eSk7CiAJfQogCi0Jbl90dHlfc2V0X3Jvb20odHR5KTsKLQogCWlmICgoIXR0eS0+aWNhbm9uICYmICh0dHktPnJlYWRfY250ID49IHR0eS0+bWluaW11bV90b193YWtlKSkgfHwKIAkJTF9FWFRQUk9DKHR0eSkpIHsKIAkJa2lsbF9mYXN5bmMoJnR0eS0+ZmFzeW5jLCBTSUdJTywgUE9MTF9JTik7CkBAIC0xNDMyLDggKzE0MDIsMTIgQEAKIAkgKiBtb2RlLiAgV2UgZG9uJ3Qgd2FudCB0byB0aHJvdHRsZSB0aGUgZHJpdmVyIGlmIHdlJ3JlIGluCiAJICogY2Fub25pY2FsIG1vZGUgYW5kIGRvbid0IGhhdmUgYSBuZXdsaW5lIHlldCEKIAkgKi8KLQlpZiAodHR5LT5yZWNlaXZlX3Jvb20gPCBUVFlfVEhSRVNIT0xEX1RIUk9UVExFKQorCWxlZnQgPSBOX1RUWV9CVUZfU0laRSAtIHR0eS0+cmVhZF9jbnQgLSAxOworCisJaWYgKGxlZnQgPCBUVFlfVEhSRVNIT0xEX1RIUk9UVExFKQogCQl0dHlfdGhyb3R0bGUodHR5KTsKKworCXJldHVybiByZXQ7CiB9CiAKIGludCBpc19pZ25vcmVkKGludCBzaWcpCkBAIC0xNDc3LDcgKzE0NTEsNiBAQAogCWlmICh0ZXN0X2JpdChUVFlfSFdfQ09PS19JTiwgJnR0eS0+ZmxhZ3MpKSB7CiAJCXR0eS0+cmF3ID0gMTsKIAkJdHR5LT5yZWFsX3JhdyA9IDE7Ci0JCW5fdHR5X3NldF9yb29tKHR0eSk7CiAJCXJldHVybjsKIAl9CiAJaWYgKElfSVNUUklQKHR0eSkgfHwgSV9JVUNMQyh0dHkpIHx8IElfSUdOQ1IodHR5KSB8fApAQCAtMTUzMCw3ICsxNTAzLDYgQEAKIAkJZWxzZQogCQkJdHR5LT5yZWFsX3JhdyA9IDA7CiAJfQotCW5fdHR5X3NldF9yb29tKHR0eSk7CiAJLyogVGhlIHRlcm1pb3MgY2hhbmdlIG1ha2UgdGhlIHR0eSByZWFkeSBmb3IgSS9PICovCiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQpOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT5yZWFkX3dhaXQpOwpAQCAtMTgxMiw4ICsxNzg0LDYgQEAKIAkJCQlyZXR2YWwgPSAtRVJFU1RBUlRTWVM7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQkvKiBGSVhNRTogZG9lcyBuX3R0eV9zZXRfcm9vbSBuZWVkIGxvY2tpbmcgPyAqLwotCQkJbl90dHlfc2V0X3Jvb20odHR5KTsKIAkJCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOwogCQkJY29udGludWU7CiAJCX0KQEAgLTE4ODUsMTAgKzE4NTUsOCBAQAogCQkgKiBsb25nZXIgdGhhbiBUVFlfVEhSRVNIT0xEX1VOVEhST1RUTEUgaW4gY2Fub25pY2FsIG1vZGUsCiAJCSAqIHdlIHdvbid0IGdldCBhbnkgbW9yZSBjaGFyYWN0ZXJzLgogCQkgKi8KLQkJaWYgKG5fdHR5X2NoYXJzX2luX2J1ZmZlcih0dHkpIDw9IFRUWV9USFJFU0hPTERfVU5USFJPVFRMRSkgewotCQkJbl90dHlfc2V0X3Jvb20odHR5KTsKKwkJaWYgKG5fdHR5X2NoYXJzX2luX2J1ZmZlcih0dHkpIDw9IFRUWV9USFJFU0hPTERfVU5USFJPVFRMRSkKIAkJCWNoZWNrX3VudGhyb3R0bGUodHR5KTsKLQkJfQogCiAJCWlmIChiIC0gYnVmID49IG1pbmltdW0pCiAJCQlicmVhazsKQEAgLTE5MTAsNyArMTg3OCw2IEBACiAJfSBlbHNlIGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoVFRZX1BVU0gsICZ0dHktPmZsYWdzKSkKIAkJIGdvdG8gZG9faXRfYWdhaW47CiAKLQluX3R0eV9zZXRfcm9vbSh0dHkpOwogCXJldHVybiByZXR2YWw7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L25vem9taS5jIGIvZHJpdmVycy90dHkvbm96b21pLmMKaW5kZXggZmQwYTk4NTIuLmIxYWVjYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L25vem9taS5jCisrKyBiL2RyaXZlcnMvdHR5L25vem9taS5jCkBAIC0zNjQsOCArMzY0LDYgQEAKIAl1OCB0b2dnbGVfdWw7CiAJdTE2IHRva2VuX2RsOwogCi0JLyogbXV0ZXggdG8gZW5zdXJlIG9uZSBhY2Nlc3MgcGF0Y2ggdG8gdGhpcyBwb3J0ICovCi0Jc3RydWN0IG11dGV4IHR0eV9zZW07CiAJd2FpdF9xdWV1ZV9oZWFkX3QgdHR5X3dhaXQ7CiAJc3RydWN0IGFzeW5jX2ljb3VudCB0dHlfaWNvdW50OwogCkBAIC0xNDMxLDggKzE0MjksOCBAQAogCX0KIAogCWZvciAoaSA9IFBPUlRfTURNOyBpIDwgTUFYX1BPUlQ7IGkrKykgewotCQlpZiAoa2ZpZm9fYWxsb2MoJmRjLT5wb3J0W2ldLmZpZm9fdWwsCi0JCSAgICAgIEZJRk9fQlVGRkVSX1NJWkVfVUwsIEdGUF9BVE9NSUMpKSB7CisJCWlmIChrZmlmb19hbGxvYygmZGMtPnBvcnRbaV0uZmlmb191bCwgRklGT19CVUZGRVJfU0laRV9VTCwKKwkJCQkJR0ZQX0tFUk5FTCkpIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwKIAkJCQkJIkNvdWxkIG5vdCBhbGxvY2F0ZSBrZmlmbyBidWZmZXJcbiIpOwogCQkJcmV0ID0gLUVOT01FTTsKQEAgLTE0NzQsNyArMTQ3Miw2IEBACiAJCXN0cnVjdCBkZXZpY2UgKnR0eV9kZXY7CiAJCXN0cnVjdCBwb3J0ICpwb3J0ID0gJmRjLT5wb3J0W2ldOwogCQlwb3J0LT5kYyA9IGRjOwotCQltdXRleF9pbml0KCZwb3J0LT50dHlfc2VtKTsKIAkJdHR5X3BvcnRfaW5pdCgmcG9ydC0+cG9ydCk7CiAJCXBvcnQtPnBvcnQub3BzID0gJm5vel90dHlfcG9ydF9vcHM7CiAJCXR0eV9kZXYgPSB0dHlfcmVnaXN0ZXJfZGV2aWNlKG50dHlfZHJpdmVyLCBkYy0+aW5kZXhfc3RhcnQgKyBpLApAQCAtMTY4OCwxMyArMTY4NSw2IEBACiAJaWYgKCFkYyB8fCAhcG9ydCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQltdXRleF9sb2NrKCZwb3J0LT50dHlfc2VtKTsKLQotCWlmICh1bmxpa2VseSghcG9ydC0+cG9ydC5jb3VudCkpIHsKLQkJREJHMSgiICIpOwotCQlnb3RvIGV4aXQ7Ci0JfQotCiAJcnZhbCA9IGtmaWZvX2luKCZwb3J0LT5maWZvX3VsLCAodW5zaWduZWQgY2hhciAqKWJ1ZmZlciwgY291bnQpOwogCiAJLyogbm90aWZ5IGNhcmQgKi8KQEAgLTE3MTksNyArMTcwOSw2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGMtPnNwaW5fbXV0ZXgsIGZsYWdzKTsKIAogZXhpdDoKLQltdXRleF91bmxvY2soJnBvcnQtPnR0eV9zZW0pOwogCXJldHVybiBydmFsOwogfQogCkBAIC0xNzM4LDEyICsxNzI3LDkgQEAKIAlpbnQgcm9vbSA9IDQwOTY7CiAJY29uc3Qgc3RydWN0IG5vem9taSAqZGMgPSBnZXRfZGNfYnlfdHR5KHR0eSk7CiAKLQlpZiAoZGMpIHsKLQkJbXV0ZXhfbG9jaygmcG9ydC0+dHR5X3NlbSk7Ci0JCWlmIChwb3J0LT5wb3J0LmNvdW50KQotCQkJcm9vbSA9IGtmaWZvX2F2YWlsKCZwb3J0LT5maWZvX3VsKTsKLQkJbXV0ZXhfdW5sb2NrKCZwb3J0LT50dHlfc2VtKTsKLQl9CisJaWYgKGRjKQorCQlyb29tID0ga2ZpZm9fYXZhaWwoJnBvcnQtPmZpZm9fdWwpOworCiAJcmV0dXJuIHJvb207CiB9CiAKQEAgLTE4ODksMTEgKzE4NzUsNiBAQAogCQlnb3RvIGV4aXRfaW5fYnVmZmVyOwogCX0KIAotCWlmICh1bmxpa2VseSghcG9ydC0+cG9ydC5jb3VudCkpIHsKLQkJZGV2X2VycigmZGMtPnBkZXYtPmRldiwgIk5vIHR0eSBvcGVuP1xuIik7Ci0JCWdvdG8gZXhpdF9pbl9idWZmZXI7Ci0JfQotCiAJcnZhbCA9IGtmaWZvX2xlbigmcG9ydC0+Zmlmb191bCk7CiAKIGV4aXRfaW5fYnVmZmVyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvcHR5LmMgYi9kcml2ZXJzL3R0eS9wdHkuYwppbmRleCAyMTA3NzQ3Li45OGI2ZTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9wdHkuYworKysgYi9kcml2ZXJzL3R0eS9wdHkuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAgbGludXgvZHJpdmVycy9jaGFyL3B0eS5jCi0gKgogICogIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiAgTGludXMgVG9ydmFsZHMKICAqCiAgKiAgQWRkZWQgc3VwcG9ydCBmb3IgYSBVbml4OTgtc3R5bGUgcHRteCBkZXZpY2UuCkBAIC0yOTUsOCArMjkzLDggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJaWYgKCF0cnlfbW9kdWxlX2dldChkcml2ZXItPm90aGVyLT5vd25lcikpIHsKIAkJLyogVGhpcyBjYW5ub3QgaW4gZmFjdCBjdXJyZW50bHkgaGFwcGVuICovCi0JCWZyZWVfdHR5X3N0cnVjdChvX3R0eSk7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX3R0eTsKIAl9CiAJaW5pdGlhbGl6ZV90dHlfc3RydWN0KG9fdHR5LCBkcml2ZXItPm90aGVyLCBpZHgpOwogCkBAIC0zMDQsMTMgKzMwMiwxMSBAQAogCSAgIHRoZSBlYXN5IHdheSAuLiAqLwogCXJldHZhbCA9IHR0eV9pbml0X3Rlcm1pb3ModHR5KTsKIAlpZiAocmV0dmFsKQotCQlnb3RvIGZyZWVfbWVtX291dDsKKwkJZ290byBlcnJfZGVpbml0X3R0eTsKIAogCXJldHZhbCA9IHR0eV9pbml0X3Rlcm1pb3Mob190dHkpOwotCWlmIChyZXR2YWwpIHsKLQkJdHR5X2ZyZWVfdGVybWlvcyh0dHkpOwotCQlnb3RvIGZyZWVfbWVtX291dDsKLQl9CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJfZnJlZV90ZXJtaW9zOwogCiAJLyoKIAkgKiBFdmVyeXRoaW5nIGFsbG9jYXRlZCAuLi4gc2V0IHVwIHRoZSBvX3R0eSBzdHJ1Y3R1cmUuCkBAIC0zMjcsMTAgKzMyMywxNCBAQAogCXR0eS0+Y291bnQrKzsKIAlkcml2ZXItPnR0eXNbaWR4XSA9IHR0eTsKIAlyZXR1cm4gMDsKLWZyZWVfbWVtX291dDoKK2Vycl9mcmVlX3Rlcm1pb3M6CisJdHR5X2ZyZWVfdGVybWlvcyh0dHkpOworZXJyX2RlaW5pdF90dHk6CisJZGVpbml0aWFsaXplX3R0eV9zdHJ1Y3Qob190dHkpOwogCW1vZHVsZV9wdXQob190dHktPmRyaXZlci0+b3duZXIpOworZXJyX2ZyZWVfdHR5OgogCWZyZWVfdHR5X3N0cnVjdChvX3R0eSk7Ci0JcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIGludCBwdHlfYnNkX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCkBAIC01NTksMjAgKzU1OSwxOSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KGRyaXZlci0+b3RoZXItPm93bmVyKSkgewogCQkvKiBUaGlzIGNhbm5vdCBpbiBmYWN0IGN1cnJlbnRseSBoYXBwZW4gKi8KLQkJZnJlZV90dHlfc3RydWN0KG9fdHR5KTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWVfdHR5OwogCX0KIAlpbml0aWFsaXplX3R0eV9zdHJ1Y3Qob190dHksIGRyaXZlci0+b3RoZXIsIGlkeCk7CiAKIAl0dHktPnRlcm1pb3MgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga3Rlcm1pb3NbMl0pLCBHRlBfS0VSTkVMKTsKIAlpZiAodHR5LT50ZXJtaW9zID09IE5VTEwpCi0JCWdvdG8gZnJlZV9tZW1fb3V0OworCQlnb3RvIGVycl9mcmVlX21lbTsKIAkqdHR5LT50ZXJtaW9zID0gZHJpdmVyLT5pbml0X3Rlcm1pb3M7CiAJdHR5LT50ZXJtaW9zX2xvY2tlZCA9IHR0eS0+dGVybWlvcyArIDE7CiAKIAlvX3R0eS0+dGVybWlvcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrdGVybWlvc1syXSksIEdGUF9LRVJORUwpOwogCWlmIChvX3R0eS0+dGVybWlvcyA9PSBOVUxMKQotCQlnb3RvIGZyZWVfbWVtX291dDsKKwkJZ290byBlcnJfZnJlZV9tZW07CiAJKm9fdHR5LT50ZXJtaW9zID0gZHJpdmVyLT5vdGhlci0+aW5pdF90ZXJtaW9zOwogCW9fdHR5LT50ZXJtaW9zX2xvY2tlZCA9IG9fdHR5LT50ZXJtaW9zICsgMTsKIApAQCAtNTkxLDExICs1OTAsMTMgQEAKIAl0dHktPmNvdW50Kys7CiAJcHR5X2NvdW50Kys7CiAJcmV0dXJuIDA7Ci1mcmVlX21lbV9vdXQ6CitlcnJfZnJlZV9tZW06CisJZGVpbml0aWFsaXplX3R0eV9zdHJ1Y3Qob190dHkpOwogCWtmcmVlKG9fdHR5LT50ZXJtaW9zKTsKLQltb2R1bGVfcHV0KG9fdHR5LT5kcml2ZXItPm93bmVyKTsKLQlmcmVlX3R0eV9zdHJ1Y3Qob190dHkpOwogCWtmcmVlKHR0eS0+dGVybWlvcyk7CisJbW9kdWxlX3B1dChvX3R0eS0+ZHJpdmVyLT5vd25lcik7CitlcnJfZnJlZV90dHk6CisJZnJlZV90dHlfc3RydWN0KG9fdHR5KTsKIAlyZXR1cm4gLUVOT01FTTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvcm9ja2V0LmMgYi9kcml2ZXJzL3R0eS9yb2NrZXQuYwppbmRleCAwMzZmZWViLi4xMzA0M2U4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9yb2NrZXQuYworKysgYi9kcml2ZXJzL3R0eS9yb2NrZXQuYwpAQCAtMTM4MCw3ICsxMzgwLDYgQEAKIHN0YXRpYyB2b2lkIHJwX3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHJfcG9ydCAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0JQ0hBTk5FTF90ICpjcDsKIAogI2lmZGVmIFJPQ0tFVF9ERUJVR19USFJPVFRMRQogCXByaW50ayhLRVJOX0lORk8gInRocm90dGxlICVzOiAlZC4uLi5cbiIsIHR0eS0+bmFtZSwKQEAgLTEzOTAsNyArMTM4OSw2IEBACiAJaWYgKHJvY2tldF9wYXJhbm9pYV9jaGVjayhpbmZvLCAicnBfdGhyb3R0bGUiKSkKIAkJcmV0dXJuOwogCi0JY3AgPSAmaW5mby0+Y2hhbm5lbDsKIAlpZiAoSV9JWE9GRih0dHkpKQogCQlycF9zZW5kX3hjaGFyKHR0eSwgU1RPUF9DSEFSKHR0eSkpOwogCkBAIC0xNDAwLDcgKzEzOTgsNiBAQAogc3RhdGljIHZvaWQgcnBfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCByX3BvcnQgKmluZm8gPSB0dHktPmRyaXZlcl9kYXRhOwotCUNIQU5ORUxfdCAqY3A7CiAjaWZkZWYgUk9DS0VUX0RFQlVHX1RIUk9UVExFCiAJcHJpbnRrKEtFUk5fSU5GTyAidW50aHJvdHRsZSAlczogJWQuLi4uXG4iLCB0dHktPm5hbWUsCiAJICAgICAgIHR0eS0+bGRpc2MuY2hhcnNfaW5fYnVmZmVyKHR0eSkpOwpAQCAtMTQwOSw3ICsxNDA2LDYgQEAKIAlpZiAocm9ja2V0X3BhcmFub2lhX2NoZWNrKGluZm8sICJycF90aHJvdHRsZSIpKQogCQlyZXR1cm47CiAKLQljcCA9ICZpbmZvLT5jaGFubmVsOwogCWlmIChJX0lYT0ZGKHR0eSkpCiAJCXJwX3NlbmRfeGNoYXIodHR5LCBTVEFSVF9DSEFSKHR0eSkpOwogCkBAIC0xNzIyLDEzICsxNzE4LDEwIEBACiBzdGF0aWMgaW50IHJwX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCByX3BvcnQgKmluZm8gPSB0dHktPmRyaXZlcl9kYXRhOwotCUNIQU5ORUxfdCAqY3A7CiAKIAlpZiAocm9ja2V0X3BhcmFub2lhX2NoZWNrKGluZm8sICJycF9jaGFyc19pbl9idWZmZXIiKSkKIAkJcmV0dXJuIDA7CiAKLQljcCA9ICZpbmZvLT5jaGFubmVsOwotCiAjaWZkZWYgUk9DS0VUX0RFQlVHX1dSSVRFCiAJcHJpbnRrKEtFUk5fSU5GTyAicnBfY2hhcnNfaW5fYnVmZmVyIHJldHVybnMgJWQuLi5cbiIsIGluZm8tPnhtaXRfY250KTsKICNlbmRpZgpAQCAtMTc3OSw3ICsxNzcyLDYgQEAKIHsKIAlpbnQgbnVtX2Fpb3BzLCBhaW9wLCBtYXhfbnVtX2Fpb3BzLCBudW1fY2hhbiwgY2hhbjsKIAl1bnNpZ25lZCBpbnQgYWlvcGlvW01BWF9BSU9QU19QRVJfQk9BUkRdOwotCWNoYXIgKnN0ciwgKmJvYXJkX3R5cGU7CiAJQ09OVFJPTExFUl90ICpjdGxwOwogCiAJaW50IGZhc3RfY2xvY2sgPSAwOwpAQCAtMTgwMCw3ICsxNzkyLDYgQEAKIAkvKiAgRGVwZW5kaW5nIG9uIHRoZSBtb2RlbCwgc2V0IHVwIHNvbWUgY29uZmlnIHZhcmlhYmxlcyAqLwogCXN3aXRjaCAoZGV2LT5kZXZpY2UpIHsKIAljYXNlIFBDSV9ERVZJQ0VfSURfUlA0UVVBRDoKLQkJc3RyID0gIlF1YWRjYWJsZSI7CiAJCW1heF9udW1fYWlvcHMgPSAxOwogCQlwb3J0c19wZXJfYWlvcCA9IDQ7CiAJCXJvY2tldE1vZGVsW2ldLm1vZGVsID0gTU9ERUxfUlA0UVVBRDsKQEAgLTE4MDgsNDIgKzE3OTksMzYgQEAKIAkJcm9ja2V0TW9kZWxbaV0ubnVtUG9ydHMgPSA0OwogCQlicmVhazsKIAljYXNlIFBDSV9ERVZJQ0VfSURfUlA4T0NUQToKLQkJc3RyID0gIk9jdGFjYWJsZSI7CiAJCW1heF9udW1fYWlvcHMgPSAxOwogCQlyb2NrZXRNb2RlbFtpXS5tb2RlbCA9IE1PREVMX1JQOE9DVEE7CiAJCXN0cmNweShyb2NrZXRNb2RlbFtpXS5tb2RlbFN0cmluZywgIlJvY2tldFBvcnQgOCBwb3J0IHcvb2N0YSBjYWJsZSIpOwogCQlyb2NrZXRNb2RlbFtpXS5udW1Qb3J0cyA9IDg7CiAJCWJyZWFrOwogCWNhc2UgUENJX0RFVklDRV9JRF9VUlA4T0NUQToKLQkJc3RyID0gIk9jdGFjYWJsZSI7CiAJCW1heF9udW1fYWlvcHMgPSAxOwogCQlyb2NrZXRNb2RlbFtpXS5tb2RlbCA9IE1PREVMX1VQQ0lfUlA4T0NUQTsKIAkJc3RyY3B5KHJvY2tldE1vZGVsW2ldLm1vZGVsU3RyaW5nLCAiUm9ja2V0UG9ydCBVUENJIDggcG9ydCB3L29jdGEgY2FibGUiKTsKIAkJcm9ja2V0TW9kZWxbaV0ubnVtUG9ydHMgPSA4OwogCQlicmVhazsKIAljYXNlIFBDSV9ERVZJQ0VfSURfUlA4SU5URjoKLQkJc3RyID0gIjgiOwogCQltYXhfbnVtX2Fpb3BzID0gMTsKIAkJcm9ja2V0TW9kZWxbaV0ubW9kZWwgPSBNT0RFTF9SUDhJTlRGOwogCQlzdHJjcHkocm9ja2V0TW9kZWxbaV0ubW9kZWxTdHJpbmcsICJSb2NrZXRQb3J0IDggcG9ydCB3L2V4dGVybmFsIEkvRiIpOwogCQlyb2NrZXRNb2RlbFtpXS5udW1Qb3J0cyA9IDg7CiAJCWJyZWFrOwogCWNhc2UgUENJX0RFVklDRV9JRF9VUlA4SU5URjoKLQkJc3RyID0gIjgiOwogCQltYXhfbnVtX2Fpb3BzID0gMTsKIAkJcm9ja2V0TW9kZWxbaV0ubW9kZWwgPSBNT0RFTF9VUENJX1JQOElOVEY7CiAJCXN0cmNweShyb2NrZXRNb2RlbFtpXS5tb2RlbFN0cmluZywgIlJvY2tldFBvcnQgVVBDSSA4IHBvcnQgdy9leHRlcm5hbCBJL0YiKTsKIAkJcm9ja2V0TW9kZWxbaV0ubnVtUG9ydHMgPSA4OwogCQlicmVhazsKIAljYXNlIFBDSV9ERVZJQ0VfSURfUlA4SjoKLQkJc3RyID0gIjhKIjsKIAkJbWF4X251bV9haW9wcyA9IDE7CiAJCXJvY2tldE1vZGVsW2ldLm1vZGVsID0gTU9ERUxfUlA4SjsKIAkJc3RyY3B5KHJvY2tldE1vZGVsW2ldLm1vZGVsU3RyaW5nLCAiUm9ja2V0UG9ydCA4IHBvcnQgdy9SSjExIGNvbm5lY3RvcnMiKTsKIAkJcm9ja2V0TW9kZWxbaV0ubnVtUG9ydHMgPSA4OwogCQlicmVhazsKIAljYXNlIFBDSV9ERVZJQ0VfSURfUlA0SjoKLQkJc3RyID0gIjRKIjsKIAkJbWF4X251bV9haW9wcyA9IDE7CiAJCXBvcnRzX3Blcl9haW9wID0gNDsKIAkJcm9ja2V0TW9kZWxbaV0ubW9kZWwgPSBNT0RFTF9SUDRKOwpAQCAtMTg1MSw1NiArMTgzNiw0OCBAQAogCQlyb2NrZXRNb2RlbFtpXS5udW1Qb3J0cyA9IDQ7CiAJCWJyZWFrOwogCWNhc2UgUENJX0RFVklDRV9JRF9SUDhTTkk6Ci0JCXN0ciA9ICI4IChEQjc4IEN1c3RvbSkiOwogCQltYXhfbnVtX2Fpb3BzID0gMTsKIAkJcm9ja2V0TW9kZWxbaV0ubW9kZWwgPSBNT0RFTF9SUDhTTkk7CiAJCXN0cmNweShyb2NrZXRNb2RlbFtpXS5tb2RlbFN0cmluZywgIlJvY2tldFBvcnQgOCBwb3J0IHcvIGN1c3RvbSBEQjc4Iik7CiAJCXJvY2tldE1vZGVsW2ldLm51bVBvcnRzID0gODsKIAkJYnJlYWs7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX1JQMTZTTkk6Ci0JCXN0ciA9ICIxNiAoREI3OCBDdXN0b20pIjsKIAkJbWF4X251bV9haW9wcyA9IDI7CiAJCXJvY2tldE1vZGVsW2ldLm1vZGVsID0gTU9ERUxfUlAxNlNOSTsKIAkJc3RyY3B5KHJvY2tldE1vZGVsW2ldLm1vZGVsU3RyaW5nLCAiUm9ja2V0UG9ydCAxNiBwb3J0IHcvIGN1c3RvbSBEQjc4Iik7CiAJCXJvY2tldE1vZGVsW2ldLm51bVBvcnRzID0gMTY7CiAJCWJyZWFrOwogCWNhc2UgUENJX0RFVklDRV9JRF9SUDE2SU5URjoKLQkJc3RyID0gIjE2IjsKIAkJbWF4X251bV9haW9wcyA9IDI7CiAJCXJvY2tldE1vZGVsW2ldLm1vZGVsID0gTU9ERUxfUlAxNklOVEY7CiAJCXN0cmNweShyb2NrZXRNb2RlbFtpXS5tb2RlbFN0cmluZywgIlJvY2tldFBvcnQgMTYgcG9ydCB3L2V4dGVybmFsIEkvRiIpOwogCQlyb2NrZXRNb2RlbFtpXS5udW1Qb3J0cyA9IDE2OwogCQlicmVhazsKIAljYXNlIFBDSV9ERVZJQ0VfSURfVVJQMTZJTlRGOgotCQlzdHIgPSAiMTYiOwogCQltYXhfbnVtX2Fpb3BzID0gMjsKIAkJcm9ja2V0TW9kZWxbaV0ubW9kZWwgPSBNT0RFTF9VUENJX1JQMTZJTlRGOwogCQlzdHJjcHkocm9ja2V0TW9kZWxbaV0ubW9kZWxTdHJpbmcsICJSb2NrZXRQb3J0IFVQQ0kgMTYgcG9ydCB3L2V4dGVybmFsIEkvRiIpOwogCQlyb2NrZXRNb2RlbFtpXS5udW1Qb3J0cyA9IDE2OwogCQlicmVhazsKIAljYXNlIFBDSV9ERVZJQ0VfSURfQ1JQMTZJTlRGOgotCQlzdHIgPSAiMTYiOwogCQltYXhfbnVtX2Fpb3BzID0gMjsKIAkJcm9ja2V0TW9kZWxbaV0ubW9kZWwgPSBNT0RFTF9DUENJX1JQMTZJTlRGOwogCQlzdHJjcHkocm9ja2V0TW9kZWxbaV0ubW9kZWxTdHJpbmcsICJSb2NrZXRQb3J0IENvbXBhY3QgUENJIDE2IHBvcnQgdy9leHRlcm5hbCBJL0YiKTsKIAkJcm9ja2V0TW9kZWxbaV0ubnVtUG9ydHMgPSAxNjsKIAkJYnJlYWs7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX1JQMzJJTlRGOgotCQlzdHIgPSAiMzIiOwogCQltYXhfbnVtX2Fpb3BzID0gNDsKIAkJcm9ja2V0TW9kZWxbaV0ubW9kZWwgPSBNT0RFTF9SUDMySU5URjsKIAkJc3RyY3B5KHJvY2tldE1vZGVsW2ldLm1vZGVsU3RyaW5nLCAiUm9ja2V0UG9ydCAzMiBwb3J0IHcvZXh0ZXJuYWwgSS9GIik7CiAJCXJvY2tldE1vZGVsW2ldLm51bVBvcnRzID0gMzI7CiAJCWJyZWFrOwogCWNhc2UgUENJX0RFVklDRV9JRF9VUlAzMklOVEY6Ci0JCXN0ciA9ICIzMiI7CiAJCW1heF9udW1fYWlvcHMgPSA0OwogCQlyb2NrZXRNb2RlbFtpXS5tb2RlbCA9IE1PREVMX1VQQ0lfUlAzMklOVEY7CiAJCXN0cmNweShyb2NrZXRNb2RlbFtpXS5tb2RlbFN0cmluZywgIlJvY2tldFBvcnQgVVBDSSAzMiBwb3J0IHcvZXh0ZXJuYWwgSS9GIik7CiAJCXJvY2tldE1vZGVsW2ldLm51bVBvcnRzID0gMzI7CiAJCWJyZWFrOwogCWNhc2UgUENJX0RFVklDRV9JRF9SUFA0OgotCQlzdHIgPSAiUGx1cyBRdWFkY2FibGUiOwogCQltYXhfbnVtX2Fpb3BzID0gMTsKIAkJcG9ydHNfcGVyX2Fpb3AgPSA0OwogCQlhbHRDaGFuUmluZ0luZGljYXRvcisrOwpAQCAtMTkxMCw3ICsxODg3LDYgQEAKIAkJcm9ja2V0TW9kZWxbaV0ubnVtUG9ydHMgPSA0OwogCQlicmVhazsKIAljYXNlIFBDSV9ERVZJQ0VfSURfUlBQODoKLQkJc3RyID0gIlBsdXMgT2N0YWNhYmxlIjsKIAkJbWF4X251bV9haW9wcyA9IDI7CiAJCXBvcnRzX3Blcl9haW9wID0gNDsKIAkJYWx0Q2hhblJpbmdJbmRpY2F0b3IrKzsKQEAgLTE5MjAsNyArMTg5Niw2IEBACiAJCXJvY2tldE1vZGVsW2ldLm51bVBvcnRzID0gODsKIAkJYnJlYWs7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX1JQMl8yMzI6Ci0JCXN0ciA9ICJQbHVzIDIgKFJTLTIzMikiOwogCQltYXhfbnVtX2Fpb3BzID0gMTsKIAkJcG9ydHNfcGVyX2Fpb3AgPSAyOwogCQlhbHRDaGFuUmluZ0luZGljYXRvcisrOwpAQCAtMTkzMCw3ICsxOTA1LDYgQEAKIAkJcm9ja2V0TW9kZWxbaV0ubnVtUG9ydHMgPSAyOwogCQlicmVhazsKIAljYXNlIFBDSV9ERVZJQ0VfSURfUlAyXzQyMjoKLQkJc3RyID0gIlBsdXMgMiAoUlMtNDIyKSI7CiAJCW1heF9udW1fYWlvcHMgPSAxOwogCQlwb3J0c19wZXJfYWlvcCA9IDI7CiAJCWFsdENoYW5SaW5nSW5kaWNhdG9yKys7CkBAIC0xOTQzLDcgKzE5MTcsNiBAQAogCiAJCW1heF9udW1fYWlvcHMgPSAxOwogCQlwb3J0c19wZXJfYWlvcCA9IDY7Ci0JCXN0ciA9ICI2LXBvcnQiOwogCiAJCS8qICBJZiByZXZpc2lvbiBpcyAxLCB0aGUgcm9ja2V0bW9kZW0gZmxhc2ggbXVzdCBiZSBsb2FkZWQuCiAJCSAqICBJZiBpdCBpcyAyIGl0IGlzIGEgInNvY2tldGVkIiB2ZXJzaW9uLiAqLwpAQCAtMTk2MSw3ICsxOTM0LDYgQEAKIAljYXNlIFBDSV9ERVZJQ0VfSURfUlA0TToKIAkJbWF4X251bV9haW9wcyA9IDE7CiAJCXBvcnRzX3Blcl9haW9wID0gNDsKLQkJc3RyID0gIjQtcG9ydCI7CiAJCWlmIChkZXYtPnJldmlzaW9uID09IDEpIHsKIAkJCXJja3RwdF90eXBlW2ldID0gUk9DS0VUX1RZUEVfTU9ERU1JSTsKIAkJCXJvY2tldE1vZGVsW2ldLmxvYWRybTIgPSAxOwpAQCAtMTk3NCw3ICsxOTQ2LDYgQEAKIAkJcm9ja2V0TW9kZWxbaV0ubnVtUG9ydHMgPSA0OwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlzdHIgPSAiKHVua25vd24vdW5zdXBwb3J0ZWQpIjsKIAkJbWF4X251bV9haW9wcyA9IDA7CiAJCWJyZWFrOwogCX0KQEAgLTIwMDAsMTQgKzE5NzEsMTIgQEAKIAkJCWlmICghCiAJCQkgICAgKHNJblcoQ29uZmlnSU8gKyBfUENJXzkwMzBfR1BJT19DVFJMKSAmCiAJCQkgICAgIFBDSV9HUElPX0NUUkxfOFBPUlQpKSB7Ci0JCQkJc3RyID0gIlF1YWRjYWJsZSI7CiAJCQkJcG9ydHNfcGVyX2Fpb3AgPSA0OwogCQkJCXJvY2tldE1vZGVsW2ldLm51bVBvcnRzID0gNDsKIAkJCX0KIAkJfQogCQlicmVhazsKIAljYXNlIFBDSV9ERVZJQ0VfSURfVVBDSV9STTNfOFBPUlQ6Ci0JCXN0ciA9ICI4IHBvcnRzIjsKIAkJbWF4X251bV9haW9wcyA9IDE7CiAJCXJvY2tldE1vZGVsW2ldLm1vZGVsID0gTU9ERUxfVVBDSV9STTNfOFBPUlQ7CiAJCXN0cmNweShyb2NrZXRNb2RlbFtpXS5tb2RlbFN0cmluZywgIlJvY2tldE1vZGVtIElJSSA4IHBvcnQiKTsKQEAgLTIwMTgsNyArMTk4Nyw2IEBACiAJCXJja3RwdF90eXBlW2ldID0gUk9DS0VUX1RZUEVfTU9ERU1JSUk7CiAJCWJyZWFrOwogCWNhc2UgUENJX0RFVklDRV9JRF9VUENJX1JNM180UE9SVDoKLQkJc3RyID0gIjQgcG9ydHMiOwogCQltYXhfbnVtX2Fpb3BzID0gMTsKIAkJcm9ja2V0TW9kZWxbaV0ubW9kZWwgPSBNT0RFTF9VUENJX1JNM180UE9SVDsKIAkJc3RyY3B5KHJvY2tldE1vZGVsW2ldLm1vZGVsU3RyaW5nLCAiUm9ja2V0TW9kZW0gSUlJIDQgcG9ydCIpOwpAQCAtMjAzMiwyMSArMjAwMCw2IEBACiAJCWJyZWFrOwogCX0KIAotCXN3aXRjaCAocmNrdHB0X3R5cGVbaV0pIHsKLQljYXNlIFJPQ0tFVF9UWVBFX01PREVNOgotCQlib2FyZF90eXBlID0gIlJvY2tldE1vZGVtIjsKLQkJYnJlYWs7Ci0JY2FzZSBST0NLRVRfVFlQRV9NT0RFTUlJOgotCQlib2FyZF90eXBlID0gIlJvY2tldE1vZGVtIElJIjsKLQkJYnJlYWs7Ci0JY2FzZSBST0NLRVRfVFlQRV9NT0RFTUlJSToKLQkJYm9hcmRfdHlwZSA9ICJSb2NrZXRNb2RlbSBJSUkiOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlib2FyZF90eXBlID0gIlJvY2tldFBvcnQiOwotCQlicmVhazsKLQl9Ci0KIAlpZiAoZmFzdF9jbG9jaykgewogCQlzQ2xvY2tQcmVzY2FsZSA9IDB4MTI7CS8qIG1vZCAyIChkaXZpZGUgYnkgMykgKi8KIAkJcnBfYmF1ZF9iYXNlW2ldID0gOTIxNjAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsLzIxMjg1LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvMjEyODUuYwppbmRleCBkODlhYTM4Li4xYjM3NjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvMjEyODUuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvMjEyODUuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBsaW51eC9kcml2ZXJzL3NlcmlhbC8yMTI4NS5jCi0gKgogICogRHJpdmVyIGZvciB0aGUgc2VyaWFsIHBvcnQgb24gdGhlIDIxMjg1IFN0cm9uZ0FybS0xMTAgY29yZSBsb2dpYyBjaGlwLgogICoKICAqIEJhc2VkIG9uIGRyaXZlcnMvY2hhci9zZXJpYWwuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLmMKaW5kZXggNjYxMTUzNS4uYjQwZjdiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICBsaW51eC9kcml2ZXJzL2NoYXIvODI1MC5jCi0gKgogICogIERyaXZlciBmb3IgODI1MC8xNjU1MC10eXBlIHNlcmlhbCBwb3J0cwogICoKICAqICBCYXNlZCBvbiBkcml2ZXJzL2NoYXIvc2VyaWFsLmMsIGJ5IExpbnVzIFRvcnZhbGRzLCBUaGVvZG9yZSBUcydvLgpAQCAtMjczLDcgKzI3MSw3IEBACiAJCS5maWZvX3NpemUJPSAzMiwKIAkJLnR4X2xvYWRzegk9IDMyLAogCQkuZmNyCQk9IFVBUlRfRkNSX0VOQUJMRV9GSUZPIHwgVUFSVF9GQ1JfUl9UUklHXzEwLAotCQkuZmxhZ3MJCT0gVUFSVF9DQVBfRklGTyB8IFVBUlRfQ0FQX1VVRSwKKwkJLmZsYWdzCQk9IFVBUlRfQ0FQX0ZJRk8gfCBVQVJUX0NBUF9VVUUgfCBVQVJUX0NBUF9SVE9JRSwKIAl9LAogCVtQT1JUX1JNOTAwMF0gPSB7CiAJCS5uYW1lCQk9ICJSTTkwMDAiLApAQCAtMzAzLDYgKzMwMSwxNCBAQAogCQkuZmNyCQk9IFVBUlRfRkNSX0VOQUJMRV9GSUZPIHwgVUFSVF9GQ1JfUl9UUklHXzEwLAogCQkuZmxhZ3MJCT0gVUFSVF9DQVBfRklGTyB8IFVBUlRfQ0FQX0FGRSwKIAl9LAorCVtQT1JUX1RFR1JBXSA9IHsKKwkJLm5hbWUJCT0gIlRlZ3JhIiwKKwkJLmZpZm9fc2l6ZQk9IDMyLAorCQkudHhfbG9hZHN6CT0gOCwKKwkJLmZjcgkJPSBVQVJUX0ZDUl9FTkFCTEVfRklGTyB8IFVBUlRfRkNSX1JfVFJJR18wMSB8CisJCQkJICBVQVJUX0ZDUl9UX1RSSUdfMDEsCisJCS5mbGFncwkJPSBVQVJUX0NBUF9GSUZPIHwgVUFSVF9DQVBfUlRPSUUsCisJfSwKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19NSVBTX0FMQ0hFTVkpCkBAIC0xNDI3LDYgKzE0MzMsMjcgQEAKIAlzZXJpYWxfb3V0KHVwLCBVQVJUX0lFUiwgdXAtPmllcik7CiB9CiAKKy8qCisgKiBDbGVhciB0aGUgVGVncmEgcnggZmlmbyBhZnRlciBhIGJyZWFrCisgKgorICogRklYTUU6IFRoaXMgbmVlZHMgdG8gYmVjb21lIGEgcG9ydCBzcGVjaWZpYyBjYWxsYmFjayBvbmNlIHdlIGhhdmUgYQorICogZnJhbWV3b3JrIGZvciB0aGlzCisgKi8KK3N0YXRpYyB2b2lkIGNsZWFyX3J4X2ZpZm8oc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCkKK3sKKwl1bnNpZ25lZCBpbnQgc3RhdHVzLCB0bW91dCA9IDEwMDAwOworCWRvIHsKKwkJc3RhdHVzID0gc2VyaWFsX2luKHVwLCBVQVJUX0xTUik7CisJCWlmIChzdGF0dXMgJiAoVUFSVF9MU1JfRklGT0UgfCBVQVJUX0xTUl9CUktfRVJST1JfQklUUykpCisJCQlzdGF0dXMgPSBzZXJpYWxfaW4odXAsIFVBUlRfUlgpOworCQllbHNlCisJCQlicmVhazsKKwkJaWYgKC0tdG1vdXQgPT0gMCkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMSk7CisJfSB3aGlsZSAoMSk7Cit9CisKIHN0YXRpYyB2b2lkCiByZWNlaXZlX2NoYXJzKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXAsIHVuc2lnbmVkIGludCAqc3RhdHVzKQogewpAQCAtMTQ2Miw2ICsxNDg5LDEzIEBACiAJCQkJbHNyICY9IH4oVUFSVF9MU1JfRkUgfCBVQVJUX0xTUl9QRSk7CiAJCQkJdXAtPnBvcnQuaWNvdW50LmJyaysrOwogCQkJCS8qCisJCQkJICogSWYgdGVncmEgcG9ydCB0aGVuIGNsZWFyIHRoZSByeCBmaWZvIHRvCisJCQkJICogYWNjZXB0IGFub3RoZXIgYnJlYWsvY2hhcmFjdGVyLgorCQkJCSAqLworCQkJCWlmICh1cC0+cG9ydC50eXBlID09IFBPUlRfVEVHUkEpCisJCQkJCWNsZWFyX3J4X2ZpZm8odXApOworCisJCQkJLyoKIAkJCQkgKiBXZSBkbyB0aGUgU3lzUlEgYW5kIFNBSyBjaGVja2luZwogCQkJCSAqIGhlcmUgYmVjYXVzZSBvdGhlcndpc2UgdGhlIGJyZWFrCiAJCQkJICogbWF5IGdldCBtYXNrZWQgYnkgaWdub3JlX3N0YXR1c19tYXNrCkBAIC0yNDA1LDcgKzI0MzksOSBAQAogCQkJVUFSVF9FTkFCTEVfTVMoJnVwLT5wb3J0LCB0ZXJtaW9zLT5jX2NmbGFnKSkKIAkJdXAtPmllciB8PSBVQVJUX0lFUl9NU0k7CiAJaWYgKHVwLT5jYXBhYmlsaXRpZXMgJiBVQVJUX0NBUF9VVUUpCi0JCXVwLT5pZXIgfD0gVUFSVF9JRVJfVVVFIHwgVUFSVF9JRVJfUlRPSUU7CisJCXVwLT5pZXIgfD0gVUFSVF9JRVJfVVVFOworCWlmICh1cC0+Y2FwYWJpbGl0aWVzICYgVUFSVF9DQVBfUlRPSUUpCisJCXVwLT5pZXIgfD0gVUFSVF9JRVJfUlRPSUU7CiAKIAlzZXJpYWxfb3V0KHVwLCBVQVJUX0lFUiwgdXAtPmllcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLmggYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC5oCmluZGV4IDZlMTllYTMuLjZlZGY0YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLmgKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAuaApAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAgbGludXgvZHJpdmVycy9jaGFyLzgyNTAuaAotICoKICAqICBEcml2ZXIgZm9yIDgyNTAvMTY1NTAtdHlwZSBzZXJpYWwgcG9ydHMKICAqCiAgKiAgQmFzZWQgb24gZHJpdmVycy9jaGFyL3NlcmlhbC5jLCBieSBMaW51cyBUb3J2YWxkcywgVGhlb2RvcmUgVHMnby4KQEAgLTQ0LDYgKzQyLDcgQEAKICNkZWZpbmUgVUFSVF9DQVBfU0xFRVAJKDEgPDwgMTApCS8qIFVBUlQgaGFzIElFUiBzbGVlcCAqLwogI2RlZmluZSBVQVJUX0NBUF9BRkUJKDEgPDwgMTEpCS8qIE1DUi1iYXNlZCBodyBmbG93IGNvbnRyb2wgKi8KICNkZWZpbmUgVUFSVF9DQVBfVVVFCSgxIDw8IDEyKQkvKiBVQVJUIG5lZWRzIElFUiBiaXQgNiBzZXQgKFhzY2FsZSkgKi8KKyNkZWZpbmUgVUFSVF9DQVBfUlRPSUUJKDEgPDwgMTMpCS8qIFVBUlQgbmVlZHMgSUVSIGJpdCA0IHNldCAoWHNjYWxlLCBUZWdyYSkgKi8KIAogI2RlZmluZSBVQVJUX0JVR19RVU9UCSgxIDw8IDApCS8qIFVBUlQgaGFzIGJ1Z2d5IHF1b3QgTFNCICovCiAjZGVmaW5lIFVBUlRfQlVHX1RYRU4JKDEgPDwgMSkJLyogVUFSVCBoYXMgYnVnZ3kgVFggSUlSIHN0YXR1cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsLzgyNTBfYWNjZW50LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MF9hY2NlbnQuYwppbmRleCA5YzEwMjYyLi4zNGI1MWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MF9hY2NlbnQuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MF9hY2NlbnQuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAgbGludXgvZHJpdmVycy9zZXJpYWwvODI1MF9hY2NlbnQuYwotICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDUgUnVzc2VsbCBLaW5nLgogICogIERhdGEgdGFrZW4gZnJvbSBpbmNsdWRlL2FzbS1pMzg2L3NlcmlhbC5oCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsLzgyNTBfYm9jYS5jIGIvZHJpdmVycy90dHkvc2VyaWFsLzgyNTBfYm9jYS5jCmluZGV4IDNiZmUwZjcuLmQxMjVkYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwX2JvY2EuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MF9ib2NhLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogIGxpbnV4L2RyaXZlcnMvc2VyaWFsLzgyNTBfYm9jYS5jCi0gKgogICogIENvcHlyaWdodCAoQykgMjAwNSBSdXNzZWxsIEtpbmcuCiAgKiAgRGF0YSB0YWtlbiBmcm9tIGluY2x1ZGUvYXNtLWkzODYvc2VyaWFsLmgKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MF9leGFyX3N0MTZjNTU0LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MF9leGFyX3N0MTZjNTU0LmMKaW5kZXggNTY3MTQzYS4uYmY1M2FhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsLzgyNTBfZXhhcl9zdDE2YzU1NC5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwX2V4YXJfc3QxNmM1NTQuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAgbGludXgvZHJpdmVycy9zZXJpYWwvODI1MF9leGFyLmMKLSAqCiAgKiAgV3JpdHRlbiBieSBQYXVsIEIgU2Nocm9lZGVyIDwgcHNjaHJvZWRlciAiYXQiIHVwbG9naXggImRvdCIgY29tID4KICAqICBCYXNlZCBvbiA4MjUwX2JvY2EuCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsLzgyNTBfZm91cnBvcnQuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwX2ZvdXJwb3J0LmMKaW5kZXggNjM3NWQ2OC4uYmUxNTgyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsLzgyNTBfZm91cnBvcnQuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MF9mb3VycG9ydC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICBsaW51eC9kcml2ZXJzL3NlcmlhbC84MjUwX2ZvdXJwb3J0LmMKLSAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1IFJ1c3NlbGwgS2luZy4KICAqICBEYXRhIHRha2VuIGZyb20gaW5jbHVkZS9hc20taTM4Ni9zZXJpYWwuaAogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwX2h1YjYuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwX2h1YjYuYwppbmRleCA3NjA5MTUwLi5hNWM3NzhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MF9odWI2LmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsLzgyNTBfaHViNi5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICBsaW51eC9kcml2ZXJzL3NlcmlhbC84MjUwX2h1YjYuYwotICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDUgUnVzc2VsbCBLaW5nLgogICogIERhdGEgdGFrZW4gZnJvbSBpbmNsdWRlL2FzbS1pMzg2L3NlcmlhbC5oCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsLzgyNTBfbWNhLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MF9tY2EuYwppbmRleCBkMTBiZTk0Li5kMjBhYmYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MF9tY2EuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MF9tY2EuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAgbGludXgvZHJpdmVycy9zZXJpYWwvODI1MF9tY2EuYwotICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDUgUnVzc2VsbCBLaW5nLgogICogIERhdGEgdGFrZW4gZnJvbSBpbmNsdWRlL2FzbS1pMzg2L3NlcmlhbC5oCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsLzgyNTBfcGNpLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MF9wY2kuYwppbmRleCA3MzhjZWM5Li40YjQ5NjhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MF9wY2kuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MF9wY2kuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAgbGludXgvZHJpdmVycy9jaGFyLzgyNTBfcGNpLmMKLSAqCiAgKiAgUHJvYmUgbW9kdWxlIGZvciA4MjUwLzE2NTUwLXR5cGUgUENJIHNlcmlhbCBwb3J0cy4KICAqCiAgKiAgQmFzZWQgb24gZHJpdmVycy9jaGFyL3NlcmlhbC5jLCBieSBMaW51cyBUb3J2YWxkcywgVGhlb2RvcmUgVHMnby4KQEAgLTk3Myw2ICs5NzEsMTQgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50CitwY2lfb21lZ2FwY2lfc2V0dXAoc3RydWN0IHNlcmlhbF9wcml2YXRlICpwcml2LAorCQkgICAgICBzdHJ1Y3QgcGNpc2VyaWFsX2JvYXJkICpib2FyZCwKKwkJICAgICAgc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGlkeCkKK3sKKwlyZXR1cm4gc2V0dXBfcG9ydChwcml2LCBwb3J0LCAyLCBpZHggKiA4LCAwKTsKK30KKwogc3RhdGljIGludCBza2lwX3R4X2VuX3NldHVwKHN0cnVjdCBzZXJpYWxfcHJpdmF0ZSAqcHJpdiwKIAkJCWNvbnN0IHN0cnVjdCBwY2lzZXJpYWxfYm9hcmQgKmJvYXJkLAogCQkJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGlkeCkKQEAgLTEwMTIsNiArMTAxOCw4IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElUQU5fMjAwRUkJMHhBMDE2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElUQU5fMjAwRUlTSQkweEEwMTcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9PWFNFTUlfMTZQQ0k5NTgJMHg5NTM4CisjZGVmaW5lIFBDSUVfREVWSUNFX0lEX05FT18yX09YX0lCTQkweDAwRjYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QTFhfQ1JPTllYX09NRUdBCTB4YzAwMQogCiAvKiBVbmtub3duIHZlbmRvcnMvY2FyZHMgLSB0aGlzIHNob3VsZCBub3QgYmUgaW4gbGludXgvcGNpX2lkcy5oICovCiAjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfVU5LTk9XTl8weDE1ODQJMHgxNTg0CkBAIC0xNDEyLDcgKzE0MjAsNyBAQAogCQkuc2V0dXAJCT0gcGNpX2RlZmF1bHRfc2V0dXAsCiAJfSwKIAkvKgotCSAqIEZvciBPeGZvcmQgU2VtaWNvbmR1Y3RvciBhbmQgTWFpbnBpbmUKKwkgKiBGb3IgT3hmb3JkIFNlbWljb25kdWN0b3IgVG9ybmFkbyBiYXNlZCBkZXZpY2VzCiAJICovCiAJewogCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfT1hTRU1JLApAQCAtMTQzMCw2ICsxNDM4LDI0IEBACiAJCS5pbml0CQk9IHBjaV9veHNlbWlfdG9ybmFkb19pbml0LAogCQkuc2V0dXAJCT0gcGNpX2RlZmF1bHRfc2V0dXAsCiAJfSwKKwl7CisJCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9ESUdJLAorCQkuZGV2aWNlCQk9IFBDSUVfREVWSUNFX0lEX05FT18yX09YX0lCTSwKKwkJLnN1YnZlbmRvcgkJPSBQQ0lfU1VCVkVORE9SX0lEX0lCTSwKKwkJLnN1YmRldmljZQkJPSBQQ0lfQU5ZX0lELAorCQkuaW5pdAkJCT0gcGNpX294c2VtaV90b3JuYWRvX2luaXQsCisJCS5zZXR1cAkJPSBwY2lfZGVmYXVsdF9zZXR1cCwKKwl9LAorCS8qCisJICogQ3Jvbnl4IE9tZWdhIFBDSSAoUExYLWNoaXAgYmFzZWQpCisJICovCisJeworCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfUExYLAorCQkuZGV2aWNlCQk9IFBDSV9ERVZJQ0VfSURfUExYX0NST05ZWF9PTUVHQSwKKwkJLnN1YnZlbmRvcgk9IFBDSV9BTllfSUQsCisJCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAorCQkuc2V0dXAJCT0gcGNpX29tZWdhcGNpX3NldHVwLAorCSB9LAogCS8qCiAJICogRGVmYXVsdCAibWF0Y2ggZXZlcnl0aGluZyIgdGVybWluYXRvciBlbnRyeQogCSAqLwpAQCAtMTYxNyw2ICsxNjQzLDcgQEAKIAlwYm5fQURESURBVEFfUENJZV80XzM5MDYyNTAsCiAJcGJuX0FERElEQVRBX1BDSWVfOF8zOTA2MjUwLAogCXBibl9jZTQxMDBfMV8xMTUyMDAsCisJcGJuX29tZWdhcGNpLAogfTsKIAogLyoKQEAgLTIzMTIsNiArMjMzOSwxMiBAQAogCQkuYmFzZV9iYXVkCT0gOTIxNjAwLAogCQkucmVnX3NoaWZ0ICAgICAgPSAyLAogCX0sCisJW3Bibl9vbWVnYXBjaV0gPSB7CisJCS5mbGFncwkJPSBGTF9CQVNFMCwKKwkJLm51bV9wb3J0cwk9IDgsCisJCS5iYXNlX2JhdWQJPSAxMTUyMDAsCisJCS51YXJ0X29mZnNldAk9IDB4MjAwLAorCX0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc29mdG1vZGVtX2JsYWNrbGlzdFtdID0gewpAQCAtMzA3NSw2ICszMTA4LDE0IEBACiAJewlQQ0lfVkVORE9SX0lEX01BSU5QSU5FLCAweDQwMDAsCS8qIElRIEV4cHJlc3MgOCBQb3J0IFYuMzQgU3VwZXItRzMgRmF4ICovCiAJCVBDSV9WRU5ET1JfSURfTUFJTlBJTkUsIDB4NDAwOCwgMCwgMCwKIAkJcGJuX294c2VtaV84XzQwMDAwMDAgfSwKKworCS8qCisJICogRGlnaS9JQk0gUENJZSAyLXBvcnQgQXN5bmMgRUlBLTIzMiBBZGFwdGVyIHV0aWxpemluZyBPeFNlbWkgVG9ybmFkbworCSAqLworCXsJUENJX1ZFTkRPUl9JRF9ESUdJLCBQQ0lFX0RFVklDRV9JRF9ORU9fMl9PWF9JQk0sCisJCVBDSV9TVUJWRU5ET1JfSURfSUJNLCBQQ0lfQU5ZX0lELCAwLCAwLAorCQlwYm5fb3hzZW1pXzJfNDAwMDAwMCB9LAorCiAJLyoKIAkgKiBTQlMgVGVjaG5vbG9naWVzLCBJbmMuIFAtT2N0YWwgYW5kIFBNQy1PQ1RQUk8gY2FyZHMsCiAJICogZnJvbSBza29rb2R5bkB5YWhvby5jb20KQEAgLTM4MDEsNiArMzg0MiwxMiBAQAogCQlQQ0lfQU5ZX0lELCAgUENJX0FOWV9JRCwgMCwgMCwKIAkJcGJuX2NlNDEwMF8xXzExNTIwMCB9LAogCisJLyoKKwkgKiBDcm9ueXggT21lZ2EgUENJCisJICovCisJewlQQ0lfVkVORE9SX0lEX1BMWCwgUENJX0RFVklDRV9JRF9QTFhfQ1JPTllYX09NRUdBLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAorCQlwYm5fb21lZ2FwY2kgfSwKIAogCS8qCiAJICogVGhlc2UgZW50cmllcyBtYXRjaCBkZXZpY2VzIHdpdGggY2xhc3MgQ09NTVVOSUNBVElPTl9TRVJJQUwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MF9wbnAuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwX3BucC5jCmluZGV4IDQ4MjJjYjUuLmZjMzAxZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwX3BucC5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwX3BucC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICBsaW51eC9kcml2ZXJzL2NoYXIvODI1MF9wbnAuYwotICoKICAqICBQcm9iZSBtb2R1bGUgZm9yIDgyNTAvMTY1NTAtdHlwZSBJU0FQTlAgc2VyaWFsIHBvcnRzLgogICoKICAqICBCYXNlZCBvbiBkcml2ZXJzL2NoYXIvc2VyaWFsLmMsIGJ5IExpbnVzIFRvcnZhbGRzLCBUaGVvZG9yZSBUcydvLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWcgYi9kcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZwppbmRleCBiMWYwZjgzLi42MzYxNDRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZwpAQCAtNTM3LDcgKzUzNyw3IEBACiAKIGNvbmZpZyBTRVJJQUxfUzVQVjIxMAogCXRyaXN0YXRlICJTYW1zdW5nIFM1UFYyMTAgU2VyaWFsIHBvcnQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNFUklBTF9TQU1TVU5HICYmIChDUFVfUzVQVjIxMCB8fCBDUFVfUzVQNjQ0MiB8fCBDUFVfRVhZTk9TNDIxMCkKKwlkZXBlbmRzIG9uIFNFUklBTF9TQU1TVU5HICYmIChDUFVfUzVQVjIxMCB8fCBDUFVfRVhZTk9TNDIxMCkKIAlzZWxlY3QgU0VSSUFMX1NBTVNVTkdfVUFSVFNfNCBpZiAoQ1BVX1M1UFYyMTAgfHwgQ1BVX0VYWU5PUzQyMTApCiAJZGVmYXVsdCB5CiAJaGVscApAQCAtMTU4NSw3ICsxNTg1LDcgQEAKIAkgIFN1cHBvcnQgZm9yIHRoZSBJRlg2eDYwIG1vZGVtIGRldmljZXMgb24gSW50ZWwgTUlEIHBsYXRmb3Jtcy4KIAogY29uZmlnIFNFUklBTF9QQ0hfVUFSVAotCXRyaXN0YXRlICJJbnRlbCBFRzIwVCBQQ0ggVUFSVC9PS0kgU0VNSUNPTkRVQ1RPUiBNTDcyMTMgSU9IIgorCXRyaXN0YXRlICJJbnRlbCBFRzIwVCBQQ0ggLyBPS0kgU0VNSUNPTkRVQ1RPUiBJT0goTUw3MjEzL01MNzIyMykgVUFSVCIKIAlkZXBlbmRzIG9uIFBDSQogCXNlbGVjdCBTRVJJQUxfQ09SRQogCWhlbHAKQEAgLTE1OTMsMTAgKzE1OTMsMTIgQEAKIAkgIHdoaWNoIGlzIGFuIElPSChJbnB1dC9PdXRwdXQgSHViKSBmb3IgeDg2IGVtYmVkZGVkIHByb2Nlc3Nvci4KIAkgIEVuYWJsaW5nIFBDSF9ETUEsIHRoaXMgUENIIFVBUlQgd29ya3MgYXMgRE1BIG1vZGUuCiAKLQkgIFRoaXMgZHJpdmVyIGFsc28gY2FuIGJlIHVzZWQgZm9yIE9LSSBTRU1JQ09ORFVDVE9SIE1MNzIxMyBJT0goSW5wdXQvCi0JICBPdXRwdXQgSHViKSB3aGljaCBpcyBmb3IgSVZJKEluLVZlaGljbGUgSW5mb3RhaW5tZW50KSB1c2UuCi0JICBNTDcyMTMgaXMgY29tcGFuaW9uIGNoaXAgZm9yIEludGVsIEF0b20gRTZ4eCBzZXJpZXMuCi0JICBNTDcyMTMgaXMgY29tcGxldGVseSBjb21wYXRpYmxlIGZvciBJbnRlbCBFRzIwVCBQQ0guCisJICBUaGlzIGRyaXZlciBhbHNvIGNhbiBiZSB1c2VkIGZvciBPS0kgU0VNSUNPTkRVQ1RPUiBJT0goSW5wdXQvCisJICBPdXRwdXQgSHViKSwgTUw3MjEzIGFuZCBNTDcyMjMuCisJICBNTDcyMTMgSU9IIGlzIGZvciBJVkkoSW4tVmVoaWNsZSBJbmZvdGFpbm1lbnQpIHVzZSBhbmQgTUw3MjIzIElPSCBpcworCSAgZm9yIE1QKE1lZGlhIFBob25lKSB1c2UuCisJICBNTDcyMTMvTUw3MjIzIGlzIGNvbXBhbmlvbiBjaGlwIGZvciBJbnRlbCBBdG9tIEU2eHggc2VyaWVzLgorCSAgTUw3MjEzL01MNzIyMyBpcyBjb21wbGV0ZWx5IGNvbXBhdGlibGUgZm9yIEludGVsIEVHMjBUIFBDSC4KIAogY29uZmlnIFNFUklBTF9NU01fU01ECiAJYm9vbCAiRW5hYmxlIHR0eSBkZXZpY2UgaW50ZXJmYWNlIGZvciBzb21lIFNNRCBwb3J0cyIKQEAgLTE2MjAsNCArMTYyMiwxNyBAQAogCWhlbHAKIAkgIEVuYWJsZSBhIE1YUyBBVUFSVCBwb3J0IHRvIGJlIHRoZSBzeXN0ZW0gY29uc29sZS4KIAorY29uZmlnIFNFUklBTF9YSUxJTlhfUFNfVUFSVAorCXRyaXN0YXRlICJYaWxpbnggUFMgVUFSVCBzdXBwb3J0IgorCXNlbGVjdCBTRVJJQUxfQ09SRQorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBYaWxpbnggUFMgVUFSVCBwb3J0LgorCitjb25maWcgU0VSSUFMX1hJTElOWF9QU19VQVJUX0NPTlNPTEUKKwlib29sICJYaWxpbnggUFMgVUFSVCBjb25zb2xlIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBTRVJJQUxfWElMSU5YX1BTX1VBUlQ9eQorCXNlbGVjdCBTRVJJQUxfQ09SRV9DT05TT0xFCisJaGVscAorCSAgRW5hYmxlIGEgWGlsaW54IFBTIFVBUlQgcG9ydCB0byBiZSB0aGUgc3lzdGVtIGNvbnNvbGUuCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9NYWtlZmlsZSBiL2RyaXZlcnMvdHR5L3NlcmlhbC9NYWtlZmlsZQppbmRleCAzNTI3NjA0Li5jYjI2MjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvTWFrZWZpbGUKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL01ha2VmaWxlCkBAIC05NSwzICs5NSw0IEBACiBvYmotJChDT05GSUdfU0VSSUFMX01TTV9TTUQpCSs9IG1zbV9zbWRfdHR5Lm8KIG9iai0kKENPTkZJR19TRVJJQUxfTVhTX0FVQVJUKSArPSBteHMtYXVhcnQubwogb2JqLSQoQ09ORklHX1NFUklBTF9MQU5USVEpCSs9IGxhbnRpcS5vCitvYmotJChDT05GSUdfU0VSSUFMX1hJTElOWF9QU19VQVJUKSArPSB4aWxpbnhfdWFydHBzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9hbHRlcmFfdWFydC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL2FsdGVyYV91YXJ0LmMKaW5kZXggNmQ1YjAzNi4uNTBiYzVhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL2FsdGVyYV91YXJ0LmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL2FsdGVyYV91YXJ0LmMKQEAgLTU0MCwxMSArNTQwLDE0IEBACiAJaW50IGkgPSBwZGV2LT5pZDsKIAlpbnQgcmV0OwogCi0JLyogLTEgZW1waGFzaXplcyB0aGF0IHRoZSBwbGF0Zm9ybSBtdXN0IGhhdmUgb25lIHBvcnQsIG5vIC5OIHN1ZmZpeCAqLwotCWlmIChpID09IC0xKQotCQlpID0gMDsKKwkvKiBpZiBpZCBpcyAtMSBzY2FuIGZvciBhIGZyZWUgaWQgYW5kIHVzZSB0aGF0IG9uZSAqLworCWlmIChpID09IC0xKSB7CisJCWZvciAoaSA9IDA7IGkgPCBDT05GSUdfU0VSSUFMX0FMVEVSQV9VQVJUX01BWFBPUlRTOyBpKyspCisJCQlpZiAoYWx0ZXJhX3VhcnRfcG9ydHNbaV0ucG9ydC5tYXBiYXNlID09IDApCisJCQkJYnJlYWs7CisJfQogCi0JaWYgKGkgPj0gQ09ORklHX1NFUklBTF9BTFRFUkFfVUFSVF9NQVhQT1JUUykKKwlpZiAoaSA8IDAgfHwgaSA+PSBDT05GSUdfU0VSSUFMX0FMVEVSQV9VQVJUX01BWFBPUlRTKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXBvcnQgPSAmYWx0ZXJhX3VhcnRfcG9ydHNbaV0ucG9ydDsKQEAgLTU4Nyw2ICs1OTAsOCBAQAogCXBvcnQtPm9wcyA9ICZhbHRlcmFfdWFydF9vcHM7CiAJcG9ydC0+ZmxhZ3MgPSBVUEZfQk9PVF9BVVRPQ09ORjsKIAorCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBwb3J0KTsKKwogCXVhcnRfYWRkX29uZV9wb3J0KCZhbHRlcmFfdWFydF9kcml2ZXIsIHBvcnQpOwogCiAJcmV0dXJuIDA7CkBAIC01OTQsMTQgKzU5OSwxMyBAQAogCiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBhbHRlcmFfdWFydF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0OwotCWludCBpID0gcGRldi0+aWQ7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKIAotCWlmIChpID09IC0xKQotCQlpID0gMDsKLQotCXBvcnQgPSAmYWx0ZXJhX3VhcnRfcG9ydHNbaV0ucG9ydDsKLQl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmYWx0ZXJhX3VhcnRfZHJpdmVyLCBwb3J0KTsKKwlpZiAocG9ydCkgeworCQl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmYWx0ZXJhX3VhcnRfZHJpdmVyLCBwb3J0KTsKKwkJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIE5VTEwpOworCQlwb3J0LT5tYXBiYXNlID0gMDsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9hbWJhLXBsMDEwLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvYW1iYS1wbDAxMC5jCmluZGV4IGQ3NDJkZDIuLmMwZDEwYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9hbWJhLXBsMDEwLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL2FtYmEtcGwwMTAuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAgbGludXgvZHJpdmVycy9jaGFyL2FtYmEuYwotICoKICAqICBEcml2ZXIgZm9yIEFNQkEgc2VyaWFsIHBvcnRzCiAgKgogICogIEJhc2VkIG9uIGRyaXZlcnMvY2hhci9zZXJpYWwuYywgYnkgTGludXMgVG9ydmFsZHMsIFRoZW9kb3JlIFRzJ28uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvYW1iYS1wbDAxMS5jIGIvZHJpdmVycy90dHkvc2VyaWFsL2FtYmEtcGwwMTEuYwppbmRleCA2ZGVlZTRlLi44ZGMwNTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvYW1iYS1wbDAxMS5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9hbWJhLXBsMDExLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogIGxpbnV4L2RyaXZlcnMvY2hhci9hbWJhLmMKLSAqCiAgKiAgRHJpdmVyIGZvciBBTUJBIHNlcmlhbCBwb3J0cwogICoKICAqICBCYXNlZCBvbiBkcml2ZXJzL2NoYXIvc2VyaWFsLmMsIGJ5IExpbnVzIFRvcnZhbGRzLCBUaGVvZG9yZSBUcydvLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL2F0bWVsX3NlcmlhbC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL2F0bWVsX3NlcmlhbC5jCmluZGV4IGYxMTlkMTcuLjY1MmJkYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9hdG1lbF9zZXJpYWwuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogIGxpbnV4L2RyaXZlcnMvY2hhci9hdG1lbF9zZXJpYWwuYwotICoKICAqICBEcml2ZXIgZm9yIEF0bWVsIEFUOTEgLyBBVDMyIFNlcmlhbCBwb3J0cwogICogIENvcHlyaWdodCAoQykgMjAwMyBSaWNrIEJyb25zb24KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvYmZpbl9zcG9ydF91YXJ0LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvYmZpbl9zcG9ydF91YXJ0LmMKaW5kZXggYzNlYzBhNi4uODkxZDE5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL2JmaW5fc3BvcnRfdWFydC5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9iZmluX3Nwb3J0X3VhcnQuYwpAQCAtMjk2LDggKzI5Niw3IEBACiAJCQlJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcgfAogCQkJSVJRRl9ESVNBQkxFRCwgIkJGSU5fU1BPUlRfVUFSVF9DVFMiLCB1cCkpIHsKIAkJCXVwLT5jdHNfcGluID0gLTE7Ci0JCQlkZXZfaW5mbyhwb3J0LT5kZXYsICJVbmFibGUgdG8gYXR0YWNoIEJsYWNrRmluIFVBUlQgXAotCQkJCW92ZXIgU1BPUlQgQ1RTIGludGVycnVwdC4gU28sIGRpc2FibGUgaXQuXG4iKTsKKwkJCWRldl9pbmZvKHBvcnQtPmRldiwgIlVuYWJsZSB0byBhdHRhY2ggQmxhY2tGaW4gVUFSVCBvdmVyIFNQT1JUIENUUyBpbnRlcnJ1cHQuIFNvLCBkaXNhYmxlIGl0LlxuIik7CiAJCX0KIAl9CiAJaWYgKHVwLT5ydHNfcGluID49IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvY2xwczcxMXguYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9jbHBzNzExeC5jCmluZGV4IGI2YWNkMTkuLmU2YzNkYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9jbHBzNzExeC5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9jbHBzNzExeC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICBsaW51eC9kcml2ZXJzL2NoYXIvY2xwczcxMXguYwotICoKICAqICBEcml2ZXIgZm9yIENMUFM3MTF4IHNlcmlhbCBwb3J0cwogICoKICAqICBCYXNlZCBvbiBkcml2ZXJzL2NoYXIvc2VyaWFsLmMsIGJ5IExpbnVzIFRvcnZhbGRzLCBUaGVvZG9yZSBUcydvLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0LmggYi9kcml2ZXJzL3R0eS9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnQuaAppbmRleCBiNzU0ZGNmLi5jZjM0ZDI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnQuaAorKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnQuaApAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAgbGludXgvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQuaAotICoKICAqICBEcml2ZXIgZm9yIENQTSAoU0NDL1NNQykgc2VyaWFsIHBvcnRzCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMKaW5kZXggYTlhNmE1Zi4uOTQ4OGRhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY29yZS5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICBsaW51eC9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC5jCi0gKgogICogIERyaXZlciBmb3IgQ1BNIChTQ0MvU01DKSBzZXJpYWwgcG9ydHM7IGNvcmUgZHJpdmVyCiAgKgogICogIEJhc2VkIG9uIGFyY2gvcHBjL2NwbTJfaW8vdWFydC5jIGJ5IERhbiBNYWxlawpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTEuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0xLmMKaW5kZXggM2ZjMWQ2Ni4uMThmNzk1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTEuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMS5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICBsaW51eC9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC5jCi0gKgogICogIERyaXZlciBmb3IgQ1BNIChTQ0MvU01DKSBzZXJpYWwgcG9ydHM7IENQTTEgZGVmaW5pdGlvbnMKICAqCiAgKiAgTWFpbnRhaW5lcjogS3VtYXIgR2FsYSAoZ2FsYWtAa2VybmVsLmNyYXNoaW5nLm9yZykgKENQTTIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMS5oIGIvZHJpdmVycy90dHkvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTEuaAppbmRleCAxMGVlY2Q2Li42MGM3ZTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMS5oCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0xLmgKQEAgLTEsNiArMSw0IEBACiAvKgotICogbGludXgvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMS5oCi0gKgogICogRHJpdmVyIGZvciBDUE0gKFNDQy9TTUMpIHNlcmlhbCBwb3J0cwogICoKICAqIGRlZmluaXRpb25zIGZvciBjcG0xCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMi5jIGIvZHJpdmVycy90dHkvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTIuYwppbmRleCA4MTRhYzAwLi5hNDkyN2U2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMi5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0yLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogIGxpbnV4L2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0X2NwbTIuYwotICoKICAqICBEcml2ZXIgZm9yIENQTSAoU0NDL1NNQykgc2VyaWFsIHBvcnRzOyBDUE0yIGRlZmluaXRpb25zCiAgKgogICogIE1haW50YWluZXI6IEt1bWFyIEdhbGEgKGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmcpIChDUE0yKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTIuaCBiL2RyaXZlcnMvdHR5L3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0yLmgKaW5kZXggNzE5NGM2My4uNTFlNjUxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTIuaAorKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMi5oCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGxpbnV4L2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTIuaAotICoKICAqIERyaXZlciBmb3IgQ1BNIChTQ0MvU01DKSBzZXJpYWwgcG9ydHMKICAqCiAgKiBkZWZpbml0aW9ucyBmb3IgY3BtMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL2lmeDZ4NjAuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9pZng2eDYwLmMKaW5kZXggOGVlNWE0MS4uNTMxNTUyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL2lmeDZ4NjAuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvaWZ4Nng2MC5jCkBAIC00MSw3ICs0MSw2IEBACiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgpAQCAtNTYsNyArNTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLSNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvaWZ4X21vZGVtLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvaW14LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvaW14LmMKaW5kZXggNjJkZjcyZC4uYTU0NDczMSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL2lteC5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9pbXguYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAgbGludXgvZHJpdmVycy9zZXJpYWwvaW14LmMKLSAqCiAgKiAgRHJpdmVyIGZvciBNb3Rvcm9sYSBJTVggc2VyaWFsIHBvcnRzCiAgKgogICogIEJhc2VkIG9uIGRyaXZlcnMvY2hhci9zZXJpYWwuYywgYnkgTGludXMgVG9ydmFsZHMsIFRoZW9kb3JlIFRzJ28uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvbWZkLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvbWZkLmMKaW5kZXggYzExMWYzNi4uY2FiNTJmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL21mZC5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tZmQuYwpAQCAtNDksOCArNDksOCBAQAogCiBzdGF0aWMgaW50IGhzdV9kbWFfZW5hYmxlOwogbW9kdWxlX3BhcmFtKGhzdV9kbWFfZW5hYmxlLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhoc3VfZG1hX2VuYWJsZSwgIkl0IGlzIGEgYml0bWFwIHRvIHNldCB3b3JraW5nIG1vZGUsIGlmIFwKLWJpdFt4XSBpcyAxLCB0aGVuIHBvcnRbeF0gd2lsbCB3b3JrIGluIERNQSBtb2RlLCBvdGhlcndpc2UgaW4gUElPIG1vZGUuIik7CitNT0RVTEVfUEFSTV9ERVNDKGhzdV9kbWFfZW5hYmxlLAorCQkgIkl0IGlzIGEgYml0bWFwIHRvIHNldCB3b3JraW5nIG1vZGUsIGlmIGJpdFt4XSBpcyAxLCB0aGVuIHBvcnRbeF0gd2lsbCB3b3JrIGluIERNQSBtb2RlLCBvdGhlcndpc2UgaW4gUElPIG1vZGUuIik7CiAKIHN0cnVjdCBoc3VfZG1hX2J1ZmZlciB7CiAJdTgJCSpidWY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvbXJzdF9tYXgzMTEwLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvbXJzdF9tYXgzMTEwLmMKaW5kZXggMmY1NDhhZi4uMWJkMjg0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL21yc3RfbWF4MzExMC5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tcnN0X21heDMxMTAuYwpAQCAtNTYsNyArNTYsNyBAQAogCXdhaXRfcXVldWVfaGVhZF90IHdxOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqbWFpbl90aHJlYWQ7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpyZWFkX3RocmVhZDsKLQlzdHJ1Y3QgbXV0ZXggdGhyZWFkX211dGV4OzsKKwlzdHJ1Y3QgbXV0ZXggdGhyZWFkX211dGV4OwogCiAJdTMyIGJhdWQ7CiAJdTE2IGN1cl9jb25mOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL21zbV9zZXJpYWwuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tc21fc2VyaWFsLmMKaW5kZXggYmZlZTliNC4uZTZiYTgzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL21zbV9zZXJpYWwuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvbXNtX3NlcmlhbC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGRyaXZlcnMvc2VyaWFsL21zbV9zZXJpYWwuYyAtIGRyaXZlciBmb3IgbXNtN2sgc2VyaWFsIGRldmljZSBhbmQgY29uc29sZQorICogRHJpdmVyIGZvciBtc203ayBzZXJpYWwgZGV2aWNlIGFuZCBjb25zb2xlCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA3IEdvb2dsZSwgSW5jLgogICogQXV0aG9yOiBSb2JlcnQgTG92ZSA8cmxvdmVAZ29vZ2xlLmNvbT4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9tc21fc2VyaWFsLmggYi9kcml2ZXJzL3R0eS9zZXJpYWwvbXNtX3NlcmlhbC5oCmluZGV4IDliOGRjNWQuLmU0YWNlZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9tc21fc2VyaWFsLmgKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL21zbV9zZXJpYWwuaApAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBkcml2ZXJzL3NlcmlhbC9tc21fc2VyaWFsLmgKLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgR29vZ2xlLCBJbmMuCiAgKiBBdXRob3I6IFJvYmVydCBMb3ZlIDxybG92ZUBnb29nbGUuY29tPgogICogQ29weXJpZ2h0IChjKSAyMDExLCBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9tc21fc21kX3R0eS5jIGIvZHJpdmVycy90dHkvc2VyaWFsL21zbV9zbWRfdHR5LmMKaW5kZXggYmVlZmYxZS4uNGY0MWRjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL21zbV9zbWRfdHR5LmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL21zbV9zbWRfdHR5LmMKQEAgLTEsNSArMSw0IEBACi0vKiBkcml2ZXJzL3R0eS9zZXJpYWwvbXNtX3NtZF90dHkuYwotICoKKy8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgR29vZ2xlLCBJbmMuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQXV0aG9yOiBCcmlhbiBTd2V0bGFuZCA8c3dldGxhbmRAZ29vZ2xlLmNvbT4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9uZXR4LXNlcmlhbC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL25ldHgtc2VyaWFsLmMKaW5kZXggNzczNWM5Zi4uZDQwZGE3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL25ldHgtc2VyaWFsLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL25ldHgtc2VyaWFsLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogZHJpdmVycy9zZXJpYWwvbmV0eC1zZXJpYWwuYwotICoKICAqIENvcHlyaWdodCAoYykgMjAwNSBTYXNjaGEgSGF1ZXIgPHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU+LCBQZW5ndXRyb25peAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvcGNoX3VhcnQuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9wY2hfdWFydC5jCmluZGV4IDI2NDAzYjguLmM2M2QwZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9wY2hfdWFydC5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9wY2hfdWFydC5jCkBAIC0yNTMsNiArMjUzLDggQEAKIAlwY2hfbWw3MjEzX3VhcnQwLAogCXBjaF9tbDcyMTNfdWFydDEsCiAJcGNoX21sNzIxM191YXJ0MiwKKwlwY2hfbWw3MjIzX3VhcnQwLAorCXBjaF9tbDcyMjNfdWFydDEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBjaF91YXJ0X2RyaXZlcl9kYXRhIGRydl9kYXRbXSA9IHsKQEAgLTI2Myw2ICsyNjUsOCBAQAogCVtwY2hfbWw3MjEzX3VhcnQwXSA9IHtQQ0hfVUFSVF84TElORSwgMH0sCiAJW3BjaF9tbDcyMTNfdWFydDFdID0ge1BDSF9VQVJUXzJMSU5FLCAxfSwKIAlbcGNoX21sNzIxM191YXJ0Ml0gPSB7UENIX1VBUlRfMkxJTkUsIDJ9LAorCVtwY2hfbWw3MjIzX3VhcnQwXSA9IHtQQ0hfVUFSVF84TElORSwgMH0sCisJW3BjaF9tbDcyMjNfdWFydDFdID0ge1BDSF9VQVJUXzJMSU5FLCAxfSwKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVmYXVsdF9iYXVkID0gOTYwMDsKQEAgLTE1MzQsNiArMTUzOCwxMCBAQAogCSAuZHJpdmVyX2RhdGEgPSBwY2hfbWw3MjEzX3VhcnQxfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JPSE0sIDB4ODAyOSksCiAJIC5kcml2ZXJfZGF0YSA9IHBjaF9tbDcyMTNfdWFydDJ9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUk9ITSwgMHg4MDBDKSwKKwkgLmRyaXZlcl9kYXRhID0gcGNoX21sNzIyM191YXJ0MH0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9ST0hNLCAweDgwMEQpLAorCSAuZHJpdmVyX2RhdGEgPSBwY2hfbWw3MjIzX3VhcnQxfSwKIAl7MCx9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL3BtYWNfemlsb2cuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9wbWFjX3ppbG9nLmMKaW5kZXggZTFjOGQ0Zi4uNWFjZDI0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL3BtYWNfemlsb2cuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvcG1hY196aWxvZy5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGxpbnV4L2RyaXZlcnMvc2VyaWFsL3BtYWNfemlsb2cuYwotICogCiAgKiBEcml2ZXIgZm9yIFBvd2VyTWFjIFo4NWMzMCBiYXNlZCBFU0NDIGNlbGwgZm91bmQgaW4gdGhlCiAgKiAibWFjaW8iIEFTSUNzIG9mIHZhcmlvdXMgUG93ZXJNYWMgbW9kZWxzCiAgKiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9weGEuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9weGEuYwppbmRleCAxMTAyYTM5Li40MzAyZTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvcHhhLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL3B4YS5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICBsaW51eC9kcml2ZXJzL3NlcmlhbC9weGEuYwotICoKICAqICBCYXNlZCBvbiBkcml2ZXJzL3NlcmlhbC84MjUwLmMgYnkgUnVzc2VsbCBLaW5nLgogICoKICAqICBBdXRob3I6CU5pY29sYXMgUGl0cmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zM2MyNDAwLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvczNjMjQwMC5jCmluZGV4IGZlZDFhOWEuLmQxMzA1MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zM2MyNDAwLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL3MzYzI0MDAuYwpAQCAtMSw1ICsxLDQgQEAKLS8qIGxpbnV4L2RyaXZlcnMvc2VyaWFsL3MzYzI0MC5jCi0gKgorLyoKICAqIERyaXZlciBmb3IgU2Ftc3VuZyBTb0Mgb25ib2FyZCBVQVJUcy4KICAqCiAgKiBCZW4gRG9va3MsIENvcHlyaWdodCAoYykgMjAwMy0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL3MzYzI0MTAuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zM2MyNDEwLmMKaW5kZXggNzNmMDg5ZC4uYmZmZTZmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL3MzYzI0MTAuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvczNjMjQxMC5jCkBAIC0xLDUgKzEsNCBAQAotLyogbGludXgvZHJpdmVycy9zZXJpYWwvczNjMjQxMC5jCi0gKgorLyoKICAqIERyaXZlciBmb3IgU2Ftc3VuZyBTM0MyNDEwIFNvQyBvbmJvYXJkIFVBUlRzLgogICoKICAqIEJlbiBEb29rcywgQ29weXJpZ2h0IChjKSAyMDAzLTIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvczNjMjQxMi5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3MzYzI0MTIuYwppbmRleCAxNzAwYjFhLi43ZTJiOTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvczNjMjQxMi5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zM2MyNDEyLmMKQEAgLTEsNSArMSw0IEBACi0vKiBsaW51eC9kcml2ZXJzL3NlcmlhbC9zM2MyNDEyLmMKLSAqCisvKgogICogRHJpdmVyIGZvciBTYW1zdW5nIFMzQzI0MTIgYW5kIFMzQzI0MTMgU29DIG9uYm9hcmQgVUFSVHMuCiAgKgogICogQmVuIERvb2tzLCBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zM2MyNDQwLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvczNjMjQ0MC5jCmluZGV4IDA5NGNjMzkuLjllMTBkNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zM2MyNDQwLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL3MzYzI0NDAuYwpAQCAtMSw1ICsxLDQgQEAKLS8qIGxpbnV4L2RyaXZlcnMvc2VyaWFsL3MzYzI0NDAuYwotICoKKy8qCiAgKiBEcml2ZXIgZm9yIFNhbXN1bmcgUzNDMjQ0MCBhbmQgUzNDMjQ0MiBTb0Mgb25ib2FyZCBVQVJUcy4KICAqCiAgKiBCZW4gRG9va3MsIENvcHlyaWdodCAoYykgMjAwMy0yMDA4IFNpbXRlYyBFbGVjdHJvbmljcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL3MzYzI0YTAuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zM2MyNGEwLmMKaW5kZXggZmFkNjA4My4uOTE0ZWZmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL3MzYzI0YTAuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvczNjMjRhMC5jCkBAIC0xLDUgKzEsNCBAQAotLyogbGludXgvZHJpdmVycy9zZXJpYWwvczNjMjRhMC5jCi0gKgorLyoKICAqIERyaXZlciBmb3IgU2Ftc3VuZyBTM0MyNEEwIFNvQyBvbmJvYXJkIFVBUlRzLgogICoKICAqIEJhc2VkIG9uIGRyaXZlcnMvc2VyaWFsL3MzYzI0MTAuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL3MzYzY0MDAuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zM2M2NDAwLmMKaW5kZXggNGJlOTJhYi4uZGVkMjZjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL3MzYzY0MDAuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvczNjNjQwMC5jCkBAIC0xLDUgKzEsNCBAQAotLyogbGludXgvZHJpdmVycy9zZXJpYWwvczNjNjQwMC5jCi0gKgorLyoKICAqIERyaXZlciBmb3IgU2Ftc3VuZyBTM0M2NDAwIGFuZCBTM0M2NDEwIFNvQyBvbmJvYXJkIFVBUlRzLgogICoKICAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCAgSW5jLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL3M1cHYyMTAuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zNXB2MjEwLmMKaW5kZXggNmViY2NkNy4uZmIyNjE5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL3M1cHYyMTAuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvczVwdjIxMC5jCkBAIC0xLDUgKzEsNCBAQAotLyogbGludXgvZHJpdmVycy9zZXJpYWwvczVwdjIxMC5jCi0gKgorLyoKICAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgogICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL3NhMTEwMC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3NhMTEwMC5jCmluZGV4IDIxOTlkODEuLmVmN2EyMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zYTExMDAuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2ExMTAwLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogIGxpbnV4L2RyaXZlcnMvY2hhci9zYTExMDAuYwotICoKICAqICBEcml2ZXIgZm9yIFNBMTF4MCBzZXJpYWwgcG9ydHMKICAqCiAgKiAgQmFzZWQgb24gZHJpdmVycy9jaGFyL3NlcmlhbC5jLCBieSBMaW51cyBUb3J2YWxkcywgVGhlb2RvcmUgVHMnby4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zYW1zdW5nLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2Ftc3VuZy5jCmluZGV4IDllMmZhOGQuLmY2NmY2NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zYW1zdW5nLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL3NhbXN1bmcuYwpAQCAtMSw1ICsxLDQgQEAKLS8qIGxpbnV4L2RyaXZlcnMvc2VyaWFsL3NhbXN1aW5nLmMKLSAqCisvKgogICogRHJpdmVyIGNvcmUgZm9yIFNhbXN1bmcgU29DIG9uYm9hcmQgVUFSVHMuCiAgKgogICogQmVuIERvb2tzLCBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zYW1zdW5nLmggYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2Ftc3VuZy5oCmluZGV4IDBhYzA2YTAuLjViMDk4Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zYW1zdW5nLmgKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL3NhbXN1bmcuaApAQCAtMSw1ICsxLDQgQEAKLS8qIGxpbnV4L2RyaXZlcnMvc2VyaWFsL3NhbXN1bmcuaAotICoKKy8qCiAgKiBEcml2ZXIgZm9yIFNhbXN1bmcgU29DIG9uYm9hcmQgVUFSVHMuCiAgKgogICogQmVuIERvb2tzLCBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zYjEyNTAtZHVhcnQuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zYjEyNTAtZHVhcnQuYwppbmRleCA2MDJkOTg0Li5lYTIzNDBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvc2IxMjUwLWR1YXJ0LmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL3NiMTI1MC1kdWFydC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqCWRyaXZlcnMvc2VyaWFsL3NiMTI1MC1kdWFydC5jCi0gKgogICoJU3VwcG9ydCBmb3IgdGhlIGFzeW5jaHJvbm91cyBzZXJpYWwgaW50ZXJmYWNlIChEVUFSVCkgaW5jbHVkZWQKICAqCWluIHRoZSBCQ00xMjUwIGFuZCBkZXJpdmVkIFN5c3RlbS1Pbi1hLUNoaXAgKFNPQykgZGV2aWNlcy4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvc2VyaWFsX2NvcmUuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zZXJpYWxfY29yZS5jCmluZGV4IDczM2ZlOGUuLmRiNzkxMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zZXJpYWxfY29yZS5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zZXJpYWxfY29yZS5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICBsaW51eC9kcml2ZXJzL2NoYXIvY29yZS5jCi0gKgogICogIERyaXZlciBjb3JlIGZvciBzZXJpYWwgcG9ydHMKICAqCiAgKiAgQmFzZWQgb24gZHJpdmVycy9jaGFyL3NlcmlhbC5jLCBieSBMaW51cyBUb3J2YWxkcywgVGhlb2RvcmUgVHMnby4KQEAgLTE3MiwxMiArMTcwLDE2IEBACiAKIAlyZXR2YWwgPSB1cG9ydC0+b3BzLT5zdGFydHVwKHVwb3J0KTsKIAlpZiAocmV0dmFsID09IDApIHsKLQkJaWYgKGluaXRfaHcpIHsKLQkJCS8qCi0JCQkgKiBJbml0aWFsaXNlIHRoZSBoYXJkd2FyZSBwb3J0IHNldHRpbmdzLgotCQkJICovCi0JCQl1YXJ0X2NoYW5nZV9zcGVlZCh0dHksIHN0YXRlLCBOVUxMKTsKKwkJaWYgKHVhcnRfY29uc29sZSh1cG9ydCkgJiYgdXBvcnQtPmNvbnMtPmNmbGFnKSB7CisJCQl0dHktPnRlcm1pb3MtPmNfY2ZsYWcgPSB1cG9ydC0+Y29ucy0+Y2ZsYWc7CisJCQl1cG9ydC0+Y29ucy0+Y2ZsYWcgPSAwOworCQl9CisJCS8qCisJCSAqIEluaXRpYWxpc2UgdGhlIGhhcmR3YXJlIHBvcnQgc2V0dGluZ3MuCisJCSAqLworCQl1YXJ0X2NoYW5nZV9zcGVlZCh0dHksIHN0YXRlLCBOVUxMKTsKIAorCQlpZiAoaW5pdF9odykgewogCQkJLyoKIAkJCSAqIFNldHVwIHRoZSBSVFMgYW5kIERUUiBzaWduYWxzIG9uY2UgdGhlCiAJCQkgKiBwb3J0IGlzIG9wZW4gYW5kIHJlYWR5IHRvIHJlc3BvbmQuCkBAIC0xMjQwLDE3ICsxMjQyLDYgQEAKIAkJfQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGF0ZS0+dWFydF9wb3J0LT5sb2NrLCBmbGFncyk7CiAJfQotI2lmIDAKLQkvKgotCSAqIE5vIG5lZWQgdG8gd2FrZSB1cCBwcm9jZXNzZXMgaW4gb3BlbiB3YWl0LCBzaW5jZSB0aGV5Ci0JICogc2FtcGxlIHRoZSBDTE9DQUwgZmxhZyBvbmNlLCBhbmQgZG9uJ3QgcmVjaGVjayBpdC4KLQkgKiBYWFggIEl0J3Mgbm90IGNsZWFyIHdoZXRoZXIgdGhlIGN1cnJlbnQgYmVoYXZpb3IgaXMgY29ycmVjdAotCSAqIG9yIG5vdC4gIEhlbmNlLCB0aGlzIG1heSBjaGFuZ2UuLi4uLgotCSAqLwotCWlmICghKG9sZF90ZXJtaW9zLT5jX2NmbGFnICYgQ0xPQ0FMKSAmJgotCSAgICAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0xPQ0FMKSkKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzdGF0ZS0+dWFydF9wb3J0Lm9wZW5fd2FpdCk7Ci0jZW5kaWYKIH0KIAogLyoKQEAgLTE0MjMsNyArMTQxNCw2IEBACiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGV4cGlyZSkpCiAJCQlicmVhazsKIAl9Ci0Jc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsgLyogbWlnaHQgbm90IGJlIG5lZWRlZCAqLwogfQogCiBzdGF0aWMgdm9pZCB1YXJ0X3dhaXRfdW50aWxfc2VudChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgdGltZW91dCkKQEAgLTE0NjYsNDUgKzE0NTYsNiBAQAogCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOwogfQogCi0vKioKLSAqCXVhcnRfdXBkYXRlX3Rlcm1pb3MJLQl1cGRhdGUgdGhlIHRlcm1pbmFsIGh3IHNldHRpbmdzCi0gKglAdHR5OiB0dHkgYXNzb2NpYXRlZCB3aXRoIFVBUlQKLSAqCUBzdGF0ZTogVUFSVCB0byB1cGRhdGUKLSAqCi0gKglDb3B5IGFjcm9zcyB0aGUgc2VyaWFsIGNvbnNvbGUgY2ZsYWcgc2V0dGluZyBpbnRvIHRoZSB0ZXJtaW9zIHNldHRpbmdzCi0gKglmb3IgdGhlIGluaXRpYWwgb3BlbiBvZiB0aGUgcG9ydC4gIFRoaXMgYWxsb3dzIGNvbnRpbnVpdHkgYmV0d2VlbiB0aGUKLSAqCWtlcm5lbCBzZXR0aW5ncywgYW5kIHRoZSBzZXR0aW5ncyBpbml0IGFkb3B0cyB3aGVuIGl0IG9wZW5zIHRoZSBwb3J0Ci0gKglmb3IgdGhlIGZpcnN0IHRpbWUuCi0gKi8KLXN0YXRpYyB2b2lkIHVhcnRfdXBkYXRlX3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJCQkJCXN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSkKLXsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKLQotCWlmICh1YXJ0X2NvbnNvbGUocG9ydCkgJiYgcG9ydC0+Y29ucy0+Y2ZsYWcpIHsKLQkJdHR5LT50ZXJtaW9zLT5jX2NmbGFnID0gcG9ydC0+Y29ucy0+Y2ZsYWc7Ci0JCXBvcnQtPmNvbnMtPmNmbGFnID0gMDsKLQl9Ci0KLQkvKgotCSAqIElmIHRoZSBkZXZpY2UgZmFpbGVkIHRvIGdyYWIgaXRzIGlycSByZXNvdXJjZXMsCi0JICogb3Igc29tZSBvdGhlciBlcnJvciBvY2N1cnJlZCwgZG9uJ3QgdHJ5IHRvIHRhbGsKLQkgKiB0byB0aGUgcG9ydCBoYXJkd2FyZS4KLQkgKi8KLQlpZiAoISh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0lPX0VSUk9SKSkpIHsKLQkJLyoKLQkJICogTWFrZSB0ZXJtaW9zIHNldHRpbmdzIHRha2UgZWZmZWN0LgotCQkgKi8KLQkJdWFydF9jaGFuZ2Vfc3BlZWQodHR5LCBzdGF0ZSwgTlVMTCk7Ci0KLQkJLyoKLQkJICogQW5kIGZpbmFsbHkgZW5hYmxlIHRoZSBSVFMgYW5kIERUUiBzaWduYWxzLgotCQkgKi8KLQkJaWYgKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENCQVVEKQotCQkJdWFydF9zZXRfbWN0cmwocG9ydCwgVElPQ01fRFRSIHwgVElPQ01fUlRTKTsKLQl9Ci19Ci0KIHN0YXRpYyBpbnQgdWFydF9jYXJyaWVyX3JhaXNlZChzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCB1YXJ0X3N0YXRlLCBwb3J0KTsKQEAgLTE1MjQsMTYgKzE0NzUsOCBAQAogCXN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSA9IGNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgdWFydF9zdGF0ZSwgcG9ydCk7CiAJc3RydWN0IHVhcnRfcG9ydCAqdXBvcnQgPSBzdGF0ZS0+dWFydF9wb3J0OwogCi0JaWYgKG9ub2ZmKSB7CisJaWYgKG9ub2ZmKQogCQl1YXJ0X3NldF9tY3RybCh1cG9ydCwgVElPQ01fRFRSIHwgVElPQ01fUlRTKTsKLQotCQkvKgotCQkgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBvcGVuIHRvIHN1Y2NlZWQsCi0JCSAqIGFkanVzdCB0aGluZ3MgdG8gc3VpdC4KLQkJICovCi0JCWlmICghdGVzdF9hbmRfc2V0X2JpdChBU1lOQ0JfTk9STUFMX0FDVElWRSwgJnBvcnQtPmZsYWdzKSkKLQkJCXVhcnRfdXBkYXRlX3Rlcm1pb3MocG9ydC0+dHR5LCBzdGF0ZSk7Ci0JfQogCWVsc2UKIAkJdWFydF9jbGVhcl9tY3RybCh1cG9ydCwgVElPQ01fRFRSIHwgVElPQ01fUlRTKTsKIH0KQEAgLTE1ODYsMTUgKzE1MjksNiBAQAogCXByX2RlYnVnKCJ1YXJ0X29wZW4oJWQpIGNhbGxlZFxuIiwgbGluZSk7CiAKIAkvKgotCSAqIHR0eS0+ZHJpdmVyLT5udW0gd29uJ3QgY2hhbmdlLCBzbyB3ZSB3b24ndCBmYWlsIGhlcmUgd2l0aAotCSAqIHR0eS0+ZHJpdmVyX2RhdGEgc2V0IHRvIHNvbWV0aGluZyBub24tTlVMTCAoYW5kIHRoZXJlZm9yZQotCSAqIHdlIHdvbid0IGdldCBjYXVnaHQgYnkgdWFydF9jbG9zZSgpKS4KLQkgKi8KLQlyZXR2YWwgPSAtRU5PREVWOwotCWlmIChsaW5lID49IHR0eS0+ZHJpdmVyLT5udW0pCi0JCWdvdG8gZmFpbDsKLQotCS8qCiAJICogV2UgdGFrZSB0aGUgc2VtYXBob3JlIGluc2lkZSB1YXJ0X2dldCB0byBndWFyYW50ZWUgdGhhdCB3ZSB3b24ndAogCSAqIGJlIHJlLWVudGVyZWQgd2hpbGUgYWxsb2NhdGluZyB0aGUgc3RhdGUgc3RydWN0dXJlLCBvciB3aGlsZSB3ZQogCSAqIHJlcXVlc3QgYW55IElSUXMgdGhhdCB0aGUgZHJpdmVyIG1heSBuZWVkLiAgVGhpcyBhbHNvIGhhcyB0aGUgbmljZQpAQCAtMTk3MiwxMyArMTkwNiw5IEBACiAJc3RydWN0IHR0eV9wb3J0ICpwb3J0ID0gJnN0YXRlLT5wb3J0OwogCXN0cnVjdCBkZXZpY2UgKnR0eV9kZXY7CiAJc3RydWN0IHVhcnRfbWF0Y2ggbWF0Y2ggPSB7dXBvcnQsIGRydn07Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAogCW11dGV4X2xvY2soJnBvcnQtPm11dGV4KTsKIAotCS8qIE11c3QgYmUgaW5zaWRlIHRoZSBtdXRleCBsb2NrIHVudGlsIHdlIGNvbnZlcnQgdG8gdHR5X3BvcnQgKi8KLQl0dHkgPSBwb3J0LT50dHk7Ci0KIAl0dHlfZGV2ID0gZGV2aWNlX2ZpbmRfY2hpbGQodXBvcnQtPmRldiwgJm1hdGNoLCBzZXJpYWxfbWF0Y2hfcG9ydCk7CiAJaWYgKGRldmljZV9tYXlfd2FrZXVwKHR0eV9kZXYpKSB7CiAJCWlmICghZW5hYmxlX2lycV93YWtlKHVwb3J0LT5pcnEpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL3NlcmlhbF9rczg2OTUuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zZXJpYWxfa3M4Njk1LmMKaW5kZXggYjE5NjIwMi4uMjQzMDMxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL3NlcmlhbF9rczg2OTUuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2VyaWFsX2tzODY5NS5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICBkcml2ZXJzL3NlcmlhbC9zZXJpYWxfa3M4Njk1LmMKLSAqCiAgKiAgRHJpdmVyIGZvciBLUzg2OTUgc2VyaWFsIHBvcnRzCiAgKgogICogIEJhc2VkIG9uIGRyaXZlcnMvc2VyaWFsL3NlcmlhbF9hbWJhLmMsIGJ5IEthbSBMZWUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvc2VyaWFsX3R4eDkuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zZXJpYWxfdHh4OS5jCmluZGV4IGM1MGU5ZmIuLjhlM2ZjMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zZXJpYWxfdHh4OS5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zZXJpYWxfdHh4OS5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICBkcml2ZXJzL3NlcmlhbC9zZXJpYWxfdHh4OS5jCi0gKgogICogRGVyaXZlZCBmcm9tIG1hbnkgZHJpdmVycyB1c2luZyBnZW5lcmljX3NlcmlhbCBpbnRlcmZhY2UsCiAgKiBlc3BlY2lhbGx5IHNlcmlhbF90eDM5MTIuYyBieSBTdGV2ZW4gSi4gSGlsbCBhbmQgcjM5eHhfc2VyaWFsLmMKICAqICh3YXMgaW4gTGludXgvVlIgdHJlZSkgYnkgSmltIFBpY2suCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvc2gtc2NpLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2gtc2NpLmMKaW5kZXggOTIwYTZmOS4uZjM1YjhmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL3NoLXNjaS5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zaC1zY2kuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBkcml2ZXJzL3NlcmlhbC9zaC1zY2kuYwotICoKICAqIFN1cGVySCBvbi1jaGlwIHNlcmlhbCBtb2R1bGUgc3VwcG9ydC4gIChTQ0kgd2l0aCBubyBGSUZPIC8gd2l0aCBGSUZPKQogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDIgLSAyMDExICBQYXVsIE11bmR0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvdnQ4NTAwX3NlcmlhbC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3Z0ODUwMF9zZXJpYWwuYwppbmRleCAzMjJiZjU2Li4zN2ZjNGUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvdnQ4NTAwX3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC92dDg1MDBfc2VyaWFsLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogZHJpdmVycy9zZXJpYWwvdnQ4NTAwX3NlcmlhbC5jCi0gKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEFsZXhleSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNvbT4KICAqCiAgKiBCYXNlZCBvbiBtc21fc2VyaWFsLmMsIHdoaWNoIGlzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL3hpbGlueF91YXJ0cHMuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC94aWxpbnhfdWFydHBzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTljYzFlOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC94aWxpbnhfdWFydHBzLmMKQEAgLTAsMCArMSwxMTEzIEBACisvKgorICogWGlsaW54IFBTIFVBUlQgZHJpdmVyCisgKgorICogMjAxMSAoYykgWGlsaW54IEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQKKyAqIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKworI2RlZmluZSBYVUFSVFBTX1RUWV9OQU1FCSJ0dHlQUyIKKyNkZWZpbmUgWFVBUlRQU19OQU1FCQkieHVhcnRwcyIKKyNkZWZpbmUgWFVBUlRQU19NQUpPUgkJMAkvKiB1c2UgZHluYW1pYyBub2RlIGFsbG9jYXRpb24gKi8KKyNkZWZpbmUgWFVBUlRQU19NSU5PUgkJMAkvKiB3b3JrcyBiZXN0IHdpdGggZGV2dG1wZnMgKi8KKyNkZWZpbmUgWFVBUlRQU19OUl9QT1JUUwkyCisjZGVmaW5lIFhVQVJUUFNfRklGT19TSVpFCTE2CS8qIEZJRk8gc2l6ZSAqLworI2RlZmluZSBYVUFSVFBTX1JFR0lTVEVSX1NQQUNFCTB4RkZGCisKKyNkZWZpbmUgeHVhcnRwc19yZWFkbChvZmZzZXQpCQlpb3JlYWQzMihwb3J0LT5tZW1iYXNlICsgb2Zmc2V0KQorI2RlZmluZSB4dWFydHBzX3dyaXRlbCh2YWwsIG9mZnNldCkJaW93cml0ZTMyKHZhbCwgcG9ydC0+bWVtYmFzZSArIG9mZnNldCkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqUmVnaXN0ZXIgTWFwKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogVUFSVAorICoKKyAqIFJlZ2lzdGVyIG9mZnNldHMgZm9yIHRoZSBVQVJULgorICoKKyAqLworI2RlZmluZSBYVUFSVFBTX0NSX09GRlNFVAkweDAwICAvKiBDb250cm9sIFJlZ2lzdGVyIFs4OjBdICovCisjZGVmaW5lIFhVQVJUUFNfTVJfT0ZGU0VUCTB4MDQgIC8qIE1vZGUgUmVnaXN0ZXIgWzEwOjBdICovCisjZGVmaW5lIFhVQVJUUFNfSUVSX09GRlNFVAkweDA4ICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFsxMDowXSAqLworI2RlZmluZSBYVUFSVFBTX0lEUl9PRkZTRVQJMHgwQyAgLyogSW50ZXJydXB0IERpc2FibGUgWzEwOjBdICovCisjZGVmaW5lIFhVQVJUUFNfSU1SX09GRlNFVAkweDEwICAvKiBJbnRlcnJ1cHQgTWFzayBbMTA6MF0gKi8KKyNkZWZpbmUgWFVBUlRQU19JU1JfT0ZGU0VUCTB4MTQgIC8qIEludGVycnVwdCBTdGF0dXMgWzEwOjBdKi8KKyNkZWZpbmUgWFVBUlRQU19CQVVER0VOX09GRlNFVAkweDE4ICAvKiBCYXVkIFJhdGUgR2VuZXJhdG9yIFsxNTowXSAqLworI2RlZmluZSBYVUFSVFBTX1JYVE9VVF9PRkZTRVQJMHgxQyAgLyogUlggVGltZW91dCBbNzowXSAqLworI2RlZmluZSBYVUFSVFBTX1JYV01fT0ZGU0VUCTB4MjAgIC8qIFJYIEZJRk8gVHJpZ2dlciBMZXZlbCBbNTowXSAqLworI2RlZmluZSBYVUFSVFBTX01PREVNQ1JfT0ZGU0VUCTB4MjQgIC8qIE1vZGVtIENvbnRyb2wgWzU6MF0gKi8KKyNkZWZpbmUgWFVBUlRQU19NT0RFTVNSX09GRlNFVAkweDI4ICAvKiBNb2RlbSBTdGF0dXMgWzg6MF0gKi8KKyNkZWZpbmUgWFVBUlRQU19TUl9PRkZTRVQJMHgyQyAgLyogQ2hhbm5lbCBTdGF0dXMgWzExOjBdICovCisjZGVmaW5lIFhVQVJUUFNfRklGT19PRkZTRVQJMHgzMCAgLyogRklGTyBbMTU6MF0gb3IgWzc6MF0gKi8KKyNkZWZpbmUgWFVBUlRQU19CQVVERElWX09GRlNFVAkweDM0ICAvKiBCYXVkIFJhdGUgRGl2aWRlciBbNzowXSAqLworI2RlZmluZSBYVUFSVFBTX0ZMT1dERUxfT0ZGU0VUCTB4MzggIC8qIEZsb3cgRGVsYXkgWzE1OjBdICovCisjZGVmaW5lIFhVQVJUUFNfSVJSWF9QV0lEVEhfT0ZGU0VUIDB4M0MgLyogSVIgTWluaW11bSBSZWNlaXZlZCBQdWxzZQorCQkJCQkJV2lkdGggWzE1OjBdICovCisjZGVmaW5lIFhVQVJUUFNfSVJUWF9QV0lEVEhfT0ZGU0VUIDB4NDAgLyogSVIgVHJhbnNtaXR0ZWQgcHVsc2UKKwkJCQkJCVdpZHRoIFs3OjBdICovCisjZGVmaW5lIFhVQVJUUFNfVFhXTV9PRkZTRVQJMHg0NCAgLyogVFggRklGTyBUcmlnZ2VyIExldmVsIFs1OjBdICovCisKKy8qKiBDb250cm9sIFJlZ2lzdGVyCisgKgorICogVGhlIENvbnRyb2wgcmVnaXN0ZXIgKENSKSBjb250cm9scyB0aGUgbWFqb3IgZnVuY3Rpb25zIG9mIHRoZSBkZXZpY2UuCisgKgorICogQ29udHJvbCBSZWdpc3RlciBCaXQgRGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBYVUFSVFBTX0NSX1NUT1BCUksJMHgwMDAwMDEwMCAgLyogU3RvcCBUWCBicmVhayAqLworI2RlZmluZSBYVUFSVFBTX0NSX1NUQVJUQlJLCTB4MDAwMDAwODAgIC8qIFNldCBUWCBicmVhayAqLworI2RlZmluZSBYVUFSVFBTX0NSX1RYX0RJUwkweDAwMDAwMDIwICAvKiBUWCBkaXNhYmxlZC4gKi8KKyNkZWZpbmUgWFVBUlRQU19DUl9UWF9FTgkweDAwMDAwMDEwICAvKiBUWCBlbmFibGVkICovCisjZGVmaW5lIFhVQVJUUFNfQ1JfUlhfRElTCTB4MDAwMDAwMDggIC8qIFJYIGRpc2FibGVkLiAqLworI2RlZmluZSBYVUFSVFBTX0NSX1JYX0VOCTB4MDAwMDAwMDQgIC8qIFJYIGVuYWJsZWQgKi8KKyNkZWZpbmUgWFVBUlRQU19DUl9UWFJTVAkweDAwMDAwMDAyICAvKiBUWCBsb2dpYyByZXNldCAqLworI2RlZmluZSBYVUFSVFBTX0NSX1JYUlNUCTB4MDAwMDAwMDEgIC8qIFJYIGxvZ2ljIHJlc2V0ICovCisjZGVmaW5lIFhVQVJUUFNfQ1JfUlNUX1RPCTB4MDAwMDAwNDAgIC8qIFJlc3RhcnQgVGltZW91dCBDb3VudGVyICovCisKKy8qKiBNb2RlIFJlZ2lzdGVyCisgKgorICogVGhlIG1vZGUgcmVnaXN0ZXIgKE1SKSBkZWZpbmVzIHRoZSBtb2RlIG9mIHRyYW5zZmVyIGFzIHdlbGwgYXMgdGhlIGRhdGEKKyAqIGZvcm1hdC4gSWYgdGhpcyByZWdpc3RlciBpcyBtb2RpZmllZCBkdXJpbmcgdHJhbnNtaXNzaW9uIG9yIHJlY2VwdGlvbiwKKyAqIGRhdGEgdmFsaWRpdHkgY2Fubm90IGJlIGd1YXJhbnRlZWQuCisgKgorICogTW9kZSBSZWdpc3RlciBCaXQgRGVmaW5pdGlvbnMKKyAqCisgKi8KKyNkZWZpbmUgWFVBUlRQU19NUl9DTEtTRUwJCTB4MDAwMDAwMDEgIC8qIFByZS1zY2FsYXIgc2VsZWN0aW9uICovCisjZGVmaW5lIFhVQVJUUFNfTVJfQ0hNT0RFX0xfTE9PUAkweDAwMDAwMjAwICAvKiBMb2NhbCBsb29wIGJhY2sgbW9kZSAqLworI2RlZmluZSBYVUFSVFBTX01SX0NITU9ERV9OT1JNCQkweDAwMDAwMDAwICAvKiBOb3JtYWwgbW9kZSAqLworCisjZGVmaW5lIFhVQVJUUFNfTVJfU1RPUE1PREVfMl9CSVQJMHgwMDAwMDA4MCAgLyogMiBzdG9wIGJpdHMgKi8KKyNkZWZpbmUgWFVBUlRQU19NUl9TVE9QTU9ERV8xX0JJVAkweDAwMDAwMDAwICAvKiAxIHN0b3AgYml0ICovCisKKyNkZWZpbmUgWFVBUlRQU19NUl9QQVJJVFlfTk9ORQkJMHgwMDAwMDAyMCAgLyogTm8gcGFyaXR5IG1vZGUgKi8KKyNkZWZpbmUgWFVBUlRQU19NUl9QQVJJVFlfTUFSSwkJMHgwMDAwMDAxOCAgLyogTWFyayBwYXJpdHkgbW9kZSAqLworI2RlZmluZSBYVUFSVFBTX01SX1BBUklUWV9TUEFDRQkJMHgwMDAwMDAxMCAgLyogU3BhY2UgcGFyaXR5IG1vZGUgKi8KKyNkZWZpbmUgWFVBUlRQU19NUl9QQVJJVFlfT0RECQkweDAwMDAwMDA4ICAvKiBPZGQgcGFyaXR5IG1vZGUgKi8KKyNkZWZpbmUgWFVBUlRQU19NUl9QQVJJVFlfRVZFTgkJMHgwMDAwMDAwMCAgLyogRXZlbiBwYXJpdHkgbW9kZSAqLworCisjZGVmaW5lIFhVQVJUUFNfTVJfQ0hBUkxFTl82X0JJVAkweDAwMDAwMDA2ICAvKiA2IGJpdHMgZGF0YSAqLworI2RlZmluZSBYVUFSVFBTX01SX0NIQVJMRU5fN19CSVQJMHgwMDAwMDAwNCAgLyogNyBiaXRzIGRhdGEgKi8KKyNkZWZpbmUgWFVBUlRQU19NUl9DSEFSTEVOXzhfQklUCTB4MDAwMDAwMDAgIC8qIDggYml0cyBkYXRhICovCisKKy8qKiBJbnRlcnJ1cHQgUmVnaXN0ZXJzCisgKgorICogSW50ZXJydXB0IGNvbnRyb2wgbG9naWMgdXNlcyB0aGUgaW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciAoSUVSKSBhbmQgdGhlCisgKiBpbnRlcnJ1cHQgZGlzYWJsZSByZWdpc3RlciAoSURSKSB0byBzZXQgdGhlIHZhbHVlIG9mIHRoZSBiaXRzIGluIHRoZQorICogaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgKElNUikuIFRoZSBJTVIgZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHBhc3MgYW4KKyAqIGludGVycnVwdCB0byB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAoSVNSKS4KKyAqIFdyaXRpbmcgYSAxIHRvIElFUiBFbmFibGVzIGFuIGludGVycnVwdCwgd3JpdGluZyBhIDEgdG8gSURSIGRpc2FibGVzIGFuCisgKiBpbnRlcnJ1cHQuIElNUiBhbmQgSVNSIGFyZSByZWFkIG9ubHksIGFuZCBJRVIgYW5kIElEUiBhcmUgd3JpdGUgb25seS4KKyAqIFJlYWRpbmcgZWl0aGVyIElFUiBvciBJRFIgcmV0dXJucyAweDAwLgorICoKKyAqIEFsbCBmb3VyIHJlZ2lzdGVycyBoYXZlIHRoZSBzYW1lIGJpdCBkZWZpbml0aW9ucy4KKyAqLworI2RlZmluZSBYVUFSVFBTX0lYUl9UT1VUCTB4MDAwMDAxMDAgLyogUlggVGltZW91dCBlcnJvciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgWFVBUlRQU19JWFJfUEFSSVRZCTB4MDAwMDAwODAgLyogUGFyaXR5IGVycm9yIGludGVycnVwdCAqLworI2RlZmluZSBYVUFSVFBTX0lYUl9GUkFNSU5HCTB4MDAwMDAwNDAgLyogRnJhbWluZyBlcnJvciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgWFVBUlRQU19JWFJfT1ZFUlJVTgkweDAwMDAwMDIwIC8qIE92ZXJydW4gZXJyb3IgaW50ZXJydXB0ICovCisjZGVmaW5lIFhVQVJUUFNfSVhSX1RYRlVMTAkweDAwMDAwMDEwIC8qIFRYIEZJRk8gRnVsbCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgWFVBUlRQU19JWFJfVFhFTVBUWQkweDAwMDAwMDA4IC8qIFRYIEZJRk8gZW1wdHkgaW50ZXJydXB0ICovCisjZGVmaW5lIFhVQVJUUFNfSVNSX1JYRU1QVFkJMHgwMDAwMDAwMiAvKiBSWCBGSUZPIGVtcHR5IGludGVycnVwdCAqLworI2RlZmluZSBYVUFSVFBTX0lYUl9SWFRSSUcJMHgwMDAwMDAwMSAvKiBSWCBGSUZPIHRyaWdnZXIgaW50ZXJydXB0ICovCisjZGVmaW5lIFhVQVJUUFNfSVhSX1JYRlVMTAkweDAwMDAwMDA0IC8qIFJYIEZJRk8gZnVsbCBpbnRlcnJ1cHQuICovCisjZGVmaW5lIFhVQVJUUFNfSVhSX1JYRU1QVFkJMHgwMDAwMDAwMiAvKiBSWCBGSUZPIGVtcHR5IGludGVycnVwdC4gKi8KKyNkZWZpbmUgWFVBUlRQU19JWFJfTUFTSwkweDAwMDAxRkZGIC8qIFZhbGlkIGJpdCBtYXNrICovCisKKy8qKiBDaGFubmVsIFN0YXR1cyBSZWdpc3RlcgorICoKKyAqIFRoZSBjaGFubmVsIHN0YXR1cyByZWdpc3RlciAoQ1NSKSBpcyBwcm92aWRlZCB0byBlbmFibGUgdGhlIGNvbnRyb2wgbG9naWMKKyAqIHRvIG1vbml0b3IgdGhlIHN0YXR1cyBvZiBiaXRzIGluIHRoZSBjaGFubmVsIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIsCisgKiBldmVuIGlmIHRoZXNlIGFyZSBtYXNrZWQgb3V0IGJ5IHRoZSBpbnRlcnJ1cHQgbWFzayByZWdpc3Rlci4KKyAqLworI2RlZmluZSBYVUFSVFBTX1NSX1JYRU1QVFkJMHgwMDAwMDAwMiAvKiBSWCBGSUZPIGVtcHR5ICovCisjZGVmaW5lIFhVQVJUUFNfU1JfVFhFTVBUWQkweDAwMDAwMDA4IC8qIFRYIEZJRk8gZW1wdHkgKi8KKyNkZWZpbmUgWFVBUlRQU19TUl9UWEZVTEwJMHgwMDAwMDAxMCAvKiBUWCBGSUZPIGZ1bGwgKi8KKyNkZWZpbmUgWFVBUlRQU19TUl9SWFRSSUcJMHgwMDAwMDAwMSAvKiBSeCBUcmlnZ2VyICovCisKKy8qKgorICogeHVhcnRwc19pc3IgLSBJbnRlcnJ1cHQgaGFuZGxlcgorICogQGlycTogSXJxIG51bWJlcgorICogQGRldl9pZDogSWQgb2YgdGhlIHBvcnQKKyAqCisgKiBSZXR1cm5zIElSUUhBTkRMRUQKKyAqKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCB4dWFydHBzX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdWFydF9wb3J0ICopZGV2X2lkOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaXNyc3RhdHVzLCBudW1ieXRlczsKKwl1bnNpZ25lZCBpbnQgZGF0YTsKKwljaGFyIHN0YXR1cyA9IFRUWV9OT1JNQUw7CisKKwkvKiBHZXQgdGhlIHR0eSB3aGljaCBjb3VsZCBiZSBOVUxMIHNvIGRvbid0IGFzc3VtZSBpdCdzIHZhbGlkICovCisJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+c3RhdGUtPnBvcnQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKworCS8qIFJlYWQgdGhlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgdG8gZGV0ZXJtaW5lIHdoaWNoCisJICogaW50ZXJydXB0KHMpIGlzL2FyZSBhY3RpdmUuCisJICovCisJaXNyc3RhdHVzID0geHVhcnRwc19yZWFkbChYVUFSVFBTX0lTUl9PRkZTRVQpOworCisJLyogZHJvcCBieXRlIHdpdGggcGFyaXR5IGVycm9yIGlmIElHTlBBUiBzcGVjaWZpZWQgKi8KKwlpZiAoaXNyc3RhdHVzICYgcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrICYgWFVBUlRQU19JWFJfUEFSSVRZKQorCQlpc3JzdGF0dXMgJj0gfihYVUFSVFBTX0lYUl9SWFRSSUcgfCBYVUFSVFBTX0lYUl9UT1VUKTsKKworCWlzcnN0YXR1cyAmPSBwb3J0LT5yZWFkX3N0YXR1c19tYXNrOworCWlzcnN0YXR1cyAmPSB+cG9ydC0+aWdub3JlX3N0YXR1c19tYXNrOworCisJaWYgKChpc3JzdGF0dXMgJiBYVUFSVFBTX0lYUl9UT1VUKSB8fAorCQkoaXNyc3RhdHVzICYgWFVBUlRQU19JWFJfUlhUUklHKSkgeworCQkvKiBSZWNlaXZlIFRpbWVvdXQgSW50ZXJydXB0ICovCisJCXdoaWxlICgoeHVhcnRwc19yZWFkbChYVUFSVFBTX1NSX09GRlNFVCkgJgorCQkJWFVBUlRQU19TUl9SWEVNUFRZKSAhPSBYVUFSVFBTX1NSX1JYRU1QVFkpIHsKKwkJCWRhdGEgPSB4dWFydHBzX3JlYWRsKFhVQVJUUFNfRklGT19PRkZTRVQpOworCQkJcG9ydC0+aWNvdW50LnJ4Kys7CisKKwkJCWlmIChpc3JzdGF0dXMgJiBYVUFSVFBTX0lYUl9QQVJJVFkpIHsKKwkJCQlwb3J0LT5pY291bnQucGFyaXR5Kys7CisJCQkJc3RhdHVzID0gVFRZX1BBUklUWTsKKwkJCX0gZWxzZSBpZiAoaXNyc3RhdHVzICYgWFVBUlRQU19JWFJfRlJBTUlORykgeworCQkJCXBvcnQtPmljb3VudC5mcmFtZSsrOworCQkJCXN0YXR1cyA9IFRUWV9GUkFNRTsKKwkJCX0gZWxzZSBpZiAoaXNyc3RhdHVzICYgWFVBUlRQU19JWFJfT1ZFUlJVTikKKwkJCQlwb3J0LT5pY291bnQub3ZlcnJ1bisrOworCisJCQlpZiAodHR5KQorCQkJCXVhcnRfaW5zZXJ0X2NoYXIocG9ydCwgaXNyc3RhdHVzLAorCQkJCQkJWFVBUlRQU19JWFJfT1ZFUlJVTiwgZGF0YSwKKwkJCQkJCXN0YXR1cyk7CisJCX0KKwkJc3Bpbl91bmxvY2soJnBvcnQtPmxvY2spOworCQlpZiAodHR5KQorCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJc3Bpbl9sb2NrKCZwb3J0LT5sb2NrKTsKKwl9CisKKwkvKiBEaXNwYXRjaCBhbiBhcHByb3ByaWF0ZSBoYW5kbGVyICovCisJaWYgKChpc3JzdGF0dXMgJiBYVUFSVFBTX0lYUl9UWEVNUFRZKSA9PSBYVUFSVFBTX0lYUl9UWEVNUFRZKSB7CisJCWlmICh1YXJ0X2NpcmNfZW1wdHkoJnBvcnQtPnN0YXRlLT54bWl0KSkgeworCQkJeHVhcnRwc193cml0ZWwoWFVBUlRQU19JWFJfVFhFTVBUWSwKKwkJCQkJCVhVQVJUUFNfSURSX09GRlNFVCk7CisJCX0gZWxzZSB7CisJCQludW1ieXRlcyA9IHBvcnQtPmZpZm9zaXplOworCQkJLyogQnJlYWsgaWYgbm8gbW9yZSBkYXRhIGF2YWlsYWJsZSBpbiB0aGUgVUFSVCBidWZmZXIgKi8KKwkJCXdoaWxlIChudW1ieXRlcy0tKSB7CisJCQkJaWYgKHVhcnRfY2lyY19lbXB0eSgmcG9ydC0+c3RhdGUtPnhtaXQpKQorCQkJCQlicmVhazsKKwkJCQkvKiBHZXQgdGhlIGRhdGEgZnJvbSB0aGUgVUFSVCBjaXJjdWxhciBidWZmZXIKKwkJCQkgKiBhbmQgd3JpdGUgaXQgdG8gdGhlIHh1YXJ0cHMncyBUWF9GSUZPCisJCQkJICogcmVnaXN0ZXIuCisJCQkJICovCisJCQkJeHVhcnRwc193cml0ZWwoCisJCQkJCXBvcnQtPnN0YXRlLT54bWl0LmJ1Zltwb3J0LT5zdGF0ZS0+eG1pdC4KKwkJCQkJdGFpbF0sIFhVQVJUUFNfRklGT19PRkZTRVQpOworCisJCQkJcG9ydC0+aWNvdW50LnR4Kys7CisKKwkJCQkvKiBBZGp1c3QgdGhlIHRhaWwgb2YgdGhlIFVBUlQgYnVmZmVyIGFuZCB3cmFwCisJCQkJICogdGhlIGJ1ZmZlciBpZiBpdCByZWFjaGVzIGxpbWl0LgorCQkJCSAqLworCQkJCXBvcnQtPnN0YXRlLT54bWl0LnRhaWwgPQorCQkJCQkocG9ydC0+c3RhdGUtPnhtaXQudGFpbCArIDEpICYgXAorCQkJCQkJKFVBUlRfWE1JVF9TSVpFIC0gMSk7CisJCQl9CisKKwkJCWlmICh1YXJ0X2NpcmNfY2hhcnNfcGVuZGluZygKKwkJCQkJJnBvcnQtPnN0YXRlLT54bWl0KSA8IFdBS0VVUF9DSEFSUykKKwkJCQl1YXJ0X3dyaXRlX3dha2V1cChwb3J0KTsKKwkJfQorCX0KKworCXh1YXJ0cHNfd3JpdGVsKGlzcnN0YXR1cywgWFVBUlRQU19JU1JfT0ZGU0VUKTsKKworCS8qIGJlIHN1cmUgdG8gcmVsZWFzZSB0aGUgbG9jayBhbmQgdHR5IGJlZm9yZSBsZWF2aW5nICovCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCXR0eV9rcmVmX3B1dCh0dHkpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKioKKyAqIHh1YXJ0cHNfc2V0X2JhdWRfcmF0ZSAtIENhbGN1bGF0ZSBhbmQgc2V0IHRoZSBiYXVkIHJhdGUKKyAqIEBwb3J0OiBIYW5kbGUgdG8gdGhlIHVhcnQgcG9ydCBzdHJ1Y3R1cmUKKyAqIEBiYXVkOiBCYXVkIHJhdGUgdG8gc2V0CisgKgorICogUmV0dXJucyBiYXVkIHJhdGUsIHJlcXVlc3RlZCBiYXVkIHdoZW4gcG9zc2libGUsIG9yIGFjdHVhbCBiYXVkIHdoZW4gdGhlcmUKKyAqCXdhcyB0b28gbXVjaCBlcnJvcgorICoqLworc3RhdGljIHVuc2lnbmVkIGludCB4dWFydHBzX3NldF9iYXVkX3JhdGUoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKKwkJCQkJCXVuc2lnbmVkIGludCBiYXVkKQoreworCXVuc2lnbmVkIGludCBzZWxfY2xrOworCXVuc2lnbmVkIGludCBjYWxjX2JhdWQgPSAwOworCXVuc2lnbmVkIGludCBicmdyX3ZhbCwgYnJkaXZfdmFsOworCXVuc2lnbmVkIGludCBiYXVkZXJyb3I7CisKKwkvKiBGb3JtdWxhIHRvIG9idGFpbiBiYXVkIHJhdGUgaXMKKwkgKgliYXVkX3R4L3J4IHJhdGUgPSBzZWxfY2xrL0NEICogKEJESVYgKyAxKQorCSAqCWlucHV0X2NsayA9IChVYXJ0IFVzZXIgRGVmaW5lZCBDbG9jayBvciBBcGIgQ2xvY2spCisJICoJCWRlcGVuZHMgb24gVUNMS0VOIGluIE1SIFJlZworCSAqCXNlbF9jbGsgPSBpbnB1dF9jbGsgb3IgaW5wdXRfY2xrLzg7CisJICoJCWRlcGVuZHMgb24gQ0xLUyBpbiBNUiByZWcKKwkgKglDRCBhbmQgQkRJViBkZXBlbmRzIG9uIHZhbHVlcyBpbgorCSAqCQkJYmF1ZCByYXRlIGdlbmVyYXRlIHJlZ2lzdGVyCisJICoJCQliYXVkIHJhdGUgY2xvY2sgZGl2aXNvciByZWdpc3RlcgorCSAqLworCXNlbF9jbGsgPSBwb3J0LT51YXJ0Y2xrOworCWlmICh4dWFydHBzX3JlYWRsKFhVQVJUUFNfTVJfT0ZGU0VUKSAmIFhVQVJUUFNfTVJfQ0xLU0VMKQorCQlzZWxfY2xrID0gc2VsX2NsayAvIDg7CisKKwkvKiBGaW5kIHRoZSBiZXN0IHZhbHVlcyBmb3IgYmF1ZCBnZW5lcmF0aW9uICovCisJZm9yIChicmRpdl92YWwgPSA0OyBicmRpdl92YWwgPCAyNTU7IGJyZGl2X3ZhbCsrKSB7CisKKwkJYnJncl92YWwgPSBzZWxfY2xrIC8gKGJhdWQgKiAoYnJkaXZfdmFsICsgMSkpOworCQlpZiAoYnJncl92YWwgPCAyIHx8IGJyZ3JfdmFsID4gNjU1MzUpCisJCQljb250aW51ZTsKKworCQljYWxjX2JhdWQgPSBzZWxfY2xrIC8gKGJyZ3JfdmFsICogKGJyZGl2X3ZhbCArIDEpKTsKKworCQlpZiAoYmF1ZCA+IGNhbGNfYmF1ZCkKKwkJCWJhdWRlcnJvciA9IGJhdWQgLSBjYWxjX2JhdWQ7CisJCWVsc2UKKwkJCWJhdWRlcnJvciA9IGNhbGNfYmF1ZCAtIGJhdWQ7CisKKwkJLyogdXNlIHRoZSB2YWx1ZXMgd2hlbiBwZXJjZW50IGVycm9yIGlzIGFjY2VwdGFibGUgKi8KKwkJaWYgKCgoYmF1ZGVycm9yICogMTAwKSAvIGJhdWQpIDwgMykgeworCQkJY2FsY19iYXVkID0gYmF1ZDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogU2V0IHRoZSB2YWx1ZXMgZm9yIHRoZSBuZXcgYmF1ZCByYXRlICovCisJeHVhcnRwc193cml0ZWwoYnJncl92YWwsIFhVQVJUUFNfQkFVREdFTl9PRkZTRVQpOworCXh1YXJ0cHNfd3JpdGVsKGJyZGl2X3ZhbCwgWFVBUlRQU19CQVVERElWX09GRlNFVCk7CisKKwlyZXR1cm4gY2FsY19iYXVkOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS1VYXJ0IE9wZXJhdGlvbnMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKioKKyAqIHh1YXJ0cHNfc3RhcnRfdHggLSAgU3RhcnQgdHJhbnNtaXR0aW5nIGJ5dGVzCisgKiBAcG9ydDogSGFuZGxlIHRvIHRoZSB1YXJ0IHBvcnQgc3RydWN0dXJlCisgKgorICoqLworc3RhdGljIHZvaWQgeHVhcnRwc19zdGFydF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXVuc2lnbmVkIGludCBzdGF0dXMsIG51bWJ5dGVzID0gcG9ydC0+Zmlmb3NpemU7CisKKwlpZiAodWFydF9jaXJjX2VtcHR5KCZwb3J0LT5zdGF0ZS0+eG1pdCkgfHwgdWFydF90eF9zdG9wcGVkKHBvcnQpKQorCQlyZXR1cm47CisKKwlzdGF0dXMgPSB4dWFydHBzX3JlYWRsKFhVQVJUUFNfQ1JfT0ZGU0VUKTsKKwkvKiBTZXQgdGhlIFRYIGVuYWJsZSBiaXQgYW5kIGNsZWFyIHRoZSBUWCBkaXNhYmxlIGJpdCB0byBlbmFibGUgdGhlCisJICogdHJhbnNtaXR0ZXIuCisJICovCisJeHVhcnRwc193cml0ZWwoKHN0YXR1cyAmIH5YVUFSVFBTX0NSX1RYX0RJUykgfCBYVUFSVFBTX0NSX1RYX0VOLAorCQlYVUFSVFBTX0NSX09GRlNFVCk7CisKKwl3aGlsZSAobnVtYnl0ZXMtLSAmJiAoKHh1YXJ0cHNfcmVhZGwoWFVBUlRQU19TUl9PRkZTRVQpCisJCSYgWFVBUlRQU19TUl9UWEZVTEwpKSAhPSBYVUFSVFBTX1NSX1RYRlVMTCkgeworCisJCS8qIEJyZWFrIGlmIG5vIG1vcmUgZGF0YSBhdmFpbGFibGUgaW4gdGhlIFVBUlQgYnVmZmVyICovCisJCWlmICh1YXJ0X2NpcmNfZW1wdHkoJnBvcnQtPnN0YXRlLT54bWl0KSkKKwkJCWJyZWFrOworCisJCS8qIEdldCB0aGUgZGF0YSBmcm9tIHRoZSBVQVJUIGNpcmN1bGFyIGJ1ZmZlciBhbmQKKwkJICogd3JpdGUgaXQgdG8gdGhlIHh1YXJ0cHMncyBUWF9GSUZPIHJlZ2lzdGVyLgorCQkgKi8KKwkJeHVhcnRwc193cml0ZWwoCisJCQlwb3J0LT5zdGF0ZS0+eG1pdC5idWZbcG9ydC0+c3RhdGUtPnhtaXQudGFpbF0sCisJCQlYVUFSVFBTX0ZJRk9fT0ZGU0VUKTsKKwkJcG9ydC0+aWNvdW50LnR4Kys7CisKKwkJLyogQWRqdXN0IHRoZSB0YWlsIG9mIHRoZSBVQVJUIGJ1ZmZlciBhbmQgd3JhcAorCQkgKiB0aGUgYnVmZmVyIGlmIGl0IHJlYWNoZXMgbGltaXQuCisJCSAqLworCQlwb3J0LT5zdGF0ZS0+eG1pdC50YWlsID0gKHBvcnQtPnN0YXRlLT54bWl0LnRhaWwgKyAxKSAmCisJCQkJCShVQVJUX1hNSVRfU0laRSAtIDEpOworCX0KKworCS8qIEVuYWJsZSB0aGUgVFggRW1wdHkgaW50ZXJydXB0ICovCisJeHVhcnRwc193cml0ZWwoWFVBUlRQU19JWFJfVFhFTVBUWSwgWFVBUlRQU19JRVJfT0ZGU0VUKTsKKworCWlmICh1YXJ0X2NpcmNfY2hhcnNfcGVuZGluZygmcG9ydC0+c3RhdGUtPnhtaXQpIDwgV0FLRVVQX0NIQVJTKQorCQl1YXJ0X3dyaXRlX3dha2V1cChwb3J0KTsKK30KKworLyoqCisgKiB4dWFydHBzX3N0b3BfdHggLSBTdG9wIFRYCisgKiBAcG9ydDogSGFuZGxlIHRvIHRoZSB1YXJ0IHBvcnQgc3RydWN0dXJlCisgKgorICoqLworc3RhdGljIHZvaWQgeHVhcnRwc19zdG9wX3R4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJdW5zaWduZWQgaW50IHJlZ3ZhbDsKKworCXJlZ3ZhbCA9IHh1YXJ0cHNfcmVhZGwoWFVBUlRQU19DUl9PRkZTRVQpOworCXJlZ3ZhbCB8PSBYVUFSVFBTX0NSX1RYX0RJUzsKKwkvKiBEaXNhYmxlIHRoZSB0cmFuc21pdHRlciAqLworCXh1YXJ0cHNfd3JpdGVsKHJlZ3ZhbCwgWFVBUlRQU19DUl9PRkZTRVQpOworfQorCisvKioKKyAqIHh1YXJ0cHNfc3RvcF9yeCAtIFN0b3AgUlgKKyAqIEBwb3J0OiBIYW5kbGUgdG8gdGhlIHVhcnQgcG9ydCBzdHJ1Y3R1cmUKKyAqCisgKiovCitzdGF0aWMgdm9pZCB4dWFydHBzX3N0b3Bfcngoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBpbnQgcmVndmFsOworCisJcmVndmFsID0geHVhcnRwc19yZWFkbChYVUFSVFBTX0NSX09GRlNFVCk7CisJcmVndmFsIHw9IFhVQVJUUFNfQ1JfUlhfRElTOworCS8qIERpc2FibGUgdGhlIHJlY2VpdmVyICovCisJeHVhcnRwc193cml0ZWwocmVndmFsLCBYVUFSVFBTX0NSX09GRlNFVCk7Cit9CisKKy8qKgorICogeHVhcnRwc190eF9lbXB0eSAtICBDaGVjayB3aGV0aGVyIFRYIGlzIGVtcHR5CisgKiBAcG9ydDogSGFuZGxlIHRvIHRoZSB1YXJ0IHBvcnQgc3RydWN0dXJlCisgKgorICogUmV0dXJucyBUSU9DU0VSX1RFTVQgb24gc3VjY2VzcywgMCBvdGhlcndpc2UKKyAqKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgeHVhcnRwc190eF9lbXB0eShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXVuc2lnbmVkIGludCBzdGF0dXM7CisKKwlzdGF0dXMgPSB4dWFydHBzX3JlYWRsKFhVQVJUUFNfSVNSX09GRlNFVCkgJiBYVUFSVFBTX0lYUl9UWEVNUFRZOworCXJldHVybiBzdGF0dXMgPyBUSU9DU0VSX1RFTVQgOiAwOworfQorCisvKioKKyAqIHh1YXJ0cHNfYnJlYWtfY3RsIC0gQmFzZWQgb24gdGhlIGlucHV0IGN0bCB3ZSBoYXZlIHRvIHN0YXJ0IG9yIHN0b3AKKyAqCQkJdHJhbnNtaXR0aW5nIGNoYXIgYnJlYWtzCisgKiBAcG9ydDogSGFuZGxlIHRvIHRoZSB1YXJ0IHBvcnQgc3RydWN0dXJlCisgKiBAY3RsOiBWYWx1ZSBiYXNlZCBvbiB3aGljaCBzdGFydCBvciBzdG9wIGRlY2lzaW9uIGlzIHRha2VuCisgKgorICoqLworc3RhdGljIHZvaWQgeHVhcnRwc19icmVha19jdGwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGN0bCkKK3sKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCisJc3RhdHVzID0geHVhcnRwc19yZWFkbChYVUFSVFBTX0NSX09GRlNFVCk7CisKKwlpZiAoY3RsID09IC0xKQorCQl4dWFydHBzX3dyaXRlbChYVUFSVFBTX0NSX1NUQVJUQlJLIHwgc3RhdHVzLAorCQkJCQlYVUFSVFBTX0NSX09GRlNFVCk7CisJZWxzZSB7CisJCWlmICgoc3RhdHVzICYgWFVBUlRQU19DUl9TVE9QQlJLKSA9PSAwKQorCQkJeHVhcnRwc193cml0ZWwoWFVBUlRQU19DUl9TVE9QQlJLIHwgc3RhdHVzLAorCQkJCQkgWFVBUlRQU19DUl9PRkZTRVQpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogeHVhcnRwc19zZXRfdGVybWlvcyAtIHRlcm1pb3Mgb3BlcmF0aW9ucywgaGFuZGxpbmcgZGF0YSBsZW5ndGgsIHBhcml0eSwKKyAqCQkJCXN0b3AgYml0cywgZmxvdyBjb250cm9sLCBiYXVkIHJhdGUKKyAqIEBwb3J0OiBIYW5kbGUgdG8gdGhlIHVhcnQgcG9ydCBzdHJ1Y3R1cmUKKyAqIEB0ZXJtaW9zOiBIYW5kbGUgdG8gdGhlIGlucHV0IHRlcm1pb3Mgc3RydWN0dXJlCisgKiBAb2xkOiBWYWx1ZXMgb2YgdGhlIHByZXZpb3VzbHkgc2F2ZWQgdGVybWlvcyBzdHJ1Y3R1cmUKKyAqCisgKiovCitzdGF0aWMgdm9pZCB4dWFydHBzX3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsCisJCQkJc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zLCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCkKK3sKKwl1bnNpZ25lZCBpbnQgY3ZhbCA9IDA7CisJdW5zaWduZWQgaW50IGJhdWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgY3RybF9yZWcsIG1vZGVfcmVnOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKworCS8qIEVtcHR5IHRoZSByZWNlaXZlIEZJRk8gMXN0IGJlZm9yZSBtYWtpbmcgY2hhbmdlcyAqLworCXdoaWxlICgoeHVhcnRwc19yZWFkbChYVUFSVFBTX1NSX09GRlNFVCkgJgorCQkgWFVBUlRQU19TUl9SWEVNUFRZKSAhPSBYVUFSVFBTX1NSX1JYRU1QVFkpIHsKKwkJeHVhcnRwc19yZWFkbChYVUFSVFBTX0ZJRk9fT0ZGU0VUKTsKKwl9CisKKwkvKiBEaXNhYmxlIHRoZSBUWCBhbmQgUlggdG8gc2V0IGJhdWQgcmF0ZSAqLworCXh1YXJ0cHNfd3JpdGVsKHh1YXJ0cHNfcmVhZGwoWFVBUlRQU19DUl9PRkZTRVQpIHwKKwkJCShYVUFSVFBTX0NSX1RYX0RJUyB8IFhVQVJUUFNfQ1JfUlhfRElTKSwKKwkJCVhVQVJUUFNfQ1JfT0ZGU0VUKTsKKworCS8qIE1pbiBiYXVkIHJhdGUgPSA2YnBzIGFuZCBNYXggQmF1ZCBSYXRlIGlzIDEwTWJwcyBmb3IgMTAwTWh6IGNsayAqLworCWJhdWQgPSB1YXJ0X2dldF9iYXVkX3JhdGUocG9ydCwgdGVybWlvcywgb2xkLCAwLCAxMDAwMDAwMCk7CisJYmF1ZCA9IHh1YXJ0cHNfc2V0X2JhdWRfcmF0ZShwb3J0LCBiYXVkKTsKKwlpZiAodHR5X3Rlcm1pb3NfYmF1ZF9yYXRlKHRlcm1pb3MpKQorCQl0dHlfdGVybWlvc19lbmNvZGVfYmF1ZF9yYXRlKHRlcm1pb3MsIGJhdWQsIGJhdWQpOworCisJLyoKKwkgKiBVcGRhdGUgdGhlIHBlci1wb3J0IHRpbWVvdXQuCisJICovCisJdWFydF91cGRhdGVfdGltZW91dChwb3J0LCB0ZXJtaW9zLT5jX2NmbGFnLCBiYXVkKTsKKworCS8qIFNldCBUWC9SWCBSZXNldCAqLworCXh1YXJ0cHNfd3JpdGVsKHh1YXJ0cHNfcmVhZGwoWFVBUlRQU19DUl9PRkZTRVQpIHwKKwkJCShYVUFSVFBTX0NSX1RYUlNUIHwgWFVBUlRQU19DUl9SWFJTVCksCisJCQlYVUFSVFBTX0NSX09GRlNFVCk7CisKKwljdHJsX3JlZyA9IHh1YXJ0cHNfcmVhZGwoWFVBUlRQU19DUl9PRkZTRVQpOworCisJLyogQ2xlYXIgdGhlIFJYIGRpc2FibGUgYW5kIFRYIGRpc2FibGUgYml0cyBhbmQgdGhlbiBzZXQgdGhlIFRYIGVuYWJsZQorCSAqIGJpdCBhbmQgUlggZW5hYmxlIGJpdCB0byBlbmFibGUgdGhlIHRyYW5zbWl0dGVyIGFuZCByZWNlaXZlci4KKwkgKi8KKwl4dWFydHBzX3dyaXRlbCgKKwkJKGN0cmxfcmVnICYgfihYVUFSVFBTX0NSX1RYX0RJUyB8IFhVQVJUUFNfQ1JfUlhfRElTKSkKKwkJCXwgKFhVQVJUUFNfQ1JfVFhfRU4gfCBYVUFSVFBTX0NSX1JYX0VOKSwKKwkJCVhVQVJUUFNfQ1JfT0ZGU0VUKTsKKworCXh1YXJ0cHNfd3JpdGVsKDEwLCBYVUFSVFBTX1JYVE9VVF9PRkZTRVQpOworCisJcG9ydC0+cmVhZF9zdGF0dXNfbWFzayA9IFhVQVJUUFNfSVhSX1RYRU1QVFkgfCBYVUFSVFBTX0lYUl9SWFRSSUcgfAorCQkJWFVBUlRQU19JWFJfT1ZFUlJVTiB8IFhVQVJUUFNfSVhSX1RPVVQ7CisJcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrID0gMDsKKworCWlmICh0ZXJtaW9zLT5jX2lmbGFnICYgSU5QQ0spCisJCXBvcnQtPnJlYWRfc3RhdHVzX21hc2sgfD0gWFVBUlRQU19JWFJfUEFSSVRZIHwKKwkJWFVBUlRQU19JWFJfRlJBTUlORzsKKworCWlmICh0ZXJtaW9zLT5jX2lmbGFnICYgSUdOUEFSKQorCQlwb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgfD0gWFVBUlRQU19JWFJfUEFSSVRZIHwKKwkJCVhVQVJUUFNfSVhSX0ZSQU1JTkcgfCBYVUFSVFBTX0lYUl9PVkVSUlVOOworCisJLyogaWdub3JlIGFsbCBjaGFyYWN0ZXJzIGlmIENSRUFEIGlzIG5vdCBzZXQgKi8KKwlpZiAoKHRlcm1pb3MtPmNfY2ZsYWcgJiBDUkVBRCkgPT0gMCkKKwkJcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrIHw9IFhVQVJUUFNfSVhSX1JYVFJJRyB8CisJCQlYVUFSVFBTX0lYUl9UT1VUIHwgWFVBUlRQU19JWFJfUEFSSVRZIHwKKwkJCVhVQVJUUFNfSVhSX0ZSQU1JTkcgfCBYVUFSVFBTX0lYUl9PVkVSUlVOOworCisJbW9kZV9yZWcgPSB4dWFydHBzX3JlYWRsKFhVQVJUUFNfTVJfT0ZGU0VUKTsKKworCS8qIEhhbmRsaW5nIERhdGEgU2l6ZSAqLworCXN3aXRjaCAodGVybWlvcy0+Y19jZmxhZyAmIENTSVpFKSB7CisJY2FzZSBDUzY6CisJCWN2YWwgfD0gWFVBUlRQU19NUl9DSEFSTEVOXzZfQklUOworCQlicmVhazsKKwljYXNlIENTNzoKKwkJY3ZhbCB8PSBYVUFSVFBTX01SX0NIQVJMRU5fN19CSVQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJY2FzZSBDUzg6CisJCWN2YWwgfD0gWFVBUlRQU19NUl9DSEFSTEVOXzhfQklUOworCQl0ZXJtaW9zLT5jX2NmbGFnICY9IH5DU0laRTsKKwkJdGVybWlvcy0+Y19jZmxhZyB8PSBDUzg7CisJCWJyZWFrOworCX0KKworCS8qIEhhbmRsaW5nIFBhcml0eSBhbmQgU3RvcCBCaXRzIGxlbmd0aCAqLworCWlmICh0ZXJtaW9zLT5jX2NmbGFnICYgQ1NUT1BCKQorCQljdmFsIHw9IFhVQVJUUFNfTVJfU1RPUE1PREVfMl9CSVQ7IC8qIDIgU1RPUCBiaXRzICovCisJZWxzZQorCQljdmFsIHw9IFhVQVJUUFNfTVJfU1RPUE1PREVfMV9CSVQ7IC8qIDEgU1RPUCBiaXQgKi8KKworCWlmICh0ZXJtaW9zLT5jX2NmbGFnICYgUEFSRU5CKSB7CisJCS8qIE1hcmsgb3IgU3BhY2UgcGFyaXR5ICovCisJCWlmICh0ZXJtaW9zLT5jX2NmbGFnICYgQ01TUEFSKSB7CisJCQlpZiAodGVybWlvcy0+Y19jZmxhZyAmIFBBUk9ERCkKKwkJCQljdmFsIHw9IFhVQVJUUFNfTVJfUEFSSVRZX01BUks7CisJCQllbHNlCisJCQkJY3ZhbCB8PSBYVUFSVFBTX01SX1BBUklUWV9TUEFDRTsKKwkJfSBlbHNlIGlmICh0ZXJtaW9zLT5jX2NmbGFnICYgUEFST0REKQorCQkJCWN2YWwgfD0gWFVBUlRQU19NUl9QQVJJVFlfT0REOworCQkJZWxzZQorCQkJCWN2YWwgfD0gWFVBUlRQU19NUl9QQVJJVFlfRVZFTjsKKwl9IGVsc2UKKwkJY3ZhbCB8PSBYVUFSVFBTX01SX1BBUklUWV9OT05FOworCXh1YXJ0cHNfd3JpdGVsKGN2YWwgLCBYVUFSVFBTX01SX09GRlNFVCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogeHVhcnRwc19zdGFydHVwIC0gQ2FsbGVkIHdoZW4gYW4gYXBwbGljYXRpb24gb3BlbnMgYSB4dWFydHBzIHBvcnQKKyAqIEBwb3J0OiBIYW5kbGUgdG8gdGhlIHVhcnQgcG9ydCBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3Igb3RoZXJ3aXNlCisgKiovCitzdGF0aWMgaW50IHh1YXJ0cHNfc3RhcnR1cChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXVuc2lnbmVkIGludCByZXR2YWwgPSAwLCBzdGF0dXMgPSAwOworCisJcmV0dmFsID0gcmVxdWVzdF9pcnEocG9ydC0+aXJxLCB4dWFydHBzX2lzciwgMCwgWFVBUlRQU19OQU1FLAorCQkJCQkJCQkodm9pZCAqKXBvcnQpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwkvKiBEaXNhYmxlIHRoZSBUWCBhbmQgUlggKi8KKwl4dWFydHBzX3dyaXRlbChYVUFSVFBTX0NSX1RYX0RJUyB8IFhVQVJUUFNfQ1JfUlhfRElTLAorCQkJCQkJWFVBUlRQU19DUl9PRkZTRVQpOworCisJLyogU2V0IHRoZSBDb250cm9sIFJlZ2lzdGVyIHdpdGggVFgvUlggRW5hYmxlLCBUWC9SWCBSZXNldCwKKwkgKiBubyBicmVhayBjaGFycy4KKwkgKi8KKwl4dWFydHBzX3dyaXRlbChYVUFSVFBTX0NSX1RYUlNUIHwgWFVBUlRQU19DUl9SWFJTVCwKKwkJCQlYVUFSVFBTX0NSX09GRlNFVCk7CisKKwlzdGF0dXMgPSB4dWFydHBzX3JlYWRsKFhVQVJUUFNfQ1JfT0ZGU0VUKTsKKworCS8qIENsZWFyIHRoZSBSWCBkaXNhYmxlIGFuZCBUWCBkaXNhYmxlIGJpdHMgYW5kIHRoZW4gc2V0IHRoZSBUWCBlbmFibGUKKwkgKiBiaXQgYW5kIFJYIGVuYWJsZSBiaXQgdG8gZW5hYmxlIHRoZSB0cmFuc21pdHRlciBhbmQgcmVjZWl2ZXIuCisJICovCisJeHVhcnRwc193cml0ZWwoKHN0YXR1cyAmIH4oWFVBUlRQU19DUl9UWF9ESVMgfCBYVUFSVFBTX0NSX1JYX0RJUykpCisJCQl8IChYVUFSVFBTX0NSX1RYX0VOIHwgWFVBUlRQU19DUl9SWF9FTiB8CisJCQlYVUFSVFBTX0NSX1NUT1BCUkspLCBYVUFSVFBTX0NSX09GRlNFVCk7CisKKwkvKiBTZXQgdGhlIE1vZGUgUmVnaXN0ZXIgd2l0aCBub3JtYWwgbW9kZSw4IGRhdGEgYml0cywxIHN0b3AgYml0LAorCSAqIG5vIHBhcml0eS4KKwkgKi8KKwl4dWFydHBzX3dyaXRlbChYVUFSVFBTX01SX0NITU9ERV9OT1JNIHwgWFVBUlRQU19NUl9TVE9QTU9ERV8xX0JJVAorCQl8IFhVQVJUUFNfTVJfUEFSSVRZX05PTkUgfCBYVUFSVFBTX01SX0NIQVJMRU5fOF9CSVQsCisJCSBYVUFSVFBTX01SX09GRlNFVCk7CisKKwkvKiBTZXQgdGhlIFJYIEZJRk8gVHJpZ2dlciBsZXZlbCB0byAxNCBhc3N1bWluZyBGSUZPIHNpemUgYXMgMTYgKi8KKwl4dWFydHBzX3dyaXRlbCgxNCwgWFVBUlRQU19SWFdNX09GRlNFVCk7CisKKwkvKiBSZWNlaXZlIFRpbWVvdXQgcmVnaXN0ZXIgaXMgZW5hYmxlZCB3aXRoIHZhbHVlIG9mIDEwICovCisJeHVhcnRwc193cml0ZWwoMTAsIFhVQVJUUFNfUlhUT1VUX09GRlNFVCk7CisKKworCS8qIFNldCB0aGUgSW50ZXJydXB0IFJlZ2lzdGVycyB3aXRoIGRlc2lyZWQgaW50ZXJydXB0cyAqLworCXh1YXJ0cHNfd3JpdGVsKFhVQVJUUFNfSVhSX1RYRU1QVFkgfCBYVUFSVFBTX0lYUl9QQVJJVFkgfAorCQlYVUFSVFBTX0lYUl9GUkFNSU5HIHwgWFVBUlRQU19JWFJfT1ZFUlJVTiB8CisJCVhVQVJUUFNfSVhSX1JYVFJJRyB8IFhVQVJUUFNfSVhSX1RPVVQsIFhVQVJUUFNfSUVSX09GRlNFVCk7CisJeHVhcnRwc193cml0ZWwofihYVUFSVFBTX0lYUl9UWEVNUFRZIHwgWFVBUlRQU19JWFJfUEFSSVRZIHwKKwkJWFVBUlRQU19JWFJfRlJBTUlORyB8IFhVQVJUUFNfSVhSX09WRVJSVU4gfAorCQlYVUFSVFBTX0lYUl9SWFRSSUcgfCBYVUFSVFBTX0lYUl9UT1VUKSwgWFVBUlRQU19JRFJfT0ZGU0VUKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qKgorICogeHVhcnRwc19zaHV0ZG93biAtIENhbGxlZCB3aGVuIGFuIGFwcGxpY2F0aW9uIGNsb3NlcyBhIHh1YXJ0cHMgcG9ydAorICogQHBvcnQ6IEhhbmRsZSB0byB0aGUgdWFydCBwb3J0IHN0cnVjdHVyZQorICoKKyAqKi8KK3N0YXRpYyB2b2lkIHh1YXJ0cHNfc2h1dGRvd24oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlpbnQgc3RhdHVzOworCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCisJc3RhdHVzID0geHVhcnRwc19yZWFkbChYVUFSVFBTX0lNUl9PRkZTRVQpOworCXh1YXJ0cHNfd3JpdGVsKHN0YXR1cywgWFVBUlRQU19JRFJfT0ZGU0VUKTsKKworCS8qIERpc2FibGUgdGhlIFRYIGFuZCBSWCAqLworCXh1YXJ0cHNfd3JpdGVsKFhVQVJUUFNfQ1JfVFhfRElTIHwgWFVBUlRQU19DUl9SWF9ESVMsCisJCQkJIFhVQVJUUFNfQ1JfT0ZGU0VUKTsKKwlmcmVlX2lycShwb3J0LT5pcnEsIHBvcnQpOworfQorCisvKioKKyAqIHh1YXJ0cHNfdHlwZSAtIFNldCBVQVJUIHR5cGUgdG8geHVhcnRwcyBwb3J0CisgKiBAcG9ydDogSGFuZGxlIHRvIHRoZSB1YXJ0IHBvcnQgc3RydWN0dXJlCisgKgorICogUmV0dXJucyBzdHJpbmcgb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UKKyAqKi8KK3N0YXRpYyBjb25zdCBjaGFyICp4dWFydHBzX3R5cGUoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlyZXR1cm4gcG9ydC0+dHlwZSA9PSBQT1JUX1hVQVJUUFMgPyBYVUFSVFBTX05BTUUgOiBOVUxMOworfQorCisvKioKKyAqIHh1YXJ0cHNfdmVyaWZ5X3BvcnQgLSBWZXJpZnkgdGhlIHBvcnQgcGFyYW1zCisgKiBAcG9ydDogSGFuZGxlIHRvIHRoZSB1YXJ0IHBvcnQgc3RydWN0dXJlCisgKiBAc2VyOiBIYW5kbGUgdG8gdGhlIHN0cnVjdHVyZSB3aG9zZSBtZW1iZXJzIGFyZSBjb21wYXJlZAorICoKKyAqIFJldHVybnMgMCBpZiBzdWNjZXNzIG90aGVyd2lzZSAtRUlOVkFMCisgKiovCitzdGF0aWMgaW50IHh1YXJ0cHNfdmVyaWZ5X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKKwkJCQkJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgKnNlcikKK3sKKwlpZiAoc2VyLT50eXBlICE9IFBPUlRfVU5LTk9XTiAmJiBzZXItPnR5cGUgIT0gUE9SVF9YVUFSVFBTKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAocG9ydC0+aXJxICE9IHNlci0+aXJxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoc2VyLT5pb190eXBlICE9IFVQSU9fTUVNKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAocG9ydC0+aW9iYXNlICE9IHNlci0+cG9ydCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHNlci0+aHViNiAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB4dWFydHBzX3JlcXVlc3RfcG9ydCAtIENsYWltIHRoZSBtZW1vcnkgcmVnaW9uIGF0dGFjaGVkIHRvIHh1YXJ0cHMgcG9ydCwKKyAqCQkJCWNhbGxlZCB3aGVuIHRoZSBkcml2ZXIgYWRkcyBhIHh1YXJ0cHMgcG9ydCB2aWEKKyAqCQkJCXVhcnRfYWRkX29uZV9wb3J0KCkKKyAqIEBwb3J0OiBIYW5kbGUgdG8gdGhlIHVhcnQgcG9ydCBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm5zIDAsIC1FTk9NRU0gaWYgcmVxdWVzdCBmYWlscworICoqLworc3RhdGljIGludCB4dWFydHBzX3JlcXVlc3RfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHBvcnQtPm1hcGJhc2UsIFhVQVJUUFNfUkVHSVNURVJfU1BBQ0UsCisJCQkJCSBYVUFSVFBTX05BTUUpKSB7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBvcnQtPm1lbWJhc2UgPSBpb3JlbWFwKHBvcnQtPm1hcGJhc2UsIFhVQVJUUFNfUkVHSVNURVJfU1BBQ0UpOworCWlmICghcG9ydC0+bWVtYmFzZSkgeworCQlkZXZfZXJyKHBvcnQtPmRldiwgIlVuYWJsZSB0byBtYXAgcmVnaXN0ZXJzXG4iKTsKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHBvcnQtPm1hcGJhc2UsIFhVQVJUUFNfUkVHSVNURVJfU1BBQ0UpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogeHVhcnRwc19yZWxlYXNlX3BvcnQgLSBSZWxlYXNlIHRoZSBtZW1vcnkgcmVnaW9uIGF0dGFjaGVkIHRvIGEgeHVhcnRwcworICoJCQkJcG9ydCwgY2FsbGVkIHdoZW4gdGhlIGRyaXZlciByZW1vdmVzIGEgeHVhcnRwcworICoJCQkJcG9ydCB2aWEgdWFydF9yZW1vdmVfb25lX3BvcnQoKS4KKyAqIEBwb3J0OiBIYW5kbGUgdG8gdGhlIHVhcnQgcG9ydCBzdHJ1Y3R1cmUKKyAqCisgKiovCitzdGF0aWMgdm9pZCB4dWFydHBzX3JlbGVhc2VfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXJlbGVhc2VfbWVtX3JlZ2lvbihwb3J0LT5tYXBiYXNlLCBYVUFSVFBTX1JFR0lTVEVSX1NQQUNFKTsKKwlpb3VubWFwKHBvcnQtPm1lbWJhc2UpOworCXBvcnQtPm1lbWJhc2UgPSBOVUxMOworfQorCisvKioKKyAqIHh1YXJ0cHNfY29uZmlnX3BvcnQgLSBDb25maWd1cmUgeHVhcnRwcywgY2FsbGVkIHdoZW4gdGhlIGRyaXZlciBhZGRzIGEKKyAqCQkJCXh1YXJ0cHMgcG9ydAorICogQHBvcnQ6IEhhbmRsZSB0byB0aGUgdWFydCBwb3J0IHN0cnVjdHVyZQorICogQGZsYWdzOiBJZiBhbnkKKyAqCisgKiovCitzdGF0aWMgdm9pZCB4dWFydHBzX2NvbmZpZ19wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBmbGFncykKK3sKKwlpZiAoZmxhZ3MgJiBVQVJUX0NPTkZJR19UWVBFICYmIHh1YXJ0cHNfcmVxdWVzdF9wb3J0KHBvcnQpID09IDApCisJCXBvcnQtPnR5cGUgPSBQT1JUX1hVQVJUUFM7Cit9CisKKy8qKgorICogeHVhcnRwc19nZXRfbWN0cmwgLSBHZXQgdGhlIG1vZGVtIGNvbnRyb2wgc3RhdGUKKyAqCisgKiBAcG9ydDogSGFuZGxlIHRvIHRoZSB1YXJ0IHBvcnQgc3RydWN0dXJlCisgKgorICogUmV0dXJucyB0aGUgbW9kZW0gY29udHJvbCBzdGF0ZQorICoKKyAqKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgeHVhcnRwc19nZXRfbWN0cmwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlyZXR1cm4gVElPQ01fQ1RTIHwgVElPQ01fRFNSIHwgVElPQ01fQ0FSOworfQorCitzdGF0aWMgdm9pZCB4dWFydHBzX3NldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgbWN0cmwpCit7CisJLyogTi9BICovCit9CisKK3N0YXRpYyB2b2lkIHh1YXJ0cHNfZW5hYmxlX21zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJLyogTi9BICovCit9CisKKy8qKiBUaGUgVUFSVCBvcGVyYXRpb25zIHN0cnVjdHVyZQorICovCitzdGF0aWMgc3RydWN0IHVhcnRfb3BzIHh1YXJ0cHNfb3BzID0geworCS5zZXRfbWN0cmwJPSB4dWFydHBzX3NldF9tY3RybCwKKwkuZ2V0X21jdHJsCT0geHVhcnRwc19nZXRfbWN0cmwsCisJLmVuYWJsZV9tcwk9IHh1YXJ0cHNfZW5hYmxlX21zLAorCisJLnN0YXJ0X3R4CT0geHVhcnRwc19zdGFydF90eCwJLyogU3RhcnQgdHJhbnNtaXR0aW5nICovCisJLnN0b3BfdHgJPSB4dWFydHBzX3N0b3BfdHgsCS8qIFN0b3AgdHJhbnNtaXNzaW9uICovCisJLnN0b3BfcngJPSB4dWFydHBzX3N0b3BfcngsCS8qIFN0b3AgcmVjZXB0aW9uICovCisJLnR4X2VtcHR5CT0geHVhcnRwc190eF9lbXB0eSwJLyogVHJhbnNtaXR0ZXIgYnVzeT8gKi8KKwkuYnJlYWtfY3RsCT0geHVhcnRwc19icmVha19jdGwsCS8qIFN0YXJ0L3N0b3AKKwkJCQkJCSAqIHRyYW5zbWl0dGluZyBicmVhaworCQkJCQkJICovCisJLnNldF90ZXJtaW9zCT0geHVhcnRwc19zZXRfdGVybWlvcywJLyogU2V0IHRlcm1pb3MgKi8KKwkuc3RhcnR1cAk9IHh1YXJ0cHNfc3RhcnR1cCwJLyogQXBwIG9wZW5zIHh1YXJ0cHMgKi8KKwkuc2h1dGRvd24JPSB4dWFydHBzX3NodXRkb3duLAkvKiBBcHAgY2xvc2VzIHh1YXJ0cHMgKi8KKwkudHlwZQkJPSB4dWFydHBzX3R5cGUsCQkvKiBTZXQgVUFSVCB0eXBlICovCisJLnZlcmlmeV9wb3J0CT0geHVhcnRwc192ZXJpZnlfcG9ydCwJLyogVmVyaWZpY2F0aW9uIG9mIHBvcnQKKwkJCQkJCSAqIHBhcmFtcworCQkJCQkJICovCisJLnJlcXVlc3RfcG9ydAk9IHh1YXJ0cHNfcmVxdWVzdF9wb3J0LAkvKiBDbGFpbSByZXNvdXJjZXMKKwkJCQkJCSAqIGFzc29jaWF0ZWQgd2l0aCBhCisJCQkJCQkgKiB4dWFydHBzIHBvcnQKKwkJCQkJCSAqLworCS5yZWxlYXNlX3BvcnQJPSB4dWFydHBzX3JlbGVhc2VfcG9ydCwJLyogUmVsZWFzZSByZXNvdXJjZXMKKwkJCQkJCSAqIGFzc29jaWF0ZWQgd2l0aCBhCisJCQkJCQkgKiB4dWFydHBzIHBvcnQKKwkJCQkJCSAqLworCS5jb25maWdfcG9ydAk9IHh1YXJ0cHNfY29uZmlnX3BvcnQsCS8qIENvbmZpZ3VyZSB3aGVuIGRyaXZlcgorCQkJCQkJICogYWRkcyBhIHh1YXJ0cHMgcG9ydAorCQkJCQkJICovCit9OworCitzdGF0aWMgc3RydWN0IHVhcnRfcG9ydCB4dWFydHBzX3BvcnRbMl07CisKKy8qKgorICogeHVhcnRwc19nZXRfcG9ydCAtIENvbmZpZ3VyZSB0aGUgcG9ydCBmcm9tIHRoZSBwbGF0Zm9ybSBkZXZpY2UgcmVzb3VyY2UKKyAqCQkJaW5mbworICoKKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIGEgdWFydF9wb3J0IG9yIE5VTEwgZm9yIGZhaWx1cmUKKyAqKi8KK3N0YXRpYyBzdHJ1Y3QgdWFydF9wb3J0ICp4dWFydHBzX2dldF9wb3J0KHZvaWQpCit7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKKwlpbnQgaWQ7CisKKwkvKiBGaW5kIHRoZSBuZXh0IHVudXNlZCBwb3J0ICovCisJZm9yIChpZCA9IDA7IGlkIDwgWFVBUlRQU19OUl9QT1JUUzsgaWQrKykKKwkJaWYgKHh1YXJ0cHNfcG9ydFtpZF0ubWFwYmFzZSA9PSAwKQorCQkJYnJlYWs7CisKKwlpZiAoaWQgPj0gWFVBUlRQU19OUl9QT1JUUykKKwkJcmV0dXJuIE5VTEw7CisKKwlwb3J0ID0gJnh1YXJ0cHNfcG9ydFtpZF07CisKKwkvKiBBdCB0aGlzIHBvaW50LCB3ZSd2ZSBnb3QgYW4gZW1wdHkgdWFydF9wb3J0IHN0cnVjdCwgaW5pdGlhbGl6ZSBpdCAqLworCXNwaW5fbG9ja19pbml0KCZwb3J0LT5sb2NrKTsKKwlwb3J0LT5tZW1iYXNlCT0gTlVMTDsKKwlwb3J0LT5pb2Jhc2UJPSAxOyAvKiBtYXJrIHBvcnQgaW4gdXNlICovCisJcG9ydC0+aXJxCT0gMDsKKwlwb3J0LT50eXBlCT0gUE9SVF9VTktOT1dOOworCXBvcnQtPmlvdHlwZQk9IFVQSU9fTUVNMzI7CisJcG9ydC0+ZmxhZ3MJPSBVUEZfQk9PVF9BVVRPQ09ORjsKKwlwb3J0LT5vcHMJPSAmeHVhcnRwc19vcHM7CisJcG9ydC0+Zmlmb3NpemUJPSBYVUFSVFBTX0ZJRk9fU0laRTsKKwlwb3J0LT5saW5lCT0gaWQ7CisJcG9ydC0+ZGV2CT0gTlVMTDsKKwlyZXR1cm4gcG9ydDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUNvbnNvbGUgZHJpdmVyIG9wZXJhdGlvbnMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBDT05GSUdfU0VSSUFMX1hJTElOWF9QU19VQVJUX0NPTlNPTEUKKy8qKgorICogeHVhcnRwc19jb25zb2xlX3dhaXRfdHggLSBXYWl0IGZvciB0aGUgVFggdG8gYmUgZnVsbAorICogQHBvcnQ6IEhhbmRsZSB0byB0aGUgdWFydCBwb3J0IHN0cnVjdHVyZQorICoKKyAqKi8KK3N0YXRpYyB2b2lkIHh1YXJ0cHNfY29uc29sZV93YWl0X3R4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJd2hpbGUgKCh4dWFydHBzX3JlYWRsKFhVQVJUUFNfU1JfT0ZGU0VUKSAmIFhVQVJUUFNfU1JfVFhFTVBUWSkKKwkJCQkhPSBYVUFSVFBTX1NSX1RYRU1QVFkpCisJCWJhcnJpZXIoKTsKK30KKworLyoqCisgKiB4dWFydHBzX2NvbnNvbGVfcHV0Y2hhciAtIHdyaXRlIHRoZSBjaGFyYWN0ZXIgdG8gdGhlIEZJRk8gYnVmZmVyCisgKiBAcG9ydDogSGFuZGxlIHRvIHRoZSB1YXJ0IHBvcnQgc3RydWN0dXJlCisgKiBAY2g6IENoYXJhY3RlciB0byBiZSB3cml0dGVuCisgKgorICoqLworc3RhdGljIHZvaWQgeHVhcnRwc19jb25zb2xlX3B1dGNoYXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGNoKQoreworCXh1YXJ0cHNfY29uc29sZV93YWl0X3R4KHBvcnQpOworCXh1YXJ0cHNfd3JpdGVsKGNoLCBYVUFSVFBTX0ZJRk9fT0ZGU0VUKTsKK30KKworLyoqCisgKiB4dWFydHBzX2NvbnNvbGVfd3JpdGUgLSBwZXJmb3JtIHdyaXRlIG9wZXJhdGlvbgorICogQHBvcnQ6IEhhbmRsZSB0byB0aGUgdWFydCBwb3J0IHN0cnVjdHVyZQorICogQHM6IFBvaW50ZXIgdG8gY2hhcmFjdGVyIGFycmF5CisgKiBAY291bnQ6IE5vIG9mIGNoYXJhY3RlcnMKKyAqKi8KK3N0YXRpYyB2b2lkIHh1YXJ0cHNfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnMsCisJCQkJdW5zaWduZWQgaW50IGNvdW50KQoreworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAmeHVhcnRwc19wb3J0W2NvLT5pbmRleF07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaW1yOworCWludCBsb2NrZWQgPSAxOworCisJaWYgKG9vcHNfaW5fcHJvZ3Jlc3MpCisJCWxvY2tlZCA9IHNwaW5fdHJ5bG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisJZWxzZQorCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCisJLyogc2F2ZSBhbmQgZGlzYWJsZSBpbnRlcnJ1cHQgKi8KKwlpbXIgPSB4dWFydHBzX3JlYWRsKFhVQVJUUFNfSU1SX09GRlNFVCk7CisJeHVhcnRwc193cml0ZWwoaW1yLCBYVUFSVFBTX0lEUl9PRkZTRVQpOworCisJdWFydF9jb25zb2xlX3dyaXRlKHBvcnQsIHMsIGNvdW50LCB4dWFydHBzX2NvbnNvbGVfcHV0Y2hhcik7CisJeHVhcnRwc19jb25zb2xlX3dhaXRfdHgocG9ydCk7CisKKwkvKiByZXN0b3JlIGludGVycnVwdCBzdGF0ZSwgaXQgc2VlbXMgbGlrZSB0aGVyZSBtYXkgYmUgYSBoL3cgYnVnCisJICogaW4gdGhhdCB0aGUgaW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciBzaG91bGQgbm90IG5lZWQgdG8gYmUKKwkgKiB3cml0dGVuIGJhc2VkIG9uIHRoZSBkYXRhIHNoZWV0CisJICovCisJeHVhcnRwc193cml0ZWwofmltciwgWFVBUlRQU19JRFJfT0ZGU0VUKTsKKwl4dWFydHBzX3dyaXRlbChpbXIsIFhVQVJUUFNfSUVSX09GRlNFVCk7CisKKwlpZiAobG9ja2VkKQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogeHVhcnRwc19jb25zb2xlX3NldHVwIC0gSW5pdGlhbGl6ZSB0aGUgdWFydCB0byBkZWZhdWx0IGNvbmZpZworICogQGNvOiBDb25zb2xlIGhhbmRsZQorICogQG9wdGlvbnM6IEluaXRpYWwgc2V0dGluZ3Mgb2YgdWFydAorICoKKyAqIFJldHVybnMgMCwgLUVOT0RFViBpZiBubyBkZXZpY2UKKyAqKi8KK3N0YXRpYyBpbnQgX19pbml0IHh1YXJ0cHNfY29uc29sZV9zZXR1cChzdHJ1Y3QgY29uc29sZSAqY28sIGNoYXIgKm9wdGlvbnMpCit7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZ4dWFydHBzX3BvcnRbY28tPmluZGV4XTsKKwlpbnQgYmF1ZCA9IDk2MDA7CisJaW50IGJpdHMgPSA4OworCWludCBwYXJpdHkgPSAnbic7CisJaW50IGZsb3cgPSAnbic7CisKKwlpZiAoY28tPmluZGV4IDwgMCB8fCBjby0+aW5kZXggPj0gWFVBUlRQU19OUl9QT1JUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXBvcnQtPm1hcGJhc2UpIHsKKwkJcHJfZGVidWcoImNvbnNvbGUgb24gdHR5UFMlaSBub3QgcHJlc2VudFxuIiwgY28tPmluZGV4KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKG9wdGlvbnMpCisJCXVhcnRfcGFyc2Vfb3B0aW9ucyhvcHRpb25zLCAmYmF1ZCwgJnBhcml0eSwgJmJpdHMsICZmbG93KTsKKworCXJldHVybiB1YXJ0X3NldF9vcHRpb25zKHBvcnQsIGNvLCBiYXVkLCBwYXJpdHksIGJpdHMsIGZsb3cpOworfQorCitzdGF0aWMgc3RydWN0IHVhcnRfZHJpdmVyIHh1YXJ0cHNfdWFydF9kcml2ZXI7CisKK3N0YXRpYyBzdHJ1Y3QgY29uc29sZSB4dWFydHBzX2NvbnNvbGUgPSB7CisJLm5hbWUJPSBYVUFSVFBTX1RUWV9OQU1FLAorCS53cml0ZQk9IHh1YXJ0cHNfY29uc29sZV93cml0ZSwKKwkuZGV2aWNlCT0gdWFydF9jb25zb2xlX2RldmljZSwKKwkuc2V0dXAJPSB4dWFydHBzX2NvbnNvbGVfc2V0dXAsCisJLmZsYWdzCT0gQ09OX1BSSU5UQlVGRkVSLAorCS5pbmRleAk9IC0xLCAvKiBTcGVjaWZpZWQgb24gdGhlIGNtZGxpbmUgKGUuZy4gY29uc29sZT10dHlQUyApICovCisJLmRhdGEJPSAmeHVhcnRwc191YXJ0X2RyaXZlciwKK307CisKKy8qKgorICogeHVhcnRwc19jb25zb2xlX2luaXQgLSBJbml0aWFsaXphdGlvbiBjYWxsCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIG90aGVyd2lzZQorICoqLworc3RhdGljIGludCBfX2luaXQgeHVhcnRwc19jb25zb2xlX2luaXQodm9pZCkKK3sKKwlyZWdpc3Rlcl9jb25zb2xlKCZ4dWFydHBzX2NvbnNvbGUpOworCXJldHVybiAwOworfQorCitjb25zb2xlX2luaXRjYWxsKHh1YXJ0cHNfY29uc29sZV9pbml0KTsKKworI2VuZGlmIC8qIENPTkZJR19TRVJJQUxfWElMSU5YX1BTX1VBUlRfQ09OU09MRSAqLworCisvKiogU3RydWN0dXJlIERlZmluaXRpb25zCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgeHVhcnRwc191YXJ0X2RyaXZlciA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCQkvKiBPd25lciAqLworCS5kcml2ZXJfbmFtZQk9IFhVQVJUUFNfTkFNRSwJCS8qIERyaXZlciBuYW1lICovCisJLmRldl9uYW1lCT0gWFVBUlRQU19UVFlfTkFNRSwJLyogTm9kZSBuYW1lICovCisJLm1ham9yCQk9IFhVQVJUUFNfTUFKT1IsCS8qIE1ham9yIG51bWJlciAqLworCS5taW5vcgkJPSBYVUFSVFBTX01JTk9SLAkvKiBNaW5vciBudW1iZXIgKi8KKwkubnIJCT0gWFVBUlRQU19OUl9QT1JUUywJLyogTnVtYmVyIG9mIFVBUlQgcG9ydHMgKi8KKyNpZmRlZiBDT05GSUdfU0VSSUFMX1hJTElOWF9QU19VQVJUX0NPTlNPTEUKKwkuY29ucwkJPSAmeHVhcnRwc19jb25zb2xlLAkvKiBDb25zb2xlICovCisjZW5kaWYKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUGxhdGZvcm0gYnVzIGJpbmRpbmcKKyAqLworLyoqCisgKiB4dWFydHBzX3Byb2JlIC0gUGxhdGZvcm0gZHJpdmVyIHByb2JlCisgKiBAcGRldjogUG9pbnRlciB0byB0aGUgcGxhdGZvcm0gZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBvdGhlcndpc2UKKyAqKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IHh1YXJ0cHNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmM7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgKnJlczI7CisJaW50IGNsayA9IDA7CisKKyNpZmRlZiBDT05GSUdfT0YKKwljb25zdCB1bnNpZ25lZCBpbnQgKnByb3A7CisKKwlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KHBkZXYtPmRldi5vZl9ub2RlLCAiY2xvY2siLCBOVUxMKTsKKwlpZiAocHJvcCkKKwkJY2xrID0gYmUzMl90b19jcHVwKHByb3ApOworI2Vsc2UKKwljbGsgPSAqKCh1bnNpZ25lZCBpbnQgKikocGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpKTsKKyNlbmRpZgorCWlmICghY2xrKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIGNsb2NrIHNwZWNpZmllZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpCisJCXJldHVybiAtRU5PREVWOworCisJcmVzMiA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKCFyZXMyKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIEluaXRpYWxpemUgdGhlIHBvcnQgc3RydWN0dXJlICovCisJcG9ydCA9IHh1YXJ0cHNfZ2V0X3BvcnQoKTsKKworCWlmICghcG9ydCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgZ2V0IHVhcnRfcG9ydCBzdHJ1Y3R1cmVcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9IGVsc2UgeworCQkvKiBSZWdpc3RlciB0aGUgcG9ydC4KKwkJICogVGhpcyBmdW5jdGlvbiBhbHNvIHJlZ2lzdGVycyB0aGlzIGRldmljZSB3aXRoIHRoZSB0dHkgbGF5ZXIKKwkJICogYW5kIHRyaWdnZXJzIGludm9jYXRpb24gb2YgdGhlIGNvbmZpZ19wb3J0KCkgZW50cnkgcG9pbnQuCisJCSAqLworCQlwb3J0LT5tYXBiYXNlID0gcmVzLT5zdGFydDsKKwkJcG9ydC0+aXJxID0gcmVzMi0+c3RhcnQ7CisJCXBvcnQtPmRldiA9ICZwZGV2LT5kZXY7CisJCXBvcnQtPnVhcnRjbGsgPSBjbGs7CisJCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBwb3J0KTsKKwkJcmMgPSB1YXJ0X2FkZF9vbmVfcG9ydCgmeHVhcnRwc191YXJ0X2RyaXZlciwgcG9ydCk7CisJCWlmIChyYykgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJ1YXJ0X2FkZF9vbmVfcG9ydCgpIGZhaWxlZDsgZXJyPSVpXG4iLCByYyk7CisJCQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgTlVMTCk7CisJCQlyZXR1cm4gcmM7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorfQorCisvKioKKyAqIHh1YXJ0cHNfcmVtb3ZlIC0gY2FsbGVkIHdoZW4gdGhlIHBsYXRmb3JtIGRyaXZlciBpcyB1bnJlZ2lzdGVyZWQKKyAqIEBwZGV2OiBQb2ludGVyIHRvIHRoZSBwbGF0Zm9ybSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIG90aGVyd2lzZQorICoqLworc3RhdGljIGludCBfX2RldmV4aXQgeHVhcnRwc19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCWludCByYyA9IDA7CisKKwkvKiBSZW1vdmUgdGhlIHh1YXJ0cHMgcG9ydCBmcm9tIHRoZSBzZXJpYWwgY29yZSAqLworCWlmIChwb3J0KSB7CisJCXJjID0gdWFydF9yZW1vdmVfb25lX3BvcnQoJnh1YXJ0cHNfdWFydF9kcml2ZXIsIHBvcnQpOworCQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgTlVMTCk7CisJCXBvcnQtPm1hcGJhc2UgPSAwOworCX0KKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogeHVhcnRwc19zdXNwZW5kIC0gc3VzcGVuZCBldmVudAorICogQHBkZXY6IFBvaW50ZXIgdG8gdGhlIHBsYXRmb3JtIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBzdGF0ZTogU3RhdGUgb2YgdGhlIGRldmljZQorICoKKyAqIFJldHVybnMgMAorICoqLworc3RhdGljIGludCB4dWFydHBzX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCS8qIENhbGwgdGhlIEFQSSBwcm92aWRlZCBpbiBzZXJpYWxfY29yZS5jIGZpbGUgd2hpY2ggaGFuZGxlcworCSAqIHRoZSBzdXNwZW5kLgorCSAqLworCXVhcnRfc3VzcGVuZF9wb3J0KCZ4dWFydHBzX3VhcnRfZHJpdmVyLCAmeHVhcnRwc19wb3J0W3BkZXYtPmlkXSk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogeHVhcnRwc19yZXN1bWUgLSBSZXN1bWUgYWZ0ZXIgYSBwcmV2aW91cyBzdXNwZW5kCisgKiBAcGRldjogUG9pbnRlciB0byB0aGUgcGxhdGZvcm0gZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIFJldHVybnMgMAorICoqLworc3RhdGljIGludCB4dWFydHBzX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXVhcnRfcmVzdW1lX3BvcnQoJnh1YXJ0cHNfdWFydF9kcml2ZXIsICZ4dWFydHBzX3BvcnRbcGRldi0+aWRdKTsKKwlyZXR1cm4gMDsKK30KKworLyogTWF0Y2ggdGFibGUgZm9yIG9mX3BsYXRmb3JtIGJpbmRpbmcgKi8KKworI2lmZGVmIENPTkZJR19PRgorc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgeHVhcnRwc19vZl9tYXRjaFtdIF9fZGV2aW5pdGRhdGEgPSB7CisJeyAuY29tcGF0aWJsZSA9ICJ4bG54LHh1YXJ0cHMiLCB9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeHVhcnRwc19vZl9tYXRjaCk7CisjZWxzZQorI2RlZmluZSB4dWFydHBzX29mX21hdGNoIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB4dWFydHBzX3BsYXRmb3JtX2RyaXZlciA9IHsKKwkucHJvYmUgICA9IHh1YXJ0cHNfcHJvYmUsCQkvKiBQcm9iZSBtZXRob2QgKi8KKwkucmVtb3ZlICA9IF9fZXhpdF9wKHh1YXJ0cHNfcmVtb3ZlKSwJLyogRGV0YWNoIG1ldGhvZCAqLworCS5zdXNwZW5kID0geHVhcnRwc19zdXNwZW5kLAkJLyogU3VzcGVuZCAqLworCS5yZXN1bWUgID0geHVhcnRwc19yZXN1bWUsCQkvKiBSZXN1bWUgYWZ0ZXIgYSBzdXNwZW5kICovCisJLmRyaXZlciAgPSB7CisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkubmFtZSA9IFhVQVJUUFNfTkFNRSwJCS8qIERyaXZlciBuYW1lICovCisJCS5vZl9tYXRjaF90YWJsZSA9IHh1YXJ0cHNfb2ZfbWF0Y2gsCisJCX0sCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE1vZHVsZSBJbml0IGFuZCBFeGl0CisgKi8KKy8qKgorICogeHVhcnRwc19pbml0IC0gSW5pdGlhbCBkcml2ZXIgcmVnaXN0cmF0aW9uIGNhbGwKKyAqCisgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHJlZ2lzdHJhdGlvbiB3YXMgc3VjY2Vzc2Z1bCBvciBub3QKKyAqKi8KK3N0YXRpYyBpbnQgX19pbml0IHh1YXJ0cHNfaW5pdCh2b2lkKQoreworCWludCByZXR2YWwgPSAwOworCisJLyogUmVnaXN0ZXIgdGhlIHh1YXJ0cHMgZHJpdmVyIHdpdGggdGhlIHNlcmlhbCBjb3JlICovCisJcmV0dmFsID0gdWFydF9yZWdpc3Rlcl9kcml2ZXIoJnh1YXJ0cHNfdWFydF9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwkvKiBSZWdpc3RlciB0aGUgcGxhdGZvcm0gZHJpdmVyICovCisJcmV0dmFsID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ4dWFydHBzX3BsYXRmb3JtX2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmeHVhcnRwc191YXJ0X2RyaXZlcik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKioKKyAqIHh1YXJ0cHNfZXhpdCAtIERyaXZlciB1bnJlZ2lzdHJhdGlvbiBjYWxsCisgKiovCitzdGF0aWMgdm9pZCBfX2V4aXQgeHVhcnRwc19leGl0KHZvaWQpCit7CisJLyogVGhlIG9yZGVyIG9mIHVucmVnaXN0cmF0aW9uIGlzIGltcG9ydGFudC4gVW5yZWdpc3RlciB0aGUKKwkgKiBVQVJUIGRyaXZlciBiZWZvcmUgdGhlIHBsYXRmb3JtIGRyaXZlciBjcmFzaGVzIHRoZSBzeXN0ZW0uCisJICovCisKKwkvKiBVbnJlZ2lzdGVyIHRoZSBwbGF0Zm9ybSBkcml2ZXIgKi8KKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmeHVhcnRwc19wbGF0Zm9ybV9kcml2ZXIpOworCisJLyogVW5yZWdpc3RlciB0aGUgeHVhcnRwcyBkcml2ZXIgKi8KKwl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZ4dWFydHBzX3VhcnRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoeHVhcnRwc19pbml0KTsKK21vZHVsZV9leGl0KHh1YXJ0cHNfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBQUyBVQVJUIik7CitNT0RVTEVfQVVUSE9SKCJYaWxpbnggSW5jLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc3luY2xpbmsuYyBiL2RyaXZlcnMvdHR5L3N5bmNsaW5rLmMKaW5kZXggMjdkYTIzZC4uMjcyZTQxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc3luY2xpbmsuYworKysgYi9kcml2ZXJzL3R0eS9zeW5jbGluay5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGxpbnV4L2RyaXZlcnMvY2hhci9zeW5jbGluay5jCi0gKgogICogJElkOiBzeW5jbGluay5jLHYgNC4zOCAyMDA1LzExLzA3IDE2OjMwOjM0IHBhdWxrZiBFeHAgJAogICoKICAqIERldmljZSBkcml2ZXIgZm9yIE1pY3JvZ2F0ZSBTeW5jTGluayBJU0EgYW5kIFBDSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvdHR5X2J1ZmZlci5jIGIvZHJpdmVycy90dHkvdHR5X2J1ZmZlci5jCmluZGV4IGYxYTc5MTguLjQ2ZGUyZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3R0eV9idWZmZXIuYworKysgYi9kcml2ZXJzL3R0eS90dHlfYnVmZmVyLmMKQEAgLTQxNiw2ICs0MTYsNyBAQAogCQlzdHJ1Y3QgdHR5X2J1ZmZlciAqaGVhZCwgKnRhaWwgPSB0dHktPmJ1Zi50YWlsOwogCQlpbnQgc2Vlbl90YWlsID0gMDsKIAkJd2hpbGUgKChoZWFkID0gdHR5LT5idWYuaGVhZCkgIT0gTlVMTCkgeworCQkJaW50IGNvcGllZDsKIAkJCWludCBjb3VudDsKIAkJCWNoYXIgKmNoYXJfYnVmOwogCQkJdW5zaWduZWQgY2hhciAqZmxhZ19idWY7CkBAIC00NDIsMTcgKzQ0MywxOSBAQAogCQkJICAgbGluZSBkaXNjaXBsaW5lIGFzIHdlIHdhbnQgdG8gZW1wdHkgdGhlIHF1ZXVlICovCiAJCQlpZiAodGVzdF9iaXQoVFRZX0ZMVVNIUEVORElORywgJnR0eS0+ZmxhZ3MpKQogCQkJCWJyZWFrOwotCQkJaWYgKCF0dHktPnJlY2VpdmVfcm9vbSB8fCBzZWVuX3RhaWwpCi0JCQkJYnJlYWs7Ci0JCQlpZiAoY291bnQgPiB0dHktPnJlY2VpdmVfcm9vbSkKLQkJCQljb3VudCA9IHR0eS0+cmVjZWl2ZV9yb29tOwogCQkJY2hhcl9idWYgPSBoZWFkLT5jaGFyX2J1Zl9wdHIgKyBoZWFkLT5yZWFkOwogCQkJZmxhZ19idWYgPSBoZWFkLT5mbGFnX2J1Zl9wdHIgKyBoZWFkLT5yZWFkOwotCQkJaGVhZC0+cmVhZCArPSBjb3VudDsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKLQkJCWRpc2MtPm9wcy0+cmVjZWl2ZV9idWYodHR5LCBjaGFyX2J1ZiwKKwkJCWNvcGllZCA9IGRpc2MtPm9wcy0+cmVjZWl2ZV9idWYodHR5LCBjaGFyX2J1ZiwKIAkJCQkJCQlmbGFnX2J1ZiwgY291bnQpOwogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKKworCQkJaGVhZC0+cmVhZCArPSBjb3BpZWQ7CisKKwkJCWlmIChjb3BpZWQgPT0gMCB8fCBzZWVuX3RhaWwpIHsKKwkJCQlzY2hlZHVsZV93b3JrKCZ0dHktPmJ1Zi53b3JrKTsKKwkJCQlicmVhazsKKwkJCX0KIAkJfQogCQljbGVhcl9iaXQoVFRZX0ZMVVNISU5HLCAmdHR5LT5mbGFncyk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvdHR5X2lvLmMgYi9kcml2ZXJzL3R0eS90dHlfaW8uYwppbmRleCBkN2Q1MGI0Li42NTU2Zjc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS90dHlfaW8uYworKysgYi9kcml2ZXJzL3R0eS90dHlfaW8uYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAgbGludXgvZHJpdmVycy9jaGFyL3R0eV9pby5jCi0gKgogICogIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiAgTGludXMgVG9ydmFsZHMKICAqLwogCkBAIC05NjQsMTIgKzk2MiwxNCBAQAogfQogCiB2b2lkIHR0eV93cml0ZV91bmxvY2soc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKKwlfX3JlbGVhc2VzKCZ0dHktPmF0b21pY193cml0ZV9sb2NrKQogewogCW11dGV4X3VubG9jaygmdHR5LT5hdG9taWNfd3JpdGVfbG9jayk7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3BvbGwoJnR0eS0+d3JpdGVfd2FpdCwgUE9MTE9VVCk7CiB9CiAKIGludCB0dHlfd3JpdGVfbG9jayhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgbmRlbGF5KQorCV9fYWNxdWlyZXMoJnR0eS0+YXRvbWljX3dyaXRlX2xvY2spCiB7CiAJaWYgKCFtdXRleF90cnlsb2NrKCZ0dHktPmF0b21pY193cml0ZV9sb2NrKSkgewogCQlpZiAobmRlbGF5KQpAQCAtMTM5MSwxNiArMTM5MSwxNSBAQAogCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKIAogCXR0eSA9IGFsbG9jX3R0eV9zdHJ1Y3QoKTsKLQlpZiAoIXR0eSkKLQkJZ290byBmYWlsX25vX21lbTsKKwlpZiAoIXR0eSkgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycl9tb2R1bGVfcHV0OworCX0KIAlpbml0aWFsaXplX3R0eV9zdHJ1Y3QodHR5LCBkcml2ZXIsIGlkeCk7CiAKIAlyZXR2YWwgPSB0dHlfZHJpdmVyX2luc3RhbGxfdHR5KGRyaXZlciwgdHR5KTsKLQlpZiAocmV0dmFsIDwgMCkgewotCQlmcmVlX3R0eV9zdHJ1Y3QodHR5KTsKLQkJbW9kdWxlX3B1dChkcml2ZXItPm93bmVyKTsKLQkJcmV0dXJuIEVSUl9QVFIocmV0dmFsKTsKLQl9CisJaWYgKHJldHZhbCA8IDApCisJCWdvdG8gZXJyX2RlaW5pdF90dHk7CiAKIAkvKgogCSAqIFN0cnVjdHVyZXMgYWxsIGluc3RhbGxlZCAuLi4gY2FsbCB0aGUgbGRpc2Mgb3BlbiByb3V0aW5lcy4KQEAgLTE0MDksMTUgKzE0MDgsMTggQEAKIAkgKi8KIAlyZXR2YWwgPSB0dHlfbGRpc2Nfc2V0dXAodHR5LCB0dHktPmxpbmspOwogCWlmIChyZXR2YWwpCi0JCWdvdG8gcmVsZWFzZV9tZW1fb3V0OworCQlnb3RvIGVycl9yZWxlYXNlX3R0eTsKIAlyZXR1cm4gdHR5OwogCi1mYWlsX25vX21lbToKK2Vycl9kZWluaXRfdHR5OgorCWRlaW5pdGlhbGl6ZV90dHlfc3RydWN0KHR0eSk7CisJZnJlZV90dHlfc3RydWN0KHR0eSk7CitlcnJfbW9kdWxlX3B1dDoKIAltb2R1bGVfcHV0KGRyaXZlci0+b3duZXIpOwotCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCXJldHVybiBFUlJfUFRSKHJldHZhbCk7CiAKIAkvKiBjYWxsIHRoZSB0dHkgcmVsZWFzZV90dHkgcm91dGluZSB0byBjbGVhbiBvdXQgdGhpcyBzbG90ICovCi1yZWxlYXNlX21lbV9vdXQ6CitlcnJfcmVsZWFzZV90dHk6CiAJaWYgKHByaW50a19yYXRlbGltaXQoKSkKIAkJcHJpbnRrKEtFUk5fSU5GTyAidHR5X2luaXRfZGV2OiBsZGlzYyBvcGVuIGZhaWxlZCwgIgogCQkJCSAiY2xlYXJpbmcgc2xvdCAlZFxuIiwgaWR4KTsKQEAgLTE4OTIsNiArMTg5NCw3IEBACiAJcmV0dmFsID0gdHR5X2FkZF9maWxlKHR0eSwgZmlscCk7CiAJaWYgKHJldHZhbCkgewogCQl0dHlfdW5sb2NrKCk7CisJCXR0eV9yZWxlYXNlKGlub2RlLCBmaWxwKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKQEAgLTE5MDIsMTIgKzE5MDUsMTAgQEAKICNpZmRlZiBUVFlfREVCVUdfSEFOR1VQCiAJcHJpbnRrKEtFUk5fREVCVUcgIm9wZW5pbmcgJXMuLi4iLCB0dHktPm5hbWUpOwogI2VuZGlmCi0JaWYgKCFyZXR2YWwpIHsKLQkJaWYgKHR0eS0+b3BzLT5vcGVuKQotCQkJcmV0dmFsID0gdHR5LT5vcHMtPm9wZW4odHR5LCBmaWxwKTsKLQkJZWxzZQotCQkJcmV0dmFsID0gLUVOT0RFVjsKLQl9CisJaWYgKHR0eS0+b3BzLT5vcGVuKQorCQlyZXR2YWwgPSB0dHktPm9wcy0+b3Blbih0dHksIGZpbHApOworCWVsc2UKKwkJcmV0dmFsID0gLUVOT0RFVjsKIAlmaWxwLT5mX2ZsYWdzID0gc2F2ZWRfZmxhZ3M7CiAKIAlpZiAoIXJldHZhbCAmJiB0ZXN0X2JpdChUVFlfRVhDTFVTSVZFLCAmdHR5LT5mbGFncykgJiYKQEAgLTI4ODgsNiArMjg4OSwyMCBAQAogfQogCiAvKioKKyAqCWRlaW5pdGlhbGl6ZV90dHlfc3RydWN0CisgKglAdHR5OiB0dHkgdG8gZGVpbml0aWFsaXplCisgKgorICoJVGhpcyBzdWJyb3V0aW5lIGRlaW5pdGlhbGl6ZXMgYSB0dHkgc3RydWN0dXJlIHRoYXQgaGFzIGJlZW4gbmV3bHkKKyAqCWFsbG9jYXRlZCBidXQgdHR5X3JlbGVhc2UgY2Fubm90IGJlIGNhbGxlZCBvbiB0aGF0IHlldC4KKyAqCisgKglMb2NraW5nOiBub25lIC0gdHR5IGluIHF1ZXN0aW9uIG11c3Qgbm90IGJlIGV4cG9zZWQgYXQgdGhpcyBwb2ludAorICovCit2b2lkIGRlaW5pdGlhbGl6ZV90dHlfc3RydWN0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJdHR5X2xkaXNjX2RlaW5pdCh0dHkpOworfQorCisvKioKICAqCXR0eV9wdXRfY2hhcgktCXdyaXRlIG9uZSBjaGFyYWN0ZXIgdG8gYSB0dHkKICAqCUB0dHk6IHR0eQogICoJQGNoOiBjaGFyYWN0ZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3R0eV9pb2N0bC5jIGIvZHJpdmVycy90dHkvdHR5X2lvY3RsLmMKaW5kZXggMjE1NzRjYi4uNTNmMjQ0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvdHR5X2lvY3RsLmMKKysrIGIvZHJpdmVycy90dHkvdHR5X2lvY3RsLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogIGxpbnV4L2RyaXZlcnMvY2hhci90dHlfaW9jdGwuYwotICoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQgIExpbnVzIFRvcnZhbGRzCiAgKgogICogTW9kaWZpZWQgYnkgRnJlZCBOLiB2YW4gS2VtcGVuLCAwMS8yOS85MywgdG8gYWRkIGxpbmUgZGlzY2lwbGluZXMKQEAgLTMwOSw3ICszMDcsNyBAQAogICoJQG9zcGVlZDogb3V0cHV0IHNwZWVkCiAgKgogICoJRW5jb2RlIHRoZSBzcGVlZHMgc2V0IGludG8gdGhlIHBhc3NlZCB0ZXJtaW9zIHN0cnVjdHVyZS4gVGhpcyBpcwotICoJdXNlZCBhcyBhIGxpYnJhcnkgaGVscGVyIGZvciBkcml2ZXJzIG9zIHRoYXQgdGhleSBjYW4gcmVwb3J0IGJhY2sKKyAqCXVzZWQgYXMgYSBsaWJyYXJ5IGhlbHBlciBmb3IgZHJpdmVycyBzbyB0aGF0IHRoZXkgY2FuIHJlcG9ydCBiYWNrCiAgKgl0aGUgYWN0dWFsIHNwZWVkIHNlbGVjdGVkIHdoZW4gaXQgZGlmZmVycyBmcm9tIHRoZSBzcGVlZCByZXF1ZXN0ZWQKICAqCiAgKglGb3IgbWF4aW1hbCBiYWNrIGNvbXBhdGliaWxpdHkgd2l0aCBsZWdhY3kgU1lTNS9QT1NJWCAqbml4IGJlaGF2aW91cgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvdHR5X2xkaXNjLmMgYi9kcml2ZXJzL3R0eS90dHlfbGRpc2MuYwppbmRleCBlMTllMTM2Li41ZDAxZDMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS90dHlfbGRpc2MuYworKysgYi9kcml2ZXJzL3R0eS90dHlfbGRpc2MuYwpAQCAtOTU2LDYgKzk1NiwxOSBAQAogCXR0eV9sZGlzY19hc3NpZ24odHR5LCBsZCk7CiB9CiAKKy8qKgorICoJdHR5X2xkaXNjX2luaXQJCS0JbGRpc2MgY2xlYW51cCBmb3IgbmV3IHR0eQorICoJQHR0eTogdHR5IHRoYXQgd2FzIGFsbG9jYXRlZCByZWNlbnRseQorICoKKyAqCVRoZSB0dHkgc3RydWN0dXJlIG11c3Qgbm90IGJlY29tcGxldGVseSBzZXQgdXAgKHR0eV9sZGlzY19zZXR1cCkgd2hlbgorICogICAgICB0aGlzIGNhbGwgaXMgbWFkZS4KKyAqLwordm9pZCB0dHlfbGRpc2NfZGVpbml0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJcHV0X2xkaXNjKHR0eS0+bGRpc2MpOworCXR0eV9sZGlzY19hc3NpZ24odHR5LCBOVUxMKTsKK30KKwogdm9pZCB0dHlfbGRpc2NfYmVnaW4odm9pZCkKIHsKIAkvKiBTZXR1cCB0aGUgZGVmYXVsdCBUVFkgbGluZSBkaXNjaXBsaW5lLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvdHR5X211dGV4LmMgYi9kcml2ZXJzL3R0eS90dHlfbXV0ZXguYwppbmRleCAxMzM2OTc1Li4zYjJiYjc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS90dHlfbXV0ZXguYworKysgYi9kcml2ZXJzL3R0eS90dHlfbXV0ZXguYwpAQCAtMSw2ICsxLDMgQEAKLS8qCi0gKiBkcml2ZXJzL2NoYXIvdHR5X2xvY2suYwotICovCiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3Z0L2tleWJvYXJkLmMgYi9kcml2ZXJzL3R0eS92dC9rZXlib2FyZC5jCmluZGV4IGQ2YjM0MmIuLjM3NjFjY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3Z0L2tleWJvYXJkLmMKKysrIGIvZHJpdmVycy90dHkvdnQva2V5Ym9hcmQuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBsaW51eC9kcml2ZXJzL2NoYXIva2V5Ym9hcmQuYwotICoKICAqIFdyaXR0ZW4gZm9yIGxpbnV4IGJ5IEpvaGFuIE15cmVlbiBhcyBhIHRyYW5zbGF0aW9uIGZyb20KICAqIHRoZSBhc3NlbWJseSB2ZXJzaW9uIGJ5IExpbnVzICh3aXRoIGRpYWNyaXRpY2FscyBhZGRlZCkKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS92dC9zZWxlY3Rpb24uYyBiL2RyaXZlcnMvdHR5L3Z0L3NlbGVjdGlvbi5jCmluZGV4IGFkZjBhZDIuLjY3YjFkMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3Z0L3NlbGVjdGlvbi5jCisrKyBiL2RyaXZlcnMvdHR5L3Z0L3NlbGVjdGlvbi5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGxpbnV4L2RyaXZlcnMvY2hhci9zZWxlY3Rpb24uYwotICoKICAqIFRoaXMgbW9kdWxlIGV4cG9ydHMgdGhlIGZ1bmN0aW9uczoKICAqCiAgKiAgICAgJ2ludCBzZXRfc2VsZWN0aW9uKHN0cnVjdCB0aW9jbF9zZWxlY3Rpb24gX191c2VyICosIHN0cnVjdCB0dHlfc3RydWN0ICopJwpAQCAtMzM0LDggKzMzMiw3IEBACiAJCQljb250aW51ZTsKIAkJfQogCQljb3VudCA9IHNlbF9idWZmZXJfbHRoIC0gcGFzdGVkOwotCQljb3VudCA9IG1pbihjb3VudCwgdHR5LT5yZWNlaXZlX3Jvb20pOwotCQl0dHktPmxkaXNjLT5vcHMtPnJlY2VpdmVfYnVmKHR0eSwgc2VsX2J1ZmZlciArIHBhc3RlZCwKKwkJY291bnQgPSB0dHktPmxkaXNjLT5vcHMtPnJlY2VpdmVfYnVmKHR0eSwgc2VsX2J1ZmZlciArIHBhc3RlZCwKIAkJCQkJCQkJTlVMTCwgY291bnQpOwogCQlwYXN0ZWQgKz0gY291bnQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMgYi9kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYwppbmRleCAxNTY0MjYxLi42NjgyNWM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYworKysgYi9kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBsaW51eC9kcml2ZXJzL2NoYXIvdmNfc2NyZWVuLmMKLSAqCiAgKiBQcm92aWRlIGFjY2VzcyB0byB2aXJ0dWFsIGNvbnNvbGUgbWVtb3J5LgogICogL2Rldi92Y3MwOiB0aGUgc2NyZWVuIGFzIGl0IGlzIGJlaW5nIHZpZXdlZCByaWdodCBub3cgKHBvc3NpYmx5IHNjcm9sbGVkKQogICogL2Rldi92Y3NOOiB0aGUgc2NyZWVuIG9mIC9kZXYvdHR5TiAoMSA8PSBOIDw9IDYzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvdnQvdnQuYyBiL2RyaXZlcnMvdHR5L3Z0L3Z0LmMKaW5kZXggNGJlYTFlZi4uYjM5MTViNyAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvdnQvdnQuYworKysgYi9kcml2ZXJzL3R0eS92dC92dC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICBsaW51eC9kcml2ZXJzL2NoYXIvdnQuYwotICoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgIExpbnVzIFRvcnZhbGRzCiAgKi8KIApAQCAtODU4LDcgKzg1Niw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBvbGRfb3JpZ2luLCBuZXdfb3JpZ2luLCBuZXdfc2NyX2VuZCwgcmx0aCwgcnJlbSwgZXJyID0gMDsKIAl1bnNpZ25lZCBsb25nIGVuZDsKLQl1bnNpZ25lZCBpbnQgb2xkX2NvbHMsIG9sZF9yb3dzLCBvbGRfcm93X3NpemUsIG9sZF9zY3JlZW5fc2l6ZTsKKwl1bnNpZ25lZCBpbnQgb2xkX3Jvd3MsIG9sZF9yb3dfc2l6ZTsKIAl1bnNpZ25lZCBpbnQgbmV3X2NvbHMsIG5ld19yb3dzLCBuZXdfcm93X3NpemUsIG5ld19zY3JlZW5fc2l6ZTsKIAl1bnNpZ25lZCBpbnQgdXNlcjsKIAl1bnNpZ25lZCBzaG9ydCAqbmV3c2NyZWVuOwpAQCAtODg3LDkgKzg4NSw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJb2xkX3Jvd3MgPSB2Yy0+dmNfcm93czsKLQlvbGRfY29scyA9IHZjLT52Y19jb2xzOwogCW9sZF9yb3dfc2l6ZSA9IHZjLT52Y19zaXplX3JvdzsKLQlvbGRfc2NyZWVuX3NpemUgPSB2Yy0+dmNfc2NyZWVuYnVmX3NpemU7CiAKIAllcnIgPSByZXNpemVfc2NyZWVuKHZjLCBuZXdfY29scywgbmV3X3Jvd3MsIHVzZXIpOwogCWlmIChlcnIpIHsKQEAgLTExOTcsNiArMTE5MywxMyBAQAogCQkJCQkgICAgICB2Yy0+dmNfeCArIDEpOwogCQkJfQogCQkJYnJlYWs7CisJCWNhc2UgMzogLyogZXJhc2Ugc2Nyb2xsLWJhY2sgYnVmZmVyIChhbmQgd2hvbGUgZGlzcGxheSkgKi8KKwkJCXNjcl9tZW1zZXR3KHZjLT52Y19zY3JlZW5idWYsIHZjLT52Y192aWRlb19lcmFzZV9jaGFyLAorCQkJCSAgICB2Yy0+dmNfc2NyZWVuYnVmX3NpemUgPj4gMSk7CisJCQlzZXRfb3JpZ2luKHZjKTsKKwkJCWlmIChDT05fSVNfVklTSUJMRSh2YykpCisJCQkJdXBkYXRlX3NjcmVlbih2Yyk7CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KIAkJY2FzZSAyOiAvKiBlcmFzZSB3aG9sZSBkaXNwbGF5ICovCiAJCQljb3VudCA9IHZjLT52Y19jb2xzICogdmMtPnZjX3Jvd3M7CiAJCQlzdGFydCA9ICh1bnNpZ25lZCBzaG9ydCAqKXZjLT52Y19vcmlnaW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS92dC92dF9pb2N0bC5jIGIvZHJpdmVycy90dHkvdnQvdnRfaW9jdGwuYwppbmRleCA5MzdkMTcyLi41ZTA5NmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS92dC92dF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvdHR5L3Z0L3Z0X2lvY3RsLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogIGxpbnV4L2RyaXZlcnMvY2hhci92dF9pb2N0bC5jCi0gKgogICogIENvcHlyaWdodCAoQykgMTk5MiBvYnogdW5kZXIgdGhlIGxpbnV4IGNvcHlyaWdodAogICoKICAqICBEeW5hbWljIGRpYWNyaXRpY2FsIGhhbmRsaW5nIC0gYWViQGN3aS5ubCAtIERlYyAxOTkzCkBAIC02OTgsMTAgKzY5NiwyMyBAQAogCQlicmVhazsKIAogCWNhc2UgS0RHS0JNT0RFOgotCQl1aXZhbCA9ICgoa2JkLT5rYmRtb2RlID09IFZDX1JBVykgPyBLX1JBVyA6Ci0JCQkJIChrYmQtPmtiZG1vZGUgPT0gVkNfTUVESVVNUkFXKSA/IEtfTUVESVVNUkFXIDoKLQkJCQkgKGtiZC0+a2JkbW9kZSA9PSBWQ19VTklDT0RFKSA/IEtfVU5JQ09ERSA6Ci0JCQkJIEtfWExBVEUpOworCQlzd2l0Y2ggKGtiZC0+a2JkbW9kZSkgeworCQljYXNlIFZDX1JBVzoKKwkJCXVpdmFsID0gS19SQVc7CisJCQlicmVhazsKKwkJY2FzZSBWQ19NRURJVU1SQVc6CisJCQl1aXZhbCA9IEtfTUVESVVNUkFXOworCQkJYnJlYWs7CisJCWNhc2UgVkNfVU5JQ09ERToKKwkJCXVpdmFsID0gS19VTklDT0RFOworCQkJYnJlYWs7CisJCWNhc2UgVkNfT0ZGOgorCQkJdWl2YWwgPSBLX09GRjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdWl2YWwgPSBLX1hMQVRFOworCQkJYnJlYWs7CisJCX0KIAkJZ290byBzZXRpbnQ7CiAKIAkvKiB0aGlzIGNvdWxkIGJlIGZvbGRlZCBpbnRvIEtEU0tCTU9ERSwgYnV0IGZvciBjb21wYXRpYmlsaXR5CkBAIC0xNDk5LDcgKzE1MTAsNiBAQAogewogCXN0cnVjdCB2Y19kYXRhICp2YyA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGNvbnNvbGVfZm9udF9vcCBvcDsJLyogdXNlZCBpbiBtdWx0aXBsZSBwbGFjZXMgaGVyZSAqLwotCXN0cnVjdCBrYmRfc3RydWN0ICprYmQ7CiAJdW5zaWduZWQgaW50IGNvbnNvbGU7CiAJdm9pZCBfX3VzZXIgKnVwID0gKHZvaWQgX191c2VyICopYXJnOwogCWludCBwZXJtOwpAQCAtMTUyMiw3ICsxNTMyLDYgQEAKIAlpZiAoY3VycmVudC0+c2lnbmFsLT50dHkgPT0gdHR5IHx8IGNhcGFibGUoQ0FQX1NZU19UVFlfQ09ORklHKSkKIAkJcGVybSA9IDE7CiAKLQlrYmQgPSBrYmRfdGFibGUgKyBjb25zb2xlOwogCXN3aXRjaCAoY21kKSB7CiAJLyoKIAkgKiB0aGVzZSBuZWVkIHNwZWNpYWwgaGFuZGxlcnMgZm9yIGluY29tcGF0aWJsZSBkYXRhIHN0cnVjdHVyZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL0tjb25maWcgYi9kcml2ZXJzL3VzYi9LY29uZmlnCmluZGV4IDAwNjQ4OWQuLjQ4ZjE3ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvS2NvbmZpZwpAQCAtNjUsOCArNjUsMTAgQEAKIAlkZWZhdWx0IHkgaWYgQVJDSF9DTlMzWFhYCiAJZGVmYXVsdCB5IGlmIEFSQ0hfVlQ4NTAwCiAJZGVmYXVsdCB5IGlmIFBMQVRfU1BFQVIKKwlkZWZhdWx0IHkgaWYgUExBVF9TNVAKIAlkZWZhdWx0IHkgaWYgQVJDSF9NU00KIAlkZWZhdWx0IHkgaWYgTUlDUk9CTEFaRQorCWRlZmF1bHQgeSBpZiBTUEFSQ19MRU9OCiAJZGVmYXVsdCBQQ0kKIAogIyBBUk0gU0ExMTExIGNoaXBzIGhhdmUgYSBub24tUENJIGJhc2VkICJPSENJLWNvbXBhdGlibGUiIFVTQiBob3N0IGludGVyZmFjZS4KQEAgLTExNiw2ICsxMTgsOCBAQAogCiBzb3VyY2UgImRyaXZlcnMvdXNiL211c2IvS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL3VzYi9yZW5lc2FzX3VzYmhzL0tjb25maWciCisKIHNvdXJjZSAiZHJpdmVycy91c2IvY2xhc3MvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL01ha2VmaWxlCmluZGV4IDIzOWYwNTAuLjMwZGRmOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL01ha2VmaWxlCkBAIC0yMiw2ICsyMiw3IEBACiBvYmotJChDT05GSUdfVVNCX0hXQV9IQ0QpCSs9IGhvc3QvCiBvYmotJChDT05GSUdfVVNCX0lTUDE3NjBfSENEKQkrPSBob3N0Lwogb2JqLSQoQ09ORklHX1VTQl9JTVgyMV9IQ0QpCSs9IGhvc3QvCitvYmotJChDT05GSUdfVVNCX0ZTTF9NUEhfRFJfT0YpCSs9IGhvc3QvCiAKIG9iai0kKENPTkZJR19VU0JfQzY3WDAwX0hDRCkJKz0gYzY3eDAwLwogCkBAIC00NSwzICs0Niw4IEBACiAKIG9iai0kKENPTkZJR19VU0JfQVRNKQkJKz0gYXRtLwogb2JqLSQoQ09ORklHX1VTQl9TUEVFRFRPVUNIKQkrPSBhdG0vCisKK29iai0kKENPTkZJR19VU0JfTVVTQl9IRFJDKQkrPSBtdXNiLworb2JqLSQoQ09ORklHX1VTQl9SRU5FU0FTX1VTQkhTKQkrPSByZW5lc2FzX3VzYmhzLworb2JqLSQoQ09ORklHX1VTQl9PVEdfVVRJTFMpCSs9IG90Zy8KK29iai0kKENPTkZJR19VU0JfR0FER0VUKQkrPSBnYWRnZXQvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKaW5kZXggZTA1N2U1My4uMzk1YTM0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYwpAQCAtNywzNSArNywxMiBAQAogICogQ29weXJpZ2h0IChjKSAyMDAwIFZvanRlY2ggUGF2bGlrCTx2b2p0ZWNoQHN1c2UuY3o+CiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQgT2xpdmVyIE5ldWt1bQk8b2xpdmVyQG5ldWt1bS5uYW1lPgogICogQ29weXJpZ2h0IChjKSAyMDA1IERhdmlkIEt1YmljZWsJPGRhdmVAYXdrLmN6PgorICogQ29weXJpZ2h0IChjKSAyMDExIEpvaGFuIEhvdm9sZAk8amhvdm9sZEBnbWFpbC5jb20+CiAgKgogICogVVNCIEFic3RyYWN0IENvbnRyb2wgTW9kZWwgZHJpdmVyIGZvciBVU0IgbW9kZW1zIGFuZCBJU0ROIGFkYXB0ZXJzCiAgKgogICogU3BvbnNvcmVkIGJ5IFN1U0UKICAqCi0gKiBDaGFuZ2VMb2c6Ci0gKgl2MC45ICAtIHRob3JvdWdoIGNsZWFuaW5nLCBVUkJpZmljYXRpb24sIGFsbW9zdCBhIHJld3JpdGUKLSAqCXYwLjEwIC0gc29tZSBtb3JlIGNsZWFudXBzCi0gKgl2MC4xMSAtIGZpeGVkIGZsb3cgY29udHJvbCwgcmVhZCBlcnJvciBkb2Vzbid0IHN0b3AgcmVhZHMKLSAqCXYwLjEyIC0gYWRkZWQgVElPQ00gaW9jdGxzLCBhZGRlZCBicmVhayBoYW5kbGluZywgbWFkZSBzdHJ1Y3QgYWNtCi0gKgkJa21hbGxvY2VkCi0gKgl2MC4xMyAtIGFkZGVkIHRlcm1pb3MsIGFkZGVkIGhhbmd1cAotICoJdjAuMTQgLSBzaXplZCBkb3duIHN0cnVjdCBhY20KLSAqCXYwLjE1IC0gZml4ZWQgZmxvdyBjb250cm9sIGFnYWluIC0gY2hhcmFjdGVycyBjb3VsZCBiZSBsb3N0Ci0gKgl2MC4xNiAtIGFkZGVkIGNvZGUgZm9yIG1vZGVtcyB3aXRoIHN3YXBwZWQgZGF0YSBhbmQgY29udHJvbCBpbnRlcmZhY2VzCi0gKgl2MC4xNyAtIGFkZGVkIG5ldyBzdHlsZSBwcm9iaW5nCi0gKgl2MC4xOCAtIGZpeGVkIG5ldyBzdHlsZSBwcm9iaW5nIGZvciBkZXZpY2VzIHdpdGggbW9yZSBjb25maWd1cmF0aW9ucwotICoJdjAuMTkgLSBmaXhlZCBDTE9DQUwgaGFuZGxpbmcgKHRoYW5rcyB0byBSaWNoYXJkIFNoaWgtUGluZyBDaGFuKQotICoJdjAuMjAgLSBzd2l0Y2hlZCB0byBwcm9iaW5nIG9uIGludGVyZmFjZSAocmF0aGVyIHRoYW4gZGV2aWNlKSBjbGFzcwotICoJdjAuMjEgLSByZXZlcnQgdG8gcHJvYmluZyBvbiBkZXZpY2UgZm9yIGRldmljZXMgd2l0aCBtdWx0aXBsZSBjb25maWdzCi0gKgl2MC4yMiAtIHByb2JlIG9ubHkgdGhlIGNvbnRyb2wgaW50ZXJmYWNlLiBpZiB1c2Jjb3JlIGRvZXNuJ3QgY2hvb3NlIHRoZQotICoJCWNvbmZpZyB3ZSB3YW50LCBzeXNhZG1pbiBjaGFuZ2VzIGJDb25maWd1cmF0aW9uVmFsdWUgaW4gc3lzZnMuCi0gKgl2MC4yMyAtIHVzZSBzb2Z0aXJxIGZvciByeCBwcm9jZXNzaW5nLCBhcyBuZWVkZWQgYnkgdHR5IGxheWVyCi0gKgl2MC4yNCAtIGNoYW5nZSBwcm9iZSBtZXRob2QgdG8gZXZhbHVhdGUgQ0RDIHVuaW9uIGRlc2NyaXB0b3IKLSAqCXYwLjI1IC0gZG93bnN0cmVhbSB0YXNrcyBwYXJhbGVsaXplZCB0byBtYXhpbWl6ZSB0aHJvdWdocHV0Ci0gKgl2MC4yNiAtIG11bHRpcGxlIHdyaXRlIHVyYnMsIHdyaXRlc2l6ZSBpbmNyZWFzZWQKLSAqLwotCi0vKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgpAQCAtNzQsMTMgKzUxLDcgQEAKICNpbmNsdWRlICJjZGMtYWNtLmgiCiAKIAotI2RlZmluZSBBQ01fQ0xPU0VfVElNRU9VVAkxNQkvKiBzZWNvbmRzIHRvIGxldCB3cml0ZXMgZHJhaW4gKi8KLQotLyoKLSAqIFZlcnNpb24gSW5mb3JtYXRpb24KLSAqLwotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuMjYiCi0jZGVmaW5lIERSSVZFUl9BVVRIT1IgIkFybWluIEZ1ZXJzdCwgUGF2ZWwgTWFjaGVrLCBKb2hhbm5lcyBFcmRmZWx0LCBWb2p0ZWNoIFBhdmxpaywgRGF2aWQgS3ViaWNlayIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiQXJtaW4gRnVlcnN0LCBQYXZlbCBNYWNoZWssIEpvaGFubmVzIEVyZGZlbHQsIFZvanRlY2ggUGF2bGlrLCBEYXZpZCBLdWJpY2VrLCBKb2hhbiBIb3ZvbGQiCiAjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgQWJzdHJhY3QgQ29udHJvbCBNb2RlbCBkcml2ZXIgZm9yIFVTQiBtb2RlbXMgYW5kIElTRE4gYWRhcHRlcnMiCiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhY21fZHJpdmVyOwpAQCAtOTQsMTIgKzY1LDYgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X3BvcnRfb3BlcmF0aW9ucyBhY21fcG9ydF9vcHMgPSB7CiB9OwogCi0jaWZkZWYgVkVSQk9TRV9ERUJVRwotI2RlZmluZSB2ZXJib3NlCTEKLSNlbHNlCi0jZGVmaW5lIHZlcmJvc2UJMAotI2VuZGlmCi0KIC8qCiAgKiBGdW5jdGlvbnMgZm9yIEFDTSBjb250cm9sIG1lc3NhZ2VzLgogICovCkBAIC0xMTEsOCArNzYsOSBAQAogCQlyZXF1ZXN0LCBVU0JfUlRfQUNNLCB2YWx1ZSwKIAkJYWNtLT5jb250cm9sLT5hbHRzZXR0aW5nWzBdLmRlc2MuYkludGVyZmFjZU51bWJlciwKIAkJYnVmLCBsZW4sIDUwMDApOwotCWRiZygiYWNtX2NvbnRyb2xfbXNnOiBycTogMHglMDJ4IHZhbDogJSN4IGxlbjogJSN4IHJlc3VsdDogJWQiLAotCQkJCQkJcmVxdWVzdCwgdmFsdWUsIGxlbiwgcmV0dmFsKTsKKwlkZXZfZGJnKCZhY20tPmNvbnRyb2wtPmRldiwKKwkJCSIlcyAtIHJxIDB4JTAyeCwgdmFsICUjeCwgbGVuICUjeCwgcmVzdWx0ICVkXG4iLAorCQkJX19mdW5jX18sIHJlcXVlc3QsIHZhbHVlLCBsZW4sIHJldHZhbCk7CiAJcmV0dXJuIHJldHZhbCA8IDAgPyByZXR2YWwgOiAwOwogfQogCkBAIC0xOTIsNyArMTU4LDkgQEAKIAogCXJjID0gdXNiX3N1Ym1pdF91cmIod2ItPnVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJjIDwgMCkgewotCQlkYmcoInVzYl9zdWJtaXRfdXJiKHdyaXRlIGJ1bGspIGZhaWxlZDogJWQiLCByYyk7CisJCWRldl9lcnIoJmFjbS0+ZGF0YS0+ZGV2LAorCQkJIiVzIC0gdXNiX3N1Ym1pdF91cmIod3JpdGUgYnVsaykgZmFpbGVkOiAlZFxuIiwKKwkJCV9fZnVuY19fLCByYyk7CiAJCWFjbV93cml0ZV9kb25lKGFjbSwgd2IpOwogCX0KIAlyZXR1cm4gcmM7CkBAIC0yMTEsNyArMTc5LDggQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JZGJnKCIlcyBzdXNwX2NvdW50OiAlZCIsIF9fZnVuY19fLCBhY20tPnN1c3BfY291bnQpOworCWRldl92ZGJnKCZhY20tPmRhdGEtPmRldiwgIiVzIC0gc3VzcF9jb3VudCAlZFxuIiwgX19mdW5jX18sCisJCQkJCQkJYWNtLT5zdXNwX2NvdW50KTsKIAl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2VfYXN5bmMoYWNtLT5jb250cm9sKTsKIAlpZiAoYWNtLT5zdXNwX2NvdW50KSB7CiAJCWlmICghYWNtLT5kZWxheWVkX3diKQpAQCAtMjg3LDEwICsyNTYsMTQgQEAKIAljYXNlIC1FTk9FTlQ6CiAJY2FzZSAtRVNIVVRET1dOOgogCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLwotCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19mdW5jX18sIHN0YXR1cyk7CisJCWRldl9kYmcoJmFjbS0+Y29udHJvbC0+ZGV2LAorCQkJCSIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgc3RhdHVzKTsKIAkJcmV0dXJuOwogCWRlZmF1bHQ6Ci0JCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19mdW5jX18sIHN0YXR1cyk7CisJCWRldl9kYmcoJmFjbS0+Y29udHJvbC0+ZGV2LAorCQkJCSIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWRcbiIsCisJCQkJX19mdW5jX18sIHN0YXR1cyk7CiAJCWdvdG8gZXhpdDsKIAl9CiAKQEAgLTMwMiw4ICsyNzUsOCBAQAogCWRhdGEgPSAodW5zaWduZWQgY2hhciAqKShkciArIDEpOwogCXN3aXRjaCAoZHItPmJOb3RpZmljYXRpb25UeXBlKSB7CiAJY2FzZSBVU0JfQ0RDX05PVElGWV9ORVRXT1JLX0NPTk5FQ1RJT046Ci0JCWRiZygiJXMgbmV0d29yayIsIGRyLT53VmFsdWUgPwotCQkJCQkiY29ubmVjdGVkIHRvIiA6ICJkaXNjb25uZWN0ZWQgZnJvbSIpOworCQlkZXZfZGJnKCZhY20tPmNvbnRyb2wtPmRldiwgIiVzIC0gbmV0d29yayBjb25uZWN0aW9uOiAlZFxuIiwKKwkJCQkJCQlfX2Z1bmNfXywgZHItPndWYWx1ZSk7CiAJCWJyZWFrOwogCiAJY2FzZSBVU0JfQ0RDX05PVElGWV9TRVJJQUxfU1RBVEU6CkBAIC0zMTMsNyArMjg2LDggQEAKIAkJaWYgKHR0eSkgewogCQkJaWYgKCFhY20tPmNsb2NhbCAmJgogCQkJCShhY20tPmN0cmxpbiAmIH5uZXdjdHJsICYgQUNNX0NUUkxfRENEKSkgewotCQkJCWRiZygiY2FsbGluZyBoYW5ndXAiKTsKKwkJCQlkZXZfZGJnKCZhY20tPmNvbnRyb2wtPmRldiwKKwkJCQkJIiVzIC0gY2FsbGluZyBoYW5ndXBcbiIsIF9fZnVuY19fKTsKIAkJCQl0dHlfaGFuZ3VwKHR0eSk7CiAJCQl9CiAJCQl0dHlfa3JlZl9wdXQodHR5KTsKQEAgLTMyMSw3ICsyOTUsMTAgQEAKIAogCQlhY20tPmN0cmxpbiA9IG5ld2N0cmw7CiAKLQkJZGJnKCJpbnB1dCBjb250cm9sIGxpbmVzOiBkY2QlYyBkc3IlYyBicmVhayVjIHJpbmclYyBmcmFtaW5nJWMgcGFyaXR5JWMgb3ZlcnJ1biVjIiwKKwkJZGV2X2RiZygmYWNtLT5jb250cm9sLT5kZXYsCisJCQkiJXMgLSBpbnB1dCBjb250cm9sIGxpbmVzOiBkY2QlYyBkc3IlYyBicmVhayVjICIKKwkJCSJyaW5nJWMgZnJhbWluZyVjIHBhcml0eSVjIG92ZXJydW4lY1xuIiwKKwkJCV9fZnVuY19fLAogCQkJYWNtLT5jdHJsaW4gJiBBQ01fQ1RSTF9EQ0QgPyAnKycgOiAnLScsCiAJCQlhY20tPmN0cmxpbiAmIEFDTV9DVFJMX0RTUiA/ICcrJyA6ICctJywKIAkJCWFjbS0+Y3RybGluICYgQUNNX0NUUkxfQlJLID8gJysnIDogJy0nLApAQCAtMzMyLDcgKzMwOSwxMCBAQAogCQkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlkYmcoInVua25vd24gbm90aWZpY2F0aW9uICVkIHJlY2VpdmVkOiBpbmRleCAlZCBsZW4gJWQgZGF0YTAgJWQgZGF0YTEgJWQiLAorCQlkZXZfZGJnKCZhY20tPmNvbnRyb2wtPmRldiwKKwkJCSIlcyAtIHVua25vd24gbm90aWZpY2F0aW9uICVkIHJlY2VpdmVkOiBpbmRleCAlZCAiCisJCQkibGVuICVkIGRhdGEwICVkIGRhdGExICVkXG4iLAorCQkJX19mdW5jX18sCiAJCQlkci0+Yk5vdGlmaWNhdGlvblR5cGUsIGRyLT53SW5kZXgsCiAJCQlkci0+d0xlbmd0aCwgZGF0YVswXSwgZGF0YVsxXSk7CiAJCWJyZWFrOwpAQCAtMzQwLDE2NiArMzIwLDk2IEBACiBleGl0OgogCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJldHZhbCkKLQkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggIgotCQkJInJlc3VsdCAlZCIsIF9fZnVuY19fLCByZXR2YWwpOworCQlkZXZfZXJyKCZhY20tPmNvbnRyb2wtPmRldiwgIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkOiAlZFxuIiwKKwkJCQkJCQlfX2Z1bmNfXywgcmV0dmFsKTsKIH0KIAotLyogZGF0YSBpbnRlcmZhY2UgcmV0dXJucyBpbmNvbWluZyBieXRlcywgb3Igd2UgZ290IHVudGhyb3R0bGVkICovCi1zdGF0aWMgdm9pZCBhY21fcmVhZF9idWxrKHN0cnVjdCB1cmIgKnVyYikKK3N0YXRpYyBpbnQgYWNtX3N1Ym1pdF9yZWFkX3VyYihzdHJ1Y3QgYWNtICphY20sIGludCBpbmRleCwgZ2ZwX3QgbWVtX2ZsYWdzKQogewotCXN0cnVjdCBhY21fcmIgKmJ1ZjsKLQlzdHJ1Y3QgYWNtX3J1ICpyY3YgPSB1cmItPmNvbnRleHQ7Ci0Jc3RydWN0IGFjbSAqYWNtID0gcmN2LT5pbnN0YW5jZTsKLQlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7CisJaW50IHJlczsKIAotCWRiZygiRW50ZXJpbmcgYWNtX3JlYWRfYnVsayB3aXRoIHN0YXR1cyAlZCIsIHN0YXR1cyk7CisJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoaW5kZXgsICZhY20tPnJlYWRfdXJic19mcmVlKSkKKwkJcmV0dXJuIDA7CiAKLQlpZiAoIUFDTV9SRUFEWShhY20pKSB7Ci0JCWRldl9kYmcoJmFjbS0+ZGF0YS0+ZGV2LCAiQWJvcnRpbmcsIGFjbSBub3QgcmVhZHkiKTsKKwlkZXZfdmRiZygmYWNtLT5kYXRhLT5kZXYsICIlcyAtIHVyYiAlZFxuIiwgX19mdW5jX18sIGluZGV4KTsKKworCXJlcyA9IHVzYl9zdWJtaXRfdXJiKGFjbS0+cmVhZF91cmJzW2luZGV4XSwgbWVtX2ZsYWdzKTsKKwlpZiAocmVzKSB7CisJCWlmIChyZXMgIT0gLUVQRVJNKSB7CisJCQlkZXZfZXJyKCZhY20tPmRhdGEtPmRldiwKKwkJCQkJIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkOiAlZFxuIiwKKwkJCQkJX19mdW5jX18sIHJlcyk7CisJCX0KKwkJc2V0X2JpdChpbmRleCwgJmFjbS0+cmVhZF91cmJzX2ZyZWUpOworCQlyZXR1cm4gcmVzOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFjbV9zdWJtaXRfcmVhZF91cmJzKHN0cnVjdCBhY20gKmFjbSwgZ2ZwX3QgbWVtX2ZsYWdzKQoreworCWludCByZXM7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWNtLT5yeF9idWZsaW1pdDsgKytpKSB7CisJCXJlcyA9IGFjbV9zdWJtaXRfcmVhZF91cmIoYWNtLCBpLCBtZW1fZmxhZ3MpOworCQlpZiAocmVzKQorCQkJcmV0dXJuIHJlczsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWNtX3Byb2Nlc3NfcmVhZF91cmIoc3RydWN0IGFjbSAqYWNtLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKworCWlmICghdXJiLT5hY3R1YWxfbGVuZ3RoKQorCQlyZXR1cm47CisKKwl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZhY20tPnBvcnQpOworCWlmICghdHR5KQorCQlyZXR1cm47CisKKwl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgdXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKworCXR0eV9rcmVmX3B1dCh0dHkpOworfQorCitzdGF0aWMgdm9pZCBhY21fcmVhZF9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgYWNtX3JiICpyYiA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgYWNtICphY20gPSByYi0+aW5zdGFuY2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRldl92ZGJnKCZhY20tPmRhdGEtPmRldiwgIiVzIC0gdXJiICVkLCBsZW4gJWRcbiIsIF9fZnVuY19fLAorCQkJCQlyYi0+aW5kZXgsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJc2V0X2JpdChyYi0+aW5kZXgsICZhY20tPnJlYWRfdXJic19mcmVlKTsKKworCWlmICghYWNtLT5kZXYpIHsKKwkJZGV2X2RiZygmYWNtLT5kYXRhLT5kZXYsICIlcyAtIGRpc2Nvbm5lY3RlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCXVzYl9tYXJrX2xhc3RfYnVzeShhY20tPmRldik7CiAKLQlpZiAoc3RhdHVzKQotCQlkZXZfZGJnKCZhY20tPmRhdGEtPmRldiwgImJ1bGsgcnggc3RhdHVzICVkXG4iLCBzdGF0dXMpOworCWlmICh1cmItPnN0YXR1cykgeworCQlkZXZfZGJnKCZhY20tPmRhdGEtPmRldiwgIiVzIC0gbm9uLXplcm8gdXJiIHN0YXR1czogJWRcbiIsCisJCQkJCQkJX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKwlhY21fcHJvY2Vzc19yZWFkX3VyYihhY20sIHVyYik7CiAKLQlidWYgPSByY3YtPmJ1ZmZlcjsKLQlidWYtPnNpemUgPSB1cmItPmFjdHVhbF9sZW5ndGg7Ci0KLQlpZiAobGlrZWx5KHN0YXR1cyA9PSAwKSkgewotCQlzcGluX2xvY2soJmFjbS0+cmVhZF9sb2NrKTsKLQkJYWNtLT5wcm9jZXNzaW5nKys7Ci0JCWxpc3RfYWRkX3RhaWwoJnJjdi0+bGlzdCwgJmFjbS0+c3BhcmVfcmVhZF91cmJzKTsKLQkJbGlzdF9hZGRfdGFpbCgmYnVmLT5saXN0LCAmYWNtLT5maWxsZWRfcmVhZF9idWZzKTsKLQkJc3Bpbl91bmxvY2soJmFjbS0+cmVhZF9sb2NrKTsKKwkvKiB0aHJvdHRsZSBkZXZpY2UgaWYgcmVxdWVzdGVkIGJ5IHR0eSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZhY20tPnJlYWRfbG9jaywgZmxhZ3MpOworCWFjbS0+dGhyb3R0bGVkID0gYWNtLT50aHJvdHRsZV9yZXE7CisJaWYgKCFhY20tPnRocm90dGxlZCAmJiAhYWNtLT5zdXNwX2NvdW50KSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFjbS0+cmVhZF9sb2NrLCBmbGFncyk7CisJCWFjbV9zdWJtaXRfcmVhZF91cmIoYWNtLCByYi0+aW5kZXgsIEdGUF9BVE9NSUMpOwogCX0gZWxzZSB7Ci0JCS8qIHdlIGRyb3AgdGhlIGJ1ZmZlciBkdWUgdG8gYW4gZXJyb3IgKi8KLQkJc3Bpbl9sb2NrKCZhY20tPnJlYWRfbG9jayk7Ci0JCWxpc3RfYWRkX3RhaWwoJnJjdi0+bGlzdCwgJmFjbS0+c3BhcmVfcmVhZF91cmJzKTsKLQkJbGlzdF9hZGQoJmJ1Zi0+bGlzdCwgJmFjbS0+c3BhcmVfcmVhZF9idWZzKTsKLQkJc3Bpbl91bmxvY2soJmFjbS0+cmVhZF9sb2NrKTsKLQkJLyogbmV2ZXJ0aGVsZXNzIHRoZSB0YXNrbGV0IG11c3QgYmUga2lja2VkIHVuY29uZGl0aW9uYWxseQotCQlzbyB0aGUgcXVldWUgY2Fubm90IGRyeSB1cCAqLwotCX0KLQlpZiAobGlrZWx5KCFhY20tPnN1c3BfY291bnQpKQotCQl0YXNrbGV0X3NjaGVkdWxlKCZhY20tPnVyYl90YXNrKTsKLX0KLQotc3RhdGljIHZvaWQgYWNtX3J4X3Rhc2tsZXQodW5zaWduZWQgbG9uZyBfYWNtKQotewotCXN0cnVjdCBhY20gKmFjbSA9ICh2b2lkICopX2FjbTsKLQlzdHJ1Y3QgYWNtX3JiICpidWY7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKLQlzdHJ1Y3QgYWNtX3J1ICpyY3Y7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBjaGFyIHRocm90dGxlZDsKLQotCWRiZygiRW50ZXJpbmcgYWNtX3J4X3Rhc2tsZXQiKTsKLQotCWlmICghQUNNX1JFQURZKGFjbSkpIHsKLQkJZGJnKCJhY21fcnhfdGFza2xldDogQUNNIG5vdCByZWFkeSIpOwotCQlyZXR1cm47Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFjbS0+dGhyb3R0bGVfbG9jaywgZmxhZ3MpOwotCXRocm90dGxlZCA9IGFjbS0+dGhyb3R0bGU7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWNtLT50aHJvdHRsZV9sb2NrLCBmbGFncyk7Ci0JaWYgKHRocm90dGxlZCkgewotCQlkYmcoImFjbV9yeF90YXNrbGV0OiB0aHJvdHRsZWQiKTsKLQkJcmV0dXJuOwotCX0KLQotCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJmFjbS0+cG9ydCk7Ci0KLW5leHRfYnVmZmVyOgotCXNwaW5fbG9ja19pcnFzYXZlKCZhY20tPnJlYWRfbG9jaywgZmxhZ3MpOwotCWlmIChsaXN0X2VtcHR5KCZhY20tPmZpbGxlZF9yZWFkX2J1ZnMpKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFjbS0+cmVhZF9sb2NrLCBmbGFncyk7Ci0JCWdvdG8gdXJiczsKIAl9Ci0JYnVmID0gbGlzdF9lbnRyeShhY20tPmZpbGxlZF9yZWFkX2J1ZnMubmV4dCwKLQkJCSBzdHJ1Y3QgYWNtX3JiLCBsaXN0KTsKLQlsaXN0X2RlbCgmYnVmLT5saXN0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhY20tPnJlYWRfbG9jaywgZmxhZ3MpOwotCi0JZGJnKCJhY21fcnhfdGFza2xldDogcHJvY2VzaW5nIGJ1ZiAweCVwLCBzaXplID0gJWQiLCBidWYsIGJ1Zi0+c2l6ZSk7Ci0KLQlpZiAodHR5KSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZhY20tPnRocm90dGxlX2xvY2ssIGZsYWdzKTsKLQkJdGhyb3R0bGVkID0gYWNtLT50aHJvdHRsZTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWNtLT50aHJvdHRsZV9sb2NrLCBmbGFncyk7Ci0JCWlmICghdGhyb3R0bGVkKSB7Ci0JCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgYnVmLT5iYXNlLCBidWYtPnNpemUpOwotCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKLQkJfSBlbHNlIHsKLQkJCXR0eV9rcmVmX3B1dCh0dHkpOwotCQkJZGJnKCJUaHJvdHRsaW5nIG5vdGljZWQiKTsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZhY20tPnJlYWRfbG9jaywgZmxhZ3MpOwotCQkJbGlzdF9hZGQoJmJ1Zi0+bGlzdCwgJmFjbS0+ZmlsbGVkX3JlYWRfYnVmcyk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhY20tPnJlYWRfbG9jaywgZmxhZ3MpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFjbS0+cmVhZF9sb2NrLCBmbGFncyk7Ci0JbGlzdF9hZGQoJmJ1Zi0+bGlzdCwgJmFjbS0+c3BhcmVfcmVhZF9idWZzKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhY20tPnJlYWRfbG9jaywgZmxhZ3MpOwotCWdvdG8gbmV4dF9idWZmZXI7Ci0KLXVyYnM6Ci0JdHR5X2tyZWZfcHV0KHR0eSk7Ci0KLQl3aGlsZSAoIWxpc3RfZW1wdHkoJmFjbS0+c3BhcmVfcmVhZF9idWZzKSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWNtLT5yZWFkX2xvY2ssIGZsYWdzKTsKLQkJaWYgKGxpc3RfZW1wdHkoJmFjbS0+c3BhcmVfcmVhZF91cmJzKSkgewotCQkJYWNtLT5wcm9jZXNzaW5nID0gMDsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFjbS0+cmVhZF9sb2NrLCBmbGFncyk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJcmN2ID0gbGlzdF9lbnRyeShhY20tPnNwYXJlX3JlYWRfdXJicy5uZXh0LAotCQkJCSBzdHJ1Y3QgYWNtX3J1LCBsaXN0KTsKLQkJbGlzdF9kZWwoJnJjdi0+bGlzdCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFjbS0+cmVhZF9sb2NrLCBmbGFncyk7Ci0KLQkJYnVmID0gbGlzdF9lbnRyeShhY20tPnNwYXJlX3JlYWRfYnVmcy5uZXh0LAotCQkJCSBzdHJ1Y3QgYWNtX3JiLCBsaXN0KTsKLQkJbGlzdF9kZWwoJmJ1Zi0+bGlzdCk7Ci0KLQkJcmN2LT5idWZmZXIgPSBidWY7Ci0KLQkJaWYgKGFjbS0+aXNfaW50X2VwKQotCQkJdXNiX2ZpbGxfaW50X3VyYihyY3YtPnVyYiwgYWNtLT5kZXYsCi0JCQkJCSBhY20tPnJ4X2VuZHBvaW50LAotCQkJCQkgYnVmLT5iYXNlLAotCQkJCQkgYWNtLT5yZWFkc2l6ZSwKLQkJCQkJIGFjbV9yZWFkX2J1bGssIHJjdiwgYWNtLT5iSW50ZXJ2YWwpOwotCQllbHNlCi0JCQl1c2JfZmlsbF9idWxrX3VyYihyY3YtPnVyYiwgYWNtLT5kZXYsCi0JCQkJCSAgYWNtLT5yeF9lbmRwb2ludCwKLQkJCQkJICBidWYtPmJhc2UsCi0JCQkJCSAgYWNtLT5yZWFkc2l6ZSwKLQkJCQkJICBhY21fcmVhZF9idWxrLCByY3YpOwotCQlyY3YtPnVyYi0+dHJhbnNmZXJfZG1hID0gYnVmLT5kbWE7Ci0JCXJjdi0+dXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKLQotCQkvKiBUaGlzIHNob3VsZG4ndCBraWxsIHRoZSBkcml2ZXIgYXMgdW5zdWNjZXNzZnVsIFVSQnMgYXJlCi0JCSAgIHJldHVybmVkIHRvIHRoZSBmcmVlLXVyYnMtcG9vbCBhbmQgcmVzdWJtaXRlZCBBU0FQICovCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZhY20tPnJlYWRfbG9jaywgZmxhZ3MpOwotCQlpZiAoYWNtLT5zdXNwX2NvdW50IHx8Ci0JCQkJdXNiX3N1Ym1pdF91cmIocmN2LT51cmIsIEdGUF9BVE9NSUMpIDwgMCkgewotCQkJbGlzdF9hZGQoJmJ1Zi0+bGlzdCwgJmFjbS0+c3BhcmVfcmVhZF9idWZzKTsKLQkJCWxpc3RfYWRkKCZyY3YtPmxpc3QsICZhY20tPnNwYXJlX3JlYWRfdXJicyk7Ci0JCQlhY20tPnByb2Nlc3NpbmcgPSAwOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWNtLT5yZWFkX2xvY2ssIGZsYWdzKTsKLQkJCXJldHVybjsKLQkJfSBlbHNlIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFjbS0+cmVhZF9sb2NrLCBmbGFncyk7Ci0JCQlkYmcoImFjbV9yeF90YXNrbGV0OiBzZW5kaW5nIHVyYiAweCVwLCByY3YgMHglcCwgYnVmIDB4JXAiLCByY3YtPnVyYiwgcmN2LCBidWYpOwotCQl9Ci0JfQotCXNwaW5fbG9ja19pcnFzYXZlKCZhY20tPnJlYWRfbG9jaywgZmxhZ3MpOwotCWFjbS0+cHJvY2Vzc2luZyA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWNtLT5yZWFkX2xvY2ssIGZsYWdzKTsKIH0KIAogLyogZGF0YSBpbnRlcmZhY2Ugd3JvdGUgdGhvc2Ugb3V0Z29pbmcgYnl0ZXMgKi8KQEAgLTUwOSw5ICs0MTksOSBAQAogCXN0cnVjdCBhY20gKmFjbSA9IHdiLT5pbnN0YW5jZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKHZlcmJvc2UgfHwgdXJiLT5zdGF0dXMKLQkJCXx8ICh1cmItPmFjdHVhbF9sZW5ndGggIT0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKSkKLQkJZGV2X2RiZygmYWNtLT5kYXRhLT5kZXYsICJ0eCAlZC8lZCBieXRlcyAtLSA+ICVkXG4iLAorCWlmICh1cmItPnN0YXR1cwl8fCAodXJiLT5hY3R1YWxfbGVuZ3RoICE9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkpCisJCWRldl92ZGJnKCZhY20tPmRhdGEtPmRldiwgIiVzIC0gbGVuICVkLyVkLCBzdGF0dXMgJWRcbiIsCisJCQlfX2Z1bmNfXywKIAkJCXVyYi0+YWN0dWFsX2xlbmd0aCwKIAkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKIAkJCXVyYi0+c3RhdHVzKTsKQEAgLTUyMSw4ICs0MzEsNiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFjbS0+d3JpdGVfbG9jaywgZmxhZ3MpOwogCWlmIChBQ01fUkVBRFkoYWNtKSkKIAkJc2NoZWR1bGVfd29yaygmYWNtLT53b3JrKTsKLQllbHNlCi0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYWNtLT5kcmFpbl93YWl0KTsKIH0KIAogc3RhdGljIHZvaWQgYWNtX3NvZnRpbnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtNTMwLDcgKzQzOCw4IEBACiAJc3RydWN0IGFjbSAqYWNtID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhY20sIHdvcmspOwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAKLQlkZXZfdmRiZygmYWNtLT5kYXRhLT5kZXYsICJ0eCB3b3JrXG4iKTsKKwlkZXZfdmRiZygmYWNtLT5kYXRhLT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCiAJaWYgKCFBQ01fUkVBRFkoYWNtKSkKIAkJcmV0dXJuOwogCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJmFjbS0+cG9ydCk7CkBAIC01NDgsOCArNDU3LDYgQEAKIHsKIAlzdHJ1Y3QgYWNtICphY207CiAJaW50IHJ2ID0gLUVOT0RFVjsKLQlpbnQgaTsKLQlkYmcoIkVudGVyaW5nIGFjbV90dHlfb3Blbi4iKTsKIAogCW11dGV4X2xvY2soJm9wZW5fbXV0ZXgpOwogCkBAIC01NTksNiArNDY2LDggQEAKIAllbHNlCiAJCXJ2ID0gMDsKIAorCWRldl9kYmcoJmFjbS0+Y29udHJvbC0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKwogCXNldF9iaXQoVFRZX05PX1dSSVRFX1NQTElULCAmdHR5LT5mbGFncyk7CiAKIAl0dHktPmRyaXZlcl9kYXRhID0gYWNtOwpAQCAtNTc4LDM4ICs0ODcsMjggQEAKIAogCWFjbS0+Y3RybHVyYi0+ZGV2ID0gYWNtLT5kZXY7CiAJaWYgKHVzYl9zdWJtaXRfdXJiKGFjbS0+Y3RybHVyYiwgR0ZQX0tFUk5FTCkpIHsKLQkJZGJnKCJ1c2Jfc3VibWl0X3VyYihjdHJsIGlycSkgZmFpbGVkIik7CisJCWRldl9lcnIoJmFjbS0+Y29udHJvbC0+ZGV2LAorCQkJIiVzIC0gdXNiX3N1Ym1pdF91cmIoY3RybCBpcnEpIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlnb3RvIGJhaWxfb3V0OwogCX0KIAogCWlmICgwID4gYWNtX3NldF9jb250cm9sKGFjbSwgYWNtLT5jdHJsb3V0ID0gQUNNX0NUUkxfRFRSIHwgQUNNX0NUUkxfUlRTKSAmJgogCSAgICAoYWNtLT5jdHJsX2NhcHMgJiBVU0JfQ0RDX0NBUF9MSU5FKSkKLQkJZ290byBmdWxsX2JhaWxvdXQ7CisJCWdvdG8gYmFpbF9vdXQ7CiAKIAl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoYWNtLT5jb250cm9sKTsKIAotCUlOSVRfTElTVF9IRUFEKCZhY20tPnNwYXJlX3JlYWRfdXJicyk7Ci0JSU5JVF9MSVNUX0hFQUQoJmFjbS0+c3BhcmVfcmVhZF9idWZzKTsKLQlJTklUX0xJU1RfSEVBRCgmYWNtLT5maWxsZWRfcmVhZF9idWZzKTsKLQotCWZvciAoaSA9IDA7IGkgPCBhY20tPnJ4X2J1ZmxpbWl0OyBpKyspCi0JCWxpc3RfYWRkKCYoYWNtLT5ydVtpXS5saXN0KSwgJmFjbS0+c3BhcmVfcmVhZF91cmJzKTsKLQlmb3IgKGkgPSAwOyBpIDwgYWNtLT5yeF9idWZsaW1pdDsgaSsrKQotCQlsaXN0X2FkZCgmKGFjbS0+cmJbaV0ubGlzdCksICZhY20tPnNwYXJlX3JlYWRfYnVmcyk7Ci0KLQlhY20tPnRocm90dGxlID0gMDsKKwlpZiAoYWNtX3N1Ym1pdF9yZWFkX3VyYnMoYWNtLCBHRlBfS0VSTkVMKSkKKwkJZ290byBiYWlsX291dDsKIAogCXNldF9iaXQoQVNZTkNCX0lOSVRJQUxJWkVELCAmYWNtLT5wb3J0LmZsYWdzKTsKIAlydiA9IHR0eV9wb3J0X2Jsb2NrX3RpbF9yZWFkeSgmYWNtLT5wb3J0LCB0dHksIGZpbHApOwotCXRhc2tsZXRfc2NoZWR1bGUoJmFjbS0+dXJiX3Rhc2spOwogCiAJbXV0ZXhfdW5sb2NrKCZhY20tPm11dGV4KTsKIG91dDoKIAltdXRleF91bmxvY2soJm9wZW5fbXV0ZXgpOwogCXJldHVybiBydjsKIAotZnVsbF9iYWlsb3V0OgotCXVzYl9raWxsX3VyYihhY20tPmN0cmx1cmIpOwogYmFpbF9vdXQ6CiAJYWNtLT5wb3J0LmNvdW50LS07CiAJbXV0ZXhfdW5sb2NrKCZhY20tPm11dGV4KTsKQEAgLTYyMiwyNiArNTIxLDI0IEBACiAKIHN0YXRpYyB2b2lkIGFjbV90dHlfdW5yZWdpc3RlcihzdHJ1Y3QgYWNtICphY20pCiB7Ci0JaW50IGksIG5yOworCWludCBpOwogCi0JbnIgPSBhY20tPnJ4X2J1ZmxpbWl0OwogCXR0eV91bnJlZ2lzdGVyX2RldmljZShhY21fdHR5X2RyaXZlciwgYWNtLT5taW5vcik7CiAJdXNiX3B1dF9pbnRmKGFjbS0+Y29udHJvbCk7CiAJYWNtX3RhYmxlW2FjbS0+bWlub3JdID0gTlVMTDsKIAl1c2JfZnJlZV91cmIoYWNtLT5jdHJsdXJiKTsKIAlmb3IgKGkgPSAwOyBpIDwgQUNNX05XOyBpKyspCiAJCXVzYl9mcmVlX3VyYihhY20tPndiW2ldLnVyYik7Ci0JZm9yIChpID0gMDsgaSA8IG5yOyBpKyspCi0JCXVzYl9mcmVlX3VyYihhY20tPnJ1W2ldLnVyYik7CisJZm9yIChpID0gMDsgaSA8IGFjbS0+cnhfYnVmbGltaXQ7IGkrKykKKwkJdXNiX2ZyZWVfdXJiKGFjbS0+cmVhZF91cmJzW2ldKTsKIAlrZnJlZShhY20tPmNvdW50cnlfY29kZXMpOwogCWtmcmVlKGFjbSk7CiB9CiAKLXN0YXRpYyBpbnQgYWNtX3R0eV9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7Ci0KIHN0YXRpYyB2b2lkIGFjbV9wb3J0X2Rvd24oc3RydWN0IGFjbSAqYWNtKQogewotCWludCBpLCBuciA9IGFjbS0+cnhfYnVmbGltaXQ7CisJaW50IGk7CisKIAltdXRleF9sb2NrKCZvcGVuX211dGV4KTsKIAlpZiAoYWNtLT5kZXYpIHsKIAkJdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGFjbS0+Y29udHJvbCk7CkBAIC02NDksMTAgKzU0Niw4IEBACiAJCXVzYl9raWxsX3VyYihhY20tPmN0cmx1cmIpOwogCQlmb3IgKGkgPSAwOyBpIDwgQUNNX05XOyBpKyspCiAJCQl1c2Jfa2lsbF91cmIoYWNtLT53YltpXS51cmIpOwotCQl0YXNrbGV0X2Rpc2FibGUoJmFjbS0+dXJiX3Rhc2spOwotCQlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykKLQkJCXVzYl9raWxsX3VyYihhY20tPnJ1W2ldLnVyYik7Ci0JCXRhc2tsZXRfZW5hYmxlKCZhY20tPnVyYl90YXNrKTsKKwkJZm9yIChpID0gMDsgaSA8IGFjbS0+cnhfYnVmbGltaXQ7IGkrKykKKwkJCXVzYl9raWxsX3VyYihhY20tPnJlYWRfdXJic1tpXSk7CiAJCWFjbS0+Y29udHJvbC0+bmVlZHNfcmVtb3RlX3dha2V1cCA9IDA7CiAJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShhY20tPmNvbnRyb2wpOwogCX0KQEAgLTY5OCwxMyArNTkzLDEzIEBACiAJaW50IHdibjsKIAlzdHJ1Y3QgYWNtX3diICp3YjsKIAotCWRiZygiRW50ZXJpbmcgYWNtX3R0eV93cml0ZSB0byB3cml0ZSAlZCBieXRlcywiLCBjb3VudCk7Ci0KIAlpZiAoIUFDTV9SRUFEWShhY20pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoIWNvdW50KQogCQlyZXR1cm4gMDsKIAorCWRldl92ZGJnKCZhY20tPmRhdGEtPmRldiwgIiVzIC0gY291bnQgJWRcbiIsIF9fZnVuY19fLCBjb3VudCk7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYWNtLT53cml0ZV9sb2NrLCBmbGFncyk7CiAJd2JuID0gYWNtX3diX2FsbG9jKGFjbSk7CiAJaWYgKHdibiA8IDApIHsKQEAgLTcxNCw3ICs2MDksNyBAQAogCXdiID0gJmFjbS0+d2Jbd2JuXTsKIAogCWNvdW50ID0gKGNvdW50ID4gYWNtLT53cml0ZXNpemUpID8gYWNtLT53cml0ZXNpemUgOiBjb3VudDsKLQlkYmcoIkdldCAlZCBieXRlcy4uLiIsIGNvdW50KTsKKwlkZXZfdmRiZygmYWNtLT5kYXRhLT5kZXYsICIlcyAtIHdyaXRlICVkXG4iLCBfX2Z1bmNfXywgY291bnQpOwogCW1lbWNweSh3Yi0+YnVmLCBidWYsIGNvdW50KTsKIAl3Yi0+bGVuID0gY291bnQ7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWNtLT53cml0ZV9sb2NrLCBmbGFncyk7CkBAIC03NTEsMjIgKzY0NiwzMSBAQAogc3RhdGljIHZvaWQgYWNtX3R0eV90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCBhY20gKmFjbSA9IHR0eS0+ZHJpdmVyX2RhdGE7CisKIAlpZiAoIUFDTV9SRUFEWShhY20pKQogCQlyZXR1cm47Ci0Jc3Bpbl9sb2NrX2JoKCZhY20tPnRocm90dGxlX2xvY2spOwotCWFjbS0+dGhyb3R0bGUgPSAxOwotCXNwaW5fdW5sb2NrX2JoKCZhY20tPnRocm90dGxlX2xvY2spOworCisJc3Bpbl9sb2NrX2lycSgmYWNtLT5yZWFkX2xvY2spOworCWFjbS0+dGhyb3R0bGVfcmVxID0gMTsKKwlzcGluX3VubG9ja19pcnEoJmFjbS0+cmVhZF9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgYWNtX3R0eV91bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IGFjbSAqYWNtID0gdHR5LT5kcml2ZXJfZGF0YTsKKwl1bnNpZ25lZCBpbnQgd2FzX3Rocm90dGxlZDsKKwogCWlmICghQUNNX1JFQURZKGFjbSkpCiAJCXJldHVybjsKLQlzcGluX2xvY2tfYmgoJmFjbS0+dGhyb3R0bGVfbG9jayk7Ci0JYWNtLT50aHJvdHRsZSA9IDA7Ci0Jc3Bpbl91bmxvY2tfYmgoJmFjbS0+dGhyb3R0bGVfbG9jayk7Ci0JdGFza2xldF9zY2hlZHVsZSgmYWNtLT51cmJfdGFzayk7CisKKwlzcGluX2xvY2tfaXJxKCZhY20tPnJlYWRfbG9jayk7CisJd2FzX3Rocm90dGxlZCA9IGFjbS0+dGhyb3R0bGVkOworCWFjbS0+dGhyb3R0bGVkID0gMDsKKwlhY20tPnRocm90dGxlX3JlcSA9IDA7CisJc3Bpbl91bmxvY2tfaXJxKCZhY20tPnJlYWRfbG9jayk7CisKKwlpZiAod2FzX3Rocm90dGxlZCkKKwkJYWNtX3N1Ym1pdF9yZWFkX3VyYnMoYWNtLCBHRlBfS0VSTkVMKTsKIH0KIAogc3RhdGljIGludCBhY21fdHR5X2JyZWFrX2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgc3RhdGUpCkBAIC03NzcsNyArNjgxLDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJcmV0dmFsID0gYWNtX3NlbmRfYnJlYWsoYWNtLCBzdGF0ZSA/IDB4ZmZmZiA6IDApOwogCWlmIChyZXR2YWwgPCAwKQotCQlkYmcoInNlbmQgYnJlYWsgZmFpbGVkIik7CisJCWRldl9kYmcoJmFjbS0+Y29udHJvbC0+ZGV2LCAiJXMgLSBzZW5kIGJyZWFrIGZhaWxlZFxuIiwKKwkJCQkJCQkJX19mdW5jX18pOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTg3Miw3ICs3NzcsOSBAQAogCiAJaWYgKG1lbWNtcCgmYWNtLT5saW5lLCAmbmV3bGluZSwgc2l6ZW9mIG5ld2xpbmUpKSB7CiAJCW1lbWNweSgmYWNtLT5saW5lLCAmbmV3bGluZSwgc2l6ZW9mIG5ld2xpbmUpOwotCQlkYmcoInNldCBsaW5lOiAlZCAlZCAlZCAlZCIsIGxlMzJfdG9fY3B1KG5ld2xpbmUuZHdEVEVSYXRlKSwKKwkJZGV2X2RiZygmYWNtLT5jb250cm9sLT5kZXYsICIlcyAtIHNldCBsaW5lOiAlZCAlZCAlZCAlZFxuIiwKKwkJCV9fZnVuY19fLAorCQkJbGUzMl90b19jcHUobmV3bGluZS5kd0RURVJhdGUpLAogCQkJbmV3bGluZS5iQ2hhckZvcm1hdCwgbmV3bGluZS5iUGFyaXR5VHlwZSwKIAkJCW5ld2xpbmUuYkRhdGFCaXRzKTsKIAkJYWNtX3NldF9saW5lKGFjbSwgJmFjbS0+bGluZSk7CkBAIC04OTcsMTEgKzgwNCwxMSBAQAogc3RhdGljIHZvaWQgYWNtX3JlYWRfYnVmZmVyc19mcmVlKHN0cnVjdCBhY20gKmFjbSkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYoYWNtLT5jb250cm9sKTsKLQlpbnQgaSwgbiA9IGFjbS0+cnhfYnVmbGltaXQ7CisJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBhY20tPnJ4X2J1ZmxpbWl0OyBpKyspCiAJCXVzYl9mcmVlX2NvaGVyZW50KHVzYl9kZXYsIGFjbS0+cmVhZHNpemUsCi0JCQkJICBhY20tPnJiW2ldLmJhc2UsIGFjbS0+cmJbaV0uZG1hKTsKKwkJCSAgYWNtLT5yZWFkX2J1ZmZlcnNbaV0uYmFzZSwgYWNtLT5yZWFkX2J1ZmZlcnNbaV0uZG1hKTsKIH0KIAogLyogTGl0dGxlIGhlbHBlcjogd3JpdGUgYnVmZmVycyBhbGxvY2F0ZSAqLwpAQCAtOTQ2LDcgKzg1Myw3IEBACiAJdTggYWNfbWFuYWdlbWVudF9mdW5jdGlvbiA9IDA7CiAJdTggY2FsbF9tYW5hZ2VtZW50X2Z1bmN0aW9uID0gMDsKIAlpbnQgY2FsbF9pbnRlcmZhY2VfbnVtID0gLTE7Ci0JaW50IGRhdGFfaW50ZXJmYWNlX251bTsKKwlpbnQgZGF0YV9pbnRlcmZhY2VfbnVtID0gLTE7CiAJdW5zaWduZWQgbG9uZyBxdWlya3M7CiAJaW50IG51bV9yeF9idWY7CiAJaW50IGk7CkBAIC0xMDMwLDcgKzkzNywxMSBAQAogCWlmICghdW5pb25faGVhZGVyKSB7CiAJCWlmIChjYWxsX2ludGVyZmFjZV9udW0gPiAwKSB7CiAJCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJObyB1bmlvbiBkZXNjcmlwdG9yLCB1c2luZyBjYWxsIG1hbmFnZW1lbnQgZGVzY3JpcHRvclxuIik7Ci0JCQlkYXRhX2ludGVyZmFjZSA9IHVzYl9pZm51bV90b19pZih1c2JfZGV2LCAoZGF0YV9pbnRlcmZhY2VfbnVtID0gY2FsbF9pbnRlcmZhY2VfbnVtKSk7CisJCQkvKiBxdWlya3MgZm9yIERyb2lkcyBNdUluIExDRCAqLworCQkJaWYgKHF1aXJrcyAmIE5PX0RBVEFfSU5URVJGQUNFKQorCQkJCWRhdGFfaW50ZXJmYWNlID0gdXNiX2lmbnVtX3RvX2lmKHVzYl9kZXYsIDApOworCQkJZWxzZQorCQkJCWRhdGFfaW50ZXJmYWNlID0gdXNiX2lmbnVtX3RvX2lmKHVzYl9kZXYsIChkYXRhX2ludGVyZmFjZV9udW0gPSBjYWxsX2ludGVyZmFjZV9udW0pKTsKIAkJCWNvbnRyb2xfaW50ZXJmYWNlID0gaW50ZjsKIAkJfSBlbHNlIHsKIAkJCWlmIChpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iTnVtRW5kcG9pbnRzICE9IDMpIHsKQEAgLTExMzMsNyArMTA0NCw3IEBACiAJCWVwd3JpdGUgPSB0OwogCX0KIG1hZGVfY29tcHJlc3NlZF9wcm9iZToKLQlkYmcoImludGVyZmFjZXMgYXJlIHZhbGlkIik7CisJZGV2X2RiZygmaW50Zi0+ZGV2LCAiaW50ZXJmYWNlcyBhcmUgdmFsaWRcbiIpOwogCWZvciAobWlub3IgPSAwOyBtaW5vciA8IEFDTV9UVFlfTUlOT1JTICYmIGFjbV90YWJsZVttaW5vcl07IG1pbm9yKyspOwogCiAJaWYgKG1pbm9yID09IEFDTV9UVFlfTUlOT1JTKSB7CkBAIC0xMTQzLDcgKzEwNTQsNyBAQAogCiAJYWNtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFjbSksIEdGUF9LRVJORUwpOwogCWlmIChhY20gPT0gTlVMTCkgewotCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJvdXQgb2YgbWVtb3J5IChhY20ga3phbGxvYylcbiIpOworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJvdXQgb2YgbWVtb3J5IChhY20ga3phbGxvYylcbiIpOwogCQlnb3RvIGFsbG9jX2ZhaWw7CiAJfQogCkBAIC0xMTYyLDExICsxMDczLDcgQEAKIAlhY20tPmN0cmxzaXplID0gY3RybHNpemU7CiAJYWNtLT5yZWFkc2l6ZSA9IHJlYWRzaXplOwogCWFjbS0+cnhfYnVmbGltaXQgPSBudW1fcnhfYnVmOwotCWFjbS0+dXJiX3Rhc2suZnVuYyA9IGFjbV9yeF90YXNrbGV0OwotCWFjbS0+dXJiX3Rhc2suZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBhY207CiAJSU5JVF9XT1JLKCZhY20tPndvcmssIGFjbV9zb2Z0aW50KTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhY20tPmRyYWluX3dhaXQpOwotCXNwaW5fbG9ja19pbml0KCZhY20tPnRocm90dGxlX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZhY20tPndyaXRlX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZhY20tPnJlYWRfbG9jayk7CiAJbXV0ZXhfaW5pdCgmYWNtLT5tdXRleCk7CkBAIC0xMTc5LDUzICsxMDg2LDY5IEBACiAKIAlidWYgPSB1c2JfYWxsb2NfY29oZXJlbnQodXNiX2RldiwgY3RybHNpemUsIEdGUF9LRVJORUwsICZhY20tPmN0cmxfZG1hKTsKIAlpZiAoIWJ1ZikgewotCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJvdXQgb2YgbWVtb3J5IChjdHJsIGJ1ZmZlciBhbGxvYylcbiIpOworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJvdXQgb2YgbWVtb3J5IChjdHJsIGJ1ZmZlciBhbGxvYylcbiIpOwogCQlnb3RvIGFsbG9jX2ZhaWwyOwogCX0KIAlhY20tPmN0cmxfYnVmZmVyID0gYnVmOwogCiAJaWYgKGFjbV93cml0ZV9idWZmZXJzX2FsbG9jKGFjbSkgPCAwKSB7Ci0JCWRldl9kYmcoJmludGYtPmRldiwgIm91dCBvZiBtZW1vcnkgKHdyaXRlIGJ1ZmZlciBhbGxvYylcbiIpOworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJvdXQgb2YgbWVtb3J5ICh3cml0ZSBidWZmZXIgYWxsb2MpXG4iKTsKIAkJZ290byBhbGxvY19mYWlsNDsKIAl9CiAKIAlhY20tPmN0cmx1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCWlmICghYWNtLT5jdHJsdXJiKSB7Ci0JCWRldl9kYmcoJmludGYtPmRldiwgIm91dCBvZiBtZW1vcnkgKGN0cmx1cmIga21hbGxvYylcbiIpOworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJvdXQgb2YgbWVtb3J5IChjdHJsdXJiIGttYWxsb2MpXG4iKTsKIAkJZ290byBhbGxvY19mYWlsNTsKIAl9CiAJZm9yIChpID0gMDsgaSA8IG51bV9yeF9idWY7IGkrKykgewotCQlzdHJ1Y3QgYWNtX3J1ICpyY3YgPSAmKGFjbS0+cnVbaV0pOworCQlzdHJ1Y3QgYWNtX3JiICpyYiA9ICYoYWNtLT5yZWFkX2J1ZmZlcnNbaV0pOworCQlzdHJ1Y3QgdXJiICp1cmI7CiAKLQkJcmN2LT51cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwotCQlpZiAocmN2LT51cmIgPT0gTlVMTCkgewotCQkJZGV2X2RiZygmaW50Zi0+ZGV2LAorCQlyYi0+YmFzZSA9IHVzYl9hbGxvY19jb2hlcmVudChhY20tPmRldiwgcmVhZHNpemUsIEdGUF9LRVJORUwsCisJCQkJCQkJCSZyYi0+ZG1hKTsKKwkJaWYgKCFyYi0+YmFzZSkgeworCQkJZGV2X2VycigmaW50Zi0+ZGV2LCAib3V0IG9mIG1lbW9yeSAiCisJCQkJCSIocmVhZCBidWZzIHVzYl9hbGxvY19jb2hlcmVudClcbiIpOworCQkJZ290byBhbGxvY19mYWlsNjsKKwkJfQorCQlyYi0+aW5kZXggPSBpOworCQlyYi0+aW5zdGFuY2UgPSBhY207CisKKwkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF1cmIpIHsKKwkJCWRldl9lcnIoJmludGYtPmRldiwKIAkJCQkib3V0IG9mIG1lbW9yeSAocmVhZCB1cmJzIHVzYl9hbGxvY191cmIpXG4iKTsKIAkJCWdvdG8gYWxsb2NfZmFpbDY7CiAJCX0KLQotCQlyY3YtPnVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7Ci0JCXJjdi0+aW5zdGFuY2UgPSBhY207Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBudW1fcnhfYnVmOyBpKyspIHsKLQkJc3RydWN0IGFjbV9yYiAqcmIgPSAmKGFjbS0+cmJbaV0pOwotCi0JCXJiLT5iYXNlID0gdXNiX2FsbG9jX2NvaGVyZW50KGFjbS0+ZGV2LCByZWFkc2l6ZSwKLQkJCQlHRlBfS0VSTkVMLCAmcmItPmRtYSk7Ci0JCWlmICghcmItPmJhc2UpIHsKLQkJCWRldl9kYmcoJmludGYtPmRldiwKLQkJCQkib3V0IG9mIG1lbW9yeSAocmVhZCBidWZzIHVzYl9hbGxvY19jb2hlcmVudClcbiIpOwotCQkJZ290byBhbGxvY19mYWlsNzsKKwkJdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKwkJdXJiLT50cmFuc2Zlcl9kbWEgPSByYi0+ZG1hOworCQlpZiAoYWNtLT5pc19pbnRfZXApIHsKKwkJCXVzYl9maWxsX2ludF91cmIodXJiLCBhY20tPmRldiwKKwkJCQkJIGFjbS0+cnhfZW5kcG9pbnQsCisJCQkJCSByYi0+YmFzZSwKKwkJCQkJIGFjbS0+cmVhZHNpemUsCisJCQkJCSBhY21fcmVhZF9idWxrX2NhbGxiYWNrLCByYiwKKwkJCQkJIGFjbS0+YkludGVydmFsKTsKKwkJfSBlbHNlIHsKKwkJCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgYWNtLT5kZXYsCisJCQkJCSAgYWNtLT5yeF9lbmRwb2ludCwKKwkJCQkJICByYi0+YmFzZSwKKwkJCQkJICBhY20tPnJlYWRzaXplLAorCQkJCQkgIGFjbV9yZWFkX2J1bGtfY2FsbGJhY2ssIHJiKTsKIAkJfQorCisJCWFjbS0+cmVhZF91cmJzW2ldID0gdXJiOworCQlfX3NldF9iaXQoaSwgJmFjbS0+cmVhZF91cmJzX2ZyZWUpOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgQUNNX05XOyBpKyspIHsKIAkJc3RydWN0IGFjbV93YiAqc25kID0gJihhY20tPndiW2ldKTsKIAogCQlzbmQtPnVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CiAJCWlmIChzbmQtPnVyYiA9PSBOVUxMKSB7Ci0JCQlkZXZfZGJnKCZpbnRmLT5kZXYsCi0JCQkJIm91dCBvZiBtZW1vcnkgKHdyaXRlIHVyYnMgdXNiX2FsbG9jX3VyYikiKTsKLQkJCWdvdG8gYWxsb2NfZmFpbDg7CisJCQlkZXZfZXJyKCZpbnRmLT5kZXYsCisJCQkJIm91dCBvZiBtZW1vcnkgKHdyaXRlIHVyYnMgdXNiX2FsbG9jX3VyYilcbiIpOworCQkJZ290byBhbGxvY19mYWlsNzsKIAkJfQogCiAJCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9pbnQoZXB3cml0ZSkpCkBAIC0xMjQ0LDcgKzExNjcsNyBAQAogCiAJaSA9IGRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfYm1DYXBhYmlsaXRpZXMpOwogCWlmIChpIDwgMCkKLQkJZ290byBhbGxvY19mYWlsODsKKwkJZ290byBhbGxvY19mYWlsNzsKIAogCWlmIChjZmQpIHsgLyogZXhwb3J0IHRoZSBjb3VudHJ5IGRhdGEgKi8KIAkJYWNtLT5jb3VudHJ5X2NvZGVzID0ga21hbGxvYyhjZmQtPmJMZW5ndGggLSA0LCBHRlBfS0VSTkVMKTsKQEAgLTEyOTYsMTQgKzEyMTksMTMgQEAKIAlhY21fdGFibGVbbWlub3JdID0gYWNtOwogCiAJcmV0dXJuIDA7Ci1hbGxvY19mYWlsODoKK2FsbG9jX2ZhaWw3OgogCWZvciAoaSA9IDA7IGkgPCBBQ01fTlc7IGkrKykKIAkJdXNiX2ZyZWVfdXJiKGFjbS0+d2JbaV0udXJiKTsKLWFsbG9jX2ZhaWw3OgotCWFjbV9yZWFkX2J1ZmZlcnNfZnJlZShhY20pOwogYWxsb2NfZmFpbDY6CiAJZm9yIChpID0gMDsgaSA8IG51bV9yeF9idWY7IGkrKykKLQkJdXNiX2ZyZWVfdXJiKGFjbS0+cnVbaV0udXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGFjbS0+cmVhZF91cmJzW2ldKTsKKwlhY21fcmVhZF9idWZmZXJzX2ZyZWUoYWNtKTsKIAl1c2JfZnJlZV91cmIoYWNtLT5jdHJsdXJiKTsKIGFsbG9jX2ZhaWw1OgogCWFjbV93cml0ZV9idWZmZXJzX2ZyZWUoYWNtKTsKQEAgLTEzMTgsMTcgKzEyNDAsMTQgQEAKIHN0YXRpYyB2b2lkIHN0b3BfZGF0YV90cmFmZmljKHN0cnVjdCBhY20gKmFjbSkKIHsKIAlpbnQgaTsKLQlkYmcoIkVudGVyaW5nIHN0b3BfZGF0YV90cmFmZmljIik7CiAKLQl0YXNrbGV0X2Rpc2FibGUoJmFjbS0+dXJiX3Rhc2spOworCWRldl9kYmcoJmFjbS0+Y29udHJvbC0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKIAogCXVzYl9raWxsX3VyYihhY20tPmN0cmx1cmIpOwogCWZvciAoaSA9IDA7IGkgPCBBQ01fTlc7IGkrKykKIAkJdXNiX2tpbGxfdXJiKGFjbS0+d2JbaV0udXJiKTsKIAlmb3IgKGkgPSAwOyBpIDwgYWNtLT5yeF9idWZsaW1pdDsgaSsrKQotCQl1c2Jfa2lsbF91cmIoYWNtLT5ydVtpXS51cmIpOwotCi0JdGFza2xldF9lbmFibGUoJmFjbS0+dXJiX3Rhc2spOworCQl1c2Jfa2lsbF91cmIoYWNtLT5yZWFkX3VyYnNbaV0pOwogCiAJY2FuY2VsX3dvcmtfc3luYygmYWNtLT53b3JrKTsKIH0KQEAgLTEzODksMTEgKzEzMDgsOSBAQAogCWlmIChtZXNzYWdlLmV2ZW50ICYgUE1fRVZFTlRfQVVUTykgewogCQlpbnQgYjsKIAotCQlzcGluX2xvY2tfaXJxKCZhY20tPnJlYWRfbG9jayk7Ci0JCXNwaW5fbG9jaygmYWNtLT53cml0ZV9sb2NrKTsKLQkJYiA9IGFjbS0+cHJvY2Vzc2luZyArIGFjbS0+dHJhbnNtaXR0aW5nOwotCQlzcGluX3VubG9jaygmYWNtLT53cml0ZV9sb2NrKTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZhY20tPnJlYWRfbG9jayk7CisJCXNwaW5fbG9ja19pcnEoJmFjbS0+d3JpdGVfbG9jayk7CisJCWIgPSBhY20tPnRyYW5zbWl0dGluZzsKKwkJc3Bpbl91bmxvY2tfaXJxKCZhY20tPndyaXRlX2xvY2spOwogCQlpZiAoYikKIAkJCXJldHVybiAtRUJVU1k7CiAJfQpAQCAtMTQ1NSw3ICsxMzcyLDcgQEAKIAkJaWYgKHJ2IDwgMCkKIAkJCWdvdG8gZXJyX291dDsKIAotCQl0YXNrbGV0X3NjaGVkdWxlKCZhY20tPnVyYl90YXNrKTsKKwkJcnYgPSBhY21fc3VibWl0X3JlYWRfdXJicyhhY20sIEdGUF9OT0lPKTsKIAl9CiAKIGVycl9vdXQ6CkBAIC0xNjIyLDYgKzE1MzksMTEgQEAKIAkuZHJpdmVyX2luZm8gPSBOT1RfQV9NT0RFTSwKIAl9LAogCisJLyogU3VwcG9ydCBmb3IgRHJvaWRzIE11SW4gTENEICovCisJeyBVU0JfREVWSUNFKDB4MDRkOCwgMHgwMDBiKSwKKwkuZHJpdmVyX2luZm8gPSBOT19EQVRBX0lOVEVSRkFDRSwKKwl9LAorCiAJLyogY29udHJvbCBpbnRlcmZhY2VzIHdpdGhvdXQgYW55IHByb3RvY29sIHNldCAqLwogCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19DT01NLCBVU0JfQ0RDX1NVQkNMQVNTX0FDTSwKIAkJVVNCX0NEQ19QUk9UT19OT05FKSB9LApAQCAtMTcxNiw4ICsxNjM4LDcgQEAKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCi0JICAgICAgIERSSVZFUl9ERVNDICJcbiIpOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfREVTQyAiXG4iKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5oIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5oCmluZGV4IGI0ZWE1NGQuLmNhNzkzN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uaAorKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmgKQEAgLTcyLDE2ICs3MiwxMCBAQAogfTsKIAogc3RydWN0IGFjbV9yYiB7Ci0Jc3RydWN0IGxpc3RfaGVhZAlsaXN0OwogCWludAkJCXNpemU7CiAJdW5zaWduZWQgY2hhcgkJKmJhc2U7CiAJZG1hX2FkZHJfdAkJZG1hOwotfTsKLQotc3RydWN0IGFjbV9ydSB7Ci0Jc3RydWN0IGxpc3RfaGVhZAlsaXN0OwotCXN0cnVjdCBhY21fcmIJCSpidWZmZXI7Ci0Jc3RydWN0IHVyYgkJKnVyYjsKKwlpbnQJCQlpbmRleDsKIAlzdHJ1Y3QgYWNtCQkqaW5zdGFuY2U7CiB9OwogCkBAIC05NywzNSArOTEsMzAgQEAKIAl1bnNpZ25lZCBpbnQgY291bnRyeV9jb2RlX3NpemU7CQkJLyogc2l6ZSBvZiB0aGlzIGJ1ZmZlciAqLwogCXVuc2lnbmVkIGludCBjb3VudHJ5X3JlbF9kYXRlOwkJCS8qIHJlbGVhc2UgZGF0ZSBvZiB2ZXJzaW9uICovCiAJc3RydWN0IGFjbV93YiB3YltBQ01fTlddOwotCXN0cnVjdCBhY21fcnUgcnVbQUNNX05SXTsKLQlzdHJ1Y3QgYWNtX3JiIHJiW0FDTV9OUl07CisJdW5zaWduZWQgbG9uZyByZWFkX3VyYnNfZnJlZTsKKwlzdHJ1Y3QgdXJiICpyZWFkX3VyYnNbQUNNX05SXTsKKwlzdHJ1Y3QgYWNtX3JiIHJlYWRfYnVmZmVyc1tBQ01fTlJdOwogCWludCByeF9idWZsaW1pdDsKIAlpbnQgcnhfZW5kcG9pbnQ7CiAJc3BpbmxvY2tfdCByZWFkX2xvY2s7Ci0Jc3RydWN0IGxpc3RfaGVhZCBzcGFyZV9yZWFkX3VyYnM7Ci0Jc3RydWN0IGxpc3RfaGVhZCBzcGFyZV9yZWFkX2J1ZnM7Ci0Jc3RydWN0IGxpc3RfaGVhZCBmaWxsZWRfcmVhZF9idWZzOwogCWludCB3cml0ZV91c2VkOwkJCQkJLyogbnVtYmVyIG9mIG5vbi1lbXB0eSB3cml0ZSBidWZmZXJzICovCi0JaW50IHByb2Nlc3Npbmc7CiAJaW50IHRyYW5zbWl0dGluZzsKIAlzcGlubG9ja190IHdyaXRlX2xvY2s7CiAJc3RydWN0IG11dGV4IG11dGV4OwogCXN0cnVjdCB1c2JfY2RjX2xpbmVfY29kaW5nIGxpbmU7CQkvKiBiaXRzLCBzdG9wLCBwYXJpdHkgKi8KIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsJCQkvKiB3b3JrIHF1ZXVlIGVudHJ5IGZvciBsaW5lIGRpc2NpcGxpbmUgd2FraW5nIHVwICovCi0Jd2FpdF9xdWV1ZV9oZWFkX3QgZHJhaW5fd2FpdDsJCQkvKiBjbG9zZSBwcm9jZXNzaW5nICovCi0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IHVyYl90YXNrOyAgICAgICAgICAgICAgICAgLyogcnggcHJvY2Vzc2luZyAqLwotCXNwaW5sb2NrX3QgdGhyb3R0bGVfbG9jazsJCQkvKiBzeW5jaHJvbml6ZSB0aHJvdHRlbGluZyBhbmQgcmVhZCBjYWxsYmFjayAqLwogCXVuc2lnbmVkIGludCBjdHJsaW47CQkJCS8qIGlucHV0IGNvbnRyb2wgbGluZXMgKERDRCwgRFNSLCBSSSwgYnJlYWssIG92ZXJydW5zKSAqLwogCXVuc2lnbmVkIGludCBjdHJsb3V0OwkJCQkvKiBvdXRwdXQgY29udHJvbCBsaW5lcyAoRFRSLCBSVFMpICovCiAJdW5zaWduZWQgaW50IHdyaXRlc2l6ZTsJCQkJLyogbWF4IHBhY2tldCBzaXplIGZvciB0aGUgb3V0cHV0IGJ1bGsgZW5kcG9pbnQgKi8KIAl1bnNpZ25lZCBpbnQgcmVhZHNpemUsY3RybHNpemU7CQkJLyogYnVmZmVyIHNpemVzIGZvciBmcmVlaW5nICovCiAJdW5zaWduZWQgaW50IG1pbm9yOwkJCQkvKiBhY20gbWlub3IgbnVtYmVyICovCi0JdW5zaWduZWQgY2hhciB0aHJvdHRsZTsJCQkJLyogdGhyb3R0bGVkIGJ5IHR0eSBsYXllciAqLwogCXVuc2lnbmVkIGNoYXIgY2xvY2FsOwkJCQkvKiB0ZXJtaW9zIENMT0NBTCAqLwogCXVuc2lnbmVkIGludCBjdHJsX2NhcHM7CQkJCS8qIGNvbnRyb2wgY2FwYWJpbGl0aWVzIGZyb20gdGhlIGNsYXNzIHNwZWNpZmljIGhlYWRlciAqLwogCXVuc2lnbmVkIGludCBzdXNwX2NvdW50OwkJCS8qIG51bWJlciBvZiBzdXNwZW5kZWQgaW50ZXJmYWNlcyAqLwogCXVuc2lnbmVkIGludCBjb21iaW5lZF9pbnRlcmZhY2VzOjE7CQkvKiBjb250cm9sIGFuZCBkYXRhIGNvbGxhcHNlZCAqLwogCXVuc2lnbmVkIGludCBpc19pbnRfZXA6MTsJCQkvKiBpbnRlcnJ1cHQgZW5kcG9pbnRzIGNvbnRyYXJ5IHRvIHNwZWMgdXNlZCAqLworCXVuc2lnbmVkIGludCB0aHJvdHRsZWQ6MTsJCQkvKiBhY3R1YWxseSB0aHJvdHRsZWQgKi8KKwl1bnNpZ25lZCBpbnQgdGhyb3R0bGVfcmVxOjE7CQkJLyogdGhyb3R0bGUgcmVxdWVzdGVkICovCiAJdTggYkludGVydmFsOwogCXN0cnVjdCBhY21fd2IgKmRlbGF5ZWRfd2I7CQkJLyogd3JpdGUgcXVldWVkIGZvciBhIGRldmljZSBhYm91dCB0byBiZSB3b2tlbiAqLwogfTsKQEAgLTEzNywzICsxMjYsNCBAQAogI2RlZmluZSBTSU5HTEVfUlhfVVJCCQkJMgogI2RlZmluZSBOT19DQVBfTElORQkJCTQKICNkZWZpbmUgTk9UX0FfTU9ERU0JCQk4CisjZGVmaW5lIE5PX0RBVEFfSU5URVJGQUNFCQkxNgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLXdkbS5jIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLXdkbS5jCmluZGV4IGE5N2MwMTguLjJiOWZmNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy13ZG0uYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtd2RtLmMKQEAgLTU0Miw2ICs1NDIsOCBAQAogCiAJbXV0ZXhfbG9jaygmZGVzYy0+bG9jayk7CiAJaWYgKCFkZXNjLT5jb3VudCsrKSB7CisJCWRlc2MtPndlcnIgPSAwOworCQlkZXNjLT5yZXJyID0gMDsKIAkJcnYgPSB1c2Jfc3VibWl0X3VyYihkZXNjLT52YWxpZGl0eSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChydiA8IDApIHsKIAkJCWRlc2MtPmNvdW50LS07CkBAIC04NTMsNiArODU1LDE4IEBACiAJc3RydWN0IHdkbV9kZXZpY2UgKmRlc2MgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCiAJbXV0ZXhfbG9jaygmZGVzYy0+bG9jayk7CisJa2lsbF91cmJzKGRlc2MpOworCisJLyoKKwkgKiB3ZSBub3RpZnkgZXZlcnlib2R5IHVzaW5nIHBvbGwgb2YKKwkgKiBhbiBleGNlcHRpb25hbCBzaXR1YXRpb24KKwkgKiBtdXN0IGJlIGRvbmUgYmVmb3JlIHJlY292ZXJ5IGxlc3QgYSBzcG9udGFuZW91cworCSAqIG1lc3NhZ2UgZnJvbSB0aGUgZGV2aWNlIGlzIGxvc3QKKwkgKi8KKwlzcGluX2xvY2tfaXJxKCZkZXNjLT5pdXNwaW4pOworCWRlc2MtPnJlcnIgPSAtRUlOVFI7CisJc3Bpbl91bmxvY2tfaXJxKCZkZXNjLT5pdXNwaW4pOworCXdha2VfdXBfYWxsKCZkZXNjLT53YWl0KTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9jb25maWcuYyBiL2RyaXZlcnMvdXNiL2NvcmUvY29uZmlnLmMKaW5kZXggODMxMjZiMC4uYzk2MjYwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9jb25maWcuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2NvbmZpZy5jCkBAIC0xMjksNyArMTI5LDcgQEAKIAkJbWF4X3R4ID0gZXAtPmRlc2Mud01heFBhY2tldFNpemUgKiAoZGVzYy0+Yk1heEJ1cnN0ICsgMSk7CiAJZWxzZQogCQltYXhfdHggPSA5OTk5OTk7Ci0JaWYgKGRlc2MtPndCeXRlc1BlckludGVydmFsID4gbWF4X3R4KSB7CisJaWYgKGxlMTZfdG9fY3B1KGRlc2MtPndCeXRlc1BlckludGVydmFsKSA+IG1heF90eCkgewogCQlkZXZfd2FybihkZGV2LCAiJXMgZW5kcG9pbnQgd2l0aCB3Qnl0ZXNQZXJJbnRlcnZhbCBvZiAlZCBpbiAiCiAJCQkJImNvbmZpZyAlZCBpbnRlcmZhY2UgJWQgYWx0c2V0dGluZyAlZCBlcCAlZDogIgogCQkJCSJzZXR0aW5nIHRvICVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYwppbmRleCA5NmZkZmI4Li4wMTQ5YzA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYwpAQCAtNjQsNDkgKzY0LDQ5IEBACiAvKiBEZWZpbmUgQUxMT1dfU0VSSUFMX05VTUJFUiBpZiB5b3Ugd2FudCB0byBzZWUgdGhlIHNlcmlhbCBudW1iZXIgb2YgZGV2aWNlcyAqLwogI2RlZmluZSBBTExPV19TRVJJQUxfTlVNQkVSCiAKLXN0YXRpYyBjb25zdCBjaGFyICpmb3JtYXRfdG9wbyA9CitzdGF0aWMgY29uc3QgY2hhciBmb3JtYXRfdG9wb1tdID0KIC8qIFQ6ICBCdXM9ZGQgTGV2PWRkIFBybnQ9ZGQgUG9ydD1kZCBDbnQ9ZGQgRGV2Iz1kZGQgU3BkPWRkZGQgTXhDaD1kZCAqLwogIlxuVDogIEJ1cz0lMi4yZCBMZXY9JTIuMmQgUHJudD0lMi4yZCBQb3J0PSUyLjJkIENudD0lMi4yZCBEZXYjPSUzZCBTcGQ9JS00cyBNeENoPSUyZFxuIjsKIAotc3RhdGljIGNvbnN0IGNoYXIgKmZvcm1hdF9zdHJpbmdfbWFudWZhY3R1cmVyID0KK3N0YXRpYyBjb25zdCBjaGFyIGZvcm1hdF9zdHJpbmdfbWFudWZhY3R1cmVyW10gPQogLyogUzogIE1hbnVmYWN0dXJlcj14eHh4ICovCiAgICJTOiAgTWFudWZhY3R1cmVyPSUuMTAwc1xuIjsKIAotc3RhdGljIGNvbnN0IGNoYXIgKmZvcm1hdF9zdHJpbmdfcHJvZHVjdCA9CitzdGF0aWMgY29uc3QgY2hhciBmb3JtYXRfc3RyaW5nX3Byb2R1Y3RbXSA9CiAvKiBTOiAgUHJvZHVjdD14eHh4ICovCiAgICJTOiAgUHJvZHVjdD0lLjEwMHNcbiI7CiAKICNpZmRlZiBBTExPV19TRVJJQUxfTlVNQkVSCi1zdGF0aWMgY29uc3QgY2hhciAqZm9ybWF0X3N0cmluZ19zZXJpYWxudW1iZXIgPQorc3RhdGljIGNvbnN0IGNoYXIgZm9ybWF0X3N0cmluZ19zZXJpYWxudW1iZXJbXSA9CiAvKiBTOiAgU2VyaWFsTnVtYmVyPXh4eHggKi8KICAgIlM6ICBTZXJpYWxOdW1iZXI9JS4xMDBzXG4iOwogI2VuZGlmCiAKLXN0YXRpYyBjb25zdCBjaGFyICpmb3JtYXRfYmFuZHdpZHRoID0KK3N0YXRpYyBjb25zdCBjaGFyIGZvcm1hdF9iYW5kd2lkdGhbXSA9CiAvKiBCOiAgQWxsb2M9ZGRkL2RkZCB1cyAoeHglKSwgI0ludD1kZGQsICNJc289ZGRkICovCiAgICJCOiAgQWxsb2M9JTNkLyUzZCB1cyAoJTJkJSUpLCAjSW50PSUzZCwgI0lzbz0lM2RcbiI7CiAKLXN0YXRpYyBjb25zdCBjaGFyICpmb3JtYXRfZGV2aWNlMSA9CitzdGF0aWMgY29uc3QgY2hhciBmb3JtYXRfZGV2aWNlMVtdID0KIC8qIEQ6ICBWZXI9eHgueHggQ2xzPXh4KHNzc3NzKSBTdWI9eHggUHJvdD14eCBNeFBTPWRkICNDZmdzPWRkICovCiAgICJEOiAgVmVyPSUyeC4lMDJ4IENscz0lMDJ4KCUtNXMpIFN1Yj0lMDJ4IFByb3Q9JTAyeCBNeFBTPSUyZCAjQ2Zncz0lM2RcbiI7CiAKLXN0YXRpYyBjb25zdCBjaGFyICpmb3JtYXRfZGV2aWNlMiA9CitzdGF0aWMgY29uc3QgY2hhciBmb3JtYXRfZGV2aWNlMltdID0KIC8qIFA6ICBWZW5kb3I9eHh4eCBQcm9kSUQ9eHh4eCBSZXY9eHgueHggKi8KICAgIlA6ICBWZW5kb3I9JTA0eCBQcm9kSUQ9JTA0eCBSZXY9JTJ4LiUwMnhcbiI7CiAKLXN0YXRpYyBjb25zdCBjaGFyICpmb3JtYXRfY29uZmlnID0KK3N0YXRpYyBjb25zdCBjaGFyIGZvcm1hdF9jb25maWdbXSA9CiAvKiBDOiAgI0lmcz1kZCBDZmcjPWRkIEF0cj14eCBNUHdyPWRkZG1BICovCiAgICJDOiVjICNJZnM9JTJkIENmZyM9JTJkIEF0cj0lMDJ4IE14UHdyPSUzZG1BXG4iOwogCi1zdGF0aWMgY29uc3QgY2hhciAqZm9ybWF0X2lhZCA9CitzdGF0aWMgY29uc3QgY2hhciBmb3JtYXRfaWFkW10gPQogLyogQTogIEZpcnN0SWYjPWRkIElmQ291bnQ9ZGQgQ2xzPXh4KHNzc3NzKSBTdWI9eHggUHJvdD14eCAqLwogICAiQTogIEZpcnN0SWYjPSUyZCBJZkNvdW50PSUyZCBDbHM9JTAyeCglLTVzKSBTdWI9JTAyeCBQcm90PSUwMnhcbiI7CiAKLXN0YXRpYyBjb25zdCBjaGFyICpmb3JtYXRfaWZhY2UgPQorc3RhdGljIGNvbnN0IGNoYXIgZm9ybWF0X2lmYWNlW10gPQogLyogSTogIElmIz1kZCBBbHQ9ZGQgI0VQcz1kZCBDbHM9eHgoc3Nzc3MpIFN1Yj14eCBQcm90PXh4IERyaXZlcj14eHh4Ki8KICAgIkk6JWMgSWYjPSUyZCBBbHQ9JTJkICNFUHM9JTJkIENscz0lMDJ4KCUtNXMpIFN1Yj0lMDJ4IFByb3Q9JTAyeCBEcml2ZXI9JXNcbiI7CiAKLXN0YXRpYyBjb25zdCBjaGFyICpmb3JtYXRfZW5kcHQgPQorc3RhdGljIGNvbnN0IGNoYXIgZm9ybWF0X2VuZHB0W10gPQogLyogRTogIEFkPXh4KHMpIEF0cj14eChzc3NzKSBNeFBTPWRkZGQgSXZsPUQ/cyAqLwogICAiRTogIEFkPSUwMngoJWMpIEF0cj0lMDJ4KCUtNHMpIE14UFM9JTRkIEl2bD0lZCVjc1xuIjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9maWxlLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2ZpbGUuYwppbmRleCBjZjZhNTQyLi45OTQ1OGM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2ZpbGUuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2ZpbGUuYwpAQCAtMjM2LDEzICsyMzYsNiBAQAogdm9pZCB1c2JfZGVyZWdpc3Rlcl9kZXYoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJCQlzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciAqY2xhc3NfZHJpdmVyKQogewotCWludCBtaW5vcl9iYXNlID0gY2xhc3NfZHJpdmVyLT5taW5vcl9iYXNlOwotCWNoYXIgbmFtZVsyMF07Ci0KLSNpZmRlZiBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTCi0JbWlub3JfYmFzZSA9IDA7Ci0jZW5kaWYKLQogCWlmIChpbnRmLT5taW5vciA9PSAtMSkKIAkJcmV0dXJuOwogCkBAIC0yNTIsNyArMjQ1LDYgQEAKIAl1c2JfbWlub3JzW2ludGYtPm1pbm9yXSA9IE5VTEw7CiAJdXBfd3JpdGUoJm1pbm9yX3J3c2VtKTsKIAotCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgY2xhc3NfZHJpdmVyLT5uYW1lLCBpbnRmLT5taW5vciAtIG1pbm9yX2Jhc2UpOwogCWRldmljZV9kZXN0cm95KHVzYl9jbGFzcy0+Y2xhc3MsIE1LREVWKFVTQl9NQUpPUiwgaW50Zi0+bWlub3IpKTsKIAlpbnRmLT51c2JfZGV2ID0gTlVMTDsKIAlpbnRmLT5taW5vciA9IC0xOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKaW5kZXggNzdhN2ZhZS4uYWNlOWY4NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwpAQCAtOTg2LDcgKzk4Niw3IEBACiAJCXNwaW5fdW5sb2NrX2lycSAoJmhjZF9yb290X2h1Yl9sb2NrKTsKIAogCQkvKiBEaWQgdGhlIEhDIGRpZSBiZWZvcmUgdGhlIHJvb3QgaHViIHdhcyByZWdpc3RlcmVkPyAqLwotCQlpZiAoSENEX0RFQUQoaGNkKSB8fCBoY2QtPnN0YXRlID09IEhDX1NUQVRFX0hBTFQpCisJCWlmIChIQ0RfREVBRChoY2QpKQogCQkJdXNiX2hjX2RpZWQgKGhjZCk7CS8qIFRoaXMgdGltZSBjbGVhbiB1cCAqLwogCX0KIApAQCAtMjEyOCw5ICsyMTI4LDYgQEAKIAkJc2V0X2JpdChIQ0RfRkxBR19TQVdfSVJRLCAmaGNkLT5mbGFncyk7CiAJCWlmIChoY2QtPnNoYXJlZF9oY2QpCiAJCQlzZXRfYml0KEhDRF9GTEFHX1NBV19JUlEsICZoY2QtPnNoYXJlZF9oY2QtPmZsYWdzKTsKLQotCQlpZiAodW5saWtlbHkoaGNkLT5zdGF0ZSA9PSBIQ19TVEFURV9IQUxUKSkKLQkJCXVzYl9oY19kaWVkKGhjZCk7CiAJCXJjID0gSVJRX0hBTkRMRUQ7CiAJfQogCkBAIC0yNDA3LDYgKzI0MDQsNyBAQAogCQlyaGRldi0+c3BlZWQgPSBVU0JfU1BFRURfU1VQRVI7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CisJCXJldHZhbCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX3NldF9yaF9zcGVlZDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCmluZGV4IDkzNzIwYmRjLi43OWE1OGMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKQEAgLTM3OSwxNSArMzc5LDYgQEAKIAkJKnN0YXR1cyA9IGxlMTZfdG9fY3B1KGh1Yi0+c3RhdHVzLT5wb3J0LndQb3J0U3RhdHVzKTsKIAkJKmNoYW5nZSA9IGxlMTZfdG9fY3B1KGh1Yi0+c3RhdHVzLT5wb3J0LndQb3J0Q2hhbmdlKTsKIAotCQlpZiAoKGh1Yi0+aGRldi0+cGFyZW50ICE9IE5VTEwpICYmCi0JCQkJaHViX2lzX3N1cGVyc3BlZWQoaHViLT5oZGV2KSkgewotCQkJLyogVHJhbnNsYXRlIHRoZSBVU0IgMyBwb3J0IHN0YXR1cyAqLwotCQkJdTE2IHRtcCA9ICpzdGF0dXMgJiBVU0JfU1NfUE9SVF9TVEFUX01BU0s7Ci0JCQlpZiAoKnN0YXR1cyAmIFVTQl9TU19QT1JUX1NUQVRfUE9XRVIpCi0JCQkJdG1wIHw9IFVTQl9QT1JUX1NUQVRfUE9XRVI7Ci0JCQkqc3RhdHVzID0gdG1wOwotCQl9Ci0KIAkJcmV0ID0gMDsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZodWItPnN0YXR1c19tdXRleCk7CkBAIC0yMTYwLDExICsyMTUxLDc2IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAorLyogV2FybSByZXNldCBhIFVTQjMgcHJvdG9jb2wgcG9ydCAqLworc3RhdGljIGludCBodWJfcG9ydF93YXJtX3Jlc2V0KHN0cnVjdCB1c2JfaHViICpodWIsIGludCBwb3J0KQoreworCWludCByZXQ7CisJdTE2IHBvcnRzdGF0dXMsIHBvcnRjaGFuZ2U7CisKKwlpZiAoIWh1Yl9pc19zdXBlcnNwZWVkKGh1Yi0+aGRldikpIHsKKwkJZGV2X2VycihodWItPmludGZkZXYsICJvbmx5IFVTQjMgaHViIHN1cHBvcnQgd2FybSByZXNldFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFdhcm0gcmVzZXQgdGhlIHBvcnQgKi8KKwlyZXQgPSBzZXRfcG9ydF9mZWF0dXJlKGh1Yi0+aGRldiwKKwkJCQlwb3J0LCBVU0JfUE9SVF9GRUFUX0JIX1BPUlRfUkVTRVQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihodWItPmludGZkZXYsICJjYW5ub3Qgd2FybSByZXNldCBwb3J0ICVkXG4iLCBwb3J0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwltc2xlZXAoMjApOworCXJldCA9IGh1Yl9wb3J0X3N0YXR1cyhodWIsIHBvcnQsICZwb3J0c3RhdHVzLCAmcG9ydGNoYW5nZSk7CisKKwlpZiAocG9ydGNoYW5nZSAmIFVTQl9QT1JUX1NUQVRfQ19SRVNFVCkKKwkJY2xlYXJfcG9ydF9mZWF0dXJlKGh1Yi0+aGRldiwgcG9ydCwgVVNCX1BPUlRfRkVBVF9DX1JFU0VUKTsKKworCWlmIChwb3J0Y2hhbmdlICYgVVNCX1BPUlRfU1RBVF9DX0JIX1JFU0VUKQorCQljbGVhcl9wb3J0X2ZlYXR1cmUoaHViLT5oZGV2LCBwb3J0LAorCQkJCQlVU0JfUE9SVF9GRUFUX0NfQkhfUE9SVF9SRVNFVCk7CisKKwlpZiAocG9ydGNoYW5nZSAmIFVTQl9QT1JUX1NUQVRfQ19MSU5LX1NUQVRFKQorCQljbGVhcl9wb3J0X2ZlYXR1cmUoaHViLT5oZGV2LCBwb3J0LAorCQkJCQlVU0JfUE9SVF9GRUFUX0NfUE9SVF9MSU5LX1NUQVRFKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIENoZWNrIGlmIGEgcG9ydCBpcyBwb3dlciBvbiAqLworc3RhdGljIGludCBwb3J0X2lzX3Bvd2VyX29uKHN0cnVjdCB1c2JfaHViICpodWIsIHVuc2lnbmVkIHBvcnRzdGF0dXMpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoaHViX2lzX3N1cGVyc3BlZWQoaHViLT5oZGV2KSkgeworCQlpZiAocG9ydHN0YXR1cyAmIFVTQl9TU19QT1JUX1NUQVRfUE9XRVIpCisJCQlyZXQgPSAxOworCX0gZWxzZSB7CisJCWlmIChwb3J0c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9QT1dFUikKKwkJCXJldCA9IDE7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwogI2lmZGVmCUNPTkZJR19QTQogCi0jZGVmaW5lIE1BU0tfQklUUwkoVVNCX1BPUlRfU1RBVF9QT1dFUiB8IFVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTiB8IFwKLQkJCQlVU0JfUE9SVF9TVEFUX1NVU1BFTkQpCi0jZGVmaW5lIFdBTlRfQklUUwkoVVNCX1BPUlRfU1RBVF9QT1dFUiB8IFVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTikKKy8qIENoZWNrIGlmIGEgcG9ydCBpcyBzdXNwZW5kZWQoVVNCMi4wIHBvcnQpIG9yIGluIFUzIHN0YXRlKFVTQjMuMCBwb3J0KSAqLworc3RhdGljIGludCBwb3J0X2lzX3N1c3BlbmRlZChzdHJ1Y3QgdXNiX2h1YiAqaHViLCB1bnNpZ25lZCBwb3J0c3RhdHVzKQoreworCWludCByZXQgPSAwOworCisJaWYgKGh1Yl9pc19zdXBlcnNwZWVkKGh1Yi0+aGRldikpIHsKKwkJaWYgKChwb3J0c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9MSU5LX1NUQVRFKQorCQkJCT09IFVTQl9TU19QT1JUX0xTX1UzKQorCQkJcmV0ID0gMTsKKwl9IGVsc2UgeworCQlpZiAocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfU1VTUEVORCkKKwkJCXJldCA9IDE7CisJfQorCisJcmV0dXJuIHJldDsKK30KIAogLyogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGRldmljZSBvbiBhIHBvcnQgaXMgcmVhZHkgZm9yIGEgbm9ybWFsIHJlc3VtZSwKICAqIGlzIHJlYWR5IGZvciBhIHJlc2V0LXJlc3VtZSwgb3Igc2hvdWxkIGJlIGRpc2Nvbm5lY3RlZC4KQEAgLTIxNzQsNyArMjIzMCw5IEBACiAJCWludCBzdGF0dXMsIHVuc2lnbmVkIHBvcnRjaGFuZ2UsIHVuc2lnbmVkIHBvcnRzdGF0dXMpCiB7CiAJLyogSXMgdGhlIGRldmljZSBzdGlsbCBwcmVzZW50PyAqLwotCWlmIChzdGF0dXMgfHwgKHBvcnRzdGF0dXMgJiBNQVNLX0JJVFMpICE9IFdBTlRfQklUUykgeworCWlmIChzdGF0dXMgfHwgcG9ydF9pc19zdXNwZW5kZWQoaHViLCBwb3J0c3RhdHVzKSB8fAorCQkJIXBvcnRfaXNfcG93ZXJfb24oaHViLCBwb3J0c3RhdHVzKSB8fAorCQkJIShwb3J0c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OKSkgewogCQlpZiAoc3RhdHVzID49IDApCiAJCQlzdGF0dXMgPSAtRU5PREVWOwogCX0KQEAgLTIyODUsMTQgKzIzNDMsMTAgQEAKIAl9CiAKIAkvKiBzZWUgNy4xLjcuNiAqLwotCS8qIENsZWFyIFBPUlRfUE9XRVIgaWYgaXQncyBhIFVTQjMuMCBkZXZpY2UgY29ubmVjdGVkIHRvIFVTQiAzLjAKLQkgKiBleHRlcm5hbCBodWIuCi0JICogRklYTUU6IHRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCB0byBtYWtlIHRoZSBzeXN0ZW0gYWJsZQotCSAqIHRvIHN1c3BlbmQvcmVzdW1lLgotCSAqLwotCWlmICgoaHViLT5oZGV2LT5wYXJlbnQgIT0gTlVMTCkgJiYgaHViX2lzX3N1cGVyc3BlZWQoaHViLT5oZGV2KSkKLQkJc3RhdHVzID0gY2xlYXJfcG9ydF9mZWF0dXJlKGh1Yi0+aGRldiwgcG9ydDEsCi0JCQkJCQlVU0JfUE9SVF9GRUFUX1BPV0VSKTsKKwlpZiAoaHViX2lzX3N1cGVyc3BlZWQoaHViLT5oZGV2KSkKKwkJc3RhdHVzID0gc2V0X3BvcnRfZmVhdHVyZShodWItPmhkZXYsCisJCQkJcG9ydDEgfCAoVVNCX1NTX1BPUlRfTFNfVTMgPDwgMyksCisJCQkJVVNCX1BPUlRfRkVBVF9MSU5LX1NUQVRFKTsKIAllbHNlCiAJCXN0YXR1cyA9IHNldF9wb3J0X2ZlYXR1cmUoaHViLT5oZGV2LCBwb3J0MSwKIAkJCQkJCVVTQl9QT1JUX0ZFQVRfU1VTUEVORCk7CkBAIC0yNDM5LDcgKzI0OTMsNyBAQAogCiAJLyogU2tpcCB0aGUgaW5pdGlhbCBDbGVhci1TdXNwZW5kIHN0ZXAgZm9yIGEgcmVtb3RlIHdha2V1cCAqLwogCXN0YXR1cyA9IGh1Yl9wb3J0X3N0YXR1cyhodWIsIHBvcnQxLCAmcG9ydHN0YXR1cywgJnBvcnRjaGFuZ2UpOwotCWlmIChzdGF0dXMgPT0gMCAmJiAhKHBvcnRzdGF0dXMgJiBVU0JfUE9SVF9TVEFUX1NVU1BFTkQpKQorCWlmIChzdGF0dXMgPT0gMCAmJiAhcG9ydF9pc19zdXNwZW5kZWQoaHViLCBwb3J0c3RhdHVzKSkKIAkJZ290byBTdXNwZW5kQ2xlYXJlZDsKIAogCS8vIGRldl9kYmcoaHViLT5pbnRmZGV2LCAicmVzdW1lIHBvcnQgJWRcbiIsIHBvcnQxKTsKQEAgLTI0NDcsOCArMjUwMSwxMyBAQAogCXNldF9iaXQocG9ydDEsIGh1Yi0+YnVzeV9iaXRzKTsKIAogCS8qIHNlZSA3LjEuNy43OyBhZmZlY3RzIHBvd2VyIHVzYWdlLCBidXQgbm90IGJ1ZGdldGluZyAqLwotCXN0YXR1cyA9IGNsZWFyX3BvcnRfZmVhdHVyZShodWItPmhkZXYsCi0JCQlwb3J0MSwgVVNCX1BPUlRfRkVBVF9TVVNQRU5EKTsKKwlpZiAoaHViX2lzX3N1cGVyc3BlZWQoaHViLT5oZGV2KSkKKwkJc3RhdHVzID0gc2V0X3BvcnRfZmVhdHVyZShodWItPmhkZXYsCisJCQkJcG9ydDEgfCAoVVNCX1NTX1BPUlRfTFNfVTAgPDwgMyksCisJCQkJVVNCX1BPUlRfRkVBVF9MSU5LX1NUQVRFKTsKKwllbHNlCisJCXN0YXR1cyA9IGNsZWFyX3BvcnRfZmVhdHVyZShodWItPmhkZXYsCisJCQkJcG9ydDEsIFVTQl9QT1JUX0ZFQVRfU1VTUEVORCk7CiAJaWYgKHN0YXR1cykgewogCQlkZXZfZGJnKGh1Yi0+aW50ZmRldiwgImNhbid0IHJlc3VtZSBwb3J0ICVkLCBzdGF0dXMgJWRcbiIsCiAJCQkJcG9ydDEsIHN0YXR1cyk7CkBAIC0yNDcwLDkgKzI1MjksMTUgQEAKIAogIFN1c3BlbmRDbGVhcmVkOgogCWlmIChzdGF0dXMgPT0gMCkgewotCQlpZiAocG9ydGNoYW5nZSAmIFVTQl9QT1JUX1NUQVRfQ19TVVNQRU5EKQotCQkJY2xlYXJfcG9ydF9mZWF0dXJlKGh1Yi0+aGRldiwgcG9ydDEsCi0JCQkJCVVTQl9QT1JUX0ZFQVRfQ19TVVNQRU5EKTsKKwkJaWYgKGh1Yl9pc19zdXBlcnNwZWVkKGh1Yi0+aGRldikpIHsKKwkJCWlmIChwb3J0Y2hhbmdlICYgVVNCX1BPUlRfU1RBVF9DX0xJTktfU1RBVEUpCisJCQkJY2xlYXJfcG9ydF9mZWF0dXJlKGh1Yi0+aGRldiwgcG9ydDEsCisJCQkJCVVTQl9QT1JUX0ZFQVRfQ19QT1JUX0xJTktfU1RBVEUpOworCQl9IGVsc2UgeworCQkJaWYgKHBvcnRjaGFuZ2UgJiBVU0JfUE9SVF9TVEFUX0NfU1VTUEVORCkKKwkJCQljbGVhcl9wb3J0X2ZlYXR1cmUoaHViLT5oZGV2LCBwb3J0MSwKKwkJCQkJCVVTQl9QT1JUX0ZFQVRfQ19TVVNQRU5EKTsKKwkJfQogCX0KIAogCWNsZWFyX2JpdChwb3J0MSwgaHViLT5idXN5X2JpdHMpOwpAQCAtMzE0Nyw3ICszMjEyLDcgQEAKIAogCQkvKiBtYXliZSBzd2l0Y2ggcG93ZXIgYmFjayBvbiAoZS5nLiByb290IGh1YiB3YXMgcmVzZXQpICovCiAJCWlmICgod0h1YkNoYXJhY3RlcmlzdGljcyAmIEhVQl9DSEFSX0xQU00pIDwgMgotCQkJCSYmICEocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfUE9XRVIpKQorCQkJCSYmICFwb3J0X2lzX3Bvd2VyX29uKGh1YiwgcG9ydHN0YXR1cykpCiAJCQlzZXRfcG9ydF9mZWF0dXJlKGhkZXYsIHBvcnQxLCBVU0JfUE9SVF9GRUFUX1BPV0VSKTsKIAogCQlpZiAocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfRU5BQkxFKQpAQCAtMzQ5MCw2ICszNTU1LDE2IEBACiAJCQkJCQlVU0JfUE9SVF9GRUFUX0NfUE9SVF9DT05GSUdfRVJST1IpOwogCQkJfQogCisJCQkvKiBXYXJtIHJlc2V0IGEgVVNCMyBwcm90b2NvbCBwb3J0IGlmIGl0J3MgaW4KKwkJCSAqIFNTLkluYWN0aXZlIHN0YXRlLgorCQkJICovCisJCQlpZiAoaHViX2lzX3N1cGVyc3BlZWQoaHViLT5oZGV2KSAmJgorCQkJCShwb3J0c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9MSU5LX1NUQVRFKQorCQkJCQk9PSBVU0JfU1NfUE9SVF9MU19TU19JTkFDVElWRSkgeworCQkJCWRldl9kYmcoaHViX2RldiwgIndhcm0gcmVzZXQgcG9ydCAlZFxuIiwgaSk7CisJCQkJaHViX3BvcnRfd2FybV9yZXNldChodWIsIGkpOworCQkJfQorCiAJCQlpZiAoY29ubmVjdF9jaGFuZ2UpCiAJCQkJaHViX3BvcnRfY29ubmVjdF9jaGFuZ2UoaHViLCBpLAogCQkJCQkJcG9ydHN0YXR1cywgcG9ydGNoYW5nZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMKaW5kZXggNjc4MWMzNi4uY2YwNWI5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYwpAQCAtODQyLDIyICs4NDIsMTkgQEAKIAlOVUxMCiB9OwogCi1pbnQgdXNiX2NyZWF0ZV9zeXNmc19pbnRmX2ZpbGVzKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQordm9pZCB1c2JfY3JlYXRlX3N5c2ZzX2ludGZfZmlsZXMoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwogCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdCA9IGludGYtPmN1cl9hbHRzZXR0aW5nOwotCWludCByZXR2YWw7CiAKIAlpZiAoaW50Zi0+c3lzZnNfZmlsZXNfY3JlYXRlZCB8fCBpbnRmLT51bnJlZ2lzdGVyaW5nKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCi0JaWYgKGFsdC0+c3RyaW5nID09IE5VTEwgJiYKLQkJCSEodWRldi0+cXVpcmtzICYgVVNCX1FVSVJLX0NPTkZJR19JTlRGX1NUUklOR1MpKQorCWlmICghYWx0LT5zdHJpbmcgJiYgISh1ZGV2LT5xdWlya3MgJiBVU0JfUVVJUktfQ09ORklHX0lOVEZfU1RSSU5HUykpCiAJCWFsdC0+c3RyaW5nID0gdXNiX2NhY2hlX3N0cmluZyh1ZGV2LCBhbHQtPmRlc2MuaUludGVyZmFjZSk7Ci0JaWYgKGFsdC0+c3RyaW5nKQotCQlyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2ludGVyZmFjZSk7CisJaWYgKGFsdC0+c3RyaW5nICYmIGRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfaW50ZXJmYWNlKSkKKwkJOwkvKiBXZSBkb24ndCBhY3R1YWxseSBjYXJlIGlmIHRoZSBmdW5jdGlvbiBmYWlscy4gKi8KIAlpbnRmLT5zeXNmc19maWxlc19jcmVhdGVkID0gMTsKLQlyZXR1cm4gMDsKIH0KIAogdm9pZCB1c2JfcmVtb3ZlX3N5c2ZzX2ludGZfZmlsZXMoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jIGIvZHJpdmVycy91c2IvY29yZS91c2IuYwppbmRleCBkOWQ0YjE2Li44NzA2ZmM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMKQEAgLTk1Myw4ICs5NTMsNyBAQAogCQlpZiAoZGV2LT50eXBlID09ICZ1c2JfZGV2aWNlX3R5cGUpCiAJCQkodm9pZCkgdXNiX2NyZWF0ZV9zeXNmc19kZXZfZmlsZXModG9fdXNiX2RldmljZShkZXYpKTsKIAkJZWxzZSBpZiAoZGV2LT50eXBlID09ICZ1c2JfaWZfZGV2aWNlX3R5cGUpCi0JCQkodm9pZCkgdXNiX2NyZWF0ZV9zeXNmc19pbnRmX2ZpbGVzKAotCQkJCQl0b191c2JfaW50ZXJmYWNlKGRldikpOworCQkJdXNiX2NyZWF0ZV9zeXNmc19pbnRmX2ZpbGVzKHRvX3VzYl9pbnRlcmZhY2UoZGV2KSk7CiAJCWJyZWFrOwogCiAJY2FzZSBCVVNfTk9USUZZX0RFTF9ERVZJQ0U6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5oIGIvZHJpdmVycy91c2IvY29yZS91c2IuaAppbmRleCBkNDUwYjc0Li5kNDRkNGI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5oCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmgKQEAgLTQsNyArNCw3IEBACiAKIGV4dGVybiBpbnQgdXNiX2NyZWF0ZV9zeXNmc19kZXZfZmlsZXMoc3RydWN0IHVzYl9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCB1c2JfcmVtb3ZlX3N5c2ZzX2Rldl9maWxlcyhzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KTsKLWV4dGVybiBpbnQgdXNiX2NyZWF0ZV9zeXNmc19pbnRmX2ZpbGVzKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKK2V4dGVybiB2b2lkIHVzYl9jcmVhdGVfc3lzZnNfaW50Zl9maWxlcyhzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CiBleHRlcm4gdm9pZCB1c2JfcmVtb3ZlX3N5c2ZzX2ludGZfZmlsZXMoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOwogZXh0ZXJuIGludCB1c2JfY3JlYXRlX2VwX2RldnMoc3RydWN0IGRldmljZSAqcGFyZW50LAogCQkJCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZW5kcG9pbnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9lYXJseS9laGNpLWRiZ3AuYyBiL2RyaXZlcnMvdXNiL2Vhcmx5L2VoY2ktZGJncC5jCmluZGV4IGE2YTM1MGYuLjFmYzhmMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2Vhcmx5L2VoY2ktZGJncC5jCisrKyBiL2RyaXZlcnMvdXNiL2Vhcmx5L2VoY2ktZGJncC5jCkBAIC0xMDIsNiArMTAyLDkgQEAKICNkZWZpbmUgZGJncF9rZ2RiX21vZGUgKDApCiAjZW5kaWYKIAorLyogTG9jYWwgdmVyc2lvbiBvZiBIQ19MRU5HVEggbWFjcm8gYXMgZWhjaSBzdHJ1Y3QgaXMgbm90IGF2YWlsYWJsZSBoZXJlICovCisjZGVmaW5lIEVBUkxZX0hDX0xFTkdUSChwKQkoMHgwMGZmICYgKHApKSAvKiBiaXRzIDcgOiAwICovCisKIC8qCiAgKiBVU0IgUGFja2V0IElEcyAoUElEcykKICAqLwpAQCAtODkyLDcgKzg5NSw3IEBACiAJZGJncF9wcmludGsoImVoY2lfYmFyOiAlcFxuIiwgZWhjaV9iYXIpOwogCiAJZWhjaV9jYXBzICA9IGVoY2lfYmFyOwotCWVoY2lfcmVncyAgPSBlaGNpX2JhciArIEhDX0xFTkdUSChyZWFkbCgmZWhjaV9jYXBzLT5oY19jYXBiYXNlKSk7CisJZWhjaV9yZWdzICA9IGVoY2lfYmFyICsgRUFSTFlfSENfTEVOR1RIKHJlYWRsKCZlaGNpX2NhcHMtPmhjX2NhcGJhc2UpKTsKIAllaGNpX2RlYnVnID0gZWhjaV9iYXIgKyBvZmZzZXQ7CiAJZWhjaV9kZXYuYnVzID0gYnVzOwogCWVoY2lfZGV2LnNsb3QgPSBzbG90OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwppbmRleCBiYzUxMjNjLi41ODQ1NmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwpAQCAtMjYwLDYgKzI2MCwyNCBAQAogCWRlZmF1bHQgVVNCX0dBREdFVAogCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECiAKK2NvbmZpZyBVU0JfR0FER0VUX1JFTkVTQVNfVVNCSFMKKwlib29sZWFuICJSZW5lc2FzIFVTQkhTIgorCWRlcGVuZHMgb24gVVNCX1JFTkVTQVNfVVNCSFMKKwlzZWxlY3QgVVNCX0dBREdFVF9EVUFMU1BFRUQKKwloZWxwCisJICAgUmVuZXNhcyBVU0JIUyBpcyBhIGRpc2NyZXRlIFVTQiBob3N0IGFuZCBwZXJpcGhlcmFsIGNvbnRyb2xsZXIKKwkgICBjaGlwIHRoYXQgc3VwcG9ydHMgYm90aCBmdWxsIGFuZCBoaWdoIHNwZWVkIFVTQiAyLjAgZGF0YSB0cmFuc2ZlcnMuCisJICAgcGxhdGZvcm0gaXMgYWJsZSB0byBjb25maWd1cmUgZW5kcG9pbnQgKHBpcGUpIHN0eWxlCisKKwkgICBTYXkgInkiIHRvIGVuYWJsZSB0aGUgZ2FkZ2V0IHNwZWNpZmljIHBvcnRpb24gb2YgdGhlIFVTQkhTIGRyaXZlci4KKworCitjb25maWcgVVNCX1JFTkVTQVNfVVNCSFNfVURDCisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIFVTQl9HQURHRVRfUkVORVNBU19VU0JIUworCWRlZmF1bHQgVVNCX0dBREdFVAorCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECisKIGNvbmZpZyBVU0JfR0FER0VUX1BYQTI3WAogCWJvb2xlYW4gIlBYQSAyN3giCiAJZGVwZW5kcyBvbiBBUkNIX1BYQSAmJiAoUFhBMjd4IHx8IFBYQTN4eCkKQEAgLTMzOCw2ICszNTYsMjMgQEAKIAlib29sZWFuICJTM0MyNDEwIHVkYyBkZWJ1ZyBtZXNzYWdlcyIKIAlkZXBlbmRzIG9uIFVTQl9HQURHRVRfUzNDMjQxMAogCitjb25maWcgVVNCX0dBREdFVF9TM0NfSFNVREMKKwlib29sZWFuICJTM0MyNDE2LCBTM0MyNDQzIGFuZCBTM0MyNDUwIFVTQiBEZXZpY2UgQ29udHJvbGxlciIKKwlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMAorCXNlbGVjdCBVU0JfR0FER0VUX0RVQUxTUEVFRAorCWhlbHAKKwkgIFNhbXN1bmcncyBTM0MyNDE2LCBTM0MyNDQzIGFuZCBTM0MyNDUwIGlzIGFuIEFSTTkgYmFzZWQgU29DCisJICBpbnRlZ3JhdGVkIHdpdGggZHVhbCBzcGVlZCBVU0IgMi4wIGRldmljZSBjb250cm9sbGVyLiBJdCBoYXMKKwkgIDggZW5kcG9pbnRzLCBhcyB3ZWxsIGFzIGVuZHBvaW50IHplcm8uCisKKwkgIFRoaXMgZHJpdmVyIGhhcyBiZWVuIHRlc3RlZCBvbiBTM0MyNDE2IGFuZCBTM0MyNDUwIHByb2Nlc3NvcnMuCisKK2NvbmZpZyBVU0JfUzNDX0hTVURDCisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIFVTQl9HQURHRVRfUzNDX0hTVURDCisJZGVmYXVsdCBVU0JfR0FER0VUCisJc2VsZWN0IFVTQl9HQURHRVRfU0VMRUNURUQKKwogY29uZmlnIFVTQl9HQURHRVRfUFhBX1UyTwogCWJvb2xlYW4gIlBYQTl4eCBQcm9jZXNzb3IgVVNCMi4wIGNvbnRyb2xsZXIiCiAJc2VsZWN0IFVTQl9HQURHRVRfRFVBTFNQRUVECmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9nYWRnZXQvTWFrZWZpbGUKaW5kZXggMWVhMTVlZS4uNGZlOTJiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9NYWtlZmlsZQpAQCAtMjIsNiArMjIsNyBAQAogb2JqLSQoQ09ORklHX1VTQl9GU0xfUUUpCSs9IGZzbF9xZV91ZGMubwogb2JqLSQoQ09ORklHX1VTQl9DSTEzWFhYX1BDSSkJKz0gY2kxM3h4eF9wY2kubwogb2JqLSQoQ09ORklHX1VTQl9TM0NfSFNPVEcpCSs9IHMzYy1oc290Zy5vCitvYmotJChDT05GSUdfVVNCX1MzQ19IU1VEQykJKz0gczNjLWhzdWRjLm8KIG9iai0kKENPTkZJR19VU0JfTEFOR1dFTEwpCSs9IGxhbmd3ZWxsX3VkYy5vCiBvYmotJChDT05GSUdfVVNCX0VHMjBUKQkJKz0gcGNoX3VkYy5vCiBvYmotJChDT05GSUdfVVNCX1BYQV9VMk8pCSs9IG12X3VkYy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jCmluZGV4IDliN2NkYjEuLjQxZGMwOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jCkBAIC0xNzY3LDcgKzE3NjcsNyBAQAogCX0KIAogCS8qIG5ld2VyIGNoaXBzIGhhdmUgbW9yZSBGSUZPIG1lbW9yeSB0aGFuIHJtOTIwMCAqLwotCWlmIChjcHVfaXNfYXQ5MXNhbTkyNjAoKSkgeworCWlmIChjcHVfaXNfYXQ5MXNhbTkyNjAoKSB8fCBjcHVfaXNfYXQ5MXNhbTlnMjAoKSkgewogCQl1ZGMtPmVwWzBdLm1heHBhY2tldCA9IDY0OwogCQl1ZGMtPmVwWzNdLm1heHBhY2tldCA9IDY0OwogCQl1ZGMtPmVwWzRdLm1heHBhY2tldCA9IDUxMjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdG1lbF91c2JhX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0bWVsX3VzYmFfdWRjLmMKaW5kZXggZTdjNjVhNC4uZGIxYTY1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F0bWVsX3VzYmFfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0bWVsX3VzYmFfdWRjLmMKQEAgLTIwOTUsNiArMjA5NSw2IEBACiBtb2R1bGVfZXhpdCh1ZGNfZXhpdCk7CiAKIE1PRFVMRV9ERVNDUklQVElPTigiQXRtZWwgVVNCQSBVREMgZHJpdmVyIik7Ci1NT0RVTEVfQVVUSE9SKCJIYWF2YXJkIFNraW5uZW1vZW4gPGhza2lubmVtb2VuQGF0bWVsLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIkhhYXZhcmQgU2tpbm5lbW9lbiAoQXRtZWwpIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmF0bWVsX3VzYmFfdWRjIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jaTEzeHh4X3VkYy5jCmluZGV4IGUwOTE3OGIuLmJhYWY4N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9jaTEzeHh4X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jaTEzeHh4X3VkYy5jCkBAIC0zMTAsNyArMzEwLDcgQEAKIAkJdWRjLT51ZGNfZHJpdmVyLT5ub3RpZnlfZXZlbnQodWRjLAogCQkJQ0kxM1hYWF9DT05UUk9MTEVSX1JFU0VUX0VWRU5UKTsKIAotCWlmICh1ZGMtPnVkY19kcml2ZXItPmZsYWdzICYmIENJMTNYWFhfRElTQUJMRV9TVFJFQU1JTkcpCisJaWYgKHVkYy0+dWRjX2RyaXZlci0+ZmxhZ3MgJiBDSTEzWFhYX0RJU0FCTEVfU1RSRUFNSU5HKQogCQlod19jd3JpdGUoQ0FQX1VTQk1PREUsIFVTQk1PREVfU0RJUywgVVNCTU9ERV9TRElTKTsKIAogCS8qIFVTQk1PREUgc2hvdWxkIGJlIGNvbmZpZ3VyZWQgc3RlcCBieSBzdGVwICovCkBAIC0xNjM0LDggKzE2MzQsNiBAQAogCWdhZGdldF9mb3JfZWFjaF9lcChlcCwgZ2FkZ2V0KSB7CiAJCXVzYl9lcF9kaXNhYmxlKGVwKTsKIAl9Ci0JdXNiX2VwX2Rpc2FibGUoJnVkYy0+ZXAwb3V0LmVwKTsKLQl1c2JfZXBfZGlzYWJsZSgmdWRjLT5lcDBpbi5lcCk7CiAKIAlpZiAodWRjLT5zdGF0dXMgIT0gTlVMTCkgewogCQl1c2JfZXBfZnJlZV9yZXF1ZXN0KCZ1ZGMtPmVwMGluLmVwLCB1ZGMtPnN0YXR1cyk7CkBAIC0xNjc4LDE4ICsxNjc2LDEwIEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBkb25lOwogCi0JcmV0dmFsID0gdXNiX2VwX2VuYWJsZSgmdWRjLT5lcDBvdXQuZXAsICZjdHJsX2VuZHB0X291dF9kZXNjKTsKLQlpZiAocmV0dmFsKQotCQlnb3RvIGRvbmU7CisJdWRjLT5zdGF0dXMgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdCgmdWRjLT5lcDBpbi5lcCwgR0ZQX0FUT01JQyk7CisJaWYgKHVkYy0+c3RhdHVzID09IE5VTEwpCisJCXJldHZhbCA9IC1FTk9NRU07CiAKLQlyZXR2YWwgPSB1c2JfZXBfZW5hYmxlKCZ1ZGMtPmVwMGluLmVwLCAmY3RybF9lbmRwdF9pbl9kZXNjKTsKLQlpZiAoIXJldHZhbCkgewotCQl1ZGMtPnN0YXR1cyA9IHVzYl9lcF9hbGxvY19yZXF1ZXN0KCZ1ZGMtPmVwMGluLmVwLCBHRlBfQVRPTUlDKTsKLQkJaWYgKHVkYy0+c3RhdHVzID09IE5VTEwpIHsKLQkJCXVzYl9lcF9kaXNhYmxlKCZ1ZGMtPmVwMG91dC5lcCk7Ci0JCQlyZXR2YWwgPSAtRU5PTUVNOwotCQl9Ci0JfQogCXNwaW5fbG9jayh1ZGMtPmxvY2spOwogCiAgZG9uZToKQEAgLTE4NDMsNyArMTgzMyw4IEBACiBfX2FjcXVpcmVzKG1FcC0+bG9jaykKIHsKIAlzdHJ1Y3QgY2kxM3h4eF9yZXEgKm1SZXEsICptUmVxVGVtcDsKLQlpbnQgcmV0dmFsOworCXN0cnVjdCBjaTEzeHh4X2VwICptRXBUZW1wID0gbUVwOworCWludCB1bmluaXRpYWxpemVkX3ZhcihyZXR2YWwpOwogCiAJdHJhY2UoIiVwIiwgbUVwKTsKIApAQCAtMTg1OSwxMiArMTg1MCwxNSBAQAogCQlkYmdfZG9uZShfdXNiX2FkZHIobUVwKSwgbVJlcS0+cHRyLT50b2tlbiwgcmV0dmFsKTsKIAkJaWYgKG1SZXEtPnJlcS5jb21wbGV0ZSAhPSBOVUxMKSB7CiAJCQlzcGluX3VubG9jayhtRXAtPmxvY2spOwotCQkJbVJlcS0+cmVxLmNvbXBsZXRlKCZtRXAtPmVwLCAmbVJlcS0+cmVxKTsKKwkJCWlmICgobUVwLT50eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wpICYmCisJCQkJCW1SZXEtPnJlcS5sZW5ndGgpCisJCQkJbUVwVGVtcCA9ICZfdWRjLT5lcDBpbjsKKwkJCW1SZXEtPnJlcS5jb21wbGV0ZSgmbUVwVGVtcC0+ZXAsICZtUmVxLT5yZXEpOwogCQkJc3Bpbl9sb2NrKG1FcC0+bG9jayk7CiAJCX0KIAl9CiAKLQlpZiAocmV0dmFsID09IEVCVVNZKQorCWlmIChyZXR2YWwgPT0gLUVCVVNZKQogCQlyZXR2YWwgPSAwOwogCWlmIChyZXR2YWwgPCAwKQogCQlkYmdfZXZlbnQoX3VzYl9hZGRyKG1FcCksICJET05FIiwgcmV0dmFsKTsKQEAgLTE4OTQsNyArMTg4OCw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgaHdfZXBfbWF4OyBpKyspIHsKIAkJc3RydWN0IGNpMTN4eHhfZXAgKm1FcCAgPSAmdWRjLT5jaTEzeHh4X2VwW2ldOwotCQlpbnQgdHlwZSwgbnVtLCBlcnIgPSAtRUlOVkFMOworCQlpbnQgdHlwZSwgbnVtLCBkaXIsIGVyciA9IC1FSU5WQUw7CiAJCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgcmVxOwogCiAJCWlmIChtRXAtPmRlc2MgPT0gTlVMTCkKQEAgLTE5NTIsNyArMTk0NiwxMCBAQAogCQkJCWlmIChyZXEud0xlbmd0aCAhPSAwKQogCQkJCQlicmVhazsKIAkJCQludW0gID0gbGUxNl90b19jcHUocmVxLndJbmRleCk7CisJCQkJZGlyID0gbnVtICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLOwogCQkJCW51bSAmPSBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0s7CisJCQkJaWYgKGRpcikgLyogVFggKi8KKwkJCQkJbnVtICs9IGh3X2VwX21heC8yOwogCQkJCWlmICghdWRjLT5jaTEzeHh4X2VwW251bV0ud2VkZ2UpIHsKIAkJCQkJc3Bpbl91bmxvY2sodWRjLT5sb2NrKTsKIAkJCQkJZXJyID0gdXNiX2VwX2NsZWFyX2hhbHQoCkBAIC0yMDAxLDcgKzE5OTgsMTAgQEAKIAkJCQlpZiAocmVxLndMZW5ndGggIT0gMCkKIAkJCQkJYnJlYWs7CiAJCQkJbnVtICA9IGxlMTZfdG9fY3B1KHJlcS53SW5kZXgpOworCQkJCWRpciA9IG51bSAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSzsKIAkJCQludW0gJj0gVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLOworCQkJCWlmIChkaXIpIC8qIFRYICovCisJCQkJCW51bSArPSBod19lcF9tYXgvMjsKIAogCQkJCXNwaW5fdW5sb2NrKHVkYy0+bG9jayk7CiAJCQkJZXJyID0gdXNiX2VwX3NldF9oYWx0KCZ1ZGMtPmNpMTN4eHhfZXBbbnVtXS5lcCk7CkBAIC0yMTEwLDcgKzIxMTAsMTIgQEAKIAkJKG1FcC0+ZXAubWF4cGFja2V0IDw8IGZmc19ucihRSF9NQVhfUEtUKSkgJiBRSF9NQVhfUEtUOwogCW1FcC0+cWgucHRyLT50ZC5uZXh0IHw9IFREX1RFUk1JTkFURTsgICAvKiBuZWVkZWQ/ICovCiAKLQlyZXR2YWwgfD0gaHdfZXBfZW5hYmxlKG1FcC0+bnVtLCBtRXAtPmRpciwgbUVwLT50eXBlKTsKKwkvKgorCSAqIEVuYWJsZSBlbmRwb2ludHMgaW4gdGhlIEhXIG90aGVyIHRoYW4gZXAwIGFzIGVwMAorCSAqIGlzIGFsd2F5cyBlbmFibGVkCisJICovCisJaWYgKG1FcC0+bnVtKQorCQlyZXR2YWwgfD0gaHdfZXBfZW5hYmxlKG1FcC0+bnVtLCBtRXAtPmRpciwgbUVwLT50eXBlKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobUVwLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldHZhbDsKQEAgLTIyNDIsMTEgKzIyNDcsMTUgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKG1FcC0+bG9jaywgZmxhZ3MpOwogCi0JaWYgKG1FcC0+dHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MICYmCi0JICAgICFsaXN0X2VtcHR5KCZtRXAtPnFoLnF1ZXVlKSkgewotCQlfZXBfbnVrZShtRXApOwotCQlyZXR2YWwgPSAtRU9WRVJGTE9XOwotCQl3YXJuKCJlbmRwb2ludCBjdHJsICVYIG51a2VkIiwgX3VzYl9hZGRyKG1FcCkpOworCWlmIChtRXAtPnR5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCkgeworCQlpZiAocmVxLT5sZW5ndGgpCisJCQltRXAgPSAoX3VkYy0+ZXAwX2RpciA9PSBSWCkgPworCQkJCSZfdWRjLT5lcDBvdXQgOiAmX3VkYy0+ZXAwaW47CisJCWlmICghbGlzdF9lbXB0eSgmbUVwLT5xaC5xdWV1ZSkpIHsKKwkJCV9lcF9udWtlKG1FcCk7CisJCQlyZXR2YWwgPSAtRU9WRVJGTE9XOworCQkJd2FybigiZW5kcG9pbnQgY3RybCAlWCBudWtlZCIsIF91c2JfYWRkcihtRXApKTsKKwkJfQogCX0KIAogCS8qIGZpcnN0IG51a2UgdGhlbiB0ZXN0IGxpbmssIGUuZy4gcHJldmlvdXMgc3RhdHVzIGhhcyBub3Qgc2VudCAqLwpAQCAtMjQ5Nyw2ICsyNTA2LDE1IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBjaTEzeHh4X3ZidXNfZHJhdyhzdHJ1Y3QgdXNiX2dhZGdldCAqX2dhZGdldCwgdW5zaWduZWQgbUEpCit7CisJc3RydWN0IGNpMTN4eHggKnVkYyA9IGNvbnRhaW5lcl9vZihfZ2FkZ2V0LCBzdHJ1Y3QgY2kxM3h4eCwgZ2FkZ2V0KTsKKworCWlmICh1ZGMtPnRyYW5zY2VpdmVyKQorCQlyZXR1cm4gb3RnX3NldF9wb3dlcih1ZGMtPnRyYW5zY2VpdmVyLCBtQSk7CisJcmV0dXJuIC1FTk9UU1VQUDsKK30KKwogLyoqCiAgKiBEZXZpY2Ugb3BlcmF0aW9ucyBwYXJ0IG9mIHRoZSBBUEkgdG8gdGhlIFVTQiBjb250cm9sbGVyIGhhcmR3YXJlLAogICogd2hpY2ggZG9uJ3QgaW52b2x2ZSBlbmRwb2ludHMgKG9yIGkvbykKQEAgLTI1MDUsNiArMjUyMyw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9nYWRnZXRfb3BzIHVzYl9nYWRnZXRfb3BzID0gewogCS52YnVzX3Nlc3Npb24JPSBjaTEzeHh4X3ZidXNfc2Vzc2lvbiwKIAkud2FrZXVwCQk9IGNpMTN4eHhfd2FrZXVwLAorCS52YnVzX2RyYXcJPSBjaTEzeHh4X3ZidXNfZHJhdywKIH07CiAKIC8qKgpAQCAtMjU5NSw2ICsyNjE0LDE0IEBACiAJfQogCWlmIChyZXR2YWwpCiAJCWdvdG8gZG9uZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKHVkYy0+bG9jaywgZmxhZ3MpOworCXJldHZhbCA9IHVzYl9lcF9lbmFibGUoJnVkYy0+ZXAwb3V0LmVwLCAmY3RybF9lbmRwdF9vdXRfZGVzYyk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlyZXR2YWwgPSB1c2JfZXBfZW5hYmxlKCZ1ZGMtPmVwMGluLmVwLCAmY3RybF9lbmRwdF9pbl9kZXNjKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCXNwaW5fbG9ja19pcnFzYXZlKHVkYy0+bG9jaywgZmxhZ3MpOwogCiAJdWRjLT5nYWRnZXQuZXAwID0gJnVkYy0+ZXAwaW4uZXA7CiAJLyogYmluZCBnYWRnZXQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYwppbmRleCA4MjMxNGVkLi41Y2JiMWE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jCkBAIC00NjEsMTIgKzQ2MSwyMyBAQAogCQkJcmVzZXRfY29uZmlnKGNkZXYpOwogCQkJZ290byBkb25lOwogCQl9CisKKwkJaWYgKHJlc3VsdCA9PSBVU0JfR0FER0VUX0RFTEFZRURfU1RBVFVTKSB7CisJCQlEQkcoY2RldiwKKwkJCSAiJXM6IGludGVyZmFjZSAlZCAoJXMpIHJlcXVlc3RlZCBkZWxheWVkIHN0YXR1c1xuIiwKKwkJCQkJX19mdW5jX18sIHRtcCwgZi0+bmFtZSk7CisJCQljZGV2LT5kZWxheWVkX3N0YXR1cysrOworCQkJREJHKGNkZXYsICJkZWxheWVkX3N0YXR1cyBjb3VudCAlZFxuIiwKKwkJCQkJY2Rldi0+ZGVsYXllZF9zdGF0dXMpOworCQl9CiAJfQogCiAJLyogd2hlbiB3ZSByZXR1cm4sIGJlIHN1cmUgb3VyIHBvd2VyIHVzYWdlIGlzIHZhbGlkICovCiAJcG93ZXIgPSBjLT5iTWF4UG93ZXIgPyAoMiAqIGMtPmJNYXhQb3dlcikgOiBDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc7CiBkb25lOgogCXVzYl9nYWRnZXRfdmJ1c19kcmF3KGdhZGdldCwgcG93ZXIpOworCWlmIChyZXN1bHQgPj0gMCAmJiBjZGV2LT5kZWxheWVkX3N0YXR1cykKKwkJcmVzdWx0ID0gVVNCX0dBREdFVF9ERUxBWUVEX1NUQVRVUzsKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC04OTUsNiArOTA2LDE0IEBACiAJCWlmICh3X3ZhbHVlICYmICFmLT5zZXRfYWx0KQogCQkJYnJlYWs7CiAJCXZhbHVlID0gZi0+c2V0X2FsdChmLCB3X2luZGV4LCB3X3ZhbHVlKTsKKwkJaWYgKHZhbHVlID09IFVTQl9HQURHRVRfREVMQVlFRF9TVEFUVVMpIHsKKwkJCURCRyhjZGV2LAorCQkJICIlczogaW50ZXJmYWNlICVkICglcykgcmVxdWVzdGVkIGRlbGF5ZWQgc3RhdHVzXG4iLAorCQkJCQlfX2Z1bmNfXywgaW50ZiwgZi0+bmFtZSk7CisJCQljZGV2LT5kZWxheWVkX3N0YXR1cysrOworCQkJREJHKGNkZXYsICJkZWxheWVkX3N0YXR1cyBjb3VudCAlZFxuIiwKKwkJCQkJY2Rldi0+ZGVsYXllZF9zdGF0dXMpOworCQl9CiAJCWJyZWFrOwogCWNhc2UgVVNCX1JFUV9HRVRfSU5URVJGQUNFOgogCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IChVU0JfRElSX0lOfFVTQl9SRUNJUF9JTlRFUkZBQ0UpKQpAQCAtOTU4LDcgKzk3Nyw3IEBACiAJfQogCiAJLyogcmVzcG9uZCB3aXRoIGRhdGEgdHJhbnNmZXIgYmVmb3JlIHN0YXR1cyBwaGFzZT8gKi8KLQlpZiAodmFsdWUgPj0gMCkgeworCWlmICh2YWx1ZSA+PSAwICYmIHZhbHVlICE9IFVTQl9HQURHRVRfREVMQVlFRF9TVEFUVVMpIHsKIAkJcmVxLT5sZW5ndGggPSB2YWx1ZTsKIAkJcmVxLT56ZXJvID0gdmFsdWUgPCB3X2xlbmd0aDsKIAkJdmFsdWUgPSB1c2JfZXBfcXVldWUoZ2FkZ2V0LT5lcDAsIHJlcSwgR0ZQX0FUT01JQyk7CkBAIC05NjcsNiArOTg2LDEwIEBACiAJCQlyZXEtPnN0YXR1cyA9IDA7CiAJCQljb21wb3NpdGVfc2V0dXBfY29tcGxldGUoZ2FkZ2V0LT5lcDAsIHJlcSk7CiAJCX0KKwl9IGVsc2UgaWYgKHZhbHVlID09IFVTQl9HQURHRVRfREVMQVlFRF9TVEFUVVMgJiYgd19sZW5ndGggIT0gMCkgeworCQlXQVJOKGNkZXYsCisJCQkiJXM6IERlbGF5ZWQgc3RhdHVzIG5vdCBzdXBwb3J0ZWQgZm9yIHdfbGVuZ3RoICE9IDAiLAorCQkJX19mdW5jX18pOwogCX0KIAogZG9uZToKQEAgLTEyODksMyArMTMxMiw0MCBAQAogCQlyZXR1cm47CiAJdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcigmY29tcG9zaXRlX2RyaXZlcik7CiB9CisKKy8qKgorICogdXNiX2NvbXBvc2l0ZV9zZXR1cF9jb250aW51ZSgpIC0gQ29udGludWUgd2l0aCB0aGUgY29udHJvbCB0cmFuc2ZlcgorICogQGNkZXY6IHRoZSBjb21wb3NpdGUgZGV2aWNlIHdobydzIGNvbnRyb2wgdHJhbnNmZXIgd2FzIGtlcHQgd2FpdGluZworICoKKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYnkgdGhlIFVTQiBmdW5jdGlvbiBkcml2ZXIgdG8gY29udGludWUKKyAqIHdpdGggdGhlIGNvbnRyb2wgdHJhbnNmZXIncyBkYXRhL3N0YXR1cyBzdGFnZSBpbiBjYXNlIGl0IGhhZCByZXF1ZXN0ZWQgdG8KKyAqIGRlbGF5IHRoZSBkYXRhL3N0YXR1cyBzdGFnZXMuIEEgVVNCIGZ1bmN0aW9uJ3Mgc2V0dXAgaGFuZGxlciAoZS5nLiBzZXRfYWx0KCkpCisgKiBjYW4gcmVxdWVzdCB0aGUgY29tcG9zaXRlIGZyYW1ld29yayB0byBkZWxheSB0aGUgc2V0dXAgcmVxdWVzdCdzIGRhdGEvc3RhdHVzCisgKiBzdGFnZXMgYnkgcmV0dXJuaW5nIFVTQl9HQURHRVRfREVMQVlFRF9TVEFUVVMuCisgKi8KK3ZvaWQgdXNiX2NvbXBvc2l0ZV9zZXR1cF9jb250aW51ZShzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpCit7CisJaW50CQkJdmFsdWU7CisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXEgPSBjZGV2LT5yZXE7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwlEQkcoY2RldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNkZXYtPmxvY2ssIGZsYWdzKTsKKworCWlmIChjZGV2LT5kZWxheWVkX3N0YXR1cyA9PSAwKSB7CisJCVdBUk4oY2RldiwgIiVzOiBVbmV4cGVjdGVkIGNhbGxcbiIsIF9fZnVuY19fKTsKKworCX0gZWxzZSBpZiAoLS1jZGV2LT5kZWxheWVkX3N0YXR1cyA9PSAwKSB7CisJCURCRyhjZGV2LCAiJXM6IENvbXBsZXRpbmcgZGVsYXllZCBzdGF0dXNcbiIsIF9fZnVuY19fKTsKKwkJcmVxLT5sZW5ndGggPSAwOworCQl2YWx1ZSA9IHVzYl9lcF9xdWV1ZShjZGV2LT5nYWRnZXQtPmVwMCwgcmVxLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHZhbHVlIDwgMCkgeworCQkJREJHKGNkZXYsICJlcF9xdWV1ZSAtLT4gJWRcbiIsIHZhbHVlKTsKKwkJCXJlcS0+c3RhdHVzID0gMDsKKwkJCWNvbXBvc2l0ZV9zZXR1cF9jb21wbGV0ZShjZGV2LT5nYWRnZXQtPmVwMCwgcmVxKTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNkZXYtPmxvY2ssIGZsYWdzKTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2RiZ3AuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9kYmdwLmMKaW5kZXggZTVhYzhhMy4uZGJlOTJlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2RiZ3AuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZGJncC5jCkBAIC0yNjEsOCArMjYxLDggQEAKIAlvX2Rlc2Mud01heFBhY2tldFNpemUgPQogCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KFVTQl9ERUJVR19NQVhfUEFDS0VUX1NJWkUpOwogCi0JZGJnX2Rlc2MuYkRlYnVnSW5FbmRwb2ludCA9IGlfZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYgMHg3ZjsKLQlkYmdfZGVzYy5iRGVidWdPdXRFbmRwb2ludCA9IG9fZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYgMHg3ZjsKKwlkYmdfZGVzYy5iRGVidWdJbkVuZHBvaW50ID0gaV9kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisJZGJnX2Rlc2MuYkRlYnVnT3V0RW5kcG9pbnQgPSBvX2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKIAogI2lmZGVmIENPTkZJR19VU0JfR19EQkdQX1NFUklBTAogCWRiZ3Auc2VyaWFsLT5pbiA9IGRiZ3AuaV9lcDsKQEAgLTMxMiw2ICszMTIsNyBAQAogCiAJZGJncC5yZXEtPmxlbmd0aCA9IERCR1BfUkVRX0VQMF9MRU47CiAJZ2FkZ2V0LT5lcDAtPmRyaXZlcl9kYXRhID0gZ2FkZ2V0OworCWRldmljZV9kZXNjLmJNYXhQYWNrZXRTaXplMCA9IGdhZGdldC0+ZXAwLT5tYXhwYWNrZXQ7CiAKICNpZmRlZiBDT05GSUdfVVNCX0dfREJHUF9TRVJJQUwKIAlkYmdwLnNlcmlhbCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBnc2VyaWFsKSwgR0ZQX0tFUk5FTCk7CkBAIC0zNTAsOSArMzUxLDkgQEAKIAl1OCByZXF1ZXN0ID0gY3RybC0+YlJlcXVlc3Q7CiAJdTE2IHZhbHVlID0gbGUxNl90b19jcHUoY3RybC0+d1ZhbHVlKTsKIAl1MTYgbGVuZ3RoID0gbGUxNl90b19jcHUoY3RybC0+d0xlbmd0aCk7Ci0JaW50IGVyciA9IDA7Ci0Jdm9pZCAqZGF0YTsKLQl1MTYgbGVuOworCWludCBlcnIgPSAtRU9QTk9UU1VQUDsKKwl2b2lkICpkYXRhID0gTlVMTDsKKwl1MTYgbGVuID0gMDsKIAogCWdhZGdldC0+ZXAwLT5kcml2ZXJfZGF0YSA9IGdhZGdldDsKIApAQCAtMzcxLDEwICszNzIsOSBAQAogCQlkZWZhdWx0OgogCQkJZ290byBmYWlsOwogCQl9CisJCWVyciA9IDA7CiAJfSBlbHNlIGlmIChyZXF1ZXN0ID09IFVTQl9SRVFfU0VUX0ZFQVRVUkUgJiYKIAkJICAgdmFsdWUgPT0gVVNCX0RFVklDRV9ERUJVR19NT0RFKSB7Ci0JCWxlbiA9IDA7Ci0JCWRhdGEgPSBOVUxMOwogCQlkZXZfZGJnKCZkYmdwLmdhZGdldC0+ZGV2LCAic2V0dXA6IGZlYXQgZGVidWdcbiIpOwogI2lmZGVmIENPTkZJR19VU0JfR19EQkdQX1BSSU5USwogCQllcnIgPSBkYmdwX2VuYWJsZV9lcCgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCmluZGV4IDMyMTRjYTMuLjYxZmY5MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKQEAgLTg5MiwxMCArODkyLDExIEBACiAJCXJldHVybiByYzsKIAl9CiAKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YSAocGRldiwgZHVtKTsKIAlyYyA9IGRldmljZV9jcmVhdGVfZmlsZSAoJmR1bS0+Z2FkZ2V0LmRldiwgJmRldl9hdHRyX2Z1bmN0aW9uKTsKIAlpZiAocmMgPCAwKQogCQlkZXZpY2VfdW5yZWdpc3RlciAoJmR1bS0+Z2FkZ2V0LmRldik7CisJZWxzZQorCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkdW0pOwogCXJldHVybiByYzsKIH0KIApAQCAtMTk5NSwxMSArMTk5NiwyOSBAQAogCXJldHZhbCA9IHBsYXRmb3JtX2RldmljZV9hZGQodGhlX2hjZF9wZGV2KTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBlcnJfYWRkX2hjZDsKKwlpZiAoIXRoZV9jb250cm9sbGVyKSB7CisJCS8qCisJCSAqIFRoZSBoY2Qgd2FzIGFkZGVkIHN1Y2Nlc3NmdWxseSBidXQgaXRzIHByb2JlIGZ1bmN0aW9uIGZhaWxlZAorCQkgKiBmb3Igc29tZSByZWFzb24uCisJCSAqLworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlnb3RvIGVycl9hZGRfdWRjOworCX0KIAlyZXR2YWwgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHRoZV91ZGNfcGRldik7CiAJaWYgKHJldHZhbCA8IDApCiAJCWdvdG8gZXJyX2FkZF91ZGM7CisJaWYgKCFwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSh0aGVfdWRjX3BkZXYpKSB7CisJCS8qCisJCSAqIFRoZSB1ZGMgd2FzIGFkZGVkIHN1Y2Nlc3NmdWxseSBidXQgaXRzIHByb2JlIGZ1bmN0aW9uIGZhaWxlZAorCQkgKiBmb3Igc29tZSByZWFzb24uCisJCSAqLworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlnb3RvIGVycl9wcm9iZV91ZGM7CisJfQogCXJldHVybiByZXR2YWw7CiAKK2Vycl9wcm9iZV91ZGM6CisJcGxhdGZvcm1fZGV2aWNlX2RlbCh0aGVfdWRjX3BkZXYpOwogZXJyX2FkZF91ZGM6CiAJcGxhdGZvcm1fZGV2aWNlX2RlbCh0aGVfaGNkX3BkZXYpOwogZXJyX2FkZF9oY2Q6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hdWRpby5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfYXVkaW8uYwppbmRleCAwMTExZjhhLi44ZWUzMzBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hdWRpby5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2F1ZGlvLmMKQEAgLTE3Nyw3ICsxNzcsNyBAQAogfTsKIAogLyogU3RhbmRhcmQgSVNPIE9VVCBFbmRwb2ludCBEZXNjcmlwdG9yICovCi1zdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGFzX291dF9lcF9kZXNjIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGFzX291dF9lcF9kZXNjICA9IHsKIAkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfQVVESU9fU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9PVVQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9tYXNzX3N0b3JhZ2UuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX21hc3Nfc3RvcmFnZS5jCmluZGV4IDZkOGU1MzMuLmVmYjU4ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX21hc3Nfc3RvcmFnZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX21hc3Nfc3RvcmFnZS5jCkBAIC0zNDcsNiArMzQ3LDcgQEAKIC8qIERhdGEgc2hhcmVkIGJ5IGFsbCB0aGUgRlNHIGluc3RhbmNlcy4gKi8KIHN0cnVjdCBmc2dfY29tbW9uIHsKIAlzdHJ1Y3QgdXNiX2dhZGdldAkqZ2FkZ2V0OworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldjsKIAlzdHJ1Y3QgZnNnX2RldgkJKmZzZywgKm5ld19mc2c7CiAJd2FpdF9xdWV1ZV9oZWFkX3QJZnNnX3dhaXQ7CiAKQEAgLTYxMyw2ICs2MTQsMTEgQEAKIAlpZiAoIWZzZ19pc19zZXQoZnNnLT5jb21tb24pKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKKwkrK2ZzZy0+Y29tbW9uLT5lcDBfcmVxX3RhZzsJLyogUmVjb3JkIGFycml2YWwgb2YgYSBuZXcgcmVxdWVzdCAqLworCXJlcS0+Y29udGV4dCA9IE5VTEw7CisJcmVxLT5sZW5ndGggPSAwOworCWR1bXBfbXNnKGZzZywgImVwMC1zZXR1cCIsICh1OCAqKSBjdHJsLCBzaXplb2YoKmN0cmwpKTsKKwogCXN3aXRjaCAoY3RybC0+YlJlcXVlc3QpIHsKIAogCWNhc2UgVVNCX0JVTEtfUkVTRVRfUkVRVUVTVDoKQEAgLTE1ODQsMzcgKzE1OTAsNiBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBwYWRfd2l0aF96ZXJvcyhzdHJ1Y3QgZnNnX2RldiAqZnNnKQotewotCXN0cnVjdCBmc2dfYnVmZmhkCSpiaCA9IGZzZy0+Y29tbW9uLT5uZXh0X2J1ZmZoZF90b19maWxsOwotCXUzMgkJCW5rZWVwID0gYmgtPmlucmVxLT5sZW5ndGg7Ci0JdTMyCQkJbnNlbmQ7Ci0JaW50CQkJcmM7Ci0KLQliaC0+c3RhdGUgPSBCVUZfU1RBVEVfRU1QVFk7CQkvKiBGb3IgdGhlIGZpcnN0IGl0ZXJhdGlvbiAqLwotCWZzZy0+Y29tbW9uLT51c2JfYW1vdW50X2xlZnQgPSBua2VlcCArIGZzZy0+Y29tbW9uLT5yZXNpZHVlOwotCXdoaWxlIChmc2ctPmNvbW1vbi0+dXNiX2Ftb3VudF9sZWZ0ID4gMCkgewotCi0JCS8qIFdhaXQgZm9yIHRoZSBuZXh0IGJ1ZmZlciB0byBiZSBmcmVlICovCi0JCXdoaWxlIChiaC0+c3RhdGUgIT0gQlVGX1NUQVRFX0VNUFRZKSB7Ci0JCQlyYyA9IHNsZWVwX3RocmVhZChmc2ctPmNvbW1vbik7Ci0JCQlpZiAocmMpCi0JCQkJcmV0dXJuIHJjOwotCQl9Ci0KLQkJbnNlbmQgPSBtaW4oZnNnLT5jb21tb24tPnVzYl9hbW91bnRfbGVmdCwgRlNHX0JVRkxFTik7Ci0JCW1lbXNldChiaC0+YnVmICsgbmtlZXAsIDAsIG5zZW5kIC0gbmtlZXApOwotCQliaC0+aW5yZXEtPmxlbmd0aCA9IG5zZW5kOwotCQliaC0+aW5yZXEtPnplcm8gPSAwOwotCQlzdGFydF90cmFuc2Zlcihmc2csIGZzZy0+YnVsa19pbiwgYmgtPmlucmVxLAotCQkJICAgICAgICZiaC0+aW5yZXFfYnVzeSwgJmJoLT5zdGF0ZSk7Ci0JCWJoID0gZnNnLT5jb21tb24tPm5leHRfYnVmZmhkX3RvX2ZpbGwgPSBiaC0+bmV4dDsKLQkJZnNnLT5jb21tb24tPnVzYl9hbW91bnRfbGVmdCAtPSBuc2VuZDsKLQkJbmtlZXAgPSAwOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB0aHJvd19hd2F5X2RhdGEoc3RydWN0IGZzZ19jb21tb24gKmNvbW1vbikKIHsKIAlzdHJ1Y3QgZnNnX2J1ZmZoZAkqYmg7CkBAIC0xNzAyLDYgKzE2NzcsMTAgQEAKIAkJaWYgKGNvbW1vbi0+ZGF0YV9zaXplID09IDApIHsKIAkJCS8qIE5vdGhpbmcgdG8gc2VuZCAqLwogCisJCS8qIERvbid0IGtub3cgd2hhdCB0byBkbyBpZiBjb21tb24tPmZzZyBpcyBOVUxMICovCisJCX0gZWxzZSBpZiAoIWZzZ19pc19zZXQoY29tbW9uKSkgeworCQkJcmMgPSAtRUlPOworCiAJCS8qIElmIHRoZXJlJ3Mgbm8gcmVzaWR1ZSwgc2ltcGx5IHNlbmQgdGhlIGxhc3QgYnVmZmVyICovCiAJCX0gZWxzZSBpZiAoY29tbW9uLT5yZXNpZHVlID09IDApIHsKIAkJCWJoLT5pbnJlcS0+emVybyA9IDA7CkBAIC0xNzEwLDI0ICsxNjg5LDE5IEBACiAJCQljb21tb24tPm5leHRfYnVmZmhkX3RvX2ZpbGwgPSBiaC0+bmV4dDsKIAogCQkvKgotCQkgKiBGb3IgQnVsay1vbmx5LCBpZiB3ZSdyZSBhbGxvd2VkIHRvIHN0YWxsIHRoZW4gc2VuZCB0aGUKLQkJICogc2hvcnQgcGFja2V0IGFuZCBoYWx0IHRoZSBidWxrLWluIGVuZHBvaW50LiAgSWYgd2UgY2FuJ3QKLQkJICogc3RhbGwsIHBhZCBvdXQgdGhlIHJlbWFpbmluZyBkYXRhIHdpdGggMCdzLgorCQkgKiBGb3IgQnVsay1vbmx5LCBtYXJrIHRoZSBlbmQgb2YgdGhlIGRhdGEgd2l0aCBhIHNob3J0CisJCSAqIHBhY2tldC4gIElmIHdlIGFyZSBhbGxvd2VkIHRvIHN0YWxsLCBoYWx0IHRoZSBidWxrLWluCisJCSAqIGVuZHBvaW50LiAgKE5vdGU6IFRoaXMgdmlvbGF0ZXMgdGhlIEJ1bGstT25seSBUcmFuc3BvcnQKKwkJICogc3BlY2lmaWNhdGlvbiwgd2hpY2ggcmVxdWlyZXMgdXMgdG8gcGFkIHRoZSBkYXRhIGlmIHdlCisJCSAqIGRvbid0IGhhbHQgdGhlIGVuZHBvaW50LiAgUHJlc3VtYWJseSBub2JvZHkgd2lsbCBtaW5kLikKIAkJICovCi0JCX0gZWxzZSBpZiAoY29tbW9uLT5jYW5fc3RhbGwpIHsKKwkJfSBlbHNlIHsKIAkJCWJoLT5pbnJlcS0+emVybyA9IDE7CiAJCQlpZiAoIXN0YXJ0X2luX3RyYW5zZmVyKGNvbW1vbiwgYmgpKQotCQkJCS8qIERvbid0IGtub3cgd2hhdCB0byBkbyBpZgotCQkJCSAqIGNvbW1vbi0+ZnNnIGlzIE5VTEwgKi8KIAkJCQlyYyA9IC1FSU87CiAJCQljb21tb24tPm5leHRfYnVmZmhkX3RvX2ZpbGwgPSBiaC0+bmV4dDsKLQkJCWlmIChjb21tb24tPmZzZykKKwkJCWlmIChjb21tb24tPmNhbl9zdGFsbCkKIAkJCQlyYyA9IGhhbHRfYnVsa19pbl9lbmRwb2ludChjb21tb24tPmZzZyk7Ci0JCX0gZWxzZSBpZiAoZnNnX2lzX3NldChjb21tb24pKSB7Ci0JCQlyYyA9IHBhZF93aXRoX3plcm9zKGNvbW1vbi0+ZnNnKTsKLQkJfSBlbHNlIHsKLQkJCS8qIERvbid0IGtub3cgd2hhdCB0byBkbyBpZiBjb21tb24tPmZzZyBpcyBOVUxMICovCi0JCQlyYyA9IC1FSU87CiAJCX0KIAkJYnJlYWs7CiAKQEAgLTE5MTAsNyArMTg4NCw3IEBACiAJCSAgICBjb21tb24tPmx1biwgbHVuKTsKIAogCS8qIENoZWNrIHRoZSBMVU4gKi8KLQlpZiAoY29tbW9uLT5sdW4gPj0gMCAmJiBjb21tb24tPmx1biA8IGNvbW1vbi0+bmx1bnMpIHsKKwlpZiAoY29tbW9uLT5sdW4gPCBjb21tb24tPm5sdW5zKSB7CiAJCWN1cmx1biA9ICZjb21tb24tPmx1bnNbY29tbW9uLT5sdW5dOwogCQljb21tb24tPmN1cmx1biA9IGN1cmx1bjsKIAkJaWYgKGNvbW1vbi0+Y21uZFswXSAhPSBSRVFVRVNUX1NFTlNFKSB7CkBAIC0yNDY4LDcgKzI0NDIsNyBAQAogCXN0cnVjdCBmc2dfZGV2ICpmc2cgPSBmc2dfZnJvbV9mdW5jKGYpOwogCWZzZy0+Y29tbW9uLT5uZXdfZnNnID0gZnNnOwogCXJhaXNlX2V4Y2VwdGlvbihmc2ctPmNvbW1vbiwgRlNHX1NUQVRFX0NPTkZJR19DSEFOR0UpOwotCXJldHVybiAwOworCXJldHVybiBVU0JfR0FER0VUX0RFTEFZRURfU1RBVFVTOwogfQogCiBzdGF0aWMgdm9pZCBmc2dfZGlzYWJsZShzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQpAQCAtMjYwNCw2ICsyNTc4LDggQEAKIAogCWNhc2UgRlNHX1NUQVRFX0NPTkZJR19DSEFOR0U6CiAJCWRvX3NldF9pbnRlcmZhY2UoY29tbW9uLCBjb21tb24tPm5ld19mc2cpOworCQlpZiAoY29tbW9uLT5uZXdfZnNnKQorCQkJdXNiX2NvbXBvc2l0ZV9zZXR1cF9jb250aW51ZShjb21tb24tPmNkZXYpOwogCQlicmVhazsKIAogCWNhc2UgRlNHX1NUQVRFX0VYSVQ6CkBAIC0yNzc0LDYgKzI3NTAsNyBAQAogCWNvbW1vbi0+Z2FkZ2V0ID0gZ2FkZ2V0OwogCWNvbW1vbi0+ZXAwID0gZ2FkZ2V0LT5lcDA7CiAJY29tbW9uLT5lcDByZXEgPSBjZGV2LT5yZXE7CisJY29tbW9uLT5jZGV2ID0gY2RldjsKIAogCS8qIE1heWJlIGFsbG9jYXRlIGRldmljZS1nbG9iYWwgc3RyaW5nIElEcywgYW5kIHBhdGNoIGRlc2NyaXB0b3JzICovCiAJaWYgKGZzZ19zdHJpbmdzW0ZTR19TVFJJTkdfSU5URVJGQUNFXS5pZCA9PSAwKSB7CkBAIC0yODAwLDYgKzI3NzcsNyBAQAogCWZvciAoaSA9IDAsIGxjZmcgPSBjZmctPmx1bnM7IGkgPCBubHVuczsgKytpLCArK2N1cmx1biwgKytsY2ZnKSB7CiAJCWN1cmx1bi0+Y2Ryb20gPSAhIWxjZmctPmNkcm9tOwogCQljdXJsdW4tPnJvID0gbGNmZy0+Y2Ryb20gfHwgbGNmZy0+cm87CisJCWN1cmx1bi0+aW5pdGlhbGx5X3JvID0gY3VybHVuLT5ybzsKIAkJY3VybHVuLT5yZW1vdmFibGUgPSBsY2ZnLT5yZW1vdmFibGU7CiAJCWN1cmx1bi0+ZGV2LnJlbGVhc2UgPSBmc2dfbHVuX3JlbGVhc2U7CiAJCWN1cmx1bi0+ZGV2LnBhcmVudCA9ICZnYWRnZXQtPmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3JuZGlzLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9ybmRpcy5jCmluZGV4IDg4MjQ4NGEuLmZhMTJlYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3JuZGlzLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfcm5kaXMuYwpAQCAtNDIwLDggKzQyMCw3IEBACiAJICovCiAJY2FzZSAoKFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFKSA8PCA4KQogCQkJfCBVU0JfQ0RDX1NFTkRfRU5DQVBTVUxBVEVEX0NPTU1BTkQ6Ci0JCWlmICh3X2xlbmd0aCA+IHJlcS0+bGVuZ3RoIHx8IHdfdmFsdWUKLQkJCQl8fCB3X2luZGV4ICE9IHJuZGlzLT5jdHJsX2lkKQorCQlpZiAod192YWx1ZSB8fCB3X2luZGV4ICE9IHJuZGlzLT5jdHJsX2lkKQogCQkJZ290byBpbnZhbGlkOwogCQkvKiByZWFkIHRoZSByZXF1ZXN0OyBwcm9jZXNzIGl0IGxhdGVyICovCiAJCXZhbHVlID0gd19sZW5ndGg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMKaW5kZXggYTZlYWNiNS4uMDM2MGY1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYwpAQCAtMTk0NywzNyArMTk0Nyw2IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IHBhZF93aXRoX3plcm9zKHN0cnVjdCBmc2dfZGV2ICpmc2cpCi17Ci0Jc3RydWN0IGZzZ19idWZmaGQJKmJoID0gZnNnLT5uZXh0X2J1ZmZoZF90b19maWxsOwotCXUzMgkJCW5rZWVwID0gYmgtPmlucmVxLT5sZW5ndGg7Ci0JdTMyCQkJbnNlbmQ7Ci0JaW50CQkJcmM7Ci0KLQliaC0+c3RhdGUgPSBCVUZfU1RBVEVfRU1QVFk7CQkvLyBGb3IgdGhlIGZpcnN0IGl0ZXJhdGlvbgotCWZzZy0+dXNiX2Ftb3VudF9sZWZ0ID0gbmtlZXAgKyBmc2ctPnJlc2lkdWU7Ci0Jd2hpbGUgKGZzZy0+dXNiX2Ftb3VudF9sZWZ0ID4gMCkgewotCi0JCS8qIFdhaXQgZm9yIHRoZSBuZXh0IGJ1ZmZlciB0byBiZSBmcmVlICovCi0JCXdoaWxlIChiaC0+c3RhdGUgIT0gQlVGX1NUQVRFX0VNUFRZKSB7Ci0JCQlyYyA9IHNsZWVwX3RocmVhZChmc2cpOwotCQkJaWYgKHJjKQotCQkJCXJldHVybiByYzsKLQkJfQotCi0JCW5zZW5kID0gbWluKGZzZy0+dXNiX2Ftb3VudF9sZWZ0LCAodTMyKSBtb2RfZGF0YS5idWZsZW4pOwotCQltZW1zZXQoYmgtPmJ1ZiArIG5rZWVwLCAwLCBuc2VuZCAtIG5rZWVwKTsKLQkJYmgtPmlucmVxLT5sZW5ndGggPSBuc2VuZDsKLQkJYmgtPmlucmVxLT56ZXJvID0gMDsKLQkJc3RhcnRfdHJhbnNmZXIoZnNnLCBmc2ctPmJ1bGtfaW4sIGJoLT5pbnJlcSwKLQkJCQkmYmgtPmlucmVxX2J1c3ksICZiaC0+c3RhdGUpOwotCQliaCA9IGZzZy0+bmV4dF9idWZmaGRfdG9fZmlsbCA9IGJoLT5uZXh0OwotCQlmc2ctPnVzYl9hbW91bnRfbGVmdCAtPSBuc2VuZDsKLQkJbmtlZXAgPSAwOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB0aHJvd19hd2F5X2RhdGEoc3RydWN0IGZzZ19kZXYgKmZzZykKIHsKIAlzdHJ1Y3QgZnNnX2J1ZmZoZAkqYmg7CkBAIC0yMDgyLDE4ICsyMDUxLDIwIEBACiAJCQl9CiAJCX0KIAotCQkvKiBGb3IgQnVsay1vbmx5LCBpZiB3ZSdyZSBhbGxvd2VkIHRvIHN0YWxsIHRoZW4gc2VuZCB0aGUKLQkJICogc2hvcnQgcGFja2V0IGFuZCBoYWx0IHRoZSBidWxrLWluIGVuZHBvaW50LiAgSWYgd2UgY2FuJ3QKLQkJICogc3RhbGwsIHBhZCBvdXQgdGhlIHJlbWFpbmluZyBkYXRhIHdpdGggMCdzLiAqLworCQkvKgorCQkgKiBGb3IgQnVsay1vbmx5LCBtYXJrIHRoZSBlbmQgb2YgdGhlIGRhdGEgd2l0aCBhIHNob3J0CisJCSAqIHBhY2tldC4gIElmIHdlIGFyZSBhbGxvd2VkIHRvIHN0YWxsLCBoYWx0IHRoZSBidWxrLWluCisJCSAqIGVuZHBvaW50LiAgKE5vdGU6IFRoaXMgdmlvbGF0ZXMgdGhlIEJ1bGstT25seSBUcmFuc3BvcnQKKwkJICogc3BlY2lmaWNhdGlvbiwgd2hpY2ggcmVxdWlyZXMgdXMgdG8gcGFkIHRoZSBkYXRhIGlmIHdlCisJCSAqIGRvbid0IGhhbHQgdGhlIGVuZHBvaW50LiAgUHJlc3VtYWJseSBub2JvZHkgd2lsbCBtaW5kLikKKwkJICovCiAJCWVsc2UgewotCQkJaWYgKG1vZF9kYXRhLmNhbl9zdGFsbCkgewotCQkJCWJoLT5pbnJlcS0+emVybyA9IDE7Ci0JCQkJc3RhcnRfdHJhbnNmZXIoZnNnLCBmc2ctPmJ1bGtfaW4sIGJoLT5pbnJlcSwKLQkJCQkJCSZiaC0+aW5yZXFfYnVzeSwgJmJoLT5zdGF0ZSk7Ci0JCQkJZnNnLT5uZXh0X2J1ZmZoZF90b19maWxsID0gYmgtPm5leHQ7CisJCQliaC0+aW5yZXEtPnplcm8gPSAxOworCQkJc3RhcnRfdHJhbnNmZXIoZnNnLCBmc2ctPmJ1bGtfaW4sIGJoLT5pbnJlcSwKKwkJCQkJJmJoLT5pbnJlcV9idXN5LCAmYmgtPnN0YXRlKTsKKwkJCWZzZy0+bmV4dF9idWZmaGRfdG9fZmlsbCA9IGJoLT5uZXh0OworCQkJaWYgKG1vZF9kYXRhLmNhbl9zdGFsbCkKIAkJCQlyYyA9IGhhbHRfYnVsa19pbl9lbmRwb2ludChmc2cpOwotCQkJfSBlbHNlCi0JCQkJcmMgPSBwYWRfd2l0aF96ZXJvcyhmc2cpOwogCQl9CiAJCWJyZWFrOwogCkBAIC0yMzE0LDcgKzIyODUsNyBAQAogCQlmc2ctPmx1biA9IGx1bjsJCS8vIFVzZSBMVU4gZnJvbSB0aGUgY29tbWFuZAogCiAJLyogQ2hlY2sgdGhlIExVTiAqLwotCWlmIChmc2ctPmx1biA+PSAwICYmIGZzZy0+bHVuIDwgZnNnLT5ubHVucykgeworCWlmIChmc2ctPmx1biA8IGZzZy0+bmx1bnMpIHsKIAkJZnNnLT5jdXJsdW4gPSBjdXJsdW4gPSAmZnNnLT5sdW5zW2ZzZy0+bHVuXTsKIAkJaWYgKGZzZy0+Y21uZFswXSAhPSBSRVFVRVNUX1NFTlNFKSB7CiAJCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19OT19TRU5TRTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfcWVfdWRjLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3FlX3VkYy5oCmluZGV4IGUzNWUyNGYuLjFkYTVmYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfcWVfdWRjLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF9xZV91ZGMuaApAQCAtMjA3LDcgKzIwNyw3IEBACiAKIC8qIEZyYW1lIHN0YXR1cyBmaWVsZCAqLwogLyogUmVjZWl2ZSBzaWRlICovCi0jZGVmaW5lIEZSQU1FX09LICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBGcmFtZSB0cmFubWl0dGVkIG9yIHJlY2VpdmVkIE9LICovCisjZGVmaW5lIEZSQU1FX09LICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAvKiBGcmFtZSB0cmFuc21pdHRlZCBvciByZWNlaXZlZCBPSyAqLwogI2RlZmluZSBGUkFNRV9FUlJPUiAgICAgICAgICAgIDB4ODAwMDAwMDAgLyogRXJyb3Igb2NjdXJyZWQgb24gZnJhbWUgKi8KICNkZWZpbmUgU1RBUlRfRlJBTUVfTE9TVCAgICAgICAweDQwMDAwMDAwIC8qIFNUQVJUX0ZSQU1FX0xPU1QgKi8KICNkZWZpbmUgRU5EX0ZSQU1FX0xPU1QgICAgICAgICAweDIwMDAwMDAwIC8qIEVORF9GUkFNRV9MT1NUICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VkY19jb3JlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VkY19jb3JlLmMKaW5kZXggMDc0OTljMS4uMmNkOWE2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91ZGNfY29yZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdWRjX2NvcmUuYwpAQCAtMSwxMiArMSwxMyBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHV0b3IsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3LDIwMTEgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogQXV0aG9yOiBMaSBZYW5nIDxsZW9saUBmcmVlc2NhbGUuY29tPgogICogICAgICAgICBKaWFuZyBCbyA8dGFueWEuamlhbmdAZnJlZXNjYWxlLmNvbT4KICAqCiAgKiBEZXNjcmlwdGlvbjoKICAqIEZyZWVzY2FsZSBoaWdoLXNwZWVkIFVTQiBTT0MgRFIgbW9kdWxlIGRldmljZSBjb250cm9sbGVyIGRyaXZlci4KLSAqIFRoaXMgY2FuIGJlIGZvdW5kIG9uIE1QQzgzNDlFL01QQzgzMTNFIGNwdXMuCisgKiBUaGlzIGNhbiBiZSBmb3VuZCBvbiBNUEM4MzQ5RS9NUEM4MzEzRS9NUEM1MTIxRSBjcHVzLgogICogVGhlIGRyaXZlciBpcyBwcmV2aW91c2x5IG5hbWVkIGFzIG1wY191ZGMuICBCYXNlZCBvbiBiYXJlIGJvYXJkCiAgKiBjb2RlIGZyb20gRGF2ZSBMaXUgYW5kIFNobG9taSBHcmlkaXNoLgogICoKQEAgLTQ1LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogCiAjaW5jbHVkZSAiZnNsX3VzYjJfdWRjLmgiCiAKQEAgLTc3LDEyICs3OSw2NCBAQAogc3RhdGljIHZvaWQgZnNsX2VwX2ZpZm9fZmx1c2goc3RydWN0IHVzYl9lcCAqX2VwKTsKIAogI2lmZGVmIENPTkZJR19QUEMzMgotI2RlZmluZSBmc2xfcmVhZGwoYWRkcikJCWluX2xlMzIoYWRkcikKLSNkZWZpbmUgZnNsX3dyaXRlbCh2YWwzMiwgYWRkcikgb3V0X2xlMzIoYWRkciwgdmFsMzIpCi0jZWxzZQorLyoKKyAqIE9uIHNvbWUgU29DcywgdGhlIFVTQiBjb250cm9sbGVyIHJlZ2lzdGVycyBjYW4gYmUgYmlnIG9yIGxpdHRsZSBlbmRpYW4sCisgKiBkZXBlbmRpbmcgb24gdGhlIHZlcnNpb24gb2YgdGhlIGNoaXAuIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcnVuIHRoZQorICogc2FtZSBrZXJuZWwgYmluYXJ5IG9uIDIgZGlmZmVyZW50IHZlcnNpb25zIG9mIGFuIFNvQywgdGhlIEJFL0xFIGRlY2lzaW9uCisgKiBtdXN0IGJlIG1hZGUgYXQgcnVuIHRpbWUuIF9mc2xfcmVhZGwgYW5kIGZzbF93cml0ZWwgYXJlIHBvaW50ZXJzIHRvIHRoZQorICogQkUgb3IgTEUgcmVhZGwoKSBhbmQgd3JpdGVsKCkgZnVuY3Rpb25zLCBhbmQgZnNsX3JlYWRsKCkgYW5kIGZzbF93cml0ZWwoKQorICogY2FsbCB0aHJvdWdoIHRob3NlIHBvaW50ZXJzLiBQbGF0Zm9ybSBjb2RlIGZvciBTb0NzIHRoYXQgaGF2ZSBCRSBVU0IKKyAqIHJlZ2lzdGVycyBzaG91bGQgc2V0IHBkYXRhLT5iaWdfZW5kaWFuX21taW8gZmxhZy4KKyAqCisgKiBUaGlzIGFsc28gYXBwbGllcyB0byBjb250cm9sbGVyLXRvLWNwdSBhY2Nlc3NvcnMgZm9yIHRoZSBVU0IgZGVzY3JpcHRvcnMsCisgKiBzaW5jZSB0aGVpciBlbmRpYW5uZXNzIGlzIGFsc28gU29DIGRlcGVuZGFudC4gUGxhdGZvcm0gY29kZSBmb3IgU29DcyB0aGF0CisgKiBoYXZlIEJFIFVTQiBkZXNjcmlwdG9ycyBzaG91bGQgc2V0IHBkYXRhLT5iaWdfZW5kaWFuX2Rlc2MgZmxhZy4KKyAqLworc3RhdGljIHUzMiBfZnNsX3JlYWRsX2JlKGNvbnN0IHVuc2lnbmVkIF9faW9tZW0gKnApCit7CisJcmV0dXJuIGluX2JlMzIocCk7Cit9CisKK3N0YXRpYyB1MzIgX2ZzbF9yZWFkbF9sZShjb25zdCB1bnNpZ25lZCBfX2lvbWVtICpwKQoreworCXJldHVybiBpbl9sZTMyKHApOworfQorCitzdGF0aWMgdm9pZCBfZnNsX3dyaXRlbF9iZSh1MzIgdiwgdW5zaWduZWQgX19pb21lbSAqcCkKK3sKKwlvdXRfYmUzMihwLCB2KTsKK30KKworc3RhdGljIHZvaWQgX2ZzbF93cml0ZWxfbGUodTMyIHYsIHVuc2lnbmVkIF9faW9tZW0gKnApCit7CisJb3V0X2xlMzIocCwgdik7Cit9CisKK3N0YXRpYyB1MzIgKCpfZnNsX3JlYWRsKShjb25zdCB1bnNpZ25lZCBfX2lvbWVtICpwKTsKK3N0YXRpYyB2b2lkICgqX2ZzbF93cml0ZWwpKHUzMiB2LCB1bnNpZ25lZCBfX2lvbWVtICpwKTsKKworI2RlZmluZSBmc2xfcmVhZGwocCkJCSgqX2ZzbF9yZWFkbCkoKHApKQorI2RlZmluZSBmc2xfd3JpdGVsKHYsIHApCSgqX2ZzbF93cml0ZWwpKCh2KSwgKHApKQorCitzdGF0aWMgaW5saW5lIHUzMiBjcHVfdG9faGMzMihjb25zdCB1MzIgeCkKK3sKKwlyZXR1cm4gdWRjX2NvbnRyb2xsZXItPnBkYXRhLT5iaWdfZW5kaWFuX2Rlc2MKKwkJPyAoX19mb3JjZSB1MzIpY3B1X3RvX2JlMzIoeCkKKwkJOiAoX19mb3JjZSB1MzIpY3B1X3RvX2xlMzIoeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGhjMzJfdG9fY3B1KGNvbnN0IHUzMiB4KQoreworCXJldHVybiB1ZGNfY29udHJvbGxlci0+cGRhdGEtPmJpZ19lbmRpYW5fZGVzYworCQk/IGJlMzJfdG9fY3B1KChfX2ZvcmNlIF9fYmUzMil4KQorCQk6IGxlMzJfdG9fY3B1KChfX2ZvcmNlIF9fbGUzMil4KTsKK30KKyNlbHNlIC8qICFDT05GSUdfUFBDMzIgKi8KICNkZWZpbmUgZnNsX3JlYWRsKGFkZHIpCQlyZWFkbChhZGRyKQogI2RlZmluZSBmc2xfd3JpdGVsKHZhbDMyLCBhZGRyKSB3cml0ZWwodmFsMzIsIGFkZHIpCi0jZW5kaWYKKyNkZWZpbmUgY3B1X3RvX2hjMzIoeCkJCWNwdV90b19sZTMyKHgpCisjZGVmaW5lIGhjMzJfdG9fY3B1KHgpCQlsZTMyX3RvX2NwdSh4KQorI2VuZGlmIC8qIENPTkZJR19QUEMzMiAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCUludGVybmFsIFVzZWQgRnVuY3Rpb24KQEAgLTE3Nyw3ICsyMzEsOCBAQAogCiBzdGF0aWMgaW50IGRyX2NvbnRyb2xsZXJfc2V0dXAoc3RydWN0IGZzbF91ZGMgKnVkYykKIHsKLQl1bnNpZ25lZCBpbnQgdG1wLCBwb3J0Y3RybDsKKwl1bnNpZ25lZCBpbnQgdG1wLCBwb3J0Y3RybCwgZXBfbnVtOworCXVuc2lnbmVkIGludCBtYXhfbm9fb2ZfZXA7CiAjaWZuZGVmIENPTkZJR19BUkNIX01YQwogCXVuc2lnbmVkIGludCBjdHJsOwogI2VuZGlmCkBAIC0yMjYsOSArMjgxLDEyIEBACiAKIAkvKiBTZXQgdGhlIGNvbnRyb2xsZXIgYXMgZGV2aWNlIG1vZGUgKi8KIAl0bXAgPSBmc2xfcmVhZGwoJmRyX3JlZ3MtPnVzYm1vZGUpOworCXRtcCAmPSB+VVNCX01PREVfQ1RSTF9NT0RFX01BU0s7CS8qIGNsZWFyIG1vZGUgYml0cyAqLwogCXRtcCB8PSBVU0JfTU9ERV9DVFJMX01PREVfREVWSUNFOwogCS8qIERpc2FibGUgU2V0dXAgTG9ja291dCAqLwogCXRtcCB8PSBVU0JfTU9ERV9TRVRVUF9MT0NLX09GRjsKKwlpZiAodWRjLT5wZGF0YS0+ZXMpCisJCXRtcCB8PSBVU0JfTU9ERV9FUzsKIAlmc2xfd3JpdGVsKHRtcCwgJmRyX3JlZ3MtPnVzYm1vZGUpOwogCiAJLyogQ2xlYXIgdGhlIHNldHVwIHN0YXR1cyAqLwpAQCAtMjQyLDIyICszMDAsMzQgQEAKIAkJdWRjLT5lcF9xaCwgKGludCl0bXAsCiAJCWZzbF9yZWFkbCgmZHJfcmVncy0+ZW5kcG9pbnRsaXN0YWRkcikpOwogCisJbWF4X25vX29mX2VwID0gKDB4MDAwMDAwMUYgJiBmc2xfcmVhZGwoJmRyX3JlZ3MtPmRjY3BhcmFtcykpOworCWZvciAoZXBfbnVtID0gMTsgZXBfbnVtIDwgbWF4X25vX29mX2VwOyBlcF9udW0rKykgeworCQl0bXAgPSBmc2xfcmVhZGwoJmRyX3JlZ3MtPmVuZHB0Y3RybFtlcF9udW1dKTsKKwkJdG1wICY9IH4oRVBDVFJMX1RYX1RZUEUgfCBFUENUUkxfUlhfVFlQRSk7CisJCXRtcCB8PSAoRVBDVFJMX0VQX1RZUEVfQlVMSyA8PCBFUENUUkxfVFhfRVBfVFlQRV9TSElGVCkKKwkJfCAoRVBDVFJMX0VQX1RZUEVfQlVMSyA8PCBFUENUUkxfUlhfRVBfVFlQRV9TSElGVCk7CisJCWZzbF93cml0ZWwodG1wLCAmZHJfcmVncy0+ZW5kcHRjdHJsW2VwX251bV0pOworCX0KIAkvKiBDb25maWcgY29udHJvbCBlbmFibGUgaS9vIG91dHB1dCwgY3B1IGVuZGlhbiByZWdpc3RlciAqLwogI2lmbmRlZiBDT05GSUdfQVJDSF9NWEMKLQljdHJsID0gX19yYXdfcmVhZGwoJnVzYl9zeXNfcmVncy0+Y29udHJvbCk7Ci0JY3RybCB8PSBVU0JfQ1RSTF9JT0VOQjsKLQlfX3Jhd193cml0ZWwoY3RybCwgJnVzYl9zeXNfcmVncy0+Y29udHJvbCk7CisJaWYgKHVkYy0+cGRhdGEtPmhhdmVfc3lzaWZfcmVncykgeworCQljdHJsID0gX19yYXdfcmVhZGwoJnVzYl9zeXNfcmVncy0+Y29udHJvbCk7CisJCWN0cmwgfD0gVVNCX0NUUkxfSU9FTkI7CisJCV9fcmF3X3dyaXRlbChjdHJsLCAmdXNiX3N5c19yZWdzLT5jb250cm9sKTsKKwl9CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX1BQQzMyKSAmJiAhZGVmaW5lZChDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFKQogCS8qIFR1cm4gb24gY2FjaGUgc25vb3BpbmcgaGFyZHdhcmUsIHNpbmNlIHNvbWUgUG93ZXJQQyBwbGF0Zm9ybXMKIAkgKiB3aG9sbHkgcmVseSBvbiBoYXJkd2FyZSB0byBkZWFsIHdpdGggY2FjaGUgY29oZXJlbnQuICovCiAKLQkvKiBTZXR1cCBTbm9vcGluZyBmb3IgYWxsIHRoZSA0R0Igc3BhY2UgKi8KLQl0bXAgPSBTTk9PUF9TSVpFXzJHQjsJLyogc3RhcnRzIGZyb20gMHgwLCBzaXplIDJHICovCi0JX19yYXdfd3JpdGVsKHRtcCwgJnVzYl9zeXNfcmVncy0+c25vb3AxKTsKLQl0bXAgfD0gMHg4MDAwMDAwMDsJLyogc3RhcnRzIGZyb20gMHg4MDAwMDAwLCBzaXplIDJHICovCi0JX19yYXdfd3JpdGVsKHRtcCwgJnVzYl9zeXNfcmVncy0+c25vb3AyKTsKKwlpZiAodWRjLT5wZGF0YS0+aGF2ZV9zeXNpZl9yZWdzKSB7CisJCS8qIFNldHVwIFNub29waW5nIGZvciBhbGwgdGhlIDRHQiBzcGFjZSAqLworCQl0bXAgPSBTTk9PUF9TSVpFXzJHQjsJLyogc3RhcnRzIGZyb20gMHgwLCBzaXplIDJHICovCisJCV9fcmF3X3dyaXRlbCh0bXAsICZ1c2Jfc3lzX3JlZ3MtPnNub29wMSk7CisJCXRtcCB8PSAweDgwMDAwMDAwOwkvKiBzdGFydHMgZnJvbSAweDgwMDAwMDAsIHNpemUgMkcgKi8KKwkJX19yYXdfd3JpdGVsKHRtcCwgJnVzYl9zeXNfcmVncy0+c25vb3AyKTsKKwl9CiAjZW5kaWYKIAogCXJldHVybiAwOwpAQCAtMjkzLDYgKzM2MywxOSBAQAogewogCXVuc2lnbmVkIGludCB0bXA7CiAKKwlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKKworCS8qIGlmIHdlJ3JlIGluIE9URyBtb2RlLCBhbmQgdGhlIEhvc3QgaXMgY3VycmVudGx5IHVzaW5nIHRoZSBwb3J0LAorCSAqIHN0b3Agbm93IGFuZCBkb24ndCByaXAgdGhlIGNvbnRyb2xsZXIgb3V0IGZyb20gdW5kZXIgdGhlCisJICogZWhjaSBkcml2ZXIKKwkgKi8KKwlpZiAodWRjLT5nYWRnZXQuaXNfb3RnKSB7CisJCWlmICghKGZzbF9yZWFkbCgmZHJfcmVncy0+b3Rnc2MpICYgT1RHU0NfU1RTX1VTQl9JRCkpIHsKKwkJCXByX2RlYnVnKCJ1ZGM6IExlYXZpbmcgZWFybHlcbiIpOworCQkJcmV0dXJuOworCQl9CisJfQorCiAJLyogZGlzYWJsZSBhbGwgSU5UUiAqLwogCWZzbF93cml0ZWwoMCwgJmRyX3JlZ3MtPnVzYmludHIpOwogCkBAIC0zMTgsMTIgKzQwMSwxNCBAQAogCQlpZiAoZXBfbnVtKQogCQkJdG1wX2VwY3RybCB8PSBFUENUUkxfVFhfREFUQV9UT0dHTEVfUlNUOwogCQl0bXBfZXBjdHJsIHw9IEVQQ1RSTF9UWF9FTkFCTEU7CisJCXRtcF9lcGN0cmwgJj0gfkVQQ1RSTF9UWF9UWVBFOwogCQl0bXBfZXBjdHJsIHw9ICgodW5zaWduZWQgaW50KShlcF90eXBlKQogCQkJCTw8IEVQQ1RSTF9UWF9FUF9UWVBFX1NISUZUKTsKIAl9IGVsc2UgewogCQlpZiAoZXBfbnVtKQogCQkJdG1wX2VwY3RybCB8PSBFUENUUkxfUlhfREFUQV9UT0dHTEVfUlNUOwogCQl0bXBfZXBjdHJsIHw9IEVQQ1RSTF9SWF9FTkFCTEU7CisJCXRtcF9lcGN0cmwgJj0gfkVQQ1RSTF9SWF9UWVBFOwogCQl0bXBfZXBjdHJsIHw9ICgodW5zaWduZWQgaW50KShlcF90eXBlKQogCQkJCTw8IEVQQ1RSTF9SWF9FUF9UWVBFX1NISUZUKTsKIAl9CkBAIC00MDksNyArNDk0LDcgQEAKIAlpZiAoemx0KQogCQl0bXAgfD0gRVBfUVVFVUVfSEVBRF9aTFRfU0VMOwogCi0JcF9RSC0+bWF4X3BrdF9sZW5ndGggPSBjcHVfdG9fbGUzMih0bXApOworCXBfUUgtPm1heF9wa3RfbGVuZ3RoID0gY3B1X3RvX2hjMzIodG1wKTsKIAlwX1FILT5uZXh0X2R0ZF9wdHIgPSAxOwogCXBfUUgtPnNpemVfaW9jX2ludF9zdHMgPSAwOwogfQpAQCAtNTQ2LDEwICs2MzEsMTMgQEAKIAkvKiBkaXNhYmxlIGVwIG9uIGNvbnRyb2xsZXIgKi8KIAllcF9udW0gPSBlcF9pbmRleChlcCk7CiAJZXBjdHJsID0gZnNsX3JlYWRsKCZkcl9yZWdzLT5lbmRwdGN0cmxbZXBfbnVtXSk7Ci0JaWYgKGVwX2lzX2luKGVwKSkKLQkJZXBjdHJsICY9IH5FUENUUkxfVFhfRU5BQkxFOwotCWVsc2UKLQkJZXBjdHJsICY9IH5FUENUUkxfUlhfRU5BQkxFOworCWlmIChlcF9pc19pbihlcCkpIHsKKwkJZXBjdHJsICY9IH4oRVBDVFJMX1RYX0VOQUJMRSB8IEVQQ1RSTF9UWF9UWVBFKTsKKwkJZXBjdHJsIHw9IEVQQ1RSTF9FUF9UWVBFX0JVTEsgPDwgRVBDVFJMX1RYX0VQX1RZUEVfU0hJRlQ7CisJfSBlbHNlIHsKKwkJZXBjdHJsICY9IH4oRVBDVFJMX1JYX0VOQUJMRSB8IEVQQ1RSTF9UWF9UWVBFKTsKKwkJZXBjdHJsIHw9IEVQQ1RSTF9FUF9UWVBFX0JVTEsgPDwgRVBDVFJMX1JYX0VQX1RZUEVfU0hJRlQ7CisJfQogCWZzbF93cml0ZWwoZXBjdHJsLCAmZHJfcmVncy0+ZW5kcHRjdHJsW2VwX251bV0pOwogCiAJdWRjID0gKHN0cnVjdCBmc2xfdWRjICopZXAtPnVkYzsKQEAgLTYxNiw3ICs3MDQsNyBAQAogCQlzdHJ1Y3QgZnNsX3JlcSAqbGFzdHJlcTsKIAkJbGFzdHJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLnByZXYsIHN0cnVjdCBmc2xfcmVxLCBxdWV1ZSk7CiAJCWxhc3RyZXEtPnRhaWwtPm5leHRfdGRfcHRyID0KLQkJCWNwdV90b19sZTMyKHJlcS0+aGVhZC0+dGRfZG1hICYgRFREX0FERFJfTUFTSyk7CisJCQljcHVfdG9faGMzMihyZXEtPmhlYWQtPnRkX2RtYSAmIERURF9BRERSX01BU0spOwogCQkvKiBSZWFkIHByaW1lIGJpdCwgaWYgMSBnb3RvIGRvbmUgKi8KIAkJaWYgKGZzbF9yZWFkbCgmZHJfcmVncy0+ZW5kcG9pbnRwcmltZSkgJiBiaXRtYXNrKQogCQkJZ290byBvdXQ7CkBAIC02NDEsMTAgKzcyOSwxMCBAQAogCiAJLyogV3JpdGUgZFFIIG5leHQgcG9pbnRlciBhbmQgdGVybWluYXRlIGJpdCB0byAwICovCiAJdGVtcCA9IHJlcS0+aGVhZC0+dGRfZG1hICYgRVBfUVVFVUVfSEVBRF9ORVhUX1BPSU5URVJfTUFTSzsKLQlkUUgtPm5leHRfZHRkX3B0ciA9IGNwdV90b19sZTMyKHRlbXApOworCWRRSC0+bmV4dF9kdGRfcHRyID0gY3B1X3RvX2hjMzIodGVtcCk7CiAKIAkvKiBDbGVhciBhY3RpdmUgYW5kIGhhbHQgYml0ICovCi0JdGVtcCA9IGNwdV90b19sZTMyKH4oRVBfUVVFVUVfSEVBRF9TVEFUVVNfQUNUSVZFCisJdGVtcCA9IGNwdV90b19oYzMyKH4oRVBfUVVFVUVfSEVBRF9TVEFUVVNfQUNUSVZFCiAJCQl8IEVQX1FVRVVFX0hFQURfU1RBVFVTX0hBTFQpKTsKIAlkUUgtPnNpemVfaW9jX2ludF9zdHMgJj0gdGVtcDsKIApAQCAtNjgyLDE3ICs3NzAsMTcgQEAKIAogCWR0ZC0+dGRfZG1hID0gKmRtYTsKIAkvKiBDbGVhciByZXNlcnZlZCBmaWVsZCAqLwotCXN3YXBfdGVtcCA9IGNwdV90b19sZTMyKGR0ZC0+c2l6ZV9pb2Nfc3RzKTsKKwlzd2FwX3RlbXAgPSBoYzMyX3RvX2NwdShkdGQtPnNpemVfaW9jX3N0cyk7CiAJc3dhcF90ZW1wICY9IH5EVERfUkVTRVJWRURfRklFTERTOwotCWR0ZC0+c2l6ZV9pb2Nfc3RzID0gY3B1X3RvX2xlMzIoc3dhcF90ZW1wKTsKKwlkdGQtPnNpemVfaW9jX3N0cyA9IGNwdV90b19oYzMyKHN3YXBfdGVtcCk7CiAKIAkvKiBJbml0IGFsbCBvZiBidWZmZXIgcGFnZSBwb2ludGVycyAqLwogCXN3YXBfdGVtcCA9ICh1MzIpIChyZXEtPnJlcS5kbWEgKyByZXEtPnJlcS5hY3R1YWwpOwotCWR0ZC0+YnVmZl9wdHIwID0gY3B1X3RvX2xlMzIoc3dhcF90ZW1wKTsKLQlkdGQtPmJ1ZmZfcHRyMSA9IGNwdV90b19sZTMyKHN3YXBfdGVtcCArIDB4MTAwMCk7Ci0JZHRkLT5idWZmX3B0cjIgPSBjcHVfdG9fbGUzMihzd2FwX3RlbXAgKyAweDIwMDApOwotCWR0ZC0+YnVmZl9wdHIzID0gY3B1X3RvX2xlMzIoc3dhcF90ZW1wICsgMHgzMDAwKTsKLQlkdGQtPmJ1ZmZfcHRyNCA9IGNwdV90b19sZTMyKHN3YXBfdGVtcCArIDB4NDAwMCk7CisJZHRkLT5idWZmX3B0cjAgPSBjcHVfdG9faGMzMihzd2FwX3RlbXApOworCWR0ZC0+YnVmZl9wdHIxID0gY3B1X3RvX2hjMzIoc3dhcF90ZW1wICsgMHgxMDAwKTsKKwlkdGQtPmJ1ZmZfcHRyMiA9IGNwdV90b19oYzMyKHN3YXBfdGVtcCArIDB4MjAwMCk7CisJZHRkLT5idWZmX3B0cjMgPSBjcHVfdG9faGMzMihzd2FwX3RlbXAgKyAweDMwMDApOworCWR0ZC0+YnVmZl9wdHI0ID0gY3B1X3RvX2hjMzIoc3dhcF90ZW1wICsgMHg0MDAwKTsKIAogCXJlcS0+cmVxLmFjdHVhbCArPSAqbGVuZ3RoOwogCkBAIC03MTYsNyArODA0LDcgQEAKIAlpZiAoKmlzX2xhc3QgJiYgIXJlcS0+cmVxLm5vX2ludGVycnVwdCkKIAkJc3dhcF90ZW1wIHw9IERURF9JT0M7CiAKLQlkdGQtPnNpemVfaW9jX3N0cyA9IGNwdV90b19sZTMyKHN3YXBfdGVtcCk7CisJZHRkLT5zaXplX2lvY19zdHMgPSBjcHVfdG9faGMzMihzd2FwX3RlbXApOwogCiAJbWIoKTsKIApAQCAtNzQzLDcgKzgzMSw3IEBACiAJCQlpc19maXJzdCA9IDA7CiAJCQlyZXEtPmhlYWQgPSBkdGQ7CiAJCX0gZWxzZSB7Ci0JCQlsYXN0X2R0ZC0+bmV4dF90ZF9wdHIgPSBjcHVfdG9fbGUzMihkbWEpOworCQkJbGFzdF9kdGQtPm5leHRfdGRfcHRyID0gY3B1X3RvX2hjMzIoZG1hKTsKIAkJCWxhc3RfZHRkLT5uZXh0X3RkX3ZpcnQgPSBkdGQ7CiAJCX0KIAkJbGFzdF9kdGQgPSBkdGQ7CkBAIC03NTEsNyArODM5LDcgQEAKIAkJcmVxLT5kdGRfY291bnQrKzsKIAl9IHdoaWxlICghaXNfbGFzdCk7CiAKLQlkdGQtPm5leHRfdGRfcHRyID0gY3B1X3RvX2xlMzIoRFREX05FWFRfVEVSTUlOQVRFKTsKKwlkdGQtPm5leHRfdGRfcHRyID0gY3B1X3RvX2hjMzIoRFREX05FWFRfVEVSTUlOQVRFKTsKIAogCXJlcS0+dGFpbCA9IGR0ZDsKIApAQCAtOTYyLDYgKzEwNTAsMzYgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCitzdGF0aWMgaW50IGZzbF9lcF9maWZvX3N0YXR1cyhzdHJ1Y3QgdXNiX2VwICpfZXApCit7CisJc3RydWN0IGZzbF9lcCAqZXA7CisJc3RydWN0IGZzbF91ZGMgKnVkYzsKKwlpbnQgc2l6ZSA9IDA7CisJdTMyIGJpdG1hc2s7CisJc3RydWN0IGVwX3F1ZXVlX2hlYWQgKmRfcWg7CisKKwllcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBmc2xfZXAsIGVwKTsKKwlpZiAoIV9lcCB8fCAoIWVwLT5kZXNjICYmIGVwX2luZGV4KGVwKSAhPSAwKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl1ZGMgPSAoc3RydWN0IGZzbF91ZGMgKillcC0+dWRjOworCisJaWYgKCF1ZGMtPmRyaXZlciB8fCB1ZGMtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikKKwkJcmV0dXJuIC1FU0hVVERPV047CisKKwlkX3FoID0gJmVwLT51ZGMtPmVwX3FoW2VwX2luZGV4KGVwKSAqIDIgKyBlcF9pc19pbihlcCldOworCisJYml0bWFzayA9IChlcF9pc19pbihlcCkpID8gKDEgPDwgKGVwX2luZGV4KGVwKSArIDE2KSkgOgorCSAgICAoMSA8PCAoZXBfaW5kZXgoZXApKSk7CisKKwlpZiAoZnNsX3JlYWRsKCZkcl9yZWdzLT5lbmRwdHN0YXR1cykgJiBiaXRtYXNrKQorCQlzaXplID0gKGRfcWgtPnNpemVfaW9jX2ludF9zdHMgJiBEVERfUEFDS0VUX1NJWkUpCisJCSAgICA+PiBEVERfTEVOR1RIX0JJVF9QT1M7CisKKwlwcl9kZWJ1ZygiJXMgJXVcbiIsIF9fZnVuY19fLCBzaXplKTsKKwlyZXR1cm4gc2l6ZTsKK30KKwogc3RhdGljIHZvaWQgZnNsX2VwX2ZpZm9fZmx1c2goc3RydWN0IHVzYl9lcCAqX2VwKQogewogCXN0cnVjdCBmc2xfZXAgKmVwOwpAQCAtMTAxNCw2ICsxMTMyLDcgQEAKIAkuZGVxdWV1ZSA9IGZzbF9lcF9kZXF1ZXVlLAogCiAJLnNldF9oYWx0ID0gZnNsX2VwX3NldF9oYWx0LAorCS5maWZvX3N0YXR1cyA9IGZzbF9lcF9maWZvX3N0YXR1cywKIAkuZmlmb19mbHVzaCA9IGZzbF9lcF9maWZvX2ZsdXNoLAkvKiBmbHVzaCBmaWZvICovCiB9OwogCkBAIC0xMjI4LDYgKzEzNDcsMTAgQEAKIAlyZXEgPSB1ZGMtPnN0YXR1c19yZXE7CiAJLyogRmlsbCBpbiB0aGUgcmVxZXN0IHN0cnVjdHVyZSAqLwogCSooKHUxNiAqKSByZXEtPnJlcS5idWYpID0gY3B1X3RvX2xlMTYodG1wKTsKKworCS8qIGZsdXNoIGNhY2hlIGZvciB0aGUgcmVxIGJ1ZmZlciAqLworCWZsdXNoX2RjYWNoZV9yYW5nZSgodTMyKXJlcS0+cmVxLmJ1ZiwgKHUzMilyZXEtPnJlcS5idWYgKyA4KTsKKwogCXJlcS0+ZXAgPSBlcDsKIAlyZXEtPnJlcS5sZW5ndGggPSAyOwogCXJlcS0+cmVxLnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKQEAgLTEyODAsNiArMTQwMyw3IEBACiAJCS8qIFN0YXR1cyBwaGFzZSBmcm9tIHVkYyAqLwogCXsKIAkJaW50IHJjID0gLUVPUE5PVFNVUFA7CisJCXUxNiBwdGMgPSAwOwogCiAJCWlmICgoc2V0dXAtPmJSZXF1ZXN0VHlwZSAmIChVU0JfUkVDSVBfTUFTSyB8IFVTQl9UWVBFX01BU0spKQogCQkJCT09IChVU0JfUkVDSVBfRU5EUE9JTlQgfCBVU0JfVFlQRV9TVEFOREFSRCkpIHsKQEAgLTEzMDEsMTcgKzE0MjUsMTkgQEAKIAkJCQl8IFVTQl9UWVBFX1NUQU5EQVJEKSkgewogCQkJLyogTm90ZTogVGhlIGRyaXZlciBoYXMgbm90IGluY2x1ZGUgT1RHIHN1cHBvcnQgeWV0LgogCQkJICogVGhpcyB3aWxsIGJlIHNldCB3aGVuIE9URyBzdXBwb3J0IGlzIGFkZGVkICovCi0JCQlpZiAoIWdhZGdldF9pc19vdGcoJnVkYy0+Z2FkZ2V0KSkKLQkJCQlicmVhazsKLQkJCWVsc2UgaWYgKHNldHVwLT5iUmVxdWVzdCA9PSBVU0JfREVWSUNFX0JfSE5QX0VOQUJMRSkKLQkJCQl1ZGMtPmdhZGdldC5iX2hucF9lbmFibGUgPSAxOwotCQkJZWxzZSBpZiAoc2V0dXAtPmJSZXF1ZXN0ID09IFVTQl9ERVZJQ0VfQV9ITlBfU1VQUE9SVCkKLQkJCQl1ZGMtPmdhZGdldC5hX2hucF9zdXBwb3J0ID0gMTsKLQkJCWVsc2UgaWYgKHNldHVwLT5iUmVxdWVzdCA9PQotCQkJCQlVU0JfREVWSUNFX0FfQUxUX0hOUF9TVVBQT1JUKQotCQkJCXVkYy0+Z2FkZ2V0LmFfYWx0X2hucF9zdXBwb3J0ID0gMTsKLQkJCWVsc2UKLQkJCQlicmVhazsKKwkJCWlmICh3VmFsdWUgPT0gVVNCX0RFVklDRV9URVNUX01PREUpCisJCQkJcHRjID0gd0luZGV4ID4+IDg7CisJCQllbHNlIGlmIChnYWRnZXRfaXNfb3RnKCZ1ZGMtPmdhZGdldCkpIHsKKwkJCQlpZiAoc2V0dXAtPmJSZXF1ZXN0ID09CisJCQkJICAgIFVTQl9ERVZJQ0VfQl9ITlBfRU5BQkxFKQorCQkJCQl1ZGMtPmdhZGdldC5iX2hucF9lbmFibGUgPSAxOworCQkJCWVsc2UgaWYgKHNldHVwLT5iUmVxdWVzdCA9PQorCQkJCQkgVVNCX0RFVklDRV9BX0hOUF9TVVBQT1JUKQorCQkJCQl1ZGMtPmdhZGdldC5hX2hucF9zdXBwb3J0ID0gMTsKKwkJCQllbHNlIGlmIChzZXR1cC0+YlJlcXVlc3QgPT0KKwkJCQkJIFVTQl9ERVZJQ0VfQV9BTFRfSE5QX1NVUFBPUlQpCisJCQkJCXVkYy0+Z2FkZ2V0LmFfYWx0X2hucF9zdXBwb3J0ID0gMTsKKwkJCX0KIAkJCXJjID0gMDsKIAkJfSBlbHNlCiAJCQlicmVhazsKQEAgLTEzMjAsNiArMTQ0NiwxNSBAQAogCQkJaWYgKGVwMF9wcmltZV9zdGF0dXModWRjLCBFUF9ESVJfSU4pKQogCQkJCWVwMHN0YWxsKHVkYyk7CiAJCX0KKwkJaWYgKHB0YykgeworCQkJdTMyIHRtcDsKKworCQkJbWRlbGF5KDEwKTsKKwkJCXRtcCA9IGZzbF9yZWFkbCgmZHJfcmVncy0+cG9ydHNjMSkgfCAocHRjIDw8IDE2KTsKKwkJCWZzbF93cml0ZWwodG1wLCAmZHJfcmVncy0+cG9ydHNjMSk7CisJCQlwcmludGsoS0VSTl9JTkZPICJ1ZGM6IHN3aXRjaCB0byB0ZXN0IG1vZGUgJWQuXG4iLCBwdGMpOworCQl9CisKIAkJcmV0dXJuOwogCX0KIApAQCAtMTM5NCw2ICsxNTI5LDcgQEAKIHsKIAl1MzIgdGVtcDsKIAlzdHJ1Y3QgZXBfcXVldWVfaGVhZCAqcWg7CisJc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gdWRjLT5wZGF0YTsKIAogCXFoID0gJnVkYy0+ZXBfcWhbZXBfbnVtICogMiArIEVQX0RJUl9PVVRdOwogCkBAIC0xNDA4LDcgKzE1NDQsMTYgQEAKIAkJZnNsX3dyaXRlbCh0ZW1wIHwgVVNCX0NNRF9TVVRXLCAmZHJfcmVncy0+dXNiY21kKTsKIAogCQkvKiBDb3B5IHRoZSBzZXR1cCBwYWNrZXQgdG8gbG9jYWwgYnVmZmVyICovCi0JCW1lbWNweShidWZmZXJfcHRyLCAodTggKikgcWgtPnNldHVwX2J1ZmZlciwgOCk7CisJCWlmIChwZGF0YS0+bGVfc2V0dXBfYnVmKSB7CisJCQl1MzIgKnAgPSAodTMyICopYnVmZmVyX3B0cjsKKwkJCXUzMiAqcyA9ICh1MzIgKilxaC0+c2V0dXBfYnVmZmVyOworCisJCQkvKiBDb252ZXJ0IGxpdHRsZSBlbmRpYW4gc2V0dXAgYnVmZmVyIHRvIENQVSBlbmRpYW4gKi8KKwkJCSpwKysgPSBsZTMyX3RvX2NwdSgqcysrKTsKKwkJCSpwID0gbGUzMl90b19jcHUoKnMpOworCQl9IGVsc2UgeworCQkJbWVtY3B5KGJ1ZmZlcl9wdHIsICh1OCAqKSBxaC0+c2V0dXBfYnVmZmVyLCA4KTsKKwkJfQogCX0gd2hpbGUgKCEoZnNsX3JlYWRsKCZkcl9yZWdzLT51c2JjbWQpICYgVVNCX0NNRF9TVVRXKSk7CiAKIAkvKiBDbGVhciBTZXR1cCBUcmlwd2lyZSAqLwpAQCAtMTQzMiwxOSArMTU3NywxOSBAQAogCWFjdHVhbCA9IGN1cnJfcmVxLT5yZXEubGVuZ3RoOwogCiAJZm9yIChqID0gMDsgaiA8IGN1cnJfcmVxLT5kdGRfY291bnQ7IGorKykgewotCQlyZW1haW5pbmdfbGVuZ3RoID0gKGxlMzJfdG9fY3B1KGN1cnJfdGQtPnNpemVfaW9jX3N0cykKKwkJcmVtYWluaW5nX2xlbmd0aCA9IChoYzMyX3RvX2NwdShjdXJyX3RkLT5zaXplX2lvY19zdHMpCiAJCQkJCSYgRFREX1BBQ0tFVF9TSVpFKQogCQkJCT4+IERURF9MRU5HVEhfQklUX1BPUzsKIAkJYWN0dWFsIC09IHJlbWFpbmluZ19sZW5ndGg7CiAKLQkJaWYgKChlcnJvcnMgPSBsZTMyX3RvX2NwdShjdXJyX3RkLT5zaXplX2lvY19zdHMpICYKLQkJCQkJCURURF9FUlJPUl9NQVNLKSkgeworCQllcnJvcnMgPSBoYzMyX3RvX2NwdShjdXJyX3RkLT5zaXplX2lvY19zdHMpOworCQlpZiAoZXJyb3JzICYgRFREX0VSUk9SX01BU0spIHsKIAkJCWlmIChlcnJvcnMgJiBEVERfU1RBVFVTX0hBTFRFRCkgewogCQkJCUVSUigiZFREIGVycm9yICUwOHggUUg9JWRcbiIsIGVycm9ycywgcGlwZSk7CiAJCQkJLyogQ2xlYXIgdGhlIGVycm9ycyBhbmQgSGFsdCBjb25kaXRpb24gKi8KLQkJCQl0bXAgPSBsZTMyX3RvX2NwdShjdXJyX3FoLT5zaXplX2lvY19pbnRfc3RzKTsKKwkJCQl0bXAgPSBoYzMyX3RvX2NwdShjdXJyX3FoLT5zaXplX2lvY19pbnRfc3RzKTsKIAkJCQl0bXAgJj0gfmVycm9yczsKLQkJCQljdXJyX3FoLT5zaXplX2lvY19pbnRfc3RzID0gY3B1X3RvX2xlMzIodG1wKTsKKwkJCQljdXJyX3FoLT5zaXplX2lvY19pbnRfc3RzID0gY3B1X3RvX2hjMzIodG1wKTsKIAkJCQlzdGF0dXMgPSAtRVBJUEU7CiAJCQkJLyogRklYTUU6IGNvbnRpbnVlIHdpdGggbmV4dCBxdWV1ZWQgVEQ/ICovCiAKQEAgLTE0NjIsNyArMTYwNyw3IEBACiAJCQkJRVJSKCJVbmtub3duIGVycm9yIGhhcyBvY2N1cnJlZCAoMHgleCkhXG4iLAogCQkJCQllcnJvcnMpOwogCi0JCX0gZWxzZSBpZiAobGUzMl90b19jcHUoY3Vycl90ZC0+c2l6ZV9pb2Nfc3RzKQorCQl9IGVsc2UgaWYgKGhjMzJfdG9fY3B1KGN1cnJfdGQtPnNpemVfaW9jX3N0cykKIAkJCQkmIERURF9TVEFUVVNfQUNUSVZFKSB7CiAJCQlWREJHKCJSZXF1ZXN0IG5vdCBjb21wbGV0ZSIpOwogCQkJc3RhdHVzID0gUkVRX1VOQ09NUExFVEU7CkBAIC0xNTUxLDYgKzE2OTYsOSBAQAogewogCXUzMiBzcGVlZDsKIAorCWlmICh1ZGMtPmJ1c19yZXNldCkKKwkJdWRjLT5idXNfcmVzZXQgPSAwOworCiAJLyogQnVzIHJlc2V0dGluZyBpcyBmaW5pc2hlZCAqLwogCWlmICghKGZzbF9yZWFkbCgmZHJfcmVncy0+cG9ydHNjMSkgJiBQT1JUU0NYX1BPUlRfUkVTRVQpKSB7CiAJCS8qIEdldCB0aGUgc3BlZWQgKi8KQEAgLTE2NTgsNiArMTgwNiw4IEBACiAKIAlpZiAoZnNsX3JlYWRsKCZkcl9yZWdzLT5wb3J0c2MxKSAmIFBPUlRTQ1hfUE9SVF9SRVNFVCkgewogCQlWREJHKCJCdXMgcmVzZXQiKTsKKwkJLyogQnVzIGlzIHJlc2V0aW5nICovCisJCXVkYy0+YnVzX3Jlc2V0ID0gMTsKIAkJLyogUmVzZXQgYWxsIHRoZSBxdWV1ZXMsIGluY2x1ZGUgWEQsIGRURCwgRVAgcXVldWUKIAkJICogaGVhZCBhbmQgVFIgUXVldWUgKi8KIAkJcmVzZXRfcXVldWVzKHVkYyk7CkBAIC0xNzM1LDYgKzE4ODUsNyBAQAogCiAJLyogUmVzZXQgUmVjZWl2ZWQgKi8KIAlpZiAoaXJxX3NyYyAmIFVTQl9TVFNfUkVTRVQpIHsKKwkJVkRCRygicmVzZXQgaW50Iik7CiAJCXJlc2V0X2lycSh1ZGMpOwogCQlzdGF0dXMgPSBJUlFfSEFORExFRDsKIAl9CkBAIC0xNzkyLDExICsxOTQzLDMwIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCS8qIEVuYWJsZSBEUiBJUlEgcmVnIGFuZCBTZXQgdXNiY21kIHJlZyAgUnVuIGJpdCAqLwotCWRyX2NvbnRyb2xsZXJfcnVuKHVkY19jb250cm9sbGVyKTsKLQl1ZGNfY29udHJvbGxlci0+dXNiX3N0YXRlID0gVVNCX1NUQVRFX0FUVEFDSEVEOwotCXVkY19jb250cm9sbGVyLT5lcDBfc3RhdGUgPSBXQUlUX0ZPUl9TRVRVUDsKLQl1ZGNfY29udHJvbGxlci0+ZXAwX2RpciA9IDA7CisJaWYgKHVkY19jb250cm9sbGVyLT50cmFuc2NlaXZlcikgeworCQkvKiBTdXNwZW5kIHRoZSBjb250cm9sbGVyIHVudGlsIE9URyBlbmFibGUgaXQgKi8KKwkJdWRjX2NvbnRyb2xsZXItPnN0b3BwZWQgPSAxOworCQlwcmludGsoS0VSTl9JTkZPICJTdXNwZW5kIHVkYyBmb3IgT1RHIGF1dG8gZGV0ZWN0XG4iKTsKKworCQkvKiBjb25uZWN0IHRvIGJ1cyB0aHJvdWdoIHRyYW5zY2VpdmVyICovCisJCWlmICh1ZGNfY29udHJvbGxlci0+dHJhbnNjZWl2ZXIpIHsKKwkJCXJldHZhbCA9IG90Z19zZXRfcGVyaXBoZXJhbCh1ZGNfY29udHJvbGxlci0+dHJhbnNjZWl2ZXIsCisJCQkJCQkgICAgJnVkY19jb250cm9sbGVyLT5nYWRnZXQpOworCQkJaWYgKHJldHZhbCA8IDApIHsKKwkJCQlFUlIoImNhbid0IGJpbmQgdG8gdHJhbnNjZWl2ZXJcbiIpOworCQkJCWRyaXZlci0+dW5iaW5kKCZ1ZGNfY29udHJvbGxlci0+Z2FkZ2V0KTsKKwkJCQl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5kcml2ZXIgPSAwOworCQkJCXVkY19jb250cm9sbGVyLT5kcml2ZXIgPSAwOworCQkJCXJldHVybiByZXR2YWw7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQkvKiBFbmFibGUgRFIgSVJRIHJlZyBhbmQgc2V0IFVTQkNNRCByZWcgUnVuIGJpdCAqLworCQlkcl9jb250cm9sbGVyX3J1bih1ZGNfY29udHJvbGxlcik7CisJCXVkY19jb250cm9sbGVyLT51c2Jfc3RhdGUgPSBVU0JfU1RBVEVfQVRUQUNIRUQ7CisJCXVkY19jb250cm9sbGVyLT5lcDBfc3RhdGUgPSBXQUlUX0ZPUl9TRVRVUDsKKwkJdWRjX2NvbnRyb2xsZXItPmVwMF9kaXIgPSAwOworCX0KIAlwcmludGsoS0VSTl9JTkZPICIlczogYmluZCB0byBkcml2ZXIgJXNcbiIsCiAJCQl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0Lm5hbWUsIGRyaXZlci0+ZHJpdmVyLm5hbWUpOwogCkBAIC0yMDQ0LDE2ICsyMjE0LDE4IEBACiAJbmV4dCArPSB0OwogCiAjaWZuZGVmIENPTkZJR19BUkNIX01YQwotCXRtcF9yZWcgPSB1c2Jfc3lzX3JlZ3MtPnNub29wMTsKLQl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsICJTbm9vcDEgUmVnIDogPSBbMHgleF1cblxuIiwgdG1wX3JlZyk7Ci0Jc2l6ZSAtPSB0OwotCW5leHQgKz0gdDsKKwlpZiAodWRjLT5wZGF0YS0+aGF2ZV9zeXNpZl9yZWdzKSB7CisJCXRtcF9yZWcgPSB1c2Jfc3lzX3JlZ3MtPnNub29wMTsKKwkJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLCAiU25vb3AxIFJlZyA6ID0gWzB4JXhdXG5cbiIsIHRtcF9yZWcpOworCQlzaXplIC09IHQ7CisJCW5leHQgKz0gdDsKIAotCXRtcF9yZWcgPSB1c2Jfc3lzX3JlZ3MtPmNvbnRyb2w7Ci0JdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLCAiR2VuZXJhbCBDb250cm9sIFJlZyA6ID0gWzB4JXhdXG5cbiIsCi0JCQl0bXBfcmVnKTsKLQlzaXplIC09IHQ7Ci0JbmV4dCArPSB0OworCQl0bXBfcmVnID0gdXNiX3N5c19yZWdzLT5jb250cm9sOworCQl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsICJHZW5lcmFsIENvbnRyb2wgUmVnIDogPSBbMHgleF1cblxuIiwKKwkJCQl0bXBfcmVnKTsKKwkJc2l6ZSAtPSB0OworCQluZXh0ICs9IHQ7CisJfQogI2VuZGlmCiAKIAkvKiAtLS0tLS1mc2xfdWRjLCBmc2xfZXAsIGZzbF9yZXF1ZXN0IHN0cnVjdHVyZSBpbmZvcm1hdGlvbiAtLS0tLSAqLwpAQCAtMjIzMyw2ICsyNDA1LDcgQEAKICAqLwogc3RhdGljIGludCBfX2luaXQgZnNsX3VkY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogeworCXN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgcmV0ID0gLUVOT0RFVjsKIAl1bnNpZ25lZCBpbnQgaTsKQEAgLTIyNDksMjAgKzI0MjIsMzUgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwl1ZGNfY29udHJvbGxlci0+cGRhdGEgPSBwZGF0YTsKIAlzcGluX2xvY2tfaW5pdCgmdWRjX2NvbnRyb2xsZXItPmxvY2spOwogCXVkY19jb250cm9sbGVyLT5zdG9wcGVkID0gMTsKIAorI2lmZGVmIENPTkZJR19VU0JfT1RHCisJaWYgKHBkYXRhLT5vcGVyYXRpbmdfbW9kZSA9PSBGU0xfVVNCMl9EUl9PVEcpIHsKKwkJdWRjX2NvbnRyb2xsZXItPnRyYW5zY2VpdmVyID0gb3RnX2dldF90cmFuc2NlaXZlcigpOworCQlpZiAoIXVkY19jb250cm9sbGVyLT50cmFuc2NlaXZlcikgeworCQkJRVJSKCJDYW4ndCBmaW5kIE9URyBkcml2ZXIhXG4iKTsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlnb3RvIGVycl9rZnJlZTsKKwkJfQorCX0KKyNlbmRpZgorCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIXJlcykgewogCQlyZXQgPSAtRU5YSU87CiAJCWdvdG8gZXJyX2tmcmVlOwogCX0KIAotCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsCi0JCQkJZHJpdmVyX25hbWUpKSB7Ci0JCUVSUigicmVxdWVzdCBtZW0gcmVnaW9uIGZvciAlcyBmYWlsZWRcbiIsIHBkZXYtPm5hbWUpOwotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gZXJyX2tmcmVlOworCWlmIChwZGF0YS0+b3BlcmF0aW5nX21vZGUgPT0gRlNMX1VTQjJfRFJfREVWSUNFKSB7CisJCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsCisJCQkJCWRyaXZlcl9uYW1lKSkgeworCQkJRVJSKCJyZXF1ZXN0IG1lbSByZWdpb24gZm9yICVzIGZhaWxlZFxuIiwgcGRldi0+bmFtZSk7CisJCQlyZXQgPSAtRUJVU1k7CisJCQlnb3RvIGVycl9rZnJlZTsKKwkJfQogCX0KIAogCWRyX3JlZ3MgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CkBAIC0yMjcxLDkgKzI0NTksMjkgQEAKIAkJZ290byBlcnJfcmVsZWFzZV9tZW1fcmVnaW9uOwogCX0KIAorCXBkYXRhLT5yZWdzID0gKHZvaWQgKilkcl9yZWdzOworCisJLyoKKwkgKiBkbyBwbGF0Zm9ybSBzcGVjaWZpYyBpbml0OiBjaGVjayB0aGUgY2xvY2ssIGdyYWIvY29uZmlnIHBpbnMsIGV0Yy4KKwkgKi8KKwlpZiAocGRhdGEtPmluaXQgJiYgcGRhdGEtPmluaXQocGRldikpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJfaW91bm1hcF9ub2NsazsKKwl9CisKKwkvKiBTZXQgYWNjZXNzb3JzIG9ubHkgYWZ0ZXIgcGRhdGEtPmluaXQoKSAhICovCisJaWYgKHBkYXRhLT5iaWdfZW5kaWFuX21taW8pIHsKKwkJX2ZzbF9yZWFkbCA9IF9mc2xfcmVhZGxfYmU7CisJCV9mc2xfd3JpdGVsID0gX2ZzbF93cml0ZWxfYmU7CisJfSBlbHNlIHsKKwkJX2ZzbF9yZWFkbCA9IF9mc2xfcmVhZGxfbGU7CisJCV9mc2xfd3JpdGVsID0gX2ZzbF93cml0ZWxfbGU7CisJfQorCiAjaWZuZGVmIENPTkZJR19BUkNIX01YQwotCXVzYl9zeXNfcmVncyA9IChzdHJ1Y3QgdXNiX3N5c19pbnRlcmZhY2UgKikKLQkJCSgodTMyKWRyX3JlZ3MgKyBVU0JfRFJfU1lTX09GRlNFVCk7CisJaWYgKHBkYXRhLT5oYXZlX3N5c2lmX3JlZ3MpCisJCXVzYl9zeXNfcmVncyA9IChzdHJ1Y3QgdXNiX3N5c19pbnRlcmZhY2UgKikKKwkJCQkoKHUzMilkcl9yZWdzICsgVVNCX0RSX1NZU19PRkZTRVQpOwogI2VuZGlmCiAKIAkvKiBJbml0aWFsaXplIFVTQiBjbG9ja3MgKi8KQEAgLTIzMTMsOSArMjUyMSwxMSBAQAogCQlnb3RvIGVycl9mcmVlX2lycTsKIAl9CiAKLQkvKiBpbml0aWFsaXplIHVzYiBodyByZWcgZXhjZXB0IGZvciByZWdzIGZvciBFUCwKLQkgKiBsZWF2ZSB1c2JpbnRyIHJlZyB1bnRvdWNoZWQgKi8KLQlkcl9jb250cm9sbGVyX3NldHVwKHVkY19jb250cm9sbGVyKTsKKwlpZiAoIXVkY19jb250cm9sbGVyLT50cmFuc2NlaXZlcikgeworCQkvKiBpbml0aWFsaXplIHVzYiBodyByZWcgZXhjZXB0IGZvciByZWdzIGZvciBFUCwKKwkJICogbGVhdmUgdXNiaW50ciByZWcgdW50b3VjaGVkICovCisJCWRyX2NvbnRyb2xsZXJfc2V0dXAodWRjX2NvbnRyb2xsZXIpOworCX0KIAogCWZzbF91ZGNfY2xrX2ZpbmFsaXplKHBkZXYpOwogCkBAIC0yMzM1LDYgKzI1NDUsOSBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9mcmVlX2lycTsKIAorCWlmICh1ZGNfY29udHJvbGxlci0+dHJhbnNjZWl2ZXIpCisJCXVkY19jb250cm9sbGVyLT5nYWRnZXQuaXNfb3RnID0gMTsKKwogCS8qIHNldHVwIFFIIGFuZCBlcGN0cmwgZm9yIGVwMCAqLwogCWVwMF9zZXR1cCh1ZGNfY29udHJvbGxlcik7CiAKQEAgLTIzNzMsMTEgKzI1ODYsMTQgQEAKIGVycl9mcmVlX2lycToKIAlmcmVlX2lycSh1ZGNfY29udHJvbGxlci0+aXJxLCB1ZGNfY29udHJvbGxlcik7CiBlcnJfaW91bm1hcDoKKwlpZiAocGRhdGEtPmV4aXQpCisJCXBkYXRhLT5leGl0KHBkZXYpOwogCWZzbF91ZGNfY2xrX3JlbGVhc2UoKTsKIGVycl9pb3VubWFwX25vY2xrOgogCWlvdW5tYXAoZHJfcmVncyk7CiBlcnJfcmVsZWFzZV9tZW1fcmVnaW9uOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlpZiAocGRhdGEtPm9wZXJhdGluZ19tb2RlID09IEZTTF9VU0IyX0RSX0RFVklDRSkKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOwogZXJyX2tmcmVlOgogCWtmcmVlKHVkY19jb250cm9sbGVyKTsKIAl1ZGNfY29udHJvbGxlciA9IE5VTEw7CkBAIC0yMzkwLDYgKzI2MDYsNyBAQAogc3RhdGljIGludCBfX2V4aXQgZnNsX3VkY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKIAlERUNMQVJFX0NPTVBMRVRJT04oZG9uZSk7CiAKQEAgLTI0MTAsMTIgKzI2MjcsMjAgQEAKIAlkbWFfcG9vbF9kZXN0cm95KHVkY19jb250cm9sbGVyLT50ZF9wb29sKTsKIAlmcmVlX2lycSh1ZGNfY29udHJvbGxlci0+aXJxLCB1ZGNfY29udHJvbGxlcik7CiAJaW91bm1hcChkcl9yZWdzKTsKLQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJaWYgKHBkYXRhLT5vcGVyYXRpbmdfbW9kZSA9PSBGU0xfVVNCMl9EUl9ERVZJQ0UpCisJCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKIAogCWRldmljZV91bnJlZ2lzdGVyKCZ1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldik7CiAJLyogZnJlZSB1ZGMgLS13YWl0IGZvciB0aGUgcmVsZWFzZSgpIGZpbmlzaGVkICovCiAJd2FpdF9mb3JfY29tcGxldGlvbigmZG9uZSk7CiAKKwkvKgorCSAqIGRvIHBsYXRmb3JtIHNwZWNpZmljIHVuLWluaXRpYWxpemF0aW9uOgorCSAqIHJlbGVhc2UgaW9tdXggcGlucywgZXRjLgorCSAqLworCWlmIChwZGF0YS0+ZXhpdCkKKwkJcGRhdGEtPmV4aXQocGRldik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjQ0Niw2ICsyNjcxLDYyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZnNsX3VkY19vdGdfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgZnNsX3VkYyAqdWRjID0gdWRjX2NvbnRyb2xsZXI7CisJdTMyIG1vZGUsIHVzYmNtZDsKKworCW1vZGUgPSBmc2xfcmVhZGwoJmRyX3JlZ3MtPnVzYm1vZGUpICYgVVNCX01PREVfQ1RSTF9NT0RFX01BU0s7CisKKwlwcl9kZWJ1ZygiJXMoKTogbW9kZSAweCV4IHN0b3BwZWQgJWRcbiIsIF9fZnVuY19fLCBtb2RlLCB1ZGMtPnN0b3BwZWQpOworCisJLyoKKwkgKiBJZiB0aGUgY29udHJvbGxlciBpcyBhbHJlYWR5IHN0b3BwZWQsIHRoZW4gdGhpcyBtdXN0IGJlIGEKKwkgKiBQTSBzdXNwZW5kLiAgUmVtZW1iZXIgdGhpcyBmYWN0LCBzbyB0aGF0IHdlIHdpbGwgbGVhdmUgdGhlCisJICogY29udHJvbGxlciBzdG9wcGVkIGF0IFBNIHJlc3VtZSB0aW1lLgorCSAqLworCWlmICh1ZGMtPnN0b3BwZWQpIHsKKwkJcHJfZGVidWcoImdhZGdldCBhbHJlYWR5IHN0b3BwZWQsIGxlYXZpbmcgZWFybHlcbiIpOworCQl1ZGMtPmFscmVhZHlfc3RvcHBlZCA9IDE7CisJCXJldHVybiAwOworCX0KKworCWlmIChtb2RlICE9IFVTQl9NT0RFX0NUUkxfTU9ERV9ERVZJQ0UpIHsKKwkJcHJfZGVidWcoImdhZGdldCBub3QgaW4gZGV2aWNlIG1vZGUsIGxlYXZpbmcgZWFybHlcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBzdG9wIHRoZSBjb250cm9sbGVyICovCisJdXNiY21kID0gZnNsX3JlYWRsKCZkcl9yZWdzLT51c2JjbWQpICYgflVTQl9DTURfUlVOX1NUT1A7CisJZnNsX3dyaXRlbCh1c2JjbWQsICZkcl9yZWdzLT51c2JjbWQpOworCisJdWRjLT5zdG9wcGVkID0gMTsKKworCXByX2luZm8oIlVTQiBHYWRnZXQgc3VzcGVuZGVkXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZzbF91ZGNfb3RnX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcHJfZGVidWcoIiVzKCk6IHN0b3BwZWQgJWQgIGFscmVhZHlfc3RvcHBlZCAlZFxuIiwgX19mdW5jX18sCisJCSB1ZGNfY29udHJvbGxlci0+c3RvcHBlZCwgdWRjX2NvbnRyb2xsZXItPmFscmVhZHlfc3RvcHBlZCk7CisKKwkvKgorCSAqIElmIHRoZSBjb250cm9sbGVyIHdhcyBzdG9wcGVkIGF0IHN1c3BlbmQgdGltZSwgdGhlbgorCSAqIGRvbid0IHJlc3VtZSBpdCBub3cuCisJICovCisJaWYgKHVkY19jb250cm9sbGVyLT5hbHJlYWR5X3N0b3BwZWQpIHsKKwkJdWRjX2NvbnRyb2xsZXItPmFscmVhZHlfc3RvcHBlZCA9IDA7CisJCXByX2RlYnVnKCJnYWRnZXQgd2FzIGFscmVhZHkgc3RvcHBlZCwgbGVhdmluZyBlYXJseVxuIik7CisJCXJldHVybiAwOworCX0KKworCXByX2luZm8oIlVTQiBHYWRnZXQgcmVzdW1lXG4iKTsKKworCXJldHVybiBmc2xfdWRjX3Jlc3VtZShOVUxMKTsKK30KKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJUmVnaXN0ZXIgZW50cnkgcG9pbnQgZm9yIHRoZSBwZXJpcGhlcmFsIGNvbnRyb2xsZXIgZHJpdmVyCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0yNDU4LDYgKzI3MzksOSBAQAogCS5kcml2ZXIgID0gewogCQkubmFtZSA9IChjaGFyICopZHJpdmVyX25hbWUsCiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkvKiB1ZGMgc3VzcGVuZC9yZXN1bWUgY2FsbGVkIGZyb20gT1RHIGRyaXZlciAqLworCQkuc3VzcGVuZCA9IGZzbF91ZGNfb3RnX3N1c3BlbmQsCisJCS5yZXN1bWUgID0gZnNsX3VkY19vdGdfcmVzdW1lLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VzYjJfdWRjLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VzYjJfdWRjLmgKaW5kZXggZTg4Y2NlNS4uMWQ1MWJlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91c2IyX3VkYy5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuaApAQCAtMjc1LDcgKzI3NSw5IEBACiAjZGVmaW5lICBVU0JfTU9ERV9DVFJMX01PREVfSURMRSAgICAgICAgICAgICAgMHgwMDAwMDAwMAogI2RlZmluZSAgVVNCX01PREVfQ1RSTF9NT0RFX0RFVklDRSAgICAgICAgICAgIDB4MDAwMDAwMDIKICNkZWZpbmUgIFVTQl9NT0RFX0NUUkxfTU9ERV9IT1NUICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lICBVU0JfTU9ERV9DVFJMX01PREVfTUFTSyAgICAgICAgICAgICAgMHgwMDAwMDAwMwogI2RlZmluZSAgVVNCX01PREVfQ1RSTF9NT0RFX1JTViAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgIFVTQl9NT0RFX0VTICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0IC8qIEVuZGlhbiBTZWxlY3QgKi8KICNkZWZpbmUgIFVTQl9NT0RFX1NFVFVQX0xPQ0tfT0ZGICAgICAgICAgICAgICAweDAwMDAwMDA4CiAjZGVmaW5lICBVU0JfTU9ERV9TVFJFQU1fRElTQUJMRSAgICAgICAgICAgICAgMHgwMDAwMDAxMAogLyogRW5kcG9pbnQgRmx1c2ggUmVnaXN0ZXIgKi8KQEAgLTQ2MSw2ICs0NjMsNyBAQAogc3RydWN0IGZzbF91ZGMgewogCXN0cnVjdCB1c2JfZ2FkZ2V0IGdhZGdldDsKIAlzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcjsKKwlzdHJ1Y3QgZnNsX3VzYjJfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CiAJc3RydWN0IGNvbXBsZXRpb24gKmRvbmU7CS8qIHRvIG1ha2Ugc3VyZSByZWxlYXNlKCkgaXMgZG9uZSAqLwogCXN0cnVjdCBmc2xfZXAgKmVwczsKIAl1bnNpZ25lZCBpbnQgbWF4X2VwOwpAQCAtNDczLDYgKzQ3Niw4IEBACiAJdW5zaWduZWQgdmJ1c19hY3RpdmU6MTsKIAl1bnNpZ25lZCBzdG9wcGVkOjE7CiAJdW5zaWduZWQgcmVtb3RlX3dha2V1cDoxOworCXVuc2lnbmVkIGFscmVhZHlfc3RvcHBlZDoxOworCXVuc2lnbmVkIGJpZ19lbmRpYW5fZGVzYzoxOwogCiAJc3RydWN0IGVwX3F1ZXVlX2hlYWQgKmVwX3FoOwkvKiBFbmRwb2ludHMgUXVldWUtSGVhZCAqLwogCXN0cnVjdCBmc2xfcmVxICpzdGF0dXNfcmVxOwkvKiBlcDAgc3RhdHVzIHJlcXVlc3QgKi8KQEAgLTQ4Myw2ICs0ODgsNyBAQAogCWRtYV9hZGRyX3QgZXBfcWhfZG1hOwkJLyogZG1hIGFkZHJlc3Mgb2YgUUggKi8KIAogCXUzMiBtYXhfcGlwZXM7ICAgICAgICAgIC8qIERldmljZSBtYXggcGlwZXMgKi8KKwl1MzIgYnVzX3Jlc2V0OwkJLyogRGV2aWNlIGlzIGJ1cyByZXNldHRpbmcgKi8KIAl1MzIgcmVzdW1lX3N0YXRlOwkvKiBVU0Igc3RhdGUgdG8gcmVzdW1lICovCiAJdTMyIHVzYl9zdGF0ZTsJCS8qIFVTQiBjdXJyZW50IHN0YXRlICovCiAJdTMyIGVwMF9zdGF0ZTsJCS8qIEVuZHBvaW50IHplcm8gc3RhdGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9nYWRnZXRfY2hpcHMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9nYWRnZXRfY2hpcHMuaAppbmRleCBlODk2ZjYzLi5iY2RhYzdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ2FkZ2V0X2NoaXBzLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dhZGdldF9jaGlwcy5oCkBAIC0xMzYsNiArMTM2LDEyIEBACiAjZGVmaW5lIGdhZGdldF9pc19zM2NfaHNvdGcoZykgICAgMAogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfVVNCX1MzQ19IU1VEQworI2RlZmluZSBnYWRnZXRfaXNfczNjX2hzdWRjKGcpICghc3RyY21wKCJzM2MtaHN1ZGMiLCAoZyktPm5hbWUpKQorI2Vsc2UKKyNkZWZpbmUgZ2FkZ2V0X2lzX3MzY19oc3VkYyhnKSAwCisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0VHMjBUCiAjZGVmaW5lCWdhZGdldF9pc19wY2goZykJKCFzdHJjbXAoInBjaF91ZGMiLCAoZyktPm5hbWUpKQogI2Vsc2UKQEAgLTE0OCw2ICsxNTQsMTIgQEAKICNkZWZpbmUgZ2FkZ2V0X2lzX2NpMTN4eHhfbXNtKGcpCTAKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfUkVORVNBU19VU0JIUworI2RlZmluZQlnYWRnZXRfaXNfcmVuZXNhc191c2JocyhnKSAoIXN0cmNtcCgicmVuZXNhc191c2Joc191ZGMiLCAoZyktPm5hbWUpKQorI2Vsc2UKKyNkZWZpbmUJZ2FkZ2V0X2lzX3JlbmVzYXNfdXNiaHMoZykgMAorI2VuZGlmCisKIC8qKgogICogdXNiX2dhZGdldF9jb250cm9sbGVyX251bWJlciAtIHN1cHBvcnQgYmNkRGV2aWNlIGlkIGNvbnZlbnRpb24KICAqIEBnYWRnZXQ6IHRoZSBjb250cm9sbGVyIGJlaW5nIGRyaXZlbgpAQCAtMjA3LDYgKzIxOSwxMSBAQAogCQlyZXR1cm4gMHgyNzsKIAllbHNlIGlmIChnYWRnZXRfaXNfY2kxM3h4eF9tc20oZ2FkZ2V0KSkKIAkJcmV0dXJuIDB4Mjg7CisJZWxzZSBpZiAoZ2FkZ2V0X2lzX3JlbmVzYXNfdXNiaHMoZ2FkZ2V0KSkKKwkJcmV0dXJuIDB4Mjk7CisJZWxzZSBpZiAoZ2FkZ2V0X2lzX3MzY19oc3VkYyhnYWRnZXQpKQorCQlyZXR1cm4gMHgzMDsKKwogCXJldHVybiAtRU5PRU5UOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jCmluZGV4IDQ4YTc2MDIuLmJmNmUxMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2NoOS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9nYWRnZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lteF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmMKaW5kZXggNTQwODE4Ni4uYWRlNDAwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lteF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAjaW5jbHVkZSA8bGludXgvdXNiL2NoOS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9nYWRnZXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L29tYXBfdWRjLmMKaW5kZXggY2I1Y2Q0Mi4uODJmZDI0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L29tYXBfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L29tYXBfdWRjLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMKaW5kZXggYzNmMmJkNC4uMjcxZWY5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jCkBAIC0xMTg5LDYgKzExODksOCBAQAogCQkJZWxzZSBpZiAoZ2FkZ2V0LT5hX2FsdF9obnBfc3VwcG9ydCkKIAkJCQlEQkcoZGV2LCAiSE5QIG5lZWRzIGEgZGlmZmVyZW50IHJvb3QgcG9ydFxuIik7CiAJCQl2YWx1ZSA9IHByaW50ZXJfc2V0X2NvbmZpZyhkZXYsIHdWYWx1ZSk7CisJCQlpZiAoIXZhbHVlKQorCQkJCXZhbHVlID0gc2V0X2ludGVyZmFjZShkZXYsIFBSSU5URVJfSU5URVJGQUNFKTsKIAkJCWJyZWFrOwogCQljYXNlIFVTQl9SRVFfR0VUX0NPTkZJR1VSQVRJT046CiAJCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IFVTQl9ESVJfSU4pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjV4X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI1eF91ZGMuYwppbmRleCA0NDRiNjBhLi4zNjVjMDJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjV4X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyNXhfdWRjLmMKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmMKaW5kZXggNzhhMzlhNC4uNTc2MDc2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MtaHNvdGcuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MtaHNvdGcuYwppbmRleCAwOTEyNjc5Li5hY2I5Y2M0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvczNjLWhzb3RnLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc290Zy5jCkBAIC0xLDUgKzEsOCBAQAogLyogbGludXgvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc290Zy5jCiAgKgorICogQ29weXJpZ2h0IChjKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbQorICoKICAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCiAgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKICAqICAgICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgpAQCAtNjEzLDExICs2MTYsMTAgQEAKIAkJbWF4cGt0ID0gUzNDX0R4RVBUU0laX1BrdENudF9MSU1JVCArIDE7CiAJfSBlbHNlIHsKIAkJbWF4c2l6ZSA9IDY0KzY0OwotCQlpZiAoaHNfZXAtPmRpcl9pbikgeworCQlpZiAoaHNfZXAtPmRpcl9pbikKIAkJCW1heHBrdCA9IFMzQ19ESUVQVFNJWjBfUGt0Q250X0xJTUlUICsgMTsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJbWF4cGt0ID0gMjsKLQkJfQogCX0KIAogCS8qIHdlIG1hZGUgdGhlIGNvbnN0YW50IGxvYWRpbmcgZWFzaWVyIGFib3ZlIGJ5IHVzaW5nICsxICovCkBAIC02NzksNiArNjgxLDE0IEBACiAJCV9fZnVuY19fLCByZWFkbChoc290Zy0+cmVncyArIGVwY3RybF9yZWcpLCBpbmRleCwKIAkJaHNfZXAtPmRpcl9pbiA/ICJpbiIgOiAib3V0Iik7CiAKKwkvKiBJZiBlbmRwb2ludCBpcyBzdGFsbGVkLCB3ZSB3aWxsIHJlc3RhcnQgcmVxdWVzdCBsYXRlciAqLworCWN0cmwgPSByZWFkbChoc290Zy0+cmVncyArIGVwY3RybF9yZWcpOworCisJaWYgKGN0cmwgJiBTM0NfRHhFUENUTF9TdGFsbCkgeworCQlkZXZfd2Fybihoc290Zy0+ZGV2LCAiJXM6IGVwJWQgaXMgc3RhbGxlZFxuIiwgX19mdW5jX18sIGluZGV4KTsKKwkJcmV0dXJuOworCX0KKwogCWxlbmd0aCA9IHVyZXEtPmxlbmd0aCAtIHVyZXEtPmFjdHVhbDsKIAogCWlmICgwKQpAQCAtNzMxLDE4ICs3NDEsNiBAQAogCS8qIHdyaXRlIHNpemUgLyBwYWNrZXRzICovCiAJd3JpdGVsKGVwc2l6ZSwgaHNvdGctPnJlZ3MgKyBlcHNpemVfcmVnKTsKIAotCWN0cmwgPSByZWFkbChoc290Zy0+cmVncyArIGVwY3RybF9yZWcpOwotCi0JaWYgKGN0cmwgJiBTM0NfRHhFUENUTF9TdGFsbCkgewotCQlkZXZfd2Fybihoc290Zy0+ZGV2LCAiJXM6IGVwJWQgaXMgc3RhbGxlZFxuIiwgX19mdW5jX18sIGluZGV4KTsKLQotCQkvKiBub3Qgc3VyZSB3aGF0IHdlIGNhbiBkbyBoZXJlLCBpZiBpdCBpcyBFUDAgdGhlbiB3ZSBzaG91bGQKLQkJICogZ2V0IHRoaXMgY2xlYXJlZCBvbmNlIHRoZSBlbmRwb2ludCBoYXMgdHJhbnNtaXR0ZWQgdGhlCi0JCSAqIFNUQUxMIHBhY2tldCwgb3RoZXJ3aXNlIGl0IG5lZWRzIHRvIGJlIGNsZWFyZWQgYnkgdGhlCi0JCSAqIGhvc3QuCi0JCSAqLwotCX0KLQogCWlmICh1c2luZ19kbWEoaHNvdGcpKSB7CiAJCXVuc2lnbmVkIGludCBkbWFfcmVnOwogCkBAIC0xMDQ4LDYgKzEwNDYsMjAgQEAKIHN0YXRpYyBpbnQgczNjX2hzb3RnX2VwX3NldGhhbHQoc3RydWN0IHVzYl9lcCAqZXAsIGludCB2YWx1ZSk7CiAKIC8qKgorICogZ2V0X2VwX2hlYWQgLSByZXR1cm4gdGhlIGZpcnN0IHJlcXVlc3Qgb24gdGhlIGVuZHBvaW50CisgKiBAaHNfZXA6IFRoZSBjb250cm9sbGVyIGVuZHBvaW50IHRvIGdldAorICoKKyAqIEdldCB0aGUgZmlyc3QgcmVxdWVzdCBvbiB0aGUgZW5kcG9pbnQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgczNjX2hzb3RnX3JlcSAqZ2V0X2VwX2hlYWQoc3RydWN0IHMzY19oc290Z19lcCAqaHNfZXApCit7CisJaWYgKGxpc3RfZW1wdHkoJmhzX2VwLT5xdWV1ZSkpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGxpc3RfZmlyc3RfZW50cnkoJmhzX2VwLT5xdWV1ZSwgc3RydWN0IHMzY19oc290Z19yZXEsIHF1ZXVlKTsKK30KKworLyoqCiAgKiBzM2NfaHNvdGdfcHJvY2Vzc19yZXFfZmVhdGlyZSAtIHByb2Nlc3MgcmVxdWVzdCB7U0VULENMRUFSfV9GRUFUVVJFCiAgKiBAaHNvdGc6IFRoZSBkZXZpY2Ugc3RhdGUKICAqIEBjdHJsOiBVU0IgY29udHJvbCByZXF1ZXN0CkBAIC0xMDU1LDggKzEwNjcsMTIgQEAKIHN0YXRpYyBpbnQgczNjX2hzb3RnX3Byb2Nlc3NfcmVxX2ZlYXR1cmUoc3RydWN0IHMzY19oc290ZyAqaHNvdGcsCiAJCQkJCSBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJsKQogeworCXN0cnVjdCBzM2NfaHNvdGdfZXAgKmVwMCA9ICZoc290Zy0+ZXBzWzBdOworCXN0cnVjdCBzM2NfaHNvdGdfcmVxICpoc19yZXE7CisJYm9vbCByZXN0YXJ0OwogCWJvb2wgc2V0ID0gKGN0cmwtPmJSZXF1ZXN0ID09IFVTQl9SRVFfU0VUX0ZFQVRVUkUpOwogCXN0cnVjdCBzM2NfaHNvdGdfZXAgKmVwOworCWludCByZXQ7CiAKIAlkZXZfZGJnKGhzb3RnLT5kZXYsICIlczogJXNfRkVBVFVSRVxuIiwKIAkJX19mdW5jX18sIHNldCA/ICJTRVQiIDogIkNMRUFSIik7CkBAIC0xMDcyLDYgKzEwODgsMzYgQEAKIAkJc3dpdGNoIChsZTE2X3RvX2NwdShjdHJsLT53VmFsdWUpKSB7CiAJCWNhc2UgVVNCX0VORFBPSU5UX0hBTFQ6CiAJCQlzM2NfaHNvdGdfZXBfc2V0aGFsdCgmZXAtPmVwLCBzZXQpOworCisJCQlyZXQgPSBzM2NfaHNvdGdfc2VuZF9yZXBseShoc290ZywgZXAwLCBOVUxMLCAwKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlkZXZfZXJyKGhzb3RnLT5kZXYsCisJCQkJCSIlczogZmFpbGVkIHRvIHNlbmQgcmVwbHlcbiIsIF9fZnVuY19fKTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCisJCQlpZiAoIXNldCkgeworCQkJCS8qCisJCQkJICogSWYgd2UgaGF2ZSByZXF1ZXN0IGluIHByb2dyZXNzLAorCQkJCSAqIHRoZW4gY29tcGxldGUgaXQKKwkJCQkgKi8KKwkJCQlpZiAoZXAtPnJlcSkgeworCQkJCQloc19yZXEgPSBlcC0+cmVxOworCQkJCQllcC0+cmVxID0gTlVMTDsKKwkJCQkJbGlzdF9kZWxfaW5pdCgmaHNfcmVxLT5xdWV1ZSk7CisJCQkJCWhzX3JlcS0+cmVxLmNvbXBsZXRlKCZlcC0+ZXAsCisJCQkJCQkJICAgICAmaHNfcmVxLT5yZXEpOworCQkJCX0KKworCQkJCS8qIElmIHdlIGhhdmUgcGVuZGluZyByZXF1ZXN0LCB0aGVuIHN0YXJ0IGl0ICovCisJCQkJcmVzdGFydCA9ICFsaXN0X2VtcHR5KCZlcC0+cXVldWUpOworCQkJCWlmIChyZXN0YXJ0KSB7CisJCQkJCWhzX3JlcSA9IGdldF9lcF9oZWFkKGVwKTsKKwkJCQkJczNjX2hzb3RnX3N0YXJ0X3JlcShoc290ZywgZXAsCisJCQkJCQkJICAgIGhzX3JlcSwgZmFsc2UpOworCQkJCX0KKwkJCX0KKwogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKQEAgLTExNDgsMTQgKzExOTQsNiBAQAogCQkJZGV2X2RiZyhoc290Zy0+ZGV2LCAiZHJpdmVyLT5zZXR1cCgpIHJldCAlZFxuIiwgcmV0KTsKIAl9CiAKLQlpZiAocmV0ID4gMCkgewotCQlpZiAoIWVwMC0+ZGlyX2luKSB7Ci0JCQkvKiBuZWVkIHRvIGdlbmVyYXRlIHpscCBpbiByZXBseSBvciB0YWtlIGRhdGEgKi8KLQkJCS8qIHRvZG8gLSBkZWFsIHdpdGggYW55IGRhdGEgd2UgbWlnaHQgYmUgc2VudD8gKi8KLQkJCXJldCA9IHMzY19oc290Z19zZW5kX3JlcGx5KGhzb3RnLCBlcDAsIE5VTEwsIDApOwotCQl9Ci0JfQotCiAJLyogdGhlIHJlcXVlc3QgaXMgZWl0aGVyIHVuaGFuZGxhYmxlLCBvciBpcyBub3QgZm9ybWF0dGVkIGNvcnJlY3RseQogCSAqIHNvIHJlc3BvbmQgd2l0aCBhIFNUQUxMIGZvciB0aGUgc3RhdHVzIHN0YWdlIHRvIGluZGljYXRlIGZhaWx1cmUuCiAJICovCkBAIC0xMjQ3LDIwICsxMjg1LDYgQEAKIH0KIAogLyoqCi0gKiBnZXRfZXBfaGVhZCAtIHJldHVybiB0aGUgZmlyc3QgcmVxdWVzdCBvbiB0aGUgZW5kcG9pbnQKLSAqIEBoc19lcDogVGhlIGNvbnRyb2xsZXIgZW5kcG9pbnQgdG8gZ2V0Ci0gKgotICogR2V0IHRoZSBmaXJzdCByZXF1ZXN0IG9uIHRoZSBlbmRwb2ludC4KLSovCi1zdGF0aWMgc3RydWN0IHMzY19oc290Z19yZXEgKmdldF9lcF9oZWFkKHN0cnVjdCBzM2NfaHNvdGdfZXAgKmhzX2VwKQotewotCWlmIChsaXN0X2VtcHR5KCZoc19lcC0+cXVldWUpKQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiBsaXN0X2ZpcnN0X2VudHJ5KCZoc19lcC0+cXVldWUsIHN0cnVjdCBzM2NfaHNvdGdfcmVxLCBxdWV1ZSk7Ci19Ci0KLS8qKgogICogczNjX2hzb3RnX2NvbXBsZXRlX3JlcXVlc3QgLSBjb21wbGV0ZSBhIHJlcXVlc3QgZ2l2ZW4gdG8gdXMKICAqIEBoc290ZzogVGhlIGRldmljZSBzdGF0ZS4KICAqIEBoc19lcDogVGhlIGVuZHBvaW50IHRoZSByZXF1ZXN0IHdhcyBvbi4KQEAgLTE2ODMsNiArMTcwNywzNyBAQAogCWRldl9lcnIoaHNvdGctPmRldiwgImVwJWQ6IGJhZCBtcHMgb2YgJWRcbiIsIGVwLCBtcHMpOwogfQogCisvKioKKyAqIHMzY19oc290Z190eGZpZm9fZmx1c2ggLSBmbHVzaCBUeCBGSUZPCisgKiBAaHNvdGc6IFRoZSBkcml2ZXIgc3RhdGUKKyAqIEBpZHg6IFRoZSBpbmRleCBmb3IgdGhlIGVuZHBvaW50ICgwLi4xNSkKKyAqLworc3RhdGljIHZvaWQgczNjX2hzb3RnX3R4Zmlmb19mbHVzaChzdHJ1Y3QgczNjX2hzb3RnICpoc290ZywgdW5zaWduZWQgaW50IGlkeCkKK3sKKwlpbnQgdGltZW91dDsKKwlpbnQgdmFsOworCisJd3JpdGVsKFMzQ19HUlNUQ1RMX1R4Rk51bShpZHgpIHwgUzNDX0dSU1RDVExfVHhGRmxzaCwKKwkJaHNvdGctPnJlZ3MgKyBTM0NfR1JTVENUTCk7CisKKwkvKiB3YWl0IHVudGlsIHRoZSBmaWZvIGlzIGZsdXNoZWQgKi8KKwl0aW1lb3V0ID0gMTAwOworCisJd2hpbGUgKDEpIHsKKwkJdmFsID0gcmVhZGwoaHNvdGctPnJlZ3MgKyBTM0NfR1JTVENUTCk7CisKKwkJaWYgKCh2YWwgJiAoUzNDX0dSU1RDVExfVHhGRmxzaCkpID09IDApCisJCQlicmVhazsKKworCQlpZiAoLS10aW1lb3V0ID09IDApIHsKKwkJCWRldl9lcnIoaHNvdGctPmRldiwKKwkJCQkiJXM6IHRpbWVvdXQgZmx1c2hpbmcgZmlmbyAoR1JTVENUTD0lMDh4KVxuIiwKKwkJCQlfX2Z1bmNfXywgdmFsKTsKKwkJfQorCisJCXVkZWxheSgxKTsKKwl9Cit9CiAKIC8qKgogICogczNjX2hzb3RnX3RyeXR4IC0gY2hlY2sgdG8gc2VlIGlmIGFueXRoaW5nIG5lZWRzIHRyYW5zbWl0dGluZwpAQCAtMTc3NSwxMCArMTgzMCwxMiBAQAogCXUzMiBlcGN0bF9yZWcgPSBkaXJfaW4gPyBTM0NfRElFUENUTChpZHgpIDogUzNDX0RPRVBDVEwoaWR4KTsKIAl1MzIgZXBzaXpfcmVnID0gZGlyX2luID8gUzNDX0RJRVBUU0laKGlkeCkgOiBTM0NfRE9FUFRTSVooaWR4KTsKIAl1MzIgaW50czsKLQl1MzIgY2xlYXIgPSAwOwogCiAJaW50cyA9IHJlYWRsKGhzb3RnLT5yZWdzICsgZXBpbnRfcmVnKTsKIAorCS8qIENsZWFyIGVuZHBvaW50IGludGVycnVwdHMgKi8KKwl3cml0ZWwoaW50cywgaHNvdGctPnJlZ3MgKyBlcGludF9yZWcpOworCiAJZGV2X2RiZyhoc290Zy0+ZGV2LCAiJXM6IGVwJWQoJXMpIER4RVBJTlQ9MHglMDh4XG4iLAogCQlfX2Z1bmNfXywgaWR4LCBkaXJfaW4gPyAiaW4iIDogIm91dCIsIGludHMpOwogCkBAIC0xODAxLDE5ICsxODU4LDI4IEBACiAKIAkJCXMzY19oc290Z19oYW5kbGVfb3V0ZG9uZShoc290ZywgaWR4LCBmYWxzZSk7CiAJCX0KLQotCQljbGVhciB8PSBTM0NfRHhFUElOVF9YZmVyQ29tcGw7CiAJfQogCiAJaWYgKGludHMgJiBTM0NfRHhFUElOVF9FUERpc2JsZCkgewogCQlkZXZfZGJnKGhzb3RnLT5kZXYsICIlczogRVBEaXNibGRcbiIsIF9fZnVuY19fKTsKLQkJY2xlYXIgfD0gUzNDX0R4RVBJTlRfRVBEaXNibGQ7CisKKwkJaWYgKGRpcl9pbikgeworCQkJaW50IGVwY3RsID0gcmVhZGwoaHNvdGctPnJlZ3MgKyBlcGN0bF9yZWcpOworCisJCQlzM2NfaHNvdGdfdHhmaWZvX2ZsdXNoKGhzb3RnLCBpZHgpOworCisJCQlpZiAoKGVwY3RsICYgUzNDX0R4RVBDVExfU3RhbGwpICYmCisJCQkJKGVwY3RsICYgUzNDX0R4RVBDVExfRVBUeXBlX0J1bGspKSB7CisJCQkJaW50IGRjdGwgPSByZWFkbChoc290Zy0+cmVncyArIFMzQ19EQ1RMKTsKKworCQkJCWRjdGwgfD0gUzNDX0RDVExfQ0dOUEluTkFLOworCQkJCXdyaXRlbChkY3RsLCBoc290Zy0+cmVncyArIFMzQ19EQ1RMKTsKKwkJCX0KKwkJfQogCX0KIAotCWlmIChpbnRzICYgUzNDX0R4RVBJTlRfQUhCRXJyKSB7CisJaWYgKGludHMgJiBTM0NfRHhFUElOVF9BSEJFcnIpCiAJCWRldl9kYmcoaHNvdGctPmRldiwgIiVzOiBBSEJFcnJcbiIsIF9fZnVuY19fKTsKLQkJY2xlYXIgfD0gUzNDX0R4RVBJTlRfQUhCRXJyOwotCX0KIAogCWlmIChpbnRzICYgUzNDX0R4RVBJTlRfU2V0dXApIHsgIC8qIFNldHVwIG9yIFRpbWVvdXQgKi8KIAkJZGV2X2RiZyhoc290Zy0+ZGV2LCAiJXM6IFNldHVwL1RpbWVvdXRcbiIsICBfX2Z1bmNfXyk7CkBAIC0xODI5LDE0ICsxODk1LDEwIEBACiAJCQllbHNlCiAJCQkJczNjX2hzb3RnX2hhbmRsZV9vdXRkb25lKGhzb3RnLCAwLCB0cnVlKTsKIAkJfQotCi0JCWNsZWFyIHw9IFMzQ19EeEVQSU5UX1NldHVwOwogCX0KIAotCWlmIChpbnRzICYgUzNDX0R4RVBJTlRfQmFjazJCYWNrU2V0dXApIHsKKwlpZiAoaW50cyAmIFMzQ19EeEVQSU5UX0JhY2syQmFja1NldHVwKQogCQlkZXZfZGJnKGhzb3RnLT5kZXYsICIlczogQjJCU2V0dXAvSU5FUE5ha0VmZlxuIiwgX19mdW5jX18pOwotCQljbGVhciB8PSBTM0NfRHhFUElOVF9CYWNrMkJhY2tTZXR1cDsKLQl9CiAKIAlpZiAoZGlyX2luKSB7CiAJCS8qIG5vdCBzdXJlIGlmIHRoaXMgaXMgaW1wb3J0YW50LCBidXQgd2UnbGwgY2xlYXIgaXQgYW55d2F5CkBAIC0xODQ0LDE0ICsxOTA2LDEyIEBACiAJCWlmIChpbnRzICYgUzNDX0RJRVBNU0tfSU5Ua25UWEZFbXBNc2spIHsKIAkJCWRldl9kYmcoaHNvdGctPmRldiwgIiVzOiBlcCVkOiBJTlRrblRYRkVtcE1za1xuIiwKIAkJCQlfX2Z1bmNfXywgaWR4KTsKLQkJCWNsZWFyIHw9IFMzQ19ESUVQTVNLX0lOVGtuVFhGRW1wTXNrOwogCQl9CiAKIAkJLyogdGhpcyBwcm9iYWJseSBtZWFucyBzb21ldGhpbmcgYmFkIGlzIGhhcHBlbmluZyAqLwogCQlpZiAoaW50cyAmIFMzQ19ESUVQTVNLX0lOVGtuRVBNaXNNc2spIHsKIAkJCWRldl93YXJuKGhzb3RnLT5kZXYsICIlczogZXAlZDogSU5Ua25FUFxuIiwKIAkJCQkgX19mdW5jX18sIGlkeCk7Ci0JCQljbGVhciB8PSBTM0NfRElFUE1TS19JTlRrbkVQTWlzTXNrOwogCQl9CiAKIAkJLyogRklGTyBoYXMgc3BhY2Ugb3IgaXMgZW1wdHkgKHNlZSBHQUhCQ0ZHKSAqLwpAQCAtMTg2MCwxMSArMTkyMCw4IEBACiAJCQlkZXZfZGJnKGhzb3RnLT5kZXYsICIlczogZXAlZDogVHhGSUZPRW1wdHlcbiIsCiAJCQkJX19mdW5jX18sIGlkeCk7CiAJCQlzM2NfaHNvdGdfdHJ5dHgoaHNvdGcsIGhzX2VwKTsKLQkJCWNsZWFyIHw9IFMzQ19ESUVQTVNLX1R4RklGT0VtcHR5OwogCQl9CiAJfQotCi0Jd3JpdGVsKGNsZWFyLCBoc290Zy0+cmVncyArIGVwaW50X3JlZyk7CiB9CiAKIC8qKgpAQCAtMjA1Niw3ICsyMTEzLDYgQEAKIAkJZGV2X2luZm8oaHNvdGctPmRldiwgIk9UR0ludDogJTA4eFxuIiwgb3RnaW50KTsKIAogCQl3cml0ZWwob3RnaW50LCBoc290Zy0+cmVncyArIFMzQ19HT1RHSU5UKTsKLQkJd3JpdGVsKFMzQ19HSU5UU1RTX09UR0ludCwgaHNvdGctPnJlZ3MgKyBTM0NfR0lOVFNUUyk7CiAJfQogCiAJaWYgKGdpbnRzdHMgJiBTM0NfR0lOVFNUU19EaXNjb25uSW50KSB7CkBAIC0yMDcyLDggKzIxMjgsOSBAQAogCX0KIAogCWlmIChnaW50c3RzICYgUzNDX0dJTlRTVFNfRW51bURvbmUpIHsKLQkJczNjX2hzb3RnX2lycV9lbnVtZG9uZShoc290Zyk7CiAJCXdyaXRlbChTM0NfR0lOVFNUU19FbnVtRG9uZSwgaHNvdGctPnJlZ3MgKyBTM0NfR0lOVFNUUyk7CisKKwkJczNjX2hzb3RnX2lycV9lbnVtZG9uZShoc290Zyk7CiAJfQogCiAJaWYgKGdpbnRzdHMgJiBTM0NfR0lOVFNUU19Db25JRFN0c0NobmcpIHsKQEAgLTIxMDEsMTAgKzIxNTgsNiBAQAogCQkJaWYgKGRhaW50X2luICYgMSkKIAkJCQlzM2NfaHNvdGdfZXBpbnQoaHNvdGcsIGVwLCAxKTsKIAkJfQotCi0JCXdyaXRlbChkYWludCwgaHNvdGctPnJlZ3MgKyBTM0NfREFJTlQpOwotCQl3cml0ZWwoZ2ludHN0cyAmIChTM0NfR0lOVFNUU19PRVBJbnQgfCBTM0NfR0lOVFNUU19JRVBJbnQpLAotCQkgICAgICAgaHNvdGctPnJlZ3MgKyBTM0NfR0lOVFNUUyk7CiAJfQogCiAJaWYgKGdpbnRzdHMgJiBTM0NfR0lOVFNUU19VU0JSc3QpIHsKQEAgLTIxMTIsNiArMjE2NSw4IEBACiAJCWRldl9kYmcoaHNvdGctPmRldiwgIkdOUFRYU1RTPSUwOHhcbiIsCiAJCQlyZWFkbChoc290Zy0+cmVncyArIFMzQ19HTlBUWFNUUykpOwogCisJCXdyaXRlbChTM0NfR0lOVFNUU19VU0JSc3QsIGhzb3RnLT5yZWdzICsgUzNDX0dJTlRTVFMpOworCiAJCWtpbGxfYWxsX3JlcXVlc3RzKGhzb3RnLCAmaHNvdGctPmVwc1swXSwgLUVDT05OUkVTRVQsIHRydWUpOwogCiAJCS8qIGl0IHNlZW1zIGFmdGVyIGEgcmVzZXQgd2UgY2FuIGVuZCB1cCB3aXRoIGEgc2l0dWF0aW9uCkBAIC0yMTIzLDggKzIxNzgsNiBAQAogCQlzM2NfaHNvdGdfaW5pdF9maWZvKGhzb3RnKTsKIAogCQlzM2NfaHNvdGdfZW5xdWV1ZV9zZXR1cChoc290Zyk7Ci0KLQkJd3JpdGVsKFMzQ19HSU5UU1RTX1VTQlJzdCwgaHNvdGctPnJlZ3MgKyBTM0NfR0lOVFNUUyk7CiAJfQogCiAJLyogY2hlY2sgYm90aCBGSUZPcyAqLwpAQCAtMjEzOCw4ICsyMTkxLDYgQEAKIAogCQlzM2NfaHNvdGdfZGlzYWJsZV9nc2ludChoc290ZywgUzNDX0dJTlRTVFNfTlBUeEZFbXApOwogCQlzM2NfaHNvdGdfaXJxX2ZpZm9lbXB0eShoc290ZywgZmFsc2UpOwotCi0JCXdyaXRlbChTM0NfR0lOVFNUU19OUFR4RkVtcCwgaHNvdGctPnJlZ3MgKyBTM0NfR0lOVFNUUyk7CiAJfQogCiAJaWYgKGdpbnRzdHMgJiBTM0NfR0lOVFNUU19QVHhGRW1wKSB7CkBAIC0yMTQ5LDggKzIyMDAsNiBAQAogCiAJCXMzY19oc290Z19kaXNhYmxlX2dzaW50KGhzb3RnLCBTM0NfR0lOVFNUU19QVHhGRW1wKTsKIAkJczNjX2hzb3RnX2lycV9maWZvZW1wdHkoaHNvdGcsIHRydWUpOwotCi0JCXdyaXRlbChTM0NfR0lOVFNUU19QVHhGRW1wLCBoc290Zy0+cmVncyArIFMzQ19HSU5UU1RTKTsKIAl9CiAKIAlpZiAoZ2ludHN0cyAmIFMzQ19HSU5UU1RTX1J4Rkx2bCkgewpAQCAtMjE1OSw3ICsyMjA4LDYgQEAKIAkJICogc2V0LiAqLwogCiAJCXMzY19oc290Z19oYW5kbGVfcngoaHNvdGcpOwotCQl3cml0ZWwoUzNDX0dJTlRTVFNfUnhGTHZsLCBoc290Zy0+cmVncyArIFMzQ19HSU5UU1RTKTsKIAl9CiAKIAlpZiAoZ2ludHN0cyAmIFMzQ19HSU5UU1RTX01vZGVNaXMpIHsKQEAgLTIxOTMsMTkgKzIyNDEsMTcgQEAKIAlpZiAoZ2ludHN0cyAmIFMzQ19HSU5UU1RTX0dPVVROYWtFZmYpIHsKIAkJZGV2X2luZm8oaHNvdGctPmRldiwgIkdPVVROYWtFZmYgdHJpZ2dlcmVkXG4iKTsKIAotCQlzM2NfaHNvdGdfZHVtcChoc290Zyk7Ci0KIAkJd3JpdGVsKFMzQ19EQ1RMX0NHT1VUTmFrLCBoc290Zy0+cmVncyArIFMzQ19EQ1RMKTsKLQkJd3JpdGVsKFMzQ19HSU5UU1RTX0dPVVROYWtFZmYsIGhzb3RnLT5yZWdzICsgUzNDX0dJTlRTVFMpOworCisJCXMzY19oc290Z19kdW1wKGhzb3RnKTsKIAl9CiAKIAlpZiAoZ2ludHN0cyAmIFMzQ19HSU5UU1RTX0dJTk5ha0VmZikgewogCQlkZXZfaW5mbyhoc290Zy0+ZGV2LCAiR0lOTmFrRWZmIHRyaWdnZXJlZFxuIik7CiAKLQkJczNjX2hzb3RnX2R1bXAoaHNvdGcpOwotCiAJCXdyaXRlbChTM0NfRENUTF9DR05QSW5OQUssIGhzb3RnLT5yZWdzICsgUzNDX0RDVEwpOwotCQl3cml0ZWwoUzNDX0dJTlRTVFNfR0lOTmFrRWZmLCBoc290Zy0+cmVncyArIFMzQ19HSU5UU1RTKTsKKworCQlzM2NfaHNvdGdfZHVtcChoc290Zyk7CiAJfQogCiAJLyogaWYgd2UndmUgaGFkIGZpZm8gZXZlbnRzLCB3ZSBzaG91bGQgdHJ5IGFuZCBnbyBhcm91bmQgdGhlCkBAIC0yNDAzLDExICsyNDQ5LDYgQEAKIAogCWRldl9pbmZvKGhzLT5kZXYsICJlcF9kZXF1ZXVlKCVwLCVwKVxuIiwgZXAsIHJlcSk7CiAKLQlpZiAoaHNfcmVxID09IGhzX2VwLT5yZXEpIHsKLQkJZGV2X2RiZyhocy0+ZGV2LCAiJXM6IGFscmVhZHkgaW4gcHJvZ3Jlc3NcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FSU5QUk9HUkVTUzsKLQl9Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmaHNfZXAtPmxvY2ssIGZsYWdzKTsKIAogCWlmICghb25fbGlzdChoc19lcCwgaHNfcmVxKSkgewpAQCAtMjQyOSw2ICsyNDcwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCXUzMiBlcHJlZzsKIAl1MzIgZXBjdGw7CisJdTMyIHhmZXJ0eXBlOwogCiAJZGV2X2luZm8oaHMtPmRldiwgIiVzKGVwICVwICVzLCAlZClcbiIsIF9fZnVuY19fLCBlcCwgZXAtPm5hbWUsIHZhbHVlKTsKIApAQCAtMjQzOSwxMCArMjQ4MSwxNyBAQAogCWVwcmVnID0gUzNDX0RJRVBDVEwoaW5kZXgpOwogCWVwY3RsID0gcmVhZGwoaHMtPnJlZ3MgKyBlcHJlZyk7CiAKLQlpZiAodmFsdWUpCi0JCWVwY3RsIHw9IFMzQ19EeEVQQ1RMX1N0YWxsOwotCWVsc2UKKwlpZiAodmFsdWUpIHsKKwkJZXBjdGwgfD0gUzNDX0R4RVBDVExfU3RhbGwgKyBTM0NfRHhFUENUTF9TTkFLOworCQlpZiAoZXBjdGwgJiBTM0NfRHhFUENUTF9FUEVuYSkKKwkJCWVwY3RsIHw9IFMzQ19EeEVQQ1RMX0VQRGlzOworCX0gZWxzZSB7CiAJCWVwY3RsICY9IH5TM0NfRHhFUENUTF9TdGFsbDsKKwkJeGZlcnR5cGUgPSBlcGN0bCAmIFMzQ19EeEVQQ1RMX0VQVHlwZV9NQVNLOworCQlpZiAoeGZlcnR5cGUgPT0gUzNDX0R4RVBDVExfRVBUeXBlX0J1bGsgfHwKKwkJCXhmZXJ0eXBlID09IFMzQ19EeEVQQ1RMX0VQVHlwZV9JbnR0ZXJ1cHQpCisJCQkJZXBjdGwgfD0gUzNDX0R4RVBDVExfU2V0RDBQSUQ7CisJfQogCiAJd3JpdGVsKGVwY3RsLCBocy0+cmVncyArIGVwcmVnKTsKIApAQCAtMjQ1MSw4ICsyNTAwLDEzIEBACiAKIAlpZiAodmFsdWUpCiAJCWVwY3RsIHw9IFMzQ19EeEVQQ1RMX1N0YWxsOwotCWVsc2UKKwllbHNlIHsKIAkJZXBjdGwgJj0gflMzQ19EeEVQQ1RMX1N0YWxsOworCQl4ZmVydHlwZSA9IGVwY3RsICYgUzNDX0R4RVBDVExfRVBUeXBlX01BU0s7CisJCWlmICh4ZmVydHlwZSA9PSBTM0NfRHhFUENUTF9FUFR5cGVfQnVsayB8fAorCQkJeGZlcnR5cGUgPT0gUzNDX0R4RVBDVExfRVBUeXBlX0ludHRlcnVwdCkKKwkJCQllcGN0bCB8PSBTM0NfRHhFUENUTF9TZXREMFBJRDsKKwl9CiAKIAl3cml0ZWwoZXBjdGwsIGhzLT5yZWdzICsgZXByZWcpOwogCkBAIC0yNDkxLDkgKzI1NDUsOSBAQAogCXRpbWVvdXQgPSAxMDAwOwogCWRvIHsKIAkJZ3JzdGN0bCA9IHJlYWRsKGhzb3RnLT5yZWdzICsgUzNDX0dSU1RDVEwpOwotCX0gd2hpbGUgKCEoZ3JzdGN0bCAmIFMzQ19HUlNUQ1RMX0NTZnRSc3QpICYmIHRpbWVvdXQtLSA+IDApOworCX0gd2hpbGUgKChncnN0Y3RsICYgUzNDX0dSU1RDVExfQ1NmdFJzdCkgJiYgdGltZW91dC0tID4gMCk7CiAKLQlpZiAoIShncnN0Y3RsICYgUzNDX0dSU1RDVExfQ1NmdFJzdCkpIHsKKwlpZiAoZ3JzdGN0bCAmIFMzQ19HUlNUQ1RMX0NTZnRSc3QpIHsKIAkJZGV2X2Vycihoc290Zy0+ZGV2LCAiRmFpbGVkIHRvIGdldCBDU2Z0UnN0IGFzc2VydGVkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjUxMCwxMyArMjU2NCwxMCBAQAogCQkJcmV0dXJuIC1FVElNRURPVVQ7CiAJCX0KIAotCQlpZiAoZ3JzdGN0bCAmIFMzQ19HUlNUQ1RMX0NTZnRSc3QpCi0JCQljb250aW51ZTsKLQogCQlpZiAoIShncnN0Y3RsICYgUzNDX0dSU1RDVExfQUhCSWRsZSkpCiAJCQljb250aW51ZTsKIAotCQlicmVhazsgCQkvKiByZXNldCBkb25lICovCisJCWJyZWFrOwkJLyogcmVzZXQgZG9uZSAqLwogCX0KIAogCWRldl9kYmcoaHNvdGctPmRldiwgInJlc2V0IHN1Y2Nlc3NmdWxcbiIpOwpAQCAtMjU4OCw2ICsyNjM5LDEyIEBACiAKIAl3cml0ZWwoMSA8PCAxOCB8IFMzQ19EQ0ZHX0RldlNwZF9IUywgIGhzb3RnLT5yZWdzICsgUzNDX0RDRkcpOwogCisJLyogQ2xlYXIgYW55IHBlbmRpbmcgT1RHIGludGVycnVwdHMgKi8KKwl3cml0ZWwoMHhmZmZmZmZmZiwgaHNvdGctPnJlZ3MgKyBTM0NfR09UR0lOVCk7CisKKwkvKiBDbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzICovCisJd3JpdGVsKDB4ZmZmZmZmZmYsIGhzb3RnLT5yZWdzICsgUzNDX0dJTlRTVFMpOworCiAJd3JpdGVsKFMzQ19HSU5UU1RTX0Rpc2Nvbm5JbnQgfCBTM0NfR0lOVFNUU19TZXNzUmVxSW50IHwKIAkgICAgICAgUzNDX0dJTlRTVFNfQ29uSURTdHNDaG5nIHwgUzNDX0dJTlRTVFNfVVNCUnN0IHwKIAkgICAgICAgUzNDX0dJTlRTVFNfRW51bURvbmUgfCBTM0NfR0lOVFNUU19PVEdJbnQgfApAQCAtMzI2MSw3ICszMzE4LDcgQEAKIAloc290Zy0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAib3RnIik7CiAJaWYgKElTX0VSUihoc290Zy0+Y2xrKSkgewogCQlkZXZfZXJyKGRldiwgImNhbm5vdCBnZXQgb3RnIGNsb2NrXG4iKTsKLQkJcmV0ID0gLUVJTlZBTDsKKwkJcmV0ID0gUFRSX0VSUihoc290Zy0+Y2xrKTsKIAkJZ290byBlcnJfbWVtOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc3VkYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZTNjZjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvczNjLWhzdWRjLmMKQEAgLTAsMCArMSwxMzQ5IEBACisvKiBsaW51eC9kcml2ZXJzL3VzYi9nYWRnZXQvczNjLWhzdWRjLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICoKKyAqIFMzQzI0WFggVVNCIDIuMCBIaWdoLXNwZWVkIFVTQiBjb250cm9sbGVyIGdhZGdldCBkcml2ZXIKKyAqCisgKiBUaGUgUzNDMjRYWCBVU0IgMi4wIGhpZ2gtc3BlZWQgVVNCIGNvbnRyb2xsZXIgc3VwcG9ydHMgdXB0byA5IGVuZHBvaW50cy4KKyAqIEVhY2ggZW5kcG9pbnQgY2FuIGJlIGNvbmZpZ3VyZWQgYXMgZWl0aGVyIGluIG9yIG91dCBlbmRwb2ludC4gRW5kcG9pbnRzCisgKiBjYW4gYmUgY29uZmlndXJlZCBmb3IgQnVsayBvciBJbnRlcnJ1cHQgdHJhbnNmZXIgbW9kZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9jaDkuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvZ2FkZ2V0Lmg+CisKKyNpbmNsdWRlIDxtYWNoL3JlZ3MtczNjMjQ0My1jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvdWRjLmg+CisKKyNkZWZpbmUgUzNDX0hTVURDX1JFRyh4KQkoeCkKKworLyogTm9uLUluZGV4ZWQgUmVnaXN0ZXJzICovCisjZGVmaW5lIFMzQ19JUgkJCQlTM0NfSFNVRENfUkVHKDB4MDApIC8qIEluZGV4IFJlZ2lzdGVyICovCisjZGVmaW5lIFMzQ19FSVIJCQkJUzNDX0hTVURDX1JFRygweDA0KSAvKiBFUCBJbnRyIFN0YXR1cyAqLworI2RlZmluZSBTM0NfRUlSX0VQMAkJCSgxPDwwKQorI2RlZmluZSBTM0NfRUlFUgkJCVMzQ19IU1VEQ19SRUcoMHgwOCkgLyogRVAgSW50ciBFbmFibGUgKi8KKyNkZWZpbmUgUzNDX0ZBUgkJCQlTM0NfSFNVRENfUkVHKDB4MGMpIC8qIEdhZGdldCBBZGRyZXNzICovCisjZGVmaW5lIFMzQ19GTlIJCQkJUzNDX0hTVURDX1JFRygweDEwKSAvKiBGcmFtZSBOdW1iZXIgKi8KKyNkZWZpbmUgUzNDX0VEUgkJCQlTM0NfSFNVRENfUkVHKDB4MTQpIC8qIEVQIERpcmVjdGlvbiAqLworI2RlZmluZSBTM0NfVFIJCQkJUzNDX0hTVURDX1JFRygweDE4KSAvKiBUZXN0IFJlZ2lzdGVyICovCisjZGVmaW5lIFMzQ19TU1IJCQkJUzNDX0hTVURDX1JFRygweDFjKSAvKiBTeXN0ZW0gU3RhdHVzICovCisjZGVmaW5lIFMzQ19TU1JfRFRaSUVOX0VOCQkoMHhmZjhmKQorI2RlZmluZSBTM0NfU1NSX0VSUgkJCSgweGZmODApCisjZGVmaW5lIFMzQ19TU1JfVkJVU09OCQkJKDEgPDwgOCkKKyNkZWZpbmUgUzNDX1NTUl9IU1AJCQkoMSA8PCA0KQorI2RlZmluZSBTM0NfU1NSX1NERQkJCSgxIDw8IDMpCisjZGVmaW5lIFMzQ19TU1JfUkVTVU1FCQkJKDEgPDwgMikKKyNkZWZpbmUgUzNDX1NTUl9TVVNQRU5ECQkJKDEgPDwgMSkKKyNkZWZpbmUgUzNDX1NTUl9SRVNFVAkJCSgxIDw8IDApCisjZGVmaW5lIFMzQ19TQ1IJCQkJUzNDX0hTVURDX1JFRygweDIwKSAvKiBTeXN0ZW0gQ29udHJvbCAqLworI2RlZmluZSBTM0NfU0NSX0RUWklFTl9FTgkJKDEgPDwgMTQpCisjZGVmaW5lIFMzQ19TQ1JfUlJEX0VOCQkJKDEgPDwgNSkKKyNkZWZpbmUgUzNDX1NDUl9TVVNfRU4JCQkoMSA8PCAxKQorI2RlZmluZSBTM0NfU0NSX1JTVF9FTgkJCSgxIDw8IDApCisjZGVmaW5lIFMzQ19FUDBTUgkJCVMzQ19IU1VEQ19SRUcoMHgyNCkgLyogRVAwIFN0YXR1cyAqLworI2RlZmluZSBTM0NfRVAwU1JfRVAwX0xXTwkJKDEgPDwgNikKKyNkZWZpbmUgUzNDX0VQMFNSX1NUQUxMCQkJKDEgPDwgNCkKKyNkZWZpbmUgUzNDX0VQMFNSX1RYX1NVQ0NFU1MJCSgxIDw8IDEpCisjZGVmaW5lIFMzQ19FUDBTUl9SWF9TVUNDRVNTCQkoMSA8PCAwKQorI2RlZmluZSBTM0NfRVAwQ1IJCQlTM0NfSFNVRENfUkVHKDB4MjgpIC8qIEVQMCBDb250cm9sICovCisjZGVmaW5lIFMzQ19CUihfeCkJCQlTM0NfSFNVRENfUkVHKDB4NjAgKyAoX3ggKiA0KSkKKworLyogSW5kZXhlZCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUzNDX0VTUgkJCQlTM0NfSFNVRENfUkVHKDB4MmMpIC8qIEVQbiBTdGF0dXMgKi8KKyNkZWZpbmUgUzNDX0VTUl9GTFVTSAkJCSgxIDw8IDYpCisjZGVmaW5lIFMzQ19FU1JfU1RBTEwJCQkoMSA8PCA1KQorI2RlZmluZSBTM0NfRVNSX0xXTwkJCSgxIDw8IDQpCisjZGVmaW5lIFMzQ19FU1JfUFNJRl9PTkUJCSgxIDw8IDIpCisjZGVmaW5lIFMzQ19FU1JfUFNJRl9UV08JCSgyIDw8IDIpCisjZGVmaW5lIFMzQ19FU1JfVFhfU1VDQ0VTUwkJKDEgPDwgMSkKKyNkZWZpbmUgUzNDX0VTUl9SWF9TVUNDRVNTCQkoMSA8PCAwKQorI2RlZmluZSBTM0NfRUNSCQkJCVMzQ19IU1VEQ19SRUcoMHgzMCkgLyogRVBuIENvbnRyb2wgKi8KKyNkZWZpbmUgUzNDX0VDUl9EVUVOCQkJKDEgPDwgNykKKyNkZWZpbmUgUzNDX0VDUl9GTFVTSAkJCSgxIDw8IDYpCisjZGVmaW5lIFMzQ19FQ1JfU1RBTEwJCQkoMSA8PCAxKQorI2RlZmluZSBTM0NfRUNSX0lFTVMJCQkoMSA8PCAwKQorI2RlZmluZSBTM0NfQlJDUgkJCVMzQ19IU1VEQ19SRUcoMHgzNCkgLyogUmVhZCBDb3VudCAqLworI2RlZmluZSBTM0NfQldDUgkJCVMzQ19IU1VEQ19SRUcoMHgzOCkgLyogV3JpdGUgQ291bnQgKi8KKyNkZWZpbmUgUzNDX01QUgkJCQlTM0NfSFNVRENfUkVHKDB4M2MpIC8qIE1heCBQa3QgU2l6ZSAqLworCisjZGVmaW5lIFdBSVRfRk9SX1NFVFVQCQkJKDApCisjZGVmaW5lIERBVEFfU1RBVEVfWE1JVAkJCSgxKQorI2RlZmluZSBEQVRBX1NUQVRFX1JFQ1YJCQkoMikKKworLyoqCisgKiBzdHJ1Y3QgczNjX2hzdWRjX2VwIC0gRW5kcG9pbnQgcmVwcmVzZW50YXRpb24gdXNlZCBieSBkcml2ZXIuCisgKiBAZXA6IFVTQiBnYWRnZXQgbGF5ZXIgcmVwcmVzZW50YXRpb24gb2YgZGV2aWNlIGVuZHBvaW50LgorICogQG5hbWU6IEVuZHBvaW50IG5hbWUgKGFzIHJlcXVpcmVkIGJ5IGVwIGF1dG9jb25maWd1cmF0aW9uKS4KKyAqIEBkZXY6IFJlZmVyZW5jZSB0byB0aGUgZGV2aWNlIGNvbnRyb2xsZXIgdG8gd2hpY2ggdGhpcyBFUCBiZWxvbmdzLgorICogQGRlc2M6IEVuZHBvaW50IGRlc2NyaXB0b3Igb2J0YWluZWQgZnJvbSB0aGUgZ2FkZ2V0IGRyaXZlci4KKyAqIEBxdWV1ZTogVHJhbnNmZXIgcmVxdWVzdCBxdWV1ZSBmb3IgdGhlIGVuZHBvaW50LgorICogQHN0b3BwZWQ6IE1haW50YWlucyBzdGF0ZSBvZiBlbmRwb2ludCwgc2V0IGlmIEVQIGlzIGhhbHRlZC4KKyAqIEBiRW5kcG9pbnRBZGRyZXNzOiBFUCBhZGRyZXNzIChpbmNsdWRpbmcgZGlyZWN0aW9uIGJpdCkuCisgKiBAZmlmbzogQmFzZSBhZGRyZXNzIG9mIEVQIEZJRk8uCisgKi8KK3N0cnVjdCBzM2NfaHN1ZGNfZXAgeworCXN0cnVjdCB1c2JfZXAgZXA7CisJY2hhciBuYW1lWzIwXTsKKwlzdHJ1Y3QgczNjX2hzdWRjICpkZXY7CisJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpkZXNjOworCXN0cnVjdCBsaXN0X2hlYWQgcXVldWU7CisJdTggc3RvcHBlZDsKKwl1OCB3ZWRnZTsKKwl1OCBiRW5kcG9pbnRBZGRyZXNzOworCXZvaWQgX19pb21lbSAqZmlmbzsKK307CisKKy8qKgorICogc3RydWN0IHMzY19oc3VkY19yZXEgLSBEcml2ZXIgZW5jYXBzdWxhdGlvbiBvZiBVU0IgZ2FkZ2V0IHRyYW5zZmVyIHJlcXVlc3QuCisgKiBAcmVxOiBSZWZlcmVuY2UgdG8gVVNCIGdhZGdldCB0cmFuc2ZlciByZXF1ZXN0LgorICogQHF1ZXVlOiBVc2VkIGZvciBpbnNlcnRpbmcgdGhpcyByZXF1ZXN0IHRvIHRoZSBlbmRwb2ludCByZXF1ZXN0IHF1ZXVlLgorICovCitzdHJ1Y3QgczNjX2hzdWRjX3JlcSB7CisJc3RydWN0IHVzYl9yZXF1ZXN0IHJlcTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHF1ZXVlOworfTsKKworLyoqCisgKiBzdHJ1Y3QgczNjX2hzdWRjIC0gRHJpdmVyJ3MgYWJzdHJhY3Rpb24gb2YgdGhlIGRldmljZSBjb250cm9sbGVyLgorICogQGdhZGdldDogSW5zdGFuY2Ugb2YgdXNiX2dhZGdldCB3aGljaCBpcyByZWZlcmVuY2VkIGJ5IGdhZGdldCBkcml2ZXIuCisgKiBAZHJpdmVyOiBSZWZlcmVuY2UgdG8gY3VycmVudHkgYWN0aXZlIGdhZGdldCBkcml2ZXIuCisgKiBAZGV2OiBUaGUgZGV2aWNlIHJlZmVyZW5jZSB1c2VkIGJ5IHByb2JlIGZ1bmN0aW9uLgorICogQGxvY2s6IExvY2sgdG8gc3luY2hyb25pemUgdGhlIHVzYWdlIG9mIEVuZHBvaW50cyAoRVAncyBhcmUgaW5kZXhlZCkuCisgKiBAcmVnczogUmVtYXBwZWQgYmFzZSBhZGRyZXNzIG9mIGNvbnRyb2xsZXIncyByZWdpc3RlciBzcGFjZS4KKyAqIEBtZW1fcnNyYzogRGV2aWNlIG1lbW9yeSByZXNvdXJjZSB1c2VkIGZvciByZW1hcHBpbmcgZGV2aWNlIHJlZ2lzdGVyIHNwYWNlLgorICogaXJxOiBJUlEgbnVtYmVyIHVzZWQgYnkgdGhlIGNvbnRyb2xsZXIuCisgKiB1Y2xrOiBSZWZlcmVuY2UgdG8gdGhlIGNvbnRyb2xsZXIgY2xvY2suCisgKiBlcDBzdGF0ZTogQ3VycmVudCBzdGF0ZSBvZiBFUDAuCisgKiBlcDogTGlzdCBvZiBlbmRwb2ludHMgc3VwcG9ydGVkIGJ5IHRoZSBjb250cm9sbGVyLgorICovCitzdHJ1Y3QgczNjX2hzdWRjIHsKKwlzdHJ1Y3QgdXNiX2dhZGdldCBnYWRnZXQ7CisJc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXI7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBzM2MyNHh4X2hzdWRjX3BsYXRkYXRhICpwZDsKKwlzcGlubG9ja190IGxvY2s7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCByZXNvdXJjZSAqbWVtX3JzcmM7CisJaW50IGlycTsKKwlzdHJ1Y3QgY2xrICp1Y2xrOworCWludCBlcDBzdGF0ZTsKKwlzdHJ1Y3QgczNjX2hzdWRjX2VwIGVwW107Cit9OworCisjZGVmaW5lIGVwX21heHBhY2tldChfZXApCSgoX2VwKS0+ZXAubWF4cGFja2V0KQorI2RlZmluZSBlcF9pc19pbihfZXApCQkoKF9lcCktPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKQorI2RlZmluZSBlcF9pbmRleChfZXApCQkoKF9lcCktPmJFbmRwb2ludEFkZHJlc3MgJiBcCisJCQkJCVVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSykKKworc3RhdGljIHN0cnVjdCBzM2NfaHN1ZGMgKnRoZV9jb250cm9sbGVyOworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX25hbWVbXSA9ICJzM2MtdWRjIjsKK3N0YXRpYyBjb25zdCBjaGFyIGVwMG5hbWVbXSA9ICJlcDAtY29udHJvbCI7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHMzY19oc3VkY19yZXEgKm91cl9yZXEoc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihyZXEsIHN0cnVjdCBzM2NfaHN1ZGNfcmVxLCByZXEpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzM2NfaHN1ZGNfZXAgKm91cl9lcChzdHJ1Y3QgdXNiX2VwICplcCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGVwLCBzdHJ1Y3QgczNjX2hzdWRjX2VwLCBlcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHMzY19oc3VkYyAqdG9faHN1ZGMoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGdhZGdldCwgc3RydWN0IHMzY19oc3VkYywgZ2FkZ2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9pbmRleChzdHJ1Y3QgczNjX2hzdWRjICpoc3VkYywgaW50IGVwX2FkZHIpCit7CisJZXBfYWRkciAmPSBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0s7CisJd3JpdGVsKGVwX2FkZHIsIGhzdWRjLT5yZWdzICsgUzNDX0lSKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fb3JyMzIodm9pZCBfX2lvbWVtICpwdHIsIHUzMiB2YWwpCit7CisJd3JpdGVsKHJlYWRsKHB0cikgfCB2YWwsIHB0cik7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19oc3VkY19pbml0X3BoeSh2b2lkKQoreworCXUzMiBjZmc7CisKKwljZmcgPSByZWFkbChTM0MyNDQzX1BXUkNGRykgfCBTM0MyNDQzX1BXUkNGR19VU0JQSFk7CisJd3JpdGVsKGNmZywgUzNDMjQ0M19QV1JDRkcpOworCisJY2ZnID0gcmVhZGwoUzNDMjQ0M19VUlNUQ09OKTsKKwljZmcgfD0gKFMzQzI0NDNfVVJTVENPTl9GVU5DUlNUIHwgUzNDMjQ0M19VUlNUQ09OX1BIWVJTVCk7CisJd3JpdGVsKGNmZywgUzNDMjQ0M19VUlNUQ09OKTsKKwltZGVsYXkoMSk7CisKKwljZmcgPSByZWFkbChTM0MyNDQzX1VSU1RDT04pOworCWNmZyAmPSB+KFMzQzI0NDNfVVJTVENPTl9GVU5DUlNUIHwgUzNDMjQ0M19VUlNUQ09OX1BIWVJTVCk7CisJd3JpdGVsKGNmZywgUzNDMjQ0M19VUlNUQ09OKTsKKworCWNmZyA9IHJlYWRsKFMzQzI0NDNfUEhZQ1RSTCk7CisJY2ZnICY9IH4oUzNDMjQ0M19QSFlDVFJMX0NMS1NFTCB8IFMzQzI0NDNfUEhZQ1RSTF9EU1BPUlQpOworCWNmZyB8PSAoUzNDMjQ0M19QSFlDVFJMX0VYVENMSyB8IFMzQzI0NDNfUEhZQ1RSTF9QTExTRUwpOworCXdyaXRlbChjZmcsIFMzQzI0NDNfUEhZQ1RSTCk7CisKKwljZmcgPSByZWFkbChTM0MyNDQzX1BIWVBXUik7CisJY2ZnICY9IH4oUzNDMjQ0M19QSFlQV1JfRlNVU1BFTkQgfCBTM0MyNDQzX1BIWVBXUl9QTExfUFdSRE4gfAorCQlTM0MyNDQzX1BIWVBXUl9YT19PTiB8IFMzQzI0NDNfUEhZUFdSX1BMTF9SRUZDTEsgfAorCQlTM0MyNDQzX1BIWVBXUl9BTkFMT0dfUEQpOworCWNmZyB8PSBTM0MyNDQzX1BIWVBXUl9DT01NT05fT047CisJd3JpdGVsKGNmZywgUzNDMjQ0M19QSFlQV1IpOworCisJY2ZnID0gcmVhZGwoUzNDMjQ0M19VQ0xLQ09OKTsKKwljZmcgfD0gKFMzQzI0NDNfVUNMS0NPTl9ERVRFQ1RfVkJVUyB8IFMzQzI0NDNfVUNMS0NPTl9GVU5DX0NMS0VOIHwKKwkJUzNDMjQ0M19VQ0xLQ09OX1RDTEtFTik7CisJd3JpdGVsKGNmZywgUzNDMjQ0M19VQ0xLQ09OKTsKK30KKworc3RhdGljIHZvaWQgczNjX2hzdWRjX3VuaW5pdF9waHkodm9pZCkKK3sKKwl1MzIgY2ZnOworCisJY2ZnID0gcmVhZGwoUzNDMjQ0M19QV1JDRkcpICYgflMzQzI0NDNfUFdSQ0ZHX1VTQlBIWTsKKwl3cml0ZWwoY2ZnLCBTM0MyNDQzX1BXUkNGRyk7CisKKwl3cml0ZWwoUzNDMjQ0M19QSFlQV1JfRlNVU1BFTkQsIFMzQzI0NDNfUEhZUFdSKTsKKworCWNmZyA9IHJlYWRsKFMzQzI0NDNfVUNMS0NPTikgJiB+UzNDMjQ0M19VQ0xLQ09OX0ZVTkNfQ0xLRU47CisJd3JpdGVsKGNmZywgUzNDMjQ0M19VQ0xLQ09OKTsKK30KKworLyoqCisgKiBzM2NfaHN1ZGNfY29tcGxldGVfcmVxdWVzdCAtIENvbXBsZXRlIGEgdHJhbnNmZXIgcmVxdWVzdC4KKyAqIEBoc2VwOiBFbmRwb2ludCB0byB3aGljaCB0aGUgcmVxdWVzdCBiZWxvbmdzLgorICogQGhzcmVxOiBUcmFuc2ZlciByZXF1ZXN0IHRvIGJlIGNvbXBsZXRlZC4KKyAqIEBzdGF0dXM6IFRyYW5zZmVyIGNvbXBsZXRpb24gc3RhdHVzIGZvciB0aGUgdHJhbnNmZXIgcmVxdWVzdC4KKyAqLworc3RhdGljIHZvaWQgczNjX2hzdWRjX2NvbXBsZXRlX3JlcXVlc3Qoc3RydWN0IHMzY19oc3VkY19lcCAqaHNlcCwKKwkJCQlzdHJ1Y3QgczNjX2hzdWRjX3JlcSAqaHNyZXEsIGludCBzdGF0dXMpCit7CisJdW5zaWduZWQgaW50IHN0b3BwZWQgPSBoc2VwLT5zdG9wcGVkOworCXN0cnVjdCBzM2NfaHN1ZGMgKmhzdWRjID0gaHNlcC0+ZGV2OworCisJbGlzdF9kZWxfaW5pdCgmaHNyZXEtPnF1ZXVlKTsKKwloc3JlcS0+cmVxLnN0YXR1cyA9IHN0YXR1czsKKworCWlmICghZXBfaW5kZXgoaHNlcCkpIHsKKwkJaHN1ZGMtPmVwMHN0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJCWhzZXAtPmJFbmRwb2ludEFkZHJlc3MgJj0gflVTQl9ESVJfSU47CisJfQorCisJaHNlcC0+c3RvcHBlZCA9IDE7CisJc3Bpbl91bmxvY2soJmhzdWRjLT5sb2NrKTsKKwlpZiAoaHNyZXEtPnJlcS5jb21wbGV0ZSAhPSBOVUxMKQorCQloc3JlcS0+cmVxLmNvbXBsZXRlKCZoc2VwLT5lcCwgJmhzcmVxLT5yZXEpOworCXNwaW5fbG9jaygmaHN1ZGMtPmxvY2spOworCWhzZXAtPnN0b3BwZWQgPSBzdG9wcGVkOworfQorCisvKioKKyAqIHMzY19oc3VkY19udWtlX2VwIC0gVGVybWluYXRlIGFsbCByZXF1ZXN0cyBxdWV1ZWQgZm9yIGEgZW5kcG9pbnQuCisgKiBAaHNlcDogRW5kcG9pbnQgZm9yIHdoaWNoIHF1ZXVlZCByZXF1ZXN0cyBoYXZlIHRvIGJlIHRlcm1pbmF0ZWQuCisgKiBAc3RhdHVzOiBUcmFuc2ZlciBjb21wbGV0aW9uIHN0YXR1cyBmb3IgdGhlIHRyYW5zZmVyIHJlcXVlc3QuCisgKi8KK3N0YXRpYyB2b2lkIHMzY19oc3VkY19udWtlX2VwKHN0cnVjdCBzM2NfaHN1ZGNfZXAgKmhzZXAsIGludCBzdGF0dXMpCit7CisJc3RydWN0IHMzY19oc3VkY19yZXEgKmhzcmVxOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZoc2VwLT5xdWV1ZSkpIHsKKwkJaHNyZXEgPSBsaXN0X2VudHJ5KGhzZXAtPnF1ZXVlLm5leHQsCisJCQkJc3RydWN0IHMzY19oc3VkY19yZXEsIHF1ZXVlKTsKKwkJczNjX2hzdWRjX2NvbXBsZXRlX3JlcXVlc3QoaHNlcCwgaHNyZXEsIHN0YXR1cyk7CisJfQorfQorCisvKioKKyAqIHMzY19oc3VkY19zdG9wX2FjdGl2aXR5IC0gU3RvcCBhY3Rpdml0eSBvbiBhbGwgZW5kcG9pbnRzLgorICogQGhzdWRjOiBEZXZpY2UgY29udHJvbGxlciBmb3Igd2hpY2ggRVAgYWN0aXZpdHkgaXMgdG8gYmUgc3RvcHBlZC4KKyAqIEBkcml2ZXI6IFJlZmVyZW5jZSB0byB0aGUgZ2FkZ2V0IGRyaXZlciB3aGljaCBpcyBjdXJyZW50bHkgYWN0aXZlLgorICoKKyAqIEFsbCB0aGUgZW5kcG9pbnRzIGFyZSBzdG9wcGVkIGFuZCBhbnkgcGVuZGluZyB0cmFuc2ZlciByZXF1ZXN0cyBpZiBhbnkgb24KKyAqIHRoZSBlbmRwb2ludCBhcmUgdGVybWluYXRlZC4KKyAqLworc3RhdGljIHZvaWQgczNjX2hzdWRjX3N0b3BfYWN0aXZpdHkoc3RydWN0IHMzY19oc3VkYyAqaHN1ZGMsCisJCQkgIHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQoreworCXN0cnVjdCBzM2NfaHN1ZGNfZXAgKmhzZXA7CisJaW50IGVwbnVtOworCisJaHN1ZGMtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOworCisJZm9yIChlcG51bSA9IDA7IGVwbnVtIDwgaHN1ZGMtPnBkLT5lcG51bTsgZXBudW0rKykgeworCQloc2VwID0gJmhzdWRjLT5lcFtlcG51bV07CisJCWhzZXAtPnN0b3BwZWQgPSAxOworCQlzM2NfaHN1ZGNfbnVrZV9lcChoc2VwLCAtRVNIVVRET1dOKTsKKwl9CisKKwlzcGluX3VubG9jaygmaHN1ZGMtPmxvY2spOworCWRyaXZlci0+ZGlzY29ubmVjdCgmaHN1ZGMtPmdhZGdldCk7CisJc3Bpbl9sb2NrKCZoc3VkYy0+bG9jayk7Cit9CisKKy8qKgorICogczNjX2hzdWRjX3JlYWRfc2V0dXBfcGt0IC0gUmVhZCB0aGUgcmVjZWl2ZWQgc2V0dXAgcGFja2V0IGZyb20gRVAwIGZpZm8uCisgKiBAaHN1ZGM6IERldmljZSBjb250cm9sbGVyIGZyb20gd2hpY2ggc2V0dXAgcGFja2V0IGlzIHRvIGJlIHJlYWQuCisgKiBAYnVmOiBUaGUgYnVmZmVyIGludG8gd2hpY2ggdGhlIHNldHVwIHBhY2tldCBpcyByZWFkLgorICoKKyAqIFRoZSBzZXR1cCBwYWNrZXQgcmVjZWl2ZWQgaW4gdGhlIEVQMCBmaWZvIGlzIHJlYWQgYW5kIHN0b3JlZCBpbnRvIGEKKyAqIGdpdmVuIGJ1ZmZlciBhZGRyZXNzLgorICovCisKK3N0YXRpYyB2b2lkIHMzY19oc3VkY19yZWFkX3NldHVwX3BrdChzdHJ1Y3QgczNjX2hzdWRjICpoc3VkYywgdTE2ICpidWYpCit7CisJaW50IGNvdW50OworCisJY291bnQgPSByZWFkbChoc3VkYy0+cmVncyArIFMzQ19CUkNSKTsKKwl3aGlsZSAoY291bnQtLSkKKwkJKmJ1ZisrID0gKHUxNilyZWFkbChoc3VkYy0+cmVncyArIFMzQ19CUigwKSk7CisKKwl3cml0ZWwoUzNDX0VQMFNSX1JYX1NVQ0NFU1MsIGhzdWRjLT5yZWdzICsgUzNDX0VQMFNSKTsKK30KKworLyoqCisgKiBzM2NfaHN1ZGNfd3JpdGVfZmlmbyAtIFdyaXRlIG5leHQgY2h1bmsgb2YgdHJhbnNmZXIgZGF0YSB0byBFUCBmaWZvLgorICogQGhzZXA6IEVuZHBvaW50IHRvIHdoaWNoIHRoZSBkYXRhIGlzIHRvIGJlIHdyaXR0ZW4uCisgKiBAaHNyZXE6IFRyYW5zZmVyIHJlcXVlc3QgZnJvbSB3aGljaCB0aGUgbmV4dCBjaHVuayBvZiBkYXRhIGlzIHdyaXR0ZW4uCisgKgorICogV3JpdGUgdGhlIG5leHQgY2h1bmsgb2YgZGF0YSBmcm9tIGEgdHJhbnNmZXIgcmVxdWVzdCB0byB0aGUgZW5kcG9pbnQgRklGTy4KKyAqIElmIHRoZSB0cmFuc2ZlciByZXF1ZXN0IGNvbXBsZXRlcywgMSBpcyByZXR1cm5lZCwgb3RoZXJ3aXNlIDAgaXMgcmV0dXJuZWQuCisgKi8KK3N0YXRpYyBpbnQgczNjX2hzdWRjX3dyaXRlX2ZpZm8oc3RydWN0IHMzY19oc3VkY19lcCAqaHNlcCwKKwkJCQlzdHJ1Y3QgczNjX2hzdWRjX3JlcSAqaHNyZXEpCit7CisJdTE2ICpidWY7CisJdTMyIG1heCA9IGVwX21heHBhY2tldChoc2VwKTsKKwl1MzIgY291bnQsIGxlbmd0aDsKKwlib29sIGlzX2xhc3Q7CisJdm9pZCBfX2lvbWVtICpmaWZvID0gaHNlcC0+ZmlmbzsKKworCWJ1ZiA9IGhzcmVxLT5yZXEuYnVmICsgaHNyZXEtPnJlcS5hY3R1YWw7CisJcHJlZmV0Y2goYnVmKTsKKworCWxlbmd0aCA9IGhzcmVxLT5yZXEubGVuZ3RoIC0gaHNyZXEtPnJlcS5hY3R1YWw7CisJbGVuZ3RoID0gbWluKGxlbmd0aCwgbWF4KTsKKwloc3JlcS0+cmVxLmFjdHVhbCArPSBsZW5ndGg7CisKKwl3cml0ZWwobGVuZ3RoLCBoc2VwLT5kZXYtPnJlZ3MgKyBTM0NfQldDUik7CisJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgbGVuZ3RoOyBjb3VudCArPSAyKQorCQl3cml0ZWwoKmJ1ZisrLCBmaWZvKTsKKworCWlmIChjb3VudCAhPSBtYXgpIHsKKwkJaXNfbGFzdCA9IHRydWU7CisJfSBlbHNlIHsKKwkJaWYgKGhzcmVxLT5yZXEubGVuZ3RoICE9IGhzcmVxLT5yZXEuYWN0dWFsIHx8IGhzcmVxLT5yZXEuemVybykKKwkJCWlzX2xhc3QgPSBmYWxzZTsKKwkJZWxzZQorCQkJaXNfbGFzdCA9IHRydWU7CisJfQorCisJaWYgKGlzX2xhc3QpIHsKKwkJczNjX2hzdWRjX2NvbXBsZXRlX3JlcXVlc3QoaHNlcCwgaHNyZXEsIDApOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBzM2NfaHN1ZGNfcmVhZF9maWZvIC0gUmVhZCB0aGUgbmV4dCBjaHVuayBvZiBkYXRhIGZyb20gRVAgZmlmby4KKyAqIEBoc2VwOiBFbmRwb2ludCBmcm9tIHdoaWNoIHRoZSBkYXRhIGlzIHRvIGJlIHJlYWQuCisgKiBAaHNyZXE6IFRyYW5zZmVyIHJlcXVlc3QgdG8gd2hpY2ggdGhlIG5leHQgY2h1bmsgb2YgZGF0YSByZWFkIGlzIHdyaXR0ZW4uCisgKgorICogUmVhZCB0aGUgbmV4dCBjaHVuayBvZiBkYXRhIGZyb20gdGhlIGVuZHBvaW50IEZJRk8gYW5kIGEgd3JpdGUgaXQgdG8gdGhlCisgKiB0cmFuc2ZlciByZXF1ZXN0IGJ1ZmZlci4gSWYgdGhlIHRyYW5zZmVyIHJlcXVlc3QgY29tcGxldGVzLCAxIGlzIHJldHVybmVkLAorICogb3RoZXJ3aXNlIDAgaXMgcmV0dXJuZWQuCisgKi8KK3N0YXRpYyBpbnQgczNjX2hzdWRjX3JlYWRfZmlmbyhzdHJ1Y3QgczNjX2hzdWRjX2VwICpoc2VwLAorCQkJCXN0cnVjdCBzM2NfaHN1ZGNfcmVxICpoc3JlcSkKK3sKKwlzdHJ1Y3QgczNjX2hzdWRjICpoc3VkYyA9IGhzZXAtPmRldjsKKwl1MzIgY3NyLCBvZmZzZXQ7CisJdTE2ICpidWYsIHdvcmQ7CisJdTMyIGJ1ZmxlbiwgcmNudCwgcmxlbjsKKwl2b2lkIF9faW9tZW0gKmZpZm8gPSBoc2VwLT5maWZvOworCXUzMiBpc19zaG9ydCA9IDA7CisKKwlvZmZzZXQgPSAoZXBfaW5kZXgoaHNlcCkpID8gUzNDX0VTUiA6IFMzQ19FUDBTUjsKKwljc3IgPSByZWFkbChoc3VkYy0+cmVncyArIG9mZnNldCk7CisJaWYgKCEoY3NyICYgUzNDX0VTUl9SWF9TVUNDRVNTKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlidWYgPSBoc3JlcS0+cmVxLmJ1ZiArIGhzcmVxLT5yZXEuYWN0dWFsOworCXByZWZldGNodyhidWYpOworCWJ1ZmxlbiA9IGhzcmVxLT5yZXEubGVuZ3RoIC0gaHNyZXEtPnJlcS5hY3R1YWw7CisKKwlyY250ID0gcmVhZGwoaHN1ZGMtPnJlZ3MgKyBTM0NfQlJDUik7CisJcmxlbiA9IChjc3IgJiBTM0NfRVNSX0xXTykgPyAocmNudCAqIDIgLSAxKSA6IChyY250ICogMik7CisKKwloc3JlcS0+cmVxLmFjdHVhbCArPSBtaW4ocmxlbiwgYnVmbGVuKTsKKwlpc19zaG9ydCA9IChybGVuIDwgaHNlcC0+ZXAubWF4cGFja2V0KTsKKworCXdoaWxlIChyY250LS0gIT0gMCkgeworCQl3b3JkID0gKHUxNilyZWFkbChmaWZvKTsKKwkJaWYgKGJ1ZmxlbikgeworCQkJKmJ1ZisrID0gd29yZDsKKwkJCWJ1Zmxlbi0tOworCQl9IGVsc2UgeworCQkJaHNyZXEtPnJlcS5zdGF0dXMgPSAtRU9WRVJGTE9XOworCQl9CisJfQorCisJd3JpdGVsKFMzQ19FU1JfUlhfU1VDQ0VTUywgaHN1ZGMtPnJlZ3MgKyBvZmZzZXQpOworCisJaWYgKGlzX3Nob3J0IHx8IGhzcmVxLT5yZXEuYWN0dWFsID09IGhzcmVxLT5yZXEubGVuZ3RoKSB7CisJCXMzY19oc3VkY19jb21wbGV0ZV9yZXF1ZXN0KGhzZXAsIGhzcmVxLCAwKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogczNjX2hzdWRjX2VwaW5faW50ciAtIEhhbmRsZSBpbi1lbmRwb2ludCBpbnRlcnJ1cHQuCisgKiBAaHN1ZGMgLSBEZXZpY2UgY29udHJvbGxlciBmb3Igd2hpY2ggdGhlIGludGVycnVwdCBpcyB0byBiZSBoYW5kbGVkLgorICogQGVwX2lkeCAtIEVuZHBvaW50IG51bWJlciBvbiB3aGljaCBhbiBpbnRlcnJ1cHQgaXMgcGVuZGluZy4KKyAqCisgKiBIYW5kbGVzIGludGVycnVwdCBmb3IgYSBpbi1lbmRwb2ludC4gVGhlIGludGVycnVwdHMgdGhhdCBhcmUgaGFuZGxlZCBhcmUKKyAqIHN0YWxsIGFuZCBkYXRhIHRyYW5zbWl0IGNvbXBsZXRlIGludGVycnVwdC4KKyAqLworc3RhdGljIHZvaWQgczNjX2hzdWRjX2VwaW5faW50cihzdHJ1Y3QgczNjX2hzdWRjICpoc3VkYywgdTMyIGVwX2lkeCkKK3sKKwlzdHJ1Y3QgczNjX2hzdWRjX2VwICpoc2VwID0gJmhzdWRjLT5lcFtlcF9pZHhdOworCXN0cnVjdCBzM2NfaHN1ZGNfcmVxICpoc3JlcTsKKwl1MzIgY3NyOworCisJY3NyID0gcmVhZGwoKHUzMiloc3VkYy0+cmVncyArIFMzQ19FU1IpOworCWlmIChjc3IgJiBTM0NfRVNSX1NUQUxMKSB7CisJCXdyaXRlbChTM0NfRVNSX1NUQUxMLCBoc3VkYy0+cmVncyArIFMzQ19FU1IpOworCQlyZXR1cm47CisJfQorCisJaWYgKGNzciAmIFMzQ19FU1JfVFhfU1VDQ0VTUykgeworCQl3cml0ZWwoUzNDX0VTUl9UWF9TVUNDRVNTLCBoc3VkYy0+cmVncyArIFMzQ19FU1IpOworCQlpZiAobGlzdF9lbXB0eSgmaHNlcC0+cXVldWUpKQorCQkJcmV0dXJuOworCisJCWhzcmVxID0gbGlzdF9lbnRyeShoc2VwLT5xdWV1ZS5uZXh0LAorCQkJCXN0cnVjdCBzM2NfaHN1ZGNfcmVxLCBxdWV1ZSk7CisJCWlmICgoczNjX2hzdWRjX3dyaXRlX2ZpZm8oaHNlcCwgaHNyZXEpID09IDApICYmCisJCQkJKGNzciAmIFMzQ19FU1JfUFNJRl9UV08pKQorCQkJczNjX2hzdWRjX3dyaXRlX2ZpZm8oaHNlcCwgaHNyZXEpOworCX0KK30KKworLyoqCisgKiBzM2NfaHN1ZGNfZXBvdXRfaW50ciAtIEhhbmRsZSBvdXQtZW5kcG9pbnQgaW50ZXJydXB0LgorICogQGhzdWRjIC0gRGV2aWNlIGNvbnRyb2xsZXIgZm9yIHdoaWNoIHRoZSBpbnRlcnJ1cHQgaXMgdG8gYmUgaGFuZGxlZC4KKyAqIEBlcF9pZHggLSBFbmRwb2ludCBudW1iZXIgb24gd2hpY2ggYW4gaW50ZXJydXB0IGlzIHBlbmRpbmcuCisgKgorICogSGFuZGxlcyBpbnRlcnJ1cHQgZm9yIGEgb3V0LWVuZHBvaW50LiBUaGUgaW50ZXJydXB0cyB0aGF0IGFyZSBoYW5kbGVkIGFyZQorICogc3RhbGwsIGZsdXNoIGFuZCBkYXRhIHJlYWR5IGludGVycnVwdC4KKyAqLworc3RhdGljIHZvaWQgczNjX2hzdWRjX2Vwb3V0X2ludHIoc3RydWN0IHMzY19oc3VkYyAqaHN1ZGMsIHUzMiBlcF9pZHgpCit7CisJc3RydWN0IHMzY19oc3VkY19lcCAqaHNlcCA9ICZoc3VkYy0+ZXBbZXBfaWR4XTsKKwlzdHJ1Y3QgczNjX2hzdWRjX3JlcSAqaHNyZXE7CisJdTMyIGNzcjsKKworCWNzciA9IHJlYWRsKCh1MzIpaHN1ZGMtPnJlZ3MgKyBTM0NfRVNSKTsKKwlpZiAoY3NyICYgUzNDX0VTUl9TVEFMTCkgeworCQl3cml0ZWwoUzNDX0VTUl9TVEFMTCwgaHN1ZGMtPnJlZ3MgKyBTM0NfRVNSKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChjc3IgJiBTM0NfRVNSX0ZMVVNIKSB7CisJCV9fb3JyMzIoaHN1ZGMtPnJlZ3MgKyBTM0NfRUNSLCBTM0NfRUNSX0ZMVVNIKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChjc3IgJiBTM0NfRVNSX1JYX1NVQ0NFU1MpIHsKKwkJaWYgKGxpc3RfZW1wdHkoJmhzZXAtPnF1ZXVlKSkKKwkJCXJldHVybjsKKworCQloc3JlcSA9IGxpc3RfZW50cnkoaHNlcC0+cXVldWUubmV4dCwKKwkJCQlzdHJ1Y3QgczNjX2hzdWRjX3JlcSwgcXVldWUpOworCQlpZiAoKChzM2NfaHN1ZGNfcmVhZF9maWZvKGhzZXAsIGhzcmVxKSkgPT0gMCkgJiYKKwkJCQkoY3NyICYgUzNDX0VTUl9QU0lGX1RXTykpCisJCQlzM2NfaHN1ZGNfcmVhZF9maWZvKGhzZXAsIGhzcmVxKTsKKwl9Cit9CisKKy8qKiBzM2NfaHN1ZGNfc2V0X2hhbHQgLSBTZXQgb3IgY2xlYXIgYSBlbmRwb2ludCBoYWx0LgorICogQF9lcDogRW5kcG9pbnQgb24gd2hpY2ggaGFsdCBoYXMgdG8gYmUgc2V0IG9yIGNsZWFyZWQuCisgKiBAdmFsdWU6IDEgZm9yIHNldHRpbmcgaGFsdCBvbiBlbmRwb2ludCwgMCB0byBjbGVhciBoYWx0LgorICoKKyAqIFNldCBvciBjbGVhciBlbmRwb2ludCBoYWx0LiBJZiBoYWx0IGlzIHNldCwgdGhlIGVuZHBvaW50IGlzIHN0b3BwZWQuCisgKiBJZiBoYWx0IGlzIGNsZWFyZWQsIGZvciBpbi1lbmRwb2ludHMsIGlmIHRoZXJlIGFyZSBhbnkgcGVuZGluZworICogdHJhbnNmZXIgcmVxdWVzdHMsIHRyYW5zZmVycyBhcmUgc3RhcnRlZC4KKyAqLworc3RhdGljIGludCBzM2NfaHN1ZGNfc2V0X2hhbHQoc3RydWN0IHVzYl9lcCAqX2VwLCBpbnQgdmFsdWUpCit7CisJc3RydWN0IHMzY19oc3VkY19lcCAqaHNlcCA9IG91cl9lcChfZXApOworCXN0cnVjdCBzM2NfaHN1ZGMgKmhzdWRjID0gaHNlcC0+ZGV2OworCXN0cnVjdCBzM2NfaHN1ZGNfcmVxICpoc3JlcTsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCXUzMiBlY3I7CisJdTMyIG9mZnNldDsKKworCWlmICh2YWx1ZSAmJiBlcF9pc19pbihoc2VwKSAmJiAhbGlzdF9lbXB0eSgmaHNlcC0+cXVldWUpKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZoc3VkYy0+bG9jaywgaXJxZmxhZ3MpOworCXNldF9pbmRleChoc3VkYywgZXBfaW5kZXgoaHNlcCkpOworCW9mZnNldCA9IChlcF9pbmRleChoc2VwKSkgPyBTM0NfRUNSIDogUzNDX0VQMENSOworCWVjciA9IHJlYWRsKGhzdWRjLT5yZWdzICsgb2Zmc2V0KTsKKworCWlmICh2YWx1ZSkgeworCQllY3IgfD0gUzNDX0VDUl9TVEFMTDsKKwkJaWYgKGVwX2luZGV4KGhzZXApKQorCQkJZWNyIHw9IFMzQ19FQ1JfRkxVU0g7CisJCWhzZXAtPnN0b3BwZWQgPSAxOworCX0gZWxzZSB7CisJCWVjciAmPSB+UzNDX0VDUl9TVEFMTDsKKwkJaHNlcC0+c3RvcHBlZCA9IGhzZXAtPndlZGdlID0gMDsKKwl9CisJd3JpdGVsKGVjciwgaHN1ZGMtPnJlZ3MgKyBvZmZzZXQpOworCisJaWYgKGVwX2lzX2luKGhzZXApICYmICFsaXN0X2VtcHR5KCZoc2VwLT5xdWV1ZSkgJiYgIXZhbHVlKSB7CisJCWhzcmVxID0gbGlzdF9lbnRyeShoc2VwLT5xdWV1ZS5uZXh0LAorCQkJc3RydWN0IHMzY19oc3VkY19yZXEsIHF1ZXVlKTsKKwkJaWYgKGhzcmVxKQorCQkJczNjX2hzdWRjX3dyaXRlX2ZpZm8oaHNlcCwgaHNyZXEpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhzdWRjLT5sb2NrLCBpcnFmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKy8qKiBzM2NfaHN1ZGNfc2V0X3dlZGdlIC0gU2V0cyB0aGUgaGFsdCBmZWF0dXJlIHdpdGggdGhlIGNsZWFyIHJlcXVlc3RzIGlnbm9yZWQKKyAqIEBfZXA6IEVuZHBvaW50IG9uIHdoaWNoIHdlZGdlIGhhcyB0byBiZSBzZXQuCisgKgorICogU2V0cyB0aGUgaGFsdCBmZWF0dXJlIHdpdGggdGhlIGNsZWFyIHJlcXVlc3RzIGlnbm9yZWQuCisgKi8KK3N0YXRpYyBpbnQgczNjX2hzdWRjX3NldF93ZWRnZShzdHJ1Y3QgdXNiX2VwICpfZXApCit7CisJc3RydWN0IHMzY19oc3VkY19lcCAqaHNlcCA9IG91cl9lcChfZXApOworCisJaWYgKCFoc2VwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhzZXAtPndlZGdlID0gMTsKKwlyZXR1cm4gdXNiX2VwX3NldF9oYWx0KF9lcCk7Cit9CisKKy8qKiBzM2NfaHN1ZGNfaGFuZGxlX3JlcWZlYXQgLSBIYW5kbGUgc2V0IGZlYXR1cmUgb3IgY2xlYXIgZmVhdHVyZSByZXF1ZXN0cy4KKyAqIEBfZXA6IERldmljZSBjb250cm9sbGVyIG9uIHdoaWNoIHRoZSBzZXQvY2xlYXIgZmVhdHVyZSBuZWVkcyB0byBiZSBoYW5kbGVkLgorICogQGN0cmw6IENvbnRyb2wgcmVxdWVzdCBhcyByZWNlaXZlZCBvbiB0aGUgZW5kcG9pbnQgMC4KKyAqCisgKiBIYW5kbGUgc2V0IGZlYXR1cmUgb3IgY2xlYXIgZmVhdHVyZSBjb250cm9sIHJlcXVlc3RzIG9uIHRoZSBjb250cm9sIGVuZHBvaW50LgorICovCitzdGF0aWMgaW50IHMzY19oc3VkY19oYW5kbGVfcmVxZmVhdChzdHJ1Y3QgczNjX2hzdWRjICpoc3VkYywKKwkJCQkJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybCkKK3sKKwlzdHJ1Y3QgczNjX2hzdWRjX2VwICpoc2VwOworCWJvb2wgc2V0ID0gKGN0cmwtPmJSZXF1ZXN0ID09IFVTQl9SRVFfU0VUX0ZFQVRVUkUpOworCXU4IGVwX251bSA9IGN0cmwtPndJbmRleCAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSzsKKworCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgPT0gVVNCX1JFQ0lQX0VORFBPSU5UKSB7CisJCWhzZXAgPSAmaHN1ZGMtPmVwW2VwX251bV07CisJCXN3aXRjaCAobGUxNl90b19jcHUoY3RybC0+d1ZhbHVlKSkgeworCQljYXNlIFVTQl9FTkRQT0lOVF9IQUxUOgorCQkJaWYgKHNldCB8fCAoIXNldCAmJiAhaHNlcC0+d2VkZ2UpKQorCQkJCXMzY19oc3VkY19zZXRfaGFsdCgmaHNlcC0+ZXAsIHNldCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiAtRU5PRU5UOworfQorCisvKioKKyAqIHMzY19oc3VkY19wcm9jZXNzX3JlcV9zdGF0dXMgLSBIYW5kbGUgZ2V0IHN0YXR1cyBjb250cm9sIHJlcXVlc3QuCisgKiBAaHN1ZGM6IERldmljZSBjb250cm9sbGVyIG9uIHdoaWNoIGdldCBzdGF0dXMgcmVxdWVzdCBoYXMgYmUgaGFuZGxlZC4KKyAqIEBjdHJsOiBDb250cm9sIHJlcXVlc3QgYXMgcmVjZWl2ZWQgb24gdGhlIGVuZHBvaW50IDAuCisgKgorICogSGFuZGxlIGdldCBzdGF0dXMgY29udHJvbCByZXF1ZXN0IHJlY2VpdmVkIG9uIGNvbnRyb2wgZW5kcG9pbnQuCisgKi8KK3N0YXRpYyB2b2lkIHMzY19oc3VkY19wcm9jZXNzX3JlcV9zdGF0dXMoc3RydWN0IHMzY19oc3VkYyAqaHN1ZGMsCisJCQkJCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwpCit7CisJc3RydWN0IHMzY19oc3VkY19lcCAqaHNlcDAgPSAmaHN1ZGMtPmVwWzBdOworCXN0cnVjdCBzM2NfaHN1ZGNfcmVxIGhzcmVxOworCXN0cnVjdCBzM2NfaHN1ZGNfZXAgKmhzZXA7CisJX19sZTE2IHJlcGx5OworCXU4IGVwbnVtOworCisJc3dpdGNoIChjdHJsLT5iUmVxdWVzdFR5cGUgJiBVU0JfUkVDSVBfTUFTSykgeworCWNhc2UgVVNCX1JFQ0lQX0RFVklDRToKKwkJcmVwbHkgPSBjcHVfdG9fbGUxNigwKTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQl9SRUNJUF9JTlRFUkZBQ0U6CisJCXJlcGx5ID0gY3B1X3RvX2xlMTYoMCk7CisJCWJyZWFrOworCisJY2FzZSBVU0JfUkVDSVBfRU5EUE9JTlQ6CisJCWVwbnVtID0gbGUxNl90b19jcHUoY3RybC0+d0luZGV4KSAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSzsKKwkJaHNlcCA9ICZoc3VkYy0+ZXBbZXBudW1dOworCQlyZXBseSA9IGNwdV90b19sZTE2KGhzZXAtPnN0b3BwZWQgPyAxIDogMCk7CisJCWJyZWFrOworCX0KKworCUlOSVRfTElTVF9IRUFEKCZoc3JlcS5xdWV1ZSk7CisJaHNyZXEucmVxLmxlbmd0aCA9IDI7CisJaHNyZXEucmVxLmJ1ZiA9ICZyZXBseTsKKwloc3JlcS5yZXEuYWN0dWFsID0gMDsKKwloc3JlcS5yZXEuY29tcGxldGUgPSBOVUxMOworCXMzY19oc3VkY193cml0ZV9maWZvKGhzZXAwLCAmaHNyZXEpOworfQorCisvKioKKyAqIHMzY19oc3VkY19wcm9jZXNzX3NldHVwIC0gUHJvY2VzcyBjb250cm9sIHJlcXVlc3QgcmVjZWl2ZWQgb24gZW5kcG9pbnQgMC4KKyAqIEBoc3VkYzogRGV2aWNlIGNvbnRyb2xsZXIgb24gd2hpY2ggY29udHJvbCByZXF1ZXN0IGhhcyBiZWVuIHJlY2VpdmVkLgorICoKKyAqIFJlYWQgdGhlIGNvbnRyb2wgcmVxdWVzdCByZWNlaXZlZCBvbiBlbmRwb2ludCAwLCBkZWNvZGUgaXQgYW5kIGhhbmRsZQorICogdGhlIHJlcXVlc3QuCisgKi8KK3N0YXRpYyB2b2lkIHMzY19oc3VkY19wcm9jZXNzX3NldHVwKHN0cnVjdCBzM2NfaHN1ZGMgKmhzdWRjKQoreworCXN0cnVjdCBzM2NfaHN1ZGNfZXAgKmhzZXAgPSAmaHN1ZGMtPmVwWzBdOworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgY3RybCA9IHswfTsKKwlpbnQgcmV0OworCisJczNjX2hzdWRjX251a2VfZXAoaHNlcCwgLUVQUk9UTyk7CisJczNjX2hzdWRjX3JlYWRfc2V0dXBfcGt0KGhzdWRjLCAodTE2ICopJmN0cmwpOworCisJaWYgKGN0cmwuYlJlcXVlc3RUeXBlICYgVVNCX0RJUl9JTikgeworCQloc2VwLT5iRW5kcG9pbnRBZGRyZXNzIHw9IFVTQl9ESVJfSU47CisJCWhzdWRjLT5lcDBzdGF0ZSA9IERBVEFfU1RBVEVfWE1JVDsKKwl9IGVsc2UgeworCQloc2VwLT5iRW5kcG9pbnRBZGRyZXNzICY9IH5VU0JfRElSX0lOOworCQloc3VkYy0+ZXAwc3RhdGUgPSBEQVRBX1NUQVRFX1JFQ1Y7CisJfQorCisJc3dpdGNoIChjdHJsLmJSZXF1ZXN0KSB7CisJY2FzZSBVU0JfUkVRX1NFVF9BRERSRVNTOgorCQlpZiAoY3RybC5iUmVxdWVzdFR5cGUgIT0gKFVTQl9UWVBFX1NUQU5EQVJEIHwgVVNCX1JFQ0lQX0RFVklDRSkpCisJCQlicmVhazsKKwkJaHN1ZGMtPmVwMHN0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJCXJldHVybjsKKworCWNhc2UgVVNCX1JFUV9HRVRfU1RBVFVTOgorCQlpZiAoKGN0cmwuYlJlcXVlc3RUeXBlICYgVVNCX1RZUEVfTUFTSykgIT0gVVNCX1RZUEVfU1RBTkRBUkQpCisJCQlicmVhazsKKwkJczNjX2hzdWRjX3Byb2Nlc3NfcmVxX3N0YXR1cyhoc3VkYywgJmN0cmwpOworCQlyZXR1cm47CisKKwljYXNlIFVTQl9SRVFfU0VUX0ZFQVRVUkU6CisJY2FzZSBVU0JfUkVRX0NMRUFSX0ZFQVRVUkU6CisJCWlmICgoY3RybC5iUmVxdWVzdFR5cGUgJiBVU0JfVFlQRV9NQVNLKSAhPSBVU0JfVFlQRV9TVEFOREFSRCkKKwkJCWJyZWFrOworCQlzM2NfaHN1ZGNfaGFuZGxlX3JlcWZlYXQoaHN1ZGMsICZjdHJsKTsKKwkJaHN1ZGMtPmVwMHN0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJCXJldHVybjsKKwl9CisKKwlpZiAoaHN1ZGMtPmRyaXZlcikgeworCQlzcGluX3VubG9jaygmaHN1ZGMtPmxvY2spOworCQlyZXQgPSBoc3VkYy0+ZHJpdmVyLT5zZXR1cCgmaHN1ZGMtPmdhZGdldCwgJmN0cmwpOworCQlzcGluX2xvY2soJmhzdWRjLT5sb2NrKTsKKworCQlpZiAoY3RybC5iUmVxdWVzdCA9PSBVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OKSB7CisJCQloc2VwLT5iRW5kcG9pbnRBZGRyZXNzICY9IH5VU0JfRElSX0lOOworCQkJaHN1ZGMtPmVwMHN0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJCX0KKworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2Vycihoc3VkYy0+ZGV2LCAic2V0dXAgZmFpbGVkLCByZXR1cm5lZCAlZFxuIiwKKwkJCQkJCXJldCk7CisJCQlzM2NfaHN1ZGNfc2V0X2hhbHQoJmhzZXAtPmVwLCAxKTsKKwkJCWhzdWRjLT5lcDBzdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCQkJaHNlcC0+YkVuZHBvaW50QWRkcmVzcyAmPSB+VVNCX0RJUl9JTjsKKwkJfQorCX0KK30KKworLyoqIHMzY19oc3VkY19oYW5kbGVfZXAwX2ludHIgLSBIYW5kbGUgZW5kcG9pbnQgMCBpbnRlcnJ1cHQuCisgKiBAaHN1ZGM6IERldmljZSBjb250cm9sbGVyIG9uIHdoaWNoIGVuZHBvaW50IDAgaW50ZXJydXB0IGhhcyBvY2N1cmVkLgorICoKKyAqIEhhbmRsZSBlbmRwb2ludCAwIGludGVycnVwdCB3aGVuIGl0IG9jY3Vycy4gRVAwIGludGVycnVwdCBjb3VsZCBvY2N1cgorICogd2hlbiBhIHN0YWxsIGhhbmRzaGFrZSBpcyBzZW50IHRvIGhvc3Qgb3IgZGF0YSBpcyBzZW50L3JlY2VpdmVkIG9uCisgKiBlbmRwb2ludCAwLgorICovCitzdGF0aWMgdm9pZCBzM2NfaHN1ZGNfaGFuZGxlX2VwMF9pbnRyKHN0cnVjdCBzM2NfaHN1ZGMgKmhzdWRjKQoreworCXN0cnVjdCBzM2NfaHN1ZGNfZXAgKmhzZXAgPSAmaHN1ZGMtPmVwWzBdOworCXN0cnVjdCBzM2NfaHN1ZGNfcmVxICpoc3JlcTsKKwl1MzIgY3NyID0gcmVhZGwoaHN1ZGMtPnJlZ3MgKyBTM0NfRVAwU1IpOworCXUzMiBlY3I7CisKKwlpZiAoY3NyICYgUzNDX0VQMFNSX1NUQUxMKSB7CisJCWVjciA9IHJlYWRsKGhzdWRjLT5yZWdzICsgUzNDX0VQMENSKTsKKwkJZWNyICY9IH4oUzNDX0VDUl9TVEFMTCB8IFMzQ19FQ1JfRkxVU0gpOworCQl3cml0ZWwoZWNyLCBoc3VkYy0+cmVncyArIFMzQ19FUDBDUik7CisKKwkJd3JpdGVsKFMzQ19FUDBTUl9TVEFMTCwgaHN1ZGMtPnJlZ3MgKyBTM0NfRVAwU1IpOworCQloc2VwLT5zdG9wcGVkID0gMDsKKworCQlzM2NfaHN1ZGNfbnVrZV9lcChoc2VwLCAtRUNPTk5BQk9SVEVEKTsKKwkJaHN1ZGMtPmVwMHN0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJCWhzZXAtPmJFbmRwb2ludEFkZHJlc3MgJj0gflVTQl9ESVJfSU47CisJCXJldHVybjsKKwl9CisKKwlpZiAoY3NyICYgUzNDX0VQMFNSX1RYX1NVQ0NFU1MpIHsKKwkJd3JpdGVsKFMzQ19FUDBTUl9UWF9TVUNDRVNTLCBoc3VkYy0+cmVncyArIFMzQ19FUDBTUik7CisJCWlmIChlcF9pc19pbihoc2VwKSkgeworCQkJaWYgKGxpc3RfZW1wdHkoJmhzZXAtPnF1ZXVlKSkKKwkJCQlyZXR1cm47CisKKwkJCWhzcmVxID0gbGlzdF9lbnRyeShoc2VwLT5xdWV1ZS5uZXh0LAorCQkJCQlzdHJ1Y3QgczNjX2hzdWRjX3JlcSwgcXVldWUpOworCQkJczNjX2hzdWRjX3dyaXRlX2ZpZm8oaHNlcCwgaHNyZXEpOworCQl9CisJfQorCisJaWYgKGNzciAmIFMzQ19FUDBTUl9SWF9TVUNDRVNTKSB7CisJCWlmIChoc3VkYy0+ZXAwc3RhdGUgPT0gV0FJVF9GT1JfU0VUVVApCisJCQlzM2NfaHN1ZGNfcHJvY2Vzc19zZXR1cChoc3VkYyk7CisJCWVsc2UgeworCQkJaWYgKCFlcF9pc19pbihoc2VwKSkgeworCQkJCWlmIChsaXN0X2VtcHR5KCZoc2VwLT5xdWV1ZSkpCisJCQkJCXJldHVybjsKKwkJCQloc3JlcSA9IGxpc3RfZW50cnkoaHNlcC0+cXVldWUubmV4dCwKKwkJCQkJc3RydWN0IHMzY19oc3VkY19yZXEsIHF1ZXVlKTsKKwkJCQlzM2NfaHN1ZGNfcmVhZF9maWZvKGhzZXAsIGhzcmVxKTsKKwkJCX0KKwkJfQorCX0KK30KKworLyoqCisgKiBzM2NfaHN1ZGNfZXBfZW5hYmxlIC0gRW5hYmxlIGEgZW5kcG9pbnQuCisgKiBAX2VwOiBUaGUgZW5kcG9pbnQgdG8gYmUgZW5hYmxlZC4KKyAqIEBkZXNjOiBFbmRwb2ludCBkZXNjcmlwdG9yLgorICoKKyAqIEVuYWJsZXMgYSBlbmRwb2ludCB3aGVuIGNhbGxlZCBmcm9tIHRoZSBnYWRnZXQgZHJpdmVyLiBFbmRwb2ludCBzdGFsbCBpZgorICogYW55IGlzIGNsZWFyZWQsIHRyYW5zZmVyIHR5cGUgaXMgY29uZmlndXJlZCBhbmQgZW5kcG9pbnQgaW50ZXJydXB0IGlzCisgKiBlbmFibGVkLgorICovCitzdGF0aWMgaW50IHMzY19oc3VkY19lcF9lbmFibGUoc3RydWN0IHVzYl9lcCAqX2VwLAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYykKK3sKKwlzdHJ1Y3QgczNjX2hzdWRjX2VwICpoc2VwOworCXN0cnVjdCBzM2NfaHN1ZGMgKmhzdWRjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGVjciA9IDA7CisKKwloc2VwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IHMzY19oc3VkY19lcCwgZXApOworCWlmICghX2VwIHx8ICFkZXNjIHx8IGhzZXAtPmRlc2MgfHwgX2VwLT5uYW1lID09IGVwMG5hbWUKKwkJfHwgZGVzYy0+YkRlc2NyaXB0b3JUeXBlICE9IFVTQl9EVF9FTkRQT0lOVAorCQl8fCBoc2VwLT5iRW5kcG9pbnRBZGRyZXNzICE9IGRlc2MtPmJFbmRwb2ludEFkZHJlc3MKKwkJfHwgZXBfbWF4cGFja2V0KGhzZXApIDwgbGUxNl90b19jcHUoZGVzYy0+d01heFBhY2tldFNpemUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgoZGVzYy0+Ym1BdHRyaWJ1dGVzID09IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEsKKwkJJiYgbGUxNl90b19jcHUoZGVzYy0+d01heFBhY2tldFNpemUpICE9IGVwX21heHBhY2tldChoc2VwKSkKKwkJfHwgIWRlc2MtPndNYXhQYWNrZXRTaXplKQorCQlyZXR1cm4gLUVSQU5HRTsKKworCWhzdWRjID0gaHNlcC0+ZGV2OworCWlmICghaHN1ZGMtPmRyaXZlciB8fCBoc3VkYy0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKQorCQlyZXR1cm4gLUVTSFVURE9XTjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZoc3VkYy0+bG9jaywgZmxhZ3MpOworCisJc2V0X2luZGV4KGhzdWRjLCBoc2VwLT5iRW5kcG9pbnRBZGRyZXNzKTsKKwllY3IgfD0gKCh1c2JfZW5kcG9pbnRfeGZlcl9pbnQoZGVzYykpID8gUzNDX0VDUl9JRU1TIDogUzNDX0VDUl9EVUVOKTsKKwl3cml0ZWwoZWNyLCBoc3VkYy0+cmVncyArIFMzQ19FQ1IpOworCisJaHNlcC0+c3RvcHBlZCA9IGhzZXAtPndlZGdlID0gMDsKKwloc2VwLT5kZXNjID0gZGVzYzsKKwloc2VwLT5lcC5tYXhwYWNrZXQgPSBsZTE2X3RvX2NwdShkZXNjLT53TWF4UGFja2V0U2l6ZSk7CisKKwlzM2NfaHN1ZGNfc2V0X2hhbHQoX2VwLCAwKTsKKwlfX3NldF9iaXQoZXBfaW5kZXgoaHNlcCksIGhzdWRjLT5yZWdzICsgUzNDX0VJRVIpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHN1ZGMtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBzM2NfaHN1ZGNfZXBfZGlzYWJsZSAtIERpc2FibGUgYSBlbmRwb2ludC4KKyAqIEBfZXA6IFRoZSBlbmRwb2ludCB0byBiZSBkaXNhYmxlZC4KKyAqIEBkZXNjOiBFbmRwb2ludCBkZXNjcmlwdG9yLgorICoKKyAqIERpc2FibGVzIGEgZW5kcG9pbnQgd2hlbiBjYWxsZWQgZnJvbSB0aGUgZ2FkZ2V0IGRyaXZlci4KKyAqLworc3RhdGljIGludCBzM2NfaHN1ZGNfZXBfZGlzYWJsZShzdHJ1Y3QgdXNiX2VwICpfZXApCit7CisJc3RydWN0IHMzY19oc3VkY19lcCAqaHNlcCA9IG91cl9lcChfZXApOworCXN0cnVjdCBzM2NfaHN1ZGMgKmhzdWRjID0gaHNlcC0+ZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIV9lcCB8fCAhaHNlcC0+ZGVzYykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHN1ZGMtPmxvY2ssIGZsYWdzKTsKKworCXNldF9pbmRleChoc3VkYywgaHNlcC0+YkVuZHBvaW50QWRkcmVzcyk7CisJX19jbGVhcl9iaXQoZXBfaW5kZXgoaHNlcCksIGhzdWRjLT5yZWdzICsgUzNDX0VJRVIpOworCisJczNjX2hzdWRjX251a2VfZXAoaHNlcCwgLUVTSFVURE9XTik7CisKKwloc2VwLT5kZXNjID0gMDsKKwloc2VwLT5zdG9wcGVkID0gMTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhzdWRjLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogczNjX2hzdWRjX2FsbG9jX3JlcXVlc3QgLSBBbGxvY2F0ZSBhIG5ldyByZXF1ZXN0LgorICogQF9lcDogRW5kcG9pbnQgZm9yIHdoaWNoIHJlcXVlc3QgaXMgYWxsb2NhdGVkIChub3QgdXNlZCkuCisgKiBAZ2ZwX2ZsYWdzOiBGbGFncyB1c2VkIGZvciB0aGUgYWxsb2NhdGlvbi4KKyAqCisgKiBBbGxvY2F0ZXMgYSBzaW5nbGUgdHJhbnNmZXIgcmVxdWVzdCBzdHJ1Y3R1cmUgd2hlbiBjYWxsZWQgZnJvbSBnYWRnZXQgZHJpdmVyLgorICovCitzdGF0aWMgc3RydWN0IHVzYl9yZXF1ZXN0ICpzM2NfaHN1ZGNfYWxsb2NfcmVxdWVzdChzdHJ1Y3QgdXNiX2VwICpfZXAsCisJCQkJCQlnZnBfdCBnZnBfZmxhZ3MpCit7CisJc3RydWN0IHMzY19oc3VkY19yZXEgKmhzcmVxOworCisJaHNyZXEgPSBremFsbG9jKHNpemVvZiAqaHNyZXEsIGdmcF9mbGFncyk7CisJaWYgKCFoc3JlcSkKKwkJcmV0dXJuIDA7CisKKwlJTklUX0xJU1RfSEVBRCgmaHNyZXEtPnF1ZXVlKTsKKwlyZXR1cm4gJmhzcmVxLT5yZXE7Cit9CisKKy8qKgorICogczNjX2hzdWRjX2ZyZWVfcmVxdWVzdCAtIERlYWxsb2NhdGUgYSByZXF1ZXN0LgorICogQGVwOiBFbmRwb2ludCBmb3Igd2hpY2ggcmVxdWVzdCBpcyBkZWFsbG9jYXRlZCAobm90IHVzZWQpLgorICogQF9yZXE6IFJlcXVlc3QgdG8gYmUgZGVhbGxvY2F0ZWQuCisgKgorICogQWxsb2NhdGVzIGEgc2luZ2xlIHRyYW5zZmVyIHJlcXVlc3Qgc3RydWN0dXJlIHdoZW4gY2FsbGVkIGZyb20gZ2FkZ2V0IGRyaXZlci4KKyAqLworc3RhdGljIHZvaWQgczNjX2hzdWRjX2ZyZWVfcmVxdWVzdChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpfcmVxKQoreworCXN0cnVjdCBzM2NfaHN1ZGNfcmVxICpoc3JlcTsKKworCWhzcmVxID0gY29udGFpbmVyX29mKF9yZXEsIHN0cnVjdCBzM2NfaHN1ZGNfcmVxLCByZXEpOworCVdBUk5fT04oIWxpc3RfZW1wdHkoJmhzcmVxLT5xdWV1ZSkpOworCWtmcmVlKGhzcmVxKTsKK30KKworLyoqCisgKiBzM2NfaHN1ZGNfcXVldWUgLSBRdWV1ZSBhIHRyYW5zZmVyIHJlcXVlc3QgZm9yIHRoZSBlbmRwb2ludC4KKyAqIEBfZXA6IEVuZHBvaW50IGZvciB3aGljaCB0aGUgcmVxdWVzdCBpcyBxdWV1ZWQuCisgKiBAX3JlcTogUmVxdWVzdCB0byBiZSBxdWV1ZWQuCisgKiBAZ2ZwX2ZsYWdzOiBOb3QgdXNlZC4KKyAqCisgKiBTdGFydCBvciBlbnF1ZXVlIGEgcmVxdWVzdCBmb3IgYSBlbmRwb2ludCB3aGVuIGNhbGxlZCBmcm9tIGdhZGdldCBkcml2ZXIuCisgKi8KK3N0YXRpYyBpbnQgczNjX2hzdWRjX3F1ZXVlKHN0cnVjdCB1c2JfZXAgKl9lcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpfcmVxLAorCQkJZ2ZwX3QgZ2ZwX2ZsYWdzKQoreworCXN0cnVjdCBzM2NfaHN1ZGNfcmVxICpoc3JlcTsKKwlzdHJ1Y3QgczNjX2hzdWRjX2VwICpoc2VwOworCXN0cnVjdCBzM2NfaHN1ZGMgKmhzdWRjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIG9mZnNldDsKKwl1MzIgY3NyOworCisJaHNyZXEgPSBjb250YWluZXJfb2YoX3JlcSwgc3RydWN0IHMzY19oc3VkY19yZXEsIHJlcSk7CisJaWYgKCghX3JlcSB8fCAhX3JlcS0+Y29tcGxldGUgfHwgIV9yZXEtPmJ1ZiB8fAorCQkhbGlzdF9lbXB0eSgmaHNyZXEtPnF1ZXVlKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaHNlcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBzM2NfaHN1ZGNfZXAsIGVwKTsKKwloc3VkYyA9IGhzZXAtPmRldjsKKwlpZiAoIWhzdWRjLT5kcml2ZXIgfHwgaHN1ZGMtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikKKwkJcmV0dXJuIC1FU0hVVERPV047CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHN1ZGMtPmxvY2ssIGZsYWdzKTsKKwlzZXRfaW5kZXgoaHN1ZGMsIGhzZXAtPmJFbmRwb2ludEFkZHJlc3MpOworCisJX3JlcS0+c3RhdHVzID0gLUVJTlBST0dSRVNTOworCV9yZXEtPmFjdHVhbCA9IDA7CisKKwlpZiAoIWVwX2luZGV4KGhzZXApICYmIF9yZXEtPmxlbmd0aCA9PSAwKSB7CisJCWhzdWRjLT5lcDBzdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCQlzM2NfaHN1ZGNfY29tcGxldGVfcmVxdWVzdChoc2VwLCBoc3JlcSwgMCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhzdWRjLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOworCX0KKworCWlmIChsaXN0X2VtcHR5KCZoc2VwLT5xdWV1ZSkgJiYgIWhzZXAtPnN0b3BwZWQpIHsKKwkJb2Zmc2V0ID0gKGVwX2luZGV4KGhzZXApKSA/IFMzQ19FU1IgOiBTM0NfRVAwU1I7CisJCWlmIChlcF9pc19pbihoc2VwKSkgeworCQkJY3NyID0gcmVhZGwoKHUzMiloc3VkYy0+cmVncyArIG9mZnNldCk7CisJCQlpZiAoIShjc3IgJiBTM0NfRVNSX1RYX1NVQ0NFU1MpICYmCisJCQkJKHMzY19oc3VkY193cml0ZV9maWZvKGhzZXAsIGhzcmVxKSA9PSAxKSkKKwkJCQloc3JlcSA9IDA7CisJCX0gZWxzZSB7CisJCQljc3IgPSByZWFkbCgodTMyKWhzdWRjLT5yZWdzICsgb2Zmc2V0KTsKKwkJCWlmICgoY3NyICYgUzNDX0VTUl9SWF9TVUNDRVNTKQorCQkJCSAgICYmIChzM2NfaHN1ZGNfcmVhZF9maWZvKGhzZXAsIGhzcmVxKSA9PSAxKSkKKwkJCQloc3JlcSA9IDA7CisJCX0KKwl9CisKKwlpZiAoaHNyZXEgIT0gMCkKKwkJbGlzdF9hZGRfdGFpbCgmaHNyZXEtPnF1ZXVlLCAmaHNlcC0+cXVldWUpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHN1ZGMtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBzM2NfaHN1ZGNfZGVxdWV1ZSAtIERlcXVldWUgYSB0cmFuc2ZlciByZXF1ZXN0IGZyb20gYW4gZW5kcG9pbnQuCisgKiBAX2VwOiBFbmRwb2ludCBmcm9tIHdoaWNoIHRoZSByZXF1ZXN0IGlzIGRlcXVldWVkLgorICogQF9yZXE6IFJlcXVlc3QgdG8gYmUgZGVxdWV1ZWQuCisgKgorICogRGVxdWV1ZSBhIHJlcXVlc3QgZnJvbSBhIGVuZHBvaW50IHdoZW4gY2FsbGVkIGZyb20gZ2FkZ2V0IGRyaXZlci4KKyAqLworc3RhdGljIGludCBzM2NfaHN1ZGNfZGVxdWV1ZShzdHJ1Y3QgdXNiX2VwICpfZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSkKK3sKKwlzdHJ1Y3QgczNjX2hzdWRjX2VwICpoc2VwID0gb3VyX2VwKF9lcCk7CisJc3RydWN0IHMzY19oc3VkYyAqaHN1ZGMgPSBoc2VwLT5kZXY7CisJc3RydWN0IHMzY19oc3VkY19yZXEgKmhzcmVxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwloc2VwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IHMzY19oc3VkY19lcCwgZXApOworCWlmICghX2VwIHx8IGhzZXAtPmVwLm5hbWUgPT0gZXAwbmFtZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHN1ZGMtPmxvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoaHNyZXEsICZoc2VwLT5xdWV1ZSwgcXVldWUpIHsKKwkJaWYgKCZoc3JlcS0+cmVxID09IF9yZXEpCisJCQlicmVhazsKKwl9CisJaWYgKCZoc3JlcS0+cmVxICE9IF9yZXEpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHN1ZGMtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc2V0X2luZGV4KGhzdWRjLCBoc2VwLT5iRW5kcG9pbnRBZGRyZXNzKTsKKwlzM2NfaHN1ZGNfY29tcGxldGVfcmVxdWVzdChoc2VwLCBoc3JlcSwgLUVDT05OUkVTRVQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHN1ZGMtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZXBfb3BzIHMzY19oc3VkY19lcF9vcHMgPSB7CisJLmVuYWJsZSA9IHMzY19oc3VkY19lcF9lbmFibGUsCisJLmRpc2FibGUgPSBzM2NfaHN1ZGNfZXBfZGlzYWJsZSwKKwkuYWxsb2NfcmVxdWVzdCA9IHMzY19oc3VkY19hbGxvY19yZXF1ZXN0LAorCS5mcmVlX3JlcXVlc3QgPSBzM2NfaHN1ZGNfZnJlZV9yZXF1ZXN0LAorCS5xdWV1ZSA9IHMzY19oc3VkY19xdWV1ZSwKKwkuZGVxdWV1ZSA9IHMzY19oc3VkY19kZXF1ZXVlLAorCS5zZXRfaGFsdCA9IHMzY19oc3VkY19zZXRfaGFsdCwKKwkuc2V0X3dlZGdlID0gczNjX2hzdWRjX3NldF93ZWRnZSwKK307CisKKy8qKgorICogczNjX2hzdWRjX2luaXRlcCAtIEluaXRpYWxpemUgYSBlbmRwb2ludCB0byBkZWZhdWx0IHN0YXRlLgorICogQGhzdWRjIC0gUmVmZXJlbmNlIHRvIHRoZSBkZXZpY2UgY29udHJvbGxlci4KKyAqIEBoc2VwIC0gRW5kcG9pbnQgdG8gYmUgaW5pdGlhbGl6ZWQuCisgKiBAZXBudW0gLSBBZGRyZXNzIHRvIGJlIGFzc2lnbmVkIHRvIHRoZSBlbmRwb2ludC4KKyAqCisgKiBJbml0aWFsaXplIGEgZW5kcG9pbnQgd2l0aCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIHMzY19oc3VkY19pbml0ZXAoc3RydWN0IHMzY19oc3VkYyAqaHN1ZGMsCisJCQkJc3RydWN0IHMzY19oc3VkY19lcCAqaHNlcCwgaW50IGVwbnVtKQoreworCWNoYXIgKmRpcjsKKworCWlmICgoZXBudW0gJSAyKSA9PSAwKSB7CisJCWRpciA9ICJvdXQiOworCX0gZWxzZSB7CisJCWRpciA9ICJpbiI7CisJCWhzZXAtPmJFbmRwb2ludEFkZHJlc3MgPSBVU0JfRElSX0lOOworCX0KKworCWhzZXAtPmJFbmRwb2ludEFkZHJlc3MgfD0gZXBudW07CisJaWYgKGVwbnVtKQorCQlzbnByaW50Zihoc2VwLT5uYW1lLCBzaXplb2YoaHNlcC0+bmFtZSksICJlcCVkJXMiLCBlcG51bSwgZGlyKTsKKwllbHNlCisJCXNucHJpbnRmKGhzZXAtPm5hbWUsIHNpemVvZihoc2VwLT5uYW1lKSwgIiVzIiwgZXAwbmFtZSk7CisKKwlJTklUX0xJU1RfSEVBRCgmaHNlcC0+cXVldWUpOworCUlOSVRfTElTVF9IRUFEKCZoc2VwLT5lcC5lcF9saXN0KTsKKwlpZiAoZXBudW0pCisJCWxpc3RfYWRkX3RhaWwoJmhzZXAtPmVwLmVwX2xpc3QsICZoc3VkYy0+Z2FkZ2V0LmVwX2xpc3QpOworCisJaHNlcC0+ZGV2ID0gaHN1ZGM7CisJaHNlcC0+ZXAubmFtZSA9IGhzZXAtPm5hbWU7CisJaHNlcC0+ZXAubWF4cGFja2V0ID0gZXBudW0gPyA1MTIgOiA2NDsKKwloc2VwLT5lcC5vcHMgPSAmczNjX2hzdWRjX2VwX29wczsKKwloc2VwLT5maWZvID0gaHN1ZGMtPnJlZ3MgKyBTM0NfQlIoZXBudW0pOworCWhzZXAtPmRlc2MgPSAwOworCWhzZXAtPnN0b3BwZWQgPSAwOworCWhzZXAtPndlZGdlID0gMDsKKworCXNldF9pbmRleChoc3VkYywgZXBudW0pOworCXdyaXRlbChoc2VwLT5lcC5tYXhwYWNrZXQsIGhzdWRjLT5yZWdzICsgUzNDX01QUik7Cit9CisKKy8qKgorICogczNjX2hzdWRjX3NldHVwX2VwIC0gQ29uZmlndXJlIGFsbCBlbmRwb2ludHMgdG8gZGVmYXVsdCBzdGF0ZS4KKyAqIEBoc3VkYzogUmVmZXJlbmNlIHRvIGRldmljZSBjb250cm9sbGVyLgorICoKKyAqIENvbmZpZ3VyZXMgYWxsIGVuZHBvaW50cyB0byBkZWZhdWx0IHN0YXRlLgorICovCitzdGF0aWMgdm9pZCBzM2NfaHN1ZGNfc2V0dXBfZXAoc3RydWN0IHMzY19oc3VkYyAqaHN1ZGMpCit7CisJaW50IGVwbnVtOworCisJaHN1ZGMtPmVwMHN0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJSU5JVF9MSVNUX0hFQUQoJmhzdWRjLT5nYWRnZXQuZXBfbGlzdCk7CisJZm9yIChlcG51bSA9IDA7IGVwbnVtIDwgaHN1ZGMtPnBkLT5lcG51bTsgZXBudW0rKykKKwkJczNjX2hzdWRjX2luaXRlcChoc3VkYywgJmhzdWRjLT5lcFtlcG51bV0sIGVwbnVtKTsKK30KKworLyoqCisgKiBzM2NfaHN1ZGNfcmVjb25maWcgLSBSZWNvbmZpZ3VyZSB0aGUgZGV2aWNlIGNvbnRyb2xsZXIgdG8gZGVmYXVsdCBzdGF0ZS4KKyAqIEBoc3VkYzogUmVmZXJlbmNlIHRvIGRldmljZSBjb250cm9sbGVyLgorICoKKyAqIFJlY29uZmlndXJlcyB0aGUgZGV2aWNlIGNvbnRyb2xsZXIgcmVnaXN0ZXJzIHRvIGEgZGVmYXVsdCBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQgczNjX2hzdWRjX3JlY29uZmlnKHN0cnVjdCBzM2NfaHN1ZGMgKmhzdWRjKQoreworCXdyaXRlbCgweEFBLCBoc3VkYy0+cmVncyArIFMzQ19FRFIpOworCXdyaXRlbCgxLCBoc3VkYy0+cmVncyArIFMzQ19FSUVSKTsKKwl3cml0ZWwoMCwgaHN1ZGMtPnJlZ3MgKyBTM0NfVFIpOworCXdyaXRlbChTM0NfU0NSX0RUWklFTl9FTiB8IFMzQ19TQ1JfUlJEX0VOIHwgUzNDX1NDUl9TVVNfRU4gfAorCQkJUzNDX1NDUl9SU1RfRU4sIGhzdWRjLT5yZWdzICsgUzNDX1NDUik7CisJd3JpdGVsKDAsIGhzdWRjLT5yZWdzICsgUzNDX0VQMENSKTsKKworCXMzY19oc3VkY19zZXR1cF9lcChoc3VkYyk7Cit9CisKKy8qKgorICogczNjX2hzdWRjX2lycSAtIEludGVycnVwdCBoYW5kbGVyIGZvciBkZXZpY2UgY29udHJvbGxlci4KKyAqIEBpcnE6IE5vdCB1c2VkLgorICogQF9kZXY6IFJlZmVyZW5jZSB0byB0aGUgZGV2aWNlIGNvbnRyb2xsZXIuCisgKgorICogSW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBkZXZpY2UgY29udHJvbGxlci4gVGhpcyBoYW5kbGVyIGhhbmRsZXMgY29udHJvbGxlcgorICogaW50ZXJydXB0cyBhbmQgZW5kcG9pbnQgaW50ZXJydXB0cy4KKyAqLworc3RhdGljIGlycXJldHVybl90IHMzY19oc3VkY19pcnEoaW50IGlycSwgdm9pZCAqX2RldikKK3sKKwlzdHJ1Y3QgczNjX2hzdWRjICpoc3VkYyA9IF9kZXY7CisJc3RydWN0IHMzY19oc3VkY19lcCAqaHNlcDsKKwl1MzIgZXBfaW50cjsKKwl1MzIgc3lzX3N0YXR1czsKKwl1MzIgZXBfaWR4OworCisJc3Bpbl9sb2NrKCZoc3VkYy0+bG9jayk7CisKKwlzeXNfc3RhdHVzID0gcmVhZGwoaHN1ZGMtPnJlZ3MgKyBTM0NfU1NSKTsKKwllcF9pbnRyID0gcmVhZGwoaHN1ZGMtPnJlZ3MgKyBTM0NfRUlSKSAmIDB4M0ZGOworCisJaWYgKCFlcF9pbnRyICYmICEoc3lzX3N0YXR1cyAmIFMzQ19TU1JfRFRaSUVOX0VOKSkgeworCQlzcGluX3VubG9jaygmaHN1ZGMtPmxvY2spOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJaWYgKHN5c19zdGF0dXMpIHsKKwkJaWYgKHN5c19zdGF0dXMgJiBTM0NfU1NSX1ZCVVNPTikKKwkJCXdyaXRlbChTM0NfU1NSX1ZCVVNPTiwgaHN1ZGMtPnJlZ3MgKyBTM0NfU1NSKTsKKworCQlpZiAoc3lzX3N0YXR1cyAmIFMzQ19TU1JfRVJSKQorCQkJd3JpdGVsKFMzQ19TU1JfRVJSLCBoc3VkYy0+cmVncyArIFMzQ19TU1IpOworCisJCWlmIChzeXNfc3RhdHVzICYgUzNDX1NTUl9TREUpIHsKKwkJCXdyaXRlbChTM0NfU1NSX1NERSwgaHN1ZGMtPnJlZ3MgKyBTM0NfU1NSKTsKKwkJCWhzdWRjLT5nYWRnZXQuc3BlZWQgPSAoc3lzX3N0YXR1cyAmIFMzQ19TU1JfSFNQKSA/CisJCQkJVVNCX1NQRUVEX0hJR0ggOiBVU0JfU1BFRURfRlVMTDsKKwkJfQorCisJCWlmIChzeXNfc3RhdHVzICYgUzNDX1NTUl9TVVNQRU5EKSB7CisJCQl3cml0ZWwoUzNDX1NTUl9TVVNQRU5ELCBoc3VkYy0+cmVncyArIFMzQ19TU1IpOworCQkJaWYgKGhzdWRjLT5nYWRnZXQuc3BlZWQgIT0gVVNCX1NQRUVEX1VOS05PV04KKwkJCQkmJiBoc3VkYy0+ZHJpdmVyICYmIGhzdWRjLT5kcml2ZXItPnN1c3BlbmQpCisJCQkJaHN1ZGMtPmRyaXZlci0+c3VzcGVuZCgmaHN1ZGMtPmdhZGdldCk7CisJCX0KKworCQlpZiAoc3lzX3N0YXR1cyAmIFMzQ19TU1JfUkVTVU1FKSB7CisJCQl3cml0ZWwoUzNDX1NTUl9SRVNVTUUsIGhzdWRjLT5yZWdzICsgUzNDX1NTUik7CisJCQlpZiAoaHN1ZGMtPmdhZGdldC5zcGVlZCAhPSBVU0JfU1BFRURfVU5LTk9XTgorCQkJCSYmIGhzdWRjLT5kcml2ZXIgJiYgaHN1ZGMtPmRyaXZlci0+cmVzdW1lKQorCQkJCWhzdWRjLT5kcml2ZXItPnJlc3VtZSgmaHN1ZGMtPmdhZGdldCk7CisJCX0KKworCQlpZiAoc3lzX3N0YXR1cyAmIFMzQ19TU1JfUkVTRVQpIHsKKwkJCXdyaXRlbChTM0NfU1NSX1JFU0VULCBoc3VkYy0+cmVncyArIFMzQ19TU1IpOworCQkJZm9yIChlcF9pZHggPSAwOyBlcF9pZHggPCBoc3VkYy0+cGQtPmVwbnVtOyBlcF9pZHgrKykgeworCQkJCWhzZXAgPSAmaHN1ZGMtPmVwW2VwX2lkeF07CisJCQkJaHNlcC0+c3RvcHBlZCA9IDE7CisJCQkJczNjX2hzdWRjX251a2VfZXAoaHNlcCwgLUVDT05OUkVTRVQpOworCQkJfQorCQkJczNjX2hzdWRjX3JlY29uZmlnKGhzdWRjKTsKKwkJCWhzdWRjLT5lcDBzdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCQl9CisJfQorCisJaWYgKGVwX2ludHIgJiBTM0NfRUlSX0VQMCkgeworCQl3cml0ZWwoUzNDX0VJUl9FUDAsIGhzdWRjLT5yZWdzICsgUzNDX0VJUik7CisJCXNldF9pbmRleChoc3VkYywgMCk7CisJCXMzY19oc3VkY19oYW5kbGVfZXAwX2ludHIoaHN1ZGMpOworCX0KKworCWVwX2ludHIgPj49IDE7CisJZXBfaWR4ID0gMTsKKwl3aGlsZSAoZXBfaW50cikgeworCQlpZiAoZXBfaW50ciAmIDEpICB7CisJCQloc2VwID0gJmhzdWRjLT5lcFtlcF9pZHhdOworCQkJc2V0X2luZGV4KGhzdWRjLCBlcF9pZHgpOworCQkJd3JpdGVsKDEgPDwgZXBfaWR4LCBoc3VkYy0+cmVncyArIFMzQ19FSVIpOworCQkJaWYgKGVwX2lzX2luKGhzZXApKQorCQkJCXMzY19oc3VkY19lcGluX2ludHIoaHN1ZGMsIGVwX2lkeCk7CisJCQllbHNlCisJCQkJczNjX2hzdWRjX2Vwb3V0X2ludHIoaHN1ZGMsIGVwX2lkeCk7CisJCX0KKwkJZXBfaW50ciA+Pj0gMTsKKwkJZXBfaWR4Kys7CisJfQorCisJc3Bpbl91bmxvY2soJmhzdWRjLT5sb2NrKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK2ludCB1c2JfZ2FkZ2V0X3Byb2JlX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlciwKKwkJaW50ICgqYmluZCkoc3RydWN0IHVzYl9nYWRnZXQgKikpCit7CisJc3RydWN0IHMzY19oc3VkYyAqaHN1ZGMgPSB0aGVfY29udHJvbGxlcjsKKwlpbnQgcmV0OworCisJaWYgKCFkcml2ZXIKKwkJfHwgKGRyaXZlci0+c3BlZWQgIT0gVVNCX1NQRUVEX0ZVTEwgJiYKKwkJCWRyaXZlci0+c3BlZWQgIT0gVVNCX1NQRUVEX0hJR0gpCisJCXx8ICFiaW5kCisJCXx8ICFkcml2ZXItPnVuYmluZCB8fCAhZHJpdmVyLT5kaXNjb25uZWN0IHx8ICFkcml2ZXItPnNldHVwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghaHN1ZGMpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKGhzdWRjLT5kcml2ZXIpCisJCXJldHVybiAtRUJVU1k7CisKKwloc3VkYy0+ZHJpdmVyID0gZHJpdmVyOworCWhzdWRjLT5nYWRnZXQuZGV2LmRyaXZlciA9ICZkcml2ZXItPmRyaXZlcjsKKwloc3VkYy0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX1VOS05PV047CisJcmV0ID0gZGV2aWNlX2FkZCgmaHN1ZGMtPmdhZGdldC5kZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihoc3VkYy0+ZGV2LCAiZmFpbGVkIHRvIHByb2JlIGdhZGdldCBkZXZpY2UiKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBiaW5kKCZoc3VkYy0+Z2FkZ2V0KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoaHN1ZGMtPmRldiwgIiVzOiBiaW5kIGZhaWxlZFxuIiwgaHN1ZGMtPmdhZGdldC5uYW1lKTsKKwkJZGV2aWNlX2RlbCgmaHN1ZGMtPmdhZGdldC5kZXYpOworCisJCWhzdWRjLT5kcml2ZXIgPSBOVUxMOworCQloc3VkYy0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOworCQlyZXR1cm4gcmV0OworCX0KKworCWVuYWJsZV9pcnEoaHN1ZGMtPmlycSk7CisJZGV2X2luZm8oaHN1ZGMtPmRldiwgImJvdW5kIGRyaXZlciAlc1xuIiwgZHJpdmVyLT5kcml2ZXIubmFtZSk7CisKKwlzM2NfaHN1ZGNfcmVjb25maWcoaHN1ZGMpOworCXMzY19oc3VkY19pbml0X3BoeSgpOworCWlmIChoc3VkYy0+cGQtPmdwaW9faW5pdCkKKwkJaHN1ZGMtPnBkLT5ncGlvX2luaXQoKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3Byb2JlX2RyaXZlcik7CisKK2ludCB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQoreworCXN0cnVjdCBzM2NfaHN1ZGMgKmhzdWRjID0gdGhlX2NvbnRyb2xsZXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghaHN1ZGMpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCFkcml2ZXIgfHwgZHJpdmVyICE9IGhzdWRjLT5kcml2ZXIgfHwgIWRyaXZlci0+dW5iaW5kKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZoc3VkYy0+bG9jaywgZmxhZ3MpOworCWhzdWRjLT5kcml2ZXIgPSAwOworCXMzY19oc3VkY191bmluaXRfcGh5KCk7CisJaWYgKGhzdWRjLT5wZC0+Z3Bpb191bmluaXQpCisJCWhzdWRjLT5wZC0+Z3Bpb191bmluaXQoKTsKKwlzM2NfaHN1ZGNfc3RvcF9hY3Rpdml0eShoc3VkYywgZHJpdmVyKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoc3VkYy0+bG9jaywgZmxhZ3MpOworCisJZHJpdmVyLT51bmJpbmQoJmhzdWRjLT5nYWRnZXQpOworCWRldmljZV9kZWwoJmhzdWRjLT5nYWRnZXQuZGV2KTsKKwlkaXNhYmxlX2lycShoc3VkYy0+aXJxKTsKKworCWRldl9pbmZvKGhzdWRjLT5kZXYsICJ1bnJlZ2lzdGVyZWQgZ2FkZ2V0IGRyaXZlciAnJXMnXG4iLAorCQkJZHJpdmVyLT5kcml2ZXIubmFtZSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIpOworCitzdGF0aWMgaW5saW5lIHUzMiBzM2NfaHN1ZGNfcmVhZF9mcmFtZW5vKHN0cnVjdCBzM2NfaHN1ZGMgKmhzdWRjKQoreworCXJldHVybiByZWFkbChoc3VkYy0+cmVncyArIFMzQ19GTlIpICYgMHgzRkY7Cit9CisKK3N0YXRpYyBpbnQgczNjX2hzdWRjX2dhZGdldF9nZXRmcmFtZShzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXJldHVybiBzM2NfaHN1ZGNfcmVhZF9mcmFtZW5vKHRvX2hzdWRjKGdhZGdldCkpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfb3BzIHMzY19oc3VkY19nYWRnZXRfb3BzID0geworCS5nZXRfZnJhbWUJPSBzM2NfaHN1ZGNfZ2FkZ2V0X2dldGZyYW1lLAorfTsKKworc3RhdGljIGludCBzM2NfaHN1ZGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBzM2NfaHN1ZGMgKmhzdWRjOworCXN0cnVjdCBzM2MyNHh4X2hzdWRjX3BsYXRkYXRhICpwZCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWludCByZXQ7CisKKwloc3VkYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzM2NfaHN1ZGMpICsKKwkJCXNpemVvZihzdHJ1Y3QgczNjX2hzdWRjX2VwKSAqIHBkLT5lcG51bSwKKwkJCUdGUF9LRVJORUwpOworCWlmICghaHN1ZGMpIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgYWxsb2NhdGUgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJdGhlX2NvbnRyb2xsZXIgPSBoc3VkYzsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOworCWhzdWRjLT5kZXYgPSBkZXY7CisJaHN1ZGMtPnBkID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoZGV2LCAidW5hYmxlIHRvIG9idGFpbiBkcml2ZXIgcmVzb3VyY2UgZGF0YVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX3JlczsKKwl9CisKKwloc3VkYy0+bWVtX3JzcmMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLAorCQkJCWRldl9uYW1lKCZwZGV2LT5kZXYpKTsKKwlpZiAoIWhzdWRjLT5tZW1fcnNyYykgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZXNlcnZlIHJlZ2lzdGVyIGFyZWFcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9yZXM7CisJfQorCisJaHN1ZGMtPnJlZ3MgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFoc3VkYy0+cmVncykgeworCQlkZXZfZXJyKGRldiwgImVycm9yIG1hcHBpbmcgZGV2aWNlIHJlZ2lzdGVyIGFyZWFcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyX3JlbWFwOworCX0KKworCXJldCA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJ1bmFibGUgdG8gb2J0YWluIElSUSBudW1iZXJcbiIpOworCQlnb3RvIGVycl9pcnE7CisJfQorCWhzdWRjLT5pcnEgPSByZXQ7CisKKwlyZXQgPSByZXF1ZXN0X2lycShoc3VkYy0+aXJxLCBzM2NfaHN1ZGNfaXJxLCAwLCBkcml2ZXJfbmFtZSwgaHN1ZGMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiaXJxIHJlcXVlc3QgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfaXJxOworCX0KKworCXNwaW5fbG9ja19pbml0KCZoc3VkYy0+bG9jayk7CisKKwlkZXZpY2VfaW5pdGlhbGl6ZSgmaHN1ZGMtPmdhZGdldC5kZXYpOworCWRldl9zZXRfbmFtZSgmaHN1ZGMtPmdhZGdldC5kZXYsICJnYWRnZXQiKTsKKworCWhzdWRjLT5nYWRnZXQuaXNfZHVhbHNwZWVkID0gMTsKKwloc3VkYy0+Z2FkZ2V0Lm9wcyA9ICZzM2NfaHN1ZGNfZ2FkZ2V0X29wczsKKwloc3VkYy0+Z2FkZ2V0Lm5hbWUgPSBkZXZfbmFtZShkZXYpOworCWhzdWRjLT5nYWRnZXQuZGV2LnBhcmVudCA9IGRldjsKKwloc3VkYy0+Z2FkZ2V0LmRldi5kbWFfbWFzayA9IGRldi0+ZG1hX21hc2s7CisJaHN1ZGMtPmdhZGdldC5lcDAgPSAmaHN1ZGMtPmVwWzBdLmVwOworCisJaHN1ZGMtPmdhZGdldC5pc19vdGcgPSAwOworCWhzdWRjLT5nYWRnZXQuaXNfYV9wZXJpcGhlcmFsID0gMDsKKworCXMzY19oc3VkY19zZXR1cF9lcChoc3VkYyk7CisKKwloc3VkYy0+dWNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInVzYi1kZXZpY2UiKTsKKwlpZiAoSVNfRVJSKGhzdWRjLT51Y2xrKSkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBmaW5kIHVzYi1kZXZpY2UgY2xvY2sgc291cmNlXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoaHN1ZGMtPnVjbGspOworCX0KKwljbGtfZW5hYmxlKGhzdWRjLT51Y2xrKTsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisKKwlkaXNhYmxlX2lycShoc3VkYy0+aXJxKTsKKwlsb2NhbF9pcnFfZW5hYmxlKCk7CisJcmV0dXJuIDA7CisKK2Vycl9pcnE6CisJaW91bm1hcChoc3VkYy0+cmVncyk7CisKK2Vycl9yZW1hcDoKKwlyZWxlYXNlX3Jlc291cmNlKGhzdWRjLT5tZW1fcnNyYyk7CisJa2ZyZWUoaHN1ZGMtPm1lbV9yc3JjKTsKKworZXJyX3JlczoKKwlrZnJlZShoc3VkYyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjX2hzdWRjX2RyaXZlciA9IHsKKwkuZHJpdmVyCQk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gInMzYy1oc3VkYyIsCisJfSwKKwkucHJvYmUJCT0gczNjX2hzdWRjX3Byb2JlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgczNjX2hzdWRjX21vZGluaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzM2NfaHN1ZGNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHMzY19oc3VkY19tb2RleGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnMzY19oc3VkY19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzM2NfaHN1ZGNfbW9kaW5pdCk7Cittb2R1bGVfZXhpdChzM2NfaHN1ZGNfbW9kZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiU2Ftc3VuZyBTM0MyNFhYIFVTQiBoaWdoLXNwZWVkIGNvbnRyb2xsZXIgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJUaG9tYXMgQWJyYWhhbSA8dGhvbWFzLmFiQHNhbXN1bmcuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3N0b3JhZ2VfY29tbW9uLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvc3RvcmFnZV9jb21tb24uYwppbmRleCBiMDE1NTYxLi4xZmE0ZjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvc3RvcmFnZV9jb21tb24uYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvc3RvcmFnZV9jb21tb24uYwpAQCAtNzA4LDEzICs3MDgsMTQgQEAKIHN0YXRpYyBzc2l6ZV90IGZzZ19zdG9yZV9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXNzaXplX3QJCXJjID0gY291bnQ7CisJc3NpemVfdAkJcmM7CiAJc3RydWN0IGZzZ19sdW4JKmN1cmx1biA9IGZzZ19sdW5fZnJvbV9kZXYoZGV2KTsKIAlzdHJ1Y3Qgcndfc2VtYXBob3JlCSpmaWxlc2VtID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JdW5zaWduZWQgbG9uZwlybzsKKwl1bnNpZ25lZAlybzsKIAotCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDIsICZybykpCi0JCXJldHVybiAtRUlOVkFMOworCXJjID0ga3N0cnRvdWludChidWYsIDIsICZybyk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CiAKIAkvKgogCSAqIEFsbG93IHRoZSB3cml0ZS1lbmFibGUgc3RhdHVzIHRvIGNoYW5nZSBvbmx5IHdoaWxlIHRoZQpAQCAtNzI4LDYgKzcyOSw3IEBACiAJCWN1cmx1bi0+cm8gPSBybzsKIAkJY3VybHVuLT5pbml0aWFsbHlfcm8gPSBybzsKIAkJTERCRyhjdXJsdW4sICJyZWFkLW9ubHkgc3RhdHVzIHNldCB0byAlZFxuIiwgY3VybHVuLT5ybyk7CisJCXJjID0gY291bnQ7CiAJfQogCXVwX3JlYWQoZmlsZXNlbSk7CiAJcmV0dXJuIHJjOwpAQCAtNzM4LDEwICs3NDAsMTIgQEAKIAkJCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgZnNnX2x1bgkqY3VybHVuID0gZnNnX2x1bl9mcm9tX2RldihkZXYpOwotCXVuc2lnbmVkIGxvbmcJbm9mdWE7CisJdW5zaWduZWQJbm9mdWE7CisJaW50CQlyZXQ7CiAKLQlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAyLCAmbm9mdWEpKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXQgPSBrc3RydG91aW50KGJ1ZiwgMiwgJm5vZnVhKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJLyogU3luYyBkYXRhIHdoZW4gc3dpdGNoaW5nIGZyb20gYXN5bmMgbW9kZSB0byBzeW5jICovCiAJaWYgKCFub2Z1YSAmJiBjdXJsdW4tPm5vZnVhKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnIGIvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCmluZGV4IGUwZTA3ODcuLmFiMDg1ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcKQEAgLTEwNiwxMyArMTA2LDEzIEBACiAJZGVwZW5kcyBvbiBVU0JfRUhDSV9IQ0QgJiYgKFBQQ19DRUxMRUIgfHwgUFBDX1BTMyB8fCA0NDBFUFggfHwgXAogCQkJCSAgICBBUkNIX0lYUDRYWCB8fCBYUFNfVVNCX0hDRF9YSUxJTlggfHwgXAogCQkJCSAgICBQUENfTVBDNTEyeCB8fCBDUFVfQ0FWSVVNX09DVEVPTiB8fCBcCi0JCQkJICAgIFBNQ19NU1ApCisJCQkJICAgIFBNQ19NU1AgfHwgU1BBUkNfTEVPTikKIAlkZWZhdWx0IHkKIAogY29uZmlnIFVTQl9FSENJX0JJR19FTkRJQU5fREVTQwogCWJvb2wKIAlkZXBlbmRzIG9uIFVTQl9FSENJX0hDRCAmJiAoNDQwRVBYIHx8IEFSQ0hfSVhQNFhYIHx8IFhQU19VU0JfSENEX1hJTElOWCB8fCBcCi0JCQkJICAgIFBQQ19NUEM1MTJ4IHx8IFBNQ19NU1ApCisJCQkJICAgIFBQQ19NUEM1MTJ4IHx8IFBNQ19NU1AgfHwgU1BBUkNfTEVPTikKIAlkZWZhdWx0IHkKIAogY29uZmlnIFhQU19VU0JfSENEX1hJTElOWApAQCAtMTg4LDYgKzE4OCwxMiBAQAogCSAgRW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgb24tY2hpcCBFSENJIGNvbnRyb2xsZXIgb24gdGhlIFN1cGVySC4KIAkgIElmIHlvdSB1c2UgdGhlIFBDSSBFSENJIGNvbnRyb2xsZXIsIHRoaXMgb3B0aW9uIGlzIG5vdCBuZWNlc3NhcnkuCiAKK2NvbmZpZyBVU0JfRUhDSV9TNVAKKyAgICAgICBib29sZWFuICJTNVAgRUhDSSBzdXBwb3J0IgorICAgICAgIGRlcGVuZHMgb24gVVNCX0VIQ0lfSENEICYmIFBMQVRfUzVQCisgICAgICAgaGVscAorCSBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIFM1UCBTT0MncyBvbi1jaGlwIEVIQ0kgY29udHJvbGxlci4KKwogY29uZmlnIFVTQl9XOTBYOTAwX0VIQ0kKIAlib29sICJXOTBYOTAwKFc5MFA5MTApIEVIQ0kgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQl9FSENJX0hDRCAmJiBBUkNIX1c5MFg5MDAKQEAgLTIwMiw2ICsyMDgsMTUgQEAKIAkgIEl0IGlzIG5lZWRlZCBmb3IgaGlnaC1zcGVlZCAoNDgwTWJpdC9zZWMpIFVTQiAyLjAgZGV2aWNlCiAJICBzdXBwb3J0LgogCitjb25maWcgVVNCX0VIQ0lfQVRINzkKKwlib29sICJFSENJIHN1cHBvcnQgZm9yIEFSN1hYWC9BUjlYWFggU29DcyIKKwlkZXBlbmRzIG9uIFVTQl9FSENJX0hDRCAmJiAoU09DX0FSNzFYWCB8fCBTT0NfQVI3MjRYIHx8IFNPQ19BUjkxM1gpCisJc2VsZWN0IFVTQl9FSENJX1JPT1RfSFVCX1RUCisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCSAgRW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgYnVpbHQtaW4gRUhDSSBjb250cm9sbGVyIHByZXNlbnQKKwkgIG9uIHRoZSBBdGhlcm9zIEFSN1hYWC9BUjlYWFggU29Dcy4KKwogY29uZmlnIFVTQl9PWFUyMTBIUF9IQ0QKIAl0cmlzdGF0ZSAiT1hVMjEwSFAgSENEIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0IKQEAgLTI4Nyw2ICszMDIsMTQgQEAKIAkgIEVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIG9uLWNoaXAgT0hDSSBjb250cm9sbGVyIG9uCiAJICBPTUFQMyBhbmQgbGF0ZXIgY2hpcHMuCiAKK2NvbmZpZyBVU0JfT0hDSV9BVEg3OQorCWJvb2wgIlVTQiBPSENJIHN1cHBvcnQgZm9yIHRoZSBBdGhlcm9zIEFSNzFYWC9BUjcyNDAgU29DcyIKKwlkZXBlbmRzIG9uIFVTQl9PSENJX0hDRCAmJiAoU09DX0FSNzFYWCB8fCBTT0NfQVI3MjRYKQorCWRlZmF1bHQgeQorCWhlbHAKKwkgIEVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIGJ1aWx0LWluIE9IQ0kgY29udHJvbGxlciBwcmVzZW50IG9uIHRoZQorCSAgQXRoZXJvcyBBUjcxWFgvQVI3MjQwIFNvQ3MuCisKIGNvbmZpZyBVU0JfT0hDSV9IQ0RfUFBDX1NPQwogCWJvb2wgIk9IQ0kgc3VwcG9ydCBmb3Igb24tY2hpcCBQUEMgVVNCIGNvbnRyb2xsZXIiCiAJZGVwZW5kcyBvbiBVU0JfT0hDSV9IQ0QgJiYgKFNUQjAzeHh4IHx8IFBQQ19NUEM1Mnh4KQpAQCAtMzczLDcgKzM5Niw3IEBACiAKIGNvbmZpZyBVU0JfVUhDSV9IQ0QKIAl0cmlzdGF0ZSAiVUhDSSBIQ0QgKG1vc3QgSW50ZWwgYW5kIFZJQSkgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQiAmJiBQQ0kKKwlkZXBlbmRzIG9uIFVTQiAmJiAoUENJIHx8IFNQQVJDX0xFT04pCiAJLS0taGVscC0tLQogCSAgVGhlIFVuaXZlcnNhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIGlzIGEgc3RhbmRhcmQgYnkgSW50ZWwgZm9yCiAJICBhY2Nlc3NpbmcgdGhlIFVTQiBoYXJkd2FyZSBpbiB0aGUgUEMgKHdoaWNoIGlzIGFsc28gY2FsbGVkIHRoZSBVU0IKQEAgLTM4MiwxMSArNDA1LDI3IEBACiAJICB3aXRoIEludGVsIFBDSSBjaGlwc2V0cyAobGlrZSBpbnRlbCA0MzBUWCwgNDQwRlgsIDQ0MExYLCA0NDBCWCwKIAkgIGk4MTAsIGk4MjApIGNvbmZvcm0gdG8gdGhpcyBzdGFuZGFyZC4gQWxzbyBhbGwgVklBIFBDSSBjaGlwc2V0cwogCSAgKGxpa2UgVklBIFZQMiwgVlAzLCBNVlAzLCBBcG9sbG8gUHJvLCBBcG9sbG8gUHJvIElJIG9yIEFwb2xsbyBQcm8KLQkgIDEzMykuIElmIHVuc3VyZSwgc2F5IFkuCisJICAxMzMpIGFuZCBMRU9OL0dSTElCIFNvQ3Mgd2l0aCB0aGUgR1JVU0JIQyBjb250cm9sbGVyLgorCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdWhjaS1oY2QuCiAKK2NvbmZpZyBVU0JfVUhDSV9TVVBQT1JUX05PTl9QQ0lfSEMKKwlib29sCisJZGVwZW5kcyBvbiBVU0JfVUhDSV9IQ0QKKwlkZWZhdWx0IHkgaWYgU1BBUkNfTEVPTgorCitjb25maWcgVVNCX1VIQ0lfQklHX0VORElBTl9NTUlPCisJYm9vbAorCWRlcGVuZHMgb24gVVNCX1VIQ0lfU1VQUE9SVF9OT05fUENJX0hDICYmIFNQQVJDX0xFT04KKwlkZWZhdWx0IHkKKworY29uZmlnIFVTQl9VSENJX0JJR19FTkRJQU5fREVTQworCWJvb2wKKwlkZXBlbmRzIG9uIFVTQl9VSENJX1NVUFBPUlRfTk9OX1BDSV9IQyAmJiBTUEFSQ19MRU9OCisJZGVmYXVsdCB5CisKIGNvbmZpZyBVU0JfRkhDSV9IQ0QKIAl0cmlzdGF0ZSAiRnJlZXNjYWxlIFFFIFVTQiBIb3N0IENvbnRyb2xsZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQiAmJiBPRl9HUElPICYmIFFFX0dQSU8gJiYgUVVJQ0NfRU5HSU5FCkBAIC00NDQsNiArNDgzLDE2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzbDgxMS1oY2QuCiAKK2NvbmZpZyBVU0JfU0w4MTFfSENEX0lTTworCWJvb2wgInBhcnRpYWwgSVNPIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0JfU0w4MTFfSENECisJaGVscAorCSAgVGhlIGRyaXZlciBkb2Vzbid0IHN1cHBvcnQgaXNvX2ZyYW1lX2Rlc2MgKHlldCksIGJ1dCBmb3Igc29tZSBzaW1wbGUKKwkgIGRldmljZXMgdGhhdCBqdXN0IHF1ZXVlIG9uZSBJU08gZnJhbWUgcGVyIFVSQiwgdGhlbiBJU08gdHJhbnNmZXJzCisJICAic2hvdWxkIiB3b3JrIHVzaW5nIHRoZSBub3JtYWwgdXJiIHN0YXR1cyBmaWVsZHMuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKIGNvbmZpZyBVU0JfU0w4MTFfQ1MKIAl0cmlzdGF0ZSAiQ0YvUENNQ0lBIHN1cHBvcnQgZm9yIFNMODExSFMgSENEIgogCWRlcGVuZHMgb24gVVNCX1NMODExX0hDRCAmJiBQQ01DSUEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1hdGg3OS5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWF0aDc5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThjYzhhMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1hdGg3OS5jCkBAIC0wLDAgKzEsMjAyIEBACisvKgorICogIEJ1cyBHbHVlIGZvciBBdGhlcm9zIEFSN1hYWC9BUjlYWFggYnVpbHQtaW4gRUhDSSBjb250cm9sbGVyLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMSBHYWJvciBKdWhvcyA8anVob3NnQG9wZW53cnQub3JnPgorICogIENvcHlyaWdodCAoQykgMjAwOCBJbXJlIEthbG96IDxrYWxvekBvcGVud3J0Lm9yZz4KKyAqCisgKiAgUGFydHMgb2YgdGhpcyBmaWxlIGFyZSBiYXNlZCBvbiBBdGhlcm9zJyAyLjYuMTUgQlNQCisgKglDb3B5cmlnaHQgKEMpIDIwMDcgQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSW5jLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCitlbnVtIHsKKwlFSENJX0FUSDc5X0lQX1YxID0gMCwKKwlFSENJX0FUSDc5X0lQX1YyLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgZWhjaV9hdGg3OV9pZF90YWJsZVtdID0geworCXsKKwkJLm5hbWUJCT0gImFyNzF4eC1laGNpIiwKKwkJLmRyaXZlcl9kYXRhCT0gRUhDSV9BVEg3OV9JUF9WMSwKKwl9LAorCXsKKwkJLm5hbWUJCT0gImFyNzI0eC1laGNpIiwKKwkJLmRyaXZlcl9kYXRhCT0gRUhDSV9BVEg3OV9JUF9WMiwKKwl9LAorCXsKKwkJLm5hbWUJCT0gImFyOTEzeC1laGNpIiwKKwkJLmRyaXZlcl9kYXRhCT0gRUhDSV9BVEg3OV9JUF9WMiwKKwl9LAorCXsKKwkJLyogdGVybWluYXRpbmcgZW50cnkgKi8KKwl9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwbGF0Zm9ybSwgZWhjaV9hdGg3OV9pZF90YWJsZSk7CisKK3N0YXRpYyBpbnQgZWhjaV9hdGg3OV9pbml0KHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IGVoY2lfaGNkICplaGNpID0gaGNkX3RvX2VoY2koaGNkKTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGhjZC0+c2VsZi5jb250cm9sbGVyKTsKKwljb25zdCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkICppZDsKKwlpbnQgaGNsZW5ndGg7CisJaW50IHJldDsKKworCWlkID0gcGxhdGZvcm1fZ2V0X2RldmljZV9pZChwZGV2KTsKKwlpZiAoIWlkKSB7CisJCWRldl9lcnIoaGNkLT5zZWxmLmNvbnRyb2xsZXIsICJtaXNzaW5nIGRldmljZSBpZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWhjbGVuZ3RoID0gSENfTEVOR1RIKGVoY2ksIGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjX2NhcGJhc2UpKTsKKwlzd2l0Y2ggKGlkLT5kcml2ZXJfZGF0YSkgeworCWNhc2UgRUhDSV9BVEg3OV9JUF9WMToKKwkJZWhjaS0+aGFzX3N5bm9wc3lzX2hjX2J1ZyA9IDE7CisKKwkJZWhjaS0+Y2FwcyA9IGhjZC0+cmVnczsKKwkJZWhjaS0+cmVncyA9IGhjZC0+cmVncyArIGhjbGVuZ3RoOworCQlicmVhazsKKworCWNhc2UgRUhDSV9BVEg3OV9JUF9WMjoKKwkJaGNkLT5oYXNfdHQgPSAxOworCisJCWVoY2ktPmNhcHMgPSBoY2QtPnJlZ3MgKyAweDEwMDsKKwkJZWhjaS0+cmVncyA9IGhjZC0+cmVncyArIDB4MTAwICsgaGNsZW5ndGg7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCisJZGJnX2hjc19wYXJhbXMoZWhjaSwgInJlc2V0Iik7CisJZGJnX2hjY19wYXJhbXMoZWhjaSwgInJlc2V0Iik7CisJZWhjaS0+aGNzX3BhcmFtcyA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjc19wYXJhbXMpOworCWVoY2ktPnNicm4gPSAweDIwOworCisJZWhjaV9yZXNldChlaGNpKTsKKworCXJldCA9IGVoY2lfaW5pdChoY2QpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwllaGNpX3BvcnRfcG93ZXIoZWhjaSwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgZWhjaV9hdGg3OV9oY19kcml2ZXIgPSB7CisJLmRlc2NyaXB0aW9uCQk9IGhjZF9uYW1lLAorCS5wcm9kdWN0X2Rlc2MJCT0gIkF0aGVyb3MgYnVpbHQtaW4gRUhDSSBjb250cm9sbGVyIiwKKwkuaGNkX3ByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IGVoY2lfaGNkKSwKKwkuaXJxCQkJPSBlaGNpX2lycSwKKwkuZmxhZ3MJCQk9IEhDRF9NRU1PUlkgfCBIQ0RfVVNCMiwKKworCS5yZXNldAkJCT0gZWhjaV9hdGg3OV9pbml0LAorCS5zdGFydAkJCT0gZWhjaV9ydW4sCisJLnN0b3AJCQk9IGVoY2lfc3RvcCwKKwkuc2h1dGRvd24JCT0gZWhjaV9zaHV0ZG93biwKKworCS51cmJfZW5xdWV1ZQkJPSBlaGNpX3VyYl9lbnF1ZXVlLAorCS51cmJfZGVxdWV1ZQkJPSBlaGNpX3VyYl9kZXF1ZXVlLAorCS5lbmRwb2ludF9kaXNhYmxlCT0gZWhjaV9lbmRwb2ludF9kaXNhYmxlLAorCS5lbmRwb2ludF9yZXNldAkJPSBlaGNpX2VuZHBvaW50X3Jlc2V0LAorCisJLmdldF9mcmFtZV9udW1iZXIJPSBlaGNpX2dldF9mcmFtZSwKKworCS5odWJfc3RhdHVzX2RhdGEJPSBlaGNpX2h1Yl9zdGF0dXNfZGF0YSwKKwkuaHViX2NvbnRyb2wJCT0gZWhjaV9odWJfY29udHJvbCwKKworCS5yZWxpbnF1aXNoX3BvcnQJPSBlaGNpX3JlbGlucXVpc2hfcG9ydCwKKwkucG9ydF9oYW5kZWRfb3Zlcgk9IGVoY2lfcG9ydF9oYW5kZWRfb3ZlciwKKworCS5jbGVhcl90dF9idWZmZXJfY29tcGxldGUgPSBlaGNpX2NsZWFyX3R0X2J1ZmZlcl9jb21wbGV0ZSwKK307CisKK3N0YXRpYyBpbnQgZWhjaV9hdGg3OV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1c2JfaGNkICpoY2Q7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IGlycTsKKwlpbnQgcmV0OworCisJaWYgKHVzYl9kaXNhYmxlZCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAibm8gSVJRIHNwZWNpZmllZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlpcnEgPSByZXMtPnN0YXJ0OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJubyBiYXNlIGFkZHJlc3Mgc3BlY2lmaWVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaGNkID0gdXNiX2NyZWF0ZV9oY2QoJmVoY2lfYXRoNzlfaGNfZHJpdmVyLCAmcGRldi0+ZGV2LAorCQkJICAgICBkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CisJaWYgKCFoY2QpCisJCXJldHVybiAtRU5PTUVNOworCisJaGNkLT5yc3JjX3N0YXJ0CT0gcmVzLT5zdGFydDsKKwloY2QtPnJzcmNfbGVuCT0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbiwgaGNkX25hbWUpKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvbnRyb2xsZXIgYWxyZWFkeSBpbiB1c2VcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyX3B1dF9oY2Q7CisJfQorCisJaGNkLT5yZWdzID0gaW9yZW1hcChoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworCWlmICghaGNkLT5yZWdzKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImVycm9yIG1hcHBpbmcgbWVtb3J5XG4iKTsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CisJfQorCisJcmV0ID0gdXNiX2FkZF9oY2QoaGNkLCBpcnEsIElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfaW91bm1hcDsKKworCXJldHVybiAwOworCitlcnJfaW91bm1hcDoKKwlpb3VubWFwKGhjZC0+cmVncyk7CisKK2Vycl9yZWxlYXNlX3JlZ2lvbjoKKwlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKK2Vycl9wdXRfaGNkOgorCXVzYl9wdXRfaGNkKGhjZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBlaGNpX2F0aDc5X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXVzYl9yZW1vdmVfaGNkKGhjZCk7CisJaW91bm1hcChoY2QtPnJlZ3MpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworCXVzYl9wdXRfaGNkKGhjZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZWhjaV9hdGg3OV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IGVoY2lfYXRoNzlfcHJvYmUsCisJLnJlbW92ZQkJPSBlaGNpX2F0aDc5X3JlbW92ZSwKKwkuaWRfdGFibGUJPSBlaGNpX2F0aDc5X2lkX3RhYmxlLAorCS5kcml2ZXIgPSB7CisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkubmFtZQk9ICJhdGg3OS1laGNpIiwKKwl9Cit9OworCitNT0RVTEVfQUxJQVMoUExBVEZPUk1fTU9EVUxFX1BSRUZJWCAiYXRoNzktZWhjaSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWF0bWVsLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktYXRtZWwuYwppbmRleCBiMmVkNTVjLi5hNWEzZWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktYXRtZWwuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktYXRtZWwuYwpAQCAtNTYsNyArNTYsNyBAQAogCS8qIHJlZ2lzdGVycyBzdGFydCBhdCBvZmZzZXQgMHgwICovCiAJZWhjaS0+Y2FwcyA9IGhjZC0+cmVnczsKIAllaGNpLT5yZWdzID0gaGNkLT5yZWdzICsKLQkJSENfTEVOR1RIKGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjX2NhcGJhc2UpKTsKKwkJSENfTEVOR1RIKGVoY2ksIGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjX2NhcGJhc2UpKTsKIAlkYmdfaGNzX3BhcmFtcyhlaGNpLCAicmVzZXQiKTsKIAlkYmdfaGNjX3BhcmFtcyhlaGNpLCAicmVzZXQiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWF1MXh4eC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWF1MXh4eC5jCmluZGV4IGE4NjllM2MuLjQyYWU1NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1hdTF4eHguYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktYXUxeHh4LmMKQEAgLTE3NSw3ICsxNzUsOCBAQAogCiAJZWhjaSA9IGhjZF90b19laGNpKGhjZCk7CiAJZWhjaS0+Y2FwcyA9IGhjZC0+cmVnczsKLQllaGNpLT5yZWdzID0gaGNkLT5yZWdzICsgSENfTEVOR1RIKHJlYWRsKCZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7CisJZWhjaS0+cmVncyA9IGhjZC0+cmVncyArCisJCUhDX0xFTkdUSChlaGNpLCByZWFkbCgmZWhjaS0+Y2Fwcy0+aGNfY2FwYmFzZSkpOwogCS8qIGNhY2hlIHRoaXMgcmVhZG9ubHkgZGF0YTsgbWluaW1pemUgY2hpcCByZWFkcyAqLwogCWVoY2ktPmhjc19wYXJhbXMgPSByZWFkbCgmZWhjaS0+Y2Fwcy0+aGNzX3BhcmFtcyk7CiAKQEAgLTIxNSwxMCArMjE2LDcgQEAKIAlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGVoY2lfaGNkICplaGNpID0gaGNkX3RvX2VoY2koaGNkKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByYzsKLQotCXJldHVybiAwOwotCXJjID0gMDsKKwlpbnQgcmMgPSAwOwogCiAJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVoY2ktPm5leHRfc3RhdGVjaGFuZ2UpKQogCQltc2xlZXAoMTApOwpAQCAtMjMzLDEzICsyMzEsMTMgQEAKIAkodm9pZCllaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5yZWdzLT5pbnRyX2VuYWJsZSk7CiAKIAljbGVhcl9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpOwotCi0JYXUxeHh4X3N0b3BfZWhjKCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWhjaS0+bG9jaywgZmxhZ3MpOwogCiAJLy8gY291bGQgc2F2ZSBGTEFESiBpbiBjYXNlIG9mIFZhdXggcG93ZXIgbG9zcwogCS8vIC4uLiB3ZSdkIG9ubHkgdXNlIGl0IHRvIGhhbmRsZSBjbG9jayBza2V3CiAKKwlhdTF4eHhfc3RvcF9laGMoKTsKKwogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWNuczN4eHguYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1jbnMzeHh4LmMKaW5kZXggNzA4YTA1Yi4uZDQxNzQ1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWNuczN4eHguYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktY25zM3h4eC5jCkBAIC0zNCw3ICszNCw3IEBACiAKIAllaGNpLT5jYXBzID0gaGNkLT5yZWdzOwogCWVoY2ktPnJlZ3MgPSBoY2QtPnJlZ3MKLQkJKyBIQ19MRU5HVEgoZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNfY2FwYmFzZSkpOworCQkrIEhDX0xFTkdUSChlaGNpLCBlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7CiAJZWhjaS0+aGNzX3BhcmFtcyA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjc19wYXJhbXMpOwogCiAJaGNkLT5oYXNfdHQgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jCmluZGV4IDY5M2MyOWIuLjQwYTg0NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMKQEAgLTcyNiw3ICs3MjYsNyBAQAogCX0KIAogCS8qIENhcGFiaWxpdHkgUmVnaXN0ZXJzICovCi0JaSA9IEhDX1ZFUlNJT04oZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNfY2FwYmFzZSkpOworCWkgPSBIQ19WRVJTSU9OKGVoY2ksIGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjX2NhcGJhc2UpKTsKIAl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLAogCQkiYnVzICVzLCBkZXZpY2UgJXNcbiIKIAkJIiVzXG4iCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmMKaW5kZXggNWM3NjFkZi4uZjM4MGJmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuYwpAQCAtMTE3LDYgKzExNyw5IEBACiAKIAlwZGF0YS0+cmVncyA9IGhjZC0+cmVnczsKIAorCWlmIChwZGF0YS0+cG93ZXJfYnVkZ2V0KQorCQloY2QtPnBvd2VyX2J1ZGdldCA9IHBkYXRhLT5wb3dlcl9idWRnZXQ7CisKIAkvKgogCSAqIGRvIHBsYXRmb3JtIHNwZWNpZmljIGluaXQ6IGNoZWNrIHRoZSBjbG9jaywgZ3JhYi9jb25maWcgcGlucywgZXRjLgogCSAqLwpAQCAtMTM0LDYgKzEzNywzMCBAQAogCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQpOwogCWlmIChyZXR2YWwgIT0gMCkKIAkJZ290byBlcnI0OworCisjaWZkZWYgQ09ORklHX1VTQl9PVEcKKwlpZiAocGRhdGEtPm9wZXJhdGluZ19tb2RlID09IEZTTF9VU0IyX0RSX09URykgeworCQlzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kgPSBoY2RfdG9fZWhjaShoY2QpOworCisJCWVoY2ktPnRyYW5zY2VpdmVyID0gb3RnX2dldF90cmFuc2NlaXZlcigpOworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJoY2Q9MHglcCAgZWhjaT0weCVwLCB0cmFuc2NlaXZlcj0weCVwXG4iLAorCQkJaGNkLCBlaGNpLCBlaGNpLT50cmFuc2NlaXZlcik7CisKKwkJaWYgKGVoY2ktPnRyYW5zY2VpdmVyKSB7CisJCQlyZXR2YWwgPSBvdGdfc2V0X2hvc3QoZWhjaS0+dHJhbnNjZWl2ZXIsCisJCQkJCSAgICAgICZlaGNpX3RvX2hjZChlaGNpKS0+c2VsZik7CisJCQlpZiAocmV0dmFsKSB7CisJCQkJaWYgKGVoY2ktPnRyYW5zY2VpdmVyKQorCQkJCQlwdXRfZGV2aWNlKGVoY2ktPnRyYW5zY2VpdmVyLT5kZXYpOworCQkJCWdvdG8gZXJyNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGZpbmQgdHJhbnNjZWl2ZXJcbiIpOworCQkJcmV0dmFsID0gLUVOT0RFVjsKKwkJCWdvdG8gZXJyNDsKKwkJfQorCX0KKyNlbmRpZgogCXJldHVybiByZXR2YWw7CiAKICAgICAgIGVycjQ6CkBAIC0xNjQsNiArMTkxLDEyIEBACiAJCQkgICAgICAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgZnNsX3VzYjJfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kgPSBoY2RfdG9fZWhjaShoY2QpOworCisJaWYgKGVoY2ktPnRyYW5zY2VpdmVyKSB7CisJCW90Z19zZXRfaG9zdChlaGNpLT50cmFuc2NlaXZlciwgTlVMTCk7CisJCXB1dF9kZXZpY2UoZWhjaS0+dHJhbnNjZWl2ZXItPmRldik7CisJfQogCiAJdXNiX3JlbW92ZV9oY2QoaGNkKTsKIApAQCAtMjkxLDcgKzMyNCw3IEBACiAJLyogRUhDSSByZWdpc3RlcnMgc3RhcnQgYXQgb2Zmc2V0IDB4MTAwICovCiAJZWhjaS0+Y2FwcyA9IGhjZC0+cmVncyArIDB4MTAwOwogCWVoY2ktPnJlZ3MgPSBoY2QtPnJlZ3MgKyAweDEwMCArCi0JICAgIEhDX0xFTkdUSChlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7CisJCUhDX0xFTkdUSChlaGNpLCBlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7CiAJZGJnX2hjc19wYXJhbXMoZWhjaSwgInJlc2V0Iik7CiAJZGJnX2hjY19wYXJhbXMoZWhjaSwgInJlc2V0Iik7CiAKQEAgLTMyOCw2ICszNjEsMTQ5IEBACiAKICNpZmRlZiBDT05GSUdfUE0KIAorI2lmZGVmIENPTkZJR19QUENfTVBDNTEyeAorc3RhdGljIGludCBlaGNpX2ZzbF9tcGM1MTJ4X2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGVoY2lfaGNkICplaGNpID0gaGNkX3RvX2VoY2koaGNkKTsKKwlzdHJ1Y3QgZnNsX3VzYjJfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJdTMyIHRtcDsKKworI2lmZGVmIERFQlVHCisJdTMyIG1vZGUgPSBlaGNpX3JlYWRsKGVoY2ksIGhjZC0+cmVncyArIEZTTF9TT0NfVVNCX1VTQk1PREUpOworCW1vZGUgJj0gVVNCTU9ERV9DTV9NQVNLOworCXRtcCA9IGVoY2lfcmVhZGwoZWhjaSwgaGNkLT5yZWdzICsgMHgxNDApOwkvKiB1c2JjbWQgKi8KKworCWRldl9kYmcoZGV2LCAic3VzcGVuZD0lZCBhbHJlYWR5X3N1c3BlbmRlZD0lZCAiCisJCSJtb2RlPSVkICB1c2JjbWQgJTA4eFxuIiwgcGRhdGEtPnN1c3BlbmRlZCwKKwkJcGRhdGEtPmFscmVhZHlfc3VzcGVuZGVkLCBtb2RlLCB0bXApOworI2VuZGlmCisKKwkvKgorCSAqIElmIHRoZSBjb250cm9sbGVyIGlzIGFscmVhZHkgc3VzcGVuZGVkLCB0aGVuIHRoaXMgbXVzdCBiZSBhCisJICogUE0gc3VzcGVuZC4gIFJlbWVtYmVyIHRoaXMgZmFjdCwgc28gdGhhdCB3ZSB3aWxsIGxlYXZlIHRoZQorCSAqIGNvbnRyb2xsZXIgc3VzcGVuZGVkIGF0IFBNIHJlc3VtZSB0aW1lLgorCSAqLworCWlmIChwZGF0YS0+c3VzcGVuZGVkKSB7CisJCWRldl9kYmcoZGV2LCAiYWxyZWFkeSBzdXNwZW5kZWQsIGxlYXZpbmcgZWFybHlcbiIpOworCQlwZGF0YS0+YWxyZWFkeV9zdXNwZW5kZWQgPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwlkZXZfZGJnKGRldiwgInN1c3BlbmRpbmcuLi5cbiIpOworCisJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1NVU1BFTkRFRDsKKwlkZXYtPnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19TVVNQRU5EOworCisJLyogaWdub3JlIG5vbi1ob3N0IGludGVycnVwdHMgKi8KKwljbGVhcl9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpOworCisJLyogc3RvcCB0aGUgY29udHJvbGxlciAqLworCXRtcCA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOworCXRtcCAmPSB+Q01EX1JVTjsKKwllaGNpX3dyaXRlbChlaGNpLCB0bXAsICZlaGNpLT5yZWdzLT5jb21tYW5kKTsKKworCS8qIHNhdmUgRUhDSSByZWdpc3RlcnMgKi8KKwlwZGF0YS0+cG1fY29tbWFuZCA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOworCXBkYXRhLT5wbV9jb21tYW5kICY9IH5DTURfUlVOOworCXBkYXRhLT5wbV9zdGF0dXMgID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+cmVncy0+c3RhdHVzKTsKKwlwZGF0YS0+cG1faW50cl9lbmFibGUgID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+cmVncy0+aW50cl9lbmFibGUpOworCXBkYXRhLT5wbV9mcmFtZV9pbmRleCAgPSBlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5yZWdzLT5mcmFtZV9pbmRleCk7CisJcGRhdGEtPnBtX3NlZ21lbnQgID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+cmVncy0+c2VnbWVudCk7CisJcGRhdGEtPnBtX2ZyYW1lX2xpc3QgID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+cmVncy0+ZnJhbWVfbGlzdCk7CisJcGRhdGEtPnBtX2FzeW5jX25leHQgID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+cmVncy0+YXN5bmNfbmV4dCk7CisJcGRhdGEtPnBtX2NvbmZpZ3VyZWRfZmxhZyAgPQorCQllaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5yZWdzLT5jb25maWd1cmVkX2ZsYWcpOworCXBkYXRhLT5wbV9wb3J0c2MgPSBlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1c1swXSk7CisJcGRhdGEtPnBtX3VzYmdlbmN0cmwgPSBlaGNpX3JlYWRsKGVoY2ksCisJCQkJCSAgaGNkLT5yZWdzICsgRlNMX1NPQ19VU0JfVVNCR0VOQ1RSTCk7CisKKwkvKiBjbGVhciB0aGUgVzFDIGJpdHMgKi8KKwlwZGF0YS0+cG1fcG9ydHNjICY9IGNwdV90b19oYzMyKGVoY2ksIH5QT1JUX1JXQ19CSVRTKTsKKworCXBkYXRhLT5zdXNwZW5kZWQgPSAxOworCisJLyogY2xlYXIgUFAgdG8gY3V0IHBvd2VyIHRvIHRoZSBwb3J0ICovCisJdG1wID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+cmVncy0+cG9ydF9zdGF0dXNbMF0pOworCXRtcCAmPSB+UE9SVF9QT1dFUjsKKwllaGNpX3dyaXRlbChlaGNpLCB0bXAsICZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1c1swXSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlaGNpX2ZzbF9tcGM1MTJ4X2Rydl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kgPSBoY2RfdG9fZWhjaShoY2QpOworCXN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwl1MzIgdG1wOworCisJZGV2X2RiZyhkZXYsICJzdXNwZW5kPSVkIGFscmVhZHlfc3VzcGVuZGVkPSVkXG4iLAorCQlwZGF0YS0+c3VzcGVuZGVkLCBwZGF0YS0+YWxyZWFkeV9zdXNwZW5kZWQpOworCisJLyoKKwkgKiBJZiB0aGUgY29udHJvbGxlciB3YXMgYWxyZWFkeSBzdXNwZW5kZWQgYXQgc3VzcGVuZCB0aW1lLAorCSAqIHRoZW4gZG9uJ3QgcmVzdW1lIGl0IG5vdy4KKwkgKi8KKwlpZiAocGRhdGEtPmFscmVhZHlfc3VzcGVuZGVkKSB7CisJCWRldl9kYmcoZGV2LCAiYWxyZWFkeSBzdXNwZW5kZWQsIGxlYXZpbmcgZWFybHlcbiIpOworCQlwZGF0YS0+YWxyZWFkeV9zdXNwZW5kZWQgPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXBkYXRhLT5zdXNwZW5kZWQpIHsKKwkJZGV2X2RiZyhkZXYsICJub3Qgc3VzcGVuZGVkLCBsZWF2aW5nIGVhcmx5XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcGRhdGEtPnN1c3BlbmRlZCA9IDA7CisKKwlkZXZfZGJnKGRldiwgInJlc3VtaW5nLi4uXG4iKTsKKworCS8qIHNldCBob3N0IG1vZGUgKi8KKwl0bXAgPSBVU0JNT0RFX0NNX0hPU1QgfCAocGRhdGEtPmVzID8gVVNCTU9ERV9FUyA6IDApOworCWVoY2lfd3JpdGVsKGVoY2ksIHRtcCwgaGNkLT5yZWdzICsgRlNMX1NPQ19VU0JfVVNCTU9ERSk7CisKKwllaGNpX3dyaXRlbChlaGNpLCBwZGF0YS0+cG1fdXNiZ2VuY3RybCwKKwkJICAgIGhjZC0+cmVncyArIEZTTF9TT0NfVVNCX1VTQkdFTkNUUkwpOworCWVoY2lfd3JpdGVsKGVoY2ksIElTSVBIWUNUUkxfUFhFIHwgSVNJUEhZQ1RSTF9QSFlFLAorCQkgICAgaGNkLT5yZWdzICsgRlNMX1NPQ19VU0JfSVNJUEhZQ1RSTCk7CisKKwkvKiByZXN0b3JlIEVIQ0kgcmVnaXN0ZXJzICovCisJZWhjaV93cml0ZWwoZWhjaSwgcGRhdGEtPnBtX2NvbW1hbmQsICZlaGNpLT5yZWdzLT5jb21tYW5kKTsKKwllaGNpX3dyaXRlbChlaGNpLCBwZGF0YS0+cG1faW50cl9lbmFibGUsICZlaGNpLT5yZWdzLT5pbnRyX2VuYWJsZSk7CisJZWhjaV93cml0ZWwoZWhjaSwgcGRhdGEtPnBtX2ZyYW1lX2luZGV4LCAmZWhjaS0+cmVncy0+ZnJhbWVfaW5kZXgpOworCWVoY2lfd3JpdGVsKGVoY2ksIHBkYXRhLT5wbV9zZWdtZW50LCAmZWhjaS0+cmVncy0+c2VnbWVudCk7CisJZWhjaV93cml0ZWwoZWhjaSwgcGRhdGEtPnBtX2ZyYW1lX2xpc3QsICZlaGNpLT5yZWdzLT5mcmFtZV9saXN0KTsKKwllaGNpX3dyaXRlbChlaGNpLCBwZGF0YS0+cG1fYXN5bmNfbmV4dCwgJmVoY2ktPnJlZ3MtPmFzeW5jX25leHQpOworCWVoY2lfd3JpdGVsKGVoY2ksIHBkYXRhLT5wbV9jb25maWd1cmVkX2ZsYWcsCisJCSAgICAmZWhjaS0+cmVncy0+Y29uZmlndXJlZF9mbGFnKTsKKwllaGNpX3dyaXRlbChlaGNpLCBwZGF0YS0+cG1fcG9ydHNjLCAmZWhjaS0+cmVncy0+cG9ydF9zdGF0dXNbMF0pOworCisJc2V0X2JpdChIQ0RfRkxBR19IV19BQ0NFU1NJQkxFLCAmaGNkLT5mbGFncyk7CisJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CisJZGV2LT5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CisKKwl0bXAgPSBlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5yZWdzLT5jb21tYW5kKTsKKwl0bXAgfD0gQ01EX1JVTjsKKwllaGNpX3dyaXRlbChlaGNpLCB0bXAsICZlaGNpLT5yZWdzLT5jb21tYW5kKTsKKworCXVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKGhjZCk7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBlaGNpX2ZzbF9tcGM1MTJ4X2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZWhjaV9mc2xfbXBjNTEyeF9kcnZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfUFBDX01QQzUxMnggKi8KKwogc3RhdGljIHN0cnVjdCBlaGNpX2ZzbCAqaGNkX3RvX2VoY2lfZnNsKHN0cnVjdCB1c2JfaGNkICpoY2QpCiB7CiAJc3RydWN0IGVoY2lfaGNkICplaGNpID0gaGNkX3RvX2VoY2koaGNkKTsKQEAgLTM0MSw2ICs1MTcsMTEgQEAKIAlzdHJ1Y3QgZWhjaV9mc2wgKmVoY2lfZnNsID0gaGNkX3RvX2VoY2lfZnNsKGhjZCk7CiAJdm9pZCBfX2lvbWVtICpub25fZWhjaSA9IGhjZC0+cmVnczsKIAorCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkZXYtPnBhcmVudC0+b2Zfbm9kZSwKKwkJCQkgICAgImZzbCxtcGM1MTIxLXVzYjItZHIiKSkgeworCQlyZXR1cm4gZWhjaV9mc2xfbXBjNTEyeF9kcnZfc3VzcGVuZChkZXYpOworCX0KKwogCWVoY2lfcHJlcGFyZV9wb3J0c19mb3JfY29udHJvbGxlcl9zdXNwZW5kKGhjZF90b19laGNpKGhjZCksCiAJCQlkZXZpY2VfbWF5X3dha2V1cChkZXYpKTsKIAlpZiAoIWZzbF9kZWVwX3NsZWVwKCkpCkBAIC0zNTcsNiArNTM4LDExIEBACiAJc3RydWN0IGVoY2lfaGNkICplaGNpID0gaGNkX3RvX2VoY2koaGNkKTsKIAl2b2lkIF9faW9tZW0gKm5vbl9laGNpID0gaGNkLT5yZWdzOwogCisJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGRldi0+cGFyZW50LT5vZl9ub2RlLAorCQkJCSAgICAiZnNsLG1wYzUxMjEtdXNiMi1kciIpKSB7CisJCXJldHVybiBlaGNpX2ZzbF9tcGM1MTJ4X2Rydl9yZXN1bWUoZGV2KTsKKwl9CisKIAllaGNpX3ByZXBhcmVfcG9ydHNfZm9yX2NvbnRyb2xsZXJfcmVzdW1lKGVoY2kpOwogCWlmICghZnNsX2RlZXBfc2xlZXAoKSkKIAkJcmV0dXJuIDA7CkBAIC0zOTEsNiArNTc3LDM4IEBACiAjZGVmaW5lIEVIQ0lfRlNMX1BNX09QUwkJTlVMTAogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCisjaWZkZWYgQ09ORklHX1VTQl9PVEcKK3N0YXRpYyBpbnQgZWhjaV9zdGFydF9wb3J0X3Jlc2V0KHN0cnVjdCB1c2JfaGNkICpoY2QsIHVuc2lnbmVkIHBvcnQpCit7CisJc3RydWN0IGVoY2lfaGNkICplaGNpID0gaGNkX3RvX2VoY2koaGNkKTsKKwl1MzIgc3RhdHVzOworCisJaWYgKCFwb3J0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBvcnQtLTsKKworCS8qIHN0YXJ0IHBvcnQgcmVzZXQgYmVmb3JlIEhOUCBwcm90b2NvbCB0aW1lIG91dCAqLworCXN0YXR1cyA9IHJlYWRsKCZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1c1twb3J0XSk7CisJaWYgKCEoc3RhdHVzICYgUE9SVF9DT05ORUNUKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBraHViZCB3aWxsIGZpbmlzaCB0aGUgcmVzZXQgbGF0ZXIgKi8KKwlpZiAoZWhjaV9pc19UREkoZWhjaSkpIHsKKwkJd3JpdGVsKFBPUlRfUkVTRVQgfAorCQkgICAgICAgKHN0YXR1cyAmIH4oUE9SVF9DU0MgfCBQT1JUX1BFQyB8IFBPUlRfT0NDKSksCisJCSAgICAgICAmZWhjaS0+cmVncy0+cG9ydF9zdGF0dXNbcG9ydF0pOworCX0gZWxzZSB7CisJCXdyaXRlbChQT1JUX1JFU0VULCAmZWhjaS0+cmVncy0+cG9ydF9zdGF0dXNbcG9ydF0pOworCX0KKworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgZWhjaV9zdGFydF9wb3J0X3Jlc2V0CU5VTEwKKyNlbmRpZiAvKiBDT05GSUdfVVNCX09URyAqLworCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyIGVoY2lfZnNsX2hjX2RyaXZlciA9IHsKIAkuZGVzY3JpcHRpb24gPSBoY2RfbmFtZSwKIAkucHJvZHVjdF9kZXNjID0gIkZyZWVzY2FsZSBPbi1DaGlwIEVIQ0kgSG9zdCBDb250cm9sbGVyIiwKQEAgLTQzMCw2ICs2NDgsNyBAQAogCS5odWJfY29udHJvbCA9IGVoY2lfaHViX2NvbnRyb2wsCiAJLmJ1c19zdXNwZW5kID0gZWhjaV9idXNfc3VzcGVuZCwKIAkuYnVzX3Jlc3VtZSA9IGVoY2lfYnVzX3Jlc3VtZSwKKwkuc3RhcnRfcG9ydF9yZXNldCA9IGVoY2lfc3RhcnRfcG9ydF9yZXNldCwKIAkucmVsaW5xdWlzaF9wb3J0ID0gZWhjaV9yZWxpbnF1aXNoX3BvcnQsCiAJLnBvcnRfaGFuZGVkX292ZXIgPSBlaGNpX3BvcnRfaGFuZGVkX292ZXIsCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuaCBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuaAppbmRleCAzZmFiZWQzLi40OTE4MDYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5oCkBAIC0yNyw2ICsyNywxMCBAQAogI2RlZmluZQlQT1JUX1BUU19TRVJJQUwJCSgzPDwzMCkKICNkZWZpbmUgUE9SVF9QVFNfUFRXCQkoMTw8MjgpCiAjZGVmaW5lIEZTTF9TT0NfVVNCX1BPUlRTQzIJMHgxODgKKyNkZWZpbmUgRlNMX1NPQ19VU0JfVVNCTU9ERQkweDFhOAorI2RlZmluZSBVU0JNT0RFX0NNX01BU0sJCSgzIDw8IDApCS8qIGNvbnRyb2xsZXIgbW9kZSBtYXNrICovCisjZGVmaW5lIFVTQk1PREVfQ01fSE9TVAkJKDMgPDwgMCkJLyogY29udHJvbGxlciBtb2RlOiBob3N0ICovCisjZGVmaW5lIFVTQk1PREVfRVMJCSgxIDw8IDIpCS8qIChCaWcpIEVuZGlhbiBTZWxlY3QgKi8KIAogI2RlZmluZSBGU0xfU09DX1VTQl9VU0JHRU5DVFJMCTB4MjAwCiAjZGVmaW5lIFVTQkdFTkNUUkxfUFBQCQkoMSA8PCAzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWdybGliLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZ3JsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2IyMzBkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWdybGliLmMKQEAgLTAsMCArMSwyNDIgQEAKKy8qCisgKiBEcml2ZXIgZm9yIEFlcm9mbGV4IEdhaXNsZXIgR1JMSUIgR1JVU0JIQyBFSENJIGhvc3QgY29udHJvbGxlcgorICoKKyAqIEdSVVNCSEMgaXMgdHlwaWNhbGx5IGZvdW5kIG9uIExFT04vR1JMSUIgU29DcworICoKKyAqIChjKSBKYW4gQW5kZXJzc29uIDxqYW5AZ2Fpc2xlci5jb20+CisgKgorICogQmFzZWQgb24gZWhjaS1wcGMtb2YuYyB3aGljaCBpczoKKyAqIChjKSBWYWxlbnRpbmUgQmFyc2hhayA8dmJhcnNoYWtAcnUubXZpc3RhLmNvbT4KKyAqIGFuZCBpbiB0dXJuIGJhc2VkIG9uICJlaGNpLXBwYy1zb2MuYyIgYnkgU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorICogYW5kICJvaGNpLXBwYy1vZi5jIiBieSBTeWx2YWluIE11bmF1dCA8dG50QDI0NnROdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisKKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKworI2RlZmluZSBHUlVTQkhDX0hDSVZFUlNJT04gMHgwMTAwIC8qIEtub3duIHZhbHVlIG9mIGNhcC4gcmVnLiBIQ0lWRVJTSU9OICovCisKKy8qIGNhbGxlZCBkdXJpbmcgcHJvYmUoKSBhZnRlciBjaGlwIHJlc2V0IGNvbXBsZXRlcyAqLworc3RhdGljIGludCBlaGNpX2dybGliX3NldHVwKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IGVoY2lfaGNkCSplaGNpID0gaGNkX3RvX2VoY2koaGNkKTsKKwlpbnQJCXJldHZhbDsKKworCXJldHZhbCA9IGVoY2lfaGFsdChlaGNpKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dmFsID0gZWhjaV9pbml0KGhjZCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWVoY2ktPnNicm4gPSAweDIwOworCWVoY2lfcG9ydF9wb3dlcihlaGNpLCAxKTsKKworCXJldHVybiBlaGNpX3Jlc2V0KGVoY2kpOworfQorCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyIGVoY2lfZ3JsaWJfaGNfZHJpdmVyID0geworCS5kZXNjcmlwdGlvbgkJPSBoY2RfbmFtZSwKKwkucHJvZHVjdF9kZXNjCQk9ICJHUkxJQiBHUlVTQkhDIEVIQ0kiLAorCS5oY2RfcHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgZWhjaV9oY2QpLAorCisJLyoKKwkgKiBnZW5lcmljIGhhcmR3YXJlIGxpbmthZ2UKKwkgKi8KKwkuaXJxCQkJPSBlaGNpX2lycSwKKwkuZmxhZ3MJCQk9IEhDRF9NRU1PUlkgfCBIQ0RfVVNCMiwKKworCS8qCisJICogYmFzaWMgbGlmZWN5Y2xlIG9wZXJhdGlvbnMKKwkgKi8KKwkucmVzZXQJCQk9IGVoY2lfZ3JsaWJfc2V0dXAsCisJLnN0YXJ0CQkJPSBlaGNpX3J1biwKKwkuc3RvcAkJCT0gZWhjaV9zdG9wLAorCS5zaHV0ZG93bgkJPSBlaGNpX3NodXRkb3duLAorCisJLyoKKwkgKiBtYW5hZ2luZyBpL28gcmVxdWVzdHMgYW5kIGFzc29jaWF0ZWQgZGV2aWNlIHJlc291cmNlcworCSAqLworCS51cmJfZW5xdWV1ZQkJPSBlaGNpX3VyYl9lbnF1ZXVlLAorCS51cmJfZGVxdWV1ZQkJPSBlaGNpX3VyYl9kZXF1ZXVlLAorCS5lbmRwb2ludF9kaXNhYmxlCT0gZWhjaV9lbmRwb2ludF9kaXNhYmxlLAorCS5lbmRwb2ludF9yZXNldAkJPSBlaGNpX2VuZHBvaW50X3Jlc2V0LAorCisJLyoKKwkgKiBzY2hlZHVsaW5nIHN1cHBvcnQKKwkgKi8KKwkuZ2V0X2ZyYW1lX251bWJlcgk9IGVoY2lfZ2V0X2ZyYW1lLAorCisJLyoKKwkgKiByb290IGh1YiBzdXBwb3J0CisJICovCisJLmh1Yl9zdGF0dXNfZGF0YQk9IGVoY2lfaHViX3N0YXR1c19kYXRhLAorCS5odWJfY29udHJvbAkJPSBlaGNpX2h1Yl9jb250cm9sLAorI2lmZGVmCUNPTkZJR19QTQorCS5idXNfc3VzcGVuZAkJPSBlaGNpX2J1c19zdXNwZW5kLAorCS5idXNfcmVzdW1lCQk9IGVoY2lfYnVzX3Jlc3VtZSwKKyNlbmRpZgorCS5yZWxpbnF1aXNoX3BvcnQJPSBlaGNpX3JlbGlucXVpc2hfcG9ydCwKKwkucG9ydF9oYW5kZWRfb3Zlcgk9IGVoY2lfcG9ydF9oYW5kZWRfb3ZlciwKKworCS5jbGVhcl90dF9idWZmZXJfY29tcGxldGUJPSBlaGNpX2NsZWFyX3R0X2J1ZmZlcl9jb21wbGV0ZSwKK307CisKKworc3RhdGljIGludCBfX2RldmluaXQgZWhjaV9oY2RfZ3JsaWJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3ApCit7CisJc3RydWN0IGRldmljZV9ub2RlICpkbiA9IG9wLT5kZXYub2Zfbm9kZTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkOworCXN0cnVjdCBlaGNpX2hjZAkqZWhjaSA9IE5VTEw7CisJc3RydWN0IHJlc291cmNlIHJlczsKKwl1MzIgaGNfY2FwYmFzZTsKKwlpbnQgaXJxOworCWludCBydjsKKworCWlmICh1c2JfZGlzYWJsZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkZXZfZGJnKCZvcC0+ZGV2LCAiaW5pdGlhbGl6aW5nIEdSVVNCSEMgRUhDSSBVU0IgQ29udHJvbGxlclxuIik7CisKKwlydiA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UoZG4sIDAsICZyZXMpOworCWlmIChydikKKwkJcmV0dXJuIHJ2OworCisJLyogdXNiX2NyZWF0ZV9oY2QgcmVxdWlyZXMgZG1hX21hc2sgIT0gTlVMTCAqLworCW9wLT5kZXYuZG1hX21hc2sgPSAmb3AtPmRldi5jb2hlcmVudF9kbWFfbWFzazsKKwloY2QgPSB1c2JfY3JlYXRlX2hjZCgmZWhjaV9ncmxpYl9oY19kcml2ZXIsICZvcC0+ZGV2LAorCQkJIkdSVVNCSEMgRUhDSSBVU0IiKTsKKwlpZiAoIWhjZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwloY2QtPnJzcmNfc3RhcnQgPSByZXMuc3RhcnQ7CisJaGNkLT5yc3JjX2xlbiA9IHJlcy5lbmQgLSByZXMuc3RhcnQgKyAxOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuLCBoY2RfbmFtZSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIiwgX19GSUxFX18pOworCQlydiA9IC1FQlVTWTsKKwkJZ290byBlcnJfcm1yOworCX0KKworCWlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGRuLCAwKTsKKwlpZiAoaXJxID09IE5PX0lSUSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpcnFfb2ZfcGFyc2VfYW5kX21hcCBmYWlsZWRcbiIsIF9fRklMRV9fKTsKKwkJcnYgPSAtRUJVU1k7CisJCWdvdG8gZXJyX2lycTsKKwl9CisKKwloY2QtPnJlZ3MgPSBpb3JlbWFwKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisJaWYgKCFoY2QtPnJlZ3MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaW9yZW1hcCBmYWlsZWRcbiIsIF9fRklMRV9fKTsKKwkJcnYgPSAtRU5PTUVNOworCQlnb3RvIGVycl9pb3JlbWFwOworCX0KKworCWVoY2kgPSBoY2RfdG9fZWhjaShoY2QpOworCisJZWhjaS0+Y2FwcyA9IGhjZC0+cmVnczsKKworCS8qIGRldGVybWluZSBlbmRpYW5uZXNzIG9mIHRoaXMgaW1wbGVtZW50YXRpb24gKi8KKwloY19jYXBiYXNlID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNfY2FwYmFzZSk7CisJaWYgKEhDX1ZFUlNJT04oZWhjaSwgaGNfY2FwYmFzZSkgIT0gR1JVU0JIQ19IQ0lWRVJTSU9OKSB7CisJCWVoY2ktPmJpZ19lbmRpYW5fbW1pbyA9IDE7CisJCWVoY2ktPmJpZ19lbmRpYW5fZGVzYyA9IDE7CisJCWVoY2ktPmJpZ19lbmRpYW5fY2FwYmFzZSA9IDE7CisJfQorCisJZWhjaS0+cmVncyA9IGhjZC0+cmVncyArCisJCUhDX0xFTkdUSChlaGNpLCBlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7CisKKwkvKiBjYWNoZSB0aGlzIHJlYWRvbmx5IGRhdGE7IG1pbmltaXplIGNoaXAgcmVhZHMgKi8KKwllaGNpLT5oY3NfcGFyYW1zID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNzX3BhcmFtcyk7CisKKwlydiA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCAwKTsKKwlpZiAocnYpCisJCWdvdG8gZXJyX2VoY2k7CisKKwlyZXR1cm4gMDsKKworZXJyX2VoY2k6CisJaW91bm1hcChoY2QtPnJlZ3MpOworZXJyX2lvcmVtYXA6CisJaXJxX2Rpc3Bvc2VfbWFwcGluZyhpcnEpOworZXJyX2lycToKKwlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKK2Vycl9ybXI6CisJdXNiX3B1dF9oY2QoaGNkKTsKKworCXJldHVybiBydjsKK30KKworCitzdGF0aWMgaW50IGVoY2lfaGNkX2dybGliX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCkKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKCZvcC0+ZGV2KTsKKworCWRldl9zZXRfZHJ2ZGF0YSgmb3AtPmRldiwgTlVMTCk7CisKKwlkZXZfZGJnKCZvcC0+ZGV2LCAic3RvcHBpbmcgR1JMSUIgR1JVU0JIQyBFSENJIFVTQiBDb250cm9sbGVyXG4iKTsKKworCXVzYl9yZW1vdmVfaGNkKGhjZCk7CisKKwlpb3VubWFwKGhjZC0+cmVncyk7CisJaXJxX2Rpc3Bvc2VfbWFwcGluZyhoY2QtPmlycSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisKKwl1c2JfcHV0X2hjZChoY2QpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgZWhjaV9oY2RfZ3JsaWJfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3ApCit7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YSgmb3AtPmRldik7CisKKwlpZiAoaGNkLT5kcml2ZXItPnNodXRkb3duKQorCQloY2QtPmRyaXZlci0+c2h1dGRvd24oaGNkKTsKK30KKworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBlaGNpX2hjZF9ncmxpYl9vZl9tYXRjaFtdID0geworCXsKKwkJLm5hbWUgPSAiR0FJU0xFUl9FSENJIiwKKwkgfSwKKwl7CisJCS5uYW1lID0gIjAxXzAyNiIsCisJIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZWhjaV9oY2RfZ3JsaWJfb2ZfbWF0Y2gpOworCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGVoY2lfZ3JsaWJfZHJpdmVyID0geworCS5wcm9iZQkJPSBlaGNpX2hjZF9ncmxpYl9wcm9iZSwKKwkucmVtb3ZlCQk9IGVoY2lfaGNkX2dybGliX3JlbW92ZSwKKwkuc2h1dGRvd24JPSBlaGNpX2hjZF9ncmxpYl9zaHV0ZG93biwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJncmxpYi1laGNpIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZSA9IGVoY2lfaGNkX2dybGliX29mX21hdGNoLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCmluZGV4IDc4NTYxZDEuLmI0MzVlZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKQEAgLTczOSw3ICs3MzksNyBAQAogCXVwX3dyaXRlKCZlaGNpX2NmX3BvcnRfcmVzZXRfcndzZW0pOwogCWVoY2ktPmxhc3RfcGVyaW9kaWNfZW5hYmxlID0ga3RpbWVfZ2V0X3JlYWwoKTsKIAotCXRlbXAgPSBIQ19WRVJTSU9OKGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjX2NhcGJhc2UpKTsKKwl0ZW1wID0gSENfVkVSU0lPTihlaGNpLCBlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7CiAJZWhjaV9pbmZvIChlaGNpLAogCQkiVVNCICV4LiV4IHN0YXJ0ZWQsIEVIQ0kgJXguJTAyeCVzXG4iLAogCQkoKGVoY2ktPnNicm4gJiAweGYwKT4+NCksIChlaGNpLT5zYnJuICYgMHgwZiksCkBAIC03NzcsOCArNzc3LDkgQEAKIAkJZ290byBkZWFkOwogCX0KIAorCS8qIFNoYXJlZCBJUlE/ICovCiAJbWFza2VkX3N0YXR1cyA9IHN0YXR1cyAmIElOVFJfTUFTSzsKLQlpZiAoIW1hc2tlZF9zdGF0dXMpIHsJCS8qIGlycSBzaGFyaW5nPyAqLworCWlmICghbWFza2VkX3N0YXR1cyB8fCB1bmxpa2VseShoY2QtPnN0YXRlID09IEhDX1NUQVRFX0hBTFQpKSB7CiAJCXNwaW5fdW5sb2NrKCZlaGNpLT5sb2NrKTsKIAkJcmV0dXJuIElSUV9OT05FOwogCX0KQEAgLTg3Myw2ICs4NzQsNyBAQAogZGVhZDoKIAkJZWhjaV9yZXNldChlaGNpKTsKIAkJZWhjaV93cml0ZWwoZWhjaSwgMCwgJmVoY2ktPnJlZ3MtPmNvbmZpZ3VyZWRfZmxhZyk7CisJCXVzYl9oY19kaWVkKGhjZCk7CiAJCS8qIGdlbmVyaWMgbGF5ZXIga2lsbHMvdW5saW5rcyBhbGwgdXJicywgdGhlbgogCQkgKiB1c2VzIGVoY2lfc3RvcCB0byBjbGVhbiB1cCB0aGUgcmVzdAogCQkgKi8KQEAgLTEyNjUsNiArMTI2NywyMSBAQAogI2RlZmluZSBQTEFURk9STV9EUklWRVIJCXRlZ3JhX2VoY2lfZHJpdmVyCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19VU0JfRUhDSV9TNVAKKyNpbmNsdWRlICJlaGNpLXM1cC5jIgorI2RlZmluZSBQTEFURk9STV9EUklWRVIJCXM1cF9laGNpX2RyaXZlcgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX0VIQ0lfQVRINzkKKyNpbmNsdWRlICJlaGNpLWF0aDc5LmMiCisjZGVmaW5lIFBMQVRGT1JNX0RSSVZFUgkJZWhjaV9hdGg3OV9kcml2ZXIKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NQQVJDX0xFT04KKyNpbmNsdWRlICJlaGNpLWdybGliLmMiCisjZGVmaW5lIFBMQVRGT1JNX0RSSVZFUgkJZWhjaV9ncmxpYl9kcml2ZXIKKyNlbmRpZgorCiAjaWYgIWRlZmluZWQoUENJX0RSSVZFUikgJiYgIWRlZmluZWQoUExBVEZPUk1fRFJJVkVSKSAmJiBcCiAgICAgIWRlZmluZWQoUFMzX1NZU1RFTV9CVVNfRFJJVkVSKSAmJiAhZGVmaW5lZChPRl9QTEFURk9STV9EUklWRVIpICYmIFwKICAgICAhZGVmaW5lZChYSUxJTlhfT0ZfUExBVEZPUk1fRFJJVkVSKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jCmluZGV4IGQwNWVhMDMuLmVhNjE4NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMKQEAgLTI3LDYgKzI3LDcgQEAKICAqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KIAogI2RlZmluZQlQT1JUX1dBS0VfQklUUwkoUE9SVF9XS09DX0V8UE9SVF9XS0RJU0NfRXxQT1JUX1dLQ09OTl9FKQogCkBAIC0xMjcsNyArMTI4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZWhjaV9hZGp1c3RfcG9ydF93YWtldXBfZmxhZ3Moc3RydWN0IGVoY2lfaGNkICplaGNpLAorc3RhdGljIF9fbWF5YmVfdW51c2VkIHZvaWQgZWhjaV9hZGp1c3RfcG9ydF93YWtldXBfZmxhZ3Moc3RydWN0IGVoY2lfaGNkICplaGNpLAogCQlib29sIHN1c3BlbmRpbmcsIGJvb2wgZG9fd2FrZXVwKQogewogCWludAkJcG9ydDsKQEAgLTgwMSw2ICs4MDIsMTMgQEAKIAkJCQlnb3RvIGVycm9yOwogCQkJaWYgKGVoY2ktPm5vX3NlbGVjdGl2ZV9zdXNwZW5kKQogCQkJCWJyZWFrOworI2lmZGVmIENPTkZJR19VU0JfT1RHCisJCQlpZiAoKGhjZC0+c2VsZi5vdGdfcG9ydCA9PSAod0luZGV4ICsgMSkpCisJCQkgICAgJiYgaGNkLT5zZWxmLmJfaG5wX2VuYWJsZSkgeworCQkJCW90Z19zdGFydF9obnAoZWhjaS0+dHJhbnNjZWl2ZXIpOworCQkJCWJyZWFrOworCQkJfQorI2VuZGlmCiAJCQlpZiAoISh0ZW1wICYgUE9SVF9TVVNQRU5EKSkKIAkJCQlicmVhazsKIAkJCWlmICgodGVtcCAmIFBPUlRfUEUpID09IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaXhwNHh4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaXhwNHh4LmMKaW5kZXggODliN2M3MC4uNTBlNjAwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWl4cDR4eC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1peHA0eHguYwpAQCAtMjMsNyArMjMsNyBAQAogCiAJZWhjaS0+Y2FwcyA9IGhjZC0+cmVncyArIDB4MTAwOwogCWVoY2ktPnJlZ3MgPSBoY2QtPnJlZ3MgKyAweDEwMAotCQkrIEhDX0xFTkdUSChlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7CisJCSsgSENfTEVOR1RIKGVoY2ksIGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjX2NhcGJhc2UpKTsKIAllaGNpLT5oY3NfcGFyYW1zID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNzX3BhcmFtcyk7CiAKIAloY2QtPmhhc190dCA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbXNtLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbXNtLmMKaW5kZXggOWNlMWIwYi4uYjVhMGJmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLW1zbS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1tc20uYwpAQCAtNDEsNyArNDEsNyBAQAogCiAJZWhjaS0+Y2FwcyA9IFVTQl9DQVBMRU5HVEg7CiAJZWhjaS0+cmVncyA9IFVTQl9DQVBMRU5HVEggKwotCQlIQ19MRU5HVEgoZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNfY2FwYmFzZSkpOworCQlIQ19MRU5HVEgoZWhjaSwgZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNfY2FwYmFzZSkpOwogCWRiZ19oY3NfcGFyYW1zKGVoY2ksICJyZXNldCIpOwogCWRiZ19oY2NfcGFyYW1zKGVoY2ksICJyZXNldCIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbXhjLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbXhjLmMKaW5kZXggMjVjOGMxMGIuLjBjMDU4YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1teGMuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbXhjLmMKQEAgLTIwOCw3ICsyMDgsNyBAQAogCS8qIEVIQ0kgcmVnaXN0ZXJzIHN0YXJ0IGF0IG9mZnNldCAweDEwMCAqLwogCWVoY2ktPmNhcHMgPSBoY2QtPnJlZ3MgKyAweDEwMDsKIAllaGNpLT5yZWdzID0gaGNkLT5yZWdzICsgMHgxMDAgKwotCSAgICBIQ19MRU5HVEgoZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNfY2FwYmFzZSkpOworCQlIQ19MRU5HVEgoZWhjaSwgZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNfY2FwYmFzZSkpOwogCiAJLyogc2V0IHVwIHRoZSBQT1JUU0N4IHJlZ2lzdGVyICovCiAJZWhjaV93cml0ZWwoZWhjaSwgcGRhdGEtPnBvcnRzYywgJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzWzBdKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1vY3Rlb24uYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1vY3Rlb24uYwppbmRleCBhMzFhMDMxLi5mZjU1NzU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb2N0ZW9uLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW9jdGVvbi5jCkBAIC0xNTEsNyArMTUxLDcgQEAKIAogCWVoY2ktPmNhcHMgPSBoY2QtPnJlZ3M7CiAJZWhjaS0+cmVncyA9IGhjZC0+cmVncyArCi0JCUhDX0xFTkdUSChlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7CisJCUhDX0xFTkdUSChlaGNpLCBlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7CiAJLyogY2FjaGUgdGhpcyByZWFkb25seSBkYXRhOyBtaW5pbWl6ZSBjaGlwIHJlYWRzICovCiAJZWhjaS0+aGNzX3BhcmFtcyA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjc19wYXJhbXMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb21hcC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW9tYXAuYwppbmRleCA2MjdmM2E2Li41NWE1N2MyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb21hcC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1vbWFwLmMKQEAgLTIwOCw3ICsyMDgsNyBAQAogCS8qIHdlIGtub3cgdGhpcyBpcyB0aGUgbWVtb3J5IHdlIHdhbnQsIG5vIG5lZWQgdG8gaW9yZW1hcCBhZ2FpbiAqLwogCW9tYXBfZWhjaS0+Y2FwcyA9IGhjZC0+cmVnczsKIAlvbWFwX2VoY2ktPnJlZ3MgPSBoY2QtPnJlZ3MKLQkJCSsgSENfTEVOR1RIKHJlYWRsKCZvbWFwX2VoY2ktPmNhcHMtPmhjX2NhcGJhc2UpKTsKKwkJKyBIQ19MRU5HVEgoZWhjaSwgcmVhZGwoJm9tYXBfZWhjaS0+Y2Fwcy0+aGNfY2FwYmFzZSkpOwogCiAJZGJnX2hjc19wYXJhbXMob21hcF9laGNpLCAicmVzZXQiKTsKIAlkYmdfaGNjX3BhcmFtcyhvbWFwX2VoY2ksICJyZXNldCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLW9yaW9uLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb3Jpb24uYwppbmRleCAyODFlMDk0Li4zOTViZGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb3Jpb24uYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb3Jpb24uYwpAQCAtMjUxLDcgKzI1MSw3IEBACiAJZWhjaSA9IGhjZF90b19laGNpKGhjZCk7CiAJZWhjaS0+Y2FwcyA9IGhjZC0+cmVncyArIDB4MTAwOwogCWVoY2ktPnJlZ3MgPSBoY2QtPnJlZ3MgKyAweDEwMCArCi0JCUhDX0xFTkdUSChlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7CisJCUhDX0xFTkdUSChlaGNpLCBlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7CiAJZWhjaS0+aGNzX3BhcmFtcyA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjc19wYXJhbXMpOwogCWhjZC0+aGFzX3R0ID0gMTsKIAllaGNpLT5zYnJuID0gMHgyMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYwppbmRleCBkNWVhZWE3Li42NjBiODBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGNpLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXBjaS5jCkBAIC03MCw3ICs3MCw3IEBACiAKIAllaGNpLT5jYXBzID0gaGNkLT5yZWdzOwogCWVoY2ktPnJlZ3MgPSBoY2QtPnJlZ3MgKwotCQlIQ19MRU5HVEgoZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNfY2FwYmFzZSkpOworCQlIQ19MRU5HVEgoZWhjaSwgZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNfY2FwYmFzZSkpOwogCiAJZGJnX2hjc19wYXJhbXMoZWhjaSwgInJlc2V0Iik7CiAJZGJnX2hjY19wYXJhbXMoZWhjaSwgInJlc2V0Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcG1jbXNwLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcG1jbXNwLmMKaW5kZXggYTIxNjg2NC4uY2Q2OTA5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXBtY21zcC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wbWNtc3AuYwpAQCAtODMsNyArODMsNyBAQAogCiAJZWhjaS0+Y2FwcyA9IGhjZC0+cmVnczsKIAllaGNpLT5yZWdzID0gaGNkLT5yZWdzICsKLQkJCUhDX0xFTkdUSChlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7CisJCUhDX0xFTkdUSChlaGNpLCBlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7CiAJZGJnX2hjc19wYXJhbXMoZWhjaSwgInJlc2V0Iik7CiAJZGJnX2hjY19wYXJhbXMoZWhjaSwgInJlc2V0Iik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wcGMtb2YuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wcGMtb2YuYwppbmRleCAxZjA5ZjI1Li44NTUyZGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcHBjLW9mLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXBwYy1vZi5jCkBAIC0xNzksNyArMTc5LDcgQEAKIAogCWVoY2ktPmNhcHMgPSBoY2QtPnJlZ3M7CiAJZWhjaS0+cmVncyA9IGhjZC0+cmVncyArCi0JCQlIQ19MRU5HVEgoZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNfY2FwYmFzZSkpOworCQlIQ19MRU5HVEgoZWhjaSwgZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNfY2FwYmFzZSkpOwogCiAJLyogY2FjaGUgdGhpcyByZWFkb25seSBkYXRhOyBtaW5pbWl6ZSBjaGlwIHJlYWRzICovCiAJZWhjaS0+aGNzX3BhcmFtcyA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjc19wYXJhbXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXBzMy5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXBzMy5jCmluZGV4IDFkZWUzM2IuLjY0NjI2YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wczMuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcHMzLmMKQEAgLTI5LDcgKzI5LDcgQEAKIAllaGNpLT5iaWdfZW5kaWFuX21taW8gPSAxOwogCiAJZWhjaS0+Y2FwcyA9IGhjZC0+cmVnczsKLQllaGNpLT5yZWdzID0gaGNkLT5yZWdzICsgSENfTEVOR1RIKGVoY2lfcmVhZGwoZWhjaSwKKwllaGNpLT5yZWdzID0gaGNkLT5yZWdzICsgSENfTEVOR1RIKGVoY2ksIGVoY2lfcmVhZGwoZWhjaSwKIAkJJmVoY2ktPmNhcHMtPmhjX2NhcGJhc2UpKTsKIAogCWRiZ19oY3NfcGFyYW1zKGVoY2ksICJyZXNldCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXEuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1xLmMKaW5kZXggNDJhYmQwZi4uNWQ2YmM2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXEuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcS5jCkBAIC04MjYsNiArODI2LDcgQEAKIAkJCQlpc19pbnB1dCwgMCwKIAkJCQloYl9tdWx0KG1heHApICogbWF4X3BhY2tldChtYXhwKSkpOwogCQlxaC0+c3RhcnQgPSBOT19GUkFNRTsKKwkJcWgtPnN0YW1wID0gZWhjaS0+cGVyaW9kaWNfc3RhbXA7CiAKIAkJaWYgKHVyYi0+ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgewogCQkJcWgtPmNfdXNlY3MgPSAwOwpAQCAtMTE4Myw2ICsxMTg0LDEwIEBACiAJCWVoY2ktPnJlY2xhaW0gPSBOVUxMOwogCQlzdGFydF91bmxpbmtfYXN5bmMgKGVoY2ksIG5leHQpOwogCX0KKworCWlmIChlaGNpLT5oYXNfc3lub3BzeXNfaGNfYnVnKQorCQllaGNpX3dyaXRlbChlaGNpLCAodTMyKSBlaGNpLT5hc3luYy0+cWhfZG1hLAorCQkJICAgICZlaGNpLT5yZWdzLT5hc3luY19uZXh0KTsKIH0KIAogLyogbWFrZXMgc3VyZSB0aGUgYXN5bmMgcWggd2lsbCBiZWNvbWUgaWRsZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXM1cC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXM1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMzc0YzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktczVwLmMKQEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiBTQU1TVU5HIFM1UCBVU0IgSE9TVCBFSENJIENvbnRyb2xsZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby5MdGQKKyAqIEF1dGhvcjogSmluZ29vIEhhbiA8amcxLmhhbkBzYW1zdW5nLmNvbT4KKyAqIEF1dGhvcjogSm9vbnlvdW5nIFNoaW0gPGp5MDkyMi5zaGltQHNhbXN1bmcuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtcG11Lmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2VoY2kuaD4KKyNpbmNsdWRlIDxwbGF0L3VzYi1waHkuaD4KKworc3RydWN0IHM1cF9laGNpX2hjZCB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCB1c2JfaGNkICpoY2Q7CisJc3RydWN0IGNsayAqY2xrOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgczVwX2VoY2lfaGNfZHJpdmVyID0geworCS5kZXNjcmlwdGlvbgkJPSBoY2RfbmFtZSwKKwkucHJvZHVjdF9kZXNjCQk9ICJTNVAgRUhDSSBIb3N0IENvbnRyb2xsZXIiLAorCS5oY2RfcHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgZWhjaV9oY2QpLAorCisJLmlycQkJCT0gZWhjaV9pcnEsCisJLmZsYWdzCQkJPSBIQ0RfTUVNT1JZIHwgSENEX1VTQjIsCisKKwkucmVzZXQJCQk9IGVoY2lfaW5pdCwKKwkuc3RhcnQJCQk9IGVoY2lfcnVuLAorCS5zdG9wCQkJPSBlaGNpX3N0b3AsCisJLnNodXRkb3duCQk9IGVoY2lfc2h1dGRvd24sCisKKwkuZ2V0X2ZyYW1lX251bWJlcgk9IGVoY2lfZ2V0X2ZyYW1lLAorCisJLnVyYl9lbnF1ZXVlCQk9IGVoY2lfdXJiX2VucXVldWUsCisJLnVyYl9kZXF1ZXVlCQk9IGVoY2lfdXJiX2RlcXVldWUsCisJLmVuZHBvaW50X2Rpc2FibGUJPSBlaGNpX2VuZHBvaW50X2Rpc2FibGUsCisJLmVuZHBvaW50X3Jlc2V0CQk9IGVoY2lfZW5kcG9pbnRfcmVzZXQsCisKKwkuaHViX3N0YXR1c19kYXRhCT0gZWhjaV9odWJfc3RhdHVzX2RhdGEsCisJLmh1Yl9jb250cm9sCQk9IGVoY2lfaHViX2NvbnRyb2wsCisJLmJ1c19zdXNwZW5kCQk9IGVoY2lfYnVzX3N1c3BlbmQsCisJLmJ1c19yZXN1bWUJCT0gZWhjaV9idXNfcmVzdW1lLAorCisJLnJlbGlucXVpc2hfcG9ydAk9IGVoY2lfcmVsaW5xdWlzaF9wb3J0LAorCS5wb3J0X2hhbmRlZF9vdmVyCT0gZWhjaV9wb3J0X2hhbmRlZF9vdmVyLAorCisJLmNsZWFyX3R0X2J1ZmZlcl9jb21wbGV0ZQk9IGVoY2lfY2xlYXJfdHRfYnVmZmVyX2NvbXBsZXRlLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgczVwX2VoY2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgczVwX2VoY2lfcGxhdGRhdGEgKnBkYXRhOworCXN0cnVjdCBzNXBfZWhjaV9oY2QgKnM1cF9laGNpOworCXN0cnVjdCB1c2JfaGNkICpoY2Q7CisJc3RydWN0IGVoY2lfaGNkICplaGNpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBpcnE7CisJaW50IGVycjsKKworCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKCFwZGF0YSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBwbGF0Zm9ybSBkYXRhIGRlZmluZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzNXBfZWhjaSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzNXBfZWhjaV9oY2QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXM1cF9laGNpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXM1cF9laGNpLT5kZXYgPSAmcGRldi0+ZGV2OworCisJaGNkID0gdXNiX2NyZWF0ZV9oY2QoJnM1cF9laGNpX2hjX2RyaXZlciwgJnBkZXYtPmRldiwKKwkJCQkJZGV2X25hbWUoJnBkZXYtPmRldikpOworCWlmICghaGNkKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBjcmVhdGUgSENEXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmYWlsX2hjZDsKKwl9CisKKwlzNXBfZWhjaS0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAidXNiaG9zdCIpOworCisJaWYgKElTX0VSUihzNXBfZWhjaS0+Y2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZ2V0IHVzYmhvc3QgY2xvY2tcbiIpOworCQllcnIgPSBQVFJfRVJSKHM1cF9laGNpLT5jbGspOworCQlnb3RvIGZhaWxfY2xrOworCX0KKworCWVyciA9IGNsa19lbmFibGUoczVwX2VoY2ktPmNsayk7CisJaWYgKGVycikKKwkJZ290byBmYWlsX2Nsa2VuOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZ2V0IEkvTyBtZW1vcnlcbiIpOworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gZmFpbF9pbzsKKwl9CisKKwloY2QtPnJzcmNfc3RhcnQgPSByZXMtPnN0YXJ0OworCWhjZC0+cnNyY19sZW4gPSByZXNvdXJjZV9zaXplKHJlcyk7CisJaGNkLT5yZWdzID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghaGNkLT5yZWdzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZW1hcCBJL08gbWVtb3J5XG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmYWlsX2lvOworCX0KKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKCFpcnEpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBJUlFcbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGZhaWw7CisJfQorCisJaWYgKHBkYXRhLT5waHlfaW5pdCkKKwkJcGRhdGEtPnBoeV9pbml0KHBkZXYsIFM1UF9VU0JfUEhZX0hPU1QpOworCisJZWhjaSA9IGhjZF90b19laGNpKGhjZCk7CisJZWhjaS0+Y2FwcyA9IGhjZC0+cmVnczsKKwllaGNpLT5yZWdzID0gaGNkLT5yZWdzICsKKwkJSENfTEVOR1RIKGVoY2ksIHJlYWRsKCZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7CisKKwlkYmdfaGNzX3BhcmFtcyhlaGNpLCAicmVzZXQiKTsKKwlkYmdfaGNjX3BhcmFtcyhlaGNpLCAicmVzZXQiKTsKKworCS8qIGNhY2hlIHRoaXMgcmVhZG9ubHkgZGF0YTsgbWluaW1pemUgY2hpcCByZWFkcyAqLworCWVoY2ktPmhjc19wYXJhbXMgPSByZWFkbCgmZWhjaS0+Y2Fwcy0+aGNzX3BhcmFtcyk7CisKKwllcnIgPSB1c2JfYWRkX2hjZChoY2QsIGlycSwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVEKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBhZGQgVVNCIEhDRFxuIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBzNXBfZWhjaSk7CisKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlpb3VubWFwKGhjZC0+cmVncyk7CitmYWlsX2lvOgorCWNsa19kaXNhYmxlKHM1cF9laGNpLT5jbGspOworZmFpbF9jbGtlbjoKKwljbGtfcHV0KHM1cF9laGNpLT5jbGspOworZmFpbF9jbGs6CisJdXNiX3B1dF9oY2QoaGNkKTsKK2ZhaWxfaGNkOgorCWtmcmVlKHM1cF9laGNpKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzNXBfZWhjaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgczVwX2VoY2lfcGxhdGRhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHM1cF9laGNpX2hjZCAqczVwX2VoY2kgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gczVwX2VoY2ktPmhjZDsKKworCXVzYl9yZW1vdmVfaGNkKGhjZCk7CisKKwlpZiAocGRhdGEgJiYgcGRhdGEtPnBoeV9leGl0KQorCQlwZGF0YS0+cGh5X2V4aXQocGRldiwgUzVQX1VTQl9QSFlfSE9TVCk7CisKKwlpb3VubWFwKGhjZC0+cmVncyk7CisKKwljbGtfZGlzYWJsZShzNXBfZWhjaS0+Y2xrKTsKKwljbGtfcHV0KHM1cF9laGNpLT5jbGspOworCisJdXNiX3B1dF9oY2QoaGNkKTsKKwlrZnJlZShzNXBfZWhjaSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgczVwX2VoY2lfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgczVwX2VoY2lfaGNkICpzNXBfZWhjaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBzNXBfZWhjaS0+aGNkOworCisJaWYgKGhjZC0+ZHJpdmVyLT5zaHV0ZG93bikKKwkJaGNkLT5kcml2ZXItPnNodXRkb3duKGhjZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHM1cF9laGNpX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gczVwX2VoY2lfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzNXBfZWhjaV9yZW1vdmUpLAorCS5zaHV0ZG93bgk9IHM1cF9laGNpX3NodXRkb3duLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gInM1cC1laGNpIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfQorfTsKKworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzNXAtZWhjaSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYwppbmRleCAxNTQzYzgzLi42YzlmYmUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYwpAQCAtNDcxLDggKzQ3MSwxMCBAQAogCSAqLwogCXN0YXR1cyA9IGhhbmRzaGFrZV9vbl9lcnJvcl9zZXRfaGFsdChlaGNpLCAmZWhjaS0+cmVncy0+c3RhdHVzLAogCQkJCQkgICAgIFNUU19QU1MsIDAsIDkgKiAxMjUpOwotCWlmIChzdGF0dXMpCisJaWYgKHN0YXR1cykgeworCQl1c2JfaGNfZGllZChlaGNpX3RvX2hjZChlaGNpKSk7CiAJCXJldHVybiBzdGF0dXM7CisJfQogCiAJY21kID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+cmVncy0+Y29tbWFuZCkgfCBDTURfUFNFOwogCWVoY2lfd3JpdGVsKGVoY2ksIGNtZCwgJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOwpAQCAtNTEwLDggKzUxMiwxMCBAQAogCSAqLwogCXN0YXR1cyA9IGhhbmRzaGFrZV9vbl9lcnJvcl9zZXRfaGFsdChlaGNpLCAmZWhjaS0+cmVncy0+c3RhdHVzLAogCQkJCQkgICAgIFNUU19QU1MsIFNUU19QU1MsIDkgKiAxMjUpOwotCWlmIChzdGF0dXMpCisJaWYgKHN0YXR1cykgeworCQl1c2JfaGNfZGllZChlaGNpX3RvX2hjZChlaGNpKSk7CiAJCXJldHVybiBzdGF0dXM7CisJfQogCiAJY21kID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+cmVncy0+Y29tbWFuZCkgJiB+Q01EX1BTRTsKIAllaGNpX3dyaXRlbChlaGNpLCBjbWQsICZlaGNpLT5yZWdzLT5jb21tYW5kKTsKQEAgLTIyODcsNiArMjI5MSw3IEBACiAJfQogCWNsb2NrICY9IG1vZCAtIDE7CiAJY2xvY2tfZnJhbWUgPSBjbG9jayA+PiAzOworCSsrZWhjaS0+cGVyaW9kaWNfc3RhbXA7CiAKIAlmb3IgKDs7KSB7CiAJCXVuaW9uIGVoY2lfc2hhZG93CXEsICpxX3A7CkBAIC0yMzE1LDEwICsyMzIwLDE0IEBACiAJCQkJdGVtcC5xaCA9IHFoX2dldCAocS5xaCk7CiAJCQkJdHlwZSA9IFFfTkVYVF9UWVBFKGVoY2ksIHEucWgtPmh3LT5od19uZXh0KTsKIAkJCQlxID0gcS5xaC0+cWhfbmV4dDsKLQkJCQltb2RpZmllZCA9IHFoX2NvbXBsZXRpb25zIChlaGNpLCB0ZW1wLnFoKTsKLQkJCQlpZiAodW5saWtlbHkobGlzdF9lbXB0eSgmdGVtcC5xaC0+cXRkX2xpc3QpIHx8Ci0JCQkJCQl0ZW1wLnFoLT5uZWVkc19yZXNjYW4pKQotCQkJCQlpbnRyX2Rlc2NoZWR1bGUgKGVoY2ksIHRlbXAucWgpOworCQkJCWlmICh0ZW1wLnFoLT5zdGFtcCAhPSBlaGNpLT5wZXJpb2RpY19zdGFtcCkgeworCQkJCQltb2RpZmllZCA9IHFoX2NvbXBsZXRpb25zKGVoY2ksIHRlbXAucWgpOworCQkJCQlpZiAoIW1vZGlmaWVkKQorCQkJCQkJdGVtcC5xaC0+c3RhbXAgPSBlaGNpLT5wZXJpb2RpY19zdGFtcDsKKwkJCQkJaWYgKHVubGlrZWx5KGxpc3RfZW1wdHkoJnRlbXAucWgtPnF0ZF9saXN0KSB8fAorCQkJCQkJCXRlbXAucWgtPm5lZWRzX3Jlc2NhbikpCisJCQkJCQlpbnRyX2Rlc2NoZWR1bGUoZWhjaSwgdGVtcC5xaCk7CisJCQkJfQogCQkJCXFoX3B1dCAodGVtcC5xaCk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFFfVFlQRV9GU1ROOgpAQCAtMjQ2MCw2ICsyNDY5LDcgQEAKIAkJCWlmIChlaGNpLT5jbG9ja19mcmFtZSAhPSBjbG9ja19mcmFtZSkgewogCQkJCWZyZWVfY2FjaGVkX2xpc3RzKGVoY2kpOwogCQkJCWVoY2ktPmNsb2NrX2ZyYW1lID0gY2xvY2tfZnJhbWU7CisJCQkJKytlaGNpLT5wZXJpb2RpY19zdGFtcDsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCW5vd191ZnJhbWUrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zaC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXNoLmMKaW5kZXggNTk1ZjcwZi4uODZhOTViYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXNoLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXNoLmMKQEAgLTIzLDcgKzIzLDcgQEAKIAlpbnQgcmV0OwogCiAJZWhjaS0+Y2FwcyA9IGhjZC0+cmVnczsKLQllaGNpLT5yZWdzID0gaGNkLT5yZWdzICsgSENfTEVOR1RIKGVoY2lfcmVhZGwoZWhjaSwKKwllaGNpLT5yZWdzID0gaGNkLT5yZWdzICsgSENfTEVOR1RIKGVoY2ksIGVoY2lfcmVhZGwoZWhjaSwKIAkJJmVoY2ktPmNhcHMtPmhjX2NhcGJhc2UpKTsKIAogCWRiZ19oY3NfcGFyYW1zKGVoY2ksICJyZXNldCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXNwZWFyLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc3BlYXIuYwppbmRleCA3NWMwMDg3Li5kYmYxZTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc3BlYXIuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc3BlYXIuYwpAQCAtMzgsNyArMzgsNyBAQAogCiAJLyogcmVnaXN0ZXJzIHN0YXJ0IGF0IG9mZnNldCAweDAgKi8KIAllaGNpLT5jYXBzID0gaGNkLT5yZWdzOwotCWVoY2ktPnJlZ3MgPSBoY2QtPnJlZ3MgKyBIQ19MRU5HVEgoZWhjaV9yZWFkbChlaGNpLAorCWVoY2ktPnJlZ3MgPSBoY2QtPnJlZ3MgKyBIQ19MRU5HVEgoZWhjaSwgZWhjaV9yZWFkbChlaGNpLAogCQkJCSZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7CiAJLyogY2FjaGUgdGhpcyByZWFkb25seSBkYXRhOyBtaW5pbWl6ZSBjaGlwIHJlYWRzICovCiAJZWhjaS0+aGNzX3BhcmFtcyA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjc19wYXJhbXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXRlZ3JhLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktdGVncmEuYwppbmRleCBhNTE2YWYyLi4wMmIyYmZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktdGVncmEuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktdGVncmEuYwpAQCAtNTgsNiArNTgsNzEgQEAKIAljbGtfZGlzYWJsZSh0ZWdyYS0+ZW1jX2Nsayk7CiB9CiAKK3N0YXRpYyBpbnQgdGVncmFfZWhjaV9pbnRlcm5hbF9wb3J0X3Jlc2V0KAorCXN0cnVjdCBlaGNpX2hjZAkqZWhjaSwKKwl1MzIgX19pb21lbQkqcG9ydHNjX3JlZworKQoreworCXUzMgkJdGVtcDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCWludAkJcmV0dmFsID0gMDsKKwlpbnQJCWksIHRyaWVzOworCXUzMgkJc2F2ZWRfdXNiaW50cjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlaGNpLT5sb2NrLCBmbGFncyk7CisJc2F2ZWRfdXNiaW50ciA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPnJlZ3MtPmludHJfZW5hYmxlKTsKKwkvKiBkaXNhYmxlIFVTQiBpbnRlcnJ1cHQgKi8KKwllaGNpX3dyaXRlbChlaGNpLCAwLCAmZWhjaS0+cmVncy0+aW50cl9lbmFibGUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKworCS8qCisJICogSGVyZSB3ZSBoYXZlIHRvIGRvIFBvcnQgUmVzZXQgYXQgbW9zdCB0d2ljZSBmb3IKKwkgKiBQb3J0IEVuYWJsZSBiaXQgdG8gYmUgc2V0LgorCSAqLworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJdGVtcCA9IGVoY2lfcmVhZGwoZWhjaSwgcG9ydHNjX3JlZyk7CisJCXRlbXAgfD0gUE9SVF9SRVNFVDsKKwkJZWhjaV93cml0ZWwoZWhjaSwgdGVtcCwgcG9ydHNjX3JlZyk7CisJCW1kZWxheSgxMCk7CisJCXRlbXAgJj0gflBPUlRfUkVTRVQ7CisJCWVoY2lfd3JpdGVsKGVoY2ksIHRlbXAsIHBvcnRzY19yZWcpOworCQltZGVsYXkoMSk7CisJCXRyaWVzID0gMTAwOworCQlkbyB7CisJCQltZGVsYXkoMSk7CisJCQkvKgorCQkJICogVXAgdG8gdGhpcyBwb2ludCwgUG9ydCBFbmFibGUgYml0IGlzCisJCQkgKiBleHBlY3RlZCB0byBiZSBzZXQgYWZ0ZXIgMiBtcyB3YWl0aW5nLgorCQkJICogVVNCMSB1c3VhbGx5IHRha2VzIGV4dHJhIDQ1IG1zLCBmb3Igc2FmZXR5LAorCQkJICogd2UgdGFrZSAxMDAgbXMgYXMgdGltZW91dC4KKwkJCSAqLworCQkJdGVtcCA9IGVoY2lfcmVhZGwoZWhjaSwgcG9ydHNjX3JlZyk7CisJCX0gd2hpbGUgKCEodGVtcCAmIFBPUlRfUEUpICYmIHRyaWVzLS0pOworCQlpZiAodGVtcCAmIFBPUlRfUEUpCisJCQlicmVhazsKKwl9CisJaWYgKGkgPT0gMikKKwkJcmV0dmFsID0gLUVUSU1FRE9VVDsKKworCS8qCisJICogQ2xlYXIgQ29ubmVjdCBTdGF0dXMgQ2hhbmdlIGJpdCBpZiBpdCdzIHNldC4KKwkgKiBXZSBjYW4ndCBjbGVhciBQT1JUX1BFQy4gSXQgd2lsbCBhbHNvIGNhdXNlIFBPUlRfUEUgdG8gYmUgY2xlYXJlZC4KKwkgKi8KKwlpZiAodGVtcCAmIFBPUlRfQ1NDKQorCQllaGNpX3dyaXRlbChlaGNpLCBQT1JUX0NTQywgcG9ydHNjX3JlZyk7CisKKwkvKgorCSAqIFdyaXRlIHRvIGNsZWFyIGFueSBpbnRlcnJ1cHQgc3RhdHVzIGJpdHMgdGhhdCBtaWdodCBiZSBzZXQKKwkgKiBkdXJpbmcgcG9ydCByZXNldC4KKwkgKi8KKwl0ZW1wID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+cmVncy0+c3RhdHVzKTsKKwllaGNpX3dyaXRlbChlaGNpLCB0ZW1wLCAmZWhjaS0+cmVncy0+c3RhdHVzKTsKKworCS8qIHJlc3RvcmUgb3JpZ2luYWwgaW50ZXJydXB0IGVuYWJsZSBiaXRzICovCisJZWhjaV93cml0ZWwoZWhjaSwgc2F2ZWRfdXNiaW50ciwgJmVoY2ktPnJlZ3MtPmludHJfZW5hYmxlKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCiBzdGF0aWMgaW50IHRlZ3JhX2VoY2lfaHViX2NvbnRyb2woCiAJc3RydWN0IHVzYl9oY2QJKmhjZCwKIAl1MTYJCXR5cGVSZXEsCkBAIC0xMjEsNiArMTg2LDEzIEBACiAJCWdvdG8gZG9uZTsKIAl9CiAKKwkvKiBGb3IgVVNCMSBwb3J0IHdlIG5lZWQgdG8gaXNzdWUgUG9ydCBSZXNldCB0d2ljZSBpbnRlcm5hbGx5ICovCisJaWYgKHRlZ3JhLT5waHktPmluc3RhbmNlID09IDAgJiYKKwkgICAodHlwZVJlcSA9PSBTZXRQb3J0RmVhdHVyZSAmJiB3VmFsdWUgPT0gVVNCX1BPUlRfRkVBVF9SRVNFVCkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWhjaS0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gdGVncmFfZWhjaV9pbnRlcm5hbF9wb3J0X3Jlc2V0KGVoY2ksIHN0YXR1c19yZWcpOworCX0KKwogCS8qCiAJICogVGVncmEgaG9zdCBjb250cm9sbGVyIHdpbGwgdGltZSB0aGUgcmVzdW1lIG9wZXJhdGlvbiB0byBjbGVhciB0aGUgYml0CiAJICogd2hlbiB0aGUgcG9ydCBjb250cm9sIHN0YXRlIHN3aXRjaGVzIHRvIEhTIG9yIEZTIElkbGUuIFRoaXMgYmVoYXZpb3IKQEAgLTMyOCw3ICs0MDAsNyBAQAogCS8qIEVIQ0kgcmVnaXN0ZXJzIHN0YXJ0IGF0IG9mZnNldCAweDEwMCAqLwogCWVoY2ktPmNhcHMgPSBoY2QtPnJlZ3MgKyAweDEwMDsKIAllaGNpLT5yZWdzID0gaGNkLT5yZWdzICsgMHgxMDAgKwotCQlIQ19MRU5HVEgocmVhZGwoJmVoY2ktPmNhcHMtPmhjX2NhcGJhc2UpKTsKKwkJSENfTEVOR1RIKGVoY2ksIHJlYWRsKCZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7CiAKIAlkYmdfaGNzX3BhcmFtcyhlaGNpLCAicmVzZXQiKTsKIAlkYmdfaGNjX3BhcmFtcyhlaGNpLCAicmVzZXQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS12dDg1MDAuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS12dDg1MDAuYwppbmRleCAyMDE2ODA2Li40N2Q3NDk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktdnQ4NTAwLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXZ0ODUwMC5jCkBAIC0xMjEsNyArMTIxLDggQEAKIAogCWVoY2kgPSBoY2RfdG9fZWhjaShoY2QpOwogCWVoY2ktPmNhcHMgPSBoY2QtPnJlZ3M7Ci0JZWhjaS0+cmVncyA9IGhjZC0+cmVncyArIEhDX0xFTkdUSChyZWFkbCgmZWhjaS0+Y2Fwcy0+aGNfY2FwYmFzZSkpOworCWVoY2ktPnJlZ3MgPSBoY2QtPnJlZ3MgKworCQlIQ19MRU5HVEgoZWhjaSwgcmVhZGwoJmVoY2ktPmNhcHMtPmhjX2NhcGJhc2UpKTsKIAogCWRiZ19oY3NfcGFyYW1zKGVoY2ksICJyZXNldCIpOwogCWRiZ19oY2NfcGFyYW1zKGVoY2ksICJyZXNldCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXc5MHg5MDAuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS13OTB4OTAwLmMKaW5kZXggNmJjMzU4MC4uNTJhMDI3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXc5MHg5MDAuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktdzkweDkwMC5jCkBAIC01Nyw3ICs1Nyw3IEBACiAJZWhjaSA9IGhjZF90b19laGNpKGhjZCk7CiAJZWhjaS0+Y2FwcyA9IGhjZC0+cmVnczsKIAllaGNpLT5yZWdzID0gaGNkLT5yZWdzICsKLQkJIEhDX0xFTkdUSChlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7CisJCUhDX0xFTkdUSChlaGNpLCBlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7CiAKIAkvKiBlbmFibGUgUEhZIDAsMSx0aGUgcmVncyBvbmx5IGFwcGx5IHRvIHc5MHA5MTAKIAkqICAweEE0LDB4QTggd2VyZSBvZmZzZXRzIG9mIFBIWTAgYW5kIFBIWTEgY29udHJvbGxlciBvZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXhpbGlueC1vZi5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXhpbGlueC1vZi5jCmluZGV4IGVmZmM1OGQuLmE2NGQ2ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS14aWxpbngtb2YuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2kteGlsaW54LW9mLmMKQEAgLTIyMCw3ICsyMjAsNyBAQAogCSAqLwogCWVoY2ktPmNhcHMgPSBoY2QtPnJlZ3MgKyAweDEwMDsKIAllaGNpLT5yZWdzID0gaGNkLT5yZWdzICsgMHgxMDAgKwotCQkJSENfTEVOR1RIKGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjX2NhcGJhc2UpKTsKKwkJSENfTEVOR1RIKGVoY2ksIGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjX2NhcGJhc2UpKTsKIAogCS8qIGNhY2hlIHRoaXMgcmVhZG9ubHkgZGF0YTsgbWluaW1pemUgY2hpcCByZWFkcyAqLwogCWVoY2ktPmhjc19wYXJhbXMgPSBlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5jYXBzLT5oY3NfcGFyYW1zKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLmgKaW5kZXggMzMzZGRjMS4uYmQ2ZmY0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLmgKQEAgLTExOCw2ICsxMTgsNyBAQAogCXN0cnVjdCB0aW1lcl9saXN0CXdhdGNoZG9nOwogCXVuc2lnbmVkIGxvbmcJCWFjdGlvbnM7CiAJdW5zaWduZWQJCXN0YW1wOworCXVuc2lnbmVkCQlwZXJpb2RpY19zdGFtcDsKIAl1bnNpZ25lZAkJcmFuZG9tX2ZyYW1lOwogCXVuc2lnbmVkIGxvbmcJCW5leHRfc3RhdGVjaGFuZ2U7CiAJa3RpbWVfdAkJCWxhc3RfcGVyaW9kaWNfZW5hYmxlOwpAQCAtMTI4LDEyICsxMjksMTQgQEAKIAl1bnNpZ25lZAkJaGFzX2ZzbF9wb3J0X2J1ZzoxOyAvKiBGcmVlU2NhbGUgKi8KIAl1bnNpZ25lZAkJYmlnX2VuZGlhbl9tbWlvOjE7CiAJdW5zaWduZWQJCWJpZ19lbmRpYW5fZGVzYzoxOworCXVuc2lnbmVkCQliaWdfZW5kaWFuX2NhcGJhc2U6MTsKIAl1bnNpZ25lZAkJaGFzX2FtY2NfdXNiMjM6MTsKIAl1bnNpZ25lZAkJbmVlZF9pb193YXRjaGRvZzoxOwogCXVuc2lnbmVkCQlicm9rZW5fcGVyaW9kaWM6MTsKIAl1bnNpZ25lZAkJYW1kX3BsbF9maXg6MTsKIAl1bnNpZ25lZAkJZnNfaV90aHJlc2g6MTsJLyogSW50ZWwgaXNvIHNjaGVkdWxpbmcgKi8KIAl1bnNpZ25lZAkJdXNlX2R1bW15X3FoOjE7CS8qIEFNRCBGcmFtZSBMaXN0IHRhYmxlIHF1aXJrKi8KKwl1bnNpZ25lZAkJaGFzX3N5bm9wc3lzX2hjX2J1ZzoxOyAvKiBTeW5vcHN5cyBIQyAqLwogCiAJLyogcmVxdWlyZWQgZm9yIHVzYjMyIHF1aXJrICovCiAJI2RlZmluZSBPSENJX0NUUkxfSENGUyAgICAgICAgICAoMyA8PCA2KQpAQCAtMTYwLDYgKzE2MywxMCBAQAogI2lmZGVmIERFQlVHCiAJc3RydWN0IGRlbnRyeQkJKmRlYnVnX2RpcjsKICNlbmRpZgorCS8qCisJICogT1RHIGNvbnRyb2xsZXJzIGFuZCB0cmFuc2NlaXZlcnMgbmVlZCBzb2Z0d2FyZSBpbnRlcmFjdGlvbgorCSAqLworCXN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIJKnRyYW5zY2VpdmVyOwogfTsKIAogLyogY29udmVydCBiZXR3ZWVuIGFuIEhDRCBwb2ludGVyIGFuZCB0aGUgY29ycmVzcG9uZGluZyBFSENJX0hDRCAqLwpAQCAtNjAwLDEyICs2MDcsMTggQEAKICAqIFRoaXMgYXR0ZW1wdHMgdG8gc3VwcG9ydCBlaXRoZXIgZm9ybWF0IGF0IGNvbXBpbGUgdGltZSB3aXRob3V0IGEKICAqIHJ1bnRpbWUgcGVuYWx0eSwgb3IgYm90aCBmb3JtYXRzIHdpdGggdGhlIGFkZGl0aW9uYWwgb3ZlcmhlYWQKICAqIG9mIGNoZWNraW5nIGEgZmxhZyBiaXQuCisgKgorICogZWhjaV9iaWdfZW5kaWFuX2NhcGJhc2UgaXMgYSBzcGVjaWFsIHF1aXJrIGZvciBjb250cm9sbGVycyB0aGF0CisgKiBpbXBsZW1lbnQgdGhlIEhDIGNhcGFiaWxpdHkgcmVnaXN0ZXJzIGFzIHNlcGFyYXRlIHJlZ2lzdGVycyBhbmQgbm90CisgKiBhcyBmaWVsZHMgb2YgYSAzMi1iaXQgcmVnaXN0ZXIuCiAgKi8KIAogI2lmZGVmIENPTkZJR19VU0JfRUhDSV9CSUdfRU5ESUFOX01NSU8KICNkZWZpbmUgZWhjaV9iaWdfZW5kaWFuX21taW8oZSkJCSgoZSktPmJpZ19lbmRpYW5fbW1pbykKKyNkZWZpbmUgZWhjaV9iaWdfZW5kaWFuX2NhcGJhc2UoZSkJKChlKS0+YmlnX2VuZGlhbl9jYXBiYXNlKQogI2Vsc2UKICNkZWZpbmUgZWhjaV9iaWdfZW5kaWFuX21taW8oZSkJCTAKKyNkZWZpbmUgZWhjaV9iaWdfZW5kaWFuX2NhcGJhc2UoZSkJMAogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lteDIxLWRiZy5jIGIvZHJpdmVycy91c2IvaG9zdC9pbXgyMS1kYmcuYwppbmRleCA1MTJmNjQ3Li42ZDc1MzM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2lteDIxLWRiZy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaW14MjEtZGJnLmMKQEAgLTM4NCw3ICszODQsNyBAQAogCXNlcV9wcmludGYocywgIiVzICVkOlxuIgogCQkiY2M9MFglMDJYXG4iCiAJCSJzY2hlZHVsZWQgZnJhbWUgJWQgKCVkKVxuIgotCQkic3VibWl0dHRlZCBmcmFtZSAlZCAoJWQpXG4iCisJCSJzdWJtaXR0ZWQgZnJhbWUgJWQgKCVkKVxuIgogCQkiY29tcGxldGVkIGZyYW1lICVkICglZClcbiIKIAkJInJlcXVlc3RlZCBsZW5ndGg9JWRcbiIKIAkJImNvbXBsZXRlZCBsZW5ndGg9JWRcblxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC1oY2QuYwppbmRleCBjMGUyMmYyLi5iYWFlNGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jCkBAIC02MTIsNiArNjEyLDcgQEAKIAkJCS8qIElSUSdzIGFyZSBvZmYsIHdlIGRvIG5vIERNQSwKIAkJCSAgIHBlcmZlY3RseSByZWFkeSB0byBkaWUgLi4uICovCiAJCQloY2QtPnN0YXRlID0gSENfU1RBVEVfSEFMVDsKKwkJCXVzYl9oY19kaWVkKGhjZCk7CiAJCQlyZXQgPSBJUlFfSEFORExFRDsKIAkJCWdvdG8gZG9uZTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMzYyLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMzYyLWhjZC5jCmluZGV4IGY5NzU3MGEuLjljMzdkYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTM2Mi1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjItaGNkLmMKQEAgLTgxLDYgKzgxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmMKaW5kZXggN2IyZTY5YS4uYzllNmU0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuYwpAQCAtOCw2ICs4LDggQEAKICAqCiAgKiAoYykgMjAwNyBTZWJhc3RpYW4gU2lld2lvciA8YmlnZWFzeUBsaW51dHJvbml4LmRlPgogICoKKyAqIChjKSAyMDExIEFydmlkIEJyb2RpbiA8YXJ2aWQuYnJvZGluQGVuZWEuY29tPgorICoKICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMjYsMTQgKzI4LDE4IEBACiAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcXRkX2NhY2hlcDsKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcWhfY2FjaGVwOworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICp1cmJfbGlzdGl0ZW1fY2FjaGVwOwogCiBzdHJ1Y3QgaXNwMTc2MF9oY2QgewogCXUzMiBoY3NfcGFyYW1zOwogCXNwaW5sb2NrX3QJCWxvY2s7Ci0Jc3RydWN0IGludGVyX3BhY2tldF9pbmZvIGF0bF9pbnRzWzMyXTsKLQlzdHJ1Y3QgaW50ZXJfcGFja2V0X2luZm8gaW50X2ludHNbMzJdOworCXN0cnVjdCBzbG90aW5mbwkJYXRsX3Nsb3RzWzMyXTsKKwlpbnQJCQlhdGxfZG9uZV9tYXA7CisJc3RydWN0IHNsb3RpbmZvCQlpbnRfc2xvdHNbMzJdOworCWludAkJCWludF9kb25lX21hcDsKIAlzdHJ1Y3QgbWVtb3J5X2NodW5rIG1lbW9yeV9wb29sW0JMT0NLU107Ci0JdTMyIGF0bF9xdWV1ZWQ7CisJc3RydWN0IGxpc3RfaGVhZAljb250cm9scWhzLCBidWxrcWhzLCBpbnRlcnJ1cHRxaHM7CisJaW50IGFjdGl2ZV9wdGRzOwogCiAJLyogcGVyaW9kaWMgc2NoZWR1bGUgc3VwcG9ydCAqLwogI2RlZmluZQlERUZBVUxUX0lfVERQUwkJMTAyNApAQCAtODUsMTggKzkxLDM0IEBACiAJc3RydWN0IGxpc3RfaGVhZCBxdGRfbGlzdDsKIAlzdHJ1Y3QgdXJiICp1cmI7CiAJc2l6ZV90IGxlbmd0aDsKKwlzaXplX3QgYWN0dWFsX2xlbmd0aDsKIAotCS8qIGlzcCBzcGVjaWFsKi8KKwkvKiBRVERfRU5RVUVVRUQ6CXdhaXRpbmcgZm9yIHRyYW5zZmVyIChpbmFjdGl2ZSkgKi8KKwkvKiBRVERfUEFZTE9BRF9BTExPQzoJY2hpcCBtZW0gaGFzIGJlZW4gYWxsb2NhdGVkIGZvciBwYXlsb2FkICovCisJLyogUVREX1hGRVJfU1RBUlRFRDoJdmFsaWQgcHRkIGhhcyBiZWVuIHdyaXR0ZW4gdG8gaXNwMTc2eCAtIG9ubHkKKwkJCQlpbnRlcnJ1cHQgaGFuZGxlciBtYXkgdG91Y2ggdGhpcyBxdGQhICovCisJLyogUVREX1hGRVJfQ09NUExFVEU6CXBheWxvYWQgaGFzIGJlZW4gdHJhbnNmZXJyZWQgc3VjY2Vzc2Z1bGx5ICovCisJLyogUVREX1JFVElSRToJCXRyYW5zZmVyIGVycm9yL2Fib3J0IHF0ZCAqLworI2RlZmluZSBRVERfRU5RVUVVRUQJCTAKKyNkZWZpbmUgUVREX1BBWUxPQURfQUxMT0MJMQorI2RlZmluZSBRVERfWEZFUl9TVEFSVEVECTIKKyNkZWZpbmUgUVREX1hGRVJfQ09NUExFVEUJMworI2RlZmluZSBRVERfUkVUSVJFCQk0CiAJdTMyIHN0YXR1czsKLSNkZWZpbmUgVVJCX0VOUVVFVUVECQkoMSA8PCAxKQogfTsKIAorLyogUXVldWUgaGVhZCwgb25lIGZvciBlYWNoIGFjdGl2ZSBlbmRwb2ludCAqLwogc3RydWN0IGlzcDE3NjBfcWggewotCS8qIGZpcnN0IHBhcnQgZGVmaW5lZCBieSBFSENJIHNwZWMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHFoX2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCBxdGRfbGlzdDsKLQogCXUzMiB0b2dnbGU7CiAJdTMyIHBpbmc7CisJaW50IHNsb3Q7Cit9OworCitzdHJ1Y3QgdXJiX2xpc3RpdGVtIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHVyYl9saXN0OworCXN0cnVjdCB1cmIgKnVyYjsKIH07CiAKIC8qCkBAIC0yNzIsNyArMjk0LDcgQEAKIAkJcGF5bG9hZF9hZGRyICs9IHByaXYtPm1lbW9yeV9wb29sW2N1cnIgKyBpXS5zaXplOwogCX0KIAotCUJVR19PTihwYXlsb2FkX2FkZHIgLSBwcml2LT5tZW1vcnlfcG9vbFswXS5zdGFydCA+IFBBWUxPQURfQVJFQV9TSVpFKTsKKwlXQVJOX09OKHBheWxvYWRfYWRkciAtIHByaXYtPm1lbW9yeV9wb29sWzBdLnN0YXJ0ID4gUEFZTE9BRF9BUkVBX1NJWkUpOwogfQogCiBzdGF0aWMgdm9pZCBhbGxvY19tZW0oc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IGlzcDE3NjBfcXRkICpxdGQpCkBAIC0yODAsNyArMzAyLDcgQEAKIAlzdHJ1Y3QgaXNwMTc2MF9oY2QgKnByaXYgPSBoY2RfdG9fcHJpdihoY2QpOwogCWludCBpOwogCi0JQlVHX09OKHF0ZC0+cGF5bG9hZF9hZGRyKTsKKwlXQVJOX09OKHF0ZC0+cGF5bG9hZF9hZGRyKTsKIAogCWlmICghcXRkLT5sZW5ndGgpCiAJCXJldHVybjsKQEAgLTI5MywxOSArMzE1LDYgQEAKIAkJCXJldHVybjsKIAkJfQogCX0KLQotCWRldl9lcnIoaGNkLT5zZWxmLmNvbnRyb2xsZXIsCi0JCQkJIiVzOiBDYW5ub3QgYWxsb2NhdGUgJXp1IGJ5dGVzIG9mIG1lbW9yeVxuIgotCQkJCSJDdXJyZW50IG1lbW9yeSBtYXA6XG4iLAotCQkJCV9fZnVuY19fLCBxdGQtPmxlbmd0aCk7Ci0JZm9yIChpID0gMDsgaSA8IEJMT0NLUzsgaSsrKSB7Ci0JCWRldl9lcnIoaGNkLT5zZWxmLmNvbnRyb2xsZXIsICJQb29sICUyZCBzaXplICU0ZCBzdGF0dXM6ICVkXG4iLAotCQkJCWksIHByaXYtPm1lbW9yeV9wb29sW2ldLnNpemUsCi0JCQkJcHJpdi0+bWVtb3J5X3Bvb2xbaV0uZnJlZSk7Ci0JfQotCS8qIFhYWCBtYXliZSAtRU5PTUVNIGNvdWxkIGJlIHBvc3NpYmxlICovCi0JQlVHKCk7Ci0JcmV0dXJuOwogfQogCiBzdGF0aWMgdm9pZCBmcmVlX21lbShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgaXNwMTc2MF9xdGQgKnF0ZCkKQEAgLTMxOCw3ICszMjcsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IEJMT0NLUzsgaSsrKSB7CiAJCWlmIChwcml2LT5tZW1vcnlfcG9vbFtpXS5zdGFydCA9PSBxdGQtPnBheWxvYWRfYWRkcikgewotCQkJQlVHX09OKHByaXYtPm1lbW9yeV9wb29sW2ldLmZyZWUpOworCQkJV0FSTl9PTihwcml2LT5tZW1vcnlfcG9vbFtpXS5mcmVlKTsKIAkJCXByaXYtPm1lbW9yeV9wb29sW2ldLmZyZWUgPSAxOwogCQkJcXRkLT5wYXlsb2FkX2FkZHIgPSAwOwogCQkJcmV0dXJuOwpAQCAtMzI3LDE5ICszMzYsOCBAQAogCiAJZGV2X2VycihoY2QtPnNlbGYuY29udHJvbGxlciwgIiVzOiBJbnZhbGlkIHBvaW50ZXI6ICUwOHhcbiIsCiAJCQkJCQlfX2Z1bmNfXywgcXRkLT5wYXlsb2FkX2FkZHIpOwotCUJVRygpOwotfQotCi1zdGF0aWMgdm9pZCBpc3AxNzYwX2luaXRfcmVncyhzdHJ1Y3QgdXNiX2hjZCAqaGNkKQotewotCXJlZ193cml0ZTMyKGhjZC0+cmVncywgSENfQlVGRkVSX1NUQVRVU19SRUcsIDApOwotCXJlZ193cml0ZTMyKGhjZC0+cmVncywgSENfQVRMX1BURF9TS0lQTUFQX1JFRywgTk9fVFJBTlNGRVJfQUNUSVZFKTsKLQlyZWdfd3JpdGUzMihoY2QtPnJlZ3MsIEhDX0lOVF9QVERfU0tJUE1BUF9SRUcsIE5PX1RSQU5TRkVSX0FDVElWRSk7Ci0JcmVnX3dyaXRlMzIoaGNkLT5yZWdzLCBIQ19JU09fUFREX1NLSVBNQVBfUkVHLCBOT19UUkFOU0ZFUl9BQ1RJVkUpOwotCi0JcmVnX3dyaXRlMzIoaGNkLT5yZWdzLCBIQ19BVExfUFREX0RPTkVNQVBfUkVHLCB+Tk9fVFJBTlNGRVJfQUNUSVZFKTsKLQlyZWdfd3JpdGUzMihoY2QtPnJlZ3MsIEhDX0lOVF9QVERfRE9ORU1BUF9SRUcsIH5OT19UUkFOU0ZFUl9BQ1RJVkUpOwotCXJlZ193cml0ZTMyKGhjZC0+cmVncywgSENfSVNPX1BURF9ET05FTUFQX1JFRywgfk5PX1RSQU5TRkVSX0FDVElWRSk7CisJV0FSTl9PTigxKTsKKwlxdGQtPnBheWxvYWRfYWRkciA9IDA7CiB9CiAKIHN0YXRpYyBpbnQgaGFuZHNoYWtlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHUzMiByZWcsCkBAIC0zNzcsMzEgKzM3NSwyNyBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyB2b2lkIHFoX2Rlc3Ryb3koc3RydWN0IGlzcDE3NjBfcWggKnFoKQotewotCUJVR19PTighbGlzdF9lbXB0eSgmcWgtPnF0ZF9saXN0KSk7Ci0Ja21lbV9jYWNoZV9mcmVlKHFoX2NhY2hlcCwgcWgpOwotfQotCi1zdGF0aWMgc3RydWN0IGlzcDE3NjBfcWggKmlzcDE3NjBfcWhfYWxsb2MoZ2ZwX3QgZmxhZ3MpCitzdGF0aWMgc3RydWN0IGlzcDE3NjBfcWggKnFoX2FsbG9jKGdmcF90IGZsYWdzKQogewogCXN0cnVjdCBpc3AxNzYwX3FoICpxaDsKIAogCXFoID0ga21lbV9jYWNoZV96YWxsb2MocWhfY2FjaGVwLCBmbGFncyk7CiAJaWYgKCFxaCkKLQkJcmV0dXJuIHFoOworCQlyZXR1cm4gTlVMTDsKIAorCUlOSVRfTElTVF9IRUFEKCZxaC0+cWhfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJnFoLT5xdGRfbGlzdCk7CisJcWgtPnNsb3QgPSAtMTsKKwogCXJldHVybiBxaDsKIH0KIAotLyogbWFnaWMgbnVtYmVycyB0aGF0IGNhbiBhZmZlY3Qgc3lzdGVtIHBlcmZvcm1hbmNlICovCi0jZGVmaW5lCUVIQ0lfVFVORV9DRVJSCQkzCS8qIDAtMyBxdGQgcmV0cmllczsgMCA9PSBkb24ndCBzdG9wICovCi0jZGVmaW5lCUVIQ0lfVFVORV9STF9IUwkJNAkvKiBuYWsgdGhyb3R0bGU7IHNlZSA0LjkgKi8KLSNkZWZpbmUJRUhDSV9UVU5FX1JMX1RUCQkwCi0jZGVmaW5lCUVIQ0lfVFVORV9NVUxUX0hTCTEJLyogMS0zIHRyYW5zYWN0aW9ucy91ZnJhbWU7IDQuMTAuMyAqLwotI2RlZmluZQlFSENJX1RVTkVfTVVMVF9UVAkxCi0jZGVmaW5lCUVIQ0lfVFVORV9GTFMJCTIJLyogKHNtYWxsKSAyNTYgZnJhbWUgc2NoZWR1bGUgKi8KK3N0YXRpYyB2b2lkIHFoX2ZyZWUoc3RydWN0IGlzcDE3NjBfcWggKnFoKQoreworCVdBUk5fT04oIWxpc3RfZW1wdHkoJnFoLT5xdGRfbGlzdCkpOworCVdBUk5fT04ocWgtPnNsb3QgPiAtMSk7CisJa21lbV9jYWNoZV9mcmVlKHFoX2NhY2hlcCwgcWgpOworfQogCiAvKiBvbmUtdGltZSBpbml0LCBvbmx5IGZvciBtZW1vcnkgc3RhdGUgKi8KIHN0YXRpYyBpbnQgcHJpdl9pbml0KHN0cnVjdCB1c2JfaGNkICpoY2QpCkBAIC00MTEsNiArNDA1LDEwIEBACiAKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CiAKKwlJTklUX0xJU1RfSEVBRCgmcHJpdi0+aW50ZXJydXB0cWhzKTsKKwlJTklUX0xJU1RfSEVBRCgmcHJpdi0+Y29udHJvbHFocyk7CisJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmJ1bGtxaHMpOworCiAJLyoKIAkgKiBodyBkZWZhdWx0OiAxSyBwZXJpb2RpYyBsaXN0IGhlYWRzLCBvbmUgcGVyIGZyYW1lLgogCSAqIHBlcmlvZGljX3NpemUgY2FuIHNocmluayBieSBVU0JDTUQgdXBkYXRlIGlmIGhjY19wYXJhbXMgYWxsb3dzLgpAQCAtNDY4LDcgKzQ2NiwxMCBAQAogCX0KIAogCS8qIHByZSByZXNldCAqLwotCWlzcDE3NjBfaW5pdF9yZWdzKGhjZCk7CisJcmVnX3dyaXRlMzIoaGNkLT5yZWdzLCBIQ19CVUZGRVJfU1RBVFVTX1JFRywgMCk7CisJcmVnX3dyaXRlMzIoaGNkLT5yZWdzLCBIQ19BVExfUFREX1NLSVBNQVBfUkVHLCBOT19UUkFOU0ZFUl9BQ1RJVkUpOworCXJlZ193cml0ZTMyKGhjZC0+cmVncywgSENfSU5UX1BURF9TS0lQTUFQX1JFRywgTk9fVFJBTlNGRVJfQUNUSVZFKTsKKwlyZWdfd3JpdGUzMihoY2QtPnJlZ3MsIEhDX0lTT19QVERfU0tJUE1BUF9SRUcsIE5PX1RSQU5TRkVSX0FDVElWRSk7CiAKIAkvKiByZXNldCAqLwogCXJlZ193cml0ZTMyKGhjZC0+cmVncywgSENfUkVTRVRfUkVHLCBTV19SRVNFVF9SRVNFVF9BTEwpOwpAQCAtNDg4LDEyICs0ODksMTUgQEAKIAkJCSAgIDE2IDogMzIsIChwcml2LT5kZXZmbGFncyAmIElTUDE3NjBfRkxBR19BTkFMT0dfT0MpID8KIAkJCSAgICJhbmFsb2ciIDogImRpZ2l0YWwiKTsKIAorCS8qIFRoaXMgaXMgd2VpcmQ6IGF0IHRoZSBmaXJzdCBwbHVnLWluIG9mIGEgZGV2aWNlIHRoZXJlIHNlZW1zIHRvIGJlCisJICAgb25lIHBhY2tldCBxdWV1ZWQgdGhhdCBuZXZlciBnZXRzIHJldHVybmVkPyAqLworCXByaXYtPmFjdGl2ZV9wdGRzID0gLTE7CisKIAkvKiBBVEwgcmVzZXQgKi8KIAlyZWdfd3JpdGUzMihoY2QtPnJlZ3MsIEhDX0hXX01PREVfQ1RSTCwgaHdtb2RlIHwgQUxMX0FUWF9SRVNFVCk7CiAJbWRlbGF5KDEwKTsKIAlyZWdfd3JpdGUzMihoY2QtPnJlZ3MsIEhDX0hXX01PREVfQ1RSTCwgaHdtb2RlKTsKIAotCXJlZ193cml0ZTMyKGhjZC0+cmVncywgSENfSU5URVJSVVBUX1JFRywgSU5URVJSVVBUX0VOQUJMRV9NQVNLKTsKIAlyZWdfd3JpdGUzMihoY2QtPnJlZ3MsIEhDX0lOVEVSUlVQVF9FTkFCTEUsIElOVEVSUlVQVF9FTkFCTEVfTUFTSyk7CiAKIAkvKgpAQCAtNTE2LDE0ICs1MjAsMjEgQEAKIAlyZWdfd3JpdGUzMihoY2QtPnJlZ3MsIEhDX0FUTF9QVERfTEFTVFBURF9SRUcsIDB4ODAwMDAwMDApOwogCXJlZ193cml0ZTMyKGhjZC0+cmVncywgSENfSU5UX1BURF9MQVNUUFREX1JFRywgMHg4MDAwMDAwMCk7CiAJcmVnX3dyaXRlMzIoaGNkLT5yZWdzLCBIQ19JU09fUFREX0xBU1RQVERfUkVHLCAweDAwMDAwMDAxKTsKKworCXJlZ193cml0ZTMyKGhjZC0+cmVncywgSENfQVRMX1BURF9TS0lQTUFQX1JFRywgMHhmZmZmZmZmZik7CisJcmVnX3dyaXRlMzIoaGNkLT5yZWdzLCBIQ19JTlRfUFREX1NLSVBNQVBfUkVHLCAweGZmZmZmZmZmKTsKKwlyZWdfd3JpdGUzMihoY2QtPnJlZ3MsIEhDX0lTT19QVERfU0tJUE1BUF9SRUcsIDB4ZmZmZmZmZmYpOworCisJcmVnX3dyaXRlMzIoaGNkLT5yZWdzLCBIQ19CVUZGRVJfU1RBVFVTX1JFRywKKwkJCQkJCUFUTF9CVUZfRklMTCB8IElOVF9CVUZfRklMTCk7CiB9CiAKIHN0YXRpYyB2b2lkIGlzcDE3NjBfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IHVzYl9oY2QgKmhjZCkKIHsKIAlyZWdfd3JpdGUzMihoY2QtPnJlZ3MsIEhDX0FUTF9JUlFfTUFTS19BTkRfUkVHLCAwKTsKLQlyZWdfd3JpdGUzMihoY2QtPnJlZ3MsIEhDX0FUTF9JUlFfTUFTS19PUl9SRUcsIDApOworCXJlZ193cml0ZTMyKGhjZC0+cmVncywgSENfQVRMX0lSUV9NQVNLX09SX1JFRywgMHhmZmZmZmZmZik7CiAJcmVnX3dyaXRlMzIoaGNkLT5yZWdzLCBIQ19JTlRfSVJRX01BU0tfQU5EX1JFRywgMCk7Ci0JcmVnX3dyaXRlMzIoaGNkLT5yZWdzLCBIQ19JTlRfSVJRX01BU0tfT1JfUkVHLCAwKTsKKwlyZWdfd3JpdGUzMihoY2QtPnJlZ3MsIEhDX0lOVF9JUlFfTUFTS19PUl9SRUcsIDB4ZmZmZmZmZmYpOwogCXJlZ193cml0ZTMyKGhjZC0+cmVncywgSENfSVNPX0lSUV9NQVNLX0FORF9SRUcsIDApOwogCXJlZ193cml0ZTMyKGhjZC0+cmVncywgSENfSVNPX0lSUV9NQVNLX09SX1JFRywgMHhmZmZmZmZmZik7CiAJLyogc3RlcCAyMyBwYXNzZWQgKi8KQEAgLTU0OCw4ICs1NTksNyBAQAogCWNvbW1hbmQgfD0gQ01EX1JVTjsKIAlyZWdfd3JpdGUzMihoY2QtPnJlZ3MsIEhDX1VTQkNNRCwgY29tbWFuZCk7CiAKLQlyZXR2YWwgPSBoYW5kc2hha2UoaGNkLCBIQ19VU0JDTUQsIENNRF9SVU4sIENNRF9SVU4sCi0JCQkyNTAgKiAxMDAwKTsKKwlyZXR2YWwgPSBoYW5kc2hha2UoaGNkLCBIQ19VU0JDTUQsIENNRF9SVU4sIENNRF9SVU4sIDI1MCAqIDEwMDApOwogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAKQEAgLTU5OCwxMiArNjA4LDE5IEBACiAJcmV0dXJuIChxdGQtPnVyYiAhPSB1cmIpOwogfQogCi1zdGF0aWMgdm9pZCB0cmFuc2Zvcm1faW50b19hdGwoc3RydWN0IGlzcDE3NjBfcWggKnFoLAorLyogbWFnaWMgbnVtYmVycyB0aGF0IGNhbiBhZmZlY3Qgc3lzdGVtIHBlcmZvcm1hbmNlICovCisjZGVmaW5lCUVIQ0lfVFVORV9DRVJSCQkzCS8qIDAtMyBxdGQgcmV0cmllczsgMCA9PSBkb24ndCBzdG9wICovCisjZGVmaW5lCUVIQ0lfVFVORV9STF9IUwkJNAkvKiBuYWsgdGhyb3R0bGU7IHNlZSA0LjkgKi8KKyNkZWZpbmUJRUhDSV9UVU5FX1JMX1RUCQkwCisjZGVmaW5lCUVIQ0lfVFVORV9NVUxUX0hTCTEJLyogMS0zIHRyYW5zYWN0aW9ucy91ZnJhbWU7IDQuMTAuMyAqLworI2RlZmluZQlFSENJX1RVTkVfTVVMVF9UVAkxCisjZGVmaW5lCUVIQ0lfVFVORV9GTFMJCTIJLyogKHNtYWxsKSAyNTYgZnJhbWUgc2NoZWR1bGUgKi8KKworc3RhdGljIHZvaWQgY3JlYXRlX3B0ZF9hdGwoc3RydWN0IGlzcDE3NjBfcWggKnFoLAogCQkJc3RydWN0IGlzcDE3NjBfcXRkICpxdGQsIHN0cnVjdCBwdGQgKnB0ZCkKIHsKIAl1MzIgbWF4cGFja2V0OwogCXUzMiBtdWx0aTsKLQl1MzIgcGlkX2NvZGU7CiAJdTMyIHJsID0gUkxfQ09VTlRFUjsKIAl1MzIgbmFrID0gTkFLX0NPVU5URVI7CiAKQEAgLTYxNiw2NyArNjMzLDYyIEBACiAJbWF4cGFja2V0ICY9IDB4N2ZmOwogCiAJLyogRFcwICovCi0JcHRkLT5kdzAgPSBQVERfVkFMSUQ7Ci0JcHRkLT5kdzAgfD0gUFREX0xFTkdUSChxdGQtPmxlbmd0aCk7Ci0JcHRkLT5kdzAgfD0gUFREX01BWFBBQ0tFVChtYXhwYWNrZXQpOwotCXB0ZC0+ZHcwIHw9IFBURF9FTkRQT0lOVCh1c2JfcGlwZWVuZHBvaW50KHF0ZC0+dXJiLT5waXBlKSk7CisJcHRkLT5kdzAgPSBEVzBfVkFMSURfQklUOworCXB0ZC0+ZHcwIHw9IFRPX0RXMF9MRU5HVEgocXRkLT5sZW5ndGgpOworCXB0ZC0+ZHcwIHw9IFRPX0RXMF9NQVhQQUNLRVQobWF4cGFja2V0KTsKKwlwdGQtPmR3MCB8PSBUT19EVzBfRU5EUE9JTlQodXNiX3BpcGVlbmRwb2ludChxdGQtPnVyYi0+cGlwZSkpOwogCiAJLyogRFcxICovCiAJcHRkLT5kdzEgPSB1c2JfcGlwZWVuZHBvaW50KHF0ZC0+dXJiLT5waXBlKSA+PiAxOwotCXB0ZC0+ZHcxIHw9IFBURF9ERVZJQ0VfQUREUih1c2JfcGlwZWRldmljZShxdGQtPnVyYi0+cGlwZSkpOwotCi0JcGlkX2NvZGUgPSBxdGQtPnBhY2tldF90eXBlOwotCXB0ZC0+ZHcxIHw9IFBURF9QSURfVE9LRU4ocGlkX2NvZGUpOworCXB0ZC0+ZHcxIHw9IFRPX0RXMV9ERVZJQ0VfQUREUih1c2JfcGlwZWRldmljZShxdGQtPnVyYi0+cGlwZSkpOworCXB0ZC0+ZHcxIHw9IFRPX0RXMV9QSURfVE9LRU4ocXRkLT5wYWNrZXRfdHlwZSk7CiAKIAlpZiAodXNiX3BpcGVidWxrKHF0ZC0+dXJiLT5waXBlKSkKLQkJcHRkLT5kdzEgfD0gUFREX1RSQU5TX0JVTEs7CisJCXB0ZC0+ZHcxIHw9IERXMV9UUkFOU19CVUxLOwogCWVsc2UgaWYgICh1c2JfcGlwZWludChxdGQtPnVyYi0+cGlwZSkpCi0JCXB0ZC0+ZHcxIHw9IFBURF9UUkFOU19JTlQ7CisJCXB0ZC0+ZHcxIHw9IERXMV9UUkFOU19JTlQ7CiAKIAlpZiAocXRkLT51cmItPmRldi0+c3BlZWQgIT0gVVNCX1NQRUVEX0hJR0gpIHsKIAkJLyogc3BsaXQgdHJhbnNhY3Rpb24gKi8KIAotCQlwdGQtPmR3MSB8PSBQVERfVFJBTlNfU1BMSVQ7CisJCXB0ZC0+ZHcxIHw9IERXMV9UUkFOU19TUExJVDsKIAkJaWYgKHF0ZC0+dXJiLT5kZXYtPnNwZWVkID09IFVTQl9TUEVFRF9MT1cpCi0JCQlwdGQtPmR3MSB8PSBQVERfU0VfVVNCX0xPU1BFRUQ7CisJCQlwdGQtPmR3MSB8PSBEVzFfU0VfVVNCX0xPU1BFRUQ7CiAKLQkJcHRkLT5kdzEgfD0gUFREX1BPUlRfTlVNKHF0ZC0+dXJiLT5kZXYtPnR0cG9ydCk7Ci0JCXB0ZC0+ZHcxIHw9IFBURF9IVUJfTlVNKHF0ZC0+dXJiLT5kZXYtPnR0LT5odWItPmRldm51bSk7CisJCXB0ZC0+ZHcxIHw9IFRPX0RXMV9QT1JUX05VTShxdGQtPnVyYi0+ZGV2LT50dHBvcnQpOworCQlwdGQtPmR3MSB8PSBUT19EVzFfSFVCX05VTShxdGQtPnVyYi0+ZGV2LT50dC0+aHViLT5kZXZudW0pOwogCiAJCS8qIFNFIGJpdCBmb3IgU3BsaXQgSU5UIHRyYW5zZmVycyAqLwogCQlpZiAodXNiX3BpcGVpbnQocXRkLT51cmItPnBpcGUpICYmCiAJCQkJKHF0ZC0+dXJiLT5kZXYtPnNwZWVkID09IFVTQl9TUEVFRF9MT1cpKQogCQkJcHRkLT5kdzEgfD0gMiA8PCAxNjsKIAotCQlwdGQtPmR3MyA9IDA7CiAJCXJsID0gMDsKIAkJbmFrID0gMDsKIAl9IGVsc2UgewotCQlwdGQtPmR3MCB8PSBQVERfTVVMVEkobXVsdGkpOworCQlwdGQtPmR3MCB8PSBUT19EVzBfTVVMVEkobXVsdGkpOwogCQlpZiAodXNiX3BpcGVjb250cm9sKHF0ZC0+dXJiLT5waXBlKSB8fAogCQkJCQkJdXNiX3BpcGVidWxrKHF0ZC0+dXJiLT5waXBlKSkKLQkJCXB0ZC0+ZHczID0gcWgtPnBpbmc7Ci0JCWVsc2UKLQkJCXB0ZC0+ZHczID0gMDsKKwkJCXB0ZC0+ZHczIHw9IFRPX0RXM19QSU5HKHFoLT5waW5nKTsKIAl9CiAJLyogRFcyICovCiAJcHRkLT5kdzIgPSAwOwotCXB0ZC0+ZHcyIHw9IFBURF9EQVRBX1NUQVJUX0FERFIoYmFzZV90b19jaGlwKHF0ZC0+cGF5bG9hZF9hZGRyKSk7Ci0JcHRkLT5kdzIgfD0gUFREX1JMX0NOVChybCk7Ci0JcHRkLT5kdzMgfD0gUFREX05BQ19DTlQobmFrKTsKKwlwdGQtPmR3MiB8PSBUT19EVzJfREFUQV9TVEFSVF9BRERSKGJhc2VfdG9fY2hpcChxdGQtPnBheWxvYWRfYWRkcikpOworCXB0ZC0+ZHcyIHw9IFRPX0RXMl9STChybCk7CiAKIAkvKiBEVzMgKi8KLQlwdGQtPmR3MyB8PSBxaC0+dG9nZ2xlOworCXB0ZC0+ZHczIHw9IFRPX0RXM19OQUtDT1VOVChuYWspOworCXB0ZC0+ZHczIHw9IFRPX0RXM19EQVRBX1RPR0dMRShxaC0+dG9nZ2xlKTsKIAlpZiAodXNiX3BpcGVjb250cm9sKHF0ZC0+dXJiLT5waXBlKSkgewogCQlpZiAocXRkLT5kYXRhX2J1ZmZlciA9PSBxdGQtPnVyYi0+c2V0dXBfcGFja2V0KQotCQkJcHRkLT5kdzMgJj0gflBURF9EQVRBX1RPR0dMRSgxKTsKKwkJCXB0ZC0+ZHczICY9IH5UT19EVzNfREFUQV9UT0dHTEUoMSk7CiAJCWVsc2UgaWYgKGxhc3RfcXRkX29mX3VyYihxdGQsIHFoKSkKLQkJCXB0ZC0+ZHczIHw9IFBURF9EQVRBX1RPR0dMRSgxKTsKKwkJCXB0ZC0+ZHczIHw9IFRPX0RXM19EQVRBX1RPR0dMRSgxKTsKIAl9CiAKLQlwdGQtPmR3MyB8PSBQVERfQUNUSVZFOworCXB0ZC0+ZHczIHw9IERXM19BQ1RJVkVfQklUOwogCS8qIENlcnIgKi8KLQlwdGQtPmR3MyB8PSBQVERfQ0VSUihFUlJfQ09VTlRFUik7CisJcHRkLT5kdzMgfD0gVE9fRFczX0NFUlIoRVJSX0NPVU5URVIpOwogfQogCiBzdGF0aWMgdm9pZCB0cmFuc2Zvcm1fYWRkX2ludChzdHJ1Y3QgaXNwMTc2MF9xaCAqcWgsCkBAIC03MzEsMTk3ICs3NDMsMTMgQEAKIAlwdGQtPmR3NCA9IHVzb2Y7CiB9CiAKLXN0YXRpYyB2b2lkIHRyYW5zZm9ybV9pbnRvX2ludChzdHJ1Y3QgaXNwMTc2MF9xaCAqcWgsCitzdGF0aWMgdm9pZCBjcmVhdGVfcHRkX2ludChzdHJ1Y3QgaXNwMTc2MF9xaCAqcWgsCiAJCQlzdHJ1Y3QgaXNwMTc2MF9xdGQgKnF0ZCwgc3RydWN0IHB0ZCAqcHRkKQogewotCXRyYW5zZm9ybV9pbnRvX2F0bChxaCwgcXRkLCBwdGQpOworCWNyZWF0ZV9wdGRfYXRsKHFoLCBxdGQsIHB0ZCk7CiAJdHJhbnNmb3JtX2FkZF9pbnQocWgsIHF0ZCwgcHRkKTsKIH0KIAotc3RhdGljIGludCBxdGRfZmlsbChzdHJ1Y3QgaXNwMTc2MF9xdGQgKnF0ZCwgdm9pZCAqZGF0YWJ1ZmZlciwgc2l6ZV90IGxlbiwKLQkJdTMyIHRva2VuKQotewotCWludCBjb3VudDsKLQotCXF0ZC0+ZGF0YV9idWZmZXIgPSBkYXRhYnVmZmVyOwotCXF0ZC0+cGFja2V0X3R5cGUgPSBHRVRfUVREX1RPS0VOX1RZUEUodG9rZW4pOwotCi0JaWYgKGxlbiA+IE1BWF9QQVlMT0FEX1NJWkUpCi0JCWNvdW50ID0gTUFYX1BBWUxPQURfU0laRTsKLQllbHNlCi0JCWNvdW50ID0gbGVuOwotCi0JcXRkLT5sZW5ndGggPSBjb3VudDsKLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBpbnQgY2hlY2tfZXJyb3Ioc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHB0ZCAqcHRkKQotewotCWludCBlcnJvciA9IDA7Ci0KLQlpZiAocHRkLT5kdzMgJiBEVzNfSEFMVF9CSVQpIHsKLQkJZXJyb3IgPSAtRVBJUEU7Ci0KLQkJaWYgKHB0ZC0+ZHczICYgRFczX0VSUk9SX0JJVCkKLQkJCXByX2VycigiZXJyb3IgYml0IGlzIHNldCBpbiBEVzNcbiIpOwotCX0KLQotCWlmIChwdGQtPmR3MyAmIERXM19RVERfQUNUSVZFKSB7Ci0JCWRldl9lcnIoaGNkLT5zZWxmLmNvbnRyb2xsZXIsICJUcmFuc2ZlciBhY3RpdmUgYml0IGlzIHNldCBEVzNcbiIKLQkJCSJuYWsgY291bnRlcjogJWQsIHJsOiAlZFxuIiwKLQkJCShwdGQtPmR3MyA+PiAxOSkgJiAweGYsIChwdGQtPmR3MiA+PiAyNSkgJiAweGYpOwotCX0KLQotCXJldHVybiBlcnJvcjsKLX0KLQotc3RhdGljIHZvaWQgY2hlY2tfaW50X2Vycl9zdGF0dXMoc3RydWN0IHVzYl9oY2QgKmhjZCwgdTMyIGR3NCkKLXsKLQl1MzIgaTsKLQotCWR3NCA+Pj0gODsKLQotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJc3dpdGNoIChkdzQgJiAweDcpIHsKLQkJY2FzZSBJTlRfVU5ERVJSVU46Ci0JCQlkZXZfZXJyKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiVW5kZXJydW4gKCVkKVxuIiwgaSk7Ci0JCQlicmVhazsKLQotCQljYXNlIElOVF9FWEFDVDoKLQkJCWRldl9lcnIoaGNkLT5zZWxmLmNvbnRyb2xsZXIsCi0JCQkJCQkiVHJhbnNhY3Rpb24gZXJyb3IgKCVkKVxuIiwgaSk7Ci0JCQlicmVhazsKLQotCQljYXNlIElOVF9CQUJCTEU6Ci0JCQlkZXZfZXJyKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiQmFiYmxlIGVycm9yICglZClcbiIsIGkpOwotCQkJYnJlYWs7Ci0JCX0KLQkJZHc0ID4+PSAzOwotCX0KLX0KLQotc3RhdGljIHZvaWQgZW5xdWV1ZV9vbmVfcXRkKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCBpc3AxNzYwX3F0ZCAqcXRkKQotewotCWlmIChxdGQtPmxlbmd0aCAmJiAocXRkLT5sZW5ndGggPD0gTUFYX1BBWUxPQURfU0laRSkpIHsKLQkJc3dpdGNoIChxdGQtPnBhY2tldF90eXBlKSB7Ci0JCWNhc2UgSU5fUElEOgotCQkJYnJlYWs7Ci0JCWNhc2UgT1VUX1BJRDoKLQkJY2FzZSBTRVRVUF9QSUQ6Ci0JCQltZW1fd3JpdGVzOChoY2QtPnJlZ3MsIHF0ZC0+cGF5bG9hZF9hZGRyLAotCQkJCQkJcXRkLT5kYXRhX2J1ZmZlciwgcXRkLT5sZW5ndGgpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBlbnF1ZXVlX29uZV9hdGxfcXRkKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCBpc3AxNzYwX3FoICpxaCwKLQkJCQkJdTMyIHNsb3QsIHN0cnVjdCBpc3AxNzYwX3F0ZCAqcXRkKQotewotCXN0cnVjdCBpc3AxNzYwX2hjZCAqcHJpdiA9IGhjZF90b19wcml2KGhjZCk7Ci0Jc3RydWN0IHB0ZCBwdGQ7Ci0KLQlhbGxvY19tZW0oaGNkLCBxdGQpOwotCXRyYW5zZm9ybV9pbnRvX2F0bChxaCwgcXRkLCAmcHRkKTsKLQlwdGRfd3JpdGUoaGNkLT5yZWdzLCBBVExfUFREX09GRlNFVCwgc2xvdCwgJnB0ZCk7Ci0JZW5xdWV1ZV9vbmVfcXRkKGhjZCwgcXRkKTsKLQotCXByaXYtPmF0bF9pbnRzW3Nsb3RdLnFoID0gcWg7Ci0JcHJpdi0+YXRsX2ludHNbc2xvdF0ucXRkID0gcXRkOwotCXF0ZC0+c3RhdHVzIHw9IFVSQl9FTlFVRVVFRDsKLQlxdGQtPnN0YXR1cyB8PSBzbG90IDw8IDE2OwotfQotCi1zdGF0aWMgdm9pZCBlbnF1ZXVlX29uZV9pbnRfcXRkKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCBpc3AxNzYwX3FoICpxaCwKLQkJCQkJdTMyIHNsb3QsIHN0cnVjdCBpc3AxNzYwX3F0ZCAqcXRkKQotewotCXN0cnVjdCBpc3AxNzYwX2hjZCAqcHJpdiA9IGhjZF90b19wcml2KGhjZCk7Ci0Jc3RydWN0IHB0ZCBwdGQ7Ci0KLQlhbGxvY19tZW0oaGNkLCBxdGQpOwotCXRyYW5zZm9ybV9pbnRvX2ludChxaCwgcXRkLCAmcHRkKTsKLQlwdGRfd3JpdGUoaGNkLT5yZWdzLCBJTlRfUFREX09GRlNFVCwgc2xvdCwgJnB0ZCk7Ci0JZW5xdWV1ZV9vbmVfcXRkKGhjZCwgcXRkKTsKLQotCXByaXYtPmludF9pbnRzW3Nsb3RdLnFoID0gcWg7Ci0JcHJpdi0+aW50X2ludHNbc2xvdF0ucXRkID0gcXRkOwotCXF0ZC0+c3RhdHVzIHw9IFVSQl9FTlFVRVVFRDsKLQlxdGQtPnN0YXR1cyB8PSBzbG90IDw8IDE2OwotfQotCi1zdGF0aWMgdm9pZCBlbnF1ZXVlX2FuX0FUTF9wYWNrZXQoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IGlzcDE3NjBfcWggKnFoLAotCQkJCSAgc3RydWN0IGlzcDE3NjBfcXRkICpxdGQpCi17Ci0Jc3RydWN0IGlzcDE3NjBfaGNkICpwcml2ID0gaGNkX3RvX3ByaXYoaGNkKTsKLQl1MzIgc2tpcF9tYXAsIG9yX21hcDsKLQl1MzIgc2xvdDsKLQl1MzIgYnVmZnN0YXR1czsKLQotCS8qCi0JICogV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB0byBlbnF1ZXVlCi0JICogYSBmb2xsb3ctdXAgcGFja2V0LCB0aGUgU0tJUCByZWdpc3RlciBnZXRzIHdyaXR0ZW4gYW5kIHJlYWQgYmFjawotCSAqIGFsbW9zdCBpbW1lZGlhdGVseS4gV2l0aCBJU1AxNzYxLCB0aGlzIHJlZ2lzdGVyIHJlcXVpcmVzIGEgZGVsYXkgb2YKLQkgKiAxOTVucyBiZXR3ZWVuIGEgd3JpdGUgYW5kIHN1YnNlcXVlbnQgcmVhZCAoc2VlIHNlY3Rpb24gMTUuMS4xLjMpLgotCSAqLwotCW1taW93YigpOwotCW5kZWxheSgxOTUpOwotCXNraXBfbWFwID0gcmVnX3JlYWQzMihoY2QtPnJlZ3MsIEhDX0FUTF9QVERfU0tJUE1BUF9SRUcpOwotCi0JQlVHX09OKCFza2lwX21hcCk7Ci0Jc2xvdCA9IF9fZmZzKHNraXBfbWFwKTsKLQotCWVucXVldWVfb25lX2F0bF9xdGQoaGNkLCBxaCwgc2xvdCwgcXRkKTsKLQotCW9yX21hcCA9IHJlZ19yZWFkMzIoaGNkLT5yZWdzLCBIQ19BVExfSVJRX01BU0tfT1JfUkVHKTsKLQlvcl9tYXAgfD0gKDEgPDwgc2xvdCk7Ci0JcmVnX3dyaXRlMzIoaGNkLT5yZWdzLCBIQ19BVExfSVJRX01BU0tfT1JfUkVHLCBvcl9tYXApOwotCi0Jc2tpcF9tYXAgJj0gfigxIDw8IHNsb3QpOwotCXJlZ193cml0ZTMyKGhjZC0+cmVncywgSENfQVRMX1BURF9TS0lQTUFQX1JFRywgc2tpcF9tYXApOwotCi0JcHJpdi0+YXRsX3F1ZXVlZCsrOwotCWlmIChwcml2LT5hdGxfcXVldWVkID09IDIpCi0JCXJlZ193cml0ZTMyKGhjZC0+cmVncywgSENfSU5URVJSVVBUX0VOQUJMRSwKLQkJCQlJTlRFUlJVUFRfRU5BQkxFX1NPVF9NQVNLKTsKLQotCWJ1ZmZzdGF0dXMgPSByZWdfcmVhZDMyKGhjZC0+cmVncywgSENfQlVGRkVSX1NUQVRVU19SRUcpOwotCWJ1ZmZzdGF0dXMgfD0gQVRMX0JVRkZFUjsKLQlyZWdfd3JpdGUzMihoY2QtPnJlZ3MsIEhDX0JVRkZFUl9TVEFUVVNfUkVHLCBidWZmc3RhdHVzKTsKLX0KLQotc3RhdGljIHZvaWQgZW5xdWV1ZV9hbl9JTlRfcGFja2V0KHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCBpc3AxNzYwX3FoICpxaCwKLQkJCQkgIHN0cnVjdCBpc3AxNzYwX3F0ZCAqcXRkKQotewotCXUzMiBza2lwX21hcCwgb3JfbWFwOwotCXUzMiBzbG90OwotCXUzMiBidWZmc3RhdHVzOwotCi0JLyoKLQkgKiBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIGludGVycnVwdCBoYW5kbGVyIHRvIGVucXVldWUKLQkgKiBhIGZvbGxvdy11cCBwYWNrZXQsIHRoZSBTS0lQIHJlZ2lzdGVyIGdldHMgd3JpdHRlbiBhbmQgcmVhZCBiYWNrCi0JICogYWxtb3N0IGltbWVkaWF0ZWx5LiBXaXRoIElTUDE3NjEsIHRoaXMgcmVnaXN0ZXIgcmVxdWlyZXMgYSBkZWxheSBvZgotCSAqIDE5NW5zIGJldHdlZW4gYSB3cml0ZSBhbmQgc3Vic2VxdWVudCByZWFkIChzZWUgc2VjdGlvbiAxNS4xLjEuMykuCi0JICovCi0JbW1pb3diKCk7Ci0JbmRlbGF5KDE5NSk7Ci0Jc2tpcF9tYXAgPSByZWdfcmVhZDMyKGhjZC0+cmVncywgSENfSU5UX1BURF9TS0lQTUFQX1JFRyk7Ci0KLQlCVUdfT04oIXNraXBfbWFwKTsKLQlzbG90ID0gX19mZnMoc2tpcF9tYXApOwotCi0JZW5xdWV1ZV9vbmVfaW50X3F0ZChoY2QsIHFoLCBzbG90LCBxdGQpOwotCi0Jb3JfbWFwID0gcmVnX3JlYWQzMihoY2QtPnJlZ3MsIEhDX0lOVF9JUlFfTUFTS19PUl9SRUcpOwotCW9yX21hcCB8PSAoMSA8PCBzbG90KTsKLQlyZWdfd3JpdGUzMihoY2QtPnJlZ3MsIEhDX0lOVF9JUlFfTUFTS19PUl9SRUcsIG9yX21hcCk7Ci0KLQlza2lwX21hcCAmPSB+KDEgPDwgc2xvdCk7Ci0JcmVnX3dyaXRlMzIoaGNkLT5yZWdzLCBIQ19JTlRfUFREX1NLSVBNQVBfUkVHLCBza2lwX21hcCk7Ci0KLQlidWZmc3RhdHVzID0gcmVnX3JlYWQzMihoY2QtPnJlZ3MsIEhDX0JVRkZFUl9TVEFUVVNfUkVHKTsKLQlidWZmc3RhdHVzIHw9IElOVF9CVUZGRVI7Ci0JcmVnX3dyaXRlMzIoaGNkLT5yZWdzLCBIQ19CVUZGRVJfU1RBVFVTX1JFRywgYnVmZnN0YXR1cyk7Ci19Ci0KIHN0YXRpYyB2b2lkIGlzcDE3NjBfdXJiX2RvbmUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiKQogX19yZWxlYXNlcyhwcml2LT5sb2NrKQogX19hY3F1aXJlcyhwcml2LT5sb2NrKQpAQCAtOTQ4LDU1NyArNzc2LDY1NCBAQAogCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIGlzcDE3NjBfcXRkX2ZyZWUoc3RydWN0IGlzcDE3NjBfcXRkICpxdGQpCi17Ci0JQlVHX09OKHF0ZC0+cGF5bG9hZF9hZGRyKTsKLQlrbWVtX2NhY2hlX2ZyZWUocXRkX2NhY2hlcCwgcXRkKTsKLX0KLQotc3RhdGljIHN0cnVjdCBpc3AxNzYwX3F0ZCAqY2xlYW5fdGhpc19xdGQoc3RydWN0IGlzcDE3NjBfcXRkICpxdGQsCi0JCQkJCQkJc3RydWN0IGlzcDE3NjBfcWggKnFoKQotewotCXN0cnVjdCBpc3AxNzYwX3F0ZCAqdG1wX3F0ZDsKLQotCWlmIChsaXN0X2lzX2xhc3QoJnF0ZC0+cXRkX2xpc3QsICZxaC0+cXRkX2xpc3QpKQotCQl0bXBfcXRkID0gTlVMTDsKLQllbHNlCi0JCXRtcF9xdGQgPSBsaXN0X2VudHJ5KHF0ZC0+cXRkX2xpc3QubmV4dCwgc3RydWN0IGlzcDE3NjBfcXRkLAotCQkJCQkJCQlxdGRfbGlzdCk7Ci0JbGlzdF9kZWwoJnF0ZC0+cXRkX2xpc3QpOwotCWlzcDE3NjBfcXRkX2ZyZWUocXRkKTsKLQlyZXR1cm4gdG1wX3F0ZDsKLX0KLQotLyoKLSAqIFJlbW92ZSB0aGlzIFFURCBmcm9tIHRoZSBRSCBsaXN0IGFuZCBmcmVlIGl0cyBtZW1vcnkuIElmIHRoaXMgUVRECi0gKiBpc24ndCB0aGUgbGFzdCBvbmUgdGhhbiByZW1vdmUgYWxzbyBoaXMgc3VjY2Vzc29yKHMpLgotICogUmV0dXJucyB0aGUgUVREIHdoaWNoIGlzIHBhcnQgb2YgYW4gbmV3IFVSQiBhbmQgc2hvdWxkIGJlIGVucXVldWVkLgotICovCi1zdGF0aWMgc3RydWN0IGlzcDE3NjBfcXRkICpjbGVhbl91cF9xdGRsaXN0KHN0cnVjdCBpc3AxNzYwX3F0ZCAqcXRkLAotCQkJCQkJCXN0cnVjdCBpc3AxNzYwX3FoICpxaCkKLXsKLQlzdHJ1Y3QgdXJiICp1cmI7Ci0KLQl1cmIgPSBxdGQtPnVyYjsKLQlkbyB7Ci0JCXF0ZCA9IGNsZWFuX3RoaXNfcXRkKHF0ZCwgcWgpOwotCX0gd2hpbGUgKHF0ZCAmJiAocXRkLT51cmIgPT0gdXJiKSk7Ci0KLQlyZXR1cm4gcXRkOwotfQotCi1zdGF0aWMgdm9pZCBkb19hdGxfaW50KHN0cnVjdCB1c2JfaGNkICpoY2QpCi17Ci0Jc3RydWN0IGlzcDE3NjBfaGNkICpwcml2ID0gaGNkX3RvX3ByaXYoaGNkKTsKLQl1MzIgZG9uZV9tYXAsIHNraXBfbWFwOwotCXN0cnVjdCBwdGQgcHRkOwotCXN0cnVjdCB1cmIgKnVyYjsKLQl1MzIgc2xvdDsKLQl1MzIgbGVuZ3RoOwotCXUzMiBvcl9tYXA7Ci0JdTMyIHN0YXR1cyA9IC1FSU5WQUw7Ci0JaW50IGVycm9yOwotCXN0cnVjdCBpc3AxNzYwX3F0ZCAqcXRkOwotCXN0cnVjdCBpc3AxNzYwX3FoICpxaDsKLQl1MzIgcmw7Ci0JdTMyIG5ha2NvdW50OwotCi0JZG9uZV9tYXAgPSByZWdfcmVhZDMyKGhjZC0+cmVncywgSENfQVRMX1BURF9ET05FTUFQX1JFRyk7Ci0Jc2tpcF9tYXAgPSByZWdfcmVhZDMyKGhjZC0+cmVncywgSENfQVRMX1BURF9TS0lQTUFQX1JFRyk7Ci0KLQlvcl9tYXAgPSByZWdfcmVhZDMyKGhjZC0+cmVncywgSENfQVRMX0lSUV9NQVNLX09SX1JFRyk7Ci0Jb3JfbWFwICY9IH5kb25lX21hcDsKLQlyZWdfd3JpdGUzMihoY2QtPnJlZ3MsIEhDX0FUTF9JUlFfTUFTS19PUl9SRUcsIG9yX21hcCk7Ci0KLQl3aGlsZSAoZG9uZV9tYXApIHsKLQkJc3RhdHVzID0gMDsKLQkJcHJpdi0+YXRsX3F1ZXVlZC0tOwotCi0JCXNsb3QgPSBfX2Zmcyhkb25lX21hcCk7Ci0JCWRvbmVfbWFwICY9IH4oMSA8PCBzbG90KTsKLQkJc2tpcF9tYXAgfD0gKDEgPDwgc2xvdCk7Ci0KLQkJcXRkID0gcHJpdi0+YXRsX2ludHNbc2xvdF0ucXRkOwotCQlxaCA9IHByaXYtPmF0bF9pbnRzW3Nsb3RdLnFoOwotCi0JCWlmICghcWgpIHsKLQkJCWRldl9lcnIoaGNkLT5zZWxmLmNvbnRyb2xsZXIsICJxaCBpcyAwXG4iKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCXB0ZF9yZWFkKGhjZC0+cmVncywgQVRMX1BURF9PRkZTRVQsIHNsb3QsICZwdGQpOwotCi0JCXJsID0gKHB0ZC5kdzIgPj4gMjUpICYgMHgwZjsKLQkJbmFrY291bnQgPSAocHRkLmR3MyA+PiAxOSkgJiAweGY7Ci0KLQkJLyogVHJhbnNmZXIgRXJyb3IsICpidXQqIGFjdGl2ZSBhbmQgbm8gSEFMVCAtPiByZWxvYWQgKi8KLQkJaWYgKChwdGQuZHczICYgRFczX0VSUk9SX0JJVCkgJiYgKHB0ZC5kdzMgJiBEVzNfUVREX0FDVElWRSkgJiYKLQkJCQkhKHB0ZC5kdzMgJiBEVzNfSEFMVF9CSVQpKSB7Ci0KLQkJCS8qIGFjY29yZGluZyB0byBwcHJpdiBjb2RlLCB3ZSBoYXZlIHRvCi0JCQkgKiByZWxvYWQgdGhpcyBvbmUgaWYgdHJhc2ZlcmVkIGJ5dGVzICE9IHJlcXVlc3RlZCBieXRlcwotCQkJICogZWxzZSBhY3QgbGlrZSBldmVyeXRoaW5nIHdlbnQgc21vb3RoLi4KLQkJCSAqIFhYWCBUaGlzIGp1c3QgZG9lc24ndCBmZWVsIHJpZ2h0IGFuZCBoYXNuJ3QKLQkJCSAqIHRyaWdnZXJlZCBzbyBmYXIuCi0JCQkgKi8KLQotCQkJbGVuZ3RoID0gUFREX1hGRVJSRURfTEVOR1RIKHB0ZC5kdzMpOwotCQkJZGV2X2VycihoY2QtPnNlbGYuY29udHJvbGxlciwKLQkJCQkJIlNob3VsZCByZWxvYWQgbm93Li4uIHRyYW5zZmVycmVkICVkICIKLQkJCQkJIm9mICV6dVxuIiwgbGVuZ3RoLCBxdGQtPmxlbmd0aCk7Ci0JCQlCVUcoKTsKLQkJfQotCi0JCWlmICghbmFrY291bnQgJiYgKHB0ZC5kdzMgJiBEVzNfUVREX0FDVElWRSkpIHsKLQkJCXUzMiBidWZmc3RhdHVzOwotCi0JCQkvKgotCQkJICogTkFLcyBhcmUgaGFuZGxlZCBpbiBIVyBieSB0aGUgY2hpcC4gVXN1YWxseSBpZiB0aGUKLQkJCSAqIGRldmljZSBpcyBub3QgYWJsZSB0byBzZW5kIGRhdGEgZmFzdCBlbm91Z2guCi0JCQkgKiBUaGlzIGhhcHBlbnMgbW9zdGx5IG9uIHNsb3dlciBoYXJkd2FyZS4KLQkJCSAqLwotCi0JCQkvKiBSTCBjb3VudGVyID0gRVJSIGNvdW50ZXIgKi8KLQkJCXB0ZC5kdzMgJj0gfigweGYgPDwgMTkpOwotCQkJcHRkLmR3MyB8PSBybCA8PCAxOTsKLQkJCXB0ZC5kdzMgJj0gfigzIDw8ICg1NSAtIDMyKSk7Ci0JCQlwdGQuZHczIHw9IEVSUl9DT1VOVEVSIDw8ICg1NSAtIDMyKTsKLQotCQkJLyoKLQkJCSAqIEl0IGlzIG5vdCBuZWVkZWQgdG8gd3JpdGUgc2tpcCBtYXAgYmFjayBiZWNhdXNlIGl0Ci0JCQkgKiBpcyB1bmNoYW5nZWQuIEp1c3QgbWFrZSBzdXJlIHRoYXQgdGhpcyBlbnRyeSBpcwotCQkJICogdW5za2lwcGVkIG9uY2UgaXQgZ2V0cyB3cml0dGVuIHRvIHRoZSBIVy4KLQkJCSAqLwotCQkJc2tpcF9tYXAgJj0gfigxIDw8IHNsb3QpOwotCQkJb3JfbWFwID0gcmVnX3JlYWQzMihoY2QtPnJlZ3MsIEhDX0FUTF9JUlFfTUFTS19PUl9SRUcpOwotCQkJb3JfbWFwIHw9IDEgPDwgc2xvdDsKLQkJCXJlZ193cml0ZTMyKGhjZC0+cmVncywgSENfQVRMX0lSUV9NQVNLX09SX1JFRywgb3JfbWFwKTsKLQotCQkJcHRkLmR3MCB8PSBQVERfVkFMSUQ7Ci0JCQlwdGRfd3JpdGUoaGNkLT5yZWdzLCBBVExfUFREX09GRlNFVCwgc2xvdCwgJnB0ZCk7Ci0KLQkJCXByaXYtPmF0bF9xdWV1ZWQrKzsKLQkJCWlmIChwcml2LT5hdGxfcXVldWVkID09IDIpCi0JCQkJcmVnX3dyaXRlMzIoaGNkLT5yZWdzLCBIQ19JTlRFUlJVUFRfRU5BQkxFLAotCQkJCQkJSU5URVJSVVBUX0VOQUJMRV9TT1RfTUFTSyk7Ci0KLQkJCWJ1ZmZzdGF0dXMgPSByZWdfcmVhZDMyKGhjZC0+cmVncywKLQkJCQkJCQlIQ19CVUZGRVJfU1RBVFVTX1JFRyk7Ci0JCQlidWZmc3RhdHVzIHw9IEFUTF9CVUZGRVI7Ci0JCQlyZWdfd3JpdGUzMihoY2QtPnJlZ3MsIEhDX0JVRkZFUl9TVEFUVVNfUkVHLAotCQkJCQkJCQlidWZmc3RhdHVzKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJZXJyb3IgPSBjaGVja19lcnJvcihoY2QsICZwdGQpOwotCQlpZiAoZXJyb3IpIHsKLQkJCXN0YXR1cyA9IGVycm9yOwotCQkJcHJpdi0+YXRsX2ludHNbc2xvdF0ucWgtPnRvZ2dsZSA9IDA7Ci0JCQlwcml2LT5hdGxfaW50c1tzbG90XS5xaC0+cGluZyA9IDA7Ci0JCQlxdGQtPnVyYi0+c3RhdHVzID0gLUVQSVBFOwotCi0jaWYgMAotCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBpbiAlcygpLlxuIiwgX19mdW5jX18pOwotCQkJcHJpbnRrKEtFUk5fRVJSICJJTiBkdzA6ICUwOHggZHcxOiAlMDh4IGR3MjogJTA4eCAiCi0JCQkJCSJkdzM6ICUwOHggZHc0OiAlMDh4IGR3NTogJTA4eCBkdzY6ICIKLQkJCQkJIiUwOHggZHc3OiAlMDh4XG4iLAotCQkJCQlwdGQuZHcwLCBwdGQuZHcxLCBwdGQuZHcyLCBwdGQuZHczLAotCQkJCQlwdGQuZHc0LCBwdGQuZHc1LCBwdGQuZHc2LCBwdGQuZHc3KTsKLSNlbmRpZgotCQl9IGVsc2UgewotCQkJcHJpdi0+YXRsX2ludHNbc2xvdF0ucWgtPnRvZ2dsZSA9IHB0ZC5kdzMgJiAoMSA8PCAyNSk7Ci0JCQlwcml2LT5hdGxfaW50c1tzbG90XS5xaC0+cGluZyA9IHB0ZC5kdzMgJiAoMSA8PCAyNik7Ci0JCX0KLQotCQlsZW5ndGggPSBQVERfWEZFUlJFRF9MRU5HVEgocHRkLmR3Myk7Ci0JCWlmIChsZW5ndGgpIHsKLQkJCXN3aXRjaCAoRFcxX0dFVF9QSUQocHRkLmR3MSkpIHsKLQkJCWNhc2UgSU5fUElEOgotCQkJCW1lbV9yZWFkczgoaGNkLT5yZWdzLCBxdGQtPnBheWxvYWRfYWRkciwKLQkJCQkJCXF0ZC0+ZGF0YV9idWZmZXIsIGxlbmd0aCk7Ci0KLQkJCWNhc2UgT1VUX1BJRDoKLQotCQkJCXF0ZC0+dXJiLT5hY3R1YWxfbGVuZ3RoICs9IGxlbmd0aDsKLQotCQkJY2FzZSBTRVRVUF9QSUQ6Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlwcml2LT5hdGxfaW50c1tzbG90XS5xdGQgPSBOVUxMOwotCQlwcml2LT5hdGxfaW50c1tzbG90XS5xaCA9IE5VTEw7Ci0KLQkJZnJlZV9tZW0oaGNkLCBxdGQpOwotCi0JCXJlZ193cml0ZTMyKGhjZC0+cmVncywgSENfQVRMX1BURF9TS0lQTUFQX1JFRywgc2tpcF9tYXApOwotCi0JCWlmIChxdGQtPnVyYi0+c3RhdHVzID09IC1FUElQRSkgewotCQkJLyogSEFMVCB3YXMgcmVjZWl2ZWQgKi8KLQotCQkJdXJiID0gcXRkLT51cmI7Ci0JCQlxdGQgPSBjbGVhbl91cF9xdGRsaXN0KHF0ZCwgcWgpOwotCQkJaXNwMTc2MF91cmJfZG9uZShoY2QsIHVyYik7Ci0KLQkJfSBlbHNlIGlmICh1c2JfcGlwZWJ1bGsocXRkLT51cmItPnBpcGUpICYmCi0JCQkJCQkobGVuZ3RoIDwgcXRkLT5sZW5ndGgpKSB7Ci0JCQkvKiBzaG9ydCBCVUxLIHJlY2VpdmVkICovCi0KLQkJCWlmIChxdGQtPnVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfU0hPUlRfTk9UX09LKSB7Ci0JCQkJcXRkLT51cmItPnN0YXR1cyA9IC1FUkVNT1RFSU87Ci0JCQkJZGV2X2RiZyhoY2QtPnNlbGYuY29udHJvbGxlciwKLQkJCQkJCSJzaG9ydCBidWxrLCAlZCBpbnN0ZWFkICV6dSAiCi0JCQkJCQkid2l0aCBVUkJfU0hPUlRfTk9UX09LIGZsYWcuXG4iLAotCQkJCQkJbGVuZ3RoLCBxdGQtPmxlbmd0aCk7Ci0JCQl9Ci0KLQkJCWlmIChxdGQtPnVyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykKLQkJCQlxdGQtPnVyYi0+c3RhdHVzID0gMDsKLQotCQkJdXJiID0gcXRkLT51cmI7Ci0JCQlxdGQgPSBjbGVhbl91cF9xdGRsaXN0KHF0ZCwgcWgpOwotCQkJaXNwMTc2MF91cmJfZG9uZShoY2QsIHVyYik7Ci0KLQkJfSBlbHNlIGlmIChsYXN0X3F0ZF9vZl91cmIocXRkLCBxaCkpIHsKLQkJCS8qIHRoYXQgd2FzIHRoZSBsYXN0IHF0ZCBvZiB0aGF0IFVSQiAqLwotCi0JCQlpZiAocXRkLT51cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpCi0JCQkJcXRkLT51cmItPnN0YXR1cyA9IDA7Ci0KLQkJCXVyYiA9IHF0ZC0+dXJiOwotCQkJcXRkID0gY2xlYW5fdXBfcXRkbGlzdChxdGQsIHFoKTsKLQkJCWlzcDE3NjBfdXJiX2RvbmUoaGNkLCB1cmIpOwotCi0JCX0gZWxzZSB7Ci0JCQkvKiBuZXh0IFFURCBvZiB0aGlzIFVSQiAqLwotCi0JCQlxdGQgPSBjbGVhbl90aGlzX3F0ZChxdGQsIHFoKTsKLQkJCUJVR19PTighcXRkKTsKLQkJfQotCi0JCWlmIChxdGQpCi0JCQllbnF1ZXVlX2FuX0FUTF9wYWNrZXQoaGNkLCBxaCwgcXRkKTsKLQotCQlza2lwX21hcCA9IHJlZ19yZWFkMzIoaGNkLT5yZWdzLCBIQ19BVExfUFREX1NLSVBNQVBfUkVHKTsKLQl9Ci0JaWYgKHByaXYtPmF0bF9xdWV1ZWQgPD0gMSkKLQkJcmVnX3dyaXRlMzIoaGNkLT5yZWdzLCBIQ19JTlRFUlJVUFRfRU5BQkxFLAotCQkJCQkJCUlOVEVSUlVQVF9FTkFCTEVfTUFTSyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRvX2ludGxfaW50KHN0cnVjdCB1c2JfaGNkICpoY2QpCi17Ci0Jc3RydWN0IGlzcDE3NjBfaGNkICpwcml2ID0gaGNkX3RvX3ByaXYoaGNkKTsKLQl1MzIgZG9uZV9tYXAsIHNraXBfbWFwOwotCXN0cnVjdCBwdGQgcHRkOwotCXN0cnVjdCB1cmIgKnVyYjsKLQl1MzIgbGVuZ3RoOwotCXUzMiBvcl9tYXA7Ci0JaW50IGVycm9yOwotCXUzMiBzbG90OwotCXN0cnVjdCBpc3AxNzYwX3F0ZCAqcXRkOwotCXN0cnVjdCBpc3AxNzYwX3FoICpxaDsKLQotCWRvbmVfbWFwID0gcmVnX3JlYWQzMihoY2QtPnJlZ3MsIEhDX0lOVF9QVERfRE9ORU1BUF9SRUcpOwotCXNraXBfbWFwID0gcmVnX3JlYWQzMihoY2QtPnJlZ3MsIEhDX0lOVF9QVERfU0tJUE1BUF9SRUcpOwotCi0Jb3JfbWFwID0gcmVnX3JlYWQzMihoY2QtPnJlZ3MsIEhDX0lOVF9JUlFfTUFTS19PUl9SRUcpOwotCW9yX21hcCAmPSB+ZG9uZV9tYXA7Ci0JcmVnX3dyaXRlMzIoaGNkLT5yZWdzLCBIQ19JTlRfSVJRX01BU0tfT1JfUkVHLCBvcl9tYXApOwotCi0Jd2hpbGUgKGRvbmVfbWFwKSB7Ci0JCXNsb3QgPSBfX2Zmcyhkb25lX21hcCk7Ci0JCWRvbmVfbWFwICY9IH4oMSA8PCBzbG90KTsKLQkJc2tpcF9tYXAgfD0gKDEgPDwgc2xvdCk7Ci0KLQkJcXRkID0gcHJpdi0+aW50X2ludHNbc2xvdF0ucXRkOwotCQlxaCA9IHByaXYtPmludF9pbnRzW3Nsb3RdLnFoOwotCi0JCWlmICghcWgpIHsKLQkJCWRldl9lcnIoaGNkLT5zZWxmLmNvbnRyb2xsZXIsICIoSU5UKSBxaCBpcyAwXG4iKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJcHRkX3JlYWQoaGNkLT5yZWdzLCBJTlRfUFREX09GRlNFVCwgc2xvdCwgJnB0ZCk7Ci0JCWNoZWNrX2ludF9lcnJfc3RhdHVzKGhjZCwgcHRkLmR3NCk7Ci0KLQkJZXJyb3IgPSBjaGVja19lcnJvcihoY2QsICZwdGQpOwotCQlpZiAoZXJyb3IpIHsKLSNpZiAwCi0JCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGluICVzKCkuXG4iLCBfX2Z1bmNfXyk7Ci0JCQlwcmludGsoS0VSTl9FUlIgIklOIGR3MDogJTA4eCBkdzE6ICUwOHggZHcyOiAlMDh4ICIKLQkJCQkJImR3MzogJTA4eCBkdzQ6ICUwOHggZHc1OiAlMDh4IGR3NjogIgotCQkJCQkiJTA4eCBkdzc6ICUwOHhcbiIsCi0JCQkJCXB0ZC5kdzAsIHB0ZC5kdzEsIHB0ZC5kdzIsIHB0ZC5kdzMsCi0JCQkJCXB0ZC5kdzQsIHB0ZC5kdzUsIHB0ZC5kdzYsIHB0ZC5kdzcpOwotI2VuZGlmCi0JCQlxdGQtPnVyYi0+c3RhdHVzID0gLUVQSVBFOwotCQkJcHJpdi0+aW50X2ludHNbc2xvdF0ucWgtPnRvZ2dsZSA9IDA7Ci0JCQlwcml2LT5pbnRfaW50c1tzbG90XS5xaC0+cGluZyA9IDA7Ci0KLQkJfSBlbHNlIHsKLQkJCXByaXYtPmludF9pbnRzW3Nsb3RdLnFoLT50b2dnbGUgPSBwdGQuZHczICYgKDEgPDwgMjUpOwotCQkJcHJpdi0+aW50X2ludHNbc2xvdF0ucWgtPnBpbmcgPSBwdGQuZHczICYgKDEgPDwgMjYpOwotCQl9Ci0KLQkJaWYgKHF0ZC0+dXJiLT5kZXYtPnNwZWVkICE9IFVTQl9TUEVFRF9ISUdIKQotCQkJbGVuZ3RoID0gUFREX1hGRVJSRURfTEVOR1RIX0xPKHB0ZC5kdzMpOwotCQllbHNlCi0JCQlsZW5ndGggPSBQVERfWEZFUlJFRF9MRU5HVEgocHRkLmR3Myk7Ci0KLQkJaWYgKGxlbmd0aCkgewotCQkJc3dpdGNoIChEVzFfR0VUX1BJRChwdGQuZHcxKSkgewotCQkJY2FzZSBJTl9QSUQ6Ci0JCQkJbWVtX3JlYWRzOChoY2QtPnJlZ3MsIHF0ZC0+cGF5bG9hZF9hZGRyLAotCQkJCQkJcXRkLT5kYXRhX2J1ZmZlciwgbGVuZ3RoKTsKLQkJCWNhc2UgT1VUX1BJRDoKLQotCQkJCXF0ZC0+dXJiLT5hY3R1YWxfbGVuZ3RoICs9IGxlbmd0aDsKLQotCQkJY2FzZSBTRVRVUF9QSUQ6Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlwcml2LT5pbnRfaW50c1tzbG90XS5xdGQgPSBOVUxMOwotCQlwcml2LT5pbnRfaW50c1tzbG90XS5xaCA9IE5VTEw7Ci0KLQkJcmVnX3dyaXRlMzIoaGNkLT5yZWdzLCBIQ19JTlRfUFREX1NLSVBNQVBfUkVHLCBza2lwX21hcCk7Ci0JCWZyZWVfbWVtKGhjZCwgcXRkKTsKLQotCQlpZiAocXRkLT51cmItPnN0YXR1cyA9PSAtRVBJUEUpIHsKLQkJCS8qIEhBTFQgcmVjZWl2ZWQgKi8KLQotCQkJdXJiID0gcXRkLT51cmI7Ci0JCQlxdGQgPSBjbGVhbl91cF9xdGRsaXN0KHF0ZCwgcWgpOwotCQkJaXNwMTc2MF91cmJfZG9uZShoY2QsIHVyYik7Ci0KLQkJfSBlbHNlIGlmIChsYXN0X3F0ZF9vZl91cmIocXRkLCBxaCkpIHsKLQotCQkJaWYgKHF0ZC0+dXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKQotCQkJCXF0ZC0+dXJiLT5zdGF0dXMgPSAwOwotCi0JCQl1cmIgPSBxdGQtPnVyYjsKLQkJCXF0ZCA9IGNsZWFuX3VwX3F0ZGxpc3QocXRkLCBxaCk7Ci0JCQlpc3AxNzYwX3VyYl9kb25lKGhjZCwgdXJiKTsKLQotCQl9IGVsc2UgewotCQkJLyogbmV4dCBRVEQgb2YgdGhpcyBVUkIgKi8KLQotCQkJcXRkID0gY2xlYW5fdGhpc19xdGQocXRkLCBxaCk7Ci0JCQlCVUdfT04oIXF0ZCk7Ci0JCX0KLQotCQlpZiAocXRkKQotCQkJZW5xdWV1ZV9hbl9JTlRfcGFja2V0KGhjZCwgcWgsIHF0ZCk7Ci0KLQkJc2tpcF9tYXAgPSByZWdfcmVhZDMyKGhjZC0+cmVncywgSENfSU5UX1BURF9TS0lQTUFQX1JFRyk7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IGlzcDE3NjBfcWggKnFoX21ha2Uoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLAotCQlnZnBfdCBmbGFncykKLXsKLQlzdHJ1Y3QgaXNwMTc2MF9xaCAqcWg7Ci0JaW50IGlzX2lucHV0LCB0eXBlOwotCi0JcWggPSBpc3AxNzYwX3FoX2FsbG9jKGZsYWdzKTsKLQlpZiAoIXFoKQotCQlyZXR1cm4gcWg7Ci0KLQkvKgotCSAqIGluaXQgZW5kcG9pbnQvZGV2aWNlIGRhdGEgZm9yIHRoaXMgUUgKLQkgKi8KLQlpc19pbnB1dCA9IHVzYl9waXBlaW4odXJiLT5waXBlKTsKLQl0eXBlID0gdXNiX3BpcGV0eXBlKHVyYi0+cGlwZSk7Ci0KLQlpZiAoIXVzYl9waXBlY29udHJvbCh1cmItPnBpcGUpKQotCQl1c2Jfc2V0dG9nZ2xlKHVyYi0+ZGV2LCB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksICFpc19pbnB1dCwKLQkJCQkxKTsKLQlyZXR1cm4gcWg7Ci19Ci0KLS8qCi0gKiBGb3IgY29udHJvbC9idWxrL2ludGVycnVwdCwgcmV0dXJuIFFIIHdpdGggdGhlc2UgVERzIGFwcGVuZGVkLgotICogQWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyB0aGUgUUggaWYgbmVjZXNzYXJ5LgotICogUmV0dXJucyBudWxsIGlmIGl0IGNhbid0IGFsbG9jYXRlIGEgUUggaXQgbmVlZHMgdG8uCi0gKiBJZiB0aGUgUUggaGFzIFREcyAodXJicykgYWxyZWFkeSwgdGhhdCdzIGdyZWF0LgotICovCi1zdGF0aWMgc3RydWN0IGlzcDE3NjBfcWggKnFoX2FwcGVuZF90ZHMoc3RydWN0IHVzYl9oY2QgKmhjZCwKLQkJc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgbGlzdF9oZWFkICpxdGRfbGlzdCwgaW50IGVwbnVtLAotCQl2b2lkICoqcHRyKQotewotCXN0cnVjdCBpc3AxNzYwX3FoICpxaDsKLQotCXFoID0gKHN0cnVjdCBpc3AxNzYwX3FoICopKnB0cjsKLQlpZiAoIXFoKSB7Ci0JCS8qIGNhbid0IHNsZWVwIGhlcmUsIHdlIGhhdmUgcHJpdi0+bG9jay4uLiAqLwotCQlxaCA9IHFoX21ha2UoaGNkLCB1cmIsIEdGUF9BVE9NSUMpOwotCQlpZiAoIXFoKQotCQkJcmV0dXJuIHFoOwotCQkqcHRyID0gcWg7Ci0JfQotCi0JbGlzdF9zcGxpY2UocXRkX2xpc3QsIHFoLT5xdGRfbGlzdC5wcmV2KTsKLQotCXJldHVybiBxaDsKLX0KLQotc3RhdGljIHZvaWQgcXRkX2xpc3RfZnJlZShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBsaXN0X2hlYWQgKnF0ZF9saXN0KQotewotCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5LCAqdGVtcDsKLQotCWxpc3RfZm9yX2VhY2hfc2FmZShlbnRyeSwgdGVtcCwgcXRkX2xpc3QpIHsKLQkJc3RydWN0IGlzcDE3NjBfcXRkCSpxdGQ7Ci0KLQkJcXRkID0gbGlzdF9lbnRyeShlbnRyeSwgc3RydWN0IGlzcDE3NjBfcXRkLCBxdGRfbGlzdCk7Ci0JCWxpc3RfZGVsKCZxdGQtPnF0ZF9saXN0KTsKLQkJaXNwMTc2MF9xdGRfZnJlZShxdGQpOwotCX0KLX0KLQotc3RhdGljIGludCBpc3AxNzYwX3ByZXBhcmVfZW5xdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsCi0JCXN0cnVjdCBsaXN0X2hlYWQgKnF0ZF9saXN0LCBnZnBfdCBtZW1fZmxhZ3MsIHBhY2tldF9lbnF1ZXVlICpwKQotewotCXN0cnVjdCBpc3AxNzYwX2hjZCAqcHJpdiA9IGhjZF90b19wcml2KGhjZCk7Ci0Jc3RydWN0IGlzcDE3NjBfcXRkICAgICAgICAgKnF0ZDsKLQlpbnQgICAgICAgICAgICAgICAgICAgICBlcG51bTsKLQl1bnNpZ25lZCBsb25nICAgICAgICAgICBmbGFnczsKLQlzdHJ1Y3QgaXNwMTc2MF9xaCAgICAgICAgICAqcWggPSBOVUxMOwotCWludCAgICAgICAgICAgICAgICAgICAgIHJjOwotCWludCBxaF9idXN5OwotCi0JcXRkID0gbGlzdF9lbnRyeShxdGRfbGlzdC0+bmV4dCwgc3RydWN0IGlzcDE3NjBfcXRkLCBxdGRfbGlzdCk7Ci0JZXBudW0gPSB1cmItPmVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCWlmICghSENEX0hXX0FDQ0VTU0lCTEUoaGNkKSkgewotCQlyYyA9IC1FU0hVVERPV047Ci0JCWdvdG8gZG9uZTsKLQl9Ci0JcmMgPSB1c2JfaGNkX2xpbmtfdXJiX3RvX2VwKGhjZCwgdXJiKTsKLQlpZiAocmMpCi0JCWdvdG8gZG9uZTsKLQotCXFoID0gdXJiLT5lcC0+aGNwcml2OwotCWlmIChxaCkKLQkJcWhfYnVzeSA9ICFsaXN0X2VtcHR5KCZxaC0+cXRkX2xpc3QpOwotCWVsc2UKLQkJcWhfYnVzeSA9IDA7Ci0KLQlxaCA9IHFoX2FwcGVuZF90ZHMoaGNkLCB1cmIsIHF0ZF9saXN0LCBlcG51bSwgJnVyYi0+ZXAtPmhjcHJpdik7Ci0JaWYgKCFxaCkgewotCQl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcChoY2QsIHVyYik7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBkb25lOwotCX0KLQotCWlmICghcWhfYnVzeSkKLQkJcChoY2QsIHFoLCBxdGQpOwotCi1kb25lOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlpZiAoIXFoKQotCQlxdGRfbGlzdF9mcmVlKHVyYiwgcXRkX2xpc3QpOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHN0cnVjdCBpc3AxNzYwX3F0ZCAqaXNwMTc2MF9xdGRfYWxsb2MoZ2ZwX3QgZmxhZ3MpCitzdGF0aWMgc3RydWN0IGlzcDE3NjBfcXRkICpxdGRfYWxsb2MoZ2ZwX3QgZmxhZ3MsIHN0cnVjdCB1cmIgKnVyYiwKKwkJCQkJCQkJdTggcGFja2V0X3R5cGUpCiB7CiAJc3RydWN0IGlzcDE3NjBfcXRkICpxdGQ7CiAKIAlxdGQgPSBrbWVtX2NhY2hlX3phbGxvYyhxdGRfY2FjaGVwLCBmbGFncyk7Ci0JaWYgKHF0ZCkKLQkJSU5JVF9MSVNUX0hFQUQoJnF0ZC0+cXRkX2xpc3QpOworCWlmICghcXRkKQorCQlyZXR1cm4gTlVMTDsKKworCUlOSVRfTElTVF9IRUFEKCZxdGQtPnF0ZF9saXN0KTsKKwlxdGQtPnVyYiA9IHVyYjsKKwlxdGQtPnBhY2tldF90eXBlID0gcGFja2V0X3R5cGU7CisJcXRkLT5zdGF0dXMgPSBRVERfRU5RVUVVRUQ7CisJcXRkLT5hY3R1YWxfbGVuZ3RoID0gMDsKIAogCXJldHVybiBxdGQ7CiB9CiAKK3N0YXRpYyB2b2lkIHF0ZF9mcmVlKHN0cnVjdCBpc3AxNzYwX3F0ZCAqcXRkKQoreworCVdBUk5fT04ocXRkLT5wYXlsb2FkX2FkZHIpOworCWttZW1fY2FjaGVfZnJlZShxdGRfY2FjaGVwLCBxdGQpOworfQorCitzdGF0aWMgdm9pZCBzdGFydF9idXNfdHJhbnNmZXIoc3RydWN0IHVzYl9oY2QgKmhjZCwgdTMyIHB0ZF9vZmZzZXQsIGludCBzbG90LAorCQkJCXN0cnVjdCBzbG90aW5mbyAqc2xvdHMsIHN0cnVjdCBpc3AxNzYwX3F0ZCAqcXRkLAorCQkJCXN0cnVjdCBpc3AxNzYwX3FoICpxaCwgc3RydWN0IHB0ZCAqcHRkKQoreworCXN0cnVjdCBpc3AxNzYwX2hjZCAqcHJpdiA9IGhjZF90b19wcml2KGhjZCk7CisJaW50IHNraXBfbWFwOworCisJV0FSTl9PTigoc2xvdCA8IDApIHx8IChzbG90ID4gMzEpKTsKKwlXQVJOX09OKHF0ZC0+bGVuZ3RoICYmICFxdGQtPnBheWxvYWRfYWRkcik7CisJV0FSTl9PTihzbG90c1tzbG90XS5xdGQpOworCVdBUk5fT04oc2xvdHNbc2xvdF0ucWgpOworCVdBUk5fT04ocXRkLT5zdGF0dXMgIT0gUVREX1BBWUxPQURfQUxMT0MpOworCisJc2xvdHNbc2xvdF0ucXRkID0gcXRkOworCXNsb3RzW3Nsb3RdLnFoID0gcWg7CisJcWgtPnNsb3QgPSBzbG90OworCXF0ZC0+c3RhdHVzID0gUVREX1hGRVJfU1RBUlRFRDsgLyogU2V0IHRoaXMgYmVmb3JlIHdyaXRpbmcgcHRkLCBzaW5jZQorCQlpbnRlcnJ1cHQgcm91dGluZSBtYXkgcHJlZW1wdCBhbmQgZXhwZWN0cyB0aGlzIHZhbHVlLiAqLworCXB0ZF93cml0ZShoY2QtPnJlZ3MsIHB0ZF9vZmZzZXQsIHNsb3QsIHB0ZCk7CisJcHJpdi0+YWN0aXZlX3B0ZHMrKzsKKworCS8qIE1ha2Ugc3VyZSBkb25lIG1hcCBoYXMgbm90IHRyaWdnZXJlZCBmcm9tIHNvbWUgdW5saW5rZWQgdHJhbnNmZXIgKi8KKwlpZiAocHRkX29mZnNldCA9PSBBVExfUFREX09GRlNFVCkgeworCQlwcml2LT5hdGxfZG9uZV9tYXAgfD0gcmVnX3JlYWQzMihoY2QtPnJlZ3MsCisJCQkJCQlIQ19BVExfUFREX0RPTkVNQVBfUkVHKTsKKwkJcHJpdi0+YXRsX2RvbmVfbWFwICY9IH4oMSA8PCBxaC0+c2xvdCk7CisKKwkJc2tpcF9tYXAgPSByZWdfcmVhZDMyKGhjZC0+cmVncywgSENfQVRMX1BURF9TS0lQTUFQX1JFRyk7CisJCXNraXBfbWFwICY9IH4oMSA8PCBxaC0+c2xvdCk7CisJCXJlZ193cml0ZTMyKGhjZC0+cmVncywgSENfQVRMX1BURF9TS0lQTUFQX1JFRywgc2tpcF9tYXApOworCX0gZWxzZSB7CisJCXByaXYtPmludF9kb25lX21hcCB8PSByZWdfcmVhZDMyKGhjZC0+cmVncywKKwkJCQkJCUhDX0lOVF9QVERfRE9ORU1BUF9SRUcpOworCQlwcml2LT5pbnRfZG9uZV9tYXAgJj0gfigxIDw8IHFoLT5zbG90KTsKKworCQlza2lwX21hcCA9IHJlZ19yZWFkMzIoaGNkLT5yZWdzLCBIQ19JTlRfUFREX1NLSVBNQVBfUkVHKTsKKwkJc2tpcF9tYXAgJj0gfigxIDw8IHFoLT5zbG90KTsKKwkJcmVnX3dyaXRlMzIoaGNkLT5yZWdzLCBIQ19JTlRfUFREX1NLSVBNQVBfUkVHLCBza2lwX21hcCk7CisJfQorfQorCitzdGF0aWMgaW50IGlzX3Nob3J0X2J1bGsoc3RydWN0IGlzcDE3NjBfcXRkICpxdGQpCit7CisJcmV0dXJuICh1c2JfcGlwZWJ1bGsocXRkLT51cmItPnBpcGUpICYmCisJCQkJCShxdGQtPmFjdHVhbF9sZW5ndGggPCBxdGQtPmxlbmd0aCkpOworfQorCitzdGF0aWMgdm9pZCBjb2xsZWN0X3F0ZHMoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IGlzcDE3NjBfcWggKnFoLAorCQkJCQkJc3RydWN0IGxpc3RfaGVhZCAqdXJiX2xpc3QpCit7CisJaW50IGxhc3RfcXRkOworCXN0cnVjdCBpc3AxNzYwX3F0ZCAqcXRkLCAqcXRkX25leHQ7CisJc3RydWN0IHVyYl9saXN0aXRlbSAqdXJiX2xpc3RpdGVtOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHF0ZCwgcXRkX25leHQsICZxaC0+cXRkX2xpc3QsIHF0ZF9saXN0KSB7CisJCWlmIChxdGQtPnN0YXR1cyA8IFFURF9YRkVSX0NPTVBMRVRFKQorCQkJYnJlYWs7CisKKwkJaWYgKGxpc3RfaXNfbGFzdCgmcXRkLT5xdGRfbGlzdCwgJnFoLT5xdGRfbGlzdCkpCisJCQlsYXN0X3F0ZCA9IDE7CisJCWVsc2UKKwkJCWxhc3RfcXRkID0gcXRkLT51cmIgIT0gcXRkX25leHQtPnVyYjsKKworCQlpZiAoKCFsYXN0X3F0ZCkgJiYgKHF0ZC0+c3RhdHVzID09IFFURF9SRVRJUkUpKQorCQkJcXRkX25leHQtPnN0YXR1cyA9IFFURF9SRVRJUkU7CisKKwkJaWYgKHF0ZC0+c3RhdHVzID09IFFURF9YRkVSX0NPTVBMRVRFKSB7CisJCQlpZiAocXRkLT5hY3R1YWxfbGVuZ3RoKSB7CisJCQkJc3dpdGNoIChxdGQtPnBhY2tldF90eXBlKSB7CisJCQkJY2FzZSBJTl9QSUQ6CisJCQkJCW1lbV9yZWFkczgoaGNkLT5yZWdzLCBxdGQtPnBheWxvYWRfYWRkciwKKwkJCQkJCQlxdGQtPmRhdGFfYnVmZmVyLAorCQkJCQkJCXF0ZC0+YWN0dWFsX2xlbmd0aCk7CisJCQkJCS8qIEZhbGwgdGhyb3VnaCAoPykgKi8KKwkJCQljYXNlIE9VVF9QSUQ6CisJCQkJCXF0ZC0+dXJiLT5hY3R1YWxfbGVuZ3RoICs9CisJCQkJCQkJcXRkLT5hY3R1YWxfbGVuZ3RoOworCQkJCQkvKiBGYWxsIHRocm91Z2ggLi4uICovCisJCQkJY2FzZSBTRVRVUF9QSUQ6CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGlzX3Nob3J0X2J1bGsocXRkKSkgeworCQkJCWlmIChxdGQtPnVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfU0hPUlRfTk9UX09LKQorCQkJCQlxdGQtPnVyYi0+c3RhdHVzID0gLUVSRU1PVEVJTzsKKwkJCQlpZiAoIWxhc3RfcXRkKQorCQkJCQlxdGRfbmV4dC0+c3RhdHVzID0gUVREX1JFVElSRTsKKwkJCX0KKwkJfQorCisJCWlmIChxdGQtPnBheWxvYWRfYWRkcikKKwkJCWZyZWVfbWVtKGhjZCwgcXRkKTsKKworCQlpZiAobGFzdF9xdGQpIHsKKwkJCWlmICgocXRkLT5zdGF0dXMgPT0gUVREX1JFVElSRSkgJiYKKwkJCQkJKHF0ZC0+dXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSkKKwkJCQlxdGQtPnVyYi0+c3RhdHVzID0gLUVQSVBFOworCQkJLyogRGVmZXIgY2FsbGluZyBvZiB1cmJfZG9uZSgpIHNpbmNlIGl0IHJlbGVhc2VzIGxvY2sgKi8KKwkJCXVyYl9saXN0aXRlbSA9IGttZW1fY2FjaGVfemFsbG9jKHVyYl9saXN0aXRlbV9jYWNoZXAsCisJCQkJCQkJCUdGUF9BVE9NSUMpOworCQkJaWYgKHVubGlrZWx5KCF1cmJfbGlzdGl0ZW0pKQorCQkJCWJyZWFrOworCQkJdXJiX2xpc3RpdGVtLT51cmIgPSBxdGQtPnVyYjsKKwkJCWxpc3RfYWRkX3RhaWwoJnVyYl9saXN0aXRlbS0+dXJiX2xpc3QsIHVyYl9saXN0KTsKKwkJfQorCisJCWxpc3RfZGVsKCZxdGQtPnF0ZF9saXN0KTsKKwkJcXRkX2ZyZWUocXRkKTsKKwl9Cit9CisKKyNkZWZpbmUgRU5RVUVVRV9ERVBUSAkyCitzdGF0aWMgdm9pZCBlbnF1ZXVlX3F0ZHMoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IGlzcDE3NjBfcWggKnFoKQoreworCXN0cnVjdCBpc3AxNzYwX2hjZCAqcHJpdiA9IGhjZF90b19wcml2KGhjZCk7CisJaW50IHB0ZF9vZmZzZXQ7CisJc3RydWN0IHNsb3RpbmZvICpzbG90czsKKwlpbnQgY3Vycl9zbG90LCBmcmVlX3Nsb3Q7CisJaW50IG47CisJc3RydWN0IHB0ZCBwdGQ7CisJc3RydWN0IGlzcDE3NjBfcXRkICpxdGQ7CisKKwlpZiAodW5saWtlbHkobGlzdF9lbXB0eSgmcWgtPnF0ZF9saXN0KSkpIHsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh1c2JfcGlwZWludChsaXN0X2VudHJ5KHFoLT5xdGRfbGlzdC5uZXh0LCBzdHJ1Y3QgaXNwMTc2MF9xdGQsCisJCQkJCQkJcXRkX2xpc3QpLT51cmItPnBpcGUpKSB7CisJCXB0ZF9vZmZzZXQgPSBJTlRfUFREX09GRlNFVDsKKwkJc2xvdHMgPSBwcml2LT5pbnRfc2xvdHM7CisJfSBlbHNlIHsKKwkJcHRkX29mZnNldCA9IEFUTF9QVERfT0ZGU0VUOworCQlzbG90cyA9IHByaXYtPmF0bF9zbG90czsKKwl9CisKKwlmcmVlX3Nsb3QgPSAtMTsKKwlmb3IgKGN1cnJfc2xvdCA9IDA7IGN1cnJfc2xvdCA8IDMyOyBjdXJyX3Nsb3QrKykgeworCQlpZiAoKGZyZWVfc2xvdCA9PSAtMSkgJiYgKHNsb3RzW2N1cnJfc2xvdF0ucXRkID09IE5VTEwpKQorCQkJZnJlZV9zbG90ID0gY3Vycl9zbG90OworCQlpZiAoc2xvdHNbY3Vycl9zbG90XS5xaCA9PSBxaCkKKwkJCWJyZWFrOworCX0KKworCW4gPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkocXRkLCAmcWgtPnF0ZF9saXN0LCBxdGRfbGlzdCkgeworCQlpZiAocXRkLT5zdGF0dXMgPT0gUVREX0VOUVVFVUVEKSB7CisJCQlXQVJOX09OKHF0ZC0+cGF5bG9hZF9hZGRyKTsKKwkJCWFsbG9jX21lbShoY2QsIHF0ZCk7CisJCQlpZiAoKHF0ZC0+bGVuZ3RoKSAmJiAoIXF0ZC0+cGF5bG9hZF9hZGRyKSkKKwkJCQlicmVhazsKKworCQkJaWYgKChxdGQtPmxlbmd0aCkgJiYKKwkJCSAgICAoKHF0ZC0+cGFja2V0X3R5cGUgPT0gU0VUVVBfUElEKSB8fAorCQkJICAgICAocXRkLT5wYWNrZXRfdHlwZSA9PSBPVVRfUElEKSkpIHsKKwkJCQltZW1fd3JpdGVzOChoY2QtPnJlZ3MsIHF0ZC0+cGF5bG9hZF9hZGRyLAorCQkJCQkJcXRkLT5kYXRhX2J1ZmZlciwgcXRkLT5sZW5ndGgpOworCQkJfQorCisJCQlxdGQtPnN0YXR1cyA9IFFURF9QQVlMT0FEX0FMTE9DOworCQl9CisKKwkJaWYgKHF0ZC0+c3RhdHVzID09IFFURF9QQVlMT0FEX0FMTE9DKSB7CiAvKgotICogY3JlYXRlIGEgbGlzdCBvZiBmaWxsZWQgcXRkcyBmb3IgdGhpcyBVUkI7IHdvbid0IGxpbmsgaW50byBxaC4KKwkJCWlmICgoY3Vycl9zbG90ID4gMzEpICYmIChmcmVlX3Nsb3QgPT0gLTEpKQorCQkJCWRldl9kYmcoaGNkLT5zZWxmLmNvbnRyb2xsZXIsICIlczogTm8gc2xvdCAiCisJCQkJCSJhdmFpbGFibGUgZm9yIHRyYW5zZmVyXG4iLCBfX2Z1bmNfXyk7CisqLworCQkJLyogU3RhcnQgeGZlciBmb3IgdGhpcyBlbmRwb2ludCBpZiBub3QgYWxyZWFkeSBkb25lICovCisJCQlpZiAoKGN1cnJfc2xvdCA+IDMxKSAmJiAoZnJlZV9zbG90ID4gLTEpKSB7CisJCQkJaWYgKHVzYl9waXBlaW50KHF0ZC0+dXJiLT5waXBlKSkKKwkJCQkJY3JlYXRlX3B0ZF9pbnQocWgsIHF0ZCwgJnB0ZCk7CisJCQkJZWxzZQorCQkJCQljcmVhdGVfcHRkX2F0bChxaCwgcXRkLCAmcHRkKTsKKworCQkJCXN0YXJ0X2J1c190cmFuc2ZlcihoY2QsIHB0ZF9vZmZzZXQsIGZyZWVfc2xvdCwKKwkJCQkJCQlzbG90cywgcXRkLCBxaCwgJnB0ZCk7CisJCQkJY3Vycl9zbG90ID0gZnJlZV9zbG90OworCQkJfQorCisJCQluKys7CisJCQlpZiAobiA+PSBFTlFVRVVFX0RFUFRIKQorCQkJCWJyZWFrOworCQl9CisJfQorfQorCit2b2lkIHNjaGVkdWxlX3B0ZHMoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgaXNwMTc2MF9oY2QgKnByaXY7CisJc3RydWN0IGlzcDE3NjBfcWggKnFoLCAqcWhfbmV4dDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICplcF9xdWV1ZTsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwOworCUxJU1RfSEVBRCh1cmJfbGlzdCk7CisJc3RydWN0IHVyYl9saXN0aXRlbSAqdXJiX2xpc3RpdGVtLCAqdXJiX2xpc3RpdGVtX25leHQ7CisKKwlpZiAoIWhjZCkgeworCQlXQVJOX09OKDEpOworCQlyZXR1cm47CisJfQorCisJcHJpdiA9IGhjZF90b19wcml2KGhjZCk7CisKKwkvKgorCSAqIGNoZWNrIGZpbmlzaGVkL3JldGlyZWQgeGZlcnMsIHRyYW5zZmVyIHBheWxvYWRzLCBjYWxsIHVyYl9kb25lKCkKKwkgKi8KKwllcF9xdWV1ZSA9ICZwcml2LT5pbnRlcnJ1cHRxaHM7CisJd2hpbGUgKGVwX3F1ZXVlKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShxaCwgcWhfbmV4dCwgZXBfcXVldWUsIHFoX2xpc3QpIHsKKwkJCWVwID0gbGlzdF9lbnRyeShxaC0+cXRkX2xpc3QubmV4dCwgc3RydWN0IGlzcDE3NjBfcXRkLAorCQkJCQkJCXF0ZF9saXN0KS0+dXJiLT5lcDsKKwkJCWNvbGxlY3RfcXRkcyhoY2QsIHFoLCAmdXJiX2xpc3QpOworCQkJaWYgKGxpc3RfZW1wdHkoJnFoLT5xdGRfbGlzdCkpIHsKKwkJCQlsaXN0X2RlbCgmcWgtPnFoX2xpc3QpOworCQkJCWlmIChlcC0+aGNwcml2ID09IE5VTEwpIHsKKwkJCQkJLyogRW5kcG9pbnQgaGFzIGJlZW4gZGlzYWJsZWQsIHNvIHdlCisJCQkJCWNhbiBmcmVlIHRoZSBhc3NvY2lhdGVkIHF1ZXVlIGhlYWQuICovCisJCQkJCXFoX2ZyZWUocWgpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWlmIChlcF9xdWV1ZSA9PSAmcHJpdi0+aW50ZXJydXB0cWhzKQorCQkJZXBfcXVldWUgPSAmcHJpdi0+Y29udHJvbHFoczsKKwkJZWxzZSBpZiAoZXBfcXVldWUgPT0gJnByaXYtPmNvbnRyb2xxaHMpCisJCQllcF9xdWV1ZSA9ICZwcml2LT5idWxrcWhzOworCQllbHNlCisJCQllcF9xdWV1ZSA9IE5VTEw7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVyYl9saXN0aXRlbSwgdXJiX2xpc3RpdGVtX25leHQsICZ1cmJfbGlzdCwKKwkJCQkJCQkJdXJiX2xpc3QpIHsKKwkJaXNwMTc2MF91cmJfZG9uZShoY2QsIHVyYl9saXN0aXRlbS0+dXJiKTsKKwkJa21lbV9jYWNoZV9mcmVlKHVyYl9saXN0aXRlbV9jYWNoZXAsIHVyYl9saXN0aXRlbSk7CisJfQorCisJLyoKKwkgKiBTY2hlZHVsZSBwYWNrZXRzIGZvciB0cmFuc2Zlci4KKwkgKgorCSAqIEFjY29yZGluZyB0byBVU0IyLjAgc3BlY2lmaWNhdGlvbjoKKwkgKgorCSAqIDFzdCBwcmlvOiBpbnRlcnJ1cHQgeGZlcnMsIHVwIHRvIDgwICUgb2YgYmFuZHdpZHRoCisJICogMm5kIHByaW86IGNvbnRyb2wgeGZlcnMKKwkgKiAzcmQgcHJpbzogYnVsayB4ZmVycworCSAqCisJICogLi4uIGJ1dCBsZXQncyB1c2UgYSBzaW1wbGVyIHNjaGVtZSBoZXJlIChtb3N0bHkgYmVjYXVzZSBJU1AxNzYxIGRvYworCSAqIGlzIHZlcnkgdW5jbGVhciBvbiBob3cgdG8gcHJpb3JpdGl6ZSB0cmFmZmljKToKKwkgKgorCSAqIDEpIEVucXVldWUgYW55IHF1ZXVlZCBjb250cm9sIHRyYW5zZmVycywgYXMgbG9uZyBhcyBwYXlsb2FkIGNoaXAgbWVtCisJICogICAgYW5kIFBURCBBVEwgc2xvdHMgYXJlIGF2YWlsYWJsZS4KKwkgKiAyKSBFbnF1ZXVlIGFueSBxdWV1ZWQgSU5UIHRyYW5zZmVycywgYXMgbG9uZyBhcyBwYXlsb2FkIGNoaXAgbWVtCisJICogICAgYW5kIFBURCBJTlQgc2xvdHMgYXJlIGF2YWlsYWJsZS4KKwkgKiAzKSBFbnF1ZXVlIGFueSBxdWV1ZWQgYnVsayB0cmFuc2ZlcnMsIGFzIGxvbmcgYXMgcGF5bG9hZCBjaGlwIG1lbQorCSAqICAgIGFuZCBQVEQgQVRMIHNsb3RzIGFyZSBhdmFpbGFibGUuCisJICoKKwkgKiBVc2UgZG91YmxlIGJ1ZmZlcmluZyAoRU5RVUVVRV9ERVBUSD09MikgYXMgYSBjb21wcm9taXNlIGJldHdlZW4KKwkgKiBjb25zZXJ2YXRpb24gb2YgY2hpcCBtZW0gYW5kIHBlcmZvcm1hbmNlLgorCSAqCisJICogSSdtIHN1cmUgdGhpcyBzY2hlbWUgY291bGQgYmUgaW1wcm92ZWQgdXBvbiEKKwkgKi8KKwllcF9xdWV1ZSA9ICZwcml2LT5jb250cm9scWhzOworCXdoaWxlIChlcF9xdWV1ZSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocWgsIHFoX25leHQsIGVwX3F1ZXVlLCBxaF9saXN0KQorCQkJZW5xdWV1ZV9xdGRzKGhjZCwgcWgpOworCisJCWlmIChlcF9xdWV1ZSA9PSAmcHJpdi0+Y29udHJvbHFocykKKwkJCWVwX3F1ZXVlID0gJnByaXYtPmludGVycnVwdHFoczsKKwkJZWxzZSBpZiAoZXBfcXVldWUgPT0gJnByaXYtPmludGVycnVwdHFocykKKwkJCWVwX3F1ZXVlID0gJnByaXYtPmJ1bGtxaHM7CisJCWVsc2UKKwkJCWVwX3F1ZXVlID0gTlVMTDsKKwl9Cit9CisKKyNkZWZpbmUgUFREX1NUQVRFX1FURF9ET05FCTEKKyNkZWZpbmUgUFREX1NUQVRFX1FURF9SRUxPQUQJMgorI2RlZmluZSBQVERfU1RBVEVfVVJCX1JFVElSRQkzCisKK3N0YXRpYyBpbnQgY2hlY2tfaW50X3RyYW5zZmVyKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCBwdGQgKnB0ZCwKKwkJCQkJCQkJc3RydWN0IHVyYiAqdXJiKQoreworCV9fZHcgZHc0OworCWludCBpOworCisJZHc0ID0gcHRkLT5kdzQ7CisJZHc0ID4+PSA4OworCisJLyogRklYTUU6IElTUDE3NjEgZGF0YXNoZWV0IGRvZXMgbm90IHNheSB3aGF0IHRvIGRvIHdpdGggdGhlc2UuIERvIHdlCisJICAgbmVlZCB0byBoYW5kbGUgdGhlc2UgZXJyb3JzPyBJcyBpdCBkb25lIGluIGhhcmR3YXJlPyAqLworCisJaWYgKHB0ZC0+ZHczICYgRFczX0hBTFRfQklUKSB7CisKKwkJdXJiLT5zdGF0dXMgPSAtRVBST1RPOyAvKiBEZWZhdWx0IHVua25vd24gZXJyb3IgKi8KKworCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCQlzd2l0Y2ggKGR3NCAmIDB4NykgeworCQkJY2FzZSBJTlRfVU5ERVJSVU46CisJCQkJZGV2X2RiZyhoY2QtPnNlbGYuY29udHJvbGxlciwgIiVzOiB1bmRlcnJ1biAiCisJCQkJCQkiZHVyaW5nIHVGcmFtZSAlZFxuIiwKKwkJCQkJCV9fZnVuY19fLCBpKTsKKwkJCQl1cmItPnN0YXR1cyA9IC1FQ09NTTsgLyogQ291bGQgbm90IHdyaXRlIGRhdGEgKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgSU5UX0VYQUNUOgorCQkJCWRldl9kYmcoaGNkLT5zZWxmLmNvbnRyb2xsZXIsICIlczogdHJhbnNhY3Rpb24gIgorCQkJCQkJImVycm9yIGR1cmluZyB1RnJhbWUgJWRcbiIsCisJCQkJCQlfX2Z1bmNfXywgaSk7CisJCQkJdXJiLT5zdGF0dXMgPSAtRVBST1RPOyAvKiB0aW1lb3V0LCBiYWQgQ1JDLCBQSUQKKwkJCQkJCQkgIGVycm9yIGV0Yy4gKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgSU5UX0JBQkJMRToKKwkJCQlkZXZfZGJnKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiJXM6IGJhYmJsZSAiCisJCQkJCQkiZXJyb3IgZHVyaW5nIHVGcmFtZSAlZFxuIiwKKwkJCQkJCV9fZnVuY19fLCBpKTsKKwkJCQl1cmItPnN0YXR1cyA9IC1FT1ZFUkZMT1c7CisJCQkJYnJlYWs7CisJCQl9CisJCQlkdzQgPj49IDM7CisJCX0KKworCQlyZXR1cm4gUFREX1NUQVRFX1VSQl9SRVRJUkU7CisJfQorCisJcmV0dXJuIFBURF9TVEFURV9RVERfRE9ORTsKK30KKworc3RhdGljIGludCBjaGVja19hdGxfdHJhbnNmZXIoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHB0ZCAqcHRkLAorCQkJCQkJCQlzdHJ1Y3QgdXJiICp1cmIpCit7CisJV0FSTl9PTighcHRkKTsKKwlpZiAocHRkLT5kdzMgJiBEVzNfSEFMVF9CSVQpIHsKKwkJaWYgKHB0ZC0+ZHczICYgRFczX0JBQkJMRV9CSVQpCisJCQl1cmItPnN0YXR1cyA9IC1FT1ZFUkZMT1c7CisJCWVsc2UgaWYgKEZST01fRFczX0NFUlIocHRkLT5kdzMpKQorCQkJdXJiLT5zdGF0dXMgPSAtRVBJUEU7ICAvKiBTdGFsbCAqLworCQllbHNlIGlmIChwdGQtPmR3MyAmIERXM19FUlJPUl9CSVQpCisJCQl1cmItPnN0YXR1cyA9IC1FUFJPVE87IC8qIFhhY3RFcnIgKi8KKwkJZWxzZQorCQkJdXJiLT5zdGF0dXMgPSAtRVBST1RPOyAvKiBVbmtub3duICovCisvKgorCQlkZXZfZGJnKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiJXM6IHB0ZCBlcnJvcjpcbiIKKwkJCSIgICAgICAgIGR3MDogJTA4eCBkdzE6ICUwOHggZHcyOiAlMDh4IGR3MzogJTA4eFxuIgorCQkJIiAgICAgICAgZHc0OiAlMDh4IGR3NTogJTA4eCBkdzY6ICUwOHggZHc3OiAlMDh4XG4iLAorCQkJX19mdW5jX18sCisJCQlwdGQtPmR3MCwgcHRkLT5kdzEsIHB0ZC0+ZHcyLCBwdGQtPmR3MywKKwkJCXB0ZC0+ZHc0LCBwdGQtPmR3NSwgcHRkLT5kdzYsIHB0ZC0+ZHc3KTsKKyovCisJCXJldHVybiBQVERfU1RBVEVfVVJCX1JFVElSRTsKKwl9CisKKwlpZiAoKHB0ZC0+ZHczICYgRFczX0VSUk9SX0JJVCkgJiYgKHB0ZC0+ZHczICYgRFczX0FDVElWRV9CSVQpKSB7CisJCS8qIFRyYW5zZmVyIEVycm9yLCAqYnV0KiBhY3RpdmUgYW5kIG5vIEhBTFQgLT4gcmVsb2FkICovCisJCWRldl9kYmcoaGNkLT5zZWxmLmNvbnRyb2xsZXIsICJQSUQgZXJyb3I7IHJlbG9hZGluZyBwdGRcbiIpOworCQlyZXR1cm4gUFREX1NUQVRFX1FURF9SRUxPQUQ7CisJfQorCisJaWYgKCFGUk9NX0RXM19OQUtDT1VOVChwdGQtPmR3MykgJiYgKHB0ZC0+ZHczICYgRFczX0FDVElWRV9CSVQpKSB7CisJCS8qCisJCSAqIE5BS3MgYXJlIGhhbmRsZWQgaW4gSFcgYnkgdGhlIGNoaXAuIFVzdWFsbHkgaWYgdGhlCisJCSAqIGRldmljZSBpcyBub3QgYWJsZSB0byBzZW5kIGRhdGEgZmFzdCBlbm91Z2guCisJCSAqIFRoaXMgaGFwcGVucyBtb3N0bHkgb24gc2xvd2VyIGhhcmR3YXJlLgorCQkgKi8KKwkJcmV0dXJuIFBURF9TVEFURV9RVERfUkVMT0FEOworCX0KKworCXJldHVybiBQVERfU1RBVEVfUVREX0RPTkU7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpc3AxNzYwX2lycShzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBpc3AxNzYwX2hjZCAqcHJpdiA9IGhjZF90b19wcml2KGhjZCk7CisJdTMyIGltYXNrOworCWlycXJldHVybl90IGlycXJldCA9IElSUV9OT05FOworCXN0cnVjdCBwdGQgcHRkOworCXN0cnVjdCBpc3AxNzYwX3FoICpxaDsKKwlpbnQgc2xvdDsKKwlpbnQgc3RhdGU7CisJc3RydWN0IHNsb3RpbmZvICpzbG90czsKKwl1MzIgcHRkX29mZnNldDsKKwlzdHJ1Y3QgaXNwMTc2MF9xdGQgKnF0ZDsKKwlpbnQgbW9kaWZpZWQ7CisJc3RhdGljIGludCBsYXN0X2FjdGl2ZV9wdGRzOworCWludCBpbnRfc2tpcF9tYXAsIGF0bF9za2lwX21hcDsKKworCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CisKKwlpZiAoIShoY2QtPnN0YXRlICYgSENfU1RBVEVfUlVOTklORykpCisJCWdvdG8gbGVhdmU7CisKKwlpbWFzayA9IHJlZ19yZWFkMzIoaGNkLT5yZWdzLCBIQ19JTlRFUlJVUFRfUkVHKTsKKwlpZiAodW5saWtlbHkoIWltYXNrKSkKKwkJZ290byBsZWF2ZTsKKwlyZWdfd3JpdGUzMihoY2QtPnJlZ3MsIEhDX0lOVEVSUlVQVF9SRUcsIGltYXNrKTsgLyogQ2xlYXIgKi8KKworCWludF9za2lwX21hcCA9IHJlZ19yZWFkMzIoaGNkLT5yZWdzLCBIQ19JTlRfUFREX1NLSVBNQVBfUkVHKTsKKwlhdGxfc2tpcF9tYXAgPSByZWdfcmVhZDMyKGhjZC0+cmVncywgSENfQVRMX1BURF9TS0lQTUFQX1JFRyk7CisJcHJpdi0+aW50X2RvbmVfbWFwIHw9IHJlZ19yZWFkMzIoaGNkLT5yZWdzLCBIQ19JTlRfUFREX0RPTkVNQVBfUkVHKTsKKwlwcml2LT5hdGxfZG9uZV9tYXAgfD0gcmVnX3JlYWQzMihoY2QtPnJlZ3MsIEhDX0FUTF9QVERfRE9ORU1BUF9SRUcpOworCXByaXYtPmludF9kb25lX21hcCAmPSB+aW50X3NraXBfbWFwOworCXByaXYtPmF0bF9kb25lX21hcCAmPSB+YXRsX3NraXBfbWFwOworCisJbW9kaWZpZWQgPSBwcml2LT5pbnRfZG9uZV9tYXAgfCBwcml2LT5hdGxfZG9uZV9tYXA7CisKKwl3aGlsZSAocHJpdi0+aW50X2RvbmVfbWFwIHx8IHByaXYtPmF0bF9kb25lX21hcCkgeworCQlpZiAocHJpdi0+aW50X2RvbmVfbWFwKSB7CisJCQkvKiBJTlQgcHRkICovCisJCQlzbG90ID0gX19mZnMocHJpdi0+aW50X2RvbmVfbWFwKTsKKwkJCXByaXYtPmludF9kb25lX21hcCAmPSB+KDEgPDwgc2xvdCk7CisJCQlzbG90cyA9IHByaXYtPmludF9zbG90czsKKwkJCS8qIFRoaXMgc2hvdWxkIG5vdCB0cmlnZ2VyLCBhbmQgY291bGQgYmUgcmVtb3ZlZCBpZgorCQkJICAgbm9vbmUgaGF2ZSBhbnkgcHJvYmxlbXMgd2l0aCBpdCB0cmlnZ2VyaW5nOiAqLworCQkJaWYgKCFzbG90c1tzbG90XS5xaCkgeworCQkJCVdBUk5fT04oMSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlwdGRfb2Zmc2V0ID0gSU5UX1BURF9PRkZTRVQ7CisJCQlwdGRfcmVhZChoY2QtPnJlZ3MsIElOVF9QVERfT0ZGU0VULCBzbG90LCAmcHRkKTsKKwkJCXN0YXRlID0gY2hlY2tfaW50X3RyYW5zZmVyKGhjZCwgJnB0ZCwKKwkJCQkJCQlzbG90c1tzbG90XS5xdGQtPnVyYik7CisJCX0gZWxzZSB7CisJCQkvKiBBVEwgcHRkICovCisJCQlzbG90ID0gX19mZnMocHJpdi0+YXRsX2RvbmVfbWFwKTsKKwkJCXByaXYtPmF0bF9kb25lX21hcCAmPSB+KDEgPDwgc2xvdCk7CisJCQlzbG90cyA9IHByaXYtPmF0bF9zbG90czsKKwkJCS8qIFRoaXMgc2hvdWxkIG5vdCB0cmlnZ2VyLCBhbmQgY291bGQgYmUgcmVtb3ZlZCBpZgorCQkJICAgbm9vbmUgaGF2ZSBhbnkgcHJvYmxlbXMgd2l0aCBpdCB0cmlnZ2VyaW5nOiAqLworCQkJaWYgKCFzbG90c1tzbG90XS5xaCkgeworCQkJCVdBUk5fT04oMSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlwdGRfb2Zmc2V0ID0gQVRMX1BURF9PRkZTRVQ7CisJCQlwdGRfcmVhZChoY2QtPnJlZ3MsIEFUTF9QVERfT0ZGU0VULCBzbG90LCAmcHRkKTsKKwkJCXN0YXRlID0gY2hlY2tfYXRsX3RyYW5zZmVyKGhjZCwgJnB0ZCwKKwkJCQkJCQlzbG90c1tzbG90XS5xdGQtPnVyYik7CisJCX0KKworCQlxdGQgPSBzbG90c1tzbG90XS5xdGQ7CisJCXNsb3RzW3Nsb3RdLnF0ZCA9IE5VTEw7CisJCXFoID0gc2xvdHNbc2xvdF0ucWg7CisJCXNsb3RzW3Nsb3RdLnFoID0gTlVMTDsKKwkJcHJpdi0+YWN0aXZlX3B0ZHMtLTsKKwkJcWgtPnNsb3QgPSAtMTsKKworCQlXQVJOX09OKHF0ZC0+c3RhdHVzICE9IFFURF9YRkVSX1NUQVJURUQpOworCisJCXN3aXRjaCAoc3RhdGUpIHsKKwkJY2FzZSBQVERfU1RBVEVfUVREX0RPTkU6CisJCQlpZiAoKHVzYl9waXBlaW50KHF0ZC0+dXJiLT5waXBlKSkgJiYKKwkJCQkgICAgICAgKHF0ZC0+dXJiLT5kZXYtPnNwZWVkICE9IFVTQl9TUEVFRF9ISUdIKSkKKwkJCQlxdGQtPmFjdHVhbF9sZW5ndGggPQorCQkJCSAgICAgICBGUk9NX0RXM19TQ1NfTlJCWVRFU1RSQU5TRkVSUkVEKHB0ZC5kdzMpOworCQkJZWxzZQorCQkJCXF0ZC0+YWN0dWFsX2xlbmd0aCA9CisJCQkJCUZST01fRFczX05SQllURVNUUkFOU0ZFUlJFRChwdGQuZHczKTsKKworCQkJcXRkLT5zdGF0dXMgPSBRVERfWEZFUl9DT01QTEVURTsKKwkJCWlmIChsaXN0X2lzX2xhc3QoJnF0ZC0+cXRkX2xpc3QsICZxaC0+cXRkX2xpc3QpIHx8CisJCQkJCQkJaXNfc2hvcnRfYnVsayhxdGQpKQorCQkJCXF0ZCA9IE5VTEw7CisJCQllbHNlCisJCQkJcXRkID0gbGlzdF9lbnRyeShxdGQtPnF0ZF9saXN0Lm5leHQsCisJCQkJCQkJdHlwZW9mKCpxdGQpLCBxdGRfbGlzdCk7CisKKwkJCXFoLT50b2dnbGUgPSBGUk9NX0RXM19EQVRBX1RPR0dMRShwdGQuZHczKTsKKwkJCXFoLT5waW5nID0gRlJPTV9EVzNfUElORyhwdGQuZHczKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUFREX1NUQVRFX1FURF9SRUxPQUQ6IC8qIFFURF9SRVRSWSwgZm9yIGF0bHMgb25seSAqLworCQkJcXRkLT5zdGF0dXMgPSBRVERfUEFZTE9BRF9BTExPQzsKKwkJCXB0ZC5kdzAgfD0gRFcwX1ZBTElEX0JJVDsKKwkJCS8qIFJMIGNvdW50ZXIgPSBFUlIgY291bnRlciAqLworCQkJcHRkLmR3MyAmPSB+VE9fRFczX05BS0NPVU5UKDB4Zik7CisJCQlwdGQuZHczIHw9IFRPX0RXM19OQUtDT1VOVChGUk9NX0RXMl9STChwdGQuZHcyKSk7CisJCQlwdGQuZHczICY9IH5UT19EVzNfQ0VSUigzKTsKKwkJCXB0ZC5kdzMgfD0gVE9fRFczX0NFUlIoRVJSX0NPVU5URVIpOworCQkJcWgtPnRvZ2dsZSA9IEZST01fRFczX0RBVEFfVE9HR0xFKHB0ZC5kdzMpOworCQkJcWgtPnBpbmcgPSBGUk9NX0RXM19QSU5HKHB0ZC5kdzMpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQVERfU1RBVEVfVVJCX1JFVElSRToKKwkJCXF0ZC0+c3RhdHVzID0gUVREX1JFVElSRTsKKwkJCXF0ZCA9IE5VTEw7CisJCQlxaC0+dG9nZ2xlID0gMDsKKwkJCXFoLT5waW5nID0gMDsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlXQVJOX09OKDEpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAocXRkICYmIChxdGQtPnN0YXR1cyA9PSBRVERfUEFZTE9BRF9BTExPQykpIHsKKwkJCWlmIChzbG90cyA9PSBwcml2LT5pbnRfc2xvdHMpIHsKKwkJCQlpZiAoc3RhdGUgPT0gUFREX1NUQVRFX1FURF9SRUxPQUQpCisJCQkJCWRldl9lcnIoaGNkLT5zZWxmLmNvbnRyb2xsZXIsCisJCQkJCQkiJXM6IFBURF9TVEFURV9RVERfUkVMT0FEIG9uICIKKwkJCQkJCSJpbnRlcnJ1cHQgcGFja2V0XG4iLCBfX2Z1bmNfXyk7CisJCQkJaWYgKHN0YXRlICE9IFBURF9TVEFURV9RVERfUkVMT0FEKQorCQkJCQljcmVhdGVfcHRkX2ludChxaCwgcXRkLCAmcHRkKTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKHN0YXRlICE9IFBURF9TVEFURV9RVERfUkVMT0FEKQorCQkJCQljcmVhdGVfcHRkX2F0bChxaCwgcXRkLCAmcHRkKTsKKwkJCX0KKworCQkJc3RhcnRfYnVzX3RyYW5zZmVyKGhjZCwgcHRkX29mZnNldCwgc2xvdCwgc2xvdHMsIHF0ZCwKKwkJCQlxaCwgJnB0ZCk7CisJCX0KKwl9CisKKwlpZiAobW9kaWZpZWQpCisJCXNjaGVkdWxlX3B0ZHMoaGNkKTsKKworCS8qIElTUDE3NjAgRXJyYXRhIDIgZXhwbGFpbnMgdGhhdCBpbnRlcnJ1cHRzIG1heSBiZSBtaXNzZWQgKG9yIG5vdAorCSAgIGhhcHBlbj8pIGlmIHR3byBVU0IgZGV2aWNlcyBhcmUgcnVubmluZyBzaW11bHRhbmVvdXNseS4gUGVyaGFwcworCSAgIHRoaXMgaGFwcGVucyB3aGVuIGEgUFREIGlzIGZpbmlzaGVkIGR1cmluZyBpbnRlcnJ1cHQgaGFuZGxpbmc7CisJICAgZW5hYmxlIFNPRiBpbnRlcnJ1cHRzIGlmIFBURHMgYXJlIHN0aWxsIHNjaGVkdWxlZCB3aGVuIGV4aXRpbmcgdGhpcworCSAgIGludGVycnVwdCBoYW5kbGVyLCBqdXN0IHRvIGJlIHNhZmUuICovCisKKwlpZiAocHJpdi0+YWN0aXZlX3B0ZHMgIT0gbGFzdF9hY3RpdmVfcHRkcykgeworCQlpZiAocHJpdi0+YWN0aXZlX3B0ZHMgPiAwKQorCQkJcmVnX3dyaXRlMzIoaGNkLT5yZWdzLCBIQ19JTlRFUlJVUFRfRU5BQkxFLAorCQkJCQkJSU5URVJSVVBUX0VOQUJMRV9TT1RfTUFTSyk7CisJCWVsc2UKKwkJCXJlZ193cml0ZTMyKGhjZC0+cmVncywgSENfSU5URVJSVVBUX0VOQUJMRSwKKwkJCQkJCUlOVEVSUlVQVF9FTkFCTEVfTUFTSyk7CisJCWxhc3RfYWN0aXZlX3B0ZHMgPSBwcml2LT5hY3RpdmVfcHRkczsKKwl9CisKKwlpcnFyZXQgPSBJUlFfSEFORExFRDsKK2xlYXZlOgorCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKKworCXJldHVybiBpcnFyZXQ7Cit9CisKK3N0YXRpYyBpbnQgcXRkX2ZpbGwoc3RydWN0IGlzcDE3NjBfcXRkICpxdGQsIHZvaWQgKmRhdGFidWZmZXIsIHNpemVfdCBsZW4pCit7CisJcXRkLT5kYXRhX2J1ZmZlciA9IGRhdGFidWZmZXI7CisKKwlpZiAobGVuID4gTUFYX1BBWUxPQURfU0laRSkKKwkJbGVuID0gTUFYX1BBWUxPQURfU0laRTsKKwlxdGQtPmxlbmd0aCA9IGxlbjsKKworCXJldHVybiBxdGQtPmxlbmd0aDsKK30KKworc3RhdGljIHZvaWQgcXRkX2xpc3RfZnJlZShzdHJ1Y3QgbGlzdF9oZWFkICpxdGRfbGlzdCkKK3sKKwlzdHJ1Y3QgaXNwMTc2MF9xdGQgKnF0ZCwgKnF0ZF9uZXh0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHF0ZCwgcXRkX25leHQsIHF0ZF9saXN0LCBxdGRfbGlzdCkgeworCQlsaXN0X2RlbCgmcXRkLT5xdGRfbGlzdCk7CisJCXF0ZF9mcmVlKHF0ZCk7CisJfQorfQorCisvKgorICogUGFja2V0aXplIHVyYi0+dHJhbnNmZXJfYnVmZmVyIGludG8gbGlzdCBvZiBwYWNrZXRzIG9mIHNpemUgd01heFBhY2tldFNpemUuCisgKiBBbHNvIGNhbGN1bGF0ZSB0aGUgUElEIHR5cGUgKFNFVFVQL0lOL09VVCkgZm9yIGVhY2ggcGFja2V0LgogICovCiAjZGVmaW5lIG1heF9wYWNrZXQod01heFBhY2tldFNpemUpICgod01heFBhY2tldFNpemUpICYgMHgwN2ZmKQotc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgKnFoX3VyYl90cmFuc2FjdGlvbihzdHJ1Y3QgdXNiX2hjZCAqaGNkLAorc3RhdGljIHZvaWQgcGFja2V0aXplX3VyYihzdHJ1Y3QgdXNiX2hjZCAqaGNkLAogCQlzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGdmcF90IGZsYWdzKQogewogCXN0cnVjdCBpc3AxNzYwX3F0ZCAqcXRkOwogCXZvaWQgKmJ1ZjsKLQlpbnQgbGVuLCBtYXhwYWNrZXQ7Ci0JaW50IGlzX2lucHV0OwotCXUzMiB0b2tlbjsKKwlpbnQgbGVuLCBtYXhwYWNrZXRzaXplOworCXU4IHBhY2tldF90eXBlOwogCiAJLyoKIAkgKiBVUkJzIG1hcCB0byBzZXF1ZW5jZXMgb2YgUVREczogIG9uZSBsb2dpY2FsIHRyYW5zYWN0aW9uCiAJICovCi0JcXRkID0gaXNwMTc2MF9xdGRfYWxsb2MoZmxhZ3MpOwotCWlmICghcXRkKQotCQlyZXR1cm4gTlVMTDsKIAotCWxpc3RfYWRkX3RhaWwoJnF0ZC0+cXRkX2xpc3QsIGhlYWQpOwotCXF0ZC0+dXJiID0gdXJiOwotCXVyYi0+c3RhdHVzID0gLUVJTlBST0dSRVNTOworCWlmICghdXJiLT50cmFuc2Zlcl9idWZmZXIgJiYgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKSB7CisJCS8qIFhYWCBUaGlzIGxvb2tzIGxpa2UgdXNiIHN0b3JhZ2UgLyBTQ1NJIGJ1ZyAqLworCQlkZXZfZXJyKGhjZC0+c2VsZi5jb250cm9sbGVyLAorCQkJCSJidWYgaXMgbnVsbCwgZG1hIGlzICUwOGx4IGxlbiBpcyAlZFxuIiwKKwkJCQkobG9uZyB1bnNpZ25lZCl1cmItPnRyYW5zZmVyX2RtYSwKKwkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworCQlXQVJOX09OKDEpOworCX0KIAotCXRva2VuID0gMDsKLQkvKiBmb3Igc3BsaXQgdHJhbnNhY3Rpb25zLCBTcGxpdFhTdGF0ZSBpbml0aWFsaXplZCB0byB6ZXJvICovCisJaWYgKHVzYl9waXBlaW4odXJiLT5waXBlKSkKKwkJcGFja2V0X3R5cGUgPSBJTl9QSUQ7CisJZWxzZQorCQlwYWNrZXRfdHlwZSA9IE9VVF9QSUQ7CiAKLQlsZW4gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7Ci0JaXNfaW5wdXQgPSB1c2JfcGlwZWluKHVyYi0+cGlwZSk7CiAJaWYgKHVzYl9waXBlY29udHJvbCh1cmItPnBpcGUpKSB7Ci0JCS8qIFNFVFVQIHBpZCAqLwotCQlxdGRfZmlsbChxdGQsIHVyYi0+c2V0dXBfcGFja2V0LAotCQkJCXNpemVvZihzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0KSwKLQkJCQl0b2tlbiB8IFNFVFVQX1BJRCk7Ci0KLQkJLyogLi4uIGFuZCBhbHdheXMgYXQgbGVhc3Qgb25lIG1vcmUgcGlkICovCi0JCXF0ZCA9IGlzcDE3NjBfcXRkX2FsbG9jKGZsYWdzKTsKKwkJcXRkID0gcXRkX2FsbG9jKGZsYWdzLCB1cmIsIFNFVFVQX1BJRCk7CiAJCWlmICghcXRkKQogCQkJZ290byBjbGVhbnVwOwotCQlxdGQtPnVyYiA9IHVyYjsKKwkJcXRkX2ZpbGwocXRkLCB1cmItPnNldHVwX3BhY2tldCwgc2l6ZW9mKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QpKTsKIAkJbGlzdF9hZGRfdGFpbCgmcXRkLT5xdGRfbGlzdCwgaGVhZCk7CiAKIAkJLyogZm9yIHplcm8gbGVuZ3RoIERBVEEgc3RhZ2VzLCBTVEFUVVMgaXMgYWx3YXlzIElOICovCi0JCWlmIChsZW4gPT0gMCkKLQkJCXRva2VuIHw9IElOX1BJRDsKKwkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9PSAwKQorCQkJcGFja2V0X3R5cGUgPSBJTl9QSUQ7CiAJfQogCi0JLyoKLQkgKiBkYXRhIHRyYW5zZmVyIHN0YWdlOiAgYnVmZmVyIHNldHVwCi0JICovCi0JYnVmID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7Ci0KLQlpZiAoaXNfaW5wdXQpCi0JCXRva2VuIHw9IElOX1BJRDsKLQllbHNlCi0JCXRva2VuIHw9IE9VVF9QSUQ7Ci0KLQltYXhwYWNrZXQgPSBtYXhfcGFja2V0KHVzYl9tYXhwYWNrZXQodXJiLT5kZXYsIHVyYi0+cGlwZSwgIWlzX2lucHV0KSk7CisJbWF4cGFja2V0c2l6ZSA9IG1heF9wYWNrZXQodXNiX21heHBhY2tldCh1cmItPmRldiwgdXJiLT5waXBlLAorCQkJCQkJdXNiX3BpcGVvdXQodXJiLT5waXBlKSkpOwogCiAJLyoKIAkgKiBidWZmZXIgZ2V0cyB3cmFwcGVkIGluIG9uZSBvciBtb3JlIHF0ZHM7CiAJICogbGFzdCBvbmUgbWF5IGJlICJzaG9ydCIgKGluY2x1ZGluZyB6ZXJvIGxlbikKIAkgKiBhbmQgbWF5IHNlcnZlIGFzIGEgY29udHJvbCBzdGF0dXMgYWNrCiAJICovCisJYnVmID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJbGVuID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCiAJZm9yICg7OykgewogCQlpbnQgdGhpc19xdGRfbGVuOwogCi0JCWlmICghYnVmICYmIGxlbikgewotCQkJLyogWFhYIFRoaXMgbG9va3MgbGlrZSB1c2Igc3RvcmFnZSAvIFNDU0kgYnVnICovCi0JCQlkZXZfZXJyKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiYnVmIGlzIG51bGwsIGRtYSBpcyAlMDhseCBsZW4gaXMgJWRcbiIsCi0JCQkJCShsb25nIHVuc2lnbmVkKXVyYi0+dHJhbnNmZXJfZG1hLCBsZW4pOwotCQkJV0FSTl9PTigxKTsKLQkJfQorCQlxdGQgPSBxdGRfYWxsb2MoZmxhZ3MsIHVyYiwgcGFja2V0X3R5cGUpOworCQlpZiAoIXF0ZCkKKwkJCWdvdG8gY2xlYW51cDsKKwkJdGhpc19xdGRfbGVuID0gcXRkX2ZpbGwocXRkLCBidWYsIGxlbik7CisJCWxpc3RfYWRkX3RhaWwoJnF0ZC0+cXRkX2xpc3QsIGhlYWQpOwogCi0JCXRoaXNfcXRkX2xlbiA9IHF0ZF9maWxsKHF0ZCwgYnVmLCBsZW4sIHRva2VuKTsKIAkJbGVuIC09IHRoaXNfcXRkX2xlbjsKIAkJYnVmICs9IHRoaXNfcXRkX2xlbjsKIAogCQlpZiAobGVuIDw9IDApCiAJCQlicmVhazsKLQotCQlxdGQgPSBpc3AxNzYwX3F0ZF9hbGxvYyhmbGFncyk7Ci0JCWlmICghcXRkKQotCQkJZ290byBjbGVhbnVwOwotCQlxdGQtPnVyYiA9IHVyYjsKLQkJbGlzdF9hZGRfdGFpbCgmcXRkLT5xdGRfbGlzdCwgaGVhZCk7CiAJfQogCiAJLyoKQEAgLTE1MTAsMTg0ICsxNDM1LDIwNCBAQAogCiAJCWlmICh1c2JfcGlwZWNvbnRyb2wodXJiLT5waXBlKSkgewogCQkJb25lX21vcmUgPSAxOwotCQkJLyogImluIiA8LS0+ICJvdXQiICAqLwotCQkJdG9rZW4gXj0gSU5fUElEOworCQkJaWYgKHBhY2tldF90eXBlID09IElOX1BJRCkKKwkJCQlwYWNrZXRfdHlwZSA9IE9VVF9QSUQ7CisJCQllbHNlCisJCQkJcGFja2V0X3R5cGUgPSBJTl9QSUQ7CiAJCX0gZWxzZSBpZiAodXNiX3BpcGVidWxrKHVyYi0+cGlwZSkKIAkJCQkmJiAodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9aRVJPX1BBQ0tFVCkKLQkJCQkmJiAhKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAlIG1heHBhY2tldCkpIHsKKwkJCQkmJiAhKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAlCisJCQkJCQkJbWF4cGFja2V0c2l6ZSkpIHsKIAkJCW9uZV9tb3JlID0gMTsKIAkJfQogCQlpZiAob25lX21vcmUpIHsKLQkJCXF0ZCA9IGlzcDE3NjBfcXRkX2FsbG9jKGZsYWdzKTsKKwkJCXF0ZCA9IHF0ZF9hbGxvYyhmbGFncywgdXJiLCBwYWNrZXRfdHlwZSk7CiAJCQlpZiAoIXF0ZCkKIAkJCQlnb3RvIGNsZWFudXA7Ci0JCQlxdGQtPnVyYiA9IHVyYjsKLQkJCWxpc3RfYWRkX3RhaWwoJnF0ZC0+cXRkX2xpc3QsIGhlYWQpOwogCiAJCQkvKiBuZXZlciBhbnkgZGF0YSBpbiBzdWNoIHBhY2tldHMgKi8KLQkJCXF0ZF9maWxsKHF0ZCwgTlVMTCwgMCwgdG9rZW4pOworCQkJcXRkX2ZpbGwocXRkLCBOVUxMLCAwKTsKKwkJCWxpc3RfYWRkX3RhaWwoJnF0ZC0+cXRkX2xpc3QsIGhlYWQpOwogCQl9CiAJfQogCi0JcXRkLT5zdGF0dXMgPSAwOwotCXJldHVybiBoZWFkOworCXJldHVybjsKIAogY2xlYW51cDoKLQlxdGRfbGlzdF9mcmVlKHVyYiwgaGVhZCk7Ci0JcmV0dXJuIE5VTEw7CisJcXRkX2xpc3RfZnJlZShoZWFkKTsKIH0KIAogc3RhdGljIGludCBpc3AxNzYwX3VyYl9lbnF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwKIAkJZ2ZwX3QgbWVtX2ZsYWdzKQogewotCXN0cnVjdCBsaXN0X2hlYWQgcXRkX2xpc3Q7Ci0JcGFja2V0X2VucXVldWUgKnBlOwotCi0JSU5JVF9MSVNUX0hFQUQoJnF0ZF9saXN0KTsKKwlzdHJ1Y3QgaXNwMTc2MF9oY2QgKnByaXYgPSBoY2RfdG9fcHJpdihoY2QpOworCXN0cnVjdCBsaXN0X2hlYWQgKmVwX3F1ZXVlOworCXN0cnVjdCBpc3AxNzYwX3FoICpxaCwgKnFoaXQ7CisJdW5zaWduZWQgbG9uZyBzcGluZmxhZ3M7CisJTElTVF9IRUFEKG5ld19xdGRzKTsKKwlpbnQgcmV0dmFsOworCWludCBxaF9pbl9xdWV1ZTsKIAogCXN3aXRjaCAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkpIHsKIAljYXNlIFBJUEVfQ09OVFJPTDoKKwkJZXBfcXVldWUgPSAmcHJpdi0+Y29udHJvbHFoczsKKwkJYnJlYWs7CiAJY2FzZSBQSVBFX0JVTEs6Ci0JCWlmICghcWhfdXJiX3RyYW5zYWN0aW9uKGhjZCwgdXJiLCAmcXRkX2xpc3QsIG1lbV9mbGFncykpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJcGUgPSAgZW5xdWV1ZV9hbl9BVExfcGFja2V0OworCQllcF9xdWV1ZSA9ICZwcml2LT5idWxrcWhzOwogCQlicmVhazsKLQogCWNhc2UgUElQRV9JTlRFUlJVUFQ6Ci0JCWlmICghcWhfdXJiX3RyYW5zYWN0aW9uKGhjZCwgdXJiLCAmcXRkX2xpc3QsIG1lbV9mbGFncykpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJcGUgPSBlbnF1ZXVlX2FuX0lOVF9wYWNrZXQ7CisJCWlmICh1cmItPmludGVydmFsIDwgMCkKKwkJCXJldHVybiAtRUlOVkFMOworCQkvKiBGSVhNRTogQ2hlY2sgYmFuZHdpZHRoICAqLworCQllcF9xdWV1ZSA9ICZwcml2LT5pbnRlcnJ1cHRxaHM7CiAJCWJyZWFrOwotCiAJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgotCQlkZXZfZXJyKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiUElQRV9JU09DSFJPTk9VUyBhaW4ndCBzdXBwb3J0ZWRcbiIpOworCQlkZXZfZXJyKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiJXM6IGlzb2Nocm9ub3VzIFVTQiBwYWNrZXRzICIKKwkJCQkJCQkibm90IHlldCBzdXBwb3J0ZWRcbiIsCisJCQkJCQkJX19mdW5jX18pOworCQlyZXR1cm4gLUVQSVBFOwogCWRlZmF1bHQ6CisJCWRldl9lcnIoaGNkLT5zZWxmLmNvbnRyb2xsZXIsICIlczogdW5rbm93biBwaXBlIHR5cGVcbiIsCisJCQkJCQkJX19mdW5jX18pOwogCQlyZXR1cm4gLUVQSVBFOwogCX0KIAotCXJldHVybiBpc3AxNzYwX3ByZXBhcmVfZW5xdWV1ZShoY2QsIHVyYiwgJnF0ZF9saXN0LCBtZW1fZmxhZ3MsIHBlKTsKLX0KKwlpZiAodXNiX3BpcGVpbih1cmItPnBpcGUpKQorCQl1cmItPmFjdHVhbF9sZW5ndGggPSAwOwogCi1zdGF0aWMgaW50IGlzcDE3NjBfdXJiX2RlcXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKQotewotCXN0cnVjdCBpc3AxNzYwX2hjZCAqcHJpdiA9IGhjZF90b19wcml2KGhjZCk7Ci0Jc3RydWN0IGludGVyX3BhY2tldF9pbmZvICppbnRzOwotCXUzMiBpOwotCXUzMiByZWdfYmFzZSwgb3JfcmVnLCBza2lwX3JlZzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBwdGQgcHRkOwotCXBhY2tldF9lbnF1ZXVlICpwZTsKKwlwYWNrZXRpemVfdXJiKGhjZCwgdXJiLCAmbmV3X3F0ZHMsIG1lbV9mbGFncyk7CisJaWYgKGxpc3RfZW1wdHkoJm5ld19xdGRzKSkKKwkJcmV0dXJuIC1FTk9NRU07CisJdXJiLT5oY3ByaXYgPSBOVUxMOyAvKiBVc2VkIHRvIHNpZ25hbCB1bmxpbmsgdG8gaW50ZXJydXB0IGhhbmRsZXIgKi8KIAotCXN3aXRjaCAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkpIHsKLQljYXNlIFBJUEVfSVNPQ0hST05PVVM6Ci0JCXJldHVybiAtRVBJUEU7Ci0JCWJyZWFrOworCXJldHZhbCA9IDA7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIHNwaW5mbGFncyk7CiAKLQljYXNlIFBJUEVfSU5URVJSVVBUOgotCQlpbnRzID0gcHJpdi0+aW50X2ludHM7Ci0JCXJlZ19iYXNlID0gSU5UX1BURF9PRkZTRVQ7Ci0JCW9yX3JlZyA9IEhDX0lOVF9JUlFfTUFTS19PUl9SRUc7Ci0JCXNraXBfcmVnID0gSENfSU5UX1BURF9TS0lQTUFQX1JFRzsKLQkJcGUgPSBlbnF1ZXVlX2FuX0lOVF9wYWNrZXQ7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJaW50cyA9IHByaXYtPmF0bF9pbnRzOwotCQlyZWdfYmFzZSA9IEFUTF9QVERfT0ZGU0VUOwotCQlvcl9yZWcgPSBIQ19BVExfSVJRX01BU0tfT1JfUkVHOwotCQlza2lwX3JlZyA9IEhDX0FUTF9QVERfU0tJUE1BUF9SRUc7Ci0JCXBlID0gIGVucXVldWVfYW5fQVRMX3BhY2tldDsKLQkJYnJlYWs7CisJaWYgKCF0ZXN0X2JpdChIQ0RfRkxBR19IV19BQ0NFU1NJQkxFLCAmaGNkLT5mbGFncykpIHsKKwkJcmV0dmFsID0gLUVTSFVURE9XTjsKKwkJZ290byBvdXQ7CiAJfQorCXJldHZhbCA9IHVzYl9oY2RfbGlua191cmJfdG9fZXAoaGNkLCB1cmIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gb3V0OwogCi0JbWVtc2V0KCZwdGQsIDAsIHNpemVvZihwdGQpKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKLQkJaWYgKCFpbnRzW2ldLnFoKQotCQkJY29udGludWU7Ci0JCUJVR19PTighaW50c1tpXS5xdGQpOwotCi0JCWlmIChpbnRzW2ldLnF0ZC0+dXJiID09IHVyYikgewotCQkJdTMyIHNraXBfbWFwOwotCQkJdTMyIG9yX21hcDsKLQkJCXN0cnVjdCBpc3AxNzYwX3F0ZCAqcXRkOwotCQkJc3RydWN0IGlzcDE3NjBfcWggKnFoOwotCi0JCQlza2lwX21hcCA9IHJlZ19yZWFkMzIoaGNkLT5yZWdzLCBza2lwX3JlZyk7Ci0JCQlza2lwX21hcCB8PSAxIDw8IGk7Ci0JCQlyZWdfd3JpdGUzMihoY2QtPnJlZ3MsIHNraXBfcmVnLCBza2lwX21hcCk7Ci0KLQkJCW9yX21hcCA9IHJlZ19yZWFkMzIoaGNkLT5yZWdzLCBvcl9yZWcpOwotCQkJb3JfbWFwICY9IH4oMSA8PCBpKTsKLQkJCXJlZ193cml0ZTMyKGhjZC0+cmVncywgb3JfcmVnLCBvcl9tYXApOwotCi0JCQlwdGRfd3JpdGUoaGNkLT5yZWdzLCByZWdfYmFzZSwgaSwgJnB0ZCk7Ci0KLQkJCXF0ZCA9IGludHNbaV0ucXRkOwotCQkJcWggPSBpbnRzW2ldLnFoOwotCi0JCQlmcmVlX21lbShoY2QsIHF0ZCk7Ci0JCQlxdGQgPSBjbGVhbl91cF9xdGRsaXN0KHF0ZCwgcWgpOwotCi0JCQlpbnRzW2ldLnFoID0gTlVMTDsKLQkJCWludHNbaV0ucXRkID0gTlVMTDsKLQotCQkJdXJiLT5zdGF0dXMgPSBzdGF0dXM7Ci0JCQlpc3AxNzYwX3VyYl9kb25lKGhjZCwgdXJiKTsKLQkJCWlmIChxdGQpCi0JCQkJcGUoaGNkLCBxaCwgcXRkKTsKLQkJCWJyZWFrOwotCi0JCX0gZWxzZSB7Ci0JCQlzdHJ1Y3QgaXNwMTc2MF9xdGQgKnF0ZDsKLQotCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShxdGQsICZpbnRzW2ldLnF0ZC0+cXRkX2xpc3QsCi0JCQkJCQkJCXF0ZF9saXN0KSB7Ci0JCQkJaWYgKHF0ZC0+dXJiID09IHVyYikgewotCQkJCQljbGVhbl91cF9xdGRsaXN0KHF0ZCwgaW50c1tpXS5xaCk7Ci0JCQkJCWlzcDE3NjBfdXJiX2RvbmUoaGNkLCB1cmIpOwotCQkJCQlxdGQgPSBOVUxMOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0KLQkJCS8qIFdlIGZvdW5kIHRoZSB1cmIgYmVmb3JlIHRoZSBsYXN0IHNsb3QgKi8KLQkJCWlmICghcXRkKQorCXFoID0gdXJiLT5lcC0+aGNwcml2OworCWlmIChxaCkgeworCQlxaF9pbl9xdWV1ZSA9IDA7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkocWhpdCwgZXBfcXVldWUsIHFoX2xpc3QpIHsKKwkJCWlmIChxaGl0ID09IHFoKSB7CisJCQkJcWhfaW5fcXVldWUgPSAxOwogCQkJCWJyZWFrOworCQkJfQogCQl9CisJCWlmICghcWhfaW5fcXVldWUpCisJCQlsaXN0X2FkZF90YWlsKCZxaC0+cWhfbGlzdCwgZXBfcXVldWUpOworCX0gZWxzZSB7CisJCXFoID0gcWhfYWxsb2MoR0ZQX0FUT01JQyk7CisJCWlmICghcWgpIHsKKwkJCXJldHZhbCA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQorCQlsaXN0X2FkZF90YWlsKCZxaC0+cWhfbGlzdCwgZXBfcXVldWUpOworCQl1cmItPmVwLT5oY3ByaXYgPSBxaDsKIAl9CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDA7CisJbGlzdF9zcGxpY2VfdGFpbCgmbmV3X3F0ZHMsICZxaC0+cXRkX2xpc3QpOworCXNjaGVkdWxlX3B0ZHMoaGNkKTsKKworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIHNwaW5mbGFncyk7CisJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGlycXJldHVybl90IGlzcDE3NjBfaXJxKHN0cnVjdCB1c2JfaGNkICpoY2QpCitzdGF0aWMgdm9pZCBraWxsX3RyYW5zZmVyKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwKKwkJc3RydWN0IGlzcDE3NjBfcWggKnFoKQogewogCXN0cnVjdCBpc3AxNzYwX2hjZCAqcHJpdiA9IGhjZF90b19wcml2KGhjZCk7Ci0JdTMyIGltYXNrOwotCWlycXJldHVybl90IGlycXJldCA9IElSUV9OT05FOworCWludCBza2lwX21hcDsKIAotCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CisJV0FSTl9PTihxaC0+c2xvdCA9PSAtMSk7CiAKLQlpZiAoIShoY2QtPnN0YXRlICYgSENfU1RBVEVfUlVOTklORykpCi0JCWdvdG8gbGVhdmU7CisJLyogV2UgbmVlZCB0byBmb3JjZWZ1bGx5IHJlY2xhaW0gdGhlIHNsb3Qgc2luY2Ugc29tZSB0cmFuc2ZlcnMgbmV2ZXIKKwkgICByZXR1cm4sIGUuZy4gaW50ZXJydXB0IHRyYW5zZmVycyBhbmQgTkFLZWQgYnVsayB0cmFuc2ZlcnMuICovCisJaWYgKHVzYl9waXBlYnVsayh1cmItPnBpcGUpKSB7CisJCXNraXBfbWFwID0gcmVnX3JlYWQzMihoY2QtPnJlZ3MsIEhDX0FUTF9QVERfU0tJUE1BUF9SRUcpOworCQlza2lwX21hcCB8PSAoMSA8PCBxaC0+c2xvdCk7CisJCXJlZ193cml0ZTMyKGhjZC0+cmVncywgSENfQVRMX1BURF9TS0lQTUFQX1JFRywgc2tpcF9tYXApOworCQlwcml2LT5hdGxfc2xvdHNbcWgtPnNsb3RdLnFoID0gTlVMTDsKKwkJcHJpdi0+YXRsX3Nsb3RzW3FoLT5zbG90XS5xdGQgPSBOVUxMOworCX0gZWxzZSB7CisJCXNraXBfbWFwID0gcmVnX3JlYWQzMihoY2QtPnJlZ3MsIEhDX0lOVF9QVERfU0tJUE1BUF9SRUcpOworCQlza2lwX21hcCB8PSAoMSA8PCBxaC0+c2xvdCk7CisJCXJlZ193cml0ZTMyKGhjZC0+cmVncywgSENfSU5UX1BURF9TS0lQTUFQX1JFRywgc2tpcF9tYXApOworCQlwcml2LT5pbnRfc2xvdHNbcWgtPnNsb3RdLnFoID0gTlVMTDsKKwkJcHJpdi0+aW50X3Nsb3RzW3FoLT5zbG90XS5xdGQgPSBOVUxMOworCX0KIAotCWltYXNrID0gcmVnX3JlYWQzMihoY2QtPnJlZ3MsIEhDX0lOVEVSUlVQVF9SRUcpOwotCWlmICh1bmxpa2VseSghaW1hc2spKQotCQlnb3RvIGxlYXZlOworCXFoLT5zbG90ID0gLTE7CisJcHJpdi0+YWN0aXZlX3B0ZHMtLTsKK30KIAotCXJlZ193cml0ZTMyKGhjZC0+cmVncywgSENfSU5URVJSVVBUX1JFRywgaW1hc2spOwotCWlmIChpbWFzayAmIChIQ19BVExfSU5UIHwgSENfU09UX0lOVCkpCi0JCWRvX2F0bF9pbnQoaGNkKTsKK3N0YXRpYyBpbnQgaXNwMTc2MF91cmJfZGVxdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsCisJCWludCBzdGF0dXMpCit7CisJc3RydWN0IGlzcDE3NjBfaGNkICpwcml2ID0gaGNkX3RvX3ByaXYoaGNkKTsKKwl1bnNpZ25lZCBsb25nIHNwaW5mbGFnczsKKwlzdHJ1Y3QgaXNwMTc2MF9xaCAqcWg7CisJc3RydWN0IGlzcDE3NjBfcXRkICpxdGQ7CisJaW50IHJldHZhbCA9IDA7CiAKLQlpZiAoaW1hc2sgJiBIQ19JTlRMX0lOVCkKLQkJZG9faW50bF9pbnQoaGNkKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgc3BpbmZsYWdzKTsKIAotCWlycXJldCA9IElSUV9IQU5ETEVEOwotbGVhdmU6Ci0Jc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwotCXJldHVybiBpcnFyZXQ7CisJcWggPSB1cmItPmVwLT5oY3ByaXY7CisJaWYgKCFxaCkgeworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHF0ZCwgJnFoLT5xdGRfbGlzdCwgcXRkX2xpc3QpCisJCWlmIChxdGQtPnVyYiA9PSB1cmIpIHsKKwkJCWlmIChxdGQtPnN0YXR1cyA9PSBRVERfWEZFUl9TVEFSVEVEKQorCQkJCWtpbGxfdHJhbnNmZXIoaGNkLCB1cmIsIHFoKTsKKwkJCXF0ZC0+c3RhdHVzID0gUVREX1JFVElSRTsKKwkJfQorCisJdXJiLT5zdGF0dXMgPSBzdGF0dXM7CisJc2NoZWR1bGVfcHRkcyhoY2QpOworCitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgc3BpbmZsYWdzKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBpc3AxNzYwX2VuZHBvaW50X2Rpc2FibGUoc3RydWN0IHVzYl9oY2QgKmhjZCwKKwkJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCkKK3sKKwlzdHJ1Y3QgaXNwMTc2MF9oY2QgKnByaXYgPSBoY2RfdG9fcHJpdihoY2QpOworCXVuc2lnbmVkIGxvbmcgc3BpbmZsYWdzOworCXN0cnVjdCBpc3AxNzYwX3FoICpxaDsKKwlzdHJ1Y3QgaXNwMTc2MF9xdGQgKnF0ZDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBzcGluZmxhZ3MpOworCisJcWggPSBlcC0+aGNwcml2OworCWlmICghcWgpCisJCWdvdG8gb3V0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShxdGQsICZxaC0+cXRkX2xpc3QsIHF0ZF9saXN0KSB7CisJCWlmIChxdGQtPnN0YXR1cyA9PSBRVERfWEZFUl9TVEFSVEVEKQorCQkJa2lsbF90cmFuc2ZlcihoY2QsIHF0ZC0+dXJiLCBxaCk7CisJCXF0ZC0+c3RhdHVzID0gUVREX1JFVElSRTsKKwkJcXRkLT51cmItPnN0YXR1cyA9IC1FQ09OTlJFU0VUOworCX0KKworCWVwLT5oY3ByaXYgPSBOVUxMOworCS8qIENhbm5vdCBmcmVlIHFoIGhlcmUgc2luY2UgaXQgd2lsbCBiZSBwYXJzZWQgYnkgc2NoZWR1bGVfcHRkcygpICovCisKKwlzY2hlZHVsZV9wdGRzKGhjZCk7CisKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBzcGluZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IGlzcDE3NjBfaHViX3N0YXR1c19kYXRhKHN0cnVjdCB1c2JfaGNkICpoY2QsIGNoYXIgKmJ1ZikKQEAgLTE3NzgsNyArMTcyMyw3IEBACiAJLyogaWYgcmVzZXQgZmluaXNoZWQgYW5kIGl0J3Mgc3RpbGwgbm90IGVuYWJsZWQgLS0gaGFuZG9mZiAqLwogCWlmICghKHBvcnRfc3RhdHVzICYgUE9SVF9QRSkpIHsKIAotCQlkZXZfZXJyKGhjZC0+c2VsZi5jb250cm9sbGVyLAorCQlkZXZfaW5mbyhoY2QtPnNlbGYuY29udHJvbGxlciwKIAkJCQkJInBvcnQgJWQgZnVsbCBzcGVlZCAtLT4gY29tcGFuaW9uXG4iLAogCQkJCQlpbmRleCArIDEpOwogCkBAIC0xNzg3LDcgKzE3MzIsNyBAQAogCQlyZWdfd3JpdGUzMihoY2QtPnJlZ3MsIEhDX1BPUlRTQzEsIHBvcnRfc3RhdHVzKTsKIAogCX0gZWxzZQotCQlkZXZfZXJyKGhjZC0+c2VsZi5jb250cm9sbGVyLCAicG9ydCAlZCBoaWdoIHNwZWVkXG4iLAorCQlkZXZfaW5mbyhoY2QtPnNlbGYuY29udHJvbGxlciwgInBvcnQgJWQgaGlnaCBzcGVlZFxuIiwKIAkJCQkJCQkJaW5kZXggKyAxKTsKIAogCXJldHVybiBwb3J0X3N0YXR1czsKQEAgLTIwNTksNTEgKzIwMDQsNiBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyB2b2lkIGlzcDE3NjBfZW5kcG9pbnRfZGlzYWJsZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLAotCQlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwKQotewotCXN0cnVjdCBpc3AxNzYwX2hjZCAqcHJpdiA9IGhjZF90b19wcml2KGhjZCk7Ci0Jc3RydWN0IGlzcDE3NjBfcWggKnFoOwotCXN0cnVjdCBpc3AxNzYwX3F0ZCAqcXRkOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCXFoID0gZXAtPmhjcHJpdjsKLQlpZiAoIXFoKQotCQlnb3RvIG91dDsKLQotCWVwLT5oY3ByaXYgPSBOVUxMOwotCWRvIHsKLQkJLyogbW9yZSB0aGFuIGVudHJ5IG1pZ2h0IGdldCByZW1vdmVkICovCi0JCWlmIChsaXN0X2VtcHR5KCZxaC0+cXRkX2xpc3QpKQotCQkJYnJlYWs7Ci0KLQkJcXRkID0gbGlzdF9maXJzdF9lbnRyeSgmcWgtPnF0ZF9saXN0LCBzdHJ1Y3QgaXNwMTc2MF9xdGQsCi0JCQkJcXRkX2xpc3QpOwotCi0JCWlmIChxdGQtPnN0YXR1cyAmIFVSQl9FTlFVRVVFRCkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQkJaXNwMTc2MF91cmJfZGVxdWV1ZShoY2QsIHF0ZC0+dXJiLCAtRUNPTk5SRVNFVCk7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQl9IGVsc2UgewotCQkJc3RydWN0IHVyYiAqdXJiOwotCi0JCQl1cmIgPSBxdGQtPnVyYjsKLQkJCWNsZWFuX3VwX3F0ZGxpc3QocXRkLCBxaCk7Ci0JCQl1cmItPnN0YXR1cyA9IC1FQ09OTlJFU0VUOwotCQkJaXNwMTc2MF91cmJfZG9uZShoY2QsIHVyYik7Ci0JCX0KLQl9IHdoaWxlICgxKTsKLQotCXFoX2Rlc3Ryb3kocWgpOwotCS8qIHJlbW92ZSByZXF1ZXN0cyBhbmQgbGVhayB0aGVtLgotCSAqIEFUTCBhcmUgcHJldHR5IGZhc3QgZG9uZSwgSU5UIGNvdWxkIHRha2UgYSB3aGlsZS4uLgotCSAqIFRoZSBsYXR0ZXIgc2hvdWxlIGJlIHJlbW92ZWQKLQkgKi8KLW91dDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci19Ci0KIHN0YXRpYyBpbnQgaXNwMTc2MF9nZXRfZnJhbWUoc3RydWN0IHVzYl9oY2QgKmhjZCkKIHsKIAlzdHJ1Y3QgaXNwMTc2MF9oY2QgKnByaXYgPSBoY2RfdG9fcHJpdihoY2QpOwpAQCAtMjE2NSw2ICsyMDY1LDEzIEBACiAKIGludCBfX2luaXQgaW5pdF9rbWVtX29uY2Uodm9pZCkKIHsKKwl1cmJfbGlzdGl0ZW1fY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoImlzcDE3NjAgdXJiX2xpc3RpdGVtIiwKKwkJCXNpemVvZihzdHJ1Y3QgdXJiX2xpc3RpdGVtKSwgMCwgU0xBQl9URU1QT1JBUlkgfAorCQkJU0xBQl9NRU1fU1BSRUFELCBOVUxMKTsKKworCWlmICghdXJiX2xpc3RpdGVtX2NhY2hlcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlxdGRfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoImlzcDE3NjBfcXRkIiwKIAkJCXNpemVvZihzdHJ1Y3QgaXNwMTc2MF9xdGQpLCAwLCBTTEFCX1RFTVBPUkFSWSB8CiAJCQlTTEFCX01FTV9TUFJFQUQsIE5VTEwpOwpAQCAtMjE4Nyw2ICsyMDk0LDcgQEAKIHsKIAlrbWVtX2NhY2hlX2Rlc3Ryb3kocXRkX2NhY2hlcCk7CiAJa21lbV9jYWNoZV9kZXN0cm95KHFoX2NhY2hlcCk7CisJa21lbV9jYWNoZV9kZXN0cm95KHVyYl9saXN0aXRlbV9jYWNoZXApOwogfQogCiBzdHJ1Y3QgdXNiX2hjZCAqaXNwMTc2MF9yZWdpc3RlcihwaHlzX2FkZHJfdCByZXNfc3RhcnQsIHJlc291cmNlX3NpemVfdCByZXNfbGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5oIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5oCmluZGV4IDg3MDUwNzYuLjAxNGE3ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmgKQEAgLTQ5LDEwICs0OSw5IEBACiAjZGVmaW5lIFNXX1JFU0VUX1JFU0VUX0FMTAkoMSA8PCAwKQogCiAjZGVmaW5lIEhDX0JVRkZFUl9TVEFUVVNfUkVHCTB4MzM0Ci0jZGVmaW5lIEFUTF9CVUZGRVIJCTB4MQotI2RlZmluZSBJTlRfQlVGRkVSCQkweDIKLSNkZWZpbmUgSVNPX0JVRkZFUgkJMHg0Ci0jZGVmaW5lIEJVRkZFUl9NQVAJCTB4NworI2RlZmluZSBJU09fQlVGX0ZJTEwJCSgxIDw8IDIpCisjZGVmaW5lIElOVF9CVUZfRklMTAkJKDEgPDwgMSkKKyNkZWZpbmUgQVRMX0JVRl9GSUxMCQkoMSA8PCAwKQogCiAjZGVmaW5lIEhDX01FTU9SWV9SRUcJCTB4MzNjCiAjZGVmaW5lIElTUF9CQU5LKHgpCQkoKHgpIDw8IDE2KQpAQCAtNjgsMTQgKzY3LDEzIEBACiAjZGVmaW5lIEhDX0lOVEVSUlVQVF9SRUcJMHgzMTAKIAogI2RlZmluZSBIQ19JTlRFUlJVUFRfRU5BQkxFCTB4MzE0Ci0jZGVmaW5lIElOVEVSUlVQVF9FTkFCTEVfTUFTSwkoSENfSU5UTF9JTlQgfCBIQ19BVExfSU5UIHwgSENfRU9UX0lOVCkKLSNkZWZpbmUgSU5URVJSVVBUX0VOQUJMRV9TT1RfTUFTSwkoSENfSU5UTF9JTlQgfCBIQ19TT1RfSU5UIHwgSENfRU9UX0lOVCkKLQogI2RlZmluZSBIQ19JU09fSU5UCQkoMSA8PCA5KQogI2RlZmluZSBIQ19BVExfSU5UCQkoMSA8PCA4KQogI2RlZmluZSBIQ19JTlRMX0lOVAkJKDEgPDwgNykKICNkZWZpbmUgSENfRU9UX0lOVAkJKDEgPDwgMykKICNkZWZpbmUgSENfU09UX0lOVAkJKDEgPDwgMSkKKyNkZWZpbmUgSU5URVJSVVBUX0VOQUJMRV9NQVNLCShIQ19JTlRMX0lOVCB8IEhDX0FUTF9JTlQpCisjZGVmaW5lIElOVEVSUlVQVF9FTkFCTEVfU09UX01BU0sJKEhDX1NPVF9JTlQpCiAKICNkZWZpbmUgSENfSVNPX0lSUV9NQVNLX09SX1JFRwkweDMxOAogI2RlZmluZSBIQ19JTlRfSVJRX01BU0tfT1JfUkVHCTB4MzFDCkBAIC0xMDYsNyArMTA0LDcgQEAKICNkZWZpbmUgQVRMX1BURF9PRkZTRVQJCTB4MGMwMAogI2RlZmluZSBQQVlMT0FEX09GRlNFVAkJMHgxMDAwCiAKLXN0cnVjdCBpbnRlcl9wYWNrZXRfaW5mbyB7CitzdHJ1Y3Qgc2xvdGluZm8gewogCXN0cnVjdCBpc3AxNzYwX3FoICpxaDsKIAlzdHJ1Y3QgaXNwMTc2MF9xdGQgKnF0ZDsKIH07CkBAIC0xNTYsNTQgKzE1NCw1MiBAQAogCiAvKiBBVEwgKi8KIC8qIERXMCAqLwotI2RlZmluZSBQVERfVkFMSUQJCQkxCi0jZGVmaW5lIFBURF9MRU5HVEgoeCkJCQkoKCh1MzIpIHgpIDw8IDMpCi0jZGVmaW5lIFBURF9NQVhQQUNLRVQoeCkJCSgoKHUzMikgeCkgPDwgMTgpCi0jZGVmaW5lIFBURF9NVUxUSSh4KQkJCSgoKHUzMikgeCkgPDwgMjkpCi0jZGVmaW5lIFBURF9FTkRQT0lOVCh4KQkJCSgoKHUzMikJeCkgPDwgMzEpCisjZGVmaW5lIERXMF9WQUxJRF9CSVQJCQkxCisjZGVmaW5lIEZST01fRFcwX1ZBTElEKHgpCQkoKHgpICYgMHgwMSkKKyNkZWZpbmUgVE9fRFcwX0xFTkdUSCh4KQkJKCgodTMyKSB4KSA8PCAzKQorI2RlZmluZSBUT19EVzBfTUFYUEFDS0VUKHgpCQkoKCh1MzIpIHgpIDw8IDE4KQorI2RlZmluZSBUT19EVzBfTVVMVEkoeCkJCQkoKCh1MzIpIHgpIDw8IDI5KQorI2RlZmluZSBUT19EVzBfRU5EUE9JTlQoeCkJCSgoKHUzMikJeCkgPDwgMzEpCiAvKiBEVzEgKi8KLSNkZWZpbmUgUFREX0RFVklDRV9BRERSKHgpCQkoKCh1MzIpIHgpIDw8IDMpCi0jZGVmaW5lIFBURF9QSURfVE9LRU4oeCkJCSgoKHUzMikgeCkgPDwgMTApCi0jZGVmaW5lIFBURF9UUkFOU19CVUxLCQkJKCh1MzIpIDIgPDwgMTIpCi0jZGVmaW5lIFBURF9UUkFOU19JTlQJCQkoKHUzMikgMyA8PCAxMikKLSNkZWZpbmUgUFREX1RSQU5TX1NQTElUCQkJKCh1MzIpIDEgPDwgMTQpCi0jZGVmaW5lIFBURF9TRV9VU0JfTE9TUEVFRAkJKCh1MzIpIDIgPDwgMTYpCi0jZGVmaW5lIFBURF9QT1JUX05VTSh4KQkJCSgoKHUzMikgeCkgPDwgMTgpCi0jZGVmaW5lIFBURF9IVUJfTlVNKHgpCQkJKCgodTMyKSB4KSA8PCAyNSkKLSNkZWZpbmUgUFREX1BJTkcoeCkJCQkoKCh1MzIpIHgpIDw8IDI2KQorI2RlZmluZSBUT19EVzFfREVWSUNFX0FERFIoeCkJCSgoKHUzMikgeCkgPDwgMykKKyNkZWZpbmUgVE9fRFcxX1BJRF9UT0tFTih4KQkJKCgodTMyKSB4KSA8PCAxMCkKKyNkZWZpbmUgRFcxX1RSQU5TX0JVTEsJCQkoKHUzMikgMiA8PCAxMikKKyNkZWZpbmUgRFcxX1RSQU5TX0lOVAkJCSgodTMyKSAzIDw8IDEyKQorI2RlZmluZSBEVzFfVFJBTlNfU1BMSVQJCQkoKHUzMikgMSA8PCAxNCkKKyNkZWZpbmUgRFcxX1NFX1VTQl9MT1NQRUVECQkoKHUzMikgMiA8PCAxNikKKyNkZWZpbmUgVE9fRFcxX1BPUlRfTlVNKHgpCQkoKCh1MzIpIHgpIDw8IDE4KQorI2RlZmluZSBUT19EVzFfSFVCX05VTSh4KQkJKCgodTMyKSB4KSA8PCAyNSkKIC8qIERXMiAqLwotI2RlZmluZSBQVERfUkxfQ05UKHgpCQkJKCgodTMyKSB4KSA8PCAyNSkKLSNkZWZpbmUgUFREX0RBVEFfU1RBUlRfQUREUih4KQkJKCgodTMyKSB4KSA8PCA4KQotI2RlZmluZSBCQVNFX0FERFIJCQkweDEwMDAKKyNkZWZpbmUgVE9fRFcyX0RBVEFfU1RBUlRfQUREUih4KQkoKCh1MzIpIHgpIDw8IDgpCisjZGVmaW5lIFRPX0RXMl9STCh4KQkJCSgoeCkgPDwgMjUpCisjZGVmaW5lIEZST01fRFcyX1JMKHgpCQkJKCgoeCkgPj4gMjUpICYgMHhmKQogLyogRFczICovCi0jZGVmaW5lIFBURF9DRVJSKHgpCQkJKCgodTMyKSB4KSA8PCAyMykKLSNkZWZpbmUgUFREX05BQ19DTlQoeCkJCQkoKCh1MzIpIHgpIDw8IDE5KQotI2RlZmluZSBQVERfQUNUSVZFCQkJKCh1MzIpIDEgPDwgMzEpCi0jZGVmaW5lIFBURF9EQVRBX1RPR0dMRSh4KQkJKCgodTMyKSB4KSA8PCAyNSkKLQotI2RlZmluZSBEVzNfSEFMVF9CSVQJCQkoMSA8PCAzMCkKKyNkZWZpbmUgRlJPTV9EVzNfTlJCWVRFU1RSQU5TRkVSUkVEKHgpCQkoKHgpICYgMHg3ZmZmKQorI2RlZmluZSBGUk9NX0RXM19TQ1NfTlJCWVRFU1RSQU5TRkVSUkVEKHgpCSgoeCkgJiAweDA3ZmYpCisjZGVmaW5lIFRPX0RXM19OQUtDT1VOVCh4KQkJKCh4KSA8PCAxOSkKKyNkZWZpbmUgRlJPTV9EVzNfTkFLQ09VTlQoeCkJCSgoKHgpID4+IDE5KSAmIDB4ZikKKyNkZWZpbmUgVE9fRFczX0NFUlIoeCkJCQkoKHgpIDw8IDIzKQorI2RlZmluZSBGUk9NX0RXM19DRVJSKHgpCQkoKCh4KSA+PiAyMykgJiAweDMpCisjZGVmaW5lIFRPX0RXM19EQVRBX1RPR0dMRSh4KQkJKCh4KSA8PCAyNSkKKyNkZWZpbmUgRlJPTV9EVzNfREFUQV9UT0dHTEUoeCkJCSgoKHgpID4+IDI1KSAmIDB4MSkKKyNkZWZpbmUgVE9fRFczX1BJTkcoeCkJCQkoKHgpIDw8IDI2KQorI2RlZmluZSBGUk9NX0RXM19QSU5HKHgpCQkoKCh4KSA+PiAyNikgJiAweDEpCiAjZGVmaW5lIERXM19FUlJPUl9CSVQJCQkoMSA8PCAyOCkKLSNkZWZpbmUgRFczX1FURF9BQ1RJVkUJCQkoMSA8PCAzMSkKKyNkZWZpbmUgRFczX0JBQkJMRV9CSVQJCQkoMSA8PCAyOSkKKyNkZWZpbmUgRFczX0hBTFRfQklUCQkJKDEgPDwgMzApCisjZGVmaW5lIERXM19BQ1RJVkVfQklUCQkJKDEgPDwgMzEpCiAKICNkZWZpbmUgSU5UX1VOREVSUlVOCQkJKDEgPDwgMikKICNkZWZpbmUgSU5UX0JBQkJMRQkJCSgxIDw8IDEpCiAjZGVmaW5lIElOVF9FWEFDVAkJCSgxIDw8IDApCiAKLSNkZWZpbmUgRFcxX0dFVF9QSUQoeCkJCQkoKCh4KSA+PiAxMCkgJiAweDMpCi0jZGVmaW5lIFBURF9YRkVSUkVEX0xFTkdUSCh4KQkJKCh4KSAmIDB4N2ZmZikKLSNkZWZpbmUgUFREX1hGRVJSRURfTEVOR1RIX0xPKHgpCSgoeCkgJiAweDdmZikKLQogI2RlZmluZSBTRVRVUF9QSUQJKDIpCiAjZGVmaW5lIElOX1BJRAkJKDEpCiAjZGVmaW5lIE9VVF9QSUQJCSgwKQotI2RlZmluZSBHRVRfUVREX1RPS0VOX1RZUEUoeCkJKCh4KSAmIDB4MykKLQotI2RlZmluZSBEQVRBX1RPR0dMRQkJKDEgPDwgMzEpCi0jZGVmaW5lIEdFVF9EQVRBX1RPR0dMRSh4KQkoKHgpID4+IDMxKQogCiAvKiBFcnJhdGEgMSAqLwogI2RlZmluZSBSTF9DT1VOVEVSCSgwKQogI2RlZmluZSBOQUtfQ09VTlRFUgkoMCkKICNkZWZpbmUgRVJSX0NPVU5URVIJKDIpCiAKLSNlbmRpZgorI2VuZGlmIC8qIF9JU1AxNzYwX0hDRF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vY3Rlb24yLWNvbW1vbi5jIGIvZHJpdmVycy91c2IvaG9zdC9vY3Rlb24yLWNvbW1vbi5jCmluZGV4IDcyZDY3MmMuLmQ5ZGY0MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2N0ZW9uMi1jb21tb24uYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29jdGVvbjItY29tbW9uLmMKQEAgLTMsMTggKzMsMTkgQEAKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDEwIENhdml1bSBOZXR3b3JrcworICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIENhdml1bSBOZXR3b3JrcwogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0KICNpbmNsdWRlIDxhc20vb2N0ZW9uL29jdGVvbi5oPgogI2luY2x1ZGUgPGFzbS9vY3Rlb24vY3ZteC11Y3RseC1kZWZzLmg+CiAKLXN0YXRpYyBhdG9taWNfdCAgb2N0ZW9uMl91c2JfY2xvY2tfc3RhcnRfY250ID0gQVRPTUlDX0lOSVQoMCk7CitzdGF0aWMgREVGSU5FX01VVEVYKG9jdGVvbjJfdXNiX2Nsb2Nrc19tdXRleCk7CisKK3N0YXRpYyBpbnQgb2N0ZW9uMl91c2JfY2xvY2tfc3RhcnRfY250OwogCiB2b2lkIG9jdGVvbjJfdXNiX2Nsb2Nrc19zdGFydCh2b2lkKQogewpAQCAtMjYsOCArMjcsMTIgQEAKIAlpbnQgaTsKIAl1bnNpZ25lZCBsb25nIGlvX2Nsa182NF90b19uczsKIAotCWlmIChhdG9taWNfaW5jX3JldHVybigmb2N0ZW9uMl91c2JfY2xvY2tfc3RhcnRfY250KSAhPSAxKQotCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZvY3Rlb24yX3VzYl9jbG9ja3NfbXV0ZXgpOworCisJb2N0ZW9uMl91c2JfY2xvY2tfc3RhcnRfY250Kys7CisJaWYgKG9jdGVvbjJfdXNiX2Nsb2NrX3N0YXJ0X2NudCAhPSAxKQorCQlnb3RvIGV4aXQ7CiAKIAlpb19jbGtfNjRfdG9fbnMgPSA2NDAwMDAwMDAwMHVsbCAvIG9jdGVvbl9nZXRfaW9fY2xvY2tfcmF0ZSgpOwogCkBAIC00Myw2ICs0OCwxMyBAQAogCiAJLyogU3RlcCAzOiBDb25maWd1cmUgdGhlIHJlZmVyZW5jZSBjbG9jaywgUEhZLCBhbmQgSENMSyAqLwogCWNsa19yc3RfY3RsLnU2NCA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9VQ1RMWF9DTEtfUlNUX0NUTCgwKSk7CisKKwkvKgorCSAqIElmIHRoZSBVQ1RMIGxvb2tzIGxpa2UgaXQgaGFzIGFscmVhZHkgYmVlbiBzdGFydGVkLCBza2lwCisJICogdGhlIGluaXRpYWxpemF0aW9uLCBvdGhlcndpc2UgYnVzIGVycm9ycyBhcmUgb2J0YWluZWQuCisJICovCisJaWYgKGNsa19yc3RfY3RsLnMuaHJzdCkKKwkJZ290byBlbmRfY2xvY2s7CiAJLyogM2EgKi8KIAljbGtfcnN0X2N0bC5zLnBfcG9yID0gMTsKIAljbGtfcnN0X2N0bC5zLmhyc3QgPSAwOwpAQCAtMTU4LDI4ICsxNzAsMzEgQEAKIAljbGtfcnN0X2N0bC5zLmhyc3QgPSAxOwogCWN2bXhfd3JpdGVfY3NyKENWTVhfVUNUTFhfQ0xLX1JTVF9DVEwoMCksIGNsa19yc3RfY3RsLnU2NCk7CiAKK2VuZF9jbG9jazoKIAkvKiBOb3cgd2UgY2FuIHNldCBzb21lIG90aGVyIHJlZ2lzdGVycy4gICovCiAKIAlmb3IgKGkgPSAwOyBpIDw9IDE7IGkrKykgewogCQlwb3J0X2N0bF9zdGF0dXMudTY0ID0KIAkJCWN2bXhfcmVhZF9jc3IoQ1ZNWF9VQ1RMWF9VUEhZX1BPUlRYX0NUTF9TVEFUVVMoaSwgMCkpOwotCQkvKiBTZXQgdHh2cmVmdHVuZSB0byAxNSB0byBvYnRhaW4gY29tcGxpZW50ICdleWUnIGRpYWdyYW0uICovCisJCS8qIFNldCB0eHZyZWZ0dW5lIHRvIDE1IHRvIG9idGFpbiBjb21wbGlhbnQgJ2V5ZScgZGlhZ3JhbS4gKi8KIAkJcG9ydF9jdGxfc3RhdHVzLnMudHh2cmVmdHVuZSA9IDE1OworCQlwb3J0X2N0bF9zdGF0dXMucy50eHJpc2V0dW5lID0gMTsKKwkJcG9ydF9jdGxfc3RhdHVzLnMudHhwcmVlbXBoYXNpc3R1bmUgPSAxOwogCQljdm14X3dyaXRlX2NzcihDVk1YX1VDVExYX1VQSFlfUE9SVFhfQ1RMX1NUQVRVUyhpLCAwKSwKIAkJCSAgICAgICBwb3J0X2N0bF9zdGF0dXMudTY0KTsKIAl9CisKKwkvKiBTZXQgdVNPRiBjeWNsZSBwZXJpb2QgdG8gNjAsMDAwIGJpdHMuICovCisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9VQ1RMWF9FSENJX0ZMQSgwKSwgMHgyMHVsbCk7CitleGl0OgorCW11dGV4X3VubG9jaygmb2N0ZW9uMl91c2JfY2xvY2tzX211dGV4KTsKIH0KIEVYUE9SVF9TWU1CT0wob2N0ZW9uMl91c2JfY2xvY2tzX3N0YXJ0KTsKIAogdm9pZCBvY3Rlb24yX3VzYl9jbG9ja3Nfc3RvcCh2b2lkKQogewotCXVuaW9uIGN2bXhfdWN0bHhfaWZfZW5hIGlmX2VuYTsKLQotCWlmIChhdG9taWNfZGVjX3JldHVybigmb2N0ZW9uMl91c2JfY2xvY2tfc3RhcnRfY250KSAhPSAwKQotCQlyZXR1cm47Ci0KLQlpZl9lbmEudTY0ID0gMDsKLQlpZl9lbmEucy5lbiA9IDA7Ci0JY3ZteF93cml0ZV9jc3IoQ1ZNWF9VQ1RMWF9JRl9FTkEoMCksIGlmX2VuYS51NjQpOworCW11dGV4X2xvY2soJm9jdGVvbjJfdXNiX2Nsb2Nrc19tdXRleCk7CisJb2N0ZW9uMl91c2JfY2xvY2tfc3RhcnRfY250LS07CisJbXV0ZXhfdW5sb2NrKCZvY3Rlb24yX3VzYl9jbG9ja3NfbXV0ZXgpOwogfQogRVhQT1JUX1NZTUJPTChvY3Rlb24yX3VzYl9jbG9ja3Nfc3RvcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXRoNzkuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdGg3OS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZWEzZTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXRoNzkuYwpAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAqICBPSENJIEhDRCAoSG9zdCBDb250cm9sbGVyIERyaXZlcikgZm9yIFVTQi4KKyAqCisgKiAgQnVzIEdsdWUgZm9yIEF0aGVyb3MgQVI3MVhYL0FSNzI0WCBidWlsdC1pbiBPSENJIGNvbnRyb2xsZXIuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDExIEdhYm9yIEp1aG9zIDxqdWhvc2dAb3BlbndydC5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IEltcmUgS2Fsb3ogPGthbG96QG9wZW53cnQub3JnPgorICoKKyAqICBQYXJ0cyBvZiB0aGlzIGZpbGUgYXJlIGJhc2VkIG9uIEF0aGVyb3MnIDIuNi4xNSBCU1AKKyAqCUNvcHlyaWdodCAoQykgMjAwNyBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG9oY2lfYXRoNzlfc3RhcnQoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2kgPSBoY2RfdG9fb2hjaShoY2QpOworCWludCByZXQ7CisKKwlyZXQgPSBvaGNpX2luaXQob2hjaSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBvaGNpX3J1bihvaGNpKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnI7CisKKwlyZXR1cm4gMDsKKworZXJyOgorCW9oY2lfc3RvcChoY2QpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyIG9oY2lfYXRoNzlfaGNfZHJpdmVyID0geworCS5kZXNjcmlwdGlvbgkJPSBoY2RfbmFtZSwKKwkucHJvZHVjdF9kZXNjCQk9ICJBdGhlcm9zIGJ1aWx0LWluIE9IQ0kgY29udHJvbGxlciIsCisJLmhjZF9wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBvaGNpX2hjZCksCisKKwkuaXJxCQkJPSBvaGNpX2lycSwKKwkuZmxhZ3MJCQk9IEhDRF9VU0IxMSB8IEhDRF9NRU1PUlksCisKKwkuc3RhcnQJCQk9IG9oY2lfYXRoNzlfc3RhcnQsCisJLnN0b3AJCQk9IG9oY2lfc3RvcCwKKwkuc2h1dGRvd24JCT0gb2hjaV9zaHV0ZG93biwKKworCS51cmJfZW5xdWV1ZQkJPSBvaGNpX3VyYl9lbnF1ZXVlLAorCS51cmJfZGVxdWV1ZQkJPSBvaGNpX3VyYl9kZXF1ZXVlLAorCS5lbmRwb2ludF9kaXNhYmxlCT0gb2hjaV9lbmRwb2ludF9kaXNhYmxlLAorCisJLyoKKwkgKiBzY2hlZHVsaW5nIHN1cHBvcnQKKwkgKi8KKwkuZ2V0X2ZyYW1lX251bWJlcgk9IG9oY2lfZ2V0X2ZyYW1lLAorCisJLyoKKwkgKiByb290IGh1YiBzdXBwb3J0CisJICovCisJLmh1Yl9zdGF0dXNfZGF0YQk9IG9oY2lfaHViX3N0YXR1c19kYXRhLAorCS5odWJfY29udHJvbAkJPSBvaGNpX2h1Yl9jb250cm9sLAorCS5zdGFydF9wb3J0X3Jlc2V0CT0gb2hjaV9zdGFydF9wb3J0X3Jlc2V0LAorfTsKKworc3RhdGljIGludCBvaGNpX2F0aDc5X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHVzYl9oY2QgKmhjZDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaXJxOworCWludCByZXQ7CisKKwlpZiAodXNiX2Rpc2FibGVkKCkpCisJCXJldHVybiAtRU5PREVWOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJubyBJUlEgc3BlY2lmaWVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWlycSA9IHJlcy0+c3RhcnQ7CisKKwloY2QgPSB1c2JfY3JlYXRlX2hjZCgmb2hjaV9hdGg3OV9oY19kcml2ZXIsICZwZGV2LT5kZXYsCisJCQkgICAgIGRldl9uYW1lKCZwZGV2LT5kZXYpKTsKKwlpZiAoIWhjZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgIm5vIGJhc2UgYWRkcmVzcyBzcGVjaWZpZWRcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9wdXRfaGNkOworCX0KKwloY2QtPnJzcmNfc3RhcnQJPSByZXMtPnN0YXJ0OworCWhjZC0+cnNyY19sZW4JPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuLCBoY2RfbmFtZSkpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY29udHJvbGxlciBhbHJlYWR5IGluIHVzZVxuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcnJfcHV0X2hjZDsKKwl9CisKKwloY2QtPnJlZ3MgPSBpb3JlbWFwKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisJaWYgKCFoY2QtPnJlZ3MpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiZXJyb3IgbWFwcGluZyBtZW1vcnlcbiIpOworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKKwl9CisKKwlvaGNpX2hjZF9pbml0KGhjZF90b19vaGNpKGhjZCkpOworCisJcmV0ID0gdXNiX2FkZF9oY2QoaGNkLCBpcnEsIElSUUZfRElTQUJMRUQpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3N0b3BfaGNkOworCisJcmV0dXJuIDA7CisKK2Vycl9zdG9wX2hjZDoKKwlpb3VubWFwKGhjZC0+cmVncyk7CitlcnJfcmVsZWFzZV9yZWdpb246CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CitlcnJfcHV0X2hjZDoKKwl1c2JfcHV0X2hjZChoY2QpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2hjaV9hdGg3OV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwl1c2JfcmVtb3ZlX2hjZChoY2QpOworCWlvdW5tYXAoaGNkLT5yZWdzKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwl1c2JfcHV0X2hjZChoY2QpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9oY2lfaGNkX2F0aDc5X2RyaXZlciA9IHsKKwkucHJvYmUJCT0gb2hjaV9hdGg3OV9wcm9iZSwKKwkucmVtb3ZlCQk9IG9oY2lfYXRoNzlfcmVtb3ZlLAorCS5zaHV0ZG93bgk9IHVzYl9oY2RfcGxhdGZvcm1fc2h1dGRvd24sCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImF0aDc5LW9oY2kiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworTU9EVUxFX0FMSUFTKFBMQVRGT1JNX01PRFVMRV9QUkVGSVggImF0aDc5LW9oY2kiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYwppbmRleCBkNTU3MjM1Li45YWExMGJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCkBAIC03NjQsNiArNzY0LDcgQEAKIAlpZiAoaW50cyA9PSB+KHUzMikwKSB7CiAJCWRpc2FibGUgKG9oY2kpOwogCQlvaGNpX2RiZyAob2hjaSwgImRldmljZSByZW1vdmVkIVxuIik7CisJCXVzYl9oY19kaWVkKGhjZCk7CiAJCXJldHVybiBJUlFfSEFORExFRDsKIAl9CiAKQEAgLTc3MSw3ICs3NzIsNyBAQAogCWludHMgJj0gb2hjaV9yZWFkbChvaGNpLCAmcmVncy0+aW50cmVuYWJsZSk7CiAKIAkvKiBpbnRlcnJ1cHQgZm9yIHNvbWUgb3RoZXIgZGV2aWNlPyAqLwotCWlmIChpbnRzID09IDApCisJaWYgKGludHMgPT0gMCB8fCB1bmxpa2VseShoY2QtPnN0YXRlID09IEhDX1NUQVRFX0hBTFQpKQogCQlyZXR1cm4gSVJRX05PVE1JTkU7CiAKIAlpZiAoaW50cyAmIE9IQ0lfSU5UUl9VRSkgewpAQCAtNzg4LDYgKzc4OSw3IEBACiAJCX0gZWxzZSB7CiAJCQlkaXNhYmxlIChvaGNpKTsKIAkJCW9oY2lfZXJyIChvaGNpLCAiT0hDSSBVbnJlY292ZXJhYmxlIEVycm9yLCBkaXNhYmxlZFxuIik7CisJCQl1c2JfaGNfZGllZChoY2QpOwogCQl9CiAKIAkJb2hjaV9kdW1wIChvaGNpLCAxKTsKQEAgLTExMDUsNiArMTEwNywxMSBAQAogI2RlZmluZSBQTEFURk9STV9EUklWRVIJCW9oY2lfaGNkX2NuczN4eHhfZHJpdmVyCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19VU0JfT0hDSV9BVEg3OQorI2luY2x1ZGUgIm9oY2ktYXRoNzkuYyIKKyNkZWZpbmUgUExBVEZPUk1fRFJJVkVSCQlvaGNpX2hjZF9hdGg3OV9kcml2ZXIKKyNlbmRpZgorCiAjaWYJIWRlZmluZWQoUENJX0RSSVZFUikgJiYJCVwKIAkhZGVmaW5lZChQTEFURk9STV9EUklWRVIpICYmCVwKIAkhZGVmaW5lZChPTUFQMV9QTEFURk9STV9EUklWRVIpICYmCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wY2kuYwppbmRleCBkODRkNmYwLi5hZDgxNjZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcGNpLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBjaS5jCkBAIC0xODEsMTAgKzE4MSwxOCBAQAogICovCiBzdGF0aWMgaW50IG9oY2lfcXVpcmtfbnZpZGlhX3NodXRkb3duKHN0cnVjdCB1c2JfaGNkICpoY2QpCiB7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGhjZC0+c2VsZi5jb250cm9sbGVyKTsKIAlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2kgPSBoY2RfdG9fb2hjaShoY2QpOwogCi0Jb2hjaS0+ZmxhZ3MgfD0gT0hDSV9RVUlSS19TSFVURE9XTjsKLQlvaGNpX2RiZyhvaGNpLCAiZW5hYmxlZCBuVmlkaWEgc2h1dGRvd24gcXVpcmtcbiIpOworCS8qIEV2aWRlbnRseSBuVmlkaWEgZml4ZWQgdGhlaXIgbGF0ZXIgaGFyZHdhcmU7IHRoaXMgaXMgYSBndWVzcyBhdAorCSAqIHRoZSBjaGFuZ2VvdmVyIHBvaW50LgorCSAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNTFfVVNCCQkweDAyNmQKKworCWlmIChwZGV2LT5kZXZpY2UgPCBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNTFfVVNCKSB7CisJCW9oY2ktPmZsYWdzIHw9IE9IQ0lfUVVJUktfU0hVVERPV047CisJCW9oY2lfZGJnKG9oY2ksICJlbmFibGVkIG5WaWRpYSBzaHV0ZG93biBxdWlya1xuIik7CisJfQogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXMzYzI0MTAuYwppbmRleCBhNjhhZjJkLi43YzlhNGQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zM2MyNDEwLmMKQEAgLTU2LDkgKzU2LDggQEAKIAkJaW5mby0+aGNkCT0gaGNkOwogCQlpbmZvLT5yZXBvcnRfb2MgPSBzM2MyNDEwX2hjZF9vYzsKIAotCQlpZiAoaW5mby0+ZW5hYmxlX29jICE9IE5VTEwpIHsKKwkJaWYgKGluZm8tPmVuYWJsZV9vYyAhPSBOVUxMKQogCQkJKGluZm8tPmVuYWJsZV9vYykoaW5mbywgMSk7Ci0JCX0KIAl9CiB9CiAKQEAgLTcyLDkgKzcxLDggQEAKIAkJaW5mby0+cmVwb3J0X29jID0gTlVMTDsKIAkJaW5mby0+aGNkCT0gTlVMTDsKIAotCQlpZiAoaW5mby0+ZW5hYmxlX29jICE9IE5VTEwpIHsKKwkJaWYgKGluZm8tPmVuYWJsZV9vYyAhPSBOVUxMKQogCQkJKGluZm8tPmVuYWJsZV9vYykoaW5mbywgMCk7Ci0JCX0KIAl9CiAKIAljbGtfZGlzYWJsZShjbGspOwpAQCAtODgsMTQgKzg2LDE0IEBACiAqLwogCiBzdGF0aWMgaW50Ci1vaGNpX3MzYzI0MTBfaHViX3N0YXR1c19kYXRhIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBjaGFyICpidWYpCitvaGNpX3MzYzI0MTBfaHViX3N0YXR1c19kYXRhKHN0cnVjdCB1c2JfaGNkICpoY2QsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgczNjMjQxMF9oY2RfaW5mbyAqaW5mbyA9IHRvX3MzYzI0MTBfaW5mbyhoY2QpOwogCXN0cnVjdCBzM2MyNDEwX2hjZF9wb3J0ICpwb3J0OwogCWludCBvcmlnOwogCWludCBwb3J0bm87CiAKLQlvcmlnICA9IG9oY2lfaHViX3N0YXR1c19kYXRhIChoY2QsIGJ1Zik7CisJb3JpZyAgPSBvaGNpX2h1Yl9zdGF0dXNfZGF0YShoY2QsIGJ1Zik7CiAKIAlpZiAoaW5mbyA9PSBOVUxMKQogCQlyZXR1cm4gb3JpZzsKQEAgLTE0NSw3ICsxNDMsNyBAQAogICogcmVxdWVzdC4KICovCiAKLXN0YXRpYyBpbnQgb2hjaV9zM2MyNDEwX2h1Yl9jb250cm9sICgKK3N0YXRpYyBpbnQgb2hjaV9zM2MyNDEwX2h1Yl9jb250cm9sKAogCXN0cnVjdCB1c2JfaGNkCSpoY2QsCiAJdTE2CQl0eXBlUmVxLAogCXUxNgkJd1ZhbHVlLApAQCAtMTk5LDkgKzE5Nyw4IEBACiAJCQlkZXZfZGJnKGhjZC0+c2VsZi5jb250cm9sbGVyLAogCQkJCSJDbGVhclBvcnRGZWF0dXJlOiBPVkVSX0NVUlJFTlRcbiIpOwogCi0JCQlpZiAodmFsaWRfcG9ydCh3SW5kZXgpKSB7CisJCQlpZiAodmFsaWRfcG9ydCh3SW5kZXgpKQogCQkJCWluZm8tPnBvcnRbd0luZGV4LTFdLm9jX3N0YXR1cyA9IDA7Ci0JCQl9CiAKIAkJCWdvdG8gb3V0OwogCkBAIC0yNDIsOCArMjM5LDExIEBACiAJCWRlc2MtPndIdWJDaGFyYWN0ZXJpc3RpY3MgfD0gY3B1X3RvX2xlMTYoMHgwMDAxKTsKIAogCQlpZiAoaW5mby0+ZW5hYmxlX29jKSB7Ci0JCQlkZXNjLT53SHViQ2hhcmFjdGVyaXN0aWNzICY9IH5jcHVfdG9fbGUxNihIVUJfQ0hBUl9PQ1BNKTsKLQkJCWRlc2MtPndIdWJDaGFyYWN0ZXJpc3RpY3MgfD0gIGNwdV90b19sZTE2KDB4MDAwOHwweDAwMDEpOworCQkJZGVzYy0+d0h1YkNoYXJhY3RlcmlzdGljcyAmPSB+Y3B1X3RvX2xlMTYoCisJCQkJSFVCX0NIQVJfT0NQTSk7CisJCQlkZXNjLT53SHViQ2hhcmFjdGVyaXN0aWNzIHw9ICBjcHVfdG9fbGUxNigKKwkJCQkweDAwMDggfAorCQkJCTB4MDAwMSk7CiAJCX0KIAogCQlkZXZfZGJnKGhjZC0+c2VsZi5jb250cm9sbGVyLCAid0h1YkNoYXJhY3RlcmlzdGljcyBhZnRlciAweCUwNHhcbiIsCkBAIC0yNTcsMTMgKzI1NywxMSBAQAogCQlkZXZfZGJnKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiR2V0UG9ydFN0YXR1cyglZClcbiIsIHdJbmRleCk7CiAKIAkJaWYgKHZhbGlkX3BvcnQod0luZGV4KSkgewotCQkJaWYgKGluZm8tPnBvcnRbd0luZGV4LTFdLm9jX2NoYW5nZWQpIHsKKwkJCWlmIChpbmZvLT5wb3J0W3dJbmRleC0xXS5vY19jaGFuZ2VkKQogCQkJCSpkYXRhIHw9IGNwdV90b19sZTMyKFJIX1BTX09DSUMpOwotCQkJfQogCi0JCQlpZiAoaW5mby0+cG9ydFt3SW5kZXgtMV0ub2Nfc3RhdHVzKSB7CisJCQlpZiAoaW5mby0+cG9ydFt3SW5kZXgtMV0ub2Nfc3RhdHVzKQogCQkJCSpkYXRhIHw9IGNwdV90b19sZTMyKFJIX1BTX1BPQ0kpOwotCQkJfQogCQl9CiAJfQogCkBAIC0zMjEsNyArMzE5LDcgQEAKICovCiAKIHN0YXRpYyB2b2lkCi11c2JfaGNkX3MzYzI0MTBfcmVtb3ZlIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit1c2JfaGNkX3MzYzI0MTBfcmVtb3ZlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAl1c2JfcmVtb3ZlX2hjZChoY2QpOwogCXMzYzI0MTBfc3RvcF9oYyhkZXYpOwpAQCAtMzM5LDcgKzMzNyw3IEBACiAgKiB0aHJvdWdoIHRoZSBob3RwbHVnIGVudHJ5J3MgZHJpdmVyX2RhdGEuCiAgKgogICovCi1zdGF0aWMgaW50IHVzYl9oY2RfczNjMjQxMF9wcm9iZSAoY29uc3Qgc3RydWN0IGhjX2RyaXZlciAqZHJpdmVyLAorc3RhdGljIGludCB1c2JfaGNkX3MzYzI0MTBfcHJvYmUoY29uc3Qgc3RydWN0IGhjX2RyaXZlciAqZHJpdmVyLAogCQkJCSAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBOVUxMOwpAQCAtMzUzLDcgKzM1MSw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJaGNkLT5yc3JjX3N0YXJ0ID0gZGV2LT5yZXNvdXJjZVswXS5zdGFydDsKLQloY2QtPnJzcmNfbGVuICAgPSBkZXYtPnJlc291cmNlWzBdLmVuZCAtIGRldi0+cmVzb3VyY2VbMF0uc3RhcnQgKyAxOworCWhjZC0+cnNyY19sZW4JPSByZXNvdXJjZV9zaXplKCZkZXYtPnJlc291cmNlWzBdKTsKIAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbiwgaGNkX25hbWUpKSB7CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIik7CkBAIC0zNjQsMTQgKzM2MiwxNCBAQAogCWNsayA9IGNsa19nZXQoJmRldi0+ZGV2LCAidXNiLWhvc3QiKTsKIAlpZiAoSVNfRVJSKGNsaykpIHsKIAkJZGV2X2VycigmZGV2LT5kZXYsICJjYW5ub3QgZ2V0IHVzYi1ob3N0IGNsb2NrXG4iKTsKLQkJcmV0dmFsID0gLUVOT0VOVDsKKwkJcmV0dmFsID0gUFRSX0VSUihjbGspOwogCQlnb3RvIGVycl9tZW07CiAJfQogCiAJdXNiX2NsayA9IGNsa19nZXQoJmRldi0+ZGV2LCAidXNiLWJ1cy1ob3N0Iik7CiAJaWYgKElTX0VSUih1c2JfY2xrKSkgewogCQlkZXZfZXJyKCZkZXYtPmRldiwgImNhbm5vdCBnZXQgdXNiLWJ1cy1ob3N0IGNsb2NrXG4iKTsKLQkJcmV0dmFsID0gLUVOT0VOVDsKKwkJcmV0dmFsID0gUFRSX0VSUih1c2JfY2xrKTsKIAkJZ290byBlcnJfY2xrOwogCX0KIApAQCAtNDExLDE3ICs0MDksMTkgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyBpbnQKLW9oY2lfczNjMjQxMF9zdGFydCAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK29oY2lfczNjMjQxMF9zdGFydChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQogewotCXN0cnVjdCBvaGNpX2hjZAkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOworCXN0cnVjdCBvaGNpX2hjZAkqb2hjaSA9IGhjZF90b19vaGNpKGhjZCk7CiAJaW50IHJldDsKIAotCWlmICgocmV0ID0gb2hjaV9pbml0KG9oY2kpKSA8IDApCisJcmV0ID0gb2hjaV9pbml0KG9oY2kpOworCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKChyZXQgPSBvaGNpX3J1biAob2hjaSkpIDwgMCkgewotCQllcnIgKCJjYW4ndCBzdGFydCAlcyIsIGhjZC0+c2VsZi5idXNfbmFtZSk7Ci0JCW9oY2lfc3RvcCAoaGNkKTsKKwlyZXQgPSBvaGNpX3J1bihvaGNpKTsKKwlpZiAocmV0IDwgMCkgeworCQllcnIoImNhbid0IHN0YXJ0ICVzIiwgaGNkLT5zZWxmLmJ1c19uYW1lKTsKKwkJb2hjaV9zdG9wKGhjZCk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC00NzMsMTIgKzQ3MywxMiBAQAogCiAvKiBkZXZpY2UgZHJpdmVyICovCiAKLXN0YXRpYyBpbnQgb2hjaV9oY2RfczNjMjQxMF9kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IG9oY2lfaGNkX3MzYzI0MTBfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJcmV0dXJuIHVzYl9oY2RfczNjMjQxMF9wcm9iZSgmb2hjaV9zM2MyNDEwX2hjX2RyaXZlciwgcGRldik7CiB9CiAKLXN0YXRpYyBpbnQgb2hjaV9oY2RfczNjMjQxMF9kcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBvaGNpX2hjZF9zM2MyNDEwX2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKQEAgLTQ4OCw3ICs0ODgsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvaGNpX2hjZF9zM2MyNDEwX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gb2hjaV9oY2RfczNjMjQxMF9kcnZfcHJvYmUsCi0JLnJlbW92ZQkJPSBvaGNpX2hjZF9zM2MyNDEwX2Rydl9yZW1vdmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChvaGNpX2hjZF9zM2MyNDEwX2Rydl9yZW1vdmUpLAogCS5zaHV0ZG93bgk9IHVzYl9oY2RfcGxhdGZvcm1fc2h1dGRvd24sCiAJLyouc3VzcGVuZAk9IG9oY2lfaGNkX3MzYzI0MTBfZHJ2X3N1c3BlbmQsICovCiAJLyoucmVzdW1lCT0gb2hjaV9oY2RfczNjMjQxMF9kcnZfcmVzdW1lLCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9veHUyMTBocC1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb3h1MjEwaHAtaGNkLmMKaW5kZXggNGE3NzFmNi4uNWZiZTk5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9veHUyMTBocC1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L294dTIxMGhwLWhjZC5jCkBAIC0xODg0LDYgKzE4ODQsNyBAQAogCXN0YXR1cyA9IGhhbmRzaGFrZShveHUsICZveHUtPnJlZ3MtPnN0YXR1cywgU1RTX1BTUywgMCwgOSAqIDEyNSk7CiAJaWYgKHN0YXR1cyAhPSAwKSB7CiAJCW94dV90b19oY2Qob3h1KS0+c3RhdGUgPSBIQ19TVEFURV9IQUxUOworCQl1c2JfaGNfZGllZChveHVfdG9faGNkKG94dSkpOwogCQlyZXR1cm4gc3RhdHVzOwogCX0KIApAQCAtMTkwOSw2ICsxOTEwLDcgQEAKIAlzdGF0dXMgPSBoYW5kc2hha2Uob3h1LCAmb3h1LT5yZWdzLT5zdGF0dXMsIFNUU19QU1MsIFNUU19QU1MsIDkgKiAxMjUpOwogCWlmIChzdGF0dXMgIT0gMCkgewogCQlveHVfdG9faGNkKG94dSktPnN0YXRlID0gSENfU1RBVEVfSEFMVDsKKwkJdXNiX2hjX2RpZWQob3h1X3RvX2hjZChveHUpKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CiAKQEAgLTI0NDksOCArMjQ1MSw5IEBACiAJCWdvdG8gZGVhZDsKIAl9CiAKKwkvKiBTaGFyZWQgSVJRPyAqLwogCXN0YXR1cyAmPSBJTlRSX01BU0s7Ci0JaWYgKCFzdGF0dXMpIHsJCQkvKiBpcnEgc2hhcmluZz8gKi8KKwlpZiAoIXN0YXR1cyB8fCB1bmxpa2VseShoY2QtPnN0YXRlID09IEhDX1NUQVRFX0hBTFQpKSB7CiAJCXNwaW5fdW5sb2NrKCZveHUtPmxvY2spOwogCQlyZXR1cm4gSVJRX05PTkU7CiAJfQpAQCAtMjUxNiw2ICsyNTE5LDcgQEAKIGRlYWQ6CiAJCQllaGNpX3Jlc2V0KG94dSk7CiAJCQl3cml0ZWwoMCwgJm94dS0+cmVncy0+Y29uZmlndXJlZF9mbGFnKTsKKwkJCXVzYl9oY19kaWVkKGhjZCk7CiAJCQkvKiBnZW5lcmljIGxheWVyIGtpbGxzL3VubGlua3MgYWxsIHVyYnMsIHRoZW4KIAkJCSAqIHVzZXMgb3h1X3N0b3AgdG8gY2xlYW4gdXAgdGhlIHJlc3QKIAkJCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYwppbmRleCA5YjE2NmQ3Li5mMTZjNTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWkuaD4KICNpbmNsdWRlICJwY2ktcXVpcmtzLmgiCiAjaW5jbHVkZSAieGhjaS1leHQtY2Fwcy5oIgogCkBAIC01MDMsMTQgKzUwNCw4NCBAQAogCWlvdW5tYXAoYmFzZSk7CiB9CiAKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBlaGNpX2Jpb3NfaGFuZG9mZihzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkJdm9pZCBfX2lvbWVtICpvcF9yZWdfYmFzZSwKKwkJCQkJdTMyIGNhcCwgdTggb2Zmc2V0KQoreworCWludCB0cnlfaGFuZG9mZiA9IDEsIHRyaWVkX2hhbmRvZmYgPSAwOworCisJLyogVGhlIFBlZ2F0cm9uIEx1Y2lkIChFeG9QQykgdGFibGV0IHNwb3JhZGljYWxseSB3YWl0cyBmb3IgOTAKKwkgKiBzZWNvbmRzIHRyeWluZyB0aGUgaGFuZG9mZiBvbiBpdHMgdW51c2VkIGNvbnRyb2xsZXIuICBTa2lwCisJICogaXQuICovCisJaWYgKHBkZXYtPnZlbmRvciA9PSAweDgwODYgJiYgcGRldi0+ZGV2aWNlID09IDB4MjgzYSkgeworCQljb25zdCBjaGFyICpkbWlfYm4gPSBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CT0FSRF9OQU1FKTsKKwkJY29uc3QgY2hhciAqZG1pX2J2ID0gZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQklPU19WRVJTSU9OKTsKKwkJaWYgKGRtaV9ibiAmJiAhc3RyY21wKGRtaV9ibiwgIkVYT1BHMDY0MTEiKSAmJgorCQkgICAgZG1pX2J2ICYmICFzdHJjbXAoZG1pX2J2LCAiTHVjaWQtQ0UtMTMzIikpCisJCQl0cnlfaGFuZG9mZiA9IDA7CisJfQorCisJaWYgKHRyeV9oYW5kb2ZmICYmIChjYXAgJiBFSENJX1VTQkxFR1NVUF9CSU9TKSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJFSENJOiBCSU9TIGhhbmRvZmZcbiIpOworCisjaWYgMAorLyogYWxla3NleV9nb3JlbG92QHBob2VuaXguY29tIHJlcG9ydHMgdGhhdCBzb21lIHN5c3RlbXMgbmVlZCBTTUkgZm9yY2VkIG9uLAorICogYnV0IHRoYXQgc2VlbXMgZHViaW91cyBpbiBnZW5lcmFsICh0aGUgQklPUyBsZWZ0IGl0IG9mZiBpbnRlbnRpb25hbGx5KQorICogYW5kIGlzIGtub3duIHRvIHByZXZlbnQgc29tZSBzeXN0ZW1zIGZyb20gYm9vdGluZy4gIHNvIHdlIHdvbid0IGRvIHRoaXMKKyAqIHVubGVzcyBtYXliZSB3ZSBjYW4gZGV0ZXJtaW5lIHdoZW4gd2UncmUgb24gYSBzeXN0ZW0gdGhhdCBuZWVkcyBTTUkgZm9yY2VkLgorICovCisJCS8qIEJJT1Mgd29ya2Fyb3VuZCAoPyk6IGJlIHN1cmUgdGhlIHByZS1MaW51eCBjb2RlCisJCSAqIHJlY2VpdmVzIHRoZSBTTUkKKwkJICovCisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBvZmZzZXQgKyBFSENJX1VTQkxFR0NUTFNUUywgJnZhbCk7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgb2Zmc2V0ICsgRUhDSV9VU0JMRUdDVExTVFMsCisJCQkJICAgICAgIHZhbCB8IEVIQ0lfVVNCTEVHQ1RMU1RTX1NPT0UpOworI2VuZGlmCisKKwkJLyogc29tZSBzeXN0ZW1zIGdldCB1cHNldCBpZiB0aGlzIHNlbWFwaG9yZSBpcworCQkgKiBzZXQgZm9yIGFueSBvdGhlciByZWFzb24gdGhhbiBmb3JjaW5nIGEgQklPUworCQkgKiBoYW5kb2ZmLi4KKwkJICovCisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBvZmZzZXQgKyAzLCAxKTsKKwl9CisKKwkvKiBpZiBib290IGZpcm13YXJlIG5vdyBvd25zIEVIQ0ksIHNwaW4gdGlsbCBpdCBoYW5kcyBpdCBvdmVyLiAqLworCWlmICh0cnlfaGFuZG9mZikgeworCQlpbnQgbXNlYyA9IDEwMDA7CisJCXdoaWxlICgoY2FwICYgRUhDSV9VU0JMRUdTVVBfQklPUykgJiYgKG1zZWMgPiAwKSkgeworCQkJdHJpZWRfaGFuZG9mZiA9IDE7CisJCQltc2xlZXAoMTApOworCQkJbXNlYyAtPSAxMDsKKwkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBvZmZzZXQsICZjYXApOworCQl9CisJfQorCisJaWYgKGNhcCAmIEVIQ0lfVVNCTEVHU1VQX0JJT1MpIHsKKwkJLyogd2VsbCwgcG9zc2libHkgYnVnZ3kgQklPUy4uLiB0cnkgdG8gc2h1dCBpdCBkb3duLAorCQkgKiBhbmQgaG9wZSBub3RoaW5nIGdvZXMgdG9vIHdyb25nCisJCSAqLworCQlpZiAodHJ5X2hhbmRvZmYpCisJCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiRUhDSTogQklPUyBoYW5kb2ZmIGZhaWxlZCIKKwkJCQkgIiAoQklPUyBidWc/KSAlMDh4XG4iLCBjYXApOworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgb2Zmc2V0ICsgMiwgMCk7CisJfQorCisJLyoganVzdCBpbiBjYXNlLCBhbHdheXMgZGlzYWJsZSBFSENJIFNNSXMgKi8KKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIG9mZnNldCArIEVIQ0lfVVNCTEVHQ1RMU1RTLCAwKTsKKworCS8qIElmIHRoZSBCSU9TIGV2ZXIgb3duZWQgdGhlIGNvbnRyb2xsZXIgdGhlbiB3ZSBjYW4ndCBleHBlY3QKKwkgKiBhbnkgcG93ZXIgc2Vzc2lvbnMgdG8gcmVtYWluIGludGFjdC4KKwkgKi8KKwlpZiAodHJpZWRfaGFuZG9mZikKKwkJd3JpdGVsKDAsIG9wX3JlZ19iYXNlICsgRUhDSV9DT05GSUdGTEFHKTsKK30KKwogc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX3VzYl9kaXNhYmxlX2VoY2koc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0JaW50IHdhaXRfdGltZSwgZGVsdGE7CiAJdm9pZCBfX2lvbWVtICpiYXNlLCAqb3BfcmVnX2Jhc2U7Ci0JdTMyCWhjY19wYXJhbXMsIHZhbDsKKwl1MzIJaGNjX3BhcmFtcywgY2FwLCB2YWw7CiAJdTgJb2Zmc2V0LCBjYXBfbGVuZ3RoOwotCWludAljb3VudCA9IDI1Ni80OwotCWludAl0cmllZF9oYW5kb2ZmID0gMDsKKwlpbnQJd2FpdF90aW1lLCBkZWx0YSwgY291bnQgPSAyNTYvNDsKIAogCWlmICghbW1pb19yZXNvdXJjZV9lbmFibGVkKHBkZXYsIDApKQogCQlyZXR1cm47CkBAIC01MjksNzcgKzYwMCwxNyBAQAogCWhjY19wYXJhbXMgPSByZWFkbChiYXNlICsgRUhDSV9IQ0NfUEFSQU1TKTsKIAlvZmZzZXQgPSAoaGNjX3BhcmFtcyA+PiA4KSAmIDB4ZmY7CiAJd2hpbGUgKG9mZnNldCAmJiAtLWNvdW50KSB7Ci0JCXUzMgkJY2FwOwotCQlpbnQJCW1zZWM7Ci0KIAkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIG9mZnNldCwgJmNhcCk7CisKIAkJc3dpdGNoIChjYXAgJiAweGZmKSB7Ci0JCWNhc2UgMToJCQkvKiBCSU9TL1NNTS8uLi4gaGFuZG9mZiBzdXBwb3J0ICovCi0JCQlpZiAoKGNhcCAmIEVIQ0lfVVNCTEVHU1VQX0JJT1MpKSB7Ci0JCQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiRUhDSTogQklPUyBoYW5kb2ZmXG4iKTsKLQotI2lmIDAKLS8qIGFsZWtzZXlfZ29yZWxvdkBwaG9lbml4LmNvbSByZXBvcnRzIHRoYXQgc29tZSBzeXN0ZW1zIG5lZWQgU01JIGZvcmNlZCBvbiwKLSAqIGJ1dCB0aGF0IHNlZW1zIGR1YmlvdXMgaW4gZ2VuZXJhbCAodGhlIEJJT1MgbGVmdCBpdCBvZmYgaW50ZW50aW9uYWxseSkKLSAqIGFuZCBpcyBrbm93biB0byBwcmV2ZW50IHNvbWUgc3lzdGVtcyBmcm9tIGJvb3RpbmcuICBzbyB3ZSB3b24ndCBkbyB0aGlzCi0gKiB1bmxlc3MgbWF5YmUgd2UgY2FuIGRldGVybWluZSB3aGVuIHdlJ3JlIG9uIGEgc3lzdGVtIHRoYXQgbmVlZHMgU01JIGZvcmNlZC4KLSAqLwotCQkJCS8qIEJJT1Mgd29ya2Fyb3VuZCAoPyk6IGJlIHN1cmUgdGhlCi0JCQkJICogcHJlLUxpbnV4IGNvZGUgcmVjZWl2ZXMgdGhlIFNNSQotCQkJCSAqLwotCQkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LAotCQkJCQkJb2Zmc2V0ICsgRUhDSV9VU0JMRUdDVExTVFMsCi0JCQkJCQkmdmFsKTsKLQkJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsCi0JCQkJCQlvZmZzZXQgKyBFSENJX1VTQkxFR0NUTFNUUywKLQkJCQkJCXZhbCB8IEVIQ0lfVVNCTEVHQ1RMU1RTX1NPT0UpOwotI2VuZGlmCi0KLQkJCQkvKiBzb21lIHN5c3RlbXMgZ2V0IHVwc2V0IGlmIHRoaXMgc2VtYXBob3JlIGlzCi0JCQkJICogc2V0IGZvciBhbnkgb3RoZXIgcmVhc29uIHRoYW4gZm9yY2luZyBhIEJJT1MKLQkJCQkgKiBoYW5kb2ZmLi4KLQkJCQkgKi8KLQkJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgb2Zmc2V0ICsgMywgMSk7Ci0JCQl9Ci0KLQkJCS8qIGlmIGJvb3QgZmlybXdhcmUgbm93IG93bnMgRUhDSSwgc3BpbiB0aWxsCi0JCQkgKiBpdCBoYW5kcyBpdCBvdmVyLgotCQkJICovCi0JCQltc2VjID0gMTAwMDsKLQkJCXdoaWxlICgoY2FwICYgRUhDSV9VU0JMRUdTVVBfQklPUykgJiYgKG1zZWMgPiAwKSkgewotCQkJCXRyaWVkX2hhbmRvZmYgPSAxOwotCQkJCW1zbGVlcCgxMCk7Ci0JCQkJbXNlYyAtPSAxMDsKLQkJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgb2Zmc2V0LCAmY2FwKTsKLQkJCX0KLQotCQkJaWYgKGNhcCAmIEVIQ0lfVVNCTEVHU1VQX0JJT1MpIHsKLQkJCQkvKiB3ZWxsLCBwb3NzaWJseSBidWdneSBCSU9TLi4uIHRyeSB0byBzaHV0Ci0JCQkJICogaXQgZG93biwgYW5kIGhvcGUgbm90aGluZyBnb2VzIHRvbyB3cm9uZwotCQkJCSAqLwotCQkJCWRldl93YXJuKCZwZGV2LT5kZXYsICJFSENJOiBCSU9TIGhhbmRvZmYgZmFpbGVkIgotCQkJCQkJIiAoQklPUyBidWc/KSAlMDh4XG4iLCBjYXApOwotCQkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBvZmZzZXQgKyAyLCAwKTsKLQkJCX0KLQotCQkJLyoganVzdCBpbiBjYXNlLCBhbHdheXMgZGlzYWJsZSBFSENJIFNNSXMgKi8KLQkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwKLQkJCQkJb2Zmc2V0ICsgRUhDSV9VU0JMRUdDVExTVFMsCi0JCQkJCTApOwotCi0JCQkvKiBJZiB0aGUgQklPUyBldmVyIG93bmVkIHRoZSBjb250cm9sbGVyIHRoZW4gd2UKLQkJCSAqIGNhbid0IGV4cGVjdCBhbnkgcG93ZXIgc2Vzc2lvbnMgdG8gcmVtYWluIGludGFjdC4KLQkJCSAqLwotCQkJaWYgKHRyaWVkX2hhbmRvZmYpCi0JCQkJd3JpdGVsKDAsIG9wX3JlZ19iYXNlICsgRUhDSV9DT05GSUdGTEFHKTsKKwkJY2FzZSAxOgorCQkJZWhjaV9iaW9zX2hhbmRvZmYocGRldiwgb3BfcmVnX2Jhc2UsIGNhcCwgb2Zmc2V0KTsKIAkJCWJyZWFrOwotCQljYXNlIDA6CQkJLyogaWxsZWdhbCByZXNlcnZlZCBjYXBhYmlsaXR5ICovCi0JCQljYXAgPSAwOwotCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJY2FzZSAwOiAvKiBJbGxlZ2FsIHJlc2VydmVkIGNhcCwgc2V0IGNhcD0wIHNvIHdlIGV4aXQgKi8KKwkJCWNhcCA9IDA7IC8qIHRoZW4gZmFsbHRocm91Z2guLi4gKi8KIAkJZGVmYXVsdDoKIAkJCWRldl93YXJuKCZwZGV2LT5kZXYsICJFSENJOiB1bnJlY29nbml6ZWQgY2FwYWJpbGl0eSAiCi0JCQkJCSIlMDJ4XG4iLCBjYXAgJiAweGZmKTsKLQkJCWJyZWFrOworCQkJCSAiJTAyeFxuIiwgY2FwICYgMHhmZik7CiAJCX0KIAkJb2Zmc2V0ID0gKGNhcCA+PiA4KSAmIDB4ZmY7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKaW5kZXggMThiNzA5OS4uMWE5OTYyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvdXNiL3NsODExLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2hjZC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CkBAIC03MSwxMiArNzIsNiBAQAogLyogZm9yIG5vdywgdXNlIG9ubHkgb25lIHRyYW5zZmVyIHJlZ2lzdGVyIGJhbmsgKi8KICN1bmRlZglVU0VfQgogCi0vKiB0aGlzIGRvZXNuJ3QgdW5kZXJzdGFuZCB1cmItPmlzb19mcmFtZV9kZXNjW10sIGJ1dCBpZiB5b3UgaGFkIGEgZHJpdmVyCi0gKiB0aGF0IGp1c3QgcXVldWVkIG9uZSBJU08gZnJhbWUgcGVyIFVSQiB0aGVuIGlzbyB0cmFuc2ZlcnMgInNob3VsZCIgd29yawotICogdXNpbmcgdGhlIG5vcm1hbCB1cmIgc3RhdHVzIGZpZWxkcy4KLSAqLwotI2RlZmluZQlESVNBQkxFX0lTTwotCiAvLyAjZGVmaW5lCVFVSVJLMgogI2RlZmluZQlRVUlSSzMKIApAQCAtODA3LDcgKzgwMiw3IEBACiAJaW50CQkJcmV0dmFsOwogCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludAkqaGVwID0gdXJiLT5lcDsKIAotI2lmZGVmCURJU0FCTEVfSVNPCisjaWZuZGVmIENPTkZJR19VU0JfU0w4MTFfSENEX0lTTwogCWlmICh0eXBlID09IFBJUEVfSVNPQ0hST05PVVMpCiAJCXJldHVybiAtRU5PU1BDOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3UxMzItaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3UxMzItaGNkLmMKaW5kZXggYjQ3ODU5My4uNTMzZDEyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC91MTMyLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdTEzMi1oY2QuYwpAQCAtMzIzMCw4ICszMjMwLDcgQEAKIAltdXRleF9pbml0KCZ1MTMyX21vZHVsZV9sb2NrKTsKIAlpZiAodXNiX2Rpc2FibGVkKCkpCiAJCXJldHVybiAtRU5PREVWOwotCXByaW50ayhLRVJOX0lORk8gImRyaXZlciAlcyBidWlsdCBhdCAlcyBvbiAlc1xuIiwgaGNkX25hbWUsIF9fVElNRV9fLAotCQlfX0RBVEVfXyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiZHJpdmVyICVzXG4iLCBoY2RfbmFtZSk7CiAJd29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoInUxMzIiKTsKIAlyZXR2YWwgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnUxMzJfcGxhdGZvcm1fZHJpdmVyKTsKIAlyZXR1cm4gcmV0dmFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWRlYnVnLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktZGVidWcuYwppbmRleCBlZTYwY2QzLi5mYzBiMGRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktZGVidWcuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktZGVidWcuYwpAQCAtMzcsNyArMzcsOCBAQAogCX0KIH0KIAotc3RhdGljIGludCB1aGNpX3Nob3dfdGQoc3RydWN0IHVoY2lfdGQgKnRkLCBjaGFyICpidWYsIGludCBsZW4sIGludCBzcGFjZSkKK3N0YXRpYyBpbnQgdWhjaV9zaG93X3RkKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVoY2lfdGQgKnRkLCBjaGFyICpidWYsCisJCQlpbnQgbGVuLCBpbnQgc3BhY2UpCiB7CiAJY2hhciAqb3V0ID0gYnVmOwogCWNoYXIgKnNwaWQ7CkBAIC00Nyw4ICs0OCw5IEBACiAJaWYgKGxlbiA8IDE2MCkKIAkJcmV0dXJuIDA7CiAKLQlzdGF0dXMgPSB0ZF9zdGF0dXModGQpOwotCW91dCArPSBzcHJpbnRmKG91dCwgIiUqc1slcF0gbGluayAoJTA4eCkgIiwgc3BhY2UsICIiLCB0ZCwgbGUzMl90b19jcHUodGQtPmxpbmspKTsKKwlzdGF0dXMgPSB0ZF9zdGF0dXModWhjaSwgdGQpOworCW91dCArPSBzcHJpbnRmKG91dCwgIiUqc1slcF0gbGluayAoJTA4eCkgIiwgc3BhY2UsICIiLCB0ZCwKKwkJaGMzMl90b19jcHUodWhjaSwgdGQtPmxpbmspKTsKIAlvdXQgKz0gc3ByaW50ZihvdXQsICJlJWQgJXMlcyVzJXMlcyVzJXMlcyVzJXNMZW5ndGg9JXggIiwKIAkJKChzdGF0dXMgPj4gMjcpICYgMyksCiAJCShzdGF0dXMgJiBURF9DVFJMX1NQRCkgPyAgICAgICJTUEQgIiA6ICIiLApAQCAtNjMsNyArNjUsNyBAQAogCQkoc3RhdHVzICYgVERfQ1RSTF9CSVRTVFVGRikgPyAiQml0U3R1ZmYgIiA6ICIiLAogCQlzdGF0dXMgJiAweDdmZik7CiAKLQl0b2tlbiA9IHRkX3Rva2VuKHRkKTsKKwl0b2tlbiA9IHRkX3Rva2VuKHVoY2ksIHRkKTsKIAlzd2l0Y2ggKHVoY2lfcGFja2V0aWQodG9rZW4pKSB7CiAJCWNhc2UgVVNCX1BJRF9TRVRVUDoKIAkJCXNwaWQgPSAiU0VUVVAiOwpAQCAtODYsMTIgKzg4LDEzIEBACiAJCSh0b2tlbiA+PiA4KSAmIDEyNywKIAkJKHRva2VuICYgMHhmZiksCiAJCXNwaWQpOwotCW91dCArPSBzcHJpbnRmKG91dCwgIihidWY9JTA4eClcbiIsIGxlMzJfdG9fY3B1KHRkLT5idWZmZXIpKTsKKwlvdXQgKz0gc3ByaW50ZihvdXQsICIoYnVmPSUwOHgpXG4iLCBoYzMyX3RvX2NwdSh1aGNpLCB0ZC0+YnVmZmVyKSk7CiAKIAlyZXR1cm4gb3V0IC0gYnVmOwogfQogCi1zdGF0aWMgaW50IHVoY2lfc2hvd191cmJwKHN0cnVjdCB1cmJfcHJpdiAqdXJicCwgY2hhciAqYnVmLCBpbnQgbGVuLCBpbnQgc3BhY2UpCitzdGF0aWMgaW50IHVoY2lfc2hvd191cmJwKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYl9wcml2ICp1cmJwLAorCQkJY2hhciAqYnVmLCBpbnQgbGVuLCBpbnQgc3BhY2UpCiB7CiAJY2hhciAqb3V0ID0gYnVmOwogCXN0cnVjdCB1aGNpX3RkICp0ZDsKQEAgLTEzMCw5ICsxMzMsMTAgQEAKIAkJaWYgKHVyYnAtPnFoLT50eXBlICE9IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MgJiYKIAkJCQkoKytpIDw9IDEwIHx8IGRlYnVnID4gMikpIHsKIAkJCW91dCArPSBzcHJpbnRmKG91dCwgIiUqcyVkOiAiLCBzcGFjZSArIDIsICIiLCBpKTsKLQkJCW91dCArPSB1aGNpX3Nob3dfdGQodGQsIG91dCwgbGVuIC0gKG91dCAtIGJ1ZiksIDApOworCQkJb3V0ICs9IHVoY2lfc2hvd190ZCh1aGNpLCB0ZCwgb3V0LAorCQkJCQlsZW4gLSAob3V0IC0gYnVmKSwgMCk7CiAJCX0gZWxzZSB7Ci0JCQlpZiAodGRfc3RhdHVzKHRkKSAmIFREX0NUUkxfQUNUSVZFKQorCQkJaWYgKHRkX3N0YXR1cyh1aGNpLCB0ZCkgJiBURF9DVFJMX0FDVElWRSkKIAkJCQkrK25hY3RpdmU7CiAJCQllbHNlCiAJCQkJKytuaW5hY3RpdmU7CkBAIC0xNTEsNyArMTU1LDcgQEAKIHsKIAljaGFyICpvdXQgPSBidWY7CiAJaW50IGksIG51cmJzOwotCV9fbGUzMiBlbGVtZW50ID0gcWhfZWxlbWVudChxaCk7CisJX19oYzMyIGVsZW1lbnQgPSBxaF9lbGVtZW50KHFoKTsKIAljaGFyICpxdHlwZTsKIAogCS8qIFRyeSB0byBtYWtlIHN1cmUgdGhlcmUncyBlbm91Z2ggbWVtb3J5ICovCkBAIC0xNjgsNyArMTcyLDggQEAKIAogCW91dCArPSBzcHJpbnRmKG91dCwgIiUqc1slcF0gJXMgUUggbGluayAoJTA4eCkgZWxlbWVudCAoJTA4eClcbiIsCiAJCQlzcGFjZSwgIiIsIHFoLCBxdHlwZSwKLQkJCWxlMzJfdG9fY3B1KHFoLT5saW5rKSwgbGUzMl90b19jcHUoZWxlbWVudCkpOworCQkJaGMzMl90b19jcHUodWhjaSwgcWgtPmxpbmspLAorCQkJaGMzMl90b19jcHUodWhjaSwgZWxlbWVudCkpOwogCWlmIChxaC0+dHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DKQogCQlvdXQgKz0gc3ByaW50ZihvdXQsICIlKnMgICAgcGVyaW9kICVkIHBoYXNlICVkIGxvYWQgJWQgdXMsICIKIAkJCQkiZnJhbWUgJXggZGVzYyBbJXBdXG4iLApAQCAtMTc4LDIyICsxODMsMjIgQEAKIAkJb3V0ICs9IHNwcmludGYob3V0LCAiJSpzICAgIHBlcmlvZCAlZCBwaGFzZSAlZCBsb2FkICVkIHVzXG4iLAogCQkJCXNwYWNlLCAiIiwgcWgtPnBlcmlvZCwgcWgtPnBoYXNlLCBxaC0+bG9hZCk7CiAKLQlpZiAoZWxlbWVudCAmIFVIQ0lfUFRSX1FIKQorCWlmIChlbGVtZW50ICYgVUhDSV9QVFJfUUgodWhjaSkpCiAJCW91dCArPSBzcHJpbnRmKG91dCwgIiUqcyAgRWxlbWVudCBwb2ludHMgdG8gUUggKGJ1Zz8pXG4iLCBzcGFjZSwgIiIpOwogCi0JaWYgKGVsZW1lbnQgJiBVSENJX1BUUl9ERVBUSCkKKwlpZiAoZWxlbWVudCAmIFVIQ0lfUFRSX0RFUFRIKHVoY2kpKQogCQlvdXQgKz0gc3ByaW50ZihvdXQsICIlKnMgIERlcHRoIHRyYXZlcnNlXG4iLCBzcGFjZSwgIiIpOwogCi0JaWYgKGVsZW1lbnQgJiBjcHVfdG9fbGUzMig4KSkKKwlpZiAoZWxlbWVudCAmIGNwdV90b19oYzMyKHVoY2ksIDgpKQogCQlvdXQgKz0gc3ByaW50ZihvdXQsICIlKnMgIEJpdCAzIHNldCAoYnVnPylcbiIsIHNwYWNlLCAiIik7CiAKLQlpZiAoIShlbGVtZW50ICYgfihVSENJX1BUUl9RSCB8IFVIQ0lfUFRSX0RFUFRIKSkpCisJaWYgKCEoZWxlbWVudCAmIH4oVUhDSV9QVFJfUUgodWhjaSkgfCBVSENJX1BUUl9ERVBUSCh1aGNpKSkpKQogCQlvdXQgKz0gc3ByaW50ZihvdXQsICIlKnMgIEVsZW1lbnQgaXMgTlVMTCAoYnVnPylcbiIsIHNwYWNlLCAiIik7CiAKIAlpZiAobGlzdF9lbXB0eSgmcWgtPnF1ZXVlKSkgewogCQlvdXQgKz0gc3ByaW50ZihvdXQsICIlKnMgIHF1ZXVlIGlzIGVtcHR5XG4iLCBzcGFjZSwgIiIpOwogCQlpZiAocWggPT0gdWhjaS0+c2tlbF9hc3luY19xaCkKLQkJCW91dCArPSB1aGNpX3Nob3dfdGQodWhjaS0+dGVybV90ZCwgb3V0LAorCQkJb3V0ICs9IHVoY2lfc2hvd190ZCh1aGNpLCB1aGNpLT50ZXJtX3RkLCBvdXQsCiAJCQkJCWxlbiAtIChvdXQgLSBidWYpLCAwKTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAgPSBsaXN0X2VudHJ5KHFoLT5xdWV1ZS5uZXh0LApAQCAtMjAxLDEzICsyMDYsMTMgQEAKIAkJc3RydWN0IHVoY2lfdGQgKnRkID0gbGlzdF9lbnRyeSh1cmJwLT50ZF9saXN0Lm5leHQsCiAJCQkJc3RydWN0IHVoY2lfdGQsIGxpc3QpOwogCi0JCWlmIChlbGVtZW50ICE9IExJTktfVE9fVEQodGQpKQorCQlpZiAoZWxlbWVudCAhPSBMSU5LX1RPX1REKHVoY2ksIHRkKSkKIAkJCW91dCArPSBzcHJpbnRmKG91dCwgIiUqcyBFbGVtZW50ICE9IEZpcnN0IFREXG4iLAogCQkJCQlzcGFjZSwgIiIpOwogCQlpID0gbnVyYnMgPSAwOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHVyYnAsICZxaC0+cXVldWUsIG5vZGUpIHsKIAkJCWlmICgrK2kgPD0gMTApCi0JCQkJb3V0ICs9IHVoY2lfc2hvd191cmJwKHVyYnAsIG91dCwKKwkJCQlvdXQgKz0gdWhjaV9zaG93X3VyYnAodWhjaSwgdXJicCwgb3V0LAogCQkJCQkJbGVuIC0gKG91dCAtIGJ1ZiksIHNwYWNlICsgMik7CiAJCQllbHNlCiAJCQkJKytudXJiczsKQEAgLTIxOSw3ICsyMjQsOCBAQAogCiAJaWYgKHFoLT5kdW1teV90ZCkgewogCQlvdXQgKz0gc3ByaW50ZihvdXQsICIlKnMgIER1bW15IFREXG4iLCBzcGFjZSwgIiIpOwotCQlvdXQgKz0gdWhjaV9zaG93X3RkKHFoLT5kdW1teV90ZCwgb3V0LCBsZW4gLSAob3V0IC0gYnVmKSwgMCk7CisJCW91dCArPSB1aGNpX3Nob3dfdGQodWhjaSwgcWgtPmR1bW15X3RkLCBvdXQsCisJCQkJbGVuIC0gKG91dCAtIGJ1ZiksIDApOwogCX0KIAogCXJldHVybiBvdXQgLSBidWY7CkBAIC0yODUsNyArMjkxLDYgQEAKIHN0YXRpYyBpbnQgdWhjaV9zaG93X3N0YXR1cyhzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIGNoYXIgKmJ1ZiwgaW50IGxlbikKIHsKIAljaGFyICpvdXQgPSBidWY7Ci0JdW5zaWduZWQgbG9uZyBpb19hZGRyID0gdWhjaS0+aW9fYWRkcjsKIAl1bnNpZ25lZCBzaG9ydCB1c2JjbWQsIHVzYnN0YXQsIHVzYmludCwgdXNiZnJudW07CiAJdW5zaWduZWQgaW50IGZsYmFzZWFkZDsKIAl1bnNpZ25lZCBjaGFyIHNvZjsKQEAgLTI5NSwxNCArMzAwLDE0IEBACiAJaWYgKGxlbiA8IDgwICogOSkKIAkJcmV0dXJuIDA7CiAKLQl1c2JjbWQgICAgPSBpbncoaW9fYWRkciArIDApOwotCXVzYnN0YXQgICA9IGludyhpb19hZGRyICsgMik7Ci0JdXNiaW50ICAgID0gaW53KGlvX2FkZHIgKyA0KTsKLQl1c2Jmcm51bSAgPSBpbncoaW9fYWRkciArIDYpOwotCWZsYmFzZWFkZCA9IGlubChpb19hZGRyICsgOCk7Ci0Jc29mICAgICAgID0gaW5iKGlvX2FkZHIgKyAxMik7Ci0JcG9ydHNjMSAgID0gaW53KGlvX2FkZHIgKyAxNik7Ci0JcG9ydHNjMiAgID0gaW53KGlvX2FkZHIgKyAxOCk7CisJdXNiY21kICAgID0gdWhjaV9yZWFkdyh1aGNpLCAwKTsKKwl1c2JzdGF0ICAgPSB1aGNpX3JlYWR3KHVoY2ksIDIpOworCXVzYmludCAgICA9IHVoY2lfcmVhZHcodWhjaSwgNCk7CisJdXNiZnJudW0gID0gdWhjaV9yZWFkdyh1aGNpLCA2KTsKKwlmbGJhc2VhZGQgPSB1aGNpX3JlYWRsKHVoY2ksIDgpOworCXNvZiAgICAgICA9IHVoY2lfcmVhZGIodWhjaSwgMTIpOworCXBvcnRzYzEgICA9IHVoY2lfcmVhZHcodWhjaSwgMTYpOworCXBvcnRzYzIgICA9IHVoY2lfcmVhZHcodWhjaSwgMTgpOwogCiAJb3V0ICs9IHNwcmludGYob3V0LCAiICB1c2JjbWQgICAgPSAgICAgJTA0eCAgICVzJXMlcyVzJXMlcyVzJXNcbiIsCiAJCXVzYmNtZCwKQEAgLTM0Nyw4ICszNTIsOCBAQAogCXN0cnVjdCB1aGNpX3RkICp0ZDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICp0bXAsICpoZWFkOwogCWludCBuZnJhbWVzLCBuZXJyczsKLQlfX2xlMzIgbGluazsKLQlfX2xlMzIgZnNicl9saW5rOworCV9faGMzMiBsaW5rOworCV9faGMzMiBmc2JyX2xpbms7CiAKIAlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHFoX25hbWVzW10gPSB7CiAJCSJ1bmxpbmsiLCAiaXNvIiwgImludDEyOCIsICJpbnQ2NCIsICJpbnQzMiIsICJpbnQxNiIsCkBAIC0zNzYsNyArMzgxLDcgQEAKIAluZnJhbWVzID0gMTA7CiAJbmVycnMgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBVSENJX05VTUZSQU1FUzsgKytpKSB7Ci0JCV9fbGUzMiBxaF9kbWE7CisJCV9faGMzMiBxaF9kbWE7CiAKIAkJaiA9IDA7CiAJCXRkID0gdWhjaS0+ZnJhbWVfY3B1W2ldOwpAQCAtMzg2LDcgKzM5MSw3IEBACiAKIAkJaWYgKG5mcmFtZXMgPiAwKSB7CiAJCQlvdXQgKz0gc3ByaW50ZihvdXQsICItIEZyYW1lICVkIC0+ICglMDh4KVxuIiwKLQkJCQkJaSwgbGUzMl90b19jcHUobGluaykpOworCQkJCQlpLCBoYzMyX3RvX2NwdSh1aGNpLCBsaW5rKSk7CiAJCQlqID0gMTsKIAkJfQogCkBAIC0zOTUsNyArNDAwLDcgQEAKIAkJZG8gewogCQkJdGQgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHVoY2lfdGQsIGZsX2xpc3QpOwogCQkJdG1wID0gdG1wLT5uZXh0OwotCQkJaWYgKGxpbmsgIT0gTElOS19UT19URCh0ZCkpIHsKKwkJCWlmIChsaW5rICE9IExJTktfVE9fVEQodWhjaSwgdGQpKSB7CiAJCQkJaWYgKG5mcmFtZXMgPiAwKQogCQkJCQlvdXQgKz0gc3ByaW50ZihvdXQsICIgICAgbGluayBkb2VzICIKIAkJCQkJCSJub3QgbWF0Y2ggbGlzdCBlbnRyeSFcbiIpOwpAQCAtNDAzLDcgKzQwOCw3IEBACiAJCQkJCSsrbmVycnM7CiAJCQl9CiAJCQlpZiAobmZyYW1lcyA+IDApCi0JCQkJb3V0ICs9IHVoY2lfc2hvd190ZCh0ZCwgb3V0LAorCQkJCW91dCArPSB1aGNpX3Nob3dfdGQodWhjaSwgdGQsIG91dCwKIAkJCQkJCWxlbiAtIChvdXQgLSBidWYpLCA0KTsKIAkJCWxpbmsgPSB0ZC0+bGluazsKIAkJfSB3aGlsZSAodG1wICE9IGhlYWQpOwpAQCAtNDE1LDExICs0MjAsMTIgQEAKIAkJCQlpZiAoIWopIHsKIAkJCQkJb3V0ICs9IHNwcmludGYob3V0LAogCQkJCQkJIi0gRnJhbWUgJWQgLT4gKCUwOHgpXG4iLAotCQkJCQkJaSwgbGUzMl90b19jcHUobGluaykpOworCQkJCQkJaSwgaGMzMl90b19jcHUodWhjaSwgbGluaykpOwogCQkJCQlqID0gMTsKIAkJCQl9CiAJCQkJb3V0ICs9IHNwcmludGYob3V0LCAiICAgbGluayBkb2VzIG5vdCBtYXRjaCAiCi0JCQkJCSJRSCAoJTA4eCkhXG4iLCBsZTMyX3RvX2NwdShxaF9kbWEpKTsKKwkJCQkJIlFIICglMDh4KSFcbiIsCisJCQkJCWhjMzJfdG9fY3B1KHVoY2ksIHFoX2RtYSkpOwogCQkJfSBlbHNlCiAJCQkJKytuZXJyczsKIAkJfQpAQCAtNDQwLDExICs0NDYsMTEgQEAKIAogCQkvKiBMYXN0IFFIIGlzIHRoZSBUZXJtaW5hdGluZyBRSCwgaXQncyBkaWZmZXJlbnQgKi8KIAkJaWYgKGkgPT0gU0tFTF9URVJNKSB7Ci0JCQlpZiAocWhfZWxlbWVudChxaCkgIT0gTElOS19UT19URCh1aGNpLT50ZXJtX3RkKSkKKwkJCWlmIChxaF9lbGVtZW50KHFoKSAhPSBMSU5LX1RPX1REKHVoY2ksIHVoY2ktPnRlcm1fdGQpKQogCQkJCW91dCArPSBzcHJpbnRmKG91dCwgIiAgICBza2VsX3Rlcm1fcWggZWxlbWVudCBpcyBub3Qgc2V0IHRvIHRlcm1fdGQhXG4iKTsKIAkJCWxpbmsgPSBmc2JyX2xpbms7CiAJCQlpZiAoIWxpbmspCi0JCQkJbGluayA9IExJTktfVE9fUUgodWhjaS0+c2tlbF90ZXJtX3FoKTsKKwkJCQlsaW5rID0gTElOS19UT19RSCh1aGNpLCB1aGNpLT5za2VsX3Rlcm1fcWgpOwogCQkJZ290byBjaGVja19xaF9saW5rOwogCQl9CiAKQEAgLTQ1OCwyMCArNDY0LDIwIEBACiAJCQkJb3V0ICs9IHVoY2lfc2hvd19xaCh1aGNpLCBxaCwgb3V0LAogCQkJCQkJbGVuIC0gKG91dCAtIGJ1ZiksIDQpOwogCQkJaWYgKCFmc2JyX2xpbmsgJiYgcWgtPnNrZWwgPj0gU0tFTF9GU0JSKQotCQkJCWZzYnJfbGluayA9IExJTktfVE9fUUgocWgpOworCQkJCWZzYnJfbGluayA9IExJTktfVE9fUUgodWhjaSwgcWgpOwogCQl9CiAJCWlmICgoY250IC09IDEwKSA+IDApCiAJCQlvdXQgKz0gc3ByaW50ZihvdXQsICIgICAgU2tpcHBlZCAlZCBRSHNcbiIsIGNudCk7CiAKLQkJbGluayA9IFVIQ0lfUFRSX1RFUk07CisJCWxpbmsgPSBVSENJX1BUUl9URVJNKHVoY2kpOwogCQlpZiAoaSA8PSBTS0VMX0lTTykKIAkJCTsKIAkJZWxzZSBpZiAoaSA8IFNLRUxfQVNZTkMpCi0JCQlsaW5rID0gTElOS19UT19RSCh1aGNpLT5za2VsX2FzeW5jX3FoKTsKKwkJCWxpbmsgPSBMSU5LX1RPX1FIKHVoY2ksIHVoY2ktPnNrZWxfYXN5bmNfcWgpOwogCQllbHNlIGlmICghdWhjaS0+ZnNicl9pc19vbikKIAkJCTsKIAkJZWxzZQotCQkJbGluayA9IExJTktfVE9fUUgodWhjaS0+c2tlbF90ZXJtX3FoKTsKKwkJCWxpbmsgPSBMSU5LX1RPX1FIKHVoY2ksIHVoY2ktPnNrZWxfdGVybV9xaCk7CiBjaGVja19xaF9saW5rOgogCQlpZiAocWgtPmxpbmsgIT0gbGluaykKIAkJCW91dCArPSBzcHJpbnRmKG91dCwgIiAgICBsYXN0IFFIIG5vdCBsaW5rZWQgdG8gbmV4dCBza2VsZXRvbiFcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWdybGliLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktZ3JsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDFjMWUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWdybGliLmMKQEAgLTAsMCArMSwyMDggQEAKKy8qCisgKiBVSENJIEhDRCAoSG9zdCBDb250cm9sbGVyIERyaXZlcikgZm9yIEdSTElCIEdSVVNCSEMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSmFuIEFuZGVyc3NvbiA8amFuQGdhaXNsZXIuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiBVSENJIFBDSSBIQ0Q6CisgKiAoQykgQ29weXJpZ2h0IDE5OTkgTGludXMgVG9ydmFsZHMKKyAqIChDKSBDb3B5cmlnaHQgMTk5OS0yMDAyIEpvaGFubmVzIEVyZGZlbHQsIGpvaGFubmVzQGVyZGZlbHQuY29tCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgUmFuZHkgRHVubGFwCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgR2VvcmcgQWNoZXIsIGFjaGVyQGluLnR1bS5kZQorICogKEMpIENvcHlyaWdodCAxOTk5IERldGkgRmxpZWdsLCBkZXRpQGZsaWVnbC5kZQorICogKEMpIENvcHlyaWdodCAxOTk5IFRob21hcyBTYWlsZXIsIHNhaWxlckBpZmUuZWUuZXRoei5jaAorICogKEMpIENvcHlyaWdodCAxOTk5IFJvbWFuIFdlaXNzZ2FlcmJlciwgd2Vpc3NnQHZpZW5uYS5hdAorICogKEMpIENvcHlyaWdodCAyMDAwIFlnZ2RyYXNpbCBDb21wdXRpbmcsIEluYy4gKHBvcnQgb2YgbmV3IFBDSSBpbnRlcmZhY2UKKyAqICAgICAgICAgICAgICAgc3VwcG9ydCBmcm9tIHVzYi1vaGNpLmMgYnkgQWRhbSBSaWNodGVyLCBhZGFtQHlnZ2RyYXNpbC5jb20pLgorICogKEMpIENvcHlyaWdodCAxOTk5IEdyZWdvcnkgUC4gU21pdGggKGZyb20gdXNiLW9oY2kuYykKKyAqIChDKSBDb3B5cmlnaHQgMjAwNC0yMDA3IEFsYW4gU3Rlcm4sIHN0ZXJuQHJvd2xhbmQuaGFydmFyZC5lZHUKKyAqLworCisjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisKK3N0YXRpYyBpbnQgdWhjaV9ncmxpYl9pbml0KHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IHVoY2lfaGNkICp1aGNpID0gaGNkX3RvX3VoY2koaGNkKTsKKworCS8qCisJICogUHJvYmUgdG8gZGV0ZXJtaW5lIHRoZSBlbmRpYW5uZXNzIG9mIHRoZSBjb250cm9sbGVyLgorCSAqIFdlIGtub3cgdGhhdCBiaXQgNyBvZiB0aGUgUE9SVFNDMSByZWdpc3RlciBpcyBhbHdheXMgc2V0CisJICogYW5kIGJpdCAxNSBpcyBhbHdheXMgY2xlYXIuICBJZiB1aGNpX3JlYWR3KCkgeWllbGRzIGEgdmFsdWUKKwkgKiB3aXRoIGJpdCA3ICgweDgwKSB0dXJuZWQgb24gdGhlbiB0aGUgY3VycmVudCBsaXR0bGUtZW5kaWFuCisJICogc2V0dGluZyBpcyBjb3JyZWN0LiAgT3RoZXJ3aXNlIHdlIGFzc3VtZSB0aGUgdmFsdWUgd2FzCisJICogYnl0ZS1zd2FwcGVkOyBoZW5jZSB0aGUgcmVnaXN0ZXIgaW50ZXJmYWNlIGFuZCBwcmVzdW1hYmx5CisJICogYWxzbyB0aGUgZGVzY3JpcHRvcnMgYXJlIGJpZy1lbmRpYW4uCisJICovCisJaWYgKCEodWhjaV9yZWFkdyh1aGNpLCBVU0JQT1JUU0MxKSAmIDB4ODApKSB7CisJCXVoY2ktPmJpZ19lbmRpYW5fbW1pbyA9IDE7CisJCXVoY2ktPmJpZ19lbmRpYW5fZGVzYyA9IDE7CisJfQorCisJdWhjaS0+cmhfbnVtcG9ydHMgPSB1aGNpX2NvdW50X3BvcnRzKGhjZCk7CisKKwkvKiBTZXQgdXAgcG9pbnRlcnMgdG8gdG8gZ2VuZXJpYyBmdW5jdGlvbnMgKi8KKwl1aGNpLT5yZXNldF9oYyA9IHVoY2lfZ2VuZXJpY19yZXNldF9oYzsKKwl1aGNpLT5jaGVja19hbmRfcmVzZXRfaGMgPSB1aGNpX2dlbmVyaWNfY2hlY2tfYW5kX3Jlc2V0X2hjOworCS8qIE5vIHNwZWNpYWwgYWN0aW9ucyBuZWVkIHRvIGJlIHRha2VuIGZvciB0aGUgZnVuY3Rpb25zIGJlbG93ICovCisJdWhjaS0+Y29uZmlndXJlX2hjID0gTlVMTDsKKwl1aGNpLT5yZXN1bWVfZGV0ZWN0X2ludGVycnVwdHNfYXJlX2Jyb2tlbiA9IE5VTEw7CisJdWhjaS0+Z2xvYmFsX3N1c3BlbmRfbW9kZV9pc19icm9rZW4gPSBOVUxMOworCisJLyogUmVzZXQgaWYgdGhlIGNvbnRyb2xsZXIgaXNuJ3QgYWxyZWFkeSBzYWZlbHkgcXVpZXNjZW50LiAqLworCWNoZWNrX2FuZF9yZXNldF9oYyh1aGNpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgdWhjaV9ncmxpYl9oY19kcml2ZXIgPSB7CisJLmRlc2NyaXB0aW9uID0JCWhjZF9uYW1lLAorCS5wcm9kdWN0X2Rlc2MgPQkJIkdSTElCIEdSVVNCSEMgVUhDSSBIb3N0IENvbnRyb2xsZXIiLAorCS5oY2RfcHJpdl9zaXplID0Jc2l6ZW9mKHN0cnVjdCB1aGNpX2hjZCksCisKKwkvKiBHZW5lcmljIGhhcmR3YXJlIGxpbmthZ2UgKi8KKwkuaXJxID0JCQl1aGNpX2lycSwKKwkuZmxhZ3MgPQkJSENEX01FTU9SWSB8IEhDRF9VU0IxMSwKKworCS8qIEJhc2ljIGxpZmVjeWNsZSBvcGVyYXRpb25zICovCisJLnJlc2V0ID0JCXVoY2lfZ3JsaWJfaW5pdCwKKwkuc3RhcnQgPQkJdWhjaV9zdGFydCwKKyNpZmRlZiBDT05GSUdfUE0KKwkucGNpX3N1c3BlbmQgPQkJTlVMTCwKKwkucGNpX3Jlc3VtZSA9CQlOVUxMLAorCS5idXNfc3VzcGVuZCA9CQl1aGNpX3JoX3N1c3BlbmQsCisJLmJ1c19yZXN1bWUgPQkJdWhjaV9yaF9yZXN1bWUsCisjZW5kaWYKKwkuc3RvcCA9CQkJdWhjaV9zdG9wLAorCisJLnVyYl9lbnF1ZXVlID0JCXVoY2lfdXJiX2VucXVldWUsCisJLnVyYl9kZXF1ZXVlID0JCXVoY2lfdXJiX2RlcXVldWUsCisKKwkuZW5kcG9pbnRfZGlzYWJsZSA9CXVoY2lfaGNkX2VuZHBvaW50X2Rpc2FibGUsCisJLmdldF9mcmFtZV9udW1iZXIgPQl1aGNpX2hjZF9nZXRfZnJhbWVfbnVtYmVyLAorCisJLmh1Yl9zdGF0dXNfZGF0YSA9CXVoY2lfaHViX3N0YXR1c19kYXRhLAorCS5odWJfY29udHJvbCA9CQl1aGNpX2h1Yl9jb250cm9sLAorfTsKKworCitzdGF0aWMgaW50IF9fZGV2aW5pdCB1aGNpX2hjZF9ncmxpYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuID0gb3AtPmRldi5vZl9ub2RlOworCXN0cnVjdCB1c2JfaGNkICpoY2Q7CisJc3RydWN0IHVoY2lfaGNkCSp1aGNpID0gTlVMTDsKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzOworCWludCBpcnE7CisJaW50IHJ2OworCisJaWYgKHVzYl9kaXNhYmxlZCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRldl9kYmcoJm9wLT5kZXYsICJpbml0aWFsaXppbmcgR1JVU0JIQyBVSENJIFVTQiBDb250cm9sbGVyXG4iKTsKKworCXJ2ID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShkbiwgMCwgJnJlcyk7CisJaWYgKHJ2KQorCQlyZXR1cm4gcnY7CisKKwkvKiB1c2JfY3JlYXRlX2hjZCByZXF1aXJlcyBkbWFfbWFzayAhPSBOVUxMICovCisJb3AtPmRldi5kbWFfbWFzayA9ICZvcC0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrOworCWhjZCA9IHVzYl9jcmVhdGVfaGNkKCZ1aGNpX2dybGliX2hjX2RyaXZlciwgJm9wLT5kZXYsCisJCQkiR1JVU0JIQyBVSENJIFVTQiIpOworCWlmICghaGNkKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWhjZC0+cnNyY19zdGFydCA9IHJlcy5zdGFydDsKKwloY2QtPnJzcmNfbGVuID0gcmVzLmVuZCAtIHJlcy5zdGFydCArIDE7CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4sIGhjZF9uYW1lKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkXG4iLCBfX0ZJTEVfXyk7CisJCXJ2ID0gLUVCVVNZOworCQlnb3RvIGVycl9ybXI7CisJfQorCisJaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoZG4sIDApOworCWlmIChpcnEgPT0gTk9fSVJRKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlycV9vZl9wYXJzZV9hbmRfbWFwIGZhaWxlZFxuIiwgX19GSUxFX18pOworCQlydiA9IC1FQlVTWTsKKwkJZ290byBlcnJfaXJxOworCX0KKworCWhjZC0+cmVncyA9IGlvcmVtYXAoaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwlpZiAoIWhjZC0+cmVncykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpb3JlbWFwIGZhaWxlZFxuIiwgX19GSUxFX18pOworCQlydiA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2lvcmVtYXA7CisJfQorCisJdWhjaSA9IGhjZF90b191aGNpKGhjZCk7CisKKwl1aGNpLT5yZWdzID0gaGNkLT5yZWdzOworCisJcnYgPSB1c2JfYWRkX2hjZChoY2QsIGlycSwgMCk7CisJaWYgKHJ2KQorCQlnb3RvIGVycl91aGNpOworCisJcmV0dXJuIDA7CisKK2Vycl91aGNpOgorCWlvdW5tYXAoaGNkLT5yZWdzKTsKK2Vycl9pb3JlbWFwOgorCWlycV9kaXNwb3NlX21hcHBpbmcoaXJxKTsKK2Vycl9pcnE6CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CitlcnJfcm1yOgorCXVzYl9wdXRfaGNkKGhjZCk7CisKKwlyZXR1cm4gcnY7Cit9CisKK3N0YXRpYyBpbnQgdWhjaV9oY2RfZ3JsaWJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wKQoreworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoJm9wLT5kZXYpOworCisJZGV2X3NldF9kcnZkYXRhKCZvcC0+ZGV2LCBOVUxMKTsKKworCWRldl9kYmcoJm9wLT5kZXYsICJzdG9wcGluZyBHUkxJQiBHUlVTQkhDIFVIQ0kgVVNCIENvbnRyb2xsZXJcbiIpOworCisJdXNiX3JlbW92ZV9oY2QoaGNkKTsKKworCWlvdW5tYXAoaGNkLT5yZWdzKTsKKwlpcnFfZGlzcG9zZV9tYXBwaW5nKGhjZC0+aXJxKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKworCXVzYl9wdXRfaGNkKGhjZCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogTWFrZSBzdXJlIHRoZSBjb250cm9sbGVyIGlzIHF1aWVzY2VudCBhbmQgdGhhdCB3ZSdyZSBub3QgdXNpbmcgaXQKKyAqIGFueSBtb3JlLiAgVGhpcyBpcyBtYWlubHkgZm9yIHRoZSBiZW5lZml0IG9mIHByb2dyYW1zIHdoaWNoLCBsaWtlIGtleGVjLAorICogZXhwZWN0IHRoZSBoYXJkd2FyZSB0byBiZSBpZGxlOiBub3QgZG9pbmcgRE1BIG9yIGdlbmVyYXRpbmcgSVJRcy4KKyAqCisgKiBUaGlzIHJvdXRpbmUgbWF5IGJlIGNhbGxlZCBpbiBhIGRhbWFnZWQgb3IgZmFpbGluZyBrZXJuZWwuICBIZW5jZSB3ZQorICogZG8gbm90IGFjcXVpcmUgdGhlIHNwaW5sb2NrIGJlZm9yZSBzaHV0dGluZyBkb3duIHRoZSBjb250cm9sbGVyLgorICovCitzdGF0aWMgdm9pZCB1aGNpX2hjZF9ncmxpYl9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCkKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKCZvcC0+ZGV2KTsKKworCXVoY2lfaGNfZGllZChoY2RfdG9fdWhjaShoY2QpKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdWhjaV9oY2RfZ3JsaWJfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5uYW1lID0gIkdBSVNMRVJfVUhDSSIsIH0sCisJeyAubmFtZSA9ICIwMV8wMjciLCB9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHVoY2lfaGNkX2dybGliX29mX21hdGNoKTsKKworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB1aGNpX2dybGliX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gdWhjaV9oY2RfZ3JsaWJfcHJvYmUsCisJLnJlbW92ZQkJPSB1aGNpX2hjZF9ncmxpYl9yZW1vdmUsCisJLnNodXRkb3duCT0gdWhjaV9oY2RfZ3JsaWJfc2h1dGRvd24sCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiZ3JsaWItdWhjaSIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkub2ZfbWF0Y2hfdGFibGUgPSB1aGNpX2hjZF9ncmxpYl9vZl9tYXRjaCwKKwl9LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYwppbmRleCA0ZjY1YjE0Li5mYmE5OWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5jCkBAIC00OCwxNCArNDgsMTQgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKICNpbmNsdWRlICJ1aGNpLWhjZC5oIgotI2luY2x1ZGUgInBjaS1xdWlya3MuaCIKIAogLyoKICAqIFZlcnNpb24gSW5mb3JtYXRpb24KICAqLwotI2RlZmluZSBEUklWRVJfQVVUSE9SICJMaW51cyAnRnJvZG8gUmFiYml0JyBUb3J2YWxkcywgSm9oYW5uZXMgRXJkZmVsdCwgXAotUmFuZHkgRHVubGFwLCBHZW9yZyBBY2hlciwgRGV0aSBGbGllZ2wsIFRob21hcyBTYWlsZXIsIFJvbWFuIFdlaXNzZ2FlcmJlciwgXAotQWxhbiBTdGVybiIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUgkJCQkJCQlcCisJIkxpbnVzICdGcm9kbyBSYWJiaXQnIFRvcnZhbGRzLCBKb2hhbm5lcyBFcmRmZWx0LCAiCQlcCisJIlJhbmR5IER1bmxhcCwgR2VvcmcgQWNoZXIsIERldGkgRmxpZWdsLCBUaG9tYXMgU2FpbGVyLCAiCVwKKwkiUm9tYW4gV2Vpc3NnYWVyYmVyLCBBbGFuIFN0ZXJuIgogI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIFVuaXZlcnNhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIGRyaXZlciIKIAogLyogZm9yIGZsYWtleSBoYXJkd2FyZSwgaWdub3JlIG92ZXJjdXJyZW50IGluZGljYXRvcnMgKi8KQEAgLTkzLDcgKzkzLDcgQEAKIC8qCiAgKiBDYWxjdWxhdGUgdGhlIGxpbmsgcG9pbnRlciBETUEgdmFsdWUgZm9yIHRoZSBmaXJzdCBTa2VsZXRvbiBRSCBpbiBhIGZyYW1lLgogICovCi1zdGF0aWMgX19sZTMyIHVoY2lfZnJhbWVfc2tlbF9saW5rKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgaW50IGZyYW1lKQorc3RhdGljIF9faGMzMiB1aGNpX2ZyYW1lX3NrZWxfbGluayhzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIGludCBmcmFtZSkKIHsKIAlpbnQgc2tlbG51bTsKIApAQCAtMTE1LDcgKzExNSw3IEBACiAJc2tlbG51bSA9IDggLSAoaW50KSBfX2ZmcyhmcmFtZSB8IFVIQ0lfTlVNRlJBTUVTKTsKIAlpZiAoc2tlbG51bSA8PSAxKQogCQlza2VsbnVtID0gOTsKLQlyZXR1cm4gTElOS19UT19RSCh1aGNpLT5za2VscWhbc2tlbG51bV0pOworCXJldHVybiBMSU5LX1RPX1FIKHVoY2ksIHVoY2ktPnNrZWxxaFtza2VsbnVtXSk7CiB9CiAKICNpbmNsdWRlICJ1aGNpLWRlYnVnLmMiCkBAIC0xMzQsMTUgKzEzNCwxMiBAQAogCSAqIFdlIGhhdmUgdG8gY2xlYXIgdGhlbSBieSBoYW5kLgogCSAqLwogCWZvciAocG9ydCA9IDA7IHBvcnQgPCB1aGNpLT5yaF9udW1wb3J0czsgKytwb3J0KQotCQlvdXR3KDAsIHVoY2ktPmlvX2FkZHIgKyBVU0JQT1JUU0MxICsgKHBvcnQgKiAyKSk7CisJCXVoY2lfd3JpdGV3KHVoY2ksIDAsIFVTQlBPUlRTQzEgKyAocG9ydCAqIDIpKTsKIAogCXVoY2ktPnBvcnRfY19zdXNwZW5kID0gdWhjaS0+cmVzdW1pbmdfcG9ydHMgPSAwOwogCXVoY2ktPnJoX3N0YXRlID0gVUhDSV9SSF9SRVNFVDsKIAl1aGNpLT5pc19zdG9wcGVkID0gVUhDSV9JU19TVE9QUEVEOwotCXVoY2lfdG9faGNkKHVoY2kpLT5zdGF0ZSA9IEhDX1NUQVRFX0hBTFQ7CiAJY2xlYXJfYml0KEhDRF9GTEFHX1BPTExfUkgsICZ1aGNpX3RvX2hjZCh1aGNpKS0+ZmxhZ3MpOwotCi0JdWhjaS0+ZGVhZCA9IDA7CQkvKiBGdWxsIHJlc2V0IHJlc3VycmVjdHMgdGhlIGNvbnRyb2xsZXIgKi8KIH0KIAogLyoKQEAgLTE1Miw3ICsxNDksNyBAQAogc3RhdGljIHZvaWQgdWhjaV9oY19kaWVkKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSkKIHsKIAl1aGNpX2dldF9jdXJyZW50X2ZyYW1lX251bWJlcih1aGNpKTsKLQl1aGNpX3Jlc2V0X2hjKHRvX3BjaV9kZXYodWhjaV9kZXYodWhjaSkpLCB1aGNpLT5pb19hZGRyKTsKKwl1aGNpLT5yZXNldF9oYyh1aGNpKTsKIAlmaW5pc2hfcmVzZXQodWhjaSk7CiAJdWhjaS0+ZGVhZCA9IDE7CiAKQEAgLTE2Nyw5NyArMTY0LDExOCBAQAogICovCiBzdGF0aWMgdm9pZCBjaGVja19hbmRfcmVzZXRfaGMoc3RydWN0IHVoY2lfaGNkICp1aGNpKQogewotCWlmICh1aGNpX2NoZWNrX2FuZF9yZXNldF9oYyh0b19wY2lfZGV2KHVoY2lfZGV2KHVoY2kpKSwgdWhjaS0+aW9fYWRkcikpCisJaWYgKHVoY2ktPmNoZWNrX2FuZF9yZXNldF9oYyh1aGNpKSkKIAkJZmluaXNoX3Jlc2V0KHVoY2kpOwogfQogCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1VIQ0lfU1VQUE9SVF9OT05fUENJX0hDKQorLyoKKyAqIFRoZSB0d28gZnVuY3Rpb25zIGJlbG93IGFyZSBnZW5lcmljIHJlc2V0IGZ1bmN0aW9ucyB0aGF0IGFyZSB1c2VkIG9uIHN5c3RlbXMKKyAqIHRoYXQgZG8gbm90IGhhdmUga2V5Ym9hcmQgYW5kIG1vdXNlIGxlZ2FjeSBzdXBwb3J0LiBXZSBhc3N1bWUgdGhhdCB3ZSBhcmUKKyAqIHJ1bm5pbmcgb24gc3VjaCBhIHN5c3RlbSBpZiBDT05GSUdfVVNCX1VIQ0lfU1VQUE9SVF9OT05fUENJX0hDIGlzIGRlZmluZWQuCisgKi8KKworLyoKKyAqIE1ha2Ugc3VyZSB0aGUgY29udHJvbGxlciBpcyBjb21wbGV0ZWx5IGluYWN0aXZlLCB1bmFibGUgdG8KKyAqIGdlbmVyYXRlIGludGVycnVwdHMgb3IgZG8gRE1BLgorICovCitzdGF0aWMgdm9pZCB1aGNpX2dlbmVyaWNfcmVzZXRfaGMoc3RydWN0IHVoY2lfaGNkICp1aGNpKQoreworCS8qIFJlc2V0IHRoZSBIQyAtIHRoaXMgd2lsbCBmb3JjZSB1cyB0byBnZXQgYQorCSAqIG5ldyBub3RpZmljYXRpb24gb2YgYW55IGFscmVhZHkgY29ubmVjdGVkCisJICogcG9ydHMgZHVlIHRvIHRoZSB2aXJ0dWFsIGRpc2Nvbm5lY3QgdGhhdCBpdAorCSAqIGltcGxpZXMuCisJICovCisJdWhjaV93cml0ZXcodWhjaSwgVVNCQ01EX0hDUkVTRVQsIFVTQkNNRCk7CisJbWIoKTsKKwl1ZGVsYXkoNSk7CisJaWYgKHVoY2lfcmVhZHcodWhjaSwgVVNCQ01EKSAmIFVTQkNNRF9IQ1JFU0VUKQorCQlkZXZfd2Fybih1aGNpX2Rldih1aGNpKSwgIkhDUkVTRVQgbm90IGNvbXBsZXRlZCB5ZXQhXG4iKTsKKworCS8qIEp1c3QgdG8gYmUgc2FmZSwgZGlzYWJsZSBpbnRlcnJ1cHQgcmVxdWVzdHMgYW5kCisJICogbWFrZSBzdXJlIHRoZSBjb250cm9sbGVyIGlzIHN0b3BwZWQuCisJICovCisJdWhjaV93cml0ZXcodWhjaSwgMCwgVVNCSU5UUik7CisJdWhjaV93cml0ZXcodWhjaSwgMCwgVVNCQ01EKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgYSBjb250cm9sbGVyIHRoYXQgd2FzIG5ld2x5IGRpc2NvdmVyZWQgb3IgaGFzIGp1c3QgYmVlbgorICogcmVzdW1lZC4gIEluIGVpdGhlciBjYXNlIHdlIGNhbid0IGJlIHN1cmUgb2YgaXRzIHByZXZpb3VzIHN0YXRlLgorICoKKyAqIFJldHVybnM6IDEgaWYgdGhlIGNvbnRyb2xsZXIgd2FzIHJlc2V0LCAwIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB1aGNpX2dlbmVyaWNfY2hlY2tfYW5kX3Jlc2V0X2hjKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSkKK3sKKwl1bnNpZ25lZCBpbnQgY21kLCBpbnRyOworCisJLyoKKwkgKiBXaGVuIHJlc3RhcnRpbmcgYSBzdXNwZW5kZWQgY29udHJvbGxlciwgd2UgZXhwZWN0IGFsbCB0aGUKKwkgKiBzZXR0aW5ncyB0byBiZSB0aGUgc2FtZSBhcyB3ZSBsZWZ0IHRoZW06CisJICoKKwkgKglDb250cm9sbGVyIGlzIHN0b3BwZWQgYW5kIGNvbmZpZ3VyZWQgd2l0aCBFR1NNIHNldDsKKwkgKglObyBpbnRlcnJ1cHRzIGVuYWJsZWQgZXhjZXB0IHBvc3NpYmx5IFJlc3VtZSBEZXRlY3QuCisJICoKKwkgKiBJZiBhbnkgb2YgdGhlc2UgY29uZGl0aW9ucyBhcmUgdmlvbGF0ZWQgd2UgZG8gYSBjb21wbGV0ZSByZXNldC4KKwkgKi8KKworCWNtZCA9IHVoY2lfcmVhZHcodWhjaSwgVVNCQ01EKTsKKwlpZiAoKGNtZCAmIFVTQkNNRF9SUykgfHwgIShjbWQgJiBVU0JDTURfQ0YpIHx8ICEoY21kICYgVVNCQ01EX0VHU00pKSB7CisJCWRldl9kYmcodWhjaV9kZXYodWhjaSksICIlczogY21kID0gMHglMDR4XG4iLAorCQkJCV9fZnVuY19fLCBjbWQpOworCQlnb3RvIHJlc2V0X25lZWRlZDsKKwl9CisKKwlpbnRyID0gdWhjaV9yZWFkdyh1aGNpLCBVU0JJTlRSKTsKKwlpZiAoaW50ciAmICh+VVNCSU5UUl9SRVNVTUUpKSB7CisJCWRldl9kYmcodWhjaV9kZXYodWhjaSksICIlczogaW50ciA9IDB4JTA0eFxuIiwKKwkJCQlfX2Z1bmNfXywgaW50cik7CisJCWdvdG8gcmVzZXRfbmVlZGVkOworCX0KKwlyZXR1cm4gMDsKKworcmVzZXRfbmVlZGVkOgorCWRldl9kYmcodWhjaV9kZXYodWhjaSksICJQZXJmb3JtaW5nIGZ1bGwgcmVzZXRcbiIpOworCXVoY2lfZ2VuZXJpY19yZXNldF9oYyh1aGNpKTsKKwlyZXR1cm4gMTsKK30KKyNlbmRpZiAvKiBDT05GSUdfVVNCX1VIQ0lfU1VQUE9SVF9OT05fUENJX0hDICovCisKIC8qCiAgKiBTdG9yZSB0aGUgYmFzaWMgcmVnaXN0ZXIgc2V0dGluZ3MgbmVlZGVkIGJ5IHRoZSBjb250cm9sbGVyLgogICovCiBzdGF0aWMgdm9pZCBjb25maWd1cmVfaGMoc3RydWN0IHVoY2lfaGNkICp1aGNpKQogewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2Rldih1aGNpX2Rldih1aGNpKSk7Ci0KIAkvKiBTZXQgdGhlIGZyYW1lIGxlbmd0aCB0byB0aGUgZGVmYXVsdDogMSBtcyBleGFjdGx5ICovCi0Jb3V0YihVU0JTT0ZfREVGQVVMVCwgdWhjaS0+aW9fYWRkciArIFVTQlNPRik7CisJdWhjaV93cml0ZWIodWhjaSwgVVNCU09GX0RFRkFVTFQsIFVTQlNPRik7CiAKIAkvKiBTdG9yZSB0aGUgZnJhbWUgbGlzdCBiYXNlIGFkZHJlc3MgKi8KLQlvdXRsKHVoY2ktPmZyYW1lX2RtYV9oYW5kbGUsIHVoY2ktPmlvX2FkZHIgKyBVU0JGTEJBU0VBREQpOworCXVoY2lfd3JpdGVsKHVoY2ksIHVoY2ktPmZyYW1lX2RtYV9oYW5kbGUsIFVTQkZMQkFTRUFERCk7CiAKIAkvKiBTZXQgdGhlIGN1cnJlbnQgZnJhbWUgbnVtYmVyICovCi0Jb3V0dyh1aGNpLT5mcmFtZV9udW1iZXIgJiBVSENJX01BWF9TT0ZfTlVNQkVSLAotCQkJdWhjaS0+aW9fYWRkciArIFVTQkZSTlVNKTsKKwl1aGNpX3dyaXRldyh1aGNpLCB1aGNpLT5mcmFtZV9udW1iZXIgJiBVSENJX01BWF9TT0ZfTlVNQkVSLAorCQkJVVNCRlJOVU0pOwogCi0JLyogTWFyayBjb250cm9sbGVyIGFzIG5vdCBoYWx0ZWQgYmVmb3JlIHdlIGVuYWJsZSBpbnRlcnJ1cHRzICovCi0JdWhjaV90b19oY2QodWhjaSktPnN0YXRlID0gSENfU1RBVEVfU1VTUEVOREVEOwotCW1iKCk7Ci0KLQkvKiBFbmFibGUgUElSUSAqLwotCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBVU0JMRUdTVVAsIFVTQkxFR1NVUF9ERUZBVUxUKTsKLQotCS8qIERpc2FibGUgcGxhdGZvcm0tc3BlY2lmaWMgbm9uLVBNRSMgd2FrZXVwICovCi0JaWYgKHBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0lOVEVMKQotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgVVNCUkVTX0lOVEVMLCAwKTsKKwkvKiBwZXJmb3JtIGFueSBhcmNoL2J1cyBzcGVjaWZpYyBjb25maWd1cmF0aW9uICovCisJaWYgKHVoY2ktPmNvbmZpZ3VyZV9oYykKKwkJdWhjaS0+Y29uZmlndXJlX2hjKHVoY2kpOwogfQogCi0KIHN0YXRpYyBpbnQgcmVzdW1lX2RldGVjdF9pbnRlcnJ1cHRzX2FyZV9icm9rZW4oc3RydWN0IHVoY2lfaGNkICp1aGNpKQogewotCWludCBwb3J0OwotCiAJLyogSWYgd2UgaGF2ZSB0byBpZ25vcmUgb3ZlcmN1cnJlbnQgZXZlbnRzIHRoZW4gYWxtb3N0IGJ5IGRlZmluaXRpb24KIAkgKiB3ZSBjYW4ndCBkZXBlbmQgb24gcmVzdW1lLWRldGVjdCBpbnRlcnJ1cHRzLiAqLwogCWlmIChpZ25vcmVfb2MpCiAJCXJldHVybiAxOwogCi0Jc3dpdGNoICh0b19wY2lfZGV2KHVoY2lfZGV2KHVoY2kpKS0+dmVuZG9yKSB7Ci0JICAgIGRlZmF1bHQ6Ci0JCWJyZWFrOwotCi0JICAgIGNhc2UgUENJX1ZFTkRPUl9JRF9HRU5FU1lTOgotCQkvKiBHZW5lc3lzIExvZ2ljJ3MgR0w4ODBTIGNvbnRyb2xsZXJzIGRvbid0IGdlbmVyYXRlCi0JCSAqIHJlc3VtZS1kZXRlY3QgaW50ZXJydXB0cy4KLQkJICovCi0JCXJldHVybiAxOwotCi0JICAgIGNhc2UgUENJX1ZFTkRPUl9JRF9JTlRFTDoKLQkJLyogU29tZSBvZiBJbnRlbCdzIFVTQiBjb250cm9sbGVycyBoYXZlIGEgYnVnIHRoYXQgY2F1c2VzCi0JCSAqIHJlc3VtZS1kZXRlY3QgaW50ZXJydXB0cyBpZiBhbnkgcG9ydCBoYXMgYW4gb3Zlci1jdXJyZW50Ci0JCSAqIGNvbmRpdGlvbi4gIFRvIG1ha2UgbWF0dGVycyB3b3JzZSwgc29tZSBtb3RoZXJib2FyZHMKLQkJICogaGFyZHdpcmUgdW51c2VkIFVTQiBwb3J0cycgb3Zlci1jdXJyZW50IGlucHV0cyBhY3RpdmUhCi0JCSAqIFRvIHByZXZlbnQgcHJvYmxlbXMsIHdlIHdpbGwgbm90IGVuYWJsZSByZXN1bWUtZGV0ZWN0Ci0JCSAqIGludGVycnVwdHMgaWYgYW55IHBvcnRzIGFyZSBPQy4KLQkJICovCi0JCWZvciAocG9ydCA9IDA7IHBvcnQgPCB1aGNpLT5yaF9udW1wb3J0czsgKytwb3J0KSB7Ci0JCQlpZiAoaW53KHVoY2ktPmlvX2FkZHIgKyBVU0JQT1JUU0MxICsgcG9ydCAqIDIpICYKLQkJCQkJVVNCUE9SVFNDX09DKQotCQkJCXJldHVybiAxOwotCQl9Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gdWhjaS0+cmVzdW1lX2RldGVjdF9pbnRlcnJ1cHRzX2FyZV9icm9rZW4gPworCQl1aGNpLT5yZXN1bWVfZGV0ZWN0X2ludGVycnVwdHNfYXJlX2Jyb2tlbih1aGNpKSA6IDA7CiB9CiAKIHN0YXRpYyBpbnQgZ2xvYmFsX3N1c3BlbmRfbW9kZV9pc19icm9rZW4oc3RydWN0IHVoY2lfaGNkICp1aGNpKQogewotCWludCBwb3J0OwotCWNvbnN0IGNoYXIgKnN5c19pbmZvOwotCXN0YXRpYyBjaGFyIGJhZF9Bc3VzX2JvYXJkW10gPSAiQTdWOFgiOwotCi0JLyogT25lIG9mIEFzdXMncyBtb3RoZXJib2FyZHMgaGFzIGEgYnVnIHdoaWNoIGNhdXNlcyBpdCB0bwotCSAqIHdha2UgdXAgaW1tZWRpYXRlbHkgZnJvbSBzdXNwZW5kLXRvLVJBTSBpZiBhbnkgb2YgdGhlIHBvcnRzCi0JICogYXJlIGNvbm5lY3RlZC4gIEluIHN1Y2ggY2FzZXMgd2Ugd2lsbCBub3Qgc2V0IEVHU00uCi0JICovCi0Jc3lzX2luZm8gPSBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CT0FSRF9OQU1FKTsKLQlpZiAoc3lzX2luZm8gJiYgIXN0cmNtcChzeXNfaW5mbywgYmFkX0FzdXNfYm9hcmQpKSB7Ci0JCWZvciAocG9ydCA9IDA7IHBvcnQgPCB1aGNpLT5yaF9udW1wb3J0czsgKytwb3J0KSB7Ci0JCQlpZiAoaW53KHVoY2ktPmlvX2FkZHIgKyBVU0JQT1JUU0MxICsgcG9ydCAqIDIpICYKLQkJCQkJVVNCUE9SVFNDX0NDUykKLQkJCQlyZXR1cm4gMTsKLQkJfQotCX0KLQotCXJldHVybiAwOworCXJldHVybiB1aGNpLT5nbG9iYWxfc3VzcGVuZF9tb2RlX2lzX2Jyb2tlbiA/CisJCXVoY2ktPmdsb2JhbF9zdXNwZW5kX21vZGVfaXNfYnJva2VuKHVoY2kpIDogMDsKIH0KIAogc3RhdGljIHZvaWQgc3VzcGVuZF9yaChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIGVudW0gdWhjaV9yaF9zdGF0ZSBuZXdfc3RhdGUpCkBAIC0zMjAsOCArMzM4LDggQEAKIAkJCSFpbnRfZW5hYmxlKQogCQl1aGNpLT5SRF9lbmFibGUgPSBpbnRfZW5hYmxlID0gMDsKIAotCW91dHcoaW50X2VuYWJsZSwgdWhjaS0+aW9fYWRkciArIFVTQklOVFIpOwotCW91dHcoZWdzbV9lbmFibGUgfCBVU0JDTURfQ0YsIHVoY2ktPmlvX2FkZHIgKyBVU0JDTUQpOworCXVoY2lfd3JpdGV3KHVoY2ksIGludF9lbmFibGUsIFVTQklOVFIpOworCXVoY2lfd3JpdGV3KHVoY2ksIGVnc21fZW5hYmxlIHwgVVNCQ01EX0NGLCBVU0JDTUQpOwogCW1iKCk7CiAJdWRlbGF5KDUpOwogCkBAIC0zMzAsNyArMzQ4LDcgQEAKIAkgKiBjb250cm9sbGVyIHNob3VsZCBzdG9wIGFmdGVyIGEgZmV3IG1pY3Jvc2Vjb25kcy4gIE90aGVyd2lzZQogCSAqIHdlIHdpbGwgZ2l2ZSB0aGUgY29udHJvbGxlciBvbmUgZnJhbWUgdG8gc3RvcC4KIAkgKi8KLQlpZiAoIWF1dG9fc3RvcCAmJiAhKGludyh1aGNpLT5pb19hZGRyICsgVVNCU1RTKSAmIFVTQlNUU19IQ0gpKSB7CisJaWYgKCFhdXRvX3N0b3AgJiYgISh1aGNpX3JlYWR3KHVoY2ksIFVTQlNUUykgJiBVU0JTVFNfSENIKSkgewogCQl1aGNpLT5yaF9zdGF0ZSA9IFVIQ0lfUkhfU1VTUEVORElORzsKIAkJc3Bpbl91bmxvY2tfaXJxKCZ1aGNpLT5sb2NrKTsKIAkJbXNsZWVwKDEpOwpAQCAtMzM4LDcgKzM1Niw3IEBACiAJCWlmICh1aGNpLT5kZWFkKQogCQkJcmV0dXJuOwogCX0KLQlpZiAoIShpbncodWhjaS0+aW9fYWRkciArIFVTQlNUUykgJiBVU0JTVFNfSENIKSkKKwlpZiAoISh1aGNpX3JlYWR3KHVoY2ksIFVTQlNUUykgJiBVU0JTVFNfSENIKSkKIAkJZGV2X3dhcm4odWhjaV9kZXYodWhjaSksICJDb250cm9sbGVyIG5vdCBzdG9wcGVkIHlldCFcbiIpOwogCiAJdWhjaV9nZXRfY3VycmVudF9mcmFtZV9udW1iZXIodWhjaSk7CkBAIC0zNjAsMTUgKzM3OCwxNCBAQAogCiBzdGF0aWMgdm9pZCBzdGFydF9yaChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpCiB7Ci0JdWhjaV90b19oY2QodWhjaSktPnN0YXRlID0gSENfU1RBVEVfUlVOTklORzsKIAl1aGNpLT5pc19zdG9wcGVkID0gMDsKIAogCS8qIE1hcmsgaXQgY29uZmlndXJlZCBhbmQgcnVubmluZyB3aXRoIGEgNjQtYnl0ZSBtYXggcGFja2V0LgogCSAqIEFsbCBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkLCBldmVuIHRob3VnaCBSRVNVTUUgd29uJ3QgZG8gYW55dGhpbmcuCiAJICovCi0Jb3V0dyhVU0JDTURfUlMgfCBVU0JDTURfQ0YgfCBVU0JDTURfTUFYUCwgdWhjaS0+aW9fYWRkciArIFVTQkNNRCk7Ci0Jb3V0dyhVU0JJTlRSX1RJTUVPVVQgfCBVU0JJTlRSX1JFU1VNRSB8IFVTQklOVFJfSU9DIHwgVVNCSU5UUl9TUCwKLQkJCXVoY2ktPmlvX2FkZHIgKyBVU0JJTlRSKTsKKwl1aGNpX3dyaXRldyh1aGNpLCBVU0JDTURfUlMgfCBVU0JDTURfQ0YgfCBVU0JDTURfTUFYUCwgVVNCQ01EKTsKKwl1aGNpX3dyaXRldyh1aGNpLCBVU0JJTlRSX1RJTUVPVVQgfCBVU0JJTlRSX1JFU1VNRSB8CisJCVVTQklOVFJfSU9DIHwgVVNCSU5UUl9TUCwgVVNCSU5UUik7CiAJbWIoKTsKIAl1aGNpLT5yaF9zdGF0ZSA9IFVIQ0lfUkhfUlVOTklORzsKIAlzZXRfYml0KEhDRF9GTEFHX1BPTExfUkgsICZ1aGNpX3RvX2hjZCh1aGNpKS0+ZmxhZ3MpOwpAQCAtMzkxLDkgKzQwOCw5IEBACiAJCXVuc2lnbmVkIGVnc207CiAKIAkJLyogS2VlcCBFR1NNIG9uIGlmIGl0IHdhcyBzZXQgYmVmb3JlICovCi0JCWVnc20gPSBpbncodWhjaS0+aW9fYWRkciArIFVTQkNNRCkgJiBVU0JDTURfRUdTTTsKKwkJZWdzbSA9IHVoY2lfcmVhZHcodWhjaSwgVVNCQ01EKSAmIFVTQkNNRF9FR1NNOwogCQl1aGNpLT5yaF9zdGF0ZSA9IFVIQ0lfUkhfUkVTVU1JTkc7Ci0JCW91dHcoVVNCQ01EX0ZHUiB8IFVTQkNNRF9DRiB8IGVnc20sIHVoY2ktPmlvX2FkZHIgKyBVU0JDTUQpOworCQl1aGNpX3dyaXRldyh1aGNpLCBVU0JDTURfRkdSIHwgVVNCQ01EX0NGIHwgZWdzbSwgVVNCQ01EKTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZ1aGNpLT5sb2NrKTsKIAkJbXNsZWVwKDIwKTsKIAkJc3Bpbl9sb2NrX2lycSgmdWhjaS0+bG9jayk7CkBAIC00MDEsMTAgKzQxOCwxMCBAQAogCQkJcmV0dXJuOwogCiAJCS8qIEVuZCBHbG9iYWwgUmVzdW1lIGFuZCB3YWl0IGZvciBFT1AgdG8gYmUgc2VudCAqLwotCQlvdXR3KFVTQkNNRF9DRiwgdWhjaS0+aW9fYWRkciArIFVTQkNNRCk7CisJCXVoY2lfd3JpdGV3KHVoY2ksIFVTQkNNRF9DRiwgVVNCQ01EKTsKIAkJbWIoKTsKIAkJdWRlbGF5KDQpOwotCQlpZiAoaW53KHVoY2ktPmlvX2FkZHIgKyBVU0JDTUQpICYgVVNCQ01EX0ZHUikKKwkJaWYgKHVoY2lfcmVhZHcodWhjaSwgVVNCQ01EKSAmIFVTQkNNRF9GR1IpCiAJCQlkZXZfd2Fybih1aGNpX2Rldih1aGNpKSwgIkZHUiBub3Qgc3RvcHBlZCB5ZXQhXG4iKTsKIAl9CiAKQEAgLTQyNCwxMCArNDQxLDEwIEBACiAJICogaW50ZXJydXB0IGNhdXNlLiAgQ29udHJhcnkgdG8gdGhlIFVIQ0kgc3BlY2lmaWNhdGlvbiwgdGhlCiAJICogIkhDIEhhbHRlZCIgc3RhdHVzIGJpdCBpcyBwZXJzaXN0ZW50OiBpdCBpcyBSTywgbm90IFIvV0MuCiAJICovCi0Jc3RhdHVzID0gaW53KHVoY2ktPmlvX2FkZHIgKyBVU0JTVFMpOworCXN0YXR1cyA9IHVoY2lfcmVhZHcodWhjaSwgVVNCU1RTKTsKIAlpZiAoIShzdGF0dXMgJiB+VVNCU1RTX0hDSCkpCS8qIHNoYXJlZCBpbnRlcnJ1cHQsIG5vdCBtaW5lICovCiAJCXJldHVybiBJUlFfTk9ORTsKLQlvdXR3KHN0YXR1cywgdWhjaS0+aW9fYWRkciArIFVTQlNUUyk7CQkvKiBDbGVhciBpdCAqLworCXVoY2lfd3JpdGV3KHVoY2ksIHN0YXR1cywgVVNCU1RTKTsJCS8qIENsZWFyIGl0ICovCiAKIAlpZiAoc3RhdHVzICYgfihVU0JTVFNfVVNCSU5UIHwgVVNCU1RTX0VSUk9SIHwgVVNCU1RTX1JEKSkgewogCQlpZiAoc3RhdHVzICYgVVNCU1RTX0hTRSkKQEAgLTQ0OSw2ICs0NjYsNyBAQAogCQkJCQlscHJpbnRrKGVycmJ1Zik7CiAJCQkJfQogCQkJCXVoY2lfaGNfZGllZCh1aGNpKTsKKwkJCQl1c2JfaGNfZGllZChoY2QpOwogCiAJCQkJLyogRm9yY2UgYSBjYWxsYmFjayBpbiBjYXNlIHRoZXJlIGFyZQogCQkJCSAqIHBlbmRpbmcgdW5saW5rcyAqLwpAQCAtNDgyLDcgKzUwMCw3IEBACiAJaWYgKCF1aGNpLT5pc19zdG9wcGVkKSB7CiAJCXVuc2lnbmVkIGRlbHRhOwogCi0JCWRlbHRhID0gKGludyh1aGNpLT5pb19hZGRyICsgVVNCRlJOVU0pIC0gdWhjaS0+ZnJhbWVfbnVtYmVyKSAmCisJCWRlbHRhID0gKHVoY2lfcmVhZHcodWhjaSwgVVNCRlJOVU0pIC0gdWhjaS0+ZnJhbWVfbnVtYmVyKSAmCiAJCQkJKFVIQ0lfTlVNRlJBTUVTIC0gMSk7CiAJCXVoY2ktPmZyYW1lX251bWJlciArPSBkZWx0YTsKIAl9CkBAIC01MTksNjEgKzUzNyw2IEBACiAJCQl1aGNpLT5mcmFtZSwgdWhjaS0+ZnJhbWVfZG1hX2hhbmRsZSk7CiB9CiAKLXN0YXRpYyBpbnQgdWhjaV9pbml0KHN0cnVjdCB1c2JfaGNkICpoY2QpCi17Ci0Jc3RydWN0IHVoY2lfaGNkICp1aGNpID0gaGNkX3RvX3VoY2koaGNkKTsKLQl1bnNpZ25lZCBpb19zaXplID0gKHVuc2lnbmVkKSBoY2QtPnJzcmNfbGVuOwotCWludCBwb3J0OwotCi0JdWhjaS0+aW9fYWRkciA9ICh1bnNpZ25lZCBsb25nKSBoY2QtPnJzcmNfc3RhcnQ7Ci0KLQkvKiBUaGUgVUhDSSBzcGVjIHNheXMgZGV2aWNlcyBtdXN0IGhhdmUgMiBwb3J0cywgYW5kIGdvZXMgb24gdG8gc2F5Ci0JICogdGhleSBtYXkgaGF2ZSBtb3JlIGJ1dCBnaXZlcyBubyB3YXkgdG8gZGV0ZXJtaW5lIGhvdyBtYW55IHRoZXJlCi0JICogYXJlLiAgSG93ZXZlciBhY2NvcmRpbmcgdG8gdGhlIFVIQ0kgc3BlYywgQml0IDcgb2YgdGhlIHBvcnQKLQkgKiBzdGF0dXMgYW5kIGNvbnRyb2wgcmVnaXN0ZXIgaXMgYWx3YXlzIHNldCB0byAxLiAgU28gd2UgdHJ5IHRvCi0JICogdXNlIHRoaXMgdG8gb3VyIGFkdmFudGFnZS4gIEFub3RoZXIgY29tbW9uIGZhaWx1cmUgbW9kZSB3aGVuCi0JICogYSBub25leGlzdGVudCByZWdpc3RlciBpcyBhZGRyZXNzZWQgaXMgdG8gcmV0dXJuIGFsbCBvbmVzLCBzbwotCSAqIHdlIHRlc3QgZm9yIHRoYXQgYWxzby4KLQkgKi8KLQlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgKGlvX3NpemUgLSBVU0JQT1JUU0MxKSAvIDI7IHBvcnQrKykgewotCQl1bnNpZ25lZCBpbnQgcG9ydHN0YXR1czsKLQotCQlwb3J0c3RhdHVzID0gaW53KHVoY2ktPmlvX2FkZHIgKyBVU0JQT1JUU0MxICsgKHBvcnQgKiAyKSk7Ci0JCWlmICghKHBvcnRzdGF0dXMgJiAweDAwODApIHx8IHBvcnRzdGF0dXMgPT0gMHhmZmZmKQotCQkJYnJlYWs7Ci0JfQotCWlmIChkZWJ1ZykKLQkJZGV2X2luZm8odWhjaV9kZXYodWhjaSksICJkZXRlY3RlZCAlZCBwb3J0c1xuIiwgcG9ydCk7Ci0KLQkvKiBBbnl0aGluZyBncmVhdGVyIHRoYW4gNyBpcyB3ZWlyZCBzbyB3ZSdsbCBpZ25vcmUgaXQuICovCi0JaWYgKHBvcnQgPiBVSENJX1JIX01BWENISUxEKSB7Ci0JCWRldl9pbmZvKHVoY2lfZGV2KHVoY2kpLCAicG9ydCBjb3VudCBtaXNkZXRlY3RlZD8gIgotCQkJCSJmb3JjaW5nIHRvIDIgcG9ydHNcbiIpOwotCQlwb3J0ID0gMjsKLQl9Ci0JdWhjaS0+cmhfbnVtcG9ydHMgPSBwb3J0OwotCi0JLyogS2ljayBCSU9TIG9mZiB0aGlzIGhhcmR3YXJlIGFuZCByZXNldCBpZiB0aGUgY29udHJvbGxlcgotCSAqIGlzbid0IGFscmVhZHkgc2FmZWx5IHF1aWVzY2VudC4KLQkgKi8KLQljaGVja19hbmRfcmVzZXRfaGModWhjaSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIE1ha2Ugc3VyZSB0aGUgY29udHJvbGxlciBpcyBxdWllc2NlbnQgYW5kIHRoYXQgd2UncmUgbm90IHVzaW5nIGl0Ci0gKiBhbnkgbW9yZS4gIFRoaXMgaXMgbWFpbmx5IGZvciB0aGUgYmVuZWZpdCBvZiBwcm9ncmFtcyB3aGljaCwgbGlrZSBrZXhlYywKLSAqIGV4cGVjdCB0aGUgaGFyZHdhcmUgdG8gYmUgaWRsZTogbm90IGRvaW5nIERNQSBvciBnZW5lcmF0aW5nIElSUXMuCi0gKgotICogVGhpcyByb3V0aW5lIG1heSBiZSBjYWxsZWQgaW4gYSBkYW1hZ2VkIG9yIGZhaWxpbmcga2VybmVsLiAgSGVuY2Ugd2UKLSAqIGRvIG5vdCBhY3F1aXJlIHRoZSBzcGlubG9jayBiZWZvcmUgc2h1dHRpbmcgZG93biB0aGUgY29udHJvbGxlci4KLSAqLwotc3RhdGljIHZvaWQgdWhjaV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCi0JdWhjaV9oY19kaWVkKGhjZF90b191aGNpKGhjZCkpOwotfQotCiAvKgogICogQWxsb2NhdGUgYSBmcmFtZSBsaXN0LCBhbmQgdGhlbiBzZXR1cCB0aGUgc2tlbGV0b24KICAqCkBAIC02NjgsMTYgKzYzMSwxNiBAQAogCSAqIDggSW50ZXJydXB0IHF1ZXVlczsgbGluayBhbGwgaGlnaGVyIGludCBxdWV1ZXMgdG8gaW50MSA9IGFzeW5jCiAJICovCiAJZm9yIChpID0gU0tFTF9JU08gKyAxOyBpIDwgU0tFTF9BU1lOQzsgKytpKQotCQl1aGNpLT5za2VscWhbaV0tPmxpbmsgPSBMSU5LX1RPX1FIKHVoY2ktPnNrZWxfYXN5bmNfcWgpOwotCXVoY2ktPnNrZWxfYXN5bmNfcWgtPmxpbmsgPSBVSENJX1BUUl9URVJNOwotCXVoY2ktPnNrZWxfdGVybV9xaC0+bGluayA9IExJTktfVE9fUUgodWhjaS0+c2tlbF90ZXJtX3FoKTsKKwkJdWhjaS0+c2tlbHFoW2ldLT5saW5rID0gTElOS19UT19RSCh1aGNpLCB1aGNpLT5za2VsX2FzeW5jX3FoKTsKKwl1aGNpLT5za2VsX2FzeW5jX3FoLT5saW5rID0gVUhDSV9QVFJfVEVSTSh1aGNpKTsKKwl1aGNpLT5za2VsX3Rlcm1fcWgtPmxpbmsgPSBMSU5LX1RPX1FIKHVoY2ksIHVoY2ktPnNrZWxfdGVybV9xaCk7CiAKIAkvKiBUaGlzIGR1bW15IFREIGlzIHRvIHdvcmsgYXJvdW5kIGEgYnVnIGluIEludGVsIFBJSVggY29udHJvbGxlcnMgKi8KLQl1aGNpX2ZpbGxfdGQodWhjaS0+dGVybV90ZCwgMCwgdWhjaV9leHBsZW4oMCkgfAorCXVoY2lfZmlsbF90ZCh1aGNpLCB1aGNpLT50ZXJtX3RkLCAwLCB1aGNpX2V4cGxlbigwKSB8CiAJCQkoMHg3ZiA8PCBURF9UT0tFTl9ERVZBRERSX1NISUZUKSB8IFVTQl9QSURfSU4sIDApOwotCXVoY2ktPnRlcm1fdGQtPmxpbmsgPSBVSENJX1BUUl9URVJNOworCXVoY2ktPnRlcm1fdGQtPmxpbmsgPSBVSENJX1BUUl9URVJNKHVoY2kpOwogCXVoY2ktPnNrZWxfYXN5bmNfcWgtPmVsZW1lbnQgPSB1aGNpLT5za2VsX3Rlcm1fcWgtPmVsZW1lbnQgPQotCQkJTElOS19UT19URCh1aGNpLT50ZXJtX3RkKTsKKwkJTElOS19UT19URCh1aGNpLCB1aGNpLT50ZXJtX3RkKTsKIAogCS8qCiAJICogRmlsbCB0aGUgZnJhbWUgbGlzdDogbWFrZSBhbGwgZW50cmllcyBwb2ludCB0byB0aGUgcHJvcGVyCkBAIC03OTAsODYgKzc1Myw2IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IHVoY2lfcGNpX3N1c3BlbmQoc3RydWN0IHVzYl9oY2QgKmhjZCwgYm9vbCBkb193YWtldXApCi17Ci0Jc3RydWN0IHVoY2lfaGNkICp1aGNpID0gaGNkX3RvX3VoY2koaGNkKTsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYodWhjaV9kZXYodWhjaSkpOwotCWludCByYyA9IDA7Ci0KLQlkZXZfZGJnKHVoY2lfZGV2KHVoY2kpLCAiJXNcbiIsIF9fZnVuY19fKTsKLQotCXNwaW5fbG9ja19pcnEoJnVoY2ktPmxvY2spOwotCWlmICghSENEX0hXX0FDQ0VTU0lCTEUoaGNkKSB8fCB1aGNpLT5kZWFkKQotCQlnb3RvIGRvbmVfb2theTsJCS8qIEFscmVhZHkgc3VzcGVuZGVkIG9yIGRlYWQgKi8KLQotCWlmICh1aGNpLT5yaF9zdGF0ZSA+IFVIQ0lfUkhfU1VTUEVOREVEKSB7Ci0JCWRldl93YXJuKHVoY2lfZGV2KHVoY2kpLCAiUm9vdCBodWIgaXNuJ3Qgc3VzcGVuZGVkIVxuIik7Ci0JCXJjID0gLUVCVVNZOwotCQlnb3RvIGRvbmU7Ci0JfTsKLQotCS8qIEFsbCBQQ0kgaG9zdCBjb250cm9sbGVycyBhcmUgcmVxdWlyZWQgdG8gZGlzYWJsZSBJUlEgZ2VuZXJhdGlvbgotCSAqIGF0IHRoZSBzb3VyY2UsIHNvIHdlIG11c3QgdHVybiBvZmYgUElSUS4KLQkgKi8KLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgVVNCTEVHU1VQLCAwKTsKLQljbGVhcl9iaXQoSENEX0ZMQUdfUE9MTF9SSCwgJmhjZC0+ZmxhZ3MpOwotCi0JLyogRW5hYmxlIHBsYXRmb3JtLXNwZWNpZmljIG5vbi1QTUUjIHdha2V1cCAqLwotCWlmIChkb193YWtldXApIHsKLQkJaWYgKHBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0lOVEVMKQotCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFVTQlJFU19JTlRFTCwKLQkJCQkJVVNCUE9SVDFFTiB8IFVTQlBPUlQyRU4pOwotCX0KLQotZG9uZV9va2F5OgotCWNsZWFyX2JpdChIQ0RfRkxBR19IV19BQ0NFU1NJQkxFLCAmaGNkLT5mbGFncyk7Ci1kb25lOgotCXNwaW5fdW5sb2NrX2lycSgmdWhjaS0+bG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IHVoY2lfcGNpX3Jlc3VtZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBib29sIGhpYmVybmF0ZWQpCi17Ci0Jc3RydWN0IHVoY2lfaGNkICp1aGNpID0gaGNkX3RvX3VoY2koaGNkKTsKLQotCWRldl9kYmcodWhjaV9kZXYodWhjaSksICIlc1xuIiwgX19mdW5jX18pOwotCi0JLyogU2luY2Ugd2UgYXJlbid0IGluIEQzIGFueSBtb3JlLCBpdCdzIHNhZmUgdG8gc2V0IHRoaXMgZmxhZwotCSAqIGV2ZW4gaWYgdGhlIGNvbnRyb2xsZXIgd2FzIGRlYWQuCi0JICovCi0Jc2V0X2JpdChIQ0RfRkxBR19IV19BQ0NFU1NJQkxFLCAmaGNkLT5mbGFncyk7Ci0KLQlzcGluX2xvY2tfaXJxKCZ1aGNpLT5sb2NrKTsKLQotCS8qIE1ha2Ugc3VyZSByZXN1bWUgZnJvbSBoaWJlcm5hdGlvbiByZS1lbnVtZXJhdGVzIGV2ZXJ5dGhpbmcgKi8KLQlpZiAoaGliZXJuYXRlZCkKLQkJdWhjaV9oY19kaWVkKHVoY2kpOwotCi0JLyogVGhlIGZpcm13YXJlIG9yIGEgYm9vdCBrZXJuZWwgbWF5IGhhdmUgY2hhbmdlZCB0aGUgY29udHJvbGxlcgotCSAqIHNldHRpbmdzIGR1cmluZyBhIHN5c3RlbSB3YWtldXAuICBDaGVjayBpdCBhbmQgcmVjb25maWd1cmUKLQkgKiB0byBhdm9pZCBwcm9ibGVtcy4KLQkgKi8KLQljaGVja19hbmRfcmVzZXRfaGModWhjaSk7Ci0KLQkvKiBJZiB0aGUgY29udHJvbGxlciB3YXMgZGVhZCBiZWZvcmUsIGl0J3MgYmFjayBhbGl2ZSBub3cgKi8KLQljb25maWd1cmVfaGModWhjaSk7Ci0KLQkvKiBUZWxsIHRoZSBjb3JlIGlmIHRoZSBjb250cm9sbGVyIGhhZCB0byBiZSByZXNldCAqLwotCWlmICh1aGNpLT5yaF9zdGF0ZSA9PSBVSENJX1JIX1JFU0VUKQotCQl1c2Jfcm9vdF9odWJfbG9zdF9wb3dlcihoY2QtPnNlbGYucm9vdF9odWIpOwotCi0Jc3Bpbl91bmxvY2tfaXJxKCZ1aGNpLT5sb2NrKTsKLQotCS8qIElmIGludGVycnVwdHMgZG9uJ3Qgd29yayBhbmQgcmVtb3RlIHdha2V1cCBpcyBlbmFibGVkIHRoZW4KLQkgKiB0aGUgc3VzcGVuZGVkIHJvb3QgaHViIG5lZWRzIHRvIGJlIHBvbGxlZC4KLQkgKi8KLQlpZiAoIXVoY2ktPlJEX2VuYWJsZSAmJiBoY2QtPnNlbGYucm9vdF9odWItPmRvX3JlbW90ZV93YWtldXApCi0JCXNldF9iaXQoSENEX0ZMQUdfUE9MTF9SSCwgJmhjZC0+ZmxhZ3MpOwotCi0JLyogRG9lcyB0aGUgcm9vdCBodWIgaGF2ZSBhIHBvcnQgd2FrZXVwIHBlbmRpbmc/ICovCi0JdXNiX2hjZF9wb2xsX3JoX3N0YXR1cyhoY2QpOwotCXJldHVybiAwOwotfQogI2VuZGlmCiAKIC8qIFdhaXQgdW50aWwgYSBwYXJ0aWN1bGFyIGRldmljZS9lbmRwb2ludCdzIFFIIGlzIGlkbGUsIGFuZCBmcmVlIGl0ICovCkBAIC05MDcsNjcgKzc5MCw2MiBAQAogCS8qIE1pbmltaXplIGxhdGVuY3kgYnkgYXZvaWRpbmcgdGhlIHNwaW5sb2NrICovCiAJZnJhbWVfbnVtYmVyID0gdWhjaS0+ZnJhbWVfbnVtYmVyOwogCWJhcnJpZXIoKTsKLQlkZWx0YSA9IChpbncodWhjaS0+aW9fYWRkciArIFVTQkZSTlVNKSAtIGZyYW1lX251bWJlcikgJgorCWRlbHRhID0gKHVoY2lfcmVhZHcodWhjaSwgVVNCRlJOVU0pIC0gZnJhbWVfbnVtYmVyKSAmCiAJCQkoVUhDSV9OVU1GUkFNRVMgLSAxKTsKIAlyZXR1cm4gZnJhbWVfbnVtYmVyICsgZGVsdGE7CiB9CiAKKy8qIERldGVybWluZXMgbnVtYmVyIG9mIHBvcnRzIG9uIGNvbnRyb2xsZXIgKi8KK3N0YXRpYyBpbnQgdWhjaV9jb3VudF9wb3J0cyhzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCB1aGNpX2hjZCAqdWhjaSA9IGhjZF90b191aGNpKGhjZCk7CisJdW5zaWduZWQgaW9fc2l6ZSA9ICh1bnNpZ25lZCkgaGNkLT5yc3JjX2xlbjsKKwlpbnQgcG9ydDsKKworCS8qIFRoZSBVSENJIHNwZWMgc2F5cyBkZXZpY2VzIG11c3QgaGF2ZSAyIHBvcnRzLCBhbmQgZ29lcyBvbiB0byBzYXkKKwkgKiB0aGV5IG1heSBoYXZlIG1vcmUgYnV0IGdpdmVzIG5vIHdheSB0byBkZXRlcm1pbmUgaG93IG1hbnkgdGhlcmUKKwkgKiBhcmUuICBIb3dldmVyIGFjY29yZGluZyB0byB0aGUgVUhDSSBzcGVjLCBCaXQgNyBvZiB0aGUgcG9ydAorCSAqIHN0YXR1cyBhbmQgY29udHJvbCByZWdpc3RlciBpcyBhbHdheXMgc2V0IHRvIDEuICBTbyB3ZSB0cnkgdG8KKwkgKiB1c2UgdGhpcyB0byBvdXIgYWR2YW50YWdlLiAgQW5vdGhlciBjb21tb24gZmFpbHVyZSBtb2RlIHdoZW4KKwkgKiBhIG5vbmV4aXN0ZW50IHJlZ2lzdGVyIGlzIGFkZHJlc3NlZCBpcyB0byByZXR1cm4gYWxsIG9uZXMsIHNvCisJICogd2UgdGVzdCBmb3IgdGhhdCBhbHNvLgorCSAqLworCWZvciAocG9ydCA9IDA7IHBvcnQgPCAoaW9fc2l6ZSAtIFVTQlBPUlRTQzEpIC8gMjsgcG9ydCsrKSB7CisJCXVuc2lnbmVkIGludCBwb3J0c3RhdHVzOworCisJCXBvcnRzdGF0dXMgPSB1aGNpX3JlYWR3KHVoY2ksIFVTQlBPUlRTQzEgKyAocG9ydCAqIDIpKTsKKwkJaWYgKCEocG9ydHN0YXR1cyAmIDB4MDA4MCkgfHwgcG9ydHN0YXR1cyA9PSAweGZmZmYpCisJCQlicmVhazsKKwl9CisJaWYgKGRlYnVnKQorCQlkZXZfaW5mbyh1aGNpX2Rldih1aGNpKSwgImRldGVjdGVkICVkIHBvcnRzXG4iLCBwb3J0KTsKKworCS8qIEFueXRoaW5nIGdyZWF0ZXIgdGhhbiA3IGlzIHdlaXJkIHNvIHdlJ2xsIGlnbm9yZSBpdC4gKi8KKwlpZiAocG9ydCA+IFVIQ0lfUkhfTUFYQ0hJTEQpIHsKKwkJZGV2X2luZm8odWhjaV9kZXYodWhjaSksICJwb3J0IGNvdW50IG1pc2RldGVjdGVkPyAiCisJCQkJImZvcmNpbmcgdG8gMiBwb3J0c1xuIik7CisJCXBvcnQgPSAyOworCX0KKworCXJldHVybiBwb3J0OworfQorCiBzdGF0aWMgY29uc3QgY2hhciBoY2RfbmFtZVtdID0gInVoY2lfaGNkIjsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgdWhjaV9kcml2ZXIgPSB7Ci0JLmRlc2NyaXB0aW9uID0JCWhjZF9uYW1lLAotCS5wcm9kdWN0X2Rlc2MgPQkJIlVIQ0kgSG9zdCBDb250cm9sbGVyIiwKLQkuaGNkX3ByaXZfc2l6ZSA9CXNpemVvZihzdHJ1Y3QgdWhjaV9oY2QpLAotCi0JLyogR2VuZXJpYyBoYXJkd2FyZSBsaW5rYWdlICovCi0JLmlycSA9CQkJdWhjaV9pcnEsCi0JLmZsYWdzID0JCUhDRF9VU0IxMSwKLQotCS8qIEJhc2ljIGxpZmVjeWNsZSBvcGVyYXRpb25zICovCi0JLnJlc2V0ID0JCXVoY2lfaW5pdCwKLQkuc3RhcnQgPQkJdWhjaV9zdGFydCwKLSNpZmRlZiBDT05GSUdfUE0KLQkucGNpX3N1c3BlbmQgPQkJdWhjaV9wY2lfc3VzcGVuZCwKLQkucGNpX3Jlc3VtZSA9CQl1aGNpX3BjaV9yZXN1bWUsCi0JLmJ1c19zdXNwZW5kID0JCXVoY2lfcmhfc3VzcGVuZCwKLQkuYnVzX3Jlc3VtZSA9CQl1aGNpX3JoX3Jlc3VtZSwKKyNpZmRlZiBDT05GSUdfUENJCisjaW5jbHVkZSAidWhjaS1wY2kuYyIKKyNkZWZpbmUJUENJX0RSSVZFUgkJdWhjaV9wY2lfZHJpdmVyCiAjZW5kaWYKLQkuc3RvcCA9CQkJdWhjaV9zdG9wLAogCi0JLnVyYl9lbnF1ZXVlID0JCXVoY2lfdXJiX2VucXVldWUsCi0JLnVyYl9kZXF1ZXVlID0JCXVoY2lfdXJiX2RlcXVldWUsCi0KLQkuZW5kcG9pbnRfZGlzYWJsZSA9CXVoY2lfaGNkX2VuZHBvaW50X2Rpc2FibGUsCi0JLmdldF9mcmFtZV9udW1iZXIgPQl1aGNpX2hjZF9nZXRfZnJhbWVfbnVtYmVyLAotCi0JLmh1Yl9zdGF0dXNfZGF0YSA9CXVoY2lfaHViX3N0YXR1c19kYXRhLAotCS5odWJfY29udHJvbCA9CQl1aGNpX2h1Yl9jb250cm9sLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHVoY2lfcGNpX2lkc1tdID0geyB7Ci0JLyogaGFuZGxlIGFueSBVU0IgVUhDSSBjb250cm9sbGVyICovCi0JUENJX0RFVklDRV9DTEFTUyhQQ0lfQ0xBU1NfU0VSSUFMX1VTQl9VSENJLCB+MCksCi0JLmRyaXZlcl9kYXRhID0JKHVuc2lnbmVkIGxvbmcpICZ1aGNpX2RyaXZlciwKLQl9LCB7IC8qIGVuZDogYWxsIHplcm9lcyAqLyB9Ci19OwotCi1NT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgdWhjaV9wY2lfaWRzKTsKLQotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHVoY2lfcGNpX2RyaXZlciA9IHsKLQkubmFtZSA9CQkoY2hhciAqKWhjZF9uYW1lLAotCS5pZF90YWJsZSA9CXVoY2lfcGNpX2lkcywKLQotCS5wcm9iZSA9CXVzYl9oY2RfcGNpX3Byb2JlLAotCS5yZW1vdmUgPQl1c2JfaGNkX3BjaV9yZW1vdmUsCi0JLnNodXRkb3duID0JdWhjaV9zaHV0ZG93biwKLQotI2lmZGVmIENPTkZJR19QTV9TTEVFUAotCS5kcml2ZXIgPQl7Ci0JCS5wbSA9CSZ1c2JfaGNkX3BjaV9wbV9vcHMKLQl9LAorI2lmZGVmIENPTkZJR19TUEFSQ19MRU9OCisjaW5jbHVkZSAidWhjaS1ncmxpYi5jIgorI2RlZmluZSBQTEFURk9STV9EUklWRVIJCXVoY2lfZ3JsaWJfZHJpdmVyCiAjZW5kaWYKLX07Ci0gCisKKyNpZiAhZGVmaW5lZChQQ0lfRFJJVkVSKSAmJiAhZGVmaW5lZChQTEFURk9STV9EUklWRVIpCisjZXJyb3IgIm1pc3NpbmcgYnVzIGdsdWUgZm9yIHVoY2ktaGNkIgorI2VuZGlmCisKIHN0YXRpYyBpbnQgX19pbml0IHVoY2lfaGNkX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0dmFsID0gLUVOT01FTTsKQEAgLTk5MywxMyArODcxLDI3IEBACiAJaWYgKCF1aGNpX3VwX2NhY2hlcCkKIAkJZ290byB1cF9mYWlsZWQ7CiAKLQlyZXR2YWwgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZ1aGNpX3BjaV9kcml2ZXIpOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gaW5pdF9mYWlsZWQ7CisjaWZkZWYgUExBVEZPUk1fRFJJVkVSCisJcmV0dmFsID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZQTEFURk9STV9EUklWRVIpOworCWlmIChyZXR2YWwgPCAwKQorCQlnb3RvIGNsZWFuMDsKKyNlbmRpZgorCisjaWZkZWYgUENJX0RSSVZFUgorCXJldHZhbCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJlBDSV9EUklWRVIpOworCWlmIChyZXR2YWwgPCAwKQorCQlnb3RvIGNsZWFuMTsKKyNlbmRpZgogCiAJcmV0dXJuIDA7CiAKLWluaXRfZmFpbGVkOgorI2lmZGVmIFBDSV9EUklWRVIKK2NsZWFuMToKKyNlbmRpZgorI2lmZGVmIFBMQVRGT1JNX0RSSVZFUgorCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZQTEFURk9STV9EUklWRVIpOworY2xlYW4wOgorI2VuZGlmCiAJa21lbV9jYWNoZV9kZXN0cm95KHVoY2lfdXBfY2FjaGVwKTsKIAogdXBfZmFpbGVkOgpAQCAtMTAxNiw3ICs5MDgsMTIgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IHVoY2lfaGNkX2NsZWFudXAodm9pZCkgCiB7Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZ1aGNpX3BjaV9kcml2ZXIpOworI2lmZGVmIFBMQVRGT1JNX0RSSVZFUgorCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZQTEFURk9STV9EUklWRVIpOworI2VuZGlmCisjaWZkZWYgUENJX0RSSVZFUgorCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmUENJX0RSSVZFUik7CisjZW5kaWYKIAlrbWVtX2NhY2hlX2Rlc3Ryb3kodWhjaV91cF9jYWNoZXApOwogCWRlYnVnZnNfcmVtb3ZlKHVoY2lfZGVidWdmc19yb290KTsKIAlrZnJlZShlcnJidWYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5oIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5oCmluZGV4IDQ5YmYyNzkuLjdhZjJiNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmgKQEAgLTc4LDExICs3OCwxMSBAQAogI2RlZmluZSAgIFVTQlBPUlQxRU4JCTB4MDEKICNkZWZpbmUgICBVU0JQT1JUMkVOCQkweDAyCiAKLSNkZWZpbmUgVUhDSV9QVFJfQklUUwkJY3B1X3RvX2xlMzIoMHgwMDBGKQotI2RlZmluZSBVSENJX1BUUl9URVJNCQljcHVfdG9fbGUzMigweDAwMDEpCi0jZGVmaW5lIFVIQ0lfUFRSX1FICQljcHVfdG9fbGUzMigweDAwMDIpCi0jZGVmaW5lIFVIQ0lfUFRSX0RFUFRICQljcHVfdG9fbGUzMigweDAwMDQpCi0jZGVmaW5lIFVIQ0lfUFRSX0JSRUFEVEgJY3B1X3RvX2xlMzIoMHgwMDAwKQorI2RlZmluZSBVSENJX1BUUl9CSVRTKHVoY2kpCWNwdV90b19oYzMyKCh1aGNpKSwgMHgwMDBGKQorI2RlZmluZSBVSENJX1BUUl9URVJNKHVoY2kpCWNwdV90b19oYzMyKCh1aGNpKSwgMHgwMDAxKQorI2RlZmluZSBVSENJX1BUUl9RSCh1aGNpKQljcHVfdG9faGMzMigodWhjaSksIDB4MDAwMikKKyNkZWZpbmUgVUhDSV9QVFJfREVQVEgodWhjaSkJY3B1X3RvX2hjMzIoKHVoY2kpLCAweDAwMDQpCisjZGVmaW5lIFVIQ0lfUFRSX0JSRUFEVEgodWhjaSkJY3B1X3RvX2hjMzIoKHVoY2kpLCAweDAwMDApCiAKICNkZWZpbmUgVUhDSV9OVU1GUkFNRVMJCTEwMjQJLyogaW4gdGhlIGZyYW1lIGxpc3QgW2FycmF5XSAqLwogI2RlZmluZSBVSENJX01BWF9TT0ZfTlVNQkVSCTIwNDcJLyogaW4gYW4gU09GIHBhY2tldCAqLwpAQCAtOTksNiArOTksMjIgQEAKIAogCiAvKgorICogX19oYzMyIGFuZCBfX2hjMTYgYXJlICJIb3N0IENvbnRyb2xsZXIiIHR5cGVzLCB0aGV5IG1heSBiZSBlcXVpdmFsZW50IHRvCisgKiBfX2xlWFggKG5vcm1hbGx5KSBvciBfX2JlWFggKGdpdmVuIFVIQ0lfQklHX0VORElBTl9ERVNDKSwgZGVwZW5kaW5nIG9uCisgKiB0aGUgaG9zdCBjb250cm9sbGVyIGltcGxlbWVudGF0aW9uLgorICoKKyAqIFRvIGZhY2lsaXRhdGUgdGhlIHN0cm9uZ2VzdCBwb3NzaWJsZSBieXRlLW9yZGVyIGNoZWNraW5nIGZyb20gInNwYXJzZSIKKyAqIGFuZCBzbyBvbiwgd2UgdXNlIF9fbGVYWCB1bmxlc3MgdGhhdCdzIG5vdCBwcmFjdGljYWwuCisgKi8KKyNpZmRlZiBDT05GSUdfVVNCX1VIQ0lfQklHX0VORElBTl9ERVNDCit0eXBlZGVmIF9fdTMyIF9fYml0d2lzZSBfX2hjMzI7Cit0eXBlZGVmIF9fdTE2IF9fYml0d2lzZSBfX2hjMTY7CisjZWxzZQorI2RlZmluZSBfX2hjMzIJX19sZTMyCisjZGVmaW5lIF9faGMxNglfX2xlMTYKKyNlbmRpZgorCisvKgogICoJUXVldWUgSGVhZGVycwogICovCiAKQEAgLTEzMCw4ICsxNDYsOCBAQAogCiBzdHJ1Y3QgdWhjaV9xaCB7CiAJLyogSGFyZHdhcmUgZmllbGRzICovCi0JX19sZTMyIGxpbms7CQkJLyogTmV4dCBRSCBpbiB0aGUgc2NoZWR1bGUgKi8KLQlfX2xlMzIgZWxlbWVudDsJCQkvKiBRdWV1ZSBlbGVtZW50IChURCkgcG9pbnRlciAqLworCV9faGMzMiBsaW5rOwkJCS8qIE5leHQgUUggaW4gdGhlIHNjaGVkdWxlICovCisJX19oYzMyIGVsZW1lbnQ7CQkJLyogUXVldWUgZWxlbWVudCAoVEQpIHBvaW50ZXIgKi8KIAogCS8qIFNvZnR3YXJlIGZpZWxkcyAqLwogCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKQEAgLTE2OCwxNCArMTg0LDEwIEBACiAgKiBXZSBuZWVkIGEgc3BlY2lhbCBhY2Nlc3NvciBmb3IgdGhlIGVsZW1lbnQgcG9pbnRlciBiZWNhdXNlIGl0IGlzCiAgKiBzdWJqZWN0IHRvIGFzeW5jaHJvbm91cyB1cGRhdGVzIGJ5IHRoZSBjb250cm9sbGVyLgogICovCi1zdGF0aWMgaW5saW5lIF9fbGUzMiBxaF9lbGVtZW50KHN0cnVjdCB1aGNpX3FoICpxaCkgewotCV9fbGUzMiBlbGVtZW50ID0gcWgtPmVsZW1lbnQ7CisjZGVmaW5lIHFoX2VsZW1lbnQocWgpCQlBQ0NFU1NfT05DRSgocWgpLT5lbGVtZW50KQogCi0JYmFycmllcigpOwotCXJldHVybiBlbGVtZW50OwotfQotCi0jZGVmaW5lIExJTktfVE9fUUgocWgpCQkoVUhDSV9QVFJfUUggfCBjcHVfdG9fbGUzMigocWgpLT5kbWFfaGFuZGxlKSkKKyNkZWZpbmUgTElOS19UT19RSCh1aGNpLCBxaCkJKFVIQ0lfUFRSX1FIKCh1aGNpKSkgfCBcCisJCQkJY3B1X3RvX2hjMzIoKHVoY2kpLCAocWgpLT5kbWFfaGFuZGxlKSkKIAogCiAvKgpAQCAtMjEyLDcgKzIyNCw3IEBACiAvKgogICogZm9yIFREIDxpbmZvPjogKGEuay5hLiBUb2tlbikKICAqLwotI2RlZmluZSB0ZF90b2tlbih0ZCkJCWxlMzJfdG9fY3B1KCh0ZCktPnRva2VuKQorI2RlZmluZSB0ZF90b2tlbih1aGNpLCB0ZCkJaGMzMl90b19jcHUoKHVoY2kpLCAodGQpLT50b2tlbikKICNkZWZpbmUgVERfVE9LRU5fREVWQUREUl9TSElGVAk4CiAjZGVmaW5lIFREX1RPS0VOX1RPR0dMRV9TSElGVAkxOQogI2RlZmluZSBURF9UT0tFTl9UT0dHTEUJCSgxIDw8IDE5KQpAQCAtMjQ1LDEwICsyNTcsMTAgQEAKICAqLwogc3RydWN0IHVoY2lfdGQgewogCS8qIEhhcmR3YXJlIGZpZWxkcyAqLwotCV9fbGUzMiBsaW5rOwotCV9fbGUzMiBzdGF0dXM7Ci0JX19sZTMyIHRva2VuOwotCV9fbGUzMiBidWZmZXI7CisJX19oYzMyIGxpbms7CisJX19oYzMyIHN0YXR1czsKKwlfX2hjMzIgdG9rZW47CisJX19oYzMyIGJ1ZmZlcjsKIAogCS8qIFNvZnR3YXJlIGZpZWxkcyAqLwogCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKQEAgLTI2MywxNCArMjc1LDEwIEBACiAgKiBXZSBuZWVkIGEgc3BlY2lhbCBhY2Nlc3NvciBmb3IgdGhlIGNvbnRyb2wvc3RhdHVzIHdvcmQgYmVjYXVzZSBpdCBpcwogICogc3ViamVjdCB0byBhc3luY2hyb25vdXMgdXBkYXRlcyBieSB0aGUgY29udHJvbGxlci4KICAqLwotc3RhdGljIGlubGluZSB1MzIgdGRfc3RhdHVzKHN0cnVjdCB1aGNpX3RkICp0ZCkgewotCV9fbGUzMiBzdGF0dXMgPSB0ZC0+c3RhdHVzOworI2RlZmluZSB0ZF9zdGF0dXModWhjaSwgdGQpCQloYzMyX3RvX2NwdSgodWhjaSksIFwKKwkJCQkJCUFDQ0VTU19PTkNFKCh0ZCktPnN0YXR1cykpCiAKLQliYXJyaWVyKCk7Ci0JcmV0dXJuIGxlMzJfdG9fY3B1KHN0YXR1cyk7Ci19Ci0KLSNkZWZpbmUgTElOS19UT19URCh0ZCkJCShjcHVfdG9fbGUzMigodGQpLT5kbWFfaGFuZGxlKSkKKyNkZWZpbmUgTElOS19UT19URCh1aGNpLCB0ZCkJCShjcHVfdG9faGMzMigodWhjaSksICh0ZCktPmRtYV9oYW5kbGUpKQogCiAKIC8qCkBAIC0zODAsNiArMzg4LDkgQEAKIAkvKiBHcmFiYmVkIGZyb20gUENJICovCiAJdW5zaWduZWQgbG9uZyBpb19hZGRyOwogCisJLyogVXNlZCB3aGVuIHJlZ2lzdGVycyBhcmUgbWVtb3J5IG1hcHBlZCAqLworCXZvaWQgX19pb21lbSAqcmVnczsKKwogCXN0cnVjdCBkbWFfcG9vbCAqcWhfcG9vbDsKIAlzdHJ1Y3QgZG1hX3Bvb2wgKnRkX3Bvb2w7CiAKQEAgLTM5MCw3ICs0MDEsNyBAQAogCXNwaW5sb2NrX3QgbG9jazsKIAogCWRtYV9hZGRyX3QgZnJhbWVfZG1hX2hhbmRsZTsJLyogSGFyZHdhcmUgZnJhbWUgbGlzdCAqLwotCV9fbGUzMiAqZnJhbWU7CisJX19oYzMyICpmcmFtZTsKIAl2b2lkICoqZnJhbWVfY3B1OwkJLyogQ1BVJ3MgZnJhbWUgbGlzdCAqLwogCiAJZW51bSB1aGNpX3JoX3N0YXRlIHJoX3N0YXRlOwpAQCAtNDE1LDYgKzQyNiwxMiBAQAogCiAJc3RydWN0IHRpbWVyX2xpc3QgZnNicl90aW1lcjsJCS8qIEZvciB0dXJuaW5nIG9mZiBGQlNSICovCiAKKwkvKiBTaWxpY29uIHF1aXJrcyAqLworCXVuc2lnbmVkIGludCBvY19sb3c6MTsJCQkvKiBPdmVyQ3VycmVudCBiaXQgYWN0aXZlIGxvdyAqLworCXVuc2lnbmVkIGludCB3YWl0X2Zvcl9ocDoxOwkJLyogV2FpdCBmb3IgSFAgcG9ydCByZXNldCAqLworCXVuc2lnbmVkIGludCBiaWdfZW5kaWFuX21taW86MTsJCS8qIEJpZyBlbmRpYW4gcmVnaXN0ZXJzICovCisJdW5zaWduZWQgaW50IGJpZ19lbmRpYW5fZGVzYzoxOwkJLyogQmlnIGVuZGlhbiBkZXNjcmlwdG9ycyAqLworCiAJLyogU3VwcG9ydCBmb3IgcG9ydCBzdXNwZW5kL3Jlc3VtZS9yZXNldCAqLwogCXVuc2lnbmVkIGxvbmcgcG9ydF9jX3N1c3BlbmQ7CQkvKiBCaXQtYXJyYXlzIG9mIHBvcnRzICovCiAJdW5zaWduZWQgbG9uZyByZXN1bWluZ19wb3J0czsKQEAgLTQyOSw2ICs0NDYsMTYgQEAKIAogCWludCB0b3RhbF9sb2FkOwkJCQkvKiBTdW0gb2YgYXJyYXkgdmFsdWVzICovCiAJc2hvcnQgbG9hZFtNQVhfUEhBU0VdOwkJCS8qIFBlcmlvZGljIGFsbG9jYXRpb25zICovCisKKwkvKiBSZXNldCBob3N0IGNvbnRyb2xsZXIgKi8KKwl2b2lkCSgqcmVzZXRfaGMpIChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpOworCWludAkoKmNoZWNrX2FuZF9yZXNldF9oYykgKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSk7CisJLyogY29uZmlndXJlX2hjIHNob3VsZCBwZXJmb3JtIGFyY2ggc3BlY2lmaWMgc2V0dGluZ3MsIGlmIG5lZWRlZCAqLworCXZvaWQJKCpjb25maWd1cmVfaGMpIChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpOworCS8qIENoZWNrIGZvciBicm9rZW4gcmVzdW1lIGRldGVjdCBpbnRlcnJ1cHRzICovCisJaW50CSgqcmVzdW1lX2RldGVjdF9pbnRlcnJ1cHRzX2FyZV9icm9rZW4pIChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpOworCS8qIENoZWNrIGZvciBicm9rZW4gZ2xvYmFsIHN1c3BlbmQgKi8KKwlpbnQJKCpnbG9iYWxfc3VzcGVuZF9tb2RlX2lzX2Jyb2tlbikgKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSk7CiB9OwogCiAvKiBDb252ZXJ0IGJldHdlZW4gYSB1c2JfaGNkIHBvaW50ZXIgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHVoY2lfaGNkICovCkBAIC00NjcsNCArNDk0LDE3MSBAQAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0dFTkVTWVMJCTB4MTdhMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0dMODgwU19VSENJCTB4ODA4MwogCisvKgorICogRnVuY3Rpb25zIHVzZWQgdG8gYWNjZXNzIGNvbnRyb2xsZXIgcmVnaXN0ZXJzLiBUaGUgVUNISSBzcGVjIHNheXMgdGhhdCBob3N0CisgKiBjb250cm9sbGVyIEkvTyByZWdpc3RlcnMgYXJlIG1hcHBlZCBpbnRvIFBDSSBJL08gc3BhY2UuIEZvciBub24tUENJIGhvc3RzCisgKiB3ZSB1c2UgbWVtb3J5IG1hcHBlZCByZWdpc3RlcnMuCisgKi8KKworI2lmbmRlZiBDT05GSUdfVVNCX1VIQ0lfU1VQUE9SVF9OT05fUENJX0hDCisvKiBTdXBwb3J0IFBDSSBvbmx5ICovCitzdGF0aWMgaW5saW5lIHUzMiB1aGNpX3JlYWRsKGNvbnN0IHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgaW50IHJlZykKK3sKKwlyZXR1cm4gaW5sKHVoY2ktPmlvX2FkZHIgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdWhjaV93cml0ZWwoY29uc3Qgc3RydWN0IHVoY2lfaGNkICp1aGNpLCB1MzIgdmFsLCBpbnQgcmVnKQoreworCW91dGwodmFsLCB1aGNpLT5pb19hZGRyICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB1MTYgdWhjaV9yZWFkdyhjb25zdCBzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIGludCByZWcpCit7CisJcmV0dXJuIGludyh1aGNpLT5pb19hZGRyICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVoY2lfd3JpdGV3KGNvbnN0IHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgdTE2IHZhbCwgaW50IHJlZykKK3sKKwlvdXR3KHZhbCwgdWhjaS0+aW9fYWRkciArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggdWhjaV9yZWFkYihjb25zdCBzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIGludCByZWcpCit7CisJcmV0dXJuIGluYih1aGNpLT5pb19hZGRyICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVoY2lfd3JpdGViKGNvbnN0IHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgdTggdmFsLCBpbnQgcmVnKQoreworCW91dGIodmFsLCB1aGNpLT5pb19hZGRyICsgcmVnKTsKK30KKworI2Vsc2UKKy8qIFN1cHBvcnQgbm9uLVBDSSBob3N0IGNvbnRyb2xsZXJzICovCisjaWZkZWYgQ09ORklHX1BDSQorLyogU3VwcG9ydCBQQ0kgYW5kIG5vbi1QQ0kgaG9zdCBjb250cm9sbGVycyAqLworI2RlZmluZSB1aGNpX2hhc19wY2lfcmVnaXN0ZXJzKHUpCSgodSktPmlvX2FkZHIgIT0gMCkKKyNlbHNlCisvKiBTdXBwb3J0IG5vbi1QQ0kgaG9zdCBjb250cm9sbGVycyBvbmx5ICovCisjZGVmaW5lIHVoY2lfaGFzX3BjaV9yZWdpc3RlcnModSkJMAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX1VIQ0lfQklHX0VORElBTl9NTUlPCisvKiBTdXBwb3J0IChub24tUENJKSBiaWcgZW5kaWFuIGhvc3QgY29udHJvbGxlcnMgKi8KKyNkZWZpbmUgdWhjaV9iaWdfZW5kaWFuX21taW8odSkJCSgodSktPmJpZ19lbmRpYW5fbW1pbykKKyNlbHNlCisjZGVmaW5lIHVoY2lfYmlnX2VuZGlhbl9tbWlvKHUpCQkwCisjZW5kaWYKKworc3RhdGljIGlubGluZSB1MzIgdWhjaV9yZWFkbChjb25zdCBzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIGludCByZWcpCit7CisJaWYgKHVoY2lfaGFzX3BjaV9yZWdpc3RlcnModWhjaSkpCisJCXJldHVybiBpbmwodWhjaS0+aW9fYWRkciArIHJlZyk7CisjaWZkZWYgQ09ORklHX1VTQl9VSENJX0JJR19FTkRJQU5fTU1JTworCWVsc2UgaWYgKHVoY2lfYmlnX2VuZGlhbl9tbWlvKHVoY2kpKQorCQlyZXR1cm4gcmVhZGxfYmUodWhjaS0+cmVncyArIHJlZyk7CisjZW5kaWYKKwllbHNlCisJCXJldHVybiByZWFkbCh1aGNpLT5yZWdzICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVoY2lfd3JpdGVsKGNvbnN0IHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgdTMyIHZhbCwgaW50IHJlZykKK3sKKwlpZiAodWhjaV9oYXNfcGNpX3JlZ2lzdGVycyh1aGNpKSkKKwkJb3V0bCh2YWwsIHVoY2ktPmlvX2FkZHIgKyByZWcpOworI2lmZGVmIENPTkZJR19VU0JfVUhDSV9CSUdfRU5ESUFOX01NSU8KKwllbHNlIGlmICh1aGNpX2JpZ19lbmRpYW5fbW1pbyh1aGNpKSkKKwkJd3JpdGVsX2JlKHZhbCwgdWhjaS0+cmVncyArIHJlZyk7CisjZW5kaWYKKwllbHNlCisJCXdyaXRlbCh2YWwsIHVoY2ktPnJlZ3MgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHUxNiB1aGNpX3JlYWR3KGNvbnN0IHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgaW50IHJlZykKK3sKKwlpZiAodWhjaV9oYXNfcGNpX3JlZ2lzdGVycyh1aGNpKSkKKwkJcmV0dXJuIGludyh1aGNpLT5pb19hZGRyICsgcmVnKTsKKyNpZmRlZiBDT05GSUdfVVNCX1VIQ0lfQklHX0VORElBTl9NTUlPCisJZWxzZSBpZiAodWhjaV9iaWdfZW5kaWFuX21taW8odWhjaSkpCisJCXJldHVybiByZWFkd19iZSh1aGNpLT5yZWdzICsgcmVnKTsKKyNlbmRpZgorCWVsc2UKKwkJcmV0dXJuIHJlYWR3KHVoY2ktPnJlZ3MgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdWhjaV93cml0ZXcoY29uc3Qgc3RydWN0IHVoY2lfaGNkICp1aGNpLCB1MTYgdmFsLCBpbnQgcmVnKQoreworCWlmICh1aGNpX2hhc19wY2lfcmVnaXN0ZXJzKHVoY2kpKQorCQlvdXR3KHZhbCwgdWhjaS0+aW9fYWRkciArIHJlZyk7CisjaWZkZWYgQ09ORklHX1VTQl9VSENJX0JJR19FTkRJQU5fTU1JTworCWVsc2UgaWYgKHVoY2lfYmlnX2VuZGlhbl9tbWlvKHVoY2kpKQorCQl3cml0ZXdfYmUodmFsLCB1aGNpLT5yZWdzICsgcmVnKTsKKyNlbmRpZgorCWVsc2UKKwkJd3JpdGV3KHZhbCwgdWhjaS0+cmVncyArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggdWhjaV9yZWFkYihjb25zdCBzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIGludCByZWcpCit7CisJaWYgKHVoY2lfaGFzX3BjaV9yZWdpc3RlcnModWhjaSkpCisJCXJldHVybiBpbmIodWhjaS0+aW9fYWRkciArIHJlZyk7CisjaWZkZWYgQ09ORklHX1VTQl9VSENJX0JJR19FTkRJQU5fTU1JTworCWVsc2UgaWYgKHVoY2lfYmlnX2VuZGlhbl9tbWlvKHVoY2kpKQorCQlyZXR1cm4gcmVhZGJfYmUodWhjaS0+cmVncyArIHJlZyk7CisjZW5kaWYKKwllbHNlCisJCXJldHVybiByZWFkYih1aGNpLT5yZWdzICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVoY2lfd3JpdGViKGNvbnN0IHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgdTggdmFsLCBpbnQgcmVnKQoreworCWlmICh1aGNpX2hhc19wY2lfcmVnaXN0ZXJzKHVoY2kpKQorCQlvdXRiKHZhbCwgdWhjaS0+aW9fYWRkciArIHJlZyk7CisjaWZkZWYgQ09ORklHX1VTQl9VSENJX0JJR19FTkRJQU5fTU1JTworCWVsc2UgaWYgKHVoY2lfYmlnX2VuZGlhbl9tbWlvKHVoY2kpKQorCQl3cml0ZWJfYmUodmFsLCB1aGNpLT5yZWdzICsgcmVnKTsKKyNlbmRpZgorCWVsc2UKKwkJd3JpdGViKHZhbCwgdWhjaS0+cmVncyArIHJlZyk7Cit9CisjZW5kaWYgLyogQ09ORklHX1VTQl9VSENJX1NVUFBPUlRfTk9OX1BDSV9IQyAqLworCisvKgorICogVGhlIEdSTElCIEdSVVNCSEMgY29udHJvbGxlciBjYW4gdXNlIGJpZyBlbmRpYW4gZm9ybWF0IGZvciBpdHMgZGVzY3JpcHRvcnMuCisgKgorICogVUhDSSBjb250cm9sbGVycyBhY2Nlc3NlZCB0aHJvdWdoIFBDSSB3b3JrIG5vcm1hbGx5IChsaXR0bGUtZW5kaWFuCisgKiBldmVyeXdoZXJlKSwgc28gd2UgZG9uJ3QgYm90aGVyIHN1cHBvcnRpbmcgYSBCRS1vbmx5IG1vZGUuCisgKi8KKyNpZmRlZiBDT05GSUdfVVNCX1VIQ0lfQklHX0VORElBTl9ERVNDCisjZGVmaW5lIHVoY2lfYmlnX2VuZGlhbl9kZXNjKHUpCQkoKHUpLT5iaWdfZW5kaWFuX2Rlc2MpCisKKy8qIGNwdSB0byB1aGNpICovCitzdGF0aWMgaW5saW5lIF9faGMzMiBjcHVfdG9faGMzMihjb25zdCBzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIGNvbnN0IHUzMiB4KQoreworCXJldHVybiB1aGNpX2JpZ19lbmRpYW5fZGVzYyh1aGNpKQorCQk/IChfX2ZvcmNlIF9faGMzMiljcHVfdG9fYmUzMih4KQorCQk6IChfX2ZvcmNlIF9faGMzMiljcHVfdG9fbGUzMih4KTsKK30KKworLyogdWhjaSB0byBjcHUgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIGhjMzJfdG9fY3B1KGNvbnN0IHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgY29uc3QgX19oYzMyIHgpCit7CisJcmV0dXJuIHVoY2lfYmlnX2VuZGlhbl9kZXNjKHVoY2kpCisJCT8gYmUzMl90b19jcHUoKF9fZm9yY2UgX19iZTMyKXgpCisJCTogbGUzMl90b19jcHUoKF9fZm9yY2UgX19sZTMyKXgpOworfQorCisjZWxzZQorLyogY3B1IHRvIHVoY2kgKi8KK3N0YXRpYyBpbmxpbmUgX19oYzMyIGNwdV90b19oYzMyKGNvbnN0IHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgY29uc3QgdTMyIHgpCit7CisJcmV0dXJuIGNwdV90b19sZTMyKHgpOworfQorCisvKiB1aGNpIHRvIGNwdSAqLworc3RhdGljIGlubGluZSB1MzIgaGMzMl90b19jcHUoY29uc3Qgc3RydWN0IHVoY2lfaGNkICp1aGNpLCBjb25zdCBfX2hjMzIgeCkKK3sKKwlyZXR1cm4gbGUzMl90b19jcHUoeCk7Cit9CisjZW5kaWYKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaHViLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaHViLmMKaW5kZXggNmQ1OWMwZi4uMDQ1Y2RlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWh1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1odWIuYwpAQCAtNDQsNyArNDQsNyBAQAogCWludCBwb3J0OwogCiAJZm9yIChwb3J0ID0gMDsgcG9ydCA8IHVoY2ktPnJoX251bXBvcnRzOyArK3BvcnQpIHsKLQkJaWYgKChpbncodWhjaS0+aW9fYWRkciArIFVTQlBPUlRTQzEgKyBwb3J0ICogMikgJgorCQlpZiAoKHVoY2lfcmVhZHcodWhjaSwgVVNCUE9SVFNDMSArIHBvcnQgKiAyKSAmCiAJCQkJKFVTQlBPUlRTQ19DQ1MgfCBSV0NfQklUUykpIHx8CiAJCQkJdGVzdF9iaXQocG9ydCwgJnVoY2ktPnBvcnRfY19zdXNwZW5kKSkKIAkJCXJldHVybiAxOwpAQCAtNjgsNyArNjgsNyBAQAogCiAJKmJ1ZiA9IDA7CiAJZm9yIChwb3J0ID0gMDsgcG9ydCA8IHVoY2ktPnJoX251bXBvcnRzOyArK3BvcnQpIHsKLQkJaWYgKChpbncodWhjaS0+aW9fYWRkciArIFVTQlBPUlRTQzEgKyBwb3J0ICogMikgJiBtYXNrKSB8fAorCQlpZiAoKHVoY2lfcmVhZHcodWhjaSwgVVNCUE9SVFNDMSArIHBvcnQgKiAyKSAmIG1hc2spIHx8CiAJCQkJdGVzdF9iaXQocG9ydCwgJnVoY2ktPnBvcnRfY19zdXNwZW5kKSkKIAkJCSpidWYgfD0gKDEgPDwgKHBvcnQgKyAxKSk7CiAJfQpAQCAtNzgsMTcgKzc4LDE3IEBACiAjZGVmaW5lIE9LKHgpCQkJbGVuID0gKHgpOyBicmVhawogCiAjZGVmaW5lIENMUl9SSF9QT1JUU1RBVCh4KSBcCi0Jc3RhdHVzID0gaW53KHBvcnRfYWRkcik7IFwKKwlzdGF0dXMgPSB1aGNpX3JlYWR3KHVoY2ksIHBvcnRfYWRkcik7CVwKIAlzdGF0dXMgJj0gfihSV0NfQklUU3xXWl9CSVRTKTsgXAogCXN0YXR1cyAmPSB+KHgpOyBcCiAJc3RhdHVzIHw9IFJXQ19CSVRTICYgKHgpOyBcCi0Jb3V0dyhzdGF0dXMsIHBvcnRfYWRkcikKKwl1aGNpX3dyaXRldyh1aGNpLCBzdGF0dXMsIHBvcnRfYWRkcikKIAogI2RlZmluZSBTRVRfUkhfUE9SVFNUQVQoeCkgXAotCXN0YXR1cyA9IGludyhwb3J0X2FkZHIpOyBcCisJc3RhdHVzID0gdWhjaV9yZWFkdyh1aGNpLCBwb3J0X2FkZHIpOwlcCiAJc3RhdHVzIHw9ICh4KTsgXAogCXN0YXR1cyAmPSB+KFJXQ19CSVRTfFdaX0JJVFMpOyBcCi0Jb3V0dyhzdGF0dXMsIHBvcnRfYWRkcikKKwl1aGNpX3dyaXRldyh1aGNpLCBzdGF0dXMsIHBvcnRfYWRkcikKIAogLyogVUhDSSBjb250cm9sbGVycyBkb24ndCBhdXRvbWF0aWNhbGx5IHN0b3AgcmVzdW1lIHNpZ25hbGxpbmcgYWZ0ZXIgMjAgbXNlYywKICAqIHNvIHdlIGhhdmUgdG8gcG9sbCBhbmQgY2hlY2sgdGltZW91dHMgaW4gb3JkZXIgdG8gdGFrZSBjYXJlIG9mIGl0LgpAQCAtOTksNyArOTksNyBAQAogCWludCBzdGF0dXM7CiAJaW50IGk7CiAKLQlpZiAoaW53KHBvcnRfYWRkcikgJiBTVVNQRU5EX0JJVFMpIHsKKwlpZiAodWhjaV9yZWFkdyh1aGNpLCBwb3J0X2FkZHIpICYgU1VTUEVORF9CSVRTKSB7CiAJCUNMUl9SSF9QT1JUU1RBVChTVVNQRU5EX0JJVFMpOwogCQlpZiAodGVzdF9iaXQocG9ydCwgJnVoY2ktPnJlc3VtaW5nX3BvcnRzKSkKIAkJCXNldF9iaXQocG9ydCwgJnVoY2ktPnBvcnRfY19zdXNwZW5kKTsKQEAgLTExMCw3ICsxMTAsNyBAQAogCQkgKiBFeHBlcmltZW50cyBzaG93IHRoYXQgc29tZSBjb250cm9sbGVycyB0YWtlIGxvbmdlciwgc28KIAkJICogd2UnbGwgcG9sbCBmb3IgY29tcGxldGlvbi4gKi8KIAkJZm9yIChpID0gMDsgaSA8IDEwOyArK2kpIHsKLQkJCWlmICghKGludyhwb3J0X2FkZHIpICYgU1VTUEVORF9CSVRTKSkKKwkJCWlmICghKHVoY2lfcmVhZHcodWhjaSwgcG9ydF9hZGRyKSAmIFNVU1BFTkRfQklUUykpCiAJCQkJYnJlYWs7CiAJCQl1ZGVsYXkoMSk7CiAJCX0KQEAgLTEyMSwxMiArMTIxLDEyIEBACiAvKiBXYWl0IGZvciB0aGUgVUhDSSBjb250cm9sbGVyIGluIEhQJ3MgaUxPMiBzZXJ2ZXIgbWFuYWdlbWVudCBjaGlwLgogICogSXQgY2FuIHRha2UgdXAgdG8gMjUwIHVzIHRvIGZpbmlzaCBhIHJlc2V0IGFuZCBzZXQgdGhlIENTQyBiaXQuCiAgKi8KLXN0YXRpYyB2b2lkIHdhaXRfZm9yX0hQKHVuc2lnbmVkIGxvbmcgcG9ydF9hZGRyKQorc3RhdGljIHZvaWQgd2FpdF9mb3JfSFAoc3RydWN0IHVoY2lfaGNkICp1aGNpLCB1bnNpZ25lZCBsb25nIHBvcnRfYWRkcikKIHsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDEwOyBpIDwgMjUwOyBpICs9IDEwKSB7Ci0JCWlmIChpbncocG9ydF9hZGRyKSAmIFVTQlBPUlRTQ19DU0MpCisJCWlmICh1aGNpX3JlYWR3KHVoY2ksIHBvcnRfYWRkcikgJiBVU0JQT1JUU0NfQ1NDKQogCQkJcmV0dXJuOwogCQl1ZGVsYXkoMTApOwogCX0KQEAgLTE0MCw4ICsxNDAsOCBAQAogCWludCBzdGF0dXM7CiAKIAlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgdWhjaS0+cmhfbnVtcG9ydHM7ICsrcG9ydCkgewotCQlwb3J0X2FkZHIgPSB1aGNpLT5pb19hZGRyICsgVVNCUE9SVFNDMSArIDIgKiBwb3J0OwotCQlzdGF0dXMgPSBpbncocG9ydF9hZGRyKTsKKwkJcG9ydF9hZGRyID0gVVNCUE9SVFNDMSArIDIgKiBwb3J0OworCQlzdGF0dXMgPSB1aGNpX3JlYWR3KHVoY2ksIHBvcnRfYWRkcik7CiAJCWlmICh1bmxpa2VseShzdGF0dXMgJiBVU0JQT1JUU0NfUFIpKSB7CiAJCQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCB1aGNpLT5wb3J0c190aW1lb3V0KSkgewogCQkJCUNMUl9SSF9QT1JUU1RBVChVU0JQT1JUU0NfUFIpOwpAQCAtMTQ5LDkgKzE0OSw4IEBACiAKIAkJCQkvKiBIUCdzIHNlcnZlciBtYW5hZ2VtZW50IGNoaXAgcmVxdWlyZXMKIAkJCQkgKiBhIGxvbmdlciBkZWxheS4gKi8KLQkJCQlpZiAodG9fcGNpX2Rldih1aGNpX2Rldih1aGNpKSktPnZlbmRvciA9PQotCQkJCQkJUENJX1ZFTkRPUl9JRF9IUCkKLQkJCQkJd2FpdF9mb3JfSFAocG9ydF9hZGRyKTsKKwkJCQlpZiAodWhjaS0+d2FpdF9mb3JfaHApCisJCQkJCXdhaXRfZm9yX0hQKHVoY2ksIHBvcnRfYWRkcik7CiAKIAkJCQkvKiBJZiB0aGUgcG9ydCB3YXMgZW5hYmxlZCBiZWZvcmUsIHR1cm5pbmcKIAkJCQkgKiByZXNldCBvbiBjYXVzZWQgYSBwb3J0IGVuYWJsZSBjaGFuZ2UuCkBAIC0yNDIsNyArMjQxLDcgQEAKIAlzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kgPSBoY2RfdG9fdWhjaShoY2QpOwogCWludCBzdGF0dXMsIGxzdGF0dXMsIHJldHZhbCA9IDAsIGxlbiA9IDA7CiAJdW5zaWduZWQgaW50IHBvcnQgPSB3SW5kZXggLSAxOwotCXVuc2lnbmVkIGxvbmcgcG9ydF9hZGRyID0gdWhjaS0+aW9fYWRkciArIFVTQlBPUlRTQzEgKyAyICogcG9ydDsKKwl1bnNpZ25lZCBsb25nIHBvcnRfYWRkciA9IFVTQlBPUlRTQzEgKyAyICogcG9ydDsKIAl1MTYgd1BvcnRDaGFuZ2UsIHdQb3J0U3RhdHVzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTI2MCwxNCArMjU5LDEzIEBACiAJCQlnb3RvIGVycjsKIAogCQl1aGNpX2NoZWNrX3BvcnRzKHVoY2kpOwotCQlzdGF0dXMgPSBpbncocG9ydF9hZGRyKTsKKwkJc3RhdHVzID0gdWhjaV9yZWFkdyh1aGNpLCBwb3J0X2FkZHIpOwogCiAJCS8qIEludGVsIGNvbnRyb2xsZXJzIHJlcG9ydCB0aGUgT3ZlckN1cnJlbnQgYml0IGFjdGl2ZSBvbi4KIAkJICogVklBIGNvbnRyb2xsZXJzIHJlcG9ydCBpdCBhY3RpdmUgb2ZmLCBzbyB3ZSdsbCBhZGp1c3QgdGhlCiAJCSAqIGJpdCB2YWx1ZS4gIChJdCdzIG5vdCBzdGFuZGFyZGl6ZWQgaW4gdGhlIFVIQ0kgc3BlYy4pCiAJCSAqLwotCQlpZiAodG9fcGNpX2RldihoY2QtPnNlbGYuY29udHJvbGxlciktPnZlbmRvciA9PQotCQkJCVBDSV9WRU5ET1JfSURfVklBKQorCQlpZiAodWhjaS0+b2NfbG93KQogCQkJc3RhdHVzIF49IFVTQlBPUlRTQ19PQzsKIAogCQkvKiBVSENJIGRvZXNuJ3Qgc3VwcG9ydCBDX1JFU0VUIChhbHdheXMgZmFsc2UpICovCkBAIC0zNTgsNyArMzU2LDcgQEAKIAkJCUNMUl9SSF9QT1JUU1RBVChVU0JQT1JUU0NfUEVDKTsKIAkJCU9LKDApOwogCQljYXNlIFVTQl9QT1JUX0ZFQVRfU1VTUEVORDoKLQkJCWlmICghKGludyhwb3J0X2FkZHIpICYgVVNCUE9SVFNDX1NVU1ApKSB7CisJCQlpZiAoISh1aGNpX3JlYWR3KHVoY2ksIHBvcnRfYWRkcikgJiBVU0JQT1JUU0NfU1VTUCkpIHsKIAogCQkJCS8qIE1ha2UgY2VydGFpbiB0aGUgcG9ydCBpc24ndCBzdXNwZW5kZWQgKi8KIAkJCQl1aGNpX2ZpbmlzaF9zdXNwZW5kKHVoY2ksIHBvcnQsIHBvcnRfYWRkcik7CkBAIC0zNzAsNyArMzY4LDggQEAKIAkJCQkgKiBpZiB0aGUgcG9ydCBpcyBkaXNhYmxlZC4gIFdoZW4gdGhpcyBoYXBwZW5zCiAJCQkJICoganVzdCBza2lwIHRoZSBSZXN1bWUgc2lnbmFsbGluZy4KIAkJCQkgKi8KLQkJCQlpZiAoIShpbncocG9ydF9hZGRyKSAmIFVTQlBPUlRTQ19SRCkpCisJCQkJaWYgKCEodWhjaV9yZWFkdyh1aGNpLCBwb3J0X2FkZHIpICYKKwkJCQkJCVVTQlBPUlRTQ19SRCkpCiAJCQkJCXVoY2lfZmluaXNoX3N1c3BlbmQodWhjaSwgcG9ydCwKIAkJCQkJCQlwb3J0X2FkZHIpOwogCQkJCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1wY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzAwYmQyZjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktcGNpLmMKQEAgLTAsMCArMSwzMDEgQEAKKy8qCisgKiBVSENJIEhDRCAoSG9zdCBDb250cm9sbGVyIERyaXZlcikgUENJIEJ1cyBHbHVlLgorICoKKyAqIEV4dHJhY3RlZCBmcm9tIHVoY2ktaGNkLmM6CisgKiBNYWludGFpbmVyOiBBbGFuIFN0ZXJuIDxzdGVybkByb3dsYW5kLmhhcnZhcmQuZWR1PgorICoKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBMaW51cyBUb3J2YWxkcworICogKEMpIENvcHlyaWdodCAxOTk5LTIwMDIgSm9oYW5uZXMgRXJkZmVsdCwgam9oYW5uZXNAZXJkZmVsdC5jb20KKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBSYW5keSBEdW5sYXAKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBHZW9yZyBBY2hlciwgYWNoZXJAaW4udHVtLmRlCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgRGV0aSBGbGllZ2wsIGRldGlAZmxpZWdsLmRlCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgVGhvbWFzIFNhaWxlciwgc2FpbGVyQGlmZS5lZS5ldGh6LmNoCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgUm9tYW4gV2Vpc3NnYWVyYmVyLCB3ZWlzc2dAdmllbm5hLmF0CisgKiAoQykgQ29weXJpZ2h0IDIwMDAgWWdnZHJhc2lsIENvbXB1dGluZywgSW5jLiAocG9ydCBvZiBuZXcgUENJIGludGVyZmFjZQorICogICAgICAgICAgICAgICBzdXBwb3J0IGZyb20gdXNiLW9oY2kuYyBieSBBZGFtIFJpY2h0ZXIsIGFkYW1AeWdnZHJhc2lsLmNvbSkuCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgR3JlZ29yeSBQLiBTbWl0aCAoZnJvbSB1c2Itb2hjaS5jKQorICogKEMpIENvcHlyaWdodCAyMDA0LTIwMDcgQWxhbiBTdGVybiwgc3Rlcm5Acm93bGFuZC5oYXJ2YXJkLmVkdQorICovCisKKyNpbmNsdWRlICJwY2ktcXVpcmtzLmgiCisKKy8qCisgKiBNYWtlIHN1cmUgdGhlIGNvbnRyb2xsZXIgaXMgY29tcGxldGVseSBpbmFjdGl2ZSwgdW5hYmxlIHRvCisgKiBnZW5lcmF0ZSBpbnRlcnJ1cHRzIG9yIGRvIERNQS4KKyAqLworc3RhdGljIHZvaWQgdWhjaV9wY2lfcmVzZXRfaGMoc3RydWN0IHVoY2lfaGNkICp1aGNpKQoreworCXVoY2lfcmVzZXRfaGModG9fcGNpX2Rldih1aGNpX2Rldih1aGNpKSksIHVoY2ktPmlvX2FkZHIpOworfQorCisvKgorICogSW5pdGlhbGl6ZSBhIGNvbnRyb2xsZXIgdGhhdCB3YXMgbmV3bHkgZGlzY292ZXJlZCBvciBoYXMganVzdCBiZWVuCisgKiByZXN1bWVkLiAgSW4gZWl0aGVyIGNhc2Ugd2UgY2FuJ3QgYmUgc3VyZSBvZiBpdHMgcHJldmlvdXMgc3RhdGUuCisgKgorICogUmV0dXJuczogMSBpZiB0aGUgY29udHJvbGxlciB3YXMgcmVzZXQsIDAgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHVoY2lfcGNpX2NoZWNrX2FuZF9yZXNldF9oYyhzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpCit7CisJcmV0dXJuIHVoY2lfY2hlY2tfYW5kX3Jlc2V0X2hjKHRvX3BjaV9kZXYodWhjaV9kZXYodWhjaSkpLAorCQkJCXVoY2ktPmlvX2FkZHIpOworfQorCisvKgorICogU3RvcmUgdGhlIGJhc2ljIHJlZ2lzdGVyIHNldHRpbmdzIG5lZWRlZCBieSB0aGUgY29udHJvbGxlci4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHRoZSBlbmQgb2YgY29uZmlndXJlX2hjIGluIHVoY2ktaGNkLmMuCisgKi8KK3N0YXRpYyB2b2lkIHVoY2lfcGNpX2NvbmZpZ3VyZV9oYyhzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KHVoY2lfZGV2KHVoY2kpKTsKKworCS8qIEVuYWJsZSBQSVJRICovCisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIFVTQkxFR1NVUCwgVVNCTEVHU1VQX0RFRkFVTFQpOworCisJLyogRGlzYWJsZSBwbGF0Zm9ybS1zcGVjaWZpYyBub24tUE1FIyB3YWtldXAgKi8KKwlpZiAocGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfSU5URUwpCisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBVU0JSRVNfSU5URUwsIDApOworfQorCitzdGF0aWMgaW50IHVoY2lfcGNpX3Jlc3VtZV9kZXRlY3RfaW50ZXJydXB0c19hcmVfYnJva2VuKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSkKK3sKKwlpbnQgcG9ydDsKKworCXN3aXRjaCAodG9fcGNpX2Rldih1aGNpX2Rldih1aGNpKSktPnZlbmRvcikgeworCWRlZmF1bHQ6CisJCWJyZWFrOworCisJY2FzZSBQQ0lfVkVORE9SX0lEX0dFTkVTWVM6CisJCS8qIEdlbmVzeXMgTG9naWMncyBHTDg4MFMgY29udHJvbGxlcnMgZG9uJ3QgZ2VuZXJhdGUKKwkJICogcmVzdW1lLWRldGVjdCBpbnRlcnJ1cHRzLgorCQkgKi8KKwkJcmV0dXJuIDE7CisKKwljYXNlIFBDSV9WRU5ET1JfSURfSU5URUw6CisJCS8qIFNvbWUgb2YgSW50ZWwncyBVU0IgY29udHJvbGxlcnMgaGF2ZSBhIGJ1ZyB0aGF0IGNhdXNlcworCQkgKiByZXN1bWUtZGV0ZWN0IGludGVycnVwdHMgaWYgYW55IHBvcnQgaGFzIGFuIG92ZXItY3VycmVudAorCQkgKiBjb25kaXRpb24uICBUbyBtYWtlIG1hdHRlcnMgd29yc2UsIHNvbWUgbW90aGVyYm9hcmRzCisJCSAqIGhhcmR3aXJlIHVudXNlZCBVU0IgcG9ydHMnIG92ZXItY3VycmVudCBpbnB1dHMgYWN0aXZlIQorCQkgKiBUbyBwcmV2ZW50IHByb2JsZW1zLCB3ZSB3aWxsIG5vdCBlbmFibGUgcmVzdW1lLWRldGVjdAorCQkgKiBpbnRlcnJ1cHRzIGlmIGFueSBwb3J0cyBhcmUgT0MuCisJCSAqLworCQlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgdWhjaS0+cmhfbnVtcG9ydHM7ICsrcG9ydCkgeworCQkJaWYgKGludyh1aGNpLT5pb19hZGRyICsgVVNCUE9SVFNDMSArIHBvcnQgKiAyKSAmCisJCQkJCVVTQlBPUlRTQ19PQykKKwkJCQlyZXR1cm4gMTsKKwkJfQorCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdWhjaV9wY2lfZ2xvYmFsX3N1c3BlbmRfbW9kZV9pc19icm9rZW4oc3RydWN0IHVoY2lfaGNkICp1aGNpKQoreworCWludCBwb3J0OworCWNvbnN0IGNoYXIgKnN5c19pbmZvOworCXN0YXRpYyBjb25zdCBjaGFyIGJhZF9Bc3VzX2JvYXJkW10gPSAiQTdWOFgiOworCisJLyogT25lIG9mIEFzdXMncyBtb3RoZXJib2FyZHMgaGFzIGEgYnVnIHdoaWNoIGNhdXNlcyBpdCB0bworCSAqIHdha2UgdXAgaW1tZWRpYXRlbHkgZnJvbSBzdXNwZW5kLXRvLVJBTSBpZiBhbnkgb2YgdGhlIHBvcnRzCisJICogYXJlIGNvbm5lY3RlZC4gIEluIHN1Y2ggY2FzZXMgd2Ugd2lsbCBub3Qgc2V0IEVHU00uCisJICovCisJc3lzX2luZm8gPSBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CT0FSRF9OQU1FKTsKKwlpZiAoc3lzX2luZm8gJiYgIXN0cmNtcChzeXNfaW5mbywgYmFkX0FzdXNfYm9hcmQpKSB7CisJCWZvciAocG9ydCA9IDA7IHBvcnQgPCB1aGNpLT5yaF9udW1wb3J0czsgKytwb3J0KSB7CisJCQlpZiAoaW53KHVoY2ktPmlvX2FkZHIgKyBVU0JQT1JUU0MxICsgcG9ydCAqIDIpICYKKwkJCQkJVVNCUE9SVFNDX0NDUykKKwkJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVoY2lfcGNpX2luaXQoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kgPSBoY2RfdG9fdWhjaShoY2QpOworCisJdWhjaS0+aW9fYWRkciA9ICh1bnNpZ25lZCBsb25nKSBoY2QtPnJzcmNfc3RhcnQ7CisKKwl1aGNpLT5yaF9udW1wb3J0cyA9IHVoY2lfY291bnRfcG9ydHMoaGNkKTsKKworCS8qIEludGVsIGNvbnRyb2xsZXJzIHJlcG9ydCB0aGUgT3ZlckN1cnJlbnQgYml0IGFjdGl2ZSBvbi4KKwkgKiBWSUEgY29udHJvbGxlcnMgcmVwb3J0IGl0IGFjdGl2ZSBvZmYsIHNvIHdlJ2xsIGFkanVzdCB0aGUKKwkgKiBiaXQgdmFsdWUuICAoSXQncyBub3Qgc3RhbmRhcmRpemVkIGluIHRoZSBVSENJIHNwZWMuKQorCSAqLworCWlmICh0b19wY2lfZGV2KHVoY2lfZGV2KHVoY2kpKS0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfVklBKQorCQl1aGNpLT5vY19sb3cgPSAxOworCisJLyogSFAncyBzZXJ2ZXIgbWFuYWdlbWVudCBjaGlwIHJlcXVpcmVzIGEgbG9uZ2VyIHBvcnQgcmVzZXQgZGVsYXkuICovCisJaWYgKHRvX3BjaV9kZXYodWhjaV9kZXYodWhjaSkpLT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9IUCkKKwkJdWhjaS0+d2FpdF9mb3JfaHAgPSAxOworCisJLyogU2V0IHVwIHBvaW50ZXJzIHRvIFBDSS1zcGVjaWZpYyBmdW5jdGlvbnMgKi8KKwl1aGNpLT5yZXNldF9oYyA9IHVoY2lfcGNpX3Jlc2V0X2hjOworCXVoY2ktPmNoZWNrX2FuZF9yZXNldF9oYyA9IHVoY2lfcGNpX2NoZWNrX2FuZF9yZXNldF9oYzsKKwl1aGNpLT5jb25maWd1cmVfaGMgPSB1aGNpX3BjaV9jb25maWd1cmVfaGM7CisJdWhjaS0+cmVzdW1lX2RldGVjdF9pbnRlcnJ1cHRzX2FyZV9icm9rZW4gPQorCQl1aGNpX3BjaV9yZXN1bWVfZGV0ZWN0X2ludGVycnVwdHNfYXJlX2Jyb2tlbjsKKwl1aGNpLT5nbG9iYWxfc3VzcGVuZF9tb2RlX2lzX2Jyb2tlbiA9CisJCXVoY2lfcGNpX2dsb2JhbF9zdXNwZW5kX21vZGVfaXNfYnJva2VuOworCisKKwkvKiBLaWNrIEJJT1Mgb2ZmIHRoaXMgaGFyZHdhcmUgYW5kIHJlc2V0IGlmIHRoZSBjb250cm9sbGVyCisJICogaXNuJ3QgYWxyZWFkeSBzYWZlbHkgcXVpZXNjZW50LgorCSAqLworCWNoZWNrX2FuZF9yZXNldF9oYyh1aGNpKTsKKwlyZXR1cm4gMDsKK30KKworLyogTWFrZSBzdXJlIHRoZSBjb250cm9sbGVyIGlzIHF1aWVzY2VudCBhbmQgdGhhdCB3ZSdyZSBub3QgdXNpbmcgaXQKKyAqIGFueSBtb3JlLiAgVGhpcyBpcyBtYWlubHkgZm9yIHRoZSBiZW5lZml0IG9mIHByb2dyYW1zIHdoaWNoLCBsaWtlIGtleGVjLAorICogZXhwZWN0IHRoZSBoYXJkd2FyZSB0byBiZSBpZGxlOiBub3QgZG9pbmcgRE1BIG9yIGdlbmVyYXRpbmcgSVJRcy4KKyAqCisgKiBUaGlzIHJvdXRpbmUgbWF5IGJlIGNhbGxlZCBpbiBhIGRhbWFnZWQgb3IgZmFpbGluZyBrZXJuZWwuICBIZW5jZSB3ZQorICogZG8gbm90IGFjcXVpcmUgdGhlIHNwaW5sb2NrIGJlZm9yZSBzaHV0dGluZyBkb3duIHRoZSBjb250cm9sbGVyLgorICovCitzdGF0aWMgdm9pZCB1aGNpX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwl1aGNpX2hjX2RpZWQoaGNkX3RvX3VoY2koaGNkKSk7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KKworc3RhdGljIGludCB1aGNpX3BjaV9zdXNwZW5kKHN0cnVjdCB1c2JfaGNkICpoY2QsIGJvb2wgZG9fd2FrZXVwKQoreworCXN0cnVjdCB1aGNpX2hjZCAqdWhjaSA9IGhjZF90b191aGNpKGhjZCk7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KHVoY2lfZGV2KHVoY2kpKTsKKwlpbnQgcmMgPSAwOworCisJZGV2X2RiZyh1aGNpX2Rldih1aGNpKSwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlzcGluX2xvY2tfaXJxKCZ1aGNpLT5sb2NrKTsKKwlpZiAoIUhDRF9IV19BQ0NFU1NJQkxFKGhjZCkgfHwgdWhjaS0+ZGVhZCkKKwkJZ290byBkb25lX29rYXk7CQkvKiBBbHJlYWR5IHN1c3BlbmRlZCBvciBkZWFkICovCisKKwlpZiAodWhjaS0+cmhfc3RhdGUgPiBVSENJX1JIX1NVU1BFTkRFRCkgeworCQlkZXZfd2Fybih1aGNpX2Rldih1aGNpKSwgIlJvb3QgaHViIGlzbid0IHN1c3BlbmRlZCFcbiIpOworCQlyYyA9IC1FQlVTWTsKKwkJZ290byBkb25lOworCX07CisKKwkvKiBBbGwgUENJIGhvc3QgY29udHJvbGxlcnMgYXJlIHJlcXVpcmVkIHRvIGRpc2FibGUgSVJRIGdlbmVyYXRpb24KKwkgKiBhdCB0aGUgc291cmNlLCBzbyB3ZSBtdXN0IHR1cm4gb2ZmIFBJUlEuCisJICovCisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIFVTQkxFR1NVUCwgMCk7CisJY2xlYXJfYml0KEhDRF9GTEFHX1BPTExfUkgsICZoY2QtPmZsYWdzKTsKKworCS8qIEVuYWJsZSBwbGF0Zm9ybS1zcGVjaWZpYyBub24tUE1FIyB3YWtldXAgKi8KKwlpZiAoZG9fd2FrZXVwKSB7CisJCWlmIChwZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9JTlRFTCkKKwkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBVU0JSRVNfSU5URUwsCisJCQkJCVVTQlBPUlQxRU4gfCBVU0JQT1JUMkVOKTsKKwl9CisKK2RvbmVfb2theToKKwljbGVhcl9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpOworZG9uZToKKwlzcGluX3VubG9ja19pcnEoJnVoY2ktPmxvY2spOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCB1aGNpX3BjaV9yZXN1bWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgYm9vbCBoaWJlcm5hdGVkKQoreworCXN0cnVjdCB1aGNpX2hjZCAqdWhjaSA9IGhjZF90b191aGNpKGhjZCk7CisKKwlkZXZfZGJnKHVoY2lfZGV2KHVoY2kpLCAiJXNcbiIsIF9fZnVuY19fKTsKKworCS8qIFNpbmNlIHdlIGFyZW4ndCBpbiBEMyBhbnkgbW9yZSwgaXQncyBzYWZlIHRvIHNldCB0aGlzIGZsYWcKKwkgKiBldmVuIGlmIHRoZSBjb250cm9sbGVyIHdhcyBkZWFkLgorCSAqLworCXNldF9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpOworCisJc3Bpbl9sb2NrX2lycSgmdWhjaS0+bG9jayk7CisKKwkvKiBNYWtlIHN1cmUgcmVzdW1lIGZyb20gaGliZXJuYXRpb24gcmUtZW51bWVyYXRlcyBldmVyeXRoaW5nICovCisJaWYgKGhpYmVybmF0ZWQpIHsKKwkJdWhjaS0+cmVzZXRfaGModWhjaSk7CisJCWZpbmlzaF9yZXNldCh1aGNpKTsKKwl9CisKKwkvKiBUaGUgZmlybXdhcmUgbWF5IGhhdmUgY2hhbmdlZCB0aGUgY29udHJvbGxlciBzZXR0aW5ncyBkdXJpbmcKKwkgKiBhIHN5c3RlbSB3YWtldXAuICBDaGVjayBpdCBhbmQgcmVjb25maWd1cmUgdG8gYXZvaWQgcHJvYmxlbXMuCisJICovCisJZWxzZSB7CisJCWNoZWNrX2FuZF9yZXNldF9oYyh1aGNpKTsKKwl9CisJY29uZmlndXJlX2hjKHVoY2kpOworCisJLyogVGVsbCB0aGUgY29yZSBpZiB0aGUgY29udHJvbGxlciBoYWQgdG8gYmUgcmVzZXQgKi8KKwlpZiAodWhjaS0+cmhfc3RhdGUgPT0gVUhDSV9SSF9SRVNFVCkKKwkJdXNiX3Jvb3RfaHViX2xvc3RfcG93ZXIoaGNkLT5zZWxmLnJvb3RfaHViKTsKKworCXNwaW5fdW5sb2NrX2lycSgmdWhjaS0+bG9jayk7CisKKwkvKiBJZiBpbnRlcnJ1cHRzIGRvbid0IHdvcmsgYW5kIHJlbW90ZSB3YWtldXAgaXMgZW5hYmxlZCB0aGVuCisJICogdGhlIHN1c3BlbmRlZCByb290IGh1YiBuZWVkcyB0byBiZSBwb2xsZWQuCisJICovCisJaWYgKCF1aGNpLT5SRF9lbmFibGUgJiYgaGNkLT5zZWxmLnJvb3RfaHViLT5kb19yZW1vdGVfd2FrZXVwKQorCQlzZXRfYml0KEhDRF9GTEFHX1BPTExfUkgsICZoY2QtPmZsYWdzKTsKKworCS8qIERvZXMgdGhlIHJvb3QgaHViIGhhdmUgYSBwb3J0IHdha2V1cCBwZW5kaW5nPyAqLworCXVzYl9oY2RfcG9sbF9yaF9zdGF0dXMoaGNkKTsKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyIHVoY2lfZHJpdmVyID0geworCS5kZXNjcmlwdGlvbiA9CQloY2RfbmFtZSwKKwkucHJvZHVjdF9kZXNjID0JCSJVSENJIEhvc3QgQ29udHJvbGxlciIsCisJLmhjZF9wcml2X3NpemUgPQlzaXplb2Yoc3RydWN0IHVoY2lfaGNkKSwKKworCS8qIEdlbmVyaWMgaGFyZHdhcmUgbGlua2FnZSAqLworCS5pcnEgPQkJCXVoY2lfaXJxLAorCS5mbGFncyA9CQlIQ0RfVVNCMTEsCisKKwkvKiBCYXNpYyBsaWZlY3ljbGUgb3BlcmF0aW9ucyAqLworCS5yZXNldCA9CQl1aGNpX3BjaV9pbml0LAorCS5zdGFydCA9CQl1aGNpX3N0YXJ0LAorI2lmZGVmIENPTkZJR19QTQorCS5wY2lfc3VzcGVuZCA9CQl1aGNpX3BjaV9zdXNwZW5kLAorCS5wY2lfcmVzdW1lID0JCXVoY2lfcGNpX3Jlc3VtZSwKKwkuYnVzX3N1c3BlbmQgPQkJdWhjaV9yaF9zdXNwZW5kLAorCS5idXNfcmVzdW1lID0JCXVoY2lfcmhfcmVzdW1lLAorI2VuZGlmCisJLnN0b3AgPQkJCXVoY2lfc3RvcCwKKworCS51cmJfZW5xdWV1ZSA9CQl1aGNpX3VyYl9lbnF1ZXVlLAorCS51cmJfZGVxdWV1ZSA9CQl1aGNpX3VyYl9kZXF1ZXVlLAorCisJLmVuZHBvaW50X2Rpc2FibGUgPQl1aGNpX2hjZF9lbmRwb2ludF9kaXNhYmxlLAorCS5nZXRfZnJhbWVfbnVtYmVyID0JdWhjaV9oY2RfZ2V0X2ZyYW1lX251bWJlciwKKworCS5odWJfc3RhdHVzX2RhdGEgPQl1aGNpX2h1Yl9zdGF0dXNfZGF0YSwKKwkuaHViX2NvbnRyb2wgPQkJdWhjaV9odWJfY29udHJvbCwKK307CisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRSh1aGNpX3BjaV9pZHMpID0geyB7CisJLyogaGFuZGxlIGFueSBVU0IgVUhDSSBjb250cm9sbGVyICovCisJUENJX0RFVklDRV9DTEFTUyhQQ0lfQ0xBU1NfU0VSSUFMX1VTQl9VSENJLCB+MCksCisJLmRyaXZlcl9kYXRhID0JKHVuc2lnbmVkIGxvbmcpICZ1aGNpX2RyaXZlciwKKwl9LCB7IC8qIGVuZDogYWxsIHplcm9lcyAqLyB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgdWhjaV9wY2lfaWRzKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHVoY2lfcGNpX2RyaXZlciA9IHsKKwkubmFtZSA9CQkoY2hhciAqKWhjZF9uYW1lLAorCS5pZF90YWJsZSA9CXVoY2lfcGNpX2lkcywKKworCS5wcm9iZSA9CXVzYl9oY2RfcGNpX3Byb2JlLAorCS5yZW1vdmUgPQl1c2JfaGNkX3BjaV9yZW1vdmUsCisJLnNodXRkb3duID0JdWhjaV9zaHV0ZG93biwKKworI2lmZGVmIENPTkZJR19QTV9TTEVFUAorCS5kcml2ZXIgPQl7CisJCS5wbSA9CSZ1c2JfaGNkX3BjaV9wbV9vcHMKKwl9LAorI2VuZGlmCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91aGNpLXEuYyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1xLmMKaW5kZXggYWY3N2FiYi4uODRlZDI4YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1xLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLXEuYwpAQCAtMjksMTIgKzI5LDEyIEBACiB7CiAJaWYgKHVoY2ktPmlzX3N0b3BwZWQpCiAJCW1vZF90aW1lcigmdWhjaV90b19oY2QodWhjaSktPnJoX3RpbWVyLCBqaWZmaWVzKTsKLQl1aGNpLT50ZXJtX3RkLT5zdGF0dXMgfD0gY3B1X3RvX2xlMzIoVERfQ1RSTF9JT0MpOworCXVoY2ktPnRlcm1fdGQtPnN0YXR1cyB8PSBjcHVfdG9faGMzMih1aGNpLCBURF9DVFJMX0lPQyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB1aGNpX2NsZWFyX25leHRfaW50ZXJydXB0KHN0cnVjdCB1aGNpX2hjZCAqdWhjaSkKIHsKLQl1aGNpLT50ZXJtX3RkLT5zdGF0dXMgJj0gfmNwdV90b19sZTMyKFREX0NUUkxfSU9DKTsKKwl1aGNpLT50ZXJtX3RkLT5zdGF0dXMgJj0gfmNwdV90b19oYzMyKHVoY2ksIFREX0NUUkxfSU9DKTsKIH0KIAogCkBAIC01Myw3ICs1Myw3IEBACiAJdWhjaS0+ZnNicl9pc19vbiA9IDE7CiAJbHFoID0gbGlzdF9lbnRyeSh1aGNpLT5za2VsX2FzeW5jX3FoLT5ub2RlLnByZXYsCiAJCQlzdHJ1Y3QgdWhjaV9xaCwgbm9kZSk7Ci0JbHFoLT5saW5rID0gTElOS19UT19RSCh1aGNpLT5za2VsX3Rlcm1fcWgpOworCWxxaC0+bGluayA9IExJTktfVE9fUUgodWhjaSwgdWhjaS0+c2tlbF90ZXJtX3FoKTsKIH0KIAogc3RhdGljIHZvaWQgdWhjaV9mc2JyX29mZihzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpCkBAIC02NSw3ICs2NSw3IEBACiAJdWhjaS0+ZnNicl9pc19vbiA9IDA7CiAJbHFoID0gbGlzdF9lbnRyeSh1aGNpLT5za2VsX2FzeW5jX3FoLT5ub2RlLnByZXYsCiAJCQlzdHJ1Y3QgdWhjaV9xaCwgbm9kZSk7Ci0JbHFoLT5saW5rID0gVUhDSV9QVFJfVEVSTTsKKwlscWgtPmxpbmsgPSBVSENJX1BUUl9URVJNKHVoY2kpOwogfQogCiBzdGF0aWMgdm9pZCB1aGNpX2FkZF9mc2JyKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiKQpAQCAtMTMxLDEyICsxMzEsMTIgQEAKIAlkbWFfcG9vbF9mcmVlKHVoY2ktPnRkX3Bvb2wsIHRkLCB0ZC0+ZG1hX2hhbmRsZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB1aGNpX2ZpbGxfdGQoc3RydWN0IHVoY2lfdGQgKnRkLCB1MzIgc3RhdHVzLAotCQl1MzIgdG9rZW4sIHUzMiBidWZmZXIpCitzdGF0aWMgaW5saW5lIHZvaWQgdWhjaV9maWxsX3RkKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVoY2lfdGQgKnRkLAorCQl1MzIgc3RhdHVzLCB1MzIgdG9rZW4sIHUzMiBidWZmZXIpCiB7Ci0JdGQtPnN0YXR1cyA9IGNwdV90b19sZTMyKHN0YXR1cyk7Ci0JdGQtPnRva2VuID0gY3B1X3RvX2xlMzIodG9rZW4pOwotCXRkLT5idWZmZXIgPSBjcHVfdG9fbGUzMihidWZmZXIpOworCXRkLT5zdGF0dXMgPSBjcHVfdG9faGMzMih1aGNpLCBzdGF0dXMpOworCXRkLT50b2tlbiA9IGNwdV90b19oYzMyKHVoY2ksIHRva2VuKTsKKwl0ZC0+YnVmZmVyID0gY3B1X3RvX2hjMzIodWhjaSwgYnVmZmVyKTsKIH0KIAogc3RhdGljIHZvaWQgdWhjaV9hZGRfdGRfdG9fdXJicChzdHJ1Y3QgdWhjaV90ZCAqdGQsIHN0cnVjdCB1cmJfcHJpdiAqdXJicCkKQEAgLTE3MCwxMSArMTcwLDExIEBACiAKIAkJdGQtPmxpbmsgPSBsdGQtPmxpbms7CiAJCXdtYigpOwotCQlsdGQtPmxpbmsgPSBMSU5LX1RPX1REKHRkKTsKKwkJbHRkLT5saW5rID0gTElOS19UT19URCh1aGNpLCB0ZCk7CiAJfSBlbHNlIHsKIAkJdGQtPmxpbmsgPSB1aGNpLT5mcmFtZVtmcmFtZW51bV07CiAJCXdtYigpOwotCQl1aGNpLT5mcmFtZVtmcmFtZW51bV0gPSBMSU5LX1RPX1REKHRkKTsKKwkJdWhjaS0+ZnJhbWVbZnJhbWVudW1dID0gTElOS19UT19URCh1aGNpLCB0ZCk7CiAJCXVoY2ktPmZyYW1lX2NwdVtmcmFtZW51bV0gPSB0ZDsKIAl9CiB9CkBAIC0xOTgsNyArMTk4LDcgQEAKIAkJCW50ZCA9IGxpc3RfZW50cnkodGQtPmZsX2xpc3QubmV4dCwKIAkJCQkJIHN0cnVjdCB1aGNpX3RkLAogCQkJCQkgZmxfbGlzdCk7Ci0JCQl1aGNpLT5mcmFtZVt0ZC0+ZnJhbWVdID0gTElOS19UT19URChudGQpOworCQkJdWhjaS0+ZnJhbWVbdGQtPmZyYW1lXSA9IExJTktfVE9fVEQodWhjaSwgbnRkKTsKIAkJCXVoY2ktPmZyYW1lX2NwdVt0ZC0+ZnJhbWVdID0gbnRkOwogCQl9CiAJfSBlbHNlIHsKQEAgLTI1NSw4ICsyNTUsOCBAQAogCW1lbXNldChxaCwgMCwgc2l6ZW9mKCpxaCkpOwogCXFoLT5kbWFfaGFuZGxlID0gZG1hX2hhbmRsZTsKIAotCXFoLT5lbGVtZW50ID0gVUhDSV9QVFJfVEVSTTsKLQlxaC0+bGluayA9IFVIQ0lfUFRSX1RFUk07CisJcWgtPmVsZW1lbnQgPSBVSENJX1BUUl9URVJNKHVoY2kpOworCXFoLT5saW5rID0gVUhDSV9QVFJfVEVSTSh1aGNpKTsKIAogCUlOSVRfTElTVF9IRUFEKCZxaC0+cXVldWUpOwogCUlOSVRfTElTVF9IRUFEKCZxaC0+bm9kZSk7CkBAIC0zNDgsOSArMzQ4LDkgQEAKIAogCS8qIElmIHRoZSBRSCBlbGVtZW50IHBvaW50ZXIgaXMgVUhDSV9QVFJfVEVSTSB0aGVuIHRoZW4gY3VycmVudGx5CiAJICogZXhlY3V0aW5nIFVSQiBoYXMgYWxyZWFkeSBiZWVuIHVubGlua2VkLCBzbyB0aGlzIG9uZSBpc24ndCBpdC4gKi8KLQlpZiAocWhfZWxlbWVudChxaCkgPT0gVUhDSV9QVFJfVEVSTSkKKwlpZiAocWhfZWxlbWVudChxaCkgPT0gVUhDSV9QVFJfVEVSTSh1aGNpKSkKIAkJZ290byBkb25lOwotCXFoLT5lbGVtZW50ID0gVUhDSV9QVFJfVEVSTTsKKwlxaC0+ZWxlbWVudCA9IFVIQ0lfUFRSX1RFUk0odWhjaSk7CiAKIAkvKiBDb250cm9sIHBpcGVzIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdG9nZ2xlcyAqLwogCWlmIChxaC0+dHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MKQpAQCAtMzYwLDcgKzM2MCw3IEBACiAJV0FSTl9PTihsaXN0X2VtcHR5KCZ1cmJwLT50ZF9saXN0KSk7CiAJdGQgPSBsaXN0X2VudHJ5KHVyYnAtPnRkX2xpc3QubmV4dCwgc3RydWN0IHVoY2lfdGQsIGxpc3QpOwogCXFoLT5uZWVkc19maXh1cCA9IDE7Ci0JcWgtPmluaXRpYWxfdG9nZ2xlID0gdWhjaV90b2dnbGUodGRfdG9rZW4odGQpKTsKKwlxaC0+aW5pdGlhbF90b2dnbGUgPSB1aGNpX3RvZ2dsZSh0ZF90b2tlbih1aGNpLCB0ZCkpOwogCiBkb25lOgogCXJldHVybiByZXQ7CkBAIC0zNzAsNyArMzcwLDggQEAKICAqIEZpeCB1cCB0aGUgZGF0YSB0b2dnbGVzIGZvciBVUkJzIGluIGEgcXVldWUsIHdoZW4gb25lIG9mIHRoZW0KICAqIHRlcm1pbmF0ZXMgZWFybHkgKHNob3J0IHRyYW5zZmVyLCBlcnJvciwgb3IgZGVxdWV1ZWQpLgogICovCi1zdGF0aWMgdm9pZCB1aGNpX2ZpeHVwX3RvZ2dsZXMoc3RydWN0IHVoY2lfcWggKnFoLCBpbnQgc2tpcF9maXJzdCkKK3N0YXRpYyB2b2lkIHVoY2lfZml4dXBfdG9nZ2xlcyhzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1aGNpX3FoICpxaCwKKwkJCWludCBza2lwX2ZpcnN0KQogewogCXN0cnVjdCB1cmJfcHJpdiAqdXJicCA9IE5VTEw7CiAJc3RydWN0IHVoY2lfdGQgKnRkOwpAQCAtMzg0LDcgKzM4NSw3IEBACiAKIAkvKiBXaGVuIHN0YXJ0aW5nIHdpdGggdGhlIGZpcnN0IFVSQiwgaWYgdGhlIFFIIGVsZW1lbnQgcG9pbnRlciBpcwogCSAqIHN0aWxsIHZhbGlkIHRoZW4gd2Uga25vdyB0aGUgVVJCJ3MgdG9nZ2xlcyBhcmUgb2theS4gKi8KLQllbHNlIGlmIChxaF9lbGVtZW50KHFoKSAhPSBVSENJX1BUUl9URVJNKQorCWVsc2UgaWYgKHFoX2VsZW1lbnQocWgpICE9IFVIQ0lfUFRSX1RFUk0odWhjaSkpCiAJCXRvZ2dsZSA9IDI7CiAKIAkvKiBGaXggdXAgdGhlIHRvZ2dsZSBmb3IgdGhlIFVSQnMgaW4gdGhlIHF1ZXVlLiAgTm9ybWFsbHkgdGhpcwpAQCAtMzk2LDE1ICszOTcsMTUgQEAKIAkJLyogSWYgdGhlIGZpcnN0IFREIGhhcyB0aGUgcmlnaHQgdG9nZ2xlIHZhbHVlLCB3ZSBkb24ndAogCQkgKiBuZWVkIHRvIGNoYW5nZSBhbnkgdG9nZ2xlcyBpbiB0aGlzIFVSQiAqLwogCQl0ZCA9IGxpc3RfZW50cnkodXJicC0+dGRfbGlzdC5uZXh0LCBzdHJ1Y3QgdWhjaV90ZCwgbGlzdCk7Ci0JCWlmICh0b2dnbGUgPiAxIHx8IHVoY2lfdG9nZ2xlKHRkX3Rva2VuKHRkKSkgPT0gdG9nZ2xlKSB7CisJCWlmICh0b2dnbGUgPiAxIHx8IHVoY2lfdG9nZ2xlKHRkX3Rva2VuKHVoY2ksIHRkKSkgPT0gdG9nZ2xlKSB7CiAJCQl0ZCA9IGxpc3RfZW50cnkodXJicC0+dGRfbGlzdC5wcmV2LCBzdHJ1Y3QgdWhjaV90ZCwKIAkJCQkJbGlzdCk7Ci0JCQl0b2dnbGUgPSB1aGNpX3RvZ2dsZSh0ZF90b2tlbih0ZCkpIF4gMTsKKwkJCXRvZ2dsZSA9IHVoY2lfdG9nZ2xlKHRkX3Rva2VuKHVoY2ksIHRkKSkgXiAxOwogCiAJCS8qIE90aGVyd2lzZSBhbGwgdGhlIHRvZ2dsZXMgaW4gdGhlIFVSQiBoYXZlIHRvIGJlIHN3aXRjaGVkICovCiAJCX0gZWxzZSB7CiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRkLCAmdXJicC0+dGRfbGlzdCwgbGlzdCkgewotCQkJCXRkLT50b2tlbiBePSBjcHVfdG9fbGUzMigKKwkJCQl0ZC0+dG9rZW4gXj0gY3B1X3RvX2hjMzIodWhjaSwKIAkJCQkJCQlURF9UT0tFTl9UT0dHTEUpOwogCQkJCXRvZ2dsZSBePSAxOwogCQkJfQpAQCAtNDQxLDcgKzQ0Miw3IEBACiAJcHFoID0gbGlzdF9lbnRyeShxaC0+bm9kZS5wcmV2LCBzdHJ1Y3QgdWhjaV9xaCwgbm9kZSk7CiAJcWgtPmxpbmsgPSBwcWgtPmxpbms7CiAJd21iKCk7Ci0JcHFoLT5saW5rID0gTElOS19UT19RSChxaCk7CisJcHFoLT5saW5rID0gTElOS19UT19RSCh1aGNpLCBxaCk7CiB9CiAKIC8qCkBAIC00NTEsNyArNDUyLDcgQEAKIHN0YXRpYyB2b2lkIGxpbmtfYXN5bmMoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdWhjaV9xaCAqcWgpCiB7CiAJc3RydWN0IHVoY2lfcWggKnBxaDsKLQlfX2xlMzIgbGlua190b19uZXdfcWg7CisJX19oYzMyIGxpbmtfdG9fbmV3X3FoOwogCiAJLyogRmluZCB0aGUgcHJlZGVjZXNzb3IgUUggZm9yIG91ciBuZXcgb25lIGFuZCBpbnNlcnQgaXQgaW4gdGhlIGxpc3QuCiAJICogVGhlIGxpc3Qgb2YgUUhzIGlzIGV4cGVjdGVkIHRvIGJlIHNob3J0LCBzbyBsaW5lYXIgc2VhcmNoIHdvbid0CkBAIC00NjUsNyArNDY2LDcgQEAKIAkvKiBMaW5rIGl0IGludG8gdGhlIHNjaGVkdWxlICovCiAJcWgtPmxpbmsgPSBwcWgtPmxpbms7CiAJd21iKCk7Ci0JbGlua190b19uZXdfcWggPSBMSU5LX1RPX1FIKHFoKTsKKwlsaW5rX3RvX25ld19xaCA9IExJTktfVE9fUUgodWhjaSwgcWgpOwogCXBxaC0+bGluayA9IGxpbmtfdG9fbmV3X3FoOwogCiAJLyogSWYgdGhpcyBpcyBub3cgdGhlIGZpcnN0IEZTQlIgUUgsIGxpbmsgdGhlIHRlcm1pbmF0aW5nIHNrZWxldG9uCkBAIC00ODMsMTMgKzQ4NCwxMyBAQAogCiAJLyogU2V0IHRoZSBlbGVtZW50IHBvaW50ZXIgaWYgaXQgaXNuJ3Qgc2V0IGFscmVhZHkuCiAJICogVGhpcyBpc24ndCBuZWVkZWQgZm9yIElzb2Nocm9ub3VzIHF1ZXVlcywgYnV0IGl0IGRvZXNuJ3QgaHVydC4gKi8KLQlpZiAocWhfZWxlbWVudChxaCkgPT0gVUhDSV9QVFJfVEVSTSkgeworCWlmIChxaF9lbGVtZW50KHFoKSA9PSBVSENJX1BUUl9URVJNKHVoY2kpKSB7CiAJCXN0cnVjdCB1cmJfcHJpdiAqdXJicCA9IGxpc3RfZW50cnkocWgtPnF1ZXVlLm5leHQsCiAJCQkJc3RydWN0IHVyYl9wcml2LCBub2RlKTsKIAkJc3RydWN0IHVoY2lfdGQgKnRkID0gbGlzdF9lbnRyeSh1cmJwLT50ZF9saXN0Lm5leHQsCiAJCQkJc3RydWN0IHVoY2lfdGQsIGxpc3QpOwogCi0JCXFoLT5lbGVtZW50ID0gTElOS19UT19URCh0ZCk7CisJCXFoLT5lbGVtZW50ID0gTElOS19UT19URCh1aGNpLCB0ZCk7CiAJfQogCiAJLyogVHJlYXQgdGhlIHF1ZXVlIGFzIGlmIGl0IGhhcyBqdXN0IGFkdmFuY2VkICovCkBAIC01MzMsNyArNTM0LDcgQEAKIHN0YXRpYyB2b2lkIHVubGlua19hc3luYyhzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1aGNpX3FoICpxaCkKIHsKIAlzdHJ1Y3QgdWhjaV9xaCAqcHFoOwotCV9fbGUzMiBsaW5rX3RvX25leHRfcWggPSBxaC0+bGluazsKKwlfX2hjMzIgbGlua190b19uZXh0X3FoID0gcWgtPmxpbms7CiAKIAlwcWggPSBsaXN0X2VudHJ5KHFoLT5ub2RlLnByZXYsIHN0cnVjdCB1aGNpX3FoLCBub2RlKTsKIAlwcWgtPmxpbmsgPSBsaW5rX3RvX25leHRfcWg7CkBAIC03NTcsOCArNzU4LDggQEAKIC8qCiAgKiBNYXAgc3RhdHVzIHRvIHN0YW5kYXJkIHJlc3VsdCBjb2RlcwogICoKLSAqIDxzdGF0dXM+IGlzICh0ZF9zdGF0dXModGQpICYgMHhGNjAwMDApLCBhLmsuYS4KLSAqIHVoY2lfc3RhdHVzX2JpdHModGRfc3RhdHVzKHRkKSkuCisgKiA8c3RhdHVzPiBpcyAodGRfc3RhdHVzKHVoY2ksIHRkKSAmIDB4RjYwMDAwKSwgYS5rLmEuCisgKiB1aGNpX3N0YXR1c19iaXRzKHRkX3N0YXR1cyh1aGNpLCB0ZCkpLgogICogTm90ZTogPHN0YXR1cz4gZG9lcyBub3QgaW5jbHVkZSB0aGUgVERfQ1RSTF9OQUsgYml0LgogICogPGRpcl9vdXQ+IGlzIFRydWUgZm9yIG91dHB1dCBURHMgYW5kIEZhbHNlIGZvciBpbnB1dCBURHMuCiAgKi8KQEAgLTc5NCw3ICs3OTUsNyBAQAogCWludCBtYXhzemUgPSBsZTE2X3RvX2NwdShxaC0+aGVwLT5kZXNjLndNYXhQYWNrZXRTaXplKTsKIAlpbnQgbGVuID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOwogCWRtYV9hZGRyX3QgZGF0YSA9IHVyYi0+dHJhbnNmZXJfZG1hOwotCV9fbGUzMiAqcGxpbms7CisJX19oYzMyICpwbGluazsKIAlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAgPSB1cmItPmhjcHJpdjsKIAlpbnQgc2tlbDsKIApAQCAtODExLDcgKzgxMiw3IEBACiAJICovCiAJdGQgPSBxaC0+ZHVtbXlfdGQ7CiAJdWhjaV9hZGRfdGRfdG9fdXJicCh0ZCwgdXJicCk7Ci0JdWhjaV9maWxsX3RkKHRkLCBzdGF0dXMsIGRlc3RpbmF0aW9uIHwgdWhjaV9leHBsZW4oOCksCisJdWhjaV9maWxsX3RkKHVoY2ksIHRkLCBzdGF0dXMsIGRlc3RpbmF0aW9uIHwgdWhjaV9leHBsZW4oOCksCiAJCQl1cmItPnNldHVwX2RtYSk7CiAJcGxpbmsgPSAmdGQtPmxpbms7CiAJc3RhdHVzIHw9IFREX0NUUkxfQUNUSVZFOwpAQCAtODQ0LDE0ICs4NDUsMTQgQEAKIAkJdGQgPSB1aGNpX2FsbG9jX3RkKHVoY2kpOwogCQlpZiAoIXRkKQogCQkJZ290byBub21lbTsKLQkJKnBsaW5rID0gTElOS19UT19URCh0ZCk7CisJCSpwbGluayA9IExJTktfVE9fVEQodWhjaSwgdGQpOwogCiAJCS8qIEFsdGVybmF0ZSBEYXRhMC8xIChzdGFydCB3aXRoIERhdGExKSAqLwogCQlkZXN0aW5hdGlvbiBePSBURF9UT0tFTl9UT0dHTEU7CiAKIAkJdWhjaV9hZGRfdGRfdG9fdXJicCh0ZCwgdXJicCk7Ci0JCXVoY2lfZmlsbF90ZCh0ZCwgc3RhdHVzLCBkZXN0aW5hdGlvbiB8IHVoY2lfZXhwbGVuKHBrdHN6ZSksCi0JCQkJZGF0YSk7CisJCXVoY2lfZmlsbF90ZCh1aGNpLCB0ZCwgc3RhdHVzLAorCQkJZGVzdGluYXRpb24gfCB1aGNpX2V4cGxlbihwa3RzemUpLCBkYXRhKTsKIAkJcGxpbmsgPSAmdGQtPmxpbms7CiAKIAkJZGF0YSArPSBwa3RzemU7CkBAIC04NjQsMTQgKzg2NSwxNCBAQAogCXRkID0gdWhjaV9hbGxvY190ZCh1aGNpKTsKIAlpZiAoIXRkKQogCQlnb3RvIG5vbWVtOwotCSpwbGluayA9IExJTktfVE9fVEQodGQpOworCSpwbGluayA9IExJTktfVE9fVEQodWhjaSwgdGQpOwogCiAJLyogQ2hhbmdlIGRpcmVjdGlvbiBmb3IgdGhlIHN0YXR1cyB0cmFuc2FjdGlvbiAqLwogCWRlc3RpbmF0aW9uIF49IChVU0JfUElEX0lOIF4gVVNCX1BJRF9PVVQpOwogCWRlc3RpbmF0aW9uIHw9IFREX1RPS0VOX1RPR0dMRTsJCS8qIEVuZCBpbiBEYXRhMSAqLwogCiAJdWhjaV9hZGRfdGRfdG9fdXJicCh0ZCwgdXJicCk7Ci0JdWhjaV9maWxsX3RkKHRkLCBzdGF0dXMgfCBURF9DVFJMX0lPQywKKwl1aGNpX2ZpbGxfdGQodWhjaSwgdGQsIHN0YXR1cyB8IFREX0NUUkxfSU9DLAogCQkJZGVzdGluYXRpb24gfCB1aGNpX2V4cGxlbigwKSwgMCk7CiAJcGxpbmsgPSAmdGQtPmxpbms7CiAKQEAgLTg4MSwxMSArODgyLDExIEBACiAJdGQgPSB1aGNpX2FsbG9jX3RkKHVoY2kpOwogCWlmICghdGQpCiAJCWdvdG8gbm9tZW07Ci0JKnBsaW5rID0gTElOS19UT19URCh0ZCk7CisJKnBsaW5rID0gTElOS19UT19URCh1aGNpLCB0ZCk7CiAKLQl1aGNpX2ZpbGxfdGQodGQsIDAsIFVTQl9QSURfT1VUIHwgdWhjaV9leHBsZW4oMCksIDApOworCXVoY2lfZmlsbF90ZCh1aGNpLCB0ZCwgMCwgVVNCX1BJRF9PVVQgfCB1aGNpX2V4cGxlbigwKSwgMCk7CiAJd21iKCk7Ci0JcWgtPmR1bW15X3RkLT5zdGF0dXMgfD0gY3B1X3RvX2xlMzIoVERfQ1RSTF9BQ1RJVkUpOworCXFoLT5kdW1teV90ZC0+c3RhdHVzIHw9IGNwdV90b19oYzMyKHVoY2ksIFREX0NUUkxfQUNUSVZFKTsKIAlxaC0+ZHVtbXlfdGQgPSB0ZDsKIAogCS8qIExvdy1zcGVlZCB0cmFuc2ZlcnMgZ2V0IGEgZGlmZmVyZW50IHF1ZXVlLCBhbmQgd29uJ3QgaG9nIHRoZSBidXMuCkBAIC05MjEsNyArOTIyLDcgQEAKIAlpbnQgbGVuID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOwogCWludCB0aGlzX3NnX2xlbjsKIAlkbWFfYWRkcl90IGRhdGE7Ci0JX19sZTMyICpwbGluazsKKwlfX2hjMzIgKnBsaW5rOwogCXN0cnVjdCB1cmJfcHJpdiAqdXJicCA9IHVyYi0+aGNwcml2OwogCXVuc2lnbmVkIGludCB0b2dnbGU7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICAqc2c7CkBAIC05NzQsMTAgKzk3NSwxMCBAQAogCQkJdGQgPSB1aGNpX2FsbG9jX3RkKHVoY2kpOwogCQkJaWYgKCF0ZCkKIAkJCQlnb3RvIG5vbWVtOwotCQkJKnBsaW5rID0gTElOS19UT19URCh0ZCk7CisJCQkqcGxpbmsgPSBMSU5LX1RPX1REKHVoY2ksIHRkKTsKIAkJfQogCQl1aGNpX2FkZF90ZF90b191cmJwKHRkLCB1cmJwKTsKLQkJdWhjaV9maWxsX3RkKHRkLCBzdGF0dXMsCisJCXVoY2lfZmlsbF90ZCh1aGNpLCB0ZCwgc3RhdHVzLAogCQkJCWRlc3RpbmF0aW9uIHwgdWhjaV9leHBsZW4ocGt0c3plKSB8CiAJCQkJCSh0b2dnbGUgPDwgVERfVE9LRU5fVE9HR0xFX1NISUZUKSwKIAkJCQlkYXRhKTsKQEAgLTEwMTAsMTAgKzEwMTEsMTAgQEAKIAkJdGQgPSB1aGNpX2FsbG9jX3RkKHVoY2kpOwogCQlpZiAoIXRkKQogCQkJZ290byBub21lbTsKLQkJKnBsaW5rID0gTElOS19UT19URCh0ZCk7CisJCSpwbGluayA9IExJTktfVE9fVEQodWhjaSwgdGQpOwogCiAJCXVoY2lfYWRkX3RkX3RvX3VyYnAodGQsIHVyYnApOwotCQl1aGNpX2ZpbGxfdGQodGQsIHN0YXR1cywKKwkJdWhjaV9maWxsX3RkKHVoY2ksIHRkLCBzdGF0dXMsCiAJCQkJZGVzdGluYXRpb24gfCB1aGNpX2V4cGxlbigwKSB8CiAJCQkJCSh0b2dnbGUgPDwgVERfVE9LRU5fVE9HR0xFX1NISUZUKSwKIAkJCQlkYXRhKTsKQEAgLTEwMjgsNyArMTAyOSw3IEBACiAJICogZmFzdCBzaWRlIGJ1dCBub3QgZW5vdWdoIHRvIGp1c3RpZnkgZGVsYXlpbmcgYW4gaW50ZXJydXB0CiAJICogbW9yZSB0aGFuIDIgb3IgMyBVUkJzLCBzbyB3ZSB3aWxsIGlnbm9yZSB0aGUgVVJCX05PX0lOVEVSUlVQVAogCSAqIGZsYWcgc2V0dGluZy4gKi8KLQl0ZC0+c3RhdHVzIHw9IGNwdV90b19sZTMyKFREX0NUUkxfSU9DKTsKKwl0ZC0+c3RhdHVzIHw9IGNwdV90b19oYzMyKHVoY2ksIFREX0NUUkxfSU9DKTsKIAogCS8qCiAJICogQnVpbGQgdGhlIG5ldyBkdW1teSBURCBhbmQgYWN0aXZhdGUgdGhlIG9sZCBvbmUKQEAgLTEwMzYsMTEgKzEwMzcsMTEgQEAKIAl0ZCA9IHVoY2lfYWxsb2NfdGQodWhjaSk7CiAJaWYgKCF0ZCkKIAkJZ290byBub21lbTsKLQkqcGxpbmsgPSBMSU5LX1RPX1REKHRkKTsKKwkqcGxpbmsgPSBMSU5LX1RPX1REKHVoY2ksIHRkKTsKIAotCXVoY2lfZmlsbF90ZCh0ZCwgMCwgVVNCX1BJRF9PVVQgfCB1aGNpX2V4cGxlbigwKSwgMCk7CisJdWhjaV9maWxsX3RkKHVoY2ksIHRkLCAwLCBVU0JfUElEX09VVCB8IHVoY2lfZXhwbGVuKDApLCAwKTsKIAl3bWIoKTsKLQlxaC0+ZHVtbXlfdGQtPnN0YXR1cyB8PSBjcHVfdG9fbGUzMihURF9DVFJMX0FDVElWRSk7CisJcWgtPmR1bW15X3RkLT5zdGF0dXMgfD0gY3B1X3RvX2hjMzIodWhjaSwgVERfQ1RSTF9BQ1RJVkUpOwogCXFoLT5kdW1teV90ZCA9IHRkOwogCiAJdXNiX3NldHRvZ2dsZSh1cmItPmRldiwgdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpLApAQCAtMTEzMyw3ICsxMTM0LDcgQEAKIAkJICogdGhlIHF1ZXVlIGF0IHRoZSBzdGF0dXMgc3RhZ2UgdHJhbnNhY3Rpb24sIHdoaWNoIGlzCiAJCSAqIHRoZSBsYXN0IFRELiAqLwogCQlXQVJOX09OKGxpc3RfZW1wdHkoJnVyYnAtPnRkX2xpc3QpKTsKLQkJcWgtPmVsZW1lbnQgPSBMSU5LX1RPX1REKHRkKTsKKwkJcWgtPmVsZW1lbnQgPSBMSU5LX1RPX1REKHVoY2ksIHRkKTsKIAkJdG1wID0gdGQtPmxpc3QucHJldjsKIAkJcmV0ID0gLUVJTlBST0dSRVNTOwogCkBAIC0xMTQyLDggKzExNDMsOSBAQAogCQkvKiBXaGVuIGEgYnVsay9pbnRlcnJ1cHQgdHJhbnNmZXIgaXMgc2hvcnQsIHdlIGhhdmUgdG8KIAkJICogZml4IHVwIHRoZSB0b2dnbGVzIG9mIHRoZSBmb2xsb3dpbmcgVVJCcyBvbiB0aGUgcXVldWUKIAkJICogYmVmb3JlIHJlc3RhcnRpbmcgdGhlIHF1ZXVlIGF0IHRoZSBuZXh0IFVSQi4gKi8KLQkJcWgtPmluaXRpYWxfdG9nZ2xlID0gdWhjaV90b2dnbGUodGRfdG9rZW4ocWgtPnBvc3RfdGQpKSBeIDE7Ci0JCXVoY2lfZml4dXBfdG9nZ2xlcyhxaCwgMSk7CisJCXFoLT5pbml0aWFsX3RvZ2dsZSA9CisJCQl1aGNpX3RvZ2dsZSh0ZF90b2tlbih1aGNpLCBxaC0+cG9zdF90ZCkpIF4gMTsKKwkJdWhjaV9maXh1cF90b2dnbGVzKHVoY2ksIHFoLCAxKTsKIAogCQlpZiAobGlzdF9lbXB0eSgmdXJicC0+dGRfbGlzdCkpCiAJCQl0ZCA9IHFoLT5wb3N0X3RkOwpAQCAtMTE3OCw3ICsxMTgwLDcgQEAKIAkJdW5zaWduZWQgaW50IGN0cmxzdGF0OwogCQlpbnQgbGVuOwogCi0JCWN0cmxzdGF0ID0gdGRfc3RhdHVzKHRkKTsKKwkJY3RybHN0YXQgPSB0ZF9zdGF0dXModWhjaSwgdGQpOwogCQlzdGF0dXMgPSB1aGNpX3N0YXR1c19iaXRzKGN0cmxzdGF0KTsKIAkJaWYgKHN0YXR1cyAmIFREX0NUUkxfQUNUSVZFKQogCQkJcmV0dXJuIC1FSU5QUk9HUkVTUzsKQEAgLTExODgsNyArMTE5MCw3IEBACiAKIAkJaWYgKHN0YXR1cykgewogCQkJcmV0ID0gdWhjaV9tYXBfc3RhdHVzKHN0YXR1cywKLQkJCQkJdWhjaV9wYWNrZXRvdXQodGRfdG9rZW4odGQpKSk7CisJCQkJCXVoY2lfcGFja2V0b3V0KHRkX3Rva2VuKHVoY2ksIHRkKSkpOwogCQkJaWYgKChkZWJ1ZyA9PSAxICYmIHJldCAhPSAtRVBJUEUpIHx8IGRlYnVnID4gMSkgewogCQkJCS8qIFNvbWUgZGVidWdnaW5nIGNvZGUgKi8KIAkJCQlkZXZfZGJnKCZ1cmItPmRldi0+ZGV2LApAQCAtMTIwNCw3ICsxMjA2LDcgQEAKIAkJCX0KIAogCQkvKiBEaWQgd2UgcmVjZWl2ZSBhIHNob3J0IHBhY2tldD8gKi8KLQkJfSBlbHNlIGlmIChsZW4gPCB1aGNpX2V4cGVjdGVkX2xlbmd0aCh0ZF90b2tlbih0ZCkpKSB7CisJCX0gZWxzZSBpZiAobGVuIDwgdWhjaV9leHBlY3RlZF9sZW5ndGgodGRfdG9rZW4odWhjaSwgdGQpKSkgewogCiAJCQkvKiBGb3IgY29udHJvbCB0cmFuc2ZlcnMsIGdvIHRvIHRoZSBzdGF0dXMgVEQgaWYKIAkJCSAqIHRoaXMgaXNuJ3QgYWxyZWFkeSB0aGUgbGFzdCBkYXRhIFREICovCkBAIC0xMjM2LDEwICsxMjM4LDEwIEBACiAJaWYgKHJldCA8IDApIHsKIAkJLyogTm90ZSB0aGF0IHRoZSBxdWV1ZSBoYXMgc3RvcHBlZCBhbmQgc2F2ZQogCQkgKiB0aGUgbmV4dCB0b2dnbGUgdmFsdWUgKi8KLQkJcWgtPmVsZW1lbnQgPSBVSENJX1BUUl9URVJNOworCQlxaC0+ZWxlbWVudCA9IFVIQ0lfUFRSX1RFUk0odWhjaSk7CiAJCXFoLT5pc19zdG9wcGVkID0gMTsKIAkJcWgtPm5lZWRzX2ZpeHVwID0gKHFoLT50eXBlICE9IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wpOwotCQlxaC0+aW5pdGlhbF90b2dnbGUgPSB1aGNpX3RvZ2dsZSh0ZF90b2tlbih0ZCkpIF4KKwkJcWgtPmluaXRpYWxfdG9nZ2xlID0gdWhjaV90b2dnbGUodGRfdG9rZW4odWhjaSwgdGQpKSBeCiAJCQkJKHJldCA9PSAtRVJFTU9URUlPKTsKIAogCX0gZWxzZQkJLyogU2hvcnQgcGFja2V0IHJlY2VpdmVkICovCkBAIC0xMzM1LDE0ICsxMzM3LDE0IEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAogCQl1aGNpX2FkZF90ZF90b191cmJwKHRkLCB1cmJwKTsKLQkJdWhjaV9maWxsX3RkKHRkLCBzdGF0dXMsIGRlc3RpbmF0aW9uIHwKKwkJdWhjaV9maWxsX3RkKHVoY2ksIHRkLCBzdGF0dXMsIGRlc3RpbmF0aW9uIHwKIAkJCQl1aGNpX2V4cGxlbih1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aCksCiAJCQkJdXJiLT50cmFuc2Zlcl9kbWEgKwogCQkJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCk7CiAJfQogCiAJLyogU2V0IHRoZSBpbnRlcnJ1cHQtb24tY29tcGxldGlvbiBmbGFnIG9uIHRoZSBsYXN0IHBhY2tldC4gKi8KLQl0ZC0+c3RhdHVzIHw9IGNwdV90b19sZTMyKFREX0NUUkxfSU9DKTsKKwl0ZC0+c3RhdHVzIHw9IGNwdV90b19oYzMyKHVoY2ksIFREX0NUUkxfSU9DKTsKIAogCS8qIEFkZCB0aGUgVERzIHRvIHRoZSBmcmFtZSBsaXN0ICovCiAJZnJhbWUgPSB1cmItPnN0YXJ0X2ZyYW1lOwpAQCAtMTM3OCw3ICsxMzgwLDcgQEAKIAogCQl1aGNpX3JlbW92ZV90ZHNfZnJvbV9mcmFtZSh1aGNpLCBxaC0+aXNvX2ZyYW1lKTsKIAotCQljdHJsc3RhdCA9IHRkX3N0YXR1cyh0ZCk7CisJCWN0cmxzdGF0ID0gdGRfc3RhdHVzKHVoY2ksIHRkKTsKIAkJaWYgKGN0cmxzdGF0ICYgVERfQ1RSTF9BQ1RJVkUpIHsKIAkJCXN0YXR1cyA9IC1FWERFVjsJLyogVEQgd2FzIGFkZGVkIHRvbyBsYXRlPyAqLwogCQl9IGVsc2UgewpAQCAtMTYyOSw3ICsxNjMxLDcgQEAKIAkgKiBxdWV1ZSwgdGhlIFFIIGNhbiBub3cgYmUgcmUtYWN0aXZhdGVkLiAqLwogCWlmICghbGlzdF9lbXB0eSgmcWgtPnF1ZXVlKSkgewogCQlpZiAocWgtPm5lZWRzX2ZpeHVwKQotCQkJdWhjaV9maXh1cF90b2dnbGVzKHFoLCAwKTsKKwkJCXVoY2lfZml4dXBfdG9nZ2xlcyh1aGNpLCBxaCwgMCk7CiAKIAkJLyogSWYgdGhlIGZpcnN0IFVSQiBvbiB0aGUgcXVldWUgd2FudHMgRlNCUiBidXQgaXRzIHRpbWUKIAkJICogbGltaXQgaGFzIGV4cGlyZWQsIHNldCB0aGUgbmV4dCBURCB0byBpbnRlcnJ1cHQgb24KQEAgLTE2MzksNyArMTY0MSw3IEBACiAJCQlzdHJ1Y3QgdWhjaV90ZCAqdGQgPSBsaXN0X2VudHJ5KHVyYnAtPnRkX2xpc3QubmV4dCwKIAkJCQkJc3RydWN0IHVoY2lfdGQsIGxpc3QpOwogCi0JCQl0ZC0+c3RhdHVzIHw9IF9fY3B1X3RvX2xlMzIoVERfQ1RSTF9JT0MpOworCQkJdGQtPnN0YXR1cyB8PSBjcHVfdG9faGMzMih1aGNpLCBURF9DVFJMX0lPQyk7CiAJCX0KIAogCQl1aGNpX2FjdGl2YXRlX3FoKHVoY2ksIHFoKTsKQEAgLTE2ODYsNyArMTY4OCw3IEBACiAJfSBlbHNlIHsKIAkJdXJicCA9IGxpc3RfZW50cnkocWgtPnF1ZXVlLm5leHQsIHN0cnVjdCB1cmJfcHJpdiwgbm9kZSk7CiAJCXRkID0gbGlzdF9lbnRyeSh1cmJwLT50ZF9saXN0Lm5leHQsIHN0cnVjdCB1aGNpX3RkLCBsaXN0KTsKLQkJc3RhdHVzID0gdGRfc3RhdHVzKHRkKTsKKwkJc3RhdHVzID0gdGRfc3RhdHVzKHVoY2ksIHRkKTsKIAkJaWYgKCEoc3RhdHVzICYgVERfQ1RSTF9BQ1RJVkUpKSB7CiAKIAkJCS8qIFdlJ3JlIG9rYXksIHRoZSBxdWV1ZSBoYXMgYWR2YW5jZWQgKi8KQEAgLTE3MDQsNyArMTcwNiw4IEBACiAJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgcWgtPmFkdmFuY2VfamlmZmllcyArIFFIX1dBSVRfVElNRU9VVCkpIHsKIAogCQkvKiBEZXRlY3QgdGhlIEludGVsIGJ1ZyBhbmQgd29yayBhcm91bmQgaXQgKi8KLQkJaWYgKHFoLT5wb3N0X3RkICYmIHFoX2VsZW1lbnQocWgpID09IExJTktfVE9fVEQocWgtPnBvc3RfdGQpKSB7CisJCWlmIChxaC0+cG9zdF90ZCAmJiBxaF9lbGVtZW50KHFoKSA9PQorCQkJTElOS19UT19URCh1aGNpLCBxaC0+cG9zdF90ZCkpIHsKIAkJCXFoLT5lbGVtZW50ID0gcWgtPnBvc3RfdGQtPmxpbms7CiAJCQlxaC0+YWR2YW5jZV9qaWZmaWVzID0gamlmZmllczsKIAkJCXJldCA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktZGJnLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktZGJnLmMKaW5kZXggMDIzMTgxNC4uMmUwNDg2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWRiZy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1kYmcuYwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAKIHN0YXRpYyB2b2lkIHhoY2lfcHJpbnRfcG9ydHMoc3RydWN0IHhoY2lfaGNkICp4aGNpKQogewotCXUzMiBfX2lvbWVtICphZGRyOworCV9fbGUzMiBfX2lvbWVtICphZGRyOwogCWludCBpLCBqOwogCWludCBwb3J0czsKIAljaGFyICpuYW1lc1tOVU1fUE9SVF9SRUdTXSA9IHsKQEAgLTI1MywyNyArMjUzLDI3IEBACiB2b2lkIHhoY2lfZGVidWdfdHJiKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgdW5pb24geGhjaV90cmIgKnRyYikKIHsKIAl1NjQJYWRkcmVzczsKLQl1MzIJdHlwZSA9IHhoY2lfcmVhZGwoeGhjaSwgJnRyYi0+bGluay5jb250cm9sKSAmIFRSQl9UWVBFX0JJVE1BU0s7CisJdTMyCXR5cGUgPSBsZTMyX3RvX2NwdSh0cmItPmxpbmsuY29udHJvbCkgJiBUUkJfVFlQRV9CSVRNQVNLOwogCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBUUkJfVFlQRShUUkJfTElOSyk6CiAJCXhoY2lfZGJnKHhoY2ksICJMaW5rIFRSQjpcbiIpOwogCQl4aGNpX3ByaW50X3RyYl9vZmZzZXRzKHhoY2ksIHRyYik7CiAKLQkJYWRkcmVzcyA9IHRyYi0+bGluay5zZWdtZW50X3B0cjsKKwkJYWRkcmVzcyA9IGxlNjRfdG9fY3B1KHRyYi0+bGluay5zZWdtZW50X3B0cik7CiAJCXhoY2lfZGJnKHhoY2ksICJOZXh0IHJpbmcgc2VnbWVudCBETUEgYWRkcmVzcyA9IDB4JWxseFxuIiwgYWRkcmVzcyk7CiAKIAkJeGhjaV9kYmcoeGhjaSwgIkludGVycnVwdGVyIHRhcmdldCA9IDB4JXhcbiIsCi0JCQkJR0VUX0lOVFJfVEFSR0VUKHRyYi0+bGluay5pbnRyX3RhcmdldCkpOworCQkJIEdFVF9JTlRSX1RBUkdFVChsZTMyX3RvX2NwdSh0cmItPmxpbmsuaW50cl90YXJnZXQpKSk7CiAJCXhoY2lfZGJnKHhoY2ksICJDeWNsZSBiaXQgPSAldVxuIiwKLQkJCQkodW5zaWduZWQgaW50KSAodHJiLT5saW5rLmNvbnRyb2wgJiBUUkJfQ1lDTEUpKTsKKwkJCSAodW5zaWduZWQgaW50KSAobGUzMl90b19jcHUodHJiLT5saW5rLmNvbnRyb2wpICYgVFJCX0NZQ0xFKSk7CiAJCXhoY2lfZGJnKHhoY2ksICJUb2dnbGUgY3ljbGUgYml0ID0gJXVcbiIsCi0JCQkJKHVuc2lnbmVkIGludCkgKHRyYi0+bGluay5jb250cm9sICYgTElOS19UT0dHTEUpKTsKKwkJCSAodW5zaWduZWQgaW50KSAobGUzMl90b19jcHUodHJiLT5saW5rLmNvbnRyb2wpICYgTElOS19UT0dHTEUpKTsKIAkJeGhjaV9kYmcoeGhjaSwgIk5vIFNub29wIGJpdCA9ICV1XG4iLAotCQkJCSh1bnNpZ25lZCBpbnQpICh0cmItPmxpbmsuY29udHJvbCAmIFRSQl9OT19TTk9PUCkpOworCQkJICh1bnNpZ25lZCBpbnQpIChsZTMyX3RvX2NwdSh0cmItPmxpbmsuY29udHJvbCkgJiBUUkJfTk9fU05PT1ApKTsKIAkJYnJlYWs7CiAJY2FzZSBUUkJfVFlQRShUUkJfVFJBTlNGRVIpOgotCQlhZGRyZXNzID0gdHJiLT50cmFuc19ldmVudC5idWZmZXI7CisJCWFkZHJlc3MgPSBsZTY0X3RvX2NwdSh0cmItPnRyYW5zX2V2ZW50LmJ1ZmZlcik7CiAJCS8qCiAJCSAqIEZJWE1FOiBsb29rIGF0IGZsYWdzIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBhbiBhZGRyZXNzIG9yIGlmCiAJCSAqIHRoZSBkYXRhIGlzIGRpcmVjdGx5IGluIHRoZSBidWZmZXIgZmllbGQuCkBAIC0yODEsMTEgKzI4MSwxMiBAQAogCQl4aGNpX2RiZyh4aGNpLCAiRE1BIGFkZHJlc3Mgb3IgYnVmZmVyIGNvbnRlbnRzPSAlbGx1XG4iLCBhZGRyZXNzKTsKIAkJYnJlYWs7CiAJY2FzZSBUUkJfVFlQRShUUkJfQ09NUExFVElPTik6Ci0JCWFkZHJlc3MgPSB0cmItPmV2ZW50X2NtZC5jbWRfdHJiOworCQlhZGRyZXNzID0gbGU2NF90b19jcHUodHJiLT5ldmVudF9jbWQuY21kX3RyYik7CiAJCXhoY2lfZGJnKHhoY2ksICJDb21tYW5kIFRSQiBwb2ludGVyID0gJWxsdVxuIiwgYWRkcmVzcyk7CiAJCXhoY2lfZGJnKHhoY2ksICJDb21wbGV0aW9uIHN0YXR1cyA9ICV1XG4iLAotCQkJCSh1bnNpZ25lZCBpbnQpIEdFVF9DT01QX0NPREUodHJiLT5ldmVudF9jbWQuc3RhdHVzKSk7Ci0JCXhoY2lfZGJnKHhoY2ksICJGbGFncyA9IDB4JXhcbiIsICh1bnNpZ25lZCBpbnQpIHRyYi0+ZXZlbnRfY21kLmZsYWdzKTsKKwkJCSAodW5zaWduZWQgaW50KSBHRVRfQ09NUF9DT0RFKGxlMzJfdG9fY3B1KHRyYi0+ZXZlbnRfY21kLnN0YXR1cykpKTsKKwkJeGhjaV9kYmcoeGhjaSwgIkZsYWdzID0gMHgleFxuIiwKKwkJCSAodW5zaWduZWQgaW50KSBsZTMyX3RvX2NwdSh0cmItPmV2ZW50X2NtZC5mbGFncykpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQl4aGNpX2RiZyh4aGNpLCAiVW5rbm93biBUUkIgd2l0aCBUUkIgdHlwZSBJRCAldVxuIiwKQEAgLTMxMSwxNiArMzEyLDE2IEBACiB2b2lkIHhoY2lfZGVidWdfc2VnbWVudChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHN0cnVjdCB4aGNpX3NlZ21lbnQgKnNlZykKIHsKIAlpbnQgaTsKLQl1MzIgYWRkciA9ICh1MzIpIHNlZy0+ZG1hOworCXU2NCBhZGRyID0gc2VnLT5kbWE7CiAJdW5pb24geGhjaV90cmIgKnRyYiA9IHNlZy0+dHJiczsKIAogCWZvciAoaSA9IDA7IGkgPCBUUkJTX1BFUl9TRUdNRU5UOyArK2kpIHsKIAkJdHJiID0gJnNlZy0+dHJic1tpXTsKLQkJeGhjaV9kYmcoeGhjaSwgIkAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHhcbiIsIGFkZHIsCi0JCQkJbG93ZXJfMzJfYml0cyh0cmItPmxpbmsuc2VnbWVudF9wdHIpLAotCQkJCXVwcGVyXzMyX2JpdHModHJiLT5saW5rLnNlZ21lbnRfcHRyKSwKLQkJCQkodW5zaWduZWQgaW50KSB0cmItPmxpbmsuaW50cl90YXJnZXQsCi0JCQkJKHVuc2lnbmVkIGludCkgdHJiLT5saW5rLmNvbnRyb2wpOworCQl4aGNpX2RiZyh4aGNpLCAiQCUwMTZsbHggJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwgYWRkciwKKwkJCSAodTMyKWxvd2VyXzMyX2JpdHMobGU2NF90b19jcHUodHJiLT5saW5rLnNlZ21lbnRfcHRyKSksCisJCQkgKHUzMil1cHBlcl8zMl9iaXRzKGxlNjRfdG9fY3B1KHRyYi0+bGluay5zZWdtZW50X3B0cikpLAorCQkJICh1bnNpZ25lZCBpbnQpIGxlMzJfdG9fY3B1KHRyYi0+bGluay5pbnRyX3RhcmdldCksCisJCQkgKHVuc2lnbmVkIGludCkgbGUzMl90b19jcHUodHJiLT5saW5rLmNvbnRyb2wpKTsKIAkJYWRkciArPSBzaXplb2YoKnRyYik7CiAJfQogfQpAQCAtMzkxLDE4ICszOTIsMTggQEAKIAogdm9pZCB4aGNpX2RiZ19lcnN0KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgc3RydWN0IHhoY2lfZXJzdCAqZXJzdCkKIHsKLQl1MzIgYWRkciA9ICh1MzIpIGVyc3QtPmVyc3RfZG1hX2FkZHI7CisJdTY0IGFkZHIgPSBlcnN0LT5lcnN0X2RtYV9hZGRyOwogCWludCBpOwogCXN0cnVjdCB4aGNpX2Vyc3RfZW50cnkgKmVudHJ5OwogCiAJZm9yIChpID0gMDsgaSA8IGVyc3QtPm51bV9lbnRyaWVzOyArK2kpIHsKIAkJZW50cnkgPSAmZXJzdC0+ZW50cmllc1tpXTsKLQkJeGhjaV9kYmcoeGhjaSwgIkAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHhcbiIsCi0JCQkJKHVuc2lnbmVkIGludCkgYWRkciwKLQkJCQlsb3dlcl8zMl9iaXRzKGVudHJ5LT5zZWdfYWRkciksCi0JCQkJdXBwZXJfMzJfYml0cyhlbnRyeS0+c2VnX2FkZHIpLAotCQkJCSh1bnNpZ25lZCBpbnQpIGVudHJ5LT5zZWdfc2l6ZSwKLQkJCQkodW5zaWduZWQgaW50KSBlbnRyeS0+cnN2ZCk7CisJCXhoY2lfZGJnKHhoY2ksICJAJTAxNmxseCAlMDh4ICUwOHggJTA4eCAlMDh4XG4iLAorCQkJIGFkZHIsCisJCQkgbG93ZXJfMzJfYml0cyhsZTY0X3RvX2NwdShlbnRyeS0+c2VnX2FkZHIpKSwKKwkJCSB1cHBlcl8zMl9iaXRzKGxlNjRfdG9fY3B1KGVudHJ5LT5zZWdfYWRkcikpLAorCQkJICh1bnNpZ25lZCBpbnQpIGxlMzJfdG9fY3B1KGVudHJ5LT5zZWdfc2l6ZSksCisJCQkgKHVuc2lnbmVkIGludCkgbGUzMl90b19jcHUoZW50cnktPnJzdmQpKTsKIAkJYWRkciArPSBzaXplb2YoKmVudHJ5KTsKIAl9CiB9CkBAIC00MzYsNyArNDM3LDcgQEAKIHsKIAlzdHJ1Y3QgeGhjaV9zbG90X2N0eCAqc2xvdF9jdHggPSB4aGNpX2dldF9zbG90X2N0eCh4aGNpLCBjdHgpOwogCi0Jc3dpdGNoIChHRVRfU0xPVF9TVEFURShzbG90X2N0eC0+ZGV2X3N0YXRlKSkgeworCXN3aXRjaCAoR0VUX1NMT1RfU1RBVEUobGUzMl90b19jcHUoc2xvdF9jdHgtPmRldl9zdGF0ZSkpKSB7CiAJY2FzZSAwOgogCQlyZXR1cm4gImVuYWJsZWQvZGlzYWJsZWQiOwogCWNhc2UgMToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1odWIuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1odWIuYwppbmRleCA3M2Y3NWQyLi4wYmU3ODhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaHViLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLWh1Yi5jCkBAIC01MCw3ICs1MCw3IEBACiAJdGVtcCB8PSAweDAwMDg7CiAJLyogQml0cyA2OjUgLSBubyBUVHMgaW4gcm9vdCBwb3J0cyAqLwogCS8qIEJpdCAgNyAtIG5vIHBvcnQgaW5kaWNhdG9ycyAqLwotCWRlc2MtPndIdWJDaGFyYWN0ZXJpc3RpY3MgPSAoX19mb3JjZSBfX3UxNikgY3B1X3RvX2xlMTYodGVtcCk7CisJZGVzYy0+d0h1YkNoYXJhY3RlcmlzdGljcyA9IGNwdV90b19sZTE2KHRlbXApOwogfQogCiAvKiBGaWxsIGluIHRoZSBVU0IgMi4wIHJvb3RodWIgZGVzY3JpcHRvciAqLwpAQCAtMzE0LDcgKzMxNCw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIHhoY2lfZGlzYWJsZV9wb3J0KHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKLQkJdTE2IHdJbmRleCwgdTMyIF9faW9tZW0gKmFkZHIsIHUzMiBwb3J0X3N0YXR1cykKKwkJdTE2IHdJbmRleCwgX19sZTMyIF9faW9tZW0gKmFkZHIsIHUzMiBwb3J0X3N0YXR1cykKIHsKIAkvKiBEb24ndCBhbGxvdyB0aGUgVVNCIGNvcmUgdG8gZGlzYWJsZSBTdXBlclNwZWVkIHBvcnRzLiAqLwogCWlmIChoY2QtPnNwZWVkID09IEhDRF9VU0IzKSB7CkBAIC0zMzEsNyArMzMxLDcgQEAKIH0KIAogc3RhdGljIHZvaWQgeGhjaV9jbGVhcl9wb3J0X2NoYW5nZV9iaXQoc3RydWN0IHhoY2lfaGNkICp4aGNpLCB1MTYgd1ZhbHVlLAotCQl1MTYgd0luZGV4LCB1MzIgX19pb21lbSAqYWRkciwgdTMyIHBvcnRfc3RhdHVzKQorCQl1MTYgd0luZGV4LCBfX2xlMzIgX19pb21lbSAqYWRkciwgdTMyIHBvcnRfc3RhdHVzKQogewogCWNoYXIgKnBvcnRfY2hhbmdlX2JpdDsKIAl1MzIgc3RhdHVzOwpAQCAtMzQxLDYgKzM0MSwxMCBAQAogCQlzdGF0dXMgPSBQT1JUX1JDOwogCQlwb3J0X2NoYW5nZV9iaXQgPSAicmVzZXQiOwogCQlicmVhazsKKwljYXNlIFVTQl9QT1JUX0ZFQVRfQ19CSF9QT1JUX1JFU0VUOgorCQlzdGF0dXMgPSBQT1JUX1dSQzsKKwkJcG9ydF9jaGFuZ2VfYml0ID0gIndhcm0oQkgpIHJlc2V0IjsKKwkJYnJlYWs7CiAJY2FzZSBVU0JfUE9SVF9GRUFUX0NfQ09OTkVDVElPTjoKIAkJc3RhdHVzID0gUE9SVF9DU0M7CiAJCXBvcnRfY2hhbmdlX2JpdCA9ICJjb25uZWN0IjsKQEAgLTM1Nyw2ICszNjEsMTAgQEAKIAkJc3RhdHVzID0gUE9SVF9QTEM7CiAJCXBvcnRfY2hhbmdlX2JpdCA9ICJzdXNwZW5kL3Jlc3VtZSI7CiAJCWJyZWFrOworCWNhc2UgVVNCX1BPUlRfRkVBVF9DX1BPUlRfTElOS19TVEFURToKKwkJc3RhdHVzID0gUE9SVF9QTEM7CisJCXBvcnRfY2hhbmdlX2JpdCA9ICJsaW5rIHN0YXRlIjsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyogU2hvdWxkIG5ldmVyIGhhcHBlbiAqLwogCQlyZXR1cm47CkBAIC0zNjgsMjUgKzM3NiwzNiBAQAogCQkJcG9ydF9jaGFuZ2VfYml0LCB3SW5kZXgsIHBvcnRfc3RhdHVzKTsKIH0KIAorc3RhdGljIGludCB4aGNpX2dldF9wb3J0cyhzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBfX2xlMzIgX19pb21lbSAqKipwb3J0X2FycmF5KQoreworCWludCBtYXhfcG9ydHM7CisJc3RydWN0IHhoY2lfaGNkCSp4aGNpID0gaGNkX3RvX3hoY2koaGNkKTsKKworCWlmIChoY2QtPnNwZWVkID09IEhDRF9VU0IzKSB7CisJCW1heF9wb3J0cyA9IHhoY2ktPm51bV91c2IzX3BvcnRzOworCQkqcG9ydF9hcnJheSA9IHhoY2ktPnVzYjNfcG9ydHM7CisJfSBlbHNlIHsKKwkJbWF4X3BvcnRzID0geGhjaS0+bnVtX3VzYjJfcG9ydHM7CisJCSpwb3J0X2FycmF5ID0geGhjaS0+dXNiMl9wb3J0czsKKwl9CisKKwlyZXR1cm4gbWF4X3BvcnRzOworfQorCiBpbnQgeGhjaV9odWJfY29udHJvbChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCB1MTYgdHlwZVJlcSwgdTE2IHdWYWx1ZSwKIAkJdTE2IHdJbmRleCwgY2hhciAqYnVmLCB1MTYgd0xlbmd0aCkKIHsKIAlzdHJ1Y3QgeGhjaV9oY2QJKnhoY2kgPSBoY2RfdG9feGhjaShoY2QpOwotCWludCBwb3J0czsKKwlpbnQgbWF4X3BvcnRzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHRlbXAsIHRlbXAxLCBzdGF0dXM7CiAJaW50IHJldHZhbCA9IDA7Ci0JdTMyIF9faW9tZW0gKipwb3J0X2FycmF5OworCV9fbGUzMiBfX2lvbWVtICoqcG9ydF9hcnJheTsKIAlpbnQgc2xvdF9pZDsKIAlzdHJ1Y3QgeGhjaV9idXNfc3RhdGUgKmJ1c19zdGF0ZTsKKwl1MTYgbGlua19zdGF0ZSA9IDA7CiAKLQlpZiAoaGNkLT5zcGVlZCA9PSBIQ0RfVVNCMykgewotCQlwb3J0cyA9IHhoY2ktPm51bV91c2IzX3BvcnRzOwotCQlwb3J0X2FycmF5ID0geGhjaS0+dXNiM19wb3J0czsKLQl9IGVsc2UgewotCQlwb3J0cyA9IHhoY2ktPm51bV91c2IyX3BvcnRzOwotCQlwb3J0X2FycmF5ID0geGhjaS0+dXNiMl9wb3J0czsKLQl9CisJbWF4X3BvcnRzID0geGhjaV9nZXRfcG9ydHMoaGNkLCAmcG9ydF9hcnJheSk7CiAJYnVzX3N0YXRlID0gJnhoY2ktPmJ1c19zdGF0ZVtoY2RfaW5kZXgoaGNkKV07CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwpAQCAtNDExLDcgKzQzMCw3IEBACiAJCQkJKHN0cnVjdCB1c2JfaHViX2Rlc2NyaXB0b3IgKikgYnVmKTsKIAkJYnJlYWs7CiAJY2FzZSBHZXRQb3J0U3RhdHVzOgotCQlpZiAoIXdJbmRleCB8fCB3SW5kZXggPiBwb3J0cykKKwkJaWYgKCF3SW5kZXggfHwgd0luZGV4ID4gbWF4X3BvcnRzKQogCQkJZ290byBlcnJvcjsKIAkJd0luZGV4LS07CiAJCXN0YXR1cyA9IDA7CkBAIC00MjIsOSArNDQxLDYgQEAKIAkJfQogCQl4aGNpX2RiZyh4aGNpLCAiZ2V0IHBvcnQgc3RhdHVzLCBhY3R1YWwgcG9ydCAlZCBzdGF0dXMgID0gMHgleFxuIiwgd0luZGV4LCB0ZW1wKTsKIAotCQkvKiBGSVhNRSAtIHNob3VsZCB3ZSByZXR1cm4gYSBwb3J0IHN0YXR1cyB2YWx1ZSBsaWtlIHRoZSBVU0IKLQkJICogMy4wIGV4dGVybmFsIGh1YnMgZG8/Ci0JCSAqLwogCQkvKiB3UG9ydENoYW5nZSBiaXRzICovCiAJCWlmICh0ZW1wICYgUE9SVF9DU0MpCiAJCQlzdGF0dXMgfD0gVVNCX1BPUlRfU1RBVF9DX0NPTk5FQ1RJT04gPDwgMTY7CkBAIC00MzIsMTMgKzQ0OCwyMSBAQAogCQkJc3RhdHVzIHw9IFVTQl9QT1JUX1NUQVRfQ19FTkFCTEUgPDwgMTY7CiAJCWlmICgodGVtcCAmIFBPUlRfT0NDKSkKIAkJCXN0YXR1cyB8PSBVU0JfUE9SVF9TVEFUX0NfT1ZFUkNVUlJFTlQgPDwgMTY7Ci0JCS8qCi0JCSAqIEZJWE1FIGlnbm9yaW5nIHJlc2V0IGFuZCBVU0IgMi4xLzMuMCBzcGVjaWZpYwotCQkgKiBjaGFuZ2VzCi0JCSAqLwotCQlpZiAoKHRlbXAgJiBQT1JUX1BMU19NQVNLKSA9PSBYREVWX1UzCi0JCQkmJiAodGVtcCAmIFBPUlRfUE9XRVIpKQotCQkJc3RhdHVzIHw9IDEgPDwgVVNCX1BPUlRfRkVBVF9TVVNQRU5EOworCQlpZiAoKHRlbXAgJiBQT1JUX1JDKSkKKwkJCXN0YXR1cyB8PSBVU0JfUE9SVF9TVEFUX0NfUkVTRVQgPDwgMTY7CisJCS8qIFVTQjMuMCBvbmx5ICovCisJCWlmIChoY2QtPnNwZWVkID09IEhDRF9VU0IzKSB7CisJCQlpZiAoKHRlbXAgJiBQT1JUX1BMQykpCisJCQkJc3RhdHVzIHw9IFVTQl9QT1JUX1NUQVRfQ19MSU5LX1NUQVRFIDw8IDE2OworCQkJaWYgKCh0ZW1wICYgUE9SVF9XUkMpKQorCQkJCXN0YXR1cyB8PSBVU0JfUE9SVF9TVEFUX0NfQkhfUkVTRVQgPDwgMTY7CisJCX0KKworCQlpZiAoaGNkLT5zcGVlZCAhPSBIQ0RfVVNCMykgeworCQkJaWYgKCh0ZW1wICYgUE9SVF9QTFNfTUFTSykgPT0gWERFVl9VMworCQkJCQkmJiAodGVtcCAmIFBPUlRfUE9XRVIpKQorCQkJCXN0YXR1cyB8PSBVU0JfUE9SVF9TVEFUX1NVU1BFTkQ7CisJCX0KIAkJaWYgKCh0ZW1wICYgUE9SVF9QTFNfTUFTSykgPT0gWERFVl9SRVNVTUUpIHsKIAkJCWlmICgodGVtcCAmIFBPUlRfUkVTRVQpIHx8ICEodGVtcCAmIFBPUlRfUEUpKQogCQkJCWdvdG8gZXJyb3I7CkBAIC00NjksNyArNDkzLDggQEAKIAkJCSYmICh0ZW1wICYgUE9SVF9QT1dFUikKIAkJCSYmIChidXNfc3RhdGUtPnN1c3BlbmRlZF9wb3J0cyAmICgxIDw8IHdJbmRleCkpKSB7CiAJCQlidXNfc3RhdGUtPnN1c3BlbmRlZF9wb3J0cyAmPSB+KDEgPDwgd0luZGV4KTsKLQkJCWJ1c19zdGF0ZS0+cG9ydF9jX3N1c3BlbmQgfD0gMSA8PCB3SW5kZXg7CisJCQlpZiAoaGNkLT5zcGVlZCAhPSBIQ0RfVVNCMykKKwkJCQlidXNfc3RhdGUtPnBvcnRfY19zdXNwZW5kIHw9IDEgPDwgd0luZGV4OwogCQl9CiAJCWlmICh0ZW1wICYgUE9SVF9DT05ORUNUKSB7CiAJCQlzdGF0dXMgfD0gVVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OOwpAQCAtNDgxLDE2ICs1MDYsMzAgQEAKIAkJCXN0YXR1cyB8PSBVU0JfUE9SVF9TVEFUX09WRVJDVVJSRU5UOwogCQlpZiAodGVtcCAmIFBPUlRfUkVTRVQpCiAJCQlzdGF0dXMgfD0gVVNCX1BPUlRfU1RBVF9SRVNFVDsKLQkJaWYgKHRlbXAgJiBQT1JUX1BPV0VSKQotCQkJc3RhdHVzIHw9IFVTQl9QT1JUX1NUQVRfUE9XRVI7CisJCWlmICh0ZW1wICYgUE9SVF9QT1dFUikgeworCQkJaWYgKGhjZC0+c3BlZWQgPT0gSENEX1VTQjMpCisJCQkJc3RhdHVzIHw9IFVTQl9TU19QT1JUX1NUQVRfUE9XRVI7CisJCQllbHNlCisJCQkJc3RhdHVzIHw9IFVTQl9QT1JUX1NUQVRfUE9XRVI7CisJCX0KKwkJLyogUG9ydCBMaW5rIFN0YXRlICovCisJCWlmIChoY2QtPnNwZWVkID09IEhDRF9VU0IzKSB7CisJCQkvKiByZXN1bWUgc3RhdGUgaXMgYSB4SENJIGludGVybmFsIHN0YXRlLgorCQkJICogRG8gbm90IHJlcG9ydCBpdCB0byB1c2IgY29yZS4KKwkJCSAqLworCQkJaWYgKCh0ZW1wICYgUE9SVF9QTFNfTUFTSykgIT0gWERFVl9SRVNVTUUpCisJCQkJc3RhdHVzIHw9ICh0ZW1wICYgUE9SVF9QTFNfTUFTSyk7CisJCX0KIAkJaWYgKGJ1c19zdGF0ZS0+cG9ydF9jX3N1c3BlbmQgJiAoMSA8PCB3SW5kZXgpKQogCQkJc3RhdHVzIHw9IDEgPDwgVVNCX1BPUlRfRkVBVF9DX1NVU1BFTkQ7CiAJCXhoY2lfZGJnKHhoY2ksICJHZXQgcG9ydCBzdGF0dXMgcmV0dXJuZWQgMHgleFxuIiwgc3RhdHVzKTsKIAkJcHV0X3VuYWxpZ25lZChjcHVfdG9fbGUzMihzdGF0dXMpLCAoX19sZTMyICopIGJ1Zik7CiAJCWJyZWFrOwogCWNhc2UgU2V0UG9ydEZlYXR1cmU6CisJCWlmICh3VmFsdWUgPT0gVVNCX1BPUlRfRkVBVF9MSU5LX1NUQVRFKQorCQkJbGlua19zdGF0ZSA9ICh3SW5kZXggJiAweGZmMDApID4+IDM7CiAJCXdJbmRleCAmPSAweGZmOwotCQlpZiAoIXdJbmRleCB8fCB3SW5kZXggPiBwb3J0cykKKwkJaWYgKCF3SW5kZXggfHwgd0luZGV4ID4gbWF4X3BvcnRzKQogCQkJZ290byBlcnJvcjsKIAkJd0luZGV4LS07CiAJCXRlbXAgPSB4aGNpX3JlYWRsKHhoY2ksIHBvcnRfYXJyYXlbd0luZGV4XSk7CkBAIC01MzcsNiArNTc2LDQ0IEBACiAJCQl0ZW1wID0geGhjaV9yZWFkbCh4aGNpLCBwb3J0X2FycmF5W3dJbmRleF0pOwogCQkJYnVzX3N0YXRlLT5zdXNwZW5kZWRfcG9ydHMgfD0gMSA8PCB3SW5kZXg7CiAJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0xJTktfU1RBVEU6CisJCQl0ZW1wID0geGhjaV9yZWFkbCh4aGNpLCBwb3J0X2FycmF5W3dJbmRleF0pOworCQkJLyogU29mdHdhcmUgc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHNldAorCQkJICogcG9ydCBsaW5rIHN0YXRlIGFib3ZlICc1JyAoUnguRGV0ZWN0KSBhbmQgdGhlIHBvcnQKKwkJCSAqIG11c3QgYmUgZW5hYmxlZC4KKwkJCSAqLworCQkJaWYgKCh0ZW1wICYgUE9SVF9QRSkgPT0gMCB8fAorCQkJCShsaW5rX3N0YXRlID4gVVNCX1NTX1BPUlRfTFNfUlhfREVURUNUKSkgeworCQkJCXhoY2lfd2Fybih4aGNpLCAiQ2Fubm90IHNldCBsaW5rIHN0YXRlLlxuIik7CisJCQkJZ290byBlcnJvcjsKKwkJCX0KKworCQkJaWYgKGxpbmtfc3RhdGUgPT0gVVNCX1NTX1BPUlRfTFNfVTMpIHsKKwkJCQlzbG90X2lkID0geGhjaV9maW5kX3Nsb3RfaWRfYnlfcG9ydChoY2QsIHhoY2ksCisJCQkJCQl3SW5kZXggKyAxKTsKKwkJCQlpZiAoc2xvdF9pZCkgeworCQkJCQkvKiB1bmxvY2sgdG8gZXhlY3V0ZSBzdG9wIGVuZHBvaW50CisJCQkJCSAqIGNvbW1hbmRzICovCisJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhoY2ktPmxvY2ssCisJCQkJCQkJCWZsYWdzKTsKKwkJCQkJeGhjaV9zdG9wX2RldmljZSh4aGNpLCBzbG90X2lkLCAxKTsKKwkJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKKwkJCQl9CisJCQl9CisKKwkJCXRlbXAgPSB4aGNpX3BvcnRfc3RhdGVfdG9fbmV1dHJhbCh0ZW1wKTsKKwkJCXRlbXAgJj0gflBPUlRfUExTX01BU0s7CisJCQl0ZW1wIHw9IFBPUlRfTElOS19TVFJPQkUgfCBsaW5rX3N0YXRlOworCQkJeGhjaV93cml0ZWwoeGhjaSwgdGVtcCwgcG9ydF9hcnJheVt3SW5kZXhdKTsKKworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGhjaS0+bG9jaywgZmxhZ3MpOworCQkJbXNsZWVwKDIwKTsgLyogd2FpdCBkZXZpY2UgdG8gZW50ZXIgKi8KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CisKKwkJCXRlbXAgPSB4aGNpX3JlYWRsKHhoY2ksIHBvcnRfYXJyYXlbd0luZGV4XSk7CisJCQlpZiAobGlua19zdGF0ZSA9PSBVU0JfU1NfUE9SVF9MU19VMykKKwkJCQlidXNfc3RhdGUtPnN1c3BlbmRlZF9wb3J0cyB8PSAxIDw8IHdJbmRleDsKKwkJCWJyZWFrOwogCQljYXNlIFVTQl9QT1JUX0ZFQVRfUE9XRVI6CiAJCQkvKgogCQkJICogVHVybiBvbiBwb3J0cywgZXZlbiBpZiB0aGVyZSBpc24ndCBwZXItcG9ydCBzd2l0Y2hpbmcuCkBAIC01NTcsNiArNjM0LDEyIEBACiAJCQl0ZW1wID0geGhjaV9yZWFkbCh4aGNpLCBwb3J0X2FycmF5W3dJbmRleF0pOwogCQkJeGhjaV9kYmcoeGhjaSwgInNldCBwb3J0IHJlc2V0LCBhY3R1YWwgcG9ydCAlZCBzdGF0dXMgID0gMHgleFxuIiwgd0luZGV4LCB0ZW1wKTsKIAkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfQkhfUE9SVF9SRVNFVDoKKwkJCXRlbXAgfD0gUE9SVF9XUjsKKwkJCXhoY2lfd3JpdGVsKHhoY2ksIHRlbXAsIHBvcnRfYXJyYXlbd0luZGV4XSk7CisKKwkJCXRlbXAgPSB4aGNpX3JlYWRsKHhoY2ksIHBvcnRfYXJyYXlbd0luZGV4XSk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWdvdG8gZXJyb3I7CiAJCX0KQEAgLTU2NCw3ICs2NDcsNyBAQAogCQl0ZW1wID0geGhjaV9yZWFkbCh4aGNpLCBwb3J0X2FycmF5W3dJbmRleF0pOwogCQlicmVhazsKIAljYXNlIENsZWFyUG9ydEZlYXR1cmU6Ci0JCWlmICghd0luZGV4IHx8IHdJbmRleCA+IHBvcnRzKQorCQlpZiAoIXdJbmRleCB8fCB3SW5kZXggPiBtYXhfcG9ydHMpCiAJCQlnb3RvIGVycm9yOwogCQl3SW5kZXgtLTsKIAkJdGVtcCA9IHhoY2lfcmVhZGwoeGhjaSwgcG9ydF9hcnJheVt3SW5kZXhdKTsKQEAgLTU4NCwzNSArNjY3LDI3IEBACiAJCQlpZiAodGVtcCAmIFhERVZfVTMpIHsKIAkJCQlpZiAoKHRlbXAgJiBQT1JUX1BFKSA9PSAwKQogCQkJCQlnb3RvIGVycm9yOwotCQkJCWlmIChERVZfU1VQRVJTUEVFRCh0ZW1wKSkgewotCQkJCQl0ZW1wID0geGhjaV9wb3J0X3N0YXRlX3RvX25ldXRyYWwodGVtcCk7Ci0JCQkJCXRlbXAgJj0gflBPUlRfUExTX01BU0s7Ci0JCQkJCXRlbXAgfD0gUE9SVF9MSU5LX1NUUk9CRSB8IFhERVZfVTA7Ci0JCQkJCXhoY2lfd3JpdGVsKHhoY2ksIHRlbXAsCi0JCQkJCQkJcG9ydF9hcnJheVt3SW5kZXhdKTsKLQkJCQkJeGhjaV9yZWFkbCh4aGNpLCBwb3J0X2FycmF5W3dJbmRleF0pOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXRlbXAgPSB4aGNpX3BvcnRfc3RhdGVfdG9fbmV1dHJhbCh0ZW1wKTsKLQkJCQkJdGVtcCAmPSB+UE9SVF9QTFNfTUFTSzsKLQkJCQkJdGVtcCB8PSBQT1JUX0xJTktfU1RST0JFIHwgWERFVl9SRVNVTUU7Ci0JCQkJCXhoY2lfd3JpdGVsKHhoY2ksIHRlbXAsCi0JCQkJCQkJcG9ydF9hcnJheVt3SW5kZXhdKTsKIAotCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4aGNpLT5sb2NrLAotCQkJCQkJCSAgICAgICBmbGFncyk7Ci0JCQkJCW1zbGVlcCgyMCk7Ci0JCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CisJCQkJdGVtcCA9IHhoY2lfcG9ydF9zdGF0ZV90b19uZXV0cmFsKHRlbXApOworCQkJCXRlbXAgJj0gflBPUlRfUExTX01BU0s7CisJCQkJdGVtcCB8PSBQT1JUX0xJTktfU1RST0JFIHwgWERFVl9SRVNVTUU7CisJCQkJeGhjaV93cml0ZWwoeGhjaSwgdGVtcCwKKwkJCQkJCXBvcnRfYXJyYXlbd0luZGV4XSk7CiAKLQkJCQkJdGVtcCA9IHhoY2lfcmVhZGwoeGhjaSwKLQkJCQkJCQlwb3J0X2FycmF5W3dJbmRleF0pOwotCQkJCQl0ZW1wID0geGhjaV9wb3J0X3N0YXRlX3RvX25ldXRyYWwodGVtcCk7Ci0JCQkJCXRlbXAgJj0gflBPUlRfUExTX01BU0s7Ci0JCQkJCXRlbXAgfD0gUE9SVF9MSU5LX1NUUk9CRSB8IFhERVZfVTA7Ci0JCQkJCXhoY2lfd3JpdGVsKHhoY2ksIHRlbXAsCi0JCQkJCQkJcG9ydF9hcnJheVt3SW5kZXhdKTsKLQkJCQl9Ci0JCQkJYnVzX3N0YXRlLT5wb3J0X2Nfc3VzcGVuZCB8PSAxIDw8IHdJbmRleDsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4aGNpLT5sb2NrLAorCQkJCQkJICAgICAgIGZsYWdzKTsKKwkJCQltc2xlZXAoMjApOworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CisKKwkJCQl0ZW1wID0geGhjaV9yZWFkbCh4aGNpLAorCQkJCQkJcG9ydF9hcnJheVt3SW5kZXhdKTsKKwkJCQl0ZW1wID0geGhjaV9wb3J0X3N0YXRlX3RvX25ldXRyYWwodGVtcCk7CisJCQkJdGVtcCAmPSB+UE9SVF9QTFNfTUFTSzsKKwkJCQl0ZW1wIHw9IFBPUlRfTElOS19TVFJPQkUgfCBYREVWX1UwOworCQkJCXhoY2lfd3JpdGVsKHhoY2ksIHRlbXAsCisJCQkJCQlwb3J0X2FycmF5W3dJbmRleF0pOwogCQkJfQorCQkJYnVzX3N0YXRlLT5wb3J0X2Nfc3VzcGVuZCB8PSAxIDw8IHdJbmRleDsKIAogCQkJc2xvdF9pZCA9IHhoY2lfZmluZF9zbG90X2lkX2J5X3BvcnQoaGNkLCB4aGNpLAogCQkJCQl3SW5kZXggKyAxKTsKQEAgLTYyNSw5ICs3MDAsMTEgQEAKIAkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfU1VTUEVORDoKIAkJCWJ1c19zdGF0ZS0+cG9ydF9jX3N1c3BlbmQgJj0gfigxIDw8IHdJbmRleCk7CiAJCWNhc2UgVVNCX1BPUlRfRkVBVF9DX1JFU0VUOgorCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19CSF9QT1JUX1JFU0VUOgogCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19DT05ORUNUSU9OOgogCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19PVkVSX0NVUlJFTlQ6CiAJCWNhc2UgVVNCX1BPUlRfRkVBVF9DX0VOQUJMRToKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfUE9SVF9MSU5LX1NUQVRFOgogCQkJeGhjaV9jbGVhcl9wb3J0X2NoYW5nZV9iaXQoeGhjaSwgd1ZhbHVlLCB3SW5kZXgsCiAJCQkJCXBvcnRfYXJyYXlbd0luZGV4XSwgdGVtcCk7CiAJCQlicmVhazsKQEAgLTY2MywyOSArNzQwLDIzIEBACiAJdTMyIG1hc2s7CiAJaW50IGksIHJldHZhbDsKIAlzdHJ1Y3QgeGhjaV9oY2QJKnhoY2kgPSBoY2RfdG9feGhjaShoY2QpOwotCWludCBwb3J0czsKLQl1MzIgX19pb21lbSAqKnBvcnRfYXJyYXk7CisJaW50IG1heF9wb3J0czsKKwlfX2xlMzIgX19pb21lbSAqKnBvcnRfYXJyYXk7CiAJc3RydWN0IHhoY2lfYnVzX3N0YXRlICpidXNfc3RhdGU7CiAKLQlpZiAoaGNkLT5zcGVlZCA9PSBIQ0RfVVNCMykgewotCQlwb3J0cyA9IHhoY2ktPm51bV91c2IzX3BvcnRzOwotCQlwb3J0X2FycmF5ID0geGhjaS0+dXNiM19wb3J0czsKLQl9IGVsc2UgewotCQlwb3J0cyA9IHhoY2ktPm51bV91c2IyX3BvcnRzOwotCQlwb3J0X2FycmF5ID0geGhjaS0+dXNiMl9wb3J0czsKLQl9CisJbWF4X3BvcnRzID0geGhjaV9nZXRfcG9ydHMoaGNkLCAmcG9ydF9hcnJheSk7CiAJYnVzX3N0YXRlID0gJnhoY2ktPmJ1c19zdGF0ZVtoY2RfaW5kZXgoaGNkKV07CiAKIAkvKiBJbml0aWFsIHN0YXR1cyBpcyBubyBjaGFuZ2VzICovCi0JcmV0dmFsID0gKHBvcnRzICsgOCkgLyA4OworCXJldHZhbCA9IChtYXhfcG9ydHMgKyA4KSAvIDg7CiAJbWVtc2V0KGJ1ZiwgMCwgcmV0dmFsKTsKIAlzdGF0dXMgPSAwOwogCi0JbWFzayA9IFBPUlRfQ1NDIHwgUE9SVF9QRUMgfCBQT1JUX09DQzsKKwltYXNrID0gUE9SVF9DU0MgfCBQT1JUX1BFQyB8IFBPUlRfT0NDIHwgUE9SVF9QTEM7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwogCS8qIEZvciBlYWNoIHBvcnQsIGRpZCBhbnl0aGluZyBjaGFuZ2U/ICBJZiBzbywgc2V0IHRoYXQgYml0IGluIGJ1Zi4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgcG9ydHM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBtYXhfcG9ydHM7IGkrKykgewogCQl0ZW1wID0geGhjaV9yZWFkbCh4aGNpLCBwb3J0X2FycmF5W2ldKTsKIAkJaWYgKHRlbXAgPT0gMHhmZmZmZmZmZikgewogCQkJcmV0dmFsID0gLUVOT0RFVjsKQEAgLTcwOSwxOSArNzgwLDExIEBACiB7CiAJc3RydWN0IHhoY2lfaGNkCSp4aGNpID0gaGNkX3RvX3hoY2koaGNkKTsKIAlpbnQgbWF4X3BvcnRzLCBwb3J0X2luZGV4OwotCXUzMiBfX2lvbWVtICoqcG9ydF9hcnJheTsKKwlfX2xlMzIgX19pb21lbSAqKnBvcnRfYXJyYXk7CiAJc3RydWN0IHhoY2lfYnVzX3N0YXRlICpidXNfc3RhdGU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChoY2QtPnNwZWVkID09IEhDRF9VU0IzKSB7Ci0JCW1heF9wb3J0cyA9IHhoY2ktPm51bV91c2IzX3BvcnRzOwotCQlwb3J0X2FycmF5ID0geGhjaS0+dXNiM19wb3J0czsKLQkJeGhjaV9kYmcoeGhjaSwgInN1c3BlbmQgVVNCIDMuMCByb290IGh1YlxuIik7Ci0JfSBlbHNlIHsKLQkJbWF4X3BvcnRzID0geGhjaS0+bnVtX3VzYjJfcG9ydHM7Ci0JCXBvcnRfYXJyYXkgPSB4aGNpLT51c2IyX3BvcnRzOwotCQl4aGNpX2RiZyh4aGNpLCAic3VzcGVuZCBVU0IgMi4wIHJvb3QgaHViXG4iKTsKLQl9CisJbWF4X3BvcnRzID0geGhjaV9nZXRfcG9ydHMoaGNkLCAmcG9ydF9hcnJheSk7CiAJYnVzX3N0YXRlID0gJnhoY2ktPmJ1c19zdGF0ZVtoY2RfaW5kZXgoaGNkKV07CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwpAQCAtNzc5LDcgKzg0Miw3IEBACiAKIAkJaWYgKGhjZC0+c3BlZWQgIT0gSENEX1VTQjMpIHsKIAkJCS8qIGVuYWJsZSByZW1vdGUgd2FrZSB1cCBmb3IgVVNCIDIuMCAqLwotCQkJdTMyIF9faW9tZW0gKmFkZHI7CisJCQlfX2xlMzIgX19pb21lbSAqYWRkcjsKIAkJCXUzMiB0bXA7CiAKIAkJCS8qIEFkZCBvbmUgdG8gdGhlIHBvcnQgc3RhdHVzIHJlZ2lzdGVyIGFkZHJlc3MgdG8gZ2V0CkBAIC04MDEsMjAgKzg2NCwxMiBAQAogewogCXN0cnVjdCB4aGNpX2hjZAkqeGhjaSA9IGhjZF90b194aGNpKGhjZCk7CiAJaW50IG1heF9wb3J0cywgcG9ydF9pbmRleDsKLQl1MzIgX19pb21lbSAqKnBvcnRfYXJyYXk7CisJX19sZTMyIF9faW9tZW0gKipwb3J0X2FycmF5OwogCXN0cnVjdCB4aGNpX2J1c19zdGF0ZSAqYnVzX3N0YXRlOwogCXUzMiB0ZW1wOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoaGNkLT5zcGVlZCA9PSBIQ0RfVVNCMykgewotCQltYXhfcG9ydHMgPSB4aGNpLT5udW1fdXNiM19wb3J0czsKLQkJcG9ydF9hcnJheSA9IHhoY2ktPnVzYjNfcG9ydHM7Ci0JCXhoY2lfZGJnKHhoY2ksICJyZXN1bWUgVVNCIDMuMCByb290IGh1YlxuIik7Ci0JfSBlbHNlIHsKLQkJbWF4X3BvcnRzID0geGhjaS0+bnVtX3VzYjJfcG9ydHM7Ci0JCXBvcnRfYXJyYXkgPSB4aGNpLT51c2IyX3BvcnRzOwotCQl4aGNpX2RiZyh4aGNpLCAicmVzdW1lIFVTQiAyLjAgcm9vdCBodWJcbiIpOwotCX0KKwltYXhfcG9ydHMgPSB4aGNpX2dldF9wb3J0cyhoY2QsICZwb3J0X2FycmF5KTsKIAlidXNfc3RhdGUgPSAmeGhjaS0+YnVzX3N0YXRlW2hjZF9pbmRleChoY2QpXTsKIAogCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBidXNfc3RhdGUtPm5leHRfc3RhdGVjaGFuZ2UpKQpAQCAtODkwLDcgKzk0NSw3IEBACiAKIAkJaWYgKGhjZC0+c3BlZWQgIT0gSENEX1VTQjMpIHsKIAkJCS8qIGRpc2FibGUgcmVtb3RlIHdha2UgdXAgZm9yIFVTQiAyLjAgKi8KLQkJCXUzMiBfX2lvbWVtICphZGRyOworCQkJX19sZTMyIF9faW9tZW0gKmFkZHI7CiAJCQl1MzIgdG1wOwogCiAJCQkvKiBBZGQgb25lIHRvIHRoZSBwb3J0IHN0YXR1cyByZWdpc3RlciBhZGRyZXNzIHRvIGdldApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jCmluZGV4IDYyN2YzNDMuLjI2Y2FiYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbWVtLmMKQEAgLTg5LDE2ICs4OSwxNyBAQAogCQlyZXR1cm47CiAJcHJldi0+bmV4dCA9IG5leHQ7CiAJaWYgKGxpbmtfdHJicykgewotCQlwcmV2LT50cmJzW1RSQlNfUEVSX1NFR01FTlQtMV0ubGluay5zZWdtZW50X3B0ciA9IG5leHQtPmRtYTsKKwkJcHJldi0+dHJic1tUUkJTX1BFUl9TRUdNRU5ULTFdLmxpbmsuCisJCQlzZWdtZW50X3B0ciA9IGNwdV90b19sZTY0KG5leHQtPmRtYSk7CiAKIAkJLyogU2V0IHRoZSBsYXN0IFRSQiBpbiB0aGUgc2VnbWVudCB0byBoYXZlIGEgVFJCIHR5cGUgSUQgb2YgTGluayBUUkIgKi8KLQkJdmFsID0gcHJldi0+dHJic1tUUkJTX1BFUl9TRUdNRU5ULTFdLmxpbmsuY29udHJvbDsKKwkJdmFsID0gbGUzMl90b19jcHUocHJldi0+dHJic1tUUkJTX1BFUl9TRUdNRU5ULTFdLmxpbmsuY29udHJvbCk7CiAJCXZhbCAmPSB+VFJCX1RZUEVfQklUTUFTSzsKIAkJdmFsIHw9IFRSQl9UWVBFKFRSQl9MSU5LKTsKIAkJLyogQWx3YXlzIHNldCB0aGUgY2hhaW4gYml0IHdpdGggMC45NSBoYXJkd2FyZSAqLwogCQlpZiAoeGhjaV9saW5rX3RyYl9xdWlyayh4aGNpKSkKIAkJCXZhbCB8PSBUUkJfQ0hBSU47Ci0JCXByZXYtPnRyYnNbVFJCU19QRVJfU0VHTUVOVC0xXS5saW5rLmNvbnRyb2wgPSB2YWw7CisJCXByZXYtPnRyYnNbVFJCU19QRVJfU0VHTUVOVC0xXS5saW5rLmNvbnRyb2wgPSBjcHVfdG9fbGUzMih2YWwpOwogCX0KIAl4aGNpX2RiZyh4aGNpLCAiTGlua2luZyBzZWdtZW50IDB4JWxseCB0byBzZWdtZW50IDB4JWxseCAoRE1BKVxuIiwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcHJldi0+ZG1hLApAQCAtMTg2LDcgKzE4Nyw4IEBACiAKIAlpZiAobGlua190cmJzKSB7CiAJCS8qIFNlZSBzZWN0aW9uIDQuOS4yLjEgYW5kIDYuNC40LjEgKi8KLQkJcHJldi0+dHJic1tUUkJTX1BFUl9TRUdNRU5ULTFdLmxpbmsuY29udHJvbCB8PSAoTElOS19UT0dHTEUpOworCQlwcmV2LT50cmJzW1RSQlNfUEVSX1NFR01FTlQtMV0ubGluay4KKwkJCWNvbnRyb2wgfD0gY3B1X3RvX2xlMzIoTElOS19UT0dHTEUpOwogCQl4aGNpX2RiZyh4aGNpLCAiV3JvdGUgbGluayB0b2dnbGUgZmxhZyB0byIKIAkJCQkiIHNlZ21lbnQgJXAgKHZpcnR1YWwpLCAweCVsbHggKERNQSlcbiIsCiAJCQkJcHJldiwgKHVuc2lnbmVkIGxvbmcgbG9uZylwcmV2LT5kbWEpOwpAQCAtMjA3LDE0ICsyMDksMTMgQEAKIAogCXJpbmdzX2NhY2hlZCA9IHZpcnRfZGV2LT5udW1fcmluZ3NfY2FjaGVkOwogCWlmIChyaW5nc19jYWNoZWQgPCBYSENJX01BWF9SSU5HU19DQUNIRUQpIHsKLQkJdmlydF9kZXYtPm51bV9yaW5nc19jYWNoZWQrKzsKLQkJcmluZ3NfY2FjaGVkID0gdmlydF9kZXYtPm51bV9yaW5nc19jYWNoZWQ7CiAJCXZpcnRfZGV2LT5yaW5nX2NhY2hlW3JpbmdzX2NhY2hlZF0gPQogCQkJdmlydF9kZXYtPmVwc1tlcF9pbmRleF0ucmluZzsKKwkJdmlydF9kZXYtPm51bV9yaW5nc19jYWNoZWQrKzsKIAkJeGhjaV9kYmcoeGhjaSwgIkNhY2hlZCBvbGQgcmluZywgIgogCQkJCSIlZCByaW5nJXMgY2FjaGVkXG4iLAotCQkJCXJpbmdzX2NhY2hlZCwKLQkJCQkocmluZ3NfY2FjaGVkID4gMSkgPyAicyIgOiAiIik7CisJCQkJdmlydF9kZXYtPm51bV9yaW5nc19jYWNoZWQsCisJCQkJKHZpcnRfZGV2LT5udW1fcmluZ3NfY2FjaGVkID4gMSkgPyAicyIgOiAiIik7CiAJfSBlbHNlIHsKIAkJeGhjaV9yaW5nX2ZyZWUoeGhjaSwgdmlydF9kZXYtPmVwc1tlcF9pbmRleF0ucmluZyk7CiAJCXhoY2lfZGJnKHhoY2ksICJSaW5nIGNhY2hlIGZ1bGwgKCVkIHJpbmdzKSwgIgpAQCAtNTQ4LDcgKzU0OSw4IEBACiAJCWFkZHIgPSBjdXJfcmluZy0+Zmlyc3Rfc2VnLT5kbWEgfAogCQkJU0NUX0ZPUl9DVFgoU0NUX1BSSV9UUikgfAogCQkJY3VyX3JpbmctPmN5Y2xlX3N0YXRlOwotCQlzdHJlYW1faW5mby0+c3RyZWFtX2N0eF9hcnJheVtjdXJfc3RyZWFtXS5zdHJlYW1fcmluZyA9IGFkZHI7CisJCXN0cmVhbV9pbmZvLT5zdHJlYW1fY3R4X2FycmF5W2N1cl9zdHJlYW1dLgorCQkJc3RyZWFtX3JpbmcgPSBjcHVfdG9fbGU2NChhZGRyKTsKIAkJeGhjaV9kYmcoeGhjaSwgIlNldHRpbmcgc3RyZWFtICVkIHJpbmcgcHRyIHRvIDB4JTA4bGx4XG4iLAogCQkJCWN1cl9zdHJlYW0sICh1bnNpZ25lZCBsb25nIGxvbmcpIGFkZHIpOwogCkBAIC02MTQsMTAgKzYxNiwxMCBAQAogCW1heF9wcmltYXJ5X3N0cmVhbXMgPSBmbHMoc3RyZWFtX2luZm8tPm51bV9zdHJlYW1fY3R4cykgLSAyOwogCXhoY2lfZGJnKHhoY2ksICJTZXR0aW5nIG51bWJlciBvZiBzdHJlYW0gY3R4IGFycmF5IGVudHJpZXMgdG8gJXVcbiIsCiAJCQkxIDw8IChtYXhfcHJpbWFyeV9zdHJlYW1zICsgMSkpOwotCWVwX2N0eC0+ZXBfaW5mbyAmPSB+RVBfTUFYUFNUUkVBTVNfTUFTSzsKLQllcF9jdHgtPmVwX2luZm8gfD0gRVBfTUFYUFNUUkVBTVMobWF4X3ByaW1hcnlfc3RyZWFtcyk7Ci0JZXBfY3R4LT5lcF9pbmZvIHw9IEVQX0hBU19MU0E7Ci0JZXBfY3R4LT5kZXEgID0gc3RyZWFtX2luZm8tPmN0eF9hcnJheV9kbWE7CisJZXBfY3R4LT5lcF9pbmZvICY9IGNwdV90b19sZTMyKH5FUF9NQVhQU1RSRUFNU19NQVNLKTsKKwllcF9jdHgtPmVwX2luZm8gfD0gY3B1X3RvX2xlMzIoRVBfTUFYUFNUUkVBTVMobWF4X3ByaW1hcnlfc3RyZWFtcykKKwkJCQkgICAgICAgfCBFUF9IQVNfTFNBKTsKKwllcF9jdHgtPmRlcSAgPSBjcHVfdG9fbGU2NChzdHJlYW1faW5mby0+Y3R4X2FycmF5X2RtYSk7CiB9CiAKIC8qCkBAIC02MzAsMTAgKzYzMiw5IEBACiAJCXN0cnVjdCB4aGNpX3ZpcnRfZXAgKmVwKQogewogCWRtYV9hZGRyX3QgYWRkcjsKLQllcF9jdHgtPmVwX2luZm8gJj0gfkVQX01BWFBTVFJFQU1TX01BU0s7Ci0JZXBfY3R4LT5lcF9pbmZvICY9IH5FUF9IQVNfTFNBOworCWVwX2N0eC0+ZXBfaW5mbyAmPSBjcHVfdG9fbGUzMih+KEVQX01BWFBTVFJFQU1TX01BU0sgfCBFUF9IQVNfTFNBKSk7CiAJYWRkciA9IHhoY2lfdHJiX3ZpcnRfdG9fZG1hKGVwLT5yaW5nLT5kZXFfc2VnLCBlcC0+cmluZy0+ZGVxdWV1ZSk7Ci0JZXBfY3R4LT5kZXEgID0gYWRkciB8IGVwLT5yaW5nLT5jeWNsZV9zdGF0ZTsKKwllcF9jdHgtPmRlcSAgPSBjcHVfdG9fbGU2NChhZGRyIHwgZXAtPnJpbmctPmN5Y2xlX3N0YXRlKTsKIH0KIAogLyogRnJlZXMgYWxsIHN0cmVhbSBjb250ZXh0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGVuZHBvaW50LApAQCAtNzgxLDExICs3ODIsMTEgQEAKIAlkZXYtPnVkZXYgPSB1ZGV2OwogCiAJLyogUG9pbnQgdG8gb3V0cHV0IGRldmljZSBjb250ZXh0IGluIGRjYmFhLiAqLwotCXhoY2ktPmRjYmFhLT5kZXZfY29udGV4dF9wdHJzW3Nsb3RfaWRdID0gZGV2LT5vdXRfY3R4LT5kbWE7CisJeGhjaS0+ZGNiYWEtPmRldl9jb250ZXh0X3B0cnNbc2xvdF9pZF0gPSBjcHVfdG9fbGU2NChkZXYtPm91dF9jdHgtPmRtYSk7CiAJeGhjaV9kYmcoeGhjaSwgIlNldCBzbG90IGlkICVkIGRjYmFhIGVudHJ5ICVwIHRvIDB4JWxseFxuIiwKLQkJCXNsb3RfaWQsCi0JCQkmeGhjaS0+ZGNiYWEtPmRldl9jb250ZXh0X3B0cnNbc2xvdF9pZF0sCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKSB4aGNpLT5kY2JhYS0+ZGV2X2NvbnRleHRfcHRyc1tzbG90X2lkXSk7CisJCSBzbG90X2lkLAorCQkgJnhoY2ktPmRjYmFhLT5kZXZfY29udGV4dF9wdHJzW3Nsb3RfaWRdLAorCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgbGU2NF90b19jcHUoeGhjaS0+ZGNiYWEtPmRldl9jb250ZXh0X3B0cnNbc2xvdF9pZF0pKTsKIAogCXJldHVybiAxOwogZmFpbDoKQEAgLTgxMCw4ICs4MTEsOSBAQAogCSAqIGNvbmZpZ3VyZWQgZGV2aWNlIGhhcyByZXNldCwgc28gYWxsIGNvbnRyb2wgdHJhbnNmZXJzIHNob3VsZCBoYXZlCiAJICogYmVlbiBjb21wbGV0ZWQgb3IgY2FuY2VsbGVkIGJlZm9yZSB0aGUgcmVzZXQuCiAJICovCi0JZXAwX2N0eC0+ZGVxID0geGhjaV90cmJfdmlydF90b19kbWEoZXBfcmluZy0+ZW5xX3NlZywgZXBfcmluZy0+ZW5xdWV1ZSk7Ci0JZXAwX2N0eC0+ZGVxIHw9IGVwX3JpbmctPmN5Y2xlX3N0YXRlOworCWVwMF9jdHgtPmRlcSA9IGNwdV90b19sZTY0KHhoY2lfdHJiX3ZpcnRfdG9fZG1hKGVwX3JpbmctPmVucV9zZWcsCisJCQkJCQkJZXBfcmluZy0+ZW5xdWV1ZSkKKwkJCQkgICB8IGVwX3JpbmctPmN5Y2xlX3N0YXRlKTsKIH0KIAogLyoKQEAgLTg4NSwyNCArODg3LDIyIEBACiAJc2xvdF9jdHggPSB4aGNpX2dldF9zbG90X2N0eCh4aGNpLCBkZXYtPmluX2N0eCk7CiAKIAkvKiAyKSBOZXcgc2xvdCBjb250ZXh0IGFuZCBlbmRwb2ludCAwIGNvbnRleHQgYXJlIHZhbGlkKi8KLQljdHJsX2N0eC0+YWRkX2ZsYWdzID0gU0xPVF9GTEFHIHwgRVAwX0ZMQUc7CisJY3RybF9jdHgtPmFkZF9mbGFncyA9IGNwdV90b19sZTMyKFNMT1RfRkxBRyB8IEVQMF9GTEFHKTsKIAogCS8qIDMpIE9ubHkgdGhlIGNvbnRyb2wgZW5kcG9pbnQgaXMgdmFsaWQgLSBvbmUgZW5kcG9pbnQgY29udGV4dCAqLwotCXNsb3RfY3R4LT5kZXZfaW5mbyB8PSBMQVNUX0NUWCgxKTsKLQotCXNsb3RfY3R4LT5kZXZfaW5mbyB8PSAodTMyKSB1ZGV2LT5yb3V0ZTsKKwlzbG90X2N0eC0+ZGV2X2luZm8gfD0gY3B1X3RvX2xlMzIoTEFTVF9DVFgoMSkgfCAodTMyKSB1ZGV2LT5yb3V0ZSk7CiAJc3dpdGNoICh1ZGV2LT5zcGVlZCkgewogCWNhc2UgVVNCX1NQRUVEX1NVUEVSOgotCQlzbG90X2N0eC0+ZGV2X2luZm8gfD0gKHUzMikgU0xPVF9TUEVFRF9TUzsKKwkJc2xvdF9jdHgtPmRldl9pbmZvIHw9IGNwdV90b19sZTMyKCh1MzIpIFNMT1RfU1BFRURfU1MpOwogCQlicmVhazsKIAljYXNlIFVTQl9TUEVFRF9ISUdIOgotCQlzbG90X2N0eC0+ZGV2X2luZm8gfD0gKHUzMikgU0xPVF9TUEVFRF9IUzsKKwkJc2xvdF9jdHgtPmRldl9pbmZvIHw9IGNwdV90b19sZTMyKCh1MzIpIFNMT1RfU1BFRURfSFMpOwogCQlicmVhazsKIAljYXNlIFVTQl9TUEVFRF9GVUxMOgotCQlzbG90X2N0eC0+ZGV2X2luZm8gfD0gKHUzMikgU0xPVF9TUEVFRF9GUzsKKwkJc2xvdF9jdHgtPmRldl9pbmZvIHw9IGNwdV90b19sZTMyKCh1MzIpIFNMT1RfU1BFRURfRlMpOwogCQlicmVhazsKIAljYXNlIFVTQl9TUEVFRF9MT1c6Ci0JCXNsb3RfY3R4LT5kZXZfaW5mbyB8PSAodTMyKSBTTE9UX1NQRUVEX0xTOworCQlzbG90X2N0eC0+ZGV2X2luZm8gfD0gY3B1X3RvX2xlMzIoKHUzMikgU0xPVF9TUEVFRF9MUyk7CiAJCWJyZWFrOwogCWNhc2UgVVNCX1NQRUVEX1dJUkVMRVNTOgogCQl4aGNpX2RiZyh4aGNpLCAiRklYTUUgeEhDSSBkb2Vzbid0IHN1cHBvcnQgd2lyZWxlc3Mgc3BlZWRzXG4iKTsKQEAgLTkxNiw3ICs5MTYsNyBAQAogCXBvcnRfbnVtID0geGhjaV9maW5kX3JlYWxfcG9ydF9udW1iZXIoeGhjaSwgdWRldik7CiAJaWYgKCFwb3J0X251bSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0Jc2xvdF9jdHgtPmRldl9pbmZvMiB8PSAodTMyKSBST09UX0hVQl9QT1JUKHBvcnRfbnVtKTsKKwlzbG90X2N0eC0+ZGV2X2luZm8yIHw9IGNwdV90b19sZTMyKCh1MzIpIFJPT1RfSFVCX1BPUlQocG9ydF9udW0pKTsKIAkvKiBTZXQgdGhlIHBvcnQgbnVtYmVyIGluIHRoZSB2aXJ0dWFsX2RldmljZSB0byB0aGUgZmFrZWQgcG9ydCBudW1iZXIgKi8KIAlmb3IgKHRvcF9kZXYgPSB1ZGV2OyB0b3BfZGV2LT5wYXJlbnQgJiYgdG9wX2Rldi0+cGFyZW50LT5wYXJlbnQ7CiAJCQl0b3BfZGV2ID0gdG9wX2Rldi0+cGFyZW50KQpAQCAtOTI3LDMxICs5MjcsMzEgQEAKIAogCS8qIElzIHRoaXMgYSBMUy9GUyBkZXZpY2UgdW5kZXIgYW4gZXh0ZXJuYWwgSFMgaHViPyAqLwogCWlmICh1ZGV2LT50dCAmJiB1ZGV2LT50dC0+aHViLT5wYXJlbnQpIHsKLQkJc2xvdF9jdHgtPnR0X2luZm8gPSB1ZGV2LT50dC0+aHViLT5zbG90X2lkOwotCQlzbG90X2N0eC0+dHRfaW5mbyB8PSB1ZGV2LT50dHBvcnQgPDwgODsKKwkJc2xvdF9jdHgtPnR0X2luZm8gPSBjcHVfdG9fbGUzMih1ZGV2LT50dC0+aHViLT5zbG90X2lkIHwKKwkJCQkJCSh1ZGV2LT50dHBvcnQgPDwgOCkpOwogCQlpZiAodWRldi0+dHQtPm11bHRpKQotCQkJc2xvdF9jdHgtPmRldl9pbmZvIHw9IERFVl9NVFQ7CisJCQlzbG90X2N0eC0+ZGV2X2luZm8gfD0gY3B1X3RvX2xlMzIoREVWX01UVCk7CiAJfQogCXhoY2lfZGJnKHhoY2ksICJ1ZGV2LT50dCA9ICVwXG4iLCB1ZGV2LT50dCk7CiAJeGhjaV9kYmcoeGhjaSwgInVkZXYtPnR0cG9ydCA9IDB4JXhcbiIsIHVkZXYtPnR0cG9ydCk7CiAKIAkvKiBTdGVwIDQgLSByaW5nIGFscmVhZHkgYWxsb2NhdGVkICovCiAJLyogU3RlcCA1ICovCi0JZXAwX2N0eC0+ZXBfaW5mbzIgPSBFUF9UWVBFKENUUkxfRVApOworCWVwMF9jdHgtPmVwX2luZm8yID0gY3B1X3RvX2xlMzIoRVBfVFlQRShDVFJMX0VQKSk7CiAJLyoKIAkgKiBYWFg6IE5vdCBzdXJlIGFib3V0IHdpcmVsZXNzIFVTQiBkZXZpY2VzLgogCSAqLwogCXN3aXRjaCAodWRldi0+c3BlZWQpIHsKIAljYXNlIFVTQl9TUEVFRF9TVVBFUjoKLQkJZXAwX2N0eC0+ZXBfaW5mbzIgfD0gTUFYX1BBQ0tFVCg1MTIpOworCQllcDBfY3R4LT5lcF9pbmZvMiB8PSBjcHVfdG9fbGUzMihNQVhfUEFDS0VUKDUxMikpOwogCQlicmVhazsKIAljYXNlIFVTQl9TUEVFRF9ISUdIOgogCS8qIFVTQiBjb3JlIGd1ZXNzZXMgYXQgYSA2NC1ieXRlIG1heCBwYWNrZXQgZmlyc3QgZm9yIEZTIGRldmljZXMgKi8KIAljYXNlIFVTQl9TUEVFRF9GVUxMOgotCQllcDBfY3R4LT5lcF9pbmZvMiB8PSBNQVhfUEFDS0VUKDY0KTsKKwkJZXAwX2N0eC0+ZXBfaW5mbzIgfD0gY3B1X3RvX2xlMzIoTUFYX1BBQ0tFVCg2NCkpOwogCQlicmVhazsKIAljYXNlIFVTQl9TUEVFRF9MT1c6Ci0JCWVwMF9jdHgtPmVwX2luZm8yIHw9IE1BWF9QQUNLRVQoOCk7CisJCWVwMF9jdHgtPmVwX2luZm8yIHw9IGNwdV90b19sZTMyKE1BWF9QQUNLRVQoOCkpOwogCQlicmVhazsKIAljYXNlIFVTQl9TUEVFRF9XSVJFTEVTUzoKIAkJeGhjaV9kYmcoeGhjaSwgIkZJWE1FIHhIQ0kgZG9lc24ndCBzdXBwb3J0IHdpcmVsZXNzIHNwZWVkc1xuIik7CkBAIC05NjIsMTIgKzk2MiwxMCBAQAogCQlCVUcoKTsKIAl9CiAJLyogRVAgMCBjYW4gaGFuZGxlICJidXJzdCIgc2l6ZXMgb2YgMSwgc28gTWF4IEJ1cnN0IFNpemUgZmllbGQgaXMgMCAqLwotCWVwMF9jdHgtPmVwX2luZm8yIHw9IE1BWF9CVVJTVCgwKTsKLQllcDBfY3R4LT5lcF9pbmZvMiB8PSBFUlJPUl9DT1VOVCgzKTsKKwllcDBfY3R4LT5lcF9pbmZvMiB8PSBjcHVfdG9fbGUzMihNQVhfQlVSU1QoMCkgfCBFUlJPUl9DT1VOVCgzKSk7CiAKLQllcDBfY3R4LT5kZXEgPQotCQlkZXYtPmVwc1swXS5yaW5nLT5maXJzdF9zZWctPmRtYTsKLQllcDBfY3R4LT5kZXEgfD0gZGV2LT5lcHNbMF0ucmluZy0+Y3ljbGVfc3RhdGU7CisJZXAwX2N0eC0+ZGVxID0gY3B1X3RvX2xlNjQoZGV2LT5lcHNbMF0ucmluZy0+Zmlyc3Rfc2VnLT5kbWEgfAorCQkJCSAgIGRldi0+ZXBzWzBdLnJpbmctPmN5Y2xlX3N0YXRlKTsKIAogCS8qIFN0ZXBzIDcgYW5kIDggd2VyZSBkb25lIGluIHhoY2lfYWxsb2NfdmlydF9kZXZpY2UoKSAqLwogCkBAIC0xMDQ2LDEyICsxMDQ0LDEyIEBACiAJCWJyZWFrOwogCiAJY2FzZSBVU0JfU1BFRURfRlVMTDoKLQkJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2ludCgmZXAtPmRlc2MpKSB7CisJCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9pc29jKCZlcC0+ZGVzYykpIHsKIAkJCWludGVydmFsID0geGhjaV9wYXJzZV9leHBvbmVudF9pbnRlcnZhbCh1ZGV2LCBlcCk7CiAJCQlicmVhazsKIAkJfQogCQkvKgotCQkgKiBGYWxsIHRocm91Z2ggZm9yIGlzb2Nocm9ub3VzIGVuZHBvaW50IGludGVydmFsIGRlY29kaW5nCisJCSAqIEZhbGwgdGhyb3VnaCBmb3IgaW50ZXJydXB0IGVuZHBvaW50IGludGVydmFsIGRlY29kaW5nCiAJCSAqIHNpbmNlIGl0IHVzZXMgdGhlIHNhbWUgcnVsZXMgYXMgbG93IHNwZWVkIGludGVycnVwdAogCQkgKiBlbmRwb2ludHMuCiAJCSAqLwpAQCAtMTEzMSwxMCArMTEyOSwxMCBAQAogCQlyZXR1cm4gMDsKIAogCWlmICh1ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfU1VQRVIpCi0JCXJldHVybiBlcC0+c3NfZXBfY29tcC53Qnl0ZXNQZXJJbnRlcnZhbDsKKwkJcmV0dXJuIGxlMTZfdG9fY3B1KGVwLT5zc19lcF9jb21wLndCeXRlc1BlckludGVydmFsKTsKIAotCW1heF9wYWNrZXQgPSBHRVRfTUFYX1BBQ0tFVChlcC0+ZGVzYy53TWF4UGFja2V0U2l6ZSk7Ci0JbWF4X2J1cnN0ID0gKGVwLT5kZXNjLndNYXhQYWNrZXRTaXplICYgMHgxODAwKSA+PiAxMTsKKwltYXhfcGFja2V0ID0gR0VUX01BWF9QQUNLRVQobGUxNl90b19jcHUoZXAtPmRlc2Mud01heFBhY2tldFNpemUpKTsKKwltYXhfYnVyc3QgPSAobGUxNl90b19jcHUoZXAtPmRlc2Mud01heFBhY2tldFNpemUpICYgMHgxODAwKSA+PiAxMTsKIAkvKiBBIDAgaW4gbWF4IGJ1cnN0IG1lYW5zIDEgdHJhbnNmZXIgcGVyIEVTSVQgKi8KIAlyZXR1cm4gbWF4X3BhY2tldCAqIChtYXhfYnVyc3QgKyAxKTsKIH0KQEAgLTExODMsMzMgKzExODEsMzMgQEAKIAl9CiAJdmlydF9kZXYtPmVwc1tlcF9pbmRleF0uc2tpcCA9IGZhbHNlOwogCWVwX3JpbmcgPSB2aXJ0X2Rldi0+ZXBzW2VwX2luZGV4XS5uZXdfcmluZzsKLQllcF9jdHgtPmRlcSA9IGVwX3JpbmctPmZpcnN0X3NlZy0+ZG1hIHwgZXBfcmluZy0+Y3ljbGVfc3RhdGU7CisJZXBfY3R4LT5kZXEgPSBjcHVfdG9fbGU2NChlcF9yaW5nLT5maXJzdF9zZWctPmRtYSB8IGVwX3JpbmctPmN5Y2xlX3N0YXRlKTsKIAotCWVwX2N0eC0+ZXBfaW5mbyA9IHhoY2lfZ2V0X2VuZHBvaW50X2ludGVydmFsKHVkZXYsIGVwKTsKLQllcF9jdHgtPmVwX2luZm8gfD0gRVBfTVVMVCh4aGNpX2dldF9lbmRwb2ludF9tdWx0KHVkZXYsIGVwKSk7CisJZXBfY3R4LT5lcF9pbmZvID0gY3B1X3RvX2xlMzIoeGhjaV9nZXRfZW5kcG9pbnRfaW50ZXJ2YWwodWRldiwgZXApCisJCQkJICAgICAgfCBFUF9NVUxUKHhoY2lfZ2V0X2VuZHBvaW50X211bHQodWRldiwgZXApKSk7CiAKIAkvKiBGSVhNRSBkaWcgTXVsdCBhbmQgc3RyZWFtcyBpbmZvIG91dCBvZiBlcCBjb21wYW5pb24gZGVzYyAqLwogCiAJLyogQWxsb3cgMyByZXRyaWVzIGZvciBldmVyeXRoaW5nIGJ1dCBpc29jOwotCSAqIGVycm9yIGNvdW50ID0gMCBtZWFucyBpbmZpbml0ZSByZXRyaWVzLgorCSAqIENFcnIgc2hhbGwgYmUgc2V0IHRvIDAgZm9yIElzb2NoIGVuZHBvaW50cy4KIAkgKi8KIAlpZiAoIXVzYl9lbmRwb2ludF94ZmVyX2lzb2MoJmVwLT5kZXNjKSkKLQkJZXBfY3R4LT5lcF9pbmZvMiA9IEVSUk9SX0NPVU5UKDMpOworCQllcF9jdHgtPmVwX2luZm8yID0gY3B1X3RvX2xlMzIoRVJST1JfQ09VTlQoMykpOwogCWVsc2UKLQkJZXBfY3R4LT5lcF9pbmZvMiA9IEVSUk9SX0NPVU5UKDEpOworCQllcF9jdHgtPmVwX2luZm8yID0gY3B1X3RvX2xlMzIoRVJST1JfQ09VTlQoMCkpOwogCi0JZXBfY3R4LT5lcF9pbmZvMiB8PSB4aGNpX2dldF9lbmRwb2ludF90eXBlKHVkZXYsIGVwKTsKKwllcF9jdHgtPmVwX2luZm8yIHw9IGNwdV90b19sZTMyKHhoY2lfZ2V0X2VuZHBvaW50X3R5cGUodWRldiwgZXApKTsKIAogCS8qIFNldCB0aGUgbWF4IHBhY2tldCBzaXplIGFuZCBtYXggYnVyc3QgKi8KIAlzd2l0Y2ggKHVkZXYtPnNwZWVkKSB7CiAJY2FzZSBVU0JfU1BFRURfU1VQRVI6Ci0JCW1heF9wYWNrZXQgPSBlcC0+ZGVzYy53TWF4UGFja2V0U2l6ZTsKLQkJZXBfY3R4LT5lcF9pbmZvMiB8PSBNQVhfUEFDS0VUKG1heF9wYWNrZXQpOworCQltYXhfcGFja2V0ID0gbGUxNl90b19jcHUoZXAtPmRlc2Mud01heFBhY2tldFNpemUpOworCQllcF9jdHgtPmVwX2luZm8yIHw9IGNwdV90b19sZTMyKE1BWF9QQUNLRVQobWF4X3BhY2tldCkpOwogCQkvKiBkaWcgb3V0IG1heCBidXJzdCBmcm9tIGVwIGNvbXBhbmlvbiBkZXNjICovCiAJCW1heF9wYWNrZXQgPSBlcC0+c3NfZXBfY29tcC5iTWF4QnVyc3Q7CiAJCWlmICghbWF4X3BhY2tldCkKIAkJCXhoY2lfd2Fybih4aGNpLCAiV0FSTiBubyBTUyBlbmRwb2ludCBiTWF4QnVyc3RcbiIpOwotCQllcF9jdHgtPmVwX2luZm8yIHw9IE1BWF9CVVJTVChtYXhfcGFja2V0KTsKKwkJZXBfY3R4LT5lcF9pbmZvMiB8PSBjcHVfdG9fbGUzMihNQVhfQlVSU1QobWF4X3BhY2tldCkpOwogCQlicmVhazsKIAljYXNlIFVTQl9TUEVFRF9ISUdIOgogCQkvKiBiaXRzIDExOjEyIHNwZWNpZnkgdGhlIG51bWJlciBvZiBhZGRpdGlvbmFsIHRyYW5zYWN0aW9uCkBAIC0xMjE3LDIwICsxMjE1LDIxIEBACiAJCSAqLwogCQlpZiAodXNiX2VuZHBvaW50X3hmZXJfaXNvYygmZXAtPmRlc2MpIHx8CiAJCQkJdXNiX2VuZHBvaW50X3hmZXJfaW50KCZlcC0+ZGVzYykpIHsKLQkJCW1heF9idXJzdCA9IChlcC0+ZGVzYy53TWF4UGFja2V0U2l6ZSAmIDB4MTgwMCkgPj4gMTE7Ci0JCQllcF9jdHgtPmVwX2luZm8yIHw9IE1BWF9CVVJTVChtYXhfYnVyc3QpOworCQkJbWF4X2J1cnN0ID0gKGxlMTZfdG9fY3B1KGVwLT5kZXNjLndNYXhQYWNrZXRTaXplKQorCQkJCSAgICAgJiAweDE4MDApID4+IDExOworCQkJZXBfY3R4LT5lcF9pbmZvMiB8PSBjcHVfdG9fbGUzMihNQVhfQlVSU1QobWF4X2J1cnN0KSk7CiAJCX0KIAkJLyogRmFsbCB0aHJvdWdoICovCiAJY2FzZSBVU0JfU1BFRURfRlVMTDoKIAljYXNlIFVTQl9TUEVFRF9MT1c6Ci0JCW1heF9wYWNrZXQgPSBHRVRfTUFYX1BBQ0tFVChlcC0+ZGVzYy53TWF4UGFja2V0U2l6ZSk7Ci0JCWVwX2N0eC0+ZXBfaW5mbzIgfD0gTUFYX1BBQ0tFVChtYXhfcGFja2V0KTsKKwkJbWF4X3BhY2tldCA9IEdFVF9NQVhfUEFDS0VUKGxlMTZfdG9fY3B1KGVwLT5kZXNjLndNYXhQYWNrZXRTaXplKSk7CisJCWVwX2N0eC0+ZXBfaW5mbzIgfD0gY3B1X3RvX2xlMzIoTUFYX1BBQ0tFVChtYXhfcGFja2V0KSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCUJVRygpOwogCX0KIAltYXhfZXNpdF9wYXlsb2FkID0geGhjaV9nZXRfbWF4X2VzaXRfcGF5bG9hZCh4aGNpLCB1ZGV2LCBlcCk7Ci0JZXBfY3R4LT50eF9pbmZvID0gTUFYX0VTSVRfUEFZTE9BRF9GT1JfRVAobWF4X2VzaXRfcGF5bG9hZCk7CisJZXBfY3R4LT50eF9pbmZvID0gY3B1X3RvX2xlMzIoTUFYX0VTSVRfUEFZTE9BRF9GT1JfRVAobWF4X2VzaXRfcGF5bG9hZCkpOwogCiAJLyoKIAkgKiBYWFggbm8gaWRlYSBob3cgdG8gY2FsY3VsYXRlIHRoZSBhdmVyYWdlIFRSQiBidWZmZXIgbGVuZ3RoIGZvciBidWxrCkBAIC0xMjQ2LDggKzEyNDUsMTUgQEAKIAkgKiBpbmNsdWRpbmcgbGluayBUUkJzLCBOby1vcCBUUkJzLCBhbmQgRXZlbnQgZGF0YSBUUkJzLiAgU2luY2Ugd2UgZG9uJ3QKIAkgKiB1c2UgRXZlbnQgRGF0YSBUUkJzLCBhbmQgd2UgZG9uJ3QgY2hhaW4gaW4gYSBsaW5rIFRSQiBvbiBzaG9ydAogCSAqIHRyYW5zZmVycywgd2UncmUgYmFzaWNhbGx5IGRpdmlkaW5nIGJ5IDEuCisJICoKKwkgKiB4SENJIDEuMCBzcGVjaWZpY2F0aW9uIGluZGljYXRlcyB0aGF0IHRoZSBBdmVyYWdlIFRSQiBMZW5ndGggc2hvdWxkCisJICogYmUgc2V0IHRvIDggZm9yIGNvbnRyb2wgZW5kcG9pbnRzLgogCSAqLwotCWVwX2N0eC0+dHhfaW5mbyB8PSBBVkdfVFJCX0xFTkdUSF9GT1JfRVAobWF4X2VzaXRfcGF5bG9hZCk7CisJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2NvbnRyb2woJmVwLT5kZXNjKSAmJiB4aGNpLT5oY2lfdmVyc2lvbiA9PSAweDEwMCkKKwkJZXBfY3R4LT50eF9pbmZvIHw9IGNwdV90b19sZTMyKEFWR19UUkJfTEVOR1RIX0ZPUl9FUCg4KSk7CisJZWxzZQorCQllcF9jdHgtPnR4X2luZm8gfD0KKwkJCSBjcHVfdG9fbGUzMihBVkdfVFJCX0xFTkdUSF9GT1JfRVAobWF4X2VzaXRfcGF5bG9hZCkpOwogCiAJLyogRklYTUUgRGVidWcgZW5kcG9pbnQgY29udGV4dCAqLwogCXJldHVybiAwOwpAQCAtMTM0Nyw3ICsxMzUzLDcgQEAKIAlpZiAoIXhoY2ktPnNjcmF0Y2hwYWQtPnNwX2RtYV9idWZmZXJzKQogCQlnb3RvIGZhaWxfc3A0OwogCi0JeGhjaS0+ZGNiYWEtPmRldl9jb250ZXh0X3B0cnNbMF0gPSB4aGNpLT5zY3JhdGNocGFkLT5zcF9kbWE7CisJeGhjaS0+ZGNiYWEtPmRldl9jb250ZXh0X3B0cnNbMF0gPSBjcHVfdG9fbGU2NCh4aGNpLT5zY3JhdGNocGFkLT5zcF9kbWEpOwogCWZvciAoaSA9IDA7IGkgPCBudW1fc3A7IGkrKykgewogCQlkbWFfYWRkcl90IGRtYTsKIAkJdm9pZCAqYnVmID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQodG9fcGNpX2RldihkZXYpLApAQCAtMTcyNCw3ICsxNzMwLDcgQEAKIH0KIAogc3RhdGljIHZvaWQgeGhjaV9hZGRfaW5fcG9ydChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHVuc2lnbmVkIGludCBudW1fcG9ydHMsCi0JCXUzMiBfX2lvbWVtICphZGRyLCB1OCBtYWpvcl9yZXZpc2lvbikKKwkJX19sZTMyIF9faW9tZW0gKmFkZHIsIHU4IG1ham9yX3JldmlzaW9uKQogewogCXUzMiB0ZW1wLCBwb3J0X29mZnNldCwgcG9ydF9jb3VudDsKIAlpbnQgaTsKQEAgLTE3ODksNyArMTc5NSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgeGhjaV9zZXR1cF9wb3J0X2FycmF5cyhzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGdmcF90IGZsYWdzKQogewotCXUzMiBfX2lvbWVtICphZGRyOworCV9fbGUzMiBfX2lvbWVtICphZGRyOwogCXUzMiBvZmZzZXQ7CiAJdW5zaWduZWQgaW50IG51bV9wb3J0czsKIAlpbnQgaSwgcG9ydF9pbmRleDsKQEAgLTIwNDIsOCArMjA0OCw4IEBACiAJLyogc2V0IHJpbmcgYmFzZSBhZGRyZXNzIGFuZCBzaXplIGZvciBlYWNoIHNlZ21lbnQgdGFibGUgZW50cnkgKi8KIAlmb3IgKHZhbCA9IDAsIHNlZyA9IHhoY2ktPmV2ZW50X3JpbmctPmZpcnN0X3NlZzsgdmFsIDwgRVJTVF9OVU1fU0VHUzsgdmFsKyspIHsKIAkJc3RydWN0IHhoY2lfZXJzdF9lbnRyeSAqZW50cnkgPSAmeGhjaS0+ZXJzdC5lbnRyaWVzW3ZhbF07Ci0JCWVudHJ5LT5zZWdfYWRkciA9IHNlZy0+ZG1hOwotCQllbnRyeS0+c2VnX3NpemUgPSBUUkJTX1BFUl9TRUdNRU5UOworCQllbnRyeS0+c2VnX2FkZHIgPSBjcHVfdG9fbGU2NChzZWctPmRtYSk7CisJCWVudHJ5LT5zZWdfc2l6ZSA9IGNwdV90b19sZTMyKFRSQlNfUEVSX1NFR01FTlQpOwogCQllbnRyeS0+cnN2ZCA9IDA7CiAJCXNlZyA9IHNlZy0+bmV4dDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcGNpLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcGNpLmMKaW5kZXggYTEwNDk0Yy4uY2JjNGQ0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXBjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1wY2kuYwpAQCAtMjEsNiArMjEsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlICJ4aGNpLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jCmluZGV4IDc0MzczODYuLjIzN2E3NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYwpAQCAtMTAwLDcgKzEwMCw3IEBACiAJCXJldHVybiAodHJiID09ICZzZWctPnRyYnNbVFJCU19QRVJfU0VHTUVOVF0pICYmCiAJCQkoc2VnLT5uZXh0ID09IHhoY2ktPmV2ZW50X3JpbmctPmZpcnN0X3NlZyk7CiAJZWxzZQotCQlyZXR1cm4gdHJiLT5saW5rLmNvbnRyb2wgJiBMSU5LX1RPR0dMRTsKKwkJcmV0dXJuIGxlMzJfdG9fY3B1KHRyYi0+bGluay5jb250cm9sKSAmIExJTktfVE9HR0xFOwogfQogCiAvKiBJcyB0aGlzIFRSQiBhIGxpbmsgVFJCIG9yIHdhcyB0aGUgbGFzdCBUUkIgdGhlIGxhc3QgVFJCIGluIHRoaXMgZXZlbnQgcmluZwpAQCAtMTEzLDEzICsxMTMsMTUgQEAKIAlpZiAocmluZyA9PSB4aGNpLT5ldmVudF9yaW5nKQogCQlyZXR1cm4gdHJiID09ICZzZWctPnRyYnNbVFJCU19QRVJfU0VHTUVOVF07CiAJZWxzZQotCQlyZXR1cm4gKHRyYi0+bGluay5jb250cm9sICYgVFJCX1RZUEVfQklUTUFTSykgPT0gVFJCX1RZUEUoVFJCX0xJTkspOworCQlyZXR1cm4gKGxlMzJfdG9fY3B1KHRyYi0+bGluay5jb250cm9sKSAmIFRSQl9UWVBFX0JJVE1BU0spCisJCQk9PSBUUkJfVFlQRShUUkJfTElOSyk7CiB9CiAKIHN0YXRpYyBpbnQgZW5xdWV1ZV9pc19saW5rX3RyYihzdHJ1Y3QgeGhjaV9yaW5nICpyaW5nKQogewogCXN0cnVjdCB4aGNpX2xpbmtfdHJiICpsaW5rID0gJnJpbmctPmVucXVldWUtPmxpbms7Ci0JcmV0dXJuICgobGluay0+Y29udHJvbCAmIFRSQl9UWVBFX0JJVE1BU0spID09IFRSQl9UWVBFKFRSQl9MSU5LKSk7CisJcmV0dXJuICgobGUzMl90b19jcHUobGluay0+Y29udHJvbCkgJiBUUkJfVFlQRV9CSVRNQVNLKSA9PQorCQlUUkJfVFlQRShUUkJfTElOSykpOwogfQogCiAvKiBVcGRhdGVzIHRyYiB0byBwb2ludCB0byB0aGUgbmV4dCBUUkIgaW4gdGhlIHJpbmcsIGFuZCB1cGRhdGVzIHNlZyBpZiB0aGUgbmV4dApAQCAtMTk3LDcgKzE5OSw3IEBACiAJdW5pb24geGhjaV90cmIgKm5leHQ7CiAJdW5zaWduZWQgbG9uZyBsb25nIGFkZHI7CiAKLQljaGFpbiA9IHJpbmctPmVucXVldWUtPmdlbmVyaWMuZmllbGRbM10gJiBUUkJfQ0hBSU47CisJY2hhaW4gPSBsZTMyX3RvX2NwdShyaW5nLT5lbnF1ZXVlLT5nZW5lcmljLmZpZWxkWzNdKSAmIFRSQl9DSEFJTjsKIAluZXh0ID0gKysocmluZy0+ZW5xdWV1ZSk7CiAKIAlyaW5nLT5lbnFfdXBkYXRlcysrOwpAQCAtMjIzLDEyICsyMjUsMTQgQEAKIAkJCQkgKiAod2hpY2ggbWF5IG1lYW4gdGhlIGNoYWluIGJpdCBpcyBjbGVhcmVkKS4KIAkJCQkgKi8KIAkJCQlpZiAoIXhoY2lfbGlua190cmJfcXVpcmsoeGhjaSkpIHsKLQkJCQkJbmV4dC0+bGluay5jb250cm9sICY9IH5UUkJfQ0hBSU47Ci0JCQkJCW5leHQtPmxpbmsuY29udHJvbCB8PSBjaGFpbjsKKwkJCQkJbmV4dC0+bGluay5jb250cm9sICY9CisJCQkJCQljcHVfdG9fbGUzMih+VFJCX0NIQUlOKTsKKwkJCQkJbmV4dC0+bGluay5jb250cm9sIHw9CisJCQkJCQljcHVfdG9fbGUzMihjaGFpbik7CiAJCQkJfQogCQkJCS8qIEdpdmUgdGhpcyBsaW5rIFRSQiB0byB0aGUgaGFyZHdhcmUgKi8KIAkJCQl3bWIoKTsKLQkJCQluZXh0LT5saW5rLmNvbnRyb2wgXj0gVFJCX0NZQ0xFOworCQkJCW5leHQtPmxpbmsuY29udHJvbCBePSBjcHVfdG9fbGUzMihUUkJfQ1lDTEUpOwogCQkJfQogCQkJLyogVG9nZ2xlIHRoZSBjeWNsZSBiaXQgYWZ0ZXIgdGhlIGxhc3QgcmluZyBzZWdtZW50LiAqLwogCQkJaWYgKGxhc3RfdHJiX29uX2xhc3Rfc2VnKHhoY2ksIHJpbmcsIHJpbmctPmVucV9zZWcsIG5leHQpKSB7CkBAIC0zMTksNyArMzIzLDcgQEAKIAkJdW5zaWduZWQgaW50IGVwX2luZGV4LAogCQl1bnNpZ25lZCBpbnQgc3RyZWFtX2lkKQogewotCV9fdTMyIF9faW9tZW0gKmRiX2FkZHIgPSAmeGhjaS0+ZGJhLT5kb29yYmVsbFtzbG90X2lkXTsKKwlfX2xlMzIgX19pb21lbSAqZGJfYWRkciA9ICZ4aGNpLT5kYmEtPmRvb3JiZWxsW3Nsb3RfaWRdOwogCXN0cnVjdCB4aGNpX3ZpcnRfZXAgKmVwID0gJnhoY2ktPmRldnNbc2xvdF9pZF0tPmVwc1tlcF9pbmRleF07CiAJdW5zaWduZWQgaW50IGVwX3N0YXRlID0gZXAtPmVwX3N0YXRlOwogCkBAIC0zODAsNyArMzg0LDcgQEAKIAl3aGlsZSAoY3VyX3NlZy0+dHJicyA+IHRyYiB8fAogCQkJJmN1cl9zZWctPnRyYnNbVFJCU19QRVJfU0VHTUVOVCAtIDFdIDwgdHJiKSB7CiAJCWdlbmVyaWNfdHJiID0gJmN1cl9zZWctPnRyYnNbVFJCU19QRVJfU0VHTUVOVCAtIDFdLmdlbmVyaWM7Ci0JCWlmIChnZW5lcmljX3RyYi0+ZmllbGRbM10gJiBMSU5LX1RPR0dMRSkKKwkJaWYgKGxlMzJfdG9fY3B1KGdlbmVyaWNfdHJiLT5maWVsZFszXSkgJiBMSU5LX1RPR0dMRSkKIAkJCSpjeWNsZV9zdGF0ZSBePSAweDE7CiAJCWN1cl9zZWcgPSBjdXJfc2VnLT5uZXh0OwogCQlpZiAoY3VyX3NlZyA9PSBzdGFydF9zZWcpCkBAIC00NDcsNiArNDUxLDEwIEBACiAgKiAgICBhbnkgbGluayBUUkJzIHdpdGggdGhlIHRvZ2dsZSBjeWNsZSBiaXQgc2V0LgogICogIC0gRmluYWxseSB3ZSBtb3ZlIHRoZSBkZXF1ZXVlIHN0YXRlIG9uZSBUUkIgZnVydGhlciwgdG9nZ2xpbmcgdGhlIGN5Y2xlIGJpdAogICogICAgaWYgd2UndmUgbW92ZWQgaXQgcGFzdCBhIGxpbmsgVFJCIHdpdGggdGhlIHRvZ2dsZSBjeWNsZSBiaXQgc2V0LgorICoKKyAqIFNvbWUgb2YgdGhlIHVzZXMgb2YgeGhjaV9nZW5lcmljX3RyYiBhcmUgZ3JvdHR5LCBidXQgaWYgdGhleSdyZSBkb25lCisgKiB3aXRoIGNvcnJlY3QgX19sZTMyIGFjY2Vzc2VzIHRoZXkgc2hvdWxkIHdvcmsgZmluZS4gIE9ubHkgdXNlcnMgb2YgdGhpcyBhcmUKKyAqIGluIGhlcmUuCiAgKi8KIHZvaWQgeGhjaV9maW5kX25ld19kZXF1ZXVlX3N0YXRlKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKIAkJdW5zaWduZWQgaW50IHNsb3RfaWQsIHVuc2lnbmVkIGludCBlcF9pbmRleCwKQEAgLTQ4MCw3ICs0ODgsNyBAQAogCS8qIERpZyBvdXQgdGhlIGN5Y2xlIHN0YXRlIHNhdmVkIGJ5IHRoZSB4SEMgZHVyaW5nIHRoZSBzdG9wIGVwIGNtZCAqLwogCXhoY2lfZGJnKHhoY2ksICJGaW5kaW5nIGVuZHBvaW50IGNvbnRleHRcbiIpOwogCWVwX2N0eCA9IHhoY2lfZ2V0X2VwX2N0eCh4aGNpLCBkZXYtPm91dF9jdHgsIGVwX2luZGV4KTsKLQlzdGF0ZS0+bmV3X2N5Y2xlX3N0YXRlID0gMHgxICYgZXBfY3R4LT5kZXE7CisJc3RhdGUtPm5ld19jeWNsZV9zdGF0ZSA9IDB4MSAmIGxlNjRfdG9fY3B1KGVwX2N0eC0+ZGVxKTsKIAogCXN0YXRlLT5uZXdfZGVxX3B0ciA9IGN1cl90ZC0+bGFzdF90cmI7CiAJeGhjaV9kYmcoeGhjaSwgIkZpbmRpbmcgc2VnbWVudCBjb250YWluaW5nIGxhc3QgVFJCIGluIFRELlxuIik7CkBAIC00OTMsOCArNTAxLDggQEAKIAl9CiAKIAl0cmIgPSAmc3RhdGUtPm5ld19kZXFfcHRyLT5nZW5lcmljOwotCWlmICgodHJiLT5maWVsZFszXSAmIFRSQl9UWVBFX0JJVE1BU0spID09IFRSQl9UWVBFKFRSQl9MSU5LKSAmJgotCQkJCSh0cmItPmZpZWxkWzNdICYgTElOS19UT0dHTEUpKQorCWlmICgobGUzMl90b19jcHUodHJiLT5maWVsZFszXSkgJiBUUkJfVFlQRV9CSVRNQVNLKSA9PQorCSAgICBUUkJfVFlQRShUUkJfTElOSykgJiYgKGxlMzJfdG9fY3B1KHRyYi0+ZmllbGRbM10pICYgTElOS19UT0dHTEUpKQogCQlzdGF0ZS0+bmV3X2N5Y2xlX3N0YXRlIF49IDB4MTsKIAluZXh0X3RyYih4aGNpLCBlcF9yaW5nLCAmc3RhdGUtPm5ld19kZXFfc2VnLCAmc3RhdGUtPm5ld19kZXFfcHRyKTsKIApAQCAtNTI5LDEyICs1MzcsMTIgQEAKIAlmb3IgKGN1cl9zZWcgPSBjdXJfdGQtPnN0YXJ0X3NlZywgY3VyX3RyYiA9IGN1cl90ZC0+Zmlyc3RfdHJiOwogCQkJdHJ1ZTsKIAkJCW5leHRfdHJiKHhoY2ksIGVwX3JpbmcsICZjdXJfc2VnLCAmY3VyX3RyYikpIHsKLQkJaWYgKChjdXJfdHJiLT5nZW5lcmljLmZpZWxkWzNdICYgVFJCX1RZUEVfQklUTUFTSykgPT0KLQkJCQlUUkJfVFlQRShUUkJfTElOSykpIHsKKwkJaWYgKChsZTMyX3RvX2NwdShjdXJfdHJiLT5nZW5lcmljLmZpZWxkWzNdKSAmIFRSQl9UWVBFX0JJVE1BU0spCisJCSAgICA9PSBUUkJfVFlQRShUUkJfTElOSykpIHsKIAkJCS8qIFVuY2hhaW4gYW55IGNoYWluZWQgTGluayBUUkJzLCBidXQKIAkJCSAqIGxlYXZlIHRoZSBwb2ludGVycyBpbnRhY3QuCiAJCQkgKi8KLQkJCWN1cl90cmItPmdlbmVyaWMuZmllbGRbM10gJj0gflRSQl9DSEFJTjsKKwkJCWN1cl90cmItPmdlbmVyaWMuZmllbGRbM10gJj0gY3B1X3RvX2xlMzIoflRSQl9DSEFJTik7CiAJCQl4aGNpX2RiZyh4aGNpLCAiQ2FuY2VsICh1bmNoYWluKSBsaW5rIFRSQlxuIik7CiAJCQl4aGNpX2RiZyh4aGNpLCAiQWRkcmVzcyA9ICVwICgweCVsbHggZG1hKTsgIgogCQkJCQkiaW4gc2VnICVwICgweCVsbHggZG1hKVxuIiwKQEAgLTU0Nyw4ICs1NTUsOSBAQAogCQkJY3VyX3RyYi0+Z2VuZXJpYy5maWVsZFsxXSA9IDA7CiAJCQljdXJfdHJiLT5nZW5lcmljLmZpZWxkWzJdID0gMDsKIAkJCS8qIFByZXNlcnZlIG9ubHkgdGhlIGN5Y2xlIGJpdCBvZiB0aGlzIFRSQiAqLwotCQkJY3VyX3RyYi0+Z2VuZXJpYy5maWVsZFszXSAmPSBUUkJfQ1lDTEU7Ci0JCQljdXJfdHJiLT5nZW5lcmljLmZpZWxkWzNdIHw9IFRSQl9UWVBFKFRSQl9UUl9OT09QKTsKKwkJCWN1cl90cmItPmdlbmVyaWMuZmllbGRbM10gJj0gY3B1X3RvX2xlMzIoVFJCX0NZQ0xFKTsKKwkJCWN1cl90cmItPmdlbmVyaWMuZmllbGRbM10gfD0gY3B1X3RvX2xlMzIoCisJCQkJVFJCX1RZUEUoVFJCX1RSX05PT1ApKTsKIAkJCXhoY2lfZGJnKHhoY2ksICJDYW5jZWwgVFJCICVwICgweCVsbHggZG1hKSAiCiAJCQkJCSJpbiBzZWcgJXAgKDB4JWxseCBkbWEpXG4iLAogCQkJCQljdXJfdHJiLApAQCAtNjYyLDkgKzY3MSw5IEBACiAJc3RydWN0IHhoY2lfZGVxdWV1ZV9zdGF0ZSBkZXFfc3RhdGU7CiAKIAlpZiAodW5saWtlbHkoVFJCX1RPX1NVU1BFTkRfUE9SVCgKLQkJCXhoY2ktPmNtZF9yaW5nLT5kZXF1ZXVlLT5nZW5lcmljLmZpZWxkWzNdKSkpIHsKKwkJCSAgICAgbGUzMl90b19jcHUoeGhjaS0+Y21kX3JpbmctPmRlcXVldWUtPmdlbmVyaWMuZmllbGRbM10pKSkpIHsKIAkJc2xvdF9pZCA9IFRSQl9UT19TTE9UX0lEKAotCQkJeGhjaS0+Y21kX3JpbmctPmRlcXVldWUtPmdlbmVyaWMuZmllbGRbM10pOworCQkJbGUzMl90b19jcHUoeGhjaS0+Y21kX3JpbmctPmRlcXVldWUtPmdlbmVyaWMuZmllbGRbM10pKTsKIAkJdmlydF9kZXYgPSB4aGNpLT5kZXZzW3Nsb3RfaWRdOwogCQlpZiAodmlydF9kZXYpCiAJCQloYW5kbGVfY21kX2luX2NtZF93YWl0X2xpc3QoeGhjaSwgdmlydF9kZXYsCkBAIC02NzcsOCArNjg2LDggQEAKIAl9CiAKIAltZW1zZXQoJmRlcV9zdGF0ZSwgMCwgc2l6ZW9mKGRlcV9zdGF0ZSkpOwotCXNsb3RfaWQgPSBUUkJfVE9fU0xPVF9JRCh0cmItPmdlbmVyaWMuZmllbGRbM10pOwotCWVwX2luZGV4ID0gVFJCX1RPX0VQX0lOREVYKHRyYi0+Z2VuZXJpYy5maWVsZFszXSk7CisJc2xvdF9pZCA9IFRSQl9UT19TTE9UX0lEKGxlMzJfdG9fY3B1KHRyYi0+Z2VuZXJpYy5maWVsZFszXSkpOworCWVwX2luZGV4ID0gVFJCX1RPX0VQX0lOREVYKGxlMzJfdG9fY3B1KHRyYi0+Z2VuZXJpYy5maWVsZFszXSkpOwogCWVwID0gJnhoY2ktPmRldnNbc2xvdF9pZF0tPmVwc1tlcF9pbmRleF07CiAKIAlpZiAobGlzdF9lbXB0eSgmZXAtPmNhbmNlbGxlZF90ZF9saXN0KSkgewpAQCAtOTEwLDkgKzkxOSw5IEBACiAJc3RydWN0IHhoY2lfZXBfY3R4ICplcF9jdHg7CiAJc3RydWN0IHhoY2lfc2xvdF9jdHggKnNsb3RfY3R4OwogCi0Jc2xvdF9pZCA9IFRSQl9UT19TTE9UX0lEKHRyYi0+Z2VuZXJpYy5maWVsZFszXSk7Ci0JZXBfaW5kZXggPSBUUkJfVE9fRVBfSU5ERVgodHJiLT5nZW5lcmljLmZpZWxkWzNdKTsKLQlzdHJlYW1faWQgPSBUUkJfVE9fU1RSRUFNX0lEKHRyYi0+Z2VuZXJpYy5maWVsZFsyXSk7CisJc2xvdF9pZCA9IFRSQl9UT19TTE9UX0lEKGxlMzJfdG9fY3B1KHRyYi0+Z2VuZXJpYy5maWVsZFszXSkpOworCWVwX2luZGV4ID0gVFJCX1RPX0VQX0lOREVYKGxlMzJfdG9fY3B1KHRyYi0+Z2VuZXJpYy5maWVsZFszXSkpOworCXN0cmVhbV9pZCA9IFRSQl9UT19TVFJFQU1fSUQobGUzMl90b19jcHUodHJiLT5nZW5lcmljLmZpZWxkWzJdKSk7CiAJZGV2ID0geGhjaS0+ZGV2c1tzbG90X2lkXTsKIAogCWVwX3JpbmcgPSB4aGNpX3N0cmVhbV9pZF90b19yaW5nKGRldiwgZXBfaW5kZXgsIHN0cmVhbV9pZCk7CkBAIC05MjgsMTEgKzkzNywxMSBAQAogCWVwX2N0eCA9IHhoY2lfZ2V0X2VwX2N0eCh4aGNpLCBkZXYtPm91dF9jdHgsIGVwX2luZGV4KTsKIAlzbG90X2N0eCA9IHhoY2lfZ2V0X3Nsb3RfY3R4KHhoY2ksIGRldi0+b3V0X2N0eCk7CiAKLQlpZiAoR0VUX0NPTVBfQ09ERShldmVudC0+c3RhdHVzKSAhPSBDT01QX1NVQ0NFU1MpIHsKKwlpZiAoR0VUX0NPTVBfQ09ERShsZTMyX3RvX2NwdShldmVudC0+c3RhdHVzKSkgIT0gQ09NUF9TVUNDRVNTKSB7CiAJCXVuc2lnbmVkIGludCBlcF9zdGF0ZTsKIAkJdW5zaWduZWQgaW50IHNsb3Rfc3RhdGU7CiAKLQkJc3dpdGNoIChHRVRfQ09NUF9DT0RFKGV2ZW50LT5zdGF0dXMpKSB7CisJCXN3aXRjaCAoR0VUX0NPTVBfQ09ERShsZTMyX3RvX2NwdShldmVudC0+c3RhdHVzKSkpIHsKIAkJY2FzZSBDT01QX1RSQl9FUlI6CiAJCQl4aGNpX3dhcm4oeGhjaSwgIldBUk4gU2V0IFRSIERlcSBQdHIgY21kIGludmFsaWQgYmVjYXVzZSAiCiAJCQkJCSJvZiBzdHJlYW0gSUQgY29uZmlndXJhdGlvblxuIik7CkBAIC05NDAsOSArOTQ5LDkgQEAKIAkJY2FzZSBDT01QX0NUWF9TVEFURToKIAkJCXhoY2lfd2Fybih4aGNpLCAiV0FSTiBTZXQgVFIgRGVxIFB0ciBjbWQgZmFpbGVkIGR1ZSAiCiAJCQkJCSJ0byBpbmNvcnJlY3Qgc2xvdCBvciBlcCBzdGF0ZS5cbiIpOwotCQkJZXBfc3RhdGUgPSBlcF9jdHgtPmVwX2luZm87CisJCQllcF9zdGF0ZSA9IGxlMzJfdG9fY3B1KGVwX2N0eC0+ZXBfaW5mbyk7CiAJCQllcF9zdGF0ZSAmPSBFUF9TVEFURV9NQVNLOwotCQkJc2xvdF9zdGF0ZSA9IHNsb3RfY3R4LT5kZXZfc3RhdGU7CisJCQlzbG90X3N0YXRlID0gbGUzMl90b19jcHUoc2xvdF9jdHgtPmRldl9zdGF0ZSk7CiAJCQlzbG90X3N0YXRlID0gR0VUX1NMT1RfU1RBVEUoc2xvdF9zdGF0ZSk7CiAJCQl4aGNpX2RiZyh4aGNpLCAiU2xvdCBzdGF0ZSA9ICV1LCBFUCBzdGF0ZSA9ICV1XG4iLAogCQkJCQlzbG90X3N0YXRlLCBlcF9zdGF0ZSk7CkBAIC05NTQsNyArOTYzLDcgQEAKIAkJZGVmYXVsdDoKIAkJCXhoY2lfd2Fybih4aGNpLCAiV0FSTiBTZXQgVFIgRGVxIFB0ciBjbWQgd2l0aCB1bmtub3duICIKIAkJCQkJImNvbXBsZXRpb24gY29kZSBvZiAldS5cbiIsCi0JCQkJCUdFVF9DT01QX0NPREUoZXZlbnQtPnN0YXR1cykpOworCQkJCSAgR0VUX0NPTVBfQ09ERShsZTMyX3RvX2NwdShldmVudC0+c3RhdHVzKSkpOwogCQkJYnJlYWs7CiAJCX0KIAkJLyogT0sgd2hhdCBkbyB3ZSBkbyBub3c/ICBUaGUgZW5kcG9pbnQgc3RhdGUgaXMgaG9zZWQsIGFuZCB3ZQpAQCAtOTY1LDEwICs5NzQsMTAgQEAKIAkJICovCiAJfSBlbHNlIHsKIAkJeGhjaV9kYmcoeGhjaSwgIlN1Y2Nlc3NmdWwgU2V0IFRSIERlcSBQdHIgY21kLCBkZXEgPSBAJTA4bGx4XG4iLAotCQkJCWVwX2N0eC0+ZGVxKTsKKwkJCSBsZTY0X3RvX2NwdShlcF9jdHgtPmRlcSkpOwogCQlpZiAoeGhjaV90cmJfdmlydF90b19kbWEoZGV2LT5lcHNbZXBfaW5kZXhdLnF1ZXVlZF9kZXFfc2VnLAotCQkJCQlkZXYtPmVwc1tlcF9pbmRleF0ucXVldWVkX2RlcV9wdHIpID09Ci0JCQkJKGVwX2N0eC0+ZGVxICYgfihFUF9DVFhfQ1lDTEVfTUFTSykpKSB7CisJCQkJCSBkZXYtPmVwc1tlcF9pbmRleF0ucXVldWVkX2RlcV9wdHIpID09CisJCSAgICAobGU2NF90b19jcHUoZXBfY3R4LT5kZXEpICYgfihFUF9DVFhfQ1lDTEVfTUFTSykpKSB7CiAJCQkvKiBVcGRhdGUgdGhlIHJpbmcncyBkZXF1ZXVlIHNlZ21lbnQgYW5kIGRlcXVldWUgcG9pbnRlcgogCQkJICogdG8gcmVmbGVjdCB0aGUgbmV3IHBvc2l0aW9uLgogCQkJICovCkBAIC05OTcsMTMgKzEwMDYsMTMgQEAKIAlpbnQgc2xvdF9pZDsKIAl1bnNpZ25lZCBpbnQgZXBfaW5kZXg7CiAKLQlzbG90X2lkID0gVFJCX1RPX1NMT1RfSUQodHJiLT5nZW5lcmljLmZpZWxkWzNdKTsKLQllcF9pbmRleCA9IFRSQl9UT19FUF9JTkRFWCh0cmItPmdlbmVyaWMuZmllbGRbM10pOworCXNsb3RfaWQgPSBUUkJfVE9fU0xPVF9JRChsZTMyX3RvX2NwdSh0cmItPmdlbmVyaWMuZmllbGRbM10pKTsKKwllcF9pbmRleCA9IFRSQl9UT19FUF9JTkRFWChsZTMyX3RvX2NwdSh0cmItPmdlbmVyaWMuZmllbGRbM10pKTsKIAkvKiBUaGlzIGNvbW1hbmQgd2lsbCBvbmx5IGZhaWwgaWYgdGhlIGVuZHBvaW50IHdhc24ndCBoYWx0ZWQsCiAJICogYnV0IHdlIGRvbid0IGNhcmUuCiAJICovCiAJeGhjaV9kYmcoeGhjaSwgIklnbm9yaW5nIHJlc2V0IGVwIGNvbXBsZXRpb24gY29kZSBvZiAldVxuIiwKLQkJCSh1bnNpZ25lZCBpbnQpIEdFVF9DT01QX0NPREUoZXZlbnQtPnN0YXR1cykpOworCQkgKHVuc2lnbmVkIGludCkgR0VUX0NPTVBfQ09ERShsZTMyX3RvX2NwdShldmVudC0+c3RhdHVzKSkpOwogCiAJLyogSFcgd2l0aCB0aGUgcmVzZXQgZW5kcG9pbnQgcXVpcmsgbmVlZHMgdG8gaGF2ZSBhIGNvbmZpZ3VyZSBlbmRwb2ludAogCSAqIGNvbW1hbmQgY29tcGxldGUgYmVmb3JlIHRoZSBlbmRwb2ludCBjYW4gYmUgdXNlZC4gIFF1ZXVlIHRoYXQgaGVyZQpAQCAtMTA0MCw4ICsxMDQ5LDcgQEAKIAlpZiAoeGhjaS0+Y21kX3JpbmctPmRlcXVldWUgIT0gY29tbWFuZC0+Y29tbWFuZF90cmIpCiAJCXJldHVybiAwOwogCi0JY29tbWFuZC0+c3RhdHVzID0KLQkJR0VUX0NPTVBfQ09ERShldmVudC0+c3RhdHVzKTsKKwljb21tYW5kLT5zdGF0dXMgPSBHRVRfQ09NUF9DT0RFKGxlMzJfdG9fY3B1KGV2ZW50LT5zdGF0dXMpKTsKIAlsaXN0X2RlbCgmY29tbWFuZC0+Y21kX2xpc3QpOwogCWlmIChjb21tYW5kLT5jb21wbGV0aW9uKQogCQljb21wbGV0ZShjb21tYW5kLT5jb21wbGV0aW9uKTsKQEAgLTEwNTMsNyArMTA2MSw3IEBACiBzdGF0aWMgdm9pZCBoYW5kbGVfY21kX2NvbXBsZXRpb24oc3RydWN0IHhoY2lfaGNkICp4aGNpLAogCQlzdHJ1Y3QgeGhjaV9ldmVudF9jbWQgKmV2ZW50KQogewotCWludCBzbG90X2lkID0gVFJCX1RPX1NMT1RfSUQoZXZlbnQtPmZsYWdzKTsKKwlpbnQgc2xvdF9pZCA9IFRSQl9UT19TTE9UX0lEKGxlMzJfdG9fY3B1KGV2ZW50LT5mbGFncykpOwogCXU2NCBjbWRfZG1hOwogCWRtYV9hZGRyX3QgY21kX2RlcXVldWVfZG1hOwogCXN0cnVjdCB4aGNpX2lucHV0X2NvbnRyb2xfY3R4ICpjdHJsX2N0eDsKQEAgLTEwNjIsNyArMTA3MCw3IEBACiAJc3RydWN0IHhoY2lfcmluZyAqZXBfcmluZzsKIAl1bnNpZ25lZCBpbnQgZXBfc3RhdGU7CiAKLQljbWRfZG1hID0gZXZlbnQtPmNtZF90cmI7CisJY21kX2RtYSA9IGxlNjRfdG9fY3B1KGV2ZW50LT5jbWRfdHJiKTsKIAljbWRfZGVxdWV1ZV9kbWEgPSB4aGNpX3RyYl92aXJ0X3RvX2RtYSh4aGNpLT5jbWRfcmluZy0+ZGVxX3NlZywKIAkJCXhoY2ktPmNtZF9yaW5nLT5kZXF1ZXVlKTsKIAkvKiBJcyB0aGUgY29tbWFuZCByaW5nIGRlcSBwdHIgb3V0IG9mIHN5bmMgd2l0aCB0aGUgZGVxIHNlZyBwdHI/ICovCkBAIC0xMDc1LDkgKzEwODMsMTAgQEAKIAkJeGhjaS0+ZXJyb3JfYml0bWFzayB8PSAxIDw8IDU7CiAJCXJldHVybjsKIAl9Ci0Jc3dpdGNoICh4aGNpLT5jbWRfcmluZy0+ZGVxdWV1ZS0+Z2VuZXJpYy5maWVsZFszXSAmIFRSQl9UWVBFX0JJVE1BU0spIHsKKwlzd2l0Y2ggKGxlMzJfdG9fY3B1KHhoY2ktPmNtZF9yaW5nLT5kZXF1ZXVlLT5nZW5lcmljLmZpZWxkWzNdKQorCQkmIFRSQl9UWVBFX0JJVE1BU0spIHsKIAljYXNlIFRSQl9UWVBFKFRSQl9FTkFCTEVfU0xPVCk6Ci0JCWlmIChHRVRfQ09NUF9DT0RFKGV2ZW50LT5zdGF0dXMpID09IENPTVBfU1VDQ0VTUykKKwkJaWYgKEdFVF9DT01QX0NPREUobGUzMl90b19jcHUoZXZlbnQtPnN0YXR1cykpID09IENPTVBfU1VDQ0VTUykKIAkJCXhoY2ktPnNsb3RfaWQgPSBzbG90X2lkOwogCQllbHNlCiAJCQl4aGNpLT5zbG90X2lkID0gMDsKQEAgLTExMDIsNyArMTExMSw3IEBACiAJCWN0cmxfY3R4ID0geGhjaV9nZXRfaW5wdXRfY29udHJvbF9jdHgoeGhjaSwKIAkJCQl2aXJ0X2Rldi0+aW5fY3R4KTsKIAkJLyogSW5wdXQgY3R4IGFkZF9mbGFncyBhcmUgdGhlIGVuZHBvaW50IGluZGV4IHBsdXMgb25lICovCi0JCWVwX2luZGV4ID0geGhjaV9sYXN0X3ZhbGlkX2VuZHBvaW50KGN0cmxfY3R4LT5hZGRfZmxhZ3MpIC0gMTsKKwkJZXBfaW5kZXggPSB4aGNpX2xhc3RfdmFsaWRfZW5kcG9pbnQobGUzMl90b19jcHUoY3RybF9jdHgtPmFkZF9mbGFncykpIC0gMTsKIAkJLyogQSB1c2Jfc2V0X2ludGVyZmFjZSgpIGNhbGwgZGlyZWN0bHkgYWZ0ZXIgY2xlYXJpbmcgYSBoYWx0ZWQKIAkJICogY29uZGl0aW9uIG1heSByYWNlIG9uIHRoaXMgcXVpcmt5IGhhcmR3YXJlLiAgTm90IHdvcnRoCiAJCSAqIHdvcnJ5aW5nIGFib3V0LCBzaW5jZSB0aGlzIGlzIHByb3RvdHlwZSBoYXJkd2FyZS4gIE5vdCBzdXJlCkBAIC0xMTExLDggKzExMjAsOCBAQAogCQkgKi8KIAkJaWYgKHhoY2ktPnF1aXJrcyAmIFhIQ0lfUkVTRVRfRVBfUVVJUksgJiYKIAkJCQllcF9pbmRleCAhPSAodW5zaWduZWQgaW50KSAtMSAmJgotCQkJCWN0cmxfY3R4LT5hZGRfZmxhZ3MgLSBTTE9UX0ZMQUcgPT0KLQkJCQkJY3RybF9jdHgtPmRyb3BfZmxhZ3MpIHsKKwkJICAgIGxlMzJfdG9fY3B1KGN0cmxfY3R4LT5hZGRfZmxhZ3MpIC0gU0xPVF9GTEFHID09CisJCSAgICBsZTMyX3RvX2NwdShjdHJsX2N0eC0+ZHJvcF9mbGFncykpIHsKIAkJCWVwX3JpbmcgPSB4aGNpLT5kZXZzW3Nsb3RfaWRdLT5lcHNbZXBfaW5kZXhdLnJpbmc7CiAJCQllcF9zdGF0ZSA9IHhoY2ktPmRldnNbc2xvdF9pZF0tPmVwc1tlcF9pbmRleF0uZXBfc3RhdGU7CiAJCQlpZiAoIShlcF9zdGF0ZSAmIEVQX0hBTFRFRCkpCkBAIC0xMTI5LDE4ICsxMTM4LDE4IEBACiBiYW5kd2lkdGhfY2hhbmdlOgogCQl4aGNpX2RiZyh4aGNpLCAiQ29tcGxldGVkIGNvbmZpZyBlcCBjbWRcbiIpOwogCQl4aGNpLT5kZXZzW3Nsb3RfaWRdLT5jbWRfc3RhdHVzID0KLQkJCUdFVF9DT01QX0NPREUoZXZlbnQtPnN0YXR1cyk7CisJCQlHRVRfQ09NUF9DT0RFKGxlMzJfdG9fY3B1KGV2ZW50LT5zdGF0dXMpKTsKIAkJY29tcGxldGUoJnhoY2ktPmRldnNbc2xvdF9pZF0tPmNtZF9jb21wbGV0aW9uKTsKIAkJYnJlYWs7CiAJY2FzZSBUUkJfVFlQRShUUkJfRVZBTF9DT05URVhUKToKIAkJdmlydF9kZXYgPSB4aGNpLT5kZXZzW3Nsb3RfaWRdOwogCQlpZiAoaGFuZGxlX2NtZF9pbl9jbWRfd2FpdF9saXN0KHhoY2ksIHZpcnRfZGV2LCBldmVudCkpCiAJCQlicmVhazsKLQkJeGhjaS0+ZGV2c1tzbG90X2lkXS0+Y21kX3N0YXR1cyA9IEdFVF9DT01QX0NPREUoZXZlbnQtPnN0YXR1cyk7CisJCXhoY2ktPmRldnNbc2xvdF9pZF0tPmNtZF9zdGF0dXMgPSBHRVRfQ09NUF9DT0RFKGxlMzJfdG9fY3B1KGV2ZW50LT5zdGF0dXMpKTsKIAkJY29tcGxldGUoJnhoY2ktPmRldnNbc2xvdF9pZF0tPmNtZF9jb21wbGV0aW9uKTsKIAkJYnJlYWs7CiAJY2FzZSBUUkJfVFlQRShUUkJfQUREUl9ERVYpOgotCQl4aGNpLT5kZXZzW3Nsb3RfaWRdLT5jbWRfc3RhdHVzID0gR0VUX0NPTVBfQ09ERShldmVudC0+c3RhdHVzKTsKKwkJeGhjaS0+ZGV2c1tzbG90X2lkXS0+Y21kX3N0YXR1cyA9IEdFVF9DT01QX0NPREUobGUzMl90b19jcHUoZXZlbnQtPnN0YXR1cykpOwogCQljb21wbGV0ZSgmeGhjaS0+YWRkcl9kZXYpOwogCQlicmVhazsKIAljYXNlIFRSQl9UWVBFKFRSQl9TVE9QX1JJTkcpOgpAQCAtMTE1Nyw3ICsxMTY2LDcgQEAKIAljYXNlIFRSQl9UWVBFKFRSQl9SRVNFVF9ERVYpOgogCQl4aGNpX2RiZyh4aGNpLCAiQ29tcGxldGVkIHJlc2V0IGRldmljZSBjb21tYW5kLlxuIik7CiAJCXNsb3RfaWQgPSBUUkJfVE9fU0xPVF9JRCgKLQkJCQl4aGNpLT5jbWRfcmluZy0+ZGVxdWV1ZS0+Z2VuZXJpYy5maWVsZFszXSk7CisJCQlsZTMyX3RvX2NwdSh4aGNpLT5jbWRfcmluZy0+ZGVxdWV1ZS0+Z2VuZXJpYy5maWVsZFszXSkpOwogCQl2aXJ0X2RldiA9IHhoY2ktPmRldnNbc2xvdF9pZF07CiAJCWlmICh2aXJ0X2RldikKIAkJCWhhbmRsZV9jbWRfaW5fY21kX3dhaXRfbGlzdCh4aGNpLCB2aXJ0X2RldiwgZXZlbnQpOwpAQCAtMTE3MSw4ICsxMTgwLDggQEAKIAkJCWJyZWFrOwogCQl9CiAJCXhoY2lfZGJnKHhoY2ksICJORUMgZmlybXdhcmUgdmVyc2lvbiAlMnguJTAyeFxuIiwKLQkJCQlORUNfRldfTUFKT1IoZXZlbnQtPnN0YXR1cyksCi0JCQkJTkVDX0ZXX01JTk9SKGV2ZW50LT5zdGF0dXMpKTsKKwkJCSBORUNfRldfTUFKT1IobGUzMl90b19jcHUoZXZlbnQtPnN0YXR1cykpLAorCQkJIE5FQ19GV19NSU5PUihsZTMyX3RvX2NwdShldmVudC0+c3RhdHVzKSkpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBTa2lwIG92ZXIgdW5rbm93biBjb21tYW5kcyBvbiB0aGUgZXZlbnQgcmluZyAqLwpAQCAtMTE4Nyw3ICsxMTk2LDcgQEAKIHsKIAl1MzIgdHJiX3R5cGU7CiAKLQl0cmJfdHlwZSA9IFRSQl9GSUVMRF9UT19UWVBFKGV2ZW50LT5nZW5lcmljLmZpZWxkWzNdKTsKKwl0cmJfdHlwZSA9IFRSQl9GSUVMRF9UT19UWVBFKGxlMzJfdG9fY3B1KGV2ZW50LT5nZW5lcmljLmZpZWxkWzNdKSk7CiAJeGhjaV9kYmcoeGhjaSwgIlZlbmRvciBzcGVjaWZpYyBldmVudCBUUkIgdHlwZSA9ICV1XG4iLCB0cmJfdHlwZSk7CiAJaWYgKHRyYl90eXBlID09IFRSQl9ORUNfQ01EX0NPTVAgJiYgKHhoY2ktPnF1aXJrcyAmIFhIQ0lfTkVDX0hPU1QpKQogCQloYW5kbGVfY21kX2NvbXBsZXRpb24oeGhjaSwgJmV2ZW50LT5ldmVudF9jbWQpOwpAQCAtMTI0MSwxNSArMTI1MCwxNSBAQAogCXVuc2lnbmVkIGludCBmYWtlZF9wb3J0X2luZGV4OwogCXU4IG1ham9yX3JldmlzaW9uOwogCXN0cnVjdCB4aGNpX2J1c19zdGF0ZSAqYnVzX3N0YXRlOwotCXUzMiBfX2lvbWVtICoqcG9ydF9hcnJheTsKKwlfX2xlMzIgX19pb21lbSAqKnBvcnRfYXJyYXk7CiAJYm9vbCBib2d1c19wb3J0X3N0YXR1cyA9IGZhbHNlOwogCiAJLyogUG9ydCBzdGF0dXMgY2hhbmdlIGV2ZW50cyBhbHdheXMgaGF2ZSBhIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBjb2RlICovCi0JaWYgKEdFVF9DT01QX0NPREUoZXZlbnQtPmdlbmVyaWMuZmllbGRbMl0pICE9IENPTVBfU1VDQ0VTUykgeworCWlmIChHRVRfQ09NUF9DT0RFKGxlMzJfdG9fY3B1KGV2ZW50LT5nZW5lcmljLmZpZWxkWzJdKSkgIT0gQ09NUF9TVUNDRVNTKSB7CiAJCXhoY2lfd2Fybih4aGNpLCAiV0FSTjogeEhDIHJldHVybmVkIGZhaWxlZCBwb3J0IHN0YXR1cyBldmVudFxuIik7CiAJCXhoY2ktPmVycm9yX2JpdG1hc2sgfD0gMSA8PCA4OwogCX0KLQlwb3J0X2lkID0gR0VUX1BPUlRfSUQoZXZlbnQtPmdlbmVyaWMuZmllbGRbMF0pOworCXBvcnRfaWQgPSBHRVRfUE9SVF9JRChsZTMyX3RvX2NwdShldmVudC0+Z2VuZXJpYy5maWVsZFswXSkpOwogCXhoY2lfZGJnKHhoY2ksICJQb3J0IFN0YXR1cyBDaGFuZ2UgRXZlbnQgZm9yIHBvcnQgJWRcbiIsIHBvcnRfaWQpOwogCiAJbWF4X3BvcnRzID0gSENTX01BWF9QT1JUUyh4aGNpLT5oY3NfcGFyYW1zMSk7CkBAIC0xNDU2LDcgKzE0NjUsNyBAQAogCQkgKiBlbmRwb2ludCBhbnl3YXkuICBDaGVjayBpZiBhIGJhYmJsZSBoYWx0ZWQgdGhlCiAJCSAqIGVuZHBvaW50LgogCQkgKi8KLQkJaWYgKChlcF9jdHgtPmVwX2luZm8gJiBFUF9TVEFURV9NQVNLKSA9PSBFUF9TVEFURV9IQUxURUQpCisJCWlmICgobGUzMl90b19jcHUoZXBfY3R4LT5lcF9pbmZvKSAmIEVQX1NUQVRFX01BU0spID09IEVQX1NUQVRFX0hBTFRFRCkKIAkJCXJldHVybiAxOwogCiAJcmV0dXJuIDA7CkBAIC0xNDk0LDEyICsxNTAzLDEyIEBACiAJc3RydWN0IHVyYl9wcml2CSp1cmJfcHJpdjsKIAl1MzIgdHJiX2NvbXBfY29kZTsKIAotCXNsb3RfaWQgPSBUUkJfVE9fU0xPVF9JRChldmVudC0+ZmxhZ3MpOworCXNsb3RfaWQgPSBUUkJfVE9fU0xPVF9JRChsZTMyX3RvX2NwdShldmVudC0+ZmxhZ3MpKTsKIAl4ZGV2ID0geGhjaS0+ZGV2c1tzbG90X2lkXTsKLQllcF9pbmRleCA9IFRSQl9UT19FUF9JRChldmVudC0+ZmxhZ3MpIC0gMTsKLQllcF9yaW5nID0geGhjaV9kbWFfdG9fdHJhbnNmZXJfcmluZyhlcCwgZXZlbnQtPmJ1ZmZlcik7CisJZXBfaW5kZXggPSBUUkJfVE9fRVBfSUQobGUzMl90b19jcHUoZXZlbnQtPmZsYWdzKSkgLSAxOworCWVwX3JpbmcgPSB4aGNpX2RtYV90b190cmFuc2Zlcl9yaW5nKGVwLCBsZTY0X3RvX2NwdShldmVudC0+YnVmZmVyKSk7CiAJZXBfY3R4ID0geGhjaV9nZXRfZXBfY3R4KHhoY2ksIHhkZXYtPm91dF9jdHgsIGVwX2luZGV4KTsKLQl0cmJfY29tcF9jb2RlID0gR0VUX0NPTVBfQ09ERShldmVudC0+dHJhbnNmZXJfbGVuKTsKKwl0cmJfY29tcF9jb2RlID0gR0VUX0NPTVBfQ09ERShsZTMyX3RvX2NwdShldmVudC0+dHJhbnNmZXJfbGVuKSk7CiAKIAlpZiAoc2tpcCkKIAkJZ290byB0ZF9jbGVhbnVwOwpAQCAtMTYwMiwxMiArMTYxMSwxMiBAQAogCXN0cnVjdCB4aGNpX2VwX2N0eCAqZXBfY3R4OwogCXUzMiB0cmJfY29tcF9jb2RlOwogCi0Jc2xvdF9pZCA9IFRSQl9UT19TTE9UX0lEKGV2ZW50LT5mbGFncyk7CisJc2xvdF9pZCA9IFRSQl9UT19TTE9UX0lEKGxlMzJfdG9fY3B1KGV2ZW50LT5mbGFncykpOwogCXhkZXYgPSB4aGNpLT5kZXZzW3Nsb3RfaWRdOwotCWVwX2luZGV4ID0gVFJCX1RPX0VQX0lEKGV2ZW50LT5mbGFncykgLSAxOwotCWVwX3JpbmcgPSB4aGNpX2RtYV90b190cmFuc2Zlcl9yaW5nKGVwLCBldmVudC0+YnVmZmVyKTsKKwllcF9pbmRleCA9IFRSQl9UT19FUF9JRChsZTMyX3RvX2NwdShldmVudC0+ZmxhZ3MpKSAtIDE7CisJZXBfcmluZyA9IHhoY2lfZG1hX3RvX3RyYW5zZmVyX3JpbmcoZXAsIGxlNjRfdG9fY3B1KGV2ZW50LT5idWZmZXIpKTsKIAllcF9jdHggPSB4aGNpX2dldF9lcF9jdHgoeGhjaSwgeGRldi0+b3V0X2N0eCwgZXBfaW5kZXgpOwotCXRyYl9jb21wX2NvZGUgPSBHRVRfQ09NUF9DT0RFKGV2ZW50LT50cmFuc2Zlcl9sZW4pOworCXRyYl9jb21wX2NvZGUgPSBHRVRfQ09NUF9DT0RFKGxlMzJfdG9fY3B1KGV2ZW50LT50cmFuc2Zlcl9sZW4pKTsKIAogCXhoY2lfZGVidWdfdHJiKHhoY2ksIHhoY2ktPmV2ZW50X3JpbmctPmRlcXVldWUpOwogCXN3aXRjaCAodHJiX2NvbXBfY29kZSkgewpAQCAtMTYzMiw2ICsxNjQxLDkgQEAKIAkJZWxzZQogCQkJKnN0YXR1cyA9IDA7CiAJCWJyZWFrOworCWNhc2UgQ09NUF9TVE9QX0lOVkFMOgorCWNhc2UgQ09NUF9TVE9QOgorCQlyZXR1cm4gZmluaXNoX3RkKHhoY2ksIHRkLCBldmVudF90cmIsIGV2ZW50LCBlcCwgc3RhdHVzLCBmYWxzZSk7CiAJZGVmYXVsdDoKIAkJaWYgKCF4aGNpX3JlcXVpcmVzX21hbnVhbF9oYWx0X2NsZWFudXAoeGhjaSwKIAkJCQkJZXBfY3R4LCB0cmJfY29tcF9jb2RlKSkKQEAgLTE2NDYsNyArMTY1OCw3IEBACiAJCQkJZXZlbnRfdHJiICE9IHRkLT5sYXN0X3RyYikKIAkJCXRkLT51cmItPmFjdHVhbF9sZW5ndGggPQogCQkJCXRkLT51cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgKLQkJCQktIFRSQl9MRU4oZXZlbnQtPnRyYW5zZmVyX2xlbik7CisJCQkJLSBUUkJfTEVOKGxlMzJfdG9fY3B1KGV2ZW50LT50cmFuc2Zlcl9sZW4pKTsKIAkJZWxzZQogCQkJdGQtPnVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CiAKQEAgLTE2NzYsMTUgKzE2ODgsMTIgQEAKIAkJCX0KIAkJfSBlbHNlIHsKIAkJLyogTWF5YmUgdGhlIGV2ZW50IHdhcyBmb3IgdGhlIGRhdGEgc3RhZ2U/ICovCi0JCQlpZiAodHJiX2NvbXBfY29kZSAhPSBDT01QX1NUT1BfSU5WQUwpIHsKLQkJCQkvKiBXZSBkaWRuJ3Qgc3RvcCBvbiBhIGxpbmsgVFJCIGluIHRoZSBtaWRkbGUgKi8KLQkJCQl0ZC0+dXJiLT5hY3R1YWxfbGVuZ3RoID0KLQkJCQkJdGQtPnVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtCi0JCQkJCVRSQl9MRU4oZXZlbnQtPnRyYW5zZmVyX2xlbik7Ci0JCQkJeGhjaV9kYmcoeGhjaSwgIldhaXRpbmcgZm9yIHN0YXR1cyAiCi0JCQkJCQkic3RhZ2UgZXZlbnRcbiIpOwotCQkJCXJldHVybiAwOwotCQkJfQorCQkJdGQtPnVyYi0+YWN0dWFsX2xlbmd0aCA9CisJCQkJdGQtPnVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtCisJCQkJVFJCX0xFTihsZTMyX3RvX2NwdShldmVudC0+dHJhbnNmZXJfbGVuKSk7CisJCQl4aGNpX2RiZyh4aGNpLCAiV2FpdGluZyBmb3Igc3RhdHVzICIKKwkJCQkJInN0YWdlIGV2ZW50XG4iKTsKKwkJCXJldHVybiAwOwogCQl9CiAJfQogCkBAIC0xNzA4LDggKzE3MTcsOCBAQAogCXUzMiB0cmJfY29tcF9jb2RlOwogCWJvb2wgc2tpcF90ZCA9IGZhbHNlOwogCi0JZXBfcmluZyA9IHhoY2lfZG1hX3RvX3RyYW5zZmVyX3JpbmcoZXAsIGV2ZW50LT5idWZmZXIpOwotCXRyYl9jb21wX2NvZGUgPSBHRVRfQ09NUF9DT0RFKGV2ZW50LT50cmFuc2Zlcl9sZW4pOworCWVwX3JpbmcgPSB4aGNpX2RtYV90b190cmFuc2Zlcl9yaW5nKGVwLCBsZTY0X3RvX2NwdShldmVudC0+YnVmZmVyKSk7CisJdHJiX2NvbXBfY29kZSA9IEdFVF9DT01QX0NPREUobGUzMl90b19jcHUoZXZlbnQtPnRyYW5zZmVyX2xlbikpOwogCXVyYl9wcml2ID0gdGQtPnVyYi0+aGNwcml2OwogCWlkeCA9IHVyYl9wcml2LT50ZF9jbnQ7CiAJZnJhbWUgPSAmdGQtPnVyYi0+aXNvX2ZyYW1lX2Rlc2NbaWR4XTsKQEAgLTE3NTIsMTUgKzE3NjEsMTQgQEAKIAkJZm9yIChjdXJfdHJiID0gZXBfcmluZy0+ZGVxdWV1ZSwKIAkJICAgICBjdXJfc2VnID0gZXBfcmluZy0+ZGVxX3NlZzsgY3VyX3RyYiAhPSBldmVudF90cmI7CiAJCSAgICAgbmV4dF90cmIoeGhjaSwgZXBfcmluZywgJmN1cl9zZWcsICZjdXJfdHJiKSkgewotCQkJaWYgKChjdXJfdHJiLT5nZW5lcmljLmZpZWxkWzNdICYKKwkJCWlmICgobGUzMl90b19jcHUoY3VyX3RyYi0+Z2VuZXJpYy5maWVsZFszXSkgJgogCQkJIFRSQl9UWVBFX0JJVE1BU0spICE9IFRSQl9UWVBFKFRSQl9UUl9OT09QKSAmJgotCQkJICAgIChjdXJfdHJiLT5nZW5lcmljLmZpZWxkWzNdICYKKwkJCSAgICAobGUzMl90b19jcHUoY3VyX3RyYi0+Z2VuZXJpYy5maWVsZFszXSkgJgogCQkJIFRSQl9UWVBFX0JJVE1BU0spICE9IFRSQl9UWVBFKFRSQl9MSU5LKSkKLQkJCQlsZW4gKz0KLQkJCQkgICAgVFJCX0xFTihjdXJfdHJiLT5nZW5lcmljLmZpZWxkWzJdKTsKKwkJCQlsZW4gKz0gVFJCX0xFTihsZTMyX3RvX2NwdShjdXJfdHJiLT5nZW5lcmljLmZpZWxkWzJdKSk7CiAJCX0KLQkJbGVuICs9IFRSQl9MRU4oY3VyX3RyYi0+Z2VuZXJpYy5maWVsZFsyXSkgLQotCQkJVFJCX0xFTihldmVudC0+dHJhbnNmZXJfbGVuKTsKKwkJbGVuICs9IFRSQl9MRU4obGUzMl90b19jcHUoY3VyX3RyYi0+Z2VuZXJpYy5maWVsZFsyXSkpIC0KKwkJCVRSQl9MRU4obGUzMl90b19jcHUoZXZlbnQtPnRyYW5zZmVyX2xlbikpOwogCiAJCWlmICh0cmJfY29tcF9jb2RlICE9IENPTVBfU1RPUF9JTlZBTCkgewogCQkJZnJhbWUtPmFjdHVhbF9sZW5ndGggPSBsZW47CkBAIC0xODE1LDggKzE4MjMsOCBAQAogCXN0cnVjdCB4aGNpX3NlZ21lbnQgKmN1cl9zZWc7CiAJdTMyIHRyYl9jb21wX2NvZGU7CiAKLQllcF9yaW5nID0geGhjaV9kbWFfdG9fdHJhbnNmZXJfcmluZyhlcCwgZXZlbnQtPmJ1ZmZlcik7Ci0JdHJiX2NvbXBfY29kZSA9IEdFVF9DT01QX0NPREUoZXZlbnQtPnRyYW5zZmVyX2xlbik7CisJZXBfcmluZyA9IHhoY2lfZG1hX3RvX3RyYW5zZmVyX3JpbmcoZXAsIGxlNjRfdG9fY3B1KGV2ZW50LT5idWZmZXIpKTsKKwl0cmJfY29tcF9jb2RlID0gR0VUX0NPTVBfQ09ERShsZTMyX3RvX2NwdShldmVudC0+dHJhbnNmZXJfbGVuKSk7CiAKIAlzd2l0Y2ggKHRyYl9jb21wX2NvZGUpIHsKIAljYXNlIENPTVBfU1VDQ0VTUzoKQEAgLTE4NTIsMTggKzE4NjAsMTggQEAKIAkJCSIlZCBieXRlcyB1bnRyYW5zZmVycmVkXG4iLAogCQkJdGQtPnVyYi0+ZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcywKIAkJCXRkLT51cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCi0JCQlUUkJfTEVOKGV2ZW50LT50cmFuc2Zlcl9sZW4pKTsKKwkJIFRSQl9MRU4obGUzMl90b19jcHUoZXZlbnQtPnRyYW5zZmVyX2xlbikpKTsKIAkvKiBGYXN0IHBhdGggLSB3YXMgdGhpcyB0aGUgbGFzdCBUUkIgaW4gdGhlIFREIGZvciB0aGlzIFVSQj8gKi8KIAlpZiAoZXZlbnRfdHJiID09IHRkLT5sYXN0X3RyYikgewotCQlpZiAoVFJCX0xFTihldmVudC0+dHJhbnNmZXJfbGVuKSAhPSAwKSB7CisJCWlmIChUUkJfTEVOKGxlMzJfdG9fY3B1KGV2ZW50LT50cmFuc2Zlcl9sZW4pKSAhPSAwKSB7CiAJCQl0ZC0+dXJiLT5hY3R1YWxfbGVuZ3RoID0KIAkJCQl0ZC0+dXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0KLQkJCQlUUkJfTEVOKGV2ZW50LT50cmFuc2Zlcl9sZW4pOworCQkJCVRSQl9MRU4obGUzMl90b19jcHUoZXZlbnQtPnRyYW5zZmVyX2xlbikpOwogCQkJaWYgKHRkLT51cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPAogCQkJCQl0ZC0+dXJiLT5hY3R1YWxfbGVuZ3RoKSB7CiAJCQkJeGhjaV93YXJuKHhoY2ksICJIQyBnYXZlIGJhZCBsZW5ndGggIgogCQkJCQkJIm9mICVkIGJ5dGVzIGxlZnRcbiIsCi0JCQkJCQlUUkJfTEVOKGV2ZW50LT50cmFuc2Zlcl9sZW4pKTsKKwkJCQkJICBUUkJfTEVOKGxlMzJfdG9fY3B1KGV2ZW50LT50cmFuc2Zlcl9sZW4pKSk7CiAJCQkJdGQtPnVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CiAJCQkJaWYgKHRkLT51cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX1NIT1JUX05PVF9PSykKIAkJCQkJKnN0YXR1cyA9IC1FUkVNT1RFSU87CkBAIC0xODk0LDIwICsxOTAyLDIwIEBACiAJCWZvciAoY3VyX3RyYiA9IGVwX3JpbmctPmRlcXVldWUsIGN1cl9zZWcgPSBlcF9yaW5nLT5kZXFfc2VnOwogCQkJCWN1cl90cmIgIT0gZXZlbnRfdHJiOwogCQkJCW5leHRfdHJiKHhoY2ksIGVwX3JpbmcsICZjdXJfc2VnLCAmY3VyX3RyYikpIHsKLQkJCWlmICgoY3VyX3RyYi0+Z2VuZXJpYy5maWVsZFszXSAmCisJCQlpZiAoKGxlMzJfdG9fY3B1KGN1cl90cmItPmdlbmVyaWMuZmllbGRbM10pICYKIAkJCSBUUkJfVFlQRV9CSVRNQVNLKSAhPSBUUkJfVFlQRShUUkJfVFJfTk9PUCkgJiYKLQkJCSAgICAoY3VyX3RyYi0+Z2VuZXJpYy5maWVsZFszXSAmCisJCQkgICAgKGxlMzJfdG9fY3B1KGN1cl90cmItPmdlbmVyaWMuZmllbGRbM10pICYKIAkJCSBUUkJfVFlQRV9CSVRNQVNLKSAhPSBUUkJfVFlQRShUUkJfTElOSykpCiAJCQkJdGQtPnVyYi0+YWN0dWFsX2xlbmd0aCArPQotCQkJCQlUUkJfTEVOKGN1cl90cmItPmdlbmVyaWMuZmllbGRbMl0pOworCQkJCQlUUkJfTEVOKGxlMzJfdG9fY3B1KGN1cl90cmItPmdlbmVyaWMuZmllbGRbMl0pKTsKIAkJfQogCQkvKiBJZiB0aGUgcmluZyBkaWRuJ3Qgc3RvcCBvbiBhIExpbmsgb3IgTm8tb3AgVFJCLCBhZGQKIAkJICogaW4gdGhlIGFjdHVhbCBieXRlcyB0cmFuc2ZlcnJlZCBmcm9tIHRoZSBOb3JtYWwgVFJCCiAJCSAqLwogCQlpZiAodHJiX2NvbXBfY29kZSAhPSBDT01QX1NUT1BfSU5WQUwpCiAJCQl0ZC0+dXJiLT5hY3R1YWxfbGVuZ3RoICs9Ci0JCQkJVFJCX0xFTihjdXJfdHJiLT5nZW5lcmljLmZpZWxkWzJdKSAtCi0JCQkJVFJCX0xFTihldmVudC0+dHJhbnNmZXJfbGVuKTsKKwkJCQlUUkJfTEVOKGxlMzJfdG9fY3B1KGN1cl90cmItPmdlbmVyaWMuZmllbGRbMl0pKSAtCisJCQkJVFJCX0xFTihsZTMyX3RvX2NwdShldmVudC0+dHJhbnNmZXJfbGVuKSk7CiAJfQogCiAJcmV0dXJuIGZpbmlzaF90ZCh4aGNpLCB0ZCwgZXZlbnRfdHJiLCBldmVudCwgZXAsIHN0YXR1cywgZmFsc2UpOwpAQCAtMTkzNyw3ICsxOTQ1LDcgQEAKIAl1MzIgdHJiX2NvbXBfY29kZTsKIAlpbnQgcmV0ID0gMDsKIAotCXNsb3RfaWQgPSBUUkJfVE9fU0xPVF9JRChldmVudC0+ZmxhZ3MpOworCXNsb3RfaWQgPSBUUkJfVE9fU0xPVF9JRChsZTMyX3RvX2NwdShldmVudC0+ZmxhZ3MpKTsKIAl4ZGV2ID0geGhjaS0+ZGV2c1tzbG90X2lkXTsKIAlpZiAoIXhkZXYpIHsKIAkJeGhjaV9lcnIoeGhjaSwgIkVSUk9SIFRyYW5zZmVyIGV2ZW50IHBvaW50ZWQgdG8gYmFkIHNsb3RcbiIpOwpAQCAtMTk0NSwyMCArMTk1MywyMSBAQAogCX0KIAogCS8qIEVuZHBvaW50IElEIGlzIDEgYmFzZWQsIG91ciBpbmRleCBpcyB6ZXJvIGJhc2VkICovCi0JZXBfaW5kZXggPSBUUkJfVE9fRVBfSUQoZXZlbnQtPmZsYWdzKSAtIDE7CisJZXBfaW5kZXggPSBUUkJfVE9fRVBfSUQobGUzMl90b19jcHUoZXZlbnQtPmZsYWdzKSkgLSAxOwogCXhoY2lfZGJnKHhoY2ksICIlcyAtIGVwIGluZGV4ID0gJWRcbiIsIF9fZnVuY19fLCBlcF9pbmRleCk7CiAJZXAgPSAmeGRldi0+ZXBzW2VwX2luZGV4XTsKLQllcF9yaW5nID0geGhjaV9kbWFfdG9fdHJhbnNmZXJfcmluZyhlcCwgZXZlbnQtPmJ1ZmZlcik7CisJZXBfcmluZyA9IHhoY2lfZG1hX3RvX3RyYW5zZmVyX3JpbmcoZXAsIGxlNjRfdG9fY3B1KGV2ZW50LT5idWZmZXIpKTsKIAllcF9jdHggPSB4aGNpX2dldF9lcF9jdHgoeGhjaSwgeGRldi0+b3V0X2N0eCwgZXBfaW5kZXgpOwogCWlmICghZXBfcmluZyB8fAotCQkoZXBfY3R4LT5lcF9pbmZvICYgRVBfU1RBVEVfTUFTSykgPT0gRVBfU1RBVEVfRElTQUJMRUQpIHsKKwkgICAgKGxlMzJfdG9fY3B1KGVwX2N0eC0+ZXBfaW5mbykgJiBFUF9TVEFURV9NQVNLKSA9PQorCSAgICBFUF9TVEFURV9ESVNBQkxFRCkgewogCQl4aGNpX2Vycih4aGNpLCAiRVJST1IgVHJhbnNmZXIgZXZlbnQgZm9yIGRpc2FibGVkIGVuZHBvaW50ICIKIAkJCQkib3IgaW5jb3JyZWN0IHN0cmVhbSByaW5nXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JZXZlbnRfZG1hID0gZXZlbnQtPmJ1ZmZlcjsKLQl0cmJfY29tcF9jb2RlID0gR0VUX0NPTVBfQ09ERShldmVudC0+dHJhbnNmZXJfbGVuKTsKKwlldmVudF9kbWEgPSBsZTY0X3RvX2NwdShldmVudC0+YnVmZmVyKTsKKwl0cmJfY29tcF9jb2RlID0gR0VUX0NPTVBfQ09ERShsZTMyX3RvX2NwdShldmVudC0+dHJhbnNmZXJfbGVuKSk7CiAJLyogTG9vayBmb3IgY29tbW9uIGVycm9yIGNhc2VzICovCiAJc3dpdGNoICh0cmJfY29tcF9jb2RlKSB7CiAJLyogU2tpcCBjb2RlcyB0aGF0IHJlcXVpcmUgc3BlY2lhbCBoYW5kbGluZyBkZXBlbmRpbmcgb24KQEAgLTIwMTEsMTQgKzIwMjAsMTYgQEAKIAkJaWYgKCFsaXN0X2VtcHR5KCZlcF9yaW5nLT50ZF9saXN0KSkKIAkJCXhoY2lfZGJnKHhoY2ksICJVbmRlcnJ1biBFdmVudCBmb3Igc2xvdCAlZCBlcCAlZCAiCiAJCQkJCSJzdGlsbCB3aXRoIFREcyBxdWV1ZWQ/XG4iLAotCQkJCVRSQl9UT19TTE9UX0lEKGV2ZW50LT5mbGFncyksIGVwX2luZGV4KTsKKwkJCQkgVFJCX1RPX1NMT1RfSUQobGUzMl90b19jcHUoZXZlbnQtPmZsYWdzKSksCisJCQkJIGVwX2luZGV4KTsKIAkJZ290byBjbGVhbnVwOwogCWNhc2UgQ09NUF9PVkVSUlVOOgogCQl4aGNpX2RiZyh4aGNpLCAib3ZlcnJ1biBldmVudCBvbiBlbmRwb2ludFxuIik7CiAJCWlmICghbGlzdF9lbXB0eSgmZXBfcmluZy0+dGRfbGlzdCkpCiAJCQl4aGNpX2RiZyh4aGNpLCAiT3ZlcnJ1biBFdmVudCBmb3Igc2xvdCAlZCBlcCAlZCAiCiAJCQkJCSJzdGlsbCB3aXRoIFREcyBxdWV1ZWQ/XG4iLAotCQkJCVRSQl9UT19TTE9UX0lEKGV2ZW50LT5mbGFncyksIGVwX2luZGV4KTsKKwkJCQkgVFJCX1RPX1NMT1RfSUQobGUzMl90b19jcHUoZXZlbnQtPmZsYWdzKSksCisJCQkJIGVwX2luZGV4KTsKIAkJZ290byBjbGVhbnVwOwogCWNhc2UgQ09NUF9NSVNTRURfSU5UOgogCQkvKgpAQCAtMjA0Nyw5ICsyMDU4LDExIEBACiAJCWlmIChsaXN0X2VtcHR5KCZlcF9yaW5nLT50ZF9saXN0KSkgewogCQkJeGhjaV93YXJuKHhoY2ksICJXQVJOIEV2ZW50IFRSQiBmb3Igc2xvdCAlZCBlcCAlZCAiCiAJCQkJCSJ3aXRoIG5vIFREcyBxdWV1ZWQ/XG4iLAotCQkJCSAgVFJCX1RPX1NMT1RfSUQoZXZlbnQtPmZsYWdzKSwgZXBfaW5kZXgpOworCQkJCSAgVFJCX1RPX1NMT1RfSUQobGUzMl90b19jcHUoZXZlbnQtPmZsYWdzKSksCisJCQkJICBlcF9pbmRleCk7CiAJCQl4aGNpX2RiZyh4aGNpLCAiRXZlbnQgVFJCIHdpdGggVFJCIHR5cGUgSUQgJXVcbiIsCi0JCQkgICh1bnNpZ25lZCBpbnQpIChldmVudC0+ZmxhZ3MgJiBUUkJfVFlQRV9CSVRNQVNLKT4+MTApOworCQkJCSAodW5zaWduZWQgaW50KSAobGUzMl90b19jcHUoZXZlbnQtPmZsYWdzKQorCQkJCQkJICYgVFJCX1RZUEVfQklUTUFTSyk+PjEwKTsKIAkJCXhoY2lfcHJpbnRfdHJiX29mZnNldHMoeGhjaSwgKHVuaW9uIHhoY2lfdHJiICopIGV2ZW50KTsKIAkJCWlmIChlcC0+c2tpcCkgewogCQkJCWVwLT5za2lwID0gZmFsc2U7CkBAIC0yMDkyLDcgKzIxMDUsOCBAQAogCQkgKiBjb3JyZXNwb25kaW5nIFREIGhhcyBiZWVuIGNhbmNlbGxlZC4gSnVzdCBpZ25vcmUKIAkJICogdGhlIFRELgogCQkgKi8KLQkJaWYgKChldmVudF90cmItPmdlbmVyaWMuZmllbGRbM10gJiBUUkJfVFlQRV9CSVRNQVNLKQorCQlpZiAoKGxlMzJfdG9fY3B1KGV2ZW50X3RyYi0+Z2VuZXJpYy5maWVsZFszXSkKKwkJCSAgICAgJiBUUkJfVFlQRV9CSVRNQVNLKQogCQkJCSA9PSBUUkJfVFlQRShUUkJfVFJfTk9PUCkpIHsKIAkJCXhoY2lfZGJnKHhoY2ksCiAJCQkJICJldmVudF90cmIgaXMgYSBuby1vcCBUUkIuIFNraXAgaXRcbiIpOwpAQCAtMjE1Nyw4ICsyMTcxLDEwIEBACiAvKgogICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIGFsbCBPUy1vd25lZCBldmVudHMgb24gdGhlIGV2ZW50IHJpbmcuICBJdCBtYXkgZHJvcAogICogeGhjaS0+bG9jayBiZXR3ZWVuIGV2ZW50IHByb2Nlc3NpbmcgKGUuZy4gdG8gcGFzcyB1cCBwb3J0IHN0YXR1cyBjaGFuZ2VzKS4KKyAqIFJldHVybnMgPjAgZm9yICJwb3NzaWJseSBtb3JlIGV2ZW50cyB0byBwcm9jZXNzIiAoY2FsbGVyIHNob3VsZCBjYWxsIGFnYWluKSwKKyAqIG90aGVyd2lzZSAwIGlmIGRvbmUuICBJbiBmdXR1cmUsIDwwIHJldHVybnMgc2hvdWxkIGluZGljYXRlIGVycm9yIGNvZGUuCiAgKi8KLXN0YXRpYyB2b2lkIHhoY2lfaGFuZGxlX2V2ZW50KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSkKK3N0YXRpYyBpbnQgeGhjaV9oYW5kbGVfZXZlbnQoc3RydWN0IHhoY2lfaGNkICp4aGNpKQogewogCXVuaW9uIHhoY2lfdHJiICpldmVudDsKIAlpbnQgdXBkYXRlX3B0cnMgPSAxOwpAQCAtMjE2NywyMCArMjE4MywyNSBAQAogCXhoY2lfZGJnKHhoY2ksICJJbiAlc1xuIiwgX19mdW5jX18pOwogCWlmICgheGhjaS0+ZXZlbnRfcmluZyB8fCAheGhjaS0+ZXZlbnRfcmluZy0+ZGVxdWV1ZSkgewogCQl4aGNpLT5lcnJvcl9iaXRtYXNrIHw9IDEgPDwgMTsKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAl9CiAKIAlldmVudCA9IHhoY2ktPmV2ZW50X3JpbmctPmRlcXVldWU7CiAJLyogRG9lcyB0aGUgSEMgb3IgT1Mgb3duIHRoZSBUUkI/ICovCi0JaWYgKChldmVudC0+ZXZlbnRfY21kLmZsYWdzICYgVFJCX0NZQ0xFKSAhPQotCQkJeGhjaS0+ZXZlbnRfcmluZy0+Y3ljbGVfc3RhdGUpIHsKKwlpZiAoKGxlMzJfdG9fY3B1KGV2ZW50LT5ldmVudF9jbWQuZmxhZ3MpICYgVFJCX0NZQ0xFKSAhPQorCSAgICB4aGNpLT5ldmVudF9yaW5nLT5jeWNsZV9zdGF0ZSkgewogCQl4aGNpLT5lcnJvcl9iaXRtYXNrIHw9IDEgPDwgMjsKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAl9CiAJeGhjaV9kYmcoeGhjaSwgIiVzIC0gT1Mgb3ducyBUUkJcbiIsIF9fZnVuY19fKTsKIAorCS8qCisJICogQmFycmllciBiZXR3ZWVuIHJlYWRpbmcgdGhlIFRSQl9DWUNMRSAodmFsaWQpIGZsYWcgYWJvdmUgYW5kIGFueQorCSAqIHNwZWN1bGF0aXZlIHJlYWRzIG9mIHRoZSBldmVudCdzIGZsYWdzL2RhdGEgYmVsb3cuCisJICovCisJcm1iKCk7CiAJLyogRklYTUU6IEhhbmRsZSBtb3JlIGV2ZW50IHR5cGVzLiAqLwotCXN3aXRjaCAoKGV2ZW50LT5ldmVudF9jbWQuZmxhZ3MgJiBUUkJfVFlQRV9CSVRNQVNLKSkgeworCXN3aXRjaCAoKGxlMzJfdG9fY3B1KGV2ZW50LT5ldmVudF9jbWQuZmxhZ3MpICYgVFJCX1RZUEVfQklUTUFTSykpIHsKIAljYXNlIFRSQl9UWVBFKFRSQl9DT01QTEVUSU9OKToKIAkJeGhjaV9kYmcoeGhjaSwgIiVzIC0gY2FsbGluZyBoYW5kbGVfY21kX2NvbXBsZXRpb25cbiIsIF9fZnVuY19fKTsKIAkJaGFuZGxlX2NtZF9jb21wbGV0aW9uKHhoY2ksICZldmVudC0+ZXZlbnRfY21kKTsKQEAgLTIyMDIsNyArMjIyMyw4IEBACiAJCQl1cGRhdGVfcHRycyA9IDA7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWlmICgoZXZlbnQtPmV2ZW50X2NtZC5mbGFncyAmIFRSQl9UWVBFX0JJVE1BU0spID49IFRSQl9UWVBFKDQ4KSkKKwkJaWYgKChsZTMyX3RvX2NwdShldmVudC0+ZXZlbnRfY21kLmZsYWdzKSAmIFRSQl9UWVBFX0JJVE1BU0spID49CisJCSAgICBUUkJfVFlQRSg0OCkpCiAJCQloYW5kbGVfdmVuZG9yX2V2ZW50KHhoY2ksIGV2ZW50KTsKIAkJZWxzZQogCQkJeGhjaS0+ZXJyb3JfYml0bWFzayB8PSAxIDw8IDM7CkBAIC0yMjEzLDE1ICsyMjM1LDE3IEBACiAJaWYgKHhoY2ktPnhoY19zdGF0ZSAmIFhIQ0lfU1RBVEVfRFlJTkcpIHsKIAkJeGhjaV9kYmcoeGhjaSwgInhIQ0kgaG9zdCBkeWluZywgcmV0dXJuaW5nIGZyb20gIgogCQkJCSJldmVudCBoYW5kbGVyLlxuIik7Ci0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKHVwZGF0ZV9wdHJzKQogCQkvKiBVcGRhdGUgU1cgZXZlbnQgcmluZyBkZXF1ZXVlIHBvaW50ZXIgKi8KIAkJaW5jX2RlcSh4aGNpLCB4aGNpLT5ldmVudF9yaW5nLCB0cnVlKTsKIAotCS8qIEFyZSB0aGVyZSBtb3JlIGl0ZW1zIG9uIHRoZSBldmVudCByaW5nPyAqLwotCXhoY2lfaGFuZGxlX2V2ZW50KHhoY2kpOworCS8qIEFyZSB0aGVyZSBtb3JlIGl0ZW1zIG9uIHRoZSBldmVudCByaW5nPyAgQ2FsbGVyIHdpbGwgY2FsbCB1cyBhZ2FpbiB0bworCSAqIGNoZWNrLgorCSAqLworCXJldHVybiAxOwogfQogCiAvKgpAQCAtMjI1MiwxMiArMjI3NiwxMiBAQAogCXhoY2lfZGJnKHhoY2ksICJvcCByZWcgc3RhdHVzID0gJTA4eFxuIiwgc3RhdHVzKTsKIAl4aGNpX2RiZyh4aGNpLCAiRXZlbnQgcmluZyBkZXF1ZXVlIHB0cjpcbiIpOwogCXhoY2lfZGJnKHhoY2ksICJAJWxseCAlMDh4ICUwOHggJTA4eCAlMDh4XG4iLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykKLQkJCXhoY2lfdHJiX3ZpcnRfdG9fZG1hKHhoY2ktPmV2ZW50X3JpbmctPmRlcV9zZWcsIHRyYiksCi0JCQlsb3dlcl8zMl9iaXRzKHRyYi0+bGluay5zZWdtZW50X3B0ciksCi0JCQl1cHBlcl8zMl9iaXRzKHRyYi0+bGluay5zZWdtZW50X3B0ciksCi0JCQkodW5zaWduZWQgaW50KSB0cmItPmxpbmsuaW50cl90YXJnZXQsCi0JCQkodW5zaWduZWQgaW50KSB0cmItPmxpbmsuY29udHJvbCk7CisJCSAodW5zaWduZWQgbG9uZyBsb25nKQorCQkgeGhjaV90cmJfdmlydF90b19kbWEoeGhjaS0+ZXZlbnRfcmluZy0+ZGVxX3NlZywgdHJiKSwKKwkJIGxvd2VyXzMyX2JpdHMobGU2NF90b19jcHUodHJiLT5saW5rLnNlZ21lbnRfcHRyKSksCisJCSB1cHBlcl8zMl9iaXRzKGxlNjRfdG9fY3B1KHRyYi0+bGluay5zZWdtZW50X3B0cikpLAorCQkgKHVuc2lnbmVkIGludCkgbGUzMl90b19jcHUodHJiLT5saW5rLmludHJfdGFyZ2V0KSwKKwkJICh1bnNpZ25lZCBpbnQpIGxlMzJfdG9fY3B1KHRyYi0+bGluay5jb250cm9sKSk7CiAKIAlpZiAoc3RhdHVzICYgU1RTX0ZBVEFMKSB7CiAJCXhoY2lfd2Fybih4aGNpLCAiV0FSTklORzogSG9zdCBTeXN0ZW0gRXJyb3JcbiIpOwpAQCAtMjMwMyw3ICsyMzI3LDcgQEAKIAkvKiBGSVhNRSB0aGlzIHNob3VsZCBiZSBhIGRlbGF5ZWQgc2VydmljZSByb3V0aW5lCiAJICogdGhhdCBjbGVhcnMgdGhlIEVIQi4KIAkgKi8KLQl4aGNpX2hhbmRsZV9ldmVudCh4aGNpKTsKKwl3aGlsZSAoeGhjaV9oYW5kbGVfZXZlbnQoeGhjaSkgPiAwKSB7fQogCiAJdGVtcF82NCA9IHhoY2lfcmVhZF82NCh4aGNpLCAmeGhjaS0+aXJfc2V0LT5lcnN0X2RlcXVldWUpOwogCS8qIElmIG5lY2Vzc2FyeSwgdXBkYXRlIHRoZSBIVydzIHZlcnNpb24gb2YgdGhlIGV2ZW50IHJpbmcgZGVxIHB0ci4gKi8KQEAgLTIzNTgsMTAgKzIzODIsMTAgQEAKIAlzdHJ1Y3QgeGhjaV9nZW5lcmljX3RyYiAqdHJiOwogCiAJdHJiID0gJnJpbmctPmVucXVldWUtPmdlbmVyaWM7Ci0JdHJiLT5maWVsZFswXSA9IGZpZWxkMTsKLQl0cmItPmZpZWxkWzFdID0gZmllbGQyOwotCXRyYi0+ZmllbGRbMl0gPSBmaWVsZDM7Ci0JdHJiLT5maWVsZFszXSA9IGZpZWxkNDsKKwl0cmItPmZpZWxkWzBdID0gY3B1X3RvX2xlMzIoZmllbGQxKTsKKwl0cmItPmZpZWxkWzFdID0gY3B1X3RvX2xlMzIoZmllbGQyKTsKKwl0cmItPmZpZWxkWzJdID0gY3B1X3RvX2xlMzIoZmllbGQzKTsKKwl0cmItPmZpZWxkWzNdID0gY3B1X3RvX2xlMzIoZmllbGQ0KTsKIAlpbmNfZW5xKHhoY2ksIHJpbmcsIGNvbnN1bWVyLCBtb3JlX3RyYnNfY29taW5nKTsKIH0KIApAQCAtMjQxNCwxNyArMjQzOCwxNiBAQAogCQluZXh0ID0gcmluZy0+ZW5xdWV1ZTsKIAogCQl3aGlsZSAobGFzdF90cmIoeGhjaSwgcmluZywgcmluZy0+ZW5xX3NlZywgbmV4dCkpIHsKLQogCQkJLyogSWYgd2UncmUgbm90IGRlYWxpbmcgd2l0aCAwLjk1IGhhcmR3YXJlLAogCQkJICogY2xlYXIgdGhlIGNoYWluIGJpdC4KIAkJCSAqLwogCQkJaWYgKCF4aGNpX2xpbmtfdHJiX3F1aXJrKHhoY2kpKQotCQkJCW5leHQtPmxpbmsuY29udHJvbCAmPSB+VFJCX0NIQUlOOworCQkJCW5leHQtPmxpbmsuY29udHJvbCAmPSBjcHVfdG9fbGUzMih+VFJCX0NIQUlOKTsKIAkJCWVsc2UKLQkJCQluZXh0LT5saW5rLmNvbnRyb2wgfD0gVFJCX0NIQUlOOworCQkJCW5leHQtPmxpbmsuY29udHJvbCB8PSBjcHVfdG9fbGUzMihUUkJfQ0hBSU4pOwogCiAJCQl3bWIoKTsKLQkJCW5leHQtPmxpbmsuY29udHJvbCBePSAodTMyKSBUUkJfQ1lDTEU7CisJCQluZXh0LT5saW5rLmNvbnRyb2wgXj0gY3B1X3RvX2xlMzIoKHUzMikgVFJCX0NZQ0xFKTsKIAogCQkJLyogVG9nZ2xlIHRoZSBjeWNsZSBiaXQgYWZ0ZXIgdGhlIGxhc3QgcmluZyBzZWdtZW50LiAqLwogCQkJaWYgKGxhc3RfdHJiX29uX2xhc3Rfc2VnKHhoY2ksIHJpbmcsIHJpbmctPmVucV9zZWcsIG5leHQpKSB7CkBAIC0yNDY3LDggKzI0OTAsOCBAQAogCX0KIAogCXJldCA9IHByZXBhcmVfcmluZyh4aGNpLCBlcF9yaW5nLAotCQkJZXBfY3R4LT5lcF9pbmZvICYgRVBfU1RBVEVfTUFTSywKLQkJCW51bV90cmJzLCBtZW1fZmxhZ3MpOworCQkJICAgbGUzMl90b19jcHUoZXBfY3R4LT5lcF9pbmZvKSAmIEVQX1NUQVRFX01BU0ssCisJCQkgICBudW1fdHJicywgbWVtX2ZsYWdzKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC0yNTcwLDkgKzI1OTMsOSBAQAogCSAqLwogCXdtYigpOwogCWlmIChzdGFydF9jeWNsZSkKLQkJc3RhcnRfdHJiLT5maWVsZFszXSB8PSBzdGFydF9jeWNsZTsKKwkJc3RhcnRfdHJiLT5maWVsZFszXSB8PSBjcHVfdG9fbGUzMihzdGFydF9jeWNsZSk7CiAJZWxzZQotCQlzdGFydF90cmItPmZpZWxkWzNdICY9IH4weDE7CisJCXN0YXJ0X3RyYi0+ZmllbGRbM10gJj0gY3B1X3RvX2xlMzIoflRSQl9DWUNMRSk7CiAJeGhjaV9yaW5nX2VwX2Rvb3JiZWxsKHhoY2ksIHNsb3RfaWQsIGVwX2luZGV4LCBzdHJlYW1faWQpOwogfQogCkBAIC0yNTkwLDcgKzI2MTMsNyBAQAogCWludCB4aGNpX2ludGVydmFsOwogCWludCBlcF9pbnRlcnZhbDsKIAotCXhoY2lfaW50ZXJ2YWwgPSBFUF9JTlRFUlZBTF9UT19VRlJBTUVTKGVwX2N0eC0+ZXBfaW5mbyk7CisJeGhjaV9pbnRlcnZhbCA9IEVQX0lOVEVSVkFMX1RPX1VGUkFNRVMobGUzMl90b19jcHUoZXBfY3R4LT5lcF9pbmZvKSk7CiAJZXBfaW50ZXJ2YWwgPSB1cmItPmludGVydmFsOwogCS8qIENvbnZlcnQgdG8gbWljcm9mcmFtZXMgKi8KIAlpZiAodXJiLT5kZXYtPnNwZWVkID09IFVTQl9TUEVFRF9MT1cgfHwKQEAgLTI2MzIsNiArMjY1NSwzNSBAQAogCQlyZXR1cm4gKHJlbWFpbmRlciA+PiAxMCkgPDwgMTc7CiB9CiAKKy8qCisgKiBGb3IgeEhDSSAxLjAgaG9zdCBjb250cm9sbGVycywgVEQgc2l6ZSBpcyB0aGUgbnVtYmVyIG9mIHBhY2tldHMgcmVtYWluaW5nIGluCisgKiB0aGUgVEQgKCpub3QqIGluY2x1ZGluZyB0aGlzIFRSQikuCisgKgorICogVG90YWwgVEQgcGFja2V0IGNvdW50ID0gdG90YWxfcGFja2V0X2NvdW50ID0KKyAqICAgICByb3VuZHVwKFREIHNpemUgaW4gYnl0ZXMgLyB3TWF4UGFja2V0U2l6ZSkKKyAqCisgKiBQYWNrZXRzIHRyYW5zZmVycmVkIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhpcyBUUkIgPSBwYWNrZXRzX3RyYW5zZmVycmVkID0KKyAqICAgICByb3VuZGRvd24odG90YWwgYnl0ZXMgdHJhbnNmZXJyZWQgaW5jbHVkaW5nIHRoaXMgVFJCIC8gd01heFBhY2tldFNpemUpCisgKgorICogVEQgc2l6ZSA9IHRvdGFsX3BhY2tldF9jb3VudCAtIHBhY2tldHNfdHJhbnNmZXJyZWQKKyAqCisgKiBJdCBtdXN0IGZpdCBpbiBiaXRzIDIxOjE3LCBzbyBpdCBjYW4ndCBiZSBiaWdnZXIgdGhhbiAzMS4KKyAqLworCitzdGF0aWMgdTMyIHhoY2lfdjFfMF90ZF9yZW1haW5kZXIoaW50IHJ1bm5pbmdfdG90YWwsIGludCB0cmJfYnVmZl9sZW4sCisJCXVuc2lnbmVkIGludCB0b3RhbF9wYWNrZXRfY291bnQsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpbnQgcGFja2V0c190cmFuc2ZlcnJlZDsKKworCS8qIEFsbCB0aGUgVFJCIHF1ZXVlaW5nIGZ1bmN0aW9ucyBkb24ndCBjb3VudCB0aGUgY3VycmVudCBUUkIgaW4KKwkgKiBydW5uaW5nX3RvdGFsLgorCSAqLworCXBhY2tldHNfdHJhbnNmZXJyZWQgPSAocnVubmluZ190b3RhbCArIHRyYl9idWZmX2xlbikgLworCQlsZTE2X3RvX2NwdSh1cmItPmVwLT5kZXNjLndNYXhQYWNrZXRTaXplKTsKKworCXJldHVybiB4aGNpX3RkX3JlbWFpbmRlcih0b3RhbF9wYWNrZXRfY291bnQgLSBwYWNrZXRzX3RyYW5zZmVycmVkKTsKK30KKwogc3RhdGljIGludCBxdWV1ZV9idWxrX3NnX3R4KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgZ2ZwX3QgbWVtX2ZsYWdzLAogCQlzdHJ1Y3QgdXJiICp1cmIsIGludCBzbG90X2lkLCB1bnNpZ25lZCBpbnQgZXBfaW5kZXgpCiB7CkBAIC0yNjQyLDYgKzI2OTQsNyBAQAogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CiAJaW50IG51bV9zZ3M7CiAJaW50IHRyYl9idWZmX2xlbiwgdGhpc19zZ19sZW4sIHJ1bm5pbmdfdG90YWw7CisJdW5zaWduZWQgaW50IHRvdGFsX3BhY2tldF9jb3VudDsKIAlib29sIGZpcnN0X3RyYjsKIAl1NjQgYWRkcjsKIAlib29sIG1vcmVfdHJic19jb21pbmc7CkBAIC0yNjU1LDYgKzI3MDgsOCBAQAogCiAJbnVtX3RyYnMgPSBjb3VudF9zZ190cmJzX25lZWRlZCh4aGNpLCB1cmIpOwogCW51bV9zZ3MgPSB1cmItPm51bV9zZ3M7CisJdG90YWxfcGFja2V0X2NvdW50ID0gcm91bmR1cCh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQlsZTE2X3RvX2NwdSh1cmItPmVwLT5kZXNjLndNYXhQYWNrZXRTaXplKSk7CiAKIAl0cmJfYnVmZl9sZW4gPSBwcmVwYXJlX3RyYW5zZmVyKHhoY2ksIHhoY2ktPmRldnNbc2xvdF9pZF0sCiAJCQllcF9pbmRleCwgdXJiLT5zdHJlYW1faWQsCkBAIC0yNzE4LDYgKzI3NzMsMTEgQEAKIAkJCXRkLT5sYXN0X3RyYiA9IGVwX3JpbmctPmVucXVldWU7CiAJCQlmaWVsZCB8PSBUUkJfSU9DOwogCQl9CisKKwkJLyogT25seSBzZXQgaW50ZXJydXB0IG9uIHNob3J0IHBhY2tldCBmb3IgSU4gZW5kcG9pbnRzICovCisJCWlmICh1c2JfdXJiX2Rpcl9pbih1cmIpKQorCQkJZmllbGQgfD0gVFJCX0lTUDsKKwogCQl4aGNpX2RiZyh4aGNpLCAiIHNnIGVudHJ5OiBkbWEgPSAlI3gsIGxlbiA9ICUjeCAoJWQpLCAiCiAJCQkJIjY0S0IgYm91bmRhcnkgYXQgJSN4LCBlbmQgZG1hID0gJSN4XG4iLAogCQkJCSh1bnNpZ25lZCBpbnQpIGFkZHIsIHRyYl9idWZmX2xlbiwgdHJiX2J1ZmZfbGVuLApAQCAtMjczMCwxMSArMjc5MCwyMCBAQAogCQkJCQkodW5zaWduZWQgaW50KSAoYWRkciArIFRSQl9NQVhfQlVGRl9TSVpFKSAmIH4oVFJCX01BWF9CVUZGX1NJWkUgLSAxKSwKIAkJCQkJKHVuc2lnbmVkIGludCkgYWRkciArIHRyYl9idWZmX2xlbik7CiAJCX0KLQkJcmVtYWluZGVyID0geGhjaV90ZF9yZW1haW5kZXIodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0KLQkJCQlydW5uaW5nX3RvdGFsKSA7CisKKwkJLyogU2V0IHRoZSBUUkIgbGVuZ3RoLCBURCBzaXplLCBhbmQgaW50ZXJydXB0ZXIgZmllbGRzLiAqLworCQlpZiAoeGhjaS0+aGNpX3ZlcnNpb24gPCAweDEwMCkgeworCQkJcmVtYWluZGVyID0geGhjaV90ZF9yZW1haW5kZXIoCisJCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtCisJCQkJCXJ1bm5pbmdfdG90YWwpOworCQl9IGVsc2UgeworCQkJcmVtYWluZGVyID0geGhjaV92MV8wX3RkX3JlbWFpbmRlcihydW5uaW5nX3RvdGFsLAorCQkJCQl0cmJfYnVmZl9sZW4sIHRvdGFsX3BhY2tldF9jb3VudCwgdXJiKTsKKwkJfQogCQlsZW5ndGhfZmllbGQgPSBUUkJfTEVOKHRyYl9idWZmX2xlbikgfAogCQkJcmVtYWluZGVyIHwKIAkJCVRSQl9JTlRSX1RBUkdFVCgwKTsKKwogCQlpZiAobnVtX3RyYnMgPiAxKQogCQkJbW9yZV90cmJzX2NvbWluZyA9IHRydWU7CiAJCWVsc2UKQEAgLTI3NDMsMTIgKzI4MTIsNyBAQAogCQkJCWxvd2VyXzMyX2JpdHMoYWRkciksCiAJCQkJdXBwZXJfMzJfYml0cyhhZGRyKSwKIAkJCQlsZW5ndGhfZmllbGQsCi0JCQkJLyogV2UgYWx3YXlzIHdhbnQgdG8ga25vdyBpZiB0aGUgVFJCIHdhcyBzaG9ydCwKLQkJCQkgKiBvciB3ZSB3b24ndCBnZXQgYW4gZXZlbnQgd2hlbiBpdCBjb21wbGV0ZXMuCi0JCQkJICogKFVubGVzcyB3ZSB1c2UgZXZlbnQgZGF0YSBUUkJzLCB3aGljaCBhcmUgYQotCQkJCSAqIHdhc3RlIG9mIHNwYWNlIGFuZCBIQyByZXNvdXJjZXMuKQotCQkJCSAqLwotCQkJCWZpZWxkIHwgVFJCX0lTUCB8IFRSQl9UWVBFKFRSQl9OT1JNQUwpKTsKKwkJCQlmaWVsZCB8IFRSQl9UWVBFKFRSQl9OT1JNQUwpKTsKIAkJLS1udW1fdHJiczsKIAkJcnVubmluZ190b3RhbCArPSB0cmJfYnVmZl9sZW47CiAKQEAgLTI3OTYsNiArMjg2MCw3IEBACiAJdTMyIGZpZWxkLCBsZW5ndGhfZmllbGQ7CiAKIAlpbnQgcnVubmluZ190b3RhbCwgdHJiX2J1ZmZfbGVuLCByZXQ7CisJdW5zaWduZWQgaW50IHRvdGFsX3BhY2tldF9jb3VudDsKIAl1NjQgYWRkcjsKIAogCWlmICh1cmItPm51bV9zZ3MpCkBAIC0yODUwLDYgKzI5MTUsOCBAQAogCXN0YXJ0X2N5Y2xlID0gZXBfcmluZy0+Y3ljbGVfc3RhdGU7CiAKIAlydW5uaW5nX3RvdGFsID0gMDsKKwl0b3RhbF9wYWNrZXRfY291bnQgPSByb3VuZHVwKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCWxlMTZfdG9fY3B1KHVyYi0+ZXAtPmRlc2Mud01heFBhY2tldFNpemUpKTsKIAkvKiBIb3cgbXVjaCBkYXRhIGlzIGluIHRoZSBmaXJzdCBUUkI/ICovCiAJYWRkciA9ICh1NjQpIHVyYi0+dHJhbnNmZXJfZG1hOwogCXRyYl9idWZmX2xlbiA9IFRSQl9NQVhfQlVGRl9TSVpFIC0KQEAgLTI4ODIsMTEgKzI5NDksMjQgQEAKIAkJCXRkLT5sYXN0X3RyYiA9IGVwX3JpbmctPmVucXVldWU7CiAJCQlmaWVsZCB8PSBUUkJfSU9DOwogCQl9Ci0JCXJlbWFpbmRlciA9IHhoY2lfdGRfcmVtYWluZGVyKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtCi0JCQkJcnVubmluZ190b3RhbCk7CisKKwkJLyogT25seSBzZXQgaW50ZXJydXB0IG9uIHNob3J0IHBhY2tldCBmb3IgSU4gZW5kcG9pbnRzICovCisJCWlmICh1c2JfdXJiX2Rpcl9pbih1cmIpKQorCQkJZmllbGQgfD0gVFJCX0lTUDsKKworCQkvKiBTZXQgdGhlIFRSQiBsZW5ndGgsIFREIHNpemUsIGFuZCBpbnRlcnJ1cHRlciBmaWVsZHMuICovCisJCWlmICh4aGNpLT5oY2lfdmVyc2lvbiA8IDB4MTAwKSB7CisJCQlyZW1haW5kZXIgPSB4aGNpX3RkX3JlbWFpbmRlcigKKwkJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0KKwkJCQkJcnVubmluZ190b3RhbCk7CisJCX0gZWxzZSB7CisJCQlyZW1haW5kZXIgPSB4aGNpX3YxXzBfdGRfcmVtYWluZGVyKHJ1bm5pbmdfdG90YWwsCisJCQkJCXRyYl9idWZmX2xlbiwgdG90YWxfcGFja2V0X2NvdW50LCB1cmIpOworCQl9CiAJCWxlbmd0aF9maWVsZCA9IFRSQl9MRU4odHJiX2J1ZmZfbGVuKSB8CiAJCQlyZW1haW5kZXIgfAogCQkJVFJCX0lOVFJfVEFSR0VUKDApOworCiAJCWlmIChudW1fdHJicyA+IDEpCiAJCQltb3JlX3RyYnNfY29taW5nID0gdHJ1ZTsKIAkJZWxzZQpAQCAtMjg5NSwxMiArMjk3NSw3IEBACiAJCQkJbG93ZXJfMzJfYml0cyhhZGRyKSwKIAkJCQl1cHBlcl8zMl9iaXRzKGFkZHIpLAogCQkJCWxlbmd0aF9maWVsZCwKLQkJCQkvKiBXZSBhbHdheXMgd2FudCB0byBrbm93IGlmIHRoZSBUUkIgd2FzIHNob3J0LAotCQkJCSAqIG9yIHdlIHdvbid0IGdldCBhbiBldmVudCB3aGVuIGl0IGNvbXBsZXRlcy4KLQkJCQkgKiAoVW5sZXNzIHdlIHVzZSBldmVudCBkYXRhIFRSQnMsIHdoaWNoIGFyZSBhCi0JCQkJICogd2FzdGUgb2Ygc3BhY2UgYW5kIEhDIHJlc291cmNlcy4pCi0JCQkJICovCi0JCQkJZmllbGQgfCBUUkJfSVNQIHwgVFJCX1RZUEUoVFJCX05PUk1BTCkpOworCQkJCWZpZWxkIHwgVFJCX1RZUEUoVFJCX05PUk1BTCkpOwogCQktLW51bV90cmJzOwogCQlydW5uaW5nX3RvdGFsICs9IHRyYl9idWZmX2xlbjsKIApAQCAtMjk3OCwxNiArMzA1MywzMSBAQAogCWZpZWxkIHw9IFRSQl9JRFQgfCBUUkJfVFlQRShUUkJfU0VUVVApOwogCWlmIChzdGFydF9jeWNsZSA9PSAwKQogCQlmaWVsZCB8PSAweDE7CisKKwkvKiB4SENJIDEuMCA2LjQuMS4yLjE6IFRyYW5zZmVyIFR5cGUgZmllbGQgKi8KKwlpZiAoeGhjaS0+aGNpX3ZlcnNpb24gPT0gMHgxMDApIHsKKwkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA+IDApIHsKKwkJCWlmIChzZXR1cC0+YlJlcXVlc3RUeXBlICYgVVNCX0RJUl9JTikKKwkJCQlmaWVsZCB8PSBUUkJfVFhfVFlQRShUUkJfREFUQV9JTik7CisJCQllbHNlCisJCQkJZmllbGQgfD0gVFJCX1RYX1RZUEUoVFJCX0RBVEFfT1VUKTsKKwkJfQorCX0KKwogCXF1ZXVlX3RyYih4aGNpLCBlcF9yaW5nLCBmYWxzZSwgdHJ1ZSwKLQkJCS8qIEZJWE1FIGVuZGlhbm5lc3MgaXMgcHJvYmFibHkgZ29pbmcgdG8gYml0ZSBteSBhc3MgaGVyZS4gKi8KLQkJCXNldHVwLT5iUmVxdWVzdFR5cGUgfCBzZXR1cC0+YlJlcXVlc3QgPDwgOCB8IHNldHVwLT53VmFsdWUgPDwgMTYsCi0JCQlzZXR1cC0+d0luZGV4IHwgc2V0dXAtPndMZW5ndGggPDwgMTYsCi0JCQlUUkJfTEVOKDgpIHwgVFJCX0lOVFJfVEFSR0VUKDApLAotCQkJLyogSW1tZWRpYXRlIGRhdGEgaW4gcG9pbnRlciAqLwotCQkJZmllbGQpOworCQkgIHNldHVwLT5iUmVxdWVzdFR5cGUgfCBzZXR1cC0+YlJlcXVlc3QgPDwgOCB8IGxlMTZfdG9fY3B1KHNldHVwLT53VmFsdWUpIDw8IDE2LAorCQkgIGxlMTZfdG9fY3B1KHNldHVwLT53SW5kZXgpIHwgbGUxNl90b19jcHUoc2V0dXAtPndMZW5ndGgpIDw8IDE2LAorCQkgIFRSQl9MRU4oOCkgfCBUUkJfSU5UUl9UQVJHRVQoMCksCisJCSAgLyogSW1tZWRpYXRlIGRhdGEgaW4gcG9pbnRlciAqLworCQkgIGZpZWxkKTsKIAogCS8qIElmIHRoZXJlJ3MgZGF0YSwgcXVldWUgZGF0YSBUUkJzICovCi0JZmllbGQgPSAwOworCS8qIE9ubHkgc2V0IGludGVycnVwdCBvbiBzaG9ydCBwYWNrZXQgZm9yIElOIGVuZHBvaW50cyAqLworCWlmICh1c2JfdXJiX2Rpcl9pbih1cmIpKQorCQlmaWVsZCA9IFRSQl9JU1AgfCBUUkJfVFlQRShUUkJfREFUQSk7CisJZWxzZQorCQlmaWVsZCA9IFRSQl9UWVBFKFRSQl9EQVRBKTsKKwogCWxlbmd0aF9maWVsZCA9IFRSQl9MRU4odXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKSB8CiAJCXhoY2lfdGRfcmVtYWluZGVyKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkgfAogCQlUUkJfSU5UUl9UQVJHRVQoMCk7CkBAIC0yOTk4LDggKzMwODgsNyBAQAogCQkJCWxvd2VyXzMyX2JpdHModXJiLT50cmFuc2Zlcl9kbWEpLAogCQkJCXVwcGVyXzMyX2JpdHModXJiLT50cmFuc2Zlcl9kbWEpLAogCQkJCWxlbmd0aF9maWVsZCwKLQkJCQkvKiBFdmVudCBvbiBzaG9ydCB0eCAqLwotCQkJCWZpZWxkIHwgVFJCX0lTUCB8IFRSQl9UWVBFKFRSQl9EQVRBKSB8IGVwX3JpbmctPmN5Y2xlX3N0YXRlKTsKKwkJCQlmaWVsZCB8IGVwX3JpbmctPmN5Y2xlX3N0YXRlKTsKIAl9CiAKIAkvKiBTYXZlIHRoZSBETUEgYWRkcmVzcyBvZiB0aGUgbGFzdCBUUkIgaW4gdGhlIFREICovCkBAIC0zMDQ1LDYgKzMxMzQsNjMgQEAKIAlyZXR1cm4gbnVtX3RyYnM7CiB9CiAKKy8qCisgKiBUaGUgdHJhbnNmZXIgYnVyc3QgY291bnQgZmllbGQgb2YgdGhlIGlzb2Nocm9ub3VzIFRSQiBkZWZpbmVzIHRoZSBudW1iZXIgb2YKKyAqIGJ1cnN0cyB0aGF0IGFyZSByZXF1aXJlZCB0byBtb3ZlIGFsbCBwYWNrZXRzIGluIHRoaXMgVEQuICBPbmx5IFN1cGVyU3BlZWQKKyAqIGRldmljZXMgY2FuIGJ1cnN0IHVwIHRvIGJNYXhCdXJzdCBudW1iZXIgb2YgcGFja2V0cyBwZXIgc2VydmljZSBpbnRlcnZhbC4KKyAqIFRoaXMgZmllbGQgaXMgemVybyBiYXNlZCwgbWVhbmluZyBhIHZhbHVlIG9mIHplcm8gaW4gdGhlIGZpZWxkIG1lYW5zIG9uZQorICogYnVyc3QuICBCYXNpY2FsbHksIGZvciBldmVyeXRoaW5nIGJ1dCBTdXBlclNwZWVkIGRldmljZXMsIHRoaXMgZmllbGQgd2lsbCBiZQorICogemVyby4gIE9ubHkgeEhDSSAxLjAgaG9zdCBjb250cm9sbGVycyBzdXBwb3J0IHRoaXMgZmllbGQuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgeGhjaV9nZXRfYnVyc3RfY291bnQoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorCQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJc3RydWN0IHVyYiAqdXJiLCB1bnNpZ25lZCBpbnQgdG90YWxfcGFja2V0X2NvdW50KQoreworCXVuc2lnbmVkIGludCBtYXhfYnVyc3Q7CisKKwlpZiAoeGhjaS0+aGNpX3ZlcnNpb24gPCAweDEwMCB8fCB1ZGV2LT5zcGVlZCAhPSBVU0JfU1BFRURfU1VQRVIpCisJCXJldHVybiAwOworCisJbWF4X2J1cnN0ID0gdXJiLT5lcC0+c3NfZXBfY29tcC5iTWF4QnVyc3Q7CisJcmV0dXJuIHJvdW5kdXAodG90YWxfcGFja2V0X2NvdW50LCBtYXhfYnVyc3QgKyAxKSAtIDE7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFja2V0cyBpbiB0aGUgbGFzdCAiYnVyc3QiIG9mIHBhY2tldHMuICBUaGlzIGZpZWxkIGlzCisgKiB2YWxpZCBmb3IgYWxsIHNwZWVkcyBvZiBkZXZpY2VzLiAgVVNCIDIuMCBkZXZpY2VzIGNhbiBvbmx5IGRvIG9uZSAiYnVyc3QiLCBzbworICogdGhlIGxhc3QgYnVyc3QgcGFja2V0IGNvdW50IGlzIGVxdWFsIHRvIHRoZSB0b3RhbCBudW1iZXIgb2YgcGFja2V0cyBpbiB0aGUKKyAqIFRELiAgU3VwZXJTcGVlZCBlbmRwb2ludHMgY2FuIGhhdmUgdXAgdG8gMyBidXJzdHMuICBBbGwgYnV0IHRoZSBsYXN0IGJ1cnN0CisgKiBtdXN0IGNvbnRhaW4gKGJNYXhCdXJzdCArIDEpIG51bWJlciBvZiBwYWNrZXRzLCBidXQgdGhlIGxhc3QgYnVyc3QgY2FuCisgKiBjb250YWluIDEgdG8gKGJNYXhCdXJzdCArIDEpIHBhY2tldHMuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgeGhjaV9nZXRfbGFzdF9idXJzdF9wYWNrZXRfY291bnQoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorCQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJc3RydWN0IHVyYiAqdXJiLCB1bnNpZ25lZCBpbnQgdG90YWxfcGFja2V0X2NvdW50KQoreworCXVuc2lnbmVkIGludCBtYXhfYnVyc3Q7CisJdW5zaWduZWQgaW50IHJlc2lkdWU7CisKKwlpZiAoeGhjaS0+aGNpX3ZlcnNpb24gPCAweDEwMCkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKHVkZXYtPnNwZWVkKSB7CisJY2FzZSBVU0JfU1BFRURfU1VQRVI6CisJCS8qIGJNYXhCdXJzdCBpcyB6ZXJvIGJhc2VkOiAwIG1lYW5zIDEgcGFja2V0IHBlciBidXJzdCAqLworCQltYXhfYnVyc3QgPSB1cmItPmVwLT5zc19lcF9jb21wLmJNYXhCdXJzdDsKKwkJcmVzaWR1ZSA9IHRvdGFsX3BhY2tldF9jb3VudCAlIChtYXhfYnVyc3QgKyAxKTsKKwkJLyogSWYgcmVzaWR1ZSBpcyB6ZXJvLCB0aGUgbGFzdCBidXJzdCBjb250YWlucyAobWF4X2J1cnN0ICsgMSkKKwkJICogbnVtYmVyIG9mIHBhY2tldHMsIGJ1dCB0aGUgVExCUEMgZmllbGQgaXMgemVyby1iYXNlZC4KKwkJICovCisJCWlmIChyZXNpZHVlID09IDApCisJCQlyZXR1cm4gbWF4X2J1cnN0OworCQlyZXR1cm4gcmVzaWR1ZSAtIDE7CisJZGVmYXVsdDoKKwkJaWYgKHRvdGFsX3BhY2tldF9jb3VudCA9PSAwKQorCQkJcmV0dXJuIDA7CisJCXJldHVybiB0b3RhbF9wYWNrZXRfY291bnQgLSAxOworCX0KK30KKwogLyogVGhpcyBpcyBmb3IgaXNvYyB0cmFuc2ZlciAqLwogc3RhdGljIGludCB4aGNpX3F1ZXVlX2lzb2NfdHgoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBnZnBfdCBtZW1fZmxhZ3MsCiAJCXN0cnVjdCB1cmIgKnVyYiwgaW50IHNsb3RfaWQsIHVuc2lnbmVkIGludCBlcF9pbmRleCkKQEAgLTMwODUsMTIgKzMyMzEsMjIgQEAKIAogCS8qIFF1ZXVlIHRoZSBmaXJzdCBUUkIsIGV2ZW4gaWYgaXQncyB6ZXJvLWxlbmd0aCAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1fdGRzOyBpKyspIHsKLQkJZmlyc3RfdHJiID0gdHJ1ZTsKKwkJdW5zaWduZWQgaW50IHRvdGFsX3BhY2tldF9jb3VudDsKKwkJdW5zaWduZWQgaW50IGJ1cnN0X2NvdW50OworCQl1bnNpZ25lZCBpbnQgcmVzaWR1ZTsKIAorCQlmaXJzdF90cmIgPSB0cnVlOwogCQlydW5uaW5nX3RvdGFsID0gMDsKIAkJYWRkciA9IHN0YXJ0X2FkZHIgKyB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldDsKIAkJdGRfbGVuID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGg7CiAJCXRkX3JlbWFpbl9sZW4gPSB0ZF9sZW47CisJCS8qIEZJWE1FOiBJZ25vcmluZyB6ZXJvLWxlbmd0aCBwYWNrZXRzLCBjYW4gdGhvc2UgaGFwcGVuPyAqLworCQl0b3RhbF9wYWNrZXRfY291bnQgPSByb3VuZHVwKHRkX2xlbiwKKwkJCQlsZTE2X3RvX2NwdSh1cmItPmVwLT5kZXNjLndNYXhQYWNrZXRTaXplKSk7CisJCWJ1cnN0X2NvdW50ID0geGhjaV9nZXRfYnVyc3RfY291bnQoeGhjaSwgdXJiLT5kZXYsIHVyYiwKKwkJCQl0b3RhbF9wYWNrZXRfY291bnQpOworCQlyZXNpZHVlID0geGhjaV9nZXRfbGFzdF9idXJzdF9wYWNrZXRfY291bnQoeGhjaSwKKwkJCQl1cmItPmRldiwgdXJiLCB0b3RhbF9wYWNrZXRfY291bnQpOwogCiAJCXRyYnNfcGVyX3RkID0gY291bnRfaXNvY190cmJzX25lZWRlZCh4aGNpLCB1cmIsIGkpOwogCkBAIC0zMTA0LDcgKzMyNjAsNyBAQAogCiAJCWZvciAoaiA9IDA7IGogPCB0cmJzX3Blcl90ZDsgaisrKSB7CiAJCQl1MzIgcmVtYWluZGVyID0gMDsKLQkJCWZpZWxkID0gMDsKKwkJCWZpZWxkID0gVFJCX1RCQyhidXJzdF9jb3VudCkgfCBUUkJfVExCUEMocmVzaWR1ZSk7CiAKIAkJCWlmIChmaXJzdF90cmIpIHsKIAkJCQkvKiBRdWV1ZSB0aGUgaXNvYyBUUkIgKi8KQEAgLTMxMjMsNiArMzI3OSwxMCBAQAogCQkJCWZpZWxkIHw9IGVwX3JpbmctPmN5Y2xlX3N0YXRlOwogCQkJfQogCisJCQkvKiBPbmx5IHNldCBpbnRlcnJ1cHQgb24gc2hvcnQgcGFja2V0IGZvciBJTiBFUHMgKi8KKwkJCWlmICh1c2JfdXJiX2Rpcl9pbih1cmIpKQorCQkJCWZpZWxkIHw9IFRSQl9JU1A7CisKIAkJCS8qIENoYWluIGFsbCB0aGUgVFJCcyB0b2dldGhlcjsgY2xlYXIgdGhlIGNoYWluIGJpdCBpbgogCQkJICogdGhlIGxhc3QgVFJCIHRvIGluZGljYXRlIGl0J3MgdGhlIGxhc3QgVFJCIGluIHRoZQogCQkJICogY2hhaW4uCkBAIC0zMTMzLDYgKzMyOTMsMTEgQEAKIAkJCX0gZWxzZSB7CiAJCQkJdGQtPmxhc3RfdHJiID0gZXBfcmluZy0+ZW5xdWV1ZTsKIAkJCQlmaWVsZCB8PSBUUkJfSU9DOworCQkJCWlmICh4aGNpLT5oY2lfdmVyc2lvbiA9PSAweDEwMCkgeworCQkJCQkvKiBTZXQgQkVJIGJpdCBleGNlcHQgZm9yIHRoZSBsYXN0IHRkICovCisJCQkJCWlmIChpIDwgbnVtX3RkcyAtIDEpCisJCQkJCQlmaWVsZCB8PSBUUkJfQkVJOworCQkJCX0KIAkJCQltb3JlX3RyYnNfY29taW5nID0gZmFsc2U7CiAJCQl9CiAKQEAgLTMxNDIsMjAgKzMzMDcsMjQgQEAKIAkJCWlmICh0cmJfYnVmZl9sZW4gPiB0ZF9yZW1haW5fbGVuKQogCQkJCXRyYl9idWZmX2xlbiA9IHRkX3JlbWFpbl9sZW47CiAKLQkJCXJlbWFpbmRlciA9IHhoY2lfdGRfcmVtYWluZGVyKHRkX2xlbiAtIHJ1bm5pbmdfdG90YWwpOworCQkJLyogU2V0IHRoZSBUUkIgbGVuZ3RoLCBURCBzaXplLCAmIGludGVycnVwdGVyIGZpZWxkcy4gKi8KKwkJCWlmICh4aGNpLT5oY2lfdmVyc2lvbiA8IDB4MTAwKSB7CisJCQkJcmVtYWluZGVyID0geGhjaV90ZF9yZW1haW5kZXIoCisJCQkJCQl0ZF9sZW4gLSBydW5uaW5nX3RvdGFsKTsKKwkJCX0gZWxzZSB7CisJCQkJcmVtYWluZGVyID0geGhjaV92MV8wX3RkX3JlbWFpbmRlcigKKwkJCQkJCXJ1bm5pbmdfdG90YWwsIHRyYl9idWZmX2xlbiwKKwkJCQkJCXRvdGFsX3BhY2tldF9jb3VudCwgdXJiKTsKKwkJCX0KIAkJCWxlbmd0aF9maWVsZCA9IFRSQl9MRU4odHJiX2J1ZmZfbGVuKSB8CiAJCQkJcmVtYWluZGVyIHwKIAkJCQlUUkJfSU5UUl9UQVJHRVQoMCk7CisKIAkJCXF1ZXVlX3RyYih4aGNpLCBlcF9yaW5nLCBmYWxzZSwgbW9yZV90cmJzX2NvbWluZywKIAkJCQlsb3dlcl8zMl9iaXRzKGFkZHIpLAogCQkJCXVwcGVyXzMyX2JpdHMoYWRkciksCiAJCQkJbGVuZ3RoX2ZpZWxkLAotCQkJCS8qIFdlIGFsd2F5cyB3YW50IHRvIGtub3cgaWYgdGhlIFRSQiB3YXMgc2hvcnQsCi0JCQkJICogb3Igd2Ugd29uJ3QgZ2V0IGFuIGV2ZW50IHdoZW4gaXQgY29tcGxldGVzLgotCQkJCSAqIChVbmxlc3Mgd2UgdXNlIGV2ZW50IGRhdGEgVFJCcywgd2hpY2ggYXJlIGEKLQkJCQkgKiB3YXN0ZSBvZiBzcGFjZSBhbmQgSEMgcmVzb3VyY2VzLikKLQkJCQkgKi8KLQkJCQlmaWVsZCB8IFRSQl9JU1ApOworCQkJCWZpZWxkKTsKIAkJCXJ1bm5pbmdfdG90YWwgKz0gdHJiX2J1ZmZfbGVuOwogCiAJCQlhZGRyICs9IHRyYl9idWZmX2xlbjsKQEAgLTMyMTEsOCArMzM4MCw4IEBACiAJLyogQ2hlY2sgdGhlIHJpbmcgdG8gZ3VhcmFudGVlIHRoZXJlIGlzIGVub3VnaCByb29tIGZvciB0aGUgd2hvbGUgdXJiLgogCSAqIERvIG5vdCBpbnNlcnQgYW55IHRkIG9mIHRoZSB1cmIgdG8gdGhlIHJpbmcgaWYgdGhlIGNoZWNrIGZhaWxlZC4KIAkgKi8KLQlyZXQgPSBwcmVwYXJlX3JpbmcoeGhjaSwgZXBfcmluZywgZXBfY3R4LT5lcF9pbmZvICYgRVBfU1RBVEVfTUFTSywKLQkJCQludW1fdHJicywgbWVtX2ZsYWdzKTsKKwlyZXQgPSBwcmVwYXJlX3JpbmcoeGhjaSwgZXBfcmluZywgbGUzMl90b19jcHUoZXBfY3R4LT5lcF9pbmZvKSAmIEVQX1NUQVRFX01BU0ssCisJCQkgICBudW1fdHJicywgbWVtX2ZsYWdzKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC0zMjI0LDcgKzMzOTMsNyBAQAogCQkJdXJiLT5kZXYtPnNwZWVkID09IFVTQl9TUEVFRF9GVUxMKQogCQl1cmItPnN0YXJ0X2ZyYW1lID4+PSAzOwogCi0JeGhjaV9pbnRlcnZhbCA9IEVQX0lOVEVSVkFMX1RPX1VGUkFNRVMoZXBfY3R4LT5lcF9pbmZvKTsKKwl4aGNpX2ludGVydmFsID0gRVBfSU5URVJWQUxfVE9fVUZSQU1FUyhsZTMyX3RvX2NwdShlcF9jdHgtPmVwX2luZm8pKTsKIAllcF9pbnRlcnZhbCA9IHVyYi0+aW50ZXJ2YWw7CiAJLyogQ29udmVydCB0byBtaWNyb2ZyYW1lcyAqLwogCWlmICh1cmItPmRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0xPVyB8fApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYwppbmRleCA4MWI5NzZlLi44ZjJhNTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYwpAQCAtOTczLDggKzk3Myw4IEBACiAKIAlvdXRfY3R4ID0geGhjaS0+ZGV2c1tzbG90X2lkXS0+b3V0X2N0eDsKIAllcF9jdHggPSB4aGNpX2dldF9lcF9jdHgoeGhjaSwgb3V0X2N0eCwgZXBfaW5kZXgpOwotCWh3X21heF9wYWNrZXRfc2l6ZSA9IE1BWF9QQUNLRVRfREVDT0RFRChlcF9jdHgtPmVwX2luZm8yKTsKLQltYXhfcGFja2V0X3NpemUgPSB1cmItPmRldi0+ZXAwLmRlc2Mud01heFBhY2tldFNpemU7CisJaHdfbWF4X3BhY2tldF9zaXplID0gTUFYX1BBQ0tFVF9ERUNPREVEKGxlMzJfdG9fY3B1KGVwX2N0eC0+ZXBfaW5mbzIpKTsKKwltYXhfcGFja2V0X3NpemUgPSBsZTE2X3RvX2NwdSh1cmItPmRldi0+ZXAwLmRlc2Mud01heFBhY2tldFNpemUpOwogCWlmIChod19tYXhfcGFja2V0X3NpemUgIT0gbWF4X3BhY2tldF9zaXplKSB7CiAJCXhoY2lfZGJnKHhoY2ksICJNYXggUGFja2V0IFNpemUgZm9yIGVwIDAgY2hhbmdlZC5cbiIpOwogCQl4aGNpX2RiZyh4aGNpLCAiTWF4IHBhY2tldCBzaXplIGluIHVzYl9kZXZpY2UgPSAlZFxuIiwKQEAgLTk4OCwxNSArOTg4LDE1IEBACiAJCQkJeGhjaS0+ZGV2c1tzbG90X2lkXS0+b3V0X2N0eCwgZXBfaW5kZXgpOwogCQlpbl9jdHggPSB4aGNpLT5kZXZzW3Nsb3RfaWRdLT5pbl9jdHg7CiAJCWVwX2N0eCA9IHhoY2lfZ2V0X2VwX2N0eCh4aGNpLCBpbl9jdHgsIGVwX2luZGV4KTsKLQkJZXBfY3R4LT5lcF9pbmZvMiAmPSB+TUFYX1BBQ0tFVF9NQVNLOwotCQllcF9jdHgtPmVwX2luZm8yIHw9IE1BWF9QQUNLRVQobWF4X3BhY2tldF9zaXplKTsKKwkJZXBfY3R4LT5lcF9pbmZvMiAmPSBjcHVfdG9fbGUzMih+TUFYX1BBQ0tFVF9NQVNLKTsKKwkJZXBfY3R4LT5lcF9pbmZvMiB8PSBjcHVfdG9fbGUzMihNQVhfUEFDS0VUKG1heF9wYWNrZXRfc2l6ZSkpOwogCiAJCS8qIFNldCB1cCB0aGUgaW5wdXQgY29udGV4dCBmbGFncyBmb3IgdGhlIGNvbW1hbmQgKi8KIAkJLyogRklYTUU6IFRoaXMgd29uJ3Qgd29yayBpZiBhIG5vbi1kZWZhdWx0IGNvbnRyb2wgZW5kcG9pbnQKIAkJICogY2hhbmdlcyBtYXggcGFja2V0IHNpemVzLgogCQkgKi8KIAkJY3RybF9jdHggPSB4aGNpX2dldF9pbnB1dF9jb250cm9sX2N0eCh4aGNpLCBpbl9jdHgpOwotCQljdHJsX2N0eC0+YWRkX2ZsYWdzID0gRVAwX0ZMQUc7CisJCWN0cmxfY3R4LT5hZGRfZmxhZ3MgPSBjcHVfdG9fbGUzMihFUDBfRkxBRyk7CiAJCWN0cmxfY3R4LT5kcm9wX2ZsYWdzID0gMDsKIAogCQl4aGNpX2RiZyh4aGNpLCAiU2xvdCAlZCBpbnB1dCBjb250ZXh0XG4iLCBzbG90X2lkKTsKQEAgLTEwMTAsNyArMTAxMCw3IEBACiAJCS8qIENsZWFuIHVwIHRoZSBpbnB1dCBjb250ZXh0IGZvciBsYXRlciB1c2UgYnkgYmFuZHdpZHRoCiAJCSAqIGZ1bmN0aW9ucy4KIAkJICovCi0JCWN0cmxfY3R4LT5hZGRfZmxhZ3MgPSBTTE9UX0ZMQUc7CisJCWN0cmxfY3R4LT5hZGRfZmxhZ3MgPSBjcHVfdG9fbGUzMihTTE9UX0ZMQUcpOwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtMTMzMSwyNyArMTMzMSwzMCBAQAogCS8qIElmIHRoZSBIQyBhbHJlYWR5IGtub3dzIHRoZSBlbmRwb2ludCBpcyBkaXNhYmxlZCwKIAkgKiBvciB0aGUgSENEIGhhcyBub3RlZCBpdCBpcyBkaXNhYmxlZCwgaWdub3JlIHRoaXMgcmVxdWVzdAogCSAqLwotCWlmICgoZXBfY3R4LT5lcF9pbmZvICYgRVBfU1RBVEVfTUFTSykgPT0gRVBfU1RBVEVfRElTQUJMRUQgfHwKLQkJCWN0cmxfY3R4LT5kcm9wX2ZsYWdzICYgeGhjaV9nZXRfZW5kcG9pbnRfZmxhZygmZXAtPmRlc2MpKSB7CisJaWYgKChsZTMyX3RvX2NwdShlcF9jdHgtPmVwX2luZm8pICYgRVBfU1RBVEVfTUFTSykgPT0KKwkgICAgRVBfU1RBVEVfRElTQUJMRUQgfHwKKwkgICAgbGUzMl90b19jcHUoY3RybF9jdHgtPmRyb3BfZmxhZ3MpICYKKwkgICAgeGhjaV9nZXRfZW5kcG9pbnRfZmxhZygmZXAtPmRlc2MpKSB7CiAJCXhoY2lfd2Fybih4aGNpLCAieEhDSSAlcyBjYWxsZWQgd2l0aCBkaXNhYmxlZCBlcCAlcFxuIiwKIAkJCQlfX2Z1bmNfXywgZXApOwogCQlyZXR1cm4gMDsKIAl9CiAKLQljdHJsX2N0eC0+ZHJvcF9mbGFncyB8PSBkcm9wX2ZsYWc7Ci0JbmV3X2Ryb3BfZmxhZ3MgPSBjdHJsX2N0eC0+ZHJvcF9mbGFnczsKKwljdHJsX2N0eC0+ZHJvcF9mbGFncyB8PSBjcHVfdG9fbGUzMihkcm9wX2ZsYWcpOworCW5ld19kcm9wX2ZsYWdzID0gbGUzMl90b19jcHUoY3RybF9jdHgtPmRyb3BfZmxhZ3MpOwogCi0JY3RybF9jdHgtPmFkZF9mbGFncyAmPSB+ZHJvcF9mbGFnOwotCW5ld19hZGRfZmxhZ3MgPSBjdHJsX2N0eC0+YWRkX2ZsYWdzOworCWN0cmxfY3R4LT5hZGRfZmxhZ3MgJj0gY3B1X3RvX2xlMzIofmRyb3BfZmxhZyk7CisJbmV3X2FkZF9mbGFncyA9IGxlMzJfdG9fY3B1KGN0cmxfY3R4LT5hZGRfZmxhZ3MpOwogCi0JbGFzdF9jdHggPSB4aGNpX2xhc3RfdmFsaWRfZW5kcG9pbnQoY3RybF9jdHgtPmFkZF9mbGFncyk7CisJbGFzdF9jdHggPSB4aGNpX2xhc3RfdmFsaWRfZW5kcG9pbnQobGUzMl90b19jcHUoY3RybF9jdHgtPmFkZF9mbGFncykpOwogCXNsb3RfY3R4ID0geGhjaV9nZXRfc2xvdF9jdHgoeGhjaSwgaW5fY3R4KTsKIAkvKiBVcGRhdGUgdGhlIGxhc3QgdmFsaWQgZW5kcG9pbnQgY29udGV4dCwgaWYgd2UgZGVsZXRlZCB0aGUgbGFzdCBvbmUgKi8KLQlpZiAoKHNsb3RfY3R4LT5kZXZfaW5mbyAmIExBU1RfQ1RYX01BU0spID4gTEFTVF9DVFgobGFzdF9jdHgpKSB7Ci0JCXNsb3RfY3R4LT5kZXZfaW5mbyAmPSB+TEFTVF9DVFhfTUFTSzsKLQkJc2xvdF9jdHgtPmRldl9pbmZvIHw9IExBU1RfQ1RYKGxhc3RfY3R4KTsKKwlpZiAoKGxlMzJfdG9fY3B1KHNsb3RfY3R4LT5kZXZfaW5mbykgJiBMQVNUX0NUWF9NQVNLKSA+CisJICAgIExBU1RfQ1RYKGxhc3RfY3R4KSkgeworCQlzbG90X2N0eC0+ZGV2X2luZm8gJj0gY3B1X3RvX2xlMzIofkxBU1RfQ1RYX01BU0spOworCQlzbG90X2N0eC0+ZGV2X2luZm8gfD0gY3B1X3RvX2xlMzIoTEFTVF9DVFgobGFzdF9jdHgpKTsKIAl9Ci0JbmV3X3Nsb3RfaW5mbyA9IHNsb3RfY3R4LT5kZXZfaW5mbzsKKwluZXdfc2xvdF9pbmZvID0gbGUzMl90b19jcHUoc2xvdF9jdHgtPmRldl9pbmZvKTsKIAogCXhoY2lfZW5kcG9pbnRfemVybyh4aGNpLCB4aGNpLT5kZXZzW3VkZXYtPnNsb3RfaWRdLCBlcCk7CiAKQEAgLTE0MTksNyArMTQyMiw4IEBACiAJLyogSWYgdGhlIEhDRCBoYXMgYWxyZWFkeSBub3RlZCB0aGUgZW5kcG9pbnQgaXMgZW5hYmxlZCwKIAkgKiBpZ25vcmUgdGhpcyByZXF1ZXN0LgogCSAqLwotCWlmIChjdHJsX2N0eC0+YWRkX2ZsYWdzICYgeGhjaV9nZXRfZW5kcG9pbnRfZmxhZygmZXAtPmRlc2MpKSB7CisJaWYgKGxlMzJfdG9fY3B1KGN0cmxfY3R4LT5hZGRfZmxhZ3MpICYKKwkgICAgeGhjaV9nZXRfZW5kcG9pbnRfZmxhZygmZXAtPmRlc2MpKSB7CiAJCXhoY2lfd2Fybih4aGNpLCAieEhDSSAlcyBjYWxsZWQgd2l0aCBlbmFibGVkIGVwICVwXG4iLAogCQkJCV9fZnVuY19fLCBlcCk7CiAJCXJldHVybiAwOwpAQCAtMTQzNyw4ICsxNDQxLDggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JY3RybF9jdHgtPmFkZF9mbGFncyB8PSBhZGRlZF9jdHhzOwotCW5ld19hZGRfZmxhZ3MgPSBjdHJsX2N0eC0+YWRkX2ZsYWdzOworCWN0cmxfY3R4LT5hZGRfZmxhZ3MgfD0gY3B1X3RvX2xlMzIoYWRkZWRfY3R4cyk7CisJbmV3X2FkZF9mbGFncyA9IGxlMzJfdG9fY3B1KGN0cmxfY3R4LT5hZGRfZmxhZ3MpOwogCiAJLyogSWYgeGhjaV9lbmRwb2ludF9kaXNhYmxlKCkgd2FzIGNhbGxlZCBmb3IgdGhpcyBlbmRwb2ludCwgYnV0IHRoZQogCSAqIHhIQyBoYXNuJ3QgYmVlbiBub3RpZmllZCB5ZXQgdGhyb3VnaCB0aGUgY2hlY2tfYmFuZHdpZHRoKCkgY2FsbCwKQEAgLTE0NDYsMTUgKzE0NTAsMTYgQEAKIAkgKiBkZXNjcmlwdG9ycy4gIFdlIG11c3QgZHJvcCBhbmQgcmUtYWRkIHRoaXMgZW5kcG9pbnQsIHNvIHdlIGxlYXZlIHRoZQogCSAqIGRyb3AgZmxhZ3MgYWxvbmUuCiAJICovCi0JbmV3X2Ryb3BfZmxhZ3MgPSBjdHJsX2N0eC0+ZHJvcF9mbGFnczsKKwluZXdfZHJvcF9mbGFncyA9IGxlMzJfdG9fY3B1KGN0cmxfY3R4LT5kcm9wX2ZsYWdzKTsKIAogCXNsb3RfY3R4ID0geGhjaV9nZXRfc2xvdF9jdHgoeGhjaSwgaW5fY3R4KTsKIAkvKiBVcGRhdGUgdGhlIGxhc3QgdmFsaWQgZW5kcG9pbnQgY29udGV4dCwgaWYgd2UganVzdCBhZGRlZCBvbmUgcGFzdCAqLwotCWlmICgoc2xvdF9jdHgtPmRldl9pbmZvICYgTEFTVF9DVFhfTUFTSykgPCBMQVNUX0NUWChsYXN0X2N0eCkpIHsKLQkJc2xvdF9jdHgtPmRldl9pbmZvICY9IH5MQVNUX0NUWF9NQVNLOwotCQlzbG90X2N0eC0+ZGV2X2luZm8gfD0gTEFTVF9DVFgobGFzdF9jdHgpOworCWlmICgobGUzMl90b19jcHUoc2xvdF9jdHgtPmRldl9pbmZvKSAmIExBU1RfQ1RYX01BU0spIDwKKwkgICAgTEFTVF9DVFgobGFzdF9jdHgpKSB7CisJCXNsb3RfY3R4LT5kZXZfaW5mbyAmPSBjcHVfdG9fbGUzMih+TEFTVF9DVFhfTUFTSyk7CisJCXNsb3RfY3R4LT5kZXZfaW5mbyB8PSBjcHVfdG9fbGUzMihMQVNUX0NUWChsYXN0X2N0eCkpOwogCX0KLQluZXdfc2xvdF9pbmZvID0gc2xvdF9jdHgtPmRldl9pbmZvOworCW5ld19zbG90X2luZm8gPSBsZTMyX3RvX2NwdShzbG90X2N0eC0+ZGV2X2luZm8pOwogCiAJLyogU3RvcmUgdGhlIHVzYl9kZXZpY2UgcG9pbnRlciBmb3IgbGF0ZXIgdXNlICovCiAJZXAtPmhjcHJpdiA9IHVkZXY7CkBAIC0xNDg0LDkgKzE0ODksOSBAQAogCWN0cmxfY3R4LT5kcm9wX2ZsYWdzID0gMDsKIAljdHJsX2N0eC0+YWRkX2ZsYWdzID0gMDsKIAlzbG90X2N0eCA9IHhoY2lfZ2V0X3Nsb3RfY3R4KHhoY2ksIHZpcnRfZGV2LT5pbl9jdHgpOwotCXNsb3RfY3R4LT5kZXZfaW5mbyAmPSB+TEFTVF9DVFhfTUFTSzsKKwlzbG90X2N0eC0+ZGV2X2luZm8gJj0gY3B1X3RvX2xlMzIofkxBU1RfQ1RYX01BU0spOwogCS8qIEVuZHBvaW50IDAgaXMgYWx3YXlzIHZhbGlkICovCi0Jc2xvdF9jdHgtPmRldl9pbmZvIHw9IExBU1RfQ1RYKDEpOworCXNsb3RfY3R4LT5kZXZfaW5mbyB8PSBjcHVfdG9fbGUzMihMQVNUX0NUWCgxKSk7CiAJZm9yIChpID0gMTsgaSA8IDMxOyArK2kpIHsKIAkJZXBfY3R4ID0geGhjaV9nZXRfZXBfY3R4KHhoY2ksIHZpcnRfZGV2LT5pbl9jdHgsIGkpOwogCQllcF9jdHgtPmVwX2luZm8gPSAwOwpAQCAtMTQ5Nyw3ICsxNTAyLDcgQEAKIH0KIAogc3RhdGljIGludCB4aGNpX2NvbmZpZ3VyZV9lbmRwb2ludF9yZXN1bHQoc3RydWN0IHhoY2lfaGNkICp4aGNpLAotCQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgaW50ICpjbWRfc3RhdHVzKQorCQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgdTMyICpjbWRfc3RhdHVzKQogewogCWludCByZXQ7CiAKQEAgLTE1MzUsNyArMTU0MCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgeGhjaV9ldmFsdWF0ZV9jb250ZXh0X3Jlc3VsdChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCi0JCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBpbnQgKmNtZF9zdGF0dXMpCisJCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCB1MzIgKmNtZF9zdGF0dXMpCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgeGhjaV92aXJ0X2RldmljZSAqdmlydF9kZXYgPSB4aGNpLT5kZXZzW3VkZXYtPnNsb3RfaWRdOwpAQCAtMTU1NSw2ICsxNTYwLDExIEBACiAJCXhoY2lfZGJnX2N0eCh4aGNpLCB2aXJ0X2Rldi0+b3V0X2N0eCwgMSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWJyZWFrOworCWNhc2UgQ09NUF9NRUxfRVJSOgorCQkvKiBNYXggRXhpdCBMYXRlbmN5IHRvbyBsYXJnZSBlcnJvciAqLworCQlkZXZfd2FybigmdWRldi0+ZGV2LCAiV0FSTjogTWF4IEV4aXQgTGF0ZW5jeSB0b28gbGFyZ2VcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKIAljYXNlIENPTVBfU1VDQ0VTUzoKIAkJZGV2X2RiZygmdWRldi0+ZGV2LCAiU3VjY2Vzc2Z1bCBldmFsdWF0ZSBjb250ZXh0IGNvbW1hbmRcbiIpOwogCQlyZXQgPSAwOwpAQCAtMTU4MSw3ICsxNTkxLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCB4aGNpX2NvbnRhaW5lcl9jdHggKmluX2N0eDsKIAlzdHJ1Y3QgY29tcGxldGlvbiAqY21kX2NvbXBsZXRpb247Ci0JaW50ICpjbWRfc3RhdHVzOworCXUzMiAqY21kX3N0YXR1czsKIAlzdHJ1Y3QgeGhjaV92aXJ0X2RldmljZSAqdmlydF9kZXY7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwpAQCAtMTU5NSw4ICsxNjA1LDggQEAKIAkJLyogRW5xdWV1ZSBwb2ludGVyIGNhbiBiZSBsZWZ0IHBvaW50aW5nIHRvIHRoZSBsaW5rIFRSQiwKIAkJICogd2UgbXVzdCBoYW5kbGUgdGhhdAogCQkgKi8KLQkJaWYgKChjb21tYW5kLT5jb21tYW5kX3RyYi0+bGluay5jb250cm9sICYgVFJCX1RZUEVfQklUTUFTSykKLQkJCQk9PSBUUkJfVFlQRShUUkJfTElOSykpCisJCWlmICgobGUzMl90b19jcHUoY29tbWFuZC0+Y29tbWFuZF90cmItPmxpbmsuY29udHJvbCkKKwkJICAgICAmIFRSQl9UWVBFX0JJVE1BU0spID09IFRSQl9UWVBFKFRSQl9MSU5LKSkKIAkJCWNvbW1hbmQtPmNvbW1hbmRfdHJiID0KIAkJCQl4aGNpLT5jbWRfcmluZy0+ZW5xX3NlZy0+bmV4dC0+dHJiczsKIApAQCAtMTY3MiwxNCArMTY4MiwxMyBAQAogCiAJLyogU2VlIHNlY3Rpb24gNC42LjYgLSBBMCA9IDE7IEExID0gRDAgPSBEMSA9IDAgKi8KIAljdHJsX2N0eCA9IHhoY2lfZ2V0X2lucHV0X2NvbnRyb2xfY3R4KHhoY2ksIHZpcnRfZGV2LT5pbl9jdHgpOwotCWN0cmxfY3R4LT5hZGRfZmxhZ3MgfD0gU0xPVF9GTEFHOwotCWN0cmxfY3R4LT5hZGRfZmxhZ3MgJj0gfkVQMF9GTEFHOwotCWN0cmxfY3R4LT5kcm9wX2ZsYWdzICY9IH5TTE9UX0ZMQUc7Ci0JY3RybF9jdHgtPmRyb3BfZmxhZ3MgJj0gfkVQMF9GTEFHOworCWN0cmxfY3R4LT5hZGRfZmxhZ3MgfD0gY3B1X3RvX2xlMzIoU0xPVF9GTEFHKTsKKwljdHJsX2N0eC0+YWRkX2ZsYWdzICY9IGNwdV90b19sZTMyKH5FUDBfRkxBRyk7CisJY3RybF9jdHgtPmRyb3BfZmxhZ3MgJj0gY3B1X3RvX2xlMzIofihTTE9UX0ZMQUcgfCBFUDBfRkxBRykpOwogCXhoY2lfZGJnKHhoY2ksICJOZXcgSW5wdXQgQ29udHJvbCBDb250ZXh0OlxuIik7CiAJc2xvdF9jdHggPSB4aGNpX2dldF9zbG90X2N0eCh4aGNpLCB2aXJ0X2Rldi0+aW5fY3R4KTsKIAl4aGNpX2RiZ19jdHgoeGhjaSwgdmlydF9kZXYtPmluX2N0eCwKLQkJCUxBU1RfQ1RYX1RPX0VQX05VTShzbG90X2N0eC0+ZGV2X2luZm8pKTsKKwkJICAgICBMQVNUX0NUWF9UT19FUF9OVU0obGUzMl90b19jcHUoc2xvdF9jdHgtPmRldl9pbmZvKSkpOwogCiAJcmV0ID0geGhjaV9jb25maWd1cmVfZW5kcG9pbnQoeGhjaSwgdWRldiwgTlVMTCwKIAkJCWZhbHNlLCBmYWxzZSk7CkBAIC0xNjkwLDEwICsxNjk5LDE5IEBACiAKIAl4aGNpX2RiZyh4aGNpLCAiT3V0cHV0IGNvbnRleHQgYWZ0ZXIgc3VjY2Vzc2Z1bCBjb25maWcgZXAgY21kOlxuIik7CiAJeGhjaV9kYmdfY3R4KHhoY2ksIHZpcnRfZGV2LT5vdXRfY3R4LAotCQkJTEFTVF9DVFhfVE9fRVBfTlVNKHNsb3RfY3R4LT5kZXZfaW5mbykpOworCQkgICAgIExBU1RfQ1RYX1RPX0VQX05VTShsZTMyX3RvX2NwdShzbG90X2N0eC0+ZGV2X2luZm8pKSk7CiAKKwkvKiBGcmVlIGFueSByaW5ncyB0aGF0IHdlcmUgZHJvcHBlZCwgYnV0IG5vdCBjaGFuZ2VkLiAqLworCWZvciAoaSA9IDE7IGkgPCAzMTsgKytpKSB7CisJCWlmICgoY3RybF9jdHgtPmRyb3BfZmxhZ3MgJiAoMSA8PCAoaSArIDEpKSkgJiYKKwkJCQkhKGN0cmxfY3R4LT5hZGRfZmxhZ3MgJiAoMSA8PCAoaSArIDEpKSkpCisJCQl4aGNpX2ZyZWVfb3JfY2FjaGVfZW5kcG9pbnRfcmluZyh4aGNpLCB2aXJ0X2RldiwgaSk7CisJfQogCXhoY2lfemVyb19pbl9jdHgoeGhjaSwgdmlydF9kZXYpOwotCS8qIEluc3RhbGwgbmV3IHJpbmdzIGFuZCBmcmVlIG9yIGNhY2hlIGFueSBvbGQgcmluZ3MgKi8KKwkvKgorCSAqIEluc3RhbGwgYW55IHJpbmdzIGZvciBjb21wbGV0ZWx5IG5ldyBlbmRwb2ludHMgb3IgY2hhbmdlZCBlbmRwb2ludHMsCisJICogYW5kIGZyZWUgb3IgY2FjaGUgYW55IG9sZCByaW5ncyBmcm9tIGNoYW5nZWQgZW5kcG9pbnRzLgorCSAqLwogCWZvciAoaSA9IDE7IGkgPCAzMTsgKytpKSB7CiAJCWlmICghdmlydF9kZXYtPmVwc1tpXS5uZXdfcmluZykKIAkJCWNvbnRpbnVlOwpAQCAtMTc0MCwxMCArMTc1OCwxMCBAQAogewogCXN0cnVjdCB4aGNpX2lucHV0X2NvbnRyb2xfY3R4ICpjdHJsX2N0eDsKIAljdHJsX2N0eCA9IHhoY2lfZ2V0X2lucHV0X2NvbnRyb2xfY3R4KHhoY2ksIGluX2N0eCk7Ci0JY3RybF9jdHgtPmFkZF9mbGFncyA9IGFkZF9mbGFnczsKLQljdHJsX2N0eC0+ZHJvcF9mbGFncyA9IGRyb3BfZmxhZ3M7CisJY3RybF9jdHgtPmFkZF9mbGFncyA9IGNwdV90b19sZTMyKGFkZF9mbGFncyk7CisJY3RybF9jdHgtPmRyb3BfZmxhZ3MgPSBjcHVfdG9fbGUzMihkcm9wX2ZsYWdzKTsKIAl4aGNpX3Nsb3RfY29weSh4aGNpLCBpbl9jdHgsIG91dF9jdHgpOwotCWN0cmxfY3R4LT5hZGRfZmxhZ3MgfD0gU0xPVF9GTEFHOworCWN0cmxfY3R4LT5hZGRfZmxhZ3MgfD0gY3B1X3RvX2xlMzIoU0xPVF9GTEFHKTsKIAogCXhoY2lfZGJnKHhoY2ksICJJbnB1dCBDb250ZXh0OlxuIik7CiAJeGhjaV9kYmdfY3R4KHhoY2ksIGluX2N0eCwgeGhjaV9sYXN0X3ZhbGlkX2VuZHBvaW50KGFkZF9mbGFncykpOwpAQCAtMTc3Miw3ICsxNzkwLDcgQEAKIAkJCQlkZXFfc3RhdGUtPm5ld19kZXFfcHRyKTsKIAkJcmV0dXJuOwogCX0KLQllcF9jdHgtPmRlcSA9IGFkZHIgfCBkZXFfc3RhdGUtPm5ld19jeWNsZV9zdGF0ZTsKKwllcF9jdHgtPmRlcSA9IGNwdV90b19sZTY0KGFkZHIgfCBkZXFfc3RhdGUtPm5ld19jeWNsZV9zdGF0ZSk7CiAKIAlhZGRlZF9jdHhzID0geGhjaV9nZXRfZW5kcG9pbnRfZmxhZ19mcm9tX2luZGV4KGVwX2luZGV4KTsKIAl4aGNpX3NldHVwX2lucHV0X2N0eF9mb3JfY29uZmlnX2VwKHhoY2ksIHhoY2ktPmRldnNbc2xvdF9pZF0tPmluX2N0eCwKQEAgLTIzMjcsOCArMjM0NSw4IEBACiAJLyogRW5xdWV1ZSBwb2ludGVyIGNhbiBiZSBsZWZ0IHBvaW50aW5nIHRvIHRoZSBsaW5rIFRSQiwKIAkgKiB3ZSBtdXN0IGhhbmRsZSB0aGF0CiAJICovCi0JaWYgKChyZXNldF9kZXZpY2VfY21kLT5jb21tYW5kX3RyYi0+bGluay5jb250cm9sICYgVFJCX1RZUEVfQklUTUFTSykKLQkJCT09IFRSQl9UWVBFKFRSQl9MSU5LKSkKKwlpZiAoKGxlMzJfdG9fY3B1KHJlc2V0X2RldmljZV9jbWQtPmNvbW1hbmRfdHJiLT5saW5rLmNvbnRyb2wpCisJICAgICAmIFRSQl9UWVBFX0JJVE1BU0spID09IFRSQl9UWVBFKFRSQl9MSU5LKSkKIAkJcmVzZXRfZGV2aWNlX2NtZC0+Y29tbWFuZF90cmIgPQogCQkJeGhjaS0+Y21kX3JpbmctPmVucV9zZWctPm5leHQtPnRyYnM7CiAKQEAgLTI1NDIsNiArMjU2MCwxNyBAQAogCiAJdmlydF9kZXYgPSB4aGNpLT5kZXZzW3VkZXYtPnNsb3RfaWRdOwogCisJaWYgKFdBUk5fT04oIXZpcnRfZGV2KSkgeworCQkvKgorCQkgKiBJbiBwbHVnL3VucGx1ZyB0b3J0dXJlIHRlc3Qgd2l0aCBhbiBORUMgY29udHJvbGxlciwKKwkJICogYSB6ZXJvLWRlcmVmZXJlbmNlIHdhcyBvYnNlcnZlZCBvbmNlIGR1ZSB0byB2aXJ0X2RldiA9IDAuCisJCSAqIFByaW50IHVzZWZ1bCBkZWJ1ZyByYXRoZXIgdGhhbiBjcmFzaCBpZiBpdCBpcyBvYnNlcnZlZCBhZ2FpbiEKKwkJICovCisJCXhoY2lfd2Fybih4aGNpLCAiVmlydCBkZXYgaW52YWxpZCBmb3Igc2xvdF9pZCAweCV4IVxuIiwKKwkJCXVkZXYtPnNsb3RfaWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlzbG90X2N0eCA9IHhoY2lfZ2V0X3Nsb3RfY3R4KHhoY2ksIHZpcnRfZGV2LT5pbl9jdHgpOwogCS8qCiAJICogSWYgdGhpcyBpcyB0aGUgZmlyc3QgU2V0IEFkZHJlc3Mgc2luY2UgZGV2aWNlIHBsdWctaW4gb3IKQEAgLTI2MDksMTAgKzI2MzgsMTAgQEAKIAl0ZW1wXzY0ID0geGhjaV9yZWFkXzY0KHhoY2ksICZ4aGNpLT5vcF9yZWdzLT5kY2JhYV9wdHIpOwogCXhoY2lfZGJnKHhoY2ksICJPcCByZWdzIERDQkFBIHB0ciA9ICUjMDE2bGx4XG4iLCB0ZW1wXzY0KTsKIAl4aGNpX2RiZyh4aGNpLCAiU2xvdCBJRCAlZCBkY2JhYSBlbnRyeSBAJXAgPSAlIzAxNmxseFxuIiwKLQkJCXVkZXYtPnNsb3RfaWQsCi0JCQkmeGhjaS0+ZGNiYWEtPmRldl9jb250ZXh0X3B0cnNbdWRldi0+c2xvdF9pZF0sCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKQotCQkJCXhoY2ktPmRjYmFhLT5kZXZfY29udGV4dF9wdHJzW3VkZXYtPnNsb3RfaWRdKTsKKwkJIHVkZXYtPnNsb3RfaWQsCisJCSAmeGhjaS0+ZGNiYWEtPmRldl9jb250ZXh0X3B0cnNbdWRldi0+c2xvdF9pZF0sCisJCSAodW5zaWduZWQgbG9uZyBsb25nKQorCQkgbGU2NF90b19jcHUoeGhjaS0+ZGNiYWEtPmRldl9jb250ZXh0X3B0cnNbdWRldi0+c2xvdF9pZF0pKTsKIAl4aGNpX2RiZyh4aGNpLCAiT3V0cHV0IENvbnRleHQgRE1BIGFkZHJlc3MgPSAlIzA4bGx4XG4iLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl2aXJ0X2Rldi0+b3V0X2N0eC0+ZG1hKTsKIAl4aGNpX2RiZyh4aGNpLCAiU2xvdCBJRCAlZCBJbnB1dCBDb250ZXh0OlxuIiwgdWRldi0+c2xvdF9pZCk7CkBAIC0yNjI2LDcgKzI2NTUsOCBAQAogCXNsb3RfY3R4ID0geGhjaV9nZXRfc2xvdF9jdHgoeGhjaSwgdmlydF9kZXYtPm91dF9jdHgpOwogCS8qIFVzZSBrZXJuZWwgYXNzaWduZWQgYWRkcmVzcyBmb3IgZGV2aWNlczsgc3RvcmUgeEhDIGFzc2lnbmVkCiAJICogYWRkcmVzcyBsb2NhbGx5LiAqLwotCXZpcnRfZGV2LT5hZGRyZXNzID0gKHNsb3RfY3R4LT5kZXZfc3RhdGUgJiBERVZfQUREUl9NQVNLKSArIDE7CisJdmlydF9kZXYtPmFkZHJlc3MgPSAobGUzMl90b19jcHUoc2xvdF9jdHgtPmRldl9zdGF0ZSkgJiBERVZfQUREUl9NQVNLKQorCQkrIDE7CiAJLyogWmVybyB0aGUgaW5wdXQgY29udGV4dCBjb250cm9sIGZvciBsYXRlciB1c2UgKi8KIAljdHJsX2N0eCA9IHhoY2lfZ2V0X2lucHV0X2NvbnRyb2xfY3R4KHhoY2ksIHZpcnRfZGV2LT5pbl9jdHgpOwogCWN0cmxfY3R4LT5hZGRfZmxhZ3MgPSAwOwpAQCAtMjY3MCwyNCArMjcwMCwyOSBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CiAJeGhjaV9zbG90X2NvcHkoeGhjaSwgY29uZmlnX2NtZC0+aW5fY3R4LCB2ZGV2LT5vdXRfY3R4KTsKIAljdHJsX2N0eCA9IHhoY2lfZ2V0X2lucHV0X2NvbnRyb2xfY3R4KHhoY2ksIGNvbmZpZ19jbWQtPmluX2N0eCk7Ci0JY3RybF9jdHgtPmFkZF9mbGFncyB8PSBTTE9UX0ZMQUc7CisJY3RybF9jdHgtPmFkZF9mbGFncyB8PSBjcHVfdG9fbGUzMihTTE9UX0ZMQUcpOwogCXNsb3RfY3R4ID0geGhjaV9nZXRfc2xvdF9jdHgoeGhjaSwgY29uZmlnX2NtZC0+aW5fY3R4KTsKLQlzbG90X2N0eC0+ZGV2X2luZm8gfD0gREVWX0hVQjsKKwlzbG90X2N0eC0+ZGV2X2luZm8gfD0gY3B1X3RvX2xlMzIoREVWX0hVQik7CiAJaWYgKHR0LT5tdWx0aSkKLQkJc2xvdF9jdHgtPmRldl9pbmZvIHw9IERFVl9NVFQ7CisJCXNsb3RfY3R4LT5kZXZfaW5mbyB8PSBjcHVfdG9fbGUzMihERVZfTVRUKTsKIAlpZiAoeGhjaS0+aGNpX3ZlcnNpb24gPiAweDk1KSB7CiAJCXhoY2lfZGJnKHhoY2ksICJ4SENJIHZlcnNpb24gJXggbmVlZHMgaHViICIKIAkJCQkiVFQgdGhpbmsgdGltZSBhbmQgbnVtYmVyIG9mIHBvcnRzXG4iLAogCQkJCSh1bnNpZ25lZCBpbnQpIHhoY2ktPmhjaV92ZXJzaW9uKTsKLQkJc2xvdF9jdHgtPmRldl9pbmZvMiB8PSBYSENJX01BWF9QT1JUUyhoZGV2LT5tYXhjaGlsZCk7CisJCXNsb3RfY3R4LT5kZXZfaW5mbzIgfD0gY3B1X3RvX2xlMzIoWEhDSV9NQVhfUE9SVFMoaGRldi0+bWF4Y2hpbGQpKTsKIAkJLyogU2V0IFRUIHRoaW5rIHRpbWUgLSBjb252ZXJ0IGZyb20gbnMgdG8gRlMgYml0IHRpbWVzLgogCQkgKiAwID0gOCBGUyBiaXQgdGltZXMsIDEgPSAxNiBGUyBiaXQgdGltZXMsCiAJCSAqIDIgPSAyNCBGUyBiaXQgdGltZXMsIDMgPSAzMiBGUyBiaXQgdGltZXMuCisJCSAqCisJCSAqIHhIQ0kgMS4wOiB0aGlzIGZpZWxkIHNoYWxsIGJlIDAgaWYgdGhlIGRldmljZSBpcyBub3QgYQorCQkgKiBIaWdoLXNwcGVkIGh1Yi4KIAkJICovCiAJCXRoaW5rX3RpbWUgPSB0dC0+dGhpbmtfdGltZTsKIAkJaWYgKHRoaW5rX3RpbWUgIT0gMCkKIAkJCXRoaW5rX3RpbWUgPSAodGhpbmtfdGltZSAvIDY2NikgLSAxOwotCQlzbG90X2N0eC0+dHRfaW5mbyB8PSBUVF9USElOS19USU1FKHRoaW5rX3RpbWUpOworCQlpZiAoeGhjaS0+aGNpX3ZlcnNpb24gPCAweDEwMCB8fCBoZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKKwkJCXNsb3RfY3R4LT50dF9pbmZvIHw9CisJCQkJY3B1X3RvX2xlMzIoVFRfVEhJTktfVElNRSh0aGlua190aW1lKSk7CiAJfSBlbHNlIHsKIAkJeGhjaV9kYmcoeGhjaSwgInhIQ0kgdmVyc2lvbiAleCBkb2Vzbid0IG5lZWQgaHViICIKIAkJCQkiVFQgdGhpbmsgdGltZSBvciBudW1iZXIgb2YgcG9ydHNcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaCBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5oCmluZGV4IGJhMWJlNmIuLmUxMmRiN2NmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaApAQCAtNTcsMTMgKzU3LDEzIEBACiAgKiBAcnVuX3JlZ3Nfb2ZmOglSVFNPRkYgLSBSdW50aW1lIHJlZ2lzdGVyIHNwYWNlIG9mZnNldAogICovCiBzdHJ1Y3QgeGhjaV9jYXBfcmVncyB7Ci0JdTMyCWhjX2NhcGJhc2U7Ci0JdTMyCWhjc19wYXJhbXMxOwotCXUzMgloY3NfcGFyYW1zMjsKLQl1MzIJaGNzX3BhcmFtczM7Ci0JdTMyCWhjY19wYXJhbXM7Ci0JdTMyCWRiX29mZjsKLQl1MzIJcnVuX3JlZ3Nfb2ZmOworCV9fbGUzMgloY19jYXBiYXNlOworCV9fbGUzMgloY3NfcGFyYW1zMTsKKwlfX2xlMzIJaGNzX3BhcmFtczI7CisJX19sZTMyCWhjc19wYXJhbXMzOworCV9fbGUzMgloY2NfcGFyYW1zOworCV9fbGUzMglkYl9vZmY7CisJX19sZTMyCXJ1bl9yZWdzX29mZjsKIAkvKiBSZXNlcnZlZCB1cCB0byAoQ0FQTEVOR1RIIC0gMHgxQykgKi8KIH07CiAKQEAgLTE1NSwyNiArMTU1LDI2IEBACiAgKiAJCQlkZXZpY2VzLgogICovCiBzdHJ1Y3QgeGhjaV9vcF9yZWdzIHsKLQl1MzIJY29tbWFuZDsKLQl1MzIJc3RhdHVzOwotCXUzMglwYWdlX3NpemU7Ci0JdTMyCXJlc2VydmVkMTsKLQl1MzIJcmVzZXJ2ZWQyOwotCXUzMglkZXZfbm90aWZpY2F0aW9uOwotCXU2NAljbWRfcmluZzsKKwlfX2xlMzIJY29tbWFuZDsKKwlfX2xlMzIJc3RhdHVzOworCV9fbGUzMglwYWdlX3NpemU7CisJX19sZTMyCXJlc2VydmVkMTsKKwlfX2xlMzIJcmVzZXJ2ZWQyOworCV9fbGUzMglkZXZfbm90aWZpY2F0aW9uOworCV9fbGU2NAljbWRfcmluZzsKIAkvKiByc3ZkOiBvZmZzZXQgMHgyMC0yRiAqLwotCXUzMglyZXNlcnZlZDNbNF07Ci0JdTY0CWRjYmFhX3B0cjsKLQl1MzIJY29uZmlnX3JlZzsKKwlfX2xlMzIJcmVzZXJ2ZWQzWzRdOworCV9fbGU2NAlkY2JhYV9wdHI7CisJX19sZTMyCWNvbmZpZ19yZWc7CiAJLyogcnN2ZDogb2Zmc2V0IDB4M0MtM0ZGICovCi0JdTMyCXJlc2VydmVkNFsyNDFdOworCV9fbGUzMglyZXNlcnZlZDRbMjQxXTsKIAkvKiBwb3J0IDEgcmVnaXN0ZXJzLCB3aGljaCBzZXJ2ZSBhcyBhIGJhc2UgYWRkcmVzcyBmb3Igb3RoZXIgcG9ydHMgKi8KLQl1MzIJcG9ydF9zdGF0dXNfYmFzZTsKLQl1MzIJcG9ydF9wb3dlcl9iYXNlOwotCXUzMglwb3J0X2xpbmtfYmFzZTsKLQl1MzIJcmVzZXJ2ZWQ1OworCV9fbGUzMglwb3J0X3N0YXR1c19iYXNlOworCV9fbGUzMglwb3J0X3Bvd2VyX2Jhc2U7CisJX19sZTMyCXBvcnRfbGlua19iYXNlOworCV9fbGUzMglyZXNlcnZlZDU7CiAJLyogcmVnaXN0ZXJzIGZvciBwb3J0cyAyLTI1NSAqLwotCXUzMglyZXNlcnZlZDZbTlVNX1BPUlRfUkVHUyoyNTRdOworCV9fbGUzMglyZXNlcnZlZDZbTlVNX1BPUlRfUkVHUyoyNTRdOwogfTsKIAogLyogVVNCQ01EIC0gVVNCIGNvbW1hbmQgLSBjb21tYW5kIGJpdG1hc2tzICovCkBAIC0zODIsMTIgKzM4MiwxMiBAQAogICogdXBkYXRlcyB0aGUgZGVxdWV1ZSBwb2ludGVyLgogICovCiBzdHJ1Y3QgeGhjaV9pbnRyX3JlZyB7Ci0JdTMyCWlycV9wZW5kaW5nOwotCXUzMglpcnFfY29udHJvbDsKLQl1MzIJZXJzdF9zaXplOwotCXUzMglyc3ZkOwotCXU2NAllcnN0X2Jhc2U7Ci0JdTY0CWVyc3RfZGVxdWV1ZTsKKwlfX2xlMzIJaXJxX3BlbmRpbmc7CisJX19sZTMyCWlycV9jb250cm9sOworCV9fbGUzMgllcnN0X3NpemU7CisJX19sZTMyCXJzdmQ7CisJX19sZTY0CWVyc3RfYmFzZTsKKwlfX2xlNjQJZXJzdF9kZXF1ZXVlOwogfTsKIAogLyogaXJxX3BlbmRpbmcgYml0bWFza3MgKi8KQEAgLTQzMiw4ICs0MzIsOCBAQAogICogb3IgbGFyZ2VyIGFjY2Vzc2VzIgogICovCiBzdHJ1Y3QgeGhjaV9ydW5fcmVncyB7Ci0JdTMyCQkJbWljcm9mcmFtZV9pbmRleDsKLQl1MzIJCQlyc3ZkWzddOworCV9fbGUzMgkJCW1pY3JvZnJhbWVfaW5kZXg7CisJX19sZTMyCQkJcnN2ZFs3XTsKIAlzdHJ1Y3QgeGhjaV9pbnRyX3JlZwlpcl9zZXRbMTI4XTsKIH07CiAKQEAgLTQ0Nyw3ICs0NDcsNyBAQAogICogU2VjdGlvbiA1LjYKICAqLwogc3RydWN0IHhoY2lfZG9vcmJlbGxfYXJyYXkgewotCXUzMglkb29yYmVsbFsyNTZdOworCV9fbGUzMglkb29yYmVsbFsyNTZdOwogfTsKIAogI2RlZmluZSBEQl9WQUxVRShlcCwgc3RyZWFtKQkoKCgoZXApICsgMSkgJiAweGZmKSB8ICgoc3RyZWFtKSA8PCAxNikpCkBAIC01MDQsMTIgKzUwNCwxMiBAQAogICogcmVzZXJ2ZWQgYXQgdGhlIGVuZCBvZiB0aGUgc2xvdCBjb250ZXh0IGZvciBIQyBpbnRlcm5hbCB1c2UuCiAgKi8KIHN0cnVjdCB4aGNpX3Nsb3RfY3R4IHsKLQl1MzIJZGV2X2luZm87Ci0JdTMyCWRldl9pbmZvMjsKLQl1MzIJdHRfaW5mbzsKLQl1MzIJZGV2X3N0YXRlOworCV9fbGUzMglkZXZfaW5mbzsKKwlfX2xlMzIJZGV2X2luZm8yOworCV9fbGUzMgl0dF9pbmZvOworCV9fbGUzMglkZXZfc3RhdGU7CiAJLyogb2Zmc2V0IDB4MTAgdG8gMHgxZiByZXNlcnZlZCBmb3IgSEMgaW50ZXJuYWwgdXNlICovCi0JdTMyCXJlc2VydmVkWzRdOworCV9fbGUzMglyZXNlcnZlZFs0XTsKIH07CiAKIC8qIGRldl9pbmZvIGJpdG1hc2tzICovCkBAIC01ODAsMTIgKzU4MCwxMiBAQAogICogcmVzZXJ2ZWQgYXQgdGhlIGVuZCBvZiB0aGUgZW5kcG9pbnQgY29udGV4dCBmb3IgSEMgaW50ZXJuYWwgdXNlLgogICovCiBzdHJ1Y3QgeGhjaV9lcF9jdHggewotCXUzMgllcF9pbmZvOwotCXUzMgllcF9pbmZvMjsKLQl1NjQJZGVxOwotCXUzMgl0eF9pbmZvOworCV9fbGUzMgllcF9pbmZvOworCV9fbGUzMgllcF9pbmZvMjsKKwlfX2xlNjQJZGVxOworCV9fbGUzMgl0eF9pbmZvOwogCS8qIG9mZnNldCAweDE0IC0gMHgxZiByZXNlcnZlZCBmb3IgSEMgaW50ZXJuYWwgdXNlICovCi0JdTMyCXJlc2VydmVkWzNdOworCV9fbGUzMglyZXNlcnZlZFszXTsKIH07CiAKIC8qIGVwX2luZm8gYml0bWFza3MgKi8KQEAgLTY2MCw5ICs2NjAsOSBAQAogICogQGFkZF9jb250ZXh0OglzZXQgdGhlIGJpdCBvZiB0aGUgZW5kcG9pbnQgY29udGV4dCB5b3Ugd2FudCB0byBlbmFibGUKICAqLwogc3RydWN0IHhoY2lfaW5wdXRfY29udHJvbF9jdHggewotCXUzMglkcm9wX2ZsYWdzOwotCXUzMglhZGRfZmxhZ3M7Ci0JdTMyCXJzdmQyWzZdOworCV9fbGUzMglkcm9wX2ZsYWdzOworCV9fbGUzMglhZGRfZmxhZ3M7CisJX19sZTMyCXJzdmQyWzZdOwogfTsKIAogLyogUmVwcmVzZW50cyBldmVyeXRoaW5nIHRoYXQgaXMgbmVlZGVkIHRvIGlzc3VlIGEgY29tbWFuZCBvbiB0aGUgY29tbWFuZCByaW5nLgpAQCAtNjg4LDkgKzY4OCw5IEBACiAKIHN0cnVjdCB4aGNpX3N0cmVhbV9jdHggewogCS8qIDY0LWJpdCBzdHJlYW0gcmluZyBhZGRyZXNzLCBjeWNsZSBzdGF0ZSwgYW5kIHN0cmVhbSB0eXBlICovCi0JdTY0CXN0cmVhbV9yaW5nOworCV9fbGU2NAlzdHJlYW1fcmluZzsKIAkvKiBvZmZzZXQgMHgxNCAtIDB4MWYgcmVzZXJ2ZWQgZm9yIEhDIGludGVybmFsIHVzZSAqLwotCXUzMglyZXNlcnZlZFsyXTsKKwlfX2xlMzIJcmVzZXJ2ZWRbMl07CiB9OwogCiAvKiBTdHJlYW0gQ29udGV4dCBUeXBlcyAoc2VjdGlvbiA2LjQuMSkgLSBiaXRzIDM6MSBvZiBzdHJlYW0gY3R4IGRlcSBwdHIgKi8KQEAgLTgwMyw3ICs4MDMsNyBAQAogICovCiBzdHJ1Y3QgeGhjaV9kZXZpY2VfY29udGV4dF9hcnJheSB7CiAJLyogNjQtYml0IGRldmljZSBhZGRyZXNzZXM7IHdlIG9ubHkgd3JpdGUgMzItYml0IGFkZHJlc3NlcyAqLwotCXU2NAkJCWRldl9jb250ZXh0X3B0cnNbTUFYX0hDX1NMT1RTXTsKKwlfX2xlNjQJCQlkZXZfY29udGV4dF9wdHJzW01BWF9IQ19TTE9UU107CiAJLyogcHJpdmF0ZSB4SENEIHBvaW50ZXJzICovCiAJZG1hX2FkZHJfdAlkbWE7CiB9OwpAQCAtODE2LDEwICs4MTYsMTAgQEAKIAogc3RydWN0IHhoY2lfdHJhbnNmZXJfZXZlbnQgewogCS8qIDY0LWJpdCBidWZmZXIgYWRkcmVzcywgb3IgaW1tZWRpYXRlIGRhdGEgKi8KLQl1NjQJYnVmZmVyOwotCXUzMgl0cmFuc2Zlcl9sZW47CisJX19sZTY0CWJ1ZmZlcjsKKwlfX2xlMzIJdHJhbnNmZXJfbGVuOwogCS8qIFRoaXMgZmllbGQgaXMgaW50ZXJwcmV0ZWQgZGlmZmVyZW50bHkgYmFzZWQgb24gdGhlIHR5cGUgb2YgVFJCICovCi0JdTMyCWZsYWdzOworCV9fbGUzMglmbGFnczsKIH07CiAKIC8qKiBUcmFuc2ZlciBFdmVudCBiaXQgZmllbGRzICoqLwpAQCAtODgxLDcgKzg4MSw5IEBACiAjZGVmaW5lIENPTVBfU1RPUF9JTlZBTAkyNwogLyogQ29udHJvbCBBYm9ydCBFcnJvciAtIERlYnVnIENhcGFiaWxpdHkgLSBjb250cm9sIHBpcGUgYWJvcnRlZCAqLwogI2RlZmluZSBDT01QX0RCR19BQk9SVAkyOAotLyogVFJCIHR5cGUgMjkgYW5kIDMwIHJlc2VydmVkICovCisvKiBNYXggRXhpdCBMYXRlbmN5IFRvbyBMYXJnZSBFcnJvciAqLworI2RlZmluZSBDT01QX01FTF9FUlIJMjkKKy8qIFRSQiB0eXBlIDMwIHJlc2VydmVkICovCiAvKiBJc29jIEJ1ZmZlciBPdmVycnVuIC0gYW4gaXNvYyBJTiBlcCBzZW50IG1vcmUgZGF0YSB0aGFuIGNvdWxkIGZpdCBpbiBURCAqLwogI2RlZmluZSBDT01QX0JVRkZfT1ZFUgkzMQogLyogRXZlbnQgTG9zdCBFcnJvciAtIHhIQyBoYXMgYW4gImludGVybmFsIGV2ZW50IG92ZXJydW4gY29uZGl0aW9uIiAqLwpAQCAtODk4LDkgKzkwMCw5IEBACiAKIHN0cnVjdCB4aGNpX2xpbmtfdHJiIHsKIAkvKiA2NC1iaXQgc2VnbWVudCBwb2ludGVyKi8KLQl1NjQgc2VnbWVudF9wdHI7Ci0JdTMyIGludHJfdGFyZ2V0OwotCXUzMiBjb250cm9sOworCV9fbGU2NCBzZWdtZW50X3B0cjsKKwlfX2xlMzIgaW50cl90YXJnZXQ7CisJX19sZTMyIGNvbnRyb2w7CiB9OwogCiAvKiBjb250cm9sIGJpdGZpZWxkcyAqLwpAQCAtOTA5LDkgKzkxMSw5IEBACiAvKiBDb21tYW5kIGNvbXBsZXRpb24gZXZlbnQgVFJCICovCiBzdHJ1Y3QgeGhjaV9ldmVudF9jbWQgewogCS8qIFBvaW50ZXIgdG8gY29tbWFuZCBUUkIsIG9yIHRoZSB2YWx1ZSBwYXNzZWQgYnkgdGhlIGV2ZW50IGRhdGEgdHJiICovCi0JdTY0IGNtZF90cmI7Ci0JdTMyIHN0YXR1czsKLQl1MzIgZmxhZ3M7CisJX19sZTY0IGNtZF90cmI7CisJX19sZTMyIHN0YXR1czsKKwlfX2xlMzIgZmxhZ3M7CiB9OwogCiAvKiBmbGFncyBiaXRtYXNrcyAqLwpAQCAtOTQzLDYgKzk0NSw4IEBACiAvKiBJbnRlcnJ1cHRlciBUYXJnZXQgLSB3aGljaCBNU0ktWCB2ZWN0b3IgdG8gdGFyZ2V0IHRoZSBjb21wbGV0aW9uIGV2ZW50IGF0ICovCiAjZGVmaW5lIFRSQl9JTlRSX1RBUkdFVChwKQkoKChwKSAmIDB4M2ZmKSA8PCAyMikKICNkZWZpbmUgR0VUX0lOVFJfVEFSR0VUKHApCSgoKHApID4+IDIyKSAmIDB4M2ZmKQorI2RlZmluZSBUUkJfVEJDKHApCQkoKChwKSAmIDB4MykgPDwgNykKKyNkZWZpbmUgVFJCX1RMQlBDKHApCQkoKChwKSAmIDB4ZikgPDwgMTYpCiAKIC8qIEN5Y2xlIGJpdCAtIGluZGljYXRlcyBUUkIgb3duZXJzaGlwIGJ5IEhDIG9yIEhDRCAqLwogI2RlZmluZSBUUkJfQ1lDTEUJCSgxPDwwKQpAQCAtOTYyLDE1ICs5NjYsMjAgQEAKIC8qIFRoZSBidWZmZXIgcG9pbnRlciBjb250YWlucyBpbW1lZGlhdGUgZGF0YSAqLwogI2RlZmluZSBUUkJfSURUCQkJKDE8PDYpCiAKKy8qIEJsb2NrIEV2ZW50IEludGVycnVwdCAqLworI2RlZmluZQlUUkJfQkVJCQkJKDE8PDkpCiAKIC8qIENvbnRyb2wgdHJhbnNmZXIgVFJCIHNwZWNpZmljIGZpZWxkcyAqLwogI2RlZmluZSBUUkJfRElSX0lOCQkoMTw8MTYpCisjZGVmaW5lCVRSQl9UWF9UWVBFKHApCQkoKHApIDw8IDE2KQorI2RlZmluZQlUUkJfREFUQV9PVVQJCTIKKyNkZWZpbmUJVFJCX0RBVEFfSU4JCTMKIAogLyogSXNvY2hyb25vdXMgVFJCIHNwZWNpZmljIGZpZWxkcyAqLwogI2RlZmluZSBUUkJfU0lBCQkJKDE8PDMxKQogCiBzdHJ1Y3QgeGhjaV9nZW5lcmljX3RyYiB7Ci0JdTMyIGZpZWxkWzRdOworCV9fbGUzMiBmaWVsZFs0XTsKIH07CiAKIHVuaW9uIHhoY2lfdHJiIHsKQEAgLTExMTgsMTAgKzExMjcsMTAgQEAKIAogc3RydWN0IHhoY2lfZXJzdF9lbnRyeSB7CiAJLyogNjQtYml0IGV2ZW50IHJpbmcgc2VnbWVudCBhZGRyZXNzICovCi0JdTY0CXNlZ19hZGRyOwotCXUzMglzZWdfc2l6ZTsKKwlfX2xlNjQJc2VnX2FkZHI7CisJX19sZTMyCXNlZ19zaXplOwogCS8qIFNldCB0byB6ZXJvICovCi0JdTMyCXJzdmQ7CisJX19sZTMyCXJzdmQ7CiB9OwogCiBzdHJ1Y3QgeGhjaV9lcnN0IHsKQEAgLTEyODYsMTAgKzEyOTUsMTAgQEAKIAkvKiBJcyBlYWNoIHhIQ0kgcm9vdGh1YiBwb3J0IGEgVVNCIDMuMCwgVVNCIDIuMCwgb3IgVVNCIDEuMSBwb3J0PyAqLwogCXU4CQkJKnBvcnRfYXJyYXk7CiAJLyogQXJyYXkgb2YgcG9pbnRlcnMgdG8gVVNCIDMuMCBQT1JUU0MgcmVnaXN0ZXJzICovCi0JdTMyIF9faW9tZW0JCSoqdXNiM19wb3J0czsKKwlfX2xlMzIgX19pb21lbQkJKip1c2IzX3BvcnRzOwogCXVuc2lnbmVkIGludAkJbnVtX3VzYjNfcG9ydHM7CiAJLyogQXJyYXkgb2YgcG9pbnRlcnMgdG8gVVNCIDIuMCBQT1JUU0MgcmVnaXN0ZXJzICovCi0JdTMyIF9faW9tZW0JCSoqdXNiMl9wb3J0czsKKwlfX2xlMzIgX19pb21lbQkJKip1c2IyX3BvcnRzOwogCXVuc2lnbmVkIGludAkJbnVtX3VzYjJfcG9ydHM7CiB9OwogCkBAIC0xMzIyLDEyICsxMzMxLDEyIEBACiAvKiBUT0RPOiBjb3BpZWQgZnJvbSBlaGNpLmggLSBjYW4gYmUgcmVmYWN0b3JlZD8gKi8KIC8qIHhIQ0kgc3BlYyBzYXlzIGFsbCByZWdpc3RlcnMgYXJlIGxpdHRsZSBlbmRpYW4gKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHhoY2lfcmVhZGwoY29uc3Qgc3RydWN0IHhoY2lfaGNkICp4aGNpLAotCQlfX3UzMiBfX2lvbWVtICpyZWdzKQorCQlfX2xlMzIgX19pb21lbSAqcmVncykKIHsKIAlyZXR1cm4gcmVhZGwocmVncyk7CiB9CiBzdGF0aWMgaW5saW5lIHZvaWQgeGhjaV93cml0ZWwoc3RydWN0IHhoY2lfaGNkICp4aGNpLAotCQljb25zdCB1bnNpZ25lZCBpbnQgdmFsLCBfX3UzMiBfX2lvbWVtICpyZWdzKQorCQljb25zdCB1bnNpZ25lZCBpbnQgdmFsLCBfX2xlMzIgX19pb21lbSAqcmVncykKIHsKIAl4aGNpX2RiZyh4aGNpLAogCQkJImBNRU1fV1JJVEVfRFdPUkQoMydiMDAwLCAzMidoJXAsIDMyJ2glMHgsIDQnaGYpO1xuIiwKQEAgLTEzNDUsNyArMTM1NCw3IEBACiAgKiB0aGUgaGlnaCBkd29yZCwgYW5kIHdyaXRlIG9yZGVyIGlzIGlycmVsZXZhbnQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdTY0IHhoY2lfcmVhZF82NChjb25zdCBzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCi0JCV9fdTY0IF9faW9tZW0gKnJlZ3MpCisJCV9fbGU2NCBfX2lvbWVtICpyZWdzKQogewogCV9fdTMyIF9faW9tZW0gKnB0ciA9IChfX3UzMiBfX2lvbWVtICopIHJlZ3M7CiAJdTY0IHZhbF9sbyA9IHJlYWRsKHB0cik7CkBAIC0xMzUzLDcgKzEzNjIsNyBAQAogCXJldHVybiB2YWxfbG8gKyAodmFsX2hpIDw8IDMyKTsKIH0KIHN0YXRpYyBpbmxpbmUgdm9pZCB4aGNpX3dyaXRlXzY0KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKLQkJY29uc3QgdTY0IHZhbCwgX191NjQgX19pb21lbSAqcmVncykKKwkJCQkgY29uc3QgdTY0IHZhbCwgX19sZTY0IF9faW9tZW0gKnJlZ3MpCiB7CiAJX191MzIgX19pb21lbSAqcHRyID0gKF9fdTMyIF9faW9tZW0gKikgcmVnczsKIAl1MzIgdmFsX2xvID0gbG93ZXJfMzJfYml0cyh2YWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9mdGRpLWVsYW4uYyBiL2RyaXZlcnMvdXNiL21pc2MvZnRkaS1lbGFuLmMKaW5kZXggNzgzOWM5OC4uYjE2YmQzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9mdGRpLWVsYW4uYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2Z0ZGktZWxhbi5jCkBAIC0yODg5LDggKzI4ODksNyBAQAogc3RhdGljIGludCBfX2luaXQgZnRkaV9lbGFuX2luaXQodm9pZCkKIHsKICAgICAgICAgaW50IHJlc3VsdDsKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiZHJpdmVyICVzIGJ1aWx0IGF0ICVzIG9uICVzXG4iLCBmdGRpX2VsYW5fZHJpdmVyLm5hbWUsCi0JICAgICAgIF9fVElNRV9fLCBfX0RBVEVfXyk7CisgICAgICAgIHByaW50ayhLRVJOX0lORk8gImRyaXZlciAlc1xuIiwgZnRkaV9lbGFuX2RyaXZlci5uYW1lKTsKICAgICAgICAgbXV0ZXhfaW5pdCgmZnRkaV9tb2R1bGVfbG9jayk7CiAgICAgICAgIElOSVRfTElTVF9IRUFEKCZmdGRpX3N0YXRpY19saXN0KTsKICAgICAgICAgc3RhdHVzX3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImZ0ZGktc3RhdHVzLWNvbnRyb2wiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvbGR1c2IuYyBiL2RyaXZlcnMvdXNiL21pc2MvbGR1c2IuYwppbmRleCBlZWZiODI3Li5jYjQwOTYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2xkdXNiLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9sZHVzYi5jCkBAIC0yMCwxMSArMjAsNiBAQAogICogRGVyaXZlZCBmcm9tIExlZ28gVVNCIFRvd2VyIGRyaXZlcgogICogQ29weXJpZ2h0IChDKSAyMDAzIERhdmlkIEdsYW5jZSA8YWR2aWRnc2ZAc291cmNlZm9yZ2UubmV0PgogICoJCSAyMDAxLTIwMDQgSnVlcmdlbiBTdHViZXIgPHN0YXJibHVlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLSAqCi0gKiBWMC4xICAobWgpIEluaXRpYWwgdmVyc2lvbgotICogVjAuMTEgKG1oKSBBZGRlZCByYXcgc3VwcG9ydCBmb3IgSElEIDEuMCBkZXZpY2VzIChubyBpbnRlcnJ1cHQgb3V0IGVuZHBvaW50KQotICogVjAuMTIgKG1oKSBBZGRlZCBrbWFsbG9jIGNoZWNrIGZvciBzdHJpbmcgYnVmZmVyCi0gKiBWMC4xMyAobWgpIEFkZGVkIHN1cHBvcnQgZm9yIExEIFgtUmF5IGFuZCBNYWNoaW5lIFRlc3QgU3lzdGVtCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtNDEsMjAgKzM2LDM5IEBACiAKIC8qIERlZmluZSB0aGVzZSB2YWx1ZXMgdG8gbWF0Y2ggeW91ciBkZXZpY2VzICovCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfTEQJCTB4MGYxMQkvKiBVU0IgVmVuZG9yIElEIG9mIExEIERpZGFjdGljIEdtYkggKi8KLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9DQVNTWQkJMHgxMDAwCS8qIFVTQiBQcm9kdWN0IElEIG9mIENBU1NZLVMgKi8KKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9DQVNTWQkJMHgxMDAwCS8qIFVTQiBQcm9kdWN0IElEIG9mIENBU1NZLVMgbW9kdWxlcyB3aXRoIDggYnl0ZXMgZW5kcG9pbnQgc2l6ZSAqLworI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX0NBU1NZMgkJMHgxMDAxCS8qIFVTQiBQcm9kdWN0IElEIG9mIENBU1NZLVMgbW9kdWxlcyB3aXRoIDY0IGJ5dGVzIGVuZHBvaW50IHNpemUgKi8KICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9QT0NLRVRDQVNTWQkweDEwMTAJLyogVVNCIFByb2R1Y3QgSUQgb2YgUG9ja2V0LUNBU1NZICovCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfUE9DS0VUQ0FTU1kyCTB4MTAxMQkvKiBVU0IgUHJvZHVjdCBJRCBvZiBQb2NrZXQtQ0FTU1kgMiAocmVzZXJ2ZWQpICovCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfTU9CSUxFQ0FTU1kJMHgxMDIwCS8qIFVTQiBQcm9kdWN0IElEIG9mIE1vYmlsZS1DQVNTWSAqLworI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX01PQklMRUNBU1NZMgkweDEwMjEJLyogVVNCIFByb2R1Y3QgSUQgb2YgTW9iaWxlLUNBU1NZIDIgKHJlc2VydmVkKSAqLworI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX01JQ1JPQ0FTU1lWT0xUQUdFCTB4MTAzMQkvKiBVU0IgUHJvZHVjdCBJRCBvZiBNaWNyby1DQVNTWSBWb2x0YWdlICovCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfTUlDUk9DQVNTWUNVUlJFTlQJMHgxMDMyCS8qIFVTQiBQcm9kdWN0IElEIG9mIE1pY3JvLUNBU1NZIEN1cnJlbnQgKi8KKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9NSUNST0NBU1NZVElNRQkJMHgxMDMzCS8qIFVTQiBQcm9kdWN0IElEIG9mIE1pY3JvLUNBU1NZIFRpbWUgKHJlc2VydmVkKSAqLworI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX01JQ1JPQ0FTU1lURU1QRVJBVFVSRQkweDEwMzUJLyogVVNCIFByb2R1Y3QgSUQgb2YgTWljcm8tQ0FTU1kgVGVtcGVyYXR1cmUgKi8KKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9NSUNST0NBU1NZUEgJCTB4MTAzOAkvKiBVU0IgUHJvZHVjdCBJRCBvZiBNaWNyby1DQVNTWSBwSCAqLwogI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX0pXTQkJMHgxMDgwCS8qIFVTQiBQcm9kdWN0IElEIG9mIEpvdWxlIGFuZCBXYXR0bWV0ZXIgKi8KICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9ETU1QCQkweDEwODEJLyogVVNCIFByb2R1Y3QgSUQgb2YgRGlnaXRhbCBNdWx0aW1ldGVyIFAgKHJlc2VydmVkKSAqLwogI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX1VNSVAJCTB4MTA5MAkvKiBVU0IgUHJvZHVjdCBJRCBvZiBVTUkgUCAqLwotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX1hSQVkxCQkweDExMDAJLyogVVNCIFByb2R1Y3QgSUQgb2YgWC1SYXkgQXBwYXJhdHVzICovCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfWFJBWTIJCTB4MTEwMQkvKiBVU0IgUHJvZHVjdCBJRCBvZiBYLVJheSBBcHBhcmF0dXMgKi8KKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9VTUlDCQkweDEwQTAJLyogVVNCIFByb2R1Y3QgSUQgb2YgVU1JIEMgKi8KKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9VTUlCCQkweDEwQjAJLyogVVNCIFByb2R1Y3QgSUQgb2YgVU1JIEIgKi8KKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9YUkFZCQkweDExMDAJLyogVVNCIFByb2R1Y3QgSUQgb2YgWC1SYXkgQXBwYXJhdHVzIDU1NDgxICovCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfWFJBWTIJCTB4MTEwMQkvKiBVU0IgUHJvZHVjdCBJRCBvZiBYLVJheSBBcHBhcmF0dXMgNTU0ODAwICovCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfWFJBWUNUCQkweDExMTAJLyogVVNCIFByb2R1Y3QgSUQgb2YgWC1SYXkgQXBwYXJhdHVzIENUIDU1NDgyMSovCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfVklERU9DT00JMHgxMjAwCS8qIFVTQiBQcm9kdWN0IElEIG9mIFZpZGVvQ29tICovCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfTU9UT1IJCTB4MTIxMAkvKiBVU0IgUHJvZHVjdCBJRCBvZiBNb3RvciAocmVzZXJ2ZWQpICovCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfQ09NM0xBQgkweDIwMDAJLyogVVNCIFByb2R1Y3QgSUQgb2YgQ09NM0xBQiAqLwogI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX1RFTEVQT1JUCTB4MjAxMAkvKiBVU0IgUHJvZHVjdCBJRCBvZiBUZXJtaW5hbCBBZGFwdGVyICovCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfTkVUV09SS0FOQUxZU0VSIDB4MjAyMAkvKiBVU0IgUHJvZHVjdCBJRCBvZiBOZXR3b3JrIEFuYWx5c2VyICovCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfUE9XRVJDT05UUk9MCTB4MjAzMAkvKiBVU0IgUHJvZHVjdCBJRCBvZiBDb252ZXJ0ZXIgQ29udHJvbCBVbml0ICovCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfTUFDSElORVRFU1QJMHgyMDQwCS8qIFVTQiBQcm9kdWN0IElEIG9mIE1hY2hpbmUgVGVzdCBTeXN0ZW0gKi8KKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9NT1NUQU5BTFlTRVIJMHgyMDUwCS8qIFVTQiBQcm9kdWN0IElEIG9mIE1PU1QgUHJvdG9jb2wgQW5hbHlzZXIgKi8KKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9NT1NUQU5BTFlTRVIyCTB4MjA1MQkvKiBVU0IgUHJvZHVjdCBJRCBvZiBNT1NUIFByb3RvY29sIEFuYWx5c2VyIDIgKi8KKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9BQlNFU1AJCTB4MjA2MAkvKiBVU0IgUHJvZHVjdCBJRCBvZiBBQlMgRVNQICovCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfQVVUT0RBVEFCVVMJMHgyMDcwCS8qIFVTQiBQcm9kdWN0IElEIG9mIEF1dG9tb3RpdmUgRGF0YSBCdXNlcyAqLworI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX01DVAkJMHgyMDgwCS8qIFVTQiBQcm9kdWN0IElEIG9mIE1pY3JvY29udHJvbGxlciB0ZWNobmlxdWUgKi8KKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9IWUJSSUQJCTB4MjA5MAkvKiBVU0IgUHJvZHVjdCBJRCBvZiBBdXRvbW90aXZlIEh5YnJpZCAqLworI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX0hFQVRDT05UUk9MCTB4MjBBMAkvKiBVU0IgUHJvZHVjdCBJRCBvZiBIZWF0IGNvbnRyb2wgKi8KIAogI2RlZmluZSBVU0JfVkVORE9SX0lEX1ZFUk5JRVIJCTB4MDhmNwogI2RlZmluZSBVU0JfREVWSUNFX0lEX1ZFUk5JRVJfR09URU1QCTB4MDAwMgpAQCAtNzEsMTkgKzg1LDM3IEBACiAvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgbGRfdXNiX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfQ0FTU1kpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfQ0FTU1kyKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX1BPQ0tFVENBU1NZKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX1BPQ0tFVENBU1NZMikgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9NT0JJTEVDQVNTWSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9NT0JJTEVDQVNTWTIpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfTUlDUk9DQVNTWVZPTFRBR0UpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfTUlDUk9DQVNTWUNVUlJFTlQpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfTUlDUk9DQVNTWVRJTUUpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfTUlDUk9DQVNTWVRFTVBFUkFUVVJFKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX01JQ1JPQ0FTU1lQSCkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9KV00pIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfRE1NUCkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9VTUlQKSB9LAotCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX1hSQVkxKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX1VNSUMpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfVU1JQikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9YUkFZKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX1hSQVkyKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX1ZJREVPQ09NKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX01PVE9SKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX0NPTTNMQUIpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfVEVMRVBPUlQpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfTkVUV09SS0FOQUxZU0VSKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX1BPV0VSQ09OVFJPTCkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9NQUNISU5FVEVTVCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9NT1NUQU5BTFlTRVIpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfTU9TVEFOQUxZU0VSMikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9BQlNFU1ApIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfQVVUT0RBVEFCVVMpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfTUNUKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX0hZQlJJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9IRUFUQ09OVFJPTCkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9WRVJOSUVSLCBVU0JfREVWSUNFX0lEX1ZFUk5JRVJfR09URU1QKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1ZFUk5JRVIsIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9TS0lQKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1ZFUk5JRVIsIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9DWUNMT1BTKSB9LApAQCAtOTEsNyArMTIzLDcgQEAKIAl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGxkX3VzYl90YWJsZSk7Ci1NT0RVTEVfVkVSU0lPTigiVjAuMTMiKTsKK01PRFVMRV9WRVJTSU9OKCJWMC4xNCIpOwogTU9EVUxFX0FVVEhPUigiTWljaGFlbCBIdW5kIDxtaHVuZEBsZC1kaWRhY3RpYy5kZT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiTEQgVVNCIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c2J0ZXN0LmMgYi9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYwppbmRleCAzODhjYzEyLi5iYjEwODQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYwpAQCAtMTA0LDcgKzEwNCw3IEBACiAJCWFsdCA9IGludGYtPmFsdHNldHRpbmcgKyB0bXA7CiAKIAkJLyogdGFrZSB0aGUgZmlyc3QgYWx0c2V0dGluZyB3aXRoIGluLWJ1bGsgKyBvdXQtYnVsazsKLQkJICogaWdub3JlIG90aGVyIGVuZHBvaW50cyBhbmQgYWx0c2V0dHRpbmdzLgorCQkgKiBpZ25vcmUgb3RoZXIgZW5kcG9pbnRzIGFuZCBhbHRzZXR0aW5ncy4KIAkJICovCiAJCWZvciAoZXAgPSAwOyBlcCA8IGFsdC0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBlcCsrKSB7CiAJCQlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQJKmU7CkBAIC0yNjgsOSArMjY4LDkgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgYnVmZmVyX29mZnNldCh2b2lkICpidWYpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYnVmZmVyX29mZnNldCh2b2lkICpidWYpCiB7Ci0JcmV0dXJuICh1bnNpZ25lZClidWYgJiAoQVJDSF9LTUFMTE9DX01JTkFMSUdOIC0gMSk7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKWJ1ZiAmIChBUkNIX0tNQUxMT0NfTUlOQUxJR04gLSAxKTsKIH0KIAogc3RhdGljIGludCBjaGVja19ndWFyZF9ieXRlcyhzdHJ1Y3QgdXNidGVzdF9kZXYgKnRkZXYsIHN0cnVjdCB1cmIgKnVyYikKQEAgLTMyOSw3ICszMjksNyBAQAogCiBzdGF0aWMgdm9pZCBzaW1wbGVfZnJlZV91cmIoc3RydWN0IHVyYiAqdXJiKQogewotCXVuc2lnbmVkIG9mZnNldCA9IGJ1ZmZlcl9vZmZzZXQodXJiLT50cmFuc2Zlcl9idWZmZXIpOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gYnVmZmVyX29mZnNldCh1cmItPnRyYW5zZmVyX2J1ZmZlcik7CiAKIAlpZiAodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQKQogCQl1c2JfZnJlZV9jb2hlcmVudCgKQEAgLTEwMzAsNiArMTAzMCw4IEBACiAJCQlyZXEud1ZhbHVlID0gY3B1X3RvX2xlMTYoKFVTQl9EVF9ERVZJQ0UgPDwgOCkgfCAwKTsKIAkJCS8qIGRldmljZSBkZXNjcmlwdG9yIHNpemUgPT0gMTggYnl0ZXMgKi8KIAkJCWxlbiA9IHVkZXYtPmRlc2NyaXB0b3IuYk1heFBhY2tldFNpemUwOworCQkJaWYgKHVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9TVVBFUikKKwkJCQlsZW4gPSA1MTI7CiAJCQlzd2l0Y2ggKGxlbikgewogCQkJY2FzZSA4OgogCQkJCWxlbiA9IDI0OwpAQCAtMTE5NSw2ICsxMTk3LDEwNCBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCitzdHJ1Y3QgcXVldWVkX2N0eCB7CisJc3RydWN0IGNvbXBsZXRpb24JY29tcGxldGU7CisJYXRvbWljX3QJCXBlbmRpbmc7CisJdW5zaWduZWQJCW51bTsKKwlpbnQJCQlzdGF0dXM7CisJc3RydWN0IHVyYgkJKip1cmJzOworfTsKKworc3RhdGljIHZvaWQgdW5saW5rX3F1ZXVlZF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJaW50CQkJc3RhdHVzID0gdXJiLT5zdGF0dXM7CisJc3RydWN0IHF1ZXVlZF9jdHgJKmN0eCA9IHVyYi0+Y29udGV4dDsKKworCWlmIChjdHgtPnN0YXR1cykKKwkJZ290byBkb25lOworCWlmICh1cmIgPT0gY3R4LT51cmJzW2N0eC0+bnVtIC0gNF0gfHwgdXJiID09IGN0eC0+dXJic1tjdHgtPm51bSAtIDJdKSB7CisJCWlmIChzdGF0dXMgPT0gLUVDT05OUkVTRVQpCisJCQlnb3RvIGRvbmU7CisJCS8qIFdoYXQgZXJyb3Igc2hvdWxkIHdlIHJlcG9ydCBpZiB0aGUgVVJCIGNvbXBsZXRlZCBub3JtYWxseT8gKi8KKwl9CisJaWYgKHN0YXR1cyAhPSAwKQorCQljdHgtPnN0YXR1cyA9IHN0YXR1czsKKworIGRvbmU6CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmN0eC0+cGVuZGluZykpCisJCWNvbXBsZXRlKCZjdHgtPmNvbXBsZXRlKTsKK30KKworc3RhdGljIGludCB1bmxpbmtfcXVldWVkKHN0cnVjdCB1c2J0ZXN0X2RldiAqZGV2LCBpbnQgcGlwZSwgdW5zaWduZWQgbnVtLAorCQl1bnNpZ25lZCBzaXplKQoreworCXN0cnVjdCBxdWV1ZWRfY3R4CWN0eDsKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldiA9IHRlc3RkZXZfdG9fdXNiZGV2KGRldik7CisJdm9pZAkJCSpidWY7CisJZG1hX2FkZHJfdAkJYnVmX2RtYTsKKwlpbnQJCQlpOworCWludAkJCXJldHZhbCA9IC1FTk9NRU07CisKKwlpbml0X2NvbXBsZXRpb24oJmN0eC5jb21wbGV0ZSk7CisJYXRvbWljX3NldCgmY3R4LnBlbmRpbmcsIDEpOwkvKiBPbmUgbW9yZSB0aGFuIHRoZSBhY3R1YWwgdmFsdWUgKi8KKwljdHgubnVtID0gbnVtOworCWN0eC5zdGF0dXMgPSAwOworCisJYnVmID0gdXNiX2FsbG9jX2NvaGVyZW50KHVkZXYsIHNpemUsIEdGUF9LRVJORUwsICZidWZfZG1hKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIHJldHZhbDsKKwltZW1zZXQoYnVmLCAwLCBzaXplKTsKKworCS8qIEFsbG9jYXRlIGFuZCBpbml0IHRoZSB1cmJzIHdlJ2xsIHF1ZXVlICovCisJY3R4LnVyYnMgPSBrY2FsbG9jKG51bSwgc2l6ZW9mKHN0cnVjdCB1cmIgKiksIEdGUF9LRVJORUwpOworCWlmICghY3R4LnVyYnMpCisJCWdvdG8gZnJlZV9idWY7CisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCWN0eC51cmJzW2ldID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFjdHgudXJic1tpXSkKKwkJCWdvdG8gZnJlZV91cmJzOworCQl1c2JfZmlsbF9idWxrX3VyYihjdHgudXJic1tpXSwgdWRldiwgcGlwZSwgYnVmLCBzaXplLAorCQkJCXVubGlua19xdWV1ZWRfY2FsbGJhY2ssICZjdHgpOworCQljdHgudXJic1tpXS0+dHJhbnNmZXJfZG1hID0gYnVmX2RtYTsKKwkJY3R4LnVyYnNbaV0tPnRyYW5zZmVyX2ZsYWdzID0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisJfQorCisJLyogU3VibWl0IGFsbCB0aGUgVVJCcyBhbmQgdGhlbiB1bmxpbmsgVVJCcyBudW0gLSA0IGFuZCBudW0gLSAyLiAqLworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgeworCQlhdG9taWNfaW5jKCZjdHgucGVuZGluZyk7CisJCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKGN0eC51cmJzW2ldLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJldHZhbCAhPSAwKSB7CisJCQlkZXZfZXJyKCZkZXYtPmludGYtPmRldiwgInN1Ym1pdCB1cmJzWyVkXSBmYWlsICVkXG4iLAorCQkJCQlpLCByZXR2YWwpOworCQkJYXRvbWljX2RlYygmY3R4LnBlbmRpbmcpOworCQkJY3R4LnN0YXR1cyA9IHJldHZhbDsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChpID09IG51bSkgeworCQl1c2JfdW5saW5rX3VyYihjdHgudXJic1tudW0gLSA0XSk7CisJCXVzYl91bmxpbmtfdXJiKGN0eC51cmJzW251bSAtIDJdKTsKKwl9IGVsc2UgeworCQl3aGlsZSAoLS1pID49IDApCisJCQl1c2JfdW5saW5rX3VyYihjdHgudXJic1tpXSk7CisJfQorCisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmN0eC5wZW5kaW5nKSkJCS8qIFRoZSBleHRyYSBjb3VudCAqLworCQljb21wbGV0ZSgmY3R4LmNvbXBsZXRlKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjdHguY29tcGxldGUpOworCXJldHZhbCA9IGN0eC5zdGF0dXM7CisKKyBmcmVlX3VyYnM6CisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKQorCQl1c2JfZnJlZV91cmIoY3R4LnVyYnNbaV0pOworCWtmcmVlKGN0eC51cmJzKTsKKyBmcmVlX2J1ZjoKKwl1c2JfZnJlZV9jb2hlcmVudCh1ZGV2LCBzaXplLCBidWYsIGJ1Zl9kbWEpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKIHN0YXRpYyBpbnQgdmVyaWZ5X25vdF9oYWx0ZWQoc3RydWN0IHVzYnRlc3RfZGV2ICp0ZGV2LCBpbnQgZXAsIHN0cnVjdCB1cmIgKnVyYikKIHsKIAlpbnQJcmV0dmFsOwpAQCAtMTk3MCw4ICsyMDcwLDYgQEAKIAkJCQlkZXYtPmluX2lzb19waXBlLCBkZXYtPmlzb19pbiwgMCk7CiAJCWJyZWFrOwogCi0JLyogRklYTUUgdW5saW5rIGZyb20gcXVldWUgKHJpbmcgd2l0aCBOIHVyYnMpICovCi0KIAkvKiBGSVhNRSBzY2F0dGVybGlzdCBjYW5jZWwgKG5lZWRzIGhlbHBlciB0aHJlYWQpICovCiAKIAkvKiBUZXN0cyBmb3IgYnVsayBJL08gdXNpbmcgRE1BIG1hcHBpbmcgYnkgY29yZSBhbmQgb2RkIGFkZHJlc3MgKi8KQEAgLTIwNjQsNiArMjE2MiwyNiBAQAogCQkJCWRldi0+aW5faXNvX3BpcGUsIGRldi0+aXNvX2luLCAxKTsKIAkJYnJlYWs7CiAKKwkvKiB1bmxpbmsgVVJCcyBmcm9tIGEgYnVsay1PVVQgcXVldWUgKi8KKwljYXNlIDI0OgorCQlpZiAoZGV2LT5vdXRfcGlwZSA9PSAwIHx8ICFwYXJhbS0+bGVuZ3RoIHx8IHBhcmFtLT5zZ2xlbiA8IDQpCisJCQlicmVhazsKKwkJcmV0dmFsID0gMDsKKwkJZGV2X2luZm8oJmludGYtPmRldiwgIlRFU1QgMTc6ICB1bmxpbmsgZnJvbSAlZCBxdWV1ZXMgb2YgIgorCQkJCSIlZCAlZC1ieXRlIHdyaXRlc1xuIiwKKwkJCQlwYXJhbS0+aXRlcmF0aW9ucywgcGFyYW0tPnNnbGVuLCBwYXJhbS0+bGVuZ3RoKTsKKwkJZm9yIChpID0gcGFyYW0tPml0ZXJhdGlvbnM7IHJldHZhbCA9PSAwICYmIGkgPiAwOyAtLWkpIHsKKwkJCXJldHZhbCA9IHVubGlua19xdWV1ZWQoZGV2LCBkZXYtPm91dF9waXBlLAorCQkJCQkJcGFyYW0tPnNnbGVuLCBwYXJhbS0+bGVuZ3RoKTsKKwkJCWlmIChyZXR2YWwpIHsKKwkJCQlkZXZfZXJyKCZpbnRmLT5kZXYsCisJCQkJCSJ1bmxpbmsgcXVldWVkIHdyaXRlcyBmYWlsZWQgJWQsICIKKwkJCQkJIml0ZXJhdGlvbnMgbGVmdCAlZFxuIiwgcmV0dmFsLCBpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlicmVhazsKKwogCX0KIAlkb19nZXR0aW1lb2ZkYXkoJnBhcmFtLT5kdXJhdGlvbik7CiAJcGFyYW0tPmR1cmF0aW9uLnR2X3NlYyAtPSBzdGFydC50dl9zZWM7CkBAIC0yMTkyLDYgKzIzMTAsOSBAQAogCQkJY2FzZSBVU0JfU1BFRURfSElHSDoKIAkJCQl0bXAgPSAiaGlnaCI7CiAJCQkJYnJlYWs7CisJCQljYXNlIFVTQl9TUEVFRF9TVVBFUjoKKwkJCQl0bXAgPSAic3VwZXIiOworCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQl0bXAgPSAidW5rbm93biI7CiAJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcgYi9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKaW5kZXggNzQwNzNiMy4uMTMwOTM0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZwpAQCAtMTQsNyArMTQsNyBAQAogCXNlbGVjdCBUV0w0MDMwX1VTQiBpZiBNQUNIX09NQVBfMzQzMFNEUAogCXNlbGVjdCBUV0w2MDMwX1VTQiBpZiBNQUNIX09NQVBfNDQzMFNEUCB8fCBNQUNIX09NQVA0X1BBTkRBCiAJc2VsZWN0IFVTQl9PVEdfVVRJTFMKLQlib29sICdJbnZlbnRyYSBIaWdoc3BlZWQgRHVhbCBSb2xlIENvbnRyb2xsZXIgKFRJLCBBREksIC4uLiknCisJdHJpc3RhdGUgJ0ludmVudHJhIEhpZ2hzcGVlZCBEdWFsIFJvbGUgQ29udHJvbGxlciAoVEksIEFESSwgLi4uKScKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdXIgc3lzdGVtIGhhcyBhIGR1YWwgcm9sZSBoaWdoIHNwZWVkIFVTQgogCSAgY29udHJvbGxlciBiYXNlZCBvbiB0aGUgTWVudG9yIEdyYXBoaWNzIHNpbGljb24gSVAuICBUaGVuCkBAIC0zMCwzOSArMzAsMzkgQEAKIAogCSAgSWYgeW91IGRvIG5vdCBrbm93IHdoYXQgdGhpcyBpcywgcGxlYXNlIHNheSBOLgogCi0jCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTsgdGhlCi0jCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkICJtdXNiLWhkcmMiLgorCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTsgdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgIm11c2ItaGRyYyIuCiAKIGNob2ljZQogCXByb21wdCAiUGxhdGZvcm0gR2x1ZSBMYXllciIKIAlkZXBlbmRzIG9uIFVTQl9NVVNCX0hEUkMKIAogY29uZmlnIFVTQl9NVVNCX0RBVklOQ0kKLQlib29sICJEYVZpbmNpIgorCXRyaXN0YXRlICJEYVZpbmNpIgogCWRlcGVuZHMgb24gQVJDSF9EQVZJTkNJX0RNeAogCiBjb25maWcgVVNCX01VU0JfREE4WFgKLQlib29sICJEQTh4eC9PTUFQLUwxeCIKKwl0cmlzdGF0ZSAiREE4eHgvT01BUC1MMXgiCiAJZGVwZW5kcyBvbiBBUkNIX0RBVklOQ0lfREE4WFgKIAogY29uZmlnIFVTQl9NVVNCX1RVU0I2MDEwCi0JYm9vbCAiVFVTQjYwMTAiCisJdHJpc3RhdGUgIlRVU0I2MDEwIgogCWRlcGVuZHMgb24gQVJDSF9PTUFQCiAKIGNvbmZpZyBVU0JfTVVTQl9PTUFQMlBMVVMKLQlib29sICJPTUFQMjQzMCBhbmQgb253YXJkcyIKKwl0cmlzdGF0ZSAiT01BUDI0MzAgYW5kIG9ud2FyZHMiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAyUExVUwogCiBjb25maWcgVVNCX01VU0JfQU0zNVgKLQlib29sICJBTTM1eCIKKwl0cmlzdGF0ZSAiQU0zNXgiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAKIAogY29uZmlnIFVTQl9NVVNCX0JMQUNLRklOCi0JYm9vbCAiQmxhY2tmaW4iCisJdHJpc3RhdGUgIkJsYWNrZmluIgogCWRlcGVuZHMgb24gKEJGNTR4ICYmICFCRjU0NCkgfHwgKEJGNTJ4ICYmICEgQkY1MjIgJiYgIUJGNTIzKQogCiBjb25maWcgVVNCX01VU0JfVVg1MDAKLQlib29sICJVODUwMCBhbmQgVTU1MDAiCisJdHJpc3RhdGUgIlU4NTAwIGFuZCBVNTUwMCIKIAlkZXBlbmRzIG9uIChBUkNIX1U4NTAwICYmIEFCODUwMF9VU0IpIHx8IChBUkNIX1U1NTAwKQogCiBlbmRjaG9pY2UKQEAgLTE1Myw2ICsxNTMsMTMgQEAKIAkgIHlvdSBjYW4gc3RpbGwgZGlzYWJsZSBpdCBhdCBydW4gdGltZSB1c2luZyB0aGUgInVzZV9kbWE9biIgbW9kdWxlCiAJICBwYXJhbWV0ZXIuCiAKK2NvbmZpZyBVU0JfVVg1MDBfRE1BCisJYm9vbAorCWRlcGVuZHMgb24gVVNCX01VU0JfSERSQyAmJiAhTVVTQl9QSU9fT05MWQorCWRlZmF1bHQgVVNCX01VU0JfVVg1MDAKKwloZWxwCisJICBFbmFibGUgRE1BIHRyYW5zZmVycyBvbiBVWDUwMCBwbGF0Zm9ybXMuCisKIGNvbmZpZyBVU0JfSU5WRU5UUkFfRE1BCiAJYm9vbAogCWRlcGVuZHMgb24gVVNCX01VU0JfSERSQyAmJiAhTVVTQl9QSU9fT05MWQpAQCAtMTc2LDExICsxODMsMyBAQAogCWhlbHAKIAkgIEVuYWJsZSBETUEgdHJhbnNmZXJzIG9uIFRVU0IgNjAxMCB3aGVuIE9NQVAgRE1BIGlzIGF2YWlsYWJsZS4KIAotY29uZmlnCVVTQl9NVVNCX0RFQlVHCi0JZGVwZW5kcyBvbiBVU0JfTVVTQl9IRFJDCi0JYm9vbCAiRW5hYmxlIGRlYnVnZ2luZyBtZXNzYWdlcyIKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgbXVzYiBkZWJ1Z2dpbmcuIFRvIHNldCB0aGUgbG9nZ2luZyBsZXZlbCB1c2UgdGhlIGRlYnVnCi0JICBtb2R1bGUgcGFyYW1ldGVyLiBTdGFydGluZyBhdCBsZXZlbCAzLCBwZXItdHJhbnNmZXIgKHVyYiwgdXNiX3JlcXVlc3QsCi0JICBwYWNrZXQsIG9yIGRtYSB0cmFuc2ZlcikgdHJhY2luZyBtYXkga2ljayBpbi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9tdXNiL01ha2VmaWxlCmluZGV4IDc0ZGY1MjguLmM0ZDIyOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvbXVzYi9NYWtlZmlsZQpAQCAtMiw4ICsyLDYgQEAKICMgZm9yIFVTQiBPVEcgc2lsaWNvbiBiYXNlZCBvbiBNZW50b3IgR3JhcGhpY3MgSU5WRU5UUkEgZGVzaWducwogIwogCi1jY2ZsYWdzLSQoQ09ORklHX1VTQl9NVVNCX0RFQlVHKSA6PSAtRERFQlVHCi0KIG9iai0kKENPTkZJR19VU0JfTVVTQl9IRFJDKSArPSBtdXNiX2hkcmMubwogCiBtdXNiX2hkcmMteSA6PSBtdXNiX2NvcmUubwpAQCAtMzksNiArMzcsMTEgQEAKICAgICAgIGlmZXEgKCQoQ09ORklHX1VTQl9UVVNCX09NQVBfRE1BKSx5KQogCW11c2JfaGRyYy15CQkrPSB0dXNiNjAxMF9vbWFwLm8KIAorICAgICAgZWxzZQorICAgICAgICBpZmVxICgkKENPTkZJR19VU0JfVVg1MDBfRE1BKSx5KQorCSAgbXVzYl9oZHJjLXkJCSs9IHV4NTAwX2RtYS5vCisKKyAgICAgICAgZW5kaWYKICAgICAgIGVuZGlmCiAgICAgZW5kaWYKICAgZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvYW0zNXguYyBiL2RyaXZlcnMvdXNiL211c2IvYW0zNXguYwppbmRleCBkNWEzZGEzLi4yM2FjMjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL2FtMzV4LmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9hbTM1eC5jCkBAIC0xNTEsNyArMTUxLDggQEAKIAkgKiBzdGF0dXMgY2hhbmdlIGV2ZW50cyAoZnJvbSB0aGUgdHJhbnNjZWl2ZXIpIG90aGVyd2lzZS4KIAkgKi8KIAlkZXZjdGwgPSBtdXNiX3JlYWRiKG1yZWdzLCBNVVNCX0RFVkNUTCk7Ci0JREJHKDcsICJQb2xsIGRldmN0bCAlMDJ4ICglcylcbiIsIGRldmN0bCwgb3RnX3N0YXRlX3N0cmluZyhtdXNiKSk7CisJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiUG9sbCBkZXZjdGwgJTAyeCAoJXMpXG4iLCBkZXZjdGwsCisJCW90Z19zdGF0ZV9zdHJpbmcobXVzYi0+eGNlaXYtPnN0YXRlKSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbXVzYi0+bG9jaywgZmxhZ3MpOwogCXN3aXRjaCAobXVzYi0+eGNlaXYtPnN0YXRlKSB7CkBAIC0yMDIsMjAgKzIwMywyMiBAQAogCS8qIE5ldmVyIGlkbGUgaWYgYWN0aXZlLCBvciB3aGVuIFZCVVMgdGltZW91dCBpcyBub3Qgc2V0IGFzIGhvc3QgKi8KIAlpZiAobXVzYi0+aXNfYWN0aXZlIHx8IChtdXNiLT5hX3dhaXRfYmNvbiA9PSAwICYmCiAJCQkJbXVzYi0+eGNlaXYtPnN0YXRlID09IE9UR19TVEFURV9BX1dBSVRfQkNPTikpIHsKLQkJREJHKDQsICIlcyBhY3RpdmUsIGRlbGV0aW5nIHRpbWVyXG4iLCBvdGdfc3RhdGVfc3RyaW5nKG11c2IpKTsKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiJXMgYWN0aXZlLCBkZWxldGluZyB0aW1lclxuIiwKKwkJCW90Z19zdGF0ZV9zdHJpbmcobXVzYi0+eGNlaXYtPnN0YXRlKSk7CiAJCWRlbF90aW1lcigmb3RnX3dvcmthcm91bmQpOwogCQlsYXN0X3RpbWVyID0gamlmZmllczsKIAkJcmV0dXJuOwogCX0KIAogCWlmICh0aW1lX2FmdGVyKGxhc3RfdGltZXIsIHRpbWVvdXQpICYmIHRpbWVyX3BlbmRpbmcoJm90Z193b3JrYXJvdW5kKSkgewotCQlEQkcoNCwgIkxvbmdlciBpZGxlIHRpbWVyIGFscmVhZHkgcGVuZGluZywgaWdub3JpbmcuLi5cbiIpOworCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJMb25nZXIgaWRsZSB0aW1lciBhbHJlYWR5IHBlbmRpbmcsIGlnbm9yaW5nLi4uXG4iKTsKIAkJcmV0dXJuOwogCX0KIAlsYXN0X3RpbWVyID0gdGltZW91dDsKIAotCURCRyg0LCAiJXMgaW5hY3RpdmUsIHN0YXJ0aW5nIGlkbGUgdGltZXIgZm9yICV1IG1zXG4iLAotCSAgICBvdGdfc3RhdGVfc3RyaW5nKG11c2IpLCBqaWZmaWVzX3RvX21zZWNzKHRpbWVvdXQgLSBqaWZmaWVzKSk7CisJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiJXMgaW5hY3RpdmUsIHN0YXJ0aW5nIGlkbGUgdGltZXIgZm9yICV1IG1zXG4iLAorCQlvdGdfc3RhdGVfc3RyaW5nKG11c2ItPnhjZWl2LT5zdGF0ZSksCisJCWppZmZpZXNfdG9fbXNlY3ModGltZW91dCAtIGppZmZpZXMpKTsKIAltb2RfdGltZXIoJm90Z193b3JrYXJvdW5kLCB0aW1lb3V0KTsKIH0KIApAQCAtMzAyLDkgKzMwNSw5IEBACiAJCX0KIAogCQkvKiBOT1RFOiB0aGlzIG11c3QgY29tcGxldGUgcG93ZXItb24gd2l0aGluIDEwMCBtcy4gKi8KLQkJREJHKDIsICJWQlVTICVzICglcyklcywgZGV2Y3RsICUwMnhcbiIsCisJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIlZCVVMgJXMgKCVzKSVzLCBkZXZjdGwgJTAyeFxuIiwKIAkJCQlkcnZ2YnVzID8gIm9uIiA6ICJvZmYiLAotCQkJCW90Z19zdGF0ZV9zdHJpbmcobXVzYiksCisJCQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiLT54Y2Vpdi0+c3RhdGUpLAogCQkJCWVyciA/ICIgRVJST1IiIDogIiIsCiAJCQkJZGV2Y3RsKTsKIAkJcmV0ID0gSVJRX0hBTkRMRUQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmMgYi9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmMKaW5kZXggOGUyYTFmZi4uYWU4YzM5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYwpAQCAtMzUsNiArMzUsNyBAQAogICovCiB2b2lkIG11c2Jfd3JpdGVfZmlmbyhzdHJ1Y3QgbXVzYl9od19lcCAqaHdfZXAsIHUxNiBsZW4sIGNvbnN0IHU4ICpzcmMpCiB7CisJc3RydWN0IG11c2IgKm11c2IgPSBod19lcC0+bXVzYjsKIAl2b2lkIF9faW9tZW0gKmZpZm8gPSBod19lcC0+ZmlmbzsKIAl2b2lkIF9faW9tZW0gKmVwaW8gPSBod19lcC0+cmVnczsKIAl1OCBlcG51bSA9IGh3X2VwLT5lcG51bTsKQEAgLTQzLDcgKzQ0LDcgQEAKIAogCW11c2Jfd3JpdGV3KGVwaW8sIE1VU0JfVFhDT1VOVCwgbGVuKTsKIAotCURCRyg0LCAiVFggZXAlZCBmaWZvICVwIGNvdW50ICVkIGJ1ZiAlcCwgZXBpbyAlcFxuIiwKKwlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJUWCBlcCVkIGZpZm8gJXAgY291bnQgJWQgYnVmICVwLCBlcGlvICVwXG4iLAogCQkJaHdfZXAtPmVwbnVtLCBmaWZvLCBsZW4sIHNyYywgZXBpbyk7CiAKIAlkdW1wX2ZpZm9fZGF0YShzcmMsIGxlbik7CkBAIC05OCw2ICs5OSw3IEBACiAgKi8KIHZvaWQgbXVzYl9yZWFkX2ZpZm8oc3RydWN0IG11c2JfaHdfZXAgKmh3X2VwLCB1MTYgbGVuLCB1OCAqZHN0KQogeworCXN0cnVjdCBtdXNiICptdXNiID0gaHdfZXAtPm11c2I7CiAJdm9pZCBfX2lvbWVtICpmaWZvID0gaHdfZXAtPmZpZm87CiAJdTggZXBudW0gPSBod19lcC0+ZXBudW07CiAKQEAgLTE1NCw3ICsxNTYsNyBAQAogCQkJCSooZHN0ICsgbGVuIC0gMSkgPSAodTgpaW53KCh1bnNpZ25lZCBsb25nKWZpZm8gKyA0KTsKIAkJfQogCX0KLQlEQkcoNCwgIiVjWCBlcCVkIGZpZm8gJXAgY291bnQgJWQgYnVmICVwXG4iLAorCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIiVjWCBlcCVkIGZpZm8gJXAgY291bnQgJWQgYnVmICVwXG4iLAogCQkJJ1InLCBod19lcC0+ZXBudW0sIGZpZm8sIGxlbiwgZHN0KTsKIAogCWR1bXBfZmlmb19kYXRhKGRzdCwgbGVuKTsKQEAgLTI3OSwxMiArMjgxLDE0IEBACiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJREJHKDEsICIlcyBzdGF0ZSBub3QgaGFuZGxlZFxuIiwgb3RnX3N0YXRlX3N0cmluZyhtdXNiKSk7CisJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIiVzIHN0YXRlIG5vdCBoYW5kbGVkXG4iLAorCQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiLT54Y2Vpdi0+c3RhdGUpKTsKIAkJYnJlYWs7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm11c2ItPmxvY2ssIGZsYWdzKTsKIAotCURCRyg0LCAic3RhdGUgaXMgJXNcbiIsIG90Z19zdGF0ZV9zdHJpbmcobXVzYikpOworCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgInN0YXRlIGlzICVzXG4iLAorCQlvdGdfc3RhdGVfc3RyaW5nKG11c2ItPnhjZWl2LT5zdGF0ZSkpOwogfQogCiBzdGF0aWMgdm9pZCBiZmluX211c2JfZW5hYmxlKHN0cnVjdCBtdXNiICptdXNiKQpAQCAtMzA2LDkgKzMxMCw5IEBACiAJCXZhbHVlID0gIXZhbHVlOwogCWdwaW9fc2V0X3ZhbHVlKG11c2ItPmNvbmZpZy0+Z3Bpb192cnNlbCwgdmFsdWUpOwogCi0JREJHKDEsICJWQlVTICVzLCBkZXZjdGwgJTAyeCAiCisJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiVkJVUyAlcywgZGV2Y3RsICUwMnggIgogCQkvKiBvdGcgJTN4IGNvbmYgJTA4eCBwcmNtICUwOHggKi8gIlxuIiwKLQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiKSwKKwkJb3RnX3N0YXRlX3N0cmluZyhtdXNiLT54Y2Vpdi0+c3RhdGUpLAogCQltdXNiX3JlYWRiKG11c2ItPm1yZWdzLCBNVVNCX0RFVkNUTCkpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL2NwcGlfZG1hLmMgYi9kcml2ZXJzL3VzYi9tdXNiL2NwcGlfZG1hLmMKaW5kZXggYWI0MzRmYi4uMTQ5ZjNmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9jcHBpX2RtYS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvY3BwaV9kbWEuYwpAQCAtMjM2LDcgKzIzNiw3IEBACiAJbXVzYl93cml0ZWwodGliYXNlLCBEQVZJTkNJX1JYQ1BQSV9JTlRDTFJfUkVHLAogCQkJREFWSU5DSV9ETUFfQUxMX0NIQU5ORUxTX0VOQUJMRSk7CiAKLQlEQkcoMSwgIlRlYXJpbmcgZG93biBSWCBhbmQgVFggQ2hhbm5lbHNcbiIpOworCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIlRlYXJpbmcgZG93biBSWCBhbmQgVFggQ2hhbm5lbHNcbiIpOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbnRyb2xsZXItPnR4KTsgaSsrKSB7CiAJCS8qIEZJWE1FIHJlc3RydWN0dXJlIG9mIHR4ZG1hIHRvIHVzZSBiZHMgbGlrZSByeGRtYSAqLwogCQljb250cm9sbGVyLT50eFtpXS5sYXN0X3Byb2Nlc3NlZCA9IE5VTEw7CkBAIC0zMDEsMTMgKzMwMSwxMyBAQAogCSAqLwogCWlmICh0cmFuc21pdCkgewogCQlpZiAoaW5kZXggPj0gQVJSQVlfU0laRShjb250cm9sbGVyLT50eCkpIHsKLQkJCURCRygxLCAibm8gJWNYJWQgQ1BQSSBjaGFubmVsXG4iLCAnVCcsIGluZGV4KTsKKwkJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIm5vICVjWCVkIENQUEkgY2hhbm5lbFxuIiwgJ1QnLCBpbmRleCk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCQljcHBpX2NoID0gY29udHJvbGxlci0+dHggKyBpbmRleDsKIAl9IGVsc2UgewogCQlpZiAoaW5kZXggPj0gQVJSQVlfU0laRShjb250cm9sbGVyLT5yeCkpIHsKLQkJCURCRygxLCAibm8gJWNYJWQgQ1BQSSBjaGFubmVsXG4iLCAnUicsIGluZGV4KTsKKwkJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIm5vICVjWCVkIENQUEkgY2hhbm5lbFxuIiwgJ1InLCBpbmRleCk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCQljcHBpX2NoID0gY29udHJvbGxlci0+cnggKyBpbmRleDsKQEAgLTMxOCwxMyArMzE4LDEzIEBACiAJICogd2l0aCB0aGUgb3RoZXIgRE1BIGVuZ2luZSB0b28KIAkgKi8KIAlpZiAoY3BwaV9jaC0+aHdfZXApCi0JCURCRygxLCAicmUtYWxsb2NhdGluZyBETUElZCAlY1ggY2hhbm5lbCAlcFxuIiwKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAicmUtYWxsb2NhdGluZyBETUElZCAlY1ggY2hhbm5lbCAlcFxuIiwKIAkJCQlpbmRleCwgdHJhbnNtaXQgPyAnVCcgOiAnUicsIGNwcGlfY2gpOwogCWNwcGlfY2gtPmh3X2VwID0gZXA7CiAJY3BwaV9jaC0+Y2hhbm5lbC5zdGF0dXMgPSBNVVNCX0RNQV9TVEFUVVNfRlJFRTsKIAljcHBpX2NoLT5jaGFubmVsLm1heF9sZW4gPSAweDdmZmZmZmZmOwogCi0JREJHKDQsICJBbGxvY2F0ZSBDUFBJJWQgJWNYXG4iLCBpbmRleCwgdHJhbnNtaXQgPyAnVCcgOiAnUicpOworCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIkFsbG9jYXRlIENQUEklZCAlY1hcbiIsIGluZGV4LCB0cmFuc21pdCA/ICdUJyA6ICdSJyk7CiAJcmV0dXJuICZjcHBpX2NoLT5jaGFubmVsOwogfQogCkBAIC0zMzksNyArMzM5LDcgQEAKIAljID0gY29udGFpbmVyX29mKGNoYW5uZWwsIHN0cnVjdCBjcHBpX2NoYW5uZWwsIGNoYW5uZWwpOwogCXRpYmFzZSA9IGMtPmNvbnRyb2xsZXItPnRpYmFzZTsKIAlpZiAoIWMtPmh3X2VwKQotCQlEQkcoMSwgInJlbGVhc2luZyBpZGxlIERNQSBjaGFubmVsICVwXG4iLCBjKTsKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAicmVsZWFzaW5nIGlkbGUgRE1BIGNoYW5uZWwgJXBcbiIsIGMpOwogCWVsc2UgaWYgKCFjLT50cmFuc21pdCkKIAkJY29yZV9yeGlycV9lbmFibGUodGliYXNlLCBjLT5pbmRleCArIDEpOwogCkBAIC01OTcsNyArNTk3LDcgQEAKIAkJbGVuZ3RoID0gbWluKG5fYmRzICogbWF4cGFja2V0LCBsZW5ndGgpOwogCX0KIAotCURCRyg0LCAiVFggRE1BJWQsIHBrdFN6ICVkICVzIGJkcyAlZCBkbWEgMHglbGx4IGxlbiAldVxuIiwKKwlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJUWCBETUElZCwgcGt0U3ogJWQgJXMgYmRzICVkIGRtYSAweCVsbHggbGVuICV1XG4iLAogCQkJdHgtPmluZGV4LAogCQkJbWF4cGFja2V0LAogCQkJcm5kaXMgPyAicm5kaXMiIDogInRyYW5zcGFyZW50IiwKQEAgLTY1NCw3ICs2NTQsNyBAQAogCQkJCWJkLT5od19vcHRpb25zIHw9IENQUElfWkVST19TRVQ7CiAJCX0KIAotCQlEQkcoNSwgIlRYQkQgJXA6IG54dCAlMDh4IGJ1ZiAlMDh4IGxlbiAlMDR4IG9wdCAlMDh4XG4iLAorCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJUWEJEICVwOiBueHQgJTA4eCBidWYgJTA4eCBsZW4gJTA0eCBvcHQgJTA4eFxuIiwKIAkJCQliZCwgYmQtPmh3X25leHQsIGJkLT5od19idWZwLAogCQkJCWJkLT5od19vZmZfbGVuLCBiZC0+aHdfb3B0aW9ucyk7CiAKQEAgLTgxOSw3ICs4MTksNyBAQAogCiAJbGVuZ3RoID0gbWluKG5fYmRzICogbWF4cGFja2V0LCBsZW5ndGgpOwogCi0JREJHKDQsICJSWCBETUElZCBzZWcsIG1heHAgJWQgJXMgYmRzICVkIChjbnQgJWQpICIKKwlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJSWCBETUElZCBzZWcsIG1heHAgJWQgJXMgYmRzICVkIChjbnQgJWQpICIKIAkJCSJkbWEgMHglbGx4IGxlbiAldSAldS8ldVxuIiwKIAkJCXJ4LT5pbmRleCwgbWF4cGFja2V0LAogCQkJb25lcGFja2V0CkBAIC05MzYsNyArOTM2LDcgQEAKIAkJCURBVklOQ0lfUlhDUFBJX0JVRkNOVDBfUkVHICsgKHJ4LT5pbmRleCAqIDQpKQogCQkJJiAweGZmZmY7CiAJaWYgKGkgPCAoMiArIG5fYmRzKSkgewotCQlEQkcoMiwgImJ1ZmNudCVkIHVuZGVycnVuIC0gJWQgKGZvciAlZClcbiIsCisJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgImJ1ZmNudCVkIHVuZGVycnVuIC0gJWQgKGZvciAlZClcbiIsCiAJCQkJCXJ4LT5pbmRleCwgaSwgbl9iZHMpOwogCQltdXNiX3dyaXRlbCh0aWJhc2UsCiAJCQlEQVZJTkNJX1JYQ1BQSV9CVUZDTlQwX1JFRyArIChyeC0+aW5kZXggKiA0KSwKQEAgLTk4NSw3ICs5ODUsNyBAQAogCQkvKiBXQVJOX09OKDEpOyAqLwogCQlicmVhazsKIAljYXNlIE1VU0JfRE1BX1NUQVRVU19VTktOT1dOOgotCQlEQkcoMSwgIiVjWCBETUElZCBub3QgYWxsb2NhdGVkIVxuIiwKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiJWNYIERNQSVkIG5vdCBhbGxvY2F0ZWQhXG4iLAogCQkJCWNwcGlfY2gtPnRyYW5zbWl0ID8gJ1QnIDogJ1InLAogCQkJCWNwcGlfY2gtPmluZGV4KTsKIAkJLyogRkFMTFRIUk9VR0ggKi8KQEAgLTEwNDAsNyArMTA0MCw3IEBACiAJCWlmICghY29tcGxldGVkICYmIChiZC0+aHdfb3B0aW9ucyAmIENQUElfT1dOX1NFVCkpCiAJCQlicmVhazsKIAotCQlEQkcoNSwgIkMvUlhCRCAlbGx4OiBueHQgJTA4eCBidWYgJTA4eCAiCisJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIkMvUlhCRCAlbGx4OiBueHQgJTA4eCBidWYgJTA4eCAiCiAJCQkib2ZmLmxlbiAlMDh4IG9wdC5sZW4gJTA4eCAoJWQpXG4iLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyliZC0+ZG1hLCBiZC0+aHdfbmV4dCwgYmQtPmh3X2J1ZnAsCiAJCQliZC0+aHdfb2ZmX2xlbiwgYmQtPmh3X29wdGlvbnMsCkBAIC0xMDYyLDcgKzEwNjIsNyBAQAogCQkJICogQ1BQSSBpZ25vcmVzIHRob3NlIEJEcyBldmVuIHRob3VnaCBPV04gaXMgc3RpbGwgc2V0LgogCQkJICovCiAJCQljb21wbGV0ZWQgPSB0cnVlOwotCQkJREJHKDMsICJyeCBzaG9ydCAlZC8lZCAoJWQpXG4iLAorCQkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAicnggc2hvcnQgJWQvJWQgKCVkKVxuIiwKIAkJCQkJbGVuLCBiZC0+YnVmbGVuLAogCQkJCQlyeC0+Y2hhbm5lbC5hY3R1YWxfbGVuKTsKIAkJfQpAQCAtMTExMiw3ICsxMTEyLDcgQEAKIAkJbXVzYl9lcF9zZWxlY3QoY3BwaS0+bXJlZ3MsIHJ4LT5pbmRleCArIDEpOwogCQljc3IgPSBtdXNiX3JlYWR3KHJlZ3MsIE1VU0JfUlhDU1IpOwogCQlpZiAoY3NyICYgTVVTQl9SWENTUl9ETUFFTkFCKSB7Ci0JCQlEQkcoNCwgImxpc3QlZCAlcC8lcCwgbGFzdCAlbGx4JXMsIGNzciAlMDR4XG4iLAorCQkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAibGlzdCVkICVwLyVwLCBsYXN0ICVsbHglcywgY3NyICUwNHhcbiIsCiAJCQkJcngtPmluZGV4LAogCQkJCXJ4LT5oZWFkLCByeC0+dGFpbCwKIAkJCQlyeC0+bGFzdF9wcm9jZXNzZWQKQEAgLTExNzUsNyArMTE3NSw3IEBACiAJCXJldHVybiBJUlFfTk9ORTsKIAl9CiAKLQlEQkcoNCwgIkNQUEkgSVJRIFR4JXggUngleFxuIiwgdHgsIHJ4KTsKKwlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJDUFBJIElSUSBUeCV4IFJ4JXhcbiIsIHR4LCByeCk7CiAKIAkvKiBwcm9jZXNzIFRYIGNoYW5uZWxzICovCiAJZm9yIChpbmRleCA9IDA7IHR4OyB0eCA9IHR4ID4+IDEsIGluZGV4KyspIHsKQEAgLTEyMDMsNyArMTIwMyw3IEBACiAJCSAqIHRoYXQgbmVlZHMgdG8gYmUgYWNrbm93bGVkZ2VkLgogCQkgKi8KIAkJaWYgKE5VTEwgPT0gYmQpIHsKLQkJCURCRygxLCAibnVsbCBCRFxuIik7CisJCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJudWxsIEJEXG4iKTsKIAkJCW11c2Jfd3JpdGVsKCZ0eF9yYW0tPnR4X2NvbXBsZXRlLCAwLCAwKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0xMjE4LDcgKzEyMTgsNyBAQAogCQkJaWYgKGJkLT5od19vcHRpb25zICYgQ1BQSV9PV05fU0VUKQogCQkJCWJyZWFrOwogCi0JCQlEQkcoNSwgIkMvVFhCRCAlcCBuICV4IGIgJXggb2ZmICV4IG9wdCAleFxuIiwKKwkJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIkMvVFhCRCAlcCBuICV4IGIgJXggb2ZmICV4IG9wdCAleFxuIiwKIAkJCQkJYmQsIGJkLT5od19uZXh0LCBiZC0+aHdfYnVmcCwKIAkJCQkJYmQtPmh3X29mZl9sZW4sIGJkLT5od19vcHRpb25zKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9kYTh4eC5jIGIvZHJpdmVycy91c2IvbXVzYi9kYTh4eC5jCmluZGV4IDY5YTBkYTMuLjY2MmVkMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvZGE4eHguYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL2RhOHh4LmMKQEAgLTE5OSw3ICsxOTksOCBAQAogCSAqIHN0YXR1cyBjaGFuZ2UgZXZlbnRzIChmcm9tIHRoZSB0cmFuc2NlaXZlcikgb3RoZXJ3aXNlLgogCSAqLwogCWRldmN0bCA9IG11c2JfcmVhZGIobXJlZ3MsIE1VU0JfREVWQ1RMKTsKLQlEQkcoNywgIlBvbGwgZGV2Y3RsICUwMnggKCVzKVxuIiwgZGV2Y3RsLCBvdGdfc3RhdGVfc3RyaW5nKG11c2IpKTsKKwlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJQb2xsIGRldmN0bCAlMDJ4ICglcylcbiIsIGRldmN0bCwKKwkJb3RnX3N0YXRlX3N0cmluZyhtdXNiLT54Y2Vpdi0+c3RhdGUpKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtdXNiLT5sb2NrLCBmbGFncyk7CiAJc3dpdGNoIChtdXNiLT54Y2Vpdi0+c3RhdGUpIHsKQEAgLTI3MywyMCArMjc0LDIyIEBACiAJLyogTmV2ZXIgaWRsZSBpZiBhY3RpdmUsIG9yIHdoZW4gVkJVUyB0aW1lb3V0IGlzIG5vdCBzZXQgYXMgaG9zdCAqLwogCWlmIChtdXNiLT5pc19hY3RpdmUgfHwgKG11c2ItPmFfd2FpdF9iY29uID09IDAgJiYKIAkJCQltdXNiLT54Y2Vpdi0+c3RhdGUgPT0gT1RHX1NUQVRFX0FfV0FJVF9CQ09OKSkgewotCQlEQkcoNCwgIiVzIGFjdGl2ZSwgZGVsZXRpbmcgdGltZXJcbiIsIG90Z19zdGF0ZV9zdHJpbmcobXVzYikpOworCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICIlcyBhY3RpdmUsIGRlbGV0aW5nIHRpbWVyXG4iLAorCQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiLT54Y2Vpdi0+c3RhdGUpKTsKIAkJZGVsX3RpbWVyKCZvdGdfd29ya2Fyb3VuZCk7CiAJCWxhc3RfdGltZXIgPSBqaWZmaWVzOwogCQlyZXR1cm47CiAJfQogCiAJaWYgKHRpbWVfYWZ0ZXIobGFzdF90aW1lciwgdGltZW91dCkgJiYgdGltZXJfcGVuZGluZygmb3RnX3dvcmthcm91bmQpKSB7Ci0JCURCRyg0LCAiTG9uZ2VyIGlkbGUgdGltZXIgYWxyZWFkeSBwZW5kaW5nLCBpZ25vcmluZy4uLlxuIik7CisJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIkxvbmdlciBpZGxlIHRpbWVyIGFscmVhZHkgcGVuZGluZywgaWdub3JpbmcuLi5cbiIpOwogCQlyZXR1cm47CiAJfQogCWxhc3RfdGltZXIgPSB0aW1lb3V0OwogCi0JREJHKDQsICIlcyBpbmFjdGl2ZSwgc3RhcnRpbmcgaWRsZSB0aW1lciBmb3IgJXUgbXNcbiIsCi0JICAgIG90Z19zdGF0ZV9zdHJpbmcobXVzYiksIGppZmZpZXNfdG9fbXNlY3ModGltZW91dCAtIGppZmZpZXMpKTsKKwlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICIlcyBpbmFjdGl2ZSwgc3RhcnRpbmcgaWRsZSB0aW1lciBmb3IgJXUgbXNcbiIsCisJCW90Z19zdGF0ZV9zdHJpbmcobXVzYi0+eGNlaXYtPnN0YXRlKSwKKwkJamlmZmllc190b19tc2Vjcyh0aW1lb3V0IC0gamlmZmllcykpOwogCW1vZF90aW1lcigmb3RnX3dvcmthcm91bmQsIHRpbWVvdXQpOwogfQogCkBAIC0zMTEsNyArMzE0LDcgQEAKIAkJZ290byBlb2k7CiAKIAltdXNiX3dyaXRlbChyZWdfYmFzZSwgREE4WFhfVVNCX0lOVFJfU1JDX0NMRUFSX1JFRywgc3RhdHVzKTsKLQlEQkcoNCwgIlVTQiBJUlEgJTA4eFxuIiwgc3RhdHVzKTsKKwlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJVU0IgSVJRICUwOHhcbiIsIHN0YXR1cyk7CiAKIAltdXNiLT5pbnRfcnggPSAoc3RhdHVzICYgREE4WFhfSU5UUl9SWF9NQVNLKSA+PiBEQThYWF9JTlRSX1JYX1NISUZUOwogCW11c2ItPmludF90eCA9IChzdGF0dXMgJiBEQThYWF9JTlRSX1RYX01BU0spID4+IERBOFhYX0lOVFJfVFhfU0hJRlQ7CkBAIC0zNjMsOSArMzY2LDkgQEAKIAkJCXBvcnRzdGF0ZShtdXNiLT5wb3J0MV9zdGF0dXMgJj0gflVTQl9QT1JUX1NUQVRfUE9XRVIpOwogCQl9CiAKLQkJREJHKDIsICJWQlVTICVzICglcyklcywgZGV2Y3RsICUwMnhcbiIsCisJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIlZCVVMgJXMgKCVzKSVzLCBkZXZjdGwgJTAyeFxuIiwKIAkJCQlkcnZ2YnVzID8gIm9uIiA6ICJvZmYiLAotCQkJCW90Z19zdGF0ZV9zdHJpbmcobXVzYiksCisJCQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiLT54Y2Vpdi0+c3RhdGUpLAogCQkJCWVyciA/ICIgRVJST1IiIDogIiIsCiAJCQkJZGV2Y3RsKTsKIAkJcmV0ID0gSVJRX0hBTkRMRUQ7CkBAIC00MTAsNyArNDEzLDcgQEAKIAkJYnJlYWs7CiAjZW5kaWYKIAlkZWZhdWx0OgotCQlEQkcoMiwgIlRyeWluZyB0byBzZXQgdW5zdXBwb3J0ZWQgbW9kZSAldVxuIiwgbXVzYl9tb2RlKTsKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiVHJ5aW5nIHRvIHNldCB1bnN1cHBvcnRlZCBtb2RlICV1XG4iLCBtdXNiX21vZGUpOwogCX0KIAogCV9fcmF3X3dyaXRlbChjZmdjaGlwMiwgQ0ZHQ0hJUDIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMgYi9kcml2ZXJzL3VzYi9tdXNiL2RhdmluY2kuYwppbmRleCBlNmRlMDk3Li4yYTJhZGY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL2RhdmluY2kuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL2RhdmluY2kuYwpAQCAtMjIwLDcgKzIyMCw4IEBACiAJKiBzdGF0dXMgY2hhbmdlIGV2ZW50cyAoZnJvbSB0aGUgdHJhbnNjZWl2ZXIpIG90aGVyd2lzZS4KIAkgKi8KIAlkZXZjdGwgPSBtdXNiX3JlYWRiKG1yZWdzLCBNVVNCX0RFVkNUTCk7Ci0JREJHKDcsICJwb2xsIGRldmN0bCAlMDJ4ICglcylcbiIsIGRldmN0bCwgb3RnX3N0YXRlX3N0cmluZyhtdXNiKSk7CisJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAicG9sbCBkZXZjdGwgJTAyeCAoJXMpXG4iLCBkZXZjdGwsCisJCW90Z19zdGF0ZV9zdHJpbmcobXVzYi0+eGNlaXYtPnN0YXRlKSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbXVzYi0+bG9jaywgZmxhZ3MpOwogCXN3aXRjaCAobXVzYi0+eGNlaXYtPnN0YXRlKSB7CkBAIC0yOTcsNyArMjk4LDcgQEAKIAkvKiBhY2sgYW5kIGhhbmRsZSBub24tQ1BQSSBpbnRlcnJ1cHRzICovCiAJdG1wID0gbXVzYl9yZWFkbCh0aWJhc2UsIERBVklOQ0lfVVNCX0lOVF9TUkNfTUFTS0VEX1JFRyk7CiAJbXVzYl93cml0ZWwodGliYXNlLCBEQVZJTkNJX1VTQl9JTlRfU1JDX0NMUl9SRUcsIHRtcCk7Ci0JREJHKDQsICJJUlEgJTA4eFxuIiwgdG1wKTsKKwlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJJUlEgJTA4eFxuIiwgdG1wKTsKIAogCW11c2ItPmludF9yeCA9ICh0bXAgJiBEQVZJTkNJX1VTQl9SWElOVF9NQVNLKQogCQkJPj4gREFWSU5DSV9VU0JfUlhJTlRfU0hJRlQ7CkBAIC0zNTQsOSArMzU1LDkgQEAKIAkJICogKE9UR19USU1FX0FfV0FJVF9WUklTRSkgYnV0IHdlIGRvbid0IGNoZWNrIGZvciB0aGF0LgogCQkgKi8KIAkJZGF2aW5jaV9tdXNiX3NvdXJjZV9wb3dlcihtdXNiLCBkcnZ2YnVzLCAwKTsKLQkJREJHKDIsICJWQlVTICVzICglcyklcywgZGV2Y3RsICUwMnhcbiIsCisJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIlZCVVMgJXMgKCVzKSVzLCBkZXZjdGwgJTAyeFxuIiwKIAkJCQlkcnZ2YnVzID8gIm9uIiA6ICJvZmYiLAotCQkJCW90Z19zdGF0ZV9zdHJpbmcobXVzYiksCisJCQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiLT54Y2Vpdi0+c3RhdGUpLAogCQkJCWVyciA/ICIgRVJST1IiIDogIiIsCiAJCQkJZGV2Y3RsKTsKIAkJcmV0dmFsID0gSVJRX0hBTkRMRUQ7CkBAIC00ODQsNyArNDg1LDcgQEAKIAkJCQlicmVhazsKIAkJCWlmICgoZGV2Y3RsICYgTVVTQl9ERVZDVExfVkJVUykgIT0gd2FybikgewogCQkJCXdhcm4gPSBkZXZjdGwgJiBNVVNCX0RFVkNUTF9WQlVTOwotCQkJCURCRygxLCAiVkJVUyAlZFxuIiwKKwkJCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJWQlVTICVkXG4iLAogCQkJCQl3YXJuID4+IE1VU0JfREVWQ1RMX1ZCVVNfU0hJRlQpOwogCQkJfQogCQkJbXNsZWVwKDEwMDApOwpAQCAtNDkzLDcgKzQ5NCw3IEBACiAKIAkJLyogaW4gT1RHIG1vZGUsIGFub3RoZXIgaG9zdCBtaWdodCBiZSBjb25uZWN0ZWQgKi8KIAkJaWYgKGRldmN0bCAmIE1VU0JfREVWQ1RMX1ZCVVMpCi0JCQlEQkcoMSwgIlZCVVMgb2ZmIHRpbWVvdXQgKGRldmN0bCAlMDJ4KVxuIiwgZGV2Y3RsKTsKKwkJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIlZCVVMgb2ZmIHRpbWVvdXQgKGRldmN0bCAlMDJ4KVxuIiwgZGV2Y3RsKTsKIAl9CiAKIAlwaHlfb2ZmKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYwppbmRleCBmMTBmZjAwLi5hYjhlMTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKQEAgLTEwNCwxMCArMTA0LDYgQEAKICNkZWZpbmUgVEFfV0FJVF9CQ09OKG0pIG1heF90KGludCwgKG0pLT5hX3dhaXRfYmNvbiwgT1RHX1RJTUVfQV9XQUlUX0JDT04pCiAKIAotdW5zaWduZWQgbXVzYl9kZWJ1ZzsKLW1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgbXVzYl9kZWJ1ZywgdWludCwgU19JUlVHTyB8IFNfSVdVU1IpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIG1lc3NhZ2UgbGV2ZWwuIERlZmF1bHQgPSAwIik7Ci0KICNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiTWVudG9yIEdyYXBoaWNzLCBUZXhhcyBJbnN0cnVtZW50cywgTm9raWEiCiAjZGVmaW5lIERSSVZFUl9ERVNDICJJbnZlbnRyYSBEdWFsLVJvbGUgVVNCIENvbnRyb2xsZXIgRHJpdmVyIgogCkBAIC0xNTcsMTAgKzE1Myw4IEBACiAJd2hpbGUgKCEobXVzYl9yZWFkYihhZGRyLCBNVVNCX1VMUElfUkVHX0NPTlRST0wpCiAJCQkJJiBNVVNCX1VMUElfUkVHX0NNUExUKSkgewogCQlpKys7Ci0JCWlmIChpID09IDEwMDAwKSB7Ci0JCQlEQkcoMywgIlVMUEkgcmVhZCB0aW1lZCBvdXRcbiIpOworCQlpZiAoaSA9PSAxMDAwMCkKIAkJCXJldHVybiAtRVRJTUVET1VUOwotCQl9CiAKIAl9CiAJciA9IG11c2JfcmVhZGIoYWRkciwgTVVTQl9VTFBJX1JFR19DT05UUk9MKTsKQEAgLTE5MCwxMCArMTg0LDggQEAKIAl3aGlsZSAoIShtdXNiX3JlYWRiKGFkZHIsIE1VU0JfVUxQSV9SRUdfQ09OVFJPTCkKIAkJCQkmIE1VU0JfVUxQSV9SRUdfQ01QTFQpKSB7CiAJCWkrKzsKLQkJaWYgKGkgPT0gMTAwMDApIHsKLQkJCURCRygzLCAiVUxQSSB3cml0ZSB0aW1lZCBvdXRcbiIpOworCQlpZiAoaSA9PSAxMDAwMCkKIAkJCXJldHVybiAtRVRJTUVET1VUOwotCQl9CiAJfQogCiAJciA9IG11c2JfcmVhZGIoYWRkciwgTVVTQl9VTFBJX1JFR19DT05UUk9MKTsKQEAgLTIyMSwxMSArMjEzLDEyIEBACiAgKi8KIHZvaWQgbXVzYl93cml0ZV9maWZvKHN0cnVjdCBtdXNiX2h3X2VwICpod19lcCwgdTE2IGxlbiwgY29uc3QgdTggKnNyYykKIHsKKwlzdHJ1Y3QgbXVzYiAqbXVzYiA9IGh3X2VwLT5tdXNiOwogCXZvaWQgX19pb21lbSAqZmlmbyA9IGh3X2VwLT5maWZvOwogCiAJcHJlZmV0Y2goKHU4ICopc3JjKTsKIAotCURCRyg0LCAiJWNYIGVwJWQgZmlmbyAlcCBjb3VudCAlZCBidWYgJXBcbiIsCisJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiJWNYIGVwJWQgZmlmbyAlcCBjb3VudCAlZCBidWYgJXBcbiIsCiAJCQknVCcsIGh3X2VwLT5lcG51bSwgZmlmbywgbGVuLCBzcmMpOwogCiAJLyogd2UgY2FuJ3QgYXNzdW1lIHVuYWxpZ25lZCByZWFkcyB3b3JrICovCkBAIC0yNjIsOSArMjU1LDEwIEBACiAgKi8KIHZvaWQgbXVzYl9yZWFkX2ZpZm8oc3RydWN0IG11c2JfaHdfZXAgKmh3X2VwLCB1MTYgbGVuLCB1OCAqZHN0KQogeworCXN0cnVjdCBtdXNiICptdXNiID0gaHdfZXAtPm11c2I7CiAJdm9pZCBfX2lvbWVtICpmaWZvID0gaHdfZXAtPmZpZm87CiAKLQlEQkcoNCwgIiVjWCBlcCVkIGZpZm8gJXAgY291bnQgJWQgYnVmICVwXG4iLAorCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIiVjWCBlcCVkIGZpZm8gJXAgY291bnQgJWQgYnVmICVwXG4iLAogCQkJJ1InLCBod19lcC0+ZXBudW0sIGZpZm8sIGxlbiwgZHN0KTsKIAogCS8qIHdlIGNhbid0IGFzc3VtZSB1bmFsaWduZWQgd3JpdGVzIHdvcmsgKi8KQEAgLTMzMywyNiArMzI3LDYgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotY29uc3QgY2hhciAqb3RnX3N0YXRlX3N0cmluZyhzdHJ1Y3QgbXVzYiAqbXVzYikKLXsKLQlzd2l0Y2ggKG11c2ItPnhjZWl2LT5zdGF0ZSkgewotCWNhc2UgT1RHX1NUQVRFX0FfSURMRToJCXJldHVybiAiYV9pZGxlIjsKLQljYXNlIE9UR19TVEFURV9BX1dBSVRfVlJJU0U6CXJldHVybiAiYV93YWl0X3ZyaXNlIjsKLQljYXNlIE9UR19TVEFURV9BX1dBSVRfQkNPTjoJcmV0dXJuICJhX3dhaXRfYmNvbiI7Ci0JY2FzZSBPVEdfU1RBVEVfQV9IT1NUOgkJcmV0dXJuICJhX2hvc3QiOwotCWNhc2UgT1RHX1NUQVRFX0FfU1VTUEVORDoJcmV0dXJuICJhX3N1c3BlbmQiOwotCWNhc2UgT1RHX1NUQVRFX0FfUEVSSVBIRVJBTDoJcmV0dXJuICJhX3BlcmlwaGVyYWwiOwotCWNhc2UgT1RHX1NUQVRFX0FfV0FJVF9WRkFMTDoJcmV0dXJuICJhX3dhaXRfdmZhbGwiOwotCWNhc2UgT1RHX1NUQVRFX0FfVkJVU19FUlI6CXJldHVybiAiYV92YnVzX2VyciI7Ci0JY2FzZSBPVEdfU1RBVEVfQl9JRExFOgkJcmV0dXJuICJiX2lkbGUiOwotCWNhc2UgT1RHX1NUQVRFX0JfU1JQX0lOSVQ6CXJldHVybiAiYl9zcnBfaW5pdCI7Ci0JY2FzZSBPVEdfU1RBVEVfQl9QRVJJUEhFUkFMOglyZXR1cm4gImJfcGVyaXBoZXJhbCI7Ci0JY2FzZSBPVEdfU1RBVEVfQl9XQUlUX0FDT046CXJldHVybiAiYl93YWl0X2Fjb24iOwotCWNhc2UgT1RHX1NUQVRFX0JfSE9TVDoJCXJldHVybiAiYl9ob3N0IjsKLQlkZWZhdWx0OgkJCXJldHVybiAiVU5ERUZJTkVEIjsKLQl9Ci19Ci0KICNpZmRlZglDT05GSUdfVVNCX01VU0JfT1RHCiAKIC8qCkBAIC0zNjYsMTkgKzM0MCwyMSBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZtdXNiLT5sb2NrLCBmbGFncyk7CiAJc3dpdGNoIChtdXNiLT54Y2Vpdi0+c3RhdGUpIHsKIAljYXNlIE9UR19TVEFURV9CX1dBSVRfQUNPTjoKLQkJREJHKDEsICJITlA6IGJfd2FpdF9hY29uIHRpbWVvdXQ7IGJhY2sgdG8gYl9wZXJpcGhlcmFsXG4iKTsKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiSE5QOiBiX3dhaXRfYWNvbiB0aW1lb3V0OyBiYWNrIHRvIGJfcGVyaXBoZXJhbFxuIik7CiAJCW11c2JfZ19kaXNjb25uZWN0KG11c2IpOwogCQltdXNiLT54Y2Vpdi0+c3RhdGUgPSBPVEdfU1RBVEVfQl9QRVJJUEhFUkFMOwogCQltdXNiLT5pc19hY3RpdmUgPSAwOwogCQlicmVhazsKIAljYXNlIE9UR19TVEFURV9BX1NVU1BFTkQ6CiAJY2FzZSBPVEdfU1RBVEVfQV9XQUlUX0JDT046Ci0JCURCRygxLCAiSE5QOiAlcyB0aW1lb3V0XG4iLCBvdGdfc3RhdGVfc3RyaW5nKG11c2IpKTsKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiSE5QOiAlcyB0aW1lb3V0XG4iLAorCQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiLT54Y2Vpdi0+c3RhdGUpKTsKIAkJbXVzYl9wbGF0Zm9ybV9zZXRfdmJ1cyhtdXNiLCAwKTsKIAkJbXVzYi0+eGNlaXYtPnN0YXRlID0gT1RHX1NUQVRFX0FfV0FJVF9WRkFMTDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJREJHKDEsICJITlA6IFVuaGFuZGxlZCBtb2RlICVzXG4iLCBvdGdfc3RhdGVfc3RyaW5nKG11c2IpKTsKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiSE5QOiBVbmhhbmRsZWQgbW9kZSAlc1xuIiwKKwkJCW90Z19zdGF0ZV9zdHJpbmcobXVzYi0+eGNlaXYtPnN0YXRlKSk7CiAJfQogCW11c2ItPmlnbm9yZV9kaXNjb25uZWN0ID0gMDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdXNiLT5sb2NrLCBmbGFncyk7CkBAIC0zOTMsMTUgKzM2OSwxNiBAQAogCXZvaWQgX19pb21lbQkqbWJhc2UgPSBtdXNiLT5tcmVnczsKIAl1OAlyZWc7CiAKLQlEQkcoMSwgIkhOUDogc3RvcCBmcm9tICVzXG4iLCBvdGdfc3RhdGVfc3RyaW5nKG11c2IpKTsKKwlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJITlA6IHN0b3AgZnJvbSAlc1xuIiwgb3RnX3N0YXRlX3N0cmluZyhtdXNiLT54Y2Vpdi0+c3RhdGUpKTsKIAogCXN3aXRjaCAobXVzYi0+eGNlaXYtPnN0YXRlKSB7CiAJY2FzZSBPVEdfU1RBVEVfQV9QRVJJUEhFUkFMOgogCQltdXNiX2dfZGlzY29ubmVjdChtdXNiKTsKLQkJREJHKDEsICJITlA6IGJhY2sgdG8gJXNcbiIsIG90Z19zdGF0ZV9zdHJpbmcobXVzYikpOworCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJITlA6IGJhY2sgdG8gJXNcbiIsCisJCQlvdGdfc3RhdGVfc3RyaW5nKG11c2ItPnhjZWl2LT5zdGF0ZSkpOwogCQlicmVhazsKIAljYXNlIE9UR19TVEFURV9CX0hPU1Q6Ci0JCURCRygxLCAiSE5QOiBEaXNhYmxpbmcgSFJcbiIpOworCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJITlA6IERpc2FibGluZyBIUlxuIik7CiAJCWhjZC0+c2VsZi5pc19iX2hvc3QgPSAwOwogCQltdXNiLT54Y2Vpdi0+c3RhdGUgPSBPVEdfU1RBVEVfQl9QRVJJUEhFUkFMOwogCQlNVVNCX0RFVl9NT0RFKG11c2IpOwpAQCAtNDExLDggKzM4OCw4IEBACiAJCS8qIFJFVklTSVQ6IFN0YXJ0IFNFU1NJT05fUkVRVUVTVCBoZXJlPyAqLwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlEQkcoMSwgIkhOUDogU3RvcHBpbmcgaW4gdW5rbm93biBzdGF0ZSAlc1xuIiwKLQkJCW90Z19zdGF0ZV9zdHJpbmcobXVzYikpOworCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJITlA6IFN0b3BwaW5nIGluIHVua25vd24gc3RhdGUgJXNcbiIsCisJCQlvdGdfc3RhdGVfc3RyaW5nKG11c2ItPnhjZWl2LT5zdGF0ZSkpOwogCX0KIAogCS8qCkBAIC00NDIsNyArNDE5LDcgQEAKIHsKIAlpcnFyZXR1cm5fdCBoYW5kbGVkID0gSVJRX05PTkU7CiAKLQlEQkcoMywgIjw9PSBQb3dlcj0lMDJ4LCBEZXZDdGw9JTAyeCwgaW50X3VzYj0weCV4XG4iLCBwb3dlciwgZGV2Y3RsLAorCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIjw9PSBQb3dlcj0lMDJ4LCBEZXZDdGw9JTAyeCwgaW50X3VzYj0weCV4XG4iLCBwb3dlciwgZGV2Y3RsLAogCQlpbnRfdXNiKTsKIAogCS8qIGluIGhvc3QgbW9kZSwgdGhlIHBlcmlwaGVyYWwgbWF5IGlzc3VlIHJlbW90ZSB3YWtldXAuCkBAIC00NTEsNyArNDI4LDcgQEAKIAkgKi8KIAlpZiAoaW50X3VzYiAmIE1VU0JfSU5UUl9SRVNVTUUpIHsKIAkJaGFuZGxlZCA9IElSUV9IQU5ETEVEOwotCQlEQkcoMywgIlJFU1VNRSAoJXMpXG4iLCBvdGdfc3RhdGVfc3RyaW5nKG11c2IpKTsKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiUkVTVU1FICglcylcbiIsIG90Z19zdGF0ZV9zdHJpbmcobXVzYi0+eGNlaXYtPnN0YXRlKSk7CiAKIAkJaWYgKGRldmN0bCAmIE1VU0JfREVWQ1RMX0hNKSB7CiAjaWZkZWYgQ09ORklHX1VTQl9NVVNCX0hEUkNfSENECkBAIC00NjYsNyArNDQzLDcgQEAKIAkJCQlpZiAocG93ZXIgJiBNVVNCX1BPV0VSX1NVU1BFTkRNKSB7CiAJCQkJCS8qIHNwdXJpb3VzICovCiAJCQkJCW11c2ItPmludF91c2IgJj0gfk1VU0JfSU5UUl9TVVNQRU5EOwotCQkJCQlEQkcoMiwgIlNwdXJpb3VzIFNVU1BFTkRNXG4iKTsKKwkJCQkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiU3B1cmlvdXMgU1VTUEVORE1cbiIpOwogCQkJCQlicmVhazsKIAkJCQl9CiAKQEAgLTQ5Miw3ICs0NjksNyBAQAogCQkJZGVmYXVsdDoKIAkJCQlXQVJOSU5HKCJib2d1cyAlcyBSRVNVTUUgKCVzKVxuIiwKIAkJCQkJImhvc3QiLAotCQkJCQlvdGdfc3RhdGVfc3RyaW5nKG11c2IpKTsKKwkJCQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiLT54Y2Vpdi0+c3RhdGUpKTsKIAkJCX0KICNlbmRpZgogCQl9IGVsc2UgewpAQCAtNTI2LDcgKzUwMyw3IEBACiAJCQlkZWZhdWx0OgogCQkJCVdBUk5JTkcoImJvZ3VzICVzIFJFU1VNRSAoJXMpXG4iLAogCQkJCQkicGVyaXBoZXJhbCIsCi0JCQkJCW90Z19zdGF0ZV9zdHJpbmcobXVzYikpOworCQkJCQlvdGdfc3RhdGVfc3RyaW5nKG11c2ItPnhjZWl2LT5zdGF0ZSkpOwogCQkJfQogCQl9CiAJfQpAQCAtNTM4LDExICs1MTUsMTIgQEAKIAogCQlpZiAoKGRldmN0bCAmIE1VU0JfREVWQ1RMX1ZCVVMpID09IE1VU0JfREVWQ1RMX1ZCVVMKIAkJCQkmJiAoZGV2Y3RsICYgTVVTQl9ERVZDVExfQkRFVklDRSkpIHsKLQkJCURCRygzLCAiU2Vzc1JlcSB3aGlsZSBvbiBCIHN0YXRlXG4iKTsKKwkJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIlNlc3NSZXEgd2hpbGUgb24gQiBzdGF0ZVxuIik7CiAJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJCX0KIAotCQlEQkcoMSwgIlNFU1NJT05fUkVRVUVTVCAoJXMpXG4iLCBvdGdfc3RhdGVfc3RyaW5nKG11c2IpKTsKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiU0VTU0lPTl9SRVFVRVNUICglcylcbiIsCisJCQlvdGdfc3RhdGVfc3RyaW5nKG11c2ItPnhjZWl2LT5zdGF0ZSkpOwogCiAJCS8qIElSUSBhcnJpdmVzIGZyb20gSUQgcGluIHNlbnNlIG9yIChsYXRlciwgaWYgVkJVUyBwb3dlcgogCQkgKiBpcyByZW1vdmVkKSBTUlAuICByZXNwb25zZXMgYXJlIHRpbWUgY3JpdGljYWw6CkBAIC02MDYsOCArNTg0LDggQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJREJHKDEsICJWQlVTX0VSUk9SIGluICVzICglMDJ4LCAlcyksIHJldHJ5ICMlZCwgcG9ydDEgJTA4eFxuIiwKLQkJCQlvdGdfc3RhdGVfc3RyaW5nKG11c2IpLAorCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJWQlVTX0VSUk9SIGluICVzICglMDJ4LCAlcyksIHJldHJ5ICMlZCwgcG9ydDEgJTA4eFxuIiwKKwkJCQlvdGdfc3RhdGVfc3RyaW5nKG11c2ItPnhjZWl2LT5zdGF0ZSksCiAJCQkJZGV2Y3RsLAogCQkJCSh7IGNoYXIgKnM7CiAJCQkJc3dpdGNoIChkZXZjdGwgJiBNVVNCX0RFVkNUTF9WQlVTKSB7CkBAIC02MzIsOCArNjEwLDggQEAKIAogI2VuZGlmCiAJaWYgKGludF91c2IgJiBNVVNCX0lOVFJfU1VTUEVORCkgewotCQlEQkcoMSwgIlNVU1BFTkQgKCVzKSBkZXZjdGwgJTAyeCBwb3dlciAlMDJ4XG4iLAotCQkJCW90Z19zdGF0ZV9zdHJpbmcobXVzYiksIGRldmN0bCwgcG93ZXIpOworCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJTVVNQRU5EICglcykgZGV2Y3RsICUwMnggcG93ZXIgJTAyeFxuIiwKKwkJCW90Z19zdGF0ZV9zdHJpbmcobXVzYi0+eGNlaXYtPnN0YXRlKSwgZGV2Y3RsLCBwb3dlcik7CiAJCWhhbmRsZWQgPSBJUlFfSEFORExFRDsKIAogCQlzd2l0Y2ggKG11c2ItPnhjZWl2LT5zdGF0ZSkgewpAQCAtNjY1LDcgKzY0Myw3IEBACiAJCQlpZiAobXVzYi0+aXNfYWN0aXZlKSB7CiAjaWZkZWYJQ09ORklHX1VTQl9NVVNCX09URwogCQkJCW11c2ItPnhjZWl2LT5zdGF0ZSA9IE9UR19TVEFURV9CX1dBSVRfQUNPTjsKLQkJCQlEQkcoMSwgIkhOUDogU2V0dGluZyB0aW1lciBmb3IgYl9hc2UwX2Jyc3RcbiIpOworCQkJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIkhOUDogU2V0dGluZyB0aW1lciBmb3IgYl9hc2UwX2Jyc3RcbiIpOwogCQkJCW1vZF90aW1lcigmbXVzYi0+b3RnX3RpbWVyLCBqaWZmaWVzCiAJCQkJCSsgbXNlY3NfdG9famlmZmllcygKIAkJCQkJCQlPVEdfVElNRV9CX0FTRTBfQlJTVCkpOwpAQCAtNjg0LDcgKzY2Miw3IEBACiAJCQlicmVhazsKIAkJY2FzZSBPVEdfU1RBVEVfQl9IT1NUOgogCQkJLyogVHJhbnNpdGlvbiB0byBCX1BFUklQSEVSQUwsIHNlZSA2LjguMi42IHAgNDQgKi8KLQkJCURCRygxLCAiUkVWSVNJVDogU1VTUEVORCBhcyBCX0hPU1RcbiIpOworCQkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiUkVWSVNJVDogU1VTUEVORCBhcyBCX0hPU1RcbiIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQkvKiAic2hvdWxkIG5vdCBoYXBwZW4iICovCkBAIC03MjcsMTQgKzcwNSwxNCBAQAogCQlzd2l0Y2ggKG11c2ItPnhjZWl2LT5zdGF0ZSkgewogCQljYXNlIE9UR19TVEFURV9CX1BFUklQSEVSQUw6CiAJCQlpZiAoaW50X3VzYiAmIE1VU0JfSU5UUl9TVVNQRU5EKSB7Ci0JCQkJREJHKDEsICJITlA6IFNVU1BFTkQrQ09OTkVDVCwgbm93IGJfaG9zdFxuIik7CisJCQkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiSE5QOiBTVVNQRU5EK0NPTk5FQ1QsIG5vdyBiX2hvc3RcbiIpOwogCQkJCWludF91c2IgJj0gfk1VU0JfSU5UUl9TVVNQRU5EOwogCQkJCWdvdG8gYl9ob3N0OwogCQkJfSBlbHNlCi0JCQkJREJHKDEsICJDT05ORUNUIGFzIGJfcGVyaXBoZXJhbD8/P1xuIik7CisJCQkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiQ09OTkVDVCBhcyBiX3BlcmlwaGVyYWw/Pz9cbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgT1RHX1NUQVRFX0JfV0FJVF9BQ09OOgotCQkJREJHKDEsICJITlA6IENPTk5FQ1QsIG5vdyBiX2hvc3RcbiIpOworCQkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiSE5QOiBDT05ORUNULCBub3cgYl9ob3N0XG4iKTsKIGJfaG9zdDoKIAkJCW11c2ItPnhjZWl2LT5zdGF0ZSA9IE9UR19TVEFURV9CX0hPU1Q7CiAJCQloY2QtPnNlbGYuaXNfYl9ob3N0ID0gMTsKQEAgLTc1NywxNCArNzM1LDE0IEBACiAJCWVsc2UKIAkJCXVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKGhjZCk7CiAKLQkJREJHKDEsICJDT05ORUNUICglcykgZGV2Y3RsICUwMnhcbiIsCi0JCQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiKSwgZGV2Y3RsKTsKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiQ09OTkVDVCAoJXMpIGRldmN0bCAlMDJ4XG4iLAorCQkJCW90Z19zdGF0ZV9zdHJpbmcobXVzYi0+eGNlaXYtPnN0YXRlKSwgZGV2Y3RsKTsKIAl9CiAjZW5kaWYJLyogQ09ORklHX1VTQl9NVVNCX0hEUkNfSENEICovCiAKIAlpZiAoKGludF91c2IgJiBNVVNCX0lOVFJfRElTQ09OTkVDVCkgJiYgIW11c2ItPmlnbm9yZV9kaXNjb25uZWN0KSB7Ci0JCURCRygxLCAiRElTQ09OTkVDVCAoJXMpIGFzICVzLCBkZXZjdGwgJTAyeFxuIiwKLQkJCQlvdGdfc3RhdGVfc3RyaW5nKG11c2IpLAorCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJESVNDT05ORUNUICglcykgYXMgJXMsIGRldmN0bCAlMDJ4XG4iLAorCQkJCW90Z19zdGF0ZV9zdHJpbmcobXVzYi0+eGNlaXYtPnN0YXRlKSwKIAkJCQlNVVNCX01PREUobXVzYiksIGRldmN0bCk7CiAJCWhhbmRsZWQgPSBJUlFfSEFORExFRDsKIApAQCAtODA3LDcgKzc4NSw3IEBACiAjZW5kaWYJLyogR0FER0VUICovCiAJCWRlZmF1bHQ6CiAJCQlXQVJOSU5HKCJ1bmhhbmRsZWQgRElTQ09OTkVDVCB0cmFuc2l0aW9uICglcylcbiIsCi0JCQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiKSk7CisJCQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiLT54Y2Vpdi0+c3RhdGUpKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtODI2LDEzICs4MDQsMTQgQEAKIAkJCSAqIHN0b3AgdGhlIHNlc3Npb24uCiAJCQkgKi8KIAkJCWlmIChkZXZjdGwgJiAoTVVTQl9ERVZDVExfRlNERVYgfCBNVVNCX0RFVkNUTF9MU0RFVikpCi0JCQkJREJHKDEsICJCQUJCTEUgZGV2Y3RsOiAlMDJ4XG4iLCBkZXZjdGwpOworCQkJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIkJBQkJMRSBkZXZjdGw6ICUwMnhcbiIsIGRldmN0bCk7CiAJCQllbHNlIHsKIAkJCQlFUlIoIlN0b3BwaW5nIGhvc3Qgc2Vzc2lvbiAtLSBiYWJibGVcbiIpOwogCQkJCW11c2Jfd3JpdGViKG11c2ItPm1yZWdzLCBNVVNCX0RFVkNUTCwgMCk7CiAJCQl9CiAJCX0gZWxzZSBpZiAoaXNfcGVyaXBoZXJhbF9jYXBhYmxlKCkpIHsKLQkJCURCRygxLCAiQlVTIFJFU0VUIGFzICVzXG4iLCBvdGdfc3RhdGVfc3RyaW5nKG11c2IpKTsKKwkJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIkJVUyBSRVNFVCBhcyAlc1xuIiwKKwkJCQlvdGdfc3RhdGVfc3RyaW5nKG11c2ItPnhjZWl2LT5zdGF0ZSkpOwogCQkJc3dpdGNoIChtdXNiLT54Y2Vpdi0+c3RhdGUpIHsKICNpZmRlZiBDT05GSUdfVVNCX09URwogCQkJY2FzZSBPVEdfU1RBVEVfQV9TVVNQRU5EOgpAQCAtODQ1LDkgKzgyNCw5IEBACiAJCQkJLyogRkFMTFRIUk9VR0ggKi8KIAkJCWNhc2UgT1RHX1NUQVRFX0FfV0FJVF9CQ09OOgkvKiBPUFQgVEQuNC43LTkwMG1zICovCiAJCQkJLyogbmV2ZXIgdXNlIGludmFsaWQgVChhX3dhaXRfYmNvbikgKi8KLQkJCQlEQkcoMSwgIkhOUDogaW4gJXMsICVkIG1zZWMgdGltZW91dFxuIiwKLQkJCQkJCW90Z19zdGF0ZV9zdHJpbmcobXVzYiksCi0JCQkJCQlUQV9XQUlUX0JDT04obXVzYikpOworCQkJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIkhOUDogaW4gJXMsICVkIG1zZWMgdGltZW91dFxuIiwKKwkJCQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiLT54Y2Vpdi0+c3RhdGUpLAorCQkJCQlUQV9XQUlUX0JDT04obXVzYikpOwogCQkJCW1vZF90aW1lcigmbXVzYi0+b3RnX3RpbWVyLCBqaWZmaWVzCiAJCQkJCSsgbXNlY3NfdG9famlmZmllcyhUQV9XQUlUX0JDT04obXVzYikpKTsKIAkJCQlicmVhazsKQEAgLTg1Nyw4ICs4MzYsOCBAQAogCQkJCW11c2JfZ19yZXNldChtdXNiKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgT1RHX1NUQVRFX0JfV0FJVF9BQ09OOgotCQkJCURCRygxLCAiSE5QOiBSRVNFVCAoJXMpLCB0byBiX3BlcmlwaGVyYWxcbiIsCi0JCQkJCW90Z19zdGF0ZV9zdHJpbmcobXVzYikpOworCQkJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIkhOUDogUkVTRVQgKCVzKSwgdG8gYl9wZXJpcGhlcmFsXG4iLAorCQkJCQlvdGdfc3RhdGVfc3RyaW5nKG11c2ItPnhjZWl2LT5zdGF0ZSkpOwogCQkJCW11c2ItPnhjZWl2LT5zdGF0ZSA9IE9UR19TVEFURV9CX1BFUklQSEVSQUw7CiAJCQkJbXVzYl9nX3Jlc2V0KG11c2IpOwogCQkJCWJyZWFrOwpAQCAtODcwLDggKzg0OSw4IEBACiAJCQkJbXVzYl9nX3Jlc2V0KG11c2IpOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKLQkJCQlEQkcoMSwgIlVuaGFuZGxlZCBCVVMgUkVTRVQgYXMgJXNcbiIsCi0JCQkJCW90Z19zdGF0ZV9zdHJpbmcobXVzYikpOworCQkJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIlVuaGFuZGxlZCBCVVMgUkVTRVQgYXMgJXNcbiIsCisJCQkJCW90Z19zdGF0ZV9zdHJpbmcobXVzYi0+eGNlaXYtPnN0YXRlKSk7CiAJCQl9CiAJCX0KIAl9CkBAIC04OTQsNyArODczLDcgQEAKIAkJdTggZXBudW07CiAJCXUxNiBmcmFtZTsKIAotCQlEQkcoNiwgIlNUQVJUX09GX0ZSQU1FXG4iKTsKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiU1RBUlRfT0ZfRlJBTUVcbiIpOwogCQloYW5kbGVkID0gSVJRX0hBTkRMRUQ7CiAKIAkJLyogc3RhcnQgYW55IHBlcmlvZGljIFR4IHRyYW5zZmVycyB3YWl0aW5nIGZvciBjdXJyZW50IGZyYW1lICovCkBAIC05MzYsNyArOTE1LDcgQEAKIAl2b2lkIF9faW9tZW0JKnJlZ3MgPSBtdXNiLT5tcmVnczsKIAl1OAkJZGV2Y3RsID0gbXVzYl9yZWFkYihyZWdzLCBNVVNCX0RFVkNUTCk7CiAKLQlEQkcoMiwgIjw9PSBkZXZjdGwgJTAyeFxuIiwgZGV2Y3RsKTsKKwlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICI8PT0gZGV2Y3RsICUwMnhcbiIsIGRldmN0bCk7CiAKIAkvKiAgU2V0IElOVCBlbmFibGUgcmVnaXN0ZXJzLCBlbmFibGUgaW50ZXJydXB0cyAqLwogCW11c2Jfd3JpdGV3KHJlZ3MsIE1VU0JfSU5UUlRYRSwgbXVzYi0+ZXBtYXNrKTsKQEAgLTEwMTMsNyArOTkyLDcgQEAKIAkvKiBzdG9wIElSUXMsIHRpbWVycywgLi4uICovCiAJbXVzYl9wbGF0Zm9ybV9kaXNhYmxlKG11c2IpOwogCW11c2JfZ2VuZXJpY19kaXNhYmxlKG11c2IpOwotCURCRygzLCAiSERSQyBkaXNhYmxlZFxuIik7CisJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiSERSQyBkaXNhYmxlZFxuIik7CiAKIAkvKiBGSVhNRQogCSAqICAtIG1hcmsgaG9zdCBhbmQvb3IgcGVyaXBoZXJhbCBkcml2ZXJzIHVudXNhYmxlL2luYWN0aXZlCkBAIC0xMzU5LDcgKzEzMzgsNyBAQAogCXZvaWQgKm1iYXNlID0gbXVzYi0+bXJlZ3M7CiAJaW50IHJldCA9IDA7CiAKLQlEQkcoMiwgIjw9PSBzdGF0aWMgc2lsaWNvbiBlcCBjb25maWdcbiIpOworCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIjw9PSBzdGF0aWMgc2lsaWNvbiBlcCBjb25maWdcbiIpOwogCiAJLyogRklYTUUgcGljayB1cCBlcDAgbWF4cGFja2V0IHNpemUgKi8KIApAQCAtMTUwNiw3ICsxNDg1LDcgQEAKICNlbmRpZgogCiAJCWlmIChod19lcC0+bWF4X3BhY2tldF9zel90eCkgewotCQkJREJHKDEsCisJCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsCiAJCQkJIiVzOiBod19lcCAlZCVzLCAlc21heCAlZFxuIiwKIAkJCQltdXNiX2RyaXZlcl9uYW1lLCBpLAogCQkJCWh3X2VwLT5pc19zaGFyZWRfZmlmbyA/ICJzaGFyZWQiIDogInR4IiwKQEAgLTE1MTUsNyArMTQ5NCw3IEBACiAJCQkJaHdfZXAtPm1heF9wYWNrZXRfc3pfdHgpOwogCQl9CiAJCWlmIChod19lcC0+bWF4X3BhY2tldF9zel9yeCAmJiAhaHdfZXAtPmlzX3NoYXJlZF9maWZvKSB7Ci0JCQlEQkcoMSwKKwkJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwKIAkJCQkiJXM6IGh3X2VwICVkJXMsICVzbWF4ICVkXG4iLAogCQkJCW11c2JfZHJpdmVyX25hbWUsIGksCiAJCQkJInJ4IiwKQEAgLTE1MjQsNyArMTUwMyw3IEBACiAJCQkJaHdfZXAtPm1heF9wYWNrZXRfc3pfcngpOwogCQl9CiAJCWlmICghKGh3X2VwLT5tYXhfcGFja2V0X3N6X3R4IHx8IGh3X2VwLT5tYXhfcGFja2V0X3N6X3J4KSkKLQkJCURCRygxLCAiaHdfZXAgJWQgbm90IGNvbmZpZ3VyZWRcbiIsIGkpOworCQkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiaHdfZXAgJWQgbm90IGNvbmZpZ3VyZWRcbiIsIGkpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTU3NywxNCArMTU1NiwxNCBAQAogCWRldmN0bCA9IG11c2JfcmVhZGIobXVzYi0+bXJlZ3MsIE1VU0JfREVWQ1RMKTsKIAlwb3dlciA9IG11c2JfcmVhZGIobXVzYi0+bXJlZ3MsIE1VU0JfUE9XRVIpOwogCi0JREJHKDQsICIqKiBJUlEgJXMgdXNiJTA0eCB0eCUwNHggcnglMDR4XG4iLAorCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIioqIElSUSAlcyB1c2IlMDR4IHR4JTA0eCByeCUwNHhcbiIsCiAJCShkZXZjdGwgJiBNVVNCX0RFVkNUTF9ITSkgPyAiaG9zdCIgOiAicGVyaXBoZXJhbCIsCiAJCW11c2ItPmludF91c2IsIG11c2ItPmludF90eCwgbXVzYi0+aW50X3J4KTsKIAogI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQwogCWlmIChpc19vdGdfZW5hYmxlZChtdXNiKSB8fCBpc19wZXJpcGhlcmFsX2VuYWJsZWQobXVzYikpCiAJCWlmICghbXVzYi0+Z2FkZ2V0X2RyaXZlcikgewotCQkJREJHKDUsICJObyBnYWRnZXQgZHJpdmVyIGxvYWRlZFxuIik7CisJCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJObyBnYWRnZXQgZHJpdmVyIGxvYWRlZFxuIik7CiAJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJCX0KICNlbmRpZgpAQCAtMTY0OSw3ICsxNjI4LDcgQEAKIAogCXJldHVybiByZXR2YWw7CiB9Ci0KK0VYUE9SVF9TWU1CT0xfR1BMKG11c2JfaW50ZXJydXB0KTsKIAogI2lmbmRlZiBDT05GSUdfTVVTQl9QSU9fT05MWQogc3RhdGljIGludCBfX2luaXRkYXRhIHVzZV9kbWEgPSAxOwpAQCAtMTcxMyw3ICsxNjkyLDcgQEAKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtdXNiLT5sb2NrLCBmbGFncyk7Ci0JcmV0ID0gc3ByaW50ZihidWYsICIlc1xuIiwgb3RnX3N0YXRlX3N0cmluZyhtdXNiKSk7CisJcmV0ID0gc3ByaW50ZihidWYsICIlc1xuIiwgb3RnX3N0YXRlX3N0cmluZyhtdXNiLT54Y2Vpdi0+c3RhdGUpKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdXNiLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMjA3NSw3ICsyMDU0LDcgQEAKIAkJc3RhdHVzID0gdXNiX2FkZF9oY2QobXVzYl90b19oY2QobXVzYiksIC0xLCAwKTsKIAogCQloY2QtPnNlbGYudXNlc19waW9fZm9yX2NvbnRyb2wgPSAxOwotCQlEQkcoMSwgIiVzIG1vZGUsIHN0YXR1cyAlZCwgZGV2Y3RsICUwMnggJWNcbiIsCisJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIiVzIG1vZGUsIHN0YXR1cyAlZCwgZGV2Y3RsICUwMnggJWNcbiIsCiAJCQkiSE9TVCIsIHN0YXR1cywKIAkJCW11c2JfcmVhZGIobXVzYi0+bXJlZ3MsIE1VU0JfREVWQ1RMKSwKIAkJCShtdXNiX3JlYWRiKG11c2ItPm1yZWdzLCBNVVNCX0RFVkNUTCkKQEAgLTIwODksNyArMjA2OCw3IEBACiAKIAkJc3RhdHVzID0gbXVzYl9nYWRnZXRfc2V0dXAobXVzYik7CiAKLQkJREJHKDEsICIlcyBtb2RlLCBzdGF0dXMgJWQsIGRldiUwMnhcbiIsCisJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIiVzIG1vZGUsIHN0YXR1cyAlZCwgZGV2JTAyeFxuIiwKIAkJCWlzX290Z19lbmFibGVkKG11c2IpID8gIk9URyIgOiAiUEVSSVBIRVJBTCIsCiAJCQlzdGF0dXMsCiAJCQltdXNiX3JlYWRiKG11c2ItPm1yZWdzLCBNVVNCX0RFVkNUTCkpOwpAQCAtMjQ2MCw2ICsyNDM5LDggQEAKIAkJIm11c2ItZG1hIgogI2VsaWYgZGVmaW5lZChDT05GSUdfVVNCX1RVU0JfT01BUF9ETUEpCiAJCSJ0dXNiLW9tYXAtZG1hIgorI2VsaWYgZGVmaW5lZChDT05GSUdfVVNCX1VYNTAwX0RNQSkKKwkJInV4NTAwLWRtYSIKICNlbHNlCiAJCSI/ZG1hPyIKICNlbmRpZgpAQCAtMjQ3MSw4ICsyNDUyLDggQEAKICNlbGlmIGRlZmluZWQoQ09ORklHX1VTQl9NVVNCX0hEUkNfSENEKQogCQkiaG9zdCIKICNlbmRpZgotCQkiLCBkZWJ1Zz0lZFxuIiwKLQkJbXVzYl9kcml2ZXJfbmFtZSwgbXVzYl9kZWJ1Zyk7CisJCSwKKwkJbXVzYl9kcml2ZXJfbmFtZSk7CiAJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmbXVzYl9kcml2ZXIsIG11c2JfcHJvYmUpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZGVidWcuaCBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9kZWJ1Zy5oCmluZGV4IDk0ZjY5NzMuLjc0MmVhZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9kZWJ1Zy5oCkBAIC00MiwyMCArNDIsNiBAQAogI2RlZmluZSBJTkZPKGZtdCwgYXJncy4uLikgeXByaW50ayhLRVJOX0lORk8sIGZtdCwgIyMgYXJncykKICNkZWZpbmUgRVJSKGZtdCwgYXJncy4uLikgeXByaW50ayhLRVJOX0VSUiwgZm10LCAjIyBhcmdzKQogCi0jZGVmaW5lIERCRyhsZXZlbCwgZm9ybWF0LCBhcmdzLi4uKSBkbyB7IFwKLQlpZiAoX2RiZ19sZXZlbChsZXZlbCkpIFwKLQkJcHJfZGVidWcoIiVzICVkOiAiIGZvcm1hdCwgX19mdW5jX18sIF9fTElORV9fLCAjIyBhcmdzKTsgXAotCX0gd2hpbGUgKDApCi0KLWV4dGVybiB1bnNpZ25lZCBtdXNiX2RlYnVnOwotCi1zdGF0aWMgaW5saW5lIGludCBfZGJnX2xldmVsKHVuc2lnbmVkIGwpCi17Ci0JcmV0dXJuIG11c2JfZGVidWcgPj0gbDsKLX0KLQotZXh0ZXJuIGNvbnN0IGNoYXIgKm90Z19zdGF0ZV9zdHJpbmcoc3RydWN0IG11c2IgKik7Ci0KICNpZmRlZiBDT05GSUdfREVCVUdfRlMKIGV4dGVybiBpbnQgbXVzYl9pbml0X2RlYnVnZnMoc3RydWN0IG11c2IgKm11c2IpOwogZXh0ZXJuIHZvaWQgbXVzYl9leGl0X2RlYnVnZnMoc3RydWN0IG11c2IgKm11c2IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5jCmluZGV4IGY0N2MyMDEuLjBhNTBhMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMKQEAgLTE0Nyw3ICsxNDcsOCBAQAogCQlyZXR1cm47CiAKIAlpZiAocmVxdWVzdC0+cmVxdWVzdC5kbWEgPT0gRE1BX0FERFJfSU5WQUxJRCkgewotCQlEQkcoMjAsICJub3QgdW5tYXBwaW5nIGEgbmV2ZXIgbWFwcGVkIGJ1ZmZlclxuIik7CisJCWRldl92ZGJnKG11c2ItPmNvbnRyb2xsZXIsCisJCQkJIm5vdCB1bm1hcHBpbmcgYSBuZXZlciBtYXBwZWQgYnVmZmVyXG4iKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAocmVxdWVzdC0+bWFwX3N0YXRlID09IE1VU0JfTUFQUEVEKSB7CkBAIC0xOTgsMTEgKzE5OSwxMSBAQAogCXNwaW5fdW5sb2NrKCZtdXNiLT5sb2NrKTsKIAl1bm1hcF9kbWFfYnVmZmVyKHJlcSwgbXVzYik7CiAJaWYgKHJlcXVlc3QtPnN0YXR1cyA9PSAwKQotCQlEQkcoNSwgIiVzIGRvbmUgcmVxdWVzdCAlcCwgICVkLyVkXG4iLAorCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICIlcyBkb25lIHJlcXVlc3QgJXAsICAlZC8lZFxuIiwKIAkJCQllcC0+ZW5kX3BvaW50Lm5hbWUsIHJlcXVlc3QsCiAJCQkJcmVxLT5yZXF1ZXN0LmFjdHVhbCwgcmVxLT5yZXF1ZXN0Lmxlbmd0aCk7CiAJZWxzZQotCQlEQkcoMiwgIiVzIHJlcXVlc3QgJXAsICVkLyVkIGZhdWx0ICVkXG4iLAorCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICIlcyByZXF1ZXN0ICVwLCAlZC8lZCBmYXVsdCAlZFxuIiwKIAkJCQllcC0+ZW5kX3BvaW50Lm5hbWUsIHJlcXVlc3QsCiAJCQkJcmVxLT5yZXF1ZXN0LmFjdHVhbCwgcmVxLT5yZXF1ZXN0Lmxlbmd0aCwKIAkJCQlyZXF1ZXN0LT5zdGF0dXMpOwpAQCAtMjE5LDYgKzIyMCw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIG51a2Uoc3RydWN0IG11c2JfZXAgKmVwLCBjb25zdCBpbnQgc3RhdHVzKQogeworCXN0cnVjdCBtdXNiCQkqbXVzYiA9IGVwLT5tdXNiOwogCXN0cnVjdCBtdXNiX3JlcXVlc3QJKnJlcSA9IE5VTEw7CiAJdm9pZCBfX2lvbWVtICplcGlvID0gZXAtPm11c2ItPmVuZHBvaW50c1tlcC0+Y3VycmVudF9lcG51bV0ucmVnczsKIApAQCAtMjQ2LDcgKzI0OCw4IEBACiAJCX0KIAogCQl2YWx1ZSA9IGMtPmNoYW5uZWxfYWJvcnQoZXAtPmRtYSk7Ci0JCURCRyh2YWx1ZSA/IDEgOiA2LCAiJXM6IGFib3J0IERNQSAtLT4gJWRcbiIsIGVwLT5uYW1lLCB2YWx1ZSk7CisJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIiVzOiBhYm9ydCBETUEgLS0+ICVkXG4iLAorCQkJCWVwLT5uYW1lLCB2YWx1ZSk7CiAJCWMtPmNoYW5uZWxfcmVsZWFzZShlcC0+ZG1hKTsKIAkJZXAtPmRtYSA9IE5VTEw7CiAJfQpAQCAtMzI5LDcgKzMzMiw3IEBACiAKIAkvKiB3ZSBzaG91bGRuJ3QgZ2V0IGhlcmUgd2hpbGUgRE1BIGlzIGFjdGl2ZSAuLi4gYnV0IHdlIGRvIC4uLiAqLwogCWlmIChkbWFfY2hhbm5lbF9zdGF0dXMobXVzYl9lcC0+ZG1hKSA9PSBNVVNCX0RNQV9TVEFUVVNfQlVTWSkgewotCQlEQkcoNCwgImRtYSBwZW5kaW5nLi4uXG4iKTsKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiZG1hIHBlbmRpbmcuLi5cbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0zNDEsMTggKzM0NCwxOCBAQAogCQkJKGludCkocmVxdWVzdC0+bGVuZ3RoIC0gcmVxdWVzdC0+YWN0dWFsKSk7CiAKIAlpZiAoY3NyICYgTVVTQl9UWENTUl9UWFBLVFJEWSkgewotCQlEQkcoNSwgIiVzIG9sZCBwYWNrZXQgc3RpbGwgcmVhZHkgLCB0eGNzciAlMDN4XG4iLAorCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICIlcyBvbGQgcGFja2V0IHN0aWxsIHJlYWR5ICwgdHhjc3IgJTAzeFxuIiwKIAkJCQltdXNiX2VwLT5lbmRfcG9pbnQubmFtZSwgY3NyKTsKIAkJcmV0dXJuOwogCX0KIAogCWlmIChjc3IgJiBNVVNCX1RYQ1NSX1BfU0VORFNUQUxMKSB7Ci0JCURCRyg1LCAiJXMgc3RhbGxpbmcsIHR4Y3NyICUwM3hcbiIsCisJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIiVzIHN0YWxsaW5nLCB0eGNzciAlMDN4XG4iLAogCQkJCW11c2JfZXAtPmVuZF9wb2ludC5uYW1lLCBjc3IpOwogCQlyZXR1cm47CiAJfQogCi0JREJHKDQsICJod19lcCVkLCBtYXhwYWNrZXQgJWQsIGZpZm8gY291bnQgJWQsIHR4Y3NyICUwM3hcbiIsCisJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiaHdfZXAlZCwgbWF4cGFja2V0ICVkLCBmaWZvIGNvdW50ICVkLCB0eGNzciAlMDN4XG4iLAogCQkJZXBudW0sIG11c2JfZXAtPnBhY2tldF9zeiwgZmlmb19jb3VudCwKIAkJCWNzcik7CiAKQEAgLTM2OSw3ICszNzIsNyBAQAogCiAJCS8qIE1VU0JfVFhDU1JfUF9JU08gaXMgc3RpbGwgc2V0IGNvcnJlY3RseSAqLwogCi0jaWZkZWYgQ09ORklHX1VTQl9JTlZFTlRSQV9ETUEKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfSU5WRU5UUkFfRE1BKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfVVg1MDBfRE1BKQogCQl7CiAJCQlpZiAocmVxdWVzdF9zaXplIDwgbXVzYl9lcC0+cGFja2V0X3N6KQogCQkJCW11c2JfZXAtPmRtYS0+ZGVzaXJlZF9tb2RlID0gMDsKQEAgLTQ2OSw3ICs0NzIsNyBAQAogCX0KIAogCS8qIGhvc3QgbWF5IGFscmVhZHkgaGF2ZSB0aGUgZGF0YSB3aGVuIHRoaXMgbWVzc2FnZSBzaG93cy4uLiAqLwotCURCRygzLCAiJXMgVFgvSU4gJXMgbGVuICVkLyVkLCB0eGNzciAlMDR4LCBmaWZvICVkLyVkXG4iLAorCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIiVzIFRYL0lOICVzIGxlbiAlZC8lZCwgdHhjc3IgJTA0eCwgZmlmbyAlZC8lZFxuIiwKIAkJCW11c2JfZXAtPmVuZF9wb2ludC5uYW1lLCB1c2VfZG1hID8gImRtYSIgOiAicGlvIiwKIAkJCXJlcXVlc3QtPmFjdHVhbCwgcmVxdWVzdC0+bGVuZ3RoLAogCQkJbXVzYl9yZWFkdyhlcGlvLCBNVVNCX1RYQ1NSKSwKQEAgLTQ5Niw3ICs0OTksNyBAQAogCXJlcXVlc3QgPSAmcmVxLT5yZXF1ZXN0OwogCiAJY3NyID0gbXVzYl9yZWFkdyhlcGlvLCBNVVNCX1RYQ1NSKTsKLQlEQkcoNCwgIjw9PSAlcywgdHhjc3IgJTA0eFxuIiwgbXVzYl9lcC0+ZW5kX3BvaW50Lm5hbWUsIGNzcik7CisJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiPD09ICVzLCB0eGNzciAlMDR4XG4iLCBtdXNiX2VwLT5lbmRfcG9pbnQubmFtZSwgY3NyKTsKIAogCWRtYSA9IGlzX2RtYV9jYXBhYmxlKCkgPyBtdXNiX2VwLT5kbWEgOiBOVUxMOwogCkBAIC01MTYsNyArNTE5LDggQEAKIAkJY3NyIHw9CSBNVVNCX1RYQ1NSX1BfV1pDX0JJVFM7CiAJCWNzciAmPSB+KE1VU0JfVFhDU1JfUF9VTkRFUlJVTiB8IE1VU0JfVFhDU1JfVFhQS1RSRFkpOwogCQltdXNiX3dyaXRldyhlcGlvLCBNVVNCX1RYQ1NSLCBjc3IpOwotCQlEQkcoMjAsICJ1bmRlcnJ1biBvbiBlcCVkLCByZXEgJXBcbiIsIGVwbnVtLCByZXF1ZXN0KTsKKwkJZGV2X3ZkYmcobXVzYi0+Y29udHJvbGxlciwgInVuZGVycnVuIG9uIGVwJWQsIHJlcSAlcFxuIiwKKwkJCQllcG51bSwgcmVxdWVzdCk7CiAJfQogCiAJaWYgKGRtYV9jaGFubmVsX3N0YXR1cyhkbWEpID09IE1VU0JfRE1BX1NUQVRVU19CVVNZKSB7CkBAIC01MjQsNyArNTI4LDcgQEAKIAkJICogU0hPVUxEIE5PVCBIQVBQRU4uLi4gaGFzIHdpdGggQ1BQSSB0aG91Z2gsIGFmdGVyCiAJCSAqIGNoYW5naW5nIFNFTkRTVEFMTCAoYW5kIG90aGVyIGNhc2VzKTsgaGFybWxlc3M/CiAJCSAqLwotCQlEQkcoNSwgIiVzIGRtYSBzdGlsbCBidXN5P1xuIiwgbXVzYl9lcC0+ZW5kX3BvaW50Lm5hbWUpOworCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICIlcyBkbWEgc3RpbGwgYnVzeT9cbiIsIG11c2JfZXAtPmVuZF9wb2ludC5uYW1lKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNTQwLDcgKzU0NCw3IEBACiAJCQkvKiBFbnN1cmUgd3JpdGVidWZmZXIgaXMgZW1wdHkuICovCiAJCQljc3IgPSBtdXNiX3JlYWR3KGVwaW8sIE1VU0JfVFhDU1IpOwogCQkJcmVxdWVzdC0+YWN0dWFsICs9IG11c2JfZXAtPmRtYS0+YWN0dWFsX2xlbjsKLQkJCURCRyg0LCAiVFhDU1IlZCAlMDR4LCBETUEgb2ZmLCBsZW4gJXp1LCByZXEgJXBcbiIsCisJCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJUWENTUiVkICUwNHgsIERNQSBvZmYsIGxlbiAlenUsIHJlcSAlcFxuIiwKIAkJCQllcG51bSwgY3NyLCBtdXNiX2VwLT5kbWEtPmFjdHVhbF9sZW4sIHJlcXVlc3QpOwogCQl9CiAKQEAgLTU1MSw3ICs1NTUsNyBAQAogCQlpZiAoKHJlcXVlc3QtPnplcm8gJiYgcmVxdWVzdC0+bGVuZ3RoCiAJCQkmJiAocmVxdWVzdC0+bGVuZ3RoICUgbXVzYl9lcC0+cGFja2V0X3N6ID09IDApCiAJCQkmJiAocmVxdWVzdC0+YWN0dWFsID09IHJlcXVlc3QtPmxlbmd0aCkpCi0jaWZkZWYgQ09ORklHX1VTQl9JTlZFTlRSQV9ETUEKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfSU5WRU5UUkFfRE1BKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfVVg1MDBfRE1BKQogCQkJfHwgKGlzX2RtYSAmJiAoIWRtYS0+ZGVzaXJlZF9tb2RlIHx8CiAJCQkJKHJlcXVlc3QtPmFjdHVhbCAmCiAJCQkJCShtdXNiX2VwLT5wYWNrZXRfc3ogLSAxKSkpKQpAQCAtNTY0LDcgKzU2OCw3IEBACiAJCQlpZiAoY3NyICYgTVVTQl9UWENTUl9UWFBLVFJEWSkKIAkJCQlyZXR1cm47CiAKLQkJCURCRyg0LCAic2VuZGluZyB6ZXJvIHBrdFxuIik7CisJCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJzZW5kaW5nIHplcm8gcGt0XG4iKTsKIAkJCW11c2Jfd3JpdGV3KGVwaW8sIE1VU0JfVFhDU1IsIE1VU0JfVFhDU1JfTU9ERQogCQkJCQl8IE1VU0JfVFhDU1JfVFhQS1RSRFkpOwogCQkJcmVxdWVzdC0+emVybyA9IDA7CkBAIC01NzQsNyArNTc4LDcgQEAKIAkJCW11c2JfZ19naXZlYmFjayhtdXNiX2VwLCByZXF1ZXN0LCAwKTsKIAkJCXJlcSA9IG11c2JfZXAtPmRlc2MgPyBuZXh0X3JlcXVlc3QobXVzYl9lcCkgOiBOVUxMOwogCQkJaWYgKCFyZXEpIHsKLQkJCQlEQkcoNCwgIiVzIGlkbGUgbm93XG4iLAorCQkJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIiVzIGlkbGUgbm93XG4iLAogCQkJCQltdXNiX2VwLT5lbmRfcG9pbnQubmFtZSk7CiAJCQkJcmV0dXJuOwogCQkJfQpAQCAtNjQwLDEyICs2NDQsMTIgQEAKIAogCS8qIFdlIHNob3VsZG4ndCBnZXQgaGVyZSB3aGlsZSBETUEgaXMgYWN0aXZlLCBidXQgd2UgZG8uLi4gKi8KIAlpZiAoZG1hX2NoYW5uZWxfc3RhdHVzKG11c2JfZXAtPmRtYSkgPT0gTVVTQl9ETUFfU1RBVFVTX0JVU1kpIHsKLQkJREJHKDQsICJETUEgcGVuZGluZy4uLlxuIik7CisJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIkRNQSBwZW5kaW5nLi4uXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCWlmIChjc3IgJiBNVVNCX1JYQ1NSX1BfU0VORFNUQUxMKSB7Ci0JCURCRyg1LCAiJXMgc3RhbGxpbmcsIFJYQ1NSICUwNHhcbiIsCisJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIiVzIHN0YWxsaW5nLCBSWENTUiAlMDR4XG4iLAogCQkgICAgbXVzYl9lcC0+ZW5kX3BvaW50Lm5hbWUsIGNzcik7CiAJCXJldHVybjsKIAl9CkBAIC03NTQsMTAgKzc1OCw1NyBAQAogCQkJCWlmICh1c2VfZG1hKQogCQkJCQlyZXR1cm47CiAJCQl9CisjZWxpZiBkZWZpbmVkKENPTkZJR19VU0JfVVg1MDBfRE1BKQorCQkJaWYgKChpc19idWZmZXJfbWFwcGVkKHJlcSkpICYmCisJCQkJKHJlcXVlc3QtPmFjdHVhbCA8IHJlcXVlc3QtPmxlbmd0aCkpIHsKKworCQkJCXN0cnVjdCBkbWFfY29udHJvbGxlciAqYzsKKwkJCQlzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW5uZWw7CisJCQkJaW50IHRyYW5zZmVyX3NpemUgPSAwOworCisJCQkJYyA9IG11c2ItPmRtYV9jb250cm9sbGVyOworCQkJCWNoYW5uZWwgPSBtdXNiX2VwLT5kbWE7CisKKwkJCQkvKiBJbiBjYXNlIGZpcnN0IHBhY2tldCBpcyBzaG9ydCAqLworCQkJCWlmIChsZW4gPCBtdXNiX2VwLT5wYWNrZXRfc3opCisJCQkJCXRyYW5zZmVyX3NpemUgPSBsZW47CisJCQkJZWxzZSBpZiAocmVxdWVzdC0+c2hvcnRfbm90X29rKQorCQkJCQl0cmFuc2Zlcl9zaXplID0JbWluKHJlcXVlc3QtPmxlbmd0aCAtCisJCQkJCQkJcmVxdWVzdC0+YWN0dWFsLAorCQkJCQkJCWNoYW5uZWwtPm1heF9sZW4pOworCQkJCWVsc2UKKwkJCQkJdHJhbnNmZXJfc2l6ZSA9IG1pbihyZXF1ZXN0LT5sZW5ndGggLQorCQkJCQkJCXJlcXVlc3QtPmFjdHVhbCwKKwkJCQkJCQkodW5zaWduZWQpbGVuKTsKKworCQkJCWNzciAmPSB+TVVTQl9SWENTUl9ETUFNT0RFOworCQkJCWNzciB8PSAoTVVTQl9SWENTUl9ETUFFTkFCIHwKKwkJCQkJTVVTQl9SWENTUl9BVVRPQ0xFQVIpOworCisJCQkJbXVzYl93cml0ZXcoZXBpbywgTVVTQl9SWENTUiwgY3NyKTsKKworCQkJCWlmICh0cmFuc2Zlcl9zaXplIDw9IG11c2JfZXAtPnBhY2tldF9zeikgeworCQkJCQltdXNiX2VwLT5kbWEtPmRlc2lyZWRfbW9kZSA9IDA7CisJCQkJfSBlbHNlIHsKKwkJCQkJbXVzYl9lcC0+ZG1hLT5kZXNpcmVkX21vZGUgPSAxOworCQkJCQkvKiBNb2RlIG11c3QgYmUgc2V0IGFmdGVyIERNQUVOQUIgKi8KKwkJCQkJY3NyIHw9IE1VU0JfUlhDU1JfRE1BTU9ERTsKKwkJCQkJbXVzYl93cml0ZXcoZXBpbywgTVVTQl9SWENTUiwgY3NyKTsKKwkJCQl9CisKKwkJCQlpZiAoYy0+Y2hhbm5lbF9wcm9ncmFtKGNoYW5uZWwsCisJCQkJCQkJbXVzYl9lcC0+cGFja2V0X3N6LAorCQkJCQkJCWNoYW5uZWwtPmRlc2lyZWRfbW9kZSwKKwkJCQkJCQlyZXF1ZXN0LT5kbWEKKwkJCQkJCQkrIHJlcXVlc3QtPmFjdHVhbCwKKwkJCQkJCQl0cmFuc2Zlcl9zaXplKSkKKworCQkJCQlyZXR1cm47CisJCQl9CiAjZW5kaWYJLyogTWVudG9yJ3MgRE1BICovCiAKIAkJCWZpZm9fY291bnQgPSByZXF1ZXN0LT5sZW5ndGggLSByZXF1ZXN0LT5hY3R1YWw7Ci0JCQlEQkcoMywgIiVzIE9VVC9SWCBwaW8gZmlmbyAlZC8lZCwgbWF4cGFja2V0ICVkXG4iLAorCQkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiJXMgT1VUL1JYIHBpbyBmaWZvICVkLyVkLCBtYXhwYWNrZXQgJWRcbiIsCiAJCQkJCW11c2JfZXAtPmVuZF9wb2ludC5uYW1lLAogCQkJCQlsZW4sIGZpZm9fY291bnQsCiAJCQkJCW11c2JfZXAtPnBhY2tldF9zeik7CkBAIC04NDYsNyArODk3LDcgQEAKIAljc3IgPSBtdXNiX3JlYWR3KGVwaW8sIE1VU0JfUlhDU1IpOwogCWRtYSA9IGlzX2RtYV9jYXBhYmxlKCkgPyBtdXNiX2VwLT5kbWEgOiBOVUxMOwogCi0JREJHKDQsICI8PT0gJXMsIHJ4Y3NyICUwNHglcyAlcFxuIiwgbXVzYl9lcC0+ZW5kX3BvaW50Lm5hbWUsCisJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiPD09ICVzLCByeGNzciAlMDR4JXMgJXBcbiIsIG11c2JfZXAtPmVuZF9wb2ludC5uYW1lLAogCQkJY3NyLCBkbWEgPyAiIChkbWEpIiA6ICIiLCByZXF1ZXN0KTsKIAogCWlmIChjc3IgJiBNVVNCX1JYQ1NSX1BfU0VOVFNUQUxMKSB7CkBAIC04NjEsMTkgKzkxMiwxOCBAQAogCQljc3IgJj0gfk1VU0JfUlhDU1JfUF9PVkVSUlVOOwogCQltdXNiX3dyaXRldyhlcGlvLCBNVVNCX1JYQ1NSLCBjc3IpOwogCi0JCURCRygzLCAiJXMgaXNvIG92ZXJydW4gb24gJXBcbiIsIG11c2JfZXAtPm5hbWUsIHJlcXVlc3QpOworCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICIlcyBpc28gb3ZlcnJ1biBvbiAlcFxuIiwgbXVzYl9lcC0+bmFtZSwgcmVxdWVzdCk7CiAJCWlmIChyZXF1ZXN0LT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKQogCQkJcmVxdWVzdC0+c3RhdHVzID0gLUVPVkVSRkxPVzsKIAl9CiAJaWYgKGNzciAmIE1VU0JfUlhDU1JfSU5DT01QUlgpIHsKIAkJLyogUkVWSVNJVCBub3QgbmVjZXNzYXJpbHkgYW4gZXJyb3IgKi8KLQkJREJHKDQsICIlcywgaW5jb21wcnhcbiIsIG11c2JfZXAtPmVuZF9wb2ludC5uYW1lKTsKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiJXMsIGluY29tcHJ4XG4iLCBtdXNiX2VwLT5lbmRfcG9pbnQubmFtZSk7CiAJfQogCiAJaWYgKGRtYV9jaGFubmVsX3N0YXR1cyhkbWEpID09IE1VU0JfRE1BX1NUQVRVU19CVVNZKSB7CiAJCS8qICJzaG91bGQgbm90IGhhcHBlbiI7IGxpa2VseSBSWFBLVFJEWSBwZW5kaW5nIGZvciBETUEgKi8KLQkJREJHKChjc3IgJiBNVVNCX1JYQ1NSX0RNQUVOQUIpID8gNCA6IDEsCi0JCQkiJXMgYnVzeSwgY3NyICUwNHhcbiIsCisJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIiVzIGJ1c3ksIGNzciAlMDR4XG4iLAogCQkJbXVzYl9lcC0+ZW5kX3BvaW50Lm5hbWUsIGNzcik7CiAJCXJldHVybjsKIAl9CkBAIC04ODcsMTIgKzkzNywxMyBAQAogCiAJCXJlcXVlc3QtPmFjdHVhbCArPSBtdXNiX2VwLT5kbWEtPmFjdHVhbF9sZW47CiAKLQkJREJHKDQsICJSWENTUiVkICUwNHgsIGRtYSBvZmYsICUwNHgsIGxlbiAlenUsIHJlcSAlcFxuIiwKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiUlhDU1IlZCAlMDR4LCBkbWEgb2ZmLCAlMDR4LCBsZW4gJXp1LCByZXEgJXBcbiIsCiAJCQllcG51bSwgY3NyLAogCQkJbXVzYl9yZWFkdyhlcGlvLCBNVVNCX1JYQ1NSKSwKIAkJCW11c2JfZXAtPmRtYS0+YWN0dWFsX2xlbiwgcmVxdWVzdCk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfSU5WRU5UUkFfRE1BKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfVFVTQl9PTUFQX0RNQSkKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfSU5WRU5UUkFfRE1BKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfVFVTQl9PTUFQX0RNQSkgfHwgXAorCWRlZmluZWQoQ09ORklHX1VTQl9VWDUwMF9ETUEpCiAJCS8qIEF1dG9jbGVhciBkb2Vzbid0IGNsZWFyIFJ4UGt0UmR5IGZvciBzaG9ydCBwYWNrZXRzICovCiAJCWlmICgoZG1hLT5kZXNpcmVkX21vZGUgPT0gMCAmJiAhaHdfZXAtPnJ4X2RvdWJsZV9idWZmZXJlZCkKIAkJCQl8fCAoZG1hLT5hY3R1YWxfbGVuCkBAIC05MjIsNyArOTczLDggQEAKIAkJaWYgKCFyZXEpCiAJCQlyZXR1cm47CiAJfQotI2lmIGRlZmluZWQoQ09ORklHX1VTQl9JTlZFTlRSQV9ETUEpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9UVVNCX09NQVBfRE1BKQorI2lmIGRlZmluZWQoQ09ORklHX1VTQl9JTlZFTlRSQV9ETUEpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9UVVNCX09NQVBfRE1BKSB8fCBcCisJZGVmaW5lZChDT05GSUdfVVNCX1VYNTAwX0RNQSkKIGV4aXQ6CiAjZW5kaWYKIAkvKiBBbmFseXplIHJlcXVlc3QgKi8KQEAgLTk3OCw3ICsxMDMwLDcgQEAKIAkJCW9rID0gbXVzYi0+aGJfaXNvX3J4OwogCiAJCWlmICghb2spIHsKLQkJCURCRyg0LCAibm8gc3VwcG9ydCBmb3IgaGlnaCBiYW5kd2lkdGggSVNPXG4iKTsKKwkJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIm5vIHN1cHBvcnQgZm9yIGhpZ2ggYmFuZHdpZHRoIElTT1xuIik7CiAJCQlnb3RvIGZhaWw7CiAJCX0KIAkJbXVzYl9lcC0+aGJfbXVsdCA9ICh0bXAgPj4gMTEpICYgMzsKQEAgLTEwMDIsNyArMTA1NCw3IEBACiAJCQlnb3RvIGZhaWw7CiAKIAkJaWYgKHRtcCA+IGh3X2VwLT5tYXhfcGFja2V0X3N6X3R4KSB7Ci0JCQlEQkcoNCwgInBhY2tldCBzaXplIGJleW9uZCBoYXJkd2FyZSBGSUZPIHNpemVcbiIpOworCQkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAicGFja2V0IHNpemUgYmV5b25kIGhhcmR3YXJlIEZJRk8gc2l6ZVxuIik7CiAJCQlnb3RvIGZhaWw7CiAJCX0KIApAQCAtMTA0Miw3ICsxMDk0LDcgQEAKIAkJCWdvdG8gZmFpbDsKIAogCQlpZiAodG1wID4gaHdfZXAtPm1heF9wYWNrZXRfc3pfcngpIHsKLQkJCURCRyg0LCAicGFja2V0IHNpemUgYmV5b25kIGhhcmR3YXJlIEZJRk8gc2l6ZVxuIik7CisJCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJwYWNrZXQgc2l6ZSBiZXlvbmQgaGFyZHdhcmUgRklGTyBzaXplXG4iKTsKIAkJCWdvdG8gZmFpbDsKIAkJfQogCkBAIC0xMTU1LDcgKzEyMDcsNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmKG11c2ItPmxvY2spLCBmbGFncyk7CiAKLQlEQkcoMiwgIiVzXG4iLCBtdXNiX2VwLT5lbmRfcG9pbnQubmFtZSk7CisJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiJXNcbiIsIG11c2JfZXAtPmVuZF9wb2ludC5uYW1lKTsKIAogCXJldHVybiBzdGF0dXM7CiB9CkBAIC0xMTY3LDExICsxMjE5LDEyIEBACiBzdHJ1Y3QgdXNiX3JlcXVlc3QgKm11c2JfYWxsb2NfcmVxdWVzdChzdHJ1Y3QgdXNiX2VwICplcCwgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXN0cnVjdCBtdXNiX2VwCQkqbXVzYl9lcCA9IHRvX211c2JfZXAoZXApOworCXN0cnVjdCBtdXNiCQkqbXVzYiA9IG11c2JfZXAtPm11c2I7CiAJc3RydWN0IG11c2JfcmVxdWVzdAkqcmVxdWVzdCA9IE5VTEw7CiAKIAlyZXF1ZXN0ID0ga3phbGxvYyhzaXplb2YgKnJlcXVlc3QsIGdmcF9mbGFncyk7CiAJaWYgKCFyZXF1ZXN0KSB7Ci0JCURCRyg0LCAibm90IGVub3VnaCBtZW1vcnlcbiIpOworCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJub3QgZW5vdWdoIG1lbW9yeVxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtMTIwNSw3ICsxMjU4LDcgQEAKICAqLwogdm9pZCBtdXNiX2VwX3Jlc3RhcnQoc3RydWN0IG11c2IgKm11c2IsIHN0cnVjdCBtdXNiX3JlcXVlc3QgKnJlcSkKIHsKLQlEQkcoMywgIjw9PSAlcyByZXF1ZXN0ICVwIGxlbiAldSBvbiBod19lcCVkXG4iLAorCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIjw9PSAlcyByZXF1ZXN0ICVwIGxlbiAldSBvbiBod19lcCVkXG4iLAogCQlyZXEtPnR4ID8gIlRYL0lOIiA6ICJSWC9PVVQiLAogCQkmcmVxLT5yZXF1ZXN0LCByZXEtPnJlcXVlc3QubGVuZ3RoLCByZXEtPmVwbnVtKTsKIApAQCAtMTIzOSw3ICsxMjkyLDcgQEAKIAlpZiAocmVxdWVzdC0+ZXAgIT0gbXVzYl9lcCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlEQkcoNCwgIjw9PSB0byAlcyByZXF1ZXN0PSVwXG4iLCBlcC0+bmFtZSwgcmVxKTsKKwlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICI8PT0gdG8gJXMgcmVxdWVzdD0lcFxuIiwgZXAtPm5hbWUsIHJlcSk7CiAKIAkvKiByZXF1ZXN0IGlzIG1pbmUgbm93Li4uICovCiAJcmVxdWVzdC0+cmVxdWVzdC5hY3R1YWwgPSAwOwpAQCAtMTI1Myw3ICsxMzA2LDcgQEAKIAogCS8qIGRvbid0IHF1ZXVlIGlmIHRoZSBlcCBpcyBkb3duICovCiAJaWYgKCFtdXNiX2VwLT5kZXNjKSB7Ci0JCURCRyg0LCAicmVxICVwIHF1ZXVlZCB0byAlcyB3aGlsZSBlcCAlc1xuIiwKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAicmVxICVwIHF1ZXVlZCB0byAlcyB3aGlsZSBlcCAlc1xuIiwKIAkJCQlyZXEsIGVwLT5uYW1lLCAiZGlzYWJsZWQiKTsKIAkJc3RhdHVzID0gLUVTSFVURE9XTjsKIAkJZ290byBjbGVhbnVwOwpAQCAtMTI5MCw3ICsxMzQzLDcgQEAKIAkJCWJyZWFrOwogCX0KIAlpZiAociAhPSByZXEpIHsKLQkJREJHKDMsICJyZXF1ZXN0ICVwIG5vdCBxdWV1ZWQgdG8gJXNcbiIsIHJlcXVlc3QsIGVwLT5uYW1lKTsKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAicmVxdWVzdCAlcCBub3QgcXVldWVkIHRvICVzXG4iLCByZXF1ZXN0LCBlcC0+bmFtZSk7CiAJCXN0YXR1cyA9IC1FSU5WQUw7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC0xMzU2LDcgKzE0MDksNyBAQAogCXJlcXVlc3QgPSBuZXh0X3JlcXVlc3QobXVzYl9lcCk7CiAJaWYgKHZhbHVlKSB7CiAJCWlmIChyZXF1ZXN0KSB7Ci0JCQlEQkcoMywgInJlcXVlc3QgaW4gcHJvZ3Jlc3MsIGNhbm5vdCBoYWx0ICVzXG4iLAorCQkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAicmVxdWVzdCBpbiBwcm9ncmVzcywgY2Fubm90IGhhbHQgJXNcbiIsCiAJCQkgICAgZXAtPm5hbWUpOwogCQkJc3RhdHVzID0gLUVBR0FJTjsKIAkJCWdvdG8gZG9uZTsKQEAgLTEzNjUsNyArMTQxOCw3IEBACiAJCWlmIChtdXNiX2VwLT5pc19pbikgewogCQkJY3NyID0gbXVzYl9yZWFkdyhlcGlvLCBNVVNCX1RYQ1NSKTsKIAkJCWlmIChjc3IgJiBNVVNCX1RYQ1NSX0ZJRk9OT1RFTVBUWSkgewotCQkJCURCRygzLCAiRklGTyBidXN5LCBjYW5ub3QgaGFsdCAlc1xuIiwgZXAtPm5hbWUpOworCQkJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIkZJRk8gYnVzeSwgY2Fubm90IGhhbHQgJXNcbiIsIGVwLT5uYW1lKTsKIAkJCQlzdGF0dXMgPSAtRUFHQUlOOwogCQkJCWdvdG8gZG9uZTsKIAkJCX0KQEAgLTEzNzQsNyArMTQyNyw3IEBACiAJCW11c2JfZXAtPndlZGdlZCA9IDA7CiAKIAkvKiBzZXQvY2xlYXIgdGhlIHN0YWxsIGFuZCB0b2dnbGUgYml0cyAqLwotCURCRygyLCAiJXM6ICVzIHN0YWxsXG4iLCBlcC0+bmFtZSwgdmFsdWUgPyAic2V0IiA6ICJjbGVhciIpOworCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIiVzOiAlcyBzdGFsbFxuIiwgZXAtPm5hbWUsIHZhbHVlID8gInNldCIgOiAiY2xlYXIiKTsKIAlpZiAobXVzYl9lcC0+aXNfaW4pIHsKIAkJY3NyID0gbXVzYl9yZWFkdyhlcGlvLCBNVVNCX1RYQ1NSKTsKIAkJY3NyIHw9IE1VU0JfVFhDU1JfUF9XWkNfQklUUwpAQCAtMTQwMSw3ICsxNDU0LDcgQEAKIAogCS8qIG1heWJlIHN0YXJ0IHRoZSBmaXJzdCByZXF1ZXN0IGluIHRoZSBxdWV1ZSAqLwogCWlmICghbXVzYl9lcC0+YnVzeSAmJiAhdmFsdWUgJiYgcmVxdWVzdCkgewotCQlEQkcoMywgInJlc3RhcnRpbmcgdGhlIHJlcXVlc3RcbiIpOworCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJyZXN0YXJ0aW5nIHRoZSByZXF1ZXN0XG4iKTsKIAkJbXVzYl9lcF9yZXN0YXJ0KG11c2IsIHJlcXVlc3QpOwogCX0KIApAQCAtMTUzMiw3ICsxNTg1LDcgQEAKIAljYXNlIE9UR19TVEFURV9CX0lETEU6CiAJCS8qIFN0YXJ0IFNSUCAuLi4gT1RHIG5vdCByZXF1aXJlZC4gKi8KIAkJZGV2Y3RsID0gbXVzYl9yZWFkYihtcmVncywgTVVTQl9ERVZDVEwpOwotCQlEQkcoMiwgIlNlbmRpbmcgU1JQOiBkZXZjdGw6ICUwMnhcbiIsIGRldmN0bCk7CisJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIlNlbmRpbmcgU1JQOiBkZXZjdGw6ICUwMnhcbiIsIGRldmN0bCk7CiAJCWRldmN0bCB8PSBNVVNCX0RFVkNUTF9TRVNTSU9OOwogCQltdXNiX3dyaXRlYihtcmVncywgTVVTQl9ERVZDVEwsIGRldmN0bCk7CiAJCWRldmN0bCA9IG11c2JfcmVhZGIobXJlZ3MsIE1VU0JfREVWQ1RMKTsKQEAgLTE1NDksNiArMTYwMiwxMCBAQAogCQkJCWJyZWFrOwogCQl9CiAKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXVzYi0+bG9jaywgZmxhZ3MpOworCQlvdGdfc3RhcnRfc3JwKG11c2ItPnhjZWl2KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm11c2ItPmxvY2ssIGZsYWdzKTsKKwogCQkvKiBCbG9jayBpZGxpbmcgZm9yIGF0IGxlYXN0IDFzICovCiAJCW11c2JfcGxhdGZvcm1fdHJ5X2lkbGUobXVzYiwKIAkJCWppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEgKiBIWikpOwpAQCAtMTU1Niw3ICsxNjEzLDggQEAKIAkJc3RhdHVzID0gMDsKIAkJZ290byBkb25lOwogCWRlZmF1bHQ6Ci0JCURCRygyLCAiVW5oYW5kbGVkIHdha2U6ICVzXG4iLCBvdGdfc3RhdGVfc3RyaW5nKG11c2IpKTsKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiVW5oYW5kbGVkIHdha2U6ICVzXG4iLAorCQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiLT54Y2Vpdi0+c3RhdGUpKTsKIAkJZ290byBkb25lOwogCX0KIApAQCAtMTU2NSw3ICsxNjIzLDcgQEAKIAlwb3dlciA9IG11c2JfcmVhZGIobXJlZ3MsIE1VU0JfUE9XRVIpOwogCXBvd2VyIHw9IE1VU0JfUE9XRVJfUkVTVU1FOwogCW11c2Jfd3JpdGViKG1yZWdzLCBNVVNCX1BPV0VSLCBwb3dlcik7Ci0JREJHKDIsICJpc3N1ZSB3YWtldXBcbiIpOworCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgImlzc3VlIHdha2V1cFxuIik7CiAKIAkvKiBGSVhNRSBkbyB0aGlzIG5leHQgY2h1bmsgaW4gYSB0aW1lciBjYWxsYmFjaywgbm8gdWRlbGF5ICovCiAJbWRlbGF5KDIpOwpAQCAtMTU5OSw3ICsxNjU3LDcgQEAKIAogCS8qIEZJWE1FIGlmIG9uLCBIZHJjU3RhcnQ7IGlmIG9mZiwgSGRyY1N0b3AgKi8KIAotCURCRygzLCAiZ2FkZ2V0ICVzIEQrIHB1bGx1cCAlc1xuIiwKKwlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJnYWRnZXQgJXMgRCsgcHVsbHVwICVzXG4iLAogCQltdXNiLT5nYWRnZXRfZHJpdmVyLT5mdW5jdGlvbiwgaXNfb24gPyAib24iIDogIm9mZiIpOwogCW11c2Jfd3JpdGViKG11c2ItPm1yZWdzLCBNVVNCX1BPV0VSLCBwb3dlcik7CiB9CkBAIC0xNjA3LDcgKzE2NjUsNyBAQAogI2lmIDAKIHN0YXRpYyBpbnQgbXVzYl9nYWRnZXRfdmJ1c19zZXNzaW9uKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsIGludCBpc19hY3RpdmUpCiB7Ci0JREJHKDIsICI8PSAlcyA9PlxuIiwgX19mdW5jX18pOworCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIjw9ICVzID0+XG4iLCBfX2Z1bmNfXyk7CiAKIAkvKgogCSAqIEZJWE1FIGlmZiBkcml2ZXIncyBzb2Z0Y29ubmVjdCBmbGFnIGlzIHNldCAoYXMgaXQgaXMgZHVyaW5nIHByb2JlLApAQCAtMTgxNiwxNyArMTg3NCwxNyBAQAogCiAJLyogZHJpdmVyIG11c3QgYmUgaW5pdGlhbGl6ZWQgdG8gc3VwcG9ydCBwZXJpcGhlcmFsIG1vZGUgKi8KIAlpZiAoIW11c2IpIHsKLQkJREJHKDEsICJubyBkZXY/P1xuIik7CisJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIm5vIGRldj8/XG4iKTsKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAkJZ290byBlcnIwOwogCX0KIAogCXBtX3J1bnRpbWVfZ2V0X3N5bmMobXVzYi0+Y29udHJvbGxlcik7CiAKLQlEQkcoMywgInJlZ2lzdGVyaW5nIGRyaXZlciAlc1xuIiwgZHJpdmVyLT5mdW5jdGlvbik7CisJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAicmVnaXN0ZXJpbmcgZHJpdmVyICVzXG4iLCBkcml2ZXItPmZ1bmN0aW9uKTsKIAogCWlmIChtdXNiLT5nYWRnZXRfZHJpdmVyKSB7Ci0JCURCRygxLCAiJXMgaXMgYWxyZWFkeSBib3VuZCB0byAlc1xuIiwKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiJXMgaXMgYWxyZWFkeSBib3VuZCB0byAlc1xuIiwKIAkJCQltdXNiX2RyaXZlcl9uYW1lLAogCQkJCW11c2ItPmdhZGdldF9kcml2ZXItPmRyaXZlci5uYW1lKTsKIAkJcmV0dmFsID0gLUVCVVNZOwpAQCAtMTg0Miw3ICsxOTAwLDcgQEAKIAogCXJldHZhbCA9IGJpbmQoJm11c2ItPmcpOwogCWlmIChyZXR2YWwpIHsKLQkJREJHKDMsICJiaW5kIHRvIGRyaXZlciAlcyBmYWlsZWQgLS0+ICVkXG4iLAorCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJiaW5kIHRvIGRyaXZlciAlcyBmYWlsZWQgLS0+ICVkXG4iLAogCQkJCWRyaXZlci0+ZHJpdmVyLm5hbWUsIHJldHZhbCk7CiAJCWdvdG8gZXJyMTsKIAl9CkBAIC0xODcwLDcgKzE5MjgsNyBAQAogCWlmIChpc19vdGdfZW5hYmxlZChtdXNiKSkgewogCQlzdHJ1Y3QgdXNiX2hjZAkqaGNkID0gbXVzYl90b19oY2QobXVzYik7CiAKLQkJREJHKDMsICJPVEcgc3RhcnR1cC4uLlxuIik7CisJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIk9URyBzdGFydHVwLi4uXG4iKTsKIAogCQkvKiBSRVZJU0lUOiAgZnVuY2FsbCB0byBvdGhlciBjb2RlLCB3aGljaCBhbHNvCiAJCSAqIGhhbmRsZXMgcG93ZXIgYnVkZ2V0aW5nIC4uLiB0aGlzIHdheSBhbHNvCkBAIC0xODc4LDcgKzE5MzYsNyBAQAogCQkgKi8KIAkJcmV0dmFsID0gdXNiX2FkZF9oY2QobXVzYl90b19oY2QobXVzYiksIC0xLCAwKTsKIAkJaWYgKHJldHZhbCA8IDApIHsKLQkJCURCRygxLCAiYWRkX2hjZCBmYWlsZWQsICVkXG4iLCByZXR2YWwpOworCQkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiYWRkX2hjZCBmYWlsZWQsICVkXG4iLCByZXR2YWwpOwogCQkJZ290byBlcnIyOwogCQl9CiAKQEAgLTE5ODUsNyArMjA0Myw3IEBACiAJc3RvcF9hY3Rpdml0eShtdXNiLCBkcml2ZXIpOwogCW90Z19zZXRfcGVyaXBoZXJhbChtdXNiLT54Y2VpdiwgTlVMTCk7CiAKLQlEQkcoMywgInVucmVnaXN0ZXJpbmcgZHJpdmVyICVzXG4iLCBkcml2ZXItPmZ1bmN0aW9uKTsKKwlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJ1bnJlZ2lzdGVyaW5nIGRyaXZlciAlc1xuIiwgZHJpdmVyLT5mdW5jdGlvbik7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdXNiLT5sb2NrLCBmbGFncyk7CiAJZHJpdmVyLT51bmJpbmQoJm11c2ItPmcpOwpAQCAtMjAzNyw3ICsyMDk1LDcgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJV0FSTklORygidW5oYW5kbGVkIFJFU1VNRSB0cmFuc2l0aW9uICglcylcbiIsCi0JCQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiKSk7CisJCQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiLT54Y2Vpdi0+c3RhdGUpKTsKIAl9CiB9CiAKQEAgLTIwNDcsNyArMjEwNSw3IEBACiAJdTgJZGV2Y3RsOwogCiAJZGV2Y3RsID0gbXVzYl9yZWFkYihtdXNiLT5tcmVncywgTVVTQl9ERVZDVEwpOwotCURCRygzLCAiZGV2Y3RsICUwMnhcbiIsIGRldmN0bCk7CisJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiZGV2Y3RsICUwMnhcbiIsIGRldmN0bCk7CiAKIAlzd2l0Y2ggKG11c2ItPnhjZWl2LT5zdGF0ZSkgewogCWNhc2UgT1RHX1NUQVRFX0JfSURMRToKQEAgLTIwNjcsNyArMjEyNSw3IEBACiAJCSAqIEFfUEVSSVBIRVJBTCBtYXkgbmVlZCBjYXJlIHRvbwogCQkgKi8KIAkJV0FSTklORygidW5oYW5kbGVkIFNVU1BFTkQgdHJhbnNpdGlvbiAoJXMpXG4iLAotCQkJCW90Z19zdGF0ZV9zdHJpbmcobXVzYikpOworCQkJCW90Z19zdGF0ZV9zdHJpbmcobXVzYi0+eGNlaXYtPnN0YXRlKSk7CiAJfQogfQogCkBAIC0yMDgzLDcgKzIxNDEsNyBAQAogCXZvaWQgX19pb21lbQkqbXJlZ3MgPSBtdXNiLT5tcmVnczsKIAl1OAlkZXZjdGwgPSBtdXNiX3JlYWRiKG1yZWdzLCBNVVNCX0RFVkNUTCk7CiAKLQlEQkcoMywgImRldmN0bCAlMDJ4XG4iLCBkZXZjdGwpOworCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgImRldmN0bCAlMDJ4XG4iLCBkZXZjdGwpOwogCiAJLyogY2xlYXIgSFIgKi8KIAltdXNiX3dyaXRlYihtcmVncywgTVVTQl9ERVZDVEwsIGRldmN0bCAmIE1VU0JfREVWQ1RMX1NFU1NJT04pOwpAQCAtMjEwMSw4ICsyMTU5LDggQEAKIAlzd2l0Y2ggKG11c2ItPnhjZWl2LT5zdGF0ZSkgewogCWRlZmF1bHQ6CiAjaWZkZWYJQ09ORklHX1VTQl9NVVNCX09URwotCQlEQkcoMiwgIlVuaGFuZGxlZCBkaXNjb25uZWN0ICVzLCBzZXR0aW5nIGFfaWRsZVxuIiwKLQkJCW90Z19zdGF0ZV9zdHJpbmcobXVzYikpOworCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJVbmhhbmRsZWQgZGlzY29ubmVjdCAlcywgc2V0dGluZyBhX2lkbGVcbiIsCisJCQlvdGdfc3RhdGVfc3RyaW5nKG11c2ItPnhjZWl2LT5zdGF0ZSkpOwogCQltdXNiLT54Y2Vpdi0+c3RhdGUgPSBPVEdfU1RBVEVfQV9JRExFOwogCQlNVVNCX0hTVF9NT0RFKG11c2IpOwogCQlicmVhazsKQEAgLTIxMzIsNyArMjE5MCw3IEBACiAJdTgJCWRldmN0bCA9IG11c2JfcmVhZGIobWJhc2UsIE1VU0JfREVWQ1RMKTsKIAl1OAkJcG93ZXI7CiAKLQlEQkcoMywgIjw9PSAlcyBhZGRyPSV4IGRyaXZlciAnJXMnXG4iLAorCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIjw9PSAlcyBhZGRyPSV4IGRyaXZlciAnJXMnXG4iLAogCQkJKGRldmN0bCAmIE1VU0JfREVWQ1RMX0JERVZJQ0UpCiAJCQkJPyAiQi1EZXZpY2UiIDogIkEtRGV2aWNlIiwKIAkJCW11c2JfcmVhZGIobWJhc2UsIE1VU0JfRkFERFIpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldF9lcDAuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXRfZXAwLmMKaW5kZXggNzVhNTQyZS4uYjJmYWZmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldF9lcDAuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0X2VwMC5jCkBAIC0yMDksNyArMjA5LDcgQEAKIAl2b2lkIF9faW9tZW0JKm1iYXNlID0gbXVzYi0+bXJlZ3M7CiAJdTgJCWRldmN0bDsKIAotCURCRygxLCAiSE5QOiBTZXR0aW5nIEhSXG4iKTsKKwlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJITlA6IFNldHRpbmcgSFJcbiIpOwogCWRldmN0bCA9IG11c2JfcmVhZGIobWJhc2UsIE1VU0JfREVWQ1RMKTsKIAltdXNiX3dyaXRlYihtYmFzZSwgTVVTQl9ERVZDVEwsIGRldmN0bCB8IE1VU0JfREVWQ1RMX0hSKTsKIH0KQEAgLTMwNiw3ICszMDYsNyBAQAogCQkJCS8qIE1heWJlIHN0YXJ0IHRoZSBmaXJzdCByZXF1ZXN0IGluIHRoZSBxdWV1ZSAqLwogCQkJCXJlcXVlc3QgPSBuZXh0X3JlcXVlc3QobXVzYl9lcCk7CiAJCQkJaWYgKCFtdXNiX2VwLT5idXN5ICYmIHJlcXVlc3QpIHsKLQkJCQkJREJHKDMsICJyZXN0YXJ0aW5nIHRoZSByZXF1ZXN0XG4iKTsKKwkJCQkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAicmVzdGFydGluZyB0aGUgcmVxdWVzdFxuIik7CiAJCQkJCW11c2JfZXBfcmVzdGFydChtdXNiLCByZXF1ZXN0KTsKIAkJCQl9CiAKQEAgLTU1Myw3ICs1NTMsNyBAQAogCiAJaWYgKCFyZXEpIHsKIAkJLyogV0FSTl9PTigxKTsgKi8KLQkJREJHKDIsICJvZGQ7IGNzcjAgJTA0eFxuIiwgbXVzYl9yZWFkdyhyZWdzLCBNVVNCX0NTUjApKTsKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAib2RkOyBjc3IwICUwNHhcbiIsIG11c2JfcmVhZHcocmVncywgTVVTQl9DU1IwKSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTYxMCw3ICs2MTAsNyBAQAogCS8qIE5PVEU6ICBlYXJsaWVyIDIuNiB2ZXJzaW9ucyBjaGFuZ2VkIHNldHVwIHBhY2tldHMgdG8gaG9zdAogCSAqIG9yZGVyLCBidXQgbm93IFVTQiBwYWNrZXRzIGFsd2F5cyBzdGF5IGluIFVTQiBieXRlIG9yZGVyLgogCSAqLwotCURCRygzLCAiU0VUVVAgcmVxJTAyeC4lMDJ4IHYlMDR4IGklMDR4IGwlZFxuIiwKKwlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJTRVRVUCByZXElMDJ4LiUwMnggdiUwNHggaSUwNHggbCVkXG4iLAogCQlyZXEtPmJSZXF1ZXN0VHlwZSwKIAkJcmVxLT5iUmVxdWVzdCwKIAkJbGUxNl90b19jcHUocmVxLT53VmFsdWUpLApAQCAtNjc4LDcgKzY3OCw3IEBACiAJY3NyID0gbXVzYl9yZWFkdyhyZWdzLCBNVVNCX0NTUjApOwogCWxlbiA9IG11c2JfcmVhZGIocmVncywgTVVTQl9DT1VOVDApOwogCi0JREJHKDQsICJjc3IgJTA0eCwgY291bnQgJWQsIG15YWRkciAlZCwgZXAwc3RhZ2UgJXNcbiIsCisJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiY3NyICUwNHgsIGNvdW50ICVkLCBteWFkZHIgJWQsIGVwMHN0YWdlICVzXG4iLAogCQkJY3NyLCBsZW4sCiAJCQltdXNiX3JlYWRiKG1iYXNlLCBNVVNCX0ZBRERSKSwKIAkJCWRlY29kZV9lcDBzdGFnZShtdXNiLT5lcDBfc3RhdGUpKTsKQEAgLTc0OSw3ICs3NDksNyBAQAogCiAJCS8qIGVudGVyIHRlc3QgbW9kZSBpZiBuZWVkZWQgKGV4aXQgYnkgcmVzZXQpICovCiAJCWVsc2UgaWYgKG11c2ItPnRlc3RfbW9kZSkgewotCQkJREJHKDEsICJlbnRlcmluZyBURVNUTU9ERVxuIik7CisJCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJlbnRlcmluZyBURVNUTU9ERVxuIik7CiAKIAkJCWlmIChNVVNCX1RFU1RfUEFDS0VUID09IG11c2ItPnRlc3RfbW9kZV9ucikKIAkJCQltdXNiX2xvYWRfdGVzdHBhY2tldChtdXNiKTsKQEAgLTg2MSw3ICs4NjEsNyBAQAogCQkJCWJyZWFrOwogCQkJfQogCi0JCQlEQkcoMywgImhhbmRsZWQgJWQsIGNzciAlMDR4LCBlcDBzdGFnZSAlc1xuIiwKKwkJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgImhhbmRsZWQgJWQsIGNzciAlMDR4LCBlcDBzdGFnZSAlc1xuIiwKIAkJCQloYW5kbGVkLCBjc3IsCiAJCQkJZGVjb2RlX2VwMHN0YWdlKG11c2ItPmVwMF9zdGF0ZSkpOwogCkBAIC04NzgsNyArODc4LDcgQEAKIAkJCWlmIChoYW5kbGVkIDwgMCkgewogCQkJCW11c2JfZXBfc2VsZWN0KG1iYXNlLCAwKTsKIHN0YWxsOgotCQkJCURCRygzLCAic3RhbGwgKCVkKVxuIiwgaGFuZGxlZCk7CisJCQkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAic3RhbGwgKCVkKVxuIiwgaGFuZGxlZCk7CiAJCQkJbXVzYi0+YWNrcGVuZCB8PSBNVVNCX0NTUjBfUF9TRU5EU1RBTEw7CiAJCQkJbXVzYi0+ZXAwX3N0YXRlID0gTVVTQl9FUDBfU1RBR0VfSURMRTsKIGZpbmlzaDoKQEAgLTk1OCw3ICs5NTgsNyBAQAogCQlzdGF0dXMgPSAwOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlEQkcoMSwgImVwMCByZXF1ZXN0IHF1ZXVlZCBpbiBzdGF0ZSAlZFxuIiwKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiZXAwIHJlcXVlc3QgcXVldWVkIGluIHN0YXRlICVkXG4iLAogCQkJCW11c2ItPmVwMF9zdGF0ZSk7CiAJCXN0YXR1cyA9IC1FSU5WQUw7CiAJCWdvdG8gY2xlYW51cDsKQEAgLTk2Nyw3ICs5NjcsNyBAQAogCS8qIGFkZCByZXF1ZXN0IHRvIHRoZSBsaXN0ICovCiAJbGlzdF9hZGRfdGFpbCgmcmVxLT5saXN0LCAmZXAtPnJlcV9saXN0KTsKIAotCURCRygzLCAicXVldWUgdG8gJXMgKCVzKSwgbGVuZ3RoPSVkXG4iLAorCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgInF1ZXVlIHRvICVzICglcyksIGxlbmd0aD0lZFxuIiwKIAkJCWVwLT5uYW1lLCBlcC0+aXNfaW4gPyAiSU4vVFgiIDogIk9VVC9SWCIsCiAJCQlyZXEtPnJlcXVlc3QubGVuZ3RoKTsKIApAQCAtMTA2MCw3ICsxMDYwLDcgQEAKIAkJbXVzYi0+YWNrcGVuZCA9IDA7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCURCRygxLCAiZXAwIGNhbid0IGhhbHQgaW4gc3RhdGUgJWRcbiIsIG11c2ItPmVwMF9zdGF0ZSk7CisJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgImVwMCBjYW4ndCBoYWx0IGluIHN0YXRlICVkXG4iLCBtdXNiLT5lcDBfc3RhdGUpOwogCQlzdGF0dXMgPSAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMKaW5kZXggNWVlZjRhOC4uNzI5NWUzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jCkBAIC0xMDYsNiArMTA2LDcgQEAKICAqLwogc3RhdGljIHZvaWQgbXVzYl9oX3R4X2ZsdXNoX2ZpZm8oc3RydWN0IG11c2JfaHdfZXAgKmVwKQogeworCXN0cnVjdCBtdXNiCSptdXNiID0gZXAtPm11c2I7CiAJdm9pZCBfX2lvbWVtCSplcGlvID0gZXAtPnJlZ3M7CiAJdTE2CQljc3I7CiAJdTE2CQlsYXN0Y3NyID0gMDsKQEAgLTExNCw3ICsxMTUsNyBAQAogCWNzciA9IG11c2JfcmVhZHcoZXBpbywgTVVTQl9UWENTUik7CiAJd2hpbGUgKGNzciAmIE1VU0JfVFhDU1JfRklGT05PVEVNUFRZKSB7CiAJCWlmIChjc3IgIT0gbGFzdGNzcikKLQkJCURCRygzLCAiSG9zdCBUWCBGSUZPTk9URU1QVFkgY3NyOiAlMDJ4XG4iLCBjc3IpOworCQkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiSG9zdCBUWCBGSUZPTk9URU1QVFkgY3NyOiAlMDJ4XG4iLCBjc3IpOwogCQlsYXN0Y3NyID0gY3NyOwogCQljc3IgfD0gTVVTQl9UWENTUl9GTFVTSEZJRk87CiAJCW11c2Jfd3JpdGV3KGVwaW8sIE1VU0JfVFhDU1IsIGNzcik7CkBAIC0yNDAsNyArMjQxLDcgQEAKIAkJbGVuID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0gdXJiLT5hY3R1YWxfbGVuZ3RoOwogCX0KIAotCURCRyg0LCAicWggJXAgdXJiICVwIGRldiVkIGVwJWQlcyVzLCBod19lcCAlZCwgJXAvJWRcbiIsCisJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAicWggJXAgdXJiICVwIGRldiVkIGVwJWQlcyVzLCBod19lcCAlZCwgJXAvJWRcbiIsCiAJCQlxaCwgdXJiLCBhZGRyZXNzLCBxaC0+ZXBudW0sCiAJCQlpc19pbiA/ICJpbiIgOiAib3V0IiwKIAkJCSh7Y2hhciAqczsgc3dpdGNoIChxaC0+dHlwZSkgewpAQCAtMjYzLDcgKzI2NCw3IEBACiAJc3dpdGNoIChxaC0+dHlwZSkgewogCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSVNPQzoKIAljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lOVDoKLQkJREJHKDMsICJjaGVjayB3aGV0aGVyIHRoZXJlJ3Mgc3RpbGwgdGltZSBmb3IgcGVyaW9kaWMgVHhcbiIpOworCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJjaGVjayB3aGV0aGVyIHRoZXJlJ3Mgc3RpbGwgdGltZSBmb3IgcGVyaW9kaWMgVHhcbiIpOwogCQlmcmFtZSA9IG11c2JfcmVhZHcobWJhc2UsIE1VU0JfRlJBTUUpOwogCQkvKiBGSVhNRSB0aGlzIGRvZXNuJ3QgaW1wbGVtZW50IHRoYXQgc2NoZWR1bGluZyBwb2xpY3kgLi4uCiAJCSAqIG9yIGhhbmRsZSBmcmFtZWNvdW50ZXIgd3JhcHBpbmcKQEAgLTI3OCw3ICsyNzksNyBAQAogCQl9IGVsc2UgewogCQkJcWgtPmZyYW1lID0gdXJiLT5zdGFydF9mcmFtZTsKIAkJCS8qIGVuYWJsZSBTT0YgaW50ZXJydXB0IHNvIHdlIGNhbiBjb3VudCBkb3duICovCi0JCQlEQkcoMSwgIlNPRiBmb3IgJWRcbiIsIGVwbnVtKTsKKwkJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIlNPRiBmb3IgJWRcbiIsIGVwbnVtKTsKICNpZiAxIC8qIGlmbmRlZglDT05GSUdfQVJDSF9EQVZJTkNJICovCiAJCQltdXNiX3dyaXRlYihtYmFzZSwgTVVTQl9JTlRSVVNCRSwgMHhmZik7CiAjZW5kaWYKQEAgLTI4Niw3ICsyODcsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0Ogogc3RhcnQ6Ci0JCURCRyg0LCAiU3RhcnQgVFglZCAlc1xuIiwgZXBudW0sCisJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIlN0YXJ0IFRYJWQgJXNcbiIsIGVwbnVtLAogCQkJaHdfZXAtPnR4X2NoYW5uZWwgPyAiZG1hIiA6ICJwaW8iKTsKIAogCQlpZiAoIWh3X2VwLT50eF9jaGFubmVsKQpAQCAtMzAxLDIxICszMDIsNyBAQAogX19yZWxlYXNlcyhtdXNiLT5sb2NrKQogX19hY3F1aXJlcyhtdXNiLT5sb2NrKQogewotCURCRygoeyBpbnQgbGV2ZWw7IHN3aXRjaCAoc3RhdHVzKSB7Ci0JCQkJY2FzZSAwOgotCQkJCQlsZXZlbCA9IDQ7Ci0JCQkJCWJyZWFrOwotCQkJCS8qIGNvbW1vbi9ib3JpbmcgZmF1bHRzICovCi0JCQkJY2FzZSAtRVJFTU9URUlPOgotCQkJCWNhc2UgLUVTSFVURE9XTjoKLQkJCQljYXNlIC1FQ09OTlJFU0VUOgotCQkJCWNhc2UgLUVQSVBFOgotCQkJCQlsZXZlbCA9IDM7Ci0JCQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCWxldmVsID0gMjsKLQkJCQkJYnJlYWs7Ci0JCQkJfTsgbGV2ZWw7IH0pLAorCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwKIAkJCSJjb21wbGV0ZSAlcCAlcEYgKCVkKSwgZGV2JWQgZXAlZCVzLCAlZC8lZFxuIiwKIAkJCXVyYiwgdXJiLT5jb21wbGV0ZSwgc3RhdHVzLAogCQkJdXNiX3BpcGVkZXZpY2UodXJiLT5waXBlKSwKQEAgLTQyNiw3ICs0MTMsNyBAQAogCX0KIAogCWlmIChxaCAhPSBOVUxMICYmIHFoLT5pc19yZWFkeSkgewotCQlEQkcoNCwgIi4uLiBuZXh0IGVwJWQgJWNYIHVyYiAlcFxuIiwKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiLi4uIG5leHQgZXAlZCAlY1ggdXJiICVwXG4iLAogCQkgICAgaHdfZXAtPmVwbnVtLCBpc19pbiA/ICdSJyA6ICdUJywgbmV4dF91cmIocWgpKTsKIAkJbXVzYl9zdGFydF91cmIobXVzYiwgaXNfaW4sIHFoKTsKIAl9CkBAIC00NzEsNyArNDU4LDcgQEAKIAogCS8qIG11c2JfZXBfc2VsZWN0KG1iYXNlLCBlcG51bSk7ICovCiAJcnhfY291bnQgPSBtdXNiX3JlYWR3KGVwaW8sIE1VU0JfUlhDT1VOVCk7Ci0JREJHKDMsICJSWCVkIGNvdW50ICVkLCBidWZmZXIgJXAgbGVuICVkLyVkXG4iLCBlcG51bSwgcnhfY291bnQsCisJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiUlglZCBjb3VudCAlZCwgYnVmZmVyICVwIGxlbiAlZC8lZFxuIiwgZXBudW0sIHJ4X2NvdW50LAogCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIsIHFoLT5vZmZzZXQsCiAJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOwogCkBAIC00OTMsNyArNDgwLDcgQEAKIAkJCQlzdGF0dXMgPSAtRU9WRVJGTE9XOwogCQkJCXVyYi0+ZXJyb3JfY291bnQrKzsKIAkJCX0KLQkJCURCRygyLCAiKiogT1ZFUkZMT1cgJWQgaW50byAlZFxuIiwgcnhfY291bnQsIGxlbmd0aCk7CisJCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICIqKiBPVkVSRkxPVyAlZCBpbnRvICVkXG4iLCByeF9jb3VudCwgbGVuZ3RoKTsKIAkJCWRvX2ZsdXNoID0gMTsKIAkJfSBlbHNlCiAJCQlsZW5ndGggPSByeF9jb3VudDsKQEAgLTUxMSw3ICs0OTgsNyBAQAogCQlpZiAocnhfY291bnQgPiBsZW5ndGgpIHsKIAkJCWlmICh1cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpCiAJCQkJdXJiLT5zdGF0dXMgPSAtRU9WRVJGTE9XOwotCQkJREJHKDIsICIqKiBPVkVSRkxPVyAlZCBpbnRvICVkXG4iLCByeF9jb3VudCwgbGVuZ3RoKTsKKwkJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIioqIE9WRVJGTE9XICVkIGludG8gJWRcbiIsIHJ4X2NvdW50LCBsZW5ndGgpOwogCQkJZG9fZmx1c2ggPSAxOwogCQl9IGVsc2UKIAkJCWxlbmd0aCA9IHJ4X2NvdW50OwpAQCAtNjk3LDcgKzY4NCw3IEBACiAJc3RydWN0IG11c2JfcWgJCSpxaCA9IG11c2JfZXBfZ2V0X3FoKGh3X2VwLCAhaXNfb3V0KTsKIAl1MTYJCQlwYWNrZXRfc3ogPSBxaC0+bWF4cGFja2V0OwogCi0JREJHKDMsICIlcyBodyVkIHVyYiAlcCBzcGQlZCBkZXYlZCBlcCVkJXMgIgorCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIiVzIGh3JWQgdXJiICVwIHNwZCVkIGRldiVkIGVwJWQlcyAiCiAJCQkJImhfYWRkciUwMnggaF9wb3J0JTAyeCBieXRlcyAlZFxuIiwKIAkJCWlzX291dCA/ICItLT4iIDogIjwtLSIsCiAJCQllcG51bSwgdXJiLCB1cmItPmRldi0+c3BlZWQsCkBAIC04NTAsMzcgKzgzNywzMiBAQAogCQkvKiBraWNrIHRoaW5ncyBvZmYgKi8KIAogCQlpZiAoKGlzX2NwcGlfZW5hYmxlZCgpIHx8IHR1c2JfZG1hX29tYXAoKSkgJiYgZG1hX2NoYW5uZWwpIHsKLQkJCS8qIGNhbmRpZGF0ZSBmb3IgRE1BICovCi0JCQlpZiAoZG1hX2NoYW5uZWwpIHsKLQkJCQlkbWFfY2hhbm5lbC0+YWN0dWFsX2xlbiA9IDBMOwotCQkJCXFoLT5zZWdzaXplID0gbGVuOworCQkJLyogQ2FuZGlkYXRlIGZvciBETUEgKi8KKwkJCWRtYV9jaGFubmVsLT5hY3R1YWxfbGVuID0gMEw7CisJCQlxaC0+c2Vnc2l6ZSA9IGxlbjsKIAotCQkJCS8qIEFVVE9SRVEgaXMgaW4gYSBETUEgcmVnaXN0ZXIgKi8KLQkJCQltdXNiX3dyaXRldyhod19lcC0+cmVncywgTVVTQl9SWENTUiwgY3NyKTsKLQkJCQljc3IgPSBtdXNiX3JlYWR3KGh3X2VwLT5yZWdzLAotCQkJCQkJTVVTQl9SWENTUik7CisJCQkvKiBBVVRPUkVRIGlzIGluIGEgRE1BIHJlZ2lzdGVyICovCisJCQltdXNiX3dyaXRldyhod19lcC0+cmVncywgTVVTQl9SWENTUiwgY3NyKTsKKwkJCWNzciA9IG11c2JfcmVhZHcoaHdfZXAtPnJlZ3MsIE1VU0JfUlhDU1IpOwogCi0JCQkJLyogdW5sZXNzIGNhbGxlciB0cmVhdHMgc2hvcnQgcnggdHJhbnNmZXJzIGFzCi0JCQkJICogZXJyb3JzLCB3ZSBkYXJlIG5vdCBxdWV1ZSBtdWx0aXBsZSB0cmFuc2ZlcnMuCi0JCQkJICovCi0JCQkJZG1hX29rID0gZG1hX2NvbnRyb2xsZXItPmNoYW5uZWxfcHJvZ3JhbSgKLQkJCQkJCWRtYV9jaGFubmVsLCBwYWNrZXRfc3osCi0JCQkJCQkhKHVyYi0+dHJhbnNmZXJfZmxhZ3MKLQkJCQkJCQkmIFVSQl9TSE9SVF9OT1RfT0spLAotCQkJCQkJdXJiLT50cmFuc2Zlcl9kbWEgKyBvZmZzZXQsCi0JCQkJCQlxaC0+c2Vnc2l6ZSk7Ci0JCQkJaWYgKCFkbWFfb2spIHsKLQkJCQkJZG1hX2NvbnRyb2xsZXItPmNoYW5uZWxfcmVsZWFzZSgKLQkJCQkJCQlkbWFfY2hhbm5lbCk7Ci0JCQkJCWh3X2VwLT5yeF9jaGFubmVsID0gTlVMTDsKLQkJCQkJZG1hX2NoYW5uZWwgPSBOVUxMOwotCQkJCX0gZWxzZQotCQkJCQljc3IgfD0gTVVTQl9SWENTUl9ETUFFTkFCOwotCQkJfQorCQkJLyoKKwkJCSAqIFVubGVzcyBjYWxsZXIgdHJlYXRzIHNob3J0IFJYIHRyYW5zZmVycyBhcworCQkJICogZXJyb3JzLCB3ZSBkYXJlIG5vdCBxdWV1ZSBtdWx0aXBsZSB0cmFuc2ZlcnMuCisJCQkgKi8KKwkJCWRtYV9vayA9IGRtYV9jb250cm9sbGVyLT5jaGFubmVsX3Byb2dyYW0oZG1hX2NoYW5uZWwsCisJCQkJCXBhY2tldF9zeiwgISh1cmItPnRyYW5zZmVyX2ZsYWdzICYKKwkJCQkJCSAgICAgVVJCX1NIT1JUX05PVF9PSyksCisJCQkJCXVyYi0+dHJhbnNmZXJfZG1hICsgb2Zmc2V0LAorCQkJCQlxaC0+c2Vnc2l6ZSk7CisJCQlpZiAoIWRtYV9vaykgeworCQkJCWRtYV9jb250cm9sbGVyLT5jaGFubmVsX3JlbGVhc2UoZG1hX2NoYW5uZWwpOworCQkJCWh3X2VwLT5yeF9jaGFubmVsID0gZG1hX2NoYW5uZWwgPSBOVUxMOworCQkJfSBlbHNlCisJCQkJY3NyIHw9IE1VU0JfUlhDU1JfRE1BRU5BQjsKIAkJfQogCiAJCWNzciB8PSBNVVNCX1JYQ1NSX0hfUkVRUEtUOwotCQlEQkcoNywgIlJYQ1NSJWQgOj0gJTA0eFxuIiwgZXBudW0sIGNzcik7CisJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIlJYQ1NSJWQgOj0gJTA0eFxuIiwgZXBudW0sIGNzcik7CiAJCW11c2Jfd3JpdGV3KGh3X2VwLT5yZWdzLCBNVVNCX1JYQ1NSLCBjc3IpOwogCQljc3IgPSBtdXNiX3JlYWR3KGh3X2VwLT5yZWdzLCBNVVNCX1JYQ1NSKTsKIAl9CkBAIC05MjMsMTUgKzkwNSwxNSBAQAogCQlyZXF1ZXN0ID0gKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKikgdXJiLT5zZXR1cF9wYWNrZXQ7CiAKIAkJaWYgKCFyZXF1ZXN0LT53TGVuZ3RoKSB7Ci0JCQlEQkcoNCwgInN0YXJ0IG5vLURBVEFcbiIpOworCQkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAic3RhcnQgbm8tREFUQVxuIik7CiAJCQlicmVhazsKIAkJfSBlbHNlIGlmIChyZXF1ZXN0LT5iUmVxdWVzdFR5cGUgJiBVU0JfRElSX0lOKSB7Ci0JCQlEQkcoNCwgInN0YXJ0IElOLURBVEFcbiIpOworCQkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAic3RhcnQgSU4tREFUQVxuIik7CiAJCQltdXNiLT5lcDBfc3RhZ2UgPSBNVVNCX0VQMF9JTjsKIAkJCW1vcmUgPSB0cnVlOwogCQkJYnJlYWs7CiAJCX0gZWxzZSB7Ci0JCQlEQkcoNCwgInN0YXJ0IE9VVC1EQVRBXG4iKTsKKwkJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgInN0YXJ0IE9VVC1EQVRBXG4iKTsKIAkJCW11c2ItPmVwMF9zdGFnZSA9IE1VU0JfRVAwX09VVDsKIAkJCW1vcmUgPSB0cnVlOwogCQl9CkBAIC05NDMsNyArOTI1LDcgQEAKIAkJaWYgKGZpZm9fY291bnQpIHsKIAkJCWZpZm9fZGVzdCA9ICh1OCAqKSAodXJiLT50cmFuc2Zlcl9idWZmZXIKIAkJCQkJKyB1cmItPmFjdHVhbF9sZW5ndGgpOwotCQkJREJHKDMsICJTZW5kaW5nICVkIGJ5dGUlcyB0byBlcDAgZmlmbyAlcFxuIiwKKwkJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIlNlbmRpbmcgJWQgYnl0ZSVzIHRvIGVwMCBmaWZvICVwXG4iLAogCQkJCQlmaWZvX2NvdW50LAogCQkJCQkoZmlmb19jb3VudCA9PSAxKSA/ICIiIDogInMiLAogCQkJCQlmaWZvX2Rlc3QpOwpAQCAtOTg4LDcgKzk3MCw3IEBACiAJCQk/IG11c2JfcmVhZGIoZXBpbywgTVVTQl9DT1VOVDApCiAJCQk6IDA7CiAKLQlEQkcoNCwgIjw9PSBjc3IwICUwNHgsIHFoICVwLCBjb3VudCAlZCwgdXJiICVwLCBzdGFnZSAlZFxuIiwKKwlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICI8PT0gY3NyMCAlMDR4LCBxaCAlcCwgY291bnQgJWQsIHVyYiAlcCwgc3RhZ2UgJWRcbiIsCiAJCWNzciwgcWgsIGxlbiwgdXJiLCBtdXNiLT5lcDBfc3RhZ2UpOwogCiAJLyogaWYgd2UganVzdCBkaWQgc3RhdHVzIHN0YWdlLCB3ZSBhcmUgZG9uZSAqLwpAQCAtOTk5LDE1ICs5ODEsMTUgQEAKIAogCS8qIHByZXBhcmUgc3RhdHVzICovCiAJaWYgKGNzciAmIE1VU0JfQ1NSMF9IX1JYU1RBTEwpIHsKLQkJREJHKDYsICJTVEFMTElORyBFTkRQT0lOVFxuIik7CisJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIlNUQUxMSU5HIEVORFBPSU5UXG4iKTsKIAkJc3RhdHVzID0gLUVQSVBFOwogCiAJfSBlbHNlIGlmIChjc3IgJiBNVVNCX0NTUjBfSF9FUlJPUikgewotCQlEQkcoMiwgIm5vIHJlc3BvbnNlLCBjc3IwICUwNHhcbiIsIGNzcik7CisJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIm5vIHJlc3BvbnNlLCBjc3IwICUwNHhcbiIsIGNzcik7CiAJCXN0YXR1cyA9IC1FUFJPVE87CiAKIAl9IGVsc2UgaWYgKGNzciAmIE1VU0JfQ1NSMF9IX05BS1RJTUVPVVQpIHsKLQkJREJHKDIsICJjb250cm9sIE5BSyB0aW1lb3V0XG4iKTsKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiY29udHJvbCBOQUsgdGltZW91dFxuIik7CiAKIAkJLyogTk9URTogIHRoaXMgY29kZSBwYXRoIHdvdWxkIGJlIGEgZ29vZCBwbGFjZSB0byBQQVVTRSBhCiAJCSAqIGNvbnRyb2wgdHJhbnNmZXIsIGlmIGFub3RoZXIgb25lIGlzIHF1ZXVlZCwgc28gdGhhdApAQCAtMTAyMiw3ICsxMDA0LDcgQEAKIAl9CiAKIAlpZiAoc3RhdHVzKSB7Ci0JCURCRyg2LCAiYWJvcnRpbmdcbiIpOworCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJhYm9ydGluZ1xuIik7CiAJCXJldHZhbCA9IElSUV9IQU5ETEVEOwogCQlpZiAodXJiKQogCQkJdXJiLT5zdGF0dXMgPSBzdGF0dXM7CkBAIC0xMDcyLDcgKzEwNTQsNyBAQAogCQkJLyogZmxhZyBzdGF0dXMgc3RhZ2UgKi8KIAkJCW11c2ItPmVwMF9zdGFnZSA9IE1VU0JfRVAwX1NUQVRVUzsKIAotCQkJREJHKDUsICJlcDAgU1RBVFVTLCBjc3IgJTA0eFxuIiwgY3NyKTsKKwkJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgImVwMCBTVEFUVVMsIGNzciAlMDR4XG4iLCBjc3IpOwogCiAJCX0KIAkJbXVzYl93cml0ZXcoZXBpbywgTVVTQl9DU1IwLCBjc3IpOwpAQCAtMTEyNiwzMSArMTEwOCwzMSBAQAogCiAJLyogd2l0aCBDUFBJLCBETUEgc29tZXRpbWVzIHRyaWdnZXJzICJleHRyYSIgaXJxcyAqLwogCWlmICghdXJiKSB7Ci0JCURCRyg0LCAiZXh0cmEgVFglZCByZWFkeSwgY3NyICUwNHhcbiIsIGVwbnVtLCB0eF9jc3IpOworCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJleHRyYSBUWCVkIHJlYWR5LCBjc3IgJTA0eFxuIiwgZXBudW0sIHR4X2Nzcik7CiAJCXJldHVybjsKIAl9CiAKIAlwaXBlID0gdXJiLT5waXBlOwogCWRtYSA9IGlzX2RtYV9jYXBhYmxlKCkgPyBod19lcC0+dHhfY2hhbm5lbCA6IE5VTEw7Ci0JREJHKDQsICJPVVQvVFglZCBlbmQsIGNzciAlMDR4JXNcbiIsIGVwbnVtLCB0eF9jc3IsCisJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiT1VUL1RYJWQgZW5kLCBjc3IgJTA0eCVzXG4iLCBlcG51bSwgdHhfY3NyLAogCQkJZG1hID8gIiwgZG1hIiA6ICIiKTsKIAogCS8qIGNoZWNrIGZvciBlcnJvcnMgKi8KIAlpZiAodHhfY3NyICYgTVVTQl9UWENTUl9IX1JYU1RBTEwpIHsKIAkJLyogZG1hIHdhcyBkaXNhYmxlZCwgZmlmbyBmbHVzaGVkICovCi0JCURCRygzLCAiVFggZW5kICVkIHN0YWxsXG4iLCBlcG51bSk7CisJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIlRYIGVuZCAlZCBzdGFsbFxuIiwgZXBudW0pOwogCiAJCS8qIHN0YWxsOyByZWNvcmQgVVJCIHN0YXR1cyAqLwogCQlzdGF0dXMgPSAtRVBJUEU7CiAKIAl9IGVsc2UgaWYgKHR4X2NzciAmIE1VU0JfVFhDU1JfSF9FUlJPUikgewogCQkvKiAoTk9OLUlTTykgZG1hIHdhcyBkaXNhYmxlZCwgZmlmbyBmbHVzaGVkICovCi0JCURCRygzLCAiVFggM3N0cmlrZXMgb24gZXA9JWRcbiIsIGVwbnVtKTsKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiVFggM3N0cmlrZXMgb24gZXA9JWRcbiIsIGVwbnVtKTsKIAogCQlzdGF0dXMgPSAtRVRJTUVET1VUOwogCiAJfSBlbHNlIGlmICh0eF9jc3IgJiBNVVNCX1RYQ1NSX0hfTkFLVElNRU9VVCkgewotCQlEQkcoNiwgIlRYIGVuZD0lZCBkZXZpY2Ugbm90IHJlc3BvbmRpbmdcbiIsIGVwbnVtKTsKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiVFggZW5kPSVkIGRldmljZSBub3QgcmVzcG9uZGluZ1xuIiwgZXBudW0pOwogCiAJCS8qIE5PVEU6ICB0aGlzIGNvZGUgcGF0aCB3b3VsZCBiZSBhIGdvb2QgcGxhY2UgdG8gUEFVU0UgYQogCQkgKiB0cmFuc2ZlciwgaWYgdGhlcmUncyBzb21lIG90aGVyIChub25wZXJpb2RpYykgdHggdXJiCkBAIC0xMTk1LDcgKzExNzcsNyBAQAogCiAJLyogc2Vjb25kIGNwcGkgY2FzZSAqLwogCWlmIChkbWFfY2hhbm5lbF9zdGF0dXMoZG1hKSA9PSBNVVNCX0RNQV9TVEFUVVNfQlVTWSkgewotCQlEQkcoNCwgImV4dHJhIFRYJWQgcmVhZHksIGNzciAlMDR4XG4iLCBlcG51bSwgdHhfY3NyKTsKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiZXh0cmEgVFglZCByZWFkeSwgY3NyICUwNHhcbiIsIGVwbnVtLCB0eF9jc3IpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMjU0LDcgKzEyMzYsNyBAQAogCQkgKiBGSUZPIG1vZGUgdG9vLi4uCiAJCSAqLwogCQlpZiAodHhfY3NyICYgKE1VU0JfVFhDU1JfRklGT05PVEVNUFRZIHwgTVVTQl9UWENTUl9UWFBLVFJEWSkpIHsKLQkJCURCRygyLCAiRE1BIGNvbXBsZXRlIGJ1dCBwYWNrZXQgc3RpbGwgaW4gRklGTywgIgorCQkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiRE1BIGNvbXBsZXRlIGJ1dCBwYWNrZXQgc3RpbGwgaW4gRklGTywgIgogCQkJICAgICJDU1IgJTA0eFxuIiwgdHhfY3NyKTsKIAkJCXJldHVybjsKIAkJfQpAQCAtMTMyMSw3ICsxMzAzLDcgQEAKIAkJCXJldHVybjsKIAkJfQogCX0gZWxzZQlpZiAodHhfY3NyICYgTVVTQl9UWENTUl9ETUFFTkFCKSB7Ci0JCURCRygxLCAibm90IGNvbXBsZXRlLCBidXQgRE1BIGVuYWJsZWQ/XG4iKTsKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAibm90IGNvbXBsZXRlLCBidXQgRE1BIGVuYWJsZWQ/XG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTQ2Miw3ICsxNDQ0LDcgQEAKIAkJICogdXNidGVzdCAjMTEgKHVubGlua3MpIHRyaWdnZXJzIGl0IHJlZ3VsYXJseSwgc29tZXRpbWVzCiAJCSAqIHdpdGggZmlmbyBmdWxsLiAgKE9ubHkgd2l0aCBETUE/PykKIAkJICovCi0JCURCRygzLCAiQk9HVVMgUlglZCByZWFkeSwgY3NyICUwNHgsIGNvdW50ICVkXG4iLCBlcG51bSwgdmFsLAorCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJCT0dVUyBSWCVkIHJlYWR5LCBjc3IgJTA0eCwgY291bnQgJWRcbiIsIGVwbnVtLCB2YWwsCiAJCQltdXNiX3JlYWR3KGVwaW8sIE1VU0JfUlhDT1VOVCkpOwogCQltdXNiX2hfZmx1c2hfcnhmaWZvKGh3X2VwLCBNVVNCX1JYQ1NSX0NMUkRBVEFUT0cpOwogCQlyZXR1cm47CkBAIC0xNDcwLDIwICsxNDUyLDIwIEBACiAKIAlwaXBlID0gdXJiLT5waXBlOwogCi0JREJHKDUsICI8PT0gaHcgJWQgcnhjc3IgJTA0eCwgdXJiIGFjdHVhbCAlZCAoK2RtYSAlenUpXG4iLAorCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIjw9PSBodyAlZCByeGNzciAlMDR4LCB1cmIgYWN0dWFsICVkICgrZG1hICV6dSlcbiIsCiAJCWVwbnVtLCByeF9jc3IsIHVyYi0+YWN0dWFsX2xlbmd0aCwKIAkJZG1hID8gZG1hLT5hY3R1YWxfbGVuIDogMCk7CiAKIAkvKiBjaGVjayBmb3IgZXJyb3JzLCBjb25jdXJyZW50IHN0YWxsICYgdW5saW5rIGlzIG5vdCByZWFsbHkKIAkgKiBoYW5kbGVkIHlldCEgKi8KIAlpZiAocnhfY3NyICYgTVVTQl9SWENTUl9IX1JYU1RBTEwpIHsKLQkJREJHKDMsICJSWCBlbmQgJWQgU1RBTExcbiIsIGVwbnVtKTsKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiUlggZW5kICVkIFNUQUxMXG4iLCBlcG51bSk7CiAKIAkJLyogc3RhbGw7IHJlY29yZCBVUkIgc3RhdHVzICovCiAJCXN0YXR1cyA9IC1FUElQRTsKIAogCX0gZWxzZSBpZiAocnhfY3NyICYgTVVTQl9SWENTUl9IX0VSUk9SKSB7Ci0JCURCRygzLCAiZW5kICVkIFJYIHByb3RvIGVycm9yXG4iLCBlcG51bSk7CisJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgImVuZCAlZCBSWCBwcm90byBlcnJvclxuIiwgZXBudW0pOwogCiAJCXN0YXR1cyA9IC1FUFJPVE87CiAJCW11c2Jfd3JpdGViKGVwaW8sIE1VU0JfUlhJTlRFUlZBTCwgMCk7CkBAIC0xNDkxLDcgKzE0NzMsNyBAQAogCX0gZWxzZSBpZiAocnhfY3NyICYgTVVTQl9SWENTUl9EQVRBRVJST1IpIHsKIAogCQlpZiAoVVNCX0VORFBPSU5UX1hGRVJfSVNPQyAhPSBxaC0+dHlwZSkgewotCQkJREJHKDYsICJSWCBlbmQgJWQgTkFLIHRpbWVvdXRcbiIsIGVwbnVtKTsKKwkJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIlJYIGVuZCAlZCBOQUsgdGltZW91dFxuIiwgZXBudW0pOwogCiAJCQkvKiBOT1RFOiBOQUtpbmcgaXMgKk5PVCogYW4gZXJyb3IsIHNvIHdlIHdhbnQgdG8KIAkJCSAqIGNvbnRpbnVlLiAgRXhjZXB0IC4uLiBpZiB0aGVyZSdzIGEgcmVxdWVzdCBmb3IKQEAgLTE1MTQsMTIgKzE0OTYsMTIgQEAKIAogCQkJZ290byBmaW5pc2g7CiAJCX0gZWxzZSB7Ci0JCQlEQkcoNCwgIlJYIGVuZCAlZCBJU08gZGF0YSBlcnJvclxuIiwgZXBudW0pOworCQkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiUlggZW5kICVkIElTTyBkYXRhIGVycm9yXG4iLCBlcG51bSk7CiAJCQkvKiBwYWNrZXQgZXJyb3IgcmVwb3J0ZWQgbGF0ZXIgKi8KIAkJCWlzb19lcnIgPSB0cnVlOwogCQl9CiAJfSBlbHNlIGlmIChyeF9jc3IgJiBNVVNCX1JYQ1NSX0lOQ09NUFJYKSB7Ci0JCURCRygzLCAiZW5kICVkIGhpZ2ggYmFuZHdpZHRoIGluY29tcGxldGUgSVNPIHBhY2tldCBSWFxuIiwKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiZW5kICVkIGhpZ2ggYmFuZHdpZHRoIGluY29tcGxldGUgSVNPIHBhY2tldCBSWFxuIiwKIAkJCQllcG51bSk7CiAJCXN0YXR1cyA9IC1FUFJPVE87CiAJfQpAQCAtMTU2NSw3ICsxNTQ3LDcgQEAKIAkJCWRvbmUgPSB0cnVlOwogCQl9CiAKLQkJREJHKDIsICJSWENTUiVkICUwNHgsIHJlcXBrdCwgbGVuICV6dSVzXG4iLCBlcG51bSwgcnhfY3NyLAorCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJSWENTUiVkICUwNHgsIHJlcXBrdCwgbGVuICV6dSVzXG4iLCBlcG51bSwgcnhfY3NyLAogCQkJCXhmZXJfbGVuLCBkbWEgPyAiLCBkbWEiIDogIiIpOwogCQlyeF9jc3IgJj0gfk1VU0JfUlhDU1JfSF9SRVFQS1Q7CiAKQEAgLTE2MTUsNyArMTU5Nyw3IEBACiAJCQkJTVVTQl9SWENTUl9IX1daQ19CSVRTIHwgdmFsKTsKIAkJfQogCi0JCURCRyg0LCAiZXAgJWQgZG1hICVzLCByeGNzciAlMDR4LCByeGNvdW50ICVkXG4iLCBlcG51bSwKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiZXAgJWQgZG1hICVzLCByeGNzciAlMDR4LCByeGNvdW50ICVkXG4iLCBlcG51bSwKIAkJCWRvbmUgPyAib2ZmIiA6ICJyZXNldCIsCiAJCQltdXNiX3JlYWR3KGVwaW8sIE1VU0JfUlhDU1IpLAogCQkJbXVzYl9yZWFkdyhlcGlvLCBNVVNCX1JYQ09VTlQpKTsKQEAgLTE2NDgsNyArMTYzMCw3IEBACiAKIAkJCXJ4X2NvdW50ID0gbXVzYl9yZWFkdyhlcGlvLCBNVVNCX1JYQ09VTlQpOwogCi0JCQlEQkcoMiwgIlJYJWQgY291bnQgJWQsIGJ1ZmZlciAweCV4IGxlbiAlZC8lZFxuIiwKKwkJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIlJYJWQgY291bnQgJWQsIGJ1ZmZlciAweCV4IGxlbiAlZC8lZFxuIiwKIAkJCQkJZXBudW0sIHJ4X2NvdW50LAogCQkJCQl1cmItPnRyYW5zZmVyX2RtYQogCQkJCQkJKyB1cmItPmFjdHVhbF9sZW5ndGgsCkBAIC0xNjcyLDcgKzE2NTQsNyBAQAogCQkJCQkJZF9zdGF0dXMgPSAtRU9WRVJGTE9XOwogCQkJCQkJdXJiLT5lcnJvcl9jb3VudCsrOwogCQkJCQl9Ci0JCQkJCURCRygyLCAiKiogT1ZFUkZMT1cgJWQgaW50byAlZFxuIixcCisJCQkJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIioqIE9WRVJGTE9XICVkIGludG8gJWRcbiIsXAogCQkJCQkgICAgcnhfY291bnQsIGQtPmxlbmd0aCk7CiAKIAkJCQkJbGVuZ3RoID0gZC0+bGVuZ3RoOwpAQCAtMTc2MCw3ICsxNzQyLDcgQEAKIAkJCXVzYl9oY2RfdW5tYXBfdXJiX2Zvcl9kbWEobXVzYl90b19oY2QobXVzYiksIHVyYik7CiAJCQlkb25lID0gbXVzYl9ob3N0X3BhY2tldF9yeChtdXNiLCB1cmIsCiAJCQkJCWVwbnVtLCBpc29fZXJyKTsKLQkJCURCRyg2LCAicmVhZCAlc3BhY2tldFxuIiwgZG9uZSA/ICJsYXN0ICIgOiAiIik7CisJCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJyZWFkICVzcGFja2V0XG4iLCBkb25lID8gImxhc3QgIiA6ICIiKTsKIAkJfQogCX0KIApAQCAtMTg4MSw3ICsxODYzLDcgQEAKIAlpZGxlID0gMTsKIAlxaC0+bXV4ID0gMDsKIAlod19lcCA9IG11c2ItPmVuZHBvaW50cyArIGJlc3RfZW5kOwotCURCRyg0LCAicWggJXAgcGVyaW9kaWMgc2xvdCAlZFxuIiwgcWgsIGJlc3RfZW5kKTsKKwlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJxaCAlcCBwZXJpb2RpYyBzbG90ICVkXG4iLCBxaCwgYmVzdF9lbmQpOwogc3VjY2VzczoKIAlpZiAoaGVhZCkgewogCQlpZGxlID0gbGlzdF9lbXB0eShoZWFkKTsKQEAgLTIwODcsNiArMjA2OSw3IEBACiBzdGF0aWMgaW50IG11c2JfY2xlYW51cF91cmIoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgbXVzYl9xaCAqcWgpCiB7CiAJc3RydWN0IG11c2JfaHdfZXAJKmVwID0gcWgtPmh3X2VwOworCXN0cnVjdCBtdXNiCQkqbXVzYiA9IGVwLT5tdXNiOwogCXZvaWQgX19pb21lbQkJKmVwaW8gPSBlcC0+cmVnczsKIAl1bnNpZ25lZAkJaHdfZW5kID0gZXAtPmVwbnVtOwogCXZvaWQgX19pb21lbQkJKnJlZ3MgPSBlcC0+bXVzYi0+bXJlZ3M7CkBAIC0yMTAyLDcgKzIwODUsNyBAQAogCQlkbWEgPSBpc19pbiA/IGVwLT5yeF9jaGFubmVsIDogZXAtPnR4X2NoYW5uZWw7CiAJCWlmIChkbWEpIHsKIAkJCXN0YXR1cyA9IGVwLT5tdXNiLT5kbWFfY29udHJvbGxlci0+Y2hhbm5lbF9hYm9ydChkbWEpOwotCQkJREJHKHN0YXR1cyA/IDEgOiAzLAorCQkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLAogCQkJCSJhYm9ydCAlY1glZCBETUEgZm9yIHVyYiAlcCAtLT4gJWRcbiIsCiAJCQkJaXNfaW4gPyAnUicgOiAnVCcsIGVwLT5lcG51bSwKIAkJCQl1cmIsIHN0YXR1cyk7CkBAIC0yMTQ5LDcgKzIxMzIsNyBAQAogCWludAkJCWlzX2luICA9IHVzYl9waXBlaW4odXJiLT5waXBlKTsKIAlpbnQJCQlyZXQ7CiAKLQlEQkcoNCwgInVyYj0lcCwgZGV2JWQgZXAlZCVzXG4iLCB1cmIsCisJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAidXJiPSVwLCBkZXYlZCBlcCVkJXNcbiIsIHVyYiwKIAkJCXVzYl9waXBlZGV2aWNlKHVyYi0+cGlwZSksCiAJCQl1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksCiAJCQlpc19pbiA/ICJpbiIgOiAib3V0Iik7CkBAIC0yMzA0LDcgKzIyODcsNyBAQAogCiAJaWYgKG11c2ItPmlzX2FjdGl2ZSkgewogCQlXQVJOSU5HKCJ0cnlpbmcgdG8gc3VzcGVuZCBhcyAlcyB3aGlsZSBhY3RpdmVcbiIsCi0JCQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiKSk7CisJCQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiLT54Y2Vpdi0+c3RhdGUpKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9IGVsc2UKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfdmlydGh1Yi5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX3ZpcnRodWIuYwppbmRleCA0ODkxMDRhLi4yZDgwYTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfdmlydGh1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl92aXJ0aHViLmMKQEAgLTc0LDcgKzc0LDcgQEAKIAkJCQlicmVhazsKIAkJfQogCi0JCURCRygzLCAiUm9vdCBwb3J0IHN1c3BlbmRlZCwgcG93ZXIgJTAyeFxuIiwgcG93ZXIpOworCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJSb290IHBvcnQgc3VzcGVuZGVkLCBwb3dlciAlMDJ4XG4iLCBwb3dlcik7CiAKIAkJbXVzYi0+cG9ydDFfc3RhdHVzIHw9IFVTQl9QT1JUX1NUQVRfU1VTUEVORDsKIAkJc3dpdGNoIChtdXNiLT54Y2Vpdi0+c3RhdGUpIHsKQEAgLTk3LDE1ICs5NywxNSBAQAogCQkJYnJlYWs7CiAjZW5kaWYKIAkJZGVmYXVsdDoKLQkJCURCRygxLCAiYm9ndXMgcmggc3VzcGVuZD8gJXNcbiIsCi0JCQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiKSk7CisJCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJib2d1cyByaCBzdXNwZW5kPyAlc1xuIiwKKwkJCQlvdGdfc3RhdGVfc3RyaW5nKG11c2ItPnhjZWl2LT5zdGF0ZSkpOwogCQl9CiAJfSBlbHNlIGlmIChwb3dlciAmIE1VU0JfUE9XRVJfU1VTUEVORE0pIHsKIAkJcG93ZXIgJj0gfk1VU0JfUE9XRVJfU1VTUEVORE07CiAJCXBvd2VyIHw9IE1VU0JfUE9XRVJfUkVTVU1FOwogCQltdXNiX3dyaXRlYihtYmFzZSwgTVVTQl9QT1dFUiwgcG93ZXIpOwogCi0JCURCRygzLCAiUm9vdCBwb3J0IHJlc3VtaW5nLCBwb3dlciAlMDJ4XG4iLCBwb3dlcik7CisJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIlJvb3QgcG9ydCByZXN1bWluZywgcG93ZXIgJTAyeFxuIiwgcG93ZXIpOwogCiAJCS8qIGxhdGVyLCBHZXRQb3J0U3RhdHVzIHdpbGwgc3RvcCBSRVNVTUUgc2lnbmFsaW5nICovCiAJCW11c2ItPnBvcnQxX3N0YXR1cyB8PSBNVVNCX1BPUlRfU1RBVF9SRVNVTUU7CkBAIC0xMjAsNyArMTIwLDcgQEAKIAogI2lmZGVmIENPTkZJR19VU0JfTVVTQl9PVEcKIAlpZiAobXVzYi0+eGNlaXYtPnN0YXRlID09IE9UR19TVEFURV9CX0lETEUpIHsKLQkJREJHKDIsICJITlA6IFJldHVybmluZyBmcm9tIEhOUDsgbm8gaHViIHJlc2V0IGZyb20gYl9pZGxlXG4iKTsKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiSE5QOiBSZXR1cm5pbmcgZnJvbSBITlA7IG5vIGh1YiByZXNldCBmcm9tIGJfaWRsZVxuIik7CiAJCW11c2ItPnBvcnQxX3N0YXR1cyAmPSB+VVNCX1BPUlRfU1RBVF9SRVNFVDsKIAkJcmV0dXJuOwogCX0KQEAgLTE1OSw3ICsxNTksNyBAQAogCQltdXNiLT5wb3J0MV9zdGF0dXMgJj0gflVTQl9QT1JUX1NUQVRfRU5BQkxFOwogCQltdXNiLT5yaF90aW1lciA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDUwKTsKIAl9IGVsc2UgewotCQlEQkcoNCwgInJvb3QgcG9ydCByZXNldCBzdG9wcGVkXG4iKTsKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAicm9vdCBwb3J0IHJlc2V0IHN0b3BwZWRcbiIpOwogCQltdXNiX3dyaXRlYihtYmFzZSwgTVVTQl9QT1dFUiwKIAkJCQlwb3dlciAmIH5NVVNCX1BPV0VSX1JFU0VUKTsKIApAQCAtMTY3LDcgKzE2Nyw3IEBACiAKIAkJcG93ZXIgPSBtdXNiX3JlYWRiKG1iYXNlLCBNVVNCX1BPV0VSKTsKIAkJaWYgKHBvd2VyICYgTVVTQl9QT1dFUl9IU01PREUpIHsKLQkJCURCRyg0LCAiaGlnaC1zcGVlZCBkZXZpY2UgY29ubmVjdGVkXG4iKTsKKwkJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgImhpZ2gtc3BlZWQgZGV2aWNlIGNvbm5lY3RlZFxuIik7CiAJCQltdXNiLT5wb3J0MV9zdGF0dXMgfD0gVVNCX1BPUlRfU1RBVF9ISUdIX1NQRUVEOwogCQl9CiAKQEAgLTIwOCw3ICsyMDgsOCBAQAogCQltdXNiLT54Y2Vpdi0+c3RhdGUgPSBPVEdfU1RBVEVfQl9JRExFOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlEQkcoMSwgImhvc3QgZGlzY29ubmVjdCAoJXMpXG4iLCBvdGdfc3RhdGVfc3RyaW5nKG11c2IpKTsKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiaG9zdCBkaXNjb25uZWN0ICglcylcbiIsCisJCQlvdGdfc3RhdGVfc3RyaW5nKG11c2ItPnhjZWl2LT5zdGF0ZSkpOwogCX0KIH0KIApAQCAtMjg3LDcgKzI4OCw3IEBACiAJCWRlZmF1bHQ6CiAJCQlnb3RvIGVycm9yOwogCQl9Ci0JCURCRyg1LCAiY2xlYXIgZmVhdHVyZSAlZFxuIiwgd1ZhbHVlKTsKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiY2xlYXIgZmVhdHVyZSAlZFxuIiwgd1ZhbHVlKTsKIAkJbXVzYi0+cG9ydDFfc3RhdHVzICY9IH4oMSA8PCB3VmFsdWUpOwogCQlicmVhazsKIAljYXNlIEdldEh1YkRlc2NyaXB0b3I6CkBAIC0zMjksNyArMzMwLDcgQEAKIAogCQkJcG93ZXIgPSBtdXNiX3JlYWRiKG11c2ItPm1yZWdzLCBNVVNCX1BPV0VSKTsKIAkJCXBvd2VyICY9IH5NVVNCX1BPV0VSX1JFU1VNRTsKLQkJCURCRyg0LCAicm9vdCBwb3J0IHJlc3VtZSBzdG9wcGVkLCBwb3dlciAlMDJ4XG4iLAorCQkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAicm9vdCBwb3J0IHJlc3VtZSBzdG9wcGVkLCBwb3dlciAlMDJ4XG4iLAogCQkJCQlwb3dlcik7CiAJCQltdXNiX3dyaXRlYihtdXNiLT5tcmVncywgTVVTQl9QT1dFUiwgcG93ZXIpOwogCkBAIC0zNTIsNyArMzUzLDcgQEAKIAkJCQkoX19sZTMyICopIGJ1Zik7CiAKIAkJLyogcG9ydCBjaGFuZ2Ugc3RhdHVzIGlzIG1vcmUgaW50ZXJlc3RpbmcgKi8KLQkJREJHKGdldF91bmFsaWduZWQoKHUxNiAqKShidWYrMikpID8gMiA6IDUsICJwb3J0IHN0YXR1cyAlMDh4XG4iLAorCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJwb3J0IHN0YXR1cyAlMDh4XG4iLAogCQkJCW11c2ItPnBvcnQxX3N0YXR1cyk7CiAJCWJyZWFrOwogCWNhc2UgU2V0UG9ydEZlYXR1cmU6CkBAIC00MjMsNyArNDI0LDcgQEAKIAkJZGVmYXVsdDoKIAkJCWdvdG8gZXJyb3I7CiAJCX0KLQkJREJHKDUsICJzZXQgZmVhdHVyZSAlZFxuIiwgd1ZhbHVlKTsKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAic2V0IGZlYXR1cmUgJWRcbiIsIHdWYWx1ZSk7CiAJCW11c2ItPnBvcnQxX3N0YXR1cyB8PSAxIDw8IHdWYWx1ZTsKIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYmhzZG1hLmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2Joc2RtYS5jCmluZGV4IGQyODE3OTIuLmY3MGM1YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYmhzZG1hLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiaHNkbWEuYwpAQCAtMTIyLDExICsxMjIsMTIgQEAKIHsKIAlzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqbXVzYl9jaGFubmVsID0gY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyICpjb250cm9sbGVyID0gbXVzYl9jaGFubmVsLT5jb250cm9sbGVyOworCXN0cnVjdCBtdXNiICptdXNiID0gY29udHJvbGxlci0+cHJpdmF0ZV9kYXRhOwogCXZvaWQgX19pb21lbSAqbWJhc2UgPSBjb250cm9sbGVyLT5iYXNlOwogCXU4IGJjaGFubmVsID0gbXVzYl9jaGFubmVsLT5pZHg7CiAJdTE2IGNzciA9IDA7CiAKLQlEQkcoNCwgIiVwLCBwa3Rfc3ogJWQsIGFkZHIgMHgleCwgbGVuICVkLCBtb2RlICVkXG4iLAorCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIiVwLCBwa3Rfc3ogJWQsIGFkZHIgMHgleCwgbGVuICVkLCBtb2RlICVkXG4iLAogCQkJY2hhbm5lbCwgcGFja2V0X3N6LCBkbWFfYWRkciwgbGVuLCBtb2RlKTsKIAogCWlmIChtb2RlKSB7CkBAIC0xNjEsNyArMTYyLDcgQEAKIAlzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxlciAqY29udHJvbGxlciA9IG11c2JfY2hhbm5lbC0+Y29udHJvbGxlcjsKIAlzdHJ1Y3QgbXVzYiAqbXVzYiA9IGNvbnRyb2xsZXItPnByaXZhdGVfZGF0YTsKIAotCURCRygyLCAiZXAlZC0lcyBwa3Rfc3ogJWQsIGRtYV9hZGRyIDB4JXggbGVuZ3RoICVkLCBtb2RlICVkXG4iLAorCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgImVwJWQtJXMgcGt0X3N6ICVkLCBkbWFfYWRkciAweCV4IGxlbmd0aCAlZCwgbW9kZSAlZFxuIiwKIAkJbXVzYl9jaGFubmVsLT5lcG51bSwKIAkJbXVzYl9jaGFubmVsLT50cmFuc21pdCA/ICJUeCIgOiAiUngiLAogCQlwYWNrZXRfc3osIGRtYV9hZGRyLCBsZW4sIG1vZGUpOwpAQCAtMjc0LDcgKzI3NSw3IEBACiAjZW5kaWYKIAogCWlmICghaW50X2hzZG1hKSB7Ci0JCURCRygyLCAic3B1cmlvdXMgRE1BIGlycVxuIik7CisJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgInNwdXJpb3VzIERNQSBpcnFcbiIpOwogCiAJCWZvciAoYmNoYW5uZWwgPSAwOyBiY2hhbm5lbCA8IE1VU0JfSFNETUFfQ0hBTk5FTFM7IGJjaGFubmVsKyspIHsKIAkJCW11c2JfY2hhbm5lbCA9IChzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqKQpAQCAtMjg4LDcgKzI4OSw3IEBACiAJCQl9CiAJCX0KIAotCQlEQkcoMiwgImludF9oc2RtYSA9IDB4JXhcbiIsIGludF9oc2RtYSk7CisJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgImludF9oc2RtYSA9IDB4JXhcbiIsIGludF9oc2RtYSk7CiAKIAkJaWYgKCFpbnRfaHNkbWEpCiAJCQlnb3RvIGRvbmU7CkBAIC0zMTUsNyArMzE2LDcgQEAKIAkJCQljaGFubmVsLT5hY3R1YWxfbGVuID0gYWRkcgogCQkJCQktIG11c2JfY2hhbm5lbC0+c3RhcnRfYWRkcjsKIAotCQkJCURCRygyLCAiY2ggJXAsIDB4JXggLT4gMHgleCAoJXp1IC8gJWQpICVzXG4iLAorCQkJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgImNoICVwLCAweCV4IC0+IDB4JXggKCV6dSAvICVkKSAlc1xuIiwKIAkJCQkJY2hhbm5lbCwgbXVzYl9jaGFubmVsLT5zdGFydF9hZGRyLAogCQkJCQlhZGRyLCBjaGFubmVsLT5hY3R1YWxfbGVuLAogCQkJCQltdXNiX2NoYW5uZWwtPmxlbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2Ivb21hcDI0MzAuYyBiL2RyaXZlcnMvdXNiL211c2Ivb21hcDI0MzAuYwppbmRleCBlOWU2MGI2Li5jNWQ0YzQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL29tYXAyNDMwLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9vbWFwMjQzMC5jCkBAIC03Niw3ICs3Niw3IEBACiAJCWlmIChtdXNiLT5wb3J0MV9zdGF0dXMgJiBNVVNCX1BPUlRfU1RBVF9SRVNVTUUpIHsKIAkJCXBvd2VyID0gbXVzYl9yZWFkYihtdXNiLT5tcmVncywgTVVTQl9QT1dFUik7CiAJCQlwb3dlciAmPSB+TVVTQl9QT1dFUl9SRVNVTUU7Ci0JCQlEQkcoMSwgInJvb3QgcG9ydCByZXN1bWUgc3RvcHBlZCwgcG93ZXIgJTAyeFxuIiwgcG93ZXIpOworCQkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAicm9vdCBwb3J0IHJlc3VtZSBzdG9wcGVkLCBwb3dlciAlMDJ4XG4iLCBwb3dlcik7CiAJCQltdXNiX3dyaXRlYihtdXNiLT5tcmVncywgTVVTQl9QT1dFUiwgcG93ZXIpOwogCQkJbXVzYi0+aXNfYWN0aXZlID0gMTsKIAkJCW11c2ItPnBvcnQxX3N0YXR1cyAmPSB+KFVTQl9QT1JUX1NUQVRfU1VTUEVORApAQCAtMTE0LDcgKzExNCw4IEBACiAJLyogTmV2ZXIgaWRsZSBpZiBhY3RpdmUsIG9yIHdoZW4gVkJVUyB0aW1lb3V0IGlzIG5vdCBzZXQgYXMgaG9zdCAqLwogCWlmIChtdXNiLT5pc19hY3RpdmUgfHwgKChtdXNiLT5hX3dhaXRfYmNvbiA9PSAwKQogCQkJJiYgKG11c2ItPnhjZWl2LT5zdGF0ZSA9PSBPVEdfU1RBVEVfQV9XQUlUX0JDT04pKSkgewotCQlEQkcoNCwgIiVzIGFjdGl2ZSwgZGVsZXRpbmcgdGltZXJcbiIsIG90Z19zdGF0ZV9zdHJpbmcobXVzYikpOworCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICIlcyBhY3RpdmUsIGRlbGV0aW5nIHRpbWVyXG4iLAorCQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiLT54Y2Vpdi0+c3RhdGUpKTsKIAkJZGVsX3RpbWVyKCZtdXNiX2lkbGVfdGltZXIpOwogCQlsYXN0X3RpbWVyID0gamlmZmllczsKIAkJcmV0dXJuOwpAQCAtMTI0LDE0ICsxMjUsMTQgQEAKIAkJaWYgKCF0aW1lcl9wZW5kaW5nKCZtdXNiX2lkbGVfdGltZXIpKQogCQkJbGFzdF90aW1lciA9IHRpbWVvdXQ7CiAJCWVsc2UgewotCQkJREJHKDQsICJMb25nZXIgaWRsZSB0aW1lciBhbHJlYWR5IHBlbmRpbmcsIGlnbm9yaW5nXG4iKTsKKwkJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIkxvbmdlciBpZGxlIHRpbWVyIGFscmVhZHkgcGVuZGluZywgaWdub3JpbmdcbiIpOwogCQkJcmV0dXJuOwogCQl9CiAJfQogCWxhc3RfdGltZXIgPSB0aW1lb3V0OwogCi0JREJHKDQsICIlcyBpbmFjdGl2ZSwgZm9yIGlkbGUgdGltZXIgZm9yICVsdSBtc1xuIiwKLQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiKSwKKwlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICIlcyBpbmFjdGl2ZSwgZm9yIGlkbGUgdGltZXIgZm9yICVsdSBtc1xuIiwKKwkJb3RnX3N0YXRlX3N0cmluZyhtdXNiLT54Y2Vpdi0+c3RhdGUpLAogCQkodW5zaWduZWQgbG9uZylqaWZmaWVzX3RvX21zZWNzKHRpbWVvdXQgLSBqaWZmaWVzKSk7CiAJbW9kX3RpbWVyKCZtdXNiX2lkbGVfdGltZXIsIHRpbWVvdXQpOwogfQpAQCAtMTkzLDkgKzE5NCw5IEBACiAJfQogCW11c2Jfd3JpdGViKG11c2ItPm1yZWdzLCBNVVNCX0RFVkNUTCwgZGV2Y3RsKTsKIAotCURCRygxLCAiVkJVUyAlcywgZGV2Y3RsICUwMnggIgorCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIlZCVVMgJXMsIGRldmN0bCAlMDJ4ICIKIAkJLyogb3RnICUzeCBjb25mICUwOHggcHJjbSAlMDh4ICovICJcbiIsCi0JCW90Z19zdGF0ZV9zdHJpbmcobXVzYiksCisJCW90Z19zdGF0ZV9zdHJpbmcobXVzYi0+eGNlaXYtPnN0YXRlKSwKIAkJbXVzYl9yZWFkYihtdXNiLT5tcmVncywgTVVTQl9ERVZDVEwpKTsKIH0KIApAQCAtMjM5LDcgKzI0MCw3IEBACiAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBVU0JfRVZFTlRfSUQ6Ci0JCURCRyg0LCAiSUQgR05EXG4iKTsKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiSUQgR05EXG4iKTsKIAogCQlpZiAoaXNfb3RnX2VuYWJsZWQobXVzYikpIHsKICNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMKQEAgLTI1Nyw3ICsyNTgsNyBAQAogCQlicmVhazsKIAogCWNhc2UgVVNCX0VWRU5UX1ZCVVM6Ci0JCURCRyg0LCAiVkJVUyBDb25uZWN0XG4iKTsKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiVkJVUyBDb25uZWN0XG4iKTsKIAogI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQwogCQlpZiAobXVzYi0+Z2FkZ2V0X2RyaXZlcikKQEAgLTI2Nyw3ICsyNjgsNyBAQAogCQlicmVhazsKIAogCWNhc2UgVVNCX0VWRU5UX05PTkU6Ci0JCURCRyg0LCAiVkJVUyBEaXNjb25uZWN0XG4iKTsKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiVkJVUyBEaXNjb25uZWN0XG4iKTsKIAogI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQwogCQlpZiAoaXNfb3RnX2VuYWJsZWQobXVzYikgfHwgaXNfcGVyaXBoZXJhbF9lbmFibGVkKG11c2IpKQpAQCAtMjg1LDcgKzI4Niw3IEBACiAJCW90Z19zaHV0ZG93bihtdXNiLT54Y2Vpdik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCURCRyg0LCAiSUQgZmxvYXRcbiIpOworCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJJRCBmbG9hdFxuIik7CiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAl9CiAKQEAgLTMzOSw3ICszNDAsNyBAQAogCXN0YXR1cyA9IG90Z19yZWdpc3Rlcl9ub3RpZmllcihtdXNiLT54Y2VpdiwgJm11c2ItPm5iKTsKIAogCWlmIChzdGF0dXMpCi0JCURCRygxLCAibm90aWZpY2F0aW9uIHJlZ2lzdGVyIGZhaWxlZFxuIik7CisJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIm5vdGlmaWNhdGlvbiByZWdpc3RlciBmYWlsZWRcbiIpOwogCiAJc2V0dXBfdGltZXIoJm11c2JfaWRsZV90aW1lciwgbXVzYl9kb19pZGxlLCAodW5zaWduZWQgbG9uZykgbXVzYik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvdHVzYjYwMTAuYyBiL2RyaXZlcnMvdXNiL211c2IvdHVzYjYwMTAuYwppbmRleCBjNDdhYWM0Li5iNDEwMzU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL3R1c2I2MDEwLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi90dXNiNjAxMC5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIAkJdG1wID0gcGh5X290Z19lbmEgJiB+V0JVU19RVUlSS19NQVNLOwogCQl0bXAgfD0gVFVTQl9QSFlfT1RHX0NUUkxfV1JQUk9URUNUIHwgVFVTQl9QSFlfT1RHX0NUUkxfVEVTVE0yOwogCQltdXNiX3dyaXRlbCh0YmFzZSwgVFVTQl9QSFlfT1RHX0NUUkxfRU5BQkxFLCB0bXApOwotCQlEQkcoMiwgIkVuYWJsZWQgdHVzYiB3YnVzIHF1aXJrIGN0cmwgJTA4eCBlbmEgJTA4eFxuIiwKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiRW5hYmxlZCB0dXNiIHdidXMgcXVpcmsgY3RybCAlMDh4IGVuYSAlMDh4XG4iLAogCQkJbXVzYl9yZWFkbCh0YmFzZSwgVFVTQl9QSFlfT1RHX0NUUkwpLAogCQkJbXVzYl9yZWFkbCh0YmFzZSwgVFVTQl9QSFlfT1RHX0NUUkxfRU5BQkxFKSk7CiAJfSBlbHNlIGlmIChtdXNiX3JlYWRsKHRiYXNlLCBUVVNCX1BIWV9PVEdfQ1RSTF9FTkFCTEUpCkBAIC0xMTUsNyArMTE1LDcgQEAKIAkJbXVzYl93cml0ZWwodGJhc2UsIFRVU0JfUEhZX09UR19DVFJMLCB0bXApOwogCQl0bXAgPSBUVVNCX1BIWV9PVEdfQ1RSTF9XUlBST1RFQ1QgfCBwaHlfb3RnX2VuYTsKIAkJbXVzYl93cml0ZWwodGJhc2UsIFRVU0JfUEhZX09UR19DVFJMX0VOQUJMRSwgdG1wKTsKLQkJREJHKDIsICJEaXNhYmxlZCB0dXNiIHdidXMgcXVpcmsgY3RybCAlMDh4IGVuYSAlMDh4XG4iLAorCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJEaXNhYmxlZCB0dXNiIHdidXMgcXVpcmsgY3RybCAlMDh4IGVuYSAlMDh4XG4iLAogCQkJbXVzYl9yZWFkbCh0YmFzZSwgVFVTQl9QSFlfT1RHX0NUUkwpLAogCQkJbXVzYl9yZWFkbCh0YmFzZSwgVFVTQl9QSFlfT1RHX0NUUkxfRU5BQkxFKSk7CiAJCXBoeV9vdGdfY3RybCA9IDA7CkBAIC0xNzIsMTMgKzE3MiwxNCBAQAogCiB2b2lkIG11c2Jfd3JpdGVfZmlmbyhzdHJ1Y3QgbXVzYl9od19lcCAqaHdfZXAsIHUxNiBsZW4sIGNvbnN0IHU4ICpidWYpCiB7CisJc3RydWN0IG11c2IgKm11c2IgPSBod19lcC0+bXVzYjsKIAl2b2lkIF9faW9tZW0JKmVwX2NvbmYgPSBod19lcC0+Y29uZjsKIAl2b2lkIF9faW9tZW0JKmZpZm8gPSBod19lcC0+ZmlmbzsKIAl1OAkJZXBudW0gPSBod19lcC0+ZXBudW07CiAKIAlwcmVmZXRjaChidWYpOwogCi0JREJHKDQsICIlY1ggZXAlZCBmaWZvICVwIGNvdW50ICVkIGJ1ZiAlcFxuIiwKKwlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICIlY1ggZXAlZCBmaWZvICVwIGNvdW50ICVkIGJ1ZiAlcFxuIiwKIAkJCSdUJywgZXBudW0sIGZpZm8sIGxlbiwgYnVmKTsKIAogCWlmIChlcG51bSkKQEAgLTIyMSwxMSArMjIyLDEyIEBACiAKIHZvaWQgbXVzYl9yZWFkX2ZpZm8oc3RydWN0IG11c2JfaHdfZXAgKmh3X2VwLCB1MTYgbGVuLCB1OCAqYnVmKQogeworCXN0cnVjdCBtdXNiICptdXNiID0gaHdfZXAtPm11c2I7CiAJdm9pZCBfX2lvbWVtCSplcF9jb25mID0gaHdfZXAtPmNvbmY7CiAJdm9pZCBfX2lvbWVtCSpmaWZvID0gaHdfZXAtPmZpZm87CiAJdTgJCWVwbnVtID0gaHdfZXAtPmVwbnVtOwogCi0JREJHKDQsICIlY1ggZXAlZCBmaWZvICVwIGNvdW50ICVkIGJ1ZiAlcFxuIiwKKwlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICIlY1ggZXAlZCBmaWZvICVwIGNvdW50ICVkIGJ1ZiAlcFxuIiwKIAkJCSdSJywgZXBudW0sIGZpZm8sIGxlbiwgYnVmKTsKIAogCWlmIChlcG51bSkKQEAgLTMwNCw3ICszMDYsNyBAQAogCX0KIAltdXNiX3dyaXRlbCh0YmFzZSwgVFVTQl9QUkNNX01OR01ULCByZWcpOwogCi0JREJHKDIsICJkcmF3IG1heCAlZCBtQSBWQlVTXG4iLCBtQSk7CisJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiZHJhdyBtYXggJWQgbUEgVkJVU1xuIiwgbUEpOwogCXJldHVybiAwOwogfQogCkBAIC0zNzQsNyArMzc2LDcgQEAKIAlyZWcgfD0gVFVTQl9QUkNNX01OR01UX1BNX0lETEUgfCBUVVNCX1BSQ01fTU5HTVRfREVWX0lETEU7CiAJbXVzYl93cml0ZWwodGJhc2UsIFRVU0JfUFJDTV9NTkdNVCwgcmVnKTsKIAotCURCRyg2LCAiaWRsZSwgd2FrZSBvbiAlMDJ4XG4iLCB3YWtldXBfZW5hYmxlcyk7CisJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiaWRsZSwgd2FrZSBvbiAlMDJ4XG4iLCB3YWtldXBfZW5hYmxlcyk7CiB9CiAKIC8qCkBAIC00MjEsOCArNDIzLDggQEAKIAkJaWYgKChtdXNiLT5hX3dhaXRfYmNvbiAhPSAwKQogCQkJJiYgKG11c2ItPmlkbGVfdGltZW91dCA9PSAwCiAJCQkJfHwgdGltZV9hZnRlcihqaWZmaWVzLCBtdXNiLT5pZGxlX3RpbWVvdXQpKSkgewotCQkJREJHKDQsICJOb3RoaW5nIGNvbm5lY3RlZCAlcywgdHVybmluZyBvZmYgVkJVU1xuIiwKLQkJCQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiKSk7CisJCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJOb3RoaW5nIGNvbm5lY3RlZCAlcywgdHVybmluZyBvZmYgVkJVU1xuIiwKKwkJCQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiLT54Y2Vpdi0+c3RhdGUpKTsKIAkJfQogCQkvKiBGQUxMVEhST1VHSCAqLwogCWNhc2UgT1RHX1NUQVRFX0FfSURMRToKQEAgLTQ4MSw3ICs0ODMsOCBAQAogCS8qIE5ldmVyIGlkbGUgaWYgYWN0aXZlLCBvciB3aGVuIFZCVVMgdGltZW91dCBpcyBub3Qgc2V0IGFzIGhvc3QgKi8KIAlpZiAobXVzYi0+aXNfYWN0aXZlIHx8ICgobXVzYi0+YV93YWl0X2Jjb24gPT0gMCkKIAkJCSYmIChtdXNiLT54Y2Vpdi0+c3RhdGUgPT0gT1RHX1NUQVRFX0FfV0FJVF9CQ09OKSkpIHsKLQkJREJHKDQsICIlcyBhY3RpdmUsIGRlbGV0aW5nIHRpbWVyXG4iLCBvdGdfc3RhdGVfc3RyaW5nKG11c2IpKTsKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiJXMgYWN0aXZlLCBkZWxldGluZyB0aW1lclxuIiwKKwkJCW90Z19zdGF0ZV9zdHJpbmcobXVzYi0+eGNlaXYtPnN0YXRlKSk7CiAJCWRlbF90aW1lcigmbXVzYl9pZGxlX3RpbWVyKTsKIAkJbGFzdF90aW1lciA9IGppZmZpZXM7CiAJCXJldHVybjsKQEAgLTQ5MSwxNCArNDk0LDE0IEBACiAJCWlmICghdGltZXJfcGVuZGluZygmbXVzYl9pZGxlX3RpbWVyKSkKIAkJCWxhc3RfdGltZXIgPSB0aW1lb3V0OwogCQllbHNlIHsKLQkJCURCRyg0LCAiTG9uZ2VyIGlkbGUgdGltZXIgYWxyZWFkeSBwZW5kaW5nLCBpZ25vcmluZ1xuIik7CisJCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJMb25nZXIgaWRsZSB0aW1lciBhbHJlYWR5IHBlbmRpbmcsIGlnbm9yaW5nXG4iKTsKIAkJCXJldHVybjsKIAkJfQogCX0KIAlsYXN0X3RpbWVyID0gdGltZW91dDsKIAotCURCRyg0LCAiJXMgaW5hY3RpdmUsIGZvciBpZGxlIHRpbWVyIGZvciAlbHUgbXNcbiIsCi0JCW90Z19zdGF0ZV9zdHJpbmcobXVzYiksCisJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiJXMgaW5hY3RpdmUsIGZvciBpZGxlIHRpbWVyIGZvciAlbHUgbXNcbiIsCisJCW90Z19zdGF0ZV9zdHJpbmcobXVzYi0+eGNlaXYtPnN0YXRlKSwKIAkJKHVuc2lnbmVkIGxvbmcpamlmZmllc190b19tc2Vjcyh0aW1lb3V0IC0gamlmZmllcykpOwogCW1vZF90aW1lcigmbXVzYl9pZGxlX3RpbWVyLCB0aW1lb3V0KTsKIH0KQEAgLTU3Miw4ICs1NzUsOCBAQAogCW11c2Jfd3JpdGVsKHRiYXNlLCBUVVNCX0RFVl9DT05GLCBjb25mKTsKIAltdXNiX3dyaXRlYihtdXNiLT5tcmVncywgTVVTQl9ERVZDVEwsIGRldmN0bCk7CiAKLQlEQkcoMSwgIlZCVVMgJXMsIGRldmN0bCAlMDJ4IG90ZyAlM3ggY29uZiAlMDh4IHByY20gJTA4eFxuIiwKLQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiKSwKKwlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJWQlVTICVzLCBkZXZjdGwgJTAyeCBvdGcgJTN4IGNvbmYgJTA4eCBwcmNtICUwOHhcbiIsCisJCW90Z19zdGF0ZV9zdHJpbmcobXVzYi0+eGNlaXYtPnN0YXRlKSwKIAkJbXVzYl9yZWFkYihtdXNiLT5tcmVncywgTVVTQl9ERVZDVEwpLAogCQltdXNiX3JlYWRsKHRiYXNlLCBUVVNCX0RFVl9PVEdfU1RBVCksCiAJCWNvbmYsIHByY20pOwpAQCAtNjMzLDcgKzYzNiw3IEBACiAjZW5kaWYKIAogCWRlZmF1bHQ6Ci0JCURCRygyLCAiVHJ5aW5nIHRvIHNldCBtb2RlICVpXG4iLCBtdXNiX21vZGUpOworCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJUcnlpbmcgdG8gc2V0IG1vZGUgJWlcbiIsIG11c2JfbW9kZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNjY2LDcgKzY2OSw3IEBACiAJCQlkZWZhdWx0X2EgPSAhKG90Z19zdGF0ICYgVFVTQl9ERVZfT1RHX1NUQVRfSURfU1RBVFVTKTsKIAkJZWxzZQogCQkJZGVmYXVsdF9hID0gaXNfaG9zdF9lbmFibGVkKG11c2IpOwotCQlEQkcoMiwgIkRlZmF1bHQtJWNcbiIsIGRlZmF1bHRfYSA/ICdBJyA6ICdCJyk7CisJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIkRlZmF1bHQtJWNcbiIsIGRlZmF1bHRfYSA/ICdBJyA6ICdCJyk7CiAJCW11c2ItPnhjZWl2LT5kZWZhdWx0X2EgPSBkZWZhdWx0X2E7CiAJCXR1c2JfbXVzYl9zZXRfdmJ1cyhtdXNiLCBkZWZhdWx0X2EpOwogCkBAIC02OTMsNyArNjk2LDcgQEAKICNlbmRpZgogCiAJCQlpZiAob3RnX3N0YXQgJiBUVVNCX0RFVl9PVEdfU1RBVF9TRVNTX0VORCkgewotCQkJCURCRygxLCAiRm9yY2luZyBkaXNjb25uZWN0IChubyBpbnRlcnJ1cHQpXG4iKTsKKwkJCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJGb3JjaW5nIGRpc2Nvbm5lY3QgKG5vIGludGVycnVwdClcbiIpOwogCQkJCWlmIChtdXNiLT54Y2Vpdi0+c3RhdGUgIT0gT1RHX1NUQVRFX0JfSURMRSkgewogCQkJCQkvKiBJTlRSX0RJU0NPTk5FQ1QgY2FuIGhpZGUuLi4gKi8KIAkJCQkJbXVzYi0+eGNlaXYtPnN0YXRlID0gT1RHX1NUQVRFX0JfSURMRTsKQEAgLTcwMSwxOCArNzA0LDE4IEBACiAJCQkJfQogCQkJCW11c2ItPmlzX2FjdGl2ZSA9IDA7CiAJCQl9Ci0JCQlEQkcoMiwgInZidXMgY2hhbmdlLCAlcywgb3RnICUwM3hcbiIsCi0JCQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiKSwgb3RnX3N0YXQpOworCQkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAidmJ1cyBjaGFuZ2UsICVzLCBvdGcgJTAzeFxuIiwKKwkJCQlvdGdfc3RhdGVfc3RyaW5nKG11c2ItPnhjZWl2LT5zdGF0ZSksIG90Z19zdGF0KTsKIAkJCWlkbGVfdGltZW91dCA9IGppZmZpZXMgKyAoMSAqIEhaKTsKIAkJCXNjaGVkdWxlX3dvcmsoJm11c2ItPmlycV93b3JrKTsKIAogCQl9IGVsc2UgLyogQS1kZXYgc3RhdGUgbWFjaGluZSAqLyB7Ci0JCQlEQkcoMiwgInZidXMgY2hhbmdlLCAlcywgb3RnICUwM3hcbiIsCi0JCQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiKSwgb3RnX3N0YXQpOworCQkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAidmJ1cyBjaGFuZ2UsICVzLCBvdGcgJTAzeFxuIiwKKwkJCQlvdGdfc3RhdGVfc3RyaW5nKG11c2ItPnhjZWl2LT5zdGF0ZSksIG90Z19zdGF0KTsKIAogCQkJc3dpdGNoIChtdXNiLT54Y2Vpdi0+c3RhdGUpIHsKIAkJCWNhc2UgT1RHX1NUQVRFX0FfSURMRToKLQkJCQlEQkcoMiwgIkdvdCBTUlAsIHR1cm5pbmcgb24gVkJVU1xuIik7CisJCQkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiR290IFNSUCwgdHVybmluZyBvbiBWQlVTXG4iKTsKIAkJCQltdXNiX3BsYXRmb3JtX3NldF92YnVzKG11c2IsIDEpOwogCiAJCQkJLyogQ09OTkVDVCBjYW4gd2FrZSBpZiBhX3dhaXRfYmNvbiBpcyBzZXQgKi8KQEAgLTc1Niw3ICs3NTksOCBAQAogCWlmIChpbnRfc3JjICYgVFVTQl9JTlRfU1JDX09UR19USU1FT1VUKSB7CiAJCXU4CWRldmN0bDsKIAotCQlEQkcoNCwgIiVzIHRpbWVyLCAlMDN4XG4iLCBvdGdfc3RhdGVfc3RyaW5nKG11c2IpLCBvdGdfc3RhdCk7CisJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIiVzIHRpbWVyLCAlMDN4XG4iLAorCQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiLT54Y2Vpdi0+c3RhdGUpLCBvdGdfc3RhdCk7CiAKIAkJc3dpdGNoIChtdXNiLT54Y2Vpdi0+c3RhdGUpIHsKIAkJY2FzZSBPVEdfU1RBVEVfQV9XQUlUX1ZSSVNFOgpAQCAtNzY3LDcgKzc3MSw3IEBACiAJCQlpZiAob3RnX3N0YXQgJiBUVVNCX0RFVl9PVEdfU1RBVF9WQlVTX1ZBTElEKSB7CiAJCQkJaWYgKChkZXZjdGwgJiBNVVNCX0RFVkNUTF9WQlVTKQogCQkJCQkJIT0gTVVTQl9ERVZDVExfVkJVUykgewotCQkJCQlEQkcoMiwgImRldmN0bCAlMDJ4XG4iLCBkZXZjdGwpOworCQkJCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJkZXZjdGwgJTAyeFxuIiwgZGV2Y3RsKTsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJCW11c2ItPnhjZWl2LT5zdGF0ZSA9IE9UR19TVEFURV9BX1dBSVRfQkNPTjsKQEAgLTgxMiw3ICs4MTYsNyBAQAogCW11c2Jfd3JpdGVsKHRiYXNlLCBUVVNCX0lOVF9NQVNLLCB+VFVTQl9JTlRfTUFTS19SRVNFUlZFRF9CSVRTKTsKIAogCWludF9zcmMgPSBtdXNiX3JlYWRsKHRiYXNlLCBUVVNCX0lOVF9TUkMpICYgflRVU0JfSU5UX1NSQ19SRVNFUlZFRF9CSVRTOwotCURCRygzLCAiVFVTQiBJUlEgJTA4eFxuIiwgaW50X3NyYyk7CisJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiVFVTQiBJUlEgJTA4eFxuIiwgaW50X3NyYyk7CiAKIAltdXNiLT5pbnRfdXNiID0gKHU4KSBpbnRfc3JjOwogCkBAIC04MzMsNyArODM3LDcgQEAKIAkJCXJlZyA9IG11c2JfcmVhZGwodGJhc2UsIFRVU0JfU0NSQVRDSF9QQUQpOwogCQkJaWYgKHJlZyA9PSBpKQogCQkJCWJyZWFrOwotCQkJREJHKDYsICJUVVNCIE5PUiBub3QgcmVhZHlcbiIpOworCQkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiVFVTQiBOT1Igbm90IHJlYWR5XG4iKTsKIAkJfQogCiAJCS8qIHdvcmsgYXJvdW5kIGlzc3VlIDEzICgybmQgaGFsZikgKi8KQEAgLTg0NSw3ICs4NDksNyBAQAogCQkJbXVzYi0+aXNfYWN0aXZlID0gMTsKIAkJCXNjaGVkdWxlX3dvcmsoJm11c2ItPmlycV93b3JrKTsKIAkJfQotCQlEQkcoMywgIndha2UgJXNhY3RpdmUgJTAyeFxuIiwKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAid2FrZSAlc2FjdGl2ZSAlMDJ4XG4iLAogCQkJCW11c2ItPmlzX2FjdGl2ZSA/ICIiIDogImluIiwgcmVnKTsKIAogCQkvKiBSRVZJU0lUIGhvc3Qgc2lkZSBUVVNCX1BSQ01fV0hPU1RESVNDT04sIFRVU0JfUFJDTV9XQlVTICovCkBAIC04NjcsNyArODcxLDcgQEAKIAkJdTMyCWRtYV9zcmMgPSBtdXNiX3JlYWRsKHRiYXNlLCBUVVNCX0RNQV9JTlRfU1JDKTsKIAkJdTMyCXJlYWxfZG1hX3NyYyA9IG11c2JfcmVhZGwodGJhc2UsIFRVU0JfRE1BX0lOVF9NQVNLKTsKIAotCQlEQkcoMywgIkRNQSBJUlEgJTA4eFxuIiwgZG1hX3NyYyk7CisJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIkRNQSBJUlEgJTA4eFxuIiwgZG1hX3NyYyk7CiAJCXJlYWxfZG1hX3NyYyA9IH5yZWFsX2RtYV9zcmMgJiBkbWFfc3JjOwogCQlpZiAodHVzYl9kbWFfb21hcCgpICYmIHJlYWxfZG1hX3NyYykgewogCQkJaW50CXR4X3NvdXJjZSA9IChyZWFsX2RtYV9zcmMgJiAweGZmZmYpOwpAQCAtODc1LDcgKzg3OSw3IEBACiAKIAkJCWZvciAoaSA9IDE7IGkgPD0gMTU7IGkrKykgewogCQkJCWlmICh0eF9zb3VyY2UgJiAoMSA8PCBpKSkgewotCQkJCQlEQkcoMywgImNvbXBsZXRpbmcgZXAlaSAlc1xuIiwgaSwgInR4Iik7CisJCQkJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgImNvbXBsZXRpbmcgZXAlaSAlc1xuIiwgaSwgInR4Iik7CiAJCQkJCW11c2JfZG1hX2NvbXBsZXRpb24obXVzYiwgaSwgMSk7CiAJCQkJfQogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi90dXNiNjAxMF9vbWFwLmMgYi9kcml2ZXJzL3VzYi9tdXNiL3R1c2I2MDEwX29tYXAuYwppbmRleCA5OWNiNTQxLi5jNzg0ZTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL3R1c2I2MDEwX29tYXAuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL3R1c2I2MDEwX29tYXAuYwpAQCAtNjUsNyArNjUsNyBAQAogCiAJdHVzYl9kbWEgPSBjb250YWluZXJfb2YoYywgc3RydWN0IHR1c2Jfb21hcF9kbWEsIGNvbnRyb2xsZXIpOwogCi0JLyogREJHKDMsICJlcCVpIGNoOiAlaVxuIiwgY2hkYXQtPmVwbnVtLCBjaGRhdC0+Y2gpOyAqLworCS8qIGRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgImVwJWkgY2g6ICVpXG4iLCBjaGRhdC0+ZXBudW0sIGNoZGF0LT5jaCk7ICovCiAKIAlyZXR1cm4gMDsKIH0KQEAgLTc2LDcgKzc2LDcgQEAKIAogCXR1c2JfZG1hID0gY29udGFpbmVyX29mKGMsIHN0cnVjdCB0dXNiX29tYXBfZG1hLCBjb250cm9sbGVyKTsKIAotCS8qIERCRygzLCAiZXAlaSBjaDogJWlcbiIsIGNoZGF0LT5lcG51bSwgY2hkYXQtPmNoKTsgKi8KKwkvKiBkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJlcCVpIGNoOiAlaVxuIiwgY2hkYXQtPmVwbnVtLCBjaGRhdC0+Y2gpOyAqLwogCiAJcmV0dXJuIDA7CiB9CkBAIC04OSw3ICs4OSw3IEBACiAJdTMyCQlyZWcgPSBtdXNiX3JlYWRsKGNoZGF0LT50YmFzZSwgVFVTQl9ETUFfRVBfTUFQKTsKIAogCWlmIChyZWcgIT0gMCkgewotCQlEQkcoMywgImVwJWkgZG1hcmVxMCBpcyBidXN5IGZvciBlcCVpXG4iLAorCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJlcCVpIGRtYXJlcTAgaXMgYnVzeSBmb3IgZXAlaVxuIiwKIAkJCWNoZGF0LT5lcG51bSwgcmVnICYgMHhmKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQpAQCAtMTQzLDcgKzE0Myw3IEBACiAJaWYgKGNoX3N0YXR1cyAhPSBPTUFQX0RNQV9CTE9DS19JUlEpCiAJCXByaW50ayhLRVJOX0VSUiAiVFVTQiBETUEgZXJyb3Igc3RhdHVzOiAlaVxuIiwgY2hfc3RhdHVzKTsKIAotCURCRygzLCAiZXAlaSAlcyBkbWEgY2FsbGJhY2sgY2g6ICVpIHN0YXR1czogJXhcbiIsCisJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiZXAlaSAlcyBkbWEgY2FsbGJhY2sgY2g6ICVpIHN0YXR1czogJXhcbiIsCiAJCWNoZGF0LT5lcG51bSwgY2hkYXQtPnR4ID8gInR4IiA6ICJyeCIsCiAJCWNoLCBjaF9zdGF0dXMpOwogCkBAIC0xNTYsNyArMTU2LDcgQEAKIAogCS8qIEhXIGlzc3VlICMxMDogWEZSX1NJWkUgbWF5IGdldCBjb3JydXB0IG9uIERNQSAoYm90aCBhc3luYyAmIHN5bmMpICovCiAJaWYgKHVubGlrZWx5KHJlbWFpbmluZyA+IGNoZGF0LT50cmFuc2Zlcl9sZW4pKSB7Ci0JCURCRygyLCAiQ29ycnVwdCAlcyBkbWEgY2glaSBYRlJfU0laRTogMHglMDhseFxuIiwKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiQ29ycnVwdCAlcyBkbWEgY2glaSBYRlJfU0laRTogMHglMDhseFxuIiwKIAkJCWNoZGF0LT50eCA/ICJ0eCIgOiAicngiLCBjaGRhdC0+Y2gsCiAJCQlyZW1haW5pbmcpOwogCQlyZW1haW5pbmcgPSAwOwpAQCAtMTY1LDEzICsxNjUsMTMgQEAKIAljaGFubmVsLT5hY3R1YWxfbGVuID0gY2hkYXQtPnRyYW5zZmVyX2xlbiAtIHJlbWFpbmluZzsKIAlwaW8gPSBjaGRhdC0+bGVuIC0gY2hhbm5lbC0+YWN0dWFsX2xlbjsKIAotCURCRygzLCAiRE1BIHJlbWFpbmluZyAlbHUvJXVcbiIsIHJlbWFpbmluZywgY2hkYXQtPnRyYW5zZmVyX2xlbik7CisJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiRE1BIHJlbWFpbmluZyAlbHUvJXVcbiIsIHJlbWFpbmluZywgY2hkYXQtPnRyYW5zZmVyX2xlbik7CiAKIAkvKiBUcmFuc2ZlciByZW1haW5pbmcgMSAtIDMxIGJ5dGVzICovCiAJaWYgKHBpbyA+IDAgJiYgcGlvIDwgMzIpIHsKIAkJdTgJKmJ1ZjsKIAotCQlEQkcoMywgIlVzaW5nIFBJTyBmb3IgcmVtYWluaW5nICVsdSBieXRlc1xuIiwgcGlvKTsKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiVXNpbmcgUElPIGZvciByZW1haW5pbmcgJWx1IGJ5dGVzXG4iLCBwaW8pOwogCQlidWYgPSBwaHlzX3RvX3ZpcnQoKHUzMiljaGRhdC0+ZG1hX2FkZHIpICsgY2hkYXQtPnRyYW5zZmVyX2xlbjsKIAkJaWYgKGNoZGF0LT50eCkgewogCQkJZG1hX3VubWFwX3NpbmdsZShkZXYsIGNoZGF0LT5kbWFfYWRkciwKQEAgLTIwOSw3ICsyMDksNyBAQAogCQl1MTYJY3NyOwogCiAJCWlmIChjaGRhdC0+dHgpIHsKLQkJCURCRygzLCAidGVybWluYXRpbmcgc2hvcnQgdHggcGFja2V0XG4iKTsKKwkJCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgInRlcm1pbmF0aW5nIHNob3J0IHR4IHBhY2tldFxuIik7CiAJCQltdXNiX2VwX3NlbGVjdChtYmFzZSwgY2hkYXQtPmVwbnVtKTsKIAkJCWNzciA9IG11c2JfcmVhZHcoaHdfZXAtPnJlZ3MsIE1VU0JfVFhDU1IpOwogCQkJY3NyIHw9IE1VU0JfVFhDU1JfTU9ERSB8IE1VU0JfVFhDU1JfVFhQS1RSRFkKQEAgLTI2NCw3ICsyNjQsNyBAQAogCiAJZG1hX3JlbWFpbmluZyA9IFRVU0JfRVBfQ09ORklHX1hGUl9TSVpFKGRtYV9yZW1haW5pbmcpOwogCWlmIChkbWFfcmVtYWluaW5nKSB7Ci0JCURCRygyLCAiQnVzeSAlcyBkbWEgY2glaSwgbm90IHVzaW5nOiAlMDh4XG4iLAorCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJCdXN5ICVzIGRtYSBjaCVpLCBub3QgdXNpbmc6ICUwOHhcbiIsCiAJCQljaGRhdC0+dHggPyAidHgiIDogInJ4IiwgY2hkYXQtPmNoLAogCQkJZG1hX3JlbWFpbmluZyk7CiAJCXJldHVybiBmYWxzZTsKQEAgLTI4Myw3ICsyODMsNyBAQAogCQlzeW5jX2RldiA9IGNoZGF0LT5zeW5jX2RldjsKIAl9IGVsc2UgewogCQlpZiAodHVzYl9vbWFwX3VzZV9zaGFyZWRfZG1hcmVxKGNoZGF0KSAhPSAwKSB7Ci0JCQlEQkcoMywgImNvdWxkIG5vdCBnZXQgZG1hIGZvciBlcCVpXG4iLCBjaGRhdC0+ZXBudW0pOworCQkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiY291bGQgbm90IGdldCBkbWEgZm9yIGVwJWlcbiIsIGNoZGF0LT5lcG51bSk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAkJaWYgKHR1c2JfZG1hLT5jaCA8IDApIHsKQEAgLTMyNiw3ICszMjYsNyBAQAogCiAJZG1hX3BhcmFtcy5mcmFtZV9jb3VudAk9IGNoZGF0LT50cmFuc2Zlcl9sZW4gLyAzMjsgLyogQnVyc3Qgc3ogZnJhbWUgKi8KIAotCURCRygzLCAiZXAlaSAlcyBkbWEgY2glaSBkbWE6ICUwOHggbGVuOiAldSgldSkgcGFja2V0X3N6OiAlaSglaSlcbiIsCisJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiZXAlaSAlcyBkbWEgY2glaSBkbWE6ICUwOHggbGVuOiAldSgldSkgcGFja2V0X3N6OiAlaSglaSlcbiIsCiAJCWNoZGF0LT5lcG51bSwgY2hkYXQtPnR4ID8gInR4IiA6ICJyeCIsCiAJCWNoLCBkbWFfYWRkciwgY2hkYXQtPnRyYW5zZmVyX2xlbiwgbGVuLAogCQljaGRhdC0+dHJhbnNmZXJfcGFja2V0X3N6LCBwYWNrZXRfc3opOwpAQCAtMzcwLDcgKzM3MCw3IEBACiAJCWRzdF9idXJzdCA9IE9NQVBfRE1BX0RBVEFfQlVSU1RfMTY7CS8qIDE2eDMyIHdyaXRlICovCiAJfQogCi0JREJHKDMsICJlcCVpICVzIHVzaW5nICVpLWJpdCAlcyBkbWEgZnJvbSAweCUwOGx4IHRvIDB4JTA4bHhcbiIsCisJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiZXAlaSAlcyB1c2luZyAlaS1iaXQgJXMgZG1hIGZyb20gMHglMDhseCB0byAweCUwOGx4XG4iLAogCQljaGRhdC0+ZXBudW0sIGNoZGF0LT50eCA/ICJ0eCIgOiAicngiLAogCQkoZG1hX3BhcmFtcy5kYXRhX3R5cGUgPT0gT01BUF9ETUFfREFUQV9UWVBFX1MzMikgPyAzMiA6IDE2LAogCQkoKGRtYV9hZGRyICYgMHgzKSA9PSAwKSA/ICJzeW5jIiA6ICJhc3luYyIsCkBAIC01MjUsNyArNTI1LDcgQEAKIAogCS8qIFJFVklTSVQ6IFdoeSBkb2VzIGRtYXJlcTUgbm90IHdvcms/ICovCiAJaWYgKGh3X2VwLT5lcG51bSA9PSAwKSB7Ci0JCURCRygzLCAiTm90IGFsbG93aW5nIERNQSBmb3IgZXAwICVzXG4iLCB0eCA/ICJ0eCIgOiAicngiKTsKKwkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiTm90IGFsbG93aW5nIERNQSBmb3IgZXAwICVzXG4iLCB0eCA/ICJ0eCIgOiAicngiKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC01ODUsNyArNTg1LDcgQEAKIAkJY2hkYXQtPmNoID0gLTE7CiAJfQogCi0JREJHKDMsICJlcCVpICVzIGRtYTogJXMgZG1hJWkgZG1hcmVxJWkgc3luYyVpXG4iLAorCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgImVwJWkgJXMgZG1hOiAlcyBkbWElaSBkbWFyZXElaSBzeW5jJWlcbiIsCiAJCWNoZGF0LT5lcG51bSwKIAkJY2hkYXQtPnR4ID8gInR4IiA6ICJyeCIsCiAJCWNoZGF0LT5jaCA+PSAwID8gImRlZGljYXRlZCIgOiAic2hhcmVkIiwKQEAgLTU5OCw3ICs1OTgsNyBAQAogZnJlZV9kbWFyZXE6CiAJdHVzYl9vbWFwX2RtYV9mcmVlX2RtYXJlcShjaGRhdCk7CiAKLQlEQkcoMywgImVwJWk6IENvdWxkIG5vdCBnZXQgYSBETUEgY2hhbm5lbFxuIiwgY2hkYXQtPmVwbnVtKTsKKwlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJlcCVpOiBDb3VsZCBub3QgZ2V0IGEgRE1BIGNoYW5uZWxcbiIsIGNoZGF0LT5lcG51bSk7CiAJY2hhbm5lbC0+c3RhdHVzID0gTVVTQl9ETUFfU1RBVFVTX1VOS05PV047CiAKIAlyZXR1cm4gTlVMTDsKQEAgLTYxMSw3ICs2MTEsNyBAQAogCXZvaWQgX19pb21lbQkJKnRiYXNlID0gbXVzYi0+Y3RybF9iYXNlOwogCXUzMgkJCXJlZzsKIAotCURCRygzLCAiZXAlaSBjaCVpXG4iLCBjaGRhdC0+ZXBudW0sIGNoZGF0LT5jaCk7CisJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiZXAlaSBjaCVpXG4iLCBjaGRhdC0+ZXBudW0sIGNoZGF0LT5jaCk7CiAKIAlyZWcgPSBtdXNiX3JlYWRsKHRiYXNlLCBUVVNCX0RNQV9JTlRfTUFTSyk7CiAJaWYgKGNoZGF0LT50eCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvdXg1MDBfZG1hLmMgYi9kcml2ZXJzL3VzYi9tdXNiL3V4NTAwX2RtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlY2FjZTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tdXNiL3V4NTAwX2RtYS5jCkBAIC0wLDAgKzEsNDIyIEBACisvKgorICogZHJpdmVycy91c2IvbXVzYi91eDUwMF9kbWEuYworICoKKyAqIFU4NTAwIGFuZCBVNTUwMCBETUEgc3VwcG9ydCBjb2RlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFNUTWljcm9lbGVjdHJvbmljcworICogQ29weXJpZ2h0IChDKSAyMDExIFNULUVyaWNzc29uIFNBCisgKiBBdXRob3JzOgorICoJTWlhbiBZb3VzYWYgS2F1a2FiIDxtaWFuLnlvdXNhZi5rYXVrYWJAc3Rlcmljc3Nvbi5jb20+CisgKglQcmF2ZWVuYSBOYWRhaGFsbHkgPHByYXZlZW4ubmFkYWhhbGx5QHN0ZXJpY3Nzb24uY29tPgorICoJUmFqYXJhbSBSZWd1cGF0aHkgPHJhZ3VwYXRoeS5yYWphcmFtQHN0ZXJpY3Nzb24uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CisjaW5jbHVkZSA8bGludXgvcGZuLmg+CisjaW5jbHVkZSA8bWFjaC91c2IuaD4KKyNpbmNsdWRlICJtdXNiX2NvcmUuaCIKKworc3RydWN0IHV4NTAwX2RtYV9jaGFubmVsIHsKKwlzdHJ1Y3QgZG1hX2NoYW5uZWwgY2hhbm5lbDsKKwlzdHJ1Y3QgdXg1MDBfZG1hX2NvbnRyb2xsZXIgKmNvbnRyb2xsZXI7CisJc3RydWN0IG11c2JfaHdfZXAgKmh3X2VwOworCXN0cnVjdCB3b3JrX3N0cnVjdCBjaGFubmVsX3dvcms7CisJc3RydWN0IGRtYV9jaGFuICpkbWFfY2hhbjsKKwl1bnNpZ25lZCBpbnQgY3VyX2xlbjsKKwlkbWFfY29va2llX3QgY29va2llOworCXU4IGNoX251bTsKKwl1OCBpc190eDsKKwl1OCBpc19hbGxvY2F0ZWQ7Cit9OworCitzdHJ1Y3QgdXg1MDBfZG1hX2NvbnRyb2xsZXIgeworCXN0cnVjdCBkbWFfY29udHJvbGxlciBjb250cm9sbGVyOworCXN0cnVjdCB1eDUwMF9kbWFfY2hhbm5lbCByeF9jaGFubmVsW1VYNTAwX01VU0JfRE1BX05VTV9SWF9DSEFOTkVMU107CisJc3RydWN0IHV4NTAwX2RtYV9jaGFubmVsIHR4X2NoYW5uZWxbVVg1MDBfTVVTQl9ETUFfTlVNX1RYX0NIQU5ORUxTXTsKKwl1MzIJbnVtX3J4X2NoYW5uZWxzOworCXUzMgludW1fdHhfY2hhbm5lbHM7CisJdm9pZCAqcHJpdmF0ZV9kYXRhOworCWRtYV9hZGRyX3QgcGh5X2Jhc2U7Cit9OworCisvKiBXb3JrIGZ1bmN0aW9uIGludm9rZWQgZnJvbSBETUEgY2FsbGJhY2sgdG8gaGFuZGxlIHR4IHRyYW5zZmVycy4gKi8KK3N0YXRpYyB2b2lkIHV4NTAwX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQoreworCXN0cnVjdCB1eDUwMF9kbWFfY2hhbm5lbCAqdXg1MDBfY2hhbm5lbCA9IGNvbnRhaW5lcl9vZihkYXRhLAorCQlzdHJ1Y3QgdXg1MDBfZG1hX2NoYW5uZWwsIGNoYW5uZWxfd29yayk7CisJc3RydWN0IG11c2JfaHdfZXAgICAgICAgKmh3X2VwID0gdXg1MDBfY2hhbm5lbC0+aHdfZXA7CisJc3RydWN0IG11c2IgKm11c2IgPSBod19lcC0+bXVzYjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJREJHKDQsICJETUEgdHggdHJhbnNmZXIgZG9uZSBvbiBod19lcD0lZFxuIiwgaHdfZXAtPmVwbnVtKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtdXNiLT5sb2NrLCBmbGFncyk7CisJdXg1MDBfY2hhbm5lbC0+Y2hhbm5lbC5hY3R1YWxfbGVuID0gdXg1MDBfY2hhbm5lbC0+Y3VyX2xlbjsKKwl1eDUwMF9jaGFubmVsLT5jaGFubmVsLnN0YXR1cyA9IE1VU0JfRE1BX1NUQVRVU19GUkVFOworCW11c2JfZG1hX2NvbXBsZXRpb24obXVzYiwgaHdfZXAtPmVwbnVtLAorCQkJCXV4NTAwX2NoYW5uZWwtPmlzX3R4KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdXNiLT5sb2NrLCBmbGFncyk7Cit9CisKKy8qIFdvcmsgZnVuY3Rpb24gaW52b2tlZCBmcm9tIERNQSBjYWxsYmFjayB0byBoYW5kbGUgcnggdHJhbnNmZXJzLiAqLworc3RhdGljIHZvaWQgdXg1MDBfcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCit7CisJc3RydWN0IHV4NTAwX2RtYV9jaGFubmVsICp1eDUwMF9jaGFubmVsID0gY29udGFpbmVyX29mKGRhdGEsCisJCXN0cnVjdCB1eDUwMF9kbWFfY2hhbm5lbCwgY2hhbm5lbF93b3JrKTsKKwlzdHJ1Y3QgbXVzYl9od19lcCAgICAgICAqaHdfZXAgPSB1eDUwMF9jaGFubmVsLT5od19lcDsKKwlzdHJ1Y3QgbXVzYiAqbXVzYiA9IGh3X2VwLT5tdXNiOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlEQkcoNCwgIkRNQSByeCB0cmFuc2ZlciBkb25lIG9uIGh3X2VwPSVkXG4iLCBod19lcC0+ZXBudW0pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm11c2ItPmxvY2ssIGZsYWdzKTsKKwl1eDUwMF9jaGFubmVsLT5jaGFubmVsLmFjdHVhbF9sZW4gPSB1eDUwMF9jaGFubmVsLT5jdXJfbGVuOworCXV4NTAwX2NoYW5uZWwtPmNoYW5uZWwuc3RhdHVzID0gTVVTQl9ETUFfU1RBVFVTX0ZSRUU7CisJbXVzYl9kbWFfY29tcGxldGlvbihtdXNiLCBod19lcC0+ZXBudW0sCisJCXV4NTAwX2NoYW5uZWwtPmlzX3R4KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdXNiLT5sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgdXg1MDBfZG1hX2NhbGxiYWNrKHZvaWQgKnByaXZhdGVfZGF0YSkKK3sKKwlzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW5uZWwgPSAoc3RydWN0IGRtYV9jaGFubmVsICopcHJpdmF0ZV9kYXRhOworCXN0cnVjdCB1eDUwMF9kbWFfY2hhbm5lbCAqdXg1MDBfY2hhbm5lbCA9IGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKworCXNjaGVkdWxlX3dvcmsoJnV4NTAwX2NoYW5uZWwtPmNoYW5uZWxfd29yayk7Cit9CisKK3N0YXRpYyBib29sIHV4NTAwX2NvbmZpZ3VyZV9jaGFubmVsKHN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJCQl1MTYgcGFja2V0X3N6LCB1OCBtb2RlLAorCQkJCWRtYV9hZGRyX3QgZG1hX2FkZHIsIHUzMiBsZW4pCit7CisJc3RydWN0IHV4NTAwX2RtYV9jaGFubmVsICp1eDUwMF9jaGFubmVsID0gY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBtdXNiX2h3X2VwICpod19lcCA9IHV4NTAwX2NoYW5uZWwtPmh3X2VwOworCXN0cnVjdCBkbWFfY2hhbiAqZG1hX2NoYW4gPSB1eDUwMF9jaGFubmVsLT5kbWFfY2hhbjsKKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRtYV9kZXNjOworCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CisJc3RydWN0IGRtYV9zbGF2ZV9jb25maWcgc2xhdmVfY29uZjsKKwllbnVtIGRtYV9zbGF2ZV9idXN3aWR0aCBhZGRyX3dpZHRoOworCWRtYV9hZGRyX3QgdXNiX2ZpZm9fYWRkciA9IChNVVNCX0ZJRk9fT0ZGU0VUKGh3X2VwLT5lcG51bSkgKworCQkJCQl1eDUwMF9jaGFubmVsLT5jb250cm9sbGVyLT5waHlfYmFzZSk7CisKKwlEQkcoNCwgInBhY2tldF9zej0lZCwgbW9kZT0lZCwgZG1hX2FkZHI9MHgleCwgbGVuPSVkIGlzX3R4PSVkXG4iLAorCQkJcGFja2V0X3N6LCBtb2RlLCBkbWFfYWRkciwgbGVuLCB1eDUwMF9jaGFubmVsLT5pc190eCk7CisKKwl1eDUwMF9jaGFubmVsLT5jdXJfbGVuID0gbGVuOworCisJc2dfaW5pdF90YWJsZSgmc2csIDEpOworCXNnX3NldF9wYWdlKCZzZywgcGZuX3RvX3BhZ2UoUEZOX0RPV04oZG1hX2FkZHIpKSwgbGVuLAorCQkJCQkgICAgb2Zmc2V0X2luX3BhZ2UoZG1hX2FkZHIpKTsKKwlzZ19kbWFfYWRkcmVzcygmc2cpID0gZG1hX2FkZHI7CisJc2dfZG1hX2xlbigmc2cpID0gbGVuOworCisJZGlyZWN0aW9uID0gdXg1MDBfY2hhbm5lbC0+aXNfdHggPyBETUFfVE9fREVWSUNFIDogRE1BX0ZST01fREVWSUNFOworCWFkZHJfd2lkdGggPSAobGVuICYgMHgzKSA/IERNQV9TTEFWRV9CVVNXSURUSF8xX0JZVEUgOgorCQkJCQlETUFfU0xBVkVfQlVTV0lEVEhfNF9CWVRFUzsKKworCXNsYXZlX2NvbmYuZGlyZWN0aW9uID0gZGlyZWN0aW9uOworCWlmIChkaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKSB7CisJCXNsYXZlX2NvbmYuc3JjX2FkZHIgPSB1c2JfZmlmb19hZGRyOworCQlzbGF2ZV9jb25mLnNyY19hZGRyX3dpZHRoID0gYWRkcl93aWR0aDsKKwkJc2xhdmVfY29uZi5zcmNfbWF4YnVyc3QgPSAxNjsKKwl9IGVsc2UgeworCQlzbGF2ZV9jb25mLmRzdF9hZGRyID0gdXNiX2ZpZm9fYWRkcjsKKwkJc2xhdmVfY29uZi5kc3RfYWRkcl93aWR0aCA9IGFkZHJfd2lkdGg7CisJCXNsYXZlX2NvbmYuZHN0X21heGJ1cnN0ID0gMTY7CisJfQorCWRtYV9jaGFuLT5kZXZpY2UtPmRldmljZV9jb250cm9sKGRtYV9jaGFuLCBETUFfU0xBVkVfQ09ORklHLAorCQkJCQkgICAgICh1bnNpZ25lZCBsb25nKSAmc2xhdmVfY29uZik7CisKKwlkbWFfZGVzYyA9IGRtYV9jaGFuLT5kZXZpY2UtPgorCQkJZGV2aWNlX3ByZXBfc2xhdmVfc2coZG1hX2NoYW4sICZzZywgMSwgZGlyZWN0aW9uLAorCQkJCQkgICAgIERNQV9QUkVQX0lOVEVSUlVQVCB8IERNQV9DVFJMX0FDSyk7CisJaWYgKCFkbWFfZGVzYykKKwkJcmV0dXJuIGZhbHNlOworCisJZG1hX2Rlc2MtPmNhbGxiYWNrID0gdXg1MDBfZG1hX2NhbGxiYWNrOworCWRtYV9kZXNjLT5jYWxsYmFja19wYXJhbSA9IGNoYW5uZWw7CisJdXg1MDBfY2hhbm5lbC0+Y29va2llID0gZG1hX2Rlc2MtPnR4X3N1Ym1pdChkbWFfZGVzYyk7CisKKwlkbWFfYXN5bmNfaXNzdWVfcGVuZGluZyhkbWFfY2hhbik7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHN0cnVjdCBkbWFfY2hhbm5lbCAqdXg1MDBfZG1hX2NoYW5uZWxfYWxsb2NhdGUoc3RydWN0IGRtYV9jb250cm9sbGVyICpjLAorCQkJCXN0cnVjdCBtdXNiX2h3X2VwICpod19lcCwgdTggaXNfdHgpCit7CisJc3RydWN0IHV4NTAwX2RtYV9jb250cm9sbGVyICpjb250cm9sbGVyID0gY29udGFpbmVyX29mKGMsCisJCQlzdHJ1Y3QgdXg1MDBfZG1hX2NvbnRyb2xsZXIsIGNvbnRyb2xsZXIpOworCXN0cnVjdCB1eDUwMF9kbWFfY2hhbm5lbCAqdXg1MDBfY2hhbm5lbCA9IE5VTEw7CisJdTggY2hfbnVtID0gaHdfZXAtPmVwbnVtIC0gMTsKKwl1MzIgbWF4X2NoOworCisJLyogTWF4IDggRE1BIGNoYW5uZWxzICgwIC0gNykuIEVhY2ggRE1BIGNoYW5uZWwgY2FuIG9ubHkgYmUgYWxsb2NhdGVkCisJICogdG8gc3BlY2lmaWVkIGh3X2VwLiBGb3IgZXhhbXBsZSBETUEgY2hhbm5lbCAwIGNhbiBvbmx5IGJlIGFsbG9jYXRlZAorCSAqIHRvIGh3X2VwIDEgYW5kIDkuCisJICovCisJaWYgKGNoX251bSA+IDcpCisJCWNoX251bSAtPSA4OworCisJbWF4X2NoID0gaXNfdHggPyBjb250cm9sbGVyLT5udW1fdHhfY2hhbm5lbHMgOgorCQkJY29udHJvbGxlci0+bnVtX3J4X2NoYW5uZWxzOworCisJaWYgKGNoX251bSA+PSBtYXhfY2gpCisJCXJldHVybiBOVUxMOworCisJdXg1MDBfY2hhbm5lbCA9IGlzX3R4ID8gJihjb250cm9sbGVyLT50eF9jaGFubmVsW2NoX251bV0pIDoKKwkJCQkmKGNvbnRyb2xsZXItPnJ4X2NoYW5uZWxbY2hfbnVtXSkgOworCisJLyogQ2hlY2sgaWYgY2hhbm5lbCBpcyBhbHJlYWR5IHVzZWQuICovCisJaWYgKHV4NTAwX2NoYW5uZWwtPmlzX2FsbG9jYXRlZCkKKwkJcmV0dXJuIE5VTEw7CisKKwl1eDUwMF9jaGFubmVsLT5od19lcCA9IGh3X2VwOworCXV4NTAwX2NoYW5uZWwtPmlzX2FsbG9jYXRlZCA9IDE7CisKKwlEQkcoNywgImh3X2VwPSVkLCBpc190eD0weCV4LCBjaGFubmVsPSVkXG4iLAorCQlod19lcC0+ZXBudW0sIGlzX3R4LCBjaF9udW0pOworCisJcmV0dXJuICYodXg1MDBfY2hhbm5lbC0+Y2hhbm5lbCk7Cit9CisKK3N0YXRpYyB2b2lkIHV4NTAwX2RtYV9jaGFubmVsX3JlbGVhc2Uoc3RydWN0IGRtYV9jaGFubmVsICpjaGFubmVsKQoreworCXN0cnVjdCB1eDUwMF9kbWFfY2hhbm5lbCAqdXg1MDBfY2hhbm5lbCA9IGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKworCURCRyg3LCAiY2hhbm5lbD0lZFxuIiwgdXg1MDBfY2hhbm5lbC0+Y2hfbnVtKTsKKworCWlmICh1eDUwMF9jaGFubmVsLT5pc19hbGxvY2F0ZWQpIHsKKwkJdXg1MDBfY2hhbm5lbC0+aXNfYWxsb2NhdGVkID0gMDsKKwkJY2hhbm5lbC0+c3RhdHVzID0gTVVTQl9ETUFfU1RBVFVTX0ZSRUU7CisJCWNoYW5uZWwtPmFjdHVhbF9sZW4gPSAwOworCX0KK30KKworc3RhdGljIGludCB1eDUwMF9kbWFfaXNfY29tcGF0aWJsZShzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW5uZWwsCisJCXUxNiBtYXhwYWNrZXQsIHZvaWQgKmJ1ZiwgdTMyIGxlbmd0aCkKK3sKKwlpZiAoKG1heHBhY2tldCAmIDB4MykJCXx8CisJCSgoaW50KWJ1ZiAmIDB4MykJfHwKKwkJKGxlbmd0aCA8IDUxMikJCXx8CisJCShsZW5ndGggJiAweDMpKQorCQlyZXR1cm4gZmFsc2U7CisJZWxzZQorCQlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGludCB1eDUwMF9kbWFfY2hhbm5lbF9wcm9ncmFtKHN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJCQl1MTYgcGFja2V0X3N6LCB1OCBtb2RlLAorCQkJCWRtYV9hZGRyX3QgZG1hX2FkZHIsIHUzMiBsZW4pCit7CisJaW50IHJldDsKKworCUJVR19PTihjaGFubmVsLT5zdGF0dXMgPT0gTVVTQl9ETUFfU1RBVFVTX1VOS05PV04gfHwKKwkJY2hhbm5lbC0+c3RhdHVzID09IE1VU0JfRE1BX1NUQVRVU19CVVNZKTsKKworCWlmICghdXg1MDBfZG1hX2lzX2NvbXBhdGlibGUoY2hhbm5lbCwgcGFja2V0X3N6LCAodm9pZCAqKWRtYV9hZGRyLCBsZW4pKQorCQlyZXR1cm4gZmFsc2U7CisKKwljaGFubmVsLT5zdGF0dXMgPSBNVVNCX0RNQV9TVEFUVVNfQlVTWTsKKwljaGFubmVsLT5hY3R1YWxfbGVuID0gMDsKKwlyZXQgPSB1eDUwMF9jb25maWd1cmVfY2hhbm5lbChjaGFubmVsLCBwYWNrZXRfc3osIG1vZGUsIGRtYV9hZGRyLCBsZW4pOworCWlmICghcmV0KQorCQljaGFubmVsLT5zdGF0dXMgPSBNVVNCX0RNQV9TVEFUVVNfRlJFRTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdXg1MDBfZG1hX2NoYW5uZWxfYWJvcnQoc3RydWN0IGRtYV9jaGFubmVsICpjaGFubmVsKQoreworCXN0cnVjdCB1eDUwMF9kbWFfY2hhbm5lbCAqdXg1MDBfY2hhbm5lbCA9IGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdXg1MDBfZG1hX2NvbnRyb2xsZXIgKmNvbnRyb2xsZXIgPSB1eDUwMF9jaGFubmVsLT5jb250cm9sbGVyOworCXN0cnVjdCBtdXNiICptdXNiID0gY29udHJvbGxlci0+cHJpdmF0ZV9kYXRhOworCXZvaWQgX19pb21lbSAqZXBpbyA9IG11c2ItPmVuZHBvaW50c1t1eDUwMF9jaGFubmVsLT5od19lcC0+ZXBudW1dLnJlZ3M7CisJdTE2IGNzcjsKKworCURCRyg0LCAiY2hhbm5lbD0lZCwgaXNfdHg9JWRcbiIsIHV4NTAwX2NoYW5uZWwtPmNoX251bSwKKwkJCQkJCXV4NTAwX2NoYW5uZWwtPmlzX3R4KTsKKworCWlmIChjaGFubmVsLT5zdGF0dXMgPT0gTVVTQl9ETUFfU1RBVFVTX0JVU1kpIHsKKwkJaWYgKHV4NTAwX2NoYW5uZWwtPmlzX3R4KSB7CisJCQljc3IgPSBtdXNiX3JlYWR3KGVwaW8sIE1VU0JfVFhDU1IpOworCQkJY3NyICY9IH4oTVVTQl9UWENTUl9BVVRPU0VUIHwKKwkJCQkgTVVTQl9UWENTUl9ETUFFTkFCIHwKKwkJCQkgTVVTQl9UWENTUl9ETUFNT0RFKTsKKwkJCW11c2Jfd3JpdGV3KGVwaW8sIE1VU0JfVFhDU1IsIGNzcik7CisJCX0gZWxzZSB7CisJCQljc3IgPSBtdXNiX3JlYWR3KGVwaW8sIE1VU0JfUlhDU1IpOworCQkJY3NyICY9IH4oTVVTQl9SWENTUl9BVVRPQ0xFQVIgfAorCQkJCSBNVVNCX1JYQ1NSX0RNQUVOQUIgfAorCQkJCSBNVVNCX1JYQ1NSX0RNQU1PREUpOworCQkJbXVzYl93cml0ZXcoZXBpbywgTVVTQl9SWENTUiwgY3NyKTsKKwkJfQorCisJCXV4NTAwX2NoYW5uZWwtPmRtYV9jaGFuLT5kZXZpY2UtPgorCQkJCWRldmljZV9jb250cm9sKHV4NTAwX2NoYW5uZWwtPmRtYV9jaGFuLAorCQkJCQlETUFfVEVSTUlOQVRFX0FMTCwgMCk7CisJCWNoYW5uZWwtPnN0YXR1cyA9IE1VU0JfRE1BX1NUQVRVU19GUkVFOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1eDUwMF9kbWFfY29udHJvbGxlcl9zdG9wKHN0cnVjdCBkbWFfY29udHJvbGxlciAqYykKK3sKKwlzdHJ1Y3QgdXg1MDBfZG1hX2NvbnRyb2xsZXIgKmNvbnRyb2xsZXIgPSBjb250YWluZXJfb2YoYywKKwkJCXN0cnVjdCB1eDUwMF9kbWFfY29udHJvbGxlciwgY29udHJvbGxlcik7CisJc3RydWN0IHV4NTAwX2RtYV9jaGFubmVsICp1eDUwMF9jaGFubmVsOworCXN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbDsKKwl1OCBjaF9udW07CisKKwlmb3IgKGNoX251bSA9IDA7IGNoX251bSA8IGNvbnRyb2xsZXItPm51bV9yeF9jaGFubmVsczsgY2hfbnVtKyspIHsKKwkJY2hhbm5lbCA9ICZjb250cm9sbGVyLT5yeF9jaGFubmVsW2NoX251bV0uY2hhbm5lbDsKKwkJdXg1MDBfY2hhbm5lbCA9IGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKworCQl1eDUwMF9kbWFfY2hhbm5lbF9yZWxlYXNlKGNoYW5uZWwpOworCisJCWlmICh1eDUwMF9jaGFubmVsLT5kbWFfY2hhbikKKwkJCWRtYV9yZWxlYXNlX2NoYW5uZWwodXg1MDBfY2hhbm5lbC0+ZG1hX2NoYW4pOworCX0KKworCWZvciAoY2hfbnVtID0gMDsgY2hfbnVtIDwgY29udHJvbGxlci0+bnVtX3R4X2NoYW5uZWxzOyBjaF9udW0rKykgeworCQljaGFubmVsID0gJmNvbnRyb2xsZXItPnR4X2NoYW5uZWxbY2hfbnVtXS5jaGFubmVsOworCQl1eDUwMF9jaGFubmVsID0gY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOworCisJCXV4NTAwX2RtYV9jaGFubmVsX3JlbGVhc2UoY2hhbm5lbCk7CisKKwkJaWYgKHV4NTAwX2NoYW5uZWwtPmRtYV9jaGFuKQorCQkJZG1hX3JlbGVhc2VfY2hhbm5lbCh1eDUwMF9jaGFubmVsLT5kbWFfY2hhbik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXg1MDBfZG1hX2NvbnRyb2xsZXJfc3RhcnQoc3RydWN0IGRtYV9jb250cm9sbGVyICpjKQoreworCXN0cnVjdCB1eDUwMF9kbWFfY29udHJvbGxlciAqY29udHJvbGxlciA9IGNvbnRhaW5lcl9vZihjLAorCQkJc3RydWN0IHV4NTAwX2RtYV9jb250cm9sbGVyLCBjb250cm9sbGVyKTsKKwlzdHJ1Y3QgdXg1MDBfZG1hX2NoYW5uZWwgKnV4NTAwX2NoYW5uZWwgPSBOVUxMOworCXN0cnVjdCBtdXNiICptdXNiID0gY29udHJvbGxlci0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IG11c2ItPmNvbnRyb2xsZXI7CisJc3RydWN0IG11c2JfaGRyY19wbGF0Zm9ybV9kYXRhICpwbGF0ID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCB1eDUwMF9tdXNiX2JvYXJkX2RhdGEgKmRhdGEgPSBwbGF0LT5ib2FyZF9kYXRhOworCXN0cnVjdCBkbWFfY2hhbm5lbCAqZG1hX2NoYW5uZWwgPSBOVUxMOworCXUzMiBjaF9udW07CisJdTggZGlyOworCXU4IGlzX3R4ID0gMDsKKworCXZvaWQgKipwYXJhbV9hcnJheTsKKwlzdHJ1Y3QgdXg1MDBfZG1hX2NoYW5uZWwgKmNoYW5uZWxfYXJyYXk7CisJdTMyIGNoX2NvdW50OworCXZvaWQgKCptdXNiX2NoYW5uZWxfd29yaykoc3RydWN0IHdvcmtfc3RydWN0ICopOworCWRtYV9jYXBfbWFza190IG1hc2s7CisKKwlpZiAoKGRhdGEtPm51bV9yeF9jaGFubmVscyA+IFVYNTAwX01VU0JfRE1BX05VTV9SWF9DSEFOTkVMUykgfHwKKwkJKGRhdGEtPm51bV90eF9jaGFubmVscyA+IFVYNTAwX01VU0JfRE1BX05VTV9UWF9DSEFOTkVMUykpCisJCXJldHVybiAtRUlOVkFMOworCisJY29udHJvbGxlci0+bnVtX3J4X2NoYW5uZWxzID0gZGF0YS0+bnVtX3J4X2NoYW5uZWxzOworCWNvbnRyb2xsZXItPm51bV90eF9jaGFubmVscyA9IGRhdGEtPm51bV90eF9jaGFubmVsczsKKworCWRtYV9jYXBfemVybyhtYXNrKTsKKwlkbWFfY2FwX3NldChETUFfU0xBVkUsIG1hc2spOworCisJLyogUHJlcGFyZSB0aGUgbG9vcCBmb3IgUlggY2hhbm5lbHMgKi8KKwljaGFubmVsX2FycmF5ID0gY29udHJvbGxlci0+cnhfY2hhbm5lbDsKKwljaF9jb3VudCA9IGRhdGEtPm51bV9yeF9jaGFubmVsczsKKwlwYXJhbV9hcnJheSA9IGRhdGEtPmRtYV9yeF9wYXJhbV9hcnJheTsKKwltdXNiX2NoYW5uZWxfd29yayA9IHV4NTAwX3J4X3dvcms7CisKKwlmb3IgKGRpciA9IDA7IGRpciA8IDI7IGRpcisrKSB7CisJCWZvciAoY2hfbnVtID0gMDsgY2hfbnVtIDwgY2hfY291bnQ7IGNoX251bSsrKSB7CisJCQl1eDUwMF9jaGFubmVsID0gJmNoYW5uZWxfYXJyYXlbY2hfbnVtXTsKKwkJCXV4NTAwX2NoYW5uZWwtPmNvbnRyb2xsZXIgPSBjb250cm9sbGVyOworCQkJdXg1MDBfY2hhbm5lbC0+Y2hfbnVtID0gY2hfbnVtOworCQkJdXg1MDBfY2hhbm5lbC0+aXNfdHggPSBpc190eDsKKworCQkJZG1hX2NoYW5uZWwgPSAmKHV4NTAwX2NoYW5uZWwtPmNoYW5uZWwpOworCQkJZG1hX2NoYW5uZWwtPnByaXZhdGVfZGF0YSA9IHV4NTAwX2NoYW5uZWw7CisJCQlkbWFfY2hhbm5lbC0+c3RhdHVzID0gTVVTQl9ETUFfU1RBVFVTX0ZSRUU7CisJCQlkbWFfY2hhbm5lbC0+bWF4X2xlbiA9IFNaXzE2TTsKKworCQkJdXg1MDBfY2hhbm5lbC0+ZG1hX2NoYW4gPSBkbWFfcmVxdWVzdF9jaGFubmVsKG1hc2ssCisJCQkJCQkJZGF0YS0+ZG1hX2ZpbHRlciwKKwkJCQkJCQlwYXJhbV9hcnJheVtjaF9udW1dKTsKKwkJCWlmICghdXg1MDBfY2hhbm5lbC0+ZG1hX2NoYW4pIHsKKwkJCQlFUlIoIkRtYSBwaXBlIGFsbG9jYXRpb24gZXJyb3IgZGlyPSVkIGNoPSVkXG4iLAorCQkJCQlkaXIsIGNoX251bSk7CisKKwkJCQkvKiBSZWxlYXNlIGFscmVhZHkgYWxsb2NhdGVkIGNoYW5uZWxzICovCisJCQkJdXg1MDBfZG1hX2NvbnRyb2xsZXJfc3RvcChjKTsKKworCQkJCXJldHVybiAtRUJVU1k7CisJCQl9CisKKwkJCUlOSVRfV09SSygmdXg1MDBfY2hhbm5lbC0+Y2hhbm5lbF93b3JrLAorCQkJCW11c2JfY2hhbm5lbF93b3JrKTsKKwkJfQorCisJCS8qIFByZXBhcmUgdGhlIGxvb3AgZm9yIFRYIGNoYW5uZWxzICovCisJCWNoYW5uZWxfYXJyYXkgPSBjb250cm9sbGVyLT50eF9jaGFubmVsOworCQljaF9jb3VudCA9IGRhdGEtPm51bV90eF9jaGFubmVsczsKKwkJcGFyYW1fYXJyYXkgPSBkYXRhLT5kbWFfdHhfcGFyYW1fYXJyYXk7CisJCW11c2JfY2hhbm5lbF93b3JrID0gdXg1MDBfdHhfd29yazsKKwkJaXNfdHggPSAxOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIGRtYV9jb250cm9sbGVyX2Rlc3Ryb3koc3RydWN0IGRtYV9jb250cm9sbGVyICpjKQoreworCXN0cnVjdCB1eDUwMF9kbWFfY29udHJvbGxlciAqY29udHJvbGxlciA9IGNvbnRhaW5lcl9vZihjLAorCQkJc3RydWN0IHV4NTAwX2RtYV9jb250cm9sbGVyLCBjb250cm9sbGVyKTsKKworCWtmcmVlKGNvbnRyb2xsZXIpOworfQorCitzdHJ1Y3QgZG1hX2NvbnRyb2xsZXIgKl9faW5pdAorZG1hX2NvbnRyb2xsZXJfY3JlYXRlKHN0cnVjdCBtdXNiICptdXNiLCB2b2lkIF9faW9tZW0gKmJhc2UpCit7CisJc3RydWN0IHV4NTAwX2RtYV9jb250cm9sbGVyICpjb250cm9sbGVyOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UobXVzYi0+Y29udHJvbGxlcik7CisJc3RydWN0IHJlc291cmNlCSppb21lbTsKKworCWNvbnRyb2xsZXIgPSBremFsbG9jKHNpemVvZigqY29udHJvbGxlciksIEdGUF9LRVJORUwpOworCWlmICghY29udHJvbGxlcikKKwkJcmV0dXJuIE5VTEw7CisKKwljb250cm9sbGVyLT5wcml2YXRlX2RhdGEgPSBtdXNiOworCisJLyogU2F2ZSBwaHlzaWNhbCBhZGRyZXNzIGZvciBETUEgY29udHJvbGxlci4gKi8KKwlpb21lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJY29udHJvbGxlci0+cGh5X2Jhc2UgPSAoZG1hX2FkZHJfdCkgaW9tZW0tPnN0YXJ0OworCisJY29udHJvbGxlci0+Y29udHJvbGxlci5zdGFydCA9IHV4NTAwX2RtYV9jb250cm9sbGVyX3N0YXJ0OworCWNvbnRyb2xsZXItPmNvbnRyb2xsZXIuc3RvcCA9IHV4NTAwX2RtYV9jb250cm9sbGVyX3N0b3A7CisJY29udHJvbGxlci0+Y29udHJvbGxlci5jaGFubmVsX2FsbG9jID0gdXg1MDBfZG1hX2NoYW5uZWxfYWxsb2NhdGU7CisJY29udHJvbGxlci0+Y29udHJvbGxlci5jaGFubmVsX3JlbGVhc2UgPSB1eDUwMF9kbWFfY2hhbm5lbF9yZWxlYXNlOworCWNvbnRyb2xsZXItPmNvbnRyb2xsZXIuY2hhbm5lbF9wcm9ncmFtID0gdXg1MDBfZG1hX2NoYW5uZWxfcHJvZ3JhbTsKKwljb250cm9sbGVyLT5jb250cm9sbGVyLmNoYW5uZWxfYWJvcnQgPSB1eDUwMF9kbWFfY2hhbm5lbF9hYm9ydDsKKwljb250cm9sbGVyLT5jb250cm9sbGVyLmlzX2NvbXBhdGlibGUgPSB1eDUwMF9kbWFfaXNfY29tcGF0aWJsZTsKKworCXJldHVybiAmY29udHJvbGxlci0+Y29udHJvbGxlcjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL290Zy9LY29uZmlnIGIvZHJpdmVycy91c2Ivb3RnL0tjb25maWcKaW5kZXggZGFmM2U1Zi4uYzY2NDgxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivb3RnL0tjb25maWcKKysrIGIvZHJpdmVycy91c2Ivb3RnL0tjb25maWcKQEAgLTEyMiw0ICsxMjIsMTIgQEAKICAgICAgICAgICBUaGlzIHRyYW5zY2VpdmVyIHN1cHBvcnRzIGhpZ2ggYW5kIGZ1bGwgc3BlZWQgZGV2aWNlcyBwbHVzLAogICAgICAgICAgIGluIGhvc3QgbW9kZSwgbG93IHNwZWVkLgogCitjb25maWcgRlNMX1VTQjJfT1RHCisJYm9vbCAiRnJlZXNjYWxlIFVTQiBPVEcgVHJhbnNjZWl2ZXIgRHJpdmVyIgorCWRlcGVuZHMgb24gVVNCX0VIQ0lfRlNMICYmIFVTQl9HQURHRVRfRlNMX1VTQjIKKwlzZWxlY3QgVVNCX09URworCXNlbGVjdCBVU0JfT1RHX1VUSUxTCisJaGVscAorCSAgRW5hYmxlIHRoaXMgdG8gc3VwcG9ydCBGcmVlc2NhbGUgVVNCIE9URyB0cmFuc2NlaXZlci4KKwogZW5kaWYgIyBVU0IgfHwgT1RHCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9vdGcvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9vdGcvTWFrZWZpbGUKaW5kZXggZTIyZDkxNy4uNTY2NjU1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivb3RnL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL290Zy9NYWtlZmlsZQpAQCAtMTksMyArMTksNSBAQAogb2JqLSQoQ09ORklHX1VTQl9VTFBJX1ZJRVdQT1JUKQkrPSB1bHBpX3ZpZXdwb3J0Lm8KIG9iai0kKENPTkZJR19VU0JfTVNNX09URykJKz0gbXNtX290Zy5vCiBvYmotJChDT05GSUdfQUI4NTAwX1VTQikJKz0gYWI4NTAwLXVzYi5vCitmc2xfdXNiMl9vdGctb2JqcwkJOj0gZnNsX290Zy5vIG90Z19mc20ubworb2JqLSQoQ09ORklHX0ZTTF9VU0IyX09URykJKz0gZnNsX3VzYjJfb3RnLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL290Zy9mc2xfb3RnLmMgYi9kcml2ZXJzL3VzYi9vdGcvZnNsX290Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNDIwYjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9vdGcvZnNsX290Zy5jCkBAIC0wLDAgKzEsMTE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywyMDA4IEZyZWVzY2FsZSBzZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogQXV0aG9yOiBMaSBZYW5nIDxMZW9MaUBmcmVlc2NhbGUuY29tPgorICogICAgICAgICBKZXJyeSBIdWFuZyA8Q2hhbmctTWluZy5IdWFuZ0BmcmVlc2NhbGUuY29tPgorICoKKyAqIEluaXRpYWxpemF0aW9uIGJhc2VkIG9uIGNvZGUgZnJvbSBTaGxvbWkgR3JpZGlzaC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9jaDkuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvZ2FkZ2V0Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzbF9kZXZpY2VzLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorCisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCisjaW5jbHVkZSAiZnNsX290Zy5oIgorCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJSZXYuIDEuNTUiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkplcnJ5IEh1YW5nL0xpIFlhbmciCisjZGVmaW5lIERSSVZFUl9ERVNDICJGcmVlc2NhbGUgVVNCIE9URyBUcmFuc2NlaXZlciBEcml2ZXIiCisjZGVmaW5lIERSSVZFUl9JTkZPIERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTgorCitzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfbmFtZVtdID0gImZzbC11c2IyLW90ZyI7CisKK2NvbnN0IHBtX21lc3NhZ2VfdCBvdGdfc3VzcGVuZF9zdGF0ZSA9IHsKKwkuZXZlbnQgPSAxLAorfTsKKworI2RlZmluZSBIQV9EQVRBX1BVTFNFCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyX21tYXAgKnVzYl9kcl9yZWdzOworc3RhdGljIHN0cnVjdCBmc2xfb3RnICpmc2xfb3RnX2RldjsKK3N0YXRpYyBpbnQgc3JwX3dhaXRfZG9uZTsKKworLyogRlNNIHRpbWVycyAqLworc3RydWN0IGZzbF9vdGdfdGltZXIgKmFfd2FpdF92cmlzZV90bXIsICphX3dhaXRfYmNvbl90bXIsICphX2FpZGxfYmRpc190bXIsCisJKmJfYXNlMF9icnN0X3RtciwgKmJfc2UwX3NycF90bXI7CisKKy8qIERyaXZlciBzcGVjaWZpYyB0aW1lcnMgKi8KK3N0cnVjdCBmc2xfb3RnX3RpbWVyICpiX2RhdGFfcHVsc2VfdG1yLCAqYl92YnVzX3B1bHNlX3RtciwgKmJfc3JwX2ZhaWxfdG1yLAorCSpiX3NycF93YWl0X3RtciwgKmFfd2FpdF9lbnVtX3RtcjsKKworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgYWN0aXZlX3RpbWVyczsKKworc3RhdGljIHN0cnVjdCBmc2xfb3RnX2NvbmZpZyBmc2xfb3RnX2luaXRkYXRhID0geworCS5vdGdfcG9ydCA9IDEsCit9OworCisjaWZkZWYgQ09ORklHX1BQQzMyCitzdGF0aWMgdTMyIF9mc2xfcmVhZGxfYmUoY29uc3QgdW5zaWduZWQgX19pb21lbSAqcCkKK3sKKwlyZXR1cm4gaW5fYmUzMihwKTsKK30KKworc3RhdGljIHUzMiBfZnNsX3JlYWRsX2xlKGNvbnN0IHVuc2lnbmVkIF9faW9tZW0gKnApCit7CisJcmV0dXJuIGluX2xlMzIocCk7Cit9CisKK3N0YXRpYyB2b2lkIF9mc2xfd3JpdGVsX2JlKHUzMiB2LCB1bnNpZ25lZCBfX2lvbWVtICpwKQoreworCW91dF9iZTMyKHAsIHYpOworfQorCitzdGF0aWMgdm9pZCBfZnNsX3dyaXRlbF9sZSh1MzIgdiwgdW5zaWduZWQgX19pb21lbSAqcCkKK3sKKwlvdXRfbGUzMihwLCB2KTsKK30KKworc3RhdGljIHUzMiAoKl9mc2xfcmVhZGwpKGNvbnN0IHVuc2lnbmVkIF9faW9tZW0gKnApOworc3RhdGljIHZvaWQgKCpfZnNsX3dyaXRlbCkodTMyIHYsIHVuc2lnbmVkIF9faW9tZW0gKnApOworCisjZGVmaW5lIGZzbF9yZWFkbChwKQkJKCpfZnNsX3JlYWRsKSgocCkpCisjZGVmaW5lIGZzbF93cml0ZWwodiwgcCkJKCpfZnNsX3dyaXRlbCkoKHYpLCAocCkpCisKKyNlbHNlCisjZGVmaW5lIGZzbF9yZWFkbChhZGRyKQkJcmVhZGwoYWRkcikKKyNkZWZpbmUgZnNsX3dyaXRlbCh2YWwsIGFkZHIpCXdyaXRlbCh2YWwsIGFkZHIpCisjZW5kaWYgLyogQ09ORklHX1BQQzMyICovCisKKy8qIFJvdXRpbmVzIHRvIGFjY2VzcyB0cmFuc2NlaXZlciBVTFBJIHJlZ2lzdGVycyAqLwordTggdmlld191bHBpKHU4IGFkZHIpCit7CisJdTMyIHRlbXA7CisKKwl0ZW1wID0gMHg0MDAwMDAwMCB8IChhZGRyIDw8IDE2KTsKKwlmc2xfd3JpdGVsKHRlbXAsICZ1c2JfZHJfcmVncy0+dWxwaXZpZXcpOworCXVkZWxheSgxMDAwKTsKKwl3aGlsZSAodGVtcCAmIDB4NDApCisJCXRlbXAgPSBmc2xfcmVhZGwoJnVzYl9kcl9yZWdzLT51bHBpdmlldyk7CisJcmV0dXJuIChsZTMyX3RvX2NwdSh0ZW1wKSAmIDB4MDAwMGZmMDApID4+IDg7Cit9CisKK2ludCB3cml0ZV91bHBpKHU4IGFkZHIsIHU4IGRhdGEpCit7CisJdTMyIHRlbXA7CisKKwl0ZW1wID0gMHg2MDAwMDAwMCB8IChhZGRyIDw8IDE2KSB8IGRhdGE7CisJZnNsX3dyaXRlbCh0ZW1wLCAmdXNiX2RyX3JlZ3MtPnVscGl2aWV3KTsKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBPcGVyYXRpb25zIHRoYXQgd2lsbCBiZSBjYWxsZWQgZnJvbSBPVEcgRmluaXRlIFN0YXRlIE1hY2hpbmUgKi8KKworLyogQ2hhcmdlIHZidXMgZm9yIHZidXMgcHVsc2luZyBpbiBTUlAgKi8KK3ZvaWQgZnNsX290Z19jaHJnX3ZidXMoaW50IG9uKQoreworCXUzMiB0bXA7CisKKwl0bXAgPSBmc2xfcmVhZGwoJnVzYl9kcl9yZWdzLT5vdGdzYykgJiB+T1RHU0NfSU5UU1RTX01BU0s7CisKKwlpZiAob24pCisJCS8qIHN0b3AgZGlzY2hhcmdpbmcsIHN0YXJ0IGNoYXJnaW5nICovCisJCXRtcCA9ICh0bXAgJiB+T1RHU0NfQ1RSTF9WQlVTX0RJU0NIQVJHRSkgfAorCQkJT1RHU0NfQ1RSTF9WQlVTX0NIQVJHRTsKKwllbHNlCisJCS8qIHN0b3AgY2hhcmdpbmcgKi8KKwkJdG1wICY9IH5PVEdTQ19DVFJMX1ZCVVNfQ0hBUkdFOworCisJZnNsX3dyaXRlbCh0bXAsICZ1c2JfZHJfcmVncy0+b3Rnc2MpOworfQorCisvKiBEaXNjaGFyZ2UgdmJ1cyB0aHJvdWdoIGEgcmVzaXN0b3IgdG8gZ3JvdW5kICovCit2b2lkIGZzbF9vdGdfZGlzY2hyZ192YnVzKGludCBvbikKK3sKKwl1MzIgdG1wOworCisJdG1wID0gZnNsX3JlYWRsKCZ1c2JfZHJfcmVncy0+b3Rnc2MpICYgfk9UR1NDX0lOVFNUU19NQVNLOworCisJaWYgKG9uKQorCQkvKiBzdG9wIGNoYXJnaW5nLCBzdGFydCBkaXNjaGFyZ2luZyAqLworCQl0bXAgPSAodG1wICYgfk9UR1NDX0NUUkxfVkJVU19DSEFSR0UpIHwKKwkJCU9UR1NDX0NUUkxfVkJVU19ESVNDSEFSR0U7CisJZWxzZQorCQkvKiBzdG9wIGRpc2NoYXJnaW5nICovCisJCXRtcCAmPSB+T1RHU0NfQ1RSTF9WQlVTX0RJU0NIQVJHRTsKKworCWZzbF93cml0ZWwodG1wLCAmdXNiX2RyX3JlZ3MtPm90Z3NjKTsKK30KKworLyogQS1kZXZpY2UgZHJpdmVyIHZidXMsIGNvbnRyb2xsZWQgdGhyb3VnaCBQUCBiaXQgaW4gUE9SVFNDICovCit2b2lkIGZzbF9vdGdfZHJ2X3ZidXMoaW50IG9uKQoreworCXUzMiB0bXA7CisKKwlpZiAob24pIHsKKwkJdG1wID0gZnNsX3JlYWRsKCZ1c2JfZHJfcmVncy0+cG9ydHNjKSAmIH5QT1JUU0NfVzFDX0JJVFM7CisJCWZzbF93cml0ZWwodG1wIHwgUE9SVFNDX1BPUlRfUE9XRVIsICZ1c2JfZHJfcmVncy0+cG9ydHNjKTsKKwl9IGVsc2UgeworCQl0bXAgPSBmc2xfcmVhZGwoJnVzYl9kcl9yZWdzLT5wb3J0c2MpICYKKwkJICAgICAgflBPUlRTQ19XMUNfQklUUyAmIH5QT1JUU0NfUE9SVF9QT1dFUjsKKwkJZnNsX3dyaXRlbCh0bXAsICZ1c2JfZHJfcmVncy0+cG9ydHNjKTsKKwl9Cit9CisKKy8qCisgKiBQdWxsLXVwIEQrLCBzaWduYWxsaW5nIGNvbm5lY3QgYnkgcGVyaXBlcmFsLiBBbHNvIHVzZWQgaW4KKyAqIGRhdGEtbGluZSBwdWxzaW5nIGluIFNSUAorICovCit2b2lkIGZzbF9vdGdfbG9jX2Nvbm4oaW50IG9uKQoreworCXUzMiB0bXA7CisKKwl0bXAgPSBmc2xfcmVhZGwoJnVzYl9kcl9yZWdzLT5vdGdzYykgJiB+T1RHU0NfSU5UU1RTX01BU0s7CisKKwlpZiAob24pCisJCXRtcCB8PSBPVEdTQ19DVFJMX0RBVEFfUFVMU0lORzsKKwllbHNlCisJCXRtcCAmPSB+T1RHU0NfQ1RSTF9EQVRBX1BVTFNJTkc7CisKKwlmc2xfd3JpdGVsKHRtcCwgJnVzYl9kcl9yZWdzLT5vdGdzYyk7Cit9CisKKy8qCisgKiBHZW5lcmF0ZSBTT0YgYnkgaG9zdC4gIFRoaXMgaXMgY29udHJvbGxlZCB0aHJvdWdoIHN1c3BlbmQvcmVzdW1lIHRoZQorICogcG9ydC4gIEluIGhvc3QgbW9kZSwgY29udHJvbGxlciB3aWxsIGF1dG9tYXRpY2FsbHkgc2VuZCBTT0YuCisgKiBTdXNwZW5kIHdpbGwgYmxvY2sgdGhlIGRhdGEgb24gdGhlIHBvcnQuCisgKi8KK3ZvaWQgZnNsX290Z19sb2Nfc29mKGludCBvbikKK3sKKwl1MzIgdG1wOworCisJdG1wID0gZnNsX3JlYWRsKCZmc2xfb3RnX2Rldi0+ZHJfbWVtX21hcC0+cG9ydHNjKSAmIH5QT1JUU0NfVzFDX0JJVFM7CisJaWYgKG9uKQorCQl0bXAgfD0gUE9SVFNDX1BPUlRfRk9SQ0VfUkVTVU1FOworCWVsc2UKKwkJdG1wIHw9IFBPUlRTQ19QT1JUX1NVU1BFTkQ7CisKKwlmc2xfd3JpdGVsKHRtcCwgJmZzbF9vdGdfZGV2LT5kcl9tZW1fbWFwLT5wb3J0c2MpOworCit9CisKKy8qIFN0YXJ0IFNSUCBwdWxzaW5nIGJ5IGRhdGEtbGluZSBwdWxzaW5nLCBmb2xsb3dlZCB3aXRoIHYtYnVzIHB1bHNpbmcuICovCit2b2lkIGZzbF9vdGdfc3RhcnRfcHVsc2Uodm9pZCkKK3sKKwl1MzIgdG1wOworCisJc3JwX3dhaXRfZG9uZSA9IDA7CisjaWZkZWYgSEFfREFUQV9QVUxTRQorCXRtcCA9IGZzbF9yZWFkbCgmdXNiX2RyX3JlZ3MtPm90Z3NjKSAmIH5PVEdTQ19JTlRTVFNfTUFTSzsKKwl0bXAgfD0gT1RHU0NfSEFfREFUQV9QVUxTRTsKKwlmc2xfd3JpdGVsKHRtcCwgJnVzYl9kcl9yZWdzLT5vdGdzYyk7CisjZWxzZQorCWZzbF9vdGdfbG9jX2Nvbm4oMSk7CisjZW5kaWYKKworCWZzbF9vdGdfYWRkX3RpbWVyKGJfZGF0YV9wdWxzZV90bXIpOworfQorCit2b2lkIGJfZGF0YV9wdWxzZV9lbmQodW5zaWduZWQgbG9uZyBmb28pCit7CisjaWZkZWYgSEFfREFUQV9QVUxTRQorI2Vsc2UKKwlmc2xfb3RnX2xvY19jb25uKDApOworI2VuZGlmCisKKwkvKiBEbyBWQlVTIHB1bHNlIGFmdGVyIGRhdGEgcHVsc2UgKi8KKwlmc2xfb3RnX3B1bHNlX3ZidXMoKTsKK30KKwordm9pZCBmc2xfb3RnX3B1bHNlX3ZidXModm9pZCkKK3sKKwlzcnBfd2FpdF9kb25lID0gMDsKKwlmc2xfb3RnX2NocmdfdmJ1cygxKTsKKwkvKiBzdGFydCB0aGUgdGltZXIgdG8gZW5kIHZidXMgY2hhcmdlICovCisJZnNsX290Z19hZGRfdGltZXIoYl92YnVzX3B1bHNlX3Rtcik7Cit9CisKK3ZvaWQgYl92YnVzX3B1bHNlX2VuZCh1bnNpZ25lZCBsb25nIGZvbykKK3sKKwlmc2xfb3RnX2NocmdfdmJ1cygwKTsKKworCS8qCisJICogQXMgVVNCMzMwMCB1c2luZyB0aGUgc2FtZSBhX3Nlc3NfdmxkIGFuZCBiX3Nlc3NfdmxkIHZvbHRhZ2UKKwkgKiB3ZSBuZWVkIHRvIGRpc2NoYXJnZSB0aGUgYnVzIGZvciBhIHdoaWxlIHRvIGRpc3Rpbmd1aXNoCisJICogcmVzaWR1YWwgdm9sdGFnZSBvZiB2YnVzIHB1bHNpbmcgYW5kIEEgZGV2aWNlIHB1bGwgdXAKKwkgKi8KKwlmc2xfb3RnX2Rpc2NocmdfdmJ1cygxKTsKKwlmc2xfb3RnX2FkZF90aW1lcihiX3NycF93YWl0X3Rtcik7Cit9CisKK3ZvaWQgYl9zcnBfZW5kKHVuc2lnbmVkIGxvbmcgZm9vKQoreworCWZzbF9vdGdfZGlzY2hyZ192YnVzKDApOworCXNycF93YWl0X2RvbmUgPSAxOworCisJaWYgKChmc2xfb3RnX2Rldi0+b3RnLnN0YXRlID09IE9UR19TVEFURV9CX1NSUF9JTklUKSAmJgorCSAgICBmc2xfb3RnX2Rldi0+ZnNtLmJfc2Vzc192bGQpCisJCWZzbF9vdGdfZGV2LT5mc20uYl9zcnBfZG9uZSA9IDE7Cit9CisKKy8qCisgKiBXb3JrYXJvdW5kIGZvciBhX2hvc3Qgc3VzcGVuZGluZyB0b28gZmFzdC4gIFdoZW4gYV9idXNfcmVxPTAsCisgKiBhX2hvc3Qgd2lsbCBzdGFydCBieSBTUlAuICBJdCBuZWVkcyB0byBzZXQgYl9obnBfZW5hYmxlIGJlZm9yZQorICogYWN0dWFsbHkgc3VzcGVuZGluZyB0byBzdGFydCBITlAKKyAqLwordm9pZCBhX3dhaXRfZW51bSh1bnNpZ25lZCBsb25nIGZvbykKK3sKKwlWREJHKCJhX3dhaXRfZW51bSB0aW1lb3V0XG4iKTsKKwlpZiAoIWZzbF9vdGdfZGV2LT5vdGcuaG9zdC0+Yl9obnBfZW5hYmxlKQorCQlmc2xfb3RnX2FkZF90aW1lcihhX3dhaXRfZW51bV90bXIpOworCWVsc2UKKwkJb3RnX3N0YXRlbWFjaGluZSgmZnNsX290Z19kZXYtPmZzbSk7Cit9CisKKy8qIFRoZSB0aW1lb3V0IGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHNldCB0aW1lIG91dCBiaXQgKi8KK3ZvaWQgc2V0X3Rtb3V0KHVuc2lnbmVkIGxvbmcgaW5kaWNhdG9yKQoreworCSooaW50ICopaW5kaWNhdG9yID0gMTsKK30KKworLyogSW5pdGlhbGl6ZSB0aW1lcnMgKi8KK2ludCBmc2xfb3RnX2luaXRfdGltZXJzKHN0cnVjdCBvdGdfZnNtICpmc20pCit7CisJLyogRlNNIHVzZWQgdGltZXJzICovCisJYV93YWl0X3ZyaXNlX3RtciA9IG90Z190aW1lcl9pbml0aWFsaXplcigmc2V0X3Rtb3V0LCBUQV9XQUlUX1ZSSVNFLAorCQkJCSh1bnNpZ25lZCBsb25nKSZmc20tPmFfd2FpdF92cmlzZV90bW91dCk7CisJaWYgKCFhX3dhaXRfdnJpc2VfdG1yKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWFfd2FpdF9iY29uX3RtciA9IG90Z190aW1lcl9pbml0aWFsaXplcigmc2V0X3Rtb3V0LCBUQV9XQUlUX0JDT04sCisJCQkJKHVuc2lnbmVkIGxvbmcpJmZzbS0+YV93YWl0X2Jjb25fdG1vdXQpOworCWlmICghYV93YWl0X2Jjb25fdG1yKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWFfYWlkbF9iZGlzX3RtciA9IG90Z190aW1lcl9pbml0aWFsaXplcigmc2V0X3Rtb3V0LCBUQV9BSURMX0JESVMsCisJCQkJKHVuc2lnbmVkIGxvbmcpJmZzbS0+YV9haWRsX2JkaXNfdG1vdXQpOworCWlmICghYV9haWRsX2JkaXNfdG1yKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWJfYXNlMF9icnN0X3RtciA9IG90Z190aW1lcl9pbml0aWFsaXplcigmc2V0X3Rtb3V0LCBUQl9BU0UwX0JSU1QsCisJCQkJKHVuc2lnbmVkIGxvbmcpJmZzbS0+Yl9hc2UwX2Jyc3RfdG1vdXQpOworCWlmICghYl9hc2UwX2Jyc3RfdG1yKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWJfc2UwX3NycF90bXIgPSBvdGdfdGltZXJfaW5pdGlhbGl6ZXIoJnNldF90bW91dCwgVEJfU0UwX1NSUCwKKwkJCQkodW5zaWduZWQgbG9uZykmZnNtLT5iX3NlMF9zcnApOworCWlmICghYl9zZTBfc3JwX3RtcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwliX3NycF9mYWlsX3RtciA9IG90Z190aW1lcl9pbml0aWFsaXplcigmc2V0X3Rtb3V0LCBUQl9TUlBfRkFJTCwKKwkJCQkodW5zaWduZWQgbG9uZykmZnNtLT5iX3NycF9kb25lKTsKKwlpZiAoIWJfc3JwX2ZhaWxfdG1yKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWFfd2FpdF9lbnVtX3RtciA9IG90Z190aW1lcl9pbml0aWFsaXplcigmYV93YWl0X2VudW0sIDEwLAorCQkJCSh1bnNpZ25lZCBsb25nKSZmc20pOworCWlmICghYV93YWl0X2VudW1fdG1yKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIGRldmljZSBkcml2ZXIgdXNlZCB0aW1lcnMgKi8KKwliX3NycF93YWl0X3RtciA9IG90Z190aW1lcl9pbml0aWFsaXplcigmYl9zcnBfZW5kLCBUQl9TUlBfV0FJVCwgMCk7CisJaWYgKCFiX3NycF93YWl0X3RtcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwliX2RhdGFfcHVsc2VfdG1yID0gb3RnX3RpbWVyX2luaXRpYWxpemVyKCZiX2RhdGFfcHVsc2VfZW5kLAorCQkJCVRCX0RBVEFfUExTLCAwKTsKKwlpZiAoIWJfZGF0YV9wdWxzZV90bXIpCisJCXJldHVybiAtRU5PTUVNOworCisJYl92YnVzX3B1bHNlX3RtciA9IG90Z190aW1lcl9pbml0aWFsaXplcigmYl92YnVzX3B1bHNlX2VuZCwKKwkJCQlUQl9WQlVTX1BMUywgMCk7CisJaWYgKCFiX3ZidXNfcHVsc2VfdG1yKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQorCisvKiBVbmluaXRpYWxpemUgdGltZXJzICovCit2b2lkIGZzbF9vdGdfdW5pbml0X3RpbWVycyh2b2lkKQoreworCS8qIEZTTSB1c2VkIHRpbWVycyAqLworCWlmIChhX3dhaXRfdnJpc2VfdG1yICE9IE5VTEwpCisJCWtmcmVlKGFfd2FpdF92cmlzZV90bXIpOworCWlmIChhX3dhaXRfYmNvbl90bXIgIT0gTlVMTCkKKwkJa2ZyZWUoYV93YWl0X2Jjb25fdG1yKTsKKwlpZiAoYV9haWRsX2JkaXNfdG1yICE9IE5VTEwpCisJCWtmcmVlKGFfYWlkbF9iZGlzX3Rtcik7CisJaWYgKGJfYXNlMF9icnN0X3RtciAhPSBOVUxMKQorCQlrZnJlZShiX2FzZTBfYnJzdF90bXIpOworCWlmIChiX3NlMF9zcnBfdG1yICE9IE5VTEwpCisJCWtmcmVlKGJfc2UwX3NycF90bXIpOworCWlmIChiX3NycF9mYWlsX3RtciAhPSBOVUxMKQorCQlrZnJlZShiX3NycF9mYWlsX3Rtcik7CisJaWYgKGFfd2FpdF9lbnVtX3RtciAhPSBOVUxMKQorCQlrZnJlZShhX3dhaXRfZW51bV90bXIpOworCisJLyogZGV2aWNlIGRyaXZlciB1c2VkIHRpbWVycyAqLworCWlmIChiX3NycF93YWl0X3RtciAhPSBOVUxMKQorCQlrZnJlZShiX3NycF93YWl0X3Rtcik7CisJaWYgKGJfZGF0YV9wdWxzZV90bXIgIT0gTlVMTCkKKwkJa2ZyZWUoYl9kYXRhX3B1bHNlX3Rtcik7CisJaWYgKGJfdmJ1c19wdWxzZV90bXIgIT0gTlVMTCkKKwkJa2ZyZWUoYl92YnVzX3B1bHNlX3Rtcik7Cit9CisKKy8qIEFkZCB0aW1lciB0byB0aW1lciBsaXN0ICovCit2b2lkIGZzbF9vdGdfYWRkX3RpbWVyKHZvaWQgKmd0aW1lcikKK3sKKwlzdHJ1Y3QgZnNsX290Z190aW1lciAqdGltZXIgPSBndGltZXI7CisJc3RydWN0IGZzbF9vdGdfdGltZXIgKnRtcF90aW1lcjsKKworCS8qCisJICogQ2hlY2sgaWYgdGhlIHRpbWVyIGlzIGFscmVhZHkgaW4gdGhlIGFjdGl2ZSBsaXN0LAorCSAqIGlmIHNvIHVwZGF0ZSB0aW1lciBjb3VudAorCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wX3RpbWVyLCAmYWN0aXZlX3RpbWVycywgbGlzdCkKKwkgICAgaWYgKHRtcF90aW1lciA9PSB0aW1lcikgeworCQl0aW1lci0+Y291bnQgPSB0aW1lci0+ZXhwaXJlczsKKwkJcmV0dXJuOworCX0KKwl0aW1lci0+Y291bnQgPSB0aW1lci0+ZXhwaXJlczsKKwlsaXN0X2FkZF90YWlsKCZ0aW1lci0+bGlzdCwgJmFjdGl2ZV90aW1lcnMpOworfQorCisvKiBSZW1vdmUgdGltZXIgZnJvbSB0aGUgdGltZXIgbGlzdDsgY2xlYXIgdGltZW91dCBzdGF0dXMgKi8KK3ZvaWQgZnNsX290Z19kZWxfdGltZXIodm9pZCAqZ3RpbWVyKQoreworCXN0cnVjdCBmc2xfb3RnX3RpbWVyICp0aW1lciA9IGd0aW1lcjsKKwlzdHJ1Y3QgZnNsX290Z190aW1lciAqdG1wX3RpbWVyLCAqZGVsX3RtcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0bXBfdGltZXIsIGRlbF90bXAsICZhY3RpdmVfdGltZXJzLCBsaXN0KQorCQlpZiAodG1wX3RpbWVyID09IHRpbWVyKQorCQkJbGlzdF9kZWwoJnRpbWVyLT5saXN0KTsKK30KKworLyoKKyAqIFJlZHVjZSB0aW1lciBjb3VudCBieSAxLCBhbmQgZmluZCB0aW1lb3V0IGNvbmRpdGlvbnMuCisgKiBDYWxsZWQgYnkgZnNsX290ZyAxbXMgdGltZXIgaW50ZXJydXB0CisgKi8KK2ludCBmc2xfb3RnX3RpY2tfdGltZXIodm9pZCkKK3sKKwlzdHJ1Y3QgZnNsX290Z190aW1lciAqdG1wX3RpbWVyLCAqZGVsX3RtcDsKKwlpbnQgZXhwaXJlZCA9IDA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodG1wX3RpbWVyLCBkZWxfdG1wLCAmYWN0aXZlX3RpbWVycywgbGlzdCkgeworCQl0bXBfdGltZXItPmNvdW50LS07CisJCS8qIGNoZWNrIGlmIHRpbWVyIGV4cGlyZXMgKi8KKwkJaWYgKCF0bXBfdGltZXItPmNvdW50KSB7CisJCQlsaXN0X2RlbCgmdG1wX3RpbWVyLT5saXN0KTsKKwkJCXRtcF90aW1lci0+ZnVuY3Rpb24odG1wX3RpbWVyLT5kYXRhKTsKKwkJCWV4cGlyZWQgPSAxOworCQl9CisJfQorCisJcmV0dXJuIGV4cGlyZWQ7Cit9CisKKy8qIFJlc2V0IGNvbnRyb2xsZXIsIG5vdCByZXNldCB0aGUgYnVzICovCit2b2lkIG90Z19yZXNldF9jb250cm9sbGVyKHZvaWQpCit7CisJdTMyIGNvbW1hbmQ7CisKKwljb21tYW5kID0gZnNsX3JlYWRsKCZ1c2JfZHJfcmVncy0+dXNiY21kKTsKKwljb21tYW5kIHw9ICgxIDw8IDEpOworCWZzbF93cml0ZWwoY29tbWFuZCwgJnVzYl9kcl9yZWdzLT51c2JjbWQpOworCXdoaWxlIChmc2xfcmVhZGwoJnVzYl9kcl9yZWdzLT51c2JjbWQpICYgKDEgPDwgMSkpCisJCTsKK30KKworLyogQ2FsbCBzdXNwZW5kL3Jlc3VtZSByb3V0aW5lcyBpbiBob3N0IGRyaXZlciAqLworaW50IGZzbF9vdGdfc3RhcnRfaG9zdChzdHJ1Y3Qgb3RnX2ZzbSAqZnNtLCBpbnQgb24pCit7CisJc3RydWN0IG90Z190cmFuc2NlaXZlciAqeGNlaXYgPSBmc20tPnRyYW5zY2VpdmVyOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZnNsX290ZyAqb3RnX2RldiA9IGNvbnRhaW5lcl9vZih4Y2Vpdiwgc3RydWN0IGZzbF9vdGcsIG90Zyk7CisJdTMyIHJldHZhbCA9IDA7CisKKwlpZiAoIXhjZWl2LT5ob3N0KQorCQlyZXR1cm4gLUVOT0RFVjsKKwlkZXYgPSB4Y2Vpdi0+aG9zdC0+Y29udHJvbGxlcjsKKworCS8qCisJICogVXBkYXRlIGFfdmJ1c192bGQgc3RhdGUgYXMgYV92YnVzX3ZsZCBpbnQgaXMgZGlzYWJsZWQKKwkgKiBpbiBkZXZpY2UgbW9kZQorCSAqLworCWZzbS0+YV92YnVzX3ZsZCA9CisJCSEhKGZzbF9yZWFkbCgmdXNiX2RyX3JlZ3MtPm90Z3NjKSAmIE9UR1NDX1NUU19BX1ZCVVNfVkFMSUQpOworCWlmIChvbikgeworCQkvKiBzdGFydCBmc2wgdXNiIGhvc3QgY29udHJvbGxlciAqLworCQlpZiAob3RnX2Rldi0+aG9zdF93b3JraW5nKQorCQkJZ290byBlbmQ7CisJCWVsc2UgeworCQkJb3RnX3Jlc2V0X2NvbnRyb2xsZXIoKTsKKwkJCVZEQkcoImhvc3Qgb24uLi4uLi5cbiIpOworCQkJaWYgKGRldi0+ZHJpdmVyLT5wbSAmJiBkZXYtPmRyaXZlci0+cG0tPnJlc3VtZSkgeworCQkJCXJldHZhbCA9IGRldi0+ZHJpdmVyLT5wbS0+cmVzdW1lKGRldik7CisJCQkJaWYgKGZzbS0+aWQpIHsKKwkJCQkJLyogZGVmYXVsdC1iICovCisJCQkJCWZzbF9vdGdfZHJ2X3ZidXMoMSk7CisJCQkJCS8qCisJCQkJCSAqIFdvcmthcm91bmQ6IGJfaG9zdCBjYW4ndCBkcml2ZXIKKwkJCQkJICogdmJ1cywgYnV0IFBQIGluIFBPUlRTQyBuZWVkcyB0bworCQkJCQkgKiBiZSAxIGZvciBob3N0IHRvIHdvcmsuCisJCQkJCSAqIFNvIHdlIHNldCBkcnZfdmJ1cyBiaXQgaW4KKwkJCQkJICogdHJhbnNjZWl2ZXIgdG8gMCB0aHJ1IFVMUEkuCisJCQkJCSAqLworCQkJCQl3cml0ZV91bHBpKDB4MGMsIDB4MjApOworCQkJCX0KKwkJCX0KKworCQkJb3RnX2Rldi0+aG9zdF93b3JraW5nID0gMTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIHN0b3AgZnNsIHVzYiBob3N0IGNvbnRyb2xsZXIgKi8KKwkJaWYgKCFvdGdfZGV2LT5ob3N0X3dvcmtpbmcpCisJCQlnb3RvIGVuZDsKKwkJZWxzZSB7CisJCQlWREJHKCJob3N0IG9mZi4uLi4uLlxuIik7CisJCQlpZiAoZGV2ICYmIGRldi0+ZHJpdmVyKSB7CisJCQkJaWYgKGRldi0+ZHJpdmVyLT5wbSAmJiBkZXYtPmRyaXZlci0+cG0tPnN1c3BlbmQpCisJCQkJCXJldHZhbCA9IGRldi0+ZHJpdmVyLT5wbS0+c3VzcGVuZChkZXYpOworCQkJCWlmIChmc20tPmlkKQorCQkJCQkvKiBkZWZhdWx0LWIgKi8KKwkJCQkJZnNsX290Z19kcnZfdmJ1cygwKTsKKwkJCX0KKwkJCW90Z19kZXYtPmhvc3Rfd29ya2luZyA9IDA7CisJCX0KKwl9CitlbmQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIENhbGwgc3VzcGVuZCBhbmQgcmVzdW1lIGZ1bmN0aW9uIGluIHVkYyBkcml2ZXIKKyAqIHRvIHN0b3AgYW5kIHN0YXJ0IHVkYyBkcml2ZXIuCisgKi8KK2ludCBmc2xfb3RnX3N0YXJ0X2dhZGdldChzdHJ1Y3Qgb3RnX2ZzbSAqZnNtLCBpbnQgb24pCit7CisJc3RydWN0IG90Z190cmFuc2NlaXZlciAqeGNlaXYgPSBmc20tPnRyYW5zY2VpdmVyOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKworCWlmICgheGNlaXYtPmdhZGdldCB8fCAheGNlaXYtPmdhZGdldC0+ZGV2LnBhcmVudCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlWREJHKCJnYWRnZXQgJXNcbiIsIG9uID8gIm9uIiA6ICJvZmYiKTsKKwlkZXYgPSB4Y2Vpdi0+Z2FkZ2V0LT5kZXYucGFyZW50OworCisJaWYgKG9uKSB7CisJCWlmIChkZXYtPmRyaXZlci0+cmVzdW1lKQorCQkJZGV2LT5kcml2ZXItPnJlc3VtZShkZXYpOworCX0gZWxzZSB7CisJCWlmIChkZXYtPmRyaXZlci0+c3VzcGVuZCkKKwkJCWRldi0+ZHJpdmVyLT5zdXNwZW5kKGRldiwgb3RnX3N1c3BlbmRfc3RhdGUpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogQ2FsbGVkIGJ5IGluaXRpYWxpemF0aW9uIGNvZGUgb2YgaG9zdCBkcml2ZXIuICBSZWdpc3RlciBob3N0IGNvbnRyb2xsZXIKKyAqIHRvIHRoZSBPVEcuICBTdXNwZW5kIGhvc3QgZm9yIE9URyByb2xlIGRldGVjdGlvbi4KKyAqLworc3RhdGljIGludCBmc2xfb3RnX3NldF9ob3N0KHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90Z19wLCBzdHJ1Y3QgdXNiX2J1cyAqaG9zdCkKK3sKKwlzdHJ1Y3QgZnNsX290ZyAqb3RnX2RldiA9IGNvbnRhaW5lcl9vZihvdGdfcCwgc3RydWN0IGZzbF9vdGcsIG90Zyk7CisKKwlpZiAoIW90Z19wIHx8IG90Z19kZXYgIT0gZnNsX290Z19kZXYpCisJCXJldHVybiAtRU5PREVWOworCisJb3RnX3AtPmhvc3QgPSBob3N0OworCisJb3RnX2Rldi0+ZnNtLmFfYnVzX2Ryb3AgPSAwOworCW90Z19kZXYtPmZzbS5hX2J1c19yZXEgPSAxOworCisJaWYgKGhvc3QpIHsKKwkJVkRCRygiaG9zdCBvZmYuLi4uLi5cbiIpOworCisJCW90Z19wLT5ob3N0LT5vdGdfcG9ydCA9IGZzbF9vdGdfaW5pdGRhdGEub3RnX3BvcnQ7CisJCW90Z19wLT5ob3N0LT5pc19iX2hvc3QgPSBvdGdfZGV2LT5mc20uaWQ7CisJCS8qCisJCSAqIG11c3QgbGVhdmUgdGltZSBmb3Iga2h1YmQgdG8gZmluaXNoIGl0cyB0aGluZworCQkgKiBiZWZvcmUgeWFua2luZyB0aGUgaG9zdCBkcml2ZXIgb3V0IGZyb20gdW5kZXIgaXQsCisJCSAqIHNvIHN1c3BlbmQgdGhlIGhvc3QgYWZ0ZXIgYSBzaG9ydCBkZWxheS4KKwkJICovCisJCW90Z19kZXYtPmhvc3Rfd29ya2luZyA9IDE7CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmb3RnX2Rldi0+b3RnX2V2ZW50LCAxMDApOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQkvKiBob3N0IGRyaXZlciBnb2luZyBhd2F5ICovCisJCWlmICghKGZzbF9yZWFkbCgmb3RnX2Rldi0+ZHJfbWVtX21hcC0+b3Rnc2MpICYKKwkJICAgICAgT1RHU0NfU1RTX1VTQl9JRCkpIHsKKwkJCS8qIE1pbmktQSBjYWJsZSBjb25uZWN0ZWQgKi8KKwkJCXN0cnVjdCBvdGdfZnNtICpmc20gPSAmb3RnX2Rldi0+ZnNtOworCisJCQlvdGdfcC0+c3RhdGUgPSBPVEdfU1RBVEVfVU5ERUZJTkVEOworCQkJZnNtLT5wcm90b2NvbCA9IFBST1RPX1VOREVGOworCQl9CisJfQorCisJb3RnX2Rldi0+aG9zdF93b3JraW5nID0gMDsKKworCW90Z19zdGF0ZW1hY2hpbmUoJm90Z19kZXYtPmZzbSk7CisKKwlyZXR1cm4gMDsKK30KKworLyogQ2FsbGVkIGJ5IGluaXRpYWxpemF0aW9uIGNvZGUgb2YgdWRjLiAgUmVnaXN0ZXIgdWRjIHRvIE9URy4gKi8KK3N0YXRpYyBpbnQgZnNsX290Z19zZXRfcGVyaXBoZXJhbChzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGdfcCwKKwkJCQkgIHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJc3RydWN0IGZzbF9vdGcgKm90Z19kZXYgPSBjb250YWluZXJfb2Yob3RnX3AsIHN0cnVjdCBmc2xfb3RnLCBvdGcpOworCisJVkRCRygib3RnX2RldiAweCV4XG4iLCAoaW50KW90Z19kZXYpOworCVZEQkcoImZzbF9vdGdfZGV2IDB4JXhcbiIsIChpbnQpZnNsX290Z19kZXYpOworCisJaWYgKCFvdGdfcCB8fCBvdGdfZGV2ICE9IGZzbF9vdGdfZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICghZ2FkZ2V0KSB7CisJCWlmICghb3RnX2Rldi0+b3RnLmRlZmF1bHRfYSkKKwkJCW90Z19wLT5nYWRnZXQtPm9wcy0+dmJ1c19kcmF3KG90Z19wLT5nYWRnZXQsIDApOworCQl1c2JfZ2FkZ2V0X3ZidXNfZGlzY29ubmVjdChvdGdfZGV2LT5vdGcuZ2FkZ2V0KTsKKwkJb3RnX2Rldi0+b3RnLmdhZGdldCA9IDA7CisJCW90Z19kZXYtPmZzbS5iX2J1c19yZXEgPSAwOworCQlvdGdfc3RhdGVtYWNoaW5lKCZvdGdfZGV2LT5mc20pOworCQlyZXR1cm4gMDsKKwl9CisKKwlvdGdfcC0+Z2FkZ2V0ID0gZ2FkZ2V0OworCW90Z19wLT5nYWRnZXQtPmlzX2FfcGVyaXBoZXJhbCA9ICFvdGdfZGV2LT5mc20uaWQ7CisKKwlvdGdfZGV2LT5mc20uYl9idXNfcmVxID0gMTsKKworCS8qIHN0YXJ0IHRoZSBnYWRnZXQgcmlnaHQgYXdheSBpZiB0aGUgSUQgcGluIHNheXMgTWluaS1CICovCisJREJHKCJJRCBwaW49JWRcbiIsIG90Z19kZXYtPmZzbS5pZCk7CisJaWYgKG90Z19kZXYtPmZzbS5pZCA9PSAxKSB7CisJCWZzbF9vdGdfc3RhcnRfaG9zdCgmb3RnX2Rldi0+ZnNtLCAwKTsKKwkJb3RnX2Rydl92YnVzKCZvdGdfZGV2LT5mc20sIDApOworCQlmc2xfb3RnX3N0YXJ0X2dhZGdldCgmb3RnX2Rldi0+ZnNtLCAxKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogU2V0IE9URyBwb3J0IHBvd2VyLCBvbmx5IGZvciBCLWRldmljZSAqLworc3RhdGljIGludCBmc2xfb3RnX3NldF9wb3dlcihzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGdfcCwgdW5zaWduZWQgbUEpCit7CisJaWYgKCFmc2xfb3RnX2RldikKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKG90Z19wLT5zdGF0ZSA9PSBPVEdfU1RBVEVfQl9QRVJJUEhFUkFMKQorCQlwcl9pbmZvKCJGU0wgT1RHOiBEcmF3ICVkIG1BXG4iLCBtQSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIERlbGF5ZWQgcGluIGRldGVjdCBpbnRlcnJ1cHQgcHJvY2Vzc2luZy4KKyAqCisgKiBXaGVuIHRoZSBNaW5pLUEgY2FibGUgaXMgZGlzY29ubmVjdGVkIGZyb20gdGhlIGJvYXJkLAorICogdGhlIHBpbi1kZXRlY3QgaW50ZXJydXB0IGhhcHBlbnMgYmVmb3JlIHRoZSBkaXNjb25ubmVjdAorICogaW50ZXJydXB0cyBmb3IgdGhlIGNvbm5lY3RlZCBkZXZpY2UocykuICBJbiBvcmRlciB0bworICogcHJvY2VzcyB0aGUgZGlzY29ubmVjdCBpbnRlcnJ1cHQocykgcHJpb3IgdG8gc3dpdGNoaW5nCisgKiByb2xlcywgdGhlIHBpbi1kZXRlY3QgaW50ZXJydXB0cyBhcmUgZGVsYXllZCwgYW5kIGhhbmRsZWQKKyAqIGJ5IHRoaXMgcm91dGluZS4KKyAqLworc3RhdGljIHZvaWQgZnNsX290Z19ldmVudChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGZzbF9vdGcgKm9nID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmc2xfb3RnLCBvdGdfZXZlbnQud29yayk7CisJc3RydWN0IG90Z19mc20gKmZzbSA9ICZvZy0+ZnNtOworCisJaWYgKGZzbS0+aWQpIHsJCS8qIHN3aXRjaCB0byBnYWRnZXQgKi8KKwkJZnNsX290Z19zdGFydF9ob3N0KGZzbSwgMCk7CisJCW90Z19kcnZfdmJ1cyhmc20sIDApOworCQlmc2xfb3RnX3N0YXJ0X2dhZGdldChmc20sIDEpOworCX0KK30KKworLyogQi1kZXZpY2Ugc3RhcnQgU1JQICovCitzdGF0aWMgaW50IGZzbF9vdGdfc3RhcnRfc3JwKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90Z19wKQoreworCXN0cnVjdCBmc2xfb3RnICpvdGdfZGV2ID0gY29udGFpbmVyX29mKG90Z19wLCBzdHJ1Y3QgZnNsX290Zywgb3RnKTsKKworCWlmICghb3RnX3AgfHwgb3RnX2RldiAhPSBmc2xfb3RnX2RldgorCSAgICB8fCBvdGdfcC0+c3RhdGUgIT0gT1RHX1NUQVRFX0JfSURMRSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlvdGdfZGV2LT5mc20uYl9idXNfcmVxID0gMTsKKwlvdGdfc3RhdGVtYWNoaW5lKCZvdGdfZGV2LT5mc20pOworCisJcmV0dXJuIDA7Cit9CisKKy8qIEFfaG9zdCBzdXNwZW5kIHdpbGwgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHN0YXJ0IGhucCAqLworc3RhdGljIGludCBmc2xfb3RnX3N0YXJ0X2hucChzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGdfcCkKK3sKKwlzdHJ1Y3QgZnNsX290ZyAqb3RnX2RldiA9IGNvbnRhaW5lcl9vZihvdGdfcCwgc3RydWN0IGZzbF9vdGcsIG90Zyk7CisKKwlpZiAoIW90Z19wIHx8IG90Z19kZXYgIT0gZnNsX290Z19kZXYpCisJCXJldHVybiAtRU5PREVWOworCisJREJHKCJzdGFydF9obnAuLi5uIik7CisKKwkvKiBjbGVhciBhX2J1c19yZXEgdG8gZW50ZXIgYV9zdXNwZW5kIHN0YXRlICovCisJb3RnX2Rldi0+ZnNtLmFfYnVzX3JlcSA9IDA7CisJb3RnX3N0YXRlbWFjaGluZSgmb3RnX2Rldi0+ZnNtKTsKKworCXJldHVybiAwOworfQorCisvKgorICogSW50ZXJydXB0IGhhbmRsZXIuICBPVEcvaG9zdC9wZXJpcGhlcmFsIHNoYXJlIHRoZSBzYW1lIGludCBsaW5lLgorICogT1RHIGRyaXZlciBjbGVhcnMgT1RHU0MgaW50ZXJydXB0cyBhbmQgbGVhdmVzIFVTQiBpbnRlcnJ1cHRzCisgKiBpbnRhY3QuICBJdCBuZWVkcyB0byBoYXZlIGtub3dsZWRnZSBvZiBzb21lIFVTQiBpbnRlcnJ1cHRzCisgKiBzdWNoIGFzIHBvcnQgY2hhbmdlLgorICovCitpcnFyZXR1cm5fdCBmc2xfb3RnX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG90Z19mc20gKmZzbSA9ICYoKHN0cnVjdCBmc2xfb3RnICopZGV2X2lkKS0+ZnNtOworCXN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90ZyA9ICYoKHN0cnVjdCBmc2xfb3RnICopZGV2X2lkKS0+b3RnOworCXUzMiBvdGdfaW50X3NyYywgb3RnX3NjOworCisJb3RnX3NjID0gZnNsX3JlYWRsKCZ1c2JfZHJfcmVncy0+b3Rnc2MpOworCW90Z19pbnRfc3JjID0gb3RnX3NjICYgT1RHU0NfSU5UU1RTX01BU0sgJiAob3RnX3NjID4+IDgpOworCisJLyogT25seSBjbGVhciBvdGcgaW50ZXJydXB0cyAqLworCWZzbF93cml0ZWwob3RnX3NjLCAmdXNiX2RyX3JlZ3MtPm90Z3NjKTsKKworCS8qRklYTUU6IElEIGNoYW5nZSBub3QgZ2VuZXJhdGUgd2hlbiBpbml0IHRvIDAgKi8KKwlmc20tPmlkID0gKG90Z19zYyAmIE9UR1NDX1NUU19VU0JfSUQpID8gMSA6IDA7CisJb3RnLT5kZWZhdWx0X2EgPSAoZnNtLT5pZCA9PSAwKTsKKworCS8qIHByb2Nlc3MgT1RHIGludGVycnVwdHMgKi8KKwlpZiAob3RnX2ludF9zcmMpIHsKKwkJaWYgKG90Z19pbnRfc3JjICYgT1RHU0NfSU5UU1RTX1VTQl9JRCkgeworCQkJZnNtLT5pZCA9IChvdGdfc2MgJiBPVEdTQ19TVFNfVVNCX0lEKSA/IDEgOiAwOworCQkJb3RnLT5kZWZhdWx0X2EgPSAoZnNtLT5pZCA9PSAwKTsKKwkJCS8qIGNsZWFyIGNvbm4gaW5mb3JtYXRpb24gKi8KKwkJCWlmIChmc20tPmlkKQorCQkJCWZzbS0+Yl9jb25uID0gMDsKKwkJCWVsc2UKKwkJCQlmc20tPmFfY29ubiA9IDA7CisKKwkJCWlmIChvdGctPmhvc3QpCisJCQkJb3RnLT5ob3N0LT5pc19iX2hvc3QgPSBmc20tPmlkOworCQkJaWYgKG90Zy0+Z2FkZ2V0KQorCQkJCW90Zy0+Z2FkZ2V0LT5pc19hX3BlcmlwaGVyYWwgPSAhZnNtLT5pZDsKKwkJCVZEQkcoIklEIGludCAoSUQgaXMgJWQpXG4iLCBmc20tPmlkKTsKKworCQkJaWYgKGZzbS0+aWQpIHsJLyogc3dpdGNoIHRvIGdhZGdldCAqLworCQkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygKKwkJCQkJJigoc3RydWN0IGZzbF9vdGcgKilkZXZfaWQpLT5vdGdfZXZlbnQsCisJCQkJCTEwMCk7CisJCQl9IGVsc2UgewkvKiBzd2l0Y2ggdG8gaG9zdCAqLworCQkJCWNhbmNlbF9kZWxheWVkX3dvcmsoJgorCQkJCQkJICAgICgoc3RydWN0IGZzbF9vdGcgKilkZXZfaWQpLT4KKwkJCQkJCSAgICBvdGdfZXZlbnQpOworCQkJCWZzbF9vdGdfc3RhcnRfZ2FkZ2V0KGZzbSwgMCk7CisJCQkJb3RnX2Rydl92YnVzKGZzbSwgMSk7CisJCQkJZnNsX290Z19zdGFydF9ob3N0KGZzbSwgMSk7CisJCQl9CisJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCX0KKwl9CisJcmV0dXJuIElSUV9OT05FOworfQorCitzdGF0aWMgc3RydWN0IG90Z19mc21fb3BzIGZzbF9vdGdfb3BzID0geworCS5jaHJnX3ZidXMgPSBmc2xfb3RnX2NocmdfdmJ1cywKKwkuZHJ2X3ZidXMgPSBmc2xfb3RnX2Rydl92YnVzLAorCS5sb2NfY29ubiA9IGZzbF9vdGdfbG9jX2Nvbm4sCisJLmxvY19zb2YgPSBmc2xfb3RnX2xvY19zb2YsCisJLnN0YXJ0X3B1bHNlID0gZnNsX290Z19zdGFydF9wdWxzZSwKKworCS5hZGRfdGltZXIgPSBmc2xfb3RnX2FkZF90aW1lciwKKwkuZGVsX3RpbWVyID0gZnNsX290Z19kZWxfdGltZXIsCisKKwkuc3RhcnRfaG9zdCA9IGZzbF9vdGdfc3RhcnRfaG9zdCwKKwkuc3RhcnRfZ2FkZ2V0ID0gZnNsX290Z19zdGFydF9nYWRnZXQsCit9OworCisvKiBJbml0aWFsaXplIHRoZSBnbG9iYWwgdmFyaWFibGUgZnNsX290Z19kZXYgYW5kIHJlcXVlc3QgSVJRIGZvciBPVEcgKi8KK3N0YXRpYyBpbnQgZnNsX290Z19jb25mKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGZzbF9vdGcgKmZzbF9vdGdfdGM7CisJaW50IHN0YXR1czsKKworCWlmIChmc2xfb3RnX2RldikKKwkJcmV0dXJuIDA7CisKKwkvKiBhbGxvY2F0ZSBzcGFjZSB0byBmc2wgb3RnIGRldmljZSAqLworCWZzbF9vdGdfdGMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZnNsX290ZyksIEdGUF9LRVJORUwpOworCWlmICghZnNsX290Z190YykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlJTklUX0RFTEFZRURfV09SSygmZnNsX290Z190Yy0+b3RnX2V2ZW50LCBmc2xfb3RnX2V2ZW50KTsKKworCUlOSVRfTElTVF9IRUFEKCZhY3RpdmVfdGltZXJzKTsKKwlzdGF0dXMgPSBmc2xfb3RnX2luaXRfdGltZXJzKCZmc2xfb3RnX3RjLT5mc20pOworCWlmIChzdGF0dXMpIHsKKwkJcHJfaW5mbygiQ291bGRuJ3QgaW5pdCBPVEcgdGltZXJzXG4iKTsKKwkJZ290byBlcnI7CisJfQorCXNwaW5fbG9ja19pbml0KCZmc2xfb3RnX3RjLT5mc20ubG9jayk7CisKKwkvKiBTZXQgT1RHIHN0YXRlIG1hY2hpbmUgb3BlcmF0aW9ucyAqLworCWZzbF9vdGdfdGMtPmZzbS5vcHMgPSAmZnNsX290Z19vcHM7CisKKwkvKiBpbml0aWFsaXplIHRoZSBvdGcgc3RydWN0dXJlICovCisJZnNsX290Z190Yy0+b3RnLmxhYmVsID0gRFJJVkVSX0RFU0M7CisJZnNsX290Z190Yy0+b3RnLnNldF9ob3N0ID0gZnNsX290Z19zZXRfaG9zdDsKKwlmc2xfb3RnX3RjLT5vdGcuc2V0X3BlcmlwaGVyYWwgPSBmc2xfb3RnX3NldF9wZXJpcGhlcmFsOworCWZzbF9vdGdfdGMtPm90Zy5zZXRfcG93ZXIgPSBmc2xfb3RnX3NldF9wb3dlcjsKKwlmc2xfb3RnX3RjLT5vdGcuc3RhcnRfaG5wID0gZnNsX290Z19zdGFydF9obnA7CisJZnNsX290Z190Yy0+b3RnLnN0YXJ0X3NycCA9IGZzbF9vdGdfc3RhcnRfc3JwOworCisJZnNsX290Z19kZXYgPSBmc2xfb3RnX3RjOworCisJLyogU3RvcmUgdGhlIG90ZyB0cmFuc2NlaXZlciAqLworCXN0YXR1cyA9IG90Z19zZXRfdHJhbnNjZWl2ZXIoJmZzbF9vdGdfdGMtPm90Zyk7CisJaWYgKHN0YXR1cykgeworCQlwcl93YXJuKEZTTF9PVEdfTkFNRSAiOiB1bmFibGUgdG8gcmVnaXN0ZXIgT1RHIHRyYW5zY2VpdmVyLlxuIik7CisJCWdvdG8gZXJyOworCX0KKworCXJldHVybiAwOworZXJyOgorCWZzbF9vdGdfdW5pbml0X3RpbWVycygpOworCWtmcmVlKGZzbF9vdGdfdGMpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIE9URyBJbml0aWFsaXphdGlvbiAqLworaW50IHVzYl9vdGdfc3RhcnQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZnNsX290ZyAqcF9vdGc7CisJc3RydWN0IG90Z190cmFuc2NlaXZlciAqb3RnX3RyYW5zID0gb3RnX2dldF90cmFuc2NlaXZlcigpOworCXN0cnVjdCBvdGdfZnNtICpmc207CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwl1MzIgdGVtcDsKKwlzdHJ1Y3QgZnNsX3VzYjJfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCXBfb3RnID0gY29udGFpbmVyX29mKG90Z190cmFucywgc3RydWN0IGZzbF9vdGcsIG90Zyk7CisJZnNtID0gJnBfb3RnLT5mc207CisKKwkvKiBJbml0aWFsaXplIHRoZSBzdGF0ZSBtYWNoaW5lIHN0cnVjdHVyZSB3aXRoIGRlZmF1bHQgdmFsdWVzICovCisJU0VUX09UR19TVEFURShvdGdfdHJhbnMsIE9UR19TVEFURV9VTkRFRklORUQpOworCWZzbS0+dHJhbnNjZWl2ZXIgPSAmcF9vdGctPm90ZzsKKworCS8qIFdlIGRvbid0IHJlcXVpcmUgcHJlZGVmaW5lZCBNRU0vSVJRIHJlc291cmNlIGluZGV4ICovCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIC1FTlhJTzsKKworCS8qIFdlIGRvbid0IHJlcXVlc3RfbWVtX3JlZ2lvbiBoZXJlIHRvIGVuYWJsZSByZXNvdXJjZSBzaGFyaW5nCisJICogd2l0aCBob3N0L2RldmljZSAqLworCisJdXNiX2RyX3JlZ3MgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHNpemVvZihzdHJ1Y3QgdXNiX2RyX21tYXApKTsKKwlwX290Zy0+ZHJfbWVtX21hcCA9IChzdHJ1Y3QgdXNiX2RyX21tYXAgKil1c2JfZHJfcmVnczsKKwlwZGF0YS0+cmVncyA9ICh2b2lkICopdXNiX2RyX3JlZ3M7CisKKwlpZiAocGRhdGEtPmluaXQgJiYgcGRhdGEtPmluaXQocGRldikgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocGRhdGEtPmJpZ19lbmRpYW5fbW1pbykgeworCQlfZnNsX3JlYWRsID0gX2ZzbF9yZWFkbF9iZTsKKwkJX2ZzbF93cml0ZWwgPSBfZnNsX3dyaXRlbF9iZTsKKwl9IGVsc2UgeworCQlfZnNsX3JlYWRsID0gX2ZzbF9yZWFkbF9sZTsKKwkJX2ZzbF93cml0ZWwgPSBfZnNsX3dyaXRlbF9sZTsKKwl9CisKKwkvKiByZXF1ZXN0IGlycSAqLworCXBfb3RnLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCXN0YXR1cyA9IHJlcXVlc3RfaXJxKHBfb3RnLT5pcnEsIGZzbF9vdGdfaXNyLAorCQkJCUlSUUZfU0hBUkVELCBkcml2ZXJfbmFtZSwgcF9vdGcpOworCWlmIChzdGF0dXMpIHsKKwkJZGV2X2RiZyhwX290Zy0+b3RnLmRldiwgImNhbid0IGdldCBJUlEgJWQsIGVycm9yICVkXG4iLAorCQkJcF9vdGctPmlycSwgc3RhdHVzKTsKKwkJaW91bm1hcChwX290Zy0+ZHJfbWVtX21hcCk7CisJCWtmcmVlKHBfb3RnKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwkvKiBzdG9wIHRoZSBjb250cm9sbGVyICovCisJdGVtcCA9IGZzbF9yZWFkbCgmcF9vdGctPmRyX21lbV9tYXAtPnVzYmNtZCk7CisJdGVtcCAmPSB+VVNCX0NNRF9SVU5fU1RPUDsKKwlmc2xfd3JpdGVsKHRlbXAsICZwX290Zy0+ZHJfbWVtX21hcC0+dXNiY21kKTsKKworCS8qIHJlc2V0IHRoZSBjb250cm9sbGVyICovCisJdGVtcCA9IGZzbF9yZWFkbCgmcF9vdGctPmRyX21lbV9tYXAtPnVzYmNtZCk7CisJdGVtcCB8PSBVU0JfQ01EX0NUUkxfUkVTRVQ7CisJZnNsX3dyaXRlbCh0ZW1wLCAmcF9vdGctPmRyX21lbV9tYXAtPnVzYmNtZCk7CisKKwkvKiB3YWl0IHJlc2V0IGNvbXBsZXRlZCAqLworCXdoaWxlIChmc2xfcmVhZGwoJnBfb3RnLT5kcl9tZW1fbWFwLT51c2JjbWQpICYgVVNCX0NNRF9DVFJMX1JFU0VUKQorCQk7CisKKwkvKiBjb25maWd1cmUgdGhlIFZCVVNIUyBhcyBJRExFKGJvdGggaG9zdCBhbmQgZGV2aWNlKSAqLworCXRlbXAgPSBVU0JfTU9ERV9TVFJFQU1fRElTQUJMRSB8IChwZGF0YS0+ZXMgPyBVU0JfTU9ERV9FUyA6IDApOworCWZzbF93cml0ZWwodGVtcCwgJnBfb3RnLT5kcl9tZW1fbWFwLT51c2Jtb2RlKTsKKworCS8qIGNvbmZpZ3VyZSBQSFkgaW50ZXJmYWNlICovCisJdGVtcCA9IGZzbF9yZWFkbCgmcF9vdGctPmRyX21lbV9tYXAtPnBvcnRzYyk7CisJdGVtcCAmPSB+KFBPUlRTQ19QSFlfVFlQRV9TRUwgfCBQT1JUU0NfUFRXKTsKKwlzd2l0Y2ggKHBkYXRhLT5waHlfbW9kZSkgeworCWNhc2UgRlNMX1VTQjJfUEhZX1VMUEk6CisJCXRlbXAgfD0gUE9SVFNDX1BUU19VTFBJOworCQlicmVhazsKKwljYXNlIEZTTF9VU0IyX1BIWV9VVE1JX1dJREU6CisJCXRlbXAgfD0gUE9SVFNDX1BUV18xNkJJVDsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBGU0xfVVNCMl9QSFlfVVRNSToKKwkJdGVtcCB8PSBQT1JUU0NfUFRTX1VUTUk7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlmc2xfd3JpdGVsKHRlbXAsICZwX290Zy0+ZHJfbWVtX21hcC0+cG9ydHNjKTsKKworCWlmIChwZGF0YS0+aGF2ZV9zeXNpZl9yZWdzKSB7CisJCS8qIGNvbmZpZ3VyZSBjb250cm9sIGVuYWJsZSBJTyBvdXRwdXQsIGJpZyBlbmRpYW4gcmVnaXN0ZXIgKi8KKwkJdGVtcCA9IF9fcmF3X3JlYWRsKCZwX290Zy0+ZHJfbWVtX21hcC0+Y29udHJvbCk7CisJCXRlbXAgfD0gVVNCX0NUUkxfSU9FTkI7CisJCV9fcmF3X3dyaXRlbCh0ZW1wLCAmcF9vdGctPmRyX21lbV9tYXAtPmNvbnRyb2wpOworCX0KKworCS8qIGRpc2FibGUgYWxsIGludGVycnVwdCBhbmQgY2xlYXIgYWxsIE9UR1NDIHN0YXR1cyAqLworCXRlbXAgPSBmc2xfcmVhZGwoJnBfb3RnLT5kcl9tZW1fbWFwLT5vdGdzYyk7CisJdGVtcCAmPSB+T1RHU0NfSU5URVJSVVBUX0VOQUJMRV9CSVRTX01BU0s7CisJdGVtcCB8PSBPVEdTQ19JTlRFUlJVUFRfU1RBVFVTX0JJVFNfTUFTSyB8IE9UR1NDX0NUUkxfVkJVU19ESVNDSEFSR0U7CisJZnNsX3dyaXRlbCh0ZW1wLCAmcF9vdGctPmRyX21lbV9tYXAtPm90Z3NjKTsKKworCS8qCisJICogVGhlIGlkZW50aWZpY2F0aW9uIChpZCkgaW5wdXQgaXMgRkFMU0Ugd2hlbiBhIE1pbmktQSBwbHVnIGlzIGluc2VydGVkCisJICogaW4gdGhlIGRldmljZXMgTWluaS1BQiByZWNlcHRhY2xlLiBPdGhlcndpc2UsIHRoaXMgaW5wdXQgaXMgVFJVRS4KKwkgKiBBbHNvOiByZWNvcmQgaW5pdGlhbCBzdGF0ZSBvZiBJRCBwaW4KKwkgKi8KKwlpZiAoZnNsX3JlYWRsKCZwX290Zy0+ZHJfbWVtX21hcC0+b3Rnc2MpICYgT1RHU0NfU1RTX1VTQl9JRCkgeworCQlwX290Zy0+b3RnLnN0YXRlID0gT1RHX1NUQVRFX1VOREVGSU5FRDsKKwkJcF9vdGctPmZzbS5pZCA9IDE7CisJfSBlbHNlIHsKKwkJcF9vdGctPm90Zy5zdGF0ZSA9IE9UR19TVEFURV9BX0lETEU7CisJCXBfb3RnLT5mc20uaWQgPSAwOworCX0KKworCURCRygiaW5pdGlhbCBJRCBwaW49JWRcbiIsIHBfb3RnLT5mc20uaWQpOworCisJLyogZW5hYmxlIE9URyBJRCBwaW4gaW50ZXJydXB0ICovCisJdGVtcCA9IGZzbF9yZWFkbCgmcF9vdGctPmRyX21lbV9tYXAtPm90Z3NjKTsKKwl0ZW1wIHw9IE9UR1NDX0lOVFJfVVNCX0lEX0VOOworCXRlbXAgJj0gfihPVEdTQ19DVFJMX1ZCVVNfRElTQ0hBUkdFIHwgT1RHU0NfSU5UUl8xTVNfVElNRVJfRU4pOworCWZzbF93cml0ZWwodGVtcCwgJnBfb3RnLT5kcl9tZW1fbWFwLT5vdGdzYyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHN0YXRlIGZpbGUgaW4gc3lzZnMKKyAqLworc3RhdGljIGludCBzaG93X2ZzbF91c2IyX290Z19zdGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgb3RnX2ZzbSAqZnNtID0gJmZzbF9vdGdfZGV2LT5mc207CisJY2hhciAqbmV4dCA9IGJ1ZjsKKwl1bnNpZ25lZCBzaXplID0gUEFHRV9TSVpFOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZnNtLT5sb2NrLCBmbGFncyk7CisKKwkvKiBiYXNpYyBkcml2ZXIgaW5mb21hdGlvbiAqLworCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKKwkJCURSSVZFUl9ERVNDICJcbiIgImZzbF91c2IyX290ZyB2ZXJzaW9uOiAlc1xuXG4iLAorCQkJRFJJVkVSX1ZFUlNJT04pOworCXNpemUgLT0gdDsKKwluZXh0ICs9IHQ7CisKKwkvKiBSZWdpc3RlcnMgKi8KKwl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsCisJCQkiT1RHU0M6ICAgMHglMDh4XG4iCisJCQkiUE9SVFNDOiAgMHglMDh4XG4iCisJCQkiVVNCTU9ERTogMHglMDh4XG4iCisJCQkiVVNCQ01EOiAgMHglMDh4XG4iCisJCQkiVVNCU1RTOiAgMHglMDh4XG4iCisJCQkiVVNCSU5UUjogMHglMDh4XG4iLAorCQkJZnNsX3JlYWRsKCZ1c2JfZHJfcmVncy0+b3Rnc2MpLAorCQkJZnNsX3JlYWRsKCZ1c2JfZHJfcmVncy0+cG9ydHNjKSwKKwkJCWZzbF9yZWFkbCgmdXNiX2RyX3JlZ3MtPnVzYm1vZGUpLAorCQkJZnNsX3JlYWRsKCZ1c2JfZHJfcmVncy0+dXNiY21kKSwKKwkJCWZzbF9yZWFkbCgmdXNiX2RyX3JlZ3MtPnVzYnN0cyksCisJCQlmc2xfcmVhZGwoJnVzYl9kcl9yZWdzLT51c2JpbnRyKSk7CisJc2l6ZSAtPSB0OworCW5leHQgKz0gdDsKKworCS8qIFN0YXRlICovCisJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAorCQkgICAgICAiT1RHIHN0YXRlOiAlc1xuXG4iLAorCQkgICAgICBvdGdfc3RhdGVfc3RyaW5nKGZzbF9vdGdfZGV2LT5vdGcuc3RhdGUpKTsKKwlzaXplIC09IHQ7CisJbmV4dCArPSB0OworCisJLyogU3RhdGUgTWFjaGluZSBWYXJpYWJsZXMgKi8KKwl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsCisJCQkiYV9idXNfcmVxOiAlZFxuIgorCQkJImJfYnVzX3JlcTogJWRcbiIKKwkJCSJhX2J1c19yZXN1bWU6ICVkXG4iCisJCQkiYV9idXNfc3VzcGVuZDogJWRcbiIKKwkJCSJhX2Nvbm46ICVkXG4iCisJCQkiYV9zZXNzX3ZsZDogJWRcbiIKKwkJCSJhX3NycF9kZXQ6ICVkXG4iCisJCQkiYV92YnVzX3ZsZDogJWRcbiIKKwkJCSJiX2J1c19yZXN1bWU6ICVkXG4iCisJCQkiYl9idXNfc3VzcGVuZDogJWRcbiIKKwkJCSJiX2Nvbm46ICVkXG4iCisJCQkiYl9zZTBfc3JwOiAlZFxuIgorCQkJImJfc2Vzc19lbmQ6ICVkXG4iCisJCQkiYl9zZXNzX3ZsZDogJWRcbiIKKwkJCSJpZDogJWRcbiIsCisJCQlmc20tPmFfYnVzX3JlcSwKKwkJCWZzbS0+Yl9idXNfcmVxLAorCQkJZnNtLT5hX2J1c19yZXN1bWUsCisJCQlmc20tPmFfYnVzX3N1c3BlbmQsCisJCQlmc20tPmFfY29ubiwKKwkJCWZzbS0+YV9zZXNzX3ZsZCwKKwkJCWZzbS0+YV9zcnBfZGV0LAorCQkJZnNtLT5hX3ZidXNfdmxkLAorCQkJZnNtLT5iX2J1c19yZXN1bWUsCisJCQlmc20tPmJfYnVzX3N1c3BlbmQsCisJCQlmc20tPmJfY29ubiwKKwkJCWZzbS0+Yl9zZTBfc3JwLAorCQkJZnNtLT5iX3Nlc3NfZW5kLAorCQkJZnNtLT5iX3Nlc3NfdmxkLAorCQkJZnNtLT5pZCk7CisJc2l6ZSAtPSB0OworCW5leHQgKz0gdDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZzbS0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIFBBR0VfU0laRSAtIHNpemU7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihmc2xfdXNiMl9vdGdfc3RhdGUsIFNfSVJVR08sIHNob3dfZnNsX3VzYjJfb3RnX3N0YXRlLCBOVUxMKTsKKworCisvKiBDaGFyIGRyaXZlciBpbnRlcmZhY2UgdG8gY29udHJvbCBzb21lIE9URyBpbnB1dCAqLworCisvKgorICogSGFuZGxlIHNvbWUgaW9jdGwgY29tbWFuZCwgc3VjaCBhcyBnZXQgb3RnCisgKiBzdGF0dXMgYW5kIHNldCBob3N0IHN1c3BlbmQKKyAqLworc3RhdGljIGxvbmcgZnNsX290Z19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJdTMyIHJldHZhbCA9IDA7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgR0VUX09UR19TVEFUVVM6CisJCXJldHZhbCA9IGZzbF9vdGdfZGV2LT5ob3N0X3dvcmtpbmc7CisJCWJyZWFrOworCisJY2FzZSBTRVRfQV9TVVNQRU5EX1JFUToKKwkJZnNsX290Z19kZXYtPmZzbS5hX3N1c3BlbmRfcmVxID0gYXJnOworCQlicmVhazsKKworCWNhc2UgU0VUX0FfQlVTX0RST1A6CisJCWZzbF9vdGdfZGV2LT5mc20uYV9idXNfZHJvcCA9IGFyZzsKKwkJYnJlYWs7CisKKwljYXNlIFNFVF9BX0JVU19SRVE6CisJCWZzbF9vdGdfZGV2LT5mc20uYV9idXNfcmVxID0gYXJnOworCQlicmVhazsKKworCWNhc2UgU0VUX0JfQlVTX1JFUToKKwkJZnNsX290Z19kZXYtPmZzbS5iX2J1c19yZXEgPSBhcmc7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJb3RnX3N0YXRlbWFjaGluZSgmZnNsX290Z19kZXYtPmZzbSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGZzbF9vdGdfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmc2xfb3RnX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG90Z19mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsgPSBOVUxMLAorCS5yZWFkID0gTlVMTCwKKwkud3JpdGUgPSBOVUxMLAorCS51bmxvY2tlZF9pb2N0bCA9IGZzbF9vdGdfaW9jdGwsCisJLm9wZW4gPSBmc2xfb3RnX29wZW4sCisJLnJlbGVhc2UgPSBmc2xfb3RnX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBmc2xfb3RnX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldDsKKworCWlmICghcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpCisJCXJldHVybiAtRU5PREVWOworCisJLyogY29uZmlndXJlIHRoZSBPVEcgKi8KKwlyZXQgPSBmc2xfb3RnX2NvbmYocGRldik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb3VsZG4ndCBjb25maWd1cmUgT1RHIG1vZHVsZVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogc3RhcnQgT1RHICovCisJcmV0ID0gdXNiX290Z19zdGFydChwZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbid0IGluaXQgRlNMIE9URyBkZXZpY2VcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHJlZ2lzdGVyX2NocmRldihGU0xfT1RHX01BSk9SLCBGU0xfT1RHX05BTUUsICZvdGdfZm9wcyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVnaXN0ZXIgRlNMIE9URyBkZXZpY2VcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfZnNsX3VzYjJfb3RnX3N0YXRlKTsKKwlpZiAocmV0KQorCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiQ2FuJ3QgcmVnaXN0ZXIgc3lzZnMgYXR0cmlidXRlXG4iKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGZzbF9vdGdfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlvdGdfc2V0X3RyYW5zY2VpdmVyKE5VTEwpOworCWZyZWVfaXJxKGZzbF9vdGdfZGV2LT5pcnEsIGZzbF9vdGdfZGV2KTsKKworCWlvdW5tYXAoKHZvaWQgKil1c2JfZHJfcmVncyk7CisKKwlmc2xfb3RnX3VuaW5pdF90aW1lcnMoKTsKKwlrZnJlZShmc2xfb3RnX2Rldik7CisKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2ZzbF91c2IyX290Z19zdGF0ZSk7CisKKwl1bnJlZ2lzdGVyX2NocmRldihGU0xfT1RHX01BSk9SLCBGU0xfT1RHX05BTUUpOworCisJaWYgKHBkYXRhLT5leGl0KQorCQlwZGF0YS0+ZXhpdChwZGV2KTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZzbF9vdGdfZHJpdmVyID0geworCS5wcm9iZSA9IGZzbF9vdGdfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGZzbF9vdGdfcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9IGRyaXZlcl9uYW1lLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgZnNsX3VzYl9vdGdfaW5pdCh2b2lkKQoreworCXByX2luZm8oRFJJVkVSX0lORk8gIlxuIik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZnNsX290Z19kcml2ZXIpOworfQorbW9kdWxlX2luaXQoZnNsX3VzYl9vdGdfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBmc2xfdXNiX290Z19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmZzbF9vdGdfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGZzbF91c2Jfb3RnX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0lORk8pOworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL290Zy9mc2xfb3RnLmggYi9kcml2ZXJzL3VzYi9vdGcvZnNsX290Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmOGVmNzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9vdGcvZnNsX290Zy5oCkBAIC0wLDAgKzEsNDA2IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDcsMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgIm90Z19mc20uaCIKKyNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworLyogVVNCIENvbW1hbmQgUmVnaXN0ZXIgQml0IE1hc2tzICovCisjZGVmaW5lIFVTQl9DTURfUlVOX1NUT1AJCSgweDE8PDApCisjZGVmaW5lIFVTQl9DTURfQ1RSTF9SRVNFVAkJKDB4MTw8MSkKKyNkZWZpbmUgVVNCX0NNRF9QRVJJT0RJQ19TQ0hFRFVMRV9FTgkoMHgxPDw0KQorI2RlZmluZSBVU0JfQ01EX0FTWU5DX1NDSEVEVUxFX0VOCSgweDE8PDUpCisjZGVmaW5lIFVTQl9DTURfSU5UX0FBX0RPT1JCRUxMCQkoMHgxPDw2KQorI2RlZmluZSBVU0JfQ01EX0FTUAkJCSgweDM8PDgpCisjZGVmaW5lIFVTQl9DTURfQVNZTkNfU0NIX1BBUktfRU4JKDB4MTw8MTEpCisjZGVmaW5lIFVTQl9DTURfU1VUVwkJCSgweDE8PDEzKQorI2RlZmluZSBVU0JfQ01EX0FURFRXCQkJKDB4MTw8MTQpCisjZGVmaW5lIFVTQl9DTURfSVRDCQkJKDB4RkY8PDE2KQorCisvKiBiaXQgMTUsMywyIGFyZSBmcmFtZSBsaXN0IHNpemUgKi8KKyNkZWZpbmUgVVNCX0NNRF9GUkFNRV9TSVpFXzEwMjQJCSgweDA8PDE1IHwgMHgwPDwyKQorI2RlZmluZSBVU0JfQ01EX0ZSQU1FX1NJWkVfNTEyCQkoMHgwPDwxNSB8IDB4MTw8MikKKyNkZWZpbmUgVVNCX0NNRF9GUkFNRV9TSVpFXzI1NgkJKDB4MDw8MTUgfCAweDI8PDIpCisjZGVmaW5lIFVTQl9DTURfRlJBTUVfU0laRV8xMjgJCSgweDA8PDE1IHwgMHgzPDwyKQorI2RlZmluZSBVU0JfQ01EX0ZSQU1FX1NJWkVfNjQJCSgweDE8PDE1IHwgMHgwPDwyKQorI2RlZmluZSBVU0JfQ01EX0ZSQU1FX1NJWkVfMzIJCSgweDE8PDE1IHwgMHgxPDwyKQorI2RlZmluZSBVU0JfQ01EX0ZSQU1FX1NJWkVfMTYJCSgweDE8PDE1IHwgMHgyPDwyKQorI2RlZmluZSBVU0JfQ01EX0ZSQU1FX1NJWkVfOAkJKDB4MTw8MTUgfCAweDM8PDIpCisKKy8qIGJpdCA5LTggYXJlIGFzeW5jIHNjaGVkdWxlIHBhcmsgbW9kZSBjb3VudCAqLworI2RlZmluZSBVU0JfQ01EX0FTUF8wMAkJCSgweDA8PDgpCisjZGVmaW5lIFVTQl9DTURfQVNQXzAxCQkJKDB4MTw8OCkKKyNkZWZpbmUgVVNCX0NNRF9BU1BfMTAJCQkoMHgyPDw4KQorI2RlZmluZSBVU0JfQ01EX0FTUF8xMQkJCSgweDM8PDgpCisjZGVmaW5lIFVTQl9DTURfQVNQX0JJVF9QT1MJCSg4KQorCisvKiBiaXQgMjMtMTYgYXJlIGludGVycnVwdCB0aHJlc2hvbGQgY29udHJvbCAqLworI2RlZmluZSBVU0JfQ01EX0lUQ19OT19USFJFU0hPTEQJKDB4MDA8PDE2KQorI2RlZmluZSBVU0JfQ01EX0lUQ18xX01JQ1JPX0ZSTQkJKDB4MDE8PDE2KQorI2RlZmluZSBVU0JfQ01EX0lUQ18yX01JQ1JPX0ZSTQkJKDB4MDI8PDE2KQorI2RlZmluZSBVU0JfQ01EX0lUQ180X01JQ1JPX0ZSTQkJKDB4MDQ8PDE2KQorI2RlZmluZSBVU0JfQ01EX0lUQ184X01JQ1JPX0ZSTQkJKDB4MDg8PDE2KQorI2RlZmluZSBVU0JfQ01EX0lUQ18xNl9NSUNST19GUk0JKDB4MTA8PDE2KQorI2RlZmluZSBVU0JfQ01EX0lUQ18zMl9NSUNST19GUk0JKDB4MjA8PDE2KQorI2RlZmluZSBVU0JfQ01EX0lUQ182NF9NSUNST19GUk0JKDB4NDA8PDE2KQorI2RlZmluZSBVU0JfQ01EX0lUQ19CSVRfUE9TCQkoMTYpCisKKy8qIFVTQiBTdGF0dXMgUmVnaXN0ZXIgQml0IE1hc2tzICovCisjZGVmaW5lIFVTQl9TVFNfSU5UCQkJKDB4MTw8MCkKKyNkZWZpbmUgVVNCX1NUU19FUlIJCQkoMHgxPDwxKQorI2RlZmluZSBVU0JfU1RTX1BPUlRfQ0hBTkdFCQkoMHgxPDwyKQorI2RlZmluZSBVU0JfU1RTX0ZSTV9MU1RfUk9MTAkJKDB4MTw8MykKKyNkZWZpbmUgVVNCX1NUU19TWVNfRVJSCQkJKDB4MTw8NCkKKyNkZWZpbmUgVVNCX1NUU19JQUEJCQkoMHgxPDw1KQorI2RlZmluZSBVU0JfU1RTX1JFU0VUX1JFQ0VJVkVECQkoMHgxPDw2KQorI2RlZmluZSBVU0JfU1RTX1NPRgkJCSgweDE8PDcpCisjZGVmaW5lIFVTQl9TVFNfRENTVVNQRU5ECQkoMHgxPDw4KQorI2RlZmluZSBVU0JfU1RTX0hDX0hBTFRFRAkJKDB4MTw8MTIpCisjZGVmaW5lIFVTQl9TVFNfUkNMCQkJKDB4MTw8MTMpCisjZGVmaW5lIFVTQl9TVFNfUEVSSU9ESUNfU0NIRURVTEUJKDB4MTw8MTQpCisjZGVmaW5lIFVTQl9TVFNfQVNZTkNfU0NIRURVTEUJCSgweDE8PDE1KQorCisvKiBVU0IgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciBCaXQgTWFza3MgKi8KKyNkZWZpbmUgVVNCX0lOVFJfSU5UX0VOCQkJKDB4MTw8MCkKKyNkZWZpbmUgVVNCX0lOVFJfRVJSX0lOVF9FTgkJKDB4MTw8MSkKKyNkZWZpbmUgVVNCX0lOVFJfUENfREVURUNUX0VOCQkoMHgxPDwyKQorI2RlZmluZSBVU0JfSU5UUl9GUk1fTFNUX1JPTExfRU4JKDB4MTw8MykKKyNkZWZpbmUgVVNCX0lOVFJfU1lTX0VSUl9FTgkJKDB4MTw8NCkKKyNkZWZpbmUgVVNCX0lOVFJfQVNZTl9BRFZfRU4JCSgweDE8PDUpCisjZGVmaW5lIFVTQl9JTlRSX1JFU0VUX0VOCQkoMHgxPDw2KQorI2RlZmluZSBVU0JfSU5UUl9TT0ZfRU4JCQkoMHgxPDw3KQorI2RlZmluZSBVU0JfSU5UUl9ERVZJQ0VfU1VTUEVORAkJKDB4MTw8OCkKKworLyogRGV2aWNlIEFkZHJlc3MgYml0IG1hc2tzICovCisjZGVmaW5lIFVTQl9ERVZJQ0VfQUREUkVTU19NQVNLCQkoMHg3Rjw8MjUpCisjZGVmaW5lIFVTQl9ERVZJQ0VfQUREUkVTU19CSVRfUE9TCSgyNSkKKy8qIFBPUlRTQyAgUmVnaXN0ZXIgQml0IE1hc2tzLE9ubHkgb25lIFBPUlQgaW4gT1RHIG1vZGUqLworI2RlZmluZSBQT1JUU0NfQ1VSUkVOVF9DT05ORUNUX1NUQVRVUwkoMHgxPDwwKQorI2RlZmluZSBQT1JUU0NfQ09OTkVDVF9TVEFUVVNfQ0hBTkdFCSgweDE8PDEpCisjZGVmaW5lIFBPUlRTQ19QT1JUX0VOQUJMRQkJKDB4MTw8MikKKyNkZWZpbmUgUE9SVFNDX1BPUlRfRU5fRElTX0NIQU5HRQkoMHgxPDwzKQorI2RlZmluZSBQT1JUU0NfT1ZFUl9DVVJSRU5UX0FDVAkJKDB4MTw8NCkKKyNkZWZpbmUgUE9SVFNDX09WRVJfQ1VVUkVOVF9DSEcJCSgweDE8PDUpCisjZGVmaW5lIFBPUlRTQ19QT1JUX0ZPUkNFX1JFU1VNRQkoMHgxPDw2KQorI2RlZmluZSBQT1JUU0NfUE9SVF9TVVNQRU5ECQkoMHgxPDw3KQorI2RlZmluZSBQT1JUU0NfUE9SVF9SRVNFVAkJKDB4MTw8OCkKKyNkZWZpbmUgUE9SVFNDX0xJTkVfU1RBVFVTX0JJVFMJCSgweDM8PDEwKQorI2RlZmluZSBQT1JUU0NfUE9SVF9QT1dFUgkJKDB4MTw8MTIpCisjZGVmaW5lIFBPUlRTQ19QT1JUX0lORElDVE9SX0NUUkwJKDB4Mzw8MTQpCisjZGVmaW5lIFBPUlRTQ19QT1JUX1RFU1RfQ1RSTAkJKDB4Rjw8MTYpCisjZGVmaW5lIFBPUlRTQ19XQUtFX09OX0NPTk5FQ1RfRU4JKDB4MTw8MjApCisjZGVmaW5lIFBPUlRTQ19XQUtFX09OX0NPTk5FQ1RfRElTCSgweDE8PDIxKQorI2RlZmluZSBQT1JUU0NfV0FLRV9PTl9PVkVSX0NVUlJFTlQJKDB4MTw8MjIpCisjZGVmaW5lIFBPUlRTQ19QSFlfTE9XX1BPV0VSX1NQRAkoMHgxPDwyMykKKyNkZWZpbmUgUE9SVFNDX1BPUlRfRk9SQ0VfRlVMTF9TUEVFRAkoMHgxPDwyNCkKKyNkZWZpbmUgUE9SVFNDX1BPUlRfU1BFRURfTUFTSwkJKDB4Mzw8MjYpCisjZGVmaW5lIFBPUlRTQ19UUkFOU0NFSVZFUl9XSURUSAkoMHgxPDwyOCkKKyNkZWZpbmUgUE9SVFNDX1BIWV9UWVBFX1NFTAkJKDB4Mzw8MzApCisvKiBiaXQgMTEtMTAgYXJlIGxpbmUgc3RhdHVzICovCisjZGVmaW5lIFBPUlRTQ19MSU5FX1NUQVRVU19TRTAJCSgweDA8PDEwKQorI2RlZmluZSBQT1JUU0NfTElORV9TVEFUVVNfSlNUQVRFCSgweDE8PDEwKQorI2RlZmluZSBQT1JUU0NfTElORV9TVEFUVVNfS1NUQVRFCSgweDI8PDEwKQorI2RlZmluZSBQT1JUU0NfTElORV9TVEFUVVNfVU5ERUYJKDB4Mzw8MTApCisjZGVmaW5lIFBPUlRTQ19MSU5FX1NUQVRVU19CSVRfUE9TCSgxMCkKKworLyogYml0IDE1LTE0IGFyZSBwb3J0IGluZGljYXRvciBjb250cm9sICovCisjZGVmaW5lIFBPUlRTQ19QSUNfT0ZGCQkJKDB4MDw8MTQpCisjZGVmaW5lIFBPUlRTQ19QSUNfQU1CRVIJCSgweDE8PDE0KQorI2RlZmluZSBQT1JUU0NfUElDX0dSRUVOCQkoMHgyPDwxNCkKKyNkZWZpbmUgUE9SVFNDX1BJQ19VTkRFRgkJKDB4Mzw8MTQpCisjZGVmaW5lIFBPUlRTQ19QSUNfQklUX1BPUwkJKDE0KQorCisvKiBiaXQgMTktMTYgYXJlIHBvcnQgdGVzdCBjb250cm9sICovCisjZGVmaW5lIFBPUlRTQ19QVENfRElTQUJMRQkJKDB4MDw8MTYpCisjZGVmaW5lIFBPUlRTQ19QVENfSlNUQVRFCQkoMHgxPDwxNikKKyNkZWZpbmUgUE9SVFNDX1BUQ19LU1RBVEUJCSgweDI8PDE2KQorI2RlZmluZSBQT1JUU0NfUFRDX1NFUU5BSwkJKDB4Mzw8MTYpCisjZGVmaW5lIFBPUlRTQ19QVENfUEFDS0VUCQkoMHg0PDwxNikKKyNkZWZpbmUgUE9SVFNDX1BUQ19GT1JDRV9FTgkJKDB4NTw8MTYpCisjZGVmaW5lIFBPUlRTQ19QVENfQklUX1BPUwkJKDE2KQorCisvKiBiaXQgMjctMjYgYXJlIHBvcnQgc3BlZWQgKi8KKyNkZWZpbmUgUE9SVFNDX1BPUlRfU1BFRURfRlVMTAkJKDB4MDw8MjYpCisjZGVmaW5lIFBPUlRTQ19QT1JUX1NQRUVEX0xPVwkJKDB4MTw8MjYpCisjZGVmaW5lIFBPUlRTQ19QT1JUX1NQRUVEX0hJR0gJCSgweDI8PDI2KQorI2RlZmluZSBQT1JUU0NfUE9SVF9TUEVFRF9VTkRFRgkJKDB4Mzw8MjYpCisjZGVmaW5lIFBPUlRTQ19TUEVFRF9CSVRfUE9TCQkoMjYpCisKKy8qIGJpdCAyOCBpcyBwYXJhbGxlbCB0cmFuc2NlaXZlciB3aWR0aCBmb3IgVVRNSSBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgUE9SVFNDX1BUVwkJCSgweDE8PDI4KQorI2RlZmluZSBQT1JUU0NfUFRXXzhCSVQJCQkoMHgwPDwyOCkKKyNkZWZpbmUgUE9SVFNDX1BUV18xNkJJVAkJKDB4MTw8MjgpCisKKy8qIGJpdCAzMS0zMCBhcmUgcG9ydCB0cmFuc2NlaXZlciBzZWxlY3QgKi8KKyNkZWZpbmUgUE9SVFNDX1BUU19VVE1JCQkJKDB4MDw8MzApCisjZGVmaW5lIFBPUlRTQ19QVFNfVUxQSQkJCSgweDI8PDMwKQorI2RlZmluZSBQT1JUU0NfUFRTX0ZTTFNfU0VSSUFMCQkoMHgzPDwzMCkKKyNkZWZpbmUgUE9SVFNDX1BUU19CSVRfUE9TCQkoMzApCisKKyNkZWZpbmUgUE9SVFNDX1cxQ19CSVRTCQkJXAorCShQT1JUU0NfQ09OTkVDVF9TVEFUVVNfQ0hBTkdFIHwJXAorCSBQT1JUU0NfUE9SVF9FTl9ESVNfQ0hBTkdFICAgIHwJXAorCSBQT1JUU0NfT1ZFUl9DVVVSRU5UX0NIRykKKworLyogT1RHIFN0YXR1cyBDb250cm9sIFJlZ2lzdGVyIEJpdCBNYXNrcyAqLworI2RlZmluZSBPVEdTQ19DVFJMX1ZCVVNfRElTQ0hBUkdFCSgweDE8PDApCisjZGVmaW5lIE9UR1NDX0NUUkxfVkJVU19DSEFSR0UJCSgweDE8PDEpCisjZGVmaW5lIE9UR1NDX0NUUkxfT1RHX1RFUk1JTkFUSU9OCSgweDE8PDMpCisjZGVmaW5lIE9UR1NDX0NUUkxfREFUQV9QVUxTSU5HCQkoMHgxPDw0KQorI2RlZmluZSBPVEdTQ19DVFJMX0lEX1BVTExfRU4JCSgweDE8PDUpCisjZGVmaW5lIE9UR1NDX0hBX0RBVEFfUFVMU0UJCSgweDE8PDYpCisjZGVmaW5lIE9UR1NDX0hBX0JBCQkJKDB4MTw8NykKKyNkZWZpbmUgT1RHU0NfU1RTX1VTQl9JRAkJKDB4MTw8OCkKKyNkZWZpbmUgT1RHU0NfU1RTX0FfVkJVU19WQUxJRAkJKDB4MTw8OSkKKyNkZWZpbmUgT1RHU0NfU1RTX0FfU0VTU0lPTl9WQUxJRAkoMHgxPDwxMCkKKyNkZWZpbmUgT1RHU0NfU1RTX0JfU0VTU0lPTl9WQUxJRAkoMHgxPDwxMSkKKyNkZWZpbmUgT1RHU0NfU1RTX0JfU0VTU0lPTl9FTkQJCSgweDE8PDEyKQorI2RlZmluZSBPVEdTQ19TVFNfMU1TX1RPR0dMRQkJKDB4MTw8MTMpCisjZGVmaW5lIE9UR1NDX1NUU19EQVRBX1BVTFNJTkcJCSgweDE8PDE0KQorI2RlZmluZSBPVEdTQ19JTlRTVFNfVVNCX0lECQkoMHgxPDwxNikKKyNkZWZpbmUgT1RHU0NfSU5UU1RTX0FfVkJVU19WQUxJRAkoMHgxPDwxNykKKyNkZWZpbmUgT1RHU0NfSU5UU1RTX0FfU0VTU0lPTl9WQUxJRAkoMHgxPDwxOCkKKyNkZWZpbmUgT1RHU0NfSU5UU1RTX0JfU0VTU0lPTl9WQUxJRAkoMHgxPDwxOSkKKyNkZWZpbmUgT1RHU0NfSU5UU1RTX0JfU0VTU0lPTl9FTkQJKDB4MTw8MjApCisjZGVmaW5lIE9UR1NDX0lOVFNUU18xTVMJCSgweDE8PDIxKQorI2RlZmluZSBPVEdTQ19JTlRTVFNfREFUQV9QVUxTSU5HCSgweDE8PDIyKQorI2RlZmluZSBPVEdTQ19JTlRSX1VTQl9JRF9FTgkJKDB4MTw8MjQpCisjZGVmaW5lIE9UR1NDX0lOVFJfQV9WQlVTX1ZBTElEX0VOCSgweDE8PDI1KQorI2RlZmluZSBPVEdTQ19JTlRSX0FfU0VTU0lPTl9WQUxJRF9FTgkoMHgxPDwyNikKKyNkZWZpbmUgT1RHU0NfSU5UUl9CX1NFU1NJT05fVkFMSURfRU4JKDB4MTw8MjcpCisjZGVmaW5lIE9UR1NDX0lOVFJfQl9TRVNTSU9OX0VORF9FTgkoMHgxPDwyOCkKKyNkZWZpbmUgT1RHU0NfSU5UUl8xTVNfVElNRVJfRU4JCSgweDE8PDI5KQorI2RlZmluZSBPVEdTQ19JTlRSX0RBVEFfUFVMU0lOR19FTgkoMHgxPDwzMCkKKyNkZWZpbmUgT1RHU0NfSU5UU1RTX01BU0sJCSgweDAwZmYwMDAwKQorCisvKiBVU0IgTU9ERSBSZWdpc3RlciBCaXQgTWFza3MgKi8KKyNkZWZpbmUgIFVTQl9NT0RFX0NUUkxfTU9ERV9JRExFCSgweDA8PDApCisjZGVmaW5lICBVU0JfTU9ERV9DVFJMX01PREVfREVWSUNFCSgweDI8PDApCisjZGVmaW5lICBVU0JfTU9ERV9DVFJMX01PREVfSE9TVAkoMHgzPDwwKQorI2RlZmluZSAgVVNCX01PREVfQ1RSTF9NT0RFX1JTVgkJKDB4MTw8MCkKKyNkZWZpbmUgIFVTQl9NT0RFX1NFVFVQX0xPQ0tfT0ZGCSgweDE8PDMpCisjZGVmaW5lICBVU0JfTU9ERV9TVFJFQU1fRElTQUJMRQkoMHgxPDw0KQorI2RlZmluZSAgVVNCX01PREVfRVMJCQkoMHgxPDwyKSAvKiBFbmRpYW4gU2VsZWN0ICovCisKKy8qIGNvbnRyb2wgUmVnaXN0ZXIgQml0IE1hc2tzICovCisjZGVmaW5lICBVU0JfQ1RSTF9JT0VOQgkJCSgweDE8PDIpCisjZGVmaW5lICBVU0JfQ1RSTF9VTFBJX0lOVDBFTgkJKDB4MTw8MCkKKworLyogQkNTUjUgKi8KKyNkZWZpbmUgQkNTUjVfSU5UX1VTQgkJCSgweDAyKQorCisvKiBVU0IgbW9kdWxlIGNsayBjZmcgKi8KKyNkZWZpbmUgU0NDUl9PRkZTCQkJKDB4QTA4KQorI2RlZmluZSBTQ0NSX1VTQl9DTEtfRElTQUJMRQkJKDB4MDAwMDAwMDApCS8qIFVTQiBjbGsgZGlzYWJsZSAqLworI2RlZmluZSBTQ0NSX1VTQl9NUEhDTV8xMQkJKDB4MDBjMDAwMDApCisjZGVmaW5lIFNDQ1JfVVNCX01QSENNXzAxCQkoMHgwMDQwMDAwMCkKKyNkZWZpbmUgU0NDUl9VU0JfTVBIQ01fMTAJCSgweDAwODAwMDAwKQorI2RlZmluZSBTQ0NSX1VTQl9EUkNNXzExCQkoMHgwMDMwMDAwMCkKKyNkZWZpbmUgU0NDUl9VU0JfRFJDTV8wMQkJKDB4MDAxMDAwMDApCisjZGVmaW5lIFNDQ1JfVVNCX0RSQ01fMTAJCSgweDAwMjAwMDAwKQorCisjZGVmaW5lIFNJQ1JMX09GRlMJCQkoMHgxMTQpCisjZGVmaW5lIFNJQ1JMX1VTQjAJCQkoMHg0MDAwMDAwMCkKKyNkZWZpbmUgU0lDUkxfVVNCMQkJCSgweDIwMDAwMDAwKQorCisjZGVmaW5lIFNJQ1JIX09GRlMJCQkoMHgxMTgpCisjZGVmaW5lIFNJQ1JIX1VTQl9VVE1JCQkJKDB4MDAwMjAwMDApCisKKy8qIE9URyBpbnRlcnJ1cHQgZW5hYmxlIGJpdCBtYXNrcyAqLworI2RlZmluZSAgT1RHU0NfSU5URVJSVVBUX0VOQUJMRV9CSVRTX01BU0sgIFwKKwkoT1RHU0NfSU5UUl9VU0JfSURfRU4gICAgICAgICAgICB8IFwKKwlPVEdTQ19JTlRSXzFNU19USU1FUl9FTgkJIHwgXAorCU9UR1NDX0lOVFJfQV9WQlVTX1ZBTElEX0VOICAgICAgIHwgXAorCU9UR1NDX0lOVFJfQV9TRVNTSU9OX1ZBTElEX0VOICAgIHwgXAorCU9UR1NDX0lOVFJfQl9TRVNTSU9OX1ZBTElEX0VOICAgIHwgXAorCU9UR1NDX0lOVFJfQl9TRVNTSU9OX0VORF9FTiAgICAgIHwgXAorCU9UR1NDX0lOVFJfREFUQV9QVUxTSU5HX0VOKQorCisvKiBPVEcgaW50ZXJydXB0IHN0YXR1cyBiaXQgbWFza3MgKi8KKyNkZWZpbmUgIE9UR1NDX0lOVEVSUlVQVF9TVEFUVVNfQklUU19NQVNLICBcCisJKE9UR1NDX0lOVFNUU19VU0JfSUQgICAgICAgICAgfCAgICBcCisJT1RHU0NfSU5UUl8xTVNfVElNRVJfRU4gICAgICAgfCAgICBcCisJT1RHU0NfSU5UU1RTX0FfVkJVU19WQUxJRCAgICAgfCAgICBcCisJT1RHU0NfSU5UU1RTX0FfU0VTU0lPTl9WQUxJRCAgfCAgICBcCisJT1RHU0NfSU5UU1RTX0JfU0VTU0lPTl9WQUxJRCAgfCAgICBcCisJT1RHU0NfSU5UU1RTX0JfU0VTU0lPTl9FTkQgICAgfCAgICBcCisJT1RHU0NfSU5UU1RTX0RBVEFfUFVMU0lORykKKworLyoKKyAqICBBLURFVklDRSB0aW1pbmcgIGNvbnN0YW50cworICovCisKKy8qIFdhaXQgZm9yIFZCVVMgUmlzZSAgKi8KKyNkZWZpbmUgVEFfV0FJVF9WUklTRQkoMTAwKQkvKiBhX3dhaXRfdnJpc2UgMTAwIG1zLCBzZWN0aW9uOiA2LjYuNS4xICovCisKKy8qIFdhaXQgZm9yIEItQ29ubmVjdCAqLworI2RlZmluZSBUQV9XQUlUX0JDT04JKDEwMDAwKSAgLyogYV93YWl0X2Jjb24gPiAxIHNlYywgc2VjdGlvbjogNi42LjUuMgorCQkJCSAgKiBUaGlzIGlzIG9ubHkgdXNlZCB0byBnZXQgb3V0IG9mCisJCQkJICAqIE9UR19TVEFURV9BX1dBSVRfQkNPTiBzdGF0ZSBpZiB0aGVyZSB3YXMKKwkJCQkgICogbm8gY29ubmVjdGlvbiBmb3IgdGhlc2UgbWFueSBtaWxsaXNlY29uZHMKKwkJCQkgICovCisKKy8qIEEtSWRsZSB0byBCLURpc2Nvbm5lY3QgKi8KKy8qIEl0IGlzIG5lY2Vzc2FyeSBmb3IgdGhpcyB0aW1lciB0byBiZSBtb3JlIHRoYW4gNzUwIG1zIGJlY2F1c2Ugb2YgYSBidWcgaW4gT1BUCisgKiB0ZXN0IDUuNCBpbiB3aGljaCBCIE9QVCBkaXNjb25uZWN0cyBhZnRlciA3NTAgbXMgaW5zdGVhZCBvZiA3NW1zIGFzIHN0YXRlZAorICogaW4gdGhlIHRlc3QgZGVzY3JpcHRpb24KKyAqLworI2RlZmluZSBUQV9BSURMX0JESVMJKDUwMDApCS8qIGFfc3VzcGVuZCBtaW5pbXVtIDIwMCBtcywgc2VjdGlvbjogNi42LjUuMyAqLworCisvKiBCLUlkbGUgdG8gQS1EaXNjb25uZWN0ICovCisjZGVmaW5lIFRBX0JJRExfQURJUwkoMTIpCS8qIDMgdG8gMjAwIG1zICovCisKKy8qIEItZGV2aWNlIHRpbWluZyBjb25zdGFudHMgKi8KKworCisvKiBEYXRhLUxpbmUgUHVsc2UgVGltZSovCisjZGVmaW5lIFRCX0RBVEFfUExTCSgxMCkJLyogYl9zcnBfaW5pdCxjb250aW51ZSA1fjEwbXMsIHNlY3Rpb246NS4zLjMgKi8KKyNkZWZpbmUgVEJfREFUQV9QTFNfTUlOCSg1KQkvKiBtaW5pbXVtIDUgbXMgKi8KKyNkZWZpbmUgVEJfREFUQV9QTFNfTUFYCSgxMCkJLyogbWF4aW11bSAxMCBtcyAqLworCisvKiBTUlAgSW5pdGlhdGUgVGltZSAgKi8KKyNkZWZpbmUgVEJfU1JQX0lOSVQJKDEwMCkJLyogYl9zcnBfaW5pdCxtYXhpbXVtIDEwMCBtcywgc2VjdGlvbjo1LjMuOCAqLworCisvKiBTUlAgRmFpbCBUaW1lICAqLworI2RlZmluZSBUQl9TUlBfRkFJTAkoNzAwMCkJLyogYl9zcnBfaW5pdCxGYWlsIHRpbWUgNX4zMHMsIHNlY3Rpb246Ni44LjIuMiovCisKKy8qIFNSUCByZXN1bHQgd2FpdCB0aW1lICovCisjZGVmaW5lIFRCX1NSUF9XQUlUCSg2MCkKKworLyogVkJ1cyB0aW1lICovCisjZGVmaW5lIFRCX1ZCVVNfUExTCSgzMCkJLyogdGltZSB0byBrZWVwIHZidXMgcHVsc2luZyBhc3NlcnRlZCAqLworCisvKiBEaXNjaGFyZ2UgdGltZSAqLworLyogVGhpcyB0aW1lIHNob3VsZCBiZSBsZXNzIHRoYW4gMTBtcy4gSXQgdmFyaWVzIGZyb20gc3lzdGVtIHRvIHN5c3RlbS4gKi8KKyNkZWZpbmUgVEJfVkJVU19EU0NIUkcJKDgpCisKKy8qIEEtU0UwIHRvIEItUmVzZXQgICovCisjZGVmaW5lIFRCX0FTRTBfQlJTVAkoMjApCS8qIGJfd2FpdF9hY29uLCBtaW5pIDMuMTI1IG1zLHNlY3Rpb246Ni44LjIuNCAqLworCisvKiBBIGJ1cyBzdXNwZW5kIHRpbWVyIGJlZm9yZSB3ZSBjYW4gc3dpdGNoIHRvIGJfd2FpdF9hY29ubiAqLworI2RlZmluZSBUQl9BX1NVU1BFTkQJKDcpCisjZGVmaW5lIFRCX0JVU19SRVNVTUUJKDEyKQorCisvKiBTRTAgVGltZSBCZWZvcmUgU1JQICovCisjZGVmaW5lIFRCX1NFMF9TUlAJKDIpCS8qIGJfaWRsZSxtaW5pbXVtIDIgbXMsIHNlY3Rpb246NS4zLjIgKi8KKworI2RlZmluZSBTRVRfT1RHX1NUQVRFKG90Z19wdHIsIG5ld3N0YXRlKQkoKG90Z19wdHIpLT5zdGF0ZSA9IG5ld3N0YXRlKQorCitzdHJ1Y3QgdXNiX2RyX21tYXAgeworCS8qIENhcGFiaWxpdHkgcmVnaXN0ZXIgKi8KKwl1OCByZXMxWzI1Nl07CisJdTE2IGNhcGxlbmd0aDsJCS8qIENhcGFiaWxpdHkgUmVnaXN0ZXIgTGVuZ3RoICovCisJdTE2IGhjaXZlcnNpb247CQkvKiBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIFZlcnNpb24gKi8KKwl1MzIgaGNzcGFyYW1zOwkJLyogSG9zdCBDb250cm9sbGVyIFN0cnVjdHVhbCBQYXJhbWV0ZXJzICovCisJdTMyIGhjY3BhcmFtczsJCS8qIEhvc3QgQ29udHJvbGxlciBDYXBhYmlsaXR5IFBhcmFtZXRlcnMgKi8KKwl1OCByZXMyWzIwXTsKKwl1MzIgZGNpdmVyc2lvbjsJCS8qIERldmljZSBDb250cm9sbGVyIEludGVyZmFjZSBWZXJzaW9uICovCisJdTMyIGRjY3BhcmFtczsJCS8qIERldmljZSBDb250cm9sbGVyIENhcGFiaWxpdHkgUGFyYW1ldGVycyAqLworCXU4IHJlczNbMjRdOworCS8qIE9wZXJhdGlvbiByZWdpc3RlciAqLworCXUzMiB1c2JjbWQ7CQkvKiBVU0IgQ29tbWFuZCBSZWdpc3RlciAqLworCXUzMiB1c2JzdHM7CQkvKiBVU0IgU3RhdHVzIFJlZ2lzdGVyICovCisJdTMyIHVzYmludHI7CQkvKiBVU0IgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLworCXUzMiBmcmluZGV4OwkJLyogRnJhbWUgSW5kZXggUmVnaXN0ZXIgKi8KKwl1OCByZXM0WzRdOworCXUzMiBkZXZpY2VhZGRyOwkJLyogRGV2aWNlIEFkZHJlc3MgKi8KKwl1MzIgZW5kcG9pbnRsaXN0YWRkcjsJLyogRW5kcG9pbnQgTGlzdCBBZGRyZXNzIFJlZ2lzdGVyICovCisJdTggcmVzNVs0XTsKKwl1MzIgYnVyc3RzaXplOwkJLyogTWFzdGVyIEludGVyZmFjZSBEYXRhIEJ1cnN0IFNpemUgUmVnaXN0ZXIgKi8KKwl1MzIgdHh0dGZpbGx0dW5pbmc7CS8qIFRyYW5zbWl0IEZJRk8gVHVuaW5nIENvbnRyb2xzIFJlZ2lzdGVyICovCisJdTggcmVzNls4XTsKKwl1MzIgdWxwaXZpZXc7CQkvKiBVTFBJIHJlZ2lzdGVyIGFjY2VzcyAqLworCXU4IHJlczdbMTJdOworCXUzMiBjb25maWdmbGFnOwkJLyogQ29uZmlndXJlIEZsYWcgUmVnaXN0ZXIgKi8KKwl1MzIgcG9ydHNjOwkJLyogUG9ydCAxIFN0YXR1cyBhbmQgQ29udHJvbCBSZWdpc3RlciAqLworCXU4IHJlczhbMjhdOworCXUzMiBvdGdzYzsJCS8qIE9uLVRoZS1HbyBTdGF0dXMgYW5kIENvbnRyb2wgKi8KKwl1MzIgdXNibW9kZTsJCS8qIFVTQiBNb2RlIFJlZ2lzdGVyICovCisJdTMyIGVuZHB0c2V0dXBzdGF0OwkvKiBFbmRwb2ludCBTZXR1cCBTdGF0dXMgUmVnaXN0ZXIgKi8KKwl1MzIgZW5kcG9pbnRwcmltZTsJLyogRW5kcG9pbnQgSW5pdGlhbGl6YXRpb24gUmVnaXN0ZXIgKi8KKwl1MzIgZW5kcHRmbHVzaDsJCS8qIEVuZHBvaW50IEZsdXNoIFJlZ2lzdGVyICovCisJdTMyIGVuZHB0c3RhdHVzOwkvKiBFbmRwb2ludCBTdGF0dXMgUmVnaXN0ZXIgKi8KKwl1MzIgZW5kcHRjb21wbGV0ZTsJLyogRW5kcG9pbnQgQ29tcGxldGUgUmVnaXN0ZXIgKi8KKwl1MzIgZW5kcHRjdHJsWzZdOwkvKiBFbmRwb2ludCBDb250cm9sIFJlZ2lzdGVycyAqLworCXU4IHJlczlbNTUyXTsKKwl1MzIgc25vb3AxOworCXUzMiBzbm9vcDI7CisJdTMyIGFnZV9jbnRfdGhyZXNoOwkvKiBBZ2UgQ291bnQgVGhyZXNob2xkIFJlZ2lzdGVyICovCisJdTMyIHByaV9jdHJsOwkJLyogUHJpb3JpdHkgQ29udHJvbCBSZWdpc3RlciAqLworCXUzMiBzaV9jdHJsOwkJLyogU3lzdGVtIEludGVyZmFjZSBDb250cm9sIFJlZ2lzdGVyICovCisJdTggcmVzMTBbMjM2XTsKKwl1MzIgY29udHJvbDsJCS8qIEdlbmVyYWwgUHVycG9zZSBDb250cm9sIFJlZ2lzdGVyICovCit9OworCitzdHJ1Y3QgZnNsX290Z190aW1lciB7CisJdW5zaWduZWQgbG9uZyBleHBpcmVzOwkvKiBOdW1iZXIgb2YgY291bnQgaW5jcmVhc2UgdG8gdGltZW91dCAqLworCXVuc2lnbmVkIGxvbmcgY291bnQ7CS8qIFRpY2sgY291bnRlciAqLworCXZvaWQgKCpmdW5jdGlvbikodW5zaWduZWQgbG9uZyk7CS8qIFRpbWVvdXQgZnVuY3Rpb24gKi8KKwl1bnNpZ25lZCBsb25nIGRhdGE7CS8qIERhdGEgcGFzc2VkIHRvIGZ1bmN0aW9uICovCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKworaW5saW5lIHN0cnVjdCBmc2xfb3RnX3RpbWVyICpvdGdfdGltZXJfaW5pdGlhbGl6ZXIKKyh2b2lkICgqZnVuY3Rpb24pKHVuc2lnbmVkIGxvbmcpLCB1bnNpZ25lZCBsb25nIGV4cGlyZXMsIHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgZnNsX290Z190aW1lciAqdGltZXI7CisKKwl0aW1lciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBmc2xfb3RnX3RpbWVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0aW1lcikKKwkJcmV0dXJuIE5VTEw7CisJdGltZXItPmZ1bmN0aW9uID0gZnVuY3Rpb247CisJdGltZXItPmV4cGlyZXMgPSBleHBpcmVzOworCXRpbWVyLT5kYXRhID0gZGF0YTsKKwlyZXR1cm4gdGltZXI7Cit9CisKK3N0cnVjdCBmc2xfb3RnIHsKKwlzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyIG90ZzsKKwlzdHJ1Y3Qgb3RnX2ZzbSBmc207CisJc3RydWN0IHVzYl9kcl9tbWFwICpkcl9tZW1fbWFwOworCXN0cnVjdCBkZWxheWVkX3dvcmsgb3RnX2V2ZW50OworCisJLyogdXNlZCBmb3IgdXNiIGhvc3QgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29ya193cTsKKwl1OAlob3N0X3dvcmtpbmc7CisKKwlpbnQgaXJxOworfTsKKworc3RydWN0IGZzbF9vdGdfY29uZmlnIHsKKwl1OCBvdGdfcG9ydDsKK307CisKKy8qIEZvciBTUlAgYW5kIEhOUCBoYW5kbGUgKi8KKyNkZWZpbmUgRlNMX09UR19NQUpPUgkJMjQwCisjZGVmaW5lIEZTTF9PVEdfTkFNRQkJImZzbC11c2IyLW90ZyIKKy8qIENvbW1hbmQgdG8gT1RHIGRyaXZlciBpb2N0bCAqLworI2RlZmluZSBPVEdfSU9DVExfTUFHSUMJCUZTTF9PVEdfTUFKT1IKKy8qIGlmIG90ZyB3b3JrIGFzIGhvc3QsIGl0IHNob3VsZCByZXR1cm4gMSwgb3RoZXJ3aXNlIHJldHVybiAwICovCisjZGVmaW5lIEdFVF9PVEdfU1RBVFVTCQlfSU9SKE9UR19JT0NUTF9NQUdJQywgMSwgaW50KQorI2RlZmluZSBTRVRfQV9TVVNQRU5EX1JFUQlfSU9XKE9UR19JT0NUTF9NQUdJQywgMiwgaW50KQorI2RlZmluZSBTRVRfQV9CVVNfRFJPUAkJX0lPVyhPVEdfSU9DVExfTUFHSUMsIDMsIGludCkKKyNkZWZpbmUgU0VUX0FfQlVTX1JFUQkJX0lPVyhPVEdfSU9DVExfTUFHSUMsIDQsIGludCkKKyNkZWZpbmUgU0VUX0JfQlVTX1JFUQkJX0lPVyhPVEdfSU9DVExfTUFHSUMsIDUsIGludCkKKyNkZWZpbmUgR0VUX0FfU1VTUEVORF9SRVEJX0lPUihPVEdfSU9DVExfTUFHSUMsIDYsIGludCkKKyNkZWZpbmUgR0VUX0FfQlVTX0RST1AJCV9JT1IoT1RHX0lPQ1RMX01BR0lDLCA3LCBpbnQpCisjZGVmaW5lIEdFVF9BX0JVU19SRVEJCV9JT1IoT1RHX0lPQ1RMX01BR0lDLCA4LCBpbnQpCisjZGVmaW5lIEdFVF9CX0JVU19SRVEJCV9JT1IoT1RHX0lPQ1RMX01BR0lDLCA5LCBpbnQpCisKK3ZvaWQgZnNsX290Z19hZGRfdGltZXIodm9pZCAqdGltZXIpOwordm9pZCBmc2xfb3RnX2RlbF90aW1lcih2b2lkICp0aW1lcik7Cit2b2lkIGZzbF9vdGdfcHVsc2VfdmJ1cyh2b2lkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL290Zy9ncGlvX3ZidXMuYyBiL2RyaXZlcnMvdXNiL290Zy9ncGlvX3ZidXMuYwppbmRleCAyMjFjNDQ0Li41MjczM2Q5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9vdGcvZ3Bpb192YnVzLmMKKysrIGIvZHJpdmVycy91c2Ivb3RnL2dwaW9fdmJ1cy5jCkBAIC0yNzksNiArMjc5LDEzIEBACiAJfQogCUlOSVRfV09SSygmZ3Bpb192YnVzLT53b3JrLCBncGlvX3ZidXNfd29yayk7CiAKKwlncGlvX3ZidXMtPnZidXNfZHJhdyA9IHJlZ3VsYXRvcl9nZXQoJnBkZXYtPmRldiwgInZidXNfZHJhdyIpOworCWlmIChJU19FUlIoZ3Bpb192YnVzLT52YnVzX2RyYXcpKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNhbid0IGdldCB2YnVzX2RyYXcgcmVndWxhdG9yLCBlcnI6ICVsZFxuIiwKKwkJCVBUUl9FUlIoZ3Bpb192YnVzLT52YnVzX2RyYXcpKTsKKwkJZ3Bpb192YnVzLT52YnVzX2RyYXcgPSBOVUxMOworCX0KKwogCS8qIG9ubHkgYWN0aXZlIHdoZW4gYSBnYWRnZXQgaXMgcmVnaXN0ZXJlZCAqLwogCWVyciA9IG90Z19zZXRfdHJhbnNjZWl2ZXIoJmdwaW9fdmJ1cy0+b3RnKTsKIAlpZiAoZXJyKSB7CkBAIC0yODcsMTMgKzI5NCw2IEBACiAJCWdvdG8gZXJyX290ZzsKIAl9CiAKLQlncGlvX3ZidXMtPnZidXNfZHJhdyA9IHJlZ3VsYXRvcl9nZXQoJnBkZXYtPmRldiwgInZidXNfZHJhdyIpOwotCWlmIChJU19FUlIoZ3Bpb192YnVzLT52YnVzX2RyYXcpKSB7Ci0JCWRldl9kYmcoJnBkZXYtPmRldiwgImNhbid0IGdldCB2YnVzX2RyYXcgcmVndWxhdG9yLCBlcnI6ICVsZFxuIiwKLQkJCVBUUl9FUlIoZ3Bpb192YnVzLT52YnVzX2RyYXcpKTsKLQkJZ3Bpb192YnVzLT52YnVzX2RyYXcgPSBOVUxMOwotCX0KLQogCXJldHVybiAwOwogZXJyX290ZzoKIAlmcmVlX2lycShpcnEsICZwZGV2LT5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivb3RnL2lzcDEzMDFfb21hcC5jIGIvZHJpdmVycy91c2Ivb3RnL2lzcDEzMDFfb21hcC5jCmluZGV4IGUyNTcwMGYuLjhjMjgyMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL290Zy9pc3AxMzAxX29tYXAuYworKysgYi9kcml2ZXJzL3VzYi9vdGcvaXNwMTMwMV9vbWFwLmMKQEAgLTIzNCwyOSArMjM0LDkgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGNvbnN0IGNoYXIgKnN0YXRlX3N0cmluZyhlbnVtIHVzYl9vdGdfc3RhdGUgc3RhdGUpCi17Ci0Jc3dpdGNoIChzdGF0ZSkgewotCWNhc2UgT1RHX1NUQVRFX0FfSURMRToJCXJldHVybiAiYV9pZGxlIjsKLQljYXNlIE9UR19TVEFURV9BX1dBSVRfVlJJU0U6CXJldHVybiAiYV93YWl0X3ZyaXNlIjsKLQljYXNlIE9UR19TVEFURV9BX1dBSVRfQkNPTjoJcmV0dXJuICJhX3dhaXRfYmNvbiI7Ci0JY2FzZSBPVEdfU1RBVEVfQV9IT1NUOgkJcmV0dXJuICJhX2hvc3QiOwotCWNhc2UgT1RHX1NUQVRFX0FfU1VTUEVORDoJcmV0dXJuICJhX3N1c3BlbmQiOwotCWNhc2UgT1RHX1NUQVRFX0FfUEVSSVBIRVJBTDoJcmV0dXJuICJhX3BlcmlwaGVyYWwiOwotCWNhc2UgT1RHX1NUQVRFX0FfV0FJVF9WRkFMTDoJcmV0dXJuICJhX3dhaXRfdmZhbGwiOwotCWNhc2UgT1RHX1NUQVRFX0FfVkJVU19FUlI6CXJldHVybiAiYV92YnVzX2VyciI7Ci0JY2FzZSBPVEdfU1RBVEVfQl9JRExFOgkJcmV0dXJuICJiX2lkbGUiOwotCWNhc2UgT1RHX1NUQVRFX0JfU1JQX0lOSVQ6CXJldHVybiAiYl9zcnBfaW5pdCI7Ci0JY2FzZSBPVEdfU1RBVEVfQl9QRVJJUEhFUkFMOglyZXR1cm4gImJfcGVyaXBoZXJhbCI7Ci0JY2FzZSBPVEdfU1RBVEVfQl9XQUlUX0FDT046CXJldHVybiAiYl93YWl0X2Fjb24iOwotCWNhc2UgT1RHX1NUQVRFX0JfSE9TVDoJCXJldHVybiAiYl9ob3N0IjsKLQlkZWZhdWx0OgkJCXJldHVybiAiVU5ERUZJTkVEIjsKLQl9Ci19Ci0KIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqc3RhdGVfbmFtZShzdHJ1Y3QgaXNwMTMwMSAqaXNwKQogewotCXJldHVybiBzdGF0ZV9zdHJpbmcoaXNwLT5vdGcuc3RhdGUpOworCXJldHVybiBvdGdfc3RhdGVfc3RyaW5nKGlzcC0+b3RnLnN0YXRlKTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTUwMSw3ICs0ODEsNyBAQAogCWlmIChpc3AtPm90Zy5zdGF0ZSA9PSBzdGF0ZSAmJiAhZXh0cmEpCiAJCXJldHVybjsKIAlwcl9kZWJ1Zygib3RnOiAlcyBGU00gJXMvJTAyeCwgJXMsICUwNnhcbiIsIHRhZywKLQkJc3RhdGVfc3RyaW5nKHN0YXRlKSwgZnNtLCBzdGF0ZV9uYW1lKGlzcCksCisJCW90Z19zdGF0ZV9zdHJpbmcoc3RhdGUpLCBmc20sIHN0YXRlX25hbWUoaXNwKSwKIAkJb21hcF9yZWFkbChPVEdfQ1RSTCkpOwogfQogCkBAIC0xMDk1LDcgKzEwNzUsNyBAQAogCiAJaWYgKHN0YXRlICE9IGlzcC0+b3RnLnN0YXRlKQogCQlwcl9kZWJ1ZygiICBpc3AsICVzIC0+ICVzXG4iLAotCQkJCXN0YXRlX3N0cmluZyhzdGF0ZSksIHN0YXRlX25hbWUoaXNwKSk7CisJCQkJb3RnX3N0YXRlX3N0cmluZyhzdGF0ZSksIHN0YXRlX25hbWUoaXNwKSk7CiAKICNpZmRlZglDT05GSUdfVVNCX09URwogCS8qIHVwZGF0ZSB0aGUgT1RHIGNvbnRyb2xsZXIgc3RhdGUgdG8gbWF0Y2ggdGhlIGlzcDEzMDE7IG1heQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivb3RnL2xhbmd3ZWxsX290Zy5jIGIvZHJpdmVycy91c2Ivb3RnL2xhbmd3ZWxsX290Zy5jCmluZGV4IGU5NzNmZjEuLmYwOGY3ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL290Zy9sYW5nd2VsbF9vdGcuYworKysgYi9kcml2ZXJzL3VzYi9vdGcvbGFuZ3dlbGxfb3RnLmMKQEAgLTgyLDQwICs4Miw2IEBACiAJLnJlc3VtZSA9CWxhbmd3ZWxsX290Z19yZXN1bWUsCiB9OwogCi1zdGF0aWMgY29uc3QgY2hhciAqc3RhdGVfc3RyaW5nKGVudW0gdXNiX290Z19zdGF0ZSBzdGF0ZSkKLXsKLQlzd2l0Y2ggKHN0YXRlKSB7Ci0JY2FzZSBPVEdfU1RBVEVfQV9JRExFOgotCQlyZXR1cm4gImFfaWRsZSI7Ci0JY2FzZSBPVEdfU1RBVEVfQV9XQUlUX1ZSSVNFOgotCQlyZXR1cm4gImFfd2FpdF92cmlzZSI7Ci0JY2FzZSBPVEdfU1RBVEVfQV9XQUlUX0JDT046Ci0JCXJldHVybiAiYV93YWl0X2Jjb24iOwotCWNhc2UgT1RHX1NUQVRFX0FfSE9TVDoKLQkJcmV0dXJuICJhX2hvc3QiOwotCWNhc2UgT1RHX1NUQVRFX0FfU1VTUEVORDoKLQkJcmV0dXJuICJhX3N1c3BlbmQiOwotCWNhc2UgT1RHX1NUQVRFX0FfUEVSSVBIRVJBTDoKLQkJcmV0dXJuICJhX3BlcmlwaGVyYWwiOwotCWNhc2UgT1RHX1NUQVRFX0FfV0FJVF9WRkFMTDoKLQkJcmV0dXJuICJhX3dhaXRfdmZhbGwiOwotCWNhc2UgT1RHX1NUQVRFX0FfVkJVU19FUlI6Ci0JCXJldHVybiAiYV92YnVzX2VyciI7Ci0JY2FzZSBPVEdfU1RBVEVfQl9JRExFOgotCQlyZXR1cm4gImJfaWRsZSI7Ci0JY2FzZSBPVEdfU1RBVEVfQl9TUlBfSU5JVDoKLQkJcmV0dXJuICJiX3NycF9pbml0IjsKLQljYXNlIE9UR19TVEFURV9CX1BFUklQSEVSQUw6Ci0JCXJldHVybiAiYl9wZXJpcGhlcmFsIjsKLQljYXNlIE9UR19TVEFURV9CX1dBSVRfQUNPTjoKLQkJcmV0dXJuICJiX3dhaXRfYWNvbiI7Ci0JY2FzZSBPVEdfU1RBVEVfQl9IT1NUOgotCQlyZXR1cm4gImJfaG9zdCI7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuICJVTkRFRklORUQiOwotCX0KLX0KLQogLyogSFNNIHRpbWVycyAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgbGFuZ3dlbGxfb3RnX3RpbWVyICpvdGdfdGltZXJfaW5pdGlhbGl6ZXIKICh2b2lkICgqZnVuY3Rpb24pKHVuc2lnbmVkIGxvbmcpLCB1bnNpZ25lZCBsb25nIGV4cGlyZXMsIHVuc2lnbmVkIGxvbmcgZGF0YSkKQEAgLTk2OCw3ICs5MzQsNyBAQAogCXBkZXYgPSB0b19wY2lfZGV2KGxudy0+ZGV2KTsKIAogCWRldl9kYmcobG53LT5kZXYsICIlczogb2xkIHN0YXRlID0gJXNcbiIsIF9fZnVuY19fLAotCQkJc3RhdGVfc3RyaW5nKGlvdGctPm90Zy5zdGF0ZSkpOworCQkJb3RnX3N0YXRlX3N0cmluZyhpb3RnLT5vdGcuc3RhdGUpKTsKIAogCXN3aXRjaCAoaW90Zy0+b3RnLnN0YXRlKSB7CiAJY2FzZSBPVEdfU1RBVEVfVU5ERUZJTkVEOgpAQCAtMTcwMyw3ICsxNjY5LDcgQEAKIAl9CiAKIAlkZXZfZGJnKGxudy0+ZGV2LCAiJXM6IG5ldyBzdGF0ZSA9ICVzXG4iLCBfX2Z1bmNfXywKLQkJCXN0YXRlX3N0cmluZyhpb3RnLT5vdGcuc3RhdGUpKTsKKwkJCW90Z19zdGF0ZV9zdHJpbmcoaW90Zy0+b3RnLnN0YXRlKSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90CkBAIC0xNzg5LDcgKzE3NTUsNyBAQAogCQkiYl9idXNfcmVxID0gXHQlZFxuIgogCQkiYl9idXNfc3VzcGVuZF90bW91dCA9IFx0JWRcbiIKIAkJImJfYnVzX3N1c3BlbmRfdmxkID0gXHQlZFxuIiwKLQkJc3RhdGVfc3RyaW5nKGlvdGctPm90Zy5zdGF0ZSksCisJCW90Z19zdGF0ZV9zdHJpbmcoaW90Zy0+b3RnLnN0YXRlKSwKIAkJaW90Zy0+aHNtLmFfYnVzX3Jlc3VtZSwKIAkJaW90Zy0+aHNtLmFfYnVzX3N1c3BlbmQsCiAJCWlvdGctPmhzbS5hX2Nvbm4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9vdGcvbXNtX290Zy5jIGIvZHJpdmVycy91c2Ivb3RnL21zbV9vdGcuYwppbmRleCAyOTY1OTg2Li5iMjc2ZjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9vdGcvbXNtX290Zy5jCisrKyBiL2RyaXZlcnMvdXNiL290Zy9tc21fb3RnLmMKQEAgLTEsNCArMSw0IEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYi9oY2QuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvbXNtX2hzdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL21zbV9oc3VzYl9ody5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogCiAjaW5jbHVkZSA8bWFjaC9jbGsuaD4KIApAQCAtNDUsNiArNDYsMTk1IEBACiAjZGVmaW5lIERSSVZFUl9OQU1FCSJtc21fb3RnIgogCiAjZGVmaW5lIFVMUElfSU9fVElNRU9VVF9VU0VDCSgxMCAqIDEwMDApCisKKyNkZWZpbmUgVVNCX1BIWV8zUDNfVk9MX01JTgkzMDUwMDAwIC8qIHVWICovCisjZGVmaW5lIFVTQl9QSFlfM1AzX1ZPTF9NQVgJMzMwMDAwMCAvKiB1ViAqLworI2RlZmluZSBVU0JfUEhZXzNQM19IUE1fTE9BRAk1MDAwMAkvKiB1QSAqLworI2RlZmluZSBVU0JfUEhZXzNQM19MUE1fTE9BRAk0MDAwCS8qIHVBICovCisKKyNkZWZpbmUgVVNCX1BIWV8xUDhfVk9MX01JTgkxODAwMDAwIC8qIHVWICovCisjZGVmaW5lIFVTQl9QSFlfMVA4X1ZPTF9NQVgJMTgwMDAwMCAvKiB1ViAqLworI2RlZmluZSBVU0JfUEhZXzFQOF9IUE1fTE9BRAk1MDAwMAkvKiB1QSAqLworI2RlZmluZSBVU0JfUEhZXzFQOF9MUE1fTE9BRAk0MDAwCS8qIHVBICovCisKKyNkZWZpbmUgVVNCX1BIWV9WRERfRElHX1ZPTF9NSU4JMTAwMDAwMCAvKiB1ViAqLworI2RlZmluZSBVU0JfUEhZX1ZERF9ESUdfVk9MX01BWAkxMzIwMDAwIC8qIHVWICovCisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yICpoc3VzYl8zcDM7CitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvciAqaHN1c2JfMXA4Oworc3RhdGljIHN0cnVjdCByZWd1bGF0b3IgKmhzdXNiX3ZkZGN4OworCitzdGF0aWMgaW50IG1zbV9oc3VzYl9pbml0X3ZkZGN4KHN0cnVjdCBtc21fb3RnICptb3RnLCBpbnQgaW5pdCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChpbml0KSB7CisJCWhzdXNiX3ZkZGN4ID0gcmVndWxhdG9yX2dldChtb3RnLT5vdGcuZGV2LCAiSFNVU0JfVkREQ1giKTsKKwkJaWYgKElTX0VSUihoc3VzYl92ZGRjeCkpIHsKKwkJCWRldl9lcnIobW90Zy0+b3RnLmRldiwgInVuYWJsZSB0byBnZXQgaHN1c2IgdmRkY3hcbiIpOworCQkJcmV0dXJuIFBUUl9FUlIoaHN1c2JfdmRkY3gpOworCQl9CisKKwkJcmV0ID0gcmVndWxhdG9yX3NldF92b2x0YWdlKGhzdXNiX3ZkZGN4LAorCQkJCVVTQl9QSFlfVkREX0RJR19WT0xfTUlOLAorCQkJCVVTQl9QSFlfVkREX0RJR19WT0xfTUFYKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2Vycihtb3RnLT5vdGcuZGV2LCAidW5hYmxlIHRvIHNldCB0aGUgdm9sdGFnZSAiCisJCQkJCSJmb3IgaHN1c2IgdmRkY3hcbiIpOworCQkJcmVndWxhdG9yX3B1dChoc3VzYl92ZGRjeCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJcmV0ID0gcmVndWxhdG9yX2VuYWJsZShoc3VzYl92ZGRjeCk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIobW90Zy0+b3RnLmRldiwgInVuYWJsZSB0byBlbmFibGUgaHN1c2IgdmRkY3hcbiIpOworCQkJcmVndWxhdG9yX3B1dChoc3VzYl92ZGRjeCk7CisJCX0KKwl9IGVsc2UgeworCQlyZXQgPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2UoaHN1c2JfdmRkY3gsIDAsCisJCQlVU0JfUEhZX1ZERF9ESUdfVk9MX01BWCk7CisJCWlmIChyZXQpCisJCQlkZXZfZXJyKG1vdGctPm90Zy5kZXYsICJ1bmFibGUgdG8gc2V0IHRoZSB2b2x0YWdlICIKKwkJCQkJImZvciBoc3VzYiB2ZGRjeFxuIik7CisJCXJldCA9IHJlZ3VsYXRvcl9kaXNhYmxlKGhzdXNiX3ZkZGN4KTsKKwkJaWYgKHJldCkKKwkJCWRldl9lcnIobW90Zy0+b3RnLmRldiwgInVuYWJsZSB0byBkaXNhYmxlIGhzdXNiIHZkZGN4XG4iKTsKKworCQlyZWd1bGF0b3JfcHV0KGhzdXNiX3ZkZGN4KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1zbV9oc3VzYl9sZG9faW5pdChzdHJ1Y3QgbXNtX290ZyAqbW90ZywgaW50IGluaXQpCit7CisJaW50IHJjID0gMDsKKworCWlmIChpbml0KSB7CisJCWhzdXNiXzNwMyA9IHJlZ3VsYXRvcl9nZXQobW90Zy0+b3RnLmRldiwgIkhTVVNCXzNwMyIpOworCQlpZiAoSVNfRVJSKGhzdXNiXzNwMykpIHsKKwkJCWRldl9lcnIobW90Zy0+b3RnLmRldiwgInVuYWJsZSB0byBnZXQgaHN1c2IgM3AzXG4iKTsKKwkJCXJldHVybiBQVFJfRVJSKGhzdXNiXzNwMyk7CisJCX0KKworCQlyYyA9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZShoc3VzYl8zcDMsIFVTQl9QSFlfM1AzX1ZPTF9NSU4sCisJCQkJVVNCX1BIWV8zUDNfVk9MX01BWCk7CisJCWlmIChyYykgeworCQkJZGV2X2Vycihtb3RnLT5vdGcuZGV2LCAidW5hYmxlIHRvIHNldCB2b2x0YWdlIGxldmVsICIKKwkJCQkJImZvciBoc3VzYiAzcDNcbiIpOworCQkJZ290byBwdXRfM3AzOworCQl9CisJCXJjID0gcmVndWxhdG9yX2VuYWJsZShoc3VzYl8zcDMpOworCQlpZiAocmMpIHsKKwkJCWRldl9lcnIobW90Zy0+b3RnLmRldiwgInVuYWJsZSB0byBlbmFibGUgdGhlIGhzdXNiIDNwM1xuIik7CisJCQlnb3RvIHB1dF8zcDM7CisJCX0KKwkJaHN1c2JfMXA4ID0gcmVndWxhdG9yX2dldChtb3RnLT5vdGcuZGV2LCAiSFNVU0JfMXA4Iik7CisJCWlmIChJU19FUlIoaHN1c2JfMXA4KSkgeworCQkJZGV2X2Vycihtb3RnLT5vdGcuZGV2LCAidW5hYmxlIHRvIGdldCBoc3VzYiAxcDhcbiIpOworCQkJcmMgPSBQVFJfRVJSKGhzdXNiXzFwOCk7CisJCQlnb3RvIGRpc2FibGVfM3AzOworCQl9CisJCXJjID0gcmVndWxhdG9yX3NldF92b2x0YWdlKGhzdXNiXzFwOCwgVVNCX1BIWV8xUDhfVk9MX01JTiwKKwkJCQlVU0JfUEhZXzFQOF9WT0xfTUFYKTsKKwkJaWYgKHJjKSB7CisJCQlkZXZfZXJyKG1vdGctPm90Zy5kZXYsICJ1bmFibGUgdG8gc2V0IHZvbHRhZ2UgbGV2ZWwgIgorCQkJCQkiZm9yIGhzdXNiIDFwOFxuIik7CisJCQlnb3RvIHB1dF8xcDg7CisJCX0KKwkJcmMgPSByZWd1bGF0b3JfZW5hYmxlKGhzdXNiXzFwOCk7CisJCWlmIChyYykgeworCQkJZGV2X2Vycihtb3RnLT5vdGcuZGV2LCAidW5hYmxlIHRvIGVuYWJsZSB0aGUgaHN1c2IgMXA4XG4iKTsKKwkJCWdvdG8gcHV0XzFwODsKKwkJfQorCisJCXJldHVybiAwOworCX0KKworCXJlZ3VsYXRvcl9kaXNhYmxlKGhzdXNiXzFwOCk7CitwdXRfMXA4OgorCXJlZ3VsYXRvcl9wdXQoaHN1c2JfMXA4KTsKK2Rpc2FibGVfM3AzOgorCXJlZ3VsYXRvcl9kaXNhYmxlKGhzdXNiXzNwMyk7CitwdXRfM3AzOgorCXJlZ3VsYXRvcl9wdXQoaHN1c2JfM3AzKTsKKwlyZXR1cm4gcmM7Cit9CisKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKKyNkZWZpbmUgVVNCX1BIWV9TVVNQX0RJR19WT0wgIDUwMDAwMAorc3RhdGljIGludCBtc21faHN1c2JfY29uZmlnX3ZkZGN4KGludCBoaWdoKQoreworCWludCBtYXhfdm9sID0gVVNCX1BIWV9WRERfRElHX1ZPTF9NQVg7CisJaW50IG1pbl92b2w7CisJaW50IHJldDsKKworCWlmIChoaWdoKQorCQltaW5fdm9sID0gVVNCX1BIWV9WRERfRElHX1ZPTF9NSU47CisJZWxzZQorCQltaW5fdm9sID0gVVNCX1BIWV9TVVNQX0RJR19WT0w7CisKKwlyZXQgPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2UoaHN1c2JfdmRkY3gsIG1pbl92b2wsIG1heF92b2wpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCIlczogdW5hYmxlIHRvIHNldCB0aGUgdm9sdGFnZSBmb3IgcmVndWxhdG9yICIKKwkJCSJIU1VTQl9WRERDWFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gcmV0OworCX0KKworCXByX2RlYnVnKCIlczogbWluX3ZvbDolZCBtYXhfdm9sOiVkXG4iLCBfX2Z1bmNfXywgbWluX3ZvbCwgbWF4X3ZvbCk7CisKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgbXNtX2hzdXNiX2xkb19zZXRfbW9kZShpbnQgb24pCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWhzdXNiXzFwOCB8fCBJU19FUlIoaHN1c2JfMXA4KSkgeworCQlwcl9lcnIoIiVzOiBIU1VTQl8xcDggaXMgbm90IGluaXRpYWxpemVkXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICghaHN1c2JfM3AzIHx8IElTX0VSUihoc3VzYl8zcDMpKSB7CisJCXByX2VycigiJXM6IEhTVVNCXzNwMyBpcyBub3QgaW5pdGlhbGl6ZWRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKG9uKSB7CisJCXJldCA9IHJlZ3VsYXRvcl9zZXRfb3B0aW11bV9tb2RlKGhzdXNiXzFwOCwKKwkJCQlVU0JfUEhZXzFQOF9IUE1fTE9BRCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcl9lcnIoIiVzOiBVbmFibGUgdG8gc2V0IEhQTSBvZiB0aGUgcmVndWxhdG9yICIKKwkJCQkiSFNVU0JfMXA4XG4iLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCXJldCA9IHJlZ3VsYXRvcl9zZXRfb3B0aW11bV9tb2RlKGhzdXNiXzNwMywKKwkJCQlVU0JfUEhZXzNQM19IUE1fTE9BRCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcl9lcnIoIiVzOiBVbmFibGUgdG8gc2V0IEhQTSBvZiB0aGUgcmVndWxhdG9yICIKKwkJCQkiSFNVU0JfM3AzXG4iLCBfX2Z1bmNfXyk7CisJCQlyZWd1bGF0b3Jfc2V0X29wdGltdW1fbW9kZShoc3VzYl8xcDgsCisJCQkJVVNCX1BIWV8xUDhfTFBNX0xPQUQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0gZWxzZSB7CisJCXJldCA9IHJlZ3VsYXRvcl9zZXRfb3B0aW11bV9tb2RlKGhzdXNiXzFwOCwKKwkJCQlVU0JfUEhZXzFQOF9MUE1fTE9BRCk7CisJCWlmIChyZXQgPCAwKQorCQkJcHJfZXJyKCIlczogVW5hYmxlIHRvIHNldCBMUE0gb2YgdGhlIHJlZ3VsYXRvciAiCisJCQkJIkhTVVNCXzFwOFxuIiwgX19mdW5jX18pOworCQlyZXQgPSByZWd1bGF0b3Jfc2V0X29wdGltdW1fbW9kZShoc3VzYl8zcDMsCisJCQkJVVNCX1BIWV8zUDNfTFBNX0xPQUQpOworCQlpZiAocmV0IDwgMCkKKwkJCXByX2VycigiJXM6IFVuYWJsZSB0byBzZXQgTFBNIG9mIHRoZSByZWd1bGF0b3IgIgorCQkJCSJIU1VTQl8zcDNcbiIsIF9fZnVuY19fKTsKKwl9CisKKwlwcl9kZWJ1ZygicmVnICglcylcbiIsIG9uID8gIkhQTSIgOiAiTFBNIik7CisJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAwOworfQorCiBzdGF0aWMgaW50IHVscGlfcmVhZChzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcsIHUzMiByZWcpCiB7CiAJc3RydWN0IG1zbV9vdGcgKm1vdGcgPSBjb250YWluZXJfb2Yob3RnLCBzdHJ1Y3QgbXNtX290Zywgb3RnKTsKQEAgLTI2OCwyNyArNDU4LDI4IEBACiAKIAlkaXNhYmxlX2lycShtb3RnLT5pcnEpOwogCS8qCisJICogQ2hpcGlkZWEgNDUtbm0gUEhZIHN1c3BlbmQgc2VxdWVuY2U6CisJICoKIAkgKiBJbnRlcnJ1cHQgTGF0Y2ggUmVnaXN0ZXIgYXV0by1jbGVhciBmZWF0dXJlIGlzIG5vdCBwcmVzZW50CiAJICogaW4gYWxsIFBIWSB2ZXJzaW9ucy4gTGF0Y2ggcmVnaXN0ZXIgaXMgY2xlYXIgb24gcmVhZCB0eXBlLgogCSAqIENsZWFyIGxhdGNoIHJlZ2lzdGVyIHRvIGF2b2lkIHNwdXJpb3VzIHdha2V1cCBmcm9tCiAJICogbG93IHBvd2VyIG1vZGUgKExQTSkuCi0JICovCi0JdWxwaV9yZWFkKG90ZywgMHgxNCk7Ci0KLQkvKgorCSAqCiAJICogUEhZIGNvbXBhcmF0b3JzIGFyZSBkaXNhYmxlZCB3aGVuIFBIWSBlbnRlcnMgaW50byBsb3cgcG93ZXIKIAkgKiBtb2RlIChMUE0pLiBLZWVwIFBIWSBjb21wYXJhdG9ycyBPTiBpbiBMUE0gb25seSB3aGVuIHdlIGV4cGVjdAogCSAqIFZCVVMvSWQgbm90aWZpY2F0aW9ucyBmcm9tIFVTQiBQSFkuIE90aGVyd2lzZSB0dXJuIG9mZiBVU0IKIAkgKiBQSFkgY29tcGFyYXRvcnMuIFRoaXMgc2F2ZSBzaWduaWZpY2FudCBhbW91bnQgb2YgcG93ZXIuCi0JICovCi0JaWYgKHBkYXRhLT5vdGdfY29udHJvbCA9PSBPVEdfUEhZX0NPTlRST0wpCi0JCXVscGlfd3JpdGUob3RnLCAweDAxLCAweDMwKTsKLQotCS8qCisJICoKIAkgKiBQTEwgaXMgbm90IHR1cm5lZCBvZmYgd2hlbiBQSFkgZW50ZXJzIGludG8gbG93IHBvd2VyIG1vZGUgKExQTSkuCiAJICogRGlzYWJsZSBQTEwgZm9yIG1heGltdW0gcG93ZXIgc2F2aW5ncy4KIAkgKi8KLQl1bHBpX3dyaXRlKG90ZywgMHgwOCwgMHgwOSk7CisKKwlpZiAobW90Zy0+cGRhdGEtPnBoeV90eXBlID09IENJXzQ1Tk1fSU5URUdSQVRFRF9QSFkpIHsKKwkJdWxwaV9yZWFkKG90ZywgMHgxNCk7CisJCWlmIChwZGF0YS0+b3RnX2NvbnRyb2wgPT0gT1RHX1BIWV9DT05UUk9MKQorCQkJdWxwaV93cml0ZShvdGcsIDB4MDEsIDB4MzApOworCQl1bHBpX3dyaXRlKG90ZywgMHgwOCwgMHgwOSk7CisJfQogCiAJLyoKIAkgKiBQSFkgbWF5IHRha2Ugc29tZSB0aW1lIG9yIGV2ZW4gZmFpbCB0byBlbnRlciBpbnRvIGxvdyBwb3dlcgpAQCAtMzE5LDExICs1MTAsMjQgQEAKIAkgKi8KIAl3cml0ZWwocmVhZGwoVVNCX1VTQkNNRCkgfCBBU1lOQ19JTlRSX0NUUkwgfCBVTFBJX1NUUF9DVFJMLCBVU0JfVVNCQ01EKTsKIAorCWlmIChtb3RnLT5wZGF0YS0+cGh5X3R5cGUgPT0gU05QU18yOE5NX0lOVEVHUkFURURfUEhZICYmCisJCQltb3RnLT5wZGF0YS0+b3RnX2NvbnRyb2wgPT0gT1RHX1BNSUNfQ09OVFJPTCkKKwkJd3JpdGVsKHJlYWRsKFVTQl9QSFlfQ1RSTCkgfCBQSFlfUkVURU4sIFVTQl9QSFlfQ1RSTCk7CisKIAljbGtfZGlzYWJsZShtb3RnLT5wY2xrKTsKIAljbGtfZGlzYWJsZShtb3RnLT5jbGspOwogCWlmIChtb3RnLT5jb3JlX2NsaykKIAkJY2xrX2Rpc2FibGUobW90Zy0+Y29yZV9jbGspOwogCisJaWYgKCFJU19FUlIobW90Zy0+cGNsa19zcmMpKQorCQljbGtfZGlzYWJsZShtb3RnLT5wY2xrX3NyYyk7CisKKwlpZiAobW90Zy0+cGRhdGEtPnBoeV90eXBlID09IFNOUFNfMjhOTV9JTlRFR1JBVEVEX1BIWSAmJgorCQkJbW90Zy0+cGRhdGEtPm90Z19jb250cm9sID09IE9UR19QTUlDX0NPTlRST0wpIHsKKwkJbXNtX2hzdXNiX2xkb19zZXRfbW9kZSgwKTsKKwkJbXNtX2hzdXNiX2NvbmZpZ192ZGRjeCgwKTsKKwl9CisKIAlpZiAoZGV2aWNlX21heV93YWtldXAob3RnLT5kZXYpKQogCQllbmFibGVfaXJxX3dha2UobW90Zy0+aXJxKTsKIAlpZiAoYnVzKQpAQCAtMzQ3LDExICs1NTEsMjEgQEAKIAlpZiAoIWF0b21pY19yZWFkKCZtb3RnLT5pbl9scG0pKQogCQlyZXR1cm4gMDsKIAorCWlmICghSVNfRVJSKG1vdGctPnBjbGtfc3JjKSkKKwkJY2xrX2VuYWJsZShtb3RnLT5wY2xrX3NyYyk7CisKIAljbGtfZW5hYmxlKG1vdGctPnBjbGspOwogCWNsa19lbmFibGUobW90Zy0+Y2xrKTsKIAlpZiAobW90Zy0+Y29yZV9jbGspCiAJCWNsa19lbmFibGUobW90Zy0+Y29yZV9jbGspOwogCisJaWYgKG1vdGctPnBkYXRhLT5waHlfdHlwZSA9PSBTTlBTXzI4Tk1fSU5URUdSQVRFRF9QSFkgJiYKKwkJCW1vdGctPnBkYXRhLT5vdGdfY29udHJvbCA9PSBPVEdfUE1JQ19DT05UUk9MKSB7CisJCW1zbV9oc3VzYl9sZG9fc2V0X21vZGUoMSk7CisJCW1zbV9oc3VzYl9jb25maWdfdmRkY3goMSk7CisJCXdyaXRlbChyZWFkbChVU0JfUEhZX0NUUkwpICYgflBIWV9SRVRFTiwgVVNCX1BIWV9DVFJMKTsKKwl9CisKIAl0ZW1wID0gcmVhZGwoVVNCX1VTQkNNRCk7CiAJdGVtcCAmPSB+QVNZTkNfSU5UUl9DVFJMOwogCXRlbXAgJj0gflVMUElfU1RQX0NUUkw7CkBAIC0zODksMjAgKzYwMyw0NyBAQAogCWlmIChidXMpCiAJCXNldF9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJihidXNfdG9faGNkKGJ1cykpLT5mbGFncyk7CiAKKwlhdG9taWNfc2V0KCZtb3RnLT5pbl9scG0sIDApOworCiAJaWYgKG1vdGctPmFzeW5jX2ludCkgewogCQltb3RnLT5hc3luY19pbnQgPSAwOwogCQlwbV9ydW50aW1lX3B1dChvdGctPmRldik7CiAJCWVuYWJsZV9pcnEobW90Zy0+aXJxKTsKIAl9CiAKLQlhdG9taWNfc2V0KCZtb3RnLT5pbl9scG0sIDApOwotCiAJZGV2X2luZm8ob3RnLT5kZXYsICJVU0IgZXhpdGVkIGZyb20gbG93IHBvd2VyIG1vZGVcbiIpOwogCiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYKIAorc3RhdGljIHZvaWQgbXNtX290Z19ub3RpZnlfY2hhcmdlcihzdHJ1Y3QgbXNtX290ZyAqbW90ZywgdW5zaWduZWQgbUEpCit7CisJaWYgKG1vdGctPmN1cl9wb3dlciA9PSBtQSkKKwkJcmV0dXJuOworCisJLyogVE9ETzogTm90aWZ5IFBNSUMgYWJvdXQgYXZhaWxhYmxlIGN1cnJlbnQgKi8KKwlkZXZfaW5mbyhtb3RnLT5vdGcuZGV2LCAiQXZhaWwgY3VyciBmcm9tIFVTQiA9ICV1XG4iLCBtQSk7CisJbW90Zy0+Y3VyX3Bvd2VyID0gbUE7Cit9CisKK3N0YXRpYyBpbnQgbXNtX290Z19zZXRfcG93ZXIoc3RydWN0IG90Z190cmFuc2NlaXZlciAqb3RnLCB1bnNpZ25lZCBtQSkKK3sKKwlzdHJ1Y3QgbXNtX290ZyAqbW90ZyA9IGNvbnRhaW5lcl9vZihvdGcsIHN0cnVjdCBtc21fb3RnLCBvdGcpOworCisJLyoKKwkgKiBHYWRnZXQgZHJpdmVyIHVzZXMgc2V0X3Bvd2VyIG1ldGhvZCB0byBub3RpZnkgYWJvdXQgdGhlCisJICogYXZhaWxhYmxlIGN1cnJlbnQgYmFzZWQgb24gc3VzcGVuZC9jb25maWd1cmVkIHN0YXRlcy4KKwkgKgorCSAqIElERVZfQ0hHIGNhbiBiZSBkcmF3biBpcnJlc3BlY3RpdmUgb2Ygc3VzcGVuZC91bi1jb25maWd1cmVkCisJICogc3RhdGVzIHdoZW4gQ0RQL0FDQSBpcyBjb25uZWN0ZWQuCisJICovCisJaWYgKG1vdGctPmNoZ190eXBlID09IFVTQl9TRFBfQ0hBUkdFUikKKwkJbXNtX290Z19ub3RpZnlfY2hhcmdlcihtb3RnLCBtQSk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgbXNtX290Z19zdGFydF9ob3N0KHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90ZywgaW50IG9uKQogewogCXN0cnVjdCBtc21fb3RnICptb3RnID0gY29udGFpbmVyX29mKG90Zywgc3RydWN0IG1zbV9vdGcsIG90Zyk7CkBAIC01NTcsNiArNzk4LDMwNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgYm9vbCBtc21fY2hnX2NoZWNrX3NlY29uZGFyeV9kZXQoc3RydWN0IG1zbV9vdGcgKm1vdGcpCit7CisJc3RydWN0IG90Z190cmFuc2NlaXZlciAqb3RnID0gJm1vdGctPm90ZzsKKwl1MzIgY2hnX2RldDsKKwlib29sIHJldCA9IGZhbHNlOworCisJc3dpdGNoIChtb3RnLT5wZGF0YS0+cGh5X3R5cGUpIHsKKwljYXNlIENJXzQ1Tk1fSU5URUdSQVRFRF9QSFk6CisJCWNoZ19kZXQgPSB1bHBpX3JlYWQob3RnLCAweDM0KTsKKwkJcmV0ID0gY2hnX2RldCAmICgxIDw8IDQpOworCQlicmVhazsKKwljYXNlIFNOUFNfMjhOTV9JTlRFR1JBVEVEX1BIWToKKwkJY2hnX2RldCA9IHVscGlfcmVhZChvdGcsIDB4ODcpOworCQlyZXQgPSBjaGdfZGV0ICYgMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG1zbV9jaGdfZW5hYmxlX3NlY29uZGFyeV9kZXQoc3RydWN0IG1zbV9vdGcgKm1vdGcpCit7CisJc3RydWN0IG90Z190cmFuc2NlaXZlciAqb3RnID0gJm1vdGctPm90ZzsKKwl1MzIgY2hnX2RldDsKKworCXN3aXRjaCAobW90Zy0+cGRhdGEtPnBoeV90eXBlKSB7CisJY2FzZSBDSV80NU5NX0lOVEVHUkFURURfUEhZOgorCQljaGdfZGV0ID0gdWxwaV9yZWFkKG90ZywgMHgzNCk7CisJCS8qIFR1cm4gb2ZmIGNoYXJnZXIgYmxvY2sgKi8KKwkJY2hnX2RldCB8PSB+KDEgPDwgMSk7CisJCXVscGlfd3JpdGUob3RnLCBjaGdfZGV0LCAweDM0KTsKKwkJdWRlbGF5KDIwKTsKKwkJLyogY29udHJvbCBjaGcgYmxvY2sgdmlhIFVMUEkgKi8KKwkJY2hnX2RldCAmPSB+KDEgPDwgMyk7CisJCXVscGlfd3JpdGUob3RnLCBjaGdfZGV0LCAweDM0KTsKKwkJLyogcHV0IGl0IGluIGhvc3QgbW9kZSBmb3IgZW5hYmxpbmcgRC0gc291cmNlICovCisJCWNoZ19kZXQgJj0gfigxIDw8IDIpOworCQl1bHBpX3dyaXRlKG90ZywgY2hnX2RldCwgMHgzNCk7CisJCS8qIFR1cm4gb24gY2hnIGRldGVjdCBibG9jayAqLworCQljaGdfZGV0ICY9IH4oMSA8PCAxKTsKKwkJdWxwaV93cml0ZShvdGcsIGNoZ19kZXQsIDB4MzQpOworCQl1ZGVsYXkoMjApOworCQkvKiBlbmFibGUgY2hnIGRldGVjdGlvbiAqLworCQljaGdfZGV0ICY9IH4oMSA8PCAwKTsKKwkJdWxwaV93cml0ZShvdGcsIGNoZ19kZXQsIDB4MzQpOworCQlicmVhazsKKwljYXNlIFNOUFNfMjhOTV9JTlRFR1JBVEVEX1BIWToKKwkJLyoKKwkJICogQ29uZmlndXJlIERNIGFzIGN1cnJlbnQgc291cmNlLCBEUCBhcyBjdXJyZW50IHNpbmsKKwkJICogYW5kIGVuYWJsZSBiYXR0ZXJ5IGNoYXJnaW5nIGNvbXBhcmF0b3JzLgorCQkgKi8KKwkJdWxwaV93cml0ZShvdGcsIDB4OCwgMHg4NSk7CisJCXVscGlfd3JpdGUob3RnLCAweDIsIDB4ODUpOworCQl1bHBpX3dyaXRlKG90ZywgMHgxLCAweDg1KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgYm9vbCBtc21fY2hnX2NoZWNrX3ByaW1hcnlfZGV0KHN0cnVjdCBtc21fb3RnICptb3RnKQoreworCXN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90ZyA9ICZtb3RnLT5vdGc7CisJdTMyIGNoZ19kZXQ7CisJYm9vbCByZXQgPSBmYWxzZTsKKworCXN3aXRjaCAobW90Zy0+cGRhdGEtPnBoeV90eXBlKSB7CisJY2FzZSBDSV80NU5NX0lOVEVHUkFURURfUEhZOgorCQljaGdfZGV0ID0gdWxwaV9yZWFkKG90ZywgMHgzNCk7CisJCXJldCA9IGNoZ19kZXQgJiAoMSA8PCA0KTsKKwkJYnJlYWs7CisJY2FzZSBTTlBTXzI4Tk1fSU5URUdSQVRFRF9QSFk6CisJCWNoZ19kZXQgPSB1bHBpX3JlYWQob3RnLCAweDg3KTsKKwkJcmV0ID0gY2hnX2RldCAmIDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtc21fY2hnX2VuYWJsZV9wcmltYXJ5X2RldChzdHJ1Y3QgbXNtX290ZyAqbW90ZykKK3sKKwlzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcgPSAmbW90Zy0+b3RnOworCXUzMiBjaGdfZGV0OworCisJc3dpdGNoIChtb3RnLT5wZGF0YS0+cGh5X3R5cGUpIHsKKwljYXNlIENJXzQ1Tk1fSU5URUdSQVRFRF9QSFk6CisJCWNoZ19kZXQgPSB1bHBpX3JlYWQob3RnLCAweDM0KTsKKwkJLyogZW5hYmxlIGNoZyBkZXRlY3Rpb24gKi8KKwkJY2hnX2RldCAmPSB+KDEgPDwgMCk7CisJCXVscGlfd3JpdGUob3RnLCBjaGdfZGV0LCAweDM0KTsKKwkJYnJlYWs7CisJY2FzZSBTTlBTXzI4Tk1fSU5URUdSQVRFRF9QSFk6CisJCS8qCisJCSAqIENvbmZpZ3VyZSBEUCBhcyBjdXJyZW50IHNvdXJjZSwgRE0gYXMgY3VycmVudCBzaW5rCisJCSAqIGFuZCBlbmFibGUgYmF0dGVyeSBjaGFyZ2luZyBjb21wYXJhdG9ycy4KKwkJICovCisJCXVscGlfd3JpdGUob3RnLCAweDIsIDB4ODUpOworCQl1bHBpX3dyaXRlKG90ZywgMHgxLCAweDg1KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgYm9vbCBtc21fY2hnX2NoZWNrX2RjZChzdHJ1Y3QgbXNtX290ZyAqbW90ZykKK3sKKwlzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcgPSAmbW90Zy0+b3RnOworCXUzMiBsaW5lX3N0YXRlOworCWJvb2wgcmV0ID0gZmFsc2U7CisKKwlzd2l0Y2ggKG1vdGctPnBkYXRhLT5waHlfdHlwZSkgeworCWNhc2UgQ0lfNDVOTV9JTlRFR1JBVEVEX1BIWToKKwkJbGluZV9zdGF0ZSA9IHVscGlfcmVhZChvdGcsIDB4MTUpOworCQlyZXQgPSAhKGxpbmVfc3RhdGUgJiAxKTsKKwkJYnJlYWs7CisJY2FzZSBTTlBTXzI4Tk1fSU5URUdSQVRFRF9QSFk6CisJCWxpbmVfc3RhdGUgPSB1bHBpX3JlYWQob3RnLCAweDg3KTsKKwkJcmV0ID0gbGluZV9zdGF0ZSAmIDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtc21fY2hnX2Rpc2FibGVfZGNkKHN0cnVjdCBtc21fb3RnICptb3RnKQoreworCXN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90ZyA9ICZtb3RnLT5vdGc7CisJdTMyIGNoZ19kZXQ7CisKKwlzd2l0Y2ggKG1vdGctPnBkYXRhLT5waHlfdHlwZSkgeworCWNhc2UgQ0lfNDVOTV9JTlRFR1JBVEVEX1BIWToKKwkJY2hnX2RldCA9IHVscGlfcmVhZChvdGcsIDB4MzQpOworCQljaGdfZGV0ICY9IH4oMSA8PCA1KTsKKwkJdWxwaV93cml0ZShvdGcsIGNoZ19kZXQsIDB4MzQpOworCQlicmVhazsKKwljYXNlIFNOUFNfMjhOTV9JTlRFR1JBVEVEX1BIWToKKwkJdWxwaV93cml0ZShvdGcsIDB4MTAsIDB4ODYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG1zbV9jaGdfZW5hYmxlX2RjZChzdHJ1Y3QgbXNtX290ZyAqbW90ZykKK3sKKwlzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcgPSAmbW90Zy0+b3RnOworCXUzMiBjaGdfZGV0OworCisJc3dpdGNoIChtb3RnLT5wZGF0YS0+cGh5X3R5cGUpIHsKKwljYXNlIENJXzQ1Tk1fSU5URUdSQVRFRF9QSFk6CisJCWNoZ19kZXQgPSB1bHBpX3JlYWQob3RnLCAweDM0KTsKKwkJLyogVHVybiBvbiBEKyBjdXJyZW50IHNvdXJjZSAqLworCQljaGdfZGV0IHw9ICgxIDw8IDUpOworCQl1bHBpX3dyaXRlKG90ZywgY2hnX2RldCwgMHgzNCk7CisJCWJyZWFrOworCWNhc2UgU05QU18yOE5NX0lOVEVHUkFURURfUEhZOgorCQkvKiBEYXRhIGNvbnRhY3QgZGV0ZWN0aW9uIGVuYWJsZSAqLworCQl1bHBpX3dyaXRlKG90ZywgMHgxMCwgMHg4NSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgbXNtX2NoZ19ibG9ja19vbihzdHJ1Y3QgbXNtX290ZyAqbW90ZykKK3sKKwlzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcgPSAmbW90Zy0+b3RnOworCXUzMiBmdW5jX2N0cmwsIGNoZ19kZXQ7CisKKwkvKiBwdXQgdGhlIGNvbnRyb2xsZXIgaW4gbm9uLWRyaXZpbmcgbW9kZSAqLworCWZ1bmNfY3RybCA9IHVscGlfcmVhZChvdGcsIFVMUElfRlVOQ19DVFJMKTsKKwlmdW5jX2N0cmwgJj0gflVMUElfRlVOQ19DVFJMX09QTU9ERV9NQVNLOworCWZ1bmNfY3RybCB8PSBVTFBJX0ZVTkNfQ1RSTF9PUE1PREVfTk9ORFJJVklORzsKKwl1bHBpX3dyaXRlKG90ZywgZnVuY19jdHJsLCBVTFBJX0ZVTkNfQ1RSTCk7CisKKwlzd2l0Y2ggKG1vdGctPnBkYXRhLT5waHlfdHlwZSkgeworCWNhc2UgQ0lfNDVOTV9JTlRFR1JBVEVEX1BIWToKKwkJY2hnX2RldCA9IHVscGlfcmVhZChvdGcsIDB4MzQpOworCQkvKiBjb250cm9sIGNoZyBibG9jayB2aWEgVUxQSSAqLworCQljaGdfZGV0ICY9IH4oMSA8PCAzKTsKKwkJdWxwaV93cml0ZShvdGcsIGNoZ19kZXQsIDB4MzQpOworCQkvKiBUdXJuIG9uIGNoZyBkZXRlY3QgYmxvY2sgKi8KKwkJY2hnX2RldCAmPSB+KDEgPDwgMSk7CisJCXVscGlfd3JpdGUob3RnLCBjaGdfZGV0LCAweDM0KTsKKwkJdWRlbGF5KDIwKTsKKwkJYnJlYWs7CisJY2FzZSBTTlBTXzI4Tk1fSU5URUdSQVRFRF9QSFk6CisJCS8qIENsZWFyIGNoYXJnZXIgZGV0ZWN0aW5nIGNvbnRyb2wgYml0cyAqLworCQl1bHBpX3dyaXRlKG90ZywgMHgzRiwgMHg4Nik7CisJCS8qIENsZWFyIGFsdCBpbnRlcnJ1cHQgbGF0Y2ggYW5kIGVuYWJsZSBiaXRzICovCisJCXVscGlfd3JpdGUob3RnLCAweDFGLCAweDkyKTsKKwkJdWxwaV93cml0ZShvdGcsIDB4MUYsIDB4OTUpOworCQl1ZGVsYXkoMTAwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBtc21fY2hnX2Jsb2NrX29mZihzdHJ1Y3QgbXNtX290ZyAqbW90ZykKK3sKKwlzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcgPSAmbW90Zy0+b3RnOworCXUzMiBmdW5jX2N0cmwsIGNoZ19kZXQ7CisKKwlzd2l0Y2ggKG1vdGctPnBkYXRhLT5waHlfdHlwZSkgeworCWNhc2UgQ0lfNDVOTV9JTlRFR1JBVEVEX1BIWToKKwkJY2hnX2RldCA9IHVscGlfcmVhZChvdGcsIDB4MzQpOworCQkvKiBUdXJuIG9mZiBjaGFyZ2VyIGJsb2NrICovCisJCWNoZ19kZXQgfD0gfigxIDw8IDEpOworCQl1bHBpX3dyaXRlKG90ZywgY2hnX2RldCwgMHgzNCk7CisJCWJyZWFrOworCWNhc2UgU05QU18yOE5NX0lOVEVHUkFURURfUEhZOgorCQkvKiBDbGVhciBjaGFyZ2VyIGRldGVjdGluZyBjb250cm9sIGJpdHMgKi8KKwkJdWxwaV93cml0ZShvdGcsIDB4M0YsIDB4ODYpOworCQkvKiBDbGVhciBhbHQgaW50ZXJydXB0IGxhdGNoIGFuZCBlbmFibGUgYml0cyAqLworCQl1bHBpX3dyaXRlKG90ZywgMHgxRiwgMHg5Mik7CisJCXVscGlfd3JpdGUob3RnLCAweDFGLCAweDk1KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJLyogcHV0IHRoZSBjb250cm9sbGVyIGluIG5vcm1hbCBtb2RlICovCisJZnVuY19jdHJsID0gdWxwaV9yZWFkKG90ZywgVUxQSV9GVU5DX0NUUkwpOworCWZ1bmNfY3RybCAmPSB+VUxQSV9GVU5DX0NUUkxfT1BNT0RFX01BU0s7CisJZnVuY19jdHJsIHw9IFVMUElfRlVOQ19DVFJMX09QTU9ERV9OT1JNQUw7CisJdWxwaV93cml0ZShvdGcsIGZ1bmNfY3RybCwgVUxQSV9GVU5DX0NUUkwpOworfQorCisjZGVmaW5lIE1TTV9DSEdfRENEX1BPTExfVElNRQkJKDEwMCAqIEhaLzEwMDApIC8qIDEwMCBtc2VjICovCisjZGVmaW5lIE1TTV9DSEdfRENEX01BWF9SRVRSSUVTCQk2IC8qIFRkY2RfdG1vdXQgPSA2ICogMTAwIG1zZWMgKi8KKyNkZWZpbmUgTVNNX0NIR19QUklNQVJZX0RFVF9USU1FCSg0MCAqIEhaLzEwMDApIC8qIFRWRFBTUkNfT04gKi8KKyNkZWZpbmUgTVNNX0NIR19TRUNPTkRBUllfREVUX1RJTUUJKDQwICogSFovMTAwMCkgLyogVFZETVNSQ19PTiAqLworc3RhdGljIHZvaWQgbXNtX2NoZ19kZXRlY3Rfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCit7CisJc3RydWN0IG1zbV9vdGcgKm1vdGcgPSBjb250YWluZXJfb2Yodywgc3RydWN0IG1zbV9vdGcsIGNoZ193b3JrLndvcmspOworCXN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90ZyA9ICZtb3RnLT5vdGc7CisJYm9vbCBpc19kY2QsIHRtb3V0LCB2b3V0OworCXVuc2lnbmVkIGxvbmcgZGVsYXk7CisKKwlkZXZfZGJnKG90Zy0+ZGV2LCAiY2hnIGRldGVjdGlvbiB3b3JrXG4iKTsKKwlzd2l0Y2ggKG1vdGctPmNoZ19zdGF0ZSkgeworCWNhc2UgVVNCX0NIR19TVEFURV9VTkRFRklORUQ6CisJCXBtX3J1bnRpbWVfZ2V0X3N5bmMob3RnLT5kZXYpOworCQltc21fY2hnX2Jsb2NrX29uKG1vdGcpOworCQltc21fY2hnX2VuYWJsZV9kY2QobW90Zyk7CisJCW1vdGctPmNoZ19zdGF0ZSA9IFVTQl9DSEdfU1RBVEVfV0FJVF9GT1JfRENEOworCQltb3RnLT5kY2RfcmV0cmllcyA9IDA7CisJCWRlbGF5ID0gTVNNX0NIR19EQ0RfUE9MTF9USU1FOworCQlicmVhazsKKwljYXNlIFVTQl9DSEdfU1RBVEVfV0FJVF9GT1JfRENEOgorCQlpc19kY2QgPSBtc21fY2hnX2NoZWNrX2RjZChtb3RnKTsKKwkJdG1vdXQgPSArK21vdGctPmRjZF9yZXRyaWVzID09IE1TTV9DSEdfRENEX01BWF9SRVRSSUVTOworCQlpZiAoaXNfZGNkIHx8IHRtb3V0KSB7CisJCQltc21fY2hnX2Rpc2FibGVfZGNkKG1vdGcpOworCQkJbXNtX2NoZ19lbmFibGVfcHJpbWFyeV9kZXQobW90Zyk7CisJCQlkZWxheSA9IE1TTV9DSEdfUFJJTUFSWV9ERVRfVElNRTsKKwkJCW1vdGctPmNoZ19zdGF0ZSA9IFVTQl9DSEdfU1RBVEVfRENEX0RPTkU7CisJCX0gZWxzZSB7CisJCQlkZWxheSA9IE1TTV9DSEdfRENEX1BPTExfVElNRTsKKwkJfQorCQlicmVhazsKKwljYXNlIFVTQl9DSEdfU1RBVEVfRENEX0RPTkU6CisJCXZvdXQgPSBtc21fY2hnX2NoZWNrX3ByaW1hcnlfZGV0KG1vdGcpOworCQlpZiAodm91dCkgeworCQkJbXNtX2NoZ19lbmFibGVfc2Vjb25kYXJ5X2RldChtb3RnKTsKKwkJCWRlbGF5ID0gTVNNX0NIR19TRUNPTkRBUllfREVUX1RJTUU7CisJCQltb3RnLT5jaGdfc3RhdGUgPSBVU0JfQ0hHX1NUQVRFX1BSSU1BUllfRE9ORTsKKwkJfSBlbHNlIHsKKwkJCW1vdGctPmNoZ190eXBlID0gVVNCX1NEUF9DSEFSR0VSOworCQkJbW90Zy0+Y2hnX3N0YXRlID0gVVNCX0NIR19TVEFURV9ERVRFQ1RFRDsKKwkJCWRlbGF5ID0gMDsKKwkJfQorCQlicmVhazsKKwljYXNlIFVTQl9DSEdfU1RBVEVfUFJJTUFSWV9ET05FOgorCQl2b3V0ID0gbXNtX2NoZ19jaGVja19zZWNvbmRhcnlfZGV0KG1vdGcpOworCQlpZiAodm91dCkKKwkJCW1vdGctPmNoZ190eXBlID0gVVNCX0RDUF9DSEFSR0VSOworCQllbHNlCisJCQltb3RnLT5jaGdfdHlwZSA9IFVTQl9DRFBfQ0hBUkdFUjsKKwkJbW90Zy0+Y2hnX3N0YXRlID0gVVNCX0NIR19TVEFURV9TRUNPTkRBUllfRE9ORTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBVU0JfQ0hHX1NUQVRFX1NFQ09OREFSWV9ET05FOgorCQltb3RnLT5jaGdfc3RhdGUgPSBVU0JfQ0hHX1NUQVRFX0RFVEVDVEVEOworCWNhc2UgVVNCX0NIR19TVEFURV9ERVRFQ1RFRDoKKwkJbXNtX2NoZ19ibG9ja19vZmYobW90Zyk7CisJCWRldl9kYmcob3RnLT5kZXYsICJjaGFyZ2VyID0gJWRcbiIsIG1vdGctPmNoZ190eXBlKTsKKwkJc2NoZWR1bGVfd29yaygmbW90Zy0+c21fd29yayk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZtb3RnLT5jaGdfd29yaywgZGVsYXkpOworfQorCiAvKgogICogV2Ugc3VwcG9ydCBPVEcsIFBlcmlwaGVyYWwgb25seSBhbmQgSG9zdCBvbmx5IGNvbmZpZ3VyYXRpb25zLiBJbiBjYXNlCiAgKiBvZiBPVEcsIG1vZGUgc3dpdGNoIChob3N0LS0+cGVyaXBoZXJhbC9wZXJpcGhlcmFsLS0+aG9zdCkgY2FuIGhhcHBlbgpAQCAtNjI3LDkgKzExNjgsNDggQEAKIAkJCXdyaXRlbChyZWFkbChVU0JfT1RHU0MpICYgfk9UR1NDX0JTVklFLCBVU0JfT1RHU0MpOwogCQkJbXNtX290Z19zdGFydF9ob3N0KG90ZywgMSk7CiAJCQlvdGctPnN0YXRlID0gT1RHX1NUQVRFX0FfSE9TVDsKLQkJfSBlbHNlIGlmICh0ZXN0X2JpdChCX1NFU1NfVkxELCAmbW90Zy0+aW5wdXRzKSAmJiBvdGctPmdhZGdldCkgewotCQkJbXNtX290Z19zdGFydF9wZXJpcGhlcmFsKG90ZywgMSk7Ci0JCQlvdGctPnN0YXRlID0gT1RHX1NUQVRFX0JfUEVSSVBIRVJBTDsKKwkJfSBlbHNlIGlmICh0ZXN0X2JpdChCX1NFU1NfVkxELCAmbW90Zy0+aW5wdXRzKSkgeworCQkJc3dpdGNoIChtb3RnLT5jaGdfc3RhdGUpIHsKKwkJCWNhc2UgVVNCX0NIR19TVEFURV9VTkRFRklORUQ6CisJCQkJbXNtX2NoZ19kZXRlY3Rfd29yaygmbW90Zy0+Y2hnX3dvcmsud29yayk7CisJCQkJYnJlYWs7CisJCQljYXNlIFVTQl9DSEdfU1RBVEVfREVURUNURUQ6CisJCQkJc3dpdGNoIChtb3RnLT5jaGdfdHlwZSkgeworCQkJCWNhc2UgVVNCX0RDUF9DSEFSR0VSOgorCQkJCQltc21fb3RnX25vdGlmeV9jaGFyZ2VyKG1vdGcsCisJCQkJCQkJSURFVl9DSEdfTUFYKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBVU0JfQ0RQX0NIQVJHRVI6CisJCQkJCW1zbV9vdGdfbm90aWZ5X2NoYXJnZXIobW90ZywKKwkJCQkJCQlJREVWX0NIR19NQVgpOworCQkJCQltc21fb3RnX3N0YXJ0X3BlcmlwaGVyYWwob3RnLCAxKTsKKwkJCQkJb3RnLT5zdGF0ZSA9IE9UR19TVEFURV9CX1BFUklQSEVSQUw7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVVNCX1NEUF9DSEFSR0VSOgorCQkJCQltc21fb3RnX25vdGlmeV9jaGFyZ2VyKG1vdGcsIElVTklUKTsKKwkJCQkJbXNtX290Z19zdGFydF9wZXJpcGhlcmFsKG90ZywgMSk7CisJCQkJCW90Zy0+c3RhdGUgPSBPVEdfU1RBVEVfQl9QRVJJUEhFUkFMOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlicmVhazsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIElmIGNoYXJnZXIgZGV0ZWN0aW9uIHdvcmsgaXMgcGVuZGluZywgZGVjcmVtZW50CisJCQkgKiB0aGUgcG0gdXNhZ2UgY291bnRlciB0byBiYWxhbmNlIHdpdGggdGhlIG9uZSB0aGF0CisJCQkgKiBpcyBpbmNyZW1lbnRlZCBpbiBjaGFyZ2VyIGRldGVjdGlvbiB3b3JrLgorCQkJICovCisJCQlpZiAoY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZtb3RnLT5jaGdfd29yaykpIHsKKwkJCQlwbV9ydW50aW1lX3B1dF9zeW5jKG90Zy0+ZGV2KTsKKwkJCQltc21fb3RnX3Jlc2V0KG90Zyk7CisJCQl9CisJCQltc21fb3RnX25vdGlmeV9jaGFyZ2VyKG1vdGcsIDApOworCQkJbW90Zy0+Y2hnX3N0YXRlID0gVVNCX0NIR19TVEFURV9VTkRFRklORUQ7CisJCQltb3RnLT5jaGdfdHlwZSA9IFVTQl9JTlZBTElEX0NIQVJHRVI7CiAJCX0KIAkJcG1fcnVudGltZV9wdXRfc3luYyhvdGctPmRldik7CiAJCWJyZWFrOwpAQCAtNjM3LDcgKzEyMTcsMTAgQEAKIAkJZGV2X2RiZyhvdGctPmRldiwgIk9UR19TVEFURV9CX1BFUklQSEVSQUwgc3RhdGVcbiIpOwogCQlpZiAoIXRlc3RfYml0KEJfU0VTU19WTEQsICZtb3RnLT5pbnB1dHMpIHx8CiAJCQkJIXRlc3RfYml0KElELCAmbW90Zy0+aW5wdXRzKSkgeworCQkJbXNtX290Z19ub3RpZnlfY2hhcmdlcihtb3RnLCAwKTsKIAkJCW1zbV9vdGdfc3RhcnRfcGVyaXBoZXJhbChvdGcsIDApOworCQkJbW90Zy0+Y2hnX3N0YXRlID0gVVNCX0NIR19TVEFURV9VTkRFRklORUQ7CisJCQltb3RnLT5jaGdfdHlwZSA9IFVTQl9JTlZBTElEX0NIQVJHRVI7CiAJCQlvdGctPnN0YXRlID0gT1RHX1NUQVRFX0JfSURMRTsKIAkJCW1zbV9vdGdfcmVzZXQob3RnKTsKIAkJCXNjaGVkdWxlX3dvcmsodyk7CkBAIC04NjIsMTIgKzE0NDUsMzEgQEAKIAkJcmV0ID0gUFRSX0VSUihtb3RnLT5jbGspOwogCQlnb3RvIHB1dF9waHlfcmVzZXRfY2xrOwogCX0KKwljbGtfc2V0X3JhdGUobW90Zy0+Y2xrLCA2MDAwMDAwMCk7CisKKwkvKgorCSAqIElmIFVTQiBDb3JlIGlzIHJ1bm5pbmcgaXRzIHByb3RvY29sIGVuZ2luZSBiYXNlZCBvbiBDT1JFIENMSywKKwkgKiBDT1JFIENMSyAgbXVzdCBiZSBydW5uaW5nIGF0ID41NU1oeiBmb3IgY29ycmVjdCBIU1VTQgorCSAqIG9wZXJhdGlvbiBhbmQgVVNCIGNvcmUgY2Fubm90IHRvbGVyYXRlIGZyZXF1ZW5jeSBjaGFuZ2VzIG9uCisJICogQ09SRSBDTEsuIEZvciBzdWNoIFVTQiBjb3Jlcywgdm90ZSBmb3IgbWF4aW11bSBjbGsgZnJlcXVlbmN5CisJICogb24gcGNsayBzb3VyY2UKKwkgKi8KKwkgaWYgKG1vdGctPnBkYXRhLT5wY2xrX3NyY19uYW1lKSB7CisJCW1vdGctPnBjbGtfc3JjID0gY2xrX2dldCgmcGRldi0+ZGV2LAorCQkJbW90Zy0+cGRhdGEtPnBjbGtfc3JjX25hbWUpOworCQlpZiAoSVNfRVJSKG1vdGctPnBjbGtfc3JjKSkKKwkJCWdvdG8gcHV0X2NsazsKKwkJY2xrX3NldF9yYXRlKG1vdGctPnBjbGtfc3JjLCBJTlRfTUFYKTsKKwkJY2xrX2VuYWJsZShtb3RnLT5wY2xrX3NyYyk7CisJfSBlbHNlCisJCW1vdGctPnBjbGtfc3JjID0gRVJSX1BUUigtRU5PRU5UKTsKKwogCiAJbW90Zy0+cGNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInVzYl9oc19wY2xrIik7CiAJaWYgKElTX0VSUihtb3RnLT5wY2xrKSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IHVzYl9oc19wY2xrXG4iKTsKIAkJcmV0ID0gUFRSX0VSUihtb3RnLT5wY2xrKTsKLQkJZ290byBwdXRfY2xrOworCQlnb3RvIHB1dF9wY2xrX3NyYzsKIAl9CiAKIAkvKgpAQCAtOTAzLDYgKzE1MDUsMjQgQEAKIAogCWNsa19lbmFibGUobW90Zy0+Y2xrKTsKIAljbGtfZW5hYmxlKG1vdGctPnBjbGspOworCisJcmV0ID0gbXNtX2hzdXNiX2luaXRfdmRkY3gobW90ZywgMSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJoc3VzYiB2ZGRjeCBjb25maWd1cmF0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gZnJlZV9yZWdzOworCX0KKworCXJldCA9IG1zbV9oc3VzYl9sZG9faW5pdChtb3RnLCAxKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImhzdXNiIHZyZWcgY29uZmlndXJhdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIHZkZGN4X2V4aXQ7CisJfQorCXJldCA9IG1zbV9oc3VzYl9sZG9fc2V0X21vZGUoMSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJoc3VzYiB2cmVnIGVuYWJsZSBmYWlsZWRcbiIpOworCQlnb3RvIGxkb19leGl0OworCX0KKwogCWlmIChtb3RnLT5jb3JlX2NsaykKIAkJY2xrX2VuYWJsZShtb3RnLT5jb3JlX2Nsayk7CiAKQEAgLTkxMCw2ICsxNTMwLDcgQEAKIAl3cml0ZWwoMCwgVVNCX09UR1NDKTsKIAogCUlOSVRfV09SSygmbW90Zy0+c21fd29yaywgbXNtX290Z19zbV93b3JrKTsKKwlJTklUX0RFTEFZRURfV09SSygmbW90Zy0+Y2hnX3dvcmssIG1zbV9jaGdfZGV0ZWN0X3dvcmspOwogCXJldCA9IHJlcXVlc3RfaXJxKG1vdGctPmlycSwgbXNtX290Z19pcnEsIElSUUZfU0hBUkVELAogCQkJCQkibXNtX290ZyIsIG1vdGcpOwogCWlmIChyZXQpIHsKQEAgLTkyMCw2ICsxNTQxLDcgQEAKIAlvdGctPmluaXQgPSBtc21fb3RnX3Jlc2V0OwogCW90Zy0+c2V0X2hvc3QgPSBtc21fb3RnX3NldF9ob3N0OwogCW90Zy0+c2V0X3BlcmlwaGVyYWwgPSBtc21fb3RnX3NldF9wZXJpcGhlcmFsOworCW90Zy0+c2V0X3Bvd2VyID0gbXNtX290Z19zZXRfcG93ZXI7CiAKIAlvdGctPmlvX29wcyA9ICZtc21fb3RnX2lvX29wczsKIApAQCAtOTQ5LDEyICsxNTcxLDIxIEBACiBkaXNhYmxlX2Nsa3M6CiAJY2xrX2Rpc2FibGUobW90Zy0+cGNsayk7CiAJY2xrX2Rpc2FibGUobW90Zy0+Y2xrKTsKK2xkb19leGl0OgorCW1zbV9oc3VzYl9sZG9faW5pdChtb3RnLCAwKTsKK3ZkZGN4X2V4aXQ6CisJbXNtX2hzdXNiX2luaXRfdmRkY3gobW90ZywgMCk7CiBmcmVlX3JlZ3M6CiAJaW91bm1hcChtb3RnLT5yZWdzKTsKIHB1dF9jb3JlX2NsazoKIAlpZiAobW90Zy0+Y29yZV9jbGspCiAJCWNsa19wdXQobW90Zy0+Y29yZV9jbGspOwogCWNsa19wdXQobW90Zy0+cGNsayk7CitwdXRfcGNsa19zcmM6CisJaWYgKCFJU19FUlIobW90Zy0+cGNsa19zcmMpKSB7CisJCWNsa19kaXNhYmxlKG1vdGctPnBjbGtfc3JjKTsKKwkJY2xrX3B1dChtb3RnLT5wY2xrX3NyYyk7CisJfQogcHV0X2NsazoKIAljbGtfcHV0KG1vdGctPmNsayk7CiBwdXRfcGh5X3Jlc2V0X2NsazoKQEAgLTk3NCw2ICsxNjA1LDcgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAogCW1zbV9vdGdfZGVidWdmc19jbGVhbnVwKCk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZtb3RnLT5jaGdfd29yayk7CiAJY2FuY2VsX3dvcmtfc3luYygmbW90Zy0+c21fd29yayk7CiAKIAlwbV9ydW50aW1lX3Jlc3VtZSgmcGRldi0+ZGV2KTsKQEAgLTEwMDQsNiArMTYzNiwxMSBAQAogCWNsa19kaXNhYmxlKG1vdGctPmNsayk7CiAJaWYgKG1vdGctPmNvcmVfY2xrKQogCQljbGtfZGlzYWJsZShtb3RnLT5jb3JlX2Nsayk7CisJaWYgKCFJU19FUlIobW90Zy0+cGNsa19zcmMpKSB7CisJCWNsa19kaXNhYmxlKG1vdGctPnBjbGtfc3JjKTsKKwkJY2xrX3B1dChtb3RnLT5wY2xrX3NyYyk7CisJfQorCW1zbV9oc3VzYl9sZG9faW5pdChtb3RnLCAwKTsKIAogCWlvdW5tYXAobW90Zy0+cmVncyk7CiAJcG1fcnVudGltZV9zZXRfc3VzcGVuZGVkKCZwZGV2LT5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivb3RnL290Zy5jIGIvZHJpdmVycy91c2Ivb3RnL290Zy5jCmluZGV4IDBhNDNhN2QuLmZiN2FkZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL290Zy9vdGcuYworKysgYi9kcml2ZXJzL3VzYi9vdGcvb3RnLmMKQEAgLTY0LDMgKzY0LDM4IEBACiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKG90Z19zZXRfdHJhbnNjZWl2ZXIpOworCitjb25zdCBjaGFyICpvdGdfc3RhdGVfc3RyaW5nKGVudW0gdXNiX290Z19zdGF0ZSBzdGF0ZSkKK3sKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBPVEdfU1RBVEVfQV9JRExFOgorCQlyZXR1cm4gImFfaWRsZSI7CisJY2FzZSBPVEdfU1RBVEVfQV9XQUlUX1ZSSVNFOgorCQlyZXR1cm4gImFfd2FpdF92cmlzZSI7CisJY2FzZSBPVEdfU1RBVEVfQV9XQUlUX0JDT046CisJCXJldHVybiAiYV93YWl0X2Jjb24iOworCWNhc2UgT1RHX1NUQVRFX0FfSE9TVDoKKwkJcmV0dXJuICJhX2hvc3QiOworCWNhc2UgT1RHX1NUQVRFX0FfU1VTUEVORDoKKwkJcmV0dXJuICJhX3N1c3BlbmQiOworCWNhc2UgT1RHX1NUQVRFX0FfUEVSSVBIRVJBTDoKKwkJcmV0dXJuICJhX3BlcmlwaGVyYWwiOworCWNhc2UgT1RHX1NUQVRFX0FfV0FJVF9WRkFMTDoKKwkJcmV0dXJuICJhX3dhaXRfdmZhbGwiOworCWNhc2UgT1RHX1NUQVRFX0FfVkJVU19FUlI6CisJCXJldHVybiAiYV92YnVzX2VyciI7CisJY2FzZSBPVEdfU1RBVEVfQl9JRExFOgorCQlyZXR1cm4gImJfaWRsZSI7CisJY2FzZSBPVEdfU1RBVEVfQl9TUlBfSU5JVDoKKwkJcmV0dXJuICJiX3NycF9pbml0IjsKKwljYXNlIE9UR19TVEFURV9CX1BFUklQSEVSQUw6CisJCXJldHVybiAiYl9wZXJpcGhlcmFsIjsKKwljYXNlIE9UR19TVEFURV9CX1dBSVRfQUNPTjoKKwkJcmV0dXJuICJiX3dhaXRfYWNvbiI7CisJY2FzZSBPVEdfU1RBVEVfQl9IT1NUOgorCQlyZXR1cm4gImJfaG9zdCI7CisJZGVmYXVsdDoKKwkJcmV0dXJuICJVTkRFRklORUQiOworCX0KK30KK0VYUE9SVF9TWU1CT0wob3RnX3N0YXRlX3N0cmluZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9vdGcvb3RnX2ZzbS5jIGIvZHJpdmVycy91c2Ivb3RnL290Z19mc20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGNjNDIyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivb3RnL290Z19mc20uYwpAQCAtMCwwICsxLDM0OSBAQAorLyoKKyAqIE9URyBGaW5pdGUgU3RhdGUgTWFjaGluZSBmcm9tIE9URyBzcGVjCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBBdXRob3I6CUxpIFlhbmcgPExlb0xpQGZyZWVzY2FsZS5jb20+CisgKgkJSmVycnkgSHVhbmcgPENoYW5nLU1pbmcuSHVhbmdAZnJlZXNjYWxlLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvZ2FkZ2V0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlICJvdGdfZnNtLmgiCisKKy8qIENoYW5nZSBVU0IgcHJvdG9jb2wgd2hlbiB0aGVyZSBpcyBhIHByb3RvY29sIGNoYW5nZSAqLworc3RhdGljIGludCBvdGdfc2V0X3Byb3RvY29sKHN0cnVjdCBvdGdfZnNtICpmc20sIGludCBwcm90b2NvbCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChmc20tPnByb3RvY29sICE9IHByb3RvY29sKSB7CisJCVZEQkcoIkNoYW5naW5nIHJvbGUgZnNtLT5wcm90b2NvbD0gJWQ7IG5ldyBwcm90b2NvbD0gJWRcbiIsCisJCQlmc20tPnByb3RvY29sLCBwcm90b2NvbCk7CisJCS8qIHN0b3Agb2xkIHByb3RvY29sICovCisJCWlmIChmc20tPnByb3RvY29sID09IFBST1RPX0hPU1QpCisJCQlyZXQgPSBmc20tPm9wcy0+c3RhcnRfaG9zdChmc20sIDApOworCQllbHNlIGlmIChmc20tPnByb3RvY29sID09IFBST1RPX0dBREdFVCkKKwkJCXJldCA9IGZzbS0+b3BzLT5zdGFydF9nYWRnZXQoZnNtLCAwKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJLyogc3RhcnQgbmV3IHByb3RvY29sICovCisJCWlmIChwcm90b2NvbCA9PSBQUk9UT19IT1NUKQorCQkJcmV0ID0gZnNtLT5vcHMtPnN0YXJ0X2hvc3QoZnNtLCAxKTsKKwkJZWxzZSBpZiAocHJvdG9jb2wgPT0gUFJPVE9fR0FER0VUKQorCQkJcmV0ID0gZnNtLT5vcHMtPnN0YXJ0X2dhZGdldChmc20sIDEpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlmc20tPnByb3RvY29sID0gcHJvdG9jb2w7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0YXRlX2NoYW5nZWQ7CisKKy8qIENhbGxlZCB3aGVuIGxlYXZpbmcgYSBzdGF0ZS4gIERvIHN0YXRlIGNsZWFuIHVwIGpvYnMgaGVyZSAqLwordm9pZCBvdGdfbGVhdmVfc3RhdGUoc3RydWN0IG90Z19mc20gKmZzbSwgZW51bSB1c2Jfb3RnX3N0YXRlIG9sZF9zdGF0ZSkKK3sKKwlzd2l0Y2ggKG9sZF9zdGF0ZSkgeworCWNhc2UgT1RHX1NUQVRFX0JfSURMRToKKwkJb3RnX2RlbF90aW1lcihmc20sIGJfc2UwX3NycF90bXIpOworCQlmc20tPmJfc2UwX3NycCA9IDA7CisJCWJyZWFrOworCWNhc2UgT1RHX1NUQVRFX0JfU1JQX0lOSVQ6CisJCWZzbS0+Yl9zcnBfZG9uZSA9IDA7CisJCWJyZWFrOworCWNhc2UgT1RHX1NUQVRFX0JfUEVSSVBIRVJBTDoKKwkJYnJlYWs7CisJY2FzZSBPVEdfU1RBVEVfQl9XQUlUX0FDT046CisJCW90Z19kZWxfdGltZXIoZnNtLCBiX2FzZTBfYnJzdF90bXIpOworCQlmc20tPmJfYXNlMF9icnN0X3Rtb3V0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBPVEdfU1RBVEVfQl9IT1NUOgorCQlicmVhazsKKwljYXNlIE9UR19TVEFURV9BX0lETEU6CisJCWJyZWFrOworCWNhc2UgT1RHX1NUQVRFX0FfV0FJVF9WUklTRToKKwkJb3RnX2RlbF90aW1lcihmc20sIGFfd2FpdF92cmlzZV90bXIpOworCQlmc20tPmFfd2FpdF92cmlzZV90bW91dCA9IDA7CisJCWJyZWFrOworCWNhc2UgT1RHX1NUQVRFX0FfV0FJVF9CQ09OOgorCQlvdGdfZGVsX3RpbWVyKGZzbSwgYV93YWl0X2Jjb25fdG1yKTsKKwkJZnNtLT5hX3dhaXRfYmNvbl90bW91dCA9IDA7CisJCWJyZWFrOworCWNhc2UgT1RHX1NUQVRFX0FfSE9TVDoKKwkJb3RnX2RlbF90aW1lcihmc20sIGFfd2FpdF9lbnVtX3Rtcik7CisJCWJyZWFrOworCWNhc2UgT1RHX1NUQVRFX0FfU1VTUEVORDoKKwkJb3RnX2RlbF90aW1lcihmc20sIGFfYWlkbF9iZGlzX3Rtcik7CisJCWZzbS0+YV9haWRsX2JkaXNfdG1vdXQgPSAwOworCQlmc20tPmFfc3VzcGVuZF9yZXEgPSAwOworCQlicmVhazsKKwljYXNlIE9UR19TVEFURV9BX1BFUklQSEVSQUw6CisJCWJyZWFrOworCWNhc2UgT1RHX1NUQVRFX0FfV0FJVF9WRkFMTDoKKwkJb3RnX2RlbF90aW1lcihmc20sIGFfd2FpdF92cmlzZV90bXIpOworCQlicmVhazsKKwljYXNlIE9UR19TVEFURV9BX1ZCVVNfRVJSOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKKy8qIENhbGxlZCB3aGVuIGVudGVyaW5nIGEgc3RhdGUgKi8KK2ludCBvdGdfc2V0X3N0YXRlKHN0cnVjdCBvdGdfZnNtICpmc20sIGVudW0gdXNiX290Z19zdGF0ZSBuZXdfc3RhdGUpCit7CisJc3RhdGVfY2hhbmdlZCA9IDE7CisJaWYgKGZzbS0+dHJhbnNjZWl2ZXItPnN0YXRlID09IG5ld19zdGF0ZSkKKwkJcmV0dXJuIDA7CisJVkRCRygiU2V0IHN0YXRlOiAlc1xuIiwgb3RnX3N0YXRlX3N0cmluZyhuZXdfc3RhdGUpKTsKKwlvdGdfbGVhdmVfc3RhdGUoZnNtLCBmc20tPnRyYW5zY2VpdmVyLT5zdGF0ZSk7CisJc3dpdGNoIChuZXdfc3RhdGUpIHsKKwljYXNlIE9UR19TVEFURV9CX0lETEU6CisJCW90Z19kcnZfdmJ1cyhmc20sIDApOworCQlvdGdfY2hyZ192YnVzKGZzbSwgMCk7CisJCW90Z19sb2NfY29ubihmc20sIDApOworCQlvdGdfbG9jX3NvZihmc20sIDApOworCQlvdGdfc2V0X3Byb3RvY29sKGZzbSwgUFJPVE9fVU5ERUYpOworCQlvdGdfYWRkX3RpbWVyKGZzbSwgYl9zZTBfc3JwX3Rtcik7CisJCWJyZWFrOworCWNhc2UgT1RHX1NUQVRFX0JfU1JQX0lOSVQ6CisJCW90Z19zdGFydF9wdWxzZShmc20pOworCQlvdGdfbG9jX3NvZihmc20sIDApOworCQlvdGdfc2V0X3Byb3RvY29sKGZzbSwgUFJPVE9fVU5ERUYpOworCQlvdGdfYWRkX3RpbWVyKGZzbSwgYl9zcnBfZmFpbF90bXIpOworCQlicmVhazsKKwljYXNlIE9UR19TVEFURV9CX1BFUklQSEVSQUw6CisJCW90Z19jaHJnX3ZidXMoZnNtLCAwKTsKKwkJb3RnX2xvY19jb25uKGZzbSwgMSk7CisJCW90Z19sb2Nfc29mKGZzbSwgMCk7CisJCW90Z19zZXRfcHJvdG9jb2woZnNtLCBQUk9UT19HQURHRVQpOworCQlicmVhazsKKwljYXNlIE9UR19TVEFURV9CX1dBSVRfQUNPTjoKKwkJb3RnX2NocmdfdmJ1cyhmc20sIDApOworCQlvdGdfbG9jX2Nvbm4oZnNtLCAwKTsKKwkJb3RnX2xvY19zb2YoZnNtLCAwKTsKKwkJb3RnX3NldF9wcm90b2NvbChmc20sIFBST1RPX0hPU1QpOworCQlvdGdfYWRkX3RpbWVyKGZzbSwgYl9hc2UwX2Jyc3RfdG1yKTsKKwkJZnNtLT5hX2J1c19zdXNwZW5kID0gMDsKKwkJYnJlYWs7CisJY2FzZSBPVEdfU1RBVEVfQl9IT1NUOgorCQlvdGdfY2hyZ192YnVzKGZzbSwgMCk7CisJCW90Z19sb2NfY29ubihmc20sIDApOworCQlvdGdfbG9jX3NvZihmc20sIDEpOworCQlvdGdfc2V0X3Byb3RvY29sKGZzbSwgUFJPVE9fSE9TVCk7CisJCXVzYl9idXNfc3RhcnRfZW51bShmc20tPnRyYW5zY2VpdmVyLT5ob3N0LAorCQkJCWZzbS0+dHJhbnNjZWl2ZXItPmhvc3QtPm90Z19wb3J0KTsKKwkJYnJlYWs7CisJY2FzZSBPVEdfU1RBVEVfQV9JRExFOgorCQlvdGdfZHJ2X3ZidXMoZnNtLCAwKTsKKwkJb3RnX2NocmdfdmJ1cyhmc20sIDApOworCQlvdGdfbG9jX2Nvbm4oZnNtLCAwKTsKKwkJb3RnX2xvY19zb2YoZnNtLCAwKTsKKwkJb3RnX3NldF9wcm90b2NvbChmc20sIFBST1RPX0hPU1QpOworCQlicmVhazsKKwljYXNlIE9UR19TVEFURV9BX1dBSVRfVlJJU0U6CisJCW90Z19kcnZfdmJ1cyhmc20sIDEpOworCQlvdGdfbG9jX2Nvbm4oZnNtLCAwKTsKKwkJb3RnX2xvY19zb2YoZnNtLCAwKTsKKwkJb3RnX3NldF9wcm90b2NvbChmc20sIFBST1RPX0hPU1QpOworCQlvdGdfYWRkX3RpbWVyKGZzbSwgYV93YWl0X3ZyaXNlX3Rtcik7CisJCWJyZWFrOworCWNhc2UgT1RHX1NUQVRFX0FfV0FJVF9CQ09OOgorCQlvdGdfZHJ2X3ZidXMoZnNtLCAxKTsKKwkJb3RnX2xvY19jb25uKGZzbSwgMCk7CisJCW90Z19sb2Nfc29mKGZzbSwgMCk7CisJCW90Z19zZXRfcHJvdG9jb2woZnNtLCBQUk9UT19IT1NUKTsKKwkJb3RnX2FkZF90aW1lcihmc20sIGFfd2FpdF9iY29uX3Rtcik7CisJCWJyZWFrOworCWNhc2UgT1RHX1NUQVRFX0FfSE9TVDoKKwkJb3RnX2Rydl92YnVzKGZzbSwgMSk7CisJCW90Z19sb2NfY29ubihmc20sIDApOworCQlvdGdfbG9jX3NvZihmc20sIDEpOworCQlvdGdfc2V0X3Byb3RvY29sKGZzbSwgUFJPVE9fSE9TVCk7CisJCS8qCisJCSAqIFdoZW4gSE5QIGlzIHRyaWdnZXJlZCB3aGlsZSBhX2J1c19yZXEgPSAwLCBhX2hvc3Qgd2lsbAorCQkgKiBzdXNwZW5kIHRvbyBmYXN0IHRvIGNvbXBsZXRlIGFfc2V0X2JfaG5wX2VuCisJCSAqLworCQlpZiAoIWZzbS0+YV9idXNfcmVxIHx8IGZzbS0+YV9zdXNwZW5kX3JlcSkKKwkJCW90Z19hZGRfdGltZXIoZnNtLCBhX3dhaXRfZW51bV90bXIpOworCQlicmVhazsKKwljYXNlIE9UR19TVEFURV9BX1NVU1BFTkQ6CisJCW90Z19kcnZfdmJ1cyhmc20sIDEpOworCQlvdGdfbG9jX2Nvbm4oZnNtLCAwKTsKKwkJb3RnX2xvY19zb2YoZnNtLCAwKTsKKwkJb3RnX3NldF9wcm90b2NvbChmc20sIFBST1RPX0hPU1QpOworCQlvdGdfYWRkX3RpbWVyKGZzbSwgYV9haWRsX2JkaXNfdG1yKTsKKworCQlicmVhazsKKwljYXNlIE9UR19TVEFURV9BX1BFUklQSEVSQUw6CisJCW90Z19sb2NfY29ubihmc20sIDEpOworCQlvdGdfbG9jX3NvZihmc20sIDApOworCQlvdGdfc2V0X3Byb3RvY29sKGZzbSwgUFJPVE9fR0FER0VUKTsKKwkJb3RnX2Rydl92YnVzKGZzbSwgMSk7CisJCWJyZWFrOworCWNhc2UgT1RHX1NUQVRFX0FfV0FJVF9WRkFMTDoKKwkJb3RnX2Rydl92YnVzKGZzbSwgMCk7CisJCW90Z19sb2NfY29ubihmc20sIDApOworCQlvdGdfbG9jX3NvZihmc20sIDApOworCQlvdGdfc2V0X3Byb3RvY29sKGZzbSwgUFJPVE9fSE9TVCk7CisJCWJyZWFrOworCWNhc2UgT1RHX1NUQVRFX0FfVkJVU19FUlI6CisJCW90Z19kcnZfdmJ1cyhmc20sIDApOworCQlvdGdfbG9jX2Nvbm4oZnNtLCAwKTsKKwkJb3RnX2xvY19zb2YoZnNtLCAwKTsKKwkJb3RnX3NldF9wcm90b2NvbChmc20sIFBST1RPX1VOREVGKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJZnNtLT50cmFuc2NlaXZlci0+c3RhdGUgPSBuZXdfc3RhdGU7CisJcmV0dXJuIDA7Cit9CisKKy8qIFN0YXRlIGNoYW5nZSBqdWRnZW1lbnQgKi8KK2ludCBvdGdfc3RhdGVtYWNoaW5lKHN0cnVjdCBvdGdfZnNtICpmc20pCit7CisJZW51bSB1c2Jfb3RnX3N0YXRlIHN0YXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZnNtLT5sb2NrLCBmbGFncyk7CisKKwlzdGF0ZSA9IGZzbS0+dHJhbnNjZWl2ZXItPnN0YXRlOworCXN0YXRlX2NoYW5nZWQgPSAwOworCS8qIFN0YXRlIG1hY2hpbmUgc3RhdGUgY2hhbmdlIGp1ZGdlbWVudCAqLworCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgT1RHX1NUQVRFX1VOREVGSU5FRDoKKwkJVkRCRygiZnNtLT5pZCA9ICVkXG4iLCBmc20tPmlkKTsKKwkJaWYgKGZzbS0+aWQpCisJCQlvdGdfc2V0X3N0YXRlKGZzbSwgT1RHX1NUQVRFX0JfSURMRSk7CisJCWVsc2UKKwkJCW90Z19zZXRfc3RhdGUoZnNtLCBPVEdfU1RBVEVfQV9JRExFKTsKKwkJYnJlYWs7CisJY2FzZSBPVEdfU1RBVEVfQl9JRExFOgorCQlpZiAoIWZzbS0+aWQpCisJCQlvdGdfc2V0X3N0YXRlKGZzbSwgT1RHX1NUQVRFX0FfSURMRSk7CisJCWVsc2UgaWYgKGZzbS0+Yl9zZXNzX3ZsZCAmJiBmc20tPnRyYW5zY2VpdmVyLT5nYWRnZXQpCisJCQlvdGdfc2V0X3N0YXRlKGZzbSwgT1RHX1NUQVRFX0JfUEVSSVBIRVJBTCk7CisJCWVsc2UgaWYgKGZzbS0+Yl9idXNfcmVxICYmIGZzbS0+Yl9zZXNzX2VuZCAmJiBmc20tPmJfc2UwX3NycCkKKwkJCW90Z19zZXRfc3RhdGUoZnNtLCBPVEdfU1RBVEVfQl9TUlBfSU5JVCk7CisJCWJyZWFrOworCWNhc2UgT1RHX1NUQVRFX0JfU1JQX0lOSVQ6CisJCWlmICghZnNtLT5pZCB8fCBmc20tPmJfc3JwX2RvbmUpCisJCQlvdGdfc2V0X3N0YXRlKGZzbSwgT1RHX1NUQVRFX0JfSURMRSk7CisJCWJyZWFrOworCWNhc2UgT1RHX1NUQVRFX0JfUEVSSVBIRVJBTDoKKwkJaWYgKCFmc20tPmlkIHx8ICFmc20tPmJfc2Vzc192bGQpCisJCQlvdGdfc2V0X3N0YXRlKGZzbSwgT1RHX1NUQVRFX0JfSURMRSk7CisJCWVsc2UgaWYgKGZzbS0+Yl9idXNfcmVxICYmIGZzbS0+dHJhbnNjZWl2ZXItPgorCQkJCWdhZGdldC0+Yl9obnBfZW5hYmxlICYmIGZzbS0+YV9idXNfc3VzcGVuZCkKKwkJCW90Z19zZXRfc3RhdGUoZnNtLCBPVEdfU1RBVEVfQl9XQUlUX0FDT04pOworCQlicmVhazsKKwljYXNlIE9UR19TVEFURV9CX1dBSVRfQUNPTjoKKwkJaWYgKGZzbS0+YV9jb25uKQorCQkJb3RnX3NldF9zdGF0ZShmc20sIE9UR19TVEFURV9CX0hPU1QpOworCQllbHNlIGlmICghZnNtLT5pZCB8fCAhZnNtLT5iX3Nlc3NfdmxkKQorCQkJb3RnX3NldF9zdGF0ZShmc20sIE9UR19TVEFURV9CX0lETEUpOworCQllbHNlIGlmIChmc20tPmFfYnVzX3Jlc3VtZSB8fCBmc20tPmJfYXNlMF9icnN0X3Rtb3V0KSB7CisJCQlmc20tPmJfYXNlMF9icnN0X3Rtb3V0ID0gMDsKKwkJCW90Z19zZXRfc3RhdGUoZnNtLCBPVEdfU1RBVEVfQl9QRVJJUEhFUkFMKTsKKwkJfQorCQlicmVhazsKKwljYXNlIE9UR19TVEFURV9CX0hPU1Q6CisJCWlmICghZnNtLT5pZCB8fCAhZnNtLT5iX3Nlc3NfdmxkKQorCQkJb3RnX3NldF9zdGF0ZShmc20sIE9UR19TVEFURV9CX0lETEUpOworCQllbHNlIGlmICghZnNtLT5iX2J1c19yZXEgfHwgIWZzbS0+YV9jb25uKQorCQkJb3RnX3NldF9zdGF0ZShmc20sIE9UR19TVEFURV9CX1BFUklQSEVSQUwpOworCQlicmVhazsKKwljYXNlIE9UR19TVEFURV9BX0lETEU6CisJCWlmIChmc20tPmlkKQorCQkJb3RnX3NldF9zdGF0ZShmc20sIE9UR19TVEFURV9CX0lETEUpOworCQllbHNlIGlmICghZnNtLT5hX2J1c19kcm9wICYmIChmc20tPmFfYnVzX3JlcSB8fCBmc20tPmFfc3JwX2RldCkpCisJCQlvdGdfc2V0X3N0YXRlKGZzbSwgT1RHX1NUQVRFX0FfV0FJVF9WUklTRSk7CisJCWJyZWFrOworCWNhc2UgT1RHX1NUQVRFX0FfV0FJVF9WUklTRToKKwkJaWYgKGZzbS0+aWQgfHwgZnNtLT5hX2J1c19kcm9wIHx8IGZzbS0+YV92YnVzX3ZsZCB8fAorCQkJCWZzbS0+YV93YWl0X3ZyaXNlX3Rtb3V0KSB7CisJCQlvdGdfc2V0X3N0YXRlKGZzbSwgT1RHX1NUQVRFX0FfV0FJVF9CQ09OKTsKKwkJfQorCQlicmVhazsKKwljYXNlIE9UR19TVEFURV9BX1dBSVRfQkNPTjoKKwkJaWYgKCFmc20tPmFfdmJ1c192bGQpCisJCQlvdGdfc2V0X3N0YXRlKGZzbSwgT1RHX1NUQVRFX0FfVkJVU19FUlIpOworCQllbHNlIGlmIChmc20tPmJfY29ubikKKwkJCW90Z19zZXRfc3RhdGUoZnNtLCBPVEdfU1RBVEVfQV9IT1NUKTsKKwkJZWxzZSBpZiAoZnNtLT5pZCB8IGZzbS0+YV9idXNfZHJvcCB8IGZzbS0+YV93YWl0X2Jjb25fdG1vdXQpCisJCQlvdGdfc2V0X3N0YXRlKGZzbSwgT1RHX1NUQVRFX0FfV0FJVF9WRkFMTCk7CisJCWJyZWFrOworCWNhc2UgT1RHX1NUQVRFX0FfSE9TVDoKKwkJaWYgKCghZnNtLT5hX2J1c19yZXEgfHwgZnNtLT5hX3N1c3BlbmRfcmVxKSAmJgorCQkJCWZzbS0+dHJhbnNjZWl2ZXItPmhvc3QtPmJfaG5wX2VuYWJsZSkKKwkJCW90Z19zZXRfc3RhdGUoZnNtLCBPVEdfU1RBVEVfQV9TVVNQRU5EKTsKKwkJZWxzZSBpZiAoZnNtLT5pZCB8fCAhZnNtLT5iX2Nvbm4gfHwgZnNtLT5hX2J1c19kcm9wKQorCQkJb3RnX3NldF9zdGF0ZShmc20sIE9UR19TVEFURV9BX1dBSVRfQkNPTik7CisJCWVsc2UgaWYgKCFmc20tPmFfdmJ1c192bGQpCisJCQlvdGdfc2V0X3N0YXRlKGZzbSwgT1RHX1NUQVRFX0FfVkJVU19FUlIpOworCQlicmVhazsKKwljYXNlIE9UR19TVEFURV9BX1NVU1BFTkQ6CisJCWlmICghZnNtLT5iX2Nvbm4gJiYgZnNtLT50cmFuc2NlaXZlci0+aG9zdC0+Yl9obnBfZW5hYmxlKQorCQkJb3RnX3NldF9zdGF0ZShmc20sIE9UR19TVEFURV9BX1BFUklQSEVSQUwpOworCQllbHNlIGlmICghZnNtLT5iX2Nvbm4gJiYgIWZzbS0+dHJhbnNjZWl2ZXItPmhvc3QtPmJfaG5wX2VuYWJsZSkKKwkJCW90Z19zZXRfc3RhdGUoZnNtLCBPVEdfU1RBVEVfQV9XQUlUX0JDT04pOworCQllbHNlIGlmIChmc20tPmFfYnVzX3JlcSB8fCBmc20tPmJfYnVzX3Jlc3VtZSkKKwkJCW90Z19zZXRfc3RhdGUoZnNtLCBPVEdfU1RBVEVfQV9IT1NUKTsKKwkJZWxzZSBpZiAoZnNtLT5pZCB8fCBmc20tPmFfYnVzX2Ryb3AgfHwgZnNtLT5hX2FpZGxfYmRpc190bW91dCkKKwkJCW90Z19zZXRfc3RhdGUoZnNtLCBPVEdfU1RBVEVfQV9XQUlUX1ZGQUxMKTsKKwkJZWxzZSBpZiAoIWZzbS0+YV92YnVzX3ZsZCkKKwkJCW90Z19zZXRfc3RhdGUoZnNtLCBPVEdfU1RBVEVfQV9WQlVTX0VSUik7CisJCWJyZWFrOworCWNhc2UgT1RHX1NUQVRFX0FfUEVSSVBIRVJBTDoKKwkJaWYgKGZzbS0+aWQgfHwgZnNtLT5hX2J1c19kcm9wKQorCQkJb3RnX3NldF9zdGF0ZShmc20sIE9UR19TVEFURV9BX1dBSVRfVkZBTEwpOworCQllbHNlIGlmIChmc20tPmJfYnVzX3N1c3BlbmQpCisJCQlvdGdfc2V0X3N0YXRlKGZzbSwgT1RHX1NUQVRFX0FfV0FJVF9CQ09OKTsKKwkJZWxzZSBpZiAoIWZzbS0+YV92YnVzX3ZsZCkKKwkJCW90Z19zZXRfc3RhdGUoZnNtLCBPVEdfU1RBVEVfQV9WQlVTX0VSUik7CisJCWJyZWFrOworCWNhc2UgT1RHX1NUQVRFX0FfV0FJVF9WRkFMTDoKKwkJaWYgKGZzbS0+aWQgfHwgZnNtLT5hX2J1c19yZXEgfHwgKCFmc20tPmFfc2Vzc192bGQgJiYKKwkJCQkJIWZzbS0+Yl9jb25uKSkKKwkJCW90Z19zZXRfc3RhdGUoZnNtLCBPVEdfU1RBVEVfQV9JRExFKTsKKwkJYnJlYWs7CisJY2FzZSBPVEdfU1RBVEVfQV9WQlVTX0VSUjoKKwkJaWYgKGZzbS0+aWQgfHwgZnNtLT5hX2J1c19kcm9wIHx8IGZzbS0+YV9jbHJfZXJyKQorCQkJb3RnX3NldF9zdGF0ZShmc20sIE9UR19TVEFURV9BX1dBSVRfVkZBTEwpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnNtLT5sb2NrLCBmbGFncyk7CisKKwlWREJHKCJxdWl0IHN0YXRlbWFjaGluZSwgY2hhbmdlZCA9ICVkXG4iLCBzdGF0ZV9jaGFuZ2VkKTsKKwlyZXR1cm4gc3RhdGVfY2hhbmdlZDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL290Zy9vdGdfZnNtLmggYi9kcml2ZXJzL3VzYi9vdGcvb3RnX2ZzbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZWNmMWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9vdGcvb3RnX2ZzbS5oCkBAIC0wLDAgKzEsMTU0IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDcsMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI3VuZGVmIERFQlVHCisjdW5kZWYgVkVSQk9TRQorCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgREJHKGZtdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgIlslc10gICIgZm10ICwgXAorCQkJCSBfX2Z1bmNfXywgIyMgYXJncykKKyNlbHNlCisjZGVmaW5lIERCRyhmbXQsIGFyZ3MuLi4pCWRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZmRlZiBWRVJCT1NFCisjZGVmaW5lIFZEQkcJCURCRworI2Vsc2UKKyNkZWZpbmUgVkRCRyhzdHVmZi4uLikJZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworI2lmZGVmIFZFUkJPU0UKKyNkZWZpbmUgTVBDX0xPQyBwcmludGsoIkN1cnJlbnQgTG9jYXRpb24gWyVzXTpbJWRdXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pCisjZWxzZQorI2RlZmluZSBNUENfTE9DIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKyNkZWZpbmUgUFJPVE9fVU5ERUYJKDApCisjZGVmaW5lIFBST1RPX0hPU1QJKDEpCisjZGVmaW5lIFBST1RPX0dBREdFVAkoMikKKworLyogT1RHIHN0YXRlIG1hY2hpbmUgYWNjb3JkaW5nIHRvIHRoZSBPVEcgc3BlYyAqLworc3RydWN0IG90Z19mc20geworCS8qIElucHV0ICovCisJaW50IGFfYnVzX3Jlc3VtZTsKKwlpbnQgYV9idXNfc3VzcGVuZDsKKwlpbnQgYV9jb25uOworCWludCBhX3Nlc3NfdmxkOworCWludCBhX3NycF9kZXQ7CisJaW50IGFfdmJ1c192bGQ7CisJaW50IGJfYnVzX3Jlc3VtZTsKKwlpbnQgYl9idXNfc3VzcGVuZDsKKwlpbnQgYl9jb25uOworCWludCBiX3NlMF9zcnA7CisJaW50IGJfc2Vzc19lbmQ7CisJaW50IGJfc2Vzc192bGQ7CisJaW50IGlkOworCisJLyogSW50ZXJuYWwgdmFyaWFibGVzICovCisJaW50IGFfc2V0X2JfaG5wX2VuOworCWludCBiX3NycF9kb25lOworCWludCBiX2hucF9lbmFibGU7CisKKwkvKiBUaW1lb3V0IGluZGljYXRvciBmb3IgdGltZXJzICovCisJaW50IGFfd2FpdF92cmlzZV90bW91dDsKKwlpbnQgYV93YWl0X2Jjb25fdG1vdXQ7CisJaW50IGFfYWlkbF9iZGlzX3Rtb3V0OworCWludCBiX2FzZTBfYnJzdF90bW91dDsKKworCS8qIEluZm9ybWF0aXZlIHZhcmlhYmxlcyAqLworCWludCBhX2J1c19kcm9wOworCWludCBhX2J1c19yZXE7CisJaW50IGFfY2xyX2VycjsKKwlpbnQgYV9zdXNwZW5kX3JlcTsKKwlpbnQgYl9idXNfcmVxOworCisJLyogT3V0cHV0ICovCisJaW50IGRydl92YnVzOworCWludCBsb2NfY29ubjsKKwlpbnQgbG9jX3NvZjsKKworCXN0cnVjdCBvdGdfZnNtX29wcyAqb3BzOworCXN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKnRyYW5zY2VpdmVyOworCisJLyogQ3VycmVudCB1c2IgcHJvdG9jb2wgdXNlZDogMDp1bmRlZmluZTsgMTpob3N0OyAyOmNsaWVudCAqLworCWludCBwcm90b2NvbDsKKwlzcGlubG9ja190IGxvY2s7Cit9OworCitzdHJ1Y3Qgb3RnX2ZzbV9vcHMgeworCXZvaWQJKCpjaHJnX3ZidXMpKGludCBvbik7CisJdm9pZAkoKmRydl92YnVzKShpbnQgb24pOworCXZvaWQJKCpsb2NfY29ubikoaW50IG9uKTsKKwl2b2lkCSgqbG9jX3NvZikoaW50IG9uKTsKKwl2b2lkCSgqc3RhcnRfcHVsc2UpKHZvaWQpOworCXZvaWQJKCphZGRfdGltZXIpKHZvaWQgKnRpbWVyKTsKKwl2b2lkCSgqZGVsX3RpbWVyKSh2b2lkICp0aW1lcik7CisJaW50CSgqc3RhcnRfaG9zdCkoc3RydWN0IG90Z19mc20gKmZzbSwgaW50IG9uKTsKKwlpbnQJKCpzdGFydF9nYWRnZXQpKHN0cnVjdCBvdGdfZnNtICpmc20sIGludCBvbik7Cit9OworCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdGdfY2hyZ192YnVzKHN0cnVjdCBvdGdfZnNtICpmc20sIGludCBvbikKK3sKKwlmc20tPm9wcy0+Y2hyZ192YnVzKG9uKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG90Z19kcnZfdmJ1cyhzdHJ1Y3Qgb3RnX2ZzbSAqZnNtLCBpbnQgb24pCit7CisJaWYgKGZzbS0+ZHJ2X3ZidXMgIT0gb24pIHsKKwkJZnNtLT5kcnZfdmJ1cyA9IG9uOworCQlmc20tPm9wcy0+ZHJ2X3ZidXMob24pOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIG90Z19sb2NfY29ubihzdHJ1Y3Qgb3RnX2ZzbSAqZnNtLCBpbnQgb24pCit7CisJaWYgKGZzbS0+bG9jX2Nvbm4gIT0gb24pIHsKKwkJZnNtLT5sb2NfY29ubiA9IG9uOworCQlmc20tPm9wcy0+bG9jX2Nvbm4ob24pOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIG90Z19sb2Nfc29mKHN0cnVjdCBvdGdfZnNtICpmc20sIGludCBvbikKK3sKKwlpZiAoZnNtLT5sb2Nfc29mICE9IG9uKSB7CisJCWZzbS0+bG9jX3NvZiA9IG9uOworCQlmc20tPm9wcy0+bG9jX3NvZihvbik7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb3RnX3N0YXJ0X3B1bHNlKHN0cnVjdCBvdGdfZnNtICpmc20pCit7CisJZnNtLT5vcHMtPnN0YXJ0X3B1bHNlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdGdfYWRkX3RpbWVyKHN0cnVjdCBvdGdfZnNtICpmc20sIHZvaWQgKnRpbWVyKQoreworCWZzbS0+b3BzLT5hZGRfdGltZXIodGltZXIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb3RnX2RlbF90aW1lcihzdHJ1Y3Qgb3RnX2ZzbSAqZnNtLCB2b2lkICp0aW1lcikKK3sKKwlmc20tPm9wcy0+ZGVsX3RpbWVyKHRpbWVyKTsKK30KKworaW50IG90Z19zdGF0ZW1hY2hpbmUoc3RydWN0IG90Z19mc20gKmZzbSk7CisKKy8qIERlZmluZWQgYnkgZGV2aWNlIHNwZWNpZmljIGRyaXZlciwgZm9yIGRpZmZlcmVudCB0aW1lciBpbXBsZW1lbnRhdGlvbiAqLworZXh0ZXJuIHN0cnVjdCBmc2xfb3RnX3RpbWVyICphX3dhaXRfdnJpc2VfdG1yLCAqYV93YWl0X2Jjb25fdG1yLAorCSphX2FpZGxfYmRpc190bXIsICpiX2FzZTBfYnJzdF90bXIsICpiX3NlMF9zcnBfdG1yLCAqYl9zcnBfZmFpbF90bXIsCisJKmFfd2FpdF9lbnVtX3RtcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL290Zy90d2w0MDMwLXVzYi5jIGIvZHJpdmVycy91c2Ivb3RnL3R3bDQwMzAtdXNiLmMKaW5kZXggZTAxYjA3My4uZWZlYjRkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivb3RnL3R3bDQwMzAtdXNiLmMKKysrIGIvZHJpdmVycy91c2Ivb3RnL3R3bDQwMzAtdXNiLmMKQEAgLTE2MCw2ICsxNjAsNyBAQAogCiAJaW50CQkJaXJxOwogCXU4CQkJbGlua3N0YXQ7CisJYm9vbAkJCXZidXNfc3VwcGxpZWQ7CiAJdTgJCQlhc2xlZXA7CiAJYm9vbAkJCWlycV9lbmFibGVkOwogfTsKQEAgLTI1MCw2ICsyNTEsOCBAQAogCWludAlzdGF0dXM7CiAJaW50CWxpbmtzdGF0ID0gVVNCX0VWRU5UX05PTkU7CiAKKwl0d2wtPnZidXNfc3VwcGxpZWQgPSBmYWxzZTsKKwogCS8qCiAJICogRm9yIElEL1ZCVVMgc2Vuc2luZywgc2VlIG1hbnVhbCBzZWN0aW9uIDE1LjQuOCAuLi4KIAkgKiBleGNlcHQgd2hlbiB1c2luZyBvbmx5IGJhdHRlcnkgYmFja3VwIHBvd2VyLCB0d28KQEAgLTI2NSw2ICsyNjgsOSBAQAogCWlmIChzdGF0dXMgPCAwKQogCQlkZXZfZXJyKHR3bC0+ZGV2LCAiVVNCIGxpbmsgc3RhdHVzIGVyciAlZFxuIiwgc3RhdHVzKTsKIAllbHNlIGlmIChzdGF0dXMgJiAoQklUKDcpIHwgQklUKDIpKSkgeworCQlpZiAoc3RhdHVzICYgKEJJVCg3KSkpCisgICAgICAgICAgICAgICAgICAgICAgICB0d2wtPnZidXNfc3VwcGxpZWQgPSB0cnVlOworCiAJCWlmIChzdGF0dXMgJiBCSVQoMikpCiAJCQlsaW5rc3RhdCA9IFVTQl9FVkVOVF9JRDsKIAkJZWxzZQpAQCAtNDg0LDcgKzQ5MCw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdHdsLT5sb2NrLCBmbGFncyk7CiAJcmV0ID0gc3ByaW50ZihidWYsICIlc1xuIiwKLQkJCSh0d2wtPmxpbmtzdGF0ID09IFVTQl9FVkVOVF9WQlVTKSA/ICJvbiIgOiAib2ZmIik7CisJCQl0d2wtPnZidXNfc3VwcGxpZWQgPyAib24iIDogIm9mZiIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR3bC0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJldDsKQEAgLTYwOCw2ICs2MTQsNyBAQAogCXR3bC0+b3RnLnNldF9wZXJpcGhlcmFsCT0gdHdsNDAzMF9zZXRfcGVyaXBoZXJhbDsKIAl0d2wtPm90Zy5zZXRfc3VzcGVuZAk9IHR3bDQwMzBfc2V0X3N1c3BlbmQ7CiAJdHdsLT51c2JfbW9kZQkJPSBwZGF0YS0+dXNiX21vZGU7CisJdHdsLT52YnVzX3N1cHBsaWVkCT0gZmFsc2U7CiAJdHdsLT5hc2xlZXAgPSAxOwogCiAJLyogaW5pdCBzcGlubG9jayBmb3Igd29ya3F1ZXVlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9vdGcvdHdsNjAzMC11c2IuYyBiL2RyaXZlcnMvdXNiL290Zy90d2w2MDMwLXVzYi5jCmluZGV4IDhhOTFiNGIuLjNmMmUwNzAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9vdGcvdHdsNjAzMC11c2IuYworKysgYi9kcml2ZXJzL3VzYi9vdGcvdHdsNjAzMC11c2IuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKIC8qIHVzYiByZWdpc3RlciBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBVU0JfVkVORE9SX0lEX0xTQgkJMHgwMApAQCAtMTAxLDcgKzEwMiw3IEBACiAJYm9vbAkJCWlycV9lbmFibGVkOwogfTsKIAotI2RlZmluZSB4Y2Vpdl90b190d2woeCkJCWNvbnRhaW5lcl9vZigoeCksIHN0cnVjdCB0d2w2MDMwX3VzYiwgb3RnKTsKKyNkZWZpbmUgeGNlaXZfdG9fdHdsKHgpCQljb250YWluZXJfb2YoKHgpLCBzdHJ1Y3QgdHdsNjAzMF91c2IsIG90ZykKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMTg4LDYgKzE4OSwxOSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHR3bDYwMzBfc3RhcnRfc3JwKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKngpCit7CisJc3RydWN0IHR3bDYwMzBfdXNiICp0d2wgPSB4Y2Vpdl90b190d2woeCk7CisKKwl0d2w2MDMwX3dyaXRlYih0d2wsIFRXTF9NT0RVTEVfVVNCLCAweDI0LCBVU0JfVkJVU19DVFJMX1NFVCk7CisJdHdsNjAzMF93cml0ZWIodHdsLCBUV0xfTU9EVUxFX1VTQiwgMHg4NCwgVVNCX1ZCVVNfQ1RSTF9TRVQpOworCisJbWRlbGF5KDEwMCk7CisJdHdsNjAzMF93cml0ZWIodHdsLCBUV0xfTU9EVUxFX1VTQiwgMHhhMCwgVVNCX1ZCVVNfQ1RSTF9DTFIpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgdHdsNjAzMF91c2JfbGRvX2luaXQoc3RydWN0IHR3bDYwMzBfdXNiICp0d2wpCiB7CiAKQEAgLTQwMyw2ICs0MTcsNyBAQAogCXR3bC0+b3RnLmluaXQJCT0gdHdsNjAzMF9waHlfaW5pdDsKIAl0d2wtPm90Zy5zaHV0ZG93bgk9IHR3bDYwMzBfcGh5X3NodXRkb3duOwogCXR3bC0+b3RnLnNldF9zdXNwZW5kCT0gdHdsNjAzMF9waHlfc3VzcGVuZDsKKwl0d2wtPm90Zy5zdGFydF9zcnAJPSB0d2w2MDMwX3N0YXJ0X3NycDsKIAogCS8qIGluaXQgc3BpbmxvY2sgZm9yIHdvcmtxdWV1ZSAqLwogCXNwaW5fbG9ja19pbml0KCZ0d2wtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvcmVuZXNhc191c2Jocy9LY29uZmlnIGIvZHJpdmVycy91c2IvcmVuZXNhc191c2Jocy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZTY0OTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9yZW5lc2FzX3VzYmhzL0tjb25maWcKQEAgLTAsMCArMSwxNiBAQAorIworIyBSZW5lc2FzIFVTQiBDb250cm9sbGVyIERyaXZlcnMKKyMKKworY29uZmlnIFVTQl9SRU5FU0FTX1VTQkhTCisJdHJpc3RhdGUgJ1JlbmVzYXMgVVNCSFMgY29udHJvbGxlcicKKwlkZXBlbmRzIG9uIFNVUEVSSCB8fCBBUkNIX1NITU9CSUxFCisJZGVmYXVsdCBuCisJaGVscAorCSAgIFJlbmVzYXMgVVNCSFMgaXMgYSBkaXNjcmV0ZSBVU0IgaG9zdCBhbmQgcGVyaXBoZXJhbCBjb250cm9sbGVyIGNoaXAKKwkgICB0aGF0IHN1cHBvcnRzIGJvdGggZnVsbCBhbmQgaGlnaCBzcGVlZCBVU0IgMi4wIGRhdGEgdHJhbnNmZXJzLgorCSAgIEl0IGhhcyBuaW5lIG9yIG1vcmUgY29uZmlndXJhYmxlIGVuZHBvaW50cywgYW5kIGVuZHBvaW50IHplcm8uCisKKwkgICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQorCSAgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJyZW5lc2FzX3VzYmhzIiBhbmQgZm9yY2UgYWxsCisJICAgZ2FkZ2V0IGRyaXZlcnMgdG8gYWxzbyBiZSBkeW5hbWljYWxseSBsaW5rZWQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9yZW5lc2FzX3VzYmhzL01ha2VmaWxlIGIvZHJpdmVycy91c2IvcmVuZXNhc191c2Jocy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODc5OGFkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvcmVuZXNhc191c2Jocy9NYWtlZmlsZQpAQCAtMCwwICsxLDkgQEAKKyMKKyMgZm9yIFJlbmVzYXMgVVNCCisjCisKK29iai0kKENPTkZJR19VU0JfUkVORVNBU19VU0JIUykJKz0gcmVuZXNhc191c2Jocy5vCisKK3JlbmVzYXNfdXNiaHMteQkJCTo9IGNvbW1vbi5vIG1vZC5vIHBpcGUubworCityZW5lc2FzX3VzYmhzLSQoQ09ORklHX1VTQl9SRU5FU0FTX1VTQkhTX1VEQykJKz0gbW9kX2dhZGdldC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9yZW5lc2FzX3VzYmhzL2NvbW1vbi5jIGIvZHJpdmVycy91c2IvcmVuZXNhc191c2Jocy9jb21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzY2NGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvcmVuZXNhc191c2Jocy9jb21tb24uYwpAQCAtMCwwICsxLDQzNyBAQAorLyoKKyAqIFJlbmVzYXMgVVNCIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogS3VuaW5vcmkgTW9yaW1vdG8gPGt1bmlub3JpLm1vcmltb3RvLmd4QHJlbmVzYXMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorI2luY2x1ZGUgIi4vY29tbW9uLmgiCisKKyNkZWZpbmUgVVNCSFNGX1JVTlRJTUVfUFdDVFJMCSgxIDw8IDApCisKKy8qIHN0YXR1cyAqLworI2RlZmluZSB1c2Joc2NfZmxhZ3NfaW5pdChwKSAgIGRvIHsocCktPmZsYWdzID0gMDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdXNiaHNjX2ZsYWdzX3NldChwLCBiKSAoKHApLT5mbGFncyB8PSAgKGIpKQorI2RlZmluZSB1c2Joc2NfZmxhZ3NfY2xyKHAsIGIpICgocCktPmZsYWdzICY9IH4oYikpCisjZGVmaW5lIHVzYmhzY19mbGFnc19oYXMocCwgYikgKChwKS0+ZmxhZ3MgJiAgIChiKSkKKworLyoKKyAqIHBsYXRmb3JtIGNhbGwgYmFjaworICoKKyAqIHJlbmVzYXMgdXNiIHN1cHBvcnQgcGxhdGZvcm0gY2FsbGJhY2sgZnVuY3Rpb24uCisgKiBCZWxvdyBtYWNybyBjYWxsIGl0LgorICogaWYgcGxhdGZvcm0gZG9lc24ndCBoYXZlIGNhbGxiYWNrLCBpdCByZXR1cm4gMCAobm8gZXJyb3IpCisgKi8KKyNkZWZpbmUgdXNiaHNfcGxhdGZvcm1fY2FsbChwcml2LCBmdW5jLCBhcmdzLi4uKVwKKwkoIShwcml2KSA/IC1FTk9ERVYgOgkJCVwKKwkgISgocHJpdiktPnBmdW5jLT5mdW5jKSA/IDAgOgkJXAorCSAocHJpdiktPnBmdW5jLT5mdW5jKGFyZ3MpKQorCisvKgorICoJCWNvbW1vbiBmdW5jdGlvbnMKKyAqLwordTE2IHVzYmhzX3JlYWQoc3RydWN0IHVzYmhzX3ByaXYgKnByaXYsIHUzMiByZWcpCit7CisJcmV0dXJuIGlvcmVhZDE2KHByaXYtPmJhc2UgKyByZWcpOworfQorCit2b2lkIHVzYmhzX3dyaXRlKHN0cnVjdCB1c2Joc19wcml2ICpwcml2LCB1MzIgcmVnLCB1MTYgZGF0YSkKK3sKKwlpb3dyaXRlMTYoZGF0YSwgcHJpdi0+YmFzZSArIHJlZyk7Cit9CisKK3ZvaWQgdXNiaHNfYnNldChzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTE2IG1hc2ssIHUxNiBkYXRhKQoreworCXUxNiB2YWwgPSB1c2Joc19yZWFkKHByaXYsIHJlZyk7CisKKwl2YWwgJj0gfm1hc2s7CisJdmFsIHw9IGRhdGEgJiBtYXNrOworCisJdXNiaHNfd3JpdGUocHJpdiwgcmVnLCB2YWwpOworfQorCitzdHJ1Y3QgdXNiaHNfcHJpdiAqdXNiaHNfcGRldl90b19wcml2KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKK30KKworLyoKKyAqCQlzeXNjZmcgZnVuY3Rpb25zCisgKi8KK3ZvaWQgdXNiaHNfc3lzX2Nsb2NrX2N0cmwoc3RydWN0IHVzYmhzX3ByaXYgKnByaXYsIGludCBlbmFibGUpCit7CisJdXNiaHNfYnNldChwcml2LCBTWVNDRkcsIFNDS0UsIGVuYWJsZSA/IFNDS0UgOiAwKTsKK30KKwordm9pZCB1c2Joc19zeXNfaGlzcGVlZF9jdHJsKHN0cnVjdCB1c2Joc19wcml2ICpwcml2LCBpbnQgZW5hYmxlKQoreworCXVzYmhzX2JzZXQocHJpdiwgU1lTQ0ZHLCBIU0UsIGVuYWJsZSA/IEhTRSA6IDApOworfQorCit2b2lkIHVzYmhzX3N5c191c2JfY3RybChzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdiwgaW50IGVuYWJsZSkKK3sKKwl1c2Joc19ic2V0KHByaXYsIFNZU0NGRywgVVNCRSwgZW5hYmxlID8gVVNCRSA6IDApOworfQorCit2b2lkIHVzYmhzX3N5c19ob3N0X2N0cmwoc3RydWN0IHVzYmhzX3ByaXYgKnByaXYsIGludCBlbmFibGUpCit7CisJdTE2IG1hc2sgPSBEQ0ZNIHwgRFJQRCB8IERQUlBVOworCXUxNiB2YWwgID0gRENGTSB8IERSUEQ7CisKKwkvKgorCSAqIGlmIGVuYWJsZQorCSAqCisJICogLSBzZWxlY3QgSG9zdCBtb2RlCisJICogLSBEKyBMaW5lL0QtIExpbmUgUHVsbC1kb3duCisJICovCisJdXNiaHNfYnNldChwcml2LCBTWVNDRkcsIG1hc2ssIGVuYWJsZSA/IHZhbCA6IDApOworfQorCit2b2lkIHVzYmhzX3N5c19mdW5jdGlvbl9jdHJsKHN0cnVjdCB1c2Joc19wcml2ICpwcml2LCBpbnQgZW5hYmxlKQoreworCXUxNiBtYXNrID0gRENGTSB8IERSUEQgfCBEUFJQVTsKKwl1MTYgdmFsICA9IERQUlBVOworCisJLyoKKwkgKiBpZiBlbmFibGUKKwkgKgorCSAqIC0gc2VsZWN0IEZ1bmN0aW9uIG1vZGUKKwkgKiAtIEQrIExpbmUgUHVsbC11cAorCSAqLworCXVzYmhzX2JzZXQocHJpdiwgU1lTQ0ZHLCBtYXNrLCBlbmFibGUgPyB2YWwgOiAwKTsKK30KKworLyoKKyAqCQlmcmFtZSBmdW5jdGlvbnMKKyAqLworaW50IHVzYmhzX2ZyYW1lX2dldF9udW0oc3RydWN0IHVzYmhzX3ByaXYgKnByaXYpCit7CisJcmV0dXJuIHVzYmhzX3JlYWQocHJpdiwgRlJNTlVNKSAmIEZSTk1fTUFTSzsKK30KKworLyoKKyAqCQlsb2NhbCBmdW5jdGlvbnMKKyAqLworc3RhdGljIHZvaWQgdXNiaHNjX2J1c19jdHJsKHN0cnVjdCB1c2Joc19wcml2ICpwcml2LCBpbnQgZW5hYmxlKQoreworCWludCB3YWl0ID0gdXNiaHNfZ2V0X2RwYXJhbShwcml2LCBidXN3YWl0X2J3YWl0KTsKKwl1MTYgZGF0YSA9IDA7CisKKwlpZiAoZW5hYmxlKSB7CisJCS8qIHNldCBidXMgd2FpdCBpZiBwbGF0Zm9ybSBoYXZlICovCisJCWlmICh3YWl0KQorCQkJdXNiaHNfYnNldChwcml2LCBCVVNXQUlULCAweDAwMEYsIHdhaXQpOworCX0KKwl1c2Joc193cml0ZShwcml2LCBEVlNUQ1RSLCBkYXRhKTsKK30KKworLyoKKyAqCQlwbGF0Zm9ybSBkZWZhdWx0IHBhcmFtCisgKi8KK3N0YXRpYyB1MzIgdXNiaHNjX2RlZmF1bHRfcGlwZV90eXBlW10gPSB7CisJCVVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wsCisJCVVTQl9FTkRQT0lOVF9YRkVSX0lTT0MsCisJCVVTQl9FTkRQT0lOVF9YRkVSX0lTT0MsCisJCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKKwkJVVNCX0VORFBPSU5UX1hGRVJfSU5ULAorCQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCisJCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKK307CisKKy8qCisgKgkJcG93ZXIgY29udHJvbAorICovCitzdGF0aWMgdm9pZCB1c2Joc2NfcG93ZXJfY3RybChzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdiwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB1c2Joc19wcml2X3RvX2Rldihwcml2KTsKKworCWlmIChlbmFibGUpIHsKKwkJLyogZW5hYmxlIFBNICovCisJCXBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2KTsKKworCQkvKiBVU0Igb24gKi8KKwkJdXNiaHNfc3lzX2Nsb2NrX2N0cmwocHJpdiwgZW5hYmxlKTsKKwkJdXNiaHNjX2J1c19jdHJsKHByaXYsIGVuYWJsZSk7CisJfSBlbHNlIHsKKwkJLyogVVNCIG9mZiAqLworCQl1c2Joc2NfYnVzX2N0cmwocHJpdiwgZW5hYmxlKTsKKwkJdXNiaHNfc3lzX2Nsb2NrX2N0cmwocHJpdiwgZW5hYmxlKTsKKworCQkvKiBkaXNhYmxlIFBNICovCisJCXBtX3J1bnRpbWVfcHV0X3N5bmMoZGV2KTsKKwl9Cit9CisKKy8qCisgKgkJbm90aWZ5IGhvdHBsdWcKKyAqLworc3RhdGljIHZvaWQgdXNiaHNjX25vdGlmeV9ob3RwbHVnKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLAorCQkJCQkgICAgICAgc3RydWN0IHVzYmhzX3ByaXYsCisJCQkJCSAgICAgICBub3RpZnlfaG90cGx1Z193b3JrLndvcmspOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB1c2Joc19wcml2X3RvX3BkZXYocHJpdik7CisJc3RydWN0IHVzYmhzX21vZCAqbW9kID0gdXNiaHNfbW9kX2dldF9jdXJyZW50KHByaXYpOworCWludCBpZDsKKwlpbnQgZW5hYmxlOworCWludCByZXQ7CisKKwkvKgorCSAqIGdldCB2YnVzIHN0YXR1cyBmcm9tIHBsYXRmb3JtCisJICovCisJZW5hYmxlID0gdXNiaHNfcGxhdGZvcm1fY2FsbChwcml2LCBnZXRfdmJ1cywgcGRldik7CisKKwkvKgorCSAqIGdldCBpZCBmcm9tIHBsYXRmb3JtCisJICovCisJaWQgPSB1c2Joc19wbGF0Zm9ybV9jYWxsKHByaXYsIGdldF9pZCwgcGRldik7CisKKwlpZiAoZW5hYmxlICYmICFtb2QpIHsKKwkJcmV0ID0gdXNiaHNfbW9kX2NoYW5nZShwcml2LCBpZCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuOworCisJCWRldl9kYmcoJnBkZXYtPmRldiwgIiVzIGVuYWJsZVxuIiwgX19mdW5jX18pOworCisJCS8qIHBvd2VyIG9uICovCisJCWlmICh1c2Joc2NfZmxhZ3NfaGFzKHByaXYsIFVTQkhTRl9SVU5USU1FX1BXQ1RSTCkpCisJCQl1c2Joc2NfcG93ZXJfY3RybChwcml2LCBlbmFibGUpOworCisJCS8qIG1vZHVsZSBzdGFydCAqLworCQl1c2Joc19tb2RfY2FsbChwcml2LCBzdGFydCwgcHJpdik7CisKKwl9IGVsc2UgaWYgKCFlbmFibGUgJiYgbW9kKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgIiVzIGRpc2FibGVcbiIsIF9fZnVuY19fKTsKKworCQkvKiBtb2R1bGUgc3RvcCAqLworCQl1c2Joc19tb2RfY2FsbChwcml2LCBzdG9wLCBwcml2KTsKKworCQkvKiBwb3dlciBvZmYgKi8KKwkJaWYgKHVzYmhzY19mbGFnc19oYXMocHJpdiwgVVNCSFNGX1JVTlRJTUVfUFdDVFJMKSkKKwkJCXVzYmhzY19wb3dlcl9jdHJsKHByaXYsIGVuYWJsZSk7CisKKwkJdXNiaHNfbW9kX2NoYW5nZShwcml2LCAtMSk7CisKKwkJLyogcmVzZXQgcGh5IGZvciBuZXh0IGNvbm5lY3Rpb24gKi8KKwkJdXNiaHNfcGxhdGZvcm1fY2FsbChwcml2LCBwaHlfcmVzZXQsIHBkZXYpOworCX0KK30KKworaW50IHVzYmhzY19kcnZjbGxiY2tfbm90aWZ5X2hvdHBsdWcoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdiA9IHVzYmhzX3BkZXZfdG9fcHJpdihwZGV2KTsKKwlpbnQgZGVsYXkgPSB1c2Joc19nZXRfZHBhcmFtKHByaXYsIGRldGVjdGlvbl9kZWxheSk7CisKKwkvKgorCSAqIFRoaXMgZnVuY3Rpb25zIHdpbGwgYmUgY2FsbGVkIGluIGludGVycnVwdC4KKwkgKiBUbyBtYWtlIHN1cmUgc2FmZXR5IGNvbnRleHQsCisJICogdXNlIHdvcmtxdWV1ZSBmb3IgdXNiaHNfbm90aWZ5X2hvdHBsdWcKKwkgKi8KKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnByaXYtPm5vdGlmeV9ob3RwbHVnX3dvcmssIGRlbGF5KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqCQlwbGF0Zm9ybSBmdW5jdGlvbnMKKyAqLworc3RhdGljIGludCBfX2RldmluaXQgdXNiaHNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVuZXNhc191c2Joc19wbGF0Zm9ybV9pbmZvICppbmZvID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHJlbmVzYXNfdXNiaHNfZHJpdmVyX2NhbGxiYWNrICpkZnVuYzsKKwlzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwl1bnNpZ25lZCBpbnQgaXJxOworCWludCByZXQ7CisKKwkvKiBjaGVjayBwbGF0Zm9ybSBpbmZvcm1hdGlvbiAqLworCWlmICghaW5mbyB8fAorCSAgICAhaW5mby0+cGxhdGZvcm1fY2FsbGJhY2suZ2V0X2lkKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIHBsYXRmb3JtIGluZm9ybWF0aW9uXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogcGxhdGZvcm0gZGF0YSAqLworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoIXJlcyB8fCAoaW50KWlycSA8PSAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vdCBlbm91Z2ggUmVuZXNhcyBVU0IgcGxhdGZvcm0gcmVzb3VyY2VzLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIHVzYiBwcml2YXRlIGRhdGEgKi8KKwlwcml2ID0ga3phbGxvYyhzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ291bGQgbm90IGFsbG9jYXRlIHByaXZcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwcml2LT5iYXNlID0gaW9yZW1hcF9ub2NhY2hlKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFwcml2LT5iYXNlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImlvcmVtYXAgZXJyb3IuXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBwcm9iZV9lbmRfa2ZyZWU7CisJfQorCisJLyoKKwkgKiBjYXJlIHBsYXRmb3JtIGluZm8KKwkgKi8KKwlwcml2LT5wZnVuYwk9ICZpbmZvLT5wbGF0Zm9ybV9jYWxsYmFjazsKKwlwcml2LT5kcGFyYW0JPSAmaW5mby0+ZHJpdmVyX3BhcmFtOworCisJLyogc2V0IGRyaXZlciBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIHBsYXRmb3JtICovCisJZGZ1bmMJCQk9ICZpbmZvLT5kcml2ZXJfY2FsbGJhY2s7CisJZGZ1bmMtPm5vdGlmeV9ob3RwbHVnCT0gdXNiaHNjX2RydmNsbGJja19ub3RpZnlfaG90cGx1ZzsKKworCS8qIHNldCBkZWZhdWx0IHBhcmFtIGlmIHBsYXRmb3JtIGRvZXNuJ3QgaGF2ZSAqLworCWlmICghcHJpdi0+ZHBhcmFtLT5waXBlX3R5cGUpIHsKKwkJcHJpdi0+ZHBhcmFtLT5waXBlX3R5cGUgPSB1c2Joc2NfZGVmYXVsdF9waXBlX3R5cGU7CisJCXByaXYtPmRwYXJhbS0+cGlwZV9zaXplID0gQVJSQVlfU0laRSh1c2Joc2NfZGVmYXVsdF9waXBlX3R5cGUpOworCX0KKworCS8qIEZJWE1FICovCisJLyogcnVudGltZSBwb3dlciBjb250cm9sID8gKi8KKwlpZiAocHJpdi0+cGZ1bmMtPmdldF92YnVzKQorCQl1c2Joc2NfZmxhZ3Nfc2V0KHByaXYsIFVTQkhTRl9SVU5USU1FX1BXQ1RSTCk7CisKKwkvKgorCSAqIHByaXYgc2V0dGluZ3MKKwkgKi8KKwlwcml2LT5pcnEJPSBpcnE7CisJcHJpdi0+cGRldgk9IHBkZXY7CisJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPm5vdGlmeV9ob3RwbHVnX3dvcmssIHVzYmhzY19ub3RpZnlfaG90cGx1Zyk7CisJc3Bpbl9sb2NrX2luaXQodXNiaHNfcHJpdl90b19sb2NrKHByaXYpKTsKKworCS8qIGNhbGwgcGlwZSBhbmQgbW9kdWxlIGluaXQgKi8KKwlyZXQgPSB1c2Joc19waXBlX3Byb2JlKHByaXYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIHByb2JlX2VuZF9pb3VubWFwOworCisJcmV0ID0gdXNiaHNfbW9kX3Byb2JlKHByaXYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIHByb2JlX2VuZF9waXBlX2V4aXQ7CisKKwkvKiBkZXZfc2V0X2RydmRhdGEgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciB1c2Joc19tb2RfaW5pdCAqLworCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBwcml2KTsKKworCS8qCisJICogZGV2aWVjZSByZXNldCBoZXJlIGJlY2F1c2UKKwkgKiBVU0IgZGV2aWNlIG1pZ2h0IGJlIHVzZWQgaW4gYm9vdCBsb2FkZXIuCisJICovCisJdXNiaHNfc3lzX2Nsb2NrX2N0cmwocHJpdiwgMCk7CisKKwkvKgorCSAqIHBsYXRmb3JtIGNhbGwKKwkgKgorCSAqIFVTQiBwaHkgc2V0dXAgbWlnaHQgZGVwZW5kIG9uIENQVS9Cb2FyZC4KKwkgKiBJZiBwbGF0Zm9ybSBoYXMgaXRzIGNhbGxiYWNrIGZ1bmN0aW9ucywKKwkgKiBjYWxsIGl0IGhlcmUuCisJICovCisJcmV0ID0gdXNiaHNfcGxhdGZvcm1fY2FsbChwcml2LCBoYXJkd2FyZV9pbml0LCBwZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwbGF0Zm9ybSBwcm92ZSBmYWlsZWQuXG4iKTsKKwkJZ290byBwcm9iZV9lbmRfbW9kX2V4aXQ7CisJfQorCisJLyogcmVzZXQgcGh5IGZvciBjb25uZWN0aW9uICovCisJdXNiaHNfcGxhdGZvcm1fY2FsbChwcml2LCBwaHlfcmVzZXQsIHBkZXYpOworCisJLyogcG93ZXIgY29udHJvbCAqLworCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOworCWlmICghdXNiaHNjX2ZsYWdzX2hhcyhwcml2LCBVU0JIU0ZfUlVOVElNRV9QV0NUUkwpKSB7CisJCXVzYmhzY19wb3dlcl9jdHJsKHByaXYsIDEpOworCQl1c2Joc19tb2RfYXV0b25vbXlfbW9kZShwcml2KTsKKwl9CisKKwkvKgorCSAqIG1hbnVhbCBjYWxsIG5vdGlmeV9ob3RwbHVnIGZvciBjb2xkIHBsdWcKKwkgKi8KKwlyZXQgPSB1c2Joc2NfZHJ2Y2xsYmNrX25vdGlmeV9ob3RwbHVnKHBkZXYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIHByb2JlX2VuZF9jYWxsX3JlbW92ZTsKKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJwcm9iZWRcbiIpOworCisJcmV0dXJuIHJldDsKKworcHJvYmVfZW5kX2NhbGxfcmVtb3ZlOgorCXVzYmhzX3BsYXRmb3JtX2NhbGwocHJpdiwgaGFyZHdhcmVfZXhpdCwgcGRldik7Citwcm9iZV9lbmRfbW9kX2V4aXQ6CisJdXNiaHNfbW9kX3JlbW92ZShwcml2KTsKK3Byb2JlX2VuZF9waXBlX2V4aXQ6CisJdXNiaHNfcGlwZV9yZW1vdmUocHJpdik7Citwcm9iZV9lbmRfaW91bm1hcDoKKwlpb3VubWFwKHByaXYtPmJhc2UpOworcHJvYmVfZW5kX2tmcmVlOgorCWtmcmVlKHByaXYpOworCisJZGV2X2luZm8oJnBkZXYtPmRldiwgInByb2JlIGZhaWxlZFxuIik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB1c2Joc19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdiA9IHVzYmhzX3BkZXZfdG9fcHJpdihwZGV2KTsKKwlzdHJ1Y3QgcmVuZXNhc191c2Joc19wbGF0Zm9ybV9pbmZvICppbmZvID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHJlbmVzYXNfdXNiaHNfZHJpdmVyX2NhbGxiYWNrICpkZnVuYyA9ICZpbmZvLT5kcml2ZXJfY2FsbGJhY2s7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJ1c2IgcmVtb3ZlXG4iKTsKKworCWRmdW5jLT5ub3RpZnlfaG90cGx1ZyA9IE5VTEw7CisKKwkvKiBwb3dlciBvZmYgKi8KKwlpZiAoIXVzYmhzY19mbGFnc19oYXMocHJpdiwgVVNCSFNGX1JVTlRJTUVfUFdDVFJMKSkKKwkJdXNiaHNjX3Bvd2VyX2N0cmwocHJpdiwgMCk7CisKKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CisKKwl1c2Joc19wbGF0Zm9ybV9jYWxsKHByaXYsIGhhcmR3YXJlX2V4aXQsIHBkZXYpOworCXVzYmhzX21vZF9yZW1vdmUocHJpdik7CisJdXNiaHNfcGlwZV9yZW1vdmUocHJpdik7CisJaW91bm1hcChwcml2LT5iYXNlKTsKKwlrZnJlZShwcml2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciByZW5lc2FzX3VzYmhzX2RyaXZlciA9IHsKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAicmVuZXNhc191c2JocyIsCisJfSwKKwkucHJvYmUJCT0gdXNiaHNfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh1c2Joc19yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdXNiaHNfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnJlbmVzYXNfdXNiaHNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVzYmhzX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcmVuZXNhc191c2Joc19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh1c2Joc19pbml0KTsKK21vZHVsZV9leGl0KHVzYmhzX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlJlbmVzYXMgVVNCIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiS3VuaW5vcmkgTW9yaW1vdG8gPGt1bmlub3JpLm1vcmltb3RvLmd4QHJlbmVzYXMuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvcmVuZXNhc191c2Jocy9jb21tb24uaCBiL2RyaXZlcnMvdXNiL3JlbmVzYXNfdXNiaHMvY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFhZGNiNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3JlbmVzYXNfdXNiaHMvY29tbW9uLmgKQEAgLTAsMCArMSwyMzAgQEAKKy8qCisgKiBSZW5lc2FzIFVTQiBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqIEt1bmlub3JpIE1vcmltb3RvIDxrdW5pbm9yaS5tb3JpbW90by5neEByZW5lc2FzLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKyNpZm5kZWYgUkVORVNBU19VU0JfRFJJVkVSX0gKKyNkZWZpbmUgUkVORVNBU19VU0JfRFJJVkVSX0gKKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9yZW5lc2FzX3VzYmhzLmg+CisKK3N0cnVjdCB1c2Joc19wcml2OworCisjaW5jbHVkZSAiLi9tb2QuaCIKKyNpbmNsdWRlICIuL3BpcGUuaCIKKworLyoKKyAqCisgKgkJcmVnaXN0ZXIgZGVmaW5lCisgKgorICovCisjZGVmaW5lIFNZU0NGRwkJMHgwMDAwCisjZGVmaW5lIEJVU1dBSVQJCTB4MDAwMgorI2RlZmluZSBEVlNUQ1RSCQkweDAwMDgKKyNkZWZpbmUgQ0ZJRk8JCTB4MDAxNAorI2RlZmluZSBDRklGT1NFTAkweDAwMjAKKyNkZWZpbmUgQ0ZJRk9DVFIJMHgwMDIyCisjZGVmaW5lIElOVEVOQjAJCTB4MDAzMAorI2RlZmluZSBJTlRFTkIxCQkweDAwMzIKKyNkZWZpbmUgQlJEWUVOQgkJMHgwMDM2CisjZGVmaW5lIE5SRFlFTkIJCTB4MDAzOAorI2RlZmluZSBCRU1QRU5CCQkweDAwM0EKKyNkZWZpbmUgSU5UU1RTMAkJMHgwMDQwCisjZGVmaW5lIElOVFNUUzEJCTB4MDA0MgorI2RlZmluZSBCUkRZU1RTCQkweDAwNDYKKyNkZWZpbmUgTlJEWVNUUwkJMHgwMDQ4CisjZGVmaW5lIEJFTVBTVFMJCTB4MDA0QQorI2RlZmluZSBGUk1OVU0JCTB4MDA0QworI2RlZmluZSBVU0JSRVEJCTB4MDA1NAkvKiBVU0IgcmVxdWVzdCB0eXBlIHJlZ2lzdGVyICovCisjZGVmaW5lIFVTQlZBTAkJMHgwMDU2CS8qIFVTQiByZXF1ZXN0IHZhbHVlIHJlZ2lzdGVyICovCisjZGVmaW5lIFVTQklORFgJCTB4MDA1OAkvKiBVU0IgcmVxdWVzdCBpbmRleCByZWdpc3RlciAqLworI2RlZmluZSBVU0JMRU5HCQkweDAwNUEJLyogVVNCIHJlcXVlc3QgbGVuZ3RoIHJlZ2lzdGVyICovCisjZGVmaW5lIERDUENGRwkJMHgwMDVDCisjZGVmaW5lIERDUE1BWFAJCTB4MDA1RQorI2RlZmluZSBEQ1BDVFIJCTB4MDA2MAorI2RlZmluZSBQSVBFU0VMCQkweDAwNjQKKyNkZWZpbmUgUElQRUNGRwkJMHgwMDY4CisjZGVmaW5lIFBJUEVCVUYJCTB4MDA2QQorI2RlZmluZSBQSVBFTUFYUAkweDAwNkMKKyNkZWZpbmUgUElQRVBFUkkJMHgwMDZFCisjZGVmaW5lIFBJUEVuQ1RSCTB4MDA3MAorCisvKiBTWVNDRkcgKi8KKyNkZWZpbmUgU0NLRQkoMSA8PCAxMCkJLyogVVNCIE1vZHVsZSBDbG9jayBFbmFibGUgKi8KKyNkZWZpbmUgSFNFCSgxIDw8IDcpCS8qIEhpZ2gtU3BlZWQgT3BlcmF0aW9uIEVuYWJsZSAqLworI2RlZmluZSBEQ0ZNCSgxIDw8IDYpCS8qIENvbnRyb2xsZXIgRnVuY3Rpb24gU2VsZWN0ICovCisjZGVmaW5lIERSUEQJKDEgPDwgNSkJLyogRCsgTGluZS9ELSBMaW5lIFJlc2lzdGFuY2UgQ29udHJvbCAqLworI2RlZmluZSBEUFJQVQkoMSA8PCA0KQkvKiBEKyBMaW5lIFJlc2lzdGFuY2UgQ29udHJvbCAqLworI2RlZmluZSBVU0JFCSgxIDw8IDApCS8qIFVTQiBNb2R1bGUgT3BlcmF0aW9uIEVuYWJsZSAqLworCisvKiBEVlNUQ1RSICovCisjZGVmaW5lIEVYVExQCSgxIDw8IDEwKQkvKiBDb250cm9scyB0aGUgRVhUTFAgcGluIG91dHB1dCBzdGF0ZSAqLworI2RlZmluZSBQV0VOCSgxIDw8IDkpCS8qIENvbnRyb2xzIHRoZSBQV0VOIHBpbiBvdXRwdXQgc3RhdGUgKi8KKyNkZWZpbmUgUkhTVAkoMHg3KQkJLyogUmVzZXQgSGFuZHNoYWtlICovCisjZGVmaW5lICBSSFNUX0xPV19TUEVFRCAgMQkvKiBMb3ctc3BlZWQgY29ubmVjdGlvbiAqLworI2RlZmluZSAgUkhTVF9GVUxMX1NQRUVEIDIJLyogRnVsbC1zcGVlZCBjb25uZWN0aW9uICovCisjZGVmaW5lICBSSFNUX0hJR0hfU1BFRUQgMwkvKiBIaWdoLXNwZWVkIGNvbm5lY3Rpb24gKi8KKworLyogQ0ZJRk9TRUwgKi8KKyNkZWZpbmUgTUJXXzMyCSgweDIgPDwgMTApCS8qIENGSUZPIFBvcnQgQWNjZXNzIEJpdCBXaWR0aCAqLworCisvKiBDRklGT0NUUiAqLworI2RlZmluZSBCVkFMCSgxIDw8IDE1KQkvKiBCdWZmZXIgTWVtb3J5IEVuYWJsZSBGbGFnICovCisjZGVmaW5lIEJDTFIJKDEgPDwgMTQpCS8qIENQVSBidWZmZXIgY2xlYXIgKi8KKyNkZWZpbmUgRlJEWQkoMSA8PCAxMykJLyogRklGTyBQb3J0IFJlYWR5ICovCisjZGVmaW5lIERUTE5fTUFTSyAoMHgwRkZGKQkvKiBSZWNlaXZlIERhdGEgTGVuZ3RoICovCisKKy8qIElOVEVOQjAgKi8KKyNkZWZpbmUgVkJTRQkoMSA8PCAxNSkJLyogRW5hYmxlIElSUSBWQlVTXzAgYW5kIFZCVVNJTl8wICovCisjZGVmaW5lIFJTTUUJKDEgPDwgMTQpCS8qIEVuYWJsZSBJUlEgUmVzdW1lICovCisjZGVmaW5lIFNPRkUJKDEgPDwgMTMpCS8qIEVuYWJsZSBJUlEgRnJhbWUgTnVtYmVyIFVwZGF0ZSAqLworI2RlZmluZSBEVlNFCSgxIDw8IDEyKQkvKiBFbmFibGUgSVJRIERldmljZSBTdGF0ZSBUcmFuc2l0aW9uICovCisjZGVmaW5lIENUUkUJKDEgPDwgMTEpCS8qIEVuYWJsZSBJUlEgQ29udHJvbCBTdGFnZSBUcmFuc2l0aW9uICovCisjZGVmaW5lIEJFTVBFCSgxIDw8IDEwKQkvKiBFbmFibGUgSVJRIEJ1ZmZlciBFbXB0eSAqLworI2RlZmluZSBOUkRZRQkoMSA8PCA5KQkvKiBFbmFibGUgSVJRIEJ1ZmZlciBOb3QgUmVhZHkgUmVzcG9uc2UgKi8KKyNkZWZpbmUgQlJEWUUJKDEgPDwgOCkJLyogRW5hYmxlIElSUSBCdWZmZXIgUmVhZHkgKi8KKworLyogSU5URU5CMSAqLworI2RlZmluZSBCQ0hHRQkoMSA8PCAxNCkJLyogVVNCIEJ1cyBDaGFuZ2UgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBEVENIRQkoMSA8PCAxMikJLyogRGlzY29ubmVjdGlvbiBEZXRlY3QgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBBVFRDSEUJKDEgPDwgMTEpCS8qIENvbm5lY3Rpb24gRGV0ZWN0IEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgRU9GRVJSRQkoMSA8PCA2KQkvKiBFT0YgRXJyb3IgRGV0ZWN0IEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgU0lHTkUJKDEgPDwgNSkJLyogU2V0dXAgVHJhbnNhY3Rpb24gRXJyb3IgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBTQUNLRQkoMSA8PCA0KQkvKiBTZXR1cCBUcmFuc2FjdGlvbiBBQ0sgSW50ZXJydXB0IEVuYWJsZSAqLworCisvKiBJTlRTVFMwICovCisjZGVmaW5lIFZCSU5UCSgxIDw8IDE1KQkvKiBWQlVTMF8wIGFuZCBWQlVTMV8wIEludGVycnVwdCBTdGF0dXMgKi8KKyNkZWZpbmUgRFZTVAkoMSA8PCAxMikJLyogRGV2aWNlIFN0YXRlIFRyYW5zaXRpb24gSW50ZXJydXB0IFN0YXR1cyAqLworI2RlZmluZSBDVFJUCSgxIDw8IDExKQkvKiBDb250cm9sIFN0YWdlIEludGVycnVwdCBTdGF0dXMgKi8KKyNkZWZpbmUgQkVNUAkoMSA8PCAxMCkJLyogQnVmZmVyIEVtcHR5IEludGVycnVwdCBTdGF0dXMgKi8KKyNkZWZpbmUgQlJEWQkoMSA8PCA4KQkvKiBCdWZmZXIgUmVhZHkgSW50ZXJydXB0IFN0YXR1cyAqLworI2RlZmluZSBWQlNUUwkoMSA8PCA3KQkvKiBWQlVTXzAgYW5kIFZCVVNJTl8wIElucHV0IFN0YXR1cyAqLworI2RlZmluZSBWQUxJRAkoMSA8PCAzKQkvKiBVU0IgUmVxdWVzdCBSZWNlaXZlICovCisKKyNkZWZpbmUgRFZTUV9NQVNLCQkoMHgzIDw8IDQpCS8qIERldmljZSBTdGF0ZSAqLworI2RlZmluZSAgUE9XRVJfU1RBVEUJCSgwIDw8IDQpCisjZGVmaW5lICBERUZBVUxUX1NUQVRFCQkoMSA8PCA0KQorI2RlZmluZSAgQUREUkVTU19TVEFURQkJKDIgPDwgNCkKKyNkZWZpbmUgIENPTkZJR1VSQVRJT05fU1RBVEUJKDMgPDwgNCkKKworI2RlZmluZSBDVFNRX01BU0sJCSgweDcpCS8qIENvbnRyb2wgVHJhbnNmZXIgU3RhZ2UgKi8KKyNkZWZpbmUgIElETEVfU0VUVVBfU1RBR0UJMAkvKiBJZGxlIHN0YWdlIG9yIHNldHVwIHN0YWdlICovCisjZGVmaW5lICBSRUFEX0RBVEFfU1RBR0UJMQkvKiBDb250cm9sIHJlYWQgZGF0YSBzdGFnZSAqLworI2RlZmluZSAgUkVBRF9TVEFUVVNfU1RBR0UJMgkvKiBDb250cm9sIHJlYWQgc3RhdHVzIHN0YWdlICovCisjZGVmaW5lICBXUklURV9EQVRBX1NUQUdFCTMJLyogQ29udHJvbCB3cml0ZSBkYXRhIHN0YWdlICovCisjZGVmaW5lICBXUklURV9TVEFUVVNfU1RBR0UJNAkvKiBDb250cm9sIHdyaXRlIHN0YXR1cyBzdGFnZSAqLworI2RlZmluZSAgTk9EQVRBX1NUQVRVU19TVEFHRQk1CS8qIENvbnRyb2wgd3JpdGUgTm9EYXRhIHN0YXR1cyBzdGFnZSAqLworI2RlZmluZSAgU0VRVUVOQ0VfRVJST1IJCTYJLyogQ29udHJvbCB0cmFuc2ZlciBzZXF1ZW5jZSBlcnJvciAqLworCisvKiBQSVBFQ0ZHICovCisvKiBEQ1BDRkcgKi8KKyNkZWZpbmUgVFlQRV9OT05FCSgwIDw8IDE0KQkvKiBUcmFuc2ZlciBUeXBlICovCisjZGVmaW5lIFRZUEVfQlVMSwkoMSA8PCAxNCkKKyNkZWZpbmUgVFlQRV9JTlQJKDIgPDwgMTQpCisjZGVmaW5lIFRZUEVfSVNPCSgzIDw8IDE0KQorI2RlZmluZSBEQkxCCQkoMSA8PCA5KQkvKiBEb3VibGUgQnVmZmVyIE1vZGUgKi8KKyNkZWZpbmUgU0hUTkFLCQkoMSA8PCA3KQkvKiBQaXBlIERpc2FibGUgaW4gVHJhbnNmZXIgRW5kICovCisjZGVmaW5lIERJUl9PVVQJCSgxIDw8IDQpCS8qIFRyYW5zZmVyIERpcmVjdGlvbiAqLworCisvKiBQSVBFTUFYUCAqLworLyogRENQTUFYUCAqLworI2RlZmluZSBERVZTRUxfTUFTSwkoMHhGIDw8IDEyKQkvKiBEZXZpY2UgU2VsZWN0ICovCisjZGVmaW5lIERDUF9NQVhQX01BU0sJKDB4N0YpCisjZGVmaW5lIFBJUEVfTUFYUF9NQVNLCSgweDdGRikKKworLyogUElQRUJVRiAqLworI2RlZmluZSBCVUZTSVpFX1NISUZUCTEwCisjZGVmaW5lIEJVRlNJWkVfTUFTSwkoMHgxRiA8PCBCVUZTSVpFX1NISUZUKQorI2RlZmluZSBCVUZOTUJfTUFTSwkoMHhGRikKKworLyogUElQRW5DVFIgKi8KKy8qIERDUENUUiAqLworI2RlZmluZSBCU1RTCQkoMSA8PCAxNSkJLyogQnVmZmVyIFN0YXR1cyAqLworI2RlZmluZSBDU1NUUwkJKDEgPDwgMTIpCS8qIENTU1RTIFN0YXR1cyAqLworI2RlZmluZSBTUUNMUgkJKDEgPDwgOCkJLyogVG9nZ2xlIEJpdCBDbGVhciAqLworI2RlZmluZQlBQ0xSTQkJKDEgPDwgOSkJLyogQnVmZmVyIEF1dG8tQ2xlYXIgTW9kZSAqLworI2RlZmluZSBQQlVTWQkJKDEgPDwgNSkJLyogUGlwZSBCdXN5ICovCisjZGVmaW5lIFBJRF9NQVNLCSgweDMpCQkvKiBSZXNwb25zZSBQSUQgKi8KKyNkZWZpbmUgIFBJRF9OQUsJMAorI2RlZmluZSAgUElEX0JVRgkxCisjZGVmaW5lICBQSURfU1RBTEwxMAkyCisjZGVmaW5lICBQSURfU1RBTEwxMQkzCisKKyNkZWZpbmUgQ0NQTAkJKDEgPDwgMikJLyogQ29udHJvbCBUcmFuc2ZlciBFbmQgRW5hYmxlICovCisKKy8qIEZSTU5VTSAqLworI2RlZmluZSBGUk5NX01BU0sJKDB4N0ZGKQorCisvKgorICoJCXN0cnVjdAorICovCitzdHJ1Y3QgdXNiaHNfcHJpdiB7CisKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJdW5zaWduZWQgaW50IGlycTsKKworCXN0cnVjdCByZW5lc2FzX3VzYmhzX3BsYXRmb3JtX2NhbGxiYWNrCSpwZnVuYzsKKwlzdHJ1Y3QgcmVuZXNhc191c2Joc19kcml2ZXJfcGFyYW0JKmRwYXJhbTsKKworCXN0cnVjdCBkZWxheWVkX3dvcmsgbm90aWZ5X2hvdHBsdWdfd29yazsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCisJc3BpbmxvY2tfdAkJbG9jazsKKworCXUzMiBmbGFnczsKKworCS8qCisJICogbW9kdWxlIGNvbnRyb2wKKwkgKi8KKwlzdHJ1Y3QgdXNiaHNfbW9kX2luZm8gbW9kX2luZm87CisKKwkvKgorCSAqIHBpcGUgY29udHJvbAorCSAqLworCXN0cnVjdCB1c2Joc19waXBlX2luZm8gcGlwZV9pbmZvOworfTsKKworLyoKKyAqIGNvbW1vbgorICovCit1MTYgdXNiaHNfcmVhZChzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdiwgdTMyIHJlZyk7Cit2b2lkIHVzYmhzX3dyaXRlKHN0cnVjdCB1c2Joc19wcml2ICpwcml2LCB1MzIgcmVnLCB1MTYgZGF0YSk7Cit2b2lkIHVzYmhzX2JzZXQoc3RydWN0IHVzYmhzX3ByaXYgKnByaXYsIHUzMiByZWcsIHUxNiBtYXNrLCB1MTYgZGF0YSk7CisKK2ludCB1c2Joc2NfZHJ2Y2xsYmNrX25vdGlmeV9ob3RwbHVnKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOworLyoKKyAqIHN5c2NvbmZpZworICovCit2b2lkIHVzYmhzX3N5c19jbG9ja19jdHJsKHN0cnVjdCB1c2Joc19wcml2ICpwcml2LCBpbnQgZW5hYmxlKTsKK3ZvaWQgdXNiaHNfc3lzX2hpc3BlZWRfY3RybChzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdiwgaW50IGVuYWJsZSk7Cit2b2lkIHVzYmhzX3N5c191c2JfY3RybChzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdiwgaW50IGVuYWJsZSk7Cit2b2lkIHVzYmhzX3N5c19ob3N0X2N0cmwoc3RydWN0IHVzYmhzX3ByaXYgKnByaXYsIGludCBlbmFibGUpOwordm9pZCB1c2Joc19zeXNfZnVuY3Rpb25fY3RybChzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdiwgaW50IGVuYWJsZSk7CisKKy8qCisgKiBmcmFtZQorICovCitpbnQgdXNiaHNfZnJhbWVfZ2V0X251bShzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdik7CisKKy8qCisgKiBkYXRhCisgKi8KK3N0cnVjdCB1c2Joc19wcml2ICp1c2Joc19wZGV2X3RvX3ByaXYoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CisjZGVmaW5lIHVzYmhzX2dldF9kcGFyYW0ocHJpdiwgcGFyYW0pCShwcml2LT5kcGFyYW0tPnBhcmFtKQorI2RlZmluZSB1c2Joc19wcml2X3RvX3BkZXYocHJpdikJKHByaXYtPnBkZXYpCisjZGVmaW5lIHVzYmhzX3ByaXZfdG9fZGV2KHByaXYpCQkoJnByaXYtPnBkZXYtPmRldikKKyNkZWZpbmUgdXNiaHNfcHJpdl90b19sb2NrKHByaXYpCSgmcHJpdi0+bG9jaykKKworI2VuZGlmIC8qIFJFTkVTQVNfVVNCX0RSSVZFUl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9yZW5lc2FzX3VzYmhzL21vZC5jIGIvZHJpdmVycy91c2IvcmVuZXNhc191c2Jocy9tb2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTc3ZjhmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvcmVuZXNhc191c2Jocy9tb2QuYwpAQCAtMCwwICsxLDMyOCBAQAorLyoKKyAqIFJlbmVzYXMgVVNCIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogS3VuaW5vcmkgTW9yaW1vdG8gPGt1bmlub3JpLm1vcmltb3RvLmd4QHJlbmVzYXMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisjaW5jbHVkZSAiLi9jb21tb24uaCIKKyNpbmNsdWRlICIuL21vZC5oIgorCisjZGVmaW5lIHVzYmhzX3ByaXZfdG9fbW9kaW5mbyhwcml2KSAoJnByaXYtPm1vZF9pbmZvKQorI2RlZmluZSB1c2Joc19tb2RfaW5mb19jYWxsKHByaXYsIGZ1bmMsIHBhcmFtLi4uKQlcCisoewkJCQkJCVwKKwlzdHJ1Y3QgdXNiaHNfbW9kX2luZm8gKmluZm87CQlcCisJaW5mbyA9IHVzYmhzX3ByaXZfdG9fbW9kaW5mbyhwcml2KTsJXAorCSFpbmZvLT5mdW5jID8gMCA6CQkJXAorCSBpbmZvLT5mdW5jKHBhcmFtKTsJCQlcCit9KQorCisvKgorICoJCWF1dG9ub215CisgKgorICogdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIGlmIHBsYXRmb3JtIGRvZXNuJ3QgaGF2ZSBleHRlcm5hbCBwaHkuCisgKiAgLT4gdGhlcmUgaXMgbm8gIm5vdGlmeV9ob3RwbHVnIiBjYWxsYmFjayBmcm9tIHBsYXRmb3JtCisgKiAgLT4gY2FsbCAibm90aWZ5X2hvdHBsdWciIGJ5IGl0c2VsZgorICogIC0+IHVzZSBvd24gaW50ZXJydXB0IHRvIGNvbm5lY3QvZGlzY29ubmVjdAorICogIC0+IGl0IG1lYW4gbW9kdWxlIGNsb2NrIGlzIGFsd2F5cyBPTgorICogICAgICAgICAgICAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICovCitzdGF0aWMgaW50IHVzYmhzbV9hdXRvbm9teV9nZXRfdmJ1cyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1c2Joc19wcml2ICpwcml2ID0gdXNiaHNfcGRldl90b19wcml2KHBkZXYpOworCisJcmV0dXJuICBWQlNUUyAmIHVzYmhzX3JlYWQocHJpdiwgSU5UU1RTMCk7Cit9CisKK3N0YXRpYyBpbnQgdXNiaHNtX2F1dG9ub215X2lycV92YnVzKHN0cnVjdCB1c2Joc19wcml2ICpwcml2LAorCQkJCSAgICBzdHJ1Y3QgdXNiaHNfaXJxX3N0YXRlICppcnFfc3RhdGUpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHVzYmhzX3ByaXZfdG9fcGRldihwcml2KTsKKworCXJldHVybiB1c2Joc2NfZHJ2Y2xsYmNrX25vdGlmeV9ob3RwbHVnKHBkZXYpOworfQorCit2b2lkIHVzYmhzX21vZF9hdXRvbm9teV9tb2RlKHN0cnVjdCB1c2Joc19wcml2ICpwcml2KQoreworCXN0cnVjdCB1c2Joc19tb2RfaW5mbyAqaW5mbyA9IHVzYmhzX3ByaXZfdG9fbW9kaW5mbyhwcml2KTsKKworCWluZm8tPmlycV92YnVzCQk9IHVzYmhzbV9hdXRvbm9teV9pcnFfdmJ1czsKKwlwcml2LT5wZnVuYy0+Z2V0X3ZidXMJPSB1c2Joc21fYXV0b25vbXlfZ2V0X3ZidXM7CisKKwl1c2Joc19pcnFfY2FsbGJhY2tfdXBkYXRlKHByaXYsIE5VTEwpOworfQorCisvKgorICoJCWhvc3QgLyBnYWRnZXQgZnVuY3Rpb25zCisgKgorICogcmVuZXNhc191c2JocyBob3N0L2dhZGdldCBjYW4gcmVnaXN0ZXIgaXRzZWxmIGJ5IGJlbG93IGZ1bmN0aW9ucy4KKyAqIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIHdoZW4gcHJvYmUKKyAqCisgKi8KK3ZvaWQgdXNiaHNfbW9kX3JlZ2lzdGVyKHN0cnVjdCB1c2Joc19wcml2ICpwcml2LCBzdHJ1Y3QgdXNiaHNfbW9kICptb2QsIGludCBpZCkKK3sKKwlzdHJ1Y3QgdXNiaHNfbW9kX2luZm8gKmluZm8gPSB1c2Joc19wcml2X3RvX21vZGluZm8ocHJpdik7CisKKwlpbmZvLT5tb2RbaWRdCT0gbW9kOworCW1vZC0+cHJpdgk9IHByaXY7Cit9CisKK3N0cnVjdCB1c2Joc19tb2QgKnVzYmhzX21vZF9nZXQoc3RydWN0IHVzYmhzX3ByaXYgKnByaXYsIGludCBpZCkKK3sKKwlzdHJ1Y3QgdXNiaHNfbW9kX2luZm8gKmluZm8gPSB1c2Joc19wcml2X3RvX21vZGluZm8ocHJpdik7CisJc3RydWN0IHVzYmhzX21vZCAqcmV0ID0gTlVMTDsKKworCXN3aXRjaCAoaWQpIHsKKwljYXNlIFVTQkhTX0hPU1Q6CisJY2FzZSBVU0JIU19HQURHRVQ6CisJCXJldCA9IGluZm8tPm1vZFtpZF07CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK2ludCB1c2Joc19tb2RfaXNfaG9zdChzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdiwgc3RydWN0IHVzYmhzX21vZCAqbW9kKQoreworCXN0cnVjdCB1c2Joc19tb2RfaW5mbyAqaW5mbyA9IHVzYmhzX3ByaXZfdG9fbW9kaW5mbyhwcml2KTsKKworCWlmICghbW9kKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBpbmZvLT5tb2RbVVNCSFNfSE9TVF0gPT0gbW9kOworfQorCitzdHJ1Y3QgdXNiaHNfbW9kICp1c2Joc19tb2RfZ2V0X2N1cnJlbnQoc3RydWN0IHVzYmhzX3ByaXYgKnByaXYpCit7CisJc3RydWN0IHVzYmhzX21vZF9pbmZvICppbmZvID0gdXNiaHNfcHJpdl90b19tb2RpbmZvKHByaXYpOworCisJcmV0dXJuIGluZm8tPmN1cnQ7Cit9CisKK2ludCB1c2Joc19tb2RfY2hhbmdlKHN0cnVjdCB1c2Joc19wcml2ICpwcml2LCBpbnQgaWQpCit7CisJc3RydWN0IHVzYmhzX21vZF9pbmZvICppbmZvID0gdXNiaHNfcHJpdl90b19tb2RpbmZvKHByaXYpOworCXN0cnVjdCB1c2Joc19tb2QgKm1vZCA9IE5VTEw7CisJaW50IHJldCA9IDA7CisKKwkvKiBpZCA8IDAgbWVhbiBubyBjdXJyZW50ICovCisJc3dpdGNoIChpZCkgeworCWNhc2UgVVNCSFNfSE9TVDoKKwljYXNlIFVTQkhTX0dBREdFVDoKKwkJbW9kID0gaW5mby0+bW9kW2lkXTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisJaW5mby0+Y3VydCA9IG1vZDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB1c2Joc19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGF0YSk7CitpbnQgdXNiaHNfbW9kX3Byb2JlKHN0cnVjdCB1c2Joc19wcml2ICpwcml2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHVzYmhzX3ByaXZfdG9fZGV2KHByaXYpOworCWludCByZXQ7CisKKwkvKgorCSAqIGluc3RhbGwgaG9zdC9nYWRnZXQgZHJpdmVyCisJICovCisJcmV0ID0gdXNiaHNfbW9kX2dhZGdldF9wcm9iZShwcml2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIGlycSBzZXR0aW5ncyAqLworCXJldCA9IHJlcXVlc3RfaXJxKHByaXYtPmlycSwgdXNiaHNfaW50ZXJydXB0LAorCQkJICBJUlFGX0RJU0FCTEVELCBkZXZfbmFtZShkZXYpLCBwcml2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiaXJxIHJlcXVlc3QgZXJyXG4iKTsKKwkJZ290byBtb2RfaW5pdF9nYWRnZXRfZXJyOworCX0KKworCXJldHVybiByZXQ7CisKK21vZF9pbml0X2dhZGdldF9lcnI6CisJdXNiaHNfbW9kX2dhZGdldF9yZW1vdmUocHJpdik7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHVzYmhzX21vZF9yZW1vdmUoc3RydWN0IHVzYmhzX3ByaXYgKnByaXYpCit7CisJdXNiaHNfbW9kX2dhZGdldF9yZW1vdmUocHJpdik7CisJZnJlZV9pcnEocHJpdi0+aXJxLCBwcml2KTsKK30KKworLyoKKyAqCQlzdGF0dXMgZnVuY3Rpb25zCisgKi8KK2ludCB1c2Joc19zdGF0dXNfZ2V0X3VzYl9zcGVlZChzdHJ1Y3QgdXNiaHNfaXJxX3N0YXRlICppcnFfc3RhdGUpCit7CisJc3dpdGNoIChpcnFfc3RhdGUtPmR2c3RjdHIgJiBSSFNUKSB7CisJY2FzZSBSSFNUX0xPV19TUEVFRDoKKwkJcmV0dXJuIFVTQl9TUEVFRF9MT1c7CisJY2FzZSBSSFNUX0ZVTExfU1BFRUQ6CisJCXJldHVybiBVU0JfU1BFRURfRlVMTDsKKwljYXNlIFJIU1RfSElHSF9TUEVFRDoKKwkJcmV0dXJuIFVTQl9TUEVFRF9ISUdIOworCX0KKworCXJldHVybiBVU0JfU1BFRURfVU5LTk9XTjsKK30KKworaW50IHVzYmhzX3N0YXR1c19nZXRfZGV2aWNlX3N0YXRlKHN0cnVjdCB1c2Joc19pcnFfc3RhdGUgKmlycV9zdGF0ZSkKK3sKKwlpbnQgc3RhdGUgPSBpcnFfc3RhdGUtPmludHN0czAgJiBEVlNRX01BU0s7CisKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBQT1dFUl9TVEFURToKKwljYXNlIERFRkFVTFRfU1RBVEU6CisJY2FzZSBBRERSRVNTX1NUQVRFOgorCWNhc2UgQ09ORklHVVJBVElPTl9TVEFURToKKwkJcmV0dXJuIHN0YXRlOworCX0KKworCXJldHVybiAtRUlPOworfQorCitpbnQgdXNiaHNfc3RhdHVzX2dldF9jdHJsX3N0YWdlKHN0cnVjdCB1c2Joc19pcnFfc3RhdGUgKmlycV9zdGF0ZSkKK3sKKwkvKgorCSAqIHJldHVybiB2YWx1ZQorCSAqCisJICogSURMRV9TRVRVUF9TVEFHRQorCSAqIFJFQURfREFUQV9TVEFHRQorCSAqIFJFQURfU1RBVFVTX1NUQUdFCisJICogV1JJVEVfREFUQV9TVEFHRQorCSAqIFdSSVRFX1NUQVRVU19TVEFHRQorCSAqIE5PREFUQV9TVEFUVVNfU1RBR0UKKwkgKiBTRVFVRU5DRV9FUlJPUgorCSAqLworCXJldHVybiAoaW50KWlycV9zdGF0ZS0+aW50c3RzMCAmIENUU1FfTUFTSzsKK30KKworc3RhdGljIHZvaWQgdXNiaHNfc3RhdHVzX2dldF9lYWNoX2lycShzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdiwKKwkJCQkgICAgICBzdHJ1Y3QgdXNiaHNfaXJxX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgdXNiaHNfbW9kICptb2QgPSB1c2Joc19tb2RfZ2V0X2N1cnJlbnQocHJpdik7CisKKwlzdGF0ZS0+aW50c3RzMCA9IHVzYmhzX3JlYWQocHJpdiwgSU5UU1RTMCk7CisJc3RhdGUtPmludHN0czEgPSB1c2Joc19yZWFkKHByaXYsIElOVFNUUzEpOworCisJc3RhdGUtPmR2c3RjdHIgPSB1c2Joc19yZWFkKHByaXYsIERWU1RDVFIpOworCisJLyogbWFzayAqLworCWlmIChtb2QpIHsKKwkJc3RhdGUtPmJyZHlzdHMgPSB1c2Joc19yZWFkKHByaXYsIEJSRFlTVFMpOworCQlzdGF0ZS0+bnJkeXN0cyA9IHVzYmhzX3JlYWQocHJpdiwgTlJEWVNUUyk7CisJCXN0YXRlLT5iZW1wc3RzID0gdXNiaHNfcmVhZChwcml2LCBCRU1QU1RTKTsKKworCQlzdGF0ZS0+YmVtcHN0cyAmPSBtb2QtPmlycV9iZW1wc3RzOworCQlzdGF0ZS0+YnJkeXN0cyAmPSBtb2QtPmlycV9icmR5c3RzOworCX0KK30KKworLyoKKyAqCQlpbnRlcnJ1cHQKKyAqLworI2RlZmluZSBJTlRTVFMwX01BR0lDIDB4RjgwMCAvKiBhY2tub3dsZWRnZSBtYWdpY2FsIGludGVycnVwdCBzb3VyY2VzICovCisjZGVmaW5lIElOVFNUUzFfTUFHSUMgMHhBODcwIC8qIGFja25vd2xlZGdlIG1hZ2ljYWwgaW50ZXJydXB0IHNvdXJjZXMgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCB1c2Joc19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdiA9IGRhdGE7CisJc3RydWN0IHVzYmhzX2lycV9zdGF0ZSBpcnFfc3RhdGU7CisKKwl1c2Joc19zdGF0dXNfZ2V0X2VhY2hfaXJxKHByaXYsICZpcnFfc3RhdGUpOworCisJLyoKKwkgKiBjbGVhciBpbnRlcnJ1cHQKKwkgKgorCSAqIFRoZSBoYXJkd2FyZSBpcyBfdmVyeV8gcGlja3kgdG8gY2xlYXIgaW50ZXJydXB0IGJpdC4KKwkgKiBFc3BlY2lhbGx5IElOVFNUUzBfTUFHSUMsIElOVFNUUzFfTUFHSUMgdmFsdWUuCisJICoKKwkgKiBzZWUKKwkgKgkiT3BlcmF0aW9uIgorCSAqCSAtICJDb250cm9sIFRyYW5zZmVyIChEQ1ApIgorCSAqCSAgIC0gRnVuY3Rpb24gOjogVkFMSUQgYml0IHNob3VsZCAwCisJICovCisJdXNiaHNfd3JpdGUocHJpdiwgSU5UU1RTMCwgfmlycV9zdGF0ZS5pbnRzdHMwICYgSU5UU1RTMF9NQUdJQyk7CisJdXNiaHNfd3JpdGUocHJpdiwgSU5UU1RTMSwgfmlycV9zdGF0ZS5pbnRzdHMxICYgSU5UU1RTMV9NQUdJQyk7CisKKwl1c2Joc193cml0ZShwcml2LCBCUkRZU1RTLCAwKTsKKwl1c2Joc193cml0ZShwcml2LCBOUkRZU1RTLCAwKTsKKwl1c2Joc193cml0ZShwcml2LCBCRU1QU1RTLCAwKTsKKworCS8qCisJICogY2FsbCBpcnEgY2FsbGJhY2sgZnVuY3Rpb25zCisJICogc2VlIGFsc28KKwkgKgl1c2Joc19pcnFfc2V0dGluZ191cGRhdGUKKwkgKi8KKwlpZiAoaXJxX3N0YXRlLmludHN0czAgJiBWQklOVCkKKwkJdXNiaHNfbW9kX2luZm9fY2FsbChwcml2LCBpcnFfdmJ1cywgcHJpdiwgJmlycV9zdGF0ZSk7CisKKwlpZiAoaXJxX3N0YXRlLmludHN0czAgJiBEVlNUKQorCQl1c2Joc19tb2RfY2FsbChwcml2LCBpcnFfZGV2X3N0YXRlLCBwcml2LCAmaXJxX3N0YXRlKTsKKworCWlmIChpcnFfc3RhdGUuaW50c3RzMCAmIENUUlQpCisJCXVzYmhzX21vZF9jYWxsKHByaXYsIGlycV9jdHJsX3N0YWdlLCBwcml2LCAmaXJxX3N0YXRlKTsKKworCWlmIChpcnFfc3RhdGUuaW50c3RzMCAmIEJFTVApCisJCXVzYmhzX21vZF9jYWxsKHByaXYsIGlycV9lbXB0eSwgcHJpdiwgJmlycV9zdGF0ZSk7CisKKwlpZiAoaXJxX3N0YXRlLmludHN0czAgJiBCUkRZKQorCQl1c2Joc19tb2RfY2FsbChwcml2LCBpcnFfcmVhZHksIHByaXYsICZpcnFfc3RhdGUpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCit2b2lkIHVzYmhzX2lycV9jYWxsYmFja191cGRhdGUoc3RydWN0IHVzYmhzX3ByaXYgKnByaXYsIHN0cnVjdCB1c2Joc19tb2QgKm1vZCkKK3sKKwl1MTYgaW50ZW5iMCA9IDA7CisJc3RydWN0IHVzYmhzX21vZF9pbmZvICppbmZvID0gdXNiaHNfcHJpdl90b19tb2RpbmZvKHByaXYpOworCisJdXNiaHNfd3JpdGUocHJpdiwgSU5URU5CMCwgMCk7CisKKwl1c2Joc193cml0ZShwcml2LCBCRU1QRU5CLCAwKTsKKwl1c2Joc193cml0ZShwcml2LCBCUkRZRU5CLCAwKTsKKworCS8qCisJICogc2VlIGFsc28KKwkgKgl1c2Joc19pbnRlcnJ1cHQKKwkgKi8KKworCS8qCisJICogaXQgZG9uJ3QgZW5hYmxlIERWU0UgKGludGVuYjApIGhlcmUKKwkgKiBidXQgIm1vZC0+aXJxX2Rldl9zdGF0ZSIgd2lsbCBiZSBjYWxsZWQuCisJICovCisJaWYgKGluZm8tPmlycV92YnVzKQorCQlpbnRlbmIwIHw9IFZCU0U7CisKKwlpZiAobW9kKSB7CisJCWlmIChtb2QtPmlycV9jdHJsX3N0YWdlKQorCQkJaW50ZW5iMCB8PSBDVFJFOworCisJCWlmIChtb2QtPmlycV9lbXB0eSAmJiBtb2QtPmlycV9iZW1wc3RzKSB7CisJCQl1c2Joc193cml0ZShwcml2LCBCRU1QRU5CLCBtb2QtPmlycV9iZW1wc3RzKTsKKwkJCWludGVuYjAgfD0gQkVNUEU7CisJCX0KKworCQlpZiAobW9kLT5pcnFfcmVhZHkgJiYgbW9kLT5pcnFfYnJkeXN0cykgeworCQkJdXNiaHNfd3JpdGUocHJpdiwgQlJEWUVOQiwgbW9kLT5pcnFfYnJkeXN0cyk7CisJCQlpbnRlbmIwIHw9IEJSRFlFOworCQl9CisJfQorCisJdXNiaHNfd3JpdGUocHJpdiwgSU5URU5CMCwgaW50ZW5iMCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9yZW5lc2FzX3VzYmhzL21vZC5oIGIvZHJpdmVycy91c2IvcmVuZXNhc191c2Jocy9tb2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Yzg0NWEyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvcmVuZXNhc191c2Jocy9tb2QuaApAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIFJlbmVzYXMgVVNCIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogS3VuaW5vcmkgTW9yaW1vdG8gPGt1bmlub3JpLm1vcmltb3RvLmd4QHJlbmVzYXMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworI2lmbmRlZiBSRU5FU0FTX1VTQl9NT0RfSAorI2RlZmluZSBSRU5FU0FTX1VTQl9NT0RfSAorCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvcmVuZXNhc191c2Jocy5oPgorI2luY2x1ZGUgIi4vY29tbW9uLmgiCisKKy8qCisgKglzdHJ1Y3QKKyAqLworc3RydWN0IHVzYmhzX2lycV9zdGF0ZSB7CisJdTE2IGludHN0czA7CisJdTE2IGludHN0czE7CisJdTE2IGJyZHlzdHM7CisJdTE2IG5yZHlzdHM7CisJdTE2IGJlbXBzdHM7CisJdTE2IGR2c3RjdHI7Cit9OworCitzdHJ1Y3QgdXNiaHNfbW9kIHsKKwljaGFyICpuYW1lOworCisJLyoKKwkgKiBlbnRyeSBwb2ludCBmcm9tIGNvbW1vbi5jCisJICovCisJaW50ICgqc3RhcnQpKHN0cnVjdCB1c2Joc19wcml2ICpwcml2KTsKKwlpbnQgKCpzdG9wKShzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdik7CisKKwkvKiBJTlRTVFMwIDo6IERWU1QgKERWU1EpICovCisJaW50ICgqaXJxX2Rldl9zdGF0ZSkoc3RydWN0IHVzYmhzX3ByaXYgKnByaXYsCisJCQkgICAgIHN0cnVjdCB1c2Joc19pcnFfc3RhdGUgKmlycV9zdGF0ZSk7CisKKwkvKiBJTlRTVFMwIDo6IENUUlQgKENUU1EpICovCisJaW50ICgqaXJxX2N0cmxfc3RhZ2UpKHN0cnVjdCB1c2Joc19wcml2ICpwcml2LAorCQkJICAgICAgc3RydWN0IHVzYmhzX2lycV9zdGF0ZSAqaXJxX3N0YXRlKTsKKworCS8qIElOVFNUUzAgOjogQkVNUCAqLworCS8qIEJFTVBTVFMgKi8KKwlpbnQgKCppcnFfZW1wdHkpKHN0cnVjdCB1c2Joc19wcml2ICpwcml2LAorCQkJIHN0cnVjdCB1c2Joc19pcnFfc3RhdGUgKmlycV9zdGF0ZSk7CisJdTE2IGlycV9iZW1wc3RzOworCisJLyogSU5UU1RTMCA6OiBCUkRZICovCisJLyogQlJEWVNUUyAqLworCWludCAoKmlycV9yZWFkeSkoc3RydWN0IHVzYmhzX3ByaXYgKnByaXYsCisJCQkgc3RydWN0IHVzYmhzX2lycV9zdGF0ZSAqaXJxX3N0YXRlKTsKKwl1MTYgaXJxX2JyZHlzdHM7CisKKwlzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdjsKK307CisKK3N0cnVjdCB1c2Joc19tb2RfaW5mbyB7CisJc3RydWN0IHVzYmhzX21vZCAqbW9kW1VTQkhTX01BWF07CisJc3RydWN0IHVzYmhzX21vZCAqY3VydDsgLyogY3VycmVudCBtb2QgKi8KKworCS8qCisJICogSU5UU1RTMCA6OiBWQklOVAorCSAqCisJICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgYXMgYXV0b25vbXkgbW9kZQorCSAqIHdoZW4gcGxhdGZvcm0gY2Fubm90IGNhbGwgbm90aWZ5X2hvdHBsdWcuCisJICoKKwkgKiBUaGlzIGNhbGxiYWNrIGNhbm5vdCBiZSBtZW1iZXIgb2YgInN0cnVjdCB1c2Joc19tb2QiCisJICogYmVjYXVzZSBpdCB3aWxsIGJlIHVzZWQgZXZlbiB0aG91Z2gKKwkgKiBob3N0L2dhZGdldCBoYXMgbm90IGJlZW4gc2VsZWN0ZWQuCisJICovCisJaW50ICgqaXJxX3ZidXMpKHN0cnVjdCB1c2Joc19wcml2ICpwcml2LAorCQkJc3RydWN0IHVzYmhzX2lycV9zdGF0ZSAqaXJxX3N0YXRlKTsKK307CisKKy8qCisgKgkJZm9yIGhvc3QvZ2FkZ2V0IG1vZHVsZQorICovCitzdHJ1Y3QgdXNiaHNfbW9kICp1c2Joc19tb2RfZ2V0KHN0cnVjdCB1c2Joc19wcml2ICpwcml2LCBpbnQgaWQpOworc3RydWN0IHVzYmhzX21vZCAqdXNiaHNfbW9kX2dldF9jdXJyZW50KHN0cnVjdCB1c2Joc19wcml2ICpwcml2KTsKK3ZvaWQgdXNiaHNfbW9kX3JlZ2lzdGVyKHN0cnVjdCB1c2Joc19wcml2ICpwcml2LCBzdHJ1Y3QgdXNiaHNfbW9kICp1c2IsIGludCBpZCk7CitpbnQgdXNiaHNfbW9kX2lzX2hvc3Qoc3RydWN0IHVzYmhzX3ByaXYgKnByaXYsIHN0cnVjdCB1c2Joc19tb2QgKm1vZCk7CitpbnQgdXNiaHNfbW9kX2NoYW5nZShzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdiwgaW50IGlkKTsKK2ludCB1c2Joc19tb2RfcHJvYmUoc3RydWN0IHVzYmhzX3ByaXYgKnByaXYpOwordm9pZCB1c2Joc19tb2RfcmVtb3ZlKHN0cnVjdCB1c2Joc19wcml2ICpwcml2KTsKKwordm9pZCB1c2Joc19tb2RfYXV0b25vbXlfbW9kZShzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdik7CisKKy8qCisgKgkJc3RhdHVzIGZ1bmN0aW9ucworICovCitpbnQgdXNiaHNfc3RhdHVzX2dldF91c2Jfc3BlZWQoc3RydWN0IHVzYmhzX2lycV9zdGF0ZSAqaXJxX3N0YXRlKTsKK2ludCB1c2Joc19zdGF0dXNfZ2V0X2RldmljZV9zdGF0ZShzdHJ1Y3QgdXNiaHNfaXJxX3N0YXRlICppcnFfc3RhdGUpOworaW50IHVzYmhzX3N0YXR1c19nZXRfY3RybF9zdGFnZShzdHJ1Y3QgdXNiaHNfaXJxX3N0YXRlICppcnFfc3RhdGUpOworCisvKgorICoJCWNhbGxiYWNrIGZ1bmN0aW9ucworICovCit2b2lkIHVzYmhzX2lycV9jYWxsYmFja191cGRhdGUoc3RydWN0IHVzYmhzX3ByaXYgKnByaXYsIHN0cnVjdCB1c2Joc19tb2QgKm1vZCk7CisKKworI2RlZmluZSB1c2Joc19tb2RfY2FsbChwcml2LCBmdW5jLCBwYXJhbS4uLikJCVwKKwkoewkJCQkJCVwKKwkJc3RydWN0IHVzYmhzX21vZCAqbW9kOwkJCVwKKwkJbW9kID0gdXNiaHNfbW9kX2dldF9jdXJyZW50KHByaXYpOwlcCisJCSFtb2QJCT8gLUVOT0RFViA6CQlcCisJCSFtb2QtPmZ1bmMJPyAwIDoJCQlcCisJCSBtb2QtPmZ1bmMocGFyYW0pOwkJCVwKKwl9KQorCisvKgorICogZ2FkZ2V0IGNvbnRyb2wKKyAqLworI2lmZGVmIENPTkZJR19VU0JfUkVORVNBU19VU0JIU19VREMKK2V4dGVybiBpbnQgX19kZXZpbml0IHVzYmhzX21vZF9nYWRnZXRfcHJvYmUoc3RydWN0IHVzYmhzX3ByaXYgKnByaXYpOworZXh0ZXJuIHZvaWQgX19kZXZleGl0IHVzYmhzX21vZF9nYWRnZXRfcmVtb3ZlKHN0cnVjdCB1c2Joc19wcml2ICpwcml2KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCB1c2Joc19tb2RfZ2FkZ2V0X3Byb2JlKHN0cnVjdCB1c2Joc19wcml2ICpwcml2KQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSB2b2lkIHVzYmhzX21vZF9nYWRnZXRfcmVtb3ZlKHN0cnVjdCB1c2Joc19wcml2ICpwcml2KQoreworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBSRU5FU0FTX1VTQl9NT0RfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvcmVuZXNhc191c2Jocy9tb2RfZ2FkZ2V0LmMgYi9kcml2ZXJzL3VzYi9yZW5lc2FzX3VzYmhzL21vZF9nYWRnZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDZjZmFiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvcmVuZXNhc191c2Jocy9tb2RfZ2FkZ2V0LmMKQEAgLTAsMCArMSwxMzg0IEBACisvKgorICogUmVuZXNhcyBVU0IgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBLdW5pbm9yaSBNb3JpbW90byA8a3VuaW5vcmkubW9yaW1vdG8uZ3hAcmVuZXNhcy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvY2g5Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2dhZGdldC5oPgorI2luY2x1ZGUgImNvbW1vbi5oIgorCisvKgorICoJCXN0cnVjdAorICovCitzdHJ1Y3QgdXNiaHNnX3JlcXVlc3QgeworCXN0cnVjdCB1c2JfcmVxdWVzdAlyZXE7CisJc3RydWN0IGxpc3RfaGVhZAlub2RlOworfTsKKworI2RlZmluZSBFUF9OQU1FX1NJWkUgOAorc3RydWN0IHVzYmhzZ19ncHJpdjsKK3N0cnVjdCB1c2Joc2dfcGlwZV9oYW5kbGU7CitzdHJ1Y3QgdXNiaHNnX3VlcCB7CisJc3RydWN0IHVzYl9lcAkJIGVwOworCXN0cnVjdCB1c2Joc19waXBlCSpwaXBlOworCXN0cnVjdCBsaXN0X2hlYWQJIGxpc3Q7CisKKwljaGFyIGVwX25hbWVbRVBfTkFNRV9TSVpFXTsKKworCXN0cnVjdCB1c2Joc2dfZ3ByaXYgKmdwcml2OworCXN0cnVjdCB1c2Joc2dfcGlwZV9oYW5kbGUgKmhhbmRsZXI7Cit9OworCitzdHJ1Y3QgdXNiaHNnX2dwcml2IHsKKwlzdHJ1Y3QgdXNiX2dhZGdldAkgZ2FkZ2V0OworCXN0cnVjdCB1c2Joc19tb2QJIG1vZDsKKworCXN0cnVjdCB1c2Joc2dfdWVwCSp1ZXA7CisJaW50CQkJIHVlcF9zaXplOworCisJc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyCSpkcml2ZXI7CisKKwl1MzIJc3RhdHVzOworI2RlZmluZSBVU0JIU0dfU1RBVFVTX1NUQVJURUQJCSgxIDw8IDApCisjZGVmaW5lIFVTQkhTR19TVEFUVVNfUkVHSVNURVJECQkoMSA8PCAxKQorI2RlZmluZSBVU0JIU0dfU1RBVFVTX1dFREdFCQkoMSA8PCAyKQorfTsKKworc3RydWN0IHVzYmhzZ19waXBlX2hhbmRsZSB7CisJaW50ICgqcHJlcGFyZSkoc3RydWN0IHVzYmhzZ191ZXAgKnVlcCwgc3RydWN0IHVzYmhzZ19yZXF1ZXN0ICp1cmVxKTsKKwlpbnQgKCp0cnlfcnVuKShzdHJ1Y3QgdXNiaHNnX3VlcCAqdWVwLCBzdHJ1Y3QgdXNiaHNnX3JlcXVlc3QgKnVyZXEpOworCXZvaWQgKCppcnFfbWFzaykoc3RydWN0IHVzYmhzZ191ZXAgKnVlcCwgaW50IGVuYWJsZSk7Cit9OworCitzdHJ1Y3QgdXNiaHNnX3JlY2lwX2hhbmRsZSB7CisJY2hhciAqbmFtZTsKKwlpbnQgKCpkZXZpY2UpKHN0cnVjdCB1c2Joc19wcml2ICpwcml2LCBzdHJ1Y3QgdXNiaHNnX3VlcCAqdWVwLAorCQkgICAgICBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJsKTsKKwlpbnQgKCppbnRlcmZhY2UpKHN0cnVjdCB1c2Joc19wcml2ICpwcml2LCBzdHJ1Y3QgdXNiaHNnX3VlcCAqdWVwLAorCQkJIHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwpOworCWludCAoKmVuZHBvaW50KShzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdiwgc3RydWN0IHVzYmhzZ191ZXAgKnVlcCwKKwkJCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwpOworfTsKKworLyoKKyAqCQltYWNybworICovCisjZGVmaW5lIHVzYmhzZ19wcml2X3RvX2dwcml2KHByaXYpCQkJXAorCWNvbnRhaW5lcl9vZigJCQkJCVwKKwkJdXNiaHNfbW9kX2dldChwcml2LCBVU0JIU19HQURHRVQpLAlcCisJCXN0cnVjdCB1c2Joc2dfZ3ByaXYsIG1vZCkKKworI2RlZmluZSBfX3VzYmhzZ19mb3JfZWFjaF91ZXAoc3RhcnQsIHBvcywgZywgaSkJXAorCWZvciAoaSA9IHN0YXJ0LCBwb3MgPSAoZyktPnVlcDsJCVwKKwkgICAgIGkgPCAoZyktPnVlcF9zaXplOwkJCVwKKwkgICAgIGkrKywgcG9zID0gKGcpLT51ZXAgKyBpKQorCisjZGVmaW5lIHVzYmhzZ19mb3JfZWFjaF91ZXAocG9zLCBncHJpdiwgaSkJXAorCV9fdXNiaHNnX2Zvcl9lYWNoX3VlcCgxLCBwb3MsIGdwcml2LCBpKQorCisjZGVmaW5lIHVzYmhzZ19mb3JfZWFjaF91ZXBfd2l0aF9kY3AocG9zLCBncHJpdiwgaSkJXAorCV9fdXNiaHNnX2Zvcl9lYWNoX3VlcCgwLCBwb3MsIGdwcml2LCBpKQorCisjZGVmaW5lIHVzYmhzZ19nYWRnZXRfdG9fZ3ByaXYoZylcCisJY29udGFpbmVyX29mKGcsIHN0cnVjdCB1c2Joc2dfZ3ByaXYsIGdhZGdldCkKKworI2RlZmluZSB1c2Joc2dfcmVxX3RvX3VyZXEocilcCisJY29udGFpbmVyX29mKHIsIHN0cnVjdCB1c2Joc2dfcmVxdWVzdCwgcmVxKQorCisjZGVmaW5lIHVzYmhzZ19lcF90b191ZXAoZSkJCWNvbnRhaW5lcl9vZihlLCBzdHJ1Y3QgdXNiaHNnX3VlcCwgZXApCisjZGVmaW5lIHVzYmhzZ19ncHJpdl90b19sb2NrKGdwKQl1c2Joc19wcml2X3RvX2xvY2soKGdwKS0+bW9kLnByaXYpCisjZGVmaW5lIHVzYmhzZ19ncHJpdl90b19kZXYoZ3ApCQl1c2Joc19wcml2X3RvX2RldigoZ3ApLT5tb2QucHJpdikKKyNkZWZpbmUgdXNiaHNnX2dwcml2X3RvX3ByaXYoZ3ApCSgoZ3ApLT5tb2QucHJpdikKKyNkZWZpbmUgdXNiaHNnX2dwcml2X3RvX2RjcChncCkJCSgoZ3ApLT51ZXApCisjZGVmaW5lIHVzYmhzZ19ncHJpdl90b19udGhfdWVwKGdwLCBpKQkoKGdwKS0+dWVwICsgaSkKKyNkZWZpbmUgdXNiaHNnX3VlcF90b19ncHJpdih1KQkJKCh1KS0+Z3ByaXYpCisjZGVmaW5lIHVzYmhzZ191ZXBfdG9fcGlwZSh1KQkJKCh1KS0+cGlwZSkKKyNkZWZpbmUgdXNiaHNnX3BpcGVfdG9fdWVwKHApCQkoKHApLT5tb2RfcHJpdmF0ZSkKKyNkZWZpbmUgdXNiaHNnX2lzX2RjcCh1KQkJKCh1KSA9PSB1c2Joc2dfZ3ByaXZfdG9fZGNwKCh1KS0+Z3ByaXYpKQorCisjZGVmaW5lIHVzYmhzZ19pc19ub3RfY29ubmVjdGVkKGdwKSAoKGdwKS0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKQorCisvKiBzdGF0dXMgKi8KKyNkZWZpbmUgdXNiaHNnX3N0YXR1c19pbml0KGdwKSAgIGRvIHsoZ3ApLT5zdGF0dXMgPSAwOyB9IHdoaWxlICgwKQorI2RlZmluZSB1c2Joc2dfc3RhdHVzX3NldChncCwgYikgKGdwLT5zdGF0dXMgfD0gIGIpCisjZGVmaW5lIHVzYmhzZ19zdGF0dXNfY2xyKGdwLCBiKSAoZ3AtPnN0YXR1cyAmPSB+YikKKyNkZWZpbmUgdXNiaHNnX3N0YXR1c19oYXMoZ3AsIGIpIChncC0+c3RhdHVzICYgICBiKQorCisvKgorICoJCXVzYmhzZ190cnlsb2NrCisgKgorICogVGhpcyBkcml2ZXIgZG9uJ3QgdXNlIHNwaW5fdHJ5X2xvY2sKKyAqIHRvIGF2b2lkIHdhcm5pbmcgb2YgQ09ORklHX0RFQlVHX1NQSU5MT0NLCisgKi8KK3N0YXRpYyBzcGlubG9ja190ICp1c2Joc2dfdHJ5bG9jayhzdHJ1Y3QgdXNiaHNnX2dwcml2ICpncHJpdiwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQoreworCXNwaW5sb2NrX3QgKmxvY2sgPSB1c2Joc2dfZ3ByaXZfdG9fbG9jayhncHJpdik7CisKKwkvKiBjaGVjayBzcGluIGxvY2sgc3RhdHVzCisJICogdG8gYXZvaWQgZGVhZGxvY2svbmVzdCAqLworCWlmIChzcGluX2lzX2xvY2tlZChsb2NrKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZShsb2NrLCAqZmxhZ3MpOworCisJcmV0dXJuIGxvY2s7Cit9CisKK3N0YXRpYyB2b2lkIHVzYmhzZ191bmxvY2soc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCit7CisJaWYgKCFsb2NrKQorCQlyZXR1cm47CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssICpmbGFncyk7Cit9CisKKy8qCisgKgkJbGlzdCBwdXNoL3BvcAorICovCitzdGF0aWMgdm9pZCB1c2Joc2dfcXVldWVfcHVzaChzdHJ1Y3QgdXNiaHNnX3VlcCAqdWVwLAorCQkJICAgICAgc3RydWN0IHVzYmhzZ19yZXF1ZXN0ICp1cmVxKQoreworCXN0cnVjdCB1c2Joc2dfZ3ByaXYgKmdwcml2ID0gdXNiaHNnX3VlcF90b19ncHJpdih1ZXApOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHVzYmhzZ19ncHJpdl90b19kZXYoZ3ByaXYpOworCXN0cnVjdCB1c2Joc19waXBlICpwaXBlID0gdXNiaHNnX3VlcF90b19waXBlKHVlcCk7CisKKwkvKgorCSAqKioqKioqKiogIGFzc3VtZSB1bmRlciBzcGluIGxvY2sgICoqKioqKioqKgorCSAqLworCWxpc3RfZGVsX2luaXQoJnVyZXEtPm5vZGUpOworCWxpc3RfYWRkX3RhaWwoJnVyZXEtPm5vZGUsICZ1ZXAtPmxpc3QpOworCXVyZXEtPnJlcS5hY3R1YWwgPSAwOworCXVyZXEtPnJlcS5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CisKKwlkZXZfZGJnKGRldiwgInBpcGUgJWQgOiBxdWV1ZSBwdXNoICglZClcbiIsCisJCXVzYmhzX3BpcGVfbnVtYmVyKHBpcGUpLAorCQl1cmVxLT5yZXEubGVuZ3RoKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2Joc2dfcmVxdWVzdCAqdXNiaHNnX3F1ZXVlX2dldChzdHJ1Y3QgdXNiaHNnX3VlcCAqdWVwKQoreworCS8qCisJICoqKioqKioqKiAgYXNzdW1lIHVuZGVyIHNwaW4gbG9jayAgKioqKioqKioqCisJICovCisJaWYgKGxpc3RfZW1wdHkoJnVlcC0+bGlzdCkpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGxpc3RfZW50cnkodWVwLT5saXN0Lm5leHQsIHN0cnVjdCB1c2Joc2dfcmVxdWVzdCwgbm9kZSk7Cit9CisKKyNkZWZpbmUgdXNiaHNnX3F1ZXVlX3ByZXBhcmUodWVwKSBfX3VzYmhzZ19xdWV1ZV9oYW5kbGVyKHVlcCwgMSk7CisjZGVmaW5lIHVzYmhzZ19xdWV1ZV9oYW5kbGUodWVwKSAgX191c2Joc2dfcXVldWVfaGFuZGxlcih1ZXAsIDApOworc3RhdGljIGludCBfX3VzYmhzZ19xdWV1ZV9oYW5kbGVyKHN0cnVjdCB1c2Joc2dfdWVwICp1ZXAsIGludCBwcmVwYXJlKQoreworCXN0cnVjdCB1c2Joc2dfZ3ByaXYgKmdwcml2ID0gdXNiaHNnX3VlcF90b19ncHJpdih1ZXApOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHVzYmhzZ19ncHJpdl90b19kZXYoZ3ByaXYpOworCXN0cnVjdCB1c2Joc2dfcmVxdWVzdCAqdXJlcTsKKwlzcGlubG9ja190ICpsb2NrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIXVlcC0+aGFuZGxlcikgeworCQlkZXZfZXJyKGRldiwgIm5vIGhhbmRsZXIgZnVuY3Rpb25cbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKgorCSAqIENBVVRJT04gWypxdWV1ZSBoYW5kbGVyKl0KKwkgKgorCSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgZm9yIHN0YXJ0L3Jlc3RhcnQgcXVldWUgb3BlcmF0aW9uLgorCSAqIE9UT0ggdGhlIG1vc3QgbXVjaCB3b3JyeSBmb3IgVVNCIGRyaXZlciBpcyBzcGlubG9jayBuZXN0LgorCSAqIFNwZWNpYWxseSBpdCBhcmUKKwkgKiAgIC0gdXNiX2VwX29wcyAgOjogcXVldWUKKwkgKiAgIC0gdXNiX3JlcXVlc3QgOjogY29tcGxldGUKKwkgKgorCSAqIEJ1dCB0aGUgY2FsbGVyIG9mIHRoaXMgZnVuY3Rpb24gbmVlZCBub3QgY2FyZSBhYm91dCBzcGlubG9jay4KKwkgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzaW5nIHVzYmhzZ190cnlsb2NrIGZvciBpdC4KKwkgKiBpZiAiaXNfbG9ja2VkIiBpcyAxLCB0aGlzIG1lYW4gdGhpcyBmdW5jdGlvbiBsb2NrIGl0LgorCSAqIGJ1dCBpZiBpdCBpcyAwLCB0aGlzIG1lYW4gaXQgaXMgYWxyZWFkeSB1bmRlciBzcGluIGxvY2suCisJICogc2VlIGFsc28KKwkgKiAgIENBVVRJT04gWyplbmRwb2ludCBxdWV1ZSpdCisJICogICBDQVVUSU9OIFsqcmVxdWVzdCBjb21wbGV0ZSpdCisJICovCisKKwkvKioqKioqKioqKioqKioqKioqICBzcGluIHRyeSBsb2NrICoqKioqKioqKioqKioqKioqKiovCisJbG9jayA9IHVzYmhzZ190cnlsb2NrKGdwcml2LCAmZmxhZ3MpOworCisJdXJlcSA9IHVzYmhzZ19xdWV1ZV9nZXQodWVwKTsKKwlpZiAodXJlcSkgeworCQlpZiAocHJlcGFyZSkKKwkJCXJldCA9IHVlcC0+aGFuZGxlci0+cHJlcGFyZSh1ZXAsIHVyZXEpOworCQllbHNlCisJCQlyZXQgPSB1ZXAtPmhhbmRsZXItPnRyeV9ydW4odWVwLCB1cmVxKTsKKwl9CisJdXNiaHNnX3VubG9jayhsb2NrLCAmZmxhZ3MpOworCS8qKioqKioqKioqKioqKioqKioqKiAgc3BpbiB1bmxvY2sgKioqKioqKioqKioqKioqKioqLworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgdXNiaHNnX3F1ZXVlX3BvcChzdHJ1Y3QgdXNiaHNnX3VlcCAqdWVwLAorCQkJICAgICBzdHJ1Y3QgdXNiaHNnX3JlcXVlc3QgKnVyZXEsCisJCQkgICAgIGludCBzdGF0dXMpCit7CisJc3RydWN0IHVzYmhzZ19ncHJpdiAqZ3ByaXYgPSB1c2Joc2dfdWVwX3RvX2dwcml2KHVlcCk7CisJc3RydWN0IHVzYmhzX3BpcGUgKnBpcGUgPSB1c2Joc2dfdWVwX3RvX3BpcGUodWVwKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB1c2Joc2dfZ3ByaXZfdG9fZGV2KGdwcml2KTsKKworCS8qCisJICoqKioqKioqKiAgYXNzdW1lIHVuZGVyIHNwaW4gbG9jayAgKioqKioqKioqCisJICovCisKKwkvKgorCSAqIENBVVRJT04gWypyZXF1ZXN0IGNvbXBsZXRlKl0KKwkgKgorCSAqIFRoZXJlIGlzIGEgcG9zc2liaWxpdHkgbm90IHRvIGJlIGNhbGxlZCBpbiBjb3JyZWN0IG9yZGVyCisJICogaWYgImNvbXBsZXRlIiBpcyBjYWxsZWQgd2l0aG91dCBzcGlubG9jay4KKwkgKgorCSAqIFNvLCB0aGlzIGZ1bmN0aW9uIGFzc3VtZSBpdCBpcyB1bmRlciBzcGlubG9jaywKKwkgKiBhbmQgY2FsbCB1c2JfcmVxdWVzdCA6OiBjb21wbGV0ZS4KKwkgKgorCSAqIEJ1dCB0aGlzICJjb21wbGV0ZSIgd2lsbCBwdXNoIG5leHQgdXNiX3JlcXVlc3QuCisJICogSXQgbWVhbiAidXNiX2VwX29wcyA6OiBxdWV1ZSIgd2hpY2ggaXMgdXNpbmcgc3BpbmxvY2sgaXMgY2FsbGVkCisJICogdW5kZXIgc3BpbmxvY2suCisJICoKKwkgKiBUbyBhdm9pZCBkZWFkLWxvY2ssIHRoaXMgZHJpdmVyIGlzIHVzaW5nIHVzYmhzZ190cnlsb2NrLgorCSAqICAgQ0FVVElPTiBbKmVuZHBvaW50IHF1ZXVlKl0KKwkgKiAgIENBVVRJT04gWypxdWV1ZSBoYW5kbGVyKl0KKwkgKi8KKworCWRldl9kYmcoZGV2LCAicGlwZSAlZCA6IHF1ZXVlIHBvcFxuIiwgdXNiaHNfcGlwZV9udW1iZXIocGlwZSkpOworCisJbGlzdF9kZWxfaW5pdCgmdXJlcS0+bm9kZSk7CisKKwl1cmVxLT5yZXEuc3RhdHVzID0gc3RhdHVzOworCXVyZXEtPnJlcS5jb21wbGV0ZSgmdWVwLT5lcCwgJnVyZXEtPnJlcSk7CisKKwkvKiBtb3JlIHJlcXVlc3QgPyAqLworCWlmICgwID09IHN0YXR1cykKKwkJdXNiaHNnX3F1ZXVlX3ByZXBhcmUodWVwKTsKK30KKworLyoKKyAqCQlpcnEgZW5hYmxlL2Rpc2FibGUgZnVuY3Rpb24KKyAqLworI2RlZmluZSB1c2Joc2dfaXJxX2NhbGxiYWNrX2N0cmwodWVwLCBzdGF0dXMsIGVuYWJsZSkJCQlcCisJKHsJCQkJCQkJCVwKKwkJc3RydWN0IHVzYmhzZ19ncHJpdiAqZ3ByaXYgPSB1c2Joc2dfdWVwX3RvX2dwcml2KHVlcCk7CVwKKwkJc3RydWN0IHVzYmhzX3BpcGUgKnBpcGUgPSB1c2Joc2dfdWVwX3RvX3BpcGUodWVwKTsJXAorCQlzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdiA9IHVzYmhzZ19ncHJpdl90b19wcml2KGdwcml2KTsJXAorCQlzdHJ1Y3QgdXNiaHNfbW9kICptb2QgPSB1c2Joc19tb2RfZ2V0X2N1cnJlbnQocHJpdik7CVwKKwkJaWYgKCFtb2QpCQkJCQkJXAorCQkJcmV0dXJuOwkJCQkJCVwKKwkJaWYgKGVuYWJsZSkJCQkJCQlcCisJCQltb2QtPmlycV8jI3N0YXR1cyB8PSAoMSA8PCB1c2Joc19waXBlX251bWJlcihwaXBlKSk7IFwKKwkJZWxzZQkJCQkJCQlcCisJCQltb2QtPmlycV8jI3N0YXR1cyAmPSB+KDEgPDwgdXNiaHNfcGlwZV9udW1iZXIocGlwZSkpOyBcCisJCXVzYmhzX2lycV9jYWxsYmFja191cGRhdGUocHJpdiwgbW9kKTsJCQlcCisJfSkKKworc3RhdGljIHZvaWQgdXNiaHNnX2lycV9lbXB0eV9jdHJsKHN0cnVjdCB1c2Joc2dfdWVwICp1ZXAsIGludCBlbmFibGUpCit7CisJdXNiaHNnX2lycV9jYWxsYmFja19jdHJsKHVlcCwgYmVtcHN0cywgZW5hYmxlKTsKK30KKworc3RhdGljIHZvaWQgdXNiaHNnX2lycV9yZWFkeV9jdHJsKHN0cnVjdCB1c2Joc2dfdWVwICp1ZXAsIGludCBlbmFibGUpCit7CisJdXNiaHNnX2lycV9jYWxsYmFja19jdHJsKHVlcCwgYnJkeXN0cywgZW5hYmxlKTsKK30KKworLyoKKyAqCQloYW5kbGVyIGZ1bmN0aW9uCisgKi8KK3N0YXRpYyBpbnQgdXNiaHNnX3RyeV9ydW5fY3RybF9zdGFnZV9lbmQoc3RydWN0IHVzYmhzZ191ZXAgKnVlcCwKKwkJCQkJIHN0cnVjdCB1c2Joc2dfcmVxdWVzdCAqdXJlcSkKK3sKKwlzdHJ1Y3QgdXNiaHNfcGlwZSAqcGlwZSA9IHVzYmhzZ191ZXBfdG9fcGlwZSh1ZXApOworCisJLyoKKwkgKioqKioqKioqICBhc3N1bWUgdW5kZXIgc3BpbiBsb2NrICAqKioqKioqKioKKwkgKi8KKworCXVzYmhzX2RjcF9jb250cm9sX3RyYW5zZmVyX2RvbmUocGlwZSk7CisJdXNiaHNnX3F1ZXVlX3BvcCh1ZXAsIHVyZXEsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXNiaHNnX3RyeV9ydW5fc2VuZF9wYWNrZXQoc3RydWN0IHVzYmhzZ191ZXAgKnVlcCwKKwkJCQkgICAgICBzdHJ1Y3QgdXNiaHNnX3JlcXVlc3QgKnVyZXEpCit7CisJc3RydWN0IHVzYmhzX3BpcGUgKnBpcGUgPSB1c2Joc2dfdWVwX3RvX3BpcGUodWVwKTsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSA9ICZ1cmVxLT5yZXE7CisJc3RydWN0IHVzYmhzZ19ncHJpdiAqZ3ByaXYgPSB1c2Joc2dfdWVwX3RvX2dwcml2KHVlcCk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gdXNiaHNnX2dwcml2X3RvX2RldihncHJpdik7CisJdm9pZCAqYnVmOworCWludCByZW1haW5kZXIsIHNlbmQ7CisJaW50IGlzX2RvbmUgPSAwOworCWludCBlbmFibGU7CisJaW50IG1heHA7CisKKwkvKgorCSAqKioqKioqKiogIGFzc3VtZSB1bmRlciBzcGluIGxvY2sgICoqKioqKioqKgorCSAqLworCisJbWF4cAkJPSB1c2Joc19waXBlX2dldF9tYXhwYWNrZXQocGlwZSk7CisJYnVmCQk9IHJlcS0+YnVmICAgICsgcmVxLT5hY3R1YWw7CisJcmVtYWluZGVyCT0gcmVxLT5sZW5ndGggLSByZXEtPmFjdHVhbDsKKworCXNlbmQgPSB1c2Joc19maWZvX3dyaXRlKHBpcGUsIGJ1ZiwgcmVtYWluZGVyKTsKKworCS8qCisJICogc2VuZCA8IDAgOiBwaXBlIGJ1c3kKKwkgKiBzZW5kID0gMCA6IHNlbmQgemVybyBwYWNrZXQKKwkgKiBzZW5kID4gMCA6IHNlbmQgZGF0YQorCSAqCisJICogc2VuZCA8PSBtYXhfcGFja2V0CisJICovCisJaWYgKHNlbmQgPiAwKQorCQlyZXEtPmFjdHVhbCArPSBzZW5kOworCisJLyogc2VuZCBhbGwgcGFja2V0ID8gKi8KKwlpZiAoc2VuZCA8IHJlbWFpbmRlcikKKwkJaXNfZG9uZSA9IDA7CQkvKiB0aGVyZSBhcmUgcmVtYWluZGVyIGRhdGEgKi8KKwllbHNlIGlmIChzZW5kIDwgbWF4cCkKKwkJaXNfZG9uZSA9IDE7CQkvKiBzaG9ydCBwYWNrZXQgKi8KKwllbHNlCisJCWlzX2RvbmUgPSAhcmVxLT56ZXJvOwkvKiBzZW5kIHplcm8gcGFja2V0ID8gKi8KKworCWRldl9kYmcoZGV2LCAiICBzZW5kICVkICglZC8gJWQvICVkLyAlZClcbiIsCisJCXVzYmhzX3BpcGVfbnVtYmVyKHBpcGUpLAorCQlyZW1haW5kZXIsIHNlbmQsIGlzX2RvbmUsIHJlcS0+emVybyk7CisKKwkvKgorCSAqIGVuYWJsZSBpbnRlcnJ1cHQgYW5kIHNlbmQgYWdhaW4gaW4gaXJxIGhhbmRsZXIKKwkgKiBpZiBpdCBzdGlsbCBoYXZlIHJlbWFpbmRlciBkYXRhIHdoaWNoIHNob3VsZCBiZSBzZW50LgorCSAqLworCWVuYWJsZSA9ICFpc19kb25lOworCXVlcC0+aGFuZGxlci0+aXJxX21hc2sodWVwLCBlbmFibGUpOworCisJLyoKKwkgKiB1c2Joc19maWZvX2VuYWJsZSBleGVjdXRlCisJICogIC0gYWZ0ZXIgY2FsbGJhY2tfdXBkYXRlLAorCSAqICAtIGJlZm9yZSBxdWV1ZV9wb3AgLyBzdGFnZV9lbmQKKwkgKi8KKwl1c2Joc19maWZvX2VuYWJsZShwaXBlKTsKKworCS8qCisJICogYWxsIGRhdGEgd2VyZSBzZW50ID8KKwkgKi8KKwlpZiAoaXNfZG9uZSkgeworCQkvKiBpdCBjYXJlIGJlbG93IGNhbGwgaW4KKwkJICAgImZ1bmN0aW9uIG1vZGUiICovCisJCWlmICh1c2Joc2dfaXNfZGNwKHVlcCkpCisJCQl1c2Joc19kY3BfY29udHJvbF90cmFuc2Zlcl9kb25lKHBpcGUpOworCisJCXVzYmhzZ19xdWV1ZV9wb3AodWVwLCB1cmVxLCAwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1c2Joc2dfcHJlcGFyZV9zZW5kX3BhY2tldChzdHJ1Y3QgdXNiaHNnX3VlcCAqdWVwLAorCQkJCSAgICAgIHN0cnVjdCB1c2Joc2dfcmVxdWVzdCAqdXJlcSkKK3sKKwlzdHJ1Y3QgdXNiaHNfcGlwZSAqcGlwZSA9IHVzYmhzZ191ZXBfdG9fcGlwZSh1ZXApOworCisJLyoKKwkgKioqKioqKioqICBhc3N1bWUgdW5kZXIgc3BpbiBsb2NrICAqKioqKioqKioKKwkgKi8KKworCXVzYmhzX2ZpZm9fcHJlcGFyZV93cml0ZShwaXBlKTsKKwl1c2Joc2dfdHJ5X3J1bl9zZW5kX3BhY2tldCh1ZXAsIHVyZXEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXNiaHNnX3RyeV9ydW5fcmVjZWl2ZV9wYWNrZXQoc3RydWN0IHVzYmhzZ191ZXAgKnVlcCwKKwkJCQkJIHN0cnVjdCB1c2Joc2dfcmVxdWVzdCAqdXJlcSkKK3sKKwlzdHJ1Y3QgdXNiaHNfcGlwZSAqcGlwZSA9IHVzYmhzZ191ZXBfdG9fcGlwZSh1ZXApOworCXN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxID0gJnVyZXEtPnJlcTsKKwlzdHJ1Y3QgdXNiaHNnX2dwcml2ICpncHJpdiA9IHVzYmhzZ191ZXBfdG9fZ3ByaXYodWVwKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB1c2Joc2dfZ3ByaXZfdG9fZGV2KGdwcml2KTsKKwl2b2lkICpidWY7CisJaW50IG1heHA7CisJaW50IHJlbWFpbmRlciwgcmVjdjsKKwlpbnQgaXNfZG9uZSA9IDA7CisKKwkvKgorCSAqKioqKioqKiogIGFzc3VtZSB1bmRlciBzcGluIGxvY2sgICoqKioqKioqKgorCSAqLworCisJbWF4cAkJPSB1c2Joc19waXBlX2dldF9tYXhwYWNrZXQocGlwZSk7CisJYnVmCQk9IHJlcS0+YnVmICAgICsgcmVxLT5hY3R1YWw7CisJcmVtYWluZGVyCT0gcmVxLT5sZW5ndGggLSByZXEtPmFjdHVhbDsKKworCXJlY3YgPSB1c2Joc19maWZvX3JlYWQocGlwZSwgYnVmLCByZW1haW5kZXIpOworCS8qCisJICogcmVjdiA8IDAgIDogcGlwZSBidXN5CisJICogcmVjdiA+PSAwIDogcmVjZWl2ZSBkYXRhCisJICoKKwkgKiByZWN2IDw9IG1heF9wYWNrZXQKKwkgKi8KKwlpZiAocmVjdiA8IDApCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiB1cGRhdGUgcGFyYW1ldGVycyAqLworCXJlcS0+YWN0dWFsICs9IHJlY3Y7CisKKwlpZiAoKHJlY3YgPT0gcmVtYWluZGVyKSB8fAkvKiByZWNlaXZlIGFsbCBkYXRhICovCisJICAgIChyZWN2IDwgbWF4cCkpCQkvKiBzaG9ydCBwYWNrZXQgKi8KKwkJaXNfZG9uZSA9IDE7CisKKwlkZXZfZGJnKGRldiwgIiAgcmVjdiAlZCAoJWQvICVkLyAlZC8gJWQpXG4iLAorCQl1c2Joc19waXBlX251bWJlcihwaXBlKSwKKwkJcmVtYWluZGVyLCByZWN2LCBpc19kb25lLCByZXEtPnplcm8pOworCisJLyogcmVhZCBhbGwgZGF0YSA/ICovCisJaWYgKGlzX2RvbmUpIHsKKwkJaW50IGRpc2FibGUgPSAwOworCisJCXVlcC0+aGFuZGxlci0+aXJxX21hc2sodWVwLCBkaXNhYmxlKTsKKwkJdXNiaHNfZmlmb19kaXNhYmxlKHBpcGUpOworCQl1c2Joc2dfcXVldWVfcG9wKHVlcCwgdXJlcSwgMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXNiaHNnX3ByZXBhcmVfcmVjZWl2ZV9wYWNrZXQoc3RydWN0IHVzYmhzZ191ZXAgKnVlcCwKKwkJCQkJIHN0cnVjdCB1c2Joc2dfcmVxdWVzdCAqdXJlcSkKK3sKKwlzdHJ1Y3QgdXNiaHNfcGlwZSAqcGlwZSA9IHVzYmhzZ191ZXBfdG9fcGlwZSh1ZXApOworCWludCBlbmFibGUgPSAxOworCWludCByZXQ7CisKKwkvKgorCSAqKioqKioqKiogIGFzc3VtZSB1bmRlciBzcGluIGxvY2sgICoqKioqKioqKgorCSAqLworCisJcmV0ID0gdXNiaHNfZmlmb19wcmVwYXJlX3JlYWQocGlwZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqIGRhdGEgd2lsbCBiZSByZWFkIGluIGludGVycnVwdCBoYW5kbGVyCisJICovCisJdWVwLT5oYW5kbGVyLT5pcnFfbWFzayh1ZXAsIGVuYWJsZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHVzYmhzZ19waXBlX2hhbmRsZSB1c2Joc2dfaGFuZGxlcl9zZW5kX2J5X2VtcHR5ID0geworCS5wcmVwYXJlCT0gdXNiaHNnX3ByZXBhcmVfc2VuZF9wYWNrZXQsCisJLnRyeV9ydW4JPSB1c2Joc2dfdHJ5X3J1bl9zZW5kX3BhY2tldCwKKwkuaXJxX21hc2sJPSB1c2Joc2dfaXJxX2VtcHR5X2N0cmwsCit9OworCitzdGF0aWMgc3RydWN0IHVzYmhzZ19waXBlX2hhbmRsZSB1c2Joc2dfaGFuZGxlcl9zZW5kX2J5X3JlYWR5ID0geworCS5wcmVwYXJlCT0gdXNiaHNnX3ByZXBhcmVfc2VuZF9wYWNrZXQsCisJLnRyeV9ydW4JPSB1c2Joc2dfdHJ5X3J1bl9zZW5kX3BhY2tldCwKKwkuaXJxX21hc2sJPSB1c2Joc2dfaXJxX3JlYWR5X2N0cmwsCit9OworCitzdGF0aWMgc3RydWN0IHVzYmhzZ19waXBlX2hhbmRsZSB1c2Joc2dfaGFuZGxlcl9yZWN2X2J5X3JlYWR5ID0geworCS5wcmVwYXJlCT0gdXNiaHNnX3ByZXBhcmVfcmVjZWl2ZV9wYWNrZXQsCisJLnRyeV9ydW4JPSB1c2Joc2dfdHJ5X3J1bl9yZWNlaXZlX3BhY2tldCwKKwkuaXJxX21hc2sJPSB1c2Joc2dfaXJxX3JlYWR5X2N0cmwsCit9OworCitzdGF0aWMgc3RydWN0IHVzYmhzZ19waXBlX2hhbmRsZSB1c2Joc2dfaGFuZGxlcl9jdHJsX3N0YWdlX2VuZCA9IHsKKwkucHJlcGFyZQk9IHVzYmhzZ190cnlfcnVuX2N0cmxfc3RhZ2VfZW5kLAorCS50cnlfcnVuCT0gdXNiaHNnX3RyeV9ydW5fY3RybF9zdGFnZV9lbmQsCit9OworCisvKgorICogRENQIHBpcGUgY2FuIE5PVCB1c2UgInJlYWR5IGludGVycnVwdCIgZm9yICJzZW5kIgorICogaXQgc2hvdWxkIHVzZSAiZW1wdHkiIGludGVycnVwdC4KKyAqIHNlZQorICogICAiT3BlcmF0aW9uIiAtICJJbnRlcnJ1cHQgRnVuY3Rpb24iIC0gIkJSRFkgSW50ZXJydXB0IgorICoKKyAqIG9uIHRoZSBvdGhlciBoYW5kLCBub3JtYWwgcGlwZSBjYW4gdXNlICJyZWFkeSBpbnRlcnJ1cHQiIGZvciAic2VuZCIKKyAqIGV2ZW4gdGhvdWdoIGl0IGlzIHNpbmdsZS9kb3VibGUgYnVmZmVyCisgKi8KKyNkZWZpbmUgdXNiaHNnX2hhbmRsZXJfc2VuZF9jdHJsCXVzYmhzZ19oYW5kbGVyX3NlbmRfYnlfZW1wdHkKKyNkZWZpbmUgdXNiaHNnX2hhbmRsZXJfcmVjdl9jdHJsCXVzYmhzZ19oYW5kbGVyX3JlY3ZfYnlfcmVhZHkKKworI2RlZmluZSB1c2Joc2dfaGFuZGxlcl9zZW5kX3BhY2tldAl1c2Joc2dfaGFuZGxlcl9zZW5kX2J5X3JlYWR5CisjZGVmaW5lIHVzYmhzZ19oYW5kbGVyX3JlY3ZfcGFja2V0CXVzYmhzZ19oYW5kbGVyX3JlY3ZfYnlfcmVhZHkKKworLyoKKyAqCQlVU0JfVFlQRV9TVEFOREFSRCAvIGNsZWFyIGZlYXR1cmUgZnVuY3Rpb25zCisgKi8KK3N0YXRpYyBpbnQgdXNiaHNnX3JlY2lwX2hhbmRsZXJfc3RkX2NvbnRyb2xfZG9uZShzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdiwKKwkJCQkJCSBzdHJ1Y3QgdXNiaHNnX3VlcCAqdWVwLAorCQkJCQkJIHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwpCit7CisJc3RydWN0IHVzYmhzZ19ncHJpdiAqZ3ByaXYgPSB1c2Joc2dfcHJpdl90b19ncHJpdihwcml2KTsKKwlzdHJ1Y3QgdXNiaHNnX3VlcCAqZGNwID0gdXNiaHNnX2dwcml2X3RvX2RjcChncHJpdik7CisJc3RydWN0IHVzYmhzX3BpcGUgKnBpcGUgPSB1c2Joc2dfdWVwX3RvX3BpcGUoZGNwKTsKKworCXVzYmhzX2RjcF9jb250cm9sX3RyYW5zZmVyX2RvbmUocGlwZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1c2Joc2dfcmVjaXBfaGFuZGxlcl9zdGRfY2xlYXJfZW5kcG9pbnQoc3RydWN0IHVzYmhzX3ByaXYgKnByaXYsCisJCQkJCQkgICBzdHJ1Y3QgdXNiaHNnX3VlcCAqdWVwLAorCQkJCQkJICAgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybCkKK3sKKwlzdHJ1Y3QgdXNiaHNnX2dwcml2ICpncHJpdiA9IHVzYmhzZ191ZXBfdG9fZ3ByaXYodWVwKTsKKwlzdHJ1Y3QgdXNiaHNfcGlwZSAqcGlwZSA9IHVzYmhzZ191ZXBfdG9fcGlwZSh1ZXApOworCisJaWYgKCF1c2Joc2dfc3RhdHVzX2hhcyhncHJpdiwgVVNCSFNHX1NUQVRVU19XRURHRSkpIHsKKwkJdXNiaHNfZmlmb19kaXNhYmxlKHBpcGUpOworCQl1c2Joc19waXBlX2NsZWFyX3NlcXVlbmNlKHBpcGUpOworCQl1c2Joc19maWZvX2VuYWJsZShwaXBlKTsKKwl9CisKKwl1c2Joc2dfcmVjaXBfaGFuZGxlcl9zdGRfY29udHJvbF9kb25lKHByaXYsIHVlcCwgY3RybCk7CisKKwl1c2Joc2dfcXVldWVfcHJlcGFyZSh1ZXApOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCB1c2Joc2dfcmVjaXBfaGFuZGxlIHJlcV9jbGVhcl9mZWF0dXJlID0geworCS5uYW1lCQk9ICJjbGVhciBmZWF0dXJlIiwKKwkuZGV2aWNlCQk9IHVzYmhzZ19yZWNpcF9oYW5kbGVyX3N0ZF9jb250cm9sX2RvbmUsCisJLmludGVyZmFjZQk9IHVzYmhzZ19yZWNpcF9oYW5kbGVyX3N0ZF9jb250cm9sX2RvbmUsCisJLmVuZHBvaW50CT0gdXNiaHNnX3JlY2lwX2hhbmRsZXJfc3RkX2NsZWFyX2VuZHBvaW50LAorfTsKKworLyoKKyAqCQlVU0JfVFlQRSBoYW5kbGVyCisgKi8KK3N0YXRpYyBpbnQgdXNiaHNnX3JlY2lwX3J1bl9oYW5kbGUoc3RydWN0IHVzYmhzX3ByaXYgKnByaXYsCisJCQkJICAgc3RydWN0IHVzYmhzZ19yZWNpcF9oYW5kbGUgKmhhbmRsZXIsCisJCQkJICAgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybCkKK3sKKwlzdHJ1Y3QgdXNiaHNnX2dwcml2ICpncHJpdiA9IHVzYmhzZ19wcml2X3RvX2dwcml2KHByaXYpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHVzYmhzZ19ncHJpdl90b19kZXYoZ3ByaXYpOworCXN0cnVjdCB1c2Joc2dfdWVwICp1ZXA7CisJaW50IHJlY2lwID0gY3RybC0+YlJlcXVlc3RUeXBlICYgVVNCX1JFQ0lQX01BU0s7CisJaW50IG50aCA9IGxlMTZfdG9fY3B1KGN0cmwtPndJbmRleCkgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0s7CisJaW50IHJldDsKKwlpbnQgKCpmdW5jKShzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdiwgc3RydWN0IHVzYmhzZ191ZXAgKnVlcCwKKwkJICAgIHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwpOworCWNoYXIgKm1zZzsKKworCXVlcCA9IHVzYmhzZ19ncHJpdl90b19udGhfdWVwKGdwcml2LCBudGgpOworCWlmICghdXNiaHNnX3VlcF90b19waXBlKHVlcCkpIHsKKwkJZGV2X2VycihkZXYsICJ3cm9uZyByZWNpcCByZXF1ZXN0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChyZWNpcCkgeworCWNhc2UgVVNCX1JFQ0lQX0RFVklDRToKKwkJbXNnCT0gIkRFVklDRSI7CisJCWZ1bmMJPSBoYW5kbGVyLT5kZXZpY2U7CisJCWJyZWFrOworCWNhc2UgVVNCX1JFQ0lQX0lOVEVSRkFDRToKKwkJbXNnCT0gIklOVEVSRkFDRSI7CisJCWZ1bmMJPSBoYW5kbGVyLT5pbnRlcmZhY2U7CisJCWJyZWFrOworCWNhc2UgVVNCX1JFQ0lQX0VORFBPSU5UOgorCQltc2cJPSAiRU5EUE9JTlQiOworCQlmdW5jCT0gaGFuZGxlci0+ZW5kcG9pbnQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl93YXJuKGRldiwgInVuc3VwcG9ydGVkIFJFQ0lQKCVkKVxuIiwgcmVjaXApOworCQlmdW5jID0gTlVMTDsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisKKwlpZiAoZnVuYykgeworCQlkZXZfZGJnKGRldiwgIiVzIChwaXBlICVkIDolcylcbiIsIGhhbmRsZXItPm5hbWUsIG50aCwgbXNnKTsKKwkJcmV0ID0gZnVuYyhwcml2LCB1ZXAsIGN0cmwpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKgkJaXJxIGZ1bmN0aW9ucworICoKKyAqIGl0IHdpbGwgYmUgY2FsbGVkIGZyb20gdXNiaHNfaW50ZXJydXB0CisgKi8KK3N0YXRpYyBpbnQgdXNiaHNnX2lycV9kZXZfc3RhdGUoc3RydWN0IHVzYmhzX3ByaXYgKnByaXYsCisJCQkJc3RydWN0IHVzYmhzX2lycV9zdGF0ZSAqaXJxX3N0YXRlKQoreworCXN0cnVjdCB1c2Joc2dfZ3ByaXYgKmdwcml2ID0gdXNiaHNnX3ByaXZfdG9fZ3ByaXYocHJpdik7CisJc3RydWN0IGRldmljZSAqZGV2ID0gdXNiaHNnX2dwcml2X3RvX2RldihncHJpdik7CisKKwlncHJpdi0+Z2FkZ2V0LnNwZWVkID0gdXNiaHNfc3RhdHVzX2dldF91c2Jfc3BlZWQoaXJxX3N0YXRlKTsKKworCWRldl9kYmcoZGV2LCAic3RhdGUgPSAleCA6IHNwZWVkIDogJWRcbiIsCisJCXVzYmhzX3N0YXR1c19nZXRfZGV2aWNlX3N0YXRlKGlycV9zdGF0ZSksCisJCWdwcml2LT5nYWRnZXQuc3BlZWQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXNiaHNnX2lycV9jdHJsX3N0YWdlKHN0cnVjdCB1c2Joc19wcml2ICpwcml2LAorCQkJCSBzdHJ1Y3QgdXNiaHNfaXJxX3N0YXRlICppcnFfc3RhdGUpCit7CisJc3RydWN0IHVzYmhzZ19ncHJpdiAqZ3ByaXYgPSB1c2Joc2dfcHJpdl90b19ncHJpdihwcml2KTsKKwlzdHJ1Y3QgdXNiaHNnX3VlcCAqZGNwID0gdXNiaHNnX2dwcml2X3RvX2RjcChncHJpdik7CisJc3RydWN0IHVzYmhzX3BpcGUgKnBpcGUgPSB1c2Joc2dfdWVwX3RvX3BpcGUoZGNwKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB1c2Joc2dfZ3ByaXZfdG9fZGV2KGdwcml2KTsKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0IGN0cmw7CisJc3RydWN0IHVzYmhzZ19yZWNpcF9oYW5kbGUgKnJlY2lwX2hhbmRsZXIgPSBOVUxMOworCWludCBzdGFnZSA9IHVzYmhzX3N0YXR1c19nZXRfY3RybF9zdGFnZShpcnFfc3RhdGUpOworCWludCByZXQgPSAwOworCisJZGV2X2RiZyhkZXYsICJzdGFnZSA9ICVkXG4iLCBzdGFnZSk7CisKKwkvKgorCSAqIHNlZSBNYW51YWwKKwkgKgorCSAqICAiT3BlcmF0aW9uIgorCSAqICAtICJJbnRlcnJ1cHQgRnVuY3Rpb24iCisJICogICAgLSAiQ29udHJvbCBUcmFuc2ZlciBTdGFnZSBUcmFuc2l0aW9uIEludGVycnVwdCIKKwkgKiAgICAgIC0gRmlnLiAiQ29udHJvbCBUcmFuc2ZlciBTdGFnZSBUcmFuc2l0aW9ucyIKKwkgKi8KKworCXN3aXRjaCAoc3RhZ2UpIHsKKwljYXNlIFJFQURfREFUQV9TVEFHRToKKwkJZGNwLT5oYW5kbGVyID0gJnVzYmhzZ19oYW5kbGVyX3NlbmRfY3RybDsKKwkJYnJlYWs7CisJY2FzZSBXUklURV9EQVRBX1NUQUdFOgorCQlkY3AtPmhhbmRsZXIgPSAmdXNiaHNnX2hhbmRsZXJfcmVjdl9jdHJsOworCQlicmVhazsKKwljYXNlIE5PREFUQV9TVEFUVVNfU1RBR0U6CisJCWRjcC0+aGFuZGxlciA9ICZ1c2Joc2dfaGFuZGxlcl9jdHJsX3N0YWdlX2VuZDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKgorCSAqIGdldCB1c2IgcmVxdWVzdAorCSAqLworCXVzYmhzX3VzYnJlcV9nZXRfdmFsKHByaXYsICZjdHJsKTsKKworCXN3aXRjaCAoY3RybC5iUmVxdWVzdFR5cGUgJiBVU0JfVFlQRV9NQVNLKSB7CisJY2FzZSBVU0JfVFlQRV9TVEFOREFSRDoKKwkJc3dpdGNoIChjdHJsLmJSZXF1ZXN0KSB7CisJCWNhc2UgVVNCX1JFUV9DTEVBUl9GRUFUVVJFOgorCQkJcmVjaXBfaGFuZGxlciA9ICZyZXFfY2xlYXJfZmVhdHVyZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyoKKwkgKiBzZXR1cCBzdGFnZSAvIHJ1biByZWNpcAorCSAqLworCWlmIChyZWNpcF9oYW5kbGVyKQorCQlyZXQgPSB1c2Joc2dfcmVjaXBfcnVuX2hhbmRsZShwcml2LCByZWNpcF9oYW5kbGVyLCAmY3RybCk7CisJZWxzZQorCQlyZXQgPSBncHJpdi0+ZHJpdmVyLT5zZXR1cCgmZ3ByaXYtPmdhZGdldCwgJmN0cmwpOworCisJaWYgKHJldCA8IDApCisJCXVzYmhzX2ZpZm9fc3RhbGwocGlwZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHVzYmhzZ19pcnFfZW1wdHkoc3RydWN0IHVzYmhzX3ByaXYgKnByaXYsCisJCQkgICAgc3RydWN0IHVzYmhzX2lycV9zdGF0ZSAqaXJxX3N0YXRlKQoreworCXN0cnVjdCB1c2Joc2dfZ3ByaXYgKmdwcml2ID0gdXNiaHNnX3ByaXZfdG9fZ3ByaXYocHJpdik7CisJc3RydWN0IHVzYmhzZ191ZXAgKnVlcDsKKwlzdHJ1Y3QgdXNiaHNfcGlwZSAqcGlwZTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB1c2Joc2dfZ3ByaXZfdG9fZGV2KGdwcml2KTsKKwlpbnQgaSwgcmV0OworCisJaWYgKCFpcnFfc3RhdGUtPmJlbXBzdHMpIHsKKwkJZGV2X2VycihkZXYsICJkZWJ1ZyAlcyAhIVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkZXZfZGJnKGRldiwgImlycSBlbXB0eSBbMHglMDR4XVxuIiwgaXJxX3N0YXRlLT5iZW1wc3RzKTsKKworCS8qCisJICogc2VhcmNoIGludGVycnVwdGVkICJwaXBlIgorCSAqIG5vdCAidWVwIi4KKwkgKi8KKwl1c2Joc19mb3JfZWFjaF9waXBlX3dpdGhfZGNwKHBpcGUsIHByaXYsIGkpIHsKKwkJaWYgKCEoaXJxX3N0YXRlLT5iZW1wc3RzICYgKDEgPDwgaSkpKQorCQkJY29udGludWU7CisKKwkJdWVwCT0gdXNiaHNnX3BpcGVfdG9fdWVwKHBpcGUpOworCQlyZXQJPSB1c2Joc2dfcXVldWVfaGFuZGxlKHVlcCk7CisJCWlmIChyZXQgPCAwKQorCQkJZGV2X2VycihkZXYsICJzZW5kIGVycm9yICVkIDogJWRcbiIsIGksIHJldCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXNiaHNnX2lycV9yZWFkeShzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdiwKKwkJCSAgICBzdHJ1Y3QgdXNiaHNfaXJxX3N0YXRlICppcnFfc3RhdGUpCit7CisJc3RydWN0IHVzYmhzZ19ncHJpdiAqZ3ByaXYgPSB1c2Joc2dfcHJpdl90b19ncHJpdihwcml2KTsKKwlzdHJ1Y3QgdXNiaHNnX3VlcCAqdWVwOworCXN0cnVjdCB1c2Joc19waXBlICpwaXBlOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHVzYmhzZ19ncHJpdl90b19kZXYoZ3ByaXYpOworCWludCBpLCByZXQ7CisKKwlpZiAoIWlycV9zdGF0ZS0+YnJkeXN0cykgeworCQlkZXZfZXJyKGRldiwgImRlYnVnICVzICEhXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlPOworCX0KKworCWRldl9kYmcoZGV2LCAiaXJxIHJlYWR5IFsweCUwNHhdXG4iLCBpcnFfc3RhdGUtPmJyZHlzdHMpOworCisJLyoKKwkgKiBzZWFyY2ggaW50ZXJydXB0ZWQgInBpcGUiCisJICogbm90ICJ1ZXAiLgorCSAqLworCXVzYmhzX2Zvcl9lYWNoX3BpcGVfd2l0aF9kY3AocGlwZSwgcHJpdiwgaSkgeworCQlpZiAoIShpcnFfc3RhdGUtPmJyZHlzdHMgJiAoMSA8PCBpKSkpCisJCQljb250aW51ZTsKKworCQl1ZXAJPSB1c2Joc2dfcGlwZV90b191ZXAocGlwZSk7CisJCXJldAk9IHVzYmhzZ19xdWV1ZV9oYW5kbGUodWVwKTsKKwkJaWYgKHJldCA8IDApCisJCQlkZXZfZXJyKGRldiwgInJlY2VpdmUgZXJyb3IgJWQgOiAlZFxuIiwgaSwgcmV0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqCisgKgkJdXNiX2RjcF9vcHMKKyAqCisgKi8KK3N0YXRpYyBpbnQgdXNiaHNnX2RjcF9lbmFibGUoc3RydWN0IHVzYmhzZ191ZXAgKnVlcCkKK3sKKwlzdHJ1Y3QgdXNiaHNnX2dwcml2ICpncHJpdiA9IHVzYmhzZ191ZXBfdG9fZ3ByaXYodWVwKTsKKwlzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdiA9IHVzYmhzZ19ncHJpdl90b19wcml2KGdwcml2KTsKKwlzdHJ1Y3QgdXNiaHNfcGlwZSAqcGlwZTsKKworCS8qCisJICoqKioqKioqKiAgYXNzdW1lIHVuZGVyIHNwaW4gbG9jayAgKioqKioqKioqCisJICovCisKKwlwaXBlID0gdXNiaHNfZGNwX21hbGxvYyhwcml2KTsKKwlpZiAoIXBpcGUpCisJCXJldHVybiAtRUlPOworCisJdWVwLT5waXBlCQk9IHBpcGU7CisJdWVwLT5waXBlLT5tb2RfcHJpdmF0ZQk9IHVlcDsKKwlJTklUX0xJU1RfSEVBRCgmdWVwLT5saXN0KTsKKworCXJldHVybiAwOworfQorCisjZGVmaW5lIHVzYmhzZ19kY3BfZGlzYWJsZSB1c2Joc2dfcGlwZV9kaXNhYmxlCitzdGF0aWMgaW50IHVzYmhzZ19waXBlX2Rpc2FibGUoc3RydWN0IHVzYmhzZ191ZXAgKnVlcCkKK3sKKwlzdHJ1Y3QgdXNiaHNfcGlwZSAqcGlwZSA9IHVzYmhzZ191ZXBfdG9fcGlwZSh1ZXApOworCXN0cnVjdCB1c2Joc2dfcmVxdWVzdCAqdXJlcTsKKwlpbnQgZGlzYWJsZSA9IDA7CisKKwkvKgorCSAqKioqKioqKiogIGFzc3VtZSB1bmRlciBzcGluIGxvY2sgICoqKioqKioqKgorCSAqLworCisJdXNiaHNfZmlmb19kaXNhYmxlKHBpcGUpOworCisJLyoKKwkgKiBkaXNhYmxlIHBpcGUgaXJxCisJICovCisJdXNiaHNnX2lycV9lbXB0eV9jdHJsKHVlcCwgZGlzYWJsZSk7CisJdXNiaHNnX2lycV9yZWFkeV9jdHJsKHVlcCwgZGlzYWJsZSk7CisKKwl3aGlsZSAoMSkgeworCQl1cmVxID0gdXNiaHNnX3F1ZXVlX2dldCh1ZXApOworCQlpZiAoIXVyZXEpCisJCQlicmVhazsKKworCQl1c2Joc2dfcXVldWVfcG9wKHVlcCwgdXJlcSwgLUVDT05OUkVTRVQpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1c2Joc2dfdWVwX2luaXQoc3RydWN0IHVzYmhzZ19ncHJpdiAqZ3ByaXYpCit7CisJaW50IGk7CisJc3RydWN0IHVzYmhzZ191ZXAgKnVlcDsKKworCXVzYmhzZ19mb3JfZWFjaF91ZXBfd2l0aF9kY3AodWVwLCBncHJpdiwgaSkKKwkJdWVwLT5waXBlID0gTlVMTDsKK30KKworLyoKKyAqCisgKgkJdXNiX2VwX29wcworICoKKyAqLworc3RhdGljIGludCB1c2Joc2dfZXBfZW5hYmxlKHN0cnVjdCB1c2JfZXAgKmVwLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYykKK3sKKwlzdHJ1Y3QgdXNiaHNnX3VlcCAqdWVwICAgPSB1c2Joc2dfZXBfdG9fdWVwKGVwKTsKKwlzdHJ1Y3QgdXNiaHNnX2dwcml2ICpncHJpdiA9IHVzYmhzZ191ZXBfdG9fZ3ByaXYodWVwKTsKKwlzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdiA9IHVzYmhzZ19ncHJpdl90b19wcml2KGdwcml2KTsKKwlzdHJ1Y3QgdXNiaHNfcGlwZSAqcGlwZTsKKwlzcGlubG9ja190ICpsb2NrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IC1FSU87CisKKwkvKgorCSAqIGlmIGl0IGFscmVhZHkgaGF2ZSBwaXBlLAorCSAqIG5vdGhpbmcgdG8gZG8KKwkgKi8KKwlpZiAodWVwLT5waXBlKQorCQlyZXR1cm4gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKiAgc3BpbiBsb2NrICoqKioqKioqKioqKioqKioqKioqLworCWxvY2sgPSB1c2Joc2dfdHJ5bG9jayhncHJpdiwgJmZsYWdzKTsKKworCXBpcGUgPSB1c2Joc19waXBlX21hbGxvYyhwcml2LCBkZXNjKTsKKwlpZiAocGlwZSkgeworCQl1ZXAtPnBpcGUJCT0gcGlwZTsKKwkJcGlwZS0+bW9kX3ByaXZhdGUJPSB1ZXA7CisJCUlOSVRfTElTVF9IRUFEKCZ1ZXAtPmxpc3QpOworCisJCWlmICh1c2JfZW5kcG9pbnRfZGlyX2luKGRlc2MpKQorCQkJdWVwLT5oYW5kbGVyID0gJnVzYmhzZ19oYW5kbGVyX3NlbmRfcGFja2V0OworCQllbHNlCisJCQl1ZXAtPmhhbmRsZXIgPSAmdXNiaHNnX2hhbmRsZXJfcmVjdl9wYWNrZXQ7CisKKwkJcmV0ID0gMDsKKwl9CisKKwl1c2Joc2dfdW5sb2NrKGxvY2ssICZmbGFncyk7CisJLyoqKioqKioqKioqKioqKioqKioqICBzcGluIHVubG9jayAqKioqKioqKioqKioqKioqKiovCisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHVzYmhzZ19lcF9kaXNhYmxlKHN0cnVjdCB1c2JfZXAgKmVwKQoreworCXN0cnVjdCB1c2Joc2dfdWVwICp1ZXAgPSB1c2Joc2dfZXBfdG9fdWVwKGVwKTsKKwlzdHJ1Y3QgdXNiaHNnX2dwcml2ICpncHJpdiA9IHVzYmhzZ191ZXBfdG9fZ3ByaXYodWVwKTsKKwlzcGlubG9ja190ICpsb2NrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKworCS8qKioqKioqKioqKioqKioqKioqKiAgc3BpbiBsb2NrICoqKioqKioqKioqKioqKioqKioqLworCWxvY2sgPSB1c2Joc2dfdHJ5bG9jayhncHJpdiwgJmZsYWdzKTsKKworCXJldCA9IHVzYmhzZ19waXBlX2Rpc2FibGUodWVwKTsKKworCXVzYmhzZ191bmxvY2sobG9jaywgJmZsYWdzKTsKKwkvKioqKioqKioqKioqKioqKioqKiogIHNwaW4gdW5sb2NrICoqKioqKioqKioqKioqKioqKi8KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnVzYmhzZ19lcF9hbGxvY19yZXF1ZXN0KHN0cnVjdCB1c2JfZXAgKmVwLAorCQkJCQkJICAgZ2ZwX3QgZ2ZwX2ZsYWdzKQoreworCXN0cnVjdCB1c2Joc2dfcmVxdWVzdCAqdXJlcTsKKworCXVyZXEgPSBremFsbG9jKHNpemVvZiAqdXJlcSwgZ2ZwX2ZsYWdzKTsKKwlpZiAoIXVyZXEpCisJCXJldHVybiBOVUxMOworCisJSU5JVF9MSVNUX0hFQUQoJnVyZXEtPm5vZGUpOworCXJldHVybiAmdXJlcS0+cmVxOworfQorCitzdGF0aWMgdm9pZCB1c2Joc2dfZXBfZnJlZV9yZXF1ZXN0KHN0cnVjdCB1c2JfZXAgKmVwLAorCQkJCSAgIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCB1c2Joc2dfcmVxdWVzdCAqdXJlcSA9IHVzYmhzZ19yZXFfdG9fdXJlcShyZXEpOworCisJV0FSTl9PTighbGlzdF9lbXB0eSgmdXJlcS0+bm9kZSkpOworCWtmcmVlKHVyZXEpOworfQorCitzdGF0aWMgaW50IHVzYmhzZ19lcF9xdWV1ZShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEsCisJCQkgIGdmcF90IGdmcF9mbGFncykKK3sKKwlzdHJ1Y3QgdXNiaHNnX3VlcCAqdWVwID0gdXNiaHNnX2VwX3RvX3VlcChlcCk7CisJc3RydWN0IHVzYmhzZ19ncHJpdiAqZ3ByaXYgPSB1c2Joc2dfdWVwX3RvX2dwcml2KHVlcCk7CisJc3RydWN0IHVzYmhzZ19yZXF1ZXN0ICp1cmVxID0gdXNiaHNnX3JlcV90b191cmVxKHJlcSk7CisJc3RydWN0IHVzYmhzX3BpcGUgKnBpcGUgPSB1c2Joc2dfdWVwX3RvX3BpcGUodWVwKTsKKwlzcGlubG9ja190ICpsb2NrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwkvKgorCSAqIENBVVRJT04gWyplbmRwb2ludCBxdWV1ZSpdCisJICoKKwkgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGZyb20gdXNiX3JlcXVlc3QgOjogY29tcGxldGUKKwkgKiBvciB1c2IgZHJpdmVyIHRpbWluZy4KKwkgKiBJZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHVzYl9yZXF1ZXN0IDo6IGNvbXBsZXRlLAorCSAqIGl0IGlzIGFscmVhZHkgdW5kZXIgc3BpbmxvY2sgb24gdGhpcyBkcml2ZXIuCisJICogYnV0IGl0IGlzIGNhbGxlZCBmcm0gdXNiIGRyaXZlciwgdGhpcyBmdW5jdGlvbiBzaG91bGQgY2FsbCBzcGlubG9jay4KKwkgKgorCSAqIFRoaXMgZnVuY3Rpb24gaXMgdXNpbmcgdXNic2hnX3RyeWxvY2sgdG8gc29sdmUgdGhpcyBpc3N1ZS4KKwkgKiBpZiAiaXNfbG9ja2VkIiBpcyAxLCB0aGlzIG1lYW4gdGhpcyBmdW5jdGlvbiBsb2NrIGl0LgorCSAqIGJ1dCBpZiBpdCBpcyAwLCB0aGlzIG1lYW4gaXQgaXMgYWxyZWFkeSB1bmRlciBzcGluIGxvY2suCisJICogc2VlIGFsc28KKwkgKiAgIENBVVRJT04gWypxdWV1ZSBoYW5kbGVyKl0KKwkgKiAgIENBVVRJT04gWypyZXF1ZXN0IGNvbXBsZXRlKl0KKwkgKi8KKworCS8qKioqKioqKioqKioqKioqKioqKiAgc3BpbiBsb2NrICoqKioqKioqKioqKioqKioqKioqLworCWxvY2sgPSB1c2Joc2dfdHJ5bG9jayhncHJpdiwgJmZsYWdzKTsKKworCS8qIHBhcmFtIGNoZWNrICovCisJaWYgKHVzYmhzZ19pc19ub3RfY29ubmVjdGVkKGdwcml2KQl8fAorCSAgICB1bmxpa2VseSghZ3ByaXYtPmRyaXZlcikJCXx8CisJICAgIHVubGlrZWx5KCFwaXBlKSkKKwkJcmV0ID0gLUVTSFVURE9XTjsKKwllbHNlCisJCXVzYmhzZ19xdWV1ZV9wdXNoKHVlcCwgdXJlcSk7CisKKwl1c2Joc2dfdW5sb2NrKGxvY2ssICZmbGFncyk7CisJLyoqKioqKioqKioqKioqKioqKioqICBzcGluIHVubG9jayAqKioqKioqKioqKioqKioqKiovCisKKwl1c2Joc2dfcXVldWVfcHJlcGFyZSh1ZXApOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB1c2Joc2dfZXBfZGVxdWV1ZShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IHVzYmhzZ191ZXAgKnVlcCA9IHVzYmhzZ19lcF90b191ZXAoZXApOworCXN0cnVjdCB1c2Joc2dfcmVxdWVzdCAqdXJlcSA9IHVzYmhzZ19yZXFfdG9fdXJlcShyZXEpOworCXN0cnVjdCB1c2Joc2dfZ3ByaXYgKmdwcml2ID0gdXNiaHNnX3VlcF90b19ncHJpdih1ZXApOworCXNwaW5sb2NrX3QgKmxvY2s7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qCisJICogc2VlCisJICogICBDQVVUSU9OIFsqcXVldWUgaGFuZGxlcipdCisJICogICBDQVVUSU9OIFsqZW5kcG9pbnQgcXVldWUqXQorCSAqICAgQ0FVVElPTiBbKnJlcXVlc3QgY29tcGxldGUqXQorCSAqLworCisJLyoqKioqKioqKioqKioqKioqKioqICBzcGluIGxvY2sgKioqKioqKioqKioqKioqKioqKiovCisJbG9jayA9IHVzYmhzZ190cnlsb2NrKGdwcml2LCAmZmxhZ3MpOworCisJdXNiaHNnX3F1ZXVlX3BvcCh1ZXAsIHVyZXEsIC1FQ09OTlJFU0VUKTsKKworCXVzYmhzZ191bmxvY2sobG9jaywgJmZsYWdzKTsKKwkvKioqKioqKioqKioqKioqKioqKiogIHNwaW4gdW5sb2NrICoqKioqKioqKioqKioqKioqKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fdXNiaHNnX2VwX3NldF9oYWx0X3dlZGdlKHN0cnVjdCB1c2JfZXAgKmVwLCBpbnQgaGFsdCwgaW50IHdlZGdlKQoreworCXN0cnVjdCB1c2Joc2dfdWVwICp1ZXAgPSB1c2Joc2dfZXBfdG9fdWVwKGVwKTsKKwlzdHJ1Y3QgdXNiaHNfcGlwZSAqcGlwZSA9IHVzYmhzZ191ZXBfdG9fcGlwZSh1ZXApOworCXN0cnVjdCB1c2Joc2dfZ3ByaXYgKmdwcml2ID0gdXNiaHNnX3VlcF90b19ncHJpdih1ZXApOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHVzYmhzZ19ncHJpdl90b19kZXYoZ3ByaXYpOworCXNwaW5sb2NrX3QgKmxvY2s7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gLUVBR0FJTjsKKworCS8qCisJICogc2VlCisJICogICBDQVVUSU9OIFsqcXVldWUgaGFuZGxlcipdCisJICogICBDQVVUSU9OIFsqZW5kcG9pbnQgcXVldWUqXQorCSAqICAgQ0FVVElPTiBbKnJlcXVlc3QgY29tcGxldGUqXQorCSAqLworCisJLyoqKioqKioqKioqKioqKioqKioqICBzcGluIGxvY2sgKioqKioqKioqKioqKioqKioqKiovCisJbG9jayA9IHVzYmhzZ190cnlsb2NrKGdwcml2LCAmZmxhZ3MpOworCWlmICghdXNiaHNnX3F1ZXVlX2dldCh1ZXApKSB7CisKKwkJZGV2X2RiZyhkZXYsICJzZXQgaGFsdCAlZCAocGlwZSAlZClcbiIsCisJCQloYWx0LCB1c2Joc19waXBlX251bWJlcihwaXBlKSk7CisKKwkJaWYgKGhhbHQpCisJCQl1c2Joc19maWZvX3N0YWxsKHBpcGUpOworCQllbHNlCisJCQl1c2Joc19maWZvX2Rpc2FibGUocGlwZSk7CisKKwkJaWYgKGhhbHQgJiYgd2VkZ2UpCisJCQl1c2Joc2dfc3RhdHVzX3NldChncHJpdiwgVVNCSFNHX1NUQVRVU19XRURHRSk7CisJCWVsc2UKKwkJCXVzYmhzZ19zdGF0dXNfY2xyKGdwcml2LCBVU0JIU0dfU1RBVFVTX1dFREdFKTsKKworCQlyZXQgPSAwOworCX0KKworCXVzYmhzZ191bmxvY2sobG9jaywgJmZsYWdzKTsKKwkvKioqKioqKioqKioqKioqKioqKiogIHNwaW4gdW5sb2NrICoqKioqKioqKioqKioqKioqKi8KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdXNiaHNnX2VwX3NldF9oYWx0KHN0cnVjdCB1c2JfZXAgKmVwLCBpbnQgdmFsdWUpCit7CisJcmV0dXJuIF9fdXNiaHNnX2VwX3NldF9oYWx0X3dlZGdlKGVwLCB2YWx1ZSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgdXNiaHNnX2VwX3NldF93ZWRnZShzdHJ1Y3QgdXNiX2VwICplcCkKK3sKKwlyZXR1cm4gX191c2Joc2dfZXBfc2V0X2hhbHRfd2VkZ2UoZXAsIDEsIDEpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9lcF9vcHMgdXNiaHNnX2VwX29wcyA9IHsKKwkuZW5hYmxlCQk9IHVzYmhzZ19lcF9lbmFibGUsCisJLmRpc2FibGUJPSB1c2Joc2dfZXBfZGlzYWJsZSwKKworCS5hbGxvY19yZXF1ZXN0CT0gdXNiaHNnX2VwX2FsbG9jX3JlcXVlc3QsCisJLmZyZWVfcmVxdWVzdAk9IHVzYmhzZ19lcF9mcmVlX3JlcXVlc3QsCisKKwkucXVldWUJCT0gdXNiaHNnX2VwX3F1ZXVlLAorCS5kZXF1ZXVlCT0gdXNiaHNnX2VwX2RlcXVldWUsCisKKwkuc2V0X2hhbHQJPSB1c2Joc2dfZXBfc2V0X2hhbHQsCisJLnNldF93ZWRnZQk9IHVzYmhzZ19lcF9zZXRfd2VkZ2UsCit9OworCisvKgorICoJCXVzYiBtb2R1bGUgc3RhcnQvZW5kCisgKi8KK3N0YXRpYyBpbnQgdXNiaHNnX3RyeV9zdGFydChzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdiwgdTMyIHN0YXR1cykKK3sKKwlzdHJ1Y3QgdXNiaHNnX2dwcml2ICpncHJpdiA9IHVzYmhzZ19wcml2X3RvX2dwcml2KHByaXYpOworCXN0cnVjdCB1c2Joc2dfdWVwICpkY3AgPSB1c2Joc2dfZ3ByaXZfdG9fZGNwKGdwcml2KTsKKwlzdHJ1Y3QgdXNiaHNfbW9kICptb2QgPSB1c2Joc19tb2RfZ2V0X2N1cnJlbnQocHJpdik7CisJc3RydWN0IGRldmljZSAqZGV2ID0gdXNiaHNfcHJpdl90b19kZXYocHJpdik7CisJc3BpbmxvY2tfdCAqbG9jazsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyoqKioqKioqKioqKioqKioqKioqICBzcGluIGxvY2sgKioqKioqKioqKioqKioqKioqKiovCisJbG9jayA9IHVzYmhzZ190cnlsb2NrKGdwcml2LCAmZmxhZ3MpOworCisJLyoKKwkgKiBlbmFibGUgaW50ZXJydXB0IGFuZCBzeXN0ZW1zIGlmIHJlYWR5CisJICovCisJdXNiaHNnX3N0YXR1c19zZXQoZ3ByaXYsIHN0YXR1cyk7CisJaWYgKCEodXNiaHNnX3N0YXR1c19oYXMoZ3ByaXYsIFVTQkhTR19TVEFUVVNfU1RBUlRFRCkgJiYKKwkgICAgICB1c2Joc2dfc3RhdHVzX2hhcyhncHJpdiwgVVNCSFNHX1NUQVRVU19SRUdJU1RFUkQpKSkKKwkJZ290byB1c2Joc2dfdHJ5X3N0YXJ0X3VubG9jazsKKworCWRldl9kYmcoZGV2LCAic3RhcnQgZ2FkZ2V0XG4iKTsKKworCS8qCisJICogcGlwZSBpbml0aWFsaXplIGFuZCBlbmFibGUgRENQCisJICovCisJdXNiaHNfcGlwZV9pbml0KHByaXYpOworCXVzYmhzZ191ZXBfaW5pdChncHJpdik7CisJdXNiaHNnX2RjcF9lbmFibGUoZGNwKTsKKworCS8qCisJICogc3lzdGVtIGNvbmZpZyBlbmJsZQorCSAqIC0gSEkgc3BlZWQKKwkgKiAtIGZ1bmN0aW9uCisJICogLSB1c2IgbW9kdWxlCisJICovCisJdXNiaHNfc3lzX2hpc3BlZWRfY3RybChwcml2LCAxKTsKKwl1c2Joc19zeXNfZnVuY3Rpb25fY3RybChwcml2LCAxKTsKKwl1c2Joc19zeXNfdXNiX2N0cmwocHJpdiwgMSk7CisKKwkvKgorCSAqIGVuYWJsZSBpcnEgY2FsbGJhY2sKKwkgKi8KKwltb2QtPmlycV9kZXZfc3RhdGUJPSB1c2Joc2dfaXJxX2Rldl9zdGF0ZTsKKwltb2QtPmlycV9jdHJsX3N0YWdlCT0gdXNiaHNnX2lycV9jdHJsX3N0YWdlOworCW1vZC0+aXJxX2VtcHR5CQk9IHVzYmhzZ19pcnFfZW1wdHk7CisJbW9kLT5pcnFfcmVhZHkJCT0gdXNiaHNnX2lycV9yZWFkeTsKKwltb2QtPmlycV9iZW1wc3RzCT0gMDsKKwltb2QtPmlycV9icmR5c3RzCT0gMDsKKwl1c2Joc19pcnFfY2FsbGJhY2tfdXBkYXRlKHByaXYsIG1vZCk7CisKK3VzYmhzZ190cnlfc3RhcnRfdW5sb2NrOgorCXVzYmhzZ191bmxvY2sobG9jaywgJmZsYWdzKTsKKwkvKioqKioqKioqKioqKioqKioqKiogIHNwaW4gdW5sb2NrICoqKioqKioqKioqKioqKioqKioqLworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXNiaHNnX3RyeV9zdG9wKHN0cnVjdCB1c2Joc19wcml2ICpwcml2LCB1MzIgc3RhdHVzKQoreworCXN0cnVjdCB1c2Joc2dfZ3ByaXYgKmdwcml2ID0gdXNiaHNnX3ByaXZfdG9fZ3ByaXYocHJpdik7CisJc3RydWN0IHVzYmhzX21vZCAqbW9kID0gdXNiaHNfbW9kX2dldF9jdXJyZW50KHByaXYpOworCXN0cnVjdCB1c2Joc2dfdWVwICpkY3AgPSB1c2Joc2dfZ3ByaXZfdG9fZGNwKGdwcml2KTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB1c2Joc19wcml2X3RvX2Rldihwcml2KTsKKwlzcGlubG9ja190ICpsb2NrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKioqKioqKioqKioqKioqKioqKiogIHNwaW4gbG9jayAqKioqKioqKioqKioqKioqKioqKi8KKwlsb2NrID0gdXNiaHNnX3RyeWxvY2soZ3ByaXYsICZmbGFncyk7CisKKwkvKgorCSAqIGRpc2FibGUgaW50ZXJydXB0IGFuZCBzeXN0ZW1zIGlmIDFzdCB0cnkKKwkgKi8KKwl1c2Joc2dfc3RhdHVzX2NscihncHJpdiwgc3RhdHVzKTsKKwlpZiAoIXVzYmhzZ19zdGF0dXNfaGFzKGdwcml2LCBVU0JIU0dfU1RBVFVTX1NUQVJURUQpICYmCisJICAgICF1c2Joc2dfc3RhdHVzX2hhcyhncHJpdiwgVVNCSFNHX1NUQVRVU19SRUdJU1RFUkQpKQorCQlnb3RvIHVzYmhzZ190cnlfc3RvcF91bmxvY2s7CisKKwkvKiBkaXNhYmxlIGFsbCBpcnEgKi8KKwltb2QtPmlycV9kZXZfc3RhdGUJPSBOVUxMOworCW1vZC0+aXJxX2N0cmxfc3RhZ2UJPSBOVUxMOworCW1vZC0+aXJxX2VtcHR5CQk9IE5VTEw7CisJbW9kLT5pcnFfcmVhZHkJCT0gTlVMTDsKKwltb2QtPmlycV9iZW1wc3RzCT0gMDsKKwltb2QtPmlycV9icmR5c3RzCT0gMDsKKwl1c2Joc19pcnFfY2FsbGJhY2tfdXBkYXRlKHByaXYsIG1vZCk7CisKKwl1c2Joc2dfZGNwX2Rpc2FibGUoZGNwKTsKKworCWdwcml2LT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKKworCS8qIGRpc2FibGUgc3lzICovCisJdXNiaHNfc3lzX2hpc3BlZWRfY3RybChwcml2LCAwKTsKKwl1c2Joc19zeXNfZnVuY3Rpb25fY3RybChwcml2LCAwKTsKKwl1c2Joc19zeXNfdXNiX2N0cmwocHJpdiwgMCk7CisKKwl1c2Joc2dfdW5sb2NrKGxvY2ssICZmbGFncyk7CisJLyoqKioqKioqKioqKioqKioqKioqICBzcGluIHVubG9jayAqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChncHJpdi0+ZHJpdmVyICYmCisJICAgIGdwcml2LT5kcml2ZXItPmRpc2Nvbm5lY3QpCisJCWdwcml2LT5kcml2ZXItPmRpc2Nvbm5lY3QoJmdwcml2LT5nYWRnZXQpOworCisJZGV2X2RiZyhkZXYsICJzdG9wIGdhZGdldFxuIik7CisKKwlyZXR1cm4gMDsKKwordXNiaHNnX3RyeV9zdG9wX3VubG9jazoKKwl1c2Joc2dfdW5sb2NrKGxvY2ssICZmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqCisgKgkJbGludXggdXNiIGZ1bmN0aW9uCisgKgorICovCitzdHJ1Y3QgdXNiaHNnX2dwcml2ICp0aGVfY29udHJvbGxlcjsKK2ludCB1c2JfZ2FkZ2V0X3Byb2JlX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlciwKKwkJCSAgICBpbnQgKCpiaW5kKShzdHJ1Y3QgdXNiX2dhZGdldCAqKSkKK3sKKwlzdHJ1Y3QgdXNiaHNnX2dwcml2ICpncHJpdiA9IHRoZV9jb250cm9sbGVyOworCXN0cnVjdCB1c2Joc19wcml2ICpwcml2OworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlpbnQgcmV0OworCisJaWYgKCFiaW5kCQl8fAorCSAgICAhZHJpdmVyCQl8fAorCSAgICAhZHJpdmVyLT5zZXR1cAl8fAorCSAgICBkcml2ZXItPnNwZWVkICE9IFVTQl9TUEVFRF9ISUdIKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWdwcml2KQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoZ3ByaXYtPmRyaXZlcikKKwkJcmV0dXJuIC1FQlVTWTsKKworCWRldiAgPSB1c2Joc2dfZ3ByaXZfdG9fZGV2KGdwcml2KTsKKwlwcml2ID0gdXNiaHNnX2dwcml2X3RvX3ByaXYoZ3ByaXYpOworCisJLyogZmlyc3QgaG9vayB1cCB0aGUgZHJpdmVyIC4uLiAqLworCWdwcml2LT5kcml2ZXIgPSBkcml2ZXI7CisJZ3ByaXYtPmdhZGdldC5kZXYuZHJpdmVyID0gJmRyaXZlci0+ZHJpdmVyOworCisJcmV0ID0gZGV2aWNlX2FkZCgmZ3ByaXYtPmdhZGdldC5kZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJkZXZpY2VfYWRkIGVycm9yICVkXG4iLCByZXQpOworCQlnb3RvIGFkZF9mYWlsOworCX0KKworCXJldCA9IGJpbmQoJmdwcml2LT5nYWRnZXQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJiaW5kIHRvIGRyaXZlciAlcyBlcnJvciAlZFxuIiwKKwkJCWRyaXZlci0+ZHJpdmVyLm5hbWUsIHJldCk7CisJCWdvdG8gYmluZF9mYWlsOworCX0KKworCWRldl9kYmcoZGV2LCAiYmluZCAlc1xuIiwgZHJpdmVyLT5kcml2ZXIubmFtZSk7CisKKwlyZXR1cm4gdXNiaHNnX3RyeV9zdGFydChwcml2LCBVU0JIU0dfU1RBVFVTX1JFR0lTVEVSRCk7CisKK2JpbmRfZmFpbDoKKwlkZXZpY2VfZGVsKCZncHJpdi0+Z2FkZ2V0LmRldik7CithZGRfZmFpbDoKKwlncHJpdi0+ZHJpdmVyID0gTlVMTDsKKwlncHJpdi0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wodXNiX2dhZGdldF9wcm9iZV9kcml2ZXIpOworCitpbnQgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3sKKwlzdHJ1Y3QgdXNiaHNnX2dwcml2ICpncHJpdiA9IHRoZV9jb250cm9sbGVyOworCXN0cnVjdCB1c2Joc19wcml2ICpwcml2OworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHVzYmhzZ19ncHJpdl90b19kZXYoZ3ByaXYpOworCisJaWYgKCFncHJpdikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoIWRyaXZlcgkJfHwKKwkgICAgIWRyaXZlci0+dW5iaW5kCXx8CisJICAgIGRyaXZlciAhPSBncHJpdi0+ZHJpdmVyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRldiAgPSB1c2Joc2dfZ3ByaXZfdG9fZGV2KGdwcml2KTsKKwlwcml2ID0gdXNiaHNnX2dwcml2X3RvX3ByaXYoZ3ByaXYpOworCisJdXNiaHNnX3RyeV9zdG9wKHByaXYsIFVTQkhTR19TVEFUVVNfUkVHSVNURVJEKTsKKwlkZXZpY2VfZGVsKCZncHJpdi0+Z2FkZ2V0LmRldik7CisJZ3ByaXYtPmRyaXZlciA9IE5VTEw7CisKKwlpZiAoZHJpdmVyLT5kaXNjb25uZWN0KQorCQlkcml2ZXItPmRpc2Nvbm5lY3QoJmdwcml2LT5nYWRnZXQpOworCisJZHJpdmVyLT51bmJpbmQoJmdwcml2LT5nYWRnZXQpOworCWRldl9kYmcoZGV2LCAidW5iaW5kICVzXG4iLCBkcml2ZXItPmRyaXZlci5uYW1lKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKTsKKworLyoKKyAqCQl1c2IgZ2FkZ2V0IG9wcworICovCitzdGF0aWMgaW50IHVzYmhzZ19nZXRfZnJhbWUoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgdXNiaHNnX2dwcml2ICpncHJpdiA9IHVzYmhzZ19nYWRnZXRfdG9fZ3ByaXYoZ2FkZ2V0KTsKKwlzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdiA9IHVzYmhzZ19ncHJpdl90b19wcml2KGdwcml2KTsKKworCXJldHVybiB1c2Joc19mcmFtZV9nZXRfbnVtKHByaXYpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfb3BzIHVzYmhzZ19nYWRnZXRfb3BzID0geworCS5nZXRfZnJhbWUJCT0gdXNiaHNnX2dldF9mcmFtZSwKK307CisKK3N0YXRpYyBpbnQgdXNiaHNnX3N0YXJ0KHN0cnVjdCB1c2Joc19wcml2ICpwcml2KQoreworCXJldHVybiB1c2Joc2dfdHJ5X3N0YXJ0KHByaXYsIFVTQkhTR19TVEFUVVNfU1RBUlRFRCk7Cit9CisKK3N0YXRpYyBpbnQgdXNiaHNnX3N0b3Aoc3RydWN0IHVzYmhzX3ByaXYgKnByaXYpCit7CisJcmV0dXJuIHVzYmhzZ190cnlfc3RvcChwcml2LCBVU0JIU0dfU1RBVFVTX1NUQVJURUQpOworfQorCitpbnQgX19kZXZpbml0IHVzYmhzX21vZF9nYWRnZXRfcHJvYmUoc3RydWN0IHVzYmhzX3ByaXYgKnByaXYpCit7CisJc3RydWN0IHVzYmhzZ19ncHJpdiAqZ3ByaXY7CisJc3RydWN0IHVzYmhzZ191ZXAgKnVlcDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB1c2Joc19wcml2X3RvX2Rldihwcml2KTsKKwlpbnQgcGlwZV9zaXplID0gdXNiaHNfZ2V0X2RwYXJhbShwcml2LCBwaXBlX3NpemUpOworCWludCBpOworCisJZ3ByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiaHNnX2dwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFncHJpdikgeworCQlkZXZfZXJyKGRldiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBnYWRnZXQgcHJpdlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXVlcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2Joc2dfdWVwKSAqIHBpcGVfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1ZXApIHsKKwkJZGV2X2VycihkZXYsICJDb3VsZCBub3QgYWxsb2NhdGUgZXBcbiIpOworCQlnb3RvIHVzYmhzX21vZF9nYWRnZXRfcHJvYmVfZXJyX2dwcml2OworCX0KKworCS8qCisJICogQ0FVVElPTgorCSAqCisJICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWNjZXNzIHVzYiBtb2R1bGUgaGVyZS4KKwkgKiBEb24ndCBhY2Nlc3NlcyB0byBpdC4KKwkgKiBUaGUgYWNjZXNzZSB3aWxsIGJlIGVuYWJsZSBhZnRlciAidXNiaHNnX3N0YXJ0IgorCSAqLworCisJLyoKKwkgKiByZWdpc3RlciBpdHNlbGYKKwkgKi8KKwl1c2Joc19tb2RfcmVnaXN0ZXIocHJpdiwgJmdwcml2LT5tb2QsIFVTQkhTX0dBREdFVCk7CisKKwkvKiBpbml0IGdwcml2ICovCisJZ3ByaXYtPm1vZC5uYW1lCQk9ICJnYWRnZXQiOworCWdwcml2LT5tb2Quc3RhcnQJPSB1c2Joc2dfc3RhcnQ7CisJZ3ByaXYtPm1vZC5zdG9wCQk9IHVzYmhzZ19zdG9wOworCWdwcml2LT51ZXAJCT0gdWVwOworCWdwcml2LT51ZXBfc2l6ZQkJPSBwaXBlX3NpemU7CisJdXNiaHNnX3N0YXR1c19pbml0KGdwcml2KTsKKworCS8qCisJICogaW5pdCBnYWRnZXQKKwkgKi8KKwlkZXZpY2VfaW5pdGlhbGl6ZSgmZ3ByaXYtPmdhZGdldC5kZXYpOworCWRldl9zZXRfbmFtZSgmZ3ByaXYtPmdhZGdldC5kZXYsICJnYWRnZXQiKTsKKwlncHJpdi0+Z2FkZ2V0LmRldi5wYXJlbnQJPSBkZXY7CisJZ3ByaXYtPmdhZGdldC5uYW1lCQk9ICJyZW5lc2FzX3VzYmhzX3VkYyI7CisJZ3ByaXYtPmdhZGdldC5vcHMJCT0gJnVzYmhzZ19nYWRnZXRfb3BzOworCWdwcml2LT5nYWRnZXQuaXNfZHVhbHNwZWVkCT0gMTsKKworCUlOSVRfTElTVF9IRUFEKCZncHJpdi0+Z2FkZ2V0LmVwX2xpc3QpOworCisJLyoKKwkgKiBpbml0IHVzYl9lcAorCSAqLworCXVzYmhzZ19mb3JfZWFjaF91ZXBfd2l0aF9kY3AodWVwLCBncHJpdiwgaSkgeworCQl1ZXAtPmdwcml2CT0gZ3ByaXY7CisJCXNucHJpbnRmKHVlcC0+ZXBfbmFtZSwgRVBfTkFNRV9TSVpFLCAiZXAlZCIsIGkpOworCisJCXVlcC0+ZXAubmFtZQkJPSB1ZXAtPmVwX25hbWU7CisJCXVlcC0+ZXAub3BzCQk9ICZ1c2Joc2dfZXBfb3BzOworCQlJTklUX0xJU1RfSEVBRCgmdWVwLT5lcC5lcF9saXN0KTsKKwkJSU5JVF9MSVNUX0hFQUQoJnVlcC0+bGlzdCk7CisKKwkJLyogaW5pdCBEQ1AgKi8KKwkJaWYgKHVzYmhzZ19pc19kY3AodWVwKSkgeworCQkJZ3ByaXYtPmdhZGdldC5lcDAgPSAmdWVwLT5lcDsKKwkJCXVlcC0+ZXAubWF4cGFja2V0ID0gNjQ7CisJCX0KKwkJLyogaW5pdCBub3JtYWwgcGlwZSAqLworCQllbHNlIHsKKwkJCXVlcC0+ZXAubWF4cGFja2V0ID0gNTEyOworCQkJbGlzdF9hZGRfdGFpbCgmdWVwLT5lcC5lcF9saXN0LCAmZ3ByaXYtPmdhZGdldC5lcF9saXN0KTsKKwkJfQorCX0KKworCXRoZV9jb250cm9sbGVyID0gZ3ByaXY7CisKKwlkZXZfaW5mbyhkZXYsICJnYWRnZXQgcHJvYmVkXG4iKTsKKworCXJldHVybiAwOworCit1c2Joc19tb2RfZ2FkZ2V0X3Byb2JlX2Vycl9ncHJpdjoKKwlrZnJlZShncHJpdik7CisKKwlyZXR1cm4gLUVOT01FTTsKK30KKwordm9pZCBfX2RldmV4aXQgdXNiaHNfbW9kX2dhZGdldF9yZW1vdmUoc3RydWN0IHVzYmhzX3ByaXYgKnByaXYpCit7CisJc3RydWN0IHVzYmhzZ19ncHJpdiAqZ3ByaXYgPSB1c2Joc2dfcHJpdl90b19ncHJpdihwcml2KTsKKworCWtmcmVlKGdwcml2KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3JlbmVzYXNfdXNiaHMvcGlwZS5jIGIvZHJpdmVycy91c2IvcmVuZXNhc191c2Jocy9waXBlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM0NTIxYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3JlbmVzYXNfdXNiaHMvcGlwZS5jCkBAIC0wLDAgKzEsODc0IEBACisvKgorICogUmVuZXNhcyBVU0IgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBLdW5pbm9yaSBNb3JpbW90byA8a3VuaW5vcmkubW9yaW1vdG8uZ3hAcmVuZXNhcy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlICIuL2NvbW1vbi5oIgorI2luY2x1ZGUgIi4vcGlwZS5oIgorCisvKgorICoJCW1hY3JvcworICovCisjZGVmaW5lIHVzYmhzcF9wcml2X3RvX3BpcGVpbmZvKHByKQkoJihwciktPnBpcGVfaW5mbykKKyNkZWZpbmUgdXNiaHNwX3BpcGVfdG9fcHJpdihwKQkJKChwKS0+cHJpdikKKworI2RlZmluZSB1c2Joc3BfYWRkcl9vZmZzZXQocCkJKCh1c2Joc19waXBlX251bWJlcihwKSAtIDEpICogMikKKworI2RlZmluZSB1c2Joc3BfaXNfZGNwKHApCSgocCktPnByaXYtPnBpcGVfaW5mby5waXBlID09IChwKSkKKworI2RlZmluZSB1c2Joc3BfZmxhZ3Nfc2V0KHAsIGYpCSgocCktPmZsYWdzIHw9ICBVU0JIU19QSVBFX0ZMQUdTXyMjZikKKyNkZWZpbmUgdXNiaHNwX2ZsYWdzX2NscihwLCBmKQkoKHApLT5mbGFncyAmPSB+VVNCSFNfUElQRV9GTEFHU18jI2YpCisjZGVmaW5lIHVzYmhzcF9mbGFnc19oYXMocCwgZikJKChwKS0+ZmxhZ3MgJiAgIFVTQkhTX1BJUEVfRkxBR1NfIyNmKQorI2RlZmluZSB1c2Joc3BfZmxhZ3NfaW5pdChwKQlkbyB7KHApLT5mbGFncyA9IDA7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgdXNiaHNwX3R5cGUocCkJCSgocCktPnBpcGVfdHlwZSkKKyNkZWZpbmUgdXNiaHNwX3R5cGVfaXMocCwgdCkJKChwKS0+cGlwZV90eXBlID09IHQpCisKKy8qCisgKiBmb3IgZGVidWcKKyAqLworc3RhdGljIGNoYXIgKnVzYmhzcF9waXBlX25hbWVbXSA9IHsKKwlbVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTF0JPSAiRENQIiwKKwlbVVNCX0VORFBPSU5UX1hGRVJfQlVMS10JPSAiQlVMSyIsCisJW1VTQl9FTkRQT0lOVF9YRkVSX0lOVF0JCT0gIklOVCIsCisJW1VTQl9FTkRQT0lOVF9YRkVSX0lTT0NdCT0gIklTTyIsCit9OworCisvKgorICoJCXVzYiByZXF1ZXN0IGZ1bmN0aW9ucworICovCit2b2lkIHVzYmhzX3VzYnJlcV9nZXRfdmFsKHN0cnVjdCB1c2Joc19wcml2ICpwcml2LCBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpyZXEpCit7CisJdTE2IHZhbDsKKworCXZhbCA9IHVzYmhzX3JlYWQocHJpdiwgVVNCUkVRKTsKKwlyZXEtPmJSZXF1ZXN0CQk9ICh2YWwgPj4gOCkgJiAweEZGOworCXJlcS0+YlJlcXVlc3RUeXBlCT0gKHZhbCA+PiAwKSAmIDB4RkY7CisKKwlyZXEtPndWYWx1ZQk9IHVzYmhzX3JlYWQocHJpdiwgVVNCVkFMKTsKKwlyZXEtPndJbmRleAk9IHVzYmhzX3JlYWQocHJpdiwgVVNCSU5EWCk7CisJcmVxLT53TGVuZ3RoCT0gdXNiaHNfcmVhZChwcml2LCBVU0JMRU5HKTsKK30KKwordm9pZCB1c2Joc191c2JyZXFfc2V0X3ZhbChzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdiwgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqcmVxKQoreworCXVzYmhzX3dyaXRlKHByaXYsIFVTQlJFUSwgIChyZXEtPmJSZXF1ZXN0IDw8IDgpIHwgcmVxLT5iUmVxdWVzdFR5cGUpOworCXVzYmhzX3dyaXRlKHByaXYsIFVTQlZBTCwgIHJlcS0+d1ZhbHVlKTsKKwl1c2Joc193cml0ZShwcml2LCBVU0JJTkRYLCByZXEtPndJbmRleCk7CisJdXNiaHNfd3JpdGUocHJpdiwgVVNCTEVORywgcmVxLT53TGVuZ3RoKTsKK30KKworLyoKKyAqCQlEQ1BDVFIvUElQRW5DVFIgZnVuY3Rpb25zCisgKi8KK3N0YXRpYyB2b2lkIHVzYmhzcF9waXBlY3RybF9zZXQoc3RydWN0IHVzYmhzX3BpcGUgKnBpcGUsIHUxNiBtYXNrLCB1MTYgdmFsKQoreworCXN0cnVjdCB1c2Joc19wcml2ICpwcml2ID0gdXNiaHNwX3BpcGVfdG9fcHJpdihwaXBlKTsKKwlpbnQgb2Zmc2V0ID0gdXNiaHNwX2FkZHJfb2Zmc2V0KHBpcGUpOworCisJaWYgKHVzYmhzcF9pc19kY3AocGlwZSkpCisJCXVzYmhzX2JzZXQocHJpdiwgRENQQ1RSLCBtYXNrLCB2YWwpOworCWVsc2UKKwkJdXNiaHNfYnNldChwcml2LCBQSVBFbkNUUiArIG9mZnNldCwgbWFzaywgdmFsKTsKK30KKworc3RhdGljIHUxNiB1c2Joc3BfcGlwZWN0cmxfZ2V0KHN0cnVjdCB1c2Joc19waXBlICpwaXBlKQoreworCXN0cnVjdCB1c2Joc19wcml2ICpwcml2ID0gdXNiaHNwX3BpcGVfdG9fcHJpdihwaXBlKTsKKwlpbnQgb2Zmc2V0ID0gdXNiaHNwX2FkZHJfb2Zmc2V0KHBpcGUpOworCisJaWYgKHVzYmhzcF9pc19kY3AocGlwZSkpCisJCXJldHVybiB1c2Joc19yZWFkKHByaXYsIERDUENUUik7CisJZWxzZQorCQlyZXR1cm4gdXNiaHNfcmVhZChwcml2LCBQSVBFbkNUUiArIG9mZnNldCk7Cit9CisKKy8qCisgKgkJRENQL1BJUEUgZnVuY3Rpb25zCisgKi8KK3N0YXRpYyB2b2lkIF9fdXNiaHNwX3BpcGVfeHh4X3NldChzdHJ1Y3QgdXNiaHNfcGlwZSAqcGlwZSwKKwkJCQkgIHUxNiBkY3BfcmVnLCB1MTYgcGlwZV9yZWcsCisJCQkJICB1MTYgbWFzaywgdTE2IHZhbCkKK3sKKwlzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdiA9IHVzYmhzcF9waXBlX3RvX3ByaXYocGlwZSk7CisKKwlpZiAodXNiaHNwX2lzX2RjcChwaXBlKSkKKwkJdXNiaHNfYnNldChwcml2LCBkY3BfcmVnLCBtYXNrLCB2YWwpOworCWVsc2UKKwkJdXNiaHNfYnNldChwcml2LCBwaXBlX3JlZywgbWFzaywgdmFsKTsKK30KKworc3RhdGljIHUxNiBfX3VzYmhzcF9waXBlX3h4eF9nZXQoc3RydWN0IHVzYmhzX3BpcGUgKnBpcGUsCisJCQkJIHUxNiBkY3BfcmVnLCB1MTYgcGlwZV9yZWcpCit7CisJc3RydWN0IHVzYmhzX3ByaXYgKnByaXYgPSB1c2Joc3BfcGlwZV90b19wcml2KHBpcGUpOworCisJaWYgKHVzYmhzcF9pc19kY3AocGlwZSkpCisJCXJldHVybiB1c2Joc19yZWFkKHByaXYsIGRjcF9yZWcpOworCWVsc2UKKwkJcmV0dXJuIHVzYmhzX3JlYWQocHJpdiwgcGlwZV9yZWcpOworfQorCisvKgorICoJCURDUENGRy9QSVBFQ0ZHIGZ1bmN0aW9ucworICovCitzdGF0aWMgdm9pZCB1c2Joc3BfcGlwZV9jZmdfc2V0KHN0cnVjdCB1c2Joc19waXBlICpwaXBlLCB1MTYgbWFzaywgdTE2IHZhbCkKK3sKKwlfX3VzYmhzcF9waXBlX3h4eF9zZXQocGlwZSwgRENQQ0ZHLCBQSVBFQ0ZHLCBtYXNrLCB2YWwpOworfQorCisvKgorICoJCVBJUEVCVUYKKyAqLworc3RhdGljIHZvaWQgdXNiaHNwX3BpcGVfYnVmX3NldChzdHJ1Y3QgdXNiaHNfcGlwZSAqcGlwZSwgdTE2IG1hc2ssIHUxNiB2YWwpCit7CisJaWYgKHVzYmhzcF9pc19kY3AocGlwZSkpCisJCXJldHVybjsKKworCV9fdXNiaHNwX3BpcGVfeHh4X3NldChwaXBlLCAwLCBQSVBFQlVGLCBtYXNrLCB2YWwpOworfQorCisvKgorICoJCURDUE1BWFAvUElQRU1BWFAKKyAqLworc3RhdGljIHZvaWQgdXNiaHNwX3BpcGVfbWF4cF9zZXQoc3RydWN0IHVzYmhzX3BpcGUgKnBpcGUsIHUxNiBtYXNrLCB1MTYgdmFsKQoreworCV9fdXNiaHNwX3BpcGVfeHh4X3NldChwaXBlLCBEQ1BNQVhQLCBQSVBFTUFYUCwgbWFzaywgdmFsKTsKK30KKworc3RhdGljIHUxNiB1c2Joc3BfcGlwZV9tYXhwX2dldChzdHJ1Y3QgdXNiaHNfcGlwZSAqcGlwZSkKK3sKKwlyZXR1cm4gX191c2Joc3BfcGlwZV94eHhfZ2V0KHBpcGUsIERDUE1BWFAsIFBJUEVNQVhQKTsKK30KKworLyoKKyAqCQlwaXBlIGNvbnRyb2wgZnVuY3Rpb25zCisgKi8KK3N0YXRpYyB2b2lkIHVzYmhzcF9waXBlX3NlbGVjdChzdHJ1Y3QgdXNiaHNfcGlwZSAqcGlwZSkKK3sKKwlzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdiA9IHVzYmhzcF9waXBlX3RvX3ByaXYocGlwZSk7CisKKwkvKgorCSAqIE9uIHBpcGUsIHRoaXMgaXMgbmVjZXNzYXJ5IGJlZm9yZQorCSAqIGFjY2Vzc2VzIHRvIGJlbG93IHJlZ2lzdGVycy4KKwkgKgorCSAqIFBJUEVTRUwJOiB1c2Joc3BfcGlwZV9zZWxlY3QKKwkgKiBQSVBFQ0ZHCTogdXNiaHNwX3BpcGVfY2ZnX3h4eAorCSAqIFBJUEVCVUYJOiB1c2Joc3BfcGlwZV9idWZfeHh4CisJICogUElQRU1BWFAJOiB1c2Joc3BfcGlwZV9tYXhwX3h4eAorCSAqIFBJUEVQRVJJCisJICovCisKKwkvKgorCSAqIGlmIHBpcGUgaXMgZGNwLCBubyBwaXBlIGlzIHNlbGVjdGVkLgorCSAqIGl0IGlzIG5vIHByb2JsZW0sIGJlY2F1c2UgZGNwIGhhdmUgaXRzIHJlZ2lzdGVyCisJICovCisJdXNiaHNfd3JpdGUocHJpdiwgUElQRVNFTCwgMHhGICYgdXNiaHNfcGlwZV9udW1iZXIocGlwZSkpOworfQorCitzdGF0aWMgaW50IHVzYmhzcF9waXBlX2JhcnJpZXIoc3RydWN0IHVzYmhzX3BpcGUgKnBpcGUpCit7CisJc3RydWN0IHVzYmhzX3ByaXYgKnByaXYgPSB1c2Joc3BfcGlwZV90b19wcml2KHBpcGUpOworCWludCB0aW1lb3V0ID0gMTAyNDsKKwl1MTYgdmFsOworCisJLyoKKwkgKiBtYWtlIHN1cmUuLi4uCisJICoKKwkgKiBNb2RpZnkgdGhlc2UgYml0cyB3aGVuIENTU1RTID0gMCwgUElEID0gTkFLLCBhbmQgbm8gcGlwZSBudW1iZXIgaXMKKwkgKiBzcGVjaWZpZWQgYnkgdGhlIENVUlBJUEUgYml0cy4KKwkgKiBXaGVuIGNoYW5naW5nIHRoZSBzZXR0aW5nIG9mIHRoaXMgYml0IGFmdGVyIGNoYW5naW5nCisJICogdGhlIFBJRCBiaXRzIGZvciB0aGUgc2VsZWN0ZWQgcGlwZSBmcm9tIEJVRiB0byBOQUssCisJICogY2hlY2sgdGhhdCBDU1NUUyA9IDAgYW5kIFBCVVNZID0gMC4KKwkgKi8KKworCS8qCisJICogQ1VSUElQRSBiaXQgPSAwCisJICoKKwkgKiBzZWUgYWxzbworCSAqICAiT3BlcmF0aW9uIgorCSAqICAtICJQaXBlIENvbnRyb2wiCisJICogICAtICJQaXBlIENvbnRyb2wgUmVnaXN0ZXJzIFN3aXRjaGluZyBQcm9jZWR1cmUiCisJICovCisJdXNiaHNfd3JpdGUocHJpdiwgQ0ZJRk9TRUwsIDApOworCXVzYmhzX2ZpZm9fZGlzYWJsZShwaXBlKTsKKworCWRvIHsKKwkJdmFsICA9IHVzYmhzcF9waXBlY3RybF9nZXQocGlwZSk7CisJCXZhbCAmPSBDU1NUUyB8IFBJRF9NQVNLOworCQlpZiAoIXZhbCkKKwkJCXJldHVybiAwOworCisJCXVkZWxheSgxMCk7CisKKwl9IHdoaWxlICh0aW1lb3V0LS0pOworCisJcmV0dXJuIC1FQlVTWTsKK30KKworc3RhdGljIGludCB1c2Joc3BfcGlwZV9pc19hY2Nlc3NpYmxlKHN0cnVjdCB1c2Joc19waXBlICpwaXBlKQoreworCXUxNiB2YWw7CisKKwl2YWwgPSB1c2Joc3BfcGlwZWN0cmxfZ2V0KHBpcGUpOworCWlmICh2YWwgJiBCU1RTKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAtRUJVU1k7Cit9CisKKy8qCisgKgkJUElEIGN0cmwKKyAqLworc3RhdGljIHZvaWQgX191c2Joc3BfcGlkX3RyeV9uYWtfaWZfc3RhbGwoc3RydWN0IHVzYmhzX3BpcGUgKnBpcGUpCit7CisJdTE2IHBpZCA9IHVzYmhzcF9waXBlY3RybF9nZXQocGlwZSk7CisKKwlwaWQgJj0gUElEX01BU0s7CisKKwkvKgorCSAqIHNlZQorCSAqICJQaXBlIG4gQ29udHJvbCBSZWdpc3RlciIgLSAiUElEIgorCSAqLworCXN3aXRjaCAocGlkKSB7CisJY2FzZSBQSURfU1RBTEwxMToKKwkJdXNiaHNwX3BpcGVjdHJsX3NldChwaXBlLCBQSURfTUFTSywgUElEX1NUQUxMMTApOworCQkvKiBmYWxsLXRocm91Z2ggKi8KKwljYXNlIFBJRF9TVEFMTDEwOgorCQl1c2Joc3BfcGlwZWN0cmxfc2V0KHBpcGUsIFBJRF9NQVNLLCBQSURfTkFLKTsKKwl9Cit9CisKK3ZvaWQgdXNiaHNfZmlmb19kaXNhYmxlKHN0cnVjdCB1c2Joc19waXBlICpwaXBlKQoreworCWludCB0aW1lb3V0ID0gMTAyNDsKKwl1MTYgdmFsOworCisJLyogc2VlICJQaXBlIG4gQ29udHJvbCBSZWdpc3RlciIgLSAiUElEIiAqLworCV9fdXNiaHNwX3BpZF90cnlfbmFrX2lmX3N0YWxsKHBpcGUpOworCisJdXNiaHNwX3BpcGVjdHJsX3NldChwaXBlLCBQSURfTUFTSywgUElEX05BSyk7CisKKwlkbyB7CisJCXZhbCAgPSB1c2Joc3BfcGlwZWN0cmxfZ2V0KHBpcGUpOworCQl2YWwgJj0gUEJVU1k7CisJCWlmICghdmFsKQorCQkJYnJlYWs7CisKKwkJdWRlbGF5KDEwKTsKKwl9IHdoaWxlICh0aW1lb3V0LS0pOworfQorCit2b2lkIHVzYmhzX2ZpZm9fZW5hYmxlKHN0cnVjdCB1c2Joc19waXBlICpwaXBlKQoreworCS8qIHNlZSAiUGlwZSBuIENvbnRyb2wgUmVnaXN0ZXIiIC0gIlBJRCIgKi8KKwlfX3VzYmhzcF9waWRfdHJ5X25ha19pZl9zdGFsbChwaXBlKTsKKworCXVzYmhzcF9waXBlY3RybF9zZXQocGlwZSwgUElEX01BU0ssIFBJRF9CVUYpOworfQorCit2b2lkIHVzYmhzX2ZpZm9fc3RhbGwoc3RydWN0IHVzYmhzX3BpcGUgKnBpcGUpCit7CisJdTE2IHBpZCA9IHVzYmhzcF9waXBlY3RybF9nZXQocGlwZSk7CisKKwlwaWQgJj0gUElEX01BU0s7CisKKwkvKgorCSAqIHNlZQorCSAqICJQaXBlIG4gQ29udHJvbCBSZWdpc3RlciIgLSAiUElEIgorCSAqLworCXN3aXRjaCAocGlkKSB7CisJY2FzZSBQSURfTkFLOgorCQl1c2Joc3BfcGlwZWN0cmxfc2V0KHBpcGUsIFBJRF9NQVNLLCBQSURfU1RBTEwxMCk7CisJCWJyZWFrOworCWNhc2UgUElEX0JVRjoKKwkJdXNiaHNwX3BpcGVjdHJsX3NldChwaXBlLCBQSURfTUFTSywgUElEX1NUQUxMMTEpOworCQlicmVhazsKKwl9Cit9CisKKy8qCisgKgkJQ0ZJRk8gY3RybAorICovCit2b2lkIHVzYmhzX2ZpZm9fc2VuZF90ZXJtaW5hdG9yKHN0cnVjdCB1c2Joc19waXBlICpwaXBlKQoreworCXN0cnVjdCB1c2Joc19wcml2ICpwcml2ID0gdXNiaHNwX3BpcGVfdG9fcHJpdihwaXBlKTsKKworCXVzYmhzX2JzZXQocHJpdiwgQ0ZJRk9DVFIsIEJWQUwsIEJWQUwpOworfQorCitzdGF0aWMgdm9pZCB1c2Joc3BfZmlmb19jbGVhcihzdHJ1Y3QgdXNiaHNfcGlwZSAqcGlwZSkKK3sKKwlzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdiA9IHVzYmhzcF9waXBlX3RvX3ByaXYocGlwZSk7CisKKwl1c2Joc193cml0ZShwcml2LCBDRklGT0NUUiwgQkNMUik7Cit9CisKK3N0YXRpYyBpbnQgdXNiaHNwX2ZpZm9fYmFycmllcihzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdikKK3sKKwlpbnQgdGltZW91dCA9IDEwMjQ7CisKKwlkbyB7CisJCS8qIFRoZSBGSUZPIHBvcnQgaXMgYWNjZXNzaWJsZSAqLworCQlpZiAodXNiaHNfcmVhZChwcml2LCBDRklGT0NUUikgJiBGUkRZKQorCQkJcmV0dXJuIDA7CisKKwkJdWRlbGF5KDEwKTsKKwl9IHdoaWxlICh0aW1lb3V0LS0pOworCisJcmV0dXJuIC1FQlVTWTsKK30KKworc3RhdGljIGludCB1c2Joc3BfZmlmb19yY3ZfbGVuKHN0cnVjdCB1c2Joc19wcml2ICpwcml2KQoreworCXJldHVybiB1c2Joc19yZWFkKHByaXYsIENGSUZPQ1RSKSAmIERUTE5fTUFTSzsKK30KKworc3RhdGljIGludCB1c2Joc3BfZmlmb19zZWxlY3Qoc3RydWN0IHVzYmhzX3BpcGUgKnBpcGUsIGludCB3cml0ZSkKK3sKKwlzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdiA9IHVzYmhzcF9waXBlX3RvX3ByaXYocGlwZSk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gdXNiaHNfcHJpdl90b19kZXYocHJpdik7CisJaW50IHRpbWVvdXQgPSAxMDI0OworCXUxNiBtYXNrID0gKCgxIDw8IDUpIHwgMHhGKTsJCS8qIG1hc2sgb2YgSVNFTCB8IENVUlBJUEUgKi8KKwl1MTYgYmFzZSA9IHVzYmhzX3BpcGVfbnVtYmVyKHBpcGUpOwkvKiBDVVJQSVBFICovCisKKwlpZiAodXNiaHNwX2lzX2RjcChwaXBlKSkKKwkJYmFzZSB8PSAoMSA9PSB3cml0ZSkgPDwgNTsJLyogSVNFTCAqLworCisJLyogImJhc2UiIHdpbGwgYmUgdXNlZCBiZWxvdyAgKi8KKwl1c2Joc193cml0ZShwcml2LCBDRklGT1NFTCwgYmFzZSB8IE1CV18zMik7CisKKwkvKiBjaGVjayBJU0VMIGFuZCBDVVJQSVBFIHZhbHVlICovCisJd2hpbGUgKHRpbWVvdXQtLSkgeworCQlpZiAoYmFzZSA9PSAobWFzayAmIHVzYmhzX3JlYWQocHJpdiwgQ0ZJRk9TRUwpKSkKKwkJCXJldHVybiAwOworCQl1ZGVsYXkoMTApOworCX0KKworCWRldl9lcnIoZGV2LCAiZmlmbyBzZWxlY3QgZXJyb3JcbiIpOworCisJcmV0dXJuIC1FSU87Cit9CisKK2ludCB1c2Joc19maWZvX3ByZXBhcmVfd3JpdGUoc3RydWN0IHVzYmhzX3BpcGUgKnBpcGUpCit7CisJcmV0dXJuIHVzYmhzcF9maWZvX3NlbGVjdChwaXBlLCAxKTsKK30KKworaW50IHVzYmhzX2ZpZm9fd3JpdGUoc3RydWN0IHVzYmhzX3BpcGUgKnBpcGUsIHU4ICpidWYsIGludCBsZW4pCit7CisJc3RydWN0IHVzYmhzX3ByaXYgKnByaXYgPSB1c2Joc3BfcGlwZV90b19wcml2KHBpcGUpOworCXZvaWQgX19pb21lbSAqYWRkciA9IHByaXYtPmJhc2UgKyBDRklGTzsKKwlpbnQgbWF4cCA9IHVzYmhzX3BpcGVfZ2V0X21heHBhY2tldChwaXBlKTsKKwlpbnQgdG90YWxfbGVuOworCWludCBpLCByZXQ7CisKKwlyZXQgPSB1c2Joc3BfcGlwZV9pc19hY2Nlc3NpYmxlKHBpcGUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gdXNiaHNwX2ZpZm9fc2VsZWN0KHBpcGUsIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gdXNiaHNwX2ZpZm9fYmFycmllcihwcml2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWxlbiA9IG1pbihsZW4sIG1heHApOworCXRvdGFsX2xlbiA9IGxlbjsKKworCS8qCisJICogRklYTUUKKwkgKgorCSAqIDMyLWJpdCBhY2Nlc3Mgb25seQorCSAqLworCWlmIChsZW4gPj0gNCAmJgorCSAgICAhKCh1bnNpZ25lZCBsb25nKWJ1ZiAmIDB4MDMpKSB7CisJCWlvd3JpdGUzMl9yZXAoYWRkciwgYnVmLCBsZW4gLyA0KTsKKwkJbGVuICU9IDQ7CisJCWJ1ZiArPSB0b3RhbF9sZW4gLSBsZW47CisJfQorCisJLyogdGhlIHJlc3Qgb3BlcmF0aW9uICovCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlpb3dyaXRlOChidWZbaV0sIGFkZHIgKyAoMHgwMyAtIChpICYgMHgwMykpKTsKKworCWlmICh0b3RhbF9sZW4gPCBtYXhwKQorCQl1c2Joc19maWZvX3NlbmRfdGVybWluYXRvcihwaXBlKTsKKworCXJldHVybiB0b3RhbF9sZW47Cit9CisKK2ludCB1c2Joc19maWZvX3ByZXBhcmVfcmVhZChzdHJ1Y3QgdXNiaHNfcGlwZSAqcGlwZSkKK3sKKwlpbnQgcmV0OworCisJLyoKKwkgKiBzZWxlY3QgcGlwZSBhbmQgZW5hYmxlIGl0IHRvIHByZXBhcmUgcGFja2V0IHJlY2VpdmUKKwkgKi8KKwlyZXQgPSB1c2Joc3BfZmlmb19zZWxlY3QocGlwZSwgMCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwl1c2Joc19maWZvX2VuYWJsZShwaXBlKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCB1c2Joc19maWZvX3JlYWQoc3RydWN0IHVzYmhzX3BpcGUgKnBpcGUsIHU4ICpidWYsIGludCBsZW4pCit7CisJc3RydWN0IHVzYmhzX3ByaXYgKnByaXYgPSB1c2Joc3BfcGlwZV90b19wcml2KHBpcGUpOworCXZvaWQgX19pb21lbSAqYWRkciA9IHByaXYtPmJhc2UgKyBDRklGTzsKKwlpbnQgcmN2X2xlbjsKKwlpbnQgaSwgcmV0OworCWludCB0b3RhbF9sZW47CisJdTMyIGRhdGEgPSAwOworCisJcmV0ID0gdXNiaHNwX2ZpZm9fc2VsZWN0KHBpcGUsIDApOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gdXNiaHNwX2ZpZm9fYmFycmllcihwcml2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJjdl9sZW4gPSB1c2Joc3BfZmlmb19yY3ZfbGVuKHByaXYpOworCisJLyoKKwkgKiBCdWZmZXIgY2xlYXIgaWYgWmVyby1MZW5ndGggcGFja2V0CisJICoKKwkgKiBzZWUKKwkgKiAiT3BlcmF0aW9uIiAtICJGSUZPIEJ1ZmZlciBNZW1vcnkiIC0gIkZJRk8gUG9ydCBGdW5jdGlvbiIKKwkgKi8KKwlpZiAoMCA9PSByY3ZfbGVuKSB7CisJCXVzYmhzcF9maWZvX2NsZWFyKHBpcGUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlsZW4gPSBtaW4ocmN2X2xlbiwgbGVuKTsKKwl0b3RhbF9sZW4gPSBsZW47CisKKwkvKgorCSAqIEZJWE1FCisJICoKKwkgKiAzMi1iaXQgYWNjZXNzIG9ubHkKKwkgKi8KKwlpZiAobGVuID49IDQgJiYKKwkgICAgISgodW5zaWduZWQgbG9uZylidWYgJiAweDAzKSkgeworCQlpb3JlYWQzMl9yZXAoYWRkciwgYnVmLCBsZW4gLyA0KTsKKwkJbGVuICU9IDQ7CisJCWJ1ZiArPSByY3ZfbGVuIC0gbGVuOworCX0KKworCS8qIHRoZSByZXN0IG9wZXJhdGlvbiAqLworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlpZiAoIShpICYgMHgwMykpCisJCQlkYXRhID0gaW9yZWFkMzIoYWRkcik7CisKKwkJYnVmW2ldID0gKGRhdGEgPj4gKChpICYgMHgwMykgKiA4KSkgJiAweGZmOworCX0KKworCXJldHVybiB0b3RhbF9sZW47Cit9CisKKy8qCisgKgkJcGlwZSBzZXR1cAorICovCitzdGF0aWMgaW50IHVzYmhzcF9wb3NzaWJsZV9kb3VibGVfYnVmZmVyKHN0cnVjdCB1c2Joc19waXBlICpwaXBlKQoreworCS8qCisJICogb25seSBJU08gLyBCVUxLIHBpcGUgY2FuIHVzZSBkb3VibGUgYnVmZmVyCisJICovCisJaWYgKHVzYmhzcF90eXBlX2lzKHBpcGUsIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspIHx8CisJICAgIHVzYmhzcF90eXBlX2lzKHBpcGUsIFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTE2IHVzYmhzcF9zZXR1cF9waXBlY2ZnKHN0cnVjdCB1c2Joc19waXBlICpwaXBlLAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYywKKwkJCQlpbnQgaXNfaG9zdCkKK3sKKwl1MTYgdHlwZSA9IDA7CisJdTE2IGJmcmUgPSAwOworCXUxNiBkYmxiID0gMDsKKwl1MTYgY250bWQgPSAwOworCXUxNiBkaXIgPSAwOworCXUxNiBlcG51bSA9IDA7CisJdTE2IHNodG5hayA9IDA7CisJdTE2IHR5cGVfYXJyYXlbXSA9IHsKKwkJW1VTQl9FTkRQT0lOVF9YRkVSX0JVTEtdID0gVFlQRV9CVUxLLAorCQlbVVNCX0VORFBPSU5UX1hGRVJfSU5UXSAgPSBUWVBFX0lOVCwKKwkJW1VTQl9FTkRQT0lOVF9YRkVSX0lTT0NdID0gVFlQRV9JU08sCisJfTsKKwlpbnQgaXNfZG91YmxlID0gdXNiaHNwX3Bvc3NpYmxlX2RvdWJsZV9idWZmZXIocGlwZSk7CisKKwlpZiAodXNiaHNwX2lzX2RjcChwaXBlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIFBJUEVDRkcKKwkgKgorCSAqIHNlZQorCSAqICAtICJSZWdpc3RlciBEZXNjcmlwdGlvbnMiIC0gIlBJUEVDRkciIHJlZ2lzdGVyCisJICogIC0gIkZlYXR1cmVzIiAgLSAiUGlwZSBjb25maWd1cmF0aW9uIgorCSAqICAtICJPcGVyYXRpb24iIC0gIlBpcGUgQ29udHJvbCIKKwkgKi8KKworCS8qIFRZUEUgKi8KKwl0eXBlID0gdHlwZV9hcnJheVt1c2Joc3BfdHlwZShwaXBlKV07CisKKwkvKiBCRlJFICovCisJaWYgKHVzYmhzcF90eXBlX2lzKHBpcGUsIFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpIHx8CisJICAgIHVzYmhzcF90eXBlX2lzKHBpcGUsIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspKQorCQliZnJlID0gMDsgLyogRklYTUUgKi8KKworCS8qIERCTEIgKi8KKwlpZiAodXNiaHNwX3R5cGVfaXMocGlwZSwgVVNCX0VORFBPSU5UX1hGRVJfSVNPQykgfHwKKwkgICAgdXNiaHNwX3R5cGVfaXMocGlwZSwgVVNCX0VORFBPSU5UX1hGRVJfQlVMSykpCisJCWRibGIgPSAoaXNfZG91YmxlKSA/IERCTEIgOiAwOworCisJLyogQ05UTUQgKi8KKwlpZiAodXNiaHNwX3R5cGVfaXMocGlwZSwgVVNCX0VORFBPSU5UX1hGRVJfQlVMSykpCisJCWNudG1kID0gMDsgLyogRklYTUUgKi8KKworCS8qIERJUiAqLworCWlmICh1c2JfZW5kcG9pbnRfZGlyX2luKGRlc2MpKQorCQl1c2Joc3BfZmxhZ3Nfc2V0KHBpcGUsIElTX0RJUl9JTik7CisKKwlpZiAoKGlzX2hvc3QgICYmIHVzYl9lbmRwb2ludF9kaXJfb3V0KGRlc2MpKSB8fAorCSAgICAoIWlzX2hvc3QgJiYgdXNiX2VuZHBvaW50X2Rpcl9pbihkZXNjKSkpCisJCWRpciB8PSBESVJfT1VUOworCisJLyogU0hUTkFLICovCisJaWYgKHVzYmhzcF90eXBlX2lzKHBpcGUsIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspICYmCisJICAgICFkaXIpCisJCXNodG5hayA9IFNIVE5BSzsKKworCS8qIEVQTlVNICovCisJZXBudW0gPSAweEYgJiB1c2JfZW5kcG9pbnRfbnVtKGRlc2MpOworCisJcmV0dXJuCXR5cGUJfAorCQliZnJlCXwKKwkJZGJsYgl8CisJCWNudG1kCXwKKwkJZGlyCXwKKwkJc2h0bmFrCXwKKwkJZXBudW07Cit9CisKK3N0YXRpYyB1MTYgdXNiaHNwX3NldHVwX3BpcGVtYXhwKHN0cnVjdCB1c2Joc19waXBlICpwaXBlLAorCQkJCSBjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2MsCisJCQkJIGludCBpc19ob3N0KQoreworCS8qIGhvc3Qgc2hvdWxkIHNldCBERVZTRUwgKi8KKworCS8qIHJldXRuIE1YUFMgKi8KKwlyZXR1cm4gUElQRV9NQVhQX01BU0sgJiBsZTE2X3RvX2NwdShkZXNjLT53TWF4UGFja2V0U2l6ZSk7Cit9CisKK3N0YXRpYyB1MTYgdXNiaHNwX3NldHVwX3BpcGVidWZmKHN0cnVjdCB1c2Joc19waXBlICpwaXBlLAorCQkJCSBjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2MsCisJCQkJIGludCBpc19ob3N0KQoreworCXN0cnVjdCB1c2Joc19wcml2ICpwcml2ID0gdXNiaHNwX3BpcGVfdG9fcHJpdihwaXBlKTsKKwlzdHJ1Y3QgdXNiaHNfcGlwZV9pbmZvICppbmZvID0gdXNiaHNwX3ByaXZfdG9fcGlwZWluZm8ocHJpdik7CisJc3RydWN0IGRldmljZSAqZGV2ID0gdXNiaHNfcHJpdl90b19kZXYocHJpdik7CisJaW50IHBpcGVfbnVtID0gdXNiaHNfcGlwZV9udW1iZXIocGlwZSk7CisJaW50IGlzX2RvdWJsZSA9IHVzYmhzcF9wb3NzaWJsZV9kb3VibGVfYnVmZmVyKHBpcGUpOworCXUxNiBidWZmX3NpemU7CisJdTE2IGJ1Zm5tYjsKKwl1MTYgYnVmbm1iX2NudDsKKworCS8qCisJICogUElQRUJVRgorCSAqCisJICogc2VlCisJICogIC0gIlJlZ2lzdGVyIERlc2NyaXB0aW9ucyIgLSAiUElQRUJVRiIgcmVnaXN0ZXIKKwkgKiAgLSAiRmVhdHVyZXMiICAtICJQaXBlIGNvbmZpZ3VyYXRpb24iCisJICogIC0gIk9wZXJhdGlvbiIgLSAiRklGTyBCdWZmZXIgTWVtb3J5IgorCSAqICAtICJPcGVyYXRpb24iIC0gIlBpcGUgQ29udHJvbCIKKwkgKgorCSAqIGV4KSBpZiBwaXBlNiAtIHBpcGU5IGFyZSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQgKFNINzcyNCkKKwkgKgorCSAqIEJVRk5NQjoJUElQRQorCSAqIDA6CQlwaXBlMCAoRENQIDI1NmJ5dGUpCisJICogMToJCS0KKwkgKiAyOgkJLQorCSAqIDM6CQktCisJICogNDoJCXBpcGU2IChJTlQgNjRieXRlKQorCSAqIDU6CQlwaXBlNyAoSU5UIDY0Ynl0ZSkKKwkgKiA2OgkJcGlwZTggKElOVCA2NGJ5dGUpCisJICogNzoJCXBpcGU5IChJTlQgNjRieXRlKQorCSAqIDggLSB4eDoJZnJlZSAoZm9yIEJVTEssIElTT0MpCisJICovCisKKwkvKgorCSAqIEZJWE1FCisJICoKKwkgKiBpdCBkb2Vzbid0IGhhdmUgZ29vZCBidWZmZXIgYWxsb2NhdG9yCisJICoKKwkgKiBEQ1AgOiAyNTYgYnl0ZQorCSAqIEJVTEs6IDUxMiBieXRlCisJICogSU5UIDogIDY0IGJ5dGUKKwkgKiBJU09DOiA1MTIgYnl0ZQorCSAqLworCWlmICh1c2Joc3BfdHlwZV9pcyhwaXBlLCBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MKSkKKwkJYnVmZl9zaXplID0gMjU2OworCWVsc2UgaWYgKHVzYmhzcF90eXBlX2lzKHBpcGUsIFVTQl9FTkRQT0lOVF9YRkVSX0lOVCkpCisJCWJ1ZmZfc2l6ZSA9IDY0OworCWVsc2UKKwkJYnVmZl9zaXplID0gNTEyOworCisJLyogY2hhbmdlIGJ1ZmZfc2l6ZSB0byByZWdpc3RlciB2YWx1ZSAqLworCWJ1Zm5tYl9jbnQgPSAoYnVmZl9zaXplIC8gNjQpIC0gMTsKKworCS8qIEJVRk5NQiBoYXMgYmVlbiByZXNlcnZlZCBmb3IgSU5UIHBpcGUKKwkgKiBzZWUgYWJvdmUgKi8KKwlpZiAodXNiaHNwX3R5cGVfaXMocGlwZSwgVVNCX0VORFBPSU5UX1hGRVJfSU5UKSkgeworCQlidWZubWIgPSBwaXBlX251bSAtIDI7CisJfSBlbHNlIHsKKwkJYnVmbm1iID0gaW5mby0+YnVmbm1iX2xhc3Q7CisJCWluZm8tPmJ1Zm5tYl9sYXN0ICs9IGJ1Zm5tYl9jbnQgKyAxOworCisJCS8qCisJCSAqIGRvdWJsZSBidWZmZXIKKwkJICovCisJCWlmIChpc19kb3VibGUpCisJCQlpbmZvLT5idWZubWJfbGFzdCArPSBidWZubWJfY250ICsgMTsKKwl9CisKKwlkZXZfZGJnKGRldiwgInBpcGUgOiAlZCA6IGJ1ZmZfc2l6ZSAweCV4OiBidWZubWIgMHgleFxuIiwKKwkJcGlwZV9udW0sIGJ1ZmZfc2l6ZSwgYnVmbm1iKTsKKworCXJldHVybgkoMHgxZiAmIGJ1Zm5tYl9jbnQpCTw8IDEwIHwKKwkJKDB4ZmYgJiBidWZubWIpCQk8PCAgMDsKK30KKworLyoKKyAqCQlwaXBlIGNvbnRyb2wKKyAqLworaW50IHVzYmhzX3BpcGVfZ2V0X21heHBhY2tldChzdHJ1Y3QgdXNiaHNfcGlwZSAqcGlwZSkKK3sKKwl1MTYgbWFzayA9IHVzYmhzcF9pc19kY3AocGlwZSkgPyBEQ1BfTUFYUF9NQVNLIDogUElQRV9NQVhQX01BU0s7CisKKwl1c2Joc3BfcGlwZV9zZWxlY3QocGlwZSk7CisKKwlyZXR1cm4gKGludCkodXNiaHNwX3BpcGVfbWF4cF9nZXQocGlwZSkgJiBtYXNrKTsKK30KKworaW50IHVzYmhzX3BpcGVfaXNfZGlyX2luKHN0cnVjdCB1c2Joc19waXBlICpwaXBlKQoreworCXJldHVybiB1c2Joc3BfZmxhZ3NfaGFzKHBpcGUsIElTX0RJUl9JTik7Cit9CisKK3ZvaWQgdXNiaHNfcGlwZV9jbGVhcl9zZXF1ZW5jZShzdHJ1Y3QgdXNiaHNfcGlwZSAqcGlwZSkKK3sKKwl1c2Joc3BfcGlwZWN0cmxfc2V0KHBpcGUsIFNRQ0xSLCBTUUNMUik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiaHNfcGlwZSAqdXNiaHNwX2dldF9waXBlKHN0cnVjdCB1c2Joc19wcml2ICpwcml2LCB1MzIgdHlwZSkKK3sKKwlzdHJ1Y3QgdXNiaHNfcGlwZSAqcG9zLCAqcGlwZTsKKwlpbnQgaTsKKworCS8qCisJICogZmluZCB0YXJnZXQgcGlwZQorCSAqLworCXBpcGUgPSBOVUxMOworCXVzYmhzX2Zvcl9lYWNoX3BpcGVfd2l0aF9kY3AocG9zLCBwcml2LCBpKSB7CisJCWlmICghdXNiaHNwX3R5cGVfaXMocG9zLCB0eXBlKSkKKwkJCWNvbnRpbnVlOworCQlpZiAodXNiaHNwX2ZsYWdzX2hhcyhwb3MsIElTX1VTRUQpKQorCQkJY29udGludWU7CisKKwkJcGlwZSA9IHBvczsKKwkJYnJlYWs7CisJfQorCisJaWYgKCFwaXBlKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogaW5pdGlhbGl6ZSBwaXBlIGZsYWdzCisJICovCisJdXNiaHNwX2ZsYWdzX2luaXQocGlwZSk7CisJdXNiaHNwX2ZsYWdzX3NldChwaXBlLCBJU19VU0VEKTsKKworCXJldHVybiBwaXBlOworfQorCit2b2lkIHVzYmhzX3BpcGVfaW5pdChzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgdXNiaHNfcGlwZV9pbmZvICppbmZvID0gdXNiaHNwX3ByaXZfdG9fcGlwZWluZm8ocHJpdik7CisJc3RydWN0IHVzYmhzX3BpcGUgKnBpcGU7CisJaW50IGk7CisKKwkvKgorCSAqIEZJWE1FCisJICoKKwkgKiBkcml2ZXIgbmVlZHMgZ29vZCBhbGxvY2F0b3IuCisJICoKKwkgKiBmaW5kIGZpcnN0IGZyZWUgYnVmZmVyIGFyZWEgKEJVTEssIElTT0MpCisJICogKERDUCwgSU5UIGFyZWEgaXMgZml4ZWQpCisJICoKKwkgKiBidWZmZXIgbnVtYmVyIDAgLSAzIGhhdmUgYmVlbiByZXNlcnZlZCBmb3IgRENQCisJICogc2VlCisJICoJdXNiaHNwX3RvX2J1Zm5tYgorCSAqLworCWluZm8tPmJ1Zm5tYl9sYXN0ID0gNDsKKwl1c2Joc19mb3JfZWFjaF9waXBlX3dpdGhfZGNwKHBpcGUsIHByaXYsIGkpIHsKKwkJaWYgKHVzYmhzcF90eXBlX2lzKHBpcGUsIFVTQl9FTkRQT0lOVF9YRkVSX0lOVCkpCisJCQlpbmZvLT5idWZubWJfbGFzdCsrOworCisJCXVzYmhzcF9mbGFnc19pbml0KHBpcGUpOworCQlwaXBlLT5tb2RfcHJpdmF0ZSA9IE5VTEw7CisKKwkJdXNiaHNwX2ZpZm9fY2xlYXIocGlwZSk7CisJfQorfQorCitzdHJ1Y3QgdXNiaHNfcGlwZSAqdXNiaHNfcGlwZV9tYWxsb2Moc3RydWN0IHVzYmhzX3ByaXYgKnByaXYsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2MpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gdXNiaHNfcHJpdl90b19kZXYocHJpdik7CisJc3RydWN0IHVzYmhzX21vZCAqbW9kID0gdXNiaHNfbW9kX2dldF9jdXJyZW50KHByaXYpOworCXN0cnVjdCB1c2Joc19waXBlICpwaXBlOworCWludCBpc19ob3N0ID0gdXNiaHNfbW9kX2lzX2hvc3QocHJpdiwgbW9kKTsKKwlpbnQgcmV0OworCXUxNiBwaXBlY2ZnLCBwaXBlYnVmLCBwaXBlbWF4cDsKKworCXBpcGUgPSB1c2Joc3BfZ2V0X3BpcGUocHJpdiwgdXNiX2VuZHBvaW50X3R5cGUoZGVzYykpOworCWlmICghcGlwZSkgeworCQlkZXZfZXJyKGRldiwgImNhbid0IGdldCBwaXBlICglcylcbiIsCisJCQl1c2Joc3BfcGlwZV9uYW1lW3VzYl9lbmRwb2ludF90eXBlKGRlc2MpXSk7CisJCXJldHVybiBOVUxMOworCX0KKworCXVzYmhzX2ZpZm9fZGlzYWJsZShwaXBlKTsKKworCS8qIG1ha2Ugc3VyZSBwaXBlIGlzIG5vdCBidXN5ICovCisJcmV0ID0gdXNiaHNwX3BpcGVfYmFycmllcihwaXBlKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgInBpcGUgc2V0dXAgZmFpbGVkICVkXG4iLCB1c2Joc19waXBlX251bWJlcihwaXBlKSk7CisJCXJldHVybiBOVUxMOworCX0KKworCXBpcGVjZmcgID0gdXNiaHNwX3NldHVwX3BpcGVjZmcocGlwZSwgIGRlc2MsIGlzX2hvc3QpOworCXBpcGVidWYgID0gdXNiaHNwX3NldHVwX3BpcGVidWZmKHBpcGUsIGRlc2MsIGlzX2hvc3QpOworCXBpcGVtYXhwID0gdXNiaHNwX3NldHVwX3BpcGVtYXhwKHBpcGUsIGRlc2MsIGlzX2hvc3QpOworCisJLyogYnVmZmVyIGNsZWFyCisJICogc2VlIFBJUEVDRkcgOjogQkZSRSAqLworCXVzYmhzcF9waXBlY3RybF9zZXQocGlwZSwgQUNMUk0sIEFDTFJNKTsKKwl1c2Joc3BfcGlwZWN0cmxfc2V0KHBpcGUsIEFDTFJNLCAwKTsKKworCXVzYmhzcF9waXBlX3NlbGVjdChwaXBlKTsKKwl1c2Joc3BfcGlwZV9jZmdfc2V0KHBpcGUsIDB4RkZGRiwgcGlwZWNmZyk7CisJdXNiaHNwX3BpcGVfYnVmX3NldChwaXBlLCAweEZGRkYsIHBpcGVidWYpOworCXVzYmhzcF9waXBlX21heHBfc2V0KHBpcGUsIDB4RkZGRiwgcGlwZW1heHApOworCisJdXNiaHNfcGlwZV9jbGVhcl9zZXF1ZW5jZShwaXBlKTsKKworCWRldl9kYmcoZGV2LCAiZW5hYmxlIHBpcGUgJWQgOiAlcyAoJXMpXG4iLAorCQl1c2Joc19waXBlX251bWJlcihwaXBlKSwKKwkJdXNiaHNwX3BpcGVfbmFtZVt1c2JfZW5kcG9pbnRfdHlwZShkZXNjKV0sCisJCXVzYmhzX3BpcGVfaXNfZGlyX2luKHBpcGUpID8gImluIiA6ICJvdXQiKTsKKworCXJldHVybiBwaXBlOworfQorCisvKgorICoJCWRjcCBjb250cm9sCisgKi8KK3N0cnVjdCB1c2Joc19waXBlICp1c2Joc19kY3BfbWFsbG9jKHN0cnVjdCB1c2Joc19wcml2ICpwcml2KQoreworCXN0cnVjdCB1c2Joc19waXBlICpwaXBlOworCisJcGlwZSA9IHVzYmhzcF9nZXRfcGlwZShwcml2LCBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MKTsKKwlpZiAoIXBpcGUpCisJCXJldHVybiBOVUxMOworCisJLyoKKwkgKiBkY3BjZmcgIDogZGVmYXVsdAorCSAqIGRjcG1heHAgOiBkZWZhdWx0CisJICogcGlwZWJ1ZiA6IG5vdGhpbmcgdG8gZG8KKwkgKi8KKworCXVzYmhzcF9waXBlX3NlbGVjdChwaXBlKTsKKwl1c2Joc19waXBlX2NsZWFyX3NlcXVlbmNlKHBpcGUpOworCisJcmV0dXJuIHBpcGU7Cit9CisKK3ZvaWQgdXNiaHNfZGNwX2NvbnRyb2xfdHJhbnNmZXJfZG9uZShzdHJ1Y3QgdXNiaHNfcGlwZSAqcGlwZSkKK3sKKwlXQVJOX09OKCF1c2Joc3BfaXNfZGNwKHBpcGUpKTsKKworCXVzYmhzX2ZpZm9fZW5hYmxlKHBpcGUpOworCXVzYmhzcF9waXBlY3RybF9zZXQocGlwZSwgQ0NQTCwgQ0NQTCk7Cit9CisKKworLyoKKyAqCQlwaXBlIG1vZHVsZSBmdW5jdGlvbgorICovCitpbnQgdXNiaHNfcGlwZV9wcm9iZShzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgdXNiaHNfcGlwZV9pbmZvICppbmZvID0gdXNiaHNwX3ByaXZfdG9fcGlwZWluZm8ocHJpdik7CisJc3RydWN0IHVzYmhzX3BpcGUgKnBpcGU7CisJc3RydWN0IGRldmljZSAqZGV2ID0gdXNiaHNfcHJpdl90b19kZXYocHJpdik7CisJdTMyICpwaXBlX3R5cGUgPSB1c2Joc19nZXRfZHBhcmFtKHByaXYsIHBpcGVfdHlwZSk7CisJaW50IHBpcGVfc2l6ZSA9IHVzYmhzX2dldF9kcGFyYW0ocHJpdiwgcGlwZV9zaXplKTsKKwlpbnQgaTsKKworCS8qIFRoaXMgZHJpdmVyIGV4cGVjdHMgMXN0IHBpcGUgaXMgRENQICovCisJaWYgKHBpcGVfdHlwZVswXSAhPSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MKSB7CisJCWRldl9lcnIoZGV2LCAiMXN0IFBJUEUgaXMgbm90IERDUFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWluZm8tPnBpcGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiaHNfcGlwZSkgKiBwaXBlX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghaW5mby0+cGlwZSkgeworCQlkZXZfZXJyKGRldiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBwaXBlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaW5mby0+c2l6ZSA9IHBpcGVfc2l6ZTsKKworCS8qCisJICogaW5pdCBwaXBlCisJICovCisJdXNiaHNfZm9yX2VhY2hfcGlwZV93aXRoX2RjcChwaXBlLCBwcml2LCBpKSB7CisJCXBpcGUtPnByaXYgPSBwcml2OworCQl1c2Joc3BfdHlwZShwaXBlKSA9IHBpcGVfdHlwZVtpXSAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLOworCisJCWRldl9kYmcoZGV2LCAicGlwZSAleFx0OiAlc1xuIiwKKwkJCWksIHVzYmhzcF9waXBlX25hbWVbcGlwZV90eXBlW2ldXSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgdXNiaHNfcGlwZV9yZW1vdmUoc3RydWN0IHVzYmhzX3ByaXYgKnByaXYpCit7CisJc3RydWN0IHVzYmhzX3BpcGVfaW5mbyAqaW5mbyA9IHVzYmhzcF9wcml2X3RvX3BpcGVpbmZvKHByaXYpOworCisJa2ZyZWUoaW5mby0+cGlwZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9yZW5lc2FzX3VzYmhzL3BpcGUuaCBiL2RyaXZlcnMvdXNiL3JlbmVzYXNfdXNiaHMvcGlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjY2E5YjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9yZW5lc2FzX3VzYmhzL3BpcGUuaApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIFJlbmVzYXMgVVNCIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogS3VuaW5vcmkgTW9yaW1vdG8gPGt1bmlub3JpLm1vcmltb3RvLmd4QHJlbmVzYXMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworI2lmbmRlZiBSRU5FU0FTX1VTQl9QSVBFX0gKKyNkZWZpbmUgUkVORVNBU19VU0JfUElQRV9ICisKKyNpbmNsdWRlICIuL2NvbW1vbi5oIgorCisvKgorICoJc3RydWN0CisgKi8KK3N0cnVjdCB1c2Joc19waXBlIHsKKwl1MzIgcGlwZV90eXBlOwkvKiBVU0JfRU5EUE9JTlRfWEZFUl94eHggKi8KKworCXN0cnVjdCB1c2Joc19wcml2ICpwcml2OworCisJdTMyIGZsYWdzOworI2RlZmluZSBVU0JIU19QSVBFX0ZMQUdTX0lTX1VTRUQJCSgxIDw8IDApCisjZGVmaW5lIFVTQkhTX1BJUEVfRkxBR1NfSVNfRElSX0lOCQkoMSA8PCAxKQorCisJdm9pZCAqbW9kX3ByaXZhdGU7Cit9OworCitzdHJ1Y3QgdXNiaHNfcGlwZV9pbmZvIHsKKwlzdHJ1Y3QgdXNiaHNfcGlwZSAqcGlwZTsKKwlpbnQgc2l6ZTsJLyogYXJyYXkgc2l6ZSBvZiAicGlwZSIgKi8KKwlpbnQgYnVmbm1iX2xhc3Q7CS8qIEZJWE1FIDogZHJpdmVyIG5lZWRzIGdvb2QgYWxsb2NhdG9yICovCit9OworCisvKgorICogcGlwZSBsaXN0CisgKi8KKyNkZWZpbmUgX191c2Joc19mb3JfZWFjaF9waXBlKHN0YXJ0LCBwb3MsIGluZm8sIGkpCVwKKwlmb3IgKGkgPSBzdGFydCwgcG9zID0gKGluZm8pLT5waXBlOwkJXAorCSAgICAgaSA8IChpbmZvKS0+c2l6ZTsJCQkJXAorCSAgICAgaSsrLCBwb3MgPSAoaW5mbyktPnBpcGUgKyBpKQorCisjZGVmaW5lIHVzYmhzX2Zvcl9lYWNoX3BpcGUocG9zLCBwcml2LCBpKQkJCVwKKwlfX3VzYmhzX2Zvcl9lYWNoX3BpcGUoMSwgcG9zLCAmKChwcml2KS0+cGlwZV9pbmZvKSwgaSkKKworI2RlZmluZSB1c2Joc19mb3JfZWFjaF9waXBlX3dpdGhfZGNwKHBvcywgcHJpdiwgaSkJCVwKKwlfX3VzYmhzX2Zvcl9lYWNoX3BpcGUoMCwgcG9zLCAmKChwcml2KS0+cGlwZV9pbmZvKSwgaSkKKworLyoKKyAqIHBpcGUgbW9kdWxlIHByb2JlIC8gcmVtb3ZlCisgKi8KK2ludCB1c2Joc19waXBlX3Byb2JlKHN0cnVjdCB1c2Joc19wcml2ICpwcml2KTsKK3ZvaWQgdXNiaHNfcGlwZV9yZW1vdmUoc3RydWN0IHVzYmhzX3ByaXYgKnByaXYpOworCisvKgorICogY2ZpZm8KKyAqLworaW50IHVzYmhzX2ZpZm9fd3JpdGUoc3RydWN0IHVzYmhzX3BpcGUgKnBpcGUsIHU4ICpidWYsIGludCBsZW4pOworaW50IHVzYmhzX2ZpZm9fcmVhZChzdHJ1Y3QgdXNiaHNfcGlwZSAqcGlwZSwgdTggKmJ1ZiwgaW50IGxlbik7CitpbnQgdXNiaHNfZmlmb19wcmVwYXJlX3dyaXRlKHN0cnVjdCB1c2Joc19waXBlICpwaXBlKTsKK2ludCB1c2Joc19maWZvX3ByZXBhcmVfcmVhZChzdHJ1Y3QgdXNiaHNfcGlwZSAqcGlwZSk7CisKK3ZvaWQgdXNiaHNfZmlmb19lbmFibGUoc3RydWN0IHVzYmhzX3BpcGUgKnBpcGUpOwordm9pZCB1c2Joc19maWZvX2Rpc2FibGUoc3RydWN0IHVzYmhzX3BpcGUgKnBpcGUpOwordm9pZCB1c2Joc19maWZvX3N0YWxsKHN0cnVjdCB1c2Joc19waXBlICpwaXBlKTsKKwordm9pZCB1c2Joc19maWZvX3NlbmRfdGVybWluYXRvcihzdHJ1Y3QgdXNiaHNfcGlwZSAqcGlwZSk7CisKKworLyoKKyAqIHVzYiByZXF1ZXN0CisgKi8KK3ZvaWQgdXNiaHNfdXNicmVxX2dldF92YWwoc3RydWN0IHVzYmhzX3ByaXYgKnByaXYsIHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKnJlcSk7Cit2b2lkIHVzYmhzX3VzYnJlcV9zZXRfdmFsKHN0cnVjdCB1c2Joc19wcml2ICpwcml2LCBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpyZXEpOworCisvKgorICogcGlwZSBjb250cm9sCisgKi8KK3N0cnVjdCB1c2Joc19waXBlCisqdXNiaHNfcGlwZV9tYWxsb2Moc3RydWN0IHVzYmhzX3ByaXYgKnByaXYsCisJCSAgIGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYyk7CisKK2ludCB1c2Joc19waXBlX2lzX2Rpcl9pbihzdHJ1Y3QgdXNiaHNfcGlwZSAqcGlwZSk7Cit2b2lkIHVzYmhzX3BpcGVfaW5pdChzdHJ1Y3QgdXNiaHNfcHJpdiAqcHJpdik7CitpbnQgdXNiaHNfcGlwZV9nZXRfbWF4cGFja2V0KHN0cnVjdCB1c2Joc19waXBlICpwaXBlKTsKK3ZvaWQgdXNiaHNfcGlwZV9jbGVhcl9zZXF1ZW5jZShzdHJ1Y3QgdXNiaHNfcGlwZSAqcGlwZSk7CisKKyNkZWZpbmUgdXNiaHNfcGlwZV9udW1iZXIocCkJKGludCkoKHApIC0gKHApLT5wcml2LT5waXBlX2luZm8ucGlwZSkKKworLyoKKyAqIGRjcCBjb250cm9sCisgKi8KK3N0cnVjdCB1c2Joc19waXBlICp1c2Joc19kY3BfbWFsbG9jKHN0cnVjdCB1c2Joc19wcml2ICpwcml2KTsKK3ZvaWQgdXNiaHNfZGNwX2NvbnRyb2xfdHJhbnNmZXJfZG9uZShzdHJ1Y3QgdXNiaHNfcGlwZSAqcGlwZSk7CisKKyNlbmRpZiAvKiBSRU5FU0FTX1VTQl9QSVBFX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnIGIvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcKaW5kZXggYzJiMjk3Ni4uYjcxZTMwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcKQEAgLTUyNywxNSArNTI3LDYgQEAKIAlib29sICJVU0IgU2VjdXJlIEVuY2Fwc3VsYXRlZCBEcml2ZXIgLSBQYWRkZWQiCiAJZGVwZW5kcyBvbiBVU0JfU0VSSUFMX1NBRkUKIAotY29uZmlnIFVTQl9TRVJJQUxfU0FNQkEKLQl0cmlzdGF0ZSAiVVNCIEF0bWVsIFNBTSBCb290IEFzc2lzdGFudCAoU0FNLUJBKSBkcml2ZXIiCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBhY2Nlc3MgdGhlIFNBTS1CQSBib290IGFwcGxpY2F0aW9uIG9mIGFuCi0JICBBdG1lbCBBVDkxU0FNIGRldmljZS4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2FtLWJhLgotCiBjb25maWcgVVNCX1NFUklBTF9TSUVNRU5TX01QSQogCXRyaXN0YXRlICJVU0IgU2llbWVucyBNUEkgZHJpdmVyIgogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL3NlcmlhbC9NYWtlZmlsZQppbmRleCA5YTIxMTdmLi45ZTUzNmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL01ha2VmaWxlCkBAIC00OCw3ICs0OCw2IEBACiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9RQ0FVWCkJCQkrPSBxY2F1eC5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9RVUFMQ09NTSkJCSs9IHFjc2VyaWFsLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX1NBRkUpCQkJKz0gc2FmZV9zZXJpYWwubwotb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfU0FNQkEpCQkJKz0gc2FtLWJhLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX1NJRU1FTlNfTVBJKQkJKz0gc2llbWVuc19tcGkubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfU0lFUlJBV0lSRUxFU1MpCQkrPSBzaWVycmEubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfU1BDUDhYNSkJCSs9IHNwY3A4eDUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jCmluZGV4IDBmMTFhZmQuLmZkNjdjYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMKQEAgLTEwMiw3ICsxMDIsNyBAQAogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODIxOCkgfSwgLyogTGlwb3dza3kgSW5kdXN0cmllIEVsZWt0cm9uaWsgR21iSCwgSEFSUC0xICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MjJCKSB9LCAvKiBNb2RlbSBFREdFKEdTTSkgQ29tYW5kZXIgMiAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODI2QikgfSwgLyogQ3lnbmFsIEludGVncmF0ZWQgUHJvZHVjdHMsIEluYy4sIEZhc3R0cmF4IEdQUyBkZW1vbnN0cmF0aW9uIG1vZHVsZSAqLwotCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODI5MykgfSwgLyogVGVsZWdlc3lzIEVUUlgyVVNCICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MjkzKSB9LCAvKiBUZWxlZ2VzaXMgRVRSWDJVU0IgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgyRjkpIH0sIC8qIFByb2N5b24gQVZTICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MzQxKSB9LCAvKiBTaWVtZW5zIE1DMzVQVSBHUFJTIE1vZGVtICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MzgyKSB9LCAvKiBDeWduYWwgSW50ZWdyYXRlZCBQcm9kdWN0cywgSW5jLiAqLwpAQCAtMTEyLDYgKzExMiwxMCBAQAogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODQxOCkgfSwgLyogSVJaIEF1dG9tYXRpb24gVGVsZXBvcnQgU0ctMTAgR1NNL0dQUlMgTW9kZW0gKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDg0NkUpIH0sIC8qIEJFSSBVU0IgU2Vuc29yIEludGVyZmFjZSAoVkNQKSAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODQ3NykgfSwgLyogQmFsbHVmZiBSRklEICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4NUVBKSB9LCAvKiBBQy1TZXJ2aWNlcyBJQlVTLUlGICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4NUVCKSB9LCAvKiBBQy1TZXJ2aWNlcyBDSVMtSUJVUyAqLworCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODY2NCkgfSwgLyogQUMtU2VydmljZXMgQ0FOLUlGICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4NjY1KSB9LCAvKiBBQy1TZXJ2aWNlcyBPQkQtSUYgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweEVBNjApIH0sIC8qIFNpbGljb24gTGFicyBmYWN0b3J5IGRlZmF1bHQgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweEVBNjEpIH0sIC8qIFNpbGljb24gTGFicyBmYWN0b3J5IGRlZmF1bHQgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweEVBNzEpIH0sIC8qIEluZmluaXR5IEdQUy1NSUMtMSBSYWRpbyBNb25vcGhvbmUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKaW5kZXggNGRlNmVmMC4uZThkYmRlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKQEAgLTU2Niw2ICs1NjYsNyBAQAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9JQlNfQVBQNzBfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9JQlNfUEVET19QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0lCU19QUk9EX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfVEFWSVJfU1RLNTAwX1BJRCkgfSwKIAkvKgogCSAqIEVMViBkZXZpY2VzOgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oCmluZGV4IGVmZmZjMjM3Li4xZDk0NmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oCkBAIC00OTEsNiArNDkxLDExIEBACiAvKiB3d3cuY2FudXNiLmNvbSBMYXdpY2VsIENBTlVTQiBkZXZpY2UgKEZURElfVklEKSAqLwogI2RlZmluZSBGVERJX0NBTlVTQl9QSUQgMHhGRkE4IC8qIFByb2R1Y3QgSWQgKi8KIAorLyoKKyAqIFRhdklSIEFWUiBwcm9kdWN0IGlkcyAoRlRESV9WSUQpCisgKi8KKyNkZWZpbmUgRlRESV9UQVZJUl9TVEs1MDBfUElECTB4RkEzMwkvKiBTVEs1MDAgQVZSIHByb2dyYW1tZXIgKi8KKwogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nYXJtaW5fZ3BzLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2FybWluX2dwcy5jCmluZGV4IDI2NzEwYjEuLmIwYTdhOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nYXJtaW5fZ3BzLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dhcm1pbl9ncHMuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBHYXJtaW4gR1BTIGRyaXZlcgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA5IEhlcm1hbm4gS25laXNzZWwgaGVya25lQHVzZXJzLnNvdXJjZWZvcmdlLm5ldAorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTEgSGVybWFubiBLbmVpc3NlbCBoZXJrbmVAZ214LmRlCiAgKgogICogVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIgY2FuIGJlIGZvdW5kIGF0CiAgKiBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2dhcm1pbi1ncHMvCkBAIC01MSw3ICs1MSw3IEBACiAgKi8KIAogI2RlZmluZSBWRVJTSU9OX01BSk9SCTAKLSNkZWZpbmUgVkVSU0lPTl9NSU5PUgkzMworI2RlZmluZSBWRVJTSU9OX01JTk9SCTM2CiAKICNkZWZpbmUgX1NUUihzKSAjcwogI2RlZmluZSBfRFJJVkVSX1ZFUlNJT04oYSwgYikgInYiIF9TVFIoYSkgIi4iIF9TVFIoYikKQEAgLTQxMCw2ICs0MTAsNyBAQAogICovCiBzdGF0aWMgaW50IGdzcF9yZWNfcGFja2V0KHN0cnVjdCBnYXJtaW5fZGF0YSAqZ2FybWluX2RhdGFfcCwgaW50IGNvdW50KQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJY29uc3QgX191OCAqcmVjcGt0ID0gZ2FybWluX2RhdGFfcC0+aW5idWZmZXIrR1NQX0lOSVRJQUxfT0ZGU0VUOwogCV9fbGUzMiAqdXNiZGF0YSA9IChfX2xlMzIgKikgZ2FybWluX2RhdGFfcC0+aW5idWZmZXI7CiAKQEAgLTQ1OCw3ICs0NTksOSBAQAogCS8qIGlmIHRoaXMgd2FzIGFuIGFib3J0LXRyYW5zZmVyIGNvbW1hbmQsIGZsdXNoIGFsbAogCSAgIHF1ZXVlZCBkYXRhLiAqLwogCWlmIChpc0Fib3J0VHJmQ21uZChnYXJtaW5fZGF0YV9wLT5pbmJ1ZmZlcikpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKIAkJZ2FybWluX2RhdGFfcC0+ZmxhZ3MgfD0gRkxBR1NfRFJPUF9EQVRBOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CiAJCXBrdF9jbGVhcihnYXJtaW5fZGF0YV9wKTsKIAl9CiAKQEAgLTk0Myw3ICs5NDYsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CiAJZ2FybWluX2RhdGFfcC0+bW9kZSAgPSBpbml0aWFsX21vZGU7CiAJZ2FybWluX2RhdGFfcC0+Y291bnQgPSAwOwotCWdhcm1pbl9kYXRhX3AtPmZsYWdzID0gMDsKKwlnYXJtaW5fZGF0YV9wLT5mbGFncyAmPSBGTEFHU19TRVNTSU9OX1JFUExZMV9TRUVOOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKIAogCS8qIHNodXRkb3duIGFueSBidWxrIHJlYWRzIHRoYXQgbWlnaHQgYmUgZ29pbmcgb24gKi8KQEAgLTExNzgsNyArMTE4MSw4IEBACiAKIAogc3RhdGljIHZvaWQgZ2FybWluX3JlYWRfcHJvY2VzcyhzdHJ1Y3QgZ2FybWluX2RhdGEgKmdhcm1pbl9kYXRhX3AsCi0JCQkJIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGRhdGFfbGVuZ3RoKQorCQkJCSB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBkYXRhX2xlbmd0aCwKKwkJCQkgaW50IGJ1bGtfZGF0YSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0xMTkzLDcgKzExOTcsOCBAQAogCQkgICBzZW5kIGl0IGRpcmVjdGx5IHRvIHRoZSB0dHkgcG9ydCAqLwogCQlpZiAoZ2FybWluX2RhdGFfcC0+ZmxhZ3MgJiBGTEFHU19RVUVVSU5HKSB7CiAJCQlwa3RfYWRkKGdhcm1pbl9kYXRhX3AsIGRhdGEsIGRhdGFfbGVuZ3RoKTsKLQkJfSBlbHNlIGlmIChnZXRMYXllcklkKGRhdGEpID09IEdBUk1JTl9MQVlFUklEX0FQUEwpIHsKKwkJfSBlbHNlIGlmIChidWxrX2RhdGEgfHwgCisJCQkgICBnZXRMYXllcklkKGRhdGEpID09IEdBUk1JTl9MQVlFUklEX0FQUEwpIHsKIAogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKIAkJCWdhcm1pbl9kYXRhX3AtPmZsYWdzIHw9IEFQUF9SRVNQX1NFRU47CkBAIC0xMjM3LDcgKzEyNDIsNyBAQAogCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwKIAkJCQlfX2Z1bmNfXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKIAotCWdhcm1pbl9yZWFkX3Byb2Nlc3MoZ2FybWluX2RhdGFfcCwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwlnYXJtaW5fcmVhZF9wcm9jZXNzKGdhcm1pbl9kYXRhX3AsIGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCwgMSk7CiAKIAlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID09IDAgJiYKIAkJCTAgIT0gKGdhcm1pbl9kYXRhX3AtPmZsYWdzICYgRkxBR1NfQlVMS19JTl9SRVNUQVJUKSkgewpAQCAtMTM0Niw3ICsxMzUxLDcgQEAKIAkJCV9fZnVuY19fLCBnYXJtaW5fZGF0YV9wLT5zZXJpYWxfbnVtKTsKIAl9CiAKLQlnYXJtaW5fcmVhZF9wcm9jZXNzKGdhcm1pbl9kYXRhX3AsIGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJZ2FybWluX3JlYWRfcHJvY2VzcyhnYXJtaW5fZGF0YV9wLCBkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgsIDApOwogCiAJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKQEAgLTE0NjEsNiArMTQ2Niw3IEBACiAJZ2FybWluX2RhdGFfcC0+dGltZXIuZnVuY3Rpb24gPSB0aW1lb3V0X2hhbmRsZXI7CiAJZ2FybWluX2RhdGFfcC0+cG9ydCA9IHBvcnQ7CiAJZ2FybWluX2RhdGFfcC0+c3RhdGUgPSAwOworCWdhcm1pbl9kYXRhX3AtPmZsYWdzID0gMDsKIAlnYXJtaW5fZGF0YV9wLT5jb3VudCA9IDA7CiAJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQsIGdhcm1pbl9kYXRhX3ApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvbW90b19tb2RlbS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL21vdG9fbW9kZW0uYwppbmRleCA2NTM0NjVmLi5lMmJmZWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvbW90b19tb2RlbS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3RvX21vZGVtLmMKQEAgLTI1LDYgKzI1LDcgQEAKIAl7IFVTQl9ERVZJQ0UoMHgwNWM2LCAweDMxOTcpIH0sCS8qIHVua25vd24gTW90b3JvbGEgcGhvbmUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwYzQ0LCAweDAwMjIpIH0sCS8qIHVua25vd24gTW9yb3JvbGEgcGhvbmUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgyMmI4LCAweDJhNjQpIH0sCS8qIE1vdG9yb2xhIEtSWlIgSzFtICovCisJeyBVU0JfREVWSUNFKDB4MjJiOCwgMHgyYzg0KSB9LCAvKiBNb3Rvcm9sYSBWRTI0MCBwaG9uZSAqLwogCXsgVVNCX0RFVklDRSgweDIyYjgsIDB4MmM2NCkgfSwgLyogTW90b3JvbGEgVjk1MCBwaG9uZSAqLwogCXsgfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aWNvbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGljb24uYwppbmRleCAxYjU2MzNmLi45NjQyM2YzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aWNvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpY29uLmMKQEAgLTI4OSw4ICsyODksMTEgQEAKIAkvKiBUaGUgY29ubmNlY3RlZCBkZXZpY2VzIGRvIG5vdCBoYXZlIGEgYnVsayB3cml0ZSBlbmRwb2ludCwKIAkgKiB0byB0cmFuc21pdCBkYXRhIHRvIGRlIGJhcmNvZGUgZGV2aWNlIHRoZSBjb250cm9sIGVuZHBvaW50IGlzIHVzZWQgKi8KIAlkciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QpLCBHRlBfTk9JTyk7Ci0JaWYgKCFkcikKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKCFkcikgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJY291bnQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KIAogCWRyLT5iUmVxdWVzdFR5cGUgPSBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX0RJUl9PVVQ7CiAJZHItPmJSZXF1ZXN0ID0gMHgwMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwppbmRleCBkNzdmZjA0Li4zMThkZDAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCkBAIC0xNDksNiArMTQ5LDcgQEAKICNkZWZpbmUgSFVBV0VJX1BST0RVQ1RfSzM3NjUJCQkweDE0NjUKICNkZWZpbmUgSFVBV0VJX1BST0RVQ1RfRTE0QUMJCQkweDE0QUMKICNkZWZpbmUgSFVBV0VJX1BST0RVQ1RfRVRTMTIyMAkJCTB4MTgwMworI2RlZmluZSBIVUFXRUlfUFJPRFVDVF9FMzUzCQkJMHgxNTA2CiAKICNkZWZpbmUgUVVBTlRBX1ZFTkRPUl9JRAkJCTB4MDQwOAogI2RlZmluZSBRVUFOVEFfUFJPRFVDVF9RMTAxCQkJMHhFQTAyCkBAIC01MzIsNiArNTMzLDcgQEAKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0szNzY1LCAweGZmLCAweGZmLCAweGZmKSB9LAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRVRTMTIyMCwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNEFDLCAweGZmLCAweGZmLCAweGZmKSB9LAorCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTM1MywgMHhmZiwgMHgwMSwgMHgwMSkgfSwKIAl7IFVTQl9ERVZJQ0UoTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRCwgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfVjY0MCkgfSwKIAl7IFVTQl9ERVZJQ0UoTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRCwgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfVjYyMCkgfSwKIAl7IFVTQl9ERVZJQ0UoTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRCwgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfVjc0MCkgfSwKQEAgLTk3Miw3ICs5NzQsNyBAQAogCXsgVVNCX0RFVklDRShPTElWRVRUSV9WRU5ET1JfSUQsIE9MSVZFVFRJX1BST0RVQ1RfT0xJQ0FSRDEwMCkgfSwKIAl7IFVTQl9ERVZJQ0UoQ0VMT1RfVkVORE9SX0lELCBDRUxPVF9QUk9EVUNUX0NUNjgwTSkgfSwgLyogQ1QtNjUwIENETUEgNDUwIDF4RVZETyBtb2RlbSAqLwogCXsgVVNCX0RFVklDRShPTkRBX1ZFTkRPUl9JRCwgT05EQV9NVDgyNVVQKSB9LCAvKiBPTkRBIE1UODI1VVAgbW9kZW0gKi8KLQl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFNBTVNVTkdfVkVORE9SX0lELCBTQU1TVU5HX1BST0RVQ1RfR1RfQjM3MzAsIFVTQl9DTEFTU19DRENfREFUQSwgMHgwMCwgMHgwMCkgfSwgLyogU2Ftc3VuZyBHVC1CMzczMC9HVC1CMzcxMCBMVEUgVVNCIG1vZGVtLiovCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhTQU1TVU5HX1ZFTkRPUl9JRCwgU0FNU1VOR19QUk9EVUNUX0dUX0IzNzMwLCBVU0JfQ0xBU1NfQ0RDX0RBVEEsIDB4MDAsIDB4MDApIH0sIC8qIFNhbXN1bmcgR1QtQjM3MzAgTFRFIFVTQiBtb2RlbS4qLwogCXsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBvcHRpb25faWRzKTsKQEAgLTExMDksNiArMTExMSwxMiBAQAogCQlzZXJpYWwtPmludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlciA9PSAxKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCS8qIERvbid0IGJpbmQgbmV0d29yayBpbnRlcmZhY2Ugb24gU2Ftc3VuZyBHVC1CMzczMCwgaXQgaXMgaGFuZGxlZCBieSBhIHNlcGFyYXRlIG1vZHVsZSAqLworCWlmIChzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciA9PSBTQU1TVU5HX1ZFTkRPUl9JRCAmJgorCQlzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QgPT0gU0FNU1VOR19QUk9EVUNUX0dUX0IzNzMwICYmCisJCXNlcmlhbC0+aW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MgIT0gVVNCX0NMQVNTX0NEQ19EQVRBKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWRhdGEgPSBzZXJpYWwtPnByaXZhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX3d3YW5faW50Zl9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIWRhdGEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc2FtLWJhLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc2FtLWJhLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzYmJhNjQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3NhbS1iYS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjA2ICswLDAgQEAKLS8qCi0gKiBBdG1lbCBTQU0gQm9vdCBBc3Npc3RhbnQgKFNBTS1CQSkgZHJpdmVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEpvaGFuIEhvdm9sZCA8amhvdm9sZEBnbWFpbC5jb20+Ci0gKgotICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgotICoJMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLSNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+Ci0KLQotI2RlZmluZSBEUklWRVJfVkVSU0lPTgkidjEuMCIKLSNkZWZpbmUgRFJJVkVSX0FVVEhPUgkiSm9oYW4gSG92b2xkIDxqaG92b2xkQGdtYWlsLmNvbT4iCi0jZGVmaW5lIERSSVZFUl9ERVNDCSJBdG1lbCBTQU0gQm9vdCBBc3Npc3RhbnQgKFNBTS1CQSkgZHJpdmVyIgotCi0jZGVmaW5lIFNBTUJBX1ZFTkRPUl9JRAkJMHgzZWIKLSNkZWZpbmUgU0FNQkFfUFJPRFVDVF9JRAkweDYxMjQKLQotCi1zdGF0aWMgaW50IGRlYnVnOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKLQkvKgotCSAqIE5PVEU6IE9ubHkgbWF0Y2ggdGhlIENEQyBEYXRhIGludGVyZmFjZS4KLQkgKi8KLQl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFNBTUJBX1ZFTkRPUl9JRCwgU0FNQkFfUFJPRFVDVF9JRCwKLQkJCQkJVVNCX0NMQVNTX0NEQ19EQVRBLCAwLCAwKSB9LAotCXsgfQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzYW1iYV9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInNhbS1iYSIsCi0JLnByb2JlCQk9IHVzYl9zZXJpYWxfcHJvYmUsCi0JLmRpc2Nvbm5lY3QJPSB1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCi0JLmlkX3RhYmxlCT0gaWRfdGFibGUsCi0JLm5vX2R5bmFtaWNfaWQJPSAxLAotfTsKLQotCi0vKgotICogTk9URTogVGhlIFNBTS1CQSBmaXJtd2FyZSBjYW5ub3QgaGFuZGxlIG1lcmdlZCB3cml0ZSByZXF1ZXN0cyBzbyB3ZSBjYW5ub3QKLSAqICAgICAgIHVzZSB0aGUgZ2VuZXJpYyB3cml0ZSBpbXBsZW1lbnRhdGlvbiAod2hpY2ggdXNlcyB0aGUgcG9ydCB3cml0ZSBmaWZvKS4KLSAqLwotc3RhdGljIGludCBzYW1iYV93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKLXsKLQlzdHJ1Y3QgdXJiICp1cmI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmVzdWx0OwotCWludCBpOwotCi0JaWYgKCFjb3VudCkKLQkJcmV0dXJuIDA7Ci0KLQljb3VudCA9IG1pbl90KGludCwgY291bnQsIHBvcnQtPmJ1bGtfb3V0X3NpemUpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKLQlpZiAoIXBvcnQtPndyaXRlX3VyYnNfZnJlZSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybiAwOwotCX0KLQlpID0gZmluZF9maXJzdF9iaXQoJnBvcnQtPndyaXRlX3VyYnNfZnJlZSwKLQkJCQkJCUFSUkFZX1NJWkUocG9ydC0+d3JpdGVfdXJicykpOwotCV9fY2xlYXJfYml0KGksICZwb3J0LT53cml0ZV91cmJzX2ZyZWUpOwotCXBvcnQtPnR4X2J5dGVzICs9IGNvdW50OwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKLQotCXVyYiA9IHBvcnQtPndyaXRlX3VyYnNbaV07Ci0JbWVtY3B5KHVyYi0+dHJhbnNmZXJfYnVmZmVyLCBidWYsIGNvdW50KTsKLQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBjb3VudDsKLQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLCBjb3VudCwKLQkJCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKLQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwotCWlmIChyZXN1bHQpIHsKLQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBlcnJvciBzdWJtaXR0aW5nIHVyYjogJWRcbiIsCi0JCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKLQkJX19zZXRfYml0KGksICZwb3J0LT53cml0ZV91cmJzX2ZyZWUpOwotCQlwb3J0LT50eF9ieXRlcyAtPSBjb3VudDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgaW50IHNhbWJhX3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgZnJlZTsKLQlpbnQgY291bnQ7Ci0JaW50IHJvb207Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwotCWZyZWUgPSBwb3J0LT53cml0ZV91cmJzX2ZyZWU7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwotCi0JY291bnQgPSBod2VpZ2h0X2xvbmcoZnJlZSk7Ci0Jcm9vbSA9IGNvdW50ICogcG9ydC0+YnVsa19vdXRfc2l6ZTsKLQotCWRiZygiJXMgLSByZXR1cm5zICVkIiwgX19mdW5jX18sIHJvb20pOwotCi0JcmV0dXJuIHJvb207Ci19Ci0KLXN0YXRpYyBpbnQgc2FtYmFfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCi17Ci0Jc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgY2hhcnM7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwotCWNoYXJzID0gcG9ydC0+dHhfYnl0ZXM7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwotCi0JZGJnKCIlcyAtIHJldHVybnMgJWQiLCBfX2Z1bmNfXywgY2hhcnMpOwotCi0JcmV0dXJuIGNoYXJzOwotfQotCi1zdGF0aWMgdm9pZCBzYW1iYV93cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKLXsKLQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdXJiLT5jb250ZXh0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGk7Ci0KLQlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG9ydC0+d3JpdGVfdXJicyk7ICsraSkgewotCQlpZiAocG9ydC0+d3JpdGVfdXJic1tpXSA9PSB1cmIpCi0JCQlicmVhazsKLQl9Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKLQlfX3NldF9iaXQoaSwgJnBvcnQtPndyaXRlX3VyYnNfZnJlZSk7Ci0JcG9ydC0+dHhfYnl0ZXMgLT0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKLQotCWlmICh1cmItPnN0YXR1cykKLQkJZGJnKCIlcyAtIG5vbi16ZXJvIHVyYiBzdGF0dXM6ICVkIiwgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKLQotCXVzYl9zZXJpYWxfcG9ydF9zb2Z0aW50KHBvcnQpOwotfQotCi1zdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIHNhbWJhX2RldmljZSA9IHsKLQkuZHJpdmVyID0gewotCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5uYW1lCQk9ICJzYW0tYmEiLAotCX0sCi0JLnVzYl9kcml2ZXIJCT0gJnNhbWJhX2RyaXZlciwKLQkuaWRfdGFibGUJCT0gaWRfdGFibGUsCi0JLm51bV9wb3J0cwkJPSAxLAotCS5idWxrX2luX3NpemUJCT0gNTEyLAotCS5idWxrX291dF9zaXplCQk9IDIwNDgsCi0JLndyaXRlCQkJPSBzYW1iYV93cml0ZSwKLQkud3JpdGVfcm9vbQkJPSBzYW1iYV93cml0ZV9yb29tLAotCS5jaGFyc19pbl9idWZmZXIJPSBzYW1iYV9jaGFyc19pbl9idWZmZXIsCi0JLndyaXRlX2J1bGtfY2FsbGJhY2sJPSBzYW1iYV93cml0ZV9idWxrX2NhbGxiYWNrLAotCS50aHJvdHRsZQkJPSB1c2Jfc2VyaWFsX2dlbmVyaWNfdGhyb3R0bGUsCi0JLnVudGhyb3R0bGUJCT0gdXNiX3NlcmlhbF9nZW5lcmljX3VudGhyb3R0bGUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBzYW1iYV9pbml0KHZvaWQpCi17Ci0JaW50IHJldHZhbDsKLQotCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJnNhbWJhX2RldmljZSk7Ci0JaWYgKHJldHZhbCkKLQkJcmV0dXJuIHJldHZhbDsKLQotCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigmc2FtYmFfZHJpdmVyKTsKLQlpZiAocmV0dmFsKSB7Ci0JCXVzYl9zZXJpYWxfZGVyZWdpc3Rlcigmc2FtYmFfZGV2aWNlKTsKLQkJcmV0dXJuIHJldHZhbDsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjogIgotCQkJCQkJCURSSVZFUl9ERVNDICJcbiIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgc2FtYmFfZXhpdCh2b2lkKQotewotCXVzYl9kZXJlZ2lzdGVyKCZzYW1iYV9kcml2ZXIpOwotCXVzYl9zZXJpYWxfZGVyZWdpc3Rlcigmc2FtYmFfZGV2aWNlKTsKLX0KLQotbW9kdWxlX2luaXQoc2FtYmFfaW5pdCk7Ci1tb2R1bGVfZXhpdChzYW1iYV9leGl0KTsKLQotTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKLU1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7Ci1NT0RVTEVfVkVSU0lPTihEUklWRVJfVkVSU0lPTik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLW1vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkVuYWJsZSB2ZXJib3NlIGRlYnVnZ2luZyBtZXNzYWdlcyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9lbmVfdWI2MjUwLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2VuZV91YjYyNTAuYwppbmRleCAwZTVhYWZkLi4zMTY0NWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2VuZV91YjYyNTAuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2VuZV91YjYyNTAuYwpAQCAtNzE1LDggKzcxNSw4IEBACiAKIAlpZiAoIShtaXNjX3JlZzAzICYgMHgwMSkpIHsKIAkJcmVzdWx0ID0gLUVOT0RFVjsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJ1bXNfZW5ldWI2MjUwOiBUaGUgZHJpdmVyIG9ubHkgc3VwcG9ydHMgU0RcCi0JCWNhcmQuIFRvIHVzZSBTTS9NUyBjYXJkLCBwbGVhc2UgYnVpbGQgZHJpdmVyL3N0YWdnaW5nL2tldWNyXG4iKTsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJ1bXNfZW5ldWI2MjUwOiBUaGUgZHJpdmVyIG9ubHkgc3VwcG9ydHMgU0QgY2FyZC4gIgorCQkgICAgICAgIlRvIHVzZSBTTS9NUyBjYXJkLCBwbGVhc2UgYnVpbGQgZHJpdmVyL3N0YWdpbmcva2V1Y3JcbiIpOwogCQl1c2Jfc3Rvcl9kaXNjb25uZWN0KGludGYpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmMKaW5kZXggMDllNTJiYS4uZmZjNDE5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5jCkBAIC00OTksNyArNDk5LDYgQEAKIAltZW1zZXQoJmF0YSwgMCwgc2l6ZW9mKGF0YSkpOwogCXNyYi0+Y21uZCA9IGluZm8tPmNtbmQ7CiAJc3JiLT5kZXZpY2UgPSAmc3JiX2RldjsKLQkrK3NyYi0+c2VyaWFsX251bWJlcjsKIAogCWF0YS5nZW5lcmljLlNpZ25hdHVyZUJ5dGUwID0gaW5mby0+Q29uZmlnRGF0YS5BVEFNYWpvckNvbW1hbmQ7CiAJYXRhLmdlbmVyaWMuU2lnbmF0dXJlQnl0ZTEgPSBpbmZvLT5Db25maWdEYXRhLkFUQU1pbm9yQ29tbWFuZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9yZWFsdGVrLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfcmVhbHRlay5oCmluZGV4IDMyMzZlMDMuLmU0MWY1MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9yZWFsdGVrLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX3JlYWx0ZWsuaApAQCAtMjMsMTkgKzIzLDE5IEBACiAjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfUkVBTFRFSykgfHwgXAogCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9SRUFMVEVLX01PRFVMRSkKIAotVU5VU1VBTF9ERVYoMHgwYmRhLCAweDAxNTksIDB4MDAwMCwgMHg5OTk5LAorVU5VU1VBTF9ERVYoMHgwYmRhLCAweDAxMzgsIDB4MDAwMCwgMHg5OTk5LAogCQkiUmVhbHRlayIsCiAJCSJVU0IgQ2FyZCBSZWFkZXIiLAotCQlVU0JfU0NfU0NTSSwgVVNCX1BSX0JVTEssIGluaXRfcmVhbHRla19jciwgMCksCisJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIGluaXRfcmVhbHRla19jciwgMCksCiAKIFVOVVNVQUxfREVWKDB4MGJkYSwgMHgwMTU4LCAweDAwMDAsIDB4OTk5OSwKIAkJIlJlYWx0ZWsiLAogCQkiVVNCIENhcmQgUmVhZGVyIiwKLQkJVVNCX1NDX1NDU0ksIFVTQl9QUl9CVUxLLCBpbml0X3JlYWx0ZWtfY3IsIDApLAorCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBpbml0X3JlYWx0ZWtfY3IsIDApLAogCi1VTlVTVUFMX0RFVigweDBiZGEsIDB4MDEzOCwgMHgwMDAwLCAweDk5OTksCitVTlVTVUFMX0RFVigweDBiZGEsIDB4MDE1OSwgMHgwMDAwLCAweDk5OTksCiAJCSJSZWFsdGVrIiwKIAkJIlVTQiBDYXJkIFJlYWRlciIsCi0JCVVTQl9TQ19TQ1NJLCBVU0JfUFJfQlVMSywgaW5pdF9yZWFsdGVrX2NyLCAwKSwKKwkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgaW5pdF9yZWFsdGVrX2NyLCAwKSwKIAogI2VuZGlmICAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9SRUFMVEVLKSB8fCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jCmluZGV4IDQyMTljMTkuLjVlZTdhYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYwpAQCAtNDM5LDcgKzQzOSw4IEBACiAJCQlVU19GTF9DQVBBQ0lUWV9IRVVSSVNUSUNTIHwgVVNfRkxfSUdOT1JFX0RFVklDRSB8CiAJCQlVU19GTF9OT1RfTE9DS0FCTEUgfCBVU19GTF9NQVhfU0VDVE9SU182NCB8CiAJCQlVU19GTF9DQVBBQ0lUWV9PSyB8IFVTX0ZMX0lHTk9SRV9SRVNJRFVFIHwKLQkJCVVTX0ZMX1NJTkdMRV9MVU4gfCBVU19GTF9OT19XUF9ERVRFQ1QpOworCQkJVVNfRkxfU0lOR0xFX0xVTiB8IFVTX0ZMX05PX1dQX0RFVEVDVCB8CisJCQlVU19GTF9OT19SRUFEX0RJU0NfSU5GTyB8IFVTX0ZMX05PX1JFQURfQ0FQQUNJVFlfMTYpOwogCiAJcCA9IHF1aXJrczsKIAl3aGlsZSAoKnApIHsKQEAgLTQ3MSw2ICs0NzIsMTIgQEAKIAkJY2FzZSAnYyc6CiAJCQlmIHw9IFVTX0ZMX0ZJWF9DQVBBQ0lUWTsKIAkJCWJyZWFrOworCQljYXNlICdkJzoKKwkJCWYgfD0gVVNfRkxfTk9fUkVBRF9ESVNDX0lORk87CisJCQlicmVhazsKKwkJY2FzZSAnZSc6CisJCQlmIHw9IFVTX0ZMX05PX1JFQURfQ0FQQUNJVFlfMTY7CisJCQlicmVhazsKIAkJY2FzZSAnaCc6CiAJCQlmIHw9IFVTX0ZMX0NBUEFDSVRZX0hFVVJJU1RJQ1M7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwppbmRleCBlNmE4ZDhjLi42ZDEzOTY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9LY29uZmlnCkBAIC0xNTYyLDYgKzE1NjIsMTcgQEAKIAkgIGNvcnJlY3Qgb3V0cHV0IGRldmljZSBjb25maWd1cmF0aW9uLgogCSAgSXRzIHVzZSBpcyBzdHJvbmdseSBkaXNjb3VyYWdlZC4KIAorY29uZmlnIEZCX1ZJQV9YX0NPTVBBVElCSUxJVFkKKwlib29sICJYIHNlcnZlciBjb21wYXRpYmlsaXR5IgorCWRlcGVuZHMgb24gRkJfVklBCisJZGVmYXVsdCBuCisJaGVscAorCSAgVGhpcyBvcHRpb24gcmVkdWNlcyB0aGUgZnVuY3Rpb25hbGl0eSAocG93ZXIgc2F2aW5nLCAuLi4pIG9mIHRoZQorCSAgZnJhbWVidWZmZXIgdG8gYXZvaWQgbmVnYXRpdmUgaW1wYWN0IG9uIHRoZSBPcGVuQ2hyb21lIFggc2VydmVyLgorCSAgSWYgeW91IHVzZSBhbnkgWCBzZXJ2ZXIgb3RoZXIgdGhhbiBmYmRldiB5b3Ugc2hvdWxkIGVuYWJsZSB0aGlzCisJICBvdGhlcndpc2UgaXQgc2hvdWxkIGJlIHNhZmUgdG8gZGlzYWJsZSBpdCBhbmQgYWxsb3cgdXNpbmcgYWxsCisJICBmZWF0dXJlcy4KKwogZW5kaWYKIAogY29uZmlnIEZCX05FT01BR0lDCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sdHYzNTBxdi5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbHR2MzUwcXYuYwppbmRleCBkZDBlODRhLi5jY2E0M2MwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sdHYzNTBxdi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2x0djM1MHF2LmMKQEAgLTMzMyw3ICszMzMsNyBAQAogbW9kdWxlX2luaXQobHR2MzUwcXZfaW5pdCk7CiBtb2R1bGVfZXhpdChsdHYzNTBxdl9leGl0KTsKIAotTU9EVUxFX0FVVEhPUigiSGFhdmFyZCBTa2lubmVtb2VuIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJIYWF2YXJkIFNraW5uZW1vZW4gKEF0bWVsKSIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTYW1zdW5nIExUVjM1MFFWIExDRCBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BTElBUygic3BpOmx0djM1MHF2Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvbmV3cG9ydF9jb24uYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9uZXdwb3J0X2Nvbi5jCmluZGV4IDM3NzI0MzMuLjkzMzE3YjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9uZXdwb3J0X2Nvbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9uZXdwb3J0X2Nvbi5jCkBAIC02LDcgKzYsNyBAQAogICogCiAgKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiBzZ2ljb25zLmMgYW5kIGNvbnNfbmV3cG9ydC4KICAqIAotICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZG1AZW5nci5zZ2kuY29tKQorICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkKICAqIENvcHlyaWdodCAoQykgMTk5NyBNaWd1ZWwgZGUgSWNhemEgKG1pZ3VlbEBudWNsZWN1LnVuYW0ubXgpCiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpLmMgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpLmMKaW5kZXggYjY2ZDg2YS4uMTc4YjA3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tc20vbWRkaS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kZGkuYwpAQCAtNjc5LDcgKzY3OSw3IEBACiAJCXByaW50ayhLRVJOX0VSUiAibWRkaTogbm8gYXNzb2NpYXRlZCBtZW0gcmVzb3VyY2UhXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW1kZGktPmJhc2UgPSBpb3JlbWFwKHJlc291cmNlLT5zdGFydCwgcmVzb3VyY2UtPmVuZCAtIHJlc291cmNlLT5zdGFydCk7CisJbWRkaS0+YmFzZSA9IGlvcmVtYXAocmVzb3VyY2UtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlc291cmNlKSk7CiAJaWYgKCFtZGRpLT5iYXNlKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibWRkaTogZmFpbGVkIHRvIHJlbWFwIGJhc2UhXG4iKTsKIAkJcmV0ID0gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbXhzZmIuYyBiL2RyaXZlcnMvdmlkZW8vbXhzZmIuYwppbmRleCA3ZDAyODQ4Li4wYjJmMmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL214c2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9teHNmYi5jCkBAIC00MDEsNyArNDAxLDcgQEAKIAl3cml0ZWwoQ1RSTDFfRklGT19DTEVBUiwgaG9zdC0+YmFzZSArIExDRENfQ1RSTDEgKyBSRUdfU0VUKTsKIAogCWN0cmwgPSBDVFJMX0JZUEFTU19DT1VOVCB8IENUUkxfTUFTVEVSIHwKLQkJQ1RSTF9TRVRfQlVTX1dJRFRIKGhvc3QtPmxkX2ludGZfd2lkdGgpOzsKKwkJQ1RSTF9TRVRfQlVTX1dJRFRIKGhvc3QtPmxkX2ludGZfd2lkdGgpOwogCiAJc3dpdGNoIChmYl9pbmZvLT52YXIuYml0c19wZXJfcGl4ZWwpIHsKIAljYXNlIDE2OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby91ZGxmYi5jIGIvZHJpdmVycy92aWRlby91ZGxmYi5jCmluZGV4IDY4MDQxZDkuLjY5NTA2NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdWRsZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3VkbGZiLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mYi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPHZpZGVvL3VkbGZiLmg+CiAjaW5jbHVkZSAiZWRpZC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvTWFrZWZpbGUgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9NYWtlZmlsZQppbmRleCA5NmYwMWVlLi41MTA4MTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9NYWtlZmlsZQpAQCAtNiw0ICs2LDQgQEAKIAogdmlhZmIteQk6PXZpYWZiZGV2Lm8gaHcubyB2aWFfaTJjLm8gZHZpLm8gbGNkLm8gaW9jdGwubyBhY2NlbC5vIFwKIAl2aWFfdXRpbGl0eS5vIHZ0MTYzNi5vIGdsb2JhbC5vIHRibERQQVNldHRpbmcubyB2aWFtb2RlLm8gXAotCXZpYS1jb3JlLm8gdmlhLWdwaW8ubyB2aWFfbW9kZXNldHRpbmcubworCXZpYS1jb3JlLm8gdmlhLWdwaW8ubyB2aWFfbW9kZXNldHRpbmcubyB2aWFfY2xvY2subwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvY2hpcC5oIGIvZHJpdmVycy92aWRlby92aWEvY2hpcC5oCmluZGV4IDI5ZDcwMjQuLjNlYmYyMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL2NoaXAuaAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9jaGlwLmgKQEAgLTEzNywxNyArMTM3LDExIEBACiAJc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiBsdmRzX2NoaXBfaW5mbzI7CiB9OwogCi1zdHJ1Y3QgY3J0X3NldHRpbmdfaW5mb3JtYXRpb24gewotCWludCBpZ2FfcGF0aDsKLX07Ci0KIHN0cnVjdCB0bWRzX3NldHRpbmdfaW5mb3JtYXRpb24gewogCWludCBpZ2FfcGF0aDsKIAlpbnQgaF9hY3RpdmU7CiAJaW50IHZfYWN0aXZlOwogCWludCBtYXhfcGl4ZWxfY2xvY2s7Ci0JaW50IG1heF9ocmVzOwotCWludCBtYXhfdnJlczsKIH07CiAKIHN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvZHZpLmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9kdmkuYwppbmRleCA0MWNhMTk4Li5iMWYzNjQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS9kdmkuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9kdmkuYwpAQCAtMjgsMTcgKzI4LDExIEBACiBzdGF0aWMgdm9pZCBfX2RldmluaXQgZHZpX2dldF9wYW5lbF9zaXplX2Zyb21fRERDdjEoCiAJc3RydWN0IHRtZHNfY2hpcF9pbmZvcm1hdGlvbiAqdG1kc19jaGlwLAogCXN0cnVjdCB0bWRzX3NldHRpbmdfaW5mb3JtYXRpb24gKnRtZHNfc2V0dGluZyk7Ci1zdGF0aWMgdm9pZCBfX2RldmluaXQgZHZpX2dldF9wYW5lbF9zaXplX2Zyb21fRERDdjIoCi0Jc3RydWN0IHRtZHNfY2hpcF9pbmZvcm1hdGlvbiAqdG1kc19jaGlwLAotCXN0cnVjdCB0bWRzX3NldHRpbmdfaW5mb3JtYXRpb24gKnRtZHNfc2V0dGluZyk7CiBzdGF0aWMgaW50IHZpYWZiX2R2aV9xdWVyeV9FRElEKHZvaWQpOwogCi1zdGF0aWMgaW50IGNoZWNrX3RtZHNfY2hpcChpbnQgZGV2aWNlX2lkX3N1YmFkZHIsIGludCBkZXZpY2VfaWQpCitzdGF0aWMgaW5saW5lIGJvb2wgY2hlY2tfdG1kc19jaGlwKGludCBkZXZpY2VfaWRfc3ViYWRkciwgaW50IGRldmljZV9pZCkKIHsKLQlpZiAodG1kc19yZWdpc3Rlcl9yZWFkKGRldmljZV9pZF9zdWJhZGRyKSA9PSBkZXZpY2VfaWQpCi0JCXJldHVybiBPSzsKLQllbHNlCi0JCXJldHVybiBGQUlMOworCXJldHVybiB0bWRzX3JlZ2lzdGVyX3JlYWQoZGV2aWNlX2lkX3N1YmFkZHIpID09IGRldmljZV9pZDsKIH0KIAogdm9pZCBfX2RldmluaXQgdmlhZmJfaW5pdF9kdmlfc2l6ZShzdHJ1Y3QgdG1kc19jaGlwX2luZm9ybWF0aW9uICp0bWRzX2NoaXAsCkBAIC00NywyMiArNDEsMTMgQEAKIAlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9pbml0X2R2aV9zaXplKClcbiIpOwogCiAJdmlhZmJfZHZpX3NlbnNlKCk7Ci0Jc3dpdGNoICh2aWFmYl9kdmlfcXVlcnlfRURJRCgpKSB7Ci0JY2FzZSAxOgorCWlmICh2aWFmYl9kdmlfcXVlcnlfRURJRCgpID09IDEpCiAJCWR2aV9nZXRfcGFuZWxfc2l6ZV9mcm9tX0REQ3YxKHRtZHNfY2hpcCwgdG1kc19zZXR0aW5nKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlkdmlfZ2V0X3BhbmVsX3NpemVfZnJvbV9EREN2Mih0bWRzX2NoaXAsIHRtZHNfc2V0dGluZyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgInZpYWZiX2luaXRfZHZpX3NpemU6IERWSSBwYW5lbCBzaXplIHVuZGV0ZWN0ZWQhXG4iKTsKLQkJYnJlYWs7Ci0JfQogCiAJcmV0dXJuOwogfQogCi1pbnQgX19kZXZpbml0IHZpYWZiX3RtZHNfdHJhc21pdHRlcl9pZGVudGlmeSh2b2lkKQorYm9vbCBfX2RldmluaXQgdmlhZmJfdG1kc190cmFzbWl0dGVyX2lkZW50aWZ5KHZvaWQpCiB7CiAJdW5zaWduZWQgY2hhciBzcjJhID0gMCwgc3IxZSA9IDAsIHNyM2UgPSAwOwogCkBAIC0xMDEsNyArODYsNyBAQAogCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+CiAJCXRtZHNfY2hpcF9pbmZvLnRtZHNfY2hpcF9zbGF2ZV9hZGRyID0gVlQxNjMyX1RNRFNfSTJDX0FERFI7CiAJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby5pMmNfcG9ydCA9IFZJQV9QT1JUXzMxOwotCWlmIChjaGVja190bWRzX2NoaXAoVlQxNjMyX0RFVklDRV9JRF9SRUcsIFZUMTYzMl9ERVZJQ0VfSUQpICE9IEZBSUwpIHsKKwlpZiAoY2hlY2tfdG1kc19jaGlwKFZUMTYzMl9ERVZJQ0VfSURfUkVHLCBWVDE2MzJfREVWSUNFX0lEKSkgewogCQkvKgogCQkgKiBDdXJyZW50bHkgb25seSBzdXBwb3J0IDEyYml0cyxkdWFsIGVkZ2UsYWRkIDI0Yml0cyBtb2RlIGxhdGVyCiAJCSAqLwpAQCAtMTEyLDExICs5NywxMCBAQAogCQkJICB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLnRtZHNfY2hpcF9uYW1lKTsKIAkJREVCVUdfTVNHKEtFUk5fSU5GTyAiXG4gJTJkIiwKIAkJCSAgdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby5pMmNfcG9ydCk7Ci0JCXJldHVybiBPSzsKKwkJcmV0dXJuIHRydWU7CiAJfSBlbHNlIHsKIAkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby5pMmNfcG9ydCA9IFZJQV9QT1JUXzJDOwotCQlpZiAoY2hlY2tfdG1kc19jaGlwKFZUMTYzMl9ERVZJQ0VfSURfUkVHLCBWVDE2MzJfREVWSUNFX0lEKQotCQkgICAgIT0gRkFJTCkgeworCQlpZiAoY2hlY2tfdG1kc19jaGlwKFZUMTYzMl9ERVZJQ0VfSURfUkVHLCBWVDE2MzJfREVWSUNFX0lEKSkgewogCQkJdG1kc19yZWdpc3Rlcl93cml0ZSgweDA4LCAweDNiKTsKIAkJCURFQlVHX01TRyhLRVJOX0lORk8gIlxuIFZUMTYzMiBUTURTICEgXG4iKTsKIAkJCURFQlVHX01TRyhLRVJOX0lORk8gIlxuICUyZCIsCkBAIC0xMjUsNyArMTA5LDcgQEAKIAkJCURFQlVHX01TRyhLRVJOX0lORk8gIlxuICUyZCIsCiAJCQkJICB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPgogCQkJCSAgdG1kc19jaGlwX2luZm8uaTJjX3BvcnQpOwotCQkJcmV0dXJuIE9LOworCQkJcmV0dXJuIHRydWU7CiAJCX0KIAl9CiAKQEAgLTEzNSw3ICsxMTksNyBAQAogCSAgICAoKHZpYWZiX2Rpc3BsYXlfaGFyZHdhcmVfbGF5b3V0ID09IEhXX0xBWU9VVF9EVklfT05MWSkgfHwKIAkgICAgICh2aWFmYl9kaXNwbGF5X2hhcmR3YXJlX2xheW91dCA9PSBIV19MQVlPVVRfTENEX0RWSSkpKSB7CiAJCURFQlVHX01TRyhLRVJOX0lORk8gIlxuIEludGVncmF0ZWQgVE1EUyAhIFxuIik7Ci0JCXJldHVybiBPSzsKKwkJcmV0dXJuIHRydWU7CiAJfQogCiAJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpIHsKQEAgLTE1OSw3ICsxNDMsNyBAQAogCQl0bWRzX2NoaXBfaW5mby50bWRzX2NoaXBfbmFtZSA9IE5PTl9UTURTX1RSQU5TTUlUVEVSOwogCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8uCiAJCXRtZHNfY2hpcF9zbGF2ZV9hZGRyID0gVlQxNjMyX1RNRFNfSTJDX0FERFI7Ci0JcmV0dXJuIEZBSUw7CisJcmV0dXJuIGZhbHNlOwogfQogCiBzdGF0aWMgdm9pZCB0bWRzX3JlZ2lzdGVyX3dyaXRlKGludCBpbmRleCwgdTggZGF0YSkKQEAgLTMwNiwxMiArMjkwLDcgQEAKIAkJcmV0dXJuIEVESURfVkVSU0lPTl8xOwkvKiBGb3VuZCBFRElEMSBUYWJsZSAqLwogCX0KIAotCWRhdGEwID0gKHU4KSB0bWRzX3JlZ2lzdGVyX3JlYWQoMHgwMCk7Ci0JdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby50bWRzX2NoaXBfc2xhdmVfYWRkciA9IHJlc3RvcmU7Ci0JaWYgKGRhdGEwID09IDB4MjApCi0JCXJldHVybiBFRElEX1ZFUlNJT05fMjsJLyogRm91bmQgRURJRDIgVGFibGUgKi8KLQllbHNlCi0JCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gZmFsc2U7CiB9CiAKIC8qIEdldCBQYW5lbCBTaXplIFVzaW5nIEVESUQxIFRhYmxlICovCkBAIC0zMTksNTAgKzI5OCwxNSBAQAogCXN0cnVjdCB0bWRzX2NoaXBfaW5mb3JtYXRpb24gKnRtZHNfY2hpcCwKIAlzdHJ1Y3QgdG1kc19zZXR0aW5nX2luZm9ybWF0aW9uICp0bWRzX3NldHRpbmcpCiB7Ci0JaW50IGksIG1heF9oID0gMCwgdG1wLCByZXN0b3JlOwotCXVuc2lnbmVkIGNoYXIgckRhdGE7CisJaW50IGksIHJlc3RvcmU7CiAJdW5zaWduZWQgY2hhciBFRElEX0RBVEFbMThdOwogCiAJREVCVUdfTVNHKEtFUk5fSU5GTyAiXG4gZHZpX2dldF9wYW5lbF9zaXplX2Zyb21fRERDdjEgXG4iKTsKIAogCXJlc3RvcmUgPSB0bWRzX2NoaXAtPnRtZHNfY2hpcF9zbGF2ZV9hZGRyOwogCXRtZHNfY2hpcC0+dG1kc19jaGlwX3NsYXZlX2FkZHIgPSAweEEwOwotCi0JckRhdGEgPSB0bWRzX3JlZ2lzdGVyX3JlYWQoMHgyMyk7Ci0JaWYgKHJEYXRhICYgMHgzQykKLQkJbWF4X2ggPSA2NDA7Ci0JaWYgKHJEYXRhICYgMHhDMCkKLQkJbWF4X2ggPSA3MjA7Ci0JaWYgKHJEYXRhICYgMHgwMykKLQkJbWF4X2ggPSA4MDA7Ci0KLQlyRGF0YSA9IHRtZHNfcmVnaXN0ZXJfcmVhZCgweDI0KTsKLQlpZiAockRhdGEgJiAweEMwKQotCQltYXhfaCA9IDgwMDsKLQlpZiAockRhdGEgJiAweDFFKQotCQltYXhfaCA9IDEwMjQ7Ci0JaWYgKHJEYXRhICYgMHgwMSkKLQkJbWF4X2ggPSAxMjgwOwotCiAJZm9yIChpID0gMHgyNTsgaSA8IDB4NkQ7IGkrKykgewogCQlzd2l0Y2ggKGkpIHsKLQkJY2FzZSAweDI2OgotCQljYXNlIDB4Mjg6Ci0JCWNhc2UgMHgyQToKLQkJY2FzZSAweDJDOgotCQljYXNlIDB4MkU6Ci0JCWNhc2UgMHgzMDoKLQkJY2FzZSAweDMyOgotCQljYXNlIDB4MzQ6Ci0JCQlyRGF0YSA9IHRtZHNfcmVnaXN0ZXJfcmVhZChpKTsKLQkJCWlmIChyRGF0YSA9PSAxKQotCQkJCWJyZWFrOwotCQkJLyogZGF0YSA9IChkYXRhICsgMzEpICogOCAqLwotCQkJdG1wID0gKHJEYXRhICsgMzEpIDw8IDM7Ci0JCQlpZiAodG1wID4gbWF4X2gpCi0JCQkJbWF4X2ggPSB0bXA7Ci0JCQlicmVhazsKLQogCQljYXNlIDB4MzY6CiAJCWNhc2UgMHg0ODoKIAkJY2FzZSAweDVBOgpAQCAtMzgzLDkxICszMjcsMTEgQEAKIAkJfQogCX0KIAotCXRtZHNfc2V0dGluZy0+bWF4X2hyZXMgPSBtYXhfaDsKLQlzd2l0Y2ggKG1heF9oKSB7Ci0JY2FzZSA2NDA6Ci0JCXRtZHNfc2V0dGluZy0+bWF4X3ZyZXMgPSA0ODA7Ci0JCWJyZWFrOwotCWNhc2UgODAwOgotCQl0bWRzX3NldHRpbmctPm1heF92cmVzID0gNjAwOwotCQlicmVhazsKLQljYXNlIDEwMjQ6Ci0JCXRtZHNfc2V0dGluZy0+bWF4X3ZyZXMgPSA3Njg7Ci0JCWJyZWFrOwotCWNhc2UgMTI4MDoKLQkJdG1kc19zZXR0aW5nLT5tYXhfdnJlcyA9IDEwMjQ7Ci0JCWJyZWFrOwotCWNhc2UgMTQwMDoKLQkJdG1kc19zZXR0aW5nLT5tYXhfdnJlcyA9IDEwNTA7Ci0JCWJyZWFrOwotCWNhc2UgMTQ0MDoKLQkJdG1kc19zZXR0aW5nLT5tYXhfdnJlcyA9IDEwNTA7Ci0JCWJyZWFrOwotCWNhc2UgMTYwMDoKLQkJdG1kc19zZXR0aW5nLT5tYXhfdnJlcyA9IDEyMDA7Ci0JCWJyZWFrOwotCWNhc2UgMTkyMDoKLQkJdG1kc19zZXR0aW5nLT5tYXhfdnJlcyA9IDEwODA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURFQlVHX01TRyhLRVJOX0lORk8gIlVua25vd24gcGFuZWwgc2l6ZSBtYXggcmVzb2x1dGlvbiA9ICVkICEgIgotCQkJCQkgInNldCBkZWZhdWx0IHBhbmVsIHNpemUuXG4iLCBtYXhfaCk7Ci0JCWJyZWFrOwotCX0KLQogCURFQlVHX01TRyhLRVJOX0lORk8gIkRWSSBtYXggcGl4ZWxjbG9jayA9ICVkXG4iLAogCQl0bWRzX3NldHRpbmctPm1heF9waXhlbF9jbG9jayk7CiAJdG1kc19jaGlwLT50bWRzX2NoaXBfc2xhdmVfYWRkciA9IHJlc3RvcmU7CiB9CiAKLS8qIEdldCBQYW5lbCBTaXplIFVzaW5nIEVESUQyIFRhYmxlICovCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgZHZpX2dldF9wYW5lbF9zaXplX2Zyb21fRERDdjIoCi0Jc3RydWN0IHRtZHNfY2hpcF9pbmZvcm1hdGlvbiAqdG1kc19jaGlwLAotCXN0cnVjdCB0bWRzX3NldHRpbmdfaW5mb3JtYXRpb24gKnRtZHNfc2V0dGluZykKLXsKLQlpbnQgcmVzdG9yZTsKLQl1bnNpZ25lZCBjaGFyIFJfQnVmZmVyWzJdOwotCi0JREVCVUdfTVNHKEtFUk5fSU5GTyAiXG4gZHZpX2dldF9wYW5lbF9zaXplX2Zyb21fRERDdjIgXG4iKTsKLQotCXJlc3RvcmUgPSB0bWRzX2NoaXAtPnRtZHNfY2hpcF9zbGF2ZV9hZGRyOwotCXRtZHNfY2hpcC0+dG1kc19jaGlwX3NsYXZlX2FkZHIgPSAweEEyOwotCi0JLyogSG9yaXpvbnRhbDogMHg3NiwgMHg3NyAqLwotCXRtZHNfcmVnaXN0ZXJfcmVhZF9ieXRlcygweDc2LCBSX0J1ZmZlciwgMik7Ci0JdG1kc19zZXR0aW5nLT5tYXhfaHJlcyA9IFJfQnVmZmVyWzBdICsgKFJfQnVmZmVyWzFdIDw8IDgpOwotCi0Jc3dpdGNoICh0bWRzX3NldHRpbmctPm1heF9ocmVzKSB7Ci0JY2FzZSA2NDA6Ci0JCXRtZHNfc2V0dGluZy0+bWF4X3ZyZXMgPSA0ODA7Ci0JCWJyZWFrOwotCWNhc2UgODAwOgotCQl0bWRzX3NldHRpbmctPm1heF92cmVzID0gNjAwOwotCQlicmVhazsKLQljYXNlIDEwMjQ6Ci0JCXRtZHNfc2V0dGluZy0+bWF4X3ZyZXMgPSA3Njg7Ci0JCWJyZWFrOwotCWNhc2UgMTI4MDoKLQkJdG1kc19zZXR0aW5nLT5tYXhfdnJlcyA9IDEwMjQ7Ci0JCWJyZWFrOwotCWNhc2UgMTQwMDoKLQkJdG1kc19zZXR0aW5nLT5tYXhfdnJlcyA9IDEwNTA7Ci0JCWJyZWFrOwotCWNhc2UgMTQ0MDoKLQkJdG1kc19zZXR0aW5nLT5tYXhfdnJlcyA9IDEwNTA7Ci0JCWJyZWFrOwotCWNhc2UgMTYwMDoKLQkJdG1kc19zZXR0aW5nLT5tYXhfdnJlcyA9IDEyMDA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURFQlVHX01TRyhLRVJOX0lORk8gIlVua25vd24gcGFuZWwgc2l6ZSBtYXggcmVzb2x1dGlvbiA9ICVkISAiCi0JCQkic2V0IGRlZmF1bHQgcGFuZWwgc2l6ZS5cbiIsIHRtZHNfc2V0dGluZy0+bWF4X2hyZXMpOwotCQlicmVhazsKLQl9Ci0KLQl0bWRzX2NoaXAtPnRtZHNfY2hpcF9zbGF2ZV9hZGRyID0gcmVzdG9yZTsKLX0KLQogLyogSWYgRGlzYWJsZSBEVkksIHR1cm4gb2ZmIHBhZCAqLwogdm9pZCB2aWFmYl9kdmlfZGlzYWJsZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvZHZpLmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS9kdmkuaAppbmRleCAyYzUyNWMwLi5mNDczZGQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS9kdmkuaAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9kdmkuaApAQCAtNTYsNyArNTYsNyBAQAogaW50IHZpYWZiX2R2aV9zZW5zZSh2b2lkKTsKIHZvaWQgdmlhZmJfZHZpX2Rpc2FibGUodm9pZCk7CiB2b2lkIHZpYWZiX2R2aV9lbmFibGUodm9pZCk7Ci1pbnQgX19kZXZpbml0IHZpYWZiX3RtZHNfdHJhc21pdHRlcl9pZGVudGlmeSh2b2lkKTsKK2Jvb2wgX19kZXZpbml0IHZpYWZiX3RtZHNfdHJhc21pdHRlcl9pZGVudGlmeSh2b2lkKTsKIHZvaWQgX19kZXZpbml0IHZpYWZiX2luaXRfZHZpX3NpemUoc3RydWN0IHRtZHNfY2hpcF9pbmZvcm1hdGlvbiAqdG1kc19jaGlwLAogCXN0cnVjdCB0bWRzX3NldHRpbmdfaW5mb3JtYXRpb24gKnRtZHNfc2V0dGluZyk7CiB2b2lkIHZpYWZiX2R2aV9zZXRfbW9kZShzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgKnZpZGVvTW9kZSwgaW50IG1vZGVfYnBwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvZ2xvYmFsLmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9nbG9iYWwuYwppbmRleCAxZWU1MTFiLi5lMTBkODI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS9nbG9iYWwuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9nbG9iYWwuYwpAQCAtNDAsMTAgKzQwLDYgQEAKIGludCB2aWFmYl9ob3RwbHVnX2JwcCA9IDMyOwogaW50IHZpYWZiX2hvdHBsdWdfcmVmcmVzaCA9IDYwOwogaW50IHZpYWZiX3ByaW1hcnlfZGV2ID0gTm9uZV9EZXZpY2U7Ci11bnNpZ25lZCBpbnQgdmlhZmJfc2Vjb25kX3hyZXMgPSA2NDA7Ci11bnNpZ25lZCBpbnQgdmlhZmJfc2Vjb25kX3lyZXMgPSA0ODA7Ci11bnNpZ25lZCBpbnQgdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeHJlczsKLXVuc2lnbmVkIGludCB2aWFmYl9zZWNvbmRfdmlydHVhbF95cmVzOwogaW50IHZpYWZiX2xjZF9wYW5lbF9pZCA9IExDRF9QQU5FTF9JRF9NQVhJTVVNICsgMTsKIHN0cnVjdCBmYl9pbmZvICp2aWFmYmluZm87CiBzdHJ1Y3QgZmJfaW5mbyAqdmlhZmJpbmZvMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2dsb2JhbC5oIGIvZHJpdmVycy92aWRlby92aWEvZ2xvYmFsLmgKaW5kZXggMzhlZjVhYy4uZmY5NjlkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvZ2xvYmFsLmgKKysrIGIvZHJpdmVycy92aWRlby92aWEvZ2xvYmFsLmgKQEAgLTczLDggKzczLDYgQEAKIGV4dGVybiBpbnQgdmlhZmJfaG90cGx1Z19yZWZyZXNoOwogZXh0ZXJuIGludCB2aWFmYl9wcmltYXJ5X2RldjsKIAotZXh0ZXJuIHVuc2lnbmVkIGludCB2aWFmYl9zZWNvbmRfeHJlczsKLWV4dGVybiB1bnNpZ25lZCBpbnQgdmlhZmJfc2Vjb25kX3lyZXM7CiBleHRlcm4gaW50IHZpYWZiX2xjZF9wYW5lbF9pZDsKIAogI2VuZGlmIC8qIF9fR0xPQkFMX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvaHcuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL2h3LmMKaW5kZXggZGM0Yzc3OC4uNDdiMTM1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvaHcuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9ody5jCkBAIC0yMCwyNzQgKzIwLDg0IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3ZpYS1jb3JlLmg+CisjaW5jbHVkZSA8YXNtL29scGMuaD4KICNpbmNsdWRlICJnbG9iYWwuaCIKKyNpbmNsdWRlICJ2aWFfY2xvY2suaCIKIAotc3RhdGljIHN0cnVjdCBwbGxfY29uZmlnIGNsZTI2Nl9wbGxfY29uZmlnW10gPSB7Ci0JezE5LCA0LCAwfSwKLQl7MjYsIDUsIDB9LAotCXsyOCwgNSwgMH0sCi0JezMxLCA1LCAwfSwKLQl7MzMsIDUsIDB9LAotCXs1NSwgNSwgMH0sCi0JezEwMiwgNSwgMH0sCi0JezUzLCA2LCAwfSwKLQl7OTIsIDYsIDB9LAotCXs5OCwgNiwgMH0sCi0JezExMiwgNiwgMH0sCi0JezQxLCA3LCAwfSwKLQl7NjAsIDcsIDB9LAotCXs5OSwgNywgMH0sCi0JezEwMCwgNywgMH0sCi0JezgzLCA4LCAwfSwKLQl7ODYsIDgsIDB9LAotCXsxMDgsIDgsIDB9LAotCXs4NywgOSwgMH0sCi0JezExOCwgOSwgMH0sCi0Jezk1LCAxMiwgMH0sCi0JezExNSwgMTIsIDB9LAotCXsxMDgsIDEzLCAwfSwKLQl7ODMsIDE3LCAwfSwKLQl7NjcsIDIwLCAwfSwKLQl7ODYsIDIwLCAwfSwKLQl7OTgsIDIwLCAwfSwKLQl7MTIxLCAyNCwgMH0sCi0Jezk5LCAyOSwgMH0sCi0JezMzLCAzLCAxfSwKLQl7MTUsIDQsIDF9LAotCXsyMywgNCwgMX0sCi0JezM3LCA1LCAxfSwKLQl7ODMsIDUsIDF9LAotCXs4NSwgNSwgMX0sCi0Jezk0LCA1LCAxfSwKLQl7MTAzLCA1LCAxfSwKLQl7MTA5LCA1LCAxfSwKLQl7MTEzLCA1LCAxfSwKLQl7MTIxLCA1LCAxfSwKLQl7ODIsIDYsIDF9LAotCXszMSwgNywgMX0sCi0JezU1LCA3LCAxfSwKLQl7ODQsIDcsIDF9LAotCXs4MywgOCwgMX0sCi0Jezc2LCA5LCAxfSwKLQl7MTI3LCA5LCAxfSwKLQl7MzMsIDQsIDJ9LAotCXs3NSwgNCwgMn0sCi0JezExOSwgNCwgMn0sCi0JezEyMSwgNCwgMn0sCi0JezkxLCA1LCAyfSwKLQl7MTE4LCA1LCAyfSwKLQl7ODMsIDYsIDJ9LAotCXsxMDksIDYsIDJ9LAotCXs5MCwgNywgMn0sCi0JezkzLCAyLCAzfSwKLQl7NTMsIDMsIDN9LAotCXs3MywgNCwgM30sCi0Jezg5LCA0LCAzfSwKLQl7MTA1LCA0LCAzfSwKLQl7MTE3LCA0LCAzfSwKLQl7MTAxLCA1LCAzfSwKLQl7MTIxLCA1LCAzfSwKLQl7MTI3LCA1LCAzfSwKLQl7OTksIDcsIDN9CitzdGF0aWMgc3RydWN0IHBsbF9saW1pdCBjbGUyNjZfcGxsX2xpbWl0c1tdID0geworCXsxOSwgMTksIDQsIDB9LAorCXsyNiwgMTAyLCA1LCAwfSwKKwl7NTMsIDExMiwgNiwgMH0sCisJezQxLCAxMDAsIDcsIDB9LAorCXs4MywgMTA4LCA4LCAwfSwKKwl7ODcsIDExOCwgOSwgMH0sCisJezk1LCAxMTUsIDEyLCAwfSwKKwl7MTA4LCAxMDgsIDEzLCAwfSwKKwl7ODMsIDgzLCAxNywgMH0sCisJezY3LCA5OCwgMjAsIDB9LAorCXsxMjEsIDEyMSwgMjQsIDB9LAorCXs5OSwgOTksIDI5LCAwfSwKKwl7MzMsIDMzLCAzLCAxfSwKKwl7MTUsIDIzLCA0LCAxfSwKKwl7MzcsIDEyMSwgNSwgMX0sCisJezgyLCA4MiwgNiwgMX0sCisJezMxLCA4NCwgNywgMX0sCisJezgzLCA4MywgOCwgMX0sCisJezc2LCAxMjcsIDksIDF9LAorCXszMywgMTIxLCA0LCAyfSwKKwl7OTEsIDExOCwgNSwgMn0sCisJezgzLCAxMDksIDYsIDJ9LAorCXs5MCwgOTAsIDcsIDJ9LAorCXs5MywgOTMsIDIsIDN9LAorCXs1MywgNTMsIDMsIDN9LAorCXs3MywgMTE3LCA0LCAzfSwKKwl7MTAxLCAxMjcsIDUsIDN9LAorCXs5OSwgOTksIDcsIDN9CiB9OwogCi1zdGF0aWMgc3RydWN0IHBsbF9jb25maWcgazgwMF9wbGxfY29uZmlnW10gPSB7Ci0JezIyLCAyLCAwfSwKLQl7MjgsIDMsIDB9LAotCXs4MSwgMywgMX0sCi0Jezg1LCAzLCAxfSwKLQl7OTgsIDMsIDF9LAotCXsxMTIsIDMsIDF9LAotCXs4NiwgNCwgMX0sCi0JezE2NiwgNCwgMX0sCi0JezEwOSwgNSwgMX0sCi0JezExMywgNSwgMX0sCi0JezEyMSwgNSwgMX0sCi0JezEzMSwgNSwgMX0sCi0JezE0MywgNSwgMX0sCi0JezE1MywgNSwgMX0sCi0JezY2LCAzLCAyfSwKLQl7NjgsIDMsIDJ9LAotCXs5NSwgMywgMn0sCi0JezEwNiwgMywgMn0sCi0JezExNiwgMywgMn0sCi0JezkzLCA0LCAyfSwKLQl7MTE5LCA0LCAyfSwKLQl7MTIxLCA0LCAyfSwKLQl7MTMzLCA0LCAyfSwKLQl7MTM3LCA0LCAyfSwKLQl7MTE3LCA1LCAyfSwKLQl7MTE4LCA1LCAyfSwKLQl7MTIwLCA1LCAyfSwKLQl7MTI0LCA1LCAyfSwKLQl7MTMyLCA1LCAyfSwKLQl7MTM3LCA1LCAyfSwKLQl7MTQxLCA1LCAyfSwKLQl7MTY2LCA1LCAyfSwKLQl7MTcwLCA1LCAyfSwKLQl7MTkxLCA1LCAyfSwKLQl7MjA2LCA1LCAyfSwKLQl7MjA4LCA1LCAyfSwKLQl7MzAsIDIsIDN9LAotCXs2OSwgMywgM30sCi0JezgyLCAzLCAzfSwKLQl7ODMsIDMsIDN9LAotCXsxMDksIDMsIDN9LAotCXsxMTQsIDMsIDN9LAotCXsxMjUsIDMsIDN9LAotCXs4OSwgNCwgM30sCi0JezEwMywgNCwgM30sCi0JezExNywgNCwgM30sCi0JezEyNiwgNCwgM30sCi0JezE1MCwgNCwgM30sCi0JezE2MSwgNCwgM30sCi0JezEyMSwgNSwgM30sCi0JezEyNywgNSwgM30sCi0JezEzMSwgNSwgM30sCi0JezEzNCwgNSwgM30sCi0JezE0OCwgNSwgM30sCi0JezE2OSwgNSwgM30sCi0JezE3MiwgNSwgM30sCi0JezE4MiwgNSwgM30sCi0JezE5NSwgNSwgM30sCi0JezE5NiwgNSwgM30sCi0JezIwOCwgNSwgM30sCi0JezY2LCAyLCA0fSwKLQl7ODUsIDMsIDR9LAotCXsxNDEsIDQsIDR9LAotCXsxNDYsIDQsIDR9LAotCXsxNjEsIDQsIDR9LAotCXsxNzcsIDUsIDR9CitzdGF0aWMgc3RydWN0IHBsbF9saW1pdCBrODAwX3BsbF9saW1pdHNbXSA9IHsKKwl7MjIsIDIyLCAyLCAwfSwKKwl7MjgsIDI4LCAzLCAwfSwKKwl7ODEsIDExMiwgMywgMX0sCisJezg2LCAxNjYsIDQsIDF9LAorCXsxMDksIDE1MywgNSwgMX0sCisJezY2LCAxMTYsIDMsIDJ9LAorCXs5MywgMTM3LCA0LCAyfSwKKwl7MTE3LCAyMDgsIDUsIDJ9LAorCXszMCwgMzAsIDIsIDN9LAorCXs2OSwgMTI1LCAzLCAzfSwKKwl7ODksIDE2MSwgNCwgM30sCisJezEyMSwgMjA4LCA1LCAzfSwKKwl7NjYsIDY2LCAyLCA0fSwKKwl7ODUsIDg1LCAzLCA0fSwKKwl7MTQxLCAxNjEsIDQsIDR9LAorCXsxNzcsIDE3NywgNSwgNH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxsX2NvbmZpZyBjeDcwMF9wbGxfY29uZmlnW10gPSB7Ci0Jezk4LCAzLCAxfSwKLQl7ODYsIDQsIDF9LAotCXsxMDksIDUsIDF9LAotCXsxMTAsIDUsIDF9LAotCXsxMTMsIDUsIDF9LAotCXsxMjEsIDUsIDF9LAotCXsxMzEsIDUsIDF9LAotCXsxMzUsIDUsIDF9LAotCXsxNDIsIDUsIDF9LAotCXsxNDMsIDUsIDF9LAotCXsxNTMsIDUsIDF9LAotCXsxODcsIDUsIDF9LAotCXsyMDgsIDUsIDF9LAotCXs2OCwgMiwgMn0sCi0Jezk1LCAzLCAyfSwKLQl7MTE2LCAzLCAyfSwKLQl7OTMsIDQsIDJ9LAotCXsxMTksIDQsIDJ9LAotCXsxMzMsIDQsIDJ9LAotCXsxMzcsIDQsIDJ9LAotCXsxNTEsIDQsIDJ9LAotCXsxNjYsIDQsIDJ9LAotCXsxMTAsIDUsIDJ9LAotCXsxMTIsIDUsIDJ9LAotCXsxMTcsIDUsIDJ9LAotCXsxMTgsIDUsIDJ9LAotCXsxMjAsIDUsIDJ9LAotCXsxMzIsIDUsIDJ9LAotCXsxMzcsIDUsIDJ9LAotCXsxNDEsIDUsIDJ9LAotCXsxNTEsIDUsIDJ9LAotCXsxNjYsIDUsIDJ9LAotCXsxNzUsIDUsIDJ9LAotCXsxOTEsIDUsIDJ9LAotCXsyMDYsIDUsIDJ9LAotCXsxNzQsIDcsIDJ9LAotCXs4MiwgMywgM30sCi0JezEwOSwgMywgM30sCi0JezExNywgNCwgM30sCi0JezE1MCwgNCwgM30sCi0JezE2MSwgNCwgM30sCi0JezExMiwgNSwgM30sCi0JezExNSwgNSwgM30sCi0JezEyMSwgNSwgM30sCi0JezEyNywgNSwgM30sCi0JezEyOSwgNSwgM30sCi0JezEzMSwgNSwgM30sCi0JezEzNCwgNSwgM30sCi0JezEzOCwgNSwgM30sCi0JezE0OCwgNSwgM30sCi0JezE1NywgNSwgM30sCi0JezE2OSwgNSwgM30sCi0JezE3MiwgNSwgM30sCi0JezE5MCwgNSwgM30sCi0JezE5NSwgNSwgM30sCi0JezE5NiwgNSwgM30sCi0JezIwOCwgNSwgM30sCi0JezE0MSwgNSwgNH0sCi0JezE1MCwgNSwgNH0sCi0JezE2NiwgNSwgNH0sCi0JezE3NiwgNSwgNH0sCi0JezE3NywgNSwgNH0sCi0JezE4MywgNSwgNH0sCi0JezIwMiwgNSwgNH0KK3N0YXRpYyBzdHJ1Y3QgcGxsX2xpbWl0IGN4NzAwX3BsbF9saW1pdHNbXSA9IHsKKwl7OTgsIDk4LCAzLCAxfSwKKwl7ODYsIDg2LCA0LCAxfSwKKwl7MTA5LCAyMDgsIDUsIDF9LAorCXs2OCwgNjgsIDIsIDJ9LAorCXs5NSwgMTE2LCAzLCAyfSwKKwl7OTMsIDE2NiwgNCwgMn0sCisJezExMCwgMjA2LCA1LCAyfSwKKwl7MTc0LCAxNzQsIDcsIDJ9LAorCXs4MiwgMTA5LCAzLCAzfSwKKwl7MTE3LCAxNjEsIDQsIDN9LAorCXsxMTIsIDIwOCwgNSwgM30sCisJezE0MSwgMjAyLCA1LCA0fQogfTsKIAotc3RhdGljIHN0cnVjdCBwbGxfY29uZmlnIHZ4ODU1X3BsbF9jb25maWdbXSA9IHsKLQl7ODYsIDQsIDF9LAotCXsxMDgsIDUsIDF9LAotCXsxMTAsIDUsIDF9LAotCXsxMTMsIDUsIDF9LAotCXsxMjEsIDUsIDF9LAotCXsxMzEsIDUsIDF9LAotCXsxMzUsIDUsIDF9LAotCXsxNDIsIDUsIDF9LAotCXsxNDMsIDUsIDF9LAotCXsxNTMsIDUsIDF9LAotCXsxNjQsIDUsIDF9LAotCXsxODcsIDUsIDF9LAotCXsyMDgsIDUsIDF9LAotCXsxMTAsIDUsIDJ9LAotCXsxMTIsIDUsIDJ9LAotCXsxMTcsIDUsIDJ9LAotCXsxMTgsIDUsIDJ9LAotCXsxMjQsIDUsIDJ9LAotCXsxMzIsIDUsIDJ9LAotCXsxMzcsIDUsIDJ9LAotCXsxNDEsIDUsIDJ9LAotCXsxNDksIDUsIDJ9LAotCXsxNTEsIDUsIDJ9LAotCXsxNTksIDUsIDJ9LAotCXsxNjYsIDUsIDJ9LAotCXsxNjcsIDUsIDJ9LAotCXsxNzIsIDUsIDJ9LAotCXsxODksIDUsIDJ9LAotCXsxOTEsIDUsIDJ9LAotCXsxOTQsIDUsIDJ9LAotCXsyMDYsIDUsIDJ9LAotCXsyMDgsIDUsIDJ9LAotCXs4MywgMywgM30sCi0Jezg4LCAzLCAzfSwKLQl7MTA5LCAzLCAzfSwKLQl7MTEyLCAzLCAzfSwKLQl7MTAzLCA0LCAzfSwKLQl7MTA1LCA0LCAzfSwKLQl7MTYxLCA0LCAzfSwKLQl7MTEyLCA1LCAzfSwKLQl7MTE1LCA1LCAzfSwKLQl7MTIxLCA1LCAzfSwKLQl7MTI3LCA1LCAzfSwKLQl7MTM0LCA1LCAzfSwKLQl7MTM3LCA1LCAzfSwKLQl7MTQ4LCA1LCAzfSwKLQl7MTU3LCA1LCAzfSwKLQl7MTY5LCA1LCAzfSwKLQl7MTcyLCA1LCAzfSwKLQl7MTgyLCA1LCAzfSwKLQl7MTkxLCA1LCAzfSwKLQl7MTk1LCA1LCAzfSwKLQl7MjA5LCA1LCAzfSwKLQl7MTQyLCA0LCA0fSwKLQl7MTQ2LCA0LCA0fSwKLQl7MTYxLCA0LCA0fSwKLQl7MTQxLCA1LCA0fSwKLQl7MTUwLCA1LCA0fSwKLQl7MTY1LCA1LCA0fSwKLQl7MTc2LCA1LCA0fQorc3RhdGljIHN0cnVjdCBwbGxfbGltaXQgdng4NTVfcGxsX2xpbWl0c1tdID0geworCXs4NiwgODYsIDQsIDF9LAorCXsxMDgsIDIwOCwgNSwgMX0sCisJezExMCwgMjA4LCA1LCAyfSwKKwl7ODMsIDExMiwgMywgM30sCisJezEwMywgMTYxLCA0LCAzfSwKKwl7MTEyLCAyMDksIDUsIDN9LAorCXsxNDIsIDE2MSwgNCwgNH0sCisJezE0MSwgMTc2LCA1LCA0fQogfTsKIAogLyogYWNjb3JkaW5nIHRvIFZJQSBUZWNobm9sb2dpZXMgdGhlc2UgdmFsdWVzIGFyZSBiYXNlZCBvbiBleHBlcmltZW50ICovCkBAIC0zMDgsNiArMTE4LDQyIEBACiAJe1ZJQUNSLCBDUjg3LCAweEZGLCAweDFGfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDE0ICovCiB9OwogCitzdGF0aWMgc3RydWN0IGlvX3JlZyBjb21tb25fdmdhW10gPSB7CisJe1ZJQUNSLCBDUjA3LCAweDEwLCAweDEwfSwgLyogWzBdIHZlcnRpY2FsIHRvdGFsIChiaXQgOCkKKwkJCQkJWzFdIHZlcnRpY2FsIGRpc3BsYXkgZW5kIChiaXQgOCkKKwkJCQkJWzJdIHZlcnRpY2FsIHJldHJhY2Ugc3RhcnQgKGJpdCA4KQorCQkJCQlbM10gc3RhcnQgdmVydGljYWwgYmxhbmtpbmcgKGJpdCA4KQorCQkJCQlbNF0gbGluZSBjb21wYXJlIChiaXQgOCkKKwkJCQkJWzVdIHZlcnRpY2FsIHRvdGFsIChiaXQgOSkKKwkJCQkJWzZdIHZlcnRpY2FsIGRpc3BsYXkgZW5kIChiaXQgOSkKKwkJCQkJWzddIHZlcnRpY2FsIHJldHJhY2Ugc3RhcnQgKGJpdCA5KSAqLworCXtWSUFDUiwgQ1IwOCwgMHhGRiwgMHgwMH0sIC8qIFswLTRdIHByZXNldCByb3cgc2NhbgorCQkJCQlbNS02XSBieXRlIHBhbm5pbmcgKi8KKwl7VklBQ1IsIENSMDksIDB4REYsIDB4NDB9LCAvKiBbMC00XSBtYXggc2NhbiBsaW5lCisJCQkJCVs1XSBzdGFydCB2ZXJ0aWNhbCBibGFua2luZyAoYml0IDkpCisJCQkJCVs2XSBsaW5lIGNvbXBhcmUgKGJpdCA5KQorCQkJCQlbN10gc2NhbiBkb3VibGluZyAqLworCXtWSUFDUiwgQ1IwQSwgMHhGRiwgMHgxRX0sIC8qIFswLTRdIGN1cnNvciBzdGFydAorCQkJCQlbNV0gY3Vyc29yIGRpc2FibGUgKi8KKwl7VklBQ1IsIENSMEIsIDB4RkYsIDB4MDB9LCAvKiBbMC00XSBjdXJzb3IgZW5kCisJCQkJCVs1LTZdIGN1cnNvciBza2V3ICovCisJe1ZJQUNSLCBDUjBFLCAweEZGLCAweDAwfSwgLyogWzAtN10gY3Vyc29yIGxvY2F0aW9uIChoaWdoKSAqLworCXtWSUFDUiwgQ1IwRiwgMHhGRiwgMHgwMH0sIC8qIFswLTddIGN1cnNvciBsb2NhdGlvbiAobG93KSAqLworCXtWSUFDUiwgQ1IxMSwgMHhGMCwgMHg4MH0sIC8qIFswLTNdIHZlcnRpY2FsIHJldHJhY2UgZW5kCisJCQkJCVs2XSBtZW1vcnkgcmVmcmVzaCBiYW5kd2lkdGgKKwkJCQkJWzddIENSVEMgcmVnaXN0ZXIgcHJvdGVjdCBlbmFibGUgKi8KKwl7VklBQ1IsIENSMTQsIDB4RkYsIDB4MDB9LCAvKiBbMC00XSB1bmRlcmxpbmUgbG9jYXRpb24KKwkJCQkJWzVdIGRpdmlkZSBtZW1vcnkgYWRkcmVzcyBjbG9jayBieSA0CisJCQkJCVs2XSBkb3VibGUgd29yZCBhZGRyZXNzaW5nICovCisJe1ZJQUNSLCBDUjE3LCAweEZGLCAweDYzfSwgLyogWzAtMV0gbWFwcGluZyBvZiBkaXNwbGF5IGFkZHJlc3MgMTMtMTQKKwkJCQkJWzJdIGRpdmlkZSBzY2FuIGxpbmUgY2xvY2sgYnkgMgorCQkJCQlbM10gZGl2aWRlIG1lbW9yeSBhZGRyZXNzIGNsb2NrIGJ5IDIKKwkJCQkJWzVdIGFkZHJlc3Mgd3JhcAorCQkJCQlbNl0gYnl0ZSBtb2RlIHNlbGVjdAorCQkJCQlbN10gc3luYyBlbmFibGUgKi8KKwl7VklBQ1IsIENSMTgsIDB4RkYsIDB4RkZ9LCAvKiBbMC03XSBsaW5lIGNvbXBhcmUgKi8KK307CisKIHN0YXRpYyBzdHJ1Y3QgZmlmb19kZXB0aF9zZWxlY3QgZGlzcGxheV9maWZvX2RlcHRoX3JlZyA9IHsKIAkvKiBJR0ExIEZJRk8gRGVwdGhfU2VsZWN0ICovCiAJe0lHQTFfRklGT19ERVBUSF9TRUxFQ1RfUkVHX05VTSwge3tTUjE3LCAwLCA3fSB9IH0sCkBAIC02NzYsNiArNTIyLDkgQEAKIAl7VklBX0xWRFMyLCAiTFZEUzIifQogfTsKIAorLyogc3RydWN0dXJlIHdpdGggZnVuY3Rpb24gcG9pbnRlcnMgdG8gc3VwcG9ydCBjbG9jayBjb250cm9sICovCitzdGF0aWMgc3RydWN0IHZpYV9jbG9jayBjbG9jazsKKwogc3RhdGljIHZvaWQgbG9hZF9maXhfYml0X2NydGNfcmVnKHZvaWQpOwogc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfZ2Z4X2NoaXBfaW5mbyhpbnQgY2hpcF90eXBlKTsKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBpbml0X3RtZHNfY2hpcF9pbmZvKHZvaWQpOwpAQCAtNzcwLDEzICs2MTksMTQgQEAKIC8qU2V0IElHQSBwYXRoIGZvciBlYWNoIGRldmljZSovCiB2b2lkIHZpYWZiX3NldF9pZ2FfcGF0aCh2b2lkKQogeworCWludCBjcnRfaWdhX3BhdGggPSAwOwogCiAJaWYgKHZpYWZiX1NBTU1fT04gPT0gMSkgewogCQlpZiAodmlhZmJfQ1JUX09OKSB7CiAJCQlpZiAodmlhZmJfcHJpbWFyeV9kZXYgPT0gQ1JUX0RldmljZSkKLQkJCQl2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTE7CisJCQkJY3J0X2lnYV9wYXRoID0gSUdBMTsKIAkJCWVsc2UKLQkJCQl2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTI7CisJCQkJY3J0X2lnYV9wYXRoID0gSUdBMjsKIAkJfQogCiAJCWlmICh2aWFmYl9EVklfT04pIHsKQEAgLTc5Myw4ICs2NDMsNyBAQAogCQkJCQlVTklDSFJPTUVfQ0xFMjY2KSkgewogCQkJCQl2aWFwYXJpbmZvLT4KIAkJCQkJbHZkc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID0gSUdBMjsKLQkJCQkJdmlhcGFyaW5mby0+Ci0JCQkJCWNydF9zZXR0aW5nX2luZm8tPmlnYV9wYXRoID0gSUdBMTsKKwkJCQkJY3J0X2lnYV9wYXRoID0gSUdBMTsKIAkJCQkJdmlhcGFyaW5mby0+CiAJCQkJCXRtZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTE7CiAJCQkJfSBlbHNlCkBAIC04MTQsMTAgKzY2MywxMCBAQAogCQl2aWFmYl9TQU1NX09OID0gMDsKIAogCQlpZiAodmlhZmJfQ1JUX09OICYmIHZpYWZiX0xDRF9PTikgewotCQkJdmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mby0+aWdhX3BhdGggPSBJR0ExOworCQkJY3J0X2lnYV9wYXRoID0gSUdBMTsKIAkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTI7CiAJCX0gZWxzZSBpZiAodmlhZmJfQ1JUX09OICYmIHZpYWZiX0RWSV9PTikgewotCQkJdmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mby0+aWdhX3BhdGggPSBJR0ExOworCQkJY3J0X2lnYV9wYXRoID0gSUdBMTsKIAkJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTI7CiAJCX0gZWxzZSBpZiAodmlhZmJfTENEX09OICYmIHZpYWZiX0RWSV9PTikgewogCQkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID0gSUdBMTsKQEAgLTgyNiw3ICs2NzUsNyBAQAogCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID0gSUdBMjsKIAkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMi0+aWdhX3BhdGggPSBJR0EyOwogCQl9IGVsc2UgaWYgKHZpYWZiX0NSVF9PTikgewotCQkJdmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mby0+aWdhX3BhdGggPSBJR0ExOworCQkJY3J0X2lnYV9wYXRoID0gSUdBMTsKIAkJfSBlbHNlIGlmICh2aWFmYl9MQ0RfT04pIHsKIAkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTI7CiAJCX0gZWxzZSBpZiAodmlhZmJfRFZJX09OKSB7CkBAIC04MzcsNyArNjg2LDcgQEAKIAl2aWFwYXJpbmZvLT5zaGFyZWQtPmlnYTFfZGV2aWNlcyA9IDA7CiAJdmlhcGFyaW5mby0+c2hhcmVkLT5pZ2EyX2RldmljZXMgPSAwOwogCWlmICh2aWFmYl9DUlRfT04pIHsKLQkJaWYgKHZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8tPmlnYV9wYXRoID09IElHQTEpCisJCWlmIChjcnRfaWdhX3BhdGggPT0gSUdBMSkKIAkJCXZpYXBhcmluZm8tPnNoYXJlZC0+aWdhMV9kZXZpY2VzIHw9IFZJQV9DUlQ7CiAJCWVsc2UKIAkJCXZpYXBhcmluZm8tPnNoYXJlZC0+aWdhMl9kZXZpY2VzIHw9IFZJQV9DUlQ7CkBAIC04NzUsNiArNzI0LDEwIEBACiAJCQkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT4KIAkJCQlsdmRzX2NoaXBfaW5mbzIub3V0cHV0X2ludGVyZmFjZSk7CiAJfQorCisJLyogbG9va3MgbGlrZSB0aGUgT0xQQyBoYXMgaXRzIGRpc3BsYXkgd2lyZWQgdG8gRFZQMSBhbmQgTFZEUzIgKi8KKwlpZiAobWFjaGluZV9pc19vbHBjKCkpCisJCXZpYXBhcmluZm8tPnNoYXJlZC0+aWdhMl9kZXZpY2VzID0gVklBX0RWUDEgfCBWSUFfTFZEUzI7CiB9CiAKIHN0YXRpYyB2b2lkIHNldF9jb2xvcl9yZWdpc3Rlcih1OCBpbmRleCwgdTggcmVkLCB1OCBncmVlbiwgdTggYmx1ZSkKQEAgLTExNjIsMjUgKzEwMTUsMTcgQEAKIAogc3RhdGljIHZvaWQgbG9hZF9maXhfYml0X2NydGNfcmVnKHZvaWQpCiB7CisJdmlhZmJfdW5sb2NrX2NydCgpOworCiAJLyogYWx3YXlzIHNldCB0byAxICovCiAJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1IwMywgVklBQ1IsIDB4ODAsIEJJVDcpOwogCS8qIGxpbmUgY29tcGFyZSBzaG91bGQgc2V0IGFsbCBiaXRzID0gMSAoZXh0ZW5kIG1vZGVzKSAqLwotCXZpYWZiX3dyaXRlX3JlZyhDUjE4LCBWSUFDUiwgMHhmZik7Ci0JLyogbGluZSBjb21wYXJlIHNob3VsZCBzZXQgYWxsIGJpdHMgPSAxIChleHRlbmQgbW9kZXMpICovCi0JdmlhZmJfd3JpdGVfcmVnX21hc2soQ1IwNywgVklBQ1IsIDB4MTAsIEJJVDQpOwotCS8qIGxpbmUgY29tcGFyZSBzaG91bGQgc2V0IGFsbCBiaXRzID0gMSAoZXh0ZW5kIG1vZGVzKSAqLwotCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMDksIFZJQUNSLCAweDQwLCBCSVQ2KTsKLQkvKiBsaW5lIGNvbXBhcmUgc2hvdWxkIHNldCBhbGwgYml0cyA9IDEgKGV4dGVuZCBtb2RlcykgKi8KIAl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjM1LCBWSUFDUiwgMHgxMCwgQklUNCk7CiAJLyogbGluZSBjb21wYXJlIHNob3VsZCBzZXQgYWxsIGJpdHMgPSAxIChleHRlbmQgbW9kZXMpICovCiAJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1IzMywgVklBQ1IsIDB4MDYsIEJJVDAgKyBCSVQxICsgQklUMik7CiAJLyp2aWFmYl93cml0ZV9yZWdfbWFzayhDUjMyLCBWSUFDUiwgMHgwMSwgQklUMCk7ICovCi0JLyogZXh0ZW5kIG1vZGUgYWx3YXlzIHNldCB0byBlM2ggKi8KLQl2aWFmYl93cml0ZV9yZWcoQ1IxNywgVklBQ1IsIDB4ZTMpOwotCS8qIGV4dGVuZCBtb2RlIGFsd2F5cyBzZXQgdG8gMGggKi8KLQl2aWFmYl93cml0ZV9yZWcoQ1IwOCwgVklBQ1IsIDB4MDApOwotCS8qIGV4dGVuZCBtb2RlIGFsd2F5cyBzZXQgdG8gMGggKi8KLQl2aWFmYl93cml0ZV9yZWcoQ1IxNCwgVklBQ1IsIDB4MDApOworCisJdmlhZmJfbG9ja19jcnQoKTsKIAogCS8qIElmIEs4TTgwMCwgZW5hYmxlIFByZWZldGNoIE1vZGUuICovCiAJaWYgKCh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0s4MDApCkBAIC0xNjAxLDY5ICsxNDQ2LDU0IEBACiAKIH0KIAotc3RhdGljIHUzMiBjbGUyNjZfZW5jb2RlX3BsbChzdHJ1Y3QgcGxsX2NvbmZpZyBwbGwpCi17Ci0JcmV0dXJuIChwbGwubXVsdGlwbGllciA8PCA4KQotCQl8IChwbGwucnNoaWZ0IDw8IDYpCi0JCXwgcGxsLmRpdmlzb3I7Ci19Ci0KLXN0YXRpYyB1MzIgazgwMF9lbmNvZGVfcGxsKHN0cnVjdCBwbGxfY29uZmlnIHBsbCkKLXsKLQlyZXR1cm4gKChwbGwuZGl2aXNvciAtIDIpIDw8IDE2KQotCQl8IChwbGwucnNoaWZ0IDw8IDEwKQotCQl8IChwbGwubXVsdGlwbGllciAtIDIpOwotfQotCi1zdGF0aWMgdTMyIHZ4ODU1X2VuY29kZV9wbGwoc3RydWN0IHBsbF9jb25maWcgcGxsKQotewotCXJldHVybiAocGxsLmRpdmlzb3IgPDwgMTYpCi0JCXwgKHBsbC5yc2hpZnQgPDwgMTApCi0JCXwgcGxsLm11bHRpcGxpZXI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIGdldF9wbGxfaW50ZXJuYWxfZnJlcXVlbmN5KHUzMiByZWZfZnJlcSwKLQlzdHJ1Y3QgcGxsX2NvbmZpZyBwbGwpCi17Ci0JcmV0dXJuIHJlZl9mcmVxIC8gcGxsLmRpdmlzb3IgKiBwbGwubXVsdGlwbGllcjsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgZ2V0X3BsbF9vdXRwdXRfZnJlcXVlbmN5KHUzMiByZWZfZnJlcSwgc3RydWN0IHBsbF9jb25maWcgcGxsKQotewotCXJldHVybiBnZXRfcGxsX2ludGVybmFsX2ZyZXF1ZW5jeShyZWZfZnJlcSwgcGxsKT4+cGxsLnJzaGlmdDsKLX0KLQotc3RhdGljIHN0cnVjdCBwbGxfY29uZmlnIGdldF9wbGxfY29uZmlnKHN0cnVjdCBwbGxfY29uZmlnICpjb25maWcsIGludCBzaXplLAorc3RhdGljIHN0cnVjdCB2aWFfcGxsX2NvbmZpZyBnZXRfcGxsX2NvbmZpZyhzdHJ1Y3QgcGxsX2xpbWl0ICpsaW1pdHMsIGludCBzaXplLAogCWludCBjbGspCiB7Ci0Jc3RydWN0IHBsbF9jb25maWcgYmVzdCA9IGNvbmZpZ1swXTsKKwlzdHJ1Y3QgdmlhX3BsbF9jb25maWcgY3VyLCB1cCwgZG93biwgYmVzdCA9IHswLCAxLCAwfTsKIAljb25zdCB1MzIgZjAgPSAxNDMxODE4MDsgLyogWDEgZnJlcXVlbmN5ICovCi0JaW50IGk7CisJaW50IGksIGY7CiAKLQlmb3IgKGkgPSAxOyBpIDwgc2l6ZTsgaSsrKSB7Ci0JCWlmIChhYnMoZ2V0X3BsbF9vdXRwdXRfZnJlcXVlbmN5KGYwLCBjb25maWdbaV0pIC0gY2xrKQotCQkJPCBhYnMoZ2V0X3BsbF9vdXRwdXRfZnJlcXVlbmN5KGYwLCBiZXN0KSAtIGNsaykpCi0JCQliZXN0ID0gY29uZmlnW2ldOworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJY3VyLnJzaGlmdCA9IGxpbWl0c1tpXS5yc2hpZnQ7CisJCWN1ci5kaXZpc29yID0gbGltaXRzW2ldLmRpdmlzb3I7CisJCWN1ci5tdWx0aXBsaWVyID0gY2xrIC8gKChmMCAvIGN1ci5kaXZpc29yKT4+Y3VyLnJzaGlmdCk7CisJCWYgPSBhYnMoZ2V0X3BsbF9vdXRwdXRfZnJlcXVlbmN5KGYwLCBjdXIpIC0gY2xrKTsKKwkJdXAgPSBkb3duID0gY3VyOworCQl1cC5tdWx0aXBsaWVyKys7CisJCWRvd24ubXVsdGlwbGllci0tOworCQlpZiAoYWJzKGdldF9wbGxfb3V0cHV0X2ZyZXF1ZW5jeShmMCwgdXApIC0gY2xrKSA8IGYpCisJCQljdXIgPSB1cDsKKwkJZWxzZSBpZiAoYWJzKGdldF9wbGxfb3V0cHV0X2ZyZXF1ZW5jeShmMCwgZG93bikgLSBjbGspIDwgZikKKwkJCWN1ciA9IGRvd247CisKKwkJaWYgKGN1ci5tdWx0aXBsaWVyIDwgbGltaXRzW2ldLm11bHRpcGxpZXJfbWluKQorCQkJY3VyLm11bHRpcGxpZXIgPSBsaW1pdHNbaV0ubXVsdGlwbGllcl9taW47CisJCWVsc2UgaWYgKGN1ci5tdWx0aXBsaWVyID4gbGltaXRzW2ldLm11bHRpcGxpZXJfbWF4KQorCQkJY3VyLm11bHRpcGxpZXIgPSBsaW1pdHNbaV0ubXVsdGlwbGllcl9tYXg7CisKKwkJZiA9IGFicyhnZXRfcGxsX291dHB1dF9mcmVxdWVuY3koZjAsIGN1cikgLSBjbGspOworCQlpZiAoZiA8IGFicyhnZXRfcGxsX291dHB1dF9mcmVxdWVuY3koZjAsIGJlc3QpIC0gY2xrKSkKKwkJCWJlc3QgPSBjdXI7CiAJfQogCiAJcmV0dXJuIGJlc3Q7CiB9CiAKLXUzMiB2aWFmYl9nZXRfY2xrX3ZhbHVlKGludCBjbGspCitzdGF0aWMgc3RydWN0IHZpYV9wbGxfY29uZmlnIGdldF9iZXN0X3BsbF9jb25maWcoaW50IGNsaykKIHsKLQl1MzIgdmFsdWUgPSAwOworCXN0cnVjdCB2aWFfcGxsX2NvbmZpZyBjb25maWc7CiAKIAlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgewogCWNhc2UgVU5JQ0hST01FX0NMRTI2NjoKIAljYXNlIFVOSUNIUk9NRV9LNDAwOgotCQl2YWx1ZSA9IGNsZTI2Nl9lbmNvZGVfcGxsKGdldF9wbGxfY29uZmlnKGNsZTI2Nl9wbGxfY29uZmlnLAotCQkJQVJSQVlfU0laRShjbGUyNjZfcGxsX2NvbmZpZyksIGNsaykpOworCQljb25maWcgPSBnZXRfcGxsX2NvbmZpZyhjbGUyNjZfcGxsX2xpbWl0cywKKwkJCUFSUkFZX1NJWkUoY2xlMjY2X3BsbF9saW1pdHMpLCBjbGspOwogCQlicmVhazsKIAljYXNlIFVOSUNIUk9NRV9LODAwOgogCWNhc2UgVU5JQ0hST01FX1BNODAwOgogCWNhc2UgVU5JQ0hST01FX0NONzAwOgotCQl2YWx1ZSA9IGs4MDBfZW5jb2RlX3BsbChnZXRfcGxsX2NvbmZpZyhrODAwX3BsbF9jb25maWcsCi0JCQlBUlJBWV9TSVpFKGs4MDBfcGxsX2NvbmZpZyksIGNsaykpOworCQljb25maWcgPSBnZXRfcGxsX2NvbmZpZyhrODAwX3BsbF9saW1pdHMsCisJCQlBUlJBWV9TSVpFKGs4MDBfcGxsX2xpbWl0cyksIGNsayk7CiAJCWJyZWFrOwogCWNhc2UgVU5JQ0hST01FX0NYNzAwOgogCWNhc2UgVU5JQ0hST01FX0NONzUwOgpAQCAtMTY3MSw5MiArMTUwMSwyOCBAQAogCWNhc2UgVU5JQ0hST01FX1A0TTg5MDoKIAljYXNlIFVOSUNIUk9NRV9QNE05MDA6CiAJY2FzZSBVTklDSFJPTUVfVlg4MDA6Ci0JCXZhbHVlID0gazgwMF9lbmNvZGVfcGxsKGdldF9wbGxfY29uZmlnKGN4NzAwX3BsbF9jb25maWcsCi0JCQlBUlJBWV9TSVpFKGN4NzAwX3BsbF9jb25maWcpLCBjbGspKTsKKwkJY29uZmlnID0gZ2V0X3BsbF9jb25maWcoY3g3MDBfcGxsX2xpbWl0cywKKwkJCUFSUkFZX1NJWkUoY3g3MDBfcGxsX2xpbWl0cyksIGNsayk7CiAJCWJyZWFrOwogCWNhc2UgVU5JQ0hST01FX1ZYODU1OgogCWNhc2UgVU5JQ0hST01FX1ZYOTAwOgotCQl2YWx1ZSA9IHZ4ODU1X2VuY29kZV9wbGwoZ2V0X3BsbF9jb25maWcodng4NTVfcGxsX2NvbmZpZywKLQkJCUFSUkFZX1NJWkUodng4NTVfcGxsX2NvbmZpZyksIGNsaykpOworCQljb25maWcgPSBnZXRfcGxsX2NvbmZpZyh2eDg1NV9wbGxfbGltaXRzLAorCQkJQVJSQVlfU0laRSh2eDg1NV9wbGxfbGltaXRzKSwgY2xrKTsKIAkJYnJlYWs7CiAJfQogCi0JcmV0dXJuIHZhbHVlOworCXJldHVybiBjb25maWc7CiB9CiAKIC8qIFNldCBWQ0xLKi8KIHZvaWQgdmlhZmJfc2V0X3ZjbG9jayh1MzIgY2xrLCBpbnQgc2V0X2lnYSkKIHsKLQkvKiBILlcuIFJlc2V0IDogT04gKi8KLQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjE3LCBWSUFDUiwgMHgwMCwgQklUNyk7CisJc3RydWN0IHZpYV9wbGxfY29uZmlnIGNvbmZpZyA9IGdldF9iZXN0X3BsbF9jb25maWcoY2xrKTsKIAotCWlmIChzZXRfaWdhID09IElHQTEpIHsKLQkJLyogQ2hhbmdlIEQsTiBGT1IgVkNMSyAqLwotCQlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgewotCQljYXNlIFVOSUNIUk9NRV9DTEUyNjY6Ci0JCWNhc2UgVU5JQ0hST01FX0s0MDA6Ci0JCQl2aWFfd3JpdGVfcmVnKFZJQVNSLCBTUjQ2LCAoY2xrICYgMHgwMEZGKSk7Ci0JCQl2aWFfd3JpdGVfcmVnKFZJQVNSLCBTUjQ3LCAoY2xrICYgMHhGRjAwKSA+PiA4KTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVU5JQ0hST01FX0s4MDA6Ci0JCWNhc2UgVU5JQ0hST01FX1BNODAwOgotCQljYXNlIFVOSUNIUk9NRV9DTjcwMDoKLQkJY2FzZSBVTklDSFJPTUVfQ1g3MDA6Ci0JCWNhc2UgVU5JQ0hST01FX0NONzUwOgotCQljYXNlIFVOSUNIUk9NRV9LOE04OTA6Ci0JCWNhc2UgVU5JQ0hST01FX1A0TTg5MDoKLQkJY2FzZSBVTklDSFJPTUVfUDRNOTAwOgotCQljYXNlIFVOSUNIUk9NRV9WWDgwMDoKLQkJY2FzZSBVTklDSFJPTUVfVlg4NTU6Ci0JCWNhc2UgVU5JQ0hST01FX1ZYOTAwOgotCQkJdmlhX3dyaXRlX3JlZyhWSUFTUiwgU1I0NCwgKGNsayAmIDB4MDAwMEZGKSk7Ci0JCQl2aWFfd3JpdGVfcmVnKFZJQVNSLCBTUjQ1LCAoY2xrICYgMHgwMEZGMDApID4+IDgpOwotCQkJdmlhX3dyaXRlX3JlZyhWSUFTUiwgU1I0NiwgKGNsayAmIDB4RkYwMDAwKSA+PiAxNik7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmIChzZXRfaWdhID09IElHQTIpIHsKLQkJLyogQ2hhbmdlIEQsTiBGT1IgTENLICovCi0JCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7Ci0JCWNhc2UgVU5JQ0hST01FX0NMRTI2NjoKLQkJY2FzZSBVTklDSFJPTUVfSzQwMDoKLQkJCXZpYV93cml0ZV9yZWcoVklBU1IsIFNSNDQsIChjbGsgJiAweDAwRkYpKTsKLQkJCXZpYV93cml0ZV9yZWcoVklBU1IsIFNSNDUsIChjbGsgJiAweEZGMDApID4+IDgpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBVTklDSFJPTUVfSzgwMDoKLQkJY2FzZSBVTklDSFJPTUVfUE04MDA6Ci0JCWNhc2UgVU5JQ0hST01FX0NONzAwOgotCQljYXNlIFVOSUNIUk9NRV9DWDcwMDoKLQkJY2FzZSBVTklDSFJPTUVfQ043NTA6Ci0JCWNhc2UgVU5JQ0hST01FX0s4TTg5MDoKLQkJY2FzZSBVTklDSFJPTUVfUDRNODkwOgotCQljYXNlIFVOSUNIUk9NRV9QNE05MDA6Ci0JCWNhc2UgVU5JQ0hST01FX1ZYODAwOgotCQljYXNlIFVOSUNIUk9NRV9WWDg1NToKLQkJY2FzZSBVTklDSFJPTUVfVlg5MDA6Ci0JCQl2aWFfd3JpdGVfcmVnKFZJQVNSLCBTUjRBLCAoY2xrICYgMHgwMDAwRkYpKTsKLQkJCXZpYV93cml0ZV9yZWcoVklBU1IsIFNSNEIsIChjbGsgJiAweDAwRkYwMCkgPj4gOCk7Ci0JCQl2aWFfd3JpdGVfcmVnKFZJQVNSLCBTUjRDLCAoY2xrICYgMHhGRjAwMDApID4+IDE2KTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JLyogSC5XLiBSZXNldCA6IE9GRiAqLwotCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMTcsIFZJQUNSLCAweDgwLCBCSVQ3KTsKLQotCS8qIFJlc2V0IFBMTCAqLwotCWlmIChzZXRfaWdhID09IElHQTEpIHsKLQkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1I0MCwgVklBU1IsIDB4MDIsIEJJVDEpOwotCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjQwLCBWSUFTUiwgMHgwMCwgQklUMSk7Ci0JfQotCi0JaWYgKHNldF9pZ2EgPT0gSUdBMikgewotCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjQwLCBWSUFTUiwgMHgwNCwgQklUMik7Ci0JCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSNDAsIFZJQVNSLCAweDAwLCBCSVQyKTsKLQl9CisJaWYgKHNldF9pZ2EgPT0gSUdBMSkKKwkJY2xvY2suc2V0X3ByaW1hcnlfcGxsKGNvbmZpZyk7CisJaWYgKHNldF9pZ2EgPT0gSUdBMikKKwkJY2xvY2suc2V0X3NlY29uZGFyeV9wbGwoY29uZmlnKTsKIAogCS8qIEZpcmUhICovCiAJdmlhX3dyaXRlX21pc2NfcmVnX21hc2soMHgwQywgMHgwQyk7IC8qIHNlbGVjdCBleHRlcm5hbCBjbG9jayAqLwpAQCAtMjAwMiw3ICsxNzY4LDcgQEAKIAlpbnQgaTsKIAlpbnQgaW5kZXggPSAwOwogCWludCBoX2FkZHIsIHZfYWRkcjsKLQl1MzIgcGxsX0RfTiwgY2xvY2ssIHJlZnJlc2ggPSB2aWFmYl9yZWZyZXNoOworCXUzMiBjbG9jaywgcmVmcmVzaCA9IHZpYWZiX3JlZnJlc2g7CiAKIAlpZiAodmlhZmJfU0FNTV9PTiAmJiBzZXRfaWdhID09IElHQTIpCiAJCXJlZnJlc2ggPSB2aWFmYl9yZWZyZXNoMTsKQEAgLTIwMzMsOCArMTc5OSw2IEBACiAJdl9hZGRyID0gY3J0X3JlZy52ZXJfYWRkcjsKIAlpZiAoc2V0X2lnYSA9PSBJR0ExKSB7CiAJCXZpYWZiX3VubG9ja19jcnQoKTsKLQkJdmlhZmJfd3JpdGVfcmVnKENSMDksIFZJQUNSLCAweDAwKTsJLyppbml0aWFsIENSMDk9MCAqLwotCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjExLCBWSUFDUiwgMHgwMCwgQklUNCArIEJJVDUgKyBCSVQ2KTsKIAkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1IxNywgVklBQ1IsIDB4MDAsIEJJVDcpOwogCX0KIApAQCAtMjA0Nyw3ICsxODExLDYgQEAKIAkJYnJlYWs7CiAJfQogCi0JbG9hZF9maXhfYml0X2NydGNfcmVnKCk7CiAJdmlhZmJfbG9ja19jcnQoKTsKIAl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjE3LCBWSUFDUiwgMHg4MCwgQklUNyk7CiAJdmlhZmJfbG9hZF9mZXRjaF9jb3VudF9yZWcoaF9hZGRyLCBicHBfYnl0ZSwgc2V0X2lnYSk7CkBAIC0yMDU5LDIwICsxODIyLDE3IEBACiAKIAljbG9jayA9IGNydF9yZWcuaG9yX3RvdGFsICogY3J0X3JlZy52ZXJfdG90YWwKIAkJKiBjcnRfdGFibGVbaW5kZXhdLnJlZnJlc2hfcmF0ZTsKLQlwbGxfRF9OID0gdmlhZmJfZ2V0X2Nsa192YWx1ZShjbG9jayk7Ci0JREVCVUdfTVNHKEtFUk5fSU5GTyAiUExMPSV4IiwgcGxsX0RfTik7Ci0JdmlhZmJfc2V0X3ZjbG9jayhwbGxfRF9OLCBzZXRfaWdhKTsKKwl2aWFmYl9zZXRfdmNsb2NrKGNsb2NrLCBzZXRfaWdhKTsKIAogfQogCiB2b2lkIF9fZGV2aW5pdCB2aWFmYl9pbml0X2NoaXBfaW5mbyhpbnQgY2hpcF90eXBlKQogeworCXZpYV9jbG9ja19pbml0KCZjbG9jaywgY2hpcF90eXBlKTsKIAlpbml0X2dmeF9jaGlwX2luZm8oY2hpcF90eXBlKTsKIAlpbml0X3RtZHNfY2hpcF9pbmZvKCk7CiAJaW5pdF9sdmRzX2NoaXBfaW5mbygpOwogCi0JdmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mby0+aWdhX3BhdGggPSBJR0ExOwotCiAJLypTZXQgSUdBIHBhdGggZm9yIGVhY2ggZGV2aWNlICovCiAJdmlhZmJfc2V0X2lnYV9wYXRoKCk7CiAKQEAgLTIzNTQsNiArMjExNCw3IEBACiAJb3V0YigweDAwLCBWSUFBUik7CiAKIAkvKiBXcml0ZSBDb21tb24gU2V0dGluZyBmb3IgVmlkZW8gTW9kZSAqLworCXZpYWZiX3dyaXRlX3JlZ3goY29tbW9uX3ZnYSwgQVJSQVlfU0laRShjb21tb25fdmdhKSk7CiAJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpIHsKIAljYXNlIFVOSUNIUk9NRV9DTEUyNjY6CiAJCXZpYWZiX3dyaXRlX3JlZ3goQ0xFMjY2X01vZGVYcmVncywgTlVNX1RPVEFMX0NMRTI2Nl9Nb2RlWHJlZ3MpOwpAQCAtMjQwMCw5ICsyMTYxLDYgQEAKIAogCXZpYWZiX3dyaXRlX3JlZ19tYXNrKDB4MTUsIFZJQVNSLCAweEEyLCAweEEyKTsKIAotCS8qIFdyaXRlIENSVEMgKi8KLQl2aWFmYl9maWxsX2NydGNfdGltaW5nKGNydF90aW1pbmcsIHZtb2RlX3RibCwgdmlkZW9fYnBwIC8gOCwgSUdBMSk7Ci0KIAkvKiBXcml0ZSBHcmFwaGljIENvbnRyb2xsZXIgKi8KIAlmb3IgKGkgPSAwOyBpIDwgU3RkR1I7IGkrKykKIAkJdmlhX3dyaXRlX3JlZyhWSUFHUiwgaSwgVlBJVC5HUltpXSk7CkBAIC0yNDMyLDYgKzIxOTAsNyBAQAogCQl9CiAJfQogCisJbG9hZF9maXhfYml0X2NydGNfcmVnKCk7CiAJdmlhX3NldF9wcmltYXJ5X3BpdGNoKHZpYWZiaW5mby0+Zml4LmxpbmVfbGVuZ3RoKTsKIAl2aWFfc2V0X3NlY29uZGFyeV9waXRjaCh2aWFmYl9kdWFsX2ZiID8gdmlhZmJpbmZvMS0+Zml4LmxpbmVfbGVuZ3RoCiAJCTogdmlhZmJpbmZvLT5maXgubGluZV9sZW5ndGgpOwpAQCAtMjQ1MSwxNSArMjIxMCwxNSBAQAogCiAJLyogQ1JUIHNldCBtb2RlICovCiAJaWYgKHZpYWZiX0NSVF9PTikgewotCQlpZiAodmlhZmJfU0FNTV9PTiAmJiAodmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mby0+aWdhX3BhdGggPT0KLQkJCUlHQTIpKSB7CisJCWlmICh2aWFmYl9TQU1NX09OICYmCisJCQl2aWFwYXJpbmZvLT5zaGFyZWQtPmlnYTJfZGV2aWNlcyAmIFZJQV9DUlQpIHsKIAkJCXZpYWZiX2ZpbGxfY3J0Y190aW1pbmcoY3J0X3RpbWluZzEsIHZtb2RlX3RibDEsCi0JCQkJdmlkZW9fYnBwMSAvIDgsCi0JCQkJdmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mby0+aWdhX3BhdGgpOworCQkJCXZpZGVvX2JwcDEgLyA4LCBJR0EyKTsKIAkJfSBlbHNlIHsKIAkJCXZpYWZiX2ZpbGxfY3J0Y190aW1pbmcoY3J0X3RpbWluZywgdm1vZGVfdGJsLAogCQkJCXZpZGVvX2JwcCAvIDgsCi0JCQkJdmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mby0+aWdhX3BhdGgpOworCQkJCSh2aWFwYXJpbmZvLT5zaGFyZWQtPmlnYTFfZGV2aWNlcyAmIFZJQV9DUlQpCisJCQkJPyBJR0ExIDogSUdBMik7CiAJCX0KIAogCQkvKiBQYXRjaCBpZiBzZXRfaHJlcyBpcyBub3QgOCBhbGlnbm1lbnQgKDEzNjYpIHRvIHZpYWZiX3NldG1vZGUKQEAgLTI1NTcsNiArMjMxNiwzMyBAQAogCQkJZ2V0X3N5bmModmlhZmJpbmZvMSkpOwogCX0KIAorCWNsb2NrLnNldF9lbmdpbmVfcGxsX3N0YXRlKFZJQV9TVEFURV9PTik7CisJY2xvY2suc2V0X3ByaW1hcnlfY2xvY2tfc291cmNlKFZJQV9DTEtTUkNfWDEsIHRydWUpOworCWNsb2NrLnNldF9zZWNvbmRhcnlfY2xvY2tfc291cmNlKFZJQV9DTEtTUkNfWDEsIHRydWUpOworCisjaWZkZWYgQ09ORklHX0ZCX1ZJQV9YX0NPTVBBVElCSUxJVFkKKwljbG9jay5zZXRfcHJpbWFyeV9wbGxfc3RhdGUoVklBX1NUQVRFX09OKTsKKwljbG9jay5zZXRfcHJpbWFyeV9jbG9ja19zdGF0ZShWSUFfU1RBVEVfT04pOworCWNsb2NrLnNldF9zZWNvbmRhcnlfcGxsX3N0YXRlKFZJQV9TVEFURV9PTik7CisJY2xvY2suc2V0X3NlY29uZGFyeV9jbG9ja19zdGF0ZShWSUFfU1RBVEVfT04pOworI2Vsc2UKKwlpZiAodmlhcGFyaW5mby0+c2hhcmVkLT5pZ2ExX2RldmljZXMpIHsKKwkJY2xvY2suc2V0X3ByaW1hcnlfcGxsX3N0YXRlKFZJQV9TVEFURV9PTik7CisJCWNsb2NrLnNldF9wcmltYXJ5X2Nsb2NrX3N0YXRlKFZJQV9TVEFURV9PTik7CisJfSBlbHNlIHsKKwkJY2xvY2suc2V0X3ByaW1hcnlfcGxsX3N0YXRlKFZJQV9TVEFURV9PRkYpOworCQljbG9jay5zZXRfcHJpbWFyeV9jbG9ja19zdGF0ZShWSUFfU1RBVEVfT0ZGKTsKKwl9CisKKwlpZiAodmlhcGFyaW5mby0+c2hhcmVkLT5pZ2EyX2RldmljZXMpIHsKKwkJY2xvY2suc2V0X3NlY29uZGFyeV9wbGxfc3RhdGUoVklBX1NUQVRFX09OKTsKKwkJY2xvY2suc2V0X3NlY29uZGFyeV9jbG9ja19zdGF0ZShWSUFfU1RBVEVfT04pOworCX0gZWxzZSB7CisJCWNsb2NrLnNldF9zZWNvbmRhcnlfcGxsX3N0YXRlKFZJQV9TVEFURV9PRkYpOworCQljbG9jay5zZXRfc2Vjb25kYXJ5X2Nsb2NrX3N0YXRlKFZJQV9TVEFURV9PRkYpOworCX0KKyNlbmRpZiAvKkNPTkZJR19GQl9WSUFfWF9DT01QQVRJQklMSVRZKi8KKwogCXZpYV9zZXRfc3RhdGUoZGV2aWNlcywgVklBX1NUQVRFX09OKTsKIAlkZXZpY2Vfc2NyZWVuX29uKCk7CiAJcmV0dXJuIDE7CkBAIC0yNTk4LDggKzIzODQsMTIgQEAKIAkJCWJlc3QgPSAmdm1vZGUtPmNydGNbaV07CiAJfQogCi0JaWYgKGFicyhiZXN0LT5yZWZyZXNoX3JhdGUgLSBsb25nX3JlZnJlc2gpID4gMykKLQkJcmV0dXJuIDYwOworCWlmIChhYnMoYmVzdC0+cmVmcmVzaF9yYXRlIC0gbG9uZ19yZWZyZXNoKSA+IDMpIHsKKwkJaWYgKGhyZXMgPT0gMTIwMCAmJiB2cmVzID09IDkwMCkKKwkJCXJldHVybiA0OTsgLyogT0xQQyBEQ09OIG9ubHkgc3VwcG9ydHMgNTAgSHogKi8KKwkJZWxzZQorCQkJcmV0dXJuIDYwOworCX0KIAogCXJldHVybiBiZXN0LT5yZWZyZXNoX3JhdGU7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9ody5oIGIvZHJpdmVycy92aWRlby92aWEvaHcuaAppbmRleCA4ODU4NTkzLi5jNzIzOWViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS9ody5oCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2h3LmgKQEAgLTczMiwyMCArNzMyLDEzIEBACiAJc3RydWN0IF9sY2RfdmVyX3NjYWxpbmdfZmFjdG9yIGxjZF92ZXJfc2NhbGluZ19mYWN0b3I7CiB9OwogCi1zdHJ1Y3QgcGxsX2NvbmZpZyB7Ci0JdTE2IG11bHRpcGxpZXI7CitzdHJ1Y3QgcGxsX2xpbWl0IHsKKwl1MTYgbXVsdGlwbGllcl9taW47CisJdTE2IG11bHRpcGxpZXJfbWF4OwogCXU4IGRpdmlzb3I7CiAJdTggcnNoaWZ0OwogfTsKIAotc3RydWN0IHBsbF9tYXAgewotCXUzMiBjbGs7Ci0Jc3RydWN0IHBsbF9jb25maWcgY2xlMjY2X3BsbDsKLQlzdHJ1Y3QgcGxsX2NvbmZpZyBrODAwX3BsbDsKLQlzdHJ1Y3QgcGxsX2NvbmZpZyBjeDcwMF9wbGw7Ci0Jc3RydWN0IHBsbF9jb25maWcgdng4NTVfcGxsOwotfTsKLQogc3RydWN0IHJnYkxVVCB7CiAJdTggcmVkOwogCXU4IGdyZWVuOwpAQCAtOTEwLDcgKzkwMyw2IEBACiAJY29uc3QgY2hhciAqbmFtZTsKIH07CiAKLWV4dGVybiB1bnNpZ25lZCBpbnQgdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeHJlczsKIGV4dGVybiBpbnQgdmlhZmJfU0FNTV9PTjsKIGV4dGVybiBpbnQgdmlhZmJfZHVhbF9mYjsKIGV4dGVybiBpbnQgdmlhZmJfTENEMl9PTjsKQEAgLTkzNiw3ICs5MjgsNiBAQAogdm9pZCB2aWFmYl91bmxvY2tfY3J0KHZvaWQpOwogdm9pZCB2aWFmYl9sb2FkX2ZldGNoX2NvdW50X3JlZyhpbnQgaF9hZGRyLCBpbnQgYnBwX2J5dGUsIGludCBzZXRfaWdhKTsKIHZvaWQgdmlhZmJfd3JpdGVfcmVneChzdHJ1Y3QgaW9fcmVnIFJlZ1RhYmxlW10sIGludCBJdGVtTnVtKTsKLXUzMiB2aWFmYl9nZXRfY2xrX3ZhbHVlKGludCBjbGspOwogdm9pZCB2aWFmYl9sb2FkX0ZJRk9fcmVnKGludCBzZXRfaWdhLCBpbnQgaG9yX2FjdGl2ZSwgaW50IHZlcl9hY3RpdmUpOwogdm9pZCB2aWFmYl9zZXRfZHBhX2dmeChpbnQgb3V0cHV0X2ludGVyZmFjZSwgc3RydWN0IEdGWF9EUEFfU0VUVElOR1wKIAkJCQkJKnBfZ2Z4X2RwYV9zZXR0aW5nKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2xjZC5jIGIvZHJpdmVycy92aWRlby92aWEvbGNkLmMKaW5kZXggNjRiYzdlNy4uNmUwNjk4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvbGNkLmMKKysrIGIvZHJpdmVycy92aWRlby92aWEvbGNkLmMKQEAgLTQ4LDcgKzQ4LDYgQEAKIAl7TENEX1ZFUl9TQ0FMSU5HX0ZBQ1RPUl9SRUdfTlVNX0NMRSwge3tDUjc4LCAwLCA3fSwge0NSNzksIDYsIDd9IH0gfQogfTsKIAotc3RhdGljIGludCBjaGVja19sdmRzX2NoaXAoaW50IGRldmljZV9pZF9zdWJhZGRyLCBpbnQgZGV2aWNlX2lkKTsKIHN0YXRpYyBib29sIGx2ZHNfaWRlbnRpZnlfaW50ZWdyYXRlZGx2ZHModm9pZCk7CiBzdGF0aWMgdm9pZCBfX2RldmluaXQgZnBfaWRfdG9fdmluZGV4KGludCBwYW5lbF9pZCk7CiBzdGF0aWMgaW50IGx2ZHNfcmVnaXN0ZXJfcmVhZChpbnQgaW5kZXgpOwpAQCAtODQsMTIgKzgzLDkgQEAKIAkJCQkJICAgIG1vZGVfY3J0X3JlZywKIAkJCQkJICAgc3RydWN0IGRpc3BsYXlfdGltaW5nIHBhbmVsX2NydF9yZWcpOwogCi1zdGF0aWMgaW50IGNoZWNrX2x2ZHNfY2hpcChpbnQgZGV2aWNlX2lkX3N1YmFkZHIsIGludCBkZXZpY2VfaWQpCitzdGF0aWMgaW5saW5lIGJvb2wgY2hlY2tfbHZkc19jaGlwKGludCBkZXZpY2VfaWRfc3ViYWRkciwgaW50IGRldmljZV9pZCkKIHsKLQlpZiAobHZkc19yZWdpc3Rlcl9yZWFkKGRldmljZV9pZF9zdWJhZGRyKSA9PSBkZXZpY2VfaWQpCi0JCXJldHVybiBPSzsKLQllbHNlCi0JCXJldHVybiBGQUlMOworCXJldHVybiBsdmRzX3JlZ2lzdGVyX3JlYWQoZGV2aWNlX2lkX3N1YmFkZHIpID09IGRldmljZV9pZDsKIH0KIAogdm9pZCBfX2RldmluaXQgdmlhZmJfaW5pdF9sY2Rfc2l6ZSh2b2lkKQpAQCAtMTUwLDcgKzE0Niw3IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLWludCBfX2RldmluaXQgdmlhZmJfbHZkc190cmFzbWl0dGVyX2lkZW50aWZ5KHZvaWQpCitib29sIF9fZGV2aW5pdCB2aWFmYl9sdmRzX3RyYXNtaXR0ZXJfaWRlbnRpZnkodm9pZCkKIHsKIAlpZiAodmlhZmJfbHZkc19pZGVudGlmeV92dDE2MzYoVklBX1BPUlRfMzEpKSB7CiAJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8uaTJjX3BvcnQgPSBWSUFfUE9SVF8zMTsKQEAgLTE3NSwyMCArMTcxLDIwIEBACiAJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5sdmRzX2NoaXBfc2xhdmVfYWRkciA9CiAJCVZUMTYzMV9MVkRTX0kyQ19BRERSOwogCi0JaWYgKGNoZWNrX2x2ZHNfY2hpcChWVDE2MzFfREVWSUNFX0lEX1JFRywgVlQxNjMxX0RFVklDRV9JRCkgIT0gRkFJTCkgeworCWlmIChjaGVja19sdmRzX2NoaXAoVlQxNjMxX0RFVklDRV9JRF9SRUcsIFZUMTYzMV9ERVZJQ0VfSUQpKSB7CiAJCURFQlVHX01TRyhLRVJOX0lORk8gIlxuIFZUMTYzMSBMVkRTICEgXG4iKTsKIAkJREVCVUdfTVNHKEtFUk5fSU5GTyAiXG4gJTJkIiwKIAkJCSAgdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5sdmRzX2NoaXBfbmFtZSk7CiAJCURFQlVHX01TRyhLRVJOX0lORk8gIlxuICUyZCIsCiAJCQkgIHZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8ubHZkc19jaGlwX25hbWUpOwotCQlyZXR1cm4gT0s7CisJCXJldHVybiB0cnVlOwogCX0KIAogCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8ubHZkc19jaGlwX25hbWUgPQogCQlOT05fTFZEU19UUkFOU01JVFRFUjsKIAl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLmx2ZHNfY2hpcF9zbGF2ZV9hZGRyID0KIAkJVlQxNjMxX0xWRFNfSTJDX0FERFI7Ci0JcmV0dXJuIEZBSUw7CisJcmV0dXJuIGZhbHNlOwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgZnBfaWRfdG9fdmluZGV4KGludCBwYW5lbF9pZCkKQEAgLTU2Miw3ICs1NTgsNyBAQAogCWludCBzZXRfdnJlcyA9IHBsdmRzX3NldHRpbmdfaW5mby0+dl9hY3RpdmU7CiAJaW50IHBhbmVsX2hyZXMgPSBwbHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9ocmVzOwogCWludCBwYW5lbF92cmVzID0gcGx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfdnJlczsKLQl1MzIgcGxsX0RfTiwgY2xvY2s7CisJdTMyIGNsb2NrOwogCXN0cnVjdCBkaXNwbGF5X3RpbWluZyBtb2RlX2NydF9yZWcsIHBhbmVsX2NydF9yZWc7CiAJc3RydWN0IGNydF9tb2RlX3RhYmxlICpwYW5lbF9jcnRfdGFibGUgPSBOVUxMOwogCXN0cnVjdCBWaWRlb01vZGVUYWJsZSAqdm1vZGVfdGJsID0gdmlhZmJfZ2V0X21vZGUocGFuZWxfaHJlcywKQEAgLTYxMywxMCArNjA5LDcgQEAKIAkJdmlhZmJfbG9hZF9GSUZPX3JlZyhzZXRfaWdhLCBzZXRfaHJlcywgc2V0X3ZyZXMpOwogCiAJZmlsbF9sY2RfZm9ybWF0KCk7Ci0KLQlwbGxfRF9OID0gdmlhZmJfZ2V0X2Nsa192YWx1ZShjbG9jayk7Ci0JREVCVUdfTVNHKEtFUk5fSU5GTyAiUExMPTB4JXgiLCBwbGxfRF9OKTsKLQl2aWFmYl9zZXRfdmNsb2NrKHBsbF9EX04sIHNldF9pZ2EpOworCXZpYWZiX3NldF92Y2xvY2soY2xvY2ssIHNldF9pZ2EpOwogCWxjZF9wYXRjaF9za2V3KHBsdmRzX3NldHRpbmdfaW5mbywgcGx2ZHNfY2hpcF9pbmZvKTsKIAogCS8qIElmIEs4TTgwMCwgZW5hYmxlIExDRCBQcmVmZXRjaCBNb2RlLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvbGNkLmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS9sY2QuaAppbmRleCBjNzkwOWZlLi43NWY2MGE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS9sY2QuaAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9sY2QuaApAQCAtNzksNyArNzksNyBAQAogdm9pZCB2aWFmYl9sY2Rfc2V0X21vZGUoc3RydWN0IGNydF9tb2RlX3RhYmxlICptb2RlX2NydF90YWJsZSwKIAkJICBzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uICpwbHZkc19zZXR0aW5nX2luZm8sCiAJCSAgc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKTsKLWludCBfX2RldmluaXQgdmlhZmJfbHZkc190cmFzbWl0dGVyX2lkZW50aWZ5KHZvaWQpOworYm9vbCBfX2RldmluaXQgdmlhZmJfbHZkc190cmFzbWl0dGVyX2lkZW50aWZ5KHZvaWQpOwogdm9pZCB2aWFmYl9pbml0X2x2ZHNfb3V0cHV0X2ludGVyZmFjZShzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uCiAJCQkJKnBsdmRzX2NoaXBfaW5mbywKIAkJCQlzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9zaGFyZS5oIGIvZHJpdmVycy92aWRlby92aWEvc2hhcmUuaAppbmRleCA0Yjc4MzFmLi42MWIwYmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS9zaGFyZS5oCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3NoYXJlLmgKQEAgLTIyLDE0ICsyMiw2IEBACiAjaWZuZGVmIF9fU0hBUkVfSF9fCiAjZGVmaW5lIF9fU0hBUkVfSF9fCiAKLS8qIERlZmluZSBSZXR1cm4gVmFsdWUgKi8KLSNkZWZpbmUgRkFJTCAgICAgICAgLTEKLSNkZWZpbmUgT0sgICAgICAgICAgMQotCi0jaWZuZGVmIE5VTEwKLSNkZWZpbmUgTlVMTCAwCi0jZW5kaWYKLQogLyogRGVmaW5lIEJpdCBGaWVsZCAqLwogI2RlZmluZSBCSVQwICAgIDB4MDEKICNkZWZpbmUgQklUMSAgICAweDAyCkBAIC0yOTAsNiArMjgyLDcgQEAKICNkZWZpbmUgSFdfTEFZT1VUX0xDRF9FWFRFUk5BTF9MQ0QyIDB4MTAKIAogLyogRGVmaW5pdGlvbiBSZWZyZXNoIFJhdGUgKi8KKyNkZWZpbmUgUkVGUkVTSF80OSAgICAgIDQ5CiAjZGVmaW5lIFJFRlJFU0hfNTAgICAgICA1MAogI2RlZmluZSBSRUZSRVNIXzYwICAgICAgNjAKICNkZWZpbmUgUkVGUkVTSF83NSAgICAgIDc1CkBAIC01NzUsMTAgKzU2OCw2IEBACiAjZGVmaW5lIE0xMjgwWDcyMF9SNTBfSFNQICAgICAgIE5FR0FUSVZFCiAjZGVmaW5lIE0xMjgwWDcyMF9SNTBfVlNQICAgICAgIFBPU0lUSVZFCiAKLS8qIDEyODB4NzIwQDYwIFN5bmMgUG9sYXJpdHkgIChDRUEgTW9kZSkgKi8KLSNkZWZpbmUgTTEyODBYNzIwX0NFQV9SNjBfSFNQICAgICAgIFBPU0lUSVZFCi0jZGVmaW5lIE0xMjgwWDcyMF9DRUFfUjYwX1ZTUCAgICAgICBQT1NJVElWRQotCiAvKiAxNDQweDkwMEA2MCBTeW5jIFBvbGFyaXR5IChDVlQgTW9kZSkgKi8KICNkZWZpbmUgTTE0NDBYOTAwX1I2MF9IU1AgICAgICAgTkVHQVRJVkUKICNkZWZpbmUgTTE0NDBYOTAwX1I2MF9WU1AgICAgICAgUE9TSVRJVkUKQEAgLTYxOSwxMCArNjA4LDYgQEAKICNkZWZpbmUgTTE5MjBYMTIwMF9SQl9SNjBfSFNQICBQT1NJVElWRQogI2RlZmluZSBNMTkyMFgxMjAwX1JCX1I2MF9WU1AgIE5FR0FUSVZFCiAKLS8qIDE5MjB4MTA4MEA2MCBTeW5jIFBvbGFyaXR5ICAoQ0VBIE1vZGUpICovCi0jZGVmaW5lIE0xOTIwWDEwODBfQ0VBX1I2MF9IU1AgICAgICAgUE9TSVRJVkUKLSNkZWZpbmUgTTE5MjBYMTA4MF9DRUFfUjYwX1ZTUCAgICAgICBQT1NJVElWRQotCiAvKiAyMDQ4eDE1MzZANjAgU3luYyBQb2xhcml0eSAoQ1ZUIE1vZGUpICovCiAjZGVmaW5lIE0yMDQ4eDE1MzZfUjYwX0hTUCAgICAgIE5FR0FUSVZFCiAjZGVmaW5lIE0yMDQ4eDE1MzZfUjYwX1ZTUCAgICAgIFBPU0lUSVZFCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWEtY29yZS5jIGIvZHJpdmVycy92aWRlby92aWEvdmlhLWNvcmUuYwppbmRleCA2NzIzZDY5Li5lYjExMmI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWEtY29yZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYS1jb3JlLmMKQEAgLTUwNSw3ICs1MDUsMTQgQEAKIAlyZXQgPSB2ZGV2LT5mYm1lbV9sZW4gPSB2aWFmYl9nZXRfZmJfc2l6ZV9mcm9tX3BjaSh2ZGV2LT5jaGlwX3R5cGUpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dF91bm1hcDsKLQl2ZGV2LT5mYm1lbSA9IGlvcmVtYXBfbm9jYWNoZSh2ZGV2LT5mYm1lbV9zdGFydCwgdmRldi0+ZmJtZW1fbGVuKTsKKworCS8qIHRyeSB0byBtYXAgbGVzcyBtZW1vcnkgb24gZmFpbHVyZSwgOCBNQiBzaG91bGQgYmUgc3RpbGwgZW5vdWdoICovCisJZm9yICg7IHZkZXYtPmZibWVtX2xlbiA+PSA4IDw8IDIwOyB2ZGV2LT5mYm1lbV9sZW4gLz0gMikgeworCQl2ZGV2LT5mYm1lbSA9IGlvcmVtYXBfd2ModmRldi0+ZmJtZW1fc3RhcnQsIHZkZXYtPmZibWVtX2xlbik7CisJCWlmICh2ZGV2LT5mYm1lbSkKKwkJCWJyZWFrOworCX0KKwogCWlmICh2ZGV2LT5mYm1lbSA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X3VubWFwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvdmlhX2Nsb2NrLmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFfY2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjhmMjZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvdmlhX2Nsb2NrLmMKQEAgLTAsMCArMSwzNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA4IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDggUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDExIEZsb3JpYW4gVG9iaWFzIFNjaGFuZGluYXQgPEZsb3JpYW5TY2hhbmRpbmF0QGdteC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisvKgorICogY2xvY2sgYW5kIFBMTCBtYW5hZ2VtZW50IGZ1bmN0aW9ucworICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC92aWEtY29yZS5oPgorI2luY2x1ZGUgInZpYV9jbG9jay5oIgorI2luY2x1ZGUgImdsb2JhbC5oIgorI2luY2x1ZGUgImRlYnVnLmgiCisKK2NvbnN0IGNoYXIgKnZpYV9zbGFwID0gIlBsZWFzZSBzbGFwIFZJQSBUZWNobm9sb2dpZXMgdG8gbW90aXZhdGUgdGhlbSAiCisJInJlbGVhc2luZyBmdWxsIGRvY3VtZW50YXRpb24gZm9yIHlvdXIgcGxhdGZvcm0hXG4iOworCitzdGF0aWMgaW5saW5lIHUzMiBjbGUyNjZfZW5jb2RlX3BsbChzdHJ1Y3QgdmlhX3BsbF9jb25maWcgcGxsKQoreworCXJldHVybiAocGxsLm11bHRpcGxpZXIgPDwgOCkKKwkJfCAocGxsLnJzaGlmdCA8PCA2KQorCQl8IHBsbC5kaXZpc29yOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBrODAwX2VuY29kZV9wbGwoc3RydWN0IHZpYV9wbGxfY29uZmlnIHBsbCkKK3sKKwlyZXR1cm4gKChwbGwuZGl2aXNvciAtIDIpIDw8IDE2KQorCQl8IChwbGwucnNoaWZ0IDw8IDEwKQorCQl8IChwbGwubXVsdGlwbGllciAtIDIpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiB2eDg1NV9lbmNvZGVfcGxsKHN0cnVjdCB2aWFfcGxsX2NvbmZpZyBwbGwpCit7CisJcmV0dXJuIChwbGwuZGl2aXNvciA8PCAxNikKKwkJfCAocGxsLnJzaGlmdCA8PCAxMCkKKwkJfCBwbGwubXVsdGlwbGllcjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsZTI2Nl9zZXRfcHJpbWFyeV9wbGxfZW5jb2RlZCh1MzIgZGF0YSkKK3sKKwl2aWFfd3JpdGVfcmVnX21hc2soVklBU1IsIDB4NDAsIDB4MDIsIDB4MDIpOyAvKiBlbmFibGUgcmVzZXQgKi8KKwl2aWFfd3JpdGVfcmVnKFZJQVNSLCAweDQ2LCBkYXRhICYgMHhGRik7CisJdmlhX3dyaXRlX3JlZyhWSUFTUiwgMHg0NywgKGRhdGEgPj4gOCkgJiAweEZGKTsKKwl2aWFfd3JpdGVfcmVnX21hc2soVklBU1IsIDB4NDAsIDB4MDAsIDB4MDIpOyAvKiBkaXNhYmxlIHJlc2V0ICovCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrODAwX3NldF9wcmltYXJ5X3BsbF9lbmNvZGVkKHUzMiBkYXRhKQoreworCXZpYV93cml0ZV9yZWdfbWFzayhWSUFTUiwgMHg0MCwgMHgwMiwgMHgwMik7IC8qIGVuYWJsZSByZXNldCAqLworCXZpYV93cml0ZV9yZWcoVklBU1IsIDB4NDQsIGRhdGEgJiAweEZGKTsKKwl2aWFfd3JpdGVfcmVnKFZJQVNSLCAweDQ1LCAoZGF0YSA+PiA4KSAmIDB4RkYpOworCXZpYV93cml0ZV9yZWcoVklBU1IsIDB4NDYsIChkYXRhID4+IDE2KSAmIDB4RkYpOworCXZpYV93cml0ZV9yZWdfbWFzayhWSUFTUiwgMHg0MCwgMHgwMCwgMHgwMik7IC8qIGRpc2FibGUgcmVzZXQgKi8KK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsZTI2Nl9zZXRfc2Vjb25kYXJ5X3BsbF9lbmNvZGVkKHUzMiBkYXRhKQoreworCXZpYV93cml0ZV9yZWdfbWFzayhWSUFTUiwgMHg0MCwgMHgwNCwgMHgwNCk7IC8qIGVuYWJsZSByZXNldCAqLworCXZpYV93cml0ZV9yZWcoVklBU1IsIDB4NDQsIGRhdGEgJiAweEZGKTsKKwl2aWFfd3JpdGVfcmVnKFZJQVNSLCAweDQ1LCAoZGF0YSA+PiA4KSAmIDB4RkYpOworCXZpYV93cml0ZV9yZWdfbWFzayhWSUFTUiwgMHg0MCwgMHgwMCwgMHgwNCk7IC8qIGRpc2FibGUgcmVzZXQgKi8KK30KKworc3RhdGljIGlubGluZSB2b2lkIGs4MDBfc2V0X3NlY29uZGFyeV9wbGxfZW5jb2RlZCh1MzIgZGF0YSkKK3sKKwl2aWFfd3JpdGVfcmVnX21hc2soVklBU1IsIDB4NDAsIDB4MDQsIDB4MDQpOyAvKiBlbmFibGUgcmVzZXQgKi8KKwl2aWFfd3JpdGVfcmVnKFZJQVNSLCAweDRBLCBkYXRhICYgMHhGRik7CisJdmlhX3dyaXRlX3JlZyhWSUFTUiwgMHg0QiwgKGRhdGEgPj4gOCkgJiAweEZGKTsKKwl2aWFfd3JpdGVfcmVnKFZJQVNSLCAweDRDLCAoZGF0YSA+PiAxNikgJiAweEZGKTsKKwl2aWFfd3JpdGVfcmVnX21hc2soVklBU1IsIDB4NDAsIDB4MDAsIDB4MDQpOyAvKiBkaXNhYmxlIHJlc2V0ICovCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZW5naW5lX3BsbF9lbmNvZGVkKHUzMiBkYXRhKQoreworCXZpYV93cml0ZV9yZWdfbWFzayhWSUFTUiwgMHg0MCwgMHgwMSwgMHgwMSk7IC8qIGVuYWJsZSByZXNldCAqLworCXZpYV93cml0ZV9yZWcoVklBU1IsIDB4NDcsIGRhdGEgJiAweEZGKTsKKwl2aWFfd3JpdGVfcmVnKFZJQVNSLCAweDQ4LCAoZGF0YSA+PiA4KSAmIDB4RkYpOworCXZpYV93cml0ZV9yZWcoVklBU1IsIDB4NDksIChkYXRhID4+IDE2KSAmIDB4RkYpOworCXZpYV93cml0ZV9yZWdfbWFzayhWSUFTUiwgMHg0MCwgMHgwMCwgMHgwMSk7IC8qIGRpc2FibGUgcmVzZXQgKi8KK30KKworc3RhdGljIHZvaWQgY2xlMjY2X3NldF9wcmltYXJ5X3BsbChzdHJ1Y3QgdmlhX3BsbF9jb25maWcgY29uZmlnKQoreworCWNsZTI2Nl9zZXRfcHJpbWFyeV9wbGxfZW5jb2RlZChjbGUyNjZfZW5jb2RlX3BsbChjb25maWcpKTsKK30KKworc3RhdGljIHZvaWQgazgwMF9zZXRfcHJpbWFyeV9wbGwoc3RydWN0IHZpYV9wbGxfY29uZmlnIGNvbmZpZykKK3sKKwlrODAwX3NldF9wcmltYXJ5X3BsbF9lbmNvZGVkKGs4MDBfZW5jb2RlX3BsbChjb25maWcpKTsKK30KKworc3RhdGljIHZvaWQgdng4NTVfc2V0X3ByaW1hcnlfcGxsKHN0cnVjdCB2aWFfcGxsX2NvbmZpZyBjb25maWcpCit7CisJazgwMF9zZXRfcHJpbWFyeV9wbGxfZW5jb2RlZCh2eDg1NV9lbmNvZGVfcGxsKGNvbmZpZykpOworfQorCitzdGF0aWMgdm9pZCBjbGUyNjZfc2V0X3NlY29uZGFyeV9wbGwoc3RydWN0IHZpYV9wbGxfY29uZmlnIGNvbmZpZykKK3sKKwljbGUyNjZfc2V0X3NlY29uZGFyeV9wbGxfZW5jb2RlZChjbGUyNjZfZW5jb2RlX3BsbChjb25maWcpKTsKK30KKworc3RhdGljIHZvaWQgazgwMF9zZXRfc2Vjb25kYXJ5X3BsbChzdHJ1Y3QgdmlhX3BsbF9jb25maWcgY29uZmlnKQoreworCWs4MDBfc2V0X3NlY29uZGFyeV9wbGxfZW5jb2RlZChrODAwX2VuY29kZV9wbGwoY29uZmlnKSk7Cit9CisKK3N0YXRpYyB2b2lkIHZ4ODU1X3NldF9zZWNvbmRhcnlfcGxsKHN0cnVjdCB2aWFfcGxsX2NvbmZpZyBjb25maWcpCit7CisJazgwMF9zZXRfc2Vjb25kYXJ5X3BsbF9lbmNvZGVkKHZ4ODU1X2VuY29kZV9wbGwoY29uZmlnKSk7Cit9CisKK3N0YXRpYyB2b2lkIGs4MDBfc2V0X2VuZ2luZV9wbGwoc3RydWN0IHZpYV9wbGxfY29uZmlnIGNvbmZpZykKK3sKKwlzZXRfZW5naW5lX3BsbF9lbmNvZGVkKGs4MDBfZW5jb2RlX3BsbChjb25maWcpKTsKK30KKworc3RhdGljIHZvaWQgdng4NTVfc2V0X2VuZ2luZV9wbGwoc3RydWN0IHZpYV9wbGxfY29uZmlnIGNvbmZpZykKK3sKKwlzZXRfZW5naW5lX3BsbF9lbmNvZGVkKHZ4ODU1X2VuY29kZV9wbGwoY29uZmlnKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9wcmltYXJ5X3BsbF9zdGF0ZSh1OCBzdGF0ZSkKK3sKKwl1OCB2YWx1ZTsKKworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIFZJQV9TVEFURV9PTjoKKwkJdmFsdWUgPSAweDIwOworCQlicmVhazsKKwljYXNlIFZJQV9TVEFURV9PRkY6CisJCXZhbHVlID0gMHgwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKworCXZpYV93cml0ZV9yZWdfbWFzayhWSUFTUiwgMHgyRCwgdmFsdWUsIDB4MzApOworfQorCitzdGF0aWMgdm9pZCBzZXRfc2Vjb25kYXJ5X3BsbF9zdGF0ZSh1OCBzdGF0ZSkKK3sKKwl1OCB2YWx1ZTsKKworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIFZJQV9TVEFURV9PTjoKKwkJdmFsdWUgPSAweDA4OworCQlicmVhazsKKwljYXNlIFZJQV9TVEFURV9PRkY6CisJCXZhbHVlID0gMHgwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKworCXZpYV93cml0ZV9yZWdfbWFzayhWSUFTUiwgMHgyRCwgdmFsdWUsIDB4MEMpOworfQorCitzdGF0aWMgdm9pZCBzZXRfZW5naW5lX3BsbF9zdGF0ZSh1OCBzdGF0ZSkKK3sKKwl1OCB2YWx1ZTsKKworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIFZJQV9TVEFURV9PTjoKKwkJdmFsdWUgPSAweDAyOworCQlicmVhazsKKwljYXNlIFZJQV9TVEFURV9PRkY6CisJCXZhbHVlID0gMHgwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKworCXZpYV93cml0ZV9yZWdfbWFzayhWSUFTUiwgMHgyRCwgdmFsdWUsIDB4MDMpOworfQorCitzdGF0aWMgdm9pZCBzZXRfcHJpbWFyeV9jbG9ja19zdGF0ZSh1OCBzdGF0ZSkKK3sKKwl1OCB2YWx1ZTsKKworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIFZJQV9TVEFURV9PTjoKKwkJdmFsdWUgPSAweDIwOworCQlicmVhazsKKwljYXNlIFZJQV9TVEFURV9PRkY6CisJCXZhbHVlID0gMHgwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKworCXZpYV93cml0ZV9yZWdfbWFzayhWSUFTUiwgMHgxQiwgdmFsdWUsIDB4MzApOworfQorCitzdGF0aWMgdm9pZCBzZXRfc2Vjb25kYXJ5X2Nsb2NrX3N0YXRlKHU4IHN0YXRlKQoreworCXU4IHZhbHVlOworCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgVklBX1NUQVRFX09OOgorCQl2YWx1ZSA9IDB4ODA7CisJCWJyZWFrOworCWNhc2UgVklBX1NUQVRFX09GRjoKKwkJdmFsdWUgPSAweDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCisJdmlhX3dyaXRlX3JlZ19tYXNrKFZJQVNSLCAweDFCLCB2YWx1ZSwgMHhDMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggc2V0X2Nsb2NrX3NvdXJjZV9jb21tb24oZW51bSB2aWFfY2xrc3JjIHNvdXJjZSwgYm9vbCB1c2VfcGxsKQoreworCXU4IGRhdGEgPSAwOworCisJc3dpdGNoIChzb3VyY2UpIHsKKwljYXNlIFZJQV9DTEtTUkNfWDE6CisJCWRhdGEgPSAweDAwOworCQlicmVhazsKKwljYXNlIFZJQV9DTEtTUkNfVFZYMToKKwkJZGF0YSA9IDB4MDI7CisJCWJyZWFrOworCWNhc2UgVklBX0NMS1NSQ19UVlBMTDoKKwkJZGF0YSA9IDB4MDQ7IC8qIDB4MDYgc2hvdWxkIGJlIHRoZSBzYW1lICovCisJCWJyZWFrOworCWNhc2UgVklBX0NMS1NSQ19EVlAxVFZDTEtSOgorCQlkYXRhID0gMHgwQTsKKwkJYnJlYWs7CisJY2FzZSBWSUFfQ0xLU1JDX0NBUDA6CisJCWRhdGEgPSAweEM7CisJCWJyZWFrOworCWNhc2UgVklBX0NMS1NSQ19DQVAxOgorCQlkYXRhID0gMHgwRTsKKwkJYnJlYWs7CisJfQorCisJaWYgKCF1c2VfcGxsKQorCQlkYXRhIHw9IDE7CisKKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIHZvaWQgc2V0X3ByaW1hcnlfY2xvY2tfc291cmNlKGVudW0gdmlhX2Nsa3NyYyBzb3VyY2UsIGJvb2wgdXNlX3BsbCkKK3sKKwl1OCBkYXRhID0gc2V0X2Nsb2NrX3NvdXJjZV9jb21tb24oc291cmNlLCB1c2VfcGxsKSA8PCA0OworCXZpYV93cml0ZV9yZWdfbWFzayhWSUFDUiwgMHg2QywgZGF0YSwgMHhGMCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9zZWNvbmRhcnlfY2xvY2tfc291cmNlKGVudW0gdmlhX2Nsa3NyYyBzb3VyY2UsIGJvb2wgdXNlX3BsbCkKK3sKKwl1OCBkYXRhID0gc2V0X2Nsb2NrX3NvdXJjZV9jb21tb24oc291cmNlLCB1c2VfcGxsKTsKKwl2aWFfd3JpdGVfcmVnX21hc2soVklBQ1IsIDB4NkMsIGRhdGEsIDB4MEYpOworfQorCitzdGF0aWMgdm9pZCBkdW1teV9zZXRfY2xvY2tfc3RhdGUodTggc3RhdGUpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgdW5kb2N1bWVudGVkIHNldCBjbG9jayBzdGF0ZS5cbiVzIiwgdmlhX3NsYXApOworfQorCitzdGF0aWMgdm9pZCBkdW1teV9zZXRfY2xvY2tfc291cmNlKGVudW0gdmlhX2Nsa3NyYyBzb3VyY2UsIGJvb2wgdXNlX3BsbCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJVc2luZyB1bmRvY3VtZW50ZWQgc2V0IGNsb2NrIHNvdXJjZS5cbiVzIiwgdmlhX3NsYXApOworfQorCitzdGF0aWMgdm9pZCBkdW1teV9zZXRfcGxsX3N0YXRlKHU4IHN0YXRlKQoreworCXByaW50ayhLRVJOX0lORk8gIlVzaW5nIHVuZG9jdW1lbnRlZCBzZXQgUExMIHN0YXRlLlxuJXMiLCB2aWFfc2xhcCk7Cit9CisKK3N0YXRpYyB2b2lkIGR1bW15X3NldF9wbGwoc3RydWN0IHZpYV9wbGxfY29uZmlnIGNvbmZpZykKK3sKKwlwcmludGsoS0VSTl9JTkZPICJVc2luZyB1bmRvY3VtZW50ZWQgc2V0IFBMTC5cbiVzIiwgdmlhX3NsYXApOworfQorCit2b2lkIHZpYV9jbG9ja19pbml0KHN0cnVjdCB2aWFfY2xvY2sgKmNsb2NrLCBpbnQgZ2Z4X2NoaXApCit7CisJc3dpdGNoIChnZnhfY2hpcCkgeworCWNhc2UgVU5JQ0hST01FX0NMRTI2NjoKKwljYXNlIFVOSUNIUk9NRV9LNDAwOgorCQljbG9jay0+c2V0X3ByaW1hcnlfY2xvY2tfc3RhdGUgPSBkdW1teV9zZXRfY2xvY2tfc3RhdGU7CisJCWNsb2NrLT5zZXRfcHJpbWFyeV9jbG9ja19zb3VyY2UgPSBkdW1teV9zZXRfY2xvY2tfc291cmNlOworCQljbG9jay0+c2V0X3ByaW1hcnlfcGxsX3N0YXRlID0gZHVtbXlfc2V0X3BsbF9zdGF0ZTsKKwkJY2xvY2stPnNldF9wcmltYXJ5X3BsbCA9IGNsZTI2Nl9zZXRfcHJpbWFyeV9wbGw7CisKKwkJY2xvY2stPnNldF9zZWNvbmRhcnlfY2xvY2tfc3RhdGUgPSBkdW1teV9zZXRfY2xvY2tfc3RhdGU7CisJCWNsb2NrLT5zZXRfc2Vjb25kYXJ5X2Nsb2NrX3NvdXJjZSA9IGR1bW15X3NldF9jbG9ja19zb3VyY2U7CisJCWNsb2NrLT5zZXRfc2Vjb25kYXJ5X3BsbF9zdGF0ZSA9IGR1bW15X3NldF9wbGxfc3RhdGU7CisJCWNsb2NrLT5zZXRfc2Vjb25kYXJ5X3BsbCA9IGNsZTI2Nl9zZXRfc2Vjb25kYXJ5X3BsbDsKKworCQljbG9jay0+c2V0X2VuZ2luZV9wbGxfc3RhdGUgPSBkdW1teV9zZXRfcGxsX3N0YXRlOworCQljbG9jay0+c2V0X2VuZ2luZV9wbGwgPSBkdW1teV9zZXRfcGxsOworCQlicmVhazsKKwljYXNlIFVOSUNIUk9NRV9LODAwOgorCWNhc2UgVU5JQ0hST01FX1BNODAwOgorCWNhc2UgVU5JQ0hST01FX0NONzAwOgorCWNhc2UgVU5JQ0hST01FX0NYNzAwOgorCWNhc2UgVU5JQ0hST01FX0NONzUwOgorCWNhc2UgVU5JQ0hST01FX0s4TTg5MDoKKwljYXNlIFVOSUNIUk9NRV9QNE04OTA6CisJY2FzZSBVTklDSFJPTUVfUDRNOTAwOgorCWNhc2UgVU5JQ0hST01FX1ZYODAwOgorCQljbG9jay0+c2V0X3ByaW1hcnlfY2xvY2tfc3RhdGUgPSBzZXRfcHJpbWFyeV9jbG9ja19zdGF0ZTsKKwkJY2xvY2stPnNldF9wcmltYXJ5X2Nsb2NrX3NvdXJjZSA9IHNldF9wcmltYXJ5X2Nsb2NrX3NvdXJjZTsKKwkJY2xvY2stPnNldF9wcmltYXJ5X3BsbF9zdGF0ZSA9IHNldF9wcmltYXJ5X3BsbF9zdGF0ZTsKKwkJY2xvY2stPnNldF9wcmltYXJ5X3BsbCA9IGs4MDBfc2V0X3ByaW1hcnlfcGxsOworCisJCWNsb2NrLT5zZXRfc2Vjb25kYXJ5X2Nsb2NrX3N0YXRlID0gc2V0X3NlY29uZGFyeV9jbG9ja19zdGF0ZTsKKwkJY2xvY2stPnNldF9zZWNvbmRhcnlfY2xvY2tfc291cmNlID0gc2V0X3NlY29uZGFyeV9jbG9ja19zb3VyY2U7CisJCWNsb2NrLT5zZXRfc2Vjb25kYXJ5X3BsbF9zdGF0ZSA9IHNldF9zZWNvbmRhcnlfcGxsX3N0YXRlOworCQljbG9jay0+c2V0X3NlY29uZGFyeV9wbGwgPSBrODAwX3NldF9zZWNvbmRhcnlfcGxsOworCisJCWNsb2NrLT5zZXRfZW5naW5lX3BsbF9zdGF0ZSA9IHNldF9lbmdpbmVfcGxsX3N0YXRlOworCQljbG9jay0+c2V0X2VuZ2luZV9wbGwgPSBrODAwX3NldF9lbmdpbmVfcGxsOworCQlicmVhazsKKwljYXNlIFVOSUNIUk9NRV9WWDg1NToKKwljYXNlIFVOSUNIUk9NRV9WWDkwMDoKKwkJY2xvY2stPnNldF9wcmltYXJ5X2Nsb2NrX3N0YXRlID0gc2V0X3ByaW1hcnlfY2xvY2tfc3RhdGU7CisJCWNsb2NrLT5zZXRfcHJpbWFyeV9jbG9ja19zb3VyY2UgPSBzZXRfcHJpbWFyeV9jbG9ja19zb3VyY2U7CisJCWNsb2NrLT5zZXRfcHJpbWFyeV9wbGxfc3RhdGUgPSBzZXRfcHJpbWFyeV9wbGxfc3RhdGU7CisJCWNsb2NrLT5zZXRfcHJpbWFyeV9wbGwgPSB2eDg1NV9zZXRfcHJpbWFyeV9wbGw7CisKKwkJY2xvY2stPnNldF9zZWNvbmRhcnlfY2xvY2tfc3RhdGUgPSBzZXRfc2Vjb25kYXJ5X2Nsb2NrX3N0YXRlOworCQljbG9jay0+c2V0X3NlY29uZGFyeV9jbG9ja19zb3VyY2UgPSBzZXRfc2Vjb25kYXJ5X2Nsb2NrX3NvdXJjZTsKKwkJY2xvY2stPnNldF9zZWNvbmRhcnlfcGxsX3N0YXRlID0gc2V0X3NlY29uZGFyeV9wbGxfc3RhdGU7CisJCWNsb2NrLT5zZXRfc2Vjb25kYXJ5X3BsbCA9IHZ4ODU1X3NldF9zZWNvbmRhcnlfcGxsOworCisJCWNsb2NrLT5zZXRfZW5naW5lX3BsbF9zdGF0ZSA9IHNldF9lbmdpbmVfcGxsX3N0YXRlOworCQljbG9jay0+c2V0X2VuZ2luZV9wbGwgPSB2eDg1NV9zZXRfZW5naW5lX3BsbDsKKwkJYnJlYWs7CisKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFfY2xvY2suaCBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYV9jbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NzE0YWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFfY2xvY2suaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAxMSBGbG9yaWFuIFRvYmlhcyBTY2hhbmRpbmF0IDxGbG9yaWFuU2NoYW5kaW5hdEBnbXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworLyoKKyAqIGNsb2NrIGFuZCBQTEwgbWFuYWdlbWVudCBmdW5jdGlvbnMKKyAqLworCisjaWZuZGVmIF9fVklBX0NMT0NLX0hfXworI2RlZmluZSBfX1ZJQV9DTE9DS19IX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK2VudW0gdmlhX2Nsa3NyYyB7CisJVklBX0NMS1NSQ19YMSA9IDAsCisJVklBX0NMS1NSQ19UVlgxLAorCVZJQV9DTEtTUkNfVFZQTEwsCisJVklBX0NMS1NSQ19EVlAxVFZDTEtSLAorCVZJQV9DTEtTUkNfQ0FQMCwKKwlWSUFfQ0xLU1JDX0NBUDEsCit9OworCitzdHJ1Y3QgdmlhX3BsbF9jb25maWcgeworCXUxNiBtdWx0aXBsaWVyOworCXU4IGRpdmlzb3I7CisJdTggcnNoaWZ0OworfTsKKworc3RydWN0IHZpYV9jbG9jayB7CisJdm9pZCAoKnNldF9wcmltYXJ5X2Nsb2NrX3N0YXRlKSh1OCBzdGF0ZSk7CisJdm9pZCAoKnNldF9wcmltYXJ5X2Nsb2NrX3NvdXJjZSkoZW51bSB2aWFfY2xrc3JjIHNyYywgYm9vbCB1c2VfcGxsKTsKKwl2b2lkICgqc2V0X3ByaW1hcnlfcGxsX3N0YXRlKSh1OCBzdGF0ZSk7CisJdm9pZCAoKnNldF9wcmltYXJ5X3BsbCkoc3RydWN0IHZpYV9wbGxfY29uZmlnIGNvbmZpZyk7CisKKwl2b2lkICgqc2V0X3NlY29uZGFyeV9jbG9ja19zdGF0ZSkodTggc3RhdGUpOworCXZvaWQgKCpzZXRfc2Vjb25kYXJ5X2Nsb2NrX3NvdXJjZSkoZW51bSB2aWFfY2xrc3JjIHNyYywgYm9vbCB1c2VfcGxsKTsKKwl2b2lkICgqc2V0X3NlY29uZGFyeV9wbGxfc3RhdGUpKHU4IHN0YXRlKTsKKwl2b2lkICgqc2V0X3NlY29uZGFyeV9wbGwpKHN0cnVjdCB2aWFfcGxsX2NvbmZpZyBjb25maWcpOworCisJdm9pZCAoKnNldF9lbmdpbmVfcGxsX3N0YXRlKSh1OCBzdGF0ZSk7CisJdm9pZCAoKnNldF9lbmdpbmVfcGxsKShzdHJ1Y3QgdmlhX3BsbF9jb25maWcgY29uZmlnKTsKK307CisKKworc3RhdGljIGlubGluZSB1MzIgZ2V0X3BsbF9pbnRlcm5hbF9mcmVxdWVuY3kodTMyIHJlZl9mcmVxLAorCXN0cnVjdCB2aWFfcGxsX2NvbmZpZyBwbGwpCit7CisJcmV0dXJuIHJlZl9mcmVxIC8gcGxsLmRpdmlzb3IgKiBwbGwubXVsdGlwbGllcjsKK30KKworc3RhdGljIGlubGluZSB1MzIgZ2V0X3BsbF9vdXRwdXRfZnJlcXVlbmN5KHUzMiByZWZfZnJlcSwKKwlzdHJ1Y3QgdmlhX3BsbF9jb25maWcgcGxsKQoreworCXJldHVybiBnZXRfcGxsX2ludGVybmFsX2ZyZXF1ZW5jeShyZWZfZnJlcSwgcGxsKSA+PiBwbGwucnNoaWZ0OworfQorCit2b2lkIHZpYV9jbG9ja19pbml0KHN0cnVjdCB2aWFfY2xvY2sgKmNsb2NrLCBpbnQgZ2Z4X2NoaXApOworCisjZW5kaWYgLyogX19WSUFfQ0xPQ0tfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5jIGIvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuYwppbmRleCBhNTQyYmVkLi5jZjQzYzgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpYS1jb3JlLmg+CisjaW5jbHVkZSA8YXNtL29scGMuaD4KIAogI2RlZmluZSBfTUFTVEVSX0ZJTEUKICNpbmNsdWRlICJnbG9iYWwuaCIKQEAgLTM3LDYgKzM4LDggQEAKIHN0YXRpYyBpbnQgdmlhZmJfYnBwID0gMzI7CiBzdGF0aWMgaW50IHZpYWZiX2JwcDEgPSAzMjsKIAorc3RhdGljIHVuc2lnbmVkIGludCB2aWFmYl9zZWNvbmRfeHJlcyA9IDY0MDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdmlhZmJfc2Vjb25kX3lyZXMgPSA0ODA7CiBzdGF0aWMgdW5zaWduZWQgaW50IHZpYWZiX3NlY29uZF9vZmZzZXQ7CiBzdGF0aWMgaW50IHZpYWZiX3NlY29uZF9zaXplOwogCkBAIC00NDAsOCArNDQzLDggQEAKIAkJaWYgKHZpYWZiX1NBTU1fT04gPT0gMSkgewogCQkJdS52aWFtb2RlLnhyZXNfc2VjID0gdmlhZmJfc2Vjb25kX3hyZXM7CiAJCQl1LnZpYW1vZGUueXJlc19zZWMgPSB2aWFmYl9zZWNvbmRfeXJlczsKLQkJCXUudmlhbW9kZS52aXJ0dWFsX3hyZXNfc2VjID0gdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeHJlczsKLQkJCXUudmlhbW9kZS52aXJ0dWFsX3lyZXNfc2VjID0gdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeXJlczsKKwkJCXUudmlhbW9kZS52aXJ0dWFsX3hyZXNfc2VjID0gdmlhZmJfZHVhbF9mYiA/IHZpYWZiaW5mbzEtPnZhci54cmVzX3ZpcnR1YWwgOiB2aWFmYmluZm8tPnZhci54cmVzX3ZpcnR1YWw7CisJCQl1LnZpYW1vZGUudmlydHVhbF95cmVzX3NlYyA9IHZpYWZiX2R1YWxfZmIgPyB2aWFmYmluZm8xLT52YXIueXJlc192aXJ0dWFsIDogdmlhZmJpbmZvLT52YXIueXJlc192aXJ0dWFsOwogCQkJdS52aWFtb2RlLnJlZnJlc2hfc2VjID0gdmlhZmJfcmVmcmVzaDE7CiAJCQl1LnZpYW1vZGUuYnBwX3NlYyA9IHZpYWZiX2JwcDE7CiAJCX0gZWxzZSB7CkBAIC05MzAsMTAgKzkzMyw4IEBACiAJLyogUnVsZTogZGV2aWNlIG9uIGlnYTEgcGF0aCBhcmUgdGhlIHByaW1hcnkgZGV2aWNlLiAqLwogCWlmICh2aWFmYl9TQU1NX09OKSB7CiAJCWlmICh2aWFmYl9DUlRfT04pIHsKLQkJCWlmICh2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9PSBJR0ExKSB7Ci0JCQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiQ1JUIElHQSBQYXRoOiVkXG4iLAotCQkJCQl2aWFwYXJpbmZvLT4KLQkJCQkJY3J0X3NldHRpbmdfaW5mby0+aWdhX3BhdGgpOworCQkJaWYgKHZpYXBhcmluZm8tPnNoYXJlZC0+aWdhMV9kZXZpY2VzICYgVklBX0NSVCkgeworCQkJCURFQlVHX01TRyhLRVJOX0lORk8gIkNSVCBJR0EgUGF0aDolZFxuIiwgSUdBMSk7CiAJCQkJcHJpbWFyeV9kZXZpY2UgPSBDUlRfRGV2aWNlOwogCQkJfQogCQl9CkBAIC0xMDExLDggKzEwMTIsMTMgQEAKIAkvKiAgICBOb3RlOiBUaGUgcHJldmlvdXMgb2YgYWN0aXZlX2RldiBpcyBwcmltYXJ5IGRldmljZSwKIAkgICBhbmQgdGhlIGZvbGxvd2luZyBpcyBzZWNvbmRhcnkgZGV2aWNlLiAqLwogCWlmICghdmlhZmJfYWN0aXZlX2RldikgewotCQl2aWFmYl9DUlRfT04gPSBTVEFURV9PTjsKLQkJdmlhZmJfU0FNTV9PTiA9IFNUQVRFX09GRjsKKwkJaWYgKG1hY2hpbmVfaXNfb2xwYygpKSB7IC8qIExDRCBvbmx5ICovCisJCQl2aWFmYl9MQ0RfT04gPSBTVEFURV9PTjsKKwkJCXZpYWZiX1NBTU1fT04gPSBTVEFURV9PRkY7CisJCX0gZWxzZSB7CisJCQl2aWFmYl9DUlRfT04gPSBTVEFURV9PTjsKKwkJCXZpYWZiX1NBTU1fT04gPSBTVEFURV9PRkY7CisJCX0KIAl9IGVsc2UgaWYgKCFzdHJjbXAodmlhZmJfYWN0aXZlX2RldiwgIkNSVCtEVkkiKSkgewogCQkvKiBDUlQrRFZJICovCiAJCXZpYWZiX0NSVF9PTiA9IFNUQVRFX09OOwpAQCAtMTY2NSw4ICsxNjcxLDEzIEBACiAJY2hhciAqcHRyOwogCiAJaWYgKCFzdHIpIHsKLQkJKnhyZXMgPSA2NDA7Ci0JCSp5cmVzID0gNDgwOworCQlpZiAobWFjaGluZV9pc19vbHBjKCkpIHsKKwkJCSp4cmVzID0gMTIwMDsKKwkJCSp5cmVzID0gOTAwOworCQl9IGVsc2UgeworCQkJKnhyZXMgPSA2NDA7CisJCQkqeXJlcyA9IDQ4MDsKKwkJfQogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE3NDYsNyArMTc1Nyw2IEBACiAJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8gPSAmdmlhcGFyaW5mby0+c2hhcmVkLT5sdmRzX3NldHRpbmdfaW5mbzsKIAl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzIgPQogCQkmdmlhcGFyaW5mby0+c2hhcmVkLT5sdmRzX3NldHRpbmdfaW5mbzI7Ci0JdmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mbyA9ICZ2aWFwYXJpbmZvLT5zaGFyZWQtPmNydF9zZXR0aW5nX2luZm87CiAJdmlhcGFyaW5mby0+Y2hpcF9pbmZvID0gJnZpYXBhcmluZm8tPnNoYXJlZC0+Y2hpcF9pbmZvOwogCiAJaWYgKHZpYWZiX2R1YWxfZmIpCkBAIC0xNzkzLDE0ICsxODAzLDEwIEBACiAKIAlwYXJzZV9tb2RlKHZpYWZiX21vZGUsICZkZWZhdWx0X3hyZXMsICZkZWZhdWx0X3lyZXMpOwogCXZtb2RlX2VudHJ5ID0gdmlhZmJfZ2V0X21vZGUoZGVmYXVsdF94cmVzLCBkZWZhdWx0X3lyZXMpOwotCWlmICh2aWFmYl9TQU1NX09OID09IDEpIHsKKwlpZiAodmlhZmJfU0FNTV9PTiA9PSAxKQogCQlwYXJzZV9tb2RlKHZpYWZiX21vZGUxLCAmdmlhZmJfc2Vjb25kX3hyZXMsCiAJCQkmdmlhZmJfc2Vjb25kX3lyZXMpOwogCi0JCXZpYWZiX3NlY29uZF92aXJ0dWFsX3hyZXMgPSB2aWFmYl9zZWNvbmRfeHJlczsKLQkJdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeXJlcyA9IHZpYWZiX3NlY29uZF95cmVzOwotCX0KLQogCWRlZmF1bHRfdmFyLnhyZXMgPSBkZWZhdWx0X3hyZXM7CiAJZGVmYXVsdF92YXIueXJlcyA9IGRlZmF1bHRfeXJlczsKIAlkZWZhdWx0X3Zhci54cmVzX3ZpcnR1YWwgPSBkZWZhdWx0X3hyZXM7CkBAIC0xODQ0LDggKzE4NTAsOCBAQAogCiAJCWRlZmF1bHRfdmFyLnhyZXMgPSB2aWFmYl9zZWNvbmRfeHJlczsKIAkJZGVmYXVsdF92YXIueXJlcyA9IHZpYWZiX3NlY29uZF95cmVzOwotCQlkZWZhdWx0X3Zhci54cmVzX3ZpcnR1YWwgPSB2aWFmYl9zZWNvbmRfdmlydHVhbF94cmVzOwotCQlkZWZhdWx0X3Zhci55cmVzX3ZpcnR1YWwgPSB2aWFmYl9zZWNvbmRfdmlydHVhbF95cmVzOworCQlkZWZhdWx0X3Zhci54cmVzX3ZpcnR1YWwgPSB2aWFmYl9zZWNvbmRfeHJlczsKKwkJZGVmYXVsdF92YXIueXJlc192aXJ0dWFsID0gdmlhZmJfc2Vjb25kX3lyZXM7CiAJCWRlZmF1bHRfdmFyLmJpdHNfcGVyX3BpeGVsID0gdmlhZmJfYnBwMTsKIAkJdmlhZmJfZmlsbF92YXJfdGltaW5nX2luZm8oJmRlZmF1bHRfdmFyLCB2aWFmYl9nZXRfcmVmcmVzaCgKIAkJCWRlZmF1bHRfdmFyLnhyZXMsIGRlZmF1bHRfdmFyLnlyZXMsIHZpYWZiX3JlZnJlc2gxKSwKQEAgLTE5MjcsMTEgKzE5MzMsMTYgQEAKIH0KIAogI2lmbmRlZiBNT0RVTEUKLXN0YXRpYyBpbnQgX19pbml0IHZpYWZiX3NldHVwKGNoYXIgKm9wdGlvbnMpCitzdGF0aWMgaW50IF9faW5pdCB2aWFmYl9zZXR1cCh2b2lkKQogewogCWNoYXIgKnRoaXNfb3B0OworCWNoYXIgKm9wdGlvbnM7CisKIAlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9zZXR1cCFcbiIpOwogCisJaWYgKGZiX2dldF9vcHRpb25zKCJ2aWFmYiIsICZvcHRpb25zKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlpZiAoIW9wdGlvbnMgfHwgISpvcHRpb25zKQogCQlyZXR1cm4gMDsKIApAQCAtMjAwNSwxMSArMjAxNiwxNiBAQAogaW50IF9faW5pdCB2aWFmYl9pbml0KHZvaWQpCiB7CiAJdTMyIGR1bW15X3gsIGR1bW15X3k7CisJaW50IHI7CisKKwlpZiAobWFjaGluZV9pc19vbHBjKCkpCisJCS8qIEFwcGx5IFhPLTEuNS1zcGVjaWZpYyBjb25maWd1cmF0aW9uLiAqLworCQl2aWFmYl9sY2RfcGFuZWxfaWQgPSAyMzsKKwogI2lmbmRlZiBNT0RVTEUKLQljaGFyICpvcHRpb24gPSBOVUxMOwotCWlmIChmYl9nZXRfb3B0aW9ucygidmlhZmIiLCAmb3B0aW9uKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JdmlhZmJfc2V0dXAob3B0aW9uKTsKKwlyID0gdmlhZmJfc2V0dXAoKTsKKwlpZiAociA8IDApCisJCXJldHVybiByOwogI2VuZGlmCiAJaWYgKHBhcnNlX21vZGUodmlhZmJfbW9kZSwgJmR1bW15X3gsICZkdW1teV95KQogCQl8fCAhdmlhZmJfZ2V0X21vZGUoZHVtbXlfeCwgZHVtbXlfeSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5oCmluZGV4IDEzNzk5NmQuLmQ5NDQwNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmgKKysrIGIvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuaApAQCAtNTAsNyArNTAsNiBAQAogCiAJLyogQWxsIHRoZSBpbmZvcm1hdGlvbiB3aWxsIGJlIG5lZWRlZCB0byBzZXQgZW5naW5lICovCiAJc3RydWN0IHRtZHNfc2V0dGluZ19pbmZvcm1hdGlvbiB0bWRzX3NldHRpbmdfaW5mbzsKLQlzdHJ1Y3QgY3J0X3NldHRpbmdfaW5mb3JtYXRpb24gY3J0X3NldHRpbmdfaW5mbzsKIAlzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uIGx2ZHNfc2V0dGluZ19pbmZvOwogCXN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24gbHZkc19zZXR0aW5nX2luZm8yOwogCXN0cnVjdCBjaGlwX2luZm9ybWF0aW9uIGNoaXBfaW5mbzsKQEAgLTc5LDE0ICs3OCwxMSBAQAogCS8qIEFsbCB0aGUgaW5mb3JtYXRpb24gd2lsbCBiZSBuZWVkZWQgdG8gc2V0IGVuZ2luZSAqLwogCS8qIGRlcHJlY2lhdGVkLCB1c2UgdGhlIG9uZXMgaW4gc2hhcmVkIGRpcmVjdGx5ICovCiAJc3RydWN0IHRtZHNfc2V0dGluZ19pbmZvcm1hdGlvbiAqdG1kc19zZXR0aW5nX2luZm87Ci0Jc3RydWN0IGNydF9zZXR0aW5nX2luZm9ybWF0aW9uICpjcnRfc2V0dGluZ19pbmZvOwogCXN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24gKmx2ZHNfc2V0dGluZ19pbmZvOwogCXN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24gKmx2ZHNfc2V0dGluZ19pbmZvMjsKIAlzdHJ1Y3QgY2hpcF9pbmZvcm1hdGlvbiAqY2hpcF9pbmZvOwogfTsKIAotZXh0ZXJuIHVuc2lnbmVkIGludCB2aWFmYl9zZWNvbmRfdmlydHVhbF95cmVzOwotZXh0ZXJuIHVuc2lnbmVkIGludCB2aWFmYl9zZWNvbmRfdmlydHVhbF94cmVzOwogZXh0ZXJuIGludCB2aWFmYl9TQU1NX09OOwogZXh0ZXJuIGludCB2aWFmYl9kdWFsX2ZiOwogZXh0ZXJuIGludCB2aWFmYl9MQ0QyX09OOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvdmlhbW9kZS5jIGIvZHJpdmVycy92aWRlby92aWEvdmlhbW9kZS5jCmluZGV4IDhjNWJjNDEuLjU4ZGY3NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYW1vZGUuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFtb2RlLmMKQEAgLTMwLDEwICszMCw2IEBACiB7VklBU1IsIFNSMUEsIDB4RkIsIDB4MDh9LAoge1ZJQVNSLCBTUjFFLCAweDBGLCAweDAxfSwKIHtWSUFTUiwgU1IyQSwgMHhGRiwgMHgwMH0sCi17VklBQ1IsIENSMEEsIDB4RkYsIDB4MUV9LAkvKiBDdXJzb3IgU3RhcnQgICAgICAgICAgICAgICAgICAgICAgICAqLwote1ZJQUNSLCBDUjBCLCAweEZGLCAweDAwfSwJLyogQ3Vyc29yIEVuZCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLXtWSUFDUiwgQ1IwRSwgMHhGRiwgMHgwMH0sCS8qIEN1cnNvciBMb2NhdGlvbiBIaWdoICAgICAgICAgICAgICAgICovCi17VklBQ1IsIENSMEYsIDB4RkYsIDB4MDB9LAkvKiBDdXJzb3IgTG9jYWx0aW9uIExvdyAgICAgICAgICAgICAgICAqLwoge1ZJQUNSLCBDUjMyLCAweEZGLCAweDAwfSwKIHtWSUFDUiwgQ1IzMywgMHhGRiwgMHgwMH0sCiB7VklBQ1IsIENSMzUsIDB4RkYsIDB4MDB9LApAQCAtNDEsNyArMzcsNiBAQAoge1ZJQUNSLCBDUjY5LCAweEZGLCAweDAwfSwKIHtWSUFDUiwgQ1I2QSwgMHhGRiwgMHg0MH0sCiB7VklBQ1IsIENSNkIsIDB4RkYsIDB4MDB9LAote1ZJQUNSLCBDUjZDLCAweEZGLCAweDAwfSwKIHtWSUFDUiwgQ1I4OCwgMHhGRiwgMHg0MH0sCS8qIExDRCBQYW5lbCBUeXBlICAgICAgICAgICAgICAgICAgICAgICovCiB7VklBQ1IsIENSODksIDB4RkYsIDB4MDB9LAkvKiBMQ0QgVGltaW5nIENvbnRyb2wgMCAgICAgICAgICAgICAgICAqLwoge1ZJQUNSLCBDUjhBLCAweEZGLCAweDg4fSwJLyogTENEIFRpbWluZyBDb250cm9sIDEgICAgICAgICAgICAgICAgKi8KQEAgLTg3LDcgKzgyLDYgQEAKIHtWSUFDUiwgQ1I2OSwgMHhGRiwgMHgwMH0sCiB7VklBQ1IsIENSNkEsIDB4RkQsIDB4NDB9LAoge1ZJQUNSLCBDUjZCLCAweEZGLCAweDAwfSwKLXtWSUFDUiwgQ1I2QywgMHhGRiwgMHgwMH0sCiB7VklBQ1IsIENSNzcsIDB4RkYsIDB4MDB9LAkvKiBMQ0Qgc2NhbGluZyBGYWN0b3IgKi8KIHtWSUFDUiwgQ1I3OCwgMHhGRiwgMHgwMH0sCS8qIExDRCBzY2FsaW5nIEZhY3RvciAqLwoge1ZJQUNSLCBDUjc5LCAweEZGLCAweDAwfSwJLyogTENEIHNjYWxpbmcgRmFjdG9yICovCkBAIC0xMjUsMTAgKzExOSw2IEBACiAJe1ZJQVNSLCBTUjJBLCAweEZGLCAweDAwfSwJLyogUG93ZXIgTWFuYWdlbWVudCBDb250cm9sIDUgICAgICAqLwogCXtWSUFTUiwgU1IyRCwgMHhGRiwgMHhGRn0sCS8qIFBvd2VyIE1hbmFnZW1lbnQgQ29udHJvbCAxICAgICAgKi8KIAl7VklBU1IsIFNSMkUsIDB4RkYsIDB4RkZ9LAkvKiBQb3dlciBNYW5hZ2VtZW50IENvbnRyb2wgMiAgICAgICovCi0Je1ZJQUNSLCBDUjBBLCAweEZGLCAweDFFfSwJLyogQ3Vyc29yIFN0YXJ0ICAgICAgICAgICAgICAgICAgICAqLwotCXtWSUFDUiwgQ1IwQiwgMHhGRiwgMHgwMH0sCS8qIEN1cnNvciBFbmQgICAgICAgICAgICAgICAgICAgICAgKi8KLQl7VklBQ1IsIENSMEUsIDB4RkYsIDB4MDB9LAkvKiBDdXJzb3IgTG9jYXRpb24gSGlnaCAgICAgICAgICAgICovCi0Je1ZJQUNSLCBDUjBGLCAweEZGLCAweDAwfSwJLyogQ3Vyc29yIExvY2FsdGlvbiBMb3cgICAgICAgICAgICAqLwogCXtWSUFDUiwgQ1IzMywgMHhGRiwgMHgwMH0sCiAJe1ZJQUNSLCBDUjU1LCAweDgwLCAweDAwfSwKIAl7VklBQ1IsIENSNUQsIDB4ODAsIDB4MDB9LApAQCAtMTYxLDExICsxNTEsNyBAQAoge1ZJQVNSLCBTUjFCLCAweEZGLCAweEYwfSwKIHtWSUFTUiwgU1IxRSwgMHhGRiwgMHgwMX0sCiB7VklBU1IsIFNSMkEsIDB4RkYsIDB4MDB9LAote1ZJQVNSLCBTUjJELCAweEZGLCAweEZGfSwJLyogVkNLIGFuZCBMQ0sgUExMIHBvd2VyIG9uLiAgICAgICAgICAgKi8KLXtWSUFDUiwgQ1IwQSwgMHhGRiwgMHgxRX0sCS8qIEN1cnNvciBTdGFydCAgICAgICAgICAgICAgICAgICAgICAgICovCi17VklBQ1IsIENSMEIsIDB4RkYsIDB4MDB9LAkvKiBDdXJzb3IgRW5kICAgICAgICAgICAgICAgICAgICAgICAgICAqLwote1ZJQUNSLCBDUjBFLCAweEZGLCAweDAwfSwJLyogQ3Vyc29yIExvY2F0aW9uIEhpZ2ggICAgICAgICAgICAgICAgKi8KLXtWSUFDUiwgQ1IwRiwgMHhGRiwgMHgwMH0sCS8qIEN1cnNvciBMb2NhbHRpb24gTG93ICAgICAgICAgICAgICAgICovCit7VklBU1IsIFNSMkQsIDB4QzAsIDB4QzB9LAkvKiBkZWxheWVkIEUzX0VDSyAqLwoge1ZJQUNSLCBDUjMyLCAweEZGLCAweDAwfSwKIHtWSUFDUiwgQ1IzMywgMHhGRiwgMHgwMH0sCiB7VklBQ1IsIENSMzUsIDB4RkYsIDB4MDB9LApAQCAtMTc0LDcgKzE2MCw2IEBACiB7VklBQ1IsIENSNjksIDB4RkYsIDB4MDB9LAoge1ZJQUNSLCBDUjZBLCAweEZGLCAweDQwfSwKIHtWSUFDUiwgQ1I2QiwgMHhGRiwgMHgwMH0sCi17VklBQ1IsIENSNkMsIDB4RkYsIDB4MDB9LAoge1ZJQUNSLCBDUjg4LCAweEZGLCAweDQwfSwJLyogTENEIFBhbmVsIFR5cGUgICAgICAgICAgICAgICAgICAgICAgKi8KIHtWSUFDUiwgQ1I4OSwgMHhGRiwgMHgwMH0sCS8qIExDRCBUaW1pbmcgQ29udHJvbCAwICAgICAgICAgICAgICAgICovCiB7VklBQ1IsIENSOEEsIDB4RkYsIDB4ODh9LAkvKiBMQ0QgVGltaW5nIENvbnRyb2wgMSAgICAgICAgICAgICAgICAqLwpAQCAtMjA0LDE0ICsxODksNyBAQAoge1ZJQVNSLCBTUjJBLCAweEYwLCAweDAwfSwKIHtWSUFTUiwgU1I1OCwgMHhGRiwgMHgwMH0sCiB7VklBU1IsIFNSNTksIDB4RkYsIDB4MDB9LAote1ZJQVNSLCBTUjJELCAweEZGLCAweEZGfSwJLyogVkNLIGFuZCBMQ0sgUExMIHBvd2VyIG9uLiAgICAgICAgICAgKi8KLXtWSUFDUiwgQ1IwOSwgMHhGRiwgMHgwMH0sCS8qIEluaXRpYWwgQ1IwOT0wKi8KLXtWSUFDUiwgQ1IxMSwgMHg4RiwgMHgwMH0sCS8qIElHQTEgaW5pdGlhbCAgVmVydGljYWwgZW5kICAgICAgICovCi17VklBQ1IsIENSMTcsIDB4N0YsIDB4MDB9LCAJLyogSUdBMSBDUlQgTW9kZSBjb250cm9sIGluaXQgICAqLwote1ZJQUNSLCBDUjBBLCAweEZGLCAweDFFfSwJLyogQ3Vyc29yIFN0YXJ0ICAgICAgICAgICAgICAgICAgICAgICAgKi8KLXtWSUFDUiwgQ1IwQiwgMHhGRiwgMHgwMH0sCS8qIEN1cnNvciBFbmQgICAgICAgICAgICAgICAgICAgICAgICAgICovCi17VklBQ1IsIENSMEUsIDB4RkYsIDB4MDB9LAkvKiBDdXJzb3IgTG9jYXRpb24gSGlnaCAgICAgICAgICAgICAgICAqLwote1ZJQUNSLCBDUjBGLCAweEZGLCAweDAwfSwJLyogQ3Vyc29yIExvY2FsdGlvbiBMb3cgICAgICAgICAgICAgICAgKi8KK3tWSUFTUiwgU1IyRCwgMHhDMCwgMHhDMH0sCS8qIGRlbGF5ZWQgRTNfRUNLICovCiB7VklBQ1IsIENSMzIsIDB4RkYsIDB4MDB9LAoge1ZJQUNSLCBDUjMzLCAweDdGLCAweDAwfSwKIHtWSUFDUiwgQ1IzNSwgMHhGRiwgMHgwMH0sCkBAIC0yMTksNyArMTk3LDYgQEAKIHtWSUFDUiwgQ1I2OSwgMHhGRiwgMHgwMH0sCiB7VklBQ1IsIENSNkEsIDB4RkQsIDB4NjB9LAoge1ZJQUNSLCBDUjZCLCAweEZGLCAweDAwfSwKLXtWSUFDUiwgQ1I2QywgMHhGRiwgMHgwMH0sCiB7VklBQ1IsIENSODgsIDB4RkYsIDB4NDB9LCAgICAgICAgICAvKiBMQ0QgUGFuZWwgVHlwZSAgICAgICAgICAgICAgICAgICAgICAqLwoge1ZJQUNSLCBDUjg5LCAweEZGLCAweDAwfSwgICAgICAgICAgLyogTENEIFRpbWluZyBDb250cm9sIDAgICAgICAgICAgICAgICAgKi8KIHtWSUFDUiwgQ1I4QSwgMHhGRiwgMHg4OH0sICAgICAgICAgIC8qIExDRCBUaW1pbmcgQ29udHJvbCAxICAgICAgICAgICAgICAgICovCkBAIC02MDYsNyArNTgzLDcgQEAKIC8qIDEyMDB4OTAwIChEQ09OKSAqLwogc3RhdGljIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBEQ09OMTIwMHg5MDBbXSA9IHsKIAkvKiByX3JhdGUsICAgICAgICAgICAgICAgaHNwLCAgICAgICAgICAgICAgIHZzcCAgICovCi0Je1JFRlJFU0hfNjAsIE0xMjAwWDkwMF9SNjBfSFNQLCBNMTIwMFg5MDBfUjYwX1ZTUCwKKwl7UkVGUkVTSF80OSwgTTEyMDBYOTAwX1I2MF9IU1AsIE0xMjAwWDkwMF9SNjBfVlNQLAogCS8qIFRoZSBjb3JyZWN0IGh0b3RhbCBpcyAxMjQwLCBidXQgdGhpcyBkb2Vzbid0IHJhc3RlciBvbiBWWDg1NS4gKi8KIAkvKiBWaWEgc3VnZ2VzdGVkIGNoYW5naW5nIHRvIGEgbXVsdGlwbGUgb2YgMTYsIGhlbmNlIDEyNjQuICAgICAgICovCiAJLyogIEhULCAgIEhBLCAgSEJTLCBIQkUsICBIU1MsIEhTRSwgIFZULCAgVkEsIFZCUywgVkJFLCBWU1MsIFZTRSAqLwpAQCAtODc3LDIzICs4NTQsNiBAQAogCXtDUlRNMTkyMHgxMjAwX1JCLCBBUlJBWV9TSVpFKENSVE0xOTIweDEyMDBfUkIpfQogfTsKIAotc3RydWN0IGNydF9tb2RlX3RhYmxlIENFQU0xMjgweDcyMFtdID0gewotCXtSRUZSRVNIXzYwLCBNMTI4MFg3MjBfQ0VBX1I2MF9IU1AsIE0xMjgwWDcyMF9DRUFfUjYwX1ZTUCwKLQkgLyogSFQsICAgIEhBLCAgIEhCUywgIEhCRSwgIEhTUywgSFNFLCAgVlQsICAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KLQkgezE2NTAsIDEyODAsIDEyODAsIDM3MCwgMTM5MCwgNDAsIDc1MCwgNzIwLCA3MjAsIDMwLCA3MjUsIDV9IH0KLX07Ci1zdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ0VBTTE5MjB4MTA4MFtdID0gewotCXtSRUZSRVNIXzYwLCBNMTkyMFgxMDgwX0NFQV9SNjBfSFNQLCBNMTkyMFgxMDgwX0NFQV9SNjBfVlNQLAotCSAvKiBIVCwgICAgSEEsICAgSEJTLCAgSEJFLCAgSFNTLCBIU0UsICBWVCwgIFZBLCBWQlMsIFZCRSwgIFZTUywgVlNFICovCi0JIHsyMjAwLCAxOTIwLCAxOTIwLCAzMDAsIDIwMDgsIDQ0LCAxMTI1LCAxMDgwLCAxMDgwLCA0NSwgMTA4NCwgNX0gfQotfTsKLXN0cnVjdCBWaWRlb01vZGVUYWJsZSBDRUFfSERNSV9Nb2Rlc1tdID0gewotCS8qIERpc3BsYXkgOiAxMjgweDcyMCAqLwotCXtDRUFNMTI4MHg3MjAsIEFSUkFZX1NJWkUoQ0VBTTEyODB4NzIwKX0sCi0Je0NFQU0xOTIweDEwODAsIEFSUkFZX1NJWkUoQ0VBTTE5MjB4MTA4MCl9Ci19OwotCi1pbnQgTlVNX1RPVEFMX0NFQV9NT0RFUyA9IEFSUkFZX1NJWkUoQ0VBX0hETUlfTW9kZXMpOwogaW50IE5VTV9UT1RBTF9DTjQwMF9Nb2RlWHJlZ3MgPSBBUlJBWV9TSVpFKENONDAwX01vZGVYcmVncyk7CiBpbnQgTlVNX1RPVEFMX0NONzAwX01vZGVYcmVncyA9IEFSUkFZX1NJWkUoQ043MDBfTW9kZVhyZWdzKTsKIGludCBOVU1fVE9UQUxfS000MDBfTW9kZVhyZWdzID0gQVJSQVlfU0laRShLTTQwMF9Nb2RlWHJlZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvdmlhbW9kZS5oIGIvZHJpdmVycy92aWRlby92aWEvdmlhbW9kZS5oCmluZGV4IDhhNjdlYTEuLjM3NTEyODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYW1vZGUuaAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFtb2RlLmgKQEAgLTQxLDcgKzQxLDYgQEAKIAlzdHJ1Y3QgaW9fcmVnICppb19yZWdfdGFibGU7CiB9OwogCi1leHRlcm4gaW50IE5VTV9UT1RBTF9DRUFfTU9ERVM7CiBleHRlcm4gaW50IE5VTV9UT1RBTF9DTjQwMF9Nb2RlWHJlZ3M7CiBleHRlcm4gaW50IE5VTV9UT1RBTF9DTjcwMF9Nb2RlWHJlZ3M7CiBleHRlcm4gaW50IE5VTV9UT1RBTF9LTTQwMF9Nb2RlWHJlZ3M7CkBAIC01MCwxNCArNDksNiBAQAogZXh0ZXJuIGludCBOVU1fVE9UQUxfQ0xFMjY2X01vZGVYcmVnczsKIGV4dGVybiBpbnQgTlVNX1RPVEFMX1BBVENIX01PREU7CiAKLS8qKioqKioqKioqKioqKioqKioqKi8KLS8qIE1vZGUgVGFibGUgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKi8KLQotZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDRUFNMTI4MHg3MjBbXTsKLWV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ0VBTTE5MjB4MTA4MFtdOwotZXh0ZXJuIHN0cnVjdCBWaWRlb01vZGVUYWJsZSBDRUFfSERNSV9Nb2Rlc1tdOwotCiBleHRlcm4gc3RydWN0IGlvX3JlZyBDTjQwMF9Nb2RlWHJlZ3NbXTsKIGV4dGVybiBzdHJ1Y3QgaW9fcmVnIENONzAwX01vZGVYcmVnc1tdOwogZXh0ZXJuIHN0cnVjdCBpb19yZWcgS000MDBfTW9kZVhyZWdzW107CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2JjbTYzeHhfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2JjbTYzeHhfd2R0LmMKaW5kZXggM2M1MDQ1YS4uNTA2NGU4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9iY202M3h4X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvYmNtNjN4eF93ZHQuYwpAQCAtMjQ4LDcgKzI0OCw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWJjbTYzeHhfd2R0X2RldmljZS5yZWdzID0gaW9yZW1hcF9ub2NhY2hlKHItPnN0YXJ0LCByLT5lbmQgLSByLT5zdGFydCk7CisJYmNtNjN4eF93ZHRfZGV2aWNlLnJlZ3MgPSBpb3JlbWFwX25vY2FjaGUoci0+c3RhcnQsIHJlc291cmNlX3NpemUocikpOwogCWlmICghYmNtNjN4eF93ZHRfZGV2aWNlLnJlZ3MpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlbWFwIEkvTyByZXNvdXJjZXNcbiIpOwogCQlyZXR1cm4gLUVOWElPOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vZXZ0Y2huLmMgYi9kcml2ZXJzL3hlbi9ldnRjaG4uYwppbmRleCBlZjExZGFmLi5kYmMxM2U5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9ldnRjaG4uYworKysgYi9kcml2ZXJzL3hlbi9ldnRjaG4uYwpAQCAtNDcwLDcgKzQ3MCw3IEBACiAKIAlmaWxwLT5wcml2YXRlX2RhdGEgPSB1OwogCi0JcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbHApOzsKKwlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlscCk7CiB9CiAKIHN0YXRpYyBpbnQgZXZ0Y2huX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9zd2lvdGxiLXhlbi5jIGIvZHJpdmVycy94ZW4vc3dpb3RsYi14ZW4uYwppbmRleCA1NDQ2OWMzLi42NWVhMjFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9zd2lvdGxiLXhlbi5jCisrKyBiL2RyaXZlcnMveGVuL3N3aW90bGIteGVuLmMKQEAgLTU0LDcgKzU0LDcgQEAKIAogc3RhdGljIGRtYV9hZGRyX3QgeGVuX3BoeXNfdG9fYnVzKHBoeXNfYWRkcl90IHBhZGRyKQogewotCXJldHVybiBwaHlzX3RvX21hY2hpbmUoWFBBRERSKHBhZGRyKSkubWFkZHI7OworCXJldHVybiBwaHlzX3RvX21hY2hpbmUoWFBBRERSKHBhZGRyKSkubWFkZHI7CiB9CiAKIHN0YXRpYyBwaHlzX2FkZHJfdCB4ZW5fYnVzX3RvX3BoeXMoZG1hX2FkZHJfdCBiYWRkcikKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL01ha2VmaWxlIGIvZmlybXdhcmUvTWFrZWZpbGUKaW5kZXggMDM4NGFmYS4uMGQxNWEzZCAxMDA2NDQKLS0tIGEvZmlybXdhcmUvTWFrZWZpbGUKKysrIGIvZmlybXdhcmUvTWFrZWZpbGUKQEAgLTMyLDkgKzMyLDkgQEAKIAkJCQkJIGFkYXB0ZWMvc3RhcmZpcmVfdHguYmluCiBmdy1zaGlwcGVkLSQoQ09ORklHX0FUQVJJX0RTUDU2SykgKz0gZHNwNTZrL2Jvb3RzdHJhcC5iaW4KIGZ3LXNoaXBwZWQtJChDT05GSUdfQVRNX0FNQkFTU0FET1IpICs9IGF0bXNhcjExLmZ3Ci1mdy1zaGlwcGVkLSQoQ09ORklHX0JOWDJYKSArPSBibngyeC9ibngyeC1lMS02LjIuNS4wLmZ3IFwKLQkJCSAgICAgIGJueDJ4L2JueDJ4LWUxaC02LjIuNS4wLmZ3IFwKLQkJCSAgICAgIGJueDJ4L2JueDJ4LWUyLTYuMi41LjAuZncKK2Z3LXNoaXBwZWQtJChDT05GSUdfQk5YMlgpICs9IGJueDJ4L2JueDJ4LWUxLTYuMi45LjAuZncgXAorCQkJICAgICAgYm54MngvYm54MngtZTFoLTYuMi45LjAuZncgXAorCQkJICAgICAgYm54MngvYm54MngtZTItNi4yLjkuMC5mdwogZnctc2hpcHBlZC0kKENPTkZJR19CTlgyKSArPSBibngyL2JueDItbWlwcy0wOS02LjIuMWEuZncgXAogCQkJICAgICBibngyL2JueDItcnYycC0wOS02LjAuMTcuZncgXAogCQkJICAgICBibngyL2JueDItcnYycC0wOWF4LTYuMC4xNy5mdyBcCmRpZmYgLS1naXQgYS9maXJtd2FyZS9XSEVOQ0UgYi9maXJtd2FyZS9XSEVOQ0UKaW5kZXggNzY0MDRmOS4uMTgyZWNiNiAxMDA2NDQKLS0tIGEvZmlybXdhcmUvV0hFTkNFCisrKyBiL2Zpcm13YXJlL1dIRU5DRQpAQCAtNjc5LDE0ICs2NzksMTUgQEAKIAogRHJpdmVyOiBibngyeDogQnJvYWRjb20gRXZlcmVzdAogCi1GaWxlOiBibngyeC9ibngyeC1lMS01LjIuMTMuMC5mdwotRmlsZTogYm54MngvYm54MngtZTFoLTUuMi4xMy4wLmZ3CitGaWxlOiBibngyeC9ibngyeC1lMS02LjIuOS4wLmZ3CitGaWxlOiBibngyeC9ibngyeC1lMWgtNi4yLjkuMC5mdworRmlsZTogYm54MngvYm54MngtZTItNi4yLjkuMC5mdwogCiBMaWNlbnNlOgotICBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgogCiAgIFRoaXMgZmlsZSBjb250YWlucyBmaXJtd2FyZSBkYXRhIGRlcml2ZWQgZnJvbSBwcm9wcmlldGFyeSB1bnB1Ymxpc2hlZAotICBzb3VyY2UgY29kZSwgQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24uCisgIHNvdXJjZSBjb2RlLCBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMSBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KIAogICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgZGF0YQogICBpbiBoZXhhZGVjaW1hbCBvciBlcXVpdmFsZW50IGZvcm1hdCwgcHJvdmlkZWQgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGlzCmRpZmYgLS1naXQgYS9maXJtd2FyZS9ibngyeC9ibngyeC1lMS02LjIuNS4wLmZ3LmloZXggYi9maXJtd2FyZS9ibngyeC9ibngyeC1lMS02LjIuNS4wLmZ3LmloZXgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiNTM1ODIuLjAwMDAwMDAKLS0tIGEvZmlybXdhcmUvYm54MngvYm54MngtZTEtNi4yLjUuMC5mdy5paGV4CisrKyAvZGV2L251bGwKQEAgLTEsOTQ4MyArMCwwIEBACi06MTAwMDAwMDAwMDAwM0JCMDAwMDAwMDY4MDAwMDA3MEMwMDAwM0MyMDJFCi06MTAwMDEwMDAwMDAwMUFGODAwMDA0MzMwMDAwMDAwN0MwMDAwNUUzMDUxCi06MTAwMDIwMDAwMDAwN0EyQzAwMDA1RUIwMDAwMDAwQjAwMDAwRDhFMEI0Ci06MTAwMDMwMDAwMDAwODAyMDAwMDBEOTk4MDAwMDAwODgwMDAxNTlDMDBECi06MTAwMDQwMDAwMDAwMzk4ODAwMDE1QTUwMDAwMDAwOTAwMDAxOTNFMDQwCi06MTAwMDUwMDAwMDAwQUJGQzAwMDE5NDc4MDAwMDBGRkMwMDAyNDA3ODI3Ci06MTAwMDYwMDAwMDAwMDAwNDAwMDI1MDc4MDIwNDAwNDgwMDAwMDAwRjY1Ci06MTAwMDcwMDAwMjA0MDA1NDAwMDAwMDQ1MDIwNDAwNTgwMDAwMDAwMDgzCi06MTAwMDgwMDAwMjA0MDA1QzAwMDAwMDA2MDIwNDAwNzAwMDAwMDAwNDhFCi06MTAwMDkwMDAwMjA0MDA3ODAwMDAwMDAwMDIwNDAwN0MxMjE3MDAwMDM3Ci06MTAwMEEwMDAwMjA0MDA4MDIyMTcwMDAwMDIwNDAwODQzMjE3MDAwMEJFCi06MTAwMEIwMDAwNjA0MDA4ODAwMDAwMDA1MDIwNDAwOUMxMjE1MDAwMEUwCi06MTAwMEMwMDAwMjA0MDBBMDIyMTUwMDAwMDIwNDAwQTQzMjE1MDAwMDYyCi06MTAwMEQwMDAwNjA0MDBBODAwMDAwMDA0MDIwNDAwQjgwMjEwMDAwMDlBCi06MTAwMEUwMDAwMjA0MDBCQzAwMTAwMDAwMDIwNDAwQzAxMDEwMDAwMDU4Ci06MTAwMEYwMDAwMjA0MDBDNDIwMTAwMDAwMDIwNDAwQzgzMDEwMDAwMEY4Ci06MTAwMTAwMDAwNjA0MDBDQzAwMDAwMDA0MDIwNDAwREMwMDEwMDAwMDIzCi06MTAwMTEwMDAwMjA0MDBFMDEyMTQwMDAwMDIwNDAwRTQyMjE0MDAwMEIzCi06MTAwMTIwMDAwMjA0MDBFODMyMTQwMDAwMDYwNDAwRUMwMDAwMDAwNEExCi06MTAwMTMwMDAwMTA0MDEyNDAwMDAwMDAwMDEwNDAxMjgwMDAwMDAwMDY3Ci06MTAwMTQwMDAwMTA0MDEyQzAwMDAwMDAwMDEwNDAxMzAwMDAwMDAwMDQ3Ci06MTAwMTUwMDAwMjA0MDAwNDAwMDAwMEZGMDIwNDAwMDgwMDAwMDBGRjg5Ci06MTAwMTYwMDAwMjA0MDAwQzAwMDAwMEZGMDIwNDAwMTAwMDAwMDBGRjY5Ci06MTAwMTcwMDAwMjA0MDAxNDAwMDAwMEZGMDIwNDAwMTgwMDAwMDBGRjQ5Ci06MTAwMTgwMDAwMjA0MDAxQzAwMDAwMEZGMDIwNDAwMjAwMDAwMDBGRjI5Ci06MTAwMTkwMDAwMjA0MDAyNDAwMDAwMDNFMDIwNDAwMjgwMDAwMDAwMEM5Ci06MTAwMUEwMDAwMjA0MDAyQzAwMDAwMDNGMDIwNDAwMzAwMDAwMDAzRjY5Ci06MTAwMUIwMDAwMjA0MDAzNDAwMDAwMDNGMDIwNDAwMzgwMDAwMDAwMDg4Ci06MTAwMUMwMDAwMjA0MDAzQzAwMDAwMDNGMDIwNDAwNDAwMDAwMDAzRjI5Ci06MTAwMUQwMDAwMjA0MDA0NDAwMDAwMDNGMDIwNDIwMDgwMDAwMDIxMTU1Ci06MTAwMUUwMDAwMjA0MjAwQzAwMDAwMjAwMDIwNDIwMTAwMDAwMDIwNDlGCi06MTAwMUYwMDAwMjA0MjAxNDAwMDAwMjE5MDIwNDIwMUMwMDAwRkZGRjZBCi06MTAwMjAwMDAwMjA0MjAyMDAwMDBGRkZGMDIwNDIwMjQwMDAwRkZGRjYyCi06MTAwMjEwMDAwMjA0MjAyODAwMDBGRkZGMDYwNDIwMzgwMDAwMDA4MEIwCi06MTAwMjIwMDAwMjA0MjIzODA3RkZGRkZGMDIwNDIyM0MwMDAwMDAzRkM3Ci06MTAwMjMwMDAwMjA0MjI0MDA3RkZGRkZGMDIwNDIyNDQwMDAwMDAwRkQ3Ci06MTAwMjQwMDAwMTA0MjI0ODAwMDAwMDAwMDEwNDIyNEMwMDAwMDAwMENDCi06MTAwMjUwMDAwMTA0MjI1MDAwMDAwMDAwMDEwNDIyNTQwMDAwMDAwMEFDCi06MTAwMjYwMDAwMTA0MjI1ODAwMDAwMDAwMDEwNDIyNUMwMDAwMDAwMDhDCi06MTAwMjcwMDAwMTA0MjI2MDAwMDAwMDAwMDEwNDIyNjQwMDAwMDAwMDZDCi06MTAwMjgwMDAwMTA0MjI2ODAwMDAwMDAwMDEwNDIyNkMwMDAwMDAwMDRDCi06MTAwMjkwMDAwMTA0MjI3MDAwMDAwMDAwMDEwNDIyNzQwMDAwMDAwMDJDCi06MTAwMkEwMDAwMTA0MjI3ODAwMDAwMDAwMDEwNDIyN0MwMDAwMDAwMDBDCi06MTAwMkIwMDAwMjA0MjRCQzAwMDAwMDAxMEMwNDIwMDAwMDAwMDNFODNDCi06MTAwMkMwMDAwQTA0MjAwMDAwMDAwMDAxMEIwNDIwMDAwMDAwMDAwQUM2Ci06MTAwMkQwMDAwNjA1NDAwMDAwMDAwRDAwMDIwNTAwNDQwMDAwMDAyMDVCCi06MTAwMkUwMDAwMjA1MDA0ODAwMDAwMDMyMDIwNTAwOTAwMjE1MDAyMEJGCi06MTAwMkYwMDAwMjA1MDA5NDAyMTUwMDIwMDIwNTAwOTgwMDAwMDAzMDVECi06MTAwMzAwMDAwMjA1MDA5QzA4MTAwMDAwMDIwNTAwQTAwMDAwMDAzMzU4Ci06MTAwMzEwMDAwMjA1MDBBNDAwMDAwMDMwMDIwNTAwQTgwMDAwMDAzMTIyCi06MTAwMzIwMDAwMjA1MDBBQzAwMDAwMDAyMDIwNTAwQjAwMDAwMDAwNTVDCi06MTAwMzMwMDAwMjA1MDBCNDAwMDAwMDA2MDIwNTAwQjgwMDAwMDAwMjNCCi06MTAwMzQwMDAwMjA1MDBCQzAwMDAwMDAyMDIwNTAwQzAwMDAwMDAwMDIxCi06MTAwMzUwMDAwMjA1MDBDNDAwMDAwMDA1MDIwNTAwQzgwMDAwMDAwMkZDCi06MTAwMzYwMDAwMjA1MDBDQzAwMDAwMDAyMDIwNTAwRDAwMDAwMDAwMkRGCi06MTAwMzcwMDAwMjA1MDBENDAwMDAwMDAxMDIwNTAxMTQwMDAwMDAwMTg0Ci06MTAwMzgwMDAwMjA1MDExQzAwMDAwMDAxMDIwNTAxMjAwMDAwMDAwMjFFCi06MTAwMzkwMDAwMjA1MDIwNDAwMDAwMDAxMDIwNTAyMEMwMDAwMDA0MEZBCi06MTAwM0EwMDAwMjA1MDIxMDAwMDAwMDQwMDIwNTAyMUMwMDAwMDAyMEFGCi06MTAwM0IwMDAwMjA1MDIyMDAwMDAwMDEzMDIwNTAyMjQwMDAwMDAyMEI0Ci06MTAwM0MwMDAwNjA1MDI0MDAwMDAwMDBBMDQwNTAyODAwMDIwMDAwMDJCCi06MTAwM0QwMDAwMjA1MDA1MDAwMDAwMDA3MDIwNTAwNTQwMDAwMDAwNzVECi06MTAwM0UwMDAwMjA1MDA1ODAwMDAwMDAwMDIwNTAwNUMwMDAwMDAwODQzCi06MTAwM0YwMDAwNjA1MDA2MDAwMDAwMDA0MDIwNTAwRDgwMDAwMDAwNkE5Ci06MTAwNDAwMDAwMjA1MDBFMDAwMDAwMDBEMDIwNTAwRTQwMDAwMDAyREUwCi06MTAwNDEwMDAwMjA1MDBFODAwMDAwMDAwMDIwNTAwRUMwMDAwMDAyMERBCi06MTAwNDIwMDAwMjA1MDBGMDAwMDAwMDAwMDIwNTAwRjQwMDAwMDAyMEJBCi06MTAwNDMwMDAwMjA1MDBGODAwMDAwMDAwMDIwNTAwRkMwMDAwMDAyMDlBCi06MTAwNDQwMDAwMjA1MDAwNDAwMDAwMDAxMDIwNTAwMDgwMDAwMDAwMTkwCi06MTAwNDUwMDAwMjA1MDAwQzAwMDAwMDAxMDIwNTAwMTAwMDAwMDAwMTcwCi06MTAwNDYwMDAwMjA1MDAxNDAwMDAwMDAxMDIwNTAwMTgwMDAwMDAwMTUwCi06MTAwNDcwMDAwMjA1MDAxQzAwMDAwMDAxMDIwNTAwMjAwMDAwMDAwMTMwCi06MTAwNDgwMDAwMjA1MDAyNDAwMDAwMDAxMDIwNTAwMjgwMDAwMDAwMTEwCi06MTAwNDkwMDAwMjA1MDAyQzAwMDAwMDAxMDIwNTAwMzAwMDAwMDAwMUYwCi06MTAwNEEwMDAwMjA1MDAzNDAwMDAwMDAxMDIwNTAwMzgwMDAwMDAwMUQwCi06MTAwNEIwMDAwMjA1MDAzQzAwMDAwMDAxMDIwNTAwNDAwMDAwMDAwMUIwCi06MTAwNEMwMDAwNDA2MTAwMDAyMDAwMDIwMDIwNjAwREMwMDAwMDAwMTBCCi06MTAwNEQwMDAwMTA2MDBEODAwMDAwMDAwMDQwNjAyMDAwMDAzMDIyMDBDCi06MTAwNEUwMDAwMjA2MDBEQzAwMDAwMDAwMDIwNjAwNjgwMDAwMDBCODAwCi06MTAwNEYwMDAwMjA2MDA3ODAwMDAwMTE0MDEwNjAwQjgwMDAwMDAwMEE4Ci06MTAwNTAwMDAwMTA2MDBDODAwMDAwMDAwMDIwNjAwNkMwMDAwMDBCOEYwCi06MTAwNTEwMDAwMjA2MDA3QzAwMDAwMTE0MDEwNjAwQkMwMDAwMDAwMDdGCi06MTAwNTIwMDAwMTA2MDBDQzAwMDAwMDAwMDcxODA0MDAwMDdCMDAwMDVBCi06MTAwNTMwMDAwODE4MDc2MDAwMTQwMjIzMDcxQzAwMDAyQTA0MDAwMEFBCi06MTAwNTQwMDAwNzFDODAwMDMyMTEwQTgyMDcxRDAwMDAxRTBDMTcwN0NECi06MTAwNTUwMDAwODFENDU1MDU3NTYwMjI1MDExODAwMDAwMDAwMDAwMEY0Ci06MTAwNTYwMDAwMTE4MDAwNDAwMDAwMDAwMDExODAwMDgwMDAwMDAwMDRECi06MTAwNTcwMDAwMTE4MDAwQzAwMDAwMDAwMDExODAwMTAwMDAwMDAwMDJECi06MTAwNTgwMDAwMTE4MDAxNDAwMDAwMDAwMDIxODAwMjAwMDAwMDAwMTAzCi06MTAwNTkwMDAwMjE4MDAyNDAwMDAwMDAyMDIxODAwMjgwMDAwMDAwM0Q2Ci06MTAwNUEwMDAwMjE4MDAyQzAwMDAwMDAwMDIxODAwMzAwMDAwMDAwNEI3Ci06MTAwNUIwMDAwMjE4MDAzNDAwMDAwMDAxMDIxODAwMzgwMDAwMDAwMDlBCi06MTAwNUMwMDAwMjE4MDAzQzAwMDAwMDAxMDIxODAwNDAwMDAwMDAwNDc2Ci06MTAwNUQwMDAwMjE4MDA0NDAwMDAwMDAwMDIxODAwNDgwMDAwMDAwMTVBCi06MTAwNUUwMDAwMjE4MDA0QzAwMDAwMDAzMDIxODAwNTAwMDAwMDAwMDM4Ci06MTAwNUYwMDAwMjE4MDA1NDAwMDAwMDAxMDIxODAwNTgwMDAwMDAwNDE2Ci06MTAwNjAwMDAwMjE4MDA1QzAwMDAwMDAwMDIxODAwNjAwMDAwMDAwMUY5Ci06MTAwNjEwMDAwMjE4MDA2NDAwMDAwMDAzMDIxODAwNjgwMDAwMDAwMEQ3Ci06MTAwNjIwMDAwMjE4MDA2QzAwMDAwMDAxMDIxODAwNzAwMDAwMDAwNEI1Ci06MTAwNjMwMDAwMjE4MDA3NDAwMDAwMDAwMDIxODAwNzgwMDAwMDAwNDk2Ci06MTAwNjQwMDAwMjE4MDA3QzAwMDAwMDAzMDYxODAwODAwMDAwMDAwMjcxCi06MTAwNjUwMDAwMjE4MDBBNDAwMDAzRkZGMDIxODAwQTgwMDAwMDNGRkRBCi06MTAwNjYwMDAwMjE4MDIyNDAwMDAwMDAwMDIxODAyMzQwMDAwMDAwMEZBCi06MTAwNjcwMDAwMjE4MDI0QzAwMDAwMDAwMDIxODAyRTQwMDAwMDBGRjEzCi06MTAwNjgwMDAwNjE4MTAwMDAwMDAwNDAwMDIxQjhCQzAwMDAwMDAwMUNGCi06MTAwNjkwMDAwMjFCODAwMDAwMDAwMDM0MDIxQjgwNDAwMDAwMDAxODk0Ci06MTAwNkEwMDAwMjFCODA4MDAwMDAwMDBDMDIxQjgwQzAwMDAwMDAyMEE0Ci06MTAwNkIwMDAwQzFCODMwMDAwMDdBMTIwMEExQjgzMDAwMDAwMDEzOEU3Ci06MTAwNkMwMDAwQjFCODMwMDAwMDAxMzg4MEExQjgzNDAwMDAwMDAwMEZFCi06MTAwNkQwMDAwQzFCODM0MDAwMDAwMUY0MEIxQjgzNDAwMDAwMDAwNTRECi06MTAwNkUwMDAwMjFCODM4MDAwMDdBMTIwMDIxQjgzQzAwMDAwMDFGNENECi06MTAwNkYwMDAwNjFBMTAwMDAwMDAwMjczMDQxQTE5Q0MwMDAxMDIyNzI4Ci06MTAwNzAwMDAwNjFBMjAwODAwMDAwMEM4MDYxQTIwMDAwMDAwMDAwMjk3Ci06MTAwNzEwMDAwNDFBNDk5ODAwMDQwMjI4MDYxQTJFMjgwMDAwMDAwMjM0Ci06MTAwNzIwMDAwNjFBMkUyMDAwMDAwMDAyMDYxQTA4MDAwMDAwMDAwMjJGCi06MTAwNzMwMDAwNjFBMDgwODAwMDAwMDA0MDYxQTA4MTgwMDAwMDAwMjQzCi06MTAwNzQwMDAwNDFBMDhCMDAwMDIwMjJDMDYxQTJGRDAwMDAwMDAwNjdFCi06MTAwNzUwMDAwNDFBMkZFODAwMDIwMjJFMDQxQTJGQzAwMDA0MDIzMEVGCi06MTAwNzYwMDAwNDFBMzAwMDAwMDEwMjM0MDYxQTMwMDQwMDAwMDAwM0FECi06MTAwNzcwMDAwNDFBMzAxMDAwMDEwMjM1MDYxQTMwMTQwMDAwMDAwMzdDCi06MTAwNzgwMDAwNDFBMzAyMDAwMDEwMjM2MDYxQTMwMjQwMDAwMDAwMzRCCi06MTAwNzkwMDAwNDFBMzAzMDAwMDEwMjM3MDYxQTMwMzQwMDAwMDAwMzFBCi06MTAwN0EwMDAwNDFBMzA0MDAwMDEwMjM4MDYxQTMwNDQwMDAwMDAwM0U5Ci06MTAwN0IwMDAwNDFBMzA1MDAwMDEwMjM5MDYxQTMwNTQwMDAwMDAwM0I4Ci06MTAwN0MwMDAwNDFBMzA2MDAwMDEwMjNBMDYxQTMwNjQwMDAwMDAwMzg3Ci06MTAwN0QwMDAwNDFBMzA3MDAwMDEwMjNCMDYxQTMwNzQwMDAwMDAwMzU2Ci06MTAwN0UwMDAwNDFBMzA4MDAwMDEwMjNDMDYxQTMwODQwMDAwMDAwMzI1Ci06MTAwN0YwMDAwNDFBMzA5MDAwMDEwMjNEMDYxQTMwOTQwMDAwMDAwM0Y0Ci06MTAwODAwMDAwNDFBMzBBMDAwMDEwMjNFMDYxQTMwQTQwMDAwMDAwM0MyCi06MTAwODEwMDAwNDFBMzBCMDAwMDEwMjNGMDYxQTMwQjQwMDAwMDAwMzkxCi06MTAwODIwMDAwNDFBMzBDMDAwMDEwMjQwMDYxQTMwQzQwMDAwMDAwMzYwCi06MTAwODMwMDAwNDFBMzBEMDAwMDEwMjQxMDYxQTMwRDQwMDAwMDAwMzJGCi06MTAwODQwMDAwNDFBMzBFMDAwMDEwMjQyMDYxQTMwRTQwMDAwMDAwM0ZFCi06MTAwODUwMDAwNDFBMzBGMDAwMDEwMjQzMDYxQTMwRjQwMDAwMDAwM0NECi06MTAwODYwMDAwNDFBMzEwMDAwMDEwMjQ0MDYxQTMxMDQwMDAwMDAwMzlBCi06MTAwODcwMDAwNDFBMzExMDAwMDEwMjQ1MDYxQTMxMTQwMDAwMDAwMzY5Ci06MTAwODgwMDAwNDFBMzEyMDAwMDEwMjQ2MDYxQTMxMjQwMDAwMDAwMzM4Ci06MTAwODkwMDAwNDFBMzEzMDAwMDEwMjQ3MDYxQTMxMzQwMDAwMDAwMzA3Ci06MTAwOEEwMDAwNDFBMzE0MDAwMDEwMjQ4MDYxQTMxNDQwMDAwMDAwM0Q2Ci06MTAwOEIwMDAwNDFBMzE1MDAwMDEwMjQ5MDYxQTMxNTQwMDAwMDAwM0E1Ci06MTAwOEMwMDAwNDFBMzE2MDAwMDEwMjRBMDYxQTMxNjQwMDAwMDAwMzc0Ci06MTAwOEQwMDAwNDFBMzE3MDAwMDEwMjRCMDYxQTMxNzQwMDAwMDAwMzQzCi06MTAwOEUwMDAwNDFBMzE4MDAwMDEwMjRDMDYxQTMxODQwMDAwMDAwMzEyCi06MTAwOEYwMDAwNDFBMzE5MDAwMDEwMjREMDYxQTMxOTQwMDAwMDAwM0UxCi06MTAwOTAwMDAwNDFBMzFBMDAwMDEwMjRFMDYxQTMxQTQwMDAwMDAwM0FGCi06MTAwOTEwMDAwNDFBMzFCMDAwMDEwMjRGMDYxQTMxQjQwMDAwMDAwMzdFCi06MTAwOTIwMDAwNDFBMzFDMDAwMDEwMjUwMDYxQTMxQzQwMDAwMDAwMzRECi06MTAwOTMwMDAwNDFBMzFEMDAwMDEwMjUxMDYxQTMxRDQwMDAwMDAwMzFDCi06MTAwOTQwMDAwNDFBMzFFMDAwMDEwMjUyMDYxQTMxRTQwMDAwMDAwM0VCCi06MTAwOTUwMDAwNDFBMzFGMDAwMDEwMjUzMDYxQTMxRjQwMDAwMDAwM0JBCi06MTAwOTYwMDAwNDFBMzIwMDAwMDEwMjU0MDYxQTMyMDQwMDAwMDAwMzg3Ci06MTAwOTcwMDAwNDFBMzIxMDAwMDEwMjU1MDYxQTMyMTQwMDAwMDAwMzU2Ci06MTAwOTgwMDAwNDFBMzIyMDAwMDEwMjU2MDYxQTMyMjQwMDAwMDAwMzI1Ci06MTAwOTkwMDAwNDFBMzIzMDAwMDEwMjU3MDYxQTMyMzQwMDAwMDAwM0Y0Ci06MTAwOUEwMDAwNDFBMzI0MDAwMDEwMjU4MDYxQTMyNDQwMDAwMDAwM0MzCi06MTAwOUIwMDAwNDFBMzI1MDAwMDEwMjU5MDYxQTMyNTQwMDAwMDAwMzkyCi06MTAwOUMwMDAwNDFBMzI2MDAwMDEwMjVBMDYxQTMyNjQwMDAwMDAwMzYxCi06MTAwOUQwMDAwNDFBMzI3MDAwMDEwMjVCMDYxQTMyNzQwMDAwMDAwMzMwCi06MTAwOUUwMDAwNDFBMzI4MDAwMDEwMjVDMDYxQTMyODQwMDAwMDAwM0ZGCi06MTAwOUYwMDAwNDFBMzI5MDAwMDEwMjVEMDYxQTMyOTQwMDAwMDAwM0NFCi06MTAwQTAwMDAwNDFBMzJBMDAwMDEwMjVFMDYxQTMyQTQwMDAwMDAwMzlDCi06MTAwQTEwMDAwNDFBMzJCMDAwMDEwMjVGMDYxQTMyQjQwMDAwMDAwMzZCCi06MTAwQTIwMDAwNDFBMzJDMDAwMDEwMjYwMDYxQTMyQzQwMDAwMDAwMzNBCi06MTAwQTMwMDAwNDFBMzJEMDAwMDEwMjYxMDYxQTMyRDQwMDAwMDAwMzA5Ci06MTAwQTQwMDAwNDFBMzJFMDAwMDEwMjYyMDYxQTMyRTQwMDAwMDAwM0Q4Ci06MTAwQTUwMDAwNDFBMzJGMDAwMDEwMjYzMDYxQTMyRjQwMDAwMDAwM0E3Ci06MTAwQTYwMDAwNDFBMzMwMDAwMDEwMjY0MDYxQTMzMDQwMDAwMDAwMzc0Ci06MTAwQTcwMDAwNDFBMzMxMDAwMDEwMjY1MDYxQTMzMTQwMDAwMDAwMzQzCi06MTAwQTgwMDAwNDFBMzMyMDAwMDEwMjY2MDYxQTMzMjQwMDAwMDAwMzEyCi06MTAwQTkwMDAwNDFBMzMzMDAwMDEwMjY3MDYxQTMzMzQwMDAwMDAwM0UxCi06MTAwQUEwMDAwNDFBMzM0MDAwMDEwMjY4MDYxQTMzNDQwMDAwMDAwM0IwCi06MTAwQUIwMDAwNDFBMzM1MDAwMDEwMjY5MDYxQTMzNTQwMDAwMDAwMzdGCi06MTAwQUMwMDAwNDFBMzM2MDAwMDEwMjZBMDYxQTMzNjQwMDAwMDAwMzRFCi06MTAwQUQwMDAwNDFBMzM3MDAwMDEwMjZCMDYxQTMzNzQwMDAwMDAwMzFECi06MTAwQUUwMDAwNDFBMzM4MDAwMDEwMjZDMDYxQTMzODQwMDAwMDAwM0VDCi06MTAwQUYwMDAwNDFBMzM5MDAwMDEwMjZEMDYxQTMzOTQwMDAwMDAwM0JCCi06MTAwQjAwMDAwNDFBMzNBMDAwMDEwMjZFMDYxQTMzQTQwMDAwMDAwMzg5Ci06MTAwQjEwMDAwNDFBMzNCMDAwMDEwMjZGMDYxQTMzQjQwMDAwMDAwMzU4Ci06MTAwQjIwMDAwNDFBMzNDMDAwMDEwMjcwMDYxQTMzQzQwMDAwMDAwMzI3Ci06MTAwQjMwMDAwNDFBMzNEMDAwMDEwMjcxMDYxQTMzRDQwMDAwMDAwM0Y2Ci06MTAwQjQwMDAwNDFBMzNFMDAwMDEwMjcyMDYxQTMzRTQwMDAwMDAwM0M1Ci06MTAwQjUwMDAwNDFBMzNGMDAwMDEwMjczMDYxQTMzRjQwMDAwMDAwMzk0Ci06MTAwQjYwMDAwNDFBMzQwMDAwMDEwMjc0MDYxQTM0MDQwMDAwMDAwMzYxCi06MTAwQjcwMDAwNDFBMzQxMDAwMDEwMjc1MDYxQTM0MTQwMDAwMDAwMzMwCi06MTAwQjgwMDAwNDFBMzQyMDAwMDEwMjc2MDYxQTM0MjQwMDAwMDAwM0ZGCi06MTAwQjkwMDAwNDFBMzQzMDAwMDEwMjc3MDYxQTM0MzQwMDAwMDAwM0NFCi06MTAwQkEwMDAwNDFBMzQ0MDAwMDEwMjc4MDYxQTM0NDQwMDAwMDAwMzlECi06MTAwQkIwMDAwNDFBMzQ1MDAwMDEwMjc5MDYxQTM0NTQwMDAwMDAwMzZDCi06MTAwQkMwMDAwNDFBMzQ2MDAwMDEwMjdBMDYxQTM0NjQwMDAwMDAwMzNCCi06MTAwQkQwMDAwNDFBMzQ3MDAwMDEwMjdCMDYxQTM0NzQwMDAwMDAwMzBBCi06MTAwQkUwMDAwNDFBMzQ4MDAwMDEwMjdDMDYxQTM0ODQwMDAwMDAwM0Q5Ci06MTAwQkYwMDAwNDFBMzQ5MDAwMDEwMjdEMDYxQTM0OTQwMDAwMDAwM0E4Ci06MTAwQzAwMDAwNDFBMzRBMDAwMDEwMjdFMDYxQTM0QTQwMDAwMDAwMzc2Ci06MTAwQzEwMDAwNDFBMzRCMDAwMDEwMjdGMDYxQTM0QjQwMDAwMDAwMzQ1Ci06MTAwQzIwMDAwNDFBMzRDMDAwMDEwMjgwMDYxQTM0QzQwMDAwMDAwMzE0Ci06MTAwQzMwMDAwNDFBMzREMDAwMDEwMjgxMDYxQTM0RDQwMDAwMDAwM0UzCi06MTAwQzQwMDAwNDFBMzRFMDAwMDEwMjgyMDYxQTM0RTQwMDAwMDAwM0IyCi06MTAwQzUwMDAwNDFBMzRGMDAwMDEwMjgzMDYxQTM0RjQwMDAwMDAwMzgxCi06MTAwQzYwMDAwNDFBMzUwMDAwMDEwMjg0MDYxQTM1MDQwMDAwMDAwMzRFCi06MTAwQzcwMDAwNDFBMzUxMDAwMDEwMjg1MDYxQTM1MTQwMDAwMDAwMzFECi06MTAwQzgwMDAwNDFBMzUyMDAwMDEwMjg2MDYxQTM1MjQwMDAwMDAwM0VDCi06MTAwQzkwMDAwNDFBMzUzMDAwMDEwMjg3MDYxQTM1MzQwMDAwMDAwM0JCCi06MTAwQ0EwMDAwNDFBMzU0MDAwMDEwMjg4MDYxQTM1NDQwMDAwMDAwMzhBCi06MTAwQ0IwMDAwNDFBMzU1MDAwMDEwMjg5MDYxQTM1NTQwMDAwMDAwMzU5Ci06MTAwQ0MwMDAwNDFBMzU2MDAwMDEwMjhBMDYxQTM1NjQwMDAwMDAwMzI4Ci06MTAwQ0QwMDAwNDFBMzU3MDAwMDEwMjhCMDYxQTM1NzQwMDAwMDAwM0Y3Ci06MTAwQ0UwMDAwNDFBMzU4MDAwMDEwMjhDMDYxQTM1ODQwMDAwMDAwM0M2Ci06MTAwQ0YwMDAwNDFBMzU5MDAwMDEwMjhEMDYxQTM1OTQwMDAwMDAwMzk1Ci06MTAwRDAwMDAwNDFBMzVBMDAwMDEwMjhFMDYxQTM1QTQwMDAwMDAwMzYzCi06MTAwRDEwMDAwNDFBMzVCMDAwMDEwMjhGMDYxQTM1QjQwMDAwMDAwMzMyCi06MTAwRDIwMDAwNDFBMzVDMDAwMDEwMjkwMDYxQTM1QzQwMDAwMDAwMzAxCi06MTAwRDMwMDAwNDFBMzVEMDAwMDEwMjkxMDYxQTM1RDQwMDAwMDAwM0QwCi06MTAwRDQwMDAwNDFBMzVFMDAwMDEwMjkyMDYxQTM1RTQwMDAwMDAwMzlGCi06MTAwRDUwMDAwNDFBMzVGMDAwMDEwMjkzMDYxQTM1RjQwMDAwMDAwMzZFCi06MTAwRDYwMDAwNDFBMzYwMDAwMDEwMjk0MDYxQTM2MDQwMDAwMDAwMzNCCi06MTAwRDcwMDAwNDFBMzYxMDAwMDEwMjk1MDYxQTM2MTQwMDAwMDAwMzBBCi06MTAwRDgwMDAwNDFBMzYyMDAwMDEwMjk2MDYxQTM2MjQwMDAwMDAwM0Q5Ci06MTAwRDkwMDAwNDFBMzYzMDAwMDEwMjk3MDYxQTM2MzQwMDAwMDAwM0E4Ci06MTAwREEwMDAwNDFBMzY0MDAwMDEwMjk4MDYxQTM2NDQwMDAwMDAwMzc3Ci06MTAwREIwMDAwNDFBMzY1MDAwMDEwMjk5MDYxQTM2NTQwMDAwMDAwMzQ2Ci06MTAwREMwMDAwNDFBMzY2MDAwMDEwMjlBMDYxQTM2NjQwMDAwMDAwMzE1Ci06MTAwREQwMDAwNDFBMzY3MDAwMDEwMjlCMDYxQTM2NzQwMDAwMDAwM0U0Ci06MTAwREUwMDAwNDFBMzY4MDAwMDEwMjlDMDYxQTM2ODQwMDAwMDAwM0IzCi06MTAwREYwMDAwNDFBMzY5MDAwMDEwMjlEMDYxQTM2OTQwMDAwMDAwMzgyCi06MTAwRTAwMDAwNDFBMzZBMDAwMDEwMjlFMDYxQTM2QTQwMDAwMDAwMzUwCi06MTAwRTEwMDAwNDFBMzZCMDAwMDEwMjlGMDYxQTM2QjQwMDAwMDAwMzFGCi06MTAwRTIwMDAwNDFBMzZDMDAwMDEwMkEwMDYxQTM2QzQwMDAwMDAwM0VFCi06MTAwRTMwMDAwNDFBMzZEMDAwMDEwMkExMDYxQTM2RDQwMDAwMDAwM0JECi06MTAwRTQwMDAwNDFBMzZFMDAwMDEwMkEyMDYxQTM2RTQwMDAwMDAwMzhDCi06MTAwRTUwMDAwNDFBMzZGMDAwMDEwMkEzMDYxQTM2RjQwMDAwMDAwMzVCCi06MTAwRTYwMDAwNDFBMzcwMDAwMDEwMkE0MDYxQTM3MDQwMDAwMDAwMzI4Ci06MTAwRTcwMDAwNDFBMzcxMDAwMDEwMkE1MDYxQTM3MTQwMDAwMDAwM0Y3Ci06MTAwRTgwMDAwNDFBMzcyMDAwMDEwMkE2MDYxQTM3MjQwMDAwMDAwM0M2Ci06MTAwRTkwMDAwNDFBMzczMDAwMDEwMkE3MDYxQTM3MzQwMDAwMDAwMzk1Ci06MTAwRUEwMDAwNDFBMzc0MDAwMDEwMkE4MDYxQTM3NDQwMDAwMDAwMzY0Ci06MTAwRUIwMDAwNDFBMzc1MDAwMDEwMkE5MDYxQTM3NTQwMDAwMDAwMzMzCi06MTAwRUMwMDAwNDFBMzc2MDAwMDEwMkFBMDYxQTM3NjQwMDAwMDAwMzAyCi06MTAwRUQwMDAwNDFBMzc3MDAwMDEwMkFCMDYxQTM3NzQwMDAwMDAwM0QxCi06MTAwRUUwMDAwNDFBMzc4MDAwMDEwMkFDMDYxQTM3ODQwMDAwMDAwM0EwCi06MTAwRUYwMDAwNDFBMzc5MDAwMDEwMkFEMDYxQTM3OTQwMDAwMDAwMzZGCi06MTAwRjAwMDAwNDFBMzdBMDAwMDEwMkFFMDYxQTM3QTQwMDAwMDAwMzNECi06MTAwRjEwMDAwNDFBMzdCMDAwMDEwMkFGMDYxQTM3QjQwMDAwMDAwMzBDCi06MTAwRjIwMDAwNDFBMzdDMDAwMDEwMkIwMDYxQTM3QzQwMDAwMDAwM0RCCi06MTAwRjMwMDAwNDFBMzdEMDAwMDEwMkIxMDYxQTM3RDQwMDAwMDAwM0FBCi06MTAwRjQwMDAwNDFBMzdFMDAwMDEwMkIyMDYxQTM3RTQwMDAwMDAwMzc5Ci06MTAwRjUwMDAwNDFBMzdGMDAwMDEwMkIzMDYxQTM3RjQwMDAwMDAwMzQ4Ci06MTAwRjYwMDAwNDFBMzgwMDAwMDEwMkI0MDYxQTM4MDQwMDAwMDAwMzE1Ci06MTAwRjcwMDAwNDFBMzgxMDAwMDEwMkI1MDYxQTM4MTQwMDAwMDAwM0U0Ci06MTAwRjgwMDAwNDFBMzgyMDAwMDEwMkI2MDYxQTM4MjQwMDAwMDAwM0IzCi06MTAwRjkwMDAwNDFBMzgzMDAwMDEwMkI3MDYxQTM4MzQwMDAwMDAwMzgyCi06MTAwRkEwMDAwNDFBMzg0MDAwMDEwMkI4MDYxQTM4NDQwMDAwMDAwMzUxCi06MTAwRkIwMDAwNDFBMzg1MDAwMDEwMkI5MDYxQTM4NTQwMDAwMDAwMzIwCi06MTAwRkMwMDAwNDFBMzg2MDAwMDEwMkJBMDYxQTM4NjQwMDAwMDAwM0VGCi06MTAwRkQwMDAwNDFBMzg3MDAwMDEwMkJCMDYxQTM4NzQwMDAwMDAwM0JFCi06MTAwRkUwMDAwNDFBMzg4MDAwMDEwMkJDMDYxQTM4ODQwMDAwMDAwMzhECi06MTAwRkYwMDAwNDFBMzg5MDAwMDEwMkJEMDYxQTM4OTQwMDAwMDAwMzVDCi06MTAxMDAwMDAwNDFBMzhBMDAwMDEwMkJFMDYxQTM4QTQwMDAwMDAwMzJBCi06MTAxMDEwMDAwNDFBMzhCMDAwMDEwMkJGMDYxQTM4QjQwMDAwMDAwM0Y5Ci06MTAxMDIwMDAwNDFBMzhDMDAwMDEwMkMwMDYxQTM4QzQwMDAwMDAwM0M4Ci06MTAxMDMwMDAwNDFBMzhEMDAwMDEwMkMxMDYxQTM4RDQwMDAwMDAwMzk3Ci06MTAxMDQwMDAwNDFBMzhFMDAwMDEwMkMyMDYxQTM4RTQwMDAwMDAwMzY2Ci06MTAxMDUwMDAwNDFBMzhGMDAwMDEwMkMzMDYxQTM4RjQwMDAwMDAwMzM1Ci06MTAxMDYwMDAwNDFBMzkwMDAwMDEwMkM0MDYxQTM5MDQwMDAwMDAwMzAyCi06MTAxMDcwMDAwNDFBMzkxMDAwMDEwMkM1MDYxQTM5MTQwMDAwMDAwM0QxCi06MTAxMDgwMDAwNDFBMzkyMDAwMDEwMkM2MDYxQTM5MjQwMDAwMDAwM0EwCi06MTAxMDkwMDAwNDFBMzkzMDAwMDEwMkM3MDYxQTM5MzQwMDAwMDAwMzZGCi06MTAxMEEwMDAwNDFBMzk0MDAwMDEwMkM4MDYxQTM5NDQwMDAwMDAwMzNFCi06MTAxMEIwMDAwNDFBMzk1MDAwMDEwMkM5MDYxQTM5NTQwMDAwMDAwMzBECi06MTAxMEMwMDAwNDFBMzk2MDAwMDEwMkNBMDYxQTM5NjQwMDAwMDAwM0RDCi06MTAxMEQwMDAwNDFBMzk3MDAwMDEwMkNCMDYxQTM5NzQwMDAwMDAwM0FCCi06MTAxMEUwMDAwNDFBMzk4MDAwMDEwMkNDMDYxQTM5ODQwMDAwMDAwMzdBCi06MTAxMEYwMDAwNDFBMzk5MDAwMDEwMkNEMDYxQTM5OTQwMDAwMDAwMzQ5Ci06MTAxMTAwMDAwNDFBMzlBMDAwMDEwMkNFMDYxQTM5QTQwMDAwMDAwMzE3Ci06MTAxMTEwMDAwNDFBMzlCMDAwMDEwMkNGMDYxQTM5QjQwMDAwMDAwM0U2Ci06MTAxMTIwMDAwNDFBMzlDMDAwMDEwMkQwMDYxQTM5QzQwMDAwMDAwM0I1Ci06MTAxMTMwMDAwNDFBMzlEMDAwMDEwMkQxMDYxQTM5RDQwMDAwMDAwMzg0Ci06MTAxMTQwMDAwNDFBMzlFMDAwMDEwMkQyMDYxQTM5RTQwMDAwMDAwMzUzCi06MTAxMTUwMDAwNDFBMzlGMDAwMDEwMkQzMDYxQTM5RjQwMDAwMDAwMzIyCi06MTAxMTYwMDAwNDFBM0EwMDAwMDEwMkQ0MDYxQTNBMDQwMDAwMDAwM0VGCi06MTAxMTcwMDAwNDFBM0ExMDAwMDEwMkQ1MDYxQTNBMTQwMDAwMDAwM0JFCi06MTAxMTgwMDAwNDFBM0EyMDAwMDEwMkQ2MDYxQTNBMjQwMDAwMDAwMzhECi06MTAxMTkwMDAwNDFBM0EzMDAwMDEwMkQ3MDYxQTNBMzQwMDAwMDAwMzVDCi06MTAxMUEwMDAwNDFBM0E0MDAwMDEwMkQ4MDYxQTNBNDQwMDAwMDAwMzJCCi06MTAxMUIwMDAwNDFBM0E1MDAwMDEwMkQ5MDYxQTNBNTQwMDAwMDAwM0ZBCi06MTAxMUMwMDAwNDFBM0E2MDAwMDEwMkRBMDYxQTNBNjQwMDAwMDAwM0M5Ci06MTAxMUQwMDAwNDFBM0E3MDAwMDEwMkRCMDYxQTNBNzQwMDAwMDAwMzk4Ci06MTAxMUUwMDAwNDFBM0E4MDAwMDEwMkRDMDYxQTNBODQwMDAwMDAwMzY3Ci06MTAxMUYwMDAwNDFBM0E5MDAwMDEwMkREMDYxQTNBOTQwMDAwMDAwMzM2Ci06MTAxMjAwMDAwNDFBM0FBMDAwMDEwMkRFMDYxQTNBQTQwMDAwMDAwMzA0Ci06MTAxMjEwMDAwNDFBM0FCMDAwMDEwMkRGMDYxQTNBQjQwMDAwMDAwM0QzCi06MTAxMjIwMDAwNDFBM0FDMDAwMDEwMkUwMDYxQTNBQzQwMDAwMDAwM0EyCi06MTAxMjMwMDAwNDFBM0FEMDAwMDEwMkUxMDYxQTNBRDQwMDAwMDAwMzcxCi06MTAxMjQwMDAwNDFBM0FFMDAwMDEwMkUyMDYxQTNBRTQwMDAwMDAwMzQwCi06MTAxMjUwMDAwNDFBM0FGMDAwMDEwMkUzMDYxQTNBRjQwMDAwMDAwMzBGCi06MTAxMjYwMDAwNDFBM0IwMDAwMDEwMkU0MDYxQTNCMDQwMDAwMDAwM0RDCi06MTAxMjcwMDAwNDFBM0IxMDAwMDEwMkU1MDYxQTNCMTQwMDAwMDAwM0FCCi06MTAxMjgwMDAwNDFBM0IyMDAwMDEwMkU2MDYxQTNCMjQwMDAwMDAwMzdBCi06MTAxMjkwMDAwNDFBM0IzMDAwMDEwMkU3MDYxQTNCMzQwMDAwMDAwMzQ5Ci06MTAxMkEwMDAwNDFBM0I0MDAwMDEwMkU4MDYxQTNCNDQwMDAwMDAwMzE4Ci06MTAxMkIwMDAwNDFBM0I1MDAwMDEwMkU5MDYxQTNCNTQwMDAwMDAwM0U3Ci06MTAxMkMwMDAwNDFBM0I2MDAwMDEwMkVBMDYxQTNCNjQwMDAwMDAwM0I2Ci06MTAxMkQwMDAwNDFBM0I3MDAwMDEwMkVCMDYxQTNCNzQwMDAwMDAwMzg1Ci06MTAxMkUwMDAwNDFBM0I4MDAwMDEwMkVDMDYxQTNCODQwMDAwMDAwMzU0Ci06MTAxMkYwMDAwNDFBM0I5MDAwMDEwMkVEMDYxQTNCOTQwMDAwMDAwMzIzCi06MTAxMzAwMDAwNDFBM0JBMDAwMDEwMkVFMDYxQTNCQTQwMDAwMDAwM0YxCi06MTAxMzEwMDAwNDFBM0JCMDAwMDEwMkVGMDYxQTNCQjQwMDAwMDAwM0MwCi06MTAxMzIwMDAwNDFBM0JDMDAwMDEwMkYwMDYxQTNCQzQwMDAwMDAwMzhGCi06MTAxMzMwMDAwNDFBM0JEMDAwMDEwMkYxMDYxQTNCRDQwMDAwMDAwMzVFCi06MTAxMzQwMDAwNDFBM0JFMDAwMDEwMkYyMDYxQTNCRTQwMDAwMDAwMzJECi06MTAxMzUwMDAwNDFBM0JGMDAwMDEwMkYzMDYxQTNCRjQwMDAwMDAwM0ZDCi06MTAxMzYwMDAwNDFBM0MwMDAwMDEwMkY0MDYxQTNDMDQwMDAwMDAwM0M5Ci06MTAxMzcwMDAwNDFBM0MxMDAwMDEwMkY1MDYxQTNDMTQwMDAwMDAwMzk4Ci06MTAxMzgwMDAwNDFBM0MyMDAwMDEwMkY2MDYxQTNDMjQwMDAwMDAwMzY3Ci06MTAxMzkwMDAwNDFBM0MzMDAwMDEwMkY3MDYxQTNDMzQwMDAwMDAwMzM2Ci06MTAxM0EwMDAwNDFBM0M0MDAwMDEwMkY4MDYxQTNDNDQwMDAwMDAwMzA1Ci06MTAxM0IwMDAwNDFBM0M1MDAwMDEwMkY5MDYxQTNDNTQwMDAwMDAwM0Q0Ci06MTAxM0MwMDAwNDFBM0M2MDAwMDEwMkZBMDYxQTNDNjQwMDAwMDAwM0EzCi06MTAxM0QwMDAwNDFBM0M3MDAwMDEwMkZCMDYxQTNDNzQwMDAwMDAwMzcyCi06MTAxM0UwMDAwNDFBM0M4MDAwMDEwMkZDMDYxQTNDODQwMDAwMDAwMzQxCi06MTAxM0YwMDAwNDFBM0M5MDAwMDEwMkZEMDYxQTNDOTQwMDAwMDAwMzEwCi06MTAxNDAwMDAwNDFBM0NBMDAwMDEwMkZFMDYxQTNDQTQwMDAwMDAwM0RFCi06MTAxNDEwMDAwNDFBM0NCMDAwMDEwMkZGMDYxQTNDQjQwMDAwMDAwM0FECi06MTAxNDIwMDAwNDFBM0NDMDAwMDEwMzAwMDYxQTNDQzQwMDAwMDAwMzdCCi06MTAxNDMwMDAwNDFBM0NEMDAwMDEwMzAxMDYxQTNDRDQwMDAwMDAwMzRBCi06MTAxNDQwMDAwNDFBM0NFMDAwMDEwMzAyMDYxQTNDRTQwMDAwMDAwMzE5Ci06MTAxNDUwMDAwNDFBM0NGMDAwMDEwMzAzMDYxQTNDRjQwMDAwMDAwM0U4Ci06MTAxNDYwMDAwNDFBM0QwMDAwMDEwMzA0MDYxQTNEMDQwMDAwMDAwM0I1Ci06MTAxNDcwMDAwNDFBM0QxMDAwMDEwMzA1MDYxQTNEMTQwMDAwMDAwMzg0Ci06MTAxNDgwMDAwNDFBM0QyMDAwMDEwMzA2MDYxQTNEMjQwMDAwMDAwMzUzCi06MTAxNDkwMDAwNDFBM0QzMDAwMDEwMzA3MDYxQTNEMzQwMDAwMDAwMzIyCi06MTAxNEEwMDAwNDFBM0Q0MDAwMDEwMzA4MDYxQTNENDQwMDAwMDAwM0YxCi06MTAxNEIwMDAwNDFBM0Q1MDAwMDEwMzA5MDYxQTNENTQwMDAwMDAwM0MwCi06MTAxNEMwMDAwNDFBM0Q2MDAwMDEwMzBBMDYxQTNENjQwMDAwMDAwMzhGCi06MTAxNEQwMDAwNDFBM0Q3MDAwMDEwMzBCMDYxQTNENzQwMDAwMDAwMzVFCi06MTAxNEUwMDAwNDFBM0Q4MDAwMDEwMzBDMDYxQTNEODQwMDAwMDAwMzJECi06MTAxNEYwMDAwNDFBM0Q5MDAwMDEwMzBEMDYxQTNEOTQwMDAwMDAwM0ZDCi06MTAxNTAwMDAwNDFBM0RBMDAwMDEwMzBFMDYxQTNEQTQwMDAwMDAwM0NBCi06MTAxNTEwMDAwNDFBM0RCMDAwMDEwMzBGMDYxQTNEQjQwMDAwMDAwMzk5Ci06MTAxNTIwMDAwNDFBM0RDMDAwMDEwMzEwMDYxQTNEQzQwMDAwMDAwMzY4Ci06MTAxNTMwMDAwNDFBM0REMDAwMDEwMzExMDYxQTNERDQwMDAwMDAwMzM3Ci06MTAxNTQwMDAwNDFBM0RFMDAwMDEwMzEyMDYxQTNERTQwMDAwMDAwMzA2Ci06MTAxNTUwMDAwNDFBM0RGMDAwMDEwMzEzMDYxQTNERjQwMDAwMDAwM0Q1Ci06MTAxNTYwMDAwNDFBM0UwMDAwMDEwMzE0MDYxQTNFMDQwMDAwMDAwM0EyCi06MTAxNTcwMDAwNDFBM0UxMDAwMDEwMzE1MDYxQTNFMTQwMDAwMDAwMzcxCi06MTAxNTgwMDAwNDFBM0UyMDAwMDEwMzE2MDYxQTNFMjQwMDAwMDAwMzQwCi06MTAxNTkwMDAwNDFBM0UzMDAwMDEwMzE3MDYxQTNFMzQwMDAwMDAwMzBGCi06MTAxNUEwMDAwNDFBM0U0MDAwMDEwMzE4MDYxQTNFNDQwMDAwMDAwM0RFCi06MTAxNUIwMDAwNDFBM0U1MDAwMDEwMzE5MDYxQTNFNTQwMDAwMDAwM0FECi06MTAxNUMwMDAwNDFBM0U2MDAwMDEwMzFBMDYxQTNFNjQwMDAwMDAwMzdDCi06MTAxNUQwMDAwNDFBM0U3MDAwMDEwMzFCMDYxQTNFNzQwMDAwMDAwMzRCCi06MTAxNUUwMDAwNDFBM0U4MDAwMDEwMzFDMDYxQTNFODQwMDAwMDAwMzFBCi06MTAxNUYwMDAwNDFBM0U5MDAwMDEwMzFEMDYxQTNFOTQwMDAwMDAwM0U5Ci06MTAxNjAwMDAwNDFBM0VBMDAwMDEwMzFFMDYxQTNFQTQwMDAwMDAwM0I3Ci06MTAxNjEwMDAwNDFBM0VCMDAwMDEwMzFGMDYxQTNFQjQwMDAwMDAwMzg2Ci06MTAxNjIwMDAwNDFBM0VDMDAwMDEwMzIwMDYxQTNFQzQwMDAwMDAwMzU1Ci06MTAxNjMwMDAwNDFBM0VEMDAwMDEwMzIxMDYxQTNFRDQwMDAwMDAwMzI0Ci06MTAxNjQwMDAwNDFBM0VFMDAwMDEwMzIyMDYxQTNFRTQwMDAwMDAwM0YzCi06MTAxNjUwMDAwNDFBM0VGMDAwMDEwMzIzMDYxQTNFRjQwMDAwMDAwM0MyCi06MTAxNjYwMDAwNDFBM0YwMDAwMDEwMzI0MDYxQTNGMDQwMDAwMDAwMzhGCi06MTAxNjcwMDAwNDFBM0YxMDAwMDEwMzI1MDYxQTNGMTQwMDAwMDAwMzVFCi06MTAxNjgwMDAwNDFBM0YyMDAwMDEwMzI2MDYxQTNGMjQwMDAwMDAwMzJECi06MTAxNjkwMDAwNDFBM0YzMDAwMDEwMzI3MDYxQTNGMzQwMDAwMDAwM0ZDCi06MTAxNkEwMDAwNDFBM0Y0MDAwMDEwMzI4MDYxQTNGNDQwMDAwMDAwM0NCCi06MTAxNkIwMDAwNDFBM0Y1MDAwMDEwMzI5MDYxQTNGNTQwMDAwMDAwMzlBCi06MTAxNkMwMDAwNDFBM0Y2MDAwMDEwMzJBMDYxQTNGNjQwMDAwMDAwMzY5Ci06MTAxNkQwMDAwNDFBM0Y3MDAwMDEwMzJCMDYxQTNGNzQwMDAwMDAwMzM4Ci06MTAxNkUwMDAwNDFBM0Y4MDAwMDEwMzJDMDYxQTNGODQwMDAwMDAwMzA3Ci06MTAxNkYwMDAwNDFBM0Y5MDAwMDEwMzJEMDYxQTNGOTQwMDAwMDAwM0Q2Ci06MTAxNzAwMDAwNDFBM0ZBMDAwMDEwMzJFMDYxQTNGQTQwMDAwMDAwM0E0Ci06MTAxNzEwMDAwNDFBM0ZCMDAwMDEwMzJGMDYxQTNGQjQwMDAwMDAwMzczCi06MTAxNzIwMDAwNDFBM0ZDMDAwMDEwMzMwMDYxQTNGQzQwMDAwMDAwMzQyCi06MTAxNzMwMDAwNDFBM0ZEMDAwMDEwMzMxMDYxQTNGRDQwMDAwMDAwMzExCi06MTAxNzQwMDAwNDFBM0ZFMDAwMDEwMzMyMDYxQTNGRTQwMDAwMDAwN0RDCi06MTAxNzUwMDAwNDFBNENCMDAwMDgwMzMzMDYxQTQwMDAwMDAwMDEyNEFDCi06MTAxNzYwMDAwMjFBNDkyMDAwMDAwMDAwMDYxQTI1MDAwMDAwMDAxMDlGCi06MTAxNzcwMDAwNjFBMjU4MDAwMDAwMDEyMDYxQTA5QzAwMDAwMDA0ODYxCi06MTAxNzgwMDAwNjFBMDgwMDAwMDAwMDAyMDYxQTA4MjAwMDAwMDAxMkQ1Ci06MTAxNzkwMDAwNDFBMkZCMDAwMDIwMzNCMDQxQTRDRjAwMDAyMDMzRDcwCi06MTAxN0EwMDAwNjFBNTAwMDAwMDAwMDA0MDYxQTQ0OTAwMDAwMDEyNEFDCi06MTAxN0IwMDAwMjFBNDkyNDAwMDAwMDAwMDYxQTI1NDAwMDAwMDAxMDBCCi06MTAxN0MwMDAwNjFBMjVDODAwMDAwMDEyMDYxQTBBRTAwMDAwMDA0OEE4Ci06MTAxN0QwMDAwNjFBMDgxMDAwMDAwMDAyMDYxQTA4NjgwMDAwMDAxMjJECi06MTAxN0UwMDAwNDFBMkZCODAwMDIwMzNGMDQxQTRDRjgwMDAyMDM0MTA4Ci06MTAxN0YwMDAwNjFBNTAxMDAwMDAwMDA0MDIwMEE0NjgwMDBBRkZEQzcyCi06MTAxODAwMDAwMjAwQTI4MDAwMDAwMDAxMDIwMEEyOTQwNzFEMjkxMTFECi06MTAxODEwMDAwMjAwQTI5ODAwMDAwMDAwMDIwMEEyOUMwMDlDMDQyNDg4Ci06MTAxODIwMDAwMjAwQTJBMDAwMDAwMDAwMDIwMEEyQTQwMDAwMDIwOTIxCi06MTAxODMwMDAwMjAwQTRGQ0ZGMDAwMDAwMDIwMTAwQjQwMDAwMDAwMTRGCi06MTAxODQwMDAwMjAxMDBCODAwMDAwMDAxMDIwMTAwREMwMDAwMDAwMUZDCi06MTAxODUwMDAwMjAxMDEwMDAwMDAwMDAxMDIwMTAxMDQwMDAwMDAwMTdBCi06MTAxODYwMDAwMjAxMDA3QzAwMzAwMDAwMDIwMTAwODQwMDAwMDAyODFBCi06MTAxODcwMDAwMjAxMDA4QzAwMDAwMDAwMDIwMTAxMzAwMDAwMDAwNEExCi06MTAxODgwMDAwMjAxMDI1QzAwMDAwMDAxMDIwMTAzMjgwMDAwMDAwMEM4Ci06MTAxODkwMDAwMjAxMDU1NDAwMDAwMDMwMDIwMTAwQzQwMDAwMDAwMUY0Ci06MTAxOEEwMDAwMjAxMDBDQzAwMDAwMDAxMDIwMTAwRjgwMDAwMDAwMTZDCi06MTAxOEIwMDAwMjAxMDBGMDAwMDAwMDAxMDIwMTAwODAwMDMwMDAwMDgxCi06MTAxOEMwMDAwMjAxMDA4ODAwMDAwMDI4MDIwMTAwOTAwMDAwMDAwMEQyCi06MTAxOEQwMDAwMjAxMDEzNDAwMDAwMDA0MDIwMTAyREMwMDAwMDAwMUVBCi06MTAxOEUwMDAwMjAxMDMyQzAwMDAwMDAwMDIwMTA1NjQwMDAwMDAzMDJBCi06MTAxOEYwMDAwMjAxMDBDODAwMDAwMDAxMDIwMTAwRDAwMDAwMDAwMTQ4Ci06MTAxOTAwMDAwMjAxMDBGQzAwMDAwMDAxMDIwMTAwRjQwMDAwMDAwMURGCi06MTAxOTEwMDAwMjBDMTAwMDAwMDAwMDI4MDIwQzIwMDgwMDAwMEExMTMwCi06MTAxOTIwMDAwMjBDMjAwQzAwMDAwQTAwMDIwQzIwMTAwMDAwMEEwNDI3Ci06MTAxOTMwMDAwMjBDMjAxQzAwMDBGRkZGMDIwQzIwMjAwMDAwRkZGRjEzCi06MTAxOTQwMDAwMjBDMjAyNDAwMDBGRkZGMDIwQzIwMjgwMDAwRkZGRkYzCi06MTAxOTUwMDAwMjBDMjAzODAwMDAwMDIwMDIwQzIwM0MwMDAwMDAyMTc2Ci06MTAxOTYwMDAwMjBDMjA0MDAwMDAwMDIyMDIwQzIwNDQwMDAwMDAyMzUyCi06MTAxOTcwMDAwMjBDMjA0ODAwMDAwMDI0MDIwQzIwNEMwMDAwMDAyNTJFCi06MTAxOTgwMDAwMjBDMjA1MDAwMDAwMDI2MDIwQzIwNTQwMDAwMDAyNzBBCi06MTAxOTkwMDAwMjBDMjA1ODAwMDAwMDI4MDIwQzIwNUMwMDAwMDAyOUU2Ci06MTAxOUEwMDAwMjBDMjA2MDAwMDAwMDJBMDIwQzIwNjQwMDAwMDAyQkMyCi06MTAxOUIwMDAwMjBDMjA2ODAwMDAwMDJDMDIwQzIwNkMwMDAwMDAyRDlFCi06MTAxOUMwMDAwMjBDMjA3MDAwMDAwMDJFMDIwQzIwNzQwMDAwMDAyRjdBCi06MTAxOUQwMDAwMjBDMjA3ODAwMDAwMDEwMDYwQzIwN0MwMDAwMDA0RjU0Ci06MTAxOUUwMDAwMjBDMjFCODAwMDAwMDAxMDIwQzIxQkMwMDAwMDAwMTIzCi06MTAxOUYwMDAwMjBDMjFDMDAwMDAwMDAxMDIwQzIxQzQwMDAwMDAwMTAzCi06MTAxQTAwMDAwMjBDMjFDODAwMDAwMDAxMDIwQzIxQ0MwMDAwMDAwMUUyCi06MTAxQTEwMDAwMjBDMjFEMDAwMDAwMDAxMDIwQzIxRDQwMDAwMDAwMUMyCi06MTAxQTIwMDAwMjBDMjFEODAwMDAwMDAxMDIwQzIxREMwMDAwMDAwMUEyCi06MTAxQTMwMDAwMjBDMjFFMDAwMDAwMDAxMDIwQzIxRTQwMDAwMDAwMTgyCi06MTAxQTQwMDAwMjBDMjFFODAwMDAwMDAxMDIwQzIxRUMwMDAwMDAwMTYyCi06MTAxQTUwMDAwMjBDMjFGMDAwMDAwMDAxMDIwQzIxRjQwMDAwMDAwMTQyCi06MTAxQTYwMDAwMjBDMjFGODAwMDAwMDAxMDYwQzIxRkMwMDAwMDAwRjEwCi06MTAxQTcwMDAwMjBDMjIzODA3RkZGRkZGMDIwQzIyM0MwMDAwMDAzRjRGCi06MTAxQTgwMDAwMjBDMjI0MDA3RkZGRkZGMDIwQzIyNDQwMDAwMDAwRjVGCi06MTAxQTkwMDAwMTBDMjI0ODAwMDAwMDAwMDEwQzIyNEMwMDAwMDAwMDU0Ci06MTAxQUEwMDAwMTBDMjI1MDAwMDAwMDAwMDEwQzIyNTQwMDAwMDAwMDM0Ci06MTAxQUIwMDAwMTBDMjI1ODAwMDAwMDAwMDEwQzIyNUMwMDAwMDAwMDE0Ci06MTAxQUMwMDAwMTBDMjI2MDAwMDAwMDAwMDEwQzIyNjQwMDAwMDAwMEY0Ci06MTAxQUQwMDAwMTBDMjI2ODAwMDAwMDAwMDEwQzIyNkMwMDAwMDAwMEQ0Ci06MTAxQUUwMDAwMTBDMjI3MDAwMDAwMDAwMDEwQzIyNzQwMDAwMDAwMEI0Ci06MTAxQUYwMDAwMTBDMjI3ODAwMDAwMDAwMDEwQzIyN0MwMDAwMDAwMDk0Ci06MTAxQjAwMDAwMjBDMjRCQzAwMDAwMDAxMEMwQzIwMDAwMDAwMDNFOEMzCi06MTAxQjEwMDAwQTBDMjAwMDAwMDAwMDAxMEIwQzIwMDAwMDAwMDAwQTRECi06MTAxQjIwMDAwMjBDNDAwODAwMDAwNTYyMDIwQzQwMEMwMDAwMDU1MTQ4Ci06MTAxQjMwMDAwMjBDNDAxMDAwMDAwNTU1MDIwQzQwMTQwMDAwMDU3MjE0Ci06MTAxQjQwMDAwMjBDNDAxQzAwMDBGRkZGMDIwQzQwMjAwMDAwRkZGRkMxCi06MTAxQjUwMDAwMjBDNDAyNDAwMDBGRkZGMDIwQzQwMjgwMDAwRkZGRkExCi06MTAxQjYwMDAwMjBDNDAzODAwMDAwMDQ2MDIwQzQwM0MwMDAwMDAwQzEzCi06MTAxQjcwMDAwNjBDNDA0MDAwMDAwMDVFMDIwQzQxQjgwMDAwMDAwMTZECi06MTAxQjgwMDAwNjBDNDFCQzAwMDAwMDFGMDIwQzQyMzgwN0ZGRkZGRjlCCi06MTAxQjkwMDAwMjBDNDIzQzAwMDAwMDNGMDIwQzQyNDAwN0ZGRkZGRkU2Ci06MTAxQkEwMDAwMjBDNDI0NDAwMDAwMDBGMDEwQzQyNDgwMDAwMDAwMEZCCi06MTAxQkIwMDAwMTBDNDI0QzAwMDAwMDAwMDEwQzQyNTAwMDAwMDAwMEVCCi06MTAxQkMwMDAwMTBDNDI1NDAwMDAwMDAwMDEwQzQyNTgwMDAwMDAwMENCCi06MTAxQkQwMDAwMTBDNDI1QzAwMDAwMDAwMDEwQzQyNjAwMDAwMDAwMEFCCi06MTAxQkUwMDAwMTBDNDI2NDAwMDAwMDAwMDEwQzQyNjgwMDAwMDAwMDhCCi06MTAxQkYwMDAwMTBDNDI2QzAwMDAwMDAwMDEwQzQyNzAwMDAwMDAwMDZCCi06MTAxQzAwMDAwMTBDNDI3NDAwMDAwMDAwMDEwQzQyNzgwMDAwMDAwMDRBCi06MTAxQzEwMDAwMTBDNDI3QzAwMDAwMDAwMDEwQzQyODAwMDAwMDAwMDJBCi06MTAxQzIwMDAwMjBDNDRDMDAwMDAwMDAxMEMwQzQwMDAwMDAwMDNFODVFCi06MTAxQzMwMDAwQTBDNDAwMDAwMDAwMDAxMEIwQzQwMDAwMDAwMDAwQUVDCi06MTAxQzQwMDAwNjBENDAwMDAwMDAwQTAwMDIwRDAwNDQwMDAwMDAzMkIyCi06MTAxQzUwMDAwMjBEMDA4QzAyMTUwMDIwMDIwRDAwOTAwMjE1MDAyMERDCi06MTAxQzYwMDAwMjBEMDA5NDA4MTAwMDAwMDIwRDAwOTgwMDAwMDAzM0RGCi06MTAxQzcwMDAwMjBEMDA5QzAwMDAwMDAyMDIwRDAwQTAwMDAwMDAwMDA4Ci06MTAxQzgwMDAwMjBEMDBBNDAwMDAwMDA1MDIwRDAwQTgwMDAwMDAwNUUwCi06MTAxQzkwMDAwNjBEMDBBQzAwMDAwMDAyMDIwRDAwQjQwMDAwMDAwMkJFCi06MTAxQ0EwMDAwMjBEMDBCODAwMDAwMDAzMDIwRDAwQkMwMDAwMDAwMjlECi06MTAxQ0IwMDAwMjBEMDBDMDAwMDAwMDAxMDIwRDAwQzgwMDAwMDAwMjdCCi06MTAxQ0MwMDAwMjBEMDBDQzAwMDAwMDAyMDIwRDAxNUMwMDAwMDAwMUNBCi06MTAxQ0QwMDAwMjBEMDE2NDAwMDAwMDAxMDIwRDAxNjgwMDAwMDAwMjE1Ci06MTAxQ0UwMDAwMjBEMDIwNDAwMDAwMDAxMDIwRDAyMEMwMDAwMDAyMEExCi06MTAxQ0YwMDAwMjBEMDIxMDAwMDAwMDQwMDIwRDAyMTQwMDAwMDA0MDFFCi06MTAxRDAwMDAwMjBEMDIyMDAwMDAwMDAzMDIwRDAyMjQwMDAwMDAxODUyCi06MTAxRDEwMDAwNjBEMDI4MDAwMDAwMDEyMDQwRDAzMDAwMDE4MDM0M0FBCi06MTAxRDIwMDAwNjBEMDM2MDAwMDAwMDBDMDIwRDAwNEMwMDAwMDAwMUQ1Ci06MTAxRDMwMDAwMjBEMDA1MDAwMDAwMDAyMDIwRDAwNTQwMDAwMDAwMERGCi06MTAxRDQwMDAwMjBEMDA1ODAwMDAwMDA4MDYwRDAwNUMwMDAwMDAwNEIxCi06MTAxRDUwMDAwMjBEMDBDNDAwMDAwMDA0MDIwRDAxMTQwMDAwMDAwOTdGCi06MTAxRDYwMDAwMjBEMDExODAwMDAwMDI5MDIwRDAxMUMwMDAwMDAwQUVDCi06MTAxRDcwMDAwMjBEMDEyMDAwMDAwMDJBMDIwRDAxMjQwMDAwMDAwMEQ1Ci06MTAxRDgwMDAwMjBEMDEyODAwMDAwMDIwMDIwRDAxMkMwMDAwMDAwMEJGCi06MTAxRDkwMDAwMjBEMDEzMDAwMDAwMDIwMDIwRDAxMzQwMDAwMDAwMDlGCi06MTAxREEwMDAwMjBEMDEzODAwMDAwMDIwMDIwRDAxM0MwMDAwMDAwMDdGCi06MTAxREIwMDAwMjBEMDE0MDAwMDAwMDIwMDIwRDAxNDQwMDAwMDAwMDVGCi06MTAxREMwMDAwMjBEMDE0ODAwMDAwMDIwMDIwRDAwMDQwMDAwMDAwMTg3Ci06MTAxREQwMDAwMjBEMDAwODAwMDAwMDAxMDIwRDAwMEMwMDAwMDAwMUNGCi06MTAxREUwMDAwMjBEMDAxMDAwMDAwMDAxMDIwRDAwMTQwMDAwMDAwMUFGCi06MTAxREYwMDAwMjBEMDAxODAwMDAwMDAxMDIwRDAwMUMwMDAwMDAwMThGCi06MTAxRTAwMDAwMjBEMDAyMDAwMDAwMDAxMDIwRDAwMjQwMDAwMDAwMTZFCi06MTAxRTEwMDAwMjBEMDAyODAwMDAwMDAxMDIwRDAwMkMwMDAwMDAwMTRFCi06MTAxRTIwMDAwMjBEMDAzMDAwMDAwMDAxMDIwRDAwMzQwMDAwMDAwMTJFCi06MTAxRTMwMDAwMjBEMDAzODAwMDAwMDAxMDIwRDAwM0MwMDAwMDAwMTBFCi06MTAxRTQwMDAwNjBFMjAwMDAwMDAwODAwMDIwRTAwNEMwMDAwMDAzMkM4Ci06MTAxRTUwMDAwMjBFMDA5NDAyMTUwMDIwMDIwRTAwOTgwMjE1MDAyMEM4Ci06MTAxRTYwMDAwMjBFMDA5QzAwMDAwMDMwMDIwRTAwQTAwODEwMDAwMENFCi06MTAxRTcwMDAwMjBFMDBBNDAwMDAwMDMzMDIwRTAwQTgwMDAwMDAzMDkzCi06MTAxRTgwMDAwMjBFMDBBQzAwMDAwMDMxMDIwRTAwQjAwMDAwMDAwMkEzCi06MTAxRTkwMDAwMjBFMDBCNDAwMDAwMDA0MDIwRTAwQjgwMDAwMDAwMEIyCi06MTAxRUEwMDAwMjBFMDBCQzAwMDAwMDAyMDIwRTAwQzAwMDAwMDAwMjkyCi06MTAxRUIwMDAwMjBFMDBDNDAwMDAwMDAwMDIwRTAwQzgwMDAwMDAwMjc0Ci06MTAxRUMwMDAwMjBFMDBDQzAwMDAwMDA3MDIwRTAwRDAwMDAwMDAwMjRECi06MTAxRUQwMDAwMjBFMDBENDAwMDAwMDAyMDIwRTAwRDgwMDAwMDAwMTMzCi06MTAxRUUwMDAwMjBFMDE0NDAwMDAwMDAxMDIwRTAxNEMwMDAwMDAwMTNFCi06MTAxRUYwMDAwMjBFMDE1MDAwMDAwMDAyMDIwRTAyMDQwMDAwMDAwMTY4Ci06MTAxRjAwMDAwMjBFMDIwQzAwMDAwMDQwMDIwRTAyMTAwMDAwMDA0MDExCi06MTAxRjEwMDAwMjBFMDIxQzAwMDAwMDA0MDIwRTAyMjAwMDAwMDAyMDNECi06MTAxRjIwMDAwMjBFMDIyNDAwMDAwMDBFMDIwRTAyMjgwMDAwMDAxQjE4Ci06MTAxRjMwMDAwNjBFMDMwMDAwMDAwMDEyMDQwRTAyODAwMDFCMDM1QjZCCi06MTAxRjQwMDAwNjBFMDJFQzAwMDAwMDA1MDIwRTAwNTQwMDAwMDAwQzFBCi06MTAxRjUwMDAwMjBFMDA1ODAwMDAwMDBDMDIwRTAwNUMwMDAwMDAwMEExCi06MTAxRjYwMDAwMjBFMDA2MDAwMDAwMDEwMDYwRTAwNjQwMDAwMDAwNDc1Ci06MTAxRjcwMDAwMjBFMDBEQzAwMDAwMDAzMDIwRTAxMTAwMDAwMDAwRjQyCi06MTAxRjgwMDAwMjBFMDExNDAwMDAwMDJGMDIwRTAxMTgwMDAwMDAwMEQ0Ci06MTAxRjkwMDAwMjBFMDExQzAwMDAwMDIwMDIwRTAwMDQwMDAwMDAwMURGCi06MTAxRkEwMDAwMjBFMDAwODAwMDAwMDAxMDIwRTAwMEMwMDAwMDAwMUZCCi06MTAxRkIwMDAwMjBFMDAxMDAwMDAwMDAxMDIwRTAwMTQwMDAwMDAwMURCCi06MTAxRkMwMDAwMjBFMDAxODAwMDAwMDAxMDIwRTAwMUMwMDAwMDAwMUJCCi06MTAxRkQwMDAwMjBFMDAyMDAwMDAwMDAxMDIwRTAwMjQwMDAwMDAwMTlCCi06MTAxRkUwMDAwMjBFMDAyODAwMDAwMDAxMDIwRTAwMkMwMDAwMDAwMTdCCi06MTAxRkYwMDAwMjBFMDAzMDAwMDAwMDAxMDIwRTAwMzQwMDAwMDAwMTVCCi06MTAyMDAwMDAwMjBFMDAzODAwMDAwMDAxMDIwRTAwM0MwMDAwMDAwMTNBCi06MTAyMDEwMDAwMjBFMDA0MDAwMDAwMDAxMDIwRTAwNDQwMDAwMDAwMTFBCi06MTAyMDIwMDAwNzMwMDQwMDAwQUYwMDAwMDgzMDA3NjgwMDEzMDM3NjkzCi06MTAyMDMwMDAwNzM0MDAwMDMzMUMwMDAwMDczNDgwMDAzMjc4MENDOERECi06MTAyMDQwMDAwNzM1MDAwMDFBODAxOTY3MDgzNTM5QjA1OENBMDM3ODc3Ci06MTAyMDUwMDAwMTMwMDAwMDAwMDAwMDAwMDEzMDAwMDQwMDAwMDAwMDFBCi06MTAyMDYwMDAwMTMwMDAwODAwMDAwMDAwMDEzMDAwMEMwMDAwMDAwMEZBCi06MTAyMDcwMDAwMTMwMDAxMDAwMDAwMDAwMDEzMDAwMTQwMDAwMDAwMERBCi06MTAyMDgwMDAwMjMwMDAyMDAwMDAwMDAxMDIzMDAwMjQwMDAwMDAwMkE1Ci06MTAyMDkwMDAwMjMwMDAyODAwMDAwMDAzMDIzMDAwMkMwMDAwMDAwMDg1Ci06MTAyMEEwMDAwMjMwMDAzMDAwMDAwMDA0MDIzMDAwMzQwMDAwMDAwMTYzCi06MTAyMEIwMDAwMjMwMDAzODAwMDAwMDAwMDIzMDAwM0MwMDAwMDAwMTQ3Ci06MTAyMEMwMDAwMjMwMDA0MDAwMDAwMDA0MDIzMDAwNDQwMDAwMDAwMDI0Ci06MTAyMEQwMDAwMjMwMDA0ODAwMDAwMDAxMDIzMDAwNEMwMDAwMDAwMzA0Ci06MTAyMEUwMDAwMjMwMDA1MDAwMDAwMDAwMDIzMDAwNTQwMDAwMDAwMUU3Ci06MTAyMEYwMDAwMjMwMDA1ODAwMDAwMDA0MDIzMDAwNUMwMDAwMDAwMEM0Ci06MTAyMTAwMDAwMjMwMDA2MDAwMDAwMDAxMDIzMDAwNjQwMDAwMDAwM0EzCi06MTAyMTEwMDAwMjMwMDA2ODAwMDAwMDAwMDIzMDAwNkMwMDAwMDAwMTg2Ci06MTAyMTIwMDAwMjMwMDA3MDAwMDAwMDA0MDIzMDAwNzQwMDAwMDAwMDYzCi06MTAyMTMwMDAwMjMwMDA3ODAwMDAwMDA0MDIzMDAwN0MwMDAwMDAwMzQwCi06MTAyMTQwMDAwNjMwMDA4MDAwMDAwMDAyMDIzMDAwQTQwMDAwM0ZGRkMzCi06MTAyMTUwMDAwMjMwMDBBODAwMDAwM0ZGMDIzMDAyMjQwMDAwMDAwMDRCCi06MTAyMTYwMDAwMjMwMDIzNDAwMDAwMDAwMDIzMDAyNEMwMDAwMDAwMDg3Ci06MTAyMTcwMDAwMjMwMDJFNDAwMDBGRkZGMDYzMDIwMDAwMDAwMDgwMEVCCi06MTAyMTgwMDAwMjMzOEJDMDAwMDAwMDAxMDIzMzgwMDAwMDAwMDAxQUZGCi06MTAyMTkwMDAwMjMzODA0MDAwMDAwMDRFMDIzMzgwODAwMDAwMDAxMEI3Ci06MTAyMUEwMDAwMjMzODBDMDAwMDAwMDIwMEMzMzgzMDAwMDA3QTEyMDEwCi06MTAyMUIwMDAwQTMzODMwMDAwMDAwMTM4MEIzMzgzMDAwMDAwMTM4OENBCi06MTAyMUMwMDAwQTMzODM0MDAwMDAwMDAwMEMzMzgzNDAwMDAwMDFGNDE4Ci06MTAyMUQwMDAwQjMzODM0MDAwMDAwMDA1MDIzMzgzODAwMDA3QTEyMEY5Ci06MTAyMUUwMDAwMjMzODNDMDAwMDAwMUY0MDYzMjJBODgwMDAwMDBDMkQ2Ci06MTAyMUYwMDAwNjMyMjAwODAwMDAwMEM4MDYzMjIwMDAwMDAwMDAwMjVECi06MTAyMjAwMDAwNjMyMjNFODAwMDAwMDQwMDQzMjJFNTgwMDA0MDM3QTBFCi06MTAyMjEwMDAwNjMyNTBBMDAwMDAwMDA0MDYzMjUwQjgwMDAwMDAwMjUwCi06MTAyMjIwMDAwNjMyNTA4MDAwMDAwMDA2MDQzMjUwOTgwMDAyMDM3RUZGCi06MTAyMjMwMDAwNjMyNTAwMDAwMDAwMDIwMDYzMjMwMDAwMDAwMDQwMDhBCi06MTAyMjQwMDAwNjMyMUMwMDAwMDAwMDA0MDQzMjE4MzAwMDAyMDM4MDMzCi06MTAyMjUwMDAwNjMyMjRFODAwMDAwMEI0MDIzMjJEQjAwMDAwMDAwMDc1Ci06MTAyMjYwMDAwNjMyNDAwMDAwMDAwMEI0MDYzMjMwMDAwMDAwMDAyMEJBCi06MTAyMjcwMDAwNjMyMzEwMDAwMDAwMDIwMDYzMjMyMDAwMDAwMDAyMDRCCi06MTAyMjgwMDAwNjMyMzMwMDAwMDAwMDIwMDYzMjM0MDAwMDAwMDAyMDM3Ci06MTAyMjkwMDAwNjMyMzUwMDAwMDAwMDIwMDYzMjM2MDAwMDAwMDAyMDIzCi06MTAyMkEwMDAwNjMyMzcwMDAwMDAwMDIwMDYzMjM4MDAwMDAwMDAyMDBGCi06MTAyMkIwMDAwNjMyMzkwMDAwMDAwMDIwMDYzMjNBMDAwMDAwMDAyMEZCCi06MTAyMkMwMDAwNjMyM0IwMDAwMDAwMDIwMDYzMjNDMDAwMDAwMDAyMEU3Ci06MTAyMkQwMDAwNjMyM0QwMDAwMDAwMDIwMDYzMjNFMDAwMDAwMDAyMEQzCi06MTAyMkUwMDAwNjMyM0YwMDAwMDAwMDIwMDYzMjFDMTAwMDAwMDAwMkYxCi06MTAyMkYwMDAwNjMyNDVBMDAwMDAwMDI0MDYzMjI3QjgwMDAwMDBCNEQyCi06MTAyMzAwMDAwMjMyMkRCNDAwMDAwMDAwMDYzMjQyRDAwMDAwMDBCNEJBCi06MTAyMzEwMDAwNjMyMzA4MDAwMDAwMDIwMDYzMjMxODAwMDAwMDAyMEFDCi06MTAyMzIwMDAwNjMyMzI4MDAwMDAwMDIwMDYzMjMzODAwMDAwMDAyMDk4Ci06MTAyMzMwMDAwNjMyMzQ4MDAwMDAwMDIwMDYzMjM1ODAwMDAwMDAyMDg0Ci06MTAyMzQwMDAwNjMyMzY4MDAwMDAwMDIwMDYzMjM3ODAwMDAwMDAyMDcwCi06MTAyMzUwMDAwNjMyMzg4MDAwMDAwMDIwMDYzMjM5ODAwMDAwMDAyMDVDCi06MTAyMzYwMDAwNjMyM0E4MDAwMDAwMDIwMDYzMjNCODAwMDAwMDAyMDQ4Ci06MTAyMzcwMDAwNjMyM0M4MDAwMDAwMDIwMDYzMjNEODAwMDAwMDAyMDM0Ci06MTAyMzgwMDAwNjMyM0U4MDAwMDAwMDIwMDYzMjNGODAwMDAwMDAyMDIwCi06MTAyMzkwMDAwNjMyMUMyMDAwMDAwMDAyMDYzMjQ2MzAwMDAwMDAyNEY1Ci06MTAyM0EwMDAwNzIwMDQwMDAwODcwMDAwMDgyMDA3ODAwMDEwMDM4MjM3Ci06MTAyM0IwMDAwNzI0MDAwMDMxNjUwMDAwMDcyNDgwMDAwODFEMEM1QTI2Ci06MTAyM0MwMDAwODI0OEVCMDZDOTAwMzg0MDEyMDAwMDAwMDAwMDAwMEZGCi06MTAyM0QwMDAwMTIwMDAwNDAwMDAwMDAwMDEyMDAwMDgwMDAwMDAwMEFGCi06MTAyM0UwMDAwMTIwMDAwQzAwMDAwMDAwMDEyMDAwMTAwMDAwMDAwMDhGCi06MTAyM0YwMDAwMTIwMDAxNDAwMDAwMDAwMDIyMDAwMjAwMDAwMDAwMTY1Ci06MTAyNDAwMDAwMjIwMDAyNDAwMDAwMDAyMDIyMDAwMjgwMDAwMDAwMzM3Ci06MTAyNDEwMDAwMjIwMDAyQzAwMDAwMDAwMDIyMDAwMzAwMDAwMDAwNDE4Ci06MTAyNDIwMDAwMjIwMDAzNDAwMDAwMDAxMDIyMDAwMzgwMDAwMDAwMEZCCi06MTAyNDMwMDAwMjIwMDAzQzAwMDAwMDAxMDIyMDAwNDAwMDAwMDAwNEQ3Ci06MTAyNDQwMDAwMjIwMDA0NDAwMDAwMDAwMDIyMDAwNDgwMDAwMDAwMUJCCi06MTAyNDUwMDAwMjIwMDA0QzAwMDAwMDAzMDIyMDAwNTAwMDAwMDAwMDk5Ci06MTAyNDYwMDAwMjIwMDA1NDAwMDAwMDAxMDIyMDAwNTgwMDAwMDAwNDc3Ci06MTAyNDcwMDAwMjIwMDA1QzAwMDAwMDAwMDIyMDAwNjAwMDAwMDAwMTVCCi06MTAyNDgwMDAwMjIwMDA2NDAwMDAwMDAzMDIyMDAwNjgwMDAwMDAwMDM5Ci06MTAyNDkwMDAwMjIwMDA2QzAwMDAwMDAxMDIyMDAwNzAwMDAwMDAwNDE3Ci06MTAyNEEwMDAwMjIwMDA3NDAwMDAwMDAwMDIyMDAwNzgwMDAwMDAwNEY4Ci06MTAyNEIwMDAwMjIwMDA3QzAwMDAwMDAzMDYyMDAwODAwMDAwMDAwMkQzCi06MTAyNEMwMDAwMjIwMDBBNDAwMDAzRkZGMDIyMDAwQTgwMDAwMDNGRjNDCi06MTAyNEQwMDAwMjIwMDIyNDAwMDAwMDAwMDIyMDAyMzQwMDAwMDAwMDVDCi06MTAyNEUwMDAwMjIwMDI0QzAwMDAwMDAwMDIyMDAyRTQwMDAwRkZGRjc2Ci06MTAyNEYwMDAwNjIwMjAwMDAwMDAwODAwMDIyMzhCQzAwMDAwMDAwMTFECi06MTAyNTAwMDAwMjIzODAwMDAwMDAwMDEwMDIyMzgwNDAwMDAwMDAxMjFGCi06MTAyNTEwMDAwMjIzODA4MDAwMDAwMDMwMDIyMzgwQzAwMDAwMDAwRUYzCi06MTAyNTIwMDAwQzIzODMwMDAwMDdBMTIwMEEyMzgzMDAwMDAwMDEzODQ4Ci06MTAyNTMwMDAwQjIzODMwMDAwMDAxMzg4MEEyMzgzNDAwMDAwMDAwMDVGCi06MTAyNTQwMDAwQzIzODM0MDAwMDAwMUY0MEIyMzgzNDAwMDAwMDAwNUFFCi06MTAyNTUwMDAwMjIzODM4MDAwMDdBMTIwMDIyMzgzQzAwMDAwMDFGNDJFCi06MTAyNTYwMDAwNjIyNTAwMDAwMDAwMDQyMDYyMjIwMDgwMDAwMDBDODk5Ci06MTAyNTcwMDAwNjIyMjAwMDAwMDAwMDAyMDYyMjQwMDAwMDAwMDBDNkUzCi06MTAyNTgwMDAwNDIyNDMxODAwMDUwMzg2MDYyMjQzMkMwMDAwMDAwQjlBCi06MTAyNTkwMDAwNDIyNDM1ODAwMDUwMzhCMDYyMjQzNkMwMDAwMDAwQjA1Ci06MTAyNUEwMDAwNDIyNDM5ODAwMDUwMzkwMDYyMjQzQUMwMDAwMDAwQjcwCi06MTAyNUIwMDAwNDIyNDNEODAwMDUwMzk1MDYyMjQzRUMwMDAwMDAwQkRCCi06MTAyNUMwMDAwNDIyNDQxODAwMDUwMzlBMDYyMjQ0MkMwMDAwMDAwQjQ0Ci06MTAyNUQwMDAwNDIyNDQ1ODAwMDUwMzlGMDYyMjQ0NkMwMDAwMDAwQkFGCi06MTAyNUUwMDAwNDIyNDQ5ODAwMDUwM0E0MDYyMjQ0QUMwMDAwMDAwQjFBCi06MTAyNUYwMDAwNDIyNDREODAwMDUwM0E5MDYyMjQ0RUMwMDAwMDAwQjg1Ci06MTAyNjAwMDAwNDIyNDUxODAwMDUwM0FFMDYyMjQ1MkMwMDAwMDAwQkVECi06MTAyNjEwMDAwNDIyNDU1ODAwMDUwM0IzMDYyMjQ1NkMwMDAwMDAwQjU4Ci06MTAyNjIwMDAwNDIyNDU5ODAwMDUwM0I4MDYyMjQ1QUMwMDAwMDAwQkMzCi06MTAyNjMwMDAwNDIyNDVEODAwMDUwM0JEMDYyMjQ1RUMwMDAwMDAwQjJFCi06MTAyNjQwMDAwNDIyNDYxODAwMDUwM0MyMDYyMjQ2MkMwMDAwMDAwQjk3Ci06MTAyNjUwMDAwNDIyNDY1ODAwMDUwM0M3MDYyMjQ2NkMwMDAwMDAwQjAyCi06MTAyNjYwMDAwNDIyNDY5ODAwMDUwM0NDMDYyMjQ2QUMwMDAwMDAwQjZECi06MTAyNjcwMDAwNDIyNDZEODAwMDUwM0QxMDYyMjQ2RUMwMDAwMDAwQkQ4Ci06MTAyNjgwMDAwNDIyNDcxODAwMDUwM0Q2MDYyMjQ3MkMwMDAwMDAwQjQxCi06MTAyNjkwMDAwNDIyNDc1ODAwMDUwM0RCMDYyMjQ3NkMwMDAwMDAwQkFDCi06MTAyNkEwMDAwNDIyNDc5ODAwMDUwM0UwMDYyMjQ3QUMwMDAwMDAwQjE3Ci06MTAyNkIwMDAwNDIyNDdEODAwMDUwM0U1MDYyMjQ3RUMwMDAwMDAwQjgyCi06MTAyNkMwMDAwNDIyNDgxODAwMDUwM0VBMDYyMjQ4MkMwMDAwMDAwQkVCCi06MTAyNkQwMDAwNDIyNDg1ODAwMDUwM0VGMDYyMjQ4NkMwMDAwMDAwQjU2Ci06MTAyNkUwMDAwNDIyNDg5ODAwMDUwM0Y0MDYyMjQ4QUMwMDAwMDAwQkMxCi06MTAyNkYwMDAwNDIyNDhEODAwMDUwM0Y5MDYyMjQ4RUMwMDAwMDAwQjJDCi06MTAyNzAwMDAwNDIyNDkxODAwMDUwM0ZFMDYyMjQ5MkMwMDAwMDAwQjk0Ci06MTAyNzEwMDAwNDIyNDk1ODAwMDUwNDAzMDYyMjQ5NkMwMDAwMDAwQkZFCi06MTAyNzIwMDAwNDIyNDk5ODAwMDUwNDA4MDYyMjQ5QUMwMDAwMDAwQjY5Ci06MTAyNzMwMDAwNDIyNDlEODAwMDUwNDBEMDYyMjQ5RUMwMDAwMDAwQkQ0Ci06MTAyNzQwMDAwNDIyNEExODAwMDUwNDEyMDYyMjRBMkMwMDAwMDAwQjNECi06MTAyNzUwMDAwNDIyNEE1ODAwMDUwNDE3MDYyMjRBNkMwMDAwMDAwQkE4Ci06MTAyNzYwMDAwNDIyNEE5ODAwMDUwNDFDMDYyMjRBQUMwMDAwMDAwQjEzCi06MTAyNzcwMDAwNDIyNEFEODAwMDUwNDIxMDYyMjRBRUMwMDAwMDAwNTg0Ci06MTAyNzgwMDAwNjIyNEIwMDAwMDAwMDE3MDQyMjRCNUMwMDAxMDQyNkM3Ci06MTAyNzkwMDAwNjIyNEI2MDAwMDAwMDAzMDQyMjRCNkMwMDAxMDQyNzVBCi06MTAyN0EwMDAwNjIyMzgwMDAwMDAwMDQwMDYyMjMwMDAwMDAwMDIwMDJGCi06MTAyN0IwMDAwNDIyNTFDMDAwMDQwNDI4MDYyMjEwMDAwMDAwMDBDMEJBCi06MTAyN0MwMDAwNjIyMTVDMDAwMDAwMjQwMDQyMjFFQzgwMDA4MDQyQzg2Ci06MTAyN0QwMDAwNjIyMzkwMDAwMDAwMDA4MDIyMjUxMTgwMDAwMDAwMDAzCi06MTAyN0UwMDAwNjIyNTFEMDAwMDAwMDA2MDYyMjEzMDAwMDAwMDAwMjVECi06MTAyN0YwMDAwNjIyMTQxMDAwMDAwMDMwMDYyMjM5MjAwMDAwMDAwOEQ0Ci06MTAyODAwMDAwMjIyNTExQzAwMDAwMDAwMDYyMjUxRTgwMDAwMDAwNkQwCi06MTAyODEwMDAwNjIyMTMwODAwMDAwMDAyMDYyMjE0RDAwMDAwMDAzMDM3Ci06MTAyODIwMDAwMjE2MTAwMDAwMDAwMDI4MDIxNzAwMDgwMDAwMDAwMjM1Ci06MTAyODMwMDAwMjE3MDAyQzAwMDAwMDAzMDIxNzAwM0MwMDAwMDAwNEY3Ci06MTAyODQwMDAwMjE3MDA0NDAwMDAwMDAwMDIxNzAwNDgwMDAwMDAwMkM4Ci06MTAyODUwMDAwMjE3MDA0QzAwMDAwMDkwMDIxNzAwNTAwMDAwMDA5MDhBCi06MTAyODYwMDAwMjE3MDA1NDAwODAwMDkwMDIxNzAwNTgwODEwMDAwMDYyCi06MTAyODcwMDAwMjE3MDA2MDAwMDAwMDhBMDIxNzAwNjQwMDAwMDA4MDU4Ci06MTAyODgwMDAwMjE3MDA2ODAwMDAwMDgxMDIxNzAwNkMwMDAwMDA4MDQxCi06MTAyODkwMDAwMjE3MDA3MDAwMDAwMDA2MDIxNzAwNzgwMDAwMDdEMDQxCi06MTAyOEEwMDAwMjE3MDA3QzAwMDAwNzZDMDIxNzAwMzgwMDdDMTAwNDNGCi06MTAyOEIwMDAwMjE3MDAwNDAwMDAwMDBGMDYxNjQwMjQwMDAwMDAwMjZBCi06MTAyOEMwMDAwMjE2NDA3MDAwMDAwMDFDMDIxNjQyMDgwMDAwMDAwMUMxCi06MTAyOEQwMDAwMjE2NDIxMDAwMDAwMDAxMDIxNjQyMjAwMDAwMDAwMTEyCi06MTAyOEUwMDAwMjE2NDIyODAwMDAwMDAxMDIxNjQyMzAwMDAwMDAwMURBCi06MTAyOEYwMDAwMjE2NDIzODAwMDAwMDAxMDIxNjQyNjAwMDAwMDAwMThBCi06MTAyOTAwMDAwQzE2NDAxQzAwMDNEMDkwMEExNjQwMUMwMDAwMDA5Q0NFCi06MTAyOTEwMDAwQjE2NDAxQzAwMDAwOUM0MDIxNjQwMzAwMDAwMDAwOERECi06MTAyOTIwMDAwMjE2NDAzNDAwMDAwMDBDMDIxNjQwMzgwMDAwMDAxMDZGCi06MTAyOTMwMDAwMjE2NDA0NDAwMDAwMDIwMDIxNjQwMDAwMDAwMDAwMTgyCi06MTAyOTQwMDAwMjE2NDBEODAwMDAwMDAxMDIxNjQwMDgwMDAwMDAwMUY1Ci06MTAyOTUwMDAwMjE2NDAwQzAwMDAwMDAxMDIxNjQwMTAwMDAwMDAwMUE5Ci06MTAyOTYwMDAwMjE2NDI0MDAwMDAwMDAwMDIxNjQyNDgwMDAwMDAwMDJCCi06MTAyOTcwMDAwNjE2NDI3MDAwMDAwMDAyMDIxNjQyNTAwMDAwMDAwMERECi06MTAyOTgwMDAwMjE2NDI1ODAwMDAwMDAwMDYxNjQyODAwMDAwMDAwMkI1Ci06MTAyOTkwMDAwMjE2NjAwODAwMDAwNjE0MDIxNjYwMEMwMDAwMDYwMDEzCi06MTAyOUEwMDAwMjE2NjAxMDAwMDAwNjA0MDIxNjYwMUMwMDAwRkZGRjAzCi06MTAyOUIwMDAwMjE2NjAyMDAwMDBGRkZGMDIxNjYwMjQwMDAwRkZGRkU3Ci06MTAyOUMwMDAwMjE2NjAyODAwMDBGRkZGMDIxNjYwMzgwMDAwMDAyMDk5Ci06MTAyOUQwMDAwMjE2NjAzQzAwMDAwMDIwMDYxNjYwNDAwMDAwMDAwMjY1Ci06MTAyOUUwMDAwMjE2NjA0ODAwMDAwMDIzMDIxNjYwNEMwMDAwMDAyNDFDCi06MTAyOUYwMDAwMjE2NjA1MDAwMDAwMDI1MDIxNjYwNTQwMDAwMDAyNkY4Ci06MTAyQTAwMDAwMjE2NjA1ODAwMDAwMDI3MDIxNjYwNUMwMDAwMDAyOUQyCi06MTAyQTEwMDAwMjE2NjA2MDAwMDAwMDJBMDIxNjYwNjQwMDAwMDAyQkFECi06MTAyQTIwMDAwMjE2NjA2ODAwMDAwMDJDMDIxNjYwNkMwMDAwMDAyRDg5Ci06MTAyQTMwMDAwNjE2NjA3MDAwMDAwMDEyMDIxNjYwQjgwMDAwMDAwMTY3Ci06MTAyQTQwMDAwMjE2NjBCQzAwMDAwMDAxMDYxNjYwQzAwMDAwMDAzRUQ3Ci06MTAyQTUwMDAwMjE2NjFCODAwMDAwMDAxMDYxNjYxQkMwMDAwMDAxRkVDCi06MTAyQTYwMDAwMjE2NjIzODA3RkZGRkZGMDIxNjYyM0MwMDAwMDAzRkJCCi06MTAyQTcwMDAwMjE2NjI0MDA3RkZGRkZGMDIxNjYyNDQwMDAwMDAwRkNCCi06MTAyQTgwMDAwMTE2NjI0ODAwMDAwMDAwMDExNjYyNEMwMDAwMDAwMEMwCi06MTAyQTkwMDAwMTE2NjI1MDAwMDAwMDAwMDExNjYyNTQwMDAwMDAwMEEwCi06MTAyQUEwMDAwMTE2NjI1ODAwMDAwMDAwMDExNjYyNUMwMDAwMDAwMDgwCi06MTAyQUIwMDAwMTE2NjI2MDAwMDAwMDAwMDExNjYyNjQwMDAwMDAwMDYwCi06MTAyQUMwMDAwMTE2NjI2ODAwMDAwMDAwMDExNjYyNkMwMDAwMDAwMDQwCi06MTAyQUQwMDAwMTE2NjI3MDAwMDAwMDAwMDExNjYyNzQwMDAwMDAwMDIwCi06MTAyQUUwMDAwMTE2NjI3ODAwMDAwMDAwMDExNjYyN0MwMDAwMDAwMDAwCi06MTAyQUYwMDAwMjE2NjRCQzAwMDAwMDAxMEMxNjYwMDAwMDAwMDNFODMwCi06MTAyQjAwMDAwQTE2NjAwMDAwMDAwMDAxMEIxNjYwMDAwMDAwMDAwQUI5Ci06MTAyQjEwMDAwMjE2ODA0MDAwMDAwMDA2MDIxNjgwNDQwMDAwMDAwNUY2Ci06MTAyQjIwMDAwMjE2ODA0ODAwMDAwMDBBMDIxNjgwNEMwMDAwMDAwNUQyCi06MTAyQjMwMDAwMjE2ODA1NDAwMDAwMDAyMDIxNjgwQ0MwMDAwMDAwNDNGCi06MTAyQjQwMDAwMjE2ODBEMDAwMDAwMDA0MDIxNjgwRDQwMDAwMDAwNEE5Ci06MTAyQjUwMDAwMjE2ODBEODAwMDAwMDA0MDIxNjgwREMwMDAwMDAwNDg5Ci06MTAyQjYwMDAwMjE2ODBFMDAwMDAwMDA0MDIxNjgwRTQwMDAwMDAwNDY5Ci06MTAyQjcwMDAwMjE2ODBFODAwMDAwMDA0MDIxNjg4MDQwMDAwMDAwNDI5Ci06MTAyQjgwMDAwMjE2ODAzMDAwMDAwMDdDMDIxNjgwMzQwMDAwMDAzREY4Ci06MTAyQjkwMDAwMjE2ODAzODAwMDAwMDNGMDIxNjgwM0MwMDAwMDA5Q0I2Ci06MTAyQkEwMDAwMjE2ODBGMDAwMDAwMDA3MDYxNjgwRjQwMDAwMDAwNTAxCi06MTAyQkIwMDAwMjE2ODgwQzAxMDEwMTAxMDIxNjgxMDgwMDAwMDAwMEM0Ci06MTAyQkMwMDAwMjE2ODEwQzAwMDAwMDA0MDIxNjgxMTAwMDAwMDAwNEFGCi06MTAyQkQwMDAwMjE2ODExNDAwMDAwMDAyMDIxNjg4MTAwODAxMjAwNDY5Ci06MTAyQkUwMDAwMjE2ODExODAwMDAwMDA1MDIxNjgxMUMwMDAwMDAwNTc1Ci06MTAyQkYwMDAwMjE2ODEyMDAwMDAwMDA1MDIxNjgxMjQwMDAwMDAwNTU1Ci06MTAyQzAwMDAwMjE2ODgyQzIwMDgxMDAxMDIxNjgxMjgwMDAwMDAwOEY2Ci06MTAyQzEwMDAwMjE2ODEyQzAwMDAwMDA2MDIxNjgxMzAwMDAwMDAwNzE5Ci06MTAyQzIwMDAwMjE2ODEzNDAwMDAwMDAwMDIxNjg4MzAwMTAxMDEyMEU0Ci06MTAyQzMwMDAwNjE2ODEzODAwMDAwMDA0MDIxNjg4MzQwMTAxMDEwMUUzCi06MTAyQzQwMDAwNjE2ODE0ODAwMDAwMDA0MDIxNjg4MzgwMTAxMDEwMUJGCi06MTAyQzUwMDAwNjE2ODE1ODAwMDAwMDA0MDIxNjg4M0MwMTAxMDEwMTlCCi06MTAyQzYwMDAwNjE2ODE2ODAwMDAwMDAzMDIxNjgxNzQwMDAwMDAwMTRFCi06MTAyQzcwMDAwMjE2ODg0MDAxMDEwMTAxMDIxNjgxNzgwMDAwMDAwMTVFCi06MTAyQzgwMDAwMjE2ODE3QzAwMDAwMDAxMDIxNjgxODAwMDAwMDAwMTE0Ci06MTAyQzkwMDAwMjE2ODE4NDAwMDAwMDAxMDIxNjg4NDQwMTAxMDEwMTJFCi06MTAyQ0EwMDAwMjE2ODE4ODAwMDAwMDAxMDIxNjgxOEMwMDAwMDAwNEQ5Ci06MTAyQ0IwMDAwMjE2ODE5MDAwMDAwMDA0MDIxNjgxOTQwMDAwMDAwMkI4Ci06MTAyQ0MwMDAwMjE2ODg0ODA4MDEyMDA0MDIxNjgxOTgwMDAwMDAwNUI5Ci06MTAyQ0QwMDAwMjE2ODE5QzAwMDAwMDA1MDIxNjgxQTAwMDAwMDAwNTdDCi06MTAyQ0UwMDAwMjE2ODFBNDAwMDAwMDA1MDIxNjg4MTQyMDA4MTAwMUI1Ci06MTAyQ0YwMDAwMjE2ODFBODAwMDAwMDA4MDIxNjgxQUMwMDAwMDAwNjQwCi06MTAyRDAwMDAwMjE2ODFCMDAwMDAwMDA3MDIxNjgxQjQwMDAwMDAwMTI1Ci06MTAyRDEwMDAwMjE2ODgxODAxMDEwMTIwMDIxNjgxQjgwMDAwMDAwMTg2Ci06MTAyRDIwMDAwMjE2ODFCQzAwMDAwMDAxMDIxNjgxQzAwMDAwMDAwMUYzCi06MTAyRDMwMDAwMjE2ODFDNDAwMDAwMDAxMDIxNjg4MUMwMTAxMDEwMTc1Ci06MTAyRDQwMDAwMjE2ODFDODAwMDAwMDAxMDIxNjgxQ0MwMDAwMDAwMUJCCi06MTAyRDUwMDAwMjE2ODFEMDAwMDAwMDAxMDIxNjgxRDQwMDAwMDAwMTlCCi06MTAyRDYwMDAwMjE2ODgyMDAxMDEwMTAxMDIxNjgxRDgwMDAwMDAwMTJECi06MTAyRDcwMDAwMjE2ODFEQzAwMDAwMDAxMDIxNjgxRTAwMDAwMDAwMTYzCi06MTAyRDgwMDAwMjE2ODFFNDAwMDAwMDAxMDIxNjg4MjQwMTAxMDEwMUZECi06MTAyRDkwMDAwMjE2ODFFODAwMDAwMDAxMDIxNjgxRUMwMDAwMDAwMTJCCi06MTAyREEwMDAwMjE2ODFGMDAwMDAwMDAxMDIxNjg4MjgwMTAxMDEwMUNECi06MTAyREIwMDAwMjE2ODI0MEZGRkYwMDNGMDYxNjgyNDQwMDAwMDAwMjE4Ci06MTAyREMwMDAwMjE2ODI0Q0ZGRkYwMDNGMDIxNjgyNTAwMDAwMDEwMEY1Ci06MTAyREQwMDAwMjE2ODI1NDAwMDAwMTAwMDYxNjgyNTgwMDAwMDAwMjBDCi06MTAyREUwMDAwMjE2ODI2MDAwMDAwMEMwMDIxNjgyNjQwMDAwMDBDMDZCCi06MTAyREYwMDAwMjE2ODI2ODAwMDAxRTAwMDIxNjgyNkMwMDAwMUUwMDhGCi06MTAyRTAwMDAwMjE2ODI3MDAwMDA0MDAwMDIxNjgyNzQwMDAwNDAwMDJBCi06MTAyRTEwMDAwMjE2ODI3ODAwMDA4MDAwMDIxNjgyN0MwMDAwODAwMDhBCi06MTAyRTIwMDAwMjE2ODI4MDAwMDAyMDAwMDIxNjgyODQwMDAwMjAwMDJBCi06MTAyRTMwMDAwNjE2ODI4ODAwMDAwMDA3MDIxNjgyQTQwMDAwMDAwMTI2Ci06MTAyRTQwMDAwNjE2ODJBODAwMDAwMDBBMDIxNjgxRjQwMDAwMEMwODkxCi06MTAyRTUwMDAwMjE2ODFGODAwMDAwMDQwMDIxNjgxRkMwMDAwMDEwMDBCCi06MTAyRTYwMDAwMjE2ODIwMDAwMDAwMDIwMDIxNjgyMDQwMDAwMDAxN0YzCi06MTAyRTcwMDAwMjE2ODIwODAwMDAwMDgwMDIxNjgyMEMwMDAwMDIwMDg4Ci06MTAyRTgwMDAwMjE2ODIxMDAwMDAwMDAwMDIxNjgyMThGRkZGMDFGRkU4Ci06MTAyRTkwMDAwMjE2ODIxNEZGRkYwMUZGMDIxNjgyM0MwMDAwMDAxMzlECi06MTAyRUEwMDAwMjE2ODA5MDAwMDAwMTNGMDIxNjgwNjAwMDAwMDE0MDgxCi06MTAyRUIwMDAwMjE2ODA2NDAwMDAwMTQwMDYxNjgwNjgwMDAwMDAwMkNGCi06MTAyRUMwMDAwMjE2ODA3MDAwMDAwMEMwMDYxNjgwNzQwMDAwMDAwNzIzCi06MTAyRUQwMDAwMjE2ODA5QzAwMDAwMDQ4MDIxNjgwQTAwMDAwMDA0OEY2Ci06MTAyRUUwMDAwNjE2ODBBNDAwMDAwMDAyMDIxNjgwQUMwMDAwMDA0ODE0Ci06MTAyRUYwMDAwNjE2ODBCMDAwMDAwMDA3MDIxNjgyMzgwMDAwODAwMDJECi06MTAyRjAwMDAwMjE2ODIzNDAwMDAyNUU0MDIxNjgwOTQwMDAwN0ZGRjQwCi06MTAyRjEwMDAwMjE2ODIyMDAwMDAwMDA3MDIxNjgyMUMwMDAwMDAwNzMzCi06MTAyRjIwMDAwMjE2ODIyODAwMDAwMDAwMDIxNjgyMjRGRkZGRkZGRjI1Ci06MTAyRjMwMDAwMjE2ODIzMDAwMDAwMDAwMDIxNjgyMkNGRkZGRkZGRjA1Ci06MTAyRjQwMDAwMjE2ODBFQzAwMDAwMEZGMDIxNDAwMDAwMDAwMDAwMUU3Ci06MTAyRjUwMDAwMjE0MDAwQzAwMDAwMDAxMDIxNDAwNDAwMDAwMDAwMUY3Ci06MTAyRjYwMDAwMjE0MDA0NDAwMDA3RkZGMDIxNDAwMEMwMDAwMDAwMDY3Ci06MTAyRjcwMDAwMjE0MDAwMDAwMDAwMDAwMDIxNDAwNkMwMDAwMDAwMEI5Ci06MTAyRjgwMDAwMjE0MDAwNDAwMDAwMDAxMDIxNDAwMzAwMDAwMDAwMURGCi06MTAyRjkwMDAwMjE0MDAwNDAwMDAwMDAwMDIxNDAwNUMwMDAwMDAwMEE1Ci06MTAyRkEwMDAwMjE0MDAwODAwMDAwMDAxMDIxNDAwMzQwMDAwMDAwMUI3Ci06MTAyRkIwMDAwMjE0MDAwODAwMDAwMDAwMDIxNDAwNjAwMDAwMDAwMDdECi06MTAyRkMwMDAwNjAyODAwMDAwMDAyMDAwMDIwMjAwNTgwMDAwMDAzMkNCCi06MTAyRkQwMDAwMjAyMDBBMDAzMTUwMDIwMDIwMjAwQTQwMzE1MDAyMDM1Ci06MTAyRkUwMDAwMjAyMDBBODAxMDAwMDMwMDIwMjAwQUMwODEwMDAwMDNDCi06MTAyRkYwMDAwMjAyMDBCMDAwMDAwMDMzMDIwMjAwQjQwMDAwMDAzMDAyCi06MTAzMDAwMDAwMjAyMDBCODAwMDAwMDMxMDIwMjAwQkMwMDAwMDAwMzEwCi06MTAzMDEwMDAwMjAyMDBDMDAwMDAwMDA2MDIwMjAwQzQwMDAwMDAwMzFCCi06MTAzMDIwMDAwMjAyMDBDODAwMDAwMDAzMDIwMjAwQ0MwMDAwMDAwMkZGCi06MTAzMDMwMDAwMjAyMDBEMDAwMDAwMDAwMDIwMjAwRDQwMDAwMDAwMkUyCi06MTAzMDQwMDAwMjAyMDBEQzAwMDAwMDAwMDIwMjAwRTAwMDAwMDAwNkI2Ci06MTAzMDUwMDAwMjAyMDBFNDAwMDAwMDA0MDIwMjAwRTgwMDAwMDAwMjk2Ci06MTAzMDYwMDAwMjAyMDBFQzAwMDAwMDAyMDIwMjAwRjAwMDAwMDAwMTc5Ci06MTAzMDcwMDAwMjAyMDBGQzAwMDAwMDA2MDIwMjAxMjAwMDAwMDAwMDI1Ci06MTAzMDgwMDAwMjAyMDEzNDAwMDAwMDAyMDIwMjAxQjAwMDAwMDAwMTRGCi06MTAzMDkwMDAwMjAyMDIwQzAwMDAwMDAxMDIwMjAyMTQwMDAwMDAwMTAyCi06MTAzMEEwMDAwMjAyMDIxODAwMDAwMDAyMDIwMjA0MDQwMDAwMDAwMUYzCi06MTAzMEIwMDAwMjAyMDQwQzAwMDAwMDQwMDIwMjA0MTAwMDAwMDA0MDY0Ci06MTAzMEMwMDAwMjAyMDQxQzAwMDAwMDA0MDIwMjA0MjAwMDAwMDAyMDkwCi06MTAzMEQwMDAwMjAyMDQyNDAwMDAwMDAyMDIwMjA0MjgwMDAwMDAxRjczCi06MTAzMEUwMDAwNjAyMDUwMDAwMDAwMDEyMDQwMjA0ODAwMDIwMDQzNERGCi06MTAzMEYwMDAwMjAyMDA2MDAwMDAwMDBGMDIwMjAwNjQwMDAwMDAwN0VFCi06MTAzMTAwMDAwMjAyMDA2ODAwMDAwMDAwMDIwMjAwNkMwMDAwMDAwRUQ1Ci06MTAzMTEwMDAwNjAyMDA3MDAwMDAwMDA0MDIwMjAwRjQwMDAwMDAwNDM3Ci06MTAzMTIwMDAwMjAyMDAwNDAwMDAwMDAxMDIwMjAwMDgwMDAwMDAwMTg5Ci06MTAzMTMwMDAwMjAyMDAwQzAwMDAwMDAxMDIwMjAwMTAwMDAwMDAwMTY5Ci06MTAzMTQwMDAwMjAyMDAxNDAwMDAwMDAxMDIwMjAwMTgwMDAwMDAwMTQ5Ci06MTAzMTUwMDAwMjAyMDAxQzAwMDAwMDAxMDIwMjAwMjAwMDAwMDAwMTI5Ci06MTAzMTYwMDAwMjAyMDAyNDAwMDAwMDAxMDIwMjAwMjgwMDAwMDAwMTA5Ci06MTAzMTcwMDAwMjAyMDAyQzAwMDAwMDAxMDIwMjAwMzAwMDAwMDAwMUU5Ci06MTAzMTgwMDAwMjAyMDAzNDAwMDAwMDAxMDIwMjAwMzgwMDAwMDAwMUM5Ci06MTAzMTkwMDAwMjAyMDAzQzAwMDAwMDAxMDIwMjAwNDAwMDAwMDAwMUE5Ci06MTAzMUEwMDAwMjAyMDA0NDAwMDAwMDAxMDIwMjAwNDgwMDAwMDAwMTg5Ci06MTAzMUIwMDAwMjAyMDA0QzAwMDAwMDAxMDIwMjAwNTAwMDAwMDAwMTY5Ci06MTAzMUMwMDAwMjAyMDEwODAwMDAwMEM4MDIwMjAxMTgwMDAwMDAwMjBCCi06MTAzMUQwMDAwMjAyMDFDNDAwMDAwMDAwMDIwMjAxQ0MwMDAwMDAwMDU1Ci06MTAzMUUwMDAwMjAyMDFENDAwMDAwMDAyMDIwMjAxREMwMDAwMDAwMjIxCi06MTAzMUYwMDAwMjAyMDFFNDAwMDAwMEZGMDIwMjAxRUMwMDAwMDBGRkY3Ci06MTAzMjAwMDAwMjAyMDEwQzAwMDAwMEM4MDIwMjAxMUMwMDAwMDAwMkMyCi06MTAzMjEwMDAwMjAyMDFDODAwMDAwMDAwMDIwMjAxRDAwMDAwMDAwMDBDCi06MTAzMjIwMDAwMjAyMDFEODAwMDAwMDAyMDIwMjAxRTAwMDAwMDAwMkQ4Ci06MTAzMjMwMDAwMjAyMDFFODAwMDAwMEZGMDIwMjAxRjAwMDAwMDBGRkFFCi06MTAzMjQwMDAwNzI4MDQwMDAwOEQwMDAwMDgyODA3NjgwMDEzMDQ1NEI0Ci06MTAzMjUwMDAwNzJDMDAwMDM0MDkwMDAwMDcyQzgwMDAzODk5MEQwMzZBCi06MTAzMjYwMDAwNzJEMDAwMDM5MEMxQjJBMDcyRDgwMDAwNjQxMjk2RTBFCi06MTAzMjcwMDAwODJEOEFCMDRFQUEwNDU2MDEyODAwMDAwMDAwMDAwMDY0Ci06MTAzMjgwMDAwMTI4MDAwNDAwMDAwMDAwMDEyODAwMDgwMDAwMDAwMEUwCi06MTAzMjkwMDAwMTI4MDAwQzAwMDAwMDAwMDEyODAwMTAwMDAwMDAwMEMwCi06MTAzMkEwMDAwMTI4MDAxNDAwMDAwMDAwMDIyODAwMjAwMDAwMDAwMTk2Ci06MTAzMkIwMDAwMjI4MDAyNDAwMDAwMDAyMDIyODAwMjgwMDAwMDAwMzY5Ci06MTAzMkMwMDAwMjI4MDAyQzAwMDAwMDAwMDIyODAwMzAwMDAwMDAwNDRBCi06MTAzMkQwMDAwMjI4MDAzNDAwMDAwMDAxMDIyODAwMzgwMDAwMDAwMDJECi06MTAzMkUwMDAwMjI4MDAzQzAwMDAwMDAxMDIyODAwNDAwMDAwMDAwNDA5Ci06MTAzMkYwMDAwMjI4MDA0NDAwMDAwMDAwMDIyODAwNDgwMDAwMDAwMUVECi06MTAzMzAwMDAwMjI4MDA0QzAwMDAwMDAzMDIyODAwNTAwMDAwMDAwMENBCi06MTAzMzEwMDAwMjI4MDA1NDAwMDAwMDAxMDIyODAwNTgwMDAwMDAwNEE4Ci06MTAzMzIwMDAwMjI4MDA1QzAwMDAwMDAwMDIyODAwNjAwMDAwMDAwMThDCi06MTAzMzMwMDAwMjI4MDA2NDAwMDAwMDAzMDIyODAwNjgwMDAwMDAwMDZBCi06MTAzMzQwMDAwMjI4MDA2QzAwMDAwMDAxMDIyODAwNzAwMDAwMDAwNDQ4Ci06MTAzMzUwMDAwMjI4MDA3NDAwMDAwMDAwMDIyODAwNzgwMDAwMDAwNDI5Ci06MTAzMzYwMDAwMjI4MDA3QzAwMDAwMDAzMDYyODAwODAwMDAwMDAwMjA0Ci06MTAzMzcwMDAwMjI4MDBBNDAwMDAzRkZGMDIyODAwQTgwMDAwMDNGRjZECi06MTAzMzgwMDAwMjI4MDIyNDAwMDAwMDAwMDIyODAyMzQwMDAwMDAwMDhECi06MTAzMzkwMDAwMjI4MDI0QzAwMDAwMDAwMDIyODAyRTQwMDAwRkZGRkE3Ci06MTAzM0EwMDAwNjI4MjAwMDAwMDAwODAwMDIyQjhCQzAwMDAwMDAwMTRFCi06MTAzM0IwMDAwMjJCODAwMDAwMDAwMDAwMDIyQjgwNDAwMDAwMDAxODVCCi06MTAzM0MwMDAwMjJCODA4MDAwMDAwMDBDMDIyQjgwQzAwMDAwMDA2NkYxCi06MTAzM0QwMDAwQzJCODMwMDAwMDdBMTIwMEEyQjgzMDAwMDAwMDEzODdBCi06MTAzM0UwMDAwQjJCODMwMDAwMDAxMzg4MEEyQjgzNDAwMDAwMDAwMDkxCi06MTAzM0YwMDAwQzJCODM0MDAwMDAwMUY0MEIyQjgzNDAwMDAwMDAwNUUwCi06MTAzNDAwMDAwMjJCODM4MDAwMDdBMTIwMDIyQjgzQzAwMDAwMDFGNDVGCi06MTAzNDEwMDAwNjJBM0Q0ODAwMDAwMDA0MDQyQTNENTgwMDAyMDQ1OEQyCi06MTAzNDIwMDAwNjJBM0Q2MDAwMDAwMDA2MDYyQTMwMDAwMDAwMDA0ODIxCi06MTAzNDMwMDAwNjJBMjAwODAwMDAwMEM4MDYyQTIwMDAwMDAwMDAwMjFBCi06MTAzNDQwMDAwNjJBMzEyODAwMDAwMDhFMDYyQTMzNjgwMDAwMDAwMzk3Ci06MTAzNDUwMDAwNDJBMzM3NDAwMDEwNDVBMDYyQTNBNzgwMDAwMDAwMjU0Ci06MTAzNDYwMDAwNDJBM0E4MDAwMDIwNDVCMDQyQTNBNzAwMDAyMDQ1REQ4Ci06MTAzNDcwMDAwNDJBM0UyODAwMDIwNDVGMDQyQTNFQjAwMDA0MDQ2MUNFCi06MTAzNDgwMDAwNDJBMjUwMDAwMDIwNDY1MDYyQTI1MDgwMDAwMDEwMDIwCi06MTAzNDkwMDAwNjJBMjk3MDAwMDAwMDA0MDQyQTI5NjAwMDA0MDQ2NzM5Ci06MTAzNEEwMDAwNDJBMkY0ODAwMDIwNDZCMDYyQTMzNzgwMDAwMDBEODUzCi06MTAzNEIwMDAwMjJBM0EzODAwMDAwMDAwMDYyQTNBODgwMDAwMDAzMjRBCi06MTAzNEMwMDAwNDJBM0Q4ODAwMTAwNDZEMDYyQTUwMjAwMDAwMDAwMkU2Ci06MTAzNEQwMDAwNjJBNTAzMDAwMDAwMDAyMDYyQTUwMDAwMDAwMDAwMkI4Ci06MTAzNEUwMDAwNjJBNTAxMDAwMDAwMDAyMDIyQTUwQjgwMDAwMDAwMTE1Ci06MTAzNEYwMDAwNjJBNTA0ODAwMDAwMDBFMDQyQTNENzgwMDAyMDQ3RDkwCi06MTAzNTAwMDAwNjJBM0MxODAwMDAwMDI2MDIyQTUwNDAwMDAwMDAwMDU1Ci06MTAzNTEwMDAwNjJBMzZEODAwMDAwMEQ4MDIyQTNBM0MwMDAwMDAwMEYzCi06MTAzNTIwMDAwNjJBM0I1MDAwMDAwMDMyMDQyQTNEQzgwMDEwMDQ3RkU4Ci06MTAzNTMwMDAwNjJBNTAyODAwMDAwMDAyMDYyQTUwMzgwMDAwMDAwMjI3Ci06MTAzNTQwMDAwNjJBNTAwODAwMDAwMDAyMDYyQTUwMTgwMDAwMDAwMjU3Ci06MTAzNTUwMDAwMjJBNTBCQzAwMDAwMDAxMDYyQTUwODAwMDAwMDAwRTI0Ci06MTAzNTYwMDAwNDJBM0Q4MDAwMDIwNDhGMDYyQTNDQjAwMDAwMDAyNjk5Ci06MTAzNTcwMDAwMjJBNTA0NDAwMDAwMDAwMDIxMDEwMDgwMDAwMDAwMTYwCi06MTAzNTgwMDAwMjEwMTAxMDAwMDAwMjY0MDIxMDEwMDAwMDAzRDAwMEFFCi06MTAzNTkwMDAwMjEwMTAwNDAwMDAwMDNEMDkxMDE4MDAwMjAwMDQ5MTAwCi06MTAzNUEwMDAwOTEwMTEwMDAwMTAwNjkxMDYxMDExNDAwMDAwMDAwOERCCi06MTAzNUIwMDAwOTEwMTE2MDAwMDgwNkExMDYxMDExODAwMDAwMDAwMjI5Ci06MTAzNUMwMDAwOTEwMTE4ODAwMDYwNkE5MDYxMDExQTAwMDAwMDAxOEI1Ci06MTAzNUQwMDAwMjEwMTAxMDAwMDAwMDAwMDYxMDI0MDAwMDAwMDBFMDlGCi06MTAzNUUwMDAwMjEwMjAxQzAwMDAwMDAwMDIxMDIwMjAwMDAwMDAwMTNBCi06MTAzNUYwMDAwMjEwMjBDMDAwMDAwMDAxMDIxMDIwMDQwMDAwMDAwMUExCi06MTAzNjAwMDAwMjEwMjAwODAwMDAwMDAxMDkxMDNDMDAwMDA1MDZBRjcwCi06MTAzNjEwMDAwOTEwM0MyMDAwMDUwNkI0MDkxMDM4MDAwMDA1MDZCOTYxCi06MTAzNjIwMDAwMjEwNDAyODAwMDAwMDEwMDIxMDQwNDQwMDAwM0ZGRjNDCi06MTAzNjMwMDAwMjEwNDA1ODAwMjgwMDAwMDIxMDQwODQwMDg0OTI0QTgyCi06MTAzNjQwMDAwNjEwNEMwMDAwMDAwMTAwMDIxMDQwNTgwMDAwMDAwMDZECi06MTAzNjUwMDAwNjEwODA2ODAwMDAwMDA0MDIxMDgwMDAwMDAwMTA4MDQ2Ci06MTAzNjYwMDAwNjEwODAyODAwMDAwMDAyMDIxMDgwMzgwMDAwMDAxMEMwCi06MTAzNjcwMDAwMjEwODA0MDAwMDBGRkZGMDIxMDgwNDQwMDAwRkZGRkE2Ci06MTAzNjgwMDAwMjEwODA1MDAwMDAwMDAwMDIxMDgxMDAwMDAwMDAwMEM1Ci06MTAzNjkwMDAwNjEwODEyMDAwMDAwMDAyMDIxMDgwMDgwMDAwMDJCNTIwCi06MTAzNkEwMDAwMjEwODAxMDAwMDAwMDAwMDYxMDgyMDAwMDAwMDA0QTk2Ci06MTAzNkIwMDAwMjEwODEwODAwMDFGRkZGMDYxMDgxNDAwMDAwMDAwMjk3Ci06MTAzNkMwMDAwMjEwODAwMDAwMDAxQTgwMDYxMDkwMDAwMDAwMDAyNDA0Ci06MTAzNkQwMDAwNjEwOTEyMDAwMDAwMDRBMDYxMDkzNzAwMDAwMDA0QTc2Ci06MTAzNkUwMDAwNjEwOTVDMDAwMDAwMDRBMDIxMDgwMDQwMDAwMTA4MEZGCi06MTAzNkYwMDAwNjEwODAzMDAwMDAwMDAyMDIxMDgwM0MwMDAwMDAxMDI0Ci06MTAzNzAwMDAwMjEwODA0ODAwMDBGRkZGMDIxMDgwNEMwMDAwRkZGRjA1Ci06MTAzNzEwMDAwMjEwODA1NDAwMDAwMDAwMDIxMDgxMDQwMDAwMDAwMDJDCi06MTAzNzIwMDAwNjEwODEyODAwMDAwMDAyMDIxMDgwMEMwMDAwMDJCNTgzCi06MTAzNzMwMDAwMjEwODAxNDAwMDAwMDAwMDYxMDg0MDAwMDAwMDA0QUZGCi06MTAzNzQwMDAwMjEwODEwQzAwMDFGRkZGMDYxMDgxNDgwMDAwMDAwMkZBCi06MTAzNzUwMDAwMjEwODAwNDAwMDAxQTgwMDYxMDkwOTAwMDAwMDAyNERGCi06MTAzNzYwMDAwNjEwOTI0ODAwMDAwMDRBMDYxMDk0OTgwMDAwMDA0QTkzCi06MTAzNzcwMDAwNjEwOTZFODAwMDAwMDRBMDIxMjA0OTAwMEUzODM0MDFECi06MTAzNzgwMDAwMjEyMDUxNDAwMDAzQzEwMDIxMjA1MjAwMDAwMDAwMjg1Ci06MTAzNzkwMDAwMjEyMDQ5NEZGRkZGRkZGMDIxMjA0OThGRkZGRkZGRkQ1Ci06MTAzN0EwMDAwMjEyMDQ5Q0ZGRkZGRkZGMDIxMjA0QTBGRkZGRkZGRkI1Ci06MTAzN0IwMDAwMjEyMDRBNEZGRkZGRkZGMDIxMjA0QThGRkZGRkZGRjk1Ci06MTAzN0MwMDAwMjEyMDRBQ0ZGRkZGRkZGMDIxMjA0QjBGRkZGRkZGRjc1Ci06MTAzN0QwMDAwMjEyMDRCOEZGRkZGRkZGMDIxMjA0QkNGRkZGRkZGRjRECi06MTAzN0UwMDAwMjEyMDRDMEZGRkZGRkZGMDIxMjA0QzRGRkZGRkZGRjJECi06MTAzN0YwMDAwMjEyMDRDOEZGRkZGRkZGMDIxMjA0Q0NGRkZGRkZGRjBECi06MTAzODAwMDAwMjEyMDREMEZGRkZGRkZGMDIxMjA0RENGRkZGRkZGRkU0Ci06MTAzODEwMDAwMjEyMDRFMEZGRkZGRkZGMDIxMjA0RTRGRkZGRkZGRkJDCi06MTAzODIwMDAwMjEyMDRFOEZGRkZGRkZGMDIxMjA0RUNGRkZGRkZGRjlDCi06MTAzODMwMDAwMjEyMDRGMEZGRkZGRkZGMDIxMjA0RjRGRkZGRkZGRjdDCi06MTAzODQwMDAwMjEyMDRGOEZGRkZGRkZGMDIxMjA0RkNGRkZGRkZGRjVDCi06MTAzODUwMDAwMjEyMDUwMEZGRkZGRkZGMDIxMjA1MDRGRkZGRkZGRjNBCi06MTAzODYwMDAwMjEyMDUwOEZGRkZGRkZGMDIxMjA1MENGRkZGRkZGRjFBCi06MTAzODcwMDAwMjEyMDUxMEZGRkZGRkZGMDIxMjA0RDRGRkZGMzMzMEQ2Ci06MTAzODgwMDAwMjEyMDREOEZGRkYzMzQwMDIxMjA0QjRGMDAwMzAwMEVCCi06MTAzODkwMDAwMjEyMDM5MDAwMDAwMDA4MDIxMjAzOUMwMDAwMDAwOEJFCi06MTAzOEEwMDAwNjEyMDNBMDAwMDAwMDAyMDIxMjAzQkMwMDAwMDAwNDg0Ci06MTAzOEIwMDAwMjEyMDNDNDAwMDAwMDA0MDIxMjAzRDAwMDAwMDAwMDQyCi06MTAzOEMwMDAwMjEyMDNEQzAwMDAwMDAwMDIxMjAzNkMwMDAwMDAwMTgxCi06MTAzOEQwMDAwMjEyMDM2ODAwMDAwMDNGMDIxMjAxQkMwMDAwMDA0MDE5Ci06MTAzOEUwMDAwMjEyMDFDMDAwMDAxODA4MDIxMjAxQzQwMDAwMDgwM0ZGCi06MTAzOEYwMDAwMjEyMDFDODAwMDAwODAzMDIxMjAxQ0MwMDAwMDA0MEJGCi06MTAzOTAwMDAwMjEyMDFEMDAwMDAwMDAzMDIxMjAxRDQwMDAwMDgwM0RCCi06MTAzOTEwMDAwMjEyMDFEODAwMDAwODAzMDIxMjAxREMwMDAwMDgwM0IzCi06MTAzOTIwMDAwMjEyMDFFMDAwMDEwMDAzMDIxMjAxRTQwMDAwMDgwMzlBCi06MTAzOTMwMDAwMjEyMDFFODAwMDAwODAzMDIxMjAxRUMwMDAwMDAwMzdCCi06MTAzOTQwMDAwMjEyMDFGMDAwMDAwMDAzMDIxMjAxRjQwMDAwMDAwMzYzCi06MTAzOTUwMDAwMjEyMDFGODAwMDAwMDAzMDIxMjAxRkMwMDAwMDAwMzQzCi06MTAzOTYwMDAwMjEyMDIwMDAwMDAwMDAzMDIxMjAyMDQwMDAwMDAwMzIxCi06MTAzOTcwMDAwMjEyMDIwODAwMDAwMDAzMDIxMjAyMEMwMDAwMDAwMzAxCi06MTAzOTgwMDAwMjEyMDIxMDAwMDAwMDAzMDIxMjAyMTQwMDAwMDAwM0UxCi06MTAzOTkwMDAwMjEyMDIxODAwMDAwMDAzMDIxMjAyMUMwMDAwMDAwM0MxCi06MTAzOUEwMDAwMjEyMDIyMDAwMDAwMDAzMDIxMjAyMjQwMDAwMDAwM0ExCi06MTAzOUIwMDAwMjEyMDIyODAwMDAyNDAzMDIxMjAyMkMwMDAwMDAyRjMxCi06MTAzOUMwMDAwMjEyMDIzMDAwMDAwMDA5MDIxMjAyMzQwMDAwMDAxOTQ1Ci06MTAzOUQwMDAwMjEyMDIzODAwMDAwMTg0MDIxMjAyM0MwMDAwMDE4MzNFCi06MTAzOUUwMDAwMjEyMDI0MDAwMDAwMzA2MDIxMjAyNDQwMDAwMDAxOTA1Ci06MTAzOUYwMDAwMjEyMDI0ODAwMDAwMDA2MDIxMjAyNEMwMDAwMDMwNkY4Ci06MTAzQTAwMDAwMjEyMDI1MDAwMDAwMzA2MDIxMjAyNTQwMDAwMDMwNkQ0Ci06MTAzQTEwMDAwMjEyMDI1ODAwMDAwQzg2MDIxMjAyNUMwMDAwMDMwNjJCCi06MTAzQTIwMDAwMjEyMDI2MDAwMDAwMzA2MDIxMjAyNjQwMDAwMDAwNjk3Ci06MTAzQTMwMDAwMjEyMDI2ODAwMDAwMDA2MDIxMjAyNkMwMDAwMDAwNjdBCi06MTAzQTQwMDAwMjEyMDI3MDAwMDAwMDA2MDIxMjAyNzQwMDAwMDAwNjVBCi06MTAzQTUwMDAwMjEyMDI3ODAwMDAwMDA2MDIxMjAyN0MwMDAwMDAwNjNBCi06MTAzQTYwMDAwMjEyMDI4MDAwMDAwMDA2MDIxMjAyODQwMDAwMDAwNjFBCi06MTAzQTcwMDAwMjEyMDI4ODAwMDAwMDA2MDIxMjAyOEMwMDAwMDAwNkZBCi06MTAzQTgwMDAwMjEyMDI5MDAwMDAwMDA2MDIxMjAyOTQwMDAwMDAwNkRBCi06MTAzQTkwMDAwMjEyMDI5ODAwMDAwMDA2MDIxMjAyOUMwMDAwMDAwNkJBCi06MTAzQUEwMDAwMjEyMDJBMDAwMDAwMzA2MDIxMjAyQTQwMDAwMDAxMzhBCi06MTAzQUIwMDAwMjEyMDJBODAwMDAwMDA2MDIxMjAyQjAwMDAwMTAwNDY4Ci06MTAzQUMwMDAwMjEyMDJCNDAwMDAxMDA0MDIxMjAzMjQwMDEwNjQ0MDI5Ci06MTAzQUQwMDAwMjEyMDMyODAwMTA2NDQwMDIxMjAxQjAwMDAwMDAwMTJECi06MTAzQUUwMDAwNjAwQTAwMDAwMDAwMDE2MDIwMEEwNkNCRjVDMDAwMEYxCi06MTAzQUYwMDAwMjAwQTA3MEZGRjUxRkVGMDIwMEEwNzQwMDAwRkZGRjlFCi06MTAzQjAwMDAwMjAwQTA3OEYwMDAwM0UwMDIwMEEwN0MwMDAwMDAwMEFBCi06MTAzQjEwMDAwMjAwQTA4MDAwMDBBMDAwMDYwMEEwODQwMDAwMDAwNUI0Ci06MTAzQjIwMDAwMjAwQTA5ODBGRTAwMDAwMDYwMEEwOUMwMDAwMDAxNDE2Ci06MTAzQjMwMDAwMjAwQTBFQzU1NTQwMDAwMDIwMEEwRjA1NTU1NTU1NTY4Ci06MTAzQjQwMDAwMjAwQTBGNDAwMDA1NTU1MDIwMEEwRjhGMDAwMDAwMEFCCi06MTAzQjUwMDAwMjAwQTBGQzU1NTQwMDAwMDIwMEExMDA1NTU1NTU1NTI3Ci06MTAzQjYwMDAwMjAwQTEwNDAwMDA1NTU1MDIwMEExMDhGMDAwMDAwMDY5Ci06MTAzQjcwMDAwNjAwQTIyQzAwMDAwMDA0MDIwMEEwNjAwMDAwMDMwNzYxCi06MTAzQjgwMDAwMjAwQTEwQ0JGNUMwMDAwMDIwMEExMTBGRkY1MUZFRkI2Ci06MTAzQjkwMDAwMjAwQTExNDAwMDBGRkZGMDIwMEExMThGMDAwMDNFMEUyCi06MTAzQkEwMDAwMjAwQTExQzAwMDAwMDAwMDIwMEExMjAwMDAwQTAwMEYzCi06MTAzQkIwMDAwNjAwQTEyNDAwMDAwMDA1MDIwMEExMzgwRkUwMDAwMDZCCi06MTAzQkMwMDAwNjAwQTEzQzAwMDAwMDE0MDIwMEExOEM1NTU0MDAwMDI2Ci06MTAzQkQwMDAwMjAwQTE5MDU1NTU1NTU1MDIwMEExOTQwMDAwNTU1NTdECi06MTAzQkUwMDAwMjAwQTE5OEYwMDAwMDAwMDIwMEExOUM1NTU0MDAwMEMyCi06MTAzQkYwMDAwMjAwQTFBMDU1NTU1NTU1MDIwMEExQTQwMDAwNTU1NTNECi06MTAzQzAwMDAwMjAwQTFBOEYwMDAwMDAwMDYwMEEyM0MwMDAwMDAwNDkxCi06MTAzQzEwMDAwMjAwQTA2NDAwMDAwMzA3MDAwMDAwMDAwMDAwMDAwMDk0Ci06MTAzQzIwMDAwMDAwMDAyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Ci06MTAzQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0Ci06MTAzQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Ci06MTAzQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Ci06MTAzQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0Ci06MTAzQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRTAwNEQwMDAwMDAwMEM5Ci06MTAzQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Ci06MTAzQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Ci06MTAzQ0EwMDAwMDAwMDAwMDAwNEQwMDhCMDAwMDAwMDAwMDAwMDAwMDNDCi06MTAzQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Ci06MTAzQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Ci06MTAzQ0QwMDAwMDhCMDA5MDAwOTAwMDk0MDA5NDAwOTgwMDAwMDAwMDc5Ci06MTAzQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Ci06MTAzQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4MDJERTRDCi06MTAzRDAwMDAwMkRFMDJFODAyRTgwMkYyMDAwMDAwMDAwMDAwMDAwMDBCCi06MTAzRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCi06MTAzRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzCi06MTAzRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCi06MTAzRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczCi06MTAzRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzCi06MTAzRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzCi06MTAzRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzCi06MTAzRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzCi06MTAzRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzCi06MTAzREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCi06MTAzREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCi06MTAzREMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYzCi06MTAzREQwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMjAyRkEwMDAwMDAwMEYzCi06MTAzREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCi06MTAzREYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCi06MTAzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCi06MTAzRTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCi06MTAzRTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCi06MTAzRTMwMDAwMkZBMDJGRjAyRkYwMzBBMDMwQTAzMTUwMDAwMDAwMDUyCi06MTAzRTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyCi06MTAzRTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCi06MTAzRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCi06MTAzRTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCi06MTAzRTgwMDAwMDAwMDAwMDAwMDAwMDAwMDMxNTAzMTYwMDAwMDAwMDAxCi06MTAzRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCi06MTAzRUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCi06MTAzRUIwMDAwMDAwMDAwMDAzMTYwMzU3MDAwMDAwMDAwMDAwMDAwMDhGCi06MTAzRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCi06MTAzRUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCi06MTAzRUUwMDAwMzU3MDM3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCi06MTAzRUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCi06MTAzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzdCMDNCQjc1Ci06MTAzRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCi06MTAzRjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCi06MTAzRjMwMDAwMDAwMDAwMDAwMDAwMDAwMDNCQjAzRjcwMDAwMDAwMEM5Ci06MTAzRjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCi06MTAzRjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCi06MTAzRjYwMDAwMDAwMDAwMDAzRjcwNDNEMDQzRDA0NTIwNDUyMDQ2N0JFCi06MTAzRjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCi06MTAzRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCi06MTAzRjkwMDAwNDY3MDRFRDA0RUQwNEYyMDRGMjA0RjcwMDAwMDAwMEVECi06MTAzRkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCi06MTAzRkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEY3MDRGODBBCi06MTAzRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCi06MTAzRkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCi06MTAzRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDRGODA1MEEwMDAwMDAwMEM2Ci06MTAzRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCi06MTA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCi06MTA0MDEwMDAwMDAwMDAwMDA1MEEwNTFGMDUxRjA1MjIwNTIyMDUyNUQxCi06MTA0MDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCi06MTA0MDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCi06MTA0MDQwMDAwNTI1MDU1NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCi06MTA0MDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCi06MTA0MDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTU1MDVEQzE1Ci06MTA0MDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCi06MTA0MDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCi06MTA0MDkwMDAwMDAwMDAwMDAwMDAwMDAwMDVEQzA1RTMwNUUzMDVFNzgzCi06MTA0MEEwMDAwNUU3MDVFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Ci06MTA0MEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi06MTA0MEMwMDAwMDAwMDAwMDA1RUIwNjJCMDYyQjA2MzMwNjMzMDYzQkVCCi06MTA0MEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCi06MTA0MEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCi06MTA0MEYwMDAwNjNCMDY4ODA2ODgwNjk1MDY5NTA2QTIwMDAwMDAwMDg1Ci06MTA0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCi06MTA0MTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkEyMDZBRTQzCi06MTA0MTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCi06MTA0MTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCi06MTA0MTQwMDAwMDAwMDAwMDAwMDAwMDAwMDZBRTA2QjQwMDAwMDAwMDAxCi06MTA0MTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCi06MTA0MTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCi06MTA0MTcwMDAwMDAwMDAwMDA2QjQwNkI3MDAwMDAwMDAwMDAwMDAwMEM4Ci06MTA0MTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCi06MTA0MTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCi06MTA0MUEwMDAwNkI3MDZCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCi06MTA0MUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCi06MTA0MUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkJEMDZCRTY4Ci06MTA0MUQwMDAwNkJFMDZEMDA2RDAwNkUyMDAwMDAwMDAwMDAwMDAwMDg3Ci06MTA0MUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCi06MTA0MUYwMDAwMDAwMDAwMDAwMDAwMDAwMDZFMjA3NEYwMDAwMDAwMDgxCi06MTA0MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCi06MTA0MjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCi06MTA0MjIwMDAwMDAwMDAwMDA3NEYwNzUwMDc1MDA3NjMwNzYzMDc3NjM5Ci06MTA0MjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCi06MTA0MjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCi06MTA0MjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCi06MTA0MjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCi06MTA0MjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCi06MTA0MjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCi06MTA0MjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCi06MTA0MkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCi06MTA0MkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCi06MTA0MkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCi06MTA0MkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCi06MTA0MkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCi06MTA0MkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCi06MTA0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECi06MTA0MzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECi06MTA0MzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECi06MTA0MzMwMDAwMDAxMDAwMDAwMDIwNEMwMDAwMzA5ODAwMDA0MEU0MEQ4Ci06MTA0MzQwMDAwMDA1MTMwMDAwMDYxN0MwMDAwNzFDODAwMDA4MjE0MDZDCi06MTA0MzUwMDAwMDA5MjYwMDAwMEEyQUMwMDAwQjJGODAwMDBDMzQ0MDAwCi06MTA0MzYwMDAwMDBEMzkwMDAwMEUzREMwMDAwRjQyODAwMDEwNDc0MDk0Ci06MTA0MzcwMDAwMDExNEMwMDAwMTI1MEMwMDAxMzU1ODAwMDE0NUE0MDI4Ci06MTA0MzgwMDAwMDE1NUYwMDAwMTY2M0MwMDAxNzY4ODAwMDE4NkQ0MEJDCi06MTA0MzkwMDAwMDE5NzIwMDAwMUE3NkMwMDAxQjdCODAwMDFDODA0MDUwCi06MTA0M0EwMDAwMDFEODUwMDAwMUU4OUMwMDAxRjhFODAwMDAwOTM0MDA0Ci06MTA0M0IwMDAwMDAwMjAwMDAwMDA0MDAwMDAwMDYwMDAwMDAwODAwMEJECi06MTA0M0MwMDAwMDAwQTAwMDAwMDBDMDAwMDAwMEUwMDAwMDAxMDAwMEFDCi06MTA0M0QwMDAwMDAxMjAwMDAwMDE0MDAwMDAwMTYwMDAwMDAxODAwMDk5Ci06MTA0M0UwMDAwMDAxQTAwMDAwMDFDMDAwMDAwMUUwMDAwMDAyMDAwMDg4Ci06MTA0M0YwMDAwMDAyMjAwMDAwMDI0MDAwMDAwMjYwMDAwMDAyODAwMDc1Ci06MTA0NDAwMDAwMDAyQTAwMDAwMDJDMDAwMDAwMkUwMDAwMDAzMDAwMDYzCi06MTA0NDEwMDAwMDAzMjAwMDAwMDM0MDAwMDAwMzYwMDAwMDAzODAwMDUwCi06MTA0NDIwMDAwMDAzQTAwMDAwMDNDMDAwMDAwM0UwMDAwMDA0MDAwMDNGCi06MTA0NDMwMDAwMDA0MjAwMDAwMDQ0MDAwMDAwNDYwMDAwMDA0ODAwMDJDCi06MTA0NDQwMDAwMDA0QTAwMDAwMDRDMDAwMDAwNEUwMDAwMDA1MDAwMDFCCi06MTA0NDUwMDAwMDA1MjAwMDAwMDU0MDAwMDAwNTYwMDAwMDA1ODAwMDA4Ci06MTA0NDYwMDAwMDA1QTAwMDAwMDVDMDAwMDAwNUUwMDAwMDA2MDAwMEY3Ci06MTA0NDcwMDAwMDA2MjAwMDAwMDY0MDAwMDAwNjYwMDAwMDA2ODAwMEU0Ci06MTA0NDgwMDAwMDA2QTAwMDAwMDZDMDAwMDAwNkUwMDAwMDA3MDAwMEQzCi06MTA0NDkwMDAwMDA3MjAwMDAwMDc0MDAwMDAwNzYwMDAwMDA3ODAwMEMwCi06MTA0NEEwMDAwMDA3QTAwMDAwMDdDMDAwMDAwN0UwMDAwMDA4MDAwMEFGCi06MTA0NEIwMDAwMDA4MjAwMDAwMDg0MDAwMDAwODYwMDAwMDA4ODAwMDlDCi06MTA0NEMwMDAwMDA4QTAwMDAwMDhDMDAwMDAwOEUwMDAwMDA5MDAwMDhCCi06MTA0NEQwMDAwMDA5MjAwMDAwMDk0MDAwMDAwOTYwMDAwMDA5ODAwMDc4Ci06MTA0NEUwMDAwMDA5QTAwMDAwMDlDMDAwMDAwOUUwMDAwMDBBMDAwMDY3Ci06MTA0NEYwMDAwMDBBMjAwMDAwMEE0MDAwMDAwQTYwMDAwMDBBODAwMDU0Ci06MTA0NTAwMDAwMDBBQTAwMDAwMEFDMDAwMDAwQUUwMDAwMDBCMDAwMDQyCi06MTA0NTEwMDAwMDBCMjAwMDAwMEI0MDAwMDAwQjYwMDAwMDBCODAwMDJGCi06MTA0NTIwMDAwMDBCQTAwMDAwMEJDMDAwMDAwQkUwMDAwMDBDMDAwMDFFCi06MTA0NTMwMDAwMDBDMjAwMDAwMEM0MDAwMDAwQzYwMDAwMDBDODAwMDBCCi06MTA0NTQwMDAwMDBDQTAwMDAwMENDMDAwMDAwQ0UwMDAwMDBEMDAwMEZBCi06MTA0NTUwMDAwMDBEMjAwMDAwMEQ0MDAwMDAwRDYwMDAwMDBEODAwMEU3Ci06MTA0NTYwMDAwMDBEQTAwMDAwMERDMDAwMDAwREUwMDAwMDBFMDAwMEQ2Ci06MTA0NTcwMDAwMDBFMjAwMDAwMEU0MDAwMDAwRTYwMDAwMDBFODAwMEMzCi06MTA0NTgwMDAwMDBFQTAwMDAwMEVDMDAwMDAwRUUwMDAwMDBGMDAwMEIyCi06MTA0NTkwMDAwMDBGMjAwMDAwMEY0MDAwMDAwRjYwMDAwMDBGODAwMDlGCi06MTA0NUEwMDAwMDBGQTAwMDAwMEZDMDAwMDAwRkUwMDAwMDEwMDAwMDhFCi06MTA0NUIwMDAwMDEwMjAwMDAwMTA0MDAwMDAxMDYwMDAwMDEwODAwMDdCCi06MTA0NUMwMDAwMDEwQTAwMDAwMTBDMDAwMDAxMEUwMDAwMDExMDAwMDZBCi06MTA0NUQwMDAwMDExMjAwMDAwMTE0MDAwMDAxMTYwMDAwMDExODAwMDU3Ci06MTA0NUUwMDAwMDExQTAwMDAwMTFDMDAwMDAxMUUwMDAwMDEyMDAwMDQ2Ci06MTA0NUYwMDAwMDEyMjAwMDAwMTI0MDAwMDAxMjYwMDAwMDEyODAwMDMzCi06MTA0NjAwMDAwMDEyQTAwMDAwMTJDMDAwMDAxMkUwMDAwMDEzMDAwMDIxCi06MTA0NjEwMDAwMDEzMjAwMDAwMTM0MDAwMDAxMzYwMDAwMDEzODAwMDBFCi06MTA0NjIwMDAwMDEzQTAwMDAwMTNDMDAwMDAxM0UwMDAwMDE0MDAwMEZECi06MTA0NjMwMDAwMDE0MjAwMDAwMTQ0MDAwMDAxNDYwMDAwMDE0ODAwMEVBCi06MTA0NjQwMDAwMDE0QTAwMDAwMTRDMDAwMDAxNEUwMDAwMDE1MDAwMEQ5Ci06MTA0NjUwMDAwMDE1MjAwMDAwMTU0MDAwMDAxNTYwMDAwMDE1ODAwMEM2Ci06MTA0NjYwMDAwMDE1QTAwMDAwMTVDMDAwMDAxNUUwMDAwMDE2MDAwMEI1Ci06MTA0NjcwMDAwMDE2MjAwMDAwMTY0MDAwMDAxNjYwMDAwMDE2ODAwMEEyCi06MTA0NjgwMDAwMDE2QTAwMDAwMTZDMDAwMDAxNkUwMDAwMDE3MDAwMDkxCi06MTA0NjkwMDAwMDE3MjAwMDAwMTc0MDAwMDAxNzYwMDAwMDE3ODAwMDdFCi06MTA0NkEwMDAwMDE3QTAwMDAwMTdDMDAwMDAxN0UwMDAwMDE4MDAwMDZECi06MTA0NkIwMDAwMDE4MjAwMDAwMTg0MDAwMDAxODYwMDAwMDE4ODAwMDVBCi06MTA0NkMwMDAwMDE4QTAwMDAwMThDMDAwMDAxOEUwMDAwMDE5MDAwMDQ5Ci06MTA0NkQwMDAwMDE5MjAwMDAwMTk0MDAwMDAxOTYwMDAwMDE5ODAwMDM2Ci06MTA0NkUwMDAwMDE5QTAwMDAwMTlDMDAwMDAxOUUwMDAwMDFBMDAwMDI1Ci06MTA0NkYwMDAwMDFBMjAwMDAwMUE0MDAwMDAxQTYwMDAwMDFBODAwMDEyCi06MTA0NzAwMDAwMDFBQTAwMDAwMUFDMDAwMDAxQUUwMDAwMDFCMDAwMDAwCi06MTA0NzEwMDAwMDFCMjAwMDAwMUI0MDAwMDAxQjYwMDAwMDFCODAwMEVECi06MTA0NzIwMDAwMDFCQTAwMDAwMUJDMDAwMDAxQkUwMDAwMDFDMDAwMERDCi06MTA0NzMwMDAwMDFDMjAwMDAwMUM0MDAwMDAxQzYwMDAwMDFDODAwMEM5Ci06MTA0NzQwMDAwMDFDQTAwMDAwMUNDMDAwMDAxQ0UwMDAwMDFEMDAwMEI4Ci06MTA0NzUwMDAwMDFEMjAwMDAwMUQ0MDAwMDAxRDYwMDAwMDFEODAwMEE1Ci06MTA0NzYwMDAwMDFEQTAwMDAwMURDMDAwMDAxREUwMDAwMDFFMDAwMDk0Ci06MTA0NzcwMDAwMDFFMjAwMDAwMUU0MDAwMDAxRTYwMDAwMDFFODAwMDgxCi06MTA0NzgwMDAwMDFFQTAwMDAwMUVDMDAwMDAxRUUwMDAwMDFGMDAwMDcwCi06MTA0NzkwMDAwMDFGMjAwMDAwMUY0MDAwMDAxRjYwMDAwMDFGODAwMDVECi06MTA0N0EwMDAwMDFGQTAwMDAwMUZDMDAwMDAxRkUwMDAwMDIwMDAwMDRDCi06MTA0N0IwMDAwMDIwMjAwMDAwMjA0MDAwMDAyMDYwMDAwMDIwODAwMDM5Ci06MTA0N0MwMDAwMDIwQTAwMDAwMjBDMDAwMDAyMEUwMDAwMDIxMDAwMDI4Ci06MTA0N0QwMDAwMDIxMjAwMDAwMjE0MDAwMDAyMTYwMDAwMDIxODAwMDE1Ci06MTA0N0UwMDAwMDIxQTAwMDAwMjFDMDAwMDAyMUUwMDAwMDIyMDAwMDA0Ci06MTA0N0YwMDAwMDIyMjAwMDAwMjI0MDAwMDAyMjYwMDAwMDIyODAwMEYxCi06MTA0ODAwMDAwMDIyQTAwMDAwMjJDMDAwMDAyMkUwMDAwMDIzMDAwMERGCi06MTA0ODEwMDAwMDIzMjAwMDAwMjM0MDAwMDAyMzYwMDAwMDIzODAwMENDCi06MTA0ODIwMDAwMDIzQTAwMDAwMjNDMDAwMDAyM0UwMDAwMDI0MDAwMEJCCi06MTA0ODMwMDAwMDI0MjAwMDAwMjQ0MDAwMDAyNDYwMDAwMDI0ODAwMEE4Ci06MTA0ODQwMDAwMDI0QTAwMDAwMjRDMDAwMDAyNEUwMDAwMDI1MDAwMDk3Ci06MTA0ODUwMDAwMDI1MjAwMDAwMjU0MDAwMDAyNTYwMDAwMDI1ODAwMDg0Ci06MTA0ODYwMDAwMDI1QTAwMDAwMjVDMDAwMDAyNUUwMDAwMDI2MDAwMDczCi06MTA0ODcwMDAwMDI2MjAwMDAwMjY0MDAwMDAyNjYwMDAwMDI2ODAwMDYwCi06MTA0ODgwMDAwMDI2QTAwMDAwMjZDMDAwMDAyNkUwMDAwMDI3MDAwMDRGCi06MTA0ODkwMDAwMDI3MjAwMDAwMjc0MDAwMDAyNzYwMDAwMDI3ODAwMDNDCi06MTA0OEEwMDAwMDI3QTAwMDAwMjdDMDAwMDAyN0UwMDAwMDI4MDAwMDJCCi06MTA0OEIwMDAwMDI4MjAwMDAwMjg0MDAwMDAyODYwMDAwMDI4ODAwMDE4Ci06MTA0OEMwMDAwMDI4QTAwMDAwMjhDMDAwMDAyOEUwMDAwMDI5MDAwMDA3Ci06MTA0OEQwMDAwMDI5MjAwMDAwMjk0MDAwMDAyOTYwMDAwMDI5ODAwMEY0Ci06MTA0OEUwMDAwMDI5QTAwMDAwMjlDMDAwMDAyOUUwMDAwMDJBMDAwMEUzCi06MTA0OEYwMDAwMDJBMjAwMDAwMkE0MDAwMDAyQTYwMDAwMDJBODAwMEQwCi06MTA0OTAwMDAwMDJBQTAwMDAwMkFDMDAwMDAyQUUwMDAwMDJCMDAwMEJFCi06MTA0OTEwMDAwMDJCMjAwMDAwMkI0MDAwMDAyQjYwMDAwMDJCODAwMEFCCi06MTA0OTIwMDAwMDJCQTAwMDAwMkJDMDAwMDAyQkUwMDAwMDJDMDAwMDlBCi06MTA0OTMwMDAwMDJDMjAwMDAwMkM0MDAwMDAyQzYwMDAwMDJDODAwMDg3Ci06MTA0OTQwMDAwMDJDQTAwMDAwMkNDMDAwMDAyQ0UwMDAwMDJEMDAwMDc2Ci06MTA0OTUwMDAwMDJEMjAwMDAwMkQ0MDAwMDAyRDYwMDAwMDJEODAwMDYzCi06MTA0OTYwMDAwMDJEQTAwMDAwMkRDMDAwMDAyREUwMDAwMDJFMDAwMDUyCi06MTA0OTcwMDAwMDJFMjAwMDAwMkU0MDAwMDAyRTYwMDAwMDJFODAwMDNGCi06MTA0OTgwMDAwMDJFQTAwMDAwMkVDMDAwMDAyRUUwMDAwMDJGMDAwMDJFCi06MTA0OTkwMDAwMDJGMjAwMDAwMkY0MDAwMDAyRjYwMDAwMDJGODAwMDFCCi06MTA0OUEwMDAwMDJGQTAwMDAwMkZDMDAwMDAyRkUwMDAwMDMwMDAwMDBBCi06MTA0OUIwMDAwMDMwMjAwMDAwMzA0MDAwMDAzMDYwMDAwMDMwODAwMEY3Ci06MTA0OUMwMDAwMDMwQTAwMDAwMzBDMDAwMDAzMEUwMDAwMDMxMDAwMEU2Ci06MTA0OUQwMDAwMDMxMjAwMDAwMzE0MDAwMDAzMTYwMDAwMDMxODAwMEQzCi06MTA0OUUwMDAwMDMxQTAwMDAwMzFDMDAwMDAzMUUwMDAwMDMyMDAwMEMyCi06MTA0OUYwMDAwMDMyMjAwMDAwMzI0MDAwMDAzMjYwMDAwMDMyODAwMEFGCi06MTA0QTAwMDAwMDMyQTAwMDAwMzJDMDAwMDAzMkUwMDAwMDMzMDAwMDlECi06MTA0QTEwMDAwMDMzMjAwMDAwMzM0MDAwMDAzMzYwMDAwMDMzODAwMDhBCi06MTA0QTIwMDAwMDMzQTAwMDAwMzNDMDAwMDAzM0UwMDAwMDM0MDAwMDc5Ci06MTA0QTMwMDAwMDM0MjAwMDAwMzQ0MDAwMDAzNDYwMDAwMDM0ODAwMDY2Ci06MTA0QTQwMDAwMDM0QTAwMDAwMzRDMDAwMDAzNEUwMDAwMDM1MDAwMDU1Ci06MTA0QTUwMDAwMDM1MjAwMDAwMzU0MDAwMDAzNTYwMDAwMDM1ODAwMDQyCi06MTA0QTYwMDAwMDM1QTAwMDAwMzVDMDAwMDAzNUUwMDAwMDM2MDAwMDMxCi06MTA0QTcwMDAwMDM2MjAwMDAwMzY0MDAwMDAzNjYwMDAwMDM2ODAwMDFFCi06MTA0QTgwMDAwMDM2QTAwMDAwMzZDMDAwMDAzNkUwMDAwMDM3MDAwMDBECi06MTA0QTkwMDAwMDM3MjAwMDAwMzc0MDAwMDAzNzYwMDAwMDM3ODAwMEZBCi06MTA0QUEwMDAwMDM3QTAwMDAwMzdDMDAwMDAzN0UwMDAwMDM4MDAwMEU5Ci06MTA0QUIwMDAwMDM4MjAwMDAwMzg0MDAwMDAzODYwMDAwMDM4ODAwMEQ2Ci06MTA0QUMwMDAwMDM4QTAwMDAwMzhDMDAwMDAzOEUwMDAwMDM5MDAwMEM1Ci06MTA0QUQwMDAwMDM5MjAwMDAwMzk0MDAwMDAzOTYwMDAwMDM5ODAwMEIyCi06MTA0QUUwMDAwMDM5QTAwMDAwMzlDMDAwMDAzOUUwMDAwMDNBMDAwMEExCi06MTA0QUYwMDAwMDNBMjAwMDAwM0E0MDAwMDAzQTYwMDAwMDNBODAwMDhFCi06MTA0QjAwMDAwMDNBQTAwMDAwM0FDMDAwMDAzQUUwMDAwMDNCMDAwMDdDCi06MTA0QjEwMDAwMDNCMjAwMDAwM0I0MDAwMDAzQjYwMDAwMDNCODAwMDY5Ci06MTA0QjIwMDAwMDNCQTAwMDAwM0JDMDAwMDAzQkUwMDAwMDNDMDAwMDU4Ci06MTA0QjMwMDAwMDNDMjAwMDAwM0M0MDAwMDAzQzYwMDAwMDNDODAwMDQ1Ci06MTA0QjQwMDAwMDNDQTAwMDAwM0NDMDAwMDAzQ0UwMDAwMDNEMDAwMDM0Ci06MTA0QjUwMDAwMDNEMjAwMDAwM0Q0MDAwMDAzRDYwMDAwMDNEODAwMDIxCi06MTA0QjYwMDAwMDNEQTAwMDAwM0RDMDAwMDAzREUwMDAwMDNFMDAwMDEwCi06MTA0QjcwMDAwMDNFMjAwMDAwM0U0MDAwMDAzRTYwMDAwMDNFODAwMEZECi06MTA0QjgwMDAwMDNFQTAwMDAwM0VDMDAwMDAzRUUwMDAwMDNGMDAwMEVDCi06MTA0QjkwMDAwMDNGMjAwMDAwM0Y0MDAwMDAzRjYwMDAwMDNGODAwMEQ5Ci06MTA0QkEwMDAwMDNGQTAwMDAwM0ZDMDAwMDAzRkUwMDAwMDNGRTAwMUU4Ci06MTA0QkIwMDAwMDAwMDAwMDAwMDAwMUZGMDAwMDAyMDAwMDAwN0ZGODdDCi06MTA0QkMwMDAwMDAwN0ZGODAwMDAwMTZBMDAwMDE1MDAwMDAwMDAwMUVECi06MTA0QkQwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEQ3Ci06MTA0QkUwMDAwMDAwMDAwMDE0MEFGRjAwMDAwMDAwMDEwMDAwMDAwMEE3Ci06MTA0QkYwMDAwMDIwMTAwMTAwMDAwMDAwMDEwMDg2MDAwMDAwMDEwMEZDCi06MTA0QzAwMDAwMDAwODYwMjAwMDA4NjA0MDAwMDg2MDYwMDAwODYwODc4Ci06MTA0QzEwMDAwMDAwODYwQTAwMDA4NjBDMDAwMDg2MEUwMDAwODYxMDQ4Ci06MTA0QzIwMDAwMDAwODYxMjAwMDA4NjE0MDAwMDg2MTYwMDAwODYxODE4Ci06MTA0QzMwMDAwMDAwODYxQTAwMDA4NjFDMDAwMDg2MUUwMDAwODYyMEU4Ci06MTA0QzQwMDAwMDAwODYyMjAwMDA4NjI0MDAwMDg2MjYwMDAwODYyOEI4Ci06MTA0QzUwMDAwMDAwODYyQTAwMDA4NjJDMDAwMDg2MkUwMDAwODYzMDg4Ci06MTA0QzYwMDAwMDAwODYzMjAwMDA4NjM0MDAwMDg2MzYwMDAwODYzODU4Ci06MTA0QzcwMDAwMDAwODYzQTAwMDA4NjNDMDAwMDg2M0UwMDAwODY0MDI4Ci06MTA0QzgwMDAwMDAwODY0MjAwMDA4NjQ0MDAwMDg2NDYwMDAwODY0OEY4Ci06MTA0QzkwMDAwMDAwODY0QTAwMDA4NjRDMDAwMDg2NEUwMDAwODY1MEM4Ci06MTA0Q0EwMDAwMDAwODY1MjAwMDA4NjU0MDAwMDg2NTYwMDAwODY1ODk4Ci06MTA0Q0IwMDAwMDAwODY1QTAwMDA4NjVDMDAwMDg2NUUwMDAwODY2MDY4Ci06MTA0Q0MwMDAwMDAwODY2MjAwMDA4NjY0MDAwMDg2NjYwMDAwODY2ODM4Ci06MTA0Q0QwMDAwMDAwODY2QTAwMDA4NjZDMDAwMDg2NkUwMDAwODY3MDA4Ci06MTA0Q0UwMDAwMDAwODY3MjAwMDA4Njc0MDAwMDg2NzYwMDAwODY3OEQ4Ci06MTA0Q0YwMDAwMDAwODY3QTAwMDA4NjdDMDAwMDg2N0UwMDAwODY4MEE4Ci06MTA0RDAwMDAwMDAwODY4MjAwMDA4Njg0MDAwMDg2ODYwMDAwODY4ODc3Ci06MTA0RDEwMDAwMDAwODY4QTAwMDA4NjhDMDAwMDg2OEUwMDAwODY5MDQ3Ci06MTA0RDIwMDAwMDAwODY5MjAwMDA4Njk0MDAwMDg2OTYwMDAwODY5ODE3Ci06MTA0RDMwMDAwMDAwODY5QTAwMDA4NjlDMDAwMDg2OUUwMDAwODZBMEU3Ci06MTA0RDQwMDAwMDAwODZBMjAwMDA4NkE0MDAwMDg2QTYwMDAwODZBOEI3Ci06MTA0RDUwMDAwMDAwODZBQTAwMDA4NkFDMDAwMDg2QUUwMDAwODZCMDg3Ci06MTA0RDYwMDAwMDAwODZCMjAwMDA4NkI0MDAwMDg2QjYwMDAwODZCODU3Ci06MTA0RDcwMDAwMDAwODZCQTAwMDA4NkJDMDAwMDg2QkUwMDAwODZDMDI3Ci06MTA0RDgwMDAwMDAwODZDMjAwMDA4NkM0MDAwMDg2QzYwMDAwODZDOEY3Ci06MTA0RDkwMDAwMDAwODZDQTAwMDA4NkNDMDAwMDg2Q0UwMDAwODZEMEM3Ci06MTA0REEwMDAwMDAwODZEMjAwMDA4NkQ0MDAwMDg2RDYwMDAwODZEODk3Ci06MTA0REIwMDAwMDAwODZEQTAwMDA4NkRDMDAwMDg2REUwMDAwODZFMDY3Ci06MTA0REMwMDAwMDAwODZFMjAwMDA4NkU0MDAwMDg2RTYwMDAwODZFODM3Ci06MTA0REQwMDAwMDAwODZFQTAwMDA4NkVDMDAwMDg2RUUwMDAwODZGMDA3Ci06MTA0REUwMDAwMDAwODZGMjAwMDA4NkY0MDAwMDg2RjYwMDAwODZGOEQ3Ci06MTA0REYwMDAwMDAwODZGQTAwMDA4NkZDMDAwMDg2RkUwMDAwODcwMEE2Ci06MTA0RTAwMDAwMDAwODcwMjAwMDA4NzA0MDAwMDg3MDYwMDAwODcwODcyCi06MTA0RTEwMDAwMDAwODcwQTAwMDA4NzBDMDAwMDg3MEUwMDAwODcxMDQyCi06MTA0RTIwMDAwMDAwODcxMjAwMDA4NzE0MDAwMDg3MTYwMDAwODcxODEyCi06MTA0RTMwMDAwMDAwODcxQTAwMDA4NzFDMDAwMDg3MUUwMDAwODcyMEUyCi06MTA0RTQwMDAwMDAwODcyMjAwMDA4NzI0MDAwMDg3MjYwMDAwODcyOEIyCi06MTA0RTUwMDAwMDAwODcyQTAwMDA4NzJDMDAwMDg3MkUwMDAwODczMDgyCi06MTA0RTYwMDAwMDAwODczMjAwMDA4NzM0MDAwMDg3MzYwMDAwODczODUyCi06MTA0RTcwMDAwMDAwODczQTAwMDA4NzNDMDAwMDg3M0UwMDAwODc0MDIyCi06MTA0RTgwMDAwMDAwODc0MjAwMDA4NzQ0MDAwMDg3NDYwMDAwODc0OEYyCi06MTA0RTkwMDAwMDAwODc0QTAwMDA4NzRDMDAwMDg3NEUwMDAwODc1MEMyCi06MTA0RUEwMDAwMDAwODc1MjAwMDA4NzU0MDAwMDg3NTYwMDAwODc1ODkyCi06MTA0RUIwMDAwMDAwODc1QTAwMDA4NzVDMDAwMDg3NUUwMDAwODc2MDYyCi06MTA0RUMwMDAwMDAwODc2MjAwMDA4NzY0MDAwMDg3NjYwMDAwODc2ODMyCi06MTA0RUQwMDAwMDAwODc2QTAwMDA4NzZDMDAwMDg3NkUwMDAwODc3MDAyCi06MTA0RUUwMDAwMDAwODc3MjAwMDA4Nzc0MDAwMDg3NzYwMDAwODc3OEQyCi06MTA0RUYwMDAwMDAwODc3QTAwMDA4NzdDMDAwMDg3N0UwMDAwODc4MEEyCi06MTA0RjAwMDAwMDAwODc4MjAwMDA4Nzg0MDAwMDg3ODYwMDAwODc4ODcxCi06MTA0RjEwMDAwMDAwODc4QTAwMDA4NzhDMDAwMDg3OEUwMDAwODc5MDQxCi06MTA0RjIwMDAwMDAwODc5MjAwMDA4Nzk0MDAwMDg3OTYwMDAwODc5ODExCi06MTA0RjMwMDAwMDAwODc5QTAwMDA4NzlDMDAwMDg3OUUwMDAwODdBMEUxCi06MTA0RjQwMDAwMDAwODdBMjAwMDA4N0E0MDAwMDg3QTYwMDAwODdBOEIxCi06MTA0RjUwMDAwMDAwODdBQTAwMDA4N0FDMDAwMDg3QUUwMDAwODdCMDgxCi06MTA0RjYwMDAwMDAwODdCMjAwMDA4N0I0MDAwMDg3QjYwMDAwODdCODUxCi06MTA0RjcwMDAwMDAwODdCQTAwMDA4N0JDMDAwMDg3QkUwMDAwODdDMDIxCi06MTA0RjgwMDAwMDAwODdDMjAwMDA4N0M0MDAwMDg3QzYwMDAwODdDOEYxCi06MTA0RjkwMDAwMDAwODdDQTAwMDA4N0NDMDAwMDg3Q0UwMDAwODdEMEMxCi06MTA0RkEwMDAwMDAwODdEMjAwMDA4N0Q0MDAwMDg3RDYwMDAwODdEODkxCi06MTA0RkIwMDAwMDAwODdEQTAwMDA4N0RDMDAwMDg3REUwMDAwODdFMDYxCi06MTA0RkMwMDAwMDAwODdFMjAwMDA4N0U0MDAwMDg3RTYwMDAwODdFODMxCi06MTA0RkQwMDAwMDAwODdFQTAwMDA4N0VDMDAwMDg3RUUwMDAwODdGMDAxCi06MTA0RkUwMDAwMDAwODdGMjAwMDA4N0Y0MDAwMDg3RjYwMDAwODdGOEQxCi06MTA0RkYwMDAwMDAwODdGQTAwMDA4N0ZDMDAwMDg3RkVGRkZGRkZGRjJDCi06MTA1MDAwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkIwCi06MTA1MDEwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwMDAwMDAwMzk5Ci06MTA1MDIwMDAwMEJFQkMyMDAwMDAwMDAwMDAwMDAwMDUwMDAwMDAwM0RFCi06MTA1MDMwMDAwMEJFQkMyMDAwMDAwMDAwMDAwMDAwMDUwMDAwMjAwMEIxCi06MTA1MDQwMDAwMDAwNDBDMDAwMDA2MTgwMDAwMDgyNDAwMDAwQTMwMDFBCi06MTA1MDUwMDAwMDAwQzNDMDAwMDBFNDgwMDAwMTA1NDAwMDAxMjYwMEZDCi06MTA1MDYwMDAwMDAxNDZDMDAwMDE2NzgwMDAwMTg4NDAwMDAxQTkwMERFCi06MTA1MDcwMDAwMDAxQzlDMDAwMDFFQTgwMDAwMjBCNDAwMDAyMkMwMEMwCi06MTA1MDgwMDAwMDAyNENDMDAwMDI2RDgwMDAwMjhFNDAwMDAyQUYwMEEyCi06MTA1MDkwMDAwMDAyQ0ZDMDAwMDJGMDgwMDAwMDExNDAwMDAwODAwMDNDCi06MTA1MEEwMDAwMDAxMDM4MDAwMDE4NzAwMDAwMjBBODAwMDAyOEUwMEQ4Ci06MTA1MEIwMDAwMDAzMTE4MDAwMDM5NTAwMDAwNDE4ODAwMDA0OUMwMDg4Ci06MTA1MEMwMDAwMDA1MUY4MDAwMDVBMzAwMDAwNjI2ODAwMDA2QUEwMDM4Ci06MTA1MEQwMDAwMDA3MkQ4MDAwMDdCMTAwMDAwODM0ODAwMDA4QjgwMEU4Ci06MTA1MEUwMDAwMDA5M0I4MDAwMDlCRjAwMDAwQTQyODAwMDBBQzYwMDk4Ci06MTA1MEYwMDAwMDBCNDk4MDAwMEJDRDAwMDAwQzUwODAwMDBDRDQwMDQ4Ci06MTA1MTAwMDAwMDBENTc4MDAwMDA1QjAwMDAwMDdGRjgwMDAwN0ZGODcyCi06MTA1MTEwMDAwMDAwMDE2NjAwMDAxNTAwMDAwMEZGMDAwMDAwMDAwMDE0Ci06MTA1MTIwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMDE5MDAwMDAwMDAwMDY3Ci06MTA1MTMwMDAwMDAwMDAwMEZGRkZGRkZGMDAwMDdGRjgwMDAwN0ZGODg1Ci06MTA1MTQwMDAwMDAwMDM2MTAwMDAxNTAwMDAwMEZGMDAwRkZGRkZGRkRCCi06MTA1MTUwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDQ2Ci06MTA1MTYwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjI5Ci06MTA1MTcwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjE5Ci06MTA1MTgwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDE2Ci06MTA1MTkwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRkY5Ci06MTA1MUEwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMEY2Ci06MTA1MUIwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkQ5Ci06MTA1MUMwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRkM5Ci06MTA1MUQwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEM2Ci06MTA1MUUwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRkE5Ci06MTA1MUYwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMEE2Ci06MTA1MjAwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjg4Ci06MTA1MjEwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjc4Ci06MTA1MjIwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDc1Ci06MTA1MjMwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjU4Ci06MTA1MjQwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDU1Ci06MTA1MjUwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjM4Ci06MTA1MjYwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjI4Ci06MTA1MjcwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDI1Ci06MTA1MjgwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjA4Ci06MTA1MjkwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDA1Ci06MTA1MkEwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkU4Ci06MTA1MkIwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRkQ4Ci06MTA1MkMwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEQ1Ci06MTA1MkQwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRkI4Ci06MTA1MkUwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMEI1Ci06MTA1MkYwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjk4Ci06MTA1MzAwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjg3Ci06MTA1MzEwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDg0Ci06MTA1MzIwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjY3Ci06MTA1MzMwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDY0Ci06MTA1MzQwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjQ3Ci06MTA1MzUwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjM3Ci06MTA1MzYwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDM0Ci06MTA1MzcwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjE3Ci06MTA1MzgwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDE0Ci06MTA1MzkwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkY3Ci06MTA1M0EwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRkU3Ci06MTA1M0IwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEU0Ci06MTA1M0MwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMDAwRkYwMDAwMDBGRkQ0Ci06MTA1M0QwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMENGCi06MTA1M0UwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkNECi06MTA1M0YwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkJECi06MTA1NDAwMDAwMDAwMTAwMDAwMDAyMDgwMDAwMDMxMDAwMDAwNDE4MEZBCi06MTA1NDEwMDAwMDAwNTIwMDAwMDA2MjgwMDAwMDczMDAwMDAwODM4MEUyCi06MTA1NDIwMDAwMDAwOTQwMDAwMDBBNDgwMDAwMEI1MDAwMDAwQzU4MENBCi06MTA1NDMwMDAwMDAwRDYwMDAwMDBFNjgwMDAwMEY3MDAwMDAxMDc4MEIxCi06MTA1NDQwMDAwMDAxMTgwMDAwMDEyODgwMDAwMTM5MDAwMDAxNDk4MDk2Ci06MTA1NDUwMDAwMDAxNUEwMDAwMDE2QTgwMDAwMTdCMDAwMDAxOEI4MDdFCi06MTA1NDYwMDAwMDAxOUMwMDAwMDFBQzgwMDAwMUJEMDAwMDAxQ0Q4MDY2Ci06MTA1NDcwMDAwMDAxREUwMDAwMDFFRTgwMDAwMDBGMDAwMDAwMDAwMENGCi06MTA1NDgwMDAwMDAwN0ZGODAwMDA3RkY4MDAwMDAyMUQwMDAwMTUwMEZBCi06MTA1NDkwMDAxMDAwMDAwMDAwMDAyOEFEMDAwMTAwMDFGRkZGRkZGRjI5Ci06MTA1NEEwMDBGRkZGRkZGRjAwMDUwMjA2Q0NDQ0NDQzE3MDU4MTAzQ0JBCi06MTA1NEIwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMEVFCi06MTA1NEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFDQ0NDMDIwMTQwCi06MTA1NEQwMDBDQ0NDQ0NDQ0NDQ0MwMjAxQ0NDQ0NDQ0MwMDAwMDAwMEQxCi06MTA1NEUwMDBGRkZGRkZGRjAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRkM0Ci06MTA1NEYwMDAwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRkIwCi06MTA1NTAwMDAwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjlGCi06MTA1NTEwMDAwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjhGCi06MTA1NTIwMDAwMDAwMDAwMDAwMEUwMDAwMDExNjAwRDYwMDAwRkZGRjgyCi06MTA1NTMwMDAwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjZGCi06MTA1NTQwMDAwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjVGCi06MTA1NTUwMDAwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjRGCi06MTA1NTYwMDAwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDcyMDAwMENCCi06MTA1NTcwMDAwMTIzMDBGM0ZGRkZGRkYzMzE4RkZGRkYwQzMwQzMwQzVCCi06MTA1NTgwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAwQ0YzQzVGCi06MTA1NTkwMDBDRENEQ0RDREZGRkZGRkYxMzBFRkZGRkYwQzMwQzMwQ0MxCi06MTA1NUEwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAxQ0YzQzNFCi06MTA1NUIwMDBDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkYwQzMwQzMwQzJDCi06MTA1NUMwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAyQ0YzQzFECi06MTA1NUQwMDBDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkYwQzMwQzMwNUMyCi06MTA1NUUwMDBDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjMwMDA0Q0YzQ0U2Ci06MTA1NUYwMDBDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkYwQzMwQzMwQzAwCi06MTA1NjAwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDA4Q0YzQ0Q2Ci06MTA1NjEwMDBDRENEQ0RDREZGRkZGRkZBMzAyRkZGRkYwQzMwQzMwQ0Y3Ci06MTA1NjIwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDEwQ0YzQ0FFCi06MTA1NjMwMDBDRENEQ0RDREZGRkZGRkY3MzFFRkZGRkYwQzMwQzMwQzE5Ci06MTA1NjQwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDIwQ0YzQzdFCi06MTA1NjUwMDBDRENEQ0RDREZGRkZGRkY1MzAyRkZGRkYwQzMwQzMwQ0JDCi06MTA1NjYwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDQwQ0YzQzNFCi06MTA1NjcwMDBDRENEQ0RDREZGRkZGRkYzMzE4RkZGRkYwQzMwQzMwQzNECi06MTA1NjgwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAwQ0YzQzVFCi06MTA1NjkwMDBDRENEQ0RDREZGRkZGRkYxMzEwRkZGRkYwQzMwQzMwQzlGCi06MTA1NkEwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAxQ0YzQzNECi06MTA1NkIwMDBDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkYwQzMwQzMwQzJCCi06MTA1NkMwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAyQ0YzQzFDCi06MTA1NkQwMDBDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkYwQzMwQzMwNUMxCi06MTA1NkUwMDBDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjMwMDA0Q0YzQ0U1Ci06MTA1NkYwMDBDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkYwQzMwQzMwQ0ZGCi06MTA1NzAwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDA4Q0YzQ0Q1Ci06MTA1NzEwMDBDRENEQ0RDREZGRkZGRkZBMzAyRkZGRkYwQzMwQzMwQ0Y2Ci06MTA1NzIwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDEwQ0YzQ0FECi06MTA1NzMwMDBDRENEQ0RDREZGRkZGRkY3MzBFRkZGRkYwQzMwQzMwQzE5Ci06MTA1NzQwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDIwQ0YzQzdECi06MTA1NzUwMDBDRENEQ0RDREZGRkZGRkY1MzA0RkZGRkYwQzMwQzMwQzlCCi06MTA1NzYwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDQwQ0YzQzNECi06MTA1NzcwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0YxCi06MTA1NzgwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAwQ0YzQzkxCi06MTA1NzkwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0QxCi06MTA1N0EwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAxQ0YzQzcwCi06MTA1N0IwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0IxCi06MTA1N0MwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAyQ0YzQzRGCi06MTA1N0QwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzkxCi06MTA1N0UwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDA0Q0YzQzJECi06MTA1N0YwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzcxCi06MTA1ODAwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDA4Q0YzQzA4Ci06MTA1ODEwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzUwCi06MTA1ODIwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDEwQ0YzQ0UwCi06MTA1ODMwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzMwCi06MTA1ODQwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDIwQ0YzQ0IwCi06MTA1ODUwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzEwCi06MTA1ODYwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDQwQ0YzQzcwCi06MTA1ODcwMDBDRENEQ0RDREZGRkZGRkYzMzIwRkZGRkYwQzMwQzMwQ0JBCi06MTA1ODgwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAwQ0YzQzVDCi06MTA1ODkwMDBDRENEQ0RDREZGRkZGRkYxMzEwRkZGRkYwQzMwQzMwQzlECi06MTA1OEEwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAxQ0YzQzNCCi06MTA1OEIwMDBDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkYwQzMwQzMwQzI5Ci06MTA1OEMwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAyQ0YzQzFBCi06MTA1OEQwMDBDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkYwQzMwQzMwNUJGCi06MTA1OEUwMDBDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjMwMDA0Q0YzQ0UzCi06MTA1OEYwMDBDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkYwQzMwQzMwQ0ZECi06MTA1OTAwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDA4Q0YzQ0QzCi06MTA1OTEwMDBDRENEQ0RDREZGRkZGRjhBMDQyRkZGRkYwQzMwQzMwQzkwCi06MTA1OTIwMDBDMzBDMzBDM0NGM0NDMDAwRjNDRjNDRjMwMDEwQ0YzQ0RFCi06MTA1OTMwMDBDRENEQ0RDREZGRkZGRjk3MDVDRkZGRkYwQzMwQzMwQ0MyCi06MTA1OTQwMDBDMzBDMzBDM0NGM0NDMDAwRjNDRjNDRjMwMDIwQ0YzQ0FFCi06MTA1OTUwMDBDRENEQ0RDREZGRkZGRkY1MzEwRkZGRkYwQzMwQzMwQ0Q4Ci06MTA1OTYwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDQwQ0YzQzNCCi06MTA1OTcwMDBDRENEQ0RDREZGRkZGRkYzMzAwRkZGRkYwQzMwQzMwQ0JCCi06MTA1OTgwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAwQ0YzQzVCCi06MTA1OTkwMDBDRENEQ0RDREZGRkZGRkYxMzAwRkZGRkYwQzMwQzMwQzlECi06MTA1OUEwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAxQ0YzQzNBCi06MTA1OUIwMDBDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkYwQzMwQzMwQzI4Ci06MTA1OUMwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAyQ0YzQzE5Ci06MTA1OUQwMDBDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkYwQzMwQzMwNUJFCi06MTA1OUUwMDBDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjMwMDA0Q0YzQ0UyCi06MTA1OUYwMDBDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkYwQzMwQzMwQ0ZDCi06MTA1QTAwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDA4Q0YzQ0QyCi06MTA1QTEwMDBDRENEQ0RDREZGRkZGRkZBMzAyRkZGRkYwQzMwQzMwQ0YzCi06MTA1QTIwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDEwQ0YzQ0FBCi06MTA1QTMwMDBDRENEQ0RDREZGRkZGRjk3MDQwRkZGRkYwQzMwQzMwQzgyCi06MTA1QTQwMDBDMzBDMzBDM0NGM0NDMDAwRjNDRjNDRjMwMDIwQ0YzQ0FECi06MTA1QTUwMDBDRENEQ0RDREZGRkZGRkY1MzAwRkZGRkYwQzMwQzMwQ0Q4Ci06MTA1QTYwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDQwQ0YzQzNBCi06MTA1QTcwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0VFCi06MTA1QTgwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAwQ0YzQzhFCi06MTA1QTkwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0NFCi06MTA1QUEwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAxQ0YzQzZECi06MTA1QUIwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0FFCi06MTA1QUMwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAyQ0YzQzRDCi06MTA1QUQwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzhFCi06MTA1QUUwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDA0Q0YzQzJBCi06MTA1QUYwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzZFCi06MTA1QjAwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDA4Q0YzQzA1Ci06MTA1QjEwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzRECi06MTA1QjIwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDEwQ0YzQ0RECi06MTA1QjMwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzJECi06MTA1QjQwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDIwQ0YzQ0FECi06MTA1QjUwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzBECi06MTA1QjYwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDQwQ0YzQzZECi06MTA1QjcwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0VECi06MTA1QjgwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAwQ0YzQzhECi06MTA1QjkwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0NECi06MTA1QkEwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAxQ0YzQzZDCi06MTA1QkIwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0FECi06MTA1QkMwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAyQ0YzQzRCCi06MTA1QkQwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzhECi06MTA1QkUwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDA0Q0YzQzI5Ci06MTA1QkYwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzZECi06MTA1QzAwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDA4Q0YzQzA0Ci06MTA1QzEwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzRDCi06MTA1QzIwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDEwQ0YzQ0RDCi06MTA1QzMwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzJDCi06MTA1QzQwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDIwQ0YzQ0FDCi06MTA1QzUwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzBDCi06MTA1QzYwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDQwQ0YzQzZDCi06MTA1QzcwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0VDCi06MTA1QzgwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAwQ0YzQzhDCi06MTA1QzkwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0NDCi06MTA1Q0EwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAxQ0YzQzZCCi06MTA1Q0IwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0FDCi06MTA1Q0MwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAyQ0YzQzRBCi06MTA1Q0QwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzhDCi06MTA1Q0UwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDA0Q0YzQzI4Ci06MTA1Q0YwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzZDCi06MTA1RDAwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDA4Q0YzQzAzCi06MTA1RDEwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzRCCi06MTA1RDIwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDEwQ0YzQ0RCCi06MTA1RDMwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzJCCi06MTA1RDQwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDIwQ0YzQ0FCCi06MTA1RDUwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzBCCi06MTA1RDYwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDQwQ0YzQzZCCi06MTA1RDcwMDBDRENEQ0RDRDAwMEMwMDAwMDAwNzAwQzAwMDAyODEzMDY5Ci06MTA1RDgwMDAwMDBCODE1ODAwMDIwMjEwMDAwMTAyMzAwMDBGMDI0MDk3Ci06MTA1RDkwMDAwMDAxMDMzMDAwMEMwMDAwMDAwODAwQzAwMDAyODE0MDM4Ci06MTA1REEwMDAwMDBCODE2ODAwMDIwMjIwMDAwMTAyNDAwMDA3MDI1MDNGCi06MTA1REIwMDAwMDAyMDJDMDAwMTAwMDAwMDAwODAxMDAwMDAyODE4MDAzCi06MTA1REMwMDAwMDBCODFBODAwMDIwMjYwMDAwMTgyODAwMDBFODI5ODEwCi06MTA1REQwMDAwMDA4MDM4MDAwMDI4MDAwMDAwQjgwMjgwMDAyMDBFMDIxCi06MTA1REUwMDAwMDAxMDEwMDAwMDA4MTEwMDAwMDAxMThDQ0NDQ0NDQ0Q3Ci06MTA1REYwMDBDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0MwMDAwMjAwMEYzCi06MTA1RTAwMDBDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0QyCi06MTA1RTEwMDAwMDAwMjAwMENDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0QyCi06MTA1RTIwMDBDQ0NDQ0NDQzAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDIyCi06MTA1RTMwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkZCNTFDRkMwRjAwM0Q3Ci06MTA1RTQwMDA4QUJCNTgxOTE4MDIzODEwN0M3QUUwQTU4Qzk0RTlERkQ3Ci06MTA1RTUwMDBDOENDQzBCMDAzODhBRjAyRjE3RTY2RDJGNUIzNEEyMzQ2Ci06MTA1RTYwMDBEOEY3MjQxODE4MTgyNDE5MTg0RTg5MzEzMEVDOTI0NEE4Ci06MTA1RTcwMDA4OEU3MDJENTA4NEEzMTMwREM4NThBMDUwMEQ5NjdBNTU0Ci06MTA1RTgwMDBFODFCNEVBMzk4MzZGOEJCM0EyQUZGOTEyQTg0Q0U4N0E2Ci06MTA1RTkwMDA4OUEzQzkzRjg2Q0E2RjU0ODBEMDNGRDVCMTlCQkIwOTQ3Ci06MTA1RUEwMDAyQTBGMDBGRTY5NEY2NzYwMDMwMDAwMDAwMDAwMDAwMDM5Ci06MTA1RUIwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkVEN0QwQjc4NTRENTBGCi06MTA1RUMwMDBCOUU4REFDRkQ5MzM5OTRDNzY0MjQyMjYxMDcwMDcwM0VECi06MTA1RUQwMDAwNDBEMzAyMDhGQTg1NDI3RTFEMUUwRTVFOEYwNDYyRUVDCi06MTA1RUUwMDBDQTgwQUYwODkyNDQ4RDM1NkQzOTM3M0I2NDEyMDIwMjg3Ci06MTA1RUYwMDA4RUNBQTFCNEE1M0EyMDdBQTI0N0RCRDQ0NjRCN0JGNUUzCi06MTA1RjAwMDBEQzIwNkE3M0RBRDM3QjkxNTJBNTJEQjY0MTNEMjgxNjY5Ci06MTA1RjEwMDA2OEY0OTQwM0JERDc5NkJCRkU3RkFEM0REOTdCNjcyNjYxCi06MTA1RjIwMDAwRjVGREYzOTVGMUIzRURENTk3QkFGQkRENkJGRkVGNzhDCi06MTA1RjMwMDBGQUZGN0ZFREE4QTI0MkQ0NEIwOEI5MDgzRkQ3MTJCMkFFCi06MTA1RjQwMDA0RTIwODRFNEY1NUVBREZCNDQ4QjU2OTM1QzQyQUE4MkZFCi06MTA1RjUwMDBBQUIxOTUzRTVCMkY4NThEQzY2OUY0RkUyNTYyRTgwOURFCi06MTA1RjYwMDAwMkY3QzdDRDIxOTMwODUxRTBCRDAyNDJBNkMyRkZBNkE5Ci06MTA1RjcwMDAxMzIyRTdCNDBFOEZGQUU5M0Q2OTU1MTY1Q0FERjFBQzFBCi06MTA1RjgwMDA2Qjk1NEM4ODNFMTU5RTZGMUI5N0VBNzk3MkZFODREMjAyCi06MTA1RjkwMDBEM0FEMTFGQ0I5Mzg4NjkwRkFFMzM3Q0U3RkM1NkFEMzBBCi06MTA1RkEwMDBGRjQ2OTJDQ0RDOTM5N0QzNUY2NjkyOTkxNzI1NDIzRUM5Ci06MTA1RkIwMDAyQTVDOTRENTY5QTQxRkVGODM4NjJFNUQxRTRCQzhGOTE5Ci06MTA1RkMwMDA4NjE1RjM1RjE5REJGN0Y5N0E4OUQ0QjY5N0Y2QkQ3RkFBCi06MTA1RkQwMDAxNUQxMTAyRjQ0MzNENUM4QzRERTc1QUYyN0E0RDM5MzkxCi06MTA1RkUwMDA0M0M4RTZDMjRENkNCREI5MTQ1OTU3RDJGQjZERkZBMjMwCi06MTA1RkYwMDBDQjI1QkQ3MEFFOTc2OUJGQTk3REQ3NDM4ODg5RTM1QTg5Ci06MTA2MDAwMDBFMzI0REY0Rjc0MzlERTc3QkY5NzFDOEZCRjRGNjRGQUVDCi06MTA2MDEwMDA2RjA2MjFEODg1QUU3RkJBMTBCRDE2RUU3QjBBMTc5OUEwCi06MTA2MDIwMDAyMzY4N0JGRDMzRTUyNDVBOUExRUZFMjRCRDNFMjFGQ0U1Ci06MTA2MDMwMDBENjdCNjlFOUM4RkI3REI0QkZBOTg1RDBGNzRFQUFGMTJDCi06MTA2MDQwMDBFQkFGQTI3Q0Y0REVGN0E1RDAyNkUwQTMzREUzRTc5MDFBCi06MTA2MDUwMDAwMEJENEYxODFGNTk3NDNBQjVCRjY5NzgyQUZFNDg0N0VBCi06MTA2MDYwMDBBN0JGMjc1RUU0M0Y4QkJGQUFDNDU1NTk5REU0OTNGM0I1Ci06MTA2MDcwMDBENzFEQzA1RjE5MzZGRTZBNUZEQ0VGNzg5Rjk0QkY2MjYwCi06MTA2MDgwMDA2RUZFRTJGODM4RERDRUQ2NEY3NjBGNjM3NEUxRjQ3MjFGCi06MTA2MDkwMDBEMzI3MkQ1RDNFRTk3QjdERjk2OTBCRTBENUQzQkVEOEQyCi06MTA2MEEwMDAxQzQxNTJGMDEzODdEN0EyRDdBNzg1NzcyMDNFMjIyNDIwCi06MTA2MEIwMDA4RTc0MjYyNDIyQzFGQ0JERjdEOTM1QTNDQzEwODBDRjI1Ci06MTA2MEMwMDA2OEYzMzBBQzIzQzhBNjIyQzE1QjVCRUUxNjI5OUMwMUE1Ci06MTA2MEQwMDA5MjY4MUQ1NzQ0REJERDZCMTYwMERDODFFM0YzNEY4MUQyCi06MTA2MEUwMDAzQzM0ODcyQUI0RDk3NEJERkEzNEUzQTE3OUY0OUE1MUM3Ci06MTA2MEYwMDBBQTBCQjA5RUFENDQwNDI1NDBDN0FCMzZDQjRCODE1RUE2Ci06MTA2MTAwMDAwNERCNEY5QkI3ODQ0REMwMDMwOTEzMzI5QzkwRkJGODBFCi06MTA2MTEwMDA5QTA4MTEwRDk5QjY1NUY4NzU0Q0FBNzVBOEE0OTNFMTgzCi06MTA2MTIwMDA0M0I4RThFOUZCN0VCQUY1QUJCREVGOTE4QjQ1RjBGRkQ0Ci06MTA2MTMwMDA3QjA4QUM2RkEwRjc0ODk0QkQ2N0QyN0Y4MEVGMUNENzc3Ci06MTA2MTQwMDAzOEZBMUNEQUI2RjE3RDgwRDhEQUY0Rjk1MUY4MDVGMUE1Ci06MTA2MTUwMDA3REY3MTczMjVGMzZEOUE3MTk1NDNGQTgyNUEyOUU4MDM0Ci06MTA2MTYwMDBGRUM0Qzg5NjY5M0JBMzkyMkEyMjc4MUUyNDA3Mjk0NUJCCi06MTA2MTcwMDAwNkE0NEIzMzIxOTVFREMwOEZBNDlEMkM5Q0Q4MEJERjNBCi06MTA2MTgwMDAyOTIyRTA3QTBBNkVERkI5QTY4NUFBQUU3MzY1RkUxMEYxCi06MTA2MTkwMDBGMDc5NTAyNzY0NTg0RURGRjU2QzZCQTA4QzNDREVENjRFCi06MTA2MUEwMDAwRTNEODdGQzFGQTM3QzM0ODZCRTZGODY5ODNEREM1QTZCCi06MTA2MUIwMDBGMkIyMUVCNUM5Nzc4NjIwNzBCRTc0RjMwNzMxRTQxOUI4Ci06MTA2MUMwMDAyMDY2QzAyQUY0NUEyMjg2QkQ4MTRGQ0YxRkIyMEI4RkEyCi06MTA2MUQwMDA4M0U1MEY3RkQ0NDYxRjMyNzQ3QTA1QjlERjMwNThGRTRECi06MTA2MUUwMDBGOEI0RjM1OTc0RUQyQjU3OEQxNjVEMzU0MkU5QjBBNTFGCi06MTA2MUYwMDA3ODUxNEFGRjIzM0Q1REY3MTFFODlGNTE0MkMyODkxNDRGCi06MTA2MjAwMDBFRjhEMTIwNDJFMDdBNjQzREZFMDk1RDI0NzRBOTJGNzlFCi06MTA2MjEwMDA1RTA3QkRBNEZDMTkyQkY2RjY4MzBGMjlENzg5MEY2QkY3Ci06MTA2MjIwMDA1QzZGQkQ2NEJDNEI1NTIyOTE3NTExQzY1MzYxM0NDQTZECi06MTA2MjMwMDBBNzVCODIwRjlCODRDQUMzMzlFMDZEOEEwRjI5M0VBNUY0Ci06MTA2MjQwMDAxM0RBQTQ5ODIwMUZEMjlGNEU4MUI2QkRDMTcwNjIyQjc1Ci06MTA2MjUwMDBGMjQxMDJFOTYyQzFFNzMxNDQwNzdFRTU1QzlGQTM0RDRDCi06MTA2MjYwMDA1Njk4ODIxRDdFNkZCRDhBNzBBOEU4MjNEMDcxNzQzQTVCCi06MTA2MjcwMDAyMDQ1ODVFQzI3OURDMEI3MTZCRjAyMUI1Q0JDMTREQTE1Ci06MTA2MjgwMDA1Rjc3RjA0MUFCMzE5NUE0QTI4M0M1QUY4MDU2QzZBRjBFCi06MTA2MjkwMDA1RjFGOUM3RTcxQ0ZCN0M0MDlFRkEwREZGM0NCQzY0OTY3Ci06MTA2MkEwMDA5QjFENEFGRjlFNEM0RTVBRjRBMTQ4QUM4MjAxNkM3QzY3Ci06MTA2MkIwMDBCMDU5MjEwNzg0Qzk4NDM0MTUyRTIzNTE3QTc3MzMzQzkxCi06MTA2MkMwMDBBMjc2QUMwNUFFMDVFMDFGNEU0NUJENDBEQTA0MTlFMEVDCi06MTA2MkQwMDBCNEVDMkEwOUU2NjBCRkU5ODI4MUUzODk1QTJERUExNTA4Ci06MTA2MkUwMDBDOTFGNjZGNjk1M0Y0RjBGMTc5QjdGQjgxMTBGRUIxNDMwCi06MTA2MkYwMDBCRkY5MjQxRTE2Mjk3REE4QUUwQzc1MTJEMDlCNjEwMjMxCi06MTA2MzAwMDA3QzQwNDI4QzJGMjRFRUE3NUJFRkM3MzgzRjdCQzk1MUZFCi06MTA2MzEwMDA3QzlGNkE1NzUzNDc3QkU2OTRFM0I5MTI3RDQ4QzdEOUZGCi06MTA2MzIwMDA1MjQyMTIxRUE0NTM1QzgzQjY1QzIyMTNEODE3NTBGRDUwCi06MTA2MzMwMDBFNDJGQTBGREIzMkNGNjk3MTY4NDAwRkUyQzZFNUZDOUU3Ci06MTA2MzQwMDAyQ0NFREYwMkQ1NjcxNENGRkU2OTRFRjlGNkI5RTQ1RkIzCi06MTA2MzUwMDBFNkY2Qjg4RjNFNEJCMzlGQjBBRTZFRkZFRDMxODFGQkRBCi06MTA2MzYwMDA2RjE5QzQ4RkY0RTZFRjEzN0Y2QTdGRDVGMkRCMkNCQzg0Ci06MTA2MzcwMDBFNjg5MDRGMTQ5N0VBQTI0OUUyOEUyNkJBM0VEN0JERTI4Ci06MTA2MzgwMDBDQTRFQzBCQUNEOEFDODlBNjY4QTA3RjM2RDIxRDQwNDcyCi06MTA2MzkwMDBGNDk0QzMzRDU5RjRGOUM5MjcyNURDMkZFNTJEQUJCRjkzCi06MTA2M0EwMDAwNEU2REJERTYwOEUyREI2Rjk4M0RCRTU1QTBERjA0RDk5Ci06MTA2M0IwMDBGOTQyQjNEQjhCMUI0OEY0MDVDMUI2RkZGMjA0NUJDNkEwCi06MTA2M0MwMDAxNjBGNDNGRTdCQkJCQjA0NEM4NTgwRkNFN0Y1Qzc4MjAwCi06MTA2M0QwMDBBRjgyNUNGMkZCNDlGQ0Q4REI1MkRGNzY2RTNFRTFGNjIxCi06MTA2M0UwMDBGMjg2RjIzMDlEQjcxNTc0RDcwODdDNkMwQTE0OUVENkRECi06MTA2M0YwMDAwMkQ2RkU0OUUzRjA3MkIwOUZBRDk5QUNGRDUxRTMzQjhDCi06MTA2NDAwMDBFMTQ2RTQ4QkE4MTZBMUY3RUEwOUM3NEIxN0M1MEJEMkUyCi06MTA2NDEwMDBERkM4QjdEQjU3RjdENUJERkUxREIyRUUwMzNFREJFQkExCi06MTA2NDIwMDBDRkI5QUUwNEVDNjc5OTE4MDJCNEVGOEQxREQxRDdEODVGCi06MTA2NDMwMDBGMEYxNEQ0RkM1MUI4MDhGOTEyNDIxMTBBMDVGMkMxN0M4Ci06MTA2NDQwMDBFNUM3RjJFNzgwRjFBMDVEQzBFNUE5OTAxQ0M2N0VBMzc4Ci06MTA2NDUwMDAyMzNERTUwQURDNUFBMUJGMENENzk2RTA3M0Q5Mjg0RjNCCi06MTA2NDYwMDA2NDhFN0UxMkU1NUYxMjJFNUUzRTc4Nzk0RkI3REU4MDM1Ci06MTA2NDcwMDA0MDIyQTlGQ0Y5RkJBNTFDOTRBQkMwMzRCQTZFODc1RTIwCi06MTA2NDgwMDAyRkQ0OTExRkY5Qjg1RjAzMUE4MUZFQzhBNjMwNEQwNkJDCi06MTA2NDkwMDAzRDEyNUYxMTQ5MzFERTRGMDQxMUZCNjk2MDBGQUVBMDYwCi06MTA2NEEwMDA2ODI4NUM1NkY2NkY3NEJEOUExNjlFRjIyQTg1Q0I5M0M3Ci06MTA2NEIwMDBFQjBGOTkwODM2QjMxMzA2OTcwMTRGQkM1MTAzRkM5MkJBCi06MTA2NEMwMDBBMzEyMDFGOUQ3MEFDMzkxREI4MDRGNDkyNDJDRDBGQkRBCi06MTA2NEQwMDA1QTMwMUNEQTZBRjQ1RDlGNEE5ODdEQzhBMUQ3OEI0QzZDCi06MTA2NEUwMDBCRTA5RjRCRjI3NEZDN0ZFMDRFQzg1QjVBRTMxMDA5NzU3Ci06MTA2NEYwMDA4QTcwN0QwNkY0Q0UxNUE3MEY0Q0U3MTFBNEJEMUM4QzQ1Ci06MTA2NTAwMDA1OTNBN0E3RkQ2NzQ0RUY3QkU5QkJFMDE4MUM5RDdGRDNBCi06MTA2NTEwMDA0REU3QzMyNjk1QTc5NkUzODIyODgxNTI4QzE3MjM1RDA5Ci06MTA2NTIwMDAzNDRFOTdGMzRBNTQwM0JGNzFDQjU3NDVCMjhGQjYxRjExCi06MTA2NTMwMDBBREVGREY0Rjg5ODE5RkUyQjFEOTREOUREMTZGRTQ1RDExCi06MTA2NTQwMDBGQTU0NjBBMTc0RUZFREJBNEJBQzRDQTRFMEE3NEE5MUE5Ci06MTA2NTUwMDBFOUZEMkQ3NzNEMUMxRjBCRjQ3Q0M1QjlERjUzNTY4NTMzCi06MTA2NTYwMDBEMTJGQTVGQkJFNEFBMDg3RjU5RUI3OThEOTI3QjI5RjI5Ci06MTA2NTcwMDBBRTg3RjY1N0I4M0Y3MjNFNkY1MTE2NDkzMThGNzVEREMxCi06MTA2NTgwMDBFMzgyQkY5MEUyMzk5NURDREMyNzcxRkY2QTI3MUJERkNECi06MTA2NTkwMDBGMjc3Q0UxN0Y0M0ZCRTg1OUYwQjk1MjIzOTVDOEE2NDUzCi06MTA2NUEwMDBGNTkxNTJCRTE4OEFGN0MyQTRERjlEODc2RDBGN0Y5NEM0Ci06MTA2NUIwMDBBODE1N0QwNEVDNUU2MTY3Mzk1QzE1RDJEMzA4N0NCQUZFCi06MTA2NUMwMDA0QjI0NTVBOUUwNUIyQjg5MDg1RjYxOTg2RTNEQThERURFCi06MTA2NUQwMDAyRjM0NDVEMDRDRTQ1RUM5QzBGQkY5QUI2QTBGMkE5NDU2Ci06MTA2NUUwMDAyRUFEQTM0ODA4Q0NDQzI1MzAxRUU4RDU4MzVFQjQ5RkUxCi06MTA2NUYwMDA2QTJFNDk3OEE5OUU3RUFERTgyQjI2RDg2NUJEOTA4NDg5Ci06MTA2NjAwMDAwMTE2QkQxNkY2OUNGNDNGNkE1RjBERkE1Q0Q5MTgzNTg5Ci06MTA2NjEwMDAxMUFFNjAwNEY3MDg4NzhBOTYyMUJENUJBODdGRTc2MTA5Ci06MTA2NjIwMDAwQjcxRjA1MzhCMjk3NjAyREZDNkU5RjhFMDBGQzY4REI3Ci06MTA2NjMwMDAwQTk0RDc3MzQxNkFGOUUxRTc2MzBBQkZCNURGQjgxNDdBCi06MTA2NjQwMDBFMjQyOTQ5NDAwRTcwNDE5RTFBNDIzMzE3QUVBMEMyRjgyCi06MTA2NjUwMDAyMzc3Q0YyMjlERDRFRUI0NjZFRjQyNzkzMEFGMjQyODYxCi06MTA2NjYwMDBBRjMyMzk2QzBBNjA2N0U0ODQyOTUyNzg2MzU1NEMxRjU1Ci06MTA2NjcwMDAyOEI5NzFDMTZFQzdGNjkwRTg4Mzc2QkU5MUY1NEVGNEU1Ci06MTA2NjgwMDBGRjVBRkYyQ0FENDg4NUQ3NkE5MUU5QjdGQkI4M0UzQzZECi06MTA2NjkwMDBBRkI0Q0Y0NzdGQTM5OUNBNDc1MURGRkU2MTRFODc2RkUyCi06MTA2NkEwMDBDNzE2M0QzODFFRjUxOUIzNEJENkYzMkVDMTcwQzQzMTUxCi06MTA2NkIwMDA0NzVFNTA3MTNENkVCRjY2MUVGNzZCNUEwQUE5NUY4MzM1Ci06MTA2NkMwMDBGMjRFMTY4MDFGOTNDMUY5QTMwNUIwNDc5RjdCQjI0OUQ0Ci06MTA2NkQwMDBDMkE0NzA2NDgwM0Y0M0ZEMTI1MkNBRkMxMjhERkUwM0I3Ci06MTA2NkUwMDBGRDk3QkZDMkU5Q0Y3ODVDN0U0QjNBN0ZFNjZCNDJFNDEwCi06MTA2NkYwMDAwN0E4RUZBOEFBMDJGODc3MEJGMUY5RTMwMERGMDU3NDA5Ci06MTA2NzAwMDAzRjY5RjQ1RDc3MTdERjRGQ0U5NUI2MTVCNTUwQjgxRUNCCi06MTA2NzEwMDBDQjE1MURGQzMwOUFDQkNCNjNDNDNDNzE5MTNFOEYxN0Q3Ci06MTA2NzIwMDA4QTA2QzAxREFGMTc3MTFERTcwQ0U2Qjc5Mzc3QkQwRTQzCi06MTA2NzMwMDAzQkQxNkMyRUQyODg0REZGRUNFMEYyQjRBRDQxNzNDODcyCi06MTA2NzQwMDBBREZCRUE1N0UzRDE0ODBBQkRBNTczRkE2NENDMEE2M0VFCi06MTA2NzUwMDBGQ0MzMUY0QTIwRkQ2MTlEQTlGQ0Y0MDc0QTJCQjRGRTJGCi06MTA2NzYwMDBGNDlGNUNBMkFFNDFGQzE1NTY5QzkyRTE1QUU2REUyRkU2Ci06MTA2NzcwMDBBNTFFRDc3RDI1NzYzRjUzNEFERjZGQjBENzJEMTQ0RjI2Ci06MTA2NzgwMDA2RjJCMEU3RkJDNTM4MjdEOTc0OUQwRkZGMzg2QThBOTVCCi06MTA2NzkwMDAwQUMwNTUxRjBFRjA3QjQzNTREQ0UwREE1RDVFMDlGNzVBCi06MTA2N0EwMDA4RDU5MTEwREU0QzhCMkNGREU1MDY0MkJEQ0NGRkE5MkM0Ci06MTA2N0IwMDBCQzA1RThFNTJEMTc0NTg5RDI0RjkzNEQ5MjYzOTM5QjE1Ci06MTA2N0MwMDBBOTcwRDNDNkRGOTk1NDVEREFGMUExNDVCRjUyMDk3RUE1Ci06MTA2N0QwMDAyQTI5MTRDOTU4MEFDN0U2OEYxQjM0M0I5REJBRTgzNkVDCi06MTA2N0UwMDA4NEVENUI5RDdDMTNBRkVGNUZDRjdFNUFCRUY4Qjk2ODM2Ci06MTA2N0YwMDBDNTQzOUNGNEMyMUY3QjNDODREMzM5NDlGRjNFNzE4RDU1Ci06MTA2ODAwMDBGRjFDRjRENjM4RkQwQzRBQkY0RDA2RDA5M0U5MEJCQUY1Ci06MTA2ODEwMDBGMTQyRkYyMUFFOTk2MTY4QzcwRDQzMzQ2RDdBRUM2Mzk0Ci06MTA2ODIwMDAzMTA3RjEyMDVGOTA1MTJGRUQ1RUQzMTIwNjdBRTk3NEEzCi06MTA2ODMwMDAwQzIwMkRCRDg2NTNEOUVEMkU0MTQ1QjlBMjdBRTMyQTBECi06MTA2ODQwMDA2OTNBMkE2NDAxRTI5RjczQTU4RDQ4RUZDNzI4QkQ0MUNDCi06MTA2ODUwMDA4RjNENDY2QUJCMkVFNkY2Q0FCRjE2NTVEMThGRUY2QTRBCi06MTA2ODYwMDAzNENCMUI4Qjg3QTIzNzI5N0NENEFGMjM3Qjk4RkY3MjU0Ci06MTA2ODcwMDA4OUU1QkZGQzNERTU5MzQxRjgyQkU3QTlEMUUwRjZEOEM3Ci06MTA2ODgwMDAwQjdDMjU3NzUzOTZBNjcwMTU2RTY0NzYxMzdDQjUxQzI5Ci06MTA2ODkwMDBEQTM2QThEREVCMTQ3QUY5RDFDM0U3NTE0QTEzODdDNzdBCi06MTA2OEEwMDAyM0JEOURGNkU5QjFDMjk3MDUwRkQ4Qjc2MjY2REY1NEU0Ci06MTA2OEIwMDBCMzMzMEM3QTI2NTA0Q0VEMTM0MUZCQjMxQUYwMzNBMkRDCi06MTA2OEMwMDAyNDVFMEVFRDkxQkJFN0UxM0FCRTBEN0VBODFGRUMwQkY2Ci06MTA2OEQwMDA0MTdDN0M1MzRDMzQ5QTk0NjZCRTcwQTQ1Mzk0NjBGRjAwCi06MTA2OEUwMDA0QzcwN0Y2N0QxQ0YzRDJGQjU3QTQ4NEY1RkI2QjgxNzUwCi06MTA2OEYwMDBFODE0QTgzRDBDQ0JCNERCQkQ2QTI5QUZENzFFOEUyOEE3Ci06MTA2OTAwMDBFOTQ0NzVFQkY2MTdEMkZBMDk3Rjk2Rjg3RTZDNjY2MzU4Ci06MTA2OTEwMDA5OEI2NDdDMUFGRDQ5RkRDMjkzRURFMDhGQkIxODgyNzdCCi06MTA2OTIwMDA1QzhGNzQ3N0VEMjM5MjcxMjgxRUVGNUU1QjY2MDk5NThDCi06MTA2OTMwMDBCMUZDMzc3NDlFM0JCQjE0MEEwMDAxM0Y0MEIyQzc4MUQzCi06MTA2OTQwMDBFRTA0QkI0NEY1Q0Q1QTZFRDc2RTI1OTEwMDNDM0M0MzE2Ci06MTA2OTUwMDA0NDhDQUY5RDIxNDcwMjU3RDhGODcwQTdBNEIyNzk1QTRBCi06MTA2OTYwMDA5NUI3MjE3RTZGQzU3NzZGOEJCM0I2QTU3RkVFRDhFRDU3Ci06MTA2OTcwMDA2Q0RGNEUxNjBEODdGOEVERUQzQjE1NUNGRjlEQUU3RDhGCi06MTA2OTgwMDA2QjRDRDI3MURDM0I0ODZEMEJFMEExNTkyMUU4MjdBQzgwCi06MTA2OTkwMDBENTg5MENGMUQ4MEQzRkZDQ0UwQ0Q4Mjc3QzlCREI5NTFDCi06MTA2OUEwMDAwRjI4N0YxOTM2RkRCM0NFOUY1MDYxM0ZGQjRFQzcxNUIwCi06MTA2OUIwMDBDQkFFMjZGMDdFQTI2NTA0RUNDQkIzNDk0QTNCN0E0QkMyCi06MTA2OUMwMDBBQjEzQkU4MUUwNzdDMzRCQzhBNjdFRTE5MERCODQ5NDE1Ci06MTA2OUQwMDBGMUMzQTcyNEMxMTEzN0FDRDcwMjkzMjA2ODcyREVDQjc0Ci06MTA2OUUwMDBBRTY2MDVEMzFGRTY2RkJEODkyNkYwMTMyNTgzRjdBRjhBCi06MTA2OUYwMDA5RENDRjIxQ0I1MzNFMTNBRDA3QjNGRTNGRUU4NTBERjlCCi06MTA2QTAwMDAzQjlDRTZCRDBENUFCNzBBRkM1RjIzOUI5NTgyRDgxQkMxCi06MTA2QTEwMDBBRkQyOTREQUYwNDg5MEUzMDNFNTlEMjM4OUEzNUZFQkJFCi06MTA2QTIwMDAyMEZCNTU4QUZERjQ3M0MzN0I0QUQ3NEM3MTcyNUZCODYzCi06MTA2QTMwMDA2RjIwRDFCNzQwRUVDRThCRDE2QThDMTM3MEI4M0Q4MEY5Ci06MTA2QTQwMDA2NzA5QUUzMkQyMTNFMzI3NDUzMEFGQkY1NUM4ODIzODRECi06MTA2QTUwMDA0QTA3RkEyNzVFNDM3NkQwQkJDNkQyMDM1NDJGNDFEQ0U3Ci06MTA2QTYwMDAyN0EzQzRGOURDMUQ1N0U5NDlEMkI1MTNFNTBCNDNBMkFFCi06MTA2QTcwMDA3NDQ5MDFDRERGMjk4MUJGNTgyNjlGNEVGNkE3RjM1NUYzCi06MTA2QTgwMDBDM0JBMjY2MzI3RDQyRjc1NUNCRjU0MTNFM0MxNTlEMzBGCi06MTA2QTkwMDA1MEJFMzA1RTU3Mzc3RjhDMDk3MEQ0RTUxOTIxRDMwMDgyCi06MTA2QUEwMDAzNTFBMEFFMzE4MkVCRUFBQjkyMDkwODQ2REZGNUQyMzIzCi06MTA2QUIwMDBGN0E4MjA0NzM1NTQ3RkRCRUZERjEzNjRGMUU0NzQ3QUU1Ci06MTA2QUMwMDA1QjIxOUFFMTJGMDFCRjU2NDQzQzQ5M0E2RERCRDZGRDZDCi06MTA2QUQwMDA1MTVDQTg2QzY3RkJBQUFDMjVGREVDOEJFRjA5QjI3ODgyCi06MTA2QUUwMDBGMURBMkQ2M0IzNThEQ0M1QTlBRkNFNzJGQkYwOTM2NzIyCi06MTA2QUYwMDAxRTU3QkI0MUNGM0M3REUyN0E1OEU3RkFGRjI5MTE4RDQyCi06MTA2QjAwMDBDRTdCRjY5OTRDRDI4OTc2MjNBMTgyREQ1OEQ3MjFBNTc4Ci06MTA2QjEwMDBCNDg3ODQzNEIxRkNGOUY3MzI5MTVFRUI5RUYzMjQxNjBFCi06MTA2QjIwMDBEMEY3RDdCREYwQ0UyNDQyRTEzQkJCQTlFN0I1OTFFMDU5Ci06MTA2QjMwMDA0RjNGMkRCMEI4QjhEOTNENjkzMUJEQkY0RTI2QUI1M0RDCi06MTA2QjQwMDBDNTU5MjZDODZDMUY3MkZBNDcxOTJCNDA3RTg1QjY4MzNCCi06MTA2QjUwMDAzN0UzQjhFRENCMTVCMEFCNTYzRjQzNTY5MDVGNjkzRjc2Ci06MTA2QjYwMDBCNERCRTY1MzQyNjJBQzkwMEEzRTk2OEYzOEZEOTRDMDg3Ci06MTA2QjcwMDBFMDNCQTBFMEZFNkY1RERCNUUzNTRBRTFBODY5RkIxMEZCCi06MTA2QjgwMDBGNUM1RUNFRjNEMUIwMDNDRDQxQzkwMUM3RTVDNEQ5QjdFCi06MTA2QjkwMDBENEU5OTk4NEQ3MTM3MDg1MzhBQjMwMDNGODg0RjM0QjZDCi06MTA2QkEwMDBDNzA2OENBRjU2QjczRkYwQTExNDgwRjc5RDdBOEJFMkYxCi06MTA2QkIwMDAyNUQ0MDk3ODdENTMwQTJEODBGNjBGRkUzMTYwNTA1NDlDCi06MTA2QkMwMDA3RDcwRjg4OTAwRTA5NThFQkI0NkNEODIzOEJFOTNCRkJDCi06MTA2QkQwMDA2MUZDMEIzOTdEQzdBMzlDOEVGOURFOUFGNjJENkMzRUM1Ci06MTA2QkUwMDA5NzVFRkMwMDdFMjlFODFCODc4REM4Q0UzQzNBNjkxQjY2Ci06MTA2QkYwMDA1QzlFNzdGREIzRTcxRTM1RTk3Q0E3OUZGQkZEQTMyNkNFCi06MTA2QzAwMDA4NUZCQUVCRkZDRkJBMzVGMDdCOUZDNjdBRjBFN0FCRDg3Ci06MTA2QzEwMDBFNkU5NUYwNjg4OEQwRkQ3QzkyQzdFNzA3NjE0REQ0MkI5Ci06MTA2QzIwMDBEMTdFNjc3RkU1NDk4MDQzNzBGNkE1Rjc0NjFCNzRCREFBCi06MTA2QzMwMDA2N0JGRkZBN0UxMDZFRDVGRjdEMkRDN0M1ODdGRERGMzhECi06MTA2QzQwMDBCM0YzRkJGMzYzODA0RjEzMUUzQjVDMDkxQ0RGMzgyMDVBCi06MTA2QzUwMDAzMDY3RTE0NTdFNzVEMUU1NTBDN0ExRDEwMEU3OTk2MzYyCi06MTA2QzYwMDAxRURDOUZENUQwN0JGNTUzODE0RTFCRDBDRTQyN0IyM0JCCi06MTA2QzcwMDBDNTZGRjUzMzlCM0YwNEZERDAxN0NGRTY0ODExODM1RjA2Ci06MTA2QzgwMDA1NDBEMDY4MUNFRUZDQzQzN0E5MTFFQjQ4RkVFRkUzNUMzCi06MTA2QzkwMDA0NzI5MUQyN0E3QTdEQjM5RjJCMTBBN0FBRUU2OTkyRDVECi06MTA2Q0EwMDA2QzNFMTdERENFQzAyRjU3RjZBNURCNjYxN0REQ0U5MTAzCi06MTA2Q0IwMDBCQjFFMkI4MEM0NkJDNzMwNDcxRUMxQkFGNkM2Q0YyMzlDCi06MTA2Q0MwMDA1OTkxN0VGNDgzMjVGRjAzRTExNUYzMkMxNEFFQTU3MkQwCi06MTA2Q0QwMDBGODFCMzJDOEQxNzMxOTQ5QkEyRTAwQkEzRTdCNkUzNDA0Ci06MTA2Q0UwMDBBMTdDRjFCRUQyNzMzM0Q4ODM5RTk3M0NGQTNFN0E3RjYzCi06MTA2Q0YwMDBERDRCNkZBMjVDOUQ3REZFNzVENTQwM0I0NkZDMDJGNUU5Ci06MTA2RDAwMDAyQkNGOTJFNENGNjFGMDMzQUI5OUNGNDk2QUY2Njc3NjI3Ci06MTA2RDEwMDA3QTAyQkRGNEE5NEUyQ0FDMzQwMjc4RkYwNERFNEYzMDY5Ci06MTA2RDIwMDA3RUFGNEUxQzVDMjJBNEEwRDdFQkYyMThBNkZGMTM3OTBECi06MTA2RDMwMDA4ODk3MERGQjdGQTMxMkJGOTM4RTQyMTlEMEYxQzQzQ0ZDCi06MTA2RDQwMDBCODlGOEU4RUQ2RkE3NTU4RkY0QzFCM0RGNzMzMzk3NUI4Ci06MTA2RDUwMDBGN0FGQTZGMjA4RjYyRTQ5RDc4NEYwMjY0OTIxOTc2N0E3Ci06MTA2RDYwMDBGNzdBNjRCMDc3NjdDMUFGNEE5OTM3NjVGRUNDNTBGM0M0Ci06MTA2RDcwMDAyQjNGOTM5REY1NTdDOUZDMEFDNzQzN0FGRTYwRjIzRDRECi06MTA2RDgwMDBEMEZBODY4QUJGMUZDOTA2OEVFQkM2RTNFOThGNTNFQkE0Ci06MTA2RDkwMDBGQkY3QjhCRUE4MjY2NkU1ODg0QkZCRkEyMTMyODk5ODM2Ci06MTA2REEwMDAyMzhCN0FFMTNEMEQxQjU0Q0E3RkE3OUY5NjMwMUVENERBCi06MTA2REIwMDBEMjdFMDhGNUI2NUI0RjU0QTc4OTZGNUU5MDk5OUY1MEJECi06MTA2REMwMDA3REUwRTAyNEQwNjdBNzVGRkUxMUYyNjdGNTMzMjc1NDFBCi06MTA2REQwMDA4ODE3QkZENkY2MDNCNUJCQjQ1NzFFQzAxRTI0NkNGNjg5Ci06MTA2REUwMDBFMEY0NzcwRjRFNjI3QTgwOEU5RjgyNEU4QUMyQzZBRkUxCi06MTA2REYwMDA3OUQxMzk3RUNEMzMxRjNBQzY1RjZGQjZBMzdGMzBEMENECi06MTA2RTAwMDAzQzFGQzhFMUU1QjBERTBGMEUyQjA0RjRFODA3RUQ1MjlECi06MTA2RTEwMDA2NTJBQkZGNjAzNkUwRjJEM0NCNUJDM0VFRjM3OTAwN0Q5Ci06MTA2RTIwMDA5Qjc2QzQ2NzgwRERFQ0Q4MTRDRURGMEVGRURBMTE4NUM4Ci06MTA2RTMwMDA4MERFMjY3MkY4RjcxRURBRUU3OERENjc0MDdFQkFFMzcwCi06MTA2RTQwMDBDODMyQzlCMEVENDM3RkU4QzJFN0NDQTNFNkVDNEMzQUM4Ci06MTA2RTUwMDBERUNDRUVDODM0NzA1MUREN0FBM0VDMzhERDU3RDlGOEJBCi06MTA2RTYwMDBBMEVFRjVDQTdDRDBGN0IwMEYzNUM2QzM3Q0ExMjBFQ0VDCi06MTA2RTcwMDA3M0E1QzBCQzRBOTZCRjE2NzU2RjRBN0JDREM2NTNGQzNFCi06MTA2RTgwMDAxMThDNTcyOUJBOTg4QzkxQzFCODIzNDlBMjExRTJBQjUxCi06MTA2RTkwMDBDNEVGNzdFNzI3MjI5QTNEMEZCNUUyRjA0MUQ4NjJFNkNBCi06MTA2RUEwMDAyRTdFQjEwMEM2MDk5MDk4N0UxMkZENEYxMkJBRDg4RjdGCi06MTA2RUIwMDBGRkU1Q0U0NzU4Rjg0Q0NBNUY5QUZDNDQ4NjdFNzNGMEQzCi06MTA2RUMwMDAyMEU5M0I1RURGM0M0QzU0ODNGODc2OEI3RjZENkI5MTAxCi06MTA2RUQwMDAyRDBGRDMxMkVDOTM4Nzk5QUI1MDNDQjQwQTI0NjVCQ0I4Ci06MTA2RUUwMDA3NkJDNTIzMTVGQzlDM0RENzEzNEQ1RjM5QjE0MjY1NzhDCi06MTA2RUYwMDBENzkyRUU3QkQ3MDA5QzExOTZDRjk5RTVDMkQ3OTczOEYxCi06MTA2RjAwMDBCRUZFNzkzMjVEMzg1NUExRTVFMDU5NTFGQ0NFNUUxMkU2Ci06MTA2RjEwMDA4RTI5RjRGRURDNTUzRDk3QkY4Q0RENzkzRUM3MUMyRkQyCi06MTA2RjIwMDA1RUNDMTgzQ0ZFODY5QUI3OEI3ODE2RERBRTBDMjI2RkNECi06MTA2RjMwMDA5NzJFN0ZEQzBCODdDOUY3RTMzOThFM0NDNkExQjdFRUVECi06MTA2RjQwMDBEN0JBMzFDRjUwREI1QTY0OEJGQjBERUZGNDkyMzBFNkE5Ci06MTA2RjUwMDBGMTBDRjQwRjg3NzdERUY5Q0REQjIwRUU5QzVCMThGMkE1Ci06MTA2RjYwMDA5MkJFRTNDODE3QUVDNkI4OTE5NUNGOTcwQkMzOUQxMERDCi06MTA2RjcwMDBFRjk3NzVBMzVDQzI3OTk2ODcyMUJGQjBEOTYwRjk4MjdCCi06MTA2RjgwMDBDREMxRkVFMzdBMzM5NDY4QjM4MkYxQTg2QjcwNUM1MTkzCi06MTA2RjkwMDBFM0Y1MDc4MzVDRTczNzE2MDcxMENGMDE4QTY3OTA3NzIwCi06MTA2RkEwMDBEQ0ZGQzBGQThFMEIzQzZGREU2RDRBOTAzRjNDOTE4RDRBCi06MTA2RkIwMDBGOTgyODA0QzRBMjAxRTcwNUVGMDg1MzY2MTNFQzE5OTkwCi06MTA2RkMwMDAzNzRGQzdCRkRCNjUxM0YzRTZBRDQ2OUZCQ0Y5NzcxNEI3Ci06MTA2RkQwMDA1QkJFNDE0QjkzMzdEN0ZDNEIzMDZGQUUxMTlCQkY1QjExCi06MTA2RkUwMDBENERCQUY1N0VFNUM3OTczMTgwQkUzMzJEQjY3NDM1QzlECi06MTA2RkYwMDBBNjM5OUIzOEYyRTZDRDIwRjg1NzExRjI5QzcyRjU2QzU5Ci06MTA3MDAwMDBBQzNCRjNGMkU3RTZBQ0Q5NjE3QjlCMUM3RjE5REIzQzIwCi06MTA3MDEwMDBGRUY0QzdFNjczOUJBMDdGRUU0ODUyOEI3NTZBNzI4NEJDCi06MTA3MDIwMDAyQ0I1RTlDMUY3MTQxNkE3RERBMDg0N0ZBOEQ4RUI4RTk0Ci06MTA3MDMwMDAzODNGNThGOTlGNDM2RkJEODc3QzA1RDczMTE0QUZDRERBCi06MTA3MDQwMDA5NEFGM0NDODU3QTc4ODVEQUY1QTU3OEI3RjlBOERGRTg3Ci06MTA3MDUwMDBGOTQyQkQzMDA1RTM2NkM5NzZEMDQ0QkUwODA0QTNFMTE5Ci06MTA3MDYwMDA3MDhBRjcyNjc5OThEQzVCRjMwNkNBQTgxRUE1RjJBNkZCCi06MTA3MDcwMDAxODExQ0M0N0E5M0FEREYwMUE4Mzg3M0YxRDVDMTY5RjkzCi06MTA3MDgwMDAzNjFCNjM1ODFEOTQ0RUIwN0UyRkZEM0FBNkIxMzgyNkFDCi06MTA3MDkwMDA0NEI4Mjg1Q0JCNkVCQzNERDQ5RjlGNjNBRDczODYxMjIxCi06MTA3MEEwMDAzRTY5Qzc3QkVFMjVBOUVCNzdBQjU1QjZFRUU2QzgyQTVECi06MTA3MEIwMDA5NjVGQUY3MkU2NTMyMTdENkQ4RkIzNEUxN0EyRkZBRTgwCi06MTA3MEMwMDA2MDlDOTBFNTUzNDUyREMyRjMyM0E2MTUxRjBGMjZFM0MwCi06MTA3MEQwMDBFMTA2RDQxOURFNjU4MjNFNTQ1NkI1OUIwMjVDNzM1OUI1Ci06MTA3MEUwMDAzRTI1NTc4QjdFQUNEOEVDODNBQzc3MzNCOTc1RTUwNzdBCi06MTA3MEYwMDBFNzRBQTc4Nzg0NUZBQjJFNkU2QjgzOEU3RUZBOTY4NkY3Ci06MTA3MTAwMDAyMEI2MzczNzE4Nzg2RDY5MDhFMzdEMzcxRDlCOEQ5NzVBCi06MTA3MTEwMDA4M0I3NjA1RDlBMEZFM0IyRTlDNjdGQjAyMTg0RTNDNDEwCi06MTA3MTIwMDAxQUNBRDg3ODNDNkY0RTQ4NjYxM0YwOTUyQTVBRjIzMjQ0Ci06MTA3MTMwMDAwQ0RCN0U4OTNGMzcwQjlBNDBGRUI2MEJFQ0Y5MzUyRDAwCi06MTA3MTQwMDA5N0EyQkM1OUZDQjNDM0U4M0YyRTJEMjU2NjIwMUYwQzI3Ci06MTA3MTUwMDA3NUZDQkVGQ0ZBMTM1QzY3RjMyQzNGRUFENzgxRTQyODg4Ci06MTA3MTYwMDBBQjkzQ0QzQkQ4Nzk5NEE0QkQ2MEYzRUM5OEE1RTEzQ0ZBCi06MTA3MTcwMDAzQjcyMDc5ODI3Q0VFNjE5MTg3RTg2QUY2RDA3NEY2MUUwCi06MTA3MTgwMDAxRDgyNDJGOTAxNTQ5NEEyODc1M0Q3RTk3MTc5RUIzQkYwCi06MTA3MTkwMDA4RTA3RjU3QzczOTBENTg1QTlDNUZFMzAyOEZGNjY4M0UwCi06MTA3MUEwMDBFNzFCMEI1OUJFNTEyRDE5NUUwMUY3RDVEMDY1NTgyNzQ1Ci06MTA3MUIwMDBBRTk2RkEzMTlGQTcxNjBGQkYwNURBREIwRTZFRDEyQjA0Ci06MTA3MUMwMDBDMDdFMTQ4QTIxQUYwMTc2QkI5QkM4QjkyODM2MThCRjkwCi06MTA3MUQwMDA1NThCNEI2RTgzRkUzQUM4MzE4NTYzOTQ4N0VEQjdENEU3Ci06MTA3MUUwMDBFMkFCRUU4MEY3MEY0RTc5Q0Q2OEEyRkQ5QjBCN0QyMUJGCi06MTA3MUYwMDAwRkM4NUJCN0VDRTBGRjQxRUI4OTQyNjcxRThEQzg1NEI2Ci06MTA3MjAwMDA1RjUwRkRCNTZEQ0FFRDI1Mjg5RjlBQUQ0RTMyNDVCRDQ0Ci06MTA3MjEwMDBBMDRENkY2QzUwNkQ3QTQzMjU3MzRDQzA0MzNBQkQ0MzBCCi06MTA3MjIwMDBFREVGN0Q2QTVFREY3MUFDRjczNzI4OTE3QTE1RjU0Mjk0Ci06MTA3MjMwMDA4NDM4RUJERDUzRTdCMzJEN0E4MDlCMDVGOTQ4Mzk5ODA0Ci06MTA3MjQwMDBBQ0QzNUI1MDMwQkMzN0JGNkRENUU5QjlGM0RBNzFGQTE2Ci06MTA3MjUwMDAyRjU1NUVEQjVEN0ZGRTU5RDVFOUVENTQ5Mzc1N0FBMzFBCi06MTA3MjYwMDBBMDRFRUZDNzBBMDk3NTQyNUVGRTk3NTI2ODlGRDE5N0ZDCi06MTA3MjcwMDBFRkRDRTNCOUNGNUI1MEZGNDc4MzdENEUzQUI5RkM5OTExCi06MTA3MjgwMDBFQUNDOUYxNjQ0NUQ3NEJGRDVFQjk4RUYxNTkwOTdEMjZBCi06MTA3MjkwMDA4MUY1Q0JDODJBRTczOEEzNkE5RDc1QjU5N0Q0RTczODNFCi06MTA3MkEwMDBEQTQ1RTYwODQ3RkY0QjVCQzczODlFOEY4RDVGRTY3ODZGCi06MTA3MkIwMDAzRTdFRjc1NDQ3N0I0MkUyMkE0N0ZGQ0JEQjJBMUNFRDk4Ci06MTA3MkMwMDA4OUVERDczOUZBNEYzRUIwQzhEMTlFRDJCOUQyRDFGRjlECi06MTA3MkQwMDA4QUFFQjU4RUU3RDMwRkFGNzMzQzlGNzlFQzFFNDdGQkE4Ci06MTA3MkUwMDBDQUVFQUYzOUZBRDc1Mzc3NDgwNUI5Q0RFNTc1QzhCOUI1Ci06MTA3MkYwMDBGOUEyM0Q0RkRCOUE0N0VEMTJEREU3RUZDOEEzMEM4M0ZGCi06MTA3MzAwMDBGMTZGNTZEN0E1QjJDN0M5QkNBMUZCM0REOTUwQzMzQTRFCi06MTA3MzEwMDBFNkZEQzdDRDgxMkI5MUVCRDA5RUNBQzZGMDBBMDNFRkU0Ci06MTA3MzIwMDBDRjk4MDc1NzMyQ0Q1OTVGQUIxQUFDM0UxOUY2NzFDRUU0Ci06MTA3MzMwMDA3QTAxNjc5REIxMkE2REMzM0M5REU3Rjg5N0JCODQ0OUVDCi06MTA3MzQwMDA3REU5QUExNjNBRTU2MEIwNzVDQThBRTE3QTZGODg3MjVCCi06MTA3MzUwMDA3MURFOTI4QjUxNTQyRTMwRkVGNkIxODRFNzVBRTY2NDBBCi06MTA3MzYwMDBBMjdGNjFEQjRGMjExRUFERkRENDM1MUE4OTgxOEI2OTY3Ci06MTA3MzcwMDBDOTQ1RjlBQTlFOTFBRjYyMzc2QjFGRTUxMTg3NTIxNzc1Ci06MTA3MzgwMDA2N0M5NUZDMEE2Rjc2MUJGNjJFOTk5RTZCMkMxRTk1Nzc0Ci06MTA3MzkwMDAyOTcxODVDMzlGNzQ1RjlCMDJFQkQyRTlDNzAyOEZDRDMxCi06MTA3M0EwMDBCRjc3RUJDNzE5NEFBNDEwOUU2QjcyRDgyNEI2NzgwRDJDCi06MTA3M0IwMDBBOTU1MUM3MDBGMTZDRTRGNkEwN0VFQTIwQzQ3NTJFODczCi06MTA3M0MwMDA3MTk1RDQ2MkRENTVDQjhBMzAwNjAxNDgxRDcxRjBFOTE0Ci06MTA3M0QwMDBDRUM1RkZBMzBDQzZBNTdFRTEwQ0U3M0E5OTVGRThGNjlGCi06MTA3M0UwMDBBN0E5N0U0MzdGN0EwN0Y1QTdEMURFQjlGNDIzRDU1MzQ5Ci06MTA3M0YwMDAyNkFGRkYzMjk4MUZDMUY0QTE3QjlEOUY5NzFGRkQ2RkExCi06MTA3NDAwMDBFMEFDRjY0M0FGNDA1MUE4MTJGNzg3NzkyMjgxRkQ2MUM1Ci06MTA3NDEwMDBGM0FDNDgxMEUyNzM1NkREQkNGNTVFQUJFNzUyMUMyN0I3Ci06MTA3NDIwMDA5NkFCOEExMEJGOEM3NUNEQzU3ODdEOTMxNkQ1NTg5RUM2Ci06MTA3NDMwMDAzODhBRTMzNDY1OEI3QUFBM0FCMTNBMEZDQjE3NkJGNUU5Ci06MTA3NDQwMDAwRjhDRERERjRGREM0NTUzNDkzNDU1M0M2REE3ODdFNTk0Ci06MTA3NDUwMDA4MzYyRkFEQTJFQjBBMzk5NzlBQTAxN0JFRUQ2ODNBN0NDCi06MTA3NDYwMDAyMjEwNDc5MkNCNjQxREY2RUI4NDAyRjM4RTJEQkY0N0FBCi06MTA3NDcwMDA0ODE0RTM0QzVBNTA0NEJCQUJENUVGQzBGOTA3ODJGNzMwCi06MTA3NDgwMDA2NjhGQzBDRjdENkNFOTE3NUVBRjlBM0FFRTkyMEVERTQyCi06MTA3NDkwMDAyRDAwRUZCNDgxRTFGNTAyQkM0NTMwRkYzNjlDQkZDNjNDCi06MTA3NEEwMDA2M0E0QzRCRjQyQzI5NUIzODE2RTI3QkUxQ0MxNzQyQkI2Ci06MTA3NEIwMDA2NTFCOTA4RjFENjU2QzVGNEUwRDgxODNCRkFEN0QwRThBCi06MTA3NEMwMDBFNUVGODczRDc5NThCRjhBN0M2RDlENzNCOEQxQTNFMzAyCi06MTA3NEQwMDAzQzE2NUQ0OTYxMEVDNjM1MDJEMUQ4RDg2MkNBNkY5OTkzCi06MTA3NEUwMDA1MUI2OUZFRkQ1NEY4QzhGMzI5NTMwODE3ODk2RUMxNzNGCi06MTA3NEYwMDAzMTNGQThGMjc4ODhENUVGMEYxQzlGNERCM0JBOTE1RTRCCi06MTA3NTAwMDA5QkFGOTRDOTI2QTFCN0NFM0E1NjQ4RDczNUI5Nzc1RDE3Ci06MTA3NTEwMDBGRkM3OTNDREY4OTNDRkVCMjM0QkIyQjAyRTQ1N0EyNjFECi06MTA3NTIwMDBEODlGREVGNjcxN0NCOUY1RjdGNzNDNUM3RjE3OTAwMkM3Ci06MTA3NTMwMDBBNkJGNEI5NzQzQkUzQkREMzg2RTNGQTY5RUM3Nzk4N0ZCCi06MTA3NTQwMDA1RTVGQ0ZDRjE3RjhFRkU5ODIzODkzMTVFNzIzQzE2OTYzCi06MTA3NTUwMDAyOUUzRjJCRDc4NjVGOUNBNUVGQTJFMzczQTI5RkRFNENGCi06MTA3NTYwMDBFOTUzMzE0RjZFOUQ1N0EwRUFDQzU5MkZDQ0U5NkJEMTJFCi06MTA3NTcwMDBENThBQTM5MzIwOEIxRjU5NzRGNjI2RjFCOUE3NUY3Qzk3Ci06MTA3NTgwMDA3QTQxNUVBRUU4OEJDRjVGNzk3OEJFRTFCRjE4M0U1RjhGCi06MTA3NTkwMDAwMTlGODY1RTMzMzNEOUY5NzQ3MkU4QUIwNEYzNTI4NUU4Ci06MTA3NUEwMDA0RTM5QjRERUIzRjhEREJERkUzRkZEMTdFNTI3NkJGREI4Ci06MTA3NUIwMDAxNjNGQTRFRjZGQTZEQ0Q3NThGOUQ1NENDRTZGMUE5Q0I2Ci06MTA3NUMwMDBCMkEyOEFFN0Q1QjJCNzVCMkY4NUZENkJEMDhGRkJCRTI5Ci06MTA3NUQwMDBDQ0IyMTg5RUVGNTU4OEE5ODM1RUM4QjRGNjM1RkNCQ0MyCi06MTA3NUUwMDA5MTU1QUZFNDJCNzVGQTY1OUE2QkZGQTJGMkJBQTgzRUVCCi06MTA3NUYwMDBFNzZEQjlGRkU2M0U0Nzk1QzRBRjhCNUU5M0I1MzRGOUFFCi06MTA3NjAwMDBCMTQxOUUzRkRBQzVGMzc1MDU3NUYxNDZEODBGMTdEQzE5Ci06MTA3NjEwMDBDQUVBRkRGNzI4NjQzNUQ0NTc4RUE4MzI0NTVGMkVFNEI4Ci06MTA3NjIwMDA2RjhBQkU5RjQxRDc1RkYwRTI0MzhEMjM4MTI0QjcxQTUyCi06MTA3NjMwMDA0NUUwNjYzQ0EzMTkwRTNCNUM3MDU3QkNEQ0M3OUU0RjBGCi06MTA3NjQwMDA4MTcxOUVEMjk4REUyREE4OENFMzM5RTdBNkU3Qzc2NzQzCi06MTA3NjUwMDA4MTlGRjBDQTVCQ0I3NTg4MEY3Qzk0NUI4Q0ZCQTczMzUyCi06MTA3NjYwMDAyRjc4QzJBMEZGQ0ZFNDkwMkFBQzBCN0I2MUU2NkJFMEUxCi06MTA3NjcwMDBDN0ZGQkVBMTJCNDdCNkYxQzk5OUVGQkUzRTQzQTE0NDU3Ci06MTA3NjgwMDAzQUYzRENFQjMzNjQyNDU2QzIzMUZGODY4QkJGOTgwMTlBCi06MTA3NjkwMDA3MDlCMTVBNEE0MTZGMjc3QkE0QTYwREMxQThERTVDQjZDCi06MTA3NkEwMDBBQzdBOUY1REMzRDUxNkI4RkVENDlCQ0RFMjg5RjlFMkQyCi06MTA3NkIwMDAwRTY4RDc0MzQwMENGQzA2MUVDRkJGRkFCNEIxMUNFQURCCi06MTA3NkMwMDAyRkIzQkIxNDAxRUFGMTFFMTI0Q0QzNEZBRkU3NEYzQzZFCi06MTA3NkQwMDAyNDgwOUZBNTc2RDY0Mjk4ODVERTBGMUQwMjk0OUI2Mzc5Ci06MTA3NkUwMDBEOUJFRTQ3QzExMjkyOUEyN0FERjc3Qjg3NjNDRkFEMzk3Ci06MTA3NkYwMDBBRTdBMjc4QkZGRTVEOTA0RjM3RDNEMzc2QTA5QjBENzExCi06MTA3NzAwMDBEQjY1RTMxQkFCQzA3RUFGOTJCMTFFNjdCQjdDMThFNUE3Ci06MTA3NzEwMDBDMjREQzdFM0RFMzFDRUZBNUMxRThGM0VGNEQ2MURGMUJBCi06MTA3NzIwMDA3MkZBRkUzRDUzNDRFNDU3RkY4OTI5NTkyNDg1RkM2RUMzCi06MTA3NzMwMDA2RjI4QzNGOTAzMDU2RjU3OTYwMzU4MUZEM0JCMzM3QURECi06MTA3NzQwMDBGNzQ5N0U5OTk4NTlENDQ0MkE0NUEyQTk1MEJDRjhDQjUwCi06MTA3NzUwMDAwODc5REJDNjc3MkQyMjA5RUJGNEY5MEIwRDA0QzdFOTk0Ci06MTA3NzYwMDA2OEQwRjBEQUQ2QTA4RjJEQTYxQjgzNkYzNTA0RjFCQTRFCi06MTA3NzcwMDBCM0MxQzBFQkMzMEQyNUY4RkNDMTg2OTA0M0VFNjFCRURBCi06MTA3NzgwMDBCNzRCNzgzQjg1QkZGMjc5NUQxRjY4QTBGM0RBRTBEODhDCi06MTA3NzkwMDAzNTkxNEEzREE1RDcyRTlFOEY3QUEwNzQ2QUQ2REE3RTlGCi06MTA3N0EwMDBFMjYwN0IxQUJBODZDRDE5Q0I5MTA1RjVBNjc1RkFERTkzCi06MTA3N0IwMDBBREZEQzBCRkE3NTE1OEJEMDhGQzlBQkJFNUM4M0VENDdCCi06MTA3N0MwMDA4RkQxODI0NTM2RkQ0OEZEQjYwMjQyNTlGMURFOTYxMTUxCi06MTA3N0QwMDA3M0U2MTRBMDNDQTJCQzRDM0IxQzQ1N0ZCQzIwMTgxNzkwCi06MTA3N0UwMDAyMDhFNTg3MDk0RERCN0NFNUIyMEJEQThBMEZEMzA3NzA5Ci06MTA3N0YwMDA4RUEwODBERTJDMjVFRDAwOTY1QTFBMjUxNUI0RkZDQ0ZDCi06MTA3ODAwMDBCQzI1RTU3MDlGNEM3NERFOUZBMTMyRjk4NjcxMkJFODkwCi06MTA3ODEwMDA3NUI2MTZGOTkxMzYxREJFRDNCMURCN0M5NkFFRTc4RkY3Ci06MTA3ODIwMDAxRDFFMDNGMjNDMEZCRUZDMjcxNUY2MDVCMTVGQTkxQTE5Ci06MTA3ODMwMDBGODMxMDUyRjlFQzBCQTg3OThEMEFENDI2NUVDNzFBRDg2Ci06MTA3ODQwMDA3QThFNENGNTBDNkUwNjMxQkU0QTE1MEJFNTkzMThFODlFCi06MTA3ODUwMDA1ODhDN0ZGNkM0RTZGOEUxQkM0QkY0OTRCREZGMkU1Rjc0Ci06MTA3ODYwMDBGNDZFN0U3MjI0QUMwNTI5MUYyNUYzMTdFQjYzNjFCQTExCi06MTA3ODcwMDBFOTdDODFFNzJGOEU2QkVCNjI2NjIxQjQ2OUZGMjlBQzRFCi06MTA3ODgwMDAxREEzRUZCRjkwMUQxRDI5NjY0M0QxNDU1NUFDRUI0QkExCi06MTA3ODkwMDBEMEI2RkE1N0M1QTBERUY2NERBRTc3ODgzRjVBMDRGMjRGCi06MTA3OEEwMDA5NjZDRUJCNDlENjk2QkNCQUM0RDM0NzZCNUQ2QkJFMTMxCi06MTA3OEIwMDBEMDlGNUUwMzNENTdGREEyRDAwRUEwNTFCREM3RjA3RjAzCi06MTA3OEMwMDBFMDIxQUNCQjZENkJFOEQyNjMwQUE3QkY0NTA3MkE5MkUzCi06MTA3OEQwMDAxMzgyMDRFQkU5RDQ4NDkwMTg0M0Y1QzcwNEZFN0Q4QTMzCi06MTA3OEUwMDA4MjY5NjFBMzExRjQ2QjQyMDk4MURFMENGOTk4REYzOERCCi06MTA3OEYwMDAyMTQxQzdCMUM5RDU4NDM0REY0MUMxQkMyRkQwNzExQjMwCi06MTA3OTAwMDBBQjFCNzZGM0Q3QjM1RTk2MUZBODI3RTY1NkM4ODM5MUM0Ci06MTA3OTEwMDA2NzE0MURGMzkxM0M0RTc5REFCMjczN0NCRjdBOTc5NzY2Ci06MTA3OTIwMDAzNTk1NERBNkVGMzJEMDNGNkI2NDhDODNBRDJGOEE5NzhGCi06MTA3OTMwMDBBQjc0OUVGNTNGMkEwQTUxQ0IwQTc5MjVBQzZCNTg5RjUwCi06MTA3OTQwMDBERDNFN0MyQUNCNEIzOURBMEZGMTNBREE2MEI2OTkwRDdECi06MTA3OTUwMDBFNzA3QUEwRjNDMzQxQUVBMDJBQTQ5RkNFNkFGMDFCQ0M5Ci06MTA3OTYwMDBGRkNBRjI4RkE3MEU1RTk5NzUzNTZENkZBMDZEODhCRjQ3Ci06MTA3OTcwMDA2RUU4Nzg1RDhERDI3RUMzMzhEQ0Q1MUQ1M0FFODNGNUJECi06MTA3OTgwMDA1NTZGMTM4OTU4QzRFNDMzM0M5RUUyMzkxQ0JGNENBNkEyCi06MTA3OTkwMDA3QzcyQ0RENjkxNzNCRDk0Q0U0RjhEMDlFQjIyRTU4M0Q5Ci06MTA3OUEwMDA5NUJFNzFDRDFBQjQ1NTdEMDJDOENENEFERkM0NjZFMERDCi06MTA3OUIwMDBBQkY1MTNGOUY3MUFDOEM0NTdDMzMyQUY5N0EyN0MzMTlECi06MTA3OUMwMDA2QzRCNDMwQ0VBMTNGNkFGQUNCQzBFQ0NFQzcwOTFDOTE3Ci06MTA3OUQwMDAyRDY1NDRDQzFGNEFEOTMxQ0M1QkZDQTE5OTlENzc4MUEwCi06MTA3OUUwMDA5NEZFNDY0QTg3NjI5OTc0QzlGNEJBNEI2NUY0MzM1QkQ2Ci06MTA3OUYwMDA2NDhDMTdEM0ZCQURDQTU0QTA0QjNDOENFNzJCNUE5OTJGCi06MTA3QTAwMDBERTFGRkJBMjA3RTNDRUM1QjVFMTNCRDEyRkQwNEI3MTAyCi06MTA3QTEwMDA5RjMyOUEyNDdGMzAyRjdEMDlGQzQ2QzcxOUFGOTM3MjlECi06MTA3QTIwMDAzODg3RjA2MzJGOEIxNzE2QUY1OEI2MUVERTkzMzI5NzQ4Ci06MTA3QTMwMDBGODcwNUYyRUIxNzM1MEU0REIyQzRFQkQ0QjRDQjQ2QjMxCi06MTA3QTQwMDAyMEU3ODE2MkE0RUZBRTAwRTMwQkYzRTE1MkU0OEJGRDhCCi06MTA3QTUwMDA2MkM1NjU3NzQzNUM1MjU4QjNGNTVGODBBRUQ5QzUwNDAzCi06MTA3QTYwMDBFODBBRjdFRkExRjdGNzczN0E0QUQ5MjExREU4Qjc5RjIzCi06MTA3QTcwMDBEMzMzOTYxMDREQTg4RkIxRUVCRjIwQUNCRDEzRTQ2RDhCCi06MTA3QTgwMDA5REY3RjkzOTFBQzVFQjcwNEYzODNFOENEMkUxNEVFRkI1Ci06MTA3QTkwMDBGM0IxNjAwMUQyNjE4QzQ2RjE3RUU3OTY4RTk4MzY4QTBBCi06MTA3QUEwMDA4RUQzMTgxRUExREJEQUUzRkY0Q0JEMTFDQzRGNzZBMEJDCi06MTA3QUIwMDAzQ0NCRDkwRkFGMDM3OUE3Q0Y1RkQxRTgzQTlGQ0FFMTlBCi06MTA3QUMwMDBGQTgyM0YyRjFFOTNENDFGNjE0MjZEOERENEQ4QUI0RkU1Ci06MTA3QUQwMDAzNDZBMUY4QTZERkRFNzUwN0RGMEU0QTNBQzhFRkQ3QTE5Ci06MTA3QUUwMDAzQTFGQzgzQjVEMDdFNjdGN0IyNkM4MDlBOENGRjI1MTQ1Ci06MTA3QUYwMDA1OEMwNkZGMTREMUM4M0Y1Nzk3NEREMDRGQzkyOUU4OUFBCi06MTA3QjAwMDAzMkRBNTkyQjhFRUQ5OTIwNjI3QzA5RkEwMzNGRjg0NjUwCi06MTA3QjEwMDBCMUZFNTQ1MDIyQTAzN0U1NDIxOUY3QUJCMkI0MjczQzZFCi06MTA3QjIwMDBDMTgwRjAzMUNCRUIwQUZBNDIzQ0I3RUEyREIxRTU3MUU2Ci06MTA3QjMwMDA0OTZGMUQzMEI2OEJGMDMzMzc4RUY2NTg0Rjc3ODE0ODNBCi06MTA3QjQwMDBGRENBRENFMzBCODVEMTc0QkMzQkJDRENERkNFQTVGRUZCCi06MTA3QjUwMDAzNkJEQkZERUNCRjREMkZEMTFGM0NCMTBFMjIwNDY3NzY5Ci06MTA3QjYwMDAwMUVBMjcxMjk5MEFEN0ZDOUI4QUYzQTNGREQ4QTVCRTg4Ci06MTA3QjcwMDA3RTc1MzdGQTBGM0JGQ0E5Q0Y2OTRFRjdCMUZEN0M5M0I4Ci06MTA3QjgwMDBGRjg4MEVGQzU2NEZBOEZDODM1Q0U4OENERjJDRkQ2MTVGCi06MTA3QjkwMDA5RDRGNzBENzEzNUJGQTQ0Qzk2NjZCQUM5QjVGOTEwRjI2Ci06MTA3QkEwMDA3QTQwRTZGNTQ5QjIxRUQyQTFCRUIyM0M3MzFBRkE3RDA0Ci06MTA3QkIwMDA0RjdBOTlERTkzMEU1RTc5MDM5Q0QzNTBGRjk1RTU4NTRECi06MTA3QkMwMDBGNjc4QTMxODRGRUEyOTIwRURDMEFGNzIzMDRDRUNGOURCCi06MTA3QkQwMDA1RjRCMUZCNDM0Njg3ODdENjJFQUI4MEE5MDkzMjdBNjk5Ci06MTA3QkUwMDAwRUFGRDBBOTBDMUM5QUY0RTMyRUM4MzM5RERCQzNFNDdFCi06MTA3QkYwMDBGN0RDRTFEQkYwRkNFMzM5OTNDNTlCODBBRDMwMkVEOTk3Ci06MTA3QzAwMDBGOTA4OUVENzdENUM4RTNDODg3NUI1NTAxRjQxNDFEQURFCi06MTA3QzEwMDA5NkVEQUNERjJBRTY3ODMxQjk3RTZBNTZEOEYzQ0QwRDAxCi06MTA3QzIwMDAyQzdFQUM1RUI4MUNFMzVBMkFEN0UzOUVFOEFENzg2RTkyCi06MTA3QzMwMDBDMzQzNkQxOTlDQUZENDg4NjlCMkVGMUQzMDNDNjg4NTkxCi06MTA3QzQwMDBDRUVGNjFBODE3MjZFMUZCQTY5N0M1OEZBQzdBMTE3NzE2Ci06MTA3QzUwMDA1RDg4MDVDRjBDMEU0RkRGNzMxOTRFN0E1OEZCMkY4QkMyCi06MTA3QzYwMDAwRUQ2RkI3NTQyMzg1RkVGODc2RjZBMkU0ODI0NjE4QjEyCi06MTA3QzcwMDA3RkY0RDY3N0FCNzhGRjJDRDRDNTY3NDExRDRGMzQ3RTk3Ci06MTA3QzgwMDA3NTExQzg0MTAyRjc0NzVFN0YxRDIxRkNGQjRBQzhBNzVBCi06MTA3QzkwMDA0MUI5Qzc1RTg3OUVFMUFBOEJFRjIzMkY4NkIzRURBRTc1Ci06MTA3Q0EwMDA4QjU4MEZDQ0MxRUJGOEIwOUU1NTI2REYxNDI4QkRDRjAyCi06MTA3Q0IwMDA2NEZDNzYwNkY4QjUzNTU0M0Q2ODEwMjA5MjREMURFNkZCCi06MTA3Q0MwMDAzRkNCRkQ3REY5QzVCQkMzMjMwRDFCOUYwQjg2NjM5Rjc3Ci06MTA3Q0QwMDA1MDdENjAyMUM2MTE2QUY2RkJCMURFQkYxQUY0REY2NDg1Ci06MTA3Q0UwMDAzODM3NjA3Njc5MUNFNzA1QzI5RDUwOUZBNzFDNjBFMzdBCi06MTA3Q0YwMDAzRDA5RjBEMEZCN0ZENEFCMEE2MEREQzc2MUZGOTMwNzdECi06MTA3RDAwMDBGNjI0MkFCMTQzMkY4NzExMEYzMTZGRjgxOEQxOTkzRTBECi06MTA3RDEwMDA5MzI5NEZDNEIyMkQ3RDU2MUQ4MzBEQzMyRTk1MzhGQzdCCi06MTA3RDIwMDBBNTVEM0VERUY2NTVDNzYyQTVCREY1MUZDN0I1RkY4NzQ5Ci06MTA3RDMwMDBGQUNEQUFFRjM4QUVGRDA3RkE0M0JCRDQ3ODI3RTgzQjZCCi06MTA3RDQwMDBGMzA1OEYwMUY2OEJCRThGRTc3N0NEOTUyNTY4MDc2MjI3Ci06MTA3RDUwMDA0NTY0MDRFMEUxOTU2QzE1RjU1Q0VDNzlDRjNFRDA3Mzk5Ci06MTA3RDYwMDBCM0I1RTg5QjlBNkRERjcwMjZGQjhERDFCMEZGNEEzMTI5Ci06MTA3RDcwMDA5RUU5MTg2RkQ0RDBDNkEzRjM3NzAwNUVBREU3QUY2NDc5Ci06MTA3RDgwMDBFRkMyNzM4QkY0M0QwM0YzODY4NTg3NDdBRkExRURFMTI2Ci06MTA3RDkwMDAyRjc4RjBEQzkwQjVERjc0RjM2NTNFOTdBRjE2RDc3OTk2Ci06MTA3REEwMDA0MDE1RTRDRDBGRkFCNjE2RTVDQzEzNzRFNkMxMkNCOTM0Ci06MTA3REIwMDA1MzJGNEM3MEU0MDM5RTA0M0I0QkU5QTdDQTUxMDg1MTcyCi06MTA3REMwMDBEMkU3QTVGOERDRTQ3Q0Q2QzJFQjExRDJDRjkzOTM2NjYwCi06MTA3REQwMDA5RTJCNTA5RUQzQ0YzMzgzQ0IzQkUxNzIyQ0VCQzlFRjZDCi06MTA3REUwMDBDMkY0NzM2RUQwOUQyNzcxRUIyOUVCNkFFOUE5NkY3MTFDCi06MTA3REYwMDBGRTk0NDlGNDBBMUY5RDY3NURBMjdEOUUwRkRGOEU0RUEzCi06MTA3RTAwMDAwMjNGRjgwMzhEOUQ4MzJBNjk3QkU4NjUzMENGREZGNDVDCi06MTA3RTEwMDA4NEVGRjc0RUM3NzM1RkZGRTRDRDFCQkEzQ0FDRjQxMTlGCi06MTA3RTIwMDA1RTk3RDk0NzBGMzFGRkVBNTZFNkFGRDZDRDlGOEFGRTVGCi06MTA3RTMwMDA1RERERjYzMUJBRkQ5Q0EyRkI1QTc1MjFDM0ExODc4NjkwCi06MTA3RTQwMDA3OTBERkVCRDNEMTNGNTUxRDU4NTAwM0VGRkVDRTZGM0ZGCi06MTA3RTUwMDAzQUNFQUZGNDlEQ0Y4RkNGQURGOUVFNzJFOUQ5NDM5MzBGCi06MTA3RTYwMDA3RUJBMEJDRUI5RDc3RDVGMTEzREI2NzlFQUJFQ0ZFQkI2Ci06MTA3RTcwMDBGRkJENTRFRjNBRTUzRDBDRjIyRTE3OTE2NDdEMTdFOEYzCi06MTA3RTgwMDA4NzZEQUFENTBFMzdDRjk5MDU3RUFENEQzRjk0ODFGRjAyCi06MTA3RTkwMDBENUZCM0U3Q0U3NkU5QjhGRjczNzJCNTNGN0NGNzBGNTAyCi06MTA3RUEwMDAxRjYzOERCRjEwRkJCQkUxNDlFQTFGRDg4RkQxRkVGMkUzCi06MTA3RUIwMDA5RjNEMTY3Q0E4QkYxRTEyNURFM0U1NThGM0RGODhFMzAzCi06MTA3RUMwMDA1OTdFRjc0NTZERURBQkE2MEM3QzFBMkY4N0ZENTNDRjdECi06MTA3RUQwMDA2REM0ODBFRjRGM0MyRTg3N0MyMTNCREY2QThDNUZBQjBCCi06MTA3RUUwMDAyRTVDRUFBMDc3MkZERUM3MzlFRUJGRDcxMDc0RDRFQjMzCi06MTA3RUYwMDBERTExQURDMzNBRUQ4QjNDRkU1NDQ1M0Q3MzdDNkZDRjM0Ci06MTA3RjAwMDA0ODQ3OURFRURGRTBGOEE0NzA1QzlEMDY4RTZCQkU2MDc2Ci06MTA3RjEwMDAzODhBMUNGMkQ5MEI0N0IxRTNGRTI3ODU2M0ExQzZGNDZBCi06MTA3RjIwMDBENzcyN0U5REFCQjM3M0IzNzMwRDIxRDQ0NDZGQ0RBNUNGCi06MTA3RjMwMDBGN0JEOTREN0JGNENBRjFBQkRDRTk1ODlFOUM3RUZBMjY0Ci06MTA3RjQwMDAyNjU4N0ZEQTg2RkRGRDBEN0ZCRUY3REQ2QjMxNTExNUJBCi06MTA3RjUwMDA3NEQ0MTU0OEJDQ0VEQkFENzdFMDlDMzdBQjc3RDMxQzJGCi06MTA3RjYwMDBERjg3QjNBRTNFODlENTZCQkFFRjdGRTg2Mzc4RjlDNjk5Ci06MTA3RjcwMDBFNUQ1MDRGQzY5RUFBQkE3M0NCN0I2Q0IyRkYwRUY3REEzCi06MTA3RjgwMDAwNjQ1NDc5QzlCQjdBRDNBREZDRjBBMkUzOTgzQ0RGNzI0Ci06MTA3RjkwMDA4RENCQUYyNzEwRDc5NTczNTM3RkRGRUVBMDlGQzFERjQ2Ci06MTA3RkEwMDBBMjg1QjE0RTNDQTZGN0ZGNUQ5QTRGMEFDRkYwMjQzQzY0Ci06MTA3RkIwMDBENzIwOUVBNDM0NzhBQUI1RTBEMTU5NUVCMDI1RjhGOTRGCi06MTA3RkMwMDBDMDUzOTI2MUQxQUQ3RkZDNkNFNTcwOTMwQjk3MjAxRjdECi06MTA3RkQwMDA0OTlDNEUyREIwN0Y0QkQxREZDQTdGQjQ2ODlGMkZGQ0U4Ci06MTA3RkUwMDBFMTQxRDJGN0I5OEMyRjg2QkU4QjA2NDlERjYyMkUwNzlFCi06MTA3RkYwMDAyREZBRTcwQkNGQUQ4Mzg0RTczQThCREY4MjYxQTREN0ZDCi06MTA4MDAwMDBFNzA1Q0Y1NzA2MDlDRjMxOEI1RUM2RTc4QjlGRDYyNDk1Ci06MTA4MDEwMDBGRkY3MEZDRjVGMzhEQ0Y5MTkyQzBFRDI1MkMyQ0U5Mzg2Ci06MTA4MDIwMDBGOEE0Qzg4MzQ1QzJDMDcyRTEyQjc2RUVCM0I1NDI5Rjc3Ci06MTA4MDMwMDBCM0NFRTY1RDY3REQ1N0JBNzVGRTlBQUYzMzlEM0NBREIyCi06MTA4MDQwMDA1NDEyNzk0MEJGNjMwRDJDMUVGMDA2REY5RkZDQkFBQUM0Ci06MTA4MDUwMDAyOTEzRTNGM0FFNzk1QTgyRkIzMkZCOEJEQkZDRjcyQTYwCi06MTA4MDYwMDBFN0I5REM4MUU0Nzg1MjA2Q0JGRkRDMTg3NUJFQjc3QzNCCi06MTA4MDcwMDA0NTg2QUI4RUNDQzQ3RTE2RkVEMjhERjdENzgyQjczMDQ0Ci06MTA4MDgwMDAyNDMxMDc4MTM3OEFBRkFDQTI3RUY2MEQ5RjM1QkVEMjcwCi06MTA4MDkwMDBDOURENTBGMTE1RDM4Nzg2QUY4MUU0RkQyQjQzQzQ5NzJBCi06MTA4MEEwMDAyNUFGN0ZBREY4Q0EwNzdDNERGRjFCN0YwRDE2NUY4Qjk4Ci06MTA4MEIwMDBGRTI2OEY0M0MyRDdBRDQzOTU0N0VFRDdGRUI1RTI2QkEwCi06MTA4MEMwMDBCMEYyRThERUI3RDFGRDVEQThCRkVGMEI3Q0Q2Rjg3MzQ4Ci06MTA4MEQwMDBDRkZGNjlGMTY4OERCNzMyQ0QzRTJGMUQzRTA3ODJDM0I5Ci06MTA4MEUwMDBCQTdFRTgxQjI0NUVEREZCQ0YyRjFBQUZBRUY5M0YzNTE5Ci06MTA4MEYwMDA1RUY5Nzg0M0M2RUIwMDcwNTg1Nzc5OTBGMjZERjk3NUM4Ci06MTA4MTAwMDA2RDZBRUFFRjg4OEVDQjY0REY3MTFCMkZENDFFOTkwRjQ2Ci06MTA4MTEwMDBGOUUzQkY5MzMwM0Y3RDY0Q0Y5QzBERjY3QUEwNzE5OTRGCi06MTA4MTIwMDBDQ0RGM0U1MjM5N0IwM0M0NEZDRjQ1MzJCMEY2RUNBOENBCi06MTA4MTMwMDAxOEZBRjkzNEM4MkIyRjYyRUZCOUM3M0ZDMkYxRTVDOTZECi06MTA4MTQwMDBDQ0I2RTJCRjc5NDBEN0EzOTFDNUZEQ0EyM0E5QjRBRDhGCi06MTA4MTUwMDAwQkYzNDYzNkZBNEE3REYxN0Q4NDE4REJBNzQxMUU2Mjk3Ci06MTA4MTYwMDA0MTZBMzgyQzNBQTc5Qjc3QThGNDNEMUE3OTdDNDhGQUUzCi06MTA4MTcwMDA2N0EwRjVGRTg3N0ZDQzIwRjU0RjAyRkJFNTkyRTRERjk4Ci06MTA4MTgwMDBEREI5MENGMEQ5MjZCMjdBQjhFMzcwQUIwMEJFRUI0NjhECi06MTA4MTkwMDBCMEQzRjIxNUY5N0I4MTRFNzc2N0IyRkM2MTg3NkE2Q0M4Ci06MTA4MUEwMDA4MEZDODk2N0YxODIwNzMyMjlERDhFMkVDRDE2RUNFNzNGCi06MTA4MUIwMDAyRkU3NjRCMkZERDc4QzU1QTlGNzVEMEIzOTFGRjRCRUNDCi06MTA4MUMwMDAyRjkwRjEyOUY4M0JDQ0ZCMkQ1REM1QkUzRjQ2RTRGMDc2Ci06MTA4MUQwMDBBODQ1QjY3M0E3RUI1RENGRkJEMDIzMzM4MDcwMUM0RDUxCi06MTA4MUUwMDA3M0VFN0YwMTdGN0ZGOTkyRkVERjI3QjVFQ0ZCM0U5NEIzCi06MTA4MUYwMDBFRjQ2RDlDRkJEMjZGOThDQ0JDNzE5N0Y3NDY5MjZCRDUwCi06MTA4MjAwMDBCRTIxNDRCRjczMUZGMEQxMDQzRjNCMzcyNDkzMjJBODAzCi06MTA4MjEwMDBCRkIyQzZDOTk1NDlBNzRBRjFGRUFFNjI4QzgyQkM2NjYwCi06MTA4MjIwMDA4QTcxNkVDRTlDOUU3RTlDNzQ3OEI1RDY2M0NEMDNBMjc3Ci06MTA4MjMwMDAwOERGRTk5OUFCQjEzOEUyQjQzMDIxQjMyMDdFRTgwOTE4Ci06MTA4MjQwMDBERENERjI4NzhDMEY3Mjc4MURFMkNDREE4QzQ0MjNFQzAyCi06MTA4MjUwMDA3QjY1QkE0RTFCQkMxREZGNzdGNjdGODNFNzFENDc0NDQ1Ci06MTA4MjYwMDAxRENGQjdCQkYwMzA5MDdFNjhDQTY0RjlFNDVDMjlCQUQwCi06MTA4MjcwMDBDOTBCNzk5M0Q1NDJDQUVGRDg2RENDNjQ3RkVGNjg1MkIxCi06MTA4MjgwMDA2NkIyNUUwQUU3MTlCNzMzQUFDMEY3MkY5NkM5MkNGRjZBCi06MTA4MjkwMDA0NTQ4NzRENDQyREJGQzkzMzhCRkI5REZDQjk1NThCRDU5Ci06MTA4MkEwMDAxMTc5OTNDOTczREJCRTc1QTM1MkM5Q0YyRkI4OUM0RTA5Ci06MTA4MkIwMDBDQTJDNzFENDM5MkU4OURDQUQ4MDdDMkU1OUIwNTAzMTU2Ci06MTA4MkMwMDBGQ0YwRENDMEYxOTc3MjM4REFENEU4QTgyOUZFNUUzQ0Y1Ci06MTA4MkQwMDBBNUQ1NDMxQzNGMURDN0EyNERGMEREOEZENUY1MDJENkI1Ci06MTA4MkUwMDAwOTk0NkU2NDdDQjc3QUUzNDE3MTAzQkRFRUU1RjJCN0ExCi06MTA4MkYwMDAxMDY4NjAxQkVGQkI5Q0FFNkRGQjdDQTMwMUZFQjY2NEY3Ci06MTA4MzAwMDBGRTg2MEU0Q0UxQjg3OTM3QzE3Q0M4OTNEQjRGQjc0MDhECi06MTA4MzEwMDAzRUE0NUIyMDNDN0Y3MjYzMjVENDM1NzRGM0ZBQjY5Nzk0Ci06MTA4MzIwMDBFOUYzNDZDMERGOUMzQzk0RUY3MTFCM0ZBQzAzRkREQ0RFCi06MTA4MzMwMDBBMTEyM0MyRkYzQkIyRDlFMDQ5QzI3QjBGODI1QTkyNzQyCi06MTA4MzQwMDAzNjlFNkY4MEZBRTE0N0Q0Q0U4OUMwMzc3OTREQjVGN0I0Ci06MTA4MzUwMDBBNUNBOUZCRUM0RTlGMDQ3N0YyNDJCOTUxRjY4NUQyREY5Ci06MTA4MzYwMDA3RDZFRjU1QjI0MUI0QUFBRkU4QjJCNUQ3NjhEQzMzRDhCCi06MTA4MzcwMDBDQ0QzNzk4NkE0Qzg2MzI2RjkzMEQxQkY5RkY2NEJBRTIzCi06MTA4MzgwMDBDNzdGRTFDQUYzMkUzOTk2M0FDRUY4MkJDRUJGNkQ4OTVFCi06MTA4MzkwMDA4QUY1NjhCNzRDMEY5RTQzQjFFMEIxRjA5NTZCMzIzQzYzCi06MTA4M0EwMDAyRDVCMjIzOUY0RURFQTA1MTkyRUJGODdFMUY1MDY4RjIyCi06MTA4M0IwMDBGMTI4QUNFMzkxN0QzRjlEODhFN0E4NUNGNkMxMjc0NTk1Ci06MTA4M0MwMDA1NTc4N0UwN0U5NTQ0MDRGQkMyRjE5Nzg3REEzQzFGOTM5Ci06MTA4M0QwMDA3NzVFREUyMEQxRUREM0MxN0VENjRCMjlFNUVBOEY5Q0I2Ci06MTA4M0UwMDA3RkRFNTg3MUNCNTI4NDNGMjZFOTAwRkY4OTU1QzNBRTJBCi06MTA4M0YwMDAyRjAzRkRCMjQyMDlDMTc3RDM0RkM0RUVDREJDQ0RCNjM5Ci06MTA4NDAwMDBGRUE0NUZFMzgyRUJENzU1QjdGNDZCQjc5NkFGNzBEMjlCCi06MTA4NDEwMDBBRDRENjU3RTgxNzkxRDkzQzMzQjI5OEZDRTQyRkVFQTI3Ci06MTA4NDIwMDBERTNFOTNDRTdGMjQ5MTMzNjUyQkVCNEVFMEVGNEMyRDU3Ci06MTA4NDMwMDBFNkJGQkYyRjQ2NzdDQ0E0RkFFNjk0QzhGMjI0RTY1N0VECi06MTA4NDQwMDA5OERFNThCMjMzRDIwQ0E5RDM1M0Y1NTdCQ0Q0NERGQkE4Ci06MTA4NDUwMDA3OTAzOENFRjdFNUJERkJGN0Q3NEYzRDNCODlENEU3RkQ1Ci06MTA4NDYwMDA2RkM2MzFBMkMyRkJEMUJBRDRGNkUwREI3QTA2RkY3QjNECi06MTA4NDcwMDA2MkExRDFBMDVGNkVEQTk4QkFERkZGMDI2NkE2RjA5QzE3Ci06MTA4NDgwMDBGQThCNTQ5NTJBM0U3OTk1Q0VFMDVEMUQ0OUZERkU1NTQ3Ci06MTA4NDkwMDA3QTI2N0IwRTc2MjkwNTlFQ0YwNTMyQjg5RUQzNDc4Mzc4Ci06MTA4NEEwMDA5RTVFOUQwNkRFMEYwMzAxODRGNzlERTZGQjZGODIzQTE4Ci06MTA4NEIwMDA5MEY3NURERjgxN0YyN0MwRjhFMjYwODBGMUY3QTk3RDRBCi06MTA4NEMwMDAyQjk1M0NBMDUzOEJBMDAzM0ZCQzlEMUQ5QTAwRkNCNjhFCi06MTA4NEQwMDAyNjc2MDJDRkJCMUNFMDc4N0VEMzE3OTkxMjk4MEVGMjU1Ci06MTA4NEUwMDBCMjY4NkUxRUE1NEJDNzJBMTIxMjhDRjRGQUZGQ0EwMDlFCi06MTA4NEYwMDBGMzFCNzI3OUJDOTZEQUJGNzdDMUZFRDE1N0RGNDVGRjE3Ci06MTA4NTAwMDA0MzBFOEZCRTcxMjIyQjgxODIzQUYwNTNBMkI5MEVFQjNCCi06MTA4NTEwMDAwQ0Y3Rjk1ODVEMjkwOTREQjdGQkYxNUZFNjcwOUNEQTVECi06MTA4NTIwMDAzRjM0N0EyRjhEQjhGQ0EwM0VGRTVGQkMxQUU3REQ5RjdBCi06MTA4NTMwMDBBMTQzNURDQTkxNEFBOUYzNUEwQUU0QzlGRDE5Rjg3RDFECi06MTA4NTQwMDA1Q0I3NUNBNDlCN0ZBODdFRTBBOUZENDNGMzAzMDc1QUI4Ci06MTA4NTUwMDBGNzg2NDBEMUEwRkNDMDczOTU4RkVDOTgwNjcyQTRDNjM0Ci06MTA4NTYwMDAyN0E1RDJCRjk2OUUzRUNBRTNFRjZFRkVCMUFFNUZFNTkxCi06MTA4NTcwMDA3Q0Y0N0VBMjdGQjhFRUQ4RUQ4NEU3QTY1QTI3M0M5NjFECi06MTA4NTgwMDBCQ0JDOUY2OEYyQUQwMTNDOTFDRTg5NzZCRjk0Q0M5OTdBCi06MTA4NTkwMDAzRTgwOUQ2NUY5QTk3NDcwNkU3N0U5MDlFMDNDQTBDMzNGCi06MTA4NUEwMDA5RDVDREZGQ0I2RkU5MTgwOUQwRUVFRjU5RjEyRjlGRUZDCi06MTA4NUIwMDBFMDUxNTY5NzNCMzZCMkE2MjJDRkU4RTVDRjZGN0Q0RTBECi06MTA4NUMwMDA3QzY5RDkxOUY3MzhGRkQ5RjlEMEIyNzMwM0YxNjE2RTFDCi06MTA4NUQwMDA5QTNDQ0UyNDM4RTg0Q0RGNUYyM0VCMkFFNEVCMjcwNUY2Ci06MTA4NUUwMDAwQ0Q2MjZGQTNDMzhBQTQ1Q0E3OEREMjgzMTQ2QzNGOUFDCi06MTA4NUYwMDBBRjUzRkI3Q0Y4RjdBMUNDQUQ5RUM0NTgyQTAyRUZFRjM1Ci06MTA4NjAwMDBCQjdBODI3RDNEQkZFMjdDQkE3QTQ5MzY3RTdFRTI3RENFCi06MTA4NjEwMDAzMTM0M0YxRkVCQ0UyNEZDOEVEQjFCQzc3MkU2NDFGQkRGCi06MTA4NjIwMDA5MUMzMjI2ODY4NzI1M0REMUEwOUQ2Rjc0NjgwRUQzQjg0Ci06MTA4NjMwMDA1NzZGN0MxREZEQzFBMUYyRjlFQTVBQTdGREJGOEFBRkIxCi06MTA4NjQwMDAyM0U5NjdDOTNERDM4MDdGRDJFMUUxMzU4RTg3QTU5MUNCCi06MTA4NjUwMDA4NTczNDEzRkRGQjI1MTQwN0RGQjEzMTg4NzJFRTQxNjJFCi06MTA4NjYwMDAzOThDN0E5QkM0OTg3RDI0MUFDNTA3MzUyMTI3NjAxMTVGCi06MTA4NjcwMDA4MDhGN0ZFMERGQUQ5MjIzQUFGRDlDREM2RERCRUU5RjU3Ci06MTA4NjgwMDAwQkZFQTE1QjVFNTY2NDMxM0VBRUM4NjI3NkUxNEQ1RjgzCi06MTA4NjkwMDBGNDBGQTBFRjJERkRGQ0I2NTA3QjMwOUY3NkQ5MThEMDlCCi06MTA4NkEwMDBBREVGMDRBMzlDNUFFQkQ5QzhFMUEyN0VEQUIzRjhGRDgyCi06MTA4NkIwMDA2MkJFM0VEMkUzRTIzNzMxNUVGRDYzQzA3Rjg1ODY3RUQ3Ci06MTA4NkMwMDA4MUNGNDNGNTNFRDQ0NTNGRUVDMzNBMkE0QkFFMkM3RkQzCi06MTA4NkQwMDBDN0ZERkUzMjM5RUFGMDFCMzNCMzhBMUNGRUJCREIwRjQ5Ci06MTA4NkUwMDBGOTlCQkQ0OERERkY4QUFDMkZENjVFNUM5QkY1RDlEOERGCi06MTA4NkYwMDA4QjYxOUNDRkRDNzYyMzI5RDcyREVDM0NDODg5NjMxRjg2Ci06MTA4NzAwMDBDRDREMjVENzkxNEYwODg3NUI5RURGREZFNzYzREY0REI3Ci06MTA4NzEwMDBCRTI2MTNGNTRFRUY3RTJBM0YwMUZCNjVCNzVDQzA3RTk3Ci06MTA4NzIwMDAwQUJFRkJGMUM4QkU5RjREODRCQURFMTNEQkVGQkYyOTQyCi06MTA4NzMwMDAxNTNENjdFOUNDNkYyMkRERjk4RTc4REVEQTAwQzFGQUVCCi06MTA4NzQwMDA2RjQyRTc3QkMyMzZCRUY1NUU1MjVFMDY4ODVGMkU1QkU3Ci06MTA4NzUwMDA3OTI1RUUyN0RGNTg3OUY1RTgzNUE1N0RGNzE1N0RGQUZGCi06MTA4NzYwMDAwQkQxN0Y1ODBBRjMzNkYyRkRGNDBFNEZENUJFNTRGQjAxCi06MTA4NzcwMDA0MDhFRDdCRTcxNjJBNzdGQkY3NDYzNzkzMzZDQTkzNzBGCi06MTA4NzgwMDA2NTVDRjNBNTY4OEFGOTkzRkI5QThEQTlFMzcxMEY3MjcyCi06MTA4NzkwMDAzRDk1RENENzk4NzQ1RjQzRjFEMUJENEEwQTk0NERFQjA3Ci06MTA4N0EwMDBEREQ3NzQ5QjlGQ0ZCRUU2NzdBNEU3RTczMzUxRkU1MzM2Ci06MTA4N0IwMDBDM0Y3M0Q4QkJGRDRFODhFMkIyOTdDQTdFOEZFQzcwNDA2Ci06MTA4N0MwMDBGOTExRTk3QkMwMkZERjRBQkQ1RjdCOUNCRkY3QkI4REYyCi06MTA4N0QwMDA0M0Q0NTdDNzlDRkI5OTc0RjJGN0JEQ0Y0OEZFREFENDU3Ci06MTA4N0UwMDA5RTUxQTAwNzdFQjdGN0UzQjdFRTg3RjVFQ0Y1MjFCRTAzCi06MTA4N0YwMDBEREUzNDQ3NDg5RUYyRjdDQzhCNzk2N0RFRTUwOTlGRTc3Ci06MTA4ODAwMDBGRkREREY4REMwQkY5QkVEOTYwRjQyRTJENzVGNDU5RjM2Ci06MTA4ODEwMDAxRkRGMjc0RTgxRUYyQ0I2RURDQkE4NEFCNUNGNTlBRjVECi06MTA4ODIwMDAwQjNDQkVFNDhDRjcxMEVFREYyREU1RkNBNkVGN0JCQTI3Ci06MTA4ODMwMDBENjFFOEY3RTkzRUIyQjJCMEVGMEJGQjM5ODlENURCMkFGCi06MTA4ODQwMDA2MEExMEFGMTlFREI5MkYxMjY4MjlCMTVGREIyQzJCREFBCi06MTA4ODUwMDBGMEZEOEI1RkYyRjM1Q0U2REFDQzk0RTdFMzdFQzNGMUU0Ci06MTA4ODYwMDAzQjUwMUM2MkM1MkE2NzlDNjBDOTgyRkVFRENEQzk0NDlECi06MTA4ODcwMDBFQUJBMkM4QjlGRDNDRDM3NTRGQkQyOTYxODVBNUU2QzM0Ci06MTA4ODgwMDBBMDc1OEVEMDA3Njc1Rjk2OTJEQTJGNDFCQzYzMTkwOUY1Ci06MTA4ODkwMDAyOTcwNUQ0MjZBMjdGRTk4QTJGMkU0RUVDNTA4Q0YyRjQ4Ci06MTA4OEEwMDBBREJGN0ZGQ0YxQkQxM0VEN0VDQ0ZGMDcxMEY2NjcyNzRGCi06MTA4OEIwMDAwMDgwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDg2Ci06MTA4OEMwMDAwMDBCREQ3RDBCNzg1NDQ1OTY3MEREQkVGRDRBRDI0OTI0Ci06MTA4OEQwMDAzQTlERUVCQzA5MUQwMjA4MTg2MjA3NDIwMDFGRDAyMTE0Ci06MTA4OEUwMDA0NDgyQjJEQTgxMDA0MTUxOUE4NzE4NDk0OEEyRTJDQTBCCi06MTA4OEYwMDBGRUJBNDM4NzIwNDY3NDY2QzJBQThDQkZFM0I4MEQ4MkQ1Ci06MTA4OTAwMDBFQjI4NkFBMkQxNDE4Q0Q4QTBGOEQ4RDU5REEwQUU4QjE3Ci06MTA4OTEwMDBCM0U4NDZDNzQxNUU0MzIyQTMyQkIzQ0IwQ0ZGMzlBNzc0Ci06MTA4OTIwMDBBQUQyRjdERTc0NDM3MEM3RkRGNkZCRTMzOEQ3QkFCN0I3Ci06MTA4OTMwMDA5RUU3N0Q0RTlEQUFCNjM5MTVDNjNDOEM3RDVCNzNGQkM4Ci06MTA4OTQwMDA1RjRENjI4Q0ZEQUJCNTc5QkNEM0MxRDg1OUZDOUIxRTgxCi06MTA4OTUwMDA3REZFQ0IzQUM2MjIxNzMxRjZFMTNBM0I4QkQ4QTAxQ0ZDCi06MTA4OTYwMDAzNjU1ODU2M0Q0RkI1M0FBODkzMUU4RTg1RkUxQzE0QUYzCi06MTA4OTcwMDAxOTBCMkQ1MEMzM0I5NEMxRjVCMjcwNUNBQ0I3Nzg1RTU3Ci06MTA4OTgwMDA2QTMwNDYzRkYyQjlBMDQ2NjUxMTNCQTNCRkIzRjA2RjEyCi06MTA4OTkwMDBDRDlDMjQ1REY5MjJBNzUzRjREMzlBMTgyQzYyRUM4ODVECi06MTA4OUEwMDAxQ0Y3NTEzRUVFOTEzMDdGMkZGQkJCNDg4QzdCMjQ3QzIzCi06MTA4OUIwMDBFRTcxNkY3RTA0QzYxRDEzMURFNzg2NjZGREI4QkQyQ0UzCi06MTA4OUMwMDBCNDhBQjk2MTlDNzBBMjczNDcwMUMzRkY4Q0Q4MjY0NDU2Ci06MTA4OUQwMDBEQkVGNzU5QTA4QUVFQzQ4QTY4OTY1MzA3Njg3NkMxQjhDCi06MTA4OUUwMDA2N0JDMEYwNTdDOERGNTZCQ0M3RThCMTYxRkI3QTc3QTA1Ci06MTA4OUYwMDA2OUZFQjI1QzMzNDczRjRGNkY4QTkzOEZDQjlDRjk4MUZFCi06MTA4QTAwMDA2NEM2OEU2RTRCRjQxMzNDQTYyNTg3NDdDMTNDMkJFRDA0Ci06MTA4QTEwMDAyQ0U0ODA3OTNFRjhFNEM1OUZCMTExOEMyRDEzRjhBRjlBCi06MTA4QTIwMDAwOTdDNkQ0MTc4MUMzNUY1REY5MzhDRUJGQUMwRTREQ0YyCi06MTA4QTMwMDAwMTQzOTUxREY0NUJCNEYwQkIyQjg1QzNFRkU4RjY3M0RGCi06MTA4QTQwMDBDM0VGQUUxNDNFQ0Y3OTU1RkFGOUNEM0Y5OEE4MkIxQjUyCi06MTA4QTUwMDBEN0ZCRUY3RjdCRUYwNEVDRjdERkZGRjYzQjhCQjZGRjM2Ci06MTA4QTYwMDAwNUE3NzM1OTI0M0Q1QTVFNTJBQkY4QzM0NTgzQzc3REIxCi06MTA4QTcwMDAyOUQ1M0EyNEI4QkY2NDgwRTM5MkQzRjlENEJGNUI2NUFCCi06MTA4QTgwMDBDRDFEMzFENjU1RUVCNDUzRkRGOTgxNzI4QjA3RTBCOTk3Ci06MTA4QTkwMDBGQzZFQzVBNzQwMTczMzlDQkM5RkU1NjZFNkVGODBGOUU2Ci06MTA4QUEwMDAzMEIzMzdCRjFBRTBFRTY5NkRCRTIzMTBBMzlGRkYyM0RBCi06MTA4QUIwMDBFMEZEOEQyMzkwMUE4QkNGRTRGMzYzNDEwRkIyREUwMjA5Ci06MTA4QUMwMDA3M0QwMTJBQkZFQzI1QTNEN0M3QjE5QUI4QTM1RkYxRkI3Ci06MTA4QUQwMDAzQjM5NUYwRTk1MUVFNUY4QzZGQTQzOURDN0REODIwRTUxCi06MTA4QUUwMDBEMzZEOTFERjMzMTU1RTlDODA3RUNBMkU2MDVDNDM3RDIyCi06MTA4QUYwMDBFM0I4RjczQkY1RjgzMzhFN0ZGNENGNkE1RDJDMzhCQ0QyCi06MTA4QjAwMDAyNkY4M0YxODAwRkE4OUY5M0Q5OUJFN0ZDMERBMUI3NzM1Ci06MTA4QjEwMDAxMzdGMjdGOTc2MjAxOEI2MkZGRjA5QTA5REFEOUM3RDA1Ci06MTA4QjIwMDBDNzVCRjA5QTI1QTYxNEQwRkExNjA3MEU1NDEyQkI5RDA3Ci06MTA4QjMwMDA3OUIwMThGMUZFNkRENTgzM0YyOTg1QTkxREI1MDY1Qjc3Ci06MTA4QjQwMDA5M0ExQzFEMUY1OEEyRkU0MUQzQ0NFMDdCODRFOTBBMzY2Ci06MTA4QjUwMDAxRkExM0NCRDA4RkI2MzlDNkU2N0MyRkY2NTMzMzY0NkIwCi06MTA4QjYwMDBGNUQ3QTM1MDYxNzdEOUJDM0IzNDdDRUI1RUZCREQzQTkzCi06MTA4QjcwMDA1NkNDRDg1M0Q2QzBGQTY0NzgzRkZBRUVBRkQ3MzA5NENCCi06MTA4QjgwMDA3OTJDNENGM0ZFQzJFMkJCODVFMENEMThGMUZEQTE2RDVFCi06MTA4QjkwMDA4RUFEOUJBMDVFNkEwQTk3OTM4Q0Y5RjIwM0UzMzU3MjVGCi06MTA4QkEwMDBDMkVDQTRGMjUwRjFGMzYxMUNGQzVDQTg5QzkyRUI4QzJCCi06MTA4QkIwMDAzNzBFNDA5RUU2Mzc3Nzg2QTM0RDQ5NjVBQ0NCRUFCREJDCi06MTA4QkMwMDAwOUQ3RDMzRjNCQzFCOTBENTAzOEQ3RUFCRjFBRTFGM0ZCCi06MTA4QkQwMDBDMTAxOTNBOUE1ODBCQTM1MjM5RENFRTM0M0IwODI2QjMyCi06MTA4QkUwMDAwQUVFMUY1NzhBRjJDN0UyNEY4MEE5NTQ0MzFCMzYxNTdECi06MTA4QkYwMDBFODY4ODYyMzg0RkQ5NTdFMzhFNzE5QzRDRjgzQjUzNkFGCi06MTA4QzAwMDBBRjhBRkQ0REYzN0VBQTQyNzlFRTU1MzZFRjdBRThBRjkyCi06MTA4QzEwMDBBQzY3QzQ1RTM3RjQzRjdGOEVFMjY0RDA3RUU2RUM1MUYxCi06MTA4QzIwMDA5RTVFNTg1RkQyNUFFODI3MDc0N0I4QjdBQUMyQ0NEODg5Ci06MTA4QzMwMDBEM0Y4OUY5NzMyM0U2MTgwQzU1QzQ1OTY1RjZDOUIwOTc3Ci06MTA4QzQwMDBGMjYwOUNBN0NCRTQwMDUwQUY0QzdCQjFDRDBFRkRERUIzCi06MTA4QzUwMDBEMzEyQzg3MkE2QzFEMjM2REZENzY2MUZDNjU4NDY4NjYxCi06MTA4QzYwMDBCRjY3QkE4RkIxRDk5QkVGQUZCMjVGMDFFQjdDNTRCNDUxCi06MTA4QzcwMDAwRjNERDBFNkNGNjNFQzU1NTNCMDQwODFFRkNEOUI3N0VECi06MTA4QzgwMDA1NDk5MDE1RUVFNDIzOUZFMkI2REZFQ0I2MTNENTdEREZFCi06MTA4QzkwMDBCMjYzMERGNEJGMjVFRDlGQUFDQzM4RUZDNTcyRkM5RUUwCi06MTA4Q0EwMDBBQThBOTEzMEZGQ0I2NUY5NUZFQzM4NUY3NzkyNkMwRjQxCi06MTA4Q0IwMDBGMzlEQzI5ODY1NDQ3NEZFRTYyQzE4REYyNUNCOUY1NEMzCi06MTA4Q0MwMDBDRDg0RjEzRjJFNkZBRTMwQzNGOEM3RDJGRUJEQUQ2ODg0Ci06MTA4Q0QwMDAyQzYzOTNFNzk0M0JGRDUwRUVEQkZDMUY1NTQ5ODA5RkNFCi06MTA4Q0UwMDAyRTA2NzQwQUU1M0Y2QzNFNERGMzc3QUIyNkRFN0ZFODM3Ci06MTA4Q0YwMDA4RjM0QkZCMkM1QTE3MUY4NUQ2MTdGNkFBQjgyNzVBRjc5Ci06MTA4RDAwMDBCNkY3QkU4NUU0REFCNDM2NjRDRjQwOTFBNDcwM0FCMUM4Ci06MTA4RDEwMDA1QjlBRkRCOTAwM0JDQkFFRjI0ODJFNERBNzlERDM2QkJECi06MTA4RDIwMDA1RTY0M0NFQUIxODFGMjE4Mjg4RkQ3OTRCMzc4Qjk2QkFFCi06MTA4RDMwMDAzRDVCMTI0QkRFNzZCQUI4MUVFRTRBOENGREJEMjI4RDJECi06MTA4RDQwMDBDQjAzODAxQkU5OTNENDgzQ0NCRjMzODY1RTE5OTdFNkFGCi06MTA4RDUwMDBBMDdFRjYyN0IyOTBERDE1RTVCNzZCODE4N0E3MDA1RjhGCi06MTA4RDYwMDAzMjNCOUZBN0VDNjc5MEZFNDhFMzcyOUY4NUFFNzUyMTZBCi06MTA4RDcwMDBERkNDQzEyRTYwRTk4NTNFMjU4NDc0Q0Q5QTkzQzJBM0QxCi06MTA4RDgwMDA5MDc2NThDNDNDMEZGNTg3NkFBMkY5N0E1NDY1NDkzNTQ0Ci06MTA4RDkwMDBGNDk3OTFDODgyOURGMEY0QTQzMzJBNDM3QjdGQTcyM0U0Ci06MTA4REEwMDBEQURGN0I4MkVFMkIwQjAzREJCMUJGQ0FDQ0VDOTJENkIxCi06MTA4REIwMDA4MjY4M0YzMEVGMERGNjA5QkE3OTlCQTdCOEYwRkJEQzZCCi06MTA4REMwMDA5MjVCOEIzNEYwMkNFMkVCMDAzQUEwNzYzMENDMzNEM0JDCi06MTA4REQwMDA4MTBGQkE3QUM2OEREODA0RjNGQjA2RTVBRTI3QkFBRThBCi06MTA4REUwMDBCMjlFQjkxNjA2RjVCNkI4ODQzQ0YxRjJGNjlFMEEyRThDCi06MTA4REYwMDA3RkZBNkY0RDBBNkY0M0ZFQjRGQjRBMTA0RkIyREQwRDkwCi06MTA4RTAwMDAwMkVFMTVGN0NFRjkxOUQ2NkJFOEIxMzAxQkQ0NUJEMzVGCi06MTA4RTEwMDA1OTlFQzlDRUExMTcxQjRFNUZDNkMyMTMzNTY1NzNDNEQ4Ci06MTA4RTIwMDA4QTcyQTdFMUY0MzQ3QTVGNzFFRjdCNTZFNDUzRUNDN0EyCi06MTA4RTMwMDAwQkVCNUE5M0UwQ0ZGNDIxREM1QTYzRTM5RkIxMTY5QTBGCi06MTA4RTQwMDA0N0MzRTkzNDE2OUFBODdEQ0ZFMTE0RURERjREREZDRjlCCi06MTA4RTUwMDBCN0FFNjg3RjJBMEJBNzlGQUIzRjJCN0QxRjgwQkI1OTA2Ci06MTA4RTYwMDBDMEREMUE3QjlFMUIwNEZEMjBCQzREMUFGQTlBMkZFODI4Ci06MTA4RTcwMDAwREE0OUYxRkU1RTFBMTZCOEFCNkExQkM4RjhFQkI5RTlFCi06MTA4RTgwMDBGQUVGMzIwMzFFRDEwRUVDNDlGNEEyNUQ1QzY2RTZGMjA1Ci06MTA4RTkwMDBCM0FDQzdFNTBDMjk1MUZBOTA3NDIxRjFEQUU1NkEyRURBCi06MTA4RUEwMDBBN0Y1NTYyQkNFNkQwNTgzRTc3NUJGOUM5N0QwQTc5OTg0Ci06MTA4RUIwMDA4QjgzRUE1MkNERkMyNDNGNDBGRjVEQTJGRkQyMjlDNDQwCi06MTA4RUMwMDAzRkJGRTBGNDAyN0M3MzAzRjIyRkRBMkRCODBFNUY2NDJCCi06MTA4RUQwMDBGQ0RDRTRDMUYzM0YwREU0ODU0RkMwMjM4N0ZGNUYzOTFECi06MTA4RUUwMDBDMkE4MDcyNERDMDZDMzNGRjczQ0Y4Q0NBN0VGNjUzRERBCi06MTA4RUYwMDBGQkFDQjhDRTg2Mzg3Q0ZCODAyQjg1REE2NTFFOENBNDUzCi06MTA4RjAwMDA3OEExREUxOTYxNzc3NDc1NEM0Q0I4MENGOTYyOEU4OUMyCi06MTA4RjEwMDBBMTA4QzM3NUEzQkQ1QTM2MjA2RkFGN0M3NzA2QzhEQkE2Ci06MTA4RjIwMDBDQzgxMzJDODVCMkZFMjYxNDBGRTQ2RUNGNjY4RkQxRjQzCi06MTA4RjMwMDBCOUFFOUNCRDAxRTRCNURCMDZGODJGMjIzQkQ0Q0UzNDlDCi06MTA4RjQwMDBGRUM0RUUzNDZFQkY0RDA5QjI5ODc2Q0JERkI5OTI3NTkwCi06MTA4RjUwMDA3MkVDRkZBRUFENjBCRjg1RjU5OUQzQjhERTlGRDIxQjMyCi06MTA4RjYwMDA1MjEwMkY5MkFGOEQ3MkVBMTNDMThGMUY4QkU3RkZCQzk3Ci06MTA4RjcwMDA5QzUyQ0UyM0E3QUE4NTlDRTJFRkY3ODM5OThGRjUzMjA2Ci06MTA4RjgwMDAzMjIyRTMxNUQwODlDQkRFOUQzODBBRkQ5OURCQjI1NDNECi06MTA4RjkwMDBFRjk3QzA1N0YzMTRERkIwNjdBMURGMUFCQkY3OUU2NEU5Ci06MTA4RkEwMDA2Rjk0NEU2QTk4RERFQjQwQjg4M0QxNzQxNkY1RkU5QzQxCi06MTA4RkIwMDAwNDJBRTMxRkRBMjVBN0RBMTU0RTg3Q0M5QjVBMzMzRUU1Ci06MTA4RkMwMDBCRTFDOTJGM0I4MkRDQjRBRTMyREJCNkY1NDZBNTAzQkM1Ci06MTA4RkQwMDAzRkExMjdBRUI1NDU5RTY1ODU4M0Y5NUM5NjYxRkVBQkUyCi06MTA4RkUwMDA0REFBRTZCQjgzRUJCM0IxQzlGRTZGRDJEMDBFNTU1ODg0Ci06MTA4RkYwMDAyRENEQzc2MDJGMzkwNERGMTlFREE1ODdCMTZGMEZGREE3Ci06MTA5MDAwMDAyRjYyMjMzRTM2OTE3MzlBRDk2NjBCMzNERTI0ODQ3RTE5Ci06MTA5MDEwMDA2QTY2MDcxM0ZDMUEzMTM1NjhFOEMwRUVDQUEzNzkyQ0RBCi06MTA5MDIwMDA1RTA4MUYyRjAxQTZCNEJGNzFDOTk3MUEzRTdBMDdFN0UxCi06MTA5MDMwMDA0MzdBMjEzMjA5RjkzNEMxQzU3NDc2REU2MjM1OTBBN0NFCi06MTA5MDQwMDBBMEREOUE2OUYzQTE5QzAxM0MxMTFDRjYyNzMwNzMwMjQ0Ci06MTA5MDUwMDA4Q0ZCMzYzQzExNkY5NUVBQUQ3QjJENkVBNDAzQzVENzEyCi06MTA5MDYwMDA0QUQwREYyQUZDNTYxNjQxN0Q3M0VERjQyNEIyNUJEOTU5Ci06MTA5MDcwMDA5OURCNDc1NjAzM0MzQzQ5OUM2RUExMUZCQkU4Qzc0RTk5Ci06MTA5MDgwMDA3NDIyRTRERUFGRjNDNzZFNDNGRDI0RTVBN0M0MDMzQkJGCi06MTA5MDkwMDBBMzUyN0ZGMkZCN0VBNTNBQ0YwOUU1RkQ5RThCNEE1QThCCi06MTA5MEEwMDAxNUJERkQ4M0Y2NTBENDdFNEFCRjZGMTZGMEUzRTRBQUU3Ci06MTA5MEIwMDA4RTg4MDk1OEE4MjVFNDk5N0QyN0Q0QUY0Q0UyNkIxRTExCi06MTA5MEMwMDBFOUUyN0E3MDdGNDE0ODREQzFGRTQ2QzEzQUUwRDU1Qjg2Ci06MTA5MEQwMDA4OUMxQTI2NjQ3MTQxRjYwRTMwNDExN0YxOTU2NzgzQUNDCi06MTA5MEUwMDAzODdGRTA3MzlGOEJGM0Q5OUM3NDhFOTQyREU5QkM5Q0UwCi06MTA5MEYwMDA5MUMyRUIxQkU5RUQ0OUYxN0Q5NUMyRjFCQkE5OUNDQjc3Ci06MTA5MTAwMDAwOTYzQkRFOTJFREVERjZBN0JBODJBNjM4NEQ2QkUwQTI2Ci06MTA5MTEwMDAzMEE0NDMzM0UzNzY5NkRGMjVFOEE0ODJDM0FCRTJERUQ2Ci06MTA5MTIwMDBDNUE5QTgzN0JGRUQ5OTlGQ0E4QUEyNzJGNDFFMjVFODg3Ci06MTA5MTMwMDBGNDQxRkQ3QjJDODE5RjUyQkNFMzVGNTQ4NkZFODgzNTUxCi06MTA5MTQwMDAyREU4NzQ0MUJERjRBNEQ4RkVGMjRENjIxRUU5RTg0RjRCCi06MTA5MTUwMDA0M0JEOUYwODdGQzc3MkZBNjJGMkIzMTdCQUI4M0M0QjlGCi06MTA5MTYwMDBDOUFBMjE3OThFMzBGNEEyOUZDMkZBNDM0RTBERkU1MjU1Ci06MTA5MTcwMDBBNzk4NzQ3RTgzRTU3NDMxQjVCRjcwQkJBMTI0OEVEREUyCi06MTA5MTgwMDA1MEFBQjMxQkU0Qjg0NkZCRTFEMzc1NTkzNDdGRDlGRTJFCi06MTA5MTkwMDA4NkFDOEYyQTk5QTZGRThEQUNGNzFFRUNFRkM2MzVCOUNBCi06MTA5MUEwMDBCQTM4NTEzQ0JCRTMyRTAxMUZCNDEzNDIzMUU3NjVENUY5Ci06MTA5MUIwMDBCREZGMTRGQ0M0OTA3NkZDMjM3Q0ZDRThCODQ5QzA2ODcxCi06MTA5MUMwMDBEMTcxRkQyRUZGREQyRUUyQTdDQjlEODcyRjg2NDcwMkIyCi06MTA5MUQwMDBCQzU3NDlERjkwREMwN0JERTRERkVBMjA3RDU0ODVGMjBGCi06MTA5MUUwMDA1QUZBNDdDOEY3Q0U1NEE0RjFGMjBEQUU0OTFBRkQyODM5Ci06MTA5MUYwMDBEQTE5RTVEMDlGNDUzQ0UzQ0Y0RTZFRkZBNTFFOTRGNkVECi06MTA5MjAwMDA2MkEyNTc1MUEyRkE2NkIwQkUxMjdBQzYyMDE3Q0Y2NzgzCi06MTA5MjEwMDA1RjAzQkQ4NkI0RkFERkQ4RUY1M0FFRUY2QjU3MTZDNkM3Ci06MTA5MjIwMDBBMThGRDFGRjIzNzY2NUQ5RTU0MTc1M0NDQUNEMkE4NTRBCi06MTA5MjMwMDA4RDgyQzdFNDk5N0EzRERGRURFMkZFNDdCNzJCNDlBNzVGCi06MTA5MjQwMDBFN0U3MkVENkQ3OEI2MEJENDlGODRDMUE5MkJGQTJENTVFCi06MTA5MjUwMDA0MzhBOEFGMjhFRjdENzI4RThBMUUwRDgwNzU2MkZDOEFDCi06MTA5MjYwMDBERkZGMTI3NkQwMTdFOUZFQjc5MUFFMzYyNEE2MTRBMzFECi06MTA5MjcwMDA3RUQ4RkFBNzhBMzE1QjYxREVGREVGNUI3Q0RCQjBCQjk5Ci06MTA5MjgwMDA1RDlDM0VDQTE3QUQ2OTM1QzM3QjRCODdFMkI0MzE4RDE3Ci06MTA5MjkwMDBERTVBREI3OUM5MEE1OEVGMDc5MkZFREQ3QzFEMERFRTIwCi06MTA5MkEwMDA4ODc1MjQ4QzlCRDNDMEM3Q0ZFQkQ4QUI5ODM1RjIyREYzCi06MTA5MkIwMDBBRjhFRDczQkU0QjJFOEY0NUVBRjI4N0YyNkZEMEYxNkYxCi06MTA5MkMwMDA2RUE5MkNDNUZBN0VGMzI2MTA3RDM5MUQwQUM1ODM3MzVECi06MTA5MkQwMDA5QTAxMDA0MDA3MzkzRURFQkZDMzE3NTY5NjE3NDVENzlGCi06MTA5MkUwMDBEOTY2QUEyRTQyQkREMDk2OTFFNDQzQkQzMEQ2MUQzQzJFCi06MTA5MkYwMDA4Q0Y0REY3MDI4MTI0MTMwNEQzRUQ0NjM0NkZCQUVDMjgxCi06MTA5MzAwMDBFREZGMEFERkNCNzU3QTU1NjcwRUNBRDVBNDQzN0M3RTg0Ci06MTA5MzEwMDBFRDA2N0EwNzBCNTlEMEY5MzYyRTZGNTVGNjBFNDM3Q0MxCi06MTA5MzIwMDBBMEVDODBGMTMyRDY4RjIxQkQyNEVCNjdCODg0OUVDOEIzCi06MTA5MzMwMDA2MEMxMTdDOEFFNjI2RDhDRjBDNTY4MUQxOUVCNDc5MzBDCi06MTA5MzQwMDA3RDJGRjExOUI1QTNDNjRFNDAzQkFBRjA4MTg4NzkxOTRCCi06MTA5MzUwMDBCNERCRkQ1OEVDRjhCQzQ1RTgxMTU4MDc0QkY3NDRENzhGCi06MTA5MzYwMDAxMThGMkZBNDFFOTNGNTJDNzFGQzY4NDlFRjQ5NTVCMTVDCi06MTA5MzcwMDBFRDUzRDAwMEY0QkQ3QzkxRkIzQTVDNzdDMzA2MkJCMzcwCi06MTA5MzgwMDAyOTUxRjg1N0I4MDNFOTM4OUY5QzhFQUQwQUMyNDZEMkRFCi06MTA5MzkwMDBENzA2RDdEMzRBMkVBQ0VGRjY1Qjk4NTM2NUYxRTdEQkRGCi06MTA5M0EwMDBCMEY2QzU0QjU2NjhGQzJERTg5RkYwQjFENUNBRUFCNEJCCi06MTA5M0IwMDBGQTU0RkExMzE3QTc3M0ZENzNBNzNCMzAwMkM3NkREQzhECi06MTA5M0MwMDBCNUQ5OEFGOEJENjVGQkU3NTY2REJDN0JEMDNBODYwOEY3Ci06MTA5M0QwMDAyRkE1OEVGQjI5MERCNUY2MzBBRUIzN0M5MTk5RjA1N0QxCi06MTA5M0UwMDBCRkMxMUE0Njc5RDRCMEIzMzM2MjQyN0JGQTZFRTY0MzBBCi06MTA5M0YwMDA3RTZGRThFODdDMkIwN0UwOTJEQkUwOUZBNDdBQTNGRDc4Ci06MTA5NDAwMDBFNTM2ODQxNTlDNEYwNjEwNjEwRkY5NzkxMTJCRUE2NzM4Ci06MTA5NDEwMDAyMzVEQTMzRDhDNzZDOTVCMDk5Q0RGNEY5NDNCNDIwQUQ4Ci06MTA5NDIwMDBDMEVGODQyNUQ4ODBGNTRFNjQyN0Y5NDIwNTUxNzhCRkY2Ci06MTA5NDMwMDBERDM5RUIxRDA1NTgzQUY5MDU1QjA0OUY2REE2NkQ1OUEyCi06MTA5NDQwMDA3NkE4RDczNkNFRUE0MzNBQUE3MDA3NjdBNTAzN0M1Q0I0Ci06MTA5NDUwMDBFNjQwMTdCNjRGNzMyN0ZCNUFBMEFERDdDNjI2OTA3RUJECi06MTA5NDYwMDAxRTIyMUMyNjFCRTg2MUYyREQ5QzRGRkUyNjNENDVEQURDCi06MTA5NDcwMDA3QjEzNTAwRTJENEQ0Rjk2RjYxMkM5QTdCNzJDN0MxREFECi06MTA5NDgwMDAxQjE4OUZFRjNFOTc3RjAxRDFBQkQzNDVFM0U2MzQ0NEYxCi06MTA5NDkwMDAxNEI0Rjc4REUzNDZFOUM5QkZGODQyRTgxQkVDM0MyQjU2Ci06MTA5NEEwMDBDQUY1N0EyMTY3Q0ExNzZENTc3RUFCQTE4MzdBMzA2NEZCCi06MTA5NEIwMDA5MDVFNzI3NjZFNTVEMDBGODRFRjJEOTU2RUFBQ0Y2Q0FDCi06MTA5NEMwMDAyODY3NzZGMkZEODg3QUY4N0U5MzQ2QUVDODc1QzQ5MDE4Ci06MTA5NEQwMDAyRkI3MjE3QzFEODc3QURFRTRGMjI1NDJGNDI3RTc2QjYzCi06MTA5NEUwMDBDNEU3OEZEMkI5MUQ3NzI1OTgwNUY0REUxQTFBRTM4NUYzCi06MTA5NEYwMDBGRURFMUE5MTQ4RkQ0OTdFMzdGMkU3OEYwNDlERTdENERFCi06MTA5NTAwMDA2RTU3MzA2RUUwNEVFMjc2QTM5QzlGQUNGNzQ1RkE4QzI2Ci06MTA5NTEwMDBGNTM4OUZDOTU1M0QwNDg3RDVCNTY2QzI5QjlDNEZBNUJDCi06MTA5NTIwMDAzNTMwMTJGREFGNzZEMURGQkU4NTlGNTk3QkExRkNEMENGCi06MTA5NTMwMDBBRjBFMTAzREFFNkU1N0ZDRTQxN0I0MUZCMENFQzdGOEE3Ci06MTA5NTQwMDA1Q0U4OTcyQUM2NjNBRkU2MjYwOURCRjJEMjAxRDIyMzk0Ci06MTA5NTUwMDA1Nzc3RjEzOEMxRUFBRTRFRjM3MjQ3OTQ0RTBCOEVFRDU5Ci06MTA5NTYwMDBCQjExRTk2Qzc1ODc4RDI1Mjg4ODNGQkU1RTIzOUQ4MkRGCi06MTA5NTcwMDA3QzIxQkE2NzIxMkJFRDY3ODE3QzBDOTEzQzY1QzEwMjhGCi06MTA5NTgwMDBGNDQ3QTRGQ0REMjdFQzRCRTZFMEVGOUYxMEYzOTZGRERCCi06MTA5NTkwMDA0NkU1NjYwMkQxN0JDMUIxMDlGQkVDMDBDRkQ1M0VDNUUzCi06MTA5NUEwMDAwN0E2MTJEOERCQkMxRUY0MUYyMUY5Q0JEODA4RjRDQkQ4Ci06MTA5NUIwMDA2NEZGNDZGOEZENUFDOEQ1MTg3ODdFM0UzRDg2MUU5MTU4Ci06MTA5NUMwMDA3QUI1RTBGMTE5MEM5RjEyN0Y2NjAxNzdEOUVGOUU3NDhFCi06MTA5NUQwMDBCRTlGQjUyN0RENENGRDZGMjhFN0YxRUIwRDE2QUUzRkMyCi06MTA5NUUwMDAzNkI0RDhDM0M4RDc2RkE3NURGOThFNTIwQzcwNzI1OUM0Ci06MTA5NUYwMDAyM0Y4REM2RjVBRDY4MERGRjdFN0YwNzlCNDk5RDY4RjdECi06MTA5NjAwMDA2OUU2RkFFQkY1NzRDMjVGMEFFM0YyODlDQkEzODc1RUUxCi06MTA5NjEwMDBFNEYyQTQyMUU0MjAzRkIxMjE1OEIzODJGNjFGREMwOTEzCi06MTA5NjIwMDAzRUI0Rjc1OUYwNERFQkZDRTQyODNEMThGMUVCN0Q2MUI5Ci06MTA5NjMwMDBBRkQ1MEJERkFGRUVFMDdDMTA4NTVCNTg0N0I3MjBFNzc2Ci06MTA5NjQwMDAwOEVGRkI1QzcyM0YyMjU4ODA3MDA1RkZCRDA1RTMwQ0ZDCi06MTA5NjUwMDBEMjdGNEY1OTFDMDgyNTdCMDdGMzZCQkFGMERGMjcwOTJGCi06MTA5NjYwMDBGRkREMzJDNUZFMTdGNURGRUJEN0ZFNTMzNjk2NTc2NUEzCi06MTA5NjcwMDBCRDRCNEZDOTJGRTAyN0VBRjhFQTg0RjBEQjBFMDhCQ0E3Ci06MTA5NjgwMDBGRjQxRDA0QjdENjkwN0YxNDNGRDk3Q0RDNDQ3OEUyQTNBCi06MTA5NjkwMDAyRTRGMUM4N0Y0NzI5MEIxMUY4QkY1M0Y0MEZENTQyNjZFCi06MTA5NkEwMDA3NTVDQTlBMjNGRkNGNzhBQjM5NUM1OUZGN0NENEFGMzM1Ci06MTA5NkIwMDAzRjRGNDVCQzc0QUFCNDJGQzVDRTgwNTU1RjA2NzA0RDkwCi06MTA5NkMwMDAxMDMwMTBGNTJDNkUxRUY3M0VGMTE0MjAwMkY5RDJEQzlBCi06MTA5NkQwMDA2QzNEOTdGRDdCQkU3RTU5RTQyMzA1RjE1RDJGNjA3REQ3Ci06MTA5NkUwMDA2MjY3QzVENERGNjEzQ0YxQTk1NERGMjg1OEZBRjE5REM3Ci06MTA5NkYwMDBGM0ZFRTY3N0QwRkVDNEY2RTkzRUQ0RDNFRUQ2MDBEMTMxCi06MTA5NzAwMDA0RkJGMjdDMTg3NzE0M0I3MEE5NjJERDA0MzRCQzcxQjY0Ci06MTA5NzEwMDAyOTk3RTFCRUQ4MzM5NzRDNDBCOTk5RTdFNjdDNzlFQ0JDCi06MTA5NzIwMDA0NTc1MkRDMjY3RkQzRjNDM0YwREJGRDc4Nzk1NzRCNDhCCi06MTA5NzMwMDAxQjRGM0NGNUY3N0Y0NkJENThCN0JEMDkzRDBERDZGQTI2Ci06MTA5NzQwMDBDQ0VCNjQ4NzlCQzI1QkY5RkJBNzUyQzlCRTNDRkFDNDUxCi06MTA5NzUwMDBFNjY5MDhGN0Q2OEU1NkZBN0VFQzg5QUQ1NERFRjcwRjJGCi06MTA5NzYwMDBDRkVGRjk0RkI0MzcwMjI5M0VBQzc3RUNDNUNEM0ZGQUM1Ci06MTA5NzcwMDA0RkE0RjM5QTE0MUZBRUEzMjE2OEU2RkJCNjkyQkU4REU4Ci06MTA5NzgwMDA3MkFCNzMyRkYxQTlBNDk3QUI1MUVGMjI5QzZBQjlGQzdECi06MTA5NzkwMDA5MUY0RkM4NUQ4NTc1QTU2RTE2ODQzNzlGNkM1QTZFNDlBCi06MTA5N0EwMDBCQTU4RjE0NEJGNTgyRkM2NUM0ODhFRDUyQTE0NEY2QjY3Ci06MTA5N0IwMDAwM0FBQzFCODQ2NUIyMjlCODJDRkE0QTI4ODM1MTdDNkY0Ci06MTA5N0MwMDA1OUI4Qjg3MzFBRDkzREExQ0Y1NzYyRkQ3OUJCMTJEOEU5Ci06MTA5N0QwMDAyNjhBQkY2MUYwMTZFQzdGMjI3NUM2QzY4MzE4M0MwQzQyCi06MTA5N0UwMDA3RTMyRjRCRUZEMkNEOEQ3MUY1QjMwOTY0M0ZERTlFQ0VBCi06MTA5N0YwMDBGRjc5NkRFRkZFMTFFNTY4OERCRDc3QUZDNzFCN0RERjhCCi06MTA5ODAwMDAyNkUyMzQ1MDlGRjQ0RUQ5OUFEOEYxRDAyQUI3NDNEMEVCCi06MTA5ODEwMDAyREQ3OUIzOTVERDU3OTVFOTIxMzM2REYyODhENUQzQTYxCi06MTA5ODIwMDBFQzYwRjMyNjEwNDMyQ0E3QUVFNzRBNUNDNzU1NjM5NjVECi06MTA5ODMwMDA0RTI0QkFDMDM4MUZFQTlGOTA4M0ZBNUY4RDcxNEFFMEM4Ci06MTA5ODQwMDBCMzQ1NkVDRTRGMTk0RUU2QkUxNEM2QUYzNDMzQjcwM0UwCi06MTA5ODUwMDA5RjhDN0Q2NDIxMzlCMjgzRkEwNUZCODNFQzJBRUZFQjAwCi06MTA5ODYwMDAwQjc3QTAzREIyQzUxMkNDOUU4NEZEQjQwOUJEQjU5RDU5Ci06MTA5ODcwMDBDRjFCREEzQjcxQkYxNEZBNzM1RTNBODFGQUU5QjFCOEQzCi06MTA5ODgwMDBBODdEODhCNzlGQjVCRDQ1ODlDRTE3MjgzNTFGRjUxNjI5Ci06MTA5ODkwMDBGNjU3RUE0MDNEMTNBQTI1RkM3OEFEQjRBRTYzNTgyNUNGCi06MTA5OEEwMDA5QkQ2NUQ3Q0MzRjgyOEZGMUFFMzNCMjhDRjcwMUZGOEQ2Ci06MTA5OEIwMDA0RTc3Rjk2REVFNDlEMUE3OENGQjE4RTFGOTMyN0U4NzFFCi06MTA5OEMwMDA3NTdGRUJGNkQzOTMzRDk1QUVEMzJCRjFFQzk1N0QwQkU1Ci06MTA5OEQwMDA0RjcyRkRGQkVBRTcyNDZGMUE5MThFNzFGQ0UwOTczQTE0Ci06MTA5OEUwMDBGREJCNUNEMkYxMkI5RjEzMUQyRkRGQzVGNTZGRTNBRURGCi06MTA5OEYwMDAxMjJCRDJFREYxNzU3RUY2NUIzMDQwMUJDNTNFRUIxNkE4Ci06MTA5OTAwMDBBNTc3MjVDNTc5NUU0OTcwNjJGQ0VFQTREMDM3RjUwRkM2Ci06MTA5OTEwMDA3QzdFMThGNzQ3NDdFQ0NBMjZCRkZFRTQyQjA5QjVEODcyCi06MTA5OTIwMDBDRjdFOTM4OUUwQjk3RkRCQzU1QjVCMTVFRDNDQjkzRjJBCi06MTA5OTMwMDAwMDc2MzA5MTZBMjNEOEE5REMwRTVFQjExOUZEQjNENTRCCi06MTA5OTQwMDA3NUNDODdGQ0RGNjhBMDlGQzY1RDA3ODg1RUE0MUQ1Q0EwCi06MTA5OTUwMDBGMEY4REMxNURDRkU0Q0YwMjVBMEZGMzY5M0RCQTMwQzAxCi06MTA5OTYwMDBFQzUxQUM5RjM2MzNEQzYyMjVGQTJBMjk0M0ZBREFCNzg4Ci06MTA5OTcwMDA3MENGNDZENEUzOEQzMzk5MTNGQkRGMzJDQ0ZGNEEyRUYwCi06MTA5OTgwMDBBRDQ3NjE5OENGQjJDNUQyM0VDMzBDRURCNzU0N0E5REI2Ci06MTA5OTkwMDAwMDQ5ODBEQjc2QjI3QkQ5MThBQkQwNzMyQkM4NUU2RUUyCi06MTA5OUEwMDBDQ0JBREU0NzdDNjY5NDA3QUZCNDkwRERENUU4NERBNDExCi06MTA5OUIwMDBGOTVDQkQ0QkI5OEREQjIzMEVDNkU3QUYxMDdENUUxRDk0Ci06MTA5OUMwMDBCRTJDOENGQkNBQkYxN0YwOTM3MDNDNjlFOUI5MTFFMTVBCi06MTA5OUQwMDA3MUYyMjUyMDQ0Rjg3RUY1NEM0RUFGNjkzMzNCNDg4RTNBCi06MTA5OUUwMDBCQ0ZEQ0EyQ0QyRTM5MjJFOTM1RkI2OTEzRTc3OTk5RDJGCi06MTA5OUYwMDA4QThGRjREQTNDOUIxNkFGRUQxNkFFOTdEMjg0OUUyOTdGCi06MTA5QTAwMDA3QzgwRTMzNzIyRjgyOTIyRjQ0MEM0NkRENUM3NUI5Q0UzCi06MTA5QTEwMDBBMTYyRDRCQkJGMTdGODI3MzE4MkYyNURDODkzRDUyQjYyCi06MTA5QTIwMDAyMkM0NEYwRDNCNzk3RjZFOUJCRkU0NzYwREZEQkEyQkIwCi06MTA5QTMwMDBCODVFOTQ3MTdGREMwN0E4OEUyMTJGN0VFN0U2RkFCMTJECi06MTA5QTQwMDBFMEYxNjU5QkQxNUVCRTBBRjA4RTJBMjU2NzhDOTBBMzVCCi06MTA5QTUwMDA0MDE3MDhCNzlDQkEwMEQxQzE1NUVFOUI3RDZBMDFFRDU1Ci06MTA5QTYwMDAxRjkwOUZEOERGNjI2NUIxRTIzQzQ3ODUxQ0Y1QTQwN0QzCi06MTA5QTcwMDA0QTMxREVFQ0M5NEMyNjNCQzdBMzk2OUIxMkIwNUQ4OUU4Ci06MTA5QTgwMDBFMkRCRTZBNUZENERCMkYzRkEzREQ5QkU2RDNBN0UwRjlECi06MTA5QTkwMDA5NDlBQTBERTkxOEM2NDhFRTdGMEFGQ0Q3M0M3MjMxRjNDCi06MTA5QUEwMDA3QUE1OUZBRUIzRkIwNkZCREJEQzZFOUNEMzFFMkE0Njc5Ci06MTA5QUIwMDAzRjQ0RUU1RjQ4Mzg4NDVCMTI2QkI1RjJCMzRGQzAyMTcwCi06MTA5QUMwMDAzQzk2QzdGM0MxQkU3NzUwRkNEQTA5RTNBMDVGQkZFRDU3Ci06MTA5QUQwMDBCMjI3Qjg1RkRGNEFFMzFGNzRGMzc4NDYyNUFDMEZFRDc5Ci06MTA5QUUwMDAzNjRGNjE2MDBERDdBN0M5QkU1OEYwQjg1M0UwNzlERjkzCi06MTA5QUYwMDBDMjFCNEJEMEFGNkNBQzcxRjg5MERGMUU3QTU1NTk0NjQzCi06MTA5QjAwMDBGNDhDQzE0MUY0Qjc4MzJCMDgwRjBDRjA4MEZDQzA4MkE5Ci06MTA5QjEwMDBEQzJGNkQ2QzBFODQ2M0QzN0IzNUYxNUYyM0YyOUY0MkEzCi06MTA5QjIwMDBGNDRFRjE3NkEwRjczMEE3NzdBRUZGQTRERjhGRjJCMTQ1Ci06MTA5QjMwMDAzQUM2N0VBODk0MkY4REQ2REVEMTQ4Qzc5MjFGMUFBN0E5Ci06MTA5QjQwMDBGNThFNDZCODBENTU5RTlDQjQwMEZGMjNGRjAwMUM5MDc3Ci06MTA5QjUwMDA3RjI0QkYyNEVGRTY3Q0IyQTlDNTVCOEVERjM3NTUzMjg4Ci06MTA5QjYwMDA2N0FCNDYxRjE5RkQyNTlDMjdGQTlENTJBRThGNzUwN0RFCi06MTA5QjcwMDAwQTNEMTgwNzMwNDUzNjYyMUU4NTk0QzM4REJCRUYxQjI2Ci06MTA5QjgwMDAxRDJCQ0Y0RENBNjFCQjk5Q0IzNzdCMzgyOURDQUFBMUVECi06MTA5QjkwMDAyRkRDREI0QjlFNDA0RkNBREI0OTVBMUIzQjJFNTJFNjYzCi06MTA5QkEwMDA3MTg4NzhGREQwRjIyMjMyNTA5N0EzQkNEOTk2MTQ0NjIyCi06MTA5QkIwMDA3OTI1RTM0NEM2N0VDNzc4MTQ1RDNDNDZGQTJEQjhCRkNDCi06MTA5QkMwMDA4MEY1RTc3QTM4QkQ1NDdBQjg5Q0I4NUUzQ0U1RkMyNTUwCi06MTA5QkQwMDBGRDdCNERDMUNGMzE5RjI4OUVGRTkyRURGRTUyNzEyQjMxCi06MTA5QkUwMDAzOThFRDRBMzQ2RkNDQkZEMTE1QzRGNzU1MUZDN0FFRDQ4Ci06MTA5QkYwMDA3QkI5N0MzMkQyRTM3MkMxMjc1RTVDMkJENDdCNEVFQzA2Ci06MTA5QzAwMDA2NzBEQzYyRkVGODdENTlBNzVGOTZGNkRBNkNFQkE1ODM2Ci06MTA5QzEwMDBGMTJGQjlCRkMxMUUzMjBGMjlCRjZFRUYzQTlFNDdGNTMzCi06MTA5QzIwMDA5Q0M4QTc2NThCQ0RCQTdDMkE4N0NGREI4MkYxRDMxOTdDCi06MTA5QzMwMDBGNjgyMTI5NUM2RTU3MUFDRTQ2OUVDNkJENEMzQzVCQjgyCi06MTA5QzQwMDBEQUM3NjA5RTkyMjdBMERGMUZDOUFDNERENEVEM0Y2NEY4Ci06MTA5QzUwMDAwNzVEQkE3MjZFNUQ4RUFFRkVCMEU2MTFCQUVGQzNENzg1Ci06MTA5QzYwMDA4RUQzN0QyRjA4NEREMDk1MEJEQjJFRDVENTFGRDUzRTNECi06MTA5QzcwMDA0MzlGOEZGQkM4NTVCQUZBNjNDMzczNzVFNTREMkQxRDFECi06MTA5QzgwMDBCNTg4OTc4QjlGQkE0RUQ3NkU4NkQ5NjkyRTAxQjg4RTRDCi06MTA5QzkwMDBFRjU4QTZDRjEzMzNDMDMzRjVDRjZBNEMzQTdDRDI1MzdBCi06MTA5Q0EwMDA0MDc4OUQ2MUQ2RTcwQjVGQjI0QjBGMEY0QzhCQzNGRTI0Ci06MTA5Q0IwMDA4QTk5RTg2RkRBOTEwOUU3Q0E2MzJENjZFNjZGN0E2NURCCi06MTA5Q0MwMDBGQjgyQzFGNEMwRUNCREJFNDAwQzNGNTNEMkI5MkMxQjhCCi06MTA5Q0QwMDBGN0IxQTRGQ0I4NTBGQThCMzc0RjQ5N0ZGMUJFQzc4MzY4Ci06MTA5Q0UwMDBEQkJCMUVCOTBGQzNFMTYyMTk4MDRCQURFRjVDNzBCMUY1Ci06MTA5Q0YwMDA5QzBGMkUwQ0UwOTJGQ0ZERTE2MkVDNkY3RDUyMjNFNTlGCi06MTA5RDAwMDAwMzdGODQwNThEN0REQzJCRjg0ODk2MTc4NDUyQjkxRTlECi06MTA5RDEwMDAwQUNDM0I4RjFEQ0RFM0MwNDExQkRGOUYzNDdFQjc2NzZDCi06MTA5RDIwMDA3MEI5MzYxQUU2NDBGMDE5MjI1RjdGMjZGMDcwMjgxRUJGCi06MTA5RDMwMDA1RkFGRkQ3QTdGMjZDQUVGMkE0NjdFQjNCM0I5RTU2QkUzCi06MTA5RDQwMDBENDVCNEJDQzExODZGNEZGOTA1OENGMTY5MTE3RkFDODBDCi06MTA5RDUwMDAzQTI3RjVGM0E4RDg3RjdDNkM5RDk3REUzRkJFNkUwQzRBCi06MTA5RDYwMDAzREMzRUI3Q0Y0N0VEQkJBMjlGNERDMEVGNjFDM0U5RjhGCi06MTA5RDcwMDA1QzU3NDVDRkE3RDYwNUE4REVEM0VCNkFFOUI5NzM1RDdBCi06MTA5RDgwMDA5MENGNkIxMEJFNTgxOUQ5Mzk4MUY0OThGMUQyQTUyMTIyCi06MTA5RDkwMDA3NTQ4Nzg2MjZBNUU0QzdEMTlCNzFGNzVGMTM5RjNDODUyCi06MTA5REEwMDBENzFFNUEzNEZCNEQwREZGNjY2NTI0QkIwRjYzMEVFM0NGCi06MTA5REIwMDA2NDM2MTlGNzMzQ0ZEN0ZFQkI3NUI1QjNERjFDMzU3NEU2Ci06MTA5REMwMDAzRTkyRjRDNENFQTQ4RjhFQzVENzQxOTEzRkY5QkI4Nzk0Ci06MTA5REQwMDBDRjZFMEExNUM1ODc1Nzk0Q0U2MkMzQTlDNjdFMzIwN0Q3Ci06MTA5REUwMDA5REY1NjJCNDE5MzRFRDBGMUFGOEI4MjY5ODFBRDM2RTlGCi06MTA5REYwMDBBODExRjQ1OTZCRTNGQkVGOEIwQ0ZDRkQ5MkY4RkU1MkJCCi06MTA5RTAwMDAwNkQ3Nzc5RkM0OTEzMzU3Njc5OEE0M0Y2RkExRkRDMEQxCi06MTA5RTEwMDA0MTdDRjc5MzJCNjJDMTc3N0Y4NjU3QzdDNzhCODIwNjM5Ci06MTA5RTIwMDBCQzFBRkFGOUM0RDIzRUNDMTc4M0NGQ0VENzhGNUM5RjMxCi06MTA5RTMwMDBCMUREQzMxOTVDNkVCREY4RkYyOTdGN0U3MjUzMzJGOTI0Ci06MTA5RTQwMDAwRjA4Mzc4RjY2RkQ5RkRDOTQ1NDFCMkIyRUYzNUEwNkE4Ci06MTA5RTUwMDBERjA3MDVFQjlDMTVCOEM4RDQwRjU5RDE1NjFDQzNCQ0ZECi06MTA5RTYwMDA3QzlGNzdBNDEzRTM0MzMyMEYyMDNFQkQ5QTI5OEU0NDkyCi06MTA5RTcwMDAzMDU0MDdDMzE1RjBFMUI1MTY0MkZGRTY4MTcxMjI2NjQyCi06MTA5RTgwMDAxQ0M3Njc4QUVBNTlDQ0E5NjE5QTczMUVFQTYwN0E4MDc2Ci06MTA5RTkwMDBGNjIxMkJFNUVGRjRFNkQwQkVGRjA1RDIxMzUzMUYxQkNFCi06MTA5RUEwMDA3NUFFN0RCQTQxRUQyRjUwQ0VFQ0Y4ODFFNThDRTQ3M0IwCi06MTA5RUIwMDA3NkU2QzE1MUIxRjQ2NDJEOEU3RDI5QUM2M0NCRDRGQjIxCi06MTA5RUMwMDA0OUNFOUNBN0RGMEI4NTVGQUREQTRCRkJENjQzODZERjFGCi06MTA5RUQwMDAyRUY3OTBFMjUyNkJFRDI5QzUwQ0ZDQkFFRjEyRjgzMzY1Ci06MTA5RUUwMDAzNDgzRjFGMzU4OUYyNTg0RDFDRTNGMjBFNjA5OEVGRkJECi06MTA5RUYwMDAyNURDQUY2RTlFOENDRjdGQ0UwQTdDOTgwMUVEOTc1OTAyCi06MTA5RjAwMDBCOTlGMzgzRUMzRkYxMTk2MTNDNTNFQjAzNUQzQkExMTgxCi06MTA5RjEwMDA5RkNDQzlENzcxODk1OEM3NDY5MzM3MUZEN0YxQTVFMjlGCi06MTA5RjIwMDAxQjhCN0U4QUQzMTRGNkUxMzM4NTQ1QzZGM0JDQkI3MDI4Ci06MTA5RjMwMDAxMEZEQjNGNDhCMTNCREU4REYyNjhFNjZBQzg3RTJFMTNCCi06MTA5RjQwMDBCRTA0OEM5QjU5OTNGQUZGNzEyNEYyRkJFQjI2OEMzMEY0Ci06MTA5RjUwMDBCMkU3OUQ3Q0JFQ0YzRjkyNEJGQjJBRTgwMUExN0MyODUzCi06MTA5RjYwMDBDNkY3MzBGNTRENjg4NzQzRkI2QjU5RjAxOENFRUZBODY0Ci06MTA5RjcwMDBEMzFFMzJDMUJDOEE2NzdGRTFDMjdDQThFN0JCNjdEMDMxCi06MTA5RjgwMDAzRTQyRTQyOTM1NjRDNTczMEIzRDI3RkVFRTZBRThFRkQ3Ci06MTA5RjkwMDA5MjFFMEJDNTlCMkY2MTJBQzlGMzdBMzM3QjAwRjkyNkU5Ci06MTA5RkEwMDAxRTNDOEZGRjc1RUNGQ0FFMkIzMkI5REM5Mzc5NUJDNjlGCi06MTA5RkIwMDBFRjc5RTJGQkYxMzg3OUM0OEU0Q0FFMTc2NDdFOEM0NUE0Ci06MTA5RkMwMDBFNkM3NzhGQ0U3Q0M4RkIxMThGMjYzMkNFNjAwQzM3REJFCi06MTA5RkQwMDA2MENCNDA3RUNDNjI0NkY5MzFEMDhGMzYzRkU2Rjg4Q0JDCi06MTA5RkUwMDBEOEYzNzA4Qjc5NTg0RTI3QzVFOTM3ODVERTFGMUY3MTZFCi06MTA5RkYwMDBFRTc1NUE0RTI3RThGMkFDQTNFRDFERjQzRTVFN0VDRTIwCi06MTBBMDAwMDA3ODMxRkVGMTM4Rjk0OTYzMDdGQUNGNjZBMTc0NkQzQkU4Ci06MTBBMDEwMDAyRjlGRjdDMDM4NzlGNERENjJDOEYzODk3RUU3RjkzREY4Ci06MTBBMDIwMDAxQkQyMzg5REVDQ0Q3MkJBOTc0MkQ3NEI1OUFGMDVFOTk4Ci06MTBBMDMwMDA3NDg5QzM2REMxRjg1MTgwRjkzQUU5REM4RUQ5RDJERjU5Ci06MTBBMDQwMDAyQkY5NkUwNEQ2MzM3RjgxNzZCNjA5MjQyRERBRDk0QkVECi06MTBBMDUwMDBENjVBQkVFOEQ1QzhBOTZBQkZCRUNDQjBCRTQ2RUU2RTIxCi06MTBBMDYwMDBDQTYyMzRERkM0NzE2MzI4QUZFRjE0RjNBNjNBQ0YyMTdDCi06MTBBMDcwMDAzNzE3REI1NUJCNTlCM0RFNDM3MUVDODY1QjA1RkMwRTJECi06MTBBMDgwMDA2NUM3ODZERjc1OTlEQ0VFODg3NzFFRTJENkNDMTREREQ1Ci06MTBBMDkwMDAzOUJEREI5REU3OTY5NzA4REY2MEJBQjY3RjIzMUVEQ0VCCi06MTBBMEEwMDBGNEZEN0M3MEY2RTBFNjFBQzZEMUNBMTU5RUJGRkYxNzE0Ci06MTBBMEIwMDA4Nzc3OUEzODU3QzVDRjA1NTgwQzc5RTg5QkIyQjhGQzFBCi06MTBBMEMwMDA4QkNFOUJFN0ExN0ZFNDBDREM5RTg5NzJEMUVDMURBREE5Ci06MTBBMEQwMDAzRDA3RDA2NUY2Mjc0RDgwRTcyMTIxNzc4QzcwRDk5RDBCCi06MTBBMEUwMDBDOUVEMzdFM0JBQkI0NDNFN0RBMkNBOUEzQjM1RjAzNzhGCi06MTBBMEYwMDBBRUY3Mzk0MUU3QjJGRTA2MEJERkJGODJCRjgwMURGMDJECi06MTBBMTAwMDA3MjAzRTM3MkVGRTFDQzExMjIyRjNDQ0Q4Q0YyNzAzMTVGCi06MTBBMTEwMDBFRjgyRERFMDdDOEJGNjkzMjQ5QzA3QzE0RkMwREQwODA1Ci06MTBBMTIwMDBDNzAwRjNERTg4NzlEQkU3ODM2NzQ3OTZGRjYxODRDQjVFCi06MTBBMTMwMDBEMjAzODk1Njk0RkYzN0RBRkJGN0EzOEZEQURCNjNGQTkxCi06MTBBMTQwMDA3ODI0M0MzRjc3OEMzQ0JDOURFMUZFREI5ODk3RjdDMUJGCi06MTBBMTUwMDAzMzY1OEE4RkU3NTFCMDk5NjRFRjI4QTE1Q0Y1RUNDNUFGCi06MTBBMTYwMDA0M0I3NzczNkE2MDRDNzIwN0Y3QzI5RjJBRUE1M0VEQTM2Ci06MTBBMTcwMDA5ODczNkMzNEU2Q0Y3QjVERTVBQkIyM0MxNDc3RjdBNzAwCi06MTBBMTgwMDAyMzFEQkQ2NkUzNzRGNDA4RjQwNEU1QTYzRDYzQjdBMjlECi06MTBBMTkwMDA5RTc5MzAyQjU4ODdGNTY0MUUxRkYzRjc4RkM2M0M4NEQ5Ci06MTBBMUEwMDAwQjg1MTNGQzU5OTA4RUNFMDdBNzI3MzIxOUUxRTc1MDkzCi06MTBBMUIwMDA0QTZDM0FGOTREMUMzQTMxRjIwNzlEMkYyQkZERTFGODFDCi06MTBBMUMwMDA0M0MyNTNFRTVCQzhGOUQ1NjU3MTNBOTQ0RjA5Mzc2M0MyCi06MTBBMUQwMDBGRTUwNUQ5NjQ5RDRFM0Y5ODgwRjY2MDUwOENFN0RDMzJECi06MTBBMUUwMDBCRTNFOUMwMDczM0Y2NEM4Rjc5MkNGOTM0MjFFOUQ2RkEyCi06MTBBMUYwMDBGRDEyREUzRjk0MUMzRTk0MTg3QjdFQTZBQ0ExRTFFN0U1Ci06MTBBMjAwMDA4NzlBNUZCRDlDNUY3MUVDRjk2NTY2MEQwRDdFMDFENjg2Ci06MTBBMjEwMDBGRjU5REEwRkEwQzcwMENGRjU4ODY3QjZBMTlGRTRFMzI2Ci06MTBBMjIwMDAyMTU3RUM3OTk2MEQ3OTlFNDFDQjBGQTE2RjI1N0RCMzE3Ci06MTBBMjMwMDBEMEQyM0FEQUFGQ0Y0QThDQjk1RkJGMDBGQzI3RjQ3RkE3Ci06MTBBMjQwMDA4Q0ZCRjY3MjdGMUVFNDA3QURCN0M2REU3RjYzM0FFMjkxCi06MTBBMjUwMDA3REE2NTg3NzA2OEJBNEUxN0VFNjFFMUJDNUZGOERFQjFECi06MTBBMjYwMDBCRjQyRDAxMUMwQUI4MkUwMzVBNzlGRTIxODg3NDZDNzM2Ci06MTBBMjcwMDA5NjBCMTVDNkZBNkQ3QzlDNzhFNzBCQUVDRTUyODY3NEIxCi06MTBBMjgwMDBCRTgwOTUwNjI5RkU1NzZFNzc0NDU0QzBDMzZEMDIxRkU5Ci06MTBBMjkwMDBENkRDNTUzRUI0MEZDQkIzREUzQjg4RUIwNEY4OUYxOEY5Ci06MTBBMkEwMDA4MEE3MjY5RkVGRDhCQTc3OUMyMzJERjFFNTc2QkRGQURCCi06MTBBMkIwMDA0MjU5NzM4Q0Y1MDQzREMxMUJCMzM0N0U1MEZENTNFRkZFCi06MTBBMkMwMDAzQTQ3NkFGMDM1OUVGNTlBRjhGOUU4N0U5M0NFMkZDRTlDCi06MTBBMkQwMDA2NDE3RTQxNzU3NjM5Rjk4OEZFMDBBOTAzRTQwRkQ4MDEzCi06MTBBMkUwMDA3QTY3RTNFRUE5MjU4ODRDQjQzMzMwOUZBNzNGMzk5MUI0Ci06MTBBMkYwMDBFNDY4NkJDRUE1NjNCQzFBNzg4NkIyQTQ3REE5QzZCMTBBCi06MTBBMzAwMDAxQkZGN0JGOUZGNTFCQjQ5RDFEOUFGRDFGRUNERjQ1RTI0Ci06MTBBMzEwMDBFMkE3RENGMThGMzFGMTExRjRGOEVGMjEzREU2RjI2RkE1Ci06MTBBMzIwMDBDNEE3MTE3RUExN0IyRjRGQTNGMzA1MDhCRkU5RDFGRTdGCi06MTBBMzMwMDAwNkYwMUYwN0NGMUQxRTdGM0JGNkQ3MjBDRUQxMjgzMjU3Ci06MTBBMzQwMDA4RjZGMjA1RTYxNzYxRUI2NDdFMTNENTRCQzI0OEE3ODRCCi06MTBBMzUwMDAxQUQ4MEQ4RjIxMUQ1ODZEODIxRjk5ODNDRTg3NEJCQjU0Ci06MTBBMzYwMDA4NTE5RUMxQjM2ODZGQkI3Mzc2NEJERjc0NzhDRjc2QzU1Ci06MTBBMzcwMDA0Q0UxMkNCQkYxNDcwOUU0MDcyRTUxOUM1NjVDMzdEOEMxCi06MTBBMzgwMDAxRjlGRkUxQ0VBMDc1OUU0RDNCQkM4M0Y5NDc2NDY5MjUwCi06MTBBMzkwMDA3QTM2NjlFOEYzOTRGRUYyRjlGMkE5RjdBMTNEMDZGM0UzCi06MTBBM0EwMDA5OTYxNzJEMEZFRTYzRTU4NUYzNkM4OEQxOTU2RkUyQzc0Ci06MTBBM0IwMDA5RjA1NTQwNUZEQ0Q1MEYzQkE3QjYxNUVERkIyMzM4OTUyCi06MTBBM0MwMDA1N0MwRjNBNzhDQzM2MUNEODFERkI5RDAxRjlENjFCNkEzCi06MTBBM0QwMDAxQ0QzQ0EyRDYzQkNFMzhEQUM2NDM3RTE1MUM0M0JCRUQyCi06MTBBM0UwMDA2NTczN0U3RDMxQzJFNTcyMTdDMUE1Rjg5NTk5OTlEQTNBCi06MTBBM0YwMDA3OENCNDBCQzQzQUM2MzVFNjgyOTk3QTcwNjM5MjdFNTU0Ci06MTBBNDAwMDA5OUM5Q0VFRjExNjE3RUU2NzU2NjUwREM4OEMzM0RBNDI0Ci06MTBBNDEwMDAzMDMzOTRBRjkwNjU3NDUyQTA3Q0I5NDA5MjgyRUQ2MTY0Ci06MTBBNDIwMDBERDU3ODgyNzVCMTZDQzQyMzk4MzY5M0MzODFFNzg3RjFDCi06MTBBNDMwMDA1OUY4NkM5REVBRjNFMjczQkExMjMwRjM3OTg0NzlERTRECi06MTBBNDQwMDAyMTZCQ0VDM0ZBMjY3QkFGQ0FDRkU3QzEwQzMyQjBCREI5Ci06MTBBNDUwMDAxQzhGOTc5MzQ1Nzk0M0NEQTkxQjZGRjIwRThFNjMzMDA1Ci06MTBBNDYwMDA0NzMyRDlCRDU2MzFBRkEzNEU0N0M4MDRFRjZEOEVDOEYxCi06MTBBNDcwMDA1MUNBNEYxNTRGNjNCQ0UzM0I1MzI4ODRGOUQ5NzdBQURGCi06MTBBNDgwMDA2MTlBNkYxMjhCNDQ3QTMwM0U2MTA3MTA5ODI4OEVGMEUzCi06MTBBNDkwMDAwN0U0MDNGMDZFMUE3MTlFMDlDRTUzOTFCQjE4RTYzOTlBCi06MTBBNEEwMDBGQTE1MkNBNzFCRjQ5MUM3QjE4NkYyOUUzRDAxQjM0MTZBCi06MTBBNEIwMDAwRjA1MTVFNDlCQ0M1QUUzN0JCRDdFQjJCMzQzNzQxRUZCCi06MTBBNEMwMDA0ODg5MDRCMkNFQTY5RjNGNUU2MzhDRDM1ODY2NzAxNDUxCi06MTBBNEQwMDBGN0RGQzJFRERFOEYxMzc5M0I0OTE3RTlEOTVDRkYzNjEwCi06MTBBNEUwMDBCQUFDOENGMjVEMzJFQzc2QjREQjRGMjYxRkMxMjM5N0Y5Ci06MTBBNEYwMDBBODM3REE1MDZGRDgyRDdFODI4N0Q0MUZBQkJCNkU2NTJDCi06MTBBNTAwMDA4ODlGQzY1REQ1MENFNUU4NkYxNEJFRkYxOUJBNDFBMTVFCi06MTBBNTEwMDAzQzA1Nzk2RjQzNkQxMTdCMUY1QUIyQTZFQzExMzRDRTA2Ci06MTBBNTIwMDBGQzc3ODIzNzM0NDBCOUU2M0QzNjNFMDJGNTRBQTYwNzRECi06MTBBNTMwMDAyQUYxN0U5NkQ2RjFDQ0I3MUVDQUFEMDlDMTY3NUZDMkJCCi06MTBBNTQwMDBGNTFDNTBBOTlGMjY3MTJFOTYzMTY3RkQ0RUU4N0ZFQkQyCi06MTBBNTUwMDA3NUMzN0M5QjcwNDkxNUZEMUIzMTBGQThGRjNFRTZDNEY3Ci06MTBBNTYwMDBCQzkxNDE3NDdBMDZENjA3Rjg3RjAyQ0IzMEVGQTYxNTZFCi06MTBBNTcwMDBDMTVGREMwMUY1QjNERjYzM0VBQTIzQkVBMzJGODI3ODVGCi06MTBBNTgwMDA1MzA0M0RFMEZCRTlGMEJFNDlEMDRENjFCN0MyRjdFRjlGCi06MTBBNTkwMDBERDM2Q0E5RjYwMDczMzg5NUZFNkRCRjkzODRERERFNUJDCi06MTBBNUEwMDBENzRFODI3OTE1RjY0QzI0MzIxRTA5RjUzMUJGMDkzMzk2Ci06MTBBNUIwMDAwQzc4N0UxRDIzN0ZEOTU4N0YyNEQ2Rjc1MkI0OEFFN0MyCi06MTBBNUMwMDBENUU0NThFOUZFMjMyNkU0REM2NDAzQkY1RDE2QTU3RkNECi06MTBBNUQwMDBGQTVFMjJDQTRENDIxRkU5RjgwNEZCMDFGRkRDNUZDNkE4Ci06MTBBNUUwMDBCN0YzQTk5RDlCRjM4MzhGQzkzRkNFQjc5N0IyRTgxRkZFCi06MTBBNUYwMDBGNjVCMTExRDg3RTRFRjRDRjE2REZGQTJEOTk0RDczREI2Ci06MTBBNjAwMDBEOTFDRDk4QjdDN0Q5OTc4OTY4ODI3RjJCNTFERTBCODQ2Ci06MTBBNjEwMDBEMERDQkNERjAzRUI0OTVCQ0I3QzJEMzhDQTYyNkYyQkVGCi06MTBBNjIwMDBGNjU3Q0EwMjJBQzJCOUNDNzk1RjJCQ0U2RkVBRTIwMzkxCi06MTBBNjMwMDBFOTQ4NUY0RjY2MTcxMjNENUQ2RUY3MTUyNjAwODlCNDM1Ci06MTBBNjQwMDA0RUYxRjk5Q0YwQUE3NkIxNDI3MDk5NUY2QjBGNjNGRUYwCi06MTBBNjUwMDBEQUZDODFGQjdBODIwNTBCODA2RjE2MDYxNTcxOEUzRTNGCi06MTBBNjYwMDA1OEIwNTgxMzhGOTU3OTdEMEI2Q0UwNDdDN0RBNzdDRUQ5Ci06MTBBNjcwMDBFNjdBNUNCNjZGMTJFNzRFRTRGNzZERDkwRTlFNUY5OUVECi06MTBBNjgwMDA3RDY1NTMzNkU1NTdGMDdDNjdFMEZCREJCMjI3NDVFNTk3Ci06MTBBNjkwMDAwODhDNEJGOTI4RjM5OERGODJFQjlBMjdGODU2RjJGREU1Ci06MTBBNkEwMDA3Q0ZGRUQ2NEI3Q0UwRkU4RURDRkRGMjgxQ0RGQTE0NUJFCi06MTBBNkIwMDAwQUQ5ODMwQjZCQ0Y2RDlGQjY2NENCRkRERTNDMjdDNUZCCi06MTBBNkMwMDBCNzk5RDQ0NzlDQUVBNERDOUU4QjdBMUNFNTZEMTVFODQ3Ci06MTBBNkQwMDA2RDhEN0RCQ0Y4Q0UzMzY5RDQyRUYzQzlENTY3ODc0NzFECi06MTBBNkUwMDBDRkI5MzQxOUNFQjkzNDhBNzMyRTREQkI1QTJDMTk0OEMwCi06MTBBNkYwMDBFRkUyOUM0QjUzRjdFNzFCQjVGOTdEMTI0RTgzQ0ZCOUMwCi06MTBBNzAwMDBGNDUzNUVFMzAyNkI3ODJGOUVGRjU5QjAwQUQ2MDhGNTJBCi06MTBBNzEwMDBERjEwRTcyMkRFQzQ3MzExMTNBMjc0OTQ3QzVENDI4NEJGCi06MTBBNzIwMDBFN0NERjkyOTdGMkZDRjk5RTRDMzdDOTMzNkQzMDRDQUIwCi06MTBBNzMwMDAxNzZBNEI0OUY2NjlGMzczMzZCNTM0NTc2MjNEOTkyNzZBCi06MTBBNzQwMDAyNENGQjUyQzg4QjMxRkZDOUM5MDZCNUIxNDlFQUYxNTc3Ci06MTBBNzUwMDA1QTY0Mjc3ODdCNTQ3NjUwN0I0RURGNTMxOEEwM0NCOTVGCi06MTBBNzYwMDBBNjZDMkY4REIzNDVDNDExMzBBRjc0MjIzQ0MzNjA4RUVDCi06MTBBNzcwMDA3MTdDRjFGNjQ2RjkwMEZENkRDMEZFMkEwQTdEOTQxRjNBCi06MTBBNzgwMDA1MzkxQ0FGM0NDM0NFOTgxOTJEQjhBQTJGREQ2NzRGM0UzCi06MTBBNzkwMDBCQ0JDOUFDMEQ3NkZGMUZDREFFQTUyODRBNzUxOUU0QjM5Ci06MTBBN0EwMDBGQTMyQ0E3NUEwQkY3RDQ4OEZERjk5QjhERTg5Q0FGNzMzCi06MTBBN0IwMDBDMEEyOUJBMEJGQkVGN0FEOTQzRkM3RUVGNjJCMTY2OEI0Ci06MTBBN0MwMDBGN0UyQkI0RTFGOUVBN0RCNTAxRUE4QUVBNEVGNjYzQTcxCi06MTBBN0QwMDBFRjk3NTFDQjIyMzZGODVFRkE5RTc1MUJFNkVERDVCMUE4Ci06MTBBN0UwMDA3NjJCRjY1NzY3RDA1QkFCMUM2RjVBOTEzRjU3NkRCNzBFCi06MTBBN0YwMDA0NEU5OTE2MUJFQTFBRjEwMDU1REMzQ0U0MTcxMEY5MkQ2Ci06MTBBODAwMDAzRjUyMkUxOUU5OTg4REQ0Q0I5RjEyMjk2RjQxMkU3MDlCCi06MTBBODEwMDA3REI1OThFQjM5RjZBNDgyRjE5RkJFRTQyM0FBRjA5RkEwCi06MTBBODIwMDA0OURFNEQ5MjQyQ0EyMEU3Mjc3NUJGNERGNkNBMzQ5MEUzCi06MTBBODMwMDAwRkU4OUYyOTU4MkVBNkZBNTQwNkY5MzkwNkYzNDcyRjM4Ci06MTBBODQwMDA2Mzg5NDQ1RjgzRUMwNDMxQUZEMjgxNzk3MzdCNDhDQTVBCi06MTBBODUwMDBDNUYyMjk4Q0UxN0QwNjEyMkYzMDBFRDFCM0RDQUY5QkZGCi06MTBBODYwMDA4NEY3RjBDMEYzMzIzMUVFOUQyNjdGNTE0NDQxM0NCMTc0Ci06MTBBODcwMDBCMEE5MTBFRDg4MjBEOTNCNDZGQkE3Q0NERTlDNjQ4N0FECi06MTBBODgwMDBGNTRENjFFRDI0MTcyN0VGN0Y5M0U0MjRFMEY5MkNDQUZFCi06MTBBODkwMDA5OUQ3OThDNEIzQ0Y4RTcyQTYxMjEzRkY1NDdDRUFGMUY1Ci06MTBBOEEwMDAzNENCRjE5MDE5RTEzNDJCQ0I4ODhGOTAxOUUxM0FEQjRFCi06MTBBOEIwMDAzQjA4NEY3NDRFQzAxRjA3NEY3RTI5NDc5ODVFOEUxNDg5Ci06MTBBOEMwMDBCMDMzRkM1Q0YyN0Q2RkREODE3RUVGRjlFQzkwMEYzREUzCi06MTBBOEQwMDBDMUFDMUM5MjlGN0E3QjI0NUU1RTVENDE4RUUzODJGMjY2Ci06MTBBOEUwMDBFQUZBMkNEQzRGQjg5NEY1QUVEQ0E5MENBNjhCOTNGQkVFCi06MTBBOEYwMDBEN0FBNTkxQUZBOTE3NEI5NUJFNEQ5MkJBRjhCQkNERDk2Ci06MTBBOTAwMDBEMjY0RDI3MzUxQkRDOEYxNUYyNjRBOTcyMjVENjlGMEM3Ci06MTBBOTEwMDA3RkM1QUU4NDg4MEFGNDU2MjJEQTVGOEFGNDMwMjFBQTExCi06MTBBOTIwMDAxNzIzMjY4N0Q3MEFFMzZFNTQ3QzZENkEwQ0JDNjdCODgwCi06MTBBOTMwMDBCQ0E0RkYyNjlBRkMyQUQ5NTNDQzk3OEU3ODA2QkM0RjJDCi06MTBBOTQwMDA0Mzc4NERCMTc3QjQ5QTYxOUU4N0FEQkU5RkEzQkY1MjQ1Ci06MTBBOTUwMDBDRUJDODRGNzcyODM3RUE5NzBENDk4OTEzRjJCRUM0NkNECi06MTBBOTYwMDBGQ0ZBMDlFRjk1Q0U0MUVGNERERjA3RUZDMzExRUY1MjJGCi06MTBBOTcwMDA3RjBDQzFGRTA0QkMyRkNDODlCMTVGMTgwRkVGQzFFRjczCi06MTBBOTgwMDA4OTc3MjNCRTI1REY3NzI2MzgyQjFDMThEN0FERTNGOTRFCi06MTBBOTkwMDBDNDEzREYxRkQ5OEFFNThDRDUwNTc0Q0VBNTMzQ0RGNzU2Ci06MTBBOUEwMDAwNjdENkZFNkRGNEI3QkZDMkFERTlGNThCODA2QkU0MzcwCi06MTBBOUIwMDBCOUIzMjA1MDgxRTVBNkI1MEFDOUNCNDkxRjA1NUJCMUUzCi06MTBBOUMwMDAzQ0YyNkVGRUJENjQ3REYzMUI3ODBGNTk1Mzg4QjdERkYwCi06MTBBOUQwMDA3RDc0MjNERDI3MTFERTI4REE5N0I3NTc2MEI5QTk4RDdBCi06MTBBOUUwMDBCN0ZGMkFEOTFFNDJGRkJBRUM2MEI4MTVERjhGN0Q4MDExCi06MTBBOUYwMDBDRjQzREE3NUQzMDU5RDc1MkEyRkJDNDFFRERBNzlCQkJCCi06MTBBQTAwMDA5QkRGQjIyNzkyN0MxMjc2REEzNEIxQ0VFOThGRjE3NUYyCi06MTBBQTEwMDBCQTdGN0I1NTk1MTdFOEYwQTZGRTkwMDVFOUUwQjBBOTRFCi06MTBBQTIwMDBBMThDRTQ2NTFDN0ZBQjVDNjlDRkMzRTcyQzkwMEI4Q0Q5Ci06MTBBQTMwMDBGMDBERjQzOTgyRTc5QjZFODMyMTFFQ0JFMTc2ODZDQzQ0Ci06MTBBQTQwMDBEM0M0N0NGMTZBMERCRTFFQ0JFMTcxMjc1OTJGQzNDNTVCCi06MTBBQTUwMDA3ODVFRjFBM0M5NjRCN0NBM0NEMkM4Q0Y5ODgyNzEwMEFFCi06MTBBQTYwMDA1QzIzRTlENzM4NzlBNUIzMEE5QjQ5NUZDRTFBMkVGMzQ4Ci06MTBBQTcwMDA0OTdCQ0RDQjYwREM5MkIzN0ZCODMyOTY3RkZEODQxOEUyCi06MTBBQTgwMDBGNzg4Qzg3Rjk3RUZFQkMyMDUyNkY0M0YzQTkxNzhFODQ0Ci06MTBBQTkwMDAxRUIzREFGN0QxMkVFOTRDNjNCQTdCNDIzQTBCNzhCOTkwCi06MTBBQUEwMDBGM0QxOUExRkI3RTUwMTdDNERDREU2MTAwQUZEN0M4NUY4Ci06MTBBQUIwMDBFRTNEQjlBNjg3NDU1MjUzMDZDRjdGOTY5OTQ1NzhERTdECi06MTBBQUMwMDAwMzlGRkZDQTU2RUJCNjREMUEzQjdEQkUxNDFCOTc4RkYyCi06MTBBQUQwMDAyMjNENTIyM0YwMjRFNUM1N0M4MTJGRTBFRkREQzhERjY1Ci06MTBBQUUwMDAwQkVDQ0Q2NDE3MkUxMkYyRkQxNjE2QTYzOEM1MkQwNkY2Ci06MTBBQUYwMDBGRUFFNzc3Q0YzOTlDOTg0RjEzMDNEMUZBRjg2RTk3MEQzCi06MTBBQjAwMDBCREQwRkZGODI3MDBGRkJBNDc5MjlEQThFNzU3NzdFODI2Ci06MTBBQjEwMDBFQkQ1M0RGMkZFNDE2RTVGRTlGOUJDNEVGMjc5NThDRkJDCi06MTBBQjIwMDBFNzYwMzg3MDNFRkZEOTM4REE3RjkxRTdGQTEyRUNGRDIyCi06MTBBQjMwMDA5Rjg1NTg3NEJEMDNGQUREQzA3RjA5NzhDRTZGMENGQThCCi06MTBBQjQwMDAyRDI2OUU1RjI4Q0E3MkRDNTNFRDVDMEY4NzQwMEYwQkU5Ci06MTBBQjUwMDAzRjg3NDRFREE5NDNCM0MzNDgwRjI1ODI3RjI1MUY5NzQ0Ci06MTBBQjYwMDAwODdEM0U0ODVGNTcxOUZEOTg4Nzg4M0YyNjhBOTI4NDYyCi06MTBBQjcwMDBCQkQ0Q0ZEMDBGRTk2Nzc5NkUxMEY0RjJGQjdFRjJFRjExCi06MTBBQjgwMDBDMUZGQzQ3OThFRDNGM0NCMjYwNUU0NzM0MUQ0NUYwMUIyCi06MTBBQjkwMDBCQzdEOEQ3ODAzNzk2Q0U3NzE4QTc2ODZGMjJDQUVERDA4Ci06MTBBQkEwMDBFRjU4MTNEM0VFMDc0OTQ3RkIwMDgzRURGRDg4Q0U4RUE3Ci06MTBBQkIwMDAzN0UyMkI5RTVEM0Y4MEFGMDRCMDk3OTJEMDhGNjdDNDgxCi06MTBBQkMwMDAxRkZGODhDRjIxRTQ3NTgwOUM3NkU0QzY5MEQzRDY3REE0Ci06MTBBQkQwMDBCQzVFRkZENjA0OEExN0M4RjhCOEU0MzcyNThGREJENUVBCi06MTBBQkUwMDBFRjY2Rjk1REI5QjhGRjIwRkEzRjc0RUIyQ0RBQUZGRURGCi06MTBBQkYwMDA4NkY5NjlCRjFBRjM4RDcyNjNFNDRCRTA3RUY1MDY0RDZBCi06MTBBQzAwMDA5Q0Y0NTA1QUVDQjhGNUYwNUNDRUVGNEI3MkY5QkFDNjMyCi06MTBBQzEwMDA3QkZDNUUxQ0VGODg5NUM3QzU4RjI0OEE2NzBBREY1N0M3Ci06MTBBQzIwMDBCODM4OTdDN0I5OTc4ODY3Qjk3ODFFMTE3OUQ4NDc1QzQzCi06MTBBQzMwMDBGQTc4QkFBQzU3MjFDNkY5NzI5REREQkU0MTIzNTdCQ0U0Ci06MTBBQzQwMDAzRkIzMzVBM0JFRjIxNDhBQkNGNTM1OUM1RUZCNUU0OTZBCi06MTBBQzUwMDBEQkFBQkRBRkVEOUFEQ0YyMjUwODQ3NEZBMURGOUE4RDQ0Ci06MTBBQzYwMDA3MTk2NTdCODVFNjgzNEY3NUEzMUJGRTQxQTc3NzAyQTg0Ci06MTBBQzcwMDA3RTZGRjQzMkZGMEJEODhGQjdENzNBMEZFMERDMjdGNkEwCi06MTBBQzgwMDBFOUZCMkNEQ0RGRTg0QkUwNEYzOUFGNkI3MkFCOTdFMEIwCi06MTBBQzkwMDA3QUZCNkVFRDI1RjkzMDUwQUVFRTI1RkVCRjI2Mzc0MDJCCi06MTBBQ0EwMDBFM0Y2Q0Q5N0RGNDVGOUM3QkNDQzg0N0Y1ODJFRjg4MkY4Ci06MTBBQ0IwMDBFMkJDMzFFMkJBODNFM0I4RkFGQjY3OUFBQ0IxRjc5NzJBCi06MTBBQ0MwMDA1OTVFQjIyRTNFN0I0MzM3OEYxQkRFNjg2NzFCNzNFMUY0Ci06MTBBQ0QwMDBGQjkyRUU0Q0YyMUZFQTUyNDJBMzlEMTRDN0ZCRUZDNTU0Ci06MTBBQ0UwMDA1REZCODZGNUQwQkEzNjk1RjdFNzNGNUE0QUZCQjgxNEI0Ci06MTBBQ0YwMDBGNzU5RERGRDM2QzlCOUQ1OTI0RkJBRjQ3QzUyMkZGMDIxCi06MTBBRDAwMDA3QkJFRkQwRjYzNUM3QzA4RkNCMzI2MTZGRkJDOENGQThGCi06MTBBRDEwMDBDOTEyODVGRjZEMjIwRkE5NTI2REE4QzBCOEQwQTkxNTIwCi06MTBBRDIwMDA4Q0NFQkZERUY2QUU0QUY0NzREQkIzMEFERDA3MjFFRDRDCi06MTBBRDMwMDBCM0Q1MDJCRUYxRDY4M0U3MDdCQzFBRjk4MUU3MDdCQzk5Ci06MTBBRDQwMDAxQUZGMENDRjBGNjhDQjc4N0U0MDVCMUZDRjBGNjhCRjE4Ci06MTBBRDUwMDBFM0Y5MDFFRDc3M0MzRkEwMkQ5N0IwRTVBRDE4Njc2QkE3Ci06MTBBRDYwMDA2QTYzQ0VCMDk3OUYyN0QwQjZDN0YzMDREQTMyOUUyNzI2Ci06MTBBRDcwMDBEMEI2QzdGMzA0REFGMjI5QzZFMTc4RUEzMTk1RTJGNEY1Ci06MTBBRDgwMDA3OEFFNDBEQkZFRTY3NzI3NjYyMURENzQyNUYwM0MzMkE1Ci06MTBBRDkwMDAxNkYyRjcxNDAxNUM1NjA4QjhFMDc5MDM2RDdGQzc1M0NCCi06MTBBREEwMDBBRTdDODcwMUREQURFODU5MzkwNzlGOTdFQzVBQTVFQkRBCi06MTBBREIwMDBBRjVFNkQyMDNBNjRFRDVDRUUzNkMzM0YyNDNGRDUyMjkyCi06MTBBREMwMDAxNUU3RjFFRDJFODVBNTE3RTBGREUxMDZGREQ5QkQ3OTZBCi06MTBBREQwMDAyMzhBOUU1QkMyRkFGN0Y1NEMxM0FGMkQxODFDOTc3RkEwCi06MTBBREUwMDAzOTU3RTQyMUU2QjAxQzZEOUMyNjRBMDcwRTVGMDRENzU0Ci06MTBBREYwMDBGRjkxRUE4QjQ1MDcyNUVDQTI1NDhBQ0ZCQ0EzNjJFQ0Y1Ci06MTBBRTAwMDA4MTdEQzU5QUI3NUNBRTY4RTJGNzA2NzhEOEIyRjRGNEYzCi06MTBBRTEwMDA5MEUwRDVEMzQzRDIxODNEM0QyNEZCRjRGNDkwM0E0NTVECi06MTBBRTIwMDA0RjBGNjlGRTcxRTc4NDZGN0E5NTlFM0U4Q0YwOUQwMjBDCi06MTBBRTMwMDBGRjIwN0MyN0UwQ0Q5MDE4NTc4Mjc1NjI5Q0Y3MkYwNTg0Ci06MTBBRTQwMDBERjJGNzJDNUJFODc4MEVGQjdFQ0YyMEE4Nzk3M0VENzM3Ci06MTBBRTUwMDBEOENCQTJGNjQ5RTkzQkNEQjQ0OTZCOEM3QjRBMzg0QTQyCi06MTBBRTYwMDAzQjQxQzYyRjI3MzFFRUE3REJGMUJDNjUyMURBMDFEQ0JGCi06MTBBRTcwMDA3RjQzRkQ4RjdDN0VEOENBRkQzNkE0MjA5NDkzMzdCMUUyCi06MTBBRTgwMDAyMEM5QTM5QjBDRkFGRjY2Qzc0MzU2RDRGRjgzRDYwQjk5Ci06MTBBRTkwMDAxNjE3REUxQjY4NUMyRkRBNTE0QzEzNEYzMkVBN0ZBNTgwCi06MTBBRUEwMDA1Qjg5MjQxN0UzNzJCQkE1NUMwRTlFMjU2M0M3QUYwQ0JDCi06MTBBRUIwMDA0NTVFRkNERUUxQjdFNTc5NjgxQzY2MkZEM0M1N0I2MzkwCi06MTBBRUMwMDBEQTczNzIxRTEyMkU3MjdDMUI2QjU2QjM5MDlFQzcxOERCCi06MTBBRUQwMDBFRDJGQkRCRjJDRkQ2QkVBNTQxMzhGOTZGRUIxRjQ0RkRFCi06MTBBRUUwMDA4QzcwNTY4NzE3OTBERDM1RDEyOUZERTI5RUVCRjFCREMwCi06MTBBRUYwMDBGNDg3OEQ3RUU4RjlGNkE1RTY4NTk0REU5RjE3NDRFRDhDCi06MTBBRjAwMDBDOTJCQzQ3MzlFODgxN0MxQjI3RUZCNkZEMEY4NzJDNTdGCi06MTBBRjEwMDAzQjBDQzc5QkJCRkIyMjBGRDJDQjQ2QTU5OTE5RTY3NzBBCi06MTBBRjIwMDBGMDU1RTg0NzM1RjVBN0YzRjg0QjUwQjc1RkY1QjZEMkMzCi06MTBBRjMwMDA0QkYzNUVDMEZDRjdFMEIzNTFDNEQzMUFCQkRFQTY3RDcxCi06MTBBRjQwMDBENEM2MkUxRTJGNjBCQkY0NzgzMURBRkJBQjU4ODdCNTIwCi06MTBBRjUwMDA0MDE5NkNFRjM3QjAxRUVBQ0Y2OERGMEZBMjkzRjNFODE5Ci06MTBBRjYwMDBGMThFM0M3OURGMTZDRjE3NjA0MjJFRDUwOTc4QzVGM0Y0Ci06MTBBRjcwMDAwQkNDMDhFMEE5RDFGQjNCODExRkU2RTU0RDhBRTZEMTY5Ci06MTBBRjgwMDA2NkI4QzA4RjUxMzEwRkMzNkI4RDk1MjdDNUYwNzIxNTEwCi06MTBBRjkwMDBCMDQ5OTczQjZBNDg0RTJDNkYxQjE0OTdCMDEyM0ZCNUNGCi06MTBBRkEwMDA5RjdCN0REMjBFQjgxRjdDMzc3Qzk2RTY3OTc5REMyMEJBCi06MTBBRkIwMDA3MUNFM0I3RUZDNUNEQTkzQUYzREZGRDE2NEU1RTcwRURBCi06MTBBRkMwMDA1OUIzRkU3Q0ZFREEzQzkzM0MzRkE1MEU2NUZEODNFMTYwCi06MTBBRkQwMDBGQUZERjJGMjY1RkUwMUMwRUYyRTJERkNFNDNFODI1QzJDCi06MTBBRkUwMDBDRkVGMjdGNTNDODlGMTQzMzU3OUE2MURGRDVBQUYyQkVDCi06MTBBRkYwMDBEODgyRjU4NzFERUMzREFDQTAzQzczNzgyOTNGRTRFNDkyCi06MTBCMDAwMDBBRUEzMUZBM0ZGMkVEN0M3NThFRjE2QkNERkI2NkU5N0FGCi06MTBCMDEwMDA0QUZFNjBEREFFMzdDODJFOEFFRkVGQjUwRkRDQTMyMDA1Ci06MTBCMDIwMDBGNjM3N0UxMjZCNUUzMkFGQjk1MjJENEFFREQ1RDhFOUI0Ci06MTBCMDMwMDA0Qjg1MUYzMDc5NzhFMDIxNkM1N0ZBNjE1RTBBQ0VEN0Q0Ci06MTBCMDQwMDAzMkEyODNFRUM1RUFCRjgzREJDMTZFOTVDRDQ0Rjg4MUExCi06MTBCMDUwMDBERUUzN0FERjYxQTY3RDA3Nzc1MjQ4NEQ0MTNCNkUyOURBCi06MTBCMDYwMDBFM0Y3RDBGOTlBN0Q0ODJBRUFCMDIyOEFEMzY2RENBMUI4Ci06MTBCMDcwMDAwNkQwRkVGRTc0Q0RGMjM0M0NBRjlDOTFCQzIyQUQxMEU0Ci06MTBCMDgwMDA5RUQzNkRGQzVFOUEwQ0M1MTRFMEU3NEU5N0E1RTEzRDlBCi06MTBCMDkwMDAyMDM3RDhGOEJFN0NDMTVGMjc0NTBBODFERjVFQjdGMjUyCi06MTBCMEEwMDBGQjQ2REQ0OTQxQkFCRkEwM0Y0REE1RjkxQzVCMDc0QkVDCi06MTBCMEIwMDAxQjg1RkIxRURGNENDNDdCMDc3MkNFMzgyNkUwN0NCMkJBCi06MTBCMEMwMDBDNUJEMTYzRkNBRTNGN0RDMUM3RkY2QkI4OUU4QUZBQTEzCi06MTBCMEQwMDA2NzFENzRCRTVERDI5RkJCMzBCNkJGQjI0MkMwQTNEMTY0Ci06MTBCMEUwMDBDM0YzREU0RjBBRkJGMTkwRDg2Rjk1NzlGMDZCQzQzRTQ1Ci06MTBCMEYwMDBFMEExRDEwM0Y3ODM3OTMwMkZBNDMxQzE5RkJBMTBFM0M3Ci06MTBCMTAwMDAxMTA3NTRDQTZCRkZDNkU5NEY0RDIzQkI5OUU3QjNBRjk0Ci06MTBCMTEwMDAxMUY2QzM0OTkxRjdCOTY2RjY4QzRDRjQyRkUyRTU0QjcyCi06MTBCMTIwMDAxRkM4RTM3NkVGMEY3NTVGQTVDQzNGOEQwQjg3MzQzM0Q3Ci06MTBCMTMwMDAzMzVGNDJGNzJFMDVDRTU1RUZENTNGQUIzMUUxNzk1QTVCCi06MTBCMTQwMDA3QzhGOTczN0RGOTdBN0U4RjJFMjFCMzEyRjFFNUVBREE5Ci06MTBCMTUwMDA3OUE1M0M5MzlEMjM1RkJBMTFFRjIzRDdFNEQ3QTA5RjM1Ci06MTBCMTYwMDA4NkVCNkJDNEZCQzhFOTlFRDIxMzc0NEYwN0Y2ODNGN0Q2Ci06MTBCMTcwMDA4NjlERUZERUM4MTU2MjFFOEQ5ODRGOUVBRTdEQ0ZGOTdECi06MTBCMTgwMDAzOURBQkY5QkJFM0YyREUwRjZGNDNCQTZBQTZEMzFFNjRGCi06MTBCMTkwMDA5OTM3OENDQkE3NzExRTczMDBGNzI1MkY4RUYwN0IzRjVDCi06MTBCMUEwMDBFM0Q1OTNFN0I4RTNDREFCNkI0NkVGOEQzODZGQ0NDRkVCCi06MTBCMUIwMDA4QzM1NUVDQTMwNEUyNzcyQkU1REFFREU5NTAxQkU5RkY1Ci06MTBCMUMwMDAzN0JBM0E1OTUzNzZGNkU3Q0ZENUM4RDdEOTAyM0Y1RDlCCi06MTBCMUQwMDA1N0Y1RTZEMzdEMDBCM0I5RkYxQTBGQ0Y2NUU2NjYwNUQ0Ci06MTBCMUUwMDBFMTkwRTAwQTA2RDExRTkxRjcxNUUzN0RDNjNDQ0YyMzFFCi06MTBCMUYwMDA3NDRFN0M0N0UxQUNFQUNFMUYwQzg2QjM5NUJFQ0JGRTA1Ci06MTBCMjAwMDBBNERDMzlGQTg4NEE3MkU3RTgwNzgyMUY5OURGQTE5NDIzCi06MTBCMjEwMDBBMUJFRTI3Qzc1OTRGMUI4RUVEMTc2RkVGQjFGQ0I4MjI1Ci06MTBCMjIwMDBBMDJCNDA3RTJDREQ1RTNGMDcwRjFGQUZEQzMxNzEyMzZBCi06MTBCMjMwMDA4QTdGN0M3RjM3Qzg5RkE1NTk4QzREODNFN0IyMERGQTcyCi06MTBCMjQwMDBGREIxNkZEOTAzQTRFNzU2M0M2MEQ0NjcwMTJCQ0FEOTdFCi06MTBCMjUwMDA5NTBGRTlFQkQ3QjEwN0JFNDZGQkEwQ0U2MEY3NjYwOEI1Ci06MTBCMjYwMDBCRDZCQjQ3RjY3MEMxM0Y2NkYxOTJCQkI5MDczNEU4RkI5Ci06MTBCMjcwMDAzMEZGRUM2MUE0RkZGOTdFREIyNEIxOUY2RUFDRkZCQzE0Ci06MTBCMjgwMDA5N0QzQzM2RDNCRkU2MEM1OUYwNDhBRDdFRjMxOTAxN0ZCCi06MTBCMjkwMDAyM0ExREYxM0VCOUNGNDVDMzJDQzVGMzMwQ0RBMzUwRDY5Ci06MTBCMkEwMDAwQjJFQzQ3MUZBMEU3MDM4OUY2QTM4QjU5MkUyRDJCNThGCi06MTBCMkIwMDBEQzBFQjBFMTI1MkJGMDlGQjZFQkVERTQ0N0RGOEJGNzFBCi06MTBCMkMwMDA4QzAxOUM2RDM2NkU1RjQ4QkI0QTU1NkY1N0YxMjc1QjBBCi06MTBCMkQwMDBBNkZFNkU0NTFBQUVDRkZEQ0NBQzJBRjQzRjNDQ0YyNDdGCi06MTBCMkUwMDBGOTExMUY5QkNBRkQyNTI4QkYzNzU1M0I2ODlGNzhBQkQ2Ci06MTBCMkYwMDA4OURGNDM2OEI3RjFGREI5RjBEMzUzRjc2MTM4Nzg2NDVCCi06MTBCMzAwMDBDN0U2MTlFODY3MzhCQkY3NDYzMDJFRDE2NkUyRkJBRkQ3Ci06MTBCMzEwMDA2REQzOThCOEM3OUE4RkQ3RDQ1REREODlGM0NBQUYwMUQyCi06MTBCMzIwMDA3OTBGRkQ2RDJBRjA5NzM4MzVGRDMzNjEyRjM1MEE1Q0IyCi06MTBCMzMwMDBGNEJENzZEMTRGRjFERUFCOUZCRjQzRTYyQUFDNzMwNDc4Ci06MTBCMzQwMDBDNUJGQzYzMTRFMzczMkJGODQ3RTFCNDMxMzJGM0EwMTJGCi06MTBCMzUwMDBGQTg3NjlDRTNGOEZFQjUwMjI5NjE0QkE1RjhGRTJEOEZFCi06MTBCMzYwMDAwREVCMjMxOUQ3QTNGRUZDMjVERkFGOTVGMzczQkY5RTJBCi06MTBCMzcwMDAzRDAzRTNGRDUyOUY1RThGRjk2RDE4MDcxNjc2RUYyMkFECi06MTBCMzgwMDAyNkZGRjg3RTQxQURBMEVCNDVDMkRFQkQzRTg5QzM3OTA0Ci06MTBCMzkwMDAxOUYzRDFGOUFCRUJFQzJDMDVFM0NCRDc1Nzc0NENBMkU2Ci06MTBCM0EwMDBGQkFGRUIyRDY5NjhBRkM4Qjg3NzNDQkNDNzhCQ0YzNDE3Ci06MTBCM0IwMDAzRTk5Q0NFRkNCNTFGQTQ3NjMyN0M3MzAwNjUyMUFDRERFCi06MTBCM0MwMDBCNzM3RjZCMzYzOThFMEU3RDFDMjRFMUJDOUZDQjhDRkRDCi06MTBCM0QwMDBEMkI4RTcyMkNBQzdCNzI1RjI3RDM1OTA2Rjc2QzRFQkE1Ci06MTBCM0UwMDA3RUQ0RTdCMEVFNUI1RTREODhGMDdERTNCMEI4MTc4N0EyCi06MTBCM0YwMDA4NTY4M0Y2NjRGMjZFRDJCQjgwQkZEQjRFRjdFRDJEMkE5Ci06MTBCNDAwMDA5QjRGRjIwMEU0OTcwMkJBNzNDRkIwNEZBRTMxRTNGRDI5Ci06MTBCNDEwMDAyMDM5NjA0NzQxRjlGODJGMEU1RjgzQkZDRkQyMzhBMkExCi06MTBCNDIwMDA3NzI1REUxNzlFRkVGODU5NUUxRUQ3N0IxOENCQzMxRTBDCi06MTBCNDMwMDA0RkJDOTZDQTEzN0E1N0FBNTA5RUYyNzhENkI1RDQxRTNFCi06MTBCNDQwMDAxRDI4MjBBQ0NBQzc4NzVGOEJFN0ZDOEU4OUY4MjVGM0RGCi06MTBCNDUwMDBGNUQyM0Q0MThEQkIyRjMyNjlFMzgzMjVGOTVDNEUxRjQ4Ci06MTBCNDYwMDA0QkUwRjU4RTE1QjAyNTczMTFERTYzN0E0NzZCN0YzNzlECi06MTBCNDcwMDBDMTkzMkZFRDUyNkU5N0M5NzVDQTc2MkMyQjc2RkZFRkNDCi06MTBCNDgwMDAwQjNENzA4QkI4REY2NzdBMTI2QjRCRTBGQjE1MjFCNDc0Ci06MTBCNDkwMDBBRkRFRUNCRTg4RTBGMkMyMzA5NzgwNTcyRkREREIyOEFDCi06MTBCNEEwMDBGQjMxOUVFRjk3RTNBRTQyQkQ4RDcyRERBMjNGNEZGNEJDCi06MTBCNEIwMDAxQkExMkY2MDlDMEQzNDRFOTFCRjA0RUZFNTY5OUM5QjRFCi06MTBCNEMwMDA1NzgyNzgwMzdDOTkwNUJFQ0NEQzBGREM0QTc4QzY3RUI3Ci06MTBCNEQwMDBEMzhBNDk4RjRDQzQzQ0IxMzdDRjQwRkQ4MkU4QkM4RDQ0Ci06MTBCNEUwMDBGNDcxNTg4QzczNEIyQkRGNjdFQTRGMkIyNDNBOUE5RUVBCi06MTBCNEYwMDBDNEVEM0Y1NjBBRjAwMzM5MzY0NUMwQUQyNDVGOUNFM0U2Ci06MTBCNTAwMDAxOUMwNDNBNjQyRkRCNzBBRjhFNUYxRkExN0JBREVEMzJGCi06MTBCNTEwMDAzRkQwN0EzNTc4RjI2M0RFRjE5QkJCQzYxMjlFQTYwQzUzCi06MTBCNTIwMDBEMEMxNjY1RDNGQzc1QTBDRURBNkYwQkM5NDQ2NTcyMUNBCi06MTBCNTMwMDBCNUJCNTdEQ0IzMkZFRjJEQzY3NjA1RDA2RTdBNDVGRjJECi06MTBCNTQwMDA0NEU0MDc3OTZGMUIwQjREMjM2N0JENDE0ODhCODE3QjFBCi06MTBCNTUwMDBEODNBNzg3RTBBMUJFOUU3RjcxMUNEOUQ1MzJBRDZFNzQyCi06MTBCNTYwMDAxNEVCNzM2QUVGQTUxQkUwQzM4RkZBRjM2QjM0Rjc1MjQ5Ci06MTBCNTcwMDBDQkY3MDM3MDFGRThBRjY4ODJFODRGQzdDRkIxRkE0MzNCCi06MTBCNTgwMDBCRTg4ODc4RjcxRjk3RjYxN0NDODc5MUFFMDM5MDA2N0JFCi06MTBCNTkwMDBDM0ZDMjQzQzkxOEZBOTVEOTE5RTlGRTQzQzg3RTU5QjcxCi06MTBCNUEwMDA4NEJGNkRFMEU3ODJFRjM5OUVDOEVGNUZGRDM3MjIxRjUxCi06MTBCNUIwMDBEMkFCQTdFN0Q1NUQwNTI2REMzRjk1RUREQTNBNUEwMjE2Ci06MTBCNUMwMDAyOEU3NjVCQ0RCRDY1NTFENDJGREQ3RDQ1RDRFNzk5QjdGCi06MTBCNUQwMDBBQjdGRjVFQ0NCMjE2OEJGRUFGOTg3NTMzMDk5RjZBODI5Ci06MTBCNUUwMDBCOTNEMDNFRERDODYxREY3QTRGODcxQkZDNDFDNEE0MUM4Ci06MTBCNUYwMDBGOTc5MzRBQzU2QzUzQTBGMTgxMjc4OTA3NjU0QTNEMDI2Ci06MTBCNjAwMDAzN0M3OUVCRUZGMUE4NEM3N0ZFQ0IwMzg1MThGMzYzREQ2Ci06MTBCNjEwMDA2NThCRDgyODBFNzIwQkQ5NTE1MEZFOUM5N0VGRkQxQUZFCi06MTBCNjIwMDBGREQyQTY1RDdBM0I2OUQ1M0YzQzlDRTEyNTdBMEFFNUNGCi06MTBCNjMwMDA5QUYwOEMwQjhCRTQzMjc4MzY2RUI3RjgyMjZFMUU0RjgwCi06MTBCNjQwMDA4NDYxNTgxM0VCREY4OEYzMzNCNkM3Nzk5QzA2QkMzN0E3Ci06MTBCNjUwMDA3NUE4NEJGMTNDQUZGMTNCNDgxMkIyQzM5QUJBRUUyNzQyCi06MTBCNjYwMDBCQkFCNDkxQjY3MDAzQ0Q0QzVCMUJCNkVDREQ3RTc1QjE0Ci06MTBCNjcwMDA0QkI4QjBCMDg3RUM5QUQ2NUZGRUFDRjg3MzA3REVBNzg0Ci06MTBCNjgwMDBGOTRGMjk0QTkxNTY1RkFFMjczODlERUE1OEZFRjdCQjFECi06MTBCNjkwMDBCREYxRjVFQTQ5QjQwQjZDREE3NjFDQUZERTVEMEFFRDVDCi06MTBCNkEwMDA0OUIwNkVGRTZDQjA0NDUyRDBDRjZGRDg2QUYxODFFNkRCCi06MTBCNkIwMDA2NTBEQ0YzRUYxMjRFRTg3QjA0RjZDNzRGRjQxRkRCM0IyCi06MTBCNkMwMDBGQjNGQkUxNENBRjU5RDE2RjcxQzNFN0Q4NzkyMTFDNTNGCi06MTBCNkQwMDA0RjkzOTdEQjI3MTIxRkFCNUVEQzRGRjcwQ0UyN0JCNDc2Ci06MTBCNkUwMDA2QjI1NUVFQTNCRjc1QUQ5RjhDMUYwQUJFOEQ4MkI3RTYwCi06MTBCNkYwMDA3N0MxODA5RjhFQ0ZBRkE0RkIzQzdGRjk5RDE1RTlGQUZGCi06MTBCNzAwMDBFODFFODU2NTE2MEM2RTVGQjc3NTdGMEFEMjFGQzIwOUU5Ci06MTBCNzEwMDBGRDRCODlBNzAxQkMwREMyNTdFNDlBRERBNTU0OEZFMjA5Ci06MTBCNzIwMDAxQUYxRjAzNjM3OUZGMTc4RDBBRjlFN0QwRTdGMDdCMENCCi06MTBCNzMwMDBFRTM3MzYxRkFFQkZFRUI5REI1MzcwMUQ1Rjk5OUIzOUY0Ci06MTBCNzQwMDA3REZGRTI5RTBDM0Y4QzVCNjcwOTY1MzhFOUM5REZENzU2Ci06MTBCNzUwMDAzRDdFMDdEMUREQ0QwN0VFQzhFMEJGQTdFMUNGMzY0RDc2Ci06MTBCNzYwMDBBMTc1NjZFM0ZBNkU3QTZDM0VBRDZGMjUwQjEyRERENURFCi06MTBCNzcwMDBGRDgyQzcyN0JFMTVCRkM3NjBDNEU3NjlDMTFGNUY2REUzCi06MTBCNzgwMDBCM0UxOEY2NEIwQUYzMDExMURGMzA4M0Y1MDQ1OUVFRjE5Ci06MTBCNzkwMDBBRDRDN0I4RjA1NThEQzU0RkU1NkM0MDdERTFGRDAwMzJBCi06MTBCN0EwMDBDQ0NFMzQ3MUQ5QTZFREY3RjYyMDdFOEUwREYzNjdFMjhDCi06MTBCN0IwMDBCRTFBQzAyMTI0RTBBNUUwRkRCQUVBODFDQTRDOEUxRjYyCi06MTBCN0MwMDBFNjM1Q0JCODMyRDhERjE1RjgxRUVCRjc1OEZDMDlDNUMzCi06MTBCN0QwMDBCQTc2NjJCRjlFOEYyRkUzMTMzMEVGNDREQ0Y3RkIyQTZCCi06MTBCN0UwMDAyM0Y2QjlBREQxQzMxNTIxREY1ODBGRDNEMjU3M0M3RTE0Ci06MTBCN0YwMDBERjdFMUZEMUQ1MzcxRjcxQkU2OTBDNTc1N0QxRjcxRTk5Ci06MTBCODAwMDA0QjA0OEYxNjM3ODZGN0Q2MjgyNDBGNkNCQUZCOUYwNjk5Ci06MTBCODEwMDBFODYyQkI0NUYwQjNGRTNCQ0NEM0FDNjhFMUJCODdFNzQ1Ci06MTBCODIwMDBENUFFN0NDOEE2QkIwRjIxNEEzN0Q2RThGQjgyMjg3RjVECi06MTBCODMwMDA0QTNGRUE2NkMxRkZDNkY1MUFFNUMxMUYwQ0YyODAzRDFBCi06MTBCODQwMDBFNjE5RDJCRDMyMEQ5NkYwOTM4RjIyRkYwMkJGQTI5RjYwCi06MTBCODUwMDBEOUYwQUM4NUZDRkNFMzNCREZGOEY4M0FBMEYzRTMxRDNDCi06MTBCODYwMDA5MjZGRjU3MkQ1QzhCNzc1MkY0QzYyQjFGOEY2QjhDM0IwCi06MTBCODcwMDBDNzYyRjIyREJDOEZDOUI3OEVFODNFOEQ5N0ZENzA3MkZFCi06MTBCODgwMDBGNUU2Mzg3MjM1NkZCOEYxMUM0QjUxMkFFNkJBMUY3QkNBCi06MTBCODkwMDBCQTdFMzhDNTA1MEM3MDk1RkVBQzUxNUVCRTlDRUY4RDJFCi06MTBCOEEwMDAyOTJGMTk1RTQxQTU4MUEzODQ5RkE0Qzc1NUNGQUNBNkJCCi06MTBCOEIwMDA3MTA2RTg1NkQyQTVBNERCMDFCQTFDOTQ1RkE5ODNBMzQ0Ci06MTBCOEMwMDBGMUZCMTcyODhGMjY0NUYxNkU1OTBGN0UwQURBQjFBRkNBCi06MTBCOEQwMDBBOUY0M0IyODdEMzA5NzhEMDBGN0JFOUQwNUI0MEY3QTAzCi06MTBCOEUwMDA4RkIwRjNGQjlDRkQyOTE4RDdCQjQ3RjgxNUZEMTg0RjA3Ci06MTBCOEYwMDA0QzhEQkVFRjRGMTA3OTAzODFGRTk0MzQ4RDVERjQ3OTQ5Ci06MTBCOTAwMDBCNzlBODI3NjVDNkYzOEY2RUZDOUNBN0IyQTdCRTNGQzc0Ci06MTBCOTEwMDBERUFDM0NCRjU0QTkzQUYyRDc2MjlDQjY5REVGNEZBRTY1Ci06MTBCOTIwMDA2ODU5OTg4MkYxOENCRUVFNDJGQTNEQTE5QkRFMDU3RkZDCi06MTBCOTMwMDAxN0U2REIyN0UzOUEyMUJGMzlCQjJDN0FCRkU5MTExNjQyCi06MTBCOTQwMDBBMkZEQ0FFNURERjVCNDVGNjg4QzgzQUM3NEQ0QTRFMkQzCi06MTBCOTUwMDA3RUEwMzEwRTcyMzNFNjQxNjExRUYyNjNGQUY3QUIzMDFFCi06MTBCOTYwMDAzRTgyNzgzMkQwNTMxMEU5Mjk3QjMwM0RBRDFDMkVGNjUzCi06MTBCOTcwMDA1RjRCNTg4OTZFRkY1NUM4QjU0QUI1RThBNzY4OUZGNDc0Ci06MTBCOTgwMDA4MURGOEVGMTIwQTYxNkZEMUFGNUU5QjdFOEM3MjMwMzdCCi06MTBCOTkwMDA4NDNDNDRBN0Y1QzEyMzMyQ0Y4QUU4NUFEMjlERDE3Rjk3Ci06MTBCOUEwMDAzNzNFNEZCQ0Y0NjkxOTlFMDc2QTc4RjlERjhBN0YwRTJCCi06MTBCOUIwMDBDRjEzMkY3RjMyRkE1NTJDRkZFQTVGRjNGRjhEMERBRUM4Ci06MTBCOUMwMDA1RkIxRTc4RkU0QUZGNEVEQjFEMTdDRkFGNkJDOUQ3RkI3Ci06MTBCOUQwMDAxNzk2NzdEQjdDMzhERkJFRjUzNkZFN0JEMDdCOTJFOUFECi06MTBCOUUwMDBERUU5QkU2MTNDQ0VENkZBREE3N0M1QkRBNEE3MzYxMDMzCi06MTBCOUYwMDBERUZFNkUzOEJGMkZGNjU0Rjc3RjdEODZGN0FCOUVFQUVBCi06MTBCQTAwMDBCNjc5MzFFRUQwQjQyNzg5RkNGMEE2REQwOTc0NEY3Q0ZECi06MTBCQTEwMDBERjZCREY5NTY5RTM0NUZGRERGNTM0OEFGMzE2N0RDOUY5Ci06MTBCQTIwMDBBQzE2RjM1QkZBRDJCOEJGRDZGNEVBRDQyNzVBMEFEMEUwCi06MTBCQTMwMDAyRURENEJGNzE2NTdCQ0ZFQTc2Mjk0M0Y3RDJGNzBCQkRGCi06MTBCQTQwMDAwMkZDRjNDNzcxMTNGMTE3QzNCQjdGNkE5OThBRTc4REI0Ci06MTBCQTUwMDAxOEY5RDU1M0JEN0ZCQTM2RTQ4ODA1MTcwRTg3M0U4MEE2Ci06MTBCQTYwMDAwM0FFMEJFMDQyRjc3NUM3ODM0N0Q3NzA3RTBGRkZGRjI5Ci06MTBCQTcwMDAzRTc4N0M0REZFNDI0M0Y3NjRFMkEzMjg1QzE0RkVGQjUzCi06MTBCQTgwMDAyM0REQzk2MUJCNDJFQkU3RUZGNzdDNTc4Qzc2RDJGMTNGCi06MTBCQTkwMDA4RTE2RDJGQkU3NUJGNzg3RkY2QkU5RTBGQkFFNUI4OUI1Ci06MTBCQUEwMDAwQzY1RERBN0ZFRDdBRTlCRDNGRkRBRTE1QzNGMTlGOTQ5Ci06MTBCQUIwMDA2MDMwOURGRkVBQUZBOUZDNUNCMjhGRTY2QkUwRkZGRjUwCi06MTBCQUMwMDAwN0FCQTM1OUYzMDA4MDAwMDAwMDAwMDAxRjhCMDgwMEEzCi06MTBCQUQwMDAwMDAwMDAwMDAwMEJDRDNDMEI3ODE0RDVCOUZGRUNDQzc2Ci06MTBCQUUwMDAzRTkyNkNDMjI2MDQwODQyNjBGMjI0NEExRTBCNzkxMDcyCi06MTBCQUYwMDAxRUE5OUI4NDIwMDhFMjA2QTRBMjIyMkVGOEUwMTU5MjNCCi06MTBCQjAwMDAwOEI2QzY2QUNENjIyMjAyRjVCNjUxNkNBRjZERDE2RjMwCi06MTBCQjEwMDA0MTQxREFEQTZCOEE0MUIxMDI1RDEwMTE1QUFBQUI4MjU3Ci06MTBCQjIwMDBBMjQ2QkE1MkFCNTAwMzFCNDEwNTJBQkRERUZGRkZDRjMwCi06MTBCQjMwMDA0Q0IyMzMyNDNDRkNBRURGRDdFNDIzQzczM0U3Q0MzOTI3Ci06MTBCQjQwMDBGRkZCNzVDRTE4NDk4NTk5QURCOTAwNEREQjRFRTU4N0YxCi06MTBCQjUwMDBCMTA1NjgwNjI4MDY0ODUyNkQwMEZEMDA0RTZDRkRGQURFCi06MTBCQjYwMDA5MDk0NENBRDVEODUzNDgwQkFFRDcxMDA0NUQ4RkUzMUJFCi06MTBCQjcwMDAyNjAwMTI0MDY0REJBOTEyOUYxM0UwMUJGQUI5MTJBMDQxCi06MTBCQjgwMDBBMzExOTcxOEQ2REQzN0I3MUQ5QjNGMkNCOTE3QTdENDQzCi06MTBCQjkwMDBCQ0YwNDFGRUFGQjFFRDc4RTFCREVDOTdBOUZGRTJCQjhGCi06MTBCQkEwMDA0MzNFQzBCNkQ2MDZCRTU2NUMyRjEyMEYzMzM3MjEzQzNCCi06MTBCQkIwMDA5MTQ0RjAwMEVFNUZGN0YyRThBNzk2RTFGRThCREIzRUUyCi06MTBCQkMwMDA5RjRERkJENzZDMUQwNTMyRjYyQkZGRjRFRkZDMzBDREZCCi06MTBCQkQwMDBERjI0NzlDNEYzRjg4MDAzRTFBQURDN0U0NjNDREY3RUYzCi06MTBCQkUwMDAyQTFGQjBGRDZDOTMxNDk0MTNCMEZGODA3RDdFODBENjI1Ci06MTBCQkYwMDBFRDA1RUYxMTg0NzdGMTdGMjJERTNCNkNCN0UyNzhDMzZECi06MTBCQzAwMDA1MDk1RTFFQkM2N0I4NzBERjIwOERGQkRCMzY5N0U2NDFBCi06MTBCQzEwMDA3QkJDQ0I5RTQ2RjBGRDdCMDg0NEUxN0YyMUJDQkRGRjkxCi06MTBCQzIwMDBCMUZDM0UzRkRFMDA3RTg2REIyQTdCMURFOTA4REZDM0Q4Ci06MTBCQzMwMDAxMDBDQTlEODNFMDgzMEIxRDU3OTJFM0MzRkE2QzE2MjgwCi06MTBCQzQwMDA3QTBGNDJEMDFGNDAwNkYxMjMyNzJGOUMwMjA5RDRBRTYxCi06MTBCQzUwMDBGQTVDQ0VBN0Y3QTc0RDRDNDMzOEZDQUFDNUJENUVBNTNDCi06MTBCQzYwMDAxOTE2QTZDMzhBQzFFRUMwMkE4NDBCMTRFRkZDQjVEOEZFCi06MTBCQzcwMDBCNzBFQUQ3MUFGRTIxNUVFMDQyODAxRjg4MTQzNUJBRjVBCi06MTBCQzgwMDBGRjk0ODkxMkFFRDdCNDBDRTFDMjc1OUFGQTU5NUM0RDkzCi06MTBCQzkwMDBCODhFQTI1QTgyRjY3QzZFM0ZBMkY2QTFGRTU3RUZBMUEzCi06MTBCQ0EwMDA3RDE1QTcwRDgyREFCQkRGRTAzRjI3NjAzRjQ3RUJFMzVFCi06MTBCQ0IwMDA3RUIxOTk1MTdERkMxNzAzM0I1RDBBRUUxRkUzNTYyMEQwCi06MTBCQ0MwMDA4MDI4RDkyMUVBN0Q5QzdGOTNFQTYyQkFDNDQyQzBFRjAyCi06MTBCQ0QwMDA3MjVFM0E5RDdFNEY4M0ZEN0FBNzkzOTkzRTNBRERDRTAwCi06MTBCQ0UwMDBBMTEzODA4M0RFNTdFOEJGMDhGRkU0NTUyMUQyNDMwNTQ2Ci06MTBCQ0YwMDAxNDdGNThFMDIzN0QyMzExM0RERDI5MEU1Q0NGREFFNzY4Ci06MTBCRDAwMDAwRUY3MkE4OTlGQUI0QTg5RjY5RTg1RkUyQzMxRDAxNzAzCi06MTBCRDEwMDBFOUU3ODlDOUVGQTY3M0Q0N0E4Q0JGOTlDRTk3NEE1RkI5Ci06MTBCRDIwMDA5RDJGMzEzMDhERjkxQzMzRDhFOTBFMjBGQzBGQUE4MkVCCi06MTBCRDMwMDBFRTBGMjJERDI1QTk5QkJFM0FERENDN0NGMDkzRUMxNEZFCi06MTBCRDQwMDA3N0QzQkZCQjFERTdGQTY0MzgzMzEyQkU0MUUyRkEyQjRBCi06MTBCRDUwMDAyMEE3MUVEN0E5OTJDNzg1RkRCOEZFODlEMjM4Qjc5RDA2Ci06MTBCRDYwMDBGNDQ1ODJBMDM0MTJEQkYyRkUxNTgwNzg3NEE0REExNDU0Ci06MTBCRDcwMDA2QUNCM0ExMUE3Mjg3OEFGM0NFRDAwMjUwQUJGNzI0ODdDCi06MTBCRDgwMDAzNEY0M0I1MkIzRjlGRDRBQzc0MEMzN0IxRDAzNEIxRDNFCi06MTBCRDkwMDBGNEJDQ0E5NTY2OThGRjQ2NEM0MjNFMTREMDdCMTMyNkVECi06MTBCREEwMDBEMkY4NTUyOTk3MUJERTlCN0FCODYzQ0QxQzZDQUY5NUYyCi06MTBCREIwMDBDMjQ1MjQxQzFEN0I2NzU1MTBCRDI2QTkyMzBDRjNCNjc0Ci06MTBCREMwMDBBMDU5MjE3REVFQUM5MjAzRUI5MDFFRDU1MkIwN0YzRTgwCi06MTBCREQwMDBEMjZENzJDRTY4MjM3QzEyOEMyNzNDNkIyQzI4NUEzODhCCi06MTBCREUwMDBFRjFBNzdCOTYxRkNEQUQyNDk4Njc1QUIzREQ1ODY3RTBDCi06MTBCREYwMDA0REMzNTdBMEY0MDUxOERCNzAxNjk0NDJCNEUzQzE1NjQ2Ci06MTBCRTAwMDBDM0ZCODU3QkI2MThFNjI3RUMwMzM5MUVEQjExRkJENTk3Ci06MTBCRTEwMDAyNjZBMEJEQjQzNDkyNEJFQjZCRTBFQkZBNTBGOEE3MDRGCi06MTBCRTIwMDBEODVCODlFODQwQzk5MUZBNTdBODZENzAyMDNERjBGOUI4Ci06MTBCRTMwMDBBOTE4RDEyMkJGNThDRUZEODc2MjAyNEQwOEVGMjk0QkM5Ci06MTBCRTQwMDBDMDQ3NzRCODVCMEVFNDUwMUIzQkU4OEU3QzQ4MDczODUzCi06MTBCRTUwMDA5QUYyQjBEQzg3RTAwNzVGQTc4QTcyMzBGQThCNDAxMzUyCi06MTBCRTYwMDBGNUFGM0NEQjJBRkJDODBFNkY5NEZEQjYwMkUyRkI5NEYzCi06MTBCRTcwMDBCOEJGOTJERDZEOTU4MEY4NUVFM0I0NzgwMkU0Qjc5MkM2Ci06MTBCRTgwMDA1QUYzOTc0NkM5RDc2NzNGODQ1QkJDQjlFN0VBRUI4QkE3Ci06MTBCRTkwMDA1OUU1OTYzNDVDQkYzOUM1RDNCMjgzRUM2NkM1ODdCMzI4Ci06MTBCRUEwMDBFNUY0NzNFNzgxNEJFOTBDRUI3NDQ5QTdGN0JDNDU4M0Q0Ci06MTBCRUIwMDA1MTFFRTVGOEYxMEVCMkVCQjE5NTMyRTMwNTU3NTkwMzg3Ci06MTBCRUMwMDBFQjcxOURFNTE2Nzc4Q0E2RkNFQzVGNUQxM0FDNkI0OUJFCi06MTBCRUQwMDBBRkQ3QTQwOUZCMTBGQjE3NTAyNTg0M0ZCNkFGNEZDRTU4Ci06MTBCRUUwMDBBM0Y3N0UyNkMxN0FFOERFRUZENjUyNjAzQ0IyRDIyQ0IwCi06MTBCRUYwMDA0MjBGMTQ1N0JGOUJGM0U4RkQ3ODdFQkZBNDU0RDAxMUM2Ci06MTBCRjAwMDBBNjU4MDI1OUI4NjRDMjQxRjc2RTJCRjY1N0U3RUM3NzkyCi06MTBCRjEwMDA5MTE5Njg5QjcyRDgyRjIzNUREQTBFODZDQTI0RDRBNUE2Ci06MTBCRjIwMDAwMTBGOTc5RkNDMTRGMzIxMEJGQjZEMzlFM0UzRjJEODlCCi06MTBCRjMwMDA4RkU1NThDOENFMkM0MUIzNDc3NjY2NDdEOTMzMzlFNEVDCi06MTBCRjQwMDAyNzk2NUM3RUM1MDBFOEMxQkVFOTZEQzI2OTA5RDRDMjBFCi06MTBCRjUwMDBFRUZFOUEzNDk1RTE0QTUwQzI0MDdBOUQ3MDVBRTE3MUUyCi06MTBCRjYwMDA2OEM4QjY5MEZERDFENzRGOThBNUJFQkI5NEUwRDg2MzAyCi06MTBCRjcwMDA4NTJDREE1RUYxMkMyMjNDNTY1REQxQUVBRTYyM0MwNERCCi06MTBCRjgwMDBERTAwRTExNDJGQTJGQTRGRjQ5MzJBMzE1NjA5QTdEQzAwCi06MTBCRjkwMDAxQzdGMkUxQ0ZGREM1ODlDQTgyMjFFN0RDQkREODk2RUU5Ci06MTBCRkEwMDA2QTdGOEY0NDFGQzM3NEY3MTMxRDdFNEE3RjJFQTNERTYyCi06MTBCRkIwMDBEQUQwNzgxQ0RGNDgzNjUxOEMwNzAxRTU3QTk1NEQxQkE1Ci06MTBCRkMwMDAyNzkzODJGREJFOTIzNkVFNUZFQjFENEY3Qzk1OERGMzdECi06MTBCRkQwMDAwQkQyQkJFNjdCMUMyOURERUI3QkQ3QUUwRDM1Rjc0OERBCi06MTBCRkUwMDA0RjNCRkJFNTU1MTNBQzAxQkI3NDMxNzQ4REJCMDA1RDU5Ci06MTBCRkYwMDAxMzA0NURDRkEyRjVDNzdERUU3Mjg4N0QzRTk2RDQyMUY1Ci06MTBDMDAwMDAyNDZGQUIyRDY4MDUzMjAwRjZCQjdDRDc5MzVDQzdDQUEyCi06MTBDMDEwMDBDMTNDN0EzRTM3QzEzM0EwMENFNUFGQ0RFNjE5NzIwRkIzCi06MTBDMDIwMDBEOTk1NkQzMUVFNzVGODVFRjU5RDlGM0RERTQwN0EzRDA4Ci06MTBDMDMwMDBGNTlGMzlDRDI0Mzc4QTI3NkUyNEVFNTNFN0ZBOEFFRDJGCi06MTBDMDQwMDA0MTk1OUNEQjg3RTI5RDJFM0E5MjNDRTM5RTNGQjU3NDdFCi06MTBDMDUwMDBGN0M5M0UyNDc0RDNENTkzODlFM0FCQTJFOEVDNzA5MDgyCi06MTBDMDYwMDBGRDEyRkQ0N0QzREFCQzRDQTdEQjFDNENBN0E1OUE0RUFBCi06MTBDMDcwMDAzNTI3NDI4QjA1RjVFMUE0NkJDM0Y3NDkxRTRFNkVCNDFDCi06MTBDMDgwMDAwMkM1NEQ2RDM0NDhGRTMyQzdDMTdBMDVDOUUxOTQ2QUQ0Ci06MTBDMDkwMDBENDgzQkMzNzJENUU4QUNCREE1MTNFM0MyNDFGRjVEOUMwCi06MTBDMEEwMDA4NkY1NEU4RTdCMzcyOTBGREYzQjk5QUMyNDExN0QxNjI4Ci06MTBDMEIwMDA4NjZENENCNzlCMTUwOERBRDE1RUI2MjVERjU2NTlDRTkyCi06MTBDMEMwMDBGQUExRjI3OEFCQjZDRTZCNTk5RUZCRDJEOEVGOEM3NzQzCi06MTBDMEQwMDA3RDgyNzg0OTlFMzFGMjM3QzM3QkU3MTc3OUQwNEY3NDYwCi06MTBDMEUwMDBGQjg4NzRBRTIzMzQ5MzdBOTc4M0U2NzI0NzgwRTJDQzYwCi06MTBDMEYwMDBCQUQyNjVCOUU0MUY5NjI0NjYwRjAwQzRBMzZFQkNDNDBGCi06MTBDMTAwMDBGRUI2QUVFMTBCQTZCQkJFQkU3MjVBMDZCNTZGNzc3RjE4Ci06MTBDMTEwMDA3Qzg2Q0FGNjQwNTEzQzJDMEZDQTY5MUI4RkQ3MzQ5Q0QxCi06MTBDMTIwMDA2NDNCOEVFMEE0OTFERTc0MkMxM0Y2QUVDNTBBQjc1NEJFCi06MTBDMTMwMDA2MzVCRjNCRkYyMkRENTM4QkYwNjQzMENGNjE3QjBEM0JGCi06MTBDMTQwMDBCNjI0Q0ExRTQyRUJFNzVENzZCRjAwNzlCNzdBQ0E1QkI4Ci06MTBDMTUwMDBCMTY0NjdBQjI1RDcwQzQwMUM4RUE2QkJBQTk1RDFEODdECi06MTBDMTYwMDA4RjcxQ0Q5MEIwREZCNkVFOEM5N0ZCQTlBRTE5MTZFQ0FGCi06MTBDMTcwMDBFRjRBQkI0OThDMEY3NEZERENFMjA2Rjg3Q0RENURBMjYyCi06MTBDMTgwMDA5RkU2M0E0MEZEMEZEMzFFQTk1NjA2NjIzRjVFQzhDMTI2Ci06MTBDMTkwMDA2RkQyNkFBQkZEQjkyNDVGNEVBNkNCODkxNTcxQUMxRjc3Ci06MTBDMUEwMDBCREQxNzk1RUMzQ0IwNkJBOUMzMzJFNEJCNzc4Qzk2RTJFCi06MTBDMUIwMDBDQzE0NzZGMUQ4Q0E0MTZCMzkxRUNBMEM2NUQzOUU1QjhDCi06MTBDMUMwMDBEMzQ0RkNEQTFGNzk1MzhBRkY1RTQ1QkQ3NzIwMUQ5MjY4Ci06MTBDMUQwMDAzM0MwNjNDMUY5QzkyRkEyM0ZBMkY5MUY4Nzg2MTBGREEyCi06MTBDMUUwMDBFNkJEMTgxMzk0OTAxRjhCOUY3OEM1NDZGRTY4QUVBQ0QxCi06MTBDMUYwMDA2NjkzNUVCRDNGQ0NCNzkzRTRFMzc4N0M4OEZCRjMxQThCCi06MTBDMjAwMDBCNjMzNUMyOTU5MkU2MUE3NUQ5REI5NUU5NENGRjlEMEY0Ci06MTBDMjEwMDA2MkEzRjFGOUEwMUMyNkJGNjE0MTYxQTZCODY2QTE3M0IzCi06MTBDMjIwMDA5NzhERTJCMjg1NEY1QjBGODdBM0ZDRUEyMjA4MUYyMjlECi06MTBDMjMwMDAzREFENzlENjdBMzgxQ0U1N0Y4MURFOEY5MkFGQzMxNjhCCi06MTBDMjQwMDAwMTg3QTJEMTYzQUUxQzlBNkQxMzcwMUQyMEI4MTYyNzBBCi06MTBDMjUwMDA2MTdDMkY5M0JCMDhGNUY3NzE1QzU0OTNDMzc5NDk0QTBECi06MTBDMjYwMDAyQzkwREMyREJGRUNGRDdDNUYwRjdFQjBCNTExRkQzRTQ4Ci06MTBDMjcwMDBBQURDQTZDNjJERENBRUMxMzVDOUVFMEM1MEMyMzYzN0RECi06MTBDMjgwMDBBRTUzQUJEOUU1OTJEMDYxMUI0NEJEN0Y0MkEzNkI5RkY3Ci06MTBDMjkwMDAyRDEyOEZFQkY2QTI3QjNDNUVEMDI1RDczM0MyODI3MDg1Ci06MTBDMkEwMDAyQzlFQjY2RjFDRjE0NUU3RTc5NTcxRDAxQTkzQzQ3Q0JDCi06MTBDMkIwMDA3MTZCN0M3MTEzNUY3NEZBMjMzRDBCMTU3QzZGRDc1OTNBCi06MTBDMkMwMDA3QzJGQUQyN0I5RDBFOTJGRTA2RDhCMTVGNkEyNzM3M0UzCi06MTBDMkQwMDAwQ0M3NEQ2NkY4RTNEMjA1QkMzQTFFNDNEM0NGMEZGRjFGCi06MTBDMkUwMDBEMEY0RUYwNkZFQTFFOTQyOEZDRDc4RTg3QUFDM0ZEN0QzCi06MTBDMkYwMDBGNUQ4OENCNzBFRjdBNUNCNTlDODc2MzE3MkE2REI5OTY1Ci06MTBDMzAwMDA1QUYwRTVEMEZBQkE1REQxRTlBQ0MzQTlEM0FCOERGMjRFCi06MTBDMzEwMDBBMTFFRTA1NDFBNUUzMkUwQTM4NDJBMjg4OTgwNzFFOUM0Ci06MTBDMzIwMDBFOUMyOEVCNTRFMDJFMjgzRDJCMDk1RTc1RDJBM0VCQUVECi06MTBDMzMwMDBCREVEMEQyRkREQ0U5QUYxRDNFREFEOEVBNzZFNzc3NUU1Ci06MTBDMzQwMDA3Q0NCRDA5MEIwM0RDNDM0OUVGMkFDMkI0RkZCMEM3MTMzCi06MTBDMzUwMDA3MDM5MkMzMEM0Qzk5NThFM0IwREZEMkFENzNEODZGOTI2Ci06MTBDMzYwMDA1N0E1MkMzMzhDNEY1MjU3MUFDNjI3RTczQzYyRTg1RjFCCi06MTBDMzcwMDBFM0ZFQTUyOThFNUY2QjhBRTM3RjYzMTgxRjE3MEU3MTlBCi06MTBDMzgwMDBEQ0ZEN0FFMzQ0NTA5MDQ3REYzQkQyQzlGMTc3QjBEMTZFCi06MTBDMzkwMDBDNUZEOUQ4RDI5RENFRTZBNTQ1OUJGNzczN0U2NzBCQjI5Ci06MTBDM0EwMDBBN0QxQ0RDRkZGREM1OENBRURCRTQ2MEZCN0ExNDYyRkFGCi06MTBDM0IwMDBCNzY2QkIzMEY1RjlFQjE1Q0E1NzRBNDMyRDk1NjRDQUU5Ci06MTBDM0MwMDA3NzY0Rjg3RTkyOEVGNDdCQzMxMjY4OEE0NzNBOEQ2QTRFCi06MTBDM0QwMDAxN0YxMzlDQzM3RkJFMzUzODdFRTI1QkZFRUIyQjlDOTZECi06MTBDM0UwMDAxRjM2RUYxODJEQTkzREM0NzMwOUU4RUYzQzUxRjI5MkI2Ci06MTBDM0YwMDAzMDI1MEMxRThBN0JEMDNERjcyNDVGMkRFOTE2OTY0NzI5Ci06MTBDNDAwMDAzMkZCODA3QTM3RDMwMUQ2NjRENEI3OTkzMzI1NzcxM0JBCi06MTBDNDEwMDBGMDczM0YyNDcxMUJGNEUxRjg1NDA1RkNFNEZGQUI5RDdECi06MTBDNDIwMDA0QUQwOUVDMEEwNzkxRDA4RTcwQzAxMjZEODY5OUNGQzYzCi06MTBDNDMwMDA3NzcyNUY4NUUyRDZFQkU4MjFDMjJCN0I2NEY4MUUzRTYzCi06MTBDNDQwMDA5RjUxRkE5NzMzOTQzN0RGRTg2Q0I1OTI5Q0RDQjBFN0U0Ci06MTBDNDUwMDA4MTYzRjdFMjM4MzRGQjhCNDkzRkJBRTIwNkZGRkI5NjczCi06MTBDNDYwMDA0Qjg5MUI1QTI4QUU0NDNBNDYyNDc3Qzg0M0YxNEVBMjYyCi06MTBDNDcwMDBFMjhFQ0UwN0Y0RjZCNjc0OTEwRjRDNkRGMkNCMDk0OEZDCi06MTBDNDgwMDBDRkNFMzc4MUUzMzg1RDFGMTFCRjE1MDRCRkFFMTdENTdFCi06MTBDNDkwMDAyRTI1MzgyQzgxRkNGRDIzOTUzNEJGNjZCRkNBNzREMThDCi06MTBDNEEwMDBGNTQyRDcwMzNEMEZENEY1QTA0QTdFQjY4OUU2OUYzODAyCi06MTBDNEIwMDAwODlDNEY4RkVBRjAxRDc5OUVGMDM0QzU5REE1OUQyREY3Ci06MTBDNEMwMDA5NTk0OTc1RDI4NkYxQzczQkFGNTE1OUFCN0JERDFDN0JGCi06MTBDNEQwMDA3MkI0QjU3MTI2QjdDMUM2Rjk5QTdDRDY3MzdGNTc2MzFCCi06MTBDNEUwMDAwM0Y3NzczN0ZBQjlEREQzQjg0MjkzQ0YxNjFFREZEN0ZCCi06MTBDNEYwMDBGODM4Rjc1RjZGMEM2ODcyQkE5MTlGOEZDRjEwRkVGNzE0Ci06MTBDNTAwMDA4QjUwRTUwMDkyQkYxN0QzNDUxRDA3MUNFNTlDNDc4MDYzCi06MTBDNTEwMDAyMkRBOEI5NTkzOUE5NDk3NDUzQzY1OTIwRkIzNUNFODI5Ci06MTBDNTIwMDBGMjAwNjgzNzI0QTRENzhERTg2N0M5M0ZEQzA0RkVCQzVECi06MTBDNTMwMDAzOUQ4Q0U5Q0Q3NjIxRDJCN0Q3QkI5NThFODZDRTZGOEM0Ci06MTBDNTQwMDBDMzZDMEYxNzQwOTBFREREQjlGNjVEQzRGRjE3QjJFRjc1Ci06MTBDNTUwMDAzMkU2QUJFNEFGNzRGQkI3MThDMkJDOUU1REJFRDM0REYwCi06MTBDNTYwMDBGNTk0RUZDRUFGQjgzNEJGMDI3MzY4N0U1N0RFMUREQkEzCi06MTBDNTcwMDAzRTVCQjY1QzM4RUYyRTFBMkNGOEFBRTdERDE4M0YwMkI2Ci06MTBDNTgwMDBGOUU1NDg0MEU2Qjg3QTdFNUE0QjAyRTdEREE1OUQwOUY5Ci06MTBDNTkwMDAxNDA3MkNEODI2MzMzRjMwQ0Y1NDA2MjJERkU2Njk3Q0JGCi06MTBDNUEwMDBFQjgwRTAzQkM0OTc3OUUzRTY3MTVENkVGRTFBMjMzRUIzCi06MTBDNUIwMDAwQjlERDdGNTA5QUEzREM2NjkzREUyNTkwQjBGN0Y0RTg5Ci06MTBDNUMwMDBGNUI5NUE4RDVFRkMxQ0UxNjk2OEJGNjFEMkFFQTg3OUVECi06MTBDNUQwMDAzMTE5RjFDOTlGQzQ5MTQyQzEyOEEyMDdDMkVGMEU5MjNFCi06MTBDNUUwMDA5RUVEOTc1OUNGN0E5MzhCRTM5ODlGOTA5QzlGNkE5QzdFCi06MTBDNUYwMDAzOTY5MTdDQUZERjFCMzhEOUM3RjI1NjUzQ0YyODg3RkIwCi06MTBDNjAwMDBEQzc3QzdBRkI1NTlERUExMTk5QzBGODU2REE0M0YzQTAxCi06MTBDNjEwMDBGRjk2OTM4RDQ0Qjg5NzU3MzgwMjk0Njg0NzhBNUQwQTBECi06MTBDNjIwMDBFRDFGOTEzQzcyM0NGMUUzMjM3MDJGNDNGQTk1NkY3RDJGCi06MTBDNjMwMDBFRDIwRTk0N0I5QzNDOUU3MDg4ODQ0NDczNDNGNDdFRkNECi06MTBDNjQwMDBGNzM1Mzk3MURFQTg3RDFFOTlDMkY3RTI1REUxMjY5QUMxCi06MTBDNjUwMDBBNkZCMUJEREZGOENFREU4OTQ3RDVDMTdDODY0M0QwMkYyCi06MTBDNjYwMDBDQzI1QkVDOUI4NzgzRDMyRTc5QjREOTQ2RkEyNDEzQUM0Ci06MTBDNjcwMDBFOTlDQzBGMDlFMEM4MjlCOUU3N0Q3QjU0NEJENjlFQ0M3Ci06MTBDNjgwMDA1OThGOUM4MEYwMkREN0YyQzNEMTFGN0IxOThFNkE4N0ZBCi06MTBDNjkwMDBDQTcyNjhEN0YyNDk3QjhBMDUzQzUxNzQ3NEQ5N0MxQkY1Ci06MTBDNkEwMDBBOUZFMDk3RjhDRTEzQUFGMTlCRUM5MTlDMjhFQUI0OTA4Ci06MTBDNkIwMDBERUM5NEM1RkE3OUE0RDc5NDM5NURDQjFFMUQ3MjQwRkQxCi06MTBDNkMwMDA2RDcxNkUzQkJFNjdCNkI3QkE3REVCMkQ2RUFGNzM5REQ1Ci06MTBDNkQwMDBFQzMxOEVENERCM0E4QjM4MzcxODU5QTkxNjUyRkU0NzA1Ci06MTBDNkUwMDBGMTI1RTU4NTdBOUU2ODlFRUZDQkFBOTg5REQxOEZFQkM4Ci06MTBDNkYwMDBBQjIxMEZDMUU1QjI5QzU3NEVFQjFBM0UzRjZGOUVBNjkxCi06MTBDNzAwMDBFRjVGQjdBREQ4MzUzN0FBMEVCMjI2NDMzRjVGNTA1QzE2Ci06MTBDNzEwMDA5RjM4QkFGOTc2QjFGQzJERUI5QzY5RjAzRkZGRTlGMTQ3Ci06MTBDNzIwMDBEQTU0MEM3MzI0RDRBMTNDMjkyMEUyMDgxMEYxQzQyQzYzCi06MTBDNzMwMDAwODcxM0IxQjNBQjlGNUExMjQ1MTNCMTdEQ0RDREUwNjNFCi06MTBDNzQwMDA1RTZFQkZDRUY0QUQyNkI5ODk1ODNCRkI5MzFFMUY3QkFFCi06MTBDNzUwMDBFMUVCNUM5MjhCNjNERjFCRUI0QTUzQkJGREFCRUU2RkVGCi06MTBDNzYwMDAyRkQ1QUZDNkQyRjk1MjBGRjJCMDQxOTM1QkRENkVGNzExCi06MTBDNzcwMDBDQTFGOTNERDhFOEM0MEZCODA3MDQ2MzY4QjczQjE0OEE4Ci06MTBDNzgwMDA3QzZDODBDRTAxNzRGQjAwN0U2M0JDQThEQjhCQzI1OTNECi06MTBDNzkwMDBFRTM3Qjg1RUI4NEZFNkJBQTVEOTdFNTQyOTIyOEYwNzg2Ci06MTBDN0EwMDBDNTlENDNGNTUxN0RGRjI2MEJDQzI3MzlEQjg4RUQxRjU2Ci06MTBDN0IwMDAxMDhGM0VCM0MyOEExQTg1Q0Y3NjBEOEZGMjFCQzYwMzQ3Ci06MTBDN0MwMDBFNTJGNTM1RDIyM0Y5Q0VBODBFNEQzNjREQkNFOUVDQzEwCi06MTBDN0QwMDA5RDgxODY2MDJBQzVBMzI4Q0ZBMzkyM0M3RjIyN0FGQjQ1Ci06MTBDN0UwMDAxRjFBOTdDOEU3MEY2NDdGODYyMkZGM0UxMkU3MzZCMDE0Ci06MTBDN0YwMDA0MDBBNjQyMTNEQjZCNDg5N0VERUVEODk4Q0RGNEQxMEEwCi06MTBDODAwMDA2NDNFREUwQzYxMkJFMTdGMEIwMERCREQzOUEwNzI3QjI3Ci06MTBDODEwMDAyQjc4OTg5RkI4NzI1QzNFREFBMURCREI5NDkxQUIxMDY5Ci06MTBDODIwMDBDRjgyQTRDRTc0RDJDRkJDRDFFRjI1NDkwODU3M0VDNUU0Ci06MTBDODMwMDBCRjRFQUVDREFDQTAzODQ1QzdDMzkyMjlGMEI4MkNEM0JCCi06MTBDODQwMDBGMzM2QzE1NzkwMTQ1QUI1OUFFMkMyQ0QxNkEwQjhGMDhCCi06MTBDODUwMDBEM0QxRjdEQzAxNTE3RUI1MjRBQkUyMjBDRDdCNEUxMjYzCi06MTBDODYwMDBFNzg1RkU2RDc2NTE1NzgzQ0VGRURFQTg3OEZDRUJDQ0QzCi06MTBDODcwMDBDQTQzQTRGN0ZGMjBEODM4RkY1REM1RTc0OEQ1MkU0MTRECi06MTBDODgwMDA3QjE4REY4RjY5ODBFRjBERjFFNkY1QTQ5RjdFQjY4RkYwCi06MTBDODkwMDAwNTQ0NEI1MTI3RjQ0MzI5RUZDQkZEQUY5RUZBQTJCQUQyCi06MTBDOEEwMDA1OUUwRTNBNzc4QUMyNENCMTdBMUZEMEE2QzY4MEEwOTBDCi06MTBDOEIwMDBGRTI3RUM4MTc1MUMzN0Q1MEZBMUZBQzVCQzI3RUQxNkY0Ci06MTBDOEMwMDBGMkUzRUZBMTFEQTY3M0QzMEYxQTFEREM3RTg4RjkwRENDCi06MTBDOEQwMDBCNTdGQzNGQzg2REE4RjMwQkZBMUY2RUY5OERGNTA3QkJGCi06MTBDOEUwMDBGQkU5MTEyODQ0MDAzRkNDRjRGQzZGQzY3OUYwRThERDg5Ci06MTBDOEYwMDBDRTA4M0MyMjEyQ0NFQ0U5QkNFRjU0ODZDODNGRjJEQkY4Ci06MTBDOTAwMDAzRTdFMjA4RUU0NjA4QkVDMjYzOUNEREJBQzcwMURFMkUwCi06MTBDOTEwMDBGOEQ2NTEwMTM5MkQ5QUFFQkVCODRDODQyMzdGQ0JEQkJCCi06MTBDOTIwMDA4RjhFMkRBMkY3MTQ5Nzg0RjM4RjZGMzlEOTlGRjMyNjNBCi06MTBDOTMwMDAxMzdDNURGNEQ4NjYxM0Y0RDBFMDdEMkUzMUI0OEFERTJBCi06MTBDOTQwMDA3RjZFNzMzQTQxODg3NjA0ODQxQzEyM0Y3QkE4QTMwMTUyCi06MTBDOTUwMDAyQzYzM0VCRTlFMjFFMkE3NkJFRDlENDVEMUU3OUI0MDM3Ci06MTBDOTYwMDAyMTAzRDUyQjM1M0Y1MzI1OUY0RDA4RTc2QTc1REJEMTUxCi06MTBDOTcwMDAyNEQ3OTk2RkQwN0VGRTNENDIwRjkxQUY4NkJBNDRBNTcxCi06MTBDOTgwMDAyNjg3N0E5QkI3Q0RFNjI1N0Q3QTZFREIzQkQzMjYyM0JGCi06MTBDOTkwMDAxREE2OEU5OTU0MkNBQkRERjMwQjMzRkJGMUJFNzlBM0FFCi06MTBDOUEwMDBDRkZDNkE3NTMyQ0ZFNzczOEIxQjYwNkQ5NTBCRTdEREFCCi06MTBDOUIwMDBFNEQ4RjEyQTkxRTA2NkQ3NDc1NTg5RDhCRjI1NDVEQUYyCi06MTBDOUMwMDA0REVEMUMzNTZENDIxMkQ5MDEwOEYwM0VCN0U2OTRFRkVCCi06MTBDOUQwMDAyNjExOUJFMkFFQjY5MTVGMkUyN0E1OEFCMkJCOTU4RTNCCi06MTBDOUUwMDAzODNBNDlFREVBNTdCOUZBMUFGQTU3QTUwQzMyQ0M5RkYyCi06MTBDOUYwMDBBNDY2MThDNjI3RTcwQzM3OENFQkZCNEU3MTE3MUFFNkI2Ci06MTBDQTAwMDA5MUJFNTJEQzhDNzgzMERGNjFCRENDRTczMjc5OUJCRkMwCi06MTBDQTEwMDA3ODdGMTFFMzdGNDMxMUUxMUY0MUZBRDkzMEIwMzg1MkRBCi06MTBDQTIwMDBCQUYyMTdBQkM5NkM2Q0RFOTlDMEU3QjRBNkY4QjQ2NjZECi06MTBDQTMwMDBEQjUzQkIzRDZBRUZGMUU5OTdCMEI1QzdCOEFFQjY5NzI3Ci06MTBDQTQwMDBCOEVFNjJFMzUzQjQxRjhGOTJGRDI4NzhFMTNBM0U3NzQ3Ci06MTBDQTUwMDA3RjZFRjQ5OUNCNTRDNENCOTc4OTcxMkJEOTNENTNEQ0FECi06MTBDQTYwMDAxQUQxRTI1NkIzRkM3NEM5QTlBNDBBQjlEOTJCMDNDNURCCi06MTBDQTcwMDA0MTdBRkM2QTk2MUY4MDA3MzRGRjJGREE0QkQ1RjNBOTYxCi06MTBDQTgwMDA2RjA5N0ZGNTBGRDJGN0JFRDE3MkFEQjVBNjdBNDQ4MTlBCi06MTBDQTkwMDAwREZEMEFENTA5RkYyQUMzM0E3QTcwMTZFMUQwRTk5RjQ1Ci06MTBDQUEwMDBEMTJERjc3MERCREE1NzA3MTZGMTczN0YzQzZFNTlBQjY3Ci06MTBDQUIwMDBENTI3N0U5NUE5OURGM0Q3RUM3ODc1NjA3MkY3MzhEQ0ExCi06MTBDQUMwMDBGNTkxNjEzRURDMjdFRDM2RjQ5QkQzOENGRDg3Q0I3NzY3Ci06MTBDQUQwMDA0N0JGREY5QjFEOUFCN0U2NEU5QjhGRUFEMjhGODkzQUZDCi06MTBDQUUwMDBBNTc5NUM4N0E3NkE2NzhDODdFQ0E1QjJENUNFRjk1MDhCCi06MTBDQUYwMDBBRENCQzNGNTEzQTU5N0ZBODk2RTE3NkU5MEExQkUyNzJCCi06MTBDQjAwMDBGQkI2NUU1Qjc3Q0FDRTE4OTBCRkM1QkFFRkExQUMxMDdBCi06MTBDQjEwMDAzQ0ZFMTc4NTlGNzlBRjhGMDdCQzUxRkJCNDY2OEFCODdFCi06MTBDQjIwMDBFRjU4NjJDQjhGQkZDMjc5Qzc1RTAyMzc5MUZFNThBMjIxCi06MTBDQjMwMDBCMEI3Rjk2RDlGNUEyQ0U0Mjc2Mjg1QkNFNEJCQzI5NjVFCi06MTBDQjQwMDAyNEJBRUYzMjNGQ0U0RkU3Qzk3NTBCRTJGRDc0NkU1NDQ1Ci06MTBDQjUwMDA5MERFRjk4RTAzNTlCRkU1NjlERkEzMEU5NEJCRjcyRDc0Ci06MTBDQjYwMDAxNjgzREY4OTkwQURDM0ZFOEU0Q0RGMzRGMjNCOTM3N0EyCi06MTBDQjcwMDBDNjA0MkRERjAyOUYxRDk5MjBGQzVBODVEMEY3RDkyNEM5Ci06MTBDQjgwMDAzN0ZBQjkxODlBOUFCQTA3QzE3MDRFNDZGODUzRkZDQ0QzCi06MTBDQjkwMDBEM0I3QkVGNTE4QzVCRDdCODVGRUUzQjBEMzlDOEZERTUxCi06MTBDQkEwMDAxNDk1OEZDMjFBQTFCRjBFRkNBNTM4NjdFMUFFMTYxQjAzCi06MTBDQkIwMDBFNTQ5REY5NURFQjc2NzNBQkJGNTdCRDhCOUZBQUNFQjUwCi06MTBDQkMwMDA3QkREMDFBMUVGMjdCNjdFRjkxNkQ5RjUxM0U4RUZBMkI4Ci06MTBDQkQwMDBGNUJEQ0IyRjZBN0E1RUY3QjhDQ0ZBQTgzRjNGQkU1NUI5Ci06MTBDQkUwMDA5RTE4RTg4MUJFQUY2OTcyMDBBRTZDQzNCOUQ5OTJCMjJCCi06MTBDQkYwMDA1M0QzQzhBRjJERDlBNkYwNzk2MDZGRkVCQTZFODVGMTE4Ci06MTBDQzAwMDA5Q0VDQjlFREY2RjlFMjFDNTlFMDExRDFGREU5QjYyRjIzCi06MTBDQzEwMDA5M0NBNzM0NUJCOENDRjZCNUIzNEJCMjNFMjE4RjRBMzgwCi06MTBDQzIwMDBENjY0RjJBM0Q1MTJEN0RGMEU2QzFCQzBGNzMzMEU0OEMzCi06MTBDQzMwMDAxMDU0NDdGMjEyRDczOTkwNkZEM0M1NzJGNERDNDlGMTIyCi06MTBDQzQwMDAxOEE0RTQyOEI0Q0YzNDhEOUZEM0I1QkFEMDhDNkQzM0ZCCi06MTBDQzUwMDBCMjg4NUZFRkI0Q0QzREUwMjFGNEIyMzI1ODdFQUUwNzJBCi06MTBDQzYwMDAzRkM3ODMwNzEyQkRBOTc0NEY2MTZBOTM5MEVGMDM4OTkwCi06MTBDQzcwMDA5RDFENTQ0NzNBNTAxNjI3RDE3OTE0QUVERjFDMURFRjg1Ci06MTBDQzgwMDAxREIwN0E1M0VCMTkyRkZEN0NGMjBBRjk5QkI4NEJDODAzCi06MTBDQzkwMDA4MzM1N0I4OEZDRjQ0QjIyOUY2M0Y5NTcwNjNFQ0M3MkE4Ci06MTBDQ0EwMDBCNTAwMDJCQjNEQjg2RkFEM0JDODcxRTkyMjEwNzlCRDNDCi06MTBDQ0IwMDAzOTlFQUYxREY3OTk4REZDODIzOUZGMkNERkIyRTMyMDNFCi06MTBDQ0MwMDA5RDdCOUM1Mzg3MzBDOUVCODVFQTBFRTZCQ0I3QjdGQTZCCi06MTBDQ0QwMDBDMUE4MjQ2RjYxNTY1NEREQ0YxQzlGNzdDNUExN0ExQzczCi06MTBDQ0UwMDBCNTNFOEVDRjg1NUUyOUZCRUZFMzhCQjA3RkQ3RkEzODU4Ci06MTBDQ0YwMDAxN0U1RDk0NzlGQjRGQkM5MkUxRjVENjcwRjQ4Mzg3RUUzCi06MTBDRDAwMDAzNEE5QjM5REYyOEVBMzlCRjJEQ0I4MDJDQ0IzQThCRkNBCi06MTBDRDEwMDA3Qjk2RkNGQTZGQUQyQzE3MDBDNjdCMEQ0QkNBRUVFNjc2Ci06MTBDRDIwMDBGQjdGNEJENkM3NEI3NDBGMDc1MkM0Qjg5RUYzQzlDRkQ1Ci06MTBDRDMwMDBDNDczNUNCMEUwRjk4MTdDQ0VBOUZCMTdEMjBGM0E5NzlGCi06MTBDRDQwMDAzRUYyNDQ4Qzg3ODJGQ0EzN0JBNkY3QTE3QTVGODdFNTNECi06MTBDRDUwMDAwRjdDOUUwRkYyN0Q4N0U4QkM3RUQxODZGODkxMTQzRjUwCi06MTBDRDYwMDA0MDJFMzBERkU2QUZCQjlDQ0YzNzdGQUVGODY2MTBGRUJCCi06MTBDRDcwMDA5NUNGNUMzMzgwRUU5NTJENzhCQjFGMTAzRTkxQURDRkUzCi06MTBDRDgwMDBGM0Y5NUY3NzlDREU3MzdDNzc2MjZCNDYxRkM4RURBNjc0Ci06MTBDRDkwMDA5MzVFMDc1Q0YxRjQzMjJGRjFCRDU4NTJDNTM5MERENEMyCi06MTBDREEwMDA3QjA2OTE1QzZDQTkwNjVBNzdBNDJDRUU4RDc2QUU4QzJFCi06MTBDREIwMDBFM0I4RDQyQzc3MzU1OTIyMEVBQ0QxRUIwRDdEQzE5MTVGCi06MTBDREMwMDA0MkZBRTMwM0E2NDM2NEU1RjA3NTc0MUVENjlDOTVBNDZECi06MTBDREQwMDBGOUU5Q0VFQzY5NTFGNzEyQUJFNEY2REE5NzQ5M0VEN0EwCi06MTBDREUwMDBEOEI5MEVEMjExRDNGMzM5NTg0MzU2MjJDRjlGRTczMDJBCi06MTBDREYwMDA5RTlCRDczNjlDMzFGNjczMzFCRkMzRjc0NzM2QTk4NTYyCi06MTBDRTAwMDA3NzYyQkI1NEEzRkZFQTU0RUZCRDU5RjhGRUMyRDY0NzgwCi06MTBDRTEwMDA1RUQ4Qzc3NDU5RjNDM0Y3NjlERjNENEU1MTdGRDkyN0Y4Ci06MTBDRTIwMDBFODY3OEVGRkU3Mzk0NDlEMDM2MDJERUZBRjNGRkZGNEM1Ci06MTBDRTMwMDA4OTc3Rjk3Q0Y1RDNDREMzQjNDNUI5NzFFODkzNUZBNzAyCi06MTBDRTQwMDBGMTc5RjFBMTdCQjFEREI0RTcyREU2OEIxOURFNzNDRTZDCi06MTBDRTUwMDBGRDI0ODlGMUFEMjEzQ0ZBRDJGOUFFRjcxMTgyMTMxOTA0Ci06MTBDRTYwMDBDMTc5REJEQzU1Nzk0QzNGRkRGQzJENzJCNEU3RkM0NDA1Ci06MTBDRTcwMDA4NzUzNUY1Rjg3NEY1RjVGOUZGNzY0OTZDODYzNjY2QkZBCi06MTBDRTgwMDBGOUMxMzE1QkU4Mzg5RkEzQkYzMDVDQTJGQTVFRDdGM0VCCi06MTBDRTkwMDBBNDUwN0U2Mjk0QkM3QzU3RjVGNDFCQjU3QUM4NDFDQjk0Ci06MTBDRUEwMDBCMjFGRDhFODlFNUNFQjZBQUIyRkRBRUU1RDYyMURCRDY3Ci06MTBDRUIwMDAyQjBFRjQ4MEVBRUEyRjVDMDlGQjJENDQ0RUU5NEZFNzg0Ci06MTBDRUMwMDA3RDVBOUY5NDAxRkJFMzM0RjAyNDgyODdFRTBENkEyRDk2Ci06MTBDRUQwMDAyQ0Y0QTU3MDlEOUNENjkzRTkxQTYyODBGQjRERTU2RUZCCi06MTBDRUUwMDA5NURBMkIyNUFGMjJFRTdEMDU1OEZFMjc0MEZENjBDMjY2Ci06MTBDRUYwMDBDM0UyMDhGM0I5OTg3RUNGNjU0NkUyRjI2QkQyNzBCRjA5Ci06MTBDRjAwMDBFNjdFQjA5Q0UyOTg2NkFCRDAwQkZGOUMzOENFREY3NDE3Ci06MTBDRjEwMDAzQUU5N0UwNjVDQjkwNkZGRDJFQzAyNTVDMTc1NjYyQTc1Ci06MTBDRjIwMDBCMEMyOUEyNEU2MEQ0NTNBMUZEODMzRjc1NThBMTNERTZFCi06MTBDRjMwMDA1NUVBRkJEMUJFRUYzOTFGQ0I5MzJDMTRERjA1RTIyOTU0Ci06MTBDRjQwMDA0NzdDRkZBRERGMTZGRjE1RTc3RTAwOUUzMjI3Q0FDRjc0Ci06MTBDRjUwMDA3NUFGMzlEOEVFOUJFQjExQjc4MzhGRkJGMzIwNkNGREQ3Ci06MTBDRjYwMDAwMkRGRkJEQkU4N0ZBRERGMDlERDc4RkQ2RENDNTc5QjkxCi06MTBDRjcwMDAyOTNGQjgyOUYxODE2MjdBNUZCRjg3NjlCRUVGNzdENDE0Ci06MTBDRjgwMDBFNUU0N0I4MUU2N0I3RkQ3ODJFRjMzQjI1QkE3MkNCRUUzCi06MTBDRjkwMDA1QTUxRkZBODFGNDVGRTM3OTI2ODAzMDlFNzQ3RkE2OTBGCi06MTBDRkEwMDBGNDM4MDY0QzhGODg1NTdCRkY3Mzk1RkI0NTk1MjNCOTY0Ci06MTBDRkIwMDAxRTA5QTc1NEI2Qzc2MzRERkVBNjY4Qjg0NUU0NjFERkY1Ci06MTBDRkMwMDA4OEY5NjU5RDhBQzFERjE0MTU2ODc1OUJBRjU1OEU0QjM2Ci06MTBDRkQwMDBBRjNDQUQ5Q0Q3MUYzRDk0MkRFQzU5NTE1RjRCN0Q0RjFECi06MTBDRkUwMDBGMUExOUEyREY0QTcwOTgyQjJDMDQ3QzQwOTYzQkJFNDNBCi06MTBDRkYwMDBDQTIzMTNGRjZBQjU3RTJERjkzMzk0QTc0ODgyQzM0RjI1Ci06MTBEMDAwMDAxNzFEQzc2RTE1RjIzNTU2MDlFRUEwMTZBRDJCMzQ1MDFDCi06MTBEMDEwMDA1Q0IxMDVGRDlEMEUwNzlEMTFBNjBDNjczOTE4QTNDQkM5Ci06MTBEMDIwMDAyN0FFMzUwQkU3MkQ5N0VBMzk2RjcxNTAzQzgzRUQyQTE3Ci06MTBEMDMwMDAyOUM0NzA3QzBGM0FCOUY1Njg3RUJDMDJEQ0RDOEUwNzJGCi06MTBEMDQwMDAyRkI3Mjg5RkRDNEU4NDE2NkVBRjg2NTY2RUE3NDA0OEQ5Ci06MTBEMDUwMDBGOEZEMkI4MjRERUNDRkUwM0UxNzlGNUI0QzlBNjdBMTA5Ci06MTBEMDYwMDA3OEEzRThGQTlFRjM4NTBBOEQ0RUJERDMwMTE1QUVFNDkwCi06MTBEMDcwMDBEMkU5MzAwMTUwRUYzMjdBQTBDN0UwMUNCNjFGNjY3QUMxCi06MTBEMDgwMDA5OEY1QjMwQ0MyMzJFQjI3MTk4NjBDQUExM0E4QUNBN0VCCi06MTBEMDkwMDA5NUUwRTE3RUQ1NDVEMkExMzRFQzUzQjg0RTYzQTY0NzY2Ci06MTBEMEEwMDA2NUNGNzIzMTU5QTNDN0JGQjI4MUU1NDNFN0QzRkREOTNDCi06MTBEMEIwMDAyQTNGRDdGOTg1N0E5NTQyRjI2RkU2QTNGRUJDMjhBRUU3Ci06MTBEMEMwMDBFMjI0NUQ0REJGMjM3QkY4NzRCQTU3NTU1NDU4QjE5NDkwCi06MTBEMEQwMDA0Q0YyREQxQkM2NENBNzdCNTU0NTYzMkI5RUE3MjNDRjg3Ci06MTBEMEUwMDA3QkIyQzc4OTdFNDE0NUExRDU4RDU5OEI1NDM2N0QzQzk1Ci06MTBEMEYwMDBDRUY3NjlGNzkyNjFBNjg4QUZFRkQyRTIxNkRGQjIxRkQyCi06MTBEMTAwMDBCODVEQTgyN0JFNTRBNzlCRjA3MzYwNzA0RkY3NTlFNDMxCi06MTBEMTEwMDAwQzcxM0UzODY0NjI3MEE3MTVFNzFENTI3QzczQjIyOTBBCi06MTBEMTIwMDAzRTcwMDQxMzU0QTRGQjVEQ0JBQUY4REVEQTQzMzYzMTFCCi06MTBEMTMwMDBERjZFMTc3NTU4MUQyRjdDRUU4RkMxRkVBNjREQzM5NzZECi06MTBEMTQwMDA0QUU5QkRFRjhGRUJENkQyQkFCRTY1NTk3RUQyNTdERjIyCi06MTBEMTUwMDA2NkM5MkQzODU5MzE2MDI2RUE2NzQ3QzgwQTU0MEZENTg5Ci06MTBEMTYwMDBGN0M5NEVGNTJEQ0RFNjczREQ2Q0FFOTMwREQyRTI5OTg1Ci06MTBEMTcwMDA4RTREQzM4NzEzNUZFRUNGRDZFRTYxMjVBNzE1MTJERDY2Ci06MTBEMTgwMDA5NkE1N0FFRkE3Rjk5MTc4MjE1RkY3NkI3Q0U4QURERDgyCi06MTBEMTkwMDA5MEVEQjkyRkJCRjhEQ0U3OTE3RjIwMDBGOEZFQ0ZCMjBECi06MTBEMUEwMDA3RDBGRDA3QTc1NzE2N0Q5QkYxRjFGRjFGNkYyNzA1QUUzCi06MTBEMUIwMDBCNzlDNEFDOEE0NTk4ODc3OTMwNzAyMzZGNjAzREE3REVDCi06MTBEMUMwMDA3NUVEQkMyQTcyM0JBRTgzNzQyOEYyRkE5QUM4QTQ4RDFFCi06MTBEMUQwMDA5QUQ1NTk0MkY2MTNEN0ZEMkY1RUQ3MTYxRTMyMDJERkJECi06MTBEMUUwMDA3QjZDRkEyMTlCOTBCM0MxNDJDRTM0M0JCNDZERkJERTI1Ci06MTBEMUYwMDA3QjA3ODlBRTE3QTJGNEFBNkVGQjk5QUYzRTQwRkFENTIxCi06MTBEMjAwMDA5RDcwQkE2OTdBQjczRUZENzIyOUU3OTNFMDM0RDgwRDc0Ci06MTBEMjEwMDA1RENGQzY2Q0IxNzM1QzNENzZFQkU1QjdEM0JDQjJCN0ZFCi06MTBEMjIwMDBEQjMzMDhBRjJCREJDMzdDMEUxNkQ5RjZFRTIwMDE4NzZCCi06MTBEMjMwMDA5RTZGOUM5MkJFOERERkE1NzM1QUNFRTMzNjhCNzNEQTU4Ci06MTBEMjQwMDAyNTUyRkQyQkYxRDRGRkJERTRGNjIzRkM5RjZBN0U0M0ZCCi06MTBEMjUwMDBDRjhCRTc2Qjc4MkRERUJCN0UzOUQ1NDVFNkFGQjk3NTUwCi06MTBEMjYwMDAwQURGRTMwOTg4QkM0MUM1NUZEMkZGMkY2MTFGOUY4RjkyCi06MTBEMjcwMDAyRkRBNjhDRTI3M0E2REM0RkZDNUFEQTZGQjQwOTQwRkU4Ci06MTBEMjgwMDBEM0JEODc2OEZCREU0MzNFQkMzRDVCM0JBNzREODU1NDY5Ci06MTBEMjkwMDBDNjQzOUVENUM3RDc4M0JEMzNFN0JCOEY4M0U3NTU5NjdCCi06MTBEMkEwMDA0RkYwQ0FCNDdGQjFEMjczM0RFMUI5RUVFRjY5NTgxRkI4Ci06MTBEMkIwMDBFNjY5N0IxMzlEOUM5Q0VGREFDNDdERTEyNzk2QkE1REZECi06MTBEMkMwMDBENEQ3RjQ3MzJEQ0E0QTI5QzVEMTlEQkY2NEY5RDdERkRECi06MTBEMkQwMDBEM0Y1NzVDMTBBNzEyRjFCRDZGNDY1OTkyQkQ4NjBGNzY5Ci06MTBEMkUwMDAxMDVGMEIzNjBDRTBGQzAyRjMyMDhFRkJENjZFQjBBRjY1Ci06MTBEMkYwMDBBMDdFRDM4M0IxN0VCOTgwRUFDOTlEOTc1MTVEQTUyOUVGCi06MTBEMzAwMDA0NjdDRTc0NEVFOTFFRTg5MTZBNDhCM0FDNzE5RERBRTUwCi06MTBEMzEwMDA2QjdFNURCRjZGREI5NUZGQzQ2N0YzQkRFNkFFRjFCMDFBCi06MTBEMzIwMDA2MkM4Mzc5QUI0RjhCOTg4RTBBMzM4QjBERTJBRjJBNzA5Ci06MTBEMzMwMDAxODAxRkY4RTM3QkYxRjQ3NzFFQzY2QzUxQjQ3NzVFOUEzCi06MTBEMzQwMDAxM0ZCRDNGQjQwMEY3NEQzREI2Mjc0MkY3MDlFNzNDNjQ0Ci06MTBEMzUwMDBFMjc3QTc2NDlDOEY1RjQ1OEY2QkY3RDMzNUY5RkM2MzQ5Ci06MTBEMzYwMDBBMzA3RkU2RUVERTY4NzhFNTc5NUZDNkNBNThERUExQzMzCi06MTBEMzcwMDBCNzgxOEJFQTFFNEJGNjNFRDU0NERGREIyQzU5MDk1Q0E2Ci06MTBEMzgwMDA1MTM4NDE3RjI4NUYzODYyRTE3M0YwMzE3QjBCNTM0ODlECi06MTBEMzkwMDAxRURCMzQ3QjQ3RTdDMjZBOTQ1Qzk1NTA1MTA4RTcxNzVGCi06MTBEM0EwMDAwRjg2MDA3RDdGMTRBM0M2ODIxQTk1MTdDN0U1MjQxOTNFCi06MTBEM0IwMDBGQUYxRUVDQjBDRUZGNzI5NEQzNzhDODNERjEzQ0EyRDMyCi06MTBEM0MwMDBFOThFNUYxMzNENTcxOEU2M0Y5NDMwODFCRkM3MjkwQkE0Ci06MTBEM0QwMDBEREMxNzVBNUJFMTM0NzFBQzZFRDI4RDc3NENGMDFCRUFGCi06MTBEM0UwMDAxMEYxNEYyOUZFQjI1Rjg1N0E5OUUwMUMxQjA2RjgxNUYzCi06MTBEM0YwMDBDQUREOTgwRTYzN0M1NDFBNkVFMTNDMzA2NkJGNjJDODg5Ci06MTBENDAwMDBFQkVEMTdBODMzNUQzRTRDRDNBQkMxMzA1OEQ4MDczMzkyCi06MTBENDEwMDBCRDhERjcyMTk2RUM5NTM5OEU1QjkyOEE4MTY3NUFFRjI0Ci06MTBENDIwMDBGNEQ2RjU0RkE3N0IzRkFGOTFFRTAzNjYxQUU5M0NEMEU3Ci06MTBENDMwMDA2N0E0RjNBMEY5NDYzQUE3RDYxQkU5M0NCNEMxNDhENzg0Ci06MTBENDQwMDAzNEJGOTE4RTE5MkJDNjE4RTY2N0I1NTQxOEZBQzMxRTVGCi06MTBENDUwMDBCRkRBMzBGRkYyQzAzNDQzN0ZGOEM2MUIwREYzRjM1QTM2Ci06MTBENDYwMDBFNzFBQzYwQkI2MkMzQzJGREY0NzA0OTcxOEM2Q0Q3Q0I1Ci06MTBENDcwMDAyRkRDRjMyMzkzMUMyQTRDRTc2MkVERkIyQzlERkY3RUVGCi06MTBENDgwMDBGQzI1RkU4RjA1NkY5RkEwNDRFNTQwN0YxM0U5RTNGRjc1Ci06MTBENDkwMDAxN0ZGMTcwQ0QzQ0UxMTc0RkU1RkE0NURCRDRBRjNDMzEyCi06MTBENEEwMDBFNkVGQkNBNkM2MDk3QkYzRkE5RTEzRkIzREQ4N0Y0MzhCCi06MTBENEIwMDAyREI0QTY1MERDQTRDNTA3NUVGRDNDQzI5NEY3RTk3OTAzCi06MTBENEMwMDBDQUI1QTU5MkU5OUMzRUM2NzA0RTdGQTE3QjZEQzVBMUYxCi06MTBENEQwMDBBMEExM0Y2MkJGRjgzRTZBRTQ0MUY3MkJENDE2N0ZFQzZGCi06MTBENEUwMDA5MUEzQkY4NzFBRkQwNUJCRTU3M0YyNEVGRDdFOUM5RTlFCi06MTBENEYwMDAzNzQxRjM5MzlDODdDRUQyRTEyNzI1MjgzOUI3QkVBOEMwCi06MTBENTAwMDBFN0E3RTZCQzU1Q0Y1N0NGRkRERTRBQzQyNTc3Q0JCRDk0Ci06MTBENTEwMDBFNUIxMjI3RkQ1RjNENkVGODM4N0JGMkJCQjZBQjA2RjBGCi06MTBENTIwMDBFRDMwQjRGRkIyQTVCMzJGOERFQkY5MkMxMTk2Q0U4RDUzCi06MTBENTMwMDAyMzQ0NThGRTZFRTY5REU5OUU1Q0ZFMUU5NUVCREUwQkQ1Ci06MTBENTQwMDBBNUI3QTdEMzNEN0YwNERGMTUyRTExRTUxRkZBNzk2OTMyCi06MTBENTUwMDA5OEVGNzdCNERFNjFDOUI1QkMxMERGN0Q3RENDNjc0MzQxCi06MTBENTYwMDA2OEJERkYxOTI2RTIzN0JCOEMxNDQyRkYzMzYwOTYwNzczCi06MTBENTcwMDBFOEY5QTgyNENGNzMzNERGN0MzRkRCREM5QUVGMERCNUVDCi06MTBENTgwMDAzNTA2Qjk1NTVDNkVCRUI3NjNBRTBGODYyRDJBQzc5REIyCi06MTBENTkwMDBGRTFGNDk3QzRGRTczMzAyNkU3NDc3QkM3MjYyODU5NTNCCi06MTBENUEwMDBFMzE1RDBGMkYxOUIzNUZBRUI3NThCNTkxQTNFODc3MTcyCi06MTBENUIwMDA4OUY5RTg3RjZGREVGMjFBRjM2NTUxNEE4NzU2RUZBOEMyCi06MTBENUMwMDBFN0Y4RkFENkMxQ0U5MTdDMEZDRDUzRTgxNjc1MkVCRDgzCi06MTBENUQwMDA4RTMxRTg5MkJFMkZCOTEwRkU4QjUyOEUxQUVBNDhGMEI3Ci06MTBENUUwMDA2Q0RGOEIzQURGRUVDNjVCQUM3Rjc4QTVBODQ3MUU1RThBCi06MTBENUYwMDA5OUNBRjVFRkVFRjU4RjczM0RFOUU2RkEzNzBEN0E3MUNBCi06MTBENjAwMDA0QkMzN0IwNjNEOThFM0ZGQzgzMDFFNEVFRUI0NTJGRDdGCi06MTBENjEwMDAzMEZDQzJDMDA5MzcyMUZEOEU2REI2RjNGN0QwMjgwNzY0Ci06MTBENjIwMDAxREM0NTc3REZERjBDQUUxRTNGOUJCQ0EwQkUyRjkxOTRECi06MTBENjMwMDBDM0QxREUxODYyRkVFQTc4MUU2QTNDQzhGRDcwNjM5OEFBCi06MTBENjQwMDA1QjMzOUU3QTlENDI2RjZEM0IyMTg3RUVFNzc3NEFCMTRGCi06MTBENjUwMDA2RUFBMEI5QkVCMTc3NzVCRDQ0RjQ4MEYxRUNBNDlEN0I2Ci06MTBENjYwMDBFMkI1RkEwMjJGRjM0RkQ0MkJEQUI1RUY0QkRCQjVFRjZGCi06MTBENjcwMDA0QkRCQjVFRjQ1REJCNUVGNDNEQkI1RUY0MDIzNTZFN0JBCi06MTBENjgwMDAwQUFBNkJCNDRCRTJERUNGMkNDOUYzRTQxQ0RDMkY2RDhECi06MTBENjkwMDBCMENGOTk0MzcxRkZDMkNFN0MwNUY3QTkyQjA4Q0Y5Njc2Ci06MTBENkEwMDA5MENGNzlGRDdDN0RFOEI5ODRFOUMyNDBGRTlFQzhDRjY5Ci06MTBENkIwMDBGN0MzOEU1OEZDRjlGNEZEQ0RFNDhENTlENzUxMUU3ODhGCi06MTBENkMwMDAyNEQ2N0Y5QzIyOTFDQTlDQjRFQjI4RUYzQjYyMTM3QTRDCi06MTBENkQwMDAzODdENjNFQzc1QTQ3NzFGRTM2Mjg0OUZGRjI1NDlENEVFCi06MTBENkUwMDA5NTlDNjExQjdEM0YzNTM1RDkzNzI4QTc1OERDRkJFMjc3Ci06MTBENkYwMDBFRjY2RjAzOUM5QTU1RUU3OEM1ODQ1MUMxOEQxRTJDMTI4Ci06MTBENzAwMDBGNDFDNzEwRTk4OTEyM0UyNTZCRDJEMjM5RUUzRjNFOTlDCi06MTBENzEwMDBENEIyN0UzRTlDQ0RERjlCQUNCMTAzQzVBRkI4M0Y3RjlBCi06MTBENzIwMDA1RkEzREYzMzMxN0Y3RjMzRjI0Rjc2RkU0RTQyQUY4NzA4Ci06MTBENzMwMDA5NkU0QTRGMTNBRjQ1RDBFRTk2NUYyNEZFMkQ4NkU0MTQ5Ci06MTBENzQwMDAzODM0ODRCRUUzRTk4Mjc3QkZGOEFFRjIxOEQ1OTFBM0VFCi06MTBENzUwMDBFQUNGMjUzOUEyMEUwM0I3ODFFMTNCQTBDNTdCMEYxRjlECi06MTBENzYwMDBBMjNDRUJGRDYxQkUzMTQ0RDdCOTE2QjU4NEY4QkEzODk2Ci06MTBENzcwMDA2MTA3RDdCQkE2RTRBOEJDMkZDMkNCRjhBMkZENjkyNkRGCi06MTBENzgwMDAzRTJENzY4NEI5M0U3NkExN0E3ODZGRjgxRkJCM0RGNEMyCi06MTBENzkwMDA4QjVDQUVGRkFBRjlGQzFEOUVCNjJGQzIzMTg1RThBRkE3Ci06MTBEN0EwMDBFM0FEQzNEMUJEQ0VGOUU1NUZBRkVCRUFGRDRGOUY3OEE2Ci06MTBEN0IwMDAyODVCQUJDQkRGRTJFREMxOUZERUFBRDFBNUREREE3MzNBCi06MTBEN0MwMDAxREZEN0U4REJGRTdGMDY3MTgwMEQ1RURFREIxRTgyM0I0Ci06MTBEN0QwMDBCMEFERDdFODc0RUMwNkM0ODdFQjEzOUUxMUM0REZDNTY3Ci06MTBEN0UwMDBEMzlDRkNGREI5QkUzRUFFRTNGQkMzNzlGNjU5OURFQTdFCi06MTBEN0YwMDA1RDQ4RjgyRkFDMTc3NTc3N0QzQzIyMDlCRUZBNTc4QTMxCi06MTBEODAwMDAzQUU4RTJFREVGMURBMkZGMEZDMjgyNjdGMjBBMzlCRkNDCi06MTBEODEwMDBEN0RFMzdEMzE5RTlDQkRGNDVDRDk1QzVCOTE1RDJGNzlBCi06MTBEODIwMDA2RUUyQjNCOURFRkU2REU5MUE0OTE1RTdBQjkxQjU2NzUzCi06MTBEODMwMDA4NkQwM0RCMkM1NzQ2RjhEQkUwRkQzRUE1N0QwNjZBQ0FCCi06MTBEODQwMDA0QjIxQkRGQzU0QUYzOEY3M0MwQUY4NUNDQkFFRjkxMTY0Ci06MTBEODUwMDBCQkZFRkU2MEM1RjBGRTMxQTdGN0E3NDQ5RjE3MzRCQjlGCi06MTBEODYwMDA4MUYzMDMxNkRDQkY0RENGOTM0RDc1OTRCNjkwQTg3NzI2Ci06MTBEODcwMDBCNkE1RDgzODRFQTY3ODg3RkM5MzFFRUZEQ0Y1QTZBODhGCi06MTBEODgwMDA3N0RFOTUyNkUyNjg4MjhGRjgyQjFERENDRDcxNDI5N0ZBCi06MTBEODkwMDBGRjk3REMyQUQxQ0Y2OUY1MDU2ODdGRjAyRDY1RkYyNTVDCi06MTBEOEEwMDAwRjQ1RkVEMkY5QzU5RkFGRDZFQTAxQzIxRjE2NkJGRTI3Ci06MTBEOEIwMDBBRjk4RDZBMTAwMjdCNzBGRkJDNTIyNkQ1RjhDMUZCOUFCCi06MTBEOEMwMDBFRTM2MUE3QzREMDIxOEFENkVCNjcyQjdBMThFRjA3RjlGCi06MTBEOEQwMDA5NDc4MTdGMjUwNDUwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCi06MTBEOEUwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkZCNTFDRkMwRjAwM0FECi06MTBEOEYwMDAwOTE3QjFBMUYyNkZBMEYxNTMzOTUxRjlCRjU5NTFGOThDCi06MTBEOTAwMDA5N0QwRjg4NEIwMkUxMzAzQzMwQTQ2RDJGNDIwRTM5REM3Ci06MTBEOTEwMDA0MEZEMDc4MEY4MzgxMDlGNjMyMkRGMUMxMDNFMkNDQzlFCi06MTBEOTIwMDBDMEYwNEQ4QzgxNjEwRTkwNkUwM0QyRTc4MUY4M0IxMDAwCi06MTBEOTMwMDBERjA1RjJDNTQ0MTgxODU0ODE3OEExMjgwMzQzMEM5MEUwCi06MTBEOTQwMDA1RTBFQzQ0NTIyMTA3RDQ3ODA3NDlEMjg3OTc2NkFGMjY4Ci06MTBEOTUwMDA1MEU2RTY1MTRDMTk1RTJEOERDQTJGNTcwMUE2NDc1NTRBCi06MTBEOTYwMDAwNjg2Qjc2QTEwRkU2MjI0NzkyNjc1MDY4NjBBMTUwOEFGCi06MTBEOTcwMDBEQjQwOEU4MUExMEJBODY2QjYzNDc2NzMwRDgxRjJERDkzCi06MTBEOTgwMDA0MDc5MjE3NTA4MUYwMEI1ODgyQ0VDNjgwMzAwMDAwMDYxCi06MTBEOTkwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMEQ1Ci06MTBEOUEwMDAwMDBCQ0Q3RDA5Nzg1NUQ1QjVGMDNFQzM5RDg3OUMyNEVECi06MTBEOUIwMDAzNzcwMzNDOTQ5MEMxODM1QzA0RDBDODM4ODc4MTIwMzcxCi06MTBEOUMwMDAwNjRERjEwNkQxQzZGRUI0NUVEMERBNDgxOTIyRjI2QURECi06MTBEOUQwMDBCNEI2Qjk0MDEyQzJBNDQxQjRBNTY4RTk4RDU1NEI3OURCCi06MTBEOUUwMDBCNjQ2QzUzRURBQTdGNDgyRjg0NDZCNkJCNEQ0RTE2OTVECi06MTBEOUYwMDBGRjQ2OUVCNUQ2NUZGOUUyODA1MzZERjlENzVBN0I5RkZCCi06MTBEQTAwMDBFNDlDOTM5QjA0QjVFRjdEMEY4N0MzM0U2NzBGNkJBRjFDCi06MTBEQTEwMDBCREU2QkRGNkJFNkVEOUM1RDgwNEM2NEVFMDlGRjMxODZDCi06MTBEQTIwMDBCQjVBNjI4Q0U1MEQzRDk5MzdENkM0MjI4QzM1NkI2RTlFCi06MTBEQTMwMDA3RDUzMDk2M0RGNTQ2Mjg3RjU2QTc4M0Y1RThFRERBMzBDCi06MTBEQTQwMDBFM0ZCNDk3NTJDQ0M5ODgyRjVGMzE5OEJFMUZGQTBERDNGCi06MTBEQTUwMDBGQUUwQkE3MTg5MjBCQzUzMTY2N0UxRDNFQ0RGN0MzNjVCCi06MTBEQTYwMDBBQjhDNjk1NUY4N0RDQkE0NENERkNEMjc0QkI5MDZGQUJBCi06MTBEQTcwMDBCRDhDRkU5QzI4NjVBQ0Y1OTU5NzI2MUYzMkNCRjA1RkQ4Ci06MTBEQTgwMDAwMTBCNDU1RTBGQzA1RjY2QjAxOTI3MTRDNkRFMEQyRTcwCi06MTBEQTkwMDBDQzRBQjM5MUZCN0JCM0FERkI0Qzc1MjI2MzFGQjZCRDgzCi06MTBEQUEwMDAzOEY5RDBDNEUxREZCRkE5QjA5NkRFOEFFMUVGNjczMDc0Ci06MTBEQUIwMDAxODc0MUFFMjIzRTk4RTRGMUU5QUY3RTAzQzgzODBBNDgzCi06MTBEQUMwMDBCM0ExM0Q2MzY5NEYwRTNDNzc2RjNCNTMyRDFGODJEMzRCCi06MTBEQUQwMDAzOTBGQzY5MjFDQkY5RkIzOUQyNzUyOUIyRTgwNTJBNTIzCi06MTBEQUUwMDA5NDk4NEQ3MEE5RjBDRjc0QzZBODJBQUNDQkIyREQ4RDQ2Ci06MTBEQUYwMDA4Q0UwNzJDMERCMTFGOUU3QzAzQkUyN0E4OTdBRUYwNjZECi06MTBEQjAwMDBENzc1MzI2OEI3REVDNUU5QTUzRDRGOEVBRDYzQzNFOTcxCi06MTBEQjEwMDBDNTVDMEYxMzhGMjdCQjFFMzczMDFGOEQ2M0QyNTFCM0U3Ci06MTBEQjIwMDBCQzc4RDQ3NTFGOEI4RUFFNDQzQTNBRjNCRjlGOEU5MjY5Ci06MTBEQjMwMDBGRjdCRTlBODgzRkFGOTVGNDY0NzhDNzU3MzdDQjE3RTU5Ci06MTBEQjQwMDAxNUM3MUY3QUNGOUY5MUM1QkQxMkQyMTkxNEZCMTBFRUQ1Ci06MTBEQjUwMDA2MjNFMTQyQjZFRURCQzU2OUUwMjYyOEFDNTlFM0MwRDQxCi06MTBEQjYwMDBFNDU2NzFGRjkyMDY4NDdCRkMyQkYzRkY4QUNGQ0U0NUVGCi06MTBEQjcwMDBCNUY1NzM2MTdFRjk0REJEQ0Y1RTAwQ0Y0ODNDMjUyNURDCi06MTBEQjgwMDA2MEJEQjYzMzE5ODUwQUY0QjczQzU5MDNGMzZCQzdDRUIxCi06MTBEQjkwMDA2NjMxNzY2RjcyODk5MUM0RjkzMjgzQjE3MThDRkQ4QkQ1Ci06MTBEQkEwMDA5ODEzNjNCMkFFNDIzOTQ0N0ZDRDM0MEYzNzRCNzM3QzQ4Ci06MTBEQkIwMDA0ODI3M0NDM0RCOEYzNEZGMTBCNjMzRUI5NEUwRkY1N0FDCi06MTBEQkMwMDAzMzlDREY1OEVERDgxQTNFNUUxMkZFNDE3QzE3MEU4RDU1Ci06MTBEQkQwMDA0RkZERTQzNzVCQ0EwQ0YxNjNGRkRFODc3RjIxRkM1RUZCCi06MTBEQkUwMDBGQjNGMzI1RTAxQUJGMkExN0MwODM1Qzg1QTBBRUJCM0E5Ci06MTBEQkYwMDBERTZDMTVDQTkxRTUyQTRCODM4QzI4QThFRTk2NUNGQTU4Ci06MTBEQzAwMDBEOEVCRDJDOTU4N0QyRjVGMUZBOTMxMzQwNERGOUY5OTBCCi06MTBEQzEwMDA0NEY0NzNDQThEQUZGNTZDMDA5MjNCQkUzODE4MjNGQUZBCi06MTBEQzIwMDBEMDE4Q0JDRDE5M0U5RkRCREI5MDkwMkRFNTQ1QjU1MjRBCi06MTBEQzMwMDA4MkM2OEIzRDU5MDZFRDkzOEJCOERFREJERUIwMzBEQjYwCi06MTBEQzQwMDAyQUFGM0M5MjI0RjBFNkE0MEZBNkFCRDM5MUFEMzg3RDY5Ci06MTBEQzUwMDBBODBEQjJFMTlCRjJDNUU5NDNGRDlDRjQ5MUI3QzZEMjkxCi06MTBEQzYwMDA4RTdERjZGNThBOTg3NkMxNDlEMkM3MTcxRENGNUNENzRECi06MTBEQzcwMDBFMTdDQjU1NkFDNkI5OThGMDFERkRFNUFCRjMwQTM5REI2Ci06MTBEQzgwMDAzMUYyQkE1NjExQkY0NzFBOTg5MUNBRDAyRTdGNzAzRDEzCi06MTBEQzkwMDA5M0MzOUZCMDNFQ0FFMEYyNUU2NzVCMkY2NUZDRjRBNkJCCi06MTBEQ0EwMDA5RTUxRjBBMTQ0RUNGMzM1RkJGNUI1MkFGQTZCQjk1MDVGCi06MTBEQ0IwMDA1NDM1MTlGQjczNjM3RjQwNjcxQkEzQjcyNjE5RjBDMzY0Ci06MTBEQ0MwMDA3MUE0NkRDMDg3RDI1RDk5QzYzMjJCNjNCMTdCMDQwNDA5Ci06MTBEQ0QwMDAzMjk0N0Q1MTIzQjU4OUU4MjA0NUVCNjJDMkU3RDE2NUQ2Ci06MTBEQ0UwMDAxQkZFRDU4OERGNTY2NjRENDlDOTBBQkZBRkQ1NEQ3MEJBCi06MTBEQ0YwMDBCODcxM0NBMDc3NDU4MzBFMDExNTZBOTBBNTdENjFBQzkzCi06MTBERDAwMDBDMUUxNDczMjM4NzEyQTk2QkY2REEzODMyRUJEOEE2NTYzCi06MTBERDEwMDA1QTA3OTM1RTExQUQ5QzVFQkY3RDcyRjJDNTM5REUyMjVCCi06MTBERDIwMDAzQkJDMjdERDJFQThFQUFGNUJGNEQwQzhFRDU0RjZCQUIxCi06MTBERDMwMDBCOTNFODBDNEFCQjA4MzY5NDNFQkI0QzFDNUY2NDk1MzY3Ci06MTBERDQwMDA0MTVGMTc1REM2MTJGMDc2MDM3RTNBOUJFODk0RUM5OTJBCi06MTBERDUwMDAwRDQ1NTUxQUQyMTVEQjJEQTkwOEE3QTk0NzU5MzQ4N0I3Ci06MTBERDYwMDBFQTU1NEEzQUY1MjM3QjVCMThENjUzODIwNjNEQ0RFRjQwCi06MTBERDcwMDAyM0MzMjVFODJGNjkxQzI4ODM3RUJGMjRENkY3NEI0Mjk2Ci06MTBERDgwMDBBRkIxNkFENzZCRkQyNkRDQTQ2N0Q1QTEzMkNDRTNFRDM5Ci06MTBERDkwMDAxQkUwN0Y0MDI3Qzk0QTI5NzU4RjM0RkM3QjAzRUE0NTg1Ci06MTBEREEwMDA5MDRCMERGOERFMjI1Nzc2MENGMjQxOTRENkFCNDE3Q0I1Ci06MTBEREIwMDA3QkVDRTExNzI2OUQwNUY0RDExNzUzMTg4QUFENzUwRjNBCi06MTBEREMwMDA3QjhDM0FFOEZGRDk3M0E1OTQ0NzEyRjAwMjlDMEIwNEIwCi06MTBEREQwMDA5QzRGMUJCOUM1NDhBNzdENzUxRUEyRTMwNTE3N0MxODhCCi06MTBEREUwMDA0MTMyM0VCNkVGRjc2QTI2N0E1OTMwREIzNTA0MDdGQzNDCi06MTBEREYwMDBCN0NBM0EzRkY4RUYyNzgzRUI1MjQ0RTM5ODcwQURBOEQ3Ci06MTBERTAwMDA1MjA4OEVCRUQ5NTIwQUM3MzlGNEM3QkZEQzdDMEVDMDk3Ci06MTBERTEwMDBGOTc0QjUxNEYzRTgwNDZGODhDMTc4N0RDNjdCOTE1MTFECi06MTBERTIwMDBGRDBFNzM3QzlENjk4ODRGRTdGOEU2N0E4NDBCMTlFMTUzCi06MTBERTMwMDA5NUZEMDlGMDBBRTMyNTZCMDdGQUQ3MjM5RThGNEFCMUI3Ci06MTBERTQwMDBGNTMwNUVENjlDRDYwOTM4NEU4OTJDMTNCQzFCNjc3QkY3Ci06MTBERTUwMDA2NTA1RTg4N0JEMzg0RTQ2N0MwNjA1OUY2N0I5QkJCREEyCi06MTBERTYwMDBBNzAyOUM5RDEzNjU3NjE3QkNEQTU4MzZCQTNDNkI3N0NGCi06MTBERTcwMDBDODMzNTU4QjFCMTJCNEQ3OTM1QTk1MzIwQTVGQTQwQzQyCi06MTBERTgwMDBCOTNFOTNCQzdCNEFFMjdBQjIyM0I5NTAyQkMzRTkxRDU5Ci06MTBERTkwMDBCMkRCODFBODk3RTIxNkJEMEFGNkUyNTMxMkNDREYxNTc5Ci06MTBERUEwMDBFMTc0OUM1RDE3RTc3NjYyREYzODkyNUYwMUIxMUU1OTFECi06MTBERUIwMDA1MzE2NjZCMTBDNzZGMDg4RjM4MDgxMzJEOUNERDkzMjExCi06MTBERUMwMDA4NzhGQkRDMkZCNTdDREZFNzM0NkVGN0Y4M0U4RkZBMzZDCi06MTBERUQwMDA2Njg5RjUyMTdDNkFEQzhCRUJDRjhDNEFBMjY3QkZBMEY4Ci06MTBERUUwMDA0RkI2MjY4N0NBQTZEQ0Y1OTRDN0JCNEE2MDFEM0Q1MUQ0Ci06MTBERUYwMDA5OUU5M0FDRTJGNDlFQkJDMTlENkI4MDg0MEYxRDdDMTAxCi06MTBERjAwMDA3N0E4QkFGOUVGMEFEOTI1RDlGMkYxNjQxMkUwRDg3Q0UyCi06MTBERjEwMDBFMDFBQTY4MzlERUE4RkE2MTg5NTI3NUZFRDQ1RkM2QzU1Ci06MTBERjIwMDAwNkE1QzBDN0VGNjUzODdFMDBDODE2RTU2QjAwRTRBQkY4Ci06MTBERjMwMDA4RUYyNTVFRjREQ0I1MDU2RUI1OUNDODA0RjIxMkQyNjBDCi06MTBERjQwMDBGOTgxNjQwRTQ2NEJEN0FBRjBCRTdEMzEyM0ZBNjU2ODhECi06MTBERjUwMDA0NTU4RjBEQjFFN0RDRTUwMDBBRUNFMjY0Njc2NEQ2NzhFCi06MTBERjYwMDBBNDk2RTZENzVFNTFFQjJENDE3QkE3NDFBNUY3RUM1Mzc0Ci06MTBERjcwMDBDMDg3Njk4NzgwM0NGNDk3MzMwM0M3REI5Q0NGNTI0MTRECi06MTBERjgwMDBFNEE1QkEzQ0EyNDdCN0M2RTdBRkVGMjg2M0U5QjNFMDIwCi06MTBERjkwMDA3QkY2RjQwMzM4N0VGMjNCMkMzNjkxMEY0OTcyNEQzNUY3Ci06MTBERkEwMDBFOTQyNEQyNDI1RjRFRjVBQjVEOEE2MEM3NEI3ODMyNTYxCi06MTBERkIwMDBCMkU0NjkzNjNBMjVCREVCQzQ1Qjk2OUI1RDg4RjhFRDBCCi06MTBERkMwMDBBQzA0RkEyRjE5REU0RjExRjIwRkQwNUIyQUI2RjBFMjQzCi06MTBERkQwMDBEMjBDRTM5NEM4M0FEMTg3NTlENjNGNzIxM0ZDMjNENUFCCi06MTBERkUwMDAxRkFBMDc3NjY2MkU3NjZENDg4ODE3NTYxN0ExRjlFNUExCi06MTBERkYwMDBCMEMxM0YwNjk2NzNDNTdDQzdCMTE2QUExNzlERDk3RERGCi06MTBFMDAwMDAwMEY5QUNDMEU4QUQ0MTVDREMxRUJBRUM1OTVBMzc3Njc5Ci06MTBFMDEwMDBBNzg2RjEwODgwQjZFQzQ0RUU5MDlDMzA4MjVDNEVCQzQyCi06MTBFMDIwMDAxQjkzNDkzRTg2RTRCNDY2NDAwNzIxNUY1Rjk0OTRCNTM0Ci06MTBFMDMwMDBDRUM4OEZDOEMyMjYwMEYwQTZCNkVFQzlFODVGODY1OUUyCi06MTBFMDQwMDA0Q0MyRUZBMTk4OUFCNENBOUYyQzA2NjU5QkZEQzc4RTVGCi06MTBFMDUwMDA5NDREMjdEMkUyN0NDMUI0MDNDODMyNUE3OUNCNjlEODM3Ci06MTBFMDYwMDBERjc2MDBDODA3N0VGMjk2NTA4MkY0QzU4N0JFRjAxNEIyCi06MTBFMDcwMDAxQ0VDNDMzOTlFOTVFNkVEQ0JEMUVFQkU1RUYxQzczNjgyCi06MTBFMDgwMDAyMTNEQzRCODdFRjBDMjNGMjhGRkIyNjZBQTM2Nzk5QzEzCi06MTBFMDkwMDA2REQ4Q0JCOTBFQkQzMTRGMDlEMjdDQjNCRkM0ODQzRTFECi06MTBFMEEwMDAzMDFBMjY4RTFCODIwRjIwNkI0NEJBRDk1NkE3MzIxQzE5Ci06MTBFMEIwMDAyRjE4RTQ3MDk5NzBFNjJBOUZBNjY1NDY3MDFDNDUzOEIzCi06MTBFMEMwMDAwMDNEMDQ0N0I4OUM5MUJGMDdGMDFDNzVDMDczRDQwMTk0Ci06MTBFMEQwMDBDRjUxMkIzQ0FENUUzRTVGQTdERkJGNTQxNjdFM0ZGOEFECi06MTBFMEUwMDBCREE4MDc4RkIzQjc4QzdBMjQxOEEzOThGNDRBNThFM0Q1Ci06MTBFMEYwMDA3NTgzREUzRTMyQUEzNEE2RDFGQTNCRkQ3RTU4OUY3NzY3Ci06MTBFMTAwMDA2REZBNjFBNjI4RUI2MEQ3OTcxMjdDRjZFRkFDODhFODMxCi06MTBFMTEwMDA4NENBMEExQkY0NUY5N0NFMzRGMUEzN0ZGOTY1RTBCQjk0Ci06MTBFMTIwMDA2QjBFQkIxOEYyMTVGMEFGODJERjVERTJFQjM1QzI4RkVDCi06MTBFMTMwMDA1RDhBRkExRkY0RjY1NTJDMUU0NkY4REU2NjMyRDlDQkZFCi06MTBFMTQwMDA2RkIzRTdDMjY3NTlFNEUyNzZEOTJERjQzODJDQTg5NTZECi06MTBFMTUwMDA3RjU5MkM4QTdFQjUxQUVDRUM1M0MyODQwNjkzQ0VBNDY4Ci06MTBFMTYwMDAxM0I0NkUzMTQ2N0U3NzkwRDM1QjkyNzlENzkyN0REMThFCi06MTBFMTcwMDBDNUY1QTNFOUY3N0RCRERCQUVBRkJGQjFDMzVFQkU5QTA3Ci06MTBFMTgwMDAyRDFDODdGNDc1RjU2RDJFOTY4MjdFQUZCMURBMUZCMDI3Ci06MTBFMTkwMDAzRTM3Q0ExQUMxRjcwREQ2RDJBOTA1QzlDRTZBQzI3OUNGCi06MTBFMUEwMDAyQ0Q1OTg4QTdFREE4QTdGRkJFMUY0MjUzMDlGOUQ0MjQ4Ci06MTBFMUIwMDA4RkJFMDk3MjVEQjdFODhENjU5MTk0REJBODE4M0VCRkVDCi06MTBFMUMwMDBGNTUyNkNDMTM5RDJDOEYzREJFMEVBNUI4MEY2NDE3MkVDCi06MTBFMUQwMDBBQjhCRkMzQUU2RjREN0Y2MkFFNEFGNTlEQTExQkM1NzE4Ci06MTBFMUUwMDA3NkQ5RTczN0Q2RkM5REYzMDU4Rjg1RTZCQjZDRjcxMjMxCi06MTBFMUYwMDBEMjlCMjNDREM3QkQ1QjMyNTIxOUY0REIwM0E2M0UxNDdDCi06MTBFMjAwMDBGMkM1QTQ2RjkzQUY5M0I1OENEQjdCRkZENzk3NUEwRjAyCi06MTBFMjEwMDBFM0ZEMDFFNTIzQUQ3RkNCNTQxRTQ3Njk5OTgxQ0ZCMTYyCi06MTBFMjIwMDBEQUZERTdFNzZDRjdBN0NGRDlFRTM1MjFDNzlERUQ1NkFDCi06MTBFMjMwMDA3OEZCRERCODlFQUJENDY0QkQyNDBGRDlEMTVFNTc4QjdCCi06MTBFMjQwMDA1MTA4QTg3MEVEQUI0OUEzMjk2NkE5RDc3NTkyRjUwRUMwCi06MTBFMjUwMDA0QkE1Mjc1NUFGNUUxRUE1QkY2M0MyQ0U3OEUyQkUxRjk5Ci06MTBFMjYwMDBCQkZCOTFGRkY2QkNCQTAwRjVGQjM3RkY1RDYxNUU5ODIyCi06MTBFMjcwMDBEN0IxRkI0MjJDOERGNEE5QTZEQzY4QUYyQzAzQkE0QUI3Ci06MTBFMjgwMDA1MTM5M0RGRDEyOEI1RDA1MTQ0QkZEN0ZGM0ZFMTBEOTE2Ci06MTBFMjkwMDAwN0NCMUVGNEE0MUFBMEZEQjI1RkZDRDcxNDA2NzgzODkxCi06MTBFMkEwMDBCNjZFRTAzRjBBOTE1RUY3NDhEQ0ZGNEJGNjRGQjkwNENCCi06MTBFMkIwMDBERTJGNTNEOTE1RjEwQzc0MjIyQjlDNUZERUZBNjVBMDdBCi06MTBFMkMwMDAwOUVEM0U2OUY3ODFBRjUxQkZCRDVGNzZBMTVDMzZFQkNBCi06MTBFMkQwMDA3RDhDRkIwMDc5NTRDRkMwRUZDOTlGNEFBOTg5MTI4NzcyCi06MTBFMkUwMDBBRjcxRjI3MEJGRkJBRDlGNEExQ0JFN0RBRTk0MEZFMUQzCi06MTBFMkYwMDBEQkRERTM0RTQwQkQ1NUJCREYyMUJBM0RGRkZFOUY4NTEwCi06MTBFMzAwMDAxMTBGQUJGNjI5MzY3Rjc3RDU2RTI1RUQ5OTQyQ0Y1N0ExCi06MTBFMzEwMDBGMTg5OUE1MTAyN0U1QjI5Rjg3NUU1REUxNUE0MDc1NjRFCi06MTBFMzIwMDBGNjZFN0UwN0Y5NzVENTNFOTc0REFFMDM1RTYyNjlDNDAxCi06MTBFMzMwMDBFQjBCNEFBQzAxQ0IwRkZEMjRBQzAzQUFERThDRUUwOTNCCi06MTBFMzQwMDA2QjE1RDRFRjEyMzdEMEQ1QzUzM0VERURCMEZGOEY3MjFBCi06MTBFMzUwMDA4NkY3QzdEODAwQzUzNTU3RjU2RUU0RTMzMUFFNkY0QzhDCi06MTBFMzYwMDAzRTdEMTNGRjkyM0Y1QzZGOUNBRUQ4RjcxRDhFQjNBNzI2Ci06MTBFMzcwMDBBNzUzMUM3Mjc3NkU0NjNGQ0VENDE3MjZCRjdFRjM2NzM1Ci06MTBFMzgwMDBDNzc3MjU2MURDQjcxRUZDN0ZCQjkyMDBGRkYyN0ZCQzI0Ci06MTBFMzkwMDBCN0VCREIzMDJGQjZERkE3QTExQzVBQjVFNzBGNjE2NkRDCi06MTBFM0EwMDBDMTdCOURDMkZEQjA2MzNGRkRDOUJEM0I4MTVGOEVCRDlBCi06MTBFM0IwMDBFNDIxQkJFRUQ4QTM3RjM5NDU4Nzc5MUY3QkUwRTM3MTY5Ci06MTBFM0MwMDA2ODc3QUU3OTc0RUU3OEE0QUYzNTBGOUYzRjlFOERFMkVCCi06MTBFM0QwMDAzRjIwQkRBNjNDRDY3NTRERDFCQUVBRkIyNDBDQzIzMDE1Ci06MTBFM0UwMDBGNjg4NzgzQUQ2RTdCMUJENEExQTQzQjc2RkJGRTg0OTE1Ci06MTBFM0YwMDA3OTAwM0ZBQkUwNUQ2QjE1QUVENzBBRDI0MzU4QkUwOTNBCi06MTBFNDAwMDBGMEJDRjJCRTBERUYyODUzMzJFMTNCNTkyODQ3RjEwOTI5Ci06MTBFNDEwMDA2QzEzQzVGNUJFRTRFMjczQUJGMUU5OEFFOTQ4MUY2QzAxCi06MTBFNDIwMDA4MEU0QkZCM0REQUEyM0IwQUU1MzQ3NUVDN0UzRUM1MzJECi06MTBFNDMwMDAzN0UyN0ZENTdEMUJGOUI4OEU3NTdDMUJGRjcyNzYwNjlGCi06MTBFNDQwMDBGRDNGNkMxRDk3RkY2ODI3N0VEQzlCNEJFQjNFRDIzQTZECi06MTBFNDUwMDBBRTc4RjhEMjUxRkQzMzUzMUU4Qzg1REY2Njg5QzMzNTAzCi06MTBFNDYwMDA1NTMxNTYyQkM4NTcwRkZFRUJCRDNCMjM3QzdEMUIwMDVGCi06MTBFNDcwMDAyMUM3N0U3NkZDMTQwQzJFQkZFMTFBRjgxQUNBQzk4MTk2Ci06MTBFNDgwMDA0NzNEREE1REQwNjZEOUEzMkYxMDlGMUQ3QkY4NTlCN0ExCi06MTBFNDkwMDA0RTcyOTIwNTI1RDA3QkM3RDhFMDlGM0VENDgzMkIyNUIyCi06MTBFNEEwMDA1RTU4NzU3NzI4RUQwOTBGQUREM0NBNTQ2M0JEMUVBNjFCCi06MTBFNEIwMDBGN0FGRDJGQjE0QTdGRjk1QTkwMzhCQTQwQ0VCQjY0N0NCCi06MTBFNEMwMDAyOUU1NzIzOTk1NDc3ODU5QTFGN0I5QjVBMDdEM0RBNUUxCi06MTBFNEQwMDA5OUI4OEVBRkNFNDNCQTFCNjkxRENERjk2QjM4RkYxOUMxCi06MTBFNEUwMDA5NkY1QkM5QkYzRUQ0OEZDNzlBQ0M3QTM0QTU5NDNFQkM2Ci06MTBFNEYwMDA3QjRDRDgwN0FCNTJEMjBCMkMwM0RGMzJCNjhFQzMzQjFBCi06MTBFNTAwMDBDMkZFQTNGOTc0RDJDM0REMEU3QTMwREI5QkYzMUU4QkZGCi06MTBFNTEwMDBBRkM3OUVDRjY3QzNENzZEOEE2RUEzMUIxMzZGNkY3RDg2Ci06MTBFNTIwMDA5QTU5REVBNzg1OUM1OEM5OTJGNTA1QTcwRUQ3NTcyQTk4Ci06MTBFNTMwMDA4QjI3MEI0Qjg2RTBFREVDNTU0ODhFQkZCNTVCMjEzQjNFCi06MTBFNTQwMDBERDI5MTc1NjhFRTA4RkZGNEVFMUY2QzdDQTdEMDdBNjdDCi06MTBFNTUwMDBBMEZDN0FFQkUwMkYwNTFENzIzQTVGNzlERkFCRUVBNEU5Ci06MTBFNTYwMDA5MEZGMjlBQkZDQzdGRTMyQUNDNzhCMDJFRTU1OEY2NDFGCi06MTBFNTcwMDBFRTZGRDU3REVGNjRFQ0VGNERENUY4MzJDMkZGNjY5RkFDCi06MTBFNTgwMDA4QjI1QTE4QjM3N0I5NThDRjE4RDgzOEFDQjE2QzdFREJDCi06MTBFNTkwMDAwQzREN0YzMTBCRTM5QjYxQkY4RUYzNUVCRkNFNzgyMUM0Ci06MTBFNUEwMDA4OTc2Qzg3MzJFNDY3NkEwMUE3QkMzMDNERkQ3ODdGQzEzCi06MTBFNUIwMDBCNEVGQkQzRTdDMzVEMzJEN0FCQUREODEyNzM1MUEyN0RECi06MTBFNUMwMDAzRjU4OERDNEFCNzlFQzM1NjVGMzQ3NUQ5QTZDODM5QkZFCi06MTBFNUQwMDBBOUM5MjI4Q0E3RkNBRUU0MkYyQUY2RkIwQ0RBN0ZBNzkwCi06MTBFNUUwMDAwREQ1N0Y0NjY1MURCOUQwREYzMzg2MTQ1QkNCMzJDNEIxCi06MTBFNUYwMDBBNzFDRkRDNzY3MkI0Q0I3RDI5OTUxMkU1QkUzQUJFMTRCCi06MTBFNjAwMDA4MzM3NTA1Q0EyOTVCNUE0MzE0RUM0OEE1OEVGM0Q5NjJECi06MTBFNjEwMDA3RUVGNkNEMzU4MUFDNjY3RjVFNUIyMzVCRUVBNjk2OTc0Ci06MTBFNjIwMDAzMTNDMDA0N0QxMUFBRDE0NERCMzkxQzYyRjZFOTFFRDE4Ci06MTBFNjMwMDA3MTZEMzFGRTZBMTE0RjYwQkJGN0VDRDkwM0ZERDZFMzczCi06MTBFNjQwMDBCNzUyRjQ2Mzc4QkMwQURDMjlCMjYzQ0UxNzcyRjBEN0Y0Ci06MTBFNjUwMDBDMjBFM0UyOEM1MEZBMTlGNjVFOERCNTQ5NDczNTJEOUMyCi06MTBFNjYwMDAzNjE1RUQ4OUY5OUY3NkFCNEIyREY0MzhCRjZDNkQxMUUzCi06MTBFNjcwMDBEMkNCRTFCRjJCNEQ5OUU4NkE5MUNBRTk2QTZEQzk4NjkwCi06MTBFNjgwMDAyMjZDN0ZEODc3N0QxMTc3NDJBMzM0Q0YwMjMxQ0Y0M0ZDCi06MTBFNjkwMDBDNURGMDhGNjQzQkYwNzRBQkVCMTY1MTJDMDU1MUY1NTE2Ci06MTBFNkEwMDAxOEM2NUJFQTIzNEJCNjU0QzJGQzBCOEUyODMxMUY5NDZDCi06MTBFNkIwMDAwQjlBOTM2QTYyRjJGMDcxNzZBMUJDMDdGQ0REODU3ODUzCi06MTBFNkMwMDAwNEY4RUY2RThCNTJGOURFMzY5RDlFQkJEQkNBRTlCOUNBCi06MTBFNkQwMDBBNzJENDZERkVGNkI5QjQ5RTVERUI2N0E3QTNFRDgxNjZBCi06MTBFNkUwMDBBN0Y3RTExQkZEMDlBNERGQkQ2RDRERjRGRTE3NkQwOTExCi06MTBFNkYwMDA3QUQ2QUE5Q0RGRTYwQjdDNThFNjRERkI2MDhCREFDMzJBCi06MTBFNzAwMDBFQjMwOEU2MkUyQ0Y4OUVGM0FBMEI4MUNEQTM3OTA3NDEyCi06MTBFNzEwMDBDNEY3Nzg5NUNCMTUyNzVFNUI1QjgzNjQ5N0VFOTI5ODgwCi06MTBFNzIwMDAwRDlGRDM1NTZFNDdDNjA1MUNCRkY2MjYyRTU0RTFGOTQyCi06MTBFNzMwMDA2RTdENTkwNUQ5M0QyQzFFNDMzOUJENEI4QURGNTIwOUU4Ci06MTBFNzQwMDBGQ0YyNDRGMThDQTg1NUVFNjYwNTEzNzEzNTZGQTg3Qzc4Ci06MTBFNzUwMDA0QTE3OEZDRkNDNTBCOTdDQUE2NzZCMEY2NTAxN0NDNjc2Ci06MTBFNzYwMDBBNzRDNDczQTMzRTc3OUIwNDYyRjQyQjk3ODcwMkRDMEFECi06MTBFNzcwMDA1MzgxREY2NTU2NkVBMTMzQjNCRjU5MDIzRTE2Q0MyQ0QwCi06MTBFNzgwMDBBNzg3RTg5NkYzN0Y3NDU2RjkzNjhDMTM4M0UzMTk5QkI5Ci06MTBFNzkwMDBBODkzRDU2RDZCQjc0RDM1RTNERTNBRDFCMTQ5MjdDMEFCCi06MTBFN0EwMDAzRjRGMTQ0N0E4MUJFRTJGMzY5N0YwRUYzRTRFRTdBREQ0Ci06MTBFN0IwMDBGREVGNTA3QzJCM0E4RUQ5RTI4RDFEQ0QzMkY5MzkzQkRECi06MTBFN0MwMDA1RkUxNzFFOUUzQ0RBNURCMjY0MUZEMUFDMDFCRkFFRDNGCi06MTBFN0QwMDAzOUYzQ0JCMjEyMTZCQURFMjJFODY5QTczNzlFQTU4REFGCi06MTBFN0UwMDBBMkJGM0E0NTNEQjNGQ0JDMkZGMTVENUM5N0VGNEZGOEZCCi06MTBFN0YwMDA3OTNFRDJGMzRFNTdFQTcyOTQ4RkFEQUY3OEY0NzUzMDBDCi06MTBFODAwMDBBNTdGMDRFMjQ5RkMxRTJGODJGNzAwRDJGMUZBMzUxRUUzCi06MTBFODEwMDA5QTVBOTBFRjNGQjRERUE0NkYzQkNEQzJFN0ExOTg5RDFBCi06MTBFODIwMDBBRjc3QjU4RTFFOTczNkUxREU4NTcwOEYxMjk3MzVFMTkyCi06MTBFODMwMDAzNkQ3RTM3OEZEQTI4MTZGQjBFMTc4NzBGNjlCMzM3RjI1Ci06MTBFODQwMDBEMUE4RTNERjg5N0NFNzIxM0NFQ0IyRDI1QjUxOEI0NjU3Ci06MTBFODUwMDBGQjBDNjY3QjczQkVDRUY2Q0VGOTBFRTUyQjlDRENGRTgwCi06MTBFODYwMDA0Q0FGOEJFNUUyN0EzRUYwQjc1MzFFN0E4NkUxOTJDNzUxCi06MTBFODcwMDAxNTk0NjM1N0E4ODk1RTg0NjczQTZCQTEzMjUzMDdGMkY3Ci06MTBFODgwMDA5MTVGNUVGNDczRkFERkQ5Nzk2RjNFRjE5MTlBMkE0MTc0Ci06MTBFODkwMDBCRDcwQjJFMzc1QjA3OEJDMDZGNTU2NEM4RTU5RTVCOTNCCi06MTBFOEEwMDBGOTdDNUMzNUUzMDQ2OThBMUZEMTE2MzMwQzI5MDc2RUE1Ci06MTBFOEIwMDA4QTY2QzJGMzYwRkY0NUVBNUJENkZEQTQyRDhDNzEzRkVBCi06MTBFOEMwMDAzREVEQTU3RDBFMEM4ODY4NTAyRTM5Q0NBQTM2NDE3RkNGCi06MTBFOEQwMDA3Qjg0M0NBOTUxQjk1Rjc4RDY2MUJENDdFMUYxMjNBNTlFCi06MTBFOEUwMDAzMTY0QzFBMzg4QTc5QTcxQUMwRTc2MTNEM0EwQTk1QjNCCi06MTBFOEYwMDBBRDNDODBENTREM0U2Qzc0Mjc5RTQ3N0NCOUEzM0FFRDY0Ci06MTBFOTAwMDBCRkJCMjIwOUUyMkIyNkUyREZDNTIyNEUzRjU3QzQxOUM2Ci06MTBFOTEwMDBFRjY5RTU3MUM2NTYxNkJGRjAzNEU0RUIyMzBBMjNGRjE2Ci06MTBFOTIwMDAzODcxQUE4RDdGOURGMzNDMjBFOEVBREY4NUZFRkJBNUM4Ci06MTBFOTMwMDA5MERCNjVFQTAxMjkwQkZBMEZCRDkxM0UxODg2RTdCRjBGCi06MTBFOTQwMDAwOTM5RkVCMDkwRTMwN0I3RkQ0NzA5RTYxMzc0MjREQ0VDCi06MTBFOTUwMDAzMUM0NjlCOERBOUY5NkMwMEVCRDc5RkExQkZBMzU1MEZBCi06MTBFOTYwMDBCRkEzN0I1MjNCRTI2N0MzMUExRTk3N0YwOEU1M0VCNDA0Ci06MTBFOTcwMDA3QjQwQzhGRDcwNEJFN0I1QjQ2RjI3RTQ0QjkxOTkyRkVFCi06MTBFOTgwMDAyMEU0NDk5MTkwMjc4RjZEN0I3RUM5MDY5QzVGQzI0QjI2Ci06MTBFOTkwMDBFM0I0QjJGNDkzMThENzY3NkI2NEIyNTNDMkJEREZCQjY0Ci06MTBFOUEwMDAwRUZCQjlCRkNERTBGRDc2RUZGOTE3QjRFRjdGRTg0RDcwCi06MTBFOUIwMDA1N0ZEMDZFM0ZGQjNEREIxMjRDQUE5RDQ0NDlCOUMwQUVBCi06MTBFOUMwMDBGN0VFQkIxRUVCODU3QjlGQkE4MUYyNjEwNDFFM0M4Rjg0Ci06MTBFOUQwMDBDMDdDQTE0QUQ2QUQ4N0QzMjFBODU3RDg5RjQ2QjMxQjg4Ci06MTBFOUUwMDBENkI1NjdGRUU5RDA1RjU5ODM0Q0UxRUFGQkE0RjhGOTlDCi06MTBFOUYwMDAyMUE0ODc0NkJFMEY5RDU1Qjk2ODJERDZFRjVFRkU1Q0ZCCi06MTBFQTAwMDAxMkRCOEY3QkJBNDVDMjY1Q0ZGOTk3QkI2QTEwN0ZGN0RGCi06MTBFQTEwMDAxNEJERjY2NDBEM0MyN0I5NEE4ODBFODJBRkU4RjkzRjcxCi06MTBFQTIwMDA2MUQ4N0YzQzdBOEQzRTMyMUQzRUI2N0MzNTQzMzlFNjU3Ci06MTBFQTMwMDBCOTREQTY3REZBN0I2RTVCQ0RCRTYxQ0RCQjU4QUU2NjhGCi06MTBFQTQwMDA4QzhGNEQ3Mjc5Rjg3RUQ2NkQwQkZCNTBDRTlBRkI1N0FBCi06MTBFQTUwMDA4NTJCRUFCQ0M0RkY0RjMzREJGRUFDQjk4RjY1QjZBRjg0Ci06MTBFQTYwMDA5NDEyOTM1Qzc5QjQ1RkMxRjdCNTQ0RkIwMjA1NkQzQzI5Ci06MTBFQTcwMDAyODVFMjc3MzNFODhBNzdERDY3QzkzRTBCNTcyM0MxMzUxCi06MTBFQTgwMDAzQzMzNUMyQUMxRDMxRUFCREJGRDFGMzA5RTNBRTMzMjIwCi06MTBFQTkwMDBEMkNCQUNEQjBFODdCMzFEQzAzMTgzQzNDMUUxMzNFMTAwCi06MTBFQUEwMDAyODA2OTMyMDA4RTNERjNBRkZGOTdDODRFRkEzRkE0MUJDCi06MTBFQUIwMDA3REUzNDdGRkJGRTM3NjM5M0QwMUQ2Njc2QkJCNENGQjc3Ci06MTBFQUMwMDBGNzA3QUIwRjdBMTE4RjVCQUE2QkZERENGRUUxNzQ5NzQxCi06MTBFQUQwMDAyM0Y4RThFRTdBOTlGOEY2NzgzNURGRUY2NzlGOUVBMDg1Ci06MTBFQUUwMDBGRDMwOTdGODlFOTM3N0QwNEI3QjE4NDkyMzU4MzMxRDAwCi06MTBFQUYwMDBEMzBGQ0MzRjk2RkMwMkMwNEQ1NUQyNkY5MzlGNzI2QkUzCi06MTBFQjAwMDA4RTJEREZBMDk4MTUzOEYyNTY0QTg3RUFBM0ZGNUQ3RjY1Ci06MTBFQjEwMDA0NDQyQkQxNDEyRkJEMTY1RTZGRUI2RjI0QTBDRTc3RjEzCi06MTBFQjIwMDA4N0E5MTdEQkJDRjRFQzY5MzlFOEQzMDFBRUM3NUI4MDc5Ci06MTBFQjMwMDA0RTY4NUVGNkJDMTQ0RjMzQTM3OTE1QjRGMDdEQjYyRDQ0Ci06MTBFQjQwMDA1QURGMDEzNzk0OEI2RTA3RDRFQjY4Q0ZGNTkyN0M2MTY2Ci06MTBFQjUwMDBERDNDNUZDMERDRUY5OEI4REM5RUI3NTJFNEM4QjcxOTYzCi06MTBFQjYwMDA5NjlGRjUxOUZEQ0M2QjVERjY3Q0MzRTM2Q0NCRTk0NDU1Ci06MTBFQjcwMDAwRjdEQTVCNjc1RTkzOTFCREM5QUE5QzNGRENEQzE3RTExCi06MTBFQjgwMDA4NTNGQzVBMjVDQ0VFNUY4RjgxODM3REZBODM0QTNCREYxCi06MTBFQjkwMDAxNEJFQjAyQURCQkEzRkRBRTlFMjc2RDJBMTNGN0ExODk2Ci06MTBFQkEwMDBDNkUzMzdENDc5Mjk4RTYzRUVBMzlCRUJCRDE1OTNBRUY0Ci06MTBFQkIwMDAzMERGQTFGRDVFMUZEMkNCQ0U0ODI5M0QxRjlCRjU5NENGCi06MTBFQkMwMDBBRjlGRTg5MEU3MDM3OEM0OUNENkNEN0E2QTdFMzNFMEE1Ci06MTBFQkQwMDBGNTg3NzkzMkU5OTg4RUEyRTdGMjcxN0ZGMUQ2M0EyRjY0Ci06MTBFQkUwMDBFREY3ODcwM0ZEQkQ4RjQxMzlGODdENzcwQ0Y3QjdFRjVGCi06MTBFQkYwMDBBOTQ5Mzc1OUZERDdGQjVERENERURBRTExMkZBNkE4QkYxCi06MTBFQzAwMDA3REZGMTlGODYwMDdGMjgxMjcxOEE3RkQ0QkQ5MkJGMjc5Ci06MTBFQzEwMDAyNjFDN0U4RTg5OEZGMEMxN0NCOTY0MzI3Rjk2NEUxRTkxCi06MTBFQzIwMDBCMkNGRUYxNDc0QjM1M0M4RkIyRDQyREUzQkZCMjk2OTBFCi06MTBFQzMwMDBENjBFQkFEMUVFNUZBRTU1MjkxOUY4NzI0MkFCREQ0RTUxCi06MTBFQzQwMDAyODZFQjFFN0Q1MTQzNkRCRTkzRTE0MkI3MEQ4MTU2OTcwCi06MTBFQzUwMDBEMjYzQTYzRURFRTAwQjlFOEE3NDVGMDVGQTkyREIwNzY0Ci06MTBFQzYwMDA5QTZDREQ2Rjc3RUFFMzNEQUFCMUNGNDVGNkVFQzlEOURDCi06MTBFQzcwMDAwOUUxNDBCQzA1RjFFREI0NzMwRjA5N0NGRjREMzEwRTg1Ci06MTBFQzgwMDAyMjdFMDM2QUZDOTA4QkYyNDBFMzI0Njc5Qzc2QzMzMEJCCi06MTBFQzkwMDAzODE5QzAzOTc5NTQzODdGRUJGQTBDRjZEMzU4RkIwMzk2Ci06MTBFQ0EwMDAxRkNBRjExRENGMDBDODczQjI5OEM4QkIwODkxMUNFRUYzCi06MTBFQ0IwMDAwODcxN0ZBNUMzQzVGRDg0NzdDNUJDRkVDQkE1NTBCRjM5Ci06MTBFQ0MwMDAwMzgyQkVFNjA0NTg0QkU2N0MzMjFFMkY3QTFGMEQxM0RBCi06MTBFQ0QwMDBBQzM3M0U3M0ZFMkU1QTJDRjRCRDMwRjNGN0Y3NUQ3QzUzCi06MTBFQ0UwMDA5RjZEQ0U4NEQxQzdGOTAwQzc4MUU3RUY1NEUzMUQ5NzJDCi06MTBFQ0YwMDA2NTFGRTc1MTk3RjE5RUNCMTJBN0Y4QzhBNTcxN0UzMDJBCi06MTBFRDAwMDBENzQzRTRFNzlBRjZEMzNFRDVGOEQ4REFERTdDRTZDQ0YyCi06MTBFRDEwMDA1NzY5M0ZGNzM4RjNDNzE0QzBDRkZFN0NCNjk3ODExQzA0Ci06MTBFRDIwMDBEOTJGMDk3Q0ZFRDE0Nzc5NDAyNkJFMDdFRDZCOTQxRjkxCi06MTBFRDMwMDBBODA3NUUwOUE0MzA5RTYyQUU4M0I5MEYzMzI4NDc0NDBBCi06MTBFRDQwMDBGRDMzREM1QzlFMDBERDA0REMzNDdFOUNFRjE3QjIzNEM2Ci06MTBFRDUwMDBDOTg3MDI0MTM3M0I3RDhCNkZBOTgzRTdDREIzREU3QzRBCi06MTBFRDYwMDAxMUYzMTVERTdFRDhBNzIzNUM1QkFCOEY4NkFENzI5MzYzCi06MTBFRDcwMDAzNURCRTlDNzdDRUZGQUE4OTBGNkU5QkYyNTI1RjJERDdGCi06MTBFRDgwMDAxNkJCREUxNTE5NzA2M0ZCRkQ5MjRFRkU1Q0YyMEYwQTk2Ci06MTBFRDkwMDBEOTIzRkJBNUQ0RTk2NEE4QTg4Q0Y2MzNGNjVGMTM0REZDCi06MTBFREEwMDA2REIyRUM3NzM4RURGQzFDNUZGRjFEQUI3MERFQ0Q2MDAzCi06MTBFREIwMDAyRkIxMENGMTI5NjFBNzBGREExRDUxN0JGQkI4OUIwOTFDCi06MTBFREMwMDAzQjFCQTYwQjdDNUQyOUU2MUQ1MzBEMDVFMTk4QzYxMjgxCi06MTBFREQwMDBGNDlDQzE3NDdBODIzRjUwRTU4NkZBNjdCMTgxN0NFNDg1Ci06MTBFREUwMDBBMzc1ODE1M0NFRTE3NkM2N0YxQkRFOENGRjhENzgxQjI5Ci06MTBFREYwMDBBMjVCQkJERTM2RjcxREYyMDQxRTQyQUM4NUY2REYxRkI4Ci06MTBFRTAwMDA2RjVBQkE3MTIyOENFNzJFMEE5MjNEOUNEN0Q0N0VBRDAwCi06MTBFRTEwMDAxQ0M2NkNCRjNFMERGRENEM0NCMTFGQ0UxNjcxRkQ2QzA2Ci06MTBFRTIwMDBFRTRGRTczNEQ4RjVCOTUzN0Y3Qjg0QkRFMTE5NDFBRjhDCi06MTBFRTMwMDAzQkU1RTY0ODdBN0RCOURCQUVENzA3RTNDNzIzQzgzRjk5Ci06MTBFRTQwMDA2N0ZDNzg2Q0Y5QTdERjUyNTc4Mjc5MUFDNjBCNzU2ODkwCi06MTBFRTUwMDBEN0NENTYyOURFMTkzRTk1NUQxMUI3RDBDM0ZGNzUxMzg2Ci06MTBFRTYwMDBEMUMxOTNFN0NENkMwMjdFNEQ5REM2Rjk5Q0ExOUYxMDQ4Ci06MTBFRTcwMDAwMDA1ODRGQjA5QzU3MjBBRjM2RDM2MjQ1M0Y1OTg3RkFCCi06MTBFRTgwMDBCNjQxOURBODU5RDdCMUE2OThEQkIzNUI2QkZEQ0Q1NkIzCi06MTBFRTkwMDBCQkY2NzUzRjhGQTc1RTFCQTg3OTBBRTlBQTIyOThBQTNDCi06MTBFRUEwMDAyNTc3Q0YwMDQ3NzAxQ0NGQkJDNDc1M0I1MzYzRkRCOEJCCi06MTBFRUIwMDAwRkVCNjE1QzZGMDM0Nzc4Qjk1RUE5RDM1RUE3RkNDQzBBCi06MTBFRUMwMDAwNDNCMTExODREMkZEOEYzMzFGN0E4QTk3NTdFQzQ0NzFDCi06MTBFRUQwMDA4NEM3NUY0MjNCMjQ0QUNFNTE3QThEMzRFNjcyNEQwRDkxCi06MTBFRUUwMDAyQ0JDRDNDREY1NTczOThFNzM2MDNBOThCQjUwRkY4MzU1Ci06MTBFRUYwMDAwMzZFQjI3MzdBNDM4NTJBREE5M0ZCRTVBNTNGNDIzQjYyCi06MTBFRjAwMDA3MEUwMjUwRkMzRkQ5NERFQkY5RjQxRTcxQTdBNDNFNzA3Ci06MTBFRjEwMDBDQzQzM0FFODk1MTg3OEI2MzA3RkUwMUY5RUZDQzMwMkQ4Ci06MTBFRjIwMDAxOEI3MEY5RjZGMzA4QzVCMEUzQ0NFNjI3N0MxRjhBRTg2Ci06MTBFRjMwMDBFODQzNzFDQURCNjU0NjQwOUUwOUVEN0NBQzBCRjM1Nzk0Ci06MTBFRjQwMDA2MjlGRjhERjNCMEZFOEVFQzE2MEQ1RjZBOTZDMjgwRTkyCi06MTBFRjUwMDA2MEZBRkZFN0Y5MTMwRjIxOUMxREUzRkVCMzE5RjlBQzJBCi06MTBFRjYwMDAwQkUwNTRDODBFMzNBMjA4Nzc1NTlFNENGQ0M3RjI4MkMyCi06MTBFRjcwMDBBOTg5RjBCRUU2NzBBNDBFRjNEMTZBRDQ0QTk0MzQwMDk1Ci06MTBFRjgwMDAwNzVGRUZFNzdEODk0N0IxOUYzQUFEQjEyRTFCRUE1Nzg2Ci06MTBFRjkwMDAxRkQxQzk1RTk5MTdCREY2MTA5NkE3QkZDMkNCMUQ2RUQzCi06MTBFRkEwMDA0NkY2MjBGMjJGQjNGMDVGQ0Q0N0E3RDBGQzBFMEIzOTA5Ci06MTBFRkIwMDBERTFFMzVGQTBDNjk5NEY1RDA1NEM3NzkwRTdCMUU4QjkyCi06MTBFRkMwMDA5NTBFQjRFOTM2M0E0OEI4QUM3NDMwMTNFODYwQjI5NTlGCi06MTBFRkQwMDAwRTBDRTlCM0QwQzFGNzg0QkMxRDlCNUYzODlGNUNBRkJBCi06MTBFRkUwMDA3MEJFMTk0RUY3MkRERTlDOEFFMUZDNjE4RUJCQTkzQUZBCi06MTBFRkYwMDAyNzgyRkJBQjI2MUY2ODMzNkVEMkIwRUM1OUUyOEUyMzFBCi06MTBGMDAwMDBERjk5N0M2MUYyQzMzRkJDMkU4MjBCRjhFMjQyMUYzQ0M5Ci06MTBGMDEwMDAxNzA1RjVCOTk5RjgwMkZEMzgyQkZENUYzMjAyOUYyQ0Q4Ci06MTBGMDIwMDA2MDAzODczMEU3N0U4MUNBOTI1OTIwNDI3RTc3RjYxQkMzCi06MTBGMDMwMDA2NUE3NThFOERFODlBNzA1QjMyNTc2RDQyMjhGNEU5Q0I0Ci06MTBGMDQwMDBFMDY1MEIxRUI1QzEzQzY4RTVFNEYxRkQ5Q0FBNzc0NDgwCi06MTBGMDUwMDAyQzdDRDcwOUY2MzMxQTg1NUQ3MjhDRTU5NTIwREYyRDVGCi06MTBGMDYwMDAwRDdBQTZFMUY5ODYwN0EyMTRERkY3QzQ5QjI5NkY2RDFDCi06MTBGMDcwMDBDNjVCODFBQjgxMEUzRjE4MjdFQjM4RjkwRTdERTlGREE5Ci06MTBGMDgwMDBDNEJGMkYwNjE4REE2RDVCQTcyRjlCODBGRUM5MDdENzc4Ci06MTBGMDkwMDAyNDI2NjA5QzczMjNFMEZGMjgxOTM3QTlGMTMyRTU0MjRBCi06MTBGMEEwMDBGNThGRTdGQjY1N0E5NDNGMTM1MUZFOUU4OUVGMjk1MTU2Ci06MTBGMEIwMDAzNjQ0QkQ3RUFBMDdFQjZDOTM4N0RCQkQ5Q0JFQjc3QjU1Ci06MTBGMEMwMDBCOTVEQjhEMURERUQ0NUZFMUEyOEYxRDI3RUFBNTlFRjFGCi06MTBGMEQwMDAzQzg1REI2REIzM0MyMjlFRkNFOTdBMURGREZCNTkxRThECi06MTBGMEUwMDBERTZFN0I1QjJBRkVEQTQ0ODQ3MzM3M0Q3MzFCNTIwQzYxCi06MTBGMEYwMDBGNzAzRkNFNTQ5MURFM0YxREU3NTJDOTFDOUVFQkJERDlDCi06MTBGMTAwMDBDQkZEN0ZFRkMxMUZEMDNFNTI2RTU5OENGQ0NFNDgwMzIxCi06MTBGMTEwMDBGNDY3NTlBRjA1ODA5QTJDOTAxRjAwQUU4MTc0RENBMTcyCi06MTBGMTIwMDBGQkM5MEU1QjEwQTlGREFCM0E2NUY4RkFFMjlGQTM5NjA2Ci06MTBGMTMwMDA3NUYyRkU0MzQ5RjQ3MkZGOENGQzhCMzVDMjlGQUIyQkZBCi06MTBGMTQwMDBGNTEyNUY3NEI0QkE3QjcwMkE4QjNDRDlEQ0RFOERENEE3Ci06MTBGMTUwMDA4RTlBM0Y4QjdFNTMxMkQ2MzkwNTdFMTMzRTcxN0YyM0U0Ci06MTBGMTYwMDA3OTFBREZERkMwMzJFRTZGRTAxM0Y3MzdGMDg5RkIxQjRGCi06MTBGMTcwMDBGODFERjczN0IwRkNGMzM2ODNDQUI4Q0Y4MTY1RENFN0ZBCi06MTBGMTgwMDBDMDMyRUU2RjYwMTlGNzM3RjBCOUFGQUQ5OTlFQkY2QTI0Ci06MTBGMTkwMDA2QkExRUY4RkI0QjU1MkY5M0MwRkI3QjM1OTc5MzJCQUJFCi06MTBGMUEwMDAxMEYwREM3NTgzREJDMDdERUJDRDYyN0QxRTMzNEE3M0NFCi06MTBGMUIwMDA2M0IwOEVCRTA4RjczQjdENEZERkNBNzAzRUJFMjg4RjFFCi06MTBGMUMwMDAxNzc1NDY2RjY1NTdDMkIzNkI1QUE4MEIwMzU5REVGQjIwCi06MTBGMUQwMDA4M0Y0RjRBOURCMTlDNjBENzY0OUM5NjY4Q0QwQURGNjY3Ci06MTBGMUUwMDBGQ0UyN0MxNUY0NzM1OUY0REFEQTFDMjhCNzdBMUU1OTVDCi06MTBGMUYwMDA4Rjc5M0I5M0Y0QjVCMUE1REE1MDU5MEY1NTJEN0JDMEVCCi06MTBGMjAwMDA1MjlFNTBEMUEzRkFBMUZFNzczNkVDNUY4RjdDOEE3MEI0Ci06MTBGMjEwMDBBMEYxQjZDMTczRTBGQ0I1QjBFNEU5NTI0NkU3MzcwNkE5Ci06MTBGMjIwMDA0QURDMjlBNEIzQUI3MEJEMjYyMkZDRENBRUJGODhBRDlFCi06MTBGMjMwMDA4RkEyOUYzQzQxNzc1NzIxN0Y0MEZEMzRBN0NCOTNBQkYyCi06MTBGMjQwMDBCRjE5MzdBOUE2MEQ2RjM3NUEzREI5RkFBNEVBMzE2NTNGCi06MTBGMjUwMDA5NEZFRjBCQjM0NEEzRjFENkNCRDg2NjdDOTM2MjMyRjMwCi06MTBGMjYwMDA2MzNFOTEyRjQwN0U1QTk3OEJGMzY1OTc4RjNGREZGNDczCi06MTBGMjcwMDA3MkJGRUNEN0RFREE4QkJDRjBCQzQ4RjA2OTk3MkY1RTJBCi06MTBGMjgwMDA4RjcxQ0U4MUM5MzJDNTBCN0E1REQwMDUyNkU1QjY5NjYxCi06MTBGMjkwMDBGQ0JFMTRDNkZERDY1MzJBQzNCOEYzNUQxRTZFREY0QzA4Ci06MTBGMkEwMDA5QzEwRTJGQUYyREI1RUQyOTcxNzRDRjg1OTdCMEU5NDcxCi06MTBGMkIwMDAyN0ZFMzgxNjQzRkRCNzk5QzVGQzQ4MjdDOTJEM0M2RTdCCi06MTBGMkMwMDBGQUFGRDVBN0U2MzQ0MkY1MzNBNzNEOUM0MzcxM0ZDMTYxCi06MTBGMkQwMDBERjI5M0M2RjA0RTVCNTFENTc0RkMwMzhDNzA3Q0Y3MjEzCi06MTBGMkUwMDBCOUY0ODBBMEI3MUU1NzVGMEJBREU3QjQyMEQ5MEQ4Q0UxCi06MTBGMkYwMDA3NTkzNURCMDM2QUFEMkJFQkM5Q0NGOUY2RTk3RjYxNUIzCi06MTBGMzAwMDBBQ0U3MDZDNTlCMDQ3OERDN0Y5RkUxMjVGRkZCMjM4RkRDCi06MTBGMzEwMDAzOEE3RDY0N0Y2ODJEQjk3RDBCMkUxN0Q3NzUyMjY3RUJBCi06MTBGMzIwMDA1RkFGRjk1Mzk4OEFCRjM5NTg0NUU3NjY5MzE1MkFFNUM4Ci06MTBGMzMwMDA1RDZGQUVFMEYxQjk0MEU4QjIxNERBMDlCNzFDRjA3MUM0Ci06MTBGMzQwMDBGOTEwRjQ1MkZFNTVBQTYyRUZFMURBMDgzRTY1MERGOUI0Ci06MTBGMzUwMDAzRDY1MkNBQzI3QkM2QkIyNDY3OTVDRjAzN0ZBREUxQ0ZECi06MTBGMzYwMDBBMTNDRURDRDRDQUM0QkIzNEM3RTYwQzdCODRGN0UzMzY3Ci06MTBGMzcwMDAxNUY3QkJCRkFFQzVDNEQ5MjFDQTgzMjREMzQ2QzY3MzEzCi06MTBGMzgwMDBCQzAzMDcwMzA4Q0Y1N0NENzM0N0ZERUIwMjUwQkY3RDg5Ci06MTBGMzkwMDBBOTE2QzM3NTk4QTJENUQ2NjM3Q0IwNDNBQkY1MjI1RjlFCi06MTBGM0EwMDAwNTI2RDc3OTk3OTAxQzFBQ0M1M0E2RjM2REVEMTVEQzgyCi06MTBGM0IwMDA1RUM1RUZDODk3QUM5RDFEQzJGMzJDODU0Mjk2MDVCMjgxCi06MTBGM0MwMDBBQjI0QjQ3MzNBMUEyODZDODQ3OUJDQjZCQ0NCRjY5Q0Q3Ci06MTBGM0QwMDAwQjI5QUY1RDU5OTA0MzcwNzYzMEMzOEJGNTkzMEQyQTlFCi06MTBGM0UwMDBFOUE1QzJBMDM3OEQ3NjVDQTExOTM3QzQ5NDYzOEIxRjQxCi06MTBGM0YwMDA5MUJCREM5RUI3OUNERkFDREFDRTc1OEM0RkQ4Q0I3OTU1Ci06MTBGNDAwMDBDMjJGQzg3M0U0Mzc3RkVBMzFGNzU1RUM3ODcyQ0UzN0Y0Ci06MTBGNDEwMDAzNzcyNTczNkMyOUI4QjA3OTVGNUUxRjNEOTFFQTk2QTVGCi06MTBGNDIwMDBDNDc5MTY2QTdFODIzQkFBQURBQjQxRjkzNTlFQjVBQzc0Ci06MTBGNDMwMDA0NUJBRkJDQ0YwM0FFMDlDNTJEMURFODdFQjNFNDU1NzEzCi06MTBGNDQwMDBFOTFDQzM1NDM2QjAwRUZCREQyQ0U4QkNBQkM0QUUyN0MwCi06MTBGNDUwMDBFRkYyMjg2MjdGQjdCNkRBM0I4REM3Qjk5Mjk2RjE0QkNGCi06MTBGNDYwMDA5MjdFOTZCNDhDNzc2QTU3OEVBRDNDQjFCQkMwNTZGRjg2Ci06MTBGNDcwMDBCNDFEQTVCNkVGQTdBN0NFQjA3RDNGNzM3Nzk1QUQzQzgxCi06MTBGNDgwMDBCOTc3OTZBREZFRDQ3REI1QjY3MjY1RkE0MjVCRkRCMzMxCi06MTBGNDkwMDAwRTJGQjQ5NUE3RjU3REM1NTY3RkM2OEI0QjZEREZDRjdDCi06MTBGNEEwMDBFRTVGNjZGQjdFQ0UxQkFCNkRFNTczMDc2RUI0RDUzN0EyCi06MTBGNEIwMDBFRDY2QTc1RTlDRTJGRDdDRjZCMjA3Q0Y3OUQ5RTI4MkM5Ci06MTBGNEMwMDA3NjdCREM2OTRGN0JGRkIxNUU1Rjg3NzIyREVDMjZGQTlECi06MTBGNEQwMDA1NjUxOEY0Mzc5RjUwRERDOUZGMUNFODlFOTI4NTdDQTQzCi06MTBGNEUwMDA4NDVEOTMxNTM0Q0U0MTM5NUExM0Y2OTIzRTUwODNCQzU1Ci06MTBGNEYwMDA5RTFBOUM0Nzc2QzcyOTNCNDAxRTlEODU1NjIwMUJGQ0MzCi06MTBGNTAwMDAxRTQwQjlEQzk2OEM5N0I5ODZFMEY2NjlERDc0NjZBMTc5Ci06MTBGNTEwMDAyNjVDNEY3MTc1QjNCREFBMTkyQzExQzJGMTc0NkVDRjYwCi06MTBGNTIwMDA4MEI3ODhGNTdDM0FCNEI3Q0M2M0JGMkNEMzExRUYwMTE4Ci06MTBGNTMwMDBGMEJCRUVCMkY4NUQyM0Y5NTk0RUJGRUE2NEZEQTg1MzYzCi06MTBGNTQwMDA2NEU2Qzc2NzhGMTQ2RkMxNjc0NUNCQjNCNTk4NUUwNzk0Ci06MTBGNTUwMDBGRUQ1MTU4ODg3QURFRTc4NzMwRkY0QkJCNUQ0Q0ZGNzIxCi06MTBGNTYwMDBDMTg0N0ZENTU1RDI0QjdDMzE1MEEyOTI3RTYxQUE1RTc4Ci06MTBGNTcwMDBCMUQwMTJERkRBRTRFNTdBMjVFMEJEODNGQzNCQjU3NDU3Ci06MTBGNTgwMDBFNjYxMURGMUJFNTZBNUI4QzM2Njg5Qzc0NzkyQjAwRUE1Ci06MTBGNTkwMDBBOEQ3NzZDRDdBRTM5REVGQzA3QjZGQTlCN0QwMEJGMkU5Ci06MTBGNUEwMDAyOEY2OThEQkMwRkRDRkVEMDJBRkE1NUE2NTJENTg1QzVCCi06MTBGNUIwMDA2MDVGMzQxRUM0RTcyNDFERUMwQzc4OTY5NzZGM0I4ODdGCi06MTBGNUMwMDBDRjlCQkMzQ0JGRUU4Q0Q4MDNCNTI4NEJCQzczQjhGREI5Ci06MTBGNUQwMDBBNzRDNzFBN0Q2RTFGQTY5MUM4RTkxRTg0Q0NERDlDMTMwCi06MTBGNUUwMDBGN0E5Q0FENEQ3OTFERUQwREEzRTIxMEZEMTgxMEZFOTM1Ci06MTBGNUYwMDA0MEEyMjdEMThGMkYxMjI0QkRFMUMzOEQxQzJDQUI1MjBBCi06MTBGNjAwMDAyQTAwREYyMzY1ODY4NDc5MTczNUUxMURCNEVGRTY0QkM4Ci06MTBGNjEwMDBEQkVENTVGMDM3MzcyMTVFMjMwREY2RjUwRTc4NzcxMUM3Ci06MTBGNjIwMDA3Q0VEMTI4RkJGNzY2NUVCNEZENzAyRkM1RDc5QTUzOTczCi06MTBGNjMwMDAxODNCQzFGODQ0QTM0NURFNkMxN0ZBRjQyQjNFRDlENDJECi06MTBGNjQwMDBGRjI0NkZFODVDRDdCNDIxN0IwN0U4N0Y4NzdDMkFDMjYwCi06MTBGNjUwMDBEN0NENTA2RUY5NkVFQTY2NDhFRjNFMEQ1NjEzRURFRENDCi06MTBGNjYwMDBFRjI2ODlGRTREN0JGNzNBQzE1Qjc1QTU0REI0REZGNUZBCi06MTBGNjcwMDA1RUE0OEFFQzVCNUZFQkNGMzNFMkNGRDdBRjMwRTNBQzc1Ci06MTBGNjgwMDA5MUYxMUE5RUI0OTNGNDNEMkI3NUVCNjg1N0I0RUE2RTcyCi06MTBGNjkwMDBBMzI3ODMzQ0E4RjI3MDNCNjYyM0U2N0QyMDNDMjJFRjQzCi06MTBGNkEwMDBBMzRCRTBDM0RDNkY3QkNGQ0M4NzEyRkJCQ0Q3NjUzM0E5Ci06MTBGNkIwMDBEQkJFREY3NTc5NTVFMzQ3QjNDNzdERTBGNzI1MkNGMDU2Ci06MTBGNkMwMDA2RTg0NzExMDJGMUQ5RjM2RDZDNzY5RkY4RkYxNzM2QTQ0Ci06MTBGNkQwMDA3RkFGRThBMUYzQzBDMjdGQTkxMjc2RDIyQzBBOUEwMUFCCi06MTBGNkUwMDBERkI4MTlGOTA5RTc2M0ZDRTIyQ0Y0MzYyRkFBNDdCRTBDCi06MTBGNkYwMDAzNEUzMURBRjc5NzNBODVFMkNDOTk0MTZCMjU3NUNBNjhCCi06MTBGNzAwMDBERTkyNEY0QzI1OTg3NUI3MTlBNzI0OTM5N0VCMzVGOERGCi06MTBGNzEwMDBGNzAwOUVBQjM4QjVDQjdFNUU2OTYyQjdCRDdDREEwRTcyCi06MTBGNzIwMDA3QkY5RjQ5NEJEMEM1NkYzMTFCNDBCMUExOUM3Q0Y5OTk5Ci06MTBGNzMwMDBCQkVEREYxQkNEMzg1RjFEM0Y2N0UxODU5MTRGNzBGRDRECi06MTBGNzQwMDA2QjNCRDdDQTg0RkUzN0UzQTlDNUJERTkxQTE0QUY0NUEwCi06MTBGNzUwMDA2QkVDN0FCNTQwRThGOTAyODdGRUFDMEEyOUU0RTdEN0ZBCi06MTBGNzYwMDAxQzhFMUM0MkZCRDE4Q0JGM0NFRkQzNkRGOTZGNjYxQzI1Ci06MTBGNzcwMDBDNTI5Q0ZGREFGNkM2M0YwODVGQ0U1ODQ4N0M3MTcxMjAwCi06MTBGNzgwMDBFMERGQjQxNjg5Qjg0NTMxN0ZCQTE0RkQ5OUM1NjRBNzg2Ci06MTBGNzkwMDBCNTlDODZGMkU5RDdERUM0MDc1RTMyNUFFQ0U3MjBERTdDCi06MTBGN0EwMDBBRDU3MUY5Nzc0M0U0RUMyMzJDRUY1RTVDOTBCRjhGNDQzCi06MTBGN0IwMDA1Mzk0NTc2MkM2MzE0QzNGRkQxRjAxRTMyMkU0QUZDREE1Ci06MTBGN0MwMDBCMUU3NUExRUMzMzhEMjRCMUU4NkZEQ0M1NTlFM0VEQzk3Ci06MTBGN0QwMDAwNkU1RDVDNTJBRTU0MTZBMzM5NkZGQzg4RjcxNDBGQzFFCi06MTBGN0UwMDAwRUU1OUExMjdEM0NEMUZGOTMyRUYyRDczNzA4N0EzNjc4Ci06MTBGN0YwMDBDRkU3OTg3MThGNUM5RkQwM0YzRUM5REM4N0YwOEIzQzkwCi06MTBGODAwMDA1NzNGREFCOTY3RUUwNkQ5NkNEMzczM0M5RTY2QzZDRDE2Ci06MTBGODEwMDAyNkY3REFCRkY3MzIyOTU3ODNGNTlCREE5NDkyQjk1RDYwCi06MTBGODIwMDA2NTA0NkIyQzcxRjUzM0M0N0E0RDU5OUNCRTc1MzE5NEM3Ci06MTBGODMwMDBFRjYzQTkyQUJDMkZBMjUyRDA0NUVDOTBGRDNDRDgzOEVBCi06MTBGODQwMDAyNkQxQjk4MTcxNDc5NDU4MEFFQTRGNzlDNEZFQkRDMkU2Ci06MTBGODUwMDA3MTVFRUMwQ0U3RjkzMTQ3OUMzN0E0QjA3Nzk2QzA3ODFECi06MTBGODYwMDA1QkY0MTYwOUU1RTc5NkM1NjBDMzQzQjlDMjI3RjI4NzgyCi06MTBGODcwMDAyN0IxNDk0ODdGNzM5NTYwMkM4REY4RkQ4MzQyN0FDMzg4Ci06MTBGODgwMDBGM0VBNjkyRjJDNDE3REZFMkNDRjRGRDE0RUQ1QjdENTUxCi06MTBGODkwMDA0MTU5RkI4RDQyRkE0OTBCQjBDQUNBRTA1MDVDRjg3QjczCi06MTBGOEEwMDAyNzYyQUNERDM1MTQ2N0RBMDNFQjVBMzYxMUZENkIyRjk2Ci06MTBGOEIwMDA0M0JERjI3MzU4NUYyQ0Y3ODIzRjhFRTUwN0MxMUZDNzI3Ci06MTBGOEMwMDBFNzVFRjBDN0YxRkQyRkMwMUZDN0YyM0VGMEM3RjFGOUE4Ci06MTBGOEQwMDAyQkYwQzdGMUZEMjNFMDhGNjNGOURBNDA0RDhEMkZDRjc4Ci06MTBGOEUwMDAxRUE3QjJDNkVEODZFMjU0RkQ5MjE5QTc0MjUxRjJCRUEwCi06MTBGOEYwMDA5QkQzRkY2MEJDMkFDMUUzNTU2M0Y3NjM5OEZENTAzQzdFCi06MTBGOTAwMDA3MDU4M0YyMjJFRjhGNjBERkY3OTJGOUU5RjVFMzE2REM1Ci06MTBGOTEwMDA1RDE3OUU4M0Y1QkFDQ0I4MThDRjdGMzBGMzlBNERGRUIxCi06MTBGOTIwMDA1QkIxRjc1QURBMEY3NkU3MUY2OUMxRjVEODVCMURBNDAyCi06MTBGOTMwMDAzQjg2RENBRTg0ODZGMkQxRTk3Rjk5N0U5N0QzRkUzNTkzCi06MTBGOTQwMDA5RjRFN0RFNDQ3M0JFMDJDQjQ5M0JBMjlFRUIzQzlDNTgyCi06MTBGOTUwMDBDQUU5NUNBQ0U0OEYyMTVGMzhFMzkwMjYxRjNGRUIyQkI0Ci06MTBGOTYwMDBDRDc4OUU2OTMwM0Y1NkM0NjczQzJDRTVDNTc4OTk1QkRECi06MTBGOTcwMDAxMkYzMTRGOTlCMjRDMkEwOEJDREM4Q0Y5NjdDRTM2MDEwCi06MTBGOTgwMDA0NTlBRTIxQ0MxQTA0MUY2OTcwNDc2MTlEOTY5NUEyMjFBCi06MTBGOTkwMDA4QTcxQThDRTExRjI2MTc3MDkzRTVEOUJFRkE2N0IyNEE4Ci06MTBGOUEwMDAzQUYzRjlGRTdGNUQ1MTJDOEFFREQ3RTc0RjhGNUFGMzdBCi06MTBGOUIwMDA2M0NERkNERDQzQTFFOURFN0U0QjdGQUI0M0E1QTNFQTJCCi06MTBGOUMwMDAyOTA1RjRBQTNFOEE1RTU1M0MzQzdGN0RGREMxQjNCRDRFCi06MTBGOUQwMDA5ODk3QkMyOUI4QjQwRkVEQUI0REQxMDg5RDVGM0Y5MDBGCi06MTBGOUUwMDAzRjlERUM4RkMxRkFEMTk5OTRCRkFDMDRCOUREQUE0NDE0Ci06MTBGOUYwMDBCRDY0QjdBQTM4RkY4QUExRkE2NkJEMUI4NTdDMDZGNkVFCi06MTBGQTAwMDBBM0Y4NUMyMEQ4NEJGNTNDNkE5Q0UyMUY5RTA4QTNGRDNFCi06MTBGQTEwMDAyQThGOTdFNzBCMDRDMUJGRjZEQUUyQTY0MjFGRkJCOEI0Ci06MTBGQTIwMDA3Q0RCQTQyN0UyRDg2RTUzNTRENTUxMUM2RDJBQUYyMjNCCi06MTBGQTMwMDAzQ0FGMTc3ODVFOUY2N0VBRkQxOEQ5MUIwRjBBMzk2ODNCCi06MTBGQTQwMDBGNkIzNUVGOEVCRUI5QkRENjQ3N0M1NUJCMzhEQkE1QzE4Ci06MTBGQTUwMDBDQUM3RkMwOUYyREZBNkUwNUQ1RUNDNkY3N0U3NTc4RjdGCi06MTBGQTYwMDBEQUVGQTM2M0Y2RkI2QTZEREQ1OUQ0RUY4MzE4N0Y3Njc2Ci06MTBGQTcwMDA4Nzk2NkFEOEFGNkI4NEJDRkJBNzQ0N0Y5RkQ3QkUwNDMwCi06MTBGQTgwMDBDQzY5QjRERkM1NEM3RDlCOEE1QUY3ODk5RDRGM0ZEQTFDCi06MTBGQTkwMDA4OTY3MEQ2RkI3NDJFRjlGODc3OUJGMkE0QkQ2RkI5NUQ5Ci06MTBGQUEwMDBFMUU3MTY1NkVFRTNGNzUwNkQ1NUZCQzhERUQ5RkFBOTJCCi06MTBGQUIwMDA5NEYxRkM0M0I2REZENDNGODM3RUI4Q0Q1RTI5MTRGQ0JECi06MTBGQUMwMDA1NDI4QkVFQjY4QUY5NEEwNUY2OUI3MkZDRTNBNkMyRjc1Ci06MTBGQUQwMDA0RkVCQjM5NzY3QkNFOEI0NTc4QzNGQTBCREIyNDhDOEEyCi06MTBGQUUwMDBCQjNFOTBDRjNDNjk2MjQwNDUzOTEwNEZBNjZBMTBFRThDCi06MTBGQUYwMDA0NkQ2QkIxNkY3Mjk1RDIyQ0VCQzQ4RThBQjhCQ0RGREMwCi06MTBGQjAwMDA0NzdGMzZDMTVGRDhFQ0I3Rjk4OUU2N0QxQTQ1QTJGRjc5Ci06MTBGQjEwMDBFMkJBNDNEN0I2QTM3MDhEOUJGNjhGNEVGRTY1RjFGQzFCCi06MTBGQjIwMDAwNzZCNDg0QzNBRUNBMDQ2QzM3RTFFRjU2Mjg3OURFMzA2Ci06MTBGQjMwMDBCNDg3NkFENDFFQ0FCNzJDNzBDNDFGQ0M3RDRBOUMyN0Q4Ci06MTBGQjQwMDA5RUNCNzU4RUZGNTlDNzM1RkJEQjA5N0EwQkVEMTVGMzlDCi06MTBGQjUwMDA5RTAyQkFDNzBCREExN0FCNjkyOTE2QTRGQzJEQ0FGM0FCCi06MTBGQjYwMDAyQjVDQzM4QzlFMEM3NDNDRDNDRkU1REEzMEJDMjVDRjI0Ci06MTBGQjcwMDAyM0JDOUQyRkRFMTUwNEY5M0QyODA1NzU0QTRBMkZFMTY3Ci06MTBGQjgwMDBGOTVGMjg0RjE2MkU4N0Y5OTBCRDdDODJGNkExQ0RGQTM5Ci06MTBGQjkwMDAzOUQ5QkQ5NDJGQjZCMzQxRTJGRTYzOTI5MTFENjJBRTk2Ci06MTBGQkEwMDBGM0NFMjAzRjNGRDM3OEFFOTQ5MkIxN0Q0QjI5OEQ0RjU5Ci06MTBGQkIwMDA3MDk1MEVBRDJGRTBFOTI4QzcxM0NGMkZCQkE0REU3RUQyCi06MTBGQkMwMDBDRUE3RDE2MTZGOThGNDcwQjFFM0ZEQ0IzRTdFNEVEQUUzCi06MTBGQkQwMDBFNDgzQjdDRjdFNzFEMjI5MDBDNzBBMjk1OTFGNTA0RTNFCi06MTBGQkUwMDA1RTRGNUFGOEMzNzUwMkY5MTBGRjNFOEVBNjQyRkM3MUIzCi06MTBGQkYwMDBEMEZCOTA0NkY5MDFEOUZENzczMDIwQzkwNjNGNEJENjlFCi06MTBGQzAwMDBDRDA2QkRFODFGMzg1MzgyRjIyNUZFQzkxRDVERTdFMjJGCi06MTBGQzEwMDA3MUM1ODE3RjQ1QTNDQ0UzQTk5QTVCNUYzQzU0RjZGQjk5Ci06MTBGQzIwMDBFNzUwMzkyMkM2MDFENzIyQzlEN0RCNzI2RjAxQzBGQjZBCi06MTBGQzMwMDAwMzkxMUZCMEQ5NjBEQjE0Q0NBRDk0QjU2REIxOTJBMTI2Ci06MTBGQzQwMDA3NjM5RDg0RTFBQTU1RDlDNkQ1MzMzQjQwQjlBRUQwMEVFCi06MTBGQzUwMDA1RDlERTYzRDFGQTVGOEU0REY2NTAxOEY3NTdDMTVGMTFDCi06MTBGQzYwMDBBNkU5NDEzQUM3MzM0RkQ1MzBFRkUxOEJDMjMxNkVBQ0Q0Ci06MTBGQzcwMDA3OTI3RDgzNkQ3QTlDM0RCMDFEODZCNERGOEU1Q0NGMDhFCi06MTBGQzgwMDBBN0YwQkI3NTdDRDcyOEYwRkZCM0YxMzE1NjdGNkVGMTNBCi06MTBGQzkwMDBGRDMzQzMwN0Q1RDc4RDFCNzlCRTA4OTc4QkVFQ0JEMDJDCi06MTBGQ0EwMDA4M0IyQTU5RjVCMEU3QzRDRjE2QkY1NzI0NkU3NzQ1NEYyCi06MTBGQ0IwMDA5N0ExQzU4MENFMkJCNERCQzgwRjU3QjNFQjM0QjQwMzg4Ci06MTBGQ0MwMDAzNjQyMTlFRDgwOERCREREMTRBN0FFMjhCQkI1MEI4OTdBCi06MTBGQ0QwMDBCRTIyRUQ2NzI4MEYyNjMzMkRGQjNFRTg3N0IyQTY2MkUxCi06MTBGQ0UwMDAyNjBFNTNDRjNEMjQ2M0RDOUI3RDg5RDEzOTkxQUMwMzMzCi06MTBGQ0YwMDA3RTdFQUY0NUM5QUMxRkEzN0Y5NDlERURBNTM4NTAyMEYzCi06MTBGRDAwMDA3QkZBOEZCOUIxQ0JFM0MxMjZGQzgxOUEyM0I1MTgyN0MyCi06MTBGRDEwMDA1NzFCNTkwQzU5NTE5NTUyQUMwNjk5RUM3NDQ2RkIxMDdGCi06MTBGRDIwMDA3RTYzRUZGNTc4REUxMjE0MUZFOTI3QkFFQjAxRjVBQTFFCi06MTBGRDMwMDA4ODhCOEZFNzI0QzNCQURDNUEyM0ZBMDlDOUE3NTQ4QUVGCi06MTBGRDQwMDBCRjhGNDdEMzE0ODhCMkEyMjI2NzFCQzI1MzkxODAwRTgzCi06MTBGRDUwMDAyNDg0OUZDN0I1MjYyN0U0NTgxQUZBQUY3QTg3Qjc2Mzc5Ci06MTBGRDYwMDBCRkU1RTcwM0MwOTc2ODdBMzgzODg0NTc1M0FFOEMxN0RECi06MTBGRDcwMDBGMUYyRTg2MjdCM0M5OTBEQzA5Q0ExN0RENTZGMTdERTQ2Ci06MTBGRDgwMDA4M0YxODQ3MUMzRTQzN0Y3QUZDRDdCNzRCMkRFNjFGMUU4Ci06MTBGRDkwMDA4NzY5NUZEM0FFMzdGQ0UyQkUwQUJGRTMxRTg0OTJBMDQwCi06MTBGREEwMDBDQjc2OEZDMTMwQkZFMUJCNzFEMjAzMUUxNkYzQkFDOTQ3Ci06MTBGREIwMDBCRTU4NEM3NjgzRTk4RkVDQzQ4QTE4RkYyRjY2RkM1RTMwCi06MTBGREMwMDAyQjY3RkJFOUJDM0Q4QjcyRkZDNEUzMDczM0FGMEFCRTcwCi06MTBGREQwMDAyRkYzMUJBNDZGM0Q1MDA2M0M0QTZFRTZDRDg3RjcwNTE2Ci06MTBGREUwMDAzMjhGOEJBQzk1OTg4QUU1QTFGMUQyQjQ0RkJGNDE4QThFCi06MTBGREYwMDA3NUM1QTQyMUZGNzdCRDE2QTNGQzAxQjYyNkM3NjYyRkUzCi06MTBGRTAwMDA5Qjc5QThBQkFGMjkxOTlGMDNDRkFDQTFGMzQwMUFEMkJECi06MTBGRTEwMDBFM0VBQkMzMkIyOUZDM0I5RkRGRjA3RTVFQkZCOUIzNkJCCi06MTBGRTIwMDBDRkY1QTJGQ0M0RkM4NTU5RjA1RkEwQjMyMzA5RjJENjNDCi06MTBGRTMwMDBGMzUxMjFEMzJENzY5OTQ3NkRBMTM4OThFN0EzNTM2Q0UwCi06MTBGRTQwMDBFRkQzNkRGNkYzODM0NjUwQUVDMzcxQzYwNzc0N0UyRUIyCi06MTBGRTUwMDA4MzY5RUREOEFFODZEOUNGMDk3QTNFQ0FCN0Q5RTk0M0NFCi06MTBGRTYwMDBGRDE3RDlERUE3QzE5RUIxREU0RjMxNzJGRjAxQTY5NzAzCi06MTBGRTcwMDA1QkZCM0Y3NTg0RkUyNzM5RkFENzMyRjYzRkQ0NkZBRTZECi06MTBGRTgwMDBBRERGMEU5NUM3NDc5MzExM0ZBREJCRDMxRTk4MUFBODlGCi06MTBGRTkwMDAyRDBBNEMxQjI1N0UxRkUwRjFDNzBERDExNjhBREZENzM2Ci06MTBGRUEwMDAzMjYwNzhBMDkzRjMzRTNEQUFGMEYzNkM4Q0VDMzY1NkFBCi06MTBGRUIwMDA2NDhGREZENzBBRkE5NTgxMjI5MDdFQ0Y1M0VERjc4MkM3Ci06MTBGRUMwMDBDRDYxQ0U3QkMyRUNGNkQwNzNDODI4MzBBRTFDQUFFRTUyCi06MTBGRUQwMDBBMzM4RkVDNzQxMURGREFGOTFFQ0U1QkUzNjQ2RjFFMzA4Ci06MTBGRUUwMDAzOTgxRkVFQjcwOUZGQTgyQ0Q3N0JBM0E2NjhBRkNEN0U5Ci06MTBGRUYwMDAwMkM2MkVEREZDQzA1Q0I0RUZGQkM0NzlCRDhFODg0QzFECi06MTBGRjAwMDA3ODg5RDc4RUE3RjMzNzY2M0Y3MTM3OUI4OEYyMzAyRUZBCi06MTBGRjEwMDBGM0ZDMDRGQTAzRTNGN0U1MTVEQ0I1MjkwM0ZFOUNFN0RGCi06MTBGRjIwMDAzQjFCMEQyOTVFNjZBMTlCM0UxOUYwNkExREVGRkNDMkNBCi06MTBGRjMwMDAxRUM1MzI4RkI4ODc0REEzRjE4NDlEM0IzOERFQjhDRjA0Ci06MTBGRjQwMDAzN0RFQjMyMkVFNjQ4RUQ3MzhDRjNFQkY0NkI3NDZGM0Q2Ci06MTBGRjUwMDA2QjE0RkM2QjhFRjcyQ0NFMkYwMzdFQzcxQzRGRTY3NDAwCi06MTBGRjYwMDAzMzM4REUwNUY2RjkzNTdBMzQ5QTVGQTNCOEU3Nzc3MDRGCi06MTBGRjcwMDBCQzcxOUY2RkJDMERBRTk2MDREQTZEREIyNENFRkZERDQ1Ci06MTBGRjgwMDA4MTVGNzVFMEJBQkVEN0IwM0E0QUZBNDBEOEM1MTc2MzY4Ci06MTBGRjkwMDAwM0E4NzdCMUNBQzc1QjUwRTQ0REFEQjU4Q0I3MTNFNDg1Ci06MTBGRkEwMDA4MDIxRjJEQzBEMEZFNjZGNjg1NDRFQjU0NUU5NzkxN0Y0Ci06MTBGRkIwMDBEOEQ5MDZFNTZGOTREM0Y3N0JEQjYyNTRERUREMzY5MzQ4Ci06MTBGRkMwMDA5RTY2M0ZFNTMzRjlCRDMzQTdDRjk2MzJEQURCODcwMzcwCi06MTBGRkQwMDBEQ0NGREE5NkFGNUQ3RTE1RUFBNTFBM0YzRjBGMzlGMzA1Ci06MTBGRkUwMDAxQzY2NThFQzVGMzA4ODBGRkE3MEZGRTUzMjU2ODlCQTBDCi06MTBGRkYwMDA2REQyMEUwRTc3QTQ2RTVDMEFEN0NGNUY3OUE4QUYwREQ1Ci06MDIwMDAwMDIxMDAwRUMKLToxMDAwMDAwMENBMUU5NzRCNDc3RDBBQkMxMENGRTRBNzNFMTZFMDdFODAKLToxMDAwMTAwMEI4QzdDREU1M0Q5QkM1RUYzMTVDMjBGNDBBNTMxQTI0RTcKLToxMDAwMjAwMDE3RTJFM0UyNkNEQUVGNUZCOEM4MDg2OTgwQjc0NTkyN0YKLToxMDAwMzAwMEY0ODczMkExQTdGMERDQ0FBNTYyQTk5Qzc2N0UwNDM1QkMKLToxMDAwNDAwMDA2RjQxQjMxOTQxNERFNEY3NDY5RDFFMTI2RDRDQkYxNTAKLToxMDAwNTAwMEQwMjVFNDFGQzRBMTYxMEVGNDczQTlEMDkzMzVBRjdBMDMKLToxMDAwNjAwMDE4RTYzQkIwQjk2RTgyNjNEMTIyQkIzREJGQ0Q5N0Q2QjcKLToxMDAwNzAwMEQwM0VEOTU2MTk2MUI4M0UwQjFCRUNERjNENkVDRTg3RTIKLToxMDAwODAwMDcxQzdCRDA1MEJDNkI4Qzc4MEVFRDJDQTkwNDdFQThDQ0YKLToxMDAwOTAwMDRGM0UxQUIwQzcyMThGQjM4QTVCRUFGMDYzNTE2NEQ0MzQKLToxMDAwQTAwMDdCMENENjYwOUJCQzIxRkQzNjlDOEUzOTNDQUZGQjk5MDYKLToxMDAwQjAwMEYwREJGNjUxM0NDQzg0QUY0MDRENDkyOEFGMEI5QkY3QTkKLToxMDAwQzAwMEQ5RjI5QTAwQjE2NDBDOUI3MTc4QTZEQzU3ODk3RTg4QkUKLToxMDAwRDAwMDczM0UzQkE1RkJGMjQ3QkJCN0E0ODBBOUFGRjc5NzhCNTQKLToxMDAwRTAwMDdCM0RBNUUxRjM3RTI1MjBGMjZGMDdFNzNERkI5OTMyQ0EKLToxMDAwRjAwMDk2ODk3Rjc4REM3NUMxNjEyNUI2NTYxRkMyOEI4OTg3Q0EKLToxMDAxMDAwMEZGNjkzRUVBMTI3ODdGRTZGQ0Y3QUJCOUZGNTY2NEJCQTUKLToxMDAxMTAwMDNGRDNCQzE3Rjg5MkMxQjJDQTU0MEIzRDVGQkNDQzRENjMKLToxMDAxMjAwMEY2MEMzMzA2MkE5MEVFOEU5QzFCRTBGN0I4OTlGNjRCM0UKLToxMDAxMzAwMEZBMjUxOUVEOTcyRkRFQkY1MTZDQ0JEQjE0RkQ4RUI0ODEKLToxMDAxNDAwMDVFQ0UzQzQyQ0IzOUQwQTEzQzc3Q0MyRjkxRjgzRTU2QzUKLToxMDAxNTAwMDAxRTZCOTg1RjlGQkEzNzYzQkQzOTZFN0I2RkVDMDRGMUYKLToxMDAxNjAwMDI1OENGM0REODFGOTc4OTY3REVCNDJGMEU3NTE2RTE2MzAKLToxMDAxNzAwMDJEQjdFN0Q1MzlFMTMyRjNBQTA2Q0ZEMUNFNUVBNEREQTMKLToxMDAxODAwMEE3RDNCRDg5REQ3ODExNERENzhFNjQ5QzU5RjIyM0NENUMKLToxMDAxOTAwMEYzODFBNjNGRUQzQzE3QTgwNEY5RkQ3OTUxNzFERUMyNDkKLToxMDAxQTAwMDE5MEZCRTVFNEU2QTI1MTJFNkEzQTZCQzM1RjA5QzkyREUKLToxMDAxQjAwMDkzQThDMkEzRUFENzJCQzk3QTdDQUY4QzlGRDU4Qzc4NDEKLToxMDAxQzAwMDU4RENGQUVEMThDNkVGQjREQ0NDNzFFOUM1NDI3RjlGNkMKLToxMDAxRDAwMDFCRTRGMThFNTc1Q0U5NjI4QzYzMkZDREE5M0QzNzM4NjMKLToxMDAxRTAwMDJENDNGREQ2RUY1MjdGNzM0NkI4OEZGRUIyMjBBN0JGRDYKLToxMDAxRjAwMDNCODQzRTc3N0VCRjU4OENGM0U1MTUzMkRENkZFMTYzQkIKLToxMDAyMDAwMEExOTQ1NDgyRkJDNkREMzNFOTNDREVDQTlEQjE0Q0U3QzQKLToxMDAyMTAwMERFOUUwQTI3MTYwNDJENzEwNzVGMTkzRjdGQ0Q1OEVGMjgKLToxMDAyMjAwMEQ5ODhBRjhEN0ZCQkIzRjc3RTQwNjVDRURGODIyNDQ3OTAKLToxMDAyMzAwMDczMTRERUFGQTVGRDY1OTlEQUVGRkZGODc5M0FCN0JDMjQKLToxMDAyNDAwMDFGQ0ZBOUEwOURDQ0VFOTg4N0ZFRENENkMxMzI0QjRBQzkKLToxMDAyNTAwMDE4MUZDQzE2RTU2NDJCRkYzRTU4QUU5QTU3ODM2NUE0NTEKLToxMDAyNjAwMDQxMjBCMjk3ODI3MzNCOTE1RUI2NEE0QzEwRTMzQzVFRUMKLToxMDAyNzAwMERGQzVFQkZGNDI3QzlGNzNFMTVCM0ZCRTA1RTVGRDc0OEMKLToxMDAyODAwMDM3Rjk4MTVCODUzRDYyQzJGNzcyOTBFN0NEQkMzQzA2RDEKLToxMDAyOTAwMDNFNUJDNUY3MjBFMjMzRjI5OUYwRDk5QTA5MUYyRkU3QTgKLToxMDAyQTAwMDE4MzdFMEJBRkIzMDkzMDI0MEYwRkRDREJCMDZGMzg4NkYKLToxMDAyQjAwMDdGRDBDNjYyNTdDMTFDRUU4OEVERkRFOTJEOENEQTI3OTAKLToxMDAyQzAwMEFERjQ2MUI2QkYyOEM3NTgxQjI0Nzg4RUQyRkM0MjY1QjYKLToxMDAyRDAwMDQxNzQ2RkQ4QzYxOThDRkFDOTAwQzdDNjRDRkQ5OEVCOUIKLToxMDAyRTAwMDdBMzA4QkNCQjEwRkQxNzY5RTg2RUJDQUVEM0ZDNUQzNkEKLToxMDAyRjAwMDE3QzVGRDdGQURGQTdCRDc2OTIwNDczQTRCQkE5QjMyRDEKLToxMDAzMDAwMEQxRjdGNzQzN0M5RjNBN0I4NDc4RjVDRjA1M0RCRUE0QjcKLToxMDAzMTAwMEM1N0Y4MDcwQjQ2QkI3RDJGREFBNkU4OURCMEQxQjY3RjkKLToxMDAzMjAwMEY2MzNDOUQyRUVCNzIxOEU2RjgwQkIwN0VCQkJDRkU2QTkKLToxMDAzMzAwMEY3OUU4NjAwRUY5ODYwMTZBQUU2RjA2RkQ0OEYzMENDNTcKLToxMDAzNDAwMEVCMEU0NThGNTA1RTY4QThCQTlGRjg5RDhFMkExNDcwRjgKLToxMDAzNTAwMEJBNDI3RkNEMkJFQ0IzOUYwN0JGMzIwRkVGREJDODUxMDIKLToxMDAzNjAwMDRDQkE3QkFCMTNFOTQ2MTkyQTEzMURGNUU0RjBGNkJGMkUKLToxMDAzNzAwMDBGQkRENTk5MDQ5MUJCMEJFQzE3QkM4NzIzNTlDMEYzNzMKLToxMDAzODAwMDQ2OUNGM0ZCQTU4MDc3NDdEOEQ4OEJFQjMyMEM5RjlFMTkKLToxMDAzOTAwMEZFMUZERjAyRURCNzRFRTRFNzZERTZDODdENEQ1NzIyNDQKLToxMDAzQTAwMDVENUUxODI0RkIwQkRFMzc1OUVGQkY3OTVERTBFQkY1OUUKLToxMDAzQjAwMDIwQjc5RkI2N0VFQ0E1RUZDRUY1MTg4OTVFN0YyN0RBRDEKLToxMDAzQzAwMDdGMEU3QUZENUQyNjNBMDE3QTdEMDZFNzY1QTFEN0Y3QjMKLToxMDAzRDAwMDU5NjY3QTdEN0UwNDdBN0QyMTEzNUU5QzY1ODUxOTNCODIKLToxMDAzRTAwMDcwN0Y1NkZENjRERTZFRUM0RkJENjhGNjhFRkJFMUE5QjIKLToxMDAzRjAwMDdDNzI1MzkyNTYzMzI2RDlDRTk3OUFFMzU0NEE4OTNGNUEKLToxMDA0MDAwMDA3MkRGMkREQkM5RkZCOUI0MURFRkZCMDdFNjc0Q0RGMUEKLToxMDA0MTAwMDgxNzJFQzI0RkExREMwRjkzOEZCREQxRkU0RjBDRUI5N0YKLToxMDA0MjAwMDMwOThDODc0NkZEMUNFMTBDRjFCQkY1QkNDNkIyNEJFOEQKLToxMDA0MzAwMDc5MkFDNEZERDk5MUY4RTY4MUQwMjBERkIwNTBERUQ4MEEKLToxMDA0NDAwMDdDRjNBQUE4MEZFQkUwQzVGQTYzRjNDRDZERjRGNDk1NDUKLToxMDA0NTAwMDcxQkVBMTYzQzhCMzg2RjMwRDRCQkU0ODdDRDI1OUMyQUUKLToxMDA0NjAwMEY5MjI3RkVCOUYzQjMxQ0UzMUM4NDdDOTBGRUM3Qzk0MUEKLToxMDA0NzAwMEZDQzBDNjQ3N0ZEOUZBMDFENTc3QjYwRjhGNzA0Rjk1NkMKLToxMDA0ODAwMDNFQzhGRkYxMDkzODBGRTM0Q0FEOUQ5RkIzRTkyN0JEOEUKLToxMDA0OTAwMEREQzMwNjBFNzgyOENGOTZFN0I1RkE5MzQ5ODM5QjBEMDYKLToxMDA0QTAwMDdEMENFRjNEMkMxNzc4RDg4NTNFMThGQTM5RDM0NTlDNDIKLToxMDA0QjAwMDQ5RUQ2MzBCNDNDM0Y5Mzk1NDlEQUVCNkRFMjNGMDZCQUYKLToxMDA0QzAwMDMxRkU0N0ExRjhENEQwMzQxQ0FGRkY3NEI0QkY0NjVBRjQKLToxMDA0RDAwMEE3NkE1MTdGNUJCNjUxMURDQTQwRDc2M0U5QTFDQjQzRTAKLToxMDA0RTAwMEZDQkNFQkU1MDJFRTlDQkY3OTVCRDBGRTc0RjJGQjlDOUEKLToxMDA0RjAwMDk1QkZGQUVCQkRBM0Y0NzM5OTY4QkYyMEY0QjlGOTdGRjcKLToxMDA1MDAwMDQxMjgzM0ZGNUYxQ0IyRjM3RjM1REVCRjk5ODFGRjJGOTcKLToxMDA1MTAwMENCRDQxRUY4RkZDQkExMENGQ0ZGMDVGOEZEQ0E1MDA2OUEKLToxMDA1MjAwMDdFOUYxREUyRkQ4Rjg1RUY3QjA1QkVFRkZEODJGODZFOUQKLToxMDA1MzAwMDE3RUQ2RjBBN0Q2RUZCRTBBNjUwNjZGQkUwM0JBMTY5RkMKLToxMDA1NDAwMDI3ODVFRkY2MTFGMEREMTEyMjc4MUUyNEY4NDM3QTkwMEEKLToxMDA1NTAwMEUyRDg1RDMzRDg1RUE5MzQyMzFDNUJBREZENzg3NURFMkYKLToxMDA1NjAwMDBGRTBGRDdEMDlFODdFQ0UyNzVEQjE0Q0Y3Q0U0MEJCQTQKLToxMDA1NzAwMERCQUNGMDlCRURBQTQzOUE5OUJDN0QyREZBRTc3NzVDNDIKLToxMDA1ODAwMDE0QTQ3ODNGRThDNzFERkY2NDNBQjgzQjk0NDEzRUNGQkUKLToxMDA1OTAwMDkxQjkxQ0ZBMjBGODIwRDk4MTVGQTBGRkRFNENGRDJGMTUKLToxMDA1QTAwMDEzNzQzNjk2NURGMDk4QTAwRjk4RjdCRjg1QTYwRDk3NDcKLToxMDA1QjAwMDdGM0RFMjc3NTI3Njg0MTNGQjQzODRBRkZFRjkyOEFGODgKLToxMDA1QzAwMDc2REQ5ODIzNjEzQ0FBQzg0ODRCRTgyN0VDMTVGQTY2MEIKLToxMDA1RDAwMDcyNDhFN0U3MTk0NEJCNUQ2QTVBQzI3Qzk2NUQyRDlBNjIKLToxMDA1RTAwMDg0RTc4RDJDRkQxRDBFNEQxQkI5M0YyNzFDMDBERjZGQ0UKLToxMDA1RjAwMDQyMjRFRjhDQTdCMTVERjU5MDFERjg5OUVDQTQ0QkIyQTUKLToxMDA2MDAwMDhEMjMyMUQyM0ZGMUU3NDk2RTlGNjY5N0RCRTYzQ0U0RkMKLToxMDA2MTAwMDc4MzdFNUJERjg2NjY2RkUxRDk3QkQ0MUQ1OTRGRjdGMkUKLToxMDA2MjAwMEIyQ0FGRjE3NDI5QUY5QkI1MkQ0REY2N0Q1M0YwMERGNDkKLToxMDA2MzAwMDFCMDJCRTM3MzNDMUU3QzRDQjU4NzA4RTE3N0ExRUZBM0YKLToxMDA2NDAwMDdCM0Y5MzlFNzJGNjY3RkFBREU2M0FCOTUxMjc1OUUyQkQKLToxMDA2NTAwMDNBNTI3OEQwRUU2NTYxOTRERjFEMzI5RDQzNUEyMEU0MTIKLToxMDA2NjAwMEM5ODI5OUQ5QzI2RUQ3RkNEOEZGMUQyMjRFN0VDN0YyMkYKLToxMDA2NzAwMDVCNkI3MEJGQkJFNzI2QUQxMjUxNTBEMENDRjU5RUJFNzAKLToxMDA2ODAwMEZDMTQ4QTdGMDY0NEJGNEVGODA3REJCQjdCNEZDNzdCNTkKLToxMDA2OTAwMEM3NjFEQzJDMUNGN0JDRDkyQzhEN0U2MzE2REEwRDE0RDcKLToxMDA2QTAwMDhGRDBFODc3QkM3MjNDREQ1MThDOUY2RTk0QkE5Qjk2REMKLToxMDA2QjAwMEEyNUU5RDFGRTRFNzRBQTI4QkM2QjhCRjZEOUQ4RDZFRkEKLToxMDA2QzAwMDU5QjQ3QThDRkE2QkE5QkUxNkU4QTZGQjJGNEVCQUJFQjcKLToxMDA2RDAwMEE3QkIyOTUzN0U0OTJDMkM5Qjc2RDE5OUEzRTIzNTFBQ0UKLToxMDA2RTAwMEExQjg5Njg5REZFMUUzRjBGNUFCODlCNzQ4ODhFRjUwMTAKLToxMDA2RjAwMEI1QTRFMUQxQUIxMEQwMDlEQTRCNzI1OTFGRTUzMzdEQjcKLToxMDA3MDAwMEE5OUFEMzBCMDNCRjY0RjRGQjMzM0FDREY1OUUxM0NFMDUKLToxMDA3MTAwMEZCRTI3MDk5RjU0NjFFNEZENDczOUM1N0MwN0QyRjhBMUIKLToxMDA3MjAwMENGMDZCOTFDQTM4QTUwN0VGNzcwNkVDNkI4QkZGOURDM0QKLToxMDA3MzAwMEQwQTYxNUE5MkU2QkZGMjlCRTNGMzM5ODNGMUQ4QkEyNzMKLToxMDA3NDAwMEJERDVDQTM4M0RCMkE4OTdFQzMwQkFBN0REQjI5RTRCRjIKLToxMDA3NTAwMEMzREM3RkZDNDE1NkZDQUI2MUUyRUYxOERENEJDODM0RDMKLToxMDA3NjAwMEVEQTRFNjAzRURBRUEyNzYyQUI0MEI5RDdDQkI5MTlGNkYKLToxMDA3NzAwMEU2RUZEN0M1RjRCOEU1MUUzNDkzNUZDNzI3OTIwQ0VGQjgKLToxMDA3ODAwMDk5RjE1NzMwNEQ4MkY1OEY4NENDN0Q0MjRFMDdCNzA1RTUKLToxMDA3OTAwMENENzI5MjM2QzlFMzY1REQzQzJGNUYzN0U5ODRDQjE1MTYKLToxMDA3QTAwMDJERDA2QkM4OTU4QzZEQkY3OUZFMDVEMUQzQTFCRkIyOUEKLToxMDA3QjAwMDQ0MTRBRkQ0ODdGMjEzNzg4RjVBOEVDMkNCQzA2ODRGREYKLToxMDA3QzAwMDFDMjI3REExOUQyMUM1NDA0RkI1Q0Y3REUyNzAzMUUzNTQKLToxMDA3RDAwMDQ3QTVFOEY3RDVFNjNFODFGOTg0M0Q2NjE5MkZBNDI4QTAKLToxMDA3RTAwMDg3QjI3RkIwNkM3OEEzNTAyRTFEMkMyN0IxQkM0QkU4OEMKLToxMDA3RjAwMEM5RUQzN0NGN0RBMjNENDg3MkVDNjYyQjdGRDQwODNBMTUKLToxMDA4MDAwMEZDNjdEMzVGOEZERUFFRTEzOTgzNjQ1NDI1QkI2QUEzRjYKLToxMDA4MTAwMDgzMUU3RTE1NzYxM0ZFQTc2QTg5MTRGMkM1ODI5QjA2OTUKLToxMDA4MjAwMDU0M0NCQUUyMkQ4OTg0OTAxRjI2NDRERjRGRTJGRDc5QzMKLToxMDA4MzAwMDEzNjY4QjM0RDUzMjdFNEY0MzRGNzQwREYxNjUwRkFFODYKLToxMDA4NDAwMDBCRTM2OTA5MTg5RjFDNUE5RjU0RTZGNTI5NEZEMUZBMEEKLToxMDA4NTAwMEY4NzVGRTVEQzYzMkY5REIzQ0ZFMTYyOEU3RkNBQzc5ODQKLToxMDA4NjAwMDc4N0NFRjIxNDFBRjA3QzMzQzdFNzQ1MEM4RDdBQzY4OTkKLToxMDA4NzAwMDNCRjk1M0RFN0E5OUUyQzc1OUY1QjI0RDZGRDAyRkUwQkMKLToxMDA4ODAwMDUxN0RENTQ2NkYyRkU3MjRGNjg3MkQ3QTAxOTYyRjVFOEUKLToxMDA4OTAwMDBFRjNGMDlGMUVDOUMxRkQ5NzlBNzI3NTBERkFEQjNGRUEKLToxMDA4QTAwMDEyRjYxRkFDRDMwRjQ5NUU1NDQ2RkMwOTkyREJGMUM3MjgKLToxMDA4QjAwMDMzQUU5QkMwQ0I1OEVCRjY3QzVCMjI1NkU3MUE3OURENTIKLToxMDA4QzAwMDJFQkI5Q0U3RDMzQkRGQkYyOEU0RUFCMUE2M0Y3RjBGRjYKLToxMDA4RDAwMEQ5NjU4NTc3ODBFRUYzRUUyQTVCNEI3MTU4MzNFRUVBRUIKLToxMDA4RTAwMEQ5NUI5MzJFRDQ4N0YyMDFENzA1QzJCM0U5NUM4QTYzNDIKLToxMDA4RjAwMERDRTczRkZEQkU0NkU3NDQzRUY2NjREQzRGRkE4N0MwQzYKLToxMDA5MDAwMEYzOTFCNjI2NkEwNzBCNENCRkJGNzIwNTRFODVFN0IxNUYKLToxMDA5MTAwMEQ5Q0VGMTk5RTcxMUJFQzYzODMxMkM4QTJGRjkxMkNBMDcKLToxMDA5MjAwMEExQTU0RDBBREREQjcwMDVCM0U3NTM3Q0NEQ0NGQjZBOTYKLToxMDA5MzAwMDM1RjNFMzc4REU1NzgyNjVDRjQzMzY1QzkyNzRGQzdFRjQKLToxMDA5NDAwMDA0OEJDREMzNzNGNEMzN0U1NzQyRUM2RjdEREQ5MTM3Q0EKLToxMDA5NTAwMEYxRTVBNjI1QjEzQTUxRUYzREZBN0Y4QUYwQjc0OEU3QjUKLToxMDA5NjAwMEYyNzc1MThDREZERjczNjlGQ0YyNTg5RDY1M0ZGQTg1QTEKLToxMDA5NzAwMEJGMkIxOUYzMjYyRkNBMzJGMTExOEZENTREMUM4RThGNDQKLToxMDA5ODAwMEE1NzFDOUFERTk2M0UzRTU2NEYxQjA0NEFEOUM5N0E3RjcKLToxMDA5OTAwMDBGQzc4MzczRkU4MEIxQUQ4OEU3QUYwMzlFRDFFRTFDMTUKLToxMDA5QTAwMDA5MUY1MDhGRDZFMzg1Q0IxNUZBM0Q5OTc5NEE4MzBCMDEKLToxMDA5QjAwMEY3NDFBRTZDOTQ2ODhGMDlGMDFCMTY3OTcxMEQ3MzJEOTkKLToxMDA5QzAwMEYwM0FGMUU4QzRENzk1OEYzMjNBMzc3MEU1RUQyMThBRDUKLToxMDA5RDAwMEI3M0Q2N0UyMjc3RDFFRUQ1Rjk4RkIyNzk2NzkxRUU1MDAKLToxMDA5RTAwMEY5NUIxQUNENzNFMUNDQ0FDN0YxREU4NDQ0M0I0ODVCQTYKLToxMDA5RjAwMDNFNUZEQjNFRTA1MjE2Q0ZDMjczMEIzMEVGQTMyM0FDNTkKLToxMDBBMDAwMEJCNkQzRkQwMDk5RjEzN0U5RkQwMkJDRTdEMzFBNkE2MTQKLToxMDBBMTAwMDJCNTAwRjFBNTk2MjVGNzAwQThCODlGREIxMkM0QUM3OUYKLToxMDBBMjAwMDJEQ0IyQzZGOURGN0NEOTk3NDc2NDU2QkUzRTBCOEQ4NEMKLToxMDBBMzAwMEJGQzQxMjgzNjUwRENGNkIzREE5NkNCRDE0RkVCRTNBRDkKLToxMDBBNDAwMENBN0ZENzMwN0U3OTZFMDc3RTVCQzBDQ0RGMUIzMjY4RjEKLToxMDBBNTAwMEJGRTkwQTgxQkY0NkYwRjhGMEI3RDBDRTAzRTE4NEZCQ0UKLToxMDBBNjAwMDdBMEIwQzlGMUVCNENDRjNERDZFQTk1RTlDQTNDQTVBMTAKLToxMDBBNzAwMDM0MTlEQjI1MEYyODUzODZDM0JCM0FDQTdGQkYxMEU4NjEKLToxMDBBODAwMEYwN0QyQjFERkEyNkYyN0I2NTlENzgzMUYxNzU2NTk2MTgKLToxMDBBOTAwMEQ4Mzc5Q0MyQTY3QzE2QkNCQzg0OEE3MzFBRURENzkwNEEKLToxMDBBQTAwMDlEM0IyMDc5RTkzQ0JDQjk4RjAzN0Y0REJBNDE3NEI2QjgKLToxMDBBQjAwMDY2OTUwODNCODBDRkRCQkNCRjhCQjExNkIyRUYxNzhCQkUKLToxMDBBQzAwMEYzNThBRkI4NThEMzAzNDFCRUFGNTM2NTkxNUIzN0U0RDkKLToxMDBBRDAwMEQ0QjQ2NjU5RUM2RTczNUZDN0JDMkZDQUE0RTdBRjc5NzQKLToxMDBBRTAwMDgzNjk4NUQzQTFFRDNFQThBMTNDQTYwNEU1MzEyOTU5MkYKLToxMDBBRjAwMENCNzVDNDQ3MTc3RTNBOUJFQzlFRjVEOEJGMTJFMEZCM0UKLToxMDBCMDAwMDU1QkUyNzFGRUFCQTU0MUY1QUJGNEQ1NzNEREMzRDBENTUKLToxMDBCMTAwMENBRkVBRkZGM0U0OTlERUEzOTg0Qjc5MDU4QjcxQUIxNzMKLToxMDBCMjAwMDZFMjY3Q0ZFMEFGRURFQjI3RTNDN0U1NjJFRTI2NzYyQjgKLToxMDBCMzAwMDFENDdEMjEzRTYzQTlBRUI4Njc2MTREMkFGQUY1Q0ZEMkUKLToxMDBCNDAwMDI0RDNFRkYwQjE0M0Q1MDNDOEE3ODlBODRBMzk3NDA5NjMKLToxMDBCNTAwMEU5QjUwRUJBNjc4QkU5QkI3MEZGRkQ4QTU2OTdFREY3RDIKLToxMDBCNjAwMDk3MTI3ODRFMUZFQjZGRjQwOUJGMjQ0NkVEOTdFNkYzMUEKLToxMDBCNzAwMEY2QUM5Q0RCOEQ4Mzc0OUY4NEY2OTYzQzIwRTYwRDhGNEIKLToxMDBCODAwMEMzNzVFQjg3QjY5ODI3MDZGRDhENDM3RENGQkEyQ0UzNUUKLToxMDBCOTAwMDk0MEUxRjc3QzRGRTFDRUQ5NEMxN0Q5MzU4MkM2NjkxNzIKLToxMDBCQTAwMEQ3MEY2NTcxM0RGOTZFQjRCQTU3Q0UxMDdGMzE5RjRCQTgKLToxMDBCQjAwMEJEQjk0NUFBMjUzRkVDNjhCRUI3MjlEM0JEQTQ2NjdGNjEKLToxMDBCQzAwMDgzRjdDNjBEREE4OTZGM0Y3MUE4NjhDODRFRENFQzdBRUUKLToxMDBCRDAwMEMzNkUyN0IyMzdCRTkwOURGODcyRDYxQjRGQjQwMzNDNEMKLToxMDBCRTAwMDFGRkVEMTQzRkFFQUREN0EzRkFENDM2RUVCRjlFQ0JGNkQKLToxMDBCRjAwMEYwQkNBRDhBQkZFRDQ3RjYzREREN0JFMzZEMkRBNEY5N0EKLToxMDBDMDAwMDQ4MkE2MDBFN0YxRjRDOEY0OTg4RUZEN0YwOTI1RThDODgKLToxMDBDMTAwMERGRTkyQzFEMDJFMDcyRDU5ODg0RjhCQTU1RjhBMzQwOUMKLToxMDBDMjAwMDY3QTc1QkVGNjc3RDJEOEJEQjVCRTYzODFFMkY0QkUyMDIKLToxMDBDMzAwMDM5NjNCMzVGQTA4M0I1OTQ1N0RBQzA0ODhGOThGQkIwOEYKLToxMDBDNDAwMDI2M0Y5QkZEMEM2NEQ5RkRFMDkzRTBERjgxNENGQ0ZCNkIKLToxMDBDNTAwMEI0RENGMkE3RUZBMEZERkE5NDQyRjlBMDVGOERERTQwNkMKLToxMDBDNjAwMEVGMkY2QkJEOTI5RTk3Qjc1RTQzQ0Y0RkM0NzhERjkyNTQKLToxMDBDNzAwMDEyOUY2NEMxN0FGNTM1RkRGRUFCRDcwM0JEQUVEQUVCNEEKLToxMDBDODAwMEExNzM2NTJCQkVGNUQ3OUI5MTNGQkRBREIwRUVEOEVFRkQKLToxMDBDOTAwMEVCNTdERTNFMERCRUJCMjdDQTY0QkY3NjE1RjM3QzBFNTQKLToxMDBDQTAwMEY3NUE4OUM3RkI3NTc3M0RDNjUwRkUzRjM3OEI5QUE4MjgKLToxMDBDQjAwMDAwODAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDIKLToxMDBDQzAwMDAwMEJFNTdEMDk3QzU0RDVCOUY4Qjk3M0VGMkM0OTY2NjIKLToxMDBDRDAwMDI2OTMzRDIxMEIzNzg0MjU0OEMwNDkyMDIxMjhENjA5NzkKLToxMDBDRTAwMDVCNjMyNTEwQzQwNTI1QzA4NDQwMDgxMDkyODA1Njg3OTgKLToxMDBDRjAwMDRBNjU0MjAwQTM0NjhENzVDM0E1QkM4MTYyQUJBREZBQkYKLToxMDBEMDAwMDgyNTJBNTZEQTQxMzcxMDFBNTE4QUJCNUI4MjA0MTc4MjYKLToxMDBEMTAwMDRBREQxMjQxMUVBM0Q1RkFDRUY3OUQ3MzkyN0I2RjY2MTIKLToxMDBEMjAwMDQyNjg3REJGN0ZGRkJGMTc3RkVEQzdCOUU3RENCMzdDQUIKLToxMDBEMzAwMEZCRjlDRTc3RUVBQzcwOTZFNEJBMEEwOUY5MEVGRTJFRjYKLToxMDBENDAwMDI2NjQ4NTczMUE5NjQ5QUFEMzQ0OEEwODU5NjNBM0ZGNzcKLToxMDBENTAwMDU2MDkzOTczRjhFNkQ0QzU4OTg0NDREQkVENkVGQTg0MEMKLToxMDBENjAwMDU4MUFCM0VGMzREMTMyRDkyRjkzNDcyODkwNjNDOEEyRDEKLToxMDBENzAwMEYyM0MwQUFEMEMwRTcxMjk4NDI0MDEzNDIxOEMwNzQ4MDEKLToxMDBEODAwMEZCQjU4NTI0NDIxMkEwOUREQkRENjBBNzY1QzU0RjVDRTUKLToxMDBEOTAwMDAwNDMwQTNFQjc0ODUyNzk1QjVFREY3QzA0MTRGREQ5RkMKLToxMDBEQTAwMDQyMzIyMUUzNjEzQ0UzRkIxNjdDN0U4QjZBMjk4NUY3QTYKLToxMDBEQjAwMEU1MDQzNjBGRjE3RTBFN0YzRjg3Q0ZDNzE2OEE2MUYzQjkKLToxMDBEQzAwMDQ4MzBGNkUzNjRDRjY1RDJEMDY2RUYzRjhGRjVCMTUzN0MKLToxMDBERDAwMDQ3Qjk5MjAwNEY5RTVDODA4NDc0OTlDQjFEODQyQ0I0REIKLToxMDBERTAwMEJGNzI0ODFBNDdBMUNEMUU5NDI5MjQzRUYzQTc1REI5Q0UKLToxMDBERjAwMDA0RkZCRTFCMDZGRjVGRTFGQTcwMEMyMTEyRTk5MkJFRjAKLToxMDBFMDAwMEEzNDNDRkZBNDYwQTBFQTVGODhCMkE5MTAzMUJCMjI5RjkKLToxMDBFMTAwMDk0NUM2NTEzMjZEMDY2MjU2NjM3RTBCMzczNzhBMjYzQzkKLToxMDBFMjAwMDk4NjZGQzBCNUMxMkUyRUY3NUM1RTU4MDc5OTY0Rjk3RUEKLToxMDBFMzAwMENCMDM3OUQ4N0REMkU1RDBDRkY0QUFBMjVCRDk3MDM2QTYKLToxMDBFNDAwMDkyNENDODIyRjY2RkYyQkFCQUEzNzkxOEFERjdGQkNENkYKLToxMDBFNTAwMEVFMTE5NDhFOEI2Q0ZFMDBDQzZGMTE1MUZDNUQzNjZDRTQKLToxMDBFNjAwMDIyN0QyNzIxNTQ5NTIyRkUxRTlERUZBMjY5QjIyN0NBM0EKLToxMDBFNzAwMEE5NkI0N0JFQTNGMzI0MUJDOTBCQzM2OUZGMEIyNTNFMTcKLToxMDBFODAwMDgwOUY5NkU5N0JFRkYzRTI5MTY5QTdBRTgwNjU3NDExQ0MKLToxMDBFOTAwMDk3NjUxODZEQkZCMEFCNzIyNjE5ODc1NTc2RTBBN0E1ODgKLToxMDBFQTAwMEJDREQyMjlGRjk3ODZGQkZGNDdGOTU3RTdENzk3MTcxRUIKLToxMDBFQjAwMEZFNEI5NDBDMTQyRjgxRDIwOUMwNjdBMzREQzg2NzU1MEYKLToxMDBFQzAwMENERkE3NjRCREZCQkU0NkZDNDA5RkQyQUM3N0JGMTBENzkKLToxMDBFRDAwMEYzMjQ3NzMxM0E0RjZGNzJBOTE0NEZFN0JCNTQyQ0NGRUMKLToxMDBFRTAwMDlBNzY2QzFBQTFFNUQ5ODQ1QzAxRkRDRTlFMjZCQjgyNjAKLToxMDBFRjAwMEI0NzU4QkNGNDQzQzc0RTIwNzNENzI0MEEyNkIzQjk4QzMKLToxMDBGMDAwMERCQjVGRjYyQzA1QkIxNTk3RDA0RDY5QTRCNkU5RjlCRTcKLToxMDBGMTAwMDA4RjVFMzVEODBFNzcyNzg5Njg2RUQwOTgxNzZBOUI2REIKLToxMDBGMjAwMEMwMDhGQUFDRDM3M0NDNUVBNUUxQkI4M0M1Qzc0NjdCRDIKLToxMDBGMzAwMDI5QkRCNjlBNDg0RDM4N0UyMkE0MTFFOUZBQzI0RkEyQzMKLToxMDBGNDAwMEIxOUYyM0Y3NDgwMTJCOURGRjc0Rjk5QjNGNERBNEYzRkMKLToxMDBGNTAwMEE5RkFBOUQ5NkQ1NTcxNTkyNkEwRUI0QzM3OTM0NzQyOTAKLToxMDBGNjAwMDNDRjZFOTE0OUYwQjA5MkIxRjIzRTU0NTQxM0E3RTU1QkEKLToxMDBGNzAwMEZFRTExMjJCRURBNzZBOTM4NDcyMkFGMDRGRjFGRDgxRjYKLToxMDBGODAwMDE2NkZERTg2RjJEOEEwOEE3OEQ3M0RBNzlENTk4MDlGM0MKLToxMDBGOTAwMDI5OUUzRjg4ODBFNzBGQjQ3OEY2QkRGN0Y2RDgxNzM0NUUKLToxMDBGQTAwMEVENUE1QzhFNDRFMDczNTI0MDBBQkVBM0E4Mzk0RDI2MjgKLToxMDBGQjAwMEM3OEUyN0ZERDcyREUwOTlGNTg3QzZCRTMwODI5MDdCN0UKLToxMDBGQzAwMDg4RTc2RTJFNEY0QUY5NTg0QTI3ODU3OEMyRTk4MTUyNDAKLToxMDBGRDAwMDI3OTM4M0U5RjJBNzQ4OUY5M0M1QjIwQUY4M0FFOEZCNDIKLToxMDBGRTAwMEQ4NEUzOThDMUNGQzQ2MkUwNTNDMTMwRkVENkM1MkRGOUQKLToxMDBGRjAwMDdCOEZCOTJDNDhGRkFEMTZFMjAxM0M2RjFENjIwQjM0QUMKLToxMDEwMDAwMEQyQUUzQTdFNzI1RTRBMTdEMjQ3QkQ3RjMyRDBGMTE1MUEKLToxMDEwMTAwMDMzNzk0NDhEM0M1Rjg3NEYyNkMzMjk2Mzk2RjkyNDg0MzYKLToxMDEwMjAwMDgyN0U0MzdENTE0NDE5REZENzZFMjgwOTNGRkZERjgzNUQKLToxMDEwMzAwMDFDRDM3OTI0QUQyMzI2OTU4RTFCRTcyNzlFNDAxOEJFMkUKLToxMDEwNDAwMDEwRUQ1NkQ5N0E2NjI4MDREQjA3RTNFOEZDRUE1NDUzMkUKLToxMDEwNTAwMDQwQTJFQkNEOTcxODNGREJDQzBEOUU3NERBNTQ2OTlGMEMKLToxMDEwNjAwMEUzNEYyNzMwMEYxOUU3QTFEMkY5Mjk3NDdFRDlCRTE4QjIKLToxMDEwNzAwMDJDMEZGMzI1MjBDQ0YxQzUyMTFDRUU0QkM3RkExMUJFNzUKLToxMDEwODAwMDFDODQyMzdERDlGODdDOTQ2RjBDOTY3MzdERTMxMThFQkMKLToxMDEwOTAwMEY2RTUyMzNDQ0Y3NzIxQzIzMUJFQTlEODJFQ0Y1NzgyQTcKLToxMDEwQTAwMDcwQUNFRjUyN0MzRUNFMzcxN0UxRjlCRTM5MDhEREJFOTkKLToxMDEwQjAwMEY5NTg5RkVGQUI0MjU4RTBBQkM0RTdFMzdEMkJCMTNDNUUKLToxMDEwQzAwMEMxNzcyRDk2MEI3REFCMTExNkY5NkU0NDM4RDFENzg0QkMKLToxMDEwRDAwMEIwRDhENzg4RUQyNkY5NkVDM0YyMDVCRUJCMTE1RUU4MjUKLToxMDEwRTAwMEJCMEJFMTY0REY0MzU4MEYwQTA4RjAxMENERTVGMTM2ODEKLToxMDEwRjAwMDc1ODk4QjRBMEE3MEI4MEE3QzFDNDlFRUJFRTJGNkE4RDQKLToxMDExMDAwMEQyRTUzOTBBRjY0RUI0QjM5ODg4NTdEQjVFQjQzQkNEQ0UKLToxMDExMTAwMDYxMUNEMDM1NEM3RjNENUMzRjdGRUVGRUUwQkU1MUE0QUMKLToxMDExMjAwMDhGNkVDREE5OERFNTQ0RUVBMzk3NzU1NzQ5MzA5REZFOEUKLToxMDExMzAwMEIzNkVGNzFDMDI3QTgxRTQyNkVBRjhCNEJGN0U2MEVCNTYKLToxMDExNDAwMEVCRTJGQTZCQUJEMkU5OTE4MTdGMUI4OERCNEYxRjk1RjUKLToxMDExNTAwMDRENzg1RDgyN0VCNkE5NEE2OTIwMENCRjhEOEUzM0UzM0YKLToxMDExNjAwMDdCRTdCQkJDMjQ4RUNFMkYyNkZCRjgwQkEwNEY2NkZCODMKLToxMDExNzAwMDVEN0Y5QTAyRkM5Mjk3RjhDQTE0REFERkQwOEQyNjE4QTgKLToxMDExODAwMDgxQUExMjU3QzcxNEFBNzdENDY5MDRGNUUyMzYyQTcyRTUKLToxMDExOTAwMEIwREU2REQxN0E3QjlBMURDN0VDMjgyMTZERkI4NkExNEMKLToxMDExQTAwMDNDMEQyRjYwRjZBN0VCMTI5MDJGQ0I0Rjg2OTE1QkIzQ0YKLToxMDExQjAwMDQxREU4MjkyNDJGQkYzQUYyMUU0MTE2MTMzQTBGREU2RjAKLToxMDExQzAwMEM1QkY4NEZBQkVGRTJDNEM4RTlBQzlGMzM2M0E5MUVDMTgKLToxMDExRDAwMDU2NzU0QTE0ODUzOTVCM0NDRjQ3RDE1NzQ2MDRCQzUzRkEKLToxMDExRTAwMEEyNjk3OUQ0QTNGRUU3MDE4RTZFMEI0Qzg5QTE3MENDNjUKLToxMDExRjAwMEVFRTBGM0Q0OUM5MkIxQzFBRTI5NzY1QTNFN0YxRkQ5NUUKLToxMDEyMDAwMDBCNjhDREVGNTRBNzNBNjg3OUZDMjFDRjVFQ0EwNkE0REIKLToxMDEyMTAwMEIwQ0IzQkQ1QTlDMjdDMDI0RDRFM0E5RkFERUYxMzc3QzAKLToxMDEyMjAwMDIzMkQxNzdGREEyQUM3MTIwREZEMkRDNEJCNTM0MzE3OTgKLToxMDEyMzAwMEM3ODRDRTY5MDlGNDlGMTlEN0I5RjI2NTc4NUZFOThBNDYKLToxMDEyNDAwMDhBQ0JFQjRGOUY2REIwNkU1ODI3QjUyMzhGRDA3NTY1NTUKLToxMDEyNTAwMDc4ODI5MjRCQzMyNzY1NzE5MkEwNDM3RTFDRDhBMTc1RkEKLToxMDEyNjAwMDNEMEFBQzczREJDNjc4MDdEMjJGREE1NTAyNDNGNjRDNDEKLToxMDEyNzAwMDI3QUVFRDJBRjBCMTgyNzhCMjZDMUE4NkYyMkVGODhFODMKLToxMDEyODAwMEUyNzdGNDFDODcxNjZGOTJEMDZCMzU2RDc5OTFGMTVCMjQKLToxMDEyOTAwMEY2NkY4NkRGRjczODNGNDdDMkFGMEQ3ODY1RDJEOUU1RTQKLToxMDEyQTAwMDc4NjE1Q0FGMUM1RjAzNzg4REQ0QUUyOThFQzlBNzExMUQKLToxMDEyQjAwMENGREI0QzY0MUZCNTU1NzQ1Q0NBQTc0Q0FFODg5RjM2MTMKLToxMDEyQzAwMEJEODlGM0Y3RDlGMEVBRkIzN0MzRUIxNTcxMDNFMzk1NUEKLToxMDEyRDAwMEE4ODlBODI3MjlCRjhFMjYzOTkxRjUwREY0MTdDRTdFNEYKLToxMDEyRTAwMEREQ0VGOTREQTNFNzJDRTAyRjM2QkJBODlFQ0I4OUFDMTEKLToxMDEyRjAwMEU3QUU4RTNCOEJGRUUyN0FDNkMyRjVCODE4RUY0MTNFRjAKLToxMDEzMDAwMERFMkJDRUYyMkRBMEJGRUM5QjRDN0U5MEIzMTJFMjQwQzAKLToxMDEzMTAwMEI5MjBBOTg5OUM0RjVDRDFDMDI3MzM2NTU3MDlFODFCQzgKLToxMDEzMjAwMDMyOEFBMDFGMUQ5MzE3RjBDMzNFNjVBODVGMkQ5MEExQzAKLToxMDEzMzAwMDE5Mjg2NUMwRTM5MERDQzBBREI0RUI2Q0VBNjcyODk0NzMKLToxMDEzNDAwMEZFQjRBQjIwNDA5QkVBMzIyREE2RUI4RTE1RjJFNkFBNDYKLToxMDEzNTAwMDRDRDVDQTlCQjBGNzdERjIyOEY4MjI3RURCQUREOThDNDQKLToxMDEzNjAwMDVGRTc1MEZGRTU2RENFNkY3REZENDhEODZFRjNEQTIxNjMKLToxMDEzNzAwMERCNkVENUU4QzE2REE5QTk1ODE2RUQyM0YxRUYxOUMxQUYKLToxMDEzODAwMEJGMUIzNzEwMkZDOEM3RTRGMDdFQzMxQjcxMzJFN0RCRTkKLToxMDEzOTAwMDFFMEZGMEI5RkYwN0M0MDVGRTRDRENDNjBGNTAzRkM1NTkKLToxMDEzQTAwMDUxRkQyNEExN0U2MkUzNjdGOEEyN0ZFOUE3RTUzRkM3NkMKLToxMDEzQjAwMDI1NzM3REVFOEFCRUQyRjFGRjhFOUY3RjQ1MTEwQkYzMjAKLToxMDEzQzAwMDE4M0FEOUQ1MjFEM0ZBQTFENDBFQTkyMEE3OTNFOURDRTQKLToxMDEzRDAwMDI3MDBCRTJDNDg3Nzk1MzAzQUFBOTM0OTAwRkM1RThBRDQKLToxMDEzRTAwMEI3QTAwOUY0QUZDOTExMDAzQjYzQjFCNDdBNDA5RTg5M0MKLToxMDEzRjAwMDI1MEVEN0ZGOEFEMzdCMzQ2RTAwQjk3MEM1QThGOTQwOUIKLToxMDE0MDAwMEQ0OTM3MTVGOTVEQTI5RkY2RENFNzY0NTQzQjk5Qjk2RUIKLToxMDE0MTAwMDVCNTJFOUI4RjE1RDg0OTc5QkVEMjgzRkY0NkYwODUyNjkKLToxMDE0MjAwMDMxNDhGNzA2NjAxRjQ1RDk2MzgzRjZDMzdBQ0I3RTI4MUYKLToxMDE0MzAwMDZGMDU5RkU0MDJEQUZGNUQ2N0Y2NkRBNDg4OTkxQkU3RUMKLToxMDE0NDAwMEU5ODk2MzdDN0QxMkY4REEzMzhBNkU1MDczRkFGOEY5MTEKLToxMDE0NTAwMDZDRkU4MDkwQ0YzRTc5NzJFNTBCNzlBQUNDNDM3REY4ODMKLToxMDE0NjAwMDBERjQyRkZBOEJFNERGM0NDM0Y1QTcyMzdFNjBGRjQ2MjMKLToxMDE0NzAwMEYwRkQzOUZCMzc3Q0JFN0YwN0Y5MkY4QzJDRkY1MUZCMjkKLToxMDE0ODAwMERGRDhCMjgzOTZEN0E0Q0FFQTcxRUFERjM5ODZCQ0Q1MjEKLToxMDE0OTAwMEE5RDBCMjhERkE5QkM3NjhEOTY0RUI1NEEwNUQxOTk1QTkKLToxMDE0QTAwMDUwM0JDNUI3ODczQTc5QjBGRkIwNEQ2MDY1Rjg4M0ZEMTIKLToxMDE0QjAwMEM3Qzk1NkE5OTRFOTZCMzVGNkYyQjEwM0UxMzE4MEYzNUYKLToxMDE0QzAwMDU5OTM2QUMxRjFBMjQ2MEM4RjA1Qjk3MjcyQkUyMjhBODUKLToxMDE0RDAwMDE0MDAzQkVFMkM3NjI5OEJCMUJGMkU3MjE5RURFRjNDMzgKLToxMDE0RTAwMDhFMjcyMUQ3QTBCNzlFQ0EwM0JEMTRBRkMwN0VERDZBODgKLToxMDE0RjAwMDIzN0U0NzdDNUZGRjUwOEUyREU4RDM0Rjg0RUZFM0FFMTEKLToxMDE1MDAwMEU1N0JBNkQ2MERFRUQ4RTEyMEE3MDc1OTFDQTVGNTI2NDgKLToxMDE1MTAwMDI2OTc2NTE5MjRCMDAxRjQ4NDg3QTgyRURBM0U4QTg4QkMKLToxMDE1MjAwMDNGMkFCOEI0NkNFNkE1OTk1RjRCQzQ0M0U3N0ZFMDZCRjQKLToxMDE1MzAwMDE5QTEzNDlDMDQxRDc0QkY1N0U2OTY4MkIwMEZCNDk4NkQKLToxMDE1NDAwMDZDMDFCMEE1MjU0MzZDQzQwMjY1QTcyOTYwMDVGOUY4QjQKLToxMDE1NTAwMDQwQzI3NTVBMEE2MjAyQTBGQ0E2MEQyOThFRURBMkVCQ0MKLToxMDE1NjAwMDM4NzU2MEFGREQxQjg2RkU1Nzc5MkJEREQzQzY0N0M2QzUKLToxMDE1NzAwMDYzNkZCQjA1MkZCQTAwOEYwRkE5MUI1REUwNDdGQTUzQkQKLToxMDE1ODAwMDE1OEMzQkRDMDI0RDM1N0FGREVBNzg2NjM3QTkzRjM0OEQKLToxMDE1OTAwMDM3OUVDMjU5NEI3QTM2NUE4MERFRDk4OUU4MEY5MUUxREQKLToxMDE1QTAwMEYxQzhCNzY5QTlCQjZFMjkwMTkzNTVDQkZDRDMyMTI0OUYKLToxMDE1QjAwMEQwQThGNUFCMDQ3RkJEMUJFRjVEMTA0RkUxNDNEQzhFN0YKLToxMDE1QzAwMDUwQjFFQzFDMDlGMUFBRDE4OUYxRTA5Nzk2RDQwRjY5Q0EKLToxMDE1RDAwMDA3N0ZGNzgxRjVDNEJEQzQ4Q0ZBQTAxQ0RBN0IxMkRBNTAKLToxMDE1RTAwMEYyODE3RjFGNzJFRjdBRUM0RUMwQTc5NUVFOEI0MThGOTAKLToxMDE1RjAwMDhGM0Y2QzU3MjlCRDJBMEFGNzI2QzE3QUZFNjQ5OEJGMkYKLToxMDE2MDAwMDgwMTVCRTlCMTAyRkM2N0RGMEFBNzhCQTBGMDY4NTM4Q0MKLToxMDE2MTAwMDhFOEM4MzdERjAyOUY3RENEODIwRjI1NjQyNThGOUFFNDMKLToxMDE2MjAwMEYwREQ4OEZEODhGREYwN0JFNjYwQTYyQkFDMUNFQUYxQkUKLToxMDE2MzAwMDJEQzZBRjkwRDhCRTk2OTgyNUE2RkZCODFEQTVGQTY1MTEKLToxMDE2NDAwMDNERTA5N0JFODY3NkQzNjM5NUI2ODNCRDM5RTUxRUVGNDAKLToxMDE2NTAwMDA2QkIxRDQ5REY4OEY5NTAzQzhFMjg3Nzg0QTk5NzQ4M0UKLToxMDE2NjAwMDc5MzgzREYxNDAzQ0IzRDcxNTY2QkE1RkEwRjVEMkVBQjAKLToxMDE2NzAwMEMyMDY5ODU3ODVDMzJFMDFERjg5NzY5QkUyOTkzRDEzRjgKLToxMDE2ODAwMEZDMkNFMjU1NzJFQzM3ODU0MDdGODgwRjg2NUJGRjIyODkKLToxMDE2OTAwMEEyN0NBOThENDc2RDAyNTk0QjYyRjg3Mjg3RjE1NzIyREYKLToxMDE2QTAwMEUxRUI5MEI5QjUwQ0U2NzU2OEE5NEMxQTY5M0ZBN0JDODcKLToxMDE2QjAwMDEzNTM0ODk4RjcwNTdDMDdGODg2RDJBNTNFODE4REQ3NEQKLToxMDE2QzAwMDRCQ0ZFMUUxRjE3NzY4N0Q4RDdCOUFCOThGOUVGREVBODIKLToxMDE2RDAwMDJCQTNFNjgxRkQ5RTA3NzhENDhDRkIwQUM3REYzMTgxRkUKLToxMDE2RTAwMDFGQUI1Nzc1RDE3QUNCRTI3QjVENjQyQ0U4QTkyRjBCMzkKLToxMDE2RjAwMEZEMEU4ODhCRjVGQ0I2MTFFOEZENTMwN0M2MkJFNjU1QTkKLToxMDE3MDAwMDlFMkU2QzFDQUJDMTY3MzE0MTIzQjk2OEVGMDMyRTk1NDcKLToxMDE3MTAwMDNFOUYzNzYyNjM5MkRGMUUxOThGQzczODFFNkY4MzA3QTMKLToxMDE3MjAwMDkzMzAxRUYzMjJGMkNEMjBFMzMxMjQyRjFFRjk4REVDRUQKLToxMDE3MzAwMDhENzIwNzIxMUVGOTE3RDkwRDdFMDM4Q0VCNDVGREM5NkIKLToxMDE3NDAwMEUyQzlEN0I5RDhCQ0EyMEM3RURFM0M1RjlENEVCRkM0QjcKLToxMDE3NTAwMDg0MjQxMjQ4RDA5NDk1MzY4Q0NGQzY4NDE0N0M2RTk0MjEKLToxMDE3NjAwMEI3NUYxOUU0NERFMDNGMTIzRDA1RkU4RENGOUZFNzc4NEUKLToxMDE3NzAwMDNGNTRCOTVDODVCOEExMjUzQUJDMUY5Qzk2QzBFODI0QUIKLToxMDE3ODAwMENBNkZBREY3RUFDNkZCRUJCN0IyNkVCRjJDRTA3RjczNTIKLToxMDE3OTAwMEZBOUVGMjRFNEE4MTc4RDUzQzhCN0ZDNDYwRTQ1Q0UwQ0YKLToxMDE3QTAwMEU3QUQ2RkVFNzc0MUJGNTE1RjU5QzNDQTVGMzdCNzRGOUYKLToxMDE3QjAwMEQ0OUUzNjVGQTE2QUVDRTlENUYyNDZDMDdCOENDMkY1QjcKLToxMDE3QzAwMDlCNDFFRTNDNjA1NzI5M0UyRjA2QkI0QUE3MTg3MzE2NzMKLToxMDE3RDAwMEJCQkE4OEY4M0IyMDhFNkMxQzVGRDg1MzIzN0YwOUZCNzMKLToxMDE3RTAwMDZBQTQ5QkUwODM4NDA0MUUzN0U0RjQxMzcxQzM0OEYyQjcKLToxMDE3RjAwMDI1RTRFQTVERTBEQkMyRkVGODM3QzJBQjJDN0FCRjQ3RDYKLToxMDE4MDAwMEMwMTNCREY0ODgyMjdFQUExRkFGMkQ5MTAzNDQ0MkZFNkYKLToxMDE4MTAwMDQwRkI3OEU4NUUwOUZEQ0Q2MEE1MTVFRDcyNTU2NTE0QjUKLToxMDE4MjAwMEM2NjdBQkYyNjVBQ0FGQkE1RDQ2RkIxOUE0RkFBMTk2RTgKLToxMDE4MzAwMENFRTc0RjVDNEYxOEUzQjMyNTQ0NzI0RkQzQUM3QkQ2NTEKLToxMDE4NDAwMDg0Mjg1REY5RUFBNTc3RkY2OTNEQzQ5NzhCQ0QyQThDODIKLToxMDE4NTAwMDc3NTA2NUYxNjZCRjQ3NDZGRjk1RjZFMTBFNDI3Q0ZBODgKLToxMDE4NjAwMDlFOEJEQzYwQ0YwNDNGMUNGNEM4Mjg2RkZFMzc2NTM3QzEKLToxMDE4NzAwMDBDREJDOUUzRDEwNzlCRjMwMzMyRDA1OUYyRjY4RUEzRjgKLToxMDE4ODAwMEU2NDBGRjU1MkFEMEUxRURENDJEMkVEMDc3NTFERkRFOTIKLToxMDE4OTAwMDVGNUU4RUZCNDdBRjlBOEY3NjkzM0FBQjc0REU1MTVDRjYKLToxMDE4QTAwMDRFQTcwRTI5QkUxMkVDRjg5MTE2MzM4MUI4RDE5MTc1NkUKLToxMDE4QjAwMEE3NTA5RUJCRDYzN0I4QTc4REU4OEIyRjhCRjhCMDMxRDkKLToxMDE4QzAwMENFNkM4QzJGRjc4QjJCMUJFMkM5ODIxRjhDN0M3MjU1NDAKLToxMDE4RDAwMDA0RkUxMEZBMkExMjdGNTAzREI2MzBFMTlGRDA2MzQyRDkKLToxMDE4RTAwMDdGQkNDM0Q3Mzk3NUM4OTZEQjFCMjkxRTYyOTZDODg4OTIKLToxMDE4RjAwMDA3QzE5NzZGN0Y3M0YzQ0Y0MTBGNDc1MUZFRDgwMEZDQUMKLToxMDE5MDAwMEZDRURBRjVFODQ3RDA4NTkyRTg1OEQyM0ZGMDdFNzM3RjgKLToxMDE5MTAwMEJBNEY3NDRGQ0JFREEzQ0JENURFRTVCRDY1MTBGRkY5MTMKLToxMDE5MjAwMDM1QUI3QkNCQjA3RUEzNUQ4OUFDRDcwNkQ2NUJEOTA5M0UKLToxMDE5MzAwMDJDMEU2RUI0M0I0Njc5RjhCRUVEQ0VCQ0NBN0I3M0UxOEIKLToxMDE5NDAwMEZENzk5NTRCMDMwMDZGMTk2MkFCMDFGRDZCRDQxMzQ2MTMKLToxMDE5NTAwMDNCMjFFNjYzOUM2NzRDNDgyNjgxRjFEQTc5QUJEOEFFMkYKLToxMDE5NjAwMENGNEU1OEIwREU2NzczOEUwMzY3RkQ0QzE0ODM3RTcwRDQKLToxMDE5NzAwMDAyQzEyRjdEM0YyQUQwODRFMzM1OUM1RjhFRjM2Rjk4QTAKLToxMDE5ODAwMDA4RDA0N0RDNUQ3RTU4NUY2QTM0QzYwRjVBMzM1ODdCRjcKLToxMDE5OTAwMEY5OTI2OEU2OEY0Rjg4Qzc3NUNBQzIyMUZGMzIwRUNCMTUKLToxMDE5QTAwMDREN0MwREUzRTJCRDRGMDJCRjM1Nzk0QzUxNzBBRTMwMzYKLToxMDE5QjAwMEQ1QTFFQzg3OTA0QkVCMTQxM0IxOTIzRTNDMDlGRjlERUYKLToxMDE5QzAwMDQwNjQ4MEFFMTdFQjI0RDg3N0U2REIyQzM5RTg5RjNFRTUKLToxMDE5RDAwMDkzMDA3NEI4ODlFRTBCMjlCRjFGMzgyMEVGREE0Njk3QzEKLToxMDE5RTAwMDc4QzAzRDNFMzY5QzdGMkVFMDgyRDRCNUE4MTdBRUY0NzkKLToxMDE5RjAwMDU1MjEzQ0ZDRTNCRjY2ODFCQzVFMkY3OTNCNjA1RTlENTgKLToxMDFBMDAwMEYzQUE2RTJGQTRGM0E5REYyREUzQjlEMjgyRUJERjFFNzgKLToxMDFBMTAwMEM5RjY2OUZBRjM0OUQ5NjlDQjg1Mzg0QTkzMTRFRDA2QkEKLToxMDFBMjAwMDNEMjJGMEQ4RTFCMEEwN0U2OTNBQ0NGNDYwRDM1MTg5NzAKLToxMDFBMzAwMDk3RDkzRUUyMDU1RTdGRUEzRDA3RUUzMzA0REVFOTdBQTAKLToxMDFBNDAwMDNBNjEzRDlFQkJFMzcwM0Q2MjlGRjEyRkFDRTc1REU4REMKLToxMDFBNTAwMDJGRjI3QTMyNUNFODBGMDA1RkM5N0RGMzk3MUQwQUFFNjIKLToxMDFBNjAwMEFCOUI0NEJCNjFGRTNFMUUwRjIyRUY0NUExREYyQ0U4N0QKLToxMDFBNzAwMDVCQ0ZGOTRGRDBCNzhFRDNCN0JCRkRGNDFEMTdEMkY2QUQKLToxMDFBODAwMEFEOUU3ODNDNjU5MDMzMDlBRUI3RkJCRDE4RTQwRkIxNEQKLToxMDFBOTAwMDVFQ0EwN0REODBFRkJERURDQzRFQjRCRUVGNjBGODcyREMKLToxMDFBQTAwMDE0RTVDMkZDODQ3RkVENEE2MDdFQjI3MUREMTU3QzlGMzcKLToxMDFBQjAwMEZFNzUwMkQzNEJFMERGNDI5QzYyNzFGQzk0QUYxMzBBQzcKLToxMDFBQzAwMEMzQjRFNzdFMkRDNUYzQjc4MDk3MTIxN0Y5MzI0MEZBRjkKLToxMDFBRDAwMEYwMkNDNjExRTM4QUY3QTIxMkY1RjI1NUMxRTMwQUVGMjIKLToxMDFBRTAwMDk5QzkzQzhDRDNEMjcxMEIzNEYzNUIxQjVGMTI5NTk4NzAKLToxMDFBRjAwMEQ0N0ZEQzdGODE4RTg5ODkwM0YyQTU5RThFRjU4QUJEMTUKLToxMDFCMDAwMDU5OEEyNUJERkI2MjBDQTVBOUZERTVEQzI4Njc1MjdCM0YKLToxMDFCMTAwMEM3NTc3MDNFNkY5NEZGMzNBNjA2MjJEMTdFNkY5MEJERUIKLToxMDFCMjAwMDg3RTIyOTZDRjI5MjJFNkI0RTdGNzkzODlCMUVBMUY0Q0UKLToxMDFCMzAwMENFNEI0Q0VBQUY0RjA2NEJFNzg5ODlGREU4M0MzMTcxNEIKLToxMDFCNDAwMDAwM0EwRjhCMkY5RjA0RjVCMEZFRjQwMkRDRTc1RDA4MkUKLToxMDFCNTAwMDY1RDAxMzk2NjEzODFFRjI2NTRGMUMwOTZDQTc4RDEyNzMKLToxMDFCNjAwMDc4MUM0NUNDMDdFMjEyNTFGNEJEMUYyNTY2MjNGRDI1RTQKLToxMDFCNzAwMDg1RjhDREI0OUM5MEVCOTY0MEVGMEY4MjBGN0VBNDlEMkMKLToxMDFCODAwMERGRjdDMDA3NTcwQ0NDMDc0MUY0NEI1NjcxN0FBRjEyMDAKLToxMDFCOTAwMDc5MTZCQjA2Q0VCMzE4MDREREFBNjBEQzMzMjY3NzhGMzYKLToxMDFCQTAwMDM3RkJEQ0U5NTZENzlGNkU3NTAzRDNDREJCMUFFQTlCOTIKLToxMDFCQjAwMDJDRTQ0QkY0QzM4QjJCNTM2MUJDNTc5QzlFRTNCMUY0RDQKLToxMDFCQzAwMEY5OUU0NkFFNEZCMjI5REQ2OEZEOEI4OTMyRUFBQjlGQTQKLToxMDFCRDAwMDkxRjM1MDBGRkZDMDY0QzJGOTc3NTNGREJCM0QzQjFDMkUKLToxMDFCRTAwMERGRkI5NTc4RkFGRTk5Q0IwODlFQzdEMUY1RjkxOTVGMEUKLToxMDFCRjAwMEZBMjU3ODdFQzMyMjYyODJFN0E5NkEyMzMxOUQ4MzFFN0IKLToxMDFDMDAwMEJBOERFQjA5Q0QzQTZGNEIwQzYzOTczNTdBRTgwRUE4ODUKLToxMDFDMTAwMEE3RkM3ODFERjBBMzRENzUyOTAzRTlBMTA3Q0Y1RDBGM0YKLToxMDFDMjAwMDNERjgzREVCQTE0NzA2RTZCRjczRTZBQjI3QzNFOTAzRUEKLToxMDFDMzAwMEMxQzc2MjVGMTAyOTVGODhDQTIzNDk4RkVGM0YyRTIxRjkKLToxMDFDNDAwMDZFM0MwRjJCNzFEQTk4RERERDI5QTE5RDZEM0E5QUVGN0MKLToxMDFDNTAwMEM1QjJDMzg2NEE0MUQ4RTE5M0JCNThCRDNDMjVCQzNGQzEKLToxMDFDNjAwMEY4NkM2MjNDRjJFRkFBQjZENTZFNDU5NzA3RTI0NzdBNjgKLToxMDFDNzAwMERDRTkzOUU5MUE0RUY1RTIwQ0Q5OEVFQjRCMjg2M0YxMTkKLToxMDFDODAwMDQzQjE3RUFBNjc2NzRFNEZFNjcxNTNCQTlFODQ0Qzg2NzUKLToxMDFDOTAwMDg3MDRFQTBGQzAzOTlBOTNFRjBGNjI4QjE1OURERjJGRUYKLToxMDFDQTAwMEYwNzY4MzVDMkU0MURDM0IyRTkxNDBEQTBERjVFQkQ3Q0MKLToxMDFDQjAwMDhEODJGM0ZCMzg4RkJFN0QxMjY5Rjk0MkM2NDEwOENBOTYKLToxMDFDQzAwMDQzM0NCNURGMTBDNzRBMjgzNUI0ODM3REM4Mzg2OEFGQjgKLToxMDFDRDAwMDc5OUVERDdGM0Y3MTM0OTFFRjI3MkMyNDE1RUMwQTkxMUEKLToxMDFDRTAwMDJCMDZFNDFCQ0Q3RUUyNDRFMjIwRjYxMzlGMjc4QUYzMDUKLToxMDFDRjAwMDcxQkRGRDZBOEIyMjYxRTMwMkVCOTJCOERGRkQ2NTFDQ0EKLToxMDFEMDAwMEZBQkYzMkI3NUJEM0JBQjIzMTNGNjU4RDQzQzU3ODgxMzQKLToxMDFEMTAwMDJDQkI2RDMzQjNGQkJGMUZFNzMxMTE1NUIzQkU4NEQyNkIKLToxMDFEMjAwMDY4QTI2QUY2MEY0OUU1RjFCQTcyQ0FCQzIxQkFGNjY5MkYKLToxMDFEMzAwMERFNjFCQUZBRjQ5QUYzNzRGNTk5MEQwNUJBRjI1MERGNDAKLToxMDFENDAwMDA1QkFGNkQ5NTQwMEI0RTU5Q0U2MUZFOURBOEY2OEJEMDAKLToxMDFENTAwMDRDNTcxRUI1RTUxQTVERkJEMTgxQzVCQUZBMzE4RkFFN0QKLToxMDFENjAwMEQwRDU4RjZENUJBMzJCOUZCRkZCMjdCQUY2NEQzQ0VFMDIKLToxMDFENzAwMDZCQzRDQkM1NDk0QzNGMzcyOTRDRUYzNERBMEIzMDFFQ0UKLToxMDFEODAwMEQ5NjREN0M3MjNEMzM4RkU0QjYyMjdFNzQyMUNCQ0U5OEUKLToxMDFEOTAwMDgzRkM1Q0MwRjcwQkNFMEIzMDJFMUU4OTJGOEM3QTJDNjcKLToxMDFEQTAwMDkyRkUzNDNFMkZFNkUzN0RGRUJDQzUwNDcyNTBCNzk3MjkKLToxMDFEQjAwMENBRUJGOUI0NkM3RjY3MzNBQ0E5Mzk4RjlEQTcyQTg0MkQKLToxMDFEQzAwMEU1Rjc4OEYzMTVGMTdFRUZGOThBRTI2NkYxNTVBNzlERjQKLToxMDFERDAwMERDMUE4NjJGRDI5MkY0RUYwOTNEMjlGODI4MTJERTA0OEUKLToxMDFERTAwMDNGOUUwRDZGOUVFRjA5NkZFRjQ5NjQ5RTc2MUUxNUZDQjYKLToxMDFERjAwMDNDREJGOERFREEyNDEzM0YwRkY2NUU5M0M0RkM5RDA5NEEKLToxMDFFMDAwMEQxRTg4OUJCNTAxRUNGNTVGRjhCNzk1MEZEQkYzNDA5RjcKLToxMDFFMTAwMEY3MTM2RjJDQjgwMUY0RkYyRUFCMUJGNjY0OUZDRjdCM0EKLToxMDFFMjAwMEEzRkE3RTE1REE1N0IzRjYyNjc3MkVEMDI1NTJGQzdCMUYKLToxMDFFMzAwMDZENTJCRkY4NzcwRDhCN0Y0N0VCRjBCNjRDQzhCQjIxRDYKLToxMDFFNDAwMDBFRDdFNEZDMUFFM0RGNEQxNjc3RUU2MEUyREZDQkEwOUQKLToxMDFFNTAwMDBGMzgzRkU0NzRFRUE1MkY4RjlGNDdEQTA3RjkwOEQ5QjIKLToxMDFFNjAwMDJGQzFCRUM3QUVBODcwQ0U3NUI2N0QyREREQ0ZFNkMyNDAKLToxMDFFNzAwMDc5NkEyQkVDOUIzNEZCMUNCQUJGRTVGQjlCMjhCNDBCQTcKLToxMDFFODAwMEQ0RUVERDkxODRFQjIyRkI1NUZBRkMwQ0RERjdERUFBRTMKLToxMDFFOTAwMDQyNTFEODNGOEZDRTJGQjcxMkI3Q0QyMjIzM0RFRkMxOEQKLToxMDFFQTAwMEY3NkUyMkQ3NDVDOTEwMkYwQjFFOTg5Q0ZEMkZEOUYzMzIKLToxMDFFQjAwMEZGNDgxQTcwN0Y2OEI0QUI2NzNEOTc0M0JCNTM0NkQ3NjIKLToxMDFFQzAwMEJGMjE4Q0RGNjUzQzg3RUJGNUJGQzE0RjkzRjAzQzBFMjMKLToxMDFFRDAwMEYxQjQ4OURBNDUzODhGRUI0ODYyRjY3OUQzNjFCNjRGQjEKLToxMDFFRTAwMERFNzQ3NDRFMkFDQTRENTJEMTgwRTc3MDgzRDUzNzFERjcKLToxMDFFRjAwMDQ5RkRGQ0I1OEVBNDAxRkMzNUIxRkUzNTdDREYzQjVEQjAKLToxMDFGMDAwMENFNkI4Mzc4RTNDOTkwMDVGMTI2MTM5NjFGNTlCRkNGOTYKLToxMDFGMTAwMDRDMDI0ODRGOTY2NzJDRTg2ODBFNkRFRTA0RkI2QzI2NjkKLToxMDFGMjAwMEM2QkM2MjM1MTZENjZEREUyN0EzN0UyMjg5QUNERTRGOTUKLToxMDFGMzAwMDZDOERFMEU3QzQxNkVCRUQ1NjlDNDc2RkI3MTI0QUUzOTEKLToxMDFGNDAwMDBENzY0QzZGQjc1MkU2RTlFRDU2OUE1NzZGQjdEMjZCRTQKLToxMDFGNTAwMDBBMEM3NjRDNkZCNzg2RkFBNjE4RUM5OERFNkVFNTM0NUMKLToxMDFGNjAwMDVGNjZCMDYzN0FCQjM1NkE4QkRFNkU4RDBFRThFREQ2QTgKLToxMDFGNzAwMDk4NDdENzE4RUM5OERFNkU5REJGN0I4M0FFM0UzRjc4QzYKLToxMDFGODAwMEFCQUU3RUZDQkU5RkU5Q0E4NTlEMEZFQURBMkZEQkZGNzAKLToxMDFGOTAwMDM0RTZERjRDM0NCNDVERDc2RTUyRDdBRjc1RUQyOEMyNDYKLToxMDFGQTAwMDNCMjE0RjdCMDk5Mjg0OTAwQjRGM0NBNUFCNUZDMkZENTgKLToxMDFGQjAwMEI0OEI3QTdFQUZFQjg3QjRCMjdDNkIzRkZEMEZFOEY1NTQKLToxMDFGQzAwMDExRjE1QUMwMzk1MTQ4Q0Y0QkU5OTRBRTc1MDFDOTFEODIKLToxMDFGRDAwMEE0Q0Q5NkVGREU1OTA0RjNGOEU0RkQ0QkY2NDEzRkNCNzgKLToxMDFGRTAwMEI2RThGM0I0OTcwN0Y0RTU3QTMyMkMxNkY0NDMzREU1RUUKLToxMDFGRjAwMDhCMDBFNTkzOTU5MEJGQUREMTZCMkI0OTgzMTNGMzIxRjMKLToxMDIwMDAwMDA2Qzk2N0NCRjZDRjI1OThGN0U5Rjc3NDQyN0VCQTU4MzAKLToxMDIwMTAwMEE3RTAzNzBGRTczNzMxM0ZCMURFOTVENEVGMEJBQTdENEMKLToxMDIwMjAwMEVCRjREMEZGRDgzRUIyQ0IwMjdDNUJCRDVCMjIwRjRBMDMKLToxMDIwMzAwMEZERDc1M0QzN0VEN0U2RjQzMEVCMzJBRUMzRTg3N0JBQTAKLToxMDIwNDAwMDkzRjVFNzU0RDM2NTNCQzZGNTRGQkUyOUJCNTk3QzUwODkKLToxMDIwNTAwMDJGODc2QkY2QjM3OEZFOUEyNzI0OENBRjE5RjEyMUZDRjkKLToxMDIwNjAwMEQyNDg3ODkxRkQ2QzlGNTA5RjQ4MDIwMThERkNBOTFDQkQKLToxMDIwNzAwMDFGRDY1NEJERkM5RDg0N0ZDMDdDMUU5NjAzOTAxNzE0MTAKLToxMDIwODAwMEE1NDYxQkY5QUQyODQ4RkFFMzM5MjY1NzJGQTc0NjNDNDkKLToxMDIwOTAwMDNCREM0M0MyRjI5NTRBRkY4Mzc5NTQxMzc2MkU2NUU0MDQKLToxMDIwQTAwMDJCMjNERUVCNzZERjY1MDFCRDc4QUU3ODVGNjRDMEJCQzUKLToxMDIwQjAwMDM4M0YyOEExQUJCNTg0Qzk4MzEzNzhBNUZCRjJBNUM5MjUKLToxMDIwQzAwMDQ5OTFGN0FEQUI5MzI1RkRGOUYyRDlGN0FEQUI5M0JGQ0QKLToxMDIwRDAwMERGQjhDOUJBRTQwMUY2QURERDEwMkZBMzdFQTUzMTVFRUQKLToxMDIwRTAwMEQ2M0YzRUI2RjcyQkM5ODk3MTY4MTZGRkYyQkE2RDJDNDAKLToxMDIwRjAwMDVGQzU2MDI3NzM1Mzc1NzZCMjc3REZGQjgxMTQ2ODAyODIKLToxMDIxMDAwMDM5NzY3QTZFODNGOUQ0M0EzRDJEMDA3RkU0RjREQ0FFNjMKLToxMDIxMTAwMDVENkYxM0M1MEJERUNGQTE3NjZBNjcxOEZGRjBFNTY0MkIKLToxMDIxMjAwMEUxMTc5NTYzNUM2NDUzMDk2QjZGNkNCNzMzNTk0MUJDMUQKLToxMDIxMzAwMDc3MjQxNUE1QTJERjc5MzQ5RkQ5NEY0N0QxODA3RUU3NTgKLToxMDIxNDAwMDlERkMzQ0U3MzYzODJGMUNEMTk3Qzc3MzNCM0Y1N0ExMDYKLToxMDIxNTAwMDYyRTcwMUJBNkQzMjk3QTc2QUYzN0NFRjQ5OEVDM0YxNEIKLToxMDIxNjAwMDlDOTM5RUVBODQ3Q0U3MjY5N0M5MjVBOUUwM0Y5QkYwRDMKLToxMDIxNzAwMDVDNzRBM0M3NUVCQTJCOEZCRDk3QTg3QjhGREQzQjkyQTMKLToxMDIxODAwMDAxREZFMENGREI5NUFGQjU3Q0ZCMzJDNTI1RjQxQjY5RTEKLToxMDIxOTAwMDlEMkYyNzMzN0ZENzRDM0MzNkQwQkJFMjNDRDdGQzQxNDgKLToxMDIxQTAwMEJFMERGNEFEMjJCOTVERTFGMjM4Q0QzQzRGNkEwQTNGNzUKLToxMDIxQjAwMENGOTU1REVDN0NCNzU3Q0VDRjkyMjc1NUU3RjRCRTk0MTAKLToxMDIxQzAwMEFDRjExN0M0QjlFRTk1NEVDRkNCNDA0RjlGRTJCNzgyMkEKLToxMDIxRDAwMDdGRTlCMzg1REZGRkZFODlEM0YxNTZCRTNFRUE2ODIyNzAKLToxMDIxRTAwMDFGRTFGOEYyQTBFMjI3NkYyNTYzNUNDRThGRjk4QTM3RjIKLToxMDIxRjAwMEM4RUUxMzEwOUYxQjZDQkNFQTY4NzJCRkI4REM1MTJEOEYKLToxMDIyMDAwMDFGMUFFNThGRkE5RkM3NjNFMTdDMjI3Njg4ODJEQjA5N0IKLToxMDIyMTAwMEM1OUQwQkZDREYwQ0ZGOUU4NEYxRDUxM0YwN0VCRkZDNDcKLToxMDIyMjAwMDUzMzU5RUU3RDNBQTAzRTZEMzhBN0VFNkM2NzlCQTkzRUUKLToxMDIyMzAwMDU5REVERjE3MDAzREEzNUMxQjY1NEQzRkNFQjNGNDQzNzEKLToxMDIyNDAwMEYxOTREQjYwMUYxNEZFRkVDMUYwRTczRUMxODIwOUU3OTYKLToxMDIyNTAwMDE2RDc4QzRBRTlFNzNGNDZBNTBDRTAzRjlFMzkzQzJBNTkKLToxMDIyNjAwMDE2Q0U5MzQ1RENDQUQ4Q0VFNjRCQzhEMERFOEY2OThFMzkKLToxMDIyNzAwMEQzOEZCRkI5ODA5NTEzRjlCOENCNjMxOURGRTdGMkIyRkEKLToxMDIyODAwMEM4MDMxNDcxNkJEQjRDRTI4MUZCMEUzRkUzRjlEOUEyNkEKLToxMDIyOTAwMDlGREMxNDA3QjY4RjhCOUY5MjlCNTIwOEU3NjkxMkVFNjIKLToxMDIyQTAwMDJCMzdDNzQ5QkFGREU1RjFFNDkyNUM1OENGMzBERTdGQTkKLToxMDIyQjAwMDZFMEFFM0QzNkRDMzU4N0NDNjk4MDdGOTE5NkZGRjU5QUUKLToxMDIyQzAwMEYyMTQ4NDk0NjBBMzAxOUYxNjU5MEU4QkM3QjEyOTZDMzgKLToxMDIyRDAwMEZFQzc2MzU5QkYyMjdFNTY3NTJGQkJERjI1RTI2NjIyRkIKLToxMDIyRTAwMDBFNDgzRDgzQjc2MkE4NUUzOUQ2NjIyNjEwRDc1QTJBQjcKLToxMDIyRjAwMERCMzcwMzFGRjZERTlGRTNFN0VBMkVGQTFGRDhDQkNBQ0YKLToxMDIzMDAwMEJDNzJDQzNGRkE1N0VGNkYwMTNFNjNFMkZCREJDQkU5RDcKLToxMDIzMTAwMDI5QkRGNkQyN0Q4RUY3Qjg2NjMyRkMwQ0VFQkNCRDJCMjMKLToxMDIzMjAwMDlBRjE2RDhGQzM4RUYxNkM2M0JCNkE0RTlGMTYxRUE3MjgKLToxMDIzMzAwMDAwN0QwRDc2MjM1RTI2MERFMUVDNDczNUM3RkI5OUMzODIKLToxMDIzNDAwMDU2MEZGQTMxQTVEMTk4Q0YyMUNFM0YxNENBOUZCMUYxRDMKLToxMDIzNTAwMDk4MDZFRTA3NjhGM0E1NjdDMDdEQTJERUYzMEY5NUUwNEYKLToxMDIzNjAwMDdCMDk3NjNCQkVBN0E4MjRFODgwMkJBMThBNUI4MkZDNzAKLToxMDIzNzAwMEIyMkU0QkQ3QTYxNDk4RUY0NTkyMUJFRTBGQTQ1NEI4N0IKLToxMDIzODAwMDNBNTIxMkUxMUVBMThBNjJCNjM5OUIzODhCQTEzRURGMTgKLToxMDIzOTAwMDg0RjU3MTk3QkIzNjlCMjFFRjVBMjU3MDkyNERDQzc0MTIKLToxMDIzQTAwMDFDMDcxREU3OEU5NDZDNUM3RjhCN0Y2RTQ3MEE2RDE3NTAKLToxMDIzQjAwMEFCRjY5MDYxNzlBMDQ3NUMzMzUyNDE4RUU3QjFGQzc1NzIKLToxMDIzQzAwMEUzRkFENkE3MzBCQ0Q5MzdEMTdEMDNFMDQzMEQ5RjA3OTAKLToxMDIzRDAwMEJFM0U4NUU1MDE1MTNENzMxM0QwQTM0NDI1QkJEOEJENTYKLToxMDIzRTAwMDI4OTY4NzBBNjlENjk4MkZFODY2RjlEMjMxOTA2Rjk0QkIKLToxMDIzRjAwMEMzRjQwQ0Q0REYxNTM3NzUyM0M4OEY5MDJGOTlFMzFCRDYKLToxMDI0MDAwMEY4NUU5QjBGN0YwN0M3Nzc4MjQxM0UwNTNFRTkwMDhENEUKLToxMDI0MTAwMDkwMEZBMUNDMjRDOEQ3QjMyQkMyQ0ZGNzMxNEVFNzdBQTcKLToxMDI0MjAwMDY3RjkzRDMwRUVFQ0M5OEQ5OEU3NEVCRUY5RUUzQkI5NDkKLToxMDI0MzAwMDA4OUM1RTI2MjdGNDdEMDI3MTg4QTg0NEE2N0ZBMzU0RDkKLToxMDI0NDAwMDE1RjUzMTcxNDk5ODY3NkE1M0REMzU1MDhFQjI1RkUwRkEKLToxMDI0NTAwMDkyQzFFRTU5Rjk3OUUxMTIxMzUxQThCQzRERTVGRDc4MEUKLToxMDI0NjAwMEU2MTFFOUMzNUMxNjY3NjVGQTU1MjExRjBBQjk5MDM5NzAKLToxMDI0NzAwMDcyOEFDMDdFQjIzRkVBMTdCNUM0RDBGNTRDQjUxRkMwMTIKLToxMDI0ODAwMDczQzRBOEUxMEQyNTcwQUZFMEM1NDVBQzhGOUY0NUM4NkEKLToxMDI0OTAwMERCM0ZDRUY1NThCQ0VDNEQzNTgxNEY0RjhFQkRGQTQyMzcKLToxMDI0QTAwMDA2RDJGOTNDQjhBMTc5REJBNkMzQUZFRUJCODhDN0NGOTMKLToxMDI0QjAwMDIxNUZEQzdGRjg1NTRGREUzRjlGNUZGRUQyRkQ4NzVGRDcKLToxMDI0QzAwMDg1RkNGMjdGOUVGRkREMTJFOEYxRTM5NEIxNjBERTQ2MDkKLToxMDI0RDAwMEZFMTdGQUVDOTBFQzNENzQyM0M1RkYxNTk0QTk3QzA1MUEKLToxMDI0RTAwMDAwMTU1MjgxRjQ2NkY5NDM5NzczM0NGQkJGQTY3OEI2OUEKLToxMDI0RjAwMEY1RTFGOThBRjZGRDg4QkY0MzY2M0E2RjNBQkU3OTBBN0MKLToxMDI1MDAwMDQzQjVGOTI3QjEzQzFGMjM4MEZENUY2OTZCOUQwRUZFMkIKLToxMDI1MTAwMDREQjdBNTY3MUM4Q0RCRkREQzVGMzNGRDU0OUYxQ0ZFQjMKLToxMDI1MjAwMEU5MjkwN0ExRkM3NzQ0RTk3MUMwRjMxM0VCREU3MDc4NjkKLToxMDI1MzAwMEU4N0EwRkFGOTNGMUZFMUJERTRCRDZFNDAzOURFMDdDRkYKLToxMDI1NDAwMDM1M0RCNUZDMDhGMEQ1QTJGNURGMTY2OUZENkNFMjRCMTAKLToxMDI1NTAwMDQyQkJCQjNDMjBDMzFEREY1RUZEQjdGMkQxMThDRTc0NzkKLToxMDI1NjAwMEFDQkNBQTJENDE1NzE2RjY3ODk1MzVGQzNERjFDQzU0RkMKLToxMDI1NzAwMDQ2RjdFNThGNkZCMzQwM0VGQ0Y0NTRFRjE3MzBGRTA5ODkKLToxMDI1ODAwMDlFNkY3MDYyOTcwM0Y3NTc2MjNFOEIxRkNGQjdDMDdFNzYKLToxMDI1OTAwMEYyNDhCQjk1MDQ4MUVGOTU0RTMzQzEzODk1NjdBNjQ0NDgKLToxMDI1QTAwMEY5RDZDQkY5RDAzOENGOTdGNkM0NjA3RjRCRUY5NTMxOTEKLToxMDI1QjAwMDhFNTQ0OUM3RjI1MUJDN0FEQjk3QjNGREFENjExRDRCMTgKLToxMDI1QzAwMDBGQUIzMzQwNUYyREJENDUyMjdFOTVCNTVGNDdFOUU2RjEKLToxMDI1RDAwMEY1REQ4Q0U3MkJDNjc1MUFFRENCNjlCMkNFMDI3QUM0NTUKLToxMDI1RTAwMDY4NUY5NjEwNzdGMzY0QjA1QkFERkFFN0NCREE2RkMzNDAKLToxMDI1RjAwMDdFOTc5REU1M0MyNjIxOTVEQjlCMjIzMkYxQkIxQzg4MTIKLToxMDI2MDAwMDMzMEZDMzdDQzE0OEY2RTZDNDdBMjY5NDFGQUZCNzIxQzYKLToxMDI2MTAwMEZDNzRCRDBCRTExMTUwQTYxNENGMkI3Nzc3QkM5NDhFQzAKLToxMDI2MjAwMDYyREQ1OTA0NzYyODZBRkY1NERCMzVBNENGN0Y1NkI2QTUKLToxMDI2MzAwMENEMEQzRUE0MDI1RkVBRjMyMTJCMzg5RTg1RkZCQzhDQjIKLToxMDI2NDAwMERGMzMzODlCRkY1QzAxRUIxQzIwMUZCMjYyOTBGOTkwRDYKLToxMDI2NTAwMDI3Rjc4REI3QzFGM0MyNTQ3RTNFMzU5MUUyMDNFRDZGOEIKLToxMDI2NjAwMERFNkIyQTM5QkJGRDhEODQ5NzQ4RUZBRDgyRUYxQzg0NjkKLToxMDI2NzAwMEMxQjM5MDlCMjNEQzhFMkNEOTMxNjdGMzEwM0E4MUE2MkQKLToxMDI2ODAwMEU3M0VDQUVBNDJCRTY0NzEwODcxNEUyNUE3NkVFRTg0MjkKLToxMDI2OTAwMEY1Q0JDNDEwRkZGMzkzMzc4OTg2N0Y4REZDQjk4Q0I4RDYKLToxMDI2QTAwMDk5RERCMUIzRjc2QzNDMkVEMUNCOTdFREI3MjM1RTA1MjYKLToxMDI2QjAwMDFGQzE4RDAyNTMyQUMwNjBBQUE5QjhGRjc3MDNGQTdEMTMKLToxMDI2QzAwMDFGQTA1NTVGRkVEQ0RDOTUwNTdBNjM5OTIxNUVGMEI5QTkKLToxMDI2RDAwMDE0N0VGRkY1QzNENDYxNkNGREFBNjcwNkU0NDUyQzI1ODIKLToxMDI2RTAwMEU1OUI1OTVDQkQxNTlGOUY1MDVBNUZCQTExRTQ3OTA3NkQKLToxMDI2RjAwMDkzQTc1NUNGM0VGMTBDRThBOTE1RkY3OUFGMTNGNEQ0OTkKLToxMDI3MDAwMERGOTRENjY0MThBRkY2OTE0RDRFRDBFQjI3MTRCRjEzNkIKLToxMDI3MTAwMERFRkY1QjQwMEU3QjVGNzc3QkFBMjRGMkUyRUQ5MDE3MzEKLToxMDI3MjAwMDU2ODcyQzA2MDJFNjlGMDU3QUYyQkYxRjMxQkIyMDhFMkEKLToxMDI3MzAwMDVBRkZBODM1NjhBNUY4QThEQkM1RjA0OENCNDc1OUY5N0EKLToxMDI3NDAwMDY2QzQ1N0ZENkVCRDFDQUVGOEQ1QkRDOTJBRUVFN0ZEQzcKLToxMDI3NTAwMEU5MUM3RkU5QTBBQUVCNzY5ODMxN0ZCNEVFNEREOTBENDQKLToxMDI3NjAwMEMzRDQ5MzFFNUM5RkYxN0Q5ODQ3ODhEMkFEQkU0REFFMTkKLToxMDI3NzAwMEI0QzRGNkFGQTcxRThGMDVFNEFDN0UxN0EzNTNCREMxNEEKLToxMDI3ODAwMENGQUNFMTdBRDlDOEVGM0YxMzcyQ0ZGOTlDRTIwNUUzRjEKLToxMDI3OTAwMDYxMjI5Rjk1MDQ5ODdFNkU3QUVDRkU3MTQ3RTlCQzNFRkIKLToxMDI3QTAwMERERjFBQTUzQ0FFQkUzNzcwMjU5OTcxNDVGMjdEQkFBM0UKLToxMDI3QjAwMDE2NDE5RTQxMjQzRUZGOUNDQjQ1QUZERUU3NzY0NkREQzkKLToxMDI3QzAwMDREMjcwNkJFN0YzQjgzQjVFNkEwRjM0MjhBOEZEQTZEQzQKLToxMDI3RDAwMDY2Qjc5RjNFQUU3RDQyRjZEOEMxNEY3QURCOEFERjc3N0YKLToxMDI3RTAwMDU4RjlDNDhCNkY1RDQwRTdCNzcyQTczOTcxMjY1Qjg2RDUKLToxMDI3RjAwMDFERjRCM0EwNTMzREYwNzc0MTFGNUQ1NjNDRkRBMjA1OEIKLToxMDI4MDAwMEYyMjBFMUY5QkFGODNFRkFBQ0RDRDk2MTgxQkM0QTIzODYKLToxMDI4MTAwMDFFQTdCNjc1NTg5ODdDMTlFOEQ0NzY3NDA2RDhFNUE2MzQKLToxMDI4MjAwMEM3Q0U1ODgwMEZGRUI2NDcyMkUwNDIxQURGQUZEOUY2NzYKLToxMDI4MzAwMEEyMTNGNDA3RTAwOUVDODdBMDU3MkZGREZBRDEyRDM4MzkKLToxMDI4NDAwMEVCRjcxM0IwOUQwQkNFNjkyMkQxRUY1QTk4NEIxMkYyRTEKLToxMDI4NTAwMEY3OTNCRkE3RTNEN0JDNjM3NUMzRkE2QjlFQkNENjA5RDkKLToxMDI4NjAwMEVCRjg0ODY5NjA3Q0ZFRjM0REM5NjA4RjZCQ0NGRTY0NjkKLToxMDI4NzAwMDE3NDJGNkJDNjZFQjhGOTFGRjk2QkRGRUUzNjQ4MjdBNDkKLToxMDI4ODAwMEQzOTMwNkYyNEJENzk5MDZFQjVCRkFGMDE1QjhCRTZBMDQKLToxMDI4OTAwMEUyNDVGRUFCRjlCOTVDMEU3RUUyNjk4NTk0ODZGM0YzRkUKLToxMDI4QTAwMEQzRDM5ODlDN0NCNEREOEE5QjgyOEYyQzg0N0Q4N0UzNzQKLToxMDI4QjAwMENGMzJDQkUzMjNBQkQxMEZGOTMxNUYyQkQ1QzQ1ODNFRDgKLToxMDI4QzAwMDZENjM3NEVBNEUzNTcxMzk2MzdBQUM5RUI3QUFERjcxRDUKLToxMDI4RDAwMDMzRUFCMThGMzMzRDI5MjBFRjE0MEZGQTc4RUFFQkQzQjYKLToxMDI4RTAwMDUzQjhGRUMzRUZBNUUwN0I5NEVGQTZDMjczNjhERjY5MUYKLToxMDI4RjAwMEY2NDQ4REQzQkRDN0YzNUFEOUY4RDdGMUYxRTlCQ0EzOUIKLToxMDI5MDAwMDIxMkVGNzUxQjI3RUZGMkFFMDI1NjkyMjBFNDYzQTg5MzAKLToxMDI5MTAwMDk2QkYyMkM5RkQ4RTVCOTBBRkJFN0M5M0U5OTVCQUMwOEQKLToxMDI5MjAwMDlDNTJBQ0VGMzQwNzUzQTAzRUQwNzFCOTg0N0E4MUZBM0YKLToxMDI5MzAwMDE3RTFFNDdBODc5OUNCQjVCRTlFQ0U1MzkxQjRGOEREMEEKLToxMDI5NDAwMEMzRUVDNTU1REY0M0RCNjlGQzkwM0VCRUIxRjQzRENGMUQKLToxMDI5NTAwMEVFOTM0RjkxNUZCMUNDRTA5RjA5NjhENDBCNDk2OTdBM0YKLToxMDI5NjAwMEZCMjdERTI3MEYyNzg1QkQ4N0Q1QTcwRkZDODhCNzVBMjEKLToxMDI5NzAwMDczRTA5NzBGODIxQ0JGNkRDNTdCODZCNTRGOThGMTdCQzYKLToxMDI5ODAwMDM5OUYzQ0JFRjdBRDZCMjhCRjdGRDIyNkU0NTdBRjY3QjcKLToxMDI5OTAwMDhERjI1QkYzRDQxNTI0OUNGQzdFOTI1ODRFQzJDQTJGNTQKLToxMDI5QTAwMDdEMUU1NjdFMTM1OUZFRkVGRkI2OUU1RDE2NDFDRjVFMUMKLToxMDI5QjAwMDlDQTZEN0IzRDQ5Rjg4QkQ5MDE2M0ZGRUY1Q0FBMUI4OTgKLToxMDI5QzAwMENGMzJFMDU1RTBEM0E4MzcwRkE1QUE4ODVGQTNERUE0RDUKLToxMDI5RDAwMDdGNkYxMjBEMUUwNUZFMDQ1RkFFRjhDRDJBMUNBNzk3NkYKLToxMDI5RTAwMDdGMDU3RjBBRkVFREU1NEZFMzdBRjU3ODM0RDYyQjcwNEMKLToxMDI5RjAwMEU3QThCMDhGRUVFNjBENzQ3RjBERTdBRUNGQzk3OEVFOTUKLToxMDJBMDAwMERBQURGNjM4RTMyMTJFQ0JGMzZFQkE1REJDMUNDN0NBMzMKLToxMDJBMTAwMDNENDk5NkNEQTAzRkM0RjM5RTI4OTY4N0QwNURERUUzNjYKLToxMDJBMjAwMDhDRDNGOEY1NDdEQjY1MjdFNEQ1NzcwNUMyRTc0QjYwMjMKLToxMDJBMzAwMDI2NDUxMkRDMTI4RDU0REZDOEJGNUI2M0NGRjJDMUJFRTYKLToxMDJBNDAwMEFDOTU5REY3MkM2OUJDQ0EwOUZFNzQ3NzdCQ0VFQzc5RjYKLToxMDJBNTAwMEUwQzdFRjk3RDFBN0VBOEVFNkY5NTU3RThGOTI0NkYxNEYKLToxMDJBNjAwMDVBQzU5NjRDNEUxMEZGN0RFMDY3NTdCNUFGOUMwOTlCNDkKLToxMDJBNzAwMEM2MjUyRDdBN0M1NERCMkZDN0YzQUNFQTdCQ0M3RDdDNUEKLToxMDJBODAwMDQxQzBERjA5NThDMENGQUE3OTU4RkY3QzA1RTQ1NTAxNDEKLToxMDJBOTAwMDdEMEM3Q0U0MDUzRTBBNzMwRkEzNTlGMDUxM0VDOTY3RDMKLToxMDJBQTAwMEZCNjQ3RTVFQzVGNURBNzQzOTZGRjYzQ0M4NUZEQ0M3M0YKLToxMDJBQjAwMEVFNDk5QzZDOTdDOTY2NThFRkUzRkNGQ0NBOUY4NEZDMDYKLToxMDJBQzAwMDU5NDdGOTU4MUJFN0ZDMTRGODZDNTQ2NEZCRkRFOTZGOTcKLToxMDJBRDAwMDBGMTdERDQ4OUJENDNFRjNFRUI4ODcyOEZDRjQ5OUI3NzYKLToxMDJBRTAwMDQ3RkUwMUNBQ0ZGRTM1RUI1REQyQkZGREQ0M0Q1RjJENjEKLToxMDJBRjAwMEM0M0NDQTNENTYwMkZCQTJFRTNEMkY2N0REMDhFNURGNzAKLToxMDJCMDAwMDVCRERBOEZGMzdCMEZEQjE3RjhGMDNFRDdBNzcyNkYzNDkKLToxMDJCMTAwMEZGOUE5RTNCMzNBRTBCRUREMzQ2QTREN0QzNjlFQzlFMTAKLToxMDJCMjAwMEVBQzlGNkJGQkYyRjQxM0U1RDNCNUQxNUQ4NURCRUVGRTQKLToxMDJCMzAwMEFBRkY3RDE0RUVBRkJCOUYzQkEzREI1N0ZFQUJFQkE5MTcKLToxMDJCNDAwMEUzRjc5NUJBMUQ2NDFFREMyRkVFOEU2M0Y3M0JFQkZGQjcKLToxMDJCNTAwMDMwRTkxNzcwNUY3MUQ1QUUwRTRCMTVBRDlGRkFDNzZGOTgKLToxMDJCNjAwMEM3ODFCRUU5N0U4QUY5MTNENEJGREQwQTJFRjU5RTA3MjAKLToxMDJCNzAwMDBFQjQ5ODI5RkQzRTA3OUY2RjA4MjE1NzNENjgyRjgzQUIKLToxMDJCODAwMDdCMThGREYxQzJGMEQwNERGMTAwRUJBMjc4QTkwMTNEMTgKLToxMDJCOTAwMDE5MDkxRjdGRjlCN0M1QzcxNzBCNjFGQ0RBRjY4OTA0NUQKLToxMDJCQTAwMEUyRTk3RDc4OTEzQ0VDQjkwM0YzMkVFOEZBRDlGMzNERTQKLToxMDJCQjAwMDY3QzY4MTdGNzRCNkY1OUU0QTYzRjc2NUZFQUZBQzM3OTIKLToxMDJCQzAwMDZFQzhCRkVCN0ExOUJGM0Y5MEE2RTIzQzhEN0NERjlGQjkKLToxMDJCRDAwMEFGOUZCRDFFQ0I0RjNBREMzOERGNDFDQTdCRkU5MEZGNzIKLToxMDJCRTAwMDVCRkMzREZCREY3NkJENjdBM0Y3N0U0RTZGODcwQkNFQTgKLToxMDJCRjAwMDUzQkE5RkZCMzY4QjlDQzNCQUVCRkUzRjVENzdBRjlGMEEKLToxMDJDMDAwMDYzNzJEQjI2RDBGOUJENDMwMjU3OTQ0ODkxRjMzODFGMTUKLToxMDJDMTAwMDFBQTJERjQ3Q0NFMjdFQzRBQ0M0NkFGNDFGNjY3OTU4QkUKLToxMDJDMjAwMDdDQTU4OTE0RUM4MzdCNkE3RThGOENFNzBFOTg0QzQzREQKLToxMDJDMzAwMEYxRDA3OTc5N0UwMEYzQjYxNEZGODhGQjIwOEZFQkNBQzAKLToxMDJDNDAwMDU1NkVGNjlEMkZGREZFNkE1NjcyNjkyOUY4NkYwNzFCQjcKLToxMDJDNTAwMEU5QkM2OEJCODMwRTkzQUI4OTJFNjFCNjQ3NDY3RjhGNzQKLToxMDJDNjAwMDQyRjRGM0ZFMzJFNTUyQ0MwQjk5NURBQ0RGNjc1QzYzNTYKLToxMDJDNzAwMEQ4Mzc1QzM1NEY1RjdGMjVEOTlFMDRGOTc3NTdENjk4QjIKLToxMDJDODAwMDMxNUZFODBBNDNGQkI1NDM1Q0I4Q0VBQjQ4QzMyNjE2QjgKLToxMDJDOTAwMDlGMzkzNzNDQkRDQUYxRDQxRjBGMDNFM0FEMUY5RUY4MjcKLToxMDJDQTAwMDdFMTI3Mzc5RDRGRTc4QjM3QUQ5RkVEMjRBMkJCOEJGOUMKLToxMDJDQjAwMEM1RjNFNEQ2MEMwQTlGODRFRjNCQUQ3QzY4ODE1RkFCMjMKLToxMDJDQzAwMDg3N0RBRjUzRDMyRkUyNDVFMEZENUNGMTJERTg2NEM0NkUKLToxMDJDRDAwMEJCQzBBRkMwOUI5MTBFNUJFMTRDNDJFMzhGRjc0MTkxQ0IKLToxMDJDRTAwMDQ3RTIyNURBN0NDQjU5QkQ3RUEzMURGMUY4REEwRTc2REEKLToxMDJDRjAwMDVGRTFCNUUyQUE5NjdDMjgzRjJFQTFCRjc2N0FGMjc4RjIKLToxMDJEMDAwMDYyQTNFQjNENjgyNkJCRDlGRDJGOEZFQTJBRUFDQjY3ODkKLToxMDJEMTAwMDkxOEE1RkM2NzMwNUM4MjdENEVFNEIyMTlGNTBCQjJFMDYKLToxMDJEMjAwMEM4MjdENDk2MjE5RjUwREIxRUYyMDlCNUY1OTA0RkE4MTUKLToxMDJEMzAwMEFEODc3QzQyNkQxOUYyMDlCNUVEMjE5RjUwNUI4NjdDMTEKLToxMDJENDAwMDQyNkQ3QkM4MjdENDk2MjE5RjUwREIxRUYyMDlCNUY1NTIKLToxMDJENTAwMDkwNEZBOEFEODc3QzQyNkQxOUYyMDlCNUVEMjE5RjUwQzcKLToxMDJENjAwMDVCMEZGOTg0REE3QUM4MjdENDk2MjE5RjUwREIxRUYyRDQKLToxMDJENzAwMDA4QjVGNTkwNDdBOEFEODdCQzQxNkQxOUYyMDVCNUVERDIKLToxMDJEODAwMDJGMEUzREFGMkI5NzkwNTc3NUVEQTdEQURFRDA5NUE3QTQKLToxMDJEOTAwMEJCREVENUI1RkY2MUVBMzE1REZEMjVFQTI3QkE3QTQxOTAKLToxMDJEQTAwMEZGNEI3MzRGRTk5RUMzOTk4NUJGMDhGNjMxRUNBRkNDNUEKLToxMDJEQjAwMEZENzc1RDNGMEEyOUM3MzhCMzg1MzQyMEI0NDFGQzk2QkUKLToxMDJEQzAwMEMyNjhEMjg2RDA0RUM1MUNFMEY0OTFERTExRTlDMEFGRDYKLToxMDJERDAwMDVCRkQ5QjgxQjkwRTRFM0E5MzA1RkFGRkI1Qzk3MzU5NTUKLToxMDJERTAwMEZDODE5RjEzQ0M4NjdGQUE5NDg5NjNCRUM5ODA3REFEODgKLToxMDJERjAwMDM4Rjc3NDg2NjQxMjFDNEZGOTMwMjQyMTc0ODU2MjQ4QjgKLToxMDJFMDAwMDMwODFGMjYxMjgwQTYxN0MyODAxOUYyNzg0RTIxMDI2MjQKLToxMDJFMTAwMDg2RDJGMTc5NTIyODBENjE3MjI4MDc2MTRBMjgxQjYxMTgKLToxMDJFMjAwMDZBNjgwQ0MyQjREMDY4ODQ0MzQyRTNGMUJERjQ1MDNFRkEKLToxMDJFMzAwMEMyOENEMDg1RjgzQzMzMzQwOTYxNTY2ODJBM0UxRjFBOEIKLToxMDJFNDAwMDJBNDFBODg2MkU0NTk4MURCQTA0RTFCMEQwNUM2Qzk3NDMKLToxMDJFNTAwMDEzOUE4MzcwNzg2ODNFM0UxRjExQkExQUUxQzg1MDE1NjQKLToxMDJFNjAwMEMyNTFBMTRBODRCOUExOTUwODQ3ODc5NjIzM0MyRjc0ODMKLToxMDJFNzAwMDJEQkUzNzI2QjQxQTYxNUVFODQ2N0MzRTM2QjQxNkUxQjQKLToxMDJFODAwMEI4NTAxM0MyRjM0MzhEMDhEREExREJCMDVEN0VFODE2QjgKLToxMDJFOTAwMDg0MDVBMUJCRjFGOUY4RDA1RDA4Mjc4NDFFQzJFNzg1M0YKLToxMDJFQTAwMEExMDcxMDE2ODU3RTgxNzA2MjY4MUJDMkUyRDA2RjEwODgKLToxMDJFQjAwMDRFMEEzRDg2RjA4MkQwRDNGOERFODVBMTlEMDgyNzg3OTMKLToxMDJFQzAwMEZFODBDRjJGMEFGRDBFRTEwRjQyN0JGMUY5QzVBMTBFNjYKLToxMDJFRDAwMDg0OUVEMEFCRjhCQzI0QjQxRkUxOTREMDFCRjg3QzZBNkMKLToxMDJFRTAwMEU4NzU4NEQzNDJFRkUyRjNFOUExQjcxMUNFMDgxRDQzQTAKLToxMDJFRjAwMEY4QzNEMDUxODRBNUExNEYxMDVFMTJGQTFCQzIxRjg1RTIKLToxMDJGMDAwMDRFRTE3Qjk3ODZCRTQwMzgzM0Y0Nzc3QzVFMTZGQTBBMzIKLToxMDJGMTAwMDYxRUY3RTdGNzJBNDdCODk1RUQzNzcxMEQ3QjJDNzBGMzMKLToxMDJGMjAwMEVBM0I1Rjg0NkNEMTlENEJERDFGRTM0NDNEMzk3QjFENDMKLToxMDJGMzAwMENCMjNEOTVDNzI2QTFBRkFCNUFCQUQyQUZGQkVBNjQxQTMKLToxMDJGNDAwMEFGN0U2MzA3RkY2MTEzRDRBNEIxM0UyMDBGNzAwMUU3ODkKLToxMDJGNTAwMERGRDc4QUY3MjY4MUJGQjRCOUEwQUIxNkUyMjFCNzY3RTUKLToxMDJGNjAwMDc3NTUwMEJDMzM5REM1NTczNzczNzg3QjNBM0JDRkFDNjAKLToxMDJGNzAwMDE4RTlDMjcyQzVFQTExNzg3RTQ1MTIwN0I3OEVENzg2NjYKLToxMDJGODAwMEIwRjc0NEZCQkE0QzVFQjZGNzY0RTFCRDgwNDFGNjMzNUUKLToxMDJGOTAwMEQ4NzY2N0NCOEZCQTJFRERCQjFERTVCQ0RGRkRCQzQxMEIKLToxMDJGQTAwMEJGRkZFQkY0QzI3RkU5RkRBNzA2N0FGRjA4QTc5NzJCQzYKLToxMDJGQjAwMEEzRkMxOTlDQTdFMjE5MDdGNTUzMzZBNEM5ODlCNDlGNEQKLToxMDJGQzAwMENBMTZDOTA1NzZCMjZBNjNGRTBDQTA1RjAxRjE2MDNDQzcKLToxMDJGRDAwMDcxNDE4NEJDQUU3NzM5RkQxNjM3OTgwOUM0MTUxN0FCMUIKLToxMDJGRTAwMDA0RTNCOThCNzdCMTNDNUY4ODgzOTY1MUJFQThFMTdDM0UKLToxMDJGRjAwMEIxRUE5NjlEMTY3MDQxNkIxQTk2QjFGQ0EzMDA4QjMzMTMKLToxMDMwMDAwMEQ5RTg3RkMwQ0YyQjVBRTY2MEZFRDFDQTQ3RjVGMUE3QjkKLToxMDMwMTAwMDVBODhFQkM4NzA4RUFDN0Y1RUNGRTM0Q0M2NzhBNTMxODIKLToxMDMwMjAwMEJFRjQ2NjNBOEZGQkJBNTlERTExOTEzMzcwQkRBN0U5NDEKLToxMDMwMzAwMDdBMjE5RkMzN0JCREMzMDZGQTlGRTIwMUNGNDlDNEZBNDAKLToxMDMwNDAwMDQ1QkM1MkUwODFGNEJGQ0Y4MDc5QTEyN0Y3OERDMDNDMDkKLToxMDMwNTAwMEI1OTNBQTlBMDJFREJDNTQ5QzNBRUQ5MEZGRTA5RDA4MEUKLToxMDMwNjAwMENGMjlGRTMwOUZBNEE3MzEwNkYzOTE4RTUyN0RBRTQyNDgKLToxMDMwNzAwMEUyOTNDQjNCMTFCRTlGRDZGNTRFMjZFMURGNkZENDlGODYKLToxMDMwODAwMDFCRDg1QTMwRkZCQUQyNEMwN0E2RUQyQTFGNDlDMEZCMDUKLToxMDMwOTAwMDhGQjRCRjcxQkIyMTFFRjk4ODE5RjM4MUZDNjQ0RDJBREUKLToxMDMwQTAwMDI5RUU3RkFFNTBCRUM5OENGQ0IxNzg3NzFDQ0IwRkYzRjQKLToxMDMwQjAwMDdCREU4NDdDN0Q0MThGQTMxQjczNjY0MDVFRDFFMkU2OUMKLToxMDMwQzAwMEVDN0MwQ0JCRUQzNkEzOUYyN0NFNEIwNTlERkFFNzQ1NjQKLToxMDMwRDAwMDk3QzdDMkY3MTE1NzM0QkY4RUY0QTRGNEQyRDVEN0I2MzAKLToxMDMwRTAwMDdDODFGNzA3MjhCRDhFNDdBMEQ3RjE4MUU4MTU5REMxRTcKLToxMDMwRjAwMEUzODE2RTkxMjc5NjE3N0IxNTU0QUU0QjQwMzlBREQ4QkUKLToxMDMxMDAwMDEwMUNEMUEwRTE0NzYzOUM5RTY0RDhGMUJFQTNDODI3RTAKLToxMDMxMTAwMDJFMURDMkU4NDExNDc3MzJEMEY1NTQ0QjIxRDJDQjQ4NTIKLToxMDMxMjAwMEE3RDI3RjU0MjEzREM4M0IwRUZDREVFRTgyMUNCMkU4RTQKLToxMDMxMzAwMDMyRkE3QzExOEY1QjJFNjhCQTA0RkRFNzlDMENFNkQ3NEYKLToxMDMxNDAwMEJGQjYxRTcyMkQwOTc5N0RCRDhENzhBOEYzRkNDNjdBQjUKLToxMDMxNTAwMDE3OTZGRkIyM0UxNUNCN0Y1REFGMjI3QzdCN0QyRUMyRTIKLToxMDMxNjAwMEUzMTY5NkNGMjNFNDg5MzIwMEU2RDU4RENFNjA3MjM0MjMKLToxMDMxNzAwMDNBNDNFQ0FCQUU0Qjg1Qjg3NEU5M0ZERTI4ODRGQzlFNDUKLToxMDMxODAwMDI0N0ZEMkFDRTk5OUU4NzdFQkYyMzRFNjVEQUVDRkMzQTkKLToxMDMxOTAwMEU4MzJGMzNDQUY1QjI0Mzc3QzQ3NjU3MUY5ODVCQUY2QkEKLToxMDMxQTAwMDI0Nzc3QzVGMTlFQzA3Q0YxQjU5REMxQzg3REY2RkJCRDIKLToxMDMxQjAwMDdBNjY4MkFFRkQ5NUNERTlCQTcyNDk4NjhBRkE3NTRFNzUKLToxMDMxQzAwMDY5OEVFRUY5MzUxNTYzNzRFNTRBRkVCQjA5QzQxNjZEQzgKLToxMDMxRDAwMEQyOUU0RjUxQ0FCMjNDNkYxNzZCRkI2NUMzQzQ5NDFCQTAKLToxMDMxRTAwMEU4Rjg1RjFFMzA2M0JEOTExRUM3MkQ3RURDOEZGQkI3RjQKLToxMDMxRjAwMDVCREQ2MDg3NEVDMDNEMzI1QTNFRjExNzE5RjVERDA5OUYKLToxMDMyMDAwMDMzRjFCQkE4RUEzRTIxOTE4RDAwODlDMkU0RTlGNDIxQTMKLToxMDMyMTAwMDI2NEZBNUZGOTAwOUVDQzNDOUFGQUQ3ODdFNTdCNTQ1RTEKLToxMDMyMjAwMDIyN0VCODQzRDU0MzMxNEZDN0JERUUzMTJCQUU3QkM5QUIKLToxMDMyMzAwMDE2OTk3OEYxQkU5MkRBMDZFN0Q2RDczRDMyQ0EwREU3ODUKLToxMDMyNDAwMDk2MEI3MjgyOTk3MDZGQUZFN0I3NTFFRUVEQjRCNkFBRTQKLToxMDMyNTAwMDhCQkQ3RjgyRUVBRkUzMjAyRjQ5MkFDMEYzODNDRkNBMTQKLToxMDMyNjAwMDVBQUI0RDkwNkYyMDFGNDgwMjM5RkRFQzI5MTlFMzI5MTQKLToxMDMyNzAwMENCNTdGRkE1QzgwNTdBRURBNUI2Qjc4QUU5MzhDNzVCNzUKLToxMDMyODAwMDY1MUNGNzkzNDdBRERCNjQ5NDc3NEYwQTdDRDdCNTZGMjUKLToxMDMyOTAwMEREMDE4QzMzQkM5NDVBQkUyMjgzRjJDMUM3RDU4MTcxNDMKLToxMDMyQTAwMEE4NzdENkIxRjg3NjdGRkNEMEY1MDJCRDgxNUYzNTdBN0MKLToxMDMyQjAwMEFDQ0Y2RUIxNzMzMkFBN0NEMjQwM0Y1NDk5REQ3ODZFQTgKLToxMDMyQzAwMDdBQkNDNThDRTc3OTU0RkZFM0Y5RkZGMUQ2MDQxM0QzMzgKLToxMDMyRDAwMDNGNEYyMURGMkQ1NjU0OEI3NkRDQzUyREIyODdGRDJFNTYKLToxMDMyRTAwMDg0NkE4MUY5OTJCQjY0MkY5OTA4NjU5NkFGRTA2Rjk2NjYKLToxMDMyRjAwMEJDRUNCQzQ2NEZERjZCNTc0RkM0RkJDNUM2RkMyOTAxNzUKLToxMDMzMDAwMDNGQTczMkU1RDU5QzAzQUQ3ODhFOURDRjkyMDk1RDhBQUIKLToxMDMzMTAwMDM2N0Y1Q0M0NTc0ODJBRUI1RjdDQzdBNzc2RDhGRDc3MTkKLToxMDMzMjAwMDRDQTZGMEE0ODc3RDcyRjBGNDBFMDdFQUM3NEY0RENGOEMKLToxMDMzMzAwMDE3REQ0MEUxMjc2NUZFMEYxNTRBOTcwNkQ5N0I1RjA2MkEKLToxMDMzNDAwMEU0RUY5ODVBQjY0QTc4MkU3MkVDMEUzODhGRkZGODA5REYKLToxMDMzNTAwMEIzMUJDNTkwRTc2QkFERjhGNUYyQTEwM0U1MDdDMTBDMEYKLToxMDMzNjAwMEQ4Rjk3MjMwNTk0QTg1QUZGMjEyQ0NERjk4NEZEQTc4MkIKLToxMDMzNzAwMDdDMjBDMENFRkY2MTEyMTQzRkFFNUE3NjhFNzVBQ0QwNjEKLToxMDMzODAwMDcxMkJEQ0MzQUQzMkRDREIzREM2RUYyRDNDOTZDMUZDQkUKLToxMDMzOTAwMDIxNjE5RjNGRTJFNTJBMTM5MzRGQjI4NzdEN0YxMUYyQUYKLToxMDMzQTAwMDVFODY2QkVDQTlEMEE3QkIzMzg2QTFERUU4QjVBQkE0RTMKLToxMDMzQjAwMDBERjU0QTM1RkYzRTcwRURBMzU2NzY0RjQ3MjUyRTkwMEEKLToxMDMzQzAwMEM3RTU4NENCMUZDODMzN0Q2Rjg1RTU4OUZCODA5RDk3NUEKLToxMDMzRDAwMDkxNEVCNDczMUY5QjAzRDU5REQ5RjBGRUI2OERGMUY4QzUKLToxMDMzRTAwMEJFRDkxRDAwRjlFNTc2QzA0NjE1MDdFODhGNjU4NENEODYKLToxMDMzRjAwMDZGNTVBQjE0MDg2QUUyMTRFMkY3MzgwOEQ4MDU4REJFQTEKLToxMDM0MDAwMEU5NkYwRkY0NzY2MDI5Qjc3NzRCODkyMURGQTc1NTZGRjUKLToxMDM0MTAwMDk3Q0E2MzFDQjhBRTE1QUQzQ0VGQjk3NzVFMzJGOThFMzIKLToxMDM0MjAwMEUyQUNEQTFCNzg2OTE2Q0U1QjcyMDdDMkNDNjMxOUU5OEQKLToxMDM0MzAwMDA5QzI3NzgwNTczRENFRUUwMzE5RTc2NTVDQzc2MEU3QTgKLToxMDM0NDAwMDU5RUQ5RTMzMERCRTI3REMzQkFFNjFERTAyREYwNDJFNUMKLToxMDM0NTAwMDI4NjlFODIwRjA1RUVENjdGOEFDNkU5NzkwNUVGRkM1RDYKLToxMDM0NjAwMEZEMkE3MUNGNEVEMDdEMTkyOTlGMDU3QTZERDkzRDc0MDMKLToxMDM0NzAwMDVGOThEREM3MDdCREY2N0E2NzAwRkRBNTRGNDhBQkQzNUYKLToxMDM0ODAwMDRFRjlCRjc2Q0JDRTJCMjdDMTdCMEZCRjZFMDFGRUFFQjAKLToxMDM0OTAwMDg4MEY4RTMwQzVDMTRGRDJEQzc4NDdFOTQ1NjFFQ0JCNUYKLToxMDM0QTAwMEMxOUU3RjVGRjgyMTNDQ0U4NEVGNTE3QzJDREQyMTYzRUYKLToxMDM0QjAwMDVFODNBNjFEM0ZERkY3MzM3RUY2MTNDQzIzQUE3OTUzMzQKLToxMDM0QzAwMDc2MzdEMUE3MzVGMDczM0UwNUU3M0U1RjgxOUZGRkVENkMKLToxMDM0RDAwMDc5MUJGRDk4OUNDQzgxRkQxOEEzN0VFOUU3QzcxOEVDMDkKLToxMDM0RTAwMDI3REM5QjAwN0JEOTkzQzRGMkMwQkY1NDNDQjFGMUE4NDgKLToxMDM0RjAwMDk3MEQ3QTM3QTkwMEJGM0IyQUY0NkUzNUI3N0I2MjlDRTMKLToxMDM1MDAwMEE1NjBFRjY4RjlDMzJENEYzQjIxRkVGMDVGRjczQzlEQUUKLToxMDM1MTAwMDhDNzkxNDYwNUZGMkZBRUNDQkY1NTU2Q0JDRUI5RjhEQTcKLToxMDM1MjAwMEMyQkNBNUNGQ0EzQUM3ODFERjU3RjFGMzk3OUREQUVGNDYKLToxMDM1MzAwMDlBQUU0OEY1OTY2NDgyN0VFNkY2NzA5NUJDMkRDQjA1NzIKLToxMDM1NDAwMEY2RDAxNzNFQUZBMkRGRkUyQkQyM0ExRDY3NTlBNzQzMzQKLToxMDM1NTAwMEJGQ0VDNUIwNEVDRDdEOTAyQUJFQ0UwRjlBRDlGQThFODEKLToxMDM1NjAwMEI1QjBGNTJFRTlCNzRFM0Y5RTgzNUNGRjBCQUJEQjhGMEEKLToxMDM1NzAwMDdFNDYxMEVERjg4OTlEMzI4MUZCNjdCRDdFODZDMUVFRTcKLToxMDM1ODAwMDlGMjZBRDVCMDExRkFCRDZGQ0Y1N0Q4NUYyQzVGMjkxQTAKLToxMDM1OTAwMDE0M0Y5NDBGMkFFRUIyQTI5RDVGRkU1Qjc2RkVGOUIxNTYKLToxMDM1QTAwMDU0OTI4MjA3RjAyRjA0OUQ2QkU5RjMxNUQ0M0YwMEZGN0UKLToxMDM1QjAwMEEyNkYxRUJENzY3RjM5RTBCMUQ3RUUwRjEyN0Y3NTNDNEEKLToxMDM1QzAwMDBFNTVEN0ZFMzJGRTVFOTRFNDYxRjk5MDc1RTIzQjMwMTEKLToxMDM1RDAwMEJCMERERjgxNTE0MTA3QjA3QkYyMzZBMDUzMDY1MUQ5QjQKLToxMDM1RTAwMDNFNTExRjRGRkRFRjExNUYyQzVDODNGQ0RGMzM1MkZCMUMKLToxMDM1RjAwMEJEREVGQUU4QTAxOUYyN0Q3Qjc2NEFFODE3QURCQUFFRDcKLToxMDM2MDAwMEM0NTk0MjIwQkY5NUM1QzEzNjY3MzJGQjI1NzkzQzk4MjUKLToxMDM2MTAwMEY3NjJBNTc0OERBNkUzREQ5MkE5QjJFN0FBOEJFNTc1RTIKLToxMDM2MjAwMDNGNENGMEJCMzM2MkJFQzZFNzEwMUZCNzgxRkRCMzlCQjIKLToxMDM2MzAwMEQwRkUxOUQ3QkYzQjkzRjlDQkFCNjQxM0ZBRDNCNTE2QzEKLToxMDM2NDAwMEU2NTc3N0YzRUYzRURDQzdFQkVGQ0I2NEZFRjVDMzk5QUIKLToxMDM2NTAwMDJDOUVERjBEN0UyNDlDNEY1RjY0QzVERkVCMjE2NDFBMzYKLToxMDM2NjAwMEM2QzkxNUMyRjg0RjExNzg3MzI5OUZGN0NBMzdGQUNCMkMKLToxMDM2NzAwMDNEMTk4MEE3ODVBNEQzMENGNDlDNTUzQzQ3ODU3QjAzNUEKLToxMDM2ODAwMEVGMjdEQkYwM0I0QUY0QUYxQ0ZBOTlDRkZCMzk2ODY2QjEKLToxMDM2OTAwMEY3MDRERTg3MzFFOEJBRTZGMzc4RjJGQkYwMTk1MDNBMjYKLToxMDM2QTAwMEZFRkI2OTE2RjQ2M0ZEQ0Y1OUQxNEZCODM5OUFDNUZCQkIKLToxMDM2QjAwMDQ4NjJBQzAyN0M3RTBERDc1MzBCMjY1QjNENzAzRTMwREEKLToxMDM2QzAwMDdGRjJDREU1MDA2OTdGN0U0MkYxNTU2MUVCRDk5NDRGRTEKLToxMDM2RDAwMEM3NjkzNDMxM0JERjE4NEZGMEJFMjREOUQ4NTUwOEY4RkMKLToxMDM2RTAwMDNCOUZCQUM1OTAyNzRGNTdCRkVCQkI4NDgxRjg0ODdGRkIKLToxMDM2RjAwMDRGQTExNkUyMEExNzEwQzY2MEM1ODg1RjVEQjlENkMyMzEKLToxMDM3MDAwMEVBMEY2NjFFOTk3NTRGMDYyMTdGODY2QzI2QjAzMzgwQkUKLToxMDM3MTAwMDIzRTA4QkNBNThEQ0U3Q0U4NjNDRkU3ODgwMEFGMkRCRDkKLToxMDM3MjAwMDY1MEFGMTlCMTg2Q0I2RTM3Nzg4NTg1RUJGMzgwN0I5MTUKLToxMDM3MzAwMEEyOTgwNDYzRTlGQTgyRkJGNUY3MjhBRTBBOUE4MkEzRkQKLToxMDM3NDAwMEUwN0M0NzA5NzYwMEZFNEMzNkQ1RUNBMkUzOTQ5NzRBMUMKLToxMDM3NTAwMDA1ODBGN0RBMEQ4MzlCRUZEMUNDOEY2N0REMzM5OTk2MjcKLToxMDM3NjAwMEUxN0I1NzMwQ0ZCNTEyRTZGM0NDQTc0MjBGN0NCQTUwQkQKLToxMDM3NzAwMDIxMkZDODA1OEM3RUMwODdGNUYxQUExRkRCQUQ2NjdDQzIKLToxMDM3ODAwMDJFRUU2RjA4QkFFNEQzRUVCNUY4OURDRkU3NDdGQjY5OUMKLToxMDM3OTAwMDc2QzJGQjk2RjA3MTkzQ0YzMkM1M0U4RkY5NjkyQkI5OTMKLToxMDM3QTAwMERDQUUxNDdDRjdCODVFNUU2M0IzNTRGNjNEMzVGMDA3Q0IKLToxMDM3QjAwMDI5REVFNjczMTg4OUVGRUQ1OUFDN0Y3QjE2RTNGQjEwMjkKLToxMDM3QzAwMDk3QzdDMThFQjdDQTRBODJCOEVFRTdBQzQ4NDczMUVFMTgKLToxMDM3RDAwMDZDMEVBM0IzNThGRUIyOTg4N0UwREY2QUQyODBGOTM3NDcKLToxMDM3RTAwMEQ1M0MxRTYzQTI5QTA0RjM3NDVCN0Y4MUY5RkRDNjNDNEQKLToxMDM3RjAwMDIxRUEyMDYxREVEOThBMURDNkU3OUE3ODhFQUNEMzRCQzgKLToxMDM4MDAwMDE4RTc5NDJDM0Q0QjYwN0VEMjBGQTJEQ0MwRUZGMzJENjUKLToxMDM4MTAwMDZEMTgwRjMwQjYzM0I3NEEyOEU3RTY2NkVBNEY0OUZDMjEKLToxMDM4MjAwMDdDOEI5NkFEMkQxMkZFQkVDM0ZDOEM5RUIxRjhCRDcyOTIKLToxMDM4MzAwMEVFNTc1NzczQkE1MkVEM0QwM0VFMDE1NTgzM0Y4NUU3Q0UKLToxMDM4NDAwMDVGRkMzQjUxNUI5ODFGQTk3MEZGNzc3MThCREVDRjk4QUYKLToxMDM4NTAwMEJGNTFFMzY3MzJBMEJCNTc2RjM1RTQ4NzlCQjlCRjcxOTcKLToxMDM4NjAwMEM0RDIzMzE2RjRCREYxOUVGRDExMTM5QkJGM0Y5OTYwODYKLToxMDM4NzAwMDdFQTRCODY3QUY3MDdGNTJGMDUzN0E5NjU5NzczRTI2OTAKLToxMDM4ODAwMEVFNzM1NjgwOUU2MkRGM0IzMEU0NTNEOUYxQkIyQjE1QkIKLToxMDM4OTAwMDEyRkY1RTI1OEYyQjlFQTRGRTI2N0U1N0U2NzAxNERBNUIKLToxMDM4QTAwMDJEMTE2N0VDMkU3MUY4NERCMUYwMzk0QjU2NUUxMDdCM0YKLToxMDM4QjAwMEZEMkNGMDMzMkI5QzE2MDVFMDE5NTMxNzhFNzM4M0RDMTcKLToxMDM4QzAwMEU5QzhDRUVFOEJFMzZFMkUxOUJGMDVGMjg2RTY2Q0NEMEQKLToxMDM4RDAwMDlENkRDQkM0NTMwRTdFMUY2OUVDNkI5MENGN0JGOTM3ODcKLToxMDM4RTAwMDc0RkU1ODFFMzdEQjQzRjc0N0REMkZGNjJDQjQ1MTE1MTUKLToxMDM4RjAwMEJEMkNFQkZDRDkwQUI1RTdEREY3RjY2Qzg1RjJEQUFDNDYKLToxMDM5MDAwMDYyNTZCRUJEMjcwQkJFMjFCQzc2RUI2NDU2NkUxNEZEMUQKLToxMDM5MTAwMDREOUUwRDc5RjBERDBGQjBGMjk1QjRERTBGN0UyRUJGMTcKLToxMDM5MjAwMDA3NTQ3MTgxODQ3QTc2MkRCNzNGMjI3RTU0NjE3QTlFNDYKLToxMDM5MzAwMEMxMjlFQzc3M0VDRUQ2NkU0MzU2RjlEQUNDMjRGOERFQjgKLToxMDM5NDAwMEU3NzFGQzNEODExNkQ1QjMxNkVDRjVGQTBDNkY2NTE2RTAKLToxMDM5NTAwMEVDQTNFNjQ4N0UwQkRDOEI3RjMzMzA5MkRCQUZCMEJGNEQKLToxMDM5NjAwMDdCQjEzNjkzRTUwOTZGMUM1QThFRUYwQjdDRDE3RTU2RTYKLToxMDM5NzAwMDY0MTU5RTdCM0ZGMUZERkJCOUY2OUY5OUNGOTFBMTZDMzkKLToxMDM5ODAwMDdEOUE3RUQ2RkQzM0ZENEM1MUY1RjMxMUZFOTlGOENFQUMKLToxMDM5OTAwMERDQkU2Q0NGMTZFODc3RTU0RDZDM0Y0QzhFREI3NUY3REYKLToxMDM5QTAwMEZGNEYzNTNDM0IxMkVDRkVBOUM3QUQwOUMwODcyQjlGRUEKLToxMDM5QjAwMEZDNUQ1NjM1Rjg3RkRDMUZGQUE0RTM2RDBCRTQ3REQ3ODAKLToxMDM5QzAwMDg1RDg3NzcxRUE0M0VDM0IzOTc1QkIzQTJDMzNGMjIwNEEKLToxMDM5RDAwMDhGQjVDMzMyNTUzM0JGREFCRURGQjk1MjJFRDNGODMxQkIKLToxMDM5RTAwMDNGQ0YxMkY5REFFQzc3MUQ1NzNFRjkzN0ZDOUVFMDRBREIKLToxMDM5RjAwMDUzREI4NzkwRTc0QjJFNjA3MTM0RTMzQTM3RjFGN0RFMDMKLToxMDNBMDAwMDg3NzNGRjMwRjE4MjVGNzBGREZCNTU4RTY3M0JBQzczQUYKLToxMDNBMTAwMDYzMTZDMUY2NzI4NEVGNzY3RENBRkJBQjg4NjY3QUJDMEEKLToxMDNBMjAwMEFBQzg2MTUzMjlCRTBCREZGNDM2NDFERTY5RjVDM0Q5NUMKLToxMDNBMzAwMDA1MzI5REM3RjY4QzI5OEYwMzdGNDQ4RTZGRjZCMEY4NTAKLToxMDNBNDAwMDY2M0I4QjZGNTZDNDc3NUU0NzhEMTRGOTY4NkJDNTlERDYKLToxMDNBNTAwMDM2QkFDRkJCRjQ3RUQyN0JERjBGRTI4NkE1NTYyMTNGN0MKLToxMDNBNjAwMEQ3Q0U5RTk2QzFFMjY1NTA3RTI1NkJENTlEMjAzRkZCNEIKLToxMDNBNzAwMEY4RUZCMzJEOTgzODM2MUFFNEJDMkIzQkM2RTRBMkYyMUIKLToxMDNBODAwMEZGNzQ3QUU1NDczMDhGMDUxMzJGOUEwMUNGNEJBQzhFMjgKLToxMDNBOTAwMDkxOTUyQzNFOEVGQ0YxNzQ3QUY5RjM1MDBGRUQyMUVFRTYKLToxMDNBQTAwMEUxQjUwNDkzQUVBMkVCRjBCRTIyNjNERUI0Nzc1QzhDOEEKLToxMDNBQjAwMDM3REMzRDk1MjBCNzU3MUY2NTMxM0Y2RDlGODlDRUIzRTkKLToxMDNBQzAwMEEwNkYxRTYyN0NFQTk4NURENzA5NzFBQjBENjlGOUUwQzEKLToxMDNBRDAwMDQ3QkIzMjRBM0VDQzRBRUExQkRGOTVFMTdEMDNDQTYyMEUKLToxMDNBRTAwMDdDQkFEQzcxRjA3Q0IwRjNFOEU0RjRGODEwRTg0NkZCNTMKLToxMDNBRjAwMDI5OUYyQ0MzOTcxMjdBRjVGQTY1RDM2Mjc0RTVDQjY3RDgKLToxMDNCMDAwMDI2MTA4RjM2NkU3QTc5QkFBRTNDQUYyMjQ3RDdGRTlBMkUKLToxMDNCMTAwMDI1NjM3NEY1NjVENkNFMDkwREU3RTBFRkQ3M0IxRUM1RUEKLToxMDNCMjAwMEZDREVDM0VEQTdERjlBMEY3RUVDMEVEOTJERDFGNTJDNkMKLToxMDNCMzAwMDdGRUU5MUI3MjBGRkZBMjRGQzA0NDkwMThCOEJCMUVGOTMKLToxMDNCNDAwMDM1RjJGMzE4QzVBM0U4Q0U2M0Y2M0Y2RDAxQkY1RDEzRjAKLToxMDNCNTAwMEU3MzdEQ0NCM0I4MDcxN0NFMzc5OENDODE3RkY2N0NGRkMKLToxMDNCNjAwMDYzMkM0M0Y5QkVCOEY3RjczQzNGN0Q4OUFFOEM0Q0RENDIKLToxMDNCNzAwMEREODFGNDY5REFDRkYyOTg5QkE4REYwMkRGMTNGQkUxNjUKLToxMDNCODAwMDJFNkIwMEJFRTFGRUQ5RUY4RTVBNTRDREI5NEM3REE4MDQKLToxMDNCOTAwMDExN0Y1Nzc3RUFFRUEzNzg2RUYzQUIyQ0E2QjdFQkRBN0EKLToxMDNCQTAwMEJGQjBDMDNEQTkxRkI2QUY0Njc5OUU0MUY1NTcyQ0U1ODEKLToxMDNCQjAwMDlCQ0UwRTMyNzYxN0M0OTNCMzFEOTg4N0IzQjJGOTEyMTkKLToxMDNCQzAwMDhDNTNDNzg2RTYyM0FDNkRCRDA0RkI1QjE1OUE4QkU1NzEKLToxMDNCRDAwMDNBRkU3QkJFRkJBMjNCNjc4MDFEREVGNzRDMUNFRTA3NjYKLToxMDNCRTAwMDVGOTM4MzIzMUY4MjdFQUMwRUQ0MEY2NUU5MEIzNjgwNzIKLToxMDNCRjAwMDlGQjAyRkRBOUY3NzJEMURBRkVDM0Y3Rjg4NzlFODc1NTYKLToxMDNDMDAwMEJCMjQ4QzlCOTZDOTY0OUYwNEY5RjdBMTI4RUNBRjRDQTgKLToxMDNDMTAwMEZFRjM4NEQ1RjRGOUE1NTM5OTVEMkQwMzFGODdENkNCMDgKLToxMDNDMjAwMDQ1OEU1QkYxN0JEMjExN0UyN0FENjAyOEQzMkJFNjJFMkIKLToxMDNDMzAwMDM2RUZFOUExMzlEODlGQTgyRjFFM0E0Q0Y3REQxODczNEIKLToxMDNDNDAwMEQyMEU2NUIxQkQ2RjNERTYyRTA5RTE4RjQyNjMxMEQ2RkQKLToxMDNDNTAwMEVGOUFBMzQwRkVGOTJCQjlCRjQ4MDQzQ0QxRjZGODdEOUEKLToxMDNDNjAwMEIwRkVGQTc4NjIyQzA5QTNCNzA0QjQ3MjNEM0MxRkY0OEQKLToxMDNDNzAwMDMwOUNEMzY3N0I2NjBENEQ4MkRGMjNFQzUyNkNBMDQ3RUUKLToxMDNDODAwMEVEMzYxN0Y4MkZCMzhBRjNENTZBQ0RCQUU0RTdBRkM2OUQKLToxMDNDOTAwMDdCMTBENkM0MUUzM0Y4MDNGMzI5RDRFQUVENDUxMUVDQUEKLToxMDNDQTAwMENDRTU0MzREREM3RjZFQzRGNTBBN0I0NDhFRkYxOENGMTQKLToxMDNDQjAwMEI1MTdGMkY4ODA5MEE3OTJBMTI2MUQ1RTNBMjUyNjE3MjcKLToxMDNDQzAwMEZFREZCMjczODFEMjZDNkYzNUNDQjdCMzg0Q0M3QjBBODQKLToxMDNDRDAwMEY1Njg2NzE2REM0N0ZGQkVFNjRGRTk2QjAzRkEzQjk1RDQKLToxMDNDRTAwMDJFMDI3MThDOTVCREYzNjdGMjdDQjZGOTVGQ0RFN0ZGQ0MKLToxMDNDRjAwMDlBNEM3Q0MwMTdBRjVEN0M3MUE3ODdDRUFCRTNDNkYxNTEKLToxMDNEMDAwMEUzQzEyRTg4RjFENjBENjVGOTg3QzRENUYzMERFNjFCMDYKLToxMDNEMTAwMEVFODk1MTIxQUU1RjA2NjcxRTEzRkFGQzc5Qzg0Nzg0MEQKLToxMDNEMjAwMEY4NjFGRDFFRUI3NkY4NDA2QUJEOTNFRUVGRUQ5MDE3NUIKLToxMDNEMzAwMDE4MTUwNEJFRURGODYzOTQwMkY2NjNFQzcwRUZCQUExQjcKLToxMDNENDAwMDk4MkYzODZBMUE3Q0M3QzdEMzZFNTUwOEZBNDE5RTlGRDAKLToxMDNENTAwMEMyRjM0OEYzM0Q5QkZFMTJGMjY4RTQzMzZGMzM5MzNGQTYKLToxMDNENjAwMDJGOTdDMzRBQ0VCNzhCQjkxQzU2MkFFRTU4Mzg4RjU5QjUKLToxMDNENzAwMDc0NDBDNjdCOTE4QkQ3NDk2Mzc3NDE3QzQwNzVFMDNEQTkKLToxMDNEODAwMDdEMjE4NzQyREVDQ0MwOTdFMzgxM0YxOTVGRDY4NkUyNzIKLToxMDNEOTAwMEI4N0M2N0YzN0U5OTFDOTRDOTJDREZBRTZDNEMxQ0VFOEEKLToxMDNEQTAwMDlGRUI0MjA5RDg0RUM4QUI5MEQzQ0REOURFQzc2MUREQjkKLToxMDNEQjAwMDY1NEQ1NEJFRTkzOERFMEQ2OTEzNDA1RUZBRjhDNEUyODEKLToxMDNEQzAwMDAyN0VBMjdDOTI1QUFERTE4M0E2OEVBRjE0RTAxM0YzN0IKLToxMDNERDAwMDY0MDlGOUM0NEFFMTU0MEQxRjk1RjdGQTI3QUUxOUM5RDEKLToxMDNERTAwMDc0MUVCMzM2NjZFM0Y3OTQ0NUZEQ0VBMUMyNEYxOTFDOEQKLToxMDNERjAwMEJGNkZFNUZDQjVEODFFMUMwMTdFQURCOTIxQ0EwRERGMzEKLToxMDNFMDAwMDkxM0Y5OUE4QTIxRTVCNzM4Qjg0M0Y0RUI4QzY1QzNFNUYKLToxMDNFMTAwMDE1RkM4QjM1MEY0ODE4REYwM0JGMDNGNDRGRDFBMTA2MDMKLToxMDNFMjAwMDhCRjYxQ0U0RUFEMDM4M0NBRjlFMUIxQThFNzA3Qjg2NjIKLToxMDNFMzAwMEY3OEY4MDg3Q0FEMDk1MUM4RkUzQzI5RUY3N0REOTcwMUIKLToxMDNFNDAwMDMzQzZENUJFMEM1OERERUMzQjYzRkFGODVEQTFDNzhERDcKLToxMDNFNTAwMEU3N0ZFNjAzNjZCMjREODVCODlCNTdDNkYzQkQ0Q0UyREIKLToxMDNFNjAwMEJBNUI2MkYxM0I4OEU3ODlGODlCMzhBNzEzNzEzODJCNUUKLToxMDNFNzAwMDdDMEY1NzYzNDc0RjJCQUQ1OUIwMEZFOTE3OEYyQjYxNUMKLToxMDNFODAwMDc2RkZEMzFENjY3NjZGQUJFM0NGNDUyNjVBRkY3MUI2M0EKLToxMDNFOTAwMDA3RTM3MjJGQTU3QURGODZGNUFDQjgyQ0YwQTQ5OTk2Q0IKLToxMDNFQTAwMDU3REVGRUI0MTNFMkU1MDI5RjZENEE3MDA0RUM5N0RBMjgKLToxMDNFQjAwMDI4MUUyMTNFRDhENjIyOTcwNjk4QkYxMzMzNDc5MzVGMUEKLToxMDNFQzAwMDExODlBRjU3ODQ3MjEwM0ZDMkRFMDhGREZERUNGQTU0MzEKLToxMDNFRDAwMERDOTQwQTNEN0UzNjNCMjRGODdCMTU5NzgzNTUyMDA3RkEKLToxMDNFRTAwMDQ0NkI2RkU2OTRDM0VGOUE5MTVDMDlFRkI5RjZEOTFCNjYKLToxMDNFRjAwMDI2MEY0MjRGNTM3RTQ3QjkyOUNCQzlDNEI4QkFEMERCOEQKLToxMDNGMDAwMDQ2N0JCNDU3NkVCQkZCMDJCMEJCQUEzNzQ2QTVFQjlCMDIKLToxMDNGMTAwMEYyOUJCRjNGRkQwRUFEQUE3REVBQjE2OTQwQTc5MjMxODkKLToxMDNGMjAwMDEyODE3MzRDQTM5RUZDMUYyQjk3MDg5RDAwODAwMDAwRkMKLToxMDNGMzAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJCNTVCQjQKLToxMDNGNDAwMDBCNzg1NEQ1QjU1RTY3Q0U5Qzk5NDkzMjJGOTIxMEMyM0EKLToxMDNGNTAwMDIzRjFDQ0U0NDFBODAxODc0NzI0M0NGQzNDMTAwODIwMTUKLToxMDNGNjAwMDA2MjdGODE1NTE1Mzk5NDQwNEM0QkM0MEI5QTY0MkJGNzIKLToxMDNGNzAwMDM5MjEwOTAyQTUzNjU0QUJENEEyOUQ1MEIwRDRBQThERTQKLToxMDNGODAwMDgwMzVBRDNDMDY0MTFBOEFENTY5QjVCN0Y0MTZFODI4RTQKLToxMDNGOTAwMDVDREU2MEMwNUFGMTE2RTVBRUI1RjczOTk5Mzk5MzA0ODUKLToxMDNGQTAwMEI1RkQzQTdFN0U5Qjc1RjZEQTdCQUZCREQ2QkZENjVFOTkKLToxMDNGQjAwMDZCOUY5MzU5QzUyM0U1MDU4NTAwRDdFODc3MkI4MEY4REIKLToxMDNGQzAwMEU2Njc5MjNDMUNDMEJBQTIxQzE0M0JDMEJERDg5NkQ4NzAKLToxMDNGRDAwMDYzRkQxMjgwRDI4RTM0NDBENDNDREIxMTdCRUU5NjRERDMKLToxMDNGRTAwMDAwRkRFOTc5MjM0MDExQzAyQzlERUZDNDMyODAwQzgwODQKLToxMDNGRjAwMEZCRENDMDdGMERDODM0MTBFMDhCMUIzOEZGNzQyQkNDNkEKLToxMDQwMDAwMEYzRTNGQTYwOEU2NEM3Q0YzN0REMzNEOTJCNjNGRjUwRkIKLToxMDQwMTAwMDU5RTBGM0FEODg5QTZERTlDODY3QjdCOUI3Nzg5MEZFRjMKLToxMDQwMjAwMDE3RTUyRTEzQzEyNkE0MDIzOENENTE0ODJEQTRGOTREMTEKLToxMDQwMzAwMDZDN0UwMDk1QzlGMzY1NzJGN0Q3RjZGOUFFMDgwREVEMDEKLToxMDQwNDAwMDM4RkVERDVCNkY4RDI4MjhEN0RFRTVBMzQ3OEI3MjZDQzkKLToxMDQwNTAwMEJERjFCMjg1RjE5NUE1RTFEODMxMDA1REJCQUNBMTREQjQKLToxMDQwNjAwMDI4MzdFMDdDMDJGMjdGQjQ2QjU4NjgyRDZFRUQxODc0MkYKLToxMDQwNzAwMDVEMDVBNEQ1OUQyOTMyRURBQjZFNzcwQUUzQUY0Qjc2OTMKLToxMDQwODAwMDg1MDRFQ0FGNzM3NkU1RkI1MTlFOTIzRDQ5NjExODgxNDIKLToxMDQwOTAwMEVCRUM0OTMyMDNBRUZCNTlDRUZERTNFNTIyN0EzRTc0RTgKLToxMDQwQTAwMDhBRTA0NEExNzc1QUNEODA3QzJCQjM5NTA5QTRCN0JFOTIKLToxMDQwQjAwMEU0RDdFNTRCNkNGNUZEOTc5NjBCQUFDQjA1MzBCM0M0NUUKLToxMDQwQzAwMEExOUFCMDVEN0MyNTA3NjAzNEMwNDNBQjY3QjBGNkY1QkMKLToxMDQwRDAwMDYwMjYyQTE5NjBFQTk1NzIwMERDNUJDRDk1M0JEOUYzMjYKLToxMDQwRTAwMERBMkIyOThDOUVGOURENDgyOUVEMDc1RTE3NjAwQkNBOTMKLToxMDQwRjAwMDVGMzZGODVCMkIwMUU1RUI0Qzg2RTEzQjcwNUY5RERFQTQKLToxMDQxMDAwMDJDNUYxMzc2NTdCN0NFNjBGQzY1QkY5QzM2OURGNjU1ODUKLToxMDQxMTAwMEJCMDM5OTY5NUM4MTEwQ0EyMzNEOURCMDlCNDhGRTg3MTMKLToxMDQxMjAwMDZENUNGQzhGRUJGRjNDNDZDNkYxMUY4RjcxOEMwNDY0MDUKLToxMDQxMzAwMEREMjdCNjNGMzk1RTYwRjZFQzI0N0I0RUZFQzUzRkI3MDcKLToxMDQxNDAwMEZGMEZGMjQ5NTc0NDUwNTAxRUVCMTU4MUI1N0Y5NDAzODEKLToxMDQxNTAwMEQ1QTQyN0U0MDM0MEJFRUE2RDAzQzcwNEVDNUYwNTRGMTYKLToxMDQxNjAwMEJGOTY2NEM0QTM1NDdENDkyMjNDNTlCMTJEODlFQjlGNkQKLToxMDQxNzAwMEE3RTEyNDUxOEY0QkJBRjFGNEQ1RkM2MDlFQzZGRjY1RDAKLToxMDQxODAwMDc4NkFGRUNGRTNBOUI5MEYzQ0I1RkMzQjc4QkE4RTFEMjcKLToxMDQxOTAwMDdERTA4OUUxNkNFNjIxOEUwRkM4NzFGOEI2MDBDMzBCOTMKLToxMDQxQTAwMDkzQkJEMzkyMTU2QTQyQkU3QkM5QUU4NEFGNkI1MDRGQUUKLToxMDQxQjAwMEZBOUM0N0Y2NEQ4QkUxRjU5NzlFQzBDRjQ5NEVERENFNzgKLToxMDQxQzAwMDlEQzk2QUUxOTJDMkFGNjJFN0JCODFFMkM2QkRFOUY1NzMKLToxMDQxRDAwMEEwRTBGMzc5RDhDNkM3MEQyQkQ5QUZCMEU3RkU1RUY5RTIKLToxMDQxRTAwMDlBRjE2RUUzNTdCNEYzMUVCMjMzRTFDNzhENzYxQ0MzNjgKLToxMDQxRjAwMEVDMjc5MzVEMTNFRDRFNzYyNUJCRDdFREI2NkVCQTlFRDgKLToxMDQyMDAwMDVEODdFNzA2N0U0NzdBNDlCNDJCQjg5MzRENzA3M0JDM0YKLToxMDQyMTAwMDVEQUM3NzEyNkUzRTBFOUI4MUZDQUIyRkJCNEExQkI4ODgKLToxMDQyMjAwMERFNzVCQTI1NkM5RTFFNjJFNzAxQTQ5NTBGNjc3ODM5OEEKLToxMDQyMzAwMEY0RUZFMEE1QUNBNEZERUZCNjdFMDA2N0U0MjU3RTMzODUKLToxMDQyNDAwMEYyQ0YyOUM2QUU0MUQ0QkZCNDU1MzE1MzdDQzE3RjhFNjUKLToxMDQyNTAwMDY3MzMyQTYwNjNGQUQ0RTg4NzIzNTM1MDhFOTk0Rjc2RTgKLToxMDQyNjAwMEY3QUJENDNGNzVBMjRCMUIwRjBBNkVBQjlCRkZCNDVDNDAKLToxMDQyNzAwMDFGNTlDN0U0NkVFNUZBMEU0NENERkVFMTcxRjQxOEE0QUYKLToxMDQyODAwMDFENzE3NDcxMDJCRDkxRjNEMzM5RTI2NkYzODREODczNjIKLToxMDQyOTAwMEMyOUYzMDhBNjg3RDNFQ0QwRkEwQUJCNDFGREE2RkQ2QzcKLToxMDQyQTAwMDBFQzFCRDE2RUQ3RENGQzQ4RjJDNjQ5RkIyOTJFODgxMDQKLToxMDQyQjAwMEMxQjhERkFCRjI2MzdFN0IxMjNFQTczODg4RjJEQTNERUQKLToxMDQyQzAwMDJCNUI1NUIzMzYxRUY1NThBREE5RDFEQTJFMjgyMkRBNkMKLToxMDQyRDAwMEE5QkE1ODA4NzkzRDNERjU2OEY3RThCOEQ0RDdDNUEzMjEKLToxMDQyRTAwMEQ1MzgxRTJDNjNCRURFNzhDMjA5MUJFRjY1RTNDM0Q2NEEKLToxMDQyRjAwMEFGQjFGRTVEMTM0MTA5RjUxMjI3MDc3OUI0Mzg3OTE1N0UKLToxMDQzMDAwMDY5N0Q3RUQ0REQ5REI4QkY1MDJGRkVFNkQ1RTY4RDk4NDEKLToxMDQzMTAwMDRDMzU4MEZBRkE4NkU3RTk1NjVCMTZEQTE3MzgzRTBBMUEKLToxMDQzMjAwMDNEM0ZGNEFCMUM4N0EwMjRFQ0Y3N0FGMkJBM0RDNkYzMEMKLToxMDQzMzAwMDlGN0VCMjcxN0NGODdBRkFDQUU4MzE1RUMzQzcyMjIzNDUKLToxMDQzNDAwMDVFNUM2NkZGRkU4RjUxMEU1N0JBRTA1NkQxRkVCNUZFOTkKLToxMDQzNTAwMEE0NzVFMDIyRkJFQkY4MEVGOTk1MjFCOEJGMjRFOEM2NUUKLToxMDQzNjAwMEFCMTFERjZERkUyOUE4OTc1QUQwRkI3RkRBNEFGMUNBNUMKLToxMDQzNzAwMDZGRUFFNkU3NzhERjI5NzQ4RjJGNDBGQ0I4ODA4RjJGMzMKLToxMDQzODAwMEY1NkM2QTU1MEI5OTNENTgzRkEzQ0REN0MxN0I3QjAyOTUKLToxMDQzOTAwMDNEMzFDMTNGMzQ3QzMzRkZBNEI4OERGQUM5RUIyNTZFQTMKLToxMDQzQTAwMERDQUZEOUVEODIwMDczMjlFRTQ1MjZGMzdDMkZFMkU1RTAKLToxMDQzQjAwMDZEOTM4N0U3NzcwRjY5N0E3QzU4NkIyM0M5NzE3QTE4RjgKLToxMDQzQzAwMDEyQjMzM0ZFQzI1MDYwRDgzN0QzRDNEREU5REFCRUQ1OUQKLToxMDQzRDAwMEJERkVEQjcxNUY5MTU0MTgyRTIwNEVCRUQzQjZBQkI1MzcKLToxMDQzRTAwMEY5OTZEOEY4NjBEQjVFODY5M0VFRjlENDNEMTEzQURGOUEKLToxMDQzRjAwMEVGRDZGNEQ0RDQxNjhFNjgzODEyQzhFRjZBMTgyMDEwOUQKLToxMDQ0MDAwMDA3M0IwNDU1QzQ3REQ2MTAwRTdBRDk2NzU5NEZCRjUxNkEKLToxMDQ0MTAwMDEzQzYyQkQyNzVDNkRGRDk3M0JDOTIzMDFFQTRGNEFGN0QKLToxMDQ0MjAwMDMzNUVCM0QzRUQwOTc2OUM5RTYwQzcyOTA5NzQ4NTRFMkYKLToxMDQ0MzAwMDg3MENGMTRDOEY3MzU1MURFQjVCMzI1MDhFODdCNjBBOUIKLToxMDQ0NDAwMDc0NEM1MEJDQjYwODIzMDEzNjc4MEVGOUVERTMwOEFGODIKLToxMDQ0NTAwMEIyMzQxODYzRkU0NkNGRUYyM0I2NjEwMEU1MTRDRjE4REYKLToxMDQ0NjAwMDdFREY2OTU1NzI1MTRFRjI3NzQ2QkZFQjU3NkUyMkZDRTQKLToxMDQ0NzAwMEQ0Qjc2NDIyRkYyNjRGQTRENTg2QUNGNzM0QUY5NzI4NzMKLToxMDQ0ODAwMEE3NzlDMUYzQzc1NjMzQ0U3QkY3OTg1RjFFQTBGOUNDNEUKLToxMDQ0OTAwMEMyRkI5MURCM0REN0MxNkI2QkMyM0UzNjI2RDA2QTAyQjAKLToxMDQ0QTAwMEZGNTM1RjEyREY5QjEzQzZBRjQ4RTg1Rjk3NDA2RjQ4MkEKLToxMDQ0QjAwMEEwNTcxQkM3NTdDRTE3OTg5RjU0QTJGRDQ4NzE1RkU2QkYKLToxMDQ0QzAwMDM3M0IzRERERjk0MkY3NzkyNkQ4NTk5RTY0QzBGRENDRDMKLToxMDQ0RDAwMDI2NEUxRkYwN0NFODVGNkQ4RkEzREI4RUZCQzlERjc1NzYKLToxMDQ0RTAwMDFDNEJDMDdGRjdBNjgzNEFFNzg3RDQ0NzNDREJEMTE3MzQKLToxMDQ0RjAwMDhFMEExMkNGM0JERUZGMzdGQUU3NDBDQTNCQzE3MDJFNkYKLToxMDQ1MDAwMEVGMTM4REY0NUU1MUY3Qjc0QjkxNDcwQUU5QTE0RTc3NEYKLToxMDQ1MTAwMEY5MDM0OENGN0NDNkI4MkZBQzBCQjVGRThCRkUyOUU4NUIKLToxMDQ1MjAwMEZGMzNCRkFGRjc1RkY0NTNEQ0QzRjdBOUYzOTc3RTdFNzkKLToxMDQ1MzAwMDREQTRGNThFQjQ1REYwNkZDNkZFOEFDOUUxQkM3QTk0RDUKLToxMDQ1NDAwMEIzMjI5NUI3NzhDRTg4NzQ4RUQ1RDlCODNGOTVFRTEyNDAKLToxMDQ1NTAwMEZENzRDRTU0MjQ4N0YzOTYxNkM2RUQxM0RBRjM2OTlGRTMKLToxMDQ1NjAwMDdCOTc4QkNDM0U2QTEzQUY0N0FBQzA2NzAxMkM4NUY2QjgKLToxMDQ1NzAwMEJBNUMwRDJGMjBGRkJFRTU2MjAzOUQ2QkM3MUFEMjMyRDUKLToxMDQ1ODAwMEE4OUUxOEVFRTU3OURCM0VENzBEMTkwRjIwQkQzNzY1RTMKLToxMDQ1OTAwMDlFNDU0NkJFQkQ4RjRGNjVFRDlCQTJCMkFBMEI3MUZDMzYKLToxMDQ1QTAwMDdGOUVDRkZERjY2MUQ0RUY2MkZBRjk0N0RCMTU3RjIzREEKLToxMDQ1QjAwMEZBQzU2NzFFOTlFOTMzOTBFQUNFRThBMDdDNzVBRDA0OTAKLToxMDQ1QzAwMDVCNjQ5MkM3RjczQ0MzQ0RGN0FDMjNEN0EyMUM5NThEOTMKLToxMDQ1RDAwMDM3NjY1MEZFNTZGNUMzRjJEMjgxQzg1N0Q1MjJGOTA0OEEKLToxMDQ1RTAwMEM2MDcyMzQ4RUVDMERBQTkxNkVBOUZERkFDQjVFQTM0NjUKLToxMDQ1RjAwMEQ2RUVGOTYyRkJBMTExQzhERkI1NDZGNDZENDJFNkRERTcKLToxMDQ2MDAwMDU3QkNDRTJBOTRFQjc4MTI4RkMzMUY5RUNGNzU5MjlDMTUKLToxMDQ2MTAwMEVCQkQwMUM5OEI3MjU0M0ExREM5MDIxRDFFNkVEOTM5RkEKLToxMDQ2MjAwMDFCRTc3RDIyNDdCMTc4OEI2MkZDN0JCRTEwRTc1MUJFNTEKLToxMDQ2MzAwMEY5QzZGOUFBMENCMjlGREJDQkYxQkFGQjRBNTU0NjU1MzUKLToxMDQ2NDAwMERDNzlCRkUwODI5OUU5Nzk4RjQ1N0U4NEYyQ0IzREM5NjAKLToxMDQ2NTAwMDU5ODIyQTMwM0RBNzk1QTNCRkNDRDdGMjZCQzQ0QkMzNzgKLToxMDQ2NjAwMEY2NUVDRUZEQ0YzRDIyRDNDQjA5NkIwMzFDNDcxMEVGODYKLToxMDQ2NzAwMEZENkVGRjg5MjRBNzNFQUVFOEZENDA5MzgzRjAzQzQ0RTUKLToxMDQ2ODAwMDFFMTU5RjQ3RjdDQjlFM0M4NEY2MTFDMzU5REExRjA4Q0QKLToxMDQ2OTAwMDM3MkM4RjQ2N0FBOEQ3QkQ1RTQ1NUNDMTNFQ0NGRjQ5MUEKLToxMDQ2QTAwMDhFNzRBNTk0Q0UwMTU4ODEwQzE4QzcyMEIzM0QzRkZFRUYKLToxMDQ2QjAwMDNFMjI5NkE3QUVENEUyMDFFNzNCQUEzQTU4REQ3QUY0NEYKLToxMDQ2QzAwMEE1QTQxMEQ1MzM0N0Q1QkYzQUMwMUVDRkNGRkQ2NEExRjYKLToxMDQ2RDAwMEQzQTFEMjYxN0NDQUUxMzA5MzVFOEY5OTgzMjdCRjhEQ0QKLToxMDQ2RTAwMEUzMTYzQzI3QjEzOEJBRTBCOUZFMkJCQTI4MUVBMDNEMkMKLToxMDQ2RjAwMEYzQTBFN0JBQUE1NzYyRjNGNEU5MjdFMDI5MzdGODg5NkIKLToxMDQ3MDAwMDJBOTcyQkY2QkVGRDY0OTI1NzJFQkY5RTlGMkNENEYyQTMKLToxMDQ3MTAwMEY2RDJFNzI0M0ZFMTdDNjE5MUMzMEMxOEFGMjczRkY3NDUKLToxMDQ3MjAwMEQ2MTZDMkUzQzIyNTQ5QTNBQzI4RjhDMkU3QUNDQ0JFN0EKLToxMDQ3MzAwMDUxODc0Mzc1NjM3RkMwRTkzMEY3QTNCOEVFRTU3MTI0NzQKLToxMDQ3NDAwMERBOThDNEVBMTQzMUMzQzJFMjlFQjhBQTQ4MjZGRDk0OUUKLToxMDQ3NTAwMDg4NjBCNkUxQjkyMjNBN0RCMjlGRDNDRDZFQUNEQjVBMDgKLToxMDQ3NjAwMDFDQzUzMkQ5RjczQjVFRUUwRkRERkRBRUI5QjcwOTU4NzcKLToxMDQ3NzAwMEQ3NUNDNjdEQTRFMUI4MzMwRDRGM0UzRDE2RTUzQjBCM0IKLToxMDQ3ODAwMEExMzk2MzUxRUY5N0M5RDBCOENFRTUxRDYyNDhBNTczMzIKLToxMDQ3OTAwMEMyQUM5OENCMzBFRTJEMDJFRUVGMzUwN0I3NUIyNkUxQzkKLToxMDQ3QTAwMDNGMTdENTJGQkM5REVBQTMwNzQzRDI4NzUxQURGNkI5NzkKLToxMDQ3QjAwMDg2RkY3RjAyNkY1QjI4QkY3RDY4QUJGMTM5N0E4Qzg1RkQKLToxMDQ3QzAwMEZDQUFBNkRERjhCQzBFRDY1RDEyNDc1MDZCRkUzMDVBMkYKLToxMDQ3RDAwMEEwM0RDNzc1MUI4RUZDNjVGOEZFMzhCRTVBQUYyM0ZEQTEKLToxMDQ3RTAwMDI0OTZFMDMwMEE0NkExNjY3MTlENDJENzVEMDRCQjA2NUYKLToxMDQ3RjAwMDkxQzkyQkFFNEMwQTkxMUVDNTZDN0UzRTRDMDMyMTk0OTAKLToxMDQ4MDAwMDQ0ODA3MEUzQkU3MURENEY4Mzg3ODdFRjQ3NDA4ODhGMTgKLToxMDQ4MTAwMDhENjY3QTM5MTE0NDNDMEQ0NTdEMzg2RDhDNUY3QzRDM0EKLToxMDQ4MjAwMDBDNTk3MUREOTIzNDUwRkE5MTNFOUYyRTA3NzAzMDdEMDUKLToxMDQ4MzAwMEFBNkVBNEE3QTVENzlCMjkzRTlERDNFMjRCQTUwMEZFNTcKLToxMDQ4NDAwMDc2RTZGN0JFNkNBQThGMTczQzk3QzRFQ0I3RjBGOTA3NzEKLToxMDQ4NTAwMEZGRkI0NzYzQzg1RTY1RTlGMTdFQjQ0NkMzMURDRTA3MjIKLToxMDQ4NjAwMEI2RDREODNDQTcxQUJGOTM0REYyOTRGQzA0RUI0QUFBRTUKLToxMDQ4NzAwMDM3QzVDMEQzNzdCMzc4OTlFMjYzNzFDQjFERkRERTU4OUQKLToxMDQ4ODAwMEMyNDk2M0NBQzhCNTQwMzgxOTk4RUQyRDhDOEQ1RkI4MDAKLToxMDQ4OTAwMDcyNzkzRTFGOEZGNUFBOTNFMjU1MTJEQjRGRjUwRTJCNkUKLToxMDQ4QTAwMEMzNDlFNTFBNTE2MUU3NjM5Njg1OUQ4RjFGMzYyNzMxMEQKLToxMDQ4QjAwMEJBN0E0ODMxRjNCMzRBMTMwNDY4MUY5ODBCNjZCMkI4NEEKLToxMDQ4QzAwMENFNTUwRUQ1NzY1MEI2REIyOUNFQUY4Qjg4NEU2NjFGRkYKLToxMDQ4RDAwMDU1QjM5Qjg1RUNCM0Q5OUJDNkZDNzcxRUU5MThDRkFEQzkKLToxMDQ4RTAwMEZEODRCMzIyMzYxRkJGN0ZEQTJEODRCNkIwRjg1NDJGNzMKLToxMDQ4RjAwMDkzRkY1Nzk4MDQxNkU3MTJGREYxMzUyRkNGNUIyQkIzQ0EKLToxMDQ5MDAwMDdERjdEMUI4OUEyN0FDQkU5NTFFMkU4M0E4Q0I4Mzc4QUQKLToxMDQ5MTAwMEFBMzE0NTE2RkM5OEU2RkQ5NTk1REQ2QkQ0RTEzRTkyRjMKLToxMDQ5MjAwMDlDQUNCRTUwQjZBMUZDNzU2NjMwNUJFODVFNEFFNkYxMTEKLToxMDQ5MzAwMDRDOTdBNzRFMkU5RjQ2MzhDNUZFQzM2NkVDQUY3MUYwNkMKLToxMDQ5NDAwMDc4NUNEMzhGREZGNzgwQzMxNkRBMTJCRjFFQzk5Q0MzMTEKLToxMDQ5NTAwMEM3Qzk0RUYyQjM3MTBDMkZFNEY3MjZFQ0ZGMDg3ODdGM0QKLToxMDQ5NjAwMDg5QjM1ODhFRTJGMzRFMTNBQ0E2N0IxMjkyNjdEODg4QjcKLToxMDQ5NzAwMEI4NzU5MTFFMzg4MkYwQjhDNEVDNzU5MDFERDJFNkNDQTMKLToxMDQ5ODAwMEE1RjU1RTE2NTk1QzQyNjc3QUEyOThGMkJGOTdDNUQxMjkKLToxMDQ5OTAwMDU0Qzc1NkFFRDk1N0JBODFFODU3NDdCQTQ5ODRDQTU3NUYKLToxMDQ5QTAwMERFNjNFN0QzNDMxQUNFQTI5NEY3RDM3OTg1RjRBQkQ4NkMKLToxMDQ5QjAwMDFFRDVFMjQyNDBFNEY3Mzg0NzQ5OEZGRDYzN0FENUZCQzQKLToxMDQ5QzAwMDZCRDY0OENDMUUzNTJEMUMwRjM1OEQ3RjY2RjNENjM4M0YKLToxMDQ5RDAwMDIyMTk2NDhGOUFEN0E0OUIwOUQ3MjczNUI5QUIxQUIzOEMKLToxMDQ5RTAwMDI2MUU0NjdDNTQ0OTJFQjc4MDhGQUFENTMyMEJEMUQ1Q0UKLToxMDQ5RjAwMEFEMDJBM0Y1RjU2QUQ2RkMyOUMzNTRDOEU3QTNENkFBMkQKLToxMDRBMDAwMEUxMjgzNjZGRkY2QzNBQ0ZDRUJEOTQ5NjVEMTk2N0Y3RkIKLToxMDRBMTAwMDczQ0RBRjNCNjUzQkY5NEQzOENGNERGNzMwNEI5MjdDQjIKLToxMDRBMjAwMDlCOTg5RjcyN0I5QzZCQ0VEQjQ0RjczNEYzREQxMTg3NDAKLToxMDRBMzAwMDgwRkRGMzFGQzk0OUE1NzNFRTk4M0I2Q0ExRkU2M0VEQTEKLToxMDRBNDAwMDFFMTNEMThBREIzRDkxNjhDNTdDMTNBM0NGNjEwODZGMkIKLToxMDRBNTAwMDJGRDRDMDhCNzZBQTE1Mzg2RUFBNUZEQTY3RjFFMjdBOTYKLToxMDRBNjAwMDI5Mzk1QzNGMTc1RTdFMkY5RkVFMEI2QUIyMjNGOTc0RTMKLToxMDRBNzAwMEZFMjJBRUYyMDc5MzVENUUxNDU4OUU1MEZCOTJBODI0NkUKLToxMDRBODAwMDhEODhFMUFBOTY3MDg1RkVCRjU4QzM1NUVEOEVENzFGNUQKLToxMDRBOTAwMDI1M0ZBRDI1M0M4REVBODk0QkFDMkJGN0IzRTdEQkRBM0MKLToxMDRBQTAwMDRBODE4RkRGNEZCOEQzQ0Y3QkE0OUIyNUJBNTdCMzY4MTkKLToxMDRBQjAwMDM0QUU0M0I0M0Q4N0VCMUZGQkE3RjA3RUI1OTA5RDIzM0EKLToxMDRBQzAwMDEwQjU1MDNFNUMyN0YyM0MwMUZEMjk5M0YyODhCQTBFRTYKLToxMDRBRDAwMDQ5RUQ4RTk3QjQyRUY1MTdDNkZBRkJDMkNERjAxQzkzQTQKLToxMDRBRTAwMDY2NjcyQjNCOEY4NkU3NzBGRjhCQUU3OUNENDlCOEI4RjAKLToxMDRBRjAwMEYwRjJCRTAzRTNBOUJFREEyNkI4MjlERUY3RjA0MzREOTMKLToxMDRCMDAwMDZGNzVBNDI3MjdEQjI3Q0I4QkVBNDgyRkNFOTg5RUJBNTgKLToxMDRCMTAwMEZENERDMzQ1MUQ3MDNERTg3QUE5MzM2QjdBRDJGQkI1RDQKLToxMDRCMjAwMEYxMjMzNDNENTQ4M0E2RDcxRDQzQjlCRjZCRkVBRDlGMUYKLToxMDRCMzAwMDIzRkFGRTAyQTk3Q0JDOEVBRjc5REFGRTI2NkE2RDM1QjcKLToxMDRCNDAwMEUyQzY1N0M4RjBBNTU4NkVENkVBN0VFQ0JBRjA2QTFCRUEKLToxMDRCNTAwMEJCMzdEMkVEQTlDQkZEQThCNjNFQzY2OUE1NUY2QUNDMkUKLToxMDRCNjAwMENFNTExMzJDRUFFRDlFN0FCNjg2MkJDOUNFRTNDQTA3NDYKLToxMDRCNzAwMDhEODNFRjZCNDBGRDJEN0U0OUY0MzFFNTUxQ0QxNUI3QTYKLToxMDRCODAwMEFFRDUxNDc1QjBCQ0Y0MzFEMTRERkIyQUY5NDVGOTZEQTEKLToxMDRCOTAwMEI0NkYxRDc3RDI1NkMxREMzMTg2RUE4QzdFNENGRkJBRTkKLToxMDRCQTAwMDdDMjUwM0ZDQjdGNUUzQjgwQjkzM0NCQTlDMUYwODYxNjYKLToxMDRCQjAwMDY2MkZGNTU1QzFDREYzRENBODg1RUUwRjc1M0Y0RDk0RkEKLToxMDRCQzAwMDc3OUU2NjZGRDEyOThDMTc2RTIyNzk3QzMyRjkzN0UwOTcKLToxMDRCRDAwMDM5QzhFNEIxMUY1RUNFRDY1MzhGMkVGNzhDODhBRDczRTMKLToxMDRCRTAwMDRDNzU5ODg5RUYxOEYwMzhBMEUzRjIwM0VEM0VFMjgzQUMKLToxMDRCRjAwMDk2RDc1OTFFQUNBRkIzNENEMzRCREMzQTgxODZGNDlFQUEKLToxMDRDMDAwMEVCRThGQzM1MUFCRkVFMTc5REE5MUNGRjI1Q0Q3RjY2OEEKLToxMDRDMTAwMDdDN0E5Q0E1MUZEREMzRTlGQUQ0RjUxNkU3OTcwNkZENUIKLToxMDRDMjAwMEU4RkVBNUZCOTM2RUQ3N0ZENUFGNjA0NTdGOTZBRjNFN0MKLToxMDRDMzAwMEFFRUQ5QkY5NDg0NkVDNUMyMDdDRDI3OTY3QjUyMDJFMUUKLToxMDRDNDAwMEVEODY3MzkzRTUzNUQzODY1Q0IyMDQ3QTc5QUVFQjI5QjEKLToxMDRDNTAwMEYxNzlBQzlFNzI2NzkzRkVBN0Q5MzM0RDk0MDc0MDczRTgKLToxMDRDNjAwMEU2RkVEQ0I4QkNFQzM4REQ3NzUxM0NFRDBGRkM3RDA2OTAKLToxMDRDNzAwMDg2OTRGOEYzNUNDRkQ3RjRGMzFBN0ZFQkJBNzE4OUUzMkIKLToxMDRDODAwMEVCRDI5NTMzRDRCRjY4Q0M5MjdDQ0EyMzJFRTU3OEQ5NzkKLToxMDRDOTAwMEJBNjdBMUREMzIwOUU3QUIzRTFEMjk3NUNBQjE3QUU1RDUKLToxMDRDQTAwMDk2QkY4NzQ1MTdERDA3RUVGMDE4RUE4NUVBRjNGQjk5MTIKLToxMDRDQjAwMDdGRDc0MDY0MTVENUI3OTU2QkRFMkIxQjRCNzZGRjM5M0MKLToxMDRDQzAwMEU2RTNDODM3QkZENUMzQ0VCRDMzOUJFRjFGNERBNTZDMDAKLToxMDRDRDAwMDY1NEIxRUEzMUZEQ0YyMDBBN0Q3RjA3Q0FFQjJBNUU4OUYKLToxMDRDRTAwMDA1QkE4RjNGOUVBNDk0MTJCRUJCRDYwQjZFQUFCNzI2MDAKLToxMDRDRjAwMDZDMjk1QTcxMEZGNjRGNzBEQ0QwOEZFNDNFQkFGOTc4MDgKLToxMDREMDAwMEQ5NzhBQTFCMUE0NEU2MkZDQUU2MjdFNzUwQkZEMjIxNUEKLToxMDREMTAwMEZBNjhBQkYzQzFCREUyMUVDMkI3RDlDNUZDRUQ5ODc2MDcKLToxMDREMjAwMDRFMzQ0OTFDNjc2RjZCNzE2MjdGMEUzRjJGRjc2QjM4RjMKLToxMDREMzAwMDJDNjk2QUNBMzdEMUJBNkQ3ODNFRTFGRTJCMkM3MjdCQTIKLToxMDRENDAwMDk4RUFCRTVEMDM3QzlCNDg1RjU4QTY2NjIyOEU0RTBCOTgKLToxMDRENTAwMDNDRkY1RTY0MDExQkUxRUFBMDE0NTk0NkYyMUY1Q0U2QzkKLToxMDRENjAwMDE4RDk0ODAyODg1NzZGQUVFMjc1M0E4QjJGNTgzN0IxODEKLToxMDRENzAwMDc1NzU3REU5RUIxRkQyRDZENUU3RDFDNzc1NTIzRTQ1OTMKLToxMDREODAwMEU3ODcyNkVGOTlFNjlGQ0ZBMTNDRTFDQ0Q2QkM1NDg4QkIKLToxMDREOTAwMEQzRkIxOURBMTdFQUZCNDE4QzhCREI3QUE5RkYwRUU3MEMKLToxMDREQTAwMEU4RjdBQjIxRDYyRUQyRUUwRDBGNEFBRDQzRThGRDJEMkMKLToxMDREQjAwMEU2RjEyN0UyRjNGMjUzNkQ0OTM2QzIyM0U2RjFDNkU3ODYKLToxMDREQzAwMDEyM0Y0RjMwOEYzNzNDNDdCRjM5NjFDQ0Y3QjVGQTRFQjEKLToxMDRERDAwMEFDNzAwNTdBODk0MzdBOUI5OEU3OUZDQkIxQTc5RkJDQkIKLToxMDRERTAwMDExN0FFNEY5QkFERjI1OEVEN0YzRkFFRTdCOTYyM0Y2MzMKLToxMDRERjAwMDg0RjczMTYzNUQ3MDlERjVDRjA3RDEzMDU4RkJGRDk0OEEKLToxMDRFMDAwMDdDMTdDNzRGNDlGOTdDN0I4NEVBQzk1NkFCREI4QUZBMjkKLToxMDRFMTAwMDNENDE3RTQ1RUYwMTVGMTM3OTlFNjgwMzVGMTg3MTcxMTQKLToxMDRFMjAwMEUyNEZBMzdERTQ4NzBCOEU3MEJGNUJEMDJFODRFODE1MjQKLToxMDRFMzAwMEZCRkVGNThGOEJDNEZGQzA0NjAxMDYwODcxNzVENjUzODMKLToxMDRFNDAwMEVCRTc5MERCNURGNjA1NTYwRDQ0RkVDQjVCMDU5RkNBOTQKLToxMDRFNTAwMDI0NTRFQzA5RjVENTgxODE3MkRGRjVENUJGNUI1N0U5QTQKLToxMDRFNjAwMEY3NEM4OTdBMUY5NEFCRDU1NzNFRjAxOUY1Q0VFQkYzOEEKLToxMDRFNzAwMDNEMDg5RkUyNTEzREY1N0UzRTE4NjA3NUQ0QzVFMDIyQTUKLToxMDRFODAwMEQ2OEU2QjZGMkIxOThDRjI3RjI0N0NGMEM0MDRGMjFGM0EKLToxMDRFOTAwMDg3OEJERDkzOUMwRkQ2QjM5NzgwMTczQjQ2NUY5RDg1MkMKLToxMDRFQTAwMEZBNzlDM0VFNzI1M0RDQjgxODZDNjBDRkJCRjFBMkUxQTMKLToxMDRFQjAwMEYzOTYxRDdCQzVDMUMwRjg3NzRFNDBGRURENzYxN0JENjkKLToxMDRFQzAwMEQ2RThFNTdEMUJCNzJGNDAzMjdGM0ZBQUQ1REIwRjJGRjkKLToxMDRFRDAwMDE5M0I4MDlFRUJGQjNERkI2RDZFNjc1REZFQjM1QkVGQTgKLToxMDRFRTAwMDc3NTI3RUJBRjdDNzY5M0JDNzkxN0Q1MzVDNkU4MkQxMUEKLToxMDRFRjAwMEMyMEQyMjA0NDY2MzNFQkM4MUM3QTFEMzM2RDcwQjc0RDIKLToxMDRGMDAwMDVGN0E3QUUzOUQxOTU0MEYzRTIwNzU1OTdDMzhBRjZGNTQKLToxMDRGMTAwMDU3Qjk5M0VFNDFGRUQ3MUM3NUJBQTk0NUZFMzBDOTYxNTkKLToxMDRGMjAwMDBFODkxNEZGQzY0RjA3RjYxRTcwN0NEODBDQjI4N0JERTEKLToxMDRGMzAwMEEyNjczODE5NzdERTFDMEEyMzdEOEVERTBGRDJCOTdENzkKLToxMDRGNDAwMDM1OTlCRkE3RDdERUZCM0RGMDZCN0U5RkQ2N0Q3RkEyNTQKLToxMDRGNTAwMEREMjM0Q0QwRjZGQjVGQjlBOTFDRTdEQUYzOTI2MkZFQzEKLToxMDRGNjAwMEZDRDRDNkVEQjM2OEJFMzM5QjI1MzdDOTdCNzFCM0M0OEYKLToxMDRGNzAwMEU2NUY4Qzc1QkMwOTcxNzgxQUYxNDZGMTZCRjFGQkEyMDIKLToxMDRGODAwMDhGMjA3RDY2MkJBRjkzMTcyMzZFRTlCRUI4NjY4OUE0ODgKLToxMDRGOTAwMDU4NUMzREYxNThBMkYzRUQxNDU4N0RBREUzNzJCMTEyQTcKLToxMDRGQTAwMDJBNjU3QUQ3RjA2OUMzRkZBRUUxOTFEMTBGREE1NzkxNDQKLToxMDRGQjAwMDNFMTI3MUZBQUZENkZEMzVCOUJERDdGRDg5MzhEMEY1QUYKLToxMDRGQzAwMEE1RTMyMTg2NEY2MEI4RDRFRDlFREEzRTcyRDI2MDM2RkEKLToxMDRGRDAwMDQwNjU3QTU0Mjc0MzAxRTUwNTREMTYyODMwMTMwRTRDRTEKLToxMDRGRTAwMEM5M0VGMkYzMDY5QjczMDRERDMzN0Q5QUM0REI0NzRENjMKLToxMDRGRjAwMEVFQjdBODVFRkVENDI0NEIwMkI2RDE1QzBGMUJGRkE4MEYKLToxMDUwMDAwMEU4OUI0QUI0OTQxRTY1RjcwMzYyODk0OTMxRDE3OUQ3ODgKLToxMDUwMTAwMDY0NjVGMTIyMzFERUFDQzlFNTcxMzgyQjhGQzc5QjJENTkKLToxMDUwMjAwMEI5NkU5RTNGNDIzRENCMUZGNDE2Mzc5ODQ1Rjk0OTc5M0EKLToxMDUwMzAwMDRBRUEyNzMyQjIzQ0JENzlDNjZDMzNFRUFGN0M0MkVBMTUKLToxMDUwNDAwMEIyMUNDQzJDOUZERjdDQzc2QzdBQUY1QjNFM0FGNTM1NDcKLToxMDUwNTAwMDJGRDJBMURDNTlCQ0ZGQTZENDIyMDlFOUM2NDZGRkVDMzkKLToxMDUwNjAwMDI5RDhCRjJCNTc3OTJBQjcyOEI2OEUzRTJGM0U3Rjg2ODgKLToxMDUwNzAwMDlFRkY3NjQwRTBEOURDRkU3NDlFRDk1NzUzQkNGRjQ4QjIKLToxMDUwODAwMEU4QUEzNTg5MzFGRTNGMDg3MEVDMEQyMTQ2NDcyNUM4NTYKLToxMDUwOTAwMEE2N0M3QTRCMkVCMDdERjRENTlFQzk1NTdFOUFEQkNCOEIKLToxMDUwQTAwMEYzMkE4MDE2RDI2Mzk1RkFEQkMzOTRBRkUxQ0Y2RjQzNDYKLToxMDUwQjAwMEJDRERBMUUxQURDQTY2MEYxMzJFNjBCNTc0QkUxQjE3MkYKLToxMDUwQzAwMDVFOEE0QjJFMzNGOUY3MkNDRERDNzc5OEMzN0I2OUZDRDUKLToxMDUwRDAwMDMwNjg3NjlGQjRCMTU0NzBFM0I1QjRCRUUzM0MzQTI2NzEKLToxMDUwRTAwMDlDRDRFN0MzRkQ3RDI0RTE3RUQxQUU4MjgyQjY0Njk3OTMKLToxMDUwRjAwMDEyNTBDOTE1MThERjg0OURCRkZEOENFNjZENTIyMTlBQjAKLToxMDUxMDAwMEM0RUM1MEUxQTZGMzQ4ODA4MEU5MUFCNjM1Mjk4ODA3MzcKLToxMDUxMTAwMEQ0RDNEMkQ3MkVFQzI3RjgzRkE4RTc1Mzk5RkNGQjhDQzkKLToxMDUxMjAwMDY1MUExRUVGODgyOENGQjRBMTUwQTc4MjkwOUU4QkI2MzcKLToxMDUxMzAwMEJFMDA2RjVFMzRFM0JBNjc0QzgxODNBNDk3NkFEM0RCMDkKLToxMDUxNDAwMEQ5NEI2NUYyREIyNjI3RTUyRjE3NUUxMTdEQjdFM0I4NTMKLToxMDUxNTAwMDZBMkQ2Rjg3QUI2MkY4NTY3Q0RFRTkxOUI2Njk2RDFDNjMKLToxMDUxNjAwMDhFRkU5OENCRjM5NEYzOUU3MEY2NzI4QTFGMUU1RTc3QzQKLToxMDUxNzAwMEMyRDU3REQ5Q0I5MTdGQkE3NzQ2MTE5RDRCNEY4MUYyMzUKLToxMDUxODAwMDdFNkVEQ0ZCQzU1OUU2REVCRkJGRjhGRDIwOUU3N0MwMTIKLToxMDUxOTAwMDY2N0VCRTVBQ0RBMDNBNTI1OTBCNEVENEM3MEM5NEE1ODgKLToxMDUxQTAwMDE4NjkwOTY5OTFCRDhGMEYzMTNCMTI5RjkzRjIxNEY5NzEKLToxMDUxQjAwMEZFNENGRUJFMDZGQ0U0OEZCQTFENzVGQkY0QjAxQjhBRTQKLToxMDUxQzAwMDRDRjlCOUM5MDYxMkY5Q0IzMEQ4RTgyNkZGRDZFRDM3MkQKLToxMDUxRDAwMDU1QjRCMzc4QjNGNDM1N0UxRkI3NTQ4ODM2QTcxMUZEQTQKLToxMDUxRTAwMDMyOUU5N0E0MkZDRDJGN0I5RTlCNUIyQzY0OEE0NTFCMDAKLToxMDUxRjAwMEVGNjdGMTQ5OEY0QjMyRkU0N0Y4Rjk0RkRENEIwQTc5RTMKLToxMDUyMDAwMDBFOUVBRjhDODQ5MTg0QUIyRkNCNzdGNEI4ODRGNkIxMkIKLToxMDUyMTAwMEU1N0QxREZCOTA4QTcwQkYwQkI1QjVBNzhBMTVCMjk5QzUKLToxMDUyMjAwMEY0RDJERkU2QTNCOEJDRjRCOTFDNzZERUMxQkExRkIwNzUKLToxMDUyMzAwMEZCMEY5RDBGMzZBNjMxN0NBRUYyODhDQzhFNjUxRDgzQTgKLToxMDUyNDAwMDQxQzY0NzBGNzYwODIwRTMzOTc3N0I0NzFBQTM5RDU3NUQKLToxMDUyNTAwMDA2MzJCQUVDNjcwMzI2NTNGRURGRkRERUYyNjc0MzE5MjAKLToxMDUyNjAwMDdERTY4NTQzNjMwMkZDN0VDNTQ2NzJGODQxOTdBM0IwOTQKLToxMDUyNzAwMDlERjJBMUNCNzY5NDAzRURFMEI3QUY2NkY3ODU3RUU4QUIKLToxMDUyODAwMEFFNjM4NDZCMDJEMTg4MTJGMjI3NDU1MkI5NUQ2QzhERjIKLToxMDUyOTAwMENDQUZCNTdEMkQ3NTczM0IyRTNEQzhDRkREQTU5M0Y4MDIKLToxMDUyQTAwMEZCM0RCMzNBQ0M0NTc4OTAzQTQ1MDgyMUZEQ0Q4MzYyNjkKLToxMDUyQjAwMDUxMTg1OTlCQjRCODZDQ0QzNDgxMUM2NzhGMjQzOTE5QUYKLToxMDUyQzAwMEU0QjhGQTBENTQyNTQyNzVEMjVDMEQyNzI5MDVBOTg2NEMKLToxMDUyRDAwMEZFQzc4NTgwNDQ3MkNEQjUyRjYwQjg3MUY4MDYxOUU2MTcKLToxMDUyRTAwMDhCNjQ5Nzc2MzI3RDA0Nzg3RUFCRTMwOUM0RjM2NjkyRDMKLToxMDUyRjAwMEYzOTM4OTAyQTQyMTJFQkUzOTE3RkJFM0U2OTUyNjVFQkYKLToxMDUzMDAwMDlBMjJCMEQ2OTgxN0EzNUU0RTVDMEY0RjMzRjNCNEYzRDYKLToxMDUzMTAwMDZFMTgwQzYzNzg0QUQwMEZGQTA3Q0IzRjJGRTMzOTRFNTMKLToxMDUzMjAwMDY5MTM2NjE3Q0Y0QzQ0N0E0RUE3MDQyMTk5RTU5QkNDQUMKLToxMDUzMzAwMDdGMkUyQjI5RUNGRUJFNDVEMzkzOEUzQkZGNTA3MDI4NjkKLToxMDUzNDAwMDM4QUZBQkQ4QThCNzdFOEE1MTZGNjlEMzhEN0FFQUVGQjAKLToxMDUzNTAwMDM3RUE2NUMwNUNBRkExN0Y2MEUwMUI4NkZFQzE4QjQ2NkIKLToxMDUzNjAwMDE5RThBQ0ZBRjEwNkZFMUIxQTI2MUI2ODhGN0E5QjgxOUUKLToxMDUzNzAwMDNGNjdGNTZDMDM5REQ3N0E4RjgxN0ZFODg2MkE0M0ZGQ0MKLToxMDUzODAwMEIwRDA2MjQzRkY4RDVCOTcxQUU4RTFFRDhGMTlGODZGOUIKLToxMDUzOTAwMEVBNTg2OUU4MUYxOTVFNkJFODFGRERGOTAzMDM1RDE0MjUKLToxMDUzQTAwMDc5RDZDMDNGRjZGMDI2NDNGRkI4RTg4Qjg2RkUwOUE3MDIKLToxMDUzQjAwMEI3MTlFODVCQkE3RTYzRTBCRkY1Q0E5QjA2N0ExMjFDOTgKLToxMDUzQzAwMDMyRjA5N0Q4REUzM0QwNTNERDdGMzVGMDRGQ0IzQzZFRDMKLToxMDUzRDAwMEU4OUYyMTlGMzNGNENGMkNGOEQ4NDA5N0Y5RkU2OUUwN0QKLToxMDUzRTAwMERGMzgyOEYwMkNDNTlGQjlBNjc1NDc1NUEwRjgyQzdGNEIKLToxMDUzRjAwMDdGMjJFMkY5QUU3NEIzMkY0QzRDNUZCMzZFREJBNEM3Q0YKLToxMDU0MDAwMDQxMERCNzlGODBGRDNFOTNGN0NCRTNFMEUzNUE1RTMwNUEKLToxMDU0MTAwMDU1QkMxREU4QkVGNzcyQkJDMDcwREREN0Y5RUNDMjdDOEQKLToxMDU0MjAwMEQ3MUNCNzhGN0U4QTBEMEJGMDE4OUQzNkRENkRBMEZCNjMKLToxMDU0MzAwMEZCMzMwREZDMDNFNkNBODZGRTgxODEwMjQzRkZFMDQ1OTMKLToxMDU0NDAwMDNFMDM5RDU1NUY2Q0UwQkZBMTQxMzFEMDFFNzVCQTgxMEUKLToxMDU0NTAwMDNGNjdCNURGNDBFN0I1Q0UzNUYwMEZERDEwMzBGNDBGMTQKLToxMDU0NjAwMDBCMkQzMkY0REZCOEI1REU0MDBGNkY2RjMwRjBERkQ0QjQKLToxMDU0NzAwMEExMUFGQTQ3ODY1NzFCRkE0Nzc3QjYxQUU4QTJDODA2NTgKLToxMDU0ODAwMDAzRkZEOEMzMjE0M0ZGQjhFODU2NDNGRjg0RDNFRDA2OUEKLToxMDU0OTAwMEZBOTZBRTBFMDNGRkFENTdDMjA2N0ExMjFDMzRGMDk3OEYKLToxMDU0QTAwMEQ4RkU2MEEwQTdCQUZGNjJFMDlGOTZGOTgxQTE3Rjg2MkYKLToxMDU0QjAwMDdDQzZEMDVGN0QwRUUxNDdGOUYzMUIwMjdCRkYzNUIzNUQKLToxMDU0QzAwMEUwOTJBMTVGNEFDNzNDOURFRUE3MjFEOTI3MEEzREYzOTAKLToxMDU0RDAwMDc0M0Q3RjJCRjM3RDY2NThFNzUxNTMzREZCMkVFRTUzMTEKLToxMDU0RTAwMDEzQ0ZFQjZDRjlGQzdFMEJGMzc3OUI4REM1NTkzQ0ExNzgKLToxMDU0RjAwMDg2QjNBQjk2NDZDQTRGNURBQUMwNzA0N0E5NDYwNUJCQTYKLToxMDU1MDAwMDJGNEM2N0U3MkEzQjFBNjVGQTBFMERGMzFCMjQ1MjREMDgKLToxMDU1MTAwMDFFMEZENTBGMjlCMTNDNzRDOEI1RDE1RjNEMEZDREM4NjIKLToxMDU1MjAwMDA3OEVGRkZDNDA0QTdFMTFENTYzQUY5NjUyN0RGMjIwNzQKLToxMDU1MzAwMEE4QUI0ODBFM0M1RjVERjQ5RUU5OUQyNEUzQkQ5MURFN0YKLToxMDU1NDAwMENFQjBBMUZFRTJENjNCOThENDNBNjRENDc1RkM3Njg2MDAKLToxMDU1NTAwMEVEM0NFM0VGOUU1N0JCNTcxMjcwN0Y0QkUzRTY3RjAyQjMKLToxMDU1NjAwMEVCMjYzMzk2OTBBRDQxRjQyRkY0RDMxRjA0REQ4QzdFRUYKLToxMDU1NzAwMDJBOThDOUU4QTc4MzMyNkIzNzA0MEI1OEZCNkNEMEM3NTUKLToxMDU1ODAwMEZBMzcwNjhCMTlGRDdDNTA2MTc0MjgzODlEQjU5QjgyRDMKLToxMDU1OTAwMDdFRjY3QzczNzAyRUEzNUYwODA2NThCQjM1Qjg4OEI1QkQKLToxMDU1QTAwMDJGMDZFQjU5RkY0QkMxMDY0NkJGMTI1NDU5REIxRTVDNTgKLToxMDU1QjAwMENEOUU2RjBCQjYzMjdBNDc3MDAzQTM3RjE1MENCMUI2NDAKLToxMDU1QzAwMDIzQjg5NUI1QkYwOUI2QjNGRTlEQzEwRTQ2RUYwRTg2NTIKLToxMDU1RDAwMDE5MUQwRTc2MzJGQUNENjA4NEQxRkI4Mzg3MTk3RDIwQTgKLToxMDU1RTAwMDE4NjU2RDY3RjAzNDZCN0YxN0VDNjJGRDZGMDdBRjMwQTUKLToxMDU1RjAwMEZBQkM3NkRGNUY5MjZGN0NBRkE2RDMwMDUzMTgxRUY0MUYKLToxMDU2MDAwMEJDNzYxNkQ1MkQwNDhFNjJFOUEyQTE2RTQ5QTgxRjEyQTAKLToxMDU2MTAwMEVENzE1NjVCNDc5QThDQzczNkU1Mzk4M0YyMzczNUM1NEQKLToxMDU2MjAwMEU1RkI3NzY4RUIzRDlFMEM2QTEyQzZCRjQ2MkFFNjExODEKLToxMDU2MzAwMDhBOERBOTEwNkE2MkVGNTc3OURFQkQ1MEMzMjVBNEYzQTUKLToxMDU2NDAwMDdDN0I4MTI2RDc0MkNEMUY4QTA4OUYwNTBDOUY2RjdGRTgKLToxMDU2NTAwMDlEM0E0OUFGOTM4MzQzMDJGM0YyQjE1RDlDNjU1MkQ5MDEKLToxMDU2NjAwMDNEODEzRDk0NEY3OUZGQTYyMTgxMkFDMkVERTVGQTA3REQKLToxMDU2NzAwMDBFQjBGNURDQkU3QzVBQTRDQzFBRUU3RjE3RERGRjFDMDEKLToxMDU2ODAwMDE0RDk3RDY5NUZFQkQ1Njk3RkJGRDA2N0ZGRUUzMzQzRTcKLToxMDU2OTAwMEU4MUM5QUZFODVDOEVFRDNERjkxMUM3M0U5N0VFNDkxODUKLToxMDU2QTAwMDdDRkUxRUUzOTE3QzkzQTExRDk2RTU3Rjk4RTQzQzk1REEKLToxMDU2QjAwMDU3RkZDMkMzQzg1MkIxMjRDRjQ1NzlFQjFENTQ1QUEzM0EKLToxMDU2QzAwMERGOTc4MzJDQjFFRjYzNDE3OThCM0U5OUZDMjYyNjc2RDgKLToxMDU2RDAwMDQ0REYwNTJBNkJCNzBGMEVBQ0EwRjE3NzYzMDE0MTc0NkMKLToxMDU2RTAwMDYwQkMzNUJCQjdGRDI0Q0FCMzRBQjNEM0FBN0M5M0ExMkYKLToxMDU2RjAwMDJEQ0RGMkI3RDA3QzI3RjIxNDgzM0NDQkIzNjRFREVGMTEKLToxMDU3MDAwMDY0QkE5RTI3QjlGRUIxRUJEMjQ5MjEyN0E2NkZGRDVFOTAKLToxMDU3MTAwMDYyRDUyNEVERkJBOTI1ODJGRTlFOUFFNzgzMzZEMEYzNUQKLToxMDU3MjAwMDQxRDY1RkIxOENERkNGN0MwQkVCMzI3QTVGNzk0NDhCNTMKLToxMDU3MzAwMDg3OTdFQjI1MTYyRjJCODQ2NDFGRTVEMzk3RUI5NzBERTYKLToxMDU3NDAwMEE1RkQyNEM2Q0QwQTFDNjdDMjcxMTVDMEJGODdBODM4NDUKLToxMDU3NTAwMDkyQzJGMDg1RjMwMUJENzdBQkMwQ0M5REVBQkZEQTJDRDUKLToxMDU3NjAwMEZEREUyMzZBRUZDRkU1NTFFODNERUNCQzlERDYzNkFBQkQKLToxMDU3NzAwMDUzMTEyNzlCNTkxQzFCMjdBQTE2QUM5M0RGMzE4NUYyQzYKLToxMDU3ODAwMDA1OTFFMUMzMjJBMEJDMEJEMzExMUZCREU0MDUzQTBFNjUKLToxMDU3OTAwMDZBQjVCRjhGRDE5RjIzQkU1RUExRjkyRUZFN0E2QzAxNDAKLToxMDU3QTAwMDdCNkZCMjdCOUM0Q0ZBNkIzMkExM0RFOEJFRTY3NzIyNjAKLToxMDU3QjAwMEZGNEU4MkFFRDhFOTNCMEU1NzYxMUJGQkNFOUY5MjA4OEQKLToxMDU3QzAwMEIyRDczODA3N0IxRkIyNTc4NDg2NTc3Qjg5OUZFRjZBMTEKLToxMDU3RDAwMDM4N0EyNzUzOUExRTYyRjMxQURGRjM3NTZBNzZFQ0Q0OEYKLToxMDU3RTAwMEVDNUJGNkU2QzFBQzQ3NzFERURBNEU4OUQ1M0IzMDI2N0MKLToxMDU3RjAwMDVBRThFRkU1RkJBNkJBODY0MzAzNzNFM0Y2NTFEN0YxMDcKLToxMDU4MDAwMDAxRkYyRTBBQTI4NUYxREY0MzlERDJENkQ3RjEyNDVBOUIKLToxMDU4MTAwMDFDODEzNjdCQkM3Q0REQjg3RTQ3QzNGNTQ5Q0FFQjY3OEIKLToxMDU4MjAwMDU5NjVENzVEMzgzNDhBQUEwOTYzMUJGODg5OUI3RDU3NkYKLToxMDU4MzAwMEE3N0Y1RjM3MUZGQ0FDNUQ4ODcwMjAxQ0ZCRDVGNUFDRTMKLToxMDU4NDAwMEZFNUQwQ0VERUM3OTZERjFGREQ5NDRENzQxRDc5NDRDNTgKLToxMDU4NTAwMEFBNUY1NjM3QkU5NTg5RDJEREQ5QkE3RTJBREQzRkNGMDEKLToxMDU4NjAwMDBFNTVCRTQ1NkRGOTY2RTEyNEQ1RERFODE3N0ZBM0Y1MzkKLToxMDU4NzAwMEEzNDI3RDBCOTVBNEY3QkMzNEE5ODVFRTc5Njc4OURDM0EKLToxMDU4ODAwMDBFNzA4OERCMDE3MUE0ODhBOTNERjc4NzdFNzA1MkYzMDIKLToxMDU4OTAwMDAzMjZCRkVFMDcxNTJCMzk3RUY0QkZDN0U4RjY4QkUyNkYKLToxMDU4QTAwMDg3RkUzNjk4REU3RDk4QkJEODc3MjE3NUJCQURBOTg0N0QKLToxMDU4QjAwMEFGQzU1NDc5OEFGMTc5QTE3RTNFRjNCQ0UwMjFDQzBCQ0YKLToxMDU4QzAwMDg4RUZBQ0M0RUQ3RkY2NjgxMkZCQkI5N0IzMDJFMjYzQ0UKLToxMDU4RDAwMDU0NEZEQ0VCNzlFNkE3MjY3RUVGRjZBODg4NUIxNEE5ODcKLToxMDU4RTAwMDVFN0U5MkU5Njk5MTJEMzQ4MkY0ODRFNzMzMEMyNTVDNjUKLToxMDU4RjAwMDFGNkY1RjM1OTJFRUZCMjY4N0IyMjk1Rjk1NUVCNEZBODMKLToxMDU5MDAwMDlBM0M4NjM4MEZENzUyNjJGNzc4NEY0OEZDNUUyRDUxOEIKLToxMDU5MTAwMERFMUU3OTRCRjE4MUNGMjg5RkIwNUE0MEE1Rjc0OUU4QTgKLToxMDU5MjAwMEZGRENFRjhGNzFGOTNGMzUwNTMyNkYxNjc5QkVDMkVBQTEKLToxMDU5MzAwMEU4MjE3RTU2RkY0Mzg2Q0RCNzU2RThCOTdFQjNCNjZFRjIKLToxMDU5NDAwMEU3RTdCQzlFNTZCMzgwN0Q4RjkzMjg4N0UwRTZFQjI2ODEKLToxMDU5NTAwMENBNjM0REU2NzJFOEU3NEU0Rjc5QjgxRDc0NzkwQTg2M0UKLToxMDU5NjAwMDdBRjhGRDdEQjZDMkY2REQ2OEVBQzdFMkQ3NDc2MjYwMjUKLToxMDU5NzAwMEU4NTAzQTJGQjVGQjMxQkQ4RUVERjQ5QzYyNzExREFFM0YKLToxMDU5ODAwMDM2MERFMURGRjc4NkZCM0E0RkNGNzdEN0NGREVEODc5RjgKLToxMDU5OTAwMEE3REYzM0MxQzRERUVGMDVGRDM2Qjc0NDc2OUIwRDNFNkQKLToxMDU5QTAwMDE2Rjc4N0MxMTE1RDNGRUM5RUU5RkYwMTlFQ0RFRTE4MTEKLToxMDU5QjAwMEIwMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKLToxMDU5QzAwMDFGOEIwODAwMDAwMDAwMDAwMDBCN0JDNENFQzBGMEEzQkEKLToxMDU5RDAwMDFFODIyNTM4MTA2QzYyNzExRDBCMDNDMzA3NTZEMkY1NjkKLToxMDU5RTAwMEMxNzAyNTUwN0YwOTEwRTcwMzcxMTYxMEE3MDI3MTAyREMKLToxMDU5RjAwMDEwNDcwMzcxMTgxMEJGMDY5QUZEMEM4ODFGMDJGMTFEOTUKLToxMDVBMDAwMDIwQkUwRUM0OTc4MEY4MkMxMDlGNDBCMjc3MTkxQjAzNUMKLToxMDVBMTAwMEMzNUEzNkQyRURGRjgzRTRFNzg5NDA3NjM5MTBDRjI0QUMKLToxMDVBMjAwMDIzMUM0NkYxRjBDMEYyM0MwQzBDREFCQzA4RkUzRTVFRDIKLToxMDVBMzAwMDU0NzkwNTFFMDQ3QkI5MjA2NTc2NkQwM0VBMDcwMEU5RjkKLToxMDVBNDAwMENENDI0QTgwMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0EKLToxMDVBNTAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRDU3RDBCNzg1NEQ1OEIKLToxMDVBNjAwMEI1RjAzRThGNzkyNTMzOTNDOTgzOTA0MEM0OTM5NzA0NTIKLToxMDVBNzAwMDA5MzgyNDIxRjJBQTFFMDg0MkE0RDQwNkY0MkE1QUFFRjgKLToxMDVBODAwMDBFQzgyMzg2OTA0NEIwMkRCNzcyOUIyMTA5MkY0MTFCNkQKLToxMDVBOTAwMDE1MkQ1QUI0ODM0NThCMEEzNkYyNjhEMTA2RUVGMDI4RUMKLToxMDVBQTAwMEM2NUJCNEQxQTI4MkQ1MzZENDVCNDUwQjQ5NDQxMTZGOTUKLToxMDVBQjAwMEI1QkY3N0FEQjVGN0M5Q0MzOTMzNDk0MDZCRkY3QkMzNzAKLToxMDVBQzAwMEM3QjdCM0NGRDk2N0VGQjVENzVFNkJFREY1REEzQjc2RTUKLToxMDVBRDAwMEQ5QzZFNDJCMTlGQjAyN0ZBMDlDQTMzMEM2MDY0NENBOUEKLToxMDVBRTAwMDUxNzc1RUJCNjg3QjA5RkNGRTk5RERGRkI4MTY2OTY3REMKLToxMDVBRjAwMDk0MTczMzg5QjFEMUYwOUU2NTMwNTZDQUQ4OTU0RUY4QzcKLToxMDVCMDAwMDE1REE5NUJENzBFQTBGOTdBNTMxQjY5RjI5Q0MwMThGQTQKLToxMDVCMTAwMEMyNkE1OUVBQjdBMDlGRkQ5RjMzM0ZCRTk3NUY3MDY3ODcKLToxMDVCMjAwMDc1QjhGMUJCMjA2M0U5OEM1REMxRjg3N0UxNkMyRENCRDIKLToxMDVCMzAwMDU3ODgxNTI2RTM3M0RENDlCRjQzM0ZCOTlCRUFFMEZCNzUKLToxMDVCNDAwMEIzOUZCQUU5N0IyQjFDNDZDOTNFOTc1OTU4N0NGMzQ1NTUKLToxMDVCNTAwMDBFRjZBQjdFREM1MTIwRUFEOTBDMDY2NzAyREUyQzFBNjkKLToxMDVCNjAwMEQ3ODBGN0QwREJFRjExQkMwNzU0ODA1NzhCMzNCRTEzQkYKLToxMDVCNzAwMEUwNEY4QkMwQkY5RjVEOUJDNDBBMzlGQzdBNjkwNEZFNkQKLToxMDVCODAwMDBCODU4N0U2MEY3ODZFQUNEN0JFOTk5N0NGRDhCQTdBRDcKLToxMDVCOTAwMDQ2RTVEQTdBMjc5NUFCRUI3RERGQ0NCMzMxQjZCMjNFODIKLToxMDVCQTAwMDgzQ0E0NjE1M0UwMTM4MUFCN0IwNTAxMDUwRUYyRTg0MDQKLToxMDVCQjAwMEY2NDZGRkYwM0YyMUNGNjlBQTNCQjM3Q0E2QkEzRDBENjQKLToxMDVCQzAwMEZBMjk4OEQ0NTVCNzY2QUEzN0JBMjczOTAzNkUxQzFGM0QKLToxMDVCRDAwMEU2RUVDMEYxOUQ1NDAyOTg0NzMzMDAxRjk3OEE3OUJBQzgKLToxMDVCRTAwMEI0RTAyQzA2RUI5MUU3QjY2QjIxODBFMzUyRjc4MkU5MzMKLToxMDVCRjAwMDZDMjRCNkNCMjdCQ0Q5MDU1RTk3NjQzNjc0MjBCQzFGRDUKLToxMDVDMDAwMDQzM0IwNkYzMURFNjlFRjIzRUYzMzJGNjlGRDk0RkYwN0EKLToxMDVDMTAwMDc5NkM2MDZDMjAzQzVGRkRFRjc1MUQxMkY0QjczMkQzRDgKLToxMDVDMjAwMEFFMzU0MDdGNEZDMEY4NkIxQzUxNzhEQ0FBRkVCOTAzM0IKLToxMDVDMzAwMEZBNzRDMjNGQzRFM0QwOERCQzFFOTkzN0Q0QTNFNjMxQjkKLToxMDVDNDAwMDhDNDVCRENGOEVGNDczQTFGREU2Mzc5QkVCRDY3RUYzN0EKLToxMDVDNTAwMDM0N0QxMkQyQUJEMTZGM0VBQjY4RjBCOUZGRjdGNjdCNjMKLToxMDVDNjAwMDI5RTAzQzM1MjVEMkFGMzE0RUJGRkQwMjM5NTRDMEI3RDMKLToxMDVDNzAwMEY5MUI1OTI4OUMxRDNCNEU5RUU2MkYwRkMyRkJCQzhEODUKLToxMDVDODAwMDJBMEI2NUYzRTc2OUMwMTc3OUZDNTdENkU0OUI5NDEwOUIKLToxMDVDOTAwMDI4OEM4NTg3NDU4RjkzMTM1OTk3QkMzNEZCMUMxOUU4RDIKLToxMDVDQTAwMDI5MkZFM0ZBNDUxMkQyNTU3M0Q0RkFFNjMwNjZGMENEQzcKLToxMDVDQjAwMDhGRUE3RDRDMUZDQUQ4RERGNTA1NTQ2RUE5RjdFOUM4RjcKLToxMDVDQzAwMDI3NzdGRjVEOTlENTUyMThDQjhGN0YxMUYyRUExRTFCMDMKLToxMDVDRDAwMDIzRkEwQjNFQ0U0MjhGNEJEODVGQzVBQzM5NTA1RjNGQTUKLToxMDVDRTAwMDJBQkRFODJFOEQ4ODVDNDY3OUU2MTI3NEJDNUVEMjZFQzEKLToxMDVDRjAwMEM4QzFGNkFGMjgwQ0U1QTA5NTFGRUVCNkU5RDNCMEJGM0EKLToxMDVEMDAwMEI1QTM2NEE5MDFGMTlDQzdGOTIxQ0YxNjc2RTY2MkJGNUQKLToxMDVEMTAwMENEMzlBMzgyRDg4RkZGNTVFMjg3QkNGQzRCMzQwNUM2MzIKLToxMDVEMjAwMDFEOTYyN0Y4NjFGNDgzNEU5NDg3M0RGMzVGOTZBRUU3QTYKLToxMDVEMzAwMDE1MzM5NjY0QTEwM0RGNzlEMjgxNkY0MkRGNzRGMDc1NjkKLToxMDVENDAwMEYxQzNENzQ3NUZDRDdERDJENzdBRkY3REVGM0JFMEZEMzIKLToxMDVENTAwMDk2M0NCQkE2NjRDN0MyOTU3OTcxMzhBM0MyMUQ0QjZGMzAKLToxMDVENjAwMDc5Nzk4MkNFRkM3REQzOTlCNTdDQjAzRUM0REUwMTFBMzAKLToxMDVENzAwMEJBQkYzRTgzRThFRURFN0E4RENBQjU0ODg3MzBFRjA3QkEKLToxMDVEODAwMEIwRTk1OEE4MjMxREUyQjhENzE1NTFCREQ3N0Q4QkFEMUEKLToxMDVEOTAwMDIwQkE0QzlGRDVDQzUwRkVERThGRjQzOTBFODc1QkE5MUMKLToxMDVEQTAwMEVCMTM2MEFFNzlBMjBFNUJBNDBDN0JDMEJERjg3RTEwMzUKLToxMDVEQjAwMEQ1NzVEQ0NBRUU5MjhDRjZDRjA2NzVDMDc3OEE2ODNGM0YKLToxMDVEQzAwMDc1QzVCM0MxNDZGOEZEN0UxN0FGNUZCREEyNTMwRjY2MjAKLToxMDVERDAwMDQ1N0QxRjVDQTdFQjU5OTFGNjUwMEY0RjUyQTNGQUMzQjQKLToxMDVERTAwMEZFMEJBM0UxMzk0OEVEOERGRUU2QUYzOEExMDcwMUJFRjkKLToxMDVERjAwMDdCNURCQ0JGQjUyQjhFRkQ1M0ZBNUYyQjA1MzI0MEI1RTIKLToxMDVFMDAwMDYwQUIyQ0ZEQUNFREE5REZBQjIzMUU4QzcxNzJBNDVGREYKLToxMDVFMTAwMEU4QzFFOEY3QzE2Nzc0REQxRDc5N0ZCOTc0NkYxMERGRTEKLToxMDVFMjAwMDZGNjQxNTc5MTJBQzQzRTZGNDhBMEMwNkVCNkZBRjY4MjkKLToxMDVFMzAwMDBFRTI5NkRCMDM5RkMwNzc2NDdFMEYxMkJDQUUwQ0ZFQjEKLToxMDVFNDAwMDdFQzQ4QURGRUI4RDUxRUIzMzY5QzVDQjQxODREN0QwNUIKLToxMDVFNTAwMDczMTQ0MUFGRjIwQjU5NEI4RjAwQkQyQTQ5NzYzRkU5Q0QKLToxMDVFNjAwMDFCRDcwMUQzNjRDMjc4QjMyQTk4MDY3MEM5NjkxNTBDOTAKLToxMDVFNzAwMEU1ODE5MkE2QkUxQkNEMDcwNkZEMDE5QzYzMDlDRUM5MzQKLToxMDVFODAwMDE1QjM3QTgxMzMxODBEQTcwMTQ3N0Y3MDFCNzBGNDRFNEMKLToxMDVFOTAwMEE3N0M3QzJCM0Q0REJBNjZDQ0VGMjZDMEZFNkQ2RkI3NUMKLToxMDVFQTAwMEY5NTE1RDQ4NDUzQzQxNTdFQ0YzNUI4MzM2Nzg5RTNBQTcKLToxMDVFQjAwMDEzNzBBREQxQkFDRDYyQjlCMUZEQTY0RDFGQzQ0MjUxMjgKLToxMDVFQzAwMEZCRjczRjdBNURGM0IwQ0VGMTE2ODg1RTVGQThDRjk1MDEKLToxMDVFRDAwMDA2NDRGMDM4NTZCNEIzRDI5RjMxM0Y1QkNDRkNBRTM1QUMKLToxMDVFRTAwMENEOEZBOTgxOEMwQTRGRkZGM0JCRDdFNTlGNTVFMThFN0IKLToxMDVFRjAwMDZERjc1QjQ5QTJGMTI3NEQxOUYzNkRDNkM3NjMwRTkwOEMKLToxMDVGMDAwMDVGQzkzODVFNTE2NEJDRTQ2OTMwMUU3NkE2MzZDNzFEOTEKLToxMDVGMTAwMDJGNjUzMjhDRTdGQ0ZBRjA2OUU1NDcwMzVFN0IwQ0JDMjkKLToxMDVGMjAwMEI3OUFFMDVENkIwM0JFOERCM0ZFNUYzN0JDRTdDQjdGRjYKLToxMDVGMzAwMDJFOTBCRkM0N0Y3OTdERjNERjNGQkFCRjY0RkMxNTNFNkUKLToxMDVGNDAwMEY5NDg2NUUxMkIwMTVGNzc1Q0U1MjRGRERFOTA3M0ZGODYKLToxMDVGNTAwMDZDN0NBNUUyQTdCMDdFNzdCQzU0N0NFMjRBMTkyQjQwNEEKLToxMDVGNjAwMEQ3MjMyMkUzRDc0QTFBRUQ1N0JERDE3NzZGRjM4MTBEQkUKLToxMDVGNzAwMEQ2RDRDRkZGQUZGOUY0ODZEN0FGNUIwRTlEQUY3QzZENjMKLToxMDVGODAwMDc4M0Q4MTIxM0ZBRDJDNjQyMTA3RjRCMUIyRUQyQUIyRjYKLToxMDVGOTAwMDM3NTcxRTI5MUJDOEEwNUZEQjlBRTE0Qzg3NDkyNTYzNTAKLToxMDVGQTAwMEZGRDBERjRBNDNDRjk4NUNEMjRGRkY1Q0NGMDBGQjRFNUYKLToxMDVGQjAwMDZGMDJBNTZCQjdCNzgyRjRBMjk1MTJBM0VGRDc4M0RFNjkKLToxMDVGQzAwMDE2MDIzREE2RTQ5NTBEQ0UzOTU4RjdFRjcwQ0VDMTcxOUIKLToxMDVGRDAwMDZEOENGNEU5OTI1NzBFRjlDQTgwQ0U1RDIzNTI0NjI5QTIKLToxMDVGRTAwMDQwMDIyQjVEQzZGM0EzRTVBOEU3REU1NTI4OUU3Qjc4MkIKLToxMDVGRjAwMDdGRjBCQzAyREIyNzg4RjZCREMxOTU5MDA3RjA0NEFENjkKLToxMDYwMDAwMDdGQTJCRDM5NTAxMTQ3N0ZENzY1OTlGMEYzOTBEMEJCN0YKLToxMDYwMTAwMEVFNDZCRDBCMDQ3MjYyNDI0QjAwRjU2QTU3QkE1RDdCRDcKLToxMDYwMjAwMDRDOEFGREVFMjY1OTEyRjMwNkJEMERFREVDMTE1MzMyRUMKLToxMDYwMzAwMDUxQ0YzQTMwRTM4OTE1NzY4NEFGOTA5MTVDNzdFNTg1NEUKLToxMDYwNDAwMDc0MTlFQUVFMDJDRURCMEY1OUY2N0QzN0FFMjFFOTVEMTkKLToxMDYwNTAwMDk5NTI5OTRBREY5OUVBNzdGN0U4MzFEOTEzNTE2RkYzRUEKLToxMDYwNjAwMDE2RjBGNzY1MEQ1NzRDNkM4QzdFQ0ZGQzEzNzFGRjM1MjUKLToxMDYwNzAwMERFMDcxQTRBRTk3REE2QjNFMkQ4MDQxODNGMTNFNDY4QTQKLToxMDYwODAwMDIzRTAyQjUzNkQ5NkVBNjg1REQzRTJFQThGMUJFNjNCNzMKLToxMDYwOTAwMDY3ODUwMDg2MEQzMzFFQ0M5RTFGNjczRjgxRDUzNEYxODYKLToxMDYwQTAwMEU5QTA3OTY2M0U3QjQ4RTBFRjZFODFDRjRDRTRGNUQxMDQKLToxMDYwQjAwMDgyMEU0MUJFQjk3OEQzMUVGOUU2MUFDQUU1NUI0MjQxQTkKLToxMDYwQzAwMEYzMEFDNEY3QTA3OUNDOEZGQUY2ODYxOTRGOTBERTZBRUUKLToxMDYwRDAwMDhDRTMyQTMwQ0JCOTRDRDUzQ0FGQUY2QjNFMUI5OUZFNUQKLToxMDYwRTAwMDFENzk3NEVGRkQ1QkY5NkMyMzBCREM4QUVEMzNDNTdFMDMKLToxMDYwRjAwMDlFNTAxMDkyMDI4NUZEQ0ZERjNBREZERUU2RkQyREM0MTMKLToxMDYxMDAwMDI3MUZBNzRFMUUxMDNCQ0UzRjBCMkY5OTZFMThBN0U0RkEKLToxMDYxMTAwMDFGM0Y0RUMyM0NCM0JDM0M1RkJDQzMzRTIwRTg4QzI5NTEKLToxMDYxMjAwMEI4MUY1OEVEQUI4NDEyOUZDNDY0QUFCNkEzMUQ0RUYyRUIKLToxMDYxMzAwMDFCRTBGNkIwRTZGMjRCODBERTUyMkI1NkREMkU4M0RERkYKLToxMDYxNDAwMEVDNzlFQkVBRjdEMUNFNEVFRDk4NDNGNjc2NTM2MTUxRjgKLToxMDYxNTAwMERCMjQ2ODk3RTRGN0NEOTg0Mjc0Q0EwOENGNkJCMTMzNUIKLToxMDYxNjAwMEUyQkJBQTE1MTM2MTVFOEQ4Q0YzREQ2NkY5OTY4OTVDM0UKLToxMDYxNzAwMDNGRDA2OUJEQkYyQjcwMDYyQkFFQTk1MDQ3NzY2NTM5NUQKLToxMDYxODAwMEYxRTY2MTY3NjEzRTZGRTkwQjQ3RUNGN0JEQ0RERjE2QzUKLToxMDYxOTAwMEY5NEVGOEZGOTY5MERGQjRCRkVGRDg3NDNCRjkxMTgzNDYKLToxMDYxQTAwMEYwMEZFREQyNjQ0QjNGNDlCQTNERTI2NzY0ODhBN0E4N0YKLToxMDYxQjAwMDNBQkNGRjZEMEY1RkRGRkU0RjE5Q0ZDN0VFNzM2QTQwMjkKLToxMDYxQzAwMDBBQjYzQ0Q5ODdGNjdBMTJGMzI1QUIyODY3Mjc4MzQyQjMKLToxMDYxRDAwMDAwQTJEODk3RDYxRDk0QjVGRUQ3QTU4OUIxRjI5NjQyRjQKLToxMDYxRTAwMDRFNzczM0EyRjREQzBFOTlFQkM5NjkzMzI3NjdBRjg0OEQKLToxMDYxRjAwMDdFQ0Y5NjcwQkY3MEFBMEZGRTE3QzVDRTY3MURFQzZCRTEKLToxMDYyMDAwMEUxMjgzRkM3QkFDMkM3ODg3RjFCODE5RTcyODAyRjgyNTgKLToxMDYyMTAwMDg1MzJGOUI3RDdFNkVERjA0NUYzQjVBQzE4RkU2RDJCMzYKLToxMDYyMjAwMDdEMzA0RDJEMTVGQTFGRTA0N0M5OTM3NUQ3QzhBRjRFODUKLToxMDYyMzAwMDFGQ0E5N0E0OEZDNEU5NTFERkIxMEI1RkFGMjRFNUMyMzkKLToxMDYyNDAwMEU4RTNBQjhFNjdBQzZCMkM1RjcxRkQyNDZERTYzQzI3RjkKLToxMDYyNTAwMEVBM0JBQjMyNjYyNkM1OTNCM0JEQUZFQjdEQjRBRUE4QzcKLToxMDYyNjAwMDRGODRFMkY0OUZBNjQ4NzFGRDM5NTY3RDlFQjFBNUE2RTQKLToxMDYyNzAwMEY1NTIwNjk2Q0VEQURDRDdCQUE1OTlGMTYxRjRFQjVBNUQKLToxMDYyODAwMEE2NjhGRjg1QzI0QkY1OTE1RkRDMjlGQTVCQUJERDE3OTEKLToxMDYyOTAwMEM0RkRGMzJDRUVFRDgwMEZBNTc5NTQxOEY1M0Q5NkM3OUIKLToxMDYyQTAwMEZDOEZGMzI2QTQ4N0I4MzQzRDQ0M0EyNENBREREMjA4RDMKLToxMDYyQjAwMDdDRjYyQ0Q5MzQ5RTlBOTY2MEMyMzc5QjA1REE3NjE0MDgKLToxMDYyQzAwMEZDQUU2NTc2ODJDMzg5RTNDMTM4OEEwRjNBOTREMEZGNjkKLToxMDYyRDAwMENGQzIyRTJGRjU0OEZERTE1MDVGRTQ2MkZENEUxMzFENDUKLToxMDYyRTAwMEFDQ0UyQThBQkJERkE5NjI1REQxNkNFNUY0N0FFN0Y5MEUKLToxMDYyRjAwMEM5MTdFQjc4RDc5OUUxM0RFRkVGRENBQUY2NkUxQ0ZGRUEKLToxMDYzMDAwMDcxRUM3NzJBN0JEN0MwMTcyMEYxOTYxRTdBRTdFQkI0QTEKLToxMDYzMTAwMENBQzZGNjQ4NDkyMDBGMzJBRTY3MDEwREVBRjgwQTM2QzAKLToxMDYzMjAwMEVCMzU1ODhFNDUzQTJDRjI5MTVFQjA1NTUyMTE0RTYyQzMKLToxMDYzMzAwMDY5MERGRjczN0RCRTEwOTU1QkU4NEY3NjA2MDg0RjhBQTYKLToxMDYzNDAwMDVCNjdENDVFM0IzRjdERkY5Q0QwQUZEMzg0M0U2RkJDODgKLToxMDYzNTAwMEZGQTE2MkE3N0U1NTU2QzFEMDZFM0VGN0Y2RDQwQ0VBNzcKLToxMDYzNjAwMDU3ODc0N0E1MTEzOEFDRkQxNjJBODExRjJBMDM5MEVDRTgKLToxMDYzNzAwMDM4M0NGODAxRkEwOTU4NDcwMUY5QjVGMzA1Q0VDRTNEOEUKLToxMDYzODAwMDMwMzM4OUY1QzE1RjBGNTlGOEVCMjE4OUMzQzkyQUNFOTMKLToxMDYzOTAwMENGQ0UzODA3NjNCNjYzN0IzNTkwNDBGMUIyOTMwNUM0MjYKLToxMDYzQTAwMDA3Qjk2MkZDMjdENkNGNERDMEYxOUZEOEQ4Mzc5RjFCQzUKLToxMDYzQjAwMDcwRkNCNERFQzlDMkEwQTc4NkVBN0Q1NDFBRUY0M0MyQkUKLToxMDYzQzAwMERGQkY1OUQ4MzFDNkYzNzM4QTRDNzBFQzEzN0NGRjg0NUQKLToxMDYzRDAwMEIzMjI4MUZDRTcwNzZGOUMzNjBDRjgyQkU3QThFMjQ3NTUKLToxMDYzRTAwMDFENEY1QkNCNTJGQTFBM0YzQjY4RTYzN0E2Q0NFRTEzNDMKLToxMDYzRjAwMERFNjU2RjREOUM3MTI4OEExRjdGQTE3OEQyREUxRDBFNEQKLToxMDY0MDAwMEJGNUNDRTJFNDdGQUVCRUZGQjczRjVGQThDNDNGOTVGRDYKLToxMDY0MTAwMDFEMkY5Qjg1RkQ3OUFFRjE3NzJCNDhDRjA5NUY0OUZDOTUKLToxMDY0MjAwMDk5MjNFNDQ4Q0UzQzJFMEY3MkFCNTk0ODQzRkVGREZDNDUKLToxMDY0MzAwMDBCMTY0RDFGNjA5OTEwOUUzMkFCNTU4REZDNEQ0Qzc3NUQKLToxMDY0NDAwMENGODFGNzQzQzVEQjRDNjVCQThDNUJGODUwRDRCRjUwQTUKLToxMDY0NTAwMDhFNkNFMkZFNzNDM0NGMEZFQjdFMTdDQUI5Q0RBRjI5QTYKLToxMDY0NjAwMDY0MEJFNzU1NkEwREI4REUzOUVCQ0RGRUZEQzEyQ0NBRDEKLToxMDY0NzAwMEVGOEVGRTdBQTFENzY1NUFGQ0Y4NUY3NTFEM0E3MDFENDQKLToxMDY0ODAwMDEyRkZGOUVCMTA1MjE5RDE5RDUxRDcyNDU2MTE2RkZGMEQKLToxMDY0OTAwMEZCNDREMEE5QjZFMjEwQjc0M0MwRjg3QjI3MkExRTAxRkYKLToxMDY0QTAwMEVCOTk4MjlCQzA0RjgzRjc0RDQ0QkIzNUI4ODZGOUYzMTcKLToxMDY0QjAwMEUzQzg0QjlCOUE0ODc0NkY2MzdBNzgyOEZBMEZFNjVDQkUKLToxMDY0QzAwMERGQjExN0U1RDUwNDY2OTI1RjcxRTQ4NjREQzVFRkQyNjIKLToxMDY0RDAwMEI4REMwODA1NjdGMkYyNzM4NUUyNjVGOUVCNTkwOEUzNjkKLToxMDY0RTAwMDVCOTMzN0Q0RUQ0N0JGNUU2NjM1Qjc5QjMzRDcwNDI1NDIKLToxMDY0RjAwMDNCRDQ3M0VBOTgxRjg3QzlBRDY0QkNGRDZDMTZEMjc5OTIKLToxMDY1MDAwMEJDRTY2ODA2RDBDRDEwNDEzNzQzMEM3QTU5NjZBNjk3OTEKLToxMDY1MTAwMEMxNzU5NkI4RDAxQTczN0QyMEQyMDU3QzM3RDA0MjJGMzIKLToxMDY1MjAwMEQ2N0U3MjM0NDZGMUI4QkNGNTMyOEYxN0NEMzJDNzdEQjYKLToxMDY1MzAwMEYyNTlGN0ZCM0YwNzc4RjMwRkI5RkQ2MTE2MUI2RkIyRjUKLToxMDY1NDAwMEY2QUZCMjQwMDFFMjY1RjcwRkRERkY1OTAwMTNGQ0Q5NDkKLToxMDY1NTAwMEZBNDlBOTg4MTc5MDI3NDkyNDRGMkFFMkRCM0QzMUY0RjQKLToxMDY1NjAwMDZBRTgxQkJEQjQ4RkM4NEZERUFFQjdGN0FCRjJEMzk3NjYKLToxMDY1NzAwMENFMDUzOEQ2N0E3NDQ2RTMwN0IzNDlBRTJCMjI1RTc5NEUKLToxMDY1ODAwMDMwRjM3QTY3MDdGQTZEREM0NTI0REZGNzYzMURGRDNDQzUKLToxMDY1OTAwMDE5OTcwQzhDOTZGNzhBRjAyMzE5RjU0NkUxNDdCMjhFQ0QKLToxMDY1QTAwMDM3NTVFNTdBRjA3QjRDOUY4QTc4MThFNTA4NjQ2MDVDODMKLToxMDY1QjAwMENGOTY5MUJFNzMwRThDNjdGMzgxQkUxNUU3QkJCMTZBQUYKLToxMDY1QzAwMDAyOUZBRkE2RkUyRDFBRkZCMDcxRkI0ODFFMzJCRTFGMDAKLToxMDY1RDAwMDMzNzdDQTc5RTFBMzQ0MEREQ0E0NDIxOTlDMDQ2NjA0MTQKLToxMDY1RTAwMEQyN0YwRTBCMzVFMkZBRDYzNUYzRkQyREQyRUUxNkQxNjEKLToxMDY1RjAwMDJFODg3OTA1M0RFRDAyRDA2RTg0QTlERDNDOUMwRkI0NTgKLToxMDY2MDAwMEQzNERFRDJBNjJEQUREMjZGQTYzQTY3MUY1OTg3MTZCMzcKLToxMDY2MTAwMDQ0N0ZBNENGRjVCNEYzQzdGNEI3NTRCNDIzM0RCMEE3NzcKLToxMDY2MjAwMDlEMTZEM0RGMzIzMUFFNkU2QUU3OEI2OUY3RUYwNjdDRDkKLToxMDY2MzAwMEE2NzE5OTc5REM5RUY3QTU3NkUzM0RGOTYzMEZFNDRGRTcKLToxMDY2NDAwMDIxN0EzOTk0M0ZBNTdDMkU4Q0IzRjQ0NTFCOTcxMTVCQkUKLToxMDY2NTAwMDc5M0U4NzQxNTdGQjQ1QkIyNkE0QUI0MkNDNUI2MTYzQzcKLToxMDY2NjAwMEFBMjk0Rjg1RTdBRDM0QkE2NzNBMDM1MUNGN0JFOENBMTAKLToxMDY2NzAwMDNERDMxN0ZGRjk1QzUzN0I3NThEOEJFOUM1RjQ5Q0RBMkMKLToxMDY2ODAwMDM3RkQ1RDExRjFBQTFGNEM0MjdGRUJFQTM0NTlGOERCNkMKLToxMDY2OTAwMEFFNjlEMDU1OTA2MzAzNTQ1MzdENEQ4Njc4NkZCQkE2ODkKLToxMDY2QTAwMDgxMDI2MjIyM0UwMkIyRjI5Qjg1NTFGQ0REMzNGRTNGNDUKLToxMDY2QjAwMDBCN0VFMTNGOEVDMDNGREIwMkZGNkMzM0ZDQTJFRUNDRDEKLToxMDY2QzAwMEU0RUZENTk1QjMyN0UxN0MwQ0ZGRjJEOUE2RTUwRDQxQTcKLToxMDY2RDAwMEY3RkZFNkY5NTU1OUU2NTc2NTk5NUY5NTY5N0VGNjk1OTYKLToxMDY2RTAwMDU1OTM4Mjc5RkY5N0U2QjdDQzMyQkY2NTk2RjkyRDMzODMKLToxMDY2RjAwMENEQ0ZCOTcyRDkwNUFEOUZCNURERERCNjY2OTJCNzZCNkEKLToxMDY3MDAwMEYzNUYyN0ZEN0ZBRDg4RTMyNkFDRDQxQjU2RTA3QkUwMkEKLToxMDY3MTAwMEVENzZFQTRGMjNGOTNFOEFFOTlGQTMzQ0U4RUZCQjQ3QjkKLToxMDY3MjAwMDU0OERFNDgyRDMyMzkzNUM2MEY5RjY1MDdFMzY4NzZCRjgKLToxMDY3MzAwMDI2Qzg4NUU3NTQxRjk3REYwMkNFRDcyQ0Y1MEYyRDc1OUQKLToxMDY3NDAwMEY4RTU2RkI4NkZGQTk4NjE0NzVBRTQ3QzNGRkJEQUNBMDQKLToxMDY3NTAwMDRDQkU5RkFDRjJGOEU1RTg3RDREMTVCODM5MzhBMDk0RjEKLToxMDY3NjAwMEU0NEZBMzhGQ0I5RkZEMDM4NDNDNEE4MzdEOERGQzQ0ODMKLToxMDY3NzAwMDE5MjRBRjZDNDI1RURENTdDRkYzRDg5QTQ1N0U1MDYzNDMKLToxMDY3ODAwMDVBMTFFMUE3NTlEODBCMkM5NDY1REEzNzBGNEM5Q0QyREIKLToxMDY3OTAwMDg2N0VBQjMzNDc3OURFRTIzQTFCRDdDNzU2RDYzMzlEQTgKLToxMDY3QTAwMEU4QUJERTQ5Rjk0NUZCQTBERjAwMzQ2ODA1N0QwRkNCN0YKLToxMDY3QjAwMEU3NDFERkMzNzI0RjdEMDY5NUJGQUNEN0E4REMwMUUzOEMKLToxMDY3QzAwMDYyRjk0Q0JEOUYwNTYwRkM2REY1NjNBOEZDMzFFQThCNTYKLToxMDY3RDAwMDUwM0UyMEY0QzUyQkQyNjRGMjU3NkNBRTg3MkQzMzlGMDgKLToxMDY3RTAwMEY0NDgyQTFGQTlGNzhENTU2MUJDOUZENDY3NTBGRDIzM0IKLToxMDY3RjAwMDY5RTY1ODFCRDlBRDFEOEQ0OTAwRTdFRTU3RjMyODVGQjgKLToxMDY4MDAwMDY5NDI5QTRBRkIyRjUzQzM0QTUyNDlFNEI5ODFENzhGNTAKLToxMDY4MTAwMEE0NDk1N0UwNzdFMzMyNjRERUNFMTk2QUY0QzY2RjU3QjUKLToxMDY4MjAwMDg2RURDNjY0QTgwNDBGNzMwNzE1NkY1QURDNzZFNTM2NEIKLToxMDY4MzAwMEMwNEJBOTVCRjRFNzBCMzQ3QUUyRjdGNzJENkM1N0U0MTEKLToxMDY4NDAwMDE2RkRBNTY5OERFRUY4RkRDREM0NzE0N0ZBMzgxRTU4QzYKLToxMDY4NTAwMDQ2NDc0MzYyRkM3NjM3NjBCQjQyOUY5ODZGNTY1ODRFNUUKLToxMDY4NjAwMDhDM0ZFRTZDMUMzNzI1QTUzOTgwRjFBRDJCNjczM0QyRjgKLToxMDY4NzAwMDQ3NkQ2OURBNjYyOTJBM0UxNDFBNTBDMTY0QTBGMzk0NjAKLToxMDY4ODAwMEQ0RTYzQTZDRjc4RDgwOUZFNUMwRjg5QUQ3Q0Y2NEEwMjQKLToxMDY4OTAwMDY3OUIxQkRFMTc2MjRFMTM4RjQ3OERCRjBFREVBMzNFMzQKLToxMDY4QTAwMDhDRUY0NzQ0QkRDN0VGQTExQzNCNEI3QzlGNjQ3RURGNTAKLToxMDY4QjAwMEEzOTdBRjYxM0Q3OTNDOThCQzY0NkIzMkQ3OTM2NUNFQUEKLToxMDY4QzAwMDlGQ0I1NzFFOTg4NDdDOUY2Q0U3RUY3RjhBNzVENEI3NjcKLToxMDY4RDAwMDk2MzM0MzFFRjFGNjA5RkNGRDhGOENGNjVFRkVGRTE3MjMKLToxMDY4RTAwMEEyN0Q0QTBBOUZCNzZCOEEzMzg0NzFCMTQ3QkU3QjQ5NDgKLToxMDY4RjAwMEU2RENDMkM4N0MyRkZBNUVDMUIwQjk1MUYzN0JFNDdCMDEKLToxMDY5MDAwMEUzMzJFN0JBMjNGM0I5RThGQjEzODZDREVEQzNFRTQ5RDIKLToxMDY5MTAwMDJEOTc3QjcyNjQ1MTZFMjUzNzE3OTJGQzFDRTVBODIwRDkKLToxMDY5MjAwMEI5MzM2QTYwQTk4RUZDQUNBQ0U3NzBGRDg3RURBRTg2MkEKLToxMDY5MzAwMDg2M0M4MjJCODhGMkM2ODBFQjI3OEJDRDcwMERBRTMxNjIKLToxMDY5NDAwMEMzRjU5MzFBMzM1QzgzNkJGQjg2NkI5RDhEQ0JCNURFRjEKLToxMDY5NTAwMEUwODNGMUY1RThGMTFGRkQzN0YzRjg0MzdFNjAxRUZGOTkKLToxMDY5NjAwMEQxMUY5OEM3MUY3MkU3NTcxRTNGMUNCRDJFOUI2RTM3NjUKLToxMDY5NzAwMDhGOUZCNUM0M0NGRUE2MjVFNkYxQjM5NjdFQjVGMUZGMjgKLToxMDY5ODAwMDUxRkE3ODkyMkQ3MEM0MjZGNDVEMjU1QUVGQUMwQjk4MUQKLToxMDY5OTAwMEY0NTM2OEY3OEE2ODE3NTRBMkY1RDg0MEMwQTQ5RjQyMDAKLToxMDY5QTAwMEJCRDc2RDQyREYzNUI1QUI4ODY5RjcwN0QxMUYzMzhEOTMKLToxMDY5QjAwMEFCQzc4Q0RCMjFGQTBCQ0JEMUZERjk2M0ZBRkI4QjY4RkIKLToxMDY5QzAwMDE3OTRBM0ZCRDM2MkZBRkJDMDgwQ0ZENENFMTdEM0FFMEIKLToxMDY5RDAwMDRCQjQ2M0E2NzE5OTc5NUNGODI5NTBBMTlGRUZCMzA0NzkKLToxMDY5RTAwMDNGRkE0Nzk2NEQ1RTQzNzFBRjgxMkMyMEExQkZDRjk3RjAKLToxMDY5RjAwMENBNDYxRDgyRUY1OTJFQ0ZCRjRGOUVCMkVDNjJCNDNCMDgKLToxMDZBMDAwMEQ3MjQ5QkZENUNFOTc2NkU5RkQ5RUMwQTk1QkU0NDU2NkYKLToxMDZBMTAwMDQ3RjkwMENFNjBFNjhDQTg3QzhCNkEzQkRGQ0Y3QURFM0MKLToxMDZBMjAwMEJCODM5OUQ3NDZCRDFGMjhCRTVGMjNFMkQ0NjlGNkQyNDcKLToxMDZBMzAwMDQ2OTQyQkJFQzFEMDNFOEVCRjIyNTM4QzZCQkM2NzY5N0YKLToxMDZBNDAwMEZFNzYxREUwRERGOEFGMzM0N0EzQkYyODMyQUU4REI3MjkKLToxMDZBNTAwMEJCNTg4QzlCMTUxRkFFMzVEOTdDREM0NTM4NkUyMTNFNkEKLToxMDZBNjAwMDM3RjQ4QjYwMjZFMUQ3Qzc0QkUzRjk4MzlFRUY0OUZGRUMKLToxMDZBNzAwMDA1Nzg1OTNERDkyOTJCNDlGMDdFM0RGNzZGMUE3RUY2RUUKLToxMDZBODAwMDY0N0I5RDEzRjM3NjFCMkY5MkQ5NjNEODJFQUI2RjNGOTcKLToxMDZBOTAwMDRFNTNCREQ5REZBOUZBMkE3NEI0RjcwNjU1RkE4QTE0MDEKLToxMDZBQTAwMEQ2RkI3NzBGOTdDQkU1RjFFMjBEQTNDNUJDOUEyQTI3NTkKLToxMDZBQjAwMDM1RTdDMUY4RUM5MEQ5NkYwQjg0Q0RBMkYzNjEwQTk1NEMKLToxMDZBQzAwMEMwNjg3QjNDQkY2RDUzODEyOUFGM0U3OTUwREY3RURCRDAKLToxMDZBRDAwMDQ2QTE1RkY0Q0MwMzNBOEFCNzdFMzcwQUY4RDhDNjAyREIKLToxMDZBRTAwMDkzOUU5NTlDMzI5M0Y0QUJFNDg2QUI5REJFMzhERkFEQUMKLToxMDZBRjAwMEI1RjRFRjYyMzM3NTZDOTc5OEQ2Q0M2NEVFNUMzNEU5RUMKLToxMDZCMDAwMDYxNERCRUM3RjgzRTk0MDkzMjA5RTMzRjY5M0JDMkM4RjQKLToxMDZCMTAwMDNGNjc0QkY4NzkwQTM1MjMxNDk0MjhDRUMxRTc4OTZBNzgKLToxMDZCMjAwMDI1RkUyNEFBRTFBMDBDRUQwNzZENTQ1OTM4OTVCMUZCNjAKLToxMDZCMzAwMEU1QzA4RDg4MUY1NzVFMzNGOUM3NTQ5RjJFMjE5RUNFMjYKLToxMDZCNDAwMEQ5NDI1N0QzNzkwMjUwMTdFM0U1N0ZDQ0IzNzMzRkYwQjYKLToxMDZCNTAwMEMzREFDQ0RGNjVDNzU5QzdEQkVDOUE0OTJGMURGNEE5MEUKLToxMDZCNjAwMDlEODU4QjdCNkYxRjY5QzdFMUVBQTFEMzBDQTA0RkU0MjEKLToxMDZCNzAwMDZGOEREM0U5RUQ4QUJFRDg0RUZBNUE5NjhGRkM4RTg2NzkKLToxMDZCODAwMDdDMzVGODVGQzRCN0U3OEU2MUUyNDdCQkUxMEYzMDhGMTkKLToxMDZCOTAwMERCREE2QzNDQkZFRjczNjgxRDE1RjdCOTRERjhCRkU2NDMKLToxMDZCQTAwMDhBNzhGNzNDNTZFMUM1OTdBNzk5NUM4RTdDNzU5QUJEQUIKLToxMDZCQjAwMEVBMkQ4RTVBQUZCNTc2M0IxRjY3OEQ4REZDNUI0NjNDNDgKLToxMDZCQzAwMDc3N0VCM0NERTRFRjVBQjhEMTVDNUZDMDY2QTZBMzVDMTQKLToxMDZCRDAwMDVBQjBDMUM2RjA3Q0M3NkQxNjdGRDhCRkUxN0M2MTVFM0MKLToxMDZCRTAwMDBCNTlERDJBRDREMzhERkNBMEI5M0VBNjYyRkVGN0UyOTQKLToxMDZCRjAwMDVGM0Q1MjhBNzk0M0NENzY5RUFGRjMwMUQwOEIxNkM1QTcKLToxMDZDMDAwMDU3NTVFRTkwMURFREY5Nzc3NjE1NUYzRjlFRTFGN0ExQTAKLToxMDZDMTAwMDU1ODM1MDlFMjZCM0I4RTc4QzZFNUQ2Mzg2QUYzRkY4MTAKLToxMDZDMjAwMEFERjAzMkQ2NDBGMEY2MDY4N0JBNTU4QUVCQkY3QUQ0N0IKLToxMDZDMzAwMDJFOTlFMjQ0Q0I5Q0RFOTEwQ0U0Q0MzOTE3MkY3QkZDREYKLToxMDZDNDAwMDI5N0Y3NDkxN0NERjI3RTgwODM2QzBDQkI4OUNBRkJCQTYKLToxMDZDNTAwMDFDQ0JGRUJFM0JEOENCNzc4QjlEMUQ3NkU0OEY1QUI1RkYKLToxMDZDNjAwMEFFNUM5MjIzNzEyNjg3MkRBMDBGODZFRjZDN0IyNjg2NjMKLToxMDZDNzAwMDA3MzM1M0JCMzVFN0Q5QUU0RENBMzlBRjc2RTU3MjFGM0UKLToxMDZDODAwMEZENzUwQTc5RjlDMkI2OUZEOUQxQkY3OEZBQTkxM0Q3OTEKLToxMDZDOTAwMDIwMUYyRUZBQjVDMjlDRDBBRTczOUI4Nzg1NzE1RjUwQzIKLToxMDZDQTAwMDQzNzY5NDI3NTVCQjk0Qjg3MTU5OEFGQ0MzRkMxN0ZERjEKLToxMDZDQjAwMEMyNDM3MkEyNkE4NzIzMzQxREJFQUZGQUU1M0IyMzE5OTMKLToxMDZDQzAwMEUwQTFCM0ExRkJGMDYwREM0NzlGOTI3ODdDMzREODMxMUYKLToxMDZDRDAwMDEyRjdBRDJBOTVERDEyMkY0RkVDODRBMEJCNTNDRjI1QzAKLToxMDZDRTAwMENFQzI3NTk1QjZFRUJGOTlGQTZEQjlDMUU2ODg5MjBGMUUKLToxMDZDRjAwMEM3QzRCRTA0RURCODdGRUQ0OTI5OTQxRjQ3N0UxOEYxNDMKLToxMDZEMDAwMEFDNTM0RjRBMUNCRTNEQjY5MDBCRTFEQkJBRDkxRTAwMTYKLToxMDZEMTAwMDM4NkFCNzdFNDg3NDU0RjY4QkVENUVDNDQzRUQxRUM1RTkKLToxMDZEMjAwMEU0RjdBREREQUE4NDFEMjNBOTNDODEyNUM2NTEyNEUwRUEKLToxMDZEMzAwMEVCMUFDNkU1NjNDREFFQzVFNDBGQUY2OTU5RjdBMUUyMjIKLToxMDZENDAwMEM1RUZDREY0MEM3OEYxODcxMUFGNkYyOEZFRTk1OERGNUQKLToxMDZENTAwMEY5NzNBRjA2QThGQUEwRkQ3MTJGRTIxNUZBOUQ2MzRGRjMKLToxMDZENjAwMEMyNzhBRUQ5OEY4REZEN0Y5QTEyREIxRjYzREQ3NkE0Q0EKLToxMDZENzAwMEFGREE5NkI1N0MzQzBCQkY3QzgwQkY2NEM2QzY0RjlDMjcKLToxMDZEODAwMDBFNEIxQzZCNkJFQTc5RTk4OThCQjY5RjdEMzQwOEUzNjcKLToxMDZEOTAwMDlEREFGMUQ3NDc4M0I4N0ZGRkJGOEYxRUJEMTNGNTlBRTkKLToxMDZEQTAwMDdEMkUxRkYyN0JFRDUzQUY3OTU5RDQzRTk4RTNFMDdDMDIKLToxMDZEQjAwMEQ3RjlFNENGOUY3ODE4RjhBNEYzQjg4MzhFRUU3NUVFNzgKLToxMDZEQzAwMDdENkY4ODA2RjNFRDdDRjZCRkQzMzU2ODdGQzdERUFCRjkKLToxMDZERDAwMEM4RUVCRjYzNzdEOUMwQkVGNjQzQTREMzUwRjQzOTE3QzkKLToxMDZERTAwMDkxQzdBNEVEOTE1MEQ5MDI0MzVFOTQ5Njc1MzlCODRCODIKLToxMDZERjAwMDYxMkU4MEYzRjQzMTQ3MDhGMzlBNkJFMUQ5QjIyMjVDM0IKLToxMDZFMDAwMEE3QzUyNDdGQjFCRTFDRjA1QkIzNkRGNTg3Q0FDODc4RjcKLToxMDZFMTAwMDc4MEUwRTk2MzFDNzlFMDFCQjY0RTAzQTVGRkJFRDZGQzIKLToxMDZFMjAwMDk0NjA2OUEzMzg0OTJERUIyNkY5NjlGREFFRjYyOEFDQ0MKLToxMDZFMzAwMEU3NjVCREFGREY1OUY2QjkxRDgzNzhCNURCRDZGMjcxRDIKLToxMDZFNDAwMDJERUI3NzFBN0YxOTFCQkI3RUJBNjVGRENFQjJFQTlGODgKLToxMDZFNTAwMDNFOEMyRjc3QTVDNjhERTcxQUYxQUZDNUJCRkZBNTRGQjYKLToxMDZFNjAwMEJEQzk5MDAzRkRFMUI3NTJFMjcwNzkxQzdBODUwM0Y5NDAKLToxMDZFNzAwMDY5QzdEMzRGM0M5Q0M2RDc3NzNBMjBBNDczRkJEOTIxNkUKLToxMDZFODAwMDBDRThFM0E0QURGQjY2OTQ4RkREN0IxRDNFRENDRkFCNEQKLToxMDZFOTAwMEY2QkU0MUZDRDVCOUZCMTVCQjQ2RjI5MUI5MjVEMDEzMUUKLToxMDZFQTAwMDNBNTlDRjRGM0JFQTBEMzUxMkFGRDQ2RUYxODQxRERFNTcKLToxMDZFQjAwMEM4M0FENTg0NjY5NDZCNUU3QTdFODI5RTg3MzhEREQ3MjkKLToxMDZFQzAwMDg0RjY1RjI3QzU1OUI3RDU4RTFDMkU4RjQzM0M2OTZGNUEKLToxMDZFRDAwMEYxOTYzRkQ4OTlEQkJDOUVEMjE4NUNDNzEzNTNGMDc5NkEKLToxMDZFRTAwMDZGRUI2OENDREY4N0YzQkYzQzZBM0RCNzcwN0VFRDhERkEKLToxMDZFRjAwMDJGM0IzNzNCNTRDQzQ3MzBENkI3RDNDNkY1RkREQTkwOUQKLToxMDZGMDAwMEY0MDY4QkMzQUZDNkZFNzZBMUYxRDAwNjg3MjUxRTJBRjQKLToxMDZGMTAwMEU2REIxRjNGRjczRjhGMEJDM0QzMTI0Q0FBMUMxRDhCMjAKLToxMDZGMjAwMEFGNTM5RkM3OTdFRjhGMzgyNDAxNDc1REY5QTBEQ0Q4OTYKLToxMDZGMzAwMEZENDk2NTE1QzFDMUQ5MTE3ODRGODk3M0IzQTc5RTUyMTgKLToxMDZGNDAwMDQyNDE3OEJFQUFFNTIwQzk2OUFCNUNBOEU5NDU0RjdFRkQKLToxMDZGNTAwMEM2MTg2RkNGRkU5MTI4QkY0RTFENzg4RUU4QjA2NkRCNTUKLToxMDZGNjAwMDA5M0JEQTQ3ODdCN0VFQjQ3NzE0NDZFODFFRTU3Rjc0MkQKLToxMDZGNzAwMDVFRTRBOTY3RjY4RjI0Mzk4REZEQzc1OTlGNUYwQjc5QjEKLToxMDZGODAwMDU3REI2QUVFQkY3NkRCODdBNkZFMTcwNTVCRUNFNDE3REUKLToxMDZGOTAwMEVENjc5QzBGNTRGRDA2OUNFRjA3RUQzNjg2NzlGNzFGRDEKLToxMDZGQTAwMEI0MjhFNUYxRjQ5QjkwQzM2NkNBODM1QUU1MjkzRDg2NkYKLToxMDZGQjAwMDdFNDUyNUM1QUVBMUJDNkI1QUExQkYxMUE0NzM4RjM2MDcKLToxMDZGQzAwMDdFRUU1MUQ1OEYzOTgwMkYxQjkzRUQxQURBQUI0RDlFOTMKLToxMDZGRDAwMEVCOTkxNjI1Qjc5QjJERjhGNEE1RjkyNjYyNUNDRDM3MDEKLToxMDZGRTAwMEI5QTIyNERBN0UzMkUwNEZENjY1MTNGQzc3NzhDQTA3NUYKLToxMDZGRjAwMEUyNzkwOUI0QzMzNDRDMzI1MEZERTQ1NzU2QkM1M0NBNEQKLToxMDcwMDAwMDcxM0U4QTRGRjZCOUUyRUVDRkJDM0ZGNEI3MjFGRERCMEIKLToxMDcwMTAwMDdDMzJEM0EyRTg2QjU0RDlGNUMzRDFENUE2MzJDRDk0MzYKLToxMDcwMjAwMEJGN0FFRjY0MUVDNzM1RTY3RkVGNDU2QzEzMDNCOTdCNkIKLToxMDcwMzAwMEFGRDRERDg2RjlFQ0MxQUI3OTVFMjAxMzc2QkExN0VEREIKLToxMDcwNDAwMEY0RUM1ODdEOEVFOUJBODZGMjg3QzQwRjZGQ0Y3NDIzQjMKLToxMDcwNTAwMDdGMTQ3RUJFMEZFMEM4OThCRjIzRkI0OTk5RkZCRUEyRjQKLToxMDcwNjAwMDUzM0U4RjFEQzdDRDQ1RkIyOTQ0Q0YxMzU5OThFQThBNUIKLToxMDcwNzAwMDkzQ0IxRjBGQUJBM0U3NDlBQ0EzMTlDRjMwQkRFREE4NEQKLToxMDcwODAwMEY4RDQwMUNGRUYyQjRGOTEzOERDNjFDQUQ3NDgxNkUzMTMKLToxMDcwOTAwMEM4ODk1OTk5N0RGMTNGOUJBQzlFOEFGNkZCMzhEODI2NkEKLToxMDcwQTAwMEIyNEJEMEVERjg0NTZBMDQwRjQ2M0U5Q0QxRUZCREFFMjEKLToxMDcwQjAwMDA5MTJFRTM3MzhCRkMxNzhBRTQ3OUM5RkY3RjVDQzU3MjEKLToxMDcwQzAwMEE3RkEwMEEzNkUxOTA3NUJGQTRBQzUxNjRCQUMxODkwRDUKLToxMDcwRDAwMDU0MDU2RjBENjgyNjNGQzcyMEQ2NDI2NTE2NkJBNzMyNTAKLToxMDcwRTAwMEM1RTk5MzU0ODJFRjJERjI0QkM5RUNDRkVDOEI0NDBCRTYKLToxMDcwRjAwMDdDRTdBMThGOUY5M0Y1RTMwMTI4MUI2REUyRjlEQjlFRUUKLToxMDcxMDAwMEQwRTM1MERGOTBDQzRDRTc4MzczOUQ5Q0JGMkY3N0NBQjAKLToxMDcxMTAwMDg2NUYyNjEwNkQ3NzM1QjI2QTlBQkIyQjhEMUY2MzMxNUYKLToxMDcxMjAwMEJFQkJERTE5MThFRThDQTIyN0M1RERDRUYzQkU4NEZERjIKLToxMDcxMzAwMDZCRDhFQjU3MjlDQjI5RkVCRTNBODNEQkQ1QkRBRENGNEIKLToxMDcxNDAwMENBRkEwQTkzNUQ2RDJEOUIwNzM4RTc2QzY2MDQzRkY3MUEKLToxMDcxNTAwMDUzNDk0RTdFN0U1OTY3OUEyRjlBRkU2MDVDNjc2OTc0MjgKLToxMDcxNjAwMDNFQTNBRTkzN0QyRkRFREI2MDdBRjhEMjgxNzg1NDYyNDUKLToxMDcxNzAwMEU5NkYwNkQyREY2OEE0QkYwRUQxNDkzN0Y5Mjk2RTU3RUYKLToxMDcxODAwMDAyNTdFMzdDMzNGMkVBMjRGRTNDMjA3MUJGOTdBRUUwNjUKLToxMDcxOTAwMDdDRDM0NUZGNzI2Mjc1NjZBMDhGNzlCMjU5NDAxRjUxNEEKLToxMDcxQTAwMDc5MkQxQjg0RkRBOEFBNEM0RDI4NDI3ODM2ODk3NUI3RTUKLToxMDcxQjAwMEQyQTUzOTNGRDVEMEQ3RENBMkU2MTA3OTcyQkYyOTc5QTQKLToxMDcxQzAwMDk1Q0VBM0E4Njk2RUNBNEY3MTk3MzRERDhFRTc3QzU1QzIKLToxMDcxRDAwMDU2RTc0M0Y5RTkzNkYyNEZGQzNDOUZEMEIwOEI1RDA1OTIKLToxMDcxRTAwMEU2M0M0RTg3MjU2RkQ1MjZFQ0VGOTgzQzZFQjFFRkRFN0UKLToxMDcxRjAwMDgzMEZFMkU4QzNENjdERjc3NjY3RkMzQzI0MzYyNjdFMTMKLToxMDcyMDAwMEJFQTBBMTg3OUQyRkRENUJFREM4NkE2N0ZCNjExQURDMUMKLToxMDcyMTAwMEE3NTM5RUE1MkFGQzBEMTNBRkYzOTExRkJDNkI5QkM0MTMKLToxMDcyMjAwMENGQUQ1OUU4QTg2QjQ3RDI0ODk0ODdDOEJGNzhDRjQ1RkYKLToxMDcyMzAwMEEyNzgyRTZEREJCRjFGRjVBNjI2MkZEMzkzNTM0OENFMjEKLToxMDcyNDAwMDY5NEEyRTlFOTcxQUU1OTRBMDVDQkNFQkMzOTc3RjhEOEMKLToxMDcyNTAwMEZFRjU1Njg1RTFENkRDRTUzNkUyOTM3QTMyMkU1NjIyRUIKLToxMDcyNjAwMDVCNkY1QURGMEI5RDRGNkM1QzkxRjNEQjEyOUZDMTZGMUMKLToxMDcyNzAwMDZFRkFGRUNDMzY4OUNFNEYyOTZDRjg4RkYxRkM0MzZENDcKLToxMDcyODAwMDlCOEQ4NUUwRkQxOUM2RkIzRkIzODlFQjAzMEI1Rjg0NDMKLToxMDcyOTAwMDUxRjAzQ0E4MTgxRkY3QTVFOEZEMjNCNTNDODE2OUQxNDIKLToxMDcyQTAwMDc5M0M0MUJEMURDRkZGQ0YxM0Y4MTg1MDkxNjI3QUZGOTIKLToxMDcyQjAwMEQ3QjlFNTZERTQ5RjA5RjA3QjAwMDZDRTFBNjRFQTZGNEEKLToxMDcyQzAwMDkxQjI3QzI4MjVFMTA5M0Y4NjA2RkY5MEZFOENGOTlGNEMKLToxMDcyRDAwMDkzMDM3NkJFNEY1NDI0ODU0OTlGMDFGQjE3RUQ4NjkwOUEKLToxMDcyRTAwMDQ0Rjk0QTU2N0Y0N0NEMUU4OUY2QTdEQjYwN0ZDMkYzN0IKLToxMDcyRjAwMDM4Qjc4NTJDRjZBMzI1OEZDRUMwQjc5NTJFMEYzOTg1Q0MKLToxMDczMDAwMDdERTA2NkVFNUVGMEVBMEY5NzUwN0M5NEY4NkFDOThCRDgKLToxMDczMTAwMDNDMkY2Q0M5NzYyOTQ0NzlDQzFENDM5MzE4RTE1OTIxM0YKLToxMDczMjAwMEJGRDE3QkFDRUU0MUQ4MzkyMkY0NkJDMTlCMjNDMzhDMTcKLToxMDczMzAwMDY3OTc2NkM2NzM2MjgxMTlBRjFFQkYxOThGNTYzQzI3QzcKLToxMDczNDAwMDhEQzkzMUI1NUZBNDU0REI4OUM4MDQ5RTBCRTAxRkUyRjAKLToxMDczNTAwMDE5RTQyMENEQTMwNkU2MTFENjYyRjE1OUQ5N0FFRjJBQjUKLToxMDczNjAwMEY0NkZGNDhCNDcwQkZFNEU1OUYwNzc5NkI1RUVFNzZGNEUKLToxMDczNzAwMDU5ODUzMzlENTg5QkU2OURBOTg2ODk3RkFDRkM2NkUwQzQKLToxMDczODAwMDI5Q0JENzNFOTE5RUY5M0RFNDJGQ0UxMDlENDhGM0Y4Q0UKLToxMDczOTAwMDc3ODM5QzJEOUM3OThBRkNDNDZGNDY3RTcwNjJDRjdFNzkKLToxMDczQTAwMEY5MEVGQjAyQ0FBNTMzMEU5RDk4Q0I2MkY5NkIxMzk2QkEKLToxMDczQjAwMEMwRDcyREY1NEVERkJDN0M4QzRGMzNERjNDMUJDNkFCRkEKLToxMDczQzAwMDdENTRDNkQ5NDdBOTdGQTA0N0RBMEZFRUMxQjg2NDFBMjkKLToxMDczRDAwMEYyQjU0QUYxMkI1Q0FBRTk1MDRGNkNCNUY5RDA2Rjc5NDAKLToxMDczRTAwMDRGNTFGNzM1QThCN0Q3Q0VFNzc5OEUzNzI3NzBGRkVCMjcKLToxMDczRjAwMDkyMDRCRUJGREExMjc4NUVGMzVEMTUzMkQzRDFCRTZGNTAKLToxMDc0MDAwMDU1NDIxMkZBOEI3Q0ZBOEI1N0EyREVENTZBRDM2ODVGOUQKLToxMDc0MTAwMEYzNzVCRkZDMUQ3QTVGRUNDM0Y4NkVBNkRDM0MwQUUxOTUKLToxMDc0MjAwMDgwRjZFNDZGRUY2QTdEQzc3QjZCOTRCRUQzQjlFN0ZFNEQKLToxMDc0MzAwMDYxQjhFRjNDMjRCM0NBNzg3QTdDQkU4QkMzRDE1OUYwRDMKLToxMDc0NDAwMEU3NzQyNEM3QzVDRTZFQjJBMzU3NzdENDU1RTBCQzBDMDEKLToxMDc0NTAwMDNCQzJCRThCRkJCNzZBRjZDQzIwN0RGMkQwMDI3RTFFMEIKLToxMDc0NjAwMDczRjcyOTdFMUU3MzhBMzJGQjlCMjNBMDNFRjYzNTk1NjcKLToxMDc0NzAwMENCNERBNjRGOUY5M0NFNTMyODcwMUQzNzYwQkUyNEYyOEMKLToxMDc0ODAwMEMxN0ZDOUExMDZDMjRGRjNFRjMxNEVENUY4MTc5NUExQzAKLToxMDc0OTAwMEZFNTg1MkI3ODBGNjlGNUY3QkE3QjQ2MTU5QUFCNzE0MTQKLToxMDc0QTAwMDIzNUY0RjZFNEQ5RTg4RTc2NDZBREZFMjc5OTVBM0RCMjgKLToxMDc0QjAwMENERkUxQ0E2NTQxRjQ0M0ZEOEQ5NjM3QzVCQkVGQzk4MEMKLToxMDc0QzAwMDZBQjVCQjE0REM4RkM3NzY5ODlGOEZFRjg3NkVDQjVDNTUKLToxMDc0RDAwMDYyM0ZGMkIyRjQwQkM5OEJGRDkxQUM0RjczOTE3Rjk0NzQKLToxMDc0RTAwMDlGRTNGMkFCRjFFREE3NDcxM0I4N0QwMzc4OTE1MDRFQkYKLToxMDc0RjAwMDc1NzUzMzdGMDNFMEE5NkJERTIwOUE2RkQ3QzdGQzZBRUUKLToxMDc1MDAwMEE2QUVDRjk1RjI3OEY2RDEyRDJFNEUyRjBGRDk3OURDN0QKLToxMDc1MTAwMEY2QTEwNUVFRDAwQTk4Qzc4MTA1NTUxN0EzNURGNEM5RjkKLToxMDc1MjAwMEJGMDUyRThFMTdBNzg4RDgwNzJDNDlBNjNENEY0RjYyNUUKLToxMDc1MzAwMDYzOTAyRjlBRjhGOTMyRDY5QzE5RUZGQ0JDQzEwRjA2NjQKLToxMDc1NDAwMDdGMTg3QzkxQjkyMDIxMTBDRjdGRjk4RThCQ0Y2RkQyMUQKLToxMDc1NTAwMDgyMDJDQTgzRUREQzI3NTE4Q0E3QjMwMUUwRUEwMzhGRDYKLToxMDc1NjAwMDQxRDYzMDE4RTFBOURERjMxMUY5MTc5Q0FERjFGREQwM0EKLToxMDc1NzAwMEY1Nzg0ODAzRTlCNjIxQjg2MjNDRTBFQjdCQzBENDQxMjIKLToxMDc1ODAwMEU0MDc3QjczNzZCQ0ZFODM2QzAzRjk5QjE2QjgzNEUyODgKLToxMDc1OTAwMEI3NEUyN0I3QTM5OURBOUMzOUQzODM3QzUyNzZGNTJBNjQKLToxMDc1QTAwMDgwRjM2MUUwM0YyNEY5ODc2QzdFODIzQkI4OTgzMUYyMkEKLToxMDc1QjAwMEFGQUE5Q0ZGQjNBRTYxOUJFRjhBQjJCN0Q2QkEyNjNFQTQKLToxMDc1QzAwMEUwODJGRTFFNzBGMTc4NDc2QUMwMkYyMURDRkVCRjlGNkIKLToxMDc1RDAwMEYzNjJGRjVEOUYzQTY4RkQwNjA5M0Y4RkYxNUQ4QkMwNDYKLToxMDc1RTAwMDRGNTk4MkZFMjNGQzlFNTVBNjkxMzBGNDA3QkNCRTc5MEMKLToxMDc1RjAwMEIwRkY1RkI2MDdGMDFEMjdCRkNCRDA3NzUyMDIyMEZCNEMKLToxMDc2MDAwMDAwOUUxNEI3NENFNzU2RDBERTQyN0JBMjk2MTkzRjQxNEMKLToxMDc2MTAwMDUyM0UwREZFQzM0MzY2NzgzRUNCOTBCNzUyQUIxNEY2OTQKLToxMDc2MjAwMDgwREMyQzcxQkFDM0U4NEY0OUE5ODQ3OTYzM0M4QTM5NUMKLToxMDc2MzAwMDc5N0ZFRDY2N0QxNDI1MkZDQTVEOTQwMTNDNTk5RURCNTAKLToxMDc2NDAwMDNCODYxQzM2RTQ3NzUzMzI5NzgzNERGN0FBQTE0NjA5NEYKLToxMDc2NTAwMEQzREYzQjVDRTgzRkNFRDZCNTQ5OTg1QTk1QTI2QTk0RjEKLToxMDc2NjAwMEU3NzA1MTI1RjMwNzUxNDhFNjNFOTJEQ0EzRjc4QzY3OUIKLToxMDc2NzAwMEVDRDlCRjJCNzFGRDFCMjc1RERDMUUyOTRCMDhGQzBBRDIKLToxMDc2ODAwMEYxMzVCMkFERkIwMEFBNEY3RTE3NEJDNUY1OUUyMkY0MzMKLToxMDc2OTAwMDlCQjFBN0I5M0MzMkYyRkE2Qjg1QkQ2MTk1NDdDRjAxMkEKLToxMDc2QTAwMDlEQTNDMDE4RkIwREJFRUY4RDNERURGNjIzRkRGNEM4ODQKLToxMDc2QjAwMEExMDU1MzY4MUYyRDZBMkQzRTg4RjkzOTQ1NkY3MTdFRUIKLToxMDc2QzAwMDY0NDJGRTgwRjU0Njc4Mjk2RDBCMkE4ODBGQUJEQ0U5MTEKLToxMDc2RDAwMDRGREUxOEYyQzRCQUNFQTA1Q0Y3RDRCMzAwMjlDNTZENTIKLToxMDc2RTAwMEMwNjc1MUZCQjc1NTRFMUQ3Mzg5RkQ1NUM4QTlCMzZDRDIKLToxMDc2RjAwMEMyQzBBQkI0MDgzRDE1MkRGMzFGNzQ0NEQxOEYyMUE3MzAKLToxMDc3MDAwMDIyRjQxNDIyM0FCNDhFMjMzMTY3NEZERDk3OEJGMkU1RDEKLToxMDc3MTAwMDg4ODI3RTkwQUU4OTNDM0VCOTQyRjA1MUYyQzdBMUFCNUYKLToxMDc3MjAwMDcxRkUxQjVBQTdCQTkwRUU3N0I0OTUzOTkxQUQ5NjY0NjUKLToxMDc3MzAwMEYwNzM1RUVBRkVFQjgyNEM5MDRGNzQ1Q0Q3QzY5QzFBRTUKLToxMDc3NDAwMDlFMjkxRjBGMkI4RkY4NTA3QzUwOEY5QUQ3OTk2NjQ5MkUKLToxMDc3NTAwMDlDNzNENDkyQUU4QjczM0Y4MjUxMkVDOUUwRTdCODc2MEEKLToxMDc3NjAwMEI0RTUyNDcxM0IzMzRDRUJERTQzRjdDMjBGNjFGMDg1ODcKLToxMDc3NzAwMDQxRUY1NkZBMzZGOEExOTE3MUJGODRBMTNGMjg1MjhCOTAKLToxMDc3ODAwMEIwMEJDRDdFODE0NkMzQ0YxMTc0NTE5Q0Y4MEVBMTBGNzIKLToxMDc3OTAwMDM2QkEyRjU5MzcwMTdFNkQwQTRGRjI2MTVDRTIwRTRGMDcKLToxMDc3QTAwMDBFRTUzM0RGMzE4MEUzQ0Q4QTA3QTNBQ0ZEMTRGNEMzQ0IKLToxMDc3QjAwMEE4QkNGMzVBQjU5QkZDNUFCNTlGREE0RENGMERCQ0Y2NjkKLToxMDc3QzAwMDg2MEYwM0FGRTMxMEFGRDI5N0M3RUJBN0I4QkVBMzYzOTIKLToxMDc3RDAwMEYxRkI2NUU3OURCNTY0NENEQ0YzNzJGRjU3RTYzRDlFMTcKLToxMDc3RTAwMDA1N0VERDQxNzYxNzNGQjc2MUQwOTcyMTJGNEE5NzZFMEUKLToxMDc3RjAwMENDMjRFMjY4MzdERkVCNjVDODkxMzE3QkVBMEVBMjhBQzAKLToxMDc4MDAwMDY4OTUxMzk3QjVCMjZCMTE0RjYzQzMyQUMzQTMyRUZEQkUKLToxMDc4MTAwMEM5OEQ4RkYxOTc0QzNBN0Y3MTYzMDJGMERGQTgxNzY2MkMKLToxMDc4MjAwMDJEREEwNjhGNDY2QTJDNzUzQTAwMzVCMjVEMjUzOUM2QzkKLToxMDc4MzAwMERBQ0YyRjBFRDUxMkZFMzgxREZEOEI4NjVFMUE4MzU3QzgKLToxMDc4NDAwMEExOTcxQUZCOEIxMTA3NUE5NzEwQThDNEYxQTUzREMwNDgKLToxMDc4NTAwMDM3NUVDQzNGRTVGNkVFNUE1NzYwNTEwMkI0NEYwNDk4QkMKLToxMDc4NjAwMDEzMzBEN0FFMjA5Q0NERUQ1MzMzNUZGNkM2ODc4OTE2MTMKLToxMDc4NzAwMDNFNkIwMUJDRDAzOTA0RDhFN0YyQTU1ODM4OENGMUYzM0YKLToxMDc4ODAwMDEyOTIzOTlDNDA2REE4QkY2NDk1MzIzRTU4MERCRkNGMEYKLToxMDc4OTAwMDJFNkIyNDBCRTAzRThDQzczNjcxOUU2Qjg1RkU3NTk3NzAKLToxMDc4QTAwMEE1NUNFQkFBNjhDMDc5RDk1NDE2NzQxNDdENzlCODBEMUIKLToxMDc4QjAwMEJGRTBCQTA0M0Q4OEY4NzA5NkVCMzQ4RkMxM0VFNjQ3Q0UKLToxMDc4QzAwMEJEN0VCMERBMjJGOTAxOEU5NDZBNERFQTcxRDYxOEZCQkEKLToxMDc4RDAwMDM3OUVGQjk5QUU0RDQ0QkExODlDQzdFODNDRUM2MEQ0ODcKLToxMDc4RTAwMDgzRTJBQ0NGQTYwNDFFQUY1REVDRUMzODhDMjFGM0RBNUEKLToxMDc4RjAwMEU5NzVFNURFM0VFMkQzOTE3QjA2RkNDMjRGNjVDRUMzNUYKLToxMDc5MDAwMEU4REFGQkM2NDUxODk3N0NGQkRGM0ZGMjYwRENFOTRGMDUKLToxMDc5MTAwMDZBQjcwN0UxM0NCOUZDRjcxRUJDQkZFNUVERTVEQ0NFN0MKLToxMDc5MjAwMEI4RDlBMkNGRUMxNEY4NEI0RUFDNzgwQUYxNzc0QkZERTYKLToxMDc5MzAwMERGNEJBM0Y5OUQyREUzNzE5NERCNDIwQTFBOUQzREY0QzAKLToxMDc5NDAwMEJENjg2QjIyRjlFNjhDRkFFMjk2NTQ1M0REQTBEM0M1RUMKLToxMDc5NTAwMDBFOUUyNzY1OURGRkZCQzI4RUJBNkREQjY2RkI2MDBEMzgKLToxMDc5NjAwMEM3MEZCNDIyQkU0RjBBN0RFREU0MkUwRkY5MzMwQzc4MTkKLToxMDc5NzAwMEU2NkUxQjY1NDczQ0ZDQTlENTIxRTJGMEVEMzY4RTdGMTMKLToxMDc5ODAwMDdEM0FDNkNGMDI2MjI5QUM3MDFFREU5NzQ4RkRDRDdGREUKLToxMDc5OTAwMDQwMjFGRDYyMEU4Q0I1MENFODNCRDA3QTFCRDlEOUQ2QkMKLToxMDc5QTAwMDc5Q0M3RjVCOUIzMjEwRDY2RkZFNUE4OUY0NTI2Q0JGNDQKLToxMDc5QjAwMDFDRTgyMUIwNkMzNUM1RDlBQ0YzOUMxM0I0QzYzMzk3MjEKLToxMDc5QzAwMDkzOUQ2RUNERjM5OEM3QjQ3NTEzQjJFM0U0N0JCNEYyMjQKLToxMDc5RDAwMDM4RjlDMjdFRUM5QTNGMjYwODdEQTE5NDVEOEVGOUU4QzUKLToxMDc5RTAwMDY3NTlFMThGMEFCNUZFRUQ5QTkzRjU4QzkyQjQzRUE4RTMKLToxMDc5RjAwMDc3NTI3OUFBREU0N0U1NTMwOTFBOEY2N0VGRDk3Rjk4NDYKLToxMDdBMDAwMEU4NEI2RDJGNDU3RURGRDFGNjRFRTI0RDVBNDQ2RTVGNTYKLToxMDdBMTAwMEIxRjlBMzgzM0Y4MTdBMzFFM0ZFMUJDMzNGM0U1QkUwQjQKLToxMDdBMjAwMEZCNEEyMUJGMTcwQTdEQTBGOEQzQkVFNUY3NkM5Q0VGOTcKLToxMDdBMzAwMEM4NTg3ODBEQjkzRDFCRUY5NThEQzI4MzIxQzdBREY4QUQKLToxMDdBNDAwMDM4RDM5NjlCODg3NDIxMjU1QUUzQzA1RjBEMkZCRDdERTYKLToxMDdBNTAwMEI3NTg4OTlGMzc2OEYwQ0Y1M0MyMUYzMDZGQ0I4QzU1MTIKLToxMDdBNjAwMDgzNjBGQ0M2QkRFRjBERTFGNzAyQjNBMzI4MUYwQ0ZBM0IKLToxMDdBNzAwMEI0RDIxRjYzNzU3NkU0RTcxRTNBNkJCRDlCRjA2M0QwMEEKLToxMDdBODAwMDA1RjA1MTg2ODgzRjY2QTBERDY3QTVCN0ZFRjI4OTNBMEEKLToxMDdBOTAwMDZEMUQ0MzUwMEU1OEU5QUI1MzYyNzFFRjE1NEQ0REU0MjcKLToxMDdBQTAwMEZFRjI3OTlBM0UwNUVENTBEODVFNTZGMTM4MUQ5NzNGQUIKLToxMDdBQjAwMDI3RDVFNkMzNzcyMjdGNkVFMUZDQjFGODU3REI3Rjg5REIKLToxMDdBQzAwMDcyQTdFQTE3MEY3ODUxRUVCQ0FGMzZBN0UzNzhENThGQ0YKLToxMDdBRDAwMEFGRjQ2MjlDRkJBNDFBRjRFMkY3RUY4Nzk0Qjg3OTg1QkYKLToxMDdBRTAwMDBCMTMyNUUxMEYzN0U3MkJCMDM1QzE2QjkwNkYzRjc5NTIKLToxMDdBRjAwMERDRTY0MzNGNDNFRDU2MDc4RjgzRUZFMjc4ODMzQThGMEUKLToxMDdCMDAwMDdGRUY4QTlGQUY1MEY1RjMwN0QyMzU5RUM3NkFDRTVCRjEKLToxMDdCMTAwMEQ4NjJBM0ZDMTNGNDk3RTEzMEJEQzU3MTdCRTJDMjJEOUUKLToxMDdCMjAwMDdEQzdCNzZCNzdBRDhCOUI3NzYyRTQwNzU4RTlGNjA2QTQKLToxMDdCMzAwMDBCQkQwMjVFQzg4RTA5MDIzQ0U0MTYxNzcxRUJDNjI3MjYKLToxMDdCNDAwMDdGM0NGMjA0QzA3NTZBQ0I2RkJENTI2MUI0REY5Q0M3NDUKLToxMDdCNTAwMEM3Q0ZCNERDRkE1MzBDRjFGNDQ2QUY5RDgyQkUyMzdBNTIKLToxMDdCNjAwMDQzMjg2RTFFNDNCNTJERUM0NTNCQkM3QUIzOERFQ0JBNzEKLToxMDdCNzAwMEVBRUQwQTczNjIzRUNCNzEwN0VEREI4QkI2RkZFNkY1RUIKLToxMDdCODAwMDcxMDBERkEyNjc2RDY5RDNGOTM0Mjg1RkMxNThBNzlFRTEKLToxMDdCOTAwMDNDMTJCMTJFNTUzQjdGQzNFM0JEOUFDODI3MTFFQkIzMEUKLToxMDdCQTAwMEU4RDlGRDc2Q0M4QkIxRTJCMUFDNjVCRkJEQzM5MjhGOTUKLToxMDdCQjAwMDQwRUJENDcyNjIwQTlEQ0I3QkYyOUMxREY3RDNGN0Y3QTIKLToxMDdCQzAwMDQ5NzRCRkIyRjVGQkNBQ0RCRkYxQTI3QzQwM0M1MTVDMDkKLToxMDdCRDAwMDVFQUM1N0VGRjk0MkUxNkI5RTJGQTE3NkU0ODdFQjZEMjcKLToxMDdCRTAwMEZEQzZFMERFM0E5QUU4RkI5OUU3NjFGQ0NBMzcxRDk0Q0UKLToxMDdCRjAwMEFGNTRGOUNDNTJDQUVGNzk0RkFERTM3NEZFQzhDQTc0RTIKLToxMDdDMDAwMERDNUYyQjZEQzE3NDFGOTVGQzc5RTVBM0RGMjVGQTVCNjIKLToxMDdDMTAwMEY4Q0E3N0QzRjk3OTFFM0Q5M0ZCNkQ4Mjk5MzhCRkY5ODUKLToxMDdDMjAwMDlCRkU4NUU2Qjc4MDA1ODhGRTJBMUY1MTJBRDA1RjcyMjkKLToxMDdDMzAwMDU2NjVFNUNGQzZFMTkzM0YwOTNFNzlFRjMxMDcwNjUxMUUKLToxMDdDNDAwMEQ5N0JDMjZGMTk3QzU1MTFGN0ZFNUFFMzQ5RkNCRTk1RUEKLToxMDdDNTAwMEIzQzI4RURFOTUyODFCRjcxNDM5QTNFREFBREEyREFCM0IKLToxMDdDNjAwMERCNzE3RDNFQjg0ODFGRThBM0I4QkUxQTE0Rjg5MjQ4RUQKLToxMDdDNzAwMDFGN0ZFNUFBODE0MjhFRDEzRDMxODY5RTUzODZDRkIxQ0EKLToxMDdDODAwMDdEQkI4REVFOEI4OUZBQ0U3NERGQ0IxRDYyN0M4MDNCOTEKLToxMDdDOTAwMDQxQkEwQ0NBRjRGOEZFNEM4RjVCMzJFMEUzRjkyRjA2RDAKLToxMDdDQTAwMDdERjVDNkY3NUI3ODNFQzlDNzQ3Qjk1Q0MxQkMxODdBOTkKLToxMDdDQjAwMERGNkUwQjBGMzRFNUMzMzg0Q0Y3ODk0NEYyM0Q2QzgyMUMKLToxMDdDQzAwMEFGQ0RFRjAxNEVDQTU3RTlDMUVGM0U4OUUyQUMwQjM2QUEKLToxMDdDRDAwMDM4Q0M3OTcwM0Q3NDYzQkRFN0M2OUNCRkIyRDBBMjZGNEIKLToxMDdDRTAwMDE5QTU1NTJFQkM2OTkxMEI2Q0QzRjlFNUFGNTREQjQyNTUKLToxMDdDRjAwMDk0Nzc1NDdEREM0MUY2NDNGNTc2NUIwNUUyRTNBRkRCMzgKLToxMDdEMDAwMDBFQkU3RTEzRDBGOTVGNUIwQ0JFMzVDQjU3MkJERjU2MTIKLToxMDdEMTAwMEVFMThDREUyRjFFRDVGREQ3RTE2OTc2RkUxNzk1Q0JFODYKLToxMDdEMjAwMDc1NDdFMjExMUFGQkZBRTRFQkMyNUVFNEFCRTI4RUQxRDYKLToxMDdEMzAwMDA3OTIzMDJGRjc4M0E3MTY1RDRDN0UwNjBCNUUwREI5QjgKLToxMDdENDAwMDZBOTU5NzhGMjQ2QUZDRkU4Mjk4QkMzQUJFOUY0N0YyRTAKLToxMDdENTAwMDFEMzlGRTBDN0FBQzdBN0EzMThERDM0M0I3MDY1RDFBQTEKLToxMDdENjAwMDc0REI0QjlFOTYxNThGRDZGNzJGQTIzQzFBMTBFQkNGRTMKLToxMDdENzAwMDA4NEU2MjA1NzhBRjVFQTM5RDE1QTBGRjM5MjgyN0Y4NEQKLToxMDdEODAwMDFGQ0Y4RTkzRDdDMUVBODZBMjlFRDFFOENFOEU5QjlGNEQKLToxMDdEOTAwMEVCNzdGQkQwOENDNTczNjU0QUJDNzhCN0JGNEM4RUFCMTQKLToxMDdEQTAwMEM3OTdCOEI5NUNEOThCQjQwMDY1QjU5QkUzQUQ0OUM0M0UKLToxMDdEQjAwMDU3QzAxMkE0QkM3RkY0MjkxMjNGMjU3Qjg5OUY2Q0YwMjkKLToxMDdEQzAwMDlDRDFCOTRBM0Y5RERCRjYyN0NBMUY2OUEwODI1NUI4RUUKLToxMDdERDAwMEI1MjkyQUZBNTM4QkU1QTVCOTUwNUZFODJFRTZGNUYxRUYKLToxMDdERTAwMEYyQ0UxQ0E4REZFNjJFRTFGNUNCRTQ2MjFCOTBFNjEzOTEKLToxMDdERjAwMDZDRjQ5NEM5NTBBRjMxRTYzOTJGQzlFNERGNTBFNTEzNzQKLToxMDdFMDAwMDBGNjJEQzQ1N0Q5RURGMTdCNzBFRjhEQTU5MTQ4OUY3NEIKLToxMDdFMTAwMDI2M0E1OEQwNTU4NEY3MzQ0MjA5RjU1NUQ5QkY1Rjg1QzUKLToxMDdFMjAwMDQ2RTAwNjQ3RTAxQTM3QzlBMzQ5MUFFMkY1OTRDRjQ5NUMKLToxMDdFMzAwMEY5MzI3NzNDNzcxNUU1Njc1NkJCQjlERjc4RjhDRUYxQjQKLToxMDdFNDAwMDc0RkZFRUQ3MzBGRUNERUUwMUJEOEZERjY0RTNGRDlDMDUKLToxMDdFNTAwMERBMzFCQzBDRjEzQUZDNjI0NjdFMDgwM0ZGNDVBQTQ2QzMKLToxMDdFNjAwMENGNUQyRDc4RjQ5NEY4M0YwM0NGN0YzNDI2REJBOTlGQjQKLToxMDdFNzAwMEVBOUVGNTNBQkZCMjUxRTQzNTI4ODk5QzBFOTQyNEI5QTQKLToxMDdFODAwMEVFNTkyODk3OEFGNUJGNDNFMDAzN0ZEMDVFRUVEQTNCRDgKLToxMDdFOTAwMEYwMzE3RURGNTNGNzEwNUM1RjQ1MzlGMzQ3RDQxQkJCRUQKLToxMDdFQTAwMEZGMzVEMThGRTc1N0RFNENFMEY4QkEyMTY5QkRFRDUyQkUKLToxMDdFQjAwMEE4MTczOTg3MkM0NUEyN0U1M0RBRjY1RDJDQkZFRDA5NTEKLToxMDdFQzAwMEZDOTBFMzlGODVCMUJGOUI2RTU2Nzg3RkVFM0EwRkRFNDQKLToxMDdFRDAwMDlGMjZFOTVDOEY5NjgwNjg2NjAzMUUxQTc1QTZEOTczODMKLToxMDdFRTAwMDkxNDVDREY5MTY4QTUyRDQxREE2NzEzREE2NzE1OTE2MzkKLToxMDdFRjAwMEVDODNCMDRFMzc4Q0U1RUIwNDM4QTU3REYxOEQzMUJDQjkKLToxMDdGMDAwMDNFMkI5NEQzRDhBMTExMUNGNzIwMUNBMzFDQTE4QkQwMEQKLToxMDdGMTAwMEZFQjkwOUQ0MjI0RUQ3NjZGQkRCODhEM0Q3RkU0NTI2QUYKLToxMDdGMjAwMDNCQjM1NkQyMUFERDUwREZGOTE2MjNCOURDOTlFMDE1QzAKLToxMDdGMzAwMEY5MDdGQ0RFMTlDMzJGMzFGNkE1Qjk2NUI4NjQyNTdCQjYKLToxMDdGNDAwMDE2RjEzQzBFRTE4NzMyRTJFODY3NTlBQjgyOTM4OUYxODIKLToxMDdGNTAwMDUzNUJFNEUxNzhCNjlFRTQ2NDdGRjFCMTlGQkI0NTdDNUUKLToxMDdGNjAwMDZDMTAxQjc0ODFGMUIxNjdEQ0U3MTExRkJCQzg2REU4QjEKLToxMDdGNzAwMEYzMjJERTJFRjZGRjMzNDc3MjI4NUY0ODU1MzEyNzhGRjQKLToxMDdGODAwMDMxQkJBNjUwOEE4OEYxREQyRThCRkMzNUU4NzhDNDUxRDAKLToxMDdGOTAwMERGQUQ4ODk3MTE0N0Q5MkREQzVFRUEyNTNGRTIyNEEzQTcKLToxMDdGQTAwMEJDRTY1MTFEMDU5NDFGNjFCM0U2NDcxQzkzMjlFMUE5NjYKLToxMDdGQjAwMEY0QzU2MjBERjFEOTI0RTJDNjE3MUFCNzM3RTJGRUM1M0YKLToxMDdGQzAwMEZDNTE0QzFDRkY3OTZGMzlDNTQxOEI3REYxRTNGOEUzMUYKLToxMDdGRDAwMDk0RDkxNDc3NjA0N0Y4RkExOTcxN0NBNjE0MkEwOEU3MzcKLToxMDdGRTAwMEQ5MzBEODYwMDhFNzUxRjNERjAxQjkzQzJEQTg1MDVBQzkKLToxMDdGRjAwMENENUJFNkU3RTMyQzc0NjA1REVGQkY1OEQ3RkI3Q0YzMDUKLToxMDgwMDAwMDIwREVFN0Y3QUE4RDYyMjMyOTBGQzIyNkYyMjA3RUM5NUYKLToxMDgwMTAwMDAyRjc0N0U3NDExODc4RUMyRkNGQzQ5QTU3NjJDRDIzNzcKLToxMDgwMjAwMEM5MEM5OEYxMzRCOEYyNTJEM0ZCOEJFQThBNENGNThCMjkKLToxMDgwMzAwMDk3OEQzM0I1Q0Y4NjhEMzBCQTlFQkI2NjlBQTk3RDdFNkIKLToxMDgwNDAwMEYzNEM1MzdERThDNjlCNENFRDg3ODVFNjlBREUwRkRGNDcKLToxMDgwNTAwMDVBRDVFN0JBOEY2ODU5NjI3QUFGQzhBMTYyQkMwRkQyMEQKLToxMDgwNjAwMDU4RjdDQkY2RkMyMDJFNUQxOEVCNkVFNDY5NjFCQTExNkYKLToxMDgwNzAwMEUyNzczNEFDRkJDM0Q5RTQzRjJBOTNCNEQ4RjVGNzg3NTEKLToxMDgwODAwMDgzQjQyRjVGRThGQUU3N0I4NDNFNzQ4MUZDM0UwQTg5NjMKLToxMDgwOTAwMDBERTM0NDNBRDcxM0JCNkNFRTM1QTgxNzI3MDM2QzI4QzEKLToxMDgwQTAwMDZGQURGQTQ1NzJFQjBCRkYyRDc5RTNFNTVCNjgyQjkwMjIKLToxMDgwQjAwMDhFQkVBRkU4NjM3MUJGMUYyMEYyMjM5QjY0NzE5RTc0NzQKLToxMDgwQzAwMDkyOTNGNDgxN0I2NEY5OTZFODdCRTRBRkYwNzAzOTcyQTcKLToxMDgwRDAwMDg1ODdGQjU1N0UwMkZCMjZFRTkzODMxMzU5OTBGNjRGNUUKLToxMDgwRTAwMDcxQkU5Q0ExNDMwQUU2RUI0RDY1RTJGQ0Y5NjNBQjI2NDkKLToxMDgwRjAwMDRGQzA3ODY2NDc4MTk2OEMyMjA1RUFERjg4QzhGRDlCRDEKLToxMDgxMDAwMDFDNUEyM0M2MDM0NjI5NUM4RTgzN0M5RkU2MTk4REZCOEYKLToxMDgxMTAwMENFNzIxQkQ3N0Y4MjM2QzRGMzYwMjcwQjdBOEI2OERGNjEKLToxMDgxMjAwMEEzQjg2NjMyNEI5Mzk2MTRBMkU5RDVCM0JGNjg1RjAwM0IKLToxMDgxMzAwMDMxMUNBQzFBOUU4NDc2RDBDQjM4MzQwNjY5OUQwOUI0QzQKLToxMDgxNDAwMEZGREY2OEM4QkRDQTYxMjRGN0NFQjg3QkVFQjVBMEYzRTcKLToxMDgxNTAwMDhFNjdFNkU1RDJGM0UzMzcwM0Q3MDFGRjFDQjc5QkVENEIKLToxMDgxNjAwMEEyRkVGQzUzOTU5QkVGRjdBMEZGRkY3ODAxMzNFNTE5QzIKLToxMDgxNzAwMDU0N0JCODFENTVFRDUxNzhCQzNDRjQ5Nzc0NDQ0QkQ3RjMKLToxMDgxODAwMEZDQ0YyRTQxQTA2QkE1RjY1NTI4QTI1NzZGQkNCRDgyMkYKLToxMDgxOTAwMEYyNzY3N0NEMDhBMkZGQ0ZGMDNCMUJGREQ0QjY0RTY0M0MKLToxMDgxQTAwMDNERjcwNzQzM0YzN0JDQzFGRDVGMzc3QzY2RjZFN0RFMkUKLToxMDgxQjAwMEU5RTE3OUQ3Nzc4QUYxQUU4N0MyMDc3OEJCMUVFRkY0ODEKLToxMDgxQzAwMEM2RjI4NTA5NTM5MDFGRTA3OTU4ODJGQUI3REI0MEY1NzMKLToxMDgxRDAwMDAzQkE5RjExQzhCNjIxM0NCRjY3RkVENzc2NEI5OEFGNTQKLToxMDgxRTAwMEFERDFGN0Q3QjEwQTFCQzJGNUZBQ0Q4QjNERDhBRUE3RkEKLToxMDgxRjAwMDNGQTM5RkMxNzhBNjEzRjZFOUU0QTAyRDFERThBN0ZCRDUKLToxMDgyMDAwMDFCMTJFREVCMzA5RTEzOUY1N0NDMUVCQzEyQjcwRTYzQjIKLToxMDgyMTAwMEJDRDc1OUUwRjQ2QkIwREUzMzk5OUZGQTM1RkE2NzJDN0UKLToxMDgyMjAwMEMxMjQwNzc3NTQyRUZBNTM2QTBFQ0EzRjk5RkMxRjRCOUMKLToxMDgyMzAwMEY2M0E0OEZFNzU1NTlEREJGRTIwQkNCRjY1NzBDNzQ1MEMKLToxMDgyNDAwMEE4NUZCQzU5RjVEOTI1ODg5NzFCMzcyQTRDODNGNTBGQjEKLToxMDgyNTAwMDI1MDRFRUYzNDRFMUVERjhCQzhGM0NGODFFRjQ4NEM3MkUKLToxMDgyNjAwMDFGQzQ0REZFNjkwNzlERjM3QUIzRUFFOTRCQTJGNUVBMTQKLToxMDgyNzAwMDREOUU4OTNGRjZFMDNFMzlFNkZDRTIzRDY1NEYwRDIzMTkKLToxMDgyODAwMDdCREJBMEFGREIwNDdEMkQ3OTcyMjhFOTgzNEIzQ0U2RDQKLToxMDgyOTAwMDdCNTM5NjNDOUU0QkU3ODk0QTI1MTZENzhFQzQ3QjNGN0QKLToxMDgyQTAwMDMwMkY3RDA3RDAxNTlFMjNEQ0Y3MjlDRjFGREY3OTI0REYKLToxMDgyQjAwMEE1OThDRUEzQjJDMDc2ODRDRjY4QkZGM0U1OUI4NjUzNjIKLToxMDgyQzAwMDVFRTdCMUI0RjNCQjE3MTlFMDBCQTI3RUM1Mzg5QzJGNTMKLToxMDgyRDAwMDA5RkU5OEQ1OUE1QTJDRjRCQkU3MTA2RjM3RkRGQUM5RkUKLToxMDgyRTAwMEQzN0Y0MEZDRUM3REZBRjEzQkIxNERDOUY5RTE4Mzg5QzQKLToxMDgyRjAwMDdEQ0MyRkYwMDBGQjE4RDkzRjVEMkNDMUVGODg2M0ZGQzgKLToxMDgzMDAwMDNDMkJGNEFGRUZDQjNBRDkyNUU3RTQwQTkxQkZDRUVEOTEKLToxMDgzMTAwMDEwNDVGNjY3NjAxRTc3NEJBQjkyODg3OEYzQTJDMTYyNzYKLToxMDgzMjAwMEM4MTdEMDA5QkQ3OEZGQTJCODNGREQwOUY2RDk3MDIxODIKLToxMDgzMzAwMDdGREEzRDFGNEY2OUUyNzEwODkzNUU1NzcyQThDQUE0QTUKLToxMDgzNDAwMENGNTVDMDNGOTRGNzk3NkYwQTM0RTIzRDhEQkRFQTc1NzMKLToxMDgzNTAwMDYxOTlFQ0UxMkZBQkRGQkRGMzI1RTU3REE3ODdGMzdGQzYKLToxMDgzNjAwMDRCMDE5N0RGMkRFMTg0MTBCNzFCNTgzMUVBN0JDRkUwM0EKLToxMDgzNzAwMDVDRTBGREI0NjRCRTJGRDhBNUNFMDIyN0ZDN0VDNkYzMTgKLToxMDgzODAwMEM5QUEzNTU5QjBEQzc5MUMxRjU4QzdCRkQzQzNEQTM4MjYKLToxMDgzOTAwMDlERjZFODdGODcyRUU1N0Y2NzRFOUMwMzJFMTFFN0EyQUUKLToxMDgzQTAwMDYzRUM0OUUwMkJCRUM5MjY5OEY0QzdGMEUxQkZEMTM5OTAKLToxMDgzQjAwMDk3RUQyOURBRUZDNkEzM0UwRjdBMEFGMkJENEJFREIwNzYKLToxMDgzQzAwMDI3Qzc5OURGMkY1MTdFMDI3RDhGRjU3MkZCQzRCOTg3RDUKLToxMDgzRDAwMEM3RTE5QzlBNEVGNzlFQjk3Q0JFNTE2ODJGMTlFRDRGQUMKLToxMDgzRTAwMDg5RkQ2NkYxRTEzNzg3RDg2MTlENEVDQjQ3QkMxODQ3QzAKLToxMDgzRjAwMEE4REVCREMzOEI2NkYyNjU4OTgxMjQyRkM2NEI4RUJGNzQKLToxMDg0MDAwMDVBRUFBMzdDQUJDRDQzRDBBRTZEMDlGM0Y4QzQwODk1MEUKLToxMDg0MTAwMDA1RDUzOEY3MzVENzZFMkNBNjRCQkY2QjM2QTY1MjM5MkIKLToxMDg0MjAwMDBDRkQwOUYwQTgzNkNDRTdEOUI5QTczMTI1OUVCRDVENzIKLToxMDg0MzAwMEZCMUY3QjA3RTFCQTNEM0Q4MDlGOTcxQUQxNUFCQzEwQzQKLToxMDg0NDAwMEU1MUZDMjYyMDMzOUY3RDRBN0MzQTlCRjRCQkNEOTM0MTcKLToxMDg0NTAwMDNGMTg1RkM1RTcyMDkxNjRCQ0VGRTg2OTYxQUY3NTdFQTYKLToxMDg0NjAwMEFBNTAzQkEzREYxMTdCMjYyQTNFNThDQkMyNzBGMzAxRjIKLToxMDg0NzAwMEIyMEY1QjFEMUFBRUIzNkIwQkJGMEZDRUQ1RUEyMkI5OUMKLToxMDg0ODAwMDU3QkI2RjJBQjdFMzkyNzlEQzczN0I0MkY3MUZDNTM5N0MKLToxMDg0OTAwMDM2RkFCQjA0MkU1RjMzNEI4MUZFQjdEQkY5RkUzODBDOTYKLToxMDg0QTAwMDE4NjA4NzNCRjJEQzE4Q0ZENUZBNjM0QTZBNzdFNkYxQTkKLToxMDg0QjAwMDdCRjU1QzZBMzNGQjg2M0IxQUVGMUVDMkZCNTQyRkE3ODkKLToxMDg0QzAwMEFCRUQwOTYxMTlGMzc2QkE4MTI2MUYyM0I4MjI3MDMyMDkKLToxMDg0RDAwMDFBRDc4MDczMThFOUYzREJFRERERUZFMkY5NEIzQTVGNzEKLToxMDg0RTAwMEE3MjExQzFDNEVENjNBNTQ0M0JEQzJFNUUzRjE1Qjk3NkQKLToxMDg0RjAwMDRGRjMwN0E1NThCODZBNDc4MjlFMEJGQzc2NEYwMzhCNTMKLToxMDg1MDAwMEZDN0QwNENDNjM0Qjg4RDQ5REMwMTNEQjczOTg5MDA3MkIKLToxMDg1MTAwMEMzNTY0RkNFOEFBRTgzNDAxQTEzRjk3RUY2M0RDMzU3MzkKLToxMDg1MjAwMDM3NEQyMDNCMjdBOEEwNUQwRkE1MjcwNUU3QzlGNzM3RTIKLToxMDg1MzAwMEJDQkY2MDQwMTFDNzAzRkE4OTEzOURGQzdENEY3QjI3QTgKLToxMDg1NDAwMEJGQjI0NDc1RjM3NkZFMjQ1RkUyMzQ4OUY1REM2NzZBRDYKLToxMDg1NTAwMEY4OURFRTkwQzJFRjVFODlGRUFERjA4MTkxMUFDMDUyOTcKLToxMDg1NjAwMEZEQzJGMzQ0Qjc4QkU0RDYwNzQ3Njg3ODJFMzFCMDAwREMKLToxMDg1NzAwMEU5RjU1NzZGQzkwQ0VGNDdGQUUwNDkxNzlENDMyRTc4OEMKLToxMDg1ODAwMDZFMzNGOUFCQURGREFEM0VENjcwMUZFNjY1NzczRDI3ODYKLToxMDg1OTAwMDY5OTgwN0RBNjVFQkE2Qjg1MTRERUI3Qjc0NUU3MUVBMUEKLToxMDg1QTAwMDlFMTM3NDZFNEI0OTBBRDQ3OTQ3NjM1RUM0OEEzMkM0MDEKLToxMDg1QjAwMERGNThENkRDODhGRTNEOTA4NzE0QTc2RkM5RTBGMkUzNTAKLToxMDg1QzAwMENDRDE0QjFFNUIxMTg1RUYwN0JEQzJCRkRCMURCODE4QjgKLToxMDg1RDAwMEY5QTY1NUYwRTczRUQ0NkZBMERDMkRGNEFDRERGQjZGQkYKLToxMDg1RTAwMENDOEQzRTg3MTU2NDA3QzgxRkQ2QzAwRTUxN0VBMUYxMDEKLToxMDg1RjAwMEJDMkJBNEQyMzlCMEUxQUYzQjZGRDFBM0U4QUQ1OUYwQTkKLToxMDg2MDAwMDdCQjMxODJGM0YyOUIwOEFGODc2RkY5RkVENUUwREYzRkMKLToxMDg2MTAwMDU4NUI4NkEwREM2RDAxM0RBQ0FGN0NDNjVBMEJERkY0MjUKLToxMDg2MjAwMEU0Qjc5Q0U0Rjc3MUMzQkEzNjI1QzEzQTNERkRGQTlFMjIKLToxMDg2MzAwMDRCRjFFRjhCMDBGQzhDRUVBQjNBRUUyMEI5QjkzQjlCRDMKLToxMDg2NDAwMEYzREY4QUQ3M0UxOTg5NzJFQjkzQkQ4QjJFNDY3QzJEQzIKLToxMDg2NTAwMEYzREEwQzNBOUY5NDgwRkNGNDJDMjMzOTY2RjA2MzIxMDIKLToxMDg2NjAwMEYyQTM4NEY3NDI3MTNGNEEyMUQyMzlGMjlGQkQ3RDFBQUQKLToxMDg2NzAwMEYxREY2RTdFMkYwNEQwMzlEMTNERDBCOTBGRjU4QjQyOUEKLToxMDg2ODAwMDFGRDAzRDdEM0Y5NEY4Nzk3QkJCQ0NDRjgxODMxQ0NGM0QKLToxMDg2OTAwMEE3RkEyNENBNTdEOURFM0VEOTQ3RkMyQzAzNkE4QjkwMkYKLToxMDg2QTAwMDJGQzMwN0E4OUYxNkZBREI3NUFDQzQ3MjlGRUIyOTRDNDkKLToxMDg2QjAwMEQyMTgxMDkxOEY3RkYzNzAzRTZEMjlEMDkyRkMzMDlGQkQKLToxMDg2QzAwMDQ0NDUzMUYxNDFENDNFQzlFQjYyMUY5NTdGNzREM0VBMzIKLToxMDg2RDAwMDBERjhGN0MzREFDNUJFMjBGNEFFN0Q0MkNGNjVDN0I4NEEKLToxMDg2RTAwMEJDNUYyQUY2QjIyNUJGMTlGN0VENkQzMERGMjUyRjI5QzMKLToxMDg2RjAwMDVDRkUwQjNBMzkyMEY0RTA0M0Y1MTk1NEM3RkQ0MjgzODAKLToxMDg3MDAwMDc1MUEwRDI1REUwNzU0QUFEN0UxOUYyRjYxNjNDQTlCMTYKLToxMDg3MTAwMDBGNjIzOUFFQTJBNTBDOEY0QzREOThENTdFOTA5RjYxMEIKLToxMDg3MjAwMEQzODcyM0ZERUQzQTcwRjU3MENBREYzREVFNjA5OEEyNjUKLToxMDg3MzAwMEI4RUI2RkREN0Y3QzBBRjM1MUY3MDFGRUUzRUM0QkU4MDkKLToxMDg3NDAwMDlGNjUxNEJGQTkyMDdBRUM4RDZFQkFBNDhFNkJDNkZCMTAKLToxMDg3NTAwMDQxMEZCQ0E3N0FBQTBBMUI3RDBEMTIwNkUwRTNGNTdCNDgKLToxMDg3NjAwMEFBNTZFM0JEODAzNzI1RTlDNzkxMUU5N0ZCMDJDNzkxNDIKLToxMDg3NzAwMDhGQkE1RUY5NUIzQUNBRjRERDQ3RkZFQzQ1NzlCRkNCQUYKLToxMDg3ODAwMEFFMEY0NzNBREI5NTAzRjY0MDFDRkEzQzJDRThBN0E0NTEKLToxMDg3OTAwMDk3QkM4QUNGQkNEQzVFQkEyNEM4RDYyMUZERDRFQzUyOEIKLToxMDg3QTAwMEU4RUYxNjlDREVBNUU4NzgwRUZCNUQzRDkwOEU3QUNFNTQKLToxMDg3QjAwMDQ5MTZCQzdFM0NFRUVGQzJBRTlEQ0ZEMUNFRTZBM0RFMjUKLToxMDg3QzAwMDMyOTJFRUNCMzBEOTk5NEM1OTJFRDMzREVGQUQxMkY5MDAKLToxMDg3RDAwMDI3MkEyRDdBNDgzNTZCNUUzNTE4Rjc4REQ2Q0Q3NjlDRDUKLToxMDg3RTAwMDQ3RDUxNkYzRjdENUE4QkY4Q0M0QjI2RjdCRjUzM0FGNkUKLToxMDg3RjAwMEQwNUY3MjU5MkVFQTJGNDAzRkU0OUZFODdFNERGMTNGNTMKLToxMDg4MDAwMEM2MjhCRkE3MERGMzdCOUU5NjM5N0U0MDVFMTIxRjFBQzUKLToxMDg4MTAwMDdBQ0M1NjlGN0UxQUY1Q0FEMzgyNEVCNzBCN0JCNDdCQjcKLToxMDg4MjAwMEJCNDRGOUZEQzNCNkYyQkNFQjcxMjdCNUNEOENDRjlGMkQKLToxMDg4MzAwMEYyQzIyQTg1MUMxQ0E3RjJGOEM1QjhBM0I5MTQwRjFERjMKLToxMDg4NDAwMEEzMzNGMjg3MkM2ODk1NDI4OEM3NEE0M0FGMTNFNzI5QzAKLToxMDg4NTAwMDYwREIyNUJENkUyQzBCMzVFMkZENzIwQkI3NEE3NDBFNDIKLToxMDg4NjAwMDYzRDE1NkIzRkZCRTdBRTMyQjg3RDEzQzVDREM2MjM5MUYKLToxMDg4NzAwMDFGMkZGMDYyOEQ2RkVDQzA1RkUyQzQzNzJFNEUxMkZFRTgKLToxMDg4ODAwMDlDMjE2Qzg4RTlCQzU1REJGOTlEQjdGQUFCMzg3RkZEQkMKLToxMDg4OTAwMEFBRThERjY4MzcyMTg5RDM0RDhEOTg2Rjc1NDgwOTg5MUIKLToxMDg4QTAwMEJGNEZFOUM2RkNEQjVCMDU3RERDMkFFOEEzOTY4NUVEQkUKLToxMDg4QjAwMDk4QkZCRjc4MDM5RjJGNUI2RjMzREQ1QkJDNjBEN0VENDQKLToxMDg4QzAwMDc0MUVDMTRBNDc5NURCNzhEQzBEMTA0OEYxOURDQTRERjYKLToxMDg4RDAwMEU2Rjc1NTAyMUY1NTE2N0NENDA0MjQwQjVDNUNERjhFMzIKLToxMDg4RTAwMDg1QUJFNTdBNUNERkM1REI2Q0Y0RjczOUFDNzA5RDY1NzAKLToxMDg4RjAwMEIzMjk4RkU4MUYwRDlGNzU5REFFMzNENkU5NTI3NkE5MzcKLToxMDg5MDAwMDY5OURDQUZCQkU5RjIwNjJERjk4RjVERjY3MEY1RjRBNTMKLToxMDg5MTAwMEY5MkU2N0RBNzJDODdGNjBEMDg3QjU5RjI5NDI3RjlFQTMKLToxMDg5MjAwMEJBOTFFQjk5QTdGNzk0MjU4RTQwQkJFODg4RUE5N0EwMDcKLToxMDg5MzAwMDlGRTI5NzNFRjZFMjc5OEZBMkJEMEFDM0I4NjA1NzZCRkIKLToxMDg5NDAwMEYxM0EzQ0E3QkRCMzJERUY1QUJDOEZBMkU4MjU5NUY2QUUKLToxMDg5NTAwMDhERTI5NzhBRTg1RTkwQTI5NzhBMTI3MzI5OEY0MjRCMjQKLToxMDg5NjAwMDQ1N0M0MDNGQjRFRjc2MURDOUZCN0QyMUNBQ0ZCNkM5MTcKLToxMDg5NzAwMDI1ODhFNjE1NDc4QTEyNTEzRkQ4QzlCODNGNDI3QUE5REYKLToxMDg5ODAwMDI0QjUyMzZBMUY1OTlDQzRGRDAzQUIzMkRFQjkwN0Y1MzkKLToxMDg5OTAwMEY3QTlDRkRBRThCQ0M5NTQ1QkY3Q0I5ODdGQjBCMzRERTkKLToxMDg5QTAwMEY1QUY4MDdBRjU0QjczMUJGMDlFOEFFQTI3MjUzRkFBMjQKLToxMDg5QjAwMEQ5ODdEQjk3QTQ3RDA3RTlBQ0Q1RTY3MzEwQkNERjNEMTIKLToxMDg5QzAwMDgwRUY4M0RCMjQ3RjNFQjRBRkREN0JENUYwRUQ5OEU3MEQKLToxMDg5RDAwMEJEQjlEODFGN0QyRUJCMjg1OUJCMUZGMzJBNTk2NjIyNkIKLToxMDg5RTAwMEQ5REY1MzJGQjJEMTdFN0E2QTUwRTJDRkU4M0UxNjdEQUUKLToxMDg5RjAwMEYzMTQ5NEIzQTc5RURGNjlBNzczODNEQjI1OTYwMTEzNTUKLToxMDhBMDAwMDM5OUM3MUYwMTlCQURGRTM5N0FGNTBCRTQyRDlBRTU3MjcKLToxMDhBMTAwMDI4M0ZBMTM3Nzk3RjNBQTRCMDMwRDlERENENzQyRkNDNkYKLToxMDhBMjAwMEUyQ0Q0NkJEODNDRTQxNTQwOEJEQTk2NkNCMDlBQTU3MDUKLToxMDhBMzAwMEExRkUwRkUzNTU2RDUyNDIxQUZDN0E3MEVGQUYyOEJGQ0EKLToxMDhBNDAwMEExNjYxQkNGNkY4MEY3MjQ3RkFBMzA3RUFBNDVFODdDMDEKLToxMDhBNTAwMDJFRTM3NDMwNTdDODlGNDU4Q0RGMzNCNEE4OTk5RkEzODkKLToxMDhBNjAwMDMzRUU0NTMyRTg3Q0ZFQjYzOTk0ODcxNjkzNkY4NkY2NkUKLToxMDhBNzAwMDI1QzUyMTlBODlCRTYzRUYxQkUyRjQ2REJENzdDODRBMTQKLToxMDhBODAwMERGMkQwNjdEMEY2M0MzOTBCRTNGOTlDOEYzQzMzRTc5QzcKLToxMDhBOTAwMDI1MjFCMTEwRTZGM0M5OEIwQUU1RERGNzQxRTdCNDlGNjQKLToxMDhBQTAwMDFFMTFGQkZGOTlCMDRDRkI5M0QxQUU3M0NGNDdCNDhGMkYKLToxMDhBQjAwMEQ0MUUzOTYzNDc3RDc1NEFFQjg3QjQwRUQzNUJGNzRGRkQKLToxMDhBQzAwMDQ2M0M3RjhCMDVBQTExNkZERjZBNERGNDIxOUY0RkVGNjMKLToxMDhBRDAwMEUwNzI2QjVBQUIyMzg0N0VFQTZGQjE5NjI2NUNERkFFMDAKLToxMDhBRTAwMDdEM0Y2RjRBNDE3QTc5ODJEMzhCMjFDRjE2MEE3QzJFNDMKLToxMDhBRjAwMDE0Rjg1Q0E4RjJGQjlFQUEwQUY3M0Y4OEY5RDBEMzE4QjUKLToxMDhCMDAwMDk3MzdEMzVBODRCQ0Q5NjRDNjZGOTdBRDQ1MjVCQTE5MzcKLToxMDhCMTAwMDIxQjFFNkVDRDhGRDZFMTFFQkEwNzM4RjVEOTlDM0U5MkUKLToxMDhCMjAwMEVGNDkwNkMxNUU0NTNEQUM3QTlCMzUwRUNFRURGQTFBOTMKLToxMDhCMzAwMENCN0U3QTMwQzlGNkE1RUVDMTc4QzdCMjJFRDNCQkY5ODkKLToxMDhCNDAwMDdFMzYwREU4MDlFMzIxNkRFMTg2NDI5NDdCMDY3RUFDMUEKLToxMDhCNTAwMEVCRDJBNkU1MjZGNTc1REVGOTY1QTFCNzFCRjU2RjhCOUYKLToxMDhCNjAwMDdCMjY1QTdDQ0RFRTY4M0JCQ0RDQzdGNUYwQUFCMTRBNDcKLToxMDhCNzAwMDEwRDdCNUM3NUVDOTNCMzg1MjkzMjNGNjBBRDgyOTlGNTAKLToxMDhCODAwMDI1MERFMDc2Q0IyOEU4RkE4NTJDODVBNUE1NDVFQzk1NDIKLToxMDhCOTAwMEQ1MTlGNzRGMkY0QUMzRkIyM0I4QkNFODFDMDNGRDYxNkUKLToxMDhCQTAwMEJFODBDQTQ4NEVENTZFNzM4NEQwQ0VGODFGODRCRkI4M0QKLToxMDhCQjAwMEJCMDA4MDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwQzgKLToxMDhCQzAwMDAwMEI4RDU3NkQ2QzUzRTcxNTNFRjdDMzFGODkxM0ZCRTAKLToxMDhCRDAwMDlBNzg2NjJDMzRCQjMxRjkyMDI1ODREQjEwOUE0MEQ3NzMKLToxMDhCRTAwMEY2MjZBNTFEODMxNDFDNTgyOTZBQUJFMkI2NUJEOTBBODgKLToxMDhCRjAwMDRFNTA4NTI4MTI5NUI4ODlBOUQ2OTU2OTQyREE3RTU0RDcKLToxMDhDMDAwMEVBNTZERDIyNkQ2MjFCQUI0QzA5NkE5ODkyQzhBMUExOUQKLToxMDhDMTAwMDI1RTk5MEEwNDAxQkQwRDY1OUZDNjBFQjk0OTBDMDM0NUQKLToxMDhDMjAwMEQyNEQ5NUQ4NzNERTdCOEQxRDEyQjQzQTUyOEVERkFGRDQKLToxMDhDMzAwMEYzOUVGMzlDRTc3RERFRDc1RDdERkZGMjlBRjU0NERGN0UKLToxMDhDNDAwMEVEQkZFRUNEQzJDNkZCQTU0NzA5QjYzQTk0RjA2OURGODkKLToxMDhDNTAwMDIwRUEyMEYyNDQ5QTYwRkIyNDIzNDNCMEFCQUY3QjEzOUQKLToxMDhDNjAwMDI1NDQyMzU1OEI0MjA5Q0NCQkExRUFGMzM1QjQ2RkYxRkYKLToxMDhDNzAwMEU3RTFCQ0VERkE1MjIxMkEyM0VBODRENUNCRjJGRDlEMkYKLToxMDhDODAwMDZBRDZDQkYzM0JGQjI1RDM4NkVEM0RGOTlGOEFDQTUyQ0EKLToxMDhDOTAwMEEyQzk4MUU5OEFFNzYwNTc2ODMyRkU3MUZGRjc5NkE4OUEKLToxMDhDQTAwMEQ4NzdFQTkyOEY2Mjk1RDhEODMyMkZEMEZENDQyRjkyOTAKLToxMDhDQjAwMEYzRDlBNjExRUQ5OTg3RjZGMDRCRURENDgwMEU2OTdGQkMKLToxMDhDQzAwMDM5QjVDMEFGODc4QzBDRDY3NTVFNTQwQzRCNDdGRjA5ODUKLToxMDhDRDAwMDBGNTEzMzUxRjcyNzdGMUE5RTE3MjFCQUY2QUU2NEY4NjkKLToxMDhDRTAwMDc0NjdGREFCOEQ2ODNGNkZFRjlGODdGOTM3N0YyNzE5NUEKLToxMDhDRjAwMDE2QTZCRkY4NERBMjg3RDBCRkVENERDRjk1QUNERkQ5RkEKLToxMDhEMDAwMEVCOTZGODlGQkVCMjE3RjM5MjQ3RkNGQTFCNjg3NTUzQjcKLToxMDhEMTAwMDRGMzk2MTZFMEZFRDE3MzY0OTNGQkJBRTA0RTFBRjJGRkYKLToxMDhEMjAwMEU1NjU1Q0M4MkU1ODFGMjNEQTdFNzhBNkJGMjRBOUY5MTIKLToxMDhEMzAwMDM2RjJEQkYzOTdENjhFRTE4MkYxMzU1QTY5RTQ2QTAwQTgKLToxMDhENDAwMDVGRUFBOEVFOTZDMkYxMTcxRjkwQjBGRkU0ODhBMkY5N0YKLToxMDhENTAwMDI0ODFEQkRCREYyQUM0RTczNEMwNThDMEZENDUyNjIxNkYKLToxMDhENjAwMENGQzk3MzI1NzYxMUU2RkQ3MzFGQzY2QTg5QzZGN0MxQTAKLToxMDhENzAwMEI5MEY3RTVBMTQ4MTg3QkNEMkIxNEIwNkRGOEY3MTNEOEIKLToxMDhEODAwMDE5RkZDNDUyQTIzRjBDQkU3RjJGRjMwMTA5ODgzQTZDMzEKLToxMDhEOTAwMDNGOEM3OThCMEJFMjRFMjNBODgyMzgxMTk3OTFDMTdFQ0MKLToxMDhEQTAwMDVEOUYyQTA2REM3MzVDMzVERTQ4M0VBRUUzNkEzNjY4QkEKLToxMDhEQjAwMDE0RjA2MzdBOUZEOTMxNUM4RDcyNDkyNzQ1QkQ2NDY5OEYKLToxMDhEQzAwMDU4RDhEQkJDMzlBMUM0RURGQTdDMUJGOTZDMzVCMUZFNzcKLToxMDhERDAwMDI5OTcxN0E0NEU0NUUzODhGMzU5MEQ0NTA0M0ZCQkZCODMKLToxMDhERTAwMDlERkFDQTAzOEVDNUZFOUI4OTcxNDE5QkY3OUYzNURFQjQKLToxMDhERjAwMDY2RURFMEYxOUI5NTAxQjIxOEI3MkZBRDc2NkVFRjhFNjAKLToxMDhFMDAwMDI5RjQwNkRBQkIzRjc5QTk5NjBBRjYyNzhFMTNGNUVEMDkKLToxMDhFMTAwMEYyNEM0NTk5Qjc1REU3NjQxMTVGRDdCOTFCRDEyQUI0MEQKLToxMDhFMjAwMEQ3RDIzQkFCMzVCNEQ3NTE3QTNGOEY3RjE4MEJGQzg4MzQKLToxMDhFMzAwMDc5NkRGMUJFRjNGMzdFQkUwODI5MjI1RUUyN0NFMUNGQkMKLToxMDhFNDAwMEEyNUYzQTdFREQ3QzdCNjhBM0MwQTFDN0U1RDUwQjIxN0MKLToxMDhFNTAwMDU5Q0M3RjU1NEJCQ0MyRTc3MEYyREM3RkEzNDg5QjhFOTgKLToxMDhFNjAwMDVGQjgxMkU0N0FFNUVBN0RFN0I5QkIxRDM3NzZFMEY1MzUKLToxMDhFNzAwMDM3NUJGNUYzNEY4MzA3OEQyM0FBMTU0MjlFQzdDNjhBMzkKLToxMDhFODAwMEVDNzZDNjY1NjBEQkRGRjY3MkREMkVGQjg4Q0ZDM0VFQzUKLToxMDhFOTAwMEMxNkRCNUM0N0UxMzg5NjU3MTlDQzM5QjgzM0Y1RUM2NUIKLToxMDhFQTAwMDM4OTBENDIzRTJCMjM4M0VDNDM1RDE3NzMxQUFBMzNGRkIKLToxMDhFQjAwMDM5NzAzMUNBRTNDOUUzMkI3RTYxNjFGRUYyMzM4REVCNzkKLToxMDhFQzAwMEI4RkZEODY5NTVGMEFGRjE0QzkzRTBERkIxM0YzNzk1NkIKLToxMDhFRDAwMDJERTJDMEM5MDhCMERGRTQ4ODFBNjc3QzkyMjM0RDFGRDkKLToxMDhFRTAwMEI3NjM1RUYyNEM1QjkzQzREQjlDNjkyQTYzRkQ1OTJFMjkKLToxMDhFRjAwMDUxM0M4RDcxNjlBNDRBQjQ3M0Y5RkM1QzczRjA5QjFDRkUKLToxMDhGMDAwMDAyMUZEMDJGNTFDQ0UxMEY1NUNERTBDRjhFREU1MzVFNDYKLToxMDhGMTAwMENFNjM0NzlGNjIxNkYyMjhCN0VFOTBBNjBBM0ZCRjY1NjAKLToxMDhGMjAwMEZFODA0RkRENjlDOTE0RkMzOEVBRDgxRDdEQzc0NDdFMzgKLToxMDhGMzAwMERCM0Q2OTUxRUZFRTIzMUU2N0ZDOEY4RTI1M0EyOEQ2NjQKLToxMDhGNDAwMDU5MzRDRjYyM0MzRUU2MkVENDYxQURENzVFNDgwODcxRkQKLToxMDhGNTAwMEI0OTJCNkE0RTdEMEMzOUFCMDI0RDY4RDVFNEE3QzlCNjcKLToxMDhGNjAwMEY5MzJEQTlBQThENUVBNjdDRkIzQTg0REU0NDM5MjhCRDkKLToxMDhGNzAwMDc3QUY2NzhEM0Q4N0JGMkFGNjg3M0M4MjY1QjQzNTNFNjMKLToxMDhGODAwMEM3NzgzOEVDRjA2N0FEOTcxMjczQzVGMzc5RUUzQzExRjIKLToxMDhGOTAwMDFEOTBDMThCRjNFRDFFOERGOTRGNjQ5NjJDODBDRUFFRTMKLToxMDhGQTAwMDc3NzU3NkQzRTMxRUQzQkIwQ0UzQTQ5RDJBQzJGOEZBRUYKLToxMDhGQjAwMDlDREVCNjQwQ0ZBMDBCNzFGQ0IxQkVDNURGOEM4NzMyMDIKLToxMDhGQzAwMDgwQjRDMzlDQTk3MzFCMjlFRUExNDVGMEIzNjY2NkZGNkMKLToxMDhGRDAwMDEzQUM5NzBENkM1NUUxRTc2RTNBRjgyOUVCRTAxMjdDODMKLToxMDhGRTAwMEE5QTExQUQ2NDE1MjRBMDIxMjc4RjNFRkQzMUU0RDExQUQKLToxMDhGRjAwMEYxREE1NUFDMDc3N0U2OTdEMzk5MEZBMTdGM0FGNEVGRjIKLToxMDkwMDAwMDM0RjQ4RjZENzdERDY3MEQ1OUUwMzEzQTc0RTlEREIwRTYKLToxMDkwMTAwMEQwQ0YyMjhBMzEwMUJGODI3N0U0OURENERDQkRFRkYwNEUKLToxMDkwMjAwMEQ3N0RGQjdDN0U3RjA2REY3MkY1OTk4MDY0QTdFQjY3QjYKLToxMDkwMzAwMEQ3RTc4NkU2RDQyMUU5MUZGNzgyQUNENDQ1M0I1Rjk3OUEKLToxMDkwNDAwMDkxNDdCREUyRjBDRkU3NDk5OEU1QzhDM0QzRDc5QTI5NDUKLToxMDkwNTAwMDY3M0RBRDgzOEEyMkJGODk0NzI1OUI3NTFFNzE1NkY4RUYKLToxMDkwNjAwMDBBNzQ3RTYyODEyNEM2Nzc2Rjk2NkMwQjVGODdFQTNFMzYKLToxMDkwNzAwMDEzRjc3NjMyNzNENkNCN0NBQUU5N0RFRTM1NzE2RTJENkYKLToxMDkwODAwMEJBNDBEMTdDMUQzN0Y4OURGQkYyNzZGRDcyRjlGMkEwNTMKLToxMDkwOTAwMENFRjk4MUNGNDI4RjIzQzJGMjdDQkUxRkQ3QkJGN0UxNEUKLToxMDkwQTAwMDg2OTY5OUY1QUJBNUIzOEY5NTIzOEUyNzREQzlCMEU3NkEKLToxMDkwQjAwMEFBRkI5NkZCNEVCMURDN0REREJBMkYwOTI3MjI2MUUwQzkKLToxMDkwQzAwMDMxNzlGNkM2RTZBNUYwMzc1QUY3RjcwQUJFNDczQkVGMDcKLToxMDkwRDAwMEMyREYwQTk3REY1RDgxNjAwMzg1QTAyRUI1N0EyQTBCNzcKLToxMDkwRTAwMDNDREUyQjREREMxMzY2OUQ5MEJGMEFERTRCQkMzRUZCODUKLToxMDkwRjAwMEY2Q0IxMkQ3ODMwNERFNzczQjJGNTVBRUJGQUFCMEU2N0UKLToxMDkxMDAwMEU4NzQ4NDk2MzNBRjdFQUY2OUNFQjlGNUQ4MEI1OTBGQUEKLToxMDkxMTAwMEE4MUU4Rjk5OTVGRjVGNzdCQjRGN0NENEMwNzVCOTM2NzkKLToxMDkxMjAwMDM0RDJFMDJEQThERkY4Q0IzOEY3N0M4RjBDN0MxMEQ1M0IKLToxMDkxMzAwMDRCMEFGOTI1QkJGQzUyODU5NUE0OERFRUZEMzg5MzZGNDMKLToxMDkxNDAwMEUzQ0MzN0FFRjdEMTBGRDYzRkNEM0NFOUREMTQ5MUY0MzcKLToxMDkxNTAwMDgyRkJGM0Y4Rjk2MDc1ODFERjg5N0U0NUNDMjczNTVCQUEKLToxMDkxNjAwMEYzNDQ2OTYxOUNBRjg5MzgyN0QyOEUzRkEyNkNDREE2QUIKLToxMDkxNzAwMEE1ODVFMzI5OTdCNzU5QzFEQjlGMkNERTE5RTc3MzlDQkUKLToxMDkxODAwMEUzQUQ0QTBFNkYzQkZCM0E0OERDNDc2RURFNjkyRkJFMEIKLToxMDkxOTAwMDIwMkU2QkQwNjdGRjA2RTM5MzlFQTk4QTcwQzFCOUY4QjEKLToxMDkxQTAwMEExOEI3MzczNDYxMjdDNUM0OTk2QzI3RTlCRTFGMTE5RDgKLToxMDkxQjAwMDZFQUI5NDUxNjExRkEwOENFODI3NUE0OENDRTNGQjVENEQKLToxMDkxQzAwMDFFMzdBQjk5MjFBOTQxQ0NCMzU0RjA3MjE1OUQxNUYzMEMKLToxMDkxRDAwMDFFQTIyOTYxNEQ4MkMwQzNCNjkxMjE2QzhCM0ZCMzhFMTQKLToxMDkxRTAwMEU1QTMzRTlENTY5ODRGOTlBODFBQkUwQTNFQjI5NENDNkMKLToxMDkxRjAwMDU1QkY3Q0ZFMkE1RENERjExMzkzRjFCOEQ5MUE5RjQzNzgKLToxMDkyMDAwMEFGMEZCQUU3RENFMEI3MUFENzc5ODJFQzQzRTg3QTkwN0YKLToxMDkyMTAwMEIyMEE2RkYyODA0QTZCMTRFNEYzQTA0QUZFNjJDNDdCODgKLToxMDkyMjAwMDc0NTgxNkU3NzczMEFCREJBQzVGNDY5OUJCRUUwQkFDRkUKLToxMDkyMzAwMDQzQkJEOTc0Q0UyOTVGMzVDRjM0RTZGM0JEMTM4NzU1RDAKLToxMDkyNDAwMEYwMTdFMjc5MkFCREVFMTEzODY2QzQ3RTBGNzNFMEM4Q0MKLToxMDkyNTAwMEJCOTU3NDk1REJBOTcwQTVDMzY3OUE3QTk2Rjc3OUE0MzQKLToxMDkyNjAwMERGMjdERTM5QjJERjEyNzhGQzM0RUNENDMzMDAzQzgzRTQKLToxMDkyNzAwMEYwQjNFQUEwNDQ2M0Q4RDc1OEU0RTQ5QkYzQkYwQUFGNDUKLToxMDkyODAwMEJFNTAyM0NGNzdFRTMxQjQ2OTBDRkQwMUJGQjM4RTY4QjkKLToxMDkyOTAwMEI1QzY3ODQ5OTlBODdDMkJGMEY1NzE5RDhDOTI4ODNCRDYKLToxMDkyQTAwMEY4QzJENEI1QkRFMkRERTZEMzBFMjEyNEEzRkZBMzMxN0QKLToxMDkyQjAwMDA5RUY2OUM5MzQ2OTBGQzdFMzJGQzlGMEZCMUFFQzE4MkQKLToxMDkyQzAwMDJGN0M1N0ZGM0FGQ0ZDNUI3Q0RFMjU1RDEzNzg1MTgyRDYKLToxMDkyRDAwMDc0N0U2N0NDQTc1RjY5N0M2RkM4M0NBRkNDODFFRjFGMDEKLToxMDkyRTAwMEMwRUY0OTU3RUYyRTE3M0JCQTcxRDhERUE4Q0JBOEM3RkQKLToxMDkyRjAwMDk2ODhERkUwN0EzNEZBMkI5NjEzRkM2RTI4NEQwOEJGNkYKLToxMDkzMDAwMDk3QTUyM0Q1QzI4OTZBQUY2MEJGMzk5RTA3Qzg2QzYxMzMKLToxMDkzMTAwMDlDMjVCNzVFN0JGQzhFQkZFOTIyQzdGMjk5NjQzRTA3QUQKLToxMDkzMjAwMDIwRTc3RUM0NzUwMEU3QzI4RkI2RDVFNkQ0REJGQUJDNzEKLToxMDkzMzAwMEM4NEU2MUJGNjkzOTJFQzhGODhBNjJGODA1REY2Mzg5QjMKLToxMDkzNDAwMEIxNjY1OEI1Q0RENDc3OTZGMDkzMUQ3OTA0RjI3OUE0MUYKLToxMDkzNTAwMDc4MUZEQ0M3RjQwMzNDMTA0MTg2NUQ5QTkzNEZBQTQ0MDIKLToxMDkzNjAwMDVFQ0NCRjk3NTI1NDZDRTA3MTQ0QkI0QTFEOUVFREZBMkYKLToxMDkzNzAwMDZCOTE0RDk1QjNFMzNCRTk0QjlDRTRGQ0E2NjU2MzZDQjQKLToxMDkzODAwMDU0RENBMzNCOUI1OUVGMThBN0VGRTQ3MDkyRjMzODZEQzAKLToxMDkzOTAwMEIxNjNBOUFDMkU3MDE5NjE5REJFQ0Y2N0RGOTNDMUJBQ0UKLToxMDkzQTAwMEE3N0M3NjM1Qzc5RkMzMDMwNTEyMjRENTVDOUM3M0Y4NTAKLToxMDkzQjAwMDY4NUMzRkU2QjE4OUZBRTVFQTFGQ0JFMzc0QTBEOEMxNDcKLToxMDkzQzAwMDA3M0ZERjFDMUM3NEQ0NzFFOUVDRkNGRjA3NTNCN0E3RkYKLToxMDkzRDAwMEVCQjAwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTQKLToxMDkzRTAwMDFGOEIwODAwMDAwMDAwMDAwMDBCN0JDQkM3QzBGMEEzNjAKLToxMDkzRjAwMDFFODFGREQwRjhFOEI4OUQxN0JGM0NBOTU4ODYwMUMxNzEKLToxMDk0MDAwMENFRTc2MjYwMDhFMTYwNjAwODA1RTJGRDQwN0MwMDg4MEMKLToxMDk0MTAwMEU1MzkxOTE4MjI4MDM4MTI4OEE3MDNGOTMzODBCODAwN0IKLToxMDk0MjAwMDg4RDM4MTZBOUI5OTE5MTg3NkIxMzEzMDFDMDRFMjEzRjQKLToxMDk0MzAwMDQwN0M5RThENzRGQjNGODgzMzMwNTRDODIwRjhDNzgwMzEKLToxMDk0NDAwMEVDMjM3MkQ0RjVFMzI4MUVCQzM4Q0YwMDk1QkY0RTEzMzEKLToxMDk0NTAwMDk1QkY0RDlCODFFMTNEOTI5QUY1OUFBNDk5QUY2Q0M4NTYKLToxMDk0NjAwMEMwQTAwMkM0MDAzQTRDRTk1OTY4MDMwMDAwMDAwMDAwQTMKLToxMDk0NzAwMDAwMDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwM0EKLToxMDk0ODAwMDAwMEJFRDdEMEI3ODU0RDVCOUU4REE4RkQ5RjM5RUVDNUIKLToxMDk0OTAwMDQ5NDIxODQyMUUzQjIxNDA4MDA0ODcxMDIyNTBCMDkzNUQKLToxMDk0QTAwMDE0MTQyREI1MTEzRDJEN0FCQzNBODQ0NzkwNjc0MEFCMUEKLToxMDk0QjAwMEU5MTE0RjM2MjQ4NDAwMDEwNjhBMzU3MjIyNEUxMDM0OTkKLToxMDk0QzAwMDVBQTg0MUYxRDE1MzZDODc4NzE2QURFRDhERDY1NkRCODYKLToxMDk0RDAwMEZBODhBOEEwQTg5QzU0NDVBN0U3RDQ3MkQ3RkZBRkI1RDcKLToxMDk0RTAwMDkzQkQyNzMzMDFEQkRFNzNFRkY3REQ5QjdFNzVGMUVGNzQKLToxMDk0RjAwMEY1RkVEN0ZGNUFGRkZBRDcxQTQ1QjQxMUY5RUI4NDlDNTEKLToxMDk1MDAwMDg3M0Y5QUU2OEE4NDkwMjFGRDI5MjFCMkQ2RTM4MDk0OTAKLToxMDk1MTAwMEU4RTc0NzU4NjA3MjVFQkExOEY4MkZBM0FEQjBDRURCMEIKLToxMDk1MjAwMEZEMTc0MkIyMDhGOTFFQ0ZBMzdGMjE4MDY3NzBDMDE4RDMKLToxMDk1MzAwMDhGOTE5MkEwNDI2MkM1RkRFRENDMjAwQ0Q2NDQ4MTlDNTcKLToxMDk1NDAwMDE3RTBBQjM1REZFOEE3REVFMTFCNEZEMjA4RjlDMkM5NEYKLToxMDk1NTAwMDUyQkQ4QTY2OTVEM0Y0NEQ2N0I0QjE4MDEwODcxMDFFNTIKLToxMDk1NjAwMEMxQzY1Mzc3NDk3NTI5QTY5NzQyREEyODkwQjk1RDlFRkUKLToxMDk1NzAwMDI0RTMyMEVCMDg5OTQ0OTNGREMzNDQ1MkQxM0ZGRUM0MzkKLToxMDk1ODAwMDcyNDZEQUQ0NDA0OENDREUwRkNCMzIwOTI1NkJCNzgyNjUKLToxMDk1OTAwMDhFMUZEQTdENUYwODU3RTA3ODNDNDQwNjdDMjgxQzFGNEMKLToxMDk1QTAwMDM2MTIyNDg0Q0VFQjg4RkZGMkMwM0MzQUZFRDY2OTRBREMKLToxMDk1QjAwMEQwMEUxOTNCODc0MTY1RTIzM0YwMzgzNzFGNjEwNzg3Q0EKLToxMDk1QzAwMDJCODlDNkYxMUQ2QjE5NDFFQjM5ODMyMkQ5NDRBMUE2MjEKLToxMDk1RDAwMDgyMkEwNzI5MjE2NEVCOTRDRjAzNjEzQTFFQTcxQzIxM0MKLToxMDk1RTAwMDJBQTQ5RUU0RTNCQjlBODhCQzlEQkJDOEM1Q0MzQjcxNTIKLToxMDk1RjAwMDNENjQ1OEEzNDkwODhBMzAyRjYzQkNEQjZDNzQ1Qzk5QzYKLToxMDk2MDAwMDc0M0QyNjg5NjQxRjg1Qjc5NENGNDk4M0YxMThGMzcyOUUKLToxMDk2MTAwMEE0RThBNzE5RjAzQTlBOTBDRDBEMEU0QzlCMjZDRjQ5OUQKLToxMDk2MjAwMDIzNTA4RkY0Q0U4NUY1REQzQTI1NEJEQzI0RjQ5NzNGQUIKLToxMDk2MzAwMDMyRTUzOTQ3MEY5RDZGMjNBRkQ3QUExRDc1NDA3OTYzNzcKLToxMDk2NDAwMDlEMTNGMUI2OTVFMzI3NDQwNDFDRjdFNjUyRDdEQzY4NzYKLToxMDk2NTAwMEM5QzA3MTg0ODgwRkYzQjczQTY5MjU5ODg3OTc0NEY3OTIKLToxMDk2NjAwMDE1NDAwQjNENkRGMzI5RUM5QkFDOTY2REQyMDZEMkNCMjkKLToxMDk2NzAwMDhDNTIzOTE4QTNFM0Y0NzgzQzQxM0JDREY3MDQ1ODdENzQKLToxMDk2ODAwMEM3RUI0MjU0QzNGQTIxQ0YzMDVBREU2NUFDRkY2NEIxNTgKLToxMDk2OTAwMDFGOUZGNEZGM0U1MjREMDhFNTQ3NUY0RUVGNkJEMDhGQTIKLToxMDk2QTAwMEZENzU3QjMwNDRCRkJCRkZGQ0U5NkJGMzY5QkJFNDZEMjgKLToxMDk2QjAwMDIxQjgwRkZBMjVBQjJDRUI0NUY2MzJCQ0RBNTRGQTZGMjEKLToxMDk2QzAwMDlBRUY5QUI2NjgzNjRDQzFGREU1RTNENTgwQjc4RDQ1NzMKLToxMDk2RDAwMEFCNUQ2QjYxQUQ4QUQ5RkFBOUY0N0ZFNzBCNjlGQjlBQTAKLToxMDk2RTAwMDYyRTlERjY2NUVERjAyMjA0RDJCRUMxRTM5RTdEQjIzRUIKLToxMDk2RjAwMEI0RDRGNEUxRUVGMTkxNTgwNjJEMkNERDg4RUI5REFBNEYKLToxMDk3MDAwMDVDRkRFQjEzMkUzQjZFRUFCNzhENzgzMzRGQjlFOTNGMjIKLToxMDk3MTAwMDJFMjU5NzIyOUY1RkEwRkUxNzBEQzFDQjhFREI3MERFM0EKLToxMDk3MjAwMEEyNTlERUE0MkFCRjlFRDM0NzFGOUQxNTUwRkEyOEMxMTcKLToxMDk3MzAwMEY1MEM1QzUzREFGRkZEMjVBMDBCRTAwN0JEMTJFNTE4MjAKLToxMDk3NDAwMEYyMjI5RDZGRjM3NEQyMkJEMUY1NjgxQUE5NjhFQjI4MjkKLToxMDk3NTAwMDFFRUNBQTEyMTM3Q0FDQ0Y1RUEwMkZGODA3QUQ2QTJGQzcKLToxMDk3NjAwMDZBRUUxNkM2MDNGMDNEOEIxQzZDMTlGQUFGQzFEODIwMDcKLToxMDk3NzAwMEUzNEI1Qzg3QUY4QUJGMThFMDZGNUMzRkZFRUNBNDNBMTYKLToxMDk3ODAwMDJEMDZFQjVEMUQ0MEZDNzhGOTM4MzY0Q0JGNUQ4QkQxNjIKLToxMDk3OTAwMEY5NkNDOEZFNjFFODZENjJDMkUzQTU4Q0NGRkFDNjkzOEUKLToxMDk3QTAwMDEzMjVFNkZFMERGRUJBNDQwOEJEMDhGODkxOTRFMDZCNUYKLToxMDk3QjAwMDYxOEEwRjMyNTUwOUVFNEIzMjJGNTk2MDcyQTUxRkNGQzcKLToxMDk3QzAwMDBFOTkxODc4MDJGQTNEQUMwN0FFRjFFMjkwQUExRDI2NzgKLToxMDk3RDAwMDNDREIwM0NGRkQxOUYwMjc2NzkyOTg3QjNDN0U2RjkyQUMKLToxMDk3RTAwMEQzQTlGQ0NBMjRCQTNCMEQ1QjkxMDFGRTMzMjk0MEZFOEMKLToxMDk3RjAwMEE0RjkzMzk0MzI5MDBCOTcwN0MzQjQ5RjY2MUJFRjRGQzUKLToxMDk4MDAwMDVENkI1OUQ3M0ZGMzc1RURDRkQ3MDNGRjY0QzlCNzYxREYKLToxMDk4MTAwMDdCQ0Q1RTJFMzdENDQ2MUNERjgwRkE3RTU2M0Y3MUJFNkMKLToxMDk4MjAwMDdGMDIzOTNBMDlDQUE5OUM3RTFBMDNBMDZGMUNDMzlBMDkKLToxMDk4MzAwMDY3MUQwMUJDOEZBRUVCOUEwRjczNTQwOUUyQzE5MEZGMTQKLToxMDk4NDAwMDU0MDExMjI4NDdGNUMzOUZBMTlFNDNBQjQ2QkNEQjczNkUKLToxMDk4NTAwMDQyMjQ4Qzc4QjNFQUQzOTQ3MjM5NDE4RjBFQTAyNzk1QjUKLToxMDk4NjAwMEMyNDYxQjg1RjBERjFDMTVGOThEMjRFQTZGOUU4NjcyQjcKLToxMDk4NzAwMDJGNEEwRjM2MjZGMDE1NkQyQUE5OUUyOTE1OThCQzI1NkEKLToxMDk4ODAwMDdBMjZDRTVGMzZFODgwREIwNzM2MDMxRDNCMTkzRkFCRjcKLToxMDk4OTAwMEJDNUYwNUM2NDNFNUExOTM0NEIxNzEzN0E1NzQ4MEJEOTMKLToxMDk4QTAwMEE0MEVFMTczQTFCMjk4MDA3NDIzOTM4RDIwRTdFQzIxRkMKLToxMDk4QjAwMDkxRTgwNTAzRkJERkNBRjU0OUFBNzk2QzlEOTI1QzBGMUMKLToxMDk4QzAwMEU0MEE0QzBGNDg5RTNBQkUxRTM3QUFDMDY3ODIxRTI2ODUKLToxMDk4RDAwMEU3ODFERjQ4ODRFQkJGMjBBRUY3ODY4NjdBRjIwRTlERTMKLToxMDk4RTAwMDhDRUJFODk1NDRBM0Y0MjNFN0Q0ODU0MkI0OUUwNEJDRjIKLToxMDk4RjAwMDQ4NDUzNEYxOTRCMzU0MEU2QTY2RkFFQTVCNDdCMjE2RUYKLToxMDk5MDAwMERCQjM1MUI0QzAzQzZEMUVDNzNDMzIxRTUyRjUxQTRDM0QKLToxMDk5MTAwMDhCQzcyRTA0RkVCMEE1NUQ1RTBGQTYxQ0E1OUI0QTAxNTkKLToxMDk5MjAwMEZBNzcyNEE3MkJFMkExNEMzQTA1NjFBRDNBNjk3RjdDMTYKLToxMDk5MzAwMEJENzlCOTk0RjRENTQ3MUZDNjdDMzVBNURBM0I5MDZFNDYKLToxMDk5NDAwMDVDRTVBQTAwQUM0MEMxNkUxOENGNTAzRTlBQTFFMUU2OUEKLToxMDk5NTAwMDU1RTI3ODU4QjdDOEFDNTE3NDdEODZGNkNDNDNGREU0MjcKLToxMDk5NjAwMDdERkRDQTBGNjA1RUVCNEJDQTRFODAwOTk3MTY1NEFGNUYKLToxMDk5NzAwMEI5OUNBRUE3QUI5ODA4ODBFRjhERDBEODU0NjhFMTg0MkQKLToxMDk5ODAwMDVFMDk3QTFERkU5OTREQzhGRjEwOUUwOUU5MUU0NjNFRUMKLToxMDk5OTAwMDU2N0I1M0Q0NjQ0MzlFODg4M0RBMkZDMjc5RkJDMEZBODYKLToxMDk5QTAwMDI5RTUzMzMxRjEwRkVBRjFENTE3NjcyRkREQzhGQUQzNzYKLToxMDk5QjAwMEU5RkY4MEVGRkMwOUZBMzQyRDY0NkE5NzAwN0VBQ0ZENjQKLToxMDk5QzAwMDZDMDBCQTQxRkNBRUZBNkZFOTRGMjUzQjFDMUFEODFENUEKLToxMDk5RDAwMDQ1QTIxQUE1N0RBNzExRDU0RjY1MzE3MUNEOTAwOUU4MzMKLToxMDk5RTAwMDEzMzVBNzU3ODdFNUJERDBCQUFDMjc2NDE2Q0E1MUNBNEMKLToxMDk5RjAwMEI3NjYzQTZGRTc3MjIwNTBEMzU0RDA0Q0RCM0Q1N0VFMzgKLToxMDlBMDAwMDA5ODIxQzE4NEFDNTY2NDZGQUMwRjk2QzRFQjBCMzM3RDUKLToxMDlBMTAwMDk3RUM0MUY5RDg0OEU5QTgxMEVDRkQxMjExRURBMThEQTEKLToxMDlBMjAwMDQ1OEZBOTY2N0RGNTMzNDNERTBDQTAwRkEyQzkxNTI4MkEKLToxMDlBMzAwMDNBMDhBMUY4OTE4QUM0OTA3M0ZDREY0RjFGODk3NkQyNEYKLToxMDlBNDAwMEM1RDI4N0ZCNDZFQjdBN0NENUY1RkE2NTlGRkQ3RDcxMjMKLToxMDlBNTAwMEY0RjFGN0Y2NjdBQzZCMkFCOTQ1RDcxNUVERUYxNjZENDMKLToxMDlBNjAwMENFQTBGNkNCQzA3NUREODFFQkVBMkEyMkExNjQ3MkI4RTQKLToxMDlBNzAwMDVCMTBBQ0ZBQzk5QzlBRjUwN0I5RDVCMjVFQjY0QkJGN0MKLToxMDlBODAwMDMzRjc4MTQxRjA2MTlCNkI5REFGRDFBRUIzNUVEMkRFMDcKLToxMDlBOTAwMDA1M0I1NjU2NTExRjE5RkI4NzhEREEwRTFERUNGOTczRTUKLToxMDlBQTAwMDM5ODREOTdCOTE1NTMxMDFFQ0EwMjI4Mjc2MTAzNDIwODMKLToxMDlBQjAwMDUyRDhBOTg1QTI5QjA0NDZGRkIwMkU4NjdENjNBM0U2RkIKLToxMDlBQzAwMDk4QjkzRjQ5NzU1OUZCOUZBQjBCRTZGMTNCRUIxNTFDNzEKLToxMDlBRDAwMDg3MDNGQTAzQkVGNEQwMDY2OUJCNTIwRTg5MzlEMUZFNjIKLToxMDlBRTAwMDY0RUIwNzVEQjE3REZDOUQxNzQ1MDcwNkJEMDI1QTE5NjEKLToxMDlBRjAwMEJENUFFQjM1MDdDQTQ4QjJGNTFCRDBERjc1RDZGMUE2QzMKLToxMDlCMDAwMDk0NEI4OUY1M0NCMjc2Q0E2NDhGQTRBRTI3OTM1MzI2NTIKLToxMDlCMTAwMEJCNjY3ODlGRkY0MjM3RUNCOUE3MDU2QTE3MzYwNkJFQzkKLToxMDlCMjAwMEEzRTNCOEUxM0Y1NEJGQjY0MDRBRjU5OTM0QUM4QTg0MDgKLToxMDlCMzAwMDM1RDA5MzFBRTMxMzJEOURFOURGNEVDMUIyMEYzN0JFMjYKLToxMDlCNDAwMEE3MUUwN0VCMkZCRTkwRDIyMkM4MzU1OUIzRDhDQjg5QjgKLToxMDlCNTAwMDY5NjM0M0UwNkIzMjI1NEE3N0ZEMDM1M0U1ODlENDg4NzYKLToxMDlCNjAwMDVEMUI5QTVCNERDQjZGNkNFODlDMEFERjhENzIzMzQ1QjEKLToxMDlCNzAwMDYzRkY0REQ1QTZDOTNFOTYwOTJERTdDMEFGRTRGQzQ0NkUKLToxMDlCODAwMEY4QTgxMkNEQTRERjFEQTQwQkYzRTk1N0JFN0UwNEQ3QkQKLToxMDlCOTAwMDAxRUQyQURBNjQ5REE4NjFCQjBBNzkxQUNCNDE0MzUwRDIKLToxMDlCQTAwMDhFNEFGMUE5NzIzMTZCMEVFMENEQjY1MDA4QzcyNTQ3MzkKLToxMDlCQjAwMDFDQUIyOURGNkQ3NjcyNThFM0IwOUZDMzJBODcwQjM4NDAKLToxMDlCQzAwMDRDRjUwNEMwNkU4NUMyMzQ3NURBMjIyQUMyMkUwRTE3RjcKLToxMDlCRDAwMDcwMzg5REMzN0UwRTE3NzI1OEQ4ODFGMDY2ODVCNUI3NzAKLToxMDlCRTAwMDQ5OEVCMkY2NUQxQ0Q2Mzg5Q0NFNjE5NUMzODUxQzI2ODUKLToxMDlCRjAwMDdCNThGRjc2MDZCQjZDNTFENkJFOUJDMzA1MUNDRUUwREUKLToxMDlDMDAwMEIwOUZDMzIzMzgyQ0VDNDEzOEQ1RkFCOThBM0ExOTlFNTMKLToxMDlDMTAwMEZBRTQ0MjU3M0Y4Q0NBODNFM0I1MEY4RTI1QzA4QzVFQjEKLToxMDlDMjAwMDMyMDQ0Njg3RjE2RjE5NzQxMzQ0Rjk0ODNDNzlDODZGQzAKLToxMDlDMzAwMEUzMUM2Q0JEMUJGNzk3QTE1RjgyNzAzRjhBRTlGQjA5QUIKLToxMDlDNDAwMEQwQzdFNzNBQzVFMDYwRkNGNTQzMkU0Rjc3ODI5RDRCQzUKLToxMDlDNTAwMEQzRUQwRDJBQTZEQjFBMDI2OEY3NkU2OUQwQjg1RkE1QUUKLToxMDlDNjAwMDE4QkY2RjZDMDgyMkJDQTE2MTMyQTZFQjFCNDJGOEJEODUKLToxMDlDNzAwMEIxNjExNkMyOUQwREQ1OTgzRUQ4MzAxN0QzQkQwRDYxODgKLToxMDlDODAwMDRDRjczNDJDQzY3MkQxODYzQTg0Nzc1MzdCMTdEMkY2QzAKLToxMDlDOTAwMDA2MUREMzVEMEQyRDk4REZENjEwNDFGODkxRkQ2NUNGREYKLToxMDlDQTAwMDE3NTEzRDdEMkUyQ0EyOUU0RjM1RkVBMTczQUQ3RTkwQTcKLToxMDlDQjAwMDIxRDU1NkI5OTgzRTIzREQ5MkFGNEVDQkI2RkE0RENBQTgKLToxMDlDQzAwMDBCMkRCMEE3NjRBQzA1NzYxNTk1NTlEQTczRTQ0Q0I1NDUKLToxMDlDRDAwMEU0MkI5OTU1MTY1OEY2NUM2NTgxQzc0NEU3NThFMEQxRTYKLToxMDlDRTAwMDZEMzc1OERBMUIxOUE5QjFFNDhGNjg1OTYyQzkyRkQwQjIKLToxMDlDRjAwMDU3NUJFMEZDRkE3RkIxOTRDRkFENUI2N0M5REZFNjBDNDAKLToxMDlEMDAwMDNGMjM1Mjc5MzU3Q0YxMjY0QkI5NjFFMTFERDY3REREQ0IKLToxMDlEMTAwMEVDQ0M4QjkyNUJFNDMzM0RDQkVDQ0Y0ODk0Rjc1MjFFRjYKLToxMDlEMjAwMDA5ODU1MDZGMzFGREQyMDg3NDBCN0VBRjVDMTJERDI3QzAKLToxMDlEMzAwMDgwRkZFQThBMTNCMEVGQjAxNzMxQkQzMzYwN0Y5OUQwNEUKLToxMDlENDAwMDlFRTI3OUYwMzU5REY2NTNFOTNCMTFFODMxRjExOTA5QUUKLToxMDlENTAwMDk4RUE1MUI5N0Y1MjY0RkJFNjRENzdCMTdENzVFQjVEQjIKLToxMDlENjAwMEM5RjdENzI4RDlFOTNDNUFCRjRDRUVCRkVEMTEyNTZFOTMKLToxMDlENzAwMDA3RTk5NjdENEFFQjVEMDI5NkZGN0JEQjM3RjIxM0RCNEEKLToxMDlEODAwMEVERUY4RkQyNUM4NUQ5MEU4OTFBN0U1MUEyNjdGNUVGNkYKLToxMDlEOTAwMDc3NkQzREZFRjlCMEVGMzFGNkI5MTJFN0YzQ0FCOUMxRkMKLToxMDlEQTAwMEI3OUIyODlGQUM1NzA5RkEwREQ3N0JBQTA4RDgxNUU3QUYKLToxMDlEQjAwMDU0QzZGNzY0NkYxRUVFQzc4REYyMDNDNzY3QjIyQjUwMEYKLToxMDlEQzAwMEZFQjhBQzdFNUFDRjFDOTQyRkVCMzMwN0I3Q0I5NEI4QjgKLToxMDlERDAwMDg0RkUzQjI5MkU5MDE4RDUzQjhBNUMzREFCODA4RTRCOTAKLToxMDlERTAwMDc5NDUwQUFFMjVBODdGOTJFRUVGMDlEOTgxNzg5MDEyQzUKLToxMDlERjAwMEVDOUJBNjA1MDk3MjZGNDYyRUNFREI2NkM4QjdDQzJBNEYKLToxMDlFMDAwMEZDREVBNDBFM0UyRTNCOEMwQkM2QzNDNzY1OEJCQjMxNUMKLToxMDlFMTAwMDk1RTI0RTFDRUY5NDc4MDZDMjkzRTM3RTRDMkY4RDBGOTMKLToxMDlFMjAwMEM3QjQyMjNFMENEMzQ5RjExMTk4OTZDNzBCMzA5RDE4NDgKLToxMDlFMzAwMDFGODdGNUNBRTI2MzMwOUQxMDlGODhERjgzRjEwOTk4ODAKLToxMDlFNDAwMDVFMTJGRjFBN0UxRjFGOUY4MjY5NjlGQzFCRjhCRDI0RUEKLToxMDlFNTAwMDVFODlFOUI4RjgzN0YxRkJEOEY4OTU5ODhFODk1RjhCNjEKLToxMDlFNjAwMERGOEJFM0Q3NjAzQTNBRkVDRjk4OEU4QTVGOEZFOUM4REUKLToxMDlFNzAwMEY4N0M0QzhCRTJGMzMwMUQxMTVGOEFGNTBBRTNCNzYwODIKLToxMDlFODAwMDVBMTBCRjE1QkY2QkYxNTU5OEU2QzdFRkM0MzQyRkZFQ0IKLToxMDlFOTAwMDdENEM3M0UzOEQ5OEU2QzRENzYyM0EzQ0JFMTlFQjY1RkUKLToxMDlFQTAwMEM3Mzc2MjNBMkNGRTAzRkMxRTg4NkZDNzM0MkI3RTJGMDcKLToxMDlFQjAwMEE2RkVGODAzOThBRkM2M0IzMDREOEJGRjA4QkZGQkUyMTAKLToxMDlFQzAwMDBGNjNFQThEM0Y4RURGM0RGMTgzOThCQUUzM0ZDNUVGMjQKLToxMDlFRDAwMEFFRjg0RjMwNzVDNjhGRTE3NzQ3RkMwOEE2MTc1QTI3QjIKLToxMDlFRTAwMDI1QzcyQUM3QTU0Qzk3MDU5RUZDNkVCQTg1M0UyQTVFRkIKLToxMDlFRjAwMEI3Q0FGMUYyNTcwQTJERjk2NTJGNUFFNTc4RjA3ODk5MkIKLToxMDlGMDAwMDA1MUU3Rjc4QUFBNTdDQzlBMTJBMEIzQzc2QkY1NThFNzkKLToxMDlGMTAwMDE3RUZCNUNBRjE1MUVENTYzOTVFQjREMzJBQzcwQjVCQzIKLToxMDlGMjAwMEFENzI1QzZCQjJDQUYxQkMzNTU2Mzk5RTczOUI1NThFQ0YKLToxMDlGMzAwMDY3MkZCM0NBRUZDMDAyQUJGQ0NFMjJCQkFDRkJFRjE5NUMKLToxMDlGNDAwMDdCQUM3QTZEREEyMzk2RjYzQ0U1OEYyNUVDNTdBMjI4OTgKLToxMDlGNTAwMDY3NUMyNUZGNkVBOUU3MjgzQTlBMjA5Rjc1MjZBNzEyMEQKLToxMDlGNjAwMEZDRTU4MDEyOTlGMkY3MURDNDE1MzQ5RkFCMTg2OTNBQ0QKLToxMDlGNzAwMDk3MDcxOUMwNzczNENERTQ3QzM3MDRGODhFQTZFOURGNjMKLToxMDlGODAwMDVDODZFNzRDNUY3Q0FCRTUxNzREQjRCMUY0RTE4NEY5MzYKLToxMDlGOTAwMDA1RjQ0ODU1ODg3RTZGMUVDNjYxRkE0NTAwMzg5N0EwQzMKLToxMDlGQTAwMDlGODBFODY3MkFDMTJGRDY1Q0MwRTA3RjkzNEU1NUVBQjgKLToxMDlGQjAwMENDN0ZDQkYyQzk1OTk2RUY2NEYwMjM4REJGNUEwQkY5RDEKLToxMDlGQzAwMEU5NjlEMUVDMjA0RDFGQjEyNTk3RDM4RjQ5RUNCQ0VENDkKLToxMDlGRDAwMEFDMThFQTkwRTg3Q0ZGQTNCMkU3NzZGMEEzRkRENTFFQUIKLToxMDlGRTAwMERFMjdEMUVGQ0IxQ0UxN0M3MDREN0Y2QzBCM0YyNDgzQ0YKLToxMDlGRjAwMDVDMjRBMTA3RTE3QjFBMDkzRDI0QTFCQ0I2RkE0NTFCRUMKLToxMEEwMDAwMEMxRTBBNkVEN0MyNjU2RUY4N0ZDOENBQjE3QTM1RkNBOTgKLToxMEEwMTAwMDk4NzdCMzc3RjBGMTQ0MjVBNjk3OUFGRDA0Rjc4REZBNjcKLToxMEEwMjAwMDExODU5RjIzMTE3NjVFMDMyOUQ1ODNGN0I4N0QyMUM4NUEKLToxMEEwMzAwMERGNzA0NEQ5NjNBN0VCNjBDQkM5OUE0RkM2QjM2MjE2RjEKLToxMEEwNDAwMEZEMTE2QjVFMDU3QUQ4MDE3QTY4MDQ0OEY5MkU0QzNEMDMKLToxMEEwNTAwMEE0OUI5RDFCOTE1RTRDNTVBMjBBOTAxQUYzRUY5Qjc3MkYKLToxMEEwNjAwMDJFOUIzN0M1QzcyRjI0REMxRkQ0NjFGOTc1RUVBQjI3QjMKLToxMEEwNzAwMEMzN0MyODNFNEVDMDc3OEE4RkU3QTUyMUE5RjE0MUUwMzUKLToxMEEwODAwMDY0ODE4RTNGQ0ZBMEEyRkQ4MkM1RkZGOEJFMTBGRThENzkKLToxMEEwOTAwMDY0RjI2M0U2RDUwNzcxM0Y3OTQwNTIxMTFGMDZGRUU4NkUKLToxMEEwQTAwMERGNkRFOTg2M0Y4NkQ1RkIyM0Y2OUJEMDlFQ0NDRkM1REUKLToxMEEwQjAwMDdFMjNGMUZFQjkzRTM0RTgzODQzMjRFMTY0N0FERDM4OEEKLToxMEEwQzAwMEY3MjE5RDc5NUZDOTlGMkQyOENDMkU0OUVDQzcyNjU3RDMKLToxMEEwRDAwMEUzNzlFQTAwQjk5Nzk5QjBBRkNGMENDM0EyNTBGRDQ5MUMKLToxMEEwRTAwMEY1NjU5MjcxNEQ1N0I4N0Y0QUNFQkZBOEYzMkJDMzVGNzkKLToxMEEwRjAwMDQyRjZFNzdEQTVGMzJFQTAwNDI4NkY5MDFDMzk5RTg3QjkKLToxMEExMDAwMDcwOTBFQkRGMDJCMEVCQTgzRDcyRUM4REE3NjJDQkE5OUIKLToxMEExMTAwMDFDRDg1MDQ0NzUyREZBMkRBQ0Y2REM4Njk4ODhFN0VCRjgKLToxMEExMjAwMDA1N0UyQTcwNjg2M0Y1REMwRTkwQjkzRDY4RjQyQjM3MjQKLToxMEExMzAwMDU5RkQyOTlCNkQ3QzdGN0JEODhBQzcwMjRBRDBGRjRFOTAKLToxMEExNDAwMEI3RENDNDkzQ0ZDNkM3Q0YyRDhENzZGNkY0OERERjNBM0EKLToxMEExNTAwMDhFMDc0QUE4Mzk2NEMyNjc2MTI5MjUxRDE4NDc4QzhENkUKLToxMEExNjAwMDIzQjE3RkMyQ0YxNzBDRkU5MTNEREM2RkEyRTY2M0JCMkIKLToxMEExNzAwMDQ2QkY4OUZEMTA2OTM2OUUyN0E1QzJFRjgwN0VCRUUyRUMKLToxMEExODAwMDc5NUQ4NTlDRkNCQzkzQUUwRkUyNjk2QzhBRjUzNUNFOTcKLToxMEExOTAwMEVCMENGOEQ4MUJCNTc4RkVERERDNTk4Mzc2NTQ3MzgwNjAKLToxMEExQTAwMDlGQjNGRjg1QjYwQUVEMTA5MkQ0NUVEQ0NCRjFCQjg5N0MKLToxMEExQjAwMEVGMTdGNzQ2QUExQzU4MkYzM0RGQjI0RTQ1REI2N0I4QkUKLToxMEExQzAwMDAwMEY0RDZBNTUzQUE0RkI3NkIyNzIyM0VGQkVDRTE1NEUKLToxMEExRDAwMDY2NzY1QjNBQTQ5QjhBRDk3N0Q3OThCRDBFNTY3RThGNTgKLToxMEExRTAwMDBBRTlFNjEyRjZERDVEN0FDOEMxQ0EzMzNGMkRBOUE3OTgKLToxMEExRjAwMDdGQTY3M0EwMjJCNTVBMTRDQTQxRkY5MjkwNEM2MTk3NzIKLToxMEEyMDAwMDFBMjVFMDQ3NzZBQjVEOTgxQUUzQ0U4RTg4RTIxODVBOUQKLToxMEEyMTAwMDI1QkIzMzk0N0UyNUY4RERFQTQ4NzAyNDFCQUEwM0Q2QkIKLToxMEEyMjAwMDM5Q0E5NzJGQzdDOEFGQTdGOUI0QkQzMTNCOEY1NjQyODMKLToxMEEyMzAwMDNERTdDRUJEOTU1NzZBRkRFNTc3RjNGRUM3NzQ0NjVCRjMKLToxMEEyNDAwMDBBQTE3QzhFQjVCRDc2REU5RUIzQjNFQjA0Rjg5QjI5RTQKLToxMEEyNTAwMDhFQjEzRDIzN0YxN0NGQjc0MzdFMjY1MjFCRDY5NzRCMzcKLToxMEEyNjAwMERFOERDMTc5ODY4MUU3NDBCMUQ4MDg3MDIyQkYxQkVEMzEKLToxMEEyNzAwMEI0RjE3MTA0M0JBMzkxMkFFODY3QUU3NTFDM0YzNEM4NjIKLToxMEEyODAwMEIyOTM4NEEyMUU5MzNDRTBGOTExOUVCRjAxRjZGREI0ODcKLToxMEEyOTAwMDNGQjk5M0Y5NTE4REZDQURDNjM4MjNBQzdFMjNGNzBCNDMKLToxMEEyQTAwMDE4NzgxREMzRTU5MTQxM0ZBOUU4OThFOEEyNjVGRjQ2RUIKLToxMEEyQjAwMEVBNUQ1NkI4Q0U2NERGMDFCQzM4REI5QTFGMkVCNEMyMEIKLToxMEEyQzAwMDczQzc1QUUxNTA5OTE1OUUzQ0Q1RDJERTE3N0Q3RTk0MTYKLToxMEEyRDAwMEE4MTNGRDI1REM4RjYyRjg1RTc2QTkzNUI4Q0ZFOUY3QzMKLToxMEEyRTAwMEQzNDU1QzU4OEVFRjNCNzI3OEI5ODdFQjk4QkZBNUQxMDgKLToxMEEyRjAwMEMzRjk4NUZCNUQ5QzVDMkUzNjE3QjE3RDQ5OUY1REMxMUUKLToxMEEzMDAwMEYxRERDNUZEMUE4RjM2QjRCMUY4OTQwQkQ4QzNFREJDOUUKLToxMEEzMTAwMERFMkU3RUZFRDhDNkZEMzIzRjA0RkNEQjYxQkQ5ODVGQjkKLToxMEEzMjAwMDI2QzJGRDMyNUJDMTJGNDNEMzU2RjBDQkQ4ODEzRjk5NzMKLToxMEEzMzAwMDVGQTYwNUZDMzIzNDNEQzBGRDMyM0YwMkJGMEM4NTFGRDUKLToxMEEzNDAwMDA2QkYwQzREMUZFMjdFOTk3RERDMkZGMzAwRjg2NTI4RDcKLToxMEEzNTAwMDdDNzA0MkY3NUNGMEI3NzU4MDdGODZDMkY3NzNGRjhDMjQKLToxMEEzNjAwMDlGQ0JFNTgzMzNBM0Q5RTAwRjdCNjQ2NkYyN0RCMURGMzkKLToxMEEzNzAwMEM2RkNFRUI5NjBBODUwRkFCODg0MDQ4RkExQkY5QjhBQ0UKLToxMEEzODAwMDYxRjA3NzRGQUMwQjM2MkE5OTYwQjczMkJDNEQwQzA3QTEKLToxMEEzOTAwMDFCNkRFNTYwQjczMjM4REZDNkY0MjhFODBCRDAxRkU0NDgKLToxMEEzQTAwMDMwRjMyNzUwM0VDQjA0N0M2RkUxNzQ1OTc2MjIyQ0NDREQKLToxMEEzQjAwMEEzRTNGOEEzQ0NGNUEyNDYwMjE4QjdDMEY5MDJGMjQxMTQKLToxMEEzQzAwMDlFQkMyMTg0NUU5NzI3NDFCQjA0Qzc5NUJGQjdBRTBBRTgKLToxMEEzRDAwMEM0NjhGMUQzRDU0NzVEQjREQ0E4QUVFMDNBNzA3RDE2MTEKLToxMEEzRTAwMDk1QThFMDU5MjBDRTIyNEQ4NEY1Mzk1ODE5NDQzRkRBMUEKLToxMEEzRjAwMDk2REY0QUMxM0REMDY2MjZCMUQwMDMxRDFCQ0FCRDMxRDAKLToxMEE0MDAwMDA2M0NDRDRBMEY5N0M0NzdBM0ZEREI1QzM3MjcwREU5RTcKLToxMEE0MTAwMDQ5MjM4M0VFQzdGRDIxRUIzRTI4NkRCMkQ1OUZENUJDMDUKLToxMEE0MjAwMDk3QjU5MzhBNkU4QURCQURGNkM0QTg5REQ2N0Q1NDczMkEKLToxMEE0MzAwMEQxOUM0MUZEQ0Y0NUFERDZGRTBCOUIxMkVBN0IwNkFGMEEKLToxMEE0NDAwMDlGMUZCRjFBRURGQjU0RjQzRDRFQUM0OUIzNERFQTg3NTQKLToxMEE0NTAwMDNERjFDQkIwN0NBMjdEMjcwM0ExNTBCQjREM0VBRTYwNDkKLToxMEE0NjAwMDQ4OTU3QzVDMEQ4MTVEMkIxRkQ3NzgxQUU0REY0MzFDNzcKLToxMEE0NzAwMEFFNjZCMENBRTIyMEE4M0Q5ODZCMUI4MkVCOTM3MEJFMUIKLToxMEE0ODAwMDFEMjI3MEZFN0MxMDk1MDFGREJGQkU3MDVEODhEMkRDODAKLToxMEE0OTAwMEMxN0YyMkI4REY3ODQzNUU1NUE1NTM3OEQ3NkM4NzI4RjMKLToxMEE0QTAwMDVEMDJGNEM2RTIxOTE0QkU1RTE5NEE3NDYzMDFEMEMzOUEKLToxMEE0QjAwMEMzMjIwMTdBNzhBNDczNzAzRTFFMTBFN0UwMDlBMTdGRTEKLToxMEE0QzAwMEE2QTA0OTJEMDNGNTlEQUFERUNFMjY3MTU2MzQ0OUJCQzAKLToxMEE0RDAwMDUzMzk1RjkxRTMyNEQxNkU5RTBBRjM1RERGMzQ0NzQ1MjMKLToxMEE0RTAwMDNENzI1RDEwRjcwNzQ0NjNFMzM3RTQ1QzQ2RkFFMEVCNDYKLToxMEE0RjAwMEI3QUJDMTdBQkU5NjREOTJEQkExNkI2QzlDREY4QTk5OUIKLToxMEE1MDAwMDdDMzRFODNGRTNDMUMxREJERkMwREI4Rjc3MDkxNkZGOTYKLToxMEE1MTAwMENFOTBFQkFBMkI2RDk5QjhERjA5N0E0MDhFN0UyOTMxNTcKLToxMEE1MjAwMDNGRDk2MTE2OUY2NkYwNTM2M0QxMEUxNzk0MzdGQUNGNjcKLToxMEE1MzAwMENFODlDMUY2ODQzNDFGOTlDMkUyMjYyODdFNzEzRjc4MDUKLToxMEE1NDAwMDg0Q0FGMTEyOTRFMzY4RjczOTE3RDc4NTk4OUYzQzgyNDMKLToxMEE1NTAwMEYxMERDRUJBQTAwRUVENDgxRTQ2MkZCMERGRTRFNTcxMzYKLToxMEE1NjAwMDNDMUJGNzhBMTg3MkQxMzg5N0Q5QUQ4NjlDMzdFOEEwODIKLToxMEE1NzAwMDMxQzBGREVCNzM2NUU2NjdGQjBCOUQ5RkIxMUY4MUZENEQKLToxMEE1ODAwMEExNUE4N0U3N0JDRDkzRDg3QzZDOTkyQzBFQzQ1NjFDQkUKLToxMEE1OTAwMDhCQzFEOTU5QjM3N0QxNUE5OEFGQkVEMEQwRDczQ0VFNDIKLToxMEE1QTAwMDgyQjBCODJCMjMxRTBGRjAwM0U3RTAwNTZERTM1MThFNTgKLToxMEE1QjAwMDE4NzhGQ0I2MTBBRTA3M0VCMjY1RUE0MjE4RTdEMTg1QkUKLToxMEE1QzAwMEVEMUI3ODRCQzRGQjc3QjkzQzFEOUVDMjBGOTdBNjMwOUMKLToxMEE1RDAwMEI5OUVBMUE4NTc4MUJDREQ3Mjg0RDI3NzkyN0RCRDkzQ0MKLToxMEE1RTAwMDk3RUI4OENERDkwNjM2QTJDMUFGNDZGRTAxNDlDMzdFOUUKLToxMEE1RjAwMDBDQjgyMEFFQjBCOEJFOTg3NUZGRjFGRkJBMURGRkE4MjkKLToxMEE2MDAwMENEMUE3N0Y3RkZFREY4RkZEQkVENzg5QTBGNzY0OEY4NzMKLToxMEE2MTAwMDAyNzYzQ0I3RjNGN0Y2RDE2RjgyOUQ1RTJDMUZDMTMwRjYKLToxMEE2MjAwMEJBMDQ3QjNFQUI3ODQ2QUMwQUYyM0JCQkJBRDE4RTlGRjQKLToxMEE2MzAwMDNDQjgxRDRGMTJFQzc3QzNBRTM3RUM3N0MzOUUzN0VDQjYKLToxMEE2NDAwMDc1MzJEMDlFRTdGQUVGMUJFQjQyMzJDNDg5MTFENDdGRkEKLToxMEE2NTAwMEUzOUFCRkIxNEU4N0ZFMTNGQzFFMTIxNTczNjZGRjQ1QzkKLToxMEE2NjAwMDJGRjBGOTEwMTMzRjc4QUM3NkMzQzVDQjA3MTlGNTNGMkYKLToxMEE2NzAwMDA5RTY1QUU0NkI0NkY2RTA3NjhFMTFFRkZENDVBRTYxRDEKLToxMEE2ODAwMEFGODdEODM5Njg1MTMxMzFEQjYzNEQ1NDhFRkJFODdDOUMKLToxMEE2OTAwMERBRTdCMkYzMjlDMkU1NzhCNkUxOTcyOTBFRkI0N0EzQzIKLToxMEE2QTAwMDdDQjdDQURERjZDNTM1M0E5RUEzOTQxMzNDN0ZGNEU0MkIKLToxMEE2QjAwMDc0ODVFMDdDM0M2QjZFMDRFRDQ5MkE3RjhCMTU5M0ZDMUUKLToxMEE2QzAwMDJENjhBQjQwMzlBNzczRkIzMjExOUYyMEVGMDI2NUQwOTQKLToxMEE2RDAwMDRGODI5QzIxQzE5NzQ1QzhDRjg1QjM2QkUwODdBODgwODYKLToxMEE2RTAwMEZBMDNFMjM0QzYwRjIyNkYyRTMyNUVDMzg4OUZDOEEzREUKLToxMEE2RjAwMDdGMjA2NzM2Qzg2QzdDRTQ2OTZCRkMzOTUxMjk3RDU0MzYKLToxMEE3MDAwMEY0REJDREU0RkRGOTgyMzlFRUNGQjA2MzEyRUI1MUI5NDEKLToxMEE3MTAwMEEwMjY5MzdCNkYwOEUxNkYyOTgzRDA0N0EyM0Y4QTI0NEMKLToxMEE3MjAwMEM4NjkyQTg4NDRFOEJGNjBGNjJDRjQzM0Y1RjlBNTY0QkIKLToxMEE3MzAwMEFCREM5NjAzNDYzQ0NCN0ZBRkZDQUU1NUZFQzZCOEYzMTAKLToxMEE3NDAwMEFGRThCN0RCQzhFNUYzMDA3RTRFNjg0NzJDRTkyMjNENTEKLToxMEE3NTAwMDQ5RkFGNzk0NThGMUVFMkFCMkRBRjMwMjA4NUI4ODFGM0YKLToxMEE3NjAwMENFQjE5RTkzQ0I5RUVDRTRFNzAwM0MzRUIzNjZCMkIxMjMKLToxMEE3NzAwMDZDREE3N0ZGNDhGOUU0OTYxMzM2QkM0NzYyRTgxREMzRUMKLToxMEE3ODAwMDJGN0IwQkM0NjlEMkY1QTk4MUI4NEQ0QUNGMEI0OEI1RDAKLToxMEE3OTAwMDBGMzIzRjI2MjJDNjgzN0Q0QzVFRjY0RDM0QUREMzdEMEQKLToxMEE3QTAwMDhBQzJGQTY5QjE5RDg0N0I0MjQ2M0NFMkMyMDg4M0ZCQkYKLToxMEE3QjAwMEYwREY2Njg1MTc5MTM5NTk3MDFFQjE2OEE3MEQzODg4OEEKLToxMEE3QzAwMERDNDJFNDkzM0RDNkY4Mjk3RjZGNTE1ODdDNzUyREE5NzIKLToxMEE3RDAwMDZCMDYzOUI2OUVDNzczRDdBODQ0ODZGOEMxRTU0RkREMkUKLToxMEE3RTAwMDU3MzE4RkMyN0JCOUZGRjYwQ0M1QkY2NkIyODM5Nzc4MkQKLToxMEE3RjAwMEEyMEE5QzJCQkM3MzY4RTI3N0JFNDZBMDdFQjQzOTFCQ0MKLToxMEE4MDAwMEUyMDhBOUJEMEE3MTg0ODk3ODlGREY2MjFEREY4NUM2RDEKLToxMEE4MTAwMDlGMzg1RUUzNUU1MUFBNzFDODlENDIyOEQ5RkVFMDMxOUYKLToxMEE4MjAwMEM1MUFFRjc2QTFGQjRFQkY1MzM0N0VERTZDQkRFRjc0Q0MKLToxMEE4MzAwMEExN0E3RjU0MzQ5MkVDOUVENDg1RUFGNUZDOERGREJENUYKLToxMEE4NDAwMDk3QTJERTcyNDc4RjAyNzI2MEE1MUM5RTI1MTRGNkM3ODAKLToxMEE4NTAwMDZCMjlCNkVBRDA3MDhBMEFGOUU5MDkzMTM4NUEzMjk1N0IKLToxMEE4NjAwMDZCQjlDODcyMjc2MDYzNzExMUU1NjY4OTgzQjQ3Nzk2MDYKLToxMEE4NzAwMEYzRjEyRkY2M0ZBMDAwN0Y3RUZDQzhEQjU3QzM3OUNERjQKLToxMEE4ODAwMEQyOUY0QUM0NDFFNzc1NzZCRjk3QzQ3MERGMTE1NTQwMjcKLToxMEE4OTAwMDdGMkQzOTI0MzFGRjlCMUNBQkI4RDYyNDdGMzE1Mjk2RDMKLToxMEE4QTAwMEUyN0JFOUEzNUU4Q0FGNThGMjk4M0QzQTlCRDY1RkYyMEIKLToxMEE4QjAwMEU0M0JFMzA5QzVDM0Q5NzVCRENGMEQ4N0ZEQzQyMzAyQjEKLToxMEE4QzAwMDhCMjdENDdCQzY1RjRCQkYyRjkxQzlDREQ1NDlFNEEwNjAKLToxMEE4RDAwMDY0Njc3NEZFRDE0RkRDNzM4MThFODRDRTIzMzc2MUJCRjUKLToxMEE4RTAwMDVEREZCNUQ5NEQ3NkZGN0YyQTM2QTMxQzlFMzNFOTBGNzUKLToxMEE4RjAwMDBCRDE5MTAyMUI5RkY5OUU4NDExQzdGOUQxQzMwMjFCOTIKLToxMEE5MDAwMERGRDNCNkE4MTNDNkQ3RDlBMTg0NjlCOTk1OUQ3RjQyNzQKLToxMEE5MTAwMEJBRkRDNkEzMDc3QzgwODc5NTRGNEIxNkY5QjJCMjUzOTgKLToxMEE5MjAwMDhBRDlDNzYzRkFCNjFEQ0ZBRjQyMUU4MUNBOTExNTI4RDYKLToxMEE5MzAwMDYyNjg3QTY4MzlDNjdEQUZFOERBRkMyN0M5MDdGNUFERTkKLToxMEE5NDAwMEZDNDNGMTEyOEMwMTVFNUY5NTgyQjMwMTdFRkMyMTFGRjYKLToxMEE5NTAwMEVDMDdDRjc0RUZGMzAxNUU2OUJCRjMxNDRBNTc5NzdEQTAKLToxMEE5NjAwMDY2RTIzM0MyREE4RkE3MEY2QzhGNUEzODBBRDBEN0NBODMKLToxMEE5NzAwMEFFOERBQ0JGMDRGRTNDMDNGRjE4MzY1MDJGOENCNTVCODgKLToxMEE5ODAwMEVERkE3M0U0QzUwQURDODc3NzY2MjQ4RDkzRUZEMzBCNjkKLToxMEE5OTAwMDlDNUY5NzFFMzhCNzVCQTdGRDdFRjREODg3QkI3NTNBREUKLToxMEE5QTAwMEZFNjU3RkZENzRGNzlENjA1N0ZFQ0NBOTgyOUM1OUY5MjYKLToxMEE5QjAwMEM4NkY3REM0ODRGNzk5NzZDNkVGNjcxRjdFRThDMTVERDYKLToxMEE5QzAwMDk0NUZDRUZFREU4RUZCRDFCM0NGOUNDRUQzRThCQ0NGNUUKLToxMEE5RDAwMDFFRkM3Mzk2NDZDQkRGRjZDQ0NDQTE4MDg3REI5RUY4QkQKLToxMEE5RTAwMEM2RDBDMUY2RTc0MEFGNTFCQjc5NURBM0I4QUVEQUQzQUMKLToxMEE5RjAwMDAyMEJDQTNGQ0NEMzg0RjUzOTc2RTg1ODFFOENGM0UzQkEKLToxMEFBMDAwMEQ3RUM3ODBGNzEyNUZENTY1RjA2RUJCNTFDRTUzRUMwMEYKLToxMEFBMTAwMDZCMjg5RTU3RUNERkYwMjc2OTdDMzI3Q0VCQzM0NUI4OEUKLToxMEFBMjAwMEYzNDYyOERCMDQ2MEJEQUZGREY2RjQ3MjQ4NkQ0MTBEQkUKLToxMEFBMzAwMERBMjNCRDI4QjcxM0VCQUQ3Qzg1QUVFQjI1QTlEN0YxQTIKLToxMEFBNDAwMDFDRjk4QjAyRjg1RkI5N0YyM0VCMzc2MTFEM0Y4NjdGQ0UKLToxMEFBNTAwMDRDMTlCODhFRjNFRDU2RkQ3RThFMkNCQjFGNkRGRDQzNTkKLToxMEFBNjAwMDE5NDlFM0E2OEM3NTVDRkVDNDNGMEQ2QTA3MThGMkUwMzUKLToxMEFBNzAwMDQyRjg1RENDRTNGRjgyRjZEMEFENzZFMEFCQzdEQzdBN0UKLToxMEFBODAwMDgwQUQ2Rjc0MzZDRDNCN0JFMDVDMUUxODZCRUZEQjdBREMKLToxMEFBOTAwMDZGMDIzOUQ5RkI4QzVEODVGREZBOTI2NzVFNDUzRTNCQkUKLToxMEFBQTAwMEZCQzQ0QjhBODY3MjkyNzgwNDZBMjc5QzI1N0Q3RkRERTEKLToxMEFBQjAwMDYwMzdBQzYwQjYzMDU5QjlENzFCQjNGQkZBRDc2OTQ1REMKLToxMEFBQzAwMEY0OUE1OTlBMEZCRkJGOERERkEzOENGRTU3NDQ4RjVDNTkKLToxMEFBRDAwMDI3MjQ1OUI3MDNGNjQyMjY5N0EzNDMxMDJGQ0I0OUI3MzMKLToxMEFBRTAwMEEyOTY1OEQ3NTM5ODBDRUJGOEY2RTU0MDc3QTlENkQxNDMKLToxMEFBRjAwMDk4QkYwQUYzQkZENEI0OUU3QjE5REYyNjk2NUY0MUY5NTUKLToxMEFCMDAwMDEzRkM4MzdERUIxQTE1NUUyNTQ5RjhGNDZDODc1RDg2OEUKLToxMEFCMTAwMDM4REZCMzI5Q0VEOUZCRUVFRjdFNDVGQkVGMjE3QjhBRjAKLToxMEFCMjAwMEZEM0JDN0MzODVGOEZDNDJGM0ZCQUFGOEJCMUI4MkJGMDEKLToxMEFCMzAwMDI2MERDNEUzNDc3RjQ5MkVGRjhGRDk5OUZGNkMwNTA5ODUKLToxMEFCNDAwMENGQ0E5NjA2RUEyRjg5ODRGNEUxMDVGREUzNkRFRTkyMDMKLToxMEFCNTAwMDUwQUU3RkQ0Mjk0NUExNkFBMjlDNTg5MUMyNEZGODkyNjkKLToxMEFCNjAwMEQxQ0ZEMzQ3QzY4MzNDRkJFOEU4NEYzODVEMzJCQTVGQUMKLToxMEFCNzAwMEIxRkY2RDQ1RTdGQTIwNkFENjA3MjlGQzU0N0ZFNEVENjIKLToxMEFCODAwMEFEM0M5Q0JDQkQ5NUZCRkY5NEI0QkQzMzcyRThCQjMwQkIKLToxMEFCOTAwMEZFMzNERDM2QTJEMzI2Q0U3NDQ5NDlGREFCQ0ZEQTZENDQKLToxMEFCQTAwMEQ2Mzg3MTZGQzU2QjY5QjQ5RUU0NzM2OUQwNzVFM0JBMkEKLToxMEFCQjAwMEQwQUJCMDlGRDM1RkI2MTFCQzRGMkIwN0RGQjdEM0ZDMzAKLToxMEFCQzAwMDQ2QUY0QkRCNDRGMUQ1RTg1Qjg0N0U0OEEzQkRBNjA0QzkKLToxMEFCRDAwMDNDQzk4MTZBMURGQzFDNzI2Njc1MzlCMzkxQTM5NkZENTAKLToxMEFCRTAwMEIwNEQxNTJERTNBNjdBMzYwN0Y0RDA5QjEzNEVEQjYwRUIKLToxMEFCRjAwMDlFNkYyNUQ4ODM2RkM5QTQ3OTI4NkRFRjJENUQwOEFFQUYKLToxMEFDMDAwMEQ1OTJEMUI3QjVGREYwMUE4OTY4NjZGRDY3RUY3RDEzNUYKLToxMEFDMTAwMEM2NDM3RUVFMjQ3MEJFMjJGRENDQTk4MzNDNTlCOURCMkQKLToxMEFDMjAwMDE5QjVEM0Y5MUM3QkUyOEIwNzAxNkY2N0VGQjcxM0JCMzQKLToxMEFDMzAwMDI5NUVCQzU2NjU2RDlDN0VFMjhCRERGRjQ1RjM0RjQzN0MKLToxMEFDNDAwMDY1REE3RkVENkU1QTFFRUNGMEZENkUwQ0RBRkY4RkM3RjEKLToxMEFDNTAwMEQyQzYxMzJBOUY2QjdGN0VFN0Q1MjA1RjZBNDFBNkQyQkEKLToxMEFDNjAwMEYyQjU4RjBFNDVCQkVFRDQxMDA2OUYzQTkwMUI4NTc1NEEKLToxMEFDNzAwMDU5RjZGODMzMkI0MDhGMkNGREIxOUI4MEFCRTBEODEzRjUKLToxMEFDODAwMEFGREUwNEYwRDk5RjdCMzFCRUYxRUNDRjRGNUYwNjdDODUKLToxMEFDOTAwMDQwRUQ2N0NEQUNDNzZGMzFCRjMzNDBEQjVEMEEzMENCRDEKLToxMEFDQTAwMDE3Q0U3MzU5MDdGQjkyQTU5MDUyQjlCMUY0RTkzNEJDQTEKLToxMEFDQjAwMEJGNjMyQTg3RjU1NkRBN0I2RjBGQTI3RjQ1Q0YxNjcxRTcKLToxMEFDQzAwMDhGMTNDQjA2M0U1Q0RBNjlFRDRGNzMzMDNGRTg0QUE1M0YKLToxMEFDRDAwMDc3MTEyQjFGQzk2NkZDREE4REY1NEExRDlDNEU3OTdFRDMKLToxMEFDRTAwMDYyN0RBM0ZDMzg0NzYxNDIzQkFDRkUwQTNCQTk0QjQ2NjAKLToxMEFDRjAwMEZGOTMxRDRDREYyRkVERkM3MkI0QjUzRDlEN0Y0RkVDRjMKLToxMEFEMDAwMDg3N0RGRjlFQzBFRTk3OTA4MzRFOEMyMzVBQTZDNDQ2NDMKLToxMEFEMTAwMEE1NTM3RTdENTIyMThCODE2Rjk3Rjk2MkEzRkNCNEJGNEUKLToxMEFEMjAwMDlGNzIzOUI5Q0M0NTYxRkEzRDlCOEYwM0NBMDM0QzFDMTUKLToxMEFEMzAwMDNEM0Y4NkY1NURGRTk0OTMwMEJEMkZGRkI5MTdDRjVGQjEKLToxMEFENDAwMDk2M0ZGOUM1QTk3RkEzREYzRjdBQzI4REZFOTJFNTNGMEEKLToxMEFENTAwMEJGMDNENzdCQjkzRDc2MTNGODUxN0EwRkRBQzkxRTVBNzMKLToxMEFENjAwMEZFQTM4M0NGRTc4MTFERjI5MTJEOTY5NzNFQzhGRTdDMEUKLToxMEFENzAwMDc5OTc5RDVGNkFCMENFODNFRTBCOEFFQkU4NzhGNEVEQUQKLToxMEFEODAwMDJDRkVBQzlFQjg4MjZCMjFBRTA0MUMwNzQwQzdBRjNCQzMKLToxMEFEOTAwMEQ5MzkyMTNGQjc1RENERkQ0OTlGMkNEMEQyNzBGQzI1MUMKLToxMEFEQTAwMENDQUZCNTlBRkIwRjU2N0Y0QjFCRUEzNzhEMDNFMjQzQkUKLToxMEFEQjAwMEM5NDQ0MkVFNTBFQTQ2ODM5Qzk1RTJERjI0MUE4NUU1QjkKLToxMEFEQzAwMEY4MDg0QzhENzI5MkNBRkNEMDUyMjZGM0I3RDkzMjgzNjAKLToxMEFERDAwMEE0QjYwNEVBQjE3ODIyRTJCOUFBOEZDRkZFMjc1REUyRDkKLToxMEFERTAwMEQ1Rjc2QTQzQTFCRDc5MEU2NjRGNkY3Mzg2NTYzODcwRUEKLToxMEFERjAwMDNGRTNDMTdCQTEzODRGMkExMEY0MjdEOEJDQkUxMEQ4M0UKLToxMEFFMDAwMEJDMTJDN0ZCODU0REI3ODMzQ0VGM0ZDRjY2RTcyN0Y1MDQKLToxMEFFMTAwMEIyRjZBQTA2RjMzRkMxRTVEMjgwRjkzMzNFRkI0NDREQkEKLToxMEFFMjAwMDQ3M0UzM0U2QjFCOTQxNDU3OUIyQjEyMTgwRTk4Njg2MjIKLToxMEFFMzAwMDYyQTI2MTVDN0YxMDYxODlFM0MzNUVBMjEzMDlFRUM5NUYKLToxMEFFNDAwMDZBNkNBQzc2NEY3NTA4RkM1NkQwMjZGODNCMjU0RjE4MzcKLToxMEFFNTAwMEU5Q0IxRUE4QzNCREJGQzNDM0ZDOTQ5MjQ3MjdCNTFFNTAKLToxMEFFNjAwMEY0ODcyMTlFRTBCQzA1RjBBNDcwNTg2RTlCOEQ3OEE1RjgKLToxMEFFNzAwMEY1RjFGQjcyNjdGODZFQzA4QjIzNjdBQzQ1NEUyOTk5REMKLToxMEFFODAwMDY1MTY3ODAwREUwQ0JBMzhGMERGOEQzRjgyRjgwMjNGOUQKLToxMEFFOTAwMDhEQzZFRjQ1MDBERUUwNUUwNEMwRkYwN0YwRjcwQ0MzOEYKLToxMEFFQTAwMERGNTQyQUEzQ0NGOEFCQjJDMDI5RjE3NzJGQzU1RjY2NzcKLToxMEFFQjAwMDNGNUYyNUUyQTE5RUM3QTUxOUZDOTQ4QTdGRTE1RTA5NDgKLToxMEFFQzAwMDVDMUFEOEQxRDA4NkE5RjEzRDNEODU1RUNGNzUzMkI5RTcKLToxMEFFRDAwMDU2NEZDMjc4MkU0NjU0RTY1NzIxOTkzQUM5MzFGOTkzMTQKLToxMEFFRTAwMDQ4NDBDN0ZCNEM3ODJGMUFGMjNEQ0M4RjY4QUNBRkE0MUEKLToxMEFFRjAwMENBQTdBQ0YyNEY3QjE1RTY3M0M3MEIzNjExRTQ5NTU0MjUKLToxMEFGMDAwMEZGMDA3OUM3NzQ4RTI2Q0RBRTc2NkE4OEU3MjBGQTc1ODEKLToxMEFGMTAwMDFCQjk3RTVEREZCNzlFNTZGRUQ4RENBMDYxQkE4NUYzMTMKLToxMEFGMjAwMEM5MzZDRTI3REI2MUREQzEzRjE3MTQ3MTRENUI2NzExNTgKLToxMEFGMzAwMEQ0OUY3NzUzOThFREVGNjM5NjczMkI3RkIwMkIwNkYxNzgKLToxMEFGNDAwMDBFMjg5MzM0NEM2MzI4QkY1RUIzNDc0N0QyN0FFRTEyODMKLToxMEFGNTAwMDEyMDI3QUYxQkZGNkZEMjhDRTk1NzQwNUMwMUZFQUU3MEMKLToxMEFGNjAwMEY4MjM4NzBCRkREN0IzNzcxMDZDNEM0RjExODlBNTExQ0YKLToxMEFGNzAwMDFCRUM5RjEyRjFEQjE4M0NFQTgwN0Q3N0FBRjE2NDA1OTcKLToxMEFGODAwMDc1N0IxRUVEMkZFQjc1M0JDQUVGQ0MxQkJCNUVBQkExRjcKLToxMEFGOTAwMEYzRjBCNEJBNzEzRjk5MTU2NEY0RTgwOTg2ODU1QUQzODEKLToxMEFGQTAwMEZBNjVBNUIwRkJFRTczNUVFOTc2RDJGNUY0NDAxQzJFOEYKLToxMEFGQjAwMEE1QzcxRDZEMjM5Qzc4MUU2NEVCMEE4MDFDRENFQzY3MjIKLToxMEFGQzAwMDdBNDY5QjRCN0JCQkI0QkZERUU3MEU2NjdGRjlDQUFEMEEKLToxMEFGRDAwMEZDNkZDODYzNzU1QTk5ODU4RTBENzk5QjNFQzM0QUVGMDUKLToxMEFGRTAwMDg2QkNFREU5OTNCN0Q1QjkzMDlFOEM3ODNCRjI2MzIyRUQKLToxMEFGRjAwMEZEMzdEQTE0NURBMDc2NEEyM0Q4OTI2MERGQkQyREIwMEMKLToxMEIwMDAwMDc4REI4MTcyMDBFMzUxM0VFOTI5RDgwM0VGMDVBQ0UzMTgKLToxMEIwMTAwMDcxRDAzQUU1MTdENDNCRENGRjY5OUNCNzFGMjBENTJERDIKLToxMEIwMjAwMEYwN0U0QjBCQTUyMzAyRUZDQzUwRkEyMTE4QUY1MzhDQzYKLToxMEIwMzAwMDY5ODREMjBGRTM5M0M5OTgxQUY0MzkxMzlDMjcyNkZGMjkKLToxMEIwNDAwMEI5NTRGNDlDQzhFRTYxODhBMDczODg0Q0Y3ODExRUYwNTcKLToxMEIwNTAwMDMzMUQ5OUUyMDBCQjUwQjYwNTRGODBGQ0VBRjU4QTVEQ0UKLToxMEIwNjAwMDEwOTdCMERFMzNDNzAxNzFENDgyQkYxQ0Q3RkQ3MzZGNTgKLToxMEIwNzAwMDRERkU2MEU3MjlGMDEyMDhEMDhERUEwOTkyOTMyNUZENzQKLToxMEIwODAwMEY3NzUyNUI1OENDMDdFRjI4MEE3MUJDRkZCQ0E5REEyQTkKLToxMEIwOTAwMEM1OUVEQ0U2MEM1RkU1MzRDMUE1RDAzQjVGQjdBRkUzRUUKLToxMEIwQTAwMEZDOTNERkZCRkQwRUU3Nzc5MkEzOTMyMjEzN0YxQkYxNDYKLToxMEIwQjAwMEExNDREMzQ5QjE4OUNGRDc4REJDOUNDMDM5RTc0MEZFQUMKLToxMEIwQzAwMDRFMjFDN0Y2RkQ2M0U0NTg2MzdFMTREN0NEOTYyODM3MkEKLToxMEIwRDAwMDMyQTk3Q0Y3NjBBQThCMkE4Q0ZGNTBEMzNGNEY0MDNBQUQKLToxMEIwRTAwMDVCMEFGODIwOUUzRDdERjZDQkQ3MEIwNzhFMzM1MTZFNjEKLToxMEIwRjAwMEY1RUIyMzBERkQ1NTU0MUZERDMzMTlFNDYwMEE3RDc0MTMKLToxMEIxMDAwMEU0OEREMURGODZGOEE5Nzc5RTk3MDRCM0JGNkU3MTdDN0EKLToxMEIxMTAwMDIzRUE4M0RBRjgxNEEyRDFGMUQ2QjRGRDAwRDM0NTZENDkKLToxMEIxMjAwMDFENDhGN0VGNDdEN0ZCMzAzRUE2ODVFREU3REU4RkRBMDcKLToxMEIxMzAwMEEyNTIwMUQyRUQ3OTA5RkNGQTg0QjVGRjdFN0IyMzk2RjkKLToxMEIxNDAwMDIzRTA3RDMxRjVGQjdFM0JBQjRGQ0EzNUI0QTczRkUxMzEKLToxMEIxNTAwMDczQUNEOTY2MEZDMTM5Q0RGQjZEQjRERTIwRjhBQzgxN0MKLToxMEIxNjAwMENENTAxMkZCMTRERjAxODA5ODdGNTIzNzFBRTQ5Q0MxNDYKLToxMEIxNzAwMEVGNzcyODU0MkUwMTFFREVCNDI3RjVCMzJGNzdDRURDRUYKLToxMEIxODAwMDBFN0NCRERDMTk2QTgzOTQ3OEQyMkZFQTNEOEE3NzQ0MUQKLToxMEIxOTAwMDZBRjcyMkJFQzNCRTZCMkM3RTU2RTZDNzdDODdEQkM1MzIKLToxMEIxQTAwMEM0OTEyMkRGQzdFQkFCQzlGMzk3Qjc3RUY4REM1RDE0MUYKLToxMEIxQjAwMDZBMkUwOTU3MTNEM0ZFNUEyMjZDN0ZCREUyRTk0QUZFN0MKLToxMEIxQzAwMDJFMDgxQjRGMTJGQTY0RjY2Q0FCMURFNUQwMDJFRTBGOTEKLToxMEIxRDAwMDMyRThCNTlGNUVDMjNFN0UyRkQ0NDI0RkI3QzRCN0UzN0MKLToxMEIxRTAwMDdBMEI5QjRCRUY5OTQyRjFGNzI5QTUyM0YwQ0IwOTlCRjIKLToxMEIxRjAwMEE3MEYwNTNFNUFCQkU5NkJEQjZFQTRFRDdGRjZBMjg0NzgKLToxMEIyMDAwMERGMTdDNzlENThGRTgzQkI4MkY3REMwOEY2RkFBRjZDRTgKLToxMEIyMTAwMDE4REZGNEQ5ODk5OTc4MEVGQjgxQ0RFQTQ3QTg3MUIxN0UKLToxMEIyMjAwMEZEQ0Q1QjRFOTYyRThBNkZCNkQ4Qzc4QjVBRTYyQkUwQzMKLToxMEIyMzAwMDdGNUMxNERGOEFERjE3QzFBMTBDREVDRkY4RjA3OEE1QTAKLToxMEIyNDAwMDBDRTczNTA0Q0Y0N0RGREE3ODdBQzYzQUQ0Njc2NUU4ODkKLToxMEIyNTAwMEM3QUFERDYyNEY3QTlGRTQyREE3NjY5MTNCQjUzREFENEQKLToxMEIyNjAwMEQ4MkVBMUY2NTE2NjE2NkZDRjI0M0Y2QUUzNzBGOTA0MTkKLToxMEIyNzAwMEQ2NDcyNzcwREY2MDExOTcyMzdERTM2QkI3NTlFNEM4ODkKLToxMEIyODAwMDA3Q0VFNDdFOTJGRkU4OUJERkQ3OTA4RjA2Q0VFRjMyQTkKLToxMEIyOTAwMEM2NUY0NkJGM0Q4Q0VGRkFFNzczQ0Y5NDY0RjNFOTlGMzYKLToxMEIyQTAwMEM3MzQyQ0ZGODEzRjc5RkY1OTFDQ0ZBNzFBMTY5MzEwODIKLToxMEIyQjAwMDk1NDMzNTc2NUFDRTAzRkRERkRBM0MxOUY2RDlFREZFMUIKLToxMEIyQzAwMDc0QzEzNEFGREFCNkE1MjQ2NDNFQTc2QzlGQTdENDk4QTYKLToxMEIyRDAwMERBRUQ1RjA3REJCMzk1NDVGREVCOTBFNTIyMzM2MTFEQTkKLToxMEIyRTAwMEVFNzM1NjhCMkVEQTVGQ0RFNkU5RTNDM0I4Q0Y2NkYyOTQKLToxMEIyRjAwMEU0MUQ1QjMwMEZFNEVBRTlCNjVCOTNGMjc3OTYyQjYxQ0QKLToxMEIzMDAwMDdEREFGOEZBNTBCQkI3RENCNDNFQzZCQTI0RDYzRkY1QjYKLToxMEIzMTAwMDQ2RURFNzc3ODExRkUwNUU2NkQ0QTRDMkQ3ODA3NTJCMjcKLToxMEIzMjAwMDQ4OEVCN0EwOEJFOTk3NTM1NENGODYxMTZGREE5M0FGNEQKLToxMEIzMzAwMDAxNUQ2RjcxNjMxQzY3NkFGQzhEMjNFMUMxRjA5N0MyRTgKLToxMEIzNDAwMDdFQTVGNkNFMThENzEwRTg5NzIwMUU2QURCMTgxRDVDODQKLToxMEIzNTAwMDA4NkZGREZENzIzQUE4NEMzRTlGOUJGQUU4QTA5RUU4NUMKLToxMEIzNjAwMDk0NjE0RjJBMTdBMjgzM0I4OUVFMTg2NDFFN0Q3NDMwQzYKLToxMEIzNzAwMEU2NTkzMzNGREVCNDQ5NDMzQTc4MUZFQzk0RDEwM0Q3MDIKLToxMEIzODAwMEZGQTRBMkZCQTZDMjM5RDAyNjA5Q0Y5OTRFQkFGNEFDQ0QKLToxMEIzOTAwMDFCMTgzQzAxRTRGMzQ5NUZFNEVBQTlFNUZERjAyREZCNEQKLToxMEIzQTAwMDQ2RkFFNjk5RkEzRERENzJBQjJGOTk5RkY1QTY1NEY0NjMKLToxMEIzQjAwMDUzQTQ5MzkyOEFGRjdERjRGMzhFMkQ3OUZDRjI3MjY3ODkKLToxMEIzQzAwMDY1MERGMDAxODkyNEY3RTcxQUE5MjFCRkE1MzQ0RkRGRTUKLToxMEIzRDAwMEJFMTNGNEU5NDk0RkUxRTc1MTlBRkJBODMzQkMxQ0U4REUKLToxMEIzRTAwMEUyMEU1MTFCM0Y0RkU4REY3RjBFQjAzRjFCNjY0RDdGRTMKLToxMEIzRjAwMDc3MjRGODBCQUJBN0JGNkI0MzdCMDhEQjIzNjA1NzE2QTIKLToxMEI0MDAwMEYwQjgwOEY0NkYwQzQzN0Q5MDc4NUVCQUMzNTU5MEY0QTEKLToxMEI0MTAwMDNDNzY3RDQzREQ0NDY4OTczODc0QTI5QUUzRTAwOEIzMzQKLToxMEI0MjAwMEEzRkU5MzMwQkY5NzMxMUZDNTE2NTZFMTVFOUEyMjkwNTYKLToxMEI0MzAwMDZBQTA3MzlCMUM2RTgxN0JCQ0I2NDBFNjA0REQ4NEQ3OUEKLToxMEI0NDAwMDg4OEJGOUJGOUNDNzhGQjcxNEQwRkFDRUY3NUU1NDYxRDIKLToxMEI0NTAwMEQwNzZEQTBGRjhENzFDMzlGMjI3NjZGRkI0MkQ5M0M1RTIKLToxMEI0NjAwMDI3OTIyMkQzRjc0Mjg4NEZBMEIwNjU5RjRGQzczQkM4QjEKLToxMEI0NzAwMDNFRjVBNzAyQzM4M0VFQjUzMzNGMEZEMTI1RDA3QkQ3NkUKLToxMEI0ODAwMDNCODlGMTg3RjZGN0VGOEQzODEwQjk4OUU1RkI4REVDMzQKLToxMEI0OTAwMDI2OTZDRkZEOTcyQjZCOTg3RjMyNzE1REFGM0ZCQ0ExOTUKLToxMEI0QTAwMDFCRUM5OUVCMEYwRkMzRkI3NEQ3N0I0NkJGMDdFNzBCNzEKLToxMEI0QjAwMDNGMDUxRjNFRDBCQjlGRTlFNUM0N0E4RjczM0VGREU3OTEKLToxMEI0QzAwMDBFNTFCN0QxNzUzOTZFRUIzREVBODZGMTdFOEZCREJGNjcKLToxMEI0RDAwMDc4QzM2RjhGREJEQzM0RkRDMzJCMjc2RDEwNEY3NDMzQzMKLToxMEI0RTAwMDA0RThEMDc5Q0QyMzlBQzI4Q0UwMjhENjlGNEZCQUJDMEQKLToxMEI0RjAwMDBDRUUxQTMyQzc2QjZFOEY2RTU1QTFCRDU1RUM5Q0Y3RTIKLToxMEI1MDAwMDg2REZCRTMyMTNENDI3NkQ2RjNEQTQzN0JGNDgxNDY4NjEKLToxMEI1MTAwMDdGREUyMUFEOTk1REJGRTNFRDFEQTZFRDg5RkRFREY1NjMKLToxMEI1MjAwMEUzOTFERjJCOTQxRDg4OTc3RTNDMzkxMDZGMDY5RUYwQzcKLToxMEI1MzAwMDAyNDc4NTA1Q0Y2ODZGMTg3OEVFQzM1QkRBRENBQkM4Q0QKLToxMEI1NDAwMEY4RDRGQzcyQkQ2N0Q0N0JFQzdFMjIxQjU3MjI5RTNGNTEKLToxMEI1NTAwMDgzMkNDQTZGQ0ZCODQyMkYwM0RGRUM3NTg1N0UwM0U5RDkKLToxMEI1NjAwMDMyNDc2RjlFNUM4OEY3MEY1RjA1QkU1QzIxODVGM0IzQTEKLToxMEI1NzAwMDQ2RTBCREM0RDE0M0UwNUQ5OEVFRTRFN0FCODk3Q0ZBRDgKLToxMEI1ODAwMDI2RjAwQkM0NzVGMzM4Q0I5QkY4RkM4RTdERkZCNDE3MDcKLToxMEI1OTAwMEUzMjg5Rjc4MzUwRkQyRTU1MkNGOTZFRjAyQkZGRDUyRDgKLToxMEI1QTAwMDQyRkJGQjkzNDNBMzA3OEQ0NzdCOTNGQjNCQ0VCQThDQjcKLToxMEI1QjAwMDc3NTlEOEZDNkVFNjc2RENDRDg3REM1MTc4NDdGM0U2MjgKLToxMEI1QzAwMDdBQzk2MkZGREU1Q0NGRTIzODg4REMzREZFM0E4QjFEMzMKLToxMEI1RDAwMEQ5QzRFMzFEMDZCNjAzRkJDRUM0NzY4Q0Y5MURDRENCRDIKLToxMEI1RTAwMDFFMDdGQkMzRkIyNzI5MUFGODFGOEVCQ0Y4QzlFRjZCOTcKLToxMEI1RjAwMDI5RUNDQTc1RTBCOUVDMTYzRkE3REY0QTExRDdGRDdFRUEKLToxMEI2MDAwMDdGQzg1RDBBN0VBNzRERTk0MTlEQ0U3M0QzQjNBNDRCOUQKLToxMEI2MTAwMEE0RjgzOTNBRTZGNjI4QzQyMTZFOUQyRUEyQ0Y2QTVCQzMKLToxMEI2MjAwMEZDODE0ODE1RDQyQjYxRUYxNUE5REMxRURERDY3REIyNTcKLToxMEI2MzAwMDBERThGMUY0NkI3NkY0RjczQkJEMTI4RTYzOTNBRDNBRUYKLToxMEI2NDAwMDBGRUNGN0Y3M0E5NEE0RUZFMzlERjdDODJDOEU1OEU4NzcKLToxMEI2NTAwMEMxNzhCN0Y5MjRFMjAwQjk3MUE4N0JDRTUwMTg4RjJGQkEKLToxMEI2NjAwMDQ4NTQyMEZGRDNFRDkyQzhFQzY0QzNDRjExOTM5OTlGNDcKLToxMEI2NzAwMDVEOTcxOTFDRTJBOUVBMzRDN0FCNkQ5QzM1MDNFMzI5MzkKLToxMEI2ODAwMDE2QjRCRTg0RjcyOTdERTVDOURGODdCQUM0Q0RFRUQ5RUIKLToxMEI2OTAwMDdBQkJEM0FGMDRGQzdBNjc4OEY4QjY5MTM3RDgyQjQwRDEKLToxMEI2QTAwMEJERkNFRTJBMDVFQjQ3ODQ0MUVCRTdBRjUxQUYwNEJDOEMKLToxMEI2QjAwMDQyN0Q5MEZGRjkxNzU5N0ZCNDlCQzUzQjZERTdGQkU0RDIKLToxMEI2QzAwMDBFNUJCMDc5MDY2REE3NjM4QjVGODBGNTMwQ0E4NURDQjEKLToxMEI2RDAwMENDOUUzOTNEQzNGMERGQjBCOEY2QkMyMkQ1MDlFRkE0NEIKLToxMEI2RTAwMEU0ODU5MEI5ODlCNzNDODJGMUI3N0JBMDFDRjM2RjIyNDcKLToxMEI2RjAwMDFFM0FDNjNDMTk4M0YzRTM0REEwMUI2MDlENkQ4QzlFRTIKLToxMEI3MDAwMDM2NkQxMUQwOUY0OUYxOTcwREZBRTJCREJCRURERjg0OTQKLToxMEI3MTAwMDc5RTRCNzA4MkFFQ0JENjk5QTc0RENGNTFFMDdBM0YzMzcKLToxMEI3MjAwMEQ2N0I3MDFGMDhFRTUxNjgzN0FGRkQzNzM4MkU2RjhBMTEKLToxMEI3MzAwMEY5RUVGMTMwRkE3OEVGMDJGNDkxRTE2NjdFOUJCQ0ZBMDMKLToxMEI3NDAwMDZFQkU0RjhBRTEzQjg5MTFDMDEzQzBBMTcyRjYzRUExQzMKLToxMEI3NTAwMDFDRDJDQzcxMjhGREZDQzNGNjYxNzQ5RTIxMzhERkFBOEYKLToxMEI3NjAwMDk5QUM0NEMxMEYyMEI2NzRFMDdCQzBGMzIzNzY3MjA1MTgKLToxMEI3NzAwMDlENUZBQkQwMUQwMjdFRDEyNzg5RkMxREFFRDA5QjgwODIKLToxMEI3ODAwMEE3QUREQjg3NjIzQ0RCMDYzMTk0ODdGRTlEN0Y1NUYwRDkKLToxMEI3OTAwMDdDRUM2OEU4OTM3QkUxM0REREREOTMxNUU0OEJBMzIxMzAKLToxMEI3QTAwMDc2QkZGNUZFMzU4NTFEQjAwRkY3RDY1N0UxM0JCRjUxOEIKLToxMEI3QjAwMDU1NDFDOUQyNTg0RTVFMTgwREU3ODM2QjQ0NTVBMEU1M0MKLToxMEI3QzAwMDIzRDVDNjNEMDMxNUVGMzE0QzkwM0VCREIyMThDRUNGMDgKLToxMEI3RDAwMDg2ODlFMDRCMjJBNzA1RjYzRUM4RkEzNTU1MkFBQ0VCMjAKLToxMEI3RTAwMDdBMzU1MzMwRUY1QkVFNzAzM0ZERjJCMkJGRkEwRTM3QUQKLToxMEI3RjAwMEM1NjNFMEFFMUQyQTM1RTMyOTdGNjY4QzAzN0ZBMURFOTkKLToxMEI4MDAwMEEyNjhDNjNENzE3ODU3MjQ4M0FGNEI0NkI3MTg1QkU0RjYKLToxMEI4MTAwMDQzRDhCMzk4NkU5MUI3NEQ2MzdFQ0ExRjVDMTU2NkZFMjAKLToxMEI4MjAwMDQ1Mzg5M0FDNDBGRjIyRkYwQkUwQkE2NjcyNjhEMzU4RUMKLToxMEI4MzAwMDE3MDIzQkQ3MkRDMkYyRDA0RTE2NkQyN0EzNUM4QzU1NTQKLToxMEI4NDAwMEQwNzZGN0Y4NDNCQjUxOUZDQzc0MjA5RTg4RENEMzA2OUEKLToxMEI4NTAwMDc4OEFDRUNDMEU0MjVDRUI4RTI5QTM1RTgyRkI1NTE5MTIKLToxMEI4NjAwMDI3N0FFNzgwMUU4REU2QkFGRUQwMDE3MjZBQkRBMjAxN0EKLToxMEI4NzAwMDlGNjdBQzM5NzUyMzdDRjcwNzdGNzgyQkE0MTk0REJGRTAKLToxMEI4ODAwMEJCMTNGNDgxQkZFNzRGMERGODdEOTY2MkYxRUY2NUJDMDUKLToxMEI4OTAwMEZFQzE5NzkwOUY1MUFENThGQzg0QkRGRUVBNUQ4MDk3MzQKLToxMEI4QTAwMEREMjU5MTQ4OERDNkJFODdCMkZBRTc3MTYwNkRGNzJDMzEKLToxMEI4QjAwMDc4RjdGQUY0MzU2MjcwMEZDRkM3NzlFRDU0QTM5QjE4NkYKLToxMEI4QzAwMERFQ0E0MUFGMTk3OERCMjA2QTVERjAyRUIzN0VCNTAzODYKLToxMEI4RDAwMEU5QTM4ODc0QTNCQzFBMDZBN0M4MjM0Q0Y0RkFGQUM2RDUKLToxMEI4RTAwMDU1MTAyNzkxMzg5RTFGNzNCRTg1M0Y3ODVGMTJENjBBODgKLToxMEI4RjAwMEUyNTE5NDYxMkNBRUZFNjA1OTc3MDBFQ0Y4MkRGRUU0MjUKLToxMEI5MDAwMEYxMDk2NzNEQUNCRTNEQzUzREY1MzMxRTQ2MEYyMDEyMjMKLToxMEI5MTAwMERCQ0EzMDBEOTU0MkVBMjE3QTFBQTQzOThFMTBDNEM3QzkKLToxMEI5MjAwMDFFMTRCNTNGMjI5REVGOTAzNDU4MUYyODZGQTNFQjc3NkMKLToxMEI5MzAwMEU0ODUzM0U4MUYzQzEyRjkwREE2Q0Y3QjhBOERGNjYyQjEKLToxMEI5NDAwMDU5RjAzRTZFRjk0OTNDMUZEOUFBMzIxQUE5NkQ2MUYyMkQKLToxMEI5NTAwMEEyMzZEMEUzODBGMzhBREExMkEyRUVFMUY0QTYxQjc4RDUKLToxMEI5NjAwMDA2N0YxN0Q3NTczNUQ3MzFCQzY2OTYxMDNDNkYwNTlGQjkKLToxMEI5NzAwMDE4QkM1Nzk2MDVFNTI4RkUzMjVCRDZBRUMyNzUyNEREQUQKLToxMEI5ODAwMEZBMDg1QTZFMkJCNDBCRUJEMzI0MTJENjZFOEYwM0Y5NDAKLToxMEI5OTAwMDM3MjJFMTc5MjNFNUY3NUZDMzc5NjI0REVCNTAzQzZGQzUKLToxMEI5QTAwMDg3NkJFQUQwNUUzQUVGMzc5REI3RDc0MURCMDFGRkRGMDcKLToxMEI5QjAwMEU5MTYwOUVGQjE0MEQ4MEJDMERBMUE0QUNCNDg5RkJENEYKLToxMEI5QzAwMDk1QzVCNDVEQUQ1QzU1MzcxOTc0NjBDODMxQ0ExQTBCQTIKLToxMEI5RDAwMEE4QkUwMEJDMkREMEY1NTU0MDdGMjcxREVBMEIzMDBFQzgKLToxMEI5RTAwMEY3NEVCQjA2RjM1RkIwRjNBOTNCQzA2RTcxMDc3QTVBRkUKLToxMEI5RjAwMDQwM0VENDRFNjZFMzRENkZBNURGRDFCRUQxN0UwREU1NEUKLToxMEJBMDAwMDZCNUJFRDFBRUI4RkUzQUY5Q0QzMTlDN0MzNDIzRUVFREQKLToxMEJBMTAwMDg1RUQ2Q0RDQUVEQzY4MDRFOEIzNzYwREM1MkJFNDg1RkYKLToxMEJBMjAwMDE5REQ4MzRCRjNCQzg4N0M3NTAyRTZFRkQ1QjNCMEREM0UKLToxMEJBMzAwMDIxNzMxM0Y4MjI4MUZFOEM3OUQ1RjA3OUQ1QUM2MUYzQUUKLToxMEJBNDAwMDIyOUM5RkU4QjA2MkQwNkU0RDM5OUJFNzAyQzJFQThCMjAKLToxMEJBNTAwMEYwOURCNkJGOTBDRkE3NDY3RjEyRDM4NTJENzY0QkZCQzYKLToxMEJBNjAwMEJCOEJGNzc2RTM3REI2MTI0NTEzMTBDRkVDOURDQzNDMzMKLToxMEJBNzAwMDNFQUZCQzI2RDY1RjVFQzk5Mzg4MkY1MjZGMUEyRkZBNEQKLToxMEJBODAwMDQ1NEQzMEU1QUJEM0NGNTNDNkEyNzZBRTkwRTc0MDYyQ0EKLToxMEJBOTAwMDNBRjk3RDA1Q0Y1MThBNzY1QUU3NzU3QUUzRTgwNzVBNzUKLToxMEJBQTAwMEMxRkY3OUI3ODJFNzE1MDdDNUUwOUJGOUI4MEY1NTM0OTgKLToxMEJBQjAwMDI2N0Y4MkJGOTkwRDcyN0E2MTUzMTBFNEY4ODE0QTg2MUQKLToxMEJBQzAwMEZGRDNERjIyNTFBMDg3OTEyN0FBRDMwMURGMjM0Rjg0MjAKLToxMEJBRDAwMDc5NUE4N0U3RDgxNDIxNDI5RkRDQTNFM0EzNUJBNzE2MUEKLToxMEJBRTAwMDAxRTQ2NTdDQzQ4RjE2ODMxQ0EwRUIwQ0Y2NjBBRTc5NzQKLToxMEJBRjAwMERDNzQ3QzE5MkQ1OTU1MTA4Nzk0MzkzOUJENEFDMUE3N0EKLToxMEJCMDAwMDdGMTNGMjRGRUM5QTAzRUZEODY2MUVERjc1MkJGNDMzRTgKLToxMEJCMTAwMDhDOThFNjQzRjM0Nzc5NDdCMEZCNTdDNzY5MkU5NEFCM0YKLToxMEJCMjAwMDNGNzUxN0FDNDcyQjdGOEY3RTI0OEMyQzFERDNFMzkwNjEKLToxMEJCMzAwMDY2NTBGRURFOUMwRUUzOTRDOThDQjI3RTc5QjBFRkVFQzcKLToxMEJCNDAwMDhBMDkyMDU3RjBFRTQ4MTlBNjMxNTIzNjUwNkU5OENBMkQKLToxMEJCNTAwMDhGRTFFNTc1MjE0OUI5NTJBRjY2RDk5N0VGQkJGQkYyOEEKLToxMEJCNjAwMDMxQjA3RkRGMEE3NjYyMUFCQ0U3QTc3RTBBRjEzMTdBMkMKLToxMEJCNzAwMDUwNDRCQzZGQjVDNTFDMjU5OUYwNUVCODQ4QzA3RUQ5NEQKLToxMEJCODAwMDU2RkMzQjExRjg2RUVCMjExMjA0RkFDOEE4RkVBQkREOUYKLToxMEJCOTAwMEJDOEVCNTFFM0ZDRTVCNTZDODY2RTBGRkEzNjM0RUNEOUMKLToxMEJCQTAwMDgyNzU4QTFFMTFGMTNEODlBQTVGNzg3NkI5QzExRUZBQTUKLToxMEJCQjAwMDNEOEIzRkU5NzhCRTBFRjVGN0VENzk0QUQyRjc5QUM5ODkKLToxMEJCQzAwMDA1RUNDNEM0RjJFOTIzRTdBMDFGMkY3RkU3NzY3QzE3QkEKLToxMEJCRDAwMEI2NzY5NjFDQkM4Mjk2Q0VEQzU5NTkwOTc2OEM1NjREQTkKLToxMEJCRTAwMEE5NkIyODFENzdGQjg0QjVDMDg0REE2Qzc2NUVBNUNEODEKLToxMEJCRjAwMDYyREZCNTE5MkNERERDQjA3ODIyRUNEQjIzOURCMkIzMUIKLToxMEJDMDAwMDg4OEU3N0VDNDZGNjZFRERFNjkyNEYxQzYxNkE5Nzk2NTkKLToxMEJDMTAwMDU3M0VFNkY4MTZGREZFNkUzOUQ1ODJGNEZCQkJEMzNFRTcKLToxMEJDMjAwMDcxQzJGOUNDRkRFNTU1MTk4MENGNDMyRDU2QkI4RUMwQUUKLToxMEJDMzAwMEEzNkE3NDFGNTQ2QThGODRCQzc0NUNBREJGMjU4ODRGOUYKLToxMEJDNDAwMEM5MUU2QkFCQTFCMEY0OTQwNzJDOUMwMUZCOUI4REFEN0UKLToxMEJDNTAwMDFENzM4MTRFMTcxNDYzNzhGMjgwRjk3RUNFRjVDOUZDMEUKLToxMEJDNjAwMEZBREU1OTcwNUZBOTQwMjdFQzFDMzU3MjBGMEFFNTg1OTIKLToxMEJDNzAwMDVDNjQxNEU4REQyODc0QkMzQkQ5RkUyNDIyODc5RTAzNTMKLToxMEJDODAwMEI5MUMyOTA5MkI1MEM1OTA2N0FEMjM2QjFFMDQ3OUY2QUEKLToxMEJDOTAwMDI1QjdFQjQ4REQ2MkJDMDc4OUZDMkY4MTNERDQ1Qjk5NTkKLToxMEJDQTAwMDZDREY3NDlEREI4NTc0NzVCQUZEREE1N0MxM0ZCREEwQUEKLToxMEJDQjAwMDlFRDlGQkY5RUQ5RjBBQjgxRUQ0RUUxQjQ2REJDRjJGQjEKLToxMEJDQzAwMEM3QTcyQUM5ODIzNTExNDcyOUFDNEY5MTQ4MzQwREM2MDAKLToxMEJDRDAwMEQzNDU2MDlGMTBBMUZBQzc4QzA3QTNEREJGQjVGRTc2RTAKLToxMEJDRTAwMDhGMURFQjVGMDc5QkU3NDlGREYzRjFGMEY5RTQwNUU5RjAKLToxMEJDRjAwMDdDOTJFOEU5MzlCQ0RGRUZEREY3RTk5MTI5ODBGRjM1NzcKLToxMEJEMDAwMDZDOEI5NDFGNzk1QjcwOThDNjkxQUY1RkRDMzhBRTg1MDEKLToxMEJEMTAwMEY2MjgzRTFGRjFCMDdCMEJERUYyMUVCQzY3OTQyOERGRDUKLToxMEJEMjAwMEMxOUMwN0JFRERFRDNFM0I4MUVERUZBREYyNzQwMENDNzIKLToxMEJEMzAwMEU5MkFGMTdCNUU4MkJDMkFCNTc3RTEzREQwRDYwM0VDREYKLToxMEJENDAwMDVENzREODc5NDNCRTQwNDQ4REJEMTcxQjM1REUyRkFGREYKLToxMEJENTAwMDgzNzI2M0JEMUUxNUU4QTA3NUNDRUZDQTAwM0Y1QkI4QzcKLToxMEJENjAwMEJEQjBCMDg0RTA3RTc1NjE0RTM3REEwQkYzOUJCOEJEOTEKLToxMEJENzAwMDIwMDc5QjQxQzhCQURCRkQ2NDkzQzk3RTQwNTMwOUI2RDYKLToxMEJEODAwMEQwNEREQzVFMzBGNDNGRDdEQkI1ODFFRTE2RDRBQjRENDEKLToxMEJEOTAwMEVDN0U2QTlGOURBMTMzQkQ5QTFGNjA3QUJEQjY4NUY2ODEKLToxMEJEQTAwMEEzNzE2MkFFMzBEQjI1NEM4RjZCM0JCOUZEQzBGNTcwRTMKLToxMEJEQjAwMDA2RUYzN0IzODVFOUFCMENCMDIzN0MxMDdFQTBBMzVFMDEKLToxMEJEQzAwMEM2QjNCQ0FDN0VCQjY1NDgwOUQzOTcxOUFEMDc1MUFGNkMKLToxMEJERDAwMDc1ODNEMzY1MDhDODBEQTYyRjczNUY3QTQ1MDczNDA1QjAKLToxMEJERTAwMEU4RTczNjJBQTc3RkVBNjY3MjM0QTA1MkZCMkNCRERGNTMKLToxMEJERjAwMDNFREIyMEYyNzMyNkMyRUM0MzhDQURBN0UzN0M5Q0I3RkMKLToxMEJFMDAwMDY3N0NERkNCQzc3N0YwNzhGQTM3NDFCRUVFOEIxNDRFRjQKLToxMEJFMTAwMDkwNEM3QzZCRENEQkNBMkI2N0U3RjQ3OUY1RUM5Q0RBQTEKLToxMEJFMjAwMDFCNUNGNEEwNjQzQTdGNjhGMUIwNzdBRTVBMENCQUFBRjIKLToxMEJFMzAwMDhGMDVBMDVEQkM0Nzg4NzI1QzQxQkZEQTQ2NzgxNzBBNUYKLToxMEJFNDAwMEU4ODVFRkFGNkU3MEYzNzc4RDM4RkRBNEQyMjc4NjFDOUUKLToxMEJFNTAwMEYyOTI5MEFGODRFMkY3RERFODgzMjhBRjc1QkE1RjgyOTMKLToxMEJFNjAwMEI5QkQxQjY5Q0M1RTAyRkMxRUI5QTYxQ0M2QkY3NUNBNTMKLToxMEJFNzAwMEU3MTg3NzkxOUY2MkJGNzhERUQ4Njc3RTQ1QjlFRTlENUYKLToxMEJFODAwMEY1MEFEQjg3NzY4QjQ5RUZDOTRDRjNDQTM4OUYyRTk5QTgKLToxMEJFOTAwMEI4MDE5RkNFMDg3QkE3RDAzOTU5NDk1QUZFMTIyRjkzN0IKLToxMEJFQTAwMDlCMkUyRjdCQTc2MEVCOTQwN0YxNUU2MzRBRkQyQzEzNUEKLToxMEJFQjAwMDVENEFBMjRGMEQ3RERCMEFFQjNDOTU5MDk5OUUxQjlBNDMKLToxMEJFQzAwMDc1OTRGQkQxNkEwOUU1MkJDMTdENjc4NEZGNUU4QzVFQUEKLToxMEJFRDAwMEFDQTBERkIwRDUxNjcxQzA3QTZDMkJFN0VCQUEzQTNBNkEKLToxMEJFRTAwMEUwNUVGQTU3NUUxNzhBMEY1OEU3OEQyMTMxMkExNEMwOTkKLToxMEJFRjAwMDNBNDdENTUyRTZEN0MxNzczOTRFRDNGREJCRjk5Q0UyMUMKLToxMEJGMDAwMDRBMkZGMzY3NzVDOTlBMDhGMTg5RjkyRDhDQkVCNjRFOTAKLToxMEJGMTAwMDUxNzAxQzlCMjY2NDc1NDgwNTY2RjlDQkYwNzQ5RDlCOTcKLToxMEJGMjAwMEQxRDdBNjI5Q0YyMTdENURFQ0Y4MTZENURGMzlGNTVEOTcKLToxMEJGMzAwMEQzMzlFMkE5N0IxRjJBMDQzQ0Y3QkZDQjEyMUFGNEZFQzcKLToxMEJGNDAwMEMyQTJGQTk3QTZFRTRENzIzRUQwOTcwRkZCMjgwRkVDRDcKLToxMEJGNTAwMDAzQTMzNzk4Q0Y1OUU2RjFGNTVERTBCNUZBRUY0MEJFOUYKLToxMEJGNjAwMERBNzA3MzExQ0QwNkZGRDI4MUU5NTExRkZBRUY5N0IxNTQKLToxMEJGNzAwMEYzREE1QkY4NzlFRDk5QkREN0UyQkIwN0E1NzA5NzM2ODgKLToxMEJGODAwMEM5QkE3RkQwNjA3RDA3RTI4MzdEMEY2NTMzQkY0NkQ0OTkKLToxMEJGOTAwMDYyNUZEREYyRTA0RkM2QjI3NzY1NzRGRTdCMUE0NENCNzgKLToxMEJGQTAwMEFDNjBFRjVGQTM5RTdFMkVBOERCQTVGRTc3Q0Q4Qzc3REQKLToxMEJGQjAwMEQ4MkVGNjVEQjc3NDZBODZFMUJFOEI1NDYzOUE0NUVBNjMKLToxMEJGQzAwMDMwMEQ5MDA4QTZEOUE0MEJEMzFDRDhFN0MyRkI2QkE0RjQKLToxMEJGRDAwMDE3NTM4REE4MjIzMUM5RkQ0MjEyNDRCODg4NTQ2MzJBRjAKLToxMEJGRTAwMEMzQkE2NUY0OUY0QkM4OUQwRThDQkY4MEYzMEJFMDdCRkEKLToxMEJGRjAwMEUzOUNDMjM4REZBRkY2RDY0NEJDNDlDRTJCNTY3QjQzMTgKLToxMEMwMDAwMERCQkRBODU3NjIyOEI3RTc3MzExN0VFMkM3NjNCQkUwQzgKLToxMEMwMTAwMDdFQ0ZFQTJERUM3RTg5MjFENzcxNUY0M0RCRkY1MTNBNTkKLToxMEMwMjAwMEQzMDNGQTBFMDFFNUQ3M0FGN0Q1OTcyMTFFNUI2RDFGQjIKLToxMEMwMzAwMDk5Q0YxQjg4QzM1MTA0QkYxQjYzQjQzQjlGRkIxN0U2MUEKLToxMEMwNDAwMDczRkQwN0VFNkQ3NkZGMkU4OEY3N0ZFNjgzOUZDMTk0MjAKLToxMEMwNTAwMDRGRkFGMkQ5N0Q2QUEzMUREMTNENkRENDYwRTc3QkE2NkUKLToxMEMwNjAwMEZBMTg4RjVDOTM2MEZGNUY1MDZGMjdDMDBCMTJFQkZGRDUKLToxMEMwNzAwMDg1MEUyOEFCREYwRkY3QTNDQkI0M0M3NkNFQzRGNDM2RTUKLToxMEMwODAwMDI1MjQwREVCQjVEOERGQzY3RDU4NjQ2NkM4OEM5NzEzQTAKLToxMEMwOTAwMDlDRkUwRDdEQjIyMEMxQUY5Rjk4MkU5MDM5NUYyNEI0RDUKLToxMEMwQTAwMDQzMzU5RjFGRUVDREUwREIyNjI2QkUzNkRFQkYzNTdFNTQKLToxMEMwQjAwMDVGRUI5NjUwNTgxOUM2QUEwNTYwMUQ1NTNFRUUwODY5RkIKLToxMEMwQzAwMEFGMUE0NkQzRjcwMTM2RjlGMzVGRjQ4NTdGRTczNUM1M0MKLToxMEMwRDAwMDQzQTlBMTNBRDFGQ0ZFRDIyMkNFODczM0E1RDY0QTkwRkQKLToxMEMwRTAwMDZGQTdDMzI0MDhGQjg3NUI0OERENTZCMEM3QzgyQjEyNzcKLToxMEMwRjAwMENBQjdFMTc0RENGMEJCM0ZCOTcwQTA5MThFQjBBRUQwOEUKLToxMEMxMDAwMEY0RTMwNjc2MkZFNzU0QzJGQkQ1MUZGMjc3OTE0QURCQTIKLToxMEMxMTAwMEVFQjgxQUU4RTAwQzdGQjdEQUUwN0ZBM0RGRDIyRUY3QTMKLToxMEMxMjAwMDNDRDBGQkE1NUREMzZCQTE1QzY5QTcxRDdGRTdBOUY4OTcKLToxMEMxMzAwMEQwQzY2QUYwMEJDMTNCMkQyRURBNEYwRUVEQ0Y5MTBFMUIKLToxMEMxNDAwMDcyODRBMEJFRkRCMEQ1MTU1RDQ3QzdGOTYxOUI4NDcyQUUKLToxMEMxNTAwMEY5NUM4OTg4RUY4REMwNzM5NzEyMUY1RjVBM0FCNEYzNjgKLToxMEMxNjAwMDVGMzc4MTFENzI4NkNCMTFFM0REQzcwRjJCMzVEQzFGRDYKLToxMEMxNzAwMDNGN0I2MDgzMDBGNzEyM0U5Q0E3RTFCQzNGMUNENjk1MzUKLToxMEMxODAwMDk3NEVGMTkzRTM2M0Y3NzM4QUY2REI2Mzg1NzQxQzRCNzgKLToxMEMxOTAwMDFFRjk3RDYxMERDOEJGQzJDODkyNjRFN0NDNDM3QzRDRDgKLToxMEMxQTAwMEZFN0RGODA0QzE3OEI4MEY5REZDNzc4RDFDNUQzRUIzMTEKLToxMEMxQjAwMDlGMzVDRDI3NThFNEQ2ODc1RUZFRkI0ODM5MTcyOEM3NDAKLToxMEMxQzAwMEUzQ0I4OUE3Q0JDN0Y4QkVDQjA3RTc1MUY3Qjg3RjhDODUKLToxMEMxRDAwMEY3RDc0RTNEQzFDRTI5OUVCREI3MzYwRkZDNTFDMzdENkEKLToxMEMxRTAwMDFBM0JGNzNFRjAzOEM2OERDMzNDNjAxRjREQzdBN0MxNTAKLToxMEMxRjAwMEY4RUU3MUJGNzkwNkZDMEZCNDFFREVDRjMwRUE5RDNBMkYKLToxMEMyMDAwMDUwQ0JDQUI3RDFGMjNFQzQzQkYxOTUwMTNEMzBCQzkzNEYKLToxMEMyMTAwMEZENEM0RTE4RjZFM0QyNjgxNkZFRUU0MjdGQkU4OEY5NUEKLToxMEMyMjAwMDMwNDQyN0M1N0ZFOUZFNkJGMDVDQUJENDk3Q0VFODU5NkMKLToxMEMyMzAwMEVEMUEzQjA3QzcxRkM5ODM3OTFDOTgxRUNFMDMzRkRFNEEKLToxMEMyNDAwMDI5RTM3N0EwRTQ0ODFFRTBBMURBMUIyRUY1OTlFNkZGNkEKLToxMEMyNTAwMEMxREI0RkExN0MyRjE2RUJERUJBMEJFOEYyMzFGNjNCQzcKLToxMEMyNjAwMDI0NzdCQ0JFNUQzNENCOEY2OUYwODM3ODkzNjA3RTJCREUKLToxMEMyNzAwMDdDNzAxRTc1QUFFRkJEOUMwODhCRjczOUNDREU2MzVEMjAKLToxMEMyODAwMENBNzlFRjU0MDdERDNGNTE3QzdDQjBGRjA3OTg3RkFBNDUKLToxMEMyOTAwMEVGM0Q5QjJFOEMyN0ZCNjBGRkIxNzQ0ODZCNzgzQzNGRDEKLToxMEMyQTAwMDg5NUU4QkZDNDVGMUQyRTI0OEEyQUZGQUVFNDU0NUQ5NTIKLToxMEMyQjAwMDdEQjdCMzAyN0Y4N0Y0M0UwMzZGNzVDQTFDQ0I3OTE1MzcKLToxMEMyQzAwMEUzRUY5Q0Y2ODJFMzY4MkY0NzkzREY5MzRCRDRGNzg5MjMKLToxMEMyRDAwMEVGQ0E1RUU4MUVGMDQ5Q0VBN0VGRjI3N0QxNTY3QkMzRDYKLToxMEMyRTAwMEQ3RkI1MDVGNThGNTQ4Q0RFNkU1Nzk4MEU3MUFCODUzOUIKLToxMEMyRjAwMDg3NzEwRUQzQUY4MEZEMzZERTM3NjFFRkNBQzYxMDRGQUYKLToxMEMzMDAwMDdERUZDNjRFQkMwMkUyMUM0RkY5MTk1Q0U3OUJCRDQxQjQKLToxMEMzMTAwMEU3Nzg2NEVGRDI1NkIyRkEwNTJDQkY5NUU3RkZDQTVCMDcKLToxMEMzMjAwMEJEOThGNTRGMDRGNkJCNDYzNjNGRkMzRTg1MjFGRjUyRDMKLToxMEMzMzAwMENGREZGQUZCMTRGNzgzNEMxRTgyRURBREY2MERDMTZDMTYKLToxMEMzNDAwMDgxQ0RFN0VGNkJDRjkwMzc3Rjc3M0I4RTdGNkMzQjg2NUQKLToxMEMzNTAwMDFDMDZCRTg0OTAzRDEyMEM4RUZENDdFMEVGNkZBRDRGODIKLToxMEMzNjAwMEU2RTY1QkU0RjkxN0Y3OEU2ODg2NzNBMDczMDE4MkYxNDUKLToxMEMzNzAwMENGRjZENkI1MDRGNEQyQzI5RERCOTNGRUJFNUQxRkNDRDIKLToxMEMzODAwMEUzNDk5NDExOTRDRjRDRkMxQ0YzMzEzQjNEQzZFNTIxQUQKLToxMEMzOTAwMEZDQzFGOUNDMjg0MkY4N0IxNzk0QTZCMjMwRTQwNkY3MkEKLToxMEMzQTAwMDdGQTNGOTdCRUZDNTI0ODJGNkQ1NThEMjg1NjkwOUU5QzgKLToxMEMzQjAwMEM2NzQzQ0U5QzUxNDhGNDk0NzgwQUIyRjI4RjE3NzdCQzEKLToxMEMzQzAwMDJCNjBGMkNCMUNFMUZCMjE1NEY3QUZGNkYwMzM0MDRGNkEKLToxMEMzRDAwMEYwN0VBRjIwODE1REI0NjIyQThDRkZBODRGMzU3RTA3QzYKLToxMEMzRTAwMDk0MjRGQ0FFNUFGRkVGODE2ODYwRDdDQzBFMEM2NkQ3NjAKLToxMEMzRjAwMDEwNTVGRUE4MkY3RUEzOTBCREZGQ0JGODIxRDVFRkM0MkEKLToxMEM0MDAwMDI1RkNGRTI0QkY0NzZDRTA2MTM5RTlDMjM4ODg2N0RCNTAKLToxMEM0MTAwMDU3QkYzMDg2RTI3RkM5N0UyRkVBODM1MUVENERGODNCNEUKLToxMEM0MjAwMDYwNEI0ODc3MTZEQzJGMURDNURGOTMyMDZERUMxRDBGODgKLToxMEM0MzAwMEUzOUQ4ODMxNkQ3NkNCQkIxRUNCMTM3RTg3NjgyOUZGQzkKLToxMEM0NDAwMEREQjBBNTA5REY4REZCOUI5QkUxNDM5MjM4ODJDNEZCRTUKLToxMEM0NTAwMDlGQTc3RDI5REU2MTJENDlGRTdCMzA4OUY3M0ZGNzc3NjUKLToxMEM0NjAwMDg5MThERkIzMUFFMjg1ODQ3RUI5Mzc2NjZGOURERDRBOEQKLToxMEM0NzAwMDVGNUQ5NzE1OTlERTdCNkExNDgyNkMzRkVENzU4NUY2REEKLToxMEM0ODAwMDA5MDNGQjE5QUIzMjNCRUU4MDIwMjQ4RDIzQkIyNjhEQTQKLToxMEM0OTAwMEVGMTc0OTEzQjk4QUI2RDNCODRDNTY2MUJGRDkxODc1OEUKLToxMEM0QTAwMEUxMzk2OEEzQ0FGNjg1QzNCRDU1MEVEOEE3MTNCRkE4NDYKLToxMEM0QjAwMEMyRkQ5NENCQTU2OTE4NUZBRTJDOTcyN0MyQjlFN0YxRUUKLToxMEM0QzAwMDNENEJCQUUxRkU0MjYzNDA0NjNGRUQ3MDNGM0IwNzI1REUKLToxMEM0RDAwMEMzNDQ3QzFGQTA0OTdEQ0MzRjFGRDZDOUMzQ0UxOTczNkUKLToxMEM0RTAwMDU1ODJCRjYzN0FBNEUzNzYxMUUwNDZCQTZEMTkwQUZENUUKLToxMEM0RjAwMDA4RTE2RUJDNzczMzRDMjZGQ0ZDNzVGNjA0NEE3RkY5RTQKLToxMEM1MDAwMDlDMUU2NEQyOEFGNzhGNjcyQzdGRDcwOTdBM0Q5RkFGMzQKLToxMEM1MTAwMEZCOTRCNDAyOUM4N0NDRDc3Mzc3RkQ0OTNGRDBFOUYzRjUKLToxMEM1MjAwMDFEQ0QyRjVGNEVEQkIzNDU2NThDNkIyREZFQjJGMTBGMzkKLToxMEM1MzAwMDk3RDNGRTdBM0IxNDhDNjczNUYwOTBCNzQ2QjZEQzlGRjQKLToxMEM1NDAwMENEQjlDRDBBMkIwOUY3ODg2NTYyQ0FBN0YwMzhERTNGNUUKLToxMEM1NTAwMDNDQjgxQTMzQzc1NTY1ODY5OEIzNTBGNUUwRkRFMDRCRkIKLToxMEM1NjAwMEQzMDQ2NjE3NzNCODE0NjA4QTkyNEU1QkE0Q0E0NUM3OTkKLToxMEM1NzAwMEQ5Rjk4NjgwN0U4N0EzMUQ4QkYyMzE0RUZGMjdFMTdDOUYKLToxMEM1ODAwMEEwNkY4MzFFMTJEN0VGNEJCMDg3OTA4Rjc0MjdCRjFGMDkKLToxMEM1OTAwMEVDODRDM0JBNDRGQTY5NkEyMDIzQzExRkVEODgxRTc3NzAKLToxMEM1QTAwMDhEODM3NTNDNjFDM0Y3QTRENjczRkI1QkY2QjBGODc3NTcKLToxMEM1QjAwMDgzNUUxMkQzRjUwOTc0QjdGRUNCNkI5MUVFN0EyOURENTkKLToxMEM1QzAwMDI1N0IxN0NFQTgyN0FCMUFEQTA5QjYxQzEyMDRGNkIwRTEKLToxMEM1RDAwMDY1NzY2N0FCQjRERUI4QTc5NEEwODdBMkVDRjI0NzRCQjAKLToxMEM1RTAwMEQyQzA5RTE5NzdFQzdBRjY1RTFGQzUxN0JFRjc1OEFGMUEKLToxMEM1RjAwMDhDODQ3REJGQkQzRTczQTQ5QzAxRTUzQzQ4OEY5Rjc4MzEKLToxMEM2MDAwMEQ4Rjk4RjVDRUYwRTQyN0U2MzQ3NDU0MDMzRDE3NTczOTYKLToxMEM2MTAwMDgzM0E1MjFFMDlFRkE1M0E0NkMyRUYyMzM1QTdGODlEOEIKLToxMEM2MjAwMEU2NUNCRjU4MERGRTI1ODVFRkZGOTdBNEIxRjEyRTQ5QkEKLToxMEM2MzAwMDczNjM3QTBCODdFRjkzRjUzOTMwRkVGQjI4RkQ0MEJDMUUKLToxMEM2NDAwMEMwOTFEQjE4RkRBRTFFRTZDMDdCQ0ZBQjlGMUYzMTc0REYKLToxMEM2NTAwMEIwMzhBMDA3MUIwMjIzMDE2RkVEQjdENUEwREZBMzcyOEUKLToxMEM2NjAwMEQ1NzFFNzE1QzBFNzVFODcwQUY0MjhGOTQ2REQzMzBEN0EKLToxMEM2NzAwMEU4RkQwNTFCREVGQjZBRjQ1NjY4RjM0REVENDlCRUM5QzMKLToxMEM2ODAwMEU4NTc5MjQ0M0QxQjM2NDUwRDY5N0ZCODQyMUUwNkY0QkIKLToxMEM2OTAwMEEyRUYwMjREQjQ2MURCMTEwNjdCRjU2QzgxRTY2RkRCMjYKLToxMEM2QTAwMEY2MkM4Mzg3RThCQjA0OUE3RkNGQjZFNzE5OUNBQjY3NkIKLToxMEM2QjAwMEMzMkY4MERDQkZFRDU3MEMxRUE5RUYwMkY4QTE2RDJGMzAKLToxMEM2QzAwMDMxMTg2QzBCNkFDNzNDQkFFREI3NTc4MEVGQTdEMTE2OEIKLToxMEM2RDAwMDlDMEJGRTlEMUZEM0YxOTdEOEUwQkQ1QTk2MUVFNDc4QkYKLToxMEM2RTAwMDMxRjIxRjgzRUYxNERGODc3ODlBOThGRjI0QUZGNzc0MzUKLToxMEM2RjAwMDhBRkM3RkU3Rjk4NzUzQjRGRjMzNUUyRjk2QTJGRTUxODEKLToxMEM3MDAwMDVFRUY3ODhBRkFDRkYxN0EyNzUyRTRCRkMwRjM1RjRDMkMKLToxMEM3MTAwMEQxRkVBRjc5QkRFRTE0RjU1RkU2RjU1RTQ5NTFGRjc3QzYKLToxMEM3MjAwMEJDREU2QjI5RjJGRkMwRjM1RjRGNjhGRjRENUVCRTg3MzIKLToxMEM3MzAwMDdGQ0ZGMUI2RkM0MUE3NzQ5N0QzQzE1RUY4MkNGNkI2NTMKLToxMEM3NDAwMEEwRkRERTVFNTc4RUY0REYzODg5RDkxOTA2QkRFNzQwQkIKLToxMEM3NTAwMEJDMjZDODVCOTVDNTU1OEQ1MkQ5M0VFRTk3NjlDQ0RFOTcKLToxMEM3NjAwMEE4NUM1NUI0MERFODZFRjVBRjI0RDRBNzU0OEZFMEVGNjQKLToxMEM3NzAwMEYwRUFBQjU4RENDQkVBRTdEOTdEOTBENUFCNjQ3QzI3RjcKLToxMEM3ODAwMENEQTA0N0EzQkUzMUZFREQ3QzdDNEQ3Q0JDQzdEMjBBNjgKLToxMEM3OTAwMEY5Nzk0QjYwRTQ2QzczQkNBNzZBODUxRDk0OUYyMDY0OTMKLToxMEM3QTAwMEE3Mjk5M0U5OTdFMjU1NTU4RUQxQTAzRkE4N0UwMUI5RkMKLToxMEM3QjAwMEI5REVBM0M0RTAxRUZEN0E1NUM2RkNBNkNDMkExNUYyNEMKLToxMEM3QzAwMDc1NTU0NkZEQjMzRUIzQ0EzMTFGRkQzOUU5RTg5RkM4MzAKLToxMEM3RDAwMEU3NzE3QjREQUE4Q0Y3Rjg2NUZGMENDQ0JGRkNEMUQ5NzMKLToxMEM3RTAwMDJBQzhEMTI2RDJFQkFGODRGOUFEOTFGMUJDRjY0ODVERjEKLToxMEM3RjAwMDE1N0VDRkY3N0ZFNjA3RjlGQ0FDOUZFMUZEQjhGNzM5NkUKLToxMEM4MDAwMDI3QkNFNzJBN0Y0RjQ0N0Q4MUY4QTNGRDE2QUUxMUEzMTQKLToxMEM4MTAwMDFBMkQ3MjVDNUQyRDAyRkM0MDEzRDM1N0Y0Q0YzQkExNUYKLToxMEM4MjAwMDgyQzc3MUQwQkZDRURCMkI1RTgwRjg5REM2MkQ3MjEwMDMKLToxMEM4MzAwMENFNzNFMDRGMzZFOTgzMjJGRTdCQTU0MzU1QjY2RjM0QjUKLToxMEM4NDAwMEY0RDU3RERDOEZBQjA3MUMxODg3NTcyNDkzODBGOTc3Q0MKLToxMEM4NTAwMDJDODdBQUZDM0M4REJGNjMzNjIyNjJENTRGMDUyREQ2QUUKLToxMEM4NjAwMDc3NkNGMjEzRjQ1M0EyQkVDQUFEQTNGMkQxNTRERTFFMEMKLToxMEM4NzAwMDUwMkRCMEEwQjJGNzJDRkUxNzA0NENEMDM5MDA4MDAwMjgKLToxMEM4ODAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJERDdEOTEKLToxMEM4OTAwMDBCNzg1NEQ1RDVFODNFNjdDRTNDMzM0OTY2OTI5OTY0MEYKLToxMEM4QTAwMDI2Q0Y0OTgwMTAyMEMwMDQ0MjA0NDQ5RDg0ODAxMUIxRTkKLToxMEM4QjAwMDBFMEYxNUQ0RTI4NDY3ODBCQ0EwQTg1OEU5Qzc4NDA0OTEKLToxMEM4QzAwMDBDMTQzNUZFNDYwNDdFQTAwM0EyODUxNkVDRDBBMjAyMEQKLToxMEM4RDAwMDA2M0IyMDIyRkVDNTM2NThEQjhCOEZEQTExQjk4ODNDMjcKLToxMEM4RTAwMEM3NDc5NTNFRDRCQkQ3REE3QjI3NzM0RTEyQzVCNkY3NDAKLToxMEM4RjAwMEZGRUY3N0QzQ0YxRUY2RDk4RkIzRjY1QTZCQUZCNUY2RUQKLToxMEM5MDAwMDVBNkJFRjIxNUVFMkZENUE0N0M4RTIzRDhCNkZCNDEwQ0YKLToxMEM5MTAwMDQyQzZGRkEyMjgzOTVBNDRDODUyNTNEMjEwOTI0Q0M4N0EKLToxMEM5MjAwMEQ3RjA3NzAzMjE0RENCQzNEN0Y3RDUxM0IyNjlCOUE5OTcKLToxMEM5MzAwMDlGNDI5RjRENUYwRTlGNDY0QTA4ODkyNTVBN0NEQjI0MDMKLToxMEM5NDAwMDQyNTYyREI3RjU1M0ZBNzVCNTFGNjhBMzJGOUQ4NDZDMTkKLToxMEM5NTAwMDU2ODI5Mzg5ODMzRTQzMEE2OUNDMjNFNEQwMTI5OTQwREUKLToxMEM5NjAwMDc5QjFEQjE0MzJEMjI2OEI1RkZCRkQ0REZEQTFCQzQ4QjMKLToxMEM5NzAwMEY2MTI0RjU3N0ZFREYzOTlFNUFFN0VGMEZEREY1MDk4NEMKLToxMEM5ODAwMDYwNUM3RDQwRUE3NzdBMzhGREI3MTI3MEY5MTMwOUU5RTcKLToxMEM5OTAwMEQzQUE5QzhBOUEwOEZFN0Q0REZGQ0I2QkExRTVDMkFFNUYKLToxMEM5QTAwMEIyNUVFRkI3RDlBQzg0RTQ5MkI4NzYxNDFFNDU1M0Q2ODQKLToxMEM5QjAwMDNCREZCNDA3OEE2MDdDMDVDN0Q3QzI5MURENDBFNzFGMjMKLToxMEM5QzAwMDM3QUVEMTY1NTM5NTU3NDkwRDg1QTQwRjdENTI1ODAxNTcKLToxMEM5RDAwMDNGNDFBNzFDN0E5QUNFMzM2QkU5ODNBMzRGQTcxMjkyRUIKLToxMEM5RTAwMDc5RDREMjBDNzgyNUFENEYxMjkyNDY4ODBFQkU0REU3MTEKLToxMEM5RjAwMEFENDgzRTBGQTE3NDY4Q0UyQkY2NEFGNDc5RUM1OTBCODIKLToxMENBMDAwMEMzNTNCNjE1RjE2NDkwQkNFOTM3RDNBNzUxRjZEQjYwODgKLToxMENBMTAwMDdDRkFFNzgzRjExRkNBQjY2QzVEOTMwN0M1ODAwOUYwMDUKLToxMENBMjAwMDkwQjU4MzBFOTg0MThCQzE5Q0Q1M0U4NUQyODlBMjlCM0YKLToxMENBMzAwMDhDODZGQTM3NUE3Qzc0NUUzQkE0Q0U3MjI1OTRDMzIxNEYKLToxMENBNDAwMDAzNkI0RjQ4MDRGRTZGOEYyQ0YxN0FFMjUzNUM4NEVDNDkKLToxMENBNTAwMDk2MjQ1RTVGNTQ1OTkxNDVEQjJCQjY0MThBOTc5MEI5NzUKLToxMENBNjAwMEFENDM1QkY0RDc0MUJEMkNGQUZCQzg0ODNBM0ZGODFFRjIKLToxMENBNzAwMDJGMDM1RTdFN0U4NEQ3MDdBRjZCQTlFODRCQzczNzg4NEMKLToxMENBODAwMEVGOTMyMEI0REYyM0NCQUMxQzJDNkQ4MUYxNzc5N0YzQUYKLToxMENBOTAwMEZFNDFDRjZBREYxODg0RTc2NjlEOUQ5MDI1QjZCMjE2RTkKLToxMENBQTAwMEFCQkIwQkRFOTVGNjFCNUIxQUU5RkMyRTdBQTI0OTc0MzAKLToxMENBQjAwMDFBQTQ3NkVCRTkzNDQyODc1QTM1MkRFMDA3M0MxMkUyOUUKLToxMENBQzAwMDI1RkVDMTg0OUM5NTI4NzI0Nzc0RDE0RkJGQjcyQzk4MUUKLToxMENBRDAwMDQ5NUY1RDNFRkFCN0E0MjJGQUFDRDc0NThGMjY1MEZDRDkKLToxMENBRTAwMEQ1RUUwQjk4RjRGOTE0Q0Y3QTVGMzAzM0FGQUI1RkVEMkUKLToxMENBRjAwMERFNDkyNDQwRjlBNkJFQkQxODlGM0RGNDNCQTZDOEZGMDEKLToxMENCMDAwMDU0M0Y5M0UxMkFCRTc3MzFGMjQ2REQyRTVBNTVBQjBCRTYKLToxMENCMTAwMEI0NThGQjYwN0JDMkU4REZGM0ZDNDRGRjhCQkJERUI4OUMKLToxMENCMjAwMDFEQkU3N0M5MTM0RDlCMDA3QzE5QTE3OEU5QTE5RjY4QjAKLToxMENCMzAwMDVGQjdBRjhDMDBERjVGQjFGODlBNkNGNEZENUQ3NkI2M0QKLToxMENCNDAwMENFODhEMkUwODVGNjYxNTNBQkNENEJFQkNERkE1NkJGMjQKLToxMENCNTAwMDk3QjZBN0E0MENDOTIzQkI5RUFCNkM3RDcxM0NFRDdCNDMKLToxMENCNjAwMEVERkEwOTlCNDhFQTQ0Q0FEN0MxMUFDNUZCMzQ4MTcyNjEKLToxMENCNzAwMDMwNjEwODJEQUZBRDU1ODYzNzUyOTA1NjE0RkY3MTU4NkQKLToxMENCODAwMDExOTQ5RkIzMTIyMzJEMzdENTFDNzExNUMxM0FGMjFBOTcKLToxMENCOTAwMDA4MTUyRjY0RURBOEIwMUJENjcxNzNBRDYxREE3NkUwOEQKLToxMENCQTAwMERGQzg2MkQ3OUNBMkFFRjE1N0RBRjUwOEY3RUE1N0U4N0EKLToxMENCQjAwMDNBMUI0QTlGRkFCMDVEODJGRUZEMTQwMkVCRDA2Q0E3Q0YKLToxMENCQzAwMDc0QTY2NUIzM0I4NTA0RjNBMDlENzUyREFDQzdENUZBNUIKLToxMENCRDAwMDQwNjUzOUI0NzNDQkU0NjlGQTVENzNCRkE5OTVFNTE0NzgKLToxMENCRTAwMDBFOTc1Mzk2NzQwODQ3QzVDOUI5QjRCRUM5NjYwMEM5NDMKLToxMENCRjAwMDQ2REVCMENGREMwNTc4RkFCOUUyNkQ4MDc1Rjg3M0FCMkMKLToxMENDMDAwMEQ1MTZBNDE1NTQzNkZBNjBERDJBRkQxQzIxMjgxQjc1QTMKLToxMENDMTAwMEE0MjE0Q0UxQ0IyQzI2RkVCMEI1MEJDRTM3NjA5NDExOEQKLToxMENDMjAwMEYwMzQyMEJDNkJDREUxNDk2NTc0MUNDQjYyRDkxNkE0RUQKLToxMENDMzAwMERGNUI1REJCQUU2MzNDRkRDRTdGRDYzRTdGQTI5MUJFODcKLToxMENDNDAwMDVGOTNBNjEwODBDM0VBNTAyMjg2MjRDQUM3Qjc1MDE4NDMKLToxMENDNTAwMDI5RENCQjFCRkQzNjkwOUYzMUE3NDJCNkQxN0E0QjVGRDIKLToxMENDNjAwMDAzRjFDNEM5NDE2QjExMkRDN0M5QTc1NDg3RTIzM0QzNUYKLToxMENDNzAwMEZFMzE3QkUwNjUxQkZERUVGMEQ3REYzNDQxN0ZENzA4NDYKLToxMENDODAwMDU5ODY2NTEzNTYxODlEOTM0QUQ0RTNEOEM2QThDNzQ5NTgKLToxMENDOTAwMEE5NTBENzNCMjZBQUVCRDNBNkFBRUI1RDc3QUJDQjE5NUQKLToxMENDQTAwMEIzRDVFNTg5ODJERkE4Q0NCMTk2RDI3OUIwMkE2Mjg5NjIKLToxMENDQjAwMDdFQkM5QzI0MjE3RURFMDJGQzVCMEE2NDJGRTBDNzVDMDQKLToxMENDQzAwMEJCRkRFQzVDNUE5RjA5RjI4NEMyNEY4NjkwRDBEMzk0OEUKLToxMENDRDAwMDlFODc3MzdFRTg4OTUyM0MxQjUzMUEzQ0Y2QTJFRUY4RkQKLToxMENDRTAwMEM4Q0MzNkREMENGNEIyRjY1NTZDODRCNkI3QkVGQkQxQjkKLToxMENDRjAwMDk3MzBCRTk1QzRCNUNCMDNGQ0Y4NEUwMzdERTFDRjQ1MUMKLToxMENEMDAwMEUxNDk4NDdGNzgwMERGMEQ3RkZFMTFFOEJEMTMzQTJGRTMKLToxMENEMTAwMEUwM0JCMzU2QzFFRjNGM0NENTEzRDJFNUIxRTY4NEI2NTQKLToxMENEMjAwMDRGRTJFRDkzNEM2QjNCNzQ0M0U4RjNEREQ1OEI3NDQ5RDQKLToxMENEMzAwMERERjE5QTQ2MUEyNDU4OTc5NDNGNTA1RjkwMkE4MkZBNjAKLToxMENENDAwMEUyMjE5OTU0MDNERkQwRTU0QTYwM0MxQjc0QTA3MkU2RUYKLToxMENENTAwMEM2MTQwM0YyQ0RERkI5N0VBNTlDMjY0MzdEOUE4RDhENDYKLToxMENENjAwMDY5NzBDRjM2QzM3QTVFNzk5NEYxRkY0QTAzMUJBNzczQ0IKLToxMENENzAwMDNDMEY3RTE0NTUxMEM4NDlBMzVEQzZGMUM0MzhFQjZDNTYKLToxMENEODAwMEJDMEQyRjNCRURBQ0JDRTc0OENBQ0RCMDJFRDc0RDREMDYKLToxMENEOTAwMDE5MDY3QzYyOTQ0OTAwQzY0QkNFMzJGOTA2RDBGOTk5NDcKLToxMENEQTAwMDVGMzMwNDI1M0E2OEIyNDI4RUU4NTM2ODdCMEJCOUM3RkIKLToxMENEQjAwMDRGRTFEODcwQ0MxMkQ0RDFGN0U2MzlGRjYxQTM0ODI2RjEKLToxMENEQzAwMDg1NzYwNkY3OUUxNURFREY4MzFDODg1NTI5ODg0N0IzRDQKLToxMENERDAwMEIzRDUzNkFDODhDRDIxNDhFMTRCODE3RjUwRjk1OEQ2ODgKLToxMENERTAwMEFGQ0QwNkY0MzQ5N0I1QTJGRTM2MTdCN0I2MDI5RTM2MUQKLToxMENERjAwMDRDOTREMTlFNDg5OTJEMjMzRjlCQjNDMzI3RkFEMkY3NzkKLToxMENFMDAwMEZBMzlCMjBEQzY0QkExOEFERDQwMDc3OTNDQUJENUVGQUMKLToxMENFMTAwMDg3NzEyOUNFRTU1MkM2MkEzMDJFQ0U5MDdFMjc5NUUzMjMKLToxMENFMjAwMEQ1RTFEODdCQkY0NEM3NDk4NUYxODZCMEY2ODAyNzNCNjIKLToxMENFMzAwMEM3OTNEN0VFNDFCODFEN0NEQ0Q0QkVCNEZEMTAzNjRFOEUKLToxMENFNDAwMDczNjlENzM4ODI4RTFCMkE0OTA4RTAxM0RGMTVFMzc0MTMKLToxMENFNTAwMDhFNEY3QzEyQzg1NUZENkYyOERFMjg5REE0MUMxMzAyM0UKLToxMENFNjAwMEI3NzIwMTA5MTlGMzAwM0ZGRTg2QURCOEFFQUQ2NDFCODEKLToxMENFNzAwMEFDMTc0NzU2MzlGMDUxQzZCMThEOTNFNTIxRDBDRjgyMUEKLToxMENFODAwMERGRDFDRjIxMjFFMEUzMEM4NTk4QUU0RjAxRkJDNThGQTgKLToxMENFOTAwMDc4RDRBRTU3Rjc5MUQ2Mjk3NDhENzREMjQ1QkI3RUREMTgKLToxMENFQTAwMDBBNjlEMUE1NzQ1RkM3NkU4N0EzQkM2MDQ4MEZFQjU5QjAKLToxMENFQjAwMEIzNUVEQ0M3NjJGNzAyRDM2QkQ3RjU5Njg0NEJDNTgwQUYKLToxMENFQzAwMDE3MTJERjVFRjdFRDY1OUQyRTdDNjIzQzEwMkI5REVBMEMKLToxMENFRDAwMDA5OEFGQTFDQ0RGNzA4RjlDQTA4NjU4OUM4OUVBRkZCMTQKLToxMENFRTAwMDgwRENCN0YzRjU0MEY1MTU1REFDN0I4NkQ5QzY1QTYxOTkKLToxMENFRjAwMDlEMkUyMkM4NUZFNTJGQUNCREYzMzc3NEJDQ0ZGQjE5NjQKLToxMENGMDAwMDZDQTA1N0IyOEZCNTc2ODA3RTI0RkIwMkZEODEwRTlCMEMKLToxMENGMTAwMDk0QzA0RjEyNjhGREE2OTNFOTA0RTRGNjZBMzM5OTA2QkIKLToxMENGMjAwMEZDQUQ3MDNFRDdFQTk3OTU3Q0RENzg0MENGQjlGRUY5MkQKLToxMENGMzAwMEE3QjAwN0MzN0REMzA2RDlFOERBNUJGOUQ4RTE2MzI2NDkKLToxMENGNDAwMEU3N0ZBMzlENDVGQUEzOUQ5NTc1QTRBM0QxMEFERjZGNDIKLToxMENGNTAwMDJENkYzMTUxRkM5QTVGNjdFRDlCNjkzOUE4MDBGRTZBMUQKLToxMENGNjAwMDcyNjExRDFFQ0U5RThCNzg1MkRFMzYxMkUwRDNDMTNBMUUKLToxMENGNzAwMDVGMDhDQUU0MUQzMzAxRjlCQkUzQjlCQkFCM0QyMDdGQjkKLToxMENGODAwMEQyMjY3ODQwMEVBREUzRUJCRENEMkVGNTg4MkZDNUUwNUYKLToxMENGOTAwMDBCODAzREExN0RGRjA4RTAxN0U5RTkzRjVCNDVFOTM4REIKLToxMENGQTAwMEY4MjkwMzU5NDMyQjBCRTU5OTJENzlCMDJFNTY1M0Y5RTcKLToxMENGQjAwMDRCNkI2N0VBM0M3NTNGOTZCQUU4RjMwQjczRDk3NjNCNDcKLToxMENGQzAwMEVDM0I5NjlCNDhDMDQ4RTc3NTQ1MjIwMUJBMzhCMzFEMzMKLToxMENGRDAwMDZGOTQ4MUZDQzkyMTExMDlGNDZDNEUwMzM1Nzg4MUFGM0YKLToxMENGRTAwMDk2NTg0ODIwOEVERkIzQUUyOEQ4RkUxNzY2REY3NjNCMTIKLToxMENGRjAwMDk3RkYyNjJBMDdGNEVDOUZFNEU3Mjk3RTUyRTU2MDMyOEEKLToxMEQwMDAwMDBBRUMxN0ZEMkVDQkZCMjAzNzg4QTNDMkQ3QjlERkM4QTcKLToxMEQwMTAwMDA3RkVBNTdBOUY3RTZGMEY5RkJGOUVFMjUwM0Y4Q0ZFNUEKLToxMEQwMjAwMDY3OTUyM0M2MjFERERCM0ZDRkYxQTM5OEFDMTE5MDk3MjQKLToxMEQwMzAwMDhBRjVGODQ5OTQyRjM2RTU0MjdDM0I1Mzg4RTkxQjUyMjgKLToxMEQwNDAwMDQzNDJGRDI0ODYxNzJDRkZDMDg2RTU0QzJBN0Y4REMzMDIKLToxMEQwNTAwMEQwRUUwRjFBMDFDRTI0QjZGRjIwM0U5RkM3OTEwNkVCRkIKLToxMEQwNjAwMDg1MjA5MkIzNENBNEM1NDREQjIxQjdEM0Y1RTYyNjFEMzkKLToxMEQwNzAwMDY2QjQ5QjhGMTAwRkFDMDc4QTMxRkI5OTA0MTQ1OTA0RDYKLToxMEQwODAwMEYwQkE4OTkwQ0FGODc1MjA5RTA1MzY0NjI3NjVBOTBFMjQKLToxMEQwOTAwMEY3NEI4MzVFMzYyMzNDRkEwNjEyMzI4MzNEMDRCMDUxQ0YKLToxMEQwQTAwMDdDMkI0QjQ4NDg4MUZERDY1MjAzQjYyQkIwNzlCMDlGRkMKLToxMEQwQjAwMDgxMzRBMDNEQkJGQkNCRjczMjQwNEU1QjhFNTI3QjZDODQKLToxMEQwQzAwMDI4RDA1OTQ2Mzk2NUIxQThENzFGMjE4RDg4QTdEMzlDOTAKLToxMEQwRDAwMDNGMzYyRkI3MjE5RDNCRjc2NzgxMzczOTlEQTM4REEwNDAKLToxMEQwRTAwMDJGNzI5NkE0QThFODJCREE2NTVEQzkyNDgxRTFGMUUzRUIKLToxMEQwRjAwMDg2NzBEQ0FDQkU0NzI0NTIwNEY1Mzk1OEJGNzlCOUU3RDUKLToxMEQxMDAwMDVCQzZDRkVGNjU3QzM3RjI1MUVGRTM2NzYxRkRFNkM4QTAKLToxMEQxMTAwMDlCRjZFRjUxNTQ2QzhBMURCMUZCM0Q1REY2QjUxNkNGMDEKLToxMEQxMjAwMDU5NEJENDcyNzlFODNFNzU1OUUwQzVBQ0Y3MzkyNjUxQjAKLToxMEQxMzAwMDlDOUJFRjk1QkQ1QkU5NzhENzlDNTRCN0FCQ0NGQjAzQzgKLToxMEQxNDAwMEVFNkZCQkRBNDcxQzUzQTAzREREN0Y2RkE1NkZBRjNEOEYKLToxMEQxNTAwMEFCNkVFRjJGN0JDNTBFRUJCOEFCM0Q4M0VGODYyQkVBQjIKLToxMEQxNjAwMDc2NUFGQTY4RTFBNTcwMzk2RjhCODM2QkFDQzlBOEFBQUYKLToxMEQxNzAwMDlGNTZENTBEMkVFNzFENzE3MERERTg1MkI3MEYzNEY2QkUKLToxMEQxODAwMDBDRDdDRDg1QzY2Rjg0NEJCNEJCNzVFNEQ1QjVEM0NFNzMKLToxMEQxOTAwMDYzNEFBNUIxMTdCQ0IzRjY3NzRDQkJCQTcxRUZBQUZFRDAKLToxMEQxQTAwMEU2NzZGNzJDRDU3RTI3ODhGQzdFQjNFNEJCMjY4NTNFNDkKLToxMEQxQjAwMDY3QzIyQkIwMTdBRDE2QjQ3QkI1RkNCMjlERUJBN0VCRTUKLToxMEQxQzAwMEMxOUVBMzRGN0ZBMkVGN0FFODM3MDZENjFEMkQxQjc2QUUKLToxMEQxRDAwMEZFRjE0RTkwMkZDNzlFMUQ5ODBFNzIzRDEzRjQxQ0UyNzcKLToxMEQxRTAwMDkzRjkxNUY2RDRCOEQwQUYzMDk1QUY1M0FBNEY5QTQxMDIKLToxMEQxRjAwMDVFRUNEOTQxRkIyNTMxQjhFMkVEQTdENDFBQjZBRkIwNDkKLToxMEQyMDAwMDkxMThBRTY3NjEyRkE1MTA5QkM0RjZFM0NDREVFOUVENjMKLToxMEQyMTAwMDNCREFGMTFCRUQwQ0VFNTk0QkM3OTIwRkU4M0E3Q0RFN0UKLToxMEQyMjAwMDYwMkI1MzYwN0ZCNjQ1NDI3QjYwNTY4NTRGOTc0OEY5MjcKLToxMEQyMzAwMDYzNzQ4Qjg0N0VBMzU5MEZGQzYwMzhDODk1NTFBNzNENTkKLToxMEQyNDAwMEZCQTJGNEZEQUM5MEREMEI5RkFERUIyMEJFMTBFNUFCNzcKLToxMEQyNTAwMDc0RERBMkUyMUZEMUU3MTM4N0E5RkRDM0NCOEI4MERGNkEKLToxMEQyNjAwMEFDM0UwRkVDMzdBQTAwMjIzQUNFMDU3RDQzQjEwREU0NjcKLToxMEQyNzAwMEU2RjdBRDNFOTA5QjU1NTM3RDZGRTE3Q0ZGNDFBRDEyQ0IKLToxMEQyODAwMERBNkUwRTlCM0E3OUExNkQ5MkMxNDNFRDhDQUFCQjNEM0IKLToxMEQyOTAwMDIzQzFFRUE5MEE5QjdERjgzNDExQzU0MkU3NTE0NUVENDMKLToxMEQyQTAwMDMxNzhBNjFCODg2Mjg2QTc4NTk4RTA1OUJBODJEOTVGMzMKLToxMEQyQjAwMDQ5MjNGRDg2MkFGQUZEQUFGNjlGRkUwNUZBQ0Q1MzIyRTAKLToxMEQyQzAwMDg3OTgzRDE5QzI3OTU3QjVCRkY2NTdCMEQ3RTZGOEZDMzUKLToxMEQyRDAwMDA2OTAxNzgzNzYxODk4NERDQUY5NjE3MDU4NUQwNjc5RTMKLToxMEQyRTAwMDEwNUYyRThFQThDQkMzOEZBOUNCN0Y0QTYxRjgzRDIwNUIKLToxMEQyRjAwMDg1MDYwMTdEMEU1MDA1MDdGQkUyRTA2RTIzRUE4QkMzMzUKLToxMEQzMDAwMDA3OEQ0ODlGODVFNzJENUJDMUZGMzQ3NkExMTVFNUZBQUYKLToxMEQzMTAwMEY5OUY5OUQxMUY3NTQwMEUzRjBCRTVFMEIzMDlCOEFGRjcKLToxMEQzMjAwMDNFRjRGNjgxNTI4OTk2MTdGQzIyNTE4NkZBMTdCRkQ0MzMKLToxMEQzMzAwMDIxOUU2MTNBN0FGQTdFRTFCMzAzQjZBRUExRUYxNzBFRjEKLToxMEQzNDAwMDBGOTdEQUU4RkJFNzA3MTJEMjAxRjU0QTY4MDhDQ0VGM0QKLToxMEQzNTAwMEY5QUY3NDM4N0U2Q0E3MzFCNDhERjJDM0Y5RkQzRjdEMEYKLToxMEQzNjAwMEY2NDFGQUZERjMzQjMzNTMyNDRBOTc2QjQxMUZEMDc2QzUKLToxMEQzNzAwMEEzOUYzMjU5NjA5RjMxRkFGQ0FFM0UyMDJGMTZFRTMwNEIKLToxMEQzODAwMEFBRTZCNTM1NDVFMkZCMTk0RjEyRjA1QjZGRkVDNDUzQjgKLToxMEQzOTAwMEFCN0Y4QUZEMEJDRjlFNDQ3RTNCQTAwRkNBMTY5OEZGNDEKLToxMEQzQTAwMDZBQzY1RkRBRjYzQjUyRDg3QTEyNzA0MEJGM0M0QTlGOTkKLToxMEQzQjAwMENCMUY1OUVFMDEzRjVBRkZGNTZBRkMwRTA4QTlDQjYxNUQKLToxMEQzQzAwMDBFRDc0QzEyRjczRTBGQzZDQjVGRTUwMjNCNzUyQjQxRTMKLToxMEQzRDAwMDdCQTZGMEVDQkI3N0U2ODExRDZENjRGNjgzMTY4RUZEQUYKLToxMEQzRTAwMDFDOEU5RkZEOEM4RUMzRTQ4MzhFRDlDRjc0QzY3NDNEOTIKLToxMEQzRjAwMDJFRTQ3Q0ZDQTJDNEVDNTdGQUI3MjQ5M0YyRUQ0MjUwMjEKLToxMEQ0MDAwMEZDRjk1REVGMTc2QUUwMTBFM0RGQ0JDNzc3RjA3RDc1QkQKLToxMEQ0MTAwMEVDNzUxREQyRTNEQ0YyRUFFMUE3RkI3NTg3RTdDQ0YyRkQKLToxMEQ0MjAwMDg2MDExNUZBQUVGMkRDRjU4QjhFQkE2OUJGOUEzRDRFRDUKLToxMEQ0MzAwMERDMjc4QUY3MzUzQjVGNEVCQjhCQkVCRkIwNDNGMTgyMjIKLToxMEQ0NDAwMEU5NUEzM0ZEOTk0NzQ2NDNCQjlEQkEzMEMwMEJGNTNFQzAKLToxMEQ0NTAwMDNBREYwQkUxNTc5MkEwREREQzRERjY2MUJBMzgzQUNDRTkKLToxMEQ0NjAwMDVCN0ZFRjgwOEEzODc5Rjg1REQ3ODM1OEJGMzU3QzdGNDIKLToxMEQ0NzAwMEZCQzJDODhFRjE5OUMwREZFQjI1MkYzNDVCMThCRTZENUYKLToxMEQ0ODAwMENBMkQ2MEFCNkNEMjc5RkJEMUZBNTI4NUY4NzVDMzcwQTYKLToxMEQ0OTAwMEVCM0QxNTlFMzU3QjlFM0I5QTQxRUJFQjBGOEUyODg1MkQKLToxMEQ0QTAwMDc5QUQ5MUZEMzcwRjA2RkVERkEyNDczRjk2MTYyRjlGRkQKLToxMEQ0QjAwMDcwN0FEM0ZFMTE5OUY2NUY3M0JCQjUzQTY0QzU3MThGNkMKLToxMEQ0QzAwMDQwRjk3MEUxMzYxREY4RDk5M0NFNTJGOUM0REU5Rjk0MkQKLToxMEQ0RDAwMEU5OUEzQ0RCQkU3MjA4RjgxMzBGRThBRDJEQzBFNzA3RjAKLToxMEQ0RTAwMDEyMTkxRDgyQkI3NTI4RTc0OTg0Q0Q2MzM0RjcxQjJGQzEKLToxMEQ0RjAwMEZDNTM5QjQxQTFDRkIzNjc1NzI0OTVCMTc1ODRGMjA1QzYKLToxMEQ1MDAwMDg0QjI4M0NFQUZGQUE5QzFCOEVFRTZBRDU3QUYxM0QxNUUKLToxMEQ1MTAwMDRFQzAzQjNGQTRBRUQ3RjI0NzRBQUE1ODU3QTQzMDlFMEMKLToxMEQ1MjAwMENGQjRFRDUyMjcwNjBEQjBBRTZBOTY1Mjc5MUM2N0ZGNTQKLToxMEQ1MzAwMEQ0OUM2RTM1ODBEREE0RkQwRTU4ODA0NEQwNTU4N0ZDMDgKLToxMEQ1NDAwMDQ5M0MzODVGMzM5QjJGMzU1OTRENzRCRUU3RTA1RkNDQzMKLToxMEQ1NTAwMEVGMkRDMUJFN0M4MTg0NTMyNDBCMDc5MjBBMEZDNUU3Q0YKLToxMEQ1NjAwMEMyQzlBNDEyOUUwN0E0QzgyMzNBMkVDRkQwRkZCRTNCNDcKLToxMEQ1NzAwMDAxRTVEOTA1NUJGNDk5RkYwNEZFREI5NUVEMEREMkFBMTgKLToxMEQ1ODAwMDBDRUU5N0JCRTA4OTI0QTVEMEU3NjU1ODE3QzA3RjM2MUQKLToxMEQ1OTAwMDU2NUVEMDRFRTUzOTVEREZFNzJGMUE1MEFFMzc4NjVGMTUKLToxMEQ1QTAwMDRFMDI3QTVENzhENjJDQ0I5NDJFRTdGN0E0OTY4MzNGNzMKLToxMEQ1QjAwMEU3NDJGODM3NDkzMEFGNzNFMUQ0NzJGMENCRjUyNjZGMEMKLToxMEQ1QzAwMEI0NzI0QUU4RjNGN0UxOUZBM0E4OUQ5NkVBMUI5NjBBNzYKLToxMEQ1RDAwMEZCOURFNjU0MzBDNjQ5N0E2QTQzNzE0MzBGRUI1RkY0MTIKLToxMEQ1RTAwMDczMTgxQThBM0QyMDM3QkU2RkY1QzJGQUJDMjFENUMzMjUKLToxMEQ1RjAwMEY0ODZDNEM2ODMzRjFGQURGRkU0NThFQTM2QTBGRkIxRUUKLToxMEQ2MDAwMDQzMDVDOUEwRTczRjIxOUU2NDkwQkZCNzM5RkRFNUE5NTYKLToxMEQ2MTAwMEI0QkRBQkJDQzNBNzAzRkZERjA0RTI2REEyN0QzRUQwNjcKLToxMEQ2MjAwMDc5RUZCMzUxM0NDRjI2NTRFRkMwQjMyNDYwNDA3RjQ5MUIKLToxMEQ2MzAwMEIzMTNFMTlBQTU5MDg4NDJGOTc0MTZFOEM1MjE1ODQ2QkIKLToxMEQ2NDAwMDNDQ0ZEQTI0ODU5QTI4MUNCM0Q3QUFFNzM5QjdDREQ4QkUKLToxMEQ2NTAwMDQ1NUZGQURGN0M0MjA1MjMyQ0EwNEQ3MUVERThGOEYzMUQKLToxMEQ2NjAwMDQxRkY1MUZDMkQzMDkxNDgwMjFENzdDMTc2NzVCRjg1NzEKLToxMEQ2NzAwMDI0ODJGMEQ0RUNGQURBRDgxMzFFRkZDMkYxNzg5QkQzREYKLToxMEQ2ODAwMDc3NTdBQTRBN0VFOTUxN0UyRDI0RkVFQkUxQkIwQkI5MDgKLToxMEQ2OTAwMDlFOUQ2MzNDODQ3MEQ0M0ZGMEMwODBEOUQ0NkVCOEJDRUEKLToxMEQ2QTAwMEY0QzEwMUIzNTNDMTBGQzhGQTkxRjUxMkYyREZDMjBBRjcKLToxMEQ2QjAwMDEyQzlBNjcwMkQ2Qzk3MjI4M0MxMEU3ODkzRDE0NzhDMjYKLToxMEQ2QzAwMDRGQjZCMDc2Nzc3MjNCNjUwRUM1MDdFOEZERDFCQkE0QjcKLToxMEQ2RDAwMDYwMjJEREM3Q0MzMUQxMkQxOEM4MEYzRTJGQTg0RkE2MzAKLToxMEQ2RTAwMEU1NkFEMjhBRjNBOTI1NTE4NEUzN0U0RTNGODg0ODAxM0EKLToxMEQ2RjAwMDNFRkZGMjI2QTNEQkU4RUFBRDNBMDBFQUQ4QTE1MjhDNUQKLToxMEQ3MDAwMENCN0Q0QUJDNDgzRjZBNEYxMDczNEE3N0ZFMDA3Q0ZCRDIKLToxMEQ3MTAwMEUyRjA1M0JENDk1RDI2REJFM0NBRjk4MDRGNUE4RUMzNjAKLToxMEQ3MjAwMDczRERERUFGOERCRTFFRjBGQjQ0QTczRTA5MEQ5ODM0QkQKLToxMEQ3MzAwMDk4NzRCMzU3REZFM0Y4N0ZFMkI2Qjk2RTU4RkY4RjgyNzMKLToxMEQ3NDAwMEZEOTZDMTA3MTgwOUYyOTIwODdGNDRDNDQ0QzdCNzBDN0MKLToxMEQ3NTAwMDI3MkFGRjA0QjU4QkIwRENGNkY4NkIzN0FEQ0YyMjY0MTcKLToxMEQ3NjAwMDlEM0U4MDdFRkU1OTNBRkY1MTA4NDk3REU2MENBQzA3OEMKLToxMEQ3NzAwMEJBQ0U5MjdEMzkwQUNBMDE1RjAxRUU1Mzk3MzI3QTNDRTQKLToxMEQ3ODAwMDM5QUM2MTQwNDMwRkZCNTMwMUZGM0EyOTFDOTE0MTFFMDQKLToxMEQ3OTAwMEVDNjdGQTNEQjEyNEE2MEZDNEFEQUY1RjcyRjk5NjdDNzkKLToxMEQ3QTAwMDM4N0EzNDEzRjhFNjM5MDlGREU5MUIyNEQyMkM1MTNDQjAKLToxMEQ3QjAwMEJCMjg1OTQwMEY2QzkwREUzRjBBN0E2M0MzNEQxRUQyREUKLToxMEQ3QzAwMDQ0RUI0QkY2NEU1QUY0MEFFRTcxMkQ1RTg4NEZENEVFQzAKLToxMEQ3RDAwMDJERDNENTVBNzFGRUNDQ0U0QzY4RDgyQUQzRkFGNDdCMUYKLToxMEQ3RTAwMDBBODdDMUZBQTBGM0JFNjczMjdERkYwMkE3QjdEQkNBODIKLToxMEQ3RjAwMEY4QzFCNTIyOThCNzE4RkNBOTg3RkQ4QjVFODE3NTNERUQKLToxMEQ4MDAwMEQ4ODI3RUFCNzQ4QUFCQzQxNDdDQjY4MEZERTgyMjhEQ0UKLToxMEQ4MTAwMDEyQjQ1QkU1OTQ5MDFFQUJBQUM4QjQ1RjE2MjFENzI4NUEKLToxMEQ4MjAwMEM5MjlFQzc5OTIzRTI1ODUzNDgzMUYzNjVEQTFGNjI4RkYKLToxMEQ4MzAwMDdCREYwQ0RGNzkyMjg5QzFFNTk0NzVGNzRDMDI3Qjc4OTgKLToxMEQ4NDAwMDE4MkJBNzJDOTM3Q0RCOTBGOTFGNDM3Q0E1MUI0OTI1NDMKLToxMEQ4NTAwMENDMUJERTgzRkQ0Q0MxRjBFREMxRkExMEMyOUQzRUI2N0IKLToxMEQ4NjAwMEExMThFMDQ4RUZDMzlFMEU0MzI0MEJDNjM5MkVGOEE0M0UKLToxMEQ4NzAwMEREMkQ4MzlDNUVDMkY1RUQ5MjNENjVFOTI5QjRGRkYxOTMKLToxMEQ4ODAwMDBCMjYwNUU0RTc3MTk3QjBGRjIyNTZCMEZGNDhERjQyNTAKLToxMEQ4OTAwMEQ2OUVFQkI1MjVDNTYzRDM4MUVGMUQzOUVBNzY5N0Y1QTIKLToxMEQ4QTAwMEJFRTRFMUEwMUY0RUU4MzA0RUYzOTlENTk3NkNBN0VEOEEKLToxMEQ4QjAwMEFFMzVCMDc5NjhFOTdGOTZEM0I1RkU4QTQ0NDI3MUZCRjQKLToxMEQ4QzAwMEZERkE2OTlGQTM1RDVEN0Y0NTUxQkRCRkIwREM0NDQyNTkKLToxMEQ4RDAwMDcxRkJGRDlBRUFDM0UzQTE1RDJERTk1ODA1RkM1ODFCRDUKLToxMEQ4RTAwMDRFMjBBMUI4RjU3MUFEQTVFN0VGOEE3NTUxN0Y0NTQ3ODgKLToxMEQ4RjAwMDgyQzM5MUVEQjNDMDJGNzk1QzFGNUIzNTA3RjhGMEEwQjAKLToxMEQ5MDAwMDg0RkVBMzdBQkE4RjBFQzZDMzc1MjU5NTA0NTM3QjgyMTUKLToxMEQ5MTAwMDMzNERGRDlFQ0U0NzU1REVGNzA1QjYyMzIzQTM0OUYwRDAKLToxMEQ5MjAwMDlENEJCNjY4OTI5RENGMEZEQTA5N0Q3NzM5MjQwN0Y1QjQKLToxMEQ5MzAwMDQzMzEyRUM4RjQxRUY4NzVBQ0NDQUU5RDA0RjQ1NTYyOEMKLToxMEQ5NDAwMDQ5OTMxM0JCQzYxNUY1MzA1RTRBREMzQzJGNEQzMzkwMkUKLToxMEQ5NTAwMDA4RDIyNTg2REYwNUJDMDVGQjEzQjJCMUZENjM4MzA3NDIKLToxMEQ5NjAwMEY0N0ZGQjIxQzQ5QkUwOTc3OEZDMDVFM0UzNDQ0RDFENjUKLToxMEQ5NzAwMDExOTlDQThBN0M4NzZENEREMTAwQ0E3QTg3ODU1QzQ4MjcKLToxMEQ5ODAwMDU5MDM3RUM5MzQ5REFDOTIxMzA5MjU5RDcyMDNDNUQ0RjkKLToxMEQ5OTAwMDEzMTBCNTQyMzk5M0JBQTY2MjRDN0M5OUI1RUZFQUVGMDEKLToxMEQ5QTAwMDk4MDA3RUNGOTIyMkQ2QkZDOEUxRkNBRjE1N0RFMTdEMDUKLToxMEQ5QjAwMDJCOTNCQjRBMkNDNzlGMTg1NzM2NjlDQTU2NUExRTFDNTAKLToxMEQ5QzAwMDU3QjY2OUVBMUQ5QTdBOTdBNjlDQzVEQTVGNDg4Q0U0MzcKLToxMEQ5RDAwMEU4QkM1NERGM0JEQzEzMTQyQTJGMkZCODIzMzNFODBFQTYKLToxMEQ5RTAwMDk2QUM2RENBOUM1MDQxRTU1ODZEMDlEM0M3NzVFRDkyNTAKLToxMEQ5RjAwMDE3N0Q3NTFDN0Y3NTVFNjYyNzVBQkQ1MUMzQUMyMkMwNkEKLToxMERBMDAwMDQzQzc1MTkwMkIzNUZCMjQ5QjQ0RDc4MTM1QkMyNzgyREIKLToxMERBMTAwMDY1RThFNzg5RUIxNzk2QjA1RjRERjg3REVDRDdFQkY4M0EKLToxMERBMjAwMDg1MzJBRUYzMzU4NUE3NThCQkYwODdBOEY3NTczNTU3MzEKLToxMERBMzAwMDYxM0M1REM0OEI3NUM0RUZDQjk0QkFFMkM1NDJCRTVFNTcKLToxMERBNDAwMDcyRkI1RTk2MTk1RkRCRTJGNzRGRjUzMDZFOUM5RjQ2RTYKLToxMERBNTAwMEI0N0Y2NzcwRkIxRkMwQUM0ODU4RjI3MTIzRDhBRjdGMEEKLToxMERBNjAwMEFBRkQ3MDA0RDg3M0VGNDA5MzUxMjBBRjQzMDNFMEJCOEQKLToxMERBNzAwMDFCNDk2MDAwRThDOUVGRDdGNjNCMjREMzc2RUZFOUEzNTIKLToxMERBODAwMDlCMjEyNjc2OUZBMzE4RjFGNzVFNjIzNDVCQTIzMjY2NzMKLToxMERBOTAwMDY5REJCNUFDRUM4QzZFMDY3Q0ZFQjY2RDBDMkI2NzQ3NzMKLToxMERBQTAwMEIzNjU1QTVFRTY5OEM3Q0FGREEyOUJBMUJDQkQ2REYyRTQKLToxMERBQjAwMDA0ODVFMkZCQkRDMUQxNkMxREVEOUYxRjlDMzJBMTgyOEMKLToxMERBQzAwMEQ2M0Y2REVCNzkzREQ3M0E5ODFDMTFGMEZENTdCRUFGQUMKLToxMERBRDAwMERBMDFGM0E5NjFGQTY3MzNCNTM3NEQ1NDVFQ0U1ODcwNTkKLToxMERBRTAwMDZFRjdEMzE0MEYzMzdFOTg4MDcyRUNFOTBCNTMyNjMwMTcKLToxMERBRjAwMDdCM0NFODU3NEFDMURGQ0FGRTUwM0ZBMjlDNTdEMDNFNEMKLToxMERCMDAwMDcxODM0RTRDRTlBMjQ3NjI0RTg3MDdGNUM3QzA4NjNEMzgKLToxMERCMTAwMDYwNjdBNENGMjg0MkZERTE0REY1RkQwRUJFMkI5RUY3QjgKLToxMERCMjAwMDY3QjBFN0VGMUMzNjI2Qjc3NTMyQzY5RkQzMUY0QzQ0NEIKLToxMERCMzAwMDdCRUM1MTMzOUIwRjVEMzc0ODVGMkJBN0M3MEEwN0YzNzgKLToxMERCNDAwMDRCQUY3MDMwM0ZFQUY0RDQ3MTM4Q0VEQjkyNkY4Mzg5RUIKLToxMERCNTAwMEUyRkQ2RDNEMDk5QTQxQ0VDRUI3QTBGRDdDRDc1NjJBOTUKLToxMERCNjAwMDM3OTJDMThGQ0ZFMDZFN0JDQzFEODJGOEY5NUQxMkYxNDgKLToxMERCNzAwMDgzNUMxMUYyQTNDREVFNzNBN0M0RUQ0M0RBOEE2OUQ5QjEKLToxMERCODAwMERBQjVFRjZDOUJFNDczNUIxQ0YwNEM5MzIxQ0UyMkU0N0UKLToxMERCOTAwMDUyNUIxRUVCMjdGNDUxN0ExM0ZCNEVGQUEzMDNCNkMxNzYKLToxMERCQTAwMDNDMTIxNEU2MkY5QTMzQUQ2MDVCMjNEQTAzOTM3RkU3RDAKLToxMERCQjAwMDAwN0JEOUU3NzM4M0RGRTFGNEZDN0MxOUZDNDg4MjNFRUIKLToxMERCQzAwMEU3RjM3RDlCQTBGRTRFRUU4NzE3NzQxMkY0RkMxRDlGQjkKLToxMERCRDAwMEY3MkMxREI1MjdFODdDOEYzQjAzMzgxRUI1MkY4NjcwQzgKLToxMERCRTAwMDdGMTVEQTE3QkYwM0REMUU4NzVGQTI0NDQ3QzBGQkZGMjYKLToxMERCRjAwMDhGRjA3NDA4RThGRUFGRTJBOTc2Mjk5NTE3RjI1NUM4QjAKLToxMERDMDAwMDBCOEVCRjc1NTI0NDlGQ0VFNDA1RUU5RkUxM0RFODlEMkIKLToxMERDMTAwMENEQTk4MTNGQzBGOEUyRkIzMzFFQUM0NTdCNTJDMDk1RDUKLToxMERDMjAwMDcwRkYwQjk1Nzc5MEVFRUI0QzZCRUZGRDE5RTgxNTY3RTUKLToxMERDMzAwMDk3N0E4NURGOTE3RkU3QkRCNzREMTg2Nzc4Q0YxMDQ2OUIKLToxMERDNDAwMEI5RjkxRURERkYzNDgyN0NFMTcxRjJEMjFGMkUzQzBFNDkKLToxMERDNTAwMEZCM0YzMUVFMzhBNzBFQzc1QjJERjlEQzMwQkZENTk0MDIKLToxMERDNjAwMEVFMjY4MDdGOTIwMUVEN0ZBMTU3REJFQ0ExMEQ5MEE3RkUKLToxMERDNzAwMEQwNzY1QjE2RTYyOTVDMjYyQzFGMjRCODM0MDFEQjVEQzgKLToxMERDODAwMDJCOUYyMkUwQzc4QzhEQjI2MTlDOUFGMjA5RDZCNzREQ0EKLToxMERDOTAwMDJGQzA3QzExQ0EwRjQxMzNENDUzN0U4MkJDQkFCNjYyMDYKLToxMERDQTAwMDNBMjExODZGRkE0MEFDODdGRDMxRUU2QkE3OUI3MEJDMzAKLToxMERDQjAwMDFFRjg4NEY5ODVGQkIzN0M4OEI2M0NDRTg3RjNGMzkxREMKLToxMERDQzAwMDBGRDM5QTk4RkY5MTI4QkUyMTkzRTJGNDdDOUU5M0Y5OUEKLToxMERDRDAwMDdEMTI0QUEyQ0ZGRDJGRTBGOUI1NjZCNDY3NDFDNzYyNTUKLToxMERDRTAwMDBDQTczNTFEQzdBM0Y0QjczODk5MUYwMEY5NkNGNjIzQUMKLToxMERDRjAwMDg5M0NGRkNDNUIwQTc4N0QyODkxRjFFNTI2MzM4QjJGOTgKLToxMEREMDAwMDZEQTJGNjMzQ0E0NUNFQkYyMkVGMkRDMEVEQkM2OEI1N0IKLToxMEREMTAwMDlDMDRGNjgyQ0JEOUU5NUZGMEMxN0UxRkZEREJCNDdFQTcKLToxMEREMjAwMDY2NTQ3QTFGRjY2QjMzODNCQTg4MTFGNjVGMkRFMzdDNTUKLToxMEREMzAwMEQxQjhGRDBCRkM0MTdDRUUxRTJFNTdDOTdBODI3RUJGMDYKLToxMERENDAwMDdCQTA1RjEyOEM2RjQ5ODI3OEU0M0REMDFGRkNBQkNCODcKLToxMERENTAwMEM2QTlFMjZFMDM5RDZDN0QwQkY4QjQ3MjdGQTA5M0M5RDcKLToxMERENjAwMDQ5MEFCNzJGRkUzQjYyN0NFRDc4NzRGRjM5QzhFOTQ0NUQKLToxMERENzAwMDNDNDc5MjYxMUZEMUE4NDMzQTZBRTE4Q0FFNjc3RUVBQzQKLToxMEREODAwMEU4RkE1Q0U0M0IzMTVFNkY3MEZFNTkxN0JCNTdBMjdBMkMKLToxMEREOTAwMDcwRUU1OEI2MkYxN0ZCOUUzOTdDREY0Qzk2QTlGNzc1QUQKLToxMEREQTAwMEUwNTdFOTJDRUJCQTk3QjVGQjQ0ODhBN0FCREIzM0JCNTQKLToxMEREQjAwMDI1QTEyODY2QzAzODhCNDc1MkMxMkZGMEQ1MUIxRTI2REYKLToxMEREQzAwMDdENDdCQzA5QkRGN0E0OTlDQUQzMTREODdFNEJDOEI3MDgKLToxMERERDAwMEVCMUY0ODQwM0RFNjMwODQwNjAwNUZEREVERjQ2MEJCOUMKLToxMERERTAwMDhEOTBENzgyN0E5NUVEOTczRjNEMkVGQzFDRUE3RDcyOEYKLToxMERERjAwMEJEMjVCNjA1RjA1NTZGNjFFQkU4RDJDMTQ0NUMwN0E0QzAKLToxMERFMDAwMDZGNzQwNkU0ODU1RDNFNjAyNEMwQkY3NTUyQjQwMEQ2RDEKLToxMERFMTAwMEY1MjVDOTU3ODVFRDFBMTMzQ0IwOUUzRTkwM0IxMERGQTcKLToxMERFMjAwMEY1ODA0MTBBNTc3REYwRUY5ODhGNTRCRjRGQkQ2RkJFMEMKLToxMERFMzAwMDQ0RkZBQkE2RkM3RTQ5OEU5NkMyMzg0MjFFQzBGQTQ3MEMKLToxMERFNDAwMEJCQTg5QUM1NjlFQTY0MTI4NDdERDVCNUYyQ0NGOUE4NUQKLToxMERFNTAwMEZGQTc2NzkwNkRGOEZFRkQwMkQ4NDcwOTM5NEZEQjFEMUIKLToxMERFNjAwMDkxNTIxOERCQzA3QUE5RTFGOEFCOTM0RjYxQkIxQUM4OTUKLToxMERFNzAwMDJCMDIzQ0MyRkUwQUZDNjE1MDE5RTdDN0FENUI3QjFFNUEKLToxMERFODAwMEYzOUFFQUY2QUFFOTVDRDNDNTA3RDJENzEyRjQ4QkUzN0EKLToxMERFOTAwMDBCNUNDNzQxQTQxQkRBRDlCMEVFMkI1ODlDMzk5MTk3ODMKLToxMERFQTAwMDEzMkEzQjMwQ0ZBOTlFRkIzQjlDODdBM0UzNDE5RTI0RDIKLToxMERFQjAwMDk2ODRDOTRDRkFBQzNGQ0JFQzhDRDFFRDVCNUY4NjdEOTAKLToxMERFQzAwMEI0QkRCMjIzMUJEOEJGOUVGQjAzMDU5RDA1OUNBM0RBRkUKLToxMERFRDAwMDFGNDNGRjg2QjA0RkUyRjY5OTAzMjZBQkZDMEMyQkIwMzQKLToxMERFRTAwMDFGRUM1QkUxN0I1MTc4RTUwNkYyMzNCREI2OEVFQkI1RjYKLToxMERFRjAwMDA0RDgwMDgzRkU2QkVEOEZGQTBGRjQxM0M4MjVCMUVGNDEKLToxMERGMDAwMDA1MzkwNUYyRTEzMzY3Rjk0RjQxOEVBRDREMkJERkM2ODAKLToxMERGMTAwMEU0MTlFNTJGQjBFNzYxQjMzNEFBNzczRjlFQzA4RjY4NUMKLToxMERGMjAwMDA3RkJERjZGRjJEM0ZEOTJGM0FCQzNDMEU1MkU2MTdFM0EKLToxMERGMzAwMEI5QzVBRjM5ODU1RjBFRTM2RjhCMjU0RjNBRjBFQjE5MEEKLToxMERGNDAwMDVEMDBGRDZGRjM0ODEwRkQ0MkYzQzFFRjQ1OUYzNTdDNDYKLToxMERGNTAwMDlEQ0ZFNUZFQTRCOURDOEYwNDdFRERGODM4MjFGODU3QUIKLToxMERGNjAwMEUzQ0IwQjA4RTM1RkIyQzNEODk1M0YwMzdFOUYwQTEyNTEKLToxMERGNzAwMDQ5QTRFM0Q1ODI1RjBBOUU2MTc1QkYzQTEyNjM3Q0JGRjQKLToxMERGODAwMEVGNkJBMzJBMEVEOUM2RTY3RDBGQTdCRkJEMjJBNDAzNUYKLToxMERGOTAwMEY5QjBDMUNDRkM1MTQyNkU4QzVFQzZGQzU2QzlDMzdDNDQKLToxMERGQTAwMDc5MkI4MUNGNUZEM0EzM0ZFMzdGNzNCQTA5M0NEREU2RDIKLToxMERGQjAwMDJDREYwNUY4QjdDMDNFMEREQUFEMzRBMkJDM0M0REY1MDAKLToxMERGQzAwMEYwMUVFRTQ3OTkwQ0ZCQ0ZFNTgxMDE5MEZGNEQxNDVCRUQKLToxMERGRDAwMDRFRkNGRTU0M0NENzFDMzA1NzAzRkZGQzg5RUIzMUYxNUIKLToxMERGRTAwMEZFMzFBNzlFRjlFMTU3MzBGRThEMzUyNkEwQkQ0REM1MDcKLToxMERGRjAwMEM2MTBFMEFGRDI3Q0ExMEZDOTEwRjA2QkJEQUY2NzdFMzkKLToxMEUwMDAwMEUwQkFEQkFEMDExODJGMkEzMzM5NzM4RUNCQjM3MzRFRDAKLToxMEUwMTAwMDk2N0YyN0NBOURGQjNCQ0UzRjIyQkUwNzdFOUU3OEZGQTAKLToxMEUwMjAwMEZBQzc5REVEMUZFMzc2MjRDMUY5QUU5QkNGRjNCNzNCNTIKLToxMEUwMzAwMEY5NTg0Njc5OTQ1MEU0NDdCOTdCQUQ1QzhFRjIyOEY2RTYKLToxMEUwNDAwMDkxRDUwMzc4QTkzQzVGMzMxRkU2RjFDOTM0MEI4MTM4QzEKLToxMEUwNTAwMERCNkNFRUVGOTVEMkVDMDg4N0YwRUY3RTVCRkNBQjcyRTkKLToxMEUwNjAwMENEMDA5NDkzQTIzREM0NzJBMUJGRDY0RjdDODBDQkIxQUEKLToxMEUwNzAwMDAzODRDMTFCNkMzNjMyQkYzQzg3RkZDMEQ5ODEyMUUwQ0QKLToxMEUwODAwMDYzNkFENzA2NDFDRUM1RjY5ODk5QkVBMzc2MjhDOEQ3NEQKLToxMEUwOTAwMDAzN0JGQjg3NjAzRUVGRUI5OUJEMTBBNEYyOTdGNTBGNzEKLToxMEUwQTAwMDZDMDAzRkM4ODE1RjNBQkQ5MEQ3NTNCRkUwREMxMEIwMzEKLToxMEUwQjAwMDFGMEY5Q0ZERDlBRjdFMEJFRjBGMUFCREIwREYzQkMwMjkKLToxMEUwQzAwMEZERjIzNTg2NDgwMURBQ0IzQzlGQjEyNjI5NTIwMDdFMEQKLToxMEUwRDAwMDlGMTczOUJENkEyQ0I0NENERjU3OTgwMkQ5NjkyM0JBMEYKLToxMEUwRTAwMEUyNjdEMDBGREU5RjBBMzFCQkZDMTQ2MTdDMTA1Q0NCNzEKLToxMEUwRjAwMEUyOUMxNEJGNkU4MDIzQjYzQTFERTM2RjMwMkZBMEMzOUQKLToxMEUxMDAwMDA3MDcwNzIzRENFQkY0QkNGREMzQ0M3RTNCQzVDQkE3RTQKLToxMEUxMTAwMEY2MTc2MzdFREY2NUJGMDFGMzcxRUIxRjY1RjZFMjJDMzYKLToxMEUxMjAwMEQ5QjM2NTI5QzhDQTk3MTJEMENGMzhBN0VEMDRDNjQzMjIKLToxMEUxMzAwMEVBMUY5OTM3MTFFQUVCMTcyQ0ZCMUVGOTg2MzgwMUU4MjQKLToxMEUxNDAwMDk1NzhGRkY2MjUxMkNCQzE3RDcwNzU3RTM4NDJCRjdCNzYKLToxMEUxNTAwMEE5N0Q4MDk3ODVGQjVDMTg1Q0FBRTM3OTlGQTcyOTdFM0YKLToxMEUxNjAwMDAxRUVEODQxM0RFMkZGNkFDNzQ3ODc2MTI5RDM2RkU4RDYKLToxMEUxNzAwMDBGOEY4RkM3QTAzRTUwQzc2N0JFQUQ3QzQ5MUYyRDc4NUIKLToxMEUxODAwMDgwN0UzRjk4MTJCODM1Q0RDOUM0MUREMEJERkUyNTM3NUQKLToxMEUxOTAwMENBQkIwRjFFRkUyMjA3RUQ4OTU2MTY0RjM4QURGN0NEQ0MKLToxMEUxQTAwMDgwNzU2MkFGODgxODY2QzZEOTVGRjNEMkY4QkVDM0M4NUYKLToxMEUxQjAwMEVENDYyQTA3RTNEN0JEQTgyRjJENTdBRjMzRjE5QzlCMUYKLToxMEUxQzAwMEM2RUNDOTQ0MUVGRkVGNUUyRkYyNUVBNzE4NDE3RjMyRjYKLToxMEUxRDAwMDk3MTI4Q0VCQzE3MTczNzk1QzZFRjREOUQ4MjFDOEEzMDYKLToxMEUxRTAwMEFBMDkxNzYzREMyRjc3NTkwNEQ3MjVDNTc3MDRFQ0ZGRkMKLToxMEUxRjAwMEQzMUIxMjk5M0NBMUQzODQ3MUU2OEUyNDY4QjdDRUQ1ODcKLToxMEUyMDAwMEIxN0M4NkI5NDY2QTA3MzMzRDhFRURDRjZDNDg0NzNDRkEKLToxMEUyMTAwMDk0QUU2MEY2NUZFQzM5MDlFNUEyODg0RjU2MTFENkZGM0YKLToxMEUyMjAwMDg1RTZGNzgzM0FEQUJFNkE4NzU0NEM0NTJCQTk2QTJFRjUKLToxMEUyMzAwMEMzN0M4NzA1OUJGMjkwRkVBM0I5RkM5RDY1RjQxNTZDMjkKLToxMEUyNDAwMDAwN0U3QjIxMTFGOThEN0UwRkVERUQxQUM4RTkxQTg2NEIKLToxMEUyNTAwMDcyQzkwMEZBQjA3QTg3NDRENjkwRjg3OEFBODYwRjQyM0QKLToxMEUyNjAwMEVBNzhDQ0U4MzA5M0RGQTAzNzQ4OUM5RDI2RjQxMEU4OEMKLToxMEUyNzAwMDBCQTJCMTFGRDU3QzExRTQ3MTJBNDY5RkM3MDFBRjIzQzEKLToxMEUyODAwMEJBRTQzRjYyRUMxQkY0MjBCNUEzREI2MDFEOTc5NkIzQTQKLToxMEUyOTAwMEY1MTZEQjIzMjE5RTZCNDkwMzhCMUY3MTNERDQwOTBGQkIKLToxMEUyQTAwMEQ3NjM2Nzc0NEM2RkNFMzUzRTg2Q0Y5RDY5NzkwOEM3QkEKLToxMEUyQjAwMDAyODhCMzYwREMyMDY2MDBCOUQ4MUI1RkVDRUM4NTJGQzgKLToxMEUyQzAwMDA0M0ZGQzhDQ0ZBM0U2MkM4OTVDNDdCRjU3QjM4QzQ0M0EKLToxMEUyRDAwMDZBODdCMDY3RTIxMEQ0Q0I0QzNGOUI5ODdFODZBN0U1NTcKLToxMEUyRTAwMDJBRjRCNDU2M0Y2QkY1QjE1NjBGQTcxQjk4QkUxNTdDQTgKLToxMEUyRjAwMDEwRUY5NzA3N0I2NEY0QjI5MDhFRjk1RkIzNkM5MEM3MTAKLToxMEUzMDAwMDI3RTgzMjNERDU3NzMwQzNEOTY1NkZENTlGMzQ5OTNDMjYKLToxMEUzMTAwMDQzQTFFQzI3Rjk1NkYwMkI5NTU1NjY4MURGOUFDQTZGMTkKLToxMEUzMjAwMDU4NzcwOTE0NEY1QkU5RkJDRERDMkUxRjkxQzVFNkVGNTIKLToxMEUzMzAwMEUyRjkzQTdBQzU0RjhBQUQ0MEE3MEVEQzQ3Qzc5QzA0ODQKLToxMEUzNDAwMEY3QjUwMkJGOUIxMzY5QkY2MUQwOEZBREM3Q0VGRTI2NjQKLToxMEUzNTAwMEQyNkM4OUVCNUY3RUMwOENGQUU0RjNGRDg5OTg1RjQyNTIKLToxMEUzNjAwMEY1NDNBRTlEOEU5N0Y2MEVCNUNGNjlGOUQyODE0NEQ0QjAKLToxMEUzNzAwMEVGOTdCOEJDNzcwODdGMDU1OTg1RjRGRDEzQTc3MzkwMTQKLToxMEUzODAwMDk0Njc4MkRGOTc0ODEzMzI0MTQ0MEFCQkIxRDZERTlCQzMKLToxMEUzOTAwMDlGOUVEN0U3NzVEQ0NFRjhDQzg4N0FGNjczN0JGNDNFODcKLToxMEUzQTAwMDI4NTM3ODMwMUZGODBGNUMyRUQ0RUYxRDVCRkMyMEU0NUYKLToxMEUzQjAwMDAxRjhBRDVFODZENTQwMzFEODBENDZERDkyREJDMTFGMzgKLToxMEUzQzAwMDM0NUVCNzJDRjYwMDlENDc2REI2MTVGMzhDMkI3MkRGQ0IKLToxMEUzRDAwMEZERTM3NDVBRkU2OEFGOUUxODgxRUU0RjRGNDk4RTQwQTAKLToxMEUzRTAwMDM3QzVFN0VBNDkzRkNGMEZFOTU1RTdEODE2RUU1MDk3MTIKLToxMEUzRjAwMDZCQzNFQTcyM0Q4OTNCRTc0NjUxQjBGNERERTJFQjhGMzcKLToxMEU0MDAwMEM0RjFDOTU3Njk4OThFMzM4MzA4QzgxNDJGRTQ0OTEzQUUKLToxMEU0MTAwMERERERDOTgxMUVFNEE1Nzg3RUIxREM3QkZEMTEzREU2MjIKLToxMEU0MjAwMDk5RTlEMzU5MUU4RDAxRUM5QTk5QzAwRjNERjQ2QjRGQjkKLToxMEU0MzAwMDYzNzY4REQxRDg3MDE2RjJENThEMkYxQUJEOERCNEQ3RDUKLToxMEU0NDAwMDg5QjQ0MDEyRjRBRjkzNjM0NzgxOUVDNkRDMEI0MzQwMEUKLToxMEU0NTAwMDBGOTZFN0ZFMDNFMzY3OUZGRjg4NzgwMTNGOUY5QkNCMDIKLToxMEU0NjAwMEQwQkVGOTdDODNEOTAzRkJCMkI2MUMyQkYzNTdCQzI0NzYKLToxMEU0NzAwMDg1MjQ2NkJGNEYxQzUxMEFGMTUyOUMwM0E5NUY3RkQzQ0MKLToxMEU0ODAwMDQ3RUM3MDA1MzFDOTQ4NUZCQTdCNzE4MTlDRjFFMTdFMzAKLToxMEU0OTAwMEVBQ0MyNDhCNkQwNUVENTdCRDlFRTlEQjFBRDI5MTA0QzEKLToxMEU0QTAwMDcyNjA0QTNBQTc5RjZFOTdDMTQ0RkY5OUQ3RUMxQkQwODAKLToxMEU0QjAwMDQ4RTE1REU4QjdFMEI5MUFFNTRCQzUwRkZDRjUxMDBDNzMKLToxMEU0QzAwMDE5NjdGRjBGNEM2N0YyQTBENjE0MzU5NEMxRjdGRjMxREUKLToxMEU0RDAwMEJCRDI5OURGRTVERjMyRTg5OTdGNEJEOTU3MUNDOUE0M0QKLToxMEU0RTAwMDVERTcyRDlEODVGQjlDQ0VGOEYzMDY5NkNGMzRFRjgxM0EKLToxMEU0RjAwMDJBN0NGRkYyMDYyM0NFRUZDQzQxMDlGOUZDQ0M2NjM2MkMKLToxMEU1MDAwMEZGNzlFQkNEMUVDOEJCQkVDMUNFRjZCM0YzNjhCRjlFOEMKLToxMEU1MTAwMEU3N0ZFMzQ3MzBBRjBGMzdEREVGMDVGRkZDODc4NDdERjIKLToxMEU1MjAwMDI3Njg2MzdFQTgwRjZEMkM0RTBFNkQ2MTlDMEZGN0Y2NjkKLToxMEU1MzAwMDQxM0JBNjdBRkRGQzg5OTg2N0I2NTlFNzA1M0I4MjFDRUEKLToxMEU1NDAwMDRDNDRGRkNFQkNDREY3RkU3NjE0Rjg4RjI2REY1OTAyN0YKLToxMEU1NTAwMDc4QjhDMUJFMjQwREZDMjVCNDlEM0ZDNEVDNjI5NkJGQzMKLToxMEU1NjAwMDlCMzJGMjE5NTg4NzM3N0MzOUI2RTMwNkIwOTczNkQzMTkKLToxMEU1NzAwMDc1OTJDN0YyRTNDMTRFM0ZCMkY5NDZCNDRCRTc0REIyRDQKLToxMEU1ODAwMEQ4NjE1RTlFNEQ0RjhGMDdGREYxRTFBNDBDMTlFN0IzRjIKLToxMEU1OTAwMDVCMjIzNkMwODM3RDY5MUFCQzlGMjcyOUZFOUVGOEU5NUQKLToxMEU1QTAwMEEzMzRFNjY3MkJDQkI1N0EyM0QwRUYwRjNBRTQxM0JBNDYKLToxMEU1QjAwMEFFNkUwN0ZENTlCQjU5OEY3NkVGOTFDOTZGRkY3MUJBRTcKLToxMEU1QzAwMEEzNkI1RENERDNCNURFM0UzQUNFRUVBOURGNzQ4QkUwMTIKLToxMEU1RDAwMDEzMTIyOTg1RkQxNEMzODk3NjdEMTk3Mzk3MTUwMDNDQTQKLToxMEU1RTAwMERBNzUzNjZGNDU0MzAxOEI1NzdEQjdGNTQ2MzZCMUY1ODEKLToxMEU1RjAwMDU2OTMyRTkxQUZFNUVGQjRERTdFOTBFRUJDRkFGNTQ2NzEKLToxMEU2MDAwMEIyNTI1NEZCQThFRTcyMkQ4OEVEODRCRkRGRTQyNUJFMjQKLToxMEU2MTAwMEE3QUQxOEQ3RjU0OUUwOTc0QjU3QjA3RTUzM0FEQkNGRkIKLToxMEU2MjAwMDI4N0Y1REJDRTM3NTU4MTdFOTgxOTUwMDQ3MkVGMTE1RTkKLToxMEU2MzAwMDAzMUY3OTYyQjY3MjM4MkI2NEU1NzYxQ0Q5QzRFQzY2ODgKLToxMEU2NDAwMEIwRUY4MURFRUI5Q0U0OTkzNTcxN0U4N0Y1RTlFQzNDMTcKLToxMEU2NTAwMDFCNURGRjhGQzAzODk3REVGQUM3NTFBMDRGNURDRTg1OTYKLToxMEU2NjAwMDIxMkNERUY5MTlDNjA3QURFRDJDQUU2Q0Y1QzYzMERFRjcKLToxMEU2NzAwMEFFNzdGODkxRkY4NDVDQUZGNzMyQkRBMzlERDc5RkQzRUYKLToxMEU2ODAwMEQ5Rjk4QjdBNDcwQ0M3MzlFMDYyRUI1MEY4REIzNzJFQUIKLToxMEU2OTAwMEI1QTA5Rjc0QTMyMzY0NjY3RTg1MjAwMUJEMzQ3MUE0NTgKLToxMEU2QTAwMDhFQzVDNUI4OUQ3NTBCRjczRjlBNEE1RTI2MTAwRjIzOUQKLToxMEU2QjAwMDYzNThERUQ3RUIyNTJGMkJBOUI0RkNEQjkxRTNCQzc4QTQKLToxMEU2QzAwMERFQUVFNEE5OTY3Qzk4RjcxODNEQUZFRjEzODQ3OUZGOEUKLToxMEU2RDAwMENFNTc4NkY1OEI1RDNBMEZBQ0VCODkyNTJDN0Y5MTU0OTQKLToxMEU2RTAwMDI3QTFCRkU0RjU5MjBGMUNCM0UzRTBGNzEzOTNDNzRBRTkKLToxMEU2RjAwMEY5NjQzMkRERTRDNEU3REI3RDZGOENEOTYzOERFM0FGNzEKLToxMEU3MDAwMDRGNUFBNTRBNjZFRjdBOTJBNzBFNjZGRTEwRDRDMzI1MkIKLToxMEU3MTAwMDZBN0MyQzc2MTlGMEJCNkJEM0NBRjYwMzlFNkZCODlFNDkKLToxMEU3MjAwMEQxRTNEQzZFNjMwOEU0REYzOTdFN0U0NThCQkY2M0U5QUQKLToxMEU3MzAwMERDQ0Y3QTc3QTEyQTNFRUYzMDg0NzM0MDNGOUU5N0Q0OTYKLToxMEU3NDAwMEZEMTZCNEU4MzAzRTNFQkY0NTIyMjFGQUJENzMzQjVGNjMKLToxMEU3NTAwMEM4MDEzOUZFRDFEMzJGRTRDQzhDODM0N0RCNEYzQ0RGOUIKLToxMEU3NjAwMDQ4NTdGQjAxQjU3RUREREVGQ0I5QTJEREU1RjUyNDYwOEUKLToxMEU3NzAwMEVBRDNENUZFNzJGNURGRDA5RjNCQjM5REZCODM3REJFMTAKLToxMEU3ODAwMEJFMEVEODA3RjFGNkRBRjFGRUNFRjk0M0RBMjdBMUJGQzMKLToxMEU3OTAwMDQzRjgzMzRGMUQ3QjBBMjIyNzlERjQzM0I3RTdDOUYxQjUKLToxMEU3QTAwMEY5OEFFMjM5OUFEMzZEMEFEMDhENEVDNURDQzJDQUJENTIKLToxMEU3QjAwMEQxQUJCN0Y1Rjg2NDNBODM0M0QwRUQ1NDRCOUY2NEMwQjYKLToxMEU3QzAwMEEzQTFDRUFBMTA3NjhFQUMxMEVDRjRDREM0RTI4NUY1RjAKLToxMEU3RDAwMDY0Qzg3MDU5NDE3RTg5NzNGODVGOThEOUQzNjFBMTRGOUQKLToxMEU3RTAwMDZBQUY2NTY3MTQ2MkJGRkI2NTNGRTZDNTdEMjFCN0UyOEUKLToxMEU3RjAwMDM5QzJGQjc1MEQ5ODZGRkQxNUZGNUU5NkNEQkY2NzJFNzQKLToxMEU4MDAwMEVFNEZDMjk4N0Y0RDVBRDRGODRENkI2MkZBMjM1NjY1OEQKLToxMEU4MTAwMDQwM0QyNUYwN0NFRENDRkI3MDlGREEwMzdERDYwM0RGMTUKLToxMEU4MjAwMDY0OEM2NEVGQUU3MUU1NzFCRjQ2MTRFMzA0RTY5MUM0RjUKLToxMEU4MzAwMDA2RkJGOUE2NTE0MTg0NDdEMEE3OUUzNTI3NTJCQjg0RDkKLToxMEU4NDAwMDc2MzJFNEI1MjRBNDYwM0MzNEM4OUZDNDlBNDIzQUUzQ0IKLToxMEU4NTAwMDAzMDk3QzVGNEIzNEYxMDAyQUI2ODJEMDRFQzAwOTYyQjYKLToxMEU4NjAwMDBDRjI2MzFFQjU4NzVCMEI0QTMwOUU4QUY2Mjc4QzBCMzEKLToxMEU4NzAwMEVGNjcxNjI5RTg0Rjg3NzY4NjYxREZDRTZGOUQ3Q0M5RUEKLToxMEU4ODAwMEYzMEMyNzhBRjdENTk2MUVFMzBGMTNFMUJDMEU2RDlGOUMKLToxMEU4OTAwMDRERjUyMEQ4N0ZDNEFCNTc5REQ3RDk0NEVENjZEODhGQUUKLToxMEU4QTAwMDg5RjhBRTRFMEUxN0JCNzAxRkQyMTEwNUZGODhBMUQ0OTgKLToxMEU4QjAwMEU0MDFCRDlBQTAwQjE3MDJEREI0RjE1RURBMkU4RkU1RkMKLToxMEU4QzAwMDE5NjREOTQxQUY4OEYzMzg3NTRCQzdGQTIxREZCREQzM0UKLToxMEU4RDAwMENFMzhDOEY2NDc3NTBGOTRFMUZCQjFFRENDN0Y1RURGMTMKLToxMEU4RTAwMDYyQzRGMzg0RjVGQjI0OEM1N0Q1RjkwRDIxMTNGQTMxNUEKLToxMEU4RjAwMDNDOEQ0MEFGMjBCNUMzNjBERkQ4NjY2N0Y5NTE2RDM3RjYKLToxMEU5MDAwMEQ5QkM0MTEyRUZCRjhFNkU3OTEwRkRENzU2OENEM0ZENjYKLToxMEU5MTAwMEIzRjFDQkNCODkxNDAxNDNFM0UyNTNDOTI2QTY0N0I4MzAKLToxMEU5MjAwMDdGM0I4REYzOTNBMEJGNThDRjIyREU5OTU4RTRDRjAzRUQKLToxMEU5MzAwMDhCRkJEN0VCNjZGRkM2RTJGQzJFNzkyMUQ3M0UwQzc5MjQKLToxMEU5NDAwMDFGQkRFNzg1MUNCRDA1RjI0NjRDNjBDREYzN0EwMDhCRjgKLToxMEU5NTAwMEVBQ0RDRUYzNzU2NjBGQzZCNTNBRUJFMTVFMDREMzNFNjEKLToxMEU5NjAwMDg5RjdGRkMxMkRFM0ZBNjJGRTI4M0Y1Rjc3REQ1QUM4QzEKLToxMEU5NzAwMDYzN0VENDRDNTRERjhCODc0RkQxOENBRkE3RTM1QjNERDQKLToxMEU5ODAwMEEyRkQzRDM3OEY1MzMwQkVDQkNCMkZGREQ4NDdFMTdGNjMKLToxMEU5OTAwMDU0QUYxRTBGNTk1MDlDMDczNDc1N0RBRjMyMzNFMUUxRkYKLToxMEU5QTAwMEI1NjNCQUY0MzdENUU3Q0I1RENFMkUzREZFRDBEQjEzOTEKLToxMEU5QjAwMDVCODc3QTYwN0Q3RDhBRjlCODQyMUZENzNCNTg5RTg4NzUKLToxMEU5QzAwMDU2NkVBRDcxNDlDMkZFMUQwRjJBNzZENUI0MkFCQzQ3REEKLToxMEU5RDAwMEEwMzNCRURCM0VDOTA3RjcyOTg4Rjg2RUZEMzIzRkU2NUIKLToxMEU5RTAwMEU1ODJGRTc3QTFGRUJGNzBFNjEwMDFGQkYyMUNEQUZGQTQKLToxMEU5RjAwMEY1NTcxNEU2MEZBMjc2ODQ0NEY5RDBENDVFODY3RTRGOTQKLToxMEVBMDAwMDQ4MzcwNUJEMjlFOEJGODBFQjI1QjBENTgxQkZFQjM3N0UKLToxMEVBMTAwMERERjFCNDBFRUM2NTk3RUY0OTFDOTdFRjAzQjVGMDg2NzYKLToxMEVBMjAwMDVEQ0M1RUFGMkYyQ0RGMDBGMjgwNkM5NzA4RThFRDM1RUYKLToxMEVBMzAwMDg1OUZBMDlENTFCNzdGREM4OEY4QkNGMkY5RkI5RTYwRjIKLToxMEVBNDAwMDc5QzkzQkY0M0RDRTNGRUNEMkExN0NBQkRCRkYxQ0ZBOTUKLToxMEVBNTAwMDMzQ0Y4NUQ4NzE5NjZBMjVCNDdBMzRGODU1QUE2NUIwNTMKLToxMEVBNjAwMEI0NDg0OUE4NkEzQUVBRkY2OTc0MUVFMDM3MDRCRDAzNTYKLToxMEVBNzAwMDc2Q0E4RTI5NDFDODczQUZBN0ZGMDFDQTM2RkFFN0EyNEEKLToxMEVBODAwMEJEQkY3MTlBQzkwQUYxOUFGQUMyOTk4QjcwM0REODJDMTAKLToxMEVBOTAwMDNFOThCRjE2Q0VDRUY4RjAwMzE2RjQzN0FFRDlBN0FGMjYKLToxMEVBQTAwMDA0QkJBOTk0REE0OUJGQTJGMDY2QTc0Q0E4RjQ1MkI5RjYKLToxMEVBQjAwMDk0QTlEQjUzRkMwMzJCQzRENTdCRDZDMzUzMzM5ODFFRDgKLToxMEVBQzAwMDZFOTZGQ0MxNUI0QjMwMEY5MkM0RTdFOUU0RUU2M0Y2NEYKLToxMEVBRDAwMEQ4QUIyRTY2QkY4OUY3QUY0MkUyMjNDNUU3OTg2MEM3N0YKLToxMEVBRTAwMDU4RTBCOTk3OTQ2ODAyRDhDNUY1QzRGNzMxRUM3Mzg5M0EKLToxMEVBRjAwMERGRUE4MTcxRTAyNjA2QjBCMzFDQ0IzREU4Q0YzNTM5QTMKLToxMEVCMDAwMEEyM0YxRThBNzY5MzgyRkIwQ0IxOEZCOEI0OUZGOUJGRTcKLToxMEVCMTAwMDQ2QjkwMzZGMDIxRDRCNzVEMUM3NkYwNUJDRkQ5ODlEQUIKLToxMEVCMjAwMEYzMjUwQTkzMzczOTUzQUNDM0MwNUY2NTc2NDQxRkFGRjIKLToxMEVCMzAwMEY0NjA3RTBERkExRjkyQUY2QjQ2M0FCQ0U0MjAzNkMwRkIKLToxMEVCNDAwMENGRDg2MDk1MjJDNUU5MTkyMTM3QzY3NjlFQTc3MUEwNTYKLToxMEVCNTAwMDlGQjQ5QzhCOTc3RTk0NUE2NzRDQzhBMkNENUZBNzc2RDIKLToxMEVCNjAwMEQ5MDVDN0ZFMzE1NTgxOTdDMjVFOTA0RDAxRENDRjU0NjcKLToxMEVCNzAwMDRDQTNGQjQzRTBDQjU1QjFBMzMyRjhFNTFEMUQ2ODJGMzQKLToxMEVCODAwMEQ2ODYyNUZDNEU2REUxMkYzMUZGNkQyMUNGQjNFQUNDNDcKLToxMEVCOTAwMDc3NTJBMjk4RkY3NUM5OTVDMEY1NjMzM0UzNEJEMjgxRDQKLToxMEVCQTAwMEZCNUZCMjhCRTE5RkVBNERDQzBCRUJCMkRCMUJCMTlENUYKLToxMEVCQjAwMDE4Q0ZDMEUzMDlCNURDNUY0MzExODVGNTdGNzU4OTc4MEYKLToxMEVCQzAwMEMyMEFFRUFGMTI3OTZDRUNCQjQ0RjE5NEM2RkIxN0Q2QzcKLToxMEVCRDAwMDREQTI5QTA0RTFGMjI0MDFCQ0JGMzBGQjY1Mzc2RDdGODIKLToxMEVCRTAwMEFBNUE2NkZFRUM5Njg0MTAxQzBFNUQyNzc1RjhDMEVGREQKLToxMEVCRjAwMDE4MkNFRUY5MUM0Q0JBNUJFMjc5QjJCMUYxRThFRkRGMDgKLToxMEVDMDAwMERGNUI5RTJDQ0I4QkREMzA2MjIwRTY5NTk3RUNGQjc4QUEKLToxMEVDMTAwMDNDRjAwN0E5MjRCODFFQTlCQ0I4QUEzQ0Q5MkMzNzVCODQKLToxMEVDMjAwMDQ3RkZDRkU0Qzk3QTI1REYzNkZBMUNFQ0I2QUJGMzY0QjQKLToxMEVDMzAwMEJEOEM1RTIyN0VBOUNEOEZCREU0OEUyODJDOUYyREJBN0YKLToxMEVDNDAwMEU1NjlEMEJCRkI4Qzk4MjczNzcxREZBQjI3QzE3RjM5RDMKLToxMEVDNTAwMEQxNDRDMjE4Q0ZENUQ4MEZBRkE1NEUyOTA1M0E1REJFMTUKLToxMEVDNjAwMDc4NjZDQjRBMDJGOUQ1Q0Y3QjU5REU5RERBMUVFOENEMTYKLToxMEVDNzAwMEZFQzc5ODQ2REMzRUIxRDJGREVGQjVGRjg1QkNBRUU3REUKLToxMEVDODAwMEZCQTlGMzUyRUM5MTAyOThERjQxOURBREE3NzMzMUI3MTgKLToxMEVDOTAwMDg5RUZGNzk2RTdEMURFNzM5RTg3Mzg3NzU1MTlDRDUzMDQKLToxMEVDQTAwMEM1QTdFRUU5MUNFRkJCQzVCQjY2ODIwRkJBODc3ODk3OTQKLToxMEVDQjAwMEMyRjNCNzE0ODk4OTBFOTI2RDUwQzVCQjE0N0I0MTZGQTYKLToxMEVDQzAwMEYxQUUwOEQ2M0ZENzFGRUIxRkVBMTZFRjYyNzkwNUNERUMKLToxMEVDRDAwMDA3RDMzRDYwREZENzM4NjNDRjNDRTM4MUYxMEMzODRFN0EKLToxMEVDRTAwMEYzRkU4NDEwRTRCOTM3NzNGQ0Q3NUM3REJDRUI0MTc3NEQKLToxMEVDRjAwMDBGRjFBRUFEREM3RUZCQTA1MDhFMTgyODVFQjcxMjA2NzkKLToxMEVEMDAwMDdGQjA1REM0QkQ2NERDQzdDNjFFQ0UxNkYwNjNGREU1RjIKLToxMEVEMTAwMDg3MDdBMUJGNjg5Njg4NjdCREM0RkM2OEIzNzhEQ0VBNDIKLToxMEVEMjAwMDgzQzkwNTk4RTdENTFCOUU2N0I1QThFMzAyMEYwMzlFMkMKLToxMEVEMzAwMDlERThFNzQzN0ZGQzdERkYzMTA5RkQ1MzczQzE4RkRGMDEKLToxMEVENDAwMEE3RUIxQzA0RTFGRTNDNEYwQjNCREZFRUQ5MjE4NTNDRDkKLToxMEVENTAwMDJDQUU2MjkyRDEzNkI0QzlGMDdFMjExNUEzMUI0MUY0Q0EKLToxMEVENjAwMDA2MjlENzVDNDM1RjRCMTQ2QkI0REVEMzRDQ0JENEU4OUQKLToxMEVENzAwMDU3NTYyQjQxMTc2REI3RjU2NDAyRkFDRjFFNzI3ODEwMDMKLToxMEVEODAwMERFODc5QTU5N0MzOUI4NTYwQUY1NjNFM0UyQkQ2MUMxNjIKLToxMEVEOTAwMDY2RDkwN0UzRUM3NjMzQkZEMzJCNkVBNkZGM0M5QUZCMTQKLToxMEVEQTAwMDA4OUFGNTNDNEVDQ0JGRDc0OEU0MDgzQzY1ODkzRDFGMjYKLToxMEVEQjAwMEIyMjk5NTNERDkwRjYyQkM2NjdEODNBOTBDRjA5RENEMkIKLToxMEVEQzAwMEVFMjdGOURDRTA5Qjg2RkVFNTk0MDJCQzg3QTgzOUIxMEEKLToxMEVERDAwMEExQTU5MkQ1RTM5QUZEREMxQ0YzNjNGRDc1MEEzMzQ4QzcKLToxMEVERTAwMDg5MjcwNUUwN0RDQUNERUMxQjJEOUVFN0I0QUFDQkRBQkUKLToxMEVERjAwMEY4OEVGNkRDRDUyQzEyRThFRkVFRDNGRDVDRDI1MzZFMjQKLToxMEVFMDAwMEE2RkYzRTVGOTNDN0U5RTJDNTc4NDlCM0RFRjM0NjFFMkQKLToxMEVFMTAwMEYwRkI2QTc2Q0Y1MDYzMTZDMzlCOUNDRDlFRjlGNjBBMzEKLToxMEVFMjAwMEJDMEY4RUQ4QjkxRDQ3MThGQ0Y5RDczOTI0NTgwRkNEMUYKLToxMEVFMzAwMDc2QzZCN0ZGMkFEQzVBNzg1Rjc3MTczMEZDREFEOTdBQzIKLToxMEVFNDAwMDZENUUyRDg1MThCRTE4REM1N0VCMTczOUZGNkY5NjhCNUEKLToxMEVFNTAwMDFGNDhERTY3MjI3OUQ4MEZFNTQyRjA2MTNEQUVCQjUzMTMKLToxMEVFNjAwMDI0OTRDOUYyMjY2RDI4Mzc2N0YyN0RFRTY3NUNDRjZEN0EKLToxMEVFNzAwMEFDQ0U0RjgyMzhFOEFDQjNBQkYwQkVBMEIxNTNBQzA4MTcKLToxMEVFODAwMDdGREQ0QjY2RENDN0Q1MkU4QkU2MDAzRjZCRjEwOEQwRUIKLToxMEVFOTAwMDJBNDI5RUQyRkE5OTBFQzJFRTk5Njk1MUM3RjVCNEYxOTEKLToxMEVFQTAwMERBNjA4QTVGODY3ODUwNUQ3OUI0MDBFMjQ2NEZDODFGMDkKLToxMEVFQjAwMEVDNzk5NUM5MzVENEFCNzVDQjYyQ0Y4MDlGNzk2QTRBMUUKLToxMEVFQzAwMEMwOUM0MUYxNzNFMTgxQjdDNzRCMUVFQzhFRjJFREYyQUQKLToxMEVFRDAwMEMxRkU3OEJFNzA2NkIzRkFCQzE2NTlBQjhFMUI5Mjk2MTMKLToxMEVFRTAwMDE0NzYyRUFENERGRDFFQ0UyN0E5RkE3NThCMjMzMkJCQUQKLToxMEVFRjAwMDY2OUQyMTMwMDBFQ0NFMUJBRTY3NzkxMjE3RTdDQjA0N0MKLToxMEVGMDAwMEU4NzlEMTRDNzg3QzVFQzg1OTZGNDFCQzFFMjhFMDc2MDgKLToxMEVGMTAwMDZGNzdCQUQyNzY4MDY3OUUxNzJBREFENzAyNUQyOTNEQ0QKLToxMEVGMjAwMDZCMzg1RDJGM0U3NzREMDFEMEY1QzI5RTZCMEE4MEFFRTcKLToxMEVGMzAwMEVCRjRBRDNFNTgxNzlGMzkwMzAzMDExRkE3QzdGOUQxNjIKLToxMEVGNDAwMDJFMTQ3OUIwNTdDQjZGQTMzMkZFNjdGNUYwNzg4MTk3MTYKLToxMEVGNTAwMEVGQTg4N0UxMkZERTVGRjJEMjNGNThCRTZBQjA5RDlERDkKLToxMEVGNjAwMDRGRURGMkQzOURDMzdCQjYyRTVGOTEyNTkwQzNCRDhEMkYKLToxMEVGNzAwMDc3OTJFRjkzNUMyNjEyMDRGQkFCQjQzQzhBRkQ0QUZGMDgKLToxMEVGODAwMDI2MTNCMDAzODVGREFCODU3RjNBQzdERjgyMENERjRCQ0MKLToxMEVGOTAwMDJFQzAyM0Y3RUI1NkYzQjE0REExNEY5OTlEQkQ1RDQyQjUKLToxMEVGQTAwMEJGQURDOTEzNEMxQThERkJBQTM5QzM3NTI4NTc3RTg1OEUKLToxMEVGQjAwMEU3MjA0OEJCNjQ4M0ZEQzlGQ0VEOEQ1ODdGNjlERjJDRDkKLToxMEVGQzAwMEFDOTc0RDkxMDhFQ0MzNkE2OTNEOTQ1NzhENTFFNzM1NzQKLToxMEVGRDAwMEVCRjcxNjQ3RTJGN0JEMTQ4RTAzQjA5RjQ5NzBDNDBDREYKLToxMEVGRTAwMEMwOUY3NTYwNTc1MzEwRUIxNEU2REZBRTczMTBGNEFCOUYKLToxMEVGRjAwMDk0RUM1M0VGMTM0NURDNzZBMzlGRERFM0IyQjE1REMyMjEKLToxMEYwMDAwMEZCOUNEMjBDODFCQzJDQTBBQjI2N0U3QjdGODY2RjFEMjcKLToxMEYwMTAwMEFDNTcxMTQ3QkZDREU5N0IyMDgzRTU5N0U1MDA5RTgyODEKLToxMEYwMjAwMDE5MEM5RjUxQkQzOEFGQTczRTRGNzhFQ0QwRUQ2ODA3NjMKLToxMEYwMzAwMEZEODVGODkzN0JDRTM3MEJBOUUyRUI3M0Y5NzlDRkI5NTUKLToxMEYwNDAwMEZDQkMyN0M4RTc4ODQ2M0VDNzk3NkJFMkYyQ0QyMjNENUQKLToxMEYwNTAwMEU1MERDNEU1OUJDNUY3OEJDRjM3OEJBOEU0MUE1QkZGQTIKLToxMEYwNjAwMEU5QkFDNTE4RDdBRUE3N0NCRTc0NTgxNzFGRDYxMEZFRDQKLToxMEYwNzAwMEI3M0VGNjAxOUU2QkQ5NjE0NDdGNUEwRENGMzNBREFGRDkKLToxMEYwODAwMDNFODVGQjk0N0EzODI3QzNENjIzQ0JDN0U2RjcxQ0Q0M0EKLToxMEYwOTAwMEQwRkQxRkU2REI4NkQ1RjlBOEJCN0I5NTFCRkY3N0ZDNkYKLToxMEYwQTAwMEU0RkI4NDNDRTBFQjUxQ0M0QkNDQTNBNjVENjJFQjQ3ODgKLToxMEYwQjAwMDAzQTc3NkRGQUJGNTc3OEI3REVCRDVDQUE1RTNGRkMzNUUKLToxMEYwQzAwMDcyRTlBRDdGOTM1Q0VBMTYzN0U4MUI0QkYyRkUxQkUyNTgKLToxMEYwRDAwMDA2MUY3OTVBRDNDMDk1RDgyMjMxN0UxREFGQjNGQTU4OTYKLToxMEYwRTAwMDVDNTJDN0YyMTZCNEYxNUFDRjc4OEM0MzBBM0ZBREU5QUYKLToxMEYwRjAwMDc5NUQ2ODQ1MUVCNkM3Mzg2Q0VEQzE0NENDMjNBOEY2Q0YKLToxMEYxMDAwMDU0QTM5REFEOEQ0RjJFMjA3QkM2MDMwOUZFNDI4RUUzOTYKLToxMEYxMTAwMDc5QUM3RjM1MUY4MDY0NzZFNjAzRTQ3REM3N0MwMDYzQUQKLToxMEYxMjAwMEU2Nzc4ODRGQkU2Q0ZEMzQzNTEwQzcyN0U1NDVENDYwQkYKLToxMEYxMzAwMDJGRUEzRDVGQ0I5OUM5RjgyRTgxRTc4RDk4OTQyMEIxRDUKLToxMEYxNDAwMEM3RjVFRkFENUY3NjI2Q0IwMzdCOTlFNzE5M0Q5QTk4MUIKLToxMEYxNTAwMDgwRTdGNjVEMDY3NkZFQzAyNUIzN0NBODMzMkU3RjZFNzEKLToxMEYxNjAwMEU2MDhEMDAzOEM4RTNGRDk3RjA3ODFGQ0MyOUZFOEMzOUQKLToxMEYxNzAwMDc4OEUzRTU4NkJGNTgyRkUxMjdFMjYzMUZFODNEQ0NGMDAKLToxMEYxODAwMDcyQjVFQkE3MjRGM0RGQkI3RUJFNEQ2RTVDMkZCRTc3NUUKLToxMEYxOTAwMEI1RjFCNUY1MTQwNzcxRUI0QUJCMEU3QUVCRDc5QjVDNjIKLToxMEYxQTAwMEI5MzVEMzNGMjExM0U1OTY2RjA4QzYyOUFFNTIxRTI1MDcKLToxMEYxQjAwMDk0NTA3OTBERkE3OUFGRDEwM0ZCMDUxMzNGMjc0M0Q2NUQKLToxMEYxQzAwMEJBNTVGQkVENTk4RjY2QTNERUJBNjg2NkZCMDc3MTlFRTAKLToxMEYxRDAwMDQ3Q0M3RjY2QUZGOEZFRTdFQ0JCRTM0RUZGNkM5OENGMDEKLToxMEYxRTAwMEU5MzIxRjlFMDc3ODI4OTFFOTk1RDg0RTk2MTdBNDNEREQKLToxMEYxRjAwMEQ3QTJENTI3RTI1Qzg2RjhERTdERkY2NjdFRjhBRUYyMDgKLToxMEYyMDAwMEI0NDk3Q0ZGNUY5NEE3NTRCRkEyN0ZBNUQ3Mzg2Q0I3RTEKLToxMEYyMTAwMEZFNDE5RTlGRDlFMUUzRjEyOTNDRTcyMEUwQUFFRjYwOUYKLToxMEYyMjAwMEY5NzQ4RjY3NEEyQTdGRjM3RDVDRkU5RkNDRjRCNTAxQTkKLToxMEYyMzAwMDFEMkVCQzY1MzI0MURDQjNBNDg0QzlDRjNBQkYxNUUzQUYKLToxMEYyNDAwMDA2NzU2MTk2NDc1M0I3OENFMDNFNUY5QzVGQ0Q0QjBGRDAKLToxMEYyNTAwMDZDMDEzOUY1RDBEQjU2QkM3N0I0NkVERkQ2OTY3Q0NDMkEKLToxMEYyNjAwMDJGMDhBMDVENzdFOTJERjZGRTQ0NUE2MDFCOEM1RkJGMjYKLToxMEYyNzAwMDJDQUE4QTRGOTQ3RUZERTlBQUNBMTI4NDE3RjdFOTBFRDgKLToxMEYyODAwMEEzRkE1Q0QwOTE0Q0I2RkYxNkNGNDM5REY4QTVGQjEyQjQKLToxMEYyOTAwMERBRUY0MjM1Q0JERkFFNzdGODZDNjU5ODU3QzBGQ0RGMEMKLToxMEYyQTAwMDA5OUUwRUY0NUJEN0VENDUyNTQxMzA5OTE0RUExRkNDMzkKLToxMEYyQjAwMDQyQkVBOURCNUI1NjhDRjcwODg0Q0RDNTc4RkZDQzNCRkEKLToxMEYyQzAwMDU2REM1RjVENzgyMDIzQTQ2M0ZFRjJGRDAwNkY2MjQ5ODcKLToxMEYyRDAwMEU4MjZCMDJGNzNFOTc3QzBGRjdENjFDRjREQzVFODBGRjkKLToxMEYyRTAwMEQ0QUMzQkIxREUzQUNGODNERTY1MEEzNTQ5NURFQjcxQzQKLToxMEYyRjAwMDlEOUVFOTQ3QTFENzc2ODIzMThCNzkxNTNDMkZCMDdENTEKLToxMEYzMDAwMDEyOTk2M0VEMkE1QjFERUE3Q0M5MDUxOUUzNzYwMjNDN0MKLToxMEYzMTAwMDNCMzM1OTFFODk4OEEzRTc5OUU4RUUzM0JGM0IxRkU2Q0MKLToxMEYzMjAwMEYxMzhGQTI0OUVGRjQwODJBNkFFQkM4N0ZDNkY4RkEzMDMKLToxMEYzMzAwMDBCRjg0NDU5QzREMTEzQUUzMEZCMzZERjY2NDBCRTQ4RUIKLToxMEYzNDAwMDZDNjE3MjgzNTBCRTAwRkI3QTRDQUM2MzJDOUNDM0VBQTgKLToxMEYzNTAwMERCMTYxOTAzRjg0QTA2RjQ2M0ZFNjlGNEM3NDMyMTVFMUQKLToxMEYzNjAwMDkxQUE4QzgxNzhDNTk2QTVDMzBFOUIxQ0UwM0ZFQUI4OTQKLToxMEYzNzAwMDBFNDhFMzY5QjU5NUMzRDYzMjJGREQ3RjA2RjU5RUQyRTAKLToxMEYzODAwMDUwMDhGQzVGRkUwNzNEQ0I1MzVDOUQ4MEZBQkUyREE3NjUKLToxMEYzOTAwMDA2RjMxNDJGQkQ2RDU0OURCRkQxM0U4MzY0ODUwQkZDRDUKLToxMEYzQTAwMDQ0RjkyREJGQzc3ODQxRTI1RUE5QzdGQ0QzN0U2MEY0NjMKLToxMEYzQjAwMDhGNjBFREMxRUY5NEQ4RDIxMTFDMDk3RTk0ODcyNTc2MTkKLToxMEYzQzAwMDc3MjM4NTVFNzJDMUZFNUY5MUMxRUU5OEI1OEY5REUzOTQKLToxMEYzRDAwMDlFRDU2QTJGMzdBMTNDOTU1OEJDNjU4QzAzRTVBNEIyMzUKLToxMEYzRTAwMEZBNjYxOUY2Njc0QTIzQzE3QkQyQjJCMkQ4Mzk4MTdFNTgKLToxMEYzRjAwMDZEMzYxOUU4RkVFQjJGNzUzREM2RDExMkIyOTg1RTg1QzkKLToxMEY0MDAwMEJDMzc0MDU3QUQzMTc2MTQ0MkZEMjJGRTI3RjJEREM0RjEKLToxMEY0MTAwMDdFQTg1M0JFRjJGQkM0ODUzRUQyREFCMURERUM1N0FFMTYKLToxMEY0MjAwMDhGM0FFRDc4MEQxRkY3RDY0RkYwQjdFMEU3NUZFQjA5QTUKLToxMEY0MzAwMERBNjFCRjk2NEM3OEJFNEJGMDc1QjNDOERGRkY5MkY5MjYKLToxMEY0NDAwMDcxNzM3OTNFQ0RBOTM1N0YxRkMyRUUwRjE0RjE5MzEwNzEKLToxMEY0NTAwMENCODNEMjQ3NTc2NTIyQkVBMkQ3MDc2MURFN0JFRDcyMTAKLToxMEY0NjAwMDVEMTFGQUJGRUE3MDlDRDVFQ0JFQjNEQzk2M0UyQjQ2MkMKLToxMEY0NzAwMDk2QzBEMzQ2MDAwNUE3MEUyQ0NDODU3NTE5QTQ3Q0QwNjgKLToxMEY0ODAwMEFGMDczRTM4OTdDOUYyOTY5NEQ1MDk0ODM3RTUzMUJDQTUKLToxMEY0OTAwMEQ5OTkyOEY2MzRBNDlCRjIwNEEzQ0Y2OUNFRTcyMjdFNDMKLToxMEY0QTAwMDJCRkM5NDI3MzMwM0EzQjM5QzcxRTdCMjk2NUFEOEI5QzcKLToxMEY0QjAwMDJDN0VERTM3NzFFOURCQkJFMUJDRDMxNkVFMkYzRUZDQzAKLToxMEY0QzAwMEQyMjBGQ0REODVDRjU3MkIxMkY4OEQzRUI3NTdFNUMyMTEKLToxMEY0RDAwMDdFNkYxQ0E3NkJBMkQyNDE2Q0Q2NzhGRTNDOENGOUIyMzEKLToxMEY0RTAwMEY5MDc1OURFOUZDMkVGNEY1MjU2M0JCNjAyM0VCREE5MDcKLToxMEY0RjAwMDAxQ0MwQkJFQUUzOTgyM0Y1OUYwOTJFRDM0QzZFNUE4N0YKLToxMEY1MDAwMDVEODRFNzlGQ0ZFRDk3ODQ1REE0RDI4NzYyQkZBNkREQkYKLToxMEY1MTAwMDg3NERDRkZBRUZCNTkzNjY2N0E5RjcxNTU3QkRCRjIyQTAKLToxMEY1MjAwMEVBN0Q2NjY3N0JCMTZGRDRFRTIzMzRGRDdCQjM3Rjg4QzEKLToxMEY1MzAwMDJGQThDQThCQjk5RkU3NDUwQkZEOUVDMTY1QTNDODk3NEQKLToxMEY1NDAwMEU5M0NCRjRDNDI2NjM4MDc5MTBDQjlBRjRDQUY2M0RFNjMKLToxMEY1NTAwMEQwN0FDOUUyMDUzQjQ5OUIyRkQ0OTlDNzQzMUFGQUIzMjUKLToxMEY1NjAwMDNDOTI4NkExRUM1RThBODY2QkUwMjlGMjg5Q0M5MDRGQjIKLToxMEY1NzAwMDEyOUZCNzlBQzhGMjgxQ0M5MDRGNDJERjM3RjU3QURFRkUKLToxMEY1ODAwMEQ5RDMwOERGNkZGQjkxNEQ5Qzc3NjY3RUY2NEFDMkUzQzQKLToxMEY1OTAwMDBDREJGMDNDNzRFQ0I2MkMzQzVGMzNCNjkyRjlFRjUyQzYKLToxMEY1QTAwMEZDMDYxOUY4RjJGOUFGNzQzRTkwQkIzMUJBNkVDMUJFRDkKLToxMEY1QjAwMDRBRTlFQjczODNCRDY1QTZGNTkwQTdEMjc5REVCOThBRDcKLToxMEY1QzAwMEY0NzhERTU5RTQzMzg5Rjg2RTQ2RkY3NTEyRTg5RkNFNzEKLToxMEY1RDAwMDNDOTNGQUFFNzNEMEYwRERCNjQ1MUVGNDBGNzdFNjNERUUKLToxMEY1RTAwMDdEOUZFMDNDQ0I4NTlDMzFBOUU5OTdFNDYzRUQ5MkE2MzEKLToxMEY1RjAwMDE5RDBDRTQ4OTMwMzNCMzE4RUI3QjFDMzhDRkU4QUFDOTEKLToxMEY2MDAwMDdDRTRBQkE2OTEyMUJDM0YzN0E1QTgxNUZEQUYyQjUzRDkKLToxMEY2MTAwMDdEQkJCMjQ2NzRGMThGODA4RkFDNjdGM0JGMENFN0JDNDMKLToxMEY2MjAwMEE0QUVFRjVFOUVGRkI3MUNCMEE3Q0FEQjhEOEMwRjM1NzIKLToxMEY2MzAwMDcwNkNFQ0JDNkY4NTdFODczRTBGNjUzMUZBN0IzNUY2Q0EKLToxMEY2NDAwMEFENzgxRTEyRkNDRUU1QjBGODdFNkZGMzE0RkNGODZEQjkKLToxMEY2NTAwMDc2QkI5NkJGODJFNTlDM0VFRjk5NDMyQzVGNDlDRDVGMTgKLToxMEY2NjAwMDg3OTc1NzBFM0Y0RDY1Qzk5MUU1N0U3QzVFMzY0QjYxQUQKLToxMEY2NzAwMDFERTQxNTk5NjMzMzQwMDJGRTM4QkJGRTdCNzAwRkM3NTMKLToxMEY2ODAwMEU1QzQ1ODBFRENFM0YxNzhDRTZEQjdDMjNEMUQ5NzlEMDEKLToxMEY2OTAwMEIxRjdBMEZDNENGNjQzQUNEQzJGQjYwNUVFRjU2OENGMTUKLToxMEY2QTAwMDRFNjQ2NUY4NTYwNjIxNkY2RDkyNkUwRDVBRjExRUFEQ0YKLToxMEY2QjAwMDU1MURBMDlGNEEzNEY5Mjk5QUZCMDcyMDhGMTJFRjRCNjIKLToxMEY2QzAwMEIwMzI3QUE2RjMzQzU2NTJDMUVENzc4ODJDRDE3MjkzQjIKLToxMEY2RDAwMEJCRDgwQkY5MDc1NkUyRDlEQjAxRjU1OTQ2NzY0RjAxNDUKLToxMEY2RTAwMDYxNzk1MzRERkRGMjU4OUUwM0U3Nzc5MkM1RkRDRjI0MTMKLToxMEY2RjAwMDFBMDRGRTZEQ0FCMzYzRkY0RTc5QkREN0M4RTM0RUVDNjIKLToxMEY3MDAwMEZCMjc5RTYzRTdDQjQ0N0UyRTIxQjY2Q0IwN0JBQzFFRkMKLToxMEY3MTAwMEEyMkE4QkZCM0I4ODYyQ0I4NkYzRkE0REMyQUZDN0NCRTQKLToxMEY3MjAwMEVGNUEwMjdGQ0Y4QUIzOEI0RThDQkJCRjA4N0ZGRkUzQkIKLToxMEY3MzAwMEY5MDdGQkMyN0M2RjM0QThFRjRGMTZDRjY1Mzk0Q0ZFM0EKLToxMEY3NDAwMDVFRTZGNzBDQjY1OTAyNEEzNjJEOUY0Qzk4MzExRUFFMzQKLToxMEY3NTAwMDZFOUQ5NjVBNjZCMEEzOURCNjUzMDdGMkM4QzlGOUMyMEEKLToxMEY3NjAwMDNFOTVDMTY3QUZGMDRCRjBCQjFCRTI5RTNGNjc0MDQxNDcKLToxMEY3NzAwMDdGMDAwOUI0RTk0MDdGM0E0RkZCMzEwRkIwQzYxNENCOEMKLToxMEY3ODAwMDUxRjJDMUFCMUZCMDY1NDMxQ0IwRUFGREZCMzAwRTk4Q0YKLToxMEY3OTAwMDcxRTIzREM4REIzOEExNkYxRDlCMDRGQTIyOEZERjAzQTUKLToxMEY3QTAwMDQxMzc3RTQxNUEzRTlBOTk4QkZCQkVDRTdCNDFGQjQ5NDUKLToxMEY3QjAwMDI4MUYyNjRFNjVFNzU2Mjc5MEIwODJGRTE3MUIzQjQ3NTEKLToxMEY3QzAwMDM1QkUyNENGREI0NEJGMzc5MUU3N0Q4QzNGRTk0RjAyNDQKLToxMEY3RDAwMDNGQzBGODNCQTIwQThCQjdDNDk0RjgzQzBCRjEyNDJFMkYKLToxMEY3RTAwMEJEMjc3RTFERENFNDg5MkIxM0I4NEY1ODVEQkVDNUFCMjkKLToxMEY3RjAwMDJFREYzQUYyQ0JGRUYxRTU2NEUyMUIwNEYzN0M1MThBODIKLToxMEY4MDAwMEUyMzlFNEUwMjg2MjYzRjM2MkY5ODQzRkUzRkJCNjQxNDYKLToxMEY4MTAwMDJFNjJDQTg1N0M0Nzg3MTQ4NDdEQzFBMDE3MzIzMDhFNDIKLToxMEY4MjAwMEYyQzI0ODgyRTVCNDFEQTY2REE2RjhGOTNGMjZCMzM4QUEKLToxMEY4MzAwMDJERjc3MzhCREYwRDgyM0FEMEFCQ0ZCRjk1ODZGODRBOTgKLToxMEY4NDAwMEIzQ0EyODRGQzEwMzBFRkM1NjlBNjlCMjgwN0NENzcxQTcKLToxMEY4NTAwMDM5MkZDRTZEOEY0QjMyRTE3REFGNEQ4QkQ4RUYwRDY4RDgKLToxMEY4NjAwMEVGQkI2Q0QyREIwRTAxMUQ5QjNFQTI3M0EwREZEOTlFQzUKLToxMEY4NzAwMDY4ODhDODQ5NDAyRjQyMEM4RTJFNzkyQ0Y4MDdDNkJCRTkKLToxMEY4ODAwMDFFRjg3RTA0RkI1RDI3Q0FFNTdERTNFRjFCNkY3MjMyMzUKLToxMEY4OTAwMDU4OUI3RUE0RjBGODFDRkI3RDg5QzJDRURGOUJBMENCRDkKLToxMEY4QTAwMDhFQjYwNzlCOTJFMDNBNjFGMUIxNkMzMTRGQTJGOEEwOUQKLToxMEY4QjAwMEJEOUI4ODMyM0I5Rjk1QzZDQkUyOUU0RDQyQ0ExNEJDOEQKLToxMEY4QzAwMDY3NDcxMkVEMUFCMUZDMjQ2RjI3QjVCRkZBNTdFMDhGRDYKLToxMEY4RDAwMEJFNDk3NDNFRjREOTk0Q0RFNEM0NTNGMjg5RjVDODI3RTcKLToxMEY4RTAwMEQ2ODAwN0Y4QzQ5QkQwRjM3OUExQkE2Q0I2NkVDNjI1NTIKLToxMEY4RjAwMDhENzQ0MURFNDA5M0RCRUIwMkJCNEFFMEE3RjMzRDFGNzIKLToxMEY5MDAwMDU3RDQ4QkVGNzk1MzdCMUVCNzg5OEYxQkU2RTc4REI1RjQKLToxMEY5MTAwMEY1M0ZDQTY2NzY1QkU3Rjg3QTNBQUVGNTFCQkVFQjU0NjQKLToxMEY5MjAwMDdGQjdBQkJFQjc3RUVDQkQ2ODhGM0YwNzU1MEFFQjhDNDcKLToxMEY5MzAwMEUxNkQwMkNGNzMyNTg1RUFGQzE0MzJEMjZCNjJGMjVFNzAKLToxMEY5NDAwMDlEOEY3MkEzQjRDQzBERUJGMzI2NTM2RDdCOTRGNjdGQTEKLToxMEY5NTAwMDk1RjNDOThENzJFMDMzODgzN0JDM0FBM0UwMDhBQ0NGODkKLToxMEY5NjAwMDRBQjhEMDlFOEU3MzMzODlBQzAyNjZCOTVDMTZGODg5QUEKLToxMEY5NzAwMEJEMEZDQThCNzUyMDhGRUE3NDgxRkUyOUI0N0M1MURGREMKLToxMEY5ODAwMERBNzc1MTFFQUVBRjI3QjM0Nzc0ODc0RkYwNjEyNzlDREIKLToxMEY5OTAwMDk0RkY4MEVFODJGRkI0NzAwQjNFMjBERjBCNjM0MkRGRUEKLToxMEY5QTAwMDY2MTJDMUE3OEJCMDNDNkFBQUJGNThCRUI0MjdCQjZCMTYKLToxMEY5QjAwMDVFOTQzOUM3OUIxQUZBODI3RTdGQjUzMTg4RjJFNzQ2OUEKLToxMEY5QzAwMEZCRTM5ODM3QjYzMzM3QjAwQkQ2RkRCNEExMUZFMzNENDgKLToxMEY5RDAwMDM5QzQ1NTg1RjYxNjg1NzdGN0ZGMjRCQzc0NURCOUUxMDcKLToxMEY5RTAwMEJEQjAwMzg1QkRENzJEN0ZGODIzODMyQTdGNThDMEE3REMKLToxMEY5RjAwMDVEQzcwMjhFN0FDMkVFM0YxQURCQkUxNUVEQkJGQUE5RDcKLToxMEZBMDAwMDU2MkY5Q0YzQTg4N0JDRDgxMjhDN0Y2MTlFRjEwMUJFNTMKLToxMEZBMTAwMDJGMEI0QTJDREZCNzlCQkREODdCOUUzMUJCMEZBMEQ2RTYKLToxMEZBMjAwMEM2RUVDMTExRjcyOUREOUIyRkVFQzk2MTcwNTNGOUM1RjAKLToxMEZBMzAwMEVGQzlDMTcyNUI5NTA3Rjc3RjlENzZFMzFDNjY4N0RFOTEKLToxMEZBNDAwMDUwNjA2OTg2N0IwN0JCREY5N0MzRkM3QkU0MDVBMzg3MTcKLToxMEZBNTAwMERCODlBOEJGREIxMkQ5NzcyRTlBNTk1RTdCOUMxQzI3QzUKLToxMEZBNjAwMDUyNUFENzNENUVFQkY0Q0MxRUJDOTQ5REM3RTI3OEIyRUYKLToxMEZBNzAwMEI3MTRFOEIxMTFFMjU2QkFFRTdFQzhDRjlDODE4RjgxRUYKLToxMEZBODAwMDRGRTYxNEY5NzJFMDI3M0Q2NjE5OTg5RjkxRjJENUE2Q0EKLToxMEZBOTAwMDBFMDJFOTcxMEREQkUxN0VDQjlCNDhDMzlCNzIxRkU0MzQKLToxMEZBQTAwMEFCMkY4MDdGQTYwREZBOThERDdCRDlDNTU3NTcxODVGMUQKLToxMEZBQjAwMDA1NTEwODdFREIzQTdEMkQzNTIwRTU4Q0MwM0NFRjc3ODMKLToxMEZBQzAwMEVBNEEyMENFNjg0NEZDOEJGQzQzRURGQThEODNFN0I0MTAKLToxMEZBRDAwMDlFQzFFMzgwN0I3NTI5M0NFNjFDNjc3Nzc4QUU4NkJGQzQKLToxMEZBRTAwMEUzRjkyODlEMzAzRUVFOERDRjIxQ0YzRjcxNTgxNzlGMEYKLToxMEZBRjAwMDI3OTM4MDBCRTBFRkU0Rjc1NURFMTY1RDlGMUVFMEQ2RkUKLToxMEZCMDAwMDU5OTFFRUI3NEY2N0YxOThGQTA0NjZBNzQyNUNDNjlEMUIKLToxMEZCMTAwMDA2RkUyN0Y2RkREQjU3MzNGRUI4REQ2QzQ0N0U5OUQ0MzQKLToxMEZCMjAwMDVFOEJGMTE3NTJDMUUyMjk1RUZBM0Y4MDY3MUFGMThEQjAKLToxMEZCMzAwMDgzOUZFNjk4NjI5Qjg0RTczNkE3NEU1NEM3NUJBNjk5REQKLToxMEZCNDAwMDZFQzRGOENFNkQ4NEY5RDM2RTlGQUE1N0ZERUVBMEMwQTcKLToxMEZCNTAwMEMzMzRCMkY2NjNDOEU3OThBNkY5QkQ0MTJENUVCNEYxOEYKLToxMEZCNjAwMDFBODE4RkE2OTFERkJDRUVBRkNENDk3NDYwOUNEODQzNUIKLToxMEZCNzAwMEZBN0ZDN0I4NEU3OTBFQ0I5RkJCQUFCOENFMTE3RDBDQzkKLToxMEZCODAwMENGRUJCRkUyOUNCNzY5MTE1RDE3RkRGRkIzMDhFRkU5NEEKLToxMEZCOTAwMDFFOTczNjdGRkI2M0I0RkNEMzhEMDNCMUZDNEFEQTVENUMKLToxMEZCQTAwMDRCNEU0MEZEOTYwMjJDNTdDODFGQ0ZDMDdCRDM0QkE3QUUKLToxMEZCQjAwMDRGODBGQkNEOEY5OEQ5MzgyRTRCQTAwRDdFQUZDMjM1MkMKLToxMEZCQzAwMDI0N0YxODZDQzkyQTBDMzE2Qzc3RjNEMERBRTE5MDA3RTYKLToxMEZCRDAwMDUzNjE2MUU1RTNDNUZGNkIxODk2RjM3OTc5RDg4QjAzMjAKLToxMEZCRTAwMEExN0M0NEZBNzg0NjRGNzFBMTQxODU1MjA0N0U5N0FBQzAKLToxMEZCRjAwMDIyODVCNTlGMzg2QzY3MDZGODA5MkFDQTU5Nzk5MEI3RUIKLToxMEZDMDAwMDZDNzUxRkE4OTczRjk5RDE5MzNFNkVFMEY2QjFCMEI3REYKLToxMEZDMTAwMEZDN0NCREJGRTA3QkJGMTlDRTg3RjlBRDkyMTdDRTA1NDYKLToxMEZDMjAwMEY4NDdCRUNGRUVDNzMyQjEzQzAyQkZBRjU4ODFGQjEzREQKLToxMEZDMzAwMENCN0RDQ0JGMzdENkRBRTgwNkY5RjdCRDgwQTEwNEZDNEUKLToxMEZDNDAwMEI4MzY2QjVFMzNGQ0JFNDBGMkM4QjIxMTQwRUZCMUQ0OUYKLToxMEZDNTAwMDBDMDNGRDQ3RDdENTEyNUM1N0Q3N0M5QzkzODQ3Njg4REMKLToxMEZDNjAwMDdBNUQwOUJFOUQyNEQ2NTM4NTdBREQ1MDc5RjA0MzQ2RUUKLToxMEZDNzAwMDQ3RjU3QUEwRTMyRTg3RjdEM0FFNTVFQkE1NEVGOUFFNDQKLToxMEZDODAwMDU5Qjc1QTdFRUM1NUVGMTNCNTFDRUNENDRGQUJDMkM4MzQKLToxMEZDOTAwMDk3NTk4NDlERkZEOTBDN0NDQUQ2NkYyQkMwNjE5MDNCQ0QKLToxMEZDQTAwMDNDRjAzRTU3RjIwRUM0QzQ4QTVFRUMwNzAxMUY5ODNEM0IKLToxMEZDQjAwMDY0NTg3N0I4RTA0RjExRjYyMjgzQzA2NjRCODNFRkIyRTkKLToxMEZDQzAwMDdBREFDRjA3M0YyMjI2RTBBMkRGMEYyMTdFNTYzMTc4NzUKLToxMEZDRDAwMDM2NEIwREZDNzcyOTk4NUQyRUY2QkQ3NTYyQkVGQkQ0QzAKLToxMEZDRTAwMEYzMkRCNUIwNzNFQzJFNDJFNTBFRkFFRThCMDc3RTEzQzIKLToxMEZDRjAwMERDRjU1Q0NGNEUzNUY5MUYzNkQyMzlEQzY2OUY4NTc0NTIKLToxMEZEMDAwMEJFODMwNDlGMDNGQkE2QzMxMkY4MjVEMDVCMjcwNzBGMTEKLToxMEZEMTAwMDQ2MjVGODVEMDkxRkM2OTMyOTFEN0Y5NTEzNjcyRjA4OTcKLToxMEZEMjAwMEI4QjRGOEE4RUI0NUFFNkFFMUQ2RTJBMThCM0UxRDY4RjcKLToxMEZEMzAwMDlGQjlGOUVGQ0Y3NUNFNEIzMzlGMjY3RUZGN0NBQ0Q4QjEKLToxMEZENDAwMEE4Q0ExMzNENUVDNUYyNjAwNTVDQzcyNTUyODg3QTUyODkKLToxMEZENTAwMEIyNjAxQ0I1RDNFRkE0OTU2RkJEOUM2NzEzRkE1OUMwNzAKLToxMEZENjAwMDc5M0YzRjRGRjU4NUNDRTRERUZEQkEwOEMyOTk1QkQ5RjcKLToxMEZENzAwMDYxMDYzQzdFOTJDM0ZDMkUwMkZFQTY5MTQxNkM2NzkwMDgKLToxMEZEODAwMEE1MUVFM0M0OUZFNEM4QzI1RkE2QTJCN0I4RDc0Q0M0RkYKLToxMEZEOTAwMEI5MDQ1RTFEMDY0RjE2RTY3QjZBRjAzOUQzNjRFQzM5NzAKLToxMEZEQTAwMEFFQUE4REJGRjZEMjRFQTJGOENCNENFOThFNjcxMTJGQ0EKLToxMEZEQjAwMEJCNDVFQjg3QkI4OUY5QTc2RUUxN0VCOEIxOTUwQ0ZGMTcKLToxMEZEQzAwMDI5NEIxMzcxREY5NjUyNzI0MjIxODNCQkVFNUQxNkY0MEMKLToxMEZERDAwMDc4QzcxMUY4MkEwN0UzMTZEMTExRTAyNzc4N0RDNDRGQzAKLToxMEZERTAwMDMxNEUyNEVFMzdENEUyQzc5MkRCMzM3RTdBNUIwRkJEMEYKLToxMEZERjAwMEMxRkZBRUM1NkZDREE1RTM1Qzk0M0FGMDFFQjRCRkJCQTYKLToxMEZFMDAwMDZDN0NEQzQwMUVBQzE3QkIyREFGMENGQzBCNTRBRTdFRTMKLToxMEZFMTAwMEZEMzU2QzM2QTEwQUU4RTcwQzM4NzI5REIwM0VGQ0UzNzQKLToxMEZFMjAwMDIwRjczQUE1MzJBMDY3RkU3OTgyRkVFMUM1N0M5RjM4QjMKLToxMEZFMzAwMDhFRUJGNzRGNzZCMUYzRjMxNUJFMDE0RjhFMDFGQkYzNTYKLToxMEZFNDAwMDk4OUU4NDNDOTBDN0NERjBGM0M5MjYxREVBRjU3OUFGQTIKLToxMEZFNTAwMDBENzc4MTdERkUwMUU3QjdGRUVCNjVENUVGRDMwRDA4ODkKLToxMEZFNjAwMDU5NTRGNzZDMENEQTkxQTIyQTBGMEU2N0E4REEwRkRENEQKLToxMEZFNzAwMDk3QUZBQTJGOEUwQzU0RDUwRjNGMzY0QzU1MUVEMTMxNUIKLToxMEZFODAwMDVBRDVGRTlBOTNFNUFBRjJBOEU4MDQ1NUZCNkJDRjRFMkIKLToxMEZFOTAwMDU2OTVBRjhCRERBOUJFMjcyNEU4RUIyODRDODNGQkY5RjAKLToxMEZFQTAwMDE5M0U2RUI4MzI1M0Q1RkU3Q0QyRjg2M0IwRUU2NkFGMjEKLToxMEZFQjAwMDY1NzlEQjY1NjRBMUFBRkY0MjVEMERFNjQzOTM1NjY2NTIKLToxMEZFQzAwMEM3MzREMEZGMjEzRDc1NzcyQjk4Mjc0NkVERjc1NEMwRjYKLToxMEZFRDAwMERCN0FCNTlENTNEREZFRDgyQTkwQjVEREVFQTdEMEQ4RUMKLToxMEZFRTAwMDMzNUFGQkE1QkZBMzBBQUU3NzI2QjdFNkYyQkM5MzZCRTUKLToxMEZFRjAwMEM4MzVGQ0Y3NEFCNDc0QzVGM0ZFOUZCQ0E5QzM3REM0RTIKLToxMEZGMDAwMEUyRDc5ODdEQkY3ODM3Q0I4NzJCMjBGRDkyRjExQ0Q4QTQKLToxMEZGMTAwMDMxMUQwOTQ5NzBFRjQxQzNCQTMxNTI5NzFEQTNDNThCRkEKLToxMEZGMjAwMEQxQTVBNkIzRDlBM0E2NzM0MkExOUFDRTg5NUUzNTlENjkKLToxMEZGMzAwMDkzNDdBQUU5NkNGN0E5RTk5QzVBQTlBNkIzRDNBRkE2M0YKLToxMEZGNDAwMDczRkEzNDM1OURERDAxMzU5RDMzQUJENTc0Q0U2RTUwREIKLToxMEZGNTAwMEQzMzk3N0E5OUFBRTc5QzEwNUFBN0EyMTM3RkJCNDJDOTcKLToxMEZGNjAwMDU2QkQ2RjkyQzJBNTU0NTI5MkQ5RkU2QUJDRUZBMTVGRjIKLToxMEZGNzAwMEVCMEY3QkU0MEY0MUZGMjBGRDFGNUJDRjBEOTg1RjNGMzAKLToxMEZGODAwMDk3RDIxRkYyRUJGRjQyRDYxRTg1NTA5NDk2MEZFQUY2RTkKLToxMEZGOTAwMDNEODY3MUI1RUZDQTA3OEY2QUU5N0Y5NUY2MjlENTg3NDcKLToxMEZGQTAwMDRGODAzQ0ExNzZDQzdBOTAwRkQzRkFGMzdEODdCRjY3NjAKLToxMEZGQjAwMDNCNDZDOEFENzhCQjIxN0U1RkREOUIzQ0VCQTYyN0Y5QjUKLToxMEZGQzAwMDNFQkI1NzNEQTlEOTY3QkYwNUQ5NEQ2ODhGQUY0NUJGMjcKLToxMEZGRDAwMEQ2NzRDRUQ3OUZDMkFCNTFFMDU3N0QxNkY1RkY1QjE0QTgKLToxMEZGRTAwMDkwOTExNEFFQjcwMDZFRkE5REI3MkM4M0QwMEY3MjE3QTQKLToxMEZGRjAwMDg5RThGMTlFNkJDOERDRDRFMTdEOTk5ODg3NTk0NUVEN0QKLTowMjAwMDAwMjIwMDBEQwotOjEwMDAwMDAwNzI3OENFRTJGNkMxMUNFRTI3RjlDQTE4Mzg5MENCRkMwNAotOjEwMDAxMDAwMjNCOTY5RjBEREFDMEU3NkVFRUI3OEVBNTVERDBCRjEzNQotOjEwMDAyMDAwN0JGODI3RjhERDczRkQ4NzYxOUMwQTkzNjdDOTEzRjQ5OQotOjEwMDAzMDAwRDU2MUVFN0YyMjEzNTlGRTI3NTFGQzgzRTNFRjYxRUM3QgotOjEwMDA0MDAwMUE4N0M1NEQ1Rjk0MDIwMURDNjdCQjRENUVEODY3MEYxMAotOjEwMDA1MDAwQ0EyNDI2MzdFODM3NTcyODFGRTI1NDI3MzQ3QTY1MjAwOAotOjEwMDA2MDAwRTc5MUREMTlFMUM1NzZDNDU3MjgwNUUzMDRERkYxQkI0QwotOjEwMDA3MDAwN0ZDQUY1OUQwNDdFMTBFREJGNkRCRTA2NDM3ODExRjM3NwotOjEwMDA4MDAwMjdCMERGNEI3OTkzRDNFNUE5REI4RDExRDg5NzA5M0VEMwotOjEwMDA5MDAwM0E5OTMwRTNBOEQzODNGRUYwMzNDODZGNzdEQ0I0MEExMwotOjEwMDBBMDAwQ0FEMkUxNTRDRjYyMEFERkU1QUEyOEVFRUYyOUZFQ0ZEQgotOjEwMDBCMDAwMDFERTZBNEMxNEZGNzQ4QTE3QjMwM0ZEOTM4MTE5RkNBNwotOjEwMDBDMDAwQTlEQzQ5RTkxRkRDRDM3OTI0MDFDRjU4ODk3REZGNUQ4NAotOjEwMDBEMDAwNEJFMDUzMThFN0IwREM5MUUzMDU3QzI4MUQ3ODZFOEY2OAotOjEwMDBFMDAwNThEMUI4MjExNzBEM0RGQjAzMDUxRUNBMTNCMkVGQzY0OAotOjEwMDBGMDAwN0I3ODhENDYyRkVDMkZDQTI1NDZEN0QzQTlGN0NDODAyNQotOjEwMDEwMDAwRDhFMjFDRDk5RjE2RDFBOUUwOTYzQzAwQjdBRDJBRDdGQQotOjEwMDExMDAwNERGOUYxRkYwMEFBNDJGQkQ5MDA4MDAwMDAwMDAwMDA2OQotOjEwMDEyMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFNTdEMEI3ODU0RDUwNAotOjEwMDEzMDAwQjVGMDNFNzM2NkNFNEM5MjQ5MzI0OTIwMjQ4NDg0OTlBRQotOjEwMDE0MDAwODQzQzIwMjE0QzgyMjAyQUUyRjAwODhEMUEzMEJDMTQxNQotOjEwMDE1MDAwMzBFMkU0MDE4NDNDMjA4MERFQzY5NjM2MDNFMUE1NDIwRAotOjEwMDE2MDAwMUIyQzJBMkFDQTgwNDBEMTAyMDY4QjgwMUFFQzIwNkFGNgotOjEwMDE3MDAwRjE2QTM1NkRCNUE1NUFCOTA5NTBFNTREMEMzRTY4RUJFRAotOjEwMDE4MDAwQURGRjVBNkJFRjlEOTk3MzQ4MEFGNkRFRkI3REZEQkUwRAotOjEwMDE5MDAwM0ZERURFQ0QzRUZCQkRENkRBNkJBRkQ3REU3M0RFRTJFRgotOjEwMDFBMDAwQ0Q4QzU2MTk2M0I2REU4Q0REMDBBOUQ5OTk1MzFDQzlENAotOjEwMDFCMDAwRDhCN0Y4Nzc0QjMwNjVDQ0M3MTg1NDY5NTRFMDlGQkQ2OQotOjEwMDFDMDAwMjBGNzIzQzVCRkNEQzVGODFGRTRGN0ZCNjJGQzBGNDE0NAotOjEwMDFEMDAwREU2QUJBRjRDMTE0Qzg3NzBDMzZCOUI3NDBEMUM2NzAxQwotOjEwMDFFMDAwRTgzQTlGQjFGN0IxMUVGNEZGQjQwNUYyQjFGNDdEMzVFMgotOjEwMDFGMDAwN0U0RjA4RTdFRDEzMUUzM0Y5MUJBMTdERjE5ODk3MTc4OQotOjEwMDIwMDAwQjJFQjE4N0I3NkJFRERBREMyNThBNUNDQTkzMTk4NUZBNAotOjEwMDIxMDAwMzlGMzY4MkM4REIxQkY4Q0ZFRkJDMTM2Mjc2M0ZEOUQ4MQotOjEwMDIyMDAwREVCRUNFNjE4Q0REMUI2NzRBRjk4MEU2RTFDRDlFMDQxRgotOjEwMDIzMDAwRjM2NjIzRTMxODRCQkM3MkZFQzY3NTMwQjZDNkM0ODY5RgotOjEwMDI0MDAwMzMzNkQ5QzE5NzMwMUJENzA1RURBNjMwOEYwNUM3OTkzNgotOjEwMDI1MDAwQzZCQzE2MUNGNzc3MTczNDBGOEI4MkQ0MDRFNTMwREY0OQotOjEwMDI2MDAwQkI5ODhGQkVDRjYwN0U0QUVGNjYwMUFBN0YwRjZCQTM1QgotOjEwMDI3MDAwRkM2RjIzNzI5M0VCNjE3RTkzMUVDRjRDNjdEMEU2NjJENgotOjEwMDI4MDAwNjlEQjcwMkNGRjg3RDVFQjc2QzJCODM1MzZFRkJEQkQ4NAotOjEwMDI5MDAwRTBGQkY5NjRFRjY3N0QxMEVFRUIzOURDQUYzNkRGNDk0OAotOjEwMDJBMDAwMEE4N0RGQzVGRUM1MjM3MERERTM2Q0NFRUJGMjUyMTk4MQotOjEwMDJCMDAwN0JEREM0MkE5QkVENTAzNkFFMzdDRDlGOTkxREU5OTM2NwotOjEwMDJDMDAwMDc3N0Q3Q0YzMkM2QTA1RDZCNjc1NDJFMUI4Mjc5OEYxQwotOjEwMDJEMDAwM0QxMUQ2RkYzRDgxQzJFRjc5QUE4QjcwOUQwNUFBOUQ4NQotOjEwMDJFMDAwRjUwMkY4QjczQTU1QkYxNUM2MkMxQzVEREExN0Q3MDVDRAotOjEwMDJGMDAwN0Y5MTNFQzBEMzQ0OEZDQTEwQ0ZCRjVFMEE1RkEwREU5RAotOjEwMDMwMDAwQUZGMzU0M0ZEMkM0QzQwREUzNEY2M0ZCQTJEMTUzOTY2NQotOjEwMDMxMDAwNDdDM0ZBQzc3RkQzNzY1RDAwRDJDMjdFOTZFMzZENTk5QwotOjEwMDMyMDAwN0M4QzZGRTE3RjVGQjI4REUzNjIyMEJEMkQ2MThGOTk4MAotOjEwMDMzMDAwQzFGQzZGMUJBMDJGMkZDQTgxQkMyRDk4OUZDOENDQzFCOAotOjEwMDM0MDAwNzIxOEY3MTBDMjAxRThBN0ZFQ0Y3OUEzREUwODY5QzdDQgotOjEwMDM1MDAwNTg5MzVBMENFQjJFNzE0NkY2RkEzNDAyQjI4M0Q4QTBBOQotOjEwMDM2MDAwNkY3MURFNkE0OUI0RDdERTMzN0NCRjZFNzA4RjdBMDM1QgotOjEwMDM3MDAwNjhGMjc2QzU1M0VFMjRCQTcwNkE0OEZGNjU2NkU2Njk4RQotOjEwMDM4MDAwRUVBNkREQUU3NDQ1RDAwRjYwMzc5RUIxM0JDNDVDM0IzQQotOjEwMDM5MDAwOEIyRTY5MTc2MUJENEYzQUJERjNCMTlGNDUxM0ZFMzJGNQotOjEwMDNBMDAwMEJEN0M3Q0NFQzM3NDMwMTZFRjNERjAzQjg0MUY5RjE0QgotOjEwMDNCMDAwMDY4MDdDMjY2MzI3MUI2Q0NDNjM2NUVDRDMwNjA3RTVCRgotOjEwMDNDMDAwNEYzNTI0NTA3QUE2QzE0OUU5Qjk4NjJDMkFCRkQwRTAxRQotOjEwMDNEMDAwQTZGQzIxNjdGMUY3QjFERkIyRDU5RjlCQkQzOThDQUQ4QgotOjEwMDNFMDAwMEE5Mzc4RTRGMzU4MkNFODc4NTVGMkYwM0ZCQTYxQkNGMAotOjEwMDNGMDAwNTVFRjVBMjg1RkQ5REMzNDFFQzFCMTM4RjlGOEIyMDg3QwotOjEwMDQwMDAwRjhCRUY4MzlDNThEREZBQjVCM0M5QTFERTYzM0ZCMERCQQotOjEwMDQxMDAwRUY0QTI0OUZCOUVGQjY0RDA0RjBCMURBQ0IwQUYzRTIwQwotOjEwMDQyMDAwMTYxQTUwQkMwMkM3MUJGNkUxQzk3ODg0REY2NzBEMjM5QQotOjEwMDQzMDAwNjgzRUE3MUIzQzM0MUY0RjRCRkI1QjcxRDBGRTZDNDNFNwotOjEwMDQ0MDAwMjFFNTNGNzIxNjNGOENGNTNERUM3MzBERUI0RkQ4RDk4QgotOjEwMDQ1MDAwNkU0RTgyRjIwMjhGRTJDMUZEM0RDQUMzRkM3RUMwREY1OAotOjEwMDQ2MDAwMDY4QkQ3OEI3NEIzMjFEMUU2QzZGRDNFN0FGMEU0QTdBNAotOjEwMDQ3MDAwRUY4MzcxM0ZFOUVGN0QxNEU5N0E1QTZDNzk0MTFDN0M3NgotOjEwMDQ4MDAwOUYzOEEyRDQ4Q0Y1RUVGQTg2MzFDQzRCRkFCRUZBQkU3OAotOjEwMDQ5MDAwRTZGMEE4MTU3ODM5RkY5QTQyNzAzQUJGMkZGQjhFOUI4MQotOjEwMDRBMDAwQTBCRkQ3OEVBODRDODU3OTc1NUUzNkQxQkMzQThGODZCMQotOjEwMDRCMDAwRkI5OTEyQUNCN0U4MjU5NUU4N0FEMTYwQ0RDRjVDOTg2RQotOjEwMDRDMDAwQ0ZFRUMzNzI3MDlERDAxOUFDM0Y0QjcxQjI3QUEwQkYxMgotOjEwMDREMDAwQjNCQkJFOUY4MDc4OTBFMzlGOEQ2REZFRUEyM0U0N0JFMwotOjEwMDRFMDAwOUY3MEJFQzc1OEYzQTc0RjIyNUZFQzk3RTA3RTA4NzI1QgotOjEwMDRGMDAwMTcyQzZDM0FFRDUzNTYxNzMxMTlFODZCQkVDNkJDM0M0RAotOjEwMDUwMDAwRUZDREM2RkNEOTcwNzY2RjMxRTQ4N0VGNEUxQTgzRkJDRQotOjEwMDUxMDAwMDhDNzczNjYwNkY5NUFDNkVFQzc1MzdGRTgwQzhFQjc1NAotOjEwMDUyMDAwQTM3OUY2NDc0RjQyRkVCQ0RGRTRCMzQ0NDNDQTlBMkY5NwotOjEwMDUzMDAwQkM4MjdDNzlBQkREQkQ4REUxM0NDREUxMzhDRjg3MkQzMAotOjEwMDU0MDAwN0M1RUJFNkRFMUVFNkQ0RUVDQ0Y0RjdDMDBDQTM1MkM2QgotOjEwMDU1MDAwQUY3OUYxODlCRUI4OEU1NzAxMDYyMzIwRkZFQUJBMDhBOQotOjEwMDU2MDAwRTI3N0FGNUFEQ0M3RUFCMURERDNCQ0JGOUZGRkU0ODFCRAotOjEwMDU3MDAwRTMwNzMwNUQ1QjlCRkYwMEE0QkY3M0M2MTJCQzJCMUU1QwotOjEwMDU4MDAwOTkzNzA4REI2NzI3MDE3QTgwM0ZGRTYyQkYxMjA4Q0JFQwotOjEwMDU5MDAwNjU2Q0YwRkE0M0NCMTI2MUJDMjExQkRCNEQ3RDIxQ0Q5NAotOjEwMDVBMDAwREJBQTM0NjI5QTlENUM3ODQ0ODVGRThGM0E5RDM0OEYzNQotOjEwMDVCMDAwQTEzQjVENkExMjZFRDdCRUZFOEY2RTQ5MjNDMDI5ODhBQgotOjEwMDVDMDAwQkY0MTAyN0YzOUVCM0YxRkQzMTdEMjVEN0Q5QjE3QzUxQgotOjEwMDVEMDAwNDBGOTIwQTVGOUNDNTIxN0QyRjkxRkYyQkQwNEJGMjY2RAotOjEwMDVFMDAwRUFFN0E1OTYyOUJGQkY5QkUxM0E3Qzg5MzY5Qzc3QTlBQgotOjEwMDVGMDAwRTZBNkYzMDk5NjZCODFGQ0Y5QkQ2OTlCMUY4MjM1RUU3NwotOjEwMDYwMDAwMzNGOTM2RDNGOTU1NjY3MzZGNDNCQzE3RkI5RTQwN0NCNAotOjEwMDYxMDAwRDc0MjdEMUZFNDZCRjM3QzUxMzc0Mjc5RUQyNzAzREMzMQotOjEwMDYyMDAwNDA1MTJDRjk5OUVGMTUyMjNDRTZFRjdENzQ3QzVGQThEMAotOjEwMDYzMDAwNzc3RTI0NzMwMzA5QjBDQTk3MkU4REM3NzYyQzk5MzEyMwotOjEwMDY0MDAwNjQwOUU3RjczNkM2Q0Y4NDc2MEZFNzhDMTk4NkY0NTUzMAotOjEwMDY1MDAwQUMzNkQzMzg2QzAxMUZFNzcxNzFFRUIxMzYwMDRFQkM3OQotOjEwMDY2MDAwMjA1NUE4RjczMDdDQzZFRkIxMkQzMTg3OTI1ODEwM0Y0NgotOjEwMDY3MDAwMEI1QTk2QkFDQ0QwRkUzQUFGQ0RBREUyQkU3MUY5MTJBQwotOjEwMDY4MDAwRUJFQ0MxNzMxNENFQkZCRkUxN0U0QkQ0NDRCRjhFMjlDNwotOjEwMDY5MDAwMjlDNURGRTFGQ0QzQzQ3OTI2RkI3QjVDNjNCRTMwRTg2RgotOjEwMDZBMDAwMjcxOUJFMkI3ODNFNkJGQ0RDREUwNjdDQTUzRTNGNzgyRQotOjEwMDZCMDAwNkVDM0I4RTFBRTYxRDRERTgzN0MzODA5MEVFOTNDOThBNAotOjEwMDZDMDAwNjdEMkUzNTYzQTA3QUU3NUZDOEIxNkZCNkEwNUU4NzZFRgotOjEwMDZEMDAwNDEzOEU3NjM2M0M0RjkzQjNEQUVGMTYwMUJBQ0Y3NjBBMgotOjEwMDZFMDAwQjgzN0RFMDVGNTY2OEI3MzlGOTlERDRFRTRFRjVCQzM4QgotOjEwMDZGMDAwM0Q3RDcwRkMxQTVCNDcwQUFFMDFDRUQ1MjRDQ0NGNTdBNgotOjEwMDcwMDAwQkRGREUzRDNFODVDRDVDOTMzNTc5QjQ3NkJCOEM3ODVCQwotOjEwMDcxMDAwRURBRkI1QkU5MURGMkVGRUQyQzRGMjgwMEUxNjNGNkE1OQotOjEwMDcyMDAwMjU3RUQxODg3QzE5RDZENTE4MzlEQzg2N0M4M0JENjFCRAotOjEwMDczMDAwQUE3OTBCQ0VEOTlCNzlDQkFFRkUxNjQ3RTYxMzVGNjkzQgotOjEwMDc0MDAwNjRBQzVCNzhCRDA2RkJERjBCRkMyNjAwRTc4NDE3Rjg4MgotOjEwMDc1MDAwQzBBOENCMUQyQUE3RjdENkMzRDFENzIxOUY2NTlFNDgzNQotOjEwMDc2MDAwQTA5RjVCMkU5Qjk4MzdFNDFDMzRGNjAzRjhGMjIwMUMwNAotOjEwMDc3MDAwNDdCMzA4RTYwRDM5NTczRDJDNDZDMzdEQ0JFQ0IxRkY5RQotOjEwMDc4MDAwREFCQUM1RkM0NzBBRkM4REVDM0MxQUMxRUMwODBGRjgzQwotOjEwMDc5MDAwNkVFRjc5NUQwN0M1QkE3RTg1RUI4Mjc0N0I3QUYxNjQ3MgotOjEwMDdBMDAwODRGRkNENUYzOENDQjhCRTlCQ0Q5MzUyNTBBRTgxNzlEQgotOjEwMDdCMDAwNEZDNzc5OEZGQUMyQTQ5RkY3MzdFMUJBRkNCNUNFRkZENQotOjEwMDdDMDAwN0U4NUY5NENCODFGM0ZEN0ZDQjgxRjVCRjA3ODA0MzgyMgotOjEwMDdEMDAwQjZDQ0NCRjFFM0JFREZBN0YxQkMyRjRBMjNCOUI2MjVENwotOjEwMDdFMDAwOTJGOTkwOEZCNDRDOEFGN0ZCNUNDODBGMTk5NzdCN0IwQQotOjEwMDdGMDAwMzM1RTFFMjZEQUNGODhBN0Y2N0RBRDAwNTJFNDA3Nzc3OAotOjEwMDgwMDAwODc4QkZFRUJERTE5OENFNTRCOTM4ODhGMzQ1QUZDQUI1QgotOjEwMDgxMDAwNTNCMUZGMUZBOUM0ODc4RjBBQkVCRDNFMjY3MEI3MEExOQotOjEwMDgyMDAwRkRBRUZGM0M5RUUxMzg0NzU5MjA2OTAxOEU1MzE5NEVCOQotOjEwMDgzMDAwN0NGNzI2OTNFOURFNDk3NkFDRTc0OThDMDU3OEVGRkIzNwotOjEwMDg0MDAwODc0QUU3QzRGQTNDQzhEQjg5NkY0RjZGODZFRkVCMjcxNgotOjEwMDg1MDAwNzkxMkMzQjE5RjQ5RjEyNjlBOEZDQUVBRThCQjhCQjdEOAotOjEwMDg2MDAwRkJDOEMyRUJDRDE0RjhGQTkzQzAwRkVDNkJEQUY3REVERAotOjEwMDg3MDAwODkxMTY2QTREQjREQUVCMjQ3NjgzRjMwNEZBMjAyRjM0OAotOjEwMDg4MDAwN0RCMjIyOUQyMURGOUM1OTc1QUI4QkU4QTVFOTcxRTIxMQotOjEwMDg5MDAwNUZEMzA1MEU2NDdGRDhDMDM2MUNFNTY2RkUzNzYzRjY2RAotOjEwMDhBMDAwQjYzMEM0RTdCNENBQjA3NjM4NTlEOUQxQ0E2NTkxNEVDQQotOjEwMDhCMDAwNjgzRkNEQUIwNkFDQzA0RkQ5RDQwMjRGOTc1Qzk3OEE0NgotOjEwMDhDMDAwRTM3QTY4RENEQUU2ODE2OTI3NDNFOEI5Q0MwQTdDMDI3RQotOjEwMDhEMDAwRkE3RjIxQ0NGQjA0Q0RFQjQwMUU5NTFGMDBBMUU2NUIwNwotOjEwMDhFMDAwRDg0RkM3MkJEMjc3RTNCRTYyMTU3MTQyN0YwOTk0MjM5QwotOjEwMDhGMDAwMUU1RUVCQjA5MTlDREExMzNEMzQyMkZDODcwODNBNDUyQQotOjEwMDkwMDAwQkMyQ0UxNzgwNzc5OERGMjhERDMwNzkxM0VCM0M5QzIzMwotOjEwMDkxMDAwRTlDNkI3Mjc4Q0YwNUEzOEQ5NDY3OEVFOUMxRUJFRDk2NgotOjEwMDkyMDAwMEFFNUY3MEFCRUQ1MzgzRERDQTM0MEJEQzY5N0FDN0VDQwotOjEwMDkzMDAwOTM4QkY0MjRBQUU3M0IxODQ5RkRENjY4M0M1RkYzNjIyOQotOjEwMDk0MDAwM0FEMUQzM0VDREZGREM3NjJDN0YyRDhDRThBMTI2OEFEMAotOjEwMDk1MDAwOEY1QkYzNEE5MkEwMzc4RjZCMDU4RTdCRDA0QTc0NTAyMQotOjEwMDk2MDAwMTNFRThDQTZGMkZGOEMyMzNBMTk2N0YzQkU4MkYwMDBENwotOjEwMDk3MDAwQkFBQjQzMzlBMjQ2MEI2NEM0MDA3QzhGMDlCQTNBMDY2RAotOjEwMDk4MDAwNkQxMDdGQkVCQTQ4OUEzNzZENzlDODdCMUI5M0I3MjAyQwotOjEwMDk5MDAwM0VCRDFBMkY2NzNGNTBBOUZDOTg4MzhGN0Y2QzBEMUZCNwotOjEwMDlBMDAwQkZFNEE3RDVFRjMyQzBEQkIxRTJGMTg5QjM2MTFFQzc2NgotOjEwMDlCMDAwRUEyMjQ4NkVGQzczQkQxQUQwQTI1MEVGRTk3ODJDMDNFRQotOjEwMDlDMDAwRUE1RDU4NzI2MkY4MDY5ODdGREJCMjhGNTM5MDNFNEExOAotOjEwMDlEMDAwOTZENTE2NjFCQjkyQUEyNTEzRjFEQ0VDNjk1Rjk2RDQxQgotOjEwMDlFMDAwQzBFNjBGRDlDNzI3NUM5RURGRTE3QUJFNzU3OTNGQzRBOAotOjEwMDlGMDAwN0RCRjIwQTc2RDBFQ0FDRjE3QjRENjY3NTBGRjg4OEQ3NAotOjEwMEEwMDAwRjMxRUM1RUYxNzVGRkU2QzNCOTdBQjNCMzJGMDNDOTg5MwotOjEwMEExMDAwNkZFNkY0MjFDRkQ1MDU4MkZFNTZBNTdBOEZEMTM5MTEyNAotOjEwMEEyMDAwMUU5ODg1RTc0NzQ0NEUyQkU3Nzc0QkFFOERDRjlGNjlFNQotOjEwMEEzMDAwRDlCNjRGODE3MUFBQzM1QkU2NTNBQUZBNzNCMTlGQjNDQgotOjEwMEE0MDAwNEEyMDRBNDkyM0Y4Nzk3MTNGOUQ3MzA0QTIxMEVFNUU1MwotOjEwMEE1MDAwMTM5N0U3QUE3N0U4RDc4NTdGNjY5ODU3MzVGRTAzREFCQwotOjEwMEE2MDAwNTUzN0FCOUUzMEM0MzVGMzZCMzhGRjZBQTYwNUVCQkIzOAotOjEwMEE3MDAwODI3ODgyN0UwODRGQ0NGRUU3NTkzRjA0Rjg1NzNEMzcxNQotOjEwMEE4MDAwMzAxRkY1ODdFQTk4MDMzRkI5ODlFQTQxM0JCOTRGRDQ1MwotOjEwMEE5MDAwMkJGMzcyM0Q1N0NFODdBRkVGOUNBMEZGNzM5MkZFQTc1QQotOjEwMEFBMDAwNkI1MjlGQTdGMTJGQkNEQzg3QzYzRjNCQzk5RjgxRjBFQgotOjEwMEFCMDAwQkZBMDg4N0FDRjU5NzkzREEwMDYzM0NFRjMwNTRFNEZCQgotOjEwMEFDMDAwOEY1OTdDQTY3MEIyMEIzMEEyRTdFQUI4RTZFMTA4MTdBRQotOjEwMEFEMDAwQzk4NzYwMEUzRTEzRDQzRkJCM0I4OUVBNEJCRUM1OEEzMwotOjEwMEFFMDAwMTlDMzc2RDVCQjEzQjc3MEY5NENFOEIzMzg1MUE4NUY3QQotOjEwMEFGMDAwRjUwQkRFM0ZFNjcxMUY5RTc5M0U0OThDQzdFNTY5MjMwMQotOjEwMEIwMDAwRkU4Q0VCNEQ0RTM1RDE3QTFGOTNGQzNCNTJFRTczNzc0MgotOjEwMEIxMDAwQzIyNDgwN0ZFNjA2NEQ1N0ZGNDJBNDc2QUYwN0ZBMUQzOAotOjEwMEIyMDAwRThENzdGOTdGRDBGNEM1NTQ4M0VFQjZGQzA1QjVGQjUzNAotOjEwMEIzMDAwRTM5MDE1RjdEM0IzOENGNkFCNzE1RUVFNTRBRTM3M0U0RgotOjEwMEI0MDAwRkY3QzE3OUU1NDhFMzcxMDAzMjU3RDM4QjkxQzZFNDFFQgotOjEwMEI1MDAwMzhGRkE5MEIxRkY3MjUwMTVGQUQ0NjE4QTQwNkUxQjNDNgotOjEwMEI2MDAwMkZDRjlCODRGQ0ZGMDJFNkYxNUM4ODgxN0MwRUNBNDE5QQotOjEwMEI3MDAwMUNERTMyMkZFMTZDQTRCMzY1N0Y5QTkzRDQwNkVERUZBRgotOjEwMEI4MDAwNDZGODEwQkY3N0Y3NDE3QUVDOTI1RjJDQTA4RkU0QTA3MwotOjEwMEI5MDAwM0U1QTM5RjQ2NDNBRUFBOTc1MDNFMTI4RTg1QUNGOUMzMQotOjEwMEJBMDAwMEQ3OTM2REM0RjczMzdFNkQ5Q0E0MkYwRDBCODYzRTgyNgotOjEwMEJCMDAwMTEyN0MwRjlEQzBFQjMxQkQ5NzJBM0Q5RkYxMzk0QTc3OAotOjEwMEJDMDAwMUI3N0E4Q0QzRTQ2RTUzNjg0RUYzOUZCRUJFRjYxQkRFMAotOjEwMEJEMDAwMzkxQjYzRjI1MTVFOTZFREU3NkVCODdGNjA0NTA4REMyNQotOjEwMEJFMDAwQjM3N0U4RjEzMEI4NTk5RjFGNzI0MDlGOUY4REJDNjE2OQotOjEwMEJGMDAwRDg3NzZGOTcxN0QwRTc4NzFFRDFFNzU5MDc2MDBCRjBCQQotOjEwMEMwMDAwQTBEQTM4OUVGNjhGNzAxRjcxMDI5RUZBRkI1NTM3N0U3MAotOjEwMEMxMDAwRUE2RjlGM0M2NTAyQ0ExNzFCNTU3NzNBOTRGNzVGNTJGQgotOjEwMEMyMDAwN0NGQjYwQzg5RkRBMzhEQjhENjhBRTU0N0RGMzdGMDhBQgotOjEwMEMzMDAwMzhBQ0ZDNzhGQzExM0MwRkNGQjJFNjNGNEMwMDNDQ0MwQQotOjEwMEM0MDAwNjk1OUE3OTk5REI4NkUzRERERUUzMzA5N0E3RDlFREIyQgotOjEwMEM1MDAwRDlFNkY5RjVFNTU3RUVFQkE1MDI4RjJDMkI5NDlFOEM4NwotOjEwMEM2MDAwNzg4NzcxRUZGNEMwODQ2QUVBMTcwRjNEMDk0NzY2NjUxQgotOjEwMEM3MDAwMTExMDNBQzBFQzg2RTY3NTFBQ0E2RDU3MUZDN0M3RTU1MgotOjEwMEM4MDAwNDFCQkM3ODlGMDI4MURDMUNCNkVBQzFGQ0I0RTBDODU3NAotOjEwMEM5MDAwN0ZBQ0Y5RUQ3ODlDNzdFOUMzMEFDOTBEQTVCRkNDN0M4MAotOjEwMENBMDAwMDNDRjgxRjYzRDMzNkVBM0Y0Q0U0MjVBQkZCNEU3Q0RGNQotOjEwMENCMDAwNkQ1MTAyOTE5MDc3OEM3MDFFNjg4Mzc2QjNGRDhBMUIwQwotOjEwMENDMDAwRTc1REI2REMxQUU0NjdGMEJGOEEzNTg2NzlBQzBGMjk5OAotOjEwMENEMDAwODdGOUNGM0Q3MEU4QUYwQUY0NUZCOTUxREY2RTFFRjBCRgotOjEwMENFMDAwNTlFNDVGNTU1QkJGQjU4NjdFOTc3QUUzOEQyRDlCNTVBMgotOjEwMENGMDAwNUNGNzZDMzk3RkRGMjg4NkVCQkE5MTU3NjVCRDg0N0M0MQotOjEwMEQwMDAwNzMxMjMzNzA2RTRDRUI1REJDMjMxNURCQURFN0VEODBFOQotOjEwMEQxMDAwNUQ5NkUyN0E2QkVEOUExM0Q3NUI2QjYzODEwODk4Qzc5NwotOjEwMEQyMDAwOTE0OENERTM4MEVGOTczNjQ0OTIxRDZEOEUxNUU0Qzk0RQotOjEwMEQzMDAwN0M0QTU5NTgzRUI2NzM0NzYzQkI0RkRGRTdGNkI0REFENwotOjEwMEQ0MDAwMzg4RUVGREE0RDBBRTk1MUI1NjhGQ0M0RkNCMzNDM0Y3QwotOjEwMEQ1MDAwOEYwNTY4MUQ0ODI3OUVEMEY1RjlGNTc5RDZDNEY1QUYwMwotOjEwMEQ2MDAwMUE3M0UwMTBDMkEzOEFCNTcxRkQwOUYwRTg5MUYwMDM4RgotOjEwMEQ3MDAwNzhENUMwM0E4RkM2QTJCQzY1NjhDRkRDNUUxQzc3ODE4RgotOjEwMEQ4MDAwOURDQjRGMEIwRTdDNkIwRDJEOTc3QUEwRDQ1M0E1N0Q3OAotOjEwMEQ5MDAwNzc1MzQ2NzEzODhFQjM0MkYxM0M2MTgzNzlBRTEwRjJERAotOjEwMERBMDAwQjU2RjVEMThEMUVGQ0NDREZDQkMwMTM5MzYwM0UxQjI5MwotOjEwMERCMDAwN0U1REEyMUJFNThDOTkyMDk3ODdFMUJFOTkxNzRFRjVDMQotOjEwMERDMDAwNDBERTI1QkI0QzA3QzhENTVCNUM1OEJGMzk4MEU3QzYwMQotOjEwMEREMDAwRkE0NzVEMjQ0NzgzRkM0QjcwRTk1ODFCRTZERkEyQTA2RAotOjEwMERFMDAwMUNDQ0U1OThGNUVCMzI0OTBFN0Y1NTlFNTM2QkI5REM3MAotOjEwMERGMDAwRDU4RDVDNENFNUFDMEY5N0UzM0ZDMkE1ODRDOEMxNUZCRAotOjEwMEUwMDAwRjRGNjdFOUFEQTNCQjhBRThBNjU5RTQ0M0M3NzJBMjY5MQotOjEwMEUxMDAwNkIyNkI0NTdCMUNBQjg2QjkyMUZCNjA5MzlCMjAzRDY2NAotOjEwMEUyMDAwOEZFQjM4QTkxNEJGNjUwQTkxNDdCRjE2RTdDOEYwMzFBOAotOjEwMEUzMDAwOUVFREEyOUUxQkVCNTU5ODI2M0Q3NDBCOEVGNzk4QzkyQwotOjEwMEU0MDAwODlFMzc1QzFEQkUzQzlDMDc5OUM1QzE3OTY4Rjc0MzY2MgotOjEwMEU1MDAwN0MwQ0I3MTcxRENCRTNGQzNERTIzQUU2RjFFMzc5OUE0RgotOjEwMEU2MDAwQzZGQjY1NjkyNjVEOUExMDBFRjQwN0ZEOUMyQ0UwRjYyMgotOjEwMEU3MDAwRUFDOEVCOEFDOTRFMDc2NzM1RjE3OUUzM0FFQ0EyOUZERAotOjEwMEU4MDAwMEFBREY4M0Y2RkVFNjYzRTEyM0U2QzFDOTcxNzRFMkU3MQotOjEwMEU5MDAwNTRCNkYwNzkwMTdFMjEzRkZDOTEzMEIyRUY5RDE0RTcwQQotOjEwMEVBMDAwOEY4NDMzRDBDRDMwQjJEMzBCN0VCNTRFRDBDQjNBMEIzRQotOjEwMEVCMDAwQTcwM0RGM0NBRTNGMDVFOTg1MTEzREFDMTc3QUQ2NEM2MAotOjEwMEVDMDAwODE1RkI2OTZDQkI1NDAyRjFDQ0U2QjEzMDVCRDMwRjZCNwotOjEwMEVEMDAwMzdBNDg3MDIyNzk3QjNBRjUxNUYwMkJDMEY0OEVCN0Q2MQotOjEwMEVFMDAwQTVERTI0RjFDRENDRkU2MUZGQ0MyRjUyQkI3RkQ3M0VENwotOjEwMEVGMDAwMUY5QzlGNTUyRjNDMUFDNUEwREU2OTczNTNCQzFCREE5QgotOjEwMEYwMDAwRDc2QzVCMTFFNTgxRjQ5NEQ5MTdFNTgwRjE0RkZCRDVERgotOjEwMEYxMDAwNDI3RjM3RjAyRTREOTM3NjY1OEY1RDAxRkUzMzFGRkZDNAotOjEwMEYyMDAwRTk0NDc5RTdFMTg5QjhCRUFGQjY1OTFDQzgxMjE2RUM5RQotOjEwMEYzMDAwQjA5MkZFMzQ3RkVGM0M5MkIzMjFERkNFRjNBQjNFNTc0RAotOjEwMEY0MDAwMzE3RjQwNkYzRkFGRkFGOUEzRjE0RTgyQjcyRkM5OTRCQQotOjEwMEY1MDAwODA2OTIwODk0MTNBN0ZBQkM1MUQ0MEJCRjQwN0FBMUJCRAotOjEwMEY2MDAwODYwMUI5Qjk2MzI1Q0VDRkQ4MUVFNzcxMTlGMEJEQTBBRgotOjEwMEY3MDAwNTkyREQ1QTJBRjJDNUYyMEY4Q0I4MkJEMEY3RjhFNzY4NgotOjEwMEY4MDAwQkQwNTA2N0I3REE1RjA1QjE4RURGNTkzRDIyMjdCN0QzOAotOjEwMEY5MDAwOUEwREZGQjg5RTVEOEY3MjEwQzBDNTFEQzA3RDBCRjMwQQotOjEwMEZBMDAwNDkyNzMyRTFGNkRFQzZFNzFFQ0Y2RDQ3Nzk2MUVCM0I5QwotOjEwMEZCMDAwNTE0QTRFRDA1RTJGRkQxOTlEQ0RFNTlCNUU3MUY2QkM2QQotOjEwMEZDMDAwMUYyRjA4QkI2RDEwNUY5QzZGMzkwRjI4QzgwMzQwNDE2RAotOjEwMEZEMDAwRTc2OThEMjUxMDc1MTNDMEEzNjZCMzg1Rjg0Q0NEQUVCNwotOjEwMEZFMDAwNjdCNzNGODk3NEY2MjcyQjlERTdENUJCREVGQ0MzOEQyMQotOjEwMEZGMDAwMjhFRkVFQjFGNDJBRTJDQkIwMkJGMTQxM0MyRDcwNzIxOAotOjEwMTAwMDAwM0I5OUM0NEJENTJGREZENDlDODNGOUY3MjVCMTQxRkMyNAotOjEwMTAxMDAwNTRFRjM5QTRCMUMxNTdDMjcxNkNGMzIxQURDRERFMERDRgotOjEwMTAyMDAwOUU5QURCQzc5MzlERThCOUFGMzVEQzA3QTc1RjUzNTg5RAotOjEwMTAzMDAwMUZENzk1RUQyQjM3QkYxOTg1RjIxOEMyMDlDRjI1ODkyNwotOjEwMTA0MDAwQUYyRUZDMTlFQTQzRkYxMzVGQjk4RUVBMzk1MEFGRThCRgotOjEwMTA1MDAwMDk3RkY5Nzg3NkEwNUVCRTNGOTJDNUMwRjg5NTFGNTkwQQotOjEwMTA2MDAwRkQ0NTg4RDdERDhCQTM3MDFEOUY5OUVCMzg5RDNGQkQ1MwotOjEwMTA3MDAwMjIxRUU1QkE0QThCMkZERTQxMjlGRjVFRjlDQ0ZENDRFMgotOjEwMTA4MDAwN0Y3Mzk1QkE3ODQ3MEVEMTc3QTI4OTY0MDY1RjIyQUU0NgotOjEwMTA5MDAwNkZGNkM2NjlCNEJFMzlDQzRCRjQ1N0Y5QjQ1QUVDODczNQotOjEwMTBBMDAwRjQ0QjMzMkJEQ0QzQ0QzRUY5NThGMEE1Q0ZCNjAwNTIyQwotOjEwMTBCMDAwNjE3RDlGQTFERDA2RjlDNkVGNTRBMUU3MkVBNEYzRkJFNQotOjEwMTBDMDAwN0VCMTU2QzYxNjUxRkU0QjIxQjdFRDRFMzM0OTdCOTY4NQotOjEwMTBEMDAwMkQ1NDVGNUNCMDc1NTUyQkUyRTc0Q0IyQTcwRkNFMTNEMQotOjEwMTBFMDAwRTBFMDEzRjA1MkJFODU3RUQ1REYxNkY0RTFGODYxNEVFNAotOjEwMTBGMDAwRjM3MEQxMEVDRUQxQjFGODFERUJCNzVBM0M2OEY3MEVBNAotOjEwMTEwMDAwNjkyN0Y0MzkzRUZFN0Q2MjdDOTg3NzM4RUFBQjlGQzU0QgotOjEwMTExMDAwNzNCOUREQjhCRUIwMDE5MjBGQjA1NjE2NEE1RjNERUQwRgotOjEwMTEyMDAwRkJBRDBGMTI1RDdERjEwMUU3MkJGM0ZEOTMwQUE5QkMyNgotOjEwMTEzMDAwRDUxMkU4ODNFNUZFNDM1MzE1RTIwQjU2MTZFODZFNUZDMQotOjEwMTE0MDAwNkZCNTg4N0RBRDJGODc3OTlBOTU1MEY4QkVDNkU1RDBFQQotOjEwMTE1MDAwMzkyMDc3MDU0MkY2NzE5MDZFQjRFMDc3NUFGNzIzNjIzMgotOjEwMTE2MDAwMUQ2REU0NEY5MzdFQjhCOTgyMUYxOEQ3NkRFNDBGMUYzMQotOjEwMTE3MDAwMUFGODgzNkNDRjM2NzZFRjA3MEFGMjA1MUY4RDVCMDNGMgotOjEwMTE4MDAwRTcwOUNBMTkzNTdGQjJEMkI5NTFCM0NCNTI4Q0YwMzlDNQotOjEwMTE5MDAwQkJGM0YwMUY2NkEyMUVEQTJDRjdCMTlFREYxQUY3NzFCRgotOjEwMTFBMDAwRTU4QkMzQkFEREM3NjdEN0U0NzVCRjhGRTE3QkI3RkJCQgotOjEwMTFCMDAwNzg4RDQyRkNFRDdGQ0E2RkUxQTQyM0JCNDE0RkZCNzVFNAotOjEwMTFDMDAwNkUwRkZDRjZEQjM0RTExNzE1RjBGQzkyRTU0NERGODQ4QQotOjEwMTFEMDAwODU4RUQyRkU4NDFGMDM1QzI1M0M4REZDRjNGMTM0MjcwMQotOjEwMTFFMDAwQzFEN0M4M0ZFMUVGMDMxNjAyNDcwOTNGNDk5RjhDNzlGOQotOjEwMTFGMDAwNjk5QzJFM0E5Njc0MkFFOUI4OEI0RThERUJENUMzRDFGMwotOjEwMTIwMDAwNTg3RTE4RjkxM0NDQTdGODY1MEJCNzlGQjUyODI0NkY0MwotOjEwMTIxMDAwNDNCQkI3OTJBRUEzN0RFQUExRTM4RjM1QkQ5NUQ0MkIzNgotOjEwMTIyMDAwMzRFRjM3RTQ5QjBERjUzRDg2N0NCMUExQkVENzkwQUY3RQotOjEwMTIzMDAwRDNENUFGMzk3MDU4RTNGQTQxNDA1N0NGNUE3RjNCRTlENQotOjEwMTI0MDAwMTk1N0NBMTE3RUVFRjdEOUZCQjlFNjQzQkFFOEQ3QTEyMAotOjEwMTI1MDAwMjE1RkI0MkM2M0JFNDg5NDc3MEZBQTI0RUY1RTc0NzZBNgotOjEwMTI2MDAwNDRBMTVDQjIyMjhDQ0I2RDE3MUQyMjFGQzNGMzFEQkRBMAotOjEwMTI3MDAwQjU5NUM4MTdFNUY3OEUzMDZFMjdCOTU4REMxMTE1MTNGMAotOjEwMTI4MDAwQTJBN0I3QjdBODUxNjg4RjZERjNCM0MyRUVFQzI4NjQ3QwotOjEwMTI5MDAwMTkwNUI4QjZCMTlFQ0FCOUZDNTZBMERBNTNFQUQxMUVGOAotOjEwMTJBMDAwREFBNEJBODE0QzU4QzVEMkJCQTIyOEVFQTEyNUVEOEU5NgotOjEwMTJCMDAwRTlGMDdERjZEQjJBODUwRjVDMENFNzc2MDVFNkYzOTgwRQotOjEwMTJDMDAwMzFFRUEwOUNBMzkwOUQ2MkJFQzc0NkMyQkFDQTVCNzhBRAotOjEwMTJEMDAwRkM0MUM1MUEzRDdFRTdEOEE3NDYwNzlDQzg3N0Y0NzE0NAotOjEwMTJFMDAwMDI3MzUxQUY0QjQzN0Q0RkZGQkQ4QUFEMjE3QUFCMzJDNAotOjEwMTJGMDAwRUMwQkFGQjBEMzFBRjc0NUQ5MDBCMTJGRjI1ODlFQjAxRQotOjEwMTMwMDAwQzc5MDlGNjM5MUUwRDcwNTZBQ0UxREQzMDFGRTE3OEY2QQotOjEwMTMxMDAwQThDQzBBRjlDRTE2OTVBREM0RjVFRTU0QzhERjgzMEVGRAotOjEwMTMyMDAwMDFEQzZGRjM2MTVGRTI3QzI0N0NDRUUxQkVDOUVDNTk0NQotOjEwMTMzMDAwMkUzOUY3RDIyN0MzN0Y4ODc0QjJFRkUzRENBNzIwM0RCNAotOjEwMTM0MDAwQjdFRjRGMTlBRjYyN0VGRjFGNTMzRTY2NTdENjFGRkJBNAotOjEwMTM1MDAwREE1RjY3MjExRkJFRjg5QTk1MjE3RDVGN0NFREQ3Mjk2MgotOjEwMTM2MDAwNjgxN0JDRjg4QTk1RjRFNThCQ0JBQ0RDREVGQzVBQTQ5QwotOjEwMTM3MDAwMUZGRDkxMTc5M0I5OUNEQjc4RjBFQkRDMzYzQTc3OTczOQotOjEwMTM4MDAwMTNCRUQ2MEVEMEI4RENENEYyRjc2MzY4QUZFRTZDODEzMgotOjEwMTM5MDAwNTVBMTNDRjE1QTA0RUQ5RjA1QUY4NDkxM0ZGQ0UyQzE5OQotOjEwMTNBMDAwQUY4Nzg3QzY0REZDNEZENzIzRkRERDE3MjNEOUY0MTczMAotOjEwMTNCMDAwOTE2RTg1NUNCRkUwRDUxQjlFNDU3RjZFRURERTQzNUE4NgotOjEwMTNDMDAwMzk5NDhGRkRENTdGRTcyMkZGQkNGODIyOTc5MzJFNThFMgotOjEwMTNEMDAwREE5RTQxNUJFMzg2QUQzNzNDNjI0OTQ0RkIxQzc0RDYyMAotOjEwMTNFMDAwMTdEMEI1RUQ4MUM5Qjg0RkFFODQwQjg3QzM0NTgwMDNENAotOjEwMTNGMDAwQUUwQkUwNTI4OTdDQkYyNzc4QkNGMDZGMEI4RkNGNjdCNAotOjEwMTQwMDAwNzE3RTc2M0Q0M0ZGNkYxMDJFMEFGNzIzQjQ0NEZBNkRDOAotOjEwMTQxMDAwMEFBRDlGN0Y3RkVERUI1Q0U0Mzc1NzVCRUY2RjcwQkRFQwotOjEwMTQyMDAwQkRGRkZGNTlFRkQ5N0Y1QkZDNzI3QTVGM0NDMDQ5RjM4NwotOjEwMTQzMDAwMzNEMkZEOTU3NEJERkYzRjI4QkYzQkQyNERGM0JEQzZFRgotOjEwMTQ0MDAwRkQxRTkxRkVFRkJBRkVGRjFCN0MwRkZDQjc1REVGRDVEMgotOjEwMTQ1MDAwRjBGREI2QzA3N0E0MDNGRDhBMTcwRkZFNzcwQUZCMEVENgotOjEwMTQ2MDAwRUIyRTRDRkY3N0RERDdGRjdDREQ1MjVFMUZBM0JBOEZEQQotOjEwMTQ3MDAwRTQ0MUZENzc1OEYzMDc2RTE3NDkxRkREQ0ExREY3MDdEMgotOjEwMTQ4MDAwRTNFRjQ4M0YxQUNCRjgzOTNERDY1NjRERjJFNkQ4N0UwOQotOjEwMTQ5MDAwNkI0OTJFNkU2NEY5RTQ4N0YwRjU1M0M5MUY0M0MxMTdGOQotOjEwMTRBMDAwMDA4NzVGMjdFNEY5Qzk5RjY0MEVGNDVCMENGOTMxNDlBQQotOjEwMTRCMDAwQjUxNDlGNjVENDFCQzc4NjRGMjg0NDc5RjRGMDUyOTgyMQotOjEwMTRDMDAwMTdGNDczMzhEMkU0NDA1RkYxQjg3RTZBQzA5QTRCNjk3MgotOjEwMTREMDAwM0JBNjZGQTVEQzdFMDRFNTk2NzE3NkJERkU3NEJCNDEyQwotOjEwMTRFMDAwMUZCQUQ1QTkyRjJGNjQyRkY2NDJGRjU5NjE4RTg1RjlCNwotOjEwMTRGMDAwNjEzRUUzQjE3RTg4REUzODI1REQ0MUYwQkE5NTM1MkRCOQotOjEwMTUwMDAwNzdEOEJGM0I5Q0I2QTU3MzNERjk0QTM4RkM3M0I4NURFQwotOjEwMTUxMDAwMDEyN0ExMjc5QjQ1N0QyM0RDQ0NGNjg3NUFCMTlEOTlGNQotOjEwMTUyMDAwODFERUNCRDc0QkZBQjJENDdCQUYwNjRGMjZGNDY5QjMzQQotOjEwMTUzMDAwMTg1QUMyRDdEQzhGRkI0OTQzRkEyNUI4NDhCODdGNTcwMQotOjEwMTU0MDAwNzg0QjNDMTlFMTJFRTEyQkUxNjZDNDQzM0QxQUEzN0FBNgotOjEwMTU1MDAwMDdFMURGQ0Y5QzY3QzY3RDc3QjM5MEUzQzc5OTYzNzhENwotOjEwMTU2MDAwQkU1RkFCNUE0Q0ZCRDFDRkU5RkMwQkI3MTlFNTkzRDE2OQotOjEwMTU3MDAwRjYxODhBRDc2NENFRTQxOEQ0Njc1MUM0RkMzNjA5RTQ1RgotOjEwMTU4MDAwQ0UxMTMxQzMxNTU4NkY5Mjk5RjlBQ0EwNkZBMjBGOEQ4RgotOjEwMTU5MDAwRUNBODBGOUFGRENCNUMzODBFQjdENzI2OUJCOTVEMUEyNQotOjEwMTVBMDAwNzZCNzJGM0M5RkVBN0IzNEM4OTdGRTZDMkVGMzQwRkQ0NAotOjEwMTVCMDAwRDIyNEU2NTY3ODdEMTYxRDRCRTE2ODRDQzVCODJDNDgwMAotOjEwMTVDMDAwQjE1RDY5MzRFRkI3QjQwRkYzMkZFM0Y4MjRCQzBDQzA1RQotOjEwMTVEMDAwMzQ5NUZBRjU5ODYyNzlGQkE4N0M2QUVGMzNGMUY2MUUzMAotOjEwMTVFMDAwMzNDNjdCQTU3MUZCN0FDNzBBMkJFOTFGQTVBQjkyMzNFMwotOjEwMTVGMDAwOTA3RjE0OEREMURCOEQ5MzMzQjg5RDU5QTZBQjMzRjgxMgotOjEwMTYwMDAwN0U1NzRERUUwNDk0OEJDQjk2MEYyNDdENDgwRDJGQUU2NAotOjEwMTYxMDAwN0QwOUVERkRCQjIzODgxRTRCNTdERTMzNjExOENFNkY2RAotOjEwMTYyMDAwNzc5QzFCQTc3NzY2RTI5RUUxQkNGRThDRkIzRjg0RUZCNAotOjEwMTYzMDAwREUxRDYxRjQ3RDY3ODZGNzY4M0FGNDc3NDY3MUNFN0FFRAotOjEwMTY0MDAwMDkzRTk0NEQzQkFDMjVDMDEwREVFNjQ5RTdEMUZFMzc5QwotOjEwMTY1MDAwRDFCN0U3M0RGNDMzNEU5Q0FBNTJGRDg5OENDNzNEQjIwOQotOjEwMTY2MDAwRTUxMUU0OEY5RUUwRkJEQzlDMDBGRDREMDA2NTAzQ0JBMwotOjEwMTY3MDAwREJDMzFDMjkwQjYxRkVBNUMyREU3QjUyRUMxNzM1OUMzNwotOjEwMTY4MDAwNzk1RkI0RTNCQzkyMzM1MkUxRkIwNEQ2N0QxQzcwNkFFRgotOjEwMTY5MDAwODZBODNGNDZEOTg4RkVBMUZFNjNCOTNENUVENkM3N0VDNwotOjEwMTZBMDAwQjBERjJDMDE4RjhCRTlEQ0VFMjRGMzAwNTdBQTVGQjE4OQotOjEwMTZCMDAwREFEQTlFODY3QUNGNkE0QjIwMTNEMjU5NTk2MzJFRTEyQgotOjEwMTZDMDAwM0E4QjUyRDlGODBEMDhGNzA3NTRCNjg1RTZEQjUxNEEzNAotOjEwMTZEMDAwNzZFRUM4MkMyN0UyQzEwQjI0NERGMTg1NEQyRTI3REE3QQotOjEwMTZFMDAwQkREQTQ3MzcwN0QwM0ZEMEZFODRDQkRERTgyNDJDNTM0QQotOjEwMTZGMDAwM0M4RUQ0QjNEQTQ3MDcwNkEwNURCRTIzOEZGQjE5OEU1QwotOjEwMTcwMDAwMzlEQTIyNTEzRjJDQjdEQjI4M0U0N0M2RjVDQzc2RjBCQwotOjEwMTcxMDAwN0RERUJGQjE2REVERjVBODc3M0VBQUJBQjc0MDdFRjY4MwotOjEwMTcyMDAwQTNEQ0VGRjIxN0JCQ0RBRkEwQkVCNjlFRUY1M0I2NDYxQgotOjEwMTczMDAwMUZDN0MzMUM2RUIyRjc5NDM3OERENjUwQkZBQ0IwN0JCOQotOjEwMTc0MDAwMzQ1QzY3NzZBNjM3MjYwM0Y3RDEzNzAwQkZFMTE4QzdBOAotOjEwMTc1MDAwQzk2ODMzOTQzNjk1NTI5Qzg5MUEwNUZCMEVGNzg5RDlDRQotOjEwMTc2MDAwMTk4NTdBQUYzMTBFNjg4MTg4RkI5MUY5MTdDMkJDN0Q2QgotOjEwMTc3MDAwMzMwMDRFNjVEMUNFREQ0ODJGQzdFQkQzQzhFRTM5NDNEOQotOjEwMTc4MDAwRDA1RDExQzYzMUEyN0ZDMkRDOTY4OEYzNzkwNzhEQjg4RgotOjEwMTc5MDAwMzA3RTUxQUMyM0MzNEVGNDFDQzYxMDBFRUQxNjQ3MDYyNgotOjEwMTdBMDAwRDI3N0ZCOEEzMDEzRkFEOThBOTY3MUJBODY3RDY2MzM2RQotOjEwMTdCMDAwNDNGQjA3Q0QyQzFDRkQwNkE3RDI3OUJGMjU0QkNEQzUxOQotOjEwMTdDMDAwOUIyMURGQ0ZDNkNDOTFCMTQ4NTc3OTQ0RDc5QkIzQkM5RQotOjEwMTdEMDAwMTdEM0ExRkY1MzNGNjIyMzkwMUVDQUQ3QUMyM0ZGOEFDMQotOjEwMTdFMDAwQTQwQjY2NkUxRDE3MDdFMzlDREFFNkNBNDdCRTI5RTkxQgotOjEwMTdGMDAwNjg3M0Q2OTgzQzg0NEIxNzNENEM1NTg4MEUyMDNEOTQxOQotOjEwMTgwMDAwNDZGNDMwNzkzODk2MTc4RDA5MEM1ODk0ODNGQTY4MEQ5MAotOjEwMTgxMDAwRjNFMEY5OUVDMERDMjgyNzc0QjIwRUYyM0Y3NkRBMzU4OQotOjEwMTgyMDAwMjdEQUI5MjQzRjkxN0MwM0YwRUFCMUM1MDdFOTYwM0JCMAotOjEwMTgzMDAwOUNGNzY2MEI2MzNCMUE2Qzk0M0VERkUwNjA2NkUwNzFEOAotOjEwMTg0MDAwM0IxQjEyMjhCRkJCQzE0OTY5NzM0MzE2N0Q3RkIxQzFFMQotOjEwMTg1MDAwNERGOUJEMEQyMzI4QkZBRkMxNDNGOTAzMEQ4NTk0QkVEQgotOjEwMTg2MDAwRDI1MDRDREYyNTVGMDJCODEwMUY5MjdDNDVGMkEzNzI2NAotOjEwMTg3MDAwQkJENjhFRkU0OEM5OTc4Qzc0MzMwQkMwM0IyQTlGREFDNwotOjEwMTg4MDAwMTNERjkzRkMwRUQ3NjFDQTBGRjIyMzg5REY1NEE1RDg2QQotOjEwMTg5MDAwOTdFMDQyM0VENjM2MDNGMTVGQTA5RURCQjUxRkY1RjIxRQotOjEwMThBMDAwNEFCQjlCRjQ3NEM2Rjk1RTI3RDAyQkMyMjU0NTYzMDc1QgotOjEwMThCMDAwRDBFRURBQjhEMEQzQkVDQTE1ODRGRkREOTUwQTMzODdERgotOjEwMThDMDAwRDBENTNENzU2MUNDMUM3MjZFREM1QjFGQTNDQjk3RDQ2OQotOjEwMThEMDAwRkZGRUNEM0VEMEZGMURCREJDNTU0ODdGQzc3RUZDRTk1NQotOjEwMThFMDAwRDM3Rjg0RUY5QjdFN0MyNjFERjEwREYzRDhGNjM4OEVENgotOjEwMThGMDAwQkIyNEJDNkIxRUIxOTg1RjZFMjE3RjU0N0Y2OTA3ODE0QQotOjEwMTkwMDAwM0ZDNDRCMTlFM0ZCNkREMzhGRkY0NkZCQkJCRERFRUE0MwotOjEwMTkxMDAwNDQ3OUY4MjNDNDEzQzBGNUNGMDI0RjY1RjU1NjgyNUZCMgotOjEwMTkyMDAwRTk4QTEzQkJGNkUzM0U1RkEyMTE5RjJCNUIyRUY2RTEyMwotOjEwMTkzMDAwNkE4MDY3ODg3RkY3NzgyMjIzN0IwNDQ4RDMxNEFGN0VDMAotOjEwMTk0MDAwRkM0NzVBMjAwMkZBM0ZBRUYwRkRBQjgwNTA1MDgyNzE0NgotOjEwMTk1MDAwN0ZBQjdGN0QxNEY3QkY1MjdGODRGQ0U3NUU5QjNENDBFOQotOjEwMTk2MDAwNzI4MENGNzIyRUI0M0ZBNUZFMkRBQUM3REFGQUM1QTBBOQotOjEwMTk3MDAwQkQ4NENFQjE1QkQwRUZFOEQxOUNCMDZFQTQ2OUM0NUJFRQotOjEwMTk4MDAwNTlENkVCMkMxMUZEMjY0RDhBMDNCNzRDODVGODVFQjE3NAotOjEwMTk5MDAwNUFFMUZFNDlCMzNCNjEyQUM4N0Q4RjY0QTg4NEM3RjcyQQotOjEwMTlBMDAwRDJDREI0MkY3MzMyOTg4ODVGNjhBMkYzNDlEMjZCQzU0OQotOjEwMTlCMDAwMUE2ODg3RkJBMjI5NEY5QjEzQzI4N0NCQzRGN0YyMkM2RQotOjEwMTlDMDAwMTNBNUYyRkIxNkQxNkZERkQ1NzlEMzUxOUVFODhCRTVENQotOjEwMTlEMDAwMzk5OEU2NEY0N0Y4RjZCNThGMzcyQjIxRjhERjk4NjEzNQotOjEwMTlFMDAwMTZGM0UwRTNFN0UwNjY4M0ZGN0IyODJCNTU5QjlEODM5RQotOjEwMTlGMDAwRjhFMUU3OTcxQ0E3MkMyQjdGMjVDNjcxOTZBRDE5OERCMgotOjEwMUEwMDAwREM5NzM1NUFEQzA5QkRBMERFQjZBRTdFMUM1QzVFQjA0QwotOjEwMUExMDAwRjE3OEU1OUExRUNFMEY2OTNGM0I4NUZGQkM4MUQ2NEQxQwotOjEwMUEyMDAwNzZEREFBRERCRkQ4OEQ3MUZDNTUxRjVCMDlCRjU1NDMxQwotOjEwMUEzMDAwNDRGQzU0OEU3RkY4MTQzMjM0RUFFREQ1RTM3RUYxNDk0QwotOjEwMUE0MDAwMTRGOTFGRjZGMkI4NEE0OEI5M0Q3NTQ5MjVCN0JGQkEyRgotOjEwMUE1MDAwNjE1Rjc1RTNGRjc5NjNGN0M3NTFERERBQTlGN0FBRDdBQwotOjEwMUE2MDAwNjRBNzVFQTA3QzEzODVGMjgzNUM0RkMxQzEyRkUzNjkzQwotOjEwMUE3MDAwMUVDQTY1RjJGRjJDMzhCODIyQkVCQjdCMzc0NjdCNzU4OQotOjEwMUE4MDAwOTczRDVCRDhFRDhDRTU0NjdCREREMTBDQkQxRDFCMDQ3RAotOjEwMUE5MDAwNDRCQUM3MjVFRDc1NENDRDg5NDZGQkZFOTdFMjlFNDdCQgotOjEwMUFBMDAwNEY3QThEQjQ2RjJGRDgwMDlEQzRDMUZFMzQzQkEzRDFCMwotOjEwMUFCMDAwNUY3NUIxMDc3OURBOTlDOUNGRkJGM0MyMUU3RTcxQTdCMgotOjEwMUFDMDAwNEE3QUNFQzU5RDkxQjQ5RkU2RUZGQ0Q5NUJFODNGOUM3NgotOjEwMUFEMDAwQkY1NUExNjlENEIyNTY4MjFCQzA5M0Q5NDJDRjMxOEM3NQotOjEwMUFFMDAwMzc4QkJCNzJERTlERkVGNDY4M0M0N0FBN0YxMTU5ODc5NQotOjEwMUFGMDAwNzQzNkFGNTlGMTZDODNGOTc0REE5Q0QxQkQ0M0U2RjNDNwotOjEwMUIwMDAwOERBMEIzNkE2QkYzNzA4MkIzOUMzRkYyQzVERUMxN0FERAotOjEwMUIxMDAwRjM1QTdFNDZGNjYzQTg3NzgxRTRBMDE3MjIxOEJGRkYyOAotOjEwMUIyMDAwRDFGMTFFQ0VGM0VDQzZBMTZFRjRGQkNENkJERTMzOUY3QwotOjEwMUIzMDAwRTQ4ODlEMTEwRTE0ODFDRTg4Mzg2MUQ5OEYyRDkzOEY0MgotOjEwMUI0MDAwNjdDQkU0NzJDQjU5RTEwRjNBQkI1QjI1N0U4NkYzQzRDOQotOjEwMUI1MDAwRkQ3NTQ2RDFDN0UzNDU4OTc2NTEwMjZFMkZFMkZFRUU1MAotOjEwMUI2MDAwMURBQzNGQUZCOTNENkEwMEQ0RkZFQ0MwRUYyOTREQzhCMgotOjEwMUI3MDAwRTQ3QzYwOUVCRDM1MTdDRkRGQ0ZGNjQ2OTAzRkVCQjNEOAotOjEwMUI4MDAwQkQ0RjhEN0YxNUM2M0JERjNDQkExN0VFMDdEOTdGNDZBOAotOjEwMUI5MDAwQTY4NUVBOUZERkE4MTYyMkJDOTg5RkM3QkRENDIyN0NFOQotOjEwMUJBMDAwODc4NkNFMzM2RUIzQ0YxNUJBRUY3OERDQ0ZEOUJEQkYwMQotOjEwMUJCMDAwOEMzMkU1MDRGMTU5NkJGM0RBMTI1MzcxRkY5NDE2MjM1QQotOjEwMUJDMDAwREYzOEE1MzhBOTlFNjVFRjY4MUZERTYzNUFEMDkyQzczQgotOjEwMUJEMDAwOTA5RTY5REYyNTUyRkRENUE2OTA3QTlBQzU0RDRDRDFDRAotOjEwMUJFMDAwN0M2MDkyMjc4OUUwMkNFRTIxODk3ODc5QkM1NzQ3RjdGMQotOjEwMUJGMDAwOEEyNkQ5QzgzRjMxNkI4OEYzQUVCQjkxNEZCRTYzRTFGMwotOjEwMUMwMDAwNzhFOUU3N0MxQ0U1Qjc1OUVGQzc1MURDRDQyMjk3RjM5QwotOjEwMUMxMDAwMkU5Q0ZGRTJERkFBMTRFRjNCNkJBOEUwMDMwOTZEQzMyMwotOjEwMUMyMDAwMzA2RUIxNjZCNUMyM0NCMENFNzYxNzk3MUI2QUZDMkFGRgotOjEwMUMzMDAwRjM0MkJFMkZEMDgzMEY0MDMxMzEzMzU1RjBEMzQwMDZFRAotOjEwMUM0MDAwREUwNzdDQjJEMkU0RDFFMEZDM0JBNjMxOUY4QTc2QTNDQQotOjEwMUM1MDAwMTc3OTNDNzM0RDJBOEYxQjdFMTJFOTFFRDI5QUQ4NDAwOQotOjEwMUM2MDAwNDYxQ0Y0Nzc0RUUwQjM2NjcyMjAwM0UzMjQ2QTVFNENCMAotOjEwMUM3MDAwQTQzODg5NzMxQUY3NUJFMjc3RjQ5M0Q2RTQ0MzdCQTgyMAotOjEwMUM4MDAwRDc0QkM0QzM2MkZCOTgxMEZBQTkyOTczM0JCMTlFMUFDMwotOjEwMUM5MDAwRUI3NkU2RDk3MUJFOEUwQjI0QzdCRTE0Qzk1MDhFMzVDMwotOjEwMUNBMDAwRUQ4RkU0NzE0RTNGMEZEQjYyMERDMTUzOTlBMEI3NUUxQgotOjEwMUNCMDAwMDI4RjZDMjY4Rjg3N0M0Q0M0NjMzRkI2MkREMThGRkE4MAotOjEwMUNDMDAwOUJBQ0ZGOThDNTNCMDNFMTgwRUI0MEY5N0Q5RUQ2OTQyOQotOjEwMUNEMDAwODFGMkFEOUNFRkJDQTgyNjlBRTczOTQxREZGM0MyOUJBNQotOjEwMUNFMDAwNzhCQ0I0QzZFMzI5QjEzRUU2REIyRDhDRTJCODNCOUU1RQotOjEwMUNGMDAwQjM1MjNDQzk5OUM0RDY3RDM4RkU5OUU3MDYzMjVDN0Y2MQotOjEwMUQwMDAwQkJDQjNGRTcwMDk1ODNGQzA4NzhBQjdBREUxQUMwRjVDMQotOjEwMUQxMDAwOUM3RThFREI5QjRGNUJCODNDNzY3QTUyODIxM0YxNTZFOQotOjEwMUQyMDAwMzg3OUMzMkNCMkM3NkNCNTJBODhGN0QzMEFEMzEyQjA1RQotOjEwMUQzMDAwN0M1QjZGQjcwRkRCMzdENDUzOUM3NDE1QjAwOUJDOEYzNQotOjEwMUQ0MDAwMDM2OTIxREVBQjM5QkQ2RDIwQzU4NzlEN0U1QkM1MUI1OAotOjEwMUQ1MDAwNTFGODdEMzU3RUY3QjJBNjU5M0Y0MDc4RUNFMEZBRDNEMgotOjEwMUQ2MDAwOTlFN0ZGM0UzMEY0MUU5QTRDQUJCNkVBRTNFMDI0OURCRgotOjEwMUQ3MDAwQzhGMjQ2QjEyRjFCMDU5QzU3NjVGMjczQUIzNkEyRjkyQQotOjEwMUQ4MDAwQjE1NDVBMjc4NzNCRTA4OUY0M0UzOEY4MjM5RkJBMEVCNgotOjEwMUQ5MDAwRTMyMEQyMTVFNDFCNEYwMjVEM0Q4NTc2ODUxRDVDQkZCNwotOjEwMURBMDAwM0FCM0QzNDI3MUUxNTVGQjIzM0QxNDc3QjZFQTdBMTM3NwotOjEwMURCMDAwQzU0MUE4NUMwRUFGMzIwMUY4Mjg1NUE4REZBQUM5NTk2MQotOjEwMURDMDAwNzRERjE3RTA0RDdBNkNDNzM2NTU4Q0MzOTgxREQ3QkRBQwotOjEwMUREMDAwOURDN0Y5MTZBMUFDNDhFNTgzQTlGQ0I0Qzg5RkRFMzdCRQotOjEwMURFMDAwOThFNDNBRThERjgzRjc5NUFBN0VGMDQzMEVDNzI5OTU3OQotOjEwMURGMDAwRUYzMkIyNjNEODg4QkZENjc0Rjk3MTQ2NDZFMzc5NTc5QgotOjEwMUUwMDAwQkJFQUE2NjhCQzA3QzhERTU3MTlDQTI3NDYzODVEMzI0OAotOjEwMUUxMDAwQkJGQjIwNUZGRDgzRTA1RkQ1RkI5RUQ2OTAxRjU0OEJGQwotOjEwMUUyMDAwRkIyMUQ1Q0YyQkRDOUYwQ0ZCMENFRjQ5NTZBRkJDRTk1NwotOjEwMUUzMDAwNzFBMkNGRjcyQzJDMURENjczQUVGOTY3NTFBMUY4MDgwQgotOjEwMUU0MDAwMDhCRUQ2NTU1RjczNTNGRDZBQTg4RkZENTRBRjdDMjczQgotOjEwMUU1MDAwOEFFNkIzREQ0MjcxMjY0NjNDNUU3M0ZCRTdENTZCNkFDQQotOjEwMUU2MDAwREY0NTFGQ0REQzhFNzJDNUZBNTlFQjdGN0MwQ0ZEN0YwMAotOjEwMUU3MDAwQjEzM0NDRURBM0FGQ0Q3NEFGRUNBQ0E1NzkwRUFFRkYxMgotOjEwMUU4MDAwRUNBRTMwRTI0NzY3NjMzODdGRjgwQ0Y4QTcyRjEzRTcxMgotOjEwMUU5MDAwNzFGQjRGMjkyRUVCNzc1M0U4M0VEQzVDQkZCRTVGMzkwOAotOjEwMUVBMDAwRUU5QkM4QjczMTlFMjRDRTFEOEQ3MTdEQjVFRjczRkVCQwotOjEwMUVCMDAwMDY3OEI5ODNEQUJGNkZBMUY2QzY3NTZDMTVGQ0JFNkJFOAotOjEwMUVDMDAwN0ZFRThBMjA3QTM4REI5N0UzRTVFQ0VFNEMzQThGREE0NgotOjEwMUVEMDAwNjMzODlEQzM3QzUzRjBGRURDRDk1RDk5Nzk3NDJGMEQ3NgotOjEwMUVFMDAwODUxQkEwODcyQUExREY5RThENjk0RTcxODQ5NEI3NUIwNAotOjEwMUVGMDAwODQ5RTE2ODA5QTQ4MzdEODA2RTRCRUFBN0EyRTU3NTU5MwotOjEwMUYwMDAwREJENjUwN0MwOEM2RDUwRUNGQTczNDYwOERCRDMyM0VERgotOjEwMUYxMDAwMTZFODk1RjRDNzdFNTk3QzdGMzExQzJGNUVDNDZGOTMwMQotOjEwMUYyMDAwQkNEM0FDMjFGRkY2MEFCOUIwNjZBNzMxQkU5Njk3RkZDNQotOjEwMUYzMDAwNURFQzRGOUM2RDJGMTlDRjhCNzRFODUzMjhDRUE0N0E5QgotOjEwMUY0MDAwRjlDMjc5NDhFN0Q1NzVFQkVFQzY3RDI2RTc1RjZENjY4OQotOjEwMUY1MDAwODVBODg3QjUyQjJBQ0RBMzNEOENERDNCMTlDRjhERDAyRAotOjEwMUY2MDAwNzE0MkU0MzYyREFCQ0I5RUNBMUNGMTI0QUZEMjM5MTY5OAotOjEwMUY3MDAwOUVFNUU0NzQ4MzI3MjZERTEzNURBRUFDQTE3MTVDNTI0RQotOjEwMUY4MDAwOUZFNUVCOTI3MDAyNzA2ODE4RDdENzNFNUE5NEY3QjA2RAotOjEwMUY5MDAwNkUzOTRGRTNCQUU1N0M1MkIyQjg5REE0RERFNUZDRTlBOQotOjEwMUZBMDAwNDhDNEYzNkY1NEJBNEY3QkU5OUJBMUQxQjFEREM4NjUzQQotOjEwMUZCMDAwQzE3MzVEMEJDNkI3QzJGQ0IzOTFGNkQwRUU5MkM5RUQwQQotOjEwMUZDMDAwQThENTE4M0YwQkYzQ0NEOEE4OEZFQkNFREFBQUNGMEY0OQotOjEwMUZEMDAwREFBOUNGRTdFQ0Q1RTc3MzVCRjQ3OUY3MUJGQTdDMUM0MQotOjEwMUZFMDAwOEVEQjlCRUJEOTc4N0YxN0Y1NkM0QzUxQ0Y3NjVBQjlDNQotOjEwMUZGMDAwOUU4RDc5RDRCMzMxNDUzRDFCQkZBMzlFOEQ3OUQ0QjM1QgotOjEwMjAwMDAwMzE4RjdBMzZFNjI1QkM1MURGQzYzQ0VBREI1ODVFMjJDQQotOjEwMjAxMDAwRTA1NDIzRTIyNDExMEY0OEVGRUNFNTMwREQ3RDlGOEI4NwotOjEwMjAyMDAwMDdGOTNEMEVBMDAzQkU2RjY2NjhCNDZGOUVDNDFBQTQ4NAotOjEwMjAzMDAwNzc3MEJCNTJERjI5MzYyN0M2RkJGQTYyQkRFM0IzODY1MQotOjEwMjA0MDAwRTE3RDhGRDY5NTg5ODgzNzczMUJDNTlEMkU3ODg1QzcwRQotOjEwMjA1MDAwOURENkU0ODdEOUQxQkVEMUI2RTJCMzk1MThDRTM5MzUzNQotOjEwMjA2MDAwRDY3QjdCNTY2RkJDQ0ZEOUIxMURFMTVCNUI3Rjk4RUUxMQotOjEwMjA3MDAwQkRCNzJENzVCRTdGMEJDNzFGRDk1OTU4NjUyQ0M5NERFQgotOjEwMjA4MDAwQTU3OENFQzVGNjhDNDc2M0RDMzc1QkEzOEZGMzM2QzZFNQotOjEwMjA5MDAwN0QxQkUzQkQ4RDc0MjBFNUJENEQ5NjhFNDRFNEVCMjc5QQotOjEwMjBBMDAwOUVCM0FEQzFGOTlGMDgxM0Y3NEZBNkRCMENGRTdFMjE0RQotOjEwMjBCMDAwQTdBRDU1QjZFMDc5NUQ5MzE1Q0JGRDQ5NDc0MDNFRUY5RQotOjEwMjBDMDAwRTY5Qzk1NjlGOUU1QTEyNDg3NzdFNUQ3MjgyNkJBMTcxNAotOjEwMjBEMDAwOTcxMDRGRTdEMDYyMzFBNzE0QTVBMzdEMTVGMkI5NzkwNwotOjEwMjBFMDAwMjYzQTM3MkY4MTVDODZFMzVERkE0MDI1RjkyMTczODMxOAotOjEwMjBGMDAwNDlCNzlFODFGRTcwMUQ3RDY1RUY4ODM1REM2QkU4QUJDRQotOjEwMjEwMDAwQUIzRkU0NDBBQUUxNUVDMzIwN0QxQ0ZERDRBNTg3NTAwRgotOjEwMjExMDAwQkY5RkIyNjZBOEFFNUU0NUYxNEQwNjM4OEE3OTBCRjlDRAotOjEwMjEyMDAwQjUwMkNFMEYwRkFDRUZDOTI1MUI1MjEwQkY4QkU3NzU2MAotOjEwMjEzMDAwQjZBRjQyRjlGNEE1MzBCQTE3NTY4OUZGMEZGODYyMjVGOQotOjEwMjE0MDAwRjQ4OUY3MTkyQkY3OEFGQkMwRjVGQTczQjg1QzlDNDM0NgotOjEwMjE1MDAwOTU2NkU2NzNDNDA2RTlCMEQyQzEzQzMxRDA3RURFQTBGQwotOjEwMjE2MDAwRDZEQzAwRUExNTZGRkY3RUI4MjMxNUY1OEFEMTdEOTA4NQotOjEwMjE3MDAwMUZBNTU4M0MxNDA3NUJCMzI3M0Q2NjI5RjRCQjIyQ0Q0RAotOjEwMjE4MDAwRkIxNEQyRERDOUE2QzMzRjI5QzFGMzcwMEZEN0Y3NEVBOAotOjEwMjE5MDAwQUNGOTY1MTRDNTg5MDk3QTRCQjEzOEMyMTFFRjlCOUIyNAotOjEwMjFBMDAwNzg3QzFDREFDN0Q0RDgyMDVENkM2RThBMEIxRjYwMEY1OAotOjEwMjFCMDAwQUUzNzQ4MDdERjEwOUUwMDNGREM4RTUzRjkzQUY5M0RGOQotOjEwMjFDMDAwM0E5QkM1N0E0NzJCM0U5NEE3RTVGQTE2ODk3Mzg1MEQ4RAotOjEwMjFEMDAwRTBGRERDMjdGMjI3ODU3RTIxRDc3OTZFRTBBMTVDMjcyMAotOjEwMjFFMDAwREVCRjY4Mzg5MEEyMjIzRjM3RUREQzlFMDhBOURCRUEwQgotOjEwMjFGMDAwREQ4N0ZCQUU3MjczRkExRjQ3QzIzODU1MUZGMkY1RkMzQwotOjEwMjIwMDAwNjVGREQ4QTgxQjUwRkVEQzY1NzExNzQxN0U1NUQzQjMyMAotOjEwMjIxMDAwMUFFQUQ5NTU2NkJGNDZGMTk1Q0Y2REQ2MzBCRUY4N0IyOAotOjEwMjIyMDAwM0IzNkQzRjczOTNCNEEyOTlFNzIyRUFCMjNGREYzOTRGQwotOjEwMjIzMDAwN0M3NzQwQzBBMzcyOENCMkQxMDFGMzRFMUFDOEU1QkVDMAotOjEwMjI0MDAwQ0E3MEVFQkYwM0Y5RTg0RDdDRjdFM0QyMEUyNTBGRTMyOQotOjEwMjI1MDAwNzhBNjE2RUZEMTRBRTFGQkZCODJDRjE4Rjc0OUU3QkIxRQotOjEwMjI2MDAwNTMwQTdBMTMzQ0Y4N0Q4RDBGMTk2OEYxNjk1N0VFOEI4QwotOjEwMjI3MDAwMjk5NzVEQjQyRkE2NUVDRTI2QkQ2QzVBNjAyMEQ3N0YwRAotOjEwMjI4MDAwNzMwQ0ZBRUZCQkZDREQ4NUNFMTZCRTBGMkFCNTQwQUY0RQotOjEwMjI5MDAwMjlCODRGNUVCMzkwOUM1QjBCRTdDRDg4N0NENEFCMTkxQgotOjEwMjJBMDAwQkIxMUQyRTI5MUFBOEU1RTE3OEM4QkQwRDFGMzc0MTYzQgotOjEwMjJCMDAwQjI0RkEwQkYzQjMxNjgyNDI0M0ZCNTI4NEQ1N0ZGQUUzNQotOjEwMjJDMDAwQTlEOTA2RkFDRjBGOTYxMzFGQjk1MTc3QkZBRTc2ODlGOQotOjEwMjJEMDAwQ0ZBOTkwOUMzOTQ2RkY5REYxMzg0MUM2NkVEM0I1QUY2QQotOjEwMjJFMDAwNjU5MzgzRjU5MEJFQjc3MjM5Qjg3NjZGQ0MxNkI0RjdBNAotOjEwMjJGMDAwNTU5QUI4RkUzNEREQ0JCRkNGM0ZDMEJGQjNFOTRDQjc3MgotOjEwMjMwMDAwMEZGQkE3QjlGRkM4Q0Y0NTBCRjkwNUE0M0Q3RDNBRkVFOQotOjEwMjMxMDAwQkIxQkY4QzM0OURFNzUzRjFDRUZDNUEzM0Q0Mjc3N0Y2OQotOjEwMjMyMDAwNUFGODAzNzFERTg4ODc1QTYxMzdBQUNERTI3NkEzNUEzQwotOjEwMjMzMDAwNUZBQjg2RUYwRTAwRkNDRDcxQjE1NENGMTY4N0YxOTFFMwotOjEwMjM0MDAwNEQwQUQ5MTUzMTVENDJGMTkyRkEzODJDRUMwRkUzMThBMQotOjEwMjM1MDAwRTcxRjUxNEI3MTlGMThDQjJCRjFERDFGQzRFRjJCM0NCNgotOjEwMjM2MDAwQUU3NEVFMDY2MzFDRTQxQUYyNDdDRTQ3N0I1MDA4REVEQgotOjEwMjM3MDAwRUUxRUU4MTRGMjhBN0Y2NTVGODQ1RjkxOTI0N0Y3MjIzMAotOjEwMjM4MDAwNzcxRUQyMzBDRTZFRUFENDk4M0NEQzM3NDZGQTkyN0M4NwotOjEwMjM5MDAwMURGNjMzRTlERjlERUYxRTI2RkFFQUFDMzQxM0ZENUUyRAotOjEwMjNBMDAwMEQwRUYzM0REQzhFNkFBNEJCMzlBQzU1QzM3QkUyNzNFMgotOjEwMjNCMDAwRjYyQTZFRDQ0N0IxMUVDMkEzMkZEMkEzMDExRTcxQjE1QgotOjEwMjNDMDAwNTdDMjQxQzJBNzBCNUU3QjhENzE2RTFDNEU3MzBGMjhFNgotOjEwMjNEMDAwRkU0MDM3NzAzMkNFQkIyN0I4QzlGNUNDRjE3QUM3MjM5RgotOjEwMjNFMDAwNUY5MEVCOUE4QkYzQzdGRTYxRkVEOEJGRjQ0M0IwMTE0OAotOjEwMjNGMDAwQzZGRDk5NDZGNkE5RjlDNTNDM0VENjQ4MEY5MzJGNzMwMgotOjEwMjQwMDAwQkJDQjlEOTdDRDk0NEUyREQyRUY0NzZDODdGQjYyREEwNAotOjEwMjQxMDAwRTU3ODJBRkZBRUY0MzIxRkU2QzlFRjNGNUQxQjlEQzg4OQotOjEwMjQyMDAwNzU0OEJFMUJEQzBGRkNERUMwRDVERTA1MzJEQTFERTdDOQotOjEwMjQzMDAwMEUxNEYxQzhDM0Q4MzA1RDNDQjJFMEFCQzZGNkM2NzgyNgotOjEwMjQ0MDAwNjQyOTA3MThDRjk3RDI0ODEzQzU0RDc2REE1MzQ5QkU5MQotOjEwMjQ1MDAwOTA3Q0Q2MkJDRTBGRUY4QTJGQTk5RTE3RUFGMUQ5QzQxNAotOjEwMjQ2MDAwRUJDRTFCQUZCMEZGMkQ4QTRDQTVGNzE4NTI5NkM2QzUxMAotOjEwMjQ3MDAwMjM5RTRBQzMxQzE0N0Y1RkJBNTRBNUI4RTc1MkE4RTc0RAotOjEwMjQ4MDAwMEM5MTRGNTYyRTRGNEJDMUYzRTJGODgzOTlDRkY4NDA5MQotOjEwMjQ5MDAwNkUzRkZFNDBBRkY4MTEzMENFODkxNTk2NUUzNjY3QjBCQwotOjEwMjRBMDAwREVGMTE1MDUyOTE4QTc3MTYyOUQ3NUJBQkYxQjc4QURCRAotOjEwMjRCMDAwMUJDOENGODdEQTFGMUZBNUYzRUNCQ0U5RERBOEU5RDA2NAotOjEwMjRDMDAwQkU2NkM1NEI1MTE4RTY1RkJEODI5RkUzMDNEM0JDNEQ4QQotOjEwMjREMDAwMDM3QkUzNzlCRTc5QkIwM0UxRTdEODlDOEI3NkRGNERDNAotOjEwMjRFMDAwNzAxQzYwN0IyOTNGNTRBRDI4RTg4M0YyNDVDRDNGMEUzOAotOjEwMjRGMDAwM0ZFM0MwN0JENjRCMkRGMTI4N0Y5RUZFMDBDRTQzODU2NwotOjEwMjUwMDAwQ0UzMzkyMUI0RTg1NDExN0U0NEY4QjI0M0JDMjI5ODU2NQotOjEwMjUxMDAwNzlEMEFGNzRDRTc0RThBQjU1QTgxN0U2MzU2NzA0MjBDMAotOjEwMjUyMDAwNUQ2OEY1NkUxQTg4RjJGRjhBNjc0OTZFQTk3QTY4Njk1NAotOjEwMjUzMDAwODZBQTYyQkZFOUQxREREOTRENjRCQTVEOUNEQjI4QkZCNAotOjEwMjU0MDAwNjM4QUYyM0JDNkM5QTBGQzhFNzk5NERGMzE0NUY5MUQ0MAotOjEwMjU1MDAwQkYyRkQ4QTA5N0ZGNUUxMEZFNDI2OTRGRUVERkQ4OTFFMwotOjEwMjU2MDAwODdGRTNCREYxODk2NTU0N0U3QUQzRDBCRTVGNUM1NEFCRAotOjEwMjU3MDAwQjgxQkY5RDE2Mjk0OTUzMEZGNDkxOEU5QjE2QzZCMjIxMAotOjEwMjU4MDAwM0Y2RjA1OUVFQjZEREM2RkY0QjVCODlGN0I3MzA3Qzg5QQotOjEwMjU5MDAwNjQyMUY0NzlDQjY1MUIwQkJEMzczQjlBQzVFOEYyNjMyOAotOjEwMjVBMDAwNkQ4OUJBRkEwNTBFOTdBRUZDN0IwOTAzNzVFNUI3M0E1QgotOjEwMjVCMDAwRjM3NEY5REJCMzZFRDBENTlGRTAxRUFEQ0JERjMxRTIxMwotOjEwMjVDMDAwNTY1REZENDk5RTQ5QkFGQzk0QzIxOUJBRkFEMzhBNEJBQQotOjEwMjVEMDAwNzVFNTc3NEQ5RkE3MkI5RkUxNURBOENCREY1REY5ODA2NwotOjEwMjVFMDAwQUVGRTNENzU0Qjc1RTU1RjlCNDAyMzA1N0E2OTQxQkRBNQotOjEwMjVGMDAwQ0I4QUVGQTdEODI4RkRCRUVBMzAyM0RGNThGQzlCNzRCNgotOjEwMjYwMDAwM0JFMjdCRTQ1ODUzNUQ3N0Y2RkQ1MzQyMUU0QUNGRjYxQQotOjEwMjYxMDAwOUM0MDdBNDkxNkVGRTMyNDhCNzc2RUJFMUFDOEYxOTk3NQotOjEwMjYyMDAwQzQ4MEFBNDhERjZENEQ0NEZBMzVENjMzOTY4RjhDNzgzNgotOjEwMjYzMDAwRkQ5MjEzNzA1OEZDN0NGNDM0MzNGMDg5OTFEN0JGM0U3RgotOjEwMjY0MDAwMzQwREYyMEYzRTNGOUVFNzZGN0FGRDk3QTk5MDVGRjczQQotOjEwMjY1MDAwRkNDM0QzQ0NDMEE3NDYwRTc5RkQxMjk2MjdGQ0UyNzZDOAotOjEwMjY2MDAwOUU5RkMyNDhGNDc4N0FEMERGQTdGQTcwRkVCN0E0QUU3NgotOjEwMjY3MDAwNzE3MzNCNDlCN0Y3Q0M2NThBNzBDMEZCREEwODA3NEMyOQotOjEwMjY4MDAwMDM0MEJGOThCRTBFRjQ4QkU5MUI0MEJGMTVDMDlGREUxMAotOjEwMjY5MDAwMDJGQUM1RjQwOEU4OUZGOEZEM0Y0MUZGQzRGNDVERDA5RAotOjEwMjZBMDAwM0YzMTdEMEZGNDRFNEM1QjQxRUZDNEY0NzcwREQzMjlERAotOjEwMjZCMDAwRkRBMEMxNEJFREZFRDA1MDQ5RTlEMTg2M0FGQUZFNTE1QQotOjEwMjZDMDAwNDMzREE1N0Y2RUYwRDFGN0Q4NDFEMjhFMTE2MEJBRkJBMQotOjEwMjZEMDAwMDFFODY3NDQ3RkUyMDFDQkI5NTAzRkIwRjQ1NzRBRkZBRAotOjEwMjZFMDAwNjQ2MzFENkI4QjQwN0VEMTY2OEVGOUQ0MTZGNDNCRjY4NQotOjEwMjZGMDAwNkMwNzMwQjM0RjQzRTRCMTY4RTY0OTFFNDRFM0Y3NzMxNwotOjEwMjcwMDAwOTBERjQ4N0NGRjU1N0Y2RkVBMjBFMDNCMUZCQUE2QTQwQwotOjEwMjcxMDAwMEY1NUYxRENBQTdCMTNEREIyMUY4QUZCRjVDNjdFQkYyNQotOjEwMjcyMDAwMTJGNEYxRDc0MTlFNEM2QzI3RkRFQkQyQkZERDE1Mzc3QgotOjEwMjczMDAwMTNFMjdGMzc4NUM0RUJEMDVGNDhEQzhERjQ4M0NCMzg2MAotOjEwMjc0MDAwOUY5QjZERkM5RUIxRjQ3M0NCNzgxRUQ5NUZDMTE3OEMzMwotOjEwMjc1MDAwRjhDM0E4RDU2NjkyNUYyMkNEMkM4MEZEQ0JCODlENTFFMQotOjEwMjc2MDAwQjZFNjNDOEM2MzE4NTU2M0E3N0JCNTdERTBCQjk2NEZGRQotOjEwMjc3MDAwRjUzQzJBQTQ1QkZGMEFGNTczODM3RUY1M0U2MkZFNTBBQQotOjEwMjc4MDAwNEVGMzJGRjhDMjRCNzZEODUxMjJBRTAwREJEQjc4Qjk3RQotOjEwMjc5MDAwMEZEQjhGNDJEQkMyNzU5NDEyN0Y3QTFBRUZFREU2MDdFQQotOjEwMjdBMDAwRkRGQzU4M0Y4MkQ3MEY2MDdGMDNGRTA2RTM0NTA1RjcyNwotOjEwMjdCMDAwNEQ3MjZDNzMxRUYyRUJFNEY5NzZCQTE3QkE3MTc0ODAzRAotOjEwMjdDMDAwREVCMzIyQTMxM0MwNjU4QUQ0OUY2QzIyMkZGRDc5M0IxMAotOjEwMjdEMDAwRkE5MDFENjlBQ0Q4RUJDMzlDREUxOTg4Q0Y2MkFCRTNERAotOjEwMjdFMDAwOTMwOERBNjc2OUM5Njg5RjlDMjRFNEU3N0Y4MkI3NTkzOAotOjEwMjdGMDAwRDg0RUMyNTNFMjQ1RTI1MUUyMjMyNDdFOEFGMEQwMTM0MAotOjEwMjgwMDAwNUU4REY4MzRFMjUxRTJBRkUwOEIyMDVFMTBBRTU3RTIwRAotOjEwMjgxMDAwMkQ4ODU3QjRFN0ZFQkJFMEVEM0EzMzdGQkZDQzVBNjM1NwotOjEwMjgyMDAwQTM3N0QxQUU4NkM3N0IzQkQ4Rjg2OEE4RjI5NUQzRkJENwotOjEwMjgzMDAwMTVGMkNGRDJDQkNFQjczMDVGQ0U0NjhGNDdENENBRjI5NwotOjEwMjg0MDAwNkY3QjI4Rjc3RUQxNjE4OTBFQzFGN0NEMDJERjE5QUUwQgotOjEwMjg1MDAwRUVFQkNCN0FGMjNEMDZEOTdGNDEwRkY1REYwOTkzNzE5QwotOjEwMjg2MDAwMTcxRTdCREVGMDYwRkNFM0UyMDIwRUZGNDI5NzRBRjBBNwotOjEwMjg3MDAwMUY5QjMzOTdFNDY0NjZFNzcyQTYxM0ZFNDNCRTM0RkVFMwotOjEwMjg4MDAwOUI2MjdBRDdGMjRCQjYxMzNEQjc2QzdDMkZCRDdDNUE1NgotOjEwMjg5MDAwNjhGMDVCREYyNkU0RDJEQjBDNzJBOTUxQUU3QzcxOTA0QwotOjEwMjhBMDAwRjA2N0JCOThFQjNCQkU1N0Y5MzJFNzZCRDdGQTVFMjU3MgotOjEwMjhCMDAwN0ZFRjc0OUNEODY3NDk4MkNFRDI5QzJBMUI4OTc0QzQ0RQotOjEwMjhDMDAwQkM3NDRFQkU4MUVGOURFNkUyQkJBMDNFQ0FERkNBRkNFRgotOjEwMjhEMDAwOTRERUNFMDI3NEJFNEUwMDQ2OENGOTNCMThBMzdCRTQxNgotOjEwMjhFMDAwODcyMzI2OTZFMEREQjhCMTQzQzcwRUMwRUYyMUVGQjJEMwotOjEwMjhGMDAwQkQ4N0YzOUJBRjdBRkZDQjExRjIyRURCRUJFMzlDNzQyOQotOjEwMjkwMDAwQkZGMjc1NUIxQUM5NUZCODBGMkQyMUY2QzBCN0UxN0MyNQotOjEwMjkxMDAwMUEwMEU3Qzc2MTM4QkYzMDdEMTNDRUFGMDFCMERFNUY2QwotOjEwMjkyMDAwQzNGOTg1RjlEQkIyOTYzMjZDMzdERUE5OEZEQjkxRUQwNgotOjEwMjkzMDAwNkY3NzhDMDVDNUE0NjdGOEREOUVGQjcyM0Y4NEVGM0I4MwotOjEwMjk0MDAwMzE5OUUzRDA3RUZFNEVDQ0Y1RTM3MEJERUZDNEY0MzE5NwotOjEwMjk1MDAwRjFENEFBNTEzQTc4RkY4MEVFRTQ0M0I5MEY4MkUzOERCNwotOjEwMjk2MDAwQTdGMThDRjA5NUYwMzRDMjUxQzJGNzVGODBFN0U1RUUzNQotOjEwMjk3MDAwRTBGOTk1OTA5RjNCNkRCRjhGNEE0ODQ1RkY1RDk0Nzg4NQotOjEwMjk4MDAwQzdGMjM3QjkyQUU0NEZFM0Q0MTIzMTVFRjUyNjlBRTc0RAotOjEwMjk5MDAwQThGQTFCOTg3OTI4Rjk2RDcyMTBBRTM1MzYwRTJGQTM2MAotOjEwMjlBMDAwREQ4QTZERUQ2MzBBOERERjNEQTM3OUMzQjI2MTlDQ0ZGMwotOjEwMjlCMDAwMzZBQTc0NkZGQ0ZDOEI2MTY0OEYzQUU1RTdGNkI2REJGMAotOjEwMjlDMDAwMTU2RjU0MzZDQ0FGNDY3NUFFQzFGNzQ3RDkzQkZDOUQ2OQotOjEwMjlEMDAwMzNGNkNERTE5NEM5OTFERjgxNEVCN0YyRkJGNjM1QjZGRgotOjEwMjlFMDAwRjFEREUyNTFFQTUzRDEyRTBGRUQ3MzI2REU4Qjk0NzJBNgotOjEwMjlGMDAwNDUzRjJCN0Y5NzQwQkU1RkQ4OTM5QzMxM0M5Q0YzQzFGMQotOjEwMkEwMDAwN0U1NkNFQjcyNTVFQTExREU1OTNBMDlGRTFDMEU3OTI1QgotOjEwMkExMDAwN0UxQTRFRkE0NTYzNkY0RjA2QUU0RkRBMTEzQUZCNDUwOAotOjEwMkEyMDAwRjg5MURGOEUwQTY0RDNCQjVDODU0NzU0OEEyNzdFNURBQwotOjEwMkEzMDAwQzQ3NzdEMkZCQkNFOUUwQTc4OUE5NEVFNzU2NzkzQkVCRAotOjEwMkE0MDAwRjk4RDhBN0NFNjVENTg2NzFDREExRjhFMENCNTkzRkUwMwotOjEwMkE1MDAwRjgxREY1RDAxMUQ5ODI1RkU0QjI1Q0REN0QzNTQ5Nzc5MAotOjEwMkE2MDAwQUE5REUyNzczQTNGRTBGN0YxMTZCRENERTMzNjE3RjVDMAotOjEwMkE3MDAwNTYyOUZFREYxODE3Mzc4QTY1RkMxNEVEOEQ2MzdCNTlFNAotOjEwMkE4MDAwREM3RTY3OTBCRkM4Nzc4MEFDMDkyNkU2MEM5MUIzQzNBMwotOjEwMkE5MDAwOUNFMUNDMTkzMjlGODhBQzU4NUQzRUQyREQ1NzU3M0Y0MAotOjEwMkFBMDAwN0E0NEFBQUUzQ0M2MzM0ODU3MUU1Nzk4QUZDQkY3MkU5MAotOjEwMkFCMDAwQkU1MTU3QkZDRkY0MzFCQTdDQTJGNzM2NURGREE0Q0EzMAotOjEwMkFDMDAwQzlGQTNDRUUzQjgwN0I3MkRENEM1REJCRkVGNTY1QkExRQotOjEwMkFEMDAwN0EyRTVGOTVBRTlDRjkzQ0FENTlGMUM4QzdGOTVGREEyMwotOjEwMkFFMDAwRUE0NUJBRjJBN0EyMEE3OUZDQjg3RDBFREQ1MzRDNkYxNQotOjEwMkFGMDAwRkE4MUFFM0Y4OURGQTQzODhFNUZFNkU0RTc4MzBGRkVGQwotOjEwMkIwMDAwMjNCRjg1QzA3MzQxODJGRURDMThFQjE4RkQ4NjgzNTIxQgotOjEwMkIxMDAwQkQ1RDIzRTkyQTcxNTAwRkZDQUI3NDUwQ0JGNDc0RDAyNwotOjEwMkIyMDAwOEJDN0YxMTRCQzNERDQ4OTcyOEMxMUZGRTg4RjA4NUQwRQotOjEwMkIzMDAwMjdGQTIzNDJFMTgyRkU4OEQwM0NGQTIzNDJFQkEzM0ZFRQotOjEwMkI0MDAwMjJCNDFDRkQxMUExRTU0MzhGRThGMTNGQUM1NThGRkY4NgotOjEwMkI1MDAwRUI4RjhFRjlBNzc4QkFBMTRENEYwRjQ2M0NERDc0NEEzMgotOjEwMkI2MDAwNEYxRkEzQkNFMTA0OTdCMTIwOEYyMUJENEIzQzREODc4MwotOjEwMkI3MDAwRkZFODlDNjdDNUQxNjgzN0I4ODU3OUU4NUVDMEZGMTY2NQotOjEwMkI4MDAwQkU1RUM4MTZGNjIzODFBRjJGRDk5QTYxRjhDRUU1QzU4RgotOjEwMkI5MDAwNTJDRUM3N0IzQUU3OUZFQkVGNzkwOUY5RUUwOUU0RjNGMAotOjEwMkJBMDAwQzNBRUI0MDNDODc4NTJERjE4OEU0RkRGQjEzMEUyNTc5RQotOjEwMkJCMDAwNUY5QkRBMjJGMUZDRjhCRURBNDY3NkY5NDRENkYxMjZCQwotOjEwMkJDMDAwQkUzRkUzRThFNTNEODRGQ0E4MEY0NjBGNDBGOTkzRjNEMAotOjEwMkJEMDAwRUVDQ0MzNzM2RUQ2QUZBQzI5MjhEN0NDRUFDRkRGMTNDNwotOjEwMkJFMDAwNjQzOTZERjQ0RThCOUNDRkFDMjQxRTdGRjQ3NkI2RTAzNgotOjEwMkJGMDAwRDM2RTFFODdGNDZFMzZCN0ZGNDRCQTFEMTQwNzVEOUE3NAotOjEwMkMwMDAwMjNERUExMzFCMzk0NTk4MzkxMEVERjBEQ0I0NDNBNUI5RgotOjEwMkMxMDAwQ0ZFRDVDNkQxNjI3QzVCNUY4ODAxRUQxNEY4OUYyMzYxMQotOjEwMkMyMDAwQ0FDM0M5NDIxRTZERkM5M0NEQzZFOThFRTlDRUY3ODFCOQotOjEwMkMzMDAwN0U5QjJFMEUzNzdCODc0Mzk3MUZEQzlDQTBBQjNGRTQyNwotOjEwMkM0MDAwODA1MzU3OUUxN0M4RDI5NTBGM0RFMkQ2RTU4N0I1OEVDMwotOjEwMkM1MDAwRDBENUJGRkVBODQ3OTdCRkExQUQ1MDU3RkZBNjUzQzUxQgotOjEwMkM2MDAwQkE3QzEyRUI3ODAyRTFBOUU2QTQxMjNDRkEyQkMyMEU2MAotOjEwMkM3MDAwRTBFNDc4OTlGNUZENzhCQTRGMjNGNTA4MTk5N0VEMTUzQQotOjEwMkM4MDAwNzQ2Q0Q0NDdGQTZCNUU4QUYzNkU0QzY0NkVCQTBGNjI1MgotOjEwMkM5MDAwMTNGQTIwRDNFQjI5NUUxMTU3MkRFNTc5RTZEM0M3NTVGQQotOjEwMkNBMDAwQ0I3OEVBMkU3RDQ2RTgyRjUyOUYwODg5QTdGNkUwRkNGNAotOjEwMkNCMDAwNjUzQzc1MTdERUM1RkI5MjQ2RkE3NEU0MDhCRjkwNjE2NwotOjEwMkNDMDAwMURGRDM1N0VGRkFCRjEwMThERUVCMUM4RjkxOUU3MzU3OQotOjEwMkNEMDAwNDNDNDAzNkVCMzc1RkZGRTUwNEEwRUI3MUI2QzRFMkRGNgotOjEwMkNFMDAwOEVDRjgxN0FDRkMwRjE0NEYwQkM2MjNDNzc5QjBGRTA3RAotOjEwMkNGMDAwREJGODIzQ0RCRENDNzlGNUYxNjYwREUxRUIyOUMxNzc4OQotOjEwMkQwMDAwNTU3M0U4OUQ0RUJBQjcyNkM3Q0QxNUUzRjZDQTU1QkEzNgotOjEwMkQxMDAwNURERkFDNjgxRURGQzVBMjM1QkE3N0QxRjM3ODFDQUU5MwotOjEwMkQyMDAwMDkxQTVCNEVFRjI0ODk3QjA4RjdBQzY5NUU5QjA5NDU2NQotOjEwMkQzMDAwMjU1QTkzODVCRkFCRUZCN0EwOURBODY4MENDODgxNzlEMQotOjEwMkQ0MDAwQzAyN0I2RUQ1QjZGMDdGOUU3OTk3QTMzRDk3RDg2RTU0MQotOjEwMkQ1MDAwMjRERkU5MUIxMEJDNTdEMjFGRjQzNEE0OTMyMkM0M0ZENAotOjEwMkQ2MDAwRjRGQkZDNjAxRUVGN0M2NzBFNUY1RjgxRkE0REQ3N0Q0MAotOjEwMkQ3MDAwMDBBQjhFQ0Y3M0ZEQUYxQkJBMjM3QTk0RUJGOEJGQkFDQQotOjEwMkQ4MDAwMUYyMEU5RDcwODI3QTk1RjMzNzE3RTBEMTBGMzkyRjA1OQotOjEwMkQ5MDAwRUJCMjlGMDhGOEM5RkIxOUNFODU5NkUyMkQ3NkJBRTcwQgotOjEwMkRBMDAwNTE4ODcxNjUxMjdGMDcwNzczQkE1QzJERTA4MUY1OTAzOQotOjEwMkRCMDAwMUZGNTU0QUY0MENEODk0NjNCNzgyNzczNDYzQkFFNjI0MgotOjEwMkRDMDAwMEZGRTNGQkEzNzQxRjBFRkU5QkU1NzRGN0NFMjBBRkVGMwotOjEwMkREMDAwRDBDM0ZEQUY5RUU4OTNGRUJFQzMzREIwMTAzRUMxRTMzRAotOjEwMkRFMDAwN0QwNDNFRkMwMzRDRTQ1NzVGMTVBOURGQzdGQjczQjhCNQotOjEwMkRGMDAwRERBNTQ0RUMyNzM4QjdFRDc5N0EzRUMxRDBBRURGQjgxNwotOjEwMkUwMDAwNDIxNTdDNjI0RUQ3RUY0RkUwRjdEOTJCMkMyNDVGMzM2RAotOjEwMkUxMDAwNTZGQzE4QzYxOUZDNjVCRDg1RTI2MjQ3NzkxOEM5MzFCMAotOjEwMkUyMDAwNjUxQjE1RkY2NjA1Q0ZEMTkxMDkzOEZGNTI5RkZFM0MwNwotOjEwMkUzMDAwQkU4NUI5NTdBMkZGQTM3Q0I1RkVGQjVDM0JGRjlEOEExNAotOjEwMkU0MDAwRDlDNjc3NTM4NEJFM0VGNzJBRkFGQThFMUM3MThFQkIyMAotOjEwMkU1MDAwOTk5QkU0MkVFMUZGQUYxNDZEOEM3MjU3QTc5RkZCQ0RCOQotOjEwMkU2MDAwNTBERjU2QjlERDg5RTJDNkU0RjlFRTQ0RkY0REM4N0I3OAotOjEwMkU3MDAwMjAwMENGRjAyQzNDQzc5NzlCQkI4REU3RUI4MjY3MEYwMAotOjEwMkU4MDAwRjEwQUU3RUMyMjVFQzFDRUUzMzMzQUY3ODY3MUZGQTY4MgotOjEwMkU5MDAwRjQyQjg5RkFFNzdDOTdBODFDRUI2MzZGRTdGMzc4RENFNwotOjEwMkVBMDAwODVGNDI3MTlGRDU1OUQ3NjEzRjk1QjNBRjc0NjkyN0YxNQotOjEwMkVCMDAwMUVGRDM4RDE0MDA3Njc0QzdCRTI0N0I4ODJGM0YzQjY3QQotOjEwMkVDMDAwQTkzQTNGODgzMUY1MkU3RDg5RjRDNTgxNjlERURGMjE3RAotOjEwMkVEMDAwNUYzRjZCNzZEQkRDOTA3RkQwRkUzQUJEMUY1NTI0RUM2NAotOjEwMkVFMDAwNUVDNkY5NzZFOTVEMjNGOUZCMkU5RDNFMkVDRjc2MTY2MAotOjEwMkVGMDAwRjI3NzM4ODAyRjMyREM0NzMyMEU2MTEyMDMyRDE1RDI2MwotOjEwMkYwMDAwRDJDMDBEMzQ5RkVGRUFDRjk5NzIzOThGRkIzMTJGREY5QQotOjEwMkYxMDAwNDRFREJEQUI2RkEwN0NGRkU1NkIxN0UyM0Q5ODY5OEQ3QQotOjEwMkYyMDAwNzMyREU4QzI2RTdCNjI0OTQxMzgzNDZENEJGNjJGMEIyRQotOjEwMkYzMDAwNDdCQzhENTZCQUI1Q0I1RjEyNzg2QjMzQzREN0NCQjREMAotOjEwMkY0MDAwNUNGMDIzN0M0MzhFRjMyNTExODdCNDU0QTE3REIwNDhGNwotOjEwMkY1MDAwNjEzMjJFODlGOEI4Q0M1RjZBMTJGOTAyOUU1RkJDODI5QQotOjEwMkY2MDAwRTdEQkM0RkJGQURCODUxRDA1RDc4RDI5QUUxQkY1RkUxQgotOjEwMkY3MDAwOURDMkNFODJFQkM2MTRENzhEREY5MTZGNjExRUY5MTYwQwotOjEwMkY4MDAwRTY5MTZGNjExRUY5MTZBNkM4QjdGMDdCMTkyQjRFQzlFMgotOjEwMkY5MDAwNTNCOTFGNkE1Q0U4QkVCQjZDNjNFMzQyRjYwQkZBQTE0RgotOjEwMkZBMDAwNDJGM0U4ODcwQUFEOEY3RUE4RDA3MkY0NDM4NTk2QTNEQQotOjEwMkZCMDAwMUYyQTM0OEY3RUE4RDBGQUU4ODcwQUNEQjMxMUI3MDY0RQotOjEwMkZDMDAwRjNDOEU3M0M5Mzc0RjkyOTIwRTc4RjBCRDlERkU4ODczMgotOjEwMkZEMDAwMEFFRDFGRkQ1MEJBRkVCQzBCNzVFREVGNjZGNUJBRjZCMwotOjEwMkZFMDAwRTg4NzBBQUQ3RjZGQkRBMkYzNTNERDJCREUzOTJEREZGRAotOjEwMkZGMDAwMTBDN0U5Qzc1OUVDMUUwQzc0RjA1RjExRkZCOERGOTJERgotOjEwMzAwMDAwOEE3ODZFOTlDN0Y1QjI3MDM3Qzc3MzUzMjFDN0JCODlFOQotOjEwMzAxMDAwNzEzQzc3Q0MyMDNDMkZEMTc4QkU4MEM3MjcxQkU5MDdCNQotOjEwMzAyMDAwRkQzREUzMkNEQ0RGODMyOUZBN0IzMDQ1N0YwRkE2RThFQQotOjEwMzAzMDAwRUYxOTk3Q0VGRDNEOThBMkJGMDdCRkEzQkYwNzUzRjQ3QQotOjEwMzA0MDAwRjc2MDhBRkUxRTRDRDFERjgzMjlGQTdCMzA0NTdGMEY2MwotOjEwMzA1MDAwQjY0MzdGMEZBNkU4RUZDMUVGRThFRkMxMTRGRDNERjhERQotOjEwMzA2MDAwRkQxOEZBOUQyQ0MxNzlBMTFDM0Y0MEE3M0YwMjFERUEyMwotOjEwMzA3MDAwRjQ0Nzg3MkU4RjcyN0M2ODdEOTRFMzQzQ0I1MThFMEY4QgotOjEwMzA4MDAwMkQ0NzM5M0UzNDhGNzI3QzY4N0Q5NEUzNDNGMzc1Mzk2NAotOjEwMzA5MDAwNEVEQTVGMjhDRjg3QjY0Mzc5M0UzNDNGQjhDOUY3MjY2QQotOjEwMzBBMDAwREFDRTI2NkNCQ0YwMDZBNjZEOTFDQTMzMEFCMDhDODVDOAotOjEwMzBCMDAwQkJGNkRFODk3RUI5QjYzMDI1MjUwNjM4QTc0NTc5RTUwOQotOjEwMzBDMDAwQ0U3MTkwRjc4QUY4QkY1Q0Q2NjE0MjdDN0JDNTdCRUEwMwotOjEwMzBEMDAwREUwMEEzNzhDQkMxN0Y0REE0RjIxN0M0QkQ3RUZBMDNGNgotOjEwMzBFMDAwQkNFN0VENjVGNEJCMjREMjVGMkNEQkJCOTk0M0M1NTQzMAotOjEwMzBGMDAwRDYwRkU2QkJBRjY3MUM1RkQ2MjNGRTE5MzIwRkJDMDFBQgotOjEwMzEwMDAwOENGMTJBNzk0QkVDRjkxOEVGQjlEREE0NTA5Q0M0RjY4OAotOjEwMzExMDAwNjUzQzRFRDg0ODU3REIwNDVGREE2RURBRjMzQURFMDNEQgotOjEwMzEyMDAwRTkyODU1RTgzRTcwODY5OTFEQjFFNDIzOUNFQUYyRjE0NgotOjEwMzEzMDAwRkM1RDNCMzg0NkFDQUJFRTQ2QkM2RjIyRTcyREVEOUIwOQotOjEwMzE0MDAwQzAyN0U4RkVEQ0M4OEVENkIxRDFEMDhGRDczNzlBN0VBMwotOjEwMzE1MDAwMjdBNTQ4RTM3MjAzQjY0MzdEMzJEQkE3NzhCNjg0RDA1NwotOjEwMzE2MDAwRjdFMzgzMzlERkY0RkFGOEY4M0ZERjM0OTFCNzBCRTc4MAotOjEwMzE3MDAwRUQ3RUJFMjk4QUUwMzg3MUI5NDJGMTUyMjM3NzMyMEZEMQotOjEwMzE4MDAwREVDRkY1OEI3OTY3RUYwQ0E4Mzg1RUU5NzIzRTlFRUNENgotOjEwMzE5MDAwQjc3NDYzMEFERDVCMkM2NTZERTMxMkM4NDdBMjMwRTRBNwotOjEwMzFBMDAwREIxMjZFQjBCRTM3NzA3REEwMzYxQzQxRkJGNEI1REU3RAotOjEwMzFCMDAwRkJCOUY5QkE5ODAyOENBMzYzMkQ4Q0RFQjE5QzcwREQ0QgotOjEwMzFDMDAwNkY3NUVCMjVCNDBGQTc3RUU5NUNDQkY0MjlGNDVFRjBCNAotOjEwMzFEMDAwNDRERkQyNjVBODZFNENGMDJEN0NCMzM3RDZERkNBREM1NQotOjEwMzFFMDAwMkUyNzFENDU3NDJGNTZDRTY3OTA2NzhGMDk4RTQ1OTYwMgotOjEwMzFGMDAwQzM1QTRENjEwQUUyOUIxRDhFMEJBMTFGRDhGOTUzMTFEMgotOjEwMzIwMDAwREY3OTZFMEJCRERGM0JDOUVDQjBEMEZCMTEzREM0OUYzNQotOjEwMzIxMDAwNUNCMkNCRjgxMzgzQkM2MDg4MzM2OTVDNzIzNDA1RUQxMwotOjEwMzIyMDAwQzk4QjIyNEQ2NEZGNURGNDEyRkYzRDAwRUYwNjg1Rjg2NwotOjEwMzIzMDAwOUE5NDgzNEE0NTlDREFBNUU1NkZGNkJFMEJFMUJFQzdCQQotOjEwMzI0MDAwNDJGREM5Rjg5M0RBMzQ3RjhBMDlFM0VBRkI2RUNFOEQzQQotOjEwMzI1MDAwNTU0OTBFRjhGRDYwOTQwMzdDQkZCQzczMDRENjVCQzE3NgotOjEwMzI2MDAwREZCMUJDQjQ3QzVBNzQ4MDdBRTJGRTlBMEEwMUFGMEFEQwotOjEwMzI3MDAwMTFDNzU0OEEwRjdBQUJDMURGRDM5MkY3M0I1ODEzOTcyQgotOjEwMzI4MDAwRjdBNDNEQTdGNDM3NDNERjQyRkM5NjNFMkRERTk1NUU2MgotOjEwMzI5MDAwNUQ0QUY3QjI4RDcxNDRGMzk2NUIyOEVFNjg5RTQxMkUyRAotOjEwMzJBMDAwQUMxNjcyNjFGNTU1RTRDMkIzODMwRDcyQTFGQ0JEMTQ3NgotOjEwMzJCMDAwRDE4NkE5RkRGRTgwNzE3QkYyNUU2Mjg5ODVFRkZGOTI2NwotOjEwMzJDMDAwM0Q4Q0VDQjAyNTRCQzc5QUU4MURFNDk3MzhERDk0MkM3MwotOjEwMzJEMDAwRTVGMjREQzlDQjFFQkE1RjI4RTVDNUY3ODUxQzMzRjk2OQotOjEwMzJFMDAwNzIxMkMxRkRGNzQyNkU5OTg2RjE5NTAwREZBMkI2MzBFOQotOjEwMzJGMDAwMTE4Nzk1NDhFOTVEOTc3OUJDRTU2NDNCRTcwMzZEMDc2NQotOjEwMzMwMDAwRjkzQjEwOUQzRTJCOTdBN0RFNjBGQzFEMzMwMzVENEVGRAotOjEwMzMxMDAwMzJGQjRENzhFMUNFM0QxMkU4MTJGMjEzNTAwRTgyRkVFMAotOjEwMzMyMDAwQTZBMzVDMTQ4Nzc0RUUyQUEwRjhCRDQyODVFRUJEMThGMgotOjEwMzMzMDAwRTlCQ0M4NTJGNzI2QzY4NzE2NkQ2MzZFMUYwQkE1NzNDRQotOjEwMzM0MDAwQTA1RkVDQ0ZBN0QwRkIwMDVFQTFENzRBRkEzNUQyRkIzNQotOjEwMzM1MDAwQUMwODYxOEZCMjczN0I1Mzk3NUQwMjY1NTQ3Q0E0REIyQwotOjEwMzM2MDAwMTc3NTE3Q0E4REIzRDBCN0Q3OTcxMzBDQzY5RDQ1RTYwRQotOjEwMzM3MDAwRjBGMkY0REQ1MTc3MkQ0NzI1QTcwNzNCODVGQTAzOEQ0MQotOjEwMzM4MDAwRTBFMTk1RUYyMEY0NjAzNzQwN0IwMUYyQzk3QkVFQ0JBMgotOjEwMzM5MDAwRDNDQTQyRjhFNDk3NDNDNjE0MENFOTFEQzQ3NzU5RDc0MQotOjEwMzNBMDAwN0RCRjFDN0ExNzc0RDE4M0U5RjQ3QjM4M0RDOUMzRTUyRQotOjEwMzNCMDAwMDA1N0RDMTdCM0EyREJFRUM3NUY2NjFCOTdDQjNDRTM3RAotOjEwMzNDMDAwNDZFMEVGMEIzMkY5MDg3OTAwRTMwODY3OEFGQ0MyRENCQgotOjEwMzNEMDAwRUJGRjg4QkFFREFDMDg5RUY3RUNFRTc3MTdDNjg1RDQwNAotOjEwMzNFMDAwREFEQUM2MjNEOTJEQzhGMTE2RTIzREM2MjA3RjJBRjZDNwotOjEwMzNGMDAwMjQyOUM4OUZGMjAyQTgxM0NFQzgxMEU3OEZDMTFFQjFCRQotOjEwMzQwMDAwMzBEN0M5RDc2OUIwNEI5NEU3NzBCRTJEN0YxN0U1Rjg2OAotOjEwMzQxMDAwODNGQjc3RTM3OTI1RTc3RkJDODdERjYxOTg5NzZCRkFCOQotOjEwMzQyMDAwNUZCRDA3NjFCQ0ZGRjBGREJFREU5OUI5RDBGRjYzMjYyQQotOjEwMzQzMDAwN0U5RkJGQUZEQUM0ODQ3RDg4RkNDMjkyNUYzMEYxMEVGQwotOjEwMzQ0MDAwNDYxMEVGMUU3QTQ3QjdGMTQxQzUxMTZBOUZGMkFFNTY5QQotOjEwMzQ1MDAwRjgzREZBMUVFQzM4MkNBQkUzODk2REQwNkU1NjgzNDZFRQotOjEwMzQ2MDAwQkZFM0I3Mjk4M0QzQ0YyNkEwMUZGQUJEMTRBREY1NEQxNgotOjEwMzQ3MDAwOUIyQjA4Qzc4RkVCMUZCMUQwRUZEMkIwNDAzQUJFQkYzNQotOjEwMzQ4MDAwMzNCMzJFQ0M4REZDRjhDQjIxQzU3NUI5QzNGMEY3NDgwQQotOjEwMzQ5MDAwRENDNDg3MEEzMDg2MUNDRkYzNUVDNThCNzEzREI1NkJFQgotOjEwMzRBMDAwMEUzRDgzRUYwOTJDNjg3MUQxRUY5NTk0MUVDODVCODk5RQotOjEwMzRCMDAwRUY5QzdDMzlDNDVCOEZFNUE1NzYwN0JEQTczMTdGNzk4QQotOjEwMzRDMDAwMEM5RDVGQjNGQTg4N0JBMUFDODNGQzZDMTJGRTREQzJFRAotOjEwMzREMDAwN0U3NUFCOUI4OURGREIxMkY3MUQ4MDQxNEVEMkQ1RUJBOQotOjEwMzRFMDAwREU4RTI3RUQ4NDQ2M0I4M0YxN0Q4OTlFRUMwQkQyOUVEOAotOjEwMzRGMDAwODBGNjAzMkRDNENFMjhFRDEzOTZBQ0UzMzM1MDZFMjgyRQotOjEwMzUwMDAwRDFGNEY3MTI2NTdBMjg1N0U4Qjk0MjBGOUNERDc1NkU0MQotOjEwMzUxMDAwRTU4Q0VGODNGMkYxM0FDNTQxRUY0RERBOUQ3N0REMDA5RQotOjEwMzUyMDAwRjk4QTIzMTY4Q0VDNjQ0NUIxNEUwRERGMUZFODAwRkNEMAotOjEwMzUzMDAwNjI3Qzc0MTlFQzU3RTQzMzI1MjI0RUFCNjJDMzBEQjRBMAotOjEwMzU0MDAwREYyQUZDOTA3NkYzMEVBNzRDRUY1RTc3MzhGOTY1QTQ3RQotOjEwMzU1MDAwOUY4MDg3RkM5NjE1MEU4RjE2MUJCMkVGQ0I5QjE0REQ1OAotOjEwMzU2MDAwQkIwMzMyQkYyNzk3REJFMzRBNjAyQjIzRkNFRUI5Q0ZDNgotOjEwMzU3MDAwQTVFMURCM0UyNTIwNDY2MEZDREZBMTVDQTdDRTdGMENFOQotOjEwMzU4MDAwRjUyODFFQTQyODk1QkRDNURGODE4Nzc5QkJGODc4Rjk5OQotOjEwMzU5MDAwMjFGRDk3MzVGMTdCRDMzMjBGRjU0OUZFNzkzNTM3OTIwRQotOjEwMzVBMDAwRjA1N0VBODA3NUJCMzA3NUQwM0MwMTBFMDRBNzhFQjU4QwotOjEwMzVCMDAwRDA5RjkzQzYyMTdDOTQwN0ZDMTZENEI3NEIzMDBFMDVFMAotOjEwMzVDMDAwRjIzMzFEN0UwQjhFNTNCNjlDQkY2M0UyNURDM0M3RjEyMQotOjEwMzVEMDAwQUU4RUQxMDZBMzdDNjQ3NjY4QzkwODNGRjEzQkFEMzA1RQotOjEwMzVFMDAwM0Y5MjIzMkIwMDJFNzgxRjBCRUZCQkUxRDk2Mjg0NEY1MwotOjEwMzVGMDAwQTk5ODZGNDU1MzBDQkRBMzEwRkNCRUNFODJGODk4RDE5QwotOjEwMzYwMDAwQzNCQjA4RTcwNUREOTYyRDFGNERGN0Q3MkJDQzFFQkE5RgotOjEwMzYxMDAwRTdFMDE1RjBGRENCQzJCMDg3RDAzRjMwNjNGREUzMTY4NQotOjEwMzYyMDAwMTdFNDNGMTFGNDdCNUVFQ0JCQTJENDQwM0FCRDU3QjQyMwotOjEwMzYzMDAwMzBDQzhERjM5Q0UxNjhBMkY1NzVDMUY3NTE4MDg3ODI4QgotOjEwMzY0MDAwRUZEQzE0MTM3QzgxMkU3QzE4Qjc1N0IxNUU4RkNGRTA2RQotOjEwMzY1MDAwN0MzODdDMkJENjk3RDI3RTlCNjNGNjZBOEVEMDc5NkNCMQotOjEwMzY2MDAwMzg5NDhFRjdBQTY2QzBGRUM2NzcyNTk4QzM0QkY3MjUxNwotOjEwMzY3MDAwM0Y3REY0QUUxNDVBMjdDQzEzRTExQUU5NzY4RUM3RjdEMgotOjEwMzY4MDAwODc4MDRFRjgzRDE4QjExRTc5QUY1QjhFNjcxOUMyRUY4NwotOjEwMzY5MDAwOUQ1QTg2NzBGQjU5Q0ZGQkQyNDM3MjREMjNFMDE3RUQ0NAotOjEwMzZBMDAwREUzREVENEIwRDE5Mzc4Q0FCNTVGMERGOTEzMEVFNTMwRAotOjEwMzZCMDAwQjkzRkU1QkU5NEZCNTRFRURGNjcyQ0M1ODEwNDI1QzhGNQotOjEwMzZDMDAwNjdFMDlDQUQ3QkIxMUIzODE1MENFMTc4OTgyOUYwMEFCNgotOjEwMzZEMDAwNzA3RDIzRjQ5RTU3RUUxMEJFOUY0QjUyRjVGQjFERkJGMQotOjEwMzZFMDAwQzM3RUZCMEVFMTc4MkYxOTEzNDhDNzc3OTk2NDdEMzlBMwotOjEwMzZGMDAwNkU0OTJDNkY4Nzc0OEZGNEQ2NTc4Qzg3RjUxNzUxN0RFMAotOjEwMzcwMDAwOTM4RTVGOTQ3N0YxOEI5RDJCRTI5MTVGRUM1MUI4MUYwNAotOjEwMzcxMDAwNzRFREUxRTRFRkEzRkNCQThCQ0JBRjY3NkJCNkNEQzcxQQotOjEwMzcyMDAwRjM5Mjk5RkQyOUExRUZGQkNGMDYzOTA3RjlDNDFDNzE2QgotOjEwMzczMDAwM0U1NzA0QkFFNzE3M0IzM0JDRDk0MzQyRjY3M0M1Q0ZCMwotOjEwMzc0MDAwNzY2NTc4MzlCRjA5MjBCRkY5RjNBRTU3M0ZCQ0QxMTk3MAotOjEwMzc1MDAwM0M0RkU1N0FDQTU2RkZENjUyNkEwRjg1OUYyMkRFMUQ3RQotOjEwMzc2MDAwRTlBNEZCNzhFNTc2Q0Q4OUYxQ0VFNUNCNEI4OUZGQjJCNAotOjEwMzc3MDAwMDQ5MDBCOTU5MEY4MzMwMzVEOTQyRTU3RTgxRTU5NzkwOQotOjEwMzc4MDAwRkQ3MEJGRkFCRkM4QTdDQkQ3NENBMjc3MEYyNERFRTRFOQotOjEwMzc5MDAwRkIyQ0YyN0M5NUYzOUYyOEYwMzU2OTA4REY4NzMzMDUxMQotOjEwMzdBMDAwN0RDRkFDMUNBRDI1RjYyMkI5MUJDMzJDRDkwQ0YxN0QwNQotOjEwMzdCMDAwNDY4NUZFN0IxN0RFQkFGQ0Q3MzkyQjcxQkZFMEZEMjJCMAotOjEwMzdDMDAwRDI0RkQ2NThCOEJENkYyN0I3M0Y5RTVEQjRGRkJEM0IwMwotOjEwMzdEMDAwQTFERTk5QzczNkE3MzA1NThGMzc5NDUzRTcwODc5NzUxRQotOjEwMzdFMDAwQUVCMEZGNzU4M0I3MzI5NERCNjQ3RUVFMjY4RUI3RjJGRgotOjEwMzdGMDAwRERCRkY5MDRERjEzMkI0OTE1RkM2RTJEN0YwN0EwQUM0QwotOjEwMzgwMDAwNzkwRkUxNzFDNkVBNzUxNjE3Q0E3NTQzNUNCQUY3MzZDNwotOjEwMzgxMDAwQ0FFQkYyMUM2ODU3OUVCOTdBQjMwNUY5QzRBMjIxMUMwMQotOjEwMzgyMDAwOEVDNkZENTAyMkUyODQyNTlDRjE1QzUyNDJGQzFCQjIwNAotOjEwMzgzMDAwM0VGMjQ3N0NGRkZFQkU4NTYxNTExOENGMjNDNzc5NEEwRgotOjEwMzg0MDAwRDA3RDc5NUQ0QzJDOEU1NzVFNTdGQTEzRDQ4N0U0Nzk3RQotOjEwMzg1MDAwNjA1Q0U3ODkzMEJFNUZDQUEwM0ZEQ0I3Mjc0NkJCNTMzOAotOjEwMzg2MDAwMTZFNTA0RTU1OTYzRkQ0NzA0MUQzRTY1RTFCRjUzOTMyQQotOjEwMzg3MDAwMTREMUZDMUNDNTM1MkMwODc3MjNGRjE4MzBBMENEOEY0MAotOjEwMzg4MDAwRTMyMjdERTNCQzM1MTNGRjVEOUIwMTM1NkQ5RkUzM0M3NwotOjEwMzg5MDAwNDBENEE2QjgxQTRDRjE3RDJDMTRCREUzMjFCRkM1QzQ5OQotOjEwMzhBMDAwRUY2RkE1QUEzQzNEMjBFMDAzRTUwMTJDNjdCRERBRThGNwotOjEwMzhCMDAwRjczNTQyRTI2Njc1RjRBQkIxQURGNEZCODk1QTJGNDY5OQotOjEwMzhDMDAwRUY5QjQ5N0E5NUZENDg3QTk1RjREQ0QzRkE5QUFGNzE2QgotOjEwMzhEMDAwN0QyNzVDMUM5RTlBRjhERDk0NkI1RTlGOTVGRjhFQUVGMwotOjEwMzhFMDAwNUM5NzlDMUZDOEYwMUU3QURGRTM4NzgzQzlERTczNjI5MgotOjEwMzhGMDAwQTkzQjA1RTMyNjdCNUVFRkZBODJGODZFRDY2QjVDQTdFOAotOjEwMzkwMDAwREMzNzMyMTZCRUNCOUZENUM0RkQwRTI3MTQzOERGQTA5RQotOjEwMzkxMDAwREQ4OTg1NjExNERGMjZEN0Y1NURFREUxMUYwQzg5OTUwMgotOjEwMzkyMDAwRUZGOTQ3QTI5QzU5MTIxRUJDMkY4RkYwM0I1NkNGN0Y1OAotOjEwMzkzMDAwNUY1NzdFOTc3MjgxN0M2NzRFRjJFRjkzNzVFMkRDNjQ4RAotOjEwMzk0MDAwNkQ2QjcxN0ZCM0ZBMzQ3QUZGRTQ1OEQzODk0ODdDOEY2QQotOjEwMzk1MDAwRTVDNDY4M0UzRkQ5RUUzRTBCQkY5RkNDMjIzNTI3REU0MwotOjEwMzk2MDAwMTM4QkI4RUZCNzA1N0REMDNGQjRERTk1QTc0MEJCN0I4NgotOjEwMzk3MDAwRUE4NzFFQzNGN0M3RUY1OURFODdGNEZCRDk3NkU3NEExQgotOjEwMzk4MDAwM0MxNzY3RkI1Q0U0MEY4RTU4OUZGNzI5QkVBMzM3N0I3QgotOjEwMzk5MDAwNzkzNkZENkVFRjdEMEEyQjI2N0Q1MkU4MDk3MzU4RDdFNAotOjEwMzlBMDAwMUZFOTA5NzMwNTVGOUI4QkZDMTJFRjRCRDUxRkE2NzdCMAotOjEwMzlCMDAwRjNFNkI4QzNGMkYwN0M5RkJCODFFQjA5NDUyNkI2MUE0QgotOjEwMzlDMDAwRkQ4OUZEMUI4QkM3MjMxRkVCNzg0MkUxQkZGQkJDNTE3OAotOjEwMzlEMDAwRkYwRTU3NzY2NkYxNDUzQzFGOENFRkRFREQ2NzY5RjYxQQotOjEwMzlFMDAwRTAzQTE4QzgyMzY4Nzc5QTZEMkZFNjcyQkRFMDlGQzc0QQotOjEwMzlGMDAwRDZCN0QzRUY2NTIyQkNFOUY3NzIwQ0Y2OUJGRTFBQkY2RgotOjEwM0EwMDAwNDdEQzExNjkyMjdCMUNFMEZEN0RGQzNEMzI3QzZGREREMwotOjEwM0ExMDAwNEFFNzhEREU3RUQzRkZDNzIzRThGN0RBRTQzREExMEE0QgotOjEwM0EyMDAwRTE3N0ZBN0Y4OTEwNkE3QTAwODAwMDAwMDAwMDAwMDBDOAotOjEwM0EzMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJDRDU2N0Q0QzUzNTczMwotOjEwM0E0MDAwMTQzRkY3QkU3RTUzRThFMzFCNDRCMDgwNjBCNzE1N0M5QgotOjEwM0E1MDAwMDUyNTcxMjZGQTA2NkE0QzY2QjRCOEExMzQ1MUE4NTFGRQotOjEwM0E2MDAwMTkyQTY1Q0MyQzAxOTczOUFCOURDRTY4QjZCMTA0MTVFNwotOjEwM0E3MDAwODkyQzg1MjlGQjY3NUI0QTI0OUI2NjZDNjkyNENFNkM4NAotOjEwM0E4MDAwOTI4Q0M4M0YyNjZDQTQyNDBCQTI5OUExNjM1OTkwNjQyMAotOjEwM0E5MDAwRDM5RDczNUY5QjFBM0Y5MkZEQjlGN0NGNzlGN0RFRjNBMQotOjEwM0FBMDAwNzVDRkVGNzdDRTdCNTA2RkUyOTAwNUQwNkMwMkYxRUNEMgotOjEwM0FCMDAwRUQ3QjJEMEJBQzI4QkIyNUIwNTcwMkY0RDBFNjJBODA1NQotOjEwM0FDMDAwMTM1RDM1NTkxMTI3QzA5RTRGRDY5RkY1OTcwMTE0MzBDRAotOjEwM0FEMDAwNzA4NzUwRUYzNzVEQTQxNjU2MDBDQ0Y0NjVBNzFENjVCRQotOjEwM0FFMDAwNzhFRTBCOTQwMjlFRUZFOUZCQTA4MEU0NEM5RkI5M0U3OAotOjEwM0FGMDAwODg3QUVCRTREQTc1QTkxOTAwNEQxNzUyNUQ5MjFERTA0MgotOjEwM0IwMDAwMTEzRDZCRDE4RjgyNDY5OTAwRkI3RDM1RDk1MDA0RDA5MQotOjEwM0IxMDAwRjI3MEU0NTNCOTE4RTMxNzAyQzhFOEY3QUY1MDUyRDA3NwotOjEwM0IyMDAwOEYyQTJENDdBRTE0NDgxQzQwMzE3QTczOTU5NTAwMDdCMwotOjEwM0IzMDAwRjhGMEI2NTVFOEU3MUUwQjBFRTQwQTdEN0JCNjZDNEQzNwotOjEwM0I0MDAwRjg3RDUyNEUxRjAxQjAxQjAxN0NFRkREMTY3RUVFRjNCNwotOjEwM0I1MDAwRDFDRDFFQjQ2RkYxNUQ0RTIxM0YwN0NFOEM1N0M5Qjg1MQotOjEwM0I2MDAwRkY0MkIxQjc0NEM5MjRCRjdEMDNCMjg0NzdFRkVFMkI4NwotOjEwM0I3MDAwNzdFMzNENEExNTEwNzk2RTRBNzM2RkYzNjA1RUQxMUY4QgotOjEwM0I4MDAwMjVBNURGRkVGQzc4Q0Q1NzMwRTlDQUM0N0E2N0QwNjYzOAotOjEwM0I5MDAwMDBBQzlGMzcwQzA2OTlBNDBDODYzNDk0MzMxMjc0ODRCRAotOjEwM0JBMDAwNTA2RTJBODJDNkFERDZDNEZFQUE1ODVENjY2QzlEMDVDRAotOjEwM0JCMDAwNkVEQ0RGMzc3MEFFQzA4RUYyNkVCMkI2REUzMUIwRkRCNQotOjEwM0JDMDAwMjc0ODQxRkQ4QjQ2MDNFMUU1RDU4MTQxNDFCQkREN0VDMAotOjEwM0JEMDAwQTYwNjUxNDI3MzFBNDA2RTIyN0U4RDkyMDQ4MDc1REJEOAotOjEwM0JFMDAwRDc4RDQ5QTUyN0Y2MDE4MjYyRkZBRTBFMzY1MjFFNEJENQotOjEwM0JGMDAwMDI1MUQ3NUIyODI3NzRFMUJEODRFQjQ0OUI1OUYxMTczMAotOjEwM0MwMDAwMTI0RTc2OTFDRjQ0QTdCNDgxRjZGRDZGMzMyODYxQjQ4QwotOjEwM0MxMDAwQkU5Q0JDMTRFMzM3RDhBMDhERUM5MzU3ODRDMjFDNzFCMgotOjEwM0MyMDAwRjYwREE1NTY0ODFBQTUwNEJGNUE2NTZEQjE1RUIyNkU3MQotOjEwM0MzMDAwQzhDM0YzODM4MzRDMzZBMkNCODM1N0FGNkYwMDZEMEQ5RgotOjEwM0M0MDAwQzA5RTVGQ0ZGRDBGNTY4M0ZEQjFCQ0Y3MEYwRDFBRUM4MAotOjEwM0M1MDAwMThBRkU1MEJCQzJGQzY2RjA5MERGRUIwMDhGREI0NUVCMgotOjEwM0M2MDAwRDk1NUE5QzVFRDA0QThDMjNDRTgxNUUzQjQwRTY5NzVBMQotOjEwM0M3MDAwRjEwRDREMTk3NjNCMTM3RTc2MzlEMjRFRTQyMUI2NERDNwotOjEwM0M4MDAwQTEzNURCQ0ZBMERFMkVDMkVENjU4MEMzRTUxNUY1NDc3QgotOjEwM0M5MDAwOTc5Mjk0QzVCRDQxMTcyRDcwMjcwMzlDNzJEQzMyNzgzMgotOjEwM0NBMDAwQzlDRkZCMzE3RjhFNUIyNzhBQzQ3RDZCRDNFMTMxM0U2OAotOjEwM0NCMDAwQkNBMUU4ODU1RERDMUVFQjIxRUNDMjNFQ0I0OTU4MEU3MQotOjEwM0NDMDAwQTBCNjVBNzUyNDAzM0U2QjBBQzkwQjZERENBMUMzQkFCQQotOjEwM0NEMDAwQUFDQ0EyNDg1OEVGMEU1MzRBMzlEODAwRTZDRDlBMUMxOAotOjEwM0NFMDAwQjY2OEIyOURCQjA3OUIzMEM1NzkzRTY2MDZFNDdEQkJENgotOjEwM0NGMDAwRDRDOTQ4QUU3NUI2MzFBQzM0QzgxOURFQzNDNERGMUNCNAotOjEwM0QwMDAwMDgzMTEwODUwODMzQ0E3QkY2QkIzQjk1MTQ3RkNEOTJGMgotOjEwM0QxMDAwQzg5RjgwMjlFOTk5NUFCRjBFRjk3MTVDOTEwNUZFRTBCMAotOjEwM0QyMDAwOEM1NDEyQ0YzM0FGNDEyM0YxQUI1NzBGMjdDRDE1NzQwRAotOjEwM0QzMDAwNkYzNzZDMkQyMzJGRjg0RUI4MkZGMEUwMjVDQzZGOThGRAotOjEwM0Q0MDAwODUzRjIzRkZGMUZCNUUyNUJFQTIxRkI3RDE3QTkyNjFBQQotOjEwM0Q1MDAwOUUwNkJCRjcyM0NBNjMwQkQzOTdCOTM4NjEyMDk1OTBCMQotOjEwM0Q2MDAwRkY1OUJENzYwRTlERTc1NDEzRjJBMjVBQTMwNUU0NzNFMgotOjEwM0Q3MDAwRjAwMzUyRDZCMDI4Qzc0QUJDNjZBQTBBMUQxOEZGOTg5RAotOjEwM0Q4MDAwRjNEQTZFRTJDN0U5QTgwOThDMTgzNzEwQUI0Nzc1RDQ4RgotOjEwM0Q5MDAwMzJDNTUwMkY3RkQxNDYwRUU1QTg2RkNGODAxRDY4N0ZCQQotOjEwM0RBMDAwQ0RDOUZENDZDQ0YzMzQ5ODgyQTQwRkE2RjU2QUM0QTExMAotOjEwM0RCMDAwQzU3ODg0RjNDNUMwQ0RBQUQwMUZCRUIxQzA1MEU2NDlCNgotOjEwM0RDMDAwN0Y4Q0Q4NTAzRkFGOUQyOTAxRDQ2OTk4OUJFRUZEMTk5NwotOjEwM0REMDAwRTUwRTA4QkFBOEFFNUIzMkJDOUZEM0JDOTk5Q0RCMzgxOQotOjEwM0RFMDAwRTU0NTdDNEZDQjIxMTNGNTE5M0Q4RkU3M0Y3QzY4MjFEQQotOjEwM0RGMDAwMjU4RDI3RjI5QThENEU3RkY5Q0QwQTkyMjY4NUExNURGOQotOjEwM0UwMDAwRjVCMDE0MzY5NjNGOURDRjZDOEU1RDQ3NzE1MDJGQ0MyOAotOjEwM0UxMDAwNDlERkNBODM4QzkxRkVDODZEQ0FBRkRBNjQwRDRCMjlBNQotOjEwM0UyMDAwNjRBN0ZGM0Q2MjRBRDhDMTU4N0VFQUY0NEIyMDIwN0U0OQotOjEwM0UzMDAwOTQwNzkwMTVEMDcwNUIxM0VCQzMzODJFMzcxNTJFNzA5NgotOjEwM0U0MDAwQjkxOUMzMjc1RTNGOTEzQ0Y2Qzc0MTkzRDYxRkRGNUI4QwotOjEwM0U1MDAwMDc3NjEyN0ZFMkZERkE2NjZDN0ZFRTQxOTE4REU2Q0IyQwotOjEwM0U2MDAwREM3MEIxMEQ5Q0NGRUZDRjcxOUNBRkIwMENFNzVDQTFDMwotOjEwM0U3MDAwM0E0RUI4RTNBMzlBRDA3RjVEQUMzRTg4Mzc5MDVGMjk3NQotOjEwM0U4MDAwRTZCNzJFNTZBNzNBMkJEN0VBRjJGQTEzNzU4OUYxMjQzMgotOjEwM0U5MDAwQ0U4Mzc4REU3MTlDRTNGOEMxM0I2M0Q3NkQ4NTAyQjdCMgotOjEwM0VBMDAwQjI4RjQxRTBGNTJCQzU5RjVDMTgzRDhFNkQwNThCMjRDQwotOjEwM0VCMDAwNzVDQTVCRjg3RkM0MkI2QzVFODZCQzhFOUVFMTRBM0Y2MAotOjEwM0VDMDAwRjE5RjBBNUYyMUE0Q0FGMTdFRTAwMDMxMEYxQTI0OEIxMgotOjEwM0VEMDAwNzJFQTE5RjNDMDRCRjM2MDM5Q0Q4MzRFRDFFN0YzM0M1RQotOjEwM0VFMDAwN0E5RDMzOUEwNzZENjI5RDAzRDFBMzNBNUM0RkYyNDhFNQotOjEwM0VGMDAwMzJFNTFCMzEyM0VCNTExNkJBOEFDNDNDQ0FBMzhFMkU3RAotOjEwM0YwMDAwRDY3MEEyQkVFRTNEOTREQzdGMEFGNTAzNEMzRDZGNDJCNQotOjEwM0YxMDAwRkI4MDNFRDZFRkZCQUNDMTRCQjgzRjFCRTQ3RTNEQzZGOQotOjEwM0YyMDAwRUI0QTBEOUU2RkMyRkRBRUJBQzU4QTFGRUIzNDBCMzE1MgotOjEwM0YzMDAwQkQ2NjhCOTgwQkFCMzkxN0VCQTgyNzJCRDg1RjQ4RkFENwotOjEwM0Y0MDAwRDhENzc4Q0YyRUNGOEJFMjNCRkVGNTQzNzQ0RUY3MkVCOQotOjEwM0Y1MDAwMDFFRERDMDVBNURENzQ1RUVCMTBGRUJFOERDRjk5MEY4MwotOjEwM0Y2MDAwOTM4NUJGQUU1QTM1RDcyMkNFQjMzOEQ5MUY0RkY3RTY2NwotOjEwM0Y3MDAwQjkzMjA5NTc0RDBGN0YwNDg0NUU0RjhGOUE0Qjc4RjQwNgotOjEwM0Y4MDAwNkMzNTA4QkRCM0NDRUREOTRCN0VDQUFDQ0EyNUY0MUI0OQotOjEwM0Y5MDAwRjE1OEJFMUFEMEUwMDgzM0RDOUZFQ0QwRUUxQkU3QUYzRgotOjEwM0ZBMDAwQTc1NDlCODM0QkZDNTNFN0U5M0ZDNDVGMEQ4RTM2RTQ3NwotOjEwM0ZCMDAwRkQyNEYxNzA3OTAyMUZBNjIyMTY2OTA5OUNFMjdDRjRBNwotOjEwM0ZDMDAwRUIxMUFGMEMwREFGNjNFQzY5QkMzMjYyNzhCMTBFRTQ1QgotOjEwM0ZEMDAwNkQwQUUxMTYxMkY1OUZFNzFBMEVFRDEyNDQ5MkYwNEVBQgotOjEwM0ZFMDAwMTI1NzcyOEMyODI3MzJCQzU1REEzREM3NzJFOUJDQzEyMgotOjEwM0ZGMDAwMTg1OUQ5RTkyNDNDQTEzOUY0OEMzRTdDQzVBNUY1Mzk4MgotOjEwNDAwMDAwRDA1NzE0NzlERTE4RTM3OTYzOUM4RkVGM0VDMUM3Qzg5RgotOjEwNDAxMDAwRTJENEU5QTQxODFGRDFGRTE3OEJCQjg2RTJERDY3RTM2QgotOjEwNDAyMDAwNTVCNDM5RkE4RjU0RkZBQzM4OUI1Q0RBN0ZDOTlDRDEwOAotOjEwNDAzMDAwRkIyQUU5QzNDNTZDMkVFNjg4QUNGNUY1QThFQjRFM0UyRAotOjEwNDA0MDAwN0Q2N0UwRUY5MUM1RjREREU5NEQ3NzZGMjYzREYzRDI1MgotOjEwNDA1MDAwQThDMTRCRjVDQzhERUFFOTNFOTM5RTdCRjlGNDNGRDNBMgotOjEwNDA2MDAwRDg3MTQzRjRDRDdGQ0RGMzVGOEU4QTk0RTJCMDBBMDAxRAotOjEwNDA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4MDAwMDAwMDAyOAotOjEwNDA4MDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDBGMAotOjEwNDA5MDAwMDAwMDAwMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTBFOAotOjEwNDBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDBGMAotOjEwNDBCMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDBGMAotOjEwNDBDMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOAotOjEwNDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAotOjEwNDBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAotOjEwNDBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAotOjEwNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgotOjEwNDExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgotOjEwNDEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgotOjEwNDEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgotOjEwNDE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RgotOjEwNDE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgotOjEwNDE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgotOjEwNDE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgotOjEwNDE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgotOjEwNDE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgotOjEwNDFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgotOjEwNDFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgotOjEwNDFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgotOjEwNDFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERgotOjEwNDFFMDAwMDAwMDMzMjgwMDEwMDAwMDAwMDAwMDA4MDAwMDMzMzBGOQotOjEwNDFGMDAwMDAxMDAwMDAwMDAwMDAwMjAwMDAzMzI4MDAxMDAwMDA0MgotOjEwNDIwMDAwMDAwMDAwMTAwMDAwM0E3ODAwMDAwMDAwMDAwMDAwMDhFNAotOjEwNDIxMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDA5RQotOjEwNDIyMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwRQotOjEwNDIzMDAwMDAwMDAwMDAwMDAwMzEyMDAwMDAwMDAwMDAwMDAwMDgyNQotOjEwNDI0MDAwMDAwMDMzNjAwMDAxMDAwNDAwMDAwMDAxMDAwMDMzNjgzQQotOjEwNDI1MDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAzMzcwMDAwMDAwMDBCOQotOjEwNDI2MDAwMDAwMDAwMDgwMDAwMzM3NDAwMDAwMDAwMDAwMDAwMDI5RAotOjEwNDI3MDAwMDAwMDNBNzAwMDAwMDAwMDAwMDAwMDA4MDAwMDNBNDAxMgotOjEwNDI4MDAwMDAwODAwMDAwMDAwMDAwODAwMDAzRDg4MDA0MDAwMDAxOQotOjEwNDI5MDAwMDAwMDAwNDAwMDAwM0E1MDAwMDgwMDAwMDAwMDAwMDg0NAotOjEwNDJBMDAwMDAwMDNBNjAwMDA4MDAwMDAwMDAwMDA4MDAwMDNBODhBMgotOjEwNDJCMDAwMDBDODAwMDAwMDAwMDA5ODAwMDAzQzE4MDA5ODAwMDBCMgotOjEwNDJDMDAwMDAwMDAwMjgwMDAwM0M1ODAwOTgwMDAwMDAwMDAwMjg3MgotOjEwNDJEMDAwMDAwMDMzNzgwMzYwMDAzMDAwMDAwMzYwMDAwMDNFQjA0RgotOjEwNDJFMDAwMDAwODAwMDAwMDAwMDAwMTAwMDAzRUIxMDAwODAwMDBDRQotOjEwNDJGMDAwMDAwMDAwMDEwMDAwMjAwODAwMTAwMDAwMDAwMDAwMTA3NQotOjEwNDMwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDA4ODAwMDAwMDAwNQotOjEwNDMxMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAxRAotOjEwNDMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAotOjEwNDMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAotOjEwNDM0MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBFRAotOjEwNDM1MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAotOjEwNDM2MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDA0RAotOjEwNDM3MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBCRAotOjEwNDM4MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAotOjEwNDM5MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAxRAotOjEwNDNBMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDA4RAotOjEwNDNCMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAotOjEwNDNDMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDBFRAotOjEwNDNEMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDA1RAotOjEwNDNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRAotOjEwNDNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAotOjEwNDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQwotOjEwNDQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QwotOjEwNDQyMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDA4QwotOjEwNDQzMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBGQwotOjEwNDQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QwotOjEwNDQ1MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDA1QwotOjEwNDQ2MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBDQwotOjEwNDQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQwotOjEwNDQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQwotOjEwNDQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQwotOjEwNDRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQwotOjEwNDRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyQzgyMgotOjEwNDRDMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDAwMDAxMDAwMDAwMDBFQgotOjEwNDREMDAwMDAwMDAwMDAwMDAwNDAwMDA0OTAwMDAwMDAwMDA0OTA3NAotOjEwNDRFMDAwMDAwMDE5QzgwMDAwMDAwMDAwMDAwMDA4MDAwMDQ5NDg1MgotOjEwNDRGMDAwMDAwODAwMDAwMDAwMDAwODAwMDA0OTI4MDAwODAwMDAzMwotOjEwNDUwMDAwMDAwMDAwMDgwMDAwNDkzODAwMDgwMDAwMDAwMDAwMDgxMgotOjEwNDUxMDAwMDAwMDIwMDgwMDEwMDAwMDAwMDAwMDEwMDAwMDIwMDAzMwotOjEwNDUyMDAwMDAwMDAwMDAwMDAwMDAwODAwMDA0MDEwMDQ5MDAwNDA1RgotOjEwNDUzMDAwMDAwMDAwNDAwMDAwNDk5ODAwMDgwMDAwMDAwMDAwMDE1MQotOjEwNDU0MDAwMDAwMDQ5OTkwMDA4MDAwMDAwMDAwMDAxODAwMDAwMDAwMAotOjEwNDU1MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBEQgotOjEwNDU2MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQgotOjEwNDU3MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAzQgotOjEwNDU4MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBBQgotOjEwNDU5MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QgotOjEwNDVBMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwQgotOjEwNDVCMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDA3QgotOjEwNDVDMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QgotOjEwNDVEMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDBEQgotOjEwNDVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQgotOjEwNDVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQgotOjEwNDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQQotOjEwNDYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QQotOjEwNDYyMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQQotOjEwNDYzMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQQotOjEwNDY0MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBFQQotOjEwNDY1MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQQotOjEwNDY2MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDA0QQotOjEwNDY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAxODAwMDBFMgotOjEwNDY4MDAwMDAwMDAwMTgwMDAwNDMwMDAwNDAwMDAwMDAwMDAwNDA0RgotOjEwNDY5MDAwMDAwMDQzMDAwMDQwMDAwMjAwMDAwMDAxMDAwMDQzMDE1MAotOjEwNDZBMDAwMDA0MDAwMDIwMDAwMDAwMDAwMDAzMDAwMDA0MDAwMDA1OAotOjEwNDZCMDAwMDAwMDAwNDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQQotOjEwNDZDMDAwMDAwMDMwMDAwMDA4MDA0MDAwMDAwMDA0MDAwMDMwMDQzQQotOjEwNDZEMDAwMDAwODAwNDAwMDAwMDAwNDAwMDA0QjAwMDAyODAwMDAxQgotOjEwNDZFMDAwMDAwMDAwMjgwMDAwNEI1MDAwMTAwMDAwMDAwMDAwMTBFNwotOjEwNDZGMDAwMDAwMDM4MDAwMDgwMDAwMDAwMDAwMDgwMDAwMDM4MDA0QQotOjEwNDcwMDAwMDAwODAwODAwMDAwMDAwMjAwMDAzOTAwMDAyMDAwMDBDNgotOjEwNDcxMDAwMDAwMDAwMjAwMDAwMjAwODAwMTAwMDAwMDAwMDAwMTAzMQotOjEwNDcyMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDUxMDgwOAotOjEwNDczMDAwMDAwODAwMDAwMDAwMDAwODAwMDA1MTIwMDAwODAwMDBGMAotOjEwNDc0MDAwMDAwMDAwMDgwMDAwNTEzMDAwMDgwMDAwMDAwMDAwMDhEMAotOjEwNDc1MDAwMDAwMDUxQzAwMDA4MDAwMDAwMDAwMDAxMDAwMDUxQzEyRAotOjEwNDc2MDAwMDAwODAwMDAwMDAwMDAwMTAwMDAzOTQwMDAxMDAwMDRCMwotOjEwNDc3MDAwMDAwMDAwMDQwMDAwNTFEMDAwMzAwMDE4MDAwMDAwMTBCQwotOjEwNDc4MDAwMDAwMDUxRDgwMDMwMDAxODAwMDAwMDAyODAwMDAwMDAzNgotOjEwNDc5MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDA5OQotOjEwNDdBMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OQotOjEwNDdCMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDBGOQotOjEwNDdDMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDA2OQotOjEwNDdEMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQotOjEwNDdFMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDBDOQotOjEwNDdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOQotOjEwNDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOAotOjEwNDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OAotOjEwNDgyMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwOAotOjEwNDgzMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOAotOjEwNDg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzRTg1RAotOjEwNDg1MDAwMDA4MDAwMDAwMDAwMDA4MDAwMDAwMDAxMDAwMDAwMDA1NwotOjEwNDg2MDAwMDAwMDAwMDAwMDAwMjAwODAwMTAwMDAwMDAwMDAwMTAwMAotOjEwNDg3MDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDJEQTA0MwotOjEwNDg4MDAwMDAwODAwMDAwMDAwMDAwODAwMDAyREI4MDAwODAwMDAyQgotOjEwNDg5MDAwMDAwMDAwMDgwMDAwMjRFODAyRDAwMDI4MDAwMDAyRDAzOAotOjEwNDhBMDAwMDAwMDJFNTgwMDA4MDAwMDAwMDAwMDAxMDAwMDJFNTlGMgotOjEwNDhCMDAwMDAwODAwMDAwMDAwMDAwMTAwMDAyRDkwMDAwODAwMDAyQQotOjEwNDhDMDAwMDAwMDAwMDg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAotOjEwNDhEMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDBEOAotOjEwNDhFMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDA0OAotOjEwNDhGMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOAotOjEwNDkwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDBBNwotOjEwNDkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NwotOjEwNDkyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NwotOjEwNDkzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NwotOjEwNDk0MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBFNwotOjEwNDk1MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENwotOjEwNDk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDBDNwotOjEwNDk3MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBCNwotOjEwNDk4MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNwotOjEwNDk5MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1MDA3MgotOjEwNDlBMDAwMDA0MDAwMDAwMDAwMDAwODAwMDAyNTA4MDA0MDAwMDA1MgotOjEwNDlCMDAwMDAwMDAwMjgwMDAwMDlDMDAxMjAwMDEwMDAwMDAwMDhDRAotOjEwNDlDMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDBFNwotOjEwNDlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDIwMDJEMDAwMjg3RAotOjEwNDlFMDAwMDAwMDAwMDgwMDAwMzAwMDAwMDAwMDAwMDAwMDEwMDA3RgotOjEwNDlGMDAwMDAwMDUwOTkwMDAwMDAwMDAwMDAwMDAxMDAwMDUwQjBDRAotOjEwNEEwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDA0NUEwMDA5MDAwMDgyNwotOjEwNEExMDAwMDAwMDAwMDg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQotOjEwNEEyMDAwMDAwMDI5NjAwMDA4MDAwMDAwMDAwMDAxMDAwMDI5NjE2QQotOjEwNEEzMDAwMDAwODAwMDAwMDAwMDAwMTAwMDAyOTcwMDAwODAwMDRDOAotOjEwNEE0MDAwMDAwMDAwMDIwMDAwMjk3ODAwMDgwMDA0MDAwMDAwMDRCMwotOjEwNEE1MDAwMDAwMDJGQjAwMDA4MDAwMDAwMDAwMDA0MDAwMDJGQjQ4OAotOjEwNEE2MDAwMDAwODAwMDAwMDAwMDAwNDAwMDAyRkMwMDAwMDAwMDA0QgotOjEwNEE3MDAwMDAwMDAwMDgwMDAwMkZDODAwMDAwMDAwMDAwMDAwMDgyRgotOjEwNEE4MDAwMDAwMDMwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDUwNDA1NgotOjEwNEE5MDAwMDAwMTAwMDEwMDAwMDAwMTAwMDA1MDAwMDAwMDAwMDBDMwotOjEwNEFBMDAwMDAwMDAwMjAwMDAwMDgwODAwMTAwMDAwMDAwMDAwMDRDMgotOjEwNEFCMDAwMDAwMDA4MEMwMDEwMDAwMDAwMDAwMDAxMDAwMDA4QjcxMgotOjEwNEFDMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwOEI2MDAwMDAwMDAyNwotOjEwNEFEMDAwMDAwMDAwMDEwMDAwMTAwMDAwMzAwMDE4MDAwMDAwMDQ3OQotOjEwNEFFMDAwMDAwMDEwMDQwMDMwMDAxODAwMDAwMDA0MDAwMDEwMDg0RQotOjEwNEFGMDAwMDAzMDAwMTgwMDAwMDAwMjAwMDAxMDBBMDAzMDAwMTgwQQotOjEwNEIwMDAwMDAwMDAwMDIwMDAwMTAwQzAwMzAwMDE4MDAwMDAwMDEzRQotOjEwNEIxMDAwMDAwMDEwMEQwMDMwMDAxODAwMDAwMDAxMDAwMDEwMEUxMQotOjEwNEIyMDAwMDAzMDAwMTgwMDAwMDAwMTAwMDAxMDEwMDAzMDAwMThENAotOjEwNEIzMDAwMDAwMDAwMDQwMDAwMTAxNDAwMzAwMDE4MDAwMDAwMDQwMQotOjEwNEI0MDAwMDAwMDMwMDAwMTAwMDA4MDAwMDgwMDA0MDAwMDMwMDQ3NAotOjEwNEI1MDAwMDEwMDAwODAwMDA4MDAwNDAwMDAwMDBBMDAwMDAwMDBCRQotOjEwNEI2MDAwMDAwMDAwMDAwMDAwMzA2ODAxMDAwMDgwMDAwMDAwMDEyQgotOjEwNEI3MDAwMDAwMDMwNjkwMTAwMDA4MDAwMDAwMDAxMDAwMDMwNkM3RQotOjEwNEI4MDAwMDEwMDAwODAwMDAwMDAwMjAwMDAzMDZFMDEwMDAwODA4MwotOjEwNEI5MDAwMDAwMDAwMDIwMDAwMzA3MDAxMDAwMDgwMDAwMDAwMDRFRQotOjEwNEJBMDAwMDAwMDMwNzQwMTAwMDA4MDAwMDAwMDA0MDAwMDMwNjY0NgotOjEwNEJCMDAwMDEwMDAwODAwMDAwMDAwMjAwMDAzMDY0MDEwMDAwODA1RAotOjEwNEJDMDAwMDAwMDAwMDEwMDAwMzA2MDAxMDAwMDgwMDAwMDAwMDJEMQotOjEwNEJEMDAwMDAwMDMwNjIwMTAwMDA4MDAwMDAwMDAyMDAwMDMwNTA0MAotOjEwNEJFMDAwMDEwMDAwODAwMDAwMDAwNDAwMDAzMDU0MDEwMDAwODAzQgotOjEwNEJGMDAwMDAwMDAwMDQwMDAwMzA1ODAxMDAwMDgwMDAwMDAwMDRBNAotOjEwNEMwMDAwMDAwMDMwNUMwMTAwMDA4MDAwMDAwMDA0MDAwMDMwN0NFNwotOjEwNEMxMDAwMDEwMDAwODAwMDAwMDAwMTAwMDAzMDdEMDEwMDAwODBFNAotOjEwNEMyMDAwMDAwMDAwMDEwMDAwMUMxODAwMTAwMDAwMDAwMDAwMDQzQgotOjEwNEMzMDAwMDAwMDFDMzAwMDEwMDAwMDAwMDAwMDA0MDAwMDFDMzhDMAotOjEwNEM0MDAwMDAxMDAwMDAwMDAwMDAwNDgwMDAwMDAwMDAwMDAwMDBEMAotOjEwNEM1MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAotOjEwNEM2MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDA0NAotOjEwNEM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QzEwMDAwODAwMDBEMAotOjEwNEM4MDAwMDAwMDAwMDIwMDAwNEMxMjAwMDgwMDAwMDAwMDAwMDJCQQotOjEwNEM5MDAwMDAwMDRDMTQwMDA4MDAwMDAwMDAwMDA0MDAwMDRDMjAzQwotOjEwNENBMDAwMDAwODAwMDAwMDAwMDAwODAwMDA0QzMwMDA0MDAwMDgzMAotOjEwNENCMDAwMDAwMDAwMDgwMDAwNEMwMDAwMDgwMDAwMDAwMDAwMDI5NgotOjEwNENDMDAwMDAwMDRDMDIwMDA4MDAwMDAwMDAwMDAxMDAwMDRDMDQzRAotOjEwNENEMDAwMDAwODAwMDAwMDAwMDAwMjAwMDA0Q0QwMDAwODAwMDBBNgotOjEwNENFMDAwMDAwMDAwMDgwMDAwNENFMDAwMDgwMDAwMDAwMDAwMDQ4NAotOjEwNENGMDAwMDAwMDRDRTQwMDA4MDAwMDAwMDAwMDAxMDAwMDRDRjAzRgotOjEwNEQwMDAwMDAwODAwMDAwMDAwMDAwMjAwMDA0Q0Y0MDAwODAwMDA1MQotOjEwNEQxMDAwMDAwMDAwMDIwMDAwNEQwMDAwMDgwMDAwMDAwMDAwMDQzOAotOjEwNEQyMDAwMDAwMDUwMDAwMDEwMDAwMDAwMDAwMDA0MDAwMDUwMDRDQgotOjEwNEQzMDAwMDAxMDAwMDAwMDAwMDAwNDAwMDA1MDA4MDAxMDAwMDBGNwotOjEwNEQ0MDAwMDAwMDAwMDQwMDAwMTQwMDAwMDgwMDAwMDAwMDAwMDI0MQotOjEwNEQ1MDAwMDAwMDE0MDIwMDA4MDAwMDAwMDAwMDAxMDAwMDE0MDQxQwotOjEwNEQ2MDAwMDAwODAwMDAwMDAwMDAwMjAwMDAxNDEwMDAwODAwMDAwRAotOjEwNEQ3MDAwMDAwMDAwMDIwMDAwMTQxNDAwMDgwMDAwMDAwMDAwMDJGRgotOjEwNEQ4MDAwMDAwMDE0MTYwMDA4MDAwMDAwMDAwMDAyMDAwMDE5QjgxRQotOjEwNEQ5MDAwMDAwODAwMDAwMDAwMDAwODAwMDAxNDIwMDAwODAwMDBDNwotOjEwNERBMDAwMDAwMDAwMDIwMDAwMTQyNDAwMDgwMDAwMDAwMDAwMDJCRgotOjEwNERCMDAwMDAwMDE5QzgwMDA4MDAwMDAwMDAwMDA4MDAwMDJDMTBDNgotOjEwNERDMDAwMDAwODAwMDAwMDAwMDAwMTAwMDAyQzExMDAwODAwMDA5NQotOjEwNEREMDAwMDAwMDAwMDEwMDAwMkMxMjAwMDgwMDAwMDAwMDAwMDE4QgotOjEwNERFMDAwMDAwMDJDMTMwMDA4MDAwMDAwMDAwMDAxMDAwMDJDMDA0RgotOjEwNERGMDAwMDAwODAwMDAwMDAwMDAwMjAwMDAyQzAyMDAwODAwMDA3MwotOjEwNEUwMDAwMDAwMDAwMDEwMDAwMkMwNDAwMDgwMDAwMDAwMDAwMDI2NwotOjEwNEUxMDAwMDAwMDJDMzAwMDA4MDAwMDAwMDAwMDAyMDAwMDJDMzJDRQotOjEwNEUyMDAwMDAwODAwMDAwMDAwMDAwMjAwMDAyQzM0MDAwODAwMDAxMAotOjEwNEUzMDAwMDAwMDAwMDIwMDAwMkMyMDAwMDgwMDAwMDAwMDAwMDExQgotOjEwNEU0MDAwMDAwMDJDMjEwMDA4MDAwMDAwMDAwMDAxMDAwMDJDMjJCRQotOjEwNEU1MDAwMDAwODAwMDAwMDAwMDAwMTAwMDAyQzIzMDAwODAwMDBGMgotOjEwNEU2MDAwMDAwMDAwMDEwMDAwMkMyNDAwMDgwMDAwMDAwMDAwMDFFOAotOjEwNEU3MDAwMDAwMDJDMjUwMDA4MDAwMDAwMDAwMDAxMDAwMDJDMjY4NgotOjEwNEU4MDAwMDAwODAwMDAwMDAwMDAwMTAwMDAxNDAwMDAwODAwMDBGRAotOjEwNEU5MDAwMDAwMDAwMDIwMDAwMTQwMjAwMDgwMDAwMDAwMDAwMDFGMQotOjEwNEVBMDAwMDAwMDE0MDQwMDA4MDAwMDAwMDAwMDAyMDAwMDE0MTJCQQotOjEwNEVCMDAwMDBDMDAwMTgwMDAwMDAwMjAwMDAxNDEwMDBDMDAwMTgxQwotOjEwNEVDMDAwMDAwMDAwMDIwMDAwMTQxQzAwQzAwMDE4MDAwMDAwMDhEMAotOjEwNEVEMDAwMDAwMDE0MTQwMEMwMDAxODAwMDAwMDA4MDAwMDE0Mjc4RgotOjEwNEVFMDAwMDBDMDAwMTgwMDAwMDAwMTAwMDAxNDI0MDBDMDAwMThEOQotOjEwNEVGMDAwMDAwMDAwMDIwMDAwMTQyNjAwQzAwMDE4MDAwMDAwMDE5RAotOjEwNEYwMDAwMDAwMDE1OTAwMDA4MDAwMDAwMDAwMDA4MDAwMDE1QTAzNwotOjEwNEYxMDAwMDAwODAwMDAwMDAwMDAwODAwMDAxNUIwMDAwODAwMDBCNAotOjEwNEYyMDAwMDAwMDAwMDg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQotOjEwNEYzMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDA3MQotOjEwNEY0MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBFMQotOjEwNEY1MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQotOjEwNEY2MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDA0MQotOjEwNEY3MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBCMQotOjEwNEY4MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMQotOjEwNEY5MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAxMQotOjEwNEZBMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDA4MQotOjEwNEZCMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQotOjEwNEZDMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDBFMQotOjEwNEZEMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDA1MQotOjEwNEZFMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQotOjEwNEZGMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDBCMQotOjEwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAyMAotOjEwNTAxMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAotOjEwNTAyMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDA4MAotOjEwNTAzMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBGMAotOjEwNTA0MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAotOjEwNTA1MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAotOjEwNTA2MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBDMAotOjEwNTA3MDAwMDAwMDAwMDAwMDAwMDAwMDA2MDIwNTAwMDAwMDAwMDAyMwotOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2JueDJ4L2JueDJ4LWUxLTYuMi45LjAuZncuaWhleCBiL2Zpcm13YXJlL2JueDJ4L2JueDJ4LWUxLTYuMi45LjAuZncuaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWQ3ZjU4Ci0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvYm54MngvYm54MngtZTEtNi4yLjkuMC5mdy5paGV4CkBAIC0wLDAgKzEsOTQ4NCBAQAorOjEwMDAwMDAwMDAwMDNCQjAwMDAwMDA2ODAwMDAwNzBDMDAwMDNDMjAyRQorOjEwMDAxMDAwMDAwMDFBRjgwMDAwNDMzMDAwMDAwMDdDMDAwMDVFMzA1MQorOjEwMDAyMDAwMDAwMDdBMkMwMDAwNUVCMDAwMDAwMEIwMDAwMEQ4RTBCNAorOjEwMDAzMDAwMDAwMDgwMjAwMDAwRDk5ODAwMDAwMDg4MDAwMTU5QzAwRAorOjEwMDA0MDAwMDAwMDM5ODgwMDAxNUE1MDAwMDAwMDkwMDAwMTkzRTA0MAorOjEwMDA1MDAwMDAwMEFDMDQwMDAxOTQ3ODAwMDAwRkZDMDAwMjQwODAxNgorOjEwMDA2MDAwMDAwMDAwMDQwMDAyNTA4MDAyMDQwMDQ4MDAwMDAwMEY1RAorOjEwMDA3MDAwMDIwNDAwNTQwMDAwMDA0NTAyMDQwMDU4MDAwMDAwMDA4MworOjEwMDA4MDAwMDIwNDAwNUMwMDAwMDAwNjAyMDQwMDcwMDAwMDAwMDQ4RQorOjEwMDA5MDAwMDIwNDAwNzgwMDAwMDAwMDAyMDQwMDdDMTIxNzAwMDAzNworOjEwMDBBMDAwMDIwNDAwODAyMjE3MDAwMDAyMDQwMDg0MzIxNzAwMDBCRQorOjEwMDBCMDAwMDYwNDAwODgwMDAwMDAwNTAyMDQwMDlDMTIxNTAwMDBFMAorOjEwMDBDMDAwMDIwNDAwQTAyMjE1MDAwMDAyMDQwMEE0MzIxNTAwMDA2MgorOjEwMDBEMDAwMDYwNDAwQTgwMDAwMDAwNDAyMDQwMEI4MDIxMDAwMDA5QQorOjEwMDBFMDAwMDIwNDAwQkMwMDEwMDAwMDAyMDQwMEMwMTAxMDAwMDA1OAorOjEwMDBGMDAwMDIwNDAwQzQyMDEwMDAwMDAyMDQwMEM4MzAxMDAwMDBGOAorOjEwMDEwMDAwMDYwNDAwQ0MwMDAwMDAwNDAyMDQwMERDMDAxMDAwMDAyMworOjEwMDExMDAwMDIwNDAwRTAxMjE0MDAwMDAyMDQwMEU0MjIxNDAwMDBCMworOjEwMDEyMDAwMDIwNDAwRTgzMjE0MDAwMDA2MDQwMEVDMDAwMDAwMDRBMQorOjEwMDEzMDAwMDEwNDAxMjQwMDAwMDAwMDAxMDQwMTI4MDAwMDAwMDA2NworOjEwMDE0MDAwMDEwNDAxMkMwMDAwMDAwMDAxMDQwMTMwMDAwMDAwMDA0NworOjEwMDE1MDAwMDIwNDAwMDQwMDAwMDBGRjAyMDQwMDA4MDAwMDAwRkY4OQorOjEwMDE2MDAwMDIwNDAwMEMwMDAwMDBGRjAyMDQwMDEwMDAwMDAwRkY2OQorOjEwMDE3MDAwMDIwNDAwMTQwMDAwMDBGRjAyMDQwMDE4MDAwMDAwRkY0OQorOjEwMDE4MDAwMDIwNDAwMUMwMDAwMDBGRjAyMDQwMDIwMDAwMDAwRkYyOQorOjEwMDE5MDAwMDIwNDAwMjQwMDAwMDAzRTAyMDQwMDI4MDAwMDAwMDBDOQorOjEwMDFBMDAwMDIwNDAwMkMwMDAwMDAzRjAyMDQwMDMwMDAwMDAwM0Y2OQorOjEwMDFCMDAwMDIwNDAwMzQwMDAwMDAzRjAyMDQwMDM4MDAwMDAwMDA4OAorOjEwMDFDMDAwMDIwNDAwM0MwMDAwMDAzRjAyMDQwMDQwMDAwMDAwM0YyOQorOjEwMDFEMDAwMDIwNDAwNDQwMDAwMDAzRjAyMDQyMDA4MDAwMDAyMTE1NQorOjEwMDFFMDAwMDIwNDIwMEMwMDAwMDIwMDAyMDQyMDEwMDAwMDAyMDQ5RgorOjEwMDFGMDAwMDIwNDIwMTQwMDAwMDIxOTAyMDQyMDFDMDAwMEZGRkY2QQorOjEwMDIwMDAwMDIwNDIwMjAwMDAwRkZGRjAyMDQyMDI0MDAwMEZGRkY2MgorOjEwMDIxMDAwMDIwNDIwMjgwMDAwRkZGRjA2MDQyMDM4MDAwMDAwODBCMAorOjEwMDIyMDAwMDIwNDIyMzgwN0ZGRkZGRjAyMDQyMjNDMDAwMDAwM0ZDNworOjEwMDIzMDAwMDIwNDIyNDAwN0ZGRkZGRjAyMDQyMjQ0MDAwMDAwMEZENworOjEwMDI0MDAwMDEwNDIyNDgwMDAwMDAwMDAxMDQyMjRDMDAwMDAwMDBDQworOjEwMDI1MDAwMDEwNDIyNTAwMDAwMDAwMDAxMDQyMjU0MDAwMDAwMDBBQworOjEwMDI2MDAwMDEwNDIyNTgwMDAwMDAwMDAxMDQyMjVDMDAwMDAwMDA4QworOjEwMDI3MDAwMDEwNDIyNjAwMDAwMDAwMDAxMDQyMjY0MDAwMDAwMDA2QworOjEwMDI4MDAwMDEwNDIyNjgwMDAwMDAwMDAxMDQyMjZDMDAwMDAwMDA0QworOjEwMDI5MDAwMDEwNDIyNzAwMDAwMDAwMDAxMDQyMjc0MDAwMDAwMDAyQworOjEwMDJBMDAwMDEwNDIyNzgwMDAwMDAwMDAxMDQyMjdDMDAwMDAwMDAwQworOjEwMDJCMDAwMDIwNDI0QkMwMDAwMDAwMTBDMDQyMDAwMDAwMDAzRTgzQworOjEwMDJDMDAwMEEwNDIwMDAwMDAwMDAwMTBCMDQyMDAwMDAwMDAwMEFDNgorOjEwMDJEMDAwMDYwNTQwMDAwMDAwMEQwMDAyMDUwMDQ0MDAwMDAwMjA1QgorOjEwMDJFMDAwMDIwNTAwNDgwMDAwMDAzMjAyMDUwMDkwMDIxNTAwMjBCRgorOjEwMDJGMDAwMDIwNTAwOTQwMjE1MDAyMDAyMDUwMDk4MDAwMDAwMzA1RAorOjEwMDMwMDAwMDIwNTAwOUMwODEwMDAwMDAyMDUwMEEwMDAwMDAwMzM1OAorOjEwMDMxMDAwMDIwNTAwQTQwMDAwMDAzMDAyMDUwMEE4MDAwMDAwMzEyMgorOjEwMDMyMDAwMDIwNTAwQUMwMDAwMDAwMjAyMDUwMEIwMDAwMDAwMDU1QworOjEwMDMzMDAwMDIwNTAwQjQwMDAwMDAwNjAyMDUwMEI4MDAwMDAwMDIzQgorOjEwMDM0MDAwMDIwNTAwQkMwMDAwMDAwMjAyMDUwMEMwMDAwMDAwMDAyMQorOjEwMDM1MDAwMDIwNTAwQzQwMDAwMDAwNTAyMDUwMEM4MDAwMDAwMDJGQworOjEwMDM2MDAwMDIwNTAwQ0MwMDAwMDAwMjAyMDUwMEQwMDAwMDAwMDJERgorOjEwMDM3MDAwMDIwNTAwRDQwMDAwMDAwMTAyMDUwMTE0MDAwMDAwMDE4NAorOjEwMDM4MDAwMDIwNTAxMUMwMDAwMDAwMTAyMDUwMTIwMDAwMDAwMDIxRQorOjEwMDM5MDAwMDIwNTAyMDQwMDAwMDAwMTAyMDUwMjBDMDAwMDAwNDBGQQorOjEwMDNBMDAwMDIwNTAyMTAwMDAwMDA0MDAyMDUwMjFDMDAwMDAwMjBBRgorOjEwMDNCMDAwMDIwNTAyMjAwMDAwMDAxMzAyMDUwMjI0MDAwMDAwMjBCNAorOjEwMDNDMDAwMDYwNTAyNDAwMDAwMDAwQTA0MDUwMjgwMDAyMDAwMDAyQgorOjEwMDNEMDAwMDIwNTAwNTAwMDAwMDAwNzAyMDUwMDU0MDAwMDAwMDc1RAorOjEwMDNFMDAwMDIwNTAwNTgwMDAwMDAwMDAyMDUwMDVDMDAwMDAwMDg0MworOjEwMDNGMDAwMDYwNTAwNjAwMDAwMDAwNDAyMDUwMEQ4MDAwMDAwMDZBOQorOjEwMDQwMDAwMDIwNTAwRTAwMDAwMDAwRDAyMDUwMEU0MDAwMDAwMkRFMAorOjEwMDQxMDAwMDIwNTAwRTgwMDAwMDAwMDAyMDUwMEVDMDAwMDAwMjBEQQorOjEwMDQyMDAwMDIwNTAwRjAwMDAwMDAwMDAyMDUwMEY0MDAwMDAwMjBCQQorOjEwMDQzMDAwMDIwNTAwRjgwMDAwMDAwMDAyMDUwMEZDMDAwMDAwMjA5QQorOjEwMDQ0MDAwMDIwNTAwMDQwMDAwMDAwMTAyMDUwMDA4MDAwMDAwMDE5MAorOjEwMDQ1MDAwMDIwNTAwMEMwMDAwMDAwMTAyMDUwMDEwMDAwMDAwMDE3MAorOjEwMDQ2MDAwMDIwNTAwMTQwMDAwMDAwMTAyMDUwMDE4MDAwMDAwMDE1MAorOjEwMDQ3MDAwMDIwNTAwMUMwMDAwMDAwMTAyMDUwMDIwMDAwMDAwMDEzMAorOjEwMDQ4MDAwMDIwNTAwMjQwMDAwMDAwMTAyMDUwMDI4MDAwMDAwMDExMAorOjEwMDQ5MDAwMDIwNTAwMkMwMDAwMDAwMTAyMDUwMDMwMDAwMDAwMDFGMAorOjEwMDRBMDAwMDIwNTAwMzQwMDAwMDAwMTAyMDUwMDM4MDAwMDAwMDFEMAorOjEwMDRCMDAwMDIwNTAwM0MwMDAwMDAwMTAyMDUwMDQwMDAwMDAwMDFCMAorOjEwMDRDMDAwMDQwNjEwMDAwMjAwMDAyMDAyMDYwMERDMDAwMDAwMDEwQgorOjEwMDREMDAwMDEwNjAwRDgwMDAwMDAwMDA0MDYwMjAwMDAwMzAyMjAwQworOjEwMDRFMDAwMDIwNjAwREMwMDAwMDAwMDAyMDYwMDY4MDAwMDAwQjgwMAorOjEwMDRGMDAwMDIwNjAwNzgwMDAwMDExNDAxMDYwMEI4MDAwMDAwMDBBOAorOjEwMDUwMDAwMDEwNjAwQzgwMDAwMDAwMDAyMDYwMDZDMDAwMDAwQjhGMAorOjEwMDUxMDAwMDIwNjAwN0MwMDAwMDExNDAxMDYwMEJDMDAwMDAwMDA3RgorOjEwMDUyMDAwMDEwNjAwQ0MwMDAwMDAwMDA3MTgwNDAwMDA3QjAwMDA1QQorOjEwMDUzMDAwMDgxODA3NjAwMDE0MDIyMzA3MUMwMDAwMkEwNDAwMDBBQQorOjEwMDU0MDAwMDcxQzgwMDAzMjExMEE4MjA3MUQwMDAwMUUwQzE3MDdDRAorOjEwMDU1MDAwMDgxRDQ1NTA1NzU2MDIyNTAxMTgwMDAwMDAwMDAwMDBGNAorOjEwMDU2MDAwMDExODAwMDQwMDAwMDAwMDAxMTgwMDA4MDAwMDAwMDA0RAorOjEwMDU3MDAwMDExODAwMEMwMDAwMDAwMDAxMTgwMDEwMDAwMDAwMDAyRAorOjEwMDU4MDAwMDExODAwMTQwMDAwMDAwMDAyMTgwMDIwMDAwMDAwMDEwMworOjEwMDU5MDAwMDIxODAwMjQwMDAwMDAwMjAyMTgwMDI4MDAwMDAwMDNENgorOjEwMDVBMDAwMDIxODAwMkMwMDAwMDAwMDAyMTgwMDMwMDAwMDAwMDRCNworOjEwMDVCMDAwMDIxODAwMzQwMDAwMDAwMTAyMTgwMDM4MDAwMDAwMDA5QQorOjEwMDVDMDAwMDIxODAwM0MwMDAwMDAwMTAyMTgwMDQwMDAwMDAwMDQ3NgorOjEwMDVEMDAwMDIxODAwNDQwMDAwMDAwMDAyMTgwMDQ4MDAwMDAwMDE1QQorOjEwMDVFMDAwMDIxODAwNEMwMDAwMDAwMzAyMTgwMDUwMDAwMDAwMDAzOAorOjEwMDVGMDAwMDIxODAwNTQwMDAwMDAwMTAyMTgwMDU4MDAwMDAwMDQxNgorOjEwMDYwMDAwMDIxODAwNUMwMDAwMDAwMDAyMTgwMDYwMDAwMDAwMDFGOQorOjEwMDYxMDAwMDIxODAwNjQwMDAwMDAwMzAyMTgwMDY4MDAwMDAwMDBENworOjEwMDYyMDAwMDIxODAwNkMwMDAwMDAwMTAyMTgwMDcwMDAwMDAwMDRCNQorOjEwMDYzMDAwMDIxODAwNzQwMDAwMDAwMDAyMTgwMDc4MDAwMDAwMDQ5NgorOjEwMDY0MDAwMDIxODAwN0MwMDAwMDAwMzA2MTgwMDgwMDAwMDAwMDI3MQorOjEwMDY1MDAwMDIxODAwQTQwMDAwM0ZGRjAyMTgwMEE4MDAwMDAzRkZEQQorOjEwMDY2MDAwMDIxODAyMjQwMDAwMDAwMDAyMTgwMjM0MDAwMDAwMDBGQQorOjEwMDY3MDAwMDIxODAyNEMwMDAwMDAwMDAyMTgwMkU0MDAwMDAwRkYxMworOjEwMDY4MDAwMDYxODEwMDAwMDAwMDQwMDAyMUI4QkMwMDAwMDAwMDFDRgorOjEwMDY5MDAwMDIxQjgwMDAwMDAwMDAzNDAyMUI4MDQwMDAwMDAwMTg5NAorOjEwMDZBMDAwMDIxQjgwODAwMDAwMDAwQzAyMUI4MEMwMDAwMDAwMjBBNAorOjEwMDZCMDAwMEMxQjgzMDAwMDA3QTEyMDBBMUI4MzAwMDAwMDAxMzhFNworOjEwMDZDMDAwMEIxQjgzMDAwMDAwMTM4ODBBMUI4MzQwMDAwMDAwMDBGRQorOjEwMDZEMDAwMEMxQjgzNDAwMDAwMDFGNDBCMUI4MzQwMDAwMDAwMDU0RAorOjEwMDZFMDAwMDIxQjgzODAwMDA3QTEyMDAyMUI4M0MwMDAwMDAxRjRDRAorOjEwMDZGMDAwMDYxQTEwMDAwMDAwMDI3MzA0MUExOUNDMDAwMTAyMjcyOAorOjEwMDcwMDAwMDYxQTIwMDgwMDAwMDBDODA2MUEyMDAwMDAwMDAwMDI5NworOjEwMDcxMDAwMDQxQTQ5OTgwMDA0MDIyODA2MUEyRTI4MDAwMDAwMDIzNAorOjEwMDcyMDAwMDYxQTJFMjAwMDAwMDAwMjA2MUEwODAwMDAwMDAwMDIyRgorOjEwMDczMDAwMDYxQTA4MDgwMDAwMDAwNDA2MUEwODE4MDAwMDAwMDI0MworOjEwMDc0MDAwMDQxQTA4QjAwMDAyMDIyQzA2MUEyRkQwMDAwMDAwMDY3RQorOjEwMDc1MDAwMDQxQTJGRTgwMDAyMDIyRTA0MUEyRkMwMDAwNDAyMzBFRgorOjEwMDc2MDAwMDQxQTMwMDAwMDAxMDIzNDA2MUEzMDA0MDAwMDAwMDNBRAorOjEwMDc3MDAwMDQxQTMwMTAwMDAxMDIzNTA2MUEzMDE0MDAwMDAwMDM3QworOjEwMDc4MDAwMDQxQTMwMjAwMDAxMDIzNjA2MUEzMDI0MDAwMDAwMDM0QgorOjEwMDc5MDAwMDQxQTMwMzAwMDAxMDIzNzA2MUEzMDM0MDAwMDAwMDMxQQorOjEwMDdBMDAwMDQxQTMwNDAwMDAxMDIzODA2MUEzMDQ0MDAwMDAwMDNFOQorOjEwMDdCMDAwMDQxQTMwNTAwMDAxMDIzOTA2MUEzMDU0MDAwMDAwMDNCOAorOjEwMDdDMDAwMDQxQTMwNjAwMDAxMDIzQTA2MUEzMDY0MDAwMDAwMDM4NworOjEwMDdEMDAwMDQxQTMwNzAwMDAxMDIzQjA2MUEzMDc0MDAwMDAwMDM1NgorOjEwMDdFMDAwMDQxQTMwODAwMDAxMDIzQzA2MUEzMDg0MDAwMDAwMDMyNQorOjEwMDdGMDAwMDQxQTMwOTAwMDAxMDIzRDA2MUEzMDk0MDAwMDAwMDNGNAorOjEwMDgwMDAwMDQxQTMwQTAwMDAxMDIzRTA2MUEzMEE0MDAwMDAwMDNDMgorOjEwMDgxMDAwMDQxQTMwQjAwMDAxMDIzRjA2MUEzMEI0MDAwMDAwMDM5MQorOjEwMDgyMDAwMDQxQTMwQzAwMDAxMDI0MDA2MUEzMEM0MDAwMDAwMDM2MAorOjEwMDgzMDAwMDQxQTMwRDAwMDAxMDI0MTA2MUEzMEQ0MDAwMDAwMDMyRgorOjEwMDg0MDAwMDQxQTMwRTAwMDAxMDI0MjA2MUEzMEU0MDAwMDAwMDNGRQorOjEwMDg1MDAwMDQxQTMwRjAwMDAxMDI0MzA2MUEzMEY0MDAwMDAwMDNDRAorOjEwMDg2MDAwMDQxQTMxMDAwMDAxMDI0NDA2MUEzMTA0MDAwMDAwMDM5QQorOjEwMDg3MDAwMDQxQTMxMTAwMDAxMDI0NTA2MUEzMTE0MDAwMDAwMDM2OQorOjEwMDg4MDAwMDQxQTMxMjAwMDAxMDI0NjA2MUEzMTI0MDAwMDAwMDMzOAorOjEwMDg5MDAwMDQxQTMxMzAwMDAxMDI0NzA2MUEzMTM0MDAwMDAwMDMwNworOjEwMDhBMDAwMDQxQTMxNDAwMDAxMDI0ODA2MUEzMTQ0MDAwMDAwMDNENgorOjEwMDhCMDAwMDQxQTMxNTAwMDAxMDI0OTA2MUEzMTU0MDAwMDAwMDNBNQorOjEwMDhDMDAwMDQxQTMxNjAwMDAxMDI0QTA2MUEzMTY0MDAwMDAwMDM3NAorOjEwMDhEMDAwMDQxQTMxNzAwMDAxMDI0QjA2MUEzMTc0MDAwMDAwMDM0MworOjEwMDhFMDAwMDQxQTMxODAwMDAxMDI0QzA2MUEzMTg0MDAwMDAwMDMxMgorOjEwMDhGMDAwMDQxQTMxOTAwMDAxMDI0RDA2MUEzMTk0MDAwMDAwMDNFMQorOjEwMDkwMDAwMDQxQTMxQTAwMDAxMDI0RTA2MUEzMUE0MDAwMDAwMDNBRgorOjEwMDkxMDAwMDQxQTMxQjAwMDAxMDI0RjA2MUEzMUI0MDAwMDAwMDM3RQorOjEwMDkyMDAwMDQxQTMxQzAwMDAxMDI1MDA2MUEzMUM0MDAwMDAwMDM0RAorOjEwMDkzMDAwMDQxQTMxRDAwMDAxMDI1MTA2MUEzMUQ0MDAwMDAwMDMxQworOjEwMDk0MDAwMDQxQTMxRTAwMDAxMDI1MjA2MUEzMUU0MDAwMDAwMDNFQgorOjEwMDk1MDAwMDQxQTMxRjAwMDAxMDI1MzA2MUEzMUY0MDAwMDAwMDNCQQorOjEwMDk2MDAwMDQxQTMyMDAwMDAxMDI1NDA2MUEzMjA0MDAwMDAwMDM4NworOjEwMDk3MDAwMDQxQTMyMTAwMDAxMDI1NTA2MUEzMjE0MDAwMDAwMDM1NgorOjEwMDk4MDAwMDQxQTMyMjAwMDAxMDI1NjA2MUEzMjI0MDAwMDAwMDMyNQorOjEwMDk5MDAwMDQxQTMyMzAwMDAxMDI1NzA2MUEzMjM0MDAwMDAwMDNGNAorOjEwMDlBMDAwMDQxQTMyNDAwMDAxMDI1ODA2MUEzMjQ0MDAwMDAwMDNDMworOjEwMDlCMDAwMDQxQTMyNTAwMDAxMDI1OTA2MUEzMjU0MDAwMDAwMDM5MgorOjEwMDlDMDAwMDQxQTMyNjAwMDAxMDI1QTA2MUEzMjY0MDAwMDAwMDM2MQorOjEwMDlEMDAwMDQxQTMyNzAwMDAxMDI1QjA2MUEzMjc0MDAwMDAwMDMzMAorOjEwMDlFMDAwMDQxQTMyODAwMDAxMDI1QzA2MUEzMjg0MDAwMDAwMDNGRgorOjEwMDlGMDAwMDQxQTMyOTAwMDAxMDI1RDA2MUEzMjk0MDAwMDAwMDNDRQorOjEwMEEwMDAwMDQxQTMyQTAwMDAxMDI1RTA2MUEzMkE0MDAwMDAwMDM5QworOjEwMEExMDAwMDQxQTMyQjAwMDAxMDI1RjA2MUEzMkI0MDAwMDAwMDM2QgorOjEwMEEyMDAwMDQxQTMyQzAwMDAxMDI2MDA2MUEzMkM0MDAwMDAwMDMzQQorOjEwMEEzMDAwMDQxQTMyRDAwMDAxMDI2MTA2MUEzMkQ0MDAwMDAwMDMwOQorOjEwMEE0MDAwMDQxQTMyRTAwMDAxMDI2MjA2MUEzMkU0MDAwMDAwMDNEOAorOjEwMEE1MDAwMDQxQTMyRjAwMDAxMDI2MzA2MUEzMkY0MDAwMDAwMDNBNworOjEwMEE2MDAwMDQxQTMzMDAwMDAxMDI2NDA2MUEzMzA0MDAwMDAwMDM3NAorOjEwMEE3MDAwMDQxQTMzMTAwMDAxMDI2NTA2MUEzMzE0MDAwMDAwMDM0MworOjEwMEE4MDAwMDQxQTMzMjAwMDAxMDI2NjA2MUEzMzI0MDAwMDAwMDMxMgorOjEwMEE5MDAwMDQxQTMzMzAwMDAxMDI2NzA2MUEzMzM0MDAwMDAwMDNFMQorOjEwMEFBMDAwMDQxQTMzNDAwMDAxMDI2ODA2MUEzMzQ0MDAwMDAwMDNCMAorOjEwMEFCMDAwMDQxQTMzNTAwMDAxMDI2OTA2MUEzMzU0MDAwMDAwMDM3RgorOjEwMEFDMDAwMDQxQTMzNjAwMDAxMDI2QTA2MUEzMzY0MDAwMDAwMDM0RQorOjEwMEFEMDAwMDQxQTMzNzAwMDAxMDI2QjA2MUEzMzc0MDAwMDAwMDMxRAorOjEwMEFFMDAwMDQxQTMzODAwMDAxMDI2QzA2MUEzMzg0MDAwMDAwMDNFQworOjEwMEFGMDAwMDQxQTMzOTAwMDAxMDI2RDA2MUEzMzk0MDAwMDAwMDNCQgorOjEwMEIwMDAwMDQxQTMzQTAwMDAxMDI2RTA2MUEzM0E0MDAwMDAwMDM4OQorOjEwMEIxMDAwMDQxQTMzQjAwMDAxMDI2RjA2MUEzM0I0MDAwMDAwMDM1OAorOjEwMEIyMDAwMDQxQTMzQzAwMDAxMDI3MDA2MUEzM0M0MDAwMDAwMDMyNworOjEwMEIzMDAwMDQxQTMzRDAwMDAxMDI3MTA2MUEzM0Q0MDAwMDAwMDNGNgorOjEwMEI0MDAwMDQxQTMzRTAwMDAxMDI3MjA2MUEzM0U0MDAwMDAwMDNDNQorOjEwMEI1MDAwMDQxQTMzRjAwMDAxMDI3MzA2MUEzM0Y0MDAwMDAwMDM5NAorOjEwMEI2MDAwMDQxQTM0MDAwMDAxMDI3NDA2MUEzNDA0MDAwMDAwMDM2MQorOjEwMEI3MDAwMDQxQTM0MTAwMDAxMDI3NTA2MUEzNDE0MDAwMDAwMDMzMAorOjEwMEI4MDAwMDQxQTM0MjAwMDAxMDI3NjA2MUEzNDI0MDAwMDAwMDNGRgorOjEwMEI5MDAwMDQxQTM0MzAwMDAxMDI3NzA2MUEzNDM0MDAwMDAwMDNDRQorOjEwMEJBMDAwMDQxQTM0NDAwMDAxMDI3ODA2MUEzNDQ0MDAwMDAwMDM5RAorOjEwMEJCMDAwMDQxQTM0NTAwMDAxMDI3OTA2MUEzNDU0MDAwMDAwMDM2QworOjEwMEJDMDAwMDQxQTM0NjAwMDAxMDI3QTA2MUEzNDY0MDAwMDAwMDMzQgorOjEwMEJEMDAwMDQxQTM0NzAwMDAxMDI3QjA2MUEzNDc0MDAwMDAwMDMwQQorOjEwMEJFMDAwMDQxQTM0ODAwMDAxMDI3QzA2MUEzNDg0MDAwMDAwMDNEOQorOjEwMEJGMDAwMDQxQTM0OTAwMDAxMDI3RDA2MUEzNDk0MDAwMDAwMDNBOAorOjEwMEMwMDAwMDQxQTM0QTAwMDAxMDI3RTA2MUEzNEE0MDAwMDAwMDM3NgorOjEwMEMxMDAwMDQxQTM0QjAwMDAxMDI3RjA2MUEzNEI0MDAwMDAwMDM0NQorOjEwMEMyMDAwMDQxQTM0QzAwMDAxMDI4MDA2MUEzNEM0MDAwMDAwMDMxNAorOjEwMEMzMDAwMDQxQTM0RDAwMDAxMDI4MTA2MUEzNEQ0MDAwMDAwMDNFMworOjEwMEM0MDAwMDQxQTM0RTAwMDAxMDI4MjA2MUEzNEU0MDAwMDAwMDNCMgorOjEwMEM1MDAwMDQxQTM0RjAwMDAxMDI4MzA2MUEzNEY0MDAwMDAwMDM4MQorOjEwMEM2MDAwMDQxQTM1MDAwMDAxMDI4NDA2MUEzNTA0MDAwMDAwMDM0RQorOjEwMEM3MDAwMDQxQTM1MTAwMDAxMDI4NTA2MUEzNTE0MDAwMDAwMDMxRAorOjEwMEM4MDAwMDQxQTM1MjAwMDAxMDI4NjA2MUEzNTI0MDAwMDAwMDNFQworOjEwMEM5MDAwMDQxQTM1MzAwMDAxMDI4NzA2MUEzNTM0MDAwMDAwMDNCQgorOjEwMENBMDAwMDQxQTM1NDAwMDAxMDI4ODA2MUEzNTQ0MDAwMDAwMDM4QQorOjEwMENCMDAwMDQxQTM1NTAwMDAxMDI4OTA2MUEzNTU0MDAwMDAwMDM1OQorOjEwMENDMDAwMDQxQTM1NjAwMDAxMDI4QTA2MUEzNTY0MDAwMDAwMDMyOAorOjEwMENEMDAwMDQxQTM1NzAwMDAxMDI4QjA2MUEzNTc0MDAwMDAwMDNGNworOjEwMENFMDAwMDQxQTM1ODAwMDAxMDI4QzA2MUEzNTg0MDAwMDAwMDNDNgorOjEwMENGMDAwMDQxQTM1OTAwMDAxMDI4RDA2MUEzNTk0MDAwMDAwMDM5NQorOjEwMEQwMDAwMDQxQTM1QTAwMDAxMDI4RTA2MUEzNUE0MDAwMDAwMDM2MworOjEwMEQxMDAwMDQxQTM1QjAwMDAxMDI4RjA2MUEzNUI0MDAwMDAwMDMzMgorOjEwMEQyMDAwMDQxQTM1QzAwMDAxMDI5MDA2MUEzNUM0MDAwMDAwMDMwMQorOjEwMEQzMDAwMDQxQTM1RDAwMDAxMDI5MTA2MUEzNUQ0MDAwMDAwMDNEMAorOjEwMEQ0MDAwMDQxQTM1RTAwMDAxMDI5MjA2MUEzNUU0MDAwMDAwMDM5RgorOjEwMEQ1MDAwMDQxQTM1RjAwMDAxMDI5MzA2MUEzNUY0MDAwMDAwMDM2RQorOjEwMEQ2MDAwMDQxQTM2MDAwMDAxMDI5NDA2MUEzNjA0MDAwMDAwMDMzQgorOjEwMEQ3MDAwMDQxQTM2MTAwMDAxMDI5NTA2MUEzNjE0MDAwMDAwMDMwQQorOjEwMEQ4MDAwMDQxQTM2MjAwMDAxMDI5NjA2MUEzNjI0MDAwMDAwMDNEOQorOjEwMEQ5MDAwMDQxQTM2MzAwMDAxMDI5NzA2MUEzNjM0MDAwMDAwMDNBOAorOjEwMERBMDAwMDQxQTM2NDAwMDAxMDI5ODA2MUEzNjQ0MDAwMDAwMDM3NworOjEwMERCMDAwMDQxQTM2NTAwMDAxMDI5OTA2MUEzNjU0MDAwMDAwMDM0NgorOjEwMERDMDAwMDQxQTM2NjAwMDAxMDI5QTA2MUEzNjY0MDAwMDAwMDMxNQorOjEwMEREMDAwMDQxQTM2NzAwMDAxMDI5QjA2MUEzNjc0MDAwMDAwMDNFNAorOjEwMERFMDAwMDQxQTM2ODAwMDAxMDI5QzA2MUEzNjg0MDAwMDAwMDNCMworOjEwMERGMDAwMDQxQTM2OTAwMDAxMDI5RDA2MUEzNjk0MDAwMDAwMDM4MgorOjEwMEUwMDAwMDQxQTM2QTAwMDAxMDI5RTA2MUEzNkE0MDAwMDAwMDM1MAorOjEwMEUxMDAwMDQxQTM2QjAwMDAxMDI5RjA2MUEzNkI0MDAwMDAwMDMxRgorOjEwMEUyMDAwMDQxQTM2QzAwMDAxMDJBMDA2MUEzNkM0MDAwMDAwMDNFRQorOjEwMEUzMDAwMDQxQTM2RDAwMDAxMDJBMTA2MUEzNkQ0MDAwMDAwMDNCRAorOjEwMEU0MDAwMDQxQTM2RTAwMDAxMDJBMjA2MUEzNkU0MDAwMDAwMDM4QworOjEwMEU1MDAwMDQxQTM2RjAwMDAxMDJBMzA2MUEzNkY0MDAwMDAwMDM1QgorOjEwMEU2MDAwMDQxQTM3MDAwMDAxMDJBNDA2MUEzNzA0MDAwMDAwMDMyOAorOjEwMEU3MDAwMDQxQTM3MTAwMDAxMDJBNTA2MUEzNzE0MDAwMDAwMDNGNworOjEwMEU4MDAwMDQxQTM3MjAwMDAxMDJBNjA2MUEzNzI0MDAwMDAwMDNDNgorOjEwMEU5MDAwMDQxQTM3MzAwMDAxMDJBNzA2MUEzNzM0MDAwMDAwMDM5NQorOjEwMEVBMDAwMDQxQTM3NDAwMDAxMDJBODA2MUEzNzQ0MDAwMDAwMDM2NAorOjEwMEVCMDAwMDQxQTM3NTAwMDAxMDJBOTA2MUEzNzU0MDAwMDAwMDMzMworOjEwMEVDMDAwMDQxQTM3NjAwMDAxMDJBQTA2MUEzNzY0MDAwMDAwMDMwMgorOjEwMEVEMDAwMDQxQTM3NzAwMDAxMDJBQjA2MUEzNzc0MDAwMDAwMDNEMQorOjEwMEVFMDAwMDQxQTM3ODAwMDAxMDJBQzA2MUEzNzg0MDAwMDAwMDNBMAorOjEwMEVGMDAwMDQxQTM3OTAwMDAxMDJBRDA2MUEzNzk0MDAwMDAwMDM2RgorOjEwMEYwMDAwMDQxQTM3QTAwMDAxMDJBRTA2MUEzN0E0MDAwMDAwMDMzRAorOjEwMEYxMDAwMDQxQTM3QjAwMDAxMDJBRjA2MUEzN0I0MDAwMDAwMDMwQworOjEwMEYyMDAwMDQxQTM3QzAwMDAxMDJCMDA2MUEzN0M0MDAwMDAwMDNEQgorOjEwMEYzMDAwMDQxQTM3RDAwMDAxMDJCMTA2MUEzN0Q0MDAwMDAwMDNBQQorOjEwMEY0MDAwMDQxQTM3RTAwMDAxMDJCMjA2MUEzN0U0MDAwMDAwMDM3OQorOjEwMEY1MDAwMDQxQTM3RjAwMDAxMDJCMzA2MUEzN0Y0MDAwMDAwMDM0OAorOjEwMEY2MDAwMDQxQTM4MDAwMDAxMDJCNDA2MUEzODA0MDAwMDAwMDMxNQorOjEwMEY3MDAwMDQxQTM4MTAwMDAxMDJCNTA2MUEzODE0MDAwMDAwMDNFNAorOjEwMEY4MDAwMDQxQTM4MjAwMDAxMDJCNjA2MUEzODI0MDAwMDAwMDNCMworOjEwMEY5MDAwMDQxQTM4MzAwMDAxMDJCNzA2MUEzODM0MDAwMDAwMDM4MgorOjEwMEZBMDAwMDQxQTM4NDAwMDAxMDJCODA2MUEzODQ0MDAwMDAwMDM1MQorOjEwMEZCMDAwMDQxQTM4NTAwMDAxMDJCOTA2MUEzODU0MDAwMDAwMDMyMAorOjEwMEZDMDAwMDQxQTM4NjAwMDAxMDJCQTA2MUEzODY0MDAwMDAwMDNFRgorOjEwMEZEMDAwMDQxQTM4NzAwMDAxMDJCQjA2MUEzODc0MDAwMDAwMDNCRQorOjEwMEZFMDAwMDQxQTM4ODAwMDAxMDJCQzA2MUEzODg0MDAwMDAwMDM4RAorOjEwMEZGMDAwMDQxQTM4OTAwMDAxMDJCRDA2MUEzODk0MDAwMDAwMDM1QworOjEwMTAwMDAwMDQxQTM4QTAwMDAxMDJCRTA2MUEzOEE0MDAwMDAwMDMyQQorOjEwMTAxMDAwMDQxQTM4QjAwMDAxMDJCRjA2MUEzOEI0MDAwMDAwMDNGOQorOjEwMTAyMDAwMDQxQTM4QzAwMDAxMDJDMDA2MUEzOEM0MDAwMDAwMDNDOAorOjEwMTAzMDAwMDQxQTM4RDAwMDAxMDJDMTA2MUEzOEQ0MDAwMDAwMDM5NworOjEwMTA0MDAwMDQxQTM4RTAwMDAxMDJDMjA2MUEzOEU0MDAwMDAwMDM2NgorOjEwMTA1MDAwMDQxQTM4RjAwMDAxMDJDMzA2MUEzOEY0MDAwMDAwMDMzNQorOjEwMTA2MDAwMDQxQTM5MDAwMDAxMDJDNDA2MUEzOTA0MDAwMDAwMDMwMgorOjEwMTA3MDAwMDQxQTM5MTAwMDAxMDJDNTA2MUEzOTE0MDAwMDAwMDNEMQorOjEwMTA4MDAwMDQxQTM5MjAwMDAxMDJDNjA2MUEzOTI0MDAwMDAwMDNBMAorOjEwMTA5MDAwMDQxQTM5MzAwMDAxMDJDNzA2MUEzOTM0MDAwMDAwMDM2RgorOjEwMTBBMDAwMDQxQTM5NDAwMDAxMDJDODA2MUEzOTQ0MDAwMDAwMDMzRQorOjEwMTBCMDAwMDQxQTM5NTAwMDAxMDJDOTA2MUEzOTU0MDAwMDAwMDMwRAorOjEwMTBDMDAwMDQxQTM5NjAwMDAxMDJDQTA2MUEzOTY0MDAwMDAwMDNEQworOjEwMTBEMDAwMDQxQTM5NzAwMDAxMDJDQjA2MUEzOTc0MDAwMDAwMDNBQgorOjEwMTBFMDAwMDQxQTM5ODAwMDAxMDJDQzA2MUEzOTg0MDAwMDAwMDM3QQorOjEwMTBGMDAwMDQxQTM5OTAwMDAxMDJDRDA2MUEzOTk0MDAwMDAwMDM0OQorOjEwMTEwMDAwMDQxQTM5QTAwMDAxMDJDRTA2MUEzOUE0MDAwMDAwMDMxNworOjEwMTExMDAwMDQxQTM5QjAwMDAxMDJDRjA2MUEzOUI0MDAwMDAwMDNFNgorOjEwMTEyMDAwMDQxQTM5QzAwMDAxMDJEMDA2MUEzOUM0MDAwMDAwMDNCNQorOjEwMTEzMDAwMDQxQTM5RDAwMDAxMDJEMTA2MUEzOUQ0MDAwMDAwMDM4NAorOjEwMTE0MDAwMDQxQTM5RTAwMDAxMDJEMjA2MUEzOUU0MDAwMDAwMDM1MworOjEwMTE1MDAwMDQxQTM5RjAwMDAxMDJEMzA2MUEzOUY0MDAwMDAwMDMyMgorOjEwMTE2MDAwMDQxQTNBMDAwMDAxMDJENDA2MUEzQTA0MDAwMDAwMDNFRgorOjEwMTE3MDAwMDQxQTNBMTAwMDAxMDJENTA2MUEzQTE0MDAwMDAwMDNCRQorOjEwMTE4MDAwMDQxQTNBMjAwMDAxMDJENjA2MUEzQTI0MDAwMDAwMDM4RAorOjEwMTE5MDAwMDQxQTNBMzAwMDAxMDJENzA2MUEzQTM0MDAwMDAwMDM1QworOjEwMTFBMDAwMDQxQTNBNDAwMDAxMDJEODA2MUEzQTQ0MDAwMDAwMDMyQgorOjEwMTFCMDAwMDQxQTNBNTAwMDAxMDJEOTA2MUEzQTU0MDAwMDAwMDNGQQorOjEwMTFDMDAwMDQxQTNBNjAwMDAxMDJEQTA2MUEzQTY0MDAwMDAwMDNDOQorOjEwMTFEMDAwMDQxQTNBNzAwMDAxMDJEQjA2MUEzQTc0MDAwMDAwMDM5OAorOjEwMTFFMDAwMDQxQTNBODAwMDAxMDJEQzA2MUEzQTg0MDAwMDAwMDM2NworOjEwMTFGMDAwMDQxQTNBOTAwMDAxMDJERDA2MUEzQTk0MDAwMDAwMDMzNgorOjEwMTIwMDAwMDQxQTNBQTAwMDAxMDJERTA2MUEzQUE0MDAwMDAwMDMwNAorOjEwMTIxMDAwMDQxQTNBQjAwMDAxMDJERjA2MUEzQUI0MDAwMDAwMDNEMworOjEwMTIyMDAwMDQxQTNBQzAwMDAxMDJFMDA2MUEzQUM0MDAwMDAwMDNBMgorOjEwMTIzMDAwMDQxQTNBRDAwMDAxMDJFMTA2MUEzQUQ0MDAwMDAwMDM3MQorOjEwMTI0MDAwMDQxQTNBRTAwMDAxMDJFMjA2MUEzQUU0MDAwMDAwMDM0MAorOjEwMTI1MDAwMDQxQTNBRjAwMDAxMDJFMzA2MUEzQUY0MDAwMDAwMDMwRgorOjEwMTI2MDAwMDQxQTNCMDAwMDAxMDJFNDA2MUEzQjA0MDAwMDAwMDNEQworOjEwMTI3MDAwMDQxQTNCMTAwMDAxMDJFNTA2MUEzQjE0MDAwMDAwMDNBQgorOjEwMTI4MDAwMDQxQTNCMjAwMDAxMDJFNjA2MUEzQjI0MDAwMDAwMDM3QQorOjEwMTI5MDAwMDQxQTNCMzAwMDAxMDJFNzA2MUEzQjM0MDAwMDAwMDM0OQorOjEwMTJBMDAwMDQxQTNCNDAwMDAxMDJFODA2MUEzQjQ0MDAwMDAwMDMxOAorOjEwMTJCMDAwMDQxQTNCNTAwMDAxMDJFOTA2MUEzQjU0MDAwMDAwMDNFNworOjEwMTJDMDAwMDQxQTNCNjAwMDAxMDJFQTA2MUEzQjY0MDAwMDAwMDNCNgorOjEwMTJEMDAwMDQxQTNCNzAwMDAxMDJFQjA2MUEzQjc0MDAwMDAwMDM4NQorOjEwMTJFMDAwMDQxQTNCODAwMDAxMDJFQzA2MUEzQjg0MDAwMDAwMDM1NAorOjEwMTJGMDAwMDQxQTNCOTAwMDAxMDJFRDA2MUEzQjk0MDAwMDAwMDMyMworOjEwMTMwMDAwMDQxQTNCQTAwMDAxMDJFRTA2MUEzQkE0MDAwMDAwMDNGMQorOjEwMTMxMDAwMDQxQTNCQjAwMDAxMDJFRjA2MUEzQkI0MDAwMDAwMDNDMAorOjEwMTMyMDAwMDQxQTNCQzAwMDAxMDJGMDA2MUEzQkM0MDAwMDAwMDM4RgorOjEwMTMzMDAwMDQxQTNCRDAwMDAxMDJGMTA2MUEzQkQ0MDAwMDAwMDM1RQorOjEwMTM0MDAwMDQxQTNCRTAwMDAxMDJGMjA2MUEzQkU0MDAwMDAwMDMyRAorOjEwMTM1MDAwMDQxQTNCRjAwMDAxMDJGMzA2MUEzQkY0MDAwMDAwMDNGQworOjEwMTM2MDAwMDQxQTNDMDAwMDAxMDJGNDA2MUEzQzA0MDAwMDAwMDNDOQorOjEwMTM3MDAwMDQxQTNDMTAwMDAxMDJGNTA2MUEzQzE0MDAwMDAwMDM5OAorOjEwMTM4MDAwMDQxQTNDMjAwMDAxMDJGNjA2MUEzQzI0MDAwMDAwMDM2NworOjEwMTM5MDAwMDQxQTNDMzAwMDAxMDJGNzA2MUEzQzM0MDAwMDAwMDMzNgorOjEwMTNBMDAwMDQxQTNDNDAwMDAxMDJGODA2MUEzQzQ0MDAwMDAwMDMwNQorOjEwMTNCMDAwMDQxQTNDNTAwMDAxMDJGOTA2MUEzQzU0MDAwMDAwMDNENAorOjEwMTNDMDAwMDQxQTNDNjAwMDAxMDJGQTA2MUEzQzY0MDAwMDAwMDNBMworOjEwMTNEMDAwMDQxQTNDNzAwMDAxMDJGQjA2MUEzQzc0MDAwMDAwMDM3MgorOjEwMTNFMDAwMDQxQTNDODAwMDAxMDJGQzA2MUEzQzg0MDAwMDAwMDM0MQorOjEwMTNGMDAwMDQxQTNDOTAwMDAxMDJGRDA2MUEzQzk0MDAwMDAwMDMxMAorOjEwMTQwMDAwMDQxQTNDQTAwMDAxMDJGRTA2MUEzQ0E0MDAwMDAwMDNERQorOjEwMTQxMDAwMDQxQTNDQjAwMDAxMDJGRjA2MUEzQ0I0MDAwMDAwMDNBRAorOjEwMTQyMDAwMDQxQTNDQzAwMDAxMDMwMDA2MUEzQ0M0MDAwMDAwMDM3QgorOjEwMTQzMDAwMDQxQTNDRDAwMDAxMDMwMTA2MUEzQ0Q0MDAwMDAwMDM0QQorOjEwMTQ0MDAwMDQxQTNDRTAwMDAxMDMwMjA2MUEzQ0U0MDAwMDAwMDMxOQorOjEwMTQ1MDAwMDQxQTNDRjAwMDAxMDMwMzA2MUEzQ0Y0MDAwMDAwMDNFOAorOjEwMTQ2MDAwMDQxQTNEMDAwMDAxMDMwNDA2MUEzRDA0MDAwMDAwMDNCNQorOjEwMTQ3MDAwMDQxQTNEMTAwMDAxMDMwNTA2MUEzRDE0MDAwMDAwMDM4NAorOjEwMTQ4MDAwMDQxQTNEMjAwMDAxMDMwNjA2MUEzRDI0MDAwMDAwMDM1MworOjEwMTQ5MDAwMDQxQTNEMzAwMDAxMDMwNzA2MUEzRDM0MDAwMDAwMDMyMgorOjEwMTRBMDAwMDQxQTNENDAwMDAxMDMwODA2MUEzRDQ0MDAwMDAwMDNGMQorOjEwMTRCMDAwMDQxQTNENTAwMDAxMDMwOTA2MUEzRDU0MDAwMDAwMDNDMAorOjEwMTRDMDAwMDQxQTNENjAwMDAxMDMwQTA2MUEzRDY0MDAwMDAwMDM4RgorOjEwMTREMDAwMDQxQTNENzAwMDAxMDMwQjA2MUEzRDc0MDAwMDAwMDM1RQorOjEwMTRFMDAwMDQxQTNEODAwMDAxMDMwQzA2MUEzRDg0MDAwMDAwMDMyRAorOjEwMTRGMDAwMDQxQTNEOTAwMDAxMDMwRDA2MUEzRDk0MDAwMDAwMDNGQworOjEwMTUwMDAwMDQxQTNEQTAwMDAxMDMwRTA2MUEzREE0MDAwMDAwMDNDQQorOjEwMTUxMDAwMDQxQTNEQjAwMDAxMDMwRjA2MUEzREI0MDAwMDAwMDM5OQorOjEwMTUyMDAwMDQxQTNEQzAwMDAxMDMxMDA2MUEzREM0MDAwMDAwMDM2OAorOjEwMTUzMDAwMDQxQTNERDAwMDAxMDMxMTA2MUEzREQ0MDAwMDAwMDMzNworOjEwMTU0MDAwMDQxQTNERTAwMDAxMDMxMjA2MUEzREU0MDAwMDAwMDMwNgorOjEwMTU1MDAwMDQxQTNERjAwMDAxMDMxMzA2MUEzREY0MDAwMDAwMDNENQorOjEwMTU2MDAwMDQxQTNFMDAwMDAxMDMxNDA2MUEzRTA0MDAwMDAwMDNBMgorOjEwMTU3MDAwMDQxQTNFMTAwMDAxMDMxNTA2MUEzRTE0MDAwMDAwMDM3MQorOjEwMTU4MDAwMDQxQTNFMjAwMDAxMDMxNjA2MUEzRTI0MDAwMDAwMDM0MAorOjEwMTU5MDAwMDQxQTNFMzAwMDAxMDMxNzA2MUEzRTM0MDAwMDAwMDMwRgorOjEwMTVBMDAwMDQxQTNFNDAwMDAxMDMxODA2MUEzRTQ0MDAwMDAwMDNERQorOjEwMTVCMDAwMDQxQTNFNTAwMDAxMDMxOTA2MUEzRTU0MDAwMDAwMDNBRAorOjEwMTVDMDAwMDQxQTNFNjAwMDAxMDMxQTA2MUEzRTY0MDAwMDAwMDM3QworOjEwMTVEMDAwMDQxQTNFNzAwMDAxMDMxQjA2MUEzRTc0MDAwMDAwMDM0QgorOjEwMTVFMDAwMDQxQTNFODAwMDAxMDMxQzA2MUEzRTg0MDAwMDAwMDMxQQorOjEwMTVGMDAwMDQxQTNFOTAwMDAxMDMxRDA2MUEzRTk0MDAwMDAwMDNFOQorOjEwMTYwMDAwMDQxQTNFQTAwMDAxMDMxRTA2MUEzRUE0MDAwMDAwMDNCNworOjEwMTYxMDAwMDQxQTNFQjAwMDAxMDMxRjA2MUEzRUI0MDAwMDAwMDM4NgorOjEwMTYyMDAwMDQxQTNFQzAwMDAxMDMyMDA2MUEzRUM0MDAwMDAwMDM1NQorOjEwMTYzMDAwMDQxQTNFRDAwMDAxMDMyMTA2MUEzRUQ0MDAwMDAwMDMyNAorOjEwMTY0MDAwMDQxQTNFRTAwMDAxMDMyMjA2MUEzRUU0MDAwMDAwMDNGMworOjEwMTY1MDAwMDQxQTNFRjAwMDAxMDMyMzA2MUEzRUY0MDAwMDAwMDNDMgorOjEwMTY2MDAwMDQxQTNGMDAwMDAxMDMyNDA2MUEzRjA0MDAwMDAwMDM4RgorOjEwMTY3MDAwMDQxQTNGMTAwMDAxMDMyNTA2MUEzRjE0MDAwMDAwMDM1RQorOjEwMTY4MDAwMDQxQTNGMjAwMDAxMDMyNjA2MUEzRjI0MDAwMDAwMDMyRAorOjEwMTY5MDAwMDQxQTNGMzAwMDAxMDMyNzA2MUEzRjM0MDAwMDAwMDNGQworOjEwMTZBMDAwMDQxQTNGNDAwMDAxMDMyODA2MUEzRjQ0MDAwMDAwMDNDQgorOjEwMTZCMDAwMDQxQTNGNTAwMDAxMDMyOTA2MUEzRjU0MDAwMDAwMDM5QQorOjEwMTZDMDAwMDQxQTNGNjAwMDAxMDMyQTA2MUEzRjY0MDAwMDAwMDM2OQorOjEwMTZEMDAwMDQxQTNGNzAwMDAxMDMyQjA2MUEzRjc0MDAwMDAwMDMzOAorOjEwMTZFMDAwMDQxQTNGODAwMDAxMDMyQzA2MUEzRjg0MDAwMDAwMDMwNworOjEwMTZGMDAwMDQxQTNGOTAwMDAxMDMyRDA2MUEzRjk0MDAwMDAwMDNENgorOjEwMTcwMDAwMDQxQTNGQTAwMDAxMDMyRTA2MUEzRkE0MDAwMDAwMDNBNAorOjEwMTcxMDAwMDQxQTNGQjAwMDAxMDMyRjA2MUEzRkI0MDAwMDAwMDM3MworOjEwMTcyMDAwMDQxQTNGQzAwMDAxMDMzMDA2MUEzRkM0MDAwMDAwMDM0MgorOjEwMTczMDAwMDQxQTNGRDAwMDAxMDMzMTA2MUEzRkQ0MDAwMDAwMDMxMQorOjEwMTc0MDAwMDQxQTNGRTAwMDAxMDMzMjA2MUEzRkU0MDAwMDAwMDdEQworOjEwMTc1MDAwMDQxQTRDQjAwMDA4MDMzMzA2MUE0MDAwMDAwMDAxMjRBQworOjEwMTc2MDAwMDIxQTQ5MjAwMDAwMDAwMDA2MUEyNTAwMDAwMDAwMTA5RgorOjEwMTc3MDAwMDYxQTI1ODAwMDAwMDAxMjA2MUEwOUMwMDAwMDAwNDg2MQorOjEwMTc4MDAwMDYxQTA4MDAwMDAwMDAwMjA2MUEwODIwMDAwMDAwMTJENQorOjEwMTc5MDAwMDQxQTJGQjAwMDAyMDMzQjA0MUE0Q0YwMDAwMjAzM0Q3MAorOjEwMTdBMDAwMDYxQTUwMDAwMDAwMDAwNDA2MUE0NDkwMDAwMDAxMjRBQworOjEwMTdCMDAwMDIxQTQ5MjQwMDAwMDAwMDA2MUEyNTQwMDAwMDAwMTAwQgorOjEwMTdDMDAwMDYxQTI1QzgwMDAwMDAxMjA2MUEwQUUwMDAwMDAwNDhBOAorOjEwMTdEMDAwMDYxQTA4MTAwMDAwMDAwMjA2MUEwODY4MDAwMDAwMTIyRAorOjEwMTdFMDAwMDQxQTJGQjgwMDAyMDMzRjA0MUE0Q0Y4MDAwMjAzNDEwOAorOjEwMTdGMDAwMDYxQTUwMTAwMDAwMDAwNDAyMDBBNDY4MDAwQUZGREM3MgorOjEwMTgwMDAwMDIwMEEyODAwMDAwMDAwMTAyMDBBMjk0MDcxRDI5MTExRAorOjEwMTgxMDAwMDIwMEEyOTgwMDAwMDAwMDAyMDBBMjlDMDA5QzA0MjQ4OAorOjEwMTgyMDAwMDIwMEEyQTAwMDAwMDAwMDAyMDBBMkE0MDAwMDAyMDkyMQorOjEwMTgzMDAwMDIwMEE0RkNGRjAwMDAwMDAyMDEwMEI0MDAwMDAwMDE0RgorOjEwMTg0MDAwMDIwMTAwQjgwMDAwMDAwMTAyMDEwMERDMDAwMDAwMDFGQworOjEwMTg1MDAwMDIwMTAxMDAwMDAwMDAwMTAyMDEwMTA0MDAwMDAwMDE3QQorOjEwMTg2MDAwMDIwMTAwN0MwMDMwMDAwMDAyMDEwMDg0MDAwMDAwMjgxQQorOjEwMTg3MDAwMDIwMTAwOEMwMDAwMDAwMDAyMDEwMTMwMDAwMDAwMDRBMQorOjEwMTg4MDAwMDIwMTAyNUMwMDAwMDAwMTAyMDEwMzI4MDAwMDAwMDBDOAorOjEwMTg5MDAwMDIwMTA1NTQwMDAwMDAzMDAyMDEwMEM0MDAwMDAwMDFGNAorOjEwMThBMDAwMDIwMTAwQ0MwMDAwMDAwMTAyMDEwMEY4MDAwMDAwMDE2QworOjEwMThCMDAwMDIwMTAwRjAwMDAwMDAwMTAyMDEwMDgwMDAzMDAwMDA4MQorOjEwMThDMDAwMDIwMTAwODgwMDAwMDAyODAyMDEwMDkwMDAwMDAwMDBEMgorOjEwMThEMDAwMDIwMTAxMzQwMDAwMDAwNDAyMDEwMkRDMDAwMDAwMDFFQQorOjEwMThFMDAwMDIwMTAzMkMwMDAwMDAwMDAyMDEwNTY0MDAwMDAwMzAyQQorOjEwMThGMDAwMDIwMTAwQzgwMDAwMDAwMTAyMDEwMEQwMDAwMDAwMDE0OAorOjEwMTkwMDAwMDIwMTAwRkMwMDAwMDAwMTAyMDEwMEY0MDAwMDAwMDFERgorOjEwMTkxMDAwMDIwQzEwMDAwMDAwMDAyODAyMEMyMDA4MDAwMDBBMTEzMAorOjEwMTkyMDAwMDIwQzIwMEMwMDAwMEEwMDAyMEMyMDEwMDAwMDBBMDQyNworOjEwMTkzMDAwMDIwQzIwMUMwMDAwRkZGRjAyMEMyMDIwMDAwMEZGRkYxMworOjEwMTk0MDAwMDIwQzIwMjQwMDAwRkZGRjAyMEMyMDI4MDAwMEZGRkZGMworOjEwMTk1MDAwMDIwQzIwMzgwMDAwMDAyMDAyMEMyMDNDMDAwMDAwMjE3NgorOjEwMTk2MDAwMDIwQzIwNDAwMDAwMDAyMjAyMEMyMDQ0MDAwMDAwMjM1MgorOjEwMTk3MDAwMDIwQzIwNDgwMDAwMDAyNDAyMEMyMDRDMDAwMDAwMjUyRQorOjEwMTk4MDAwMDIwQzIwNTAwMDAwMDAyNjAyMEMyMDU0MDAwMDAwMjcwQQorOjEwMTk5MDAwMDIwQzIwNTgwMDAwMDAyODAyMEMyMDVDMDAwMDAwMjlFNgorOjEwMTlBMDAwMDIwQzIwNjAwMDAwMDAyQTAyMEMyMDY0MDAwMDAwMkJDMgorOjEwMTlCMDAwMDIwQzIwNjgwMDAwMDAyQzAyMEMyMDZDMDAwMDAwMkQ5RQorOjEwMTlDMDAwMDIwQzIwNzAwMDAwMDAyRTAyMEMyMDc0MDAwMDAwMkY3QQorOjEwMTlEMDAwMDIwQzIwNzgwMDAwMDAxMDA2MEMyMDdDMDAwMDAwNEY1NAorOjEwMTlFMDAwMDIwQzIxQjgwMDAwMDAwMTAyMEMyMUJDMDAwMDAwMDEyMworOjEwMTlGMDAwMDIwQzIxQzAwMDAwMDAwMTAyMEMyMUM0MDAwMDAwMDEwMworOjEwMUEwMDAwMDIwQzIxQzgwMDAwMDAwMTAyMEMyMUNDMDAwMDAwMDFFMgorOjEwMUExMDAwMDIwQzIxRDAwMDAwMDAwMTAyMEMyMUQ0MDAwMDAwMDFDMgorOjEwMUEyMDAwMDIwQzIxRDgwMDAwMDAwMTAyMEMyMURDMDAwMDAwMDFBMgorOjEwMUEzMDAwMDIwQzIxRTAwMDAwMDAwMTAyMEMyMUU0MDAwMDAwMDE4MgorOjEwMUE0MDAwMDIwQzIxRTgwMDAwMDAwMTAyMEMyMUVDMDAwMDAwMDE2MgorOjEwMUE1MDAwMDIwQzIxRjAwMDAwMDAwMTAyMEMyMUY0MDAwMDAwMDE0MgorOjEwMUE2MDAwMDIwQzIxRjgwMDAwMDAwMTA2MEMyMUZDMDAwMDAwMEYxMAorOjEwMUE3MDAwMDIwQzIyMzgwN0ZGRkZGRjAyMEMyMjNDMDAwMDAwM0Y0RgorOjEwMUE4MDAwMDIwQzIyNDAwN0ZGRkZGRjAyMEMyMjQ0MDAwMDAwMEY1RgorOjEwMUE5MDAwMDEwQzIyNDgwMDAwMDAwMDAxMEMyMjRDMDAwMDAwMDA1NAorOjEwMUFBMDAwMDEwQzIyNTAwMDAwMDAwMDAxMEMyMjU0MDAwMDAwMDAzNAorOjEwMUFCMDAwMDEwQzIyNTgwMDAwMDAwMDAxMEMyMjVDMDAwMDAwMDAxNAorOjEwMUFDMDAwMDEwQzIyNjAwMDAwMDAwMDAxMEMyMjY0MDAwMDAwMDBGNAorOjEwMUFEMDAwMDEwQzIyNjgwMDAwMDAwMDAxMEMyMjZDMDAwMDAwMDBENAorOjEwMUFFMDAwMDEwQzIyNzAwMDAwMDAwMDAxMEMyMjc0MDAwMDAwMDBCNAorOjEwMUFGMDAwMDEwQzIyNzgwMDAwMDAwMDAxMEMyMjdDMDAwMDAwMDA5NAorOjEwMUIwMDAwMDIwQzI0QkMwMDAwMDAwMTBDMEMyMDAwMDAwMDAzRThDMworOjEwMUIxMDAwMEEwQzIwMDAwMDAwMDAwMTBCMEMyMDAwMDAwMDAwMEE0RAorOjEwMUIyMDAwMDIwQzQwMDgwMDAwMDU2MjAyMEM0MDBDMDAwMDA1NTE0OAorOjEwMUIzMDAwMDIwQzQwMTAwMDAwMDU1NTAyMEM0MDE0MDAwMDA1NzIxNAorOjEwMUI0MDAwMDIwQzQwMUMwMDAwRkZGRjAyMEM0MDIwMDAwMEZGRkZDMQorOjEwMUI1MDAwMDIwQzQwMjQwMDAwRkZGRjAyMEM0MDI4MDAwMEZGRkZBMQorOjEwMUI2MDAwMDIwQzQwMzgwMDAwMDA0NjAyMEM0MDNDMDAwMDAwMEMxMworOjEwMUI3MDAwMDYwQzQwNDAwMDAwMDA1RTAyMEM0MUI4MDAwMDAwMDE2RAorOjEwMUI4MDAwMDYwQzQxQkMwMDAwMDAxRjAyMEM0MjM4MDdGRkZGRkY5QgorOjEwMUI5MDAwMDIwQzQyM0MwMDAwMDAzRjAyMEM0MjQwMDdGRkZGRkZFNgorOjEwMUJBMDAwMDIwQzQyNDQwMDAwMDAwRjAxMEM0MjQ4MDAwMDAwMDBGQgorOjEwMUJCMDAwMDEwQzQyNEMwMDAwMDAwMDAxMEM0MjUwMDAwMDAwMDBFQgorOjEwMUJDMDAwMDEwQzQyNTQwMDAwMDAwMDAxMEM0MjU4MDAwMDAwMDBDQgorOjEwMUJEMDAwMDEwQzQyNUMwMDAwMDAwMDAxMEM0MjYwMDAwMDAwMDBBQgorOjEwMUJFMDAwMDEwQzQyNjQwMDAwMDAwMDAxMEM0MjY4MDAwMDAwMDA4QgorOjEwMUJGMDAwMDEwQzQyNkMwMDAwMDAwMDAxMEM0MjcwMDAwMDAwMDA2QgorOjEwMUMwMDAwMDEwQzQyNzQwMDAwMDAwMDAxMEM0Mjc4MDAwMDAwMDA0QQorOjEwMUMxMDAwMDEwQzQyN0MwMDAwMDAwMDAxMEM0MjgwMDAwMDAwMDAyQQorOjEwMUMyMDAwMDIwQzQ0QzAwMDAwMDAwMTBDMEM0MDAwMDAwMDAzRTg1RQorOjEwMUMzMDAwMEEwQzQwMDAwMDAwMDAwMTBCMEM0MDAwMDAwMDAwMEFFQworOjEwMUM0MDAwMDYwRDQwMDAwMDAwMEEwMDAyMEQwMDQ0MDAwMDAwMzJCMgorOjEwMUM1MDAwMDIwRDAwOEMwMjE1MDAyMDAyMEQwMDkwMDIxNTAwMjBEQworOjEwMUM2MDAwMDIwRDAwOTQwODEwMDAwMDAyMEQwMDk4MDAwMDAwMzNERgorOjEwMUM3MDAwMDIwRDAwOUMwMDAwMDAwMjAyMEQwMEEwMDAwMDAwMDAwOAorOjEwMUM4MDAwMDIwRDAwQTQwMDAwMDAwNTAyMEQwMEE4MDAwMDAwMDVFMAorOjEwMUM5MDAwMDYwRDAwQUMwMDAwMDAwMjAyMEQwMEI0MDAwMDAwMDJCRQorOjEwMUNBMDAwMDIwRDAwQjgwMDAwMDAwMzAyMEQwMEJDMDAwMDAwMDI5RAorOjEwMUNCMDAwMDIwRDAwQzAwMDAwMDAwMTAyMEQwMEM4MDAwMDAwMDI3QgorOjEwMUNDMDAwMDIwRDAwQ0MwMDAwMDAwMjAyMEQwMTVDMDAwMDAwMDFDQQorOjEwMUNEMDAwMDIwRDAxNjQwMDAwMDAwMTAyMEQwMTY4MDAwMDAwMDIxNQorOjEwMUNFMDAwMDIwRDAyMDQwMDAwMDAwMTAyMEQwMjBDMDAwMDAwMjBBMQorOjEwMUNGMDAwMDIwRDAyMTAwMDAwMDA0MDAyMEQwMjE0MDAwMDAwNDAxRQorOjEwMUQwMDAwMDIwRDAyMjAwMDAwMDAwMzAyMEQwMjI0MDAwMDAwMTg1MgorOjEwMUQxMDAwMDYwRDAyODAwMDAwMDAxMjA0MEQwMzAwMDAxODAzNDNBQQorOjEwMUQyMDAwMDYwRDAzNjAwMDAwMDAwQzAyMEQwMDRDMDAwMDAwMDFENQorOjEwMUQzMDAwMDIwRDAwNTAwMDAwMDAwMjAyMEQwMDU0MDAwMDAwMDBERgorOjEwMUQ0MDAwMDIwRDAwNTgwMDAwMDAwODA2MEQwMDVDMDAwMDAwMDRCMQorOjEwMUQ1MDAwMDIwRDAwQzQwMDAwMDAwNDAyMEQwMTE0MDAwMDAwMDk3RgorOjEwMUQ2MDAwMDIwRDAxMTgwMDAwMDAyOTAyMEQwMTFDMDAwMDAwMEFFQworOjEwMUQ3MDAwMDIwRDAxMjAwMDAwMDAyQTAyMEQwMTI0MDAwMDAwMDBENQorOjEwMUQ4MDAwMDIwRDAxMjgwMDAwMDAyMDAyMEQwMTJDMDAwMDAwMDBCRgorOjEwMUQ5MDAwMDIwRDAxMzAwMDAwMDAyMDAyMEQwMTM0MDAwMDAwMDA5RgorOjEwMURBMDAwMDIwRDAxMzgwMDAwMDAyMDAyMEQwMTNDMDAwMDAwMDA3RgorOjEwMURCMDAwMDIwRDAxNDAwMDAwMDAyMDAyMEQwMTQ0MDAwMDAwMDA1RgorOjEwMURDMDAwMDIwRDAxNDgwMDAwMDAyMDAyMEQwMDA0MDAwMDAwMDE4NworOjEwMUREMDAwMDIwRDAwMDgwMDAwMDAwMTAyMEQwMDBDMDAwMDAwMDFDRgorOjEwMURFMDAwMDIwRDAwMTAwMDAwMDAwMTAyMEQwMDE0MDAwMDAwMDFBRgorOjEwMURGMDAwMDIwRDAwMTgwMDAwMDAwMTAyMEQwMDFDMDAwMDAwMDE4RgorOjEwMUUwMDAwMDIwRDAwMjAwMDAwMDAwMTAyMEQwMDI0MDAwMDAwMDE2RQorOjEwMUUxMDAwMDIwRDAwMjgwMDAwMDAwMTAyMEQwMDJDMDAwMDAwMDE0RQorOjEwMUUyMDAwMDIwRDAwMzAwMDAwMDAwMTAyMEQwMDM0MDAwMDAwMDEyRQorOjEwMUUzMDAwMDIwRDAwMzgwMDAwMDAwMTAyMEQwMDNDMDAwMDAwMDEwRQorOjEwMUU0MDAwMDYwRTIwMDAwMDAwMDgwMDAyMEUwMDRDMDAwMDAwMzJDOAorOjEwMUU1MDAwMDIwRTAwOTQwMjE1MDAyMDAyMEUwMDk4MDIxNTAwMjBDOAorOjEwMUU2MDAwMDIwRTAwOUMwMDAwMDAzMDAyMEUwMEEwMDgxMDAwMDBDRQorOjEwMUU3MDAwMDIwRTAwQTQwMDAwMDAzMzAyMEUwMEE4MDAwMDAwMzA5MworOjEwMUU4MDAwMDIwRTAwQUMwMDAwMDAzMTAyMEUwMEIwMDAwMDAwMDJBMworOjEwMUU5MDAwMDIwRTAwQjQwMDAwMDAwNDAyMEUwMEI4MDAwMDAwMDBCMgorOjEwMUVBMDAwMDIwRTAwQkMwMDAwMDAwMjAyMEUwMEMwMDAwMDAwMDI5MgorOjEwMUVCMDAwMDIwRTAwQzQwMDAwMDAwMDAyMEUwMEM4MDAwMDAwMDI3NAorOjEwMUVDMDAwMDIwRTAwQ0MwMDAwMDAwNzAyMEUwMEQwMDAwMDAwMDI0RAorOjEwMUVEMDAwMDIwRTAwRDQwMDAwMDAwMjAyMEUwMEQ4MDAwMDAwMDEzMworOjEwMUVFMDAwMDIwRTAxNDQwMDAwMDAwMTAyMEUwMTRDMDAwMDAwMDEzRQorOjEwMUVGMDAwMDIwRTAxNTAwMDAwMDAwMjAyMEUwMjA0MDAwMDAwMDE2OAorOjEwMUYwMDAwMDIwRTAyMEMwMDAwMDA0MDAyMEUwMjEwMDAwMDAwNDAxMQorOjEwMUYxMDAwMDIwRTAyMUMwMDAwMDAwNDAyMEUwMjIwMDAwMDAwMjAzRAorOjEwMUYyMDAwMDIwRTAyMjQwMDAwMDAwRTAyMEUwMjI4MDAwMDAwMUIxOAorOjEwMUYzMDAwMDYwRTAzMDAwMDAwMDAxMjA0MEUwMjgwMDAxQjAzNUI2QgorOjEwMUY0MDAwMDYwRTAyRUMwMDAwMDAwNTAyMEUwMDU0MDAwMDAwMEMxQQorOjEwMUY1MDAwMDIwRTAwNTgwMDAwMDAwQzAyMEUwMDVDMDAwMDAwMDBBMQorOjEwMUY2MDAwMDIwRTAwNjAwMDAwMDAxMDA2MEUwMDY0MDAwMDAwMDQ3NQorOjEwMUY3MDAwMDIwRTAwREMwMDAwMDAwMzAyMEUwMTEwMDAwMDAwMEY0MgorOjEwMUY4MDAwMDIwRTAxMTQwMDAwMDAyRjAyMEUwMTE4MDAwMDAwMDBENAorOjEwMUY5MDAwMDIwRTAxMUMwMDAwMDAyMDAyMEUwMDA0MDAwMDAwMDFERgorOjEwMUZBMDAwMDIwRTAwMDgwMDAwMDAwMTAyMEUwMDBDMDAwMDAwMDFGQgorOjEwMUZCMDAwMDIwRTAwMTAwMDAwMDAwMTAyMEUwMDE0MDAwMDAwMDFEQgorOjEwMUZDMDAwMDIwRTAwMTgwMDAwMDAwMTAyMEUwMDFDMDAwMDAwMDFCQgorOjEwMUZEMDAwMDIwRTAwMjAwMDAwMDAwMTAyMEUwMDI0MDAwMDAwMDE5QgorOjEwMUZFMDAwMDIwRTAwMjgwMDAwMDAwMTAyMEUwMDJDMDAwMDAwMDE3QgorOjEwMUZGMDAwMDIwRTAwMzAwMDAwMDAwMTAyMEUwMDM0MDAwMDAwMDE1QgorOjEwMjAwMDAwMDIwRTAwMzgwMDAwMDAwMTAyMEUwMDNDMDAwMDAwMDEzQQorOjEwMjAxMDAwMDIwRTAwNDAwMDAwMDAwMTAyMEUwMDQ0MDAwMDAwMDExQQorOjEwMjAyMDAwMDczMDA0MDAwMEFGMDAwMDA4MzAwNzY4MDAxMzAzNzY5MworOjEwMjAzMDAwMDczNDAwMDAzMzA1MDAwMDA3MzQ4MDAwMzI3RjBDQzJGMworOjEwMjA0MDAwMDczNTAwMDAxQTk1MTk2MjA4MzUzOUUwNThDNDAzNzgzRAorOjEwMjA1MDAwMDEzMDAwMDAwMDAwMDAwMDAxMzAwMDA0MDAwMDAwMDAxQQorOjEwMjA2MDAwMDEzMDAwMDgwMDAwMDAwMDAxMzAwMDBDMDAwMDAwMDBGQQorOjEwMjA3MDAwMDEzMDAwMTAwMDAwMDAwMDAxMzAwMDE0MDAwMDAwMDBEQQorOjEwMjA4MDAwMDIzMDAwMjAwMDAwMDAwMTAyMzAwMDI0MDAwMDAwMDJBNQorOjEwMjA5MDAwMDIzMDAwMjgwMDAwMDAwMzAyMzAwMDJDMDAwMDAwMDA4NQorOjEwMjBBMDAwMDIzMDAwMzAwMDAwMDAwNDAyMzAwMDM0MDAwMDAwMDE2MworOjEwMjBCMDAwMDIzMDAwMzgwMDAwMDAwMDAyMzAwMDNDMDAwMDAwMDE0NworOjEwMjBDMDAwMDIzMDAwNDAwMDAwMDAwNDAyMzAwMDQ0MDAwMDAwMDAyNAorOjEwMjBEMDAwMDIzMDAwNDgwMDAwMDAwMTAyMzAwMDRDMDAwMDAwMDMwNAorOjEwMjBFMDAwMDIzMDAwNTAwMDAwMDAwMDAyMzAwMDU0MDAwMDAwMDFFNworOjEwMjBGMDAwMDIzMDAwNTgwMDAwMDAwNDAyMzAwMDVDMDAwMDAwMDBDNAorOjEwMjEwMDAwMDIzMDAwNjAwMDAwMDAwMTAyMzAwMDY0MDAwMDAwMDNBMworOjEwMjExMDAwMDIzMDAwNjgwMDAwMDAwMDAyMzAwMDZDMDAwMDAwMDE4NgorOjEwMjEyMDAwMDIzMDAwNzAwMDAwMDAwNDAyMzAwMDc0MDAwMDAwMDA2MworOjEwMjEzMDAwMDIzMDAwNzgwMDAwMDAwNDAyMzAwMDdDMDAwMDAwMDM0MAorOjEwMjE0MDAwMDYzMDAwODAwMDAwMDAwMjAyMzAwMEE0MDAwMDNGRkZDMworOjEwMjE1MDAwMDIzMDAwQTgwMDAwMDNGRjAyMzAwMjI0MDAwMDAwMDA0QgorOjEwMjE2MDAwMDIzMDAyMzQwMDAwMDAwMDAyMzAwMjRDMDAwMDAwMDA4NworOjEwMjE3MDAwMDIzMDAyRTQwMDAwRkZGRjA2MzAyMDAwMDAwMDA4MDBFQgorOjEwMjE4MDAwMDIzMzhCQzAwMDAwMDAwMTAyMzM4MDAwMDAwMDAwMUFGRgorOjEwMjE5MDAwMDIzMzgwNDAwMDAwMDA0RTAyMzM4MDgwMDAwMDAwMTBCNworOjEwMjFBMDAwMDIzMzgwQzAwMDAwMDAyMDBDMzM4MzAwMDAwN0ExMjAxMAorOjEwMjFCMDAwMEEzMzgzMDAwMDAwMDEzODBCMzM4MzAwMDAwMDEzODhDQQorOjEwMjFDMDAwMEEzMzgzNDAwMDAwMDAwMDBDMzM4MzQwMDAwMDAxRjQxOAorOjEwMjFEMDAwMEIzMzgzNDAwMDAwMDAwNTAyMzM4MzgwMDAwN0ExMjBGOQorOjEwMjFFMDAwMDIzMzgzQzAwMDAwMDFGNDA2MzIyQTg4MDAwMDAwQzJENgorOjEwMjFGMDAwMDYzMjIwMDgwMDAwMDBDODA2MzIyMDAwMDAwMDAwMDI1RAorOjEwMjIwMDAwMDYzMjIzRTgwMDAwMDA0MDA0MzIyRTU4MDAwNDAzN0EwRQorOjEwMjIxMDAwMDYzMjUwQTAwMDAwMDAwNDA2MzI1MEI4MDAwMDAwMDI1MAorOjEwMjIyMDAwMDYzMjUwODAwMDAwMDAwNjA0MzI1MDk4MDAwMjAzN0VGRgorOjEwMjIzMDAwMDYzMjUwMDAwMDAwMDAyMDA2MzIzMDAwMDAwMDA0MDA4QQorOjEwMjI0MDAwMDYzMjFDMDAwMDAwMDAwNDA0MzIxODMwMDAwMjAzODAzMworOjEwMjI1MDAwMDYzMjI0RTgwMDAwMDBCNDAyMzIyREIwMDAwMDAwMDA3NQorOjEwMjI2MDAwMDYzMjQwMDAwMDAwMDBCNDA2MzIzMDAwMDAwMDAwMjBCQQorOjEwMjI3MDAwMDYzMjMxMDAwMDAwMDAyMDA2MzIzMjAwMDAwMDAwMjA0QgorOjEwMjI4MDAwMDYzMjMzMDAwMDAwMDAyMDA2MzIzNDAwMDAwMDAwMjAzNworOjEwMjI5MDAwMDYzMjM1MDAwMDAwMDAyMDA2MzIzNjAwMDAwMDAwMjAyMworOjEwMjJBMDAwMDYzMjM3MDAwMDAwMDAyMDA2MzIzODAwMDAwMDAwMjAwRgorOjEwMjJCMDAwMDYzMjM5MDAwMDAwMDAyMDA2MzIzQTAwMDAwMDAwMjBGQgorOjEwMjJDMDAwMDYzMjNCMDAwMDAwMDAyMDA2MzIzQzAwMDAwMDAwMjBFNworOjEwMjJEMDAwMDYzMjNEMDAwMDAwMDAyMDA2MzIzRTAwMDAwMDAwMjBEMworOjEwMjJFMDAwMDYzMjNGMDAwMDAwMDAyMDA2MzIxQzEwMDAwMDAwMDJGMQorOjEwMjJGMDAwMDYzMjQ1QTAwMDAwMDAyNDA2MzIyN0I4MDAwMDAwQjREMgorOjEwMjMwMDAwMDIzMjJEQjQwMDAwMDAwMDA2MzI0MkQwMDAwMDAwQjRCQQorOjEwMjMxMDAwMDYzMjMwODAwMDAwMDAyMDA2MzIzMTgwMDAwMDAwMjBBQworOjEwMjMyMDAwMDYzMjMyODAwMDAwMDAyMDA2MzIzMzgwMDAwMDAwMjA5OAorOjEwMjMzMDAwMDYzMjM0ODAwMDAwMDAyMDA2MzIzNTgwMDAwMDAwMjA4NAorOjEwMjM0MDAwMDYzMjM2ODAwMDAwMDAyMDA2MzIzNzgwMDAwMDAwMjA3MAorOjEwMjM1MDAwMDYzMjM4ODAwMDAwMDAyMDA2MzIzOTgwMDAwMDAwMjA1QworOjEwMjM2MDAwMDYzMjNBODAwMDAwMDAyMDA2MzIzQjgwMDAwMDAwMjA0OAorOjEwMjM3MDAwMDYzMjNDODAwMDAwMDAyMDA2MzIzRDgwMDAwMDAwMjAzNAorOjEwMjM4MDAwMDYzMjNFODAwMDAwMDAyMDA2MzIzRjgwMDAwMDAwMjAyMAorOjEwMjM5MDAwMDYzMjFDMjAwMDAwMDAwMjA2MzI0NjMwMDAwMDAwMjRGNQorOjEwMjNBMDAwMDcyMDA0MDAwMDg3MDAwMDA4MjAwNzgwMDAxMDAzODIzNworOjEwMjNCMDAwMDcyNDAwMDAzMTY1MDAwMDA3MjQ4MDAwMDgxRDBDNUEyNgorOjEwMjNDMDAwMDgyNDhFQjA2QzkwMDM4NDAxMjAwMDAwMDAwMDAwMDBGRgorOjEwMjNEMDAwMDEyMDAwMDQwMDAwMDAwMDAxMjAwMDA4MDAwMDAwMDBBRgorOjEwMjNFMDAwMDEyMDAwMEMwMDAwMDAwMDAxMjAwMDEwMDAwMDAwMDA4RgorOjEwMjNGMDAwMDEyMDAwMTQwMDAwMDAwMDAyMjAwMDIwMDAwMDAwMDE2NQorOjEwMjQwMDAwMDIyMDAwMjQwMDAwMDAwMjAyMjAwMDI4MDAwMDAwMDMzNworOjEwMjQxMDAwMDIyMDAwMkMwMDAwMDAwMDAyMjAwMDMwMDAwMDAwMDQxOAorOjEwMjQyMDAwMDIyMDAwMzQwMDAwMDAwMTAyMjAwMDM4MDAwMDAwMDBGQgorOjEwMjQzMDAwMDIyMDAwM0MwMDAwMDAwMTAyMjAwMDQwMDAwMDAwMDRENworOjEwMjQ0MDAwMDIyMDAwNDQwMDAwMDAwMDAyMjAwMDQ4MDAwMDAwMDFCQgorOjEwMjQ1MDAwMDIyMDAwNEMwMDAwMDAwMzAyMjAwMDUwMDAwMDAwMDA5OQorOjEwMjQ2MDAwMDIyMDAwNTQwMDAwMDAwMTAyMjAwMDU4MDAwMDAwMDQ3NworOjEwMjQ3MDAwMDIyMDAwNUMwMDAwMDAwMDAyMjAwMDYwMDAwMDAwMDE1QgorOjEwMjQ4MDAwMDIyMDAwNjQwMDAwMDAwMzAyMjAwMDY4MDAwMDAwMDAzOQorOjEwMjQ5MDAwMDIyMDAwNkMwMDAwMDAwMTAyMjAwMDcwMDAwMDAwMDQxNworOjEwMjRBMDAwMDIyMDAwNzQwMDAwMDAwMDAyMjAwMDc4MDAwMDAwMDRGOAorOjEwMjRCMDAwMDIyMDAwN0MwMDAwMDAwMzA2MjAwMDgwMDAwMDAwMDJEMworOjEwMjRDMDAwMDIyMDAwQTQwMDAwM0ZGRjAyMjAwMEE4MDAwMDAzRkYzQworOjEwMjREMDAwMDIyMDAyMjQwMDAwMDAwMDAyMjAwMjM0MDAwMDAwMDA1QworOjEwMjRFMDAwMDIyMDAyNEMwMDAwMDAwMDAyMjAwMkU0MDAwMEZGRkY3NgorOjEwMjRGMDAwMDYyMDIwMDAwMDAwMDgwMDAyMjM4QkMwMDAwMDAwMDExRAorOjEwMjUwMDAwMDIyMzgwMDAwMDAwMDAxMDAyMjM4MDQwMDAwMDAwMTIxRgorOjEwMjUxMDAwMDIyMzgwODAwMDAwMDAzMDAyMjM4MEMwMDAwMDAwMEVGMworOjEwMjUyMDAwMEMyMzgzMDAwMDA3QTEyMDBBMjM4MzAwMDAwMDAxMzg0OAorOjEwMjUzMDAwMEIyMzgzMDAwMDAwMTM4ODBBMjM4MzQwMDAwMDAwMDA1RgorOjEwMjU0MDAwMEMyMzgzNDAwMDAwMDFGNDBCMjM4MzQwMDAwMDAwMDVBRQorOjEwMjU1MDAwMDIyMzgzODAwMDA3QTEyMDAyMjM4M0MwMDAwMDAxRjQyRQorOjEwMjU2MDAwMDYyMjUwMDAwMDAwMDA0MjA2MjIyMDA4MDAwMDAwQzg5OQorOjEwMjU3MDAwMDYyMjIwMDAwMDAwMDAwMjA2MjI0MDAwMDAwMDAwQzZFMworOjEwMjU4MDAwMDQyMjQzMTgwMDA1MDM4NjA2MjI0MzJDMDAwMDAwMEI5QQorOjEwMjU5MDAwMDQyMjQzNTgwMDA1MDM4QjA2MjI0MzZDMDAwMDAwMEIwNQorOjEwMjVBMDAwMDQyMjQzOTgwMDA1MDM5MDA2MjI0M0FDMDAwMDAwMEI3MAorOjEwMjVCMDAwMDQyMjQzRDgwMDA1MDM5NTA2MjI0M0VDMDAwMDAwMEJEQgorOjEwMjVDMDAwMDQyMjQ0MTgwMDA1MDM5QTA2MjI0NDJDMDAwMDAwMEI0NAorOjEwMjVEMDAwMDQyMjQ0NTgwMDA1MDM5RjA2MjI0NDZDMDAwMDAwMEJBRgorOjEwMjVFMDAwMDQyMjQ0OTgwMDA1MDNBNDA2MjI0NEFDMDAwMDAwMEIxQQorOjEwMjVGMDAwMDQyMjQ0RDgwMDA1MDNBOTA2MjI0NEVDMDAwMDAwMEI4NQorOjEwMjYwMDAwMDQyMjQ1MTgwMDA1MDNBRTA2MjI0NTJDMDAwMDAwMEJFRAorOjEwMjYxMDAwMDQyMjQ1NTgwMDA1MDNCMzA2MjI0NTZDMDAwMDAwMEI1OAorOjEwMjYyMDAwMDQyMjQ1OTgwMDA1MDNCODA2MjI0NUFDMDAwMDAwMEJDMworOjEwMjYzMDAwMDQyMjQ1RDgwMDA1MDNCRDA2MjI0NUVDMDAwMDAwMEIyRQorOjEwMjY0MDAwMDQyMjQ2MTgwMDA1MDNDMjA2MjI0NjJDMDAwMDAwMEI5NworOjEwMjY1MDAwMDQyMjQ2NTgwMDA1MDNDNzA2MjI0NjZDMDAwMDAwMEIwMgorOjEwMjY2MDAwMDQyMjQ2OTgwMDA1MDNDQzA2MjI0NkFDMDAwMDAwMEI2RAorOjEwMjY3MDAwMDQyMjQ2RDgwMDA1MDNEMTA2MjI0NkVDMDAwMDAwMEJEOAorOjEwMjY4MDAwMDQyMjQ3MTgwMDA1MDNENjA2MjI0NzJDMDAwMDAwMEI0MQorOjEwMjY5MDAwMDQyMjQ3NTgwMDA1MDNEQjA2MjI0NzZDMDAwMDAwMEJBQworOjEwMjZBMDAwMDQyMjQ3OTgwMDA1MDNFMDA2MjI0N0FDMDAwMDAwMEIxNworOjEwMjZCMDAwMDQyMjQ3RDgwMDA1MDNFNTA2MjI0N0VDMDAwMDAwMEI4MgorOjEwMjZDMDAwMDQyMjQ4MTgwMDA1MDNFQTA2MjI0ODJDMDAwMDAwMEJFQgorOjEwMjZEMDAwMDQyMjQ4NTgwMDA1MDNFRjA2MjI0ODZDMDAwMDAwMEI1NgorOjEwMjZFMDAwMDQyMjQ4OTgwMDA1MDNGNDA2MjI0OEFDMDAwMDAwMEJDMQorOjEwMjZGMDAwMDQyMjQ4RDgwMDA1MDNGOTA2MjI0OEVDMDAwMDAwMEIyQworOjEwMjcwMDAwMDQyMjQ5MTgwMDA1MDNGRTA2MjI0OTJDMDAwMDAwMEI5NAorOjEwMjcxMDAwMDQyMjQ5NTgwMDA1MDQwMzA2MjI0OTZDMDAwMDAwMEJGRQorOjEwMjcyMDAwMDQyMjQ5OTgwMDA1MDQwODA2MjI0OUFDMDAwMDAwMEI2OQorOjEwMjczMDAwMDQyMjQ5RDgwMDA1MDQwRDA2MjI0OUVDMDAwMDAwMEJENAorOjEwMjc0MDAwMDQyMjRBMTgwMDA1MDQxMjA2MjI0QTJDMDAwMDAwMEIzRAorOjEwMjc1MDAwMDQyMjRBNTgwMDA1MDQxNzA2MjI0QTZDMDAwMDAwMEJBOAorOjEwMjc2MDAwMDQyMjRBOTgwMDA1MDQxQzA2MjI0QUFDMDAwMDAwMEIxMworOjEwMjc3MDAwMDQyMjRBRDgwMDA1MDQyMTA2MjI0QUVDMDAwMDAwMDU4NAorOjEwMjc4MDAwMDYyMjRCMDAwMDAwMDAxNzA0MjI0QjVDMDAwMTA0MjZDNworOjEwMjc5MDAwMDYyMjRCNjAwMDAwMDAwMzA0MjI0QjZDMDAwMTA0Mjc1QQorOjEwMjdBMDAwMDYyMjM4MDAwMDAwMDA0MDA2MjIzMDAwMDAwMDAyMDAyRgorOjEwMjdCMDAwMDQyMjUxQzAwMDA0MDQyODA2MjIxMDAwMDAwMDAwQzBCQQorOjEwMjdDMDAwMDYyMjE1QzAwMDAwMDI0MDA0MjIxRUM4MDAwODA0MkM4NgorOjEwMjdEMDAwMDYyMjM5MDAwMDAwMDAwODAyMjI1MTE4MDAwMDAwMDAwMworOjEwMjdFMDAwMDYyMjUxRDAwMDAwMDAwNjA2MjIxMzAwMDAwMDAwMDI1RAorOjEwMjdGMDAwMDYyMjE0MTAwMDAwMDAzMDA2MjIzOTIwMDAwMDAwMDhENAorOjEwMjgwMDAwMDIyMjUxMUMwMDAwMDAwMDA2MjI1MUU4MDAwMDAwMDZEMAorOjEwMjgxMDAwMDYyMjEzMDgwMDAwMDAwMjA2MjIxNEQwMDAwMDAwMzAzNworOjEwMjgyMDAwMDIxNjEwMDAwMDAwMDAyODAyMTcwMDA4MDAwMDAwMDIzNQorOjEwMjgzMDAwMDIxNzAwMkMwMDAwMDAwMzAyMTcwMDNDMDAwMDAwMDRGNworOjEwMjg0MDAwMDIxNzAwNDQwMDAwMDAwMDAyMTcwMDQ4MDAwMDAwMDJDOAorOjEwMjg1MDAwMDIxNzAwNEMwMDAwMDA5MDAyMTcwMDUwMDAwMDAwOTA4QQorOjEwMjg2MDAwMDIxNzAwNTQwMDgwMDA5MDAyMTcwMDU4MDgxMDAwMDA2MgorOjEwMjg3MDAwMDIxNzAwNjAwMDAwMDA4QTAyMTcwMDY0MDAwMDAwODA1OAorOjEwMjg4MDAwMDIxNzAwNjgwMDAwMDA4MTAyMTcwMDZDMDAwMDAwODA0MQorOjEwMjg5MDAwMDIxNzAwNzAwMDAwMDAwNjAyMTcwMDc4MDAwMDA3RDA0MQorOjEwMjhBMDAwMDIxNzAwN0MwMDAwMDc2QzAyMTcwMDM4MDA3QzEwMDQzRgorOjEwMjhCMDAwMDIxNzAwMDQwMDAwMDAwRjA2MTY0MDI0MDAwMDAwMDI2QQorOjEwMjhDMDAwMDIxNjQwNzAwMDAwMDAxQzAyMTY0MjA4MDAwMDAwMDFDMQorOjEwMjhEMDAwMDIxNjQyMTAwMDAwMDAwMTAyMTY0MjIwMDAwMDAwMDExMgorOjEwMjhFMDAwMDIxNjQyMjgwMDAwMDAwMTAyMTY0MjMwMDAwMDAwMDFEQQorOjEwMjhGMDAwMDIxNjQyMzgwMDAwMDAwMTAyMTY0MjYwMDAwMDAwMDE4QQorOjEwMjkwMDAwMEMxNjQwMUMwMDAzRDA5MDBBMTY0MDFDMDAwMDAwOUNDRQorOjEwMjkxMDAwMEIxNjQwMUMwMDAwMDlDNDAyMTY0MDMwMDAwMDAwMDhERAorOjEwMjkyMDAwMDIxNjQwMzQwMDAwMDAwQzAyMTY0MDM4MDAwMDAwMTA2RgorOjEwMjkzMDAwMDIxNjQwNDQwMDAwMDAyMDAyMTY0MDAwMDAwMDAwMDE4MgorOjEwMjk0MDAwMDIxNjQwRDgwMDAwMDAwMTAyMTY0MDA4MDAwMDAwMDFGNQorOjEwMjk1MDAwMDIxNjQwMEMwMDAwMDAwMTAyMTY0MDEwMDAwMDAwMDFBOQorOjEwMjk2MDAwMDIxNjQyNDAwMDAwMDAwMDAyMTY0MjQ4MDAwMDAwMDAyQgorOjEwMjk3MDAwMDYxNjQyNzAwMDAwMDAwMjAyMTY0MjUwMDAwMDAwMDBERAorOjEwMjk4MDAwMDIxNjQyNTgwMDAwMDAwMDA2MTY0MjgwMDAwMDAwMDJCNQorOjEwMjk5MDAwMDIxNjYwMDgwMDAwMDYxNDAyMTY2MDBDMDAwMDA2MDAxMworOjEwMjlBMDAwMDIxNjYwMTAwMDAwMDYwNDAyMTY2MDFDMDAwMEZGRkYwMworOjEwMjlCMDAwMDIxNjYwMjAwMDAwRkZGRjAyMTY2MDI0MDAwMEZGRkZFNworOjEwMjlDMDAwMDIxNjYwMjgwMDAwRkZGRjAyMTY2MDM4MDAwMDAwMjA5OQorOjEwMjlEMDAwMDIxNjYwM0MwMDAwMDAyMDA2MTY2MDQwMDAwMDAwMDI2NQorOjEwMjlFMDAwMDIxNjYwNDgwMDAwMDAyMzAyMTY2MDRDMDAwMDAwMjQxQworOjEwMjlGMDAwMDIxNjYwNTAwMDAwMDAyNTAyMTY2MDU0MDAwMDAwMjZGOAorOjEwMkEwMDAwMDIxNjYwNTgwMDAwMDAyNzAyMTY2MDVDMDAwMDAwMjlEMgorOjEwMkExMDAwMDIxNjYwNjAwMDAwMDAyQTAyMTY2MDY0MDAwMDAwMkJBRAorOjEwMkEyMDAwMDIxNjYwNjgwMDAwMDAyQzAyMTY2MDZDMDAwMDAwMkQ4OQorOjEwMkEzMDAwMDYxNjYwNzAwMDAwMDAxMjAyMTY2MEI4MDAwMDAwMDE2NworOjEwMkE0MDAwMDIxNjYwQkMwMDAwMDAwMTA2MTY2MEMwMDAwMDAwM0VENworOjEwMkE1MDAwMDIxNjYxQjgwMDAwMDAwMTA2MTY2MUJDMDAwMDAwMUZFQworOjEwMkE2MDAwMDIxNjYyMzgwN0ZGRkZGRjAyMTY2MjNDMDAwMDAwM0ZCQgorOjEwMkE3MDAwMDIxNjYyNDAwN0ZGRkZGRjAyMTY2MjQ0MDAwMDAwMEZDQgorOjEwMkE4MDAwMDExNjYyNDgwMDAwMDAwMDAxMTY2MjRDMDAwMDAwMDBDMAorOjEwMkE5MDAwMDExNjYyNTAwMDAwMDAwMDAxMTY2MjU0MDAwMDAwMDBBMAorOjEwMkFBMDAwMDExNjYyNTgwMDAwMDAwMDAxMTY2MjVDMDAwMDAwMDA4MAorOjEwMkFCMDAwMDExNjYyNjAwMDAwMDAwMDAxMTY2MjY0MDAwMDAwMDA2MAorOjEwMkFDMDAwMDExNjYyNjgwMDAwMDAwMDAxMTY2MjZDMDAwMDAwMDA0MAorOjEwMkFEMDAwMDExNjYyNzAwMDAwMDAwMDAxMTY2Mjc0MDAwMDAwMDAyMAorOjEwMkFFMDAwMDExNjYyNzgwMDAwMDAwMDAxMTY2MjdDMDAwMDAwMDAwMAorOjEwMkFGMDAwMDIxNjY0QkMwMDAwMDAwMTBDMTY2MDAwMDAwMDAzRTgzMAorOjEwMkIwMDAwMEExNjYwMDAwMDAwMDAwMTBCMTY2MDAwMDAwMDAwMEFCOQorOjEwMkIxMDAwMDIxNjgwNDAwMDAwMDAwNjAyMTY4MDQ0MDAwMDAwMDVGNgorOjEwMkIyMDAwMDIxNjgwNDgwMDAwMDAwQTAyMTY4MDRDMDAwMDAwMDVEMgorOjEwMkIzMDAwMDIxNjgwNTQwMDAwMDAwMjAyMTY4MENDMDAwMDAwMDQzRgorOjEwMkI0MDAwMDIxNjgwRDAwMDAwMDAwNDAyMTY4MEQ0MDAwMDAwMDRBOQorOjEwMkI1MDAwMDIxNjgwRDgwMDAwMDAwNDAyMTY4MERDMDAwMDAwMDQ4OQorOjEwMkI2MDAwMDIxNjgwRTAwMDAwMDAwNDAyMTY4MEU0MDAwMDAwMDQ2OQorOjEwMkI3MDAwMDIxNjgwRTgwMDAwMDAwNDAyMTY4ODA0MDAwMDAwMDQyOQorOjEwMkI4MDAwMDIxNjgwMzAwMDAwMDA3QzAyMTY4MDM0MDAwMDAwM0RGOAorOjEwMkI5MDAwMDIxNjgwMzgwMDAwMDAzRjAyMTY4MDNDMDAwMDAwOUNCNgorOjEwMkJBMDAwMDIxNjgwRjAwMDAwMDAwNzA2MTY4MEY0MDAwMDAwMDUwMQorOjEwMkJCMDAwMDIxNjg4MEMwMTAxMDEwMTAyMTY4MTA4MDAwMDAwMDBDNAorOjEwMkJDMDAwMDIxNjgxMEMwMDAwMDAwNDAyMTY4MTEwMDAwMDAwMDRBRgorOjEwMkJEMDAwMDIxNjgxMTQwMDAwMDAwMjAyMTY4ODEwMDgwMTIwMDQ2OQorOjEwMkJFMDAwMDIxNjgxMTgwMDAwMDAwNTAyMTY4MTFDMDAwMDAwMDU3NQorOjEwMkJGMDAwMDIxNjgxMjAwMDAwMDAwNTAyMTY4MTI0MDAwMDAwMDU1NQorOjEwMkMwMDAwMDIxNjg4MkMyMDA4MTAwMTAyMTY4MTI4MDAwMDAwMDhGNgorOjEwMkMxMDAwMDIxNjgxMkMwMDAwMDAwNjAyMTY4MTMwMDAwMDAwMDcxOQorOjEwMkMyMDAwMDIxNjgxMzQwMDAwMDAwMDAyMTY4ODMwMDEwMTAxMjBFNAorOjEwMkMzMDAwMDYxNjgxMzgwMDAwMDAwNDAyMTY4ODM0MDEwMTAxMDFFMworOjEwMkM0MDAwMDYxNjgxNDgwMDAwMDAwNDAyMTY4ODM4MDEwMTAxMDFCRgorOjEwMkM1MDAwMDYxNjgxNTgwMDAwMDAwNDAyMTY4ODNDMDEwMTAxMDE5QgorOjEwMkM2MDAwMDYxNjgxNjgwMDAwMDAwMzAyMTY4MTc0MDAwMDAwMDE0RQorOjEwMkM3MDAwMDIxNjg4NDAwMTAxMDEwMTAyMTY4MTc4MDAwMDAwMDE1RQorOjEwMkM4MDAwMDIxNjgxN0MwMDAwMDAwMTAyMTY4MTgwMDAwMDAwMDExNAorOjEwMkM5MDAwMDIxNjgxODQwMDAwMDAwMTAyMTY4ODQ0MDEwMTAxMDEyRQorOjEwMkNBMDAwMDIxNjgxODgwMDAwMDAwMTAyMTY4MThDMDAwMDAwMDREOQorOjEwMkNCMDAwMDIxNjgxOTAwMDAwMDAwNDAyMTY4MTk0MDAwMDAwMDJCOAorOjEwMkNDMDAwMDIxNjg4NDgwODAxMjAwNDAyMTY4MTk4MDAwMDAwMDVCOQorOjEwMkNEMDAwMDIxNjgxOUMwMDAwMDAwNTAyMTY4MUEwMDAwMDAwMDU3QworOjEwMkNFMDAwMDIxNjgxQTQwMDAwMDAwNTAyMTY4ODE0MjAwODEwMDFCNQorOjEwMkNGMDAwMDIxNjgxQTgwMDAwMDAwODAyMTY4MUFDMDAwMDAwMDY0MAorOjEwMkQwMDAwMDIxNjgxQjAwMDAwMDAwNzAyMTY4MUI0MDAwMDAwMDEyNQorOjEwMkQxMDAwMDIxNjg4MTgwMTAxMDEyMDAyMTY4MUI4MDAwMDAwMDE4NgorOjEwMkQyMDAwMDIxNjgxQkMwMDAwMDAwMTAyMTY4MUMwMDAwMDAwMDFGMworOjEwMkQzMDAwMDIxNjgxQzQwMDAwMDAwMTAyMTY4ODFDMDEwMTAxMDE3NQorOjEwMkQ0MDAwMDIxNjgxQzgwMDAwMDAwMTAyMTY4MUNDMDAwMDAwMDFCQgorOjEwMkQ1MDAwMDIxNjgxRDAwMDAwMDAwMTAyMTY4MUQ0MDAwMDAwMDE5QgorOjEwMkQ2MDAwMDIxNjg4MjAwMTAxMDEwMTAyMTY4MUQ4MDAwMDAwMDEyRAorOjEwMkQ3MDAwMDIxNjgxREMwMDAwMDAwMTAyMTY4MUUwMDAwMDAwMDE2MworOjEwMkQ4MDAwMDIxNjgxRTQwMDAwMDAwMTAyMTY4ODI0MDEwMTAxMDFGRAorOjEwMkQ5MDAwMDIxNjgxRTgwMDAwMDAwMTAyMTY4MUVDMDAwMDAwMDEyQgorOjEwMkRBMDAwMDIxNjgxRjAwMDAwMDAwMTAyMTY4ODI4MDEwMTAxMDFDRAorOjEwMkRCMDAwMDIxNjgyNDBGRkZGMDAzRjA2MTY4MjQ0MDAwMDAwMDIxOAorOjEwMkRDMDAwMDIxNjgyNENGRkZGMDAzRjAyMTY4MjUwMDAwMDAxMDBGNQorOjEwMkREMDAwMDIxNjgyNTQwMDAwMDEwMDA2MTY4MjU4MDAwMDAwMDIwQworOjEwMkRFMDAwMDIxNjgyNjAwMDAwMDBDMDAyMTY4MjY0MDAwMDAwQzA2QgorOjEwMkRGMDAwMDIxNjgyNjgwMDAwMUUwMDAyMTY4MjZDMDAwMDFFMDA4RgorOjEwMkUwMDAwMDIxNjgyNzAwMDAwNDAwMDAyMTY4Mjc0MDAwMDQwMDAyQQorOjEwMkUxMDAwMDIxNjgyNzgwMDAwODAwMDAyMTY4MjdDMDAwMDgwMDA4QQorOjEwMkUyMDAwMDIxNjgyODAwMDAwMjAwMDAyMTY4Mjg0MDAwMDIwMDAyQQorOjEwMkUzMDAwMDYxNjgyODgwMDAwMDAwNzAyMTY4MkE0MDAwMDAwMDEyNgorOjEwMkU0MDAwMDYxNjgyQTgwMDAwMDAwQTAyMTY4MUY0MDAwMDBDMDg5MQorOjEwMkU1MDAwMDIxNjgxRjgwMDAwMDA0MDAyMTY4MUZDMDAwMDAxMDAwQgorOjEwMkU2MDAwMDIxNjgyMDAwMDAwMDAyMDAyMTY4MjA0MDAwMDAwMTdGMworOjEwMkU3MDAwMDIxNjgyMDgwMDAwMDA4MDAyMTY4MjBDMDAwMDAyMDA4OAorOjEwMkU4MDAwMDIxNjgyMTAwMDAwMDAwMDAyMTY4MjE4RkZGRjAxRkZFOAorOjEwMkU5MDAwMDIxNjgyMTRGRkZGMDFGRjAyMTY4MjNDMDAwMDAwMTM5RAorOjEwMkVBMDAwMDIxNjgwOTAwMDAwMDEzRjAyMTY4MDYwMDAwMDAxNDA4MQorOjEwMkVCMDAwMDIxNjgwNjQwMDAwMDE0MDA2MTY4MDY4MDAwMDAwMDJDRgorOjEwMkVDMDAwMDIxNjgwNzAwMDAwMDBDMDA2MTY4MDc0MDAwMDAwMDcyMworOjEwMkVEMDAwMDIxNjgwOUMwMDAwMDA0ODAyMTY4MEEwMDAwMDAwNDhGNgorOjEwMkVFMDAwMDYxNjgwQTQwMDAwMDAwMjAyMTY4MEFDMDAwMDAwNDgxNAorOjEwMkVGMDAwMDYxNjgwQjAwMDAwMDAwNzAyMTY4MjM4MDAwMDgwMDAyRAorOjEwMkYwMDAwMDIxNjgyMzQwMDAwMjVFNDAyMTY4MDk0MDAwMDdGRkY0MAorOjEwMkYxMDAwMDIxNjgyMjAwMDAwMDAwNzAyMTY4MjFDMDAwMDAwMDczMworOjEwMkYyMDAwMDIxNjgyMjgwMDAwMDAwMDAyMTY4MjI0RkZGRkZGRkYyNQorOjEwMkYzMDAwMDIxNjgyMzAwMDAwMDAwMDAyMTY4MjJDRkZGRkZGRkYwNQorOjEwMkY0MDAwMDIxNjgwRUMwMDAwMDBGRjAyMTQwMDAwMDAwMDAwMDFFNworOjEwMkY1MDAwMDIxNDAwMEMwMDAwMDAwMTAyMTQwMDQwMDAwMDAwMDFGNworOjEwMkY2MDAwMDIxNDAwNDQwMDAwN0ZGRjAyMTQwMDBDMDAwMDAwMDA2NworOjEwMkY3MDAwMDIxNDAwMDAwMDAwMDAwMDAyMTQwMDZDMDAwMDAwMDBCOQorOjEwMkY4MDAwMDIxNDAwMDQwMDAwMDAwMTAyMTQwMDMwMDAwMDAwMDFERgorOjEwMkY5MDAwMDIxNDAwMDQwMDAwMDAwMDAyMTQwMDVDMDAwMDAwMDBBNQorOjEwMkZBMDAwMDIxNDAwMDgwMDAwMDAwMTAyMTQwMDM0MDAwMDAwMDFCNworOjEwMkZCMDAwMDIxNDAwMDgwMDAwMDAwMDAyMTQwMDYwMDAwMDAwMDA3RAorOjEwMkZDMDAwMDYwMjgwMDAwMDAwMjAwMDAyMDIwMDU4MDAwMDAwMzJDQgorOjEwMkZEMDAwMDIwMjAwQTAwMzE1MDAyMDAyMDIwMEE0MDMxNTAwMjAzNQorOjEwMkZFMDAwMDIwMjAwQTgwMTAwMDAzMDAyMDIwMEFDMDgxMDAwMDAzQworOjEwMkZGMDAwMDIwMjAwQjAwMDAwMDAzMzAyMDIwMEI0MDAwMDAwMzAwMgorOjEwMzAwMDAwMDIwMjAwQjgwMDAwMDAzMTAyMDIwMEJDMDAwMDAwMDMxMAorOjEwMzAxMDAwMDIwMjAwQzAwMDAwMDAwNjAyMDIwMEM0MDAwMDAwMDMxQgorOjEwMzAyMDAwMDIwMjAwQzgwMDAwMDAwMzAyMDIwMENDMDAwMDAwMDJGRgorOjEwMzAzMDAwMDIwMjAwRDAwMDAwMDAwMDAyMDIwMEQ0MDAwMDAwMDJFMgorOjEwMzA0MDAwMDIwMjAwREMwMDAwMDAwMDAyMDIwMEUwMDAwMDAwMDZCNgorOjEwMzA1MDAwMDIwMjAwRTQwMDAwMDAwNDAyMDIwMEU4MDAwMDAwMDI5NgorOjEwMzA2MDAwMDIwMjAwRUMwMDAwMDAwMjAyMDIwMEYwMDAwMDAwMDE3OQorOjEwMzA3MDAwMDIwMjAwRkMwMDAwMDAwNjAyMDIwMTIwMDAwMDAwMDAyNQorOjEwMzA4MDAwMDIwMjAxMzQwMDAwMDAwMjAyMDIwMUIwMDAwMDAwMDE0RgorOjEwMzA5MDAwMDIwMjAyMEMwMDAwMDAwMTAyMDIwMjE0MDAwMDAwMDEwMgorOjEwMzBBMDAwMDIwMjAyMTgwMDAwMDAwMjAyMDIwNDA0MDAwMDAwMDFGMworOjEwMzBCMDAwMDIwMjA0MEMwMDAwMDA0MDAyMDIwNDEwMDAwMDAwNDA2NAorOjEwMzBDMDAwMDIwMjA0MUMwMDAwMDAwNDAyMDIwNDIwMDAwMDAwMjA5MAorOjEwMzBEMDAwMDIwMjA0MjQwMDAwMDAwMjAyMDIwNDI4MDAwMDAwMUY3MworOjEwMzBFMDAwMDYwMjA1MDAwMDAwMDAxMjA0MDIwNDgwMDAyMDA0MzRERgorOjEwMzBGMDAwMDIwMjAwNjAwMDAwMDAwRjAyMDIwMDY0MDAwMDAwMDdFRQorOjEwMzEwMDAwMDIwMjAwNjgwMDAwMDAwMDAyMDIwMDZDMDAwMDAwMEVENQorOjEwMzExMDAwMDYwMjAwNzAwMDAwMDAwNDAyMDIwMEY0MDAwMDAwMDQzNworOjEwMzEyMDAwMDIwMjAwMDQwMDAwMDAwMTAyMDIwMDA4MDAwMDAwMDE4OQorOjEwMzEzMDAwMDIwMjAwMEMwMDAwMDAwMTAyMDIwMDEwMDAwMDAwMDE2OQorOjEwMzE0MDAwMDIwMjAwMTQwMDAwMDAwMTAyMDIwMDE4MDAwMDAwMDE0OQorOjEwMzE1MDAwMDIwMjAwMUMwMDAwMDAwMTAyMDIwMDIwMDAwMDAwMDEyOQorOjEwMzE2MDAwMDIwMjAwMjQwMDAwMDAwMTAyMDIwMDI4MDAwMDAwMDEwOQorOjEwMzE3MDAwMDIwMjAwMkMwMDAwMDAwMTAyMDIwMDMwMDAwMDAwMDFFOQorOjEwMzE4MDAwMDIwMjAwMzQwMDAwMDAwMTAyMDIwMDM4MDAwMDAwMDFDOQorOjEwMzE5MDAwMDIwMjAwM0MwMDAwMDAwMTAyMDIwMDQwMDAwMDAwMDFBOQorOjEwMzFBMDAwMDIwMjAwNDQwMDAwMDAwMTAyMDIwMDQ4MDAwMDAwMDE4OQorOjEwMzFCMDAwMDIwMjAwNEMwMDAwMDAwMTAyMDIwMDUwMDAwMDAwMDE2OQorOjEwMzFDMDAwMDIwMjAxMDgwMDAwMDBDODAyMDIwMTE4MDAwMDAwMDIwQgorOjEwMzFEMDAwMDIwMjAxQzQwMDAwMDAwMDAyMDIwMUNDMDAwMDAwMDA1NQorOjEwMzFFMDAwMDIwMjAxRDQwMDAwMDAwMjAyMDIwMURDMDAwMDAwMDIyMQorOjEwMzFGMDAwMDIwMjAxRTQwMDAwMDBGRjAyMDIwMUVDMDAwMDAwRkZGNworOjEwMzIwMDAwMDIwMjAxMEMwMDAwMDBDODAyMDIwMTFDMDAwMDAwMDJDMgorOjEwMzIxMDAwMDIwMjAxQzgwMDAwMDAwMDAyMDIwMUQwMDAwMDAwMDAwQworOjEwMzIyMDAwMDIwMjAxRDgwMDAwMDAwMjAyMDIwMUUwMDAwMDAwMDJEOAorOjEwMzIzMDAwMDIwMjAxRTgwMDAwMDBGRjAyMDIwMUYwMDAwMDAwRkZBRQorOjEwMzI0MDAwMDcyODA0MDAwMDhFMDAwMDA4MjgwNzY4MDAxMzA0NTRCMworOjEwMzI1MDAwMDcyQzAwMDAzM0M4MDAwMDA3MkM4MDAwMzgwNTBDRjM1MQorOjEwMzI2MDAwMDcyRDAwMDAzOEI2MUFGNTA3MkQ4MDAwMDc3NjI5MjNCMAorOjEwMzI3MDAwMDgyRDhDQjA0RTZBMDQ1NjAxMjgwMDAwMDAwMDAwMDBBMgorOjEwMzI4MDAwMDEyODAwMDQwMDAwMDAwMDAxMjgwMDA4MDAwMDAwMDBFMAorOjEwMzI5MDAwMDEyODAwMEMwMDAwMDAwMDAxMjgwMDEwMDAwMDAwMDBDMAorOjEwMzJBMDAwMDEyODAwMTQwMDAwMDAwMDAyMjgwMDIwMDAwMDAwMDE5NgorOjEwMzJCMDAwMDIyODAwMjQwMDAwMDAwMjAyMjgwMDI4MDAwMDAwMDM2OQorOjEwMzJDMDAwMDIyODAwMkMwMDAwMDAwMDAyMjgwMDMwMDAwMDAwMDQ0QQorOjEwMzJEMDAwMDIyODAwMzQwMDAwMDAwMTAyMjgwMDM4MDAwMDAwMDAyRAorOjEwMzJFMDAwMDIyODAwM0MwMDAwMDAwMTAyMjgwMDQwMDAwMDAwMDQwOQorOjEwMzJGMDAwMDIyODAwNDQwMDAwMDAwMDAyMjgwMDQ4MDAwMDAwMDFFRAorOjEwMzMwMDAwMDIyODAwNEMwMDAwMDAwMzAyMjgwMDUwMDAwMDAwMDBDQQorOjEwMzMxMDAwMDIyODAwNTQwMDAwMDAwMTAyMjgwMDU4MDAwMDAwMDRBOAorOjEwMzMyMDAwMDIyODAwNUMwMDAwMDAwMDAyMjgwMDYwMDAwMDAwMDE4QworOjEwMzMzMDAwMDIyODAwNjQwMDAwMDAwMzAyMjgwMDY4MDAwMDAwMDA2QQorOjEwMzM0MDAwMDIyODAwNkMwMDAwMDAwMTAyMjgwMDcwMDAwMDAwMDQ0OAorOjEwMzM1MDAwMDIyODAwNzQwMDAwMDAwMDAyMjgwMDc4MDAwMDAwMDQyOQorOjEwMzM2MDAwMDIyODAwN0MwMDAwMDAwMzA2MjgwMDgwMDAwMDAwMDIwNAorOjEwMzM3MDAwMDIyODAwQTQwMDAwM0ZGRjAyMjgwMEE4MDAwMDAzRkY2RAorOjEwMzM4MDAwMDIyODAyMjQwMDAwMDAwMDAyMjgwMjM0MDAwMDAwMDA4RAorOjEwMzM5MDAwMDIyODAyNEMwMDAwMDAwMDAyMjgwMkU0MDAwMEZGRkZBNworOjEwMzNBMDAwMDYyODIwMDAwMDAwMDgwMDAyMkI4QkMwMDAwMDAwMDE0RQorOjEwMzNCMDAwMDIyQjgwMDAwMDAwMDAwMDAyMkI4MDQwMDAwMDAwMTg1QgorOjEwMzNDMDAwMDIyQjgwODAwMDAwMDAwQzAyMkI4MEMwMDAwMDAwNjZGMQorOjEwMzNEMDAwMEMyQjgzMDAwMDA3QTEyMDBBMkI4MzAwMDAwMDAxMzg3QQorOjEwMzNFMDAwMEIyQjgzMDAwMDAwMTM4ODBBMkI4MzQwMDAwMDAwMDA5MQorOjEwMzNGMDAwMEMyQjgzNDAwMDAwMDFGNDBCMkI4MzQwMDAwMDAwMDVFMAorOjEwMzQwMDAwMDIyQjgzODAwMDA3QTEyMDAyMkI4M0MwMDAwMDAxRjQ1RgorOjEwMzQxMDAwMDYyQTNENDgwMDAwMDAwNDA0MkEzRDU4MDAwMjA0NThEMgorOjEwMzQyMDAwMDYyQTNENjAwMDAwMDAwNjA2MkEzMDAwMDAwMDAwNDgyMQorOjEwMzQzMDAwMDYyQTIwMDgwMDAwMDBDODA2MkEyMDAwMDAwMDAwMDIxQQorOjEwMzQ0MDAwMDYyQTMxMjgwMDAwMDA4RTA2MkEzMzY4MDAwMDAwMDM5NworOjEwMzQ1MDAwMDQyQTMzNzQwMDAxMDQ1QTA2MkEzQTc4MDAwMDAwMDI1NAorOjEwMzQ2MDAwMDQyQTNBODAwMDAyMDQ1QjA0MkEzQTcwMDAwMjA0NUREOAorOjEwMzQ3MDAwMDQyQTNFMjgwMDAyMDQ1RjA0MkEzRUIwMDAwNDA0NjFDRQorOjEwMzQ4MDAwMDQyQTI1MDAwMDAyMDQ2NTA2MkEyNTA4MDAwMDAxMDAyMAorOjEwMzQ5MDAwMDYyQTI5NzAwMDAwMDAwNDA0MkEyOTYwMDAwNDA0NjczOQorOjEwMzRBMDAwMDQyQTJGNDgwMDAyMDQ2QjA2MkEzMzc4MDAwMDAwRDg1MworOjEwMzRCMDAwMDIyQTNBMzgwMDAwMDAwMDA2MkEzQTg4MDAwMDAwMzI0QQorOjEwMzRDMDAwMDQyQTNEODgwMDEwMDQ2RDA2MkE1MDIwMDAwMDAwMDJFNgorOjEwMzREMDAwMDYyQTUwMzAwMDAwMDAwMjA2MkE1MDAwMDAwMDAwMDJCOAorOjEwMzRFMDAwMDYyQTUwMTAwMDAwMDAwMjAyMkE1MEI4MDAwMDAwMDExNQorOjEwMzRGMDAwMDYyQTUwNDgwMDAwMDAwRTA0MkEzRDc4MDAwMjA0N0Q5MAorOjEwMzUwMDAwMDYyQTNDMTgwMDAwMDAyNjAyMkE1MDQwMDAwMDAwMDA1NQorOjEwMzUxMDAwMDYyQTM2RDgwMDAwMDBEODAyMkEzQTNDMDAwMDAwMDBGMworOjEwMzUyMDAwMDYyQTNCNTAwMDAwMDAzMjA0MkEzREM4MDAxMDA0N0ZFOAorOjEwMzUzMDAwMDYyQTUwMjgwMDAwMDAwMjA2MkE1MDM4MDAwMDAwMDIyNworOjEwMzU0MDAwMDYyQTUwMDgwMDAwMDAwMjA2MkE1MDE4MDAwMDAwMDI1NworOjEwMzU1MDAwMDIyQTUwQkMwMDAwMDAwMTA2MkE1MDgwMDAwMDAwMEUyNAorOjEwMzU2MDAwMDQyQTNEODAwMDAyMDQ4RjA2MkEzQ0IwMDAwMDAwMjY5OQorOjEwMzU3MDAwMDIyQTUwNDQwMDAwMDAwMDAyMTAxMDA4MDAwMDAwMDE2MAorOjEwMzU4MDAwMDIxMDEwMTAwMDAwMDI2NDAyMTAxMDAwMDAwM0QwMDBBRQorOjEwMzU5MDAwMDIxMDEwMDQwMDAwMDAzRDA5MTAxODAwMDIwMDA0OTEwMAorOjEwMzVBMDAwMDkxMDExMDAwMDEwMDY5MTA2MTAxMTQwMDAwMDAwMDhEQgorOjEwMzVCMDAwMDkxMDExNjAwMDA4MDZBMTA2MTAxMTgwMDAwMDAwMDIyOQorOjEwMzVDMDAwMDkxMDExODgwMDA2MDZBOTA2MTAxMUEwMDAwMDAwMThCNQorOjEwMzVEMDAwMDIxMDEwMTAwMDAwMDAwMDA2MTAyNDAwMDAwMDAwRTA5RgorOjEwMzVFMDAwMDIxMDIwMUMwMDAwMDAwMDAyMTAyMDIwMDAwMDAwMDEzQQorOjEwMzVGMDAwMDIxMDIwQzAwMDAwMDAwMTAyMTAyMDA0MDAwMDAwMDFBMQorOjEwMzYwMDAwMDIxMDIwMDgwMDAwMDAwMTA5MTAzQzAwMDAwNTA2QUY3MAorOjEwMzYxMDAwMDkxMDNDMjAwMDA1MDZCNDA5MTAzODAwMDAwNTA2Qjk2MQorOjEwMzYyMDAwMDIxMDQwMjgwMDAwMDAxMDAyMTA0MDQ0MDAwMDNGRkYzQworOjEwMzYzMDAwMDIxMDQwNTgwMDI4MDAwMDAyMTA0MDg0MDA4NDkyNEE4MgorOjEwMzY0MDAwMDYxMDRDMDAwMDAwMDEwMDAyMTA0MDU4MDAwMDAwMDA2RAorOjEwMzY1MDAwMDYxMDgwNjgwMDAwMDAwNDAyMTA4MDAwMDAwMDEwODA0NgorOjEwMzY2MDAwMDYxMDgwMjgwMDAwMDAwMjAyMTA4MDM4MDAwMDAwMTBDMAorOjEwMzY3MDAwMDIxMDgwNDAwMDAwRkZGRjAyMTA4MDQ0MDAwMEZGRkZBNgorOjEwMzY4MDAwMDIxMDgwNTAwMDAwMDAwMDAyMTA4MTAwMDAwMDAwMDBDNQorOjEwMzY5MDAwMDYxMDgxMjAwMDAwMDAwMjAyMTA4MDA4MDAwMDAyQjUyMAorOjEwMzZBMDAwMDIxMDgwMTAwMDAwMDAwMDA2MTA4MjAwMDAwMDAwNEE5NgorOjEwMzZCMDAwMDIxMDgxMDgwMDAxRkZGRjA2MTA4MTQwMDAwMDAwMDI5NworOjEwMzZDMDAwMDIxMDgwMDAwMDAwMUE4MDA2MTA5MDAwMDAwMDAwMjQwNAorOjEwMzZEMDAwMDYxMDkxMjAwMDAwMDA0QTA2MTA5MzcwMDAwMDAwNEE3NgorOjEwMzZFMDAwMDYxMDk1QzAwMDAwMDA0QTAyMTA4MDA0MDAwMDEwODBGRgorOjEwMzZGMDAwMDYxMDgwMzAwMDAwMDAwMjAyMTA4MDNDMDAwMDAwMTAyNAorOjEwMzcwMDAwMDIxMDgwNDgwMDAwRkZGRjAyMTA4MDRDMDAwMEZGRkYwNQorOjEwMzcxMDAwMDIxMDgwNTQwMDAwMDAwMDAyMTA4MTA0MDAwMDAwMDAyQworOjEwMzcyMDAwMDYxMDgxMjgwMDAwMDAwMjAyMTA4MDBDMDAwMDAyQjU4MworOjEwMzczMDAwMDIxMDgwMTQwMDAwMDAwMDA2MTA4NDAwMDAwMDAwNEFGRgorOjEwMzc0MDAwMDIxMDgxMEMwMDAxRkZGRjA2MTA4MTQ4MDAwMDAwMDJGQQorOjEwMzc1MDAwMDIxMDgwMDQwMDAwMUE4MDA2MTA5MDkwMDAwMDAwMjRERgorOjEwMzc2MDAwMDYxMDkyNDgwMDAwMDA0QTA2MTA5NDk4MDAwMDAwNEE5MworOjEwMzc3MDAwMDYxMDk2RTgwMDAwMDA0QTAyMTIwNDkwMDBFMzgzNDAxRAorOjEwMzc4MDAwMDIxMjA1MTQwMDAwM0MxMDAyMTIwNTIwMDAwMDAwMDI4NQorOjEwMzc5MDAwMDIxMjA0OTRGRkZGRkZGRjAyMTIwNDk4RkZGRkZGRkZENQorOjEwMzdBMDAwMDIxMjA0OUNGRkZGRkZGRjAyMTIwNEEwRkZGRkZGRkZCNQorOjEwMzdCMDAwMDIxMjA0QTRGRkZGRkZGRjAyMTIwNEE4RkZGRkZGRkY5NQorOjEwMzdDMDAwMDIxMjA0QUNGRkZGRkZGRjAyMTIwNEIwRkZGRkZGRkY3NQorOjEwMzdEMDAwMDIxMjA0QjhGRkZGRkZGRjAyMTIwNEJDRkZGRkZGRkY0RAorOjEwMzdFMDAwMDIxMjA0QzBGRkZGRkZGRjAyMTIwNEM0RkZGRkZGRkYyRAorOjEwMzdGMDAwMDIxMjA0QzhGRkZGRkZGRjAyMTIwNENDRkZGRkZGRkYwRAorOjEwMzgwMDAwMDIxMjA0RDBGRkZGRkZGRjAyMTIwNERDRkZGRkZGRkZFNAorOjEwMzgxMDAwMDIxMjA0RTBGRkZGRkZGRjAyMTIwNEU0RkZGRkZGRkZCQworOjEwMzgyMDAwMDIxMjA0RThGRkZGRkZGRjAyMTIwNEVDRkZGRkZGRkY5QworOjEwMzgzMDAwMDIxMjA0RjBGRkZGRkZGRjAyMTIwNEY0RkZGRkZGRkY3QworOjEwMzg0MDAwMDIxMjA0RjhGRkZGRkZGRjAyMTIwNEZDRkZGRkZGRkY1QworOjEwMzg1MDAwMDIxMjA1MDBGRkZGRkZGRjAyMTIwNTA0RkZGRkZGRkYzQQorOjEwMzg2MDAwMDIxMjA1MDhGRkZGRkZGRjAyMTIwNTBDRkZGRkZGRkYxQQorOjEwMzg3MDAwMDIxMjA1MTBGRkZGRkZGRjAyMTIwNEQ0RkZGRjMzMzBENgorOjEwMzg4MDAwMDIxMjA0RDhGRkZGMzM0MDAyMTIwNEI0RjAwMDMwMDBFQgorOjEwMzg5MDAwMDIxMjAzOTAwMDAwMDAwODAyMTIwMzlDMDAwMDAwMDhCRQorOjEwMzhBMDAwMDYxMjAzQTAwMDAwMDAwMjAyMTIwM0JDMDAwMDAwMDQ4NAorOjEwMzhCMDAwMDIxMjAzQzQwMDAwMDAwNDAyMTIwM0QwMDAwMDAwMDA0MgorOjEwMzhDMDAwMDIxMjAzREMwMDAwMDAwMDAyMTIwMzZDMDAwMDAwMDE4MQorOjEwMzhEMDAwMDIxMjAzNjgwMDAwMDAzRjAyMTIwMUJDMDAwMDAwNDAxOQorOjEwMzhFMDAwMDIxMjAxQzAwMDAwMTgwODAyMTIwMUM0MDAwMDA4MDNGRgorOjEwMzhGMDAwMDIxMjAxQzgwMDAwMDgwMzAyMTIwMUNDMDAwMDAwNDBCRgorOjEwMzkwMDAwMDIxMjAxRDAwMDAwMDAwMzAyMTIwMUQ0MDAwMDA4MDNEQgorOjEwMzkxMDAwMDIxMjAxRDgwMDAwMDgwMzAyMTIwMURDMDAwMDA4MDNCMworOjEwMzkyMDAwMDIxMjAxRTAwMDAxMDAwMzAyMTIwMUU0MDAwMDA4MDM5QQorOjEwMzkzMDAwMDIxMjAxRTgwMDAwMDgwMzAyMTIwMUVDMDAwMDAwMDM3QgorOjEwMzk0MDAwMDIxMjAxRjAwMDAwMDAwMzAyMTIwMUY0MDAwMDAwMDM2MworOjEwMzk1MDAwMDIxMjAxRjgwMDAwMDAwMzAyMTIwMUZDMDAwMDAwMDM0MworOjEwMzk2MDAwMDIxMjAyMDAwMDAwMDAwMzAyMTIwMjA0MDAwMDAwMDMyMQorOjEwMzk3MDAwMDIxMjAyMDgwMDAwMDAwMzAyMTIwMjBDMDAwMDAwMDMwMQorOjEwMzk4MDAwMDIxMjAyMTAwMDAwMDAwMzAyMTIwMjE0MDAwMDAwMDNFMQorOjEwMzk5MDAwMDIxMjAyMTgwMDAwMDAwMzAyMTIwMjFDMDAwMDAwMDNDMQorOjEwMzlBMDAwMDIxMjAyMjAwMDAwMDAwMzAyMTIwMjI0MDAwMDAwMDNBMQorOjEwMzlCMDAwMDIxMjAyMjgwMDAwMjQwMzAyMTIwMjJDMDAwMDAwMkYzMQorOjEwMzlDMDAwMDIxMjAyMzAwMDAwMDAwOTAyMTIwMjM0MDAwMDAwMTk0NQorOjEwMzlEMDAwMDIxMjAyMzgwMDAwMDE4NDAyMTIwMjNDMDAwMDAxODMzRQorOjEwMzlFMDAwMDIxMjAyNDAwMDAwMDMwNjAyMTIwMjQ0MDAwMDAwMTkwNQorOjEwMzlGMDAwMDIxMjAyNDgwMDAwMDAwNjAyMTIwMjRDMDAwMDAzMDZGOAorOjEwM0EwMDAwMDIxMjAyNTAwMDAwMDMwNjAyMTIwMjU0MDAwMDAzMDZENAorOjEwM0ExMDAwMDIxMjAyNTgwMDAwMEM4NjAyMTIwMjVDMDAwMDAzMDYyQgorOjEwM0EyMDAwMDIxMjAyNjAwMDAwMDMwNjAyMTIwMjY0MDAwMDAwMDY5NworOjEwM0EzMDAwMDIxMjAyNjgwMDAwMDAwNjAyMTIwMjZDMDAwMDAwMDY3QQorOjEwM0E0MDAwMDIxMjAyNzAwMDAwMDAwNjAyMTIwMjc0MDAwMDAwMDY1QQorOjEwM0E1MDAwMDIxMjAyNzgwMDAwMDAwNjAyMTIwMjdDMDAwMDAwMDYzQQorOjEwM0E2MDAwMDIxMjAyODAwMDAwMDAwNjAyMTIwMjg0MDAwMDAwMDYxQQorOjEwM0E3MDAwMDIxMjAyODgwMDAwMDAwNjAyMTIwMjhDMDAwMDAwMDZGQQorOjEwM0E4MDAwMDIxMjAyOTAwMDAwMDAwNjAyMTIwMjk0MDAwMDAwMDZEQQorOjEwM0E5MDAwMDIxMjAyOTgwMDAwMDAwNjAyMTIwMjlDMDAwMDAwMDZCQQorOjEwM0FBMDAwMDIxMjAyQTAwMDAwMDMwNjAyMTIwMkE0MDAwMDAwMTM4QQorOjEwM0FCMDAwMDIxMjAyQTgwMDAwMDAwNjAyMTIwMkIwMDAwMDEwMDQ2OAorOjEwM0FDMDAwMDIxMjAyQjQwMDAwMTAwNDAyMTIwMzI0MDAxMDY0NDAyOQorOjEwM0FEMDAwMDIxMjAzMjgwMDEwNjQ0MDAyMTIwMUIwMDAwMDAwMDEyRAorOjEwM0FFMDAwMDYwMEEwMDAwMDAwMDAxNjAyMDBBMDZDQkY1QzAwMDBGMQorOjEwM0FGMDAwMDIwMEEwNzBGRkY1MUZFRjAyMDBBMDc0MDAwMEZGRkY5RQorOjEwM0IwMDAwMDIwMEEwNzhGMDAwMDNFMDAyMDBBMDdDMDAwMDAwMDBBQQorOjEwM0IxMDAwMDIwMEEwODAwMDAwQTAwMDA2MDBBMDg0MDAwMDAwMDVCNAorOjEwM0IyMDAwMDIwMEEwOTgwRkUwMDAwMDA2MDBBMDlDMDAwMDAwMTQxNgorOjEwM0IzMDAwMDIwMEEwRUM1NTU0MDAwMDAyMDBBMEYwNTU1NTU1NTU2OAorOjEwM0I0MDAwMDIwMEEwRjQwMDAwNTU1NTAyMDBBMEY4RjAwMDAwMDBBQgorOjEwM0I1MDAwMDIwMEEwRkM1NTU0MDAwMDAyMDBBMTAwNTU1NTU1NTUyNworOjEwM0I2MDAwMDIwMEExMDQwMDAwNTU1NTAyMDBBMTA4RjAwMDAwMDA2OQorOjEwM0I3MDAwMDYwMEEyMkMwMDAwMDAwNDAyMDBBMDYwMDAwMDAzMDc2MQorOjEwM0I4MDAwMDIwMEExMENCRjVDMDAwMDAyMDBBMTEwRkZGNTFGRUZCNgorOjEwM0I5MDAwMDIwMEExMTQwMDAwRkZGRjAyMDBBMTE4RjAwMDAzRTBFMgorOjEwM0JBMDAwMDIwMEExMUMwMDAwMDAwMDAyMDBBMTIwMDAwMEEwMDBGMworOjEwM0JCMDAwMDYwMEExMjQwMDAwMDAwNTAyMDBBMTM4MEZFMDAwMDA2QgorOjEwM0JDMDAwMDYwMEExM0MwMDAwMDAxNDAyMDBBMThDNTU1NDAwMDAyNgorOjEwM0JEMDAwMDIwMEExOTA1NTU1NTU1NTAyMDBBMTk0MDAwMDU1NTU3RAorOjEwM0JFMDAwMDIwMEExOThGMDAwMDAwMDAyMDBBMTlDNTU1NDAwMDBDMgorOjEwM0JGMDAwMDIwMEExQTA1NTU1NTU1NTAyMDBBMUE0MDAwMDU1NTUzRAorOjEwM0MwMDAwMDIwMEExQThGMDAwMDAwMDA2MDBBMjNDMDAwMDAwMDQ5MQorOjEwM0MxMDAwMDIwMEEwNjQwMDAwMDMwNzAwMDAwMDAwMDAwMDAwMDA5NAorOjEwM0MyMDAwMDAwMDAwMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgorOjEwM0MzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NAorOjEwM0M0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NAorOjEwM0M1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAorOjEwM0M2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NAorOjEwM0M3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUwMDREMDAwMDAwMDBDOQorOjEwM0M4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNAorOjEwM0M5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAorOjEwM0NBMDAwMDAwMDAwMDAwMDREMDA4QjAwMDAwMDAwMDAwMDAwMDAzQworOjEwM0NCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwM0NDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwM0NEMDAwMDA4QjAwOTAwMDkwMDA5NDAwOTQwMDk4MDAwMDAwMDA3OQorOjEwM0NFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAorOjEwM0NGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ODAyREU0QworOjEwM0QwMDAwMDJERTAyRTgwMkU4MDJGMjAwMDAwMDAwMDAwMDAwMDAwQgorOjEwM0QxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMworOjEwM0QyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MworOjEwM0QzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MworOjEwM0Q0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MworOjEwM0Q1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MworOjEwM0Q2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MworOjEwM0Q3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MworOjEwM0Q4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMworOjEwM0Q5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMworOjEwM0RBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMworOjEwM0RCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworOjEwM0RDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwM0REMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjIwMkZBMDAwMDAwMDBGMworOjEwM0RFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMworOjEwM0RGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMworOjEwM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMgorOjEwM0UxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgorOjEwM0UyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgorOjEwM0UzMDAwMDJGQTAyRkYwMkZGMDMwQTAzMEEwMzE1MDAwMDAwMDA1MgorOjEwM0U0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MgorOjEwM0U1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MgorOjEwM0U2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgorOjEwM0U3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgorOjEwM0U4MDAwMDAwMDAwMDAwMDAwMDAwMDAzMTUwMzE2MDAwMDAwMDAwMQorOjEwM0U5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgorOjEwM0VBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgorOjEwM0VCMDAwMDAwMDAwMDAwMzE2MDM1NzAwMDAwMDAwMDAwMDAwMDA4RgorOjEwM0VDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMgorOjEwM0VEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwM0VFMDAwMDM1NzAzN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQQorOjEwM0VGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMgorOjEwM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3QjAzQkI3NQorOjEwM0YxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMQorOjEwM0YyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MQorOjEwM0YzMDAwMDAwMDAwMDAwMDAwMDAwMDAzQkIwM0Y3MDAwMDAwMDBDOQorOjEwM0Y0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQorOjEwM0Y1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQorOjEwM0Y2MDAwMDAwMDAwMDAwM0Y3MDQzRDA0M0QwNDUyMDQ1MjA0NjdCRQorOjEwM0Y3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQorOjEwM0Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQorOjEwM0Y5MDAwMDQ2NzA0RUQwNEVEMDRGMjA0RjIwNEY3MDAwMDAwMDBFRAorOjEwM0ZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorOjEwM0ZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGNzA0RjgwQQorOjEwM0ZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMQorOjEwM0ZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQorOjEwM0ZFMDAwMDAwMDAwMDAwMDAwMDAwMDA0RjgwNTBBMDAwMDAwMDBDNgorOjEwM0ZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwNDAxMDAwMDAwMDAwMDAwNTBBMDUxRjA1MUYwNTIyMDUyMjA1MjVEMQorOjEwNDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MAorOjEwNDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAorOjEwNDA0MDAwMDUyNTA1NTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQworOjEwNDA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAorOjEwNDA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1NTA1REMxNQorOjEwNDA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAorOjEwNDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAorOjEwNDA5MDAwMDAwMDAwMDAwMDAwMDAwMDA1REMwNUUzMDVFMzA1RTc4MworOjEwNDBBMDAwMDVFNzA1RUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNAorOjEwNDBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorOjEwNDBDMDAwMDAwMDAwMDAwNUVCMDYyQjA2MkIwNjMzMDYzMzA2M0JFQgorOjEwNDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwNDBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwNDBGMDAwMDYzQjA2ODgwNjg4MDY5NTA2OTUwNkEyMDAwMDAwMDA4NQorOjEwNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNDExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBMjA2QUU0MworOjEwNDEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwNDEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwNDE0MDAwMDAwMDAwMDAwMDAwMDAwMDA2QUUwNkI0MDAwMDAwMDAwMQorOjEwNDE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwNDE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwNDE3MDAwMDAwMDAwMDAwNkI0MDZCNzAwMDAwMDAwMDAwMDAwMDBDOAorOjEwNDE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwNDE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgorOjEwNDFBMDAwMDZCNzA2QkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwNDFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgorOjEwNDFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZCRDA2QkU2OAorOjEwNDFEMDAwMDZCRTA2RDAwNkQwMDZFMjAwMDAwMDAwMDAwMDAwMDA4NworOjEwNDFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRgorOjEwNDFGMDAwMDAwMDAwMDAwMDAwMDAwMDA2RTIwNzRGMDAwMDAwMDA4MQorOjEwNDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRQorOjEwNDIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNDIyMDAwMDAwMDAwMDAwNzRGMDc1MDA3NTAwNzYzMDc2MzA3NzYzOQorOjEwNDIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQorOjEwNDI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwNDI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQorOjEwNDI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQorOjEwNDI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQorOjEwNDI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQorOjEwNDI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQorOjEwNDJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwNDJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQorOjEwNDJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRQorOjEwNDJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwNDJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRQorOjEwNDJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRQorOjEwNDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAorOjEwNDMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAorOjEwNDMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNDMzMDAwMDAwMTAwMDAwMDAyMDRDMDAwMDMwOTgwMDAwNDBFNDBEOAorOjEwNDM0MDAwMDAwNTEzMDAwMDA2MTdDMDAwMDcxQzgwMDAwODIxNDA2QworOjEwNDM1MDAwMDAwOTI2MDAwMDBBMkFDMDAwMEIyRjgwMDAwQzM0NDAwMAorOjEwNDM2MDAwMDAwRDM5MDAwMDBFM0RDMDAwMEY0MjgwMDAxMDQ3NDA5NAorOjEwNDM3MDAwMDAxMTRDMDAwMDEyNTBDMDAwMTM1NTgwMDAxNDVBNDAyOAorOjEwNDM4MDAwMDAxNTVGMDAwMDE2NjNDMDAwMTc2ODgwMDAxODZENDBCQworOjEwNDM5MDAwMDAxOTcyMDAwMDFBNzZDMDAwMUI3QjgwMDAxQzgwNDA1MAorOjEwNDNBMDAwMDAxRDg1MDAwMDFFODlDMDAwMUY4RTgwMDAwMDkzNDAwNAorOjEwNDNCMDAwMDAwMDIwMDAwMDAwNDAwMDAwMDA2MDAwMDAwMDgwMDBCRAorOjEwNDNDMDAwMDAwMEEwMDAwMDAwQzAwMDAwMDBFMDAwMDAwMTAwMDBBQworOjEwNDNEMDAwMDAwMTIwMDAwMDAxNDAwMDAwMDE2MDAwMDAwMTgwMDA5OQorOjEwNDNFMDAwMDAwMUEwMDAwMDAxQzAwMDAwMDFFMDAwMDAwMjAwMDA4OAorOjEwNDNGMDAwMDAwMjIwMDAwMDAyNDAwMDAwMDI2MDAwMDAwMjgwMDA3NQorOjEwNDQwMDAwMDAwMkEwMDAwMDAyQzAwMDAwMDJFMDAwMDAwMzAwMDA2MworOjEwNDQxMDAwMDAwMzIwMDAwMDAzNDAwMDAwMDM2MDAwMDAwMzgwMDA1MAorOjEwNDQyMDAwMDAwM0EwMDAwMDAzQzAwMDAwMDNFMDAwMDAwNDAwMDAzRgorOjEwNDQzMDAwMDAwNDIwMDAwMDA0NDAwMDAwMDQ2MDAwMDAwNDgwMDAyQworOjEwNDQ0MDAwMDAwNEEwMDAwMDA0QzAwMDAwMDRFMDAwMDAwNTAwMDAxQgorOjEwNDQ1MDAwMDAwNTIwMDAwMDA1NDAwMDAwMDU2MDAwMDAwNTgwMDAwOAorOjEwNDQ2MDAwMDAwNUEwMDAwMDA1QzAwMDAwMDVFMDAwMDAwNjAwMDBGNworOjEwNDQ3MDAwMDAwNjIwMDAwMDA2NDAwMDAwMDY2MDAwMDAwNjgwMDBFNAorOjEwNDQ4MDAwMDAwNkEwMDAwMDA2QzAwMDAwMDZFMDAwMDAwNzAwMDBEMworOjEwNDQ5MDAwMDAwNzIwMDAwMDA3NDAwMDAwMDc2MDAwMDAwNzgwMDBDMAorOjEwNDRBMDAwMDAwN0EwMDAwMDA3QzAwMDAwMDdFMDAwMDAwODAwMDBBRgorOjEwNDRCMDAwMDAwODIwMDAwMDA4NDAwMDAwMDg2MDAwMDAwODgwMDA5QworOjEwNDRDMDAwMDAwOEEwMDAwMDA4QzAwMDAwMDhFMDAwMDAwOTAwMDA4QgorOjEwNDREMDAwMDAwOTIwMDAwMDA5NDAwMDAwMDk2MDAwMDAwOTgwMDA3OAorOjEwNDRFMDAwMDAwOUEwMDAwMDA5QzAwMDAwMDlFMDAwMDAwQTAwMDA2NworOjEwNDRGMDAwMDAwQTIwMDAwMDBBNDAwMDAwMEE2MDAwMDAwQTgwMDA1NAorOjEwNDUwMDAwMDAwQUEwMDAwMDBBQzAwMDAwMEFFMDAwMDAwQjAwMDA0MgorOjEwNDUxMDAwMDAwQjIwMDAwMDBCNDAwMDAwMEI2MDAwMDAwQjgwMDAyRgorOjEwNDUyMDAwMDAwQkEwMDAwMDBCQzAwMDAwMEJFMDAwMDAwQzAwMDAxRQorOjEwNDUzMDAwMDAwQzIwMDAwMDBDNDAwMDAwMEM2MDAwMDAwQzgwMDAwQgorOjEwNDU0MDAwMDAwQ0EwMDAwMDBDQzAwMDAwMENFMDAwMDAwRDAwMDBGQQorOjEwNDU1MDAwMDAwRDIwMDAwMDBENDAwMDAwMEQ2MDAwMDAwRDgwMDBFNworOjEwNDU2MDAwMDAwREEwMDAwMDBEQzAwMDAwMERFMDAwMDAwRTAwMDBENgorOjEwNDU3MDAwMDAwRTIwMDAwMDBFNDAwMDAwMEU2MDAwMDAwRTgwMDBDMworOjEwNDU4MDAwMDAwRUEwMDAwMDBFQzAwMDAwMEVFMDAwMDAwRjAwMDBCMgorOjEwNDU5MDAwMDAwRjIwMDAwMDBGNDAwMDAwMEY2MDAwMDAwRjgwMDA5RgorOjEwNDVBMDAwMDAwRkEwMDAwMDBGQzAwMDAwMEZFMDAwMDAxMDAwMDA4RQorOjEwNDVCMDAwMDAxMDIwMDAwMDEwNDAwMDAwMTA2MDAwMDAxMDgwMDA3QgorOjEwNDVDMDAwMDAxMEEwMDAwMDEwQzAwMDAwMTBFMDAwMDAxMTAwMDA2QQorOjEwNDVEMDAwMDAxMTIwMDAwMDExNDAwMDAwMTE2MDAwMDAxMTgwMDA1NworOjEwNDVFMDAwMDAxMUEwMDAwMDExQzAwMDAwMTFFMDAwMDAxMjAwMDA0NgorOjEwNDVGMDAwMDAxMjIwMDAwMDEyNDAwMDAwMTI2MDAwMDAxMjgwMDAzMworOjEwNDYwMDAwMDAxMkEwMDAwMDEyQzAwMDAwMTJFMDAwMDAxMzAwMDAyMQorOjEwNDYxMDAwMDAxMzIwMDAwMDEzNDAwMDAwMTM2MDAwMDAxMzgwMDAwRQorOjEwNDYyMDAwMDAxM0EwMDAwMDEzQzAwMDAwMTNFMDAwMDAxNDAwMDBGRAorOjEwNDYzMDAwMDAxNDIwMDAwMDE0NDAwMDAwMTQ2MDAwMDAxNDgwMDBFQQorOjEwNDY0MDAwMDAxNEEwMDAwMDE0QzAwMDAwMTRFMDAwMDAxNTAwMDBEOQorOjEwNDY1MDAwMDAxNTIwMDAwMDE1NDAwMDAwMTU2MDAwMDAxNTgwMDBDNgorOjEwNDY2MDAwMDAxNUEwMDAwMDE1QzAwMDAwMTVFMDAwMDAxNjAwMDBCNQorOjEwNDY3MDAwMDAxNjIwMDAwMDE2NDAwMDAwMTY2MDAwMDAxNjgwMDBBMgorOjEwNDY4MDAwMDAxNkEwMDAwMDE2QzAwMDAwMTZFMDAwMDAxNzAwMDA5MQorOjEwNDY5MDAwMDAxNzIwMDAwMDE3NDAwMDAwMTc2MDAwMDAxNzgwMDA3RQorOjEwNDZBMDAwMDAxN0EwMDAwMDE3QzAwMDAwMTdFMDAwMDAxODAwMDA2RAorOjEwNDZCMDAwMDAxODIwMDAwMDE4NDAwMDAwMTg2MDAwMDAxODgwMDA1QQorOjEwNDZDMDAwMDAxOEEwMDAwMDE4QzAwMDAwMThFMDAwMDAxOTAwMDA0OQorOjEwNDZEMDAwMDAxOTIwMDAwMDE5NDAwMDAwMTk2MDAwMDAxOTgwMDAzNgorOjEwNDZFMDAwMDAxOUEwMDAwMDE5QzAwMDAwMTlFMDAwMDAxQTAwMDAyNQorOjEwNDZGMDAwMDAxQTIwMDAwMDFBNDAwMDAwMUE2MDAwMDAxQTgwMDAxMgorOjEwNDcwMDAwMDAxQUEwMDAwMDFBQzAwMDAwMUFFMDAwMDAxQjAwMDAwMAorOjEwNDcxMDAwMDAxQjIwMDAwMDFCNDAwMDAwMUI2MDAwMDAxQjgwMDBFRAorOjEwNDcyMDAwMDAxQkEwMDAwMDFCQzAwMDAwMUJFMDAwMDAxQzAwMDBEQworOjEwNDczMDAwMDAxQzIwMDAwMDFDNDAwMDAwMUM2MDAwMDAxQzgwMDBDOQorOjEwNDc0MDAwMDAxQ0EwMDAwMDFDQzAwMDAwMUNFMDAwMDAxRDAwMDBCOAorOjEwNDc1MDAwMDAxRDIwMDAwMDFENDAwMDAwMUQ2MDAwMDAxRDgwMDBBNQorOjEwNDc2MDAwMDAxREEwMDAwMDFEQzAwMDAwMURFMDAwMDAxRTAwMDA5NAorOjEwNDc3MDAwMDAxRTIwMDAwMDFFNDAwMDAwMUU2MDAwMDAxRTgwMDA4MQorOjEwNDc4MDAwMDAxRUEwMDAwMDFFQzAwMDAwMUVFMDAwMDAxRjAwMDA3MAorOjEwNDc5MDAwMDAxRjIwMDAwMDFGNDAwMDAwMUY2MDAwMDAxRjgwMDA1RAorOjEwNDdBMDAwMDAxRkEwMDAwMDFGQzAwMDAwMUZFMDAwMDAyMDAwMDA0QworOjEwNDdCMDAwMDAyMDIwMDAwMDIwNDAwMDAwMjA2MDAwMDAyMDgwMDAzOQorOjEwNDdDMDAwMDAyMEEwMDAwMDIwQzAwMDAwMjBFMDAwMDAyMTAwMDAyOAorOjEwNDdEMDAwMDAyMTIwMDAwMDIxNDAwMDAwMjE2MDAwMDAyMTgwMDAxNQorOjEwNDdFMDAwMDAyMUEwMDAwMDIxQzAwMDAwMjFFMDAwMDAyMjAwMDAwNAorOjEwNDdGMDAwMDAyMjIwMDAwMDIyNDAwMDAwMjI2MDAwMDAyMjgwMDBGMQorOjEwNDgwMDAwMDAyMkEwMDAwMDIyQzAwMDAwMjJFMDAwMDAyMzAwMDBERgorOjEwNDgxMDAwMDAyMzIwMDAwMDIzNDAwMDAwMjM2MDAwMDAyMzgwMDBDQworOjEwNDgyMDAwMDAyM0EwMDAwMDIzQzAwMDAwMjNFMDAwMDAyNDAwMDBCQgorOjEwNDgzMDAwMDAyNDIwMDAwMDI0NDAwMDAwMjQ2MDAwMDAyNDgwMDBBOAorOjEwNDg0MDAwMDAyNEEwMDAwMDI0QzAwMDAwMjRFMDAwMDAyNTAwMDA5NworOjEwNDg1MDAwMDAyNTIwMDAwMDI1NDAwMDAwMjU2MDAwMDAyNTgwMDA4NAorOjEwNDg2MDAwMDAyNUEwMDAwMDI1QzAwMDAwMjVFMDAwMDAyNjAwMDA3MworOjEwNDg3MDAwMDAyNjIwMDAwMDI2NDAwMDAwMjY2MDAwMDAyNjgwMDA2MAorOjEwNDg4MDAwMDAyNkEwMDAwMDI2QzAwMDAwMjZFMDAwMDAyNzAwMDA0RgorOjEwNDg5MDAwMDAyNzIwMDAwMDI3NDAwMDAwMjc2MDAwMDAyNzgwMDAzQworOjEwNDhBMDAwMDAyN0EwMDAwMDI3QzAwMDAwMjdFMDAwMDAyODAwMDAyQgorOjEwNDhCMDAwMDAyODIwMDAwMDI4NDAwMDAwMjg2MDAwMDAyODgwMDAxOAorOjEwNDhDMDAwMDAyOEEwMDAwMDI4QzAwMDAwMjhFMDAwMDAyOTAwMDAwNworOjEwNDhEMDAwMDAyOTIwMDAwMDI5NDAwMDAwMjk2MDAwMDAyOTgwMDBGNAorOjEwNDhFMDAwMDAyOUEwMDAwMDI5QzAwMDAwMjlFMDAwMDAyQTAwMDBFMworOjEwNDhGMDAwMDAyQTIwMDAwMDJBNDAwMDAwMkE2MDAwMDAyQTgwMDBEMAorOjEwNDkwMDAwMDAyQUEwMDAwMDJBQzAwMDAwMkFFMDAwMDAyQjAwMDBCRQorOjEwNDkxMDAwMDAyQjIwMDAwMDJCNDAwMDAwMkI2MDAwMDAyQjgwMDBBQgorOjEwNDkyMDAwMDAyQkEwMDAwMDJCQzAwMDAwMkJFMDAwMDAyQzAwMDA5QQorOjEwNDkzMDAwMDAyQzIwMDAwMDJDNDAwMDAwMkM2MDAwMDAyQzgwMDA4NworOjEwNDk0MDAwMDAyQ0EwMDAwMDJDQzAwMDAwMkNFMDAwMDAyRDAwMDA3NgorOjEwNDk1MDAwMDAyRDIwMDAwMDJENDAwMDAwMkQ2MDAwMDAyRDgwMDA2MworOjEwNDk2MDAwMDAyREEwMDAwMDJEQzAwMDAwMkRFMDAwMDAyRTAwMDA1MgorOjEwNDk3MDAwMDAyRTIwMDAwMDJFNDAwMDAwMkU2MDAwMDAyRTgwMDAzRgorOjEwNDk4MDAwMDAyRUEwMDAwMDJFQzAwMDAwMkVFMDAwMDAyRjAwMDAyRQorOjEwNDk5MDAwMDAyRjIwMDAwMDJGNDAwMDAwMkY2MDAwMDAyRjgwMDAxQgorOjEwNDlBMDAwMDAyRkEwMDAwMDJGQzAwMDAwMkZFMDAwMDAzMDAwMDAwQQorOjEwNDlCMDAwMDAzMDIwMDAwMDMwNDAwMDAwMzA2MDAwMDAzMDgwMDBGNworOjEwNDlDMDAwMDAzMEEwMDAwMDMwQzAwMDAwMzBFMDAwMDAzMTAwMDBFNgorOjEwNDlEMDAwMDAzMTIwMDAwMDMxNDAwMDAwMzE2MDAwMDAzMTgwMDBEMworOjEwNDlFMDAwMDAzMUEwMDAwMDMxQzAwMDAwMzFFMDAwMDAzMjAwMDBDMgorOjEwNDlGMDAwMDAzMjIwMDAwMDMyNDAwMDAwMzI2MDAwMDAzMjgwMDBBRgorOjEwNEEwMDAwMDAzMkEwMDAwMDMyQzAwMDAwMzJFMDAwMDAzMzAwMDA5RAorOjEwNEExMDAwMDAzMzIwMDAwMDMzNDAwMDAwMzM2MDAwMDAzMzgwMDA4QQorOjEwNEEyMDAwMDAzM0EwMDAwMDMzQzAwMDAwMzNFMDAwMDAzNDAwMDA3OQorOjEwNEEzMDAwMDAzNDIwMDAwMDM0NDAwMDAwMzQ2MDAwMDAzNDgwMDA2NgorOjEwNEE0MDAwMDAzNEEwMDAwMDM0QzAwMDAwMzRFMDAwMDAzNTAwMDA1NQorOjEwNEE1MDAwMDAzNTIwMDAwMDM1NDAwMDAwMzU2MDAwMDAzNTgwMDA0MgorOjEwNEE2MDAwMDAzNUEwMDAwMDM1QzAwMDAwMzVFMDAwMDAzNjAwMDAzMQorOjEwNEE3MDAwMDAzNjIwMDAwMDM2NDAwMDAwMzY2MDAwMDAzNjgwMDAxRQorOjEwNEE4MDAwMDAzNkEwMDAwMDM2QzAwMDAwMzZFMDAwMDAzNzAwMDAwRAorOjEwNEE5MDAwMDAzNzIwMDAwMDM3NDAwMDAwMzc2MDAwMDAzNzgwMDBGQQorOjEwNEFBMDAwMDAzN0EwMDAwMDM3QzAwMDAwMzdFMDAwMDAzODAwMDBFOQorOjEwNEFCMDAwMDAzODIwMDAwMDM4NDAwMDAwMzg2MDAwMDAzODgwMDBENgorOjEwNEFDMDAwMDAzOEEwMDAwMDM4QzAwMDAwMzhFMDAwMDAzOTAwMDBDNQorOjEwNEFEMDAwMDAzOTIwMDAwMDM5NDAwMDAwMzk2MDAwMDAzOTgwMDBCMgorOjEwNEFFMDAwMDAzOUEwMDAwMDM5QzAwMDAwMzlFMDAwMDAzQTAwMDBBMQorOjEwNEFGMDAwMDAzQTIwMDAwMDNBNDAwMDAwM0E2MDAwMDAzQTgwMDA4RQorOjEwNEIwMDAwMDAzQUEwMDAwMDNBQzAwMDAwM0FFMDAwMDAzQjAwMDA3QworOjEwNEIxMDAwMDAzQjIwMDAwMDNCNDAwMDAwM0I2MDAwMDAzQjgwMDA2OQorOjEwNEIyMDAwMDAzQkEwMDAwMDNCQzAwMDAwM0JFMDAwMDAzQzAwMDA1OAorOjEwNEIzMDAwMDAzQzIwMDAwMDNDNDAwMDAwM0M2MDAwMDAzQzgwMDA0NQorOjEwNEI0MDAwMDAzQ0EwMDAwMDNDQzAwMDAwM0NFMDAwMDAzRDAwMDAzNAorOjEwNEI1MDAwMDAzRDIwMDAwMDNENDAwMDAwM0Q2MDAwMDAzRDgwMDAyMQorOjEwNEI2MDAwMDAzREEwMDAwMDNEQzAwMDAwM0RFMDAwMDAzRTAwMDAxMAorOjEwNEI3MDAwMDAzRTIwMDAwMDNFNDAwMDAwM0U2MDAwMDAzRTgwMDBGRAorOjEwNEI4MDAwMDAzRUEwMDAwMDNFQzAwMDAwM0VFMDAwMDAzRjAwMDBFQworOjEwNEI5MDAwMDAzRjIwMDAwMDNGNDAwMDAwM0Y2MDAwMDAzRjgwMDBEOQorOjEwNEJBMDAwMDAzRkEwMDAwMDNGQzAwMDAwM0ZFMDAwMDAzRkUwMDFFOAorOjEwNEJCMDAwMDAwMDAwMDAwMDAwMDFGRjAwMDAwMjAwMDAwMDdGRjg3QworOjEwNEJDMDAwMDAwMDdGRjgwMDAwMDE2QTAwMDAxNTAwMDAwMDAwMDFFRAorOjEwNEJEMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBENworOjEwNEJFMDAwMDAwMDAwMDAxNDBBRkYwMDAwMDAwMDAxMDAwMDAwMDBBNworOjEwNEJGMDAwMDAyMDEwMDEwMDAwMDAwMDAxMDA4NjAwMDAwMDAxMDBGQworOjEwNEMwMDAwMDAwMDg2MDIwMDAwODYwNDAwMDA4NjA2MDAwMDg2MDg3OAorOjEwNEMxMDAwMDAwMDg2MEEwMDAwODYwQzAwMDA4NjBFMDAwMDg2MTA0OAorOjEwNEMyMDAwMDAwMDg2MTIwMDAwODYxNDAwMDA4NjE2MDAwMDg2MTgxOAorOjEwNEMzMDAwMDAwMDg2MUEwMDAwODYxQzAwMDA4NjFFMDAwMDg2MjBFOAorOjEwNEM0MDAwMDAwMDg2MjIwMDAwODYyNDAwMDA4NjI2MDAwMDg2MjhCOAorOjEwNEM1MDAwMDAwMDg2MkEwMDAwODYyQzAwMDA4NjJFMDAwMDg2MzA4OAorOjEwNEM2MDAwMDAwMDg2MzIwMDAwODYzNDAwMDA4NjM2MDAwMDg2Mzg1OAorOjEwNEM3MDAwMDAwMDg2M0EwMDAwODYzQzAwMDA4NjNFMDAwMDg2NDAyOAorOjEwNEM4MDAwMDAwMDg2NDIwMDAwODY0NDAwMDA4NjQ2MDAwMDg2NDhGOAorOjEwNEM5MDAwMDAwMDg2NEEwMDAwODY0QzAwMDA4NjRFMDAwMDg2NTBDOAorOjEwNENBMDAwMDAwMDg2NTIwMDAwODY1NDAwMDA4NjU2MDAwMDg2NTg5OAorOjEwNENCMDAwMDAwMDg2NUEwMDAwODY1QzAwMDA4NjVFMDAwMDg2NjA2OAorOjEwNENDMDAwMDAwMDg2NjIwMDAwODY2NDAwMDA4NjY2MDAwMDg2NjgzOAorOjEwNENEMDAwMDAwMDg2NkEwMDAwODY2QzAwMDA4NjZFMDAwMDg2NzAwOAorOjEwNENFMDAwMDAwMDg2NzIwMDAwODY3NDAwMDA4Njc2MDAwMDg2NzhEOAorOjEwNENGMDAwMDAwMDg2N0EwMDAwODY3QzAwMDA4NjdFMDAwMDg2ODBBOAorOjEwNEQwMDAwMDAwMDg2ODIwMDAwODY4NDAwMDA4Njg2MDAwMDg2ODg3NworOjEwNEQxMDAwMDAwMDg2OEEwMDAwODY4QzAwMDA4NjhFMDAwMDg2OTA0NworOjEwNEQyMDAwMDAwMDg2OTIwMDAwODY5NDAwMDA4Njk2MDAwMDg2OTgxNworOjEwNEQzMDAwMDAwMDg2OUEwMDAwODY5QzAwMDA4NjlFMDAwMDg2QTBFNworOjEwNEQ0MDAwMDAwMDg2QTIwMDAwODZBNDAwMDA4NkE2MDAwMDg2QThCNworOjEwNEQ1MDAwMDAwMDg2QUEwMDAwODZBQzAwMDA4NkFFMDAwMDg2QjA4NworOjEwNEQ2MDAwMDAwMDg2QjIwMDAwODZCNDAwMDA4NkI2MDAwMDg2Qjg1NworOjEwNEQ3MDAwMDAwMDg2QkEwMDAwODZCQzAwMDA4NkJFMDAwMDg2QzAyNworOjEwNEQ4MDAwMDAwMDg2QzIwMDAwODZDNDAwMDA4NkM2MDAwMDg2QzhGNworOjEwNEQ5MDAwMDAwMDg2Q0EwMDAwODZDQzAwMDA4NkNFMDAwMDg2RDBDNworOjEwNERBMDAwMDAwMDg2RDIwMDAwODZENDAwMDA4NkQ2MDAwMDg2RDg5NworOjEwNERCMDAwMDAwMDg2REEwMDAwODZEQzAwMDA4NkRFMDAwMDg2RTA2NworOjEwNERDMDAwMDAwMDg2RTIwMDAwODZFNDAwMDA4NkU2MDAwMDg2RTgzNworOjEwNEREMDAwMDAwMDg2RUEwMDAwODZFQzAwMDA4NkVFMDAwMDg2RjAwNworOjEwNERFMDAwMDAwMDg2RjIwMDAwODZGNDAwMDA4NkY2MDAwMDg2RjhENworOjEwNERGMDAwMDAwMDg2RkEwMDAwODZGQzAwMDA4NkZFMDAwMDg3MDBBNgorOjEwNEUwMDAwMDAwMDg3MDIwMDAwODcwNDAwMDA4NzA2MDAwMDg3MDg3MgorOjEwNEUxMDAwMDAwMDg3MEEwMDAwODcwQzAwMDA4NzBFMDAwMDg3MTA0MgorOjEwNEUyMDAwMDAwMDg3MTIwMDAwODcxNDAwMDA4NzE2MDAwMDg3MTgxMgorOjEwNEUzMDAwMDAwMDg3MUEwMDAwODcxQzAwMDA4NzFFMDAwMDg3MjBFMgorOjEwNEU0MDAwMDAwMDg3MjIwMDAwODcyNDAwMDA4NzI2MDAwMDg3MjhCMgorOjEwNEU1MDAwMDAwMDg3MkEwMDAwODcyQzAwMDA4NzJFMDAwMDg3MzA4MgorOjEwNEU2MDAwMDAwMDg3MzIwMDAwODczNDAwMDA4NzM2MDAwMDg3Mzg1MgorOjEwNEU3MDAwMDAwMDg3M0EwMDAwODczQzAwMDA4NzNFMDAwMDg3NDAyMgorOjEwNEU4MDAwMDAwMDg3NDIwMDAwODc0NDAwMDA4NzQ2MDAwMDg3NDhGMgorOjEwNEU5MDAwMDAwMDg3NEEwMDAwODc0QzAwMDA4NzRFMDAwMDg3NTBDMgorOjEwNEVBMDAwMDAwMDg3NTIwMDAwODc1NDAwMDA4NzU2MDAwMDg3NTg5MgorOjEwNEVCMDAwMDAwMDg3NUEwMDAwODc1QzAwMDA4NzVFMDAwMDg3NjA2MgorOjEwNEVDMDAwMDAwMDg3NjIwMDAwODc2NDAwMDA4NzY2MDAwMDg3NjgzMgorOjEwNEVEMDAwMDAwMDg3NkEwMDAwODc2QzAwMDA4NzZFMDAwMDg3NzAwMgorOjEwNEVFMDAwMDAwMDg3NzIwMDAwODc3NDAwMDA4Nzc2MDAwMDg3NzhEMgorOjEwNEVGMDAwMDAwMDg3N0EwMDAwODc3QzAwMDA4NzdFMDAwMDg3ODBBMgorOjEwNEYwMDAwMDAwMDg3ODIwMDAwODc4NDAwMDA4Nzg2MDAwMDg3ODg3MQorOjEwNEYxMDAwMDAwMDg3OEEwMDAwODc4QzAwMDA4NzhFMDAwMDg3OTA0MQorOjEwNEYyMDAwMDAwMDg3OTIwMDAwODc5NDAwMDA4Nzk2MDAwMDg3OTgxMQorOjEwNEYzMDAwMDAwMDg3OUEwMDAwODc5QzAwMDA4NzlFMDAwMDg3QTBFMQorOjEwNEY0MDAwMDAwMDg3QTIwMDAwODdBNDAwMDA4N0E2MDAwMDg3QThCMQorOjEwNEY1MDAwMDAwMDg3QUEwMDAwODdBQzAwMDA4N0FFMDAwMDg3QjA4MQorOjEwNEY2MDAwMDAwMDg3QjIwMDAwODdCNDAwMDA4N0I2MDAwMDg3Qjg1MQorOjEwNEY3MDAwMDAwMDg3QkEwMDAwODdCQzAwMDA4N0JFMDAwMDg3QzAyMQorOjEwNEY4MDAwMDAwMDg3QzIwMDAwODdDNDAwMDA4N0M2MDAwMDg3QzhGMQorOjEwNEY5MDAwMDAwMDg3Q0EwMDAwODdDQzAwMDA4N0NFMDAwMDg3RDBDMQorOjEwNEZBMDAwMDAwMDg3RDIwMDAwODdENDAwMDA4N0Q2MDAwMDg3RDg5MQorOjEwNEZCMDAwMDAwMDg3REEwMDAwODdEQzAwMDA4N0RFMDAwMDg3RTA2MQorOjEwNEZDMDAwMDAwMDg3RTIwMDAwODdFNDAwMDA4N0U2MDAwMDg3RTgzMQorOjEwNEZEMDAwMDAwMDg3RUEwMDAwODdFQzAwMDA4N0VFMDAwMDg3RjAwMQorOjEwNEZFMDAwMDAwMDg3RjIwMDAwODdGNDAwMDA4N0Y2MDAwMDg3RjhEMQorOjEwNEZGMDAwMDAwMDg3RkEwMDAwODdGQzAwMDA4N0ZFRkZGRkZGRkYyQworOjEwNTAwMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZCMAorOjEwNTAxMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDAwMDAwMDM5OQorOjEwNTAyMDAwMDBCRUJDMjAwMDAwMDAwMDAwMDAwMDA1MDAwMDAwMDNERQorOjEwNTAzMDAwMDBCRUJDMjAwMDAwMDAwMDAwMDAwMDA1MDAwMDIwMDBCMQorOjEwNTA0MDAwMDAwMDQwQzAwMDAwNjE4MDAwMDA4MjQwMDAwMEEzMDAxQQorOjEwNTA1MDAwMDAwMEMzQzAwMDAwRTQ4MDAwMDEwNTQwMDAwMTI2MDBGQworOjEwNTA2MDAwMDAwMTQ2QzAwMDAxNjc4MDAwMDE4ODQwMDAwMUE5MDBERQorOjEwNTA3MDAwMDAwMUM5QzAwMDAxRUE4MDAwMDIwQjQwMDAwMjJDMDBDMAorOjEwNTA4MDAwMDAwMjRDQzAwMDAyNkQ4MDAwMDI4RTQwMDAwMkFGMDBBMgorOjEwNTA5MDAwMDAwMkNGQzAwMDAyRjA4MDAwMDAxMTQwMDAwMDgwMDAzQworOjEwNTBBMDAwMDAwMTAzODAwMDAxODcwMDAwMDIwQTgwMDAwMjhFMDBEOAorOjEwNTBCMDAwMDAwMzExODAwMDAzOTUwMDAwMDQxODgwMDAwNDlDMDA4OAorOjEwNTBDMDAwMDAwNTFGODAwMDA1QTMwMDAwMDYyNjgwMDAwNkFBMDAzOAorOjEwNTBEMDAwMDAwNzJEODAwMDA3QjEwMDAwMDgzNDgwMDAwOEI4MDBFOAorOjEwNTBFMDAwMDAwOTNCODAwMDA5QkYwMDAwMEE0MjgwMDAwQUM2MDA5OAorOjEwNTBGMDAwMDAwQjQ5ODAwMDBCQ0QwMDAwMEM1MDgwMDAwQ0Q0MDA0OAorOjEwNTEwMDAwMDAwRDU3ODAwMDAwNUIwMDAwMDA3RkY4MDAwMDdGRjg3MgorOjEwNTExMDAwMDAwMDAxNjYwMDAwMTUwMDAwMDBGRjAwMDAwMDAwMDAxNAorOjEwNTEyMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDAxOTAwMDAwMDAwMDA2NworOjEwNTEzMDAwMDAwMDAwMDBGRkZGRkZGRjAwMDA3RkY4MDAwMDdGRjg4NQorOjEwNTE0MDAwMDAwMDAzNjEwMDAwMTUwMDAwMDBGRjAwMEZGRkZGRkZEQgorOjEwNTE1MDAwMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDA0NgorOjEwNTE2MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYyOQorOjEwNTE3MDAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYxOQorOjEwNTE4MDAwMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAxNgorOjEwNTE5MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkZGOQorOjEwNTFBMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDBGNgorOjEwNTFCMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZEOQorOjEwNTFDMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkZDOQorOjEwNTFEMDAwMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBDNgorOjEwNTFFMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkZBOQorOjEwNTFGMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDBBNgorOjEwNTIwMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY4OAorOjEwNTIxMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkY3OAorOjEwNTIyMDAwMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA3NQorOjEwNTIzMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkY1OAorOjEwNTI0MDAwMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDA1NQorOjEwNTI1MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYzOAorOjEwNTI2MDAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYyOAorOjEwNTI3MDAwMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAyNQorOjEwNTI4MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwOAorOjEwNTI5MDAwMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwNQorOjEwNTJBMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZFOAorOjEwNTJCMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkZEOAorOjEwNTJDMDAwMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBENQorOjEwNTJEMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkZCOAorOjEwNTJFMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDBCNQorOjEwNTJGMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY5OAorOjEwNTMwMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkY4NworOjEwNTMxMDAwMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA4NAorOjEwNTMyMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkY2NworOjEwNTMzMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDA2NAorOjEwNTM0MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY0NworOjEwNTM1MDAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYzNworOjEwNTM2MDAwMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAzNAorOjEwNTM3MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYxNworOjEwNTM4MDAwMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAxNAorOjEwNTM5MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZGNworOjEwNTNBMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkZFNworOjEwNTNCMDAwMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBFNAorOjEwNTNDMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDAwMEZGMDAwMDAwRkZENAorOjEwNTNEMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBDRgorOjEwNTNFMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZDRAorOjEwNTNGMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZCRAorOjEwNTQwMDAwMDAwMDEwMDAwMDAwMjA4MDAwMDAzMTAwMDAwMDQxODBGQQorOjEwNTQxMDAwMDAwMDUyMDAwMDAwNjI4MDAwMDA3MzAwMDAwMDgzODBFMgorOjEwNTQyMDAwMDAwMDk0MDAwMDAwQTQ4MDAwMDBCNTAwMDAwMEM1ODBDQQorOjEwNTQzMDAwMDAwMEQ2MDAwMDAwRTY4MDAwMDBGNzAwMDAwMTA3ODBCMQorOjEwNTQ0MDAwMDAwMTE4MDAwMDAxMjg4MDAwMDEzOTAwMDAwMTQ5ODA5NgorOjEwNTQ1MDAwMDAwMTVBMDAwMDAxNkE4MDAwMDE3QjAwMDAwMThCODA3RQorOjEwNTQ2MDAwMDAwMTlDMDAwMDAxQUM4MDAwMDFCRDAwMDAwMUNEODA2NgorOjEwNTQ3MDAwMDAwMURFMDAwMDAxRUU4MDAwMDAwRjAwMDAwMDAwMDBDRgorOjEwNTQ4MDAwMDAwMDdGRjgwMDAwN0ZGODAwMDAwMjFEMDAwMDE1MDBGQQorOjEwNTQ5MDAwMTAwMDAwMDAwMDAwMjhBRDAwMDEwMDAxRkZGRkZGRkYyOQorOjEwNTRBMDAwRkZGRkZGRkYwMDA5MDIwNkNDQ0NDQ0MxNzA1ODEwM0NCNgorOjEwNTRCMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBFRQorOjEwNTRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQ0NDQzAyMDE0MAorOjEwNTREMDAwQ0NDQ0NDQ0NDQ0NDMDIwMUNDQ0NDQ0NDMDAwMDAwMDBEMQorOjEwNTRFMDAwRkZGRkZGRkYwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkZDNAorOjEwNTRGMDAwMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkZCMAorOjEwNTUwMDAwMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkY5RgorOjEwNTUxMDAwMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkY4RgorOjEwNTUyMDAwMDAwMDAwMDAwMDBFMDAwMDAxMTYwMEQ2MDAwMEZGRkY4MgorOjEwNTUzMDAwMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkY2RgorOjEwNTU0MDAwMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkY1RgorOjEwNTU1MDAwMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkY0RgorOjEwNTU2MDAwMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDA3MjAwMDBDQgorOjEwNTU3MDAwMDEyMzAwRjNGRkZGRkZGMzMxOEZGRkZGMEMzMEMzMEM1QgorOjEwNTU4MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0M1RgorOjEwNTU5MDAwQ0RDRENEQ0RGRkZGRkZGMTMwRUZGRkZGMEMzMEMzMENDMQorOjEwNTVBMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0MzRQorOjEwNTVCMDAwQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMEMyQworOjEwNTVDMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0MxRAorOjEwNTVEMDAwQ0RDRENEQ0RGRkZGRjQwNjFDQkZGRkZGMEMzMEMzMDVDMgorOjEwNTVFMDAwQzMwQzMwQzNDRjMwMDAxNEYzQ0YzQ0YzMDAwNENGM0NFNgorOjEwNTVGMDAwQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMEMwMAorOjEwNTYwMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0NENgorOjEwNTYxMDAwQ0RDRENEQ0RGRkZGRkZGQTMwMkZGRkZGMEMzMEMzMENGNworOjEwNTYyMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAxMENGM0NBRQorOjEwNTYzMDAwQ0RDRENEQ0RGRkZGRkZGNzMxRUZGRkZGMEMzMEMzMEMxOQorOjEwNTY0MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAyMENGM0M3RQorOjEwNTY1MDAwQ0RDRENEQ0RGRkZGRkZGNTMwMkZGRkZGMEMzMEMzMENCQworOjEwNTY2MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDA0MENGM0MzRQorOjEwNTY3MDAwQ0RDRENEQ0RGRkZGRkZGMzMxOEZGRkZGMEMzMEMzMEMzRAorOjEwNTY4MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0M1RQorOjEwNTY5MDAwQ0RDRENEQ0RGRkZGRkZGMTMxMEZGRkZGMEMzMEMzMEM5RgorOjEwNTZBMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0MzRAorOjEwNTZCMDAwQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMEMyQgorOjEwNTZDMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0MxQworOjEwNTZEMDAwQ0RDRENEQ0RGRkZGRjQwNjFDQkZGRkZGMEMzMEMzMDVDMQorOjEwNTZFMDAwQzMwQzMwQzNDRjMwMDAxNEYzQ0YzQ0YzMDAwNENGM0NFNQorOjEwNTZGMDAwQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMENGRgorOjEwNTcwMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0NENQorOjEwNTcxMDAwQ0RDRENEQ0RGRkZGRkZGQTMwMkZGRkZGMEMzMEMzMENGNgorOjEwNTcyMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAxMENGM0NBRAorOjEwNTczMDAwQ0RDRENEQ0RGRkZGRkZGNzMwRUZGRkZGMEMzMEMzMEMxOQorOjEwNTc0MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAyMENGM0M3RAorOjEwNTc1MDAwQ0RDRENEQ0RGRkZGRkZGNTMwNEZGRkZGMEMzMEMzMEM5QgorOjEwNTc2MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDA0MENGM0MzRAorOjEwNTc3MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENGMQorOjEwNTc4MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMENGM0M5MQorOjEwNTc5MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENEMQorOjEwNTdBMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMUNGM0M3MAorOjEwNTdCMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENCMQorOjEwNTdDMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMkNGM0M0RgorOjEwNTdEMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM5MQorOjEwNTdFMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwNENGM0MyRAorOjEwNTdGMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM3MQorOjEwNTgwMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwOENGM0MwOAorOjEwNTgxMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM1MAorOjEwNTgyMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAxMENGM0NFMAorOjEwNTgzMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEMzMAorOjEwNTg0MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAyMENGM0NCMAorOjEwNTg1MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEMxMAorOjEwNTg2MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0M3MAorOjEwNTg3MDAwQ0RDRENEQ0RGRkZGRkZGMzMyMEZGRkZGMEMzMEMzMENCQQorOjEwNTg4MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0M1QworOjEwNTg5MDAwQ0RDRENEQ0RGRkZGRkZGMTMxMEZGRkZGMEMzMEMzMEM5RAorOjEwNThBMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0MzQgorOjEwNThCMDAwQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMEMyOQorOjEwNThDMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0MxQQorOjEwNThEMDAwQ0RDRENEQ0RGRkZGRjQwNjFDQkZGRkZGMEMzMEMzMDVCRgorOjEwNThFMDAwQzMwQzMwQzNDRjMwMDAxNEYzQ0YzQ0YzMDAwNENGM0NFMworOjEwNThGMDAwQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMENGRAorOjEwNTkwMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0NEMworOjEwNTkxMDAwQ0RDRENEQ0RGRkZGRkY4QTA0MkZGRkZGMEMzMEMzMEM5MAorOjEwNTkyMDAwQzMwQzMwQzNDRjNDQzAwMEYzQ0YzQ0YzMDAxMENGM0NERQorOjEwNTkzMDAwQ0RDRENEQ0RGRkZGRkY5NzA1Q0ZGRkZGMEMzMEMzMENDMgorOjEwNTk0MDAwQzMwQzMwQzNDRjNDQzAwMEYzQ0YzQ0YzMDAyMENGM0NBRQorOjEwNTk1MDAwQ0RDRENEQ0RGRkZGRkZGNTMxMEZGRkZGMEMzMEMzMENEOAorOjEwNTk2MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDA0MENGM0MzQgorOjEwNTk3MDAwQ0RDRENEQ0RGRkZGRkZGMzMwMEZGRkZGMEMzMEMzMENCQgorOjEwNTk4MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0M1QgorOjEwNTk5MDAwQ0RDRENEQ0RGRkZGRkZGMTMwMEZGRkZGMEMzMEMzMEM5RAorOjEwNTlBMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0MzQQorOjEwNTlCMDAwQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMEMyOAorOjEwNTlDMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0MxOQorOjEwNTlEMDAwQ0RDRENEQ0RGRkZGRjQwNjFDQkZGRkZGMEMzMEMzMDVCRQorOjEwNTlFMDAwQzMwQzMwQzNDRjMwMDAxNEYzQ0YzQ0YzMDAwNENGM0NFMgorOjEwNTlGMDAwQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMENGQworOjEwNUEwMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0NEMgorOjEwNUExMDAwQ0RDRENEQ0RGRkZGRkZGQTMwMkZGRkZGMEMzMEMzMENGMworOjEwNUEyMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAxMENGM0NBQQorOjEwNUEzMDAwQ0RDRENEQ0RGRkZGRkY5NzA0MEZGRkZGMEMzMEMzMEM4MgorOjEwNUE0MDAwQzMwQzMwQzNDRjNDQzAwMEYzQ0YzQ0YzMDAyMENGM0NBRAorOjEwNUE1MDAwQ0RDRENEQ0RGRkZGRkZGNTMwMEZGRkZGMEMzMEMzMENEOAorOjEwNUE2MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDA0MENGM0MzQQorOjEwNUE3MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENFRQorOjEwNUE4MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMENGM0M4RQorOjEwNUE5MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDRQorOjEwNUFBMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMUNGM0M2RAorOjEwNUFCMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENBRQorOjEwNUFDMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMkNGM0M0QworOjEwNUFEMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM4RQorOjEwNUFFMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwNENGM0MyQQorOjEwNUFGMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM2RQorOjEwNUIwMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwOENGM0MwNQorOjEwNUIxMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM0RAorOjEwNUIyMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAxMENGM0NERAorOjEwNUIzMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEMyRAorOjEwNUI0MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAyMENGM0NBRAorOjEwNUI1MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEMwRAorOjEwNUI2MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0M2RAorOjEwNUI3MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENFRAorOjEwNUI4MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMENGM0M4RAorOjEwNUI5MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDRAorOjEwNUJBMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMUNGM0M2QworOjEwNUJCMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENBRAorOjEwNUJDMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMkNGM0M0QgorOjEwNUJEMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM4RAorOjEwNUJFMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwNENGM0MyOQorOjEwNUJGMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM2RAorOjEwNUMwMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwOENGM0MwNAorOjEwNUMxMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM0QworOjEwNUMyMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAxMENGM0NEQworOjEwNUMzMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEMyQworOjEwNUM0MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAyMENGM0NBQworOjEwNUM1MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEMwQworOjEwNUM2MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0M2QworOjEwNUM3MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENFQworOjEwNUM4MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMENGM0M4QworOjEwNUM5MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDQworOjEwNUNBMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMUNGM0M2QgorOjEwNUNCMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENBQworOjEwNUNDMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMkNGM0M0QQorOjEwNUNEMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM4QworOjEwNUNFMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwNENGM0MyOAorOjEwNUNGMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM2QworOjEwNUQwMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwOENGM0MwMworOjEwNUQxMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM0QgorOjEwNUQyMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAxMENGM0NEQgorOjEwNUQzMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEMyQgorOjEwNUQ0MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAyMENGM0NBQgorOjEwNUQ1MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEMwQgorOjEwNUQ2MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0M2QgorOjEwNUQ3MDAwQ0RDRENEQ0QwMDBDMDAwMDAwMDcwMEMwMDAwMjgxMzA2OQorOjEwNUQ4MDAwMDAwQjgxNTgwMDAyMDIxMDAwMDEwMjMwMDAwRjAyNDA5NworOjEwNUQ5MDAwMDAwMTAzMzAwMDBDMDAwMDAwMDgwMEMwMDAwMjgxNDAzOAorOjEwNURBMDAwMDAwQjgxNjgwMDAyMDIyMDAwMDEwMjQwMDAwNzAyNTAzRgorOjEwNURCMDAwMDAwMjAyQzAwMDEwMDAwMDAwMDgwMTAwMDAwMjgxODAwMworOjEwNURDMDAwMDAwQjgxQTgwMDAyMDI2MDAwMDE4MjgwMDAwRTgyOTgxMAorOjEwNUREMDAwMDAwODAzODAwMDAyODAwMDAwMEI4MDI4MDAwMjAwRTAyMQorOjEwNURFMDAwMDAwMTAxMDAwMDAwODExMDAwMDAwMTE4Q0NDQ0NDQ0NENworOjEwNURGMDAwQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDMDAwMDIwMDBGMworOjEwNUUwMDAwQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NEMgorOjEwNUUxMDAwMDAwMDIwMDBDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NEMgorOjEwNUUyMDAwQ0NDQ0NDQ0MwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAyMgorOjEwNUUzMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJGQjUxQ0ZDMEYwMDNENworOjEwNUU0MDAwOEFCQjU4MTkxODAyMzgxMDdDN0FFMEE1OEM5NEU5REZENworOjEwNUU1MDAwQzhDQ0MwQjAwMzg4QUYwMkYxN0U2NkQyRjVCMzRBMjM0NgorOjEwNUU2MDAwRDhGNzI0MTgxODE4MjQxOTE4NEU4OTMxMzBFQzkyNDRBOAorOjEwNUU3MDAwODhFNzAyRDUwODRBMzEzMERDODU4QTA1MDBEOTY3QTU1NAorOjEwNUU4MDAwRTgxQjRFQTM5ODM2RjhCQjNBMkFGRjkxMkE4NENFODdBNgorOjEwNUU5MDAwODlBM0M5M0Y4NkNBNkY1NDgwRDAzRkQ1QjE5QkJCMDk0NworOjEwNUVBMDAwMkEwRjAwRkU2OTRGNjc2MDAzMDAwMDAwMDAwMDAwMDAzOQorOjEwNUVCMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFRDdEMEI3ODU0RDUwRgorOjEwNUVDMDAwQjlFOERBQ0ZEOTMzOTk0Qzc2NDI0MjI2MTA3MDA3MDNFRAorOjEwNUVEMDAwMDQwRDMwMjA4RkE4NTQyN0UxRDFFMEU1RThGMDQ2MkVFQworOjEwNUVFMDAwQ0E4MEFGMDg5MjQ0OEQzNTZEMzkzNzNCNjQxMjAyMDI4NworOjEwNUVGMDAwOEVDQUExQjRBNTNBMjA3QUEyNDdEQkQ0NDY0QjdCRjVFMworOjEwNUYwMDAwREMyMDZBNzNEQUQzN0I5MTUyQTUyREI2NDEzRDI4MTY2OQorOjEwNUYxMDAwNjhGNDk0MDNCREQ3OTZCQkZFN0ZBRDNERDk3QjY3MjY2MQorOjEwNUYyMDAwMEY1RkRGMzk1RjFCM0VERDU5N0JBRkJERDZCRkZFRjc4QworOjEwNUYzMDAwRkFGRjdGRURBOEEyOTdBODk3MTA3MjExN0VBRTI1NjQ5NAorOjEwNUY0MDAwOUQ0MDA4QzlFQkJENUFGNzg5MTZBRDI2Qjk4NDU0MDVBMgorOjEwNUY1MDAwNTU2MzJCN0RCNjVFMEExQjhERDNFOEZENEJDNEQwMTM3MQorOjEwNUY2MDAwMDRFRThGOUI0MzI2MTFBMkMwN0IwNTg0NEM4NUZGNEQxOAorOjEwNUY3MDAwMjc0NENFNjkxRDFFRjVEMzdCRDJBQTJDQjg1QUUzNTkwQgorOjEwNUY4MDAwRDcyQTk5MTA3RDJBM0NERjM2MkVENUYzRTRGQzA5QTVFQgorOjEwNUY5MDAwQTc1QjIzRjg3MzcxMEMyMUY1Qzc2RjlDRkY4QUQ1QTYwOAorOjEwNUZBMDAwRkY4RDI0OTlCOTI3MkZBN0JGQ0MyNDMzMkY0QTg0N0M5NworOjEwNUZCMDAwNTRCODI4QUJEMzQ4M0ZERTA3MEQ1REJBM0M5NjkwRjM0QQorOjEwNUZDMDAwMEQyQkU2QkYzMkI2RUZGM0Y1MTJBOTZEMkZFRDdCRkY3NworOjEwNUZEMDAwMkFBMjIxNUU4ODY2QUE5MTg5QkRFQjVFNEY0OEE3Mjc1OQorOjEwNUZFMDAwODc5MENEODU5QkQ4N0E3MzI5QjJBRUE0RjdEQkZFNDVBNgorOjEwNUZGMDAwOTc0QjdBRTE1QzJGRDM3RTUzRkJBRTg3MTAxM0M3QjU2NgorOjEwNjAwMDAwQzY0OUJFOUZFODcyQkNFRjdFMkYzOTFFN0Y5RkM4RjQ0MQorOjEwNjAxMDAwREYwQzQyQjAwQjVERkY3NDIxN0EyRERDRjcxNDJFMzJCOQorOjEwNjAyMDAwNDdEMEY2RkE2N0NBNDlCNDM0M0RGQzQ5N0E3RDQyRjg1NAorOjEwNjAzMDAwQURGN0QyRDI5MUY3RkI2ODdGNTMwQkExRUY5RDU0RTNFQworOjEwNjA0MDAwRDc1RjQ1RjlFOEJERUY0QkExNERDMDQ3N0JDNkNGMjFENworOjEwNjA1MDAwMDE3QTlGMzAzRUIyRTg3NDZBN0ZEM0YwNTRGQzkxOEU4RgorOjEwNjA2MDAwNEU3RjRGQkNDODdGMTY3RjU1ODlBQkIyM0FDOTI3RTczMAorOjEwNjA3MDAwQUYzQjgwQkYzMjZDRkNENUJFQjhERkYxM0UyOTdGQzU5NworOjEwNjA4MDAwRENGQ0M1RjE3MUJBOURBRDlGRUMxRUM2RThDMkU5RTUyNgorOjEwNjA5MDAwQTY0RjVBQkE3Q0QyRjdGQUYyRDMxNkMwQUJBNzdEQjE5RAorOjEwNjBBMDAwMzk4MkE0RTAyNzBFQUY0NUFGNEYwQkVGNDA3QzQ0NDg0OAorOjEwNjBCMDAwMUNFOTRDNDg0NDgyRjk3QkVGQjM2QjQ2OTkyMTAwOUY2MQorOjEwNjBDMDAwRDFFNjYxNTg0NzkwNEQ0NTgyQjdCNkRDMkQ1MjM4MDM3MgorOjEwNjBEMDAwMjREMTNBQUU4OEI2QkJENzJDMDBCODAzQzdFNzlGMDJERAorOjEwNjBFMDAwNzk2ODBFNTU2OEIzRTk3QUY1NjlDNjQzRjNFODM1QTNENAorOjEwNjBGMDAwNTQxNzYwM0Q1Qjg5MDg0QTgwOEU1NzZEOTY5NzAyQkRBNAorOjEwNjEwMDAwMDhCNjlGMzY2RjA5OUI4MDA3MTIyNjY0MzgyMUY3RjE4NQorOjEwNjExMDAwMzUxMTIyMUEzMjZEQUJGMEVCOTg1NEVCNTA0OTI3QzM3RQorOjEwNjEyMDAwODc3MEQxRDNGN0ZENzRFQjU3N0JERjIzMTc4QkUwRkYyQworOjEwNjEzMDAwRjcxMDU4REY0MEVGOTEyODdCQ0ZBNEZGMDBERjM5QUU4NgorOjEwNjE0MDAwNzFGNDM5QjQ2REUzRkIwMEIxQjVFOUYzQTNGMDBCRTJGMAorOjEwNjE1MDAwRkJFRTJGNjRCRTZDQjI0RjMzQTg3RTUwNEI0NDNEMDEyMgorOjEwNjE2MDAwRkQ4OTkxMkREMzc2NDYyNTU1NDRGMDNDNDgwRTUyOEE0MAorOjEwNjE3MDAwMEM0ODk3NjY0MjJBREI4MTFGNDkzQjU5MzhCMTE3QkU0QworOjEwNjE4MDAwNTM0NEMwRjUxNERDQkU3MzREMEI1NTVERTdDQUZDMjFDQQorOjEwNjE5MDAwRTBGM0EwNEVDOEIwOUNCRUVCRDlENjQwMTk3OUJDQUQ5NworOjEwNjFBMDAwMUQ3QTBFRjkzRjQ2Rjk2ODBDN0RERjBDMzE3QkI4QjVERQorOjEwNjFCMDAwRTQ2NTNENkE5M0VGMEM0MUUwN0NFOUU2MEY2MkM4MzM4OQorOjEwNjFDMDAwNDBDQzgwNTVFOEI1NDQwQzdCMDM5RjlFM0Y2NDE3MUU2RQorOjEwNjFEMDAwMDdDQjFGRkVBODhEM0U2NEU4RjQwQTcyQkY2MUIwRkNENQorOjEwNjFFMDAwRjE2OUU3QjNFOERBNTdBRTFBMkRCQTZBODREMjYxNEI4NworOjEwNjFGMDAwRjFBMjk0RkU0NzdBQkFFRTIzRDAzRkEzODQ4NDEzMjlGOAorOjEwNjIwMDAwREUxQjI1MDg1QzBFNEM4N0JFQzEyQkE1OEY5NDI0RUZBNgorOjEwNjIxMDAwQkQwRTdBNDlGOTMzNTZFQ0VEMDcxRjUyQUUxMzFGRDY2NworOjEwNjIyMDAwQjhERTdBQzk3ODk3QUE0NDIyRUIyMjhDQTdDMjc4OTQ2OAorOjEwNjIzMDAwNEZCNzA0MUYzNjA5OTU4NzczQzBEQjE0MUY1MjdDNEE4MQorOjEwNjI0MDAwMjdCNDQ5MzE0MTNFQTQzRjlEMDI2RDdCODNFMUM0NTY5MgorOjEwNjI1MDAwRTQ4MzA0RDJDNTgyQ0Y2Mzg4MEVGQ0NBQjkzRTQ3OUI1MworOjEwNjI2MDAwQUMzMDA1M0JGQ0RFN0ExNUUxNTBEMTQ3QTBFM0U4NzQ4MQorOjEwNjI3MDAwNDA4QTBBRDk0RjNBODE2RjJEN0UwNTM2Qjg3ODI5QjQwNQorOjEwNjI4MDAwQkZFRUUwODM1NjYzMkE0OTQ1MDc4QjVGMDFBRDhDNUYwMworOjEwNjI5MDAwQkYzRTM4RkRFMjlFNkY4OTEzREU0MUJGRTc5NzhEOTNDNQorOjEwNjJBMDAwMzYzQjk0RkUzRDk5OUNCNEU4NDM5MTU4MDUwM0Q4RjhEOQorOjEwNjJCMDAwNjBCMzQyMEUwODkzMDk2OTJBNUM0NkEyRjRFRTY2Nzg0MAorOjEwNjJDMDAwNDRFRDU4MEI1QzBCQzAzRjlDOEE3QTgxQjQwOTMyQzAwNAorOjEwNjJEMDAwNjlEOTU1MTJDQ0MxN0VEMzA1MDNDNzEzQjU1QUQ0MkI0NworOjEwNjJFMDAwOTIzRkNDRUMyQjdGOUUxRTJFMzZGRjcwMjMxRUQ2MjlBQworOjEwNjJGMDAwN0VGMzQ5M0MyQzUyRkE1MDVEMTlFQTI0QTAzN0MzMDRCRQorOjEwNjMwMDAwRjg4MDg0MTg1RjQ4REM0RkI3REU4RjcxN0VGNjkyQTM2OQorOjEwNjMxMDAwRjgzRUQ1QUVBNjhFRjZDQzI5Qzc3MzI1RkE5MDhFQjM3QgorOjEwNjMyMDAwQTU4NDI0M0M0OEE3QjgwNjZEQjk0NDI2QjAyRkEwRkEyRQorOjEwNjMzMDAwQzk1RjQwRkI2NzU5RUMyRjJEMDgwMUZDNTlEQ0JFOTI2OAorOjEwNjM0MDAwNTk5Q0JGMDVBQUNGMjg5RUZERDM5Q0YyRUQ3M0M5QkYwRgorOjEwNjM1MDAwQ0NFRDcxMUY3RDk2NjYzRjYxNUREREZFREI2MzAyRjc2QworOjEwNjM2MDAwREYzMjg4MUZFOUNEREYyN0ZFRDRGRUFBRTVCNzU5NzhEMgorOjEwNjM3MDAwQ0QxMzA5RTI5M0ZDNTQ0OTNDNTFDNEQ3NDZEQkY3QkMyQQorOjEwNjM4MDAwOTU5RDgwNzU5QjE1OTEzNUNEMTQwRkU2REI0MkE4MDlDQworOjEwNjM5MDAwRTgyOTg3N0JCMkU4RjM5MzRGNEFCODVGQ0E1QjU2N0YyMAorOjEwNjNBMDAwMDlDQ0I3QkRDMTFDNUI2Q0YzMDdCN0NCQjUxQUUwOUIzQQorOjEwNjNCMDAwRjI4NTY2QjcxNzM3OTBFODBCODI2REZGRTUwOUI2OEM1QQorOjEwNjNDMDAwMkQxRTg2RkNGNzc2NzcwOTk4MEEwMUY5Q0ZFQjhGMDUyOQorOjEwNjNEMDAwNUYwNUI5RTRGNzkzRjhCMUI3QTVCRUVEREM3Q0MyRUQ3QgorOjEwNjNFMDAwRTUwREU1NjEzQTZGMkJFOEFFMTFGOEQ4MTQyODNDQUQwNQorOjEwNjNGMDAwMDVBQ0ZEOTNDNkUxRTU2MDNGNUIzMzU5RkJBM0M2Nzc2RgorOjEwNjQwMDAwQzI4REM4MTc1MTJENDJFRkQ1MTM4RTk3MkU4QTE3QTQyRgorOjEwNjQxMDAwQkY5MTZGQjdBRkVFQUI3QkZEM0I2NEREMDc3Q0I2RDdCQQorOjEwNjQyMDAwOUY3MzVEMDlEOENGMzIzMTA0NjhERjFCM0JBMkFGQjE0NworOjEwNjQzMDAwRTFFMzlCOUU4QTM3MDAxRjIzNDk0MjIwNDBCRjU4MkUyQworOjEwNjQ0MDAwQ0E4RkU1Q0YwMUUzNDFCQjgwQ0I1MzIxMzk4Q0ZENDY5OAorOjEwNjQ1MDAwNDc3QUNBMTVCOEI1NDI3RjE5QUUyREMxRTdCMjUxOUUzMQorOjEwNjQ2MDAwQzgxQ0ZEMjRDQUJGMjQ1Q0JDN0NGMEYyOUU2RUJEMDEzQQorOjEwNjQ3MDAwODE0NDUyRjlGM0Y3NEIzOTI4NTc4MTY5NzRERDBFQkQxOQorOjEwNjQ4MDAwNUVBODIzM0ZGMjcxQkYwNjM0MDJGRDkxNEQ2MTlBMEM2NAorOjEwNjQ5MDAwN0EyNEJFMjI5MjYyQkM5RjA4MjJGNkQzQzAxRTVDNDFDMQorOjEwNjRBMDAwRDE1MEI4QUNFQ0RGRTg3QTM1MkQzQ0U1NTUwQTk3Mjc5QQorOjEwNjRCMDAwRDcxRjMyMTE2QzY2MjcwQzJFMDM5RTc4QTMwNkY4MjU5MQorOjEwNjRDMDAwNDcyNTAyRjJBRjE1ODYyM0I3MDE5RjkyNDg1OEEwRjdERgorOjEwNjREMDAwQjU2MDM4QjRENUU4QkIzRTk1MzBGQjkwNDNBRjE3OTkxMworOjEwNjRFMDAwN0MxM0U4N0Y0RjlFOEVGRDA5RDgwQjZCNUQ2MzAwMkVGOQorOjEwNjRGMDAwMTVFMUZBMENFODlEMkI0RTFGOThDRTIzNDg3QjM5MThFNgorOjEwNjUwMDAwQjM3NEY0RkVBQ0U5OUNFRTdEMzc3RDAzMDI5M0FGRkJFMAorOjEwNjUxMDAwOUJDRTg3NEQyQTRGMkRDNzA1NTEwMkE1MTgyRjQ2QkE4RAorOjEwNjUyMDAwNjg5QzJFRTc5NUE4MDY3RUUzOTZBRjhBNjQxRjZEM0ZCMAorOjEwNjUzMDAwNUFERkJGOUYxMjAzM0ZDNTYzQjM5QjNBQTNERkM4QkJCQgorOjEwNjU0MDAwRjRBOUMwNDJFOURFREI3NTk3NTg5OTQ4QzE0Rjk1MjJGRQorOjEwNjU1MDAwRDNGQjVCRUU3QTM4M0UxNkU4Rjk4QTczQkZBN0FDMEEyNAorOjEwNjU2MDAwQTM1RjRBRjc3RDk1NDAwRkVCM0Q2RjMxQjM0RjY0M0YxQQorOjEwNjU3MDAwNUQwRkVEQUY3MDdGRTQ3Q0RFQTIyQzkyNjIxRUVCQkE2MQorOjEwNjU4MDAwQzcwNTdGMjFDNTczMkFCOUI5NEZFMkZFRDU0RTM2QkU4NQorOjEwNjU5MDAwRTVFRjlDMkZFODdGN0MwQjNGMTcyQTQ1NzJCODE0QzlBMgorOjEwNjVBMDAwRUEyM0E1N0MzMTE0RUY4NTQ5QkYzQjBGREIxRUZFMjg5MworOjEwNjVCMDAwNTEyQkZBMDhEOEJEQzJDRTcyQjgyQUE0QTcxMUY4NzQxQworOjEwNjVDMDAwOTc0OEFBNTJDMUI3NTYxMjExQkVDMjMwREQ3QTUwQkRFQgorOjEwNjVEMDAwNUY2ODhBQTA5OUM4QkQ5MjgxRjdGMzU3RDUxRTU0MjhFOQorOjEwNjVFMDAwNUQ1QTQ3OTExMDk4OTk0QjYwM0NEMEFCMDdCRDY4M0YwRQorOjEwNjVGMDAwRDU1QzkyRjA1MjNERkQ1QUQxNTc0Q0IwQ0I3QTIxMDk2RgorOjEwNjYwMDAwMDMyQzdBMkRFQzM5RTk3RkQ0QkUxQUY0QjlCMjMxNkE4MQorOjEwNjYxMDAwMjI1Q0MxMDhFRTExMEUxNTJENDM3QUI3NTBGRkNFQzM5MAorOjEwNjYyMDAwMTZFMkUwQTcxNjUzRUMwNEJFOEREM0YxQzExRjhDMUJGQworOjEwNjYzMDAwMTUyOEFGRTc4MkQ0RjJDM0NGQzcxNDdFNkJCRjcxMjk5MAorOjEwNjY0MDAwQzQ4NTI4MjkwMUNFMDkzMkMyNDk0NzYyRjRENDE5NUVCMworOjEwNjY1MDAwNDZFRTlFNDUzQUE5REQ2OUNEREU4NUYyNjA1RTQ5NTA4MQorOjEwNjY2MDAwNUU2NTcyRDgxNEMwQ0VDODA5NTNBNEYwQzZBQTk4M0U3RAorOjEwNjY3MDAwNTA3MkUzODJERDhFRUQyMUQxMDdFRDdDMjNFQjlERThBNgorOjEwNjY4MDAwRkZCNUZFNTk1QTkxMEFBRkQ1MjJEMzZGRjc3MTdENzhDNQorOjEwNjY5MDAwNUU2OTlGOEZGRTQ2MzM5NThGQTJCRUZEQzM5QzBFREZDMQorOjEwNjZBMDAwOEUyRDdBNzAzQ0VBMzM2Njk3QUNFNzVEODJFMTg4NjNCMQorOjEwNjZCMDAwOEVCQ0EwRTI3QURDN0VDRDNDRUVEN0I0MTQ1MkJGMDY4RAorOjEwNjZDMDAwRTU5RDJDMDAzRjI2ODNGMzQ3MEI2MDhGM0VGNzY0OTNENAorOjEwNjZEMDAwODQ0OUUxQzgwMDdGODZGQTI1QTQ5NEY5MjUxQUZEMDdBQworOjEwNjZFMDAwRkEyRjdGODVEMzlGRjFCOEZDOTY3NEZFQ0NENzg0Qzg2RgorOjEwNjZGMDAwMEY1MERGNTE1NTA1RjBFRjE2RTJGM0M3MDFCRTBCRTg2RQorOjEwNjcwMDAwN0VEMkU4QkJFRTJFQkU5RjlDMkI2RDJCNkFBMTcwM0QwNgorOjEwNjcxMDAwOTYyQjNBRjg2MTM0OTc5N0M3ODg3OUUyMjI3RDFFMkYyRAorOjEwNjcyMDAwMTQwRDgwM0I1RTJGRTIzQUNFMTlDQzZGMjdFRjdBMUQxNQorOjEwNjczMDAwNzZBMkQ5NUNBNDExOUJGRUQ5QzFFNTY5NUI4M0U2OTA4MgorOjEwNjc0MDAwNUJGN0Q1QUZDNkEzOTExNDdBNEJFN0Y0Qzk5ODE1QzY4OQorOjEwNjc1MDAwRjg4NzNGOTQ0MEZBQzMzQTUzRjlFOTBGOTQ1NjY4RkQxRAorOjEwNjc2MDAwRTkzRkI5NDQ1RDgzRjgyQkFDMzgyNUMzQjVDQ0JENUY5OAorOjEwNjc3MDAwNEEzREFFRkI0QUVDN0VBNjk0QkVERjYwQUY1QjI4OUUyRQorOjEwNjc4MDAwREU1NjFDRkU3OEE3MDRGQjJFOTNBMEZGRTcwRDUxNTNBNQorOjEwNjc5MDAwMTU4MEFCM0UxQ0UwRjc4NkE4QjhDMUI1QkJCQzEyRUVCNQorOjEwNjdBMDAwMUJCMzIyMUFDODkxNjU5RkJEQTFDODU2Qjg5RkY1MjU5NQorOjEwNjdCMDAwNzkwQkQwQ0I1QjJFOEExMkE1OUYyNjlCMjRDNzI2Mzc0OAorOjEwNjdDMDAwNTNFMUE2OERCRjMzQTlCQUI0RTM0MzhCN0VBNTEyRkM3NworOjEwNjdEMDAwNTQ1MjI4OTJCMTE0OEVDRDFGMzc2ODc2M0E3NUQxNkQxOAorOjEwNjdFMDAwMDhEQkI3M0FGOTI2NUVERkJGOUVGREI0N0NGMTczRDFCQQorOjEwNjdGMDAwOEE4NzM4RTk4NTNGRjY3ODA4QTc3MzkyRkU3REUyMUEwQQorOjEwNjgwMDAwRkYzOUU4QUQ3MUZBMTk5NDdFOUIwQ0EwMjdEMzE3NzQ1OQorOjEwNjgxMDAwRTM4NUZFNDM1QzMzQzNEMDhFMUI4NjY4REFGNEQ4QzdBOQorOjEwNjgyMDAwNjIwRUUyNDFCRTIwQTM1RURBQkRBNjI1MENGNEQyRTlEOQorOjEwNjgzMDAwMTg0MDVBN0EwREE3QjJEQjVEODI4QTcyNDVGNUM2NTVCQgorOjEwNjg0MDAwRDI3NDU0QzgwMkM0M0ZFNzRBMUI5MURFOEY1MTdBODM0OQorOjEwNjg1MDAwMUU3QjhDRDQ3NjVEQ0NFRDk1N0YyREFBQTIxRkRGRDU1MworOjEwNjg2MDAwNjg5NjM3MTYwRjQ1NkY1MkY4QTg1RjQ3RjYzMEZGRTU3OAorOjEwNjg3MDAwMTJDQjdGRjk3QkNBMjc4M0YwNTdDRTUzQTNDMUVEQjE2QQorOjEwNjg4MDAwMTdGODRBRUVBNjJDNERFMTJBRENDOEVDMjZGODZBMzk0NgorOjEwNjg5MDAwQjQ2RDUwQkJENzI5RjRGMkEzODdDRkEzOTQyNjBFOEZGMworOjEwNjhBMDAwNDc3QTNCRUREMzYzODUyRjBCMUVCMDZGQzVDQ0JFQTlENQorOjEwNjhCMDAwNjY2NzE4RjQ0Q0EwOThEQTI3ODJGNjY3MzVFMDY3NDREQgorOjEwNjhDMDAwNDlCQzFDREEyMzc3Q0ZDMzc1N0MxQkZDNTAzRkQ4MTcxQgorOjEwNjhEMDAwODJGOEY4QTY5ODY4MzQyOUNEN0NFMTQ4QTcyOEMxRkU0MworOjEwNjhFMDAwOTlFMEZFQ0VBMjlGN0I1RTZBRjU5MDlFQkU2QzcxMkZGMgorOjEwNjhGMDAwRDAyOTUwN0IxODk2NjlCNzdCRDU1MjVFQUYzRDFDNTFBRAorOjEwNjkwMDAwRDI4OUVBRDZFRDJGQTRGNTEzRkUyQ0YxRkREOENDQzYyMgorOjEwNjkxMDAwMzA2RDhGODI1RkE5M0ZCOTUzN0NCQzExRjY2MzExNEY3NAorOjEwNjkyMDAwQjgxRUU5RUVEQTQ3MjRFMzUwM0NERUJEQjZDQzEyMkFBRAorOjEwNjkzMDAwNjNGOTZGRTgzQzc3NzYyOTE0MDAwMjdFODA2NDhGMDM0OAorOjEwNjk0MDAwREQwOTc2ODlFQTlCQjVEQ0FFREQ0QTIyMDE3ODc4ODZERQorOjEwNjk1MDAwODgxODVGM0I0MzhFMDRBRUIwRjFFMTRFNDk2NUYzQjQ1NQorOjEwNjk2MDAwMkE2RjQzRkNERThBRUZERTE2Njc2RDRCRkZEQ0IxREI3RQorOjEwNjk3MDAwRDlCRTlEMkMxQTBFRjFEQkRCNzcyQUI4RkUzQjVERkJGRQorOjEwNjk4MDAwRDY5OEE0RTNCODc3OTBEQTE2QzA0M0IzNDJEMDRGNThGNAorOjEwNjk5MDAwQUIxMzE5RTJCMTFCN0VGODlEMTlCMDRGRjgzNkI3MkIzNworOjEwNjlBMDAwMUY1MEZFMzI2Q0ZBNjc5RDNGQTFDMjdFRjY5RDhFMkI3MgorOjEwNjlCMDAwOTY1RDRERTBGRDQ0Q0IwOEQ4OTc2NzkzOTQ3NkY0OTZBNgorOjEwNjlDMDAwNTYyNzdDMDNDMUVGODY5NzkwNERGREMyMjFCNzA5Mjk1OAorOjEwNjlEMDAwRTM4NzRGNDk4MjIzNkU1OEFGMDUyNjQxRDBFNEJDOTcyOAorOjEwNjlFMDAwNURDRDBBQTYzRkNDREY3QTEzNERFMDI3NEEwNkVGNUY2NAorOjEwNjlGMDAwM0I5OUU1Mzk2QTY3QzI3NUEwRjc3RUM2RkREMUExQkU5NQorOjEwNkEwMDAwNzczOENEN0IxQkI0NkUxNUY4QkY0NjM2MkIwNUIxMzdGMgorOjEwNkExMDAwNUVBNTI5QjVFMTkxMjBDNzA3Q0EzQjQ3MTI0N0JGRDZGQgorOjEwNkEyMDAwNDFGNkFCMTRGQkU5RTc4NkY3OTRBRTk5RTJFNEJFNzA1OQorOjEwNkEzMDAwREY0MEEyNkY4MURDOUQxN0EzRDUxODI3RTA3MDdCMDA5MworOjEwNkE0MDAwQ0YxMjVDNjVBNDI3QzY0RjhBNjA1RTdGQUI5MDA1NzE0QworOjEwNkE1MDAwOTQwRUY0NEZCQzg2RUNBMDc3OERBNTA3QTg1RTgyQjg5MworOjEwNkE2MDAwNEY0Njg5RjNCOTNCQUVEMjkzQTQ2QjI3Q0ExNzg2NDQyRAorOjEwNkE3MDAwRTk5MjAyOUFCRjUzMDI3RkIxNEMzRTlERUM0RkU3QUJDNworOjEwNkE4MDAwODY3NTREQzY0RUE4NUZFQUI4N0VBOTI2QzY4M0IzQTYxMgorOjEwNkE5MDAwQTE3QzYxQkNBRTZFRkUxODEzRTBBOENCMzM0MkE2MDEwOAorOjEwNkFBMDAwNkEzNDE0QzYzMTVDN0M1NTczNDEyMDA5REJGRUJCNDY1OQorOjEwNkFCMDAwRUU1MTQxOEU2QUE4RkVCNkRGQkYyN0M4RTJDOUU5RjRFRAorOjEwNkFDMDAwQjY0MjM0QzM1RjAyN0VBRDg4Nzg5Mjc0REFCNkFERkIwRAorOjEwNkFEMDAwQTNCODUwRDlDRUY2NTU1OTRCRkFEOTE3REYxMzY0RjE0NAorOjEwNkFFMDAwRTJCNTVCQzY2NkIxQjg4QjUzNUY5REU1RjZFMTI3Q0Y5MworOjEwNkFGMDAwM0NBRTc2ODM5RTc5RkFDNEY1QjBDRUY1RkY1MzIyMUFFOAorOjEwNkIwMDAwOURGN0VDMzM5OUE0MTNFRDQ2NDIwNUJCQjFBRTQzNEE2MQorOjEwNkIxMDAwNjkwRjA5Njk2MkY5RjNFRjY1MjJCREQ2M0RFNzQ5MkM5QgorOjEwNkIyMDAwQTBFRkFGN0JFMTlENDk4NEMyNzc3NjUzQ0Y2QjIzQzE0MQorOjEwNkIzMDAwOUY3RTVBNjA3MTcxQjM3QkQyNjI3QTdGOUQ0QzU2QTc1QgorOjEwNkI0MDAwOEFCMzRDOTBEOTNFRTRGNDhGMzI1NjgwRkMwQTZEMDcyQworOjEwNkI1MDAwNkZDNjcxREI5NzJCNjA1N0FEN0U4NkFDMjBCRkQyN0VBRgorOjEwNkI2MDAwNjhCN0NEQTc4NEM0NTgyMTE1N0MyQzFGNzFGQTI5ODFFMAorOjEwNkI3MDAwQzE3NzQwQzFGRERGQkFCNkJENkE5NEMyNTFEM0Y2MjFEOAorOjEwNkI4MDAwRUE4QkQ5REY3QjM2MDA3OEE4MzkyMDM5RkNCODlBMzZGMQorOjEwNkI5MDAwQTlEMzMzMDlBRjI3RTAwQTcxNTY2MTA2RjAwOUU3OTdEOAorOjEwNkJBMDAwOEUwRDE4NUZBRDZFN0ZFMDQzMjkwMEVGM0JGNTE2QzVGMworOjEwNkJCMDAwNEJBODEzRjBGQUE2MTQ1QTAwRUQxRkZDNjNDMEEwQTg1RQorOjEwNkJDMDAwRkFFMEYwMTMwMUMwMkIxRDc3OEQ5QTA1NzE3QzI3N0ZBOQorOjEwNkJEMDAwQzNGODE3NzJGQThFNDczOTFERjNCRDM1RUQ1QkQ4N0NDQgorOjEwNkJFMDAwMkVCREY4MDFGQzUyRDAzNzBFMUI5MTlENzk3NEQyMzYyMAorOjEwNkJGMDAwQjgzQ0VGRkE2N0NGM0Q2QUQyRjk0RTNGRjdGQjQ3NERGRAorOjEwNkMwMDAwMEFGNzVEN0ZGOUY3NDdCRjBFNzJGOUNGNUUxREY0N0E4MAorOjEwNkMxMDAwQ0REM0JGMEMxMDFCMUZBRTkzNTlGQ0UwRUMyOEJBODVGNgorOjEwNkMyMDAwQTJGRENFRkVDQTkzMDA4N0UwRUM0QkVGOEQzNkU4N0FFQQorOjEwNkMzMDAwQ0Y3RUZGNEZDMzBEREFCRkVFQTVCOUY5QjBGRUJBRTdCQworOjEwNkM0MDAwNjdFN0Y3RTdDNzAwOUYyNjNDNzZCODEyMzhCRTcxNDA2OQorOjEwNkM1MDAwNjBDRUMyOEJGQ0VBQTJDQkExOEU0M0EzMDFDRTMzQzc4OAorOjEwNkM2MDAwM0NCODNGQUJBMUY3RUFBNzAyOUQzNkEwOUQ4NUY2NDY0QQorOjEwNkM3MDAwOEFERkVBNjczNjdGMDhGQUExMkY5RUNEOTEyMjA2QkZGMAorOjEwNkM4MDAwQTgxQTBDMDI5RERGOTk4N0Y0MjIzRDY4MUZEREZENkI3OQorOjEwNkM5MDAwOEU1MjNBNEU0RTRGQjc3M0U0NjMxNUY0NUNDRDMzNUJCRQorOjEwNkNBMDAwRDg3QzJFQkE5RDgxNUZBRUVDNEJCN0NEMkVCQTlEMjMxQQorOjEwNkNCMDAwNzczRDU2MDA4OUQ3OEU2MThFM0M4Mjc1RUQ4RDlGNDc1QQorOjEwNkNDMDAwQjIyMkZERTgwNzRCRkUwN0MyMkJFNjU5Mjg1QzRCRTVENAorOjEwNkNEMDAwRjAzNzY0OTBBM0U3MzI5Mjc0NUQwMDc0N0RGNkRDNjg0RgorOjEwNkNFMDAwNDJGOUUyN0RBNUU3NjZCMDA3M0QyRjc5RjQ3REY0RkUxOQorOjEwNkNGMDAwQkE5N0RFNDRCOTNBRkJGQ0VCQUE4MTc2OENGODA1RUEzOAorOjEwNkQwMDAwNTc5RTI1Qzk5RkMzRTA2NzU2MzM5RjkzRDRFQ0NGRUNDMQorOjEwNkQxMDAwRjQwNDdBRTk1MzlENTg1ODY5MDRGMEZFMDlCQzlGNjA1OQorOjEwNkQyMDAwRkM1RTlEMzhCODQ0NDg0MUFGRDdFNTMxNENGRjI3RjJBRgorOjEwNkQzMDAwMTAyRjFCRjZGRjQ2MjU3RTI3MUQ4NTMyQTBFMzg5Nzk5QgorOjEwNkQ0MDAwNzAzRjFEMURBREY1RUJCMEZFOTkzNjdBRUU2NzcyRUEyNQorOjEwNkQ1MDAwRUU1RjRERTUxMUVDNUQ5MkFFMDlFMTREOTI0MjJFQ0YxMgorOjEwNkQ2MDAwRUVGNUM4NjBFRkNFODI1Rjk1MzI2RkNBRkM5OUExRTY1RQorOjEwNkQ3MDAwNTc3RTI2M0JFQkFGOTJGOTE1OEU4N0Y0RkNDMUU0N0I3RQorOjEwNkQ4MDAwQTBGNTBEMTU3RjNGOTIwRDFDRDc4REM3RDMxRkE3RDYzOQorOjEwNkQ5MDAwRjdFRjcxN0Q1MTREQ0NDQTExOTdGNkY1NDM2NDEyMzE2RQorOjEwNkRBMDAwNDcxNkY1QzI3QjFBMzZBODk0RkY0RTNGMkQ2MTNDQThDQQorOjEwNkRCMDAwQTVGRDEwRUE2REI3OUVBODRFMTNERkJDMjAzMzNGQTE5RQorOjEwNkRDMDAwRkFDMEMxNDlBMENGNEVCRkZDMjNFNENGRUE2NzRFQTg2QQorOjEwNkREMDAwMTAyRjdFQURFRDA3NkE3NzY5QUYzQzgwM0Q0OEQ4RUM1NworOjEwNkRFMDAwQzFFOUVGMUU5Q0M0RjQwMDFEM0YwNTlEMTQ4NThENUYxNQorOjEwNkRGMDAwRjNBMjczRkM5QTY3M0U3NDhDQkZERTZDNDdGRjYwQTAwMQorOjEwNkUwMDAwNzkzRTkwQzNDQjYxQkQxRjFDNTYwOEU4RDEwRkRBQTVBRgorOjEwNkUxMDAwQ0E1NDdFRUQwN0RDMUU1QTc4NkE3OTdEREU2RjIwMEYzQQorOjEwNkUyMDAwMzZFRDg4Q0YwMEJCRDlCMTI5OUNCRjFERkNCNTIzMEEyNAorOjEwNkUzMDAwMDFCRDRERTRGMEVGM0RCNERERjFCQUNGODBGQzc0Qzc4NQorOjEwNkU0MDAwOTE2NTkyNjFEQjg3RkVEMDg1Q0Y5OTQ3Q0REOTk5NzQ0MgorOjEwNkU1MDAwQkM5OUREOTE2OUUwQTJCQUY1NDZEOTcxQkFBRkIyRjEzOQorOjEwNkU2MDAwNDFEREVCOTVGOUEwRUY2MTFGNkE4Qzg3Rjk0MjQxRDhBQgorOjEwNkU3MDAwRTc0QTgxNzk5NTJDN0YyREVBREU5NEY2OUE4REE3Rjg2MgorOjEwNkU4MDAwMjMxOEFGNTI3NDMxMTkyMzgzNzE0NzkyNDQyM0M0NTc5NgorOjEwNkU5MDAwODlERkVGQ0U0RjQ0MzQ3QjFFNkFDNUUxODNCMEM1Q0M5OQorOjEwNkVBMDAwNURGQzYyMDE4QzEzMjAzMUZEMjRGQTlGMjQ3NEIxMUYxNAorOjEwNkVCMDAwRkZDQjlEOEZCMEYwOTk5NEJGMzRGOTg5MENGREU2RTBDQgorOjEwNkVDMDAwNDFEMjc3QkNCRTc5OThBODA2RjFFRDE2RkZEQUQ2MjIzQQorOjEwNkVEMDAwNUIxRUE2MjVEODI3MEYzMzU3QTE3ODY4MTU0OENBNzhCNgorOjEwNkVFMDAwRUQ3OEE1NjJCRTkyODdCQkUzNjhBQUU3MzcyOTRDQUU2RQorOjEwNkVGMDAwQUUyNURERjdBRTAxMzgyMzJDOUYzM0NCODVBRjJGNzE0NAorOjEwNkYwMDAwN0NGREYzNjRCQTcwQUE0MkNCQzFCM0EyRjg5REJEMjQ0NAorOjEwNkYxMDAwMUM1M0U4RkRCOUFCN0EyRTdGMTlCQkYzN0M4RTM5NUUyQQorOjEwNkYyMDAwQkM5ODMxNzhGQzBEMzU2RjE3RjEyQ0JBNUQxOTQ0REUzMQorOjEwNkYzMDAwMkU1REZFQjgxNzBFOTNFRkM3NzMxQzc5OEM0MzZGREQ3RgorOjEwNkY0MDAwQUY3NTYzOUVBMUI2QjVDODE2RjcxQkRFRTkyNTYxQ0MwNworOjEwNkY1MDAwRTMxOUU4MUYwRUVGQkNGMzlCQjc0MURDMzlCNzMwRTQwRgorOjEwNkY2MDAwMjU3REM3OTEyRjVDOEQ3MTIzMkI5RjJGMTc4NjNCMjE4OQorOjEwNkY3MDAwREUyRkVCNDZCOTg0RjMyQzBGNDM3RTYxQjNDMUYyMDVEQgorOjEwNkY4MDAwOUI4M0ZEQzdGNTY2MjhEMTY2MDVFMzUxRDdFMEI4QTIxQgorOjEwNkY5MDAwQzZFQjBGMDZCOUNFNkYyQzBFMjA5RTAzMTRDRjIwRUY0OAorOjEwNkZBMDAwQjhGRjgxRjUxRDE3NzhERUJDREI5NDIwN0Y3ODIyMUJBQgorOjEwNkZCMDAwRjMwNTAxOTk5NDQwM0NFMEJDRTAwQjZEQzI3QzgyMzM0OAorOjEwNkZDMDAwNkY5RThFN0ZCN0NCMjZFNkNENUI4RDNFNzlGM0VGMjhBMworOjEwNkZEMDAwQjY3QzgzOTYyNjZGQUVGOTk3NjBERTVDMjMzNjdGQjc2QQorOjEwNkZFMDAwQThCNzVGQUZEQ0I5RjJFNjMwMTZDNjY1QjZDRjg2Qjg5MworOjEwNkZGMDAwNEM3MzM2NzFFNENEOUI0MUYwQUYyMkU0MzlFNUVBRDkxOAorOjEwNzAwMDAwNTg3N0U2RTVDRkNENTlCM0MzRjYzNjM5RkUzMkI2NzlCNworOjEwNzAxMDAwRkNFOThGQ0RFNzM2NDFGRkRDOTFBNDE2RUJENEU0MDgwMAorOjEwNzAyMDAwNTk2QUQzODNFRjI5MkM0RUJCNDEwOUZGNTBCMUQ3MURCQworOjEwNzAzMDAwNzE3RUIwRjIzRjg3REU3QTBGRjkwQUFFNjMyODVFOUI1RAorOjEwNzA0MDAwMjk1Rjc5OTBBRjRFMTFCQjVFQjVBRTE2RkYzNDFCRkRDNAorOjEwNzA1MDAwRjM4NTdBNjEwQUM2Q0Q5MkVEQTA4OTdDMTEwODQ2QzNGQQorOjEwNzA2MDAwRTExNEVGNERGMjMwQjlCN0U2MEQ5NDUxM0Q0QUU1NERDQworOjEwNzA3MDAwMzEyMjk4OEY1Mjc1QkFFMTM1MDYwRjdGM0FCODJDM0UwRgorOjEwNzA4MDAwNkQzNkM2QjAzQTI4OUQ2MEZENUVGQTc1NEM2MzcxNEM1MgorOjEwNzA5MDAwODg3MDUxQjg3NkRENzg3QkE4M0YzRkM3NUFFNzBDMjU0QQorOjEwNzBBMDAwN0NEMjhFRjdEQzRCNTJEN0VGNTZBQjZDRERDRDkxNTVEMQorOjEwNzBCMDAwMkNCRjVFRTVDQ0E3NDJGQURBMUU2NzlEMkU0NEZGNUQyOQorOjEwNzBDMDAwQzEzODIxQ0JBNzhBNUE4NEU3NDc0QzJCM0UxRTRDQzZCOQorOjEwNzBEMDAwQzMwREE4MzNCQ0NCMDQ3REE4QUM2QTM3MDVCOEU2QjJCMworOjEwNzBFMDAwN0M0QUFFMTZGRDU4QjFEOTA3NTlFRjY2NzJFQkNBMEY0QworOjEwNzBGMDAwQ0U5NTRFMEYwOUJGNTY1RERDRDYwNjFERkRGNDJEMEQ1NQorOjEwNzEwMDAwNDE2QzZGNkUzMEYwREFEMjEwQzZGQjZFM0EzNjFCMkYzMAorOjEwNzExMDAwMDc2RkMxQkEzNDFGQzY2NUQzOERGRjYwNDMwOEM3ODlBNgorOjEwNzEyMDAwMzU5NEIxRjE3OERFOUM5MENDMjZFMDJCNTVCNEU0NjUyMworOjEwNzEzMDAwMThCNkZEMTI3RjZFMTYzNDgxRkM2RDE3RDhGMzZCNUFBQQorOjEwNzE0MDAwMkU0NTc5QjNGODY3ODdEMTdGNUM1QTRBQ0M0MDNFMTgwOAorOjEwNzE1MDAwRUFGODdERjlGNTI3QjhDRUU2NTk3RUQ0QUYwM0M5NTFEOAorOjEwNzE2MDAwNTYyNzlCNzdCMEYzMjg0OTdCQzFFNkQ5MzE0QkMzNzlDOQorOjEwNzE3MDAwNzZFNDBFMzA0RjlDQ0QzMzMwRkMwQzVGREIwRTlFQzJBQworOjEwNzE4MDAwM0EwNDg1RjIwM0E4Mjg0NTBGQTdBRUQzRTNGMkQ2NzdEOQorOjEwNzE5MDAwMUMwRkVBRjlFNjIwQUIwQjUzOEJGRDYxNTBGRUNEMDZDOAorOjEwNzFBMDAwQ0YzNzE2QjI3Q0EzNUEzMkJDMDJFRUFCQTFDQkIwNEVBNQorOjEwNzFCMDAwNUMyREY1NjMzRTRGMkQxRTdFMEJCNEI3MUREQ0EyNTczMAorOjEwNzFDMDAwODBGRDI4MTQ0MzVFMDNFQzc2Mzc5MTczNTE2QzMwN0U1QQorOjEwNzFEMDAwQUIxNjk3REMwNkZENzU5MDYzMEFDNzI4MEZEQjZGQTkxNQorOjEwNzFFMDAwQzU1N0REMDFFRjFGOUNGMjlBRDE0NEZCMzcxN0ZBNDJENQorOjEwNzFGMDAwMUU5MEI3NkVEOUMxRkY4M0Q2MTM4NUNFM0MxQTkxQTlENAorOjEwNzIwMDAwQkVBMEZBNkJEQjk0REI0QjUwM0UzNTVCOUQ2NDhBN0EwMworOjEwNzIxMDAwNDE5QkRFRDhBMERBRjQ4NjRBRTY5ODgwODc3NDdBODdBNAorOjEwNzIyMDAwREFERkZCRDRCQ0JFRTM1OEVGNkY1MDIyRjUyQUVBODVDMworOjEwNzIzMDAwMDg3MUQ2QkJBN0NFNjc1QkY0MDAzNzBCRjI5MTcyMzBCMgorOjEwNzI0MDAwNTlBN0I3QTA2MDc4NkY3RURCQUFEMzczRTdCNUUzRjRFNAorOjEwNzI1MDAwNUZBQUJDQjZCQkZFRkNCM0FBRDNEQkE5MjZFQkY0NDZGRgorOjEwNzI2MDAwNDE5RERFOEYxNTEyRUE4NEJDRkMyRkE1RDAzRUEzMkZEMgorOjEwNzI3MDAwREZCOUM3NzM5RkI3QTBGRThGMDZGQjlDNzQ3MkY5MzMwQQorOjEwNzI4MDAwRDU5OTNGMkQ4OEJBRTg3RUFCRDczMURGMkIyMDJGQTVDQgorOjEwNzI5MDAwMDNFQjk3OTE1NUNFNzE0NkQ1M0FFQjZBMkZBOUNGNzE4MgorOjEwNzJBMDAwQjQ4QkNDMTE4RUZFOTdCNjhFNzEzQzFGMUJCRkNDRjFGOAorOjEwNzJCMDAwN0NGQ0VFQTk4RUY2ODRDNDU1OEVGRTk3Qjc1NTM4REE1RAorOjEwNzJDMDAwMTNEQkFGNzNGNDlGN0M2MDkxQTMzREE1NzNBNUEzRkY2RgorOjEwNzJEMDAwMTU1RDZCMURDRkE3MUY1RUU3NzgzRUYzRDgzRDhFRjY5OAorOjEwNzJFMDAwOTVERDVGNzNGNEFGQTdFRTkwMEE3MjlCQ0JFQjkwNzNDMgorOjEwNzJGMDAwRjM0NTdCOUVCNjM1OEZEQTI1QkFDRkRGOTE0NzE5MDY2NQorOjEwNzMwMDAwRTNERkFDQUU0QjY1OEY5Mzc5NDNGNzdCQjJBMTg2NzUxMworOjEwNzMxMDAwQ0NGQjhGOUIwMzU3MjJEN0ExM0Q5NThERTExNTA2REU0RgorOjEwNzMyMDAwOUYzMTBGQUU2NDlBQjNCRTU2MzU1ODdEMzJFQ0UzOUM2NAorOjEwNzMzMDAwRjUwMkNFM0E2MzU1REE4Njc5M0FDRkYxMkY3NzA5OTM4MQorOjEwNzM0MDAwRkFEMjU1MkQ3NENBQzE2MEVCOTQxNUMzRjVERTEwRTU3MQorOjEwNzM1MDAwRTJCQzI1MTdBM0E4NUM2MEZDRUQ2MzA5Q0ZCNUNDQzlERQorOjEwNzM2MDAwNDRGRkMyQjY5RjQyM0M1QUZCQTk2QjM0MTIwMzE3RDNBOQorOjEwNzM3MDAwOTI4QkYyNTUzRDIzNUZDNTZFRDYzRUNBMjMwRUE1MkVENQorOjEwNzM4MDAwQ0U5MkJGODA0REVGQzM3RUM1RDIzM0NENjU4M0QzQUZFMAorOjEwNzM5MDAwNTJFMjBBODczRkU5QkUzNjA1RDZBNUQzOEYwNTFFOUI2QworOjEwNzNBMDAwN0ZFRkQ2OEYzMzk0NDgyMTNDRDdFNEIwNDk2Q0YxMUE3MworOjEwNzNCMDAwNTJBQjM4RTAxRTJDOUM5RkQ0MEVEQzQ1MTk4RUE0RDAxNQorOjEwNzNDMDAwRTMyQUE5QzVCQUFCOTYxNTYxMEMwMjkwM0FFMkUwRDM2NAorOjEwNzNEMDAwOUQ4QkZGNDcxOThDNEJGREMyMTlDRTc1MzJCRkQwRUQ4NgorOjEwNzNFMDAwNEY1M0ZEODZGRUY0MEVFQTRGQTNCRDczRTk0N0FBQTdFQgorOjEwNzNGMDAwNEM1RUZGNjUzMDNGODJFOTQzRjczQTNGMkYzRkZBREZBQgorOjEwNzQwMDAwQzA1OUVEODc1RTgxQTI1MDI1RUUwRkYzNDQwMkZCQzMwNQorOjEwNzQxMDAwRTY1OTkxMjBDNEU3QUNCQTc5RUJCRDU2Q0ZBNTM4NEVGQQorOjEwNzQyMDAwMkM1NzE1MjE3RTE5RUI5QThCRjFGQTI2MkRBQUIxM0MyNworOjEwNzQzMDAwNzExNEM3NjlDQTE2RjU1NDc1NjI3NTFFOTYyRkQ2RUE3RgorOjEwNzQ0MDAwMUYxOEJCQkY5RkI4OEJBNjkyNjhBQTc4REE0RTBGQ0JFNQorOjEwNzQ1MDAwMDdDNUY0QjU1RDYwNDczM0YzNTQwM0Y2RENBRDA3NEY2MQorOjEwNzQ2MDAwNDUyMDhFMjQ5N0M5M0FFQ0Q3MDkwNUU2MUQ1QjdFOEYyRgorOjEwNzQ3MDAwOTAyOEM2OTlCNEEwODg3NjU3QUJERjgxRjMwRjA0RUY0QworOjEwNzQ4MDAwQ0QxRTgxOUZGQkQ4RDIyRkJDNUUzNTc1REMyNTFEQkM3RgorOjEwNzQ5MDAwNUIwMERFNjkwM0MzRUIwNTc4OEI2MEZFNkQzODdGOEQ4MgorOjEwNzRBMDAwQzc0ODg5N0Y4NTg0MkI2NzAzREQ0RTdDMzk4MkU5NTY4NgorOjEwNzRCMDAwQ0EzNjIwMUYzQkNBRDhCRTlDMUEwMjA3N0Y1QkZCMUM0MgorOjEwNzRDMDAwQ0FERjBGN0JGMkIwN0UxNUY5REEzQUU3NzBBMzQ3QzczRgorOjEwNzREMDAwNzkyQ0JBOTJDMjFDOEM2QjA0QTJCMUIxQzU5NERGMzI3NAorOjEwNzRFMDAwQTM2QzNGREZBQjlGMTgxRjY1MkE2MTAyRjEyQ0Q5MkZENworOjEwNzRGMDAwNjI3RTUwRTVGMTEwQUJERjFGMzgzRTlCNjY3NTIzQkQwMQorOjEwNzUwMDAwMzY1RjI5OTM0RDQyNkY5RDc1QUM5MEFFNkI3MkVGQkFBQQorOjEwNzUxMDAwRkU4RjI3OUJGMTI3OUZENzQ3OTY2NDYxNUQ4QUY0NENDNQorOjEwNzUyMDAwQjAzRkJERURFM0Y4NzJFQkVGRUY3OUI4RkUyRTIwMDUyQQorOjEwNzUzMDAwNEM3Rjk3MkU4NzdDNzdCQTcxREM3RTRDM0Q4RkYzMEVBMworOjEwNzU0MDAwQkRCRTlFOUYyRkYwREZEMzA1NzEyNjJCQ0U0NzgyRDM4MQorOjEwNzU1MDAwNTJDNkU1N0JGMUNBRjI5NUJERjQ1RDZFNzQ1MkZBQzk2QworOjEwNzU2MDAwRDNBNzYyOUVEQzNBQUY0MEQ1OTlCMzVFOThEM0Q3QTIzOQorOjEwNzU3MDAwQUIxNTQ3Mjc0MTE2M0ZCMkU4RUM0REUyNzM0RkJGRjgxOQorOjEwNzU4MDAwRjQ4MkJDNUNEMTE3OUZCRkYyRjA3Q0MzN0YzMTdDQkUxQworOjEwNzU5MDAwMDIzRTBEQkQ2NjY2QjJGM0U5RTREMDU3MDlFNkE1MEFERQorOjEwNzVBMDAwOUQ3MjY4QkQ2N0YxQkI3QkZEN0ZGQTJGQ0E0RkQ2RkE4QgorOjEwNzVCMDAwMkQ3RTQ4REZERjRDQjlBRkIxRjJBQjk5OUNERjM0Mzg5OAorOjEwNzVDMDAwNjU0NTE1Q0ZBQjY1NkZCNzVFMEFGQkQ3QTAxRkY3N0Q4QQorOjEwNzVEMDAwOTk2NTMxM0NERkFCMTA1MzA3QkQ5MDY5RUQ2QkY4NzlDRAorOjEwNzVFMDAwMjNBQjVFQzk1N0VBRjRDQjM0RDdGRTQ1RTU3NTUxN0QzMAorOjEwNzVGMDAwQ0VEQjcyRkZDRDdEOEUyQTg5NUYxN0JEMjY2QjY5RjJDNworOjEwNzYwMDAwNjM4MzNDN0ZCNDhCRTdFQjBBRUFFMjhEQjAxRjJFQjhCMAorOjEwNzYxMDAwOTVENUZCRUY1MUM4NkFBOEFGMUM1MTY1OEFCRTVDQzhGRQorOjEwNzYyMDAwREYxNDdEM0Y4M0FFQkZFMEM1ODcxQTQ3MDI0OTZFMzU0MAorOjEwNzYzMDAwOEFDMENENzg0NjMzMUM3NkI4RTBBRTc4Qjk4RjNEOUZDRQorOjEwNzY0MDAwMDJFMzNDQTUzMUJENUI1MDE5Qzc3M0NFNERDRjhGQ0Y0MAorOjEwNzY1MDAwMDIzRkUxOTVCNzk2RUIxMDFGRjgyOEI3MThGNzRGNjc3MAorOjEwNzY2MDAwNUVGMDg0NDFGRjlGQzkyMTU1NTgxN0Y2QzJDQ0Q3QzBBMAorOjEwNzY3MDAwOEZGRjdENDM1NzhFNkNFMzkzMzNERjdEN0Q4NjQyODk5OAorOjEwNzY4MDAwNzRFNkI5RDc2N0M4NDhBQzg0NjNGRTBEMTc3RjMxMDMzMQorOjEwNzY5MDAwRTAzNjJCNDg0OTJERTRFRjc0OTVDMEI4MzUxQUNCOTdFNgorOjEwNzZBMDAwNTlGNTNFQkI4NkFCMkQ3MEZEQTkzNzlCQzUxM0YzQzVCRAorOjEwNzZCMDAwMUREMEFFODc4MDE4RjgwRDNDOUU3RkY1Njk2MzM5RDRFNAorOjEwNzZDMDAwNUY2Njc3MjkwMkQ0RTMzRDI0OThBNjlGNUVDRjlGNzgxQQorOjEwNzZEMDAwNDgwMDNGNEJFREFDODUzMDBCQkQxRjNBMDQyODM3QzczRgorOjEwNzZFMDAwQjI3REM5RjkyMjUyNTI0NEY1QkVFRjcwRUQ3OEY0QTc4RAorOjEwNzZGMDAwNURGNTRFMTZGRkNCQjMwOUU2RkI3QTZFRDQxMjYwQUY5MAorOjEwNzcwMDAwQjdDQkM2Mzc1NjgxRkQ1RTI1NjMzRENFNzZGOTMwQ0FDQworOjEwNzcxMDAwODU5QjhFQzdCRDYzOUNGNUI5M0MxRTdERThBRDNCRTIwMQorOjEwNzcyMDAwRTVGNEZEN0JBNjg4QzhBRkZFMTM1M0IyNDgwQUY5REQyNQorOjEwNzczMDAwREU1MDg2RjMwNzBBREVBRTJDMDdCMDNFQTY3NzY3RjQ2QworOjEwNzc0MDAwRUU5M0ZDMzIzMUIzQTg4OTU0OEE0NDUzQTE3OEYxOTc1RgorOjEwNzc1MDAwMTFGMkI2OERFRjVBNDQxMkQ2RTlGMzE3MUEwODhFRDNGOAorOjEwNzc2MDAwRDFBMEUxQjVBRDQxMUY1QjRDMzcwNkRGNkEwOEUyNzU3OQorOjEwNzc3MDAwNjc4MzgxRDc4NzFCNEFGMEY5ODMwRDIxODdEQ0MzN0M5RgorOjEwNzc4MDAwNkY5N0YwNzYwQTdGRTVGM0JBM0VEMDQwRTdCNUMxQjExNgorOjEwNzc5MDAwNkIyMjk1N0E0QUFGNUQzQzFGRjU0MEU5RDRBQ0I1RkQ0QworOjEwNzdBMDAwQzRDMUY2MzQ3NDBEOUIzMzk2MjMwQkVBNERFQkY0QkQ0NAorOjEwNzdCMDAwNUJGQjgxN0Y0RkEzQjA3QTExRjgzNTc3Q0I5MTdEQTgyMQorOjEwNzdDMDAwMUZBMzA1OEI2Q0ZBOTFGQTZEMDU4NEIyRTJCRDJEMjNERgorOjEwNzdEMDAwRTZDQzI5NDA3OTQ0Nzk5OTc2Mzg4QUZFNzg0MTMwMkU3MgorOjEwNzdFMDAwNDAxQ0IxRTAyOEJCNkY5REI3NDA3QTUxNDFGQjYxRUU3MAorOjEwNzdGMDAwMUM0MTAxQkQ1OTRBREEwMTJDQjUzNDRBMkE2OEZGOTk2NworOjEwNzgwMDAwNzk0QkNBRTEzRTk5RThCQzNGNDM2NUYyMERFMzU2RDA5RgorOjEwNzgxMDAwRUI2QzJERjIyMzZEM0E3Q0E3NjNCN0Y5MkM1RENGMUY3QgorOjEwNzgyMDAwM0IzQzA2RTQ3OTFFN0NGOTRGMkFFQzBCNjJCRjUyMzVEMworOjEwNzgzMDAwRjA2MzBBNUUzQzgxNzUwRjMxQTE1Qjg1Q0FEOEUzNUFCQgorOjEwNzg0MDAwRjUxQzk5RUExOURDMEM2MjdDOTUyQTE2Q0EyNzMxRDBGRQorOjEwNzg1MDAwQjExOEZGRUM4OUNERjFDMzc5OTdFODI5N0JGRjVEQkVCNAorOjEwNzg2MDAwRThEREZDRTQ0ODU4MEI1MjNFNEFFNjJGRDZDN0MyNzQwNgorOjEwNzg3MDAwRDNGOTAyQ0Y1RjFDRDdENkM1Q0M0MjY4RDNGRTUzNTg4QworOjEwNzg4MDAwM0I0NkRGN0YyMTNCM0E1MkNDODZBMjhCQUE1OEQ3OTc0MgorOjEwNzg5MDAwQTA2REY1QUY4QTQxQkRFRDlCNUNFRjEwN0ZCNDA4RTRBRAorOjEwNzhBMDAwMkREOUQ2NjkzQkQzRDY5NjU5OUI2OEVDNkFBRDc3QzM4MAorOjEwNzhCMDAwQTEzRkJEMDY3QUFFRkE0NUExMUQ0MEEzN0E4RkUxRkYzNAorOjEwNzhDMDAwQzA0MzU4NzdEQkQ2RDBBNUM3MTQ0RTdGOEIwRTU0MjQwNworOjEwNzhEMDAwMjcwNDA5RDZEM0E5MDkyMTMxODZFQThGMDlGQ0ZCMTRCNAorOjEwNzhFMDAwMDVEM0MyNDYyM0U4RDc4NDEyMDJCRDE5RjIzMUJGNzExNQorOjEwNzhGMDAwNDI4MjhFNjM5M0FCMDk2OUJFODM4Mjc5NUZBMEUzMzZDRgorOjEwNzkwMDAwNTYzN0VDRTZBRjY3QkQyQzNGNTA0RkNDQUQ5MDA3MjMwOAorOjEwNzkxMDAwQ0YyODNBRTYyMzc5OUNGMkI0NjVFN0Y4N0VGNTJFMkY1RQorOjEwNzkyMDAwNkIyQTlCNENERjY1QTA3RkQ2QzgxODA3NUI1RjE0MkZCRQorOjEwNzkzMDAwNTdFOTNDRUI3RjU0MTRBMjk2MTVGMjRBNThEN0IwM0U1MworOjEwNzk0MDAwQkI3REY4NTQ5Njk3NzJCNDFGRTI3NUI0QzE2QzMzMUJCQgorOjEwNzk1MDAwQ0UwRjU0MUY3ODY4MzRENDA1NTQ5M0Y4Q0Q1RjAzNzg2NAorOjEwNzk2MDAwRkY5NUU1MUY0RjFEQkMzMkVCNkFEQURFNDBEQjEwN0Y2RQorOjEwNzk3MDAwREREMEYxQkExQUE1RkQ4NjcxQjhBQjNCQTY1QzA3RUI2QQorOjEwNzk4MDAwQUJERTI2MTJCMTg4Qzk2Nzc4M0NDNTczMzg3RTk5NEM0NgorOjEwNzk5MDAwRjlFNDlBQUQyM0U3N0EyOTlEOUYxQTEzRDY0NUNBMDdDMQorOjEwNzlBMDAwMkI3REUzOUEzNTY4QUJGQTA0OTA5Qjk1QkU4OUNEQzBEOAorOjEwNzlCMDAwNTdFQjI3RjJFRjM1OTA4OUFGODY2NTVFMkY0NUY5NjI2OAorOjEwNzlDMDAwRDg5Njg2MThENDI3RUM1RjU5NzkxRDk4RDlFMTIyOTM2RgorOjEwNzlEMDAwNUJDQTg4OTgzRjk0QjI2Mzk4QjdGODQzMzMzQkVGMDI5MQorOjEwNzlFMDAwMjlGRDhEOTQwRUM1MzJFOTkyRTk3NTk3Q0FFODY3QjYwQworOjEwNzlGMDAwQzgxODJGQTZGNzVCOTVBOTQwOTc3ODE4Q0Y1N0I0MzJDRgorOjEwN0EwMDAwQkQzRkY2NDUwRkM2OUQ4QjZCQzM3N0EyNUZBMDk3RTI4MworOjEwN0ExMDAwM0U2NTM0NDlGRTYwNUVGQTEyRjg4RDhFMzM1RTI3RTVDRQorOjEwN0EyMDAwNzAwRUUxQzc1RTE2MkYyQzVFQjE2QzNEQkMyNzY1MkUzMworOjEwN0EzMDAwRjFFMUJFNUM2MkU3QTBDOEI3NTk5QzdBOTc5ODY4RDcxNQorOjEwN0E0MDAwNDBDRTAzQzU0OERGNUQwMUM2MTdFNkMzQTVDODE3RkJENgorOjEwN0E1MDAwQzU4QUNCRUU4NkI4QTRCMDY2RUJCRjAwNURCMzhCMDlEOAorOjEwN0E2MDAwRDAxNUVFREY0M0VGRUZFN0Y0OTRCMjQzM0FEMDZGM0YyNworOjEwN0E3MDAwQTc2NzJDMjE5QTUwMUY2M0REN0Y0MTU4N0IyN0M4REIwNQorOjEwN0E4MDAwM0FFRkYzNzMzNDhBRDdFMTlFNzA3QzE4QTVDMzlEREU2QworOjEwN0E5MDAwRTc2M0MxMDJBNEMzMTg4REUyRkRDRTJEMUQzMTZEMTQyNAorOjEwN0FBMDAwMURBNzMxM0M0MkI3QjVDN0ZGOTk3QTIzOTg5RkVDNDA5OAorOjEwN0FCMDAwNzk5NkIzMUY1RTA3RjI0RTlGQkZBMkQxNzUzRTk1QzM2NAorOjEwN0FDMDAwRjUwNTdGNUUzQzI2QTkzRkMyODREQTFBQTlCMTU3OUYwQgorOjEwN0FEMDAwNjhENDNFMTREQkZBQ0ZBMUZBRTBDOTQ3NTkxREZCRjU4MworOjEwN0FFMDAwNzQzRTkwNzdCQTBFQ0NGRkY2NEM5MDEzNTA5RkU1QTNFRQorOjEwN0FGMDAwQjA4MERGRTI5QjM4MDZFQkYzRThCQTA5RjgyNTNEMTNDNgorOjEwN0IwMDAwNjVCNEIzNTYxQ0RCMzM0MUM0RjgxMkY0MDc3RUYwOEQyNAorOjEwN0IxMDAwNjJGREE5QTA0NDQwNkZDQTg1MzJFRTU3NjU2OTRGNzg2RgorOjEwN0IyMDAwODIwMUUxNjM5NkQ3MTVGNDg1Nzg2RUQ1NUI2MkNCRTM2RAorOjEwN0IzMDAwOTJERTNBNjA2QzE3RTE2NzZFMUNFREIxOUVFRTAyOTEyOQorOjEwN0I0MDAwRkE5NUI5QzcxNzBBQTNFOTc4Nzc3OEI5QkY5RDRCRkRCNQorOjEwN0I1MDAwNkQ3QTdGQkQ5N0U5QTVGQjIzRTY5NzIxQzQ0MThDRUVBMgorOjEwN0I2MDAwMDJENDRGMjQzMjE1QUVGOTM3MTVFNzQ3RkJCMTRCN0RGMAorOjEwN0I3MDAwRkRFQTZFRjQxRjc2Rjg1MzlGRDM5Q0VFNjNGQkY5MjY2MworOjEwN0I4MDAwRkYxMTFERjhBRDlFNTBGOTA3QjlEMDE5QkY1OUZBQzNCRQorOjEwN0I5MDAwM0E5RkUwQUUyN0I2RjQ4OTkyQ0RENjU4MzdCRjIyMUY2MAorOjEwN0JBMDAwRjQ4MENDRUI5MzY0M0RBNDQzN0Q2NTc5RTYzNEY0RkIyQgorOjEwN0JCMDAwOUVGNDMyQkQyNzFEQkNGMjA2MzhBN0ExRkUyQkNCMEJDRAorOjEwN0JDMDAwRURGMTQ2MzE5RUQ0NTM0MERBODE1RkU1NjA5OEQ4RjNGOQorOjEwN0JEMDAwQkY5NjNFNjg2OUQwRjBGQUM0RDQ3MTE1MjAyNzRGNEM4NworOjEwN0JFMDAwMUQ1RUExNTMxOTM4MzRFOUM3NUQ5MDY3M0FCNzg3Qzk1QworOjEwN0JGMDAwRUZCOUMzQjdFMUY5Qzc3MzI2OEIzNzAxNUI2MTVDQjI5QworOjEwN0MwMDAwRjMxMTNDQUZGQkI4MUM3OTEwRUI2QUExM0U4MjgyQjQ0MQorOjEwN0MxMDAwMkREQjU5QkY1NUNDRjE2MjcyRkRENEFDQjBFNzlCMUI5NAorOjEwN0MyMDAwNThGQzU4QkQ3MDM5QzZCNTU0QUVDNzNERDE1QkYxRENDOAorOjEwN0MzMDAwODY4N0RBMzIzODVGQTkxMUQzNjRERjNCNjA3OEQwMEFENworOjEwN0M0MDAwOURERkMzNTAyRjRDQzJGNzREMkY4QjFGNTlGNTIyRUVFRAorOjEwN0M1MDAwQkExMDBCOUUxOTFDOUVCRUU3MzI5Q0Y0QjBGNjVGMTY1QworOjEwN0M2MDAwMURBQ0Y3RUI4NDcwQkVERTBGREZENDVDOTA0OEMyMTYwQgorOjEwN0M3MDAwRkZFOEFERUY1NkYxRkU1OUE4OEJDRjgyM0E5RTY4RkMyMworOjEwN0M4MDAwRUEyMjkwODMwNEVFOEZCQ0ZFM0E0MkY4Rjc5NTkwNEZCQgorOjEwN0M5MDAwODM3MjhGQkQwRTNEQzM1NTE3REY0NzVFMEM2N0RCNURGQQorOjEwN0NBMDAwMTdCMTFFOTg4M0Q3RjE2MTNEQUI0Q0JFMjk1MDdBOUYyNgorOjEwN0NCMDAwQzlGOEVEMENGMDZCNkJBODdBRDAyMDQwMjQ5QjNBQ0MyRAorOjEwN0NDMDAwN0Y5NkZCRkJGMjhCNzc4NzQ3MUEzNjNFMTcwQ0M3M0UzMQorOjEwN0NEMDAwQTFGQUMwNDI4QzIzRDRFQ0Y3NjNCRDdGMzVFOEJGQzk1RAorOjEwN0NFMDAwNzA2RUMwRUNGMjM4Q0UwQjg0M0JBMTNFNEYzOUMwQzY1QgorOjEwN0NGMDAwN0IxMkUwQTFGN0ZGQTg1NzE1QzBCQThGQzNGRTI3MEY2QworOjEwN0QwMDAwRUM0OTU0NjI4NzVFMEUyMzFFNjJERUYwMzFBMjMzN0RBMQorOjEwN0QxMDAwMjY1MzlFODg2NTVCRkFBQzNBMDYxQjg2NUQyQTcxRjg4RAorOjEwN0QyMDAwNEJCQjdDQkNFREFCOEVDNTRBN0JFQjNGOEU2QkZGMEYzNAorOjEwN0QzMDAwRjU5QjU1REY3MTVDRkIwRkY0ODc3NkE5RjE0RUQwNzc4OAorOjEwN0Q0MDAwRTYwQjFFMDNFQzE3N0QxRkNGRUY5QTJCNEJEMDBFQzQxMgorOjEwN0Q1MDAwOEFDODA4QzBDMzJCRDkyQUVBQjlEOEYzOUU3REEwRTcwOAorOjEwN0Q2MDAwNjY2QkQxMzczNURCQkVFMTRDRjYxQkEzNjFGRjk1NjIzNAorOjEwN0Q3MDAwM0NEMzMxREVBOEExOEQ0N0U3RUYwMEJDNUFDRjVGQzlFNQorOjEwN0Q4MDAwREU4NUU3MTZFOTdCMDZFNjBEMEIwRjhGNUU0M0RCQzM0RQorOjEwN0Q5MDAwNUZGMEUwQjkyMTZCQkZFOUU2Q0I3QzJFNUYyREFFRjMzRgorOjEwN0RBMDAwODAyQUM4OUIxRkY0NkQyRENBOTkyN0U4Q0M4MzU5NzI4RAorOjEwN0RCMDAwQTc1RTk4RTBDODA3M0MwOTc2OTZEMjRGOTVBMzEwQTIxQgorOjEwN0RDMDAwQTRDRjRCRjFCOUM5RjlBQzg1RDcyM0E0OUYyNzI3Q0QwMAorOjEwN0REMDAwM0M1N0EwM0NBNzlGNjcwNjk3NzdDMkU1NThENjkzREYyQworOjEwN0RFMDAwODVFOUU3RENBMDNCNEZFMkQ2NTNENkQ1RDI1M0RGRTI5QworOjEwN0RGMDAwRkMyOTkzRTgxNTNFM0FDRkJBNDRGQjNDMUZCRTFEOURCQgorOjEwN0UwMDAwMDQ3RUYwMDcxQTNCMDc1NUQyRjZEMENCNjA5RUJGRTkzRgorOjEwN0UxMDAwMDlERkVGOUQ4RUU3QkVGRUM5OUIzNzc0Nzk1OEU5MjNEMQorOjEwN0UyMDAwQkMyRUIzOEYxRTYyRkVENUFEQ0M1RkFEOUIzRjE1RkQ2MgorOjEwN0UzMDAwQkJCQUVENjM3NEZCMzk0NUY3QjVFQTQyODY0MzBGMEREMworOjEwN0U0MDAwRjMxQUZDN0I3QjI2RUFBM0FBMEIwMTdDRkVEOUNERTdDMworOjEwN0U1MDAwNzU5QzVGRTkzQjlGMUY5RjVCRjNEREU1RDJCMzg3MjZFRgorOjEwN0U2MDAwRkQ3NDE3OUM3M0FGRkJCRTIyN0E2Q0YzRDQ3RDlGRDc1MQorOjEwN0U3MDAwRkY3QkE5REU3NUNBN0IxOEU0NUQyRTIyQzlGQTJFRDBERAorOjEwN0U4MDAwMEZEQjU0QUIxRDZFOUUzMzBCRkM1QTlCN0UyODAzRkYwOQorOjEwN0U5MDAwQUJGNzdERjhDRUREMzYxRkVGNkY1NkE2RUU5RkUxRUExOQorOjEwN0VBMDAwM0ZDNjFBN0YyMUY2NzdDMzkzRDQzRkIwMUZBM0ZERTVFOQorOjEwN0VCMDAwM0Y3QjJDRjg1MDdGM0QyNEJBQzZDQkIxRTZCRjExQzczQgorOjEwN0VDMDAwQjNGQ0VFOEJEQURBNTc0RDE5RjgzNDVFMEVGQkE3OUU0MQorOjEwN0VEMDAwREI4ODAxREY5Rjc4NUMwRUY5NDI3NkJFRDUxOEJGNTY2RAorOjEwN0VFMDAwNURCOEQ0NDFFRjVFQkM4RjczREM3RkFGMjFFOEE4RDdDQgorOjEwN0VGMDAwQkQyMzVBODc3NURBMTc3OUZDQTk4QTdBRTZGOERFOUVERgorOjEwN0YwMDAwOTE4RTNBRERCRkMxRjE0OUUxQjgzQTBEMUNENzdDQzE3MQorOjEwN0YxMDAwNzAxNDM5RTRCMzE3OEU2MkM3RkQ0RjBBQzc0MjhERTk2QQorOjEwN0YyMDAwQUZFNUZDM0E1NzY3RTc2NkU3MUE0MkE4ODlERTlBNEI0NQorOjEwN0YzMDAwRUY3QjI5QUY3Rjk5NUUzNTdBOUQyQjEzRDM4RkRGNDU3OQorOjEwN0Y0MDAwNERCMEZFQjQwREZCRkIxQkZFN0NFRkJCRDc2MkEyMkEzQgorOjEwN0Y1MDAwRThBODJCOTA3ODlEQjc1QkVGQzAzOTZGNTZFRkE2MzkzNAorOjEwN0Y2MDAwQkUwRjY3NUQ3RDEyQUJENzc0REZGRkQwQzdGMEYyOEQxNworOjEwN0Y3MDAwQ0JBQjA5RjhEM0Q0NTc0Rjc5NkU2RDk3NUZFMERGRkIzOQorOjEwN0Y4MDAwMEM4QThFMzgzNzZGNUI3NUJFOUYxNTVDNzIwNjlCRUY0RgorOjEwN0Y5MDAwMUI5NzVGNEYyMEFFMkJFN0E2RkVCRURENDEzRjgzQkZBMAorOjEwN0ZBMDAwNDUwQjYzOUQ3ODRDRUZGRkJCMzQ5RjE0OUVFMTQ5NzhFRAorOjEwN0ZCMDAwQUU0MTNDNDk2OUYwNTQ2QkMxQTNCM0JDNjA0QkYwRjNENAorOjEwN0ZDMDAwODFBNzI0QzNBMjVCRkZGOEQ5Q0FFMTI2MTcyRTQxM0U0MAorOjEwN0ZEMDAwOTIzODlENUE2MEZGOTZBMkJGOTVGRjY4RDEzRTVGRjgyOAorOjEwN0ZFMDAwQzM4M0E0RUY3MzE5NUYwQzdEMTcwRDkyQkVDNTVDMEVBMQorOjEwN0ZGMDAwNUFGNENGMTc5RTVCMDcwOUNGNzUxNkJGMDVDMzQ4QUY2QworOjEwODAwMDAwQ0YwQjlFQUYwQzEyOUU2MzE2QkQ4Q0NGMTczRkFENDlCMAorOjEwODAxMDAwRkVFRjFGOUVCRjcwQjhGMzMzNTgxQ0E0QTU4NDlEMjdBNAorOjEwODAyMDAwRjE0OTkxMDc4Qjg0ODFFNUMyNTdFQ0RDNjc2Qjg1M0U5MworOjEwODAzMDAwNjc5RENEQkJDRUJBQUY3NEVCRkMzNTVGNjczQTc5NUExQQorOjEwODA0MDAwQTkyNEYyODA3RUM3MUE1ODNDRTAwREJFM0ZGOTc1NTU1MQorOjEwODA1MDAwNTMyNkM2RTc1REYzQjQwNEY3NjVGNjE3QjdGOUVGNTU5NQorOjEwODA2MDAwQ0U3M0I5MDNDOUYxQTQwQzk2RkZCOTMxRUE3QzZGRjk1QworOjEwODA3MDAwOEEwQzU3MUQ5OTg5RkQyQ0ZDQTUxQkVGQUYwNTZGNjE3QworOjEwODA4MDAwNDg2MjBFMDI2RjE0NUY1OTQ1RkRFQzFCM0U2QjdDQTVFOAorOjEwODA5MDAwOTNCQkExRTIyQkE2MEYwRDVGMDNDOUZCNTc4Njg4MkY2OAorOjEwODBBMDAwNEI1RUZGNUFGMTk1MEZGODlBRkUzN0ZFMUEyQ0JFMTY1QQorOjEwODBCMDAwRkQ0RDFFODc4NEFGNUI4NzJBOEZEQ0FGRkQ2QkM1RDc3NAorOjEwODBDMDAwNjBFNUQxQkQ2RkEzRkJCQjUwN0ZERjE3RjhBQ0YxRTdENAorOjEwODBEMDAwOUVGRkQzRTJEMTFBNkY2NTlBN0Q1RTNBN0MwRTA0ODdDQgorOjEwODBFMDAwNzVGREQwMzc0OEJDQkFGNzlGNUYzNDVFNURGMzdGNkE5OQorOjEwODBGMDAwQkNGMkYxODY4Q0Q3MDFFMEIwQUVGMjIwRTVEQkYyRUIwQQorOjEwODEwMDAwREFENEQ0REYxMTFEOTdDOUJFRTMzNjVFQTgzRDMyMUYxNQorOjEwODExMDAwRjJDNzdGMjc2MTdFRkFDODlFMzkxQkVDRjU0MEUzMzIzNworOjEwODEyMDAwOTlCRjdEQTQ3MkY2MDY4ODlGOUU4QjY0NjBFREQ5NTEzRAorOjEwODEzMDAwMzFGNEYzNjk5MDU3NUVDNERFNzM4RjdGODRFM0NCOTM5MQorOjEwODE0MDAwOTk2REM1N0ZGMzgwQUU0NzIzOEJGQjk1NDc1MjY5NUJFMgorOjEwODE1MDAwMTdFNjhENkNGNDk1RkFFMkZCMDgzMUI2NEY4MzNDQzQwOAorOjEwODE2MDAwODJENDcwNTg3NDRFMzdFRjUwRTk3QjM0RjJGODkwRjRCMworOjEwODE3MDAwQ0Y0MEVCRkQwRkZGOTg0MUVBOUYwNEY2Q0IyNUM5QkYyNgorOjEwODE4MDAwQkI3MzE5RTBCMzRENjRGNTcwQzdFMTU2MDE3Q0Q3OEQyMAorOjEwODE5MDAwNjBBN0U1MkJGMkY3MDI5REVFQ0U2NEY5QzMwRUQ1RDhBOQorOjEwODFBMDAwMDBGOTEzQ0ZFMjA1MEY2NDUyQkExRDVEOUEyREQ4Q0ZBNgorOjEwODFCMDAwNUZDRUM5NjRGQkFGMTlBQjUyRUZCQjE2NzIzRUU4N0REMAorOjEwODFDMDAwNUYyMEUzNTNGMDc3OThGNzVCQkE4QTdEN0Y4Q0M4RTEzNAorOjEwODFEMDAwNTE4QjZDRTc0RUQ3QkI5RUY3QTE0NzY2MDBFMTM4OUFGQQorOjEwODFFMDAwRTZEQ0ZGMDJGRUZFRjIyNUZEQkY0RjZBRDlGNzdEMjhDRgorOjEwODFGMDAwREY4REIyOUY3QjRERjIxOTk3OEYzM0ZFRThEMjRDN0ExOAorOjEwODIwMDAwN0Q0Mzg4N0VFNzNFRTBBMzA5N0U3NjZFNDgyNjQ1NTA5MgorOjEwODIxMDAwN0Y2NThEOTMyQjkzNEU5NUUyRkQ1REM1MTgwNTc5Q0Q1NQorOjEwODIyMDAwMTRFM0RDOUMzOTNERkQzOEU5RjA2QUFEQzc5QTA3NDQ5OAorOjEwODIzMDAwMTFCRUQzMzM1NzYzNzFDNDY5NjE0MjY2NDFGQ0QwMTNFOAorOjEwODI0MDAwQkE5QkU1MEYxOTFGRTRGMDNBQzQ5OUI1MTk4OTQ2RDhDRAorOjEwODI1MDAwRjdDQTc0OUQzNjc4M0JGRUVGRUNGRjA2Q0YzQjhFODg2NQorOjEwODI2MDAwM0E5RTZGNzdFMTYxMjBGREQwOTRDOUYyQzlCOTUyNzQ4QQorOjEwODI3MDAwOTMxN0YyMjZBQjg1OTRERkIxREI5OEM5RkVERUQxQTQ1QgorOjEwODI4MDAwQ0M2NEJEMTRDRTMzNkU2NzU0ODFFRjVGMkM5MzU5RkVERQorOjEwODI5MDAwOEI5MEU4QTg4NUI2RjkyNzcxN0U3M0JGOTcyQkIxN0FDQQorOjEwODJBMDAwMjNGMjI2OTNFN0I2N0RFQjQ2QTU5MjlGNUY3MDM5OUQzQQorOjEwODJCMDAwOTQ1OUUyQTg3MzVDMTJCOTVCMDFGOTVDQjI2MEExNjJFNworOjEwODJDMDAwRjhFMUI5ODFFMzJGRTU3MEI0QTlEMTUxNTNGQ0JENzgzMQorOjEwODJEMDAwNEFBQjg3Mzg3RTNBOEU0NTlCRTBCQjFGQUJFQjA1QUNDMworOjEwODJFMDAwMTMyOEREQzhGODZFRjVDNjgzRTIwNjdBRERDQkU1NkZBQworOjEwODJGMDAwMjFEMEMwMzZERTc3Mzk1RERCRjZGOTQ2MDNGQzZEQzk2NworOjEwODMwMDAwRkMwRDFEOThDMjcxRjM2RTgyRjk5MDI3Qjc5RjZFODFBNAorOjEwODMxMDAwN0M0OEI3NDA3OEZFRTRDNjRBQTg2QkU4RTZGNTZEMkZDNgorOjEwODMyMDAwRDNFNzhEODBCRjM5NzkyOERGRTMzNjdFNTgwN0ZBQjk2NQorOjEwODMzMDAwNDMyNTc4NUVFNjc3NUIzQzA5Mzg0RjYwRjE0QjUyNEYzRQorOjEwODM0MDAwNkMzQ0RGMDBGNUMzOEZBODlEMTM4MTZGRjI5QTZBRUYzMgorOjEwODM1MDAwNEI5NTNGN0Q4OUQzRTE4RkZFNDg1NjJBM0ZEMEJBNUFDQworOjEwODM2MDAwRkFEQ0VBQjc0ODM2OTQ1NEZEMTc1N0JBRUMxQTg3N0IwMworOjEwODM3MDAwOThBN0YzMEM0OTkxQzc0Q0YyNjFBMjdGM0ZFRDk3NUMzRgorOjEwODM4MDAwOEZGRkMyOTVFNzVENzIyQzc1OUNGMTU3OUM3RkRCMTJDNQorOjEwODM5MDAwMTVFQkQxNkU5OTFFM0M4NzYyQzE2M0UxMkJENzY0NzhERgorOjEwODNBMDAwNUFCNjQ0NzJFOERCRDUwQjMyNUM3RTBGQzNFQjBEMUU3MAorOjEwODNCMDAwRTM1MTU4QzcyM0ZCN0UzQTExQ0Y1MUI5RUM4MzRGOEE2MgorOjEwODNDMDAwQUFGMEZDMEVEMkE5ODA5RTc4NUYzMkYwRkE0NjgzRjNDMQorOjEwODNEMDAwRUZCQ0JDNDFBMkRCQTc4M0ZEQUM5NzUyQ0FENTFGMzlDNQorOjEwODNFMDAwRkZCQ0IxRTI5NkE1MDg3RjRDRDIwMUZFMTNBQjg2NURCRgorOjEwODNGMDAwNUYwNkZBNjU4NTEyODJFRkE2OUY4OEREOUI3OTlCNkRFQgorOjEwODQwMDAwRkQ0OUJGQzYwNUQ3QUZBQjZFRTlENzZFMkQ1RkUxQTRCRQorOjEwODQxMDAwNUI5QkNBRkMwMkYzM0EyNjg3Nzc1MjFFOUQ4NUZDRDVFQQorOjEwODQyMDAwQkQ3RDI2OURGRjQ4MjI2N0NBNTZENjlEQzBERjk5NUE1QQorOjEwODQzMDAwQ0M3RjdGNUY4Q0VFOTg0OUY1Q0QyOTkxRTU0OUNDQUY5MworOjEwODQ0MDAwMzBCREIxNjQ2N0E0MTk1MkE3QTdFQUFGNzhBOTlCRjYxQgorOjEwODQ1MDAwRjMwNjE4REZGREI2QkU3RkZCRThFNkE3NzEzQjlERkU4NQorOjEwODQ2MDAwREU4QzYzNDQ4NUY3QTM3NUE5RURDMUI3RjUwQ0ZFRjc2MworOjEwODQ3MDAwQzQ0MkEzNDFCRkRDQjQzMTc1QkZGRjA1Q0M0Q0UxMzkyOAorOjEwODQ4MDAwRjUxN0E5MkE1NTdDRjIyQTlEQzFCQjNBOTJGQUZEQUI5OQorOjEwODQ5MDAwRjQ0Q0Y2MUNFQzUyMEEzQzlGMEI2NDcwM0RBNzhGMDYwRgorOjEwODRBMDAwM0RCRDNBMERCQzFGMDYwMjA4RUYzQkNERjdERjA0NzU1QQorOjEwODRCMDAwMjBFRkJCQkUwM0ZGNEU4MEYxQzVDMTAwRTNFRjUzRkJDRAorOjEwODRDMDAwNTYyQTc5NDBBNzE2NDEwNzdFNzgzQjNCMzQwMUY4NkQ2OAorOjEwODREMDAwNERFQzA0OUU3NzM5QzBGMUZDQTYyRjMyMjUzMDFERTQwNworOjEwODRFMDAwNjVEMURDM0M0QTk3OEU1NTI0MjQxOEU5RjVGRjk1MDFBNworOjEwODRGMDAwRTYzN0U0RjI3ODJEQjU3RkVGODJGREEzQUZCRThCRkVBOQorOjEwODUwMDAwODcxQzFFN0RFMzQ0NTYwMjA1NzVFMEE3NDQ3MzFERDYwMworOjEwODUxMDAwMTlFRUYzQjFCQTUyMTI5QTZFRjdFM0JGQ0NFMTM4QjU1NworOjEwODUyMDAwN0Y2OEY0NUUxQTcxRjk0MTdERkNCRjc4MzVDRUJCM0ZBMAorOjEwODUzMDAwNDM4N0JBOTQyMzk1NTJFN0I1MTRDODkzRkIzM0YwRkJGNQorOjEwODU0MDAwQjg2RUI5NDgzN0ZGNTBGREMwNTNGQjg3RTYwNzBFQjQzRAorOjEwODU1MDAwRUUwRDgxQTI0MUY5ODFFNzJBMUZEOTMxMERFNDQ4OEQ0MgorOjEwODU2MDAwNEY0QUE1N0YyRDNEN0Q5NEM3REZEREZDNjM1REJGQ0EwQgorOjEwODU3MDAwRjlFOEZENDRGRjcwRERCMURCMDlDRjREQjU0RTc4MkMzNQorOjEwODU4MDAwNzk3OTNGRDFFNDVCMDM3ODIyOUQxM0VEN0UyOTk5MzNGRAorOjEwODU5MDAwN0QwMDNCQ0JGMjUzRTlFMERDRUVEMjEzQzA3OTQwODc5QgorOjEwODVBMDAwM0JCOUJFRjk2REZEMjMwMTNCMUREQ0VCM0YyNUYyRkQyMAorOjEwODVCMDAwQzFBM0FDMkU3NzZDNjQ0RDQ1OUVEMUNCOUZERkZBOUM1NgorOjEwODVDMDAwRjhEMkIyMzNFRTcxRkVCM0YzQTE2NUU3MDZFMkMzREM4NQorOjEwODVEMDAwMzQ3OTlDNDk3MEQwOTlCRUJGNDZENjU1QzhENzRGMEE0QQorOjEwODVFMDAwMThBQzRERjQ3OTcwNTQ4Qjk0RjFCQTUxNjI4Qzg2RjNDNworOjEwODVGMDAwNUZBN0Y2RjlGMEVGNDM5OTVCM0Q4OUIxNTQwNERFREZFNAorOjEwODYwMDAwNzdGNTA0RkI3QTdFQzVGOTc0RjU5MjZDRkNGQ0M0RkIyQgorOjEwODYxMDAwNjI2ODdFM0VENjlENDlGODFEQjczNzhFRTVDQzgzRjY1RAorOjEwODYyMDAwMjM4NzQ1RDBEMEU0QTZCQTM1MTJBQ0VGOEQwMERCNzdCNgorOjEwODYzMDAwQUVERUY4M0FGQTgzNDNFNUYzRDVCNTRFRkI3RjE1NUYxRQorOjEwODY0MDAwNDdEMkNGOTI3QkE2MDFGRkE0QzNDMzZCMUMwRjRCMjM2MQorOjEwODY1MDAwMEJFNzgyN0VCRTY1QTM4MEZBRjYyNzMwMEU1REM4MkQzQgorOjEwODY2MDAwNzIxOEY1MzY4OTMxRkI0ODM0OEEwRjZBNDI0RUMwMjJBRgorOjEwODY3MDAwMDAxRkZGQzBCRjVCMjU0NzU0RkIzOUI5REJCNkREM0ZBOAorOjEwODY4MDAwMTdGQzQzQjdCQ0FDQzg2MjdDNUM5MUM1RUNDMjlCQkUxNgorOjEwODY5MDAwRTgxRjQwREY1QkZBRjk2REExRjY2MDNFRURCMjMxQTA1NAorOjEwODZBMDAwNUJERjA5NDYzOUI1RDZCMzkxQzM0NUZEQjQ2N0YxRkIyRAorOjEwODZCMDAwQzU3QzdEQTRDN0M1NkY2MkJDRkFDNzgwRkYwQTBERkRFQgorOjEwODZDMDAwMDI5Rjg3RUE3REE4OEI3RURDODc3NTU0OTY1QzU5RkVGNQorOjEwODZEMDAwOEVGQkZENjU3MkQ0RTEzNzY2NjYxNTM5RkM3N0I3MUZFRQorOjEwODZFMDAwRjIzNzdCOTFCQUZGMTU1OTVGQUNCREI4MzZFQkIzQjEyOQorOjEwODZGMDAwMTdDMzM4OUZCOUVENDY1MkFFNUJEODc5OTAxM0M3M0U4OQorOjEwODcwMDAwOUE5QjRBQUUyMzlGMTAwRUI3M0NCRkJGQ0ZDN0JFOUJGQworOjEwODcxMDAwN0M0RDI2RUE5RERFRkQ1NDdFMDJGNkNCNkVCOTgwRkRDRgorOjEwODcyMDAwMTQ3Q0Y3RTM5MTdEM0Y5QjA4NzVCRDI3QjZERjdGNTMyRgorOjEwODczMDAwMkE3QUNFRDI5OURGNDRCQUYzMURGMUJDQjUwMTgyRjU5NQorOjEwODc0MDAwREY4NENFRjc4NDZEN0NFQkJEQTRCQzBDMTBCRjVDQjY5RgorOjEwODc1MDAwRjI0QURDNEZCRUIxRjJFQUQxNkI0QUZCRUUyQkZBRjRERgorOjEwODc2MDAwMTdBMkZGQjAxNEU2NkRFNEZCRTkxRDlFQUE3REE5RjZGMQorOjEwODc3MDAwODExQ0FGN0RFM0M0NEVGRjdFRTlDNkYyNjZEODUyNkYxRQorOjEwODc4MDAwQ0FCOEU2NEJEMTE0RjMyN0Y3MzUxQjUzQzdFMzFFRTRGMQorOjEwODc5MDAwN0EyQUI5QUYzMUU5QkU4NkUyQTM3Qjk1MTQyODlCRDYyRAorOjEwODdBMDAwQkJBRkU5MzYzRjlGN0RDREVGNDhDRkNGNjdBMkZDQTc5NworOjEwODdCMDAwODZFRjdCMTY3RkE5RDExRDU3NTJGODRFRDFGRDhGMDk0OAorOjEwODdDMDAwRjIyM0QyRjc4MDVGQkU5NTdBQkZGNjM4N0ZFRjc3MUIzMgorOjEwODdEMDAwODdBOEFGOEUzOUY3MzNFOUU0RUY3QjlGOTFGQ0I1QTkwOQorOjEwODdFMDAwM0RBMzQwMEZGQzZFRUZDNzZGREQwRkVCRDlFQjQzN0M3MQorOjEwODdGMDAwQkJDNzg5RTgxMkRGNUZGODkwNkYyREZCRENBMTMyRkQ2QgorOjEwODgwMDAwRkZCQkJGMUI4MTdGMzdEQjJEMUY4NEM0QUZCRjhBM0VGOAorOjEwODgxMDAwM0ZCRTRGOUMwMkRGNTk2Q0RCOTc1MTk1NkE5RkIzNUU1OAorOjEwODgyMDAwMTc3ODdDQzkxOUVGMjFEQ0JGNUJDQUY5NERERkY3NzRGQgorOjEwODgzMDAwQUQzRDFFRkQyNkQ3NTc1NjFDRTA3RjY3MzEzQkJCNjQxQworOjEwODg0MDAwQzE0MjE1RTIzREI3MjVFMzREMDQzNzJCRkE2NTg1N0IyMAorOjEwODg1MDAwRTFGQjE3QkZFNEU3QjlDQ0I1OTkyOUNGQzdGRDg2RTNBMworOjEwODg2MDAwNzdBMDM4QzQ4QTU1Q0UzOEMxOTIwNUZEREI5QjkzODkyOQorOjEwODg3MDAwRDQ3NTU5MTYzRkE3OUI2RkE4RjZBNTJEMzFCNEJDRDg2NworOjEwODg4MDAwNDBFQjFDQTEwRkNFQkUyQzI1QjU1RjgyNzhDNzMyMTJGQgorOjEwODg5MDAwNTJFMEJBODRENDRFRkMzMTQ1RTVDOUREOEIxMTlFNUZCMAorOjEwODhBMDAwNUE3RkZGRjhFMzdCMjdEQUZEOThGRjBGMTFGRTg1QTFDMQorOjEwODhCMDAwMDA4MDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDA4NgorOjEwODhDMDAwMDAwQkREN0QwQjc4NTQ0NTk2NzBEREJFRkQ0QUQyNDkyNAorOjEwODhEMDAwM0E5REVFQkMwOTFEMDIwODE4NjIwNzQyMDAxRkQwMjExNAorOjEwODhFMDAwNDQ4MkIyREE4MTAwNDE1MTlBODcxODQ5NDhBMkUyQ0EwQgorOjEwODhGMDAwRkVCQTQzODcyMDQ2NzQ2NkMyQUE4Q0JGRTNCODBEODJENQorOjEwODkwMDAwRUIyODZBQTJEMTQxOENEOEEwRjhEOEQ1OURBMEFFOEIxNworOjEwODkxMDAwQjNFODQ2Qzc0MTVFNDMyMkEzMkJCM0NCMENGRjM5QTc3NAorOjEwODkyMDAwQUFEMkY3REU3NDQzNzBDN0ZERjZGQkUzMzhEN0JBQjdCNworOjEwODkzMDAwOUVFNzdENEU5REFBQjYzOTE1QzYzQzhDN0Q1QjczRkJDOAorOjEwODk0MDAwNUY0RDYyOENGREFCQjU3OUJDRDNDMUQ4NTlGQzlCMUU4MQorOjEwODk1MDAwN0RGRUNCM0FDNjIyMTczMUY2RTEzQTNCOEJEOEEwMUNGQworOjEwODk2MDAwMzY1NTg1NjNENEZCNTNBQTg5MzFFOEU4NUZFMUMxNEFGMworOjEwODk3MDAwMTkwQjJENTBDMzNCOTRDMUY1QjI3MDVDQUNCNzc4NUU1NworOjEwODk4MDAwNkEzMDQ2M0ZGMkI5QTA0NjY1MTEzQkEzQkZCM0YwNkYxMgorOjEwODk5MDAwQ0Q5QzI0NURGOTIyQTc1M0Y0RDM5QTE4MkM2MkVDODg1RAorOjEwODlBMDAwMUNGNzUxM0VFRTkxMzA3RjJGRkJCQjQ4OEM3QjI0N0MyMworOjEwODlCMDAwRUU3MTZGN0UwNEM2MUQxMzFERTc4NjY2RkRCOEJEMkNFMworOjEwODlDMDAwQjQ4QUI5NjE5QzcwQTI3MzQ3MDFDM0ZGOENEODI2NDQ1NgorOjEwODlEMDAwREJFRjc1OUEwOEFFRUM0OEE2ODk2NTMwNzY4NzZDMUI4QworOjEwODlFMDAwNjdCQzBGMDU3QzhERjU2QkNDN0U4QjE2MUZCN0E3N0EwNQorOjEwODlGMDAwNjlGRUIyNUMzMzQ3M0Y0RjZGOEE5MzhGQ0I5Q0Y5ODFGRQorOjEwOEEwMDAwNjRDNjhFNkU0QkY0MTMzQ0E2MjU4NzQ3QzEzQzJCRUQwNAorOjEwOEExMDAwMkNFNDgwNzkzRUY4RTRDNTlGQjExMThDMkQxM0Y4QUY5QQorOjEwOEEyMDAwMDk3QzZENDE3ODFDMzVGNURGOTM4Q0VCRkFDMEU0RENGMgorOjEwOEEzMDAwMDE0Mzk1MURGNDVCQjRGMEJCMkI4NUMzRUZFOEY2NzNERgorOjEwOEE0MDAwQzNFRkFFMTQzRUNGNzk1NUZBRjlDRDNGOThBODJCMUI1MgorOjEwOEE1MDAwRDdGQkVGN0Y3QkVGMDRFQ0Y3REZGRkY2M0I4QkI2RkYzNgorOjEwOEE2MDAwMDVBNzczNTkyNDNENUE1RTUyQUJGOEMzNDU4M0M3N0RCMQorOjEwOEE3MDAwMjlENTNBMjRCOEJGNjQ4MEUzOTJEM0Y5RDRCRjVCNjVBQgorOjEwOEE4MDAwQ0QxRDMxRDY1NUVFQjQ1M0ZERjk4MTcyOEIwN0UwQjk5NworOjEwOEE5MDAwRkM2RUM1QTc0MDE3MzM5Q0JDOUZFNTY2RTZFRjgwRjlFNgorOjEwOEFBMDAwMzBCMzM3QkYxQUUwRUU2OTZEQkUyMzEwQTM5RkZGMjNEQQorOjEwOEFCMDAwRTBGRDhEMjM5MDFBOEJDRkU0RjM2MzQxMEZCMkRFMDIwOQorOjEwOEFDMDAwNzNEMDEyQUJGRUMyNUEzRDdDN0IxOUFCOEEzNUZGMUZCNworOjEwOEFEMDAwM0IzOTVGMEU5NTFFRTVGOEM2RkE0MzlEQzdERDgyMEU1MQorOjEwOEFFMDAwRDM2RDkxREYzMzE1NUU5QzgwN0VDQTJFNjA1QzQzN0QyMgorOjEwOEFGMDAwRTNCOEY3M0JGNUY4MzM4RTdGRjRDRjZBNUQyQzM4QkNEMgorOjEwOEIwMDAwMjZGODNGMTgwMEZBODlGOTNEOTlCRTdGQzBEQTFCNzczNQorOjEwOEIxMDAwMTM3RjI3Rjk3NjIwMThCNjJGRkYwOUEwOURBRDlDN0QwNQorOjEwOEIyMDAwQzc1QkYwOUEyNUE2MTREMEZBMTYwNzBFNTQxMkJCOUQwNworOjEwOEIzMDAwNzlCMDE4RjFGRTZERDU4MzNGMjk4NUE5MURCNTA2NUI3NworOjEwOEI0MDAwOTNBMUMxRDFGNThBMkZFNDFEM0NDRTA3Qjg0RTkwQTM2NgorOjEwOEI1MDAwMUZBMTNDQkQwOEZCNjM5QzZFNjdDMkZGNjUzMzM2NDZCMAorOjEwOEI2MDAwRjVEN0EzNTA2MTc3RDlCQzNCMzQ3Q0VCNUVGQkREM0E5MworOjEwOEI3MDAwNTZDQ0Q4NTNENkMwRkE2NDc4M0ZGQUVFQUZENzMwOTRDQgorOjEwOEI4MDAwNzkyQzRDRjNGRUMyRTJCQjg1RTBDRDE4RjFGREExNkQ1RQorOjEwOEI5MDAwOEVBRDlCQTA1RTZBMEE5NzkzOENGOUYyMDNFMzM1NzI1RgorOjEwOEJBMDAwQzJFQ0E0RjI1MEYxRjM2MTFDRkM1Q0E4OUM5MkVCOEMyQgorOjEwOEJCMDAwMzcwRTQwOUVFNjM3Nzc4NkEzNEQ0OTY1QUNDQkVBQkRCQworOjEwOEJDMDAwMDlEN0QzM0YzQkMxQjkwRDUwMzhEN0VBQkYxQUUxRjNGQgorOjEwOEJEMDAwQzEwMTkzQTlBNTgwQkEzNTIzOURDRUUzNDNCMDgyNkIzMgorOjEwOEJFMDAwMEFFRTFGNTc4QUYyQzdFMjRGODBBOTU0NDMxQjM2MTU3RAorOjEwOEJGMDAwRTg2ODg2MjM4NEZEOTU3RTM4RTcxOUM0Q0Y4M0I1MzZBRgorOjEwOEMwMDAwQUY4QUZENERGMzdFQUE0Mjc5RUU1NTM2RUY3QUU4QUY5MgorOjEwOEMxMDAwQUM2N0M0NUUzN0Y0M0Y3RjhFRTI2NEQwN0VFNkVDNTFGMQorOjEwOEMyMDAwOUU1RTU4NUZEMjVBRTgyNzA3NDdCOEI3QUFDMkNDRDg4OQorOjEwOEMzMDAwRDNGODlGOTczMjNFNjE4MEM1NUM0NTk2NUY2QzlCMDk3NworOjEwOEM0MDAwRjI2MDlDQTdDQkU0MDA1MEFGNEM3QkIxQ0QwRUZEREVCMworOjEwOEM1MDAwRDMxMkM4NzJBNkMxRDIzNkRGRDc2NjFGQzY1ODQ2ODY2MQorOjEwOEM2MDAwQkY2N0JBOEZCMUQ5OUJFRkFGQjI1RjAxRUI3QzU0QjQ1MQorOjEwOEM3MDAwMEYzREQwRTZDRjYzRUM1NTUzQjA0MDgxRUZDRDlCNzdFRAorOjEwOEM4MDAwNTQ5OTAxNUVFRTQyMzlGRTJCNkRGRUNCNjEzRDU3RERGRQorOjEwOEM5MDAwQjI2MzBERjRCRjI1RUQ5RkFBQ0MzOEVGQzU3MkZDOUVFMAorOjEwOENBMDAwQUE4QTkxMzBGRkNCNjVGOTVGRUMzODVGNzc5MjZDMEY0MQorOjEwOENCMDAwRjM5REMyOTg2NTQ0NzRGRUU2MkMxOERGMjVDQjlGNTRDMworOjEwOENDMDAwQ0Q4NEYxM0YyRTZGQUUzMEMzRjhDN0QyRkVCREFENjg4NAorOjEwOENEMDAwMkM2MzkzRTc5NDNCRkQ1MEVFREJGQzFGNTU0OTgwOUZDRQorOjEwOENFMDAwMkUwNjc0MEFFNTNGNkMzRTRERjM3N0FCMjZERTdGRTgzNworOjEwOENGMDAwOEYzNEJGQjJDNUExNzFGODVENjE3RjZBQUI4Mjc1QUY3OQorOjEwOEQwMDAwQjZGN0JFODVFNERBQjQzNjY0Q0Y0MDkxQTQ3MDNBQjFDOAorOjEwOEQxMDAwNUI5QUZEQjkwMDNCQ0JBRUYyNDgyRTREQTc5REQzNkJCRAorOjEwOEQyMDAwNUU2NDNDRUFCMTgxRjIxODI4OEZENzk0QjM3OEI5NkJBRQorOjEwOEQzMDAwM0Q1QjEyNEJERTc2QkFCODFFRUU0QThDRkRCRDIyOEQyRAorOjEwOEQ0MDAwQ0IwMzgwMUJFOTkzRDQ4M0NDQkYzMzg2NUUxOTk3RTZBRgorOjEwOEQ1MDAwQTA3RUY2MjdCMjkwREQxNUU1Qjc2QjgxODdBNzAwNUY4RgorOjEwOEQ2MDAwMzIzQjlGQTdFQzY3OTBGRTQ4RTM3MjlGODVBRTc1MjE2QQorOjEwOEQ3MDAwREZDQ0MxMkU2MEU5ODUzRTI1ODQ3NENEOUE5M0MyQTNEMQorOjEwOEQ4MDAwOTA3NjU4QzQzQzBGRjU4NzZBQTJGOTdBNTQ2NTQ5MzU0NAorOjEwOEQ5MDAwRjQ5NzkxQzg4MjlERjBGNEE0MzMyQTQzN0I3RkE3MjNFNAorOjEwOERBMDAwREFERjdCODJFRTJCMEIwM0RCQjFCRkNBQ0NFQzkyRDZCMQorOjEwOERCMDAwODI2ODNGMzBFRjBERjYwOUJBNzk5QkE3QjhGMEZCREM2QgorOjEwOERDMDAwOTI1QjhCMzRGMDJDRTJFQjAwM0FBMDc2MzBDQzMzRDNCQworOjEwOEREMDAwODEwRkJBN0FDNjhERDgwNEYzRkIwNkU1QUUyN0JBQUU4QQorOjEwOERFMDAwQjI5RUI5MTYwNkY1QjZCODg0M0NGMUYyRjY5RTBBMkU4QworOjEwOERGMDAwN0ZGQTZGNEQwQTZGNDNGRUI0RkI0QTEwNEZCMkREMEQ5MAorOjEwOEUwMDAwMDJFRTE1RjdDRUY5MTlENjZCRThCMTMwMUJENDVCRDM1RgorOjEwOEUxMDAwNTk5RUM5Q0VBMTE3MUI0RTVGQzZDMjEzMzU2NTczQzREOAorOjEwOEUyMDAwOEE3MkE3RTFGNDM0N0E1RjcxRUY3QjU2RTQ1M0VDQzdBMgorOjEwOEUzMDAwMEJFQjVBOTNFMENGRjQyMURDNUE2M0UzOUZCMTE2OUEwRgorOjEwOEU0MDAwNDdDM0U5MzQxNjlBQTg3RENGRTExNEVEREY0RERGQ0Y5QgorOjEwOEU1MDAwQjdBRTY4N0YyQTBCQTc5RkFCM0YyQjdEMUY4MEJCNTkwNgorOjEwOEU2MDAwQzBERDFBN0I5RTFCMDRGRDIwQkM0RDFBRkE5QTJGRTgyOAorOjEwOEU3MDAwMERBNDlGMUZFNUUxQTE2QjhBQjZBMUJDOEY4RUJCOUU5RQorOjEwOEU4MDAwRkFFRjMyMDMxRUQxMEVFQzQ5RjRBMjVENUM2NkU2RjIwNQorOjEwOEU5MDAwQjNBQ0M3RTUwQzI5NTFGQTkwNzQyMUYxREFFNTZBMkVEQQorOjEwOEVBMDAwQTdGNTU2MkJDRTZEMDU4M0U3NzVCRjlDOTdEMEE3OTk4NAorOjEwOEVCMDAwOEI4M0VBNTJDREZDMjQzRjQwRkY1REEyRkZEMjI5QzQ0MAorOjEwOEVDMDAwM0ZCRkUwRjQwMjdDNzMwM0YyMkZEQTJEQjgwRTVGNjQyQgorOjEwOEVEMDAwRkNEQ0U0QzFGMzNGMERFNDg1NEZDMDIzODdGRjVGMzkxRAorOjEwOEVFMDAwQzJBODA3MjREQzA2QzMzRkY3M0NGOENDQTdFRjY1M0REQQorOjEwOEVGMDAwRkJBQ0I4Q0U4NjM4N0NGQjgwMkI4NURBNjUxRThDQTQ1MworOjEwOEYwMDAwNzhBMURFMTk2MTc3NzQ3NTRDNENCODBDRjk2MjhFODlDMgorOjEwOEYxMDAwQTEwOEMzNzVBM0JENUEzNjIwNkZBRjdDNzcwNkM4REJBNgorOjEwOEYyMDAwQ0M4MTMyQzg1QjJGRTI2MTQwRkU0NkVDRjY2OEZEMUY0MworOjEwOEYzMDAwQjlBRTlDQkQwMUU0QjVEQjA2RjgyRjIyM0JENENFMzQ5QworOjEwOEY0MDAwRkVDNEVFMzQ2RUJGNEQwOUIyOTg3NkNCREZCOTkyNzU5MAorOjEwOEY1MDAwNzJFQ0ZGQUVBRDYwQkY4NUY1OTlEM0I4REU5RkQyMUIzMgorOjEwOEY2MDAwNTIxMDJGOTJBRjhENzJFQTEzQzE4RjFGOEJFN0ZGQkM5NworOjEwOEY3MDAwOUM1MkNFMjNBN0FBODU5Q0UyRUZGNzgzOTk4RkY1MzIwNgorOjEwOEY4MDAwMzIyMkUzMTVEMDg5Q0JERTlEMzgwQUZEOTlEQkIyNTQzRAorOjEwOEY5MDAwRUY5N0MwNTdGMzE0REZCMDY3QTFERjFBQkJGNzlFNjRFOQorOjEwOEZBMDAwNkY5NDRFNkE5OERERUI0MEI4ODNEMTc0MTZGNUZFOUM0MQorOjEwOEZCMDAwMDQyQUUzMUZEQTI1QTdEQTE1NEU4N0NDOUI1QTMzM0VFNQorOjEwOEZDMDAwQkUxQzkyRjNCODJEQ0I0QUUzMkRCQjZGNTQ2QTUwM0JDNQorOjEwOEZEMDAwM0ZBMTI3QUVCNTQ1OUU2NTg1ODNGOTVDOTY2MUZFQUJFMgorOjEwOEZFMDAwNERBQUU2QkI4M0VCQjNCMUM5RkU2RkQyRDAwRTU1NTg4NAorOjEwOEZGMDAwMkRDREM3NjAyRjM5MDRERjE5RURBNTg3QjE2RjBGRkRBNworOjEwOTAwMDAwMkY2MjIzM0UzNjkxNzM5QUQ5NjYwQjMzREUyNDg0N0UxOQorOjEwOTAxMDAwNkE2NjA3MTNGQzFBMzEzNTY4RThDMEVFQ0FBMzc5MkNEQQorOjEwOTAyMDAwNUUwODFGMkYwMUE2QjRCRjcxQzk5NzFBM0U3QTA3RTdFMQorOjEwOTAzMDAwNDM3QTIxMzIwOUY5MzRDMUM1NzQ3NkRFNjIzNTkwQTdDRQorOjEwOTA0MDAwQTBERDlBNjlGM0ExOUMwMTNDMTExQ0Y2MjczMDczMDI0NAorOjEwOTA1MDAwOENGQjM2M0MxMTZGOTVFQUFEN0IyRDZFQTQwM0M1RDcxMgorOjEwOTA2MDAwNEFEMERGMkFGQzU2MTY0MTdENzNFREY0MjRCMjVCRDk1OQorOjEwOTA3MDAwOTlEQjQ3NTYwMzNDM0M0OTlDNkVBMTFGQkJFOEM3NEU5OQorOjEwOTA4MDAwNzQyMkU0REVBRkYzQzc2RTQzRkQyNEU1QTdDNDAzM0JCRgorOjEwOTA5MDAwQTM1MjdGRjJGQjdFQTUzQUNGMDlFNUZEOUU4QjRBNUE4QgorOjEwOTBBMDAwMTVCREZEODNGNjUwRDQ3RTRBQkY2RjE2RjBFM0U0QUFFNworOjEwOTBCMDAwOEU4ODA5NThBODI1RTQ5OTdEMjdENEFGNENFMjZCMUUxMQorOjEwOTBDMDAwRTlFMjdBNzA3RjQxNDg0REMxRkU0NkMxM0FFMEQ1NUI4NgorOjEwOTBEMDAwODlDMUEyNjY0NzE0MUY2MEUzMDQxMTdGMTk1Njc4M0FDQworOjEwOTBFMDAwMzg3RkUwNzM5RjhCRjNEOTlDNzQ4RTk0MkRFOUJDOUNFMAorOjEwOTBGMDAwOTFDMkVCMUJFOUVENDlGMTdEOTVDMkYxQkJBOTlDQ0I3NworOjEwOTEwMDAwMDk2M0JERTkyRURFREY2QTdCQTgyQTYzODRENkJFMEEyNgorOjEwOTExMDAwMzBBNDQzMzNFMzc2OTZERjI1RThBNDgyQzNBQkUyREVENgorOjEwOTEyMDAwQzVBOUE4MzdCRkVEOTk5RkNBOEFBMjcyRjQxRTI1RTg4NworOjEwOTEzMDAwRjQ0MUZEN0IyQzgxOUY1MkJDRTM1RjU0ODZGRTg4MzU1MQorOjEwOTE0MDAwMkRFODc0NDFCREY0QTREOEZFRjI0RDYyMUVFOUU4NEY0QgorOjEwOTE1MDAwNDNCRDlGMDg3RkM3NzJGQTYyRjJCMzE3QkFCODNDNEI5RgorOjEwOTE2MDAwQzlBQTIxNzk4RTMwRjRBMjlGQzJGQTQzNEUwREZFNTI1NQorOjEwOTE3MDAwQTc5ODc0N0U4M0U1NzQzMUI1QkY3MEJCQTEyNDhFRERFMgorOjEwOTE4MDAwNTBBQUIzMUJFNEI4NDZGQkUxRDM3NTU5MzQ3RkQ5RkUyRQorOjEwOTE5MDAwODZBQzhGMkE5OUE2RkU4REFDRjcxRUVDRUZDNjM1QjlDQQorOjEwOTFBMDAwQkEzODUxM0NCQkUzMkUwMTFGQjQxMzQyMzFFNzY1RDVGOQorOjEwOTFCMDAwQkRGRjE0RkNDNDkwNzZGQzIzN0NGQ0U4Qjg0OUMwNjg3MQorOjEwOTFDMDAwRDE3MUZEMkVGRkREMkVFMkE3Q0I5RDg3MkY4NjQ3MDJCMgorOjEwOTFEMDAwQkM1NzQ5REY5MERDMDdCREU0REZFQTIwN0Q1NDg1RjIwRgorOjEwOTFFMDAwNUFGQTQ3QzhGN0NFNTRBNEYxRjIwREFFNDkxQUZEMjgzOQorOjEwOTFGMDAwREExOUU1RDA5RjQ1M0NFM0NGNEU2RUZGQTUxRTk0RjZFRAorOjEwOTIwMDAwNjJBMjU3NTFBMkZBNjZCMEJFMTI3QUM2MjAxN0NGNjc4MworOjEwOTIxMDAwNUYwM0JEODZCNEZBREZEOEVGNTNBRUVGNkI1NzE2QzZDNworOjEwOTIyMDAwQTE4RkQxRkYyMzc2NjVEOUU1NDE3NTNDQ0FDRDJBODU0QQorOjEwOTIzMDAwOEQ4MkM3RTQ5OTdBM0RERkVERTJGRTQ3QjcyQjQ5QTc1RgorOjEwOTI0MDAwRTdFNzJFRDZENzhCNjBCRDQ5Rjg0QzFBOTJCRkEyRDU1RQorOjEwOTI1MDAwNDM4QThBRjI4RUY3RDcyOEU4QTFFMEQ4MDc1NjJGQzhBQworOjEwOTI2MDAwREZGRjEyNzZEMDE3RTlGRUI3OTFBRTM2MjRBNjE0QTMxRAorOjEwOTI3MDAwN0VEOEZBQTc4QTMxNUI2MURFRkRFRjVCN0NEQkIwQkI5OQorOjEwOTI4MDAwNUQ5QzNFQ0ExN0FENjkzNUMzN0I0Qjg3RTJCNDMxOEQxNworOjEwOTI5MDAwREU1QURCNzlDOTBBNThFRjA3OTJGRUREN0MxRDBERUUyMAorOjEwOTJBMDAwODg3NTI0OEM5QkQzQzBDN0NGRUJEOEFCOTgzNUYyMkRGMworOjEwOTJCMDAwQUY4RUQ3M0JFNEIyRThGNDVFQUYyODdGMjZGRDBGMTZGMQorOjEwOTJDMDAwNkVBOTJDQzVGQTdFRjMyNjEwN0QzOTFEMEFDNTgzNzM1RAorOjEwOTJEMDAwOUEwMTAwNDAwNzM5M0VERUJGQzMxNzU2OTYxNzQ1RDc5RgorOjEwOTJFMDAwRDk2NkFBMkU0MkJERDA5NjkxRTQ0M0JEMzBENjFEM0MyRQorOjEwOTJGMDAwOENGNERGNzAyODEyNDEzMDREM0VENDYzNDZGQkFFQzI4MQorOjEwOTMwMDAwRURGRjBBREZDQjc1N0E1NTY3MEVDQUQ1QTQ0MzdDN0U4NAorOjEwOTMxMDAwRUQwNjdBMDcwQjU5RDBGOTM2MkU2RjU1RjYwRTQzN0NDMQorOjEwOTMyMDAwQTBFQzgwRjEzMkQ2OEYyMUJEMjRFQjY3Qjg4NDlFQzhCMworOjEwOTMzMDAwNjBDMTE3QzhBRTYyNkQ4Q0YwQzU2ODFEMTlFQjQ3OTMwQworOjEwOTM0MDAwN0QyRkYxMTlCNUEzQzY0RTQwM0JBQUYwODE4ODc5MTk0QgorOjEwOTM1MDAwQjREQkZENThFQ0Y4QkM0NUU4MTE1ODA3NEJGNzQ0RDc4RgorOjEwOTM2MDAwMTE4RjJGQTQxRTkzRjUyQzcxRkM2ODQ5RUY0OTU1QjE1QworOjEwOTM3MDAwRUQ1M0QwMDBGNEJEN0M5MUZCM0E1Qzc3QzMwNjJCQjM3MAorOjEwOTM4MDAwMjk1MUY4NTdCODAzRTkzODlGOUM4RUFEMEFDMjQ2RDJERQorOjEwOTM5MDAwRDcwNkQ3RDM0QTJFQUNFRkY2NUI5ODUzNjVGMUU3REJERgorOjEwOTNBMDAwQjBGNkM1NEI1NjY4RkMyREU4OUZGMEIxRDVDQUVBQjRCQgorOjEwOTNCMDAwRkE1NEZBMTMxN0E3NzNGRDczQTczQjMwMDJDNzZEREM4RAorOjEwOTNDMDAwQjVEOThBRjhCRDY1RkJFNzU2NkRCQzdCRDAzQTg2MDhGNworOjEwOTNEMDAwMkZBNThFRkIyOTBEQjVGNjMwQUVCMzdDOTE5OUYwNTdEMQorOjEwOTNFMDAwQkZDMTFBNDY3OUQ0QjBCMzMzNjI0MjdCRkE2RUU2NDMwQQorOjEwOTNGMDAwN0U2RkU4RTg3QzJCMDdFMDkyREJFMDlGQTQ3QUEzRkQ3OAorOjEwOTQwMDAwRTUzNjg0MTU5QzRGMDYxMDYxMEZGOTc5MTEyQkVBNjczOAorOjEwOTQxMDAwMjM1REEzM0Q4Qzc2Qzk1QjA5OUNERjRGOTQzQjQyMEFEOAorOjEwOTQyMDAwQzBFRjg0MjVEODgwRjU0RTY0MjdGOTQyMDU1MTc4QkZGNgorOjEwOTQzMDAwREQzOUVCMUQwNTU4M0FGOTA1NUIwNDlGNkRBNjZENTlBMgorOjEwOTQ0MDAwNzZBOEQ3MzZDRUVBNDMzQUFBNzAwNzY3QTUwMzdDNUNCNAorOjEwOTQ1MDAwRTY0MDE3QjY0RjczMjdGQjVBQTBBREQ3QzYyNjkwN0VCRAorOjEwOTQ2MDAwMUUyMjFDMjYxQkU4NjFGMkREOUM0RkZFMjYzRDQ1REFEQworOjEwOTQ3MDAwN0IxMzUwMEUyRDRENEY5NkY2MTJDOUE3QjcyQzdDMURBRAorOjEwOTQ4MDAwMUIxODlGRUYzRTk3N0YwMUQxQUJEMzQ1RTNFNjM0NDRGMQorOjEwOTQ5MDAwMTRCNEY3OERFMzQ2RTlDOUJGRjg0MkU4MUJFQzNDMkI1NgorOjEwOTRBMDAwQ0FGNTdBMjE2N0NBMTc2RDU3N0VBQkExODM3QTMwNjRGQgorOjEwOTRCMDAwOTA1RTcyNzY2RTU1RDAwRjg0RUYyRDk1NkVBQUNGNkNBQworOjEwOTRDMDAwMjg2Nzc2RjJGRDg4N0FGODdFOTM0NkFFQzg3NUM0OTAxOAorOjEwOTREMDAwMkZCNzIxN0MxRDg3N0FERUU0RjIyNTQyRjQyN0U3NkI2MworOjEwOTRFMDAwQzRFNzhGRDJCOTFENzcyNTk4MDVGNERFMUExQUUzODVGMworOjEwOTRGMDAwRkVERTFBOTE0OEZENDk3RTM3RjJFNzhGMDQ5REU3RDRERQorOjEwOTUwMDAwNkU1NzMwNkVFMDRFRTI3NkEzOUM5RkFDRjc0NUZBOEMyNgorOjEwOTUxMDAwRjUzODlGQzk1NTNEMDQ4N0Q1QjU2NkMyOUI5QzRGQTVCQworOjEwOTUyMDAwMzUzMDEyRkRBRjc2RDFERkJFODU5RjU5N0JBMUZDRDBDRgorOjEwOTUzMDAwQUYwRTEwM0RBRTZFNTdGQ0U0MTdCNDFGQjBDRUM3RjhBNworOjEwOTU0MDAwNUNFODk3MkFDNjYzQUZFNjI2MDlEQkYyRDIwMUQyMjM5NAorOjEwOTU1MDAwNTc3N0YxMzhDMUVBQUU0RUYzNzI0Nzk0NEUwQjhFRUQ1OQorOjEwOTU2MDAwQkIxMUU5NkM3NTg3OEQyNTI4ODgzRkJFNUUyMzlEODJERgorOjEwOTU3MDAwN0MyMUJBNjcyMTJCRUQ2NzgxN0MwQzkxM0M2NUMxMDI4RgorOjEwOTU4MDAwRjQ0N0E0RkNERDI3RUM0QkU2RTBFRjlGMTBGMzk2RkREQgorOjEwOTU5MDAwNDZFNTY2MDJEMTdCQzFCMTA5RkJFQzAwQ0ZENTNFQzVFMworOjEwOTVBMDAwMDdBNjEyRDhEQkJDMUVGNDFGMjFGOUNCRDgwOEY0Q0JEOAorOjEwOTVCMDAwNjRGRjQ2RjhGRDVBQzhENTE4Nzg3RTNFM0Q4NjFFOTE1OAorOjEwOTVDMDAwN0FCNUUwRjExOTBDOUYxMjdGNjYwMTc3RDlFRjlFNzQ4RQorOjEwOTVEMDAwQkU5RkI1MjdERDRDRkQ2RjI4RTdGMUVCMEQxNkFFM0ZDMgorOjEwOTVFMDAwMzZCNEQ4QzNDOEQ3NkZBNzVERjk4RTUyMEM3MDcyNTlDNAorOjEwOTVGMDAwMjNGOERDNkY1QUQ2ODBERkY3RTdGMDc5QjQ5OUQ2OEY3RAorOjEwOTYwMDAwNjlFNkZBRUJGNTc0QzI1RjBBRTNGMjg5Q0JBMzg3NUVFMQorOjEwOTYxMDAwRTRGMkE0MjFFNDIwM0ZCMTIxNThCMzgyRjYxRkRDMDkxMworOjEwOTYyMDAwM0VCNEY3NTlGMDRERUJGQ0U0MjgzRDE4RjFFQjdENjFCOQorOjEwOTYzMDAwQUZENTBCREZBRkVFRTA3QzEwODU1QjU4NDdCNzIwRTc3NgorOjEwOTY0MDAwMDhFRkZCNUM3MjNGMjI1ODgwNzAwNUZGQkQwNUUzMENGQworOjEwOTY1MDAwRDI3RjRGNTkxQzA4MjU3QjA3RjM2QkJBRjBERjI3MDkyRgorOjEwOTY2MDAwRkZERDMyQzVGRTE3RjVERkVCRDdGRTUzMzY5NjU3NjVBMworOjEwOTY3MDAwQkQ0QjRGQzkyRkUwMjdFQUY4RUE4NEYwREIwRTA4QkNBNworOjEwOTY4MDAwRkY0MUQwNEI3RDY5MDdGMTQzRkQ5N0NEQzQ0NzhFMkEzQQorOjEwOTY5MDAwMkU0RjFDODdGNDcyOTBCMTFGOEJGNTNGNDBGRDU0MjY2RQorOjEwOTZBMDAwNzU1Q0E5QTIzRkZDRjc4QUIzOTVDNTlGRjdDRDRBRjMzNQorOjEwOTZCMDAwM0Y0RjQ1QkM3NEFBQjQyRkM1Q0U4MDU1NUYwNjcwNEQ5MAorOjEwOTZDMDAwMTAzMDEwRjUyQzZFMUVGNzNFRjExNDIwMDJGOUQyREM5QQorOjEwOTZEMDAwNkMzRDk3RkQ3QkJFN0U1OUU0MjMwNUYxNUQyRjYwN0RENworOjEwOTZFMDAwNjI2N0M1RDRERjYxM0NGMUE5NTRERjI4NThGQUYxOURDNworOjEwOTZGMDAwRjNGRUU2NzdEMEZFQzRGNkU5M0VENEQzRUVENjAwRDEzMQorOjEwOTcwMDAwNEZCRjI3QzE4NzcxNDNCNzBBOTYyREQwNDM0QkM3MUI2NAorOjEwOTcxMDAwMjk5N0UxQkVEODMzOTc0QzQwQjk5OUU3RTY3Qzc5RUNCQworOjEwOTcyMDAwNDU3NTJEQzI2N0ZEM0YzQzNGMERCRkQ3ODc5NTc0QjQ4QgorOjEwOTczMDAwMUI0RjNDRjVGNzdGNDZCRDU4QjdCRDA5M0QwREQ2RkEyNgorOjEwOTc0MDAwQ0NFQjY0ODc5QkMyNUJGOUZCQTc1MkM5QkUzQ0ZBQzQ1MQorOjEwOTc1MDAwRTY2OTA4RjdENjhFNTZGQTdFRUM4OUFENTRERUY3MEYyRgorOjEwOTc2MDAwQ0ZFRkY5NEZCNDM3MDIyOTNFQUM3N0VDQzVDRDNGRkFDNQorOjEwOTc3MDAwNEZBNEYzOUExNDFGQUVBMzIxNjhFNkZCQjY5MkJFOERFOAorOjEwOTc4MDAwNzJBQjczMkZGMUE5QTQ5N0FCNTFFRjIyOUM2QUI5RkM3RAorOjEwOTc5MDAwOTFGNEZDODVEODU3NUE1NkUxNjg0Mzc5RjZDNUE2RTQ5QQorOjEwOTdBMDAwQkE1OEYxNDRCRjU4MkZDNjVDNDg4RUQ1MkExNDRGNkI2NworOjEwOTdCMDAwMDNBQUMxQjg0NjVCMjI5QjgyQ0ZBNEEyODgzNTE3QzZGNAorOjEwOTdDMDAwNTlCOEI4NzMxQUQ5M0RBMUNGNTc2MkZENzlCQjEyRDhFOQorOjEwOTdEMDAwMjY4QUJGNjFGMDE2RUM3RjIyNzVDNkM2ODMxODNDMEM0MgorOjEwOTdFMDAwN0UzMkY0QkVGRDJDRDhENzFGNUIzMDk2NDNGREU5RUNFQQorOjEwOTdGMDAwRkY3OTZERUZGRTExRTU2ODhEQkQ3N0FGQzcxQjdEREY4QgorOjEwOTgwMDAwMjZFMjM0NTA5RkY0NEVEOTlBRDhGMUQwMkFCNzQzRDBFQgorOjEwOTgxMDAwMkRENzlCMzk1REQ1Nzk1RTkyMTMzNkRGMjg4RDVEM0E2MQorOjEwOTgyMDAwRUM2MEYzMjYxMDQzMkNBN0FFRTc0QTVDQzc1NTYzOTY1RAorOjEwOTgzMDAwNEUyNEJBQzAzODFGRUE5RjkwODNGQTVGOEQ3MTRBRTBDOAorOjEwOTg0MDAwQjM0NTZFQ0U0RjE5NEVFNkJFMTRDNkFGMzQzM0I3MDNFMAorOjEwOTg1MDAwOUY4QzdENjQyMTM5QjI4M0ZBMDVGQjgzRUMyQUVGRUIwMAorOjEwOTg2MDAwMEI3N0EwM0RCMkM1MTJDQzlFODRGREI0MDlCREI1OUQ1OQorOjEwOTg3MDAwQ0YxQkRBM0I3MUJGMTRGQTczNUUzQTgxRkFFOUIxQjhEMworOjEwOTg4MDAwQTg3RDg4Qjc5RkI1QkQ0NTg5Q0UxNzI4MzUxRkY1MTYyOQorOjEwOTg5MDAwRjY1N0VBNDAzRDEzQUEyNUZDNzhBREI0QUU2MzU4MjVDRgorOjEwOThBMDAwOUJENjVEN0NDM0Y4MjhGRjFBRTMzQjI4Q0Y3MDFGRjhENgorOjEwOThCMDAwNEU3N0Y5NkRFRTQ5RDFBNzhDRkIxOEUxRjkzMjdFODcxRQorOjEwOThDMDAwNzU3RkVCRjZEMzkzM0Q5NUFFRDMyQkYxRUM5NTdEMEJFNQorOjEwOThEMDAwNEY3MkZERkJFQUU3MjQ2RjFBOTE4RTcxRkNFMDk3M0ExNAorOjEwOThFMDAwRkRCQjVDRDJGMTJCOUYxMzFEMkZERkM1RjU2RkUzQUVERgorOjEwOThGMDAwMTIyQkQyRURGMTc1N0VGNjVCMzA0MDFCQzUzRUVCMTZBOAorOjEwOTkwMDAwQTU3NzI1QzU3OTVFNDk3MDYyRkNFRUE0RDAzN0Y1MEZDNgorOjEwOTkxMDAwN0M3RTE4Rjc0NzQ3RUNDQTI2QkZGRUU0MkIwOUI1RDg3MgorOjEwOTkyMDAwQ0Y3RTkzODlFMEI5N0ZEQkM1NUI1QjE1RUQzQ0I5M0YyQQorOjEwOTkzMDAwMDA3NjMwOTE2QTIzRDhBOURDMEU1RUIxMTlGREIzRDU0QgorOjEwOTk0MDAwNzVDQzg3RkNERjY4QTA5RkM2NUQwNzg4NUVBNDFENUNBMAorOjEwOTk1MDAwRjBGOERDMTVEQ0ZFNENGMDI1QTBGRjM2OTNEQkEzMEMwMQorOjEwOTk2MDAwRUM1MUFDOUYzNjMzREM2MjI1RkEyQTI5NDNGQURBQjc4OAorOjEwOTk3MDAwNzBDRjQ2RDRFMzhEMzM5OTEzRkJERjMyQ0NGRjRBMkVGMAorOjEwOTk4MDAwQUQ0NzYxOThDRkIyQzVEMjNFQzMwQ0VEQjc1NDdBOURCNgorOjEwOTk5MDAwMDA0OTgwREI3NkIyN0JEOTE4QUJEMDczMkJDODVFNkVFMgorOjEwOTlBMDAwQ0NCQURFNDc3QzY2OTQwN0FGQjQ5MERERDVFODREQTQxMQorOjEwOTlCMDAwRjk1Q0JENEJCOThEREIyMzBFQzZFN0FGMTA3RDVFMUQ5NAorOjEwOTlDMDAwQkUyQzhDRkJDQUJGMTdGMDkzNzAzQzY5RTlCOTExRTE1QQorOjEwOTlEMDAwNzFGMjI1MjA0NEY4N0VGNTRDNEVBRjY5MzMzQjQ4OEUzQQorOjEwOTlFMDAwQkNGRENBMkNEMkUzOTIyRTkzNUZCNjkxM0U3Nzk5OUQyRgorOjEwOTlGMDAwOEE4RkY0REEzQzlCMTZBRkVEMTZBRTk3RDI4NDlFMjk3RgorOjEwOUEwMDAwN0M4MEUzMzcyMkY4MjkyMkY0NDBDNDZERDVDNzVCOUNFMworOjEwOUExMDAwQTE2MkQ0QkJCRjE3RjgyNzMxODJGMjVEQzg5M0Q1MkI2MgorOjEwOUEyMDAwMjJDNDRGMEQzQjc5N0Y2RTlCQkZFNDc2MERGREJBMkJCMAorOjEwOUEzMDAwQjg1RTk0NzE3RkRDMDdBODhFMjEyRjdFRTdFNkZBQjEyRAorOjEwOUE0MDAwRTBGMTY1OUJEMTVFQkUwQUYwOEUyQTI1Njc4QzkwQTM1QgorOjEwOUE1MDAwNDAxNzA4Qjc5Q0JBMDBEMUMxNTVFRTlCN0Q2QTAxRUQ1NQorOjEwOUE2MDAwMUY5MDlGRDhERjYyNjVCMUUyM0M0Nzg1MUNGNUE0MDdEMworOjEwOUE3MDAwNEEzMURFRUNDOTRDMjYzQkM3QTM5NjlCMTJCMDVEODlFOAorOjEwOUE4MDAwRTJEQkU2QTVGRDREQjJGM0ZBM0REOUJFNkQzQTdFMEY5RAorOjEwOUE5MDAwOTQ5QUEwREU5MThDNjQ4RUU3RjBBRkNENzNDNzIzMUYzQworOjEwOUFBMDAwN0FBNTlGQUVCM0ZCMDZGQkRCREM2RTlDRDMxRTJBNDY3OQorOjEwOUFCMDAwM0Y0NEVFNUY0ODM4ODQ1QjEyNkJCNUYyQjM0RkMwMjE3MAorOjEwOUFDMDAwM0M5NkM3RjNDMUJFNzc1MEZDREEwOUUzQTA1RkJGRUQ1NworOjEwOUFEMDAwQjIyN0I4NUZERjRBRTMxRjc0RjM3ODQ2MjVBQzBGRUQ3OQorOjEwOUFFMDAwMzY0RjYxNjAwREQ3QTdDOUJFNThGMEI4NTNFMDc5REY5MworOjEwOUFGMDAwQzIxQjRCRDBBRjZDQUM3MUY4OTBERjFFN0E1NTU5NDY0MworOjEwOUIwMDAwRjQ4Q0MxNDFGNEI3ODMyQjA4MEYwQ0YwODBGQ0MwODJBOQorOjEwOUIxMDAwREMyRjZENkMwRTg0NjNEMzdCMzVGMTVGMjNGMjlGNDJBMworOjEwOUIyMDAwRjQ0RUYxNzZBMEY3MzBBNzc3QUVGRkE0REY4RkYyQjE0NQorOjEwOUIzMDAwM0FDNjdFQTg5NDJGOERENkRFRDE0OEM3OTIxRjFBQTdBOQorOjEwOUI0MDAwRjU4RTQ2QjgwRDU1OUU5Q0I0MDBGRjIzRkYwMDFDOTA3NworOjEwOUI1MDAwN0YyNEJGMjRFRkU2N0NCMkE5QzU1QjhFREYzNzU1MzI4OAorOjEwOUI2MDAwNjdBQjQ2MUYxOUZEMjU5QzI3RkE5RDUyQUU4Rjc1MDdERQorOjEwOUI3MDAwMEEzRDE4MDczMDQ1MzY2MjFFODU5NEMzOERCQkVGMUIyNgorOjEwOUI4MDAwMUQyQkNGNERDQTYxQkI5OUNCMzc3QjM4MjlEQ0FBQTFFRAorOjEwOUI5MDAwMkZEQ0RCNEI5RTQwNEZDQURCNDk1QTFCM0IyRTUyRTY2MworOjEwOUJBMDAwNzE4ODc4RkREMEYyMjIzMjUwOTdBM0JDRDk5NjE0NDYyMgorOjEwOUJCMDAwNzkyNUUzNDRDNjdFQzc3ODE0NUQzQzQ2RkEyREI4QkZDQworOjEwOUJDMDAwODBGNUU3N0EzOEJENTQ3QUI4OUNCODVFM0NFNUZDMjU1MAorOjEwOUJEMDAwRkQ3QjREQzFDRjMxOUYyODlFRkU5MkVERkU1MjcxMkIzMQorOjEwOUJFMDAwMzk4RUQ0QTM0NkZDQ0JGRDExNUM0Rjc1NTFGQzdBRUQ0OAorOjEwOUJGMDAwN0JCOTdDMzJEMkUzNzJDMTI3NUU1QzJCRDQ3QjRFRUMwNgorOjEwOUMwMDAwNjcwREM2MkZFRjg3RDU5QTc1Rjk2RjZEQTZDRUJBNTgzNgorOjEwOUMxMDAwRjEyRkI5QkZDMTFFMzIwRjI5QkY2RUVGM0E5RTQ3RjUzMworOjEwOUMyMDAwOUNDOEE3NjU4QkNEQkE3QzJBODdDRkRCODJGMUQzMTk3QworOjEwOUMzMDAwRjY4MjEyOTVDNkU1NzFBQ0U0NjlFQzZCRDRDM0M1QkI4MgorOjEwOUM0MDAwREFDNzYwOUU5MjI3QTBERjFGQzlBQzRERDRFRDNGNjRGOAorOjEwOUM1MDAwMDc1REJBNzI2RTVEOEVBRUZFQjBFNjExQkFFRkMzRDc4NQorOjEwOUM2MDAwOEVEMzdEMkYwODRERDA5NTBCREIyRUQ1RDUxRkQ1M0UzRAorOjEwOUM3MDAwNDM5RjhGRkJDODU1QkFGQTYzQzM3Mzc1RTU0RDJEMUQxRAorOjEwOUM4MDAwQjU4ODk3OEI5RkJBNEVENzZFODZEOTY5MkUwMUI4OEU0QworOjEwOUM5MDAwRUY1OEE2Q0YxMzMzQzAzM0Y1Q0Y2QTRDM0E3Q0QyNTM3QQorOjEwOUNBMDAwNDA3ODlENjFENkU3MEI1RkIyNEIwRjBGNEM4QkMzRkUyNAorOjEwOUNCMDAwOEE5OUU4NkZEQTkxMDlFN0NBNjMyRDY2RTY2RjdBNjVEQgorOjEwOUNDMDAwRkI4MkMxRjRDMEVDQkRCRTQwMEMzRjUzRDJCOTJDMUI4QgorOjEwOUNEMDAwRjdCMUE0RkNCODUwRkE4QjM3NEY0OTdGRjFCRUM3ODM2OAorOjEwOUNFMDAwREJCQjFFQjkwRkMzRTE2MjE5ODA0QkFERUY1QzcwQjFGNQorOjEwOUNGMDAwOUMwRjJFMENFMDkyRkNGREUxNjJFQzZGN0Q1MjIzRTU5RgorOjEwOUQwMDAwMDM3Rjg0MDU4RDdEREMyQkY4NDg5NjE3ODQ1MkI5MUU5RAorOjEwOUQxMDAwMEFDQzNCOEYxRENERTNDMDQxMUJERjlGMzQ3RUI3Njc2QworOjEwOUQyMDAwNzBCOTM2MUFFNjQwRjAxOTIyNUY3RjI2RjA3MDI4MUVCRgorOjEwOUQzMDAwNUZBRkZEN0E3RjI2Q0FFRjJBNDY3RUIzQjNCOUU1NkJFMworOjEwOUQ0MDAwRDQ1QjRCQ0MxMTg2RjRGRjkwNThDRjE2OTExN0ZBQzgwQworOjEwOUQ1MDAwM0EyN0Y1RjNBOEQ4N0Y3QzZDOUQ5N0RFM0ZCRTZFMEM0QQorOjEwOUQ2MDAwM0RDM0VCN0NGNDdFREJCQTI5RjREQzBFRjYxQzNFOUY4RgorOjEwOUQ3MDAwNUM1NzQ1Q0ZBN0Q2MDVBOERFRDNFQjZBRTlCOTczNUQ3QQorOjEwOUQ4MDAwOTBDRjZCMTBCRTU4MTlEOTM5ODFGNDk4RjFEMkE1MjEyMgorOjEwOUQ5MDAwNzU0ODc4NjI2QTVFNEM3RDE5QjcxRjc1RjEzOUYzQzg1MgorOjEwOURBMDAwRDcxRTVBMzRGQjREMERGRjY2NjUyNEJCMEY2MzBFRTNDRgorOjEwOURCMDAwNjQzNjE5RjczM0NGRDdGRUJCNzVCNUIzREYxQzM1NzRFNgorOjEwOURDMDAwM0U5MkY0QzRDRUE0OEY4RUM1RDc0MTkxM0ZGOUJCODc5NAorOjEwOUREMDAwQ0Y2RTBBMTVDNTg3NTc5NENFNjJDM0E5QzY3RTMyMDdENworOjEwOURFMDAwOURGNTYyQjQxOTM0RUQwRjFBRjhCODI2OTgxQUQzNkU5RgorOjEwOURGMDAwQTgxMUY0NTk2QkUzRkJFRjhCMENGQ0ZEOTJGOEZFNTJCQgorOjEwOUUwMDAwMDZENzc3OUZDNDkxMzM1NzY3OThBNDNGNkZBMUZEQzBEMQorOjEwOUUxMDAwNDE3Q0Y3OTMyQjYyQzE3NzdGODY1N0M3Qzc4QjgyMDYzOQorOjEwOUUyMDAwQkMxQUZBRjlDNEQyM0VDQzE3ODNDRkNFRDc4RjVDOUYzMQorOjEwOUUzMDAwQjFEREMzMTk1QzZFQkRGOEZGMjk3RjdFNzI1MzMyRjkyNAorOjEwOUU0MDAwMEYwODM3OEY2NkZEOUZEQzk0NTQxQjJCMkVGMzVBMDZBOAorOjEwOUU1MDAwREYwNzA1RUI5QzE1QjhDOEQ0MEY1OUQxNTYxQ0MzQkNGRAorOjEwOUU2MDAwN0M5Rjc3QTQxM0UzNDMzMjBGMjAzRUJEOUEyOThFNDQ5MgorOjEwOUU3MDAwMzA1NDA3QzMxNUYwRTFCNTE2NDJGRkU2ODE3MTIyNjY0MgorOjEwOUU4MDAwMUNDNzY3OEFFQTU5Q0NBOTYxOUE3MzFFRUE2MDdBODA3NgorOjEwOUU5MDAwRjYyMTJCRTVFRkY0RTZEMEJFRkYwNUQyMTM1MzFGMUJDRQorOjEwOUVBMDAwNzVBRTdEQkE0MUVEMkY1MENFRUNGODgxRTU4Q0U0NzNCMAorOjEwOUVCMDAwNzZFNkMxNTFCMUY0NjQyRDhFN0QyOUFDNjNDQkQ0RkIyMQorOjEwOUVDMDAwNDlDRTlDQTdERjBCODU1RkFEREE0QkZCRDY0Mzg2REYxRgorOjEwOUVEMDAwMkVGNzkwRTI1MjZCRUQyOUM1MENGQ0JBRUYxMkY4MzM2NQorOjEwOUVFMDAwMzQ4M0YxRjM1ODlGMjU4NEQxQ0UzRjIwRTYwOThFRkZCRAorOjEwOUVGMDAwMjVEQ0FGNkU5RThDQ0Y3RkNFMEE3Qzk4MDFFRDk3NTkwMgorOjEwOUYwMDAwQjk5RjM4M0VDM0ZGMTE5NjEzQzUzRUIwMzVEM0JBMTE4MQorOjEwOUYxMDAwOUZDQ0M5RDc3MTg5NThDNzQ2OTMzNzFGRDdGMUE1RTI5RgorOjEwOUYyMDAwMUI4QjdFOEFEMzE0RjZFMTMzODU0NUM2RjNCQ0JCNzAyOAorOjEwOUYzMDAwMTBGREIzRjQ4QjEzQkRFOERGMjY4RTY2QUM4N0UyRTEzQgorOjEwOUY0MDAwQkUwNDhDOUI1OTkzRkFGRjcxMjRGMkZCRUIyNjhDMzBGNAorOjEwOUY1MDAwQjJFNzlEN0NCRUNGM0Y5MjRCRkIyQUU4MDFBMTdDMjg1MworOjEwOUY2MDAwQzZGNzMwRjU0RDY4ODc0M0ZCNkI1OUYwMThDRUVGQTg2NAorOjEwOUY3MDAwRDMxRTMyQzFCQzhBNjc3RkUxQzI3Q0E4RTdCQjY3RDAzMQorOjEwOUY4MDAwM0U0MkU0MjkzNTY0QzU3MzBCM0QyN0ZFRUU2QUU4RUZENworOjEwOUY5MDAwOTIxRTBCQzU5QjJGNjEyQUM5RjM3QTMzN0IwMEY5MjZFOQorOjEwOUZBMDAwMUUzQzhGRkY3NUVDRkNBRTJCMzJCOURDOTM3OTVCQzY5RgorOjEwOUZCMDAwRUY3OUUyRkJGMTM4NzlDNDhFNENBRTE3NjQ3RThDNDVBNAorOjEwOUZDMDAwRTZDNzc4RkNFN0NDOEZCMTE4RjI2MzJDRTYwMEMzN0RCRQorOjEwOUZEMDAwNjBDQjQwN0VDQzYyNDZGOTMxRDA4RjM2M0ZFNkY4OENCQworOjEwOUZFMDAwRDhGMzcwOEI3OTU4NEUyN0M1RTkzNzg1REUxRjFGNzE2RQorOjEwOUZGMDAwRUU3NTVBNEUyN0U4RjJBQ0EzRUQxREY0M0U1RTdFQ0UyMAorOjEwQTAwMDAwNzgzMUZFRjEzOEY5NDk2MzA3RkFDRjY2QTE3NDZEM0JFOAorOjEwQTAxMDAwMkY5RkY3QzAzODc5RjRERDYyQzhGMzg5N0VFN0Y5M0RGOAorOjEwQTAyMDAwMUJEMjM4OURFQ0NENzJCQTk3NDJENzRCNTlBRjA1RTk5OAorOjEwQTAzMDAwNzQ4OUMzNkRDMUY4NTE4MEY5M0FFOURDOEVEOUQyREY1OQorOjEwQTA0MDAwMkJGOTZFMDRENjMzN0Y4MTc2QjYwOTI0MkREQUQ5NEJFRAorOjEwQTA1MDAwRDY1QUJFRThENUM4QTk2QUJGQkVDQ0IwQkU0NkVFNkUyMQorOjEwQTA2MDAwQ0E2MjM0REZDNDcxNjMyOEFGRUYxNEYzQTYzQUNGMjE3QworOjEwQTA3MDAwMzcxN0RCNTVCQjU5QjNERTQzNzFFQzg2NUIwNUZDMEUyRAorOjEwQTA4MDAwNjVDNzg2REY3NTk5RENFRTg4NzcxRUUyRDZDQzE0RERENQorOjEwQTA5MDAwMzlCRERCOURFNzk2OTcwOERGNjBCQUI2N0YyMzFFRENFQgorOjEwQTBBMDAwRjRGRDdDNzBGNkUwRTYxQUM2RDFDQTE1OUVCRkZGMTcxNAorOjEwQTBCMDAwODc3NzlBMzg1N0M1Q0YwNTU4MEM3OUU4OUJCMkI4RkMxQQorOjEwQTBDMDAwOEJDRTlCRTdBMTdGRTQwQ0RDOUU4OTcyRDFFQzFEQURBOQorOjEwQTBEMDAwM0QwN0QwNjVGNjI3NEQ4MEU3MjEyMTc3OEM3MEQ5OUQwQgorOjEwQTBFMDAwQzlFRDM3RTNCQUJCNDQzRTdEQTJDQTlBM0IzNUYwMzc4RgorOjEwQTBGMDAwQUVGNzM5NDFFN0IyRkUwNjBCREZCRjgyQkY4MDFERjAyRAorOjEwQTEwMDAwNzIwM0UzNzJFRkUxQ0MxMTIyMkYzQ0NEOENGMjcwMzE1RgorOjEwQTExMDAwRUY4MkRERTA3QzhCRjY5MzI0OUMwN0MxNEZDMEREMDgwNQorOjEwQTEyMDAwQzcwMEYzREU4ODc5REJFNzgzNjc0Nzk2RkY2MTg0Q0I1RQorOjEwQTEzMDAwRDIwMzg5NTY5NEZGMzdEQUZCRjdBMzhGREFEQjYzRkE5MQorOjEwQTE0MDAwNzgyNDNDM0Y3NzhDM0NCQzlERTFGRURCOTg5N0Y3QzFCRgorOjEwQTE1MDAwMzM2NThBOEZFNzUxQjA5OTY0RUYyOEExNUNGNUVDQzVBRgorOjEwQTE2MDAwNDNCNzc3MzZBNjA0QzcyMDdGN0MyOUYyQUVBNTNFREEzNgorOjEwQTE3MDAwOTg3MzZDMzRFNkNGN0I1REU1QUJCMjNDMTQ3N0Y3QTcwMAorOjEwQTE4MDAwMjMxREJENjZFMzc0RjQwOEY0MDRFNUE2M0Q2M0I3QTI5RAorOjEwQTE5MDAwOUU3OTMwMkI1ODg3RjU2NDFFMUZGM0Y3OEZDNjNDODREOQorOjEwQTFBMDAwMEI4NTEzRkM1OTkwOEVDRTA3QTcyNzMyMTlFMUU3NTA5MworOjEwQTFCMDAwNEE2QzNBRjk0RDFDM0EzMUYyMDc5RDJGMkJGREUxRjgxQworOjEwQTFDMDAwNDNDMjUzRUU1QkM4RjlENTY1NzEzQTk0NEYwOTM3NjNDMgorOjEwQTFEMDAwRkU1MDVEOTY0OUQ0RTNGOTg4MEY2NjA1MDhDRTdEQzMyRAorOjEwQTFFMDAwQkUzRTlDMDA3MzNGNjRDOEY3OTJDRjkzNDIxRTlENkZBMgorOjEwQTFGMDAwRkQxMkRFM0Y5NDFDM0U5NDE4N0I3RUE2QUNBMUUxRTdFNQorOjEwQTIwMDAwODc5QTVGQkQ5QzVGNzFFQ0Y5NjU2NjBEMEQ3RTAxRDY4NgorOjEwQTIxMDAwRkY1OURBMEZBMEM3MDBDRkY1ODg2N0I2QTE5RkU0RTMyNgorOjEwQTIyMDAwMjE1N0VDNzk5NjBENzk5RTQxQ0IwRkExNkYyNTdEQjMxNworOjEwQTIzMDAwRDBEMjNBREFBRkNGNEE4Q0I5NUZCRjAwRkMyN0Y0N0ZBNworOjEwQTI0MDAwOENGQkY2NzI3RjFFRTQwN0FEQjdDNkRFN0Y2MzNBRTI5MQorOjEwQTI1MDAwN0RBNjU4NzcwNjhCQTRFMTdFRTYxRTFCQzVGRjhERUIxRAorOjEwQTI2MDAwQkY0MkQwMTFDMEFCODJFMDM1QTc5RkUyMTg4NzQ2QzczNgorOjEwQTI3MDAwOTYwQjE1QzZGQTZEN0M5Qzc4RTcwQkFFQ0U1Mjg2NzRCMQorOjEwQTI4MDAwQkU4MDk1MDYyOUZFNTc2RTc3NDQ1NEMwQzM2RDAyMUZFOQorOjEwQTI5MDAwRDZEQzU1M0VCNDBGQ0JCM0RFM0I4OEVCMDRGODlGMThGOQorOjEwQTJBMDAwODBBNzI2OUZFRkQ4QkE3NzlDMjMyREYxRTU3NkJERkFEQgorOjEwQTJCMDAwNDI1OTczOENGNTA0M0RDMTFCQjMzNDdFNTBGRDUzRUZGRQorOjEwQTJDMDAwM0E0NzZBRjAzNTlFRjU5QUY4RjlFODdFOTNDRTJGQ0U5QworOjEwQTJEMDAwNjQxN0U0MTc1NzYzOUY5ODhGRTAwQTkwM0U0MEZEODAxMworOjEwQTJFMDAwN0E2N0UzRUVBOTI1ODg0Q0I0MzMzMDlGQTczRjM5OTFCNAorOjEwQTJGMDAwRTQ2ODZCQ0VBNTYzQkMxQTc4ODZCMkE0N0RBOUM2QjEwQQorOjEwQTMwMDAwMUJGRjdCRjlGRjUxQkI0OUQxRDlBRkQxRkVDREY0NUUyNAorOjEwQTMxMDAwRTJBN0RDRjE4RjMxRjExMUY0RjhFRjIxM0RFNkYyNkZBNQorOjEwQTMyMDAwQzRBNzExN0VBMTdCMkY0RkEzRjMwNTA4QkZFOUQxRkU3RgorOjEwQTMzMDAwMDZGMDFGMDdDRjFEMUU3RjNCRjZENzIwQ0VEMTI4MzI1NworOjEwQTM0MDAwOEY2RjIwNUU2MTc2MUVCNjQ3RTEzRDU0QkMyNDhBNzg0QgorOjEwQTM1MDAwMUFEODBEOEYyMTFENTg2RDgyMUY5OTgzQ0U4NzRCQkI1NAorOjEwQTM2MDAwODUxOUVDMUIzNjg2RkJCNzM3NjRCREY3NDc4Q0Y3NkM1NQorOjEwQTM3MDAwNENFMTJDQkJGMTQ3MDlFNDA3MkU1MTlDNTY1QzM3RDhDMQorOjEwQTM4MDAwMUY5RkZFMUNFQTA3NTlFNEQzQkJDODNGOTQ3NjQ2OTI1MAorOjEwQTM5MDAwN0EzNjY5RThGMzk0RkVGMkY5RjJBOUY3QTEzRDA2RjNFMworOjEwQTNBMDAwOTk2MTcyRDBGRUU2M0U1ODVGMzZDODhEMTk1NkZFMkM3NAorOjEwQTNCMDAwOUYwNTU0MDVGRENENTBGM0JBN0I2MTVFREZCMjMzODk1MgorOjEwQTNDMDAwNTdDMEYzQTc4Q0MzNjFDRDgxREZCOUQwMUY5RDYxQjZBMworOjEwQTNEMDAwMUNEM0NBMkQ2M0JDRTM4REFDNjQzN0UxNTFDNDNCQkVEMgorOjEwQTNFMDAwNjU3MzdFN0QzMUMyRTU3MjE3QzFBNUY4OTU5OTk5REEzQQorOjEwQTNGMDAwNzhDQjQwQkM0M0FDNjM1RTY4Mjk5N0E3MDYzOTI3RTU1NAorOjEwQTQwMDAwOTlDOUNFRUYxMTYxN0VFNjc1NjY1MERDODhDMzNEQTQyNAorOjEwQTQxMDAwMzAzMzk0QUY5MDY1NzQ1MkEwN0NCOTQwOTI4MkVENjE2NAorOjEwQTQyMDAwREQ1Nzg4Mjc1QjE2Q0M0MjM5ODM2OTNDMzgxRTc4N0YxQworOjEwQTQzMDAwNTlGODZDOURFQUYzRTI3M0JBMTIzMEYzNzk4NDc5REU0RAorOjEwQTQ0MDAwMjE2QkNFQzNGQTI2N0JBRkNBQ0ZFN0MxMEMzMkIwQkRCOQorOjEwQTQ1MDAwMUM4Rjk3OTM0NTc5NDNDREE5MUI2RkYyMEU4RTYzMzAwNQorOjEwQTQ2MDAwNDczMkQ5QkQ1NjMxQUZBMzRFNDdDODA0RUY2RDhFQzhGMQorOjEwQTQ3MDAwNTFDQTRGMTU0RjYzQkNFMzNCNTMyODg0RjlEOTc3QUFERgorOjEwQTQ4MDAwNjE5QTZGMTI4QjQ0N0EzMDNFNjEwNzEwOTgyODhFRjBFMworOjEwQTQ5MDAwMDdFNDAzRjA2RTFBNzE5RTA5Q0U1MzkxQkIxOEU2Mzk5QQorOjEwQTRBMDAwRkExNTJDQTcxQkY0OTFDN0IxODZGMjlFM0QwMUIzNDE2QQorOjEwQTRCMDAwMEYwNTE1RTQ5QkNDNUFFMzdCQkQ3RUIyQjM0Mzc0MUVGQgorOjEwQTRDMDAwNDg4OTA0QjJDRUE2OUYzRjVFNjM4Q0QzNTg2NjcwMTQ1MQorOjEwQTREMDAwRjdERkMyRURERThGMTM3OTNCNDkxN0U5RDk1Q0ZGMzYxMAorOjEwQTRFMDAwQkFBQzhDRjI1RDMyRUM3NkI0REI0RjI2MUZDMTIzOTdGOQorOjEwQTRGMDAwQTgzN0RBNTA2RkQ4MkQ3RTgyODdENDFGQUJCQjZFNjUyQworOjEwQTUwMDAwODg5RkM2NURENTBDRTVFODZGMTRCRUZGMTlCQTQxQTE1RQorOjEwQTUxMDAwM0MwNTc5NkY0MzZEMTE3QjFGNUFCMkE2RUMxMTM0Q0UwNgorOjEwQTUyMDAwRkM3NzgyMzczNDQwQjlFNjNEMzYzRTAyRjU0QUE2MDc0RAorOjEwQTUzMDAwMkFGMTdFOTZENkYxQ0NCNzFFQ0FBRDA5QzE2NzVGQzJCQgorOjEwQTU0MDAwRjUxQzUwQTk5RjI2NzEyRTk2MzE2N0ZENEVFODdGRUJEMgorOjEwQTU1MDAwNzVDMzdDOUI3MDQ5MTVGRDFCMzEwRkE4RkYzRUU2QzRGNworOjEwQTU2MDAwQkM5MTQxNzQ3QTA2RDYwN0Y4N0YwMkNCMzBFRkE2MTU2RQorOjEwQTU3MDAwQzE1RkRDMDFGNUIzREY2MzNFQUEyM0JFQTMyRjgyNzg1RgorOjEwQTU4MDAwNTMwNDNERTBGQkU5RjBCRTQ5RDA0RDYxQjdDMkY3RUY5RgorOjEwQTU5MDAwREQzNkNBOUY2MDA3MzM4OTVGRTZEQkY5Mzg0RERERTVCQworOjEwQTVBMDAwRDc0RTgyNzkxNUY2NEMyNDMyMUUwOUY1MzFCRjA5MzM5NgorOjEwQTVCMDAwMEM3ODdFMUQyMzdGRDk1ODdGMjRENkY3NTJCNDhBRTdDMgorOjEwQTVDMDAwRDVFNDU4RTlGRTIzMjZFNERDNjQwM0JGNUQxNkE1N0ZDRAorOjEwQTVEMDAwRkE1RTIyQ0E0RDQyMUZFOUY4MDRGQjAxRkZEQzVGQzZBOAorOjEwQTVFMDAwQjdGM0E5OUQ5QkYzODM4RkM5M0ZDRUI3OTdCMkU4MUZGRQorOjEwQTVGMDAwRjY1QjExMUQ4N0U0RUY0Q0YxNkRGRkEyRDk5NEQ3M0RCNgorOjEwQTYwMDAwRDkxQ0Q5OEI3QzdEOTk3ODk2ODgyN0YyQjUxREUwQjg0NgorOjEwQTYxMDAwRDBEQ0JDREYwM0VCNDk1QkNCN0MyRDM4Q0E2MjZGMkJFRgorOjEwQTYyMDAwRjY1N0NBMDIyQUMyQjlDQzc5NUYyQkNFNkZFQUUyMDM5MQorOjEwQTYzMDAwRTk0ODVGNEY2NjE3MTIzRDVENkVGNzE1MjYwMDg5QjQzNQorOjEwQTY0MDAwNEVGMUY5OUNGMEFBNzZCMTQyNzA5OTVGNkIwRjYzRkVGMAorOjEwQTY1MDAwREFGQzgxRkI3QTgyMDUwQjgwNkYxNjA2MTU3MThFM0UzRgorOjEwQTY2MDAwNThCMDU4MTM4Rjk1Nzk3RDBCNkNFMDQ3QzdEQTc3Q0VEOQorOjEwQTY3MDAwRTY3QTVDQjY2RjEyRTc0RUU0Rjc2REQ5MEU5RTVGOTlFRAorOjEwQTY4MDAwN0Q2NTUzMzZFNTU3RjA3QzY3RTBGQkRCQjIyNzQ1RTU5NworOjEwQTY5MDAwMDg4QzRCRjkyOEYzOThERjgyRUI5QTI3Rjg1NkYyRkRFNQorOjEwQTZBMDAwN0NGRkVENjRCN0NFMEZFOEVEQ0ZERjI4MUNERkExNDVCRQorOjEwQTZCMDAwMEFEOTgzMEI2QkNGNkQ5RkI2NjRDQkZEREUzQzI3QzVGQgorOjEwQTZDMDAwQjc5OUQ0NDc5Q0FFQTREQzlFOEI3QTFDRTU2RDE1RTg0NworOjEwQTZEMDAwNkQ4RDdEQkNGOENFMzM2OUQ0MkVGM0M5RDU2Nzg3NDcxRAorOjEwQTZFMDAwQ0ZCOTM0MTlDRUI5MzQ4QTczMkU0REJCNUEyQzE5NDhDMAorOjEwQTZGMDAwRUZFMjlDNEI1M0Y3RTcxQkI1Rjk3RDEyNEU4M0NGQjlDMAorOjEwQTcwMDAwRjQ1MzVFRTMwMjZCNzgyRjlFRkY1OUIwMEFENjA4RjUyQQorOjEwQTcxMDAwREYxMEU3MjJERUM0NzMxMTEzQTI3NDk0N0M1RDQyODRCRgorOjEwQTcyMDAwRTdDREY5Mjk3RjJGQ0Y5OUU0QzM3QzkzMzZEMzA0Q0FCMAorOjEwQTczMDAwMTc2QTRCNDlGNjY5RjM3MzM2QjUzNDU3NjIzRDk5Mjc2QQorOjEwQTc0MDAwMjRDRkI1MkM4OEIzMUZGQzlDOTA2QjVCMTQ5RUFGMTU3NworOjEwQTc1MDAwNUE2NDI3Nzg3QjU0NzY1MDdCNEVERjUzMThBMDNDQjk1RgorOjEwQTc2MDAwQTY2QzJGOERCMzQ1QzQxMTMwQUY3NDIyM0NDMzYwOEVFQworOjEwQTc3MDAwNzE3Q0YxRjY0NkY5MDBGRDZEQzBGRTJBMEE3RDk0MUYzQQorOjEwQTc4MDAwNTM5MUNBRjNDQzNDRTk4MTkyREI4QUEyRkRENjc0RjNFMworOjEwQTc5MDAwQkNCQzlBQzBENzZGRjFGQ0RBRUE1Mjg0QTc1MTlFNEIzOQorOjEwQTdBMDAwRkEzMkNBNzVBMEJGN0Q0ODhGREY5OUI4REU4OUNBRjczMworOjEwQTdCMDAwQzBBMjlCQTBCRkJFRjdBRDk0M0ZDN0VFRjYyQjE2NjhCNAorOjEwQTdDMDAwRjdFMkJCNEUxRjlFQTdEQjUwMUVBOEFFQTRFRjY2M0E3MQorOjEwQTdEMDAwRUY5NzUxQ0IyMjM2Rjg1RUZBOUU3NTFCRTZFREQ1QjFBOAorOjEwQTdFMDAwNzYyQkY2NTc2N0QwNUJBQjFDNkY1QTkxM0Y1NzZEQjcwRQorOjEwQTdGMDAwNDRFOTkxNjFCRUExQUYxMDA1NURDM0NFNDE3MTBGOTJENgorOjEwQTgwMDAwM0Y1MjJFMTlFOTk4OERENENCOUYxMjI5NkY0MTJFNzA5QgorOjEwQTgxMDAwN0RCNTk4RUIzOUY2QTQ4MkYxOUZCRUU0MjNBQUYwOUZBMAorOjEwQTgyMDAwNDlERTREOTI0MkNBMjBFNzI3NzVCRjRERjZDQTM0OTBFMworOjEwQTgzMDAwMEZFODlGMjk1ODJFQTZGQTU0MDZGOTM5MDZGMzQ3MkYzOAorOjEwQTg0MDAwNjM4OTQ0NUY4M0VDMDQzMUFGRDI4MTc5NzM3QjQ4Q0E1QQorOjEwQTg1MDAwQzVGMjI5OENFMTdEMDYxMjJGMzAwRUQxQjNEQ0FGOUJGRgorOjEwQTg2MDAwODRGN0YwQzBGMzMyMzFFRTlEMjY3RjUxNDQ0MTNDQjE3NAorOjEwQTg3MDAwQjBBOTEwRUQ4ODIwRDkzQjQ2RkJBN0NDREU5QzY0ODdBRAorOjEwQTg4MDAwRjU0RDYxRUQyNDE3MjdFRjdGOTNFNDI0RTBGOTJDQ0FGRQorOjEwQTg5MDAwOTlENzk4QzRCM0NGOEU3MkE2MTIxM0ZGNTQ3Q0VBRjFGNQorOjEwQThBMDAwMzRDQkYxOTAxOUUxMzQyQkNCODg4RjkwMTlFMTNBREI0RQorOjEwQThCMDAwM0IwODRGNzQ0RUMwMUYwNzRGN0UyOTQ3OTg1RThFMTQ4OQorOjEwQThDMDAwQjAzM0ZDNUNGMjdENkZERDgxN0VFRkY5RUM5MDBGM0RFMworOjEwQThEMDAwQzFBQzFDOTI5RjdBN0IyNDVFNUU1RDQxOEVFMzgyRjI2NgorOjEwQThFMDAwRUFGQTJDREM0RkI4OTRGNUFFRENBOTBDQTY4QjkzRkJFRQorOjEwQThGMDAwRDdBQTU5MUFGQTkxNzRCOTVCRTREOTJCQUY4QkJDREQ5NgorOjEwQTkwMDAwRDI2NEQyNzM1MUJEQzhGMTVGMjY0QTk3MjI1RDY5RjBDNworOjEwQTkxMDAwN0ZDNUFFODQ4ODBBRjQ1NjIyREE1RjhBRjQzMDIxQUExMQorOjEwQTkyMDAwMTcyMzI2ODdENzBBRTM2RTU0N0M2RDZBMENCQzY3Qjg4MAorOjEwQTkzMDAwQkNBNEZGMjY5QUZDMkFEOTUzQ0M5NzhFNzgwNkJDNEYyQworOjEwQTk0MDAwNDM3ODREQjE3N0I0OUE2MTlFODdBREJFOUZBM0JGNTI0NQorOjEwQTk1MDAwQ0VCQzg0Rjc3MjgzN0VBOTcwRDQ5ODkxM0YyQkVDNDZDRAorOjEwQTk2MDAwRkNGQTA5RUY5NUNFNDFFRjREREYwN0VGQzMxMUVGNTIyRgorOjEwQTk3MDAwN0YwQ0MxRkUwNEJDMkZDQzg5QjE1RjE4MEZFRkMxRUY3MworOjEwQTk4MDAwODk3NzIzQkUyNURGNzcyNjM4MkIxQzE4RDdBREUzRjk0RQorOjEwQTk5MDAwQzQxM0RGMUZEOThBRTU4Q0Q1MDU3NENFQTUzM0NERjc1NgorOjEwQTlBMDAwMDY3RDZGRTZERjRCN0JGQzJBREU5RjU4QjgwNkJFNDM3MAorOjEwQTlCMDAwQjlCMzIwNTA4MUU1QTZCNTBBQzlDQjQ5MUYwNTVCQjFFMworOjEwQTlDMDAwM0NGMjZFRkVCRDY0N0RGMzFCNzgwRjU5NTM4OEI3REZGMAorOjEwQTlEMDAwN0Q3NDIzREQyNzExREUyOERBOTdCNzU3NjBCOUE5OEQ3QQorOjEwQTlFMDAwQjdGRjJBRDkxRTQyRkZCQUVDNjBCODE1REY4RjdEODAxMQorOjEwQTlGMDAwQ0Y0M0RBNzVEMzA1OUQ3NTJBMkZCQzQxRUREQTc5QkJCQgorOjEwQUEwMDAwOUJERkIyMjc5MjdDMTI3NkRBMzRCMUNFRTk4RkYxNzVGMgorOjEwQUExMDAwQkE3RjdCNTU5NTE3RThGMEE2RkU5MDA1RTlFMEIwQTk0RQorOjEwQUEyMDAwQTE4Q0U0NjUxQzdGQUI1QzY5Q0ZDM0U3MkM5MDBCOENEOQorOjEwQUEzMDAwRjAwREY0Mzk4MkU3OUI2RTgzMjExRUNCRTE3Njg2Q0M0NAorOjEwQUE0MDAwRDNDNDdDRjE2QTBEQkUxRUNCRTE3MTI3NTkyRkMzQzU1QgorOjEwQUE1MDAwNzg1RUYxQTNDOTY0QjdDQTNDRDJDOENGOTg4MjcxMDBBRQorOjEwQUE2MDAwNUMyM0U5RDczODc5QTVCMzBBOUI0OTVGQ0UxQTJFRjM0OAorOjEwQUE3MDAwNDk3QkNEQ0I2MERDOTJCMzdGQjgzMjk2N0ZGRDg0MThFMgorOjEwQUE4MDAwRjc4OEM4N0Y5N0VGRUJDMjA1MjZGNDNGM0E5MTc4RTg0NAorOjEwQUE5MDAwMUVCM0RBRjdEMTJFRTk0QzYzQkE3QjQyM0EwQjc4Qjk5MAorOjEwQUFBMDAwRjNEMTlBMUZCN0U1MDE3QzREQ0RFNjEwMEFGRDdDODVGOAorOjEwQUFCMDAwRUUzREI5QTY4NzQ1NTI1MzA2Q0Y3Rjk2OTk0NTc4REU3RAorOjEwQUFDMDAwMDM5RkZGQ0E1NkVCQjY0RDFBM0I3REJFMTQxQjk3OEZGMgorOjEwQUFEMDAwMjIzRDUyMjNGMDI0RTVDNTdDODEyRkUwRUZEREM4REY2NQorOjEwQUFFMDAwMEJFQ0NENjQxNzJFMTJGMkZEMTYxNkE2MzhDNTJEMDZGNgorOjEwQUFGMDAwRkVBRTc3N0NGMzk5Qzk4NEYxMzAzRDFGQUY4NkU5NzBEMworOjEwQUIwMDAwQkREMEZGRjgyNzAwRkZCQTQ3OTI5REE4RTc1Nzc3RTgyNgorOjEwQUIxMDAwRUJENTNERjJGRTQxNkU1RkU5RjlCQzRFRjI3OTU4Q0ZCQworOjEwQUIyMDAwRTc2MDM4NzAzRUZGRDkzOERBN0Y5MUU3RkExMkVDRkQyMgorOjEwQUIzMDAwOUY4NTU4NzRCRDAzRkFEREMwN0YwOTc4Q0U2RjBDRkE4QgorOjEwQUI0MDAwMkQyNjlFNUYyOENBNzJEQzUzRUQ1QzBGODc0MDBGMEJFOQorOjEwQUI1MDAwM0Y4NzQ0RURBOTQzQjNDMzQ4MEYyNTgyN0YyNTFGOTc0NAorOjEwQUI2MDAwMDg3RDNFNDg1RjU3MTlGRDk4ODc4ODNGMjY4QTkyODQ2MgorOjEwQUI3MDAwQkJENENGRDAwRkU5Njc3OTZFMTBGNEYyRkI3RUYyRUYxMQorOjEwQUI4MDAwQzFGRkM0Nzk4RUQzRjNDQjI2MDVFNDczNDFENDVGMDFCMgorOjEwQUI5MDAwQkM3RDhENzgwMzc5NkNFNzcxOEE3Njg2RjIyQ0FFREQwOAorOjEwQUJBMDAwRUY1ODEzRDNFRTA3NDk0N0ZCMDA4M0VERkQ4OENFOEVBNworOjEwQUJCMDAwMzdFMjJCOUU1RDNGODBBRjA0QjA5NzkyRDA4RjY3QzQ4MQorOjEwQUJDMDAwMUZGRjg4Q0YyMUU0NzU4MDlDNzZFNEM2OTBEM0Q2N0RBNAorOjEwQUJEMDAwQkM1RUZGRDYwNDhBMTdDOEY4QjhFNDM3MjU4RkRCRDVFQQorOjEwQUJFMDAwRUY2NkY5NURCOUI4RkYyMEZBM0Y3NEVCMkNEQUFGRkVERgorOjEwQUJGMDAwODZGOTY5QkYxQUYzOEQ3MjYzRTQ0QkUwN0VGNTA2NEQ2QQorOjEwQUMwMDAwOUNGNDUwNUFFQ0I4RjVGMDVDQ0VFRjRCNzJGOUJBQzYzMgorOjEwQUMxMDAwN0JGQzVFMUNFRjg4OTVDN0M1OEYyNDhBNjcwQURGNTdDNworOjEwQUMyMDAwQjgzODk3QzdCOTk3ODg2N0I5NzgxRTExNzlEODQ3NUM0MworOjEwQUMzMDAwRkE3OEJBQUM1NzIxQzZGOTcyOUREREJFNDEyMzU3QkNFNAorOjEwQUM0MDAwM0ZCMzM1QTNCRUYyMTQ4QUJDRjUzNTlDNUVGQjVFNDk2QQorOjEwQUM1MDAwREJBQUJEQUZFRDlBRENGMjI1MDg0NzRGQTFERjlBOEQ0NAorOjEwQUM2MDAwNzE5NjU3Qjg1RTY4MzRGNzVBMzFCRkU0MUE3NzcwMkE4NAorOjEwQUM3MDAwN0U2RkY0MzJGRjBCRDg4RkI3RDczQTBGRTBEQzI3RjZBMAorOjEwQUM4MDAwRTlGQjJDRENERkU4NEJFMDRGMzlBRjZCNzJBQjk3RTBCMAorOjEwQUM5MDAwN0FGQjZFRUQyNUY5MzA1MEFFRUUyNUZFQkYyNjM3NDAyQgorOjEwQUNBMDAwRTNGNkNEOTdERjQ1RjlDN0JDQ0M4NDdGNTgyRUY4ODJGOAorOjEwQUNCMDAwRTJCQzMxRTJCQTgzRTNCOEZBRkI2NzlBQUNCMUY3OTcyQQorOjEwQUNDMDAwNTk1RUIyMkUzRTdCNDMzNzhGMUJERTY4NjcxQjczRTFGNAorOjEwQUNEMDAwRkI5MkVFNENGMjFGRUE1MjQyQTM5RDE0QzdGQkVGQzU1NAorOjEwQUNFMDAwNURGQjg2RjVEMEJBMzY5NUY3RTczRjVBNEFGQkI4MTRCNAorOjEwQUNGMDAwRjc1OURERkQzNkM5QjlENTkyNEZCQUY0N0M1MjJGRjAyMQorOjEwQUQwMDAwN0JCRUZEMEY2MzVDN0MwOEZDQjMyNjE2RkZCQzhDRkE4RgorOjEwQUQxMDAwQzkxMjg1RkY2RDIyMEZBOTUyNkRBOEMwQjhEMEE5MTUyMAorOjEwQUQyMDAwOENDRUJGREVGNkFFNEFGNDc0REJCMzBBREQwNzIxRUQ0QworOjEwQUQzMDAwQjNENTAyQkVGMUQ2ODNFNzA3QkMxQUY5ODFFNzA3QkM5OQorOjEwQUQ0MDAwMUFGRjBDQ0YwRjY4Q0I3ODdFNDA1QjFGQ0YwRjY4QkYxOAorOjEwQUQ1MDAwRTNGOTAxRUQ3NzNDM0ZBMDJEOTdCMEU1QUQxODY3NkJBNworOjEwQUQ2MDAwNkE2M0NFQjA5NzlGMjdEMEI2QzdGMzA0REEzMjlFMjcyNgorOjEwQUQ3MDAwRDBCNkM3RjMwNERBRjIyOUM2RTE3OEVBMzE5NUUyRjRGNQorOjEwQUQ4MDAwNzhBRTQwREJGRUU2NzcyNzY2MjFERDc0MjVGMDNDMzJBNQorOjEwQUQ5MDAwMTZGMkY3MTQwMTVDNTYwOEI4RTA3OTAzNkQ3RkM3NTNDQgorOjEwQURBMDAwQUU3Qzg3MDFEREFERTg1OTM5MDc5Rjk3RUM1QUE1RUJEQQorOjEwQURCMDAwQUY1RTZEMjAzQTY0RUQ1Q0VFMzZDMzNGMjQzRkQ1MjI5MgorOjEwQURDMDAwMTVFN0YxRUQyRTg1QTUxN0UwRkRFMTA2RkREOUJENzk2QQorOjEwQUREMDAwMjM4QTlFNUJDMkZBRjdGNTRDMTNBRjJEMTgxQzk3N0ZBMAorOjEwQURFMDAwMzk1N0U0MjFFNkIwMUM2RDlDMjY0QTA3MEU1RjA0RDc1NAorOjEwQURGMDAwRkY5MUVBOEI0NTA3MjVFQ0EyNTQ4QUNGQkNBMzYyRUNGNQorOjEwQUUwMDAwODE3REM1OUFCNzVDQUU2OEUyRjcwNjc4RDhCMkY0RjRGMworOjEwQUUxMDAwOTBFMEQ1RDM0M0QyMTgzRDNEMjRGQkY0RjQ5MDNBNDU1RAorOjEwQUUyMDAwNEYwRjY5RkU3MUU3ODQ2RjdBOTU5RTNFOENGMDlEMDIwQworOjEwQUUzMDAwRkYyMDdDMjdFMENEOTAxODU3ODI3NTYyOUNGNzJGMDU4NAorOjEwQUU0MDAwREYyRjcyQzVCRTg3ODBFRkI3RUNGMjBBODc5NzNFRDczNworOjEwQUU1MDAwRDhDQkEyRjY0OUU5M0JDREI0NDk2QjhDN0I0QTM4NEE0MgorOjEwQUU2MDAwM0I0MUM2MkYyNzMxRUVBN0RCRjFCQzY1MjFEQTAxRENCRgorOjEwQUU3MDAwN0Y0M0ZEOEY3QzdFRDhDQUZEMzZBNDIwOTQ5MzM3QjFFMgorOjEwQUU4MDAwMjBDOUEzOUIwQ0ZBRkY2NkM3NDM1NkQ0RkY4M0Q2MEI5OQorOjEwQUU5MDAwMTYxN0RFMUI2ODVDMkZEQTUxNEMxMzRGMzJFQTdGQTU4MAorOjEwQUVBMDAwNUI4OTI0MTdFMzcyQkJBNTVDMEU5RTI1NjNDN0FGMENCQworOjEwQUVCMDAwNDU1RUZDREVFMUI3RTU3OTY4MUM2NjJGRDNDNTdCNjM5MAorOjEwQUVDMDAwREE3MzcyMUUxMjJFNzI3QzFCNkI1NkIzOTA5RUM3MThEQgorOjEwQUVEMDAwRUQyRkJEQkYyQ0ZENkJFQTU0MTM4Rjk2RkVCMUY0NEZERQorOjEwQUVFMDAwOEM3MDU2ODcxNzkwREQzNUQxMjlGREUyOUVFQkYxQkRDMAorOjEwQUVGMDAwRjQ4NzhEN0VFOEY5RjZBNUU2ODU5NERFOUYxNzQ0RUQ4QworOjEwQUYwMDAwQzkyQkM0NzM5RTg4MTdDMUIyN0VGQjZGRDBGODcyQzU3RgorOjEwQUYxMDAwM0IwQ0M3OUJCQkZCMjIwRkQyQ0I0NkE1OTkxOUU2NzcwQQorOjEwQUYyMDAwRjA1NUU4NDczNUY1QTdGM0Y4NEI1MEI3NUZGNUI2RDJDMworOjEwQUYzMDAwNEJGMzVFQzBGQ0Y3RTBCMzUxQzREMzFBQkJERUE2N0Q3MQorOjEwQUY0MDAwRDRDNjJFMUUyRjYwQkJGNDc4MzFEQUZCQUI1ODg3QjUyMAorOjEwQUY1MDAwNDAxOTZDRUYzN0IwMUVFQUNGNjhERjBGQTI5M0YzRTgxOQorOjEwQUY2MDAwRjE4RTNDNzlERjE2Q0YxNzYwNDIyRUQ1MDk3OEM1RjNGNAorOjEwQUY3MDAwMEJDQzA4RTBBOUQxRkIzQjgxMUZFNkU1NEQ4QUU2RDE2OQorOjEwQUY4MDAwNjZCOEMwOEY1MTMxMEZDMzZCOEQ5NTI3QzVGMDcyMTUxMAorOjEwQUY5MDAwQjA0OTk3M0I2QTQ4NEUyQzZGMUIxNDk3QjAxMjNGQjVDRgorOjEwQUZBMDAwOUY3QjdERDIwRUI4MUY3QzM3N0M5NkU2Nzk3OURDMjBCQQorOjEwQUZCMDAwNzFDRTNCN0VGQzVDREE5M0FGM0RGRkQxNjRFNUU3MEVEQQorOjEwQUZDMDAwNTlCM0ZFN0NGRURBM0M5MzNDM0ZBNTBFNjVGRDgzRTE2MAorOjEwQUZEMDAwRkFGREYyRjI2NUZFMDFDMEVGMkUyREZDRTQzRTgyNUMyQworOjEwQUZFMDAwQ0ZFRjI3RjUzQzg5RjE0MzM1NzlBNjFERkQ1QUFGMkJFQworOjEwQUZGMDAwRDg4MkY1ODcxREVDM0RBQ0EwM0M3Mzc4MjkzRkU0RTQ5MgorOjEwQjAwMDAwQUVBMzFGQTNGRjJFRDdDNzU4RUYxNkJDREZCNjZFOTdBRgorOjEwQjAxMDAwNEFGRTYwRERBRTM3QzgyRThBRUZFRkI1MEZEQ0EzMjAwNQorOjEwQjAyMDAwRjYzNzdFMTI2QjVFMzJBRkI5NTIyRDRBRURENUQ4RTlCNAorOjEwQjAzMDAwNEI4NTFGMzA3OTc4RTAyMTZDNTdGQTYxNUUwQUNFRDdENAorOjEwQjA0MDAwMzJBMjgzRUVDNUVBQkY4M0RCQzE2RTk1Q0Q0NEY4ODFBMQorOjEwQjA1MDAwREVFMzdBREY2MUE2N0QwNzc3NTI0ODRENDEzQjZFMjlEQQorOjEwQjA2MDAwRTNGN0QwRjk5QTdENDgyQUVBQjAyMjhBRDM2NkRDQTFCOAorOjEwQjA3MDAwMDZEMEZFRkU3NENERjIzNDNDQUY5QzkxQkMyMkFEMTBFNAorOjEwQjA4MDAwOUVEMzZERkM1RTlBMENDNTE0RTBFNzRFOTdBNUUxM0Q5QQorOjEwQjA5MDAwMjAzN0Q4RjhCRTdDQzE1RjI3NDUwQTgxREY1RUI3RjI1MgorOjEwQjBBMDAwRkI0NkRENDk0MUJBQkZBMDNGNERBNUY5MUM1QjA3NEJFQworOjEwQjBCMDAwMUI4NUZCMUVERjRDQzQ3QjA3NzJDRTM4MjZFMDdDQjJCQQorOjEwQjBDMDAwQzVCRDE2M0ZDQUUzRjdEQzFDN0ZGNkJCODlFOEFGQUExMworOjEwQjBEMDAwNjcxRDc0QkU1REQyOUZCQjMwQjZCRkIyNDJDMEEzRDE2NAorOjEwQjBFMDAwQzNGM0RFNEYwQUZCRjE5MEQ4NkY5NTc5RjA2QkM0M0U0NQorOjEwQjBGMDAwRTBBMUQxMDNGNzgzNzkzMDJGQTQzMUMxOUZCQTEwRTNDNworOjEwQjEwMDAwMTEwNzU0Q0E2QkZGQzZFOTRGNEQyM0JCOTlFN0IzQUY5NAorOjEwQjExMDAwMTFGNkMzNDk5MUY3Qjk2NkY2OEM0Q0Y0MkZFMkU1NEI3MgorOjEwQjEyMDAwMUZDOEUzNzZFRjBGNzU1RkE1Q0MzRjhEMEI4NzM0MzNENworOjEwQjEzMDAwMzM1RjQyRjcyRTA1Q0U1NUVGRDUzRkFCMzFFMTc5NUE1QgorOjEwQjE0MDAwN0M4Rjk3MzdERjk3QTdFOEYyRTIxQjMxMkYxRTVFQURBOQorOjEwQjE1MDAwNzlBNTNDOTM5RDIzNUZCQTExRUYyM0Q3RTREN0EwOUYzNQorOjEwQjE2MDAwODZFQjZCQzRGQkM4RTk5RUQyMTM3NDRGMDdGNjgzRjdENgorOjEwQjE3MDAwODY5REVGREVDODE1NjIxRThEOTg0RjlFQUU3RENGRjk3RAorOjEwQjE4MDAwMzlEQUJGOUJCRTNGMkRFMEY2RjQzQkE2QUE2RDMxRTY0RgorOjEwQjE5MDAwOTkzNzhDQ0JBNzcxMUU3MzAwRjcyNTJGOEVGMDdCM0Y1QworOjEwQjFBMDAwRTNENTkzRTdCOEUzQ0RBQjZCNDZFRjhEMzg2RkNDQ0ZFQgorOjEwQjFCMDAwOEMzNTVFQ0EzMDRFMjc3MkJFNURBRURFOTUwMUJFOUZGNQorOjEwQjFDMDAwMzdCQTNBNTk1Mzc2RjZFN0NGRDVDOEQ3RDkwMjNGNUQ5QgorOjEwQjFEMDAwNTdGNUU2RDM3RDAwQjNCOUZGMUEwRkNGNjVFNjY2MDVENAorOjEwQjFFMDAwRTE5MEUwMEEwNkQxMUU5MUY3MTVFMzdEQzYzQ0NGMjMxRQorOjEwQjFGMDAwNzQ0RTdDNDdFMUFDRUFDRTFGMEM4NkIzOTVCRUNCRkUwNQorOjEwQjIwMDAwQTREQzM5RkE4ODRBNzJFN0U4MDc4MjFGOTlERkExOTQyMworOjEwQjIxMDAwQTFCRUUyN0M3NTk0RjFCOEVFRDE3NkZFRkIxRkNCODIyNQorOjEwQjIyMDAwQTAyQjQwN0UyQ0RENUUzRjA3MEYxRkFGREMzMTcxMjM2QQorOjEwQjIzMDAwOEE3RjdDN0YzN0M4OUZBNTU5OEM0RDgzRTdCMjBERkE3MgorOjEwQjI0MDAwRkRCMTZGRDkwM0E0RTc1NjNDNjBENDY3MDEyQkNBRDk3RQorOjEwQjI1MDAwOTUwRkU5RUJEN0IxMDdCRTQ2RkJBMENFNjBGNzY2MDhCNQorOjEwQjI2MDAwQkQ2QkI0N0Y2NzBDMTNGNjZGMTkyQkJCOTA3MzRFOEZCOQorOjEwQjI3MDAwMzBGRkVDNjFBNEZGRjk3RURCMjRCMTlGNkVBQ0ZGQkMxNAorOjEwQjI4MDAwOTdEM0MzNkQzQkZFNjBDNTlGMDQ4QUQ3RUYzMTkwMTdGQgorOjEwQjI5MDAwMjNBMURGMTNFQjlDRjQ1QzMyQ0M1RjMzMENEQTM1MEQ2OQorOjEwQjJBMDAwMEIyRUM0NzFGQTBFNzAzODlGNkEzOEI1OTJFMkQyQjU4RgorOjEwQjJCMDAwREMwRUIwRTEyNTJCRjA5RkI2RUJFREU0NDdERjhCRjcxQQorOjEwQjJDMDAwOEMwMTlDNkQzNjZFNUY0OEJCNEE1NTZGNTdGMTI3NUIwQQorOjEwQjJEMDAwQTZGRTZFNDUxQUFFQ0ZGRENDQUMyQUY0M0YzQ0NGMjQ3RgorOjEwQjJFMDAwRjkxMTFGOUJDQUZEMjUyOEJGMzc1NTNCNjg5Rjc4QUJENgorOjEwQjJGMDAwODlERjQzNjhCN0YxRkRCOUYwRDM1M0Y3NjEzODc4NjQ1QgorOjEwQjMwMDAwQzdFNjE5RTg2NzM4QkJGNzQ2MzAyRUQxNjZFMkZCQUZENworOjEwQjMxMDAwNkREMzk4QjhDNzlBOEZEN0Q0NURERDg5RjNDQUFGMDFEMgorOjEwQjMyMDAwNzkwRkZENkQyQUYwOTczODM1RkQzMzYxMkYzNTBBNUNCMgorOjEwQjMzMDAwRjRCRDc2RDE0RkYxREVBQjlGQkY0M0U2MkFBQzczMDQ3OAorOjEwQjM0MDAwQzVCRkM2MzE0RTM3MzJCRjg0N0UxQjQzMTMyRjNBMDEyRgorOjEwQjM1MDAwRkE4NzY5Q0UzRjhGRUI1MDIyOTYxNEJBNUY4RkUyRDhGRQorOjEwQjM2MDAwMERFQjIzMTlEN0EzRkVGQzI1REZBRjk1RjM3M0JGOUUyQQorOjEwQjM3MDAwM0QwM0UzRkQ1MjlGNUU4RkY5NkQxODA3MTY3NkVGMjJBRAorOjEwQjM4MDAwMjZGRkY4N0U0MUFEQTBFQjQ1QzJERUJEM0U4OUMzNzkwNAorOjEwQjM5MDAwMTlGM0QxRjlBQkVCRUMyQzA1RTNDQkQ3NTc3NDRDQTJFNgorOjEwQjNBMDAwRkJBRkVCMkQ2OTY4QUZDOEI4NzczQ0JDQzc4QkNGMzQxNworOjEwQjNCMDAwM0U5OUNDRUZDQjUxRkE0NzYzMjdDNzMwMDY1MjFBQ0RERQorOjEwQjNDMDAwQjczN0Y2QjM2Mzk4RTBFN0QxQzI0RTFCQzlGQ0I4Q0ZEQworOjEwQjNEMDAwRDJCOEU3MjJDQUM3QjcyNUYyN0QzNTkwNkY3NkM0RUJBNQorOjEwQjNFMDAwN0VENEU3QjBFRTVCNUU0RDg4RjA3REUzQjBCODE3ODdBMgorOjEwQjNGMDAwODU2ODNGNjY0RjI2RUQyQkI4MEJGREI0RUY3RUQyRDJBOQorOjEwQjQwMDAwOUI0RkYyMDBFNDk3MDJCQTczQ0ZCMDRGQUUzMUUzRkQyOQorOjEwQjQxMDAwMjAzOTYwNDc0MUY5RjgyRjBFNUY4M0JGQ0ZEMjM4QTJBMQorOjEwQjQyMDAwNzcyNURFMTc5RUZFRjg1OTVFMUVENzdCMThDQkMzMUUwQworOjEwQjQzMDAwNEZCQzk2Q0ExMzdBNTdBQTUwOUVGMjc4RDZCNUQ0MUUzRQorOjEwQjQ0MDAwMUQyODIwQUNDQUM3ODc1RjhCRTdGQzhFODlGODI1RjNERgorOjEwQjQ1MDAwRjVEMjNENDE4REJCMkYzMjY5RTM4MzI1Rjk1QzRFMUY0OAorOjEwQjQ2MDAwNEJFMEY1OEUxNUIwMjU3MzExREU2MzdBNDc2QjdGMzc5RAorOjEwQjQ3MDAwQzE5MzJGRUQ1MjZFOTdDOTc1Q0E3NjJDMkI3NkZGRUZDQworOjEwQjQ4MDAwMEIzRDcwOEJCOERGNjc3QTEyNkI0QkUwRkIxNTIxQjQ3NAorOjEwQjQ5MDAwQUZERUVDQkU4OEUwRjJDMjMwOTc4MDU3MkZERERCMjhBQworOjEwQjRBMDAwRkIzMTlFRUY5N0UzQUU0MkJEOEQ3MkREQTIzRjRGRjRCQworOjEwQjRCMDAwMUJBMTJGNjA5QzBEMzQ0RTkxQkYwNEVGRTU2OTlDOUI0RQorOjEwQjRDMDAwNTc4Mjc4MDM3Qzk5MDVCRUNDREMwRkRDNEE3OEM2N0VCNworOjEwQjREMDAwRDM4QTQ5OEY0Q0M0M0NCMTM3Q0Y0MEZEODJFOEJDOEQ0NAorOjEwQjRFMDAwRjQ3MTU4OEM3MzRCMkJERjY3RUE0RjJCMjQzQTlBOUVFQQorOjEwQjRGMDAwQzRFRDNGNTYwQUYwMDMzOTM2NDVDMEFEMjQ1RjlDRTNFNgorOjEwQjUwMDAwMTlDMDQzQTY0MkZEQjcwQUY4RTVGMUZBMTdCQURFRDMyRgorOjEwQjUxMDAwM0ZEMDdBMzU3OEYyNjNERUYxOUJCQkM2MTI5RUE2MEM1MworOjEwQjUyMDAwRDBDMTY2NUQzRkM3NUEwQ0VEQTZGMEJDOTQ0NjU3MjFDQQorOjEwQjUzMDAwQjVCQjU3RENCMzJGRUYyREM2NzYwNUQwNkU3QTQ1RkYyRAorOjEwQjU0MDAwNDRFNDA3Nzk2RjFCMEI0RDIzNjdCRDQxNDg4QjgxN0IxQQorOjEwQjU1MDAwRDgzQTc4N0UwQTFCRTlFN0Y3MTFDRDlENTMyQUQ2RTc0MgorOjEwQjU2MDAwMTRFQjczNkFFRkE1MUJFMEMzOEZGQUYzNkIzNEY3NTI0OQorOjEwQjU3MDAwQ0JGNzAzNzAxRkU4QUY2ODgyRTg0RkM3Q0ZCMUZBNDMzQgorOjEwQjU4MDAwQkU4ODg3OEY3MUY5N0Y2MTdDQzg3OTFBRTAzOTAwNjdCRQorOjEwQjU5MDAwQzNGQzI0M0M5MThGQTk1RDkxOUU5RkU0M0M4N0U1OUI3MQorOjEwQjVBMDAwODRCRjZERTBFNzgyRUYzOTlFQzhFRjVGRkQzNzIyMUY1MQorOjEwQjVCMDAwRDJBQkE3RTdENTVEMDUyNkRDM0Y5NUVEREEzQTVBMDIxNgorOjEwQjVDMDAwMjhFNzY1QkNEQkQ2NTUxRDQyRkREN0Q0NUQ0RTc5OUI3RgorOjEwQjVEMDAwQUI3RkY1RUNDQjIxNjhCRkVBRjk4NzUzMzA5OUY2QTgyOQorOjEwQjVFMDAwQjkzRDAzRUREQzg2MURGN0E0Rjg3MUJGQzQxQzRBNDFDOAorOjEwQjVGMDAwRjk3OTM0QUM1NkM1M0EwRjE4MTI3ODkwNzY1NEEzRDAyNgorOjEwQjYwMDAwMzdDNzlFQkVGRjFBODRDNzdGRUNCMDM4NTE4RjM2M0RENgorOjEwQjYxMDAwNjU4QkQ4MjgwRTcyMEJEOTUxNTBGRTlDOTdFRkZEMUFGRQorOjEwQjYyMDAwRkREMkE2NUQ3QTNCNjlENTNGM0M5Q0UxMjU3QTBBRTVDRgorOjEwQjYzMDAwOUFGMDhDMEI4QkU0MzI3ODM2NkVCN0Y4MjI2RTFFNEY4MAorOjEwQjY0MDAwODQ2MTU4MTNFQkRGODhGMzMzQjZDNzc5OUMwNkJDMzdBNworOjEwQjY1MDAwNzVBODRCRjEzQ0FGRjEzQjQ4MTJCMkMzOUFCQUVFMjc0MgorOjEwQjY2MDAwQkJBQjQ5MUI2NzAwM0NENEM1QjFCQjZFQ0REN0U3NUIxNAorOjEwQjY3MDAwNEJCOEIwQjA4N0VDOUFENjVGRkVBQ0Y4NzMwN0RFQTc4NAorOjEwQjY4MDAwRjk0RjI5NEE5MTU2NUZBRTI3Mzg5REVBNThGRUY3QkIxRAorOjEwQjY5MDAwQkRGMUY1RUE0OUI0MEI2Q0RBNzYxQ0FGREU1RDBBRUQ1QworOjEwQjZBMDAwNDlCMDZFRkU2Q0IwNDQ1MkQwQ0Y2RkQ4NkFGMTgxRTZEQgorOjEwQjZCMDAwNjUwRENGM0VGMTI0RUU4N0IwNEY2Qzc0RkY0MUZEQjNCMgorOjEwQjZDMDAwRkIzRkJFMTRDQUY1OUQxNkY3MUMzRTdEODc5MjExQzUzRgorOjEwQjZEMDAwNEY5Mzk3REIyNzEyMUZBQjVFREM0RkY3MENFMjdCQjQ3NgorOjEwQjZFMDAwNkIyNTVFRUEzQkY3NUFEOUY4QzFGMEFCRThEODJCN0U2MAorOjEwQjZGMDAwNzdDMTgwOUY4RUNGQUZBNEZCM0M3RkY5OUQxNUU5RkFGRgorOjEwQjcwMDAwRTgxRTg1NjUxNjBDNkU1RkI3NzU3RjBBRDIxRkMyMDlFOQorOjEwQjcxMDAwRkQ0Qjg5QTcwMUJDMERDMjU3RTQ5QUREQTU1NDhGRTIwOQorOjEwQjcyMDAwMUFGMUYwMzYzNzlGRjE3OEQwQUY5RTdEMEU3RjA3QjBDQgorOjEwQjczMDAwRUUzNzM2MUZBRUJGRUVCOURCNTM3MDFENUY5OTlCMzlGNAorOjEwQjc0MDAwN0RGRkUyOUUwQzNGOEM1QjY3MDk2NTM4RTlDOURGRDc1NgorOjEwQjc1MDAwM0Q3RTA3RDFERENEMDdFRUM4RTBCRkE3RTFDRjM2NEQ3NgorOjEwQjc2MDAwQTE3NTY2RTNGQTZFN0E2QzNFQUQ2RjI1MEIxMkRERDVERQorOjEwQjc3MDAwRkQ4MkM3MjdCRTE1QkZDNzYwQzRFNzY5QzExRjVGNkRFMworOjEwQjc4MDAwQjNFMThGNjRCMEFGMzAxMTFERjMwODNGNTA0NTlFRUYxOQorOjEwQjc5MDAwQUQ0QzdCOEYwNTU4REM1NEZFNTZDNDA3REUxRkQwMDMyQQorOjEwQjdBMDAwQ0NDRTM0NzFEOUE2RURGN0Y2MjA3RThFMERGMzY3RTI4QworOjEwQjdCMDAwQkUxQUMwMjEyNEUwQTVFMEZEQkFFQTgxQ0E0QzhFMUY2MgorOjEwQjdDMDAwRTYzNUNCQjgzMkQ4REYxNUY4MUVFQkY3NThGQzA5QzVDMworOjEwQjdEMDAwQkE3NjYyQkY5RThGMkZFMzEzMzBFRjQ0RENGN0ZCMkE2QgorOjEwQjdFMDAwMjNGNkI5QUREMUMzMTUyMURGNTgwRkQzRDI1NzNDN0UxNAorOjEwQjdGMDAwREY3RTFGRDFENTM3MUY3MUJFNjkwQzU3NTdEMUY3MUU5OQorOjEwQjgwMDAwNEIwNDhGMTYzNzg2RjdENjI4MjQwRjZDQkFGQjlGMDY5OQorOjEwQjgxMDAwRTg2MkJCNDVGMEIzRkUzQkNDRDNBQzY4RTFCQjg3RTc0NQorOjEwQjgyMDAwRDVBRTdDQzhBNkJCMEYyMTRBMzdENkU4RkI4MjI4N0Y1RAorOjEwQjgzMDAwNEEzRkVBNjZDMUZGQzZGNTFBRTVDMTFGMENGMjgwM0QxQQorOjEwQjg0MDAwRTYxOUQyQkQzMjBEOTZGMDkzOEYyMkZGMDJCRkEyOUY2MAorOjEwQjg1MDAwRDlGMEFDODVGQ0ZDRTMzQkRGRjhGODNBQTBGM0UzMUQzQworOjEwQjg2MDAwOTI2RkY1NzJENUM4Qjc3NTJGNEM2MkIxRjhGNkI4QzNCMAorOjEwQjg3MDAwQzc2MkYyMkRCQzhGQzlCNzhFRTgzRThEOTdGRDcwNzJGRQorOjEwQjg4MDAwRjVFNjM4NzIzNTZGQjhGMTFDNEI1MTJBRTZCQTFGN0JDQQorOjEwQjg5MDAwQkE3RTM4QzUwNTBDNzA5NUZFQUM1MTVFQkU5Q0VGOEQyRQorOjEwQjhBMDAwMjkyRjE5NUU0MUE1ODFBMzg0OUZBNEM3NTVDRkFDQTZCQgorOjEwQjhCMDAwNzEwNkU4NTZEMkE1QTREQjAxQkExQzk0NUZBOTgzQTM0NAorOjEwQjhDMDAwRjFGQjE3Mjg4RjI2NDVGMTZFNTkwRjdFMEFEQUIxQUZDQQorOjEwQjhEMDAwQTlGNDNCMjg3RDMwOTc4RDAwRjdCRTlEMDVCNDBGN0EwMworOjEwQjhFMDAwOEZCMEYzRkI5Q0ZEMjkxOEQ3QkI0N0Y4MTVGRDE4NEYwNworOjEwQjhGMDAwNEM4REJFRUY0RjEwNzkwMzgxRkU5NDM0OEQ1REY0Nzk0OQorOjEwQjkwMDAwQjc5QTgyNzY1QzZGMzhGNkVGQzlDQTdCMkE3QkUzRkM3NAorOjEwQjkxMDAwREVBQzNDQkY1NEE5M0FGMkQ3NjI5Q0I2OURFRjRGQUU2NQorOjEwQjkyMDAwNjg1OTk4ODJGMThDQkVFRTQyRkEzREExOUJERTA1N0ZGQworOjEwQjkzMDAwMTdFNkRCMjdFMzlBMjFCRjM5QkIyQzdBQkZFOTExMTY0MgorOjEwQjk0MDAwQTJGRENBRTVEREY1QjQ1RjY4OEM4M0FDNzRENEE0RTJEMworOjEwQjk1MDAwN0VBMDMxMEU3MjMzRTY0MTYxMUVGMjYzRkFGN0FCMzAxRQorOjEwQjk2MDAwM0U4Mjc4MzJEMDUzMTBFOTI5N0IzMDNEQUQxQzJFRjY1MworOjEwQjk3MDAwNUY0QjU4ODk2RUZGNTVDOEI1NEFCNUU4QTc2ODlGRjQ3NAorOjEwQjk4MDAwODFERjhFRjEyMEE2MTZGRDFBRjVFOUI3RThDNzIzMDM3QgorOjEwQjk5MDAwODQzQzQ0QTdGNUMxMjMzMkNGOEFFODVBRDI5REQxN0Y5NworOjEwQjlBMDAwMzczRTRGQkNGNDY5MTk5RTA3NkE3OEY5REY4QTdGMEUyQgorOjEwQjlCMDAwQ0YxMzJGN0YzMkZBNTUyQ0ZGRUE1RkYzRkY4RDBEQUVDOAorOjEwQjlDMDAwNUZCMUU3OEZFNEFGRjRFREIxRDE3Q0ZBRjZCQzlEN0ZCNworOjEwQjlEMDAwMTc5Njc3REI3QzM4REZCRUY1MzZGRTdCRDA3QjkyRTlBRAorOjEwQjlFMDAwREVFOUJFNjEzQ0NFRDZGQURBNzdDNUJEQTRBNzM2MTAzMworOjEwQjlGMDAwREVGRTZFMzhCRjJGRjY1NEY3N0Y3RDg2RjdBQjlFRUFFQQorOjEwQkEwMDAwQjY3OTMxRUVEMEI0Mjc4OUZDRjBBNkREMDk3NDRGN0NGRAorOjEwQkExMDAwREY2QkRGOTU2OUUzNDVGRkRERjUzNDhBRjMxNjdEQzlGOQorOjEwQkEyMDAwQUMxNkYzNUJGQUQyQjhCRkQ2RjRFQUQ0Mjc1QTBBRDBFMAorOjEwQkEzMDAwMkVERDRCRjcxNjU3QkNGRUE3NjI5NDNGN0QyRjcwQkJERgorOjEwQkE0MDAwMDJGQ0YzQzc3MTEzRjExN0MzQkI3RjZBOTk4QUU3OERCNAorOjEwQkE1MDAwMThGOUQ1NTNCRDdGQkEzNkU0ODgwNTE3MEU4NzNFODBBNgorOjEwQkE2MDAwMDNBRTBCRTA0MkY3NzVDNzgzNDdENzcwN0UwRkZGRkYyOQorOjEwQkE3MDAwM0U3ODdDNERGRTQyNDNGNzY0RTJBMzI4NUMxNEZFRkI1MworOjEwQkE4MDAwMjNEREM5NjFCQjQyRUJFN0VGRjc3QzU3OEM3NkQyRjEzRgorOjEwQkE5MDAwOEUxNkQyRkJFNzVCRjc4N0ZGNkJFOUUwRkJBRTVCODlCNQorOjEwQkFBMDAwMEM2NUREQTdGRUQ3QUU5QkQzRkZEQUUxNUMzRjE5Rjk0OQorOjEwQkFCMDAwNjAzMDlERkZFQUFGQTlGQzVDQjI4RkU2NkJFMEZGRkY1MAorOjEwQkFDMDAwMDdBQkEzNTlGMzAwODAwMDAwMDAwMDAwMUY4QjA4MDBBMworOjEwQkFEMDAwMDAwMDAwMDAwMDBCQ0QzQzBCNzgxNEQ1QjlGRkVDQ0M3NgorOjEwQkFFMDAwM0U5MjZDQzIyNjA0MDg0MjYwRjIyNDRBMUUwQjc5MTA3MgorOjEwQkFGMDAwMUVBOTlCODQyMDA4RTIwNkE0QTIyMjJFRjhFMDE1OTIzQgorOjEwQkIwMDAwMDhCNkM2NkFDRDYyMjIwMkY1QjY1MTZDQUY2REQxNkYzMAorOjEwQkIxMDAwNDE0MURBREE2QjhBNDFCMTAyNUQxMDExNUFBQUFCODI1NworOjEwQkIyMDAwQTI0NkJBNTJBQjUwMDMxQjQxMDUyQUJEREVGRkZGQ0YzMAorOjEwQkIzMDAwNENCMjMzMjQzQ0ZDQUVERkQ3RTQyM0M3MzNFN0NDMzkyNworOjEwQkI0MDAwRkZGQjc1Q0UxODQ5ODU5OUFEQjkwMDREREI0RUU1ODdGMQorOjEwQkI1MDAwQjEwNTY4MDYyODA2NDg1MjZEMDBGRDAwNEU2Q0ZERkFERQorOjEwQkI2MDAwOTA5NDRDQUQ1RDg1MzQ4MEJBRUQ3MTAwNDVEOEZFMzFCRQorOjEwQkI3MDAwMjYwMDEyNDA2NERCQTkxMjlGMTNFMDFCRkFCOTEyQTA0MQorOjEwQkI4MDAwQTMxMTk3MThENkREMzdCNzFEOUIzRjJDQjkxN0E3RDQ0MworOjEwQkI5MDAwQkNGMDQxRkVBRkIxRUQ3OEUxQkRFQzk3QTlGRkUyQkI4RgorOjEwQkJBMDAwNDMzRUMwQjZENjA2QkU1NjVDMkYxMjBGMzMzNzIxM0MzQgorOjEwQkJCMDAwOTE0NEYwMDBFRTVGRjdGMkU4QTc5NkUxRkU4QkRCM0VFMgorOjEwQkJDMDAwOUY0REZCRDc2QzFEMDUzMkY2MkJGRkY0RUZGQzMwQ0RGQgorOjEwQkJEMDAwREYyNDc5QzRGM0Y4ODAwM0UxQUFEQzdFNDYzQ0RGN0VGMworOjEwQkJFMDAwMkExRkIwRkQ2QzkzMTQ5NDEzQjBGRjgwN0Q3RTgwRDYyNQorOjEwQkJGMDAwRUQwNUVGMTE4NDc3RjE3RjIyREUzQjZDQjdFMjc4QzM2RAorOjEwQkMwMDAwNTA5NUUxRUJDNjdCODcwREYyMDhERkJEQjM2OTdFNjQxQQorOjEwQkMxMDAwN0JCQ0NCOUU0NkYwRkQ3QjA4NDRFMTdGMjFCQ0JERkY5MQorOjEwQkMyMDAwQjFGQzNFM0ZERTAwN0U4NkRCMkE3QjFERTkwOERGQzNEOAorOjEwQkMzMDAwMTAwQ0E5RDgzRTA4MzBCMUQ1NzkyRTNDM0ZBNkMxNjI4MAorOjEwQkM0MDAwN0EwRjQyRDAxRjQwMDZGMTIzMjcyRjlDMDIwOUQ0QUU2MQorOjEwQkM1MDAwRkE1Q0NFQTdGN0E3NEQ0QzQzMzhGQ0FBQzVCRDVFQTUzQworOjEwQkM2MDAwMTkxNkE2QzM4QUMxRUVDMDJBODQwQjE0RUZGQ0I1RDhGRQorOjEwQkM3MDAwQjcwRUFENzFBRkUyMTVFRTA0MjgwMUY4ODE0MzVCQUY1QQorOjEwQkM4MDAwRkY5NDg5MTJBRUQ3QjQwQ0UxQzI3NTlBRkE1OTVDNEQ5MworOjEwQkM5MDAwQjg4RUEyNUE4MkY2N0M2RTNGQTJGNkExRkU1N0VGQTFBMworOjEwQkNBMDAwN0QxNUE3MEQ4MkRBQkJERkUwM0YyNzYwM0Y0N0VCRTM1RQorOjEwQkNCMDAwN0VCMTk5NTE3REZDMTcwMzNCNUQwQUVFMUZFMzU2MjBEMAorOjEwQkNDMDAwODAyOEQ5MjFFQTdEOUM3RjkzRUE2MkJBQzQ0MkMwRUYwMgorOjEwQkNEMDAwNzI1RTNBOUQ3RTRGODNGRDdBQTc5Mzk5M0UzQUREQ0UwMAorOjEwQkNFMDAwQTExMzgwODNERTU3RThCRjA4RkZFNDU1MjFEMjQzMDU0NgorOjEwQkNGMDAwMTQ3RjU4RTAyMzdEMjMxMTNEREQyOTBFNUNDRkRBRTc2OAorOjEwQkQwMDAwMEVGNzJBODk5RkFCNEE4OUY2OUU4NUZFMkMzMUQwMTcwMworOjEwQkQxMDAwRTlFNzg5QzlFRkE2NzNENDdBOENCRjk5Q0U5NzRBNUZCOQorOjEwQkQyMDAwOUQyRjMxMzA4REY5MUMzM0Q4RTkwRTIwRkMwRkFBODJFQgorOjEwQkQzMDAwRUUwRjIyREQyNUE5OUJCRTNBRERDQzdDRjA5M0VDMTRGRQorOjEwQkQ0MDAwNzdEM0JGQkIxREU3RkE2NDM4MzMxMkJFNDFFMkZBMkI0QQorOjEwQkQ1MDAwMjBBNzFFRDdBOTkyQzc4NUZEQjhGRTg5RDIzOEI3OUQwNgorOjEwQkQ2MDAwRjQ0NTgyQTAzNDEyREJGMkZFMTU4MDc4NzRBNERBMTQ1NAorOjEwQkQ3MDAwNkFDQjNBMTFBNzI4NzhBRjNDRUQwMDI1MEFCRjcyNDg3QworOjEwQkQ4MDAwMzRGNDNCNTJCM0Y5RkQ0QUM3NDBDMzdCMUQwMzRCMUQzRQorOjEwQkQ5MDAwRjRCQ0NBOTU2Njk4RkY0NjRDNDIzRTE0RDA3QjEzMjZFRAorOjEwQkRBMDAwRDJGODU1Mjk5NzFCREU5QjdBQjg2M0NEMUM2Q0FGOTVGMgorOjEwQkRCMDAwQzI0NTI0MUMxRDdCNjc1NTEwQkQyNkE5MjMwQ0YzQjY3NAorOjEwQkRDMDAwQTA1OTIxN0RFRUFDOTIwM0VCOTAxRUQ1NTJCMDdGM0U4MAorOjEwQkREMDAwRDI2RDcyQ0U2ODIzN0MxMjhDMjczQzZCMkMyODVBMzg4QgorOjEwQkRFMDAwRUYxQTc3Qjk2MUZDREFEMjQ5ODY3NUFCM0RENTg2N0UwQworOjEwQkRGMDAwNERDMzU3QTBGNDA1MThEQjcwMTY5NDQyQjRFM0MxNTY0NgorOjEwQkUwMDAwQzNGQjg1N0JCNjE4RTYyN0VDMDMzOTFFREIxMUZCRDU5NworOjEwQkUxMDAwMjY2QTBCREI0MzQ5MjRCRUI2QkUwRUJGQTUwRjhBNzA0RgorOjEwQkUyMDAwRDg1Qjg5RTg0MEM5OTFGQTU3QTg2RDcwMjAzREYwRjlCOAorOjEwQkUzMDAwQTkxOEQxMjJCRjU4Q0VGRDg3NjIwMjREMDhFRjI5NEJDOQorOjEwQkU0MDAwQzA0Nzc0Qjg1QjBFRTQ1MDFCM0JFODhFN0M0ODA3Mzg1MworOjEwQkU1MDAwOUFGMkIwREM4N0UwMDc1RkE3OEE3MjMwRkE4QjQwMTM1MgorOjEwQkU2MDAwRjVBRjNDREIyQUZCQzgwRTZGOTRGREI2MDJFMkZCOTRGMworOjEwQkU3MDAwQjhCRjkyREQ2RDk1ODBGODVFRTNCNDc4MDJFNEI3OTJDNgorOjEwQkU4MDAwNUFGMzk3NDZDOUQ3NjczRjg0NUJCQ0I5RTdFQUVCOEJBNworOjEwQkU5MDAwNTlFNTk2MzQ1Q0JGMzlDNUQzQjI4M0VDNjZDNTg3QjMyOAorOjEwQkVBMDAwRTVGNDczRTc4MTRCRTkwQ0VCNzQ0OUE3RjdCQzQ1ODNENAorOjEwQkVCMDAwNTExRUU1RjhGMTBFQjJFQkIxOTUzMkUzMDU1NzU5MDM4NworOjEwQkVDMDAwRUI3MTlERTUxNjc3OENBNkZDRUM1RjVEMTNBQzZCNDlCRQorOjEwQkVEMDAwQUZEN0E0MDlGQjEwRkIxNzUwMjU4NDNGQjZBRjRGQ0U1OAorOjEwQkVFMDAwQTNGNzdFMjZDMTdBRThERUVGRDY1MjYwM0NCMkQyMkNCMAorOjEwQkVGMDAwNDIwRjE0NTdCRjlCRjNFOEZENzg3RUJGQTQ1NEQwMTFDNgorOjEwQkYwMDAwQTY1ODAyNTlCODY0QzI0MUY3NkUyQkY2NTdFN0VDNzc5MgorOjEwQkYxMDAwOTExOTY4OUI3MkQ4MkYyMzVEREEwRTg2Q0EyNEQ0QTVBNgorOjEwQkYyMDAwMDEwRjk3OUZDQzE0RjMyMTBCRkI2RDM5RTNFM0YyRDg5QgorOjEwQkYzMDAwOEZFNTU4QzhDRTJDNDFCMzQ3NzY2NjQ3RDkzMzM5RTRFQworOjEwQkY0MDAwMjc5NjVDN0VDNTAwRThDMUJFRTk2REMyNjkwOUQ0QzIwRQorOjEwQkY1MDAwRUVGRTlBMzQ5NUUxNEE1MEMyNDA3QTlENzA1QUUxNzFFMgorOjEwQkY2MDAwNjhDOEI2OTBGREQxRDc0Rjk4QTVCRUJCOTRFMEQ4NjMwMgorOjEwQkY3MDAwODUyQ0RBNUVGMTJDMjIzQzU2NUREMUFFQUU2MjNDMDREQgorOjEwQkY4MDAwREUwMEUxMTQyRkEyRkE0RkY0OTMyQTMxNTYwOUE3REMwMAorOjEwQkY5MDAwMUM3RjJFMUNGRkRDNTg5Q0E4MjIxRTdEQ0JERDg5NkVFOQorOjEwQkZBMDAwNkE3RjhGNDQxRkMzNzRGNzEzMUQ3RTRBN0YyRUEzREU2MgorOjEwQkZCMDAwREFEMDc4MUNERjQ4MzY1MThDMDcwMUU1N0E5NTREMUJBNQorOjEwQkZDMDAwMjc5MzgyRkRCRTkyMzZFRTVGRUIxRDRGN0M5NThERjM3RAorOjEwQkZEMDAwMEJEMkJCRTY3QjFDMjlEREVCN0JEN0FFMEQzNUY3NDhEQQorOjEwQkZFMDAwNEYzQkZCRTU1NTEzQUMwMUJCNzQzMTc0OERCQjAwNUQ1OQorOjEwQkZGMDAwMTMwNDVEQ0ZBMkY1Qzc3REVFNzI4ODdEM0U5NkQ0MjFGNQorOjEwQzAwMDAwMjQ2RkFCMkQ2ODA1MzIwMEY2QkI3Q0Q3OTM1Q0M3Q0FBMgorOjEwQzAxMDAwQzEzQzdBM0UzN0MxMzNBMDBDRTVBRkNERTYxOTcyMEZCMworOjEwQzAyMDAwRDk5NTZEMzFFRTc1Rjg1RUY1OUQ5RjNEREU0MDdBM0QwOAorOjEwQzAzMDAwRjU5RjM5Q0QyNDM3OEEyNzZFMjRFRTUzRTdGQThBRUQyRgorOjEwQzA0MDAwNDE5NTlDREI4N0UyOUQyRTNBOTIzQ0UzOUUzRkI1NzQ3RQorOjEwQzA1MDAwRjdDOTNFMjQ3NEQzRDU5Mzg5RTNBQkEyRThFQzcwOTA4MgorOjEwQzA2MDAwRkQxMkZENDdEM0RBQkM0Q0E3REIxQzRDQTdBNTlBNEVBQQorOjEwQzA3MDAwMzUyNzQyOEIwNUY1RTFBNDZCQzNGNzQ5MUU0RTZFQjQxQworOjEwQzA4MDAwMDJDNTRENkQzNDQ4RkUzMkM3QzE3QTA1QzlFMTk0NkFENAorOjEwQzA5MDAwRDQ4M0JDMzcyRDVFOEFDQkRBNTEzRTNDMjQxRkY1RDlDMAorOjEwQzBBMDAwODZGNTRFOEU3QjM3MjkwRkRGM0I5OUFDMjQxMTdEMTYyOAorOjEwQzBCMDAwODY2RDRDQjc5QjE1MDhEQUQxNUVCNjI1REY1NjU5Q0U5MgorOjEwQzBDMDAwRkFBMUYyNzhBQkI2Q0U2QjU5OUVGQkQyRDhFRjhDNzc0MworOjEwQzBEMDAwN0Q4Mjc4NDk5RTMxRjIzN0MzN0JFNzE3NzlEMDRGNzQ2MAorOjEwQzBFMDAwRkI4ODc0QUUyMzM0OTM3QTk3ODNFNjcyNDc4MEUyQ0M2MAorOjEwQzBGMDAwQkFEMjY1QjlFNDFGOTYyNDY2MEYwMEM0QTM2RUJDQzQwRgorOjEwQzEwMDAwRkVCNkFFRTEwQkE2QkJCRUJFNzI1QTA2QjU2Rjc3N0YxOAorOjEwQzExMDAwN0M4NkNBRjY0MDUxM0MyQzBGQ0E2OTFCOEZENzM0OUNEMQorOjEwQzEyMDAwNjQzQjhFRTBBNDkxREU3NDJDMTNGNkFFQzUwQUI3NTRCRQorOjEwQzEzMDAwNjM1QkYzQkZGMjJERDUzOEJGMDY0MzBDRjYxN0IwRDNCRgorOjEwQzE0MDAwQjYyNENBMUU0MkVCRTc1RDc2QkYwMDc5Qjc3QUNBNUJCOAorOjEwQzE1MDAwQjE2NDY3QUIyNUQ3MEM0MDFDOEVBNkJCQUE5NUQxRDg3RAorOjEwQzE2MDAwOEY3MUNEOTBCMERGQjZFRThDOTdGQkE5QUUxOTE2RUNBRgorOjEwQzE3MDAwRUY0QUJCNDk4QzBGNzRGRERDRTIwNkY4N0NERDVEQTI2MgorOjEwQzE4MDAwOUZFNjNBNDBGRDBGRDMxRUE5NTYwNjYyM0Y1RUM4QzEyNgorOjEwQzE5MDAwNkZEMjZBQUJGREI5MjQ1RjRFQTZDQjg5MTU3MUFDMUY3NworOjEwQzFBMDAwQkREMTc5NUVDM0NCMDZCQTlDMzMyRTRCQjc3OEM5NkUyRQorOjEwQzFCMDAwQ0MxNDc2RjFEOENBNDE2QjM5MUVDQTBDNjVEMzlFNUI4QworOjEwQzFDMDAwRDM0NEZDREExRjc5NTM4QUZGNUU0NUJENzcyMDFEOTI2OAorOjEwQzFEMDAwMzNDMDYzQzFGOUM5MkZBMjNGQTJGOTFGODc4NjEwRkRBMgorOjEwQzFFMDAwRTZCRDE4MTM5NDkwMUY4QjlGNzhDNTQ2RkU2OEFFQUNEMQorOjEwQzFGMDAwNjY5MzVFQkQzRkNDQjc5M0U0RTM3ODdDODhGQkYzMUE4QgorOjEwQzIwMDAwQjYzMzVDMjk1OTJFNjFBNzVEOURCOTVFOTRDRkY5RDBGNAorOjEwQzIxMDAwNjJBM0YxRjlBMDFDMjZCRjYxNDE2MUE2Qjg2NkExNzNCMworOjEwQzIyMDAwOTc4REUyQjI4NTRGNUIwRjg3QTNGQ0VBMjIwODFGMjI5RAorOjEwQzIzMDAwM0RBRDc5RDY3QTM4MUNFNTdGODFERThGOTJBRkMzMTY4QgorOjEwQzI0MDAwMDE4N0EyRDE2M0FFMUM5QTZEMTM3MDFEMjBCODE2MjcwQQorOjEwQzI1MDAwNjE3QzJGOTNCQjA4RjVGNzcxNUM1NDkzQzM3OTQ5NEEwRAorOjEwQzI2MDAwMkM5MERDMkRCRkVDRkQ3QzVGMEY3RUIwQjUxMUZEM0U0OAorOjEwQzI3MDAwQUFEQ0E2QzYyRERDQUVDMTM1QzlFRTBDNTBDMjM2MzdERAorOjEwQzI4MDAwQUU1M0FCRDlFNTkyRDA2MTFCNDRCRDdGNDJBMzZCOUZGNworOjEwQzI5MDAwMkQxMjhGRUJGNkEyN0IzQzVFRDAyNUQ3MzNDMjgyNzA4NQorOjEwQzJBMDAwMkM5RUI2NkYxQ0YxNDVFN0U3OTU3MUQwMUE5M0M0N0NCQworOjEwQzJCMDAwNzE2QjdDNzExMzVGNzRGQTIzM0QwQjE1N0M2RkQ3NTkzQQorOjEwQzJDMDAwN0MyRkFEMjdCOUQwRTkyRkUwNkQ4QjE1RjZBMjczNzNFMworOjEwQzJEMDAwMENDNzRENjZGOEUzRDIwNUJDM0ExRTQzRDNDRjBGRkYxRgorOjEwQzJFMDAwRDBGNEVGMDZGRUExRTk0MjhGQ0Q3OEU4N0FBQzNGRDdEMworOjEwQzJGMDAwRjVEODhDQjcwRUY3QTVDQjU5Qzg3NjMxNzJBNkRCOTk2NQorOjEwQzMwMDAwNUFGMEU1RDBGQUJBNUREMUU5QUNDM0E5RDNBQjhERjI0RQorOjEwQzMxMDAwQTExRUUwNTQxQTVFMzJFMEEzODQyQTI4ODk4MDcxRTlDNAorOjEwQzMyMDAwRTlDMjhFQjU0RTAyRTI4M0QyQjA5NUU3NUQyQTNFQkFFRAorOjEwQzMzMDAwQkRFRDBEMkZERENFOUFGMUQzRURBRDhFQTc2RTc3NzVFNQorOjEwQzM0MDAwN0NDQkQwOTBCMDNEQzQzNDlFRjJBQzJCNEZGQjBDNzEzMworOjEwQzM1MDAwNzAzOTJDMzBDNEM5OTU4RTNCMERGRDJBRDczRDg2RjkyNgorOjEwQzM2MDAwNTdBNTJDMzM4QzRGNTI1NzFBQzYyN0U3M0M2MkU4NUYxQgorOjEwQzM3MDAwRTNGRUE1Mjk4RTVGNkI4QUUzN0Y2MzE4MUYxNzBFNzE5QQorOjEwQzM4MDAwRENGRDdBRTM0NDUwOTA0N0RGM0JEMkM5RjE3N0IwRDE2RQorOjEwQzM5MDAwQzVGRDlEOEQyOURDRUU2QTU0NTlCRjc3MzdFNjcwQkIyOQorOjEwQzNBMDAwQTdEMUNEQ0ZGRkRDNThDQUVEQkU0NjBGQjdBMTQ2MkZBRgorOjEwQzNCMDAwQjc2NkJCMzBGNUY5RUIxNUNBNTc0QTQzMkQ5NTY0Q0FFOQorOjEwQzNDMDAwNzc2NEY4N0U5MjhFRjQ3QkMzMTI2ODhBNDczQThENkE0RQorOjEwQzNEMDAwMTdGMTM5Q0MzN0ZCRTM1Mzg3RUUyNUJGRUVCMkI5Qzk2RAorOjEwQzNFMDAwMUYzNkVGMTgyREE5M0RDNDczMDlFOEVGM0M1MUYyOTJCNgorOjEwQzNGMDAwMzAyNTBDMUU4QTdCRDAzREY3MjQ1RjJERTkxNjk2NDcyOQorOjEwQzQwMDAwMzJGQjgwN0EzN0QzMDFENjY0RDRCNzk5MzMyNTc3MTNCQQorOjEwQzQxMDAwRjA3MzNGMjQ3MTFCRjRFMUY4NTQwNUZDRTRGRkFCOUQ3RAorOjEwQzQyMDAwNEFEMDlFQzBBMDc5MUQwOEU3MEMwMTI2RDg2OTlDRkM2MworOjEwQzQzMDAwNzc3MjVGODVFMkQ2RUJFODIxQzIyQjdCNjRGODFFM0U2MworOjEwQzQ0MDAwOUY1MUZBOTczMzk0MzdERkU4NkNCNTkyOUNEQ0IwRTdFNAorOjEwQzQ1MDAwODE2M0Y3RTIzODM0RkI4QjQ5M0ZCQUUyMDZGRkZCOTY3MworOjEwQzQ2MDAwNEI4OTFCNUEyOEFFNDQzQTQ2MjQ3N0M4NDNGMTRFQTI2MgorOjEwQzQ3MDAwRTI4RUNFMDdGNEY2QjY3NDkxMEY0QzZERjJDQjA5NDhGQworOjEwQzQ4MDAwQ0ZDRTM3ODFFMzM4NUQxRjExQkYxNTA0QkZBRTE3RDU3RQorOjEwQzQ5MDAwMkUyNTM4MkM4MUZDRkQyMzk1MzRCRjY2QkZDQTc0RDE4QworOjEwQzRBMDAwRjU0MkQ3MDMzRDBGRDRGNUEwNEE3RUI2ODlFNjlGMzgwMgorOjEwQzRCMDAwMDg5QzRGOEZFQUYwMUQ3OTlFRjAzNEM1OURBNTlEMkRGNworOjEwQzRDMDAwOTU5NDk3NUQyODZGMUM3M0JBRjUxNTlBQjdCREQxQzdCRgorOjEwQzREMDAwNzJCNEI1NzEyNkI3QzFDNkY5OUE3Q0Q2NzM3RjU3NjMxQgorOjEwQzRFMDAwMDNGNzc3MzdGQUI5REREM0I4NDI5M0NGMTYxRURGRDdGQgorOjEwQzRGMDAwRjgzOEY3NUY2RjBDNjg3MkJBOTE5RjhGQ0YxMEZFRjcxNAorOjEwQzUwMDAwOEI1MEU1MDA5MkJGMTdEMzQ1MUQwNzFDRTU5QzQ3ODA2MworOjEwQzUxMDAwMjJEQThCOTU5MzlBOTQ5NzQ1M0M2NTkyMEZCMzVDRTgyOQorOjEwQzUyMDAwRjIwMDY4MzcyNEE0RDc4REU4NjdDOTNGREMwNEZFQkM1RAorOjEwQzUzMDAwMzlEOENFOUNENzYyMUQyQjdEN0JCOTU4RTg2Q0U2RjhDNAorOjEwQzU0MDAwQzM2QzBGMTc0MDkwRUREREI5RjY1REM0RkYxN0IyRUY3NQorOjEwQzU1MDAwMzJFNkFCRTRBRjc0RkJCNzE4QzJCQzlFNURCRUQzNERGMAorOjEwQzU2MDAwRjU5NEVGQ0VBRkI4MzRCRjAyNzM2ODdFNTdERTFEREJBMworOjEwQzU3MDAwM0U1QkI2NUMzOEVGMkUxQTJDRjhBQUU3REQxODNGMDJCNgorOjEwQzU4MDAwRjlFNTQ4NDBFNkI4N0E3RTVBNEIwMkU3RERBNTlEMDlGOQorOjEwQzU5MDAwMTQwNzJDRDgyNjMzM0YzMENGNTQwNjIyREZFNjY5N0NCRgorOjEwQzVBMDAwRUI4MEUwM0JDNDk3NzlFM0U2NzE1RDZFRkUxQTIzM0VCMworOjEwQzVCMDAwMEI5REQ3RjUwOUFBM0RDNjY5M0RFMjU5MEIwRjdGNEU4OQorOjEwQzVDMDAwRjVCOTVBOEQ1RUZDMUNFMTY5NjhCRjYxRDJBRUE4NzlFRAorOjEwQzVEMDAwMzExOUYxQzk5RkM0OTE0MkMxMjhBMjA3QzJFRjBFOTIzRQorOjEwQzVFMDAwOUVFRDk3NTlDRjdBOTM4QkUzOTg5RjkwOUM5RjZBOUM3RQorOjEwQzVGMDAwMzk2OTE3Q0FGREYxQjM4RDlDN0YyNTY1M0NGMjg4N0ZCMAorOjEwQzYwMDAwREM3N0M3QUZCNTU5REVBMTE5OUMwRjg1NkRBNDNGM0EwMQorOjEwQzYxMDAwRkY5NjkzOEQ0NEI4OTc1NzM4MDI5NDY4NDc4QTVEMEEwRAorOjEwQzYyMDAwRUQxRjkxM0M3MjNDRjFFMzIzNzAyRjQzRkE5NTZGN0QyRgorOjEwQzYzMDAwRUQyMEU5NDdCOUMzQzlFNzA4ODg0NDQ3MzQzRjQ3RUZDRAorOjEwQzY0MDAwRjczNTM5NzFERUE4N0QxRTk5QzJGN0UyNURFMTI2OUFDMQorOjEwQzY1MDAwQTZGQjFCRERGRjhDRURFODk0N0Q1QzE3Qzg2NDNEMDJGMgorOjEwQzY2MDAwQ0MyNUJFQzlCODc4M0QzMkU3OUI0RDk0NkZBMjQxM0FDNAorOjEwQzY3MDAwRTk5Q0MwRjA5RTBDODI5QjlFNzdEN0I1NDRCRDY5RUNDNworOjEwQzY4MDAwNTk4RjlDODBGMDJERDdGMkMzRDExRjdCMTk4RTZBODdGQQorOjEwQzY5MDAwQ0E3MjY4RDdGMjQ5N0I4QTA1M0M1MTc0NzREOTdDMUJGNQorOjEwQzZBMDAwQTlGRTA5N0Y4Q0UxM0FBRjE5QkVDOTE5QzI4RUFCNDkwOAorOjEwQzZCMDAwREVDOTRDNUZBNzlBNEQ3OTQzOTVEQ0IxRTFENzI0MEZEMQorOjEwQzZDMDAwNkQ3MTZFM0JCRTY3QjZCN0JBN0RFQjJENkVBRjczOURENQorOjEwQzZEMDAwRUMzMThFRDREQjNBOEIzODM3MTg1OUE5MTY1MkZFNDcwNQorOjEwQzZFMDAwRjEyNUU1ODU3QTlFNjg5RUVGQ0JBQTk4OUREMThGRUJDOAorOjEwQzZGMDAwQUIyMTBGQzFFNUIyOUM1NzRFRUIxQTNFM0Y2RjlFQTY5MQorOjEwQzcwMDAwRUY1RkI3QUREODM1MzdBQTBFQjIyNjQzM0Y1RjUwNUMxNgorOjEwQzcxMDAwOUYzOEJBRjk3NkIxRkMyREVCOUM2OUYwM0ZGRkU5RjE0NworOjEwQzcyMDAwREE1NDBDNzMyNEQ0QTEzQzI5MjBFMjA4MTBGMUM0MkM2MworOjEwQzczMDAwMDg3MTNCMUIzQUI5RjVBMTI0NTEzQjE3RENEQ0RFMDYzRQorOjEwQzc0MDAwNUU2RUJGQ0VGNEFEMjZCOTg5NTgzQkZCOTMxRTFGN0JBRQorOjEwQzc1MDAwRTFFQjVDOTI4QjYzREYxQkVCNEE1M0JCRkRBQkVFNkZFRgorOjEwQzc2MDAwMkZENUFGQzZEMkY5NTIwRkYyQjA0MTkzNUJERDZFRjcxMQorOjEwQzc3MDAwQ0ExRjkzREQ4RThDNDBGQjgwNzA0NjM2OEI3M0IxNDhBOAorOjEwQzc4MDAwN0M2QzgwQ0UwMTc0RkIwMDdFNjNCQ0E4REI4QkMyNTkzRAorOjEwQzc5MDAwRUUzN0I4NUVCODRGRTZCQUE1RDk3RTU0MjkyMjhGMDc4NgorOjEwQzdBMDAwQzU5RDQzRjU1MTdERkYyNjBCQ0MyNzM5REI4OEVEMUY1NgorOjEwQzdCMDAwMTA4RjNFQjNDMjhBMUE4NUNGNzYwRDhGRjIxQkM2MDM0NworOjEwQzdDMDAwRTUyRjUzNUQyMjNGQUM3MjQwMzJFNTczNzBGNjY0RUVBNAorOjEwQzdEMDAwMEMzNDA0NTMyOTFFNDU3OTFFOTVFNEY5MTNEMURCRkY2RgorOjEwQzdFMDAwRDBCODQ0M0U3RjIwRkIzMzE0RjlGNzkxMzhCNzgxMDU2OAorOjEwQzdGMDAwNTIyMDBCRTlCMUE1NERGNEYzNkU0RjY0RkM2RTgyMjAxQworOjEwQzgwMDAwRjNGMTY2MDg1QjA5RkY1QjAwRDhFRUNFMDE5NURCNUJCOAorOjEwQzgxMDAwQzFDM0ZDQzQ5NUUzRjJEMTBFRERERUE2OEM1Qzg1Nzg0NQorOjEwQzgyMDAwMTYyNDc1QTY5MzdFRTY4RDdFMkY0OTQyQjhGMjI5RkUyNgorOjEwQzgzMDAwNzU3MjZENjYwNUM1MjkzQTFFOTY0QzgxQzc2NTk5OUUyRAorOjEwQzg0MDAwQjcwOUJFODJBNEQwQUFENTE0MTc2RUI2MDBDNTg1OUZCRAorOjEwQzg1MDAwOEVCRUU3MEU4OEYyQUIyNTU5MTUwNzY5REU3MzkyMzg1NAorOjEwQzg2MDAwMkZGNDZGQjM4QkJBMUE3NEY2Rjc0NkM1RTM1RjY3NTZCOQorOjEwQzg3MDAwMUUyMkJERkYwN0MxQzZGOUVGMkEzRTQ3QUE3NjA5REE5NAorOjEwQzg4MDAwQzNGODdFNEMwMzdDNkY4ODM3QUYyN0ZERjRCMzdEMkM1MworOjEwQzg5MDAwMjA1QThBM0FBMTFGNEE3OTVGRUU3RkY1RDQxN0Q1Q0Q4OQorOjEwQzhBMDAwMDIxRjNGQzU2MzI1NTlCRTA4RUQ1NzYwNDM1MzQ4RjA0QQorOjEwQzhCMDAwM0Y2MTBGQUNFM0I4QTk3RTA4RDUyRkU2M0Q2OUI3OTA3QworOjEwQzhDMDAwMUY3RjBGRUQzMDlEOUI3RUQwRThFMEY2NDNDQzZGQTgzNAorOjEwQzhEMDAwRkQxQkU2MzdENDdFODRGOTBEQjU3RkM3RkM4NkRBREIxNQorOjEwQzhFMDAwNEY4RjQwMjEwMkY4NjFBNkU3N0YzM0NFODM0N0VGNzY3MgorOjEwQzhGMDAwNDZFMDExOTE2MDY2NEZFNzdEQTczMjQ0RkU5MURGRjY3NgorOjEwQzkwMDAwRjEwMzcxMjQwNzVCNjQzN0M5NjlERTY2ODVFQjEwQzdFNAorOjEwQzkxMDAwQjc4RTBBQzg2OUQxNzRGNUM1NjUyMjFDRjk1QkRFN0U0NQorOjEwQzkyMDAwNzQ2QzExQkRBN0I4MjQ5QzdGN0NDQkM5RkU5QzM3OTk0MQorOjEwQzkzMDAwRTBFQkEyQzczNjlCQTA4NzA2RUY3Mzg5QTE1NUY0RkVGMgorOjEwQzk0MDAwNzM5QkQzMDk0MkI0MjMyMEU0OTBGOEQ5NDMxRDBENjBCMgorOjEwQzk1MDAwMTlGM0YxRjUwQzExM0Y1RDZCRUYyQzhBM0VERjA0MEFGMQorOjEwQzk2MDAwMTlBODVFQTlGOTk5MkFGOTZDNDIzODU3QUJEQjhFMjZEMworOjEwQzk3MDAwQjlDRTdDODNGNkYzRUYxMTdBODg3QzM1RDQyNTJBMzUzRAorOjEwQzk4MDAwMzlENERCQkM2RDM2MkZFOUQzNzNEQkRFOTkzNjE5RTk3OAorOjEwQzk5MDAwMzA3NUNDQTQ2MjU5RUQ5RTVGOThEOThGRjdDRDFCN0Q4MQorOjEwQzlBMDAwRTY1N0FCOTM3OTNFOUY1QkRDMDA2QkFCNUMzOEVGMjZDMAorOjEwQzlCMDAwQzc4RTU3ODkwNDM3QkIzRUFBNEFDNEZFMkQyOUQyNkVDMgorOjEwQzlDMDAwNkFFN0E4NjkxMzkyQzgwRTQwODBGN0I5MzVBNzdDMzc4QgorOjEwQzlEMDAwODlEODE0NzdCNThERkM3MjM5Mjk1NTk0RERBRDc0QzRBRQorOjEwQzlFMDAwRDE0OTZBNTdCRkNBRDVEN0QwQkYyQTY1OTA2MUZFMjQwNgorOjEwQzlGMDAwMzVDMzMwM0UzOTY3Qjg2MTVDREY3NzhBQkJEMDMwOEY5MgorOjEwQ0EwMDAwRjQ5NUUyNjZDNDgzRjkwRUVCNjUzRTk3QzlEQkZDQzU3RAorOjEwQ0ExMDAwRkI4QjE4RkYxQjhBMDhGRjA4RDJDRjg2ODFDNTkxRDJGNQorOjEwQ0EyMDAwOTVCRjU4NEQ2NjYzRjNDRTA0M0VBNzM1QzVBNzM1REJFOQorOjEwQ0EzMDAwOUVEQUVENTE3QjhGNEZCRjg0QUQzREM2NzVCNUJEQzQ0OQorOjEwQ0E0MDAwNzUxNzFCOUZBMkZENzg5NEVDNDdDMTBCRDdGMUI5RkI3QQorOjEwQ0E1MDAwNzNBM0NGNUNBNjIyNUVCRTRDOEM1QkM5RUU5OUUyRDY3NgorOjEwQ0E2MDAwODgxNkI3OUFFNUE3NEI0RTI1NTVDOENENUUxOTI4MEVGNgorOjEwQ0E3MDAwRDJFMzU3QjNGQzAwM0NBMEY5N0ZEMTVFQUE5RTRGN0Q2NAorOjEwQ0E4MDAwNEJGOEFCN0Y5MEJFRjc4RDk2NkJBRDM1RDUyMzBBNkMxNgorOjEwQ0E5MDAwRTg1N0E4NEVGODU3MTlENkQxODNCMzA4ODc0RUZGOENCNAorOjEwQ0FBMDAwNkVCOTg3REJENkJFM0FCMDg4OUZGQkUzNzFDQjVBQUQzNworOjEwQ0FCMDAwM0VGMUFCNENFRDlDQkY2NkM3QUIwMzkzQkJDN0UxQUU4OQorOjEwQ0FDMDAwOEYwQ0YzRTEzRTY5QjdBMURGOUM2NkVDM0Y1Q0JFM0I5NworOjEwQ0FEMDAwRkFGRERFRUNEMEJDMzU3N0RBN0M1NDk3N0U0Q0Q0Mjk1NQorOjEwQ0FFMDAwQ0RFMzNBM0M1NTNCNjMzQzY0MkY5NUFENzZDRTg3NkFFNworOjEwQ0FGMDAwNUQxRUFFOUYyOEJERDQ0Rjc0QkI3MDgzMENGNTNERDkyRAorOjEwQ0IwMDAwQjdGNURBQkE1Mzc2QzY4MEZDMkRENjdEMEY2NTg1RTA4MQorOjEwQ0IxMDAwRjFCRjI4RkNDQzdCN0QzQ0UwOEREQUE3MzU1M0M0N0Q4QQorOjEwQ0IyMDAwQzcxMjVCN0VGQzE1Q0UzQkY2MTJCODg5RjRDNzEyODU5RQorOjEwQ0IzMDAwQkRDRDZGRkJENDYyMjEzRjExMkJFNDI1REYxNUI2MjQ1OAorOjEwQ0I0MDAwRDE3RDk3Rjk3MTdFM0E0RkFFNUIxMEVGQTc3M0EzODI0OAorOjEwQ0I1MDAwRjRDRTc3MUNDOEZBMkQ0RkZCMUU3NUEwRENCRDZGQjE1QgorOjEwQ0I2MDAwMThGQzRFODQ2QzFERjY3NzY0RkFBNjkxREY5OUJDMzNFRAorOjEwQ0I3MDAwMjY2OEY5MTZGOEVDQzgwNEUxRDcyQTg0QkVDRjI2Qjk5NgorOjEwQ0I4MDAwRDFDRkM1RDBENEQ0M0QwODg2NzMzMkMyOUZGQTY3OUVGOAorOjEwQ0I5MDAwQkVGNUFEQzcyOEVFREQyQkY0MUY4NzlERTY3Q0Y0QTYxRAorOjEwQ0JBMDAwQTg3QzE0RDYwOEZENzVFMDJGQzUzOTBCNzdCNUQ4MjhCOQorOjEwQ0JCMDAwNEZGQUFFRjRCRTNERDNEOUFEREZDM0NFRDU2NzVEREY0RQorOjEwQ0JDMDAwRUIwRTA4N0QzRkIxRjVDQkI3QzhBRTlGNDA3RjE3QURFOAorOjEwQ0JEMDAwRUY1RDdFNTFEM0YzQkFDNzY1RDY0N0ZERjlGMUFERjJFQgorOjEwQ0JFMDAwQzQ0MDBGRjQ3RDREOTMwMzcwNjUxQkNFQ0Q5Njk0OUQ4QworOjEwQ0JGMDAwOUE0NjdFNkRDOTM2ODVDRjAzN0JGM0Q3NzUyQjhDRTdCQworOjEwQ0MwMDAwNjRDRjZEQjdDRjE3RTdDODAyOEY4OEVFNEZCNzdEOTkxNQorOjEwQ0MxMDAwNTQ5RTJCREE2NTdDNUVEQkEyRDkxRDExQzdBMDFGQjUxRgorOjEwQ0MyMDAwMjY5MzFGQUQ5NkI4RkU3NjYwREIwMEJFOUY3MTQwODJGMgorOjEwQ0MzMDAwQTAzQTkyOTdCOENFODE3QzlCMkU5NkEzRTc0RThBQzdFNgorOjEwQ0M0MDAwMjAyNTQ3QTE3REE2NjlGQzlDQUVENTg1NjY2QzlCOTE4RAorOjEwQ0M1MDAwNDVGQzdBQTc2REVFMDEwRkExOTc5NUMxRjI3MzNERjhERgorOjEwQ0M2MDAwMzkxRTNDOTBFODREQTU3QjBBNTM5Qjg0N0MxRjQ4RUMwMQorOjEwQ0M3MDAwRUNBMDNBRDI4MUIyMzg4OUNFQTM3MEZERTZFODc4RUYxNQorOjEwQ0M4MDAwODBENTlCNUFDRjc4RTlFNzkzNTdDOERGQzQ1RDQyMUUzMQorOjEwQ0M5MDAwQUNEOTQzRTRBNzVGMTJGOTFDQ0JCRjMyRjA2MTk2QUI2RAorOjEwQ0NBMDAwMDUxMEQ4RURDMTdENkJERDQxOEU0QjE3ODFDOEVCQ0RGMgorOjEwQ0NCMDAwRjE3Q0VEQjhDRjZDRTQxN0NDRjk2N0Y5OTYxRDA3RTk2NAorOjEwQ0NDMDAwRENFMzlDM0E4NDQ5NUUyRjU0NzczMEU3QkRCREQ1MEYzNQorOjEwQ0NEMDAwNDYyNTc5MEJCM0EyRUE3RUU2RjhCQzJCMEVENUUzQTg3NQorOjEwQ0NFMDAwRjU3MTdDMkVGNDRBRDk3RjFGNUY4NEZEQkJENkM3Qjk4RQorOjEwQ0NGMDAwMjhDRjNFRkFBNERENEY3NkY5RTgzQTdCNDBDMkYxQTM5MworOjEwQ0QwMDAwNDk5REVEOTQ3NzFDREQ5NEU3QzYxNTYwOUU0NUZEREREOQorOjEwQ0QxMDAwQjNFNEQ3N0Y2QjY1QjkwMDMwREU2QjU4NTI3NjM3REZFRQorOjEwQ0QyMDAwRkY1QkIyM0U1RUEyN0IzODkwMjJDNkY1OUM0RjdFMjYwQQorOjEwQ0QzMDAwOUVFMzgyMDVDRjBGRTQ3MzRFRERCRjkwN0VEMEI5RjQ0MQorOjEwQ0Q0MDAwOTEyNzYyM0MxNEU0MUZERDMzQkQwRkQ1RkIzQTJDN0ZFNQorOjEwQ0Q1MDAwRTBGMzdDOTBFRjNCNDRFN0Y1OEIzNkM0OEZBNEY4MDFGOQorOjEwQ0Q2MDAwNzI4MUY5MzY3RkRERTU3Q0JFRjk3M0M1Mzc4M0YwQUY5QworOjEwQ0Q3MDAwN0NFNjlBMDE3NEFGNkNDMURCRkQ4MEYwODk2QzdEOUUwRQorOjEwQ0Q4MDAwQ0ZGRkJBRTNGNDlFRTNCQjEzNUIzM0ZBNDA2RTM3OURFQgorOjEwQ0Q5MDAwRjQzQUUwOEFBNzk3Nzk4OUVGQzU5MjJBQ0U2OUEwREU5NgorOjEwQ0RBMDAwMzM4OEU0NjI0QjM1RDBCQTIzNjU3MTZGQjQ3MzY1MUM2OAorOjEwQ0RCMDAwQzdBNTY2QjlBQkM5MTI3MTYwOEQ1RTZGRTgwQjhFMTRBMgorOjEwQ0RDMDAwRDIxRjFGMzAxRDIyMkI4N0FGQTNGM0IwRTZBQzI0Q0RCQQorOjEwQ0REMDAwNEY3NzY2NEY4QkJBOTc1ODI1QjdEN0JFNENGMkI5QzY3NgorOjEwQ0RFMDAwQ0U3NTkwOEU5ODlFQ0ZDMTFBQjIxMjc5RkUzQzg3RjExMworOjEwQ0RGMDAwRENCQ0I2RTE4Q0IxOUY4QkY5MURCRTNGQjI0OTJEQkNBNgorOjEwQ0UwMDAwMTNEQkE1MUFGRDU3QTc3QUVGQ0RDMkY3MTdCNjNFRjI4RQorOjEwQ0UxMDAwQzIzRUE2Q0I5QTFGQkU0RkZCRUU3MThBRkFDQjNFNDFCMworOjEwQ0UyMDAwM0Y3M0ZDM0ZDRjIxRUExQzAwNkI3OTdGRkRGOUE3NEZEMAorOjEwQ0UzMDAwQkNDQkU3QUI5RjZFMUU5RTJEQ0U4RDQzOUZGQzNBOERFMworOjEwQ0U0MDAwQ0Y4QjBGREQ4QkVEQTYzRDZGMzE1RkNDRjA5RTczRUU4NworOjEwQ0U1MDAwMjc0OThDNkYwREUxRDE5N0NFNzdCRDhGMTA5Q0M4MDgwNAorOjEwQ0U2MDAwQ0VEQkU2QUVDQTYzRkFFOUU3NkY5MUEzM0RFNzI3M0E2NgorOjEwQ0U3MDAwOUNGQUZBM0E3Q0ZBRkFGQUJDMjdCMzQ0MUUzMzVCQ0IyRAorOjEwQ0U4MDAwMEY4RUQ5NDJDN0Y5MUNGRDg1RTExMkQ1RjdCQTlFMjc0RQorOjEwQ0U5MDAwODVGMjEzQTNFNEU1QkJBQUE3REZBOEQ1NDMwRTVBOTZGMworOjEwQ0VBMDAwRkRDMDQ2RjdFNDVBNTc1QjdERDE3NkVGMTJFQkU4NURBMworOjEwQ0VCMDAwNzFBMDA3NTQ1NzdGRTE0QUQ4NkYyMTcyNEE3RjNBRUYzOQorOjEwQ0VDMDAwRDNGQUE0MENEODFGQTc4MTI3MTEzQzc0NkY1MDZCNjE1MworOjEwQ0VEMDAwQTEyRjg1RUJFNEI0OUU0Q0Q3MTAwM0RDNkYyQTc3QUIwRgorOjEwQ0VFMDAwRDQ1RTI5NzkxNTcxRUYyQkMwRjIzRjAxRUEwNzEzMUVCQQorOjEwQ0VGMDAwMTY0Nzk4Q0ZDNUY0N0IyRTMzMTI5NzVGOTM4NkZCMzU4OAorOjEwQ0YwMDAwRjc4M0U1MTRDNzM0NUI4NTVFRjhFN0M0NzFGRUE2RDNFQQorOjEwQ0YxMDAwNDlGNzMzRTBDQTM1Rjg5NzY2MTdBODBBQUUzMzUzODE0QworOjEwQ0YyMDAwMTVENjI0MzE2RjI4RDJGOUMwOUVCOUFGNTI5Q0YwQUUwRAorOjEwQ0YzMDAwNTJERjhGRjY3RENGRjk1ODlFNjRBMUY4MkUxMDRGMzkzRAorOjEwQ0Y0MDAwRTJGQjZGRkRCNkY4QUYzOEY3MDNGMDk0Mzk1MTdFQUVDRgorOjEwQ0Y1MDAwN0JDREMxNzZERjVDOEZCODFEN0NEQzlGMDc2MUVCMTc1MgorOjEwQ0Y2MDAwRjhERURGNDZGRjZCRkQ0RUU4QzZFQjZGNjNCRURBNENDMgorOjEwQ0Y3MDAwRjlDMTREODkwRjE0RDNGQkZBM0Q0Q0YzN0RCRkEzMkVBRAorOjEwQ0Y4MDAwMjdERjBCMzRERkZCQkIxNjdDOUY5MUREM0E2NUYxRDVDMworOjEwQ0Y5MDAwOEFGQTQ3RkQyOEYyQkY5MTQ0MUI0ODM4M0ZEMjRGQTM3RAorOjEwQ0ZBMDAwQzczMTYwN0E0NEFDREFGQjlGQUJEQzJGQUExQ0M5RjUxMQorOjEwQ0ZCMDAwNDgzOEE1QjIzRDFFNkJGMjM3NDVDMzJEMjIwRkZCNDYwNAorOjEwQ0ZDMDAwQ0MyRkVCNTQwQ0ZFQTZBODQwQUJEQjdDQUQ3MjVDN0E5OAorOjEwQ0ZEMDAwRTU2OUU1QkNGRUU4QTE2QzYxQ0Y4QUZBNUFFQTdCOEE3MgorOjEwQ0ZFMDAwMEZENTZDQTEzRjREMTA5NDA1M0UyMjRFMThEQjI1NTdGRQorOjEwQ0ZGMDAwMUU5OUY4NTdBQkY1NkJDOTlGQTEzQzQ1MTIxQzdFQkEzMAorOjEwRDAwMDAwRTgzODc2QUI5MEFGQjE0QTcwMDdCNTY4NURBMTgxRTJCMAorOjEwRDAxMDAwOEEyREU4RUY3NDM4RTg4QzMwNjUzOENCQzExODVEM0U1NgorOjEwRDAyMDAwNzFBRDU5Mzg2RkI5NTRDRjc5OEI4M0UyMTk2QzU3NDk3OAorOjEwRDAzMDAwMjE4NkUzN0JEMEM5QUQ0N0YzRTMxNUUwRTY3NjNDNzg4MworOjEwRDA0MDAwQjk0NUY5RTQ3NjIyQjQ3MDdCMzVCNDcyM0IwNTQyQzIyRgorOjEwRDA1MDAwRUY1RjExNkM2MjdGMDZGN0I5RjhEQzYyRDIzQzBCQzU1QQorOjEwRDA2MDAwMUI0NUQ3Rjc5QzJGNTQ2ODc0RUE5RDBFQTg3MDI1OTcyRQorOjEwRDA3MDAwNEU4NzA5ODA3QTk3RDEwMzNEMDZFN0IwRkQzMEQzQzNEMAorOjEwRDA4MDAwQUM5RjY1MTA5NjU5M0ZDOTMwNjQ1MDlENDA2NTNEQUREOQorOjEwRDA5MDAwMDQwRkY3QUIyRTkyMEVBNTYxOUZDMjc1MUEzMzNEMkE3RAorOjEwRDBBMDAwN0I5NjhCQzkxQTNERkU5NTBEMkMxRjNBOUZFRUNGNTZFRAorOjEwRDBCMDAwRjlCOUNFMkZENEFCMTQ5MjdGMzMxRkY1RTc0NTcxMTUyNAorOjEwRDBDMDAwMjdFOTZBRkExREQ5QzNBN0QzQkRBQUEyQzI4QUE1NjQ1QgorOjEwRDBEMDAwOTJFRkRFMzA2NjNBRERBQjJBMUE1QkYxM0MxRDc5REU1OQorOjEwRDBFMDAwOTMzRDRFRjQwQjJBMEFBRDZFQ0M1QUE0QjJFOUUzNzExQgorOjEwRDBGMDAwQkU0RkJCOTcwQzMzNDU3QzdEOTcxNkI3Rjg5NkZEQzBBNQorOjEwRDEwMDAwRUQ0MjNERjFBNTNBREQ4NDlGMDM4MzdCQUE3RkNBMTlENgorOjEwRDExMDAwRTI3QzcwQzhDNEUwNEUyQkNFM0JBNEY4RTY2NDUzN0M5RQorOjEwRDEyMDAwRTAwODI2QTg0OEY3QkI5NjU1RjFCREI1ODc2QzYyQkVFRQorOjEwRDEzMDAwREQyRUVBQjAzQTVFRjhEQzFGODNGRDREOUI4NjJGOTUwRAorOjEwRDE0MDAwRDI3QkRGMUZEN0FEQTU3NTdEQ0JCMkZDQTRBRkJFQ0QyMgorOjEwRDE1MDAwOTI1QjcwQjI2MkMwNENENENGOEU5MDE1QTgxRUFBRUYxRAorOjEwRDE2MDAwOTM5REVBNUI5QUNERTdCQUQ5NUMyNzFCQTRDNTMzMUQxMgorOjEwRDE3MDAwOUI4NjBGMjdCRURDOUZBREREQzM0QTRFMkIyNEJBMkQwNAorOjEwRDE4MDAwNEJGNURFNEZGMzIzRjE0MkJFRUVEN0Y4RDA1QkJCMjE2NworOjEwRDE5MDAwREI3MzVGNzZGMUI5Q0YyM0ZGNDAwMEYwRkQ5RjY1RkJBNQorOjEwRDFBMDAwMUVBMEY1RUFFMkNFQjI3RjNGM0VFMkVERTVFMUI0NkVDRAorOjEwRDFCMDAwMzk5NTkwNDlCMzEwRUYyNjBGMDQ2Q0VDMDdCNEZCRUFFNQorOjEwRDFDMDAwREE3OTU1RTQ3NjVDMDdFOTUwRTRGNTM1OTE0OTFCMzU4OQorOjEwRDFEMDAwQUJCMzg0RUMyN0FFRkI1RkJDQUUyRDNDNjQwNEJFRjc2MgorOjEwRDFFMDAwRDhGNDQzMzYyMTY3ODM4NTlDNjk3NjY4REJGNkJERjcwMgorOjEwRDFGMDAwMEUxMjVEMkY0NEU5NTVEREY2MzM1RjdEODBGNEFCM0JDNQorOjEwRDIwMDAwRTE3NEQzRjQ2RTdERkFFNTUyQ0UyN0MxNjlCMDFCQkE0MgorOjEwRDIxMDAwOUU4REQ5NjJFN0I4N0FFQ0Q2Q0I2RkE3Nzk2NTZGQjdFOAorOjEwRDIyMDAwNjcxMDVFNTdCNjg3RjkxQzJDQjJFRERENDEwMjBFM0Q0QQorOjEwRDIzMDAwREYzODI1N0QxQkJGNEJFN0I0OUNDNzZEMTZFN0I0NEJBOQorOjEwRDI0MDAwQTRGQTU3RTJBOUZGN0JDOUVENDdGODNGRDVGQzg2OUVCQgorOjEwRDI1MDAwMTdDRkQ3RjA1QUJDNzdGRDcyQUE4QkNDNUY3M0VCMTQ1MworOjEwRDI2MDAwQkVDNzEzMTA3OTgzOEFCRkE0RkY1RkMyM0UzRTFGNUYxMworOjEwRDI3MDAwQjREMTlDNEY3NERBODhGRjhCNUI0REY3ODEyODFGQTZEMQorOjEwRDI4MDAwN0IwRkQxRjZCRDg3N0M3ODdCQjY3NjRFOUIwQUE5OEM0NgorOjEwRDI5MDAwODczQ0FCOEZBRjA3N0I2N0NFNzcxRjA3Q0ZBQjJDOUY0OQorOjEwRDJBMDAwRTA5NTY5RkY2MkE1RTc3QUMyNzNERERGRDNCMDNFQ0NCQgorOjEwRDJCMDAwRDNGNjI2M0EzOTM5REZCNTg5RkJDMjRGMkM3NUJCQThBNgorOjEwRDJDMDAwQUZFOUU3NUE5NDk1NTI4QUEzM0I3RkM5RjJBRkJGQTc1MworOjEwRDJEMDAwRUJFQjgyMTVFMjVFMzZBQ0U5Q0IzMjU3QjBDMUVFMjEwMgorOjEwRDJFMDAwQkUxNjZDMThDMEY5MDVFNjQxMUNGN0FEREQ2MDVGNDE2NAorOjEwRDJGMDAwRkRBNjA3NjNGRDcyMDFENTkzM0IyRkEzQkE0QTUzOEM1OQorOjEwRDMwMDAwRjhDRTg5REMyM0REMTMyRDQ4MTc3NThFMzNCQTVERDcyRgorOjEwRDMxMDAwRkNCQTdFREZCNjJCRkY4OUNGRTY3QkNENURFMzYxQzUyRQorOjEwRDMyMDAwOTA2RjM0NjlGMTczMTFDMTQ3NzE2MEJENTVFNDRGMzE5RAorOjEwRDMzMDAwMDJGRTFENkY3RTNGOEVFMkQ4Q0Q4QTM3OEVFQUQyMjc1RAorOjEwRDM0MDAwRjZBN0Y3ODExRUU4QTZCN0M1RTg1RUUwM0NFNzhDQzUwNgorOjEwRDM1MDAwRUY0RUM5MzgxRkJGOEExRUQ3RUVBNzZCRjJGOUM3NDYzQQorOjEwRDM2MDAwMEZGQ0REREFDRDBGMURBRjJBRjlEOTRBMUJENTM5NkU3NgorOjEwRDM3MDAwMDMxN0Q1M0Q5NkVDN0RBQTg5QkVCNzU5QjIxMkI4QTI2MworOjEwRDM4MDAwNzA4MkZFNTBCRTcwQzRDMkU3RTA2M0Y2MTZBNjkwM0MwMQorOjEwRDM5MDAwQjY2OUY2OEVDRTg1RDUyOEI5MkFBMUEyMTBDRTJGMUU0OQorOjEwRDNBMDAwMEMwMUZBRkUyODQ2OEQwNTM1MkEyRjhFQ0I0OTMyRjQyMgorOjEwRDNCMDAwRTNERDk3MTlERUVGNTM5QTZFMTgwN0JGMjc5NDVCRDIwRgorOjEwRDNDMDAwMURCRjI2N0FBRTMwQ0M3RjI4NjEwMjdGOEY1MzE2QkFGQworOjEwRDNEMDAwODNFQjRBN0QyNzhFMzQ4Q0RCNTFBRUU5OUUwMzdDMjFBMgorOjEwRDNFMDAwRTI5RjUyRkM2NUJGMEFGNTMyQzEzOTM2MENGMDJCOTQyRQorOjEwRDNGMDAwQkIzMTFEQzZGOEE4MzREQ0MyNzk2MENDN0VDNTkwRDc5RAorOjEwRDQwMDAwREIyRjUwNjdCQTdDOThBNjU3ODM2MUIwQjAwRjY2N0E1RAorOjEwRDQxMDAwMUJFRjQzMkNEOTJCNzMxQ0I3MjQxNTAzQ0ZCNERFRTlDMworOjEwRDQyMDAwQURFQjlGNEVGNzdFNUUyM0REMDdDQzM0RDI3OUEwQ0ZFMworOjEwRDQzMDAwNDhFNzQxRjM4RDc0NEVBRDM3RDI3OTY4ODM5MUFFNjk3OAorOjEwRDQ0MDAwN0UyMzFEMzM1NjhDMzFDQ0NGNkFBOTMwRjQ4NzNEN0VDNAorOjEwRDQ1MDAwQjU2MUZFRTU4MTY5ODZGRUYwOEQzNzFBRTZFN0I1Q0U0NworOjEwRDQ2MDAwMzU4QzE3NkM1OTc4NUVCRThGMDgyRTMxOEM5QkY5NUUxNworOjEwRDQ3MDAwQjhFNzQ3MjYzOTU0OThDRUM1REFGNzU5M0FGRkZERjg5MAorOjEwRDQ4MDAwNEJGQzFGMEJERTNFNDE4OUNBODFGRTI2RDJDN0ZGMkYwRgorOjEwRDQ5MDAwRkUyRjE4QTY5RDIzRThGQ0JGNDhCQjdBOTVFNjg3Q0RGMgorOjEwRDRBMDAwREY3OTREOEQxM0Y2RTZGNTNEMjdGNjdCQjBGRjg2NUEwMgorOjEwRDRCMDAwNjg0REExQjg0OThCMEZCQ0ZBNzk4NDI5RUZEM0YzOTQ1NgorOjEwRDRDMDAwNkI0QjI1RDMzOTdEOENFMTlDRkU0MkY3REE4QTQzNDFEMAorOjEwRDREMDAwNDM3RkM0N0VGMTdERDRDODgzRUU1N0E4MkRGRUQ4MjNBOAorOjEwRDRFMDAwNDc3RjBGMzVGQTBCNzZDQkU3RTQ5REZBRkQzODNENkZBOQorOjEwRDRGMDAwODJFNjI3MzkwRjlEQTVDMzRGNEE1MDcyNkU3RDUxQ0ZFQQorOjEwRDUwMDAwNEZDRDc5QUI5RUFGOUVGQkJEOTU4ODRCRUU5NjdCQ0IwNgorOjEwRDUxMDAwNjM0NUZFQUFFN0FEREYwNzBGN0Y1Nzc2RDU2MERGREFGOAorOjEwRDUyMDAwNjE2OEZGNjU0QjY3NUYxQUQ3RjM1OTIyMkM5RDFCNDczMworOjEwRDUzMDAwODhCMEZDRERDQzNCRDMzREI5RkMzRDJBRDdCRDE3NEFCMgorOjEwRDU0MDAwNkY0RkE3N0JGRTA4QkUyQjVDMjJDQTNGRjRGM0QyMzA5QworOjEwRDU1MDAwREZFRjY4QkRDMzkyNkI3OTIxQkVGQkZBOThDRjg2RDAwRQorOjEwRDU2MDAwN0FGRjMzNENDNDZGNzYxOTI5ODRGRTY3QzAyQzBGRDAyNAorOjEwRDU3MDAwRjM1MTQ5OUVFNzY4QkVGOTdFQjZCOTM1REYxQjZBNkI4OQorOjEwRDU4MDAwMEM3MkFCQjhEQzdDNkZDNzVDMUYwQzVCNTQ4RTNCRkQzMAorOjEwRDU5MDAwM0Y5MkY4OUVDRTY3MDREQ0U4RUU3OEU1QzQwQTJCQzcxQworOjEwRDVBMDAwMkJBMEU1RTMzNzZCRjREN0VCMTZCMzM0N0MwRUUzMTIxNAorOjEwRDVCMDAwRjNEMUZGREVCQ0U1MzVFNkNCQTI5NDBFQURERTUxQ0Y1NAorOjEwRDVDMDAwRjFGNUFEODM5RDIzRjkxRTlBQTdEMDJERUE1QzdBMUQ1MworOjEwRDVEMDAwNjNEMDI1N0Q1RjcyMjFGQzE3QTUxQzM1RDQ5MUUwRDk1RAorOjEwRDVFMDAwQkUxNzc1QkVERDhEQjc1OEZGRjA0QTUxOEYzQ0JDMzI3NworOjEwRDVGMDAwOTVFQkRGRERFQjFGRTc3QUQyQ0RGNTZGMUFGNEUyOTZGQgorOjEwRDYwMDAwODZGNzBDN0EzMEM3RkY5MTYxM0M5Q0RDNjlBNUZBNjExMgorOjEwRDYxMDAwRjg4NTgxMTM2RTQyRkExRERCNkNFN0VGQTE1MTBFM0FEQgorOjEwRDYyMDAwODhBRkZBRkFFMTk1QzNDN0YzNzc5NTE3QzRGMzMzODY0OQorOjEwRDYzMDAwQTNCRDMxQzRGQ0Q1RjEzQ0Q0Nzg5MEZCRTFDNjMwQjczMgorOjEwRDY0MDAwNjYzQ0Y1M0E4NURFREE3NjQyMEVERENGRUY5NDYyREQ5OAorOjEwRDY1MDAwNTQxNzM2RDcyRkVFQjZBODlGOTAxRTNDOTQ5M0FFQzVCNAorOjEwRDY2MDAwNkJGNTA1NUVFNjlGQTg1N0I0NkJERjk3QjY2QkRGOTc0NworOjEwRDY3MDAwQjY2QkRGOEJCNjZCREY4N0I2NkJERjgxNDZBQ0NFMTU0MgorOjEwRDY4MDAwNTRENzY4OTdDNEJEOUY1OTkyRTdDOTM5Qjg1RkRBNjAyQgorOjEwRDY5MDAwOUYzMzg3RTJGRTg1OURGOTBBRUU1MzU3MTA5RTJEMjE5OAorOjEwRDZBMDAwOUZGM0ZBRjlGQUQwNzMwOUQzODU4MUZDM0Q5MTlGRUY3RQorOjEwRDZCMDAwODcxREIxRjhGM0U5RkI5QkM5MUJCM0FFQTMzQ0YwNDg0RgorOjEwRDZDMDAwQUNGRjM4NDUyMjk1Mzk2OUQ3NTFERTc3QzQyNkY0NzAwRQorOjEwRDZEMDAwRkFDNkQ4RUI0OEVGM0VDNkM1MDgzRkZGNEI5MkE4MkJEMQorOjEwRDZFMDAwMzlDMzM2RkE3RTZBNkFCMjZGNTA0RUIxQjhGN0M1REZGOQorOjEwRDZGMDAwQ0RFMDczOTI0QkJEQ0UxOUIxOEEzODMwQTJDNTgzRTkxMworOjEwRDcwMDAwMzlFMjFDMzAyMzQ3QzRBRDdBNUI0NjNDQzdFN0QzQTk1NgorOjEwRDcxMDAwNjVGRDdDMzg5QkJGMzc1OTYzMDc4QTVGNzE3RkZFQkUwQQorOjEwRDcyMDAwNDZCRjY3NjJGRUZFNjZFNDlGRUNGQzlEODQ1RTBGMkRBMworOjEwRDczMDAwQzk0OUUzNzVFOEJCMUNEMkNCRTQ5RkM0QjFERDgyNzA1QworOjEwRDc0MDAwNjgwODdEQzdEMzA1RUY3RUYxNURFNTMxQUEyMzQ3RDU5MworOjEwRDc1MDAwOUY0QjcyNDQxRDA2NkUwM0MzNzc0MDhCRjcxRTNFNDRGOQorOjEwRDc2MDAwNzlENkZCQzM3QzYzODhBRTczMkQ2QTA5RjE3NTcxQzJFQgorOjEwRDc3MDAwMEVBRTc3NERDOTUxNzk1Rjg0OTdGMTQ1RkJEMzRDN0M1MAorOjEwRDc4MDAwNUFFQzA4NzM3REVDNDJGNUYwREVGMDNGNzY3QkU4MTc0QgorOjEwRDc5MDAwQjk1Q0ZGNTVGM0Y5M0IzQzZENUY4NDYzMEFEMTVGQzcwOQorOjEwRDdBMDAwNUI4N0EzN0I5REYzQ0JCRjVFRDdENUZCOUYzRUYxNTAzQworOjEwRDdCMDAwQjY1Njk3QkZDNURCODMzRkJENTVBMzRCQkJCNUU3M0ExNAorOjEwRDdDMDAwRkFGRDFBN0ZDRkUxQ0YzMDAwQUFEQkRCNjNEMTQ3NjBERgorOjEwRDdEMDAwNUJBRkQxRTlEODBEODgwRkQ3MjczQzIzODhCRjhCQTczMworOjEwRDdFMDAwMzlGOUZCNzM3RDdENUNDN0Y3ODdGM0VDQjMzQUQ1QkJBMgorOjEwRDdGMDAwOTBGMDVGNTgyRkVBRUVGQTc4NDQxMjdDRjVBRjE0NzU3QQorOjEwRDgwMDAwRDBDNURCREYzQjQ0RkYxRjg0MDVDRkU0MTU3MjdFQUYzQworOjEwRDgxMDAwQkQ2RkE2MzNEMjk3QkY4QjlBMkI4QjczMkJBNEVGRERGMgorOjEwRDgyMDAwQzQ2NzczQkRGRERCRDIzNTkyMkFDRTU3MjM2QkNGMEM3NAorOjEwRDgzMDAwQTE3QjY0OEJFOURFMUE3RDFGQTZENUFGQTBDRDU4OTdEQQorOjEwRDg0MDAwNDI3QUY5QTk1RTcxRUU3OTE0RjBCOTk2NURGMzIzNzYwOAorOjEwRDg1MDAwRkRGREMxOEFFMUZENjM0RUVGNEY4OTNFMkY2ODc2MDNERgorOjEwRDg2MDAwRTcwNzJDQjg3RjlCOUUyNzlCRUEyODZEMjE1MUVGNkMyMAorOjEwRDg3MDAwNEJCMTcxOUM0Q0YxMEVGOTI3M0RERUI5RUI0RDUxRUZFOAorOjEwRDg4MDAwQkMyQjREQzREMTA0MUZGMTU3M0FCODlCRTM4NDJFRkY0MworOjEwRDg5MDAwMkZCOTU1QTI5RkQzRUEwQkQwRkVFMDVCQ0FGRTRCMUUwOAorOjEwRDhBMDAwOEFGQ0E1RjM4QjNGNUZBREQ1MDM4NDNGMkNENkZDNUY4QworOjEwRDhCMDAwMzFBRDQzMDE0RTZFMUZGNjhCNDVEQUJFMTgzRjcyREQ2NworOjEwRDhDMDAwNkQzNEY4OUEwNDMwNUFERDZDRTU2RTQzMURFMUZGMDBCQgorOjEwRDhEMDAwOTBDRUNBQkQ1MDQ1MDAwMDAwMDAwMDAwMDAwMDAwMDBDRQorOjEwRDhFMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJGQjUxQ0ZDMEYwMDNBRAorOjEwRDhGMDAwMDkxN0IxQTFGMjZGQTBGMUIzMzg1MUY5QkY1OTUxRjkyRAorOjEwRDkwMDAwOTdEMEY4ODRCMDJFMTMwM0MzMEE0NkQyRjQyMEUzOURDNworOjEwRDkxMDAwNDBGRDA3ODBGODM4MTA5RjYzMjJERjFDMTAzRTIxMEM2OQorOjEwRDkyMDAwRjQ4RjE4MDNDMzQyMjBERDBEQTRBRjAwRjExRjIwN0U0OQorOjEwRDkzMDAwMDRFNDRCOEIzMDMwNjgwMUYxMzI1MTA2ODY0NDIwQkQzRgorOjEwRDk0MDAwMDY4OENCNDUyMEZBNEUwMkU5NjY1MUYyRUNENEUzQTFGOQorOjEwRDk1MDAwQ0NDREEzOTgzMkJDNDExQTk1NUZBM0MyQzBCMDU2OTVGNgorOjEwRDk2MDAwODFFMTkzMUE4NEJGMDI0OTlFNUQ5RDgxQTE1NjA1QzI0MworOjEwRDk3MDAwMzY5NTYzNjBFODA3QUE1OTIwOERERDVDMzNBMEZDMDQ2RQorOjEwRDk4MDAwQTBCQ0I4M0E4NDBGMDAxMzRERERDQjY4MDMwMDAwMDA0MworOjEwRDk5MDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDBENQorOjEwRDlBMDAwMDAwQkNEM0QwOTc4NTVENTk5RkY1RERFQkVFNDI2NzlBMworOjEwRDlCMDAwODE5NzA1QjgwOTAxODMwNjdDMDk2MTJERTI0RDhDMTgxOQorOjEwRDlDMDAwNkM4QTJGODgzNjRFMTk3REEwRDU2ODU5MjIzMjM1QjYxQgorOjEwRDlEMDAwREFCQzQwMTJDMkE2NDE2RDg3NDFBNTJGNUEyRDUyNUE3QQorOjEwRDlFMDAwQTM2MjRCNjdENDc5MkMxREQxQjEzNTVBQUE3NkE0OUQ3OAorOjEwRDlGMDAwQzgzODhFNUE2NUUyNDJBQjU1ODczOUZGN0ZDRTRERUU2RgorOjEwREEwMDAwQkQ3OTA5QTg5REY5OEFDQkUxREM3Qjk2RkZGQ0U3REZCNQorOjEwREExMDAwQ0Y3RkVFNzNDQjNFODAwOTAwMjdGMUNGQjkwMDU3NEI4MworOjEwREEyMDAwMDA5MDM3NTQ4MjM3RDYwODExODAyNkNEQUQ2RjJBMDY3NAorOjEwREEzMDAwRjg4NjEyM0JBQzU3QjFFNzYzRTVEOEZEM0EzRTlGNUNGMAorOjEwREE0MDAwMEI2MTAwMDVEQkU3MDNDNEYwN0ZBQ0RGRkFFMEJBMzExRAorOjEwREE1MDAwODkyMDdCQTYyQ0NEQzJEMjFDREYyQzlCNTQwMEFEMTI5QQorOjEwREE2MDAwREY2Rjk5OUNFOUJENTk0MkNBMzVEMEVGMDVGQTczQjIxMAorOjEwREE3MDAwMDRBMEU1RTg2RkE3MUUzMkVCRUNCRjAyMDg0NTVFMEY3RAorOjEwREE4MDAwQjBCRkNDODI1OTI3MTU4MEY3ODI4QkIzRDIzMEYyNzhBMQorOjEwREE5MDAwNkZCNTc2OUZBNTRFMDJGODUzRUJDQjUzMEY0RDFBRkU5MAorOjEwREFBMDAwRkUxQjBBMzRGNzk2MEY3RjNFMEJEOEE0MzMxMDFGNDk5NAorOjEwREFCMDAwNzc3Q0VBRDBCQTA3RDcxOTY0NDg5QUMzRkEwM0E0M0QyMQorOjEwREFDMDAwMzlBQ0RDQjVFRDJDQjU2QzA4NEVFNzNBMDA5MjFDQkZDMgorOjEwREFEMDAwOUZCMzlGMjc1MjkzMkU2MEI1MEEyOTMxOEZFMDUyRDkwOAorOjEwREFFMDAwM0YzMzAxQTgyOURCOTdFQjc2MzUwMEMxRTU4MEI3MjNFQQorOjEwREFGMDAwRjI5NzgxNzdDNEZEMTJFRERFMEJBRUVCMDRENjZGQkQ1RAorOjEwREIwMDAwOEJEMzRCN0I5RTFDNUIwN0MzRTlDNURDMEYxMzhGQTczMAorOjEwREIxMDAwQkIxRjM3ODE4RkU2MzFFOUE4NDk1RTNBRUFCRTlGOEE4QQorOjEwREIyMDAwOEVBRTQ0M0EzQUVCRkY5RThFOTI3RkJENzRENDQxRTNCMQorOjEwREIzMDAwRkM5NUQxMTE0MDM3QzcxN0Y0QUIzOEZGRDA3MzVFNDY2MAorOjEwREI0MDAwOTZGNjRBNDg2N0FDREE4NzcwOEZFMzUzQzFCODk2Q0UzMQorOjEwREI1MDAwRUJFNTY5NEM0QzQxRUNFOTMzOThEQzFBRDdCRkFDMUVCRAorOjEwREI2MDAwRTExRTdCNzRFMTlCNTg3NjJFQTlBOTNCOUZBRDJGQkY4OAorOjEwREI3MDAwQjFGN0Y5MEI1ODE5ODlBN0E0MDREQkFGM0I0MDQ2QTFDNAorOjEwREI4MDAwQzJDNjVCOTFBQzY2RUI2QkM3QzFFNjAyM0M5MDVDNjZCQgorOjEwREI5MDAwMjQ3MUJENjAwMDhDMDFGODNCQjEyNjAwNTk1NzU5M0RGNgorOjEwREJBMDAwNDQ3RkNEQjQwRTM3QTQzOTNFQTQ5MzlFRTFGRDQ3NUE3RAorOjEwREJCMDAwN0YwOEZCOTk2RDhBRjFGRjZCMDBENzc3QUE3RUIwOTYzQworOjEwREJDMDAwQ0Y5NzY0RkYyMEJFMEI4N0U2QTc3MUYyOUIyQzc1NDBCMAorOjEwREJEMDAwRkNEOERGRjdFMTVGMDhCRkQ3RkZCRkNDNTcwMDk1M0UwOQorOjEwREJFMDAwOTQwRkExN0E1OTRCNjE3QkU4Q0Q1NjU5M0RCMjQyODVERAorOjEwREJGMDAwMzQ5MzExMDU1NUREOTI0QjNGRjVCRTc0MDJENEY1RjIxNgorOjEwREMwMDAwRkQ5MTFBNDI0M0YwRkQyNzQ4NDQzRkUzQkZGNTVBQ0Y0OAorOjEwREMxMDAwMDY0NjcyMjc5NjA2NjM0NDFGMUE0MDZFQ0VGMEY1N0NDNgorOjEwREMyMDAwQjcxNTA5RDk1MjVGNTIyMzI1NjhCRUQ4RDNBNUFDN0Y1QQorOjEwREMzMDAwNzIwOUQ3N0I3N0Q0MkZDRUI2Q0EyQjhGMjQwOUJDMzk3MworOjEwREM0MDAwRTkwMzc0NzUyNkIyMTVBNzBGQjU1RTM2N0NEM0JFMzhDRQorOjEwREM1MDAwN0RBODlGOTMzRUYyRDY1QUZBQzE2N0RGQUY4ODY5MTc1NQorOjEwREM2MDAwOUMyNjdEN0NEMUY5Q0M3RDFEQ0U1NzZENjI1RjRCN0RBRQorOjEwREM3MDAwQzBGOEY2RjZCQUM1MTlFRDhDOTFGN0I1OTJGODNENTI5OQorOjEwREM4MDAwMEY0NjJBNDNCRkZDQzFGRDRDMEUyRkQ5RkUyODgzREI3MworOjEwREM5MDAwN0I4MzZEQkY5NEIxMzMxQjdCNDZDMTg3MTJCMUFGRDc3NQorOjEwRENBMDAwMUNEN0Q3QTJFOEFGRTVCMkFBQUFDOTM4OUUxQkM3NjNBMgorOjEwRENCMDAwNzRCNjMxN0E3QjEyMTgzRjlDNDBEQTY2Rjg1MEJBMkI2MgorOjEwRENDMDAwRDI1ODg3NTI4OEREMkYyMDkwNTlERDE3MzU1MjlCODgxNgorOjEwRENEMDAwMEU1MkI0MkYyNjdDMUU1REI2RTE1RjhERjg2RDc1NjgxRgorOjEwRENFMDAwNEM0QTU2Rjg3RDJENkU4MkMzOERGMzMxN0E1NzM0MzYwNworOjEwRENGMDAwMjA0Mzg1MUE4NEI0MkY4QzJEMzhGQzQ4MDYyNzI3NjJEMAorOjEwREQwMDAwRkREQjM2M0FFOEQyMkIyMUQzM0U5OEY0OEE2OEU1RjQ1RAorOjEwREQxMDAwRkFFREQzOTMyRkNFRjk5NkQ4RTEzREVEN0U0MTU1N0ZCNAorOjEwREQyMDAwRERBMjg3NDZFRUE3QzJFQkU2RkUzMDI0NUU4NTAzQ0M3QgorOjEwREQzMDAwMThEQUE3MEQyRUQ4Mjc5RENERjQ3NUQxQTU5MDYwNEY4OAorOjEwREQ0MDAwMzdFMEFCMzk0NEE3NjRDRjZDMjhBQUQ0OTBBRTYwOTc3MworOjEwREQ1MDAwQTQyMjlDQTYxRTg1NjgwRUI1QUI5MDc0MUE0N0Y2MzZCMQorOjEwREQ2MDAwMDNCNjUzODIwNjk1RTZGQjkxRTExMkY0OTczNEY2OTdEOQorOjEwREQ3MDAwQjI3MUJGMjJGNkY3MkI0MkFGNDE5NUVCQjU3RTEzNkUyMQorOjEwREQ4MDAwRDJCM0VBNTA5REFERTM5RDlCRDhGRjE4OUQyNDJCQTRGMAorOjEwREQ5MDAwRDRGREQyRjBGN0Y1QTgxNzk5NUNBQUM3RTcxNkI5QjI3NworOjEwRERBMDAwN0Q5MDBGQTJCNDVGRjVFMkREQzFDNzVFOUEzQzlERDFDNAorOjEwRERCMDAwNDc1RjRDMDExNDVCRUIxRUYzMThCNTZDRkNFN0NGOTE4OQorOjEwRERDMDAwNTIxRTQ5QzBDQkUwNUMyNEUwN0NENkM4MUQ4Nzc0REFDMworOjEwREREMDAwNTdFQjIxM0E1RTc0QzE5RjIyNDhDNkM3RjdGRDVBQ0Q2MgorOjEwRERFMDAwNDQyRjhCRTZCOTg2RTA2MEZGQURCNkFFOEZGREY3QzM3QQorOjEwRERGMDAwQzE3RDI5QTI3OTRDQjg1NjU2MkEwNDQ3REYzQzI5ODVCMworOjEwREUwMDAwRjMxQ0ZBREQ3RkRERkEyNTA2RTdCMzU1NTJDQ0EzMTNFOAorOjEwREUxMDAwQkMyMTYwRjNGNTE5RUY0NzQ2RjUzQkNDRjk3NUQwMTBGRQorOjEwREUyMDAwOUZDRUY5Q0RGRDA4MTcwMkUxMTVGRTlERTE5NUNEOTczNgorOjEwREUzMDAwQUMxOUU4NUY4Rjc4M0UyNkM1RDZCM0Y5QjJFNkI3NEM4OQorOjEwREU0MDAwQzA3OThBNjU5OUUwREQzOENGMkIyQjhDN0VFMEU1MzFGNworOjEwREU1MDAwMzJFMjMzMjhGODNDQ0JEREVEOURDOEUwRUM5QzI0QzNENgorOjEwREU2MDAwQkRFQ0QxQzZEMkQxRTU1OUJCNDM5RUE5NUFEQzkwNTgyRQorOjEwREU3MDAwN0YzREE5NTUyQUEzRjA0NUNBOTBFQjMyQzlCQjY3MjQ2MAorOjEwREU4MDAwQUUyNzNCOTI4QkI1NTI1Q0RFMjFCQjFEODg3QTI5NkU5MgorOjEwREU5MDAwRDFBQkNDNUU3QzQ2NjJFQjc3NDUzODFENjdEN0M2QjlGRgorOjEwREVBMDAwOUREODM3ODZFNDU3NDBFQzQ3RDZCNEM1NTk5MEMxMEU4QgorOjEwREVCMDAwMUU3MTFENkNBMjRDNzY3M0I2Q0NFMTgzQTM3QzdDRDUxRAorOjEwREVDMDAwMUMzRjY3RjRGMTM3ODhGMTNGNkM5MkEwMEZFMTUzRTNGOAorOjEwREVEMDAwNUVEQzdGMzAyQTg4OUVGRDgyM0U2MTZEMEVENTREQjk5NQorOjEwREVFMDAwRUIyOThCNzcxNUIzN0RGNDQ0NjVEMDc1NUM1RjkyRjZCMgorOjEwREVGMDAwNzkzM0RCRTMyMjA2OEFCRjk2QkQ2NzREMzc3RkFBOTA1MAorOjEwREYwMDAwNUQ5MjJEOUY0ODI2MTkxQzlCRjc1RjBCM0FCMzUzRkQ3QQorOjEwREYxMDAwRDExNDUwN0RFQUQ1NUVDNENGNjZBNjE0RjhGQ0JEODA0RQorOjEwREYyMDAwRjMwNzE4RDlBMjdDMEQzMEY5QUFBMzdDRDU3QkQzMzI5NAorOjEwREYzMDAwQUJBQjc1MTAzM0Q4QUI5MDE2OTNGQzhDNjQwRTQ0NEI4RQorOjEwREY0MDAwREE1NEY2QkM3RDI5MTBGRDAyNUExMTE2RkNCNjQ3NUY2MworOjEwREY1MDAwMzAxNDA2NTc2NzIzOTA1REQzMTlBOUExRjVCNTk3RDc1QgorOjEwREY2MDAwNzg4QkQxREVBOTU3RTkzOTdDQzJGMDYxREEyMTRDMUVFOQorOjEwREY3MDAwRkFDQkMwQzBGOTM2RTc0MzJBODhCQzU0OUI0N0Y0RTg4MworOjEwREY4MDAwRDZGOEZBRjVFREE1OTA5RUNFREU2N0NGREM4RkYzMjdBRAorOjEwREY5MDAwNkY4MUQ4MjQzRTI1QzkzNUQ1QTQwQjM1OTE5NEQwQkZDNworOjEwREZBMDAwNkJEMTYyOUIzMkQwREQ3NjQ4NjRDOTMzNkM3NDRBN0E5NworOjEwREZCMDAwRDc4OUI3MkMzNzVDODhGOEVEQUM2MEY0NUYzQzdDOUM2QgorOjEwREZDMDAwMjJFNDFGNDY2RkE5RDhFMjhCNEEzMkNDNTMyQ0VCNDQ5MworOjEwREZEMDAwMUY2NjVERkZEMDRERjA4RkQ0N0VBODFEQjMzMzczNzFFMworOjEwREZFMDAwNjg0MzQyQkM0MDZEODRENjk3MDM4MzdGMENBQ0U3OEFCQworOjEwREZGMDAwRjU4RTgxNjY2QTE3OUREREJEMUZGOUFDQzBFOEFENDZBMAorOjEwRTAwMDAwNUM3QzM3NzRFOUYzQjQ2RjcwQjc4NkYxMDgwNjZERTk4QworOjEwRTAxMDAwQzlEQzIxMzk2MTA0Qjk5Qzc4MkYyNjkzN0MwQ0M5NjkyRAorOjEwRTAyMDAwQ0Q2MDAzODQ3QzdENTE1MkQ2M0E5MDFGOTE4NTVEMTg1NgorOjEwRTAzMDAwQzA5QjVBQkJBN0EyN0YxOTg2OTg4NEVGNDMzMTM1NjlFQworOjEwRTA0MDAwOTUzRjU5QzBFQTM2RkIwRjhFOTRDRTI0RDJFMjdDMDE3NAorOjEwRTA1MDAwREE3RTY0MTlBREFDRjkwQzFDRUYwRTA2OTA4RkY5Qzk4RAorOjEwRTA2MDAwNUI0MjA5RDIxNzdGRjI4NUE3RTE2NDdGOTJFMzU5Njk4OQorOjEwRTA3MDAwREVCRjBDRURFRTFCMTU3RjZDMTNEMjQzOENFQjA3MkYyQworOjEwRTA4MDAwRkIwN0U1NUZENjZDRDUyNjhGQjMwRDdCM0REN0ExMzc1NworOjEwRTA5MDAwMTYyODQxNUE2RkY2NTc0MEU4MDNBMzdFRDI5ODIxRjgxQworOjEwRTBBMDAwMTg2NDBENDgzN0RCNkE1NUMwRjk4MjQxMEU5NzA5NjczRAorOjEwRTBCMDAwQUVGMjQ5NUEwNjgyRTMxOEMyQzFEMDQzNzA4NENCODBDNQorOjEwRTBDMDAwRkMzRDA2Q0YzMTA3M0NDNzFDRjAxQ0IzQzJEM0UyRTVEMAorOjEwRTBEMDAwRUI3NUZBRkRDQjY1RTFGNzMzQkYxN0Y1RTAwOTc4REJBNworOjEwRTBFMDAwQTg0MzgyMzFDNjkxNUUwOTZCQkM2REQwREI0NzQ2OTU3MworOjEwRTBGMDAwMDYxQUVEQkZEM0VGNjdGQkYzOUU0RDNGQ0MxNjc1OUQxRgorOjEwRTEwMDAwRDlGNTI1MDQ5RkZEM0QxNDExOUQ1MDVEODE0MUZGNzU5QQorOjEwRTExMDAwRjk2QzEzM0ZGQTU3NUY2MTdDNzdFRDYxMTcyMDVGMzEyRgorOjEwRTEyMDAwRkU1NUYwQkQ0QkJDQkQ1NkY4QjFDQjUxRkYzM0JEN0RBNAorOjEwRTEzMDAwMTVDNEMzMDhERjNCMjA5M0JERkMwRUJDMTA5RTZFOTEzRQorOjEwRTE0MDAwOEI3N0M4NkVBMUM3RDk4NjVBRjkxNzYyNTFGNEFCRDUzRgorOjEwRTE1MDAwNjA2NzlGMTIyNjM0OTg3NDI2OURBNDdEOEIwMUY5REQ5QgorOjEwRTE2MDAwNDE0RTZGNDlGMEI2OTE3REQxQzVGNUEzRTlGNzdEQkQ2QworOjEwRTE3MDAwREJBRUFGQUZEOTZFQUY1RjBEOEJDNzIwN0Q1RDdEQTdFNgorOjEwRTE4MDAwMEI1MjZDREM2QkFERjYwN0RCOUY2RkM5MUFDMTc3MERDNAorOjEwRTE5MDAwMzQ3NzZBNDFCMkIzMUE3MTFEQ0IzNTUwRDE0RjVCRjk1OAorOjEwRTFBMDAwQjM3QjY2MkU2M0VCRDkyMUY0RTg1QjRDQUVFQjE2QkQ3NgorOjEwRTFCMDAwNzE1RDI0RTUzNkNBODdBRjZGQkQxNDVCRjQyNTY5RTQ1MQorOjEwRTFDMDAwRjU2RDcwRjUyRDQyRkIyMEI5RDU0NTdFMUQzOEZEQjVBNgorOjEwRTFEMDAwQkQwQUY5NkI5NjdFMDRFRjk1NURGNkY1OUQ2QUZEQ0U1RQorOjEwRTFFMDAwRjUzMjhGODVENjdCRERBRTY1QTQzNzQ3NUE4RjdCOTc5NgorOjEwRTFGMDAwNjRBNDMyRThCNzg3NEQ3RDI4RTQ4QjQ5REYyNjVGMjc4QQorOjEwRTIwMDAwNkI4MERCN0JCRkY3QTVENkIzRjk3RTgzRjI5MUY2QkZCNworOjEwRTIxMDAwRjk2QzFFNDc2OTlFODVFNUE5RkFGRERCRTdFQ0Y3RUY4RgorOjEwRTIyMDAwOUZCM0RGNkI0MjhFM0JGQkFERjRGNkJCNzEzRjU3QUI0OAorOjEwRTIzMDAwQzkzQTQ5MUVCMkEzQkRBRTY2QTM5MEExQzJCNUFGM0ExQQorOjEwRTI0MDAwOERBNjk4QTU1REQ3NjlCNjNCMkM5NTlDNTZCQjNBNzlBRgorOjEwRTI1MDAwOTRGMThFMEIzQkUzQTkzREY3QjlGQjkxRkY3NkJGQkE3MgorOjEwRTI2MDAwMDhGNUZCMzdGRTQ5MDEyRjVCRDdGMTNEMjE0ODIzN0Q5RgorOjEwRTI3MDAwQUEyOTM3REEyQkQ3MzFCQTRBNTEzRDNERjM2MjhCNUQ3QgorOjEwRTI4MDAwQzUyODk2QzZGRkM2NDMyMUIyMEZBRTdCQzQ5M0FBNjdDQQorOjEwRTI5MDAwRkRBRkZCRTk3RjRDMDM4Njg3RTNFQjA2RkVBNTEwRTlBMworOjEwRTJBMDAwNzVCN0M0RkRCRjY0RkZCNDhCRDlGM0VCNTRCODIyOUU5RAorOjEwRTJCMDAwODE0RTY0ODVGM0NCREIzRjBGMzRBMkREMjdFRERBN0Y5RgorOjEwRTJDMDAwMzk4RERCRkI1NTE3Q0E2NUIzREQ0N0IyOEJFNjY1RURDQgorOjEwRTJEMDAwMEM3QzlGN0M1MDRBNEQ5MjM4N0MwRDUzODdGQkRENkY0MAorOjEwRTJFMDAwM0YyODcxRjhGNkI5NTIzRTg0NkY1NzhGM0JDMURBQURDMworOjEwRTJGMDAwREVGNTJFRDFFRDc5MEZGRDM4OEM3ODU4QkQ0RkIxRjk5MAorOjEwRTMwMDAwQkJBQjc3Mjk2OUNGMzQyQTVGQzUxMjM1QTNDNEY4NkQzQQorOjEwRTMxMDAwOTVFMEQ3NTU3QjU3OTIxRTU4RDVCQkY5NURFNEQ3RDUwQworOjEwRTMyMDAwRkI1QzM2QjlDRUYwMTI0QjIzNUU1RjUyNjJGNTU4N0YyQworOjEwRTMzMDAwRjQ4NzYxOURBMUVBQURFOEVFQjA1NjRFRTMyRTczMzM0QgorOjEwRTM0MDAwQkFCQTY4QjZCRDFGOEVGRjYxQ0VGMEYxMDAwNjI4QUVFNgorOjEwRTM1MDAwQjlCQTc3MjM5RjBGQjhCRTMxRjlGNDJERkM0QkZFNzA4QworOjEwRTM2MDAwQkQzMTQ1QjE5RjNCOUM4MDY3Njc1MjFDNzI1NzZFNDYxQQorOjEwRTM3MDAwM0ZDRUQ0MTcyNkJGN0VFM0M3Mjc3NjI2RDlCQzZGM0Y5MgorOjEwRTM4MDAwRjI4NzlENDkwNkZGOEFGRjc5N0ZFN0I3RDlCQUUwNDk0RQorOjEwRTM5MDAwOUY4NjcyNjhGNUVFREY4NEMxODJGNzVBODVGQjYxQzdGQworOjEwRTNBMDAwMUZGQ0UxMDMzQjE4QkYxQ0ZGQUQ4N0VDQkFFMzRGRkMzOQorOjEwRTNCMDAwRDc3ODlEQURGQkY4QzMxRjhENDFCQjczRUQxM0U3OEY3RAorOjEwRTNDMDAwNDVGQTVBRkJEODc5NjM2MTE0RkYwMUU5MzVFNUIxRUVFRQorOjEwRTNEMDAwNkI4QUY2NTVERjI3NjExMDA2RTA3MTUxM0FGNkU3RTBFNworOjEwRTNFMDAwNUUyNThEQTFEQjc3NUVGNkE0M0MwQzNGQUJEOUIzOTZERQorOjEwRTNGMDAwNEFEQ0FGOTVBNDg3QjA3RTMzQzNGM0FBM0QxQkRFNTUzQworOjEwRTQwMDAwQTY2NUMyNzdCMjUwOEU2MkM5RDgyNjhBRkI3REYxNDVENworOjEwRTQxMDAwRTc1NDYxRTk4QUU5NDgxRjMwNDBGMkRGRDk2RkY1MTEwRQorOjEwRTQyMDAwQjZBRjY3OEZCQzhGMjdFMDEzMzdFMjdGRjU5RThEN0NGOAorOjEwRTQzMDAwNUVDNzNFQkU4MzdGOTk5MzQxRkYwRkRCQzcxNURGREZDOQorOjEwRTQ0MDAwODEyRkY3RTZEMkJFOEZCNDhGMkIxRkJCNjQ1NEZGQ0M1NQorOjEwRTQ1MDAwOTQwN0E3QzI2RjkzQzRFMTNBNUIzMUQ2MjhDODU3OEY5RgorOjEwRTQ2MDAwRkNFODgxMUQxMUJFQkZGNTBDMjFDNzdGN0M2MjNDMDYxNAorOjEwRTQ3MDAwOTdERjcwMEQ1QzhFNzI3MkUwMDk4Rjc2MkZFQjczREQ4MworOjEwRTQ4MDAwMTMyRjExOUYxRDdGRUM3OUI3NEU3MjEyODIxMkQzN0IyRQorOjEwRTQ5MDAwQzc2MUYwNEYxRkVBQzE1NTEyQUZBQ0ZFNDEyOEVEMDkyQworOjEwRTRBMDAwMEZFREQzQUE1NDQzOUQxRUE2RTdBRkQyRjMxNEE3RkZFNgorOjEwRTRCMDAwNTVBOUZENEJBNDBDRkJCNjVCMjlFMTcyMzk5NTQ3Nzg1MQorOjEwRTRDMDAwNTlBOUY3QjlCNUEwN0QzRkE1RDlCODhGQUYyRTQwQkFFRAorOjEwRTREMDAwMUI2OTFGQ0RGNTZCQjhGRTU5OTZGREZDMDFFN0RCOTE3QQorOjEwRTRFMDAwRjhGMzc4OEY0Nzk1QjI4NkY2RjdCOEIwMEY1NkE3QTQyMQorOjEwRTRGMDAwOTcyMDAzREYwMkFDRTNGMDhFNzBGRTY4OTY0RTdBRjg0OAorOjEwRTUwMDAwODE4MzFFQ0NGRUU2QkE0RkM1RDdBNzVFQ0Y2N0MzRDdCRgorOjEwRTUxMDAwOUQ4QTZFQTMxQjEzNkY2RjdGOTI1OURFQTc4NTlDNTg0RgorOjEwRTUyMDAwMDVDOUJBODI4OUMzRjU5NTBBRjE2NDYxRjExMEJDOURGMQorOjEwRTUzMDAwQkQwQUM5RjFCNzc3Mjk2NEE3M0JFNUMyQUExMUZDRjE2RQorOjEwRTU0MDAwNUYyOURDRkU1OEI1NkZGRjM0OTQ1RjZGMUZGOEI5QTBFOAorOjEwRTU1MDAwNDM0RUU3QUJGNkJDRUE0RTBBRjk5RkIyQ0E3RjFDMkZDNgorOjEwRTU2MDAwQzM3RUJDMkNFMDVFRkQ3OEU2RjE1NkVGNzkzN0UzNzhBOAorOjEwRTU3MDAwNkZBOUM2NTcxMUZFQjdGQTVDOTA2NDQzQkNENUFCNjQ3MworOjEwRTU4MDAwOEM2RjFDNTA1Q0I2Mzg2RTY3NjhFNkNCNTkxOERGMEM5MAorOjEwRTU5MDAwRkI3NTVDRjdGQTc1QzY0QjQ5QjQ0MzVFNzAwMUQ5ODFDRgorOjEwRTVBMDAwNkFFQzBEMEY3QkJGM0VFNEE3NzNFRkY1RTFBQjQxQjcxQgorOjEwRTVCMDAwRThFOTc2MDc5RUQ0Njg5Q0ZDNjAzNTEyQUZFMkIxRDdEQgorOjEwRTVDMDAwOTRDRDFGNzU2OUIyMEQ2RTUwOTM0NTE4NEZGOTU1RjFGMgorOjEwRTVEMDAwN0ZBOTM4RUU3MzY4RkY5RDMxRDRGRTM5MTUzQTcyRDlBMAorOjEwRTVFMDAwNzhDRjE5NTJBQzBEMzJDNEE3MUNFM0M3RTcyOUEwNUI1MgorOjEwRTVGMDAwRTlDQzI4OTNBREYxRDVGMDgxOUIyODJFRDEwMkNENjlDRAorOjEwRTYwMDAwOEMxMzQxMTFGNERFNkYxOUY3RUU1NjBERDI2QzdFQTgxMworOjEwRTYxMDAwMkI5M0FERjE1NTRGNzNCM0UxNjE3MDE0QURENTRBRDA3MgorOjEwRTYyMDAwMzQxQjY5RkU3MUNEQjIzREFFMkRFNjVGMjNFMjA5QjAyOQorOjEwRTYzMDAwNkJGN0VFREQ2Q0RDM0E3QzU3ODI3RTBDOEY1NzMxNzdCRQorOjEwRTY0MDAwOEFFQzk4RjM4NDFDRkM2NzYxMDcxRjkwRTI4N0QwQ0ZBNworOjEwRTY1MDAwMzJGNDZEMkFDQTM5QTk3NDlCOEFGNkM0QzI0RkJBRDU1RQorOjEwRTY2MDAwRTUxNjdBNUM1OERBNTY4NEY0NzJGODUzQTUzMTEzNURENgorOjEwRTY3MDAwMkQ1MTM5NURCNTE1NkYyOEMyRkU4NzdEMzcxNjcxMjc3QworOjEwRTY4MDAwMzQ0QUVCMkMxMEVCM0MzNEVFOUE2MDNGMUI3NzdGRjE2MQorOjEwRTY5MDAwMzU1QjI2MzNCOEVBQTIwQTYwQkNBNTJFQjI2QzRCMDVFNgorOjEwRTZBMDAwNUI3RkMxMTEyNUU2NjNGNTgyQTZBNDlBOTgzQTdDOUUwOQorOjEwRTZCMDAwOUQyOEVGMTlGRUVFNDUzQzMyRjg3RkQwMUFBNUZBMDNFQgorOjEwRTZDMDAwQUQzQTk1QkI1QUNCQThEQ0REMUFBM0Y3N0I1QTY3NTM0QQorOjEwRTZEMDAwQkRCN0I1OEVDQTQ3NUFFM0Y0M0NGQzJEN0YwMkU5NzdGQgorOjEwRTZFMDAwNkY2QjIzM0RGRjY5NkI4MkNBMUE5NUYzREI0MjgxMEY4MgorOjEwRTZGMDAwQ0JCQUU5MUM2QzQ5N0I3ODFEQzY1MTRDRkMzOUYxNURFNQorOjEwRTcwMDAwQ0IyODJFODdDRTBEMjQxREYxM0Q1NkU1NzJDNTg5RDc0NQorOjEwRTcxMDAwOTY5NjIwRDlBNTNCMjVCMEUxNzNBNkNBRURDOEI4ODA2RQorOjEwRTcyMDAwRTM5MDM3NzFBMUNBQ0FGN0VBNEFDQkM5RUU4MTc4MENFNworOjEwRTczMDAwRTVGNDRFMjk3RTVCMDVFMzk3QTdDNkNEOEE1QUU1NkVDMAorOjEwRTc0MDAwMjQ5ODg4QUI3OTQzRjVGMTVEM0MzRTMzNEJFNUYyQTk2MworOjEwRTc1MDAwMEVEQTBFNjUzMUY4OEM0RjQwNDczQTMzRDc3OUEwNUExQworOjEwRTc2MDAwMkY0MkI5NzhBMDhEQzE1MzhFRUY2NTI4QjNEMDk5Mzk2NworOjEwRTc3MDAwREU1QzAxMUYwNDMzQ0JFOTIxQkFFNUZDMUY5RDVCQjZDQgorOjEwRTc4MDAwMERFM0M0Q0NGMThDNEREMkM5RUFCNkY1REJBNjlBNzE4MworOjEwRTc5MDAwNkY5REU4RDhBNDEzQzYzRjRGOEQ4QkQwMzBEQzVGNkNFMworOjEwRTdBMDAwMkFFNkVGN0Q5Q0NFNUJGQURGQTVGODU2NzQwQ0Q4RTIyMgorOjEwRTdCMDAwOEQxRDREMzJGOTM5M0I4RUYyQjhGNDg5QTY5MjZEOTNENgorOjEwRTdDMDAwNTlGQjZBODYzN0Y0REI3MzE2OTY2NjI1MkM3NEJENDVCMworOjEwRTdEMDAwRDBEMzBFNkYzQzRCMUI0NTdGNzU4QTc2NjZGRDE1NUY2NworOjEwRTdFMDAwRTIzQjg4RTdCRjlGRjA5MzdDQTRFNzFEQUVENDY1Mjg4OQorOjEwRTdGMDAwMUY1QjhFN0FGNDc1MTI5RTM3QzQ5M0I4NkZGMTIyRjZDMAorOjEwRTgwMDAwOUM4MTc0QTI2RUFEODc5NjE2RTRFNzBGMkQzN0VCREI4MworOjEwRTgxMDAwQ0VCMEYwNzkyODY2RTdFQjlEMkRBM0M3QTU0REI4Nzc1QworOjEwRTgyMDAwMjJEQ0EzQzQ2NTREQjhDREZEMzg1MUI3NjRFMDFBMTg5OQorOjEwRTgzMDAwOEUwN0U3QjgzOTBCOTc4QzNBRkZEREM4NzcxRUMyQzM0NQorOjEwRTg0MDAwNEVENTIyOUY4QTlBMzUzQTY3MzBGQjlCRUI3NUY2Nzc1NworOjEwRTg1MDAwQUU3NzI4NUZFMUY0Q0U2NzdBNUQ5MDhCRkJGOUYwQzc2NQorOjEwRTg2MDAwRTMxRjdEMEU3MENCRTMwQUNBQjEyQkQ0NDQyRkVFQ0I0RAorOjEwRTg3MDAwNEM2OEE2M0FBODAzRjlDODJGQkZGMzczRkFERkQxRjlBMQorOjEwRTg4MDAwNDAzRUYxOTE5QTJBNDZCRDcwQkFGMzc1NDAzQzVFOERDOAorOjEwRTg5MDAwN0EyQjI2QzdBQ0YyREMyQzdGQTE5QTcxODIzNEM1OEYwQgorOjEwRThBMDAwRTg4ODk5NEQyOTA3NkU4RTY2QzJGM0UwRjg0NUVBREJFOQorOjEwRThCMDAwRDZGM0E0MkQwMERDNEY0RjdCRTk5QzAzMDMyMjFBQUI1NworOjEwRThDMDAwMTcxRjg2Q0E0RDZDQkNERDQyOUU1NEFCREMyRjlDN0U2QworOjEwRThEMDAwNThFRjUxNzhGQzQ4NjkwODU5RjAyOEUyQTk2NjFDQUI0QQorOjEwRThFMDAwMDM2RTA2OEQ3NTc1QUIxNUZCQjFCOUM5ODcwREVFQzQwNgorOjEwRThGMDAwOEI4ODJGNzc1NEE3RjM3NzU3MjQ0MTdDMDUyMkZFM0Q2MAorOjEwRTkwMDAwNEVDNEU5Q0YxNzcxQzZGQjVCNzg5Q0IxMDVFMjE3OUUzOAorOjEwRTkxMDAwODE3QzdENDQwMUYyOEYxMzEzNkRGQ0VCNUNFNzdFNDEzQgorOjEwRTkyMDAwNTdGRjI0RjRERkNGODVEQzJFNTVGNzRCNTk2Q0ZDRDAxNAorOjEwRTkzMDAwMUJFOTAzNjE1NkZFNENDOEYxQzc4NDFDM0ZCMEVENUY3NAorOjEwRTk0MDAwOEEzMTlGQTAyM0UxOEUyMTRFQzM1NUZFQjRDNEVDRDA4MgorOjEwRTk1MDAwNUI2N0JFQTE1RkNCREE3Nzc0NEY2RTQ3RkM2QzU4Q0IxOAorOjEwRTk2MDAwRTNGMjhGQTJEQzY3RkQxRTE2NzIzRkRDREM3OTNEOUQ3MQorOjEwRTk3MDAwREIwOUY5NTI2NEU2MEIwODc5NTIyNEU0QzlDMTZEMkYxMgorOjEwRTk4MDAwMkVEQjgwRUI0Qjc4Njk5RTE2NDgzRjhENzE3RDU4MkJBRQorOjEwRTk5MDAwOTM5RDEyRUVGRERFMEQzOENFNDNBRDA2MUZCNzdCRjcxQgorOjEwRTlBMDAwREZBMTdEN0Y4RjM3NURGOUFGMThGRjlGRTc4RTI1NTE3RgorOjEwRTlCMDAwNEVBNTI2RDlFNDU0Qjg3N0RGOEREODJFRENGQkNDNEQ5QworOjEwRTlDMDAwOTQwRjIzRjBFMDc5OUNBRDk3MzVDOUJBRkQ3MDNBQzQzNQorOjEwRTlEMDAwREExNUY2QTdEMUVDNjZGQkRBQjM3MDBBMUJBRkI0NUVBQQorOjEwRTlFMDAwQTY3MEY1MUUyOTdFNUUwOEU5QTE4MTlGNDM2NzU1MkMxQworOjEwRTlGMDAwNjlDM0Y2REQyQjVFNDg2MkZGMzFDRjM2NEJCOEVEMzk4NworOjEwRUEwMDAwN0Y3NzZGMzVFMkVGRkVBMkQ3OUVBRTY2RTU2NDU3MzFBMQorOjEwRUExMDAwRDE0MUYwQTg5RUZGNDNDMEYxRTNEMTZCRjU5MUU5RjAzRAorOjEwRUEyMDAwRTA4QTM1ODA3MkNDNzNBNzRDRTdGNEY3REZCOTA2QUUwNQorOjEwRUEzMDAwQjFFNjVEQUM1MDMzQzZDNzI2QkIzQ0ZDM0NFQkNFQzU1MworOjEwRUE0MDAwN0QyODY3Q0RGM0FCQzI5NUI1NUVFMkZGNjdDMTc2M0UyOAorOjEwRUE1MDAwNkI5RTYzOTlGRDJCQTRDNDY0NTcxRTlENTdGMDczMkRDNAorOjEwRUE2MDAwRDFCRjQwNDExQjhGNTU2RjkwMzkxRkM0RDMzRTZCQkU0MQorOjEwRUE3MDAwNDlGMDdBMzk5RTA5OUU1OTJFOTVFMDY5OEZENUVFRkFCNAorOjEwRUE4MDAwMTczNjlGM0FFQjUyRDJDQkQwNkQ4N0MzRDk4RkMxMzFBNQorOjEwRUE5MDAwOEJDM0MxRTEzM0UxMThDNzRDODIyMDlCRkZGNjg1MkY2MQorOjEwRUFBMDAwRTYyMzdDMUZENjBERUExQjNGRkFGRjFEREY5NUQzMTMyQgorOjEwRUFCMDAwRDhGRTZDNkQ5N0U5RkNGRTQwRDUwMTJGRTI3MTRCNTVGNQorOjEwRUFDMDAwOEQ5RkRCM0Y5Q0VFNzIwNDFGRkRBMDRFMjZCRTNENTE4NAorOjEwRUFEMDAwQzVDRkZCRTE5MzkzNzQxRUU2MTJFRjczRjIwRTc4RTk1MworOjEwRUFFMDAwMEMyMzY5MDRBQjY3NjJGQTgxRjlDNzkyNUZDMDcwNTM2NworOjEwRUFGMDAwOTlGNERCRTRBN0RDOTI2M0NCMzcxODA3MDU4RUJDOTU0RAorOjEwRUIwMDAwOTJBMUY2RTg3RkQ3MUQ5MTUwMkY4NUM0Nzk3NEE5NzkxOQorOjEwRUIxMDAwQkVBRDFDOERFMUZBRUYzMkY1NjJBQjk3Q0E5RUU2MDNGQgorOjEwRUIyMDAwM0U5REMxRjU4QjY2NDYyN0I0MkU3QjVFOEFBNzA5Njg5OQorOjEwRUIzMDAwNUQwNUNERkM5QzZEOEJENkI3REZDREVBNDVERjY1QThDMgorOjEwRUI0MDAwRDdEMTlFRUIyNUY5MDJERDNDNUZDMDNDRUY5OEI0QzIwMworOjEwRUI1MDAwOUVCNzUyRTRDOEI3MTk5NjlGRjUxOUZEQ0NFQjVERjY0OAorOjEwRUI2MDAwN0NDMzEzQjA2NTBBRDE0MzVGODk2RDVGN0FFNjMwQjcyNQorOjEwRUI3MDAwRTZFQ0UxRkVFNkUwQjhDMjlGODIyODk3NzMzOTNFM0U5QworOjEwRUI4MDAwQzdBRERGNTI5QUQwNUUwQTVGNTg5OTZEM0QxRkVENzQ5NAorOjEwRUI5MDAwNzEzQkU5RDBFRjNDODBGMUY4MERCNTVFOEFFMzk4RTc3MAorOjEwRUJBMDAwRThFNjdFNkZDNUE0MkJDQzc3Njg3RkMwODdGNEIyMjNEQworOjEwRUJCMDAwNTI0MkU1QzFCOUNGRjhGQTg5MEU3OTNFODA0N0FDNjk3NworOjEwRUJDMDAwREREQzY3MTYzNjMxQkNERTkzMjc5MzhFRTkyODdBMjE4NworOjEwRUJEMDAwMUZDRjE3NkZBRkY1RDI3OTdGMzhEMERGN0I5MEQ1ODMwOQorOjEwRUJFMDAwN0ZFRjhFRTFGOUY2RkRENUU5NDZBQkZGRkE5MDhCREJCRQorOjEwRUJGMDAwNUJEQjVENDI1RjZEQjE5RjNGMzMzRUQ4OEU3Q0UwMDlBOQorOjEwRUMwMDAwQzZFOUZDNTJGNjhBQkMwOTg3OUY2M0UyMjM3QzIwNUYzOQorOjEwRUMxMDAwMkU5RUNBQ0I5MkE5NDNGNkY5REQ4MjZFNzYwODc5QkZBMworOjEwRUMyMDAwNDVDODdCRTczOEM1NEREQTAxMzdEQUZEMkJCNDRBMjVGNAorOjEwRUMzMDAwMDM1RjRFNjhCMURCMDlFMzlBRUQ3OTM1ODU0RDc2QkEwRAorOjEwRUM0MDAwMEZDNTBBMUM3NjQ1OUFGNDk4QTk4RjM3Rjg4MjEzOTE1QworOjEwRUM1MDAwRUUyQjk5QkVFNEY2ODEyNjVCQ0ZEQjlERkE3OEI3NkE4RQorOjEwRUM2MDAwRUM3MzkxQkQ3QjdBNzY0MjM4MTA2RjQ2N0MzQkVERENDRAorOjEwRUM3MDAwNDMwMkRGMUYyQkM2MDFDNDZGNDA4RDFGNzI1MTFFNjhGNworOjEwRUM4MDAwOUNFNDhDRDM2RTE4MDYyNzMwMzhBNzhFMEFFNzJGNUREOAorOjEwRUM5MDAwOUZDMTdFM0FENUY5QzA5RkU0RjhGNkU3MThDOEYzQjNGMAorOjEwRUNBMDAwNDBFNDVEODQ0ODBFNzc4NEI4QkZEMkUxRTI3RUMyN0I0NworOjEwRUNCMDAwNjI1REZGRTE1MjY4REMwMTQxNUZGMzAzRDA5QzM5OUY0NAorOjEwRUNDMDAwOENDNzhCM0U0MEMzMDREQjhEQ0Q5Q0JGOEIxNjBCQkQyOAorOjEwRUNEMDAwMkZDQ0ZDRkUwMzE3M0Y2NzlCM0Y2MUY0NzlGRTg4RjM1RQorOjEwRUNFMDAwQjBGMjU3QUFGMUFFQ0I3MjhFRjM4NENCNzhERjY1ODk5MAorOjEwRUNGMDAwNTM3Q0U4RDIzODNGOThGQjIxRjI3MzRERkI2OTlGNkE0MQorOjEwRUQwMDAwN0M2NEVENkY5NjM5MEI1NTNBQ0YzRDAxRkU5OEMyRjAwOQorOjEwRUQxMDAwRjM2NDNFRUMwNTI2NDc5RTk0MDQzRTdGRTdBMzNDMjAyNworOjEwRUQyMDAwMTNERjgzRjYzNUNBMEZENDAzNDcwMzI5OENBNzk4RkI1QQorOjEwRUQzMDAwNjA5RUMzMENDQTExRDFGRTRDMzc5NzI3OEM2RTAyNkVCMQorOjEwRUQ0MDAwOUEzRkNFQ0YwQjIxNERGMkExNDBEMENEMEVERkQyREJDQQorOjEwRUQ1MDAwNkE1OTc5RUJEQ0I3NUVDNjdDODU3NzFFRjNFOTA4RDc4NAorOjEwRUQ2MDAwRDZBQTYzNjFBQkRDODQyNjNCRkQ5OENGNUQxRjE2RDIyQgorOjEwRUQ3MDAwMzlGRDM3QTU0NEJFREJFMjQ3QkEyMjAzNkVFQ0ZGQTQ5RgorOjEwRUQ4MDAwQTQ5MzNGOTdGQzhENDJGNkM4OTM1MjZBMEExOTJBMkEyNworOjEwRUQ5MDAwRDA3OUM2OTNENzQ2NTM5QjJDRTcxRDRFM0IzRkM3RDczMAorOjEwRURBMDAwN0ZENzZBNUM3NzEzQjM5NzYwRjhCRTk5NzZGQUEwRERENworOjEwRURCMDAwMTFCNUY3OEZCQjQxRDhEOTZDQjk4Q0FGMkJDNEJBNjNFRQorOjEwRURDMDAwQUFBMTIwMUMzMzIwNDFFNTJDRDBBOTY0RkU0MEE1OUJCQworOjEwRUREMDAwQjU5RjBFMDNGOUM4NDdFQjAyRTNCRkM0RUQ4Q0ZGMzNDOAorOjEwRURFMDAwQkMxOTdGOEQ3ODFCQTI1QkJCREUzNkNGMURGMjA0MUVFMworOjEwRURGMDAwNDJEMDRDRTdFRkJGNjg1Q0JFNzExMjlCQ0Y1RDE0MjQxQworOjEwRUUwMDAwN0IzOEFGQjFGRDdBMzk4Q0Q5N0U3RDFBRkE5Qjc5RTJENQorOjEwRUUxMDAwM0MxQzk2NzBGRDZDOUU0RkU3RDREQkY1Qjk1MzdGN0JBRAorOjEwRUUyMDAwODRCREUxMTk0MUFGM0JFNUU2NDg3QTdEODVEQkFFRDc4RAorOjEwRUUzMDAwMDdFM0M3MjNDODNGNjdGQ0Y4RDRGMjRGQkZBREI2MTg0RAorOjEwRUU0MDAwRjMzNDhDOTc2QUQxQUU5QkE3NTJCQzMzM0MxMUFFODg4OQorOjEwRUU1MDAwNUJFOEUxRjc2RTIyM0E1NkYyQkM5OTREOEM1RjUzNjczRQorOjEwRUU2MDAwNzAzRTA3RjQxMzAyNEMwMUUxNzlDMjM4Mzk4NUY5MzY1NgorOjEwRUU3MDAwMUI5MkE5M0FDQzNGREJBMDRFRDJBQ0ZCNTgzRDhFREJCNworOjEwRUU4MDAwQjM1QjZCRkM0RDU2QkJGNjBGN0UxNzhERkZDRDQwRjU4NworOjEwRUU5MDAwMzM0OEM3RTVDMTU0MERCOTdCMDY3MzA0QzdGMEJDNEJCQQorOjEwRUVBMDAwRENCN0IzMzRFOEM3NzM1ODBGNzBCRENEMzhDMkNCRjVBQgorOjEwRUVCMDAwNEFBREY2M0FFNTY3MjZFMDY0NjAzNEJENjBDRkM3REM1MgorOjEwRUVDMDAwQURBNkQ2RjkxMTFGMTExRTdGMDk2RDk3MjgzOTQ3RTlBNAorOjEwRUVEMDAwMzVEMjk4Q0I1NTE1NTg3Q0I3OUJFQkFGMzI5QzY3RkY2QQorOjEwRUVFMDAwNEM2NkVFQjJGNjdGRENFRjI2M0JBNzM3NTRBOEEyM0Q3NgorOjEwRUVGMDAwRjlBNEJDRkNGQjY4MDcwRUZDRDYwMzc4OUVEMkZCRTlBNAorOjEwRUYwMDAwOTk3NEFGQTEzN0Y0QTUwNTQ4MDdCRDEyMzBDRjk2QUQ2RgorOjEwRUYxMDAwOUZGMTBGNEZGRTgxMDBDNkVEQzNFNzE5ODA3MUNCODFEMQorOjEwRUYyMDAwNUY0MEVDNUUzNkJGMkJGQTY4OUNGMjc2QzEwOEM4QjMyRQorOjEwRUYzMDAwNTkzRjFGNzQ2MUZFNEFFQ0NGRkVGN0NGNjU3NEY3NDg2NgorOjEwRUY0MDAwQjBGMjhFQjM2MTI4MEU2MEZBRkZCNUZFQzRBMzA4Njc2NQorOjEwRUY1MDAwQzc5ODdGNkI0MjNFRUI2MjcwMkE2NDg3MTk1MTg0QkI2RAorOjEwRUY2MDAwMzI0RjI2RkU4M0JDNjA2QTEyN0I1RTdEMzg1MjhCRjk3RAorOjEwRUY3MDAwNjhENTZBMDU0QTFBMDYwN0RGRUY1NzdDODkyNzEwRkYxNAorOjEwRUY4MDAwQjU1QTQzNkQzNjZCNUY3NTQ0Mjc3QjY1NDFGNEZBNDM5MAorOjEwRUY5MDAwNTg5Rjc5OTRENzNCREM0MEY2MjBGMjJGNThGOEFGRkEwRgorOjEwRUZBMDAwQzNGMUI0QkVDMzQyOEVCNzQ3OEQzRTQzMUE2NTNGMzRBQQorOjEwRUZCMDAwRDU3MTlGQzM5RUM3NjJBNTAzNkRBNjhEMEUxMjJFMkIyMQorOjEwRUZDMDAwMURDQzY2NzQzMEQ1NEEwNzg2RjQ1OUU4RTA3QjQyREVGMgorOjEwRUZEMDAwOUU5QTVGMzg5RkRDQTg3MEJFMTk0RUY3Q0RERTlDRjI3QQorOjEwRUZFMDAwRTFGQzYxQ0VCQkE5MkEyNzgyRTdBQjI2MUY2OEIzNkU3RQorOjEwRUZGMDAwRDZCMEVFNTlFNjhFMjNERjk5N0M2MUYyODNFMjFCRTQwMgorOjEwRjAwMDAwOEI4QjdDNkM3Rjk3MDRGNUYzMzNGMTA1RkE3MTU2RkExQworOjEwRjAxMDAwQkY3ODA0M0U1OTA0MDM4NzMwRTc3RTkxMEFDOTJDMjY0NQorOjEwRjAyMDAwNDI3RTM1RTc4REQyRjExNkJBNzdFMjY5RDEzQzA5OEU3RQorOjEwRjAzMDAwNTlFNEQxQzk5M0JDNkVDMUEzMzY5ODA3QUQ5QzNFQkVCRQorOjEwRjA0MDAwNUY1MEY1OEU4ODg1RUYzQTk5RkQ4QzQ2NjE5NzFDODM1OQorOjEwRjA1MDAwQkM2MkU0QkJFNTQxQ0YwQ0JDREZGMDcwOTRFMkZCOUVFOAorOjEwRjA2MDAwNzgxM0U1QURDRDdBM0I3MDM1QTNDMzNGOEU5MTc1NUNDNworOjEwRjA3MDAwN0M4N0JFRkMyMUUyREY5NzAzODA3NkRCRDY5OUQ3NERGMworOjEwRjA4MDAwNDBGRkU0OEZENzI2MjY2MDlDNzMyM0MzRkYzMTMyNkU4NgorOjEwRjA5MDAwNTI2MzY1Q0E4NUVBMUZDQkNGQ0JGNDI4MkYxMzUxRkVFQworOjEwRjBBMDAwMUNDNEZCOTRBODFCQTI1RDNGQjU2M0ZCNkM5Mzg3REI3QworOjEwRjBCMDAwQkQ1QzBFNkVGNzcyM0I3MEEzQkJEQjhCRkMzNTUwRUM3NgorOjEwRjBDMDAwQTVGMzU0RTdGQUNGRjU3MDdFMzhENzAzNTVCMTA4Q0RENAorOjEwRjBEMDAwNDZGMTk2MEVBRjUyRDdDM0UzNTBFOTczRDlGMzczMjdDNQorOjEwRjBFMDAwOTZERDZCRDU4RjY2QkYzQjVBNTNGMUQ3MjZFMTdBNzYxMgorOjEwRjBGMDAwNTE5OTVCOUYwMjNDMzdGMDk3MjU3NThDREI3QkQ3NDE5QworOjEwRjEwMDAwMjI5MzdEQjhDM0NCRTMwNERFMDNGRjQwRTc0REI5QTVFRQorOjEwRjExMDAwMzFGMjRGMjNGNTZDM0NDQkJFMkU2MjI4Q0M2MjcyODY1NgorOjEwRjEyMDAwMkRDQjQwN0FFRkQwRkQ2NEFGMkQ4QUQ0QkNBOTRFMUIwNQorOjEwRjEzMDAwNEUwN0Y4RTc5ODY1M0ZCREZGQTMyNDdBQjkxRjQ3N0VDNQorOjEwRjE0MDAwQzg1QUUxRjdENTk2Nzg4OTdGM0E1QURDM0QxODRGQkIwQgorOjEwRjE1MDAwQ0M5MzRERjhGQTIwNTIzMzZBOUUyREZBNTc0OTQ2MEY0OAorOjEwRjE2MDAwMjlFNjVGNjE4OUU3MjBDOTMzRjgzOTA4RDZGMTFDMDQyNAorOjEwRjE3MDAwNEIzQzA3QzExMkNGNDFGMDNEOUU4MzYwRkQyN0FEMDY5OQorOjEwRjE4MDAwRDVGMTNDMDRFQjc4MUU4Mjc1M0MwN0MxM0E5RTgzNjA0MgorOjEwRjE5MDAwQjlBRkI1ODlDQTdGNkM2REE2Rjc4RkI3QjY1MDlERUQzNAorOjEwRjFBMDAwMTNEOUUzNTA5NjhDMkU2Njc4RUVCQUM5NkRFMEY5NzZFNQorOjEwRjFCMDAwQjdEODhGODM0NjQ5MkVFRUEzMkZDMkZENTNERkIzQjdENgorOjEwRjFDMDAwMDNBRUM3MTdFNTcxQTVDRUU4RUQ3MDI1MkJCQjY2ODRBRAorOjEwRjFEMDAwQkEzMEUwRTU3RDI4NDhBNTRGQkQwMzMwQkVCMDUzNEFBNAorOjEwRjFFMDAwMzY2MTI0RUZDNjBERkJDRTUzOTkxRTJGOEQ1RTVGOTNDMworOjEwRjFGMDAwQzNFQUI3NkM3ODcyM0RFNkY3NENENkRCNjJDQkI1QTFCQgorOjEwRjIwMDAwQkExRUFBQkNFRTYxNEI3RDQyNzk4RkVBNjdFREQ3NzlEMQorOjEwRjIxMDAwRjZBRjQ3N0U0NjM4RDBDOERCQjJFMUUwNzk2REE1OEMwOQorOjEwRjIyMDAwOTg0QTgwRUU3OTBDMTRCQjUzNDg4RjU3RTE3RTRENDJDQgorOjEwRjIzMDAwRjhCOUZERkY2NTU4MUY0NTdGN0E4MkVFQUU0NDNFNjIwNQorOjEwRjI0MDAwRUREMzlDN0U0RkFGN0QzNzFFNjZDRDE4REU2RkI0NzY1MgorOjEwRjI1MDAwNzJENTY5QjUwMzY1OTRGMUYwQkQzNENBMzgxREIwNUU0RQorOjEwRjI2MDAwQzMzQjY3OUI5MUU3MzFFRkM4MTcyMDdGQUVDQkM1Rjk1MQorOjEwRjI3MDAwQjdDQkM3Q0JGRjE2N0M3QkM4NUIxM0Y3QjIzMkVFRTU4QQorOjEwRjI4MDAwRkJEQUU1OEJENzYxM0M3NDYwQUE0QzcxODU1RTE3MUI3NQorOjEwRjI5MDAwMDI5Mzc3NUI4QTdGNURDMkU2RkRFNjMzMkE2MDdDRkFFMworOjEwRjJBMDAwODcxRUNFRkY5MzI2ODRCODVFRkRCNjk3RjRFQTA1MTM1OQorOjEwRjJCMDAwN0VEQzlFQzNFQTkzRUU4QkM1NTA0RjZFODY5ODFGRTlBNQorOjEwRjJDMDAwMjRCOTg1RjNGQjhGQUEyNkU2MzRCMEU2NjdDRDc4MkMwNworOjEwRjJEMDAwMDdFMzBEQUE4MDIzODVGNzkyNThCREFERTNFQTA5MTgyQworOjEwRjJFMDAwMEZGOUUzRjM1QzdFRkQ1NENDRDNFM0VBNkJBNkZEOUNGRgorOjEwRjJGMDAwMTEyNEZCODI2MThDRUM4N0I2QTg0QUU3Rjc3MjNFMkY5NworOjEwRjMwMDAwREQyRUVENkZCMDlEOUIyOUU4MjQ4M0M3RkRFOTJDMkZFRQorOjEwRjMxMDAwRjlFOTFGN0FDNDdEQjYzRUIyMkJEQ0JFODQ5NkNEOUU0MQorOjEwRjMyMDAwNzcyNzY1RTJGN0Y1OUEzRjg1MjlGQjlCODM5NTc0QkZBNAorOjEwRjMzMDAwMzY1OUFFNTI3RUY2RTY3MjFFQzcwQjg0MkU0REExM0RBNQorOjEwRjM0MDAwNzFEQjdFMUY5NzBGNDEyRkU1NjlBNUNBRjcxRUFFODlCNQorOjEwRjM1MDAwNjAyOTZCQzhFRjI5NjM3MTFERTE1RDkzMzVDQUY3NjJCRgorOjEwRjM2MDAwN0ZBM0Y3NEQxMUNBRTdERTBDNjI1RjlBNjRGMjE3M0I4OAorOjEwRjM3MDAwQzZGQ0Y5NUZDRkM2NzNGMUFGNkIzMTcxQzc4OEYyMjU1OAorOjEwRjM4MDAwQzkwNDkyRjFCRUVGQzA4MTAwQzJGM0I3RTZGREE0RkU0RQorOjEwRjM5MDAwNzUwMUQ2QkU3REI5MTZDMzdEOThBNkQ1RDQ2MTFDQjFDMgorOjEwRjNBMDAwNDNBQkYxMjI1RjA1QTZENjdBOTc5MTFDMUFDQzY3QTZDQgorOjEwRjNCMDAwN0I3MEVERTVEQ0FFQzVGN0M4OTdEMDBFODdGMERFNEI2RAorOjEwRjNDMDAwQTE5MDY1ODFFQzRBMDlFREExOEU3QTBBMkY2MUJFQUY0QQorOjEwRjNEMDAwMkQzRkIzM0RFNzQyQ0E3RjU3MTZFNTEwOUMxRDYwNzg2QworOjEwRjNFMDAwQjE3REIyNUUyNUZENTUxOEY0QTZEMURFMkIzNEUzOEIzQQorOjEwRjNGMDAwOTg5QTZDRjEzNzcyNTdEOEYzOUJGMzlCNTREQkZEOEZDRgorOjEwRjQwMDAwQjEwOTdCM0Q0RkY4MEY3OThFM0M2OEM5NkI5RTIzREFCQQorOjEwRjQxMDAwRjFFNDVDNkY2RUU0REU2Qzg0MzcxNzJGMzRFQkMzRDdGNgorOjEwRjQyMDAwNzM0N0E0QjIwMUQ3NTlBOEY5MDlFRUE4QjZBRTFBRTVGOAorOjEwRjQzMDAwRDc1ODY4NkU0M0JBRkJDQ0YwM0FFMDlDNTZERURFODdDNAorOjEwRjQ0MDAwRkIzRTRENTdFOUJFQzNEOTMwQjAwRUM3REQyQ0U4QkMzQQorOjEwRjQ1MDAwQUJEOEFFNEY3RkU4NTFDNDM5NzBDRDFDRTQ0NzhDODdFMAorOjEwRjQ2MDAwMjUyREYzMTcyN0ZEOTBCNENDMzdCMTJCQzc1NjlGRDQ2OQorOjEwRjQ3MDAwNUQ2MDZCN0ZDNkY2MTJEQkZCMjlBOTMzNkRFRkNGREEzNworOjEwRjQ4MDAwNTU2OUFCNEZFRDlENkI2QjdGRjZCRTFBNUJCRDIyN0Q2MAorOjEwRjQ5MDAwQTFBREZERjRDMzhCNkRGNTE5N0Q3RjYzNkIzRkVCRTU4QgorOjEwRjRBMDAwRTVCNkY3NzNGQUFGQjNCREZGRDIxQjZCNkNGNTczMDYwRAorOjEwRjRCMDAwQkU2NTZCNkZEQUQ3NEVCRDM4RERGQkY5RUM2QTBGREU0NworOjEwRjRDMDAwMDdCM0M1MEZFRDc2QkJEM0VFRjZGRUNGN0E3RDFEQ0EyRQorOjEwRjREMDAwQjVCMDlCRTg1QjQ1M0RDRUVBNkI2RUUyN0U4Rjc3N0VGMgorOjEwRjRFMDAwNEM0N0I5MzI0NUQwNjMyNDY4MThCODZGRDU2MTJGRTkwRAorOjEwRjRGMDAwMDMzNUM4REJBOUMxMDU2NDc3OENERkNFRTREMTc0QjREMQorOjEwRjUwMDAwMTY2MUYwN0QwMEU1NzI2QjMyNUVFQTFBODJEQkE3NzU0OAorOjEwRjUxMDAwRDNERDg2RUE3MDFEQzVERkNERkVBQTY2NDAyMjg0RjNFNgorOjEwRjUyMDAwRTkzQ0ZGODg3OTk1RDhDRUE3QjNGRTk2NzUzQzI5Q0JFOAorOjEwRjUzMDAwNzQxNTdDODBGOTY3Rjc1QUZDQjM5MUZDMzFBN0ZGNzUwRAorOjEwRjU0MDAwQkFGRUQ2NzgxOUZDNThGNjQ4RjE2NjJDQ0I5QjlGQUZEMworOjEwRjU1MDAwQzEzNDNDRTY4NzVERTU2NUZCQjNENTFENkZFQTYxRTMyOQorOjEwRjU2MDAwNkUyREYxRjNGMzMyRTE4Nzc1MTVGNzEyNUYwQzE0QUJEMgorOjEwRjU3MDAwQTQ1RjQwRDVDQjE3NUJFMjYwQjcwOUJCMzJFMEJEOEIxRgorOjEwRjU4MDAwRkM0MEI1NjRGNjYxMURGMURFQTY1MjdDNjJCM0M0RTNCMworOjEwRjU5MDAwMjg0OUI2MEZBOEQ3NzZDRTdERTNERDVCRDg3MzZGODk5NworOjEwRjVBMDAwQjdEMENCRTQ1MUVDQTBEQkMwNzNEMjNCMDQ1RTRCQjRDQworOjEwRjVCMDAwOEExQTY2NzEzMUZCQTJFMTAwOTY5Mzc1NjY2N0IwQjI1NAorOjEwRjVDMDAwQUM2Q0RCMDEyQ0RCQkMyNTM0REY5OUIxODc2QjUwOTYyQQorOjEwRjVEMDAwNzhFNzczRkI0Rjk5RTY0RUFEQzNGREQzMzgxQzIzRDFCQQorOjEwRjVFMDAwOTk5QUIzOUQ5RjY3OTVBQUFGMjNCREExNTU3RTUyMUVFMAorOjEwRjVGMDAwQTIwMzFGRDI4MTQ0MjVEMThGMkYxMjI0QkRFMUMzMDM2MgorOjEwRjYwMDAwMUZBQ0FCNTIyQUMwREU0NzRBMEQwOUYzMzNBQUMzREI1NQorOjEwRjYxMDAwRTk3Q0NFOTdCNkRCQUJDQzJGQkQwREYxMUFBOUI3RUZDNQorOjEwRjYyMDAwNzdDMEJCOTNFMDZCOTc3ODlDQjYyQjVCN0ZCNjg2QzFBNworOjEwRjYzMDAwREY5NTU3OTI4MzMxMTY4QzYzMzQ1OEU0Q0Q3NkExNEYxMQorOjEwRjY0MDAwQUZGMEM5QTZGRTI3NzlFMzQzREVDODFCQjI3NzE4RkRFOQorOjEwRjY1MDAwNkY5NzI3MjI3Q0REODA3MkNCNzc3MzM3MjBCREZCMzQxOAorOjEwRjY2MDAwQjY5QjY4NkY3RjI3NDlGNDZGREFCQjM3MDhERUFBMkQ5NworOjEwRjY3MDAwNjlBNDczQjFGNzIzOTU2NERGRkE1QTdFOTIxMTdGQkVCNQorOjEwRjY4MDAwN0UwNThDRTkyM0UzMzUzQzc5MDdFOTdCMjg3MUVCNjgzQgorOjEwRjY5MDAwNTdCNEU4NkVBMzI3RDMzOUEwNDdGODFGOTgxRjgyRjAwQworOjEwRjZBMDAwODhGQzkwMkU4MTBGRjM1Q0VFN0QzMzZGNEE5QzA3REY2MAorOjEwRjZCMDAwOTAwREI2RjNDMTFCRjIyQUM3OEU2NjhGRkI5ODdGOTgxOAorOjEwRjZDMDAwQjBDMEJCOTFDRDgzNzhFOUY4QTRBMTJFNEVFNzg0QzBFOQorOjEwRjZEMDAwRUZCMzdENUFERTQzRjc4NjNGNTlBRkUzMzlFNjJDODExRAorOjEwRjZFMDAwRUY3MzNEMUNCRkUzREQ0MDdFQzI3OTE4RTc5ODhFNUU2NAorOjEwRjZGMDAwRTk5N0VCOTAyRkNEQjhDODlCREUxQ0MyN0YyQzA5NEEzRQorOjEwRjcwMDAwMzNEOTJCMkU1MzZGQzkyN0NGMjY5ODc1QjcxOUNGMjQxRAorOjEwRjcxMDAwOTM5N0VCMzVGNkVGN0VCQzdGMzFCMUNCN0VBRjY5NTI2QworOjEwRjcyMDAwQjdCRDdFQzY3NjdCN0Q0QUNBNUU2NzU2RjMxMUI0MEJDMQorOjEwRjczMDAwMUE4MEUzRTdBQzVERjZGNzBENjYzQ0IwOTZERkM3RjBFNAorOjEwRjc0MDAwQjI5OTRGNzJGRDZCQkJGRjBBNDJGRjlCNzFENzcxQkQyRgorOjEwRjc1MDAwRTk2QTE0QUY0NTZCRUQ3QUI1NDBFOEY5MDI4N0ZFQUM3MworOjEwRjc2MDAwMEMyOTE0MEZBODNFMUMzOTg0RjZBMzE5QTc3OUM1QTc0NAorOjEwRjc3MDAwREJFMjlGNjZCQ0M1MjlDRkZENDdCNzAxN0I0MzdFNzVBMQorOjEwRjc4MDAwQzJDM0UzMTAwOUU2REZCNDE0ODlGOEM2Mzg1RUJBMTRDMAorOjEwRjc5MDAwRkRCOUE1NjRBNzM1OUY4MUYyRTk5MDM3RjFCMTk3RTJGMQorOjEwRjdBMDAwQ0VGNkZCMTJFRkQ1QTlCRjkwNzQzRTRGQzIzMkNGOEQ3QgorOjEwRjdCMDAwNjVDOTBCRjhGMjUzOTQ3RjYyQzYzQjRDN0Y1RTA5MUExMQorOjEwRjdDMDAwNzExQzZGNzNFQzg1RTY4MzE4NkZGQUFEMDc3MDlDRjNCQworOjEwRjdEMDAwOTU2NzBGQjdCMkZBOUE3MTJBRTU0QjZBQjM1NjdDREY4OAorOjEwRjdFMDAwOEZGMTQyN0NDRkVBRDVDNUZBNThBMkZGQTc1REU0RDdENgorOjEwRjdGMDAwNkYxMEY0NkNERUUzMzFFMzIzNTE5RkQwM0YzRUQzMkVGNAorOjEwRjgwMDAwNEFGQTQ1M0VBQzFGRUREQ0IzNzYzMUQ5NkNEMzczM0M3QworOjEwRjgxMDAwRUU2NkM2RDdBNkY2REFERkY3ODI5NEFCQjFGRDNCQkI0NgorOjEwRjgyMDAwMzEyNTczQkJDQTA4NTY1QkUyRUY2NzhBRkQ5QUI2MzQ4RQorOjEwRjgzMDAwN0RGQjUyNTZERjAzQTk0QUZDQUU0NDg1QTA4QkQ4MjEzQworOjEwRjg0MDAwRkJCREIxMzEyMEQxRkQ4MjMxNDc5NDU4OEFCNTlGRjY3NgorOjEwRjg1MDAwQjhGRDdEQjlFMzVFRDk5OUNFN0I2NjhFNzg3MDQ4ODExQworOjEwRjg2MDAwNzc5N0IxRjlCNkU4Q0QxMkNBQ0YyRDRCOTlDQ0MyRjkzMgorOjEwRjg3MDAwN0QyMkNGNzgzMjRDNDZGQTNCNUYwOUM2RDI4OERGREY2MworOjEwRjg4MDAwMjhBNDM3M0NBRjlFRjFEMjMyRDRFN0NGRjMzQzE2NkRCQgorOjEwRjg5MDAwQTJCRUFEOTZENUI1N0Y1NTQ4M0Y2OTAxQThBODA4MEUxMAorOjEwRjhBMDAwQzU4RkJGNzczMjA2RURBRUExNzhENDZFQjZBRkE1OTMwMworOjEwRjhCMDAwRDBCRkY2MDJFQTk1OUZCMEZEQzU3QTJGRjNDN0IxRkUxRgorOjEwRjhDMDAwMDhGM0M3QjFEQ0NCRkM3MTdDRkU1M0U2OEY2MzdEMUY3MAorOjEwRjhEMDAwRjNDN0IxRkM0N0U2OEZFM0YzQzc5OTNGOEVGNTZGMDY5OAorOjEwRjhFMDAwQUExNzM4RTM1OUQ2RjhERTUwM0NBQjVGMzJFMzU5MjgwQgorOjEwRjhGMDAwNEEzRTcwRUJCNEVGODM3MUFEMDQ4RjZCOUQ3QTFDQzNFRAorOjEwRjkwMDAwMUM4N0UyODZDM0M2MTFGMUMzNzc2RUZBQjcwN0YwOUU3MworOjEwRjkxMDAwRjVDQTE5RUJCQUYwQkVBQ0Q3NjVDNkNGNzg5RTg0OTkwQworOjEwRjkyMDAwRkY2Q0YyREZDQUJERDdEM0I5QjEzQkZGNDgzM0VFQzc5NgorOjEwRjkzMDAwREVBQTIwN0Q4QkM4RUQ0QTY4MjgxRjlERkU5N0U5NzdENworOjEwRjk0MDAwMzlFRDVGQjM3NEVBMjMzRkRBMDFEM0QxNEVFQUE2QjhBQQorOjEwRjk1MDAwQ0YyNjE3OTREMUZENTlDOTFGNDNCRTcwQzYyQjREM0UwQgorOjEwRjk2MDAwN0VEMTU3OTJGMUJFRDQ2MDFFQUQ4OENGNzgyMEU1QzUxOAorOjEwRjk3MDAwQjg5QTVCMTJFQjE0Nzk5RTI0QzJEODEwOUI5MTlGMkRFQworOjEwRjk4MDAwNzlDOUMxRjIzNEM1Mzk4MjQxODNFQzJGODlEOTY1NjRDNAorOjEwRjk5MDAwQTc2OTg5MjhDNkExM0E0N0M4OUJCRDRGRjA2NzVCQkVERgorOjEwRjlBMDAwOUJCRTM3RDE5OUNGRjMwNDZBOEI2MjUxRUNCRjNFN0Y4NworOjEwRjlCMDAwNjZENDlBNDc2QkU2RjkxRTBBQ0RGNEY2NUJDNjVCMTM3NAorOjEwRjlDMDAwMkExOTU1NEYyOTRDQUZFQUEzRTg1NUM1QzNGM0RDRDczNAorOjEwRjlEMDAwMUY5OEUzQzVGQ0U1NERDMUU1N0Q2ODVGNkQ4QTQ2RTg4QgorOjEwRjlFMDAwOUVGQkZFRkM5OTY0N0YwQ0I2OEZDRUE2M0M2NzI1QzhCMworOjEwRjlGMDAwRUQ1NjI1RUEyNUJCNTVDNUY1OTcwRkI1MzdEQkI1RkFBQQorOjEwRkEwMDAwMzg1RDMxRjZBM0Y4NUMyMEQ4NEJFRDNDNkE5Q0UyMUZEMAorOjEwRkExMDAwOUUwOEQwQjk5NkM3Q0JGMzBBODJDQ0JGRjZEQUUyQUIyOAorOjEwRkEyMDAwN0NERTE2MTFGN0REQTQyN0UyRDg2RjUzNTRENTUxMUNBNAorOjEwRkEzMDAwNkQyQUFCMjQzQ0FGMTc3ODVFOUY2N0VBRkQxOEQ5MUI4RgorOjEwRkE0MDAwM0YxMzc4MzZDNzU5MkZGQ0Y1RjU0RDZFQjJCQkUyMkQ0QQorOjEwRkE1MDAwRDk0NjZEMkVFNTZERUVGMUUxRjhDMTdCQkQ5ODA3RUY1QgorOjEwRkE2MDAwQ0VBRjFBNzVEQzAzMzhFRThDRDFDNjdEQjVBNjc2M0FEQQorOjEwRkE3MDAwOERGQjMzMUNENzFENUFBRUUxQjhBRTExRjJGMzlGMTNDNAorOjEwRkE4MDAwNzA3RTVFRkI5MjYxNEVBMzczMzEzMEY1NkQyQTZBM0Q0NAorOjEwRkE5MDAwNEY3Njk2N0VCNDEzQTcwRkVGQjc1MkVGNUY4MEY5QzE5MAorOjEwRkFBMDAwMkEyNEVCRkNDQUYwRkIwREFCRjZGMUVGNTU2RDU1RkJDQworOjEwRkFCMDAwQzhERUQ5RkE4OTk0RjE5RUM0MThCRjI0Q0U2QjA3RkQyNQorOjEwRkFDMDAwNzA5QkJENTIyOEY4QTk1MEJDRDdEMTVFMjk0NkJGRDI0MQorOjEwRkFEMDAwNkU1RjRDM0Y2Q0FGQ0ZFOEIzRDc2N0JERUNCNDU3OENDQgorOjEwRkFFMDAwREZBMEJEQjI0NEM4QkIzRTI2OUY3OTcyQzU4MDhBNzIzMgorOjEwRkFGMDAwMjA5RTRDNTUyM0RDMEREMERCODZFNzk5MkU4NUU3MTEzRgorOjEwRkIwMDAwMkMxMUZBRUEyMkExQ0Y4MkZFNkM4MkJGQjBDOTZGRjMzQQorOjEwRkIxMDAwMTNDREVGNkUxNDg5RjFDN0Q1MUVCQUJFMUQ4NTZCRENGRgorOjEwRkIyMDAwQjQ3Rjc0RjIyRkM3MkQ3Q0E0OUFDNEE0QzMwRTZBMzA4QworOjEwRkIzMDAwRUNGNzU2MkY3MkQ4Mzk0RTdCQTg1QUVEQTFCQ0NDMDJGNworOjEwRkI0MDAwNDdGQ0MxM0NDRkM0NzVFMkZENURFN0ZDOUY3NTVFNzM2OQorOjEwRkI1MDAwQkMxRDRDNkZBMUJENjI3RUNGODBCRUY3QzVGQThGNTMyRQorOjEwRkI2MDAwRDM1MjJDNDg3OTVFOTQwRjU4QjgxNjhDOUUwQzc0N0MzNgorOjEwRkI3MDAwOEVEOEY3NjE3ODRCOUU0Qjc4M0I0RjNDMkIwOEYyRUZDOQorOjEwRkI4MDAwQTUxNEQ0MkEyOUJEOThFNzg5QTEzQzU5QkM4MkFEODcyOAorOjEwRkI5MDAwRUNFNTkzNzQ1RTZEQjZDRkM5RUVBNUJDQjIxREY1MTI0RgorOjEwRkJBMDAwRjcxRjkzNDA3Njg4QjlDRjNCODJGQzlFNERDMzM5NTJGNAorOjEwRkJCMDAwNEFDNkZFQ0QyNTM0M0ZDMTU1MzJCNEJGMEM0RkM3MzhCRAorOjEwRkJDMDAwOUU3ODFFREFDNTc1RjZGQjQwMEQwRTdCQzNBNDg3OEJBRAorOjEwRkJEMDAwMUNDRkZCN0REQzJGMzJGOUUwOUQzOTJGNEYxRUNGRTA4QgorOjEwRkJFMDAwNTgyOTI1RUIwMkNBRTlFQjQ5MEI3RkI4NEUyMjFGRTJFOAorOjEwRkJGMDAwREZDN0QwNTI4ODNGMEU3ODFGRDUyODhGMjBCQkZGMkUzRAorOjEwRkMwMDAwNjAyNEQ5RTA4NzY0RUQzQzgwN0ZGNjBGOUMyNUIxN0FCMworOjEwRkMxMDAwRTNBNkIzM0JCQUM2RTFCNUM2ODExRkExNTFFNkQ5NTBGMAorOjEwRkMyMDAwNzU3RUREMzk0Mzc1RkYyNjgzRUExMTMxMEY3MzJEOTJGRQorOjEwRkMzMDAwN0NCRjJEREYzNzYwRjBFRUM0M0MwMkI0NEIwREQ4QTY3QworOjEwRkM0MDAwNjAwRUE2QUM2RDhCMTUwRkY1Q0JDMTdFRDIyOEZERTIwMAorOjEwRkM1MDAwQjA0RENERDAyRjY4RjY2M0U4RUEzNEJGMDc1MjgyMjU1NQorOjEwRkM2MDAwN0YyRjBCNzhBQ0YzQUI4ODM3NEQwRkQyN0Q5RjA1QUE2MQorOjEwRkM3MDAwODZFNzNGNUYxNDhFMzFBNzVBNzcwMkI2QjkyNjBFRUY5QQorOjEwRkM4MDAwQzdDMDZFMzNFMTk3MzNDMzlGQzJGN0Q2Rjk1REEzQzBGNworOjEwRkM5MDAwRkY5N0M2QzdBOUM2NzM4QkY3OUYxOTNFRDY3Q0REOTgyMAorOjEwRkNBMDAwOTFENzhCNzBCOUU4QkIxQTdBNTBCNjhDNzNEQkZFOEY5NAorOjEwRkNCMDAwMjg3RUFENUUwNjc0OUY0Nzc1MTk1QThDRDE3OUI5NzY0NgorOjEwRkNDMDAwMjdGOUUxNkE3NkFEODY3NkMwNDY1NjQ3M0I2MDYzNkY5QQorOjEwRkNEMDAwMzdDNUE5Q0I0QjZGRUY0MkEyMkY0RkZCMDFFNUMxNTRCMworOjEwRkNFMDAwRDBCMkY3QjA3MUE3NkEyQTY2RUM4MDdBQ0UyMTE5RTMwOAorOjEwRkNGMDAwREVGMDE1QTBGQjI0NTlGQkZERkNGQjE3QzU3M0VGNDM5OQorOjEwRkQwMDAwRkYyODNCREI0QjcxQTA0MEY2Q0NGQkI4QjFDQkUzQzE4NQorOjEwRkQxMDAwMjZGQzgxRUEyMzM1MTgyNzU3MUIyMDg2QUNBODRBMjlFMAorOjEwRkQyMDAwQTg0NjI2OUIwMjc0MEVFMTM3RjZERTg4RjczMjk5RTI4OAorOjEwRkQzMDAwMjNGRDQ0REY4NDQwQkQyQUUyRTI2MzM5Qzk0MDk3NUI3QQorOjEwRkQ0MDAwNkI0MDNGMjFGOThDNEFGMUY3QjE3ODY0QzE4OEIyQkNBRAorOjEwRkQ1MDAwM0M2NzFCQzI1MzlFNjAwMzQ4MDgzRjhGNkI0RDREQzhFNAorOjEwRkQ2MDAwQjEzNDFCQkZGMjVEREUwRjdFQzlFRjExMzA1RkEyRjEyRgorOjEwRkQ3MDAwQjFFMDEwNUU0REI5MzI1NkM0Q0JBMzRCRURGMTY0MTgxRgorOjEwRkQ4MDAwNjA2QjY2RkQyQjdGQjlGODdFOEMyNzhDMTkyNkJGQjk3NgorOjEwRkQ5MDAwN0Y2RDdFNkYyN0VCNUQ4ODNGNDZFNzlBNzZCREUxMTc2MgorOjEwRkRBMDAwREZCNUYwM0JCRTk3MzAzOTY4QkZCRjM3Q0M2RkY4NEUzOAorOjEwRkRCMDAwOUNGNDgwMDc2MjVFMzdEOTE3NEJDOTZFMzBGRDkxMURFOAorOjEwRkRDMDAwRDgxMEUzRkZFMzgwN0ZGRkNBRDk3RjI2RUYwRjUxRUUwMworOjEwRkREMDAwOUY3OEZDQ0NDQ0FCNjRFRkFGRjMxQjk0MTdFNDYxNzU1OAorOjEwRkRFMDAwODY0N0M5MERERTdDRjZCQzQwRTY3MTkxMzYwOTU0QUNGRAorOjEwRkRGMDAwMEZDRDk3QTZGM0ZDMEQ1MkFDMkIyNjBERjlCRkVCQjUzQQorOjEwRkUwMDAwMThFNTE5QzBEQTFDOUJCRDZDRTZBQkFFQjlCNjc4NkNEMAorOjEwRkUxMDAwMEUyQkIzODZFRTBENjk0ODhGNkJGMjRBQzk3RTBFRTc1MgorOjEwRkUyMDAwRjY3RjBERTVFQjQ3RkU1QkNGRjdBMjNDQzUzQzg3QjlGQgorOjEwRkUzMDAwNEMyODZGRUVFQTQ4MzI3OUVCRjlCMDEwNzQ4QjVERTYyRQorOjEwRkU0MDAwNTE5QjI5MEVFNkY5NzBCQ0VENzlCQUQ1N0VDRkQwMDg2QQorOjEwRkU1MDAwQ0FCNTM4NEY1MTQwMjdCQzU2ODNENjhFRkRBQUMxN0UwNQorOjEwRkU2MDAwOUZEMEYzNjFCRUNENEUxRjFBQkZDOEY2M0NDREVDMTkzMgorOjEwRkU3MDAwRUI3NzJDNDYxRTNGMDA3QTk5NzVGQzg5MjM4QzNGRDk3RAorOjEwRkU4MDAwMzFCRTk2NzFGQ0ExNzE3MzZERTM3NkE4M0MzRTlBOENFRAorOjEwRkU5MDAwRjg2OURGOURGNjQwNTVBMEE2Mzg5MDM3NEFGQzNFQzA3MQorOjEwRkVBMDAwRTNGNzFCQTJDRDE0QkZBRjAxQzZGMDhDNEVDRUZERTQyQworOjEwRkVCMDAwOThDMkVGQkQwMUQ5NkQ1MDY0OEZERkQ3MDhGQTk1MTk0QworOjEwRkVDMDAwNDUyMEZEOUVBQkRBQkYxRjM2MUY5Q0RGMTNCM0RCNDMxQgorOjEwRkVEMDAwMkYyMUEzQjA3OUU1NTA1NTFGQzVGMTNGMEFFQUU4N0YwRAorOjEwRkVFMDAwOEQ2NDJGRjdCNTAyQzU4RkU3MDdGQTZGQzA3M0VBRkE4MgorOjEwRkVGMDAwQzBGNzVEMURCMzQ1OUU2QzAxQzBERjA0RjY5RThGRjcxMQorOjEwRkYwMDAwMDNGQkM0QkRCRThFODg0Qzc4ODlENzhDQTU3QjNBRTZBRQorOjEwRkYxMDAwMzg3MTM3NEM0Mjc5MTg5Nzc5N0UwMkZENjFGM0Y3RTUyNQorOjEwRkYyMDAwMTVEOEYyMUNDQ0QyNzkwRkI0QzE5MEUyQTUxNkJBRTk2QgorOjEwRkYzMDAwOTMxOTVFQURGMzlENTdEOEEzNThENjExRjdDMDBDOUEwQworOjEwRkY0MDAwNEZEOEI5ODNGMzhERjk3Q0YzM0QyRkUyNEVFNjdDMEQ1QgorOjEwRkY1MDAwMEJFQ0VCNkI3MDZCQjRCRTA2QzFCRkU2N0NDRkUzRkE3MworOjEwRkY2MDAwMzJFMEY3OTRGM0M5OUM2RTA2RTdCQkMwQkVCRTA2OEZCNQorOjEwRkY3MDAwNDZFQjZCMTBERjAzMUU5QzZGQ0NFNzlCNkY4M0FCMzlBNgorOjEwRkY4MDAwODE3NkRCMzY4OUYzRkY3NzM3M0ZERTgxRkJGQTdFRkQzMgorOjEwRkY5MDAwOUEyOEU5MDM2MTE3NUY4NDFENThCQjhCNTQzRURGQTI4QQorOjEwRkZBMDAwMjI2RkFBQ0QzMkRGMEUyNjA3MEM5MTBGNkY3ODMwN0ZCQgorOjEwRkZCMDAwNDNBMzdBQUEzNTRBRTVCRENDQ0UzNjI4N0ZBMzhDREU5MgorOjEwRkZDMDAwM0ZEMDFBQTNGQUFFRDZEOTU0OUFFMzk0Q0RFNkRGQTc3MAorOjEwRkZEMDAwOTkzMjRGQ0E2ODZGRkYzMkMwRkRDNjZERjlEQTY1NTdCNgorOjEwRkZFMDAwQTE1RUFBRjZGMzdCOTNCM0JGMDQ4NkM1RkU2NTA2RjE1NgorOjEwRkZGMDAwMDExRjlFQkY1QzBBMTVBOERCMjY2RkU3NzA0NzZBQzcyMgorOjAyMDAwMDAyMTAwMEVDCis6MTAwMDAwMDBBNDcwRkZGQzE1ODdGQTVBNTlEREUzNzJFOUE4NEYxOTZECis6MTAwMDEwMDAyRkM0MzNGOUE5ODcwM0RDMEZGN0I4QjlCQzg3QjlGQzQzCis6MTAwMDIwMDA3Qjg3OEI4NDVFMDFBNTVFNzIyMTNFMkVDQUE2RjNGRUZECis6MTAwMDMwMDBDNTRCOEM5MEM2RjBCNjQ0OTI3RTUzMkFGNDE0REU2RjAyCis6MTAwMDQwMDBCOTQ0NkM5NUQzQ0U4RkEwQzY2MEUzNDYwQzI1ODVERkZFCis6MTAwMDUwMDAzMUJBQTRFODcwMjNFQUU1NzhFODYyRjIwRkUyQUM2MzEzCis6MTAwMDYwMDAwRTFCRTcxMkExMjdBQjVGRjUwMEU2M0JDMEY5NkU4MkRECis6MTAwMDcwMDA2M0M5MTJCQjNEQkZDRDk3RDZEMDNFRDk1NjExMDFEQzI2Cis6MTAwMDgwMDA5RkM1RjVGNkY3MUUzN0U3QzNCOEUzRkIwNjhCNEVGMUM1Cis6MTAwMDkwMDBCRDAzRkFFNjU2ODY3QzUzNjc3Q0YyNDA0MEU0QUI4QUE3Cis6MTAwMEEwMDAzOEU0MDkyOEJGQUQxNjVGMTY0NTQ2RkRERUMxNEQwMTk3Cis6MTAwMEIwMDAyRTlGNENGRDM2OUM4RTM5M0M3RjEwNzI2QzQ3RUIzRTc4Cis6MTAwMEMwMDA4QTg3OTlGMDE1QTgyOTA5RTU3NTYxRDMzRTVCNUUxMzBGCis6MTAwMEQwMDA0MzJDMTlDMzY2MUMxRTk0M0QxNUU4ODczOEQ3QjM0M0RCCis6MTAwMEUwMDBEQTkzM0ZEQUY3NEQwQTQwN0RCREJGNEM3Q0ZGNTMxQUNGCis6MTAwMEYwMDBCRUVFNTcwM0Y2RjhFQjA5OThGNzVDMjk2NEUyMUYxRTgxCis6MTAwMTAwMDA3NzVENzQ1ODg5QjVFOTQzNzgzMUYxRjBGRkNENDc1QkVECis6MTAwMTEwMDAxMTY2NTYzRTc3REUwNzU1REM3RjJCQjI3RDY3RDNGQzM4Cis6MTAwMTIwMDA3RUYwQzU4Mzc1MTU1NDBCM0Q1Rjc0OUQ5QkVDMTkzMEIzCis6MTAwMTMwMDAwNkNBOTFFRThFOUMxM0UwREY3QjMzRUQ5N0Y0NkY2NTdBCis6MTAwMTQwMDBCNDVGQkVGOEY4QzYzODVCN0VBNzE4NzdBNEZENzJFNkU4Cis6MTAwMTUwMDAxQjVBRUU4QjBFRTVDMzYzN0U4OUM0Q0ZCMTBBMzBDRjQ0Cis6MTAwMTYwMDAyRENDOUYxRkIzREI5OUI2M0NCN0Y1RkIxRjk0MzBDRTY3Cis6MTAwMTcwMDA3NzE3RTZFMzU5Q0VBRDBCOTkzRjhGRjFBRUEyMTVGNjk2Cis6MTAwMTgwMDBCQzNBMjc1QzY2NUVENUUwN0REQjc5NEJCNDNEM0E3REI5Cis6MTAwMTkwMDA1RkIxMUIzRjU4RDNCNTNEMTkwNzRCMUVBNTc5OEZEMEQyCis6MTAwMUEwMDBGNEE3OURGNzA3OTUyMEZGQ0U1RTU0RENDQjcwQzY4Mzg1Cis6MTAwMUIwMDA2Rjk0OTM1QUIxODQ3OUFCMjk2RjM1MkJBN0U3MjQ2NkU2Cis6MTAwMUMwMDBFMTk1RjYxQjk1NjQxRDNFNTdDNkNFNkQ0MjNDMkM2REU1Cis6MTAwMUQwMDBGOTc2MENFMzc3NUE2RUU2QjhGNDUyQTFCRjZCODI5Q0I1Cis6MTAwMUUwMDA2RThFQkFEMkUzMzA4RTdENEQ0RTRENEQzMDJGNDNGQjk3Cis6MTAwMUYwMDA5NkVGRDA3OEYzNDdGODZFRkRENzgyM0M2RTcyOTdEMEI5Cis6MTAwMjAwMDBFN0NFRjc0QkM0RkJBRkFFOTRFOTNCMTgzRTA4QTVBNDdDCis6MTAwMjEwMDA2MjNDMzdFRTlFNERGN0Y2NTZFRDg4NjVCQTFGRjc1Q0U3Cis6MTAwMjIwMDAzODcxQjExNTFFNUYyOUJGQTcwREQwM0IwN0YxQjVGMTlECis6MTAwMjMwMDBFM0JCN0IxRjYyQThDQ0Y5Mzg0ODcyMzQ0N0UxRTM1QTJDCis6MTAwMjQwMDBGQTdGMkQzODYzNzhGRjI3M0Y3QTkxRUUzNzNGODlGN0ExCis6MTAwMjUwMDA1OUU2RTJGNkREQjMwMEUzREY1QkNEM0E4NkU0QjE5RTFBCis6MTAwMjYwMDA2REQ2QkZDRERGMEZENjY3MkNBODY2RkRCNzIyMEQzMjQ1Cis6MTAwMjcwMDAyMkZCRkQ5NjBCM0E1MUNGNkU5NTQwN0M4N0JDNkUwMUY4Cis6MTAwMjgwMDBGQTg3NUI1REJDRkQzRjg5RjdGMzJGN0NGQkJFREI1MDNCCis6MTAwMjkwMDBERUNGNzQ5MzFGQjg1NUQ4MjMyNjdDRkQ0MTdFMUZBOTVECis6MTAwMkEwMDBGRjE0RjhCQzQ1RUM1QjEwRjExOUY5NENGOEJDMjUxM0IwCis6MTAwMkIwMDAzRUZCNzM4Q0VGMjA5RTdDOTg0OUMxNDBGMDdERUM1RDQ1Cis6MTAwMkMwMDA4QkY5QzZGRkQwMEFCMUFCRDgxQUVFOEFFRDdERjAzNkI1Cis6MTAwMkQwMDBBMEZFMUQ5OUYwMTlDRjMxM0FGMTc5NzBFNTMxNUE1RkRFCis6MTAwMkUwMDBBODM0ODhFRTBENkM5QzA1MzQ0RTA2Mzg2RTFENkQ1RjhCCis6MTAwMkYwMDA5RkNBRTI3MkVDOTMxMDJGNzM4NEZEQTc3OEZBQTI3ODVDCis6MTAwMzAwMDBGRUFGNTU3REVGMDY4REM5OTFDRUUyRUVDNjRDRjQ3RDcxCis6MTAwMzEwMDA3Nzg4REJFNUQ5MjNDNEFCMUYxNUY4RkRCRDE2REY4OTRGCis6MTAwMzIwMDA3MEI3NkJCN0QzNzc1OEREMTJCNzFCMzZDRUVFMDdDOTVGCis6MTAwMzMwMDBEMkVGODUxMDZGQ0ZFMDdFMDBFMTc2Q0ZFMURGNDcwRDkxCis6MTAwMzQwMDAzMUJDNjM4MjU5QTg4QUMzQkY1MTNGMDI5OEZGMUQ4QUZFCis6MTAwMzUwMDAxRUExQkNEMDUwNTUzRkYxM0I1RDY5MjhFMDc0ODVGRTdECis6MTAwMzYwMDA5QTU3RDg2NzhGNkU1OUJBMDBFNTRDOEU2MkQyRTFGMTg4Cis6MTAwMzcwMDA0RUE0MUI2NUE4NEU3NEQ0OTNDM0ZCQkZCQ0Y1NzgyNzZECis6MTAwMzgwMDBGQTczM0I5OUZEODJERkVCNDgxNkYwQkMxMUU3RkE5RTQ5Cis6MTAwMzkwMDAxNEYwREUxMzM2N0U4RUVCMUI4NjRGNEZGRjdEQjdCMTE4Cis6MTAwM0EwMDBGRTVCMjdGMTdCMzlGM0U1QkVDNjJCOTEyRTJGMEM5MjE1Cis6MTAwM0IwMDBGREM1OUUzNzVBQkY5M0YzMDc0MTZGN0YwODcyRkI2OUYzCis6MTAwM0MwMDBFQjQ3NUU3QUVGREM4RjkxRThGNUQ3MDJERjlGODM1RTIzCis6MTAwM0QwMDA3RjlEODlERTE4QkQxRTcxRDBFQjA3OTA5OTVFNUZDOUM1Cis6MTAwM0UwMDA0NDY3OEM1RThGNjZDMjhCQjNBRTgwQjExRENGNjdENTdDCis6MTAwM0YwMDAzRjJGRDg4NUUzQTk1RjlFQjdGRDIxNTYyQTdGQkUzOURFCis6MTAwNDAwMDA0OUJCMTk5MzZDRjc1MENENzkyQUE0QzQ1QjQxOEI3QzBFCis6MTAwNDEwMDAzN0JGRTM0RDM5MTA5OUM2OUQzNTczM0JDQUIxRDMxODI4Cis6MTAwNDIwMDBGNzA0QzJFRDFDRjcyMDhFM0IwM0U1NEIzMDkxRTlGQjRFCis6MTAwNDMwMDA0NkRGMEZGMUJDRjEwN0M1QkE0NkUyOUJFNzRFQzEzNzc0Cis6MTAwNDQwMDAzRjBENzEzQTYwN0NFMzBBOUQwNkRGQkMyRURBQjM3RDc2Cis6MTAwNDUwMDAwODg1NEU4QjZGRUVBNEQyNTdDQUY5ODZBRTJCQ0YxREZFCis6MTAwNDYwMDBDRTM3MDBBRjc0QTIzQ0VFMkNFNjdDMzEzRUY0NDY2N0ZBCis6MTAwNDcwMDBCMkM4QzI0N0YwMTFCRDU3ODZFQTI0QkY0RDNFN0EzQjUxCis6MTAwNDgwMDBGNDExRjE5MUIzN0Y3ODg0RUY1OTREMUE1QzQ3QkMxNDk1Cis6MTAwNDkwMDBENzZEOUNBNUI1RjNGQjM4RkRBNEI3N0I2MDYwQkY4NzIzCis6MTAwNEEwMDBGMjZDNzk1RUFCM0Y5OTM0QjhEOUQwMDdGODdEQzRBOTE2Cis6MTAwNEIwMDA4MjFGNzdBMjBGODY3RUNFNEMxMTY3NTJGQjYwNzE2ODU3Cis6MTAwNEMwMDAzODNGODdBQUQyNTVENkVGMEQxQzEyRjM3RjFBOEE1N0YwCis6MTAwNEQwMDBFMUZDM0REMDNGMDVFREFGOTFGNjY5OEU5OEVGN0JEOUY5Cis6MTAwNEUwMDBDNjlDNTAwNjNBM0Y5NTFFQkEzQ0M0RjMzNzJGMTdGMzBCCis6MTAwNEYwMDBFNjdDRUM2RDQ2RkJEM0M5RUZGMzU3RkRFMzlCMEY4QzE1Cis6MTAwNTAwMDAzMkNFRDc0NEZGOEI0MzlGOUJGRjJGMEU2NUU2RkYyNTFFCis6MTAwNTEwMDAyMTNCRkY1N0UxNzczQTMzRjBGRkQ3NDI5OUY5N0Y2OUUyCis6MTAwNTIwMDAyNkJDN0MwMTdFNkYwQTY1RTBDQkVBRDNDNEY3OEYwNDVBCis6MTAwNTMwMDBCRTdGRjQwNUYxQkQ1MUY0NkZGQkZDRjg2RTFCMDFERkNCCis6MTAwNTQwMDBFQjEwOEZBNzgxRUY4RDIzRTA3QjUzODhFQzk1NDcwODU0Cis6MTAwNTUwMDBGRTkwMUVBNDM4NzZENzJDRDgyQjk1NjQ4NEUzNzZFQkQ2Cis6MTAwNTYwMDAzODVFOUQ4RkMzRjBGRTgxQzRFODdFRkU5RkJCNjI5OTFBCis6MTAwNTcwMDBCRTRGQzNGQUZEODMxNTdFQjNERjlDOTBCODI3MERGQUZBCis6MTAwNTgwMDBGNUU4OUZERkY1RTUyMEM1RkI5OTdFQkMyN0Y0OTc5NTNDCis6MTAwNTkwMDBGQjBGODYzMkM4RkRGOTMyOTc0MzFGNkZEOURCODlGQTBBCis6MTAwNUEwMDBGRTBCOENGRjU4MjYzQTVCMkRFMDNFOTU1RDcwNThEMENGCis6MTAwNUIwMDAwNzVCRjdFM0ExQkNFMUYyQUY0N0ZDOUVDQTNERTFDNDkzCis6MTAwNUMwMDBDMTEwRjk1N0ZEMEI1MTVFRURGQzU2OEU4NEYxQTgyMjQ3Cis6MTAwNUQwMDAyMzJEQTE5RkYwNzNBMUM3MkE0MzNBQkZDRjIwRkFFRDg0Cis6MTAwNUUwMDA1NEQzMTJFNkIzRUM2Q0Q2MjRCQzZGNjQxOUVGOTdBMTE4Cis6MTAwNUYwMDAxOTIzOEZFNzg0ODNDMUQ3MTcyMjc5NjczQzhGRkRFNkUzCis6MTAwNjAwMDAwQ0Q5ODE5RkM5NEU2QUNDMzY3RTFCMjJCQjJERkUwQUI3Cis6MTAwNjEwMDBDOUVEMzNFQzcyREI1Qzg3MUNFRkE2QkMxN0RGRUNDQ0JBCis6MTAwNjIwMDBCRkY3RjJGM0EwMkFFQ0JGRjg2QjU2Rjk3RjM0QTQwOUE4Cis6MTAwNjMwMDAzRjk0OEZGNzU5RjUwRjgzRUY5RDEwRDcyQkZGOERBNUIyCis6MTAwNjQwMDAxMzNFMjc1RTRFMDU2NzExRUE3OTNFREU0Nzk5RjQ5NDIyCis6MTAwNjUwMDA3MzNDRDM2RjM1RjdDOThEM0FDOTEyRDc3MTg3MDdFRDRGCis6MTAwNjYwMDA1RTU3MThFNTQ5ODc0Q0Y3OTAxNjA5NzlCMjY4NzZCNjU3Cis6MTAwNjcwMDBCMERCMzUzRjhFN0Y5Nzg4OTNERkI1RTJGNjZBM0NFRkJCCis6MTAwNjgwMDBFRUI5NTlBQjQwMTQxNDM0NzFCREE3QUYxODRGRjE0RkY4Cis6MTAwNjkwMDAyRDJDRDlDRTkzQ0Q3MkIwQkZCQjc3MEE3RTlGOUNDRDU3Cis6MTAwNkEwMDAxQkMxNzlDRjlEMDc2OUY0MUJCM0QwNkVBMDc4ODQ0NjM3Cis6MTAwNkIwMDBCRkY3OTVFM0U5OEU2MkZDNzRBM0Q0RERCODFDRjVFQUJDCis6MTAwNkMwMDBDMjIwQkY1NzEyNUQ3MjhBRUZCQ0YxRjg5M0I5NkU4OEYxCis6MTAwNkQwMDA1NjlEQTI3RDFCQjVENzAyRERGNDlEOENEMzZFRUZFOTRDCis6MTAwNkUwMDA2RUNDOTQ1RjMyMjMyQzlCNzg4RDhEOEFENzY4ODRFMjAwCis6MTAwNkYwMDA1QTI2N0U4N0NGQzNGN0FGM0FERTJDMjFCRTQzNTU5MkYwCis6MTAwNzAwMDA4NjU3QUY0MjhDNEVEMDVFOTI0QkZCMjg5RkU5MkI1NTBCCis6MTAwNzEwMDA5QzVFODBGOTI1QTM3RjY3QTNEM0I0RDdDRTBCRTc3RDdBCis6MTAwNzIwMDA3MUI4Q0M3NjIzQ0YyN0RBMzlFRTJCRTBCOTE3QzU2NzNECis6MTAwNzMwMDA4MzVDOEU1MTQzNTY3RkVGNzA2RUM2QjhCRjU5NkU2OEFBCis6MTAwNzQwMDBENThBNTQ5Nzc1RkMxNDhGNDMwRUU2NEZDN0EyNjg2Rjg1Cis6MTAwNzUwMDBCNTAwQTc0Nzg4N0FDOTBFQTNFRkI5NUJGNkYzOUEzMEM0Cis6MTAwNzYwMDBDRjczREU5OTE1NUYxRTI2Rjg2MkY0RkQ0MkQwQjREMzM0Cis6MTAwNzcwMDA1QTBGRUI3NzJERUUyQkE4QUM1RkU4RjRGQjhENUM5QTVCCis6MTAwNzgwMDBCRjczMTdEM0UzOTZFRkE1OTlGQzNBMzY5MTA0RkMxRThDCis6MTAwNzkwMDA4REJGMUMzNDg5RUQ3RjI0NjQ5RTEzNzIzQUI4MzM2ODkwCis6MTAwN0EwMDBENjkzNzQ0ODFFMkZFREU2NzlGOUJBNDkyNzVDQUU2OEY2Cis6MTAwN0IwMDA4MTVFNDNBRTAwRDgxRUFFQkYyMDNBODU4RDU3OUE4ODIxCis6MTAwN0MwMDBFMkE3Rjc1OUZEMjk5NUU0MkZBRjAzRDQzRjc1ODhGNENDCis6MTAwN0QwMDA4NTc2QTYxNDYzN0E0QUFEN0JFQUYwMzhFMDU3QTVDODVGCis6MTAwN0UwMDBDRkFEN0I4QUU0REQ2MDFERDI5OENGRENFMzFGQUMxQjZDCis6MTAwN0YwMDBERTI4QUI5NzBDRDY5MzU4REYyOUY0RTRGNjcwREQ1MzZFCis6MTAwODAwMDBFREM0RkZGMTNCQUNGQzUxMkRFOEYwMkY0RDdGM0Q3QTVDCis6MTAwODEwMDBCQjg2RjcwQzkyNTE5NUVDQUE4RDBFN0FGOEU3QjA5QjQ3Cis6MTAwODIwMDBGMDVGQTUyNUVFNDc3QTU4NzRGMzgwOEE1NzU3QkNDNTA4Cis6MTAwODMwMDA5MTEwRjJDMzg0RTgwNzQ5RkNDRURFODQ3OTIyNERCNURECis6MTAwODQwMDA5NDdGQ0ZBMTI3QkE5NkY4QjIwN0Y3MDU3ODVBMDJDNjY3Cis6MTAwODUwMDAyNzg3RjYyNzk1Nzk3RkNBNTJCNDNGN0U5REJGOTdCMTBGCis6MTAwODYwMDA0RUZFMzY4RkJGMDVDQTM4M0Y2QjFFMUVERkRCMjdFNDA2Cis6MTAwODcwMDBDOTUzNjE0NTk0NUNCRTY2NDVEQkM5OUZGMkQ2QzkxNDc1Cis6MTAwODgwMDAzRkNFQUE5MzZEN0E4MzdFMjk4RkRBQUIzNjdBRUJDRjhGCis6MTAwODkwMDA0OTFDMEM1QkU1MjNBNEUzNjU2QzFERkUyOTkxMUMzQ0ZGCis6MTAwOEEwMDA3RkE5MkU1M0Q3QTJCRkZEN0Q2MUZGQjE3REJBOTdFNDJBCis6MTAwOEIwMDA0NTQ1QzQ5RkUwRkJGNjRDQzY3RDEzNzgzOUQ1QkVCREQ3Cis6MTAwOEMwMDBEODlBODhENUJBNDZERUI3NEIyRkUzRjlGNENFRTdCRjA2Cis6MTAwOEQwMDAxMzc4MzhERUY4OUZERjQzNzY1OUU5MURBMEVGN0U3NzY1Cis6MTAwOEUwMDA5NUI2NTExQ0Q2OENCQjdBRjY1NkE3MEJGNUExN0NDMEU5Cis6MTAwOEYwMDA3NTgxRjAzQzJDOURGM0JFRjhDOURGNkI3NDRGRTQyMzg3Cis6MTAwOTAwMDA0RkM2RjMyNDI1OEJFM0Y5NDg2QjIzRjU2MzFCNENCRkRCCis6MTAwOTEwMDBEMzcyMDUyRTg1RTdCMUQ5RUVGMTk5RjcxMTJFMDc0RTY2Cis6MTAwOTIwMDAwQzRCRTJDQkJFODI3MjY4NzlBMzQyREY3N0I4MDJFQzRGCis6MTAwOTMwMDBGOTE0OTc5Qjc5NUYyRDY2N0UxQ0NGRkI0QTQwRjYwMjI3Cis6MTAwOTQwMDA2NEMzNjU0OUM3RUY0QzQwNkMwMURFQjcxRkY2RkIxMzZCCis6MTAwOTUwMDBFMjdDRUJFQjhFQkM4OUFGMzYyRThCRDU4QTc2RUZEMzVCCis6MTAwOTYwMDBGRjUzODRCRjI1M0E5N0JGNEI2MkZDM0IzRjk3QzQyRjkwCis6MTAwOTcwMDA4QkQ1NUFDRUEzNUZGQTU0Qzk5ODM3MTkxRkM0NDczQzg4Cis6MTAwOTgwMDA1NjNCNjkzODNFOTZDNzI1QjdBNjlGMUEyRkE3OEI4Nzc3Cis6MTAwOTkwMDA2NTZBQzU4MjNDN0QzODFFOUNFQjY3MThEQjhBNzhGRTUxCis6MTAwOUEwMDAzQUMzMzNEQTlEMjNFMTgzQjVBM0ZENzhFOTMyODU3RTJFCis6MTAwOUIwMDA3NzY2ODE1MkVGQzI3MzkwMkIxQjI0M0E2MzYyRjgwRDY1Cis6MTAwOUMwMDA4QkJDQjhGQUYzMkRGMDNBRjFFOEM0RDc5NTRGMDBEREFGCis6MTAwOUQwMDAxQkI4RjJCQjIxOEFCN0JENjBFMjI3N0QyRTlENUY5OEQwCis6MTAwOUUwMDBFNzI3OTY3NTFFRTNGOTVCMUFBRDczRjFFQzhBNUZFMEI5Cis6MTAwOUYwMDBGNzE1MTJFRDRDREFGMkY1REFDRTAxOTczM0NDRTNCRDAwCis6MTAwQTAwMDAwNUI2RUU2MzIzRUNCQkVEM0NEMDA5OUYxMzdFOUZEMDZGCis6MTAwQTEwMDAyQkNFNzMzMTUwRDNFNUE4MDdDRkNGMTJFNzYzRDMyMDk1Cis6MTAwQTIwMDAyNkNFQzdCMjI4MURCNzM0QjNCQzc1N0U5N0NFQTRCMzBCCis6MTAwQTMwMDAyQjVBMUEwNkU3QzVGMTI1NDgwQ0Q2MzVCQ0FGRjVCNERDCis6MTAwQTQwMDBCMkY1MTJGNkY3MzU1MUZFRkI4N0YxQ0I3MjNCRjBEREM0Cis6MTAwQTUwMDAyMjMwN0Y5N0M4QTBGM0E2MkIwNEZFMUE5OEM3ODdCRjQxCis6MTAwQTYwMDA5OTc2MkUxMzRFNzhBRUI3QzhGMEU5NDFDQjNBREZFQjVBCis6MTAwQTcwMDA5NkVBQzQzREFBQUMyNTUzQjE1RjcyQkYzMjZEMzhCQzUzCis6MTAwQTgwMDA2QkEyRkM3NzBFMTkxRDdFNjBBNTQzREYyNEZFRkQ1OTg1Cis6MTAwQTkwMDAyNzVFNEM3QzM1MERFMTY1REE2N0MxQ0JFRjUxNzFFNjFECis6MTAwQUEwMDBEMTc5MEREOUI5MDM5Mjk3RUVDMzlCRTczOEVDQUY0OUUyCis6MTAwQUIwMDAzNzEzOURCNzY0MTUwQjNCODBBRkRCRkNDRTE3NDAzMzdCCis6MTAwQUMwMDBEOUY3NEJDNTdEQUNBMzJFNjg3QzM4QzhDRjc1MkEyRENECis6MTAwQUQwMDA3MkVCM0IzOUQ1Qjc2NDU5RkM2M0YzNUNDN0ZDQUU5NDQ5Cis6MTAwQUUwMDA0OUNGOTc3QjgzNjk4NUQzQTFFREJCNTE0Mzc5NEMwOUVECis6MTAwQUYwMDBDQTYzNTJCMjU2RTg4ODhGMkU3QzM1ODdFQzlFQUUyQ0E2Cis6MTAwQjAwMDBGNDlGMDNGQ0JDQ0FGN0Y0QTM1RDk3RTg0M0ZCQjdFOTg1Cis6MTAwQjEwMDBBQUM3QkE2N0IwQkFGRkVCQkY0RUQyQTA3QTBFRTEyRERBCis6MTAwQjIwMDAyNEY2QUQ1QUVDOUIwOTlGQkY5QzNGQjdFQzFGOEY5RkVCCis6MTAwQjMwMDA5NTg5Rjg5OUQ4Qzc5MUY0ODRCOThGRTZCRUExMUQ4NTJGCis6MTAwQjQwMDBGNEVCMkI1M0ZGOUNFOUY3RkFFMDUwRDUwMEYyNjkyMjUxCis6MTAwQjUwMDBBQTUyMEU1RDQyN0FBRDgzQkVDNzA1RkE0RTNDN0ZCRkY2Cis6MTAwQjYwMDBBMkM1NjVGQjlEQTYwNERFRDNDN0Y2MUI3REMyMkY4OUY3Cis6MTAwQjcwMDA1MUZGRTVGOUJDM0Y5NDcxQkI3MTkwRUU5M0FDQkYyNTdBCis6MTAwQjgwMDAwRjA4QkNFMTMxQjg2RkZEQUMyRkU2ODlCMUYxQzZBMDBBCis6MTAwQjkwMDBCRTg3MkVDQjNDMjVDM0U3MUQ3MTNDNDczRjY1RjBEQzhCCis6MTAwQkEwMDAyNDE2OEI1OUU0RjVCRTJDNkVERkJFMTdBREVBOTUzM0UzCis6MTAwQkIwMDBDNDVGQ0M3MkI5MzdCNzQ4QjVFNDg3MURDQkY3MzY2NjRBCis6MTAwQkMwMDBGQTdFQTkzOURFRTBGN0U1MDZFREM0ODFBNzBFQ0QxQjVDCis6MTAwQkQwMDBCMjEzMzc3N0JDNjVCNzEzOTM2RjdEMjEzQkIxRkZCNjc2Cis6MTAwQkUwMDBCNzlFNkE2N0ZERkZGNDNCMEZFOUFCRjdFQUZDQjQwRjcxCis6MTAwQkYwMDBCOTJERTdDMTdGRTA3RDVCMTU3RjAzOTBFQzdCRkEzRTZBCis6MTAwQzAwMDA4RUI3QTU5MEQ2MjNBOTBDNzNGODNCNjI3QTRDNDI3QzMwCis6MTAwQzEwMDBCRjg5MUZGM0M1Qjg4QTBFRTkxMDAzMkU1NzhENDk4ODg2Cis6MTAwQzIwMDBBRkRCODUzRkNBRTg2QzhBRjUzQkFFNkY2NjcxM0JDM0FDCis6MTAwQzMwMDA5Q0M3RTM4NTI0REUzMzM2Qzc2NTc0RDA0Njc5QTVGNUI1Cis6MTAwQzQwMDA0MDdBQzQzQzg3MzVGOUQ5MUNFNzQ0OTZERDBGM0UwRDQ4Cis6MTAwQzUwMDBGRTNEOTE4OTdGOUY5NTlCRkZGRDE2QjQ1RjlGNTEyOEI0Cis6MTAwQzYwMDAxRkY0NkZBMzM3RDFGMzRCNUJBRUE0RjJCMjk2NkJGOUNFCis6MTAwQzcwMDBCQzYyQkU2RjRBODk5MzM4NEU1RkUzQUZGRkY2NDY0NkNCCis6MTAwQzgwMDBBRkFCRjc3QUU4NUVEOUNBNkZCRTc5MkJGMkE3Qjc4NTBBCis6MTAwQzkwMDBFRDNCNkJGRkJGQ0M4RTM4MzgwMDgwMDAwMDAwMDAwMEI5Cis6MTAwQ0EwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkU1N0QwQjdDNTRDNTg1Cis6MTAwQ0IwMDBCOUY4OUMzREZCNEFCMkJCRDlEREJDOTZCQzM4RTExOTAyCis6MTAwQ0MwMDAyNUM0NEQ4MDEwMTBFQjg2NTc1MTA5MDQ5RjUxMDI2Q0NBCis6MTAwQ0QwMDAwODg0MDA4MTA0QTRCQUFEMTQzNjI0NjA0MEFDRjE1NUY4Cis6MTAwQ0UwMDBGMUFBNzQ1MUFDQjY1N0JENDE2OUU1QjZEMTZFNDQyRDM5Cis6MTAwQ0YwMDA1NDBBQjFCRUQwMEEwNkE1MTYxNTRERTQ1MTU2QUJFNTBGCis6MTAwRDAwMDBDRUY3Q0Q0QzcyQ0VDOTJFODREQUZCRkJGN0ZFRkVGMTk2Cis6MTAwRDEwMDBENzdFQ0M5OTM5RjNGOERFRjNDRDM3Njc2RjVDNTg3NTIxCis6MTAwRDIwMDBGRjk4NjQ0MkNDNDMwRDRFODkxMEQyOUM0NUNBNUI2RDNFCis6MTAwRDMwMDBCNERDMjA5NTAxRENBODk4QTdFREE0QjBDRTUxMzJEMjQ2Cis6MTAwRDQwMDAzOTg2OTBCM0YwNzczOTk0Mjc2Mzk5NzgxQzA2NTI0NDFBCis6MTAwRDUwMDBDODRBMkJGREI3NDJDODk5NDNCNzdCRTZEM0ZFRTI2RDg0Cis6MTAwRDYwMDAzNjJGN0Q0MkZCQzlCOUNCNDBDQjY0QUY0QzFFQTc0MEE4Cis6MTAwRDcwMDA0RTIwRjNDQUYyMjhCNDMwMzhEMDY5MjQyNDA1QTAwMUVCCis6MTAwRDgwMDA2MTFBNDBEQUFGMzU0MjY3OTMwNEVEQkNERTdBM0FCRUIxCis6MTAwRDkwMDBENTE4MjQ0RTgwMTEyMzNFMzc0Qjc0N0U3OUJERjMxMTU0Cis6MTAwREEwMDA1MEY0Njc4REM4ODQ4QzgyRjFGNEVGOUJGMTM5QUMwQjYxCis6MTAwREIwMDBERTk3OTNEODNDQzRGQkI5RjBGRTE4ODA2MjFFMDk2QzI0Cis6MTAwREMwMDAxRTQ5RkE3RTFDRUNCOTRDRUEwMTRGRkE3OTM0MjU0RUUzCis6MTAwREQwMDBDQTczQTYwMDlFN0MyMzAxMTJEMjY5MkFCMzEzMzJEN0FDCis6MTAwREUwMDBGNjg3ODM1MjNFODU1NjVCNThBNjkwMDQ0Q0M3M0I3M0VBCis6MTAwREYwMDAwOUZFOUQxRDA0RkY1RkUxRkM3ODA0MjExMkU5OTRDRUY5Cis6MTAwRTAwMDBEMkExNjc3QzIzODUwNzUyRkNDNTk1QzhBMTc1MzkxNDBBCis6MTAwRTEwMDA0QUNFRDJEMUEzNjlCMzEyOTMxN0YwRDkzMTI0RDkzRTY3Cis6MTAwRTIwMDA0ODM1RkVFNTQwNDUzQUVGRDc4RDRFM0JDQ0IzNkM4QTUyCis6MTAwRTMwMDA1QzE2Q0FDM0VFNTNBRTg1N0VBNjU0MTU2RDYyQzM1OUM3Cis6MTAwRTQwMDA0OTJBMjFGM0Q4QkZDOUVCQ0FGNkU2NDFCNDNFMTgzNEFCCis6MTAwRTUwMDA3OTg3NTIzQUNFQjMwNjQzMzBCRjc5QzQxOEVDQjQ2MkY2Cis6MTAwRTYwMDAxM0U5QUM4NDUwMzExNkYxRjdFODdDRTc0RDk2N0Q3MUJCCis6MTAwRTcwMDAwRTREM0I3Mjk2Q0U5MzM0OTE5Nzg3RDBGRUU3NEE3QzE1Cis6MTAwRTgwMDA4MDIwMkREM0Y3MEVGM0UyMDc5MzRGNUUwN0NCRTgyNEMzCis6MTAwRTkwMDA0RUYzMjBEQTdFNkU2N0U1NzQ5MjhGNTUzNkUwQTc4NUIzCis6MTAwRUEwMDBCQ0REQkM4MEU5Njg0RkJGRjQ3Rjk1NDE2RDc5N0U3MUYwCis6MTAwRUIwMDBDMUFCOTQwQzE0MkZBMTY5QTM4MUNGMkUzMjIwOUY1NTcyCis6MTAwRUMwMDAzNTZCREIyRDdDRkY4QTRGODgwM0ZBMzUxRUVEQzEzNzY5Cis6MTAwRUQwMDBDQzkzRENDREY4NjU0QUEzNTNBMTc4MUFFRDU0QjAzQzBECis6MTAwRUUwMDA2M0YyNDc5MzA5MkRDRjI0RTQzQUU4NzdFNjY0RDkxOUYxCis6MTAwRUYwMDBBNkFEMzcwNzBDQzQ0NzI3QkVERjI3ODcyNEJBQjZGRDQ3Cis6MTAwRjAwMDBCOTlEN0IyRjA3QkMxNTlCOTRDNzYxQURCOUU0Q0U2QjJGCis6MTAwRjEwMDA5MkExN0U5NDEzRjA1QzA2Q0YwNjYwN0I0MkEwOURDNzMxCis6MTAwRjIwMDAxQTFBNEE5Rjc1RjgzRUIyNTVBOUY4NkU3RkYxNDcxNzE1Cis6MTAwRjMwMDBGOTI5QkRCNjFBNDg0RDM0N0UyMkE0MDFFOUZBRjI4RjkwCis6MTAwRjQwMDBFMkIxOUYwRkVFOTM0MjE2M0FGRjI5RjIzNzdGMUM0QjE2Cis6MTAwRjUwMDBFNzUzRjU2MzkzRDdBMkUwQjIwQzQwRDdFOTVFMjY4RjQyCis6MTAwRjYwMDA4NEY4NkM1MzI4M0VFNzEyNTZGRTg4OTQxNTg1RTlGOEZDCis6MTAwRjcwMDA1NTA1ODc0QTJDQjQ5RkFBRjUxMkNBQTlDMDNGQzVGN0U4Cis6MTAwRjgwMDA4NzZBQkNGOUVCQ0IxMkMzMEFFMjVERjM5Qzc2NjYwNjc2Cis6MTAwRjkwMDA3RUE2NzhGRTMwMDY5RTNGNTRFMzM5RjBGRUJCMjM1RjA5Cis6MTAwRkEwMDA1NkI1QkJEQjY5NEYwNjNFMjc4NUE0RjAyQzQ1Q0Q2OUJECis6MTAwRkIwMDAzMjIxNzExNEU5QkI2RTAxQ0ZBQzNEMzhGMkU1QTE4NDVBCis6MTAwRkMwMDBEQzQ3N0M1QjUwRUY5MDRFNjNEOTQ4NEEyNzIzRjE0NUJDCis6MTAwRkQwMDBEMzAzQTUwRTI2MDc1M0U0RTM0ODlGMTNDNUIyMDJGOEQ2Cis6MTAwRkUwMDBEQTFGRjhENDQ2Mzk4Q0VDRkY0NjlFMDY3ODI2M0U0QTM2Cis6MTAwRkYwMDBFQzcxQkRFRjNERTMzNEUzN0I1QkNEQzQwNzc4REU5QTUzCis6MTAxMDAwMDA2RTBEMzVEMEFFREE3Rjc0NzE1QTI3RDI0Nzc5NjAwMkZGCis6MTAxMDEwMDBEMEYxMEYyNkYyQjgxMjdCQkVGNjgwNEM4NjUwQzYyQzVCCis6MTAxMDIwMDAwRDQ4MDgwNUZEMDYwNkUyODg3MTk0NEE1RjkxRThGM0QxCis6MTAxMDMwMDBGRjFEQzgzMTlENUFDQTZBNjI1MEU4QjhBRTIwRjE4NURBCis6MTAxMDQwMDBBMkYwODU2OEI3Q0NEQTNERDU0OEIwN0REODQ1RTdCNzgyCis6MTAxMDUwMDA1QzMxODQyNEJBREUwMjg5RjFCM0Q1NTRFRkNCQTA0REM0Cis6MTAxMDYwMDA4RDZEQjM4MjE5MDRFNjIxRTMzQzE0M0EzRjIzOUQ1RjYyCis6MTAxMDcwMDA0RTIwMDFDQjgzMDI0OTA4MDcwNzVDMDg4NzA0MzJCMDgxCis6MTAxMDgwMDA3RTY4NjAzMEMyNjE4MTFDN0MzRTNDMzAwMkNCQjk4MUZECis6MTAxMDkwMDA1MTA4MkYwQTE0MjBCQzM4NzAyOUMyMTE4MTQ5RDgyRTVBCis6MTAxMEEwMDAyRjUwODI3MDY0RTAyQTdDOUUxRkI4MDZFMTI1ODE1OThBCis6MTAxMEIwMDAwOEJEODFEOTU4NUYxMEE4NDI1ODE4QThDNEU3QTMwMkY4Cis6MTAxMEMwMDA0QkIxM0MzQTcwMzM5NkM3MDQ1NjIwMkMwQURDODY3MDJDCis6MTAxMEQwMDA2Q0EwMTE2MTcxQTAwMURCOEQwQkRDODFFNUYxODE3QkRFCis6MTAxMEUwMDAxMTVFMUFCODFCRTE4NEMwNDM1ODBGMEEwOEYwMTBDRkY0Cis6MTAxMEYwMDBFNUYxMEU2NTgxOTM0QTBBNzBCODAyN0MxQzRCRUVGRTQ2Cis6MTAxMTAwMDBDMUVENTJCNUQzRjczMUYwOUQ2ODY3MzYxMEJGQkFCRDU3Cis6MTAxMTEwMDA2OEY3MzVCNzFCMkVBMDZCOTRGRTRFNzNGREZDODVGNzY4Cis6MTAxMTIwMDBDMzlGMEUyN0JENzQ2QkY2MzQ5NDExQjk5NzVFOTY5RERDCis6MTAxMTMwMDAyNUUxMENGQUNGRTVCQjY2MTFEMDBCMjQzNzU5QzNBN0M0Cis6MTAxMTQwMDA3REY1MDM1QkRGNUZCOEZFREE2QUVDRjBDOUMwQkZGNTdFCis6MTAxMTUwMDBDNDFCQTQ4RjRBNDdCRjJFNDEzRkRCMTRFM0I0NTAxNDk1Cis6MTAxMTYwMDA3RUNCNzc5OTcwNUVBMzlEN0U5MzhCQzI4NDlDQTMyRkM4Cis6MTAxMTcwMDA4MzNFOTkxOTc0RkU3MTIyRjA0QjVFRjIxRjI2RDJGRTU3Cis6MTAxMTgwMDAwNjM2MTk2MDA0QUE0QTlDRUQxM0E5REU1MTI2MTNENDMxCis6MTAxMTkwMDA4QkRCMDg0MTc5REExNkFGQjVBN0MzNUMwQzFGODRCNEFBCis6MTAxMUEwMDBFRTE5ODRGMjM0QTQ5MEQ5OUZDRTJCNDBCRUNDM0YxQUM2Cis6MTAxMUIwMDA0NDM2RTU4MEJDODUyNTIzRUQyRkI4OTI5MEM3ODVDREI4Cis6MTAxMUMwMDA4MEY2MUJFNkZGMUNFQTdCRkIzMzMzN0ZBMTk5QkM2NEVFCis6MTAxMUQwMDBBNTEzQzk2OTUxMjZDNjUxMzg3ODhCRUZBNTM4RkFDQUNDCis6MTAxMUUwMDBEMDkwN0Y2MjNDMkQwRjdGMzJGODEyQzA4QjVBNDMxMzkwCis6MTAxMUYwMDAxMzI4MUNCMTJCRkMxMjM1QTc2NDY0Qjg3M0EyOEQ5NjFBCis6MTAxMjAwMDAyRkQ5NDM3NjAzNUEwQjNBOTQ0OTc2NUExRTc1RDBCN0I0Cis6MTAxMjEwMDA5QkIyMDExOUQzRTk5RkU0NTA2MDNFQTE0NjA3OURDRkUwCis6MTAxMjIwMDBENkMzQzREQjQwQ0JDNUM3NUJFNDQ0QTJBMkJGOTlGOEQ4Cis6MTAxMjMwMDA3N0E4RTg2MjFGREQzMTM5ODlGRTMzNzM5NUIzNDA4NkE0Cis6MTAxMjQwMDBGNzhEOUQ3MUFFQkNCRUY0RDkwNkVCODY3NTUyM0JGMkFDCis6MTAxMjUwMDAzODVENTdBNjJGMkMzOTU1N0M3MkI1NEIxMjc0MjgwMjc1Cis6MTAxMjYwMDAzQUNDNThERDZEODQ3NTZFNkI3MkRCOTE3RUYxQ0UxMkQ3Cis6MTAxMjcwMDAxOEIyN0IwQTcxM0VBQTAwMUYxQjExNEZFNkY1ODM1MDdFCis6MTAxMjgwMDBERTA1REY1MUZDNUUzNENCQUVDNjlCMjRGNDVBNEQ2QkI5Cis6MTAxMjkwMDA1RTZDRkM1RUZENkY4NkRGMjNDMDZENjM2MkUzRDcwQTgwCis6MTAxMkEwMDBCQzMyRUVGQzcyNUNFNUVBOTFFMzc5QUUzMUIxREIzNTNDCis6MTAxMkIwMDBCQjk4M0VENUUzNzk5QjgxRUNBMUI2OEE4RTRCRjk5NDFECis6MTAxMkMwMDBDOTE1MDlEMkE2OEQ5Q0JGQ0Y4N0Q3MUZCQjk4NURGOUUyCis6MTAxMkQwMDA3N0MxRUI0RDJFQTYyNzYyRTE5NTI4QzlBODI3MjlCRjIzCis6MTAxMkUwMDA1RTQ0MDZDN0Q2MzdEMDVGMzRGQjc1OEZBQjhGOUUzMzE1Cis6MTAxMkYwMDA4M0JGRDhFQ0E0N0E2RTcwNkMzRDM3RDdDNUU4MUQ1MzE4Cis6MTAxMzAwMDA3RjcxM0Q2M0U2N0E1QzhDRjczMzRFQjcwMzhFQjI0NzRDCis6MTAxMzEwMDA4MEJFQjZGNTg2MjBDODU5MDlCMUEzNUMxMDRGMzJFN0VDCis6MTAxMzIwMDAxMzY3M0NGMEM5NzREOTU5MDJGQTg2MEMyN0U4NDcyNzlECis6MTAxMzMwMDBFNDg1ODJCMDRGMTkxODU0MEE2NTY4MDY0QTE5RjA5ODc2Cis6MTAxMzQwMDA5RTFCREE0NEJCQ0VBMTdFODY5MUQyOUY3NjE1MDY2ODlECis6MTAxMzUwMDA1NTlDODZGOTc0REQ4OTQyREU5Qzk1MUVCNUJDMDk3QkRGCis6MTAxMzYwMDBERjJCOEY4MjJGRENEQjM2RTUzMDdFOUQ0NUZEOTdDMzdBCis6MTAxMzcwMDA3Q0RFQkRGRDQ4RDg2RUMzMEZEM0I3NkQ1MkU5QzE2RDk5Cis6MTAxMzgwMDAxRTBGOTY0NUZCNThGQ0ZCOERFMERGQTY3NUM0MEZGMkRGCis6MTAxMzkwMDAzMTIxQkFERjcwRDAyNTczQkVFREY2MDE5RjA3QkY0NzNDCis6MTAxM0EwMDA5Q0UwQ0ZCODlBM0U0NEZERTRBMkZBNDk0MkZEQzRDNjhGCis6MTAxM0IwMDBDRjBDQzRGRjNDNDhDQkVGQjg1MkIxN0ZDMEUzRjVGNjg5Cis6MTAxM0MwMDBGRjc3RkNGQzk0OEIzMDc5OUFFMDZDOTc2OUZENDA2QTVBCis6MTAxM0QwMDA4NzE0OTBEMzA5NzRFRUEzMDE1RjY2QTRCQjQyMTgxRDY1Cis6MTAxM0UwMDA5NTA5MjQwNDdFMkZDNTVCRDgwMEZBRDc2MDBGODE5RDM0Cis6MTAxM0YwMDAzMTlCNUI3QzIwQ0ZDNEVDQzJGNTFGNzBGODNGNzY5RDFCCis6MTAxNDAwMDA0M0RGMzgxMzk0MDIyMEVBOTlCQkZGM0VDRDQ2Rjk2RkMzCis6MTAxNDEwMDA0MzhFMzMxRUNBQTc2ODc5QjM4NzhFRUJFRTI0QkNEQ0ZCCis6MTAxNDIwMDA2QzQzRjlBMTdGRTk0OEM1MzBERDFCODA3RDE0NjU5RkMxCis6MTAxNDMwMDAxNURBMEZFQTI5MDdBMUJDMTU3QzkyRjFCNDdGRDdENzQyCis6MTAxNDQwMDA3QjlBMjg2MkNBNURCRUQzMzAxRkNBRDc2NzAwRkE4NjZFCis6MTAxNDUwMDBEMzBERUFFMDVFN0UzRTlGM0YyMEU0QjM1NzlFOUMwNTlECis6MTAxNDYwMDA0MjlFMkFGMzUwMUY0QUVFOTRERUZFNjJGOTM3QkZFNTMyCis6MTAxNDcwMDBGQUQzRUQ2NjMwOTY3RjIzRjhGRTgyRkQxQjNFNUZFMkQ1Cis6MTAxNDgwMDA1NkNFRTlCRkM0RUQ3RDYzQ0I3NjVBNUVFOTkxOTVBMzU0Cis6MTAxNDkwMDBENEJGQjNBN0JGREQ2MUE0NjUyQkY1MzczRkEyNjU4MzM5Cis6MTAxNEEwMDBCNUMzMDhFRDRBQTk4NERBMjhCRTdERDRDOTgzRkQ4Nzc3Cis6MTAxNEIwMDA3NTM0MkJDMzFGRUMzRjRFQjQ0OEQzOThCRTU2MTJBRkMxCis6MTAxNEMwMDAxRDc5MkUzQzg2NzAzRDJCM0Q2NjFDMkY2RUU4OTA0NEE2Cis6MTAxNEQwMDA5MDJCMDdFNzJCNjI5NDQyNjBDNzFEQzU0RUUzN0NFQzVFCis6MTAxNEUwMDBBRjkzNUM0REZCQkJDNENERUM4MjkwNkJEMDVCQ0ZFNjgxCis6MTAxNEYwMDA4MTVFNzIxQjYxQkY2RUIxOTJBMEREREREQjNGOTQxMzk0Cis6MTAxNTAwMDAwQjdCRjUxM0UxRkJCODlCRjk5RUE5NjU5RDM3NzEwODJDCis6MTAxNTEwMDBDOEU5N0UxNjQ3Njk1OUMzRTRCMjM0OTM4NEQ2ODE5RUU0Cis6MTAxNTIwMDBGMDExQzU0OURCQzcxMUYxNDcwNTk3OTY0REJDMzRGRDU1Cis6MTAxNTMwMDA2Qjg5RjhFOEZDRjc3RDJEMjM5NDg2OTBCMDlERUVGNzNCCis6MTAxNTQwMDA0QUJENTIxOEY2ODE2NjgzMzUwNEI2QjQyNERENEFDQzEwCis6MTAxNTUwMDA1MDc2MTg0MjE2OTA4RjBGMjU1Q0E3QjkzMDIxMDRDQTI3Cis6MTAxNTYwMDA2RjcyN0E3MTYyMjc1REM3Qzk3REJCNkRGRTI4RjRCRkJCCis6MTAxNTcwMDBDMTVGRTk5RDNDMkEzNjFFN0JEQUNENzlDNTA5Nzg3Q0FFCis6MTAxNTgwMDA0ODY5NzI4MjFGMTlGNDE4MzFFRUIwMTE5QUFBRjRGQTYwCis6MTAxNTkwMDA1QzM3RjM0N0E4M0Y1NDBFN0MzQTYzNDE3NzkzMTlFOEQwCis6MTAxNUEwMDA5RDkzOENGRTEwMTlFMjQ2QkUxREUwRDlCOUIxMDQ0Q0UyCis6MTAxNUIwMDA1NjJERjM0RkQzNDlBODQxRUQ1NzA5RkVFQTc0RkJFN0Q2Cis6MTAxNUMwMDBCQkU5M0MxRUUyNzY4NDhBNjVDNzMwODg1NzVEOTRFQzlGCis6MTAxNUQwMDAwNkJGQjRBNDJFQkQwREZDREQwN0Q3MTJFRjAyMTNFQTNGCis6MTAxNUUwMDA4M0VCNjA1QzVGNTI2QjAxRjBFRjQzREU5REJGQjgwQjk1Cis6MTAxNUYwMDBGMDY5QTFGQjYyRDBFM0EzMEVEOTE0NEFBRjhBMzFCQkQ0Cis6MTAxNjAwMDA1MzYwM0Q3RkQ0Q0Q1RkMwOEFDMDFBQzQ4QjdFMUZCQzlGCis6MTAxNjEwMDBEMkNERjdDMUY5MjQxRkY2QzEyN0JERDcyNDg2OTFCN0QzCis6MTAxNjIwMDA5MkEyQ0E3NzQ1RTAzNkVDNDdFQzg3REYzNzg1QjM5QzVBCis6MTAxNjMwMDA1MUU1NTA4QjZGMzE3RTg1QzRGNkI1QzQyNDMxRkRDN0FBCis6MTAxNjQwMDBFRDI4RDUyRjREQTgwNzQyMDRFREE2Q0YyMjNEMEFGNjdFCis6MTAxNjUwMDBFNkE0Nzc5NDE3RUM3NjJDN0QyM0U2NDNGMTM4QjRDQ0RFCis6MTAxNjYwMDAxRUE1NUUyMjY1RDFGNEM0NTYzN0YzMEYyQTRDNzRCRjExCis6MTAxNjcwMDA0MEVCQTUxNTYzRUE2MTVFMTU3NjlCMDQ3QzI3REE2RDY1Cis6MTAxNjgwMDBFMkVEMDQzRjhCNzg5NTlDRjhDRDE4QTAzRkM0MDdBM0VBCis6MTAxNjkwMDBBRDdGMUUzMTlFNTJDN0EzMzY4MUFDQTUzMDdDNzlBM0E1Cis6MTAxNkEwMDBGODJCQjFGMDc1RDBENDUyMEFGMzNBQjg1MDI2MERCNEU1Cis6MTAxNkIwMDA5RjkzRkVCMTY5MjRDQUZCMDJCRTA3N0M0M0U5QjIyQUFDCis6MTAxNkMwMDA4OThERDc0M0NGMjFEMUYxNzc3MDZEOEQ3N0IyQTk5N0VFCis6MTAxNkQwMDA5RTdERUEyQkUzQ0FDMTdFOTcwMzFFNTVFMzFFNzAzMzNECis6MTAxNkUwMDAzQjdGOEM0MzYyRjEyQjRFNUE2RjlFN0ZCRjkzOEMwNERECis6MTAxNkYwMDAzRDc1NkE0Q0QwMEU3MUIxRUU1RjM1MDBCRDdGNkNDNzkxCis6MTAxNzAwMDA3ODQ1NzlFNUU5MzEwRDIzNTVGODJDMjY2ODI0RTdFRDc1Cis6MTAxNzEwMDA3RUQwQTlEMEU3RTU0MzlCNTI4MkI2RDg3ODNDMDY3OEM0Cis6MTAxNzIwMDBBNDc4QkEwMzFFOENDMzc4Q0MxRkRDMTcxMDhGMjE3OUU0Cis6MTAxNzMwMDA2RUU0MzdCMjNCQ0UxQjg2NzhFNDVCQjIxN0ZDMDYxODJBCis6MTAxNzQwMDBENzhGRkE5M0M1OTM1NzM5RDlCQ0UyNzQ3RTVFNzk2MDFFCis6MTAxNzUwMDBCOTQ2QkYyNDQ0MjQxMjRBNTI5NThEQUQxODlGNEQ4ODM2Cis6MTAxNzYwMDAxOEYxQjk1RURFOUVEMkM5OUJDMDdGMkM3QTBBRkNFQkQxCis6MTAxNzcwMDA5RkZGOUVGM0U1QzFDQUM1MEFDNDBEQ0RGMUQxRkRFMEJFCis6MTAxNzgwMDBFQzI0NDlDMzU3NkZBRkY1NkJDNjdCRTc1QjU5QjM1RjdBCis6MTAxNzkwMDAxNkYwRUZCQ0ZGOTNGRTcxNjkxMEFGMkEzNzA3ODdGNjhBCis6MTAxN0EwMDA0N0NFMDU3RURFRkVFNjAxMjdGNDFCRjc5NTI1QUFGQzUxCis6MTAxN0IwMDA5REUyRjY4OURBRDNFNkVCMTQ5NTNEQkQ1MTZFMDJCQzhECis6MTAxN0MwMDAyNzE4Qjk3RUQzQzk5RDBGRUMyQUM1RTdFNTYwNTdFOTE0Cis6MTAxN0QwMDAxNDEzQ0U2MzU3RTc5MTYwM0JDNDkxRjVFMzBCN0JBQUVBCis6MTAxN0UwMDBFNzJGNjE1RkY1NzQxMzdDRTA0OUEyRjQ0QkU4QTU5RkY1Cis6MTAxN0YwMDA4ODFCQzY5MjJGMjE1NzlENUNGRUY1RjhEN0MzMUJDQ0UyCis6MTAxODAwMDA1QUJGNDdDMENGQjk5QzlERjRDNzkxMjBENThGMzc5NzU5Cis6MTAxODEwMDBDODIxMjIyMTdGQTA3RDNDNzhCRjg0RkU2NkI4RDI4Mjk5Cis6MTAxODIwMDA3NkI5QUEzMjBFRTNCMzU1MDUzMkQ2NTdERDI5QTNGREFBCis6MTAxODMwMDAwQzUzRkQ1MDRCRTdGMzQ3QUUyN0Y0RjFEOTEyMjI3OTUwCis6MTAxODQwMDAyN0FCRDYzRDYzNzQ5Q0E2N0NFM0MyN0JGRkI4MTZFMjRGCis6MTAxODUwMDBDQkM1MjYwNUM2REJBRkIwNzg3M0QwMjdBM0ZGNEFGQjA0Cis6MTAxODYwMDBGMDg2MjEzRTdEREY2NTVFQjA2NzgyMUZGNkZCNjQ5NEUzCis6MTAxODcwMDBCN0UwOUJCMjE3ODZFREUwRjFFOEZEQ0QwNTIxMTlFODUwCis6MTAxODgwMDAyQ0Y5N0JDNjUxMDY0M0ZGNTUwQUQwRTE1RENGMTYyN0UwCis6MTAxODkwMDBFOEJCQjg2RjFGMjgyQkMzRkRBMzVGMjk0MEJCNDk5RDQwCis6MTAxOEEwMDA1NTNBRUYzODJFQTc5M0QyOEJBRjA3M0JGRUMxNjYxMzk0Cis6MTAxOEIwMDA4MUI4RDEwN0FCNEZBMjNDNzdBRUFERjc0RTFFREExQjE1Cis6MTAxOEMwMDA1RjE2RjE2MTdEOUM1OTFGNUZFRTEzNTdENkM1OTMwNUQ2Cis6MTAxOEQwMDAzRkU4RjlBNDIyMDY3RjA4N0QxNThCM0ZBODFFQUI0QTdFCis6MTAxOEUwMDA0QUI5NzAzRDI2RjRDNzdCN0M5RDkzRDJCN0RDRDk0MEMyCis6MTAxOEYwMDBGMTkwQjA0MDQ2M0MwOEJFN0NGNzlCREIxRjAxM0QxQ0NECis6MTAxOTAwMDA0N0Y5NjMxREYwRjNCNzRGQkMwMkZCMTBCMjU4OEExQUI3Cis6MTAxOTEwMDA0N0RFREU2M0Y3Mjg1RDcyN0JFOTcyQTM3RjcxNEYxOUEyCis6MTAxOTIwMDBDNDdGNzZDRDhBOUUzMkFDNUY2RjU3NjJFQkI1NzNFQkE2Cis6MTAxOTMwMDBBRDYxNDkyQzVFQTFCNzNCN0E3OUY4NTdEQjlERjJDQUJECis6MTAxOTQwMDBGQjczRTFGREYyQ0E4NTIxODAxQkQzQUQzNUEwN0ZGNTg1Cis6MTAxOTUwMDA3QTQyNkYyN0M0N0NGNEYzNEM4OEM4MjQzNDRBM0Q2RjI0Cis6MTAxOTYwMDAwNURCRjVEQTA5MzNENjA3QUM4RTdDNzBENkNGQzQzMUVGCis6MTAxOTcwMDAxODA0MjcxMEZDRDJDMzcxQTE0NjFDQUZGRTkyMzI5QzAyCis6MTAxOTgwMDA3RkZENTg4MDAxRTJFRDBDQzJGQTNDRjExODNGNjhDOUI2Cis6MTAxOTkwMDA2NEVERTUyQkUyOTkzRjNFREE4REVCOTQ4NTQzN0VDQUY4Cis6MTAxOUEwMDA4NUU1NDZCRTg2NTE2RUZGNzM0OTE0QkY4RDNFNDMxQ0NDCis6MTAxOUIwMDA5QzJCNENCMjFCRjc0MkM4QTU2NUEyODE1ODQ4MkY5RUFDCis6MTAxOUMwMDA4NEZGNEUyMDMyNDBENzhCNzUxMkVDM0IwQkFDRTZDMTQ2Cis6MTAxOUQwMDBFODlGRkUxNkZBMjE2QkU4QkU5MEYyRkJCRTdERjJDRUM4Cis6MTAxOUUwMDA2RDc0ODlGQkJDQTMxMkEzRjlFNzAyQ0VGMUZDMTBGNURDCis6MTAxOUYwMDBDMkY1ODEyQTg0ODc3RUYwNEUzNkM4RUIyRDkyRkY1NUMyCis6MTAxQTAwMDA5MDgzOEVGMkFBM0JFMTVDQjg2RTk3OENFNzRBNzM2RUM2Cis6MTAxQTEwMDA3OTc3MThEQkE3NjlDRjI3NjU4NzM1MTdFMjI4OEQ1MkJDCis6MTAxQTIwMDBCQzE3RjQ4OEMwNjNCQkREOENGQUE1RjExMEQzODM4RDlECis6MTAxQTMwMDA0NzI0NUU2NkZCODg5Nzc5RkRDOUY3RURCOENGMTA3ODJCCis6MTAxQTQwMDBBN0VCNzkwQkM2RjdEREVCQzJGNTg4N0RDNjc3NTg0RjVCCis6MTAxQTUwMDAyN0UwMjdGNjdBMzI5REE4MkY4MEFGRTRERUY5Q0I3NjE3Cis6MTAxQTYwMDAyM0FFQUI4QkM0N0I2MUZFMDExRTBGMjJFRkM3QTFERjRCCis6MTAxQTcwMDAyQ0U4NUJDN0Y5NEZEMDc3MzlBNzZGNTdEQkU5OUY1QzNDCis6MTAxQTgwMDA0QURCQjdGOERDNzhDQTIwNjcxMTVDNkZEN0ZCMDlDODVFCis6MTAxQTkwMDAxRjYyQkQ5NDBGNEVDMUZDNzZCNzMxM0JEMTcyRDhDRUQ4Cis6MTAxQUEwMDBGMDY1MkZDQTg1RjkwOUZGREE5OUM0RkM2NEZEQkEyQkU5Cis6MTAxQUIwMDBDNDNFOURGQjE5RTBERjQyOUM2MjkxN0JFMkQ5QTQzMUQ4Cis6MTAxQUMwMDA1MURBNzNCRjk2RTJEOTkwNENFQjRCOUNFNDU0ODhGNDA2Cis6MTAxQUQwMDBFMjU5OEMyM0M2MTVFRjM5OTJCNTdFNEMwNThGMkJCQzhECis6MTAxQUUwMDA2RjIyRTUxMDRGODQ3MTBCNTVGMzVCRTMyRTcxMjRBNzMxCis6MTAxQUYwMDBGNDFERjczQkQwNzE0MEYyMzlGOTUyNEJDNzNBQTNBRDEwCis6MTAxQjAwMDA1OTRBMjQzREZCNjIwQ0E1Mjk3REU1NUMyRjY3NTI1Qjk5Cis6MTAxQjEwMDBGQjU3NzAzRUFGOTdGRjMzODY3QTIyRDE3RTZGOTVGRERCCis6MTAxQjIwMDAwN0REMTQzNkZBNDlBNzY1NzA1Rjc5Mzg5RjFFQTFGNDY2Cis6MTAxQjMwMDAyRTQ4NEVFOUFCNEZGQTRCRTcwOUM5NTJDRjNFODZEMzQ4Cis6MTAxQjQwMDA3OTQyNzIxNEJEMjdGMDNEREM1REY2M0RBODg3RjU2NzRDCis6MTAxQjUwMDAxNEUyM0VDRjA3NzQwNzNENjExRTg0RTMyMTVGNzZCQjJDCis6MTAxQjYwMDA0OEU4NTFEQTI4ODlDNzUxQzQ3QzIwMkUxMTQ3REY5QkYxCis6MTAxQjcwMDA5OTlDODNFMzRBNDYxMjM0RDE3MjUyQUU1NzAyQkRERkJDCis6MTAxQjgwMDAwRjNFOThGOTJGRTY4MzlCOTJDRjI5Q0Y2MUY0NEI5NkI1Cis6MTAxQjkwMDA3MTdBMkYxMzc5MTYzQkNGOUQ2N0QxMEZCQUQ1QzAzQTEyCis6MTAxQkEwMDBDRTE4QkNEREZFOUMwQkE3REJDREM5N0RFNEYzRTZFNERCCis6MTAxQkIwMDA3M0M4RTc3MEI3RkYxNjE4QUZEMTRDNEVBMTFGNUU1QzFCCis6MTAxQkMwMDBFOTgxRjEwRTM4N0M5RjI0RDJFNzJGMzY3MDdEOTI0MzU1Cis6MTAxQkQwMDBFOTQ2RUI1RjQ5OTY1MTVGREQ0MzJFNDYzREZDM0Q4MzcwCis6MTAxQkUwMDAwMUU3REY0NUY1RUZBMzM5RDFGODNFNjg3NEQzRjdDRkFECis6MTAxQkYwMDA1QzRERjAzQzhFQUU2RjNERTNDQkEwMDRDRjZGOUQ0N0I0Cis6MTAxQzAwMDAwQ0YwRENBMzM0MTBDMzA1RThBMTk2QkVGQ0Q5NzIyRUZCCis6MTAxQzEwMDBGRUE0N0FFODVFQThBN0ZDQjgwQUY4RDFBQTM4OERFNzM2Cis6MTAxQzIwMDBEMjQzM0Y0QkQ2REFGOTdFRjBERkNGRDQ3OEZFMTdGMEZGCis6MTAxQzMwMDBERjJGQ0ZDRDdGMTdDQzU3Q0Y0NUQzMDc4MjhGQzVCRUJGCis6MTAxQzQwMDAyMDU2QkUxMDk1NDc5MkUxRUUzQjJFMjE1RTNDMEYyQkI1Cis6MTAxQzUwMDA3MTU4OTlEREREMjFBMTlENkQzQzUyRTBDN0IyREQ4QTRFCis6MTAxQzYwMDA0QTQxRDhFMTEzM0I1OUJEM0MzMUJBM0ZEODk2RUM2NkE2Cis6MTAxQzcwMDA3OTA2QUQyQkJDNDY0RDFFNDgxMDlGREZFNTNCRTExQ0FECis6MTAxQzgwMDA0MkY1RTI1NEQ5ODZFQjRCMkE2NUYxNDNCMTdFQUE2NzRGCis6MTAxQzkwMDBBNzRGNDlFNTcxNTNCQTlFQTQyQzg2ODcyNEVBMEZDMDRBCis6MTAxQ0EwMDAzOTlBODNFRjBGMTI4QjhEMUFCRjVGRTBFRDU2Qjk0QzU2Cis6MTAxQ0IwMDA4MkI4QjcyQjk5NDBEQTBERjVFQjU3MEY4N0YzN0I5Nzc2Cis6MTAxQ0MwMDA0RkRCM0U4NTZDRkU1MkM2NDEwOENBODM5QkRBNkY4OEEzCis6MTAxQ0QwMDA2MzI1NEREM0I1ODM3RDQ4M0VCNDU3M0RDRkU5QkI5RkM3Cis6MTAxQ0UwMDBGODM4OTlFRjI3Q0NDNDAzNzY4NUM4MTVFN0U0MUJENUVGCis6MTAxQ0YwMDA3RUUyRjNFNDdFQzQ0NTRFMjYxQkY4Nzk4QUQ2N0VCNTkzCis6MTAxRDAwMDBDNjkxQTg3MTgxODYxNEJFMkYzOEU1NDJGRjU3RTY3NjRBCis6MTAxRDEwMDA2QjcyNjcwRUU2QTdBQ0I0MkIxODJGOTA2NUFGNzU3QTdGCis6MTAxRDIwMDA0RURGRjc1RDNFMDM1MTU0RUI0QjlBMTY0RjE0RDVGRTMwCis6MTAxRDMwMDAyMUE1Q0NBRDI5QTc5NUE3NkJEQTBGRjAwRkQyRDQ2N0Y4Cis6MTAxRDQwMDBENDVDQUNBOUNGQUEyRkQ0OTQwNzA2QzY2QkRBRTc1MEFGCis6MTAxRDUwMDAwMTUwOTcwNzM3NUZBOTY5M0ZCNEU1NkE0RDc5Rjg5NjU2Cis6MTAxRDYwMDA5QjM0RUQyRjBBQ0REN0Q0OEY3ODcyODlBNjdFNjRFQjkxCis6MTAxRDcwMDA0QTRERjk5MjVEM0ZEMkI0NkZFNDcxNUYzRDVFMjY3M0M4Cis6MTAxRDgwMDBCQzM2MUE5OURFNjlCMDE1NjIzQ0IyRDFBNjhENDc2NkExCis6MTAxRDkwMDBGMzc2MjU4OTEzNzIyMTBFREVGODYxNDEyRUUwRkI2NTkyCis6MTAxREEwMDBDNzc4OEM4QkM3RTIwQkJEMUU4QkE1M0ZGNUNGMkY0QkExCis6MTAxREIwMDA2MUZBRUU4Qjk3Q0MwNjkwODNFNUJCQTlCQzVFNDJDQjYzCis6MTAxREMwMDBCNkY3MzZDMDlBOUFGM0Q4NzlBQTkxQjBGQzFFNzFCRUM0Cis6MTAxREQwMDAyMkRFRUYzOTVGMzE3QTU5N0NENTYxMjM5QkEyRjA0NTMxCis6MTAxREUwMDA3NjhBMTIzNUZFMjlGODI4MTZERTFBRkE4OUI3Mjk3Qzc4Cis6MTAxREYwMDAxRERGMTU2RkVGNEIyQzNGNTVBREZGNzc0NDk5RDc5QUY4Cis6MTAxRTAwMDAxNDE2REZBMkY2NjU1RTBBRjM3NzQ2QzdBMzI3RUU0NEYxCis6MTAxRTEwMDA3OUJDNTBGRDJGRTY0MUY1RkY5MjE0RjQ0M0RGOTg3MzJGCis6MTAxRTIwMDAyQkU4RkY5RDE2MkZFQ0M5QkUyODdGQTNGQTAxMDVEQTI3Cis6MTAxRTMwMDA1N0IzRjYwNjZGMkVEMDI1NTZGQzdCNEQ0QTlGRjg3Nzk4Cis6MTAxRTQwMDAwRDhCN0ZDNzZCRjA1NjJCRTQ1RDE3ODc2Qjc0N0M4RDExCis6MTAxRTUwMDBGMUVGNDZCMzM3QjczRkYxRUY1QUQwMzEyOTQwMDdDNjBCCis6MTAxRTYwMDAxRjNERjRFNUYxRjM1OEZCQTAwMDIxN0IyNUQ4RjdEOEZFCis6MTAxRTcwMDA4QzBBOUM3MzlENkY1RjRCRjdCM0I5NzA5RURBMDJGQkJGCis6MTAxRTgwMDAyNkQ1M0U4N0VFNkZGOUZFMjYwRUVEMDJCNTdCRjdBNjRFCis6MTAxRTkwMDBBMERFMjM3QjE1RkFGQzBDRERGNzZFNTJBMDI4RUM5RjI4Cis6MTAxRUEwMDA0RkUzOTc1Qjg4RDc2QTk2OTE5RTBGQTZFMDdFOTdBQzJBCis6MTAxRUIwMDA4QTkzMjE1RTE2REUzNzIxRTczQkQ5RjNFRDI5MTc2MEJGCis6MTAxRUMwMDBDRkM5RjlDRkU1RDBFRTk0RDJGNUFGOEJFMjc3RTlDRjY5Cis6MTAxRUQwMDBFMTdBRkM2RkYwRDMyNDNDOEY0MzNDQURBNzc2MTFDRTYyCis6MTAxRUUwMDBFM0RBNTM5ODdENUU3Rjg4RUQ5M0Q3MUY5OUU1NDFCOTdBCis6MTAxRUYwMDA0OTI5M0FFNzM5NUM3RkY1Q0RBQjI5N0RGQ0QyNTc1M0IwCis6MTAxRjAwMDBDRUUxOTc4QUY1QUZFNEZCREUyOTcyNUUyQkM0MUI0RjRFCis6MTAxRjEwMDA0NENDODgzNzk5QjBGQ0M4QkEzRDI2MTI0MjdBQjIzQzBDCis6MTAxRjIwMDA2MzQxNDc1MzY0NDMwN0Q4NjcxM0QxRTcxNTJCODlCMDQyCis6MTAxRjMwMDA2RUQzMUUxOUY1MTM0OTY2RjU0MTYyNkQwMDNGMjdCMTU2Cis6MTAxRjQwMDA1ODZCQjc1QzNFQURERDRBOUFFNkQ2RDkzMUFEREQ0QTc1Cis6MTAxRjUwMDAyQkQ3REFBRDAxN0VBREREQ0FBODI5RDREOTMxQUREREVDCis6MTAxRjYwMDAxQTE4OThBOEIzNjM1QUJCMzVCOEY5NkE5RDFERDNEQTFECis6MTAxRjcwMDBBREUxNUJCNDc2RUJBMjkwRDY2RThENzg3MkE1Q0U4RTc1Cis6MTAxRjgwMDA2OUVERDYyNUJCRDY2OUVBMEJDMjlCMzRGNUEzRjZEQzE2Cis6MTAxRjkwMDBBMzI5OEZFOUY4MEY0REZCNDU3QjlGQzNGQzlCQjEwNzNECis6MTAxRkEwMDAxRkQ1QjQxQkQ3Rjk0QjREM0I4QUYwMEVDOEQzNUU4MENBCis6MTAxRkIwMDAyNDIxRTREMjYzQ0Y2QUVBMTc3MDNGRURCMkVFREY2ODA2Cis6MTAxRkMwMDBGQTIxMkQyQ0RGM0E0OEZGMDM3QUZEOTVGOENERTA5Q0VECis6MTAxRkQwMDAxODQ5RjdBQjE5OTRBRUNCNDM5MjM3NEM5QjJEREVCNTI1Cis6MTAxRkUwMDBBMzA4RTZGMUQ5RTEyQkY2NDAzRjhCQjY2OEYzQjQxN0FFCis6MTAxRkYwMDA4N0I0RTUzQTMyMjgxMUY0NDMxREU1OEIxMEU1OTNBNTJCCis6MTAyMDAwMDA5MEJGQUREMjZCNEI0OUJEMDNGMzIxRkFDOTY3OEJGNjg0Cis6MTAyMDEwMDA1RTQzMzBFRjMzRThFQjgwRkM3NEIxNEVDMTZGM0VDRUNGCis6MTAyMDIwMDA2RjYyN0U2MkJENEJBOURGMTc1NjdBRDdFOUEzRkZCMTc1Cis6MTAyMDMwMDA3RDY0QTcxOUY4QjY3QTk3NDRGRTQzRUFCQjlFOUFCNjI4Cis6MTAyMDQwMDBCQjM3NjQ0NDU5OTc3RTFEN0FCRjczNENBQTM2OEUzREM4Cis6MTAyMDUwMDA0NUI2NjE1Q0ZGQzQ5QkIyOTdDNTA3QjU3MkI4NzIyRkQ1Cis6MTAyMDYwMDA4QkU3QUY3QzVBQzJGODlBMUUxRkMyMkY4RDg1MTczOTk1Cis6MTAyMDcwMDBDOEY2MDk3NUM5MjQxNDUyQzk5RkMyRjE2MUYxNjhFNTE3Cis6MTAyMDgwMDBFRjA0RkMwM0U2RjNCMDFDODJCQ0EwMzgyNTVFQ0Y2RkUyCis6MTAyMDkwMDA0NTYxRDIxN0NGMDlCOTVBMzlENUUzRDlFRTREOEZDQTY4Cis6MTAyMEEwMDA1NzBBRkQwRkU2NTE0REQ4Qjk5NDlFQUZGNDc4NUZCRTQ0Cis6MTAyMEIwMDBFQjZFMzNFOEM1MEJDNUZCODI1NEVERjlBMDM4M0YyODIxCis6MTAyMEMwMDBBMUFCMzU0N0M5ODMxMzc4QTVGQkYyMjVBOTI5QjFGNzQwCis6MTAyMEQwMDBBREI3QTQ1RUYwQkVGNTk2RDQ3RkVEQkVCNTIxRjUxQzdDCis6MTAyMEUwMDBGMUIzMkU4ODk3NTFCRjUyMUYyRkVCMUIxRkRCRkQ5NUJECis6MTAyMEYwMDBFNEMwMzgzNDhCN0ZGOUJENTY5NkFGQTJCMzkzQjkxRUI2Cis6MTAyMTAwMDA4RDlERUNEOUY3N0UyODg1MUE2OUU3RjUwRTVGMEJBQzNCCis6MTAyMTEwMDA2Rjg1QzM3NzM3QzA5OTBFREYzREE5MkFGQzM0NTJCQ0M2Cis6MTAyMTIwMDBFMEZEMUM2QUE3NzY0NEYxMEZGN0E1MEFCRkE4MENFM0VGCis6MTAyMTMwMDAyMkVCNEI1ODdCN0RCQjVGQTdCMkZCNDBFRDI5NDUxRUQwCis6MTAyMTQwMDBGNDNCOEYxNDMwRkI2OTJGM0FBN0RGNzkxNzNGQ0ZCOUUzCis6MTAyMTUwMDAwM0NFMEI4N0Y2RTZGMURDQzlDRjU1QThEOEY5ODA2RTFGCis6MTAyMTYwMDBFQjRENjUxRTc1OUVFRjgzQTkyRTFDQ0YzMUVFRDkwRTY3Cis6MTAyMTcwMDBDODc3NkU3NDFBOUM5MjAyRkVCMzAxQ0Y0NTlCN0NCNjYxCis6MTAyMTgwMDA2OTNCRjNEODdCQzk5QUY3RDhCRDIzMTlGMDBERkVCQzgzCis6MTAyMTkwMDBDREY4QjU5QTZGRjc1MTVDNDJCRkIxRDZCOTJGOTVGOTFBCis6MTAyMUEwMDBCQjI2RTJCMzgyREUxNUU3QjlBNjBGMEJBQ0EwNkY4RDlDCis6MTAyMUIwMDA5MkQ3MTkyRDhGRDNDNEYzQTQyNkYyRjM1Q0Q5QzlDRURDCis6MTAyMUMwMDA3NzdCRTRGQzNDNzk1MjM3M0JGQ0FGQTlGOTU0OUNFQjlDCis6MTAyMUQwMDBDRTc2RjhGNkMxRjM4MDMxNjgwMUZGMzI2MDhEQkVGRjI0Cis6MTAyMUUwMDBGRDEzQTdFMzVEQjAzRUE0QTcwREY5MDhDNzk3RkIxNTQzCis6MTAyMUYwMDAzRkY5NzMyQUM2RTU4Mjk4QUY3OEFCRUMzRDA2RjFCOTlBCis6MTAyMjAwMDBGRUM2QUIzRTRFRUQxM0FGRkE1OENEODc3QUY5QTNGRTZBCis6MTAyMjEwMDBFNzI3ODk5MDg3OTc5ODZFQzRFRDg0RDE5QjBCRkNERkVDCis6MTAyMjIwMDAwQ0ZGMUU4N0YxRDVDRjYxREQ3REYyNEYxNTM3Q0ZBN0FCCis6MTAyMjMwMDA1NUNFOTk0RjJCRkEyOTc3Rjk0RUE1QjJCQ0JGQkZBNTUxCis6MTAyMjQwMDBCMkJDQkYyNjU5RDU4RkUzM0NGRDUwM0NFNUQ2REJGQTQ2Cis6MTAyMjUwMDA4NTNGMzk2RDBDQzYzNThGQjE2MEMyODVDNTM1MUQ2OUE2Cis6MTAyMjYwMDA3REZDNDc0N0RBMzlGQ0M3MzM4Nzg2MjdDMjc5QjI4OEI1Cis6MTAyMjcwMDA1QkU5REI1OTAzNDk5OUVBRkIzMUNEMkVFREY4MUIwQUU2Cis6MTAyMjgwMDA1OTc5MDAxRjc3NzkyMkUzRkI5MTY5OEM4RTIyMEY1MEQ4Cis6MTAyMjkwMDBDNEFEQUREMzg5MEZFRTNCRENDM0YzQjM0NTNGMjNEM0NECis6MTAyMkEwMDBFQ0Q4M0VENTNENzE2NDVBMEE5Q0E3NDlCOEFGRENFMDMyCis6MTAyMkIwMDA5MjM0RkJDQjRGNTI0QjQ2QzI3QTg2RjNGRTQ3QTYzMThGCis6MTAyMkMwMDAzRUREMzY4OEM1NjdGNDc5OTAyNzc4RkIxM0E5MTMxMTkyCis6MTAyMkQwMDA1MjgyNUQwNEY4MzRDQjcyNTQzQzE2QTZCMUY5N0Y5MjU5Cis6MTAyMkUwMDBDOEU0NUJDNENGQUFFRTY3RjdCQjQ0REM0Q0M0MDEwOTY5Cis6MTAyMkYwMDBGMUJFOUQ0MEY1Q0E0NzlCNEQwNEUyNUEwQjY1REIwNkQzCis6MTAyMzAwMDBFMEMzOUVGQjczRkM1Q0RENDlGRjAzN0I1OTk5NTc4NjU0Cis6MTAyMzEwMDBGOTQ3REZGNUZFMTZFMDMzQzFEREQ3NUU1RTk5RDZFM0ZGCis6MTAyMzIwMDBBNzc4MkZGMDFFRDdBQ0I0MEIzODZGRUY4QzY3N0NEQjJGCis6MTAyMzMwMDA2REI3NjEzQzVCREY2RTI5RTc4N0NEM0M0RTAxRkExQTMxCis6MTAyMzQwMDBFQzg2NUIyNkY1RDFFQ0M3NTI4RUY3MzM4NzJDM0VGNDMyCis6MTAyMzUwMDA2M0E2QzU2MzNFODczOEZGMzA1MkZFNEM3NDYzMUE3ODFCCis6MTAyMzYwMDAxMEEwMzU5MDkxMDlGNzg5N0FDRTNGMTQ4MkVGMjVEOUQ0Cis6MTAyMzcwMDA2Q0Y4OUU1MTIxNjEzQjVDMDkzNTdBMjVDODJGRUIzNEZFCis6MTAyMzgwMDA3N0FFNEY4M0Y5NUUyNjc5RTFGRTQwNUE4NUIzM0QyRDQ1Cis6MTAyMzkwMDAxOUVFMTEyQTI4NjYxQjcyODhBMzE4RUEwQjBDNThFRjU1Cis6MTAyM0EwMDBCQUQ2QjlDMTA0NzlENzBBODE5MzZDNjJBMkUzRDhFOTlECis6MTAyM0IwMDAzOEY3QTZFNUIwNzUwNUFGNjk0RkEzRUQxMjk1NkUzMkZCCis6MTAyM0MwMDAyODBGRjQ4ODczQUEwN0U0Qjg5Q0U1QUZFQkQ3RDdDNDBECis6MTAyM0QwMDBGOUQ1QjY5RUVFMUIwMDFGNEFGNDNDRjBBNjM0ODNDODI0Cis6MTAyM0UwMDA5QjZGMDQ3RTJENTFDODRFNzYyRjhBRTVBMTQyOUEzNTA3Cis6MTAyM0YwMDBFNjBCN0E1OUJFNzQwMkU0MUIwRDY2N0EwNkVBN0ZFQUEwCis6MTAyNDAwMDA5QUI0MTFERTEzRjIyNTczN0MwM0RGQUJGM0UxRUZFNTQxCis6MTAyNDEwMDBFMzI0RTlFNDUzRTA5MzBFRDAwMEY5MTBDNkU5MDRGOThGCis6MTAyNDIwMDA3QTY2NDVGNEY5M0VDM0U5QkNDQTUxRjYyMEYwQ0ZDQzM4Cis6MTAyNDMwMDAwOTBEOThFNzRFQkUzOTdCNTYyRTAyQTc5N0M5MDk3RDM0Cis6MTAyNDQwMDA5RjQwMUMyMjJFOTlFOURGMzg0NTQxN0Q0QzlDMTJFNkM1Cis6MTAyNDUwMDA5OTVBMTU2RjBEOTRFMzZDRTM5RDMyRDgzRDBCM0YyRkQ1Cis6MTAyNDYwMDA1QzYwMjA0NjJBNkY5Mzc4M0ZCRTcyMjI3RDlDQ0JFMjRGCis6MTAyNDcwMDBBQzRDQkYxQUM5Qzc0MjJFNjQ4RTlDMjJCMDlGRUM4RjExCis6MTAyNDgwMDBGQTQ1OUIxM0U4N0EyNkQ5RjZFMTM5NjJEQzkwRkExMjE0Cis6MTAyNDkwMDBCODU3RjBDQTNDRDZDNzNEMzFGMkY2M0ZFMTdBQ0MyREIxCis6MTAyNEEwMDBGQjNEMDZGMEU5ODM3Rjc5RURFNTA5NDhFNzhCRTE4NjlFCis6MTAyNEIwMDBFNjFEQTZDRUQ3RjY1Q0M2RTNFNzk4MkZERUY5OUEyRjg1Cis6MTAyNEMwMDBFRjlGQ0YyRjdGMkRBREYzQjVBNkJDRUZDMkZGNUUwOTA2Cis6MTAyNEQwMDBGNEY4Mjc5NEIxNjBERTdBRkUxN0ZBRUNBMEVDM0Y3OEFFCis6MTAyNEUwMDAxQkM1RkY3NTk0QTkwMjg1MDA4REE0MDJFOUNERjI4NzcyCis6MTAyNEYwMDBBRUU1NzgwRTdFNERGMTZDRURDNUYzNzU2RDdCMTE3RjA5Cis6MTAyNTAwMDAwNzRENzRERTc0N0NEMzQ0ODY2QUQzOEYxMjc5M0U0NkJECis6MTAyNTEwMDAwOEM3QkRERURBMzIwNUZDOUIyRTczNzczRThDREJGNUY3Cis6MTAyNTIwMDBDMjNCNTk0MUFBNEYwRUZERjhBNDlENTBGRUZCQzBEOEY2Cis6MTAyNTMwMDA2RDg3RTdDNzU2QkY2MUY3NTFCQzFGNUEyREUzRkQzN0MyCis6MTAyNTQwMDBCQzk3QUNDQTA3RkE5Q0NCQ0I5NTlFQjJBM0MwNTdGM0ZECis6MTAyNTUwMDBENjdFNUJBNEY2QjM0OTIwMDVFREVFRTI5MDBDNzc3Q0M1Cis6MTAyNTYwMDA3QkY0REZEMjI3MTMzOEQzQjFGMkIyRDYyNDRENTlEODM5Cis6MTAyNTcwMDBFMzY1OTZFOEY3QzQwNzc5OTg1QzJDN0U2QTlCMTlGMkFDCis6MTAyNTgwMDBFMUFGRjRGOEZGMDZFMzFGRTNGOTA2Qzc3NkRBNzE3RkRGCis6MTAyNTkwMDAyNUU2MzNGRkE5MDIzM0VDMjczRjY4QjM5MDMwRjBCRDQ2Cis6MTAyNUEwMDBCMUMzNDQzMDRFRTU5QjJFNTFCRUY1NzMzRUQ0Q0ZGM0ZDCis6MTAyNUIwMDBENTE3MTNCMEJGODVGN0NCMTg0N0FBQTQ2MzA1Mjg1RUNCCis6MTAyNUMwMDBGRDZEOEJEOUZFNTZCNzhFODU4Nzk0QTlBMEFGMTY2RTg4Cis6MTAyNUQwMDA5NDQ4NTA2MUVENTc1M0JBRjkwM0I3RTNGOThBN0U5REU5Cis6MTAyNUUwMDA3QUZCNzI5QUFDMzY4MzFFRDFEQjk3MDVDNERCM0MwMUMzCis6MTAyNUYwMDBFQzU2OEJGNkY5QTJCNjNCQjBERjQ1RTczOThGRjE3OEEwCis6MTAyNjAwMDBGOEZFQUM4ODhDM0QzQjE4RTJDQzgzMzA1RjMwOTZCRDQxCis6MTAyNjEwMDAzOUI2OTYwOUU1QTc2QkFEMDg4RkFGNzUyMjNDMEFDQTlCCis6MTAyNjIwMDA5NEUyNzlFOUFFRjY1NzMzNTBBQzNCOEFDMDBFQzVFRDYzCis6MTAyNjMwMDA5RDY0QkQ4OUY0RkFDRkM2NkRENzg0MUY1MjgwMkZCNTMzCis6MTAyNjQwMDBGOTkwMTUxQ0NGQzI3RjVFQzRFRjE5OUNDRjdGQUU4MDdFCis6MTAyNjUwMDA3NTlFMjMxRkIyQTI5RkY5OTAyN0Y2OENCMkMyRjNGMUE4Cis6MTAyNjYwMDAwMjFGNjMyOTNFRDBGRUU2MUQ1MEM4RjlFRDZGMkNCQzU5Cis6MTAyNjcwMDBDNDdBNkYxOTdDRTcyMDBBOUU4NURDMUNFNUZBN0RDMUNGCis6MTAyNjgwMDBGNjU5MUJEMkU5MDQxQTVGRjg2Qjc2MjdGMjI1OEI0M0MzCis6MTAyNjkwMDA4ODczMkFEOUIzQTEwM0Q2MkYxMzVERkMyRjQ4REUyNEZCCis6MTAyNkEwMDAyQUZFRDVGM0U3MjJFMjY1NzZDN0M2REVCM0YyQjg0NDY4Cis6MTAyNkIwMDAwRjVGQjZERDg5NzgxNTdDMDQzNzBBMEMxRTgwNjE4RkE4Cis6MTAyNkMwMDBBMUI4RUY3NzAzRkE3QzFGQTA0NTVCRkVDMkQ0OTkwRDM5Cis6MTAyNkQwMDA3QTYzOTEyRTVFRjA4NTE0N0RGRjM1REQzMzg4QUQ1RjIyCis6MTAyNkUwMDBGMTREODVCQzg4ODVBNDZDMDM4QkFCQjdBMDlFM0E2NjgwCis6MTAyNkYwMDA2Qzc5RjUzNjkwRTdFRDRDOUU5NjNERkZGNEFGNDE0Rjc3Cis6MTAyNzAwMDAyREY5QUZGQjFEQTBBNzNFMzFCNkE0QzI3OEI1OEZBRjlGCis6MTAyNzEwMDA3NzgwNUUzRjY2MEMzQUUwRkQ0RjQyNzJENEZCQkE0RkMxCis6MTAyNzIwMDA3ODdBQ0UwNTZDOTAxN0I2MUM1OTBDMDQyQzM4MDNGNDNCCis6MTAyNzMwMDBFNERGMUUzNzM5MjE4RTVBRjdBNDI1NkNBMUY4NThCRTY0Cis6MTAyNzQwMDA5M0UxOTE5NjhGQjBGMkVEODhBRkJBNUQ1QTM5NUNGMkExCis6MTAyNzUwMDBDNEZEQTkwQUVFRTc4MzE5MUM3RjE5QTBBQTk3NkYzNzU5Cis6MTAyNzYwMDA2MUZFRThGMjM3NjUyRjBDNTM0N0JBNzE3REZBRjc2MUM1Cis6MTAyNzcwMDAxRTExNEFCN0JBNTZCOUQyOUNEOEI3OUU3QTNDNjY5MDE5Cis6MTAyNzgwMDBCM0JBOUQ4QzRFNzUzQTNGQjM4NkVCNjUzREJGM0ZFMEQzCis6MTAyNzkwMDBFMTdFMjZFNzczOEExNzhDODc4OTdDNTYxMjYyRkFCOTI0Cis6MTAyN0EwMDBGMTE3MEZFNDFGQTFGMzNBQkVGRDM1ODc5NEQ3Q0JFRkE1Cis6MTAyN0IwMDAwNEIyMkVDMTJGNkZBRDlBMDc3OTA2QjFGOEZDMEIyRTJCCis6MTAyN0MwMDAxNzNEN0E5RkRCMTk2NTE3OUQxOEY4RkU2RDBDRDY5QTk4Cis6MTAyN0QwMDBDMjhFNEIyOTNFNkFCNzk5QkM0MUZBQjhGNjY5RDk2N0VGCis6MTAyN0UwMDAwMzNGRTk1RDBCN0VERjYxRTlEM0FGQkMzRDlFQ0U2RjU5Cis6MTAyN0YwMDBFOTBFNTNGMjc0QjYwQzFCRTg2NzQxQTczQUUwRUZDMjRBCis6MTAyODAwMDA1RUJBMkM3OUVFMTUzM0U0NDFDMkYzRDVFRTVFRkEyQ0I0Cis6MTAyODEwMDBEREQxNkU4NkJDNEEzRDFFMjdCNUI2OUI5OTdDRTlFOEEyCis6MTAyODIwMDBENDdBNjQyQUQ4RTVDNjVGOUMzMTAzMUY3Q0YyQTI0NEE3Cis6MTAyODMwMDBDMDg1RDRCRjVGQjNFRDE1MDdFODBGQzAxM0Q4MEY0MUIzCis6MTAyODQwMDBBRjFFRkFGNUExNUI3OEM2NkY0NjYzM0IyNzlDRDNDNEU1Cis6MTAyODUwMDBBMjVGMDBFNjMyMDZGOUZCOTlERkQwRjE2QkRFQjM3OEI4Cis6MTAyODYwMDA2MUZEMzVDRkRDRUM4MDc1RkNENTU4Q0ZGOEZDOTFGNUQ3Cis6MTAyODcwMDBBOTYwOEY2QjRDQzE1NDI3NDJGNkJDNjZFQjBGOTBGRkVBCis6MTAyODgwMDAxNkJERkU4MzU0ODI3QUQzMzcwMEU0OTdBRTczMDBBQzUyCis6MTAyODkwMDA2RkUxQzNEN0UxRkFBQTg5MUZGOUFGRTYxMUI5MENGQ0MxCis6MTAyOEEwMDBDNEQzNDYzMjJEOUE5RkFGMEM2MEZBRTlBRjhGNUE3MEFECis6MTAyOEIwMDA1M0YwNTczMzYxREZFMUY4OTNDQ0YyRjhDODBBRjQ0M0UwCis6MTAyOEMwMDA3RUMwRDc0QTM1MzE5NjRGNUIxOTlENEU3OUM0RkQ3NTUwCis6MTAyOEQwMDBBNkM3RUE3OEFCQkFFREI3QTMxRUZCMzRDQjk3MDZGMkQ2Cis6MTAyOEUwMDA0RUYxQTA4REE3QkUzRTI1OERFQjNGRkM1RTBBQkU0Nzk0Cis6MTAyOEYwMDBGOTZFMTIzQzg3RjYxRDI2NUY1Q0JFRTYzRDlFRDdDQTg4Cis6MTAyOTAwMDBDNjVGQzVDN0E3RjM4RTg3QjhEQzVGNTNCNUZCNTcwMTE5Cis6MTAyOTEwMDA2NzBDMTA3QTgwNzQxMDM1N0ZDNTkyRkJFRDFCOTFBRjY4Cis6MTAyOTIwMDA0RUJEQzlGNENBRjJEMEFDNjk1OERGNjEwQUE3NDE3RDM3Cis6MTAyOTMwMDBBOEZENUEwOUY1MDJGNTJGQTJDOUY1NzYxMzk3NkI2RDFDCis6MTAyOTQwMDAzRDlEQTc1MTUyRTNGNzQ1NzYyRkFFRkEzRURBNEVFNUFDCis6MTAyOTUwMDA4N0Y0RjI4REI5Rjc3OTRFQUY3QzhBRkM4QTQ1M0FGRjRECis6MTAyOTYwMDA0QzQwQkQ1RTQ4MUZBMEI1N0ZFMjdERjI3MDRBRDQ3QjJCCis6MTAyOTcwMDA1OEJERkEyMDg4N0M1MTZCMEFGREZDM0Y0MDhFREZCNUM0Cis6MTAyOTgwMDBFMDNEQzNEQUE3NERGOEJEOUNDRjlFREFGREY2NEQ5NDJECis6MTAyOTkwMDBERjNGNkIxNUYyQUJENUIzN0FGOUFENzlGNjNBMTI0RDRDCis6MTAyOUEwMDA3RTNGNEIyRTIzNTFFNTk3M0U4RjJBQkZDOTJDN0ZGRkQ4Cis6MTAyOUIwMDA3RjVCQ0YyRThBQTE2NzI3MEZEMEVBNTlFQTRGMjQ1RUFBCis6MTAyOUMwMDA0QThCOUZGRTcyRTk0MERDNjdFOUYwMkFGMEE5RDc5QkE5Cis6MTAyOUQwMDA4NzNDMEFFMjU3QUYzN0U5REY5QjQ0ODU0NzgxM0ZDMTE3Cis6MTAyOUUwMDA5NzRCRkU3MzE5OEVEM0MzQkY4MjNGMDVGRkY2RjBBNzQ2Cis6MTAyOUYwMDA3RUJENUEzQ0VBRUJFM0UwQ0U1MTRBMkZERDRERUJFOEQ5Cis6MTAyQTAwMDBGRTFBQ0U1RDVGOTBGMURDQjU0QkU5NzZCODIxMkVDQjk2Cis6MTAyQTEwMDBGMzZFQkE5Q0JDRUM2MkU1RUUxNEYzMDZEMDFGRTI3OUNCCis6MTAyQTIwMDA3NzFDQ0I0M0U4MkFFQjc2Qjg1NDdFRkQ5MTM2RDkwMTZBCis6MTAyQTMwMDA3OUY1OURBMUU4RjkxMjk4NDk5MTAyQjc0NDYzRDUzNzE5Cis6MTAyQTQwMDBGMEVGRDZEOEIyMDNCMDJGNkI2MUU3M0QwQjFBNkU3MDcyCis6MTAyQTUwMDA4MDNGRERENTM2Nzg2NjM5RjhGMTdCNjVGNEE5QkFFMkI2Cis6MTAyQTYwMDA3OTdFNTVEMDY3MUM0MEYxNUFDNTk2NEM4RTkxRTA0RjQ3Cis6MTAyQTcwMDBDMUNGQUU2QTVCM0ExRDM2OEQwQjM2NkJGMTUxNkRCQjIzCis6MTAyQTgwMDAxNkNGQjNBQUVGMzNGNUYyMDUwMTdGMjc2NDA2M0ZBQkZCCis6MTAyQTkwMDBFNjYxRURGMzI1OTA1NzA1RjREMUYxOTExRkY4MjhDQUFFCis6MTAyQUEwMDAzRDhDM0IwNTFGMTU5MDAyQjY0RkU2RTc1NTVDQUY0REQ4Cis6MTAyQUIwMDA5MUYzNjY5NjQzRkVFMjFFNzY0RkUyNDQ5QjRDMzZDMDhECis6MTAyQUMwMDA3QTlGRTJFNzU3QzExNEU0Q0ZFNTk0OEZENTcxQ0VFMzQ2Cis6MTAyQUQwMDBDMDY3QzM2M0RCRUZFM0JGM0E1NDc0MUI2RDUyRkJFQjdCCis6MTAyQUUwMDAzRkU3M0Y0NEUxRjE1RkJGM0JFQ0I3NTA3RUZFOURFQzFBCis6MTAyQUYwMDAzRjkzQkVFRDI3QkRGOEQ1NUNDQ0EzN0NEMTQyNjA1RjhGCis6MTAyQjAwMDBENEY1RTJFRkIzNkY4M0YyNkYyQzVFOTg2N0Q3M0FCNkQ1Cis6MTAyQjEwMDAzRjBFQkU2ODQ3QkJERTk1QzVGQ0JGQzYxN0NFRTQ3NzQ3Cis6MTAyQjIwMDBBMjdENkE0MjdBRUQxQUMwRUVBOTlFNjhGQkZCNjEwOTlDCis6MTAyQjMwMDBGMkU5REFFOEFBQzBFRUYyN0Q1N0RENkZFMjcwN0ZEREUwCis6MTAyQjQwMDBGNUMyMTlDREJFRjJCQkFFNjczOUJGQUZENDY1MjdFNTdDCis6MTAyQjUwMDA3MEJGQjhDQkM1RUU3N0Q2RkQ3NkRDNjM3MDVGNzFEOUY4Cis6MTAyQjYwMDBDRTc2NzMxNUFEOUZGNEJCNkZGMzQxREY3NDNEQ0JGQ0E0Cis6MTAyQjcwMDAwOUVBREY2RTA1OTc3QUY3ODAwMzlCNEQxNENGNUY4MERCCis6MTAyQjgwMDBDRjk3NEVGNzFGRTk4OUE1NzAwRkEzMkY1RTE4MUVCQUM1Cis6MTAyQjkwMDAyODFFNjA1RDE0MkYzNUEwMjc2M0UxRTNCRDAxRUNGRTI0Cis6MTAyQkEwMDBDOEJGMUYzRUJFOUMwQkUzRDdCNjhEMjUxMDRGRUZDNUE3Cis6MTAyQkIwMDA4QkU0NjNDRkVEOTg3NzQxRDdDRjlFQkY3ODI2MUZGQzdCCis6MTAyQkMwMDBBM0YzQUQzN0YyRkZEOTdBNTNEM0ZGNUREN0NCRjg3REFFCis6MTAyQkQwMDBFQjAwNjY3RkY0N0NERjk3QUY5RkJGMDVDQkNGRDhCREZFCis6MTAyQkUwMDAzOERGN0VDQTdCNTFGQUJGQUJCQ0ZGRUZEMEZCREFGRjA4Cis6MTAyQkYwMDBCM0Y0REVDQkU5NkQ3N0MyNzk0QUQ3MEJERjY2OTMwQjZFCis6MTAyQzAwMDA1OEY3Q0RGRjQ3RDdEREUzRTcxOEJDRDZEMTc0N0VFRjg4Cis6MTAyQzEwMDA5MUQwNzUyNTUyRUMzQ0NFNTBCQTc2MUYzMTgzRkIxMTEyCis6MTAyQzIwMDAzMzkyQUJEMTdGOThFMTYzRjE5NTQ2NTJCODA3RUVBOTk0Cis6MTAyQzMwMDAwNTdEMzI5RTNCNjAzMjBEQzU0M0M3QjUwNTIxQ0NEQjE3Cis6MTAyQzQwMDAzMjA2ODdGRTE0RjJCOEFFNUZFNjY1REZGOUQyRUVBRjZBCis6MTAyQzUwMDA2NkE0NEU5QjA2RkVEQkZFMDYzQTJGREE2RUJGRERFMDcxCis6MTAyQzYwMDA2Q0E0NEI5OEU5OTNEMURGQTMxMEZEQkNCNzI2NUU4NTE5Cis6MTAyQzcwMDA3OTIxMzM4QkI1RkI4QzlCNzRGQjg2MUJDQUI1RjVEN0NBCis6MTAyQzgwMDA5MzQ3NTMyMEZGRUVGQTFBMTNFNjBCNURBNzZCQkYyNjlFCis6MTAyQzkwMDBERDg5RUJCQzgxRDRBRjY3RjE5OTBCQzM1MzQ3M0FEQkI1Cis6MTAyQ0EwMDA0RkY2QzVDM0I5RjFENjA3NEY3QzNGODlCOTNDNEE1RjlGCis6MTAyQ0IwMDBCQzU5RkM2QzdGNjlBMTE1RENERkUyNzk3MjJCRkI4NUM2Cis6MTAyQ0MwMDA0RkMyRjc5RDE2M0VCNEMwQUZDNUM3QkVEN0E5RUExNzFECis6MTAyQ0QwMDBGMTIyRjA3RUExRjgxNjc0RDJFMzVERTA1N0UwNEQ0RjhCCis6MTAyQ0UwMDA4N0M3RTA0QzQyRTU4RkY3NDI5MTQ3RTIyN0VBN0NDQjY5Cis6MTAyQ0YwMDAxOTNEN0VBMzBERjE3ODYwM0JCQkFGNzBBMEI4NkE3MzNECis6MTAyRDAwMDAwMTk0OUY5MkQwNUYzQjNENjExNEIxRDJGNUVFMzc5MUIzCis6MTAyRDEwMDA1REVDRkU5NzRGNzExNkY1RTZCMzQ4QzVCRkM3NzMwNTY2Cis6MTAyRDIwMDBDODI3NTRFRjRCMjE5RjUwQkQyRUM4Mjc1NDk3MjE5RjkxCis6MTAyRDMwMDA1MEREMUVGMjA5RDVGNTkwNEZBOEFFODc3QzQyNzUxOTdCCis6MTAyRDQwMDBGMjA5RDVFRDIxOUY1MDVEODY3QzQyNzU3QkM4Mjc1NEUyCis6MTAyRDUwMDA5NzIxOUY1MEREMUVGMjA5RDVGNTkwNEZBOEFFODc3Q0Q0Cis6MTAyRDYwMDA0Mjc1MTlGMjA5RDVFRDIxOUY1MDVEMEZGOTg0RUE3QTc5Cis6MTAyRDcwMDBDODI3NTQ5NzIxOUY1MEREMUVGMjA4RDVGNTkwNDdBODJCCis6MTAyRDgwMDBBRTg3QkM0MTc1MTlGMjA1RDVFRDJGOEZCQ0E0Mjk5N0VDCis6MTAyRDkwMDA5MEQ3MzRFRDI3NTlERkQwOTRBNzM4RkZBQzY5RkY3RDc5Cis6MTAyREEwMDBDRjQ3OUFGQTJCOTRDRjM0RjU4MkZFNTdFNTlFRDQzQzU4Cis6MTAyREIwMDA4NzMzOEI2MDExRUM2M0Q4NUZBOUY3RUY5QTdFOENBNDAwCis6MTAyREMwMDAwQ0UzQ0M2NjUyOEZEMDBBRjE1QjBBRTM0OTJCNDIxQjFECis6MTAyREQwMDAxNTczODA1NzBFRjM1RjlDMDFGQ0JBMzVCODAxOTg2QkYwCis6MTAyREUwMDBGRkI4MzNEOUEwRkYwRjRDQjg4NkM1MUZGODM5QzE0Q0M2Cis6MTAyREYwMDBGOEE3NDI5OTM4RTE5QjRDRDhENzhBNzM0RjQ3NDQyNkFECis6MTAyRTAwMDBFMTUxOTQwRjIzMTI0MjY3MjQ4MTg0OTMyODFGNDZFMkU0Cis6MTAyRTEwMDAxMEJBMjM0OUY4M0MyOUUyNDI5ODFDQzlDMEU3Mjk5MTFECis6MTAyRTIwMDAwMTA4NTMyMzgzMTFBNjQ1NzIxMDdBMjIyMzEwMEU4OEJECis6MTAyRTMwMDA1Qzg0MzAzRDMyMEFERkNCODgxNDIwQ0M4QzVDOEFDRjk2Cis6MTAyRTQwMDBCMzIyRTMxMDY2NDcyNkUxRjM4MTkxMTI4NDRBRTQyQTEzCis6MTAyRTUwMDA4NDM5OTEyQjEwMEU4QTVDODNFRDA2NDc2NjIxMUMxMjgzCis6MTAyRTYwMDA5OThEQ0Y4NzQ2NkU0NDM4MkM1Mjg1NzA3OEE0MTI2MUI0Cis6MTAyRTcwMDA2RTY0MjlDMjhCMjI4QjExNUUxQ0I5MTlERjFCMTE1OTlDCis6MTAyRTgwMDA4MTMwMkY3MjFCM0UxRjE5RjkyMUMyRkM0ODIzQzI0QjBGCis6MTAyRTkwMDAyMjBEMDhCRDkxM0JCMDVENDE2NDIzQzJDMkM4QkRGODlDCis6MTAyRUEwMDA3QzU0RTQ2RTg0QTMyMzBGRTFGMzMxOTEwNzExMTY0NTlFCis6MTAyRUIwMDAxRTQzMzgzNkIyMEQ2MTcxRTQzRjExOEU4QkZDMDJFMTg2Cis6MTAyRUMwMDBGOEM4NzNGOERFQTU5MTFEMDgyNzQ0N0U4QkNGMkY4QkExCis6MTAyRUQwMDBGQzM3QzJFRjQ1NzZFM0YzQ0IyM0VEMDg3RDkxRDdGMEM1Cis6MTAyRUUwMDA3OTQ5NjQyRkMyODk5MTM3RjBGOUE0QzhFQjA4Mjc0N0M0Cis6MTAyRUYwMDBGRThDQ0ZBNzQ0REU0NTM4MzVGMjExQzJFRjQ3OEUyMDU1Cis6MTAyRjAwMDA5QzE2RjkwQ0UxMTU5MTRGMTA1RTE5Mzk4OUVGNUQxNThBCis6MTAyRjEwMDBGOTEyRTFGNEM4REZGMTc5NjlFNDJCODQzREZCRkQwOTg2Cis6MTAyRjIwMDBCMUVFMjVGQTBENjcyMUFFNjU3M0Y3RUIzQjVGODQ2QzVDCis6MTAyRjMwMDBEMTlDNEIzRDkwRTA0MDNEMzk3MzM1Q0IyM0Q5NTA3MjQ1Cis6MTAyRjQwMDA3MjMyRkFCNTJCMkMwQUZGQkVBNjRFQUY3RTYzMDNGRjhBCis6MTAyRjUwMDA2MTNERDQwQzYwN0Q0MDFFRTAxQ0NFQkYwNzhBNzdBNzgwCis6MTAyRjYwMDA4MEJGQjRBMUIwQjMxNkUyMjE3N0U2NzQ1NjAwQkMyRjNGCis6MTAyRjcwMDA4M0Y5MEQ3NzY0MzBCQjc4NEYwNjhCOTc1NjBFNzNCMjhBCis6MTAyRjgwMDA3QjA2MkI4NkUyRjkxNTQ5RUVERjNBREVFNEY2NTlCNDBBCis6MTAyRjkwMDBCRjM5OEI5NzZEREREOTc4MkZBMDlGRkRGNEI3RERGOTkwCis6MTAyRkEwMDBGMkEzN0U5OEUxN0YyMjAzRkQyMkZERkRCQzdFQkZGRkUwCis6MTAyRkIwMDA1RkE4MjdGRUY5Rjc5RjNGRDdGQjFGNzA3QUE1NjQ5NjlECis6MTAyRkMwMDBGRDE2RTc2OUY0RTU0M0ZEQzQ3NTAzRTQ2NERBNEZFNUYzCis6MTAyRkQwMDA2NkM5MDk3NkIyQUFBOTYwMkFEMEFGOTBGODMwOUUzOEE3Cis6MTAyRkUwMDAyNzQ2NUU1NzI3QTdERkZDN0ExMzgxQjhFMjdDODU2MDBECis6MTAyRkYwMDAzQzc3RkU0RTk2RTcwQjcxRDA1MkNBMTczNTlDMkY5NjQwCis6MTAzMDAwMDA2RERDNjEwNjE3QjRBNjdFMTFDQjNGMEFCMTM4OTM5NUVCCis6MTAzMDEwMDBGRTA3RkNCQzY0RjMyQ0NDM0Y1QUZBQTQzNkZFNTQwQkRBCis6MTAzMDIwMDA3MTFEMTlDRTkxQjVDRkVCNzg5Q0E5Q0ZCOTgyMkVCRTc4Cis6MTAzMDMwMDBGNDZFMDY4RjJGNzk1OURFMTE5MTMzNzFCREE3RTk3QUFECis6MTAzMDQwMDAyMTlGQzM3RjhCREQwQUZBOUZFMjAxQ0Y0OUM0RkE0NTc1Cis6MTAzMDUwMDBCQzUyRTA4MUY0QkRDRjgwNzlBMTI3RjYwQ0M1M0NCNTA4Cis6MTAzMDYwMDAxMzhBOTIwNkVERkM1NDlDM0E2QzkwRkZFMDFGMEJDRjQ0Cis6MTAzMDcwMDAyOUZFMzA5RkE0QkIyMTAxRjM5MThFNTA3REFFNDBFMjJBCis6MTAzMDgwMDA5M0QzM0YxNkJFOUZENkY5NUUxNkUxREY2RkQ0OUUxQjI5Cis6MTAzMDkwMDA1ODM3NjNGRTc1QTU4OTBFNENEQjU1M0U5RTg0RjcxRjlECis6MTAzMEEwMDA2OTdGRjlCQjIwMUVGOUI4MDlGMzgxODI2NEE1ODcxNEYyCis6MTAzMEIwMDBGNzNENTcyODVCNkY0MkZFOThCRkNCQzVGMkMzODJCRTc3Cis6MTAzMEMwMDAzNzIxNUY1RkQwRTM0OEQzRTBBOTkwNTczNEJGMzlBN0Q5Cis6MTAzMEQwMDAwMEMzNkVCQjRDRThFNzg5RjM1MjQxQTdCRTc5RDE2NUM2Cis6MTAzMEUwMDA4OUYwN0RDNDI1Q0RBRjIzM0QyOUJEMzRGNUI1OUJCRjA3Cis6MTAzMEYwMDBDNEZCMDM5NDVFNDc2M0QwRUJFOEI5RTg5NTk4QTlBNUIzCis6MTAzMTAwMDAxN0M0OTU2RjgwQ0FENTQ5MjhBNzE1RUJDMjQzRUI1NTY0Cis6MTAzMTEwMDBGQ0E4OEZEMzkzNEMxQkRFNzcxNEY5QzREM0QyMTkzRDhFCis6MTAzMTIwMDA4OEQxOUIwQTc0M0RCOTc5MENEMjRCNEZBNzY5RkZBODhGCis6MTAzMTMwMDA0MjdBOTBGN0VDRjhCREREMzk4M0M5QkNBQkU5RjM3OThECis6MTAzMTQwMDAzQzZFMzlBN0YxMEFGNDlGNzMzMzk5MUUzQkIwMTY3Mjk3Cis6MTAzMTUwMDAyRDA5Nzk3REFEOTVGOEE4RjNGQ0M2NUEyNzk2REY1QTVDCis6MTAzMTYwMDBFQkMxRjIzQjZCMTU4NEVGQUVDRDQ1NzhENENDRjI3OTUwCis6MTAzMTcwMDA4NDNDNTEwNkMwQkNCQUZDNEMyNjQ3Rjk5OTYyNUZCNTQ1Cis6MTAzMTgwMDBDQTAzNzFFOTY5RkY3ODYzOEMwMTU1QTM2N0M2OTQyQzYzCis6MTAzMTkwMDBGNEJCMzU3OTFBRTVENzZBRjMzMDNBNEQzQ0NGNkJBM0NGCis6MTAzMUEwMDBFNDg1RUZBOENDMkZCQjU0RDM5RUU0OEVFQTJEODNGRDlCCis6MTAzMUIwMDBFMDc5MjNGMzlCNURGOEZEQjYxQkE3Mjc2OURBNUZERjkzCis6MTAzMUMwMDA5Q0ExMjk0RkNENTQxMEJGQjNBNjBERDYzQ0JGQTk2MjE4Cis6MTAzMUQwMDA4NEE2NUNDOTdGMzc4MTU4RTMwREVBRjMyOUVBMTlCMTY3Cis6MTAzMUUwMDAzQzZGMjc2QjdCQUE3RTZDREFBRDc0RkM1M0ZCNEM1OEFBCis6MTAzMUYwMDBBRkE3Qzc1MTczMTBGN0UzQzE0NzJENUVCMDQzQzdFMEQ3Cis6MTAzMjAwMDAxRTE5MkQxRjdCNEI0NjdENzdDQzQ0ODI0RUFBQkE4RjY4Cis6MTAzMjEwMDA0OUE0MDkyMDMxMzI3OTNBN0Q5MEM5RDNCNDdGQzgwNERBCis6MTAzMjIwMDBGNkUxRTQ5NzE2M0NCRkFCREEyMjkxMjBEQ0ExRUFBNkQ2Cis6MTAzMjMwMDA5OEE3RTNBRUZBODUwNUQ3QkQ2MDhCNENGQzc4NUY0OTUzCis6MTAzMjQwMDA2OTg1NzNFQjU1OEYwRkY3QzJCOUU1OUNDMUUxMkNCOEM2Cis6MTAzMjUwMDBCN0Q3RkRBQjM4RUZBM0I0QjZBQTkzQkQ3RjhDRUVBRjYyCis6MTAzMjYwMDA1RDkwOTcyNDE1RTJGOUMxRTdBNTJERDUwNkM4Mzc5MEUyCis6MTAzMjcwMDBGN0E1ODA5QzdFRkVBQzhDRjE5NEM1MkJERTJBNzI4MjcxCis6MTAzMjgwMDA1RTdCQjVGNUVENjIzQUNFRDExNjE5QzdGREVDNDlDQkEwCis6MTAzMjkwMDAzNjE5RTVERDk3MDZERjc1RUQ1RDc3MDhFMzBDQUY3OTRDCis6MTAzMkEwMDBDQUVBMzIyOTFGN0M1QTFEQ0E0N0JEQjM5QUM1QjdGQjZCCis6MTAzMkIwMDBFMjg3QUUxN0U4MERGQ0FBRDI2M0JENzY4QjlEOTM1MUQxCis6MTAzMkMwMDBFNTMzMDBGNDQzOTVDOThCRTdBNjQ3Mzc5QkYwM0M4RjY1Cis6MTAzMkQwMDBFQTdGM0NGRjNGREE5MjY0NjBGQUU3NTlFNEJCRjk0NkMzCis6MTAzMkUwMDBDNUFDMUU3N0ZFNjZEOUM3N0UxNzQyMzFDMzdDQzlEREU3Cis6MTAzMkYwMDBCMjlGOEM4NTMyQ0I1NzA4MzY0QjdFNzY1RUEzQTVFRjA2Cis6MTAzMzAwMDBDRDJCQzZFMkZENjI3REZFOTQ4MDVGNTA5OUYyQUJDRTdDCis6MTAzMzEwMDA4MTk2QkNDMENFNjdDOUU4NEVBMzNBN0Y1Q0M0NTc4ODhCCis6MTAzMzIwMDA4N0Y1MkZCRUUzNTMzQkU4ODE5RjRDQTBGMDg0OEY3RDRGCis6MTAzMzMwMDA3MkYwRjQ3NjNCRUFDN0UzODY5NzhBNkVBNUYwQjNEMkMzCis6MTAzMzQwMDBFMEM3NDY0QTk3N0FEOUZGNTAyNkU0RUYxODM2NkY5NUMyCis6MTAzMzUwMDBGMDVDRTRBMzlGQzA3OUZDQTc0RjlCQkMyODg2M0M1RjMwCis6MTAzMzYwMDA2QkM5MkYxNzBGM0M1NzdFMTBDQzgwOUQyRjg3NTMyNTlDCis6MTAzMzcwMDAwRjdDOTU5NzYwRkVDNjZDRDJDQUUzMDMyMTc2RkUwRkUwCis6MTAzMzgwMDA5M0EwRjg3MUQ2QjI3M0FDOEZDNkQ4MzdDMTNEREMyQTkyCis6MTAzMzkwMDBEREJEREQ4RkY4QkQ4NTY3MzIyNThEN0QzRUNFQ0I1NUY5Cis6MTAzM0EwMDAwNjI2OUZFNDQ1RjZGRDQ1Qzg3QjE5QTJCMkE3NDI5RkI5Cis6MTAzM0IwMDBCRTkwQzlGMjQ5N0FFQzJBNjk0NUJENTJDREJGMEY1Qzc3Cis6MTAzM0MwMDBGQkE0ODVEREQzNTE4ODEzRTQ3MTMxMjMwRkY5MEFFNDlFCis6MTAzM0QwMDA5OUNFNzc4OUY5RTk5RjAyM0IyRjIyMUQ2OEU3M0UzNTk4Cis6MTAzM0UwMDA4NUFBM0I3MkUwRkQ2RDRENkU3Q0RGRTQwRDgxRkM3MkMxCis6MTAzM0YwMDAzQjYwQTU4QTAzRjRDNzIyQzJFNkI3QUM0NTBBODU1NUVGCis6MTAzNDAwMDA3MTBBRjE3QjFDMDRFQzgyNEFERkY0QjUwNzVBM0JCMDI5Cis6MTAzNDEwMDA5MERCQkI4NTQ0OTdFRkQzQTJCNTRCNjUwOTc2NUNEN0FCCis6MTAzNDIwMDA5MjE2OUVGN0RDMzMyRjk5OUNBNTM4QUJGNjg3NUU5REVDCis6MTAzNDMwMDA4MUYzOTZCQ0ExMjhGMzU4NDRCQUMzRjAxREUwNjU0RjUwCis6MTAzNDQwMDBCMUZCNDBGQTc5RTlEN0QxREY3OTU2N0I2NzREODZFRjNBCis6MTAzNDUwMDAwOUY3OENBQjlCQjdDMDM3ODEwQjRBMkEzQTA4QkM1Nzk3Cis6MTAzNDYwMDAwNzE5M0VBQkRCMjRBNEQ3NUZCODVGMjVFRUQ5MDlCQUI0Cis6MTAzNDcwMDAyRjIyNjUzMzQwQUYyREJBOEZFRTBCNzM3QUY5QTBDN0I4Cis6MTAzNDgwMDA1RUVGMDhBMUJGRjQxOTY5NzFEODI4RkZENzZFRDk3MTEyCis6MTAzNDkwMDBGRDM4NzhFRkUxRDdDREMwREYxNUVFRjA1MDgzOEJFRTJECis6MTAzNEEwMDAxNzgzM0ZGRUM5QjRBQzI4RjY1RDY3Q0ZGRjU1RjgyMUZFCis6MTAzNEIwMDAzQ0NFODRFRjUxN0MyQ0RDMkU2MzVFODNBQTFEM0ZERjYzCis6MTAzNEMwMDAwRjMyN0UwRTEyQ0MyM0FBNzk1M0Y2MzZEMkE3MzVGMEVFCis6MTAzNEQwMDA3MzNFODUxNzNFNUY4MTlGRkZFRDc5RUJGRDk4REMyQ0Y1Cis6MTAzNEUwMDA5RTZGMTBDMzhGRDFFQjk3M0U3RThDQ0U3RUMyQkQwOUZFCis6MTAzNEYwMDBCMDk3REQyOTJDMEZGQzk0RDE5N0U4NDZCREFDRDNCQjI3Cis6MTAzNTAwMDAyOTg1RjhERDUxQTE3N0FCQjlERDEzRTMyQzA0N0I0N0E2Cis6MTAzNTEwMDBDQjFGNkY3OUNFMDFGMTg3QkZEQ0Y3NUMyQUU2NTE4MEMzCis6MTAzNTIwMDA3REM5RUJCNTJGQjc1NEIxRjE2RTc5M0UwRUYzOTYzRURGCis6MTAzNTMwMDAyRkVEQzgwN0JGQUZFMjkxREYzQkQ0REYzNUFERjNGODI1Cis6MTAzNTQwMDBBNzY2QzE3Q0I5M0Q1QzI2NkZDQjc2ODIzRDBDNDRDRjJCCis6MTAzNTUwMDBBQkU4QjNGRjhBQjU0RUZCNzlENjY5RDdBRTczM0VBQzA0Cis6MTAzNTYwMDA1Mzc1MUZBNDhBQUZGM0MzNjZCNkJFOEYzNkIzRjUyRTZDCis6MTAzNTcwMDBFOEIzQ0UyMDlFODNEQ0YyOThDNTFCNDQzRjIzOEM3NkIzCis6MTAzNTgwMDBGQ0Q4MEU5OUMwRkRCMzFFM0Y0MzY3Rjc0RjkzOTZBRDJECis6MTAzNTkwMDA4MDhGNjUyQkRGMzk2Q0E0N0NCMTc4MThDNTBGRTU4MzZCCis6MTAzNUEwMDA4QUJCMkQ2OEU3MTdGRjhBOUQ3RjdFMkE5NUE0RTEwMURCCis6MTAzNUIwMDBGQ0NCNjFDNzBGRTlGMzI1RDQzRjAwRkZBMjc3MUUzRDg2Cis6MTAzNUMwMDA3NjdGNzk5NkRBRUVGNzEzN0ZDQjc5MUM2QTc5REJFRjk5Cis6MTAzNUQwMDBGMUY3QTIyNDFGQ0I4NzVDMkVCRTAzQjM0QkY3MUQxODU3Cis6MTAzNUUwMDAwNTc0MDBCQjI3NkYwNTNBNjUxMjg1RUQxM0I1RjFENDVDCis6MTAzNUYwMDBCRjBERkQ3MkVFNEFFNEZGRUU2MUVBRUZGNUQ2QzU4NzM2Cis6MTAzNjAwMDA0RDkwRUZEQkJENDM0MkJGNjhEOUFBMTI0NzA5ODFGQzQ4Cis6MTAzNjEwMDA1NjE2MDdCQjIzOEJEOTJGQzlFN0MzQkMxNzBCQTU2QjY1Cis6MTAzNjIwMDAzQzFERUYyNzU5MEE3QkFFMzg1OTVFRjdDMzA0QkYzQkY4Cis6MTAzNjMwMDAyM0U2QUI3RjBFRjE3MTJCRDgzRjlCMDFFRDlGN0VGRDAyCis6MTAzNjQwMDAyRkYwNzE5NkM5MDZGNEE3NkJDRENDQUZFRUUyREY3RDBCCis6MTAzNjUwMDA3ODI4OEJGOUQzMEY2NTMxRkY3QTFCOEYwRjc0ODExRjg4Cis6MTAzNjYwMDAwOUU3RDM5NzU5RjBGNzdBMDg5OThDNzE3MjIzNjFGQ0I2Cis6MTAzNjcwMDA2NzE0Nzg3MzFBQkZFODkxNkZGNDk3QkIzMzAxNEY3M0U3Cis6MTAzNjgwMDA0OTg3MDlFODM5QTM3ODk2MDJGNzA2MEVBNzVBRjEzQjU1Cis6MTAzNjkwMDA0QUY0QUYwQ0ZBOTlDREZCRDk2RjYyRjcwNDBFQzMxODQ4Cis6MTAzNkEwMDA3NDVEQjM3OTNDRjkzMDdDMDY5NDhFN0Y3ODgwMTlGRDg3Cis6MTAzNkIwMDBEOEUwMEIxNkY0MTM2RThGNjdGMTNFOTI5QzY4MDQzRUJGCis6MTAzNkMwMDBCRjg5RUJBOTM5MTMyQzNFMzgxRjk4M0RFMUY2MzI4MEIzCis6MTAzNkQwMDBCNEJGMjBBMUY4QUFCMDc2QUYyRkEwRTMzNDE4OTg5RDBDCis6MTAzNkUwMDA2RjcwMTNCQzJGNDk5QTNBQzcwMEZFMkVBMTZFMzFFNEM5Cis6MTAzNkYwMDBDOUQzRDVFRjNDOUI3NDJFM0VEMkRFNTNBODg1QjhDMjA5Cis6MTAzNzAwMDA3OEMyMThBQzE4RjFBQjI5RDc5QTU5RkQxQjhGMUM5OUI4Cis6MTAzNzEwMDA3MTVGMjYyMTdGODI2QzI2QjAzMzgwMjNFMDhCQ0E0NDAwCis6MTAzNzIwMDBEQ0U3Q0U4NDNDN0UzNzQwMjNGMkRCRDU0NjEyMzQzMEQyCis6MTAzNzMwMDBEODZDQzNFRjEwQjFCQzdFNzEwRTcyNUQzMTA5MjdEMjE3Cis6MTAzNzQwMDBGNTg1Rjc2QUVGNTFEQzEwMzY4NDg3QzNGOThFMzFEQ0RBCis6MTAzNzUwMDAwRUY4MzM1ODE1OTM5MzhFNTMzNjREMkEwNEJDRDdBRUNBCis6MTAzNzYwMDBFQkRGN0MzRjdFRTRGODhDRkIyNkQwMzI3Q0VGMEFFNjcwCis6MTAzNzcwMDBGOTQzMDlGMzc5NjY1M0ExMDczRTlENkIyNDJGQ0I4NTRFCis6MTAzNzgwMDA4QzdFQzA4Nzc1NkUyNTg4RUQ1NjMwM0UxN0Y3MzcwNDVFCis6MTAzNzkwMDA1RDBBNjhGNzZBRkNDRUU2RjNBM0ZEMzQzQkUwN0Q3Mzc3Cis6MTAzN0EwMDBGNEI4Qzk4OTJDQjFDRjYzN0VEQTUyMkVCNzRCMDVERjRFCis6MTAzN0IwMDAzREE1OTVEN0U0NkMyRTM3RTAwRjUyQkNDREU2MzAxNjEwCis6MTAzN0MwMDBERkJCQjI5OTVDQjhCMjU5OUVGNUI3MTczOERFMzIwQjQxCis6MTAzN0QwMDAwOUUzQkE1RkIwMjAxREM1QjgzMzM5NENDQzFFODRGRDU3Cis6MTAzN0UwMDA4OTc5MDhGRUFEMjZGNTk4N0Y1M0NERTMzMTA2QUE0OUM1Cis6MTAzN0YwMDAzMDRGQjdFNTMxQ0NFRkQ3RTcwOTUxMDcwOUYzQ0U5NjQzCis6MTAzODAwMDA2Q0Q3M0Y1N0M1NzM2NDhENUVDMjM4QTc2NEVFNUUwMDA3Cis6MTAzODEwMDBGMzkzQkUxN0U3MDU3RTlGNkQ2RUM1Nzg4MEJFOURBOUE4Cis6MTAzODIwMDA0NTQyMzkzNzM1NTM3RjRBRTJFNzVCQjQ2Q0Q5MkNFMTI2Cis6MTAzODMwMDBFRjNCQ0NDRUVDMUU4OURGMkJFNzdFNzUzNUE3MkJENTcxCis6MTAzODQwMDBERTUzRTExRTUwMzVGODUzNzhGRUM1QkYxM0I1ODVGOTM4Cis6MTAzODUwMDA5MTQ2RUVGRkNFREZBQ0Y1MzM2NjM3QTlGQzRDMDYzNDVCCis6MTAzODYwMDBGN0VBMkRCQUZDNzAxM0Y3MzczRTMwNzc4RjA0N0RBRjNGCis6MTAzODcwMDBCRjY3RkY4MTgxQ0QzRjk4NEEzMDNGNTJEQ0IzMzc3MjNBCis6MTAzODgwMDA3RjUyRjA5MzkyNkREMjlDOEI4OUZCOUMxNUEwQTdEODk4Cis6MTAzODkwMDBGNzBFNzRGOTU0MzZGQ0VFNEE4NUM0QkY1N0M5RTM4QTYzCis6MTAzOEEwMDAyN0E4QkY4OURGOTUzOTE0ODc3NjRCQzQxOUJCNEFFQzJBCis6MTAzOEIwMDA0MTQzMjI3Q0NFOTI5NUU3MjRERTMyMDNGQ0NDMEE4NzdBCis6MTAzOEMwMDBEOTA4RjA4Q0ExMTNDN0I5NTVFRUIwRTdFNEY0QzY3MTdFCis6MTAzOEQwMDAzNzk0OENEQTAyNzk0M0Q3Njc4Rjk4NjlDREMyNTMwRTNCCis6MTAzOEUwMDA3RUJGQzg3QjAwRjJENkFGRkQ4NkNFMUZDQjA1MzM3REYxCis6MTAzOEYwMDA3NDdGRDRGNTRBRjc1QzJCNTVEMUI1NUIwQjY2MUFBOURBCis6MTAzOTAwMDAzREVGQkFCRjdCMkI5NEQ3NkMxRDNGRDM0OEVENjBEN0ZBCis6MTAzOTEwMDA5RERERDlGMDBERTEzNUQ5OTdCM0ZBMDZEMURGRTUzMzU2Cis6MTAzOTIwMDAyMTNGQjhFQjQxNTY5RTRERUI4M0UwRTdGMjdCNDAxNTFCCis6MTAzOTMwMDBFMzI1RDRCMzZCQjhGRDExRjFBMzBBQzM0QjBDNEU2NDVECis6MTAzOTQwMDBCRkYzNzFCRTc2Qjc2Nzk3QUQwMUZCMkNEQjhGRTJFRjVCCis6MTAzOTUwMDAwOURDQURGOEQ2ODBERkQzOTRFOUFGQ0VBNjcwQzkyQ0QwCis6MTAzOTYwMDAyOTY4ODY3QkYxNkY4Njg2NzFGQjE1RjU3NzJGRDY2NDAzCis6MTAzOTcwMDAzMUI5REMzODkwRjUyN0YwNDVGQkE5RkI2N0ZBNDk4MzlDCis6MTAzOTgwMDA3RTUyMzRGRDA0RkU5OTdFOEVGNkVEQTdFMTlGRTlFN0I1Cis6MTAzOTkwMDBGQjhBQjYxRkUxOUY4OUVGQ0NGRDMxQzdGNzA4RjRCQjY2Cis6MTAzOUEwMDA3NDBEREIwRjkzQTMzNkNERkRGRjkzRjVDRjBGMDNCQjUzCis6MTAzOUIwMDA3RkYyMjk0QjEyRjBFMUQyNjdGRTNCQkIxQUZDM0ZFRUNGCis6MTAzOUMwMDAwRjdERDZGRUFFMTlGMkJFOTc0N0Q4Nzc3MUVBMjJFQzhBCis6MTAzOUQwMDAzQjM5Q0I3N0I2OUJBN0U2NDExRTZCQkI3OTkyNkE3RURCCis6MTAzOUUwMDBCNUJEQkY3MzY1QkM1QUU1QzczQzlBMkRGMkI1RDlFRjlBCis6MTAzOUYwMDAzQTJFN0RFNjEzRkM5RUUwNTI0M0VCQzc5MEU3NEJDNkEwCis6MTAzQTAwMDBCMzM4OUE3RTlEOUJGODdCODdFMURDM0Y0QUJDRTBDOUQ2Cis6MTAzQTEwMDA2Q0E2NkZGRjMxRDhGNzQ0MzY4NTFCQjMwOUY2MkZDNzY0Cis6MTAzQTIwMDBGODZFRDc5N0JDQkY4QTc4QTZDN0FCOEFFQzU2ODVFMkZBCis6MTAzQTMwMDA3QkNDOUJGRTQ2QzgzQkFEN0UzOEE3NTBBNkYzNzgyMkQwCis6MTAzQTQwMDA3M0UyMEVFODJGNzY3Q0IzOUJDNTM3REI1ODdDQjNDMjlDCis6MTAzQTUwMDBEREIxOEExQTI5NzIzQzdCREU1REQ2Q0IwOEI5RUEwMTVBCis6MTAzQTYwMDBEMjczREYwRkUyODZEMzJDQTI3Q0NCQ0NDOTEzNThCQzE3Cis6MTAzQTcwMDAwQ0NBMDdCNkQ2REQwNUYyQjM4N0ZGM0VEQjlDQjEyMzQ3Cis6MTAzQTgwMDBFMzQxQ0UzQjczMTIwQzRFMkFGRkJCMzIyQThGQzMzQzVDCis6MTAzQTkwMDBFNjhDQkQ2QzJBM0MyRkIxRDg4NzU1QjJGODM4RjJDN0Y2Cis6MTAzQUEwMDBBRThDQjJERjAzN0RBMTNEQzQzREZDRTY3MENBMEQ3NDRGCis6MTAzQUIwMDAxREZFM0ZDODk4MzdFRENGNEZGMDQ3QkJBN0YyMEFCN0JFCis6MTAzQUMwMDA1N0M3QjM5OTlGQjZDNzQwRTc1OUQ4M0IwRjMxM0U3NUVBCis6MTAzQUQwMDBDQzU2NzU0MERDNkFERDgwMDJGMEEzNTMzMjRCM0VDQkZFCis6MTAzQUUwMDAxRUQzM0I3RTRBQTZGRjIwOTRDNUY4NzRCOUY5RjBCQ0ZBCis6MTAzQUYwMDBCRkYzNzg4QkQzRTMzM0EwMUI4NTY1MTM2NEY4NTI0MjgwCis6MTAzQjAwMDA4RjVFQkY3QTcyODJBNjdDRURGNDI0RTI1M0M3NERBRjdDCis6MTAzQjEwMDBDREQwOTRDQjJCMDY2QkRBREZCNDYwODRBNkJFRDREMkIyCis6MTAzQjIwMDAzMUJBRkUwMkZDRkQzQUZCOTM5OERGN0JBOEVERjREQjkzCis6MTAzQjMwMDBCM0MxOEZERDJFN0IyNUJBOUVDNTJGM0NGRTM2RTQ1RkQ4Cis6MTAzQjQwMDA5RjgwOUYyMDI5NjQ3MTMxRjZCRDQ2N0UxRTYzRjQxOTYzCis6MTAzQjUwMDAzNUU3MzE3QjlGMzM4M0RGQUU4QUYzRUJFRUU1RURDM0QwCis6MTAzQjYwMDAzOEJFRkUzQzQ2RTQ4QkZGQjNFNzMxMDkwM0Y1QkZFN0ZGCis6MTAzQjcwMDA3OUZDNTVCQTMyMzI2OTU3M0JEMkE3NzEyRkNCNjM2RUFECis6MTAzQjgwMDBBNDdFMEI3QzRGRUNGQjNCMkQyMUY4ODZGQkU3RkY3REYxCis6MTAzQjkwMDBDNEFDQThDRTY1RUEyMjBERjhCQkJBOTM3NjFEQzE3M0ZBCis6MTAzQkEwMDA5QkE3Qjg5RkI0QkNFRDRCMzNEQzkzRkE3RURCMEE5NDQxCis6MTAzQkIwMDBFN0E5NTQ3RjI1NTJCRUU5NjgyNzIzNzc0MjNDMzlDN0RECis6MTAzQkMwMDA4RTc5Mzg0QjlCQUZDMDM4NzU2MjY0MzZDMkRBOTYyQjVCCis6MTAzQkQwMDBCMEJGNjU5MTZCQjBCQzlDRkY5RUVGOUVGODhFQTk2MDU0Cis6MTAzQkUwMDA4N0Y3RkNEQTg1RkJDMTAzNzI3OEQ4NDNEMDhGQzU4RTg2Cis6MTAzQkYwMDBGQUExMzQ2M0NFM0FGMDEzRjZDNDA3RjM2RUE2RTM5NTQ4Cis6MTAzQzAwMDBGRUQ3RjczMTBGN0RGOTRFMDlFM0E2QTUzMkQ5MjM0MTNFCis6MTAzQzEwMDBGRTdEMjQwRUZCMkI5NUZGMzQ3QTA1N0Q3RUQ1MjQ2NjMwCis6MTAzQzIwMDA1NzRCQzFDN0ExRjU3MjkxN0QxMzdFNEYzQUM2RUZBNEUxCis6MTAzQzMwMDA4RDFEQzhGQzNBNTMyNzlCRjc5NEM4MkNFQzRGRDQ1RkRBCis6MTAzQzQwMDAzNjcwOTBFNkJCN0NBNjk0RURDNkY5QjZERUY1OTgzQUUwCis6MTAzQzUwMDAyNTg0NTc0NjQ2MjBBQ0RCMzlDQjA4RjlFNzdGQzg3RDgxCis6MTAzQzYwMDAyQzE5RjA0NERCRTNGN0MxRkFFQUUzQjE4OTI0OEFERUQ4Cis6MTAzQzcwMDAxMkQwQzJGNUYwNkNEMEMzNzBGRTlFRTNCQjY2NjAwQTQyCis6MTAzQzgwMDBGQzFFNjFBN0QxMEE3QUQ0NjY3NTgyRkYzMkEzQjg0MEMwCis6MTAzQzkwMDBBOTU2QUQ0QjdFRTk0NkJDMDc2MTQ5RUUzNjgxRkQ5RUQzCis6MTAzQ0EwMDA0REExNUE2RkNGOEI2MTY3NkUxQzI4RjQ3NjAzNDI2MTc5Cis6MTAzQ0IwMDA4RjQ4RTQwN0VDM0JBODNDM0UyMEU0NjlFQTQwODNFNkY5Cis6MTAzQ0MwMDA3QjNBMUQxMjkzOEJFMEFGRDhCOTQwNjk4RTdGRTk0MEYzCis6MTAzQ0QwMDBEQTRGNDcwOTI5N0YxNkY1Njg0NzM2REM0N0ZGNTdDRDhECis6MTAzQ0UwMDA5RkQyRDcwQUY0NzcxODNCMDlDNDMxRUFGOTdDODQzQ0E3Cis6MTAzQ0YwMDA5RjZGRkU3Mzc5RkIwMzMyMDkwMDVGMUNCOEZDRjIwRTY0Cis6MTAzRDAwMDAxRjlENTdGQjZEQTM0NjgxNUQxMEUzMzUwQzY0NzlBNkJBCis6MTAzRDEwMDBDNEQ5RkQwREU2MUJCRTk4QTA0MDVDQkYxNENFM0M0NjQ2Cis6MTAzRDIwMDBGN0ZBRjM5MDhGMDhGMUMzQkExNzJEOEZDMjA3NTJFQjQxCis6MTAzRDMwMDAxQzc0N0Y2RjgzQkNDMEI4MzBGMDZERkJFRkUyOEM2MDA5Cis6MTAzRDQwMDAzRjBBODdGODFCMDAyRjkzN0UzNzdDMzI3Q0M3QzdENzhBCis6MTAzRDUwMDA2NjMxMTJGNDgzN0NFQkUwNzlBQ0Y5OUU0RjdGMDk3OUYwCis6MTAzRDYwMDBENEYzOTlCRjk5Qzk5RjlGQ0I2MTI1RTdEQkY5NUMwRTFFCis6MTAzRDcwMDAyQjhEREU0NDM4OEY5OUI3NEZDNjdCOTFGMzU3NEIyMzc5Cis6MTAzRDgwMDA3NzQyN0M0MEIxRTMzRDdEMjE4NzQyREU0Q0MwOTdBMzYyCis6MTAzRDkwMDA4MDNGMTk1RkQ2NDY1QzVDQkU3Mzc4QkY0QzBFNEE2NUE3Cis6MTAzREEwMDA5NjZGNTczQUMyODVGQkU3RTU5MTI0NkMyN0U0NTVDODI2Cis6MTAzREIwMDBFOTFEMzlGRTFEQzBEN0E1OEQ1NEJFRTkzOEZFNzUwMzM3Cis6MTAzREMwMDA0NjgzQkNGNEYyODlEOTA5RkM0NEY5QzQ1M0FERTI4M0JCCis6MTAzREQwMDBDNkY2QUY4Q0MwMjdBNjA5MTJGMjg5ODVDMjQ5MkEzRUQxCis6MTAzREUwMDAyQUVCRjE0RjlDNTM1M0U5M0M2NjM0RTVFMEY3OTQ0NUU4Cis6MTAzREYwMDBGREFGN0JGOEE1N0ZGQ0ZFMTg5NzhGRjlCNkYwNTBGMDY5Cis6MTAzRTAwMDA2QjRERjU3MTVFRjg4RUZDODk2NDA1RjVEOENBOEQxMjhDCis6MTAzRTEwMDBGRTM4RTE0QTUzRDkyNEYwMkY1NjNFMjg2MTdDMEZGQzJFCis6MTAzRTIwMDAwRUQwM0Y0NTA3RUJDREVBNzM5MDFCMjNGOTc4NUU3REZBCis6MTAzRTMwMDA0RDY0MDhDMjI3MzJGRDJGMDNGRDJCMjNENzczM0NFNkM4Cis6MTAzRTQwMDA0NzNERUYzQjU1N0YzQkM2RDU0RTg1MkM1RUY2OUQzMUY5Cis6MTAzRTUwMDA2REZDNkU4Q0NGOEJFNzdGQTY3RDI2QjI0RDgxQjg5QjIzCis6MTAzRTYwMDA1RkM2RjNCRDJDRTJCQzU3NjJGMTNCODhFNzg5Rjg5QjQzCis6MTAzRTcwMDAzOEE3MTM3MTM4MEI3QzBGNTc2NTQ3NEYxQjVCQjI2MTM2Cis6MTAzRTgwMDAxRkQyMjcxRTU3QzJFQ0ZFRjFFRDI2NzY2RkFCRkQ0RjE5Cis6MTAzRTkwMDA0NTA2NUFGRjY5OEUwRkUzNzJBRjc5RkM4NzYxM0Q0QjhGCis6MTAzRUEwMDBBRTBFM0Q2M0EyRTVBNTc3M0VFNzgwNzhCOUMwNjdBQjZCCis6MTAzRUIwMDAzMTNDMTRGNjRCQUQxNDhGMTAxRjZDREQyQzRGMEIzMUMxCis6MTAzRUMwMDA3RjI3NjE5NjJBQkYyMjE2NUYyRjg5MEM0NkZDMDg3QjRDCis6MTAzRUQwMDAyM0Y0RjdGMzZCM0RCODI5MTU3QUZDN0M3NjQ4RjBGN0FDCis6MTAzRUUwMDAzMjJFMDdDQjQwMEU4OERBREVDQzJBODNERjM1MjNCOUE5Cis6MTAzRUYwMDAxMkRFNzNFREI1Mzc0QzFFODQ5RUE2RkM4RTcyNTMzQUNCCis6MTAzRjAwMDAzODBCRTNFQTQyNkZFQkVERDE2RUI5RjVERUYxQzAzNzY1Cis6MTAzRjEwMDA4QURGQTk1MEZDRkMwRjRENjJCMzg5MDA4MDAwMDAwMENECis6MTAzRjIwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkI1NUIwQjc4NTRENTE4Cis6MTAzRjMwMDBCNTVFNjdDRTlDOTk0OTMyQUYzQzA5ODZDNDMzOTMwNzdFCis6MTAzRjQwMDA3MDBEMzgzQzIyRTFFMUM3ODE0MDAwMjEzOEMxNUI0NTVBCis6MTAzRjUwMDA0RDY1NDAyNDExMTMxMjUwQUU1MUI4REY5QzkwODA4MDAzCis6MTAzRjYwMDBENDg2RUE1NURBODI0RTI4Mjg1QUI1NTFCMEM2OEEzMDJFCis6MTAzRjcwMDAzQ0I0QTE1QTFEQUJBREY0NTZFOEEwMTQ3OTFCQjE1NjYwCis6MTAzRjgwMDBGQ0E0NzJEN0RBRkI5Q0NDOUM0OTgyNTI2Rjg3NEYzN0Q2Cis6MTAzRjkwMDBFQkVDQjVGNzVFN0JBRDdGQURCREQ2M0U4Nzg5QkZGQzUwCis6MTAzRkEwMDA3QUZCRkYwMjQwRUQ4QjRGNEY4MjBDODAwOTU3MDkyMEFFCis6MTAzRkIwMDAwQTAwMzM5NzQ3Q0QzNkE0QzE2RTczNkZGNTIwNUQzQTgyCis6MTAzRkMwMDA0QzVFNTAwQzcwOTE3RUUzMDFDNEJENUY0OUYyMTAwMDVECis6MTAzRkQwMDBFQkYyNEE1MEVDMDBCNzYyNUI2NjhGRjU0QjAwNEEzQjUwCis6MTAzRkUwMDBEMjAwNTFGMzJDNDdFQzc5QTY2Q0MyRkZEMUYzMjY4MEE2Cis6MTAzRkYwMDAxMjlDNTdFNzNCQkYxNEUwMUE4MERCRENDMDdGOERDODAyCis6MTA0MDAwMDBENDFGRDcyMTdFRTQ5QjZBODUzOTdFNUMxRkNDOTFCQzhFCis6MTA0MDEwMDBGOEY5MkEzQzEzMDdDQUM4NUEyQzBCNkNERUZGMkZCOURCCis6MTA0MDIwMDAyQjQ0QjAwOTY5MDA0RTczMTREMjhBNjk3RTVENkU5NTg3Cis6MTA0MDMwMDBBRkYzMkQ3MjVGQTFGMUJGMjM0MjYzM0I4RTdGNjdGQzFDCis6MTA0MDQwMDBGODg4ODI3MkVENTkzNjYyODQyOEM3RDYxQjJGNUIxODE4Cis6MTA0MDUwMDA1RjQ1M0E4RTFEMDlEMEY1OUEzNUI0MTlFNTA2OUM0Rjk3Cis6MTA0MDYwMDA0MEZFNEY1RjFCMUM1QThCNUIzQjBDNUQxN0M4M0VFQTQyCis6MTA0MDcwMDBDRTE0OTlGNjU1QkYyQjg1RjFENzI3QkI0MjAyRjZENzUwCis6MTA0MDgwMDAzQkJCOEFGQzI4NEZEOUVFQTQzMDBDQzU3NTc2Mjc5OTI2Cis6MTA0MDkwMDAwMUQ3RkQyNkZGRjZGMUE0OUZCMkREMDMyNzA5NEUxNEQ4Cis6MTA0MEEwMDA3QUE3RDUwQ0M4Rjc0MDlFQTJEMEYzQkVFNEQ3RTU0QjYzCis6MTA0MEIwMDA2Q0Y1RkQ5NzU3MEFBQUNCMDUzMEJEQ0NBMTlBQjA1RDJGCis6MTA0MEMwMDA3ODNFMUY2MDA0QzA1REFCQTdCMUY2RTU2MDM2MkExOUUzCis6MTA0MEQwMDA2MEYyRjk0QTAwREM1QkRERjkxQkQ4RjM0NUU3NTMxOEMxCis6MTA0MEUwMDAzREZEQzE0ODM5RUQwNzVFMTY2MDJCQ0E1RjkxRjNDM0YxCis6MTA0MEYwMDAxNTgwRjI3NTI2QzM5MDFEQjhBRjRFNkZBRUFGOTk3MEE0Cis6MTA0MTAwMDBEOTNBOERGMTU3RkM2QUNBNTREQUQ3QTIxREM4NENFM0RDCis6MTA0MTEwMDAwNjA5QTE0MkQyRDM1MUJCMDlCMjAwRUVCNjcxRjEzRkZDCis6MTA0MTIwMDA2RkY4NjBBNDhDRTMzRjFGRTkxODA2QzhCQTRGNkM3Rjk0Cis6MTA0MTMwMDA3ODhDQzBFQ0Q5NDlGNjlDQThFMTVEM0EyRjgyODJGMkQ2Cis6MTA0MTQwMDA1OENGMEJBQ0ZENDAwRTJDOTY0QjE4MUY0MDFBRjk0MzZDCis6MTA0MTUwMDBGRjkxMDFGQjc3QzFEMzJCOTI4Qzc4OTQ2QTNGOTMwODJGCis6MTA0MTYwMDA0RjU2NkNDQkUyRkFFNzY4Mzg0OUQ0RTM3RjVEQTYxRjZGCis6MTA0MTcwMDBDQ0ZGOEU3ODVBNDM3ODJBRjlCN0UyNjkwREU5QTkxNzdFCis6MTA0MTgwMDAzQ0FERkQzRTc4QkE4NDFEN0RFMDg5RTE2Q0ZBOUIxQzU0Cis6MTA0MTkwMDAxRjkwRUZGMDZEMDU4NjE3MjY3N0E3MjUzN0Q0OEM3QzA2Cis6MTA0MUEwMDBCNzkyNUQwOTVGMTdBMTgxRjQzOTg3RUM5QjFFQzNFQkMxCis6MTA0MUIwMDAwRTRGRTBGOTc4M0I3NzI2QUJDNThCOEJCRjhCOUQ2RjlECis6MTA0MUMwMDAwNjhBMUJCNzY2MzQ4MDgyQ0ZFNzYwMUIxRjM3QUM2NDVBCis6MTA0MUQwMDBCRkUyOUVGQkRCN0U5OTc2NkVGQjhFNzZERUFGRDkxOTUxCis6MTA0MUUwMDBEQzY4Qzc5MUNDN0UzMkQ5MzVEMUVFNjQ1N0IyN0JGRDA1Cis6MTA0MUYwMDAyRUVCRTY0QkQ5NzU3ODQxRTA5RERFRUMwQUVFNjQxM0I4Cis6MTA0MjAwMDBDOTE5QjM4QkY1MDZDMkNERTc2MTMzOTA3RkY1NjU1N0M5Cis6MTA0MjEwMDA2OTAzRDdCQjRFQUYwQzlCQTc4NkQ4NzkwMEU5OTU0M0JECis6MTA0MjIwMDAxODVFMjJERjA3MkYxNTY1RUQ3RkI3QTUwMjlDMERERDE3Cis6MTA0MjMwMDBFRDM3OEYwNkI4QjExNEJCQUVBMEVFN0I1QTk1MDI4QTVCCis6MTA0MjQwMDAyRkY4RjczMTZDNDYwNTZDNEM5RjlDNTY5NzQ2MjZFMTNCCis6MTA0MjUwMDA3RUE3M0ZEQ0REQUY1MkZGRTQ3MTJFM0UxRUY5NzE1QjlECis6MTA0MjYwMDBEREZDNjc0MjRCMjJFQjk4RENBRDVDREY4MUE4RDkzRkQ3Cis6MTA0MjcwMDAyNDhFMUU4OUI0MjM4RTJFNERBMDM3NzI3RTNBNDdEQ0UxCis6MTA0MjgwMDA2QzlFMTBGNzRGOUM1RjE4NEVCNDNFOUZFNjA3RDA1NUNBCis6MTA0MjkwMDA5RThBRjY5QkI5NDM3MEFGNDU3QkRGMzJFRTUzMEJEOTU0Cis6MTA0MkEwMDBBN0EyMkNGQTQ2MEVFRTU3Njg1QkVFQjcwRkM2RTcxNENFCis6MTA0MkIwMDAwNzUxREVENEI2OTY1NkI1NDAxQjhGRkU1M0FCQTlEMTNECis6MTA0MkMwMDBEQTJFMjgyMkRBQTlCNjU0MDg3OTNEM0RGNTk4RUEzMTZDCis6MTA0MkQwMDA5RTY3RjQzMzFCQzc4MzY1RTRFNThEMjczQkIyRjE1RTJGCis6MTA0MkUwMDAzNjNFNkNCRDhDRjU2RjFBMDc0QUE4OTczODc5QTU4N0JBCis6MTA0MkYwMDA5RkZGNzAwMTY5N0Q3RUQ0REQwREI4QkY1MDJGRkUzNjYzCis6MTA0MzAwMDA1MDlCMzc2MjMyRDUwMUVBRUJFQUI2MERBREI2NUNCNDJDCis6MTA0MzEwMDAyRjcwN0MwQzZCN0JDQ0FGNzIxQzgyOTJCMERGNEJDOUQwCis6MTA0MzIwMDA5QkE5Q0IxMUI3NUZEOTM4M0U3QzI5N0RFNUY0RDA5N0E2Cis6MTA0MzMwMDA4NjhGMUEyMzVFNUM2NkZGRkVDRjUxMEU1Nzg2RTA1NkNECis6MTA0MzQwMDBEMUZFOEJGQzQ5RUJDMDQ1RjZEN0YxQkREOUFGMENDMDBGCis6MTA0MzUwMDBGRDI1NDEzNzVFOERGOEZFODU5RkYwQkQwODc0RkVBREVBCis6MTA0MzYwMDBBRDc0MkVGOTRERERGQzFDRUYzQjg1RUVGMTgzRDA5NTRECis6MTA0MzcwMDA1REMwQzc0RjZGREJEMkFBMTYzMzdCQjA3RTQ2OUIyRjQyCis6MTA0MzgwMDA4MUY3RjYwNDdBNUM4MjdGNjhGODY2RkU0OTcxMUJGNTU2Cis6MTA0MzkwMDA1M0Q4NEJEQ0E4RDFGNDdCNDY4MEQ5MTRGNzIyMTM3OThCCis6MTA0M0EwMDBCRTE3RjFGMjc2QjU4N0U3NzcwRDFBNUZBMzZFRTdFNEUzCis6MTA0M0IwMDAzODNEMEM4OEQ5MTk3RjYxMTg2NEQ4MzdEM0QzQ0QxOTBCCis6MTA0M0MwMDBGQUJFRjdGQjY3QTBERjQ0RDI2MDg4ODAzODU5RTEwOTY0Cis6MTA0M0QwMDBCN0I2QzRFMUE0QzVCMzlGRTEyNDM2REZERTA4QzVGRDRFCis6MTA0M0UwMDA5QjM1M0RBREY2RUM4QjY4MzgxMkM4RUZFQTE4MjAxMDBCCis6MTA0M0YwMDAwNzNCMDQ1NUM0N0RENjExMEU3QUQ5RTdBQzlFMzg1MkRFCis6MTA0NDAwMDAxM0M2MkJEMjI1QzZDRkVFMzk1RTQ5MTgwRjUyQzZFNTJBCis6MTA0NDEwMDA4Q0Q3RUMzNDIzQzE4RTUzMTNFQzM4Mjk4MUFFRDJFOTBBCis6MTA0NDIwMDA5MDIxOUVFOTcxNkU1RUM3RkE5NTU5MjhDNzVEREIwNDNECis6MTA0NDMwMDAzQTI2Mjg1RTVCODQ2MTAwOUJEQTdFRUZCN0Y3MjdCQ0UzCis6MTA0NDQwMDBDQTUyMEVDNkZDQjZCNjc3MjIzNkM0NzIyNUM1MzM4NjZDCis6MTA0NDUwMDBERjQ4QUI4Mjc4QkI4MUZDOUREMUVGRkExNTE3RTFBNzRECis6MTA0NDYwMDA2MTY1MzZGMjNGRDVGNjg3NTYxQkIyREVEMkIyNUVBMjQ4Cis6MTA0NDcwMDA5Q0U2OTc2REVGQjc5QTcxREU5QjQ3RkVFQTBEOUFDRkU3Cis6MTA0NDgwMDBEQ0Y0QTdDODBDQ0YyNUYwREE5QUIwOEY4RDA5QjQ5QTY2Cis6MTA0NDkwMDBDMEZGQzhCN0M0Rjc5Njg0RjFDQjEzRkFENzI1RDAxQjU5Cis6MTA0NEEwMDAxMkU4RDVDNkYxNzNFNzBCQ0M0RkU2QTJGRDQ4NzFERkU5Cis6MTA0NEIwMDBFNjM3N0IzNDdCNzZGQjNGRUU0MEIwQjMzQ0M5ODBGQkY0Cis6MTA0NEMwMDBFOUNEOUM3RUIzRURBODdGQjUzRDhFRjYxQ0YzOTNCRjdFCis6MTA0NEQwMDBFQjM4OTY4MEZGNkVDRDAwOTVDRTBGQTk4Rjc4RjY0QTA3Cis6MTA0NEUwMDA1RjM4MUE5NDc4REVGMUZFQkZEMjVGRkI1M0RFMDk4Njk3Cis6MTA0NEYwMDA3Mzc5OUY2OEE0Rjc4OEJBREM3RjhGREM2M0E3ODczQTVCCis6MTA0NTAwMDBGREI5OUZGMkYxRTk4RjE5Rjc4NTc1QTE0NjdGRTY5RjA2Cis6MTA0NTEwMDA4NEZFM0ZGREM3MUFBRDc2Rjk5NUI4N0RFQUZDRTVGRjRDCis6MTA0NTIwMDBCQzI4RDI3QTQ3M0M1REZFMkRCOEVGQUE4OUUxQzIwNkNECis6MTA0NTMwMDBFNEFCNEFFMzJEOUUzMzIyOUQ2M0Y1MzZFRTRGRTVBRkEzCis6MTA0NTQwMDA4OTdFM0E2N0FBOTJDMzg1NEI4QUUzRjYwOUVENDVCNEEyCis6MTA0NTUwMDBDRjNEQ0I0NDY2MUZCNTk5RDcyM0YzQzA2NzAxMkM4NUE3Cis6MTA0NTYwMDBGNkI4NUM4RDRGMjJGRkJFNjU2MjIzOUQ2Qjg3MUJEMzFGCis6MTA0NTcwMDBCMzQ4RkVFMTVFNUVFRkVENzM1RDk5NzUwN0QyN0I1MjQ1Cis6MTA0NTgwMDBFNjU4NjRFNERCRjNDMDY0RDZFRTE1OTU1NTVEODhFMzI4Cis6MTA0NTkwMDA4QjZEMTdEOTM5QkYyN0M1QzVGNEYzQjVFNzZCN0YxMzBBCis6MTA0NUEwMDBDNkFCNkYzQzMyNUIzRjkwRTZDRUVBQTA3Qzc1QUQwNEIzCis6MTA0NUIwMDA1QjY1OTJDN0Y3MzhDM0NEOEZBQ0MzRDZBMjFDNzM5QjgzCis6MTA0NUMwMDBBRUNBQTJGQzZEREVGRjU0OTZGNzQ3QkU3OTJCMjU5RjNECis6MTA0NUQwMDBDMEY4NjAyOEM5MUQ1ODNCRDk0MkZERjM1QkI0NTY5RDE1Cis6MTA0NUUwMDBDMkRBRERERjZDN0Y3MzI4RjI3N0FEMTE3RDlCOTE3OUE0Cis6MTA0NUYwMDBENzc5QUY3MzFFQ0FGNTcxMTI4RkMzMUY5RDJFNzA5MkFCCis6MTA0NjAwMDA5QzhGN0EwM0M5NUVDMkFCRDM5MTJDRDBFMUUxOTY5RDE5Cis6MTA0NjEwMDBCMzcwREU4N0YzOTUxNDZGNjY4QzdGRjczN0UyMUNDQUEwCis6MTA0NjIwMDAzNzVGM0QzRDJGMkI4MDc0QTY5N0UzNjZEN0Y5Nzk1OTA0Cis6MTA0NjMwMDBGM0UyQ0VGQjA1NjdDQzRDQ0ZCQjJERjIzRDk0NUZFRTkxCis6MTA0NjQwMDA0RUNFMTU1NDgxRTkzOUJEMTJGRDY1QkU5NjVGMjM1RURECis6MTA0NjUwMDAxQUI3Rjc3MkVFOUJCQzIyRDNFQjUxNkIyMzdDOEMyMEY0Cis6MTA0NjYwMDBERUYzNjBFNjM4OTI1MzFGNTdGMjdFQTBEOTQxNzgxRUUwCis6MTA0NjcwMDAyMDBGOEZDRkEzQjNGMjI2N0E0OERFMThDRUIyREUyNTA0Cis6MTA0NjgwMDBEQ0IwM0MxQUU5RTJDRDY5RUI1NTNBMEJGNzYxRkU0RjFECis6MTA0NjkwMDA3MjY0MjhFNUQ0MEZDQjkxMDFGMzRFQzg2RTJGOEFCRjA4Cis6MTA0NkEwMDA4Rjg4RTVBOTJCQjQ3OEMwRjkwRUE5MEU1NkI3MUU3QUVCCis6MTA0NkIwMDAzNjI5NDRGNUNDMjFGNTJGMEVCMEM3RjM3MzNGQTk3NjA4Cis6MTA0NkMwMDAzQTU0M0E4QzNGNzEzOENDQTREN0MzRTZFMEIxRkI3MEMyCis6MTA0NkQwMDBEQzgyNEQxMjhCQTMwQjM2NjUyRUVGQTI3ODgwRjYyQzcwCis6MTA0NkUwMDA4NDlFRUJBRUY0NEE2QzlFM0VGRDQ0Q0RBRjM0RjgwOTk3Cis6MTA0NkYwMDBFNDU3RDJCOUQ2OTc5Rjk0NkZGNjU2NkVCMUY3RUQyNzZGCis6MTA0NzAwMDBENTVBREU1RUJFNDlGMjEzQ0VBQjRCMUM2NkI4MUFFQjJGCis6MTA0NzEwMDBFQzREQUY2RjI1M0M1NjJGNEUxQTZFNDVDMUFCMzc1OTQ1Cis6MTA0NzIwMDA5OTdEQTMwRTg3RUFDNkZFODBEMzYxNEVDNUY2NTYwRDZECis6MTA0NzMwMDAwRkQxQTYyNDU2QTc4ODU5MTYxNkY3QzQ1NTI1MzJFOTc1Cis6MTA0NzQwMDBBNzRDMDRCMzBEQ0YxNUQxRTk5M0ZEOUM2RTcxNjNEREM5Cis6MTA0NzUwMDBCNkQyNTEyQTkzN0Q1Nzc4NjVCNkRGRUU3RUQ3RUNFQjYzCis6MTA0NzYwMDAwNEFDNkJDRUUxM0VEMjcxREM4OUM2ODcxRjFEODVGMjk5Cis6MTA0NzcwMDA5RDg0RDA4REEzNTBFRkU3QzhEMEI4Q0VCOTFENjI0ODU0Cis6MTA0NzgwMDBBNTczQzJBQzk4MkIzMEVFRDUwMEY3RjdCQTAzREIyRDNBCis6MTA0NzkwMDAxM0YwQUYzNTBERDUzM0E4M0VCQTMzMjQ3RDE0RDU2QTU2Cis6MTA0N0EwMDA5RjhCRjhERjE3RjA5Njg1RjJEQkJCQjYxOTlGQTNDNzg2Cis6MTA0N0IwMDA1OEM4QUZFQURBOERDRkVCNjFERDY3RTI1MDZBQ0QxRkYyCis6MTA0N0MwMDA0NTA3NjlDRjcxRERDNjBGRkYzQzY0N0YxQ0RGREQ1RUVFCis6MTA0N0QwMDA0N0M2MzEyQ0MxNjEzODBDNDdDREUyM0FDNUFFOUIwOEMzCis6MTA0N0UwMDA3NjhEMjI5MzU3NUM5MTE0MjIzRDhBNzlGQzdDOTgwMjQ1Cis6MTA0N0YwMDA0MjI4ODkwMEUxQzY3REUzQkE1RjA2MEYwRUQ5OEY4MDlCCis6MTA0ODAwMDAxMEVGMUZDMUY0NzIzNDg4NzgxQTg4RkE3MERBMThCRjcyCis6MTA0ODEwMDA3OEJGMThCMkUyQkE2NUU5QTBBNDkyM0UxRkFEMDQ3MDU5Cis6MTA0ODIwMDAzMDdEQUE2RUE0QTc2NDM0OTgyOTNFNzU3OUI4M0VFNzE2Cis6MTA0ODMwMDAwQUUwNkY2NzdFRUZDQkEzRkE3OEMxQTYyNDY2QkZFQUQxCis6MTA0ODQwMDBDN0VGRkNEMzRGNDc5MkJEMkEzMkUyRkRFODIxQzI1RDlCCis6MTA0ODUwMDAwOTlCMEY2QzY5QjE3OTNFNjlGQUVGM0M5MkE3RUMwOUFDCis6MTA0ODYwMDBBQzJCQTlERTE0MDM4RkRFQ0NFMjY1OEE4RkM1MkQ3N0QxCis6MTA0ODcwMDBGNDQ3QTMwODI3NEQyOUMzRDYwMkUxQTQ3RjlFQjczODg5Cis6MTA0ODgwMDAzNkJFN0FDNUIyMjIzRTFFRUI1NTI3QzVBQjI0QjY5Rjc1Cis6MTA0ODkwMDBEQTFENTY4NjkzQjk2QjQ0ODU5RDhGQjkxNjc2M0U3RTk4Cis6MTA0OEEwMDBENDkyQzRFOERBMDFBNUNDQ0ZFNjlBMjA0MEZCQzA1Q0U0Cis6MTA0OEIwMDAzMDlCQzU3NUFFNzJBOEI1ODNCMkRENEU3MTdFNUQ0NDg2Cis6MTA0OEMwMDA3NDMyRkJBODlBREQyQzY0OUZBN0JERTk2Q0ZEMzlBNDY2Cis6MTA0OEQwMDA2MzNDQjcwRTY4Mzg5QjZCRTJGODgxNUQ0MjY4MkI4QkI2Cis6MTA0OEUwMDA0RjBEMzJGOTdGOTU0OTYwNzEyRUQxMUY3RjQzNDkxOEQyCis6MTA0OEYwMDBDNUM5M0NERjZEMzRBRUVFMjFBQjZGODU4N0NCMjBFQUI2Cis6MTA0OTAwMDBGMjIwOUVFQTRDOTEwNTNGQTc3OTdGNkQ2NUY3MUFGNTc1Cis6MTA0OTEwMDBCODhGMjQyN0FCMkY5NDE3NTFGRTdBMzM5ODJENzQyRjFDCis6MTA0OTIwMDAyNUYzNzhBNkNCNTMyRjU3NEUyMTlDNjJGRjQxMzNGNkQ3Cis6MTA0OTMwMDBENzM5NzgzQ0FFNEJFNUY3M0RFMEIwODVCNkM2QUY0NzFBCis6MTA0OTQwMDAzMkU3RjM3MUIyOTNGQzZDMzRDMzBCRjlCRDA5RkIzRjQyCis6MTA0OTUwMDAwNURFNUZFNjJDOTVBM0Y4QkNEMzA0QUJFOTlFODRFNEE2Cis6MTA0OTYwMDAxOTNDMzQ2RTVEQTRGQjBGMjUzQzJFMzY3QjFENjQ4N0ZECis6MTA0OTcwMDBGNDFCNjdEMzdBQ0Y4OTJDMkVBMTMzM0Q1NDRBRjlERjNCCis6MTA0OTgwMDA3M0UyMDhBQTYzRTdBRUQ5NTdCRTgxRTgxNzg2Qjk0OTMyCis6MTA0OTkwMDA4NEI5Q0ZCRkM3Q0VBN0JCMzQ5QzQ1MjlFRkE3RjMwQTg0Cis6MTA0OUEwMDBFOTE3QjBGREM4Q0JGM0ZCODBDOEVGNzEzRUYyRjJGQzEzCis6MTA0OUIwMDA1RkQ3QUJERTVGQjc0NjYyRjZBODVCQzlGMTUwRDdGNEFDCis6MTA0OUMwMDAwMTlCQjdDRTExQzkyMjdCRDRCRDI0NUQ0M0I4M0VBNTVGCis6MTA0OUQwMDBDOTNEQUYyOTc3REM0MUM0QzczQ0M5RTUxNkYwNTFBREVDCis6MTA0OUUwMDA1QTYxMjFCQUI2NTU2MEI0QkU1RUREOUEzRjY2OTk4QUI3Cis6MTA0OUYwMDBGOTdDRDQ1QTM1MUNDNUU2Q0RDQ0EzRjNFQ0Q0QjNFOThECis6MTA0QTAwMDA3OTczRTNFQzdFQUFFNTY1QTc2QzI3QkYwOTE3QkFFOUJECis6MTA0QTEwMDAxRTY2NzE5MjZGMzNGMzUzNkU4RjUzMkQ4NTlCRTk5RTAzCis6MTA0QTIwMDA2NkJFM0JFMjEwQjA3RkZFM0RGOTY5NzRDRTFENzY4NzBECis6MTA0QTMwMDAyREQ0N0ZCOERENjMyMjVBNzFCQkM3MTFBRDk4QUY2NjI0Cis6MTA0QTQwMDBGNDI5MENFMUVEQzUxQTc4RDE0RThCMDQ4RTlCREE2NzAwCis6MTA0QTUwMDBGNzU5QkNCODlFM0I5RkVCRTdDQzczRUYxNUQxN0Q0MTc2Cis6MTA0QTYwMDA1RDVFQTQ4OENFNUZDNDU1NTEwRUQ5RTUxOTgxRTUwOTc0Cis6MTA0QTcwMDA4QjlFMTU5NUE0QTEzMTVDMkQyMjVDQTFGRjJGRDQ3MEQzCis6MTA0QTgwMDBCNTY4QzdDQkY3OTI5RjJFMjIzQzBERUY4OTRCQUMyQjFDCis6MTA0QTkwMDBGN0IzRTcyRkI2OTUwMzFGQkY5RjcwQTc5RkY3NDhCN0RGCis6MTA0QUEwMDA0ODc0QUY2NkQxNjg1Qzg3RThENDdDOTlGOTAxRjY0RjA5Cis6MTA0QUIwMDBFMkZENkEzMTNCNDcyMDZBQTE3Q0I4NUVFNDc5MDJGQUU0Cis6MTA0QUMwMDA1MzM2RTUxMUY1MUQ5MkRBMUQyRjY5NURFQTJGOEVGNTNCCis6MTA0QUQwMDBGNzg1OUJFMUY5MjZDRENFNTY3NjFFMEREN0Y0MTI1REYzCis6MTA0QUUwMDBGMzkyOTM3MDcxRTZCOTdENkY4Q0ExRkFFQTQ1QzE0RERFCis6MTA0QUYwMDBGMUJFODcxRjZBN0FBQjI3M0QzOUQ5M0U1OTVFNTQ0RkM0Cis6MTA0QjAwMDA3QTcxQzZGNEQ0RUQ2RjFBMkVFQTgxRUI0MUQ3NEJCRDEyCis6MTA0QjEwMDA1OUQzOTNERUFGOEQxRkExRTlBMTE2MzRCREVFMThDODlECis6MTA0QjIwMDBGRDVERjM2RkZEMUNEMUY3MTc0OEUzRTM3NTdDQ0RENzJFCis6MTA0QjMwMDBGNjM3MjE5RjlGOUJCNTg4MUI1RjMxQzM5NzYyQjk0NkFCCis6MTA0QjQwMDBBQkZCQjFFQkNDMEI2REVDREU0OEI3QTcyRUY3RjI3Q0RDCis6MTA0QjUwMDBFRTA3MThBNzk1RDRCNDk4OURBMzI2QThFOUVEOUVGQTcwCis6MTA0QjYwMDAyNjREN0Y5MjlEQzc5NTIzNEQzOUI3MzVBMkZFMTYzRTNGCis6MTA0QjcwMDAyQkZBOThGMkE4RTY4QTVCRDc2QThBM0E1ODVFN0FCRjFGCis6MTA0QjgwMDBFOEE2N0Q5NUZEQjJGMjNBREFCNzhFM0I2OTlCNjBFRUZFCis6MTA0QjkwMDAxODQ5NzU0NjJBRDNCRjJFNUY1OTNGRkY3NUE5MUM3NzY4Cis6MTA0QkEwMDA2MTkyNDc5N0YzODgxMDY2RjY1MjVGMTBEQzNDQ0Y4RDE4Cis6MTA0QkIwMDA1QUU4RkU1MEY3RDM0NDc5RTc2QkYyOEE0RTYxOEM3MDY1Cis6MTA0QkMwMDAzNUM5RTM5M0M5QkYwMUNGNDEyNjhGRkRFMDMyQjY5RUMwCis6MTA0QkQwMDA3QTY4OTk2NzY4NkM5REMzQUFDMzRDN0M4NzgxQzcwMUJBCis6MTA0QkUwMDAxRDk3NDdCNEZCODgyMzJCNUY2Njc5QjBCRUNFRkQzRDkxCis6MTA0QkYwMDBENzA5MzQ2NkY0NUM0N0U3NUY5MkNGQ0YwMUREMkYzQUU3Cis6MTA0QzAwMDBEMzM4RkVDQjVBM0U2MDdDN0E5Q0E1MUZEREMzRTlGQUZGCis6MTA0QzEwMDBENEY1MTZFNzk3MDZGREU4RkVBNUZCOTM2RUQ3N0ZENTgyCis6MTA0QzIwMDBBRjYwNzkyNkNCNTcxRkQwRjZDRDdDMjQyQjc2MkUxMDgzCis6MTA0QzMwMDAzRUU5QkNCMzVBMTA5Nzc2QzNCOUM5RjI5QTI5MDMzRTJDCis6MTA0QzQwMDBCMzA0N0E3OUFFRUIyOUYxNzlBQzlFNzJFNzkxRkVBN0I1Cis6MTA0QzUwMDBEOEIzNEQ5NDA3NDA0QkY2RkU4MkI4QkNFQzYzQkFFRjc0Cis6MTA0QzYwMDBBMjc4OUEwOUZDN0QwNkEwNTdDNjlERTc3QUJFQTY5RjRBCis6MTA0QzcwMDBEN0Y4NUJENzhENEIxQzVGOUZBMTlDQTBGRTlBOTE4QkIwCis6MTA0QzgwMDA4QjI4OEZGODQ3QkU5N0U5RUYyNEI0NUIyNkUwN0NCNTBDCis6MTA0QzkwMDBDNzIzRTU0RTM5NTZBRjVDRkJGN0IwRThBMkZCQzAxRDU5Cis6MTA0Q0EwMDAxRTQzQkQ1MDdCN0EzRkYzRUYzQTg4QUNBMkZBNzZFRTEyCis6MTA0Q0IwMDA5QUY3MkE0NjkxREQ5RkM2N0MxQ0Y5RTZCNzdBRDhCOUU3Cis6MTA0Q0MwMDA3NzYyQ0JFRDIzQTg5NDlEQkJCMjkwRDE3NzZFQkQ4MzY0Cis6MTA0Q0QwMDBEMzZCNzgzRTM3Nzc2NUM5OTM3NDFGRkY3MTkyNTI0RTNDCis6MTA0Q0UwMDBGOEVFNUEyRkI4QTlERTFBQkJCNTY0RjkyREQ4M0ZENjE1Cis6MTA0Q0YwMDA3MTY1MkFDOTdENjhDQkM3MTU2M0E4NkU2ODE0OTlCRjEyCis6MTA0RDAwMDAyODVCMUVCRTkxRkE5NTBFRDE0NzVCOUQwRkVFRTVCNzZECis6MTA0RDEwMDAxMEJFQ0QyRUU2NkY4N0I1NzNBMjU5RTIzODdCNTc4QjU0Cis6MTA0RDIwMDAxMzA3QkE1QjhFQzNCMkU2RTYyMjEzQUREQjg2RTcxMzQ4Cis6MTA0RDMwMDBFRUJGQ0EyMkI3ODdBOUVFN0JBRDlGNkYzM0U5MEJDQkRECis6MTA0RDQwMDBENDZDQzREMTcxODFFN0RGMzUxNkIwMTFBRTBFNDg5MTM1Cis6MTA0RDUwMDBBNTI0RkY4MUE1OEU2MTREMjQ4MDc4RTExQUYyMEI0NUQwCis6MTA0RDYwMDBBQkIzQjA2RTYyRUJFQUZBRDJENzhGNjhGRUEyQ0ZBM0U0Cis6MTA0RDcwMDA4RkVCQTQ3QzhBQ0UwRjREREUxMzJENEZERjQ4NzlDMjE2Cis6MTA0RDgwMDA4OTZEODU2OTEwQTdGNzEzQjQyRkQ0Rjc5RDE4MTc1RkE1Cis6MTA0RDkwMDBFQ0E1RkUzQjk0QUZERjQ3ODQ1ODVCQTNERDFCMUU5MDYwCis6MTA0REEwMDA1QTA3RDBGQjVCQ0NFMzhGQzZFN0U1OUZCNDI1RDkwODUzCis6MTA0REIwMDA4Rjk4QzcxQjlGNEJGQzNDQzEzQ0RFRjAxQ0ZERTZBODU2Cis6MTA0REMwMDAzMURGRDdFQTNCQjFDQTE1RTgyNTBFRTk2RDYyOUVERkY3Cis6MTA0REQwMDA5NTZGQ0YzODc2MTVGNEM4RjM3NUJGNEIxQ0FGRTdGNTY4Cis6MTA0REUwMDBEREY3MkMxRkRBMTNERUM3OEM3MkMxMjVENjNGMUQ0NEI4Cis6MTA0REYwMDBDMzYwRURCNzhEN0MxN0U1OUQ5NEYyQ0ZFRDExQUEyNzI2Cis6MTA0RTAwMDA1QkFENkUyQkVBRjcyOEY5MTVCRDA3N0M0OUU0NzlBMjYyCis6MTA0RTEwMDAwRDdDNjFDNEM1RDEzRjhFRjA5MTFGMkVGODkwRkJERDUzCis6MTA0RTIwMDA4Mjc2MjE0NEFGRDhGN0FGN0Y0MDI0RkUzQjM2MEFEMENDCis6MTA0RTMwMDA0Rjg4QUJCMzFFNTk3RjIzQjlERDM5NUY2MDU1N0ZFNERFCis6MTA0RTQwMDAzRkI3NERGMEE5NEM0MkM1OUU1MDVGQkREMTVGRUVCQjUwCis6MTA0RTUwMDBCRUZBQkU3NTk1N0VDRjk0QThGNzJCMEJCNEZBQ0EwNzlECis6MTA0RTYwMDAzRUEzREU3OTdEQkUxQkUxNTMzQUJDQTdERTRGMDcwM0FDCis6MTA0RTcwMDBBQzhFM0ExQkFDNjFFREU4RjZCNkIyMUM5NEZGNTNFMTgwCis6MTA0RTgwMDBDODQzNjNDOTdGMUMyRTc2NEY3MjNBRDhDMDVFMDI5RTFCCis6MTA0RTkwMDBFRDE4NzE2MTI2RUFFNzU1QkJDQjRENzFFMzZDQjA5MTFCCis6MTA0RUEwMDAzREVGQzY4Qjg2Q0Y2Qjc3RUMxMTczODBGMUVGMUM4QkQ3Cis6MTA0RUIwMDBGQ0JCRUMyRTdBQUREMUNCRkIzNjZFNUY4MDY0RkU3RTAwCis6MTA0RUMwMDA1NEFCQjdFRjVFM0NBQTFGM0REN0Y3N0JGMjNFNkU2NzRGCis6MTA0RUQwMDA1REZFOTNEQjZFNzc1MjdFQkFFN0U3RTkzQjQ3OTM3RDUxCis6MTA0RUUwMDA1MzVDNkU4MjUxRjUwNjExMDIyMzAwOEU2REUwNzFFODZECis6MTA0RUYwMDBCOENERjUyNEREOTcxRURGNzg0MzE2RDU4Mzc3NDg1RDVFCis6MTA0RjAwMDAxNjFGQ0VFQjdCQUREMjQ5RjcwMjdGMzM0NzlENkU2QTA5Cis6MTA0RjEwMDA5MTNGNEM3Mjk4NDMyMkM1QkYzMTUzODFCRDA3MUMxMzhBCis6MTA0RjIwMDAzNjgzRUM2MUFGRTgxOTRFNDY5RjM2ODdDMjQ4OUZBMjkwCis6MTA0RjMwMDBGNzgzNzQ2RTVGNDhFNkVGRTlCNUY3N0U3N0JDQzJFRkEyCis6MTA0RjQwMDBEM0JBRUY0RkI0N0I4NEIxREE3RTk3MTVBNEU5RUY3QjM3Cis6MTA0RjUwMDBEOEYzQjI1MkZFRkM5MzhEREI2N0QyN0MyN0I2NDg2RTQ1Cis6MTA0RjYwMDA5MkY3RUMxNjg5Q0RCRjEwRUI3ODEzRTJGMDM4RTI4REEyCis6MTA0RjcwMDBFMkQ3QzJGNzQ1MUY0MUZBQzQzNjVFMjcyRjQ0RENEMjgwCis6MTA0RjgwMDA3RDcxREQ2MjQ5QjFCODdBRTJCMTRDRTdEQjI5QjBGQTU0Cis6MTA0RjkwMDA1QUM3RTU0MjI1NTRDRUY0QUVFMUQzODY3RjJFRTI5MTg2Cis6MTA0RkEwMDA5MTBBRURBQjQ4MUY4OTM4RkQ1N0VCRkUyNTg0Q0JERTE3Cis6MTA0RkIwMDBFMjQxMDIwRTc0N0RFOTc4ODhFMTEzMTgyRTc1QkJBN0QzCis6MTA0RkMwMDBCNTBGOUI5MEMzMDZBODJDNUVBODEzNjExMEU1MDVDRDE0Cis6MTA0RkQwMDAxNjE4NjQyNjFDOTg5MjdERTRFNzhEMzZFNzUwQkE2NzcwCis6MTA0RkUwMDBGQTMyODlCN0Y3OUFEQ0FGNTNCREZDQTU0OTk2MDQ2QzM5Cis6MTA0RkYwMDBGRjU2RTA2MUUzRUYxNTdEOTM4OTk2MzJBMkVDN0U0MDg3Cis6MTA1MDAwMDAyQzMzMjkyNjNBRUY5QUFEMkM1RTI0QzY5Qjg3MEE3ODZBCis6MTA1MDEwMDA3RUVBMjVCMDYxRkI0QzgxOUJFNzhGRDBDMEYyMDdCREQzCis6MTA1MDIwMDBDNTBERTY1MjdFNTI5OTkyRjY4NThDMkMzRjJGOTgzMTExCis6MTA1MDMwMDA4QkRFRTM1NjhFNEQ1QjlBOEY5OUU1MkYwQTY2Q0QzMjUzCis6MTA1MDQwMDAyM0FFMkI0N0E0QkRFNDQ1N0FFQjE2M0ZBN0FGNEUyQjBBCis6MTA1MDUwMDA5MTkwNkUxMjZFOTgzNTA5RjlGNzE2MjgzRjJEMjg4OTIwCis6MTA1MDYwMDBBREEzQ0Y4QkNGMzdEMkYzQjdGQTA1OUVBMEI2REU2MkUxCis6MTA1MDcwMDA1RjRERjFGRTUzQTE2QjkxNDk4Q0YxQkYyQkMwRTE1N0ZECis6MTA1MDgwMDA4NTE4MUQ5NTIwOEZGMkU5NjdFODlENkE0OURGRUREOTAzCis6MTA1MDkwMDAwMjY1NUI0MTJGQ0ZFNzAxQUMyNDNEQ0U1MzdGN0I5MDZGCis6MTA1MEEwMDBGMjM1RkNGOTZEODhCN0VCMzVCQ0NEQjNEOUMzODQwQkIxCis6MTA1MEIwMDA1ODJEOURFRUM2ODU5N0UyOTJDQjRDRkUzRDUzMzNGN0JCCis6MTA1MEMwMDBGNUU2RjAxRTFBM0YxODVBRENDNzZDMkMxNURDNzgzMTU3Cis6MTA1MEQwMDBCREVGMzg4RjhFMDlDN0Y0Rjk3MDdGOUY0QUI4NUZCNDZGCis6MTA1MEUwMDBBQkEwQTBBREQxQTUwNDU0NzIxNUM2Mzc2MUU3NkZCRjYwCis6MTA1MEYwMDBBMjc5OUI1NTg4MjYzMTNCNTRCOTA5N0YwMjA0NEMxNzhECis6MTA1MTAwMDBCMUFENEI0MTNDQTA5RTk2QkM3NDY2M0ZDMUZGNEUzRDg1Cis6MTA1MTEwMDA5RkNBRTZERjY3MkNENUYwNzg3RDQ0NzlBQzBEODVGQTFGCis6MTA1MTIwMDAyNDA4MTkwNTY4RUIzM0IwRjdBQzE5RDczRDYxMEFCQzA4Cis6MTA1MTMwMDA1RDgwN0FBQzM1QkQ5NUI3NDQyNkJGNkQ3NjUyRkU3MjYwCis6MTA1MTQwMDBFNjc5RDEzNzAzQzdENTZBNzkzQjVDMTBDM0UzRjE3OUJGCis6MTA1MTUwMDBBNzY3RjBFNkI1NzEzOEZBNDBDM0NGNjk0RjM4NkYxOUM5Cis6MTA1MTYwMDBDNTBGMEZBRjNCRTFDMkJFQkM2NUM4M0ZENTNCQUQ4NEE4Cis6MTA1MTcwMDBDRUE1NDc0MEY5NzMwMUIzMzc3RkRGMzBEM0RDRkJGN0FGCis6MTA1MTgwMDAxNzdGQjg4MkU3M0JCMDg1OUZBRjU2MzNBODhFMzRENkUxCis6MTA1MTkwMDA4MjEzRjUzMTBENjUyOTQ1NUE0MjVBNjRFRkUzNDM4Qzc5Cis6MTA1MUEwMDA5RkY4OUM5NEE3QzhCNzY3RjNGNzM1RTAyNzdGRDRFRDQ1Cis6MTA1MUIwMDBBOERCQTc4N0RENTA2NENBQ0Y0RDM2OTBDODVGMDZDMzExCis6MTA1MUMwMDA0NjM3OUQzQkJBRkQyNjhCNzYxNjZGOTZCQ0M0RUZFMzNGCis6MTA1MUQwMDA5NjA4RDE5Njc0QTI5RkMzRjM5MkY0QTVGOTY1Q0Y3Mzk0Cis6MTA1MUUwMDA3M0FCODU0QzUxQjNGMTc2MTY5RkY0QjgyNEUzMUZDMjFDCis6MTA1MUYwMDBDRkJGRUI1RUQyNTJBODlEOUJDMzYwMThFMUVBREJGMjAxCis6MTA1MjAwMDAxRDNEMkVBMTdEMUM4NTcxRUY3RkJGRDUzRUE0MjJEQzA0Cis6MTA1MjEwMDA2RkI1QjZGNjY0QjE0QTM2OTM1RTMyNkQzRThBQ0I0QkJCCis6MTA1MjIwMDAzNkU1RjdFM0YxRjgyNzEwQ0YwNzFCRDMxOTNFNTc3OTdFCis6MTA1MjMwMDA0NDY2Qzc4QThFMUM5MEYxRDE5RDFEMDJDODc4Q0VDREUwCis6MTA1MjQwMDBFODQ4NjdCNEYzN0M3RjQ2NTczQ0Q1NkYyMkU1RkZERDI1Cis6MTA1MjUwMDBFRjJEOUYxQUM4RTgxMzRGQkUzOTMyQzBFRjU3NkMzNDk4Cis6MTA1MjYwMDBCRjFGNzQzOThBREIyOTFGM0E2NzQ3MzlEMDBFN0VGQjhFCis6MTA1MjcwMDA2QTc2NUZFODg3RUUzQTQ2QjgyODEwOEQyODIxN0Y1MjdCCis6MTA1MjgwMDAyNDk1REJDNUQ2QzRGQzVBREJENzEyMzdCN0UzOTIwM0FCCis6MTA1MjkwMDBGQ0RDNUQzMjgxQkZERjMzQUI4MzVEODQwN0E5NTM4NEJGCis6MTA1MkEwMDAxMEQyM0YzODIwOTY4NDkxQjU1OThCQ0JENjZDMTNDODU5Cis6MTA1MkIwMDA3MUY2NDg5MjkzNDE4RUFCREY0MDU1MjI1NDI3Q0RENkVDCis6MTA1MkMwMDA3MDkyMzIyOENERDBGRjgwMTA5MDQ4QUVEOUY2MDUwQ0YwCis6MTA1MkQwMDAzNzBFREYxNTg2RjkyMjc5RTU5RDRDMUYwMTlFREZFQTI2Cis6MTA1MkUwMDA3ODAyRjFCNDk5RTRGQzYyOUMwMEU5ODg4QjFGQ0NDNjdCCis6MTA1MkYwMDBGRUI4NzlBNTcxOUY0RDEyNTg2QkNDOEI1MTJGNDcyRjVCCis6MTA1MzAwMDA4NTI3QkY4RUE3QzEzMDk4RTEyOTQxM0ZFODFGMkNGRkI4Cis6MTA1MzEwMDAzQzg3RTczOEE1NEQ5ODVEM0MzNjBFRTkxQjNCMjUwOEQ4Cis6MTA1MzIwMDBDOTJDREY2NEZFNzM0RTQ5NjFGN0Y3MkIzNTNERTlCOEIwCis6MTA1MzMwMDBGMzBGMDQ4NzgyRjNCQTRBOEQ3QTRCNTU4QzdBNEI5RkQwCis6MTA1MzQwMDA2QUQ0NTNBNkRGQTg5NzdFQjNCRDg2RkVGRTgxRkYzMEU4Cis6MTA1MzUwMDBGNEU3RDQwQzM3RDBCOTBENjMwQ0ZDNTczNjRFMzREMDdCCis6MTA1MzYwMDAxRUY1M0EwMzdGRkVFQTU5MDZCQUIwRjUxNjAzRkZDMEYwCis6MTA1MzcwMDAwREYzMENGRDgzNDMwQjBERkQ1NzZENUI2MkEwODdCNEVECis6MTA1MzgwMDBERjZGRTBCRkJBNjM4NUExN0Y1ODc4QURBMTdGNDRFN0E2Cis6MTA1MzkwMDA0RjBDNzQ0OUU0NjcwNkZFNTEwNzM3MUJGQTQ3NDc5RkQ1Cis6MTA1M0EwMDAzMUY0OEYzREZFQTI4MUJFQjZFQjM3MDZGRUYxRTdGNzgyCis6MTA1M0IwMDAxQUU4MDlGMEE2ODFCRkNDRjY5RTgxOUVFQ0ZFOEI4MTk3Cis6MTA1M0MwMDA3RjRBRjZDNzg2RkU2OUYyMjk0M0ZGRjQ0MTlGMUJFODM2Cis6MTA1M0QwMDAwQURGRDcwNkZFQjYyQjAyNEYxNDYyQzg5RjZENUE3N0JDCis6MTA1M0UwMDA0ODA1OEFDRkYyOEZDNzIxOUU2RkNBMzBGQkMyQzQ3NEIyCis6MTA1M0YwMDA5OTc1REI1Mzg1NUE5RUE2RTFGNjBCQjBERjY2RjI3RTA3Cis6MTA1NDAwMDA3QjFDNUM0Nzc5NDEyNkUxN0EwNkQwN0RFRkI5NzY4MTM1Cis6MTA1NDEwMDBFMUJBQUZGM0Q5ODVGOUFFMzk2RTFGQTk4QTBEMEJGMDQ5Cis6MTA1NDIwMDAxODlEM0VENTZEQTAzM0ZERDkwNkZFN0VCMzY1NDM3RjQyCis6MTA1NDMwMDBGRkMwMjA0MzdGNEU4RENGNDBFNzM2OTQxQUY4QUY2QzAzCis6MTA1NDQwMDA1NDBDQjQ0NzlENkFFMENGNUZFRDM3RDA4NUFEQjMwRDA2Cis6MTA1NDUwMDBGQzAzMzcwNDBDRkQ4MzQzMzU4NkZFQUJCNjM1MThFOEY0Cis6MTA1NDYwMDAyMUVEOEQwNkZFQUIzQjU0NDNGRkIwRjA2QTQzRkY4ODRECis6MTA1NDcwMDBDRTU2MDM1RDEyRDk2MEUwMUY3NTMwNjRFODFGMURERDU0Cis6MTA1NDgwMDA2NkU4MUY3QkJDREQ0MDVGREJENTYxRTAxRjdGM0U2Q0MzCis6MTA1NDkwMDBBMDI3QzAwMTAzN0Y5OUVENUQwMzNERDlGRDY3MDNGRkEwCis6MTA1NEEwMDA5NEVDMjM4NkZFNjlGMjA5NDM3RkVEMjk4NDFGRTVDRjQyCis6MTA1NEIwMDBBRjBBRUNGREQ3RjQ0MTlGMTlGQUE1MENDQ0QzRTk3RUQ1Cis6MTA1NEMwMDAxQTkyN0RGNDFEN0U2MjlFQUVFNzZGMTVCRUFGMENFQkE3Cis6MTA1NEQwMDBEQzZCNkE2MERGQzU3RDY5RTI3OTlEQTNDOENCQ0UzN0ZFCis6MTA1NEUwMDBDQ0RGNkQzNjE2NjdGMTg0MUFDMkFFNUE5QTI4M0Y3NTIyCis6MTA1NEYwMDBBOTAyQzMxREE1MUE1NUVDQkUzMDgzQkQ1NzYwNDdBMzUyCis6MTA1NTAwMDA0Q0RGQTE2MTdFODM0NDlBQzlFM0ExRkEyMTI1OTY4N0U1Cis6MTA1NTEwMDAwRUI4MzhFMkJCRTdBMTM5NDVDMEYwN0Y1RDUxQzA1REYwCis6MTA1NTIwMDA1NDQyRjVEODBCRTU1NDlGREMwOUVBMkE5MjAzQ0Y1NzgxCis6MTA1NTMwMDAxN0JENjc3QTNCQzk3ODZGQTRCN0QzNkNBOEJGQjhGNTFECis6MTA1NTQwMDAwRTI0QjUwRTE4N0UwOUJGOUQ2NjNCQ0RGOEJCRTdENThFCis6MTA1NTUwMDBFRTk1MDREQ0RGOTJCOEY5MUZDMkJBQzk4QzI1NjQ2QkUyCis6MTA1NTYwMDAxMEZEMEJGREY0Mjc0MTM3QTMxRjA5NjYzM0ZBRDFBMEM0Cis6MTA1NTcwMDBDQ0RBMERDMTQxQUNGRDU5RDBDN0ZBMzcwNjRCMTlGRDQ1Cis6MTA1NTgwMDA3ODUwNjE3NDI4Mzg5NUI1OUI4MzdFRjY3QzRCNzAzNkQ1Cis6MTA1NTkwMDBBMzlGMEMwNjU4QkIyRDU4QzNEQTY3ODIwREFDRkZEOTA4Cis6MTA1NUEwMDA2MDIzQTM5RjBGQUFBQzZEMEZBRTY2Q0Y1RjBDQjYzMjFGCis6MTA1NUIwMDA3QTQ3NzAwM0EzN0YxRDBDQjFCNjIzQjg4REI1QkYwOTIwCis6MTA1NUMwMDBCNkIzRkU5REMxMEU0NkVGMEE4NjE5MUQwRTc2MzI3QURECis6MTA1NUQwMDA2RjMwQzJFOEZEQzE4MzhDN0UyMzE4NjU2RDY3RjAzODlCCis6MTA1NUUwMDA2QjdGMTdFQzYyRkQ2RjA1Q0YzM0ZBQjQ3NkRGM0ZCNTAyCis6MTA1NUYwMDA4OEU3NUZCQTVFNzQxQTYwMTJDMzgzOUVEN0NFQTRCQURFCis6MTA1NjAwMDA4NUMwNTEyQTlEMzVENDJEMDlGNTQzQTIzRDRFNkFFQjQ0Cis6MTA1NjEwMDA0ODEzRjFEOEE2M0NFNzhBQTJDRENENzFGOUZFN0YxNkRBCis6MTA1NjIwMDBGMTdCQzEwNzkyNDE0REMyRjhENzQ0QzUzQzQyQjEyOTM0Cis6MTA1NjMwMDAwRDQyQ0RFQ0ZEMkFDRkJCQUIzNTVDNDIwNkNGQjcxNzkwCis6MTA1NjQwMDA2ODcyNTU2QkZFNTA0MkY4MUNDNEYwRjlENkU1RDQ0OTk3Cis6MTA1NjUwMDA3QTlEREMzMjIwMzBCRjA4REI4NUI5MjY5NUREMTNEODcyCis6MTA1NjYwMDA0MzQ1OTRGNzNGMzUyMDUwNERCODNERDc3MEM3MUI2QzZDCis6MTA1NjcwMDAzREI3QUY4ODE2QTlCMDg2MzM2RkEyRkI5RjAzMjJCQjRDCis6MTA1NjgwMDAyRkVENkJCRDdBRURERjJGRjREOUJGRUJDNDAwM0E4NzY1Cis6MTA1NjkwMDBBNjdFMjNCMkZCRjRCNzI1Qzc2Q0JBMUZCOTRGRDNDQjk0Cis6MTA1NkEwMDA3RDQ1MjY0MzNCMzREN0RGNDg3MjdFNTJEOEYwRTRERDk3Cis6MTA1NkIwMDBDODUyQjVCOEQwNDU3OUVCRjU1NDVBQTNERjU3ODIyQ0MwCis6MTA1NkMwMDBCMUVGNjM0MTc5OUQzRTk5RkMwMTI2NzY0NERGMDQyQUJGCis6MTA1NkQwMDA2QjNCNzIwMjREMzRGRTY2MkMyMDg4MEU4Q0IxRTZGNUQxCis6MTA1NkUwMDBCNjlGNDQ3OTFFRDQ3MEYxNjA5MUM5RDA0RUNGRjVBRjBBCis6MTA1NkYwMDAyNUZEMUMyRDU0MENGMkE4QjlCMkY2QkQ3QkQ3RTMyNENFCis6MTA1NzAwMDBENzNGNUVGQkVDOTg5MDFGRDNCNzdFMkZCMTZBODJGNjJECis6MTA1NzEwMDBGREQ0NjI0MTdGNEZDREYzNDExQkU4RjkyMEVCQUY1QTM2Cis6MTA1NzIwMDBDQUVGNjc3RTg4NzUxOUJEQUZGQzUwOEI4N0U3MUEyNEQ2Cis6MTA1NzMwMDAxNjJGQUI4NDY0MUZFNUQzRTcxQTk2MEVBNEZEMjRDNjhBCis6MTA1NzQwMDBDRDJBMUM2N0MyNzE1NUMwQkY4N0E4RkEzMDg1RTEwQjBFCis6MTA1NzUwMDBFNzAzN0FFRjU2ODU5OTNCRDU3Rjc3RTdFQUY3MUU1MTQ1Cis6MTA1NzYwMDA3QjI2OTc0N0ExRjdCMDczNzY1QURCQTg0RTQ1OUMzQzQxCis6MTA1NzcwMDBDREUyRDg2ODUxQjU2MDlERkNCNjI5NTQyNDg4MEMxRjMxCis6MTA1NzgwMDAxNjAxRTVBRENFNDA3Q0Y0OTIxN0U4Mzg1OEE0RkRGQjM1Cis6MTA1NzkwMDAxOEZEMzlFMjZCM0JDRDc3RjY5NTUxODNEODdCOTM1RDRECis6MTA1N0EwMDBBMzY1RDI1RkIzMDlFRDQxRjczNUJGMTNGOTc3MTI3NEUyCis6MTA1N0IwMDBDNTRFREY3MUI4OEFEQkQ4NzdGRTk0NDQ5MEJENDYzQjc2Cis6MTA1N0MwMDBEOEZCOTAzRDIyMzRCRUQwNEJGQzdDNUZCM0RCREJEOUYxCis6MTA1N0QwMDBEMkQ0MTA5QkQ3Rjg5RUVGRjcxQUFFN0VBRkUxQUQ2MjQwCis6MTA1N0UwMDBFRjgxREM3QjcxREU0NTlEMTJBQjc3NjA2NEI0RDhERjVFCis6MTA1N0YwMDBDQkY3NERGNThENkZGNjJGODhEQjQ3N0RDNzExRkU1RDJBCis6MTA1ODAwMDAxNDQ0OEJFM0JGODczQUFEQ0RBQkUzNDlCNDM4MDI2REE2Cis6MTA1ODEwMDBGNjc4RjkzODhFMTBEN0VGOTExRTEwRDdDNzI4QUY5RkIyCis6MTA1ODIwMDA2OTk1NUQzN0UxRDAyOEFBMjY4QzZERTAwOTM3RkJBRTdCCis6MTA1ODMwMDA0RUZGQkU2RTNFRjg1OTVCOEQ3MDIwMUNGQkQ1RjVBQzVCCis6MTA1ODQwMDBGRTVEMDhFREVDRjlBMkQyREJGMzg4QUU4N0FFNDlEOTU0Cis6MTA1ODUwMDA1NEJGQUM2RTdBM0QxQkE1QkJBMTc1RkQ2NEJBN0Y5RTlCCis6MTA1ODYwMDAxNTlBRkIzQUI1OTU1Qjg0NjM1NDc3QTM1RjFDMjVCRkZCCis6MTA1ODcwMDA4ODBBMEQyQkE5MjRCREU1RDkwOTJCRTk5RTc3QTZDODc2Cis6MTA1ODgwMDBFRDAwNkY3MjNCMjA4RTE0MzFBREU3RkVEMDBGNEVEMThDCis6MTA1ODkwMDA3OEY0MDMyNkJGRUUwNzU1MkIzODdFRjQ3RjhGRDFFREM5Cis6MTA1OEEwMDAxN0E1NzdGRDM1ODdERTdEOThCQkQ4NzcyMUY1QkJBQzkyCis6MTA1OEIwMDA2OTg0QUY4NTU0Nzk4QUYxNzlBMTdFM0VGM0JDRTAyRUVDCis6MTA1OEMwMDBDQzBCODhFRkE0QzRFRDdGRjI1MDEyRkI3NzJGMjcwNTk1Cis6MTA1OEQwMDBDNEM3RjA5RUI4RDdGM0NDMkY0REZDREVFRDVFMTFCN0Y4Cis6MTA1OEUwMDAyODUyQkRGQzMwRDM1MzhEMkQzNDk0RjQ4NEU3QjMzNDY3Cis6MTA1OEYwMDA5MDcwRkQ3MUZCQUE2MTc0REYzNzMxOTQ0N0Y5QUFGNDA3Cis6MTA1OTAwMDA4Q0Q1RDdFQzMxQzQ3OUI4OTgxMkJCQzc3QjQ4RTJGNzg1Cis6MTA1OTEwMDA2QTg5RjJGNkM4NUI0QURGRjg4QUYyMDlBQjA1NTQ3QTY1Cis6MTA1OTIwMDA5Rjg0RkVDRkZERkUzMDk3RkY0QjUzMjBGQjFBOTFFNzdCCis6MTA1OTMwMDAyQkFDOEUxRUUwNjdGNTNGNjREOTdDNkI4NTlFRUJCNzgwCis6MTA1OTQwMDA2OEVCNzZGRTkzRDdEMzZBMkVCMEVGNzExMkU1MTBEQ0M4Cis6MTA1OTUwMDA3Q0RENDQ3OUFDQzk1QzBFRkREQ0U5MjkwRkI3ODMyRUYwCis6MTA1OTYwMDBDRjkwODExRTdFMkVFNjI5NkNERjREQTY1NDE2QkYzRUQ5Cis6MTA1OTcwMDAxNTAzQzVBNDM3RkQ3RTRDQUY2MzNCM0Q5RkIwQjgwRTA5Cis6MTA1OTgwMDAxNzlBMDdGMEVGN0JDMzdEOURBN0E3QkJFQjY3NkZFQzcyCis6MTA1OTkwMDBCQ0QzRUY5OTYwNUNFRkY3ODI3RTlCNUIyMkJCQ0QwMkFDCis6MTA1OUEwMDAxRjhCRkI4M0UxNDM1RDNGODY3QkMyRkYwMzUwNzNBRkQ4Cis6MTA1OUIwMDA4NkUwMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA1OUMwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQjdCQzRDRUMwRjBBM0JBCis6MTA1OUQwMDAxRTgyMjUzODEwNkM2MjcxMUQwQjAzQzMwNzU2RDJGNTY5Cis6MTA1OUUwMDBDMTcwMjU1MDdGMDkxMEU3MDM3MTE2MTBBNzAyNzEwMkRDCis6MTA1OUYwMDAxMDQ3MDM3MTE4MTBCRjA2OUFGRDBDODgxRjAyRjExRDk1Cis6MTA1QTAwMDAyMEJFMEVDNDk3ODBGODJDMTA5RjQwQjI3NzE5MUIwMzVDCis6MTA1QTEwMDBDMzVBMzZEMkVERkY4M0U0RTc4OTQwNzYzOTEwQ0YyNEFDCis6MTA1QTIwMDAyMzFDNDZGMUYwQzBGMjNDMEMwQ0RBQkMwOEZFM0U1RUQyCis6MTA1QTMwMDA1NDc5MDUxRTA0N0JCOTIwNjU3NjZEMDNFQTA3MDBFOUY5Cis6MTA1QTQwMDBDRDQyNEE4MDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdBCis6MTA1QTUwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkQ1N0QwQjc4NTRENThCCis6MTA1QTYwMDBCNUYwM0U4Rjc5MjUzMzkzQzk4MzkwNDBDNDkzOTcwNDUyCis6MTA1QTcwMDAwOTM4MjQyMUYyQUExRTA4NDJBNEQ0MDZGNDJBNUFBRUY4Cis6MTA1QTgwMDAwRUM4MjM4NjkwNDRCMDJEQjc3MjlCMjEwOTJGNDExQjZECis6MTA1QTkwMDAxNTJENUFCNDgzNDU4QjBBMzZGMjY4RDEwNkVFRjAyOEVDCis6MTA1QUEwMDBDNjVCQjREMUEyODJENTM2RDQ1QjQ1MEI0OTQ0MTE2Rjk1Cis6MTA1QUIwMDBCNUJGNzdBREI1RjdDOUNDMzkzMzQ5NDA2QkZGN0JDMzcwCis6MTA1QUMwMDBDN0I3QjNDRkQ5NjdFRkI1RDc1RTZCRURGNURBM0I3NkU1Cis6MTA1QUQwMDBEOUM1RTQyQjE5RkIwMjdGQTA5Q0EzMzBDNjA2NDRDQTlCCis6MTA1QUUwMDA1MTc3NUVCQjY4N0IwOUZDRkU5OURERkZCODE2Njk2N0RDCis6MTA1QUYwMDA5NDE3MzM4OUIxRDFGMDlFNjUzMDU2Q0FEODk1NEVGOEM3Cis6MTA1QjAwMDAxNURBOTVCRDcwRUEwRjk3QTUzMUI2OUYyOUNDMDE4RkE0Cis6MTA1QjEwMDBDMjZBNTlFQUI3QTA5RkZEOUYzMzNGQkU5NzVGNzA2Nzg3Cis6MTA1QjIwMDA3NUI4RjFCQjIwNjNFOThDNURDMUY4NzdFMTZDMkRDQkQyCis6MTA1QjMwMDA1Nzg4MTUyNkUzNzNERDQ5QkY0MzNGQjk5QkVBRTBGQjc1Cis6MTA1QjQwMDBCMzlGQkFFOTdCMkIxQzQ2QzkzRTk3NTk1ODdDRjM0NTU1Cis6MTA1QjUwMDAwRUY2QUI3RURDNTEyMEVBRDkwQzA2NjcwMkRFMkMxQTY5Cis6MTA1QjYwMDBENzgwRjdEMERCRUYxMUJDMDc1NDgwNTc4QjMzQkUxM0JGCis6MTA1QjcwMDBFMDRGOEJDMEJGOUY1RDlCQzQwQTM5RkM3QTY5MDRGRTZECis6MTA1QjgwMDAwQjg1ODdFNjBGNzg2RUFDRDdCRTk5OTdDRkQ4QkE3QUQ3Cis6MTA1QjkwMDA0NkU1REE3QTI3OTVBQkVCN0RERkNDQjMzMUI2QjIzRTgyCis6MTA1QkEwMDA4M0NBNDYxNTNFMDEzODFBQjdCMDUwMTA1MEVGMkU4NDA0Cis6MTA1QkIwMDBGNjQ2RkZGMDNGMjFDRjY5QUEzQkIzN0NBNkJBM0QwRDY0Cis6MTA1QkMwMDBGQTI5ODhENDU1Qjc2NkFBMzdCQTI3MzkwMzZFMUMxRjNECis6MTA1QkQwMDBFNkVFQzBGMTlENTQwMjk4NDczMzAwMUY5NzhBNzlCQUM4Cis6MTA1QkUwMDBCNEUwMkMwNkVCOTFFN0I2NkIyMTgwRTM1MkY3ODJFOTMzCis6MTA1QkYwMDA2QzI0QjZDQjI3QkNEOTA1NUU5NzY0MzY3NDIwQkMxRkQ1Cis6MTA1QzAwMDA0MzNCMDZGMzFERTY5RUYyM0VGMzMyRjY5RkQ5NEZGMDdBCis6MTA1QzEwMDA3OTZDNjA2QzIwM0M1RkZERUY3NTFEMTJGNEI3MzJEM0Q4Cis6MTA1QzIwMDBBRTM1NDA3RjRGQzBGODZCMUM1MTc4RENBQUZFQjkwMzNCCis6MTA1QzMwMDBGQTc0QzIzRkM0RTNEMDhEQkMxRTk5MzdENEEzRTYzMUI5Cis6MTA1QzQwMDA4QzQ1QkRDRjhFRjQ3M0ExRkRFNjM3OUJFQkQ2N0VGMzdBCis6MTA1QzUwMDAzNDdEMTJEMkFCRDE2RjNFQUI2OEYwQjlGRkY3RjY3QjYzCis6MTA1QzYwMDAyOUUwM0MzNTI1RDJBRjMxNEVCRkZEMDIzOTU0QzBCN0QzCis6MTA1QzcwMDBGOTFCNTkyODlDMUQzQjRFOUVFNjJGMEZDMkZCQkM4RDg1Cis6MTA1QzgwMDAyQTBCNjVGM0U3NjlDMDE3NzlGQzU3RDZFNDlCOTQxMDlCCis6MTA1QzkwMDAyODhDODU4NzQ1OEY5MzEzNTk5N0JDMzRGQjFDMTlFOEQyCis6MTA1Q0EwMDAyOTJGRTNGQTQ1MTJEMjU1NzNENEZBRTYzMDY2RjBDREM3Cis6MTA1Q0IwMDA4RkVBN0Q0QzFGQ0FEOERERjUwNTU0NkVBOUY3RTlDOEY3Cis6MTA1Q0MwMDAyNzc3RkY1RDk5RDU1MjE4Q0I4RjdGMTFGMkVBMUUxQjAzCis6MTA1Q0QwMDAyM0ZBMEIzRUNFNDI4RjRCRDg1RkM1QUMzOTUwNUYzRkE1Cis6MTA1Q0UwMDAyQUJERTgyRThEODg1QzQ2NzlFNjEyNzRCQzVFRDI2RUMxCis6MTA1Q0YwMDBDOEMxRjZBRjI4MENFNUEwOTUxRkVFQjZFOUQzQjBCRjNBCis6MTA1RDAwMDBCNUEzNjRBOTAxRjE5Q0M3RjkyMUNGMTY3NkU2NjJCRjVECis6MTA1RDEwMDBDRDM5QTM4MkQ4OEZGRjU1RTI4N0JDRkM0QjM0MDVDNjMyCis6MTA1RDIwMDAxRDk2MjdGODYxRjQ4MzRFOTQ4NzNERjM1Rjk2QUVFN0E2Cis6MTA1RDMwMDAxNTMzOTY2NEExMDNERjc5RDI4MTZGNDJERjc0RjA3NTY5Cis6MTA1RDQwMDBGMUMzRDc0NzVGQ0Q3REQyRDc3QUZGN0RFRjNCRTBGRDMyCis6MTA1RDUwMDA5NjNDQkJBNjY0QzdDMjk1Nzk3MTM4QTNDMjFENEI2RjMwCis6MTA1RDYwMDA3OTc5ODJDRUZDN0REMzk5QjU3Q0IwM0VDNERFMDExQTMwCis6MTA1RDcwMDBCQUJGM0U4M0U4RUVERTdBOERDQUI1NDg4NzMwRUYwN0JBCis6MTA1RDgwMDBCMEU5NThBODIzMURFMkI4RDcxNTUxQkRENzdEOEJBRDFBCis6MTA1RDkwMDAyMEJBNEM5RkQ1Q0M1MEZFREU4RkY0MzkwRTg3NUJBOTFDCis6MTA1REEwMDBFQjEzNjBBRTc5QTIwRTVCQTQwQzdCQzBCREY4N0UxMDM1Cis6MTA1REIwMDBENTc1RENDQUVFOTI4Q0Y2Q0YwNjc1QzA3NzhBNjgzRjNGCis6MTA1REMwMDA3NUM1QjNDMTQ2RjhGRDdFMTdBRjVGQkRBMjUzMEY2NjIwCis6MTA1REQwMDA0NTdEMUY1Q0E3RUI1OTkxRjY1MDBGNEY1MkEzRkFDM0I0Cis6MTA1REUwMDBGRTBCQTNFMTM5NDhFRDhERkVFNkFGMzhBMTA3MDFCRUY5Cis6MTA1REYwMDA3QjVEQkNCRkI1MkI4RUZENTNGQTVGMkIwNTMyNDBCNUUyCis6MTA1RTAwMDA2MEFCMkNGREFDRURBOURGQUIyMzFFOEM3MTcyQTQ1RkRGCis6MTA1RTEwMDBFOEMxRThGN0MxNjc3NEREMUQ3OTdGQjk3NDZGMTBERkUxCis6MTA1RTIwMDA2RjY0MTU3OTEyQUM0M0U2RjQ4QTBDMDZFQjZGQUY2ODI5Cis6MTA1RTMwMDAwRUUyOTZEQjAzOUZDMDc3NjQ3RTBGMTJCQ0FFMENGRUIxCis6MTA1RTQwMDA3RUM0OEFERkVCOEQ1MUVCMzM2OUM1Q0I0MTg0RDdEMDVCCis6MTA1RTUwMDA3MzE0NDFBRkYyMEI1OTRCOEYwMEJEMkE0OTc2M0ZFOUNECis6MTA1RTYwMDAxQkQ3MDFEMzY0QzI3OEIzMkE5ODA2NzBDOTY5MTUwQzkwCis6MTA1RTcwMDBFNTgxOTJBNkJFMUJDRDA3MDZGRDAxOUM2MzA5Q0VDOTM0Cis6MTA1RTgwMDAxNUIzN0E4MTMzMTgwREE3MDE0NzdGNzAxQjcwRjQ0RTRDCis6MTA1RTkwMDBBNzdDN0MyQjNENERCQTY2Q0NFRjI2QzBGRTZENkZCNzVDCis6MTA1RUEwMDBGOTUxNUQ0ODQ1M0M0MTU3RUNGMzVCODMzNjc4OUUzQUE3Cis6MTA1RUIwMDAxMzcwQUREMUJBQ0Q2MkI5QjFGREE2NEQxRkM0NDI1MTI4Cis6MTA1RUMwMDBGQkY3M0Y3QTVERjNCMENFRjExNjg4NUU1RkE4Q0Y5NTAxCis6MTA1RUQwMDAwNjQ0RjAzODU2QjRCM0QyOUYzMTNGNUJDQ0ZDQUUzNUFDCis6MTA1RUUwMDBDRDhGQTk4MThDMEE0RkZGRjNCQkQ3RTU5RjU1RTE4RTdCCis6MTA1RUYwMDA2REY3NUI0OUEyRjEyNzREMTlGMzZEQzZDNzYzMEU5MDhDCis6MTA1RjAwMDA1RkM5Mzg1RTUxNjRCQ0U0NjkzMDFFNzZBNjM2QzcxRDkxCis6MTA1RjEwMDAyRjY1MzI4Q0U3RkNGQUYwNjlFNTQ3MDM1RTdCMENCQzI5Cis6MTA1RjIwMDBCNzlBRTA1RDZCMDNCRThEQjNGRTVGMzdCQ0U3Q0I3RkY2Cis6MTA1RjMwMDAyRTkwQkZDNDdGNzk3REYzREYzRkJBQkY2NEZDMTUzRTZFCis6MTA1RjQwMDBGOTQ4NjVFMTJCMDE1Rjc3NUNFNTI0RkRERTkwNzNGRjg2Cis6MTA1RjUwMDA2QzdDQTVFMkE3QjA3RTc3QkM1NDdDRTI0QTE5MkI0MDRBCis6MTA1RjYwMDBENzIzMjJFM0Q3NEExQUVENTdCREQxNzc2RkYzODEwREJFCis6MTA1RjcwMDBENkQ0Q0ZGRkFGRjlGNDg2RDdBRjVCMEU5REFGN0M2RDYzCis6MTA1RjgwMDA3ODNEODEyMTNGQUQyQzY0MjEwN0Y0QjFCMkVEMkFCMkY2Cis6MTA1RjkwMDAzNzU3MUUyOTFCQzhBMDVGREI5QUUxNEM4NzQ5MjU2MzUwCis6MTA1RkEwMDBGRkQwREY0QTQzQ0Y5ODVDRDI0RkZGNUNDRjAwRkI0RTVGCis6MTA1RkIwMDA2RjAyQTU2QkI3Qjc4MkY0QTI5NTEyQTNFRkQ3ODNERTY5Cis6MTA1RkMwMDAxNjAyM0RBNkU0OTUwRENFMzk1OEY3RUY3MENFQzE3MTlCCis6MTA1RkQwMDA2RDhDRjRFOTkyNTcwRUY5Q0E4MENFNUQyMzUyNDYyOUEyCis6MTA1RkUwMDA0MDAyMkI1REM2RjNBM0U1QThFN0RFNTUyODlFN0I3ODJCCis6MTA1RkYwMDA3RkYwQkMwMkRCMjc4OEY2QkRDMTk1OTAwN0YwNDRBRDY5Cis6MTA2MDAwMDA3RkEyQkQzOTUwMTE0NzdGRDc2NTk5RjBGMzkwRDBCQjdGCis6MTA2MDEwMDBFRTQ2QkQwQjA0NzI2MjQyNEIwMEY1NkE1N0JBNUQ3QkQ3Cis6MTA2MDIwMDA0QzhBRkRFRTI2NTkxMkYzMDZCRDBERURFQzExNTMzMkVDCis6MTA2MDMwMDA1MUNGM0EzMEUzODkxNTc2ODRBRjkwOTE1Qzc3RTU4NTRFCis6MTA2MDQwMDA3NDE5RUFFRTAyQ0VEQjBGNTlGNjdEMzdBRTIxRTk1RDE5Cis6MTA2MDUwMDA5OTUyOTk0QURGOTlFQTc3RjdFODMxRDkxMzUxNkZGM0VBCis6MTA2MDYwMDAxNkYwRjc2NTBENTc0QzZDOEM3RUNGRkMxMzcxRkYzNTI1Cis6MTA2MDcwMDBERTA3MUE0QUU5N0RBNkIzRTJEODA0MTgzRjEzRTQ2OEE0Cis6MTA2MDgwMDAyM0UwMkI1MzZEOTZFQTY4NUREM0UyRUE4RjFCRTYzQjczCis6MTA2MDkwMDA2Nzg1MDA4NjBEMzMxRUNDOUUxRjY3M0Y4MUQ1MzRGMTg2Cis6MTA2MEEwMDBFOUEwNzk2NjNFN0I0OEUwRUY2RTgxQ0Y0Q0U0RjVEMTA0Cis6MTA2MEIwMDA4MjBFNDFCRUI5NzhEMzFFRjlFNjFBQ0FFNTVCNDI0MUE5Cis6MTA2MEMwMDBGMzBBQzRGN0EwNzlDQzhGRkFGNjg2MTk0RjkwREU2QUVFCis6MTA2MEQwMDA4Q0UzMkEzMENCQjk0Q0Q1M0NBRkFGNkIzRTFCOTlGRTVECis6MTA2MEUwMDAxRDc5NzRFRkZENUJGOTZDMjMwQkRDOEFFRDMzQzU3RTAzCis6MTA2MEYwMDA5RTUwMTA5MjAyODVGRENGREYzQURGREVFNkZEMkRDNDEzCis6MTA2MTAwMDAyNzFGQTc0RTFFMTAzQkNFM0YwQjJGOTk2RTE4QTdFNEZBCis6MTA2MTEwMDAxRjNGNEVDMjNDQjNCQzNDNUZCQ0MzM0UyMEU4OEMyOTUxCis6MTA2MTIwMDBCODFGNThFREFCODQxMjlGQzQ2NEFBQjZBMzFENEVGMkVCCis6MTA2MTMwMDAxQkUwRjZCMEU2RjI0QjgwREU1MjJCNTZERDJFODNEREZGCis6MTA2MTQwMDBFQzc5RUJFQUY3RDFDRTRFRUQ5ODQzRjY3NjUzNjE1MUY4Cis6MTA2MTUwMDBEQjI0Njg5N0U0RjdDRDk4NDI3NENBMDhDRjZCQjEzMzVCCis6MTA2MTYwMDBFMkJCQUExNTEzNjE1RThEOENGM0RENjZGOTk2ODk1QzNFCis6MTA2MTcwMDAzRkQwNjlCREJGMkI3MDA2MkJBRUE5NTA0Nzc2NjUzOTVECis6MTA2MTgwMDBGMUU2NjE2NzYxM0U2RkU5MEI0N0VDRjdCRENEREYxNkM1Cis6MTA2MTkwMDBGOTRFRjhGRjk2OTBERkI0QkZFRkQ4NzQzQkY5MTE4MzQ2Cis6MTA2MUEwMDBGMDBGRUREMjY0NEIzRjQ5QkEzREUyNjc2NDg4QTdBODdGCis6MTA2MUIwMDAzQUJDRkY2RDBGNUZERkZFNEYxOUNGQzdFRTczNkE0MDI5Cis6MTA2MUMwMDAwQUI2M0NEOTg3RjY3QTEyRjMyNUFCMjg2NzI3ODM0MkIzCis6MTA2MUQwMDAwMEEyRDg5N0Q2MUQ5NEI1RkVEN0E1ODlCMUYyOTY0MkY0Cis6MTA2MUUwMDA0RTc3MzNBMkY0REMwRTk5RUJDOTY5MzMyNzY3QUY4NDhECis6MTA2MUYwMDA3RUNGOTY3MEJGNzBBQTBGRkUxN0M1Q0U2NzFERUM2QkUxCis6MTA2MjAwMDBFMTI4M0ZDN0JBQzJDNzg4N0YxQjgxOUU3MjgwMkY4MjU4Cis6MTA2MjEwMDA4NTMyRjlCN0Q3RTZFREYwNDVGM0I1QUMxOEZFNkQyQjM2Cis6MTA2MjIwMDA3RDMwNEQyRDE1RkExRkUwNDdDOTkzNzVEN0M4QUY0RTg1Cis6MTA2MjMwMDAxRkNBOTdBNDhGQzRFOTUxREZCMTBCNUZBRjI0RTVDMjM5Cis6MTA2MjQwMDBFOEUzQUI4RTY3QUM2QjJDNUY3MUZEMjQ2REU2M0MyN0Y5Cis6MTA2MjUwMDBFQTNCQUIzMjY2MjZDNTkzQjNCREFGRUI3REI0QUVBOEM3Cis6MTA2MjYwMDA0Rjg0RTJGNDlGQTY0ODcxRkQzOTU2N0Q5RUIxQTVBNkU0Cis6MTA2MjcwMDBGNTUyMDY5NkNFREFEQ0Q3QkFBNTk5RjE2MUY0RUI1QTVECis6MTA2MjgwMDBBNjY4RkY4NUMyNEJGNTkxNUZEQzI5RkE1QkFCREQxNzkxCis6MTA2MjkwMDBDNEZERjMyQ0VFRUQ4MDBGQTU3OTU0MThGNTNEOTZDNzlCCis6MTA2MkEwMDBGQzhGRjMyNkE0ODdCODM0M0Q0NDNBMjRDQURERDIwOEQzCis6MTA2MkIwMDA3Q0Y2MkNEOTM0OUU5QTk2NjBDMjM3OUIwNURBNzYxNDA4Cis6MTA2MkMwMDBGQ0FFNjU3NjgyQzM4OUUzQzEzODhBMEYzQTk0RDBGRjY5Cis6MTA2MkQwMDBDRkMyMkUyRkY1NDhGREUxNTA1RkU0NjJGRDRFMTMxRDQ1Cis6MTA2MkUwMDBBQ0NFMkE4QUJCREZBOTYyNUREMTZDRTVGNDdBRTdGOTBFCis6MTA2MkYwMDBDOTE3RUI3OEQ3OTlFMTNERUZFRkRDQUFGNjZFMUNGRkVBCis6MTA2MzAwMDA3MUVDNzcyQTdCRDdDMDE3MjBGMTk2MUU3QUU3RUJCNEExCis6MTA2MzEwMDBDQUM2RjY0ODQ5MjAwRjMyQUU2NzAxMERFQUY4MEEzNkMwCis6MTA2MzIwMDBFQjM1NTg4RTQ1M0EyQ0YyOTE1RUIwNTU1MjExNEU2MkMzCis6MTA2MzMwMDA2OTBERkY3MzdEQkUxMDk1NUJFODRGNzYwNjA4NEY4QUE2Cis6MTA2MzQwMDA1QjY3RDQ1RTNCM0Y3REZGOUNEMEFGRDM4NDNFNkZCQzg4Cis6MTA2MzUwMDBGRkExNjJBNzdFNTU1NkMxRDA2RTNFRjdGNkQ0MENFQTc3Cis6MTA2MzYwMDA1Nzg3NDdBNTExMzhBQ0ZEMTYyQTgxMUYyQTAzOTBFQ0U4Cis6MTA2MzcwMDAzODNDRjgwMUZBMDk1ODQ3MDFGOUI1RjMwNUNFQ0UzRDhFCis6MTA2MzgwMDAzMDMzODlGNUMxNUYwRjU5RjhFQjIxODlDM0M5MkFDRTkzCis6MTA2MzkwMDBDRkNFMzgwNzYzQjY2MzdCMzU5MDQwRjFCMjkzMDVDNDI2Cis6MTA2M0EwMDAwN0I5NjJGQzI3RDZDRjREQzBGMTlGRDhEODM3OUYxQkM1Cis6MTA2M0IwMDA3MEZDQjRERUM5QzJBMEE3ODZFQTdENTQxQUVGNDNDMkJFCis6MTA2M0MwMDBERkJGNTlEODMxQzZGMzczOEE0QzcwRUMxMzdDRkY4NDVECis6MTA2M0QwMDBCMzIyODFGQ0U3MDc2RjlDMzYwQ0Y4MkJFN0E4RTI0NzU1Cis6MTA2M0UwMDAxRDRGNUJDQjUyRkExQTNGM0I2OEU2MzdBNkNDRUUxMzQzCis6MTA2M0YwMDBERTY1NkY0RDlDNzEyODhBMUY3RkExNzhEMkRFMUQwRTRECis6MTA2NDAwMDBCRjVDQ0UyRTQ3RkFFQkVGRkI3M0Y1RkE4QzQzRjk1RkQ2Cis6MTA2NDEwMDAxRDJGOUI4NUZENzlBRUYxNzcyQjQ4Q0YwOTVGNDlGQzk1Cis6MTA2NDIwMDA5OTIzRTQ0OENFM0MyRTBGNzJBQjU5NDg0M0ZFRkRGQzQ1Cis6MTA2NDMwMDAwQjE2NEQxRjYwOTkxMDlFMzJBQjU1OERGQzRENEM3NzVECis6MTA2NDQwMDBDRjgxRjc0M0M1REI0QzY1QkE4QzVCRjg1MEQ0QkY1MEE1Cis6MTA2NDUwMDA4RTZDRTJGRTczQzNDRjBGRUI3RTE3Q0FCOUNEQUYyOUE2Cis6MTA2NDYwMDA2NDBCRTc1NTZBMERCOERFMzlFQkNERkVGREMxMkNDQUQxCis6MTA2NDcwMDBFRjhFRkU3QUExRDc2NTVBRkNGODVGNzUxRDNBNzAxRDQ0Cis6MTA2NDgwMDAxMkZGRjlFQjEwNTIxOUQxOUQ1MUQ3MjQ1NjExNkZGRjBECis6MTA2NDkwMDBGQjQ0RDBBOUI2RTIxMEI3NDNDMEY4N0IyNzJBMUUwMUZGCis6MTA2NEEwMDBFQjk5ODI5QkMwNEY4M0Y3NEQ0NEJCMzVCODg2RjlGMzE3Cis6MTA2NEIwMDBFM0M4NEI5QjlBNDg3NDZGNjM3QTc4MjhGQTBGRTY1Q0JFCis6MTA2NEMwMDBERkIxMTdFNUQ1MDQ2NjkyNUY3MUU0ODY0REM1RUZEMjYyCis6MTA2NEQwMDBCOERDMDgwNTY3RjJGMjczODVFMjY1RjlFQjU5MDhFMzY5Cis6MTA2NEUwMDA1QjkzMzdENEVENDdCRjVFNjYzNUI3OUIzM0Q3MDQyNTQyCis6MTA2NEYwMDAzQkQ0NzNFQTk4MUY4N0M5QUQ2NEJDRkQ2QzE2RDI3OTkyCis6MTA2NTAwMDBCQ0U2NjgwNkQwQ0QxMDQxMzc0MzBDN0E1OTY2QTY5NzkxCis6MTA2NTEwMDBDMTc1OTZCOEQwMUE3MzdEMjBEMjA1N0MzN0QwNDIyRjMyCis6MTA2NTIwMDBENjdFNzIzNDQ2RjFCOEJDRjUzMjhGMTdDRDMyQzc3REI2Cis6MTA2NTMwMDBGMjU5RjdGQjNGMDc3OEYzMEZCOUZENjExNjFCNkZCMkY1Cis6MTA2NTQwMDBGNkFGQjI0MDAxRTI2NUY3MEZEREZGNTkwMDEzRkNEOTQ5Cis6MTA2NTUwMDBGQTQ5QTk4ODE3OTAyNzQ5MjQ0RjJBRTJEQjNEMzFGNEY0Cis6MTA2NTYwMDA2QUU4MUJCREI0OEZDODRGREVBRUI3RjdBQkYyRDM5NzY2Cis6MTA2NTcwMDBDRTA1MzhENjdBNzQ0NkUzMDdCMzQ5QUUyQjIyNUU3OTRFCis6MTA2NTgwMDAzMEYzN0E2NzA3RkE2RERDNDUyNERGRjc2MzFERkQzQ0M1Cis6MTA2NTkwMDAxOTk3MEM4Qzk2Rjc4QUYwMjMxOUY1NDZFMTQ3QjI4RUNECis6MTA2NUEwMDAzNzU1RTU3QUYwN0I0QzlGOEE3ODE4RTUwODY0NjA1QzgzCis6MTA2NUIwMDBDRjk2OTFCRTczMEU4QzY3RjM4MUJFMTVFN0JCQjE2QUFGCis6MTA2NUMwMDAwMjlGQUZBNkZFMkQxQUZGQjA3MUZCNDgxRTMyQkUxRjAwCis6MTA2NUQwMDAzMzc3Q0E3OUUxQTM0NDBERENBNDQyMTk5QzA0NjYwNDE0Cis6MTA2NUUwMDBEMjdGMEUwQjM1RTJGQUQ2MzVGM0ZEMkREMkVFMTZEMTYxCis6MTA2NUYwMDAyRTg4NzkwNTNERUQwMkQwNkU4NEE5REQzQzlDMEZCNDU4Cis6MTA2NjAwMDBEMzRERUQyQTYyREFERDI2RkE2M0E2NzFGNTk4NzE2QjM3Cis6MTA2NjEwMDA0NDdGQTRDRkY1QjRGM0M3RjRCNzU0QjQyMzNEQjBBNzc3Cis6MTA2NjIwMDA5RDE2RDNERjMyMzFBRTZFNkFFNzhCNjlGN0VGMDY3Q0Q5Cis6MTA2NjMwMDBBNjcxOTk3OURDOUVGN0E1NzZFMzNERjk2MzBGRTQ0RkU3Cis6MTA2NjQwMDAyMTdBMzk5NDNGQTU3QzJFOENCM0Y0NDUxQjk3MTE1QkJFCis6MTA2NjUwMDA3OTNFODc0MTU3RkI0NUJCMjZBNEFCNDJDQzVCNjE2M0M3Cis6MTA2NjYwMDBBQTI5NEY4NUU3QUQzNEJBNjczQTAzNTFDRjdCRThDQTEwCis6MTA2NjcwMDAzREQzMTdGRkY5NUM1MzdCNzU4RDhCRTlDNUY0OUNEQTJDCis6MTA2NjgwMDAzN0ZENUQxMUYxQUExRjRDNDI3RkVCRUEzNDU5RjhEQjZDCis6MTA2NjkwMDBBRTY5RDA1NTkwNjMwMzU0NTM3RDREODY3ODZGQkJBNjg5Cis6MTA2NkEwMDA4MTAyNjIyMjNFMDJCMkYyOUI4NTUxRkNERDMzRkUzRjQ1Cis6MTA2NkIwMDAwQjdFRTEzRjhFQzAzRkRCMDJGRjZDMzNGQ0EyRUVDQ0QxCis6MTA2NkMwMDBFNEVGRDU5NUIzMjdFMTdDMENGRkYyRDlBNkU1MEQ0MUE3Cis6MTA2NkQwMDBGN0ZGRTZGOTU1NTlFNjU3NjU5OTVGOTU2OTdFRjY5NTk2Cis6MTA2NkUwMDA1NTkzODI3OUZGOTdFNkI3Q0MzMkJGNjU5NkY5MkQzMzgzCis6MTA2NkYwMDBDRENGQjk3MkQ5MDVBRDlGQjVEREREQjY2NjkyQjc2QjZBCis6MTA2NzAwMDBGMzVGMjdGRDdGQUQ4OEUzMjZBQ0Q0MUI1NkUwN0JFMDJBCis6MTA2NzEwMDBFRDc2RUE0RjIzRjkzRThBRTk5RkEzM0NFOEVGQkI0N0I5Cis6MTA2NzIwMDA1NDhERTQ4MkQzMjM5MzVDNjBGOUY2NTA3RTM2ODc2QkY4Cis6MTA2NzMwMDAyNkM4ODVFNzU0MUY5N0RGMDJDRUQ3MkNGNTBGMkQ3NTlECis6MTA2NzQwMDBGOEU1NkZCODZGRkE5ODYxNDc1QUU0N0MzRkZCREFDQTA0Cis6MTA2NzUwMDA0Q0JFOUZBQ0YyRjhFNUU4N0Q0RDE1QjgzOTM4QTA5NEYxCis6MTA2NzYwMDBFNDRGQTM4RkNCOUZGRDAzODQzQzRBODM3RDhERkM0NDgzCis6MTA2NzcwMDAxOTI0QUY2QzQyNUVERDU3Q0ZGM0Q4OUE0NTdFNTA2MzQzCis6MTA2NzgwMDA1QTExRTFBNzU5RDgwQjJDOTQ2NURBMzcwRjRDOUNEMkRCCis6MTA2NzkwMDA4NjdFQUIzMzQ3NzlERUUyM0ExQkQ3Qzc1NkQ2MzM5REE4Cis6MTA2N0EwMDBFOEFCREU0OUY5NDVGQkEwREYwMDM0NjgwNTdEMEZDQjdGCis6MTA2N0IwMDBFNzQxREZDMzcyNEY3RDA2OTVCRkFDRDdBOERDMDFFMzhDCis6MTA2N0MwMDA2MkY5NENCRDlGMDU2MEZDNkRGNTYzQThGQzMxRUE4QjU2Cis6MTA2N0QwMDA1MDNFMjBGNEM1MkJEMjY0RjI1NzZDQUU4NzJEMzM5RjA4Cis6MTA2N0UwMDBGNDQ4MkExRkE5Rjc4RDU1NjFCQzlGRDQ2NzUwRkQyMzNCCis6MTA2N0YwMDA2OUU2NTgxQkQ5QUQxRDhENDkwMEU3RUU1N0YzMjg1RkI4Cis6MTA2ODAwMDA2OTQyOUE0QUZCMkY1M0MzNEE1MjQ5RTRCOTgxRDc4RjUwCis6MTA2ODEwMDBBNDQ5NTdFMDc3RTMzMjY0REVDRTE5NkFGNEM2NkY1N0I1Cis6MTA2ODIwMDA4NkVEQzY2NEE4MDQwRjczMDcxNTZGNUFEQzc2RTUzNjRCCis6MTA2ODMwMDBDMDRCQTk1QkY0RTcwQjM0N0FFMkY3RjcyRDZDNTdFNDExCis6MTA2ODQwMDAxNkZEQTU2OThERUVGOEZEQ0RDNDcxNDdGQTM4MUU1OEM2Cis6MTA2ODUwMDA0NjQ3NDM2MkZDNzYzNzYwQkI0MjlGOTg2RjU2NTg0RTVFCis6MTA2ODYwMDA4QzNGRUU2QzFDMzcyNUE1Mzk4MEYxQUQyQjY3MzNEMkY4Cis6MTA2ODcwMDA0NzZENjlEQTY2MjkyQTNFMTQxQTUwQzE2NEEwRjM5NDYwCis6MTA2ODgwMDBENEU2M0E2Q0Y3OEQ4MDlGRTVDMEY4OUFEN0NGNjRBMDI0Cis6MTA2ODkwMDA2NzlCMUJERTE3NjI0RTEzOEY0NzhEQkYwRURFQTMzRTM0Cis6MTA2OEEwMDA4Q0VGNDc0NEJEQzdFRkExMUMzQjRCN0M5RjY0N0VERjUwCis6MTA2OEIwMDBBMzk3QUY2MTNENzkzQzk4QkM2NDZCMzJENzkzNjVDRUFBCis6MTA2OEMwMDA5RkNCNTcxRTk4ODQ3QzlGNkNFN0VGN0Y4QTc1RDRCNzY3Cis6MTA2OEQwMDA5NjMzNDMxRUYxRjYwOUZDRkQ4RjhDRjY1RUZFRkUxNzIzCis6MTA2OEUwMDBBMjdENEEwQTlGQjc2QjhBMzM4NDcxQjE0N0JFN0I0OTQ4Cis6MTA2OEYwMDBFNkRDQzJDODdDMkZGQTVFQzFCMEI5NTFGMzdCRTQ3QjAxCis6MTA2OTAwMDBFMzMyRTdCQTIzRjNCOUU4RkIxMzg2Q0RFREMzRUU0OUQyCis6MTA2OTEwMDAyRDk3N0I3MjY0NTE2RTI1MzcxNzkyRkMxQ0U1QTgyMEQ5Cis6MTA2OTIwMDBCOTMzNkE2MEE5OEVGQ0FDQUNFNzcwRkQ4N0VEQUU4NjJBCis6MTA2OTMwMDA4NjNDODIyQjg4RjJDNjgwRUIyNzhCQ0Q3MDBEQUUzMTYyCis6MTA2OTQwMDBDM0Y1OTMxQTMzNUM4MzZCRkI4NjZCOUQ4RENCQjVERUYxCis6MTA2OTUwMDBFMDgzRjFGNUU4RjExRkZEMzdGM0Y4NDM3RTYwMUVGRjk5Cis6MTA2OTYwMDBEMTFGOThDNzFGNzJFNzU3MUUzRjFDQkQyRTlCNkUzNzY1Cis6MTA2OTcwMDA4RjlGQjVDNDNDRkVBNjI1RTZGMUIzOTY3RUI1RjFGRjI4Cis6MTA2OTgwMDA1MUZBNzg5MjJENzBDNDI2RjQ1RDI1NUFFRkFDMEI5ODFECis6MTA2OTkwMDBGNDUzNjhGNzhBNjgxNzU0QTJGNUQ4NDBDMEE0OUY0MjAwCis6MTA2OUEwMDBCQkQ3NkQ0MkRGMzVCNUFCODg2OUY3MDdEMTFGMzM4RDkzCis6MTA2OUIwMDBBQkM3OENEQjIxRkEwQkNCRDFGREY5NjNGQUZCOEI2OEZCCis6MTA2OUMwMDAxNzk0QTNGQkQzNjJGQUZCQzA4MENGRDRDRTE3RDNBRTBCCis6MTA2OUQwMDA0QkI0NjNBNjcxOTk3OTVDRjgyOTUwQTE5RkVGQjMwNDc5Cis6MTA2OUUwMDAzRkZBNDc5NjRENUU0MzcxQUY4MTJDMjBBMUJGQ0Y5N0YwCis6MTA2OUYwMDBDQTQ2MUQ4MkVGNTkyRUNGQkY0RjlFQjJFQzYyQjQzQjA4Cis6MTA2QTAwMDBENzI0OUJGRDVDRTk3NjZFOUZEOUVDMEE5NUJFNDQ1NjZGCis6MTA2QTEwMDA0N0Y5MDBDRTYwRTY4Q0E4N0M4QjZBM0JERkNGN0FERTNDCis6MTA2QTIwMDBCQjgzOTlENzQ2QkQxRjI4QkU1RjIzRTJENDY5RjZEMjQ3Cis6MTA2QTMwMDA0Njk0MkJCRUMxRDAzRThFQkYyMjUzOEM2QkJDNjc2OTdGCis6MTA2QTQwMDBGRTc2MURFMERERjhBRjMzNDdBM0JGMjgzMkFFOERCNzI5Cis6MTA2QTUwMDBCQjU4OEM5QjE1MUZBRTM1RDk3Q0RDNDUzODZFMjEzRTZBCis6MTA2QTYwMDAzN0Y0OEI2MDI2RTFEN0M3NEJFM0Y5ODM5RUVGNDlGRkVDCis6MTA2QTcwMDAwNTc4NTkzREQ5MjkyQjQ5RjA3RTNERjc2RjFBN0VGNkVFCis6MTA2QTgwMDA2NDdCOUQxM0YzNzYxQjJGOTJEOTYzRDgyRUFCNkYzRjk3Cis6MTA2QTkwMDA0RTUzQkREOURGQTlGQTJBNzRCNEY3MDY1NUZBOEExNDAxCis6MTA2QUEwMDBENkZCNzcwRjk3Q0JFNUYxRTIwREEzQzVCQzlBMkEyNzU5Cis6MTA2QUIwMDAzNUU3QzFGOEVDOTBEOTZGMEI4NENEQTJGMzYxMEE5NTRDCis6MTA2QUMwMDBDMDY4N0IzQ0JGNkQ1MzgxMjlBRjNFNzk1MERGN0VEQkQwCis6MTA2QUQwMDA0NkExNUZGNENDMDMzQThBQjc3RTM3MEFGOEQ4QzYwMkRCCis6MTA2QUUwMDA5MzlFOTU5QzMyOTNGNEFCRTQ4NkFCOURCRTM4REZBREFDCis6MTA2QUYwMDBCNUY0RUY2MjMzNzU2Qzk3OThENkNDNjRFRTVDMzRFOUVDCis6MTA2QjAwMDA2MTREQkVDN0Y4M0U5NDA5MzIwOUUzM0Y2OTNCQzJDOEY0Cis6MTA2QjEwMDAzRjY3NEJGODc5MEEzNTIzMTQ5NDI4Q0VDMUU3ODk2QTc4Cis6MTA2QjIwMDAyNUZFMjRBQUUxQTAwQ0VEMDc2RDU0NTkzODk1QjFGQjYwCis6MTA2QjMwMDBFNUMwOEQ4ODFGNTc1RTMzRjlDNzU0OUYyRTIxOUVDRTI2Cis6MTA2QjQwMDBEOTQyNTdEMzc5MDI1MDE3RTNFNTdGQ0NCMzczM0ZGMEI2Cis6MTA2QjUwMDBDM0RBQ0NERjY1Qzc1OUM3REJFQzlBNDkyRjFERjRBOTBFCis6MTA2QjYwMDA5RDg1OEI3QjZGMUY2OUM3RTFFQUExRDMwQ0EwNEZFNDIxCis6MTA2QjcwMDA2RjhERDNFOUVEOEFCRUQ4NEVGQTVBOTY4RkZDOEU4Njc5Cis6MTA2QjgwMDA3QzM1Rjg1RkM0QjdFNzhFNjFFMjQ3QkJFMTBGMzA4RjE5Cis6MTA2QjkwMDBEQkRBNkMzQ0JGRUY3MzY4MUQxNUY3Qjk0REY4QkZFNjQzCis6MTA2QkEwMDA4QTc4RjczQzU2RTFDNTk3QTc5OTVDOEU3Qzc1OUFCREFCCis6MTA2QkIwMDBFQTJEOEU1QUFGQjU3NjNCMUY2NzhEOERGQzVCNDYzQzQ4Cis6MTA2QkMwMDA3NzdFQjNDREU0RUY1QUI4RDE1QzVGQzA2NkE2QTM1QzE0Cis6MTA2QkQwMDA1QUIwQzFDNkYwN0NDNzZEMTY3RkQ4QkZFMTdDNjE1RTNDCis6MTA2QkUwMDAwQjU5REQyQUQ0RDM4REZDQTBCOTNFQTY2MkZFRjdFMjk0Cis6MTA2QkYwMDA1RjNENTI4QTc5NDNDRDc2OUVBRkYzMDFEMDhCMTZDNUE3Cis6MTA2QzAwMDA1NzU1RUU5MDFERURGOTc3NzYxNTVGM0Y5RUUxRjdBMUEwCis6MTA2QzEwMDA1NTgzNTA5RTI2QjNCOEU3OEM2RTVENjM4NkFGM0ZGODEwCis6MTA2QzIwMDBBREYwMzJENjQwRjBGNjA2ODdCQTU1OEFFQkJGN0FENDdCCis6MTA2QzMwMDAyRTk5RTI0NENCOUNERTkxMENFNENDMzkxNzJGN0JGQ0RGCis6MTA2QzQwMDAyOTdGNzQ5MTdDREYyN0U4MDgzNkMwQ0JCODlDQUZCQkE2Cis6MTA2QzUwMDAxQ0NCRkVCRTNCRDhDQjc3OEI5RDFENzZFNDhGNUFCNUZGCis6MTA2QzYwMDBBRTVDOTIyMzcxMjY4NzJEQTAwRjg2RUY2QzdCMjY4NjYzCis6MTA2QzcwMDAwNzMzNTNCQjM1RTdEOUFFNERDQTM5QUY3NkU1NzIxRjNFCis6MTA2QzgwMDBGRDc1MEE3OUY5QzJCNjlGRDlEMUJGNzhGQUE5MTNENzkxCis6MTA2QzkwMDAyMDFGMkVGQUI1QzI5Q0QwQUU3MzlCODc4NTcxNUY1MEMyCis6MTA2Q0EwMDA0Mzc2OTQyNzU1QkI5NEI4NzE1OThBRkNDM0ZDMTdGREYxCis6MTA2Q0IwMDBDMjQzNzJBMjZBODcyMzM0MURCRUFGRkFFNTNCMjMxOTkzCis6MTA2Q0MwMDBFMEExQjNBMUZCRjA2MERDNDc5RjkyNzg3QzM0RDgzMTFGCis6MTA2Q0QwMDAxMkY3QUQyQTk1REQxMjJGNEZFQzg0QTBCQjUzQ0YyNUMwCis6MTA2Q0UwMDBDRUMyNzU5NUI2RUVCRjk5RkE2REI5QzFFNjg4OTIwRjFFCis6MTA2Q0YwMDBDN0M0QkUwNEVEQjg3RkVENDkyOTk0MUY0NzdFMThGMTQzCis6MTA2RDAwMDBBQzUzNEY0QTFDQkUzREI2OTAwQkUxREJCQUQ5MUUwMDE2Cis6MTA2RDEwMDAzODZBQjc3RTQ4NzQ1NEY2OEJFRDVFQzQ0M0VEMUVDNUU5Cis6MTA2RDIwMDBFNEY3QUREREFBODQxRDIzQTkzQzgxMjVDNjUxMjRFMEVBCis6MTA2RDMwMDBFQjFBQzZFNTYzQ0RBRUM1RTQwRkFGNjk1OUY3QTFFMjIyCis6MTA2RDQwMDBDNUVGQ0RGNDBDNzhGMTg3MTFBRjZGMjhGRUU5NThERjVECis6MTA2RDUwMDBGOTczQUYwNkE4RkFBMEZENzEyRkUyMTVGQTlENjM0RkYzCis6MTA2RDYwMDBDMjc4QUVEOThGOERGRDdGOUExMkRCMUY2M0RENzZBNENBCis6MTA2RDcwMDBBRkRBOTZCNTdDM0MwQkJGN0M4MEJGNjRDNkM2NEY5QzI3Cis6MTA2RDgwMDAwRTRCMUM2QjZCRUE3OUU5ODk4QkI2OUY3RDM0MDhFMzY3Cis6MTA2RDkwMDA5RERBRjFENzQ3ODNCODdGRkZCRjhGMUVCRDEzRjU5QUU5Cis6MTA2REEwMDA3RDJFMUZGMjdCRUQ1M0FGNzk1OUQ0M0U5OEUzRTA3QzAyCis6MTA2REIwMDBEN0Y5RTRDRjlGNzgxOEY4QTRGM0I4ODM4RUVFNzVFRTc4Cis6MTA2REMwMDA3RDZGODgwNkYzRUQ3Q0Y2QkZEMzM1Njg3RkM3REVBQkY5Cis6MTA2REQwMDBDOEVFQkY2Mzc3RDlDMEJFRjY0M0E0RDM1MEY0MzkxN0M5Cis6MTA2REUwMDA5MUM3QTRFRDkxNTBEOTAyNDM1RTk0OTY3NTM5Qjg0QjgyCis6MTA2REYwMDA2MTJFODBGM0Y0MzE0NzA4RjM5QTZCRTFEOUIyMjI1QzNCCis6MTA2RTAwMDBBN0M1MjQ3RkIxQkUxQ0YwNUJCMzZERjU4N0NBQzg3OEY3Cis6MTA2RTEwMDA3ODBFMEU5NjMxQzc5RTAxQkI2NEUwM0E1RkZCRUQ2RkMyCis6MTA2RTIwMDA5NDYwNjlBMzM4NDkyREVCMjZGOTY5RkRBRUY2MjhBQ0NDCis6MTA2RTMwMDBFNzY1QkRBRkRGNTlGNkI5MUQ4Mzc4QjVEQkQ2RjI3MUQyCis6MTA2RTQwMDAyREVCNzcxQTdGMTkxQkJCN0VCQTY1RkRDRUIyRUE5Rjg4Cis6MTA2RTUwMDAzRThDMkY3N0E1QzY4REU3MUFGMUFGQzVCQkZGQTU0RkI2Cis6MTA2RTYwMDBCREM5OTAwM0ZERTFCNzUyRTI3MDc5MUM3QTg1MDNGOTQwCis6MTA2RTcwMDA2OUM3RDM0RjNDOUNDNkQ3NzczQTIwQTQ3M0ZCRDkyMTZFCis6MTA2RTgwMDAwQ0U4RTNBNEFERkI2Njk0OEZERDdCMUQzRURDQ0ZBQjRECis6MTA2RTkwMDBGNkJFNDFGQ0Q1QjlGQjE1QkI0NkYyOTFCOTI1RDAxMzFFCis6MTA2RUEwMDAzQTU5Q0Y0RjNCRUEwRDM1MTJBRkQ0NkVGMTg0MURERTU3Cis6MTA2RUIwMDBDODNBRDU4NDY2OTQ2QjVFN0E3RTgyOUU4NzM4RERENzI5Cis6MTA2RUMwMDA4NEY2NUYyN0M1NTlCN0Q1OEUxQzJFOEY0MzNDNjk2RjVBCis6MTA2RUQwMDBGMTk2M0ZEODk5REJCQzlFRDIxODVDQzcxMzUzRjA3OTZBCis6MTA2RUUwMDA2RkVCNjhDQ0RGODdGM0JGM0M2QTNEQjc3MDdFRUQ4REZBCis6MTA2RUYwMDAyRjNCMzczQjU0Q0M0NzMwRDZCN0QzQzZGNUZEREE5MDlECis6MTA2RjAwMDBGNDA2OEJDM0FGQzZGRTc2QTFGMUQwMDY4NzI1MUUyQUY0Cis6MTA2RjEwMDBFNkRCMUYzRkY3M0Y4RjBCQzNEMzEyNENBQTFDMUQ4QjIwCis6MTA2RjIwMDBBRjUzOUZDNzk3RUY4RjM4MjQwMTQ3NURGOUEwRENEODk2Cis6MTA2RjMwMDBGRDQ5NjUxNUMxQzFEOTExNzg0Rjg5NzNCM0E3OUU1MjE4Cis6MTA2RjQwMDA0MjQxNzhCRUFBRTUyMEM5NjlBQjVDQThFOTQ1NEY3RUZECis6MTA2RjUwMDBDNjE4NkZDRkZFOTEyOEJGNEUxRDc4OEVFOEIwNjZEQjU1Cis6MTA2RjYwMDAwOTNCREE0Nzg3QjdFRUI0NzcxNDQ2RTgxRUU1N0Y3NDJECis6MTA2RjcwMDA1RUU0QTk2N0Y2OEYyNDM5OERGREM3NTk5RjVGMEI3OUIxCis6MTA2RjgwMDA1N0RCNkFFRUJGNzZEQjg3QTZGRTE3MDU1QkVDRTQxN0RFCis6MTA2RjkwMDBFRDY3OUMwRjU0RkQwNjlDRUYwN0VEMzY4Njc5RjcxRkQxCis6MTA2RkEwMDBCNDI4RTVGMUY0OUI5MEMzNjZDQTgzNUFFNTI5M0Q4NjZGCis6MTA2RkIwMDA3RTQ1MjVDNUFFQTFCQzZCNUFBMUJGMTFBNDczOEYzNjA3Cis6MTA2RkMwMDA3RUVFNTFENThGMzk4MDJGMUI5M0VEMUFEQUFCNEQ5RTkzCis6MTA2RkQwMDBFQjk5MTYyNUI3OUIyREY4RjRBNUY5MjY2MjVDQ0QzNzAxCis6MTA2RkUwMDBCOUEyMjREQTdFMzJFMDRGRDY2NTEzRkM3Nzc4Q0EwNzVGCis6MTA2RkYwMDBFMjc5MDlCNEMzMzQ0QzMyNTBGREU0NTc1NkJDNTNDQTRECis6MTA3MDAwMDA3MTNFOEE0RkY2QjlFMkVFQ0ZCQzNGRjRCNzIxRkREQjBCCis6MTA3MDEwMDA3QzMyRDNBMkU4NkI1NEQ5RjVDM0QxRDVBNjMyQ0Q5NDM2Cis6MTA3MDIwMDBCRjdBRUY2NDFFQzczNUU2N0ZFRjQ1NkMxMzAzQjk3QjZCCis6MTA3MDMwMDBBRkQ0REQ4NkY5RUNDMUFCNzk1RTIwMTM3NkJBMTdFRERCCis6MTA3MDQwMDBGNEVDNTg3RDhFRTlCQTg2RjI4N0M0MEY2RkNGNzQyM0IzCis6MTA3MDUwMDA3RjE0N0VCRTBGRTBDODk4QkYyM0ZCNDk5OUZGQkVBMkY0Cis6MTA3MDYwMDA1MzNFOEYxREM3Q0Q0NUZCMjk0NENGMTM1OTk4RUE4QTVCCis6MTA3MDcwMDA5M0NCMUYwRkFCQTNFNzQ5QUNBMzE5Q0YzMEJERURBODRECis6MTA3MDgwMDBGOEQ0MDFDRkVGMkI0RjkxMzhEQzYxQ0FENzQ4MTZFMzEzCis6MTA3MDkwMDBDODg5NTk5OTdERjEzRjlCQUM5RThBRjZGQjM4RDgyNjZBCis6MTA3MEEwMDBCMjRCRDBFREY4NDU2QTA0MEY0NjNFOUNEMUVGQkRBRTIxCis6MTA3MEIwMDAwOTEyRUUzNzM4QkZDMTc4QUU0NzlDOUZGN0Y1Q0M1NzIxCis6MTA3MEMwMDBBN0ZBMDBBMzZFMTkwNzVCRkE0QUM1MTY0QkFDMTg5MEQ1Cis6MTA3MEQwMDA1NDA1NkYwRDY4MjYzRkM3MjBENjQyNjUxNjZCQTczMjUwCis6MTA3MEUwMDBDNUU5OTM1NDgyRUYyREYyNEJDOUVDQ0ZFQzhCNDQwQkU2Cis6MTA3MEYwMDA3Q0U3QTE4RjlGOTNGNUUzMDEyODFCNkRFMkY5REI5RUVFCis6MTA3MTAwMDBEMEUzNTBERjkwQ0M0Q0U3ODM3MzlEOUNCRjJGNzdDQUIwCis6MTA3MTEwMDA4NjVGMjYxMDZENzczNUIyNkE5QUJCMkI4RDFGNjMzMTVGCis6MTA3MTIwMDBCRUJCREUxOTE4RUU4Q0EyMjdDNUREQ0VGM0JFODRGREYyCis6MTA3MTMwMDA2QkQ4RUI1NzI5Q0IyOUZFQkUzQTgzREJENUJEQURDRjRCCis6MTA3MTQwMDBDQUZBMEE5MzVENkQyRDlCMDczOEU3NkM2NjA0M0ZGNzFBCis6MTA3MTUwMDA1MzQ5NEU3RTdFNTk2NzlBMkY5QUZFNjA1QzY3Njk3NDI4Cis6MTA3MTYwMDAzRUEzQUU5MzdEMkZERURCNjA3QUY4RDI4MTc4NTQ2MjQ1Cis6MTA3MTcwMDBFOTZGMDZEMkRGNjhBNEJGMEVEMTQ5MzdGOTI5NkU1N0VGCis6MTA3MTgwMDAwMjU3RTM3QzMzRjJFQTI0RkUzQzIwNzFCRjk3QUVFMDY1Cis6MTA3MTkwMDA3Q0QzNDVGRjcyNjI3NTY2QTA4Rjc5QjI1OTQwMUY1MTRBCis6MTA3MUEwMDA3OTJEMUI4NEZEQThBQTRDNEQyODQyNzgzNjg5NzVCN0U1Cis6MTA3MUIwMDBEMkE1MzkzRkQ1RDBEN0RDQTJFNjEwNzk3MkJGMjk3OUE0Cis6MTA3MUMwMDA5NUNFQTNBODY5NkVDQTRGNzE5NzM0REQ4RUU3N0M1NUMyCis6MTA3MUQwMDA1NkU3NDNGOUU5MzZGMjRGRkMzQzlGRDBCMDhCNUQwNTkyCis6MTA3MUUwMDBFNjNDNEU4NzI1NkZENTI2RUNFRjk4M0M2RUIxRUZERTdFCis6MTA3MUYwMDA4MzBGRTJFOEMzRDY3REY3NzY2N0ZDM0MyNDM2MjY3RTEzCis6MTA3MjAwMDBCRUEwQTE4NzlEMkZERDVCRURDODZBNjdGQjYxMUFEQzFDCis6MTA3MjEwMDBBNzUzOUVBNTJBRkMwRDEzQUZGMzkxMUZCQzZCOUJDNDEzCis6MTA3MjIwMDBDRkFENTlFOEE4NkI0N0QyNDg5NDg3QzhCRjc4Q0Y0NUZGCis6MTA3MjMwMDBBMjc4MkU2RERCQkYxRkY1QTYyNjJGRDM5MzUzNDhDRTIxCis6MTA3MjQwMDA2OTRBMkU5RTk3MUFFNTk0QTA1Q0JDRUJDMzk3N0Y4RDhDCis6MTA3MjUwMDBGRUY1NTY4NUUxRDZEQ0U1MzZFMjkzN0EzMjJFNTYyMkVCCis6MTA3MjYwMDA1QjZGNUFERjBCOUQ0RjZDNUM5MUYzREIxMjlGQzE2RjFDCis6MTA3MjcwMDA2RUZBRkVDQzM2ODlDRTRGMjk2Q0Y4OEZGMUZDNDM2RDQ3Cis6MTA3MjgwMDA5QjhEODVFMEZEMTlDNkZCM0ZCMzg5RUIwMzBCNUY4NDQzCis6MTA3MjkwMDA1MUYwM0NBODE4MUZGN0E1RThGRDIzQjUzQzgxNjlEMTQyCis6MTA3MkEwMDA3OTNDNDFCRDFEQ0ZGRkNGMTNGODE4NTA5MTYyN0FGRjkyCis6MTA3MkIwMDBEN0I5RTU2REU0OUYwOUYwN0IwMDA2Q0UxQTY0RUE2RjRBCis6MTA3MkMwMDA5MUIyN0MyODI1RTEwOTNGODYwNkZGOTBGRThDRjk5RjRDCis6MTA3MkQwMDA5MzAzNzZCRTRGNTQyNDg1NDk5RjAxRkIxN0VEODY5MDlBCis6MTA3MkUwMDA0NEY5NEE1NjdGNDdDRDFFODlGNkE3REI2MDdGQzJGMzdCCis6MTA3MkYwMDAzOEI3ODUyQ0Y2QTMyNThGQ0VDMEI3OTUyRTBGMzk4NUNDCis6MTA3MzAwMDA3REUwNjZFRTVFRjBFQTBGOTc1MDdDOTRGODZBQzk4QkQ4Cis6MTA3MzEwMDAzQzJGNkNDOTc2Mjk0NDc5Q0MxRDQzOTMxOEUxNTkyMTNGCis6MTA3MzIwMDBCRkQxN0JBQ0VFNDFEODM5MjJGNDZCQzE5QjIzQzM4QzE3Cis6MTA3MzMwMDA2Nzk3NjZDNjczNjI4MTE5QUYxRUJGMTk4RjU2M0MyN0M3Cis6MTA3MzQwMDA4REM5MzFCNTVGQTQ1NERCODlDODA0OUUwQkUwMUZFMkYwCis6MTA3MzUwMDAxOUU0MjBDREEzMDZFNjExRDY2MkYxNTlEOTdBRUYyQUI1Cis6MTA3MzYwMDBGNDZGRjQ4QjQ3MEJGRTRFNTlGMDc3OTZCNUVFRTc2RjRFCis6MTA3MzcwMDA1OTg1MzM5RDU4OUJFNjlEQTk4Njg5N0ZBQ0ZDNjZFMEM0Cis6MTA3MzgwMDAyOUNCRDczRTkxOUVGOTNERTQyRkNFMTA5RDQ4RjNGOENFCis6MTA3MzkwMDA3NzgzOUMyRDlDNzk4QUZDQzQ2RjQ2N0U3MDYyQ0Y3RTc5Cis6MTA3M0EwMDBGOTBFRkIwMkNBQTUzMzBFOUQ5OENCNjJGOTZCMTM5NkJBCis6MTA3M0IwMDBDMEQ3MkRGNTRFREZCQzdDOEM0RjMzREYzQzFCQzZBQkZBCis6MTA3M0MwMDA3RDU0QzZEOTQ3QTk3RkEwNDdEQTBGRUVDMUI4NjQxQTI5Cis6MTA3M0QwMDBGMkI1NEFGMTJCNUNBQUU5NTA0RjZDQjVGOUQwNkY3OTQwCis6MTA3M0UwMDA0RjUxRjczNUE4QjdEN0NFRTc3OThFMzcyNzcwRkZFQjI3Cis6MTA3M0YwMDA5MjA0QkVCRkRBMTI3ODVFRjM1RDE1MzJEM0QxQkU2RjUwCis6MTA3NDAwMDA1NTQyMTJGQThCN0NGQThCNTdBMkRFRDU2QUQzNjg1RjlECis6MTA3NDEwMDBGMzc1QkZGQzFEN0E1RkVDQzNGODZFQTZEQzNDMEFFMTk1Cis6MTA3NDIwMDA4MEY2RTQ2RkVGNkE3REM3N0I2Qjk0QkVEM0I5RTdGRTRECis6MTA3NDMwMDA2MUI4RUYzQzI0QjNDQTc4N0E3Q0JFOEJDM0QxNTlGMEQzCis6MTA3NDQwMDBFNzc0MjRDN0M1Q0U2RUIyQTM1Nzc3RDQ1NUUwQkMwQzAxCis6MTA3NDUwMDAzQkMyQkU4QkZCQjc2QUY2Q0MyMDdERjJEMDAyN0UxRTBCCis6MTA3NDYwMDA3M0Y3Mjk3RTFFNzM4QTMyRkI5QjIzQTAzRUY2MzU5NTY3Cis6MTA3NDcwMDBDQjREQTY0RjlGOTNDRTUzMjg3MDFEMzc2MEJFMjRGMjhDCis6MTA3NDgwMDBDMTdGQzlBMTA2QzI0RkYzRUYzMTRFRDVGODE3OTVBMUMwCis6MTA3NDkwMDBGRTU4NTJCNzgwRjY5RjVGN0JBN0I0NjE1OUFBQjcxNDE0Cis6MTA3NEEwMDAyMzVGNEY2RTREOUU4OEU3NjQ2QURGRTI3OTk1QTNEQjI4Cis6MTA3NEIwMDBDREZFMUNBNjU0MUY0NDNGRDhEOTYzN0M1QkJFRkM5ODBDCis6MTA3NEMwMDA2QUI1QkIxNERDOEZDNzc2OTg5RjhGRUY4NzZFQ0I1QzU1Cis6MTA3NEQwMDA2MjNGRjJCMkY0MEJDOThCRkQ5MUFDNEY3MzkxN0Y5NDc0Cis6MTA3NEUwMDA5RkUzRjJBQkYxRURBNzQ3MTNCODdEMDM3ODkxNTA0RUJGCis6MTA3NEYwMDA3NTc1MzM3RjAzRTBBOTZCREUyMDlBNkZEN0M3RkM2QUVFCis6MTA3NTAwMDBBNkFFQ0Y5NUYyNzhGNkQxMkQyRTRFMkYwRkQ5NzlEQzdECis6MTA3NTEwMDBGNkExMDVFRUQwMEE5OEM3ODEwNTU1MTdBMzVERjRDOUY5Cis6MTA3NTIwMDBCRjA1MkU4RTE3QTc4OEQ4MDcyQzQ5QTYzRDRGNEY2MjVFCis6MTA3NTMwMDA2MzkwMkY5QUY4RjkzMkQ2OUMxOUVGRkNCQ0MxMEYwNjY0Cis6MTA3NTQwMDA3RjE4N0M5MUI5MjAyMTEwQ0Y3RkY5OEU4QkNGNkZEMjFECis6MTA3NTUwMDA4MjAyQ0E4M0VEREMyNzUxOENBN0IzMDFFMEVBMDM4RkQ2Cis6MTA3NTYwMDA0MUQ2MzAxOEUxQTlEREYzMTFGOTE3OUNBREYxRkREMDNBCis6MTA3NTcwMDBGNTc4NDgwM0U5QjYyMUI4NjIzQ0UwRUI3QkMwRDQ0MTIyCis6MTA3NTgwMDBFNDA3N0I3Mzc2QkNGRTgzNkMwM0Y5OUIxNkI4MzRFMjg4Cis6MTA3NTkwMDBCNzRFMjdCN0EzOTlEQTlDMzlEMzgzN0M1Mjc2RjUyQTY0Cis6MTA3NUEwMDA4MEYzNjFFMDNGMjRGOTg3NkM3RTgyM0JCODk4MzFGMjJBCis6MTA3NUIwMDBBRkFBOUNGRkIzQUU2MTlCRUY4QUIyQjdENkJBMjYzRUE0Cis6MTA3NUMwMDBFMDgyRkUxRTcwRjE3ODQ3NkFDMDJGMjFEQ0ZFQkY5RjZCCis6MTA3NUQwMDBGMzYyRkY1RDlGM0E2OEZEMDYwOTNGOEZGMTVEOEJDMDQ2Cis6MTA3NUUwMDA0RjU5ODJGRTIzRkM5RTU1QTY5MTMwRjQwN0JDQkU3OTBDCis6MTA3NUYwMDBCMEZGNUZCNjA3RjAxRDI3QkZDQkQwNzc1MjAyMjBGQjRDCis6MTA3NjAwMDAwMDlFMTRCNzRDRTc1NkQwREU0MjdCQTI5NjE5M0Y0MTRDCis6MTA3NjEwMDA1MjNFMERGRUMzNDM2Njc4M0VDQjkwQjc1MkFCMTRGNjk0Cis6MTA3NjIwMDA4MERDMkM3MUJBQzNFODRGNDlBOTg0Nzk2MzNDOEEzOTVDCis6MTA3NjMwMDA3OTdGRUQ2NjdEMTQyNTJGQ0E1RDk0MDEzQzU5OUVEQjUwCis6MTA3NjQwMDAzQjg2MUMzNkU0Nzc1MzMyOTc4MzRERjdBQUExNDYwOTRGCis6MTA3NjUwMDBEM0RGM0I1Q0U4M0ZDRUQ2QjU0OTk4NUE5NUEyNkE5NEYxCis6MTA3NjYwMDBFNzcwNTEyNUYzMDc1MTQ4RTYzRTkyRENBM0Y3OEM2NzlCCis6MTA3NjcwMDBFQ0Q5QkYyQjcxRkQxQjI3NUREQzFFMjk0QjA4RkMwQUQyCis6MTA3NjgwMDBGMTM1QjJBREZCMDBBQTRGN0UxNzRCQzVGNTlFMjJGNDMzCis6MTA3NjkwMDA5QkIxQTdCOTNDMzJGMkZBNkI4NUJENjE5NTQ3Q0YwMTJBCis6MTA3NkEwMDA5REEzQzAxOEZCMERCRUVGOEQzREVERjYyM0ZERjRDODg0Cis6MTA3NkIwMDBBMTA1NTM2ODFGMkQ2QTJEM0U4OEY5Mzk0NTZGNzE3RUVCCis6MTA3NkMwMDA2NDQyRkU4MEY1NDY3ODI5NkQwQjJBODgwRkFCRENFOTExCis6MTA3NkQwMDA0RkRFMThGMkM0QkFDRUEwNUNGN0Q0QjMwMDI5QzU2RDUyCis6MTA3NkUwMDBDMDY3NTFGQkI3NTU0RTFENzM4OUZENTVDOEE5QjM2Q0QyCis6MTA3NkYwMDBDMkMwQUJCNDA4M0QxNTJERjMxRjc0NDREMThGMjFBNzMwCis6MTA3NzAwMDAyMkY0MTQyMjNBQjQ4RTIzMzE2NzRGREQ5NzhCRjJFNUQxCis6MTA3NzEwMDA4ODgyN0U5MEFFODkzQzNFQjk0MkYwNTFGMkM3QTFBQjVGCis6MTA3NzIwMDA3MUZFMUI1QUE3QkE5MEVFNzdCNDk1Mzk5MUFEOTY2NDY1Cis6MTA3NzMwMDBGMDczNUVFQUZFRUI4MjRDOTA0Rjc0NUNEN0M2OUMxQUU1Cis6MTA3NzQwMDA5RTI5MUYwRjJCOEZGODUwN0M1MDhGOUFENzk5NjY0OTJFCis6MTA3NzUwMDA5QzczRDQ5MkFFOEI3MzNGODI1MTJFQzlFMEU3Qjg3NjBBCis6MTA3NzYwMDBCNEU1MjQ3MTNCMzM0Q0VCREU0M0Y3QzIwRjYxRjA4NTg3Cis6MTA3NzcwMDA0MUVGNTZGQTM2RjhBMTkxNzFCRjg0QTEzRjI4NTI4QjkwCis6MTA3NzgwMDBCMDBCQ0Q3RTgxNDZDM0NGMTE3NDUxOUNGODBFQTEwRjcyCis6MTA3NzkwMDAzNkJBMkY1OTM3MDE3RTZEMEE0RkYyNjE1Q0UyMEU0RjA3Cis6MTA3N0EwMDAwRUU1MzNERjMxODBFM0NEOEEwN0EzQUNGRDE0RjRDM0NCCis6MTA3N0IwMDBBOEJDRjM1QUI1OUJGQzVBQjU5RkRBNERDRjBEQkNGNjY5Cis6MTA3N0MwMDA4NjBGMDNBRkUzMTBBRkQyOTdDN0VCQTdCOEJFQTM2MzkyCis6MTA3N0QwMDBGMUZCNjVFNzlEQjU2NDRDRENGMzcyRkY1N0U2M0Q5RTE3Cis6MTA3N0UwMDAwNTdFREQ0MTc2MTczRkI3NjFEMDk3MjEyRjRBOTc2RTBFCis6MTA3N0YwMDBDQzI0RTI2ODM3REZFQjY1Qzg5MTMxN0JFQTBFQTI4QUMwCis6MTA3ODAwMDA2ODk1MTM5N0I1QjI2QjExNEY2M0MzMkFDM0EzMkVGREJFCis6MTA3ODEwMDBDOThEOEZGMTk3NEMzQTdGNzE2MzAyRjBERkE4MTc2NjJDCis6MTA3ODIwMDAyRERBMDY4RjQ2NkEyQzc1M0EwMDM1QjI1RDI1MzlDNkM5Cis6MTA3ODMwMDBEQUNGMkYwRUQ1MTJGRTM4MURGRDhCODY1RTFBODM1N0M4Cis6MTA3ODQwMDBBMTk3MUFGQjhCMTEwNzVBOTcxMEE4QzRGMUE1M0RDMDQ4Cis6MTA3ODUwMDAzNzVFQ0MzRkU1RjZFRTVBNTc2MDUxMDJCNDRGMDQ5OEJDCis6MTA3ODYwMDAxMzMwRDdBRTIwOUNDREVENTMzMzVGRjZDNjg3ODkxNjEzCis6MTA3ODcwMDAzRTZCMDFCQ0QwMzkwNEQ4RTdGMkE1NTgzODhDRjFGMzNGCis6MTA3ODgwMDAxMjkyMzk5QzQwNkRBOEJGNjQ5NTMyM0U1ODBEQkZDRjBGCis6MTA3ODkwMDAyRTZCMjQwQkUwM0U4Q0M3MzY3MTlFNkI4NUZFNzU5NzcwCis6MTA3OEEwMDBBNTVDRUJBQTY4QzA3OUQ5NTQxNjc0MTQ3RDc5QjgwRDFCCis6MTA3OEIwMDBCRkUwQkEwNDNEODhGODcwOTZFQjM0OEZDMTNFRTY0N0NFCis6MTA3OEMwMDBCRDdFQjBEQTIyRjkwMThFOTQ2QTRERUE3MUQ2MThGQkJBCis6MTA3OEQwMDAzNzlFRkI5OUFFNEQ0NEJBMTg5Q0M3RTgzQ0VDNjBENDg3Cis6MTA3OEUwMDA4M0UyQUNDRkE2MDQxRUFGNURFQ0VDMzg4QzIxRjNEQTVBCis6MTA3OEYwMDBFOTc1RTVERTNFRTJEMzkxN0IwNkZDQzI0RjY1Q0VDMzVGCis6MTA3OTAwMDBFOERBRkJDNjQ1MTg5NzdDRkJERjNGRjI2MERDRTk0RjA1Cis6MTA3OTEwMDA2QUI3MDdFMTNDQjlGQ0Y3MUVCQ0JGRTVFREU1RENDRTdDCis6MTA3OTIwMDBCOEQ5QTJDRkVDMTRGODRCNEVBQzc4MEFGMTc3NEJGREU2Cis6MTA3OTMwMDBERjRCQTNGOTlEMkRFMzcxOTREQjQyMEExQTlEM0RGNEMwCis6MTA3OTQwMDBCRDY4NkIyMkY5RTY4Q0ZBRTI5NjU0NTNEREEwRDNDNUVDCis6MTA3OTUwMDAwRTlFMjc2NTlERkZGQkMyOEVCQTZEREI2NkZCNjAwRDM4Cis6MTA3OTYwMDBDNzBGQjQyMkJFNEYwQTdERURFNDJFMEZGOTMzMEM3ODE5Cis6MTA3OTcwMDBFNjZFMUI2NTQ3M0NGQ0E5RDUyMUUyRjBFRDM2OEU3RjEzCis6MTA3OTgwMDA3RDNBQzZDRjAyNjIyOUFDNzAxRURFOTc0OEZEQ0Q3RkRFCis6MTA3OTkwMDA0MDIxRkQ2MjBFOENCNTBDRTgzQkQwN0ExQkQ5RDlENkJDCis6MTA3OUEwMDA3OUNDN0Y1QjlCMzIxMEQ2NkZGRTVBODlGNDUyNkNCRjQ0Cis6MTA3OUIwMDAxQ0U4MjFCMDZDMzVDNUQ5QUNGMzlDMTNCNEM2MzM5NzIxCis6MTA3OUMwMDA5MzlENkVDREYzOThDN0I0NzUxM0IyRTNFNDdCQjRGMjI0Cis6MTA3OUQwMDAzOEY5QzI3RUVDOUEzRjI2MDg3REExOTQ1RDhFRjlFOEM1Cis6MTA3OUUwMDA2NzU5RTE4RjBBQjVGRUVEOUE5M0Y1OEM5MkI0M0VBOEUzCis6MTA3OUYwMDA3NzUyNzlBQURFNDdFNTUzMDkxQThGNjdFRkQ5N0Y5ODQ2Cis6MTA3QTAwMDBFODRCNkQyRjQ1N0VERkQxRjY0RUUyNEQ1QTQ0NkU1RjU2Cis6MTA3QTEwMDBCMUY5QTM4MzNGODE3QTMxRTNGRTFCQzMzRjNFNUJFMEI0Cis6MTA3QTIwMDBGQjRBMjFCRjE3MEE3REEwRjhEM0JFRTVGNzZDOUNFRjk3Cis6MTA3QTMwMDBDODU4NzgwREI5M0QxQkVGOTU4REMyODMyMUM3QURGOEFECis6MTA3QTQwMDAzOEQzOTY5Qjg4NzQyMTI1NUFFM0MwNUYwRDJGQkQ3REU2Cis6MTA3QTUwMDBCNzU4ODk5RjM3NjhGMENGNTNDMjFGMzA2RkNCOEM1NTEyCis6MTA3QTYwMDA4MzYwRkNDNkJERUYwREUxRjcwMkIzQTMyODFGMENGQTNCCis6MTA3QTcwMDBCNEQyMUY2Mzc1NzZFNEU3MUUzQTZCQkQ5QkYwNjNEMDBBCis6MTA3QTgwMDAwNUYwNTE4Njg4M0Y2NkEwREQ2N0E1QjdGRUYyODkzQTBBCis6MTA3QTkwMDA2RDFENDM1MDBFNThFOUFCNTM2MjcxRUYxNTRENERFNDI3Cis6MTA3QUEwMDBGRUYyNzk5QTNFMDVFRDUwRDg1RTU2RjEzODFEOTczRkFCCis6MTA3QUIwMDAyN0Q1RTZDMzc3MjI3RjZFRTFGQ0IxRjg1N0RCN0Y4OURCCis6MTA3QUMwMDA3MkE3RUExNzBGNzg1MUVFQkNBRjM2QTdFMzc4RDU4RkNGCis6MTA3QUQwMDBBRkY0NjI5Q0ZCQTQxQUY0RTJGN0VGODc5NEI4Nzk4NUJGCis6MTA3QUUwMDAwQjEzMjVFMTBGMzdFNzJCQjAzNUMxNkI5MDZGM0Y3OTUyCis6MTA3QUYwMDBEQ0U2NDMzRjQzRUQ1NjA3OEY4M0VGRTI3ODgzM0E4RjBFCis6MTA3QjAwMDA3RkVGOEE5RkFGNTBGNUYzMDdEMjM1OUVDNzZBQ0U1QkYxCis6MTA3QjEwMDBEODYyQTNGQzEzRjQ5N0UxMzBCREM1NzE3QkUyQzIyRDlFCis6MTA3QjIwMDA3REM3Qjc2Qjc3QUQ4QjlCNzc2MkU0MDc1OEU5RjYwNkE0Cis6MTA3QjMwMDAwQkJEMDI1RUM4OEUwOTAyM0NFNDE2MTc3MUVCQzYyNzI2Cis6MTA3QjQwMDA3RjNDRjIwNEMwNzU2QUNCNkZCRDUyNjFCNERGOUNDNzQ1Cis6MTA3QjUwMDBDN0NGQjREQ0ZBNTMwQ0YxRjQ0NkFGOUQ4MkJFMjM3QTUyCis6MTA3QjYwMDA0MzI4NkUxRTQzQjUyREVDNDUzQkJDN0FCMzhERUNCQTcxCis6MTA3QjcwMDBFQUVEMEE3MzYyM0VDQjcxMDdFRERCOEJCNkZGRTZGNUVCCis6MTA3QjgwMDA3MTAwREZBMjY3NkQ2OUQzRjkzNDI4NUZDMTU4QTc5RUUxCis6MTA3QjkwMDAzQzEyQjEyRTU1M0I3RkMzRTNCRDlBQzgyNzExRUJCMzBFCis6MTA3QkEwMDBFOEQ5RkQ3NkNDOEJCMUUyQjFBQzY1QkZCREMzOTI4Rjk1Cis6MTA3QkIwMDA0MEVCRDQ3MjYyMEE5RENCN0JGMjlDMURGN0QzRjdGN0EyCis6MTA3QkMwMDA0OTc0QkZCMkY1RkJDQUNEQkZGMUEyN0M0MDNDNTE1QzA5Cis6MTA3QkQwMDA1RUFDNTdFRkY5NDJFMTZCOUUyRkExNzZFNDg3RUI2RDI3Cis6MTA3QkUwMDBGREM2RTBERTNBOUFFOEZCOTlFNzYxRkNDQTM3MUQ5NENFCis6MTA3QkYwMDBBRjU0RjlDQzUyQ0FFRjc5NEZBREUzNzRGRUM4Q0E3NEUyCis6MTA3QzAwMDBEQzVGMkI2REMxNzQxRjk1RkM3OUU1QTNERjI1RkE1QjYyCis6MTA3QzEwMDBGOENBNzdEM0Y5NzkxRTNEOTNGQjZEODI5OTM4QkZGOTg1Cis6MTA3QzIwMDA5QkZFODVFNkI3ODAwNTg4RkUyQTFGNTEyQUQwNUY3MjI5Cis6MTA3QzMwMDA1NjY1RTVDRkM2RTE5MzNGMDkzRTc5RUYzMTA3MDY1MTFFCis6MTA3QzQwMDBEOTdCQzI2RjE5N0M1NTExRjdGRTVBRTM0OUZDQkU5NUVBCis6MTA3QzUwMDBCM0MyOEVERTk1MjgxQkY3MTQzOUEzRURBQURBMkRBQjNCCis6MTA3QzYwMDBEQjcxN0QzRUI4NDgxRkU4QTNCOEJFMUExNEY4OTI0OEVECis6MTA3QzcwMDAxRjdGRTVBQTgxNDI4RUQxM0QzMTg2OUU1Mzg2Q0ZCMUNBCis6MTA3QzgwMDA3REJCOERFRThCODlGQUNFNzRERkNCMUQ2MjdDODAzQjkxCis6MTA3QzkwMDA0MUJBMENDQUY0RjhGRTRDOEY1QjMyRTBFM0Y5MkYwNkQwCis6MTA3Q0EwMDA3REY1QzZGNzVCNzgzRUM5Qzc0N0I5NUNDMUJDMTg3QTk5Cis6MTA3Q0IwMDBERjZFMEIwRjM0RTVDMzM4NENGNzg5NDRGMjNENkM4MjFDCis6MTA3Q0MwMDBBRkNERUYwMTRFQ0E1N0U5QzFFRjNFODlFMkFDMEIzNkFBCis6MTA3Q0QwMDAzOENDNzk3MDNENzQ2M0JERTdDNjlDQkZCMkQwQTI2RjRCCis6MTA3Q0UwMDAxOUE1NTUyRUJDNjk5MTBCNkNEM0Y5RTVBRjU0REI0MjU1Cis6MTA3Q0YwMDA5NDc3NTQ3RERDNDFGNjQzRjU3NjVCMDVFMkUzQUZEQjM4Cis6MTA3RDAwMDAwRUJFN0UxM0QwRjk1RjVCMENCRTM1Q0I1NzJCREY1NjEyCis6MTA3RDEwMDBFRTE4Q0RFMkYxRUQ1RkREN0UxNjk3NkZFMTc5NUNCRTg2Cis6MTA3RDIwMDA3NTQ3RTIxMTFBRkJGQUU0RUJDMjVFRTRBQkUyOEVEMUQ2Cis6MTA3RDMwMDAwNzkyMzAyRkY3ODNBNzE2NUQ0QzdFMDYwQjVFMERCOUI4Cis6MTA3RDQwMDA2QTk1OTc4RjI0NkFGQ0ZFODI5OEJDM0FCRTlGNDdGMkUwCis6MTA3RDUwMDAxRDM5RkUwQzdBQUM3QTdBMzE4REQzNDNCNzA2NUQxQUExCis6MTA3RDYwMDA3NERCNEI5RTk2MTU4RkQ2RjcyRkEyM0MxQTEwRUJDRkUzCis6MTA3RDcwMDAwODRFNjIwNTc4QUY1RUEzOUQxNUEwRkYzOTI4MjdGODRECis6MTA3RDgwMDAxRkNGOEU5M0Q3QzFFQTg2QTI5RUQxRThDRThFOUI5RjRECis6MTA3RDkwMDBFQjc3RkJEMDhDQzU3MzY1NEFCQzc4QjdCRjRDOEVBQjE0Cis6MTA3REEwMDBDNzk3QjhCOTVDRDk4QkI0MDA2NUI1OUJFM0FENDlDNDNFCis6MTA3REIwMDA1N0MwMTJBNEJDN0ZGNDI5MTIzRjI1N0I4OTlGNkNGMDI5Cis6MTA3REMwMDA5Q0QxQjk0QTNGOUREQkY2MjdDQTFGNjlBMDgyNTVCOEVFCis6MTA3REQwMDBCNTI5MkFGQTUzOEJFNUE1Qjk1MDVGRTgyRUU2RjVGMUVGCis6MTA3REUwMDBGMkNFMUNBOERGRTYyRUUxRjVDQkU0NjIxQjkwRTYxMzkxCis6MTA3REYwMDA2Q0Y0OTRDOTUwQUYzMUU2MzkyRkM5RTRERjUwRTUxMzc0Cis6MTA3RTAwMDAwRjYyREM0NTdEOUVERjE3QjcwRUY4REE1OTE0ODlGNzRCCis6MTA3RTEwMDAyNjNBNThEMDU1ODRGNzM0NDIwOUY1NTVEOUJGNUY4NUM1Cis6MTA3RTIwMDA0NkUwMDY0N0UwMUEzN0M5QTM0OTFBRTJGNTk0Q0Y0OTVDCis6MTA3RTMwMDBGOTMyNzczQzc3MTVFNTY3NTZCQkI5REY3OEY4Q0VGMUI0Cis6MTA3RTQwMDA3NEZGRUVENzMwRkVDREVFMDFCRDhGREY2NEUzRkQ5QzA1Cis6MTA3RTUwMDBEQTMxQkMwQ0YxM0FGQzYyNDY3RTA4MDNGRjQ1QUE0NkMzCis6MTA3RTYwMDBDRjVEMkQ3OEY0OTRGODNGMDNDRjdGMzQyNkRCQTk5RkI0Cis6MTA3RTcwMDBFQTlFRjUzQUJGQjI1MUU0MzUyODg5OUMwRTk0MjRCOUE0Cis6MTA3RTgwMDBFRTU5Mjg5NzhBRjVCRjQzRTAwMzdGRDA1RUVFREEzQkQ4Cis6MTA3RTkwMDBGMDMxN0VERjUzRjcxMDVDNUY0NTM5RjM0N0Q0MUJCQkVECis6MTA3RUEwMDBGRjM1RDE4RkU3NTdERTRDRTBGOEJBMjE2OUJERUQ1MkJFCis6MTA3RUIwMDBBODE3Mzk4NzJDNDVBMjdFNTNEQUY2NUQyQ0JGRUQwOTUxCis6MTA3RUMwMDBGQzkwRTM5Rjg1QjFCRjlCNkU1Njc4N0ZFRTNBMEZERTQ0Cis6MTA3RUQwMDA5RjI2RTk1QzhGOTY4MDY4NjYwMzFFMUE3NUE2RDk3MzgzCis6MTA3RUUwMDA5MTQ1Q0RGOTE2OEE1MkQ0MURBNjcxM0RBNjcxNTkxNjM5Cis6MTA3RUYwMDBFQzgzQjA0RTM3OENFNUVCMDQzOEE1N0RGMThEMzFCQ0I5Cis6MTA3RjAwMDAzRTJCOTREM0Q4QTExMTFDRjcyMDFDQTMxQ0ExOEJEMDBECis6MTA3RjEwMDBGRUI5MDlENDIyNEVENzY2RkJEQjg4RDNEN0ZFNDUyNkFGCis6MTA3RjIwMDAzQkIzNTZEMjFBREQ1MERGRjkxNjIzQjlEQzk5RTAxNUMwCis6MTA3RjMwMDBGOTA3RkNERTE5QzMyRjMxRjZBNUI5NjVCODY0MjU3QkI2Cis6MTA3RjQwMDAxNkYxM0MwRUUxODczMkUyRTg2NzU5QUI4MjkzODlGMTgyCis6MTA3RjUwMDA1MzVCRTRFMTc4QjY5RUU0NjQ3RkYxQjE5RkJCNDU3QzVFCis6MTA3RjYwMDA2QzEwMUI3NDgxRjFCMTY3RENFNzExMUZCQkM4NkRFOEIxCis6MTA3RjcwMDBGMzIyREUyRUY2RkYzMzQ3NzIyODVGNDg1NTMxMjc4RkY0Cis6MTA3RjgwMDAzMUJCQTY1MDhBODhGMUREMkU4QkZDMzVFODc4QzQ1MUQwCis6MTA3RjkwMDBERkFEODg5NzExNDdEOTJEREM1RUVBMjUzRkUyMjRBM0E3Cis6MTA3RkEwMDBCQ0U2NTExRDA1OTQxRjYxQjNFNjQ3MUM5MzI5RTFBOTY2Cis6MTA3RkIwMDBGNEM1NjIwREYxRDkyNEUyQzYxNzFBQjczN0UyRkVDNTNGCis6MTA3RkMwMDBGQzUxNEMxQ0ZGNzk2RjM5QzU0MThCN0RGMUUzRjhFMzFGCis6MTA3RkQwMDA5NEQ5MTQ3NzYwNDdGOEZBMTk3MTdDQTYxNDJBMDhFNzM3Cis6MTA3RkUwMDBEOTMwRDg2MDA4RTc1MUYzREYwMUI5M0MyREE4NTA1QUM5Cis6MTA3RkYwMDBDRDVCRTZFN0UzMkM3NDYwNURFRkJGNThEN0ZCN0NGMzA1Cis6MTA4MDAwMDAyMERFRTdGN0FBOEQ2MjIzMjkwRkMyMjZGMjIwN0VDOTVGCis6MTA4MDEwMDAwMkY3NDdFNzQxMTg3OEVDMkZDRkM0OUE1NzYyQ0QyMzc3Cis6MTA4MDIwMDBDOTBDOThGMTM0QjhGMjUyRDNGQjhCRUE4QTRDRjU4QjI5Cis6MTA4MDMwMDA5NzhEMzNCNUNGODY4RDMwQkE5RUJCNjY5QUE5N0Q3RTZCCis6MTA4MDQwMDBGMzRDNTM3REU4QzY5QjRDRUQ4Nzg1RTY5QURFMEZERjQ3Cis6MTA4MDUwMDA1QUQ1RTdCQThGNjg1OTYyN0FBRkM4QTE2MkJDMEZEMjBECis6MTA4MDYwMDA1OEY3Q0JGNkZDMjAyRTVEMThFQjZFRTQ2OTYxQkExMTZGCis6MTA4MDcwMDBFMjc3MzRBQ0ZCQzNEOUU0M0YyQTkzQjREOEY1Rjc4NzUxCis6MTA4MDgwMDA4M0I0MkY1RkU4RkFFNzdCODQzRTc0ODFGQzNFMEE4OTYzCis6MTA4MDkwMDAwREUzNDQzQUQ3MTNCQjZDRUUzNUE4MTcyNzAzNkMyOEMxCis6MTA4MEEwMDA2RkFERkE0NTcyRUIwQkZGMkQ3OUUzRTU1QjY4MkI5MDIyCis6MTA4MEIwMDA4RUJFQUZFODYzNzFCRjFGMjBGMjIzOUI2NDcxOUU3NDc0Cis6MTA4MEMwMDA5MjkzRjQ4MTdCNjRGOTk2RTg3QkU0QUZGMDcwMzk3MkE3Cis6MTA4MEQwMDA4NTg3RkI1NTdFMDJGQjI2RUU5MzgzMTM1OTkwRjY0RjVFCis6MTA4MEUwMDA3MUJFOUNBMTQzMEFFNkVCNEQ2NUUyRkNGOTYzQUIyNjQ5Cis6MTA4MEYwMDA0RkMwNzg2NjQ3ODE5NjhDMjIwNUVBREY4OEM4RkQ5QkQxCis6MTA4MTAwMDAxQzVBMjNDNjAzNDYyOTVDOEU4MzdDOUZFNjE5OERGQjhGCis6MTA4MTEwMDBDRTcyMUJENzdGODIzNkM0RjM2MDI3MEI3QThCNjhERjYxCis6MTA4MTIwMDBBM0I4NjYzMjRCOTM5NjE0QTJFOUQ1QjNCRjY4NUYwMDNCCis6MTA4MTMwMDAzMTFDQUMxQTlFODQ3NkQwQ0IzODM0MDY2OTlEMDlCNEM0Cis6MTA4MTQwMDBGRkRGNjhDOEJEQ0E2MTI0RjdDRUI4N0JFRUI1QTBGM0U3Cis6MTA4MTUwMDA4RTY3RTZFNUQyRjNFMzM3MDNENzAxRkYxQ0I3OUJFRDRCCis6MTA4MTYwMDBBMkZFRkM1Mzk1OUJFRkY3QTBGRkZGNzgwMTMzRTUxOUMyCis6MTA4MTcwMDA1NDdCQjgxRDU1RUQ1MTc4QkMzQ0Y0OTc3NDQ0NEJEN0YzCis6MTA4MTgwMDBGQ0NGMkU0MUEwNkJBNUY2NTUyOEEyNTc2RkJDQkQ4MjJGCis6MTA4MTkwMDBGMjc2NzdDRDA4QTJGRkNGRjAzQjFCRkRENEI2NEU2NDNDCis6MTA4MUEwMDAzREY3MDc0MzNGMzdCQ0MxRkQ1RjM3N0M2NkY2RTdERTJFCis6MTA4MUIwMDBFOUUxNzlENzc3OEFGMUFFODdDMjA3NzhCQjFFRUZGNDgxCis6MTA4MUMwMDBDNkYyODUwOTUzOTAxRkUwNzk1ODgyRkFCN0RCNDBGNTczCis6MTA4MUQwMDAwM0JBOUYxMUM4QjYyMTNDQkY2N0ZFRDc3NjRCOThBRjU0Cis6MTA4MUUwMDBBREQxRjdEN0IxMEExQkMyRjVGQUNEOEIzREQ4QUVBN0ZBCis6MTA4MUYwMDAzRkEzOUZDMTc4QTYxM0Y2RTlFNEEwMkQxREU4QTdGQkQ1Cis6MTA4MjAwMDAxQjEyRURFQjMwOUUxMzlGNTdDQzFFQkMxMkI3MEU2M0IyCis6MTA4MjEwMDBCQ0Q3NTlFMEY0NkJCMERFMzM5OTlGRkEzNUZBNjcyQzdFCis6MTA4MjIwMDBDMTI0MDc3NzU0MkVGQTUzNkEwRUNBM0Y5OUZDMUY0QjlDCis6MTA4MjMwMDBGNjNBNDhGRTc1NTU5RERCRkUyMEJDQkY2NTcwQzc0NTBDCis6MTA4MjQwMDBBODVGQkM1OUY1RDkyNTg4OTcxQjM3MkE0QzgzRjUwRkIxCis6MTA4MjUwMDAyNTA0RUVGMzQ0RTFFREY4QkM4RjNDRjgxRUY0ODRDNzJFCis6MTA4MjYwMDAxRkM0NERGRTY5MDc5REYzN0FCM0VBRTk0QkEyRjVFQTE0Cis6MTA4MjcwMDA0RDlFODkzRkY2RTAzRTM5RTZGQ0UyM0Q2NTRGMEQyMzE5Cis6MTA4MjgwMDA3QkRCQTBBRkRCMDQ3RDJENzk3MjI4RTk4MzRCM0NFNkQ0Cis6MTA4MjkwMDA3QjUzOTYzQzlFNEJFNzg5NEEyNTE2RDc4RUM0N0IzRjdECis6MTA4MkEwMDAzMDJGN0QwN0QwMTU5RTIzRENGNzI5Q0YxRkRGNzkyNERGCis6MTA4MkIwMDBBNTk4Q0VBM0IyQzA3Njg0Q0Y2OEJGRjNFNTlCODY1MzYyCis6MTA4MkMwMDA1RUU3QjFCNEYzQkIxNzE5RTAwQkEyN0VDNTM4OUMyRjUzCis6MTA4MkQwMDAwOUZFOThENTlBNUEyQ0Y0QkJFNzEwNkYzN0ZERkFDOUZFCis6MTA4MkUwMDBEMzdGNDBGQ0VDN0RGQUYxM0JCMTREQzlGOUUxODM4OUM0Cis6MTA4MkYwMDA3RENDMkZGMDAwRkIxOEQ5M0Y1RDJDQzFFRjg4NjNGRkM4Cis6MTA4MzAwMDAzQzJCRjRBRkVGQ0IzQUQ5MjVFN0U0MEE5MUJGQ0VFRDkxCis6MTA4MzEwMDAxMDQ1RjY2NzYwMUU3NzRCQUI5Mjg4NzhGM0EyQzE2Mjc2Cis6MTA4MzIwMDBDODE3RDAwOUJENzhGRkEyQjgzRkREMDlGNkQ5NzAyMTgyCis6MTA4MzMwMDA3RkRBM0QxRjRGNjlFMjcxMDg5MzVFNTc3MkE4Q0FBNEE1Cis6MTA4MzQwMDBDRjU1QzAzRjk0Rjc5NzZGMEEzNEUyM0Q4REJERUE3NTczCis6MTA4MzUwMDA2MTk5RUNFMTJGQUJERkJERjMyNUU1N0RBNzg3RjM3RkM2Cis6MTA4MzYwMDA0QjAxOTdERjJERTE4NDEwQjcxQjU4MzFFQTdCQ0ZFMDNBCis6MTA4MzcwMDA1Q0UwRkRCNDY0QkUyRkQ4QTVDRTAyMjdGQzdFQzZGMzE4Cis6MTA4MzgwMDBDOUFBMzU1OUIwREM3OTFDMUY1OEM3QkZEM0MzREEzODI2Cis6MTA4MzkwMDA5REY2RTg3Rjg3MkVFNTdGNjc0RTlDMDMyRTExRTdBMkFFCis6MTA4M0EwMDA2M0VDNDlFMDJCQkVDOTI2OThGNEM3RjBFMUJGRDEzOTkwCis6MTA4M0IwMDA5N0VEMjlEQUVGQzZBMzNFMEY3QTBBRjJCRDRCRURCMDc2Cis6MTA4M0MwMDAyN0M3OTlERjJGNTE3RTAyN0Q4RkY1NzJGQkM0Qjk4N0Q1Cis6MTA4M0QwMDBDN0UxOUM5QTRFRjc5RUI5N0NCRTUxNjgyRjE5RUQ0RkFDCis6MTA4M0UwMDA4OUZENjZGMUUxMzc4N0Q4NjE5RDRFQ0I0N0JDMTg0N0MwCis6MTA4M0YwMDBBOERFQkRDMzhCNjZGMjY1ODk4MTI0MkZDNjRCOEVCRjc0Cis6MTA4NDAwMDA1QUVBQTM3Q0FCQ0Q0M0QwQUU2RDA5RjNGOEM0MDg5NTBFCis6MTA4NDEwMDAwNUQ1MzhGNzM1RDc2RTJDQTY0QkJGNkIzNkE2NTIzOTJCCis6MTA4NDIwMDAwQ0ZEMDlGMEE4MzZDQ0U3RDlCOUE3MzEyNTlFQkQ1RDcyCis6MTA4NDMwMDBGQjFGN0IwN0UxQkEzRDNEODA5Rjk3MUFEMTVBQkMxMEM0Cis6MTA4NDQwMDBFNTFGQzI2MjAzMzlGN0Q0QTdDM0E5QkY0QkJDRDkzNDE3Cis6MTA4NDUwMDAzRjE4NUZDNUU3MjA5MTY0QkNFRkU4Njk2MUFGNzU3RUE2Cis6MTA4NDYwMDBBQTUwM0JBM0RGMTE3QjI2MkEzRTU4Q0JDMjcwRjMwMUYyCis6MTA4NDcwMDBCMjBGNUIxRDFBQUVCMzZCMEJCRjBGQ0VENUVBMjJCOTlDCis6MTA4NDgwMDA1N0JCNkYyQUI3RTM5Mjc5REM3MzdCNDJGNzFGQzUzOTdDCis6MTA4NDkwMDAzNkZBQkIwNDJFNUYzMzRCODFGRUI3REJGOUZFMzgwQzk2Cis6MTA4NEEwMDAxODYwODczQkYyREMxOENGRDVGQTYzNEE2QTc3RTZGMUE5Cis6MTA4NEIwMDA3QkY1NUM2QTMzRkI4NjNCMUFFRjFFQzJGQjU0MkZBNzg5Cis6MTA4NEMwMDBBQkVEMDk2MTE5RjM3NkJBODEyNjFGMjNCODIyNzAzMjA5Cis6MTA4NEQwMDAxQUQ3ODA3MzE4RTlGM0RCRUREREVGRTJGOTRCM0E1RjcxCis6MTA4NEUwMDBBNzIxMUMxQzRFRDYzQTU0NDNCREMyRTVFM0YxNUI5NzZECis6MTA4NEYwMDA0RkYzMDdBNTU4Qjg2QTQ3ODI5RTBCRkM3NjRGMDM4QjUzCis6MTA4NTAwMDBGQzdEMDRDQzYzNEI4OEQ0OURDMDEzREI3Mzk4OTAwNzJCCis6MTA4NTEwMDBDMzU2NEZDRThBQUU4MzQwMUExM0Y5N0VGNjNEQzM1NzM5Cis6MTA4NTIwMDAzNzREMjAzQjI3QThBMDVEMEZBNTI3MDVFN0M5RjczN0UyCis6MTA4NTMwMDBCQ0JGNjA0MDExQzcwM0ZBODkxMzlERkM3RDRGN0IyN0E4Cis6MTA4NTQwMDBCRkIyNDQ3NUYzNzZGRTI0NUZFMjM0ODlGNURDNjc2QUQ2Cis6MTA4NTUwMDBGODlERUU5MEMyRUY1RTg5RkVBREYwODE5MTFBQzA1Mjk3Cis6MTA4NTYwMDBGREMyRjM0NEI3OEJFNEQ2MDc0NzY4NzgyRTMxQjAwMERDCis6MTA4NTcwMDBFOUY1NTc2RkM5MENFRjQ3RkFFMDQ5MTc5RDQzMkU3ODhDCis6MTA4NTgwMDA2RTMzRjlBQkFERkRBRDNFRDY3MDFGRTY2NTc3M0QyNzg2Cis6MTA4NTkwMDA2OTk4MDdEQTY1RUJBNkI4NTE0REVCN0I3NDVFNzFFQTFBCis6MTA4NUEwMDA5RTEzNzQ2RTRCNDkwQUQ0Nzk0NzYzNUVDNDhBMzJDNDAxCis6MTA4NUIwMDBERjU4RDZEQzg4RkUzRDkwODcxNEE3NkZDOUUwRjJFMzUwCis6MTA4NUMwMDBDQ0QxNEIxRTVCMTE4NUVGMDdCREMyQkZEQjFEQjgxOEI4Cis6MTA4NUQwMDBGOUE2NTVGMEU3M0VENDZGQTBEQzJERjRBQ0RERkI2RkJGCis6MTA4NUUwMDBDQzhEM0U4NzE1NjQwN0M4MUZENkMwMEU1MTdFQTFGMTAxCis6MTA4NUYwMDBCQzJCQTREMjM5QjBFMUFGM0I2RkQxQTNFOEFENTlGMEE5Cis6MTA4NjAwMDA3QkIzMTgyRjNGMjlCMDhBRjg3NkZGOUZFRDVFMERGM0ZDCis6MTA4NjEwMDA1ODVCODZBMERDNkQwMTNEQUNBRjdDQzY1QTBCREZGNDI1Cis6MTA4NjIwMDBFNEI3OUNFNEY3NzFDM0JBMzYyNUMxM0EzREZERkE5RTIyCis6MTA4NjMwMDA0QkYxRUY4QjAwRkM4Q0VFQUIzQUVFMjBCOUI5M0I5QkQzCis6MTA4NjQwMDBGM0RGOEFENzNFMTk4OTcyRUI5M0JEOEIyRTQ2N0MyREMyCis6MTA4NjUwMDBGM0RBMEMzQTlGOTQ4MEZDRjQyQzIzMzk2NkYwNjMyMTAyCis6MTA4NjYwMDBGMkEzODRGNzQyNzEzRjRBMjFEMjM5RjI5RkJEN0QxQUFECis6MTA4NjcwMDBGMURGNkU3RTJGMDREMDM5RDEzREQwQjkwRkY1OEI0MjlBCis6MTA4NjgwMDAxRkQwM0Q3RDNGOTRGODc5N0JCQkNDQ0Y4MTgzMUNDRjNECis6MTA4NjkwMDBBN0ZBMjRDQTU3RDlERTNFRDk0N0ZDMkMwMzZBOEI5MDJGCis6MTA4NkEwMDAyRkMzMDdBODlGMTZGQURCNzVBQ0M0NzI5RkVCMjk0QzQ5Cis6MTA4NkIwMDBEMjE4MTA5MThGN0ZGMzcwM0U2RDI5RDA5MkZDMzA5RkJECis6MTA4NkMwMDA0NDQ1MzFGMTQxRDQzRUM5RUI2MjFGOTU3Rjc0RDNFQTMyCis6MTA4NkQwMDAwREY4RjdDM0RBQzVCRTIwRjRBRTdENDJDRjY1QzdCODRBCis6MTA4NkUwMDBCQzVGMkFGNkIyMjVCRjE5RjdFRDZEMzBERjI1MkYyOUMzCis6MTA4NkYwMDA1Q0ZFMEIzQTM5MjBGNEUwNDNGNTE5NTRDN0ZENDI4MzgwCis6MTA4NzAwMDA3NTFBMEQyNURFMDc1NEFBRDdFMTlGMkY2MTYzQ0E5QjE2Cis6MTA4NzEwMDAwRjYyMzlBRUEyQTUwQzhGNEM0RDk4RDU3RTkwOUY2MTBCCis6MTA4NzIwMDBEMzg3MjNGREVEM0E3MEY1NzBDQURGM0RFRTYwOThBMjY1Cis6MTA4NzMwMDBCOEVCNkZERDdGN0MwQUYzNTFGNzAxRkVFM0VDNEJFODA5Cis6MTA4NzQwMDA5RjY1MTRCRkE5MjA3QUVDOEQ2RUJBQTQ4RTZCQzZGQjEwCis6MTA4NzUwMDA0MTBGQkNBNzdBQUEwQTFCN0QwRDEyMDZFMEUzRjU3QjQ4Cis6MTA4NzYwMDBBQTU2RTNCRDgwMzcyNUU5Qzc5MTFFOTdGQjAyQzc5MTQyCis6MTA4NzcwMDA4RkJBNUVGOTVCM0FDQUY0REQ0N0ZGRUM0NTc5QkZDQkFGCis6MTA4NzgwMDBBRTBGNDczQURCOTUwM0Y2NDAxQ0ZBM0MyQ0U4QTdBNDUxCis6MTA4NzkwMDA5N0JDOEFDRkJDREM1RUJBMjRDOEQ2MjFGREQ0RUM1MjhCCis6MTA4N0EwMDBFOEVGMTY5Q0RFQTVFODc4MEVGQjVEM0Q5MDhFN0FDRTU0Cis6MTA4N0IwMDA0OTE2QkM3RTNDRUVFRkMyQUU5RENGRDFDRUU2QTNERTI1Cis6MTA4N0MwMDAzMjkyRUVDQjMwRDk5OTRDNTkyRUQzM0RFRkFEMTJGOTAwCis6MTA4N0QwMDAyNzJBMkQ3QTQ4MzU2QjVFMzUxOEY3OERENkNENzY5Q0Q1Cis6MTA4N0UwMDA0N0Q1MTZGM0Y3RDVBOEJGOENDNEIyNkY3QkY1MzNBRjZFCis6MTA4N0YwMDBEMDVGNzI1OTJFRUEyRjQwM0ZFNDlGRTg3RTRERjEzRjUzCis6MTA4ODAwMDBDNjI4QkZBNzBERjM3QjlFOTYzOTdFNDA1RTEyMUYxQUM1Cis6MTA4ODEwMDA3QUNDNTY5RjdFMUFGNUNBRDM4MjRFQjcwQjdCQjQ3QkI3Cis6MTA4ODIwMDBCQjQ0RjlGREMzQjZGMkJDRUI3MTI3QjVDRDhDQ0Y5RjJECis6MTA4ODMwMDBGMkMyMkE4NTFDMUNBN0YyRjhDNUI4QTNCOTE0MEYxREYzCis6MTA4ODQwMDBBMzMzRjI4NzJDNjg5NTQyODhDNzRBNDNBRjEzRTcyOUMwCis6MTA4ODUwMDA2MERCMjVCRDZFMkMwQjM1RTJGRDcyMEJCNzRBNzQwRTQyCis6MTA4ODYwMDA2M0QxNTZCM0ZGQkU3QUUzMkI4N0QxM0M1Q0RDNjIzOTFGCis6MTA4ODcwMDAxRjJGRjA2MjhENkZFQ0MwNUZFMkM0MzcyRTRFMTJGRUU4Cis6MTA4ODgwMDA5QzIxNkM4OEU5QkM1NURCRjk5REI3RkFBQjM4N0ZGREJDCis6MTA4ODkwMDBBQUU4REY2ODM3MjE4OUQzNEQ4RDk4NkY3NTQ4MDk4OTFCCis6MTA4OEEwMDBCRjRGRTlDNkZDREI1QjA1N0REQzJBRThBMzk2ODVFREJFCis6MTA4OEIwMDA5OEJGQkY3ODAzOUYyRjVCNkYzM0RENUJCQzYwRDdFRDQ0Cis6MTA4OEMwMDA3NDFFQzE0QTQ3OTVEQjc4REMwRDEwNDhGMTlEQ0E0REY2Cis6MTA4OEQwMDBFNkY3NTUwMjFGNTUxNjdDRDQwNDI0MEI1QzVDREY4RTMyCis6MTA4OEUwMDA4NUFCRTU3QTVDREZDNURCNkNGNEY3MzlBQzcwOUQ2NTcwCis6MTA4OEYwMDBCMzI5OEZFODFGMEQ5Rjc1OURBRTMzRDZFOTUyNzZBOTM3Cis6MTA4OTAwMDA2OTlEQ0FGQkJFOUYyMDYyREY5OEY1REY2NzBGNUY0QTUzCis6MTA4OTEwMDBGOTJFNjdEQTcyQzg3RjYwRDA4N0I1OUYyOTQyN0Y5RUEzCis6MTA4OTIwMDBCQTkxRUI5OUE3Rjc5NDI1OEU0MEJCRTg4OEVBOTdBMDA3Cis6MTA4OTMwMDA5RkUyOTczRUY2RTI3OThGQTJCRDBBQzNCODYwNTc2QkZCCis6MTA4OTQwMDBGMTNBM0NBN0JEQjMyREVGNUFCQzhGQTJFODI1OTVGNkFFCis6MTA4OTUwMDA4REUyOTc4QUU4NUU5MEEyOTc4QTEyNzMyOThGNDI0QjI0Cis6MTA4OTYwMDA0NTdDNDAzRkI0RUY3NjFEQzlGQjdEMjFDQUNGQjZDOTE3Cis6MTA4OTcwMDAyNTg4RTYxNTQ3OEExMjUxM0ZEOEM5QjgzRjQyN0FBOURGCis6MTA4OTgwMDAyNEI1MjM2QTFGNTk5Q0M0RkQwM0FCMzJERUI5MDdGNTM5Cis6MTA4OTkwMDBGN0E5Q0ZEQUU4QkNDOTU0NUJGN0NCOTg3RkIwQjM0REU5Cis6MTA4OUEwMDBGNUFGODA3QUY1NEI3MzFCRjA5RThBRUEyNzI1M0ZBQTI0Cis6MTA4OUIwMDBEOTg3REI5N0E0N0QwN0U5QUNENUU2NzMxMEJDREYzRDEyCis6MTA4OUMwMDA4MEVGODNEQjI0N0YzRUI0QUZERDdCRDVGMEVEOThFNzBECis6MTA4OUQwMDBCREI5RDgxRjdEMkVCQjI4NTlCQjFGRjMyQTU5NjYyMjZCCis6MTA4OUUwMDBEOURGNTMyRkIyRDE3RTdBNkE1MEUyQ0ZFODNFMTY3REFFCis6MTA4OUYwMDBGMzE0OTRCM0E3OUVERjY5QTc3MzgzREIyNTk2MDExMzU1Cis6MTA4QTAwMDAzOTlDNzFGMDE5QkFERkUzOTdBRjUwQkU0MkQ5QUU1NzI3Cis6MTA4QTEwMDAyODNGQTEzNzc5N0YzQUE0QjAzMEQ5RERDRDc0MkZDQzZGCis6MTA4QTIwMDBFMkNENDZCRDgzQ0U0MTU0MDhCREE5NjZDQjA5QUE1NzA1Cis6MTA4QTMwMDBBMUZFMEZFMzU1NkQ1MjQyMUFGQzdBNzBFRkFGMjhCRkNBCis6MTA4QTQwMDBBMTY2MUJDRjZGODBGNzI0N0ZBQTMwN0VBQTQ1RTg3QzAxCis6MTA4QTUwMDAyRUUzNzQzMDU3Qzg5RjQ1OENERjMzQjRBODk5OUZBMzg5Cis6MTA4QTYwMDAzM0VFNDUzMkU4N0NGRUI2Mzk5NDg3MTY5MzZGODZGNjZFCis6MTA4QTcwMDAyNUM1MjE5QTg5QkU2M0VGMUJFMkY0NkRCRDc3Qzg0QTE0Cis6MTA4QTgwMDBERjJEMDY3RDBGNjNDMzkwQkUzRjk5QzhGM0MzM0U3OUM3Cis6MTA4QTkwMDAyNTIxQjExMEU2RjNDOThCMEFFNURERjc0MUU3QjQ5RjY0Cis6MTA4QUEwMDAxRTExRkJGRjk5QjA0Q0ZCOTNEMUFFNzNDRjQ3QjQ4RjJGCis6MTA4QUIwMDBENDFFMzk2MzQ3N0Q3NTRBRUI4N0I0MEVEMzVCRjc0RkZECis6MTA4QUMwMDA0NjNDN0Y4QjA1QUExMTZGREY2QTRERjQyMTlGNEZFRjYzCis6MTA4QUQwMDBFMDcyNkI1QUFCMjM4NDdFRUE2RkIxOTYyNjVDREZBRTAwCis6MTA4QUUwMDA3RDNGNkY0QTQxN0E3OTgyRDM4QjIxQ0YxNjBBN0MyRTQzCis6MTA4QUYwMDAxNEY4NUNBOEYyRkI5RUFBMEFGNzNGODhGOUQwRDMxOEI1Cis6MTA4QjAwMDA5NzM3RDM1QTg0QkNEOTY0QzY2Rjk3QUQ0NTI1QkExOTM3Cis6MTA4QjEwMDAyMUIxRTZFQ0Q4RkQ2RTExRUJBMDczOEY1RDk5QzNFOTJFCis6MTA4QjIwMDBFRjQ5MDZDMTVFNDUzREFDN0E5QjM1MEVDRUVERkExQTkzCis6MTA4QjMwMDBDQjdFN0EzMEM5RjZBNUVFQzE3OEM3QjIyRUQzQkJGOTg5Cis6MTA4QjQwMDA3RTM2MERFODA5RTMyMTZERTE4NjQyOTQ3QjA2N0VBQzFBCis6MTA4QjUwMDBFQkQyQTZFNTI2RjU3NURFRjk2NUExQjcxQkY1NkY4QjlGCis6MTA4QjYwMDA3QjI2NUE3Q0NERUU2ODNCQkNEQ0M3RjVGMEFBQjE0QTQ3Cis6MTA4QjcwMDAxMEQ3QjVDNzVFQzkzQjM4NTI5MzIzRjYwQUQ4Mjk5RjUwCis6MTA4QjgwMDAyNTBERTA3NkNCMjhFOEZBODUyQzg1QTVBNTQ1RUM5NTQyCis6MTA4QjkwMDBENTE5Rjc0RjJGNEFDM0ZCMjNCOEJDRTgxQzAzRkQ2MTZFCis6MTA4QkEwMDBCRTgwQ0E0ODRFRDU2RTczODREMENFRjgxRjg1Qjc1QUEyCis6MTA4QkIwMDAzRDAwODAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDQ2Cis6MTA4QkMwMDAwMDBCOEQ1NzZENkM1M0U3MTUzRUY3QzMxRjg5MTNGQkUwCis6MTA4QkQwMDA5QTc4NjYyQzM0QkIzMUY5MjAyNTg0REIxMDlBNDBENzczCis6MTA4QkUwMDBGNjI2QTUxRDgzMTQxQzU4Mjk2QUFCRTJCNjVCRDkwQTg4Cis6MTA4QkYwMDA0RTUwODUyODEyOTVCODg5QTlENjk1Njk0MkRBN0U1NEQ3Cis6MTA4QzAwMDBFQTU2REQyMjZENjIxQkFCNEMwOTZBOTg5MkM4QTFBMTlECis6MTA4QzEwMDAyNUU5OTBBMDQwMUJEMEQ2NTlGQzYwRUI5NDkwQzAzNDVECis6MTA4QzIwMDBEMjREOTVEODczREU3QjhEMUQxMkI0M0E1MjhFREZBRkQ0Cis6MTA4QzMwMDBGMzlFRjM5Q0U3N0RERUQ3NUQ3REZGRjI5QUY1NDRERjdFCis6MTA4QzQwMDBFREJGRUVDREMyQzZGQkE1NDcwOUI2M0E5NEYwNjlERjg5Cis6MTA4QzUwMDAyMEVBMjBGMjQ0OUE2MEZCMjQyMzQzQjBBQkFGN0IxMzlECis6MTA4QzYwMDAyNTQ0MjM1NThCNDIwOUNDQkJBMUVBRjMzNUI0NkZGMUZGCis6MTA4QzcwMDBFN0UxQkNFREZBNTIyMTJBMjNFQTg0RDVDQkYyRkQ5RDJGCis6MTA4QzgwMDA2QUQ2Q0JGMzNCRkIyNUQzODZFRDNERjk5RjhBQ0E1MkNBCis6MTA4QzkwMDBBMkM5ODFFOThBRTc2MDU3NjgzMkZFNzFGRkY3OTZBODlBCis6MTA4Q0EwMDBEODc3RUE5MjhGNjI5NUQ4RDgzMjJGRDBGRDQ0MkY5MjkwCis6MTA4Q0IwMDBGM0Q5QTYxMUVEOTk4N0Y2RjA0QkVERDQ4MDBFNjk3RkJDCis6MTA4Q0MwMDAzOUI1QzBBRjg3OEMwQ0Q2NzU1RTU0MEM0QjQ3RkYwOTg1Cis6MTA4Q0QwMDAwRjUxMzM1MUY3Mjc3RjFBOUUxNzIxQkFGNkFFNjRGODY5Cis6MTA4Q0UwMDA3NDY3RkRBQjhENjgzRjZGRUY5Rjg3RjkzNzdGMjcxOTVBCis6MTA4Q0YwMDAxNkE2QkZGODREQTI4N0QwQkZFRDREQ0Y5NUFDREZEOUZBCis6MTA4RDAwMDBFQjk2Rjg5RkJFQjIxN0YzOTI0N0ZDRkExQjY4NzU1M0I3Cis6MTA4RDEwMDA0RjM5NjE2RTBGRUQxNzM2NDkzRkJCQUUwNEUxQUYyRkZGCis6MTA4RDIwMDBFNTY1NUNDODJFNTgxRjIzREE3RTc4QTZCRjI0QTlGOTEyCis6MTA4RDMwMDAzNkYyREJGMzk3RDY4RUUxODJGMTM1NUE2OUU0NkEwMEE4Cis6MTA4RDQwMDA1RkVBQThFRTk2QzJGMTE3MUY5MEIwRkZFNDg4QTJGOTdGCis6MTA4RDUwMDAyNDgxREJEQkRGMkFDNEU3MzRDMDU4QzBGRDQ1MjYyMTZGCis6MTA4RDYwMDBDRkM5NzMyNTc2MTFFNkZENzMxRkM2NkE4OUM2RjdDMUEwCis6MTA4RDcwMDBCOTBGN0U1QTE0ODE4N0JDRDJCMTRCMDZERjhGNzEzRDhCCis6MTA4RDgwMDAxOUZGQzQ1MkEyM0YwQ0JFN0YyRkYzMDEwOTg4M0E2QzMxCis6MTA4RDkwMDAzRjhDNzk4QjBCRTI0RTIzQTg4MjM4MTE5NzkxQzE3RUNDCis6MTA4REEwMDA1RDlGMkEwNkRDNzM1QzM1REU0ODNFQUVFMzZBMzY2OEJBCis6MTA4REIwMDAxNEYwNjM3QTlGRDkzMTVDOEQ3MjQ5Mjc0NUJENjQ2OThGCis6MTA4REMwMDA1OEQ4REJCQzM5QTFDNEVERkE3QzFCRjk2QzM1QjFGRTc3Cis6MTA4REQwMDAyOTk3MTdBNDRFNDVFMzg4RjM1OTBENDUwNDNGQkJGQjgzCis6MTA4REUwMDA5REZBQ0EwMzhFQzVGRTlCODk3MTQxOUJGNzlGMzVERUI0Cis6MTA4REYwMDA2NkVERTBGMTlCOTUwMUIyMThCNzJGQUQ3NjZFRUY4RTYwCis6MTA4RTAwMDAyOUY0MDZEQUJCM0Y3OUE5OTYwQUY2Mjc4RTEzRjVFRDA5Cis6MTA4RTEwMDBGMjRDNDU5OUI3NURFNzY0MTE1RkQ3QjkxQkQxMkFCNDBECis6MTA4RTIwMDBEN0QyM0JBQjM1QjRENzUxN0EzRjhGN0YxODBCRkM4ODM0Cis6MTA4RTMwMDA3OTZERjFCRUYzRjM3RUJFMDgyOTIyNUVFMjdDRTFDRkJDCis6MTA4RTQwMDBBMjVGM0E3RUREN0M3QjY4QTNDMEExQzdFNUQ1MEIyMTdDCis6MTA4RTUwMDA1OUNDN0Y1NTRCQkNDMkU3NzBGMkRDN0ZBMzQ4OUI4RTk4Cis6MTA4RTYwMDA1RkI4MTJFNDdBRTVFQTdERTdCOUJCMUQzNzc2RTBGNTM1Cis6MTA4RTcwMDAzNzVCRjVGMzRGODMwNzhEMjNBQTE1NDI5RUM3QzY4QTM5Cis6MTA4RTgwMDBFQzc2QzY2NTYwREJERkY2NzJERDJFRkI4OENGQzNFRUM1Cis6MTA4RTkwMDBDMTZEQjVDNDdFMTM4OTY1NzE5Q0MzOUI4MzNGNUVDNjVCCis6MTA4RUEwMDAzODkwRDQyM0UyQjIzODNFQzQzNUQxNzczMUFBQTMzRkZCCis6MTA4RUIwMDAzOTcwMzFDQUUzQzlFMzJCN0U2MTYxRkVGMjMzOERFQjc5Cis6MTA4RUMwMDBCOEZGRDg2OTU1RjBBRkYxNEM5M0UwREZCMTNGMzc5NTZCCis6MTA4RUQwMDAyREUyQzBDOTA4QjBERkU0ODgxQTY3N0M5MjIzNEQxRkQ5Cis6MTA4RUUwMDBCNzYzNUVGMjRDNUI5M0M0REI5QzY5MkE2M0ZENTkyRTI5Cis6MTA4RUYwMDA1MTNDOEQ3MTY5QTQ0QUI0NzNGOUZDNUM3M0YwOUIxQ0ZFCis6MTA4RjAwMDAwMjFGRDAyRjUxQ0NFMTBGNTVDREUwQ0Y4RURFNTM1RTQ2Cis6MTA4RjEwMDBDRTYzNDc5RjYyMTZGMjI4QjdFRTkwQTYwQTNGQkY2NTYwCis6MTA4RjIwMDBGRTgwNEZERDY5QzkxNEZDMzhFQUQ4MUQ3REM3NDQ3RTM4Cis6MTA4RjMwMDBEQjNENjk1MUVGRUUyMzFFNjdGQzhGOEUyNTNBMjhENjY0Cis6MTA4RjQwMDA1OTM0Q0Y2MjNDM0VFNjJFRDQ2MUFERDc1RTQ4MDg3MUZECis6MTA4RjUwMDBCNDkyQjZBNEU3RDBDMzlBQjAyNEQ2OEQ1RTRBN0M5QjY3Cis6MTA4RjYwMDBGOTMyREE5QUE4RDVFQTY3Q0ZCM0E4NERFNDQzOTI4QkQ5Cis6MTA4RjcwMDA3N0FGNjc4RDNEODdCRjJBRjY4NzNDODI2NUI0MzUzRTYzCis6MTA4RjgwMDBDNzc4MzhFQ0YwNjdBRDk3MTI3M0M1RjM3OUVFM0MxMUYyCis6MTA4RjkwMDAxRDkwQzE4QkYzRUQxRThERjk0RjY0OTYyQzgwQ0VBRUUzCis6MTA4RkEwMDA3Nzc1NzZEM0UzMUVEM0JCMENFM0E0OUQyQUMyRjhGQUVGCis6MTA4RkIwMDA5Q0RFQjY0MENGQTAwQjcxRkNCMUJFQzVERjhDODczMjAyCis6MTA4RkMwMDA4MEI0QzM5Q0E5NzMxQjI5RUVBMTQ1RjBCMzY2NjZGRjZDCis6MTA4RkQwMDAxM0FDOTcwRDZDNTVFMUU3NkUzQUY4MjlFQkUwMTI3QzgzCis6MTA4RkUwMDBBOUExMUFENjQxNTI0QTAyMTI3OEYzRUZEMzFFNEQxMUFECis6MTA4RkYwMDBGMURBNTVBQzA3NzdFNjk3RDM5OTBGQTE3RjNBRjRFRkYyCis6MTA5MDAwMDAzNEY0OEY2RDc3REQ2NzBENTlFMDMxM0E3NEU5RERCMEU2Cis6MTA5MDEwMDBEMENGMjI4QTMxMDFCRjgyNzdFNDlERDREQ0JERUZGMDRFCis6MTA5MDIwMDBENzdERkI3QzdFN0YwNkRGNzJGNTk5ODA2NEE3RUI2N0I2Cis6MTA5MDMwMDBEN0U3ODZFNkQ0MjFFOTFGRjc4MkFDRDQ0NTNCNUY5NzlBCis6MTA5MDQwMDA5MTQ3QkRFMkYwQ0ZFNzQ5OThFNUM4QzNEM0Q3OUEyOTQ1Cis6MTA5MDUwMDA2NzNEQUQ4MzhBMjJCRjg5NDcyNTlCNzUxRTcxNTZGOEVGCis6MTA5MDYwMDAwQTc0N0U2MjgxMjRDNjc3NkY5NjZDMEI1Rjg3RUEzRTM2Cis6MTA5MDcwMDAxM0Y3NzYzMjczRDZDQjdDQUFFOTdERUUzNTcxNkUyRDZGCis6MTA5MDgwMDBCQTQwRDE3QzFEMzdGODlERkJGMjc2RkQ3MkY5RjJBMDUzCis6MTA5MDkwMDBDRUY5ODFDRjQyOEYyM0MyRjI3Q0JFMUZEN0JCRjdFMTRFCis6MTA5MEEwMDA4Njk2OTlGNUFCQTVCMzhGOTUyMzhFMjc0REM5QjBFNzZBCis6MTA5MEIwMDBBQUZCOTZGQjRFQjFEQzdERERCQTJGMDkyNzIyNjFFMEM5Cis6MTA5MEMwMDAzMTc5RjZDNkU2QTVGMDM3NUFGN0Y3MEFCRTQ3M0JFRjA3Cis6MTA5MEQwMDBDMkRGMEE5N0RGNUQ4MTYwMDM4NUEwMkVCNTdBMkEwQjc3Cis6MTA5MEUwMDAzQ0RFMkI0RERDMTM2NjlEOTBCRjBBREU0QkJDM0VGQjg1Cis6MTA5MEYwMDBGNkNCMTJENzgzMDRERTc3M0IyRjU1QUVCRkFBQjBFNjdFCis6MTA5MTAwMDBFODc0ODQ5NjMzQUY3RUFGNjlDRUI5RjVEODBCNTkwRkFBCis6MTA5MTEwMDBBODFFOEY5OTk1RkY1Rjc3QkI0RjdDRDRDMDc1QjkzNjc5Cis6MTA5MTIwMDAzNEQyRTAyREE4REZGOENCMzhGNzdDOEYwQzdDMTBENTNCCis6MTA5MTMwMDA0QjBBRjkyNUJCRkM1Mjg1OTVBNDhERUVGRDM4OTM2RjQzCis6MTA5MTQwMDBFM0NDMzdBRUY3RDEwRkQ2M0ZDRDNDRTlERDE0OTFGNDM3Cis6MTA5MTUwMDA4MkZCRjNGOEY5NjA3NTgxREY4OTdFNDVDQzI3MzU1QkFBCis6MTA5MTYwMDBGMzQ0Njk2MTlDQUY4OTM4MjdEMjhFM0ZBMjZDQ0RBNkFCCis6MTA5MTcwMDBBNTg1RTMyOTk3Qjc1OUMxREI5RjJDREUxOUU3NzM5Q0JFCis6MTA5MTgwMDBFM0FENEEwRTZGM0JGQjNBNDhEQzQ3NkVERTY5MkZCRTBCCis6MTA5MTkwMDAyMDJFNkJEMDY3RkYwNkUzOTM5RUE5OEE3MEMxQjlGOEIxCis6MTA5MUEwMDBBMThCNzM3MzQ2MTI3QzVDNDk5NkMyN0U5QkUxRjExOUQ4Cis6MTA5MUIwMDA2RUFCOTQ1MTYxMUZBMDhDRTgyNzVBNDhDQ0UzRkI1RDRECis6MTA5MUMwMDAxRTM3QUI5OTIxQTk0MUNDQjM1NEYwNzIxNTlEMTVGMzBDCis6MTA5MUQwMDAxRUEyMjk2MTREODJDMEMzQjY5MTIxNkM4QjNGQjM4RTE0Cis6MTA5MUUwMDBFNUEzM0U5RDU2OTg0Rjk5QTgxQUJFMEEzRUIyOTRDQzZDCis6MTA5MUYwMDA1NUJGN0NGRTJBNURDREYxMTM5M0YxQjhEOTFBOUY0Mzc4Cis6MTA5MjAwMDBBRjBGQkFFN0RDRTBCNzFBRDc3OTgyRUM0M0U4N0E5MDdGCis6MTA5MjEwMDBCMjBBNkZGMjgwNEE2QjE0RTRGM0EwNEFGRTYyQzQ3Qjg4Cis6MTA5MjIwMDA3NDU4MTZFNzc3MzBBQkRCQUM1RjQ2OTlCQkVFMEJBQ0ZFCis6MTA5MjMwMDA0M0JCRDk3NENFMjk1RjM1Q0YzNEU2RjNCRDEzODc1NUQwCis6MTA5MjQwMDBGMDE3RTI3OTJBQkRFRTExMzg2NkM0N0UwRjczRTBDOENDCis6MTA5MjUwMDBCQjk1NzQ5NURCQTk3MEE1QzM2NzlBN0E5NkY3NzlBNDM0Cis6MTA5MjYwMDBERjI3REUzOUIyREYxMjc4RkMzNEVDRDQzMzAwM0M4M0U0Cis6MTA5MjcwMDBGMEIzRUFBMDQ0NjNEOEQ3NThFNEU0OUJGM0JGMEFBRjQ1Cis6MTA5MjgwMDBCRTUwMjNDRjc3RUUzMUI0NjkwQ0ZEMDFCRkIzOEU2OEI5Cis6MTA5MjkwMDBCNUM2Nzg0OTk5QTg3QzJCRjBGNTcxOUQ4QzkyODgzQkQ2Cis6MTA5MkEwMDBGOEMyRDRCNUJERTJEREU2RDMwRTIxMjRBM0ZGQTMzMTdECis6MTA5MkIwMDAwOUVGNjlDOTM0NjkwRkM3RTMyRkM5RjBGQjFBRUMxODJECis6MTA5MkMwMDAyRjdDNTdGRjNBRkNGQzVCN0NERTI1NUQxMzc4NTE4MkQ2Cis6MTA5MkQwMDA3NDdFNjdDQ0E3NUY2OTdDNkZDODNDQUZDQzgxRUYxRjAxCis6MTA5MkUwMDBDMEVGNDk1N0VGMkUxNzNCQkE3MUQ4REVBOENCQThDN0ZECis6MTA5MkYwMDA5Njg4REZFMDdBMzRGQTJCOTYxM0ZDNkUyODREMDhCRjZGCis6MTA5MzAwMDA5N0E1MjNENUMyODk2QUFGNjBCRjM5OUUwN0M4NkM2MTMzCis6MTA5MzEwMDA5QzI1Qjc1RTdCRkM4RUJGRTkyMkM3RjI5OTY0M0UwN0FECis6MTA5MzIwMDAyMEU3N0VDNDc1MDBFN0MyOEZCNkQ1RTZENERCRkFCQzcxCis6MTA5MzMwMDBDODRFNjFCRjY5MzkyRUM4Rjg4QTYyRjgwNURGNjM4OUIzCis6MTA5MzQwMDBCMTY2NThCNUNERDQ3Nzk2RjA5MzFENzkwNEYyNzlBNDFGCis6MTA5MzUwMDA3ODFGRENDN0Y0MDMzQzEwNDE4NjVEOUE5MzRGQUE0NDAyCis6MTA5MzYwMDA1RUNDQkY5NzUyNTQ2Q0UwNzE0NEJCNEExRDlFRURGQTJGCis6MTA5MzcwMDA2QjkxNEQ5NUIzRTMzQkU5NEI5Q0U0RkNBNjY1NjM2Q0I0Cis6MTA5MzgwMDA1NERDQTMzQjlCNTlFRjE4QTdFRkU0NzA5MkYzMzg2REMwCis6MTA5MzkwMDBCMTYzQTlBQzJFNzAxOTYxOURCRUNGNjdERjkzQzFCQUNFCis6MTA5M0EwMDBBNzdDNzYzNUM3OUZDMzAzMDUxMjI0RDU1QzlDNzNGODUwCis6MTA5M0IwMDA2ODVDM0ZFNkIxODlGQUU1RUExRkNCRTM3NEEwRDhDMTQ3Cis6MTA5M0MwMDAwNzNGREYxQzFDNzRENDcxRTlFQ0ZDRkYwNzUzQjdBN0ZGCis6MTA5M0QwMDBFQkIwMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Cis6MTA5M0UwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkZCQzZDN0MwRjBBM0U1Cis6MTA5M0YwMDAxRTgxQzNEMUY4RTg3ODAyMkY3RTc5NTJCMTBDMDM4MjI2Cis6MTA5NDAwMDA1REMxQzVDMDEwQ0JDMUMwMTAwN0M0Mjc4MEY4MjQxMEFGCis6MTA5NDEwMDA2QjcwMzIzMDI0MDI3MTEyMTAyRjAwRjIxNzAyNzEyNTg2Cis6MTA5NDIwMDAxMDE3MDBENTM2MzMzMzMwMUM2NjYzNjAzODA1QzQxNzE3Cis6MTA5NDMwMDA4MUY4MDYxQkU5RjY2QjQ4MzAzMEVDOTI0MUYwMzk2NDU0Cis6MTA5NDQwMDAxOTE4RDhFNEE5RUJDNzUxM0M3OEYxNUEwMzU0RkU1QkQ0Cis6MTA5NDUwMDA0RDU0RkU1NzZEMDYwNjNENDMwNEZGOUQyNjY5RTYyN0UxCis6MTA5NDYwMDAwMUY1MjYwMzMxMDBGQkIyODhCQTY4MDMwMDAwMDAwMDUyCis6MTA5NDcwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDNBCis6MTA5NDgwMDAwMDBCRUQ3RDBCNzg1NEQ1QjlFOERBOEZEOUYzOUVFQzVCCis6MTA5NDkwMDA0OTQyMTg0MjQ4NzY1RTEwMzBFMDEwNDIwNDhBOUU0OUU0Cis6MTA5NEEwMDAwQTg4OTZEMjg4OUUxNjVCQUI0MzQwODIzQzAzNUE0Qzk2Cis6MTA5NEIwMDA4Rjc4QjIyMTIxMDQwODMwNTBBQzkxMjI0RTEwMzA1QURFCis6MTA5NEMwMDA2OEEzQTJEMjE2REI4MDk0QTJGNUY0NDY2QkFCQjUzRTNFCis6MTA5NEQwMDAwMjUyMUUzRTY4RUFBMzhFRjdENEMzNTlGRkJGRDZDRTEwCis6MTA5NEUwMDBFQzNEOTkwOUQ4OUU3QkVFRkRCRTdCRDJBRjJFRDY1RUI5Cis6MTA5NEYwMDBFRjdGRkRFRkY1QUYzNThBRTgyNEYyM0YxMTcyMTFGRUUwCis6MTA5NTAwMDA2ODNBNEMyNDg0MEM4QUE3ODRDODVBOEYwMzUyQTI1RkZECis6MTA5NTEwMDAyQ0I0RTRDOTQ1RTk3MkYyN0YxQjYxQ0RFQkJDREY3RjVGCis6MTA5NTIwMDAyMTI0OEI5MEVGRjAzMkZBMTc4MkZDMTQ5RTMxRTY2MzBGCis6MTA5NTMwMDBBNDI0QTg5MEFFOTI3ODNGNTMwOENCNkJBMjQwMkUwQTg5Cis6MTA5NTQwMDBGMEQ1NUE2RThDNTNFRkYwOEQyMTY5ODQ3Q0VBNjRBOUMyCis6MTA5NTUwMDA1RTQ1OEJDQTY5RkE5NjMzREE5ODRGODg0MzA4MTdCMjhBCis6MTA5NTYwMDBGOUQ0NUQ1OTNEMUFEM0FCMjA2RDE0QzhFQzRFNEY5MjFGCis6MTA5NTcwMDA3OTkwMzU4NDhDQTdDOUZFMjEyMkE5ODhDRjNGQjE5RTVFCis6MTA5NTgwMDA5MTM2MzUxMEQyNjU4RkU3NjU5OTg0OTJGNTVCNDFFNzk2Cis6MTA5NTkwMDAwRkZEOUUxM0MyMTUzODFGMEY5MTAxMUUwQTg3ODc4RDdDCis6MTA5NUEwMDAwNDA5QTFFQjNBRTI5RjE2OTg0M0U3REYzQTU5MDlEQTNBCis6MTA5NUIwMDBBMTYwRkIxMDY4NEM3QzA2MUM2N0U3NjFERUMxRjM5NTc3Cis6MTA5NUMwMDA0NEUzRjBFRTZBMjlBNEVEOUM0MTkxNkNBMEI5QTZGQzlECis6MTA5NUQwMDAyQTA3MjkyNTY0RjNDNEJGMDZDMjc0M0U0RTM5NDI1NDlCCis6MTA5NUUwMDA0ODNEQzlFNzM3OTM4OEJDOUY3QkM5RTVBQzNCNzEzRkQ5Cis6MTA5NUYwMDA2NEQ4QTNGMTk4MTU2MTVEQzY3Q0I3RDhFOEJDMzJFOUEwCis6MTA5NjAwMDA3RThDMTdDOTVFOUFERjU0M0UyQjBERTY2M0FDQ0I5MTdFCis6MTA5NjEwMDA2MjlDNjY4MEVCMDg0MjM2MzYzODMwNkQ5QTMwMkI4RDZFCis6MTA5NjIwMDA0MDNCRDIzQjFCRjY3N0YzQzQyQzcxODMxMEFGN0Y2NEIxCis6MTA5NjMwMDBFMjcxNDcwRjVENkYyMzZGRDdBQTFENzU0MDdENjM5RjUxCis6MTA5NjQwMDAxM0UxQjY5OUMzMjc0NDA0OUNGN0M2RDFBRUQ5RDFEMjUxCis6MTA5NjUwMDBGRUYzMDgxMTFGOTY2Rjc2RDI0NkIwMEUyRjg5RUVDRDFECis6MTA5NjYwMDA4NzFFN0FEQUU2RDJCQzZGODI1QUI2NDFFQjhGMkY1MzRGCis6MTA5NjcwMDA0NkNCQzEyRTNBNEY4RkM3MTNCNEQzNzI0RjgwQjU3NzA0Cis6MTA5NjgwMDBCQzIxNDQzNTZDMUZGMjBDQTFGNTVEQzZGRTRGMTBFMzAyCis6MTA5NjkwMDBGMEE0RkZGNzkxNkE0MjI4M0RGQTcyN0E1RjgzNzFFQzc5Cis6MTA5NkEwMDA2RkQ4ODMyMUZBRERGREQ5NDdBRkNEQTVGRDkyOTM0MjU2Cis6MTA5NkIwMDA3MDJGOEM0Qjk2NUJGNjhCRUM2MTcwQjVBOUY0REZCNDIwCis6MTA5NkMwMDBEQzM1NzlGRTBDNTg4MkZCRjMyN0FCMDE2RUVCOEI1NjMxCis6MTA5NkQwMDBCODU2QzM1RTk1QjBGRDUzRTlGRjJFMTZEMEZFMzVDNUQyCis6MTA5NkUwMDAzMkJFQ0RCQ0JGRjk4MDlBRDZCQ0JCNzhENkQ3MEFCNUZFCis6MTA5NkYwMDBENEY4RTFFRUYxOTFBRTBDNUE1OUJBMDVGNzNCNTVCRERECis6MTA5NzAwMDBGQTM3QzY1RTczQ0MzNDZFMUJGMTY2OUU3MUQzN0Y1Q0Y0Cis6MTA5NzEwMDA0NUFFNDIzQUJGNDRGQjRGMUI4MkQ3MUNCM0UxQkE0NTZBCis6MTA5NzIwMDAzM0JGNDk1NTdGMkRDNzhGM0UzQ0NCQTdGODUxOEFGQkVECis6MTA5NzMwMDAxOUI4NjE3NEZDRkI0QjgwMTc0MDBGN0EyNUYyMzFBNEY1Cis6MTA5NzQwMDA0NUJBREVFNkFCNDlBRjQ0RjdBM0E5NThEMUQ2NTAzOEE1Cis6MTA5NzUwMDBEODU1QTU0QkYwQjEzMTdCMDFCRkUwMUZCNEE5QkRBODFFCis6MTA5NzYwMDBCOTVCMTgwMzk5RUY1OEY4NjBDQkUwN0YwRDc2MEQzMEE4Cis6MTA5NzcwMDBCRkM0N0RGOEEyRjBFQjAyRjg1RDExODc5RjlENTRBNzRFCis6MTA5NzgwMDA3NUMxN0U1NzA3MTAzRTVFM0U4Rjc1NTdBRkQ0QkFFODVECis6MTA5NzkwMDA3QUQ2NjU3RjNGNzQ5Mjk4RTA3ODE1QTNCM0JFRjlFNDVBCis6MTA5N0EwMDA0NDg5Nzk3QzgzQkVBRTE0NDIyRjAyN0MyNDI1Rjg1QTZBCis6MTA5N0IwMDA5OEMyODM0QzUyODI3QjkzQUM0QjE2MTg1Rjg5QzNEOUY1Cis6MTA5N0MwMDAyMTEzMDM0RTgwQkY4N0Y1QzAwRDVFOUM1MkI1QzMwNEM0Cis6MTA5N0QwMDA2NzdCRTBGODY3MDAzRjM5OTM3NEI5QzdFMEY3MjYzOTMzCis6MTA5N0UwMDA5REYyQUY0Q0EyQkJEM0IwMTcxOUYyOUY5MTdDQTQ0RjRFCis6MTA5N0YwMDA1QTNFNDUyOTAzQkUzMDJEMThBNkUzMzREQkY4NzhFQTNCCis6MTA5ODAwMDA2QUNCQkU3RUM2RjczNTVFQUUwN0ZFRDk1MjZFQzNGRThBCis6MTA5ODEwMDA5QUJEOUM2RkE4OEQzOEJGN0VFREZEQUM3REUyN0FGRkNFCis6MTA5ODIwMDAwMjdDNzQzQ0Q0NTMzOUZFMzQwNjQwREUzODg2MzQ0RjEzCis6MTA5ODMwMDAzRjAyNzAxRjUxRDczOTE3RDZBODEyODQ4M0MxRkZBOUUwCis6MTA5ODQwMDAwMDI0NTA4RkNBODdDRkEwOUQ0M0FCNDZCOERCNzM0MjNDCis6MTA5ODUwMDAyNDhDNzBCM0NBRDM5NDdDMzk0MThFRjZDMzI3OTVFNjI1Cis6MTA5ODYwMDA4RDNFMEFFMEJGMzkyQUQyMUI0OTk0REYzQzBEMERCQjY3Cis6MTA5ODcwMDAyQzM5RDg5ODQwNTdCNEFCQTQ3MjY2QjRDMEY4MkREMTM3Cis6MTA5ODgwMDAzMzcxRkRCMjgxMDc1QzNGQjAxOUUwRDhDRUU4NTlFNUVECis6MTA5ODkwMDBFMzJBMzAxRkNBMEY5RDI0OEE5REJCMjlBNjQzREU0QkI1Cis6MTA5OEEwMDBFQTMwRkY0OUE4QUM0QjAwQkM5MUM5N0FFMDczRjY5MDRFCis6MTA5OEIwMDA0OEY0RkNGRUUzNkZFNkYyMjRENTNBMzY0RjRDMkUwNzBGCis6MTA5OEMwMDA4NjA5NEMwRTQ4OUUzQUJFMUZCN0E4NDA2NzgyMUUyNkU2Cis6MTA5OEQwMDAxNzgxREU0ODg0Q0JCRjIwRUVGN0JBODY3QUYyMEU1REEwCis6MTA5OEUwMDA4Q0VCRTg3NTQ0QTNGODIzRTdENDg1NDJCNDlEMDRCNDE3Cis6MTA5OEYwMDA0ODU5MzRGMTk0QjM1NDBFNkE2NkZDRUFEQjQ3QjIxQTU1Cis6MTA5OTAwMDBGQkIzNTFCMEMwM0E2RDFFQzcxQzMyMDY1MkY1MDY0QzZGCis6MTA5OTEwMDA0QjQ2REQwRUY0NjE0QjlCNTYwRkFBMUNDNTlCNEEwMUJBCis6MTA5OTIwMDBDNjc3MjRDNzJCRTJBMTQ0M0ExMUYzNUE3NUQyRjFGODU1Cis6MTA5OTMwMDA3RUYzN0EyOUYxQUIwRjNGOENGNTZBNEFCNUI3M0ZERTZCCis6MTA5OTQwMDBCOENBNTUwMTQ4ODE2NkJCNjEzRTgzRjk2QzA2ODc5QkE2Cis6MTA5OTUwMDA5NzhCNjM2MERGMjJEMzg3RDNGRDE5REMzMzA3RTU5MzUwCis6MTA5OTYwMDBGNzhERUJDRUMzQkFENjk2OTY5RDAwMTUyRTJEQThERUE4Cis6MTA5OTcwMDAzMDhERUVBN0FCODQwODAwRUZGNUQwRDkyNEU4RTE4NDYwCis6MTA5OTgwMDA1RTA5NzIxREZFOTk0REM4Qjc4NTY3NDNCQTg3QTE4RkRFCis6MTA5OTkwMDA1NURGMTQzNUQ5RTAyN0UyODBGQThCNzBEMURFQkY3RDI4Cis6MTA5OUEwMDA0QUZFNEM0Q0Y0ODM3MjdDQzVFNUU5NEJCN0IwRjE3NEM4Cis6MTA5OUIwMDBGQTNGQTAzQjdGODIzQzREMEI5OUZBMjUwMDFGRUIzODA0Cis6MTA5OUMwMDBFQjAwNkYxMEJFQ0JGRjVCQzY1M0M5MzY4NzA2N0E0N0U0Cis6MTA5OUQwMDA5MUE4NDZFOUQ4Njk0NEY1NTM1RTRDNUM1MzY0MDJGMkExCis6MTA5OUUwMDA0NENERTlENTYxN0IyRkI1MkY2QjA5OTk4RTdDOTREMjNDCis6MTA5OUYwMDBBRDE5Q0Y3NzcyM0UxMEE4NjlDQTZGQTZGRDdFNTJFRUYwCis6MTA5QTAwMDAwOTAyMUYxODRDRDk2NjQ2N0FGRkY1NkM0Q0QwQjMzNzYzCis6MTA5QTEwMDA5NkVFNDZGRUQ4NDhGMUE4MDBGNEZENTIxMUY1QTFGNUU2Cis6MTA5QTIwMDA0NTRGQTg2Njc5RjU3MzgzREZGNEMzMEZBMkM5MTVDODQzCis6MTA5QTMwMDAzQTA4QTFGMDkxOEFDNDkwNzNDQzNGOEUxRjg5N0FEMkU0Cis6MTA5QTQwMDBFNUUyODdGQjE2RUI3RTdDRDFGREZBNzU5RkZFN0Q3OTAyCis6MTA5QTUwMDBGOEYxOEY4RTY3RUM2QjJBQkU0NUY3MTVGNUVGMTY2REEyCis6MTA5QTYwMDBENjgwRkE0QkZGN0RERDg2RkJFQTJBMjJBMTY0N0NCODEyCis6MTA5QTcwMDA1QjEwQUNGMkM5OUM5QUU1MDdCOUQzQjI1RkI2QzJBRjJFCis6MTA5QTgwMDAwNzc2MEYwMDBGNUI0OTgyOUNFNEZEM0FFQjI1RUQzNDJECis6MTA5QTkwMDBFOEIxQjI4QUYyQzhCMDFGRDY2QkRCNzREMEU3M0ZDOTE5Cis6MTA5QUEwMDAyMTRDREY4QjJDRUYxMjQwMEYyQTIyQTgwNzQxMDcyMkZFCis6MTA5QUIwMDBDRDNCQjU1MDc0ODNDMEYwMUZGNkM1RDA2RjZDNTQxREZDCis6MTA5QUMwMDAzM0MzNTc1MjVEOTYzQzk5QUQwQkU2RjkzQkVCMTU5Q0MxCis6MTA5QUQwMDA4NzAzQzYwM0JBRjREMDBFNjlCRjUyMEVFOTcyQTJGRTI0Cis6MTA5QUUwMDBDOUU2MEY0MzMxM0JGRTlFQ0JDMjAzMDM1RjAxQUMwQ0MyCis6MTA5QUYwMDA1RkFERUQ5QTAzNjUyNEQ5RkVGNTFCRUYyNkVCN0M1MzkxCis6MTA5QjAwMDBGMkE1QzQ3NjFFNTkzQjYzRDI0NzUyQjc5M0M5MTk5MzQ1Cis6MTA5QjEwMDA1RTMzQjRDRjdGQTExQkZBREMyMTgxRUE4NThEODFBRjUyCis6MTA5QjIwMDBFQjM4NkZGODBGOTVBRjJEOTA1Mjc5MjYwREE5MjI2MTcxCis6MTA5QjMwMDAwREU0QTRDNkU4NDQ0QjY3RjJCNzQzQjBEOEUxQzZGN0RBCis6MTA5QjQwMDBENEYzNjBFM0M1NkVBN0I4MDg3QzRERDYyQ0ZBNzI2MkQ4Cis6MTA5QjUwMDBEQUQ4MTBGODkyNEM5MUQyNURGRkYwMjQ3OTFDNTU2MjRFCis6MTA5QjYwMDA1Nzg3NjY1N0QzRkFFQjFCM0EyNkMxNzdBM0RFNTREMTQ5Cis6MTA5QjcwMDBCMEJGQTlEODM0RTlDNzMyQTFGNTFDRjg5NTVDMUMwNzIxCis6MTA5QjgwMDAxRjU1QTI5OUU0QkI4Mzc0NjIzOUZEQ0FGNzhGRTAzRThBCis6MTA5QjkwMDBBMDVFNDVCQkFDMTMzNUVDNTcyMTg3QjAxRTc0MDRGNUFECis6MTA5QkEwMDAyODE3OUYyNDk3QjBFRTIwQkZEMTE2MEFFMUJDRTQ4OEE1Cis6MTA5QkIwMDA2MzA1QTVCQjhENEU5RUQ3NzhERUNGRjMyQUNGRTdGM0EyCis6MTA5QkMwMDAzQzk1MTM5MDc3MkIzNDRGNTNBNzJEQTI2MkRFQzVGMzNCCis6MTA5QkQwMDBGOTNDOUZDRUYzN0U5RTJGRTA3OTYxMUJFNjM3MkFBQ0RECis6MTA5QkUwMDBCRjBENzI5NEY1RUZFMjc5OERFN0QzNzk1RUU1RjkwMjY2Cis6MTA5QkYwMDA5RTI3QkJEOUY4NzY5Njc3RDlBMkFDN0YzN0NGRTdGMzBCCis6MTA5QzAwMDA3QzA2Q0ZGQjc5QkU5MEU3ODVERDk4NEZCNTdGQUVBMjhECis6MTA5QzEwMDAwRTA2QTczRUJFRDAxOUNGQTNGMEUwNzBFRENCNzcyNTlFCis6MTA5QzIwMDBFNDE5QkU2NDA4MEMwRjYzNUYzNUYwMjY4OEZDOTE3ODU4Cis6MTA5QzMwMDA3MjkxREU4NkYwMzY4REYzQ0FEODc3RUU0NzMxN0QzRkRDCis6MTA5QzQwMDBBMTUxMzlGNzQ5NTg0NDM5OTk2QUJFREZFN0ZDNzQzQkEyCis6MTA5QzUwMDBFOEI5MzRERERBQTA2MkJBQTUyMTgwN0FFRkE2MDY4REQ0Cis6MTA5QzYwMDBGQjU1NEFGMEZCRkE4NjIwRTZENzM1NENDMDc0NkQ0M0FECis6MTA5QzcwMDAwOEJGMzczNjRDQzdGQzYzMERENTk4RUY2ODk4OERFOTVGCis6MTA5QzgwMDBCRTg2MzBBNjdCMUExNjYwQkFCQkExMEVEMzI4RDU3NzQ0Cis6MTA5QzkwMDAyMURERDVBMDYzQkFCM0ExMDVEMzFEMEQxMTRDREJFNkMwCis6MTA5Q0EwMDA5NTNENUYwNEYzNUY0MEU3M0YwMDdGMTgzQ0RCRUEwNzI4Cis6MTA5Q0IwMDAxOTU0NkRFNThCRTk1M0QyMkRFNUVBRTQ2Q0FCREZBNEQyCis6MTA5Q0MwMDBCQ0MwOTJGNzk0OEVCMkU0NUQ0NTY1OTZGRTFDMzk5MzU0Cis6MTA5Q0QwMDAyQ0U1NEE2Njk1MjUyRjdCQUVCN0U0QUZFODk4NjVDOUI5Cis6MTA5Q0UwMDA4RjhDN0VEM0QyREY4OEI2MUE0Qjc5NzE2NEExQTVCQzY0Cis6MTA5Q0YwMDBCMDY1ODUyNTlGQUZGRjhCQTU3RTVFRkQxQTRCNzk5QkQ2Cis6MTA5RDAwMDAzM0ZDQUM0OEY5RDVCMEJBMEQ5NjdBNDMxNzZDQjNDQTk4Cis6MTA5RDEwMDBBQjE5OTk5N0M1QjdDOEM3N0E5NkQ5OUY5MUM4RUZBNUNGCis6MTA5RDIwMDA1QzEyMEFBMURDNjJGMkE1MTFGMDE2RkM1RUMzNDg3NDU1Cis6MTA5RDMwMDBBRjAwRkVBQjZCNEY4MERENjEyRjYyNzJBNzlGN0Q5OUY0Cis6MTA5RDQwMDBEMDlGRTJEOUY3OUE0RUM3QTlGNDlEMDhGNDk4RTg4QzAxCis6MTA5RDUwMDAwNDRDRUQyOERGM0YyNTMyQkI3OUMzQkRDQ0FFNkVCREQwCis6MTA5RDYwMDAzN0I5N0Q4RDlDOURBRUEzRjVGM0U0RkVEQjFFNTFFMjc5Cis6MTA5RDcwMDA3QTkwNkVCMTUzNUFFRjE1QjBGRTNGREFCRjUxOUVEOEJDCis6MTA5RDgwMDA2RjdDM0M4QTczMTU2NjNEMjQ2QUY4NDU4OTlFMTVCNzM5Cis6MTA5RDkwMDA3NzZEM0RGRUI5NjBGNzE4NzZBRUU0NjBERjJCNEI4MjNECis6MTA5REEwMDAyNzlCMjhCQ0Q3QUEwNEZEODY2QjNENTUwNEY0OEE0RjM3Cis6MTA5REIwMDA1NDQ2Mzc2NDRGMkVEQUUzNDZGREZFRjMzM0U5MTVDODA3Cis6MTA5REMwMDA3RjVDNTYzRkFENjcxNkZBM0RENzY2MEVBQzk3MjkzMURBCis6MTA5REQwMDAwOUZENzc1MjRDMjA1RDU0RUUyODcyRjVGNDdDNEFCRkExCis6MTA5REUwMDBDQTJCNTI3MDM1NDFGOTkzRDRCRTI3NjQxQkMyNDE0QTM1Cis6MTA5REYwMDBEMDZGOUFFNjI1RjBCRDI5QzM3MEREMzZCRThFQzZDQzg1Cis6MTA5RTAwMDAyQUZDREVBNDBFM0MyRjNCQ0MwQkU2QzNFNzY1OEJCOUU2Cis6MTA5RTEwMDAzMTk1NjI0RTlDRUZDNDU4MDZFNjI3QzRGQzk4NUUxNTQ3Cis6MTA5RTIwMDAxQjhBNjk0NTZDMDhBNkUzNjM4NTk4OTZDN0YyMzExREM1Cis6MTA5RTMwMDAxN0JCMDJEQjk1QzU0NjYyM0EzNjM2MEVCRjA3NjM2MzMxCis6MTA5RTQwMDAzMUJEMzJGNjI1RkMzRTI2MzYxMUQzRDFCMTJGRTNGN0QyCis6MTA5RTUwMDBEMjU4MjVBNjU3QzRCRTgyREY0N0M1QUVDMzc0NjRFQzkyCis6MTA5RTYwMDA0NkZDNUUxMkJCMDFEMzExQjE2RjYxM0EzQzc2MzNBNjVBCis6MTA5RTcwMDBDNUIxQjk5ODE2QzVFNjYwNUExODVCODRFRDBBNjI3N0Q5Cis6MTA5RTgwMDA2MDlBMUZCQjEzQkY2QkIxRTU5OEU2QzVFRUMxMzQzN0NFCis6MTA5RTkwMDBGNjVENEM4N0M1MUEzMUNEODlBREM2NzQ2ODZDMjNCNkEyCis6MTA5RUEwMDBDQjhFQURDNzc0NDhFQzdCRjgzRDEwREI4QTY5NTZFQzZECis6MTA5RUIwMDAwMTRDRkRCMTg3QjE1QzhEQjU2MzlBMTZGQjIxN0VGNzJECis6MTA5RUMwMDBDNTFFQzVENDFCN0IxMkJGN0I2MjhGNjNFQThFRkQwQzVGCis6MTA5RUQwMDBCRkJCNjIzRkMxRDQxOTdCMEVCRjNCNjI0NzMwQkRENENDCis6MTA5RUUwMDAzRTI5Mzk1NjNFMkU2NUJBMkNGOTA5QTdEMzJERjg1MUQzCis6MTA5RUYwMDBGMTg2OTU4Rjk3QkY1MjYwMjkyRjdCRDFDQUM3ODNDNzQwCis6MTA5RjAwMDBDQTJDRjkzMTg3Mjc1OUVBOTcxRUFDQjJFNDQ3RURCNzVFCis6MTA5RjEwMDBGMkYxOTIzRDU2M0UzRTdDQTc5NThGMTc2REI3RjJGMTU4Cis6MTA5RjIwMDA4MjU2MkIxRkQ3OUFBQzdDM0M3Nzk1OTU4RkU3REM2NUUyCis6MTA5RjMwMDBFNUUzRDk4QkFERkMzQjMwQ0ZDQUJGQjNDODBFQUJGRDU4Cis6MTA5RjQwMDAzRDY1Qjc1NUFFNEQ3RUNDRDI5RkE3RkMwOUFCQkRDMEQ5Cis6MTA5RjUwMDBGOThDQUJGNEE3OTY3NjhFQTJBMzQ5RUQ5QTQ0N0YzOThCCis6MTA5RjYwMDA4MDQ0QTZGNDdEMzc3MTA1Q0RFNzJBNDY5QUNFRjk0MUEzCis6MTA5RjcwMDAwNkQwMUQ0RDMzMzlERDBEMDJCQUEzNjlGQTU3MTZFMzM5Cis6MTA5RjgwMDAzOUQzQTc1RjZERjk1NTEzRUQyQzdEMjg2MTdFMDE3REQ2Cis6MTA5RjkwMDA1QjE1RjhCRDlBODdGMDNDRkQyMkQwN0FDREMzMDhGQTU0Cis6MTA5RkEwMDAwOTg4RkU2RTI1OTZFN0IzRkMwRkE0MzM5NTNBRjNERkRDCis6MTA5RkIwMDBCMjcyNzI4MTk1M0I1OUZFQjFDNjdGNUIwREU1RTk2OUNFCis6MTA5RkMwMDBBMUVDMjBFRDY3OEYyRDM5MUY3RjQyNjJFNzZEMTdDNDJBCis6MTA5RkQwMDA1MEJCNDREN0ZCRTdDQTlFOTVFMDQ3QjMzQkMyN0IyNTA1Cis6MTA5RkUwMDBGQTdEQjEyMzlDMDdBRUU5MEY2Q0UxNDc2NEUwOEIyNDU2Cis6MTA5RkYwMDBCNDBGQkVBNzkxRDAyMzEyRjI2QkFCNUZCNDE1MTQ2RUYxCis6MTBBMDAwMDBEQUNGQzc2MkY1N0UyOENGOThEOTgxNzY5MUIxRUU2NjE2Cis6MTBBMDEwMDBFRkMwRjM4OTRBNEMyRTM1RkIwOURBOERGQUEzMEFDQTQwCis6MTBBMDIwMDA1M0ZDMzNFNDA1OTU4M0Y3QkI3RDIxMjhERkY1QThCMjA3Cis6MTBBMDMwMDBEQkNFQ0IyRDcyQTMzRTBCRTU4NkFEQTM3OTM5QjgyNEQ4Cis6MTBBMDQwMDBFREIwOUY1MjMyQkY2ODBGRTZEMzQwRTMyRjA0RkJCRTUyCis6MTBBMDUwMDAzNzU3QTZFOTUyN0I1NzMzQzhGNUJGRkFCQkRGMTIyNDQ2Cis6MTBBMDYwMDA4NEM3QUYwMDNFMkJBRjBGNjNGRDM1RUU5OTEzNjAzRDAzCis6MTBBMDcwMDAxNDFFMjdFMDNCODVDN0YzRDJBMEQ0RjAyMDcwQjI0MDc1Cis6MTBBMDgwMDBFNzFGMzBCMDY4QkY2MEYxM0Y5RTEzQzJCRjk1NEM3RUEyCis6MTBBMDkwMDBDQzQwMzg4ODcwM0IyMEE5MDgwRjAzN0VGNEVGQUU3NEUzCis6MTBBMEEwMDBDMzFGQzNEQUZEMTFDNzRERTg0RkU2RTc2MkJGOTVGODVECis6MTBBMEIwMDBGODVDMUUxQTc4OUMyMTkyNzAzMkY4MUJFNzNFQTQyM0FDCis6MTBBMEMwMDBGNzBCRjlCMzlEOEE5ODc0MUM5QjVDOERFN0E5RkRGODhBCis6MTBBMEQwMDA1RTY2ODI1RDlGMTk4NkIzNUUyQTNGQTlCQzRDMzJBRjkzCis6MTBBMEUwMDA2OTBBRjc0RkM5Nzk5Nzc1N0UxNUU1RkEzREQ5OUZGQjQ3Cis6MTBBMEYwMDA4NUNFQkJDMEQwODNGQTQzOEQ3RDNBOTY4QkY5NTFCQzk3Cis6MTBBMTAwMDBGRDUwRDBFQjI4M0UzREY3QTZGREU4MTJDQTA3NzY1MTc4Cis6MTBBMTEwMDA5RTYxNEZFMjBGRDhENTIxRTJGOUZBNTAzRjQ1Mzg1QUY3Cis6MTBBMTIwMDA1RUNGRjUwMDZBMTNBMTNFNjg4QzJCMkZCNkZBOEYyMjAyCis6MTBBMTMwMDAzNjBFQzdDMzU2MzgwRUE1ODhGRDUzNkE3MjEzNEYxRURDCis6MTBBMTQwMDA5QjFGM0ZCNzM0RkE2OUVGOUJCRjc1MUVCQkY1MjAzMUVCCis6MTBBMTUwMDBEQkRERjlBQkEzMjJFODM1NzIwNzlEQzc5OEZFRTMxMzU4Cis6MTBBMTYwMDA3RUJFNjBEMDkxRUNFMTdFMTMzNTBGRkIzNUM2NEQxQ0YxCis6MTBBMTcwMDA4NzQ4MzNGMDNDMjkxNTdDRkI4REYzMDVDRkVCMkFFNEFGCis6MTBBMTgwMDBFNEU3OUQ3NDdGMTA0RTQ1MjlGNDNDRTNCQ0NFQzgzRjA0Cis6MTBBMTkwMDBGNzY2MkQ5RTdGMzc0NzZBNTBCRjZCMEVGMDczRjZCRjkwCis6MTBBMUEwMDBEMTVFQTExRjkyMUM0RkY2NzI3QzdBODg5RjhCRUNEREVBCis6MTBBMUIwMDA1RUU1QzA3Njk5Nzk5NjdEMkFCRUVGMjY1Nzk4RTk2N0M1Cis6MTBBMUMwMDBFOTkwRUU2QjYzRjU4NjNGMzA4RjdGQUZDMUVGMEZBRDQ3Cis6MTBBMUQwMDA2MkRGRjNFRUZERDhDOUJFN0ZFODg3MzRBQUIzRUZEQUI5Cis6MTBBMUUwMDA2QTk5RDcxN0IxM0VBOUE3N0ZBNjczQTBFMTZBQjUwOEZGCis6MTBBMUYwMDBGQUVFRjBFRDI0MDRERkYyRDQ1RTAxRkNDODlBNEE0NDgyCis6MTBBMjAwMDBERDA0RDdFQ0VENDcyQkFGQTNFNUQ5OTFFQTU5RDdDMUNGCis6MTBBMjEwMDA3OTc4OTgwNDhCMzVGOEZFRjJFQTkxQjg4RkM0MDFGQjg3Cis6MTBBMjIwMDBCRDgzQUYzQjI3MTJERTMwMTJFQUNEQTZGNTQ4QkNCQzk5Cis6MTBBMjMwMDA4RDhGM0IyQzEyREU3NjFERjhFRjRBNTgzRjQ2RjlGNzFBCis6MTBBMjQwMDA3OTdCOTc1MTFFQjJCNjhGRjBGMkRDNTVBN0JBNDZEMDkzCis6MTBBMjUwMDA3NkI5OTFERTk3QUU4NTdBMURENjdBOUI3OUJENTE1MDNECis6MTBBMjYwMDAwRUYzMDg1QUM3NjlFNUYzOTBGNEREMDREMDQzOEE5MEYxCis6MTBBMjcwMDBGNEU5RDA4RjZBRUQ2NzgzODFCRjUwNUU4RUZGQzZGMjJFCis6MTBBMjgwMDA4NzBEQkU5MEMwNDc4Qzc2MkQyOUY2REZFMDI3M0JDMUI1Cis6MTBBMjkwMDA0RjMwMDJGRDU1OThFNkI0MjZGN0JGOTY3MTdFNjVFMDEzCis6MTBBMkEwMDA1NzJBM0MyNzBCNDQ4QjdENDdDMjJFNkI3RUI2NDlGRjU1Cis6MTBBMkIwMDA4MzdDMjhEQjVBM0VBMUMwNUExRTFDNjVDRDk3OTQ1OTU5Cis6MTBBMkMwMDBGM0RBMjQ0QkZFRDMzRTNGNEJENDA5RjQ2MEY4NTkwQzJCCis6MTBBMkQwMDBERkNDMEU5NUQxNDlEQzhGRDdFRDM0REIyNTM5QkNERUUwCis6MTBBMkUwMDA4Mzc1Q0MxRkQzRThFMUY0QzRGRDMyMkU0RTk3Q0QyNTAzCis6MTBBMkYwMDBDQzZFMzFENkZEMjRFNzU3MTFFRUY3RDhENUQwQzZGQzg5Cis6MTBBMzAwMDAzMDYzNDM4RTdDQkE5RjJEQkY5MzgyMDNGOUExMUZFNzcwCis6MTBBMzEwMDBGQkYxNjM0RThGMDdCOEZGRTY4NzdDNUYxRUU1RkU5QjZGCis6MTBBMzIwMDA0N0MwN0YwM0Y0MEFGRTFCM0JFQzNGRjNERkI0NzNGRjJGCis6MTBBMzMwMDBDRDQzRTBCRkMxN0RBREU2N0U5OEQ5NThERTA2RkU5QkQ5Cis6MTBBMzQwMDAxMUUwMjc1QTgwRTkxNkVFQkZEOUM0RkQzNzFCQzE3RjQzCis6MTBBMzUwMDAzMzAyRkM0MjJEOTgwRUIyMzFCQjdDRUJENDUwMzZGODYwCis6MTBBMzYwMDBDQkY2NEM0RDZFMTcwRkIyMzFCQ0M4MDc0NTg2QTZCOTY3Cis6MTBBMzcwMDAyNEY0NjUxN0UwMkY0NTZDMzg5NzI5M0YxNjdBQ0U0REE3Cis6MTBBMzgwMDBGMzIzQTIwQ0FFRTUwNzQzQ0Y0MTc5NzExQkNCMTdGMjQzCis6MTBBMzkwMDA3MTQwOUU4MDdDQTFGRjYwNzEzNjM5NTQxQjMyRTFFRjIxCis6MTBBM0EwMDBCODE3QTM2NDBFRERCN0I3NjU3RTBFQTA1MUQ1MjMyQjc5Cis6MTBBM0IwMDBFRTJGODU3MkQ4QTczNzg1NTA4RjNDMUVGQTI1Q0M4RjlCCis6MTBBM0MwMDAxRjBFMEI0MDFFODNFRkVBRDUxNTVBNEY1RERDMUQ4MjMwCis6MTBBM0QwMDAzNkJFOTZDRTJFQjBCMzM1QkQwQkRCNkRBRDBDQTI5RjU1Cis6MTBBM0UwMDBDREQ4MjczQUJBMDUxRkU4REM5MDJGMEVFM0ZCNEYyNkE1Cis6MTBBM0YwMDA1QkYxMjEzN0I2MEJGNUUxRTZCQTU5Njk4ODc3MUExOThFCis6MTBBNDAwMDBEMDVFMkZEOTY5RDUxNzg2NkZCN0RBNDlDRDc3Q0QxQUM3Cis6MTBBNDEwMDBEMEJGOUNFODJGNTMyNzVCRkQ2NUNEMjUwM0I3Rjc5NThCCis6MTBBNDIwMDA1QkM3Rjc5NDI2QjRGNzBDRENERTE5OUIzOUEwM0Q3OEE2Cis6MTBBNDMwMDA4NTU4OTM2MTFCMTRDRjE3QzZBRUMxRkE4OUZBOUYwQ0Q5Cis6MTBBNDQwMDBGMTZGNTRBRjkzQTcyODIxMzgwNzk2QTdBODE4N0EyNTRCCis6MTBBNDUwMDA0RkQxNzgxQUU0REY0MzNDNUZDREYyMkE4QjkzQTBGQTA4Cis6MTBBNDYwMDA2MjNFOEM0M0Y3MjdFMUZDM0I0NEUwN0M3QUVCNDhDMjM4Cis6MTBBNDcwMDBFRDkxREEzNUExMUM5QUZGNjc4MkY2QzQ0OUY5Q0UyQTFDCis6MTBBNDgwMDA5REU2NzdDQzcwODhEMjk1ODA2RjJDREU0MUUxRkI5NUZDCis6MTBBNDkwMDBBMTQ0RDcyM0RENkUxNUM5NkU5QURGMTMxOTk4RUZGNTI1Cis6MTBBNEEwMDA4QjgzRjA4NEQwN0YzMzc0QjE1QTI2MEQ0MEY3REIxN0NECis6MTBBNEIwMDA4QkQzQTM0OUZBQkQ4NkQzMTUzOTQ2MTJGNUVBNkI2Q0U2Cis6MTBBNEMwMDBGNEZCREFDNUIzNTRFMEZGRjI0RDQxQjQxRjg4QzZFNjkxCis6MTBBNEQwMDA2RkYwQjk4Q0Y0ODFGNzZGNTdDMjdDNzM1M0Y4NzU1NkRGCis6MTBBNEUwMDBEQjM4QkQ5NTMwRkU2OEUwN0ZDNjRBODZFN0E5RkE1RjkzCis6MTBBNEYwMDBDN0Y5NTlBQzUzQjBGODdGMDZERDU0NUQ2OUNCNDQ3Qjk2Cis6MTBBNTAwMDAyOEU4MDEzRUZBQjlDNEZDNjg4NzU5RkM5QTQxNEY4RDhFCis6MTBBNTEwMDAyNTJGMjNGRjM2QzZDRkNFRTkwMkIzOEQzNDFGOTlDODRECis6MTBBNTIwMDBFMjJBMjg3Q0QxNUUzQzQyRjk3ODI5RjI3QjAyRjU1RDczCis6MTBBNTMwMDAwQjdBMkE5OTFGM0Q4QUYxMEZBRUJBQTAwRTc5QzlDM0QyCis6MTBBNTQwMDBGMDA1RUM1MTVFMUZFN0IzRTFBRTU5MjFEOEE3QzYxQzU4Cis6MTBBNTUwMDAxMkU0MjBDNjc1MUE3OEQwMTgxMDMxMzRFMjkzMTJBNjhFCis6MTBBNTYwMDBGN0NBMkFFNTEzMzBGRjkxMzJDRTlGRUE1OTE3MkYxQTA2Cis6MTBBNTcwMDBGNjhCMDRFNzg5QkFDRUVDMzcxNjc3NjVDNEUzMEQ2RDI4Cis6MTBBNTgwMDAxQjgzRjhERkVDNUQ4OUU3ODVGQTU4QTYwNzQ4QTQ5QjkyCis6MTBBNTkwMDA4OEY5MzgxRjVEMkMwNzdGQkYxQTA0NTk2RkNCRDQwNThCCis6MTBBNUEwMDAzM0JFN0Q0RDA4REYwQkZCMUVDN0FGNEU4QzQ3MzFFMDNECis6MTBBNUIwMDA5NzA4RkY2RjcxQkU5QTQ3OTJEQjFGODNCOTdEOTNBMTA1Cis6MTBBNUMwMDA3NDVFMDc3Q0I3RTU1MThBRTc0OUUyNjZGQ0JDREUwRkEyCis6MTBBNUQwMDAzQTY2QTUwMTI5MTk3NDZCOTQxRjkwMzQxQ0M3QzgwRkUzCis6MTBBNUUwMDA4RDI5MkNGRUFGQ0I2QUE3RkNGRkFFRUYxRkI0NTlFMzU5Cis6MTBBNUYwMDBGM0ZFNDdERkZGMUY3REZGRkYxMTdEOUZDQkM3QTk2QkQ4Cis6MTBBNjAwMDA2MDIzNkMxRTk2MkY2RjlFQkE0NkM3RjU1OUVENzY0OUFBCis6MTBBNjEwMDAwRTVBRkMxRkJENDBGRjI2MzkyRjdCQUM3QUM5RTVGM0VCCis6MTBBNjIwMDAwRDE5RjUyNzEyMUM2NkUxQkYxOUQ5MDNDQjE5QzNDRjQ5Cis6MTBBNjMwMDBGMUU5MzA0MzlGMEYyMTVEOTBBMjEyNjJENkQ3OUE4MDM0Cis6MTBBNjQwMDBDRjUzMzhFRUE0NzBFNDcxODczODRFMzY1Rjk3QUJBN0NFCis6MTBBNjUwMDA1QTE3MzE3RUMyQ0FCNzc3MkUzOEVBMUM4MUZDNUZDNjEyCis6MTBBNjYwMDA3NjlFNDA2NzA4RTRBRDQzRUI0NkZFNkJGMDY5Q0E5RkY3Cis6MTBBNjcwMDBDNzJBODM4MENGNTcyMEZGNzM5NTQ0MzA3RTZEMkRENzM2Cis6MTBBNjgwMDA0MzEzRTEwQUZDMzA1MDA2RTMyNUYwMjFBMkE1M0JBMENDCis6MTBBNjkwMDBGQ0JCMEMwNzY0RjBFMzgxOUZCMjdFNjAzRkNCRTVDNjU0Cis6MTBBNkEwMDA3RDE4NzExOEI5RjQwRkY4RDA0Njk5Q0Q4RjFDQjJDNjM5Cis6MTBBNkIwMDBCMTUzN0M3NDU4RTI3NUNGM0Q4Q0YyRDRFOEM3RDA3N0EzCis6MTBBNkMwMDAxMkRCMzVBOTU1NkEzMkJFRjhBNjEwRkVCQTMyMDA5RURBCis6MTBBNkQwMDAyNEZBQjU0ODAyMUZBNzFDNTQwMDdENkVFODhDRTlFOEY3Cis6MTBBNkUwMDBBRkVBRjM2RkM5NTZCRTJFMDc4Q0I4OThGRjVFRkU1RUM4Cis6MTBBNkYwMDBBN0ZDOURGMUVCNUZEMEZGQjc4QjlGRUYyN0QyNzE2Mjc0Cis6MTBBNzAwMDAzRkEyNEVDNDlFMjRFM0U3RUI2MkMyQjlCMzU1RUYxN0Y0Cis6MTBBNzEwMDA2NDhEREQxM0FBQjM5RUQzQzg5RUVDRTRFNzA5M0NDRTVBCis6MTBBNzIwMDBCMzY2NDIxRkZFN0VFMzhGMTQ3RkVGMzg2MTYzM0M4QzdCCis6MTBBNzMwMDBDQjI1QzNCRjdCMDdDNDdCRDJGREE5ODFGODRGMkFCRkJECis6MTBBNzQwMDBFNzkxNkExRjE0N0U0MDQ0OEMyQkZCODBCQ0VDMUI2Nzk2Cis6MTBBNzUwMDBEQUE3N0QwQUYzRTc5MzE2REIyOUI4NkY2NEM0MzVERTA4Cis6MTBBNzYwMDAxRTYxNzk2MzNFQjU2REQ2RkM3QzMyMkIwQkNFMzVFNjhGCis6MTBBNzcwMDA2RkI3MTE4ODYzQkM4M0M4QTc3QThDRjk1MzNERTdGQjk4Cis6MTBBNzgwMDAwQThCRDNBRTI1NzVDREMwQ0ZENjcyRkY3RDhENEE2NEJFCis6MTBBNzkwMDA4ODQzNUNGMkNDODMxNTYwNkYxRTUwOTgxRUY1MkU4NUExCis6MTBBN0EwMDBCRjY2OEE1NzVCRTg4OTJBNzAzRUYxQ0VDMTcxNUZGRkIwCis6MTBBN0IwMDAxMjgxRjZEMUU2NkM4ODQ3QTQ3QTJERDhCRDg5NzA5RkE2Cis6MTBBN0MwMDBEQjYyOURERkE1RTY5RjM4NUZFMzdFNTJBQTc5QzgxRDU0Cis6MTBBN0QwMDA0MjI4OTkxREYxMzNDNTFBMzc3N0E5N0I1MzZGODM5MUFFCis6MTBBN0UwMDA4Q0U3MjBENjdCNTM5NzZBNzc1QUQxNDhCMkZCNTY5N0FECis6MTBBN0YwMDA2QTc3RkVFRjFDRUY0MjhBRjE5NjM4N0ExNEUwMDNDQkI5Cis6MTBBODAwMDBFNEYwNzRBMTIwMUVGN0E1RDhBQTQzNDMyOTI4RTQ0MzA1Cis6MTBBODEwMDA2M0JCQzAxNzZFQUFENzcyOTlGNTRFODAwMTcyMTlGNTA1Cis6MTBBODIwMDBBNjhCMDNGNDc3ODFEM0YxQUZGNjNGQUMwMDdEN0VGMEM5Cis6MTBBODMwMDBEOEM5OTk3MEVFQjNFODY3MTI3MUMwQkFGNjdCNDkxN0IwCis6MTBBODQwMDBCMzRGMTQ5MDYzMEIwRjRBRTg4RjIzNzI1N0M1OERBNjQwCis6MTBBODUwMDAzODVBOENCOEE1RUI1RkY0NjMyRkM2NjkyQzdDQzIxRUY2Cis6MTBBODYwMDA5RDQxREIyRjdDRkE5RDMxODRDMkUxQzI5QURFRTM0MzM1Cis6MTBBODcwMDBDMUNFNzg0QzYwNzE4OTdBQ0Y5ODFCRTlGNzg1MzJCOURGCis6MTBBODgwMDBBRDNBMDkxRkY0RDgxOTlFQkZGRjEzRjc2Q0MwMjNBMTdFCis6MTBBODkwMDBFM0M4QUREODZGRTczNzZDNzZEM0I5QTA2NEI3RTFCODM5Cis6MTBBOEEwMDBCNDVFODg5RDY3MDlEMTYyODFDRENGN0NERkMyODgwNzA1Cis6MTBBOEIwMDA3REZGNTE4MUNERUY5MDJERUE4NEY5NzVCNDJCNjE1QTVCCis6MTBBOEMwMDA2RjU5Qzc1RjEwNkZCRkZDRTMwMzNFODBDM0IyNDM5MjcyCis6MTBBOEQwMDA4NUJGMkNFQjkwQkFFQzYzMzAzRDY5QzdGQjM0MjE4RjA4Cis6MTBBOEUwMDA0MEY5Qzg1MjY0MzEzNDNEQjgwNEUzQzc5Nzc2NkVGQzMyCis6MTBBOEYwMDA4QkU0ODNGNjU2RkFBMTcwMDk3NjAxNUM1Rjk1ODIzMzhBCis6MTBBOTAwMDAyMEZGRTQyMzNFQjAxQkRGRURERUVCMDNCOEQyN0VFNzkxCis6MTBBOTEwMDAyODE0QUZBRUY5RDg0NDY3ODRGNTFGNEJFRkRGMUZENTdECis6MTBBOTIwMDA3NDE0QzBBRjY1OURFQkQ5NzgwOUY0RjkyRUZDNjM0ODI3Cis6MTBBOTMwMDA3RkI5MzBDRTZFOTUwQjlGOTAxNzJCRDA1RUVGQzg0ODM1Cis6MTBBOTQwMDAxQTZGREYyNzE3MzhCRDJFM0FGMEM5MkU5RDhFRkJGRUY5Cis6MTBBOTUwMDAxM0VGRUREMkU5RkMxN0ZGQzc0N0JCRUUwMUJERUNFN0YzCis6MTBBOTYwMDA0RTE1RjhDQ0IyQzc3RUU3MjMyNkI4Q0ZCNDMzQkZDMUFCCis6MTBBOTcwMDA4NTQ3MUZEOUI3ODNEMkNCODUzRkQ4RDFBRUJERjBFQzg4Cis6MTBBOTgwMDBEOTVDOERBRUZCQzJFMzlGNjU2OUI0RkU1RENGNEUxRDAxCis6MTBBOTkwMDAwQzcwQjhFQkE5MkYwRjFFQzg0RjAwRjgxQUI1OUJGNzIzCis6MTBBOUEwMDAzNThBRkQ2Qjg3MDQxNkRDN0Y5OEE3MDlGQkYzRENDMUIxCis6MTBBOUIwMDBFNzcyNjE5RTFGQkM2NkM3RkI4Q0NCRThCN0ZBMzJEODQyCis6MTBBOUMwMDBBRjI1QzhGNzIxQkY4QUMyNzlFOUZFNzU3RjkxQzYyNEY5Cis6MTBBOUQwMDA4M0I3M0U1NEM0QzM0NTRBMzYwMUQ4RUYxQkJGNzY3NUQyCis6MTBBOUUwMDAzOUE0QjZBMDA2RkQ5MTVFRTREQjg5RUQ5NkJENDJGNzgxCis6MTBBOUYwMDBGNUNBRDRGQkY4MDlGOTlCMDJGMDVGQjY3RjNEMUIzNzFGCis6MTBBQTAwMDA2MTFGM0Y4MDdGNENFQ0JGOEY4QkZCRURFM0UyODdEMDczCis6MTBBQTEwMDBFNjM4OTg5MTM0RkVDQUQ4QzcyNTRGRkRGMzgwN0E4MDc2Cis6MTBBQTIwMDBDMTBGMkUwNURGMDUzQzhFNzBBMjNEQjRDQTBFNzRGNTMxCis6MTBBQTMwMDA4NDVCMEZCMEZEOERDRUEwNjUxNzBFN0M5MjRCMjg3RUY3Cis6MTBBQTQwMDA5Q0IzRjVERTBBN0NCMkY3NTlCQkJBOUI3RTVGRjhFQzhCCis6MTBBQTUwMDBBQjQ4NjcxNzlFN0E0OUQxOTA0RjEyOEY0MEY1ODQwQjBGCis6MTBBQTYwMDBBNEVGQUYxQkY0ODZBNUZDQ0M3OUQ5MUU2Rjk3REQxNzM4Cis6MTBBQTcwMDBERkE3QTVEMTFCQTY2QjNFRkM3RTEyQkY0NzE5RkUyRjk4Cis6MTBBQTgwMDA4RDFFQjk0OTQ4QjI2RjRGREIwQjE4M0Y4RjBFNDJCODhECis6MTBBQTkwMDAyQzIxREQ4QTVBNkFERDRGNjEwMkVDRTNDOTY5ODA3N0I3Cis6MTBBQUEwMDBBOUY2RDE1OEJGMEFFQkJGQ0FCNDlGN0IxOEREMjZENkUyCis6MTBBQUIwMDA1RjRBRTkxM0ZDODg3REZCMUExNTVFMjU0OUU4RjQ0MkRDCis6MTBBQUMwMDBCQjVEODY3OEUxMEJCNjRCREMwM0ZFODJGQTVGQTczREU3Cis6MTBBQUQwMDA4NTdEQ0ZFMTcwMjkzQUJGRDRGQUJFMjhGQzc2ODE3MzE4Cis6MTBBQUUwMDA3QjUwN0YzOEJFRkZCN0U0RkNGRjQ1Q0UzNzk2OTJGMDJGCis6MTBBQUYwMDBGNDZDQTlCRkZDOTI0ODQ4MUY5QTFGOUY2RjczQTc4NEVDCis6MTBBQjAwMDA3Q0ZERkQwRTI5MEE0RDEzRjlDNEQyMTQ3RUE3RDdFREEyCis6MTBBQjEwMDA0QzFGNTk3QUU4QzgxOEUwNjdFRjFGRkQwOUM3NEI4NjNDCis6MTBBQjIwMDBGNzRCRjc5RjU0NzQyRTBGQTI2Njc5OTBDMjNGNzk5QTIzCis6MTBBQjMwMDBDRjdCRDlFMUU0RkQyRERCRkY5N0E0RkRCRDJCODdCRUM0Cis6MTBBQjQwMDAwMUYzN0ZCN0RCNDY3NERBQzVCQjlENTI1MjNGRUM2RjExCis6MTBBQjUwMDBFQzM2NEI1QzYxQjNCN0UyQjUzNERBNEVGMkI5MzQxODc3Cis6MTBBQjYwMDBCQTcxNERFODU1MURGNDkyOTc2RDc4REU0MUU0RTAzOUY1Cis6MTBBQjcwMDAzQkY4MTNCRDJFNkQwMzg1NTdBMzZGM0VGQTJCOERGRTU4Cis6MTBBQjgwMDA5QTEyRTAyNDA3QUE3NUIwNEJFNUNDRUE3MkE2MjM0N0Q3Cis6MTBBQjkwMDAyRDc2QjE0RDE1MkRGM0E2NzIzNjA3RTREMDVCNjNDRjQ5Cis6MTBBQkEwMDBEQTYwOUQ2RjI3RTg4MzZGQ0JBNDc5MzBFREVGNkQ1REEwCis6MTBBQkIwMDAwOEFFRDY5MkUxQjdCNUZGRjAyQTg5Njg2NkY5NjdFRjZCCis6MTBBQkMwMDA3RDBCRTY0MzdFRTEyNDEwQTcyMkZERENBOTAzM0Y1OTVCCis6MTBBQkQwMDBCNkNCMTk4NUI4ODBFNzlFRkE3NDFGQzBFREMyNDM3NkU0Cis6MTBBQkUwMDAxRTI3QzBFMkNFNkI1NUQ2QzdEOUE3M0VEREY1RUZCNDIwCis6MTBBQkYwMDBGQzJDMzRBNkUzRDdFRUEyRjU0MTBGREZFRkM2RTBGRjUxCis6MTBBQzAwMDAzRjNGOTEzNjg2NTBGRTVDRkI4QjdCNjYwMjdGQTkwNTM5Cis6MTBBQzEwMDA5RTRBRUJEN0ZFNzgzMEVBNzU2NzA2QjFGQzk5MDNDMzBDCis6MTBBQzIwMDBBMkIwMkY4QjlGN0M3NjI5Qzg5MTQ1M0Y3MjEzNzAxOTczCis6MTBBQzMwMDAzQ0Y3RDRBQkI3NDJGRUMyMkZCQzE4Mjc3OUUxMTc2N0E3Cis6MTBBQzQwMDBBRjAxM0FBMEZBQjM2Njk2RTM3Nzk4REYyQkEwRkQyRTBBCis6MTBBQzUwMDA4MjNDMkIxNzJFOUFFMjZGMTY0MTRBRjlDNkEyNDM2OTJECis6MTBBQzYwMDA3ODBGQzg1NDBGREIyREIzRjdBRTBDQTIzRjU5Q0YxNkE3Cis6MTBBQzcwMDBEMUM2RTlDQTA2M0E1Q0Q0NjExRDZGQTQ4M0Y5NDk5NzJECis6MTBBQzgwMDAyOUJERjM1OUZENDgzNkEzRDc2RTZDNTdFMUUwNzhDQTY5Cis6MTBBQzkwMDBDQjEzREIxQkY1Q0IxRDA1OTY3QTQ2RkJBNTc2NTI5N0E5Cis6MTBBQ0EwMDAwQ0ZGMkI3OUJGOEIzQTNFMUY2MUVEOEZFMTZCRkY3MTdCCis6MTBBQ0IwMDBEOEY3RUYwOEVDOUUwQTc5REM4OUU3NkQ4Qjk1QUVFMTU5Cis6MTBBQ0MwMDBFOTk0NUU5RjU2QzgwMkEwREJDNUJFQUVFMTdFM0FERUM3Cis6MTBBQ0QwMDBDRjM4OUY1Q0VDQTI3OUZBM0Q5QkNGMDNFQTQzOUUzOEM0Cis6MTBBQ0UwMDA3QTdFMDRGQkJCRTQxOTI3MDE3QzVGRjIwQjJGOUVDRjE5Cis6MTBBQ0YwMDAyQzc5RkFEMzMzM0ZBMERGREY3RkNBOEQ3RTkzMjVCRjQ3Cis6MTBBRDAwMDBCODFCRjc3Qjg5QkRFQjU2RjBGQkY1M0U2RTQ3N0ZGMzMyCis6MTBBRDEwMDBGQjhGM0Y5RjBCN0FDOEZCQjZBRURDRjQwMUVDRjMyNTRBCis6MTBBRDIwMDA5RDc2RUU4Q0IwQUU4M0RBMDUyNTc1NzQzRUZBNTYxNjI0Cis6MTBBRDMwMDBDNzU2NEY1Q0MxRDUxMDlGMDI4RTAzQzBFMzM3OUMyQ0QxCis6MTBBRDQwMDBERThBOUZFRkFFRTBGRUEwMEZFNzY5NjkzOEZGNTJFNkFBCis6MTBBRDUwMDBERjVBQzFGRDA3MkJCRUFBMERGNjlCRTYwMTcxQTY2NDYyCis6MTBBRDYwMDAxQzIxNzcyQjc1MjM4MENGNEFCMUFGMTA4REU2RTU1OEIzCis6MTBBRDcwMDAyMUE2NDYzRDQ5MERFMkY5ODM5NEM5Q0VDRjZEOTk0MTk0Cis6MTBBRDgwMDA1MjVCMEFFRDU4NUMxMkYxNUNERjQ3NjdGRjhCNkVGMTk2Cis6MTBBRDkwMDA4QTA3QjRDMUQwREY0MjA3RDNBN0RCOUNBMUJCMUQ2OEUzCis6MTBBREEwMDBDRjc4RjA3RTI5QUU5MzMyMDRGRDI5QjZBRTRGMDVCNkJBCis6MTBBREIwMDBBRUM0Rjk3RTZBRDNFREMwQ0ZFM0U3REVFQzlDQTU1RUJFCis6MTBBREMwMDBENjVFODVGMzRDNzI4MkYzQTU3RUVCNjc3NEY2QTE5QThBCis6MTBBREQwMDA4RTc0NjZBQzYzNjM4MzhBRkM2NDdENDMwMEQzNzUwRDE3Cis6MTBBREUwMDAyNTQ0QzNGQjAxNDFDQzRCMUMxRUY2NTI5RDQ4NzBERjJECis6MTBBREYwMDA1NjYzNzNCNTdCQUE0MzcwN0UwMTdERTJCOTg2Mjc4Q0NBCis6MTBBRTAwMDBGODY1MEZENEExRURFRkYwMTBCNDRGMjU4RjRFNkEzREQ5Cis6MTBBRTEwMDBFODBGNDMzOEMxQjkwQ0MwNDlFMTc5Qjk2RDA2QzI5NTU0Cis6MTBBRTIwMDBCNkM3RUYyQjlERTE1RDAwMTc0N0NFMjgwQjlGNTIzMjJFCis6MTBBRTMwMDBDQjJDRjk3RTcwMzNGMEUyQzA3RjM3RkMwOEMyNkI3RDBCCis6MTBBRTQwMDA4MzAzNTNCODVGMDE3MDgzRkIxNTkwRkZCRjAwQkZFMzFFCis6MTBBRTUwMDA4RUYxRUNCRTgzNjZBMjFGQjhFRkEwNTlFODI5MDVGQzZECis6MTBBRTYwMDAxRUEwRjBDQjhDRDM1NTIyMUNFQTc5N0M5QjQxNEZBOUM0Cis6MTBBRTcwMDBFODE3RUVBN0MwRTU4MzZEMEQ2RDk4MUFERkQzNTNDOEIwCis6MTBBRTgwMDBGNUUxNEU4MUM3MDU4NDU3REJCODdGMUNGNzIxNTMyN0I2Cis6MTBBRTkwMDAzOTI2N0YxMjA5RTg3ODJGMEFFRjU3NDNCOTg3RjkxMTRECis6MTBBRUEwMDA4REZEOTU1NEY5OEM5NUZGNjlBRkMyN0FFRTdFQzEyNjZGCis6MTBBRUIwMDAwMkJGOTJFQTFGMjZFRjY0OThFODc4NDZCNTUzNDMzOEZDCis6MTBBRUMwMDAwN0QxN0ZEQkM4RTVFQkRBQkVGREI0RDJDN0M2MDYwREZECis6MTBBRUQwMDBEMzREOUM0RUI2NzAzQUQ5MEFGQjBFRkVCOUEwODg3QkMyCis6MTBBRUUwMDBEQTNBOURBMEZDQkM4RkU2OTk3RERGNDVDQzdFNkQ3Rjc0Cis6MTBBRUYwMDBCMEIzQ0I0NkY3MUY3OTkyODY2OTE3RjJBRkQ3RUNEMTgyCis6MTBBRjAwMDA2MkRBQ0U1RDRBNDI4MDJGRkVEN0JFMUJDNUI1OTJDRTE3Cis6MTBBRjEwMDAwMEY4NDNGRDFDN0VFNDcwODFGRjY2RjY5RTgyOERDOUI5Cis6MTBBRjIwMDAyOTIyQjEzNDYyMDNGQjI5MTFCRThEQzFBMzBFQjBCQjJGCis6MTBBRjMwMDA1M0NEMjcyQkE4REI3M0U5Nzg1OTZGRDg5MTdGNjdERTUzCis6MTBBRjQwMDBEMkY5NUEwRDVEODdBN0Q1OERGNjY0NTY5MEUxQTMyN0Y3Cis6MTBBRjUwMDAxODE2NkE0REZCOTc5NTQyRUZEQkU3QkMyRUQzNDlFOTAzCis6MTBBRjYwMDA3ODEwQzRGM0QyNzQ1QjVCQTExM0UwQkJEMUQ2MTkwMDk3Cis6MTBBRjcwMDAzRUI4RDFDRkU0OEMzNjlCOEU3Njk1QTkzREU3OEZCRTQ3Cis6MTBBRjgwMDA3MjJCRkQxQkZDNTg5RDVDNjZDMTYzODNERkE2NEZCMTJECis6MTBBRjkwMDBFMkJCQzE2RkNGM0I5ODNFRDdFNkFDMUVFRTg0NzhERUI1Cis6MTBBRkEwMDBEODRFQTRDNzQ0RkM2RkI0MjlCQTQwRjU5NDQ2RDAyNUM2Cis6MTBBRkIwMDA0MUJGM0IyOUIwQjg5NEZFN0MwMEUzNTYzRUVDQzlERkFDCis6MTBBRkMwMDAwREVGMEVBQ0UxRjFENDNBQTUxNzk0M0JEQ0ZGNjk5QzgwCis6MTBBRkQwMDBDQjFGMjBENTJERjAwRTRDMEJDNTIzMDJFRkQ1NTBGQzE2Cis6MTBBRkUwMDAwMTdBRDg0Q0YxMDdEMjA4QzUxRjQ2MjcxMzMwMzVGMDM3Cis6MTBBRkYwMDA3MzI2Mzg0RkNDRTdCRjQ1Qzc0NTc2OUY0MzA0OTk0MzM2Cis6MTBCMDAwMDA2NDZBMDc3QUMwQ0Y3NDY0QTIwM0Y0NDJEOUM2RTI1OUQ1Cis6MTBCMDEwMDA3QUJENjIyN0M0QjNBQ0Y1Q0M3Mjg0QzBBRkUzMkZDNzRFCis6MTBCMDIwMDA3REZGQUJCNzI2NkZBMDczMTU3ODUxMDRGMDQ2RjUwNDg5Cis6MTBCMDMwMDBDOUE5RDJGOEJENUY0OTJEMjM2MDRGMUVGMDc0RTNGOTEyCis6MTBCMDQwMDBERUQ1NEVEMTMyQUYzNjY3Rjg0NkE3QzlDRjNGMUE0Njk0Cis6MTBCMDUwMDBFN0ZCRjY0RkI4RkVFNEY3ODc2RjczNzIzRjY1OEU0RURECis6MTBCMDYwMDA4QTRDRjQ2REM0OTkxMjREMjcyNTI2M0E1RjUzM0M4REM2Cis6MTBCMDcwMDBDMDM5Njg3RkZBNEVDMUM3RjZGRUQ3RjBCMUM2QkMyODBBCis6MTBCMDgwMDBFRTlCMkQ5MTZGNjQ1MkZFRUVDMTU0MTc1NTM4REYzQjk1Cis6MTBCMDkwMDBENEY0MkQzRkUyRDk1RDAwMEZFMkQ5RERBN0JGRkM1MzA4Cis6MTBCMEEwMDA0MUZGNzkyNkYyQURCODNDRDJEMDVGNDVFNUQxRkQxMzIyCis6MTBCMEIwMDA4MDBGQTY5MDQ3NDdERTFDRjEzNTg1OTZCRkYzQkMyNDcwCis6MTBCMEMwMDA5OEZENzUwQjYyRUI1MTFFRDRDNjI2MTI4RENFQjdBNjI1Cis6MTBCMEQwMDBFRDdCOThDRTZGNkI0N0JDM0YxNzVERUJDMzM4OUExNjdDCis6MTBCMEUwMDA2NkNGOUQ4QkRBQTI1MjNFRTJFRDQ1MDlGQ0ZBODRGNTZCCis6MTBCMEYwMDA3RjZFNjcyM0Q2MjNFMDdEMzE4RDdCNkUyNzZCNEZDQTMxCis6MTBCMTAwMDAzNUQ0QTczRkU0NkJBQ0Q5NjIwRkMxMzlDREI5MzZEQTdCCis6MTBCMTEwMDA2RTAwNzhENjgwMzE5NDQ0M0ZDNUY3MDRFMEVFMDBBOTc0Cis6MTBCMTIwMDAxQjAxN0NDRUEwRjdCQjE1Q0E5NzAwMEU2RkQ5OTNGQTBFCis6MTBCMTMwMDBEOTU3M0FBN0VFMDBCQTVFRTkwQ0I1MzNCOEE3NUZENjg3Cis6MTBCMTQwMDBCQjE2RUY4ODU0RUY0NTc4ODc3RDM3NThGQ0FDQ0M4RjIxCis6MTBCMTUwMDBGOTBFRDc4Qjg5MjM0NUI5OEZCNzU3OTM5NzJGNjk3RDAwCis6MTBCMTYwMDBFRkY4QkQzNEQ3NUMxQUFFMjYyNkZCNUEyMkNDQkU1RTYxCis6MTBCMTcwMDA3QUE4OTJCRjJGQzJFNjkzMDQzRjk5M0VEQjZBNDczRTBFCis6MTBCMTgwMDAzNDhGRkI4MzBDN0M4REUzNEJEOEM3RUY5NzVBRjBFOUUzCis6MTBCMTkwMDA4RUQ4NTZEQzZGNjFFM0U4RkIyNzUyRjg3RDQ0RjEwODU2Cis6MTBCMUEwMDBGQzcyQzJDNkFCMDcwMzFEQURERUYwQTUyREI3RDBGRTA1Cis6MTBCMUIwMDAzRjdFNTFDMkVGMEI2MjRFQUM3RkZFREVFMEZEQjc4MEZBCis6MTBCMUMwMDBCRUZFNkYzNjAyN0NFNEUzMTM1M0YxM0NGNkJDQ0RFQURECis6MTBCMUQwMDA0NzU4RTQ2MkYyRkExQ0E3RTNGOUIxOEQxNkZENzg3RUI4Cis6MTBCMUUwMDBDQjVDMDVGQzhGRjM2MzlCRjFGQjdDMzg5NEMxN0IyMDI3Cis6MTBCMUYwMDA3RjNFNTYyOUMzNzkwREMxRjNEMTczQ0VGN0E3QUMwMUI5Cis6MTBCMjAwMDAzODFDMkU0MzNGNTZFRDI2N0JEMjdCMjlFNzlDOUFFNURFCis6MTBCMjEwMDBEQ0I5QjZBNzE1RkIyNTU0M0ZDQUNDRTJGRDk5Rjg0NzI3Cis6MTBCMjIwMDA2RDBDMkVCMUMwRkVFODA0RUUyRENDRTc3Q0E0NkY3RTQxCis6MTBCMjMwMDAzQjZEMTYzRTcyREU5OURDNEYxMkUzN0FDOUZDRDg5NzVCCis6MTBCMjQwMDA5MDhFRkFBRkVGMUE0NjVGQzZCODNEOENFRUUyRUJCOUNFCis6MTBCMjUwMDA3RjYyQjJGNUM0RDczMTE5RUI5RkY3MjcxRjNGOEZDMzI5Cis6MTBCMjYwMDBGOTRDQzMwMjEyQTI3Q0E4QzY0RUVCNzk2MEZDM0I5QjUyCis6MTBCMjcwMDAyNzgwOURCREQzOUYyRTk4RDY1NURCQjY4ODg0NENFQjk2Cis6MTBCMjgwMDBBQUREMzk0N0E5MzFGNTFCREYwN0U3MkZDREZCOTBCN0MyCis6MTBCMjkwMDA0MTlFQkFDNjAzNzJCQkRBRURBMjcwQUVEOTc4RjU5OEJBCis6MTBCMkEwMDAzMERBRDk4QzlGQkM2MzBCRTYwMjVGM0REQjc2Njc1MkQ4Cis6MTBCMkIwMDBGQUNFNzM2OTE2Qjk1MERCQzZGNzg3RUFCREU1QTZGRDdECis6MTBCMkMwMDAzMUY2MjVCMUZEOTkzNzZCRkY3QTJGRjgwMTFFNjA0QUUwCis6MTBCMkQwMDA0RDJBNzhGNURCQjdGQ0U0NzA5QkU4NjI3ODc5ODZDQTgyCis6MTBCMkUwMDBEOTMwQzI0RDdCRkEzNUMwRUI0RDZFOENGNzRDMERCRjlCCis6MTBCMkYwMDAyQjQ4NzgyMEY4QTVEMDVGQTlCRTUzRTYxQTBGRTMxMkI5Cis6MTBCMzAwMDA4NDQzNkQxQkMzODM0QkMxMkQzRTJFQzc4M0NBRTRFQjIwCis6MTBCMzEwMDBBOUVEQzM4MzdBQTI1MzgyM0RBNTVDMEEwRkVFMjFCQTQwCis6MTBCMzIwMDA2MzgwNzVGNEUxQzE2ODBCMUVENEJBOEFBNzAyM0Q5RTAyCis6MTBCMzMwMDAwMzNENjU0NEZGRkQzRkE1RThCRTQ5NzAwRUI0NDFDMjIwCis6MTBCMzQwMDA3M0E2NTMyRTNERUI5QjJDM0YxNkY4RjMyOTVGNjRFNjYyCis6MTBCMzUwMDBBNEYyNzhGRThFQkRDNUJFMzlBNjcxQ0ZCNkRDRTk0QjJFCis6MTBCMzYwMDBFNjY3QUQ0RDg1M0Y0NTNBMjlBREY4M0Y4NzNGRUZBNEVECis6MTBCMzcwMDBCOEM3QjVEMjU5QjkwOEY2OTM0NDkyRkI3MzhERDRFMDlGCis6MTBCMzgwMDBERjUyOUFBN0NGRUUwNDc5N0FDQTUzRjBENzI4MkQzRDIxCis6MTBCMzkwMDBFNDBDQUYwNDdBQkE1QkQ0QzZDQzExRTJGNjY3M0ZGRDg5Cis6MTBCM0EwMDBCMzYxRkFENUE3OEJDMTVGNTg3REY1NjkxQkVBNDNEODE1Cis6MTBCM0IwMDAxRjAxQkQzMjlGQzc0NUEwN0Y2MzA4Q0E4M0M0RjNEMjczCis6MTBCM0MwMDAxRkI4RjI5MzlFOEZBRTZEQTgxQjA3RkQxMjg3NEU1NEQ3Cis6MTBCM0QwMDA3MzlDMUM2MTdBRDRGRjg2RjFGM0UzRUI1MTZDNjEzNTA5Cis6MTBCM0UwMDAwOEY2QTU0MEFBMDFDRjZENzJCODA1RUUwM0RCMDI5OUZECis6MTBCM0YwMDA2Mzc1MTM1QzFGNzAzMUZGOTdGM0Q4QjE5NjdDREFERTZBCis6MTBCNDAwMDBGOUE3MTc1NTgyRjdDQzc0RjRBRjM5NzJFNDBGQ0RGRTZCCis6MTBCNDEwMDA2OTVCMjY4QjVGMjQ0NUE2RUYwNTEwODc0Q0YzMTYzQjJFCis6MTBCNDIwMDA5RkNFNzcwMDNCRjU2NzAyODM4M0VFQjVGMzdCNzVCQTU5Cis6MTBCNDMwMDAwNDcyRUY2NjI3MzFGRTUwRkZGRTgzMTEwNzIyMzdCMUY5Cis6MTBCNDQwMDA3MkJGNTFEQ0M0Q0FCOUZGNzI1OTBERjM0RjI2RUVFQjNGCis6MTBCNDUwMDBDRDg3RDc3NTgzM0U3M0YzRTEyMTczQzE4Rjc1QjM2N0QxCis6MTBCNDYwMDBDNDlGRTA3Q0UxNjdFMEMzMDc3Q0Y3MzNCOTlDRDhFRTZBCis6MTBCNDcwMDAzMEE3RDM2RkI1OEJCQThERUVDQjMxNUJFRjUxMzdDQ0E0Cis6MTBCNDgwMDBGNzNCRUMxREM3NkZGRUVFOThDRDRERDNENzVGMzk2NTA2Cis6MTBCNDkwMDA4Mzc3M0I2RTgzMDAxREJBQUUzOTQ0NTM5ODEyMUNDNUE2Cis6MTBCNEEwMDBGNjczNDlBNzk3RTUzQjA3Q0RGMjlBRkJBM0E2MkFGNENBCis6MTBCNEIwMDBCNzlDOURGMzdFRjM3N0FGNEMwNUYxNEZGQjVCMEJFOTM3Cis6MTBCNEMwMDA2RDJGMTIwNUZBOUY3MzUwNkI2NkQ3Rjg3ODdGODc2OUU2Cis6MTBCNEQwMDA3RjYyQkNCRjM4MUMxNTY2RTdDODBFODQ0QjFDNEUwRTNECis6MTBCNEUwMDA4NDlCMDEyNzc4RTYwNkNCRTM3MDQ2N0RDMzgwNzMxRkZCCis6MTBCNEYwMDBEQ0QyNjY1RjRGQzZBNEE2OTc5QjNEQzNGRjQ0QzZDNDdCCis6MTBCNTAwMDBFNzk1MDhFNzhGQTE4OEQyREI3MTU3RTg4RjQwMzcwN0FFCis6MTBCNTEwMDA1Q0ExMzcyMDVERUNFOENEOTUwQkYwMUU2MzBGRTQ5NzNFCis6MTBCNTIwMDA0QUUxQkMyQzhBNjcxRjBDMEI4RjE4MDQ3MTVDRERDOUMzCis6MTBCNTMwMDBDRjU3MTNFOUY0MkRBMDE3ODhGRkU2NzE5OEI3RjJGNUZECis6MTBCNTQwMDAzREY3RERCMzVFOENCMzdDRUFENTVDNDg5NzQ4M0Q5QjA0Cis6MTBCNTUwMDBCRTAxRjRGNjZCMDlGNUVGMEYwRjhFMTgzMDJFRUQyREFFCis6MTBCNTYwMDBFRUVGRjhENDI1RjJGMzAzQjZCRURCQjgxRTc3REI0MTZECis6MTBCNTcwMDA3NzE0REVFM0JDQUQ1RUIyRThCRkI3RDVCMzM4MEUyMkI4Cis6MTBCNTgwMDA3NzhGQjlDOUEyNDczNkE1RUMwN0VDQ0VDNDdFOENGNUZGCis6MTBCNTkwMDAxRENEQ0RCRTAyRUNDMzg3QzYyQjFBRjgxRjhFQkNGODlBCis6MTBCNUEwMDBFMTFGNkE2OURFMzVDQzgxRTdCMjlCRkMxQzdGMkI0NTJECis6MTBCNUIwMDBEQ0Y3ODdGQzIxRjc2OEYwM0I2RDQ4MEZFQTc0OUQxQkIwCis6MTBCNUMwMDA3RTQ5M0E0NTBBOUZBMzIzNTc0NkFCRTg3ODlCQUYxNkJFCis6MTBCNUQwMDBEMTY3QjUyNUY2NzBBNDBBREE5NUIyNzc4RjU0QUU4RjhECis6MTBCNUUwMDA2RUU5M0VENTA2Rjg3OEY2MzUzQkZBRkJEM0JEMTJDRUIwCis6MTBCNUYwMDA2MzgzQUQzQTE3RjRGNzNGQjUyQjQ5REZEOTczNzg2NTBDCis6MTBCNjAwMDBBQ0Q3MkVGNDYwQkNEQjVDMTI3MTAwREYzOEQ4M0Q2QjI4Cis6MTBCNjEwMDAzMENDQzcxNzI0MkFBMEZGRDk5RDkyQzhGNDY0QzNDRkE5Cis6MTBCNjIwMDBEMTI1MzMzRkJCMkVCMzdDODhBN0FBRDNGQ0RFRERGQTNECis6MTBCNjMwMDBFOTUzMzA5RTYyNUVFQjRCMTg0RkVDMkI0RjdFQ0Y2OTg3Cis6MTBCNjQwMDA4MjlCREREN0Y1NzZBNzYzNUNCNDc3OEE4ODZGMjQ3OTBGCis6MTBCNjUwMDA4M0JEMDJCNENCRUJBRTUyQjA3RDQ0MThCMDdEREUyQTgwCis6MTBCNjYwMDBGNTNBODAyQkI0MDdGRTlGNzc5OUVEODM2RTA1RTFCMDI0Cis6MTBCNjcwMDA5NURCQzlFREI2NjBGMzE0REE0RkZCMjZCRjAwRkI2MTIyCis6MTBCNjgwMDBENEJCQ0VDREY0OTlCMzUzMENGRjREMDRGRDM3Qjk0NTZGCis6MTBCNjkwMDBBQTEzREU1QkM5MEQyMTcxMTM2Rjc5QzQwMUYwREEwREI1Cis6MTBCNkEwMDBGNTk4N0YxM0UxRDAzRUYyRTkyRTM4M0ZERTAwQjIwMTdCCis6MTBCNkIwMDBGNkQ5QzZGMDY5QzMyNjAxRkQ5OTE0N0VEOTIwMkZGRTY0Cis6MTBCNkMwMDA3NDlGRkQyQkIwOEVCQzE2NDEwNURCOUJBNjQ5RTdCREUwCis6MTBCNkQwMDBEQUUzNjBGMkE2RjU3RUI0MDNDMTNEMEFGREU2RUVGQ0I2Cis6MTBCNkUwMDAyRENFQ0I5QjYyQkQzRkY0MzBGQ0Y4RDMyNUYwMjNDN0IxCis6MTBCNkYwMDBDREZDMzZCOUY1REREQzRFRUFDMkY3MTYyMzAwMjdDOENCCis6MTBCNzAwMDA4N0NBRDkzQjg3NzI0ODMzQzdBMUM0RTk4N0Q5NjE3NDE2Cis6MTBCNzEwMDA5RDE4MDc1QTMzNDE4OTgyMUY0MDZDNjlDNzc3ODVFN0I2Cis6MTBCNzIwMDA0NkVDRTQ1QUJBQkU1NkExM0IwNEY0QTI4RjE3Rjk3QjRCCis6MTBCNzMwMDA1RUExQjcwMDRFOUJCNzBFQzY3OEI2NzU2MjI4MTdGRDlFCis6MTBCNzQwMDAzQkZGQUFFMEY5RDhEMUQwODcwRkMwQkJCQ0JCMjYyOEVECis6MTBCNzUwMDA0ODE3NDc0M0VDOUVFQzQzQUIwQURBQzEwRUY3RDY1N0M1Cis6MTBCNzYwMDBFMTdCQzE1MTU1NDFDRUQyNTg0RTVFODA3OEQyQzY1NTRDCis6MTBCNzcwMDBBMjJBRDBGQTkxNkFFMzNFODJFQTAyQkMxODJCN0Q3NEI5Cis6MTBCNzgwMDA1RDA5OUM5RjBEMTFDMTk3NDRDRTBBRUM5RDkxQjVBQjBDCis6MTBCNzkwMDBBQTU0RDhEN0I1NkFBNjYwQjY1Qjc0OEUwNzdGRjQ1N0YzCis6MTBCN0EwMDBFQjZFQkFCRUMwQkREQjU0ODgwMURGMTJDQkI4MDJGQzIxCis6MTBCN0IwMDA4NTdBOEJBMkIxNzc4QkQ5RkIyNDE5N0M1RjMyQkFDNTBECis6MTBCN0MwMDBBRUY5M0VDQzdCMTY1MDEzNzlDQjY0RTZBN0ZDREVGNUQwCis6MTBCN0QwMDA2MUU2NUY4NDMzQzkwQUY0MkZGMkJGMDBFRTZCMjZDRjE3Cis6MTBCN0UwMDA2RDE4RTVDMkNDRjYzNUYzQjEzRUY0OTM0NUZCQzkyODlDCis6MTBCN0YwMDAxN0JCMkE2OEJGQkJGREExNUQyODRGQTYzQTEwNEU0NDc3Cis6MTBCODAwMDBFRTY5MDMzODQ1QTc2NjA3RTFEREU0NkQxMzg3QkYwNEUxCis6MTBCODEwMDA0RjU0NjU5Q0U4OUQwNTcyMzQzQUNDRjU3QTNCRjBBOTBCCis6MTBCODIwMDBCNThBMDY3NDlFQjFFQUNDMkRGMEREMUZGQ0ZFOUQ5MDFBCis6MTBCODMwMDA2NjM0RkRGRTFFOTAwN0ZFOUVCRjM0RTBGN0U5OEFDNTIwCis6MTBCODQwMDBCRjk3RjFDNkY5Q0ZBMTNDQTM1QUIxRjgwOTNGRjM1NzBFCis6MTBCODUwMDAzRkVDQTZGMEQ5NTUxQTg5RDQ2OEVDN0IyODJCQkU4RTE0Cis6MTBCODYwMDAwM0FCQkJBN0MzRkJEOTY3NkYxMDgzQkI3OTM5QUU2QjQyCis6MTBCODcwMDBCQjFBRERDMEUwNTYwRTcyQ0Q4MERCM0E1MUVCODRGNzg3Cis6MTBCODgwMDA5REY1OTkwRUM0OEYyMkQyOERGQzZBMDg5QzIyMTdDNkEyCis6MTBCODkwMDBGNzI1RTM4REY1Q0IyMTRFMjI3MTNFQ0ZCODg1QkU3N0RCCis6MTBCOEEwMDA2MUUwOUQ0QThDRDdBNzcyNEMxOTMyQzUwNTc4RkQ3OEE2Cis6MTBCOEIwMDA1OTc3MDBGNEY4NERGRUU0RjEwOTlGN0E1ODdCN0I4QUIyCis6MTBCOEMwMDBGQkVFMUY3OTE4M0UwMDRCNkMyQkMzMzQzNDFBNTIwRjE5Cis6MTBCOEQwMDBEMUQzMjBDRDcxODQyMDNFRjY3MTUxRkIyM0UyRjkzNjlECis6MTBCOEUwMDA0OTgzRkQ4MUZBMzZCQTdGNDc1RTc4MTdGRDgzNDcyMjg4Cis6MTBCOEYwMDBCRkM1RjQ2NTRGMDk3QkQ3OEYxMjVDMTZCQ0IzNUI3RTY2Cis6MTBCOTAwMDAwQUNGNDczNkFCMEM0NzZBNUIxOEJGQTgwREY0MzhFMDg2Cis6MTBCOTEwMDBCQ0EyQjY5NEE4QkIzOUJFRTkwNjlDQzFERkM1RTU1NUZCCis6MTBCOTIwMDBDRDREMENBRTk5QTUwNENGNUJDMTI3MDZFRjlFNjU0MUI2Cis6MTBCOTMwMDAzRDBBQkZDQzk2RDVDQjcxMUY0OUI3NUU0OEVCNkQ4NkVCCis6MTBCOTQwMDA3RTYxN0Y5QUQ4RkQxNDQyN0ExQzQ4QkYxMTA5Q0YxQjMzCis6MTBCOTUwMDAyOUJERkYwNkNFMTM2QjVBMDdFMzc5M0I1Qzc3ODdGRTYwCis6MTBCOTYwMDBEMkY5QjhFOUJDQkY3NkRBMEZGOEZGQ0VCNjQ4NjQzNzMzCis6MTBCOTcwMDBGMkI3NkU3ODYzOTg2OEFCMjgyRTIzN0VGNjU2OTZEMDgxCis6MTBCOTgwMDA3RUI1NzI1NURENjBFMDgxQzFDNzI4NjlDQ0EzRjIwMkEzCis6MTBCOTkwMDBFMDM2NEZENzk3MDNGRTlENzJBODJGQzAzQ0RDREJFRDRECis6MTBCOUEwMDAxQUFDN0ZERUY2NjdFRTA2QkRDNTFERTg2OTAxRkU1MEU0Cis6MTBCOUIwMDAzQjgxQ0QzN0JEOTU3RTQ3RkQ0NkZCMERENEFGNkRCNUMwCis6MTBCOUMwMDA2QjZDM0MwRUJGNzI4RTY3MUMwRUI3RjM3OURGQkU5M0IzCis6MTBCOUQwMDBDRERCMzUyQzFBMDFGQ0FDNUQ0NUUxMEE2NTYxODZGN0NCCis6MTBCOUUwMDBFMEQyQkMyODIyNUQ5RDgwRjU3QkY1MkNFQzc3RDBFQzc1Cis6MTBCOUYwMDAwNEJBNDhDMDNGNjM1RDM1N0M1RDM1QUJEOEJBMDhBNzUzCis6MTBCQTAwMDAyNzNBQUQyRUU4QjdBNjlDQUQ3MzFFNjFFRDQ1Rjg0RTAyCis6MTBCQTEwMDBGQkJGOURBRkE3NDY3RjFBRDNEQjVCRUM5NkZFNzc5NTA1Cis6MTBCQTIwMDBFQ0U5ODZGOUU0OTcyQTlBODA3MDY2RUY2REU2RjI3NTg0Cis6MTBCQTMwMDBFNTM2QjFGMTcyNEI5RjQ2Nzg5MTdBRDM3Q0QxMkY2QTZCCis6MTBCQTQwMDBDQTUzQkEzQUZCM0MyNTJDNzhDQzIyRDc4MUM4NzRFQTc5Cis6MTBCQTUwMDBCQjBBOUVBMzE0NkRCN0FFRUJFQ0ZBMTEwRkI3ODJGRkQxCis6MTBCQTYwMDBGMzNFMDVDRjJCMUUxNzgzNkZFNUExMURBQTY4OENGRjNGCis6MTBCQTcwMDAwNDdGM0IwM0Y4RjRFRDRENzhCRkVBNDAyNTgzRkZEOUZFCis6MTBCQTgwMDBBRjkyMjhFMDQzRjE4OUVBNzQ4MDc3RjE4OTMwNEZFQjc3Cis6MTBCQTkwMDBGMDFDOUIwMjQ0RThFMzdCNzQ3RUQ0NzQ2QTExODA1RkRGCis6MTBCQUEwMDBDNjBBN0ZCODAwRjgwMERENjdEMDA3ODc5OUU3NERFNzQxCis6MTBCQUIwMDA5N0QxOTI1NTA1NzE0ODk5MTNEMkFCMTQ3QzQyMzhBMUE1Cis6MTBCQUMwMDBGQ0M0OEU1OUYwMUU2RUU2QjExRDc3QzIzODQzODg2OUZBCis6MTBCQUQwMDAzREI0RkM0QTZGMjFCQjlGNzU4Qzk2NDJCREZBMzNGNzhCCis6MTBCQUUwMDBDMjdFQjRGMjc3RUQ4QjYxNjZFOTk4MUU4MzM0ODNEMjBGCis6MTBCQUYwMDBGN0M2NzQ5OEE3NENBNjk0QzVGOUMxREVGQjJBQzYwMjA2Cis6MTBCQjAwMDA1RkMxQkIyNTY1OTg3NjkxQjJGRTdDQzM1NDdGMjRBRjlDCis6MTBCQjEwMDBBRjBCNDlFQTU1NzgzNThCNURCRUY3QkU2OTIzQzE3RTEwCis6MTBCQjIwMDBERjBDN0E2MjFBQkMwQkE4N0UwNEYxMzE3QTUwNDRCODVCCis6MTBCQjMwMDA2RkI2NzUzOTRBMzNFMURENzE5MTgwRkVCMkE1RTRGNzQ1Cis6MTBCQjQwMDAyMkQwRERFNjgzMjQwOEY4OTE1MUZEMUY3NkYzM0VENjFFCis6MTBCQjUwMDA3OUZDQjg2RTU5MjExQjgxRkU4RjhFM0MzMzFERjYyOTZFCis6MTBCQjYwMDA3QTg0RUE5REI0N0VENUFGM0MzQkUwM0U3MUZCMUY1ODIyCis6MTBCQjcwMDBGQzQ5RkJGMzc1MjhCRjU3RTYyQTQ5REY3RDI2OTdEMDlECis6MTBCQjgwMDAxMzEzRUJBNzE3Q0Y0MjNGNUVERUY2QURGOEJFNkNFREE4Cis6MTBCQjkwMDA3NDM5NzgyREFEOURCOUJEQjIxMkY0MThBRDlBNjJENzQzCis6MTBCQkEwMDA2MDNBRUY5RDYzNTcwMzExNkEzM0Q4Nzk5NTM2OUQ3RENFCis6MTBCQkIwMDBEN0E2QjA3NDYzQzM4MjcxNjBCNzQ3M0E2NDY3MTE5REJBCis6MTBCQkMwMDBFRkE4RjVFQ0ZEQkU4REE1MUYzQUMyNTQyRjJEQUY3QzFBCis6MTBCQkQwMDBDMkYxNTVGQUZENzQzOTk1ODJGNEZCRTlDOTFGM0FFMUM3Cis6MTBCQkUwMDA3Q0U2QTFGMkFBMEM4MEU3QzExNkFCNUU0N0UwNzEzNjk1Cis6MTBCQkYwMDA2QTA3OERCNjQ3NDI1RTNBQUZENkRGMTE4NEE3NjRFRjdECis6MTBCQzAwMDA2QUFCQTE3OUU5MTkwRjY4MzhGREVDOUJGNUFERURCMzhFCis6MTBCQzEwMDAwMTRGRTc5NTYwNzg3MkZGN0RFN0YyNjI2RTdERUZGNDg5Cis6MTBCQzIwMDAwMkEwNUI5REIwNzNENEM4RkRDODk0NkZFNzJDMjM1RjVFCis6MTBCQzMwMDBFRjQ2QTZFM0REQ0VFQzkzODgxQzNBMEU3QzM5NTIxQTBGCis6MTBCQzQwMDA1NkEwODlDMUNGNUE4QjZCRjYwMTNGNTNCOERFNEZFQTNECis6MTBCQzUwMDAxNkUwRkQ0OEE0N0YwOUY0QTFERUNBNjQ3NkQzQjdEREZGCis6MTBCQzYwMDAyRUM0QUJCMzNCNkY3QzE1RkNEM0YzRUE5OUJFOUZCN0YwCis6MTBCQzcwMDBGMzIzMDFGNzgzRUE3RDQzNjhGRjc5RTVGOEU0MjU5OTJBCis6MTBCQzgwMDBCNzJBRTIxODBERkI1MzI0MTI0RDgzRjk3NDEyQjAxMzM2Cis6MTBCQzkwMDAyMjU0RkU5OEUxNjBGNEZCRjdCNkRGRTFCMUUzM0FCRTZGCis6MTBCQ0EwMDAwREM2RjNGOEY4N0EzQzdDM0RCOUMxREVDQTY0RjFCMzQ1Cis6MTBCQ0IwMDBERkUyRTM3RUU3QzE4RjhFNEMwNEY4QUY2MjI2NTI1RTZFCis6MTBCQ0MwMDBFNEE0RTAzMENEMjM0RkJGQkM3OURDMDJGREQxNzkzQzQ4Cis6MTBCQ0QwMDBFOTYxRjdBN0JERTUzRDc4RUYyODkxQkY4MzNBMEY3NDdFCis6MTBCQ0UwMDBCQkNCN0Q2MTJDQjNFRkFERkNCNDVGOUVFMzU1RTJGN0I3Cis6MTBCQ0YwMDBEQzA0N0UzNURBREU3OTNERUVFRjAxRjZCRTNBMjE5NEMyCis6MTBCRDAwMDA2RTFERjhBQ0E4QzZERTlEOEQxQUVGQTBENzQxQkQ1MUJGCis6MTBCRDEwMDA1RThGMEE3OEQwM0FGMkY3NjUwMDlGNEQ1QzVGQjhCRDQwCis6MTBCRDIwMDA5NEEwQkQ3QTdCNEUzN0VBMEI3MzlCQjhCRTIwMDc5QjZECis6MTBCRDMwMDA4MUM5QkE3N0ZBQzkwNjkzRkU4MDJFMkM3MDJEMzU3MTExCis6MTBCRDQwMDA3REMxOTBGRjVDNkVENzA2QkE1QjUwQUU4MjdFNjA5MjdBCis6MTBCRDUwMDBBQjM1M0E5M0FCNzkwMTI2RDc2QjVCRTgzODFBNDdFNkU3Cis6MTBCRDYwMDAwQUIzNUVDMkU0QjhCNjlERUIwRjVDMEU2N0YwNzEzM0E4Cis6MTBCRDcwMDA1Qjk4QkNDQTAwM0RDMjA3RTEwNzNBQ0E2NTNDQ0JDQjIxCis6MTBCRDgwMDA4QUVCMkQ4MzRBOTlCQ0NDNjg3RDFDRTVEQTFGQzBFOTlCCis6MTBCRDkwMDAzMjA4RjgwNjkzOTdDMzVFN0E0NTA3MzAwNUU4RTczNjIwCis6MTBCREEwMDBDQUE3OEZGMUYyODA0QUY1QjNGNEI4N0VCNjRFRTRFNzQ1Cis6MTBCREIwMDA0Qzg0RTk4NzE4NUI0RkU3Nzk5OEQ3MzdCRUVGRTFGM0ZBCis6MTBCREMwMDA3QkZDNThGQTU3ODBCRkVFOEQxNDhDOTU0Qzc0OEI1RUJCCis6MTBCREQwMDA0RjlBQ0YyRDY3RTdGNEI5RjVFQzlDREExQjlDQkY0RjY3Cis6MTBCREUwMDAzMjlEM0Y2Q0Y1NzA3QkQzQzBBQkZBQUUwMEY0OEJGNzlECis6MTBCREYwMDAxRDkxOEZCM0Y3QUFENjUzN0QwOUZENEZEQ0JFOUFFQjk4Cis6MTBCRTAwMDBFNjdFMEQ4RTNGQTlFNDg5QzE4N0JDMjRFNDJCQTVGMDEyCis6MTBCRTEwMDAzRDFEREQ4N0ZDNUFBN0Y2MTJBQ0VENzRBNDMxN0IyMUUxCis6MTBCRTIwMDBEMDdCRTQ4NjcyOThGRkU2ODk3RkM1Qjg4QkJDMTRGNjk4Cis6MTBCRTMwMDBBMkMzRUIzMEUwRjA4NUY4QkE3N0ZBMkJDQzBFRUQxNjAyCis6MTBCRTQwMDA5M0RFOTM5OUNBRkQwRjlEMzI3MTAzM0M5RDExRjZERTdFCis6MTBCRTUwMDBBMTczODI5MkI0RkUwNDJGRTM5QjE5NUU3NjhGNjhGMzgwCis6MTBCRTYwMDBDNDdENzhCRjMxQTU3Qzk2ODkyRTI1OTFBNzg2QkM2REFGCis6MTBCRTcwMDA4NTdEOUU0NEM4Q0NENjVCOUI3NUI0RDNBM0Q1MTJGMjA2Cis6MTBCRTgwMDA1Nzc2MEYzMEMyN0Y3NzQ2MkY1MUQwNkZEODZBOEIzOEU0Cis6MTBCRTkwMDA2MDNGQjY5NEYzN0Q1NTFERUQ3MDNGRkQwQkVGMEI4NUI0Cis6MTBCRUEwMDAwN0VDRjNGQTkwMTgxNUYyNjE5RkEzRUE2OEU2RDdDMTkwCis6MTBCRUIwMDBERkVEMzk0QkVENzdGMzM5QzUyQ0FGQzhFMUE0ODkxMDFDCis6MTBCRUMwMDA5Rjk4RDdDMkYwNkJGMzQ0MDVFN0IxNjE2QzU2QkI5NDAxCis6MTBCRUQwMDA2RkU2QkYwMkU3OUYwQzRFMUIyNjFFNDdGQ0JBRENGOTNCCis6MTBCRUUwMDBDREFGQkY2N0QyNjlEMzM5RTI5OTA3MUUyOTAwMzhDN0ExCis6MTBCRUYwMDBERjZGMDkwRDc4N0Y2MTdFRkQ0QjkzRjYyNDM5MUZFOEQzCis6MTBCRjAwMDAyQjA3M0JDQTAzNzY2MEY0OUJFNjczOTY4NTVFNjY2N0YzCis6MTBCRjEwMDAyREYxMUFFRjMzMzNGRTA2RkNENTg2QzY0NTM0MUJGQ0UzCis6MTBCRjIwMDA0QjA3QUU4RUZBRDA3RkJGOTg5REQ3REVDMUNGNkJERkI3Cis6MTBCRjMwMDBERDczMjNCRUJGMzAxQUVFRDQyNkQ5RjdGMzBERDZGNzQyCis6MTBCRjQwMDAxN0NFRUY3RDI0OUJGOTM1QTIxNkZERUE4RTdEM0YxOUIxCis6MTBCRjUwMDBDNURFOUZEMUY5RUY3MjEwMkRCMzgyQkRBMzhENzJGQUE5Cis6MTBCRjYwMDA3ODUwQjc0QkYxRjdEMTE0Rjg1RDBDRjBCNzAzMDUxNzEzCis6MTBCRjcwMDBDMjJCQTA5RDk4N0E4MDdFMEJFMUY3ODU3QTMxNTU0MURFCis6MTBCRjgwMDAxQzE1ODI5RDE0QzQzNDkzNTQ2MzlBNDVFQTMwMEQ5MDc1Cis6MTBCRjkwMDAwOEE2RDlBNDEzRDMxQ0IwNzMwQjQxMkVGNDYyQUExMUM2Cis6MTBCRkEwMDA1NTI0MjZCRTVGNDA4Mjk4MkYyMkQ1OThDQUIwNkYxOUJCCis6MTBCRkIwMDBGMTczMDlCOUMzODFGMTE3NzA3RTAxNzQ2RjlDNTMxODM2Cis6MTBCRkMwMDBFN0ZCMzc3QjZCMUVGMDI2MzlBRkI4QzcxQkRBQzFCRTYzCis6MTBCRkQwMDA3NzIxREY5RUNCNTlGODg5MUY4REVBODRGQjNEMkIzNkY0Cis6MTBCRkUwMDBCMUZCMjUwNjVGNDdCQjg2RjZGRkMzNzQyNjA3RjQ2REQ5Cis6MTBCRkYwMDAwMkYyQUYzNUVFOTlENzIwMUM1QjZERUY5QkNGMUI4ODBCCis6MTBDMDAwMDBDMzUxMDRCRjNGNjNGNDNCOTdGQjE3RTY3MkY5MDdFRTk5Cis6MTBDMDEwMDA2RDc2RkYyRTg4Rjc3RkU2ODI5RkMxNTQ0RUZBQ0FEOTBCCis6MTBDMDIwMDBGRDZCQTMxRkQxM0Q3OUY4NDBFNzdCQTZGNjE4OEY1QzI2Cis6MTBDMDMwMDA5M0EwRkY1RjUyNkUyN0U0RTcyNUI2RkYxQjlENTA1Njg1Cis6MTBDMDQwMDBEQzBGRjdDMzZCQjQ1Qzc2Q0VDNEU0MzY0NTI0MEREQjVECis6MTBDMDUwMDBCNUQ4NEZBMjFEMTY5OTFBMzJDM0U1MjU4RUZGODYzQzJFCis6MTBDMDYwMDA5OTk3RTBENzRGNENFN0M5OUMyRTEyRkFBMTkyQ0YwRkI3Cis6MTBDMDcwMDBGNzY2RjAwRDE0MTM1RDFCRUZFODFBQkZEMzc1NDcyODYwCis6MTBDMDgwMDBBQzBDNjFDRDAyQjA4RjJBOUY3Nzg0RUNBQzFBNDJEM0ZFCis6MTBDMDkwMDA3MzkwMzdGOUYzN0ZFNzBCQkZFRDM1RDE4OTFBQUExM0Y3Cis6MTBDMEEwMDBDREVGMzRDREU3NzQzODU1NkFBRDA0RkU3NjM2NEM4MjU4Cis6MTBDMEIwMDA2MDNGREM0MUVBMzY4MzNFNDY1RTkxOTBCRkMxM0Q2Q0Y1Cis6MTBDMEMwMDBGOEZEQTA2MTcwQTA5MThFNzk1REExRTkwNzBERUM1RThECis6MTBDMEQwMDBDRTE5Nzg0NzY5MDRCQzdGQ0RERTUxN0EwRkRFNERBMkMwCis6MTBDMEUwMDBFOUU4QjZCQjY3MDIxRUJDMEJFRjI3QzFGRDVCNEVGRjQ0Cis6MTBDMEYwMDBDNkI4QTMzQkRENzM0MEVFOEZFRUJDQkExNkVBOERFRUY4Cis6MTBDMTAwMDBCMEUzRUY0NTk1MUM1QzVGMEQ3RTIxNzhDRkM1NDVDNzM4Cis6MTBDMTEwMDBDOUExRTMzOUQyODE4RjEwOTRCN0VGQjVCQUEyNkJFODA5Cis6MTBDMTIwMDAzQ0RGNkI5MzkwMkY3RjUyMkFFMkJCMjNGMDZDQTZDNEI2Cis6MTBDMTMwMDBFNzk3OTYwRUZERkNGQkFEQTA4N0JDQ0JGOTg4RjE3RTlFCis6MTBDMTQwMDBFNDdCOTUxQURBQzdCRjNDQjA0RTgwN0IwOUVGQ0REMUI2Cis6MTBDMTUwMDA3MERERUYwREU5Q0M0RDA3QjlFNDYzRjFFNTQ1RkJFRDhBCis6MTBDMTYwMDA1RDA1NzQxRTBCMUZGQjQzNDEwREYwQkY4MkM4QzI2NDA2Cis6MTBDMTcwMDBFN0NDQjkzRTI2NEZERTdCOEE2MDNDREM3QjRFRkVGQjgzCis6MTBDMTgwMDA0ODhFNEU5RkQ5Q0YxQUYwMDkxNkJFRjU5RTk3RkZDRTY2Cis6MTBDMTkwMDA1MkNFMjVFQUYxRjg3MkUyRTlGNDMxQkFFRkY0QzE3OTRFCis6MTBDMUEwMDBENEZERUUxRkUxRkRCNTMzNEZCMTczOEE1RjNFNTA5QjY2Cis6MTBDMUIwMDAwQkZFQTgyMjlGQzZDRUJEMEYzQzg5NzFFM0IwMEVCMDI2Cis6MTBDMUMwMDBBM0U5RkMzNDk4REZGREVFQjdERTA1RkYwMzZEODdGN0NBCis6MTBDMUQwMDAzMzhDNzY2NzBFRDRCMkZBNkRCNEJFMEZFMTRFN0M2NTM3Cis6MTBDMUUwMDA4MDBGMENFRTY0M0ZFMzEzODZGRUI4Mjg5QTg1QkZERjBDCis6MTBDMUYwMDAxMDJGMTdCMTFDQTZFOEE0RjAxRkJERkYwNjNDRDdBQTVDCis6MTBDMjAwMDBGMEE1MzM3QzU2M0I0N0NEQzJGOTQ3NzI2MTFEMDdBRTlFCis6MTBDMjEwMDAwRUU3ODIxRkVGOENGMTdCNTI3MjI0MTdFMDcwQjMzNzY4Cis6MTBDMjIwMDA1Q0UxMzNBREZGRkNDOTY3OTBCRjk3ODg3NTZGREYwQjhBCis6MTBDMjMwMDA3OEY5MDRGQjNEOTNCQkRGRDgyQTlBRjlDNzU0MUZEMzgyCis6MTBDMjQwMDA3QkVFNzcyRkY1QzE3OUQ0OTlCRTc3NzUyMjJDREVFNzg2Cis6MTBDMjUwMDAzMDdCRDc3NTExQTdCRDMzRURENDdFQTJGMDM4QkZGRjc4Cis6MTBDMjYwMDA3QjU4N0VBNkVGREQ5QjRFOEMyNzNCQkZGRkI5NzQ0ODAxCis6MTBDMjcwMDA2Qjc4M0MzRjg5REU4OEY0NDVFMUQyRTI0ODIyQUZGQTkwCis6MTBDMjgwMDBFRTQ1NDVEOTdEQjcwQjAyN0ZDRkY0NDEwMzZFNzVDQUU5Cis6MTBDMjkwMDAyQ0NCNzkxNUEzRUY5QzlERjlDNzUwNUY4RTI2QkYyNzQ1Cis6MTBDMkEwMDA5NzI4RUYxM0RGQTdCREQ0M0RFMDUzOUM0RTRGRjM3N0EzCis6MTBDMkIwMDA0REVFRjE4NjZCN0M0OUU0NDhDREM2MjVCOTAwRTcxQUZFCis6MTBDMkMwMDBCODUzODc3MTBFOTVENzgyQkQ4REY3NEREOEZCQjQ1REZECis6MTBDMkQwMDAwODI3RTNGRDU5RkRBQTZCMjFDRUYxOEM5RkU1QkZCQjdBCis6MTBDMkUwMDBCOTdBOURDRUUxQzhFQTRGNjNFREYzNTlGOTdENTA0RTFFCis6MTBDMkYwMDBFQkZGREU1QkJEOUM4RDRGMDRGNkZCNDgzNjNGRkNDRTZBCis6MTBDMzAwMDA4NUMxRkY1MkFGREZGQTNCMTcxREMwOTNDNzYzN0ZGN0FDCis6MTBDMzEwMDA2MDdGMzJFRDZGRjQzRkRFOUZDMTZGRkVFMTdFMUNGRjU4Cis6MTBDMzIwMDBCNUZEMTg3QzE4RTgxMjQyRjY0ODMwMzhFQUJGMDI3RUE0Cis6MTBDMzMwMDA3RjZGN0IzMjNCQ0ZDMkNGM0Y3REEwQjAxOUNFODEzRTE1Cis6MTBDMzQwMDAwOUIwNzdBMkVDQURBQjA5QzhBNURCQjc2RjRERkEzQkRFCis6MTBDMzUwMDA3OTdENzkxRTRGQTIxNDUyM0EzM0QxRjNGMzlDQUYzRTRDCis6MTBDMzYwMDBFRjhCOUYwN0MwRjlDQzcwNDJGODdCMTc1NDU1QzlDMkI4Cis6MTBDMzcwMDA5MDFCQjRGRjQ2RjA3N0UzNEI0ODA0RjVBQjUxQTQxMzkwCis6MTBDMzgwMDBEMzUyRDI4REU5MThEMjhCMjkxRTkzMTY4MkFCMkY4OEY3Cis6MTBDMzkwMDBFOTlGMkI3QjJBNjBGMThCMURFMTg3MjA1NEQ3RUUwOEEzCis6MTBDM0EwMDAxRjA3N0NGQTYwNThGODExNzgwNzc4OEQ3QkU5MjQ5ODhDCis6MTBDM0IwMDBGRkFGN0RBQUYxN0JBMjI0RTFGN0Q5RTJCRjJCQTI4MUQ2Cis6MTBDM0MwMDA1RTMzMjMzMDkwNUU0MzU0RjlGREJFRjg4RDAyN0M0NzA2Cis6MTBDM0QwMDBGODY1MUZBRTJGRDVFRkNEMjVGQzhFMjVCRjQ3NkNDMDZECis6MTBDM0UwMDA2MTA5RTlDNDM4ODg1RkVFNUNGMTAyQkNFQkIzNzBCRjUxCis6MTBDM0YwMDAxN0U1QzFGMDlENERGODdCNjIwQjQ5NzcxNkRDMkYxREM4Cis6MTBDNDAwMDBDRURGOTMyMDZERUMxRDBGRTM5RDg4OTE2RDc2Q0IzQkM1Cis6MTBDNDEwMDAxNjRCMTI3RUNGNjgxMUZGRkRCMTQ1ODlCRkVGQzVFRjA2Cis6MTBDNDIwMDA2RjZFODQwRjQ5RTIwODEyRUY3RkY2RkE1MkJDRTc1QUFBCis6MTBDNDMwMDA5QUZDNzc2NTEyRUY3RkVFRUYxNDMxQkU2NzA1QzQwQkVGCis6MTBDNDQwMDAwOTcxQkUzNzcyNEY5REREOEE1RjlERDcxNDk5REU4M0Q3Cis6MTBDNDUwMDA2QTE0ODJDQzlFRjZCQTQyN0I4NUZFRTM4QzUzMTk3RTI5Cis6MTBDNDYwMDAxRDEwODRBNDcxNjRERjRDMzNFQzlCMjY3MjNERURBNzU0Cis6MTBDNDcwMDA3MUIxQUM4MkJERDkxODc1RTEzOTY4QTNDQUVDQzJBMTBCCis6MTBDNDgwMDBERTJBMDdEOEU5QzQyRkFBNzAzRjY1OUEzNDE5RTNDQjk2Cis6MTBDNDkwMDA5NTI1RjIzODM4RjczQ0I2N0I2MTM3REM1RjY4MENDODBECis6MTBDNEEwMDBFOEE3MURFQTY3RTdBMDY0ODg4OEVGMDMzNEE5NEZGODdFCis6MTBDNEIwMDBFN0MyM0U3OUQ4MzlFMzMwOTVFMEVGQTExRTY5NUYyOUU0Cis6MTBDNEMwMDA0MkJFOTE5QTJEODM2MTFDMjFEQzhERjc2RTg2Qzg4NDUzCis6MTBDNEQwMDA5RkJGQ0UxODlCODVFRjk4RjEzOEE1NTZCQzdGM0M2NTcxCis6MTBDNEUwMDBDOTY5MjdDOEY1M0NCRUVGNTU2OUY5Qjg0RTk5RUZFNzIxCis6MTBDNEYwMDBBRUZBNTM3RUMwRDNFN0RCOUI1RjlFNDZGQkIzNDU2NTM4Cis6MTBDNTAwMDA4QzZCMkRGOUJDRjFGNTY5NzRCQ0RFNzY4NTk4REZFM0EwCis6MTBDNTEwMDBDQzVEMjU1QkVFQ0ZFNkRDNjVDRDJCMDlGNzg4NjU2MjQ3Cis6MTBDNTIwMDAyQUE3Rjk3MjE4MUZFMTQ4RjU0NDczNUM1NTY2ODgzOUVCCis6MTBDNTMwMDAwQjU1MEZERTBGMEVBNTA5NEMyRkU2RjkwQUM4NTM5MEQ0Cis6MTBDNTQwMDA3NEQ4MjI1NTJFM0FDRjhFMzcwNUY0M0IxQzZEOUY5RjMxCis6MTBDNTUwMDA4NzcxRkEzRjA5RTcwMTdFMUJGODkwQjg3RjRBOUE2NjE3Cis6MTBDNTYwMDBCQ0VGRTFFNEY3ODM5RDcwNTg5Nzg4M0Y0RDBEQTQxODA4Cis6MTBDNTcwMDBGQ0QxOEVFODMxRDcxNUIwOEYyNzZDRjg5RUQ0NUFBRTE3Cis6MTBDNTgwMDA3RkNCMUUxNkZGNkVFMDRCNjJCQTM2MDFFRkQ2N0U3RTgxCis6MTBDNTkwMDAyM0UyNUQyRkM1QkJERDAzRTA5REFDNkFBODI3RDg3MkZFCis6MTBDNUEwMDA0ODEwQzhDMzk2RDk5REFERDI3NjU3M0NBMzA0M0QxNDFDCis6MTBDNUIwMDA2NEQzN0U1QzlBMDZGQUNDMTVDRkREQ0NERUY1QTNGMDExCis6MTBDNUMwMDBDMjc3MjFFQjk1NjJCMEZCRURGNTk5QzU3MjA2RDRGMzA1Cis6MTBDNUQwMDAyMDNFN0VFODYxRTczRjcyQkQzQjA4RTU4REVEMTUwMTI5Cis6MTBDNUUwMDBDRDg0RDdDRDBENkFCMTVDMENFRkUzMzg4QUUxNzc5NjQ0Cis6MTBDNUYwMDA5QTUzRkNERUYzMzBCRjU4MERGRTI1ODVEQkZGNzdBNjhFCis6MTBDNjAwMDBCMUY5REU5OUU2QzY3NDQ1MUFGMzVCM0MyOEVCQjM2MERBCis6MTBDNjEwMDBGRTBGNTJGQzgxNzg4MTIzNzczMUZDNUQzMUM0ODFGN0I0Cis6MTBDNjIwMDA5RTU3M0M1RjM4NzhBMDM4QTA3RDBEODE2MjgwREJDRUJDCis6MTBDNjMwMDBCQjZBRDBFRjUxQjlGQzk4MTNERTA1NUJFMTc1QTg4MEE5Cis6MTBDNjQwMDA4RjkyNkZGOEZEOTMwMURGNUZCMEUxQkRBRjQ2NkY4NTVDCis6MTBDNjUwMDAzNkQ3RDQ5RkU0OUI4MDdFMjU0OUQ0QjNDMTI4NkFEOUJDCis6MTBDNjYwMDBGMkQ2QjVGMjQ0QzAxNzdEMDc0OEEyNDhEQUYxNkI2NUVGCis6MTBDNjcwMDBDQTVGM0FCQzdBQjY0MENCREJEMjVFNjBFNTgzRjQxRDdDCis6MTBDNjgwMDAwMjJEOEZBNkZEODZFNTg3RTlEOUYwNEIyMjFENjkyRjgzCis6MTBDNjkwMDBCMzdDQjFCRTAzRjI5RDY5QkY2N0VENDFCN0EwN0FDQzEwCis6MTBDNkEwMDBBMUI0RDdBRjA1M0RBN0QxMTY5QzBERkU5RDFGRDFGOUIyCis6MTBDNkIwMDA5N0QyRjk3N0YyRjRBNzFDNEU0NkY5MTNGMDlEQzJGQjBFCis6MTBDNkMwMDAyMDRGMTNDQjlGRTZFRDBFQTUyOEZGMjkyRjNGOUNBMkZDCis6MTBDNkQwMDBGRjlGRjM3NjVEMjlEQTFGRTVFRDhFQTU2ODdGOUNCNzk1Cis6MTBDNkUwMDAzQjkxQTJGQzA1NUVGRTYyOEFGRTdGQzNEQjc1QTc2OEY0Cis6MTBDNkYwMDBGRjMyNkZGNzRBOEFGNkJGRTdFRDVFNEI1MUZFM0EyRkU1Cis6MTBDNzAwMDA3RjIzQTFGRkI3NzhGRDFFRkUzREM3REJGMjNBQkMxQkJECis6MTBDNzEwMDA5NkQzQ0U1RTAyMkRGMUI2QTBGRUJFQjNBRTFDRjFCRjI1Cis6MTBDNzIwMDA3MTNDRDMzMzBDN0NDRjgxNzg0RDlBQkY1MjY1N0VDRDVFCis6MTBDNzMwMDAyQjU1QzZFNzVGRTE3ODVEQjlCQzY4MEJFMEREOEE3RjA5Cis6MTBDNzQwMDA5MzUwOUU1MjM5ODJCRkU3QUIyRjY3NzEyRjJCOUU2N0E0Cis6MTBDNzUwMDBGNzQxNTYyQzk3RjFGNzgwMEM3QzM0REExQkYzREZDNUQ4Cis6MTBDNzYwMDBFN0Q3NjRDMDMxQUQ4MDlGQjcwNDhBNjc5OEUzM0Q1NTMxCis6MTBDNzcwMDA2QkRFNDFFOTA5NDI3NjlBMzI5OTdDMjk1OTVFRTUxOEM3Cis6MTBDNzgwMDAwMUYyODNDQTE3RTA5QjZCM0Q0QTE3RENBMzVGQUJDQTdCCis6MTBDNzkwMDA1OERFOTQ1OUE1NDJCOUFFQ0EyODdGRDY2NjU2MzlFNjA2Cis6MTBDN0EwMDBBMjNGMjcxREZEMTM3OTNDNkVBRjQ5OTVGMTFFQkZFQ0VBCis6MTBDN0IwMDA5RjgyRTVEMzdFM0M0MzA1M0VEQTQ0N0FGRDk1QjBCRUM4Cis6MTBDN0MwMDA1NTMyOUVENzFFQTlBQkMyRUY3OUZFOEZGREMwOUY3RjY5Cis6MTBDN0QwMDBFMzY3NzAzRkU2M0RFRTg0Nzc1RkU1RUY4ODI4MkY4NkJDCis6MTBDN0UwMDAwM0ZDRThCODA1QUJDNEE4NDZBQjFDNTM1Nzg4OTA3RjQwCis6MTBDN0YwMDBCODg5QzkyQkZBRTcxRDZCN0E3N0IxNjM2NUM1MEIxMDUxCis6MTBDODAwMDBCRkQzQjg0OTBFQzI3OTBFRkNDOTI2Nzk1MEM0N0ZGNzUwCis6MTBDODEwMDA1NDUzRDMyREYyRUE0MUVFQzdENTAzMEU4Q0MzMkI5MkFECis6MTBDODIwMDA0OUMwRkM3Qjk4OUEyQUYxNzcyOUQ4M0I2Njg1MTFBQkUxCis6MTBDODMwMDA3Q0NBNkZCMUJFNjNGMzlGRDdFRjdGMEIwMDgwMDAwMDBGCis6MTBDODQwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCREQ3REQxCis6MTBDODUwMDAwRDc4NTRDNUI5RjA5Q0IzNjc3RkIzMDlCQkM5NkVCMkZDCis6MTBDODYwMDA5QkRGNEQ4MDEwMjRDMDA2NDIwQzg4QkEwOTAxMjJBMjI5Cis6MTBDODcwMDAyRTg4MEFEQUUyODZERjAwNDkzNjcwQTk2MkM1QjIyMTQ1Cis6MTBDODgwMDAxMTAzNDUwREI3MTE4MTgyNURBODVBQjQ2MjQzOEIxMjIyCis6MTBDODkwMDAzMUU4OEE4OEY4MTU3QjQzQUZGNkEyRjY3QTE3QTQ4QUE2Cis6MTBDOEEwMDA4MEIwNkE0NUZCNjNGOUU2N0Q2NzY2QjNFNzI0NTE2OEFCCis6MTBDOEIwMDBGQkRDN0VDRjg3MEYxRUU2OUMzOTczNjZERUZGQkY5OUQ3Cis6MTBDOEMwMDBDRDIzQ0E4OUE4ODlFMDlGOEJGOTg0Mjg5QTc2NEVBMzQ0Cis6MTBDOEQwMDA2OUIwNTJDNERCRjRBRkQxNjU1M0I1MkRCNjY0Qzc4N0Q4Cis6MTBDOEUwMDA0OUY0MUY1RUUyQkRBODIzNjREOUVFNjU5MzJEQjQzOUU3Cis6MTBDOEYwMDBFOTE3QzUwM0EyQzU4NEFDMzBBNThDMjAwMzY4NUZGODk2Cis6MTBDOTAwMDA3MzJEMjFDREFCM0FBRTE5QTQyNzY0RUIyQTNBMkVCRDg0Cis6MTBDOTEwMDAzNjdGM0Q3QTI2MjkyNTI0OTY2Q0YxRUQ5MDA4NTlCMzhGCis6MTBDOTIwMDA4QThFM0ZCOEE3RkY2ODFCQkQzOTg2OTA2RDRBNjgzQTZBCis6MTBDOTMwMDA3MUQwNkI1ODIxNEQ3NDVFQUYyQzk3MDlCNDk3Qjk0REU3Cis6MTBDOTQwMDA2MTIzRURCMkVDOERGRkJDNkUwOEI0OTdDQTVFRTJFOURDCis6MTBDOTUwMDA3OTVGN0I3RDcyOTU2QjMwN0NGRjJEM0EyNzE4NTcxRkNFCis6MTBDOTYwMDA5MDA2OUYxQzRERkZBRDA0NUNGRTY0NDIwNkI2MjVBQ0VDCis6MTBDOTcwMDA5RkZFQ0Q2RkE1RUQ4NEY1RUFGNTdFOUJDRDRBNDhERTlFCis6MTBDOTgwMDBCN0MwNERFRjdDQ0IxRTI4ODZGMTE1MUM1RjNCOEY2RjI3Cis6MTBDOTkwMDA4M0VCMUFBOUIxODgwQ0E0NTczQTU3ODA0RkM4Mjk4NzRFCis6MTBDOUEwMDA5RkEwRUJDQzVFNzFFRkI4OTM2OTg0NjQxREIyQjQwMEI0Cis6MTBDOUIwMDA1QzQ5REJBMzg0QTQxM0EyODM2RkQzNzUyQjkyQ0Y0MzZFCis6MTBDOUMwMDAyODFFNUFGMjRCQkMxMkJEMUU3RUQ2QzJFMDk0NjM0NUFGCis6MTBDOUQwMDAzODE5MjQ2RkM2RjVGNDZBOTRGRDM2MTg5RkZFRjFDMTJDCis6MTBDOUUwMDBGODBGRTQ1OEI2QUZDQjg3NjZDMDA0NzBDOERFNDkwN0JECis6MTBDOUYwMDBDQzg0RjZDMEI1M0U4NUUyODk4MjlCOENBMzdGNDNCRjgxCis6MTBDQTAwMDA2QkY1RDE3NUVEOTRFMkVENkE2ODc3ODQwREJDM0Y4OUQyCis6MTBDQTEwMDBDMEZGNzZDQjEyN0I0RUM3NTc1Qzg0RUM5MjI0RjYzQzY5Cis6MTBDQTIwMDBFNEFEQUVDQUE2RkQxNURCMzBDNTRCNDhEMDU2REFBQTM4Cis6MTBDQTMwMDBDRjgxRTdCMjc4REY0N0NBRTlGQUUwN0JCQzBENzBGOTM1Cis6MTBDQTQwMDBGOTQxRjFCQ0IyQjU2QTEwMURERjQwQzRGODIxRThCRjVFCis6MTBDQTUwMDA1Qjk2NzlGQkFBNTYxODdGNTdBNTc4N0ZGMDVBNUYzNjA4Cis6MTBDQTYwMDBDRUU3N0E5RDlEOTBGQkRBMjZCNjVBREQzREYzN0Q2OEQwCis6MTBDQTcwMDBDM0Y1QUQ0RDc0N0Q5Rjc4QTIyOTc0MTlBNDdFRkJDOUJFCis6MTBDQTgwMDA3NDQyODc1QTMzMzNFMDA3MzgwMjYxRkI4NzEzNzI0QUQ2Cis6MTBDQTkwMDBGMjIwQkQwOEZDRTlGNzU0ODRCMkU4QURGMzg3RkU5Q0IwCis6MTBDQUEwMDA1MjRDQUY0MTVERjQ1MDEyODU1RjdENjdDMEE0MkZBMDRBCis6MTBDQUIwMDA3MEQ2RkI0MjU5RjkzREVGRDVFRjk5NDYwMjk0NkU4MjRDCis6MTBDQUMwMDA1RDI1NzhFREUzQkRDMzhBRkM3N0JENjczMjVDQzJGN0I0Cis6MTBDQUQwMDAzRTg5RkNCNkUxMTlGQUE4NUUxNzY4QjUwRUM0RkU4NDVCCis6MTBDQUUwMDBFMUJGRUZGNTg5RjczRjc5RTZCN0I3QzJGN0NFNzlBMjk0Cis6MTBDQUYwMDBFOTUzODAyRTIzMTQyRTdEQkMyN0ZBMzc3NDU2MTBBMERDCis6MTBDQjAwMDA3QjI5QzlCN0RFRTYyNDY0MUU4NTM5NzEwMjdGMzU3QTM4Cis6MTBDQjEwMDBBMTdGODdBOUNERTZBNUNGQ0RGQTM2QkY5N0Y2QTdBODA2Cis6MTBDQjIwMDAwQ0NCRTUzREQ3ODc2RDgzNzAzQ0VEN0QyREZGNzQ5ODcwCis6MTBDQjMwMDA0OERBNTQ0QUQ3QTEzQUM1RkIwNDgxNzYyODY5MDQ2REM2Cis6MTBDQjQwMDBBRkFGNTc0NjM3RDEyOUFEMkVGOUREQTg2MjY4M0Y2N0YwCis6MTBDQjUwMDAyNTQ2REE2RUFFM0JFODJBMDYzRUYyMUEwODE1MkY2NDI3Cis6MTBDQjYwMDBGREQ4MEUzN0YwNzE0QkJENjFFNkUzNDBCRjkxNjVBRTc1Cis6MTBDQjcwMDBGOUM1M0RFMzNGNjREN0UzM0NENkJFNDZGOTZDMjRCRDFFCis6MTBDQjgwMDBFQTNCRUMxMkJDM0Y1ODIxQzA4NzY2M0JDNTMzNkQ5QjI2Cis6MTBDQjkwMDBEREE5MjQ5NDBGRkRBQ0VCODExRkQ3RUEwM0Q1OTVEMDE2Cis6MTBDQkEwMDBDRjJEOTMyN0U4NzdDRDgzNjc1NDU3RDI3OUI4OUNCMkJECis6MTBDQkIwMDBBNEMzNzk1NDFENUI0MDlGMzdEQjBDMjBEOUM4N0JGNjlBCis6MTBDQkMwMDAzOUNGMDE5QzdFQUU3ODFCODEwRjdGNkVCNURBNDJGNEJGCis6MTBDQkQwMDAwMTk1OEQzRUUwNUI2NUIwMjMwQzZEQTM4RTM0NzZEMDVECis6MTBDQkUwMDBGOTY1OTUxMDdGODdCNTY3OUVFRjcxRjlGODlFQ0Q4MDQ2Cis6MTBDQkYwMDA3MDVFNkZFRTk4NTY0MUM3QjEyQzkzNkQyMUZBQkRCNUFBCis6MTBDQzAwMDBGNTFCQkIyN0QxRUZGQ0I4RkVGOUEzNERGNEZFQkE3NEI3Cis6MTBDQzEwMDA4NUMwM0NBQzBFMjU2MjQ4QTE3NDdDMDM5RDIzOURGNzIyCis6MTBDQzIwMDBBRTI2QkYwREU0NjdDQ0E5OTAxREY0Qjk2NTkwODE3ODVDCis6MTBDQzMwMDAxMkU0QTBCNTk4QjYxM0U0NTM5QTQzRjE5OUU5RkI3RjQ3Cis6MTBDQzQwMDBCMjA3OEVDMEZDNDdCRkY5OTYwOURFNzc4RDkxNjU2MDBCCis6MTBDQzUwMDA5QjBFODVFMTM5QTU1NDNEOEU2REJDN0E5Q0Q0MkFGNTk2Cis6MTBDQzYwMDA3M0M3NTRGNUYzRjQxOUVBRTdBRUVGQThEQjk5RjNENEYwCis6MTBDQzcwMDBFRDVCODBERUM2NDA0NzNBRTczMkJBMEVGNjg4NThBMjJFCis6MTBDQzgwMDA5RkFFMjIyOTA4OUY3NzAwRkU5NjQyRDkwQkYwMzFENzNDCis6MTBDQzkwMDAzRjdFNkEwMTdEOUUwNUYyODRDRTlGOEMyMEUxMjcyODhECis6MTBDQ0EwMDAzRTBGRTQ3RURGMTNBNTcwMzZBNjM2N0FFQ0M1QkRFMUYzCis6MTBDQ0IwMDA5MTk1NjNCQTFFRjA2NTFEQTREODA4RUQ2RkZERkRDNzAwCis6MTBDQ0MwMDA1RkMzRjg1NjkyRDAyRjFGRTBFM0ZCQzQzNjg2QjU1REY0Cis6MTBDQ0QwMDA3NDNFQzlGMDBGMEZDMEJCRjE3RkVFMDNCRDc3NTRFNzgwCis6MTBDQ0UwMDAwNTc4NjdENTJCRjhGRDA3Njc3OEMyQkE3Q0Q2OUREMDRBCis6MTBDQ0YwMDBGRTI5QkM3RjhBNjk3REI3NkUwNEJERkU3RUVENTI1RDY0Cis6MTBDRDAwMDA0QTZGQjhBNjkzNDYwOUY4OTJEMjA3RUEwQjUyNDM1MEVECis6MTBDRDEwMDA1RjNDMjA5MzVBQTAxQkNBQUUwNEM2QjNDMTBCNTRDRUNECis6MTBDRDIwMDBGODUzMEQwODI3QzVDRUU4ODdGRTRCODZFN0U5MzYzNjZGCis6MTBDRDMwMDBBNkMxM0RDRjBDRkM3Q0ZGMjE0NkZGRjcxQkQ4MzhGMTg0Cis6MTBDRDQwMDBGMTNDRjg1MTU0NDEyMDI3NkQ3NjU5MzVDRTQ2MUJFRjAyCis6MTBDRDUwMDBDM0RCNEUzQjZCRUYzRTk4N0EzREYwRTVDNjE5QTlBM0M1Cis6MTBDRDYwMDA4MDRFOEMzMjA5QzA3ODAzQjI0REJFQTE3NDdERTYzNzg3Cis6MTBDRDcwMDAwQzIxODkwRTNBNDAyMTA3RjVBOUI0QkY4NURDRTlBNzRCCis6MTBDRDgwMDBGM0Q4N0NEODEyRDJEMUZCRTZGOUZGNkVBMzQwMjYyNTVBCis6MTBDRDkwMDA3Q0RFQkI1NzdCRkYxM0U0NDBBQzQ2NDEzODlBOUQ2RDY3Cis6MTBDREEwMDBCNjUxQzU2QzBEMjEzQUJGNTRGODA3OTU4RjE1ODNEQjNBCis6MTBDREIwMDA2RDgwNEY3MzQ1MUJFQTZGNzM0OTVCMUJDMDY5RjM1NDY5Cis6MTBDREMwMDAxOUVEODlENDc5MzJEMkIzMzlBN0UzRTgyMDdBNUYzRkVECis6MTBDREQwMDA1RkI2QzE3OEE5NTRCMTFCRTgyMDNGQ0E2RUYzRkI2MTZFCis6MTBDREUwMDA1QzBBNzNCOThDOTEwQThDOEIyQkE0REY0OUUzNzA3NUI0Cis6MTBDREYwMDAzOEY2REMyREQxNzFEMjYwQkMxMUFDM0ZDMEM5Q0VFMTk4Cis6MTBDRTAwMDAzNEQ2RUU0MTNFNzVGMDcxRDMwNkQxRkUyM0Q4MzgyRENECis6MTBDRTEwMDA2NTNERTMwODNDNkVBRTI2NjE5ODlGRjhBRTE4MjczRTRDCis6MTBDRTIwMDAzRUYxNDkyMDU3RjVCRkE2NzBBMzc4OTI3MjREMzhCOUVDCis6MTBDRTMwMDBGQjE3OTNCMDMxMUZFMEUzNkZEQzhFN0M2RDI1M0I4MEU4Cis6MTBDRTQwMDA1RjFDRDk5NTQwNDc5OTg3Qjc0Qzk3NDdDMDdCMTZGQzI0Cis6MTBDRTUwMDA4RTdFM0UwOTAzMUQ2NzJBQzQ3NDREMkFEODJGN0U4NDE2Cis6MTBDRTYwMDBBMzk2NUZERDA3REI2RUE2M0MxMkM3OEI5NjdGREQwQUJCCis6MTBDRTcwMDA2OUQ1QTVGNkU2NjNCN0MzNTE1OTM4QTIwRjdFRDZGMDNGCis6MTBDRTgwMDA4QkZCNzBFQzdCNDBGNDVBQkU3RTJDRTk1QzA5QzA4NUJDCis6MTBDRTkwMDAyNEY2RDc3RDdCNUJBN0VCMzgzQTA5OTA5NTQxRjUwNEUyCis6MTBDRUEwMDAwNTdEQUVFNjdCODRGQ0NEMDg2RDg5Qzg5RThCMDM0MTcxCis6MTBDRUIwMDBFRURCMzkxRDUzN0Q0NTk5NzVGNzI4REIwNDJCRjBFOTJFCis6MTBDRUMwMDA1MjgyRjQ1NUI5NzdGREVEQkZBNkUzNUQxODZDQjA4MUQxCis6MTBDRUQwMDA1RUM5MzlEQ0Q2MERGQTkxNzQwNjg2MDAxRUI2MkE4MTI5Cis6MTBDRUUwMDA5RjI0RDFFNzVCOEY2NTEwOTBEQjZCQ0Q2NDI2RDBCN0I0Cis6MTBDRUYwMDBDMkU5NUNBQjVGMUUwMkJFNzEyMjZCODQ2NUQ3REY3RjI3Cis6MTBDRjAwMDAxNUY2NjBDN0EwRjQ2MTM2MUI4Q0ZCRkE2MTkzRjM3RkMyCis6MTBDRjEwMDBEMUNFMEEwRDQzM0IyQkZCNjA3NzkzMTVCRTZGOUJEQzk0Cis6MTBDRjIwMDA2QUEyRjAzNUJGQzlGQTNGNDhEQkExNDEwMEJGQkEzQzU1Cis6MTBDRjMwMDBFMEMzMDMzOTBCMTA0RUNBQkI0NjAyNzQzQTVDRTcwQkUwCis6MTBDRjQwMDA0MzlCQkM2NzI2MjA3Rjc3M0VGNzlENUEwRkM4OUZGNDBFCis6MTBDRjUwMDAyOTFFOTA0MzNGMDE3RUE3RUJEOUM2Rjk1RUJCN0VDNTczCis6MTBDRjYwMDBFMDBCODAzREExQkRGRjY4NUMyRUY5NEZENTUwM0MwRTEzCis6MTBDRjcwMDBGRkE5ODFBQ0EzMEY4QkU0MzlBREY5QzAxNzZCQTlGQ0Y1Cis6MTBDRjgwMDBBNTRGRTdFODNDMEQzRjk0N0FGMEQzNjlBRUQ4NjU4N0FBCis6MTBDRjkwMDBFRkFEMzI5MTgwOTFBRUVCMkI4OTA0Mjg3M0U2Mzg3RTk5Cis6MTBDRkEwMDA1QjAxRjIyNzk3NDQyNEQwQjNCOThERDRFMDA1QkE1QTc3Cis6MTBDRkIwMDA2RTIxODEwNDdBQ0ZGRTRBQzFGRTlENjZERjJFM0I5NzJCCis6MTBDRkMwMDBGRjI2MkEwN0Y0RUM5RkU0RTdBOTdFNTJFMzYwMzIwQUM5Cis6MTBDRkQwMDBFQzE3RkQzMzk2RTMyMDM3ODhBM0NBMTdGNzM3MEE4MDhBCis6MTBDRkUwMDA3RUE5REVBN0RGREJDN0Q3QURBNzZBNDIzRjhBRkVCNUMxCis6MTBDRkYwMDBDQTExRTM4OERFRkQ1RkU2RkQxNDkzMzUwMkYyNTJCMUZCCis6MTBEMDAwMDAxRTM5ODZGMkM1QTY5QzRERUM2NzBBMzM3RDQzRUE0ODdCCis6MTBEMDEwMDA3OEIwQzRFMDgyRUQ3RkIzNjEzQjhCQ0E1RkUzMjhCNDk0Cis6MTBEMDIwMDBGQjQzNDY5ODY3MEFGMzNGODhDRkU3NzFBNDAzQkYxMDFDCis6MTBEMDMwMDAwNDcyQjY4OUI0OUE2ODNGQTQ3NkNBNkY2RUQyNkQ0NjAwCis6MTBEMDQwMDBCQkY5MjBGMTAwM0Y1MDg4RDlDMTNGODQ1QjAwRDdBREM4Cis6MTBEMDUwMDA4NDU0MjdGMjgxQjg4RUI0MzEzRTUwNTZFOEQwNUYxQTFFCis6MTBEMDYwMDBGNkFBMTlFN0EzNkYyNDYxMzNEODQzMzAzNzBBNkY2NUY2Cis6MTBEMDcwMDAzOTA5MkJFMDZGQUQzMDYwQkY5MTM2MEZCRTY3MjA4RDUwCis6MTBEMDgwMDA2OENGRUVGQUZBRkQ0QzkwRDM5NjQzRDQxRTFCMDk3ODc0Cis6MTBEMDkwMDA5NjUxNEU1OTJDNkFGRTIzQTQwOUUxRjQwOUU3QkY2REFECis6MTBEMEEwMDBBQjZDODhFN0I4N0YxNjc4OEJFMzM5REEwNEZBMjI3NzFECis6MTBEMEIwMDA3OUFBMEFCRkEyNUZGNjU3NTkyNDMwM0E3MURDMzA4RTQ0Cis6MTBEMEMwMDA5QjNERThBMDQ0OEFFMTc5MkUzRURGQjZDQUYzMkRFMzBBCis6MTBEMEQwMDAxN0Y0MzNCRTFCRTlBOEZGRjFCM0YxRjlCNkM4NUJGNjRDCis6MTBEMEUwMDAxQjI5MjhCNkM2MEVEQUZEOUUxRUZCNUEwQkU3RUNFNTlGCis6MTBEMEYwMDA2QUI5M0NCMjUzREQxNjcwMzFFQjdEOEU2OTE0RTZFNkY5Cis6MTBEMTAwMDBFRkM5REVFRDc0QkMyQjhGQTlGQjU1RTdCRjhERkU2RDFCCis6MTBEMTEwMDA0RkZGODhFMzY2RTg0RkZERUZFRDIwMUQ0RUE5RkJGQkI2Cis6MTBEMTIwMDAyQjVFQjMwMzFGRjdGNDY3RjNCQkY2MkI3NTNGMkQ3RTIxCis6MTBEMTMwMDBCNEYzQTVGMzcyREU5MjMwQUYwOTI2QTNFQUY5Q0M5QUQ0Cis6MTBEMTQwMDA1RUYzNzJERTk2MzBBRkM5MkU3NUZGNDA1M0RGRjNCQTNGCis6MTBEMTUwMDBCRUM4Rjg4REYzMTJGRDZFMkFCRkI0N0VEQTc1REM1Q0IyCis6MTBEMTYwMDA2REVDMDdFRUFDRkY2RDMzMkY2RERDM0I2QUJGQjlERkIyCis6MTBEMTcwMDA5RDJCQjRERjA5MjFCRDVGMkZGOTdDQTlGNDNBMDc2RTFFCis6MTBEMTgwMDA4MUJENjhCNUEwRERBQkE1OTc1RDVDN0U0RTA2N0I4RTRDCis6MTBEMTkwMDBGNjlGOTVFQzlCOUM0QURCMTMwNURGM0RGNUJCREI0MTFECis6MTBEMUEwMDBCRTFDN0VGNjhBMEM5MEVCNTlBMEU3MTA5RTJDQUVCMDA4Cis6MTBEMUIwMDBCQkNFODU3MTg1RUZGMkZFNTQ5RkI0ODBCQ0Q4QkQ5MzgxCis6MTBEMUMwMDBCRTk3QzJFNjk1NjgzRkE1RDUzMUJGQzI0NjYyQzhDRkJCCis6MTBEMUQwMDBDMjVFNEEyNTM2ODlGOUUzQ0NERUU5RUYzQkRBRjFEN0M2Cis6MTBEMUUwMDA3MUZGNzNFRThBMDlFNDAzQ0E4N0NGMUI2QzE1MEFGODM2Cis6MTBEMUYwMDA2NzhGNDk2ODBGQ0NBREYyRTk5MjI5N0Q4QzZCOTUzMDMxCis6MTBEMjAwMDA2RTM0Rjc5RTdGMUIwRDcyNjVFQzQ5NEY2Nzk0REU5RjZECis6MTBEMjEwMDAxQkI2N0JFMUIzMEREREM0MTdBNjc0OTVBMTVCNUE3MkYyCis6MTBEMjIwMDAxRkJEM0U3MjgwREEzRkJDQkQxNEU4Q0RFQUYzODBCRjdCCis6MTBEMjMwMDA1MTAzMzNBMkUzOUNENTM3OTZEODQwNkU3RUQ3RUEwM0RDCis6MTBEMjQwMDBCOTU5MzNDM0Y3MEVBRUY3QUZENDJBQTFGREU2QjNBNUEzCis6MTBEMjUwMDA5M0JERUREMzBDMUU2QTY3RDQ3Q0M3NTMwRTc2NEY0RDM5Cis6MTBEMjYwMDA4N0Q5ODc1NzEzNTEyQzc0MUQzNUQ0MUU4MzZCODY4MTQzCis6MTBEMjcwMDAyODY2Qjg1QTg4MDlBRTY1QUI5OUZEOTU1MkVFMzdENDQ5Cis6MTBEMjgwMDBEMEVGRDc3NEZERUMwQjc4NkZBMTEyNzk4NUQ5OTM2MTNCCis6MTBEMjkwMDBDNDVCNERENzFCN0YwMjdCNkRCRUNGNkYwMDc5MzE2Q0I1Cis6MTBEMkEwMDBBNzgxRDlBNDlDMUU4Njc3QThEQjIwMEYxMkRCMjUxMTRECis6MTBEMkIwMDA3NTdCRjQ2MTc1RkJDMzU0MDZERjdENTI3ODE4RTA2NzE3Cis6MTBEMkMwMDAxRjU1NzBFMDE3ODc3NjE5NTE1RjFDRDg2RjQ0RkMyQ0VFCis6MTBEMkQwMDAzOTYzRDkwRUYxQTcwOTRCQUMyOEQ3Q0YzQzZEQzY3ODdFCis6MTBEMkUwMDBENDNFQjlFMzU5Njg4NzlFNEQ0MkJGRkE5NTc3Rjc5NUNBCis6MTBEMkYwMDA0OUI0QkRGODE3QzkzMjNDN0ZGMTZCMURDMjE5OTZBMzIyCis6MTBEMzAwMDBBN0Y3OTczQzNCNzRGQjNBN0E3RkM5RTg4RTMyMUJCRDg2Cis6MTBEMzEwMDBGRkZDMTU4NDc0QzM3MzI1M0MwMkQ2RjdGQ0RGNzQzODE4Cis6MTBEMzIwMDA3RUVDMjk2Mzc4MDdBNTg3MzMyRkZDRUNEOTdCRTlGN0RFCis6MTBEMzMwMDBDRjNDOTU5NTJBNTFCQzVDMDVGQTgwRjYxQkY3NTM5M0I4Cis6MTBEMzQwMDAwNUZDOEM3MTY3OUUxOTA4RjI2MkM5NEVBMzZBNUQ0Rjk1Cis6MTBEMzUwMDBBNzMyN0I4MzIyMzMwNUU4QURCRjc4RTI4OUI1M0ZDM0FFCis6MTBEMzYwMDBGNzhCNEUxRDQzN0FEQkE3MEZDOTE2NThGRjVBNDY1RjRECis6MTBEMzcwMDBEQUZFQkI1Mzk5QkUxMUYzODBGN0YyMjk3RUNFN0Y2Q0EzCis6MTBEMzgwMDBCOTEzRTI2ODQzMzZBOUUxM0IzNEFDNkVCRjkwQ0FGNEVFCis6MTBEMzkwMDBGQjFDOTI3MDNGMUZDNjJCNThFMzAyM0I3NTNCNDE3QjQxCis6MTBEM0EwMDBBNkU4RDRFRjZGQ0YwNzNCREFDOEVDMDdFRDNDMEVBNDNDCis6MTBEM0IwMDAzMkJFN0VGQTY5M0EwRTkzMEYzQTY2M0ZEMzE1NTM3RTFBCis6MTBEM0MwMDA1Q0MyRTlGODQ1ODlEOUFGRjRDRkYyMkM0QUI3NEI0MDlCCis6MTBEM0QwMDBGMTE3RjREQzVGQTI5OTg3MThGRjA3N0M5RDBFRUU1N0NBCis6MTBEM0UwMDBDN0RFRDQyMTNFNEVBRkFBMUQ3RDcyNzBFRkY5N0NCODI2Cis6MTBEM0YwMDBBQTcxNjg5NUJFQTdCRDYwRDNEMjQzNkVGQTVFREQ2RTlBCis6MTBENDAwMDAyN0ZBODlFMjdFREQ1M0FGQTZERjQxRUY5RkREQTk3OEUxCis6MTBENDEwMDBDMTc0QUQ5QkY1RTQ0M0UzQTBERjUzQkEwRTk4MkYzQ0YzCis6MTBENDIwMDBGN0QxRjU5RUVENzgyRDA1RkEyREQ4NkExRkE1NEJDMEQyCis6MTBENDMwMDBDM0MyNERERjFCNUE5NTIwMEYyRjk3MUYwNEZGRDY3MUQzCis6MTBENDQwMDBGRjc2NkY3OUY3QTQyQ0EwRUY0RDkyMTdCQTJERTlCOEFCCis6MTBENDUwMDBFNUU2MUJDMDU2RDlBQUYzMEVBNkNGQ0IxNEUyRDc4REIyCis6MTBENDYwMDA0MkQ3N0IwNjVDRUI3NjNGNzcyODkzM0UwRkVFMUY1MzQ3Cis6MTBENDcwMDAwNkVCNUEyN0ZCQUYxRjBFRjRGRjk4MUVFMzU4NUFCODZECis6MTBENDgwMDBGQzg1RTM5QkJFMUY5MUU5RkJFQjZFQjVENjg2QUQzOEZDCis6MTBENDkwMDBFRTQxNjgxRjI4REFBMTgzMzg3QkNBMjkyQTlGRDhGRDZDCis6MTBENEEwMDA2MzMyRTVDOTUzNURGNzhGODA3OEUyM0VCREI1MTVFODdDCis6MTBENEIwMDA3QzVGMzJDMzQzNjg5NzBFRTUzQzg5QjA3NThDRTM3MTlECis6MTBENEMwMDBFMzI1RkZERDZFNTBFOEY1RDRBOUQ1MjkxNThDOEY1MEUyCis6MTBENEQwMDBCRTgwNTA3NkQwRjVENUZFNzQzOEYyRERDMjRENkEzRTdFCis6MTBENEUwMDAxMUZEQzQ3QzE3ODVENUNGQjVGNDkxOTUyNkUyMERBNDI2Cis6MTBENEYwMDAyODkxQ0VCNEZERDJBNjg2MENDMDU3NzUyQkE4M0M0RTAxCis6MTBENTAwMDBCMDdGRUE0RUI2MTlDMDZFRDI3RTA3MkM0MDIyRjBBQTM4Cis6MTBENTEwMDA0M0ZBMjQxRTVDQUY5OUFEOTc5QUFDMjZCQURFRDNGMERECis6MTBENTIwMDAyRjE2Rjc5NkMwMkY1RjJDRTExMkM5OTIyQjQ4OTU4N0QyCis6MTBENTMwMDBDMjczQzk3NDUyMERENzdENTJFNDIxMUQ5NzY3MTg3RkJECis6MTBENTQwMDBERjk1ODRGMkVDQUMyREZBRTQ4RjgxRkU5RUM5RjE4NjYyCis6MTBENTUwMDBFOEEzNEMxRTk3M0JFQjg5QTRBNEQyRUI3OUUwMEJBMDg3Cis6MTBENTYwMDAzRjFCNkIyRkVFQTJGMjlDRjJGNzk5NEYwQzI4RDc5QjMyCis6MTBENTcwMDAzQTVFNEQwMTdDOUQ3REQ2MkNDQjE0MkY2Nzc2QTc1NTQ2Cis6MTBENTgwMDA0MjNDRTc2Q0M3QUY1MzYwNURBNzNCRDIyQTIxMkVENzQwCis6MTBENTkwMDA5RkJDRDFDQTI5QTFDRjhGQzMzRkM3NTI2NTk4RTZCQkI0Cis6MTBENUEwMDAyQTBERTQ1NjRCMUExOEUzMjQyM0FEQjFBNEIxMEZGRUEzCis6MTBENUIwMDAxN0VGMzkwQzhEMjUxRTkwMUJERkI1N0E3NzMwMzgxMUE3Cis6MTBENUMwMDAxRjZEN0Y3NjM4NkQwN0UwNUJDOEE5MUE4OThEMkZERTQ1Cis6MTBENUQwMDBCRjMxOEVDNzZGOTY4RkQ1RUI4NjYyMUVFODMzRTIxOTk2Cis6MTBENUUwMDAwMEYyN0ExQTI4N0FGQURFRTE1NzBBMDc4MEJEMjBFRUE3Cis6MTBENUYwMDAzNzNBRkQzM0QyRTg3RDU3NjVCNzRGMDc3MUM0MjlDNDY4Cis6MTBENjAwMDBEQjRDQkI3RUEwRjNERTY1QTNGODlBNDdBOEZFODI2QkQ1Cis6MTBENjEwMDA2OUMwODA3MTk3MTYyN0FFNkZBRTQyMjIwQUE1RjdCOThFCis6MTBENjIwMDBBMDVGNDc2MDFCRjEzNTc3QUIxNDZFQTZFQjk5Qjc1RTMwCis6MTBENjMwMDAwREFGMDVFREM2MUUzQUExN0YxNzExMkE2MDgxMTFCNzAzCis6MTBENjQwMDAyNkY0QTNFMzJGMDIzRDRBRjFCMEQ4NDQyMjQ5NzREQzBBCis6MTBENjUwMDBDNThGQUJERjVCNDIyMjM4OUZCQTY3MkUxQUZCQzJDNzY5Cis6MTBENjYwMDAxNzFDMUY4RDRFNUY3RDlBNEEwRUVBNTEwRTJFMjFGRTI5Cis6MTBENjcwMDA2QkUwQkI0Qjg0QkU3RThCRTEyQjc4Q0YzRDQzRTc1MTAzCis6MTBENjgwMDBGQkUzRkM4QTdCODdDRTRCODM3ODIyRjE4MTFENDFEQTU0Cis6MTBENjkwMDA5MzkxOEU5NzU0OTE0ODBFOURENzkyMkUyOTMyM0NBNTk2Cis6MTBENkEwMDA2NzVDRjI0Qjg5Rjk2NzQ0QzFGNTdGRjExNkMzREZFRDgyCis6MTBENkIwMDBEQ0VFOTk0RjZGODMxRDcxMTVGOEVGODBFRkNEMTJDRTIwCis6MTBENkMwMDA2M0RDMzM1MjI4OTlGQTQ5RjM0REQ0QzUwM0Y5QzRENzIyCis6MTBENkQwMDAwQkZEMDdEMEY2NDIxMjQyRjgzQzlDOTY4Rjc4NUI0NEQzCis6MTBENkUwMDBCQTBEOEM3RkMyQ0RFOUY0QkIwREE3QTg0QzIyOTc0MjlFCis6MTBENkYwMDAwNzYzMTFERjlGMTMyRkUyRkJERkUzNzQ1MDg2RjQyMUYxCis6MTBENzAwMDBFRTUzRkI4Njk4NTM3QkJGMEY3OEYzMjVDMEI5NzZBQkY5Cis6MTBENzEwMDBCQTREMUU0RjY4MTcwMDVFNjgzQjAxNUYwRDdCMkUxQUU1Cis6MTBENzIwMDA3RDdERTBFOTkxQjg3RTBCMEY5RDM2M0M5MTNGOThGREUxCis6MTBENzMwMDBGQzNFQzdFMzIzQjcyQzcwODMzQzdBMThFQ0M5NEMzRUZGCis6MTBENzQwMDA0MDM5Qzg2RjIyRTIyMzExMTMxRERGMzI5QUE4RTIyNTY3Cis6MTBENzUwMDBENDRFQzNGNjJGRDJGRUVCQkE0REQ5ODQ2Q0Q0MDczMDI5Cis6MTBENzYwMDBFRjMwNTdFNzNGMDQyOUIyODFFOTgxNUYwMUREQ0Y5NUIyCis6MTBENzcwMDA3REI5MEFDMkQ1NTc4ODdFRjMwQTQ2MEY4RjhFNkExQzgwCis6MTBENzgwMDBEQUQ4ODdCRjJDRTZCRjUxRUE4OEM4MjA5RjVFNjBGNkQyCis6MTBENzkwMDA0NjcyNjk0QzFGNDhFMEY3MzdEMzk4MUQzM0UwNDBGNEQ4Cis6MTBEN0EwMDA1MDE2RDBERjczMTJDNkY3Mzc0QkE0NDVBMjcwNzY1MURFCis6MTBEN0IwMDAzQzgzNUVEQTJDMUQzRjA0N0E2Q0YzNzUxRUQyNEM5RkJECis6MTBEN0MwMDA5N0VFOTlCNkY0MzVGNEI5MkQ1RUM4OTdENEVGQTlEMDg5Cis6MTBEN0QwMDBENTVCNzFGRENDRUU0RDZBREMyRUQzRTcxOTc3MTY4RDQzCis6MTBEN0UwMDAwMjNFQTNFQkJFNzMzQUJERkZEQjM0MEZDMkNENkQ2NUM1Cis6MTBEN0YwMDBGNEUzNUExRENBNUYwNkYxREQwM0ZFQTVBRjAxREQwRDlFCis6MTBEODAwMDBCNzYwMUMyRDgzQzIyQTM5MTVBRkFENjBDRkJBNDg5M0RCCis6MTBEODEwMDAwNEZERDYzODI1QzRDNzlBMUEzMkYzOTdDNTQ4Q0RDQTM1Cis6MTBEODIwMDA4MDU0NzYzRDQ2QUY5MjQyNUEyMDJFOUNBMTUwRkI5OEUwCis6MTBEODMwMDBERDZGODFFRjNDOTJDMkU2RTU5NDc1Nzc0RTAzRkI3Qzg5Cis6MTBEODQwMDAxNDZCQTdBRTk0N0MzQjUwOEY2RDQwMzg2NDE4NDkzNUZCCis6MTBEODUwMDBBQzFCRUU4MzNENEZBN0UxREI4RENGQzMzOEVGOEMwOUM2Cis6MTBEODYwMDA4RDI1MzA4RjhDODFFQ0VBMzA0NEIyNjE5QzIzODI0RTRFCis6MTBEODcwMDBCQURDMzJFODhERTU1Q0ZGMkZERjVEOTE5MTRBREYzRjM2Cis6MTBEODgwMDA3MkQ2QTQ4MDNDM0ZFMjEyRjY2OEM0MEFGNjI4MTk1NDA2Cis6MTBEODkwMDBDNEZBNzMzREJCQkM2NDQyMDYzMEI1MjM1N0RERUZCQzEwCis6MTBEOEEwMDBERTM3NjAzNEU4QUJBMzNBQ0MxQkZERDFFQTFCNjBBNzlFCis6MTBEOEIwMDBGREFFMzJCMDc1NjhGMUFGNzMzMEJDMDZCRjkyNDgzODI4Cis6MTBEOEMwMDAyMUZFMTA5Qzc5MDFFREZDRTA1NzhBRUFGRUQ5NTUyNjJECis6MTBEOEQwMDAxMjRFODgzRkQ0RDUxRTk4MDRGREVBNDlGNzFBQTBDNzE2Cis6MTBEOEUwMDBGQThFMjQxMjRFRTA4RkFCMkM3RDdGNTdGMDQ1RjAyQjQzCis6MTBEOEYwMDAxRDA5OEQ0NkIyQ0Y4NjM4RTkxMTdENkNDRDdDQTBDMzYxCis6MTBEOTAwMDBGRDEyQzZCMzgyRDRBRjBGMjVDRUVCQUIzNDEyNEFFQjc3Cis6MTBEOTEwMDA2QjlFRTlFQUZCNzQzREFBNzZFNzk3RDg4Rjk0NDc1MzRDCis6MTBEOTIwMDBFMDNCRTc2Q0QxMTQzQjVGMUZGNDEzRkFGNzdDNTgwRTExCis6MTBEOTMwMDBFOTQ3NjI5RTkyRTk2MTg4MzM1OTk5RkU5QTA2Rjg1NTQzCis6MTBEOTQwMDA2MjI5RDM5MzdCQzYxNUNGNjFCQ0Q0ODQ3NTlFOUI2OTM1Cis6MTBEOTUwMDAyMDExQzQ0QjBDQkYwQjcwMEIwRDIxNjQ0QkQ3QTcwNkQ1Cis6MTBEOTYwMDAwRkQ4MjM1REFGMjBEQzA0QkQyNEMyMkY5NDk4Qjc2QTgyCis6MTBEOTcwMDBFRThFQzg1NDU2NUNERDlFQjNBRUQ4NEM1MTc1ODBDQjRDCis6MTBEOTgwMDA4NTUwREUzQURGNzhGQTVDMjdBQkU0NDQ1MjY5NUM2RTdFCis6MTBEOTkwMDBBMDk4N0EwNEIyNjgxODU3RjVBQzgzMzg2QkJDQ0RGQkZECis6MTBEOUEwMDBDN0RGMEZFNTRGQTlBMkUzOTUxNkIzRjcyN0I3MTdGQzFBCis6MTBEOUIwMDA5RkQ1QTAwMzQ5MUJEM0NGNEEyQ0Q3OUY5Q0QwMzY2OTUzCis6MTBEOUMwMDBEQTU2REExRTlFRDBCNjY5OUUzQjM0Q0Y1RDlBNzYzNjIzCis6MTBEOUQwMDBFQjdGMzYzOTkyQUJGMzEyMzJCREJENzA4QTQyRTVENjg5Cis6MTBEOUUwMDA1OTc3NjQzNkY1QThDOTdBREREMDI5NTVCNDVENUZDQTg4Cis6MTBEOUYwMDBGNDdBNDM5N0U0NDUzNUM1RTFEN0UwNjU3NkFCRDUxQkFFCis6MTBEQTAwMDAzNUNDMkQwNjM4NzQxRjAyQjk1MkQ3MjlEOTI0Q0EwNzNDCis6MTBEQTEwMDBENjhFREQxMTZDQzM3QjlFODRGNzNBMjQ3Q0FGQUVFM0Q3Cis6MTBEQTIwMDAzOEJFRDdFRkY4NDUzMkYyRjlCQUEyMTNBQzVGQzc0NzU4Cis6MTBEQTMwMDA2ODNGQUM2OUE5QzFGQ0JFQzg1RkVCODhERjk3MjVGNURDCis6MTBEQTQwMDBFNEFGODU3QzNERTdGNkJEMkEzM0JBQjYyNUZBNzM0MUNCCis6MTBEQTUwMDAxODM3MjE2RTI0RkFCRjM3QkNFQjZEMzA0RjkyOTY3RjlBCis6MTBEQTYwMDBEQTA0RjZGNDdGRDc3RjM0MDZFQ0NCRjdCODFFRDkyODVBCis6MTBEQTcwMDA4NTg3QzI3N0I3OTBDMDUwRDBBM0RGQUQxRkZDOEE0QzFBCis6MTBEQTgwMDBGQkJEQUY4RjZFODMxQ0REODZGNjZCMTA3RUVGMjc0N0U0Cis6MTBEQTkwMDA3MzI0MkE2MzdFRTRCODhFQjU5REQxNkQwMENGOEYxREFGCis6MTBEQUEwMDA1M0E2Mjg3NDlDRjc3M0EyMzkzMjZEM0ZEQUJFOUNCNTM5Cis6MTBEQUIwMDAwNzQ3Qjc0MUZCNjU0NzgwRjUxRjFFQ0REMUQ5QzA1NTNCCis6MTBEQUMwMDBBQjk5NTI0NTlGM0Y2MUVCOUI5RjVCQjkxQzExRjMzM0IwCis6MTBEQUQwMDAwRkY0MzUzQkMwN0VBQzYzRkE2NzFCQjU3RjRENTQ1RUQ3Cis6MTBEQUUwMDBDRTVFN0M3QUQ3MTMxNDBFQjNCRjlGODQ3MkVDODlCM0Q5Cis6MTBEQUYwMDAzNzRGNjFGRTQxQzhBRjk0NDFGQzk3RkQ0MUZEODg3MkVDCis6MTBEQjAwMDA1RTQxRkJDMjBEM0EzMUI1MDcxRkM5QjlERDFFRDQxRkY2Cis6MTBEQjEwMDA1NzM0RUUwNkJCMjU2Mzc2MzFFQThGQjE2OUJFRDNGMDg4Cis6MTBEQjIwMDA1RDcxRkQ0NTI2QkI5RTc2RDg5ODVDRDZDOTk4MEZDRjBGCis6MTBEQjMwMDBCODM3MTlFREJBODdDRDZDM0Q5NDZGMTBCRjU2OEU4RkY0Cis6MTBEQjQwMDA2RDBFNjY5NzZFNzMzMEZGNzY0OURBQzREMzBFN0E3RDE4Cis6MTBEQjUwMDA1N0YyNkQzNjUxQjhCRkFCMjcyMTMzQzhEOTQ1MTZCNDNCCis6MTBEQjYwMDA5N0VFRDg0RUU1MDY5NURCRUQ3Q0RFRUQxQkRDNjFDODVCCis6MTBEQjcwMDBFN0RGMjExMTNGQzgxNTIxM0ZEQUVEM0U3NzZBODI1RjZBCis6MTBEQjgwMDBENDVFNDJEQkQ2MUUzRkI4N0Q5QUNGNkQ3MUMwMzU1RDQ1Cis6MTBEQjkwMDA4NkJDOEY5MDRCRURGOUVDM0RBMThGMzI5QUQ5NzczMjRDCis6MTBEQkEwMDAxRTFFQkEwM0Q2OTFBNEIwRjhENUZDOTk4NTNCOUFEMDM1Cis6MTBEQkIwMDAxRTk4OEVGMzI1M0U5RjFCRTIyMDI3MTcxNUM4MTBENzBECis6MTBEQkMwMDAxMkY4Qjk2MkEwNkYyRkMwRTU3NjlFMTcxMDc4MTJGODkwCis6MTBEQkQwMDAzQ0NERDczRDU3NDdFRDA5QkFERUJGMzgwMzA4NDc2QTQ5Cis6MTBEQkUwMDA1RjhDRTBGMTMzQjQyRjRFODM2RTRGODAyRjUxQTI2M0QwCis6MTBEQkYwMDBFMEZFRkY0NzcwRkEzRDNDRkY0N0UxNTRCRjgyQ0EwQjhECis6MTBEQzAwMDBGOTEyRTQwNTg3REY0NjI5QTJDRjYwRjIwMkZENzlCODU4Cis6MTBEQzEwMDAwRjdBQTczMzJEMTA4M0YxQzVGNzY3REY1QjhGRjZBNDZBCis6MTBEQzIwMDA5ODU3RDJERDdCQUI2RjIzQkRGOTRDNkJFRkZEMTlGMDNDCis6MTBEQzMwMDBFNUVDQjE0QkJEMjIwRUNBQkZGM0ZFQkIyNkNDN0JCQ0NDCis6MTBEQzQwMDA2RkU4NDBCOUY5M0VGNUEzOUE0MEJFRjBCQzdERDlGNzI0Cis6MTBEQzUwMDA5NzFDMDE3RjU0OEMxQjcwRUE3MEJDQjU5MkNGMERFQjAyCis6MTBEQzYwMDA1QjRCRjE2RTgyRjk0RjMzQTBCRjIxRjQ2QUJCM0RCQzIwCis6MTBEQzcwMDAxOUVBMjZEQTZGQzlDNkJBODlGMzg0RDVBNzg0NTYyNDZGCis6MTBEQzgwMDA2MUJGQUJFNDEzMDRFMkFBQjFCMTM2Q0M5QjUzM0FDMUY1Cis6MTBEQzkwMDBFN0VEQjMwQUIxN0U4NUQyNDNDODBDQ0YyOTNENDE5RDQzCis6MTBEQ0EwMDA1RjdCMDk1RDEwOEMzN0VCMEE3QzBFRkUzQUZBRDlCMzI0Cis6MTBEQ0IwMDA0QzM4NUUxRjc0QzJFMkQ0NDM1ODdENDY3QjNFQTdDM0Y2Cis6MTBEQ0MwMDA0NTA1NDg4N0U5Q0QyQzFFNEExNERGODg2OTA5N0E3RTBDCis6MTBEQ0QwMDBCQzkzRTEzOUE5MzRGQURDN0YwMUNEQUYzN0EzM0QwQjBBCis6MTBEQ0UwMDAzQTE2NzM0QTZEMTkzODFFQzVGRjYwMjc4QjRCMjA5RDZECis6MTBEQ0YwMDBDRDdCMjg5OUQ3QzM3OUNCMDBBRTBGMjQzM0JBREM2QTI5Cis6MTBERDAwMDA2NkY5QUVBREQ0N0U0NkI5QzhFOTU3RDRFMTA1Qjg5REYxCis6MTBERDEwMDAxN0FEOTU1M0MwNUUxOEVEOENDNzNCN0MxMDdGQzA3ODYzCis6MTBERDIwMDAzQjdEM0UyNzJBMUQwN0JGNkY0RTQ4MTczMTQyNUNCODI2Cis6MTBERDMwMDA3NUEyMkY5QUUwQkZDMDFGQzgxN0RFQzlFNTJBRDk0NEQzCis6MTBERDQwMDBEMEJGQkExM0RFNEI4MUYxMkQyOTkwMUZCRDEzREUwNzIyCis6MTBERDUwMDBGRjcxRTU0NDU1MUU3MDIyQzhGMDMxM0RGM0QzQ0FGRDcyCis6MTBERDYwMDA4OTRFMUVERjZDN0JENDk3RjgxRDMxQkU3NjNDRUFDNzI2Cis6MTBERDcwMDA0RTcyM0ExMUNFOTEwMUUwNDczNEU5MTA4RkRBNzk0NkJDCis6MTBERDgwMDAzN0IxQjg3OTc0NTMxRUQyOUQxOEFGQkY3OUZFOEYyRTZDCis6MTBERDkwMDBGNjNEODlFQUMxMDUxMzk4N0YyRkZDOUVGOURDRkYyNjJBCis6MTBEREEwMDAyQkQ1N0UxREM0NzlFMjZENURFRkI2RDY0Rjg0RkNCRUU3Cis6MTBEREIwMDBCQTNGQjM1QjkyOEE2MzA2Q0NGQjc4MjRENUZDMDVCQ0UyCis6MTBEREMwMDBGQTgzNDM5REMwRTcyNUMyNERFOEJENDdDRDU0OUU1MjFFCis6MTBEREQwMDA3QUQ5MDQ3NTkwOTRCRTM2REQ5Mzg0N0FDQzYxMDgwRkFECis6MTBEREUwMDAwNUJBREEwMkY1MzVBODRGOTlGRkZFRjkxMTc1RkM0NTIxCis6MTBEREYwMDA4QkJGMUZDNEU5RUFGMkZDRUUyNkMwQjlCM0I3REYxRDQyCis6MTBERTAwMDBCNEM0MUUwM0Y4MDcyRDhDMkZDRkVENEY0NkJFMjI4M0RFCis6MTBERTEwMDBBMkIzQTFFRUVERkMzRTIzMDE3RTY4OTBBMjg1MjAyN0VGCis6MTBERTIwMDBDRTQ5QkUxQUVDRDc5NEU0MDFGRUZDNDA2NjcxODEyMDE1Cis6MTBERTMwMDA2MDg0QUUzMzE4RkEwQkQ2NUIwNTNCRDU3RUY4MzlGQTExCis6MTBERTQwMDBCNzk2RjJDRjM5Mzk1QTA2RTMwOEY5MDJGMjA0RURBQzdECis6MTBERTUwMDA1QTk2ODc2QTkwNDkwOEZDQjRBQkU0Mzk4QkQwOUU5OEY3Cis6MTBERTYwMDA5NTQ5NzZFMEZERTM4NUUwOTcwOUJENDFGQjFEOTQ1MjlECis6MTBERTcwMDAxOTE5MDJGRkQ1NzE3QzM0QzgyN0IwNUYxREQ0NEQwMTNDCis6MTBERTgwMDA1RUMwNUY4Mzc4MUYzQzRDODg1MzM3QUMzRjgzNzU1QjIzCis6MTBERTkwMDAwRDdCRDQ3NDUzRDc0MzU3RDI0NTA5REU0QkEwMzM5NDNFCis6MTBERUEwMDAwQjIxODQyM0RBRUQyMDQ3QUE1ODFFM0Q5OUI3OTNBQTg3Cis6MTBERUIwMDBCQkIxOEUyQkM4RTMyRkNFMDNEMTQ5MjA5RjkyNEIzQkExCis6MTBERUMwMDBDODFDN0EwRDlFNjI3NkNCQjhBRUVEQUY4MjVGNkVBRkE2Cis6MTBERUQwMDBFRUNFMDE3NjBBRjI3OEE3QTAxQjMxQ0ZCMTVEMUI3NDlDCis6MTBERUUwMDBFMDM3MEE3QjI3QzE2RjFEM0E1RDE1Qjc1ODhERUY4MTZBCis6MTBERUYwMDAxRjBDREY4QkMyMkQzNzkwMTVEMzkzMUJCOTlFNEMwMjlDCis6MTBERjAwMDA4NzFBRjQ2OURCMTBENEE3QTBFRjQwQ0UwOTNGMUFFNENBCis6MTBERjEwMDAxRUQwRDVDMEY0Q0EyM0MwRjcyRkE2NTdCRUVFNzRCMkU4Cis6MTBERjIwMDBFRkExN0YwMENFRDdEOEZFRTk0RUMwNDdGNDAzN0ZGQUI5Cis6MTBERjMwMDA5QkUzOTA1QzdFMTMxNjdGNUNGNjg2RjMxQkU5RkZGRDg2Cis6MTBERjQwMDA0QkE2RkZBMTE5NDBFN0NCMjQ0RjA2RDBGOUYxMzhGRENECis6MTBERjUwMDAxNzYyQkU1MkRDRkY1MDE3QzAzOEEzODg3NzJEODJGOEI1Cis6MTBERjYwMDAxRUJERDY3MTM5QjQ4MEM3QzcxNjg4QjhEODI2NzU1RTZECis6MTBERjcwMDAxNUUyRDE4OUVEQzUyMjRFQjZEM0Q4NTM2RjA0RjJBMzcyCis6MTBERjgwMDA4QTQ0OTJFOTc4RjUxMDY3ODM2Qjg3RkFCRDA2MTI2M0JECis6MTBERjkwMDA3Q0Q0NzlEMUE4Q0FEQkI2MzMzOERFQzlFOUM5NUUxNUFECis6MTBERkEwMDBENjgxRkNEQTZDNjZGMTMyMjFEN0M2QUREQzhFNzQzMkQ0Cis6MTBERkIwMDA2MDk0MkZGRjdFRTA5QjM3RjQxODZGRjkwM0E3MDMwMUVECis6MTBERkMwMDA5NzQ2NjdFNTUxQzBBNzQ1QzdFMzgxRjcxQjUxOUU5RjYwCis6MTBERkQwMDBBNDc2QzI2RTFFRTc5OTBFRkVGMUFBQzA1MEE4OTcyNzNDCis6MTBERkUwMDA4QTJEMzdEMTdGMTZENzc1RkJDQ0I1Njg3RkE3Q0IyQTkyCis6MTBERkYwMDA3QTdEREVDOUVBOUIzMEZFODVGQTIyMDlGRDAxMkFERTIwCis6MTBFMDAwMDA0NjAwQkQ5NjE1MDg3RDRENDY0MERDRURCODlFQzVDRDU5Cis6MTBFMDEwMDAxQjZFQjUwNjYwQkNBOENDRTRBMTNCOURFOTI5NzczQTBDCis6MTBFMDIwMDBBQjU3MTRFREI4RkZDOUU5NTFFNDQzMjEwRTk1OTg4RjIxCis6MTBFMDMwMDBGMEM0RkI2RkUwNzVDODA0RDdCQjcxMTFBRjc3OEZGM0U1Cis6MTBFMDQwMDA4NThDRjIyREE5RDg4RjdBRTEyQUI5MTJFNTVCRUM2M0IxCis6MTBFMDUwMDBBQjA3RTA1MjdEQTY2RTExQUNFM0IzOTkxNjAyNzlDOTA1Cis6MTBFMDYwMDA3OTNDMUVFRTREQjdFM0I4MjI4RTdEQjlGMUYwRDFFOUNGCis6MTBFMDcwMDA3MTdBNTRDNUMzRjc3MUI5Qjg4RkIwRjk4NjVBOEMyQzMwCis6MTBFMDgwMDA4RkMxRTdCRkVGRDQxNTYxQ0UxRjIxOTA5QkIxREQ2NjM0Cis6MTBFMDkwMDBBNjhGQTk5RDBDRjI3QURGOUUyMTYxNThDRjcxM0RCMzA2Cis6MTBFMEEwMDA2NzQyRkI5M0Y5RkI4MUNEMTBBN0Q5Rjc0QkE3MTdFQTdECis6MTBFMEIwMDBBMDgyOEI0RjhGMDBGQjc2REZBOUE3N0ZGNTFCQjhCRjJGCis6MTBFMEMwMDBERkU4MDU3Rjc0MUZDRjYzRDQxOTIyODU2OENGRjNGQTg4Cis6MTBFMEQwMDBDRkJBOTQ0ODIxQzRBNTVFRTRGOEFBQjNEMDM2QkQ3Rjc4Cis6MTBFMEUwMDA4MzI5MzAzNURERDk5MzZGODRGN0UwRkU4OTMwRjMxQjQ3Cis6MTBFMEYwMDA0RTEwNDYwN0ExRjUyQzJGNENFMUVCODY3OUM0RDY2NjZECis6MTBFMTAwMDA2MEJFMTJENjA1NzhGODYwRkY3MDlDRjc0NjNERUZGRkMxCis6MTBFMTEwMDAyMEIzMkY0RkYwRjY4OTE3NEFCMDFFRjJCQ0RGODBGNTBFCis6MTBFMTIwMDBDQkMxODc5OTNEM0I1N0Y2M0NCNjAyNjRFRjRCNDkxODhCCis6MTBFMTMwMDAwNzlEREY3RTE0RjM0N0MxODcxNjRFODVFN0MxQzUyQkM3Cis6MTBFMTQwMDA2RjI0REY5MDU3MDEzRDk1MThDNzNGNDc2MkI5RThBNzk0Cis6MTBFMTUwMDBENzE2NzQ0NEU4NzdDRjc1MERGNUIyRjRBODBCOTM3MTE4Cis6MTBFMTYwMDAwREJDNEVGNjI0ODUyRkNDM0JCNjVGOEZGMEJGRDRGMUFCCis6MTBFMTcwMDAzMUEwNTlDNkY0MjU3QzI3OTg5OEJGNDJGREEyQ0U2N0VFCis6MTBFMTgwMDA3RDVCRkI5QzNFNUE3ODBGRkRGRURBRDRDMDBGRDIxM0E0Cis6MTBFMTkwMDBFQ0Q4RTA0QjZFOTRBMzFGM0NGODY1MkVEQTNCNkQyQzU3Cis6MTBFMUEwMDA2RjcyNTJFRjlCMEQ3QzYyQUY4QTE4RTYyNEM4RDc4RDQwCis6MTBFMUIwMDA5QzhGRTcxQUI5NUQ0QkU1NjAyMkRGOEJFNzY1OTU2QUI2Cis6MTBFMUMwMDAzRTEzRDc0N0QyOTk1QzRFRTZGNTEyQkQ5RjhCN0FCQ0MxCis6MTBFMUQwMDA5QjhEQTA4RjU5QzgwQkM2RjVFMEZEM0M5RUM3MUM3N0YwCis6MTBFMUUwMDAyQUY2MEFENDlERDU3NTk0NjA5RTM0NkY2NTA0Rjk5MjIxCis6MTBFMUYwMDBDMjNCMDJGRUM5QzlDREM5NEM5RUQwNjVDMjM4MEJDQTBDCis6MTBFMjAwMDAwOURBRDUwQjc0QUNGRTYzODE5MURBRTlDQzJFQzBGRTNECis6MTBFMjEwMDAxRjZFQ0U0MDM4OTRBRDY2RjY2OUVDMzkwOUU1QTJDOEE4Cis6MTBFMjIwMDBFN0Q2MTBGNkZFREU5NkUzMjExREVENUZCMzUzMkFBMTdCCis6MTBFMjMwMDBBMjk1RDRCNDU0NjA3REM4RTJBREY5ODhGRjcxNUNGRTRDCis6MTBFMjQwMDBDRTM1RkEwQTM3MDNCREVENEQ0NjdBQTNERjQzN0ZBMEYyCis6MTBFMjUwMDAwRTZBRTA0NkExNUMzMjgwN0VBREREMjk2MTdFNDRBQzcxCis6MTBFMjYwMDA1RjlCM0YyNTYxNzVERTY5NUMwNzkzREZBMDM3NDhBMjlECis6MTBFMjcwMDBEREM5RjUxMEU4MEJBMkIxNkZENTc0MTFCQTI0N0RBQURGCis6MTBFMjgwMDBENTA3ODdFMzcyRjJGMkY0RTlBRjQxN0U4REU5QUQ0RjM1Cis6MTBFMjkwMDBBOUJGNzAyNDlERDEwOTkzRkZCQjU5QkVBOTlFMzRCMjdBCis6MTBFMkEwMDA3QzFCRDc2N0YxNzU3MTdERjhBMThFRTlERjA1QzYwRDdFCis6MTBFMkIwMDA3ODNEOUU5RThGRjM1QTRDQTIzQ0VGMTQzM0MwRkNGQTdCCis6MTBFMkMwMDBBM0FGRTNGREQwOTdBMEFCMTM5Q0NFRUE0RTkxQzhENTg3Cis6MTBFMkQwMDBGNDdCNzUyQjQ5QTQ3RTA0QkIyNjhGNDBGRENFRjRCQzk1Cis6MTBFMkUwMDA4OUU5NzlCODVBMkU0MURGNkJGNUJDNTZBRjZCRjU3OUU5Cis6MTBFMkYwMDA4NjgxRTk2RDQxNEY4OUY5MDdCMDkzQzZBRDBDRUI1OEEzCis6MTBFMzAwMDA5QzM5REI4NkZCRUIzODdFOTdBNEY5MkU2NjhFRTlCMTRCCis6MTBFMzEwMDAwMzgzQzc0QzI2Q0Y0ODY4RkI0OTgxMTVFMjY3MTVFQjlDCis6MTBFMzIwMDBCMjIxMkY0MEY1MDBGMDZGMTI4NUQzNzY4ODhCNzFGRkY0Cis6MTBFMzMwMDBFM0VFNkNCNjdFMTdBRjkzRDIyQjdFNTI2MjA1M0M3NTJFCis6MTBFMzQwMDA2M0JDMjBFNjI0RThCRjBCRjg2RTRCQTZFRjhEODJGNzg2Cis6MTBFMzUwMDAxODVGQzdERjM3OTExNjRCQzJGQjk1RkJDQ0E4OTcyRUYxCis6MTBFMzYwMDBCQzkwOEM3NTNENTRDRkU0RDlFOTc4RTlFRjUxQkY4MTc5Cis6MTBFMzcwMDBCNkNGRUQ0QjQ2M0JFMTFDRDcxQjBFMTE5NzIxNkIxMDFFCis6MTBFMzgwMDBCRkNFMEM4NkU3MTBBOUNDODJGODM2OTFBNjY0ODFBODhFCis6MTBFMzkwMDAxNUY2NkNCREJEQkY3QzA0N0Y5RURGN0QyQkEzMzMyM0IwCis6MTBFM0EwMDBFQUVCMEJGNkU4NUREMEE2RjNDMTNBRUNFNDBDMzZFRkVECis6MTBFM0IwMDBFMDlFMDkyNUY3NDJGRDg1REZFQTY1NTAwRDk0ODBGRDVBCis6MTBFM0MwMDA2MUQ0MkRCRjE1RTI1RTkzNzQyQjYzRjdEMDc1RDRFNzRCCis6MTBFM0QwMDA1OEIxQkVCQjJBRUZGN0JGOUI0NURCMUZFRkQxMTMyMzFDCis6MTBFM0UwMDBFMEZEODk5QjA3NDRFMDM1QzVFN0VBOEI0RjE2ODVGNUNDCis6MTBFM0YwMDBBQUZEODM0Qjc2QUFEQkY1MURFQTc2OTAyNEVDMkZBNEM4Cis6MTBFNDAwMDAyMDU4RjFGQjkyNkIwRTI2RDA0OTU5NDZCMkUzQzM2MTA2Cis6MTBFNDEwMDBDMDk2QzQwQkY1RTk0NEY3OUQwMTgxM0VFNEFFQjg3RTk5Cis6MTBFNDIwMDBCOUNBN0JDRDQxM0RENkY3NUQ5REMxRjhEOTAwRjZEMTgzCis6MTBFNDMwMDAxQ0EwODczRURFRkIyM0U3N0JBM0IxRjExNEVDMTMzMDc1Cis6MTBFNDQwMDBCRTY4RjQzNkQxQjdDQzE5ODE0OUYwN0U4MzFDM0IwNEY5Cis6MTBFNDUwMDBGODM0RTY5RDFEMDFGQUI0MzJFRkFGOTgyN0JDNzAxRjY3Cis6MTBFNDYwMDBGMTAyN0MyRTk4MkJEMDRFQkFCMEQ5RUMwMTdGQjEzRDkxCis6MTBFNDcwMDBEN0NBRTIzMjJGNDk2MTg5RjkxNTUzQzc1MEY5NUE4QjJGCis6MTBFNDgwMDA1M0ExRUJERDc0RERDNzZDNTMwQjMxQzk4ODVGRUE1NUNFCis6MTBFNDkwMDBCOTQwNUVGOUQwQ0ZGQjcwOUFDNUI2OUFCRTU3QkI4OTFBCis6MTBFNEEwMDBFOUVEM0FEMjlEMDI3MkUwODc4MDNGQTA2QkREMzMwNjMyCis6MTBFNEIwMDAxM0ZENjc3RThCNkY2ODEzOURFRjEyQkYwNUY3MzMyOTNECis6MTBFNEMwMDA1RjJCN0VBMEFGMDc2MEM4MDRCRjY0NEUwNjkzMDdGNUJDCis6MTBFNEQwMDBBNkE4QTEwMkJFRkZENzc5RDVDRTgyOUUzODlFNDFDRjk1Cis6MTBFNEUwMDBFMjc4NEE2NzQ5MjQ4QkJFQkE3MEM1NUNGNEJGRTJGOTkyCis6MTBFNEYwMDBGQUNEQUM4RTZDRTEzRDM1NzhGRkQ1Q0Q0NjVDREY4NzNCCis6MTBFNTAwMDBGQjI1QTRGMzBGQjdCMUY1MkZEQzY0RjY0MEJERkJCNUQ2Cis6MTBFNTEwMDA3NkU2QkYyRkE0RUZGNUJERkVDOTFGQzNCQTNFREE3QTc3Cis6MTBFNTIwMDBCNzE3RjIxMDFGMTFGNjlEOTA4REM1REIzRUIyQjFCQTQwCis6MTBFNTMwMDAwMkU4MEJFMzdDQjQ2NzIwREE0M0I1OUIxNjREQzVGQUJECis6MTBFNTQwMDBCRTZEM0EyRkQ4MjM2NDdGMzJDNkIxMTY2RUZCREU2RkU0Cis6MTBFNTUwMDBDNjQyOUM2Q0ZBRURBNTAwODc2QkVEQ0JEMzIxMkU0NDBGCis6MTBFNTYwMDBGQkY5QzNDQ0JFNjY3NUQzQTlFNTRGMDIxRjVFRkJGNTcwCis6MTBFNTcwMDA4NEVFNkJDMUVFREE0NkY5MjQ5RkVENEIwMDdCRkZFMEExCis6MTBFNTgwMDBCNkM5NjhERjJFOUM2NkIxQzNCQTNDNUI5Rjk4MDQ3QTFCCis6MTBFNTkwMDBFOEEzNjk5OTMyQUU2Nzk3NDQ2QzAwMDdGQjhBNzRCOEE4Cis6MTBFNUEwMDBCRjUwNTJGQzdERDE1MzdFODYwRUUxNUE5MTY3RjU0NkVECis6MTBFNUIwMDBFMEJEQjc3NTQ4Mjc5NEFGNkUwNTNENUNCRjREOEZGNjQzCis6MTBFNUMwMDBGM0MxRTlFRkZFNkU5NkEzODdBRjE2RUFEQTZFMUQ5N0U4Cis6MTBFNUQwMDA2MDNGMDVCN0RFMjBFODg0NDRDQUMwMkY2MzMwRDFGMjIzCis6MTBFNUUwMDA5NzMxNkY2NTIxQ0M0N0NCNjcwQjU3MzcxNkIyQkNEQzMwCis6MTBFNUYwMDBFNUYxMUJEOUNBRjhFREYxMEM4OUM1NkYyRTlEREY3RUMwCis6MTBFNjAwMDA3RTM5RkM0NkIyNTM1NUZBQjdCNzVDMEI2MTNGOTFEN0UwCis6MTBFNjEwMDAzMDc5ODlFRjA5MkJFNkFGN0QxMjk1QkI2RjY1MjhGODNECis6MTBFNjIwMDBGQ0FEMENCRThGRUI0RkNCNzZCRTQ5RTEzMzJCMjNCMDU0Cis6MTBFNjMwMDAzRjAzRUMyOEUyMkIwMTNBRjJDNDZDOTVCMDQ3Q0JDQUY5Cis6MTBFNjQwMDBFRDQxQjI5NUQ5REZFMDI3MDBCRTM3M0FDOTkzRUIxMjBFCis6MTBFNjUwMDBFMjIxREQxOTZDMUYyMUU1RkY0MzMwQ0VCOTc3RkU3QTQ4Cis6MTBFNjYwMDAwOEYwRDM5MDdCNzYwNENCRUJGRTExRjNBMEQ2MkU5NjY4Cis6MTBFNjcwMDAzRkI3N0E2MzU4NTdBMDc3Rjg5MUZFODQ1QzBGN0E5OTc4Cis6MTBFNjgwMDBERUQxQUUyQkMzQzVGQ0MyQTAyMzg2RTM3Q0U2NjI3QzUwCis6MTBFNjkwMDAyOEYyMEE1QjU2NTgzMDFFQkNDNTExMzZCMzc4NDc4ODNECis6MTBFNkEwMDA4MDVFOUE1QUFFNjNGOTNGNkVBRkREQzBFM0FDQTZEMjhFCis6MTBFNkIwMDA1NzA5RTRGREM4Nzg1NjZGRjc2NkU5QUI0QTFBNkRGRjUzCis6MTBFNkMwMDBBNjdDQTIxN0Y3Mzk5NkZFQjRCNTAwRDYzRDVFQ0Y5RjYzCis6MTBFNkQwMDAwRjBDQzFCQUZGQzM1NzgxQ0Y5N0I5NzQxRUUwRUJBOUU1Cis6MTBFNkUwMDBBNUFDNkU5NEQ0QTY2MDFDRTdDREQyMEYxQ0YzMTJFNjQ1Cis6MTBFNkYwMDBFRjI3MjY4Rjk1RDJDOTc0RUEyQzI1RDYzOURFMzhERTZECis6MTBFNzAwMDBFQ0IxMjZEMEQ3Njc2RDUyMzVCMzlCM0QwMzY2MEM2N0RECis6MTBFNzEwMDA3MTFBRDRDM0E1NkE3ODJDNzMxOUYwQkIyRkE2NTc3QzQ1Cis6MTBFNzIwMDAwQTcwQkVGNjFBODY4RkQzQkI4QzYxOTA3RkE3RjlCRUE0Cis6MTBFNzMwMDBBMTVFNzRFMUUyRjRGMzlEMjI1NTFEODJDM0QwOTEwQkRBCis6MTBFNzQwMDBGQUYxOENBNDdFNkY3MUFCMEVFQjAwMTZCNTRBMjQ0QzI3Cis6MTBFNzUwMDBCRjc3RkFBOUJEQjkyMEM3M0Y3RTYyNkZFRTlDODRGOUVFCis6MTBFNzYwMDA2OERGMTM1NzhCRjgxRThGNzc2QUUzRDdGREM1QUQ0NTc5Cis6MTBFNzcwMDBCRkYzOUI0OEMwMzRCMEE3RkZGOURBM0Y2M0RDN0E0RUExCis6MTBFNzgwMDAxNzhGN0JGQjdDODMxQ0UwNEZGMUZFREFGMTQ2QkIxOTRGCis6MTBFNzkwMDA3RDQ4OUQxMkM2NEQ0NERDRjZDNEUxOUY0Mjg2Mjg4RTFBCis6MTBFN0EwMDAzRjczNTdCRTlDNTgyNzJBQUVFMzM4REU2RTA2QkNEMUI1Cis6MTBFN0IwMDBBNTk4NUI1OUJCM0Y3Q0Y1Qzc4RkZGQzFGNThGQzBEQkM4Cis6MTBFN0MwMDA4OUQ2ODEwMzAwOEU4NjA2QUI0MkQ4RkVCRDIyQjBGNzAzCis6MTBFN0QwMDBCNzExOEIxN0Y4Qzk5MEU5QjI4MkZDMTJFNzFGN0M2OTY4Cis6MTBFN0UwMDA2NjU3ODc4NTVFQTlCRDk2OTM1OTg0RUZERDJERkJCMUYxCis6MTBFN0YwMDAxRUYxNEJCOTBERjc2RkRFQUQ2QkM0M0FGNzMyMTdGQjY0Cis6MTBFODAwMDA1RUI2Q0RCRjdCMDFGQTM5MUQ1OEY3NEU1QUQ1RjA0RDkzCis6MTBFODEwMDAwNzI4ODA5RUFBMzFBMDlFMTI3MEJFNkFDRTVERThFRkU2Cis6MTBFODIwMDBGNjgxOUY0RDQwMzc5OUU1RUM1RUQwOTVDRkVERTUyODE4Cis6MTBFODMwMDBFNjQzQ0NFNUM0MDY3MTgxRTZCMTIxOUM4RkMwNEY5MEMwCis6MTBFODQwMDA3NTI3NTI5Nzg0NzYzMkQ0RUYyNEE1NjJERTM3QzRBRkExCis6MTBFODUwMDBDNDlBNEFFMjc5OTAyNEVFMUYxMzREREU4MzhBQUQxMEVDCis6MTBFODYwMDBGNDEzRjMwNDMxMDY3NTQwMEZEQjNCREEwQTU5REUxODY2Cis6MTBFODcwMDBFRDRGMTgxN0VFQ0YyOTU2MzA2RjAwRkQwQ0EzQkU5RDRCCis6MTBFODgwMDBERUUyNzRDOUVCM0JBNzhBRkJCNTk2M0VGMzJDNTM2MURECis6MTBFODkwMDA5RjE0RUQ5RjQzRjUyMEQ4N0ZDNEFCNTdFRDkzREE0QTIwCis6MTBFOEEwMDBFRDY2RjBFQjQ0MUU1QjI3Nzc5NEI4RDAwRkU5OEU0MkZCCis6MTBFOEIwMDA5Q0M1NTA2NkYyODA1RTRERDI3NTE0MDFERUI0Nzk2RDUwCis6MTBFOEMwMDBEQTJGOUZENTUzNjREQjQxQUY4ODdENTAwRDJCMjZGODlFCis6MTBFOEQwMDA2MTlGNDFEQ0NFRDhDRkZDQTM4NjdCMkFGMEZFODQyRTNDCis6MTBFOEUwMDA5NjI3MDhCNjFBNzExRjY3QjA1M0MyQkM1QzgzREYxMDRECis6MTBFOEYwMDAzNjYxM0NDNEQzMDRGODBBNTEzQjBDRkNDRjc2M0JBQkU5Cis6MTBFOTAwMDAwMzZCQkZDRUU2MEQ5MUM0Qjg3QUY0QjE3QjMxQUU2RTI1Cis6MTBFOTEwMDBDNTdDRTRERjlCQTczRDlGNEMwMTMwMzIyMTBGMzdDMEZGCis6MTBFOTIwMDBDNEVCMEQ1OURDM0Q5REQzOTNDMEJGRTA2NzkxRDc0RDNCCis6MTBFOTMwMDAyRUY2RTc4M0M1RkRFNUM2RDBBRjJEQ0VDQkE4N0YyMTRGCis6MTBFOTQwMDBCNzNERjg4REY1MkZFNEEzMUJBMEZFQzUwNEQ2M0M3RjkwCis6MTBFOTUwMDAwRUQzQTI3QTMzQkVBRkQxRUNDMUZDNURGQzM5OUM0NzJCCis6MTBFOTYwMDA2MUVBOTRGOEZCRUQzNzRDMUM4NDc1QkJCQzlFNjZENkZGCis6MTBFOTcwMDA3QUE4QzM3RkQ4NEM1NERGNEI5QzlGQTIxOTVGNEZDNzI2Cis6MTBFOTgwMDBCNzdBNDRGRjdCQUY5RkE4NjAxRTlCQjdERkZEMjFENDAxCis6MTBFOTkwMDBGQjNDQUM1NzhGODcyNDI4RjY2MTlBN0FCRUI3MkU2QjYyCis6MTBFOUEwMDBDODgzRUJDN0Y3RTg2RkFBQ0ZGN0JBQzZGNEU4RjEwNzU4Cis6MTBFOUIwMDBERTlEREEzNkQyMDNGQ0Y1MzlENjQxMEI3RDFDNzRCMEVFCis6MTBFOUMwMDA3QTE4QUREQzNBRTA5Mjg0RkQzQjA5NTRFQzlBOTkzNTEzCis6MTBFOUQwMDA3ODdFNDMzQzhGREQzNUNEMDdFNzU4ODgzQzc2NzBBNUJGCis6MTBFOUUwMDAxRkVCQTE0MUZGQkI1MEZGOUZGREYwMTU4MEQyRjREMzc4Cis6MTBFOUYwMDA2OEZGMDdCRjUyNTg1Qzg5REExMTEyQTU0MzUzNTcwNUM3Cis6MTBFQTAwMDBDNjRGQTEzQzE3RjRBNkMwRkY2MkFFOTdDMDU2MDdGQUU2Cis6MTBFQTEwMDAwRTZFQkRFRDA5MUQ3RDlFRUJGNkZEMDc4RUNCRkQ0MDE0Cis6MTBFQTIwMDBFRDdDNEZCOUQ4QkU4MTYwNTFFNTY2OTAwN0U0NzE4OUVECis6MTBFQTMwMDA4MERFNUU1N0Y0MTlEQTE5MEQyRjRDMUM5MzU4Q0ZCRkE2Cis6MTBFQTQwMDBBOEYzMTE1NjBGQkU1M0RGRTdGQTRGQjk5ODNEREFGMDNECis6MTBFQTUwMDBDMjczMTgxNzNEMUQ2NkRCODg2QTk1RjBEQTcxMTA5RjQ2Cis6MTBFQTYwMDBBOTk1QzFEMjIyQTVFMTlBNTlBOEZGNjdEMjc1RDA3NUEwCis6MTBFQTcwMDBGRDg2REIyNUMxOUQzNzg3NjA3RjQxOTBGRTA1OTA2RDQ3Cis6MTBFQTgwMDBGMTJGNDA3QjdGQ0I0QzkzMTVGMjQ4QzFBMjM5NEI5MUJCCis6MTBFQTkwMDAxRjZDMTYxRkFDNUYzQkNGNzgxRUZDMUUwQkM2MkRENzFDCis6MTBFQUEwMDA3NUVBQUJDMTZFMkFBMzc2RDJBRkU4N0M3MzUyQTc1NDQ1Cis6MTBFQUIwMDA3QkE5NUNDQUQyRUQyRUY5MzcyQkQ0MEZGNEFEODdEN0UyCis6MTBFQUMwMDA2NzMyM0REQzIyRjk0MzM3OTU2MkJEMjc0OUFDNDdDQTFFCis6MTBFQUQwMDBFQjY0RjZEODQ1OTc0MTE1ODdCRkU4NjI3NkUyRjg1MEI3Cis6MTBFQUUwMDBGNzA0QTBCOTk3OTQ2ODEyRDhDNTQxRTJGQjE0RkM1QzA2Cis6MTBFQUYwMDBFMkI3N0E2MDFDMzgwMTAzRUMyQ0M3MkEwRkM2ODU0RDlCCis6MTBFQjAwMDA4RUU4MEY0N0EyRERBNEEwOUYyMUZDODg3MzJGQjAzOEE4Cis6MTBFQjEwMDBEQTUyNzdDMEVBODZGODhFMkVGQUEzOUIwMDZFM0Y2NDI1Cis6MTBFQjIwMDBGQkFCODlDMkU0NERFRUNERDY1MTEwRjczMjNCQTIzRjhDCis6MTBFQjMwMDBBQUY2NjAxRDExQzYxRjA2NUNERDgyNzg3OEM5NDE2QzlCCis6MTBFQjQwMDAwMDlGMDlBMTFBNDU0QUQwMzM0MjZFNEM4OEVGNjM3Mjg4Cis6MTBFQjUwMDA2MEJDQjU5MjhCOTdDMTE0NUIxRjlBOTA0NDVCMkVBNjQ0Cis6MTBFQjYwMDBGNUQ4MDU4N0ZGM0E0MzgxOUJDMjVFOTA0RDAxRjQ2NzVCCis6MTBFQjcwMDBBQTY2NTJGRjEwRTg3MjRERUM5MDBDRjE3RDQ3MzdEQTJGCis6MTBFQjgwMDA4QkY1MUQxMjdFQTdCRUU4OTc1OEU3Qjc4NEQ3OTNDNUNCCis6MTBFQjkwMDBFQkJBOTQyOEQ2QjkxNUJBOTM3ODVDQUM4NUQxMDNFOTYxCis6MTBFQkEwMDA0NkZGOTczQ0MzRTA0RkY1MjZENkJGRjVEOEVENERBQ0Y4Cis6MTBFQkIwMDBFRTg4OEY2N0UwNzk4OTdBMUVBRkExODBDMkU3MjU2RTYzCis6MTBFQkMwMDAxMTZGNUJDREY1QUZBOEQ3NjNERjI1OEFBNzJDMzFCRUM3Cis6MTBFQkQwMDBCMDcxMUFENTI0MzgyRjRGMEFDQ0I3RDNFQzFGRTdBNjUzCis6MTBFQkUwMDBFRjlGQTg5NTU5NUNCQzM1MjkwQzlCNzIzNzRBREQzRUQ2Cis6MTBFQkYwMDA4ODVGODY0QUZBREU3Rjc0MTNGRkVFODAwM0IxNDk5ODdFCis6MTBFQzAwMDAzNzc4QTFCRjdBNjA1NkZGQkI3OUNDMTU1ODg3NUZEQTk5Cis6MTBFQzEwMDBGOUU5MjRBMDBGNTI0RDkwMUZBOUJDQjhBNDdBRTAxOUJECis6MTBFQzIwMDA4MDBGRTdGRjQzRjVDMDVFQzlCNzgzNUVFN0JCRURFQTNGCis6MTBFQzMwMDA3QTYwMkZDMzk3QzhBQjZBRUI4MENGQjkyMzBBQUJEQkVFCis6MTBFQzQwMDA4QjNFRjYwNEU4REQ0RTIzRDYwMzRFRUQ3Q0ZEMThDNDYyCis6MTBFQzUwMDAyRkE3OUE0ODA3RTY5OTM1RjZDM0M5QjQ5QjFCMDA0RjA2Cis6MTBFQzYwMDBFNzNGRjlGMEIxRkIwOUQ0OTEzRkVGNjVGNTg1NkE3Qjg5Cis6MTBFQzcwMDBBMDNGRkIxRjczMjMwOTdFNjI0OEQwQ0QzRkM5RkUxNzFBCis6MTBFQzgwMDBGMjNBQzhGREE5MzM1MkVDQTE0MjU4REY3RTlEQURBRkU4Cis6MTBFQzkwMDBGRDQ4MEZCQTQ1REVCNTlGN0E5NkFFQkVFQjU5NDREQzBGCis6MTBFQ0EwMDBCOTNBOUFBRkNBNzMzRDFBRTc4M0NCQ0I5QjZEODE5QzZGCis6MTBFQ0IwMDA3NjFGNzkzMzg1RDdBOTI5MTIxMzFEMjRDN0EwQ0E5QkIzCis6MTBFQ0MwMDAyOUY2QzJGRUYyNjYxMTdDRkVEQzEwN0NGRTQwQUZCQzcxCis6MTBFQ0QwMDAxOUFCNzc2OEQ5OUZFMTAxRkJCRUNFMTk3QkYyNDkwRkQyCis6MTBFQ0UwMDA4QzY3QzA3MTVBNUU0ODBBNDMzRDdGMEI4NzdGRERBNTY0Cis6MTBFQ0YwMDBFN0NEN0VFNUVFMjM2RkI2OUREQjZGMUYxNEM5MTEwM0QwCis6MTBFRDAwMDA4NUVCNzZDMkU2MUZFQTEyRjkzMzE5RkREOEQ4ODMzOUFDCis6MTBFRDEwMDA2MkZFRjhGQ0ZDODNDMzMwNUUzNDU3RTRDNTVFNjI3MTZBCis6MTBFRDIwMDBCNEI5M0NGRkY1QzFGNDQyQUM2N0VCMEZDRTczNUJENUQxCis6MTBFRDMwMDBGOTg1RDczODlDMkY5ODJCMzAxRTdGRDdCRjRGQzNGODRCCis6MTBFRDQwMDBENDAyODhFMzBGODRCODU2MUI4RkNCQjM3ODlFQTc5NTY3Cis6MTBFRDUwMDA5RDJCRTBEOTI5ODUzRDJDM0Y2MzkyRDEzNkI0Qzk3MEYzCis6MTBFRDYwMDA3RjA5MTVBMzVCNDBGNDg2MjhENTVDNDk2RjRCMTQ2QTc0Cis6MTBFRDcwMDBGNEI5QTc4NUI2QTlEMUFGQUM1NTQyMkVEQTZGRkJCMTc1Cis6MTBFRDgwMDAyNDhDOUYzREUwRjBFMDdDMUY2ODYxNzlFQUQwN0EyOTBECis6MTBFRDkwMDAzQzk4OEQ4QkU3QjU4NTVBNjQxRjhDRjMwNzM3RDNGMzA2Cis6MTBFREEwMDA1RkJCMEQ3RDlFMEZEMUEyRTdGOTEwRkVCRDI2MjI0NzY1Cis6MTBFREIwMDBFMDJBNEJFQ0ZBODA0REE5RUVDQjdFMTBFM0I1RTgxQkMwCis6MTBFREMwMDA0RDE1MDBFRjFDNzYyRUNDMDU4MzZGMjZDNjk3NTMwQjhFCis6MTBFREQwMDBGMUZDQTc5NkU0QzZENjZBRjYxQzc5RjY4MjM5RTZDNzM2Cis6MTBFREUwMDBFNzU3MkJDQzIwMjU5RTU0OThFRjdCNkU5RTVGRDNDMEI3Cis6MTBFREYwMDA3OTdFOUJCQUFEQ0QxMzY5RjdCQkNEMjU4MTIxRUU4MTFDCis6MTBFRTAwMDBCREY3ODNCREM3RjVERjg1NzVGOTFDMkY1RUNDOTdCNEMwCis6MTBFRTEwMDBFODNEQkZDRDA3N0E1RkNCQ0U3NzZBQ0E2NjcwOTM3MzQxCis6MTBFRTIwMDBEOEI1QzA1RTg1RTdGMDExM0JCN0UzMDg5QjdGQzFENTNECis6MTBFRTMwMDAwRTA5RjhBMUM1Q0VFOEY2MUY5REI3NzZCRUZBQ0M0MjAyCis6MTBFRTQwMDAwNjVGM0JFM0Q3OTZCNTUyOThDMThCQ0RGQjUyRTMyMkM4Cis6MTBFRTUwMDAwMzMzRkZCOTcyRjEwM0M5RkI2NDI0MUZERjQzQjkxMDA4Cis6MTBFRTYwMDA3QTUwOEY3Qzc3ODI4NEIzNTg3REE4MERFNUU2MUNFRTNFCis6MTBFRTcwMDBFNzE2Njc3QUYwRkI1QjZBMEI1MjIwOUYzQUY3RDQxQUM5Cis6MTBFRTgwMDAzQ0E3NjlDMkNENTY5QzdGQzM0QjY2RjRFM0VBNTc0NjY0Cis6MTBFRTkwMDA3MzgxOUVCNTcwODREOTJBNDI5RUQyRTc3MzFDODQ5REVCCis6MTBFRUEwMDBFRkQzQUFDRTBGNkFGM0JFNkI1M0ZERTMyMDFGRDQ1MEZECis6MTBFRUIwMDAxOTJEODRCQ0QxMjNGMjA3QkI1RjY3NzIwREY1NkFDM0JECis6MTBFRUMwMDBDQUQ4OTMxMDY3RkU2RTZBQTAwMkZBOURCREU3REQ0OUJECis6MTBFRUQwMDA5MjA3NUY0N0Y5NzY3RUZGMTBEQ0Q3MzlBNzQ1QkRCRkEzCis6MTBFRUUwMDA4REFDNTdFNzFGNDk2QjJBQzZENTQ5QkJGQTNFRUNDMzI4Cis6MTBFRUYwMDA1MkJERDcyQjFGQzlFQzlBOEQ4NkMwNTBCMDNCQUZCRDE5Cis6MTBFRjAwMDA4NkQ1NUI3Q0IyNDgyNjgwQ0Y0RkNDODRFN0Y5ODU5Q0MwCis6MTBFRjEwMDBGNTE2MjZFQTgxRDlGREUyOTVGNjAzMzhGM0ZBNTdEMUMyCis6MTBFRjIwMDBCRjFFRjA0QUYxNTlDN0YxRkFDOTczNTcxNjAyNUVDRkY2Cis6MTBFRjMwMDBFRUJFQjIxMEYwQkE1MURGRTYwM0JFMTg5ODFFOTgwMzc5Cis6MTBFRjQwMDBGMDM4MzlEMThGNzZBMUE4RjdCRDU0N0E1QjlBQzlGNTBDCis6MTBFRjUwMDBFMEJGNDgwRkZGNDA3Q0ZGMzJGNTMwRkM0OThDOTdCQzg2Cis6MTBFRjYwMDBGNDU3NTY5NzFCRUE2MkZCODI3QkUyNzRBN0YxN0NCM0VECis6MTBFRjcwMDBGMzVGQzkxMkM4RTFGRUM2QjM3MUZCQ0U2NTIyMjFCMEIyCis6MTBFRjgwMDBCRkNBMkFBM0Y4NUVEOTlGNjUwMjc2QTBCMDdGQjVGMzA5Cis6MTBFRjkwMDBERkMwRjFCQTIzRDM3N0MxMDVGOEU1NzFERDVBM0VCNjdCCis6MTBFRkEwMDAyOUZDMzlCM0IzMUY5NzMwNkU2QkYyODQ1MkM2QTE1RjUwCis6MTBFRkIwMDAzNTdGQjQwRUU1Q0FBRjcwQkYwN0U5OTI2Q0UwOUYyQ0I1Cis6MTBFRkMwMDA3QUJDMDk5RjlGRUI5QzhCQ0Y2NTUzMjQwMjdFNTgzREYyCis6MTBFRkQwMDA3RDBFRUQzNUUzRDVGNURCRkEzRDI1OTE0NEJGOTdDRUE3Cis6MTBFRkUwMDBFMzMzRjA0QjkzMUMzMTAzRDA2NzAzRDhENTc0OEEwREZCCis6MTBFRkYwMDAwQThCNkYzNzM4MDhDNjU1NEEzQkQ1N0VBMkM4REI2RUYwCis6MTBGMDAwMDBGMUIzRjM3M0I2NzQ0OTc4OEU1NkJBMjE5MDlGMEQ3ODk4Cis6MTBGMDEwMDBENUU0NkY3RjkxRTkzQjk2RTlFQ0M5QkYzNzNBN0RCQkY4Cis6MTBGMDIwMDA4MTBFMUQwNjkyOEJGNTdBN0FCMTFGNTFCRDhGQjNCRjQ5Cis6MTBGMDMwMDAzQUI4OTcwNTdGN0NBQkZEMzQwQkVEQTQyRjg4MUZFRDBDCis6MTBGMDQwMDBBNDAzMTA3QkMwQkNGREFENjg1Nzg5RkJCREVCRTBDMkRCCis6MTBGMDUwMDBBQTdDRkQwMkJFREY3NjAxREY2RjBCRjIzRUEyOTFGN0M0Cis6MTBGMDYwMDA4OUVEQkE4NDNBQjg0ODVGRjUwQzA5NzU3MDg5RUYyNUM3Cis6MTBGMDcwMDBENkMxNDU1NDcyQjI4REVGMDc1OTg2NzlGMjIwRTU5QkNGCis6MTBGMDgwMDAxNUEzN0FFOEJBOEVGMDNGOUI2MjFGRTA3RUEwOUQ0NkYyCis6MTBGMDkwMDA4Q0NGRDVGMUZBREM2MEVEMDlGNDdCODJCMEJGODhGMTRBCis6MTBGMEEwMDAzN0FCNjNFN0U3NTVENDUxN0YxMkVCOTQzQkQ0NzVCQzgzCis6MTBGMEIwMDBFN0ZGQzlGQTQ1RjRFQjJGRUVGRTY3MEQ3RjhCNzU4OUVDCis6MTBGMEMwMDA3NUQ0NzU0OThDMUYzNUYzRDRGQUQxREFGOEI5RjA4M0M5Cis6MTBGMEQwMDAyRjU1Q0VBNTY0RkQ2QkU1NUM1Njk2QTBFRjdGNENDRTE4Cis6MTBGMEUwMDBGNUNBNDMwQzhBQTU3OEZGMDk3OTg4OEYzRDZERTkxMDMwCis6MTBGMEYwMDA5QTZDOTUxOEJENEVEMjU5N0QyQ0NGQTk2Mzc1MTBEQTQ0Cis6MTBGMTAwMDBGQ0FGNjcxMkU2MzU0NURDRDdGNEJDMkVCQzNBMUZGQkRBCis6MTBGMTEwMDA2MzVFQjc3RTdGMzJENjI1RDQ3QTZBRDE2RUQ3RTYzQjVFCis6MTBGMTIwMDAxNzkzREQ5MzAwMDU1RjkwMjNCODhGRUQxRkFEMkZBOEQ3Cis6MTBGMTMwMDBDQzhBRDcxN0U0NUY2NjdEQzE3NTU5OTc5MUVGN0NENTZFCis6MTBGMTQwMDBGQTc5NUEyMDgxNEUyQThCQTkwMzUwREM3RjFERDk2RDk0Cis6MTBGMTUwMDA5Q0VFOTI3ODFEOEE0OTA5MTE3QkMyRkJGREJENzc2NzQxCis6MTBGMTYwMDAxNjhCMUZCRUNBRUI5RjFFNEU0RUMyRjMxNzVDMDZCNjJGCis6MTBGMTcwMDA2RkMzMjVCMzNBQUQ1Q0I3QkYyNjZCMENFODE1ODZDN0U1Cis6MTBGMTgwMDA5RkJDNzAxQjgxQkFDNzlGRTgzQkYwM0M4NDUwQkRENTQzCis6MTBGMTkwMDAwQkZBNTBDNEFEQzRGOEJGRTJGMUQ0NEJFNTlGQkJGRUZGCis6MTBGMUEwMDBDOUZDRjM2RDcyMjMyNEJFNzdBOUY5QkE0RDE0MDYwOTgwCis6MTBGMUIwMDA3Q0E1RTU4M0ZFREVFQjRGQUU2Q0M4RjJBRkNGNDJCOTYzCis6MTBGMUMwMDBFNTFCODE3OThGNEI5NDQ3NDlBNTU0NUU4M0JFREY2MzZECis6MTBGMUQwMDBGNDgwRkY2MUUyRkI4QkM4N0FCN0NBN0Y5RkZCNzAwRTk5Cis6MTBGMUUwMDBFQUMzNEZDQ0NDMUYxMUZCQTBDNEZBMUZFRjE3REU3RjgwCis6MTBGMUYwMDA5RkJERjgxN0E3RkY0OTU4Q0ZDOTBBMUZFRTdCNzgyMDlCCis6MTBGMjAwMDA5OUU5OTVEODUzQUNDRTQ4QkIxRjQ4QUI0RkM0N0UxNjg2Cis6MTBGMjEwMDBGMUJENEUyMUNGRkU0NUYyRjRCNTdGOTIzQ0E1RkExNTIzCis6MTBGMjIwMDBFRDhEN0VGM0JBQkRERTBGRTE3N0NCMkFCQjdEM0NERkVGCis6MTBGMjMwMDA4NUZCMzlDNEJDODJEREFDM0VFRjZEOEUzRjcxRkY1OTVBCis6MTBGMjQwMDBBRTc3MzNCMzdEQkYwMzNDOUM3REM3NjQ4MjNDNkE2OTYzCis6MTBGMjUwMDAyOTkzOUYwRDdFMkJFNjIxMUEzQTU4NUQ0RUMzNEE4MkIwCis6MTBGMjYwMDA3MTAzQjFFRjc3NTY0NjIwMEE3MkVBODE3N0FENzg3RTU2Cis6MTBGMjcwMDA2QzQzRTdGNkQ2MDJBQzU3MDhBMDlENzhFRTFENzZERjBBCis6MTBGMjgwMDA5QzExMzgwOUUzMDc1NzQ2NTVGOThFQjI4QjlGQUZBOUY5Cis6MTBGMjkwMDAyRUM1RjlBMkRGRUYzMEFBRjc1MzE5QjI5OTNGMkZBRTZFCis6MTBGMkEwMDBCQTZDQTFCN0E5OUY0M0RGM0I1QkNCRUFDQTgzMEU5RjMxCis6MTBGMkIwMDBBRDAyRUIxNDU4M0MzREM5RDM4RDcxRjA4NjNEQTgyNEI2Cis6MTBGMkMwMDAwODE2QjlDMkYzN0JCMzkxNkUxQUY2NTQ5NEUwRjkwQkE5Cis6MTBGMkQwMDAxREU2MTIzQzQ3RTgzRDJCRkE2QjY3RUZDOTBDNDMzQzM3Cis6MTBGMkUwMDA3QkE5M0JGMDE3OTg2RjcyNjlGODNBQjA1N0YzRTg3NzRCCis6MTBGMkYwMDAyMDlFN0U3NkY3NzUyNTE4NUZENEYwOURFMEI3RjgzRTI2Cis6MTBGMzAwMDBEQTNCNENFMTY2QTk4NzFGMzdFQTk5N0UxNDdBRUQwQzQ3Cis6MTBGMzEwMDAxOEM3NEVDQzdCQjAzQUMzQUU2OTY0QkVCNUE3NkQ3NTU1Cis6MTBGMzIwMDBBOEVCMkY3NzY0NEUzQzAzNzAzRTkzQTVGMDNDMzlDQjlECis6MTBGMzMwMDBDQkU3OUJBODM3NUJEMDlCMEVGMzc5NUU3RTFBQUZBNzE1Cis6MTBGMzQwMDAyMDIxNTM0RjFENDVDMUI3RTdFNUM1RkM0NDVCRTRFNTBCCis6MTBGMzUwMDA5M0JFNjI3NjczODFDRDgwNzQ5MURDQ0FFNDA2QTE3NDk5Cis6MTBGMzYwMDAwMUY2RkFGODU4RjcwNEQ4QkYzNkE4M0QzMjFFRTAzNTRBCis6MTBGMzcwMDAwMEMwMEYzMTJFMTJGREUxNDhDODdGQTQyOUUzMjFGRjEwCis6MTBGMzgwMDBGMUQ4OEE1MTA3NEMwRTg4NDc3NTVGMERBOEYxQjREOUEyCis6MTBGMzkwMDAyQUMxNTU5RDk1RTEyRjgyRkE0QUEyMzQxNjAxRkQ1N0U0Cis6MTBGM0EwMDBCRUFENjc3NThGNkI5MzUwREZCN0U3RDY2MURERTNCOTBDCis6MTBGM0IwMDA3NzhEQUE3RDQ2QkRFNDM0NTlFRDgyQjg1MzQxRUI3Rjg5Cis6MTBGM0MwMDA2MkZFMjE3OThGRDQ2NzNERUI0MjcwMjJDNkIwRkUxMEY5Cis6MTBGM0QwMDBDNzRBNkVFRDBFOTU0MzVDRTY0MTg5OURDMTQ5NjcyRjkyCis6MTBGM0UwMDBCOTIwOUVBMEM4NjA3N0NDRUQ2NEZCREZFN0I2RDkyQkNGCis6MTBGM0YwMDA0RDI4NEYyNTk2QkYxOUVGNDAzOUE5QUNCRDVFMDY3RjU5Cis6MTBGNDAwMDA0RjY5MjI3OERFRERFQzZDNzZERUVERTA3NjlCMEM3OEUxCis6MTBGNDEwMDA3RkY5NkI1RDlGNzlCOTFCQjI3QkVBRTgwMDVDRjVDNkFBCis6MTBGNDIwMDBEODIxMjgxRDEwRjk0NDUxM0YyN0ZDQUJCODdDRTVFN0YzCis6MTBGNDMwMDBDMjBCN0RBNEI1NjM3QkQ5QUY1QzFGQzVFRDc4MEQxREY0Cis6MTBGNDQwMDBGN0Y3OUVBMDZGNDFDRjJGRUIwOURBNjEyRjRCMjZEQzM3Cis6MTBGNDUwMDBDNzI2RThCQTQ1RUMyQkY4OUFDNTg1RjM3ODdEQ0U4OUE2Cis6MTBGNDYwMDA3NTdGMTlDMUNFODExNEY5OTgzMEFCQUJEMjQ3RDc2NDAwCis6MTBGNDcwMDAyMUJDQTJENzg0NjBERDdCRUM3MjQzMzFDNkQzMUE3MDA1Cis6MTBGNDgwMDA5Q0I1RUNEQ0JBQkNENjgxQUJDQjRCRTE2QTIzMDA4MkU1Cis6MTBGNDkwMDAxM0ZCOTZFNDAxNUY4NjI4MUQwQ0VFODMwRThBQjM1OTk4Cis6MTBGNEEwMDAxRDk0QjIzNjA5RjFBNjZDQzAxM0JBODk2MjRGNDdCQ0VECis6MTBGNEIwMDAyOThGMzBGQzE0NjYzMzNBMTdGOTYwMTFGN0NDQ0MwRTYzCis6MTBGNEMwMDBBQ0NDMUU5M0IwRkY2Qzg1ODVFRDNGRTNGQkE0OTM1NzU2Cis6MTBGNEQwMDBCQ0JCMEJGNjc1M0RDNkUzQ0YwNzVFMUE4NkJGOUY3MUI2Cis6MTBGNEUwMDA2MUFEMjI0MTFDRUE4MkJEMjYwRkZDQkQwNzM4NUU5MzQ4Cis6MTBGNEYwMDA5NTZFNjJCMzI2RDJFNzAxQUNCRjJERDhDRkVBMDgxNUNFCis6MTBGNTAwMDA3RTBFOTZCMkQ2QjExREUwMzkzNjJEODA3NUM2NTdCNzNFCis6MTBGNTEwMDA0NEYwQTcyNzVFQjI5REM0M0MxRkI1OEI3MERGRjhFOUFECis6MTBGNTIwMDAxNzI0NjExN0E5RjRBMUYwRDdCNDdFRDg4RkIzRkY3NzYxCis6MTBGNTMwMDBGREFCMjdFMzcyRkEzMkZEMkJBMkY2MzNFM0ZEODVERjQ0Cis6MTBGNTQwMDBBOEY1MjMzNEVGRjc2N0ZGMTA1RjQ4NTU2N0YzMDJDNzRDCis6MTBGNTUwMDBCQkQwRUY5OTVDMzY4QUZBOUJGOEJFNkYxMjM2QzNGRUI5Cis6MTBGNTYwMDA4Q0M5NTA0QkNCRDY4Mzc1NDg5QjI0OEIxN0VDMjQ2REVDCis6MTBGNTcwMDBGRDUxQkMyRTg4MzQwRTYxNzUyOThEMjNEOTc5MUU4RERECis6MTBGNTgwMDA1N0MyNTVENDI3OTlBMTNFMjVCMTBFMzY5OUQ1MTc5OTYyCis6MTBGNTkwMDBBMTNFODVERTZGRUU3NzlGQjhBNzA5QkVERjdFOUY0RDQ3Cis6MTBGNUEwMDBFQzEzNjc3MUZCNkFDMkYzMTYzQjcwMUY3OUVDOTY2QzIzCis6MTBGNUIwMDBEQ0Y3MzNBMTlBQzUwMzUzRkQwNjE5RThGMkY5QkZFOTU4Cis6MTBGNUMwMDA3QzIwNzc2Mzk0NkZDMUJFNEExREU0NzM4M0JENjVBNjNBCis6MTBGNUQwMDBDRkExRUUyNUJFNEZCQzg2RjRCOTRGNUNENDQ3ODk3Q0UxCis6MTBGNUUwMDA3MUU2OTA4RDEyRTg5Rjc4REQ0QUIwNjdGRjM4N0NCN0VFCis6MTBGNUYwMDA3REE5MDdFM0NERjEzQUFBRUYxMjVDNjdBNTkwMzMyNjA3Cis6MTBGNjAwMDAzNUZFNTI3Q0FDNUZDQTRDMDNEQTE5RTk3MkUwMjlDQ0IyCis6MTBGNjEwMDAwQjZFRTkzNjAzN0ZFRUNFMkU0MEJDMzU5Nzg3RjExQzhBCis6MTBGNjIwMDBFNEQ0RTIzNjhDRTc4NkQzN0NFN0IyOUQzREY0MjNFNjUyCis6MTBGNjMwMDA0NzM2QjFGNTlGODdGRDY3NTJDRjc3Q0YyRkZBNzMyRUVDCis6MTBGNjQwMDBEODUzOTU1RDQ2NDY4NzlBNzk2Qzg5OUY1MzQzQkY0MzRCCis6MTBGNjUwMDBBRkJBMUM4NjdGQUZDNkJFMTU1NzVEOEVBNEFBRTMxMzUyCis6MTBGNjYwMDBERkVGNkY5RDgyMUVCRkNENkVEN0QyNTdBODkyRTNFNzIyCis6MTBGNjcwMDA3RDczOThENTNGQTlFOUVCQzBBQUVBRDEyN0E5MkMzOTE3Cis6MTBGNjgwMDBCOENBOEZEN0YzNjZBOTQzMDc3NTRBRTZEODZDOTA4MDRECis6MTBGNjkwMDA2RkU2QjRERDA4RTc5OTlDNEY4RUU1QzJGOTI3NkZFNzY2Cis6MTBGNkEwMDBERTc1MTNCNjlEQjFGN0ExN0QyQUU3NjlENjFFMUM3QkQ2Cis6MTBGNkIwMDAwQ0NFNDNGOTVCQ0U4ODlCRTBCQzkzRjNGMEFENEM0MjlCCis6MTBGNkMwMDBCMkI2MTVEQzE0MkE4NjdEMjZEMTM1RERBMDlGNEEzNUQ5Cis6MTBGNkQwMDBGNTJFOUE3MzFCQTAyRTEzQ0Y5OUIwMzI3QzY2RjBCQTI4Cis6MTBGNkUwMDA1ODUyQzVFRDc3Qzg1NEQxNzZCM0JCQzQwQkY1MEM1NjUwCis6MTBGNkYwMDBFMkQ5RDMwRENGQjM4REVDN0MwN0MyRUFCMDlBMDdFNzBECis6MTBGNzAwMDBCM0JBMDk0RUVGMjQ5QkM3QjM0OTM0MDRGNERCOUM2RkIyCis6MTBGNzEwMDBDN0Y3RTNGMjdBOEY5MUU3QjFEOEY3OEYzRUM3RjZCRDBFCis6MTBGNzIwMDA4OTdBNUY0MjZDMzk2MEY3NTgzRDQ0RDUxNkU3OUUxMEUwCis6MTBGNzMwMDBDNTk2MDNFNzFDMzQ4Qjc4MjE2RkZGQzExMkI4M0EyN0I2Cis6MTBGNzQwMDA0MUZGMUU5RDc4NzczMUZFOEVDQkYzRjcwRTgyRjU0RThBCis6MTBGNzUwMDAzNkE4Q0ZDMTE2RDc5NzcyMTk3RDlDRTdFNzQ1NkVCM0RGCis6MTBGNzYwMDAwNDI2QzEzOEM3OTI2NjRGODIyMzc4NjdBNjU1MThFQ0U1Cis6MTBGNzcwMDA2OEE3M0RBNTAzNzlFNEU0NzQ2MTlGQzFFNjY3QUZGMjMxCis6MTBGNzgwMDA0QkYwRkIyOUUyQkM0NjY3NDBDMTc4MDAwOUI0RUI0MDZFCis6MTBGNzkwMDA3RjNBNEZGQUIxQUVCMENFMTRDQjU1Mjg3RDE5NEQ4MUNBCis6MTBGN0EwMDBFOTM5OTA1N0FDMzk3RTE3RTYxNTMzOEZCRTBGNzUyMEI3Cis6MTBGN0IwMDA0N0Y1NkQxMzUyNDA1RkU0RjNGMzMzQThFMzE3QTJFRDZFCis6MTBGN0MwMDA0MzU5NzlFOEY3QzVDRjc3MUQyQ0ExN0M5ODNBODNFRDkyCis6MTBGN0QwMDBBNzlENDIzQTE0OENCRkQ4RDhGRUFFNDlBNUY5REU2NjgzCis6MTBGN0UwMDBGQUJEQTlCQzhFNjREMjMxN0YwQUM0MDEyNkREMTY1NTRDCis6MTBGN0YwMDA1OEZFMjZBNjI0RDY2RDg4MkI3MUU5M0Q4OTdDNzA5RDI0Cis6MTBGODAwMDAyN0ExNERFMDVDNjg3NUZCMDZBRkJBN0Q1M0Y5RDc0MzdECis6MTBGODEwMDAxMkRCMDM4OEFGMUVFMEY4QTIxNEM1RkRENkExQjFDNDY3Cis6MTBGODIwMDBDNkQ2QzVFQTEzOUZFNjdFREIzMDE3MzFFNTQxRkRBNDVECis6MTBGODMwMDA0MzBBODE1RjMwNkM2RjI2RTY2NUY2OTYxMzZDQTdFRjdFCis6MTBGODQwMDAzNEVEMzAyNUFFN0Y4M0NDRjJCRTNDNkUyRTdFRkYwOUI4Cis6MTBGODUwMDA5RTgxNUU3REZFOUQ3NDg0NTdCQTU1NDY3OTBBMTE3NTY2Cis6MTBGODYwMDBBMEI3QjIyQzkzMDVFNEJCOEVDQjc5QjEzRjdENjI4QTAxCis6MTBGODcwMDAwOUNGRUQ2RDVFQ0E3RTM3NDI3QjZFNjlCM0RFRjYwQTU0Cis6MTBGODgwMDBFMEIxRjk2MzM4OTI4QUZBRDlDOTg2ODg5QzAyRjhBMjU1Cis6MTBGODkwMDBCRThGQTM0NzFFMEJGQTgxRjFBRTAxQkExRkMzN0U5RjM0Cis6MTBGOEEwMDA4QjUyRjlBMEM0NzNFMzlCOUQ2Q0FFQ0RGNzI5M0NERjZFCis6MTBGOEIwMDBDNzdFMjdBNDI4RkVCQjIxOTRFRDY4N0ZCMDI5MDlGMkZBCis6MTBGOEMwMDAwOUNCQjdFNTg4NzUxMkM1MDdGRERENDRCNEQ5N0VBRjE1Cis6MTBGOEQwMDA3NERFMTZFN0E1MTI1MkExRTBGOTQ0OTJFOEQ3ODRFRDUwCis6MTBGOEUwMDA0Nzc5M0ZBOUVCRjUzRjAxN0QwQzRBQTFFQkExRDdEN0EyCis6MTBGOEYwMDA3MjNDNDhEQzNGOTU4RjZFNDIzQUIxMDYzQzQwMjdERUIxCis6MTBGOTAwMDBBNEJFRjcxRjc1RTQzMDNCNjI2MjRBQjkwQkUyRUJDRDRGCis6MTBGOTEwMDA2RUFGMEJFQzJBMDExRjcxNUY4QzJCOUU4QkVGNzlEMzlFCis6MTBGOTIwMDBGQTFFRjczNTJFQUYzQkY4M0U2OEVERjM5NzczNjRGNTlBCis6MTBGOTMwMDA3N0Y1NzQ1Q0VCMzc3Q0Q3QTlGRTZFRkNCRDlDQkVERjBGCis6MTBGOTQwMDAxM0Y3NDU3RkZDNTlBRjMyRTAzMzA2QjcyOUJDNkU5NkZBCis6MTBGOTUwMDAxNEE5RUI1RDQ4QjlEN0M0RTRCREJBQkU2NUIyQjREMjUwCis6MTBGOTYwMDAwREZDNzk5REE5QkUyQjRBREY3RjlERDNDOTY0MzlGMDc4Cis6MTBGOTcwMDA0N0M4MzdCQzNFQkJGMDIwRjA2NzM1RkMzMDAxMURFN0JGCis6MTBGOTgwMDA3QTEyNTkwM0M0NzJCRTIyRjAxM0ZCNDA5NDE3Qzc4MDQ5Cis6MTBGOTkwMDA4RjFBNzQ4MTIxQTlCNEZEODlCRTZERDBEMjdDRTRBRkU5Cis6MTBGOUEwMDA3NzcyQzZGNDlFOUZBMEMzRjgzQzI5RkQwMURFMDVGREQ5Cis6MTBGOUIwMDA2OUU3MkRFODgwRENEODgxMDU4MkRCNDgwNEFGMkVDMkUwCis6MTBGOUMwMDBFQUIyQTlGRTYyRjVENzlFOUM5RTc1NTFFMjlDNjQ2QURDCis6MTBGOUQwMDAxQzA0RkFGREY1QTYxMENBOUZDOUY2MUY2MTFEREFGOUNECis6MTBGOUUwMDBCQ0MwMzk5OEQ3Q0M5MTlGRTJGOTQyQzQ1NTgzRjYxNjMyCis6MTBGOUYwMDA5REVGRjk3RkU1N0NBMTgyMDhFRTBCM0I1MEQ4N0JCREUzCis6MTBGQTAwMDBFQTkxM0YzNkE4RUE5MUM1RkNCNDdDMkNFNjExMjRFQ0JGCis6MTBGQTEwMDBEQ0E4MDk1RERCRDFCRTBCQ0VCMDdBNjFERjQ4MTBFQTBECis6MTBGQTIwMDA2QzRCMzE5Rjg2NzVDQkZCQjg1RjE2OTI1OEZENzAyRkRCCis6MTBGQTMwMDA3QkIxRkZCQTY1NzY0RTQxQkQ4RDlEMUYyNENFQTFGQUU0Cis6MTBGQTQwMDA1RTgxMzg1Rjg4Q0Q5QkNBMkY3RUJFMTBCNkRCNkIzQ0QzCis6MTBGQTUwMDBFOEZGQzVFREM2RjlDQzBFQkRCNkQwRDIwMkU3MzVGNjRCCis6MTBGQTYwMDAzRTY3ODhDNUY3Qzg1RUEzODdEQjg5QThCRkRCOTNEOTRCCis6MTBGQTcwMDA3NzNFMzFCMzNBRjkwNDM5NEVBNEY0OUVGM0NGMzZFQTE3Cis6MTBGQTgwMDA5OTNERThDRENENjc3OTQxRDk1QjA2RjhEODAyNzkyQjRECis6MTBGQTkwMDA1REVGMzhFNEMwRjRDMEU4NUNEQTZGN0VCMTJGMTc3RTBBCis6MTBGQUEwMDA5QTY1QUU4MUM1MTkyOTVENkRFRDI2NTA2RUQ3RjgzODdGCis6MTBGQUIwMDA5QzBCN0ExRDY5N0M0QjFFODg3NDM1MTZGQUNGMUNGNjk4Cis6MTBGQUMwMDAyOTNCMkZCNDg3QUVDNkU1M0E5OURDMDQyMUY4NkQ3QzVBCis6MTBGQUQwMDA3QTMyMkQzMDAxQzY2OUI3NzdCQ0Q3NTAwQTc5NEIyM0VCCis6MTBGQUUwMDBDMjVGRDQzMzZBRjkzNzYxM0UyN0Y1NkMzRTBFMzgxRjhBCis6MTBGQUYwMDA5OUNFRTdGQUJFRTY3MzI5RjQ5RDQ4NDcxOTg0RDE3MTdGCis6MTBGQjAwMDA3Rjc0MEVGQjA2OTI0N0Y1RDBGOTAwMTJCODFEQkUxQjlDCis6MTBGQjEwMDBBN0Y3MzVERTU2RERDMDNFRTZBREIzMjJERTZGOURDNUVDCis6MTBGQjIwMDBGMjMxQzEyNDY2QTc0MjVFQzY5RDBFRjEyN0Y2RkQ1QjQ5Cis6MTBGQjMwMDBENzMyRkFCOEQ1NkM0NDdBOTlENjU1OEZGOTE3NTJDNTkxCis6MTBGQjQwMDBGMjI5NUVGQTFGQ0M2NzI2RjE0RDg0OUY1OEI5RDkzNjQ5Cis6MTBGQjUwMDAwREY3ODFDRTk4QUFDRUI3Q0MzNDREQzZGQ0NFMkQ4NEZECis6MTBGQjYwMDBDNUQzNkU5REExNTdGRDdFQTQ4MEMzNENCMkZFNTNBOEExCis6MTBGQjcwMDAwRjk5QTlGOURENDgyRDVDQjRGOTFBMDE4RkU2RjI2RkVGCis6MTBGQjgwMDBFNkZCRkI3MkUzNzk5RDIxOTc5OUQ3NjlDOTQ1Rjk3NDIyCis6MTBGQjkwMDA2OTc5OUQ4M0ZBMTg5RTIzRjA5QTczRTFENkE1OTQyRjc0Cis6MTBGQkEwMDA4NkZDQjgxOENGNUI5Rjk4QkVFOEYxMERCNEZEQjMyRDZECis6MTBGQkIwMDA1NzYwRkJCNUY0M0I5NjFGODVFNzhGMTU2MkJCNEFGRTg1Cis6MTBGQkMwMDA3NDM2RjA0MTUxRDlBQzI5NzA0RUZENDEzMzFCQzc2NUU1Cis6MTBGQkQwMDAwOUI0QzNFRjhFQjg0NjE0OEMwMjk3QUNDQTEwQzM3RTJBCis6MTBGQkUwMDBENzhGQUMxRjBENzUzNTU1MTZENjNFNTJGMjVGQTNCMEI4Cis6MTBGQkYwMDA1REMwREJBMzVFQkMwMkRBMDdBNTRGNjdGNzk1MTcxQTU1Cis6MTBGQzAwMDA1NjI0NDVFMEY3QzVBQTUyNTlGRkE5QTM5RUNBODQzOEQ1Cis6MTBGQzEwMDA0MTU1MjU2QjBGRjM1NkFDMUQwOENGRTVDRjY2RjdBNTEwCis6MTBGQzIwMDA4RjdGQzlFRDYzNjE2RkY5MzlCRkVGRjUxRDZGODFGREZFCis6MTBGQzMwMDA2NjdFQUJFNDg1N0QwNkZFRjJFM0VDNUMzMTEzQUI0QkY0Cis6MTBGQzQwMDBGMEZCNEExNDM4NzdCMkQyQzdFMjdCMTNBQzRENkU5MDBBCis6MTBGQzUwMDA3RjM3MDYwQ0E1MTBDN0I1NTlGMzVCRTA3Q0U3MDFFNURCCis6MTBGQzYwMDAxNTYzMDBERjEzQTgxOTA2RkE4RkYyRDVGM0MwQ0YzMzVFCis6MTBGQzcwMDBBRkZDMzQzNzA1RUQxMDM1NUYwOUJBOUQyNkY4QTk0QTY3Cis6MTBGQzgwMDBDRDM3NTQxRTc0MzEzQ0FBRjk4MThFRkIwQThFN0I5NUM4Cis6MTBGQzkwMDA1QTJGQzVFNUJCODY2RkI1RjREOEFGREUyNzZBMzkxODkxCis6MTBGQ0EwMDBENzRGNkIzQTkwMkVCMzA5REI0RkI0MERFODk0RjFFRkM4Cis6MTBGQ0IwMDA2RjYxN0UwNkI5REIwM0Y3RjMyNEVGMTU1OEE4RDE4RkU3Cis6MTBGQ0MwMDBGRDIwRTYwNzY2MEYxOUQ1N0I1RUYwNDcxMUY2MjI5QkYzCis6MTBGQ0QwMDA4MUNEOTYwRURGNjVDRkU5N0IzRUY4MzEzODMxMkZGQUMyCis6MTBGQ0UwMDBGRDEzMDg5RjM1NkMzRURCQTQ0NkZFRkIyMkNDMkUxNzhECis6MTBGQ0YwMDA3RTZGODM1ODZGQTc3QUJENjUxNkI2MkZERTQ1QThEQ0U4Cis6MTBGRDAwMDBDMUQ4N0RDOTE1REYzNEVGMjBEN0IzMzM0Q0ZFMDc4RDQyCis6MTBGRDEwMDAzMkZDNEVFMTVDQzRGMzZEMjRGNDFDRDgzN0VGNTgwMjdBCis6MTBGRDIwMDA3Rjg0RjlFOEU0RDBGRUE4MDRCRjBGRTJDMzdDMzJDNUFCCis6MTBGRDMwMDBFMzE3NENBRTMzQkM4ODc5NjlFMUQxRDA4RjVDRDVDRTY2Cis6MTBGRDQwMDA1QjBCODcxRUZDNzRBMzdERTZFNkJGMjMxODVGOTc2NkY2Cis6MTBGRDUwMDAzRENERkM3NzA0NjIyNTQ2NTVEREU5OTExQTU2NTcyQkI3Cis6MTBGRDYwMDBFNjc1NDQyMjQ1QTgyNzI1MEJFNjUxRTM3MTI3QUQ3Q0IzCis6MTBGRDcwMDBFQjY3N0Y5Q0QwQ0Y2MjlFNzdGM0ZENTk1RkNBNENFRTU0Cis6MTBGRDgwMDBEREFEOEJFMDNDRjNBQUJCQ0QwMEM3RjJCQzAyNzYzRUYyCis6MTBGRDkwMDAxMDlGN0Y3Mzc5MDhGQjE5NjRBOUNGM0M3MTc5OUUyQzYxCis6MTBGREEwMDBGMjYwQTRDRjczREMzQ0Y5NTZFMDhCM0I0REZDREMzQUFGCis6MTBGREIwMDAwRDVEMTA0REZFQUMzRjNBMTFGMUJCNEFFRUI3QzRGM0Y2Cis6MTBGREMwMDBBOTlBNzNFMkU2OThGQUNFOUI0OTE0QkU1OUE5QkRGMUVGCis6MTBGREQwMDAyMEYyNjkzNzY4RTM3NEQ3QjFGOEQ1MEQzQzRFMzdBMUVFCis6MTBGREUwMDA5QUUxMjc3NTQ1MzJGQTc1QTlBNTQ3MTUzMkJDRTczQzVCCis6MTBGREYwMDA2QjgxQUYwQjhFNDA1NTFFRTYzNUEyNjMyMDhFRjBFNjc4Cis6MTBGRTAwMDA5ODlGNjExRTQ5OUMxQkE5ODU5RjNGNEYxNkYxQzY0QkM5Cis6MTBGRTEwMDBFMjk3RkVFNkZGMDc4QjdGM0E3Q0Y3MTNBOTFCQ0Y4MzlGCis6MTBGRTIwMDAxQkVERTZFNzkxOTI0MDNFRjA5M0REOTY1RjAxRjEwNzBFCis6MTBGRTMwMDAyQTc3MkY1RTA0NjcxNDFFNTFGQ0VFNzQwNjZFODdGNzU2Cis6MTBGRTQwMDA2RTIzRkU4OTUwRUI5RDVBMUREMEIzRjgzREMxRjhGMUU5Cis6MTBGRTUwMDAzMkVFNDc0RUU0RkFGRkIzNjdEODdFRkQyQURGRDA0NzgzCis6MTBGRTYwMDBDNzgzN0Q3QTU4NEZDMjFFQTgxQjY3RjBGOTZDQUIwRTkyCis6MTBGRTcwMDBGNUZFQzIzNzQ2QkJDMDdFRkY4MEQzRTM5MDREQjJFQUE5Cis6MTBGRTgwMDA3NzA4ODc4NjJEQUE3MzNEODZFRDRDNTVCNTg3Nzc2NDM0Cis6MTBGRTkwMDBBQUZBOEZFQzJDNTAzRDJGODk1Q0ExN0EzRUZBRjAyODBCCis6MTBGRUEwMDA1NTdCNENGNzM4NTVGRjJCOEY1NUFBREE2M0EzNTM1NDczCis6MTBGRUIwMDBGREFGM0EzNTVERDVCRTNBNzZCQkZBNUM5MjkwQUZCQkVBCis6MTBGRUMwMDAyODFEN0UzRjgxQzFFM0RBQUZFNkE4RkE5RjQ5OTk3NDA1Cis6MTBGRUQwMDAxOEY4NzJERTdBNTYyNzVFNDE5NkE4REU1RkEyQUJDM0ExCis6MTBGRUUwMDBGQTZCRDJDNkVDOUM0NkZBMUZERjE3QUY2MDdEMUFCNURECis6MTBGRUYwMDBFRkUxQTcwMTE2NkU1MkRCNDFCNTVEMUJENjgwMkNFRUZCCis6MTBGRjAwMDA3NTFFODZDNkRFRDFEQTM3NDMxQzM1NzA2QzM2NzkyNDBGCis6MTBGRjEwMDA4RkZGQUVGODk1RTQ0QUZFQkIzNDVBQkNFMkY5MDI5RjZCCis6MTBGRjIwMDBCREE1NDMzRjYzRDkxQkNDRkU1RkI2OEJENURGMTU5MkQxCis6MTBGRjMwMDBDMTAzNzBERkQ5NjExRDA5NEI3MENFNDJFM0M2RjE1Mjk3Cis6MTBGRjQwMDA4RjlEQTM4NThCRDFBNUM2QjNEOUEzQzY3MzUyOTExQTMxCis6MTBGRjUwMDBDRkM5NUUzNTlFMDc5NEFCRjE2Q0Y3QTlGMTlDNTZBRDA1Cis6MTBGRjYwMDBDNkIzRDNBRkM2NzNDNjRDMzU5RUREMDEzNTlFQjM2QUFBCis6MTBGRjcwMDBENTc4Q0U2OTU0RTMzOTZGODUxQUFGRjlBMUM1QUFFN0UwCis6MTBGRjgwMDA0MkFFMEU2QzVEQTZCQURGMkM3NTk0NTE0OTRBRTZGOTczCis6MTBGRjkwMDA2QkYxN0M4OUMxNkRERkVGOTMzRTA0RkU0M0Y0M0ZDNkY1Cis6MTBGRkEwMDBDRjhENThDRkJGODBFMjFGRUFGOUJGMjBFQjBGNDE0QTQ3Cis6MTBGRkIwMDA1NjRCMDcwRDlEMUIzMEVGNzZCOTc0RjA3NjFFQjc1Rjc4Cis6MTBGRkMwMDAwNUZFMkZEMTdFQTVGQUYyQkRCQzMxNjhFN0JDMEZGMjY5Cis6MTBGRkQwMDA2MUU2MTBFRTk3RjhGQkI2NzM4NERDNEFCNDJCMTJGRDkxCis6MTBGRkUwMDBFRUZFRTQ1OTJGM0RDQUZERjA3RUY1QThDNjBGN0YwNzRGCis6MTBGRkYwMDBBQTlGRDA1RTVGOEY3MUFGNTk5Q0FFM0Y4NzVCNjMyMTM0Cis6MDIwMDAwMDIyMDAwREMKKzoxMDAwMDAwMEVFRkEyQ0RBMDdFRkQwODk5NEQzNzlCRDAzRjMxRTAxMDEKKzoxMDAwMTAwMDc2QzIzMDhDOTNEQzQxMjI3QTNDM0YxQzJBNDY3NUE4N0MKKzoxMDAwMjAwMEJGQjA0RUIzODZEQUVENzA5RENCRUQ4N0Y5M0M4RTYyQTIKKzoxMDAwMzAwMDM0MDU4OEM3ODlGMTkzQkM3NEY4NkU3NjM3RUUzM0ZCQ0MKKzoxMDAwNDAwMEJGMTdGNDRGMkIwMDgwMDAwMDAwMDAwMDFGOEIwODAwM0EKKzoxMDAwNTAwMDAwMDAwMDAwMDAwQkU1N0QwOTdDOTRENUI1RjhGREU2QjUKKzoxMDAwNjAwMDlCMkRDOTI0OTkyNDEwMTIwMjYxMjYyMTBCOTA4NDQ5RUEKKzoxMDAwNzAwMDU4MDQ0NTFDOTY2MEQ0ODA2MTkzQzU4ODMzNDk4MDkwQUMKKzoxMDAwODAwMDg1MDREMEQ3QjRBNUNENDBDMkEyODUzNkI0QThBOEE4MEYKKzoxMDAwOTAwMDAzMDIwNTBCMzQ1ODA0RDQ2ODg3NDVBNDRGNUI2MzZCOTcKKzoxMDAwQTAwMEFENEJDQjRCMDA0NUY2MThCNEQyM0VERkYzN0ZDRUI5NTMKKzoxMDAwQjAwMEY3NjZFNkZCNDgwQUY2QkRGN0ZCRjVGN0ZCRTNFQkJCOUIKKzoxMDAwQzAwMEI5REZERENGNzZDRjNERTdEQzNCRUNFRDM4QzYxMjE5NkEKKzoxMDAwRDAwMEZCMDZGRkRENzE3RENBOTg4RkIxREU4Q0ZEMDFGRjg0QzgKKzoxMDAwRTAwMDdBMjMxQzQ1NTYwN0U0Mjc1QTFEMEYzRDA2OUY4RTE4OUMKKzoxMDAwRjAwMDU4NzlCMzBERkUyODg0N0U0NjQzNkEyQ0NBOUU5NkRENEQKKzoxMDAxMDAwMDVEM0YyQkExMzE2M0FGMkExRTBGMUIwRUJEMjY1QTVEMkEKKzoxMDAxMTAwMERCMTVDNjg2MjQzMTZCNjIyQzE0MjdGODUzQTY0NTMyQjIKKzoxMDAxMjAwMEQ2Qzc2MUEwN0FGMDRGNjFGMThDMERCNkQyREY2QzRGNkIKKzoxMDAxMzAwMERGRTZBNTMxQTlGODk3M0ZCNjI4RkJEQjhGOUJFQTcwNzUKKzoxMDAxNDAwMDI3M0I0NjA0RUJERjY4QkQ2NjczRjMxMjlDNjc0N0I1MzcKKzoxMDAxNTAwMENEQjVENUM5RDg3QjU4MDRFRDlFQkZDRjEyNTBBMzE4OUEKKzoxMDAxNjAwMEJCNjJCMkFENTVBMjE5RkIyMDYyREVGMURFMEVDNjlFNjcKKzoxMDAxNzAwMDA5Rjc2NDIxNUM2NkNGQkE2QjM1RTY5NTIzNzE4RUE1Q0QKKzoxMDAxODAwMDMwQkYyQkRFQjY5MTBDRTY2REIxN0E1QzU4NUU2NUY1M0EKKzoxMDAxOTAwMDBDODg4NzI1NUVFQUVGQzk4ODU2QTFDRjIyMEU3RkY4MkEKKzoxMDAxQTAwMDIzQkJBOERCRjlGM0Y5NEM1MEY4Rjg5Rjg0N0I0NkUzQjYKKzoxMDAxQjAwMDNBOEUxODVBOTM1RDA4MEY2M0VCNDg2Q0M3NkNCREE5NjMKKzoxMDAxQzAwMDlGNEI2NjBFOTc5RUUwMzAzRUEyN0YzMUFFQUJDQzYyNzUKKzoxMDAxRDAwMDcxQTlEMEU3Nzg4NUUzRjU0Q0RDODNGMzZBRTBDRkY5QzkKKzoxMDAxRTAwMDg2QTJGODgwQUE5OUY3OUQzNDZGQkI3NzQwNjIwQUY0MjMKKzoxMDAxRjAwMDZGMTJGM0I2RjYxNjcwNzc2NDE1NDVGNjNDRUYwNkVDMTEKKzoxMDAyMDAwMEJGMTdFNDdFQTBGOEI3M0IzOTJFMzE3RkQwMTdFMzdGQ0MKKzoxMDAyMTAwMDE0RjIxNkMzRDVGN0E2NDNCRTIzREJFMERBMEE0NTlCRUEKKzoxMDAyMjAwMEMzQTFFQjNDQzZERTExRjA3RUM2MDRGOTU4RkFCRTE2MzcKKzoxMDAyMzAwMEJGMjc4NEYzRjYwOThGMUJGQzBERDBCRTY4RkNDQjg0NkUKKzoxMDAyNDAwMEE3RTcxN0RCNjgzRDVFRTYzMDMzOTg1RjI5NzM5QjcxNDMKKzoxMDAyNTAwMEZFOUY4Q0ZCQ0ZEN0RBMDAxRkYzMUQxRTBGQzJFREMxMkUKKzoxMDAyNjAwMDM4NDNGMjdCMzQwRkNGOTBBOTMwNkYzNkU2RTZFODlGMzMKKzoxMDAyNzAwMEIxNzUwNjM2OTJCMTY5NzZCRTg0RjkwMjZFRDM5OURCMDgKKzoxMDAyODAwMDg0RTNDQzY0MUUxMzhFRkJGQkNCNjYzNzAzRkFGODNEODgKKzoxMDAyOTAwMEUwOThDMTdDNjczMTFGN0Q5RkMzRkM5NERFQ0YwMjU0ODAKKzoxMDAyQTAwMEZGMDFENjQ2Rjk3NzIzNzJGQUQ3QzFGQ0E2M0U5MTkxOTkKKzoxMDAyQjAwMEM2MEMxQUI4RkYxQkNFMTdFOEU1QzE1RTlDNUVDRUY2RjEKKzoxMDAyQzAwMDQxQjg2RkVDN0Q1M0Y0M0I1NUQwMEJGMEVCMEZCMTFGRjEKKzoxMDAyRDAwMEUwRDdFMUI5MjkyMTdDMzM5MUQzMEIzM0RBRDNGRTExNzYKKzoxMDAyRTAwMERGQjQ3NjQ2RTVCMEExOTg3N0RCMTI2MUZENzcwQTE0OUEKKzoxMDAyRjAwMERFRTlBRTJDQzQ3NUU2QUIzNkQ2MEJFMERGRUE1MEZEODYKKzoxMDAzMDAwMDE2MThCMzYwOUNCNzJGQUUwQkZFNDVGQTAwNEY1M0RDQjYKKzoxMDAzMTAwMDJBNDMzQ0JGQjkwMkJFNDBCRDM3NzM1NTNGRDJDNDk0OTcKKzoxMDAzMjAwMDREOTNDRTYxRkJDMjcxRDMxQkEzNjFGRDkzQkU2RTFCQzcKKzoxMDAzMzAwMDFFODBCNEEwOUZFOTU0NUIyNjFGRTMxQkY4REY5NzZDNzcKKzoxMDAzNDAwMEYzQzQxODQ4RUY0RUQ4Njc2NDMwRkZCQjA3NkFDQjBCODUKKzoxMDAzNTAwMEIzMjA2RjBERTZBNzMwNjNCMDFDQzYzRDhDNzAwMEZBNjkKKzoxMDAzNjAwMEE5RkI3M0VFRDg2MzIxRUQxODZCNTI5MTZGQjYzQTIyNTgKKzoxMDAzNzAwMDdCN0QzQTA0QjI4M0Q5RTA2RjcwREU2QTcxQjRBNzFCNEIKKzoxMDAzODAwMEZFOTFFOTU3RjVBRUIxQzc4MDI2RUY1MURDQkIxQzQ0QTYKKzoxMDAzOTAwMDE3MEUzM0QyN0Y4OTkxQjlCQkUzQkI4QjY5OEFBMDFGNEIKKzoxMDAzQTAwMEMwMkVDOEIzN0JDNTVDM0IwQkFGOUFBRkMwN0FEQjFDRDkKKzoxMDAzQjAwMDlFRkREOENGRDJDOTlGQ0NDM0Y1MzEyM0ZCRUQzMDgwNTEKKzoxMDAzQzAwMERCRTJERjAxRENBMEZDNTQzRDQwM0UwM0Y4QjNERUNBQjMKKzoxMDAzRDAwMERDMTZDNjNFQURCNzUzRkVCM0ZBMDQ0QUNGRDczQjI4NkUKKzoxMDAzRTAwMEJENTg5RjQ5RTU5N0VCNUQ5NDY3Q0VBMkQ3QjBERjkyRTkKKzoxMDAzRjAwMEI1OUYxQjNENTk4Q0FEMDk5Mzc4RTRGMzU4MjZFODc4RjYKKzoxMDA0MDAwMDRERkY5MTdGNzJDMTc4NkJERTM2NTFCRUJDQjk2OTUyMjcKKzoxMDA0MTAwMDA0QTRDQkZBOUY1QTE5MDFERjk3RUQ1MjVDRjhCREIyRTQKKzoxMDA0MjAwMEM1NkRCNjIxMUYxREYzQUM0NkYyNTlGODc2REIxNDE0RTYKKzoxMDA0MzAwMDNCRDVENzE0RTYwMTE2OUEzREIwRTgyRDFDNkZDNDFGQkEKKzoxMDA0NDAwMENGQzQyM0ZDQ0VENjhGQTJGOTlDQUI3N0QzN0NEQzJEMTYKKzoxMDA0NTAwMEVEQzdFM0EwRkQ4NUZBMDJDQTI3M0E4QkRFNDVCQTc0RTAKKzoxMDA0NjAwMEIzQ0ZDRDU4N0ZGMkVFNzY2MzEyOTRFN0JCMTUzN0YyMjcKKzoxMDA0NzAwMEY3NTgzN0YzRkIwMTdGOUI0QzdDQkZEODA0RkIwNUYyOTgKKzoxMDA0ODAwMEZCQjhFQzY5Q0YzQ0M0NTA5RTdCM0VDNkYxNjZDNjk2NzUKKzoxMDA0OTAwMEU2QzdDMUY3MjlBM0JDNDZBQzM3RUI2QkM2MzAyRkU5RTIKKzoxMDA0QTAwMEZCQzY3Q0NERTE1MTJERjA3MkU5NzU4NUUwNzRFOUMwQTEKKzoxMDA0QjAwMDkwN0I2RjgzRkU1RTNGQTEzMjE1RTZENTc5Q0Q0MEYzODgKKzoxMDA0QzAwMEVBRkMyMERDMEYzQjUzNTdCREE1MkZBNUY2NjEzNjRDNDcKKzoxMDA0RDAwMDg3RjQ2MTU5QjgzRUU4MDRENjlEQTkxODBENzVDMEZGOTAKKzoxMDA0RTAwMDE3RjY3QzI3MDFFMTJGQzdCRDEwREJGQ0Q3OEY1MERFNEMKKzoxMDA0RjAwMEZEODVDQjNCQzY5QTNGN0QwQUU1NjFCRjA0RDdBMzkwM0IKKzoxMDA1MDAwMEJCNkM2MkIzODkzRjU5NkQwNEVFODc4QkNEQ0NDM0YzQ0UKKzoxMDA1MTAwMDlFMjE5OEJGMTBDRTFFMkM4MkZDQzhCRDQ5RTM5MTdGNUUKKzoxMDA1MjAwMDcwM0M0NzQ2NTA5RUE1RUY3RDIyRTVGQjhFRTA3ODNCNzAKKzoxMDA1MzAwMEY2M0NEOUY5OEEwM0NCRkRDNENGQkJGNjNFRDNGNzY5QUQKKzoxMDA1NDAwMEM4NTVFRDVCMTU4RUYzN0ExNUQ2MzIwQUY4RTNENTBENTIKKzoxMDA1NTAwMDExMjRCNzVFMzVCOTRFRDZBMUJDN0VDNkU2REEwRUY1REIKKzoxMDA1NjAwMDdFRkVFM0VGOUUzQTg0RTlGQUVBQkNFRjQyMUFFMzhDOUUKKzoxMDA1NzAwMEE1N0VDQTdFQkE2ODMwQjY4N0ZEOUIyNUMyM0E3RjcxRDgKKzoxMDA1ODAwMDUwMDk4NEU1MzA5NkJERjFGMENBNDQxODZGRThFNjc2NkMKKzoxMDA1OTAwMDQzNUY0ODczQjcyOTBEOTgwRUU5NUY3MDAyRjdDRDNFQUYKKzoxMDA1QTAwMDRFMDdDMTdERDg2RUE3OUE4NDZDRDdEN0ZGRDExREI0RjIKKzoxMDA1QjAwMEFGNkJGN0ZCQUM4RDlGOEZFRkNCODJGQkZFNjBBNUY5OTUKKzoxMDA1QzAwMEZDMEEyN0QyRUJGQjc5MUU4MjQ3MTNDREUzQTU5NkU5RkYKKzoxMDA1RDAwMDdGQjg5RkUxM0E0MEEzQzA3OTdCQ0QyRURBNjc2MEI5M0UKKzoxMDA1RTAwMDI2Qzg1RkRBOUZCQUU1NTE1OEUzMDE4MzZGMEJFRDQzRUMKKzoxMDA1RjAwMDI1NUNFRkI4NTRFNDdCMTJFOUE1MUFFQUZCMjA1RjlENjUKKzoxMDA2MDAwMEVCOEJCQTE1Q0FBQkZGMzJEMDA1OTRDMUZBM0Y3QjY3QkEKKzoxMDA2MTAwMDAxQzI2M0YxRkVDNzI2RjU4NTdBOTdDNjMwOTcwMjUzNkIKKzoxMDA2MjAwMDJGN0ZFOUVBMjQ2Q0M3RkEzMzg2QUM3RDY5N0Y0M0ZDRUYKKzoxMDA2MzAwMDVDNjhGN0EzQUNGMTIzOTA0RThBRDQ2NjFBODdENUYwOTQKKzoxMDA2NDAwMDcxOUUxMEZCMTc2QjAzRTBDNDBCOTI4MzdBM0Y4MkNGM0QKKzoxMDA2NTAwMEY4M0RCNjI1RTY3MDEyMEJFMkE3QTY2NTg1RDMwOEVEMzYKKzoxMDA2NjAwMDg3N0JBQzJFMTVFOURGRTk0QkFDQjUwNUY3NDNEOEM3NUUKKzoxMDA2NzAwMDQ2M0I5MUI0Q0RBMjVGRkJGNEU0QTI2RkIxOEY5OUM1NjQKKzoxMDA2ODAwMEJFMjRGQjdCQzJDQzdDNjFEMDRGN0ZGOEFFRTAzRTZCREEKKzoxMDA2OTAwMEU2RkJFRjc2OTAwRjQ4QkY3MkZGODU3MUVGNzI4RUEwNzgKKzoxMDA2QTAwMEY2NkU5NEE3NDlCMEQ5RTZDMjNDOTM5RUIwOTAzQ0JGODkKKzoxMDA2QjAwMEQ5RjFBNURFNTQxM0NFRTU5MUQ0M0Y2NkM3MzVCQ0Q2M0IKKzoxMDA2QzAwMDA2RUIzRDFFRUU5OTg5RTNDQzE3RkIzNzMzQkExQzI4QTUKKzoxMDA2RDAwMEE3Rjc4NEJCRUY3M0QyN0VEODkxOEM2QjgwRkQ3MTJFMEYKKzoxMDA2RTAwMEU2MTdBQkEwNEZBNTg2RTg1M0Q2OUJEQjFGM0YwQzc3RTAKKzoxMDA2RjAwMDdCQjBGRENERDZEN0NCQ0Q2NTVGMUE1ODJFRDBDMUIyMTkKKzoxMDA3MDAwMEM3MkM3RTA2RjM2RTQwRjkwQUVCNkE4ODFDNjk0NTM5RUUKKzoxMDA3MTAwMEMwOEUxOUFBOEVDMzdFNzkzQjZGRDlENURGQjJDODNDOTMKKzoxMDA3MjAwMDkyMTMwRDhDNzUwQkFGRDc4MTlGM0QyMDNGMDIyMEVGQjgKKzoxMDA3MzAwMDNEQzBENzYzQUY3NUE4OUNERTVCOEY0NjBGNDc3OUM5NzQKKzoxMDA3NDAwMERDOTE0MDNGNzc1QzMzMzA0RkM4N0VBNkVGMDdGMDU1MTEKKzoxMDA3NTAwMDhGRUIxQkM3MjI5ODI3NjQ3Rjc0QjMxODMzRjIyREIzMzUKKzoxMDA3NjAwMEM1RkU3M0VCMTZGMzFGMjNGMDM3QTZGMzgzMDg5NDdGQkYKKzoxMDA3NzAwMENCQkVDQzIzMzlEOEQzQkE1RTEzRUJGQTM1QUUwQkQyNEQKKzoxMDA3ODAwMDRGRDI4QTM2MjAxRERGRkU4NUREODhFQkJCREQzODM1OTQKKzoxMDA3OTAwMDE5RjUxMzk4RjcxMzM4RUZCMTVGMThCNEYzRkUzQTVDMEMKKzoxMDA3QTAwMDkzQkZEOUY5M0ZBQzMwOUYwMUY5RjE3M0IzMUZGOUIxOTEKKzoxMDA3QjAwMDA1QjczOTgwNjNDQkEyMkMzRkYyRkQwMTMzQ0ZGQkEyRkEKKzoxMDA3QzAwMENDQTQ5RkI2NDQzMjFGQ0E5MTk2QTlGMTdFOUYxM0U1MkYKKzoxMDA3RDAwMDIxRTNGQTZCNkZDNkNCQzM0NEZCMzlGMUQ0QkVBRjA1M0UKKzoxMDA3RTAwMDQwOEFGMkUwRkU3MEQxN0ZFRDVCRDk1OEJFMjI4OUU0RTkKKzoxMDA3RjAwMDQ4ODNDOUJGMzYwNUZCRkY4MUVBREEwRTc4RkJDMDZGN0MKKzoxMDA4MDAwMEYwOTk4MDRFMzZDNjA0RUU1N0ExREY4RDlGQzczMzFDOEEKKzoxMDA4MTAwMEU3MDMxNjQ4QUFDMTcxQ0FDMzQ5RUVERTY2MzAzQzM4MDgKKzoxMDA4MjAwMEQ1ODZGNURDODlCMTAwRUYwM0ZGQUQ5MkRDREY5ODBCRDQKKzoxMDA4MzAwMDc5MUJDOUVERDlDREYwN0RFMzU0Nzc2MjM4RjYzMzM1QjUKKzoxMDA4NDAwMERFNDBGMzUxNTkyRDdENzdGMjc2MUY5OTc4QkRCOTAyQkMKKzoxMDA4NTAwMDVGMUYwQUZDMDA1RjEzREY3QkE2NDQxODkxNkU0RjNBQkUKKzoxMDA4NjAwMDRCREU3NTEyQkVERDg5MEFDQ0Y3QTlCMjM0ODY3MjczRUQKKzoxMDA4NzAwMDZFQzU1RDRFQTI5N0E2Mjc0ODdFQ0QxNjM4OTBGRDYxQzUKKzoxMDA4ODAwMDAzRUI0OEQ0N0ZGOUJGMzlGM0I3ODcyMTNFNjc5Njg3REEKKzoxMDA4OTAwMEI1QzMwRUM5M0UyODVGMTlFOTgwRjYzMzNENkFDMDAyMzAKKzoxMDA4QTAwMEYyOTRDREM4Nzc3N0U5NjcyOTM4QUU5QkM2QUQ2RTFFNDYKKzoxMDA4QjAwMDk0N0EyNjg0OUU0QjJDMjAyN0EwRkY0MzYxOUUwRjg4QUMKKzoxMDA4QzAwMDRGMEZFNTUyRjkyMTUwNEVCRTAxN0UzQTU1OTZCNjE3QUMKKzoxMDA4RDAwMEY5OEE5NUM5RjM1RkEwMTRGMUYwN0E4Nzk1RjRDRDlFNUIKKzoxMDA4RTAwMEU4QTEwMUUxM0Y1NEQwMjlFMjY1MzlDNzNCRTg1RDk0QjYKKzoxMDA4RjAwMDZGOTgzRDk4Q0UyNUNGOTkzOERERjhGNjg1MTE1RTBCQkYKKzoxMDA5MDAwMEE2NTkwOUNGOURCM0MzQjc1OEEwRkM0MTIxQjcxQTY2QjkKKzoxMDA5MTAwMDg3QkIxNUE4RDdGMDkyQzU2RjcwRDI3OTg3RUFGOTVFQzgKKzoxMDA5MjAwMDhCQTQ3RUFCQ0MzQzVGRjU2MjFBRDFEMzAxQjM3RkQ3RTkKKzoxMDA5MzAwMDBFMkM3RjNEOENFOEExMkE4QThGNUJGNTRBOTJBMDM3NjYKKzoxMDA5NDAwMEI3NzMxNThFRkI5QTg1RThBMDJBREMxMTRERTVGRjFFRDIKKzoxMDA5NTAwMDQ3NzQzMkQ5RUFGOTFCQzIwQkU4QUUxNkY1ODIyQTczNDYKKzoxMDA5NjAwMDIwM0QwNkUwN0I1MkQwRDU0OTY4ODNGOEYzRDU0NkQyQzYKKzoxMDA5NzAwMEJDODlFNTIxRUY2OUU4QkYxNUYxRTkzMUYzNzJGNjNENzUKKzoxMDA5ODAwMDk1Q0E0RkRBRjlGODI3RDdGMUYxOEI3RjUyRjkzNjAzODAKKzoxMDA5OTAwMEJDOUQyQzlBOTQzODFGRTY3MUIyMzY4MkY0QkYzRkQ3QzMKKzoxMDA5QTAwMEE5MDE3MzE0OUU1RjNBMUU0Rjg3N0E5Nzk3OUYxRUI5Q0QKKzoxMDA5QjAwMDA5RTZERkI2RjJFMzY0QTQ4RkUyOTVENTg1RDhBRUI4MzgKKzoxMDA5QzAwMDYyRjkxNERDMzc3QkUyQ0JFMjJBNjBGRTEwM0U0RTQ5MkUKKzoxMDA5RDAwMDcxQzdBNEMwN0FDNkE2Nzg3QTYxNUE5M0Q1QjYwMEY1RDUKKzoxMDA5RTAwMEUwQ0JFNkQ2NjdGMTFDOTExNEU3RTk4M0RGQUZCQzdDNkUKKzoxMDA5RjAwMDc2MDdENzhGM0JEMjcxM0Y1ODZDRTRGNDIxRjdENTFBQjQKKzoxMDBBMDAwMDQxN0ZDNzUzM0NGRDUzNzA5RjA4MEZDQ0MzRkQyMzIyODkKKzoxMDBBMTAwMEFCOTVDQkJCRTUzNzI3RTdDRkI3NkMzRkEwQzAzODk1ODgKKzoxMDBBMjAwMEUxMkQ4QjI5NTVGRDM5RDhDRjA1MjUxMEE1QTQxMkZDNDEKKzoxMDBBMzAwMDNDQzg0RjE3RUQ4MTI4ODRCQkM3QzBGNUIzQ0E5RERBMDcKKzoxMDBBNDAwMDc1RTEzRjIzQ0NBQjEyRkY4MDc2OTVDREFBM0IwQzcxQUMKKzoxMDBBNTAwMENERkM2NjlDN0YyNTMzMDdFQjNCODM3ODgyN0UwODRGNzUKKzoxMDBBNjAwMENDRjZFNzc5REYwN0Y4NTdFQzFBOTQ4N0U3ODBDQTk4NDUKKzoxMDBBNzAwMDQzM0ZCRThERUE0MTNCQzkyN0VBRjU3OUI5OUVFQkU3RDIKKzoxMDBBODAwMEMzRDc3NzUxRDBGRjQ1NDlGRkIzQ0RGMjVDNEVFMzVGNEEKKzoxMDBBOTAwMDdFQjkwRjhEN0Y2MUFBM0YxREUxN0Y1OTExRjU3NjU5MEYKKzoxMDBBQTAwMDc4M0RBMDA2MjNDRUYzOTc5QzlFMUUzN0Y5MENFMTc0ODcKKzoxMDBBQjAwMEJFNjc0NENGOTU3MUNEMjMxMTJFNTIwRUMxMUM3QzA2MEEKKzoxMDBBQzAwMEE4N0Y2MTZGMTJENTk3NzI4QjE1MzE4NkVEMkFGNzI2QjQKKzoxMDBBRDAwMDZFRTVGQTk5Mzg5N0UyNDRBMTdFQzUyRjc4RkY5ODQ3RDIKKzoxMDBBRTAwMDNFM0NGRjQyOTIxODhGRUJDNzdBRkNFOUQ3NUI5QzYyRDEKKzoxMDBBRjAwMEEwRjUzRTJFRTU3N0E0RTQ3MzU3QzI1NDgwN0ZDNjI2NDYKKzoxMDBCMDAwMEIzQTZGRUU1NDhGMzgzNkVFODc3OTA1RkZCNURGNjVGODIKKzoxMDBCMTAwMDlFQTI5MDdFMzY0MDg3QjdCRTZBQzc2MTBCRjJEM0YzQzAKKzoxMDBCMjAwMDhDRjg1NTNGQUY5QTE0N0VGRTdCRTE4NTJFM0NBOTFDQzQKKzoxMDBCMzAwMDZGQTAwNjRBRkE3MDcwM0REQzg0NzBGRUIwMEIxRjBGODgKKzoxMDBCNDAwMDI1ODE1Q0FENDQxOEE0MDRFMTczMjBENzkzODRGMkZGOUYKKzoxMDBCNTAwMDMyRTY3MTVGODg4MTdDMTZFQTQxMUNERTMyMkZFMUFDRkYKKzoxMDBCNjAwMEE3QjM5NTFGMkU0ODZBODNGNjRGMDlGODAwNDJGQjIwNzEKKzoxMDBCNzAwMDNENzZFOTJGMjYzODVGNjRFMUI5QjI3Q0Q4OTkzNDNDRTAKKzoxMDBCODAwMDZGRDYwRTgyQURBMDZCM0QwQjM2RTU1QTkxOUYxNjZFNjcKKzoxMDBCOTAwMENFQjU5Njg0RTBBMTYxRTdCMDEzMEU4MEYzQzU5RDQ2MDMKKzoxMDBCQTAwMDE3OEFFNTA2QTNGRkM3QTg0RjM3RUM1NDlCN0Q4Q0NBNzQKKzoxMDBCQjAwMEFEMDhERjhCQjYyM0JGQzM3QTBCMzZDN0U0QTFCRTJDQ0EKKzoxMDBCQzAwMERCMkZEQ0Y0RjBBMEIyMTBCODBGRDlBOUM1NDM3NkIzN0YKKzoxMDBCRDAwMDM2M0ZGNDkwMzZCRjBENjU0M0VGNkZERjJFMzdBMENENjMKKzoxMDBCRTAwMDBGM0JBMUNEQjMwRUMwMTZFMDQxQjU3MjNDMUQxQ0U1MTQKKzoxMDBCRjAwMDNBRTEwMDNDMERGMEFCMkVGQzM0QzAzNjZERkE2NEQ0MDMKKzoxMDBDMDAwMDJGMzZBQkFFMzQyODFGQjBCQ0U4OUU2Q0M4N0ZCNjc5RDcKKzoxMDBDMTAwMEJFMEJEMTVDQUVGQTE2N0YxRjcwNThGRUYxQTQxM0I4NUMKKzoxMDBDMjAwMDFGNUU2MENERUY0RjA2M0MyQzY4RDk2MDM2M0E3MEREMTAKKzoxMDBDMzAwMDVBQkEzRDYwMTBGNEZBMDJCNzk3MkRGMjZCQ0JBRkU3Q0EKKzoxMDBDNDAwMEVCMTVEMjVFOUExOTRBNEY3QUJDQzNCOEY3Qjk2MTQyMjQKKzoxMDBDNTAwMDU1NzVDQjg2OUQ4MTJEQjNCQzEwMDgxRDYwMzZCQTc5QzEKKzoxMDBDNjAwMDgzMTlGNUI2MUI4RkUzRTNGNDYyNzMzQjEwMUVERTUxNkMKKzoxMDBDNzAwMEJDRUNENkJBMDlFQ0Y0MzBGODYzRERCQjkzNzBERURFNzEKKzoxMDBDODAwMDFGMjlBNDM3Nzg3Rjk1NzEwQ0Y3ODFGNjdENzNFRUE2NDYKKzoxMDBDOTAwMEY0QkUwMjVBQkZCNENCMkQ2QzUxMDI5MTkwQjc4RjcyNDMKKzoxMDBDQTAwMDFDNkE4Mzc2RjNGRDhBMEJFNzVERDI2ODA5Q0EzM0Y4QzQKKzoxMDBDQjAwMDVGRDkzQUREM0MzNjg2OTRDM0ZDMTcxRTNBRkMzNzA1RjMKKzoxMDBDQzAwMEZBMkZERkFDNkRCNzA4RTQyQ0NBQUY4QTZEREY1ODQyNEIKKzoxMDBDRDAwMEJGQ0I3M0UzQUQyRDVCNTQ1Q0Y3N0MzOTdGREY1ODg2NjcKKzoxMDBDRTAwMEVCQkE5NTU3NjVCRDg0N0U3MzA2MzNCMDZGRDRGNjJFOEMKKzoxMDBDRjAwMDNBOEJGQkNBQUQxQjc5M0IxMDk3NUU1QzZGQjVDREVDQjAKKzoxMDBEMDAwMEMwRjU1NjVCNTkyMDAyRTY3MTIyRDJFQ0I2QzNGN0FCQjAKKzoxMDBEMTAwMDlCMjJDOTFFQjZDMDAyRkE2NDFFQTUyQzJDMEZEQkI5OUIKKzoxMDBEMjAwMEEyQjFEREE3RUY3MEJCNTg3NTFDQzc3N0Y1NzMwQTlEOUMKKzoxMDBEMzAwMEEzQUFEMTg4ODlGOUU3Nzk3RTExMEJEMDNBOTA0RURDQ0QKKzoxMDBENDAwMEExRUJGMzZCRjNBQzg5OUZCRkFBOEM4MUMzMDg4RjBBMTgKKzoxMDBENTAwMEQ2QzZDRjRGODA0N0I3ODQxRkMwQUIwQUQ2Rjk0MTJDMDcKKzoxMDBENjAwMEVBNUJCQUY2Q0NFNUMxNzE2QjZDNUM3RkFBMzlGNDhEOTUKKzoxMDBENzAwMDI1QjQ1QzlFMDNFNTM5NTVEQTY5OUY0QjJGMEFDNzcxOEMKKzoxMDBEODAwMDU2MjlFRTI3QUQzMENGNTU0MkJGRjY2RDA4MjNGQTlEQTgKKzoxMDBEOTAwMEJCODVFRjM3QTBDN0E2MjM1QzM2NkU0ODc0QTE5RTMxOTEKKzoxMDBEQTAwMDE3RjRGMjMwRTQ5QjQ1RTE1NDBGRjQ1REIyQUY3NDgwNjgKKzoxMDBEQjAwMDVFOERGNkY2OEQzMUNEMDFEQzM3MzYzRUU2MjQzRDFBRTgKKzoxMDBEQzAwMEY0NUY4MjRCQzdGQTMwRkY1NjA1RjU2MEFFQzc2Q0RDQTYKKzoxMDBERDAwMDkwNDE3QUY4QUI3MjlGNUFDRkY1QUU2RUY0NjIyQTY3RjMKKzoxMDBERTAwMDdEQjgxRUZGMTEyRTI1NDQwRjRFOERGN0E0QTU4NkFDQUQKKzoxMDBERjAwMEFCNkNBNTNCMTFGNzlEQjI2OTY2MDNEQTlENThGOUNEM0UKKzoxMDBFMDAwMEY5MERCNjBCM0RCMjAzRDY4RkVCMzhBMzE0MUQzNzg0MTIKKzoxMDBFMTAwMEU4QTMyMzUzRjkzRTMyNzJCQzdCODdBODQ3RkU4NTMyOTQKKzoxMDBFMjAwMEMzRDQ0N0VGQzBGMTFFMzczODcwQkMyRTc4QkJEREU5NjQKKzoxMDBFMzAwMDM4OEYzMzFCQzJGMjkwQ0U0NjhFRTdGNjlGOTNCOTVDOTMKKzoxMDBFNDAwMEJFNDcwQzY3NkUzRkE0Nzc4ODdFRUY0ODM1NjhEMjg0MzIKKzoxMDBFNTAwMDcwQTAzRkU4RTc0QzNFQjczQjQ3MEUyRjIyN0IxQkVDRDAKKzoxMDBFNjAwMEQ1MjRFN0Y1RUJCODQ3RjQ1MzY2MkVGQUY3REJCQjk5QzgKKzoxMDBFNzAwMDhGODQwRjlCQzhGNTg1MzM0Qjk0QUQ3QzVFODA1RkM4MzMKKzoxMDBFODAwMDhGRkM2OTE4RDlFOUNFODhGRDQ3QzIxOUU4NjYwNEQ5RjQKKzoxMDBFOTAwMERCODVCQ0RBMjBFODY1ODM4OUQzODE2RjExM0YzRjA1OEMKKzoxMDBFQTAwMEU5ODUxMTNENkMxNEU3QUNCOTAyQkY2QzNERDc2QjgxOEQKKzoxMDBFQjAwMDVFMzg5Q0Q3MjcwQTdBNjFFQ0VGNDgwRkY5MEVBRTY3Q0YKKzoxMDBFQzAwMERGRTQ3OTA5RjA1RTlBREFGQkZBNzM5M0M0MzczM0ZBRjgKKzoxMDBFRDAwMDQ3RkMyM0ZGNDZGNUMxM0QwNzdDQjA3RjU2RkNGMkIxQ0QKKzoxMDBFRTAwMDI4MDZGNUNFMTk5QkUyNUREMEJFNkFGQkFBMjgzN0E0N0UKKzoxMDBFRjAwMDlGMTk3RDUxNzYxOEZGOUM1RjJERjA3NzAzNkZCRjgwOUYKKzoxMDBGMDAwMDM3REFENzE1OTAzRjhCRjE0RjA3RUEzQjNGOUE4MkVCRDgKKzoxMDBGMTAwMEZCRUI3NjkzMUQ0NTQyQ0Q0RTBCOUQ5RjE2RUY1RjQ0MzQKKzoxMDBGMjAwMDdBMzZFNERCNzk3RUNERTcyQUU2MEY2OUVERTAxNTNGRkUKKzoxMDBGMzAwMDdGMkNERTQxRjBGNjI1MTkxMjMwMEQyNDMxNDgxNzZGNTEKKzoxMDBGNDAwMDMzQjkwMjY4NUY3RTRGNzVDMTMwQTAzNzc3QUNDNkY5MDAKKzoxMDBGNTAwMEU5REJFMzNDQUUwMUJFNkI5QTU1QUYzOUZBRkFGMjFBRkYKKzoxMDBGNjAwMDIxNUY2QUY2RkZFODczQjRFQkQ1RThFQ0VFRTVDMkZGNkIKKzoxMDBGNzAwMEEwQjdCQjM3QTU0NkY2RkExNDBEQ0NCN0IwNUI1MDBGM0YKKzoxMDBGODAwMDAyQjhCODAyQzhCNzMwOUYzNDIyMTM2RUI3NkREOEY1RDcKKzoxMDBGOTAwMDQ0NEUzQkVBMEJEQkRFOEE1MkIyODI3Njc3RTk5N0U4NzEKKzoxMDBGQTAwMDZDMkU3RDBFRUQ5QTNERjFFMzY1NjE4NzBERTI4QkNCRjIKKzoxMDBGQjAwMDJEQzcyMTA1NjUwMDFDRDA3OTVBNjUwQTQ0REQwNkYwNkQKKzoxMDBGQzAwMEE4REE2MjIyMzk1M0I1RTdGOTFENEYyMTlEN0Q2OEExNEEKKzoxMDBGRDAwMEZEQkM3MkNGMUJFRkRGOEFGQUVFM0U1M0FGNDJCRTBDNzAKKzoxMDBGRTAwMDlCMTIxRkM0NTM4RDgzREJDOTI0NUUyQTdFRjU4NkQ5RUMKKzoxMDBGRjAwMDkxQ0RCRjJGOEYwREUyQTc3MkRGNjEzM0NCQkUxRThFNjYKKzoxMDEwMDAwMDEzOUEwRjlCREI2Q0RERTBBOUI5N0QxMkQ5ODk3NjdEM0YKKzoxMDEwMTAwMDY1NDYzRTM4RjdCQUMyRkEzOEFGNkY1RkJFRTU4RDI4MzUKKzoxMDEwMjAwMEQ0QzcxMDRFQjgyRjQ5N0M3NUUxNEY1NzFGRkE5RkYyNzUKKzoxMDEwMzAwMENBNzBBQTY3Qzc3MzQ1NEZGODVCODI3QjA3RDE3NzI0RDQKKzoxMDEwNDAwMDhCODFGMUNCM0ZCMkY4MEIxMUFGN0I5NzQ1RTEzQUNFRTQKKzoxMDEwNTAwMDFBNkIzOTlEM0ZCMzJBMUVGNUJBNzI5MzJGREU0RTI5QzMKKzoxMDEwNjAwMEZGNUVGRUVDQzM0NDdGMEI5NURBNzg3QjE2RDE3N0EyNDYKKzoxMDEwNzAwMDgxNzQwNjVGMjJBRTZGRkVFNjk5QjRCRTA1Q0M0M0Y0RTAKKzoxMDEwODAwMDU3RkU4QzVBRTQ4N0Y0NEIyMzJCRDhENzBEOUZGNDFEQzEKKzoxMDEwOTAwMEM4RjlFNEVDNTY0MDJBQUNFRjJDREE2RDUwNkVGQzVFRDkKKzoxMDEwQTAwMDE1RTdEQzI1QjQ3RjNGMkNENkNBRDg1MkNBN0YyOUY0NzUKKzoxMDEwQjAwMEI2NEJBOTVEN0U2NTZCRTg3OUIxNjZEQjlBNTZDNENGMDUKKzoxMDEwQzAwMEY5RkVFRTNFMzg0RjgwODM0RkMwNEJGOTA2RkE1NURGRUMKKzoxMDEwRDAwMENERUZDM0YxQzMxQ0M2OTFBMjFERUNBMzEzRjAzQkQ2MDgKKzoxMDEwRTAwMDZGMzVCOUQxRUUxREQyNEU5Q0U3RjhGODBGODlGMTYxNEEKKzoxMDEwRjAwMERFRTE3ODVFM0QxQkNGRjU3NkZERkEwQTA2MkFEMkRFRTgKKzoxMDExMDAwMEQ2Q0E0MkU5QUIyN0JFREZGNjA4RDFENTE3RUY3MUI5RDEKKzoxMDExMTAwMEIyRDgzRkI1ODBDQTVCNEQ4MTNFNThFRTNGM0M0MzIxN0IKKzoxMDExMjAwMEI5NjA2MTgxRUVGODdBOUI0OUYwQjVCNjFDRTY2OTU0NjYKKzoxMDExMzAwMDQyRTFGQjNBRDc0MzE3ODBERTE1MDhFMUUzMjBERDk4NTIKKzoxMDExNDAwMDgzREY2OUREM0YxNUVCNjgyM0JGOThGNEE3MkQxNEYyMDgKKzoxMDExNTAwMDQwQkY2RUJEN0NFODM1NTBGOEUzODQ3QzkwRUREOUU2NjUKKzoxMDExNjAwMEVFRkQzOTQxQjlFMEEzNzFBQjYwM0Y0MTNEQTNFQTQzRDUKKzoxMDExNzAwMDBCRUQxQjU1N0I0QzQ1MDg5RjBCQkI4RkJFM0YxN0NGMUMKKzoxMDExODAwMEExQ0Q5MjhGQjVGMjU2Q0ZDN0U1MkY4RUU4OTY4RjJGNUYKKzoxMDExOTAwMEFDQ0JFRDlFOEZFMTdCQjc3Q0JDNEUyMUY5RjYzRjk1NDEKKzoxMDExQTAwMEI3QjBEMzkxRERBMDI3N0U1REQ4ODNCQzFEM0I1MDJCMEIKKzoxMDExQjAwMDZGQkY2NDU5RDFCNzYxQTFERDNCODBGMEEzODNBQjg0REQKKzoxMDExQzAwMEE3NUU3RUJFOUZFQTIwRjhFQUU1MjdDM0QwODgxMDM4RTQKKzoxMDExRDAwMDRBRjg0OUZBNjRDQzQzRTM3NEQxQjFBNDUzNDlDNzVEREEKKzoxMDExRTAwMDc0QUE1RkFGMTY4RUZBNzJDMzQwNDZGMzI5N0FEOUM0NDcKKzoxMDExRjAwMEVENjcyRDBBRTlEQkQwRUU3OEQyNzBFMjUzMzc2RDdGRDAKKzoxMDEyMDAwMEFDRTk3ODUyQUZEMEJDNUY5NzZGRDZENTc3RUJGMjQ1OUIKKzoxMDEyMTAwMEJBRkExRTVEQkU1NjUzQkZFQUQwNTEzMzNGMUYwNDM0QTUKKzoxMDEyMjAwMEY1MkM3NUY3RDAzOUUzN0EzREMyQ0ZGRDNFRkIzRjM3NTEKKzoxMDEyMzAwMEZCOTAyRUZBNzU5ODUxMkU5QTU2MzI1RjI0RUFCQkFGNzYKKzoxMDEyNDAwMEE5QTRFRjVFNzE3NDQ0QTE1RUIyMkE4Q0VCNkQ1N0VDRDkKKzoxMDEyNTAwMDIyMUZDM0YzMURCRENEQUI1MTJFQ0FFRjFENjFEQzRFNjUKKzoxMDEyNjAwMDcyQTVBODIzMkEyNkU0OUNERURFQTI0NkExM0RCNkNEQzcKKzoxMDEyNzAwMENGMEFCQThGMTM2OTIwQjhCNkIxOUVDQUI5RkU5NkFGMkQKKzoxMDEyODAwMERBOTJFQkQwMUVEQUE0QkE4MDRDNThEOThBNTk1MTE0OUMKKzoxMDEyOTAwMEJGRDA5MjdBRUY2Q0Y4M0VGRjM3MkE4NTAxNUMwOUU3RjAKKzoxMDEyQTAwMDc2MDVFNjczMUIzMTdFQTA5NEEzOTA3REM2N0M4RjhGNUMKKzoxMDEyQjAwMDgxNzU5NUI2RjAzODgyQjI3NTVBRkMyRUIwQ0Q4ODBFODUKKzoxMDEyQzAwMDM4NTBFRTY4RkRGRDBCRjE1Qzk3OEFFNzNERURGNzBBQkIKKzoxMDEyRDAwMEI2OEVFOEFENDJDNzE3MUU2MUE3RDVGM0M1MTZDOTE3NkMKKzoxMDEyRTAwMEI5MkM1N0Q4NjNDOENGQjE1NEM4RUI3QzM1RUJERUQ5RTUKKzoxMDEyRjAwMDAwRkYyQjI3NTQ2NjgxN0M2NzhCQ0E1NkUzN0E3NzJCRDUKKzoxMDEzMDAwMEU0RUY0MTg3MDBGMkRCNjJFMDRCOUM4Rjg0Q0Y0NUU0NDEKKzoxMDEzMTAwMDlCOEM5RUY1OTI4QjJGRkQ2NUU0Rjc5MTRFMEU3QzlDODUKKzoxMDEzMjAwMDgzN0VEODhCMDczRTRDN0YxNUYzMDdGRjk0RkMzMUJCQkYKKzoxMDEzMzAwMEJFRkU4NEQ3RkYzNjBGRTVGMDk1RDcyRDBDRTlGQkNBMkEKKzoxMDEzNDAwMEVCNkYyNkEzNURGMENBMkIxNjNBMkY1RjU5NjlFMUY2QzEKKzoxMDEzNTAwMEU2RDcyM0ZERTg4RkJDRDI5RkVCQjkwREFGN0Q5NUQzQzcKKzoxMDEzNjAwMDQ2RkI2RTIzRTFFQkVEODE2NkFFMzdCNUZDRTc0OUI0OTEKKzoxMDEzNzAwMDU3NzdCNkMwQUE1MDlGNzgzRDgyRjhBN0U2OTUzMEYyMUQKKzoxMDEzODAwMDZCNUY3OUVEQUI5MUExRjEwRkZGRDNGNTQ4RkZGNTk1QjgKKzoxMDEzOTAwMDQ4MzZGQjQ1QTQ1QkExRDdEN0JDM0FGQTc5RjRFNzU2QTcKKzoxMDEzQTAwMEVGM0Y2QzJFODVGMjA5QkZGRUFGMUM5NDlGNTc1RUU0QTEKKzoxMDEzQjAwMDdBRDI2NTUzREJCMzY4NkJGQ0QzQzAzOTNGMzUyNUEyQzUKKzoxMDEzQzAwMDdEMEUzQUVCMEJEQzk2RjZFNDM0RTQ5M0VCRTFDMkUxRkMKKzoxMDEzRDAwMDcwMDVFMDgwRUIwMkI4OTRBM0RDRUYwOTFFOTdGRjY1NkYKKzoxMDEzRTAwMEUxRjFGOTNDMkVDRjZFNjFFOEZGMERDMjQ1RTE3RTg0NEMKKzoxMDEzRjAwMDk2NDhCRjU1QTFGNUYzRUZBRjdGOTU4M0YyRTY0NkVCMzQKKzoxMDE0MDAwMEI1QTU5OTg5QUZGRjdGNTlFRkUwQjQ3RjU1RkM3MjdBOUIKKzoxMDE0MTAwMDdGNzFBMDgzQzdGNUU5RThGRTdBQkEzRUY4NkY5NERGRTIKKzoxMDE0MjAwMDFCRTlBMkY5REUyNEJGREZGRDJGQkJGRUZGMUI3Qzk3NkIKKzoxMDE0MzAwMEZGQ0JBRUY3NDZGOEZFOERDMDc3QTQxREZEOEE1NzVFNDAKKzoxMDE0NDAwMEZCQUY2NEY2MkRENkJERTY1Rjk2QUZGRkYxQkFBNUJFNDEKKzoxMDE0NTAwMDNFNUU3NTlEQzg4NUZBNkZCMUU2Rjc1QzRFRDIzRUJBMjYKKzoxMDE0NjAwMEQ1M0JGNkE3NDkzQjA5M0YxRjRENjA3QzlGOUU2MEFENzEKKzoxMDE0NzAwMDI0N0Q3MzQyQkZGNUE0MTczN0IwM0NGMjQzRjhGQUE5QjQKKzoxMDE0ODAwMEU0OEZBMUUwMEI4MEMzOUIwOUI5N0VGMjI3MTkwM0ZEMEQKKzoxMDE0OTAwMDk2NDE3RTdDNTIzNUM1NUJFOUNGOEQxM0MyMjcxN0EwREMKKzoxMDE0QTAwMDNFN0E3NDA1Q0MwQkZBMzkxQTY5QjBBM0FGNzg2MjNGNjMKKzoxMDE0QjAwMDM1NjBDOUExQjQxREQzRTNDOUY3OUM0MEJENjVBMjRERjkKKzoxMDE0QzAwMDdCN0VCQTQ3NzcxRUJBQ0JBMTJEMkY2MDJGRjY0MkZGNDUKKzoxMDE0RDAwMDU5NDE5Njg5Rjk2MTNFOTNCMDdFQzhCOUYxQTc2OTc2MDIKKzoxMDE0RTAwMDgyQ0I1REFDQTlEMTZFRkJGNjcwM0EyM0UwNzQzRDFDNTMKKzoxMDE0RjAwMEZFMzFEQ0FFODM5MzM4MjcxQjQ1N0QzRERDOENCNjQ3M0YKKzoxMDE1MDAwMDVCQjE5RDkxQzFCOTk3QUY5N0NFQ0JGMkRDN0IyMzc4Q0QKKzoxMDE1MTAwMDMyNzE5RTM2OEFBMTI1N0M4REZEQjg5RjM0QTQ1RjgyRUUKKzoxMDE1MjAwMDhCODRGQkI3ODVCN0M0OTMxRUVFMTJCRTEyNkU3QTNDNTUKKzoxMDE1MzAwMDFDNDQ2MzU0RUYyMEZDRkIxOTczOERDODc3QjcwQjNEMzcKKzoxMDE1NDAwMDdFQTIzMTg2RTdGQkI1QUE0NUM0OEY3RTgyRkI4NDJGM0QKKzoxMDE1NTAwMDVDNDZENDRGQzZEOTYyMjhFRTkyMzlGQUM3RTA3OTE2QjQKKzoxMDE1NjAwMDU1Q0M2RjkyMTgyQjE5MTUzMzUyODFGNTI2MTk5OUNGNDYKKzoxMDE1NzAwMDAyRTc0REY0QTE5MTFERjUxMUEzN0ZBNTEzQzdFMUY2NzQKKzoxMDE1ODAwMERBRkU0NjZFOTcwNkVFRjY4NUU3NTE3REI3MTlGMkRFNzQKKzoxMDE1OTAwMDlGMkQ2NDZFQThFRjRENjIyRTg1RDc2N0QxQjExNDhFNTIKKzoxMDE1QTAwMEM2NTQ4Q0NCODIxNERCNzlBMzc5QkZERTNFQ0NCRjkyQ0MKKzoxMDE1QjAwMEUzOTNGMDgyQzcyNkI0NUY0MEJGNkU0MzJDNkYxRjk1NDQKKzoxMDE1QzAwMDQ3RUQ3RDA2REVERTZEODQ3NDQwMkFCN0FGNzdBQ0IyOUUKKzoxMDE1RDAwMEQwRjlDM0JCQTY3RjNBQ0E4RkMyRjE1QUJCNzE3MTNBMjgKKzoxMDE1RTAwMEI3QUJDOEY0Q0Q3NENFRUZBQUMxOTU4MDdBNzE0OUUzNDgKKzoxMDE1RjAwMDIwM0EwRkE5RTE0NUQ1MkZBMUJEN0Y2RjA0RDFBMzc3NzQKKzoxMDE2MDAwMEY1MDM5MzQ3RTBGQ0Y2QzZCOTcwN0FFN0E3RUMxQkM5NkYKKzoxMDE2MTAwMEVCQ0Y3OUY4OEZGMEREQjMzMzhDQkU1RjQ4RjdGNDQ5MzgKKzoxMDE2MjAwMDg3N0VDRjJCOEU3OTJGQzE4NzkyOTk0N0NEMDkzMDg0NDEKKzoxMDE2MzAwMEE3NzlFQTI1QjRGRjRERjFFREZCMURGQTE5QTdDQzUwQUYKKzoxMDE2NDAwMEE5RkUxNEM2RTMyQjU5NjMwNEY5QTMyN0ZCM0UzNzI2RjIKKzoxMDE2NTAwMDQwN0Y5M0UxQjA4MUU1RUQ2MUY2RTQyNTMwN0ZBRkIwRTYKKzoxMDE2NjAwMEY3QTZBNjczQkI4QjFBQ0UzQzJGREE3MDVFRkREMzUzNjAKKzoxMDE2NzAwMEUwRkI2NEQ2N0QzQ0FGNTdENjFGQUY2QzQ2RkZEMDgwRjEKKzoxMDE2ODAwMDA5REMxRTJGRUI2MzNGRDhFRkMyNzRFRTVGQ0QxMTcwMDMKKzoxMDE2OTAwMDkxNzk4MDJCRDUyRjVCNkI2OTRGQzU3M0NGNUE1MzIwM0YKKzoxMDE2QTAwMDAzRDI2NzMyQzdFN0E1NDM3OTYxMEE5QkI0MDlFMUZFMUIKKzoxMDE2QjAwMDVEOTU2REE1Rjk3Njc4QzlDRTFEOTlFOTQwM0M3ODgwOTUKKzoxMDE2QzAwMEE0MjlCRUIwQzlFOTQwQkI1N0ZCQjhFNjAwRkEwN0RBNjcKKzoxMDE2RDAwMDlGNzRCQTFBMUM4NDY1OEFDNzkxRTdBQ0Y2NzE4MTgxNDAKKzoxMDE2RTAwMDY4OTdFRkM4RTU3RTg2OTNGNkI2NDgzQzFGOTZEQUFDNUQKKzoxMDE2RjAwMDE0OUYyM0UzN0FFNkRCMzk5RjBGNjg2ODVCN0YwQjlFQkMKKzoxMDE3MDAwMDNCMUY1MzVENUIyMTNGRkYzMUVFNzdGOUM0NjZGNTJCM0MKKzoxMDE3MTAwMDc4NUVEQkM4Rjk5NEFERDNDNkYxMzBCQjhCRUMzREE1NDgKKzoxMDE3MjAwMDRERTNDQzc4QkUyQ0IzQjlDREI4Q0U4QTBDNEYxMUFFRjgKKzoxMDE3MzAwMDhCN0QwREYwMUI4OTcxOUM4Qzk4QzFEQkU0QTUzODEzNUYKKzoxMDE3NDAwMDM1MEFGODBFRjlDNEU4ODhDMjczQUYzRTBFQTg0NkM0NDUKKzoxMDE3NTAwMEZEQzhGQ0ExMzBDRjFDRUNBRjI0REFCMTE3RTlFNTU0ODkKKzoxMDE3NjAwMDVEMkFEOTNEMzcwOUJBMkJDNDM4NDZGNDRGMThEQjEyMkQKKzoxMDE3NzAwMDcxM0VFMUY4MURFMDVGMTg2QjRGQjcxMTNEODczMTg0NzIKKzoxMDE3ODAwMDQzQkJDOTlFOEVGNEREQkUyQUNDODA3RUI2QzI5NTlDM0EKKzoxMDE3OTAwMEFFODFDRkFDNDY2OEZGODg5MTg1QTNERjIwNDNCNDJGOEMKKzoxMDE3QTAwMDVFNjEyQ0RBMDJGOTdFNTY2NjhDOEM0NUJBQ0EyNUJBN0YKKzoxMDE3QjAwMDZFQ0JGNEU0MjA3RDdFRjYwMzM2MEFFOUExNzRERDA2RTMKKzoxMDE3QzAwMEYyQUY0OEJBNjBDNkQ2ODk3MTMwQ0U2N0RCOUQ3OTI4MDIKKzoxMDE3RDAwMDM3MjUxREI1NjU4RUFGNEQwRkE1ODcxOTBBRDEwMUE0MTgKKzoxMDE3RTAwMDg3NTM4OTFFQTYzRDhDRkQxNjhFMEYwQzVDOUE4NUU3RUIKKzoxMDE3RjAwMEQxMkFFNkM2RkQzRDgxQjk1MDRGRTg2NDFERTQ3RkVDNzcKKzoxMDE4MDAwMEI0OTkxRDY4RTc5MkYyNDRDQTBEQzBBQkRCMUExRkE0NUQKKzoxMDE4MTAwMDgzMURCMERGMUI0RDhDRURBQ0I3NTJGQTQyQkQ5RDE5NTQKKzoxMDE4MjAwMDQxQzZFREFFNEZBMEZDREU3QTA3QTVDREY1OTlGNEZEREIKKzoxMDE4MzAwMEM1N0ExN0U1RjdENzhGQTJGQzgxN0EzN0U1MEZENTE3NjAKKzoxMDE4NDAwMDUwRkE0QTdEMTE3RDk3NzIwOUUwNDI3MjQ4Q0ExNTI5MDMKKzoxMDE4NTAwMDhGNEE2REU2NzZGNDQ3NEFCOUE0QTc5Qjc5MDBERUIxQkEKKzoxMDE4NjAwMDc5RDQ5RUU0OUU5NDc3QjgwRTQzNUU1MDFFNDlGQ0E2NDAKKzoxMDE4NzAwMDI4NDVCRTA0MjdDQUIxQjYzOTg4RkY3Q0Y1RTI5RTgzQUQKKzoxMDE4ODAwMDc4MkUyRkI3QjlFODlDQ0VCOERDRUIwNDdBNDVCODI0QTMKKzoxMDE4OTAwMDlCRDkyMUI0QkIzNjJDNzFCN0FGNzEwNkUxN0Y3RkI5RkMKKzoxMDE4QTAwMEMyOEMyMTc0RjU0MDZEMTgzMzg2RUMxQjBGRDZDNTY4QzkKKzoxMDE4QjAwMEYyQzU3NTdGNzhBMzBGRjQ1RkQxQ0JCMzBCRjE3NkYyNEQKKzoxMDE4QzAwMDg3OUYzRUYzMjdGOEZFREMwRkNGQTcyMUJFNjExRURCMEEKKzoxMDE4RDAwMDlGQzA3MTk3ODc3N0NEMjMxNkYzOEQyNkYyNDcwRDkwMjEKKzoxMDE4RTAwMDc2MTBGODg3NzgyOTYxOUNERjlFRkJFMURGODlCRkRCRkEKKzoxMDE4RjAwMEVCMkMwRUQ0ODczRjQyM0MwMTVDRkYyQ0YwNTQ1MjY3MjYKKzoxMDE5MDAwMDIxRjg3OTU3OURERTczMTBGOTdDQjk5OUU0NUM0OUEzRkQKKzoxMDE5MTAwMEUwQzNCNTAwQ0YxMEZGRUVBOTQ0NDZGNjA4RDBBNjU5QTMKKzoxMDE5MjAwMDFEQzBFREQ0MEZDQzgxMDhFOEZGOTRDMkY5NTcwMUE1ODIKKzoxMDE5MzAwMEEwMThFM0ZFRDZCRUY5MDFGMkJGNTI3NzgyRkNFNzFFODMKKzoxMDE5NDAwMEFCOERFRTM1MzE5RkU5NjI2ODdGNEFERDcxQUFDN0RBNTcKKzoxMDE5NTAwMEZBQzVBMEJEODRGNkIxM0JEMEVGRTgzNjNCNjBERDQ4NjgKKzoxMDE5NjAwMEQzODhCNzkyQ0MyMzJDMTFGRDI2NEQ4QTFERkQyNjY1MDgKKzoxMDE5NzAwMEUyN0JEOTVBODVGQzkzMTg3NzMzMDNGNEJFNzdEMzU1QUQKKzoxMDE5ODAwMEMyNjM2NEJBOTFEMkNBNzQyNkY0QkEyNkRBOUYyNEJEMUYKKzoxMDE5OTAwMDk2QUQ4Mzc2QzgxNzREQjlFNjA1MjE3MkI4NDQ3QzJGMDEKKzoxMDE5QTAwMENEMzQ1MDJBQkZCNzhCN0VGQkFFQ0Q5RDhERkE0NDVGMDAKKzoxMDE5QjAwMDJDQ0ZDMjM0NkYzNkMyQjdBRjZEOTI1MTA5QzFGRkM3ODkKKzoxMDE5QzAwMDM4RkUwODlDMDcxRkJGMTI5MTBBRkZGNzY4NjY4QTc5RTQKKzoxMDE5RDAwMDdFMTZFMjg3RUY1RjcyOUM5MkNDQkNENTE4Qzc1OUIyRDUKKzoxMDE5RTAwMDZFMUM0QTVGRDY2MDcyMjVGNDgyN0E2N0JBRkFFMTdBOTEKKzoxMDE5RjAwMDFCQjNGMjc4RTVBQTFFRjYwRjY5M0ZGQjBDRkYxQzRERTYKKzoxMDFBMDAwMEVCMjZCQjZFQzVERTVGRUM3RDA1N0FBRUY4RDg0MkY4RkEKKzoxMDFBMTAwMEFEMTgyQUUyQTdCMkZDMjNBNzkzQTE1MTZCQUY5RUY4QTEKKzoxMDFBMjAwMDhCQkY0NDkxRkY2MTNGOEZBQjg0OTREQjUzOTc5NzczRDcKKzoxMDFBMzAwMEZCQUIwQkY4QUExQkZGQ0ZCMUJEMUY0Nzc1NkJBN0RFMzEKKzoxMDFBNDAwMEFGREU5NDlEQkE0NkY5M0EwQUY1MDdCOTlFRkNEN0JFQjcKKzoxMDFBNTAwMDhDQTc3OTI4RDdDOEZGNTNGM0RBQUFGOEVFRUVDRkU4QkYKKzoxMDFBNjAwMEVERDU1REY2NkM2MUI3RDM5N0VCRUQ3NTdEMzI3NDdFODUKKzoxMDFBNzAwMDAxMjNBM0ZCNThEMjVFQzdENEFDNjhCNEVGN0YyOUVFMzQKKzoxMDFBODAwMDZCRjQ3NEFFOTFGNkVEOUE0REQwNDkxQ0YwQTdEMTExQ0MKKzoxMDFBOTAwMDhERkVBQTJCM0RFOEQzMEY2NkYwRkRGRTkyQjA4NzVGNjYKKzoxMDFBQTAwMEQ5QUREMjM5RTdDQUVFNDhFMkE3QzVCQjdGNzYxQ0ZEQTcKKzoxMDFBQjAwMDg3OEJCNzI5MzQ4RDZBRDY0QTcwMDM3ODMyNkJFODNFM0IKKzoxMDFBQzAwMDg2RjE2NjcxRDdDRkJCRDM5RjE2OERGQjQ4RTUyRjIyRDkKKzoxMDFBRDAwMDZCOTFDRTE2MzUyQkVFRUQzMDlGNEVBQjIzQkE3N0M4MDcKKzoxMDFBRTAwMDdDNkVDQkUwNzQ1NjY5NjkxRTQ5NzAxNkYzQ0ZDRDcwRDkKKzoxMDFBRjAwMEQwNzc1OTZGNTFDQkNGQzg3RTBDRjUyRTkzMUVGNENCMDcKKzoxMDFCMDAwMDA4RjRGNTIzQkM3Rjg3RjNCQ0IwNzk5ODBCRkQ3RThCN0UKKzoxMDFCMTAwMDlBRjcyRDI2M0Q2Mjc3ODQxRDhGMENFNzQ1OUNCMEVDMkIKKzoxMDFCMjAwMEU3Q0UwQ0NFOUY3NzY2NzBCREU1ODJGMDA3NUREOEFCM0YKKzoxMDFCMzAwMDkyM0NDMzc5MjI3RjlENTdCNEYxNzg5MzQ1QkJDOTAyOEIKKzoxMDFCNDAwMDZFOUYwQkZFOTJGNTE3MzVCNzQ3MEQ4NEZBNjcwRkZEQjAKKzoxMDFCNTAwMDgxRDI1OTYyNUQ4QjZDQUQzOUI4RkY5RUREMUY0MUZFQUQKKzoxMDFCNjAwMEFDQjNGQjlGOUVGNDJBOEM3N0E5Nzk1QzJGRTQwN0Q5NEMKKzoxMDFCNzAwMEZGRkMwQzEzRDVCRkI0NTkyRDQwNzgzMTNGOEY3QkE5QTIKKzoxMDFCODAwMDQ2RjgwRTBCOUQ2N0RDMTY5RjMzOTRFRjc4RENDRjg1MEIKKzoxMDFCOTAwMEZEQkY4QTMyNjQwNUYxNTk2REY1NThGMTVFNjNDRDdFNjMKKzoxMDFCQTAwMDZGMTFDQThEQ0YxNDBFNEZEM0ZFNzEzRUJDOEY1NEQzMkMKKzoxMDFCQjAwMDkyQ0I5MDlFODlFRjEyQTlGRTVBNDM0ODNEQjNDOTQ1ODYKKzoxMDFCQzAwMDQyRDE3ODY4QUEzQjg5RTAyQ0VFMTM4OTc4NzlCQzFGNTIKKzoxMDFCRDAwMDg3RjI2N0U5NTQyQkY5MjdFNjBENzVDQ0JBMUZFNUU0QzcKKzoxMDFCRTAwMDVCMjY4RTk3N0U4RTI3NTA3RjlCRjc0RTFDQzU0RDJEMTIKKzoxMDFCRjAwMDc1M0E2NkUxRkM5N0JEQUI1MkJDRUZCQzYxNDIwRTI0NjYKKzoxMDFDMDAwMEI0OERDMEI4QzVBQUI1MEE3M0MzM0FEQjlENUM2RkE4OTIKKzoxMDFDMTAwMEYyQUJDQzAzRjlCRTQwMEYzRTAwQzVGQThDMTQyMTRGNDUKKzoxMDFDMjAwMDAzRTk3OEFGRUZBOTcyODNEQjBDRkJERjQ5MzNGM0E5M0IKKzoxMDFDMzAwMDY4Mzc3QTkxQzczMzU3QTVGMEI4RTFBNzkwRUUyMUFEODgKKzoxMDFDNDAwMDhBMERBNEM3NDE3RjE3MDUzRUFCQTYwNUQyMzE0RUEyMkYKKzoxMDFDNTAwMEVBQzU0NDhBOTNCODY4RTY3RTRCRkM4RTdFRDJBQTNDRTUKKzoxMDFDNjAwMDY4MEZGNTdBODk3ODU4NkMxRjEzNDIzRjU1MjUyRTA3NjcKKzoxMDFDNzAwMEQ2NTM2MzVEOEU1QzFCQ0VENzdFOTlGNEQ4OTcyMjE5MUMKKzoxMDFDODAwMEVBQjE4NjgzOTEzQ0NFRTlFNzYxNUIyRDIxNzhEQTkyNTcKKzoxMDFDOTAwMEMxRjVFNTVFMDI4RjZDMkU4Rjg3N0M1Q0M0NjMzRkJFMEUKKzoxMDFDQTAwMDNERDE4RkU3Mzc1OUZGNzE5MzY3MEVDMjAxRDc4MUZBOTMKKzoxMDFDQjAwMEZCMjI3MzUzM0FFQUI3NzJCRThCQTI5QTY4OUUxNzA1NEQKKzoxMDFDQzAwMDdEMkYwQTZGRTJGMUQyRTI5RTJDRDZDNzdDQkI4OTUxRjAKKzoxMDFDRDAwMDFDNzdDNzJFMEJDNTkzOUM0RjZDM0Q4MEUzOUZERjM1NkYKKzoxMDFDRTAwMDg4RTFGQURCOURGRTA1ODdBODFDRjQ0N0MwNUJDNTBCQTUKKzoxMDFDRjAwMDk2MDBBRUU3REMyRTZFNkYzRTY3RTJGQUQ4QjlBOTA5MEUKKzoxMDFEMDAwMDBFQzQ1QkMxQjQ0REYzQzgxRUIzQ0RBMjIwREVDRjI5RjMKKzoxMDFEMTAwMENDOUM4MEU1REI3QkJCN0NEOEJFQkU4RUUyQTQyQjQwOTYKKzoxMDFEMjAwMDRDRTA3RDFDNDgwQkYwNUVDREI5RUQ4MzI4M0VFQ0RDMjkKKzoxMDFEMzAwMDZGNTRCQzExODVERkQ3RTI3NzBGNkI5QUY3M0Q4NEM3RUMKKzoxMDFENDAwMDRFN0U3RTNBRkZDMjdGMEUwQUJENTcyNkQzOEE2RERBRDkKKzoxMDFENTAwMDM4Mzg0OTI3QjJGQzQ4MDZCNzBGMUMxMTcwM0U5RUMxQTcKKzoxMDFENjAwMEY3QURFQTg4RTZDNzUzNjg5RDFDRUU4MDI3M0FGN0MxQjUKKzoxMDFENzAwMEM2MUZGOUY0NzA4QzgzNDg1MzUwNkUzQzA1NzRGNTM0REIKKzoxMDFEODAwMERBMTU3NkYyRjNENUY5REQyNjhBMEJBRjM4MThFOUE2MTUKKzoxMDFEOTAwMEI4QjMzNUI3MTgyODBFNDJFNTdBNzg4NTAxQzA0N0E5NEYKKzoxMDFEQTAwMDQyRkQ1NjRDQ0JBNDdCQkIwMDZGM0FDNzc2NkM1N0M1M0YKKzoxMDFEQjAwMDM4OENEOTcwREQzQjc4OUM2RjIxRUE4QTU0OUU0REU1QzIKKzoxMDFEQzAwMEU3NDRGRURDODE2Q0QyRUJBMDdGMzdERTU3QUFGOERFNTkKKzoxMDFERDAwMEY3MzkxQ0E3OTdCRkNEQzg4RTYxMjVGOTVBRDVFNUM3M0QKKzoxMDFERTAwMDE5MTM4REZCNURGNTlBREJBMkYxM0UxRjdCNDc2NUE4QjkKKzoxMDFERjAwMDlGRThFMTc0RDVFOEVBODM3MkI1NzdBNjkwQjMwNzlFQjEKKzoxMDFFMDAwMDMxQTMzQ0E4MTRGNzQzMkE1RjUwQjgzRjE5RjgwQ0VGRjAKKzoxMDFFMTAwMDNCNTZBRUJFRUQwOUEyQ0ZERjk5NTgxQUFDRTc2MkYzOEMKKzoxMDFFMjAwMENGQTIzNEY4MTA3MkIwQUJCRUQ5NDVGNTJCQTEzRUY2NjcKKzoxMDFFMzAwMDUzQjlGQUFEMjg5QUNGMEUxM0M1OTk1Q0I3NUZERDZDMjQKKzoxMDFFNDAwMEZCMTdENDlCNkFERjQ1MUZDRERDOEU3MkRERkE1OUVCQTAKKzoxMDFFNTAwMEJGN0QwQ0ZEN0ZCMTNCQ0NFNUEzQUZDRDc0QUZFQzgyNzEKKzoxMDFFNjAwMEE5NzkwMUFFRkZDMjlFMzA5MjQ3MTc2MkI4N0MzODBCNDkKKzoxMDFFNzAwMEYyRDM5NzgxRjNCOEU3MjcxNDk3RjVGQkU5NzQxRjZFNDcKKzoxMDFFODAwMEExNUZEQkFGMUNENzk4NjlFMjc0MTZFNzhBQzZCOEJFQkIKKzoxMDFFOTAwMEVBNzdCODdDMDNCQ0RDNEJFRERGMzE1MTdCRkQzQTRFNzkKKzoxMDFFQTAwMDY3RjA3NjVERkNCOTI3ODJFOEUxNDI1RjhFOTcwQjdCOTUKKzoxMDFFQjAwMDMzNjgzRjZBOEZFMTc0MEVGMzREQzZGQjczMTdGNjY0MDcKKzoxMDFFQzAwMEU0RDJCRDM0NTQ2RTgwMUUyQUM0RjlGNjQyNEM3M0IyN0IKKzoxMDFFRDAwMDNEQTRCQ0REMjRDRTY5MDFBODg5NzQ4MzZENDBFRkFCQkQKKzoxMDFFRTAwMEE4RTM3QTU1QTU3NTFEQzU4NzYwNUNFREM4M0M0QTAzMUIKKzoxMDFFRjAwMDk2RDhFQkUzNjM4MTVFRTlGQzc4N0ZBNkIwNTNFMjc4ODUKKzoxMDFGMDAwMEYxMjI3RTlCRjQ5RDY2MzNDQTZGOEZEMDBCQUI3NkVCQ0MKKzoxMDFGMTAwMEUzNkI3OUY5QUQ5OThBOEMwMzcxRjQ5MkYxQkM0ODg3MkYKKzoxMDFGMjAwMDNFODVFMjRDMkExQjk3MkM0MjNBQUZBQ0RENzAzRkYyNjMKKzoxMDFGMzAwMDk5OUM3RkE1OTExNUUwMzlBQzVENTE2OTFFRUQ2MUVDNkUKKzoxMDFGNDAwMEMxNjlCODZGODQ4RTEzQUFCN0M5NzlFMjU0RTM0OTVGQjcKKzoxMDFGNTAwMEE1N0RFQ0FFNENCRUFGNjFCRTA5RkFBQjZBNTRENkQxREEKKzoxMDFGNjAwMDM4NEU3OTlFRTVFQjkyNzAwMjcwOTgzMUFFQUY3RDlDNTEKKzoxMDFGNzAwMDI4RUY2MURENzI5RUZBNzVDQkY5M0M5MEM5RTU1MUJCNDMKKzoxMDFGODAwMEQzRjE5MzMxODhFN0RGQUE3NDNGRjZFQUQ3QzNBMjYzOUYKKzoxMDFGOTAwMEJCRDFDQjgyRkJCQTM5MThERjhBRjFCRTQ4N0JEMDRGNjgKKzoxMDFGQTAwMDRFMjY5NzZCOTUxODNGMEJGMzRDREZBQzhERUJDRURDRDgKKzoxMDFGQjAwMEE2Q0QwRkRFQURDRDY3RUREN0U2NzM1QUI0NzlENzMxMzQKKzoxMDFGQzAwMDZEN0UxQThFREI5QjlGQjNGMTNFMkU5RUIzMzFDNTczOUYKKzoxMDFGRDAwMEI2QzNDMkNGRDk5OEM3NzMzNkE2NzhDRUM2RUY3OENFMkYKKzoxMDFGRTAwMEM2M0M5RUIzMzE4RkU3NkNDQzRCNzhFMzc5MUJGMzc4MUEKKzoxMDFGRjAwMERFQzZGMkE3MDU5Q0FBNDQ5QzI0RTIwMUU5OURCRDFDMTMKKzoxMDIwMDAwMEE2QjlFRjczRTUzNTdFOEYwM0U4ODBGM0NEMUMzM0YxN0QKKzoxMDIwMTAwMENENTM1ODgzQ0UxRERDQUVENDc3QkFENTgxRjFCRThGQjcKKzoxMDIwMjAwMEM0N0E1NjY1QTI1RjU0Njk1RDlEODg3ODMzQjY1MURDRTkKKzoxMDIwMzAwMDY5Q0QyQjNDRUVCNDJBMkZDQzg2RjY4REI2NTU2NzU3NkEKKzoxMDIwNDAwMDYzMzhFNzAzQjE5RTQ3QjFGRTE1NTNDNzBFODQ2Rjc1MjEKKzoxMDIwNTAwMERENTFCQUJGREVCNkMyRjFDRTFEMUM3RjY0Njc2MUU1RkIKKzoxMDIwNjAwMEIxQTQzNzc5NzE5RjhCRUQxOThGRkFCODZGQjY0RTFCRkIKKzoxMDIwNzAwMEU3QUQ4RkZCRDZDNzdCRUJFOTQwRUE3QkNGOTkzQTEyRkQKKzoxMDIwODAwMDUxQUU5RkRFNjU1RDg3RjMzRjFEMjZFRTlGQ0NCNkVBMUQKKzoxMDIwOTAwMEZDRkQ0MjRGNUJBRjZDQzVGREZBMTc5OUIxRENBRjcyMjYKKzoxMDIwQTAwMDAyRjRGMzZFRjY1OTk5OTY1RTFCNDY3QTc4NTc3RTlEMzgKKzoxMDIwQjAwMDYyQTA3QjcxMDlGMUI0MEYyRDEzNzM0QTU2M0FEQUQ3MzcKKzoxMDIwQzAwMEEwOUM1QjY0QTA3REYzMkFFODY1MzhERUQ1Rjc1NEQyODYKKzoxMDIwRDAwMDFGMzIzNjE5MzRFQjE5RTQwRkQ3RDBENzkwOURCMUJBMUYKKzoxMDIwRTAwMDdCMEQ3RDM1RjU4NzFFNEFEMURENkIxOEFDOERBMzlGMjYKKzoxMDIwRjAwMEIxRTIzMDlFRUZBN0FGMUJBNkE5NTc1Njc0OUIwRThFNzgKKzoxMDIxMDAwMDYyREU0MjdGMkQ4M0ZEQzMwREVCN0I2QUY5QTY2NEM0QkEKKzoxMDIxMTAwMEVGQjI0NTlERUQ2QjUwM0Y3RDI5OENFRTg1OTVFM0ZGMzkKKzoxMDIxMjAwMDAzQjk1ODBFN0RFMjdEQzZGMkZERTIzRTcwOUQ3NjFGM0EKKzoxMDIxMzAwMDJFMTVGQjUwQjk5MUY5RUNCMTQxM0EyQ0I3MzM3NzBDMUQKKzoxMDIxNDAwMEI0NUYzNEI4MzUyNzgwRTc4QURGRkM2MUE0M0QwNUNGNTIKKzoxMDIxNTAwMDE1RTNGQUEwM0M0QTM2QjkyOTBFQjY2QTVGNUFDQzBBOTIKKzoxMDIxNjAwMEU4Rjc1OEFBRTdBMzRDQzBDQjk5QTZBMzNGMkVDNkZEMUIKKzoxMDIxNzAwMDcwMUYzRkVGOUQ1RUY3QUIyODhBMTMxM0Y0OTY2Q0IyODUKKzoxMDIxODAwMDg3MjNERUI3MzRGMUY4MzhCNDhGQTlCMTQxQkFEOEQyNzkKKzoxMDIxOTAwMDE0MTczRUQwMTY1QzZGOTAwRUJFMjYzQzAxN0VCODFEMTMKKzoxMDIxQTAwMEE3RkMwOEY5M0QzQTlCQzU3QUM3MjkzRUQ0QTdFNUZBQjIKKzoxMDIxQjAwMDk2OEE3RDg1MERFNEZEM0MyNEYyNjdDNEY5NDJBRUYzQjYKKzoxMDIxQzAwMEUyQTBDMzM5MEVCQzdGNTE3RjI4NTk0NTc5NkVEOEJEMzYKKzoxMDIxRDAwMDIzMTFEMkQxMTZDRjk3Qjg5RUYyMkQ2OTdGMUEwM0UzNEYKKzoxMDIxRTAwMDU0RkM5MUFGRTc5MzhEMTNBMjQ2QTNGRUI5QzdFNDJBMkUKKzoxMDIxRjAwMDg0RkM5QUE2RTdDRDc4Q0VBRTMwRkFDRDE0NUZCOTZCRTkKKzoxMDIyMDAwMDhCMTlFMzhCRUZEQ0I5ODVCRTJGRDhFOUE1NzhDQTg1OTkKKzoxMDIyMTAwMEFDOTZDRTlGOUZDOTc3MDQwNDNDQ0FDNzJCOUJFRDMwNzgKKzoxMDIyMjAwMEVGQjk4M0I4RkMyODBGRTdGRTNCRDA4RkRFQzBGNzNCNDkKKzoxMDIyMzAwMEFFRUU1NDcyMzE4RTY3NDZEMTNFQjMxN0JFNDcwRDEyRDMKKzoxMDIyNDAwMEY3ODM3NDdDRDJGOUY2RjRGQ0RFMDQwRjdFNUZFMzhGMzMKKzoxMDIyNTAwMDBDNEVGMUE5RDdGM0M1RjQ2QjRFRTI4QjE5RDc4NkQwOUIKKzoxMDIyNjAwMEI5NkM2NjYwMTAzRkZGNjZFOUNFQkY2RkFCREM1RUQ3MkUKKzoxMDIyNzAwMEMyRjlBMERDMUNFODM1MURGOUU0NzUxM0U5QjlENUIwNDUKKzoxMDIyODAwMERGOENDQUMzNzMzNUVDOEQ5MDE2OEQ1MTM1RjQ1QTMzRkIKKzoxMDIyOTAwMDMxNDI0M0NGQjM1OUFDRTZERUNCN0QxODM0MTI5MjlGNjYKKzoxMDIyQTAwMDUxOThBQUE5M0Y2QkM2MTAxREZERTcwNUNCNDk4RURDRUUKKzoxMDIyQjAwMEFBQjk1RjU3QkREQ0U3NTA0OENGMUNBRkZEQ0U3ODlDNzQKKzoxMDIyQzAwMDIwNjM3NzZCREE1N0IzNjlDMTdBNDhERkRCQjgxRTVDRUQKKzoxMDIyRDAwMEJEM0Y2NjJCREFGQkNBMERGQ0ZDMzREQkMzQkYyRjNFQ0YKKzoxMDIyRTAwMEM0QkZCM0Q5NENDMzg3MDM1MjVEN0ZFMkZCQTI4OUZDMTQKKzoxMDIyRjAwMDAyRDI5RTNFMUJGRkVFMDZGRThDODU3N0REMEZDNzdCNkMKKzoxMDIzMDAwMEYxNjg4RkQwREM5RjE2RkU0MDlDMzdFMkExNUFEODhEMzEKKzoxMDIzMTAwMEFBMzNCOUREQThEQUQ3NkFDNjc3MDcwMEZFQzZCODU4NkYKKzoxMDIzMjAwMEFBNjc4REMzRjhDODI2ODVFQzhBOTgyRUE3Nzg0OTZERDAKKzoxMDIzMzAwMDFDMTZGNjg3NzE4QzhCNEZBODVFRTQxMzdENzkzOUJFMkQKKzoxMDIzNDAwMERGODNGODdEODVDNzk1MkVEQ0E0OEY4MzVDNDdGRUM4QUMKKzoxMDIzNTAwMEM1NjgwRjBBQzFEQjUzODMxQzQyNUZGMUFGRUU4QkYwRkYKKzoxMDIzNjAwMDJCNTQ3MkU5NUVFNEVFQzM2NjhDQjM5QjMxMjMyNjE3Q0YKKzoxMDIzNzAwMEY5NDY0RjVGNTJBRTAzM0ZEM0Y5QkJGM0VEQTM0NDVGODEKKzoxMDIzODAwMDlERTU0NkEyREYxQkMxNjFCMTlCREI1MUY1NzRCNzgwQUYKKzoxMDIzOTAwMEI1OUFGMTlFRjg4MkZEOEEwQkNGQTM1ODBGRTFEMTE3QjEKKzoxMDIzQTAwMEU5NTEwNzhGQjhEOEVCRTEyMEUxRDMwNUFGRkRGQTM4NEEKKzoxMDIzQjAwMDM3MEVBNzg1ODcxNDdGQTAxQjM4RTlFN0REMTNEQ0U0MUYKKzoxMDIzQzAwMDdBMTY3ODNDOTM1MDJFQzg3NTJEQzRGOTYzRkYzMDdGODAKKzoxMDIzRDAwMEVDNUZGQTIxRDgyODNEN0ZBNjkyN0Q2QTcxMTE4RjhGMUMKKzoxMDIzRTAwMEQ1RDNDM0I0NkJEQ0VFNzJERjM1MjNBNTMzMEFCNUZDNUQKKzoxMDIzRjAwMDg4RUQ5MDJGNjY1RThCQTdGMjZGNEIyRjhCNjE5RUZDNTIKKzoxMDI0MDAwMEZFRDNDREQxODk1Qzg3OTRCQjQxN0VFMEY3MDY2RUY0QTQKKzoxMDI0MTAwMEJFOEZERUVFQjg2MzkwODgxMzFDQzE0NjY4RTI5MTg1REEKKzoxMDI0MjAwMDVDRDVCN0Q3QzcyMzRCM0Q0MEJGQkY3ODIzMEQxNDM3Q0EKKzoxMDI0MzAwMEQ5Njk0QjIxRkQ0MkNBNTk4RkQ4M0YzQ0FCQkVBNDdBMjMKKzoxMDI0NDAwMDFFQThDNzY3MTNBRkQ5NkYzQ0MyRkVCNzM0MzI4NURFMTIKKzoxMDI0NTAwMDYzNDg1RTExMTc4Rjc4RjI4NkQ5MjlGRURFQkI0MkE1NEMKKzoxMDI0NjAwMEI4NjcyRkQ0NzM4NEU4MjdBQjFCNTM5MzcxQkYzOEY1M0IKKzoxMDI0NzAwMDQ4QzZCMzNFRDBEQjRGN0RCNzU3RkMyODE4RTdGNDJBOTcKKzoxMDI0ODAwMDUzMkZBQjIzNThFRkQ0QUFGQzY0OENEMzM4QkRDMTMyOTAKKzoxMDI0OTAwMERCREYwREJDNUFDNUZFNTBGREMzMEY2ODNGQkI2NDc4M0YKKzoxMDI0QTAwMDNCNkEzNkI0QUY1QUY1NTIxNDg2Rjk1N0FFRTJGQjc4NjAKKzoxMDI0QjAwMDc5QUFFNzlENDFCRDcxM0ZERkIyQzM4RUYwQjM2RkM5MEEKKzoxMDI0QzAwMDQxQkJFRjQ5RDgwRUIwQkRENDFGMkE1NkU1Rjc0MUZERjgKKzoxMDI0RDAwMEEyRUFCRjhGM0U2QkM3N0JENjJCNENGMUE4N0Y5RTdCQjkKKzoxMDI0RTAwMDBGRjY0Mzg1RjYzM0QyMUIzRTBCODMyRUM4OUYxNjQ5NDkKKzoxMDI0RjAwMDc2ODRDRjE0RTY0NkJGRDI0NUMzRTFCRkFFQzE3MzYxNTcKKzoxMDI1MDAwMDZFNzM3QTAwRDJFRjU5M0MyNzcxRENDQTU1Q0Y5M0RFNDcKKzoxMDI1MTAwMDUyRjFFODhBNzQ1NUM1N0VEM0EyQkJCMzlCQzg3NDg3QjkKKzoxMDI1MjAwMEQ4Qjc1MTdGQzcxNEY1Nzc4QzkzNDFGRDFERjNBOEJGMzEKKzoxMDI1MzAwMDYzOEFGQTNCN0VBRkQ5QTRENUZGMkVBNzcxMzkyNUVENkEKKzoxMDI1NDAwMEM5MDMxQTNBNzJEMTdGRTcxQkNGMzI2QjY5QkZCNTY1RjkKKzoxMDI1NTAwMEEyQkVCRTRDMDk3N0ExM0M1QTg2QkExMkU2RkYxMjQ2Q0IKKzoxMDI1NjAwMEU3NThCNjJEOTFFRkI3MDJDRjc1NTZFRTM3RkE0QURDMzEKKzoxMDI1NzAwMENGQkRCRDAzNzRCMjEwRkFCQ0UzOUE5NTg1REU5QjFERjYKKzoxMDI1ODAwMEM3NjIzNEY5MDlENjQ0NERGRDdDQkI1MzUzN0U2N0MyMDQKKzoxMDI1OTAwMDIwNERGOTVEOEU1QzRERkU5RUNDRDE5QUZBOTM1REUzQTEKKzoxMDI1QTAwMDM0Rjk3QjQ3RERBNUE5M0ZENTNENTU5MzlGNUUzMDQ3NjQKKzoxMDI1QjAwMDUzN0Y2NjkxNTc1MzNFNkJGNjIyNERGOTFDQ0YxMjRENTcKKzoxMDI1QzAwMEZFRkVGMkVGNkFFQTNGNTBCQjQyNTNGRTk1MDE0RUE0NzUKKzoxMDI1RDAwMDQwMkYyRDc4RUVCMkUwRkIyOTU2NEFCRkEzREE4RDI4QjIKKzoxMDI1RTAwMDM3OTZGRDM2Q0Q4NkY4MUUzM0MxNTBEQjlEN0QzRjYzQTcKKzoxMDI1RjAwMDMwRDc4N0NBODZCODUzMDZGN0U2RUZFMDIwM0RGNjE3RDYKKzoxMDI2MDAwMEVGREM4QzE4Q0NGMTk5QzQ4MEFBRThCQ0RCOUE4OEY0ODIKKzoxMDI2MTAwMEFCQUZBNzJGMUYxMzcxRTRBQTAzNzBGODkzQzE0MzY3RjAKKzoxMDI2MjAwMDFBNDEwRThEQjlFNUM4QjA1NEM4OUYxOEJDNjBBNjExRjgKKzoxMDI2MzAwMEU0QzY5OERCOEVGQzJBMDVGMkFEODM3RkMxQ0I4NzFFRjIKKzoxMDI2NDAwMEI5OEFFNUIzODY1NEYyRjJFOThDNTQ4RjNGQkZEMDc3NTQKKzoxMDI2NTAwMEE2MEZFNzdGNDdDQTNBMTdCNzkzNzQ3QkNGNUNBNjA4RUIKKzoxMDI2NjAwMDA3QkNBRjhENzBDMDM0MDBGNDhCRTkxMUEwNUY0QzhGQjQKKzoxMDI2NzAwMDAxRkQ5NjgxN0MzQTBFRjQ4QkU5MDkzODdGRTJGNzdGMDEKKzoxMDI2ODAwMDg3RjMyN0E2NkZDM0Y5MTNEM0RGQzFCOTEzRDM1NjM4MjUKKzoxMDI2OTAwMDc3NjJGQUZCRkFEOTk0QkU1N0VGQTE3NkVGRDc5NzUzM0EKKzoxMDI2QTAwMEZBNDE3RDJEN0RGRkE4QkU4RUQyM0ZEN0ZCRThGQkQ0M0IKKzoxMDI2QjAwMEMxRDI4RTExNjA5QUZCMDFFODY3NDQ3RkUyMjFEM0M1NDUKKzoxMDI2QzAwMDUwM0ZCMEY0NTc0QUZGNjQ0MzJENkI4QjQwNzlEMTY2N0QKKzoxMDI2RDAwMDhDRjlENDFBRjQzQkY2NkMwNzMwQjI0RjQzRjRCMTY4NkUKKzoxMDI2RTAwMEU2MkUxRTRDRkE0MjNGM0JDOTZGRjFEREU0RjA3ODExNTMKKzoxMDI2RjAwMENGN0Y3NDRFNEYxQkE2RTJCRTU1RkIwNkJBNjVGRjY4M0UKKzoxMDI3MDAwMEU4RkVEREM0MTE4MjNFNDYwRDcxMkYyMEZBMTBGRTc1RTEKKzoxMDI3MTAwMEU5REZFRThBOUIwOUYxQkYxQjQyRTI3NUU4NUY0OERDMDYKKzoxMDI3MjAwMDhERjQ4M0NCMzg5RkRCQURGQzlFQjFGNDczQ0I3ODFFNjgKKzoxMDI3MzAwMEQ5NUZGRTE3OENFNEMzRDhCNTQ2RDI1RjIyOEQyQzgwQkEKKzoxMDI3NDAwMEZEQ0JCODlEQjFENkU2NUM4QzYzMTg1QjY1QTM3QkI1MDkKKzoxMDI3NTAwMDdERTBCQjM5OEZFQUI5NTU0OEI3RkQwREVBRTcwNEZEQzYKKzoxMDI3NjAwMEVBN0RDNEZDQTE5Q0U2OUZGRjg1ODdFQ0IwNjM0NTVDRDUKKzoxMDI3NzAwMDAxQjZCN0YyNzIxRkI2MUY4QkI2ODVFMTk0OTI3QzdBRDAKKzoxMDI3ODAwMDA2RUZFREU2MDVGREZDNTgzRjgyRDcwRjYwN0YwM0ZGQTMKKzoxMDI3OTAwMDBFRTM0NTA1RjlBNjdGNkM3MzJFQ0FFQkZFOEI2RDc0QjQKKzoxMDI3QTAwMDJGNzRGM0I4MDBCRDY3NDU0NjI3ODBDQjc0Nzk3RUIyOUQKKzoxMDI3QjAwMDhBQkNGNEU3RURFQzQzNzZBNDA5ODJEN0JGRUZGMDZDNTYKKzoxMDI3QzAwMDQyRjgxNzU5RUM3Rjg5MjAzRTRCRUQ4RkY2QzlBOTQyOUMKKzoxMDI3RDAwMDdGRkUwNzc4N0IwNkU5NDBDMjUzRTI0NUUyNTFFMjIzREYKKzoxMDI3RTAwMDI0N0U4QUYwRDAxMzVFRjVGOEQ0RTM1MUUyMkZGRjhCRkMKKzoxMDI3RjAwMDIwNUUxMEFFRDdFMzJEODg1N0I0RTdGRUFCRTA2REI4OEUKKzoxMDI4MDAwMDkxQkY1RjY2QTlCMkQyQkI2ODM3QzJFMzgzMUQ2QzUyMjkKKzoxMDI4MTAwMDM0NTY3MTdBNDYyMDdFQkNENzFDQzczMTVGQ0FDNjREN0MKKzoxMDI4MjAwMDQyRDRDQUYyQjE1ODNFRTJGQTcyQ0YxNzFEQTZFODEwQTAKKzoxMDI4MzAwMDdDREYyRUYwM0RCRjg3RkU2NDNERjkxRTgzRUNCRkIxMDcKKzoxMDI4NDAwMDg3RkE2Rjg1QzlCODBCQjcyRDc3NjQzMEZFNzE1OTNFOTIKKzoxMDI4NTAwMDg3N0Y4MTUzMjVGODRGQzg1QTQ4N0EzMkIzNzEzREQzRTgKKzoxMDI4NjAwMDAxRkZBMTVDOUFGNDc1MTFCRDRGRjkyNURCOEQ5RTVCQ0MKKzoxMDI4NzAwMDM2QTk5NzU2M0YyREQwRjlBREVGMTY3QUU5REQzQUJENkUKKzoxMDI4ODAwMDU0QUY1NzdFM0U1OEY4QjM5RENDRjkyRERGOURCQ0M2QTIKKzoxMDI4OTAwMEU1REFDREJFM0JDOURGMkQ5RDI4RjgyQzQ5RDA1OUFBRDkKKzoxMDI4QTAwMDQzNjU2MzkwOEU5ODg3RjZDOTYzRjg2RTY5MEVCRUVGMzQKKzoxMDI4QjAwMEU5QTNGQzVEQ0M0RkU5M0QyQzQwRkJFQjY0MTBDNDk4RDAKKzoxMDI4QzAwMEJGMTc0NDI4RTY4RjQ2NEMyOUM2QkI3MTEzODY0RDE4QTYKKzoxMDI4RDAwMDg4REY0M0RFNjU4QjFDRDI5QkRFNjVGQjBGN0JDOEJCQUMKKzoxMDI4RTAwMDZDNDcyNjNBRTg3RUU1MTE2QjJBRTk1RkM4ODdBNjEwOTcKKzoxMDI4RjAwMDdCRTA2RjYwN0YxQTA4RkJDNzUxRDhCRjMwN0QwM0Y2QkQKKzoxMDI5MDAwMEFGODFCMERFMzc2MUZGQzJGQ0REOTkyQjE4QjY5QkU0QzYKKzoxMDI5MTAwMEQwQzZFREM4RjZGN0Q4MjdDMEMxQTQ2N0Y4REQ5M0YzOTkKKzoxMDI5MjAwMDcyM0Y4NEVGNUIzMTE5MTNEMTdFRkU1NkNDMkQxMzcxQUIKKzoxMDI5MzAwMEJENkZDNUY0MzFGMEQ0NjJBNjM0RkJFMEMwRUVGNDQzQzEKKzoxMDI5NDAwMEM5MDdDMUYxMjZEMTc4N0FGODRBNzhFQUUxMjhFMUZCOTMKKzoxMDI5NTAwMDRGQzBGMzk2RUVFMDM5NjIzMEUzRjY0OUVCMUZBMjEyNjYKKzoxMDI5NjAwMDUyRDA3RjE3MjVERUEzRkM2RDhFMEFGOTczMzhCNTQ0NkIKKzoxMDI5NzAwMDhDNTdCRDhERTYzOUI2NkUzNDMzMEUyM0JGNEQxNkMyNkIKKzoxMDI5ODAwMEI1Q0FDQUUxQTVCNzVCQjE2RDdEMENBMUYxQkI1N0NENEUKKzoxMDI5OTAwMDlFODIyMUIwRUVCMzlCNTVCQTM3N0VFOUM1MzBCMjQ3NkYKKzoxMDI5QTAwMDdERTZFN0Y2QjY3QjE0Q0Y2NDlDNUY5NUVBNTg4N0VGMjcKKzoxMDI5QjAwMDg4QjJCN0Y4M0I2N0VDRUJBM0M5RDMyMkJGMDU5RDZFODUKKzoxMDI5QzAwMEUzRjdFREFCQUM5M0JBQzVBMzNDNEY0RDcxQkE0NzcwN0EKKzoxMDI5RDAwMEZBRTdFRjQ1NEFCREEyOUY4NUJGNEIyMERGMkZFQzQ5QTgKKzoxMDI5RTAwMENGMTgxOUNFRTU2MDNGMEI5N0RCMTJBRkQwOEVGMjQ5QkUKKzoxMDI5RjAwMEQwQ0Y0ODkwNzM0OTNGMDlBN0YzQzVDRURFRUVGOUI4QjIKKzoxMDJBMDAwMDNFNjk0N0U4RUMxN0UxNDc3OTNCMzYzMDg0REVFNTJBM0EKKzoxMDJBMTAwMDM4QTE1MjNDRjExMTExREY3NUU3OTA1QTVCMEFFMEE5MjkKKzoxMDJBMjAwMDI5Q0Q1MzgzRUQ5OEZBQjU4QTcyRTY2RDU4NjcxQ0RBQTIKKzoxMDJBMzAwMDFGNEUwQ0IzRDFGOUYxNUI5RTQzQkYzMzQ0Qzg4QjFDQ0UKKzoxMDJBNDAwMDk2QTNCOUFGMjZFOTRFQjU1MUZDNEVFNzdCRkMzRURFQkUKKzoxMDJBNTAwMEQyREZGMEI4Q0RBNUJENTU4QUZGRDdDN0M1OEQ2NUU5RDIKKzoxMDJBNjAwMDNGNDE3QkUzODQ1RTI2OTdERjExOTQyRkYyMUQyMDRCQkMKKzoxMDJBNzAwMDgyODEzOTQyRjRFQzMwNDczODczODRDQzI3MjIzMzU2QjQKKzoxMDJBODAwMDkzOEY3NEY1RDVENDhGMUU5NUEyMjk4RjcxMEZENjk0OEMKKzoxMDJBOTAwMEM3MTVFNDY5RjJCRDhCNkVENUQ0RUYzMzdCQkMyNjlGOUUKKzoxMDJBQTAwMEU4Qjk1QjUzM0ZBOTdDOUEzNjhGN0MwNzcwRUY1RjNCOTgKKzoxMDJBQjAwMDU3RDM2RTQwNUQ4OUE2OUVEMzU3QTEyOTY3M0U3NzZCOTkKKzoxMDJBQzAwMDY2M0NDQTcxRkUyRjc1RUQ1MjRERjlEMzUxMDUzQzdFMUYKKzoxMDJBRDAwMERDQjY4MEVFMjlBNjM1N0Q0RkQzOUZDNDZGNTIxQ0M3NEMKKzoxMDJBRTAwMDJGNzNGMEZEQzEwN0ZGOTFERjQyRTAzOTNGNDFCQjZGMUIKKzoxMDJBRjAwMDRDQjA4RjNCNjZBNzU0NkJENzQ4QkE0MTFDRDRBMTdGMUEKKzoxMDJCMDAwMDk2MEVBQTk5OTYwRTdBRjEzODlFRkNERjBDNzNBMDFFRTEKKzoxMDJCMTAwMEEzQzczRkZBMjM0MkQ3ODlGRTg4NTBCOEEwM0YyMjM0OEEKKzoxMDJCMjAwMDhGRkU4OEQwRkFFODhGMDgyRDQ3N0Y0NDY4RjlCMDEzRUMKKzoxMDJCMzAwMDVBRkM4RjY4RDVFMkZGOTYwRkM2RkY0MzNDOEQ2RUQzREIKKzoxMDJCNDAwMEQyODMxRTRGQjc3REE2QTU4RkIxOUU3MDgyQ0IwNEQwRDUKKzoxMDJCNTAwMEM3OTBERTI1OUU2NkMzN0ZCNENGQjNBMjY4QjQxQkRDRUEKKzoxMDJCNjAwMEMxREM3NDJGRTA3RjBCNUY5Nzc1RjhGQTkyQUQxQjgxODMKKzoxMDJCNzAwMEVGNUM1RUYxNzIzOURFRDMzRTdGNjU4MEZCMEI5NEJCNjgKKzoxMDJCODAwMDI5NDJDRUVCRUQwMDMyOUVENDM3OUVFM0QzNzczMjhDRDAKKzoxMDJCOTAwMEU0RDU1Nzg2QjY0OERDM0ZCRUEzQjY5MTVEM0U5MTc1M0QKKzoxMDJCQTAwMEJDODFFRkNGMENFOUU1NjE1OUJERjFDQTM2NzAzRjk0QTUKKzoxMDJCQjAwMDNGQjVFOEJFNUNEQ0U3RTZGRERBOTI4QzdBQ0RCQzAxN0QKKzoxMDJCQzAwMEZDM0Q0MTk2RDU0NkVGQjRDOEY5Q0M0QkUyRjE0N0Q2NkYKKzoxMDJCRDAwMDJDMjFBNzVEM0MwRTI5MjI4QkRCN0YyMjVENzY4QTgzMjgKKzoxMDJCRTAwMEY2NjYzMTExRTdDOTkyRTc2NTIzMURCRTFEOTY4MTc0MTMKKzoxMDJCRjAwMEI2OTFEQkI5REE0QzBFOEE2QkYxMDEzREEyOUYxMkY1NUEKKzoxMDJDMDAwMDZERDQ4N0ZCMEI3REI0RTE0M0FCOTVEMzFERDNFQ0VGQzMKKzoxMDJDMTAwMDgzRkM1NjREMUNFRTkwOUQ3NjREM0VCQjM5NDE1MzdGNTMKKzoxMDJDMjAwMEU4MjE4N0E2M0MzNzkwQTkyOTFGNzZDMkE1Qzk4RjY4REQKKzoxMDJDMzAwMDFEQTVBOTdGQ0IwNzZFNEQ3RTc0NUI4MUE2RkU2RDlGOUYKKzoxMDJDNDAwMDE1NjlGMjQ5QUNFMzQ5ODRFN0Y4QUMxNDFFREZBRjA4MUMKKzoxMDJDNTAwMDNCODA4M0UzNjVERTc3RTJFOTNFOEQzQzQ3QzhCODZDOTQKKzoxMDJDNjAwMDhGQTA2M0ZENzk2NDgwRDk0MzcxREUwRDg5Q0M0NUY3NkYKKzoxMDJDNzAwMDQxQUNFMjNDQzhCNEU3MTQ4Rjg4QUI5NkZBM0NGMzY5RTgKKzoxMDJDODAwMEUzQUE2NTNDNzVENzc5NDY5QzVGRTQ3OTIyMjQ5RURBRjUKKzoxMDJDOTAwMDhERjM5N0YxRDQ1RDc4MTdFRjRCRUFFOUYzNUU4MTc3MTYKKzoxMDJDQTAwMEZEM0EwNjk4RjlGREFGODZFRjlBRTkxRThCOUM5RjdFNTAKKzoxMDJDQjAwMDVFOUI0NDNDRTA3NjZCRjdFRjBGM0QyMEU4QUMyREE1MjIKKzoxMDJDQzAwMDY4NjYxNkQ0N0IxNkI2Mjc4MkU3NzVFM0I5REE3QzAwMEUKKzoxMDJDRDAwMERGODYxRjk4NUQyQjFEMzcxRTZGREU1MEJFOUU2MjdDMDcKKzoxMDJDRTAwMDU3MzU4QkRFRTlBNDdCNkI3MkRDNkEzMUVFRjQxQ0E1RjAKKzoxMDJDRjAwMERCRjVDRDhCRTZGMTVEMkNEQTRDRjcyRTdBMUU4RkMzMTcKKzoxMDJEMDAwMDM1QzFDQzFBRTk5RDI0NzEwRkUxODE3NUNERUIzMTU0QTkKKzoxMDJEMTAwMEIzRDhEQzY0RTJFRkUzRkI0RDY4MjcyQTFDMEY3QTYwMkUKKzoxMDJEMjAwMDJFREEwRERGREY2ODAzN0RFREQ5M0EyM0Q5N0QxRURBNzcKKzoxMDJEMzAwMDNERTYzRUQwMjBCQkVFOTUwQzgwNzMxQUQyNDkyMUUyQ0QKKzoxMDJENDAwMDFGRkEzRDk3Q0RFMzlEMUZDQkUyRjIyMTVGRkRCQUVCNjkKKzoxMDJENTAwMDNFODA0NTIzRTdGOUY5QUYxQkJBMjM3QTk0RUJGOEJGMUQKKzoxMDJENjAwMEJBMUYyMEU5NTcwRjI3NzlCRTY2NjJGRjFBMjhFNjI1QTkKKzoxMDJENzAwMEUxRDc2NTNGMTFGMDkzRjczMzFDNEI0QzQ1NUI2RDc0MDUKKzoxMDJEODAwMENGQTMwMEUzQ0EyNEZFQkVDRUU2NzRGOTY2MTZDNzM3QTkKKzoxMDJEOTAwMEQ2NDM3OUQ0NTNCRDdDMzUyQjFBRURFMDlEQ0MxMTZEMTMKKzoxMDJEQTAwMEJGODEzREY4RkZFOERFMDRDMUJGQTdGQjVFM0RDOTg5RDYKKzoxMDJEQjAwMEVCRTQ0MzBGRjdCRjdBQTI0RkZBRjcyREVFODE4NUM4RjcKKzoxMDJEQzAwMDA5MUVFRjIzRjBFMTFGNjgyMEJGRkE5QTQ4MkQxRkZGNkMKKzoxMDJERDAwMDM1OEJEQjVEOUU5NkZCODUwRkNFREQ1QTM5QzFEMEFFQkIKKzoxMDJERTAwMERGQjA0QTE1NzI2MjQxRDdFRjQ4RTBGN0Y5QUI0Q0E0NjcKKzoxMDJERjAwMDVGMzM1NkY0MzhDNjE5N0NCMkQxNDQ3MUIxNjNERDhDQUYKKzoxMDJFMDAwMEY0OTg5MkNEOEE3RjhCODJGQkU4OTgwNDlDQkZEN0E3NjkKKzoxMDJFMTAwMEREOEZFRjYwQUVENUU4RkYyODVEQUJGREJFRDBDNjdGOEQKKzoxMDJFMjAwMDZGNjJCRUZFREQxNDcxNUU1Rjc4ODNGM0ZBRDkyQ0UxMjgKKzoxMDJFMzAwMDA3NzIzMTE3RTk1REMyRkY1RjJFREFFOEY1QUU0RTNGNEIKKzoxMDJFNDAwMEY3OUJFMTc5NUJFNTc2Mjc4QTFCOTNGQkJCMDNGRDM3OTQKKzoxMDJFNTAwMDIxRUY4MTAwM0NDMzMzNzExRjZGMzQ3NjFCQ0ZENzA1NDAKKzoxMDJFNjAwMENGMUVFMjE1MkVEQTQ0QkM4MjhEQzc2Nzc0RUUwRkUzRTUKKzoxMDJFNzAwMEZFNERFOTU3MTJGNTJGRkFBRTUyMzlENkM3REUyRUU1RDAKKzoxMDJFODAwMEYyQjgwQkU5NEZEMkZCQUIzQTZEMDZGMkI3NzRFRThGOTYKKzoxMDJFOTAwMDI0RkYzQ0ZBNzFBMjgxMEVDRTFCRjZDNThGNzIwNkU3QTUKKzoxMDJFQTAwMEU3Njk1MzM1N0UxMDdERUE1OUYxMTI5RDE3Q0I1MzNERUEKKzoxMDJFQjAwMDMxRDkxODg3NkQ3NDU5NUQ5MDdGQzQ3Njg0REU4RjJBNkUKKzoxMDJFQzAwMDE0NzYyRkZEN0NCQkNFNUQ2M0Y4RkIyRTlEM0VBRUNGMEUKKzoxMDJFRDAwMDc2MTZGMDc3Mzg0MDJFMzJFNDIzMTk4NzMwOTVDMTI5RDEKKzoxMDJFRTAwMDE1NTI2RjYwMzRDREU3REJGQTczQTY1RkNCRTU3RUNDN0QKKzoxMDJFRjAwMDZCQjc1MTdCQ0ZEQUQxOTQxRkQwQjg3RTA5REU4Mzk5QUUKKzoxMDJGMDAwMEQ5QjBEMDg0MkVFQ0I2Mjc5N0U3ODc0M0QzQjZGRUZFMjAKKzoxMDJGMTAwMDk1RTE4OEI3NzE0QUI3NzZGOUJDNkM4NUY4QTE0RDE3NzEKKzoxMDJGMjAwMDVGMkZEM0FERDk5QzVGN0U5RDJERTVCODg4NDM1QUExMTQKKzoxMDJGMzAwMDEwMUYyQzU1OTg4QzRCMjIzOTJFRjM1NzlCNDQzRTlGRTMKKzoxMDJGNDAwMEU3OTdBREUyRjkzNkYxQkVGRTBFNjE0N0MxNzU2MzhBQkYKKzoxMDJGNTAwMEVCQzY3M0ZGNkU2MTY3QzE3NTYzOEFFQkM2RUYyOEI3NzYKKzoxMDJGNjAwMDMwOEY3MjBCRjMyOEI3MzA4RjcyMEI1Mzk0NUJGOEJEMjAKKzoxMDJGNzAwMDg0MTUyNUU3QUFEQzBGMzUzMTk0RUZBRTU5RDlDNDEwN0EKKzoxMDJGODAwMDdFNDEzRjU0NjgxRUZENTBBMUY1RDEwRjE1NUE4RTdFMkIKKzoxMDJGOTAwMEE4RDA3MkY0NDM4NUU2RDEwRjE1NUExRkZENTBBMTc5RDAKKzoxMDJGQTAwMDM2RUFBRTYwMUVFNTlDN0JBQTI2M0YxREY0RkM4OTIxMTMKKzoxMDJGQjAwMEZDOEQ3RUE4RDBGRUQxMEZBNUU5Q0ZCMzQ0RDNGRTdFMTEKKzoxMDJGQzAwMDU2QTc2OThGN0VBOEQwRkEwRkQ2MjkxQTNGRDU4M0UyN0IKKzoxMDJGRDAwMDlERDNEMjRENzE0NDNGRjMxRDQ1MzVEOTgwREZGRjg4MjUKKzoxMDJGRTAwMEY4RUY4NzREMjk4OEU3OTY0NUZDNUMxNkVFRTI3ODZFOEYKKzoxMDJGRjAwMDJBRTA3ODM3MzA4RUU3OEUzOTg0RTdFNTY2OUVDRkU3QTIKKzoxMDMwMDAwMEYxQzk3QUZBNDE3RkNGNDQxM0Y3Rjc2MDhBRkUxRTRDNkMKKzoxMDMwMTAwMEQxREY4MzI5RkE3QjI2QTY3MTdGMEZBNkU4RUZDMUVGRTcKKzoxMDMwMjAwMEU4RUZDMTE0RkQzRDk4QTJCRjA3NTNGNEY3NjA4QUZFOTQKKzoxMDMwMzAwMDFFNENEMURGODNFREQwREY4MzI5RkE3QkYwM0JGQTdCOTYKKzoxMDMwNDAwMDMwNDU3RjBGN0UzRjg5N0UyNzUzNzA1RUE4QzcwRkQ0MUYKKzoxMDMwNTAwMDlDMUY4MTBFMzVFNzQ3QkIyNjhGN0E3QzY4N0RENEUzQzEKKzoxMDMwNjAwMDQzQ0I1MThGMEYyRDQ3M0QzRTM0OEY3QTdDNjg3REQ0MDIKKzoxMDMwNzAwMEUzNDNGM0JGQ0M3MjEwOUZBMTNFMUZEQTBFRjVGOUQwRTcKKzoxMDMwODAwMDdDNzY5M0VGMERCNDlENERERTdDRjkxOEE2NkQ5MUNBNDgKKzoxMDMwOTAwMEIzMEE4ODhDRTZFQ0Y3RUU0MzNGNUQ1Qjk4OTIxQzAzMjUKKzoxMDMwQTAwMDkyRDNCNEUyQzNGQjI2ODJCRUU2MTFGMTdGMzlBQ0MzRjIKKzoxMDMwQjAwMDgwRjhGNjg4RjdENDNEMDE0NkYxOTZEOTdGNEJBNEYyMEIKKzoxMDMwQzAwMENCNzhBRjVGQzREQjIyREU3M0Y3MzNGQTVEMTJFOTJGRjIKKzoxMDMwRDAwMDk2RUQ1RENDQUU2MjJBRUIwN0YzREREN0QzOEYyRkVCRjUKKzoxMDMwRTAwMDkxRkMwQzk5MDdERTAwQzY3ODk1RENFNUI2M0M4Q0Y3QzAKKzoxMDMwRjAwMERDNjE1MDI4NEU2MkM3NEExRTI3QUNBN0FCMzM0MjRGNTMKKzoxMDMxMDAwMERBNjFEODc3MDRFRjgxNzQ3ODE1QkEwRjlDNkU2NDI3NjIKKzoxMDMxMTAwMDRDNzkwOEE3REEzQ0RDN0ZERkNFOEUxMUVCQUFCRDE1MTcKKzoxMDMxMjAwMEVGOUJDODc5NEJGQjI2QzgwOUJBM0YzN0E2QTM3NTQyNjcKKzoxMDMxMzAwMDM0RjRFM0YxOERBM0RGNDkyOTM0NzNCRDAxREJFMTc5NzgKKzoxMDMxNDAwMDcyODg0RjcxNkYwREExRUZGNzg1RENGNEY4RjhGODNGNDYKKzoxMDMxNTAwMDdGNkUwQTZGMTdDRURCRkRGQ0I5Mjg4MkUzOTQ0Njg1QUIKKzoxMDMxNjAwMEUyQTVDNkVDNjY2RUJDOUZGQjFGNDI5RTBFRDkxRDUwQTkKKzoxMDMxNzAwMDcxM0M2RjIzMUY0RkY2RUJERDlDNENGNzE2QkRBQzZEMTkKKzoxMDMxODAwMDYyMDJGOTQ4MTQ4NjcyNUJDMjBERDY3NzBDRDcwN0M3NjYKKzoxMDMxOTAwMDg2MTM2ODlGQkVEOTdCM0ZCNzBGOEZDOUM3MzgzQUQ2MTEKKzoxMDMxQTAwMEMyRTgxRENCQzlDM0RGRDVBQzk3RDAzRTkyRkFBNTdENEUKKzoxMDMxQjAwMDJEQzNBN0QwN0JDMTUzN0MyQjU2RTJCNjNFRDlCN0U0RDIKKzoxMDMxQzAwMDhEREU1ODdGMUI3MzM5MURCNDE1RDFCRDU4Mzk5RkMxOTEKKzoxMDMxRDAwMEVFN0QwNkQ4MTY1OTE2NkIzNTg0Mjk4ODZGNzYzNDJFMDUKKzoxMDMxRTAwMDg0N0U4MEYzNjcyMEJFNzM1RDI2N0FCRjc3QUFEMTZFOTYKKzoxMDMxRjAwMEEyRjcyMzdBODgzRkI5NkE5M0YxMjczQTdENDExNzY3OEUKKzoxMDMyMDAwMEQyQjBGQzgzNjRCNDI3MkY4RDM0OTBGRDc3RTk0QkZDNUEKKzoxMDMyMTAwMEY3MDAzQzlCMTQ5MjZCNTIwRkYyOEEzOEI1QUI4RDZGNUUKKzoxMDMyMjAwMEY0OUU4NTcwREY2N0EyRkU2NEZDNDk3NUFBM0ZEOTgwRDEKKzoxMDMyMzAwMDcxRjU3REI3RTRDNEFBQTQwN0M0RTZBMDFFRTBGQkQ1REYKKzoxMDMyNDAwMDdEQTNCMERFMkFGRThFRTVENUM2OTlEMTAxRUE4OUZCQzEKKzoxMDMyNTAwMDZCQ0EwNEJDQ0E0NDFDOTMxNzFGRjQ1NjgzQkY4QjI1NEEKKzoxMDMyNjAwMEVGNzdCMDI2QUVFRjQ5N0I4RUY3QjdDMzhFMjM3RUJERDYKKzoxMDMyNzAwMENGODg3N0E1RDc3QUU5NUVCNjNFOEU2ODUxQTM4OUUyRkEKKzoxMDMyODAwMDhFMTZFOUY0QzI0QUExMTc1NkRFNDAyRjFDOUNBM0QzMjgKKzoxMDMyOTAwMDBCRTVFRkE1ODgzNjRDRURGNzNFQzZFREM5N0I4OUM1MzkKKzoxMDMyQTAwMDI2Q0VGRkM1RkIxOEQ5NjE4QjU3NEMzMEQwM0JDODJGQjkKKzoxMDMyQjAwMDcxQkEyOTVFQzFGNTlCRTI5N0RENzRCRjUwRUE4QkVGQ0UKKzoxMDMyQzAwMDA4M0Q2NkRBQjUyNDgyRkIxRjg0REUzMjEzRTMyQjAxNEUKKzoxMDMyRDAwMEJFODU2RDYxMjIwRTJCOTFEMjU5RDc3OEJDRTUzNDFCODcKKzoxMDMyRTAwMDk3MDM2REFGRjE3NzIwM0E3RDE2QUU0RjFENjNGQzFEM0QKKzoxMDMyRjAwMDMzMUQ1RDRFMzVGQTBENzhFMUNFMzUwNkU4MTJGMjkzQjYKKzoxMDMzMDAwMDUxMEY4MkZFNjZBMzVFMTQ4Nzc0RUVDQ0E3RjhCRDAyNEYKKzoxMDMzMTAwMDg1RUVCREU4RTlCQ0QwNTRGQjA2QzY4NzE2NkU2NzJFNjUKKzoxMDMzMjAwMDFGMEJBNTczQTA1RkVDQ0ZBN0QwRkIwMDFFNzFBRTk1NUQKKzoxMDMzMzAwMEY0QUJBN0Y3NzkxMUMyMUU2NUUzRjZBNjJFQkIwNEVBMkIKKzoxMDMzNDAwMEE4RjQ0ODc3Q0UyQ0Q0MUJFN0ExNkZBRjJGMjcxODhDOTkKKzoxMDMzNTAwMDNCOEJDQ0UyRTU2NTM5MzlCMzFBRjE5MEQzODM5RDQyQkEKKzoxMDMzNjAwMEZEOUU5OUUwRTE5MUVGMjBGNDYwMzc0MDdCMDFDQUM5RUUKKzoxMDMzNzAwMDA3MUVDQTM1OTc4NEM4QzlFMUFFRjE4RDQzNDcwNEYxRjEKKzoxMDMzODAwMDVERDI3NURGMkY4QkRFMDU1REZBNDgxQUZEMUU0RTRGQUMKKzoxMDMzOTAwMEZBNzAyOUMwMTVGOTYyNUU3NERCQzNGODBCNkIwRDM5NDYKKzoxMDMzQTAwMENDM0QzMTAxN0YyNzUwQUU4RjA1MzA4RTcwQUVDODM3Q0YKKzoxMDMzQjAwMEVGQkRFRjRGNkI2RDA0MTdDQUQ3RTc4Qzk5ODU3MTIxNkMKKzoxMDMzQzAwMEQ1RDZCNjQ5NDg3NjM1NTk5RTAyQkNDNzE4OTQ0RjQ1QTQKKzoxMDMzRDAwMEVFMjQwNUU1NTM2RTAwQ0Y4NDlCRTRGRDY0OUQzREEyODEKKzoxMDMzRTAwMDM5ODdEN0Q3REIyNTRBQjNCOERDOTZCRjhCNzJFQTkxMTEKKzoxMDMzRjAwMDgzN0I3MUJGOTJGMzNGRDVDM0VGMzBFQ0NDRTFGMkY3QTIKKzoxMDM0MDAwMDdGRUIxRTg0RkVGRUMzMkZGQjdBOUVDQzgxNzUzQzZFNDMKKzoxMDM0MTAwMEUwRjdGOUZCQUE0RDRDRDg4N0M4MkYyQ0U1MDUxM0VGMzAKKzoxMDM0MjAwMDYwMDRGMUVFQTY3Nzc0MUIxRTUxRUNBMUY2MjlDRjVBNjkKKzoxMDM0MzAwMDg1REZBM0VGQzE4RUMzMzIzQjlFREMwRUVERTZENTlCNEMKKzoxMDM0NDAwMEU5RjdGODlFNEJFN0Y0RjMxQ0QwMEZGRDVFOEFCOUY1NUYKKzoxMDM0NTAwMDBEQUIzMzA4Qzc4RkVCN0U2QUEyREZBNTYxODEzNDdDOTgKKzoxMDM0NjAwMDdGNjc2RTZEOTgwQkU1RjE3MDU3RDEyRjcxREUxMTU5QTIKKzoxMDM0NzAwMDJFOTI0MzhEMTg0MzBFRjlCQjdBMTVCRDg4REZBQkQ3NkEKKzoxMDM0ODAwMDFEN0UxNkRGMTNBODY5NzFEMkVGOTU3ODBGRTVBRUM2RTEKKzoxMDM0OTAwMDc3NEU4NkJCM0MwN0IxREM2QkIzRDM3QjFBOEIxQjYzQzcKKzoxMDM0QTAwMDY4RkY5QUQ3NDdEQzBCNjUxREU0Njc5M0YwN0Y0N0Q4MjgKKzoxMDM0QjAwMEFGRDZCQTM4RkQ1RTExRTcwRTE0OTA1MzM1RjVCQUI3QTIKKzoxMDM0QzAwMEUzNDkzQkExREVDRUEwN0Y1RkEyMjdGQjgyQjQyN0EwMDkKKzoxMDM0RDAwMEZEQzAxQzYyNjc5NEY2MDk1M0U2QTkzOUE4MzcxNDlCMEUKKzoxMDM0RTAwMEI1RjcxMjY1Q0E4NkYyN0Q1RjlFMDNFNzc3RUQ1QjU5RkIKKzoxMDM0RjAwMDkzRkFBMDdFQkM0MUIxRDM3QjkzMzZDN0FDRDE5MDJGNTkKKzoxMDM1MDAwMDNCNjFDMkM4NEU1NjE4RUIzMEUzRkIwMzFEODA1RjhDNTUKKzoxMDM1MTAwMDhGMkUwMTdFNDUzOTUzMkNFMkI0Q0EzNjhEMjY3RTJCODAKKzoxMDM1MjAwMEYzNDNEQUNEM0I5QzMyQkQ3RkMzRDFGRTJGMjNGRDA0OTQKKzoxMDM1MzAwMERDRTRCNzJDQjNCQkNEQjEyMTdDNUZEQUE0NjhERTFEMUYKKzoxMDM1NDAwMDkwRjk4RTFDOTVGMzExQThFMzA4QkYwNzFFNzI5QUYxM0IKKzoxMDM1NTAwMDZEOUY2MjUwMjMzMEZFOEYwRDc1NjhGQ0M3NTA4RkUyNUYKKzoxMDM1NjAwMDQxMEE1M0Q4NzFGRTBFM0NDQ0RCQzlDN0NCMEJFOUJGNzcKKzoxMDM1NzAwMEE0ODlERjlCOTY3OUE4NEZGQUNGREY3MzIyMDlBRTVFNEMKKzoxMDM1ODAwMDNCQUNEQjg5QTk5REU2MDk3MDIwMzg3NUFDODdGRTFDMzEKKzoxMDM1OTAwMDM0MEVFMUEzMzRFMDM3RTE3OUJCMThFMzUwMjAzRkQ3ODQKKzoxMDM1QTAwMEVFMzdFMTM4MjU4REZDMUQxM0NGM0EzRThFNjc2RDhDQ0EKKzoxMDM1QjAwMDM5MUJGNTIzQTNERERDMUZFMTI3N0U2RjE1RTY0NzdBNzMKKzoxMDM1QzAwMDY0MTlDMDA1RUY2M0UxN0QzN0RDNUJGNEYwRjE4QUY5NDMKKzoxMDM1RDAwMDk2MzVDNUQwM0IwQUMxRUYxQjRDODg4RjM5M0RCQzhCNUIKKzoxMDM1RTAwMDkwMzU5NEQzNkQ0OUUzMzhCQUJGNUU2Njc0RDMzRDA3MTYKKzoxMDM1RjAwMDhGODBFRjI3NEJDMjFFNDVGRkMwOUM4RDRGOTg5QzkwM0IKKzoxMDM2MDAwMEVGMzc5NEQzNkZENjUwNEU1Rjg1Mjk4MTM0N0FBRjY4RjcKKzoxMDM2MTAwMDQ5OTgwQkU3MzlDN0RFNDRFQkVCODJFRjYzMDAwRjA1RjcKKzoxMDM2MjAwMERGQjkyOTIyRjgwMjVERjgzMDZFQUY2Q0EzMTY5RkMxOTYKKzoxMDM2MzAwMEY5NzBGODk2NkRGNDEyQkYyRDMwN0FDQ0Y2RDA3OTZDMTMKKzoxMDM2NDAwMDNBOUM4NkY3QUFFNjAwN0ZFM0JCMTJDQ0VFQTFGQjkyODAKKzoxMDM2NTAwMDlGM0UzNjJCOTlENjA5RjM0NEI4NDZCQTFDOTNGMEZEMjkKKzoxMDM2NjAwMDIxQTAxMzdFMEY0NkFDNDdERUVCOTZFMzREMUNDQUVGNUMKKzoxMDM2NzAwMDlENEUxQ0NBRTU2N0NGN0NFOTI2QkRBNjAxRjA4Qjc2N0UKKzoxMDM2ODAwMEVGOUVGOEQyOEM4MjFCQzYzNTk3RjFERjkxRDBGM0E5NUIKKzoxMDM2OTAwMEU0NEZDOTk3OTI0RjI1RkYzRTZCMkEwQTI0Mjg0MTM5RUYKKzoxMDM2QTAwMDAzRkI2Q0VEOEJEREMwQTk1MUNDNzdBRUMwMkJDMEY1MTAKKzoxMDM2QjAwMDU4RTgzREFGNkE4MUQ3RTIxNDJEQkY2MzdGRDhFRjFDNzUKKzoxMDM2QzAwMEMxRUZDNUUzMDM2OUY4MkU5M0FDMkZDNzJEOEVFNUVENEUKKzoxMDM2RDAwMDkwRUU5MURFRTY4OEYxQjBGRTUyQUFBRkJEQTc1MkRBQjUKKzoxMDM2RTAwMDI1MkY3NkFGOEE0Nzc5QjE0RkUxN0VEMEY1NDdGQjdGMzIKKzoxMDM2RjAwMDA3RjVENzNENUM3RkJENTBCNTdEMzFFRTk3Q0NFODRGRTcKKzoxMDM3MDAwMDBFN0RERjdGM0VFODM5MjgyNzE2ODhGREI5MkNEMEJEMTUKKzoxMDM3MTAwMEJDQjg5MEVFQTkxODFBQzJDRjY1M0ZEQjkzRUVFMUYyNzgKKzoxMDM3MjAwMDI2ODBGMkU2Q0Y3QjVFRkRFM0FEOEVFMDdFMkFENzUzQTYKKzoxMDM3MzAwMEIyRjY1RDkzRDcxNjBBM0ZCRUZFNDczMzNCRTkzRTVFQzUKKzoxMDM3NDAwMEE5Q0RFQ0MwNzhFN0QyNDYyRkM5NUY5NjAwN0FBMTEyQzYKKzoxMDM3NTAwMDEyN0ZBNkEzMEI2RkEzNDJGN0M4NEFFQjQ2RkFENUZGMjgKKzoxMDM3NjAwMDQ1Mzk1REJBNkUyQUJEN0IyMEYxMjZERjY3OTFGQkFCNDAKKzoxMDM3NzAwMDlDRkY3QTMxRkYyNjIxREZFNjBBRkE5RTVCM0VDRTlDNTMKKzoxMDM3ODAwMEQ4OEJGNDZFMENCMzY0NzNDNEY3Mzk2NURBRUY1RDc4RTcKKzoxMDM3OTAwMEVCRjI1RjY3QUQ0NjdFQzFGQjQ1NzQzRTU5NjdFMkY2Q0EKKzoxMDM3QTAwMEJFREREQ0ZFNzg2MUU5QzFERkREMDdGNUNFM0ZCRTI1NzkKKzoxMDM3QjAwMDk5QTk1QUJDQTE5RUJBNDBFOEFCMEI4NUZEQUYxQkJDRDIKKzoxMDM3QzAwMDZEMTlEQTNCOTg1RkY4MUNDNzVCRTlERURGRkUwNURGQTkKKzoxMDM3RDAwMDEzMkI0RTExRjI2RTNEN0YwN0EwQTQ3OTFGRTE3MUNFMkQKKzoxMDM3RTAwMERBMEQyNjI3RDREQjM3RDQ0OTcwRUE5MkZGQjVCOTc2RDMKKzoxMDM3RjAwMEI0MkJDRjVEQkJDNTg0NzI2MjlGODQ4MzhFMUY4QTQ1QzQKKzoxMDM4MDAwMDlDQjA4NDMzRUU0QjRBODg3RjQzRDY0N0Y5ODhFRkRGN0MKKzoxMDM4MTAwMDNGQjQyNDJDMEFFMzc5RTQzODFGMDkzQTJGQUQ4RDg5OEYKKzoxMDM4MjAwMEM1RjE0QTZCQkQzRkM2RjM5MERDMEZGNEVCM0MxREM2RkYKKzoxMDM4MzAwMEY5QTUwNEZBNDNCRTNEM0RDRTk1QkMzNDJCQThDRkVBOTIKKzoxMDM4NDAwMEVCQkYyQkYwRjhCNDg5RkY0RTRENTI0NEYzMkU4QTZCMzgKKzoxMDM4NTAwMEE4MDk3N0ExRkMxODM4QjBDRDhGRTMyMjdERTNCQ0NENTkKKzoxMDM4NjAwMDA2RkVCQjM2MDNBQkRBM0VDNzc5ODBBQTRENzEzNTk4QTgKKzoxMDM4NzAwMEUyRkI1OEE4N0FDNzQzN0VBQjgxREZERjRBNTE3OUZBNzEKKzoxMDM4ODAwMDk1OTBENzUwMUVDMDcyRDZBQjhEN0U1RjIzMjQ2RTU2QTYKKzoxMDM4OTAwMDQzQkY2NkI2OEQ3RTNGRDFEQzhCRDFGQjY2OTI1RTY1MDEKKzoxMDM4QTAwMDNGOTI1RTI1M0RGN0I0QkUyQjQyQUVEQzY4N0RBNzlERkUKKzoxMDM4QjAwMDFDOUU2NkYxQkIyOTM3QkQzRTBCRkYxRDVEQjkyRTM5M0QKKzoxMDM4QzAwMDNGRDBFMURERjRCRUM3RjdCM0M5REU3MzdBODUyQjE5QUIKKzoxMDM4RDAwMEUzMjY3QjVFRUZDNkZDRjg2RUQ2QUI1RkE3RTQxQjE5NTAKKzoxMDM4RTAwMDBCREZFNUNGNkFFMjdFODdEMzBBRUM2RkQwRUVGNDkyNkQKKzoxMDM4RjAwMDMwOEE2RjkzRUJEMkRCQzNGRjFGQjY0MEI1RjYwMDgwNzIKKzoxMDM5MDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJDRDU2RDcKKzoxMDM5MTAwMDdENkM1MzU1MTQzRkY3QkU3RUFGRERERUJBQjE3NTFCMkIKKzoxMDM5MjAwMERCQkE4RDhGNDZCQUYxQ0E4MEY4OTE2ODFEOENGMEM3NUEKKzoxMDM5MzAwMEEyREQxNEREMEM2QzI1QjAzMUM2OEE5MzYwQThDNkI4MzAKKzoxMDM5NDAwMEIyMjI5MjExRTI0QzM2MTgwNDRDODc2QzdGMTgyMDVEMkQKKzoxMDM5NTAwMDIwOEFCMTlBODY4OTQ2ODMxMUUxMUYxMjkyQTYwQjM4RkMKKzoxMDM5NjAwMEQxNjg1NjMxMEE0NDY0OUU3M0RGMkI5RDA4ODk3RkZBMjMKKzoxMDM5NzAwMDkyRTZGNERFN0IzRTdGRTdFM0RFMEY3QTY1ODA4NTAwMkEKKzoxMDM5ODAwMEM3N0IxRDAwNDY4MDkzQkQ0RTQxQTNCRDJFQjE5RkE3QUUKKzoxMDM5OTAwMEQ4MDFFNjAwN0U0OTVCOTMwRDYwQUQwNURBN0M1NjVDOEMKKzoxMDM5QTAwMEM2RjE5NzBGOTAwODU2OERGNEIzQ0M3RTgzMUREQTlBM0EKKzoxMDM5QjAwMDkwMjZFNEE0Q0RFRUM2N0RCQkJBN0ZBREM3REMwRjM5M0YKKzoxMDM5QzAwMDAwMkQ5MERDRTc1ODhBQjJDMTJBMTg0NTUzODk4MUFCOTMKKzoxMDM5RDAwMDM2OEU3QzU3OUY0NjNFNzc0NjZFQkIzRUI1MUU4OENGREYKKzoxMDM5RTAwMDY2NzA4RTU2MDA2NDZERkZBRUJFMTBFREI1MEY1Njc4NTIKKzoxMDM5RjAwMDE4Q0FBRDBCRDYyNjgyNzhCRTZFNTdBMTAyQjg2RUI3MzQKKzoxMDNBMDAwMDNBNzczQkU4M0M1NEExRjRFMTNBNkJEMDMzMzU4Q0U3OEMKKzoxMDNBMTAwMEVEQkIxNjI5QzRCRjlEODEyRjRBN0UwRjFDMDAyODAwRDQKKzoxMDNBMjAwMEU4ODA3QjlGRDdCNDFDNjAxM0ZENDNCRTRENTZDMzI0NzIKKzoxMDNBMzAwMEFCQzFGM0UwQzQzQzE5RTUzQjE0QjM4N0ExRkQ0REMzMTIKKzoxMDNBNDAwMDJDNkVDNEZEMDYwRTdCRDgxMjgwRjJCMDZGNTUxMURBRDEKKzoxMDNBNTAwMDRCMUQ2NENBNTE5MjNENUNFRjREOUE1NDg1MzM5NTAwREQKKzoxMDNBNjAwMDVEMEI3RDM1Q0EzMjVDREM5OTk5OTk0MUZEOEYyMDQ2MEEKKzoxMDNBNzAwMDIwNTE1QzUxMkZDNTAxNDM0QzFFMDVGMkRCNjcyMDdDQjEKKzoxMDNBODAwMDRFMkM3NjBBOUMxMzgzOTMzNkE3NUJDNUJCMTFGMTA2QjcKKzoxMDNBOTAwMDQ3MDEwNzk0REY2NjUyRkQyQjM3QTQyNkRGNDZCRjUyNEQKKzoxMDNBQTAwMDM2QUUxQ0M1NzVCREU0RkVENjQ5NzE3RTI1ODFEMTQ5NkYKKzoxMDNBQjAwMDcyMUFCRkFDRjFCRkY5QThDOThGRkFCNkQ5MkEwQjAxQTcKKzoxMDNBQzAwMEU5QzY2MTc0QTIxNkNGOUE0RDlDNzBFOEQ0N0M2RTFGMzMKKzoxMDNBRDAwMDc5QUUwMEQwOEY3NjNDNzdFMkY5MjFEQTdDMEM2MEY3ODIKKzoxMDNBRTAwMEUwOEE4MjI0QzlCRDVCQkYzRjU0MEQ1MEE2RTE3ODRERUEKKzoxMDNBRjAwMDk3NkNBNEZDNUMxRjI5QjRFRkM0RDgzNjA2QzIwQjAwMzcKKzoxMDNCMDAwMENGMzc4RUJDNUQ0NkY0RkE4OEI5Mzk4MjdDMkJFNUM2ODYKKzoxMDNCMTAwMDk1QjkxODZGQzdFMTVDOEY4NEZFQ0NEMEY3MTRFNjRERTEKKzoxMDNCMjAwMDQxMjFDNEE3MkJCMEEyMTAxMEFGRUVCQjEzRUZDOTU1QjMKKzoxMDNCMzAwMDY4MUZCMTI2REM3RjhGNjY0NTQyQzhEMkREN0JBNjRDNkMKKzoxMDNCNDAwMEUyRTg4QUQxREY0Qzc4NkVFMUIxMTcxRTQzM0QzRkIxMDgKKzoxMDNCNTAwMEM4NTg5MUUwNzcxNkNBRDY4Q0RFRkJFOTU0MkZDMjgwOTQKKzoxMDNCNjAwMEY1MUM3OEYzQjJEMEYzMEIzRkZGNEMwQkNBNzcwNzRFMkUKKzoxMDNCNzAwMDY1OTM5RTJENDM5Nzk2Q0JCOERGNTlFNURGQThDQzIxRkUKKzoxMDNCODAwMEJEMjM2MzMyNDIwNEMzMjMzNTNFOENBMzVEMDFFMTY3NEMKKzoxMDNCOTAwMDgzRERGNzQyMEJFMUZFOTUyNDcwN0Y5OEJEQ0UzMzRDNTgKKzoxMDNCQTAwMEUwN0IyRkNFNDg4RTgxNzBGN0M3QzEyMDEzOTVDMTQwQUUKKzoxMDNCQjAwMEY1N0Q1RDgyNjAxNDY5NDNBNURBMkZFOUZEMjBFMTgyN0QKKzoxMDNCQzAwMDdFNUNDRjE5MjhBM0JBRDgzQzc2QTBDQzg5RjQ0NzlCNTkKKzoxMDNCRDAwMEJBNUUzQkY2RTJENzkwOERGQ0M3OEMwNkNBOTc1RjA3QUEKKzoxMDNCRTAwMDA2MDVFNTM2ODQ5ODM3NDI3NUQzODlGRDVBOTRCMURGQ0UKKzoxMDNCRjAwMEE3NjQwOTdEOUI4N0QxQTlCQ0NDM0U0MDQ0QzRGNUEzRjIKKzoxMDNDMDAwMDBFNTY5MzFGRTVFMTk0RTcxNUE0NTc3NEYxNzZDQUVCQkQKKzoxMDNDMTAwMDk1MUVCMzEyQUFBMDNDMzkwNURGOTUwMTY5MTVFRDg3MDEKKzoxMDNDMjAwMEIwOTFFNjMzNUE5RkIyQ0Q0M0ZCQUQzOUQwNDNGMkI2RTMKKzoxMDNDMzAwMEE1RDEzOEM3M0MwNzRFRTcyRTkxRDQ5MjEyRjVCNTU1NjEKKzoxMDNDNDAwMDU2MTdGNTkyNzU1NTA5OUU2RjFCNjczMkQ1RTlCNjhGRTkKKzoxMDNDNTAwMENGQUQwMjc1MERDMDFFOEU2N0Q3QUQyN0MwMzlDQkVGMzMKKzoxMDNDNjAwMEFFRDNFMzA2RUE4RkVFRTMxODJGREFFRjhFOEU3RjUxQTQKKzoxMDNDNzAwMDhDN0FCNjlFNTk1RkFCREExRDAwQUFGRjgwRDZDRjVCNjcKKzoxMDNDODAwMDRGQUJCODA0NEU0RjFBMzZCODMzN0FENkJCRUNCQjRCQTkKKzoxMDNDOTAwMDMwQjdBMzRBRUI4QjQzQzhCQTlFRjJGNjM4NDBFQzY0QzcKKzoxMDNDQTAwMDYzRjNDRTc5NDg2QjY0MTEzN0U4NTI2NTNFRUNDMzdFMEUKKzoxMDNDQjAwMEQ3NDUwM0Y1NTE2MDk3QTZDRjc1NzE3N0E1ODhCNzMxQzEKKzoxMDNDQzAwMDBGNjZENUMzOThBMjE3NzI2OTc5QzQ0M0M4QzUwMzk2MTUKKzoxMDNDRDAwMDNEQjAxODg3Q0Q1NkFCOEU2ODM4NjBDRDI2N0FCODg3NTAKKzoxMDNDRTAwMEJCNzQ4OEFCOTc1OTE0MDlGMTBFOUFCMjZCNjg0RURFMUIKKzoxMDNDRjAwMDM0QUIzNDY2NTFFOTBFRUUxQkVGNDAxNzZGRjIwQjY2RTIKKzoxMDNEMDAwMEMwQkFERjIxMEQzMEEyNEZCOTdCMTgyMjBEOEJGMkZEMTYKKzoxMDNEMTAwMDMxQUE1RjA3NDQxOTA4MjBFMjhDRkM5RUZFRjQ4NzVBMDIKKzoxMDNEMjAwMEIyRkY2NDc5RjIzNzQwOTdGNDNCREI5QTU3NjI3RDdDQUYKKzoxMDNEMzAwMEFFNjhGMUI5OTNCNTU0RTc3M0NFQUE3M0ZBODgxRUY2NEMKKzoxMDNENDAwMDk4OTc1MERDM0U2OEFBMjYyREY4OUZGMjdFOUI0NzY4MjQKKzoxMDNENTAwMDBFQzc1OEZDN0REMjlGOEVGNzk2RDZDNzNFQTM3NTBGMkYKKzoxMDNENjAwMDQzM0YxQjlDRkU2RkM4OEY2Nzk5QkVEQUMzMjkwN0QyRjkKKzoxMDNENzAwMDdDRDIzRkFENTdDRjcxRkU3QTRENTgxNzc1REFGMDJERDIKKzoxMDNEODAwMEU1MTAwMjJDNTk0M0IxQzM0QTc1Q0RCQzVFMDhBMkZEQjMKKzoxMDNEOTAwMDNFRjdEOTBENTQxRjdCNTMyNjMwQTJEREIwODY0NzVEMTgKKzoxMDNEQTAwMENBMzJDOTkwQUZCNDc4MzUwNzlDQzdDQzk5NEY3NzBDMEQKKzoxMDNEQjAwMDlDNzVGMzkwMTFGRERDMEJBNjA4RjE4MzA5RTdCMTJCOEMKKzoxMDNEQzAwMDMzOEYwRERDRUMxNUZDQjEyRjZGRDM3QzJGOTE3RTlERDIKKzoxMDNERDAwMEM4NDFGRTkyMUQ0QzA5MjM0RkVCOERBOTIzREYyMjVEQzQKKzoxMDNERTAwMDBCMTEwRkUxREE5NUVGOUZBMjM4MTIzNzU2NEZGQTMxRDcKKzoxMDNERjAwMEJGN0JFNUE4NDk3MUFCRkE2NkZCMUY3QkVENzZCNjlERUMKKzoxMDNFMDAwMDY3RkM5QTRFNEQ5REY4NjgyOTUxOTNCODc3RUE2MjkyMDMKKzoxMDNFMTAwMEI4MzdFRUY3NjdEQUUxRDQ5MTFERTQ4QjczRTJCN0YyQkQKKzoxMDNFMjAwMDA4NjNDNDNGNzE5OUZDQUIzMzU5RTM1MjM2QzlFOTdGNEIKKzoxMDNFMzAwMDlFN0RBRkMwODVEMkRDQTk0NUUyMkE4MTk5MTI5Q0Y2MEQKKzoxMDNFNDAwMDYxMzU2RjRGNkE3RDk4Q0U4Qjg1QzA1RjQ2NTRDRDRGRUMKKzoxMDNFNTAwMDFBM0ZFMUZDQUNGQkU0MzNFQkQ4M0FBQTlGNzRCRkJFMzcKKzoxMDNFNjAwMEFDRURERkI4NTU5OTQzRjNFNTQ2QUMyQTA3REMwRkVGMUMKKzoxMDNFNzAwMENGNEIzODVGRTk5RDcwQjhDMjZCRjcyQ0NCRENBNzZCREEKKzoxMDNFODAwMEQyQjdBQjc2REY0QTlBREUzNTFBNEU2QkFDNUNDNUU1MkQKKzoxMDNFOTAwMEY5RkI3MEQxRUEyNDVEMDc2OUJGRDM3OTRFRTcwRjVFNjUKKzoxMDNFQTAwMEJGNzAyRUE3NDJFNEFERkExRDEwRjk5QTRCRjYxM0I3NzYKKzoxMDNFQjAwMENGQkY4NTZEMDVDNTkyNzdEMjVGRjE3RkNDNTdEQ0JDNTMKKzoxMDNFQzAwMDkwREUwRDQzNUNCQzFCNEEwOUY4MjU4MjdBMzlDNjA3OEYKKzoxMDNFRDAwMDJFMTBGM0EwNTVCMjI4RkQwRjk4MDc3RTlBMDc4QjY5MjQKKzoxMDNFRTAwMDFFMEM4ODNFQkZDOTUzRTczOEEzNzlEMDIzRDYwRTQ4QUQKKzoxMDNFRjAwMEVERDRFMTNBQzE5MzM2RjIzNzY5QzZBQTQ3RUFGNzU0REUKKzoxMDNGMDAwMDhBN0JBMDg0M0FCQTRBQ0QxM0Y1RjU5MUQ3NkM0N0U5N0MKKzoxMDNGMTAwMEZEMTY2NkRFODMyNjk0MEZFQkI1N0VERjZDOEQ4Q0UyOUEKKzoxMDNGMjAwMEZFNzQ4NDg3RjQ2ODZGMzAzNzcyQjAwM0Y3MDdEN0NDMUMKKzoxMDNGMzAwMDU1NDI4OEQzMzQ2ODdDOUQxNjMxMTc5RUUwNUNBQzUzQTMKKzoxMDNGNDAwMDJEMDU5MUEzMTVDNDhGN0Q4RDcxMEVCNjNDMjJFRUYxMjcKKzoxMDNGNTAwMDBGRUY0QUUyQkQ5ODlBMEZFQUI5MDcxNjBDRDM3OUEzN0UKKzoxMDNGNjAwMDRCRThGQjI0M0Q2N0Y2RDk4NEJFQzE0NjZGOTE0NTlDNjIKKzoxMDNGNzAwMDE3NzA5MjhGRTRGOTVGQTJGQzE2NEIyQTFGM0UwNDA0Q0YKKzoxMDNGODAwMERGQTE0M0RFMjJDQUM3QTEyNjgzRTBEQkNGN0MyREVENzMKKzoxMDNGOTAwMEE0QTdEQUFBRDBGQjMyRDk2MjM5MzlBNkE2MjNDRTk2RDUKKzoxMDNGQTAwMEQyN0I1NThEMzc1REJGQzMwQjY0ODE0Qjc5NjhGMjIwOUUKKzoxMDNGQjAwMEJENDM0Mjc1RTBFQUExRjcyQkQ1RTFFMjRDN0U5ODE3QUMKKzoxMDNGQzAwMDczNjFDRkU0Mjk1RDhGMjEzREU2MkI1RkNENTcxRkZCNDkKKzoxMDNGRDAwMDc3QkVGMkI1N0NCMTIwRDY2RDM2RTUyRDJBRjBCRkM5OEIKKzoxMDNGRTAwMEQ1M0NFQzkwMjA5OTg1MzE0OTVDNzExODkxRkU5MUVGOTgKKzoxMDNGRjAwMDdGNTU4REYzNDIxMTlEQjcxQTkzQ0IwNkU4NURDQ0ExOTYKKzoxMDQwMDAwMDMzRkE4MDNFMEM1MTlGOEJGNzM5REVBMjU4RTc2RDVBODgKKzoxMDQwMTAwMDlEQjdBNUVCRjE4REZCRUEzMTM5Mzc3NzJBNEJBQjQ3REEKKzoxMDQwMjAwMDk0RkZERUUyRUIyMzdCQkZCMDRCQ0I2OUYzRkM1RjUyMjYKKzoxMDQwMzAwMEYzODNFQ0VDRDVFNkM4OUY0NjdGQkZFOEYzNjM4NUZGQ0EKKzoxMDQwNDAwMDc4Njc5RUY3RkM1MDRBRjcwQ0RDOTk5ODRCRjdDRTk5QUQKKzoxMDQwNTAwMDNDREYzRUUyMzNDRjRCMTlGQzg0Njc1MTRBNEZGMTI0RDkKKzoxMDQwNjAwMDVBN0UyQUE1Rjc0QzVCRjA0QkQxMzdGRkQ1Q0ZCNDFGNTIKKzoxMDQwNzAwMDdGMDNEQzRERTA4MUIwMEMwMDAwMDAwMDAwMDAwMDAwNzgKKzoxMDQwODAwMDAwMDAwMDE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwRDgKKzoxMDQwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyODAwMDAwMDAwRjgKKzoxMDQwQTAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAKKzoxMDQwQjAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwRDAKKzoxMDQwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwRTgKKzoxMDQwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKKzoxMDQwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKKzoxMDQwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDQxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDQxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKKzoxMDQxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKKzoxMDQxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkYKKzoxMDQxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKKzoxMDQxNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKKzoxMDQxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKKzoxMDQxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKKzoxMDQxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKKzoxMDQxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKKzoxMDQxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKKzoxMDQxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKKzoxMDQxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREYKKzoxMDQxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMyODAwMTAwMDAwNjQKKzoxMDQxRjAwMDAwMDAwMDA4MDAwMDMzMzAwMDEwMDAwMDAwMDAwMDAyNDIKKzoxMDQyMDAwMDAwMDAzMzI4MDAxMDAwMDAwMDAwMDAxMDAwMDAzQTc4ODEKKzoxMDQyMTAwMDAwMDAwMDAwMDAwMDAwMDg4MDAwMDAwMDAwMDAwMDAwMTYKKzoxMDQyMjAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKKzoxMDQyMzAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMTIwQUQKKzoxMDQyNDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMzM2MDAwMDEwMDA0Q0UKKzoxMDQyNTAwMDAwMDAwMDAxMDAwMDMzNjgwMDAwMDAwMDAwMDAwMDAyQzAKKzoxMDQyNjAwMDAwMDAzMzcwMDAwMDAwMDAwMDAwMDAwODAwMDAzMzc0RkMKKzoxMDQyNzAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwM0E3MDAwMDAwMDAwOTIKKzoxMDQyODAwMDAwMDAwMDA4MDAwMDNBNDAwMDA4MDAwMDAwMDAwMDA4OUMKKzoxMDQyOTAwMDAwMDAzRDg4MDA0MDAwMDAwMDAwMDA0MDAwMDAzQTUwNEYKKzoxMDQyQTAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwM0E2MDAwMDgwMDAwNUMKKzoxMDQyQjAwMDAwMDAwMDA4MDAwMDNBODgwMEM4MDAwMDAwMDAwMDk4RDQKKzoxMDQyQzAwMDAwMDAzQzE4MDA5ODAwMDAwMDAwMDAyODAwMDAzQzU4NDYKKzoxMDQyRDAwMDAwOTgwMDAwMDAwMDAwMjgwMDAwMzM3ODAzNjAwMDMwRTAKKzoxMDQyRTAwMDAwMDAwMzYwMDAwMDNFQjAwMDA4MDAwMDAwMDAwMDAxNzQKKzoxMDQyRjAwMDAwMDAzRUIxMDAwODAwMDAwMDAwMDAwMTAwMDAyMDA4OUUKKzoxMDQzMDAwMDAwMTAwMDAwMDAwMDAwMTAwMDAwMjAwMDAwMDAwMDAwNkQKKzoxMDQzMTAwMDAwMDAwMDA4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDQzMjAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKKzoxMDQzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKKzoxMDQzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKKzoxMDQzNTAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwNUQKKzoxMDQzNjAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwQ0QKKzoxMDQzNzAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKKzoxMDQzODAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMkQKKzoxMDQzOTAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwOUQKKzoxMDQzQTAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDQzQjAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwRkQKKzoxMDQzQzAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwNkQKKzoxMDQzRDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUQKKzoxMDQzRTAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKKzoxMDQzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKKzoxMDQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUMKKzoxMDQ0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUMKKzoxMDQ0MjAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMEMKKzoxMDQ0MzAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkMKKzoxMDQ0NDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUMKKzoxMDQ0NTAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwREMKKzoxMDQ0NjAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MKKzoxMDQ0NzAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkMKKzoxMDQ0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkMKKzoxMDQ0OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUMKKzoxMDQ0QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMKKzoxMDQ0QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkMKKzoxMDQ0QzAwMDAwMDAwMDAwMDAwMDEyQzgwMDgwMDAwMDAwMDAwMDgwMTIKKzoxMDQ0RDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwOUIKKzoxMDQ0RTAwMDA0OTAwMDAwMDAwMDA0OTAwMDAwMTlDODAwMDAwMDAwQzMKKzoxMDQ0RjAwMDAwMDAwMDA4MDAwMDQ5NDgwMDA4MDAwMDAwMDAwMDA4MTMKKzoxMDQ1MDAwMDAwMDA0OTI4MDAwODAwMDAwMDAwMDAwODAwMDA0OTM4QTkKKzoxMDQ1MTAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwMjAwODAwMTAwMDAwNTMKKzoxMDQ1MjAwMDAwMDAwMDEwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDA4NTMKKzoxMDQ1MzAwMDAwMDA0MDEwMDQ5MDAwNDAwMDAwMDA0MDAwMDA0OTk4MzYKKzoxMDQ1NDAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwNDk5OTAwMDgwMDAwNzgKKzoxMDQ1NTAwMDAwMDAwMDAxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREEKKzoxMDQ1NjAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwNEIKKzoxMDQ1NzAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwQkIKKzoxMDQ1ODAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUIKKzoxMDQ1OTAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMUIKKzoxMDQ1QTAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwOEIKKzoxMDQ1QjAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDQ1QzAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwRUIKKzoxMDQ1RDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwNUIKKzoxMDQ1RTAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEIKKzoxMDQ1RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkIKKzoxMDQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUEKKzoxMDQ2MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUEKKzoxMDQ2MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMEEKKzoxMDQ2MzAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwRkEKKzoxMDQ2NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDQ2NTAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwNUEKKzoxMDQ2NjAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwQ0EKKzoxMDQ2NzAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkEKKzoxMDQ2ODAwMDAwMDA0MDAwMDAxODAwMDAwMDAwMDAxODAwMDA0MzAwNzcKKzoxMDQ2OTAwMDAwNDAwMDAwMDAwMDAwNDAwMDAwNDMwMDAwNDAwMDAyMTUKKzoxMDQ2QTAwMDAwMDAwMDAxMDAwMDQzMDEwMDQwMDAwMjAwMDAwMDAwODMKKzoxMDQ2QjAwMDAwMDAzMDAwMDA0MDAwMDAwMDAwMDA0MDgwMDAwMDAwQ0EKKzoxMDQ2QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAwMDAwMDgwMDQwNzIKKzoxMDQ2RDAwMDAwMDAwMDA0MDAwMDMwMDQwMDA4MDA0MDAwMDAwMDA0NTYKKzoxMDQ2RTAwMDAwMDA0QjAwMDAyODAwMDAwMDAwMDAyODAwMDA0QjUwOTQKKzoxMDQ2RjAwMDAwMTAwMDAwMDAwMDAwMTAwMDAwMzgwMDAwODAwMDAwRTIKKzoxMDQ3MDAwMDAwMDAwMDgwMDAwMDM4MDAwMDA4MDA4MDAwMDAwMDAyNjcKKzoxMDQ3MTAwMDAwMDAzOTAwMDAyMDAwMDAwMDAwMDAyMDAwMDAyMDA4RjgKKzoxMDQ3MjAwMDAwMTAwMDAwMDAwMDAwMTAwMDAwMjAwMDAwMDAwMDAwNDkKKzoxMDQ3MzAwMDAwMDAwMDA4MDAwMDUxMDgwMDA4MDAwMDAwMDAwMDA4MDgKKzoxMDQ3NDAwMDAwMDA1MTIwMDAwODAwMDAwMDAwMDAwODAwMDA1MTMwNjcKKzoxMDQ3NTAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwNTFDMDAwMDgwMDAwMzAKKzoxMDQ3NjAwMDAwMDAwMDAxMDAwMDUxQzEwMDA4MDAwMDAwMDAwMDAxMkQKKzoxMDQ3NzAwMDAwMDAzOTQwMDAxMDAwMDQwMDAwMDAwNDAwMDA1MUQwODcKKzoxMDQ3ODAwMDAwMzAwMDE4MDAwMDAwMTAwMDAwNTFEODAwMzAwMDE4NjAKKzoxMDQ3OTAwMDAwMDAwMDAyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTcKKzoxMDQ3QTAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDkKKzoxMDQ3QjAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwNzkKKzoxMDQ3QzAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKKzoxMDQ3RDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwRDkKKzoxMDQ3RTAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwNDkKKzoxMDQ3RjAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkKKzoxMDQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTgKKzoxMDQ4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgKKzoxMDQ4MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgKKzoxMDQ4MzAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwNzgKKzoxMDQ4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjgKKzoxMDQ4NTAwMDAwMDAwMDAwMDAwMDIzRTgwMDgwMDAwMDAwMDAwMDgwNEQKKzoxMDQ4NjAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDA4MUYKKzoxMDQ4NzAwMDAwMTAwMDAwMDAwMDAwMTAwMDAwMjAwMDAwMDAwMDAwRjgKKzoxMDQ4ODAwMDAwMDAwMDA4MDAwMDJEQTAwMDA4MDAwMDAwMDAwMDA4NDMKKzoxMDQ4OTAwMDAwMDAyREI4MDAwODAwMDAwMDAwMDAwODAwMDAyNEU4MTcKKzoxMDQ4QTAwMDAyRDAwMDI4MDAwMDAyRDAwMDAwMkU1ODAwMDgwMDAwQUUKKzoxMDQ4QjAwMDAwMDAwMDAxMDAwMDJFNTkwMDA4MDAwMDAwMDAwMDAxNjcKKzoxMDQ4QzAwMDAwMDAyRDkwMDAwODAwMDAwMDAwMDAwODgwMDAwMDAwOUIKKzoxMDQ4RDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwNTgKKzoxMDQ4RTAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDQ4RjAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwQjgKKzoxMDQ5MDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMjcKKzoxMDQ5MTAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTcKKzoxMDQ5MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODcKKzoxMDQ5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKKzoxMDQ5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjcKKzoxMDQ5NTAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwNTcKKzoxMDQ5NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDcKKzoxMDQ5NzAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjcKKzoxMDQ5ODAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMjcKKzoxMDQ5OTAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwOTcKKzoxMDQ5QTAwMDAwMDAwMDAwMDAwMDI1MDAwMDQwMDAwMDAwMDAwMDA4OUEKKzoxMDQ5QjAwMDAwMDAyNTA4MDA0MDAwMDAwMDAwMDAyODAwMDAwOUMwOTkKKzoxMDQ5QzAwMDAxMjAwMDEwMDAwMDAwMDg4MDAwMDAwMDAwMDAwMDAwMkUKKzoxMDQ5RDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKKzoxMDQ5RTAwMDAwMDA0MDIwMDJEMDAwMjgwMDAwMDAwODAwMDAzMDAwMzUKKzoxMDQ5RjAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwNTA5OTAwMDAwMDAwQkUKKzoxMDRBMDAwMDAwMDAwMDAxMDAwMDUwQjAwMDAwMDAwMDAwMDAwMDAyQTMKKzoxMDRBMTAwMDAwMDA0NUEwMDA5MDAwMDgwMDAwMDAwODgwMDAwMDAwOTEKKzoxMDRBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjk2MDAwMDgwMDAwRjUKKzoxMDRBMzAwMDAwMDAwMDAxMDAwMDI5NjEwMDA4MDAwMDAwMDAwMDAxRTIKKzoxMDRBNDAwMDAwMDAyOTcwMDAwODAwMDQwMDAwMDAwMjAwMDAyOTc4MUUKKzoxMDRBNTAwMDAwMDgwMDA0MDAwMDAwMDQwMDAwMkZCMDAwMDgwMDAwNUYKKzoxMDRBNjAwMDAwMDAwMDA0MDAwMDJGQjQwMDA4MDAwMDAwMDAwMDA0NTMKKzoxMDRBNzAwMDAwMDAyRkMwMDAwMDAwMDAwMDAwMDAwODAwMDAyRkM4NDgKKzoxMDRBODAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMzAwMDAwMDAwMDAwRUUKKzoxMDRBOTAwMDAwMDAwMDEwMDAwMDUwNDAwMDAxMDAwMTAwMDAwMDAxNzMKKzoxMDRBQTAwMDAwMDA1MDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwODA4ODYKKzoxMDRBQjAwMDAwMTAwMDAwMDAwMDAwMDQwMDAwMDgwQzAwMTAwMDAwQkUKKzoxMDRBQzAwMDAwMDAwMDAxMDAwMDA4QjcwMDAwMDAwMDAwMDAwMDAxMjUKKzoxMDRBRDAwMDAwMDAwOEI2MDAwMDAwMDAwMDAwMDAwMTAwMDAxMDAwMDcKKzoxMDRBRTAwMDAwMzAwMDE4MDAwMDAwMDQwMDAwMTAwNDAwMzAwMDE4MUUKKzoxMDRBRjAwMDAwMDAwMDA0MDAwMDEwMDgwMDMwMDAxODAwMDAwMDAyNTAKKzoxMDRCMDAwMDAwMDAxMDBBMDAzMDAwMTgwMDAwMDAwMjAwMDAxMDBDMjUKKzoxMDRCMTAwMDAwMzAwMDE4MDAwMDAwMDEwMDAwMTAwRDAwMzAwMDE4RTcKKzoxMDRCMjAwMDAwMDAwMDAxMDAwMDEwMEUwMDMwMDAxODAwMDAwMDAxMUQKKzoxMDRCMzAwMDAwMDAxMDEwMDAzMDAwMTgwMDAwMDAwNDAwMDAxMDE0RTUKKzoxMDRCNDAwMDAwMzAwMDE4MDAwMDAwMDQwMDAwMzAwMDAxMDAwMDgwNjgKKzoxMDRCNTAwMDAwMDgwMDA0MDAwMDMwMDQwMTAwMDA4MDAwMDgwMDA0ODgKKzoxMDRCNjAwMDAwMDAwMDBBMDAwMDAwMDAwMDAwMDAwMDAwMDAzMDY4QTMKKzoxMDRCNzAwMDAxMDAwMDgwMDAwMDAwMDEwMDAwMzA2OTAxMDAwMDgwOTkKKzoxMDRCODAwMDAwMDAwMDAxMDAwMDMwNkMwMTAwMDA4MDAwMDAwMDAyMDUKKzoxMDRCOTAwMDAwMDAzMDZFMDEwMDAwODAwMDAwMDAwMjAwMDAzMDcwNTQKKzoxMDRCQTAwMDAxMDAwMDgwMDAwMDAwMDQwMDAwMzA3NDAxMDAwMDgwNUIKKzoxMDRCQjAwMDAwMDAwMDA0MDAwMDMwNjYwMTAwMDA4MDAwMDAwMDAyRDgKKzoxMDRCQzAwMDAwMDAzMDY0MDEwMDAwODAwMDAwMDAwMTAwMDAzMDYwM0YKKzoxMDRCRDAwMDAxMDAwMDgwMDAwMDAwMDIwMDAwMzA2MjAxMDAwMDgwM0YKKzoxMDRCRTAwMDAwMDAwMDAyMDAwMDMwNTAwMTAwMDA4MDAwMDAwMDA0QkUKKzoxMDRCRjAwMDAwMDAzMDU0MDEwMDAwODAwMDAwMDAwNDAwMDAzMDU4MjQKKzoxMDRDMDAwMDAxMDAwMDgwMDAwMDAwMDQwMDAwMzA1QzAxMDAwMDgwMTIKKzoxMDRDMTAwMDAwMDAwMDA0MDAwMDMwN0MwMTAwMDA4MDAwMDAwMDAxNjIKKzoxMDRDMjAwMDAwMDAzMDdEMDEwMDAwODAwMDAwMDAwMTAwMDAxQzE4MjEKKzoxMDRDMzAwMDAwMTAwMDAwMDAwMDAwMDQwMDAwMUMzMDAwMTAwMDAwMDQKKzoxMDRDNDAwMDAwMDAwMDA0MDAwMDFDMzgwMDEwMDAwMDAwMDAwMDA0RjgKKzoxMDRDNTAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwNTQKKzoxMDRDNjAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwQzQKKzoxMDRDNzAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjQKKzoxMDRDODAwMDAwMDA0QzEwMDAwODAwMDAwMDAwMDAwMjAwMDA0QzEyNjAKKzoxMDRDOTAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwNEMxNDAwMDgwMDAwQTIKKzoxMDRDQTAwMDAwMDAwMDA0MDAwMDRDMjAwMDA4MDAwMDAwMDAwMDA4ODQKKzoxMDRDQjAwMDAwMDA0QzMwMDA0MDAwMDgwMDAwMDAwODAwMDA0QzAwREMKKzoxMDRDQzAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwNEMwMjAwMDgwMDAwODQKKzoxMDRDRDAwMDAwMDAwMDAxMDAwMDRDMDQwMDA4MDAwMDAwMDAwMDAyNzkKKzoxMDRDRTAwMDAwMDA0Q0QwMDAwODAwMDAwMDAwMDAwODAwMDA0Q0UwNkMKKzoxMDRDRjAwMDAwMDgwMDAwMDAwMDAwMDQwMDAwNENFNDAwMDgwMDAwNzAKKzoxMDREMDAwMDAwMDAwMDAxMDAwMDRDRjAwMDA4MDAwMDAwMDAwMDAyNUMKKzoxMDREMTAwMDAwMDA0Q0Y0MDAwODAwMDAwMDAwMDAwMjAwMDA0RDAwRkMKKzoxMDREMjAwMDAwMDgwMDAwMDAwMDAwMDQwMDAwNTAwMDAwMTAwMDAwMTcKKzoxMDREMzAwMDAwMDAwMDA0MDAwMDUwMDQwMDEwMDAwMDAwMDAwMDA0MDcKKzoxMDRENDAwMDAwMDA1MDA4MDAxMDAwMDAwMDAwMDAwNDAwMDAxNDAwRTMKKzoxMDRENTAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwMTQwMjAwMDgwMDAwMkIKKzoxMDRENjAwMDAwMDAwMDAxMDAwMDE0MDQwMDA4MDAwMDAwMDAwMDAyMjAKKzoxMDRENzAwMDAwMDAxNDEwMDAwODAwMDAwMDAwMDAwMjAwMDAxNDE0REQKKzoxMDREODAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwMTQxNjAwMDgwMDAwRTcKKzoxMDREOTAwMDAwMDAwMDAyMDAwMDE5QjgwMDA4MDAwMDAwMDAwMDA4MzAKKzoxMDREQTAwMDAwMDAxNDIwMDAwODAwMDAwMDAwMDAwMjAwMDAxNDI0OEQKKzoxMDREQjAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwMTlDODAwMDgwMDAwMDAKKzoxMDREQzAwMDAwMDAwMDA4MDAwMDJDMTAwMDA4MDAwMDAwMDAwMDAxOTYKKzoxMDRERDAwMDAwMDAyQzExMDAwODAwMDAwMDAwMDAwMTAwMDAyQzEyNEYKKzoxMDRERTAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwMkMxMzAwMDgwMDAwNzMKKzoxMDRERjAwMDAwMDAwMDAxMDAwMDJDMDAwMDA4MDAwMDAwMDAwMDAyN0MKKzoxMDRFMDAwMDAwMDAyQzAyMDAwODAwMDAwMDAwMDAwMTAwMDAyQzA0M0IKKzoxMDRFMTAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwMkMzMDAwMDgwMDAwMjQKKzoxMDRFMjAwMDAwMDAwMDAyMDAwMDJDMzIwMDA4MDAwMDAwMDAwMDAyMTgKKzoxMDRFMzAwMDAwMDAyQzM0MDAwODAwMDAwMDAwMDAwMjAwMDAyQzIwQkMKKzoxMDRFNDAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwMkMyMTAwMDgwMDAwMDQKKzoxMDRFNTAwMDAwMDAwMDAxMDAwMDJDMjIwMDA4MDAwMDAwMDAwMDAxRkEKKzoxMDRFNjAwMDAwMDAyQzIzMDAwODAwMDAwMDAwMDAwMTAwMDAyQzI0OUEKKzoxMDRFNzAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwMkMyNTAwMDgwMDAwRDAKKzoxMDRFODAwMDAwMDAwMDAxMDAwMDJDMjYwMDA4MDAwMDAwMDAwMDAxQzYKKzoxMDRFOTAwMDAwMDAxNDAwMDAwODAwMDAwMDAwMDAwMjAwMDAxNDAyREUKKzoxMDRFQTAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwMTQwNDAwMDgwMDAwRDkKKzoxMDRFQjAwMDAwMDAwMDAyMDAwMDE0MTIwMEMwMDAxODAwMDAwMDAyRjAKKzoxMDRFQzAwMDAwMDAxNDEwMDBDMDAwMTgwMDAwMDAwMjAwMDAxNDFDQjQKKzoxMDRFRDAwMDAwQzAwMDE4MDAwMDAwMDgwMDAwMTQxNDAwQzAwMDE4RjIKKzoxMDRFRTAwMDAwMDAwMDA4MDAwMDE0MjcwMEMwMDAxODAwMDAwMDAxQTYKKzoxMDRFRjAwMDAwMDAxNDI0MDBDMDAwMTgwMDAwMDAwMjAwMDAxNDI2NjYKKzoxMDRGMDAwMDAwQzAwMDE4MDAwMDAwMDEwMDAwMTU5MDAwMDgwMDAwMUIKKzoxMDRGMTAwMDAwMDAwMDA4MDAwMDE1QTAwMDA4MDAwMDAwMDAwMDA4QzQKKzoxMDRGMjAwMDAwMDAxNUIwMDAwODAwMDAwMDAwMDAwODgwMDAwMDAwMkMKKzoxMDRGMzAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwRjEKKzoxMDRGNDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTEKKzoxMDRGNTAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwNTEKKzoxMDRGNjAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwQzEKKzoxMDRGNzAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjEKKzoxMDRGODAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMjEKKzoxMDRGOTAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwOTEKKzoxMDRGQTAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODEKKzoxMDRGQjAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwRjEKKzoxMDRGQzAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwNjEKKzoxMDRGRDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTEKKzoxMDRGRTAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwQzEKKzoxMDRGRjAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMzEKKzoxMDUwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAKKzoxMDUwMTAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwOTAKKzoxMDUwMjAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAKKzoxMDUwMzAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjAKKzoxMDUwNDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwNjAKKzoxMDUwNTAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwRDAKKzoxMDUwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKKzoxMDUwNzAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzowODUwODAwMDA2MDIwOTAwMDAwMDAwMDAxNworOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2JueDJ4L2JueDJ4LWUxaC02LjIuNS4wLmZ3LmloZXggYi9maXJtd2FyZS9ibngyeC9ibngyeC1lMWgtNi4yLjUuMC5mdy5paGV4CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjA0ZGY2Li4wMDAwMDAwCi0tLSBhL2Zpcm13YXJlL2JueDJ4L2JueDJ4LWUxaC02LjIuNS4wLmZ3LmloZXgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzE4MSArMCwwIEBACi06MTAwMDAwMDAwMDAwNEY0ODAwMDAwMDY4MDAwMDA3MEMwMDAwNEZCOEQ3Ci06MTAwMDEwMDAwMDAwMUVENDAwMDA1NkM4MDAwMDAwOTQwMDAwNzVBMDI3Ci06MTAwMDIwMDAwMDAwOUY0QzAwMDA3NjM4MDAwMDAwQ0MwMDAxMTU4OENECi06MTAwMDMwMDAwMDAwREM0QzAwMDExNjU4MDAwMDAwOTQwMDAxRjJBOEZBCi06MTAwMDQwMDAwMDAwNDAwMDAwMDFGMzQwMDAwMDAwQTQwMDAyMzM0ODFCCi06MTAwMDUwMDAwMDAwRjM4QzAwMDIzM0YwMDAwMDBGRkMwMDAzMjc4MDQ3Ci06MTAwMDYwMDAwMDAwMDAwNDAwMDMzNzgwMDIwNDAwNDgwMDAwMDAwRjc1Ci06MTAwMDcwMDAwMjA0MDA1NDAwMDAwMDQ1MDIwNDAwNUMwMDAwMDAwNjc5Ci06MTAwMDgwMDAwMjA0MDA3MDAwMDAwMDA0MDIwNDAwNzgwMDAwMDAwMDc4Ci06MTAwMDkwMDAwMjA0MDA3QzEyMTcwMDAwMDIwNDAwODAyMjE3MDAwMEY2Ci06MTAwMEEwMDAwMjA0MDA4NDMyMTcwMDAwMDYwNDAwODgwMDAwMDAwNUU2Ci06MTAwMEIwMDAwMjA0MDA5QzEyMTUwMDAwMDIwNDAwQTAyMjE1MDAwMDlBCi06MTAwMEMwMDAwMjA0MDBBNDMyMTUwMDAwMDYwNDAwQTgwMDAwMDAwNDg5Ci06MTAwMEQwMDAwMjA0MDBCODAyMTAwMDAwMDIwNDAwQkMwMDEwMDAwMDdFCi06MTAwMEUwMDAwMjA0MDBDMDEwMTAwMDAwMDIwNDAwQzQyMDEwMDAwMDMwCi06MTAwMEYwMDAwMjA0MDBDODMwMTAwMDAwMDIwNDAwQ0M0MDEwMDAwMEQwCi06MTAwMTAwMDAwNjA0MDBEMDAwMDAwMDAzMDIwNDAwREMwMDEwMDAwMDIwCi06MTAwMTEwMDAwMjA0MDBFMDEyMTQwMDAwMDIwNDAwRTQyMjE0MDAwMEIzCi06MTAwMTIwMDAwMjA0MDBFODMyMTQwMDAwMDIwNDAwRUM0MjE0MDAwMDUzCi06MTAwMTMwMDAwNjA0MDBGMDAwMDAwMDAzMDEwNDAxMjQwMDAwMDAwMDk4Ci06MTAwMTQwMDAwMTA0MDEyODAwMDAwMDAwMDEwNDAxMkMwMDAwMDAwMDRGCi06MTAwMTUwMDAwMTA0MDEzMDAwMDAwMDAwMDIwNDAxRDAwMDAwODkwNjAzCi06MTAwMTYwMDAwMjA0MDAwNDAwMDAwMEZGMDIwNDAwMDgwMDAwMDBGRjc5Ci06MTAwMTcwMDAwMjA0MDAwQzAwMDAwMEZGMDIwNDAwMTAwMDAwMDBGRjU5Ci06MTAwMTgwMDAwMjA0MDAxNDAwMDAwMDdGMDIwNDAwMTgwMDAwMDBGRkI5Ci06MTAwMTkwMDAwMjA0MDAxQzAwMDAwMEZGMDIwNDAwMjAwMDAwMDBGRjE5Ci06MTAwMUEwMDAwMjA0MDAyNDAwMDAwMDNFMDIwNDAwMjgwMDAwMDAwMEI5Ci06MTAwMUIwMDAwMjA0MDAyQzAwMDAwMDNGMDIwNDAwMzAwMDAwMDAzRjU5Ci06MTAwMUMwMDAwMjA0MDAzNDAwMDAwMDNGMDIwNDAwMzgwMDAwMDAzRjM5Ci06MTAwMUQwMDAwMjA0MDAzQzAwMDAwMDNGMDIwNDAwNDAwMDAwMDAzRjE5Ci06MTAwMUUwMDAwMjA0MDA0NDAwMDAwMDNGMDIwNDA0Q0MwMDAwMDAwMUFGCi06MTAwMUYwMDAwMjA0MjAwODAwMDAwMjExMDIwNDIwMEMwMDAwMDIwMDhBCi06MTAwMjAwMDAwMjA0MjAxMDAwMDAwMjA0MDIwNDIwMTQwMDAwMDIxOTVECi06MTAwMjEwMDAwMjA0MjAxQzAwMDBGRkZGMDIwNDIwMjAwMDAwRkZGRjVBCi06MTAwMjIwMDAwMjA0MjAyNDAwMDBGRkZGMDIwNDIwMjgwMDAwRkZGRjNBCi06MTAwMjMwMDAwMjA0MjAzODAwMDAwMDIwMDYwNDIwM0MwMDAwMDAxRkJCCi06MTAwMjQwMDAwMjA0MjBCODAwMDAwMDAxMDYwNDIwQkMwMDAwMDA1RjhBCi06MTAwMjUwMDAwMjA0MjIzODA3RkZGRkZGMDIwNDIyM0MwMDAwMDAzRjk3Ci06MTAwMjYwMDAwMjA0MjI0MDA3RkZGRkZGMDIwNDIyNDQwMDAwMDAwRkE3Ci06MTAwMjcwMDAwMTA0MjI0ODAwMDAwMDAwMDEwNDIyNEMwMDAwMDAwMDlDCi06MTAwMjgwMDAwMTA0MjI1MDAwMDAwMDAwMDEwNDIyNTQwMDAwMDAwMDdDCi06MTAwMjkwMDAwMTA0MjI1ODAwMDAwMDAwMDEwNDIyNUMwMDAwMDAwMDVDCi06MTAwMkEwMDAwMTA0MjI2MDAwMDAwMDAwMDEwNDIyNjQwMDAwMDAwMDNDCi06MTAwMkIwMDAwMTA0MjI2ODAwMDAwMDAwMDEwNDIyNkMwMDAwMDAwMDFDCi06MTAwMkMwMDAwMTA0MjI3MDAwMDAwMDAwMDEwNDIyNzQwMDAwMDAwMEZDCi06MTAwMkQwMDAwMTA0MjI3ODAwMDAwMDAwMDEwNDIyN0MwMDAwMDAwMERDCi06MTAwMkUwMDAwQzA0MjAwMDAwMDAwM0U4MEEwNDIwMDAwMDAwMDAwMUM0Ci06MTAwMkYwMDAwQjA0MjAwMDAwMDAwMDBBMDYwNTQwMDAwMDAwMEQwMDZECi06MTAwMzAwMDAwMjA1MDA0NDAwMDAwMDIwMDIwNTAwNDgwMDAwMDAzMjAxCi06MTAwMzEwMDAwMjA1MDA5MDAyMTUwMDIwMDIwNTAwOTQwMjE1MDAyMDNECi06MTAwMzIwMDAwMjA1MDA5ODAwMDAwMDMwMDIwNTAwOUMwODEwMDAwMDQzCi06MTAwMzMwMDAwMjA1MDBBMDAwMDAwMDMzMDIwNTAwQTQwMDAwMDAzMDA4Ci06MTAwMzQwMDAwMjA1MDBBODAwMDAwMDMxMDIwNTAwQUMwMDAwMDAwMjE4Ci06MTAwMzUwMDAwMjA1MDBCMDAwMDAwMDA1MDIwNTAwQjQwMDAwMDAwNjIwCi06MTAwMzYwMDAwMjA1MDBCODAwMDAwMDAyMDIwNTAwQkMwMDAwMDAwMjA3Ci06MTAwMzcwMDAwMjA1MDBDMDAwMDAwMDAwMDIwNTAwQzQwMDAwMDAwNUU2Ci06MTAwMzgwMDAwMjA1MDBDODAwMDAwMDAyMDIwNTAwQ0MwMDAwMDAwMkM3Ci06MTAwMzkwMDAwMjA1MDBEMDAwMDAwMDAyMDIwNTAwRDQwMDAwMDAwMUE4Ci06MTAwM0EwMDAwMjA1MDExNDAwMDAwMDAxMDIwNTAxMUMwMDAwMDAwMTBCCi06MTAwM0IwMDAwMjA1MDEyMDAwMDAwMDAyMDIwNTAyMDQwMDAwMDAwMTA1Ci06MTAwM0MwMDAwMjA1MDIwQzAwMDAwMDQwMDIwNTAyMTAwMDAwMDA0MDdGCi06MTAwM0QwMDAwMjA1MDIxQzAwMDAwMDIwMDIwNTAyMjAwMDAwMDAxMzlDCi06MTAwM0UwMDAwMjA1MDIyNDAwMDAwMDIwMDYwNTAyNDAwMDAwMDAwQTY5Ci06MTAwM0YwMDAwNDA1MDI4MDAwMjAwMDAwMDIwNTAwNTAwMDAwMDAwN0Y0Ci06MTAwNDAwMDAwMjA1MDA1NDAwMDAwMDA3MDIwNTAwNTgwMDAwMDAwMDJCCi06MTAwNDEwMDAwMjA1MDA1QzAwMDAwMDA4MDIwNTAwNjAwMDAwMDAwMTA5Ci06MTAwNDIwMDAwNjA1MDA2NDAwMDAwMDAzMDIwNTAwRDgwMDAwMDAwNjc1Ci06MTAwNDMwMDAwMjA1MDAwNDAwMDAwMDAxMDIwNTAwMDgwMDAwMDAwMUEwCi06MTAwNDQwMDAwMjA1MDAwQzAwMDAwMDAxMDIwNTAwMTAwMDAwMDAwMTgwCi06MTAwNDUwMDAwMjA1MDAxNDAwMDAwMDAxMDIwNTAwMTgwMDAwMDAwMTYwCi06MTAwNDYwMDAwMjA1MDAxQzAwMDAwMDAxMDIwNTAwMjAwMDAwMDAwMTQwCi06MTAwNDcwMDAwMjA1MDAyNDAwMDAwMDAxMDIwNTAwMjgwMDAwMDAwMTIwCi06MTAwNDgwMDAwMjA1MDAyQzAwMDAwMDAxMDIwNTAwMzAwMDAwMDAwMTAwCi06MTAwNDkwMDAwMjA1MDAzNDAwMDAwMDAxMDIwNTAwMzgwMDAwMDAwMUUwCi06MTAwNEEwMDAwMjA1MDAzQzAwMDAwMDAxMDIwNTAwNDAwMDAwMDAwMUMwCi06MTAwNEIwMDAwMjA1MDBFMDAwMDAwMDBEMDIwNTAwRTgwMDAwMDAwMDU5Ci06MTAwNEMwMDAwMjA1MDBGMDAwMDAwMDAwMDIwNTAwRjgwMDAwMDAwMDM2Ci06MTAwNEQwMDAwMjA1MDBFNDAwMDAwMDJEMDIwNTAwRUMwMDAwMDAyMEYxCi06MTAwNEUwMDAwMjA1MDBGNDAwMDAwMDIwMDIwNTAwRkMwMDAwMDAyMENFCi06MTAwNEYwMDAwMjA1MDBFMDAwMDAwMDFEMDIwNTAwRTgwMDAwMDAxMEY5Ci06MTAwNTAwMDAwMjA1MDBGMDAwMDAwMDEwMDIwNTAwRjgwMDAwMDAxMEQ1Ci06MTAwNTEwMDAwMjA1MDBFNDAwMDAwMDNEMDIwNTAwRUMwMDAwMDAzMDkwCi06MTAwNTIwMDAwMjA1MDBGNDAwMDAwMDMwMDIwNTAwRkMwMDAwMDAzMDZECi06MTAwNTMwMDAwMjA1MDBFMDAwMDAwMDREMDIwNTAwRTgwMDAwMDA0MDU4Ci06MTAwNTQwMDAwMjA1MDBGMDAwMDAwMDQwMDIwNTAwRjgwMDAwMDA0MDM1Ci06MTAwNTUwMDAwMjA1MDBFNDAwMDAwMDZEMDIwNTAwRUMwMDAwMDA2MEYwCi06MTAwNTYwMDAwMjA1MDBGNDAwMDAwMDYwMDIwNTAwRkMwMDAwMDA2MENECi06MTAwNTcwMDAwMjA1MDBFMDAwMDAwMDVEMDIwNTAwRTgwMDAwMDA1MEY4Ci06MTAwNTgwMDAwMjA1MDBGMDAwMDAwMDUwMDIwNTAwRjgwMDAwMDA1MEQ1Ci06MTAwNTkwMDAwMjA1MDBFNDAwMDAwMDdEMDIwNTAwRUMwMDAwMDA3MDkwCi06MTAwNUEwMDAwMjA1MDBGNDAwMDAwMDcwMDIwNTAwRkMwMDAwMDA3MDZECi06MTAwNUIwMDAwNDA2MTAwMDAyMDAwMDIwMDIwNjAwREMwMDAwMDAwMTFBCi06MTAwNUMwMDAwMTA2MDBEODAwMDAwMDAwMDQwNjAyMDAwMDAzMDIyMDFCCi06MTAwNUQwMDAwMjA2MDBEQzAwMDAwMDAwMDEwNjAwQjgwMDAwMDAwMDc4Ci06MTAwNUUwMDAwMTA2MDBDODAwMDAwMDAwMDIwNjAxNkMwMDAwMDAwMEM3Ci06MTAwNUYwMDAwMTA2MDBCQzAwMDAwMDAwMDEwNjAwQ0MwMDAwMDAwMDY1Ci06MTAwNjAwMDAwMjA2MDE3MDAwMDAwMDAwMDcxODA0MDAwMDkxMDAwMEJECi06MTAwNjEwMDAwODE4MDdEODAwMDUwMjIzMDcxQzAwMDAyQkY3MDAwMDZDCi06MTAwNjIwMDAwNzFDODAwMDJERDEwQUZFMDcxRDAwMDAyRjQ2MTY3M0ZGCi06MTAwNjMwMDAwNzFEODAwMDE2MzQyMjQ1MDgxREIxMzA0OURBMDIyNTE1Ci06MTAwNjQwMDAwMTE4MDAwMDAwMDAwMDAwMDExODAwMDQwMDAwMDAwMDc0Ci06MTAwNjUwMDAwMTE4MDAwODAwMDAwMDAwMDExODAwMEMwMDAwMDAwMDU0Ci06MTAwNjYwMDAwMTE4MDAxMDAwMDAwMDAwMDExODAwMTQwMDAwMDAwMDM0Ci06MTAwNjcwMDAwMjE4MDAyMDAwMDAwMDAxMDIxODAwMjQwMDAwMDAwMkZGCi06MTAwNjgwMDAwMjE4MDAyODAwMDAwMDAzMDIxODAwMkMwMDAwMDAwMERGCi06MTAwNjkwMDAwMjE4MDAzMDAwMDAwMDA0MDIxODAwMzQwMDAwMDAwMUJECi06MTAwNkEwMDAwMjE4MDAzODAwMDAwMDAwMDIxODAwM0MwMDAwMDAwMUExCi06MTAwNkIwMDAwMjE4MDA0MDAwMDAwMDA0MDIxODAwNDQwMDAwMDAwMDdFCi06MTAwNkMwMDAwMjE4MDA0ODAwMDAwMDAxMDIxODAwNEMwMDAwMDAwMzVFCi06MTAwNkQwMDAwMjE4MDA1MDAwMDAwMDAwMDIxODAwNTQwMDAwMDAwMTQxCi06MTAwNkUwMDAwMjE4MDA1ODAwMDAwMDA0MDIxODAwNUMwMDAwMDAwMDFFCi06MTAwNkYwMDAwMjE4MDA2MDAwMDAwMDAxMDIxODAwNjQwMDAwMDAwM0ZFCi06MTAwNzAwMDAwMjE4MDA2ODAwMDAwMDAwMDIxODAwNkMwMDAwMDAwMUUwCi06MTAwNzEwMDAwMjE4MDA3MDAwMDAwMDA0MDIxODAwNzQwMDAwMDAwMEJECi06MTAwNzIwMDAwMjE4MDA3ODAwMDAwMDA0MDIxODAwN0MwMDAwMDAwMzlBCi06MTAwNzMwMDAwNjE4MDA4MDAwMDAwMDAyMDIxODAwQTQwMDAwM0ZGRjFECi06MTAwNzQwMDAwMjE4MDBBODAwMDAwM0ZGMDIxODAyMjQwMDAwMDAwMEE1Ci06MTAwNzUwMDAwMjE4MDIzNDAwMDAwMDAwMDIxODAyNEMwMDAwMDAwMEUxCi06MTAwNzYwMDAwMjE4MDJFNDAwMDAwMEZGMDYxODEwMDAwMDAwMDQwMDU4Ci06MTAwNzcwMDAwMjFCOEJDMDAwMDAwMDAxMDIxQjgwMDAwMDAwMDAzNDNGCi06MTAwNzgwMDAwMjFCODA0MDAwMDAwMDE4MDIxQjgwODAwMDAwMDAwQzRCCi06MTAwNzkwMDAwMjFCODBDMDAwMDAwMDIwMEMxQjgzMDAwMDA3QTEyMDZBCi06MTAwN0EwMDAwQTFCODMwMDAwMDAwMTM4MEIxQjgzMDAwMDAwMTM4ODI0Ci06MTAwN0IwMDAwQTFCODM0MDAwMDAwMDAwMEMxQjgzNDAwMDAwMDFGNDcyCi06MTAwN0MwMDAwQjFCODM0MDAwMDAwMDA1MDIxQjgzODAwMDA3QTEyMDUzCi06MTAwN0QwMDAwMjFCODNDMDAwMDAwMUY0MDIxQjE0ODAwMDAwMDAwMTEyCi06MTAwN0UwMDAwQTFCMTQ4MDAwMDAwMDAwMDYxQTEwMDAwMDAwMDNCMzZBCi06MTAwN0YwMDAwNDFBMUVDQzAwMDEwMjI3MDYxQTFFRDAwMDAwMDAwOEIxCi06MTAwODAwMDAwNjFBMjAwODAwMDAwMEM4MDYxQTIwMDAwMDAwMDAwMjk2Ci06MTAwODEwMDAwNDFBQUY0MDAwMTAwMjI4MDYxQTM3MTgwMDAwMDAwNDFFCi06MTAwODIwMDAwNjFBMzcxMDAwMDAwMDAyMDYxQTUwMDAwMDAwMDAwMkVECi06MTAwODMwMDAwNjFBNTAwODAwMDAwMDA0MDYxQTUwMTgwMDAwMDAwNEIwCi06MTAwODQwMDAwNjFBNTAyODAwMDAwMDA0MDYxQTUwMzgwMDAwMDAwNDYwCi06MTAwODUwMDAwNjFBNTA0ODAwMDAwMDA0MDYxQTUwNTgwMDAwMDAwNDEwCi06MTAwODYwMDAwNjFBNTA2ODAwMDAwMDA0MDYxQTUwNzgwMDAwMDAwMkMyCi06MTAwODcwMDAwNDFBNTJDMDAwMDIwMjM4MDYxQTQwNTAwMDAwMDAwNjU2Ci06MTAwODgwMDAwNDFBNDA2ODAwMDIwMjNBMDQxQTQwNDAwMDA0MDIzQzg0Ci06MTAwODkwMDAwNDFBODAwMDAwMDEwMjQwMDYxQTgwMDQwMDAwMDAwM0QwCi06MTAwOEEwMDAwNDFBODAxMDAwMDEwMjQxMDYxQTgwMTQwMDAwMDAwMzlGCi06MTAwOEIwMDAwNDFBODAyMDAwMDEwMjQyMDYxQTgwMjQwMDAwMDAwMzZFCi06MTAwOEMwMDAwNDFBODAzMDAwMDEwMjQzMDYxQTgwMzQwMDAwMDAwMzNECi06MTAwOEQwMDAwNDFBODA0MDAwMDEwMjQ0MDYxQTgwNDQwMDAwMDAwMzBDCi06MTAwOEUwMDAwNDFBODA1MDAwMDEwMjQ1MDYxQTgwNTQwMDAwMDAwM0RCCi06MTAwOEYwMDAwNDFBODA2MDAwMDEwMjQ2MDYxQTgwNjQwMDAwMDAwM0FBCi06MTAwOTAwMDAwNDFBODA3MDAwMDEwMjQ3MDYxQTgwNzQwMDAwMDAwMzc4Ci06MTAwOTEwMDAwNDFBODA4MDAwMDEwMjQ4MDYxQTgwODQwMDAwMDAwMzQ3Ci06MTAwOTIwMDAwNDFBODA5MDAwMDEwMjQ5MDYxQTgwOTQwMDAwMDAwMzE2Ci06MTAwOTMwMDAwNDFBODBBMDAwMDEwMjRBMDYxQTgwQTQwMDAwMDAwM0U1Ci06MTAwOTQwMDAwNDFBODBCMDAwMDEwMjRCMDYxQTgwQjQwMDAwMDAwM0I0Ci06MTAwOTUwMDAwNDFBODBDMDAwMDEwMjRDMDYxQTgwQzQwMDAwMDAwMzgzCi06MTAwOTYwMDAwNDFBODBEMDAwMDEwMjREMDYxQTgwRDQwMDAwMDAwMzUyCi06MTAwOTcwMDAwNDFBODBFMDAwMDEwMjRFMDYxQTgwRTQwMDAwMDAwMzIxCi06MTAwOTgwMDAwNDFBODBGMDAwMDEwMjRGMDYxQTgwRjQwMDAwMDAwM0YwCi06MTAwOTkwMDAwNDFBODEwMDAwMDEwMjUwMDYxQTgxMDQwMDAwMDAwM0JECi06MTAwOUEwMDAwNDFBODExMDAwMDEwMjUxMDYxQTgxMTQwMDAwMDAwMzhDCi06MTAwOUIwMDAwNDFBODEyMDAwMDEwMjUyMDYxQTgxMjQwMDAwMDAwMzVCCi06MTAwOUMwMDAwNDFBODEzMDAwMDEwMjUzMDYxQTgxMzQwMDAwMDAwMzJBCi06MTAwOUQwMDAwNDFBODE0MDAwMDEwMjU0MDYxQTgxNDQwMDAwMDAwM0Y5Ci06MTAwOUUwMDAwNDFBODE1MDAwMDEwMjU1MDYxQTgxNTQwMDAwMDAwM0M4Ci06MTAwOUYwMDAwNDFBODE2MDAwMDEwMjU2MDYxQTgxNjQwMDAwMDAwMzk3Ci06MTAwQTAwMDAwNDFBODE3MDAwMDEwMjU3MDYxQTgxNzQwMDAwMDAwMzY1Ci06MTAwQTEwMDAwNDFBODE4MDAwMDEwMjU4MDYxQTgxODQwMDAwMDAwMzM0Ci06MTAwQTIwMDAwNDFBODE5MDAwMDEwMjU5MDYxQTgxOTQwMDAwMDAwMzAzCi06MTAwQTMwMDAwNDFBODFBMDAwMDEwMjVBMDYxQTgxQTQwMDAwMDAwM0QyCi06MTAwQTQwMDAwNDFBODFCMDAwMDEwMjVCMDYxQTgxQjQwMDAwMDAwM0ExCi06MTAwQTUwMDAwNDFBODFDMDAwMDEwMjVDMDYxQTgxQzQwMDAwMDAwMzcwCi06MTAwQTYwMDAwNDFBODFEMDAwMDEwMjVEMDYxQTgxRDQwMDAwMDAwMzNGCi06MTAwQTcwMDAwNDFBODFFMDAwMDEwMjVFMDYxQTgxRTQwMDAwMDAwMzBFCi06MTAwQTgwMDAwNDFBODFGMDAwMDEwMjVGMDYxQTgxRjQwMDAwMDAwM0RECi06MTAwQTkwMDAwNDFBODIwMDAwMDEwMjYwMDYxQTgyMDQwMDAwMDAwM0FBCi06MTAwQUEwMDAwNDFBODIxMDAwMDEwMjYxMDYxQTgyMTQwMDAwMDAwMzc5Ci06MTAwQUIwMDAwNDFBODIyMDAwMDEwMjYyMDYxQTgyMjQwMDAwMDAwMzQ4Ci06MTAwQUMwMDAwNDFBODIzMDAwMDEwMjYzMDYxQTgyMzQwMDAwMDAwMzE3Ci06MTAwQUQwMDAwNDFBODI0MDAwMDEwMjY0MDYxQTgyNDQwMDAwMDAwM0U2Ci06MTAwQUUwMDAwNDFBODI1MDAwMDEwMjY1MDYxQTgyNTQwMDAwMDAwM0I1Ci06MTAwQUYwMDAwNDFBODI2MDAwMDEwMjY2MDYxQTgyNjQwMDAwMDAwMzg0Ci06MTAwQjAwMDAwNDFBODI3MDAwMDEwMjY3MDYxQTgyNzQwMDAwMDAwMzUyCi06MTAwQjEwMDAwNDFBODI4MDAwMDEwMjY4MDYxQTgyODQwMDAwMDAwMzIxCi06MTAwQjIwMDAwNDFBODI5MDAwMDEwMjY5MDYxQTgyOTQwMDAwMDAwM0YwCi06MTAwQjMwMDAwNDFBODJBMDAwMDEwMjZBMDYxQTgyQTQwMDAwMDAwM0JGCi06MTAwQjQwMDAwNDFBODJCMDAwMDEwMjZCMDYxQTgyQjQwMDAwMDAwMzhFCi06MTAwQjUwMDAwNDFBODJDMDAwMDEwMjZDMDYxQTgyQzQwMDAwMDAwMzVECi06MTAwQjYwMDAwNDFBODJEMDAwMDEwMjZEMDYxQTgyRDQwMDAwMDAwMzJDCi06MTAwQjcwMDAwNDFBODJFMDAwMDEwMjZFMDYxQTgyRTQwMDAwMDAwM0ZCCi06MTAwQjgwMDAwNDFBODJGMDAwMDEwMjZGMDYxQTgyRjQwMDAwMDAwM0NBCi06MTAwQjkwMDAwNDFBODMwMDAwMDEwMjcwMDYxQTgzMDQwMDAwMDAwMzk3Ci06MTAwQkEwMDAwNDFBODMxMDAwMDEwMjcxMDYxQTgzMTQwMDAwMDAwMzY2Ci06MTAwQkIwMDAwNDFBODMyMDAwMDEwMjcyMDYxQTgzMjQwMDAwMDAwMzM1Ci06MTAwQkMwMDAwNDFBODMzMDAwMDEwMjczMDYxQTgzMzQwMDAwMDAwMzA0Ci06MTAwQkQwMDAwNDFBODM0MDAwMDEwMjc0MDYxQTgzNDQwMDAwMDAwM0QzCi06MTAwQkUwMDAwNDFBODM1MDAwMDEwMjc1MDYxQTgzNTQwMDAwMDAwM0EyCi06MTAwQkYwMDAwNDFBODM2MDAwMDEwMjc2MDYxQTgzNjQwMDAwMDAwMzcxCi06MTAwQzAwMDAwNDFBODM3MDAwMDEwMjc3MDYxQTgzNzQwMDAwMDAwMzNGCi06MTAwQzEwMDAwNDFBODM4MDAwMDEwMjc4MDYxQTgzODQwMDAwMDAwMzBFCi06MTAwQzIwMDAwNDFBODM5MDAwMDEwMjc5MDYxQTgzOTQwMDAwMDAwM0RECi06MTAwQzMwMDAwNDFBODNBMDAwMDEwMjdBMDYxQTgzQTQwMDAwMDAwM0FDCi06MTAwQzQwMDAwNDFBODNCMDAwMDEwMjdCMDYxQTgzQjQwMDAwMDAwMzdCCi06MTAwQzUwMDAwNDFBODNDMDAwMDEwMjdDMDYxQTgzQzQwMDAwMDAwMzRBCi06MTAwQzYwMDAwNDFBODNEMDAwMDEwMjdEMDYxQTgzRDQwMDAwMDAwMzE5Ci06MTAwQzcwMDAwNDFBODNFMDAwMDEwMjdFMDYxQTgzRTQwMDAwMDAwM0U4Ci06MTAwQzgwMDAwNDFBODNGMDAwMDEwMjdGMDYxQTgzRjQwMDAwMDAwM0I3Ci06MTAwQzkwMDAwNDFBODQwMDAwMDEwMjgwMDYxQTg0MDQwMDAwMDAwMzg0Ci06MTAwQ0EwMDAwNDFBODQxMDAwMDEwMjgxMDYxQTg0MTQwMDAwMDAwMzUzCi06MTAwQ0IwMDAwNDFBODQyMDAwMDEwMjgyMDYxQTg0MjQwMDAwMDAwMzIyCi06MTAwQ0MwMDAwNDFBODQzMDAwMDEwMjgzMDYxQTg0MzQwMDAwMDAwM0YxCi06MTAwQ0QwMDAwNDFBODQ0MDAwMDEwMjg0MDYxQTg0NDQwMDAwMDAwM0MwCi06MTAwQ0UwMDAwNDFBODQ1MDAwMDEwMjg1MDYxQTg0NTQwMDAwMDAwMzhGCi06MTAwQ0YwMDAwNDFBODQ2MDAwMDEwMjg2MDYxQTg0NjQwMDAwMDAwMzVFCi06MTAwRDAwMDAwNDFBODQ3MDAwMDEwMjg3MDYxQTg0NzQwMDAwMDAwMzJDCi06MTAwRDEwMDAwNDFBODQ4MDAwMDEwMjg4MDYxQTg0ODQwMDAwMDAwM0ZCCi06MTAwRDIwMDAwNDFBODQ5MDAwMDEwMjg5MDYxQTg0OTQwMDAwMDAwM0NBCi06MTAwRDMwMDAwNDFBODRBMDAwMDEwMjhBMDYxQTg0QTQwMDAwMDAwMzk5Ci06MTAwRDQwMDAwNDFBODRCMDAwMDEwMjhCMDYxQTg0QjQwMDAwMDAwMzY4Ci06MTAwRDUwMDAwNDFBODRDMDAwMDEwMjhDMDYxQTg0QzQwMDAwMDAwMzM3Ci06MTAwRDYwMDAwNDFBODREMDAwMDEwMjhEMDYxQTg0RDQwMDAwMDAwMzA2Ci06MTAwRDcwMDAwNDFBODRFMDAwMDEwMjhFMDYxQTg0RTQwMDAwMDAwM0Q1Ci06MTAwRDgwMDAwNDFBODRGMDAwMDEwMjhGMDYxQTg0RjQwMDAwMDAwM0E0Ci06MTAwRDkwMDAwNDFBODUwMDAwMDEwMjkwMDYxQTg1MDQwMDAwMDAwMzcxCi06MTAwREEwMDAwNDFBODUxMDAwMDEwMjkxMDYxQTg1MTQwMDAwMDAwMzQwCi06MTAwREIwMDAwNDFBODUyMDAwMDEwMjkyMDYxQTg1MjQwMDAwMDAwMzBGCi06MTAwREMwMDAwNDFBODUzMDAwMDEwMjkzMDYxQTg1MzQwMDAwMDAwM0RFCi06MTAwREQwMDAwNDFBODU0MDAwMDEwMjk0MDYxQTg1NDQwMDAwMDAwM0FECi06MTAwREUwMDAwNDFBODU1MDAwMDEwMjk1MDYxQTg1NTQwMDAwMDAwMzdDCi06MTAwREYwMDAwNDFBODU2MDAwMDEwMjk2MDYxQTg1NjQwMDAwMDAwMzRCCi06MTAwRTAwMDAwNDFBODU3MDAwMDEwMjk3MDYxQTg1NzQwMDAwMDAwMzE5Ci06MTAwRTEwMDAwNDFBODU4MDAwMDEwMjk4MDYxQTg1ODQwMDAwMDAwM0U4Ci06MTAwRTIwMDAwNDFBODU5MDAwMDEwMjk5MDYxQTg1OTQwMDAwMDAwM0I3Ci06MTAwRTMwMDAwNDFBODVBMDAwMDEwMjlBMDYxQTg1QTQwMDAwMDAwMzg2Ci06MTAwRTQwMDAwNDFBODVCMDAwMDEwMjlCMDYxQTg1QjQwMDAwMDAwMzU1Ci06MTAwRTUwMDAwNDFBODVDMDAwMDEwMjlDMDYxQTg1QzQwMDAwMDAwMzI0Ci06MTAwRTYwMDAwNDFBODVEMDAwMDEwMjlEMDYxQTg1RDQwMDAwMDAwM0YzCi06MTAwRTcwMDAwNDFBODVFMDAwMDEwMjlFMDYxQTg1RTQwMDAwMDAwM0MyCi06MTAwRTgwMDAwNDFBODVGMDAwMDEwMjlGMDYxQTg1RjQwMDAwMDAwMzkxCi06MTAwRTkwMDAwNDFBODYwMDAwMDEwMkEwMDYxQTg2MDQwMDAwMDAwMzVFCi06MTAwRUEwMDAwNDFBODYxMDAwMDEwMkExMDYxQTg2MTQwMDAwMDAwMzJECi06MTAwRUIwMDAwNDFBODYyMDAwMDEwMkEyMDYxQTg2MjQwMDAwMDAwM0ZDCi06MTAwRUMwMDAwNDFBODYzMDAwMDEwMkEzMDYxQTg2MzQwMDAwMDAwM0NCCi06MTAwRUQwMDAwNDFBODY0MDAwMDEwMkE0MDYxQTg2NDQwMDAwMDAwMzlBCi06MTAwRUUwMDAwNDFBODY1MDAwMDEwMkE1MDYxQTg2NTQwMDAwMDAwMzY5Ci06MTAwRUYwMDAwNDFBODY2MDAwMDEwMkE2MDYxQTg2NjQwMDAwMDAwMzM4Ci06MTAwRjAwMDAwNDFBODY3MDAwMDEwMkE3MDYxQTg2NzQwMDAwMDAwMzA2Ci06MTAwRjEwMDAwNDFBODY4MDAwMDEwMkE4MDYxQTg2ODQwMDAwMDAwM0Q1Ci06MTAwRjIwMDAwNDFBODY5MDAwMDEwMkE5MDYxQTg2OTQwMDAwMDAwM0E0Ci06MTAwRjMwMDAwNDFBODZBMDAwMDEwMkFBMDYxQTg2QTQwMDAwMDAwMzczCi06MTAwRjQwMDAwNDFBODZCMDAwMDEwMkFCMDYxQTg2QjQwMDAwMDAwMzQyCi06MTAwRjUwMDAwNDFBODZDMDAwMDEwMkFDMDYxQTg2QzQwMDAwMDAwMzExCi06MTAwRjYwMDAwNDFBODZEMDAwMDEwMkFEMDYxQTg2RDQwMDAwMDAwM0UwCi06MTAwRjcwMDAwNDFBODZFMDAwMDEwMkFFMDYxQTg2RTQwMDAwMDAwM0FGCi06MTAwRjgwMDAwNDFBODZGMDAwMDEwMkFGMDYxQTg2RjQwMDAwMDAwMzdFCi06MTAwRjkwMDAwNDFBODcwMDAwMDEwMkIwMDYxQTg3MDQwMDAwMDAwMzRCCi06MTAwRkEwMDAwNDFBODcxMDAwMDEwMkIxMDYxQTg3MTQwMDAwMDAwMzFBCi06MTAwRkIwMDAwNDFBODcyMDAwMDEwMkIyMDYxQTg3MjQwMDAwMDAwM0U5Ci06MTAwRkMwMDAwNDFBODczMDAwMDEwMkIzMDYxQTg3MzQwMDAwMDAwM0I4Ci06MTAwRkQwMDAwNDFBODc0MDAwMDEwMkI0MDYxQTg3NDQwMDAwMDAwMzg3Ci06MTAwRkUwMDAwNDFBODc1MDAwMDEwMkI1MDYxQTg3NTQwMDAwMDAwMzU2Ci06MTAwRkYwMDAwNDFBODc2MDAwMDEwMkI2MDYxQTg3NjQwMDAwMDAwMzI1Ci06MTAxMDAwMDAwNDFBODc3MDAwMDEwMkI3MDYxQTg3NzQwMDAwMDAwM0YzCi06MTAxMDEwMDAwNDFBODc4MDAwMDEwMkI4MDYxQTg3ODQwMDAwMDAwM0MyCi06MTAxMDIwMDAwNDFBODc5MDAwMDEwMkI5MDYxQTg3OTQwMDAwMDAwMzkxCi06MTAxMDMwMDAwNDFBODdBMDAwMDEwMkJBMDYxQTg3QTQwMDAwMDAwMzYwCi06MTAxMDQwMDAwNDFBODdCMDAwMDEwMkJCMDYxQTg3QjQwMDAwMDAwMzJGCi06MTAxMDUwMDAwNDFBODdDMDAwMDEwMkJDMDYxQTg3QzQwMDAwMDAwM0ZFCi06MTAxMDYwMDAwNDFBODdEMDAwMDEwMkJEMDYxQTg3RDQwMDAwMDAwM0NECi06MTAxMDcwMDAwNDFBODdFMDAwMDEwMkJFMDYxQTg3RTQwMDAwMDAwMzlDCi06MTAxMDgwMDAwNDFBODdGMDAwMDEwMkJGMDYxQTg3RjQwMDAwMDAwMzZCCi06MTAxMDkwMDAwNDFBODgwMDAwMDEwMkMwMDYxQTg4MDQwMDAwMDAwMzM4Ci06MTAxMEEwMDAwNDFBODgxMDAwMDEwMkMxMDYxQTg4MTQwMDAwMDAwMzA3Ci06MTAxMEIwMDAwNDFBODgyMDAwMDEwMkMyMDYxQTg4MjQwMDAwMDAwM0Q2Ci06MTAxMEMwMDAwNDFBODgzMDAwMDEwMkMzMDYxQTg4MzQwMDAwMDAwM0E1Ci06MTAxMEQwMDAwNDFBODg0MDAwMDEwMkM0MDYxQTg4NDQwMDAwMDAwMzc0Ci06MTAxMEUwMDAwNDFBODg1MDAwMDEwMkM1MDYxQTg4NTQwMDAwMDAwMzQzCi06MTAxMEYwMDAwNDFBODg2MDAwMDEwMkM2MDYxQTg4NjQwMDAwMDAwMzEyCi06MTAxMTAwMDAwNDFBODg3MDAwMDEwMkM3MDYxQTg4NzQwMDAwMDAwM0UwCi06MTAxMTEwMDAwNDFBODg4MDAwMDEwMkM4MDYxQTg4ODQwMDAwMDAwM0FGCi06MTAxMTIwMDAwNDFBODg5MDAwMDEwMkM5MDYxQTg4OTQwMDAwMDAwMzdFCi06MTAxMTMwMDAwNDFBODhBMDAwMDEwMkNBMDYxQTg4QTQwMDAwMDAwMzRECi06MTAxMTQwMDAwNDFBODhCMDAwMDEwMkNCMDYxQTg4QjQwMDAwMDAwMzFDCi06MTAxMTUwMDAwNDFBODhDMDAwMDEwMkNDMDYxQTg4QzQwMDAwMDAwM0VCCi06MTAxMTYwMDAwNDFBODhEMDAwMDEwMkNEMDYxQTg4RDQwMDAwMDAwM0JBCi06MTAxMTcwMDAwNDFBODhFMDAwMDEwMkNFMDYxQTg4RTQwMDAwMDAwMzg5Ci06MTAxMTgwMDAwNDFBODhGMDAwMDEwMkNGMDYxQTg4RjQwMDAwMDAwMzU4Ci06MTAxMTkwMDAwNDFBODkwMDAwMDEwMkQwMDYxQTg5MDQwMDAwMDAwMzI1Ci06MTAxMUEwMDAwNDFBODkxMDAwMDEwMkQxMDYxQTg5MTQwMDAwMDAwM0Y0Ci06MTAxMUIwMDAwNDFBODkyMDAwMDEwMkQyMDYxQTg5MjQwMDAwMDAwM0MzCi06MTAxMUMwMDAwNDFBODkzMDAwMDEwMkQzMDYxQTg5MzQwMDAwMDAwMzkyCi06MTAxMUQwMDAwNDFBODk0MDAwMDEwMkQ0MDYxQTg5NDQwMDAwMDAwMzYxCi06MTAxMUUwMDAwNDFBODk1MDAwMDEwMkQ1MDYxQTg5NTQwMDAwMDAwMzMwCi06MTAxMUYwMDAwNDFBODk2MDAwMDEwMkQ2MDYxQTg5NjQwMDAwMDAwM0ZGCi06MTAxMjAwMDAwNDFBODk3MDAwMDEwMkQ3MDYxQTg5NzQwMDAwMDAwM0NECi06MTAxMjEwMDAwNDFBODk4MDAwMDEwMkQ4MDYxQTg5ODQwMDAwMDAwMzlDCi06MTAxMjIwMDAwNDFBODk5MDAwMDEwMkQ5MDYxQTg5OTQwMDAwMDAwMzZCCi06MTAxMjMwMDAwNDFBODlBMDAwMDEwMkRBMDYxQTg5QTQwMDAwMDAwMzNBCi06MTAxMjQwMDAwNDFBODlCMDAwMDEwMkRCMDYxQTg5QjQwMDAwMDAwMzA5Ci06MTAxMjUwMDAwNDFBODlDMDAwMDEwMkRDMDYxQTg5QzQwMDAwMDAwM0Q4Ci06MTAxMjYwMDAwNDFBODlEMDAwMDEwMkREMDYxQTg5RDQwMDAwMDAwM0E3Ci06MTAxMjcwMDAwNDFBODlFMDAwMDEwMkRFMDYxQTg5RTQwMDAwMDAwMzc2Ci06MTAxMjgwMDAwNDFBODlGMDAwMDEwMkRGMDYxQTg5RjQwMDAwMDAwMzQ1Ci06MTAxMjkwMDAwNDFBOEEwMDAwMDEwMkUwMDYxQThBMDQwMDAwMDAwMzEyCi06MTAxMkEwMDAwNDFBOEExMDAwMDEwMkUxMDYxQThBMTQwMDAwMDAwM0UxCi06MTAxMkIwMDAwNDFBOEEyMDAwMDEwMkUyMDYxQThBMjQwMDAwMDAwM0IwCi06MTAxMkMwMDAwNDFBOEEzMDAwMDEwMkUzMDYxQThBMzQwMDAwMDAwMzdGCi06MTAxMkQwMDAwNDFBOEE0MDAwMDEwMkU0MDYxQThBNDQwMDAwMDAwMzRFCi06MTAxMkUwMDAwNDFBOEE1MDAwMDEwMkU1MDYxQThBNTQwMDAwMDAwMzFECi06MTAxMkYwMDAwNDFBOEE2MDAwMDEwMkU2MDYxQThBNjQwMDAwMDAwM0VDCi06MTAxMzAwMDAwNDFBOEE3MDAwMDEwMkU3MDYxQThBNzQwMDAwMDAwM0JBCi06MTAxMzEwMDAwNDFBOEE4MDAwMDEwMkU4MDYxQThBODQwMDAwMDAwMzg5Ci06MTAxMzIwMDAwNDFBOEE5MDAwMDEwMkU5MDYxQThBOTQwMDAwMDAwMzU4Ci06MTAxMzMwMDAwNDFBOEFBMDAwMDEwMkVBMDYxQThBQTQwMDAwMDAwMzI3Ci06MTAxMzQwMDAwNDFBOEFCMDAwMDEwMkVCMDYxQThBQjQwMDAwMDAwM0Y2Ci06MTAxMzUwMDAwNDFBOEFDMDAwMDEwMkVDMDYxQThBQzQwMDAwMDAwM0M1Ci06MTAxMzYwMDAwNDFBOEFEMDAwMDEwMkVEMDYxQThBRDQwMDAwMDAwMzk0Ci06MTAxMzcwMDAwNDFBOEFFMDAwMDEwMkVFMDYxQThBRTQwMDAwMDAwMzYzCi06MTAxMzgwMDAwNDFBOEFGMDAwMDEwMkVGMDYxQThBRjQwMDAwMDAwMzMyCi06MTAxMzkwMDAwNDFBOEIwMDAwMDEwMkYwMDYxQThCMDQwMDAwMDAwM0ZGCi06MTAxM0EwMDAwNDFBOEIxMDAwMDEwMkYxMDYxQThCMTQwMDAwMDAwM0NFCi06MTAxM0IwMDAwNDFBOEIyMDAwMDEwMkYyMDYxQThCMjQwMDAwMDAwMzlECi06MTAxM0MwMDAwNDFBOEIzMDAwMDEwMkYzMDYxQThCMzQwMDAwMDAwMzZDCi06MTAxM0QwMDAwNDFBOEI0MDAwMDEwMkY0MDYxQThCNDQwMDAwMDAwMzNCCi06MTAxM0UwMDAwNDFBOEI1MDAwMDEwMkY1MDYxQThCNTQwMDAwMDAwMzBBCi06MTAxM0YwMDAwNDFBOEI2MDAwMDEwMkY2MDYxQThCNjQwMDAwMDAwM0Q5Ci06MTAxNDAwMDAwNDFBOEI3MDAwMDEwMkY3MDYxQThCNzQwMDAwMDAwM0E3Ci06MTAxNDEwMDAwNDFBOEI4MDAwMDEwMkY4MDYxQThCODQwMDAwMDAwMzc2Ci06MTAxNDIwMDAwNDFBOEI5MDAwMDEwMkY5MDYxQThCOTQwMDAwMDAwMzQ1Ci06MTAxNDMwMDAwNDFBOEJBMDAwMDEwMkZBMDYxQThCQTQwMDAwMDAwMzE0Ci06MTAxNDQwMDAwNDFBOEJCMDAwMDEwMkZCMDYxQThCQjQwMDAwMDAwM0UzCi06MTAxNDUwMDAwNDFBOEJDMDAwMDEwMkZDMDYxQThCQzQwMDAwMDAwM0IyCi06MTAxNDYwMDAwNDFBOEJEMDAwMDEwMkZEMDYxQThCRDQwMDAwMDAwMzgxCi06MTAxNDcwMDAwNDFBOEJFMDAwMDEwMkZFMDYxQThCRTQwMDAwMDAwMzUwCi06MTAxNDgwMDAwNDFBOEJGMDAwMDEwMkZGMDYxQThCRjQwMDAwMDAwMzFGCi06MTAxNDkwMDAwNDFBOEMwMDAwMDEwMzAwMDYxQThDMDQwMDAwMDAwM0VCCi06MTAxNEEwMDAwNDFBOEMxMDAwMDEwMzAxMDYxQThDMTQwMDAwMDAwM0JBCi06MTAxNEIwMDAwNDFBOEMyMDAwMDEwMzAyMDYxQThDMjQwMDAwMDAwMzg5Ci06MTAxNEMwMDAwNDFBOEMzMDAwMDEwMzAzMDYxQThDMzQwMDAwMDAwMzU4Ci06MTAxNEQwMDAwNDFBOEM0MDAwMDEwMzA0MDYxQThDNDQwMDAwMDAwMzI3Ci06MTAxNEUwMDAwNDFBOEM1MDAwMDEwMzA1MDYxQThDNTQwMDAwMDAwM0Y2Ci06MTAxNEYwMDAwNDFBOEM2MDAwMDEwMzA2MDYxQThDNjQwMDAwMDAwM0M1Ci06MTAxNTAwMDAwNDFBOEM3MDAwMDEwMzA3MDYxQThDNzQwMDAwMDAwMzkzCi06MTAxNTEwMDAwNDFBOEM4MDAwMDEwMzA4MDYxQThDODQwMDAwMDAwMzYyCi06MTAxNTIwMDAwNDFBOEM5MDAwMDEwMzA5MDYxQThDOTQwMDAwMDAwMzMxCi06MTAxNTMwMDAwNDFBOENBMDAwMDEwMzBBMDYxQThDQTQwMDAwMDAwMzAwCi06MTAxNTQwMDAwNDFBOENCMDAwMDEwMzBCMDYxQThDQjQwMDAwMDAwM0NGCi06MTAxNTUwMDAwNDFBOENDMDAwMDEwMzBDMDYxQThDQzQwMDAwMDAwMzlFCi06MTAxNTYwMDAwNDFBOENEMDAwMDEwMzBEMDYxQThDRDQwMDAwMDAwMzZECi06MTAxNTcwMDAwNDFBOENFMDAwMDEwMzBFMDYxQThDRTQwMDAwMDAwMzNDCi06MTAxNTgwMDAwNDFBOENGMDAwMDEwMzBGMDYxQThDRjQwMDAwMDAwMzBCCi06MTAxNTkwMDAwNDFBOEQwMDAwMDEwMzEwMDYxQThEMDQwMDAwMDAwM0Q4Ci06MTAxNUEwMDAwNDFBOEQxMDAwMDEwMzExMDYxQThEMTQwMDAwMDAwM0E3Ci06MTAxNUIwMDAwNDFBOEQyMDAwMDEwMzEyMDYxQThEMjQwMDAwMDAwMzc2Ci06MTAxNUMwMDAwNDFBOEQzMDAwMDEwMzEzMDYxQThEMzQwMDAwMDAwMzQ1Ci06MTAxNUQwMDAwNDFBOEQ0MDAwMDEwMzE0MDYxQThENDQwMDAwMDAwMzE0Ci06MTAxNUUwMDAwNDFBOEQ1MDAwMDEwMzE1MDYxQThENTQwMDAwMDAwM0UzCi06MTAxNUYwMDAwNDFBOEQ2MDAwMDEwMzE2MDYxQThENjQwMDAwMDAwM0IyCi06MTAxNjAwMDAwNDFBOEQ3MDAwMDEwMzE3MDYxQThENzQwMDAwMDAwMzgwCi06MTAxNjEwMDAwNDFBOEQ4MDAwMDEwMzE4MDYxQThEODQwMDAwMDAwMzRGCi06MTAxNjIwMDAwNDFBOEQ5MDAwMDEwMzE5MDYxQThEOTQwMDAwMDAwMzFFCi06MTAxNjMwMDAwNDFBOERBMDAwMDEwMzFBMDYxQThEQTQwMDAwMDAwM0VECi06MTAxNjQwMDAwNDFBOERCMDAwMDEwMzFCMDYxQThEQjQwMDAwMDAwM0JDCi06MTAxNjUwMDAwNDFBOERDMDAwMDEwMzFDMDYxQThEQzQwMDAwMDAwMzhCCi06MTAxNjYwMDAwNDFBOEREMDAwMDEwMzFEMDYxQThERDQwMDAwMDAwMzVBCi06MTAxNjcwMDAwNDFBOERFMDAwMDEwMzFFMDYxQThERTQwMDAwMDAwMzI5Ci06MTAxNjgwMDAwNDFBOERGMDAwMDEwMzFGMDYxQThERjQwMDAwMDAwM0Y4Ci06MTAxNjkwMDAwNDFBOEUwMDAwMDEwMzIwMDYxQThFMDQwMDAwMDAwM0M1Ci06MTAxNkEwMDAwNDFBOEUxMDAwMDEwMzIxMDYxQThFMTQwMDAwMDAwMzk0Ci06MTAxNkIwMDAwNDFBOEUyMDAwMDEwMzIyMDYxQThFMjQwMDAwMDAwMzYzCi06MTAxNkMwMDAwNDFBOEUzMDAwMDEwMzIzMDYxQThFMzQwMDAwMDAwMzMyCi06MTAxNkQwMDAwNDFBOEU0MDAwMDEwMzI0MDYxQThFNDQwMDAwMDAwMzAxCi06MTAxNkUwMDAwNDFBOEU1MDAwMDEwMzI1MDYxQThFNTQwMDAwMDAwM0QwCi06MTAxNkYwMDAwNDFBOEU2MDAwMDEwMzI2MDYxQThFNjQwMDAwMDAwMzlGCi06MTAxNzAwMDAwNDFBOEU3MDAwMDEwMzI3MDYxQThFNzQwMDAwMDAwMzZECi06MTAxNzEwMDAwNDFBOEU4MDAwMDEwMzI4MDYxQThFODQwMDAwMDAwMzNDCi06MTAxNzIwMDAwNDFBOEU5MDAwMDEwMzI5MDYxQThFOTQwMDAwMDAwMzBCCi06MTAxNzMwMDAwNDFBOEVBMDAwMDEwMzJBMDYxQThFQTQwMDAwMDAwM0RBCi06MTAxNzQwMDAwNDFBOEVCMDAwMDEwMzJCMDYxQThFQjQwMDAwMDAwM0E5Ci06MTAxNzUwMDAwNDFBOEVDMDAwMDEwMzJDMDYxQThFQzQwMDAwMDAwMzc4Ci06MTAxNzYwMDAwNDFBOEVEMDAwMDEwMzJEMDYxQThFRDQwMDAwMDAwMzQ3Ci06MTAxNzcwMDAwNDFBOEVFMDAwMDEwMzJFMDYxQThFRTQwMDAwMDAwMzE2Ci06MTAxNzgwMDAwNDFBOEVGMDAwMDEwMzJGMDYxQThFRjQwMDAwMDAwM0U1Ci06MTAxNzkwMDAwNDFBOEYwMDAwMDEwMzMwMDYxQThGMDQwMDAwMDAwM0IyCi06MTAxN0EwMDAwNDFBOEYxMDAwMDEwMzMxMDYxQThGMTQwMDAwMDAwMzgxCi06MTAxN0IwMDAwNDFBOEYyMDAwMDEwMzMyMDYxQThGMjQwMDAwMDAwMzUwCi06MTAxN0MwMDAwNDFBOEYzMDAwMDEwMzMzMDYxQThGMzQwMDAwMDAwMzFGCi06MTAxN0QwMDAwNDFBOEY0MDAwMDEwMzM0MDYxQThGNDQwMDAwMDAwM0VFCi06MTAxN0UwMDAwNDFBOEY1MDAwMDEwMzM1MDYxQThGNTQwMDAwMDAwM0JECi06MTAxN0YwMDAwNDFBOEY2MDAwMDEwMzM2MDYxQThGNjQwMDAwMDAwMzhDCi06MTAxODAwMDAwNDFBOEY3MDAwMDEwMzM3MDYxQThGNzQwMDAwMDAwMzVBCi06MTAxODEwMDAwNDFBOEY4MDAwMDEwMzM4MDYxQThGODQwMDAwMDAwMzI5Ci06MTAxODIwMDAwNDFBOEY5MDAwMDEwMzM5MDYxQThGOTQwMDAwMDAwM0Y4Ci06MTAxODMwMDAwNDFBOEZBMDAwMDEwMzNBMDYxQThGQTQwMDAwMDAwM0M3Ci06MTAxODQwMDAwNDFBOEZCMDAwMDEwMzNCMDYxQThGQjQwMDAwMDAwMzk2Ci06MTAxODUwMDAwNDFBOEZDMDAwMDEwMzNDMDYxQThGQzQwMDAwMDAwMzY1Ci06MTAxODYwMDAwNDFBOEZEMDAwMDEwMzNEMDYxQThGRDQwMDAwMDAwMzM0Ci06MTAxODcwMDAwNDFBOEZFMDAwMDEwMzNFMDYxQThGRTQwMDAwMDAwN0ZGCi06MTAxODgwMDAwNDFBNjJDMDAwMjAwMzNGMDYxQUQwMDAwMDAwMDA3MjU0Ci06MTAxODkwMDAwNjFBRDI0ODAwMDAwMDEwMDYxQUQ2QjAwMDAwMDAyMDM4Ci06MTAxOEEwMDAwNjFBRDQ3MDAwMDAwMDkwMDYxQUQ0NjgwMDAwMDAwMkU2Ci06MTAxOEIwMDAwNjFBQTAwMDAwMDAwMUM0MDYxQTMwMDAwMDAwMDAxMDQzCi06MTAxOEMwMDAwNjFBMzA4MDAwMDAwMDEwMDYxQTMxMDAwMDAwMDAxMEQ3Ci06MTAxOEQwMDAwNjFBMzE4MDAwMDAwMDEwMDYxQTMzMDAwMDAwMDAxMkMyCi06MTAxOEUwMDAwNjFBMzM5MDAwMDAwMDcwMDYxQUQ0NTgwMDAwMDAwMjU3Ci06MTAxOEYwMDAwNjFBRDM0ODAwMDAwMDAyMDYxQUQzNTgwMDAwMDAyMDQwCi06MTAxOTAwMDAwNjFBQTcxMDAwMDAwMUM0MDYxQTMwNDAwMDAwMDAxMDlCCi06MTAxOTEwMDAwNjFBMzBDMDAwMDAwMDEwMDYxQTMxNDAwMDAwMDAxMDA2Ci06MTAxOTIwMDAwNjFBMzFDMDAwMDAwMDEwMDYxQTMzNDgwMDAwMDAxMkU5Ci06MTAxOTMwMDAwNjFBMzU1MDAwMDAwMDcwMDYxQUQ0NjAwMDAwMDAwMjNDCi06MTAxOTQwMDAwNjFBRDM1MDAwMDAwMDAyMDYxQUQzRDgwMDAwMDAyMDY3Ci06MTAxOTUwMDAwMjFBQUUyMDAwMDAwMDAwMDYxQTUwMDAwMDAwMDAwMjJCCi06MTAxOTYwMDAwNjFBNTA4MDAwMDAwMDEyMDQxQTQwMDAwMDAyMDM1RkIzCi06MTAxOTcwMDAwNDFBNjNDMDAwMDIwMzYxMDYxQTcwMDAwMDAwMDAwNDJDCi06MTAxOTgwMDAwNjFBMzIwMDAwMDAwMDA4MDIxQUFFMjQwMDAwMDAwMDBGCi06MTAxOTkwMDAwNjFBNTAxMDAwMDAwMDAyMDYxQTUwQzgwMDAwMDAxMjdCCi06MTAxOUEwMDAwNDFBNDAwODAwMDIwMzYzMDQxQTYzQzgwMDAyMDM2NUI2Ci06MTAxOUIwMDAwNjFBNzAxMDAwMDAwMDA0MDYxQTMyMjAwMDAwMDAwODA5Ci06MTAxOUMwMDAwMjFBQUUyODAwMDAwMDAwMDYxQTUwMjAwMDAwMDAwMjkzCi06MTAxOUQwMDAwNjFBNTExMDAwMDAwMDEyMDQxQTQwMTAwMDAyMDM2NzlBCi06MTAxOUUwMDAwNDFBNjNEMDAwMDIwMzY5MDYxQTcwMjAwMDAwMDAwNDg0Ci06MTAxOUYwMDAwNjFBMzI0MDAwMDAwMDA4MDIxQUFFMkMwMDAwMDAwMDU3Ci06MTAxQTAwMDAwNjFBNTAzMDAwMDAwMDAyMDYxQTUxNTgwMDAwMDAxMjU5Ci06MTAxQTEwMDAwNDFBNDAxODAwMDIwMzZCMDQxQTYzRDgwMDAyMDM2RDE1Ci06MTAxQTIwMDAwNjFBNzAzMDAwMDAwMDA0MDYxQTMyNjAwMDAwMDAwODM4Ci06MTAxQTMwMDAwMjFBQUUzMDAwMDAwMDAwMDYxQTUwNDAwMDAwMDAwMkZBCi06MTAxQTQwMDAwNjFBNTFBMDAwMDAwMDEyMDQxQTQwMjAwMDAyMDM2RjgxCi06MTAxQTUwMDAwNDFBNjNFMDAwMDIwMzcxMDYxQTcwNDAwMDAwMDAwNERCCi06MTAxQTYwMDAwNjFBMzI4MDAwMDAwMDA4MDIxQUFFMzQwMDAwMDAwMDlFCi06MTAxQTcwMDAwNjFBNTA1MDAwMDAwMDAyMDYxQTUxRTgwMDAwMDAxMjM5Ci06MTAxQTgwMDAwNDFBNDAyODAwMDIwMzczMDQxQTYzRTgwMDAyMDM3NTc1Ci06MTAxQTkwMDAwNjFBNzA1MDAwMDAwMDA0MDYxQTMyQTAwMDAwMDAwODY4Ci06MTAxQUEwMDAwMjFBQUUzODAwMDAwMDAwMDYxQTUwNjAwMDAwMDAwMjYyCi06MTAxQUIwMDAwNjFBNTIzMDAwMDAwMDEyMDQxQTQwMzAwMDAyMDM3NzY4Ci06MTAxQUMwMDAwNDFBNjNGMDAwMDIwMzc5MDYxQTcwNjAwMDAwMDAwNDMzCi06MTAxQUQwMDAwNjFBMzJDMDAwMDAwMDA4MDIxQUFFM0MwMDAwMDAwMEU2Ci06MTAxQUUwMDAwNjFBNTA3MDAwMDAwMDAyMDYxQTUyNzgwMDAwMDAxMjE4Ci06MTAxQUYwMDAwNDFBNDAzODAwMDIwMzdCMDQxQTYzRjgwMDAyMDM3REQ1Ci06MTAxQjAwMDAwNjFBNzA3MDAwMDAwMDA0MDYxQTMyRTAwMDAwMDAwODk3Ci06MTAxQjEwMDAwMjAwQTQ2ODAwMEIwMUM4MDIwMEEyOTQwNzFEMjkxMTRECi06MTAxQjIwMDAwMjAwQTI5ODAwMDAwMDAwMDIwMEEyOUMwMDlDMDQyNDc1Ci06MTAxQjMwMDAwMjAwQTJBMDAwMDAwMDAwMDIwMEEyQTQwMDAwMDIwOTBFCi06MTAxQjQwMDAwMjAwQTI3MDAwMDAwMDAwMDIwMEEyNzQwMDAwMDAwMDY5Ci06MTAxQjUwMDAwMjAwQTI3MDAwMDAwMDAwMDIwMEEyNzQwMDAwMDAwMDU5Ci06MTAxQjYwMDAwMjAwQTI3MDAwMDAwMDAwMDIwMEEyNzQwMDAwMDAwMDQ5Ci06MTAxQjcwMDAwMjAwQTI3MDAwMDAwMDAwMDIwMEEyNzQwMDAwMDAwMDM5Ci06MTAxQjgwMDAwMjAxNjBBMDAwMDAwMDAxMDIwMTYwQTQwMDAwMDI2MkU2Ci06MTAxQjkwMDAwMjAxNjBBODAwMDAwMDAyMDIwMTYwQUMwMDAwMDAxODExCi06MTAxQkEwMDAwMjAxNjIwNDAwMDAwMDAxMDIwMTAwQjQwMDAwMDAwMTEzCi06MTAxQkIwMDAwMjAxMDBCODAwMDAwMDAxMDIwMTAwREMwMDAwMDAwMTg5Ci06MTAxQkMwMDAwMjAxMDEwMDAwMDAwMDAxMDIwMTAxMDQwMDAwMDAwMTA3Ci06MTAxQkQwMDAwMjAxMDA3QzAwMzAwMDAwMDIwMTAwODQwMDAwMDAyOEE3Ci06MTAxQkUwMDAwMjAxMDA4QzAwMDAwMDAwMDIwMTAxMzAwMDAwMDAwNDJFCi06MTAxQkYwMDAwMjAxMDI1QzAwMDAwMDAxMDIwMTAzMjgwMDAwMDAwMDU1Ci06MTAxQzAwMDAwMjAxNjA1ODAwMDBGRkZGMDIwMTYwNzAwMDAwMDAwNzQxCi06MTAxQzEwMDAwMjAxNjA4MDAwMDAwMDAxMDIwMTA1NTQwMDAwMDAzMDU0Ci06MTAxQzIwMDAwMjAxMDBDNDAwMDAwMDAxMDIwMTAwQ0MwMDAwMDAwMTFDCi06MTAxQzMwMDAwMjAxMDBGODAwMDAwMDAxMDIwMTAwRjAwMDAwMDAwMUI0Ci06MTAxQzQwMDAwMjAxMDA4MDAwMzAwMDAwMDIwMTAwODgwMDAwMDAyODJFCi06MTAxQzUwMDAwMjAxMDA5MDAwMDAwMDAwMDIwMTAxMzQwMDAwMDAwNEI1Ci06MTAxQzYwMDAwMjAxMDJEQzAwMDAwMDAxMDIwMTAzMkMwMDAwMDAwMDYwCi06MTAxQzcwMDAwMjAxNjA1QzAwMDBGRkZGMDIwMTYwNzQwMDAwMDAwN0M5Ci06MTAxQzgwMDAwMjAxNjA4NDAwMDAwMDAxMDIwMTA1NjQwMDAwMDAzMEQwCi06MTAxQzkwMDAwMjAxMDBDODAwMDAwMDAxMDIwMTAwRDAwMDAwMDAwMUE0Ci06MTAxQ0EwMDAwMjAxMDBGQzAwMDAwMDAxMDIwMTAwRjQwMDAwMDAwMTNDCi06MTAxQ0IwMDAwMjBDMTAwMDAwMDAwMDI4MDIwQzIwMDgwMDAwMDIxMTk1Ci06MTAxQ0MwMDAwMjBDMjAwQzAwMDAwMjAwMDIwQzIwMTAwMDAwMDIwNDk0Ci06MTAxQ0QwMDAwMjBDMjAxQzAwMDBGRkZGMDIwQzIwMjAwMDAwRkZGRjcwCi06MTAxQ0UwMDAwMjBDMjAyNDAwMDBGRkZGMDIwQzIwMjgwMDAwRkZGRjUwCi06MTAxQ0YwMDAwMjBDMjAzODAwMDAwMDIwMDIwQzIwM0MwMDAwMDAyMUQzCi06MTAxRDAwMDAwMjBDMjA0MDAwMDAwMDIyMDIwQzIwNDQwMDAwMDAyM0FFCi06MTAxRDEwMDAwMjBDMjA0ODAwMDAwMDI0MDIwQzIwNEMwMDAwMDAyNThBCi06MTAxRDIwMDAwMjBDMjA1MDAwMDAwMDI2MDIwQzIwNTQwMDAwMDAyNzY2Ci06MTAxRDMwMDAwMjBDMjA1ODAwMDAwMDI4MDIwQzIwNUMwMDAwMDAyOTQyCi06MTAxRDQwMDAwMjBDMjA2MDAwMDAwMDJBMDIwQzIwNjQwMDAwMDAyQjFFCi06MTAxRDUwMDAwMjBDMjA2ODAwMDAwMDJDMDIwQzIwNkMwMDAwMDAyREZBCi06MTAxRDYwMDAwMjBDMjA3MDAwMDAwMDJFMDIwQzIwNzQwMDAwMDAyRkQ2Ci06MTAxRDcwMDAwMjBDMjA3ODAwMDAwMDEwMDYwQzIwN0MwMDAwMDAwN0Y4Ci06MTAxRDgwMDAwMjBDMjA5ODAwMDAwMDExMDIwQzIwOUMwMDAwMDAxMkEwCi06MTAxRDkwMDAwMjBDMjBBMDAwMDAwMDEzMDYwQzIwQTQwMDAwMDAxRDZGCi06MTAxREEwMDAwMjBDMjExODAwMDAwMDAxMDIwQzIxMUMwMDAwMDAwMTlGCi06MTAxREIwMDAwMjBDMjEyMDAwMDAwMDAxMDYwQzIxMjQwMDAwMDAxRDVGCi06MTAxREMwMDAwMjBDMjE5ODAwMDAwMDAxMDYwQzIxOUMwMDAwMDAwNzc1Ci06MTAxREQwMDAwMjBDMjFCODAwMDAwMDAxMDIwQzIxQkMwMDAwMDAwMTJGCi06MTAxREUwMDAwMjBDMjFDMDAwMDAwMDAxMDIwQzIxQzQwMDAwMDAwMTBGCi06MTAxREYwMDAwMjBDMjFDODAwMDAwMDAxMDIwQzIxQ0MwMDAwMDAwMUVGCi06MTAxRTAwMDAwMjBDMjFEMDAwMDAwMDAxMDIwQzIxRDQwMDAwMDAwMUNFCi06MTAxRTEwMDAwMjBDMjFEODAwMDAwMDAxMDIwQzIxREMwMDAwMDAwMUFFCi06MTAxRTIwMDAwMjBDMjFFMDAwMDAwMDAxMDIwQzIxRTQwMDAwMDAwMThFCi06MTAxRTMwMDAwMjBDMjFFODAwMDAwMDAxMDIwQzIxRUMwMDAwMDAwMTZFCi06MTAxRTQwMDAwMjBDMjFGMDAwMDAwMDAxMDIwQzIxRjQwMDAwMDAwMTRFCi06MTAxRTUwMDAwMjBDMjFGODAwMDAwMDAxMDYwQzIxRkMwMDAwMDAwNzI0Ci06MTAxRTYwMDAwMjBDMjIxODAwMDAwMDAxMDYwQzIyMUMwMDAwMDAwN0QyCi06MTAxRTcwMDAwMjBDMjIzODA3RkZGRkZGMDIwQzIyM0MwMDAwMDAzRjRCCi06MTAxRTgwMDAwMjBDMjI0MDA3RkZGRkZGMDIwQzIyNDQwMDAwMDAwRjVCCi06MTAxRTkwMDAwMTBDMjI0ODAwMDAwMDAwMDEwQzIyNEMwMDAwMDAwMDUwCi06MTAxRUEwMDAwMTBDMjI1MDAwMDAwMDAwMDEwQzIyNTQwMDAwMDAwMDMwCi06MTAxRUIwMDAwMTBDMjI1ODAwMDAwMDAwMDEwQzIyNUMwMDAwMDAwMDEwCi06MTAxRUMwMDAwMTBDMjI2MDAwMDAwMDAwMDEwQzIyNjQwMDAwMDAwMEYwCi06MTAxRUQwMDAwMTBDMjI2ODAwMDAwMDAwMDEwQzIyNkMwMDAwMDAwMEQwCi06MTAxRUUwMDAwMTBDMjI3MDAwMDAwMDAwMDEwQzIyNzQwMDAwMDAwMEIwCi06MTAxRUYwMDAwMTBDMjI3ODAwMDAwMDAwMDEwQzIyN0MwMDAwMDAwMDkwCi06MTAxRjAwMDAwQzBDMjAwMDAwMDAwM0U4MEEwQzIwMDAwMDAwMDAwMTc3Ci06MTAxRjEwMDAwQjBDMjAwMDAwMDAwMDBBMDIwQzQwMDgwMDAwMTAxMTA5Ci06MTAxRjIwMDAwMjBDNDAwQzAwMDAxMDAwMDIwQzQwMTAwMDAwMTAwNEQ1Ci06MTAxRjMwMDAwMjBDNDAxNDAwMDAxMDIxMDIwQzQwMUMwMDAwRkZGRkE2Ci06MTAxRjQwMDAwMjBDNDAyMDAwMDBGRkZGMDIwQzQwMjQwMDAwRkZGRkI1Ci06MTAxRjUwMDAwMjBDNDAyODAwMDBGRkZGMDIwQzQwMzgwMDAwMDA0NjQxCi06MTAxRjYwMDAwMjBDNDAzQzAwMDAwMDEwMDYwQzQwNDAwMDAwMDAwMjQzCi06MTAxRjcwMDAwMjBDNDA0ODAwMDAwMDE4MDIwQzQwNEMwMDAwMDBGMDI5Ci06MTAxRjgwMDAwNjBDNDA1MDAwMDAwMDFGMDIwQzQwQ0MwMDAwMDAwMTc1Ci06MTAxRjkwMDAwNjBDNDBEMDAwMDAwMDNBMDIwQzQxQjgwMDAwMDAwMURECi06MTAxRkEwMDAwNjBDNDFCQzAwMDAwMDAzMDIwQzQxQzgwMDAwMDAwMTA3Ci06MTAxRkIwMDAwMjBDNDFDQzAwMDAwMDAxMDYwQzQxRDAwMDAwMDAxQUM4Ci06MTAxRkMwMDAwMjBDNDIzODA3RkZGRkZGMDIwQzQyM0MwMDAwMDAzRkJBCi06MTAxRkQwMDAwMjBDNDI0MDA3RkZGRkZGMDIwQzQyNDQwMDAwMDAwRkNBCi06MTAxRkUwMDAwMTBDNDI0ODAwMDAwMDAwMDEwQzQyNEMwMDAwMDAwMEJGCi06MTAxRkYwMDAwMTBDNDI1MDAwMDAwMDAwMDEwQzQyNTQwMDAwMDAwMDlGCi06MTAyMDAwMDAwMTBDNDI1ODAwMDAwMDAwMDEwQzQyNUMwMDAwMDAwMDdFCi06MTAyMDEwMDAwMTBDNDI2MDAwMDAwMDAwMDEwQzQyNjQwMDAwMDAwMDVFCi06MTAyMDIwMDAwMTBDNDI2ODAwMDAwMDAwMDEwQzQyNkMwMDAwMDAwMDNFCi06MTAyMDMwMDAwMTBDNDI3MDAwMDAwMDAwMDEwQzQyNzQwMDAwMDAwMDFFCi06MTAyMDQwMDAwMTBDNDI3ODAwMDAwMDAwMDEwQzQyN0MwMDAwMDAwMEZFCi06MTAyMDUwMDAwMTBDNDI4MDAwMDAwMDAwMEMwQzQwMDAwMDAwMDNFODZFCi06MTAyMDYwMDAwQTBDNDAwMDAwMDAwMDAxMEIwQzQwMDAwMDAwMDAwQUI4Ci06MTAyMDcwMDAwNjBENDAwMDAwMDAwQTAwMDIwRDAwNDQwMDAwMDAzMjdFCi06MTAyMDgwMDAwMjBEMDA4QzAyMTUwMDIwMDIwRDAwOTAwMjE1MDAyMEE4Ci06MTAyMDkwMDAwMjBEMDA5NDA4MTAwMDAwMDIwRDAwOTgwMDAwMDAzM0FCCi06MTAyMEEwMDAwMjBEMDA5QzAwMDAwMDAyMDIwRDAwQTAwMDAwMDAwMEQ0Ci06MTAyMEIwMDAwMjBEMDBBNDAwMDAwMDA1MDIwRDAwQTgwMDAwMDAwNUFDCi06MTAyMEMwMDAwNjBEMDBBQzAwMDAwMDAyMDIwRDAwQjQwMDAwMDAwMjhBCi06MTAyMEQwMDAwMjBEMDBCODAwMDAwMDAzMDIwRDAwQkMwMDAwMDAwMjY5Ci06MTAyMEUwMDAwMjBEMDBDMDAwMDAwMDAxMDIwRDAwQzgwMDAwMDAwMjQ3Ci06MTAyMEYwMDAwMjBEMDBDQzAwMDAwMDAyMDIwRDAxNUMwMDAwMDAwMTk2Ci06MTAyMTAwMDAwMjBEMDE2NDAwMDAwMDAxMDIwRDAxNjgwMDAwMDAwMkUwCi06MTAyMTEwMDAwMjBEMDIwNDAwMDAwMDAxMDIwRDAyMEMwMDAwMDAyMDZDCi06MTAyMTIwMDAwMjBEMDIxMDAwMDAwMDQwMDIwRDAyMTQwMDAwMDA0MEU5Ci06MTAyMTMwMDAwMjBEMDIyMDAwMDAwMDAzMDIwRDAyMjQwMDAwMDAxODFFCi06MTAyMTQwMDAwNjBEMDI4MDAwMDAwMDEyMDQwRDAzMDAwMDE4MDM3RjNBCi06MTAyMTUwMDAwNjBEMDM2MDAwMDAwMDBDMDIwRDAwNEMwMDAwMDAwMUExCi06MTAyMTYwMDAwMjBEMDA1MDAwMDAwMDAyMDIwRDAwNTQwMDAwMDAwMEFCCi06MTAyMTcwMDAwMjBEMDA1ODAwMDAwMDA4MDYwRDAwNUMwMDAwMDAwNDdECi06MTAyMTgwMDAwMjBEMDBDNDAwMDAwMDA0MDIwRDAwMDQwMDAwMDAwMTY0Ci06MTAyMTkwMDAwMjBEMDAwODAwMDAwMDAxMDIwRDAwMEMwMDAwMDAwMTBCCi06MTAyMUEwMDAwMjBEMDAxMDAwMDAwMDAxMDIwRDAwMTQwMDAwMDAwMUVCCi06MTAyMUIwMDAwMjBEMDAxODAwMDAwMDAxMDIwRDAwMUMwMDAwMDAwMUNCCi06MTAyMUMwMDAwMjBEMDAyMDAwMDAwMDAxMDIwRDAwMjQwMDAwMDAwMUFCCi06MTAyMUQwMDAwMjBEMDAyODAwMDAwMDAxMDIwRDAwMkMwMDAwMDAwMThCCi06MTAyMUUwMDAwMjBEMDAzMDAwMDAwMDAxMDIwRDAwMzQwMDAwMDAwMTZCCi06MTAyMUYwMDAwMjBEMDAzODAwMDAwMDAxMDIwRDAwM0MwMDAwMDAwMTRCCi06MTAyMjAwMDAwMjBEMDExNDAwMDAwMDA5MDIwRDAxMUMwMDAwMDAwQTZCCi06MTAyMjEwMDAwMjBEMDEyNDAwMDAwMDAwMDIwRDAxMkMwMDAwMDAwMDRFCi06MTAyMjIwMDAwMjBEMDEzNDAwMDAwMDAwMDIwRDAxM0MwMDAwMDAwQjEzCi06MTAyMjMwMDAwMjBEMDE0NDAwMDAwMDAwMDIwRDAxMTgwMDAwMDAyOUY5Ci06MTAyMjQwMDAwMjBEMDEyMDAwMDAwMDJBMDIwRDAxMjgwMDAwMDAyMERDCi06MTAyMjUwMDAwMjBEMDEzMDAwMDAwMDIwMDIwRDAxMzgwMDAwMDAyMEI2Ci06MTAyMjYwMDAwMjBEMDE0MDAwMDAwMDJCMDIwRDAxNDgwMDAwMDAyMDdCCi06MTAyMjcwMDAwMjBEMDExNDAwMDAwMDE5MDIwRDAxMUMwMDAwMDAxQURCCi06MTAyMjgwMDAwMjBEMDEyNDAwMDAwMDEwMDIwRDAxMkMwMDAwMDAxMEJFCi06MTAyMjkwMDAwMjBEMDEzNDAwMDAwMDEwMDIwRDAxM0MwMDAwMDAxQjgzCi06MTAyMkEwMDAwMjBEMDE0NDAwMDAwMDEwMDIwRDAxMTgwMDAwMDAzOTY5Ci06MTAyMkIwMDAwMjBEMDEyMDAwMDAwMDNBMDIwRDAxMjgwMDAwMDAzMDRDCi06MTAyMkMwMDAwMjBEMDEzMDAwMDAwMDMwMDIwRDAxMzgwMDAwMDAzMDI2Ci06MTAyMkQwMDAwMjBEMDE0MDAwMDAwMDNCMDIwRDAxNDgwMDAwMDAzMEVCCi06MTAyMkUwMDAwMjBEMDExNDAwMDAwMDQ5MDIwRDAxMUMwMDAwMDA0QTBCCi06MTAyMkYwMDAwMjBEMDEyNDAwMDAwMDQwMDIwRDAxMkMwMDAwMDA0MEVFCi06MTAyMzAwMDAwMjBEMDEzNDAwMDAwMDQwMDIwRDAxM0MwMDAwMDA0QkIyCi06MTAyMzEwMDAwMjBEMDE0NDAwMDAwMDQwMDIwRDAxMTgwMDAwMDA2OTk4Ci06MTAyMzIwMDAwMjBEMDEyMDAwMDAwMDZBMDIwRDAxMjgwMDAwMDA2MDdCCi06MTAyMzMwMDAwMjBEMDEzMDAwMDAwMDYwMDIwRDAxMzgwMDAwMDA2MDU1Ci06MTAyMzQwMDAwMjBEMDE0MDAwMDAwMDZCMDIwRDAxNDgwMDAwMDA2MDFBCi06MTAyMzUwMDAwMjBEMDExNDAwMDAwMDU5MDIwRDAxMUMwMDAwMDA1QTdBCi06MTAyMzYwMDAwMjBEMDEyNDAwMDAwMDUwMDIwRDAxMkMwMDAwMDA1MDVECi06MTAyMzcwMDAwMjBEMDEzNDAwMDAwMDUwMDIwRDAxM0MwMDAwMDA1QjIyCi06MTAyMzgwMDAwMjBEMDE0NDAwMDAwMDUwMDIwRDAxMTgwMDAwMDA3OTA4Ci06MTAyMzkwMDAwMjBEMDEyMDAwMDAwMDdBMDIwRDAxMjgwMDAwMDA3MEVCCi06MTAyM0EwMDAwMjBEMDEzMDAwMDAwMDcwMDIwRDAxMzgwMDAwMDA3MEM1Ci06MTAyM0IwMDAwMjBEMDE0MDAwMDAwMDdCMDIwRDAxNDgwMDAwMDA3MDhBCi06MTAyM0MwMDAwNjBFMjAwMDAwMDAwODAwMDIwRTAwNEMwMDAwMDAzMjQzCi06MTAyM0QwMDAwMjBFMDA5NDAyMTUwMDIwMDIwRTAwOTgwMjE1MDAyMDQzCi06MTAyM0UwMDAwMjBFMDA5QzAwMDAwMDMwMDIwRTAwQTAwODEwMDAwMDQ5Ci06MTAyM0YwMDAwMjBFMDBBNDAwMDAwMDMzMDIwRTAwQTgwMDAwMDAzMDBFCi06MTAyNDAwMDAwMjBFMDBBQzAwMDAwMDMxMDIwRTAwQjAwMDAwMDAwMjFECi06MTAyNDEwMDAwMjBFMDBCNDAwMDAwMDA0MDIwRTAwQjgwMDAwMDAwMDJDCi06MTAyNDIwMDAwMjBFMDBCQzAwMDAwMDAyMDIwRTAwQzAwMDAwMDAwMjBDCi06MTAyNDMwMDAwMjBFMDBDNDAwMDAwMDAwMDIwRTAwQzgwMDAwMDAwMkVFCi06MTAyNDQwMDAwMjBFMDBDQzAwMDAwMDA3MDIwRTAwRDAwMDAwMDAwMkM3Ci06MTAyNDUwMDAwMjBFMDBENDAwMDAwMDAyMDIwRTAwRDgwMDAwMDAwMUFECi06MTAyNDYwMDAwMjBFMDE0NDAwMDAwMDAxMDIwRTAxNEMwMDAwMDAwMUI4Ci06MTAyNDcwMDAwMjBFMDE1MDAwMDAwMDAyMDIwRTAyMDQwMDAwMDAwMUUyCi06MTAyNDgwMDAwMjBFMDIwQzAwMDAwMDQwMDIwRTAyMTAwMDAwMDA0MDhDCi06MTAyNDkwMDAwMjBFMDIxQzAwMDAwMDA0MDIwRTAyMjAwMDAwMDAyMEI4Ci06MTAyNEEwMDAwMjBFMDIyNDAwMDAwMDBFMDIwRTAyMjgwMDAwMDAxQjkzCi06MTAyNEIwMDAwNjBFMDMwMDAwMDAwMDEyMDQwRTAyODAwMDFCMDM5N0FBCi06MTAyNEMwMDAwNjBFMDJFQzAwMDAwMDA1MDIwRTAwNTQwMDAwMDAwQzk1Ci06MTAyNEQwMDAwMjBFMDA1ODAwMDAwMDBDMDIwRTAwNUMwMDAwMDAwMDFDCi06MTAyNEUwMDAwMjBFMDA2MDAwMDAwMDEwMDIwRTAwNjQwMDAwMDAxMEU4Ci06MTAyNEYwMDAwNjBFMDA2ODAwMDAwMDAzMDIwRTAwREMwMDAwMDAwMzZFCi06MTAyNTAwMDAwMjBFMDAwNDAwMDAwMDAxMDIwRTAwMDgwMDAwMDAwMTlECi06MTAyNTEwMDAwMjBFMDAwQzAwMDAwMDAxMDIwRTAwMTAwMDAwMDAwMTdECi06MTAyNTIwMDAwMjBFMDAxNDAwMDAwMDAxMDIwRTAwMTgwMDAwMDAwMTVECi06MTAyNTMwMDAwMjBFMDAxQzAwMDAwMDAxMDIwRTAwMjAwMDAwMDAwMTNECi06MTAyNTQwMDAwMjBFMDAyNDAwMDAwMDAxMDIwRTAwMjgwMDAwMDAwMTFECi06MTAyNTUwMDAwMjBFMDAyQzAwMDAwMDAxMDIwRTAwMzAwMDAwMDAwMUZECi06MTAyNTYwMDAwMjBFMDAzNDAwMDAwMDAxMDIwRTAwMzgwMDAwMDAwMURECi06MTAyNTcwMDAwMjBFMDAzQzAwMDAwMDAxMDIwRTAwNDAwMDAwMDAwMUJECi06MTAyNTgwMDAwMjBFMDA0NDAwMDAwMDAxMDIwRTAxMTAwMDAwMDAwRkM2Ci06MTAyNTkwMDAwMjBFMDExODAwMDAwMDAwMDIwRTAxMjAwMDAwMDAwMEUxCi06MTAyNUEwMDAwMjBFMDEyODAwMDAwMDAwMDIwRTAxMTQwMDAwMDAyRjlFCi06MTAyNUIwMDAwMjBFMDExQzAwMDAwMDIwMDIwRTAxMjQwMDAwMDAwMDk5Ci06MTAyNUMwMDAwMjBFMDEyQzAwMDAwMDAwMDIwRTAxMTAwMDAwMDAxRjhFCi06MTAyNUQwMDAwMjBFMDExODAwMDAwMDEwMDIwRTAxMjAwMDAwMDAwMDkxCi06MTAyNUUwMDAwMjBFMDEyODAwMDAwMDAwMDIwRTAxMTQwMDAwMDAzRjRFCi06MTAyNUYwMDAwMjBFMDExQzAwMDAwMDMwMDIwRTAxMjQwMDAwMDAwMDQ5Ci06MTAyNjAwMDAwMjBFMDEyQzAwMDAwMDAwMDIwRTAxMTAwMDAwMDA0RjFECi06MTAyNjEwMDAwMjBFMDExODAwMDAwMDQwMDIwRTAxMjAwMDAwMDAwMDIwCi06MTAyNjIwMDAwMjBFMDEyODAwMDAwMDAwMDIwRTAxMTQwMDAwMDA2RkRECi06MTAyNjMwMDAwMjBFMDExQzAwMDAwMDYwMDIwRTAxMjQwMDAwMDAwMEQ4Ci06MTAyNjQwMDAwMjBFMDEyQzAwMDAwMDAwMDIwRTAxMTAwMDAwMDA1RkNECi06MTAyNjUwMDAwMjBFMDExODAwMDAwMDUwMDIwRTAxMjAwMDAwMDAwMEQwCi06MTAyNjYwMDAwMjBFMDEyODAwMDAwMDAwMDIwRTAxMTQwMDAwMDA3RjhECi06MTAyNjcwMDAwMjBFMDExQzAwMDAwMDcwMDIwRTAxMjQwMDAwMDAwMDg4Ci06MTAyNjgwMDAwMjBFMDEyQzAwMDAwMDAwMDczMDA0MDAwMEM5MDAwMDA5Ci06MTAyNjkwMDAwODMwMDdEODAwMDUwM0IyMDczNDAwMDAzMzMyMDAwMEM5Ci06MTAyNkEwMDAwNzM0ODAwMDMwQTcwQ0NEMDczNTAwMDAzNTM1MThGNzBBCi06MTAyNkIwMDAwNzM1ODAwMDJBNjIyNjQ1MDczNjAwMDAxOEQzMzBERTMxCi06MTAyNkMwMDAwODM2NDY2MDM3MzQwM0I0MDEzMDAwMDAwMDAwMDAwMEQzCi06MTAyNkQwMDAwMTMwMDAwNDAwMDAwMDAwMDEzMDAwMDgwMDAwMDAwMDhDCi06MTAyNkUwMDAwMTMwMDAwQzAwMDAwMDAwMDEzMDAwMTAwMDAwMDAwMDZDCi06MTAyNkYwMDAwMTMwMDAxNDAwMDAwMDAwMDIzMDAwMjAwMDAwMDAwMTQyCi06MTAyNzAwMDAwMjMwMDAyNDAwMDAwMDAyMDIzMDAwMjgwMDAwMDAwMzE0Ci06MTAyNzEwMDAwMjMwMDAyQzAwMDAwMDAwMDIzMDAwMzAwMDAwMDAwNEY1Ci06MTAyNzIwMDAwMjMwMDAzNDAwMDAwMDAxMDIzMDAwMzgwMDAwMDAwMEQ4Ci06MTAyNzMwMDAwMjMwMDAzQzAwMDAwMDAxMDIzMDAwNDAwMDAwMDAwNEI0Ci06MTAyNzQwMDAwMjMwMDA0NDAwMDAwMDAwMDIzMDAwNDgwMDAwMDAwMTk4Ci06MTAyNzUwMDAwMjMwMDA0QzAwMDAwMDAzMDIzMDAwNTAwMDAwMDAwMDc2Ci06MTAyNzYwMDAwMjMwMDA1NDAwMDAwMDAxMDIzMDAwNTgwMDAwMDAwNDU0Ci06MTAyNzcwMDAwMjMwMDA1QzAwMDAwMDAwMDIzMDAwNjAwMDAwMDAwMTM4Ci06MTAyNzgwMDAwMjMwMDA2NDAwMDAwMDAzMDIzMDAwNjgwMDAwMDAwMDE2Ci06MTAyNzkwMDAwMjMwMDA2QzAwMDAwMDAxMDIzMDAwNzAwMDAwMDAwNEY0Ci06MTAyN0EwMDAwMjMwMDA3NDAwMDAwMDAwMDIzMDAwNzgwMDAwMDAwNEQ1Ci06MTAyN0IwMDAwMjMwMDA3QzAwMDAwMDAzMDYzMDAwODAwMDAwMDAwMkIwCi06MTAyN0MwMDAwMjMwMDBBNDAwMDAzRkZGMDIzMDAwQTgwMDAwMDNGRjE5Ci06MTAyN0QwMDAwMjMwMDIyNDAwMDAwMDAwMDIzMDAyMzQwMDAwMDAwMDM5Ci06MTAyN0UwMDAwMjMwMDI0QzAwMDAwMDAwMDIzMDAyRTQwMDAwRkZGRjUzCi06MTAyN0YwMDAwNjMwMjAwMDAwMDAwODAwMDIzMzhCQzAwMDAwMDAwMUZBCi06MTAyODAwMDAwMjMzODAwMDAwMDAwMDFBMDIzMzgwNDAwMDAwMDA0RUI2Ci06MTAyODEwMDAwMjMzODA4MDAwMDAwMDEwMDIzMzgwQzAwMDAwMDAyMERFCi06MTAyODIwMDAwQzMzODMwMDAwMDdBMTIwMEEzMzgzMDAwMDAwMDEzODI1Ci06MTAyODMwMDAwQjMzODMwMDAwMDAxMzg4MEEzMzgzNDAwMDAwMDAwMDNDCi06MTAyODQwMDAwQzMzODM0MDAwMDAwMUY0MEIzMzgzNDAwMDAwMDAwNThCCi06MTAyODUwMDAwMjMzODM4MDAwMDdBMTIwMDIzMzgzQzAwMDAwMDFGNDBCCi06MTAyODYwMDAwMjMzMTQ4MDAwMDAwMDAxMEEzMzE0ODAwMDAwMDAwMENECi06MTAyODcwMDAwNjMyODAwMDAwMDAwMTAyMDYzMjIwMDgwMDAwMDBDODc1Ci06MTAyODgwMDAwNjMyMjAwMDAwMDAwMDAyMDQzMjhFQTAwMDEwMDNCNkMxCi06MTAyODkwMDAwNjMyM0VCMDAwMDAwMDA2MDYzMjNFRDgwMDAwMDAwMkJDCi06MTAyOEEwMDAwNjMyM0U4MDAwMDAwMDBBMDQzMjNFQTgwMDAyMDNDNjQxCi06MTAyOEIwMDAwNjMyM0UwMDAwMDAwMDIwMDYzMjUwMDAwMDAwMDQwMEY2Ci06MTAyOEMwMDAwNjMyNDAwMDAwMDAwMDA0MDQzMjc0QzAwMDAyMDNDODU1Ci06MTAyOEQwMDAwNjMyNDExMDAwMDAwMDAyMDYzMkQwMDAwMDAwMDAzMDM1Ci06MTAyOEUwMDAwNjMyREQ0MDAwMDAwMDQ0MDYzMkRBMDAwMDAwMDBEMDZECi06MTAyOEYwMDAwNjMyREVBMDAwMDAwMDAyMDYzMkUwMDAwMDAwMDgwMDAwCi06MTAyOTAwMDAwNjMyODQ1MDAwMDAwMTE4MDYzMjEwMDAwMDAwMDE4OEQxCi06MTAyOTEwMDAwNjMyNTAwMDAwMDAwMDIwMDYzMjUxMDAwMDAwMDAyMDY2Ci06MTAyOTIwMDAwNjMyNTIwMDAwMDAwMDIwMDYzMjUzMDAwMDAwMDAyMDUyCi06MTAyOTMwMDAwNjMyNTQwMDAwMDAwMDIwMDYzMjU1MDAwMDAwMDAyMDNFCi06MTAyOTQwMDAwNjMyNTYwMDAwMDAwMDIwMDYzMjU3MDAwMDAwMDAyMDJBCi06MTAyOTUwMDAwNjMyNTgwMDAwMDAwMDIwMDYzMjU5MDAwMDAwMDAyMDE2Ci06MTAyOTYwMDAwNjMyNUEwMDAwMDAwMDIwMDYzMjVCMDAwMDAwMDAyMDAyCi06MTAyOTcwMDAwNjMyNUMwMDAwMDAwMDIwMDYzMjVEMDAwMDAwMDAyMEVFCi06MTAyOTgwMDAwNjMyNUUwMDAwMDAwMDIwMDYzMjVGMDAwMDAwMDAyMERBCi06MTAyOTkwMDAwNjMyOERGMDAwMDAwMDAyMDQzMjhFMDAwMDAyMDNDQUVECi06MTAyOUEwMDAwNjMyOEUwODAwMDAwMDAyMDYzMkRFOTAwMDAwMDAwMkFGCi06MTAyOUIwMDAwNjMyMUM0MDAwMDAwMDM4MDYzMjg4QjAwMDAwMDExOEMyCi06MTAyOUMwMDAwNjMyMTYyMDAwMDAwMTg4MDYzMjUwODAwMDAwMDAyMEU4Ci06MTAyOUQwMDAwNjMyNTE4MDAwMDAwMDIwMDYzMjUyODAwMDAwMDAyMEE0Ci06MTAyOUUwMDAwNjMyNTM4MDAwMDAwMDIwMDYzMjU0ODAwMDAwMDAyMDkwCi06MTAyOUYwMDAwNjMyNTU4MDAwMDAwMDIwMDYzMjU2ODAwMDAwMDAyMDdDCi06MTAyQTAwMDAwNjMyNTc4MDAwMDAwMDIwMDYzMjU4ODAwMDAwMDAyMDY3Ci06MTAyQTEwMDAwNjMyNTk4MDAwMDAwMDIwMDYzMjVBODAwMDAwMDAyMDUzCi06MTAyQTIwMDAwNjMyNUI4MDAwMDAwMDIwMDYzMjVDODAwMDAwMDAyMDNGCi06MTAyQTMwMDAwNjMyNUQ4MDAwMDAwMDIwMDYzMjVFODAwMDAwMDAyMDJCCi06MTAyQTQwMDAwNjMyNUY4MDAwMDAwMDIwMDYzMjhERjgwMDAwMDAwMjkwCi06MTAyQTUwMDAwNDMyOEUxMDAwMDIwM0NDMDYzMjhFMTgwMDAwMDAwMkYxCi06MTAyQTYwMDAwNjMyREU5ODAwMDAwMDAyMDYzMjFEMjAwMDAwMDAzODA5Ci06MTAyQTcwMDAwMjMyOEQ1MDAwMDAwMDAwMDYzMjQwMTAwMDAwMDAwMkJCCi06MTAyQTgwMDAwMjMyOEQ1NDAwMDAwMDAwMDYzMjQwMjAwMDAwMDAwMjk3Ci06MTAyQTkwMDAwMjMyOEQ1ODAwMDAwMDAwMDYzMjQwMzAwMDAwMDAwMjczCi06MTAyQUEwMDAwMjMyOEQ1QzAwMDAwMDAwMDYzMjQwNDAwMDAwMDAwMjRGCi06MTAyQUIwMDAwMjMyOEQ2MDAwMDAwMDAwMDYzMjQwNTAwMDAwMDAwMjJCCi06MTAyQUMwMDAwMjMyOEQ2NDAwMDAwMDAwMDYzMjQwNjAwMDAwMDAwMjA3Ci06MTAyQUQwMDAwMjMyOEQ2ODAwMDAwMDAwMDYzMjQwNzAwMDAwMDAwMkUzCi06MTAyQUUwMDAwMjMyOEQ2QzAwMDAwMDAwMDYzMjQwODAwMDAwMDAwMkJGCi06MTAyQUYwMDAwNzIwMDQwMDAwOTEwMDAwMDgyMDA3ODAwMDEwMDNDRThBCi06MTAyQjAwMDAwNzI0MDAwMDJBRjMwMDAwMDcyNDgwMDAxNTA5MEFCREVECi06MTAyQjEwMDAwODI0QTlGMDY5MjgwM0QwMDEyMDAwMDAwMDAwMDAwMDZCCi06MTAyQjIwMDAwMTIwMDAwNDAwMDAwMDAwMDEyMDAwMDgwMDAwMDAwMDU3Ci06MTAyQjMwMDAwMTIwMDAwQzAwMDAwMDAwMDEyMDAwMTAwMDAwMDAwMDM3Ci06MTAyQjQwMDAwMTIwMDAxNDAwMDAwMDAwMDIyMDAwMjAwMDAwMDAwMTBECi06MTAyQjUwMDAwMjIwMDAyNDAwMDAwMDAyMDIyMDAwMjgwMDAwMDAwM0UwCi06MTAyQjYwMDAwMjIwMDAyQzAwMDAwMDAwMDIyMDAwMzAwMDAwMDAwNEMxCi06MTAyQjcwMDAwMjIwMDAzNDAwMDAwMDAxMDIyMDAwMzgwMDAwMDAwMEE0Ci06MTAyQjgwMDAwMjIwMDAzQzAwMDAwMDAxMDIyMDAwNDAwMDAwMDAwNDgwCi06MTAyQjkwMDAwMjIwMDA0NDAwMDAwMDAwMDIyMDAwNDgwMDAwMDAwMTY0Ci06MTAyQkEwMDAwMjIwMDA0QzAwMDAwMDAzMDIyMDAwNTAwMDAwMDAwMDQyCi06MTAyQkIwMDAwMjIwMDA1NDAwMDAwMDAxMDIyMDAwNTgwMDAwMDAwNDIwCi06MTAyQkMwMDAwMjIwMDA1QzAwMDAwMDAwMDIyMDAwNjAwMDAwMDAwMTA0Ci06MTAyQkQwMDAwMjIwMDA2NDAwMDAwMDAzMDIyMDAwNjgwMDAwMDAwMEUyCi06MTAyQkUwMDAwMjIwMDA2QzAwMDAwMDAxMDIyMDAwNzAwMDAwMDAwNEMwCi06MTAyQkYwMDAwMjIwMDA3NDAwMDAwMDAwMDIyMDAwNzgwMDAwMDAwNEExCi06MTAyQzAwMDAwMjIwMDA3QzAwMDAwMDAzMDYyMDAwODAwMDAwMDAwMjdCCi06MTAyQzEwMDAwMjIwMDBBNDAwMDAzRkZGMDIyMDAwQTgwMDAwMDNGRkU0Ci06MTAyQzIwMDAwMjIwMDIyNDAwMDAwMDAwMDIyMDAyMzQwMDAwMDAwMDA0Ci06MTAyQzMwMDAwMjIwMDI0QzAwMDAwMDAwMDIyMDAyRTQwMDAwRkZGRjFFCi06MTAyQzQwMDAwNjIwMjAwMDAwMDAwODAwMDIyMzhCQzAwMDAwMDAwMUM1Ci06MTAyQzUwMDAwMjIzODAwMDAwMDAwMDEwMDIyMzgwNDAwMDAwMDAxMkM4Ci06MTAyQzYwMDAwMjIzODA4MDAwMDAwMDMwMDIyMzgwQzAwMDAwMDAwRTlDCi06MTAyQzcwMDAwQzIzODMwMDAwMDdBMTIwMEEyMzgzMDAwMDAwMDEzOEYxCi06MTAyQzgwMDAwQjIzODMwMDAwMDAxMzg4MEEyMzgzNDAwMDAwMDAwMDA4Ci06MTAyQzkwMDAwQzIzODM0MDAwMDAwMUY0MEIyMzgzNDAwMDAwMDAwNTU3Ci06MTAyQ0EwMDAwMjIzODM4MDAwMDdBMTIwMDIyMzgzQzAwMDAwMDFGNEQ3Ci06MTAyQ0IwMDAwMjIzMTQ4MDAwMDAwMDAxMEEyMzE0ODAwMDAwMDAwMDk5Ci06MTAyQ0MwMDAwNjIyMTAwMDAwMDAwMDQyMDYyMjIwMDgwMDAwMDBDODcyCi06MTAyQ0QwMDAwNjIyMjAwMDAwMDAwMDAyMDYyMkIwMDAwMDAwMDBDNjBDCi06MTAyQ0UwMDAwNDIyQjMxODAwMDUwM0QyMDYyMkIzMkMwMDAwMDAwQjA3Ci06MTAyQ0YwMDAwNDIyQjM1ODAwMDUwM0Q3MDYyMkIzNkMwMDAwMDAwQjcyCi06MTAyRDAwMDAwNDIyQjM5ODAwMDUwM0RDMDYyMkIzQUMwMDAwMDAwQkRDCi06MTAyRDEwMDAwNDIyQjNEODAwMDUwM0UxMDYyMkIzRUMwMDAwMDAwQjQ3Ci06MTAyRDIwMDAwNDIyQjQxODAwMDUwM0U2MDYyMkI0MkMwMDAwMDAwQkIwCi06MTAyRDMwMDAwNDIyQjQ1ODAwMDUwM0VCMDYyMkI0NkMwMDAwMDAwQjFCCi06MTAyRDQwMDAwNDIyQjQ5ODAwMDUwM0YwMDYyMkI0QUMwMDAwMDAwQjg2Ci06MTAyRDUwMDAwNDIyQjREODAwMDUwM0Y1MDYyMkI0RUMwMDAwMDAwQkYxCi06MTAyRDYwMDAwNDIyQjUxODAwMDUwM0ZBMDYyMkI1MkMwMDAwMDAwQjVBCi06MTAyRDcwMDAwNDIyQjU1ODAwMDUwM0ZGMDYyMkI1NkMwMDAwMDAwQkM1Ci06MTAyRDgwMDAwNDIyQjU5ODAwMDUwNDA0MDYyMkI1QUMwMDAwMDAwQjJGCi06MTAyRDkwMDAwNDIyQjVEODAwMDUwNDA5MDYyMkI1RUMwMDAwMDAwQjlBCi06MTAyREEwMDAwNDIyQjYxODAwMDUwNDBFMDYyMkI2MkMwMDAwMDAwQjAzCi06MTAyREIwMDAwNDIyQjY1ODAwMDUwNDEzMDYyMkI2NkMwMDAwMDAwQjZFCi06MTAyREMwMDAwNDIyQjY5ODAwMDUwNDE4MDYyMkI2QUMwMDAwMDAwQkQ5Ci06MTAyREQwMDAwNDIyQjZEODAwMDUwNDFEMDYyMkI2RUMwMDAwMDAwQjQ0Ci06MTAyREUwMDAwNDIyQjcxODAwMDUwNDIyMDYyMkI3MkMwMDAwMDAwQkFECi06MTAyREYwMDAwNDIyQjc1ODAwMDUwNDI3MDYyMkI3NkMwMDAwMDAwQjE4Ci06MTAyRTAwMDAwNDIyQjc5ODAwMDUwNDJDMDYyMkI3QUMwMDAwMDAwQjgyCi06MTAyRTEwMDAwNDIyQjdEODAwMDUwNDMxMDYyMkI3RUMwMDAwMDAwQkVECi06MTAyRTIwMDAwNDIyQjgxODAwMDUwNDM2MDYyMkI4MkMwMDAwMDAwQjU2Ci06MTAyRTMwMDAwNDIyQjg1ODAwMDUwNDNCMDYyMkI4NkMwMDAwMDAwQkMxCi06MTAyRTQwMDAwNDIyQjg5ODAwMDUwNDQwMDYyMkI4QUMwMDAwMDAwQjJDCi06MTAyRTUwMDAwNDIyQjhEODAwMDUwNDQ1MDYyMkI4RUMwMDAwMDAwQjk3Ci06MTAyRTYwMDAwNDIyQjkxODAwMDUwNDRBMDYyMkI5MkMwMDAwMDAwQjAwCi06MTAyRTcwMDAwNDIyQjk1ODAwMDUwNDRGMDYyMkI5NkMwMDAwMDAwQjZCCi06MTAyRTgwMDAwNDIyQjk5ODAwMDUwNDU0MDYyMkI5QUMwMDAwMDAwQkQ2Ci06MTAyRTkwMDAwNDIyQjlEODAwMDUwNDU5MDYyMkI5RUMwMDAwMDAwQjQxCi06MTAyRUEwMDAwNDIyQkExODAwMDUwNDVFMDYyMkJBMkMwMDAwMDAwQkFBCi06MTAyRUIwMDAwNDIyQkE1ODAwMDUwNDYzMDYyMkJBNkMwMDAwMDAwQjE1Ci06MTAyRUMwMDAwNDIyQkE5ODAwMDUwNDY4MDYyMkJBQUMwMDAwMDAwQjgwCi06MTAyRUQwMDAwNDIyQkFEODAwMDUwNDZEMDYyMkJBRUMwMDAwMDAwNUYxCi06MTAyRUUwMDAwNjIyQkIwMDAwMDAwMDUzMDQyMkJDNEMwMDAxMDQ3MjA3Ci06MTAyRUYwMDAwNjIyQkM1MDAwMDAwMDAzMDQyMkJDNUMwMDAxMDQ3M0U1Ci06MTAyRjAwMDAwNjIyQkM2MDAwMDAwMDAzMDQyMkJDNkMwMDAxMDQ3NEIzCi06MTAyRjEwMDAwNjIyQkM3MDAwMDAwMDAzMDQyMkJDN0MwMDAxMDQ3NTgyCi06MTAyRjIwMDAwNjIyQkM4MDAwMDAwMDAzMDQyMkJDOEMwMDAxMDQ3NjUxCi06MTAyRjMwMDAwNjIyQkM5MDAwMDAwMDAzMDQyMkJDOUMwMDAxMDQ3NzIwCi06MTAyRjQwMDAwNjIyQkNBMDAwMDAwMDAzMDQyMkJDQUMwMDAxMDQ3OEVGCi06MTAyRjUwMDAwNjIyQkNCMDAwMDAwMDAzMDQyMkJDQkMwMDAxMDQ3OUJFCi06MTAyRjYwMDAwNjIyODgwMDAwMDAwMTAwMDYyMjgwMDAwMDAwMDIwMDA2Ci06MTAyRjcwMDAwNDIyMTI3MDAwMTAwNDdBMDYyMjMwMDAwMDAwMDBDMDAzCi06MTAyRjgwMDAwNjIyNjcwMDAwMDAwMTAwMDYyMjkwMDAwMDAwMDQwMEY1Ci06MTAyRjkwMDAwNDIyNkIwODAwMjAwNDhBMDIyMjEyQzBGRkZGRkZGRkY4Ci06MTAyRkEwMDAwNjIyMTFFODAwMDAwMDAyMDYyMjEyQzgwMDAwMDAwOUYzCi06MTAyRkIwMDAwNjIyMTJFQzAwMDAwMDA5MDYyMjhDMDAwMDAwMDAwODI2Ci06MTAyRkMwMDAwMjIyMTE0ODAwMDAwMDAwMDYyMjEzMjAwMDAwMDAwNjIzCi06MTAyRkQwMDAwNjIyMzMwMDAwMDAwMDAyMDYyMjYwNDAwMDAwMDAzMDlDCi06MTAyRkUwMDAwNjIyOEMyMDAwMDAwMDA4MDIyMjExNEMwMDAwMDAwMDg0Ci06MTAyRkYwMDAwNjIyMTMzODAwMDAwMDA2MDYyMjMzMDgwMDAwMDAwMkYzCi06MTAzMDAwMDAwNjIyNjEwMDAwMDAwMDMwMDYyMjhDNDAwMDAwMDAwODBCCi06MTAzMDEwMDAwMjIyMTE1MDAwMDAwMDAwMDYyMjEzNTAwMDAwMDAwNjlBCi06MTAzMDIwMDAwNjIyMzMxMDAwMDAwMDAyMDYyMjYxQzAwMDAwMDAzMEJBCi06MTAzMDMwMDAwNjIyOEM2MDAwMDAwMDA4MDIyMjExNTQwMDAwMDAwMEVCCi06MTAzMDQwMDAwNjIyMTM2ODAwMDAwMDA2MDYyMjMzMTgwMDAwMDAwMjYyCi06MTAzMDUwMDAwNjIyNjI4MDAwMDAwMDMwMDYyMjhDODAwMDAwMDAwOEZBCi06MTAzMDYwMDAwMjIyMTE1ODAwMDAwMDAwMDYyMjEzODAwMDAwMDAwNjEyCi06MTAzMDcwMDAwNjIyMzMyMDAwMDAwMDAyMDYyMjYzNDAwMDAwMDAzMEQ4Ci06MTAzMDgwMDAwNjIyOENBMDAwMDAwMDA4MDIyMjExNUMwMDAwMDAwMDUzCi06MTAzMDkwMDAwNjIyMTM5ODAwMDAwMDA2MDYyMjMzMjgwMDAwMDAwMkQyCi06MTAzMEEwMDAwNjIyNjQwMDAwMDAwMDMwMDYyMjhDQzAwMDAwMDAwOEU4Ci06MTAzMEIwMDAwMjIyMTE2MDAwMDAwMDAwMDYyMjEzQjAwMDAwMDAwNjhBCi06MTAzMEMwMDAwNjIyMzMzMDAwMDAwMDAyMDYyMjY0QzAwMDAwMDAzMEY3Ci06MTAzMEQwMDAwNjIyOENFMDAwMDAwMDA4MDIyMjExNjQwMDAwMDAwMEJCCi06MTAzMEUwMDAwNjIyMTNDODAwMDAwMDA2MDYyMjMzMzgwMDAwMDAwMjQyCi06MTAzMEYwMDAwNjIyNjU4MDAwMDAwMDMwMDIxNjEwMDAwMDAwMDAyODQzCi06MTAzMTAwMDAwMjE3MDAwODAwMDAwMDAyMDIxNzAwMkMwMDAwMDAwMzU0Ci06MTAzMTEwMDAwMjE3MDAzQzAwMDAwMDA0MDIxNzAwNDgwMDAwMDAwMkYzCi06MTAzMTIwMDAwMjE3MDA0QzAwMDAwMDkwMDIxNzAwNTAwMDAwMDA5MEIxCi06MTAzMTMwMDAwMjE3MDA1NDAwODAwMDkwMDIxNzAwNTgwODEwMDAwMDg5Ci06MTAzMTQwMDAwMjE3MDA2MDAwMDAwMDhBMDIxNzAwNjQwMDAwMDA4MDdGCi06MTAzMTUwMDAwMjE3MDA2ODAwMDAwMDgxMDIxNzAwNkMwMDAwMDA4MDY4Ci06MTAzMTYwMDAwMjE3MDA3MDAwMDAwMDA2MDIxNzAwNzgwMDAwMDdEMDY4Ci06MTAzMTcwMDAwMjE3MDA3QzAwMDAwNzZDMDIxNzAwMzgwMDdDMTAwNDY2Ci06MTAzMTgwMDAwMjE3MDAwNDAwMDAwMDBGMDYxNjQwMjQwMDAwMDAwMjkxCi06MTAzMTkwMDAwMjE2NDA3MDAwMDAwMDFDMDIxNjQyMDgwMDAwMDAwMUU4Ci06MTAzMUEwMDAwMjE2NDIxMDAwMDAwMDAxMDIxNjQyMjAwMDAwMDAwMTM5Ci06MTAzMUIwMDAwMjE2NDIyODAwMDAwMDAxMDIxNjQyMzAwMDAwMDAwMTAxCi06MTAzMUMwMDAwMjE2NDIzODAwMDAwMDAxMDIxNjQyNjAwMDAwMDAwMkIwCi06MTAzMUQwMDAwQzE2NDAxQzAwMDNEMDkwMEExNjQwMUMwMDAwMDA5Q0Y2Ci06MTAzMUUwMDAwQjE2NDAxQzAwMDAwOUM0MDIxNjQwMzAwMDAwMDAwODA1Ci06MTAzMUYwMDAwMjE2NDAzNDAwMDAwMDBDMDIxNjQwMzgwMDAwMDAxMDk3Ci06MTAzMjAwMDAwMjE2NDA0NDAwMDAwMDIwMDIxNjQwMDAwMDAwMDAwMUE5Ci06MTAzMjEwMDAwMjE2NDBEODAwMDAwMDAxMDIxNjQwMDgwMDAwMDAwMTFDCi06MTAzMjIwMDAwMjE2NDAwQzAwMDAwMDAxMDIxNjQwMTAwMDAwMDAwMUQwCi06MTAzMjMwMDAwMjE2NDI0MDAwMDAwMDAwMDIxNjQyNDgwMDAwMDAwMDUyCi06MTAzMjQwMDAwNjE2NDI3MDAwMDAwMDAyMDIxNjQyNTAwMDAwMDAwMDA0Ci06MTAzMjUwMDAwMjE2NDI1ODAwMDAwMDAwMDYxNjQyODAwMDAwMDAwMkRDCi06MTAzMjYwMDAwMjE2NjAwODAwMDAxMjI0MDIxNjYwMEMwMDAwMTIxMDAyCi06MTAzMjcwMDAwMjE2NjAxMDAwMDAxMjE0MDIxNjYwMUMwMDAwRkZGRjBFCi06MTAzMjgwMDAwMjE2NjAyMDAwMDBGRkZGMDIxNjYwMjQwMDAwRkZGRjBFCi06MTAzMjkwMDAwMjE2NjAyODAwMDBGRkZGMDIxNjYwMzgwMDAwMDAyMEMwCi06MTAzMkEwMDAwMjE2NjAzQzAwMDAwMDIwMDYxNjYwNDAwMDAwMDAwMjhDCi06MTAzMkIwMDAwMjE2NjA0ODAwMDAwMDIzMDIxNjYwNEMwMDAwMDAyNDQzCi06MTAzMkMwMDAwMjE2NjA1MDAwMDAwMDI1MDIxNjYwNTQwMDAwMDAyNjFGCi06MTAzMkQwMDAwMjE2NjA1ODAwMDAwMDI3MDIxNjYwNUMwMDAwMDAyOUZBCi06MTAzMkUwMDAwMjE2NjA2MDAwMDAwMDJBMDIxNjYwNjQwMDAwMDAyQkQ1Ci06MTAzMkYwMDAwMjE2NjA2ODAwMDAwMDJDMDIxNjYwNkMwMDAwMDAyREIxCi06MTAzMzAwMDAwMjE2NjA3MDAwMDAwMEVDMDIxNjYwNzQwMDAwMDAxMUVDCi06MTAzMzEwMDAwMjE2NjA3ODAwMDAwMDEyMDYxNjYwN0MwMDAwMDAwRkE0Ci06MTAzMzIwMDAwMjE2NjBCODAwMDAwMDAxMDIxNjYwQkMwMDAwMDAwMTM3Ci06MTAzMzMwMDAwNjE2NjBDMDAwMDAwMDBDMDIxNjYwRjAwMDAwMDAwMURDCi06MTAzMzQwMDAwNjE2NjBGNDAwMDAwMDMxMDIxNjYxQjgwMDAwMDAwMUFBCi06MTAzMzUwMDAwNjE2NjFCQzAwMDAwMDBEMDIxNjYxRjAwMDAwMDAwMUJECi06MTAzMzYwMDAwNjE2NjFGNDAwMDAwMDExMDIxNjYyMzgwN0ZGRkZGRjI1Ci06MTAzMzcwMDAwMjE2NjIzQzAwMDAwMDNGMDIxNjYyNDAwN0ZGRkZGRjlBCi06MTAzMzgwMDAwMjE2NjI0NDAwMDAwMDBGMDExNjYyNDgwMDAwMDAwMEFGCi06MTAzMzkwMDAwMTE2NjI0QzAwMDAwMDAwMDExNjYyNTAwMDAwMDAwMDlGCi06MTAzM0EwMDAwMTE2NjI1NDAwMDAwMDAwMDExNjYyNTgwMDAwMDAwMDdGCi06MTAzM0IwMDAwMTE2NjI1QzAwMDAwMDAwMDExNjYyNjAwMDAwMDAwMDVGCi06MTAzM0MwMDAwMTE2NjI2NDAwMDAwMDAwMDExNjYyNjgwMDAwMDAwMDNGCi06MTAzM0QwMDAwMTE2NjI2QzAwMDAwMDAwMDExNjYyNzAwMDAwMDAwMDFGCi06MTAzM0UwMDAwMTE2NjI3NDAwMDAwMDAwMDExNjYyNzgwMDAwMDAwMEZGCi06MTAzM0YwMDAwMTE2NjI3QzAwMDAwMDAwMEMxNjYwMDAwMDAwMDNFODZCCi06MTAzNDAwMDAwQTE2NjAwMDAwMDAwMDAxMEIxNjYwMDAwMDAwMDAwQUIwCi06MTAzNDEwMDAwMjE2ODA0MDAwMDAwMDA2MDIxNjgwNDQwMDAwMDAwNUVECi06MTAzNDIwMDAwMjE2ODA0ODAwMDAwMDBBMDIxNjgwNEMwMDAwMDAwNUM5Ci06MTAzNDMwMDAwMjE2ODA1NDAwMDAwMDAyMDIxNjgwQ0MwMDAwMDAwNDM2Ci06MTAzNDQwMDAwMjE2ODBEMDAwMDAwMDA0MDIxNjgwRDQwMDAwMDAwNEEwCi06MTAzNDUwMDAwMjE2ODBEODAwMDAwMDA0MDIxNjgwREMwMDAwMDAwNDgwCi06MTAzNDYwMDAwMjE2ODBFMDAwMDAwMDA0MDIxNjgwRTQwMDAwMDAwNDYwCi06MTAzNDcwMDAwMjE2ODBFODAwMDAwMDA0MDIxNjg4MDQwMDAwMDAwNDIwCi06MTAzNDgwMDAwMjE2ODAzMDAwMDAwMDdDMDIxNjgwMzQwMDAwMDAzREVGCi06MTAzNDkwMDAwMjE2ODAzODAwMDAwMDNGMDIxNjgwM0MwMDAwMDA5Q0FECi06MTAzNEEwMDAwMjE2ODBGMDAwMDAwMDA3MDYxNjgwRjQwMDAwMDAwNUY4Ci06MTAzNEIwMDAwMjE2ODgwQzAxMDEwMTAxMDIxNjgxMDgwMDAwMDAwMEJCCi06MTAzNEMwMDAwMjE2ODEwQzAwMDAwMDA0MDIxNjgxMTAwMDAwMDAwNEE2Ci06MTAzNEQwMDAwMjE2ODExNDAwMDAwMDAyMDIxNjg4MTAwODAxMjAwNDYwCi06MTAzNEUwMDAwMjE2ODExODAwMDAwMDA1MDIxNjgxMUMwMDAwMDAwNTZDCi06MTAzNEYwMDAwMjE2ODEyMDAwMDAwMDA1MDIxNjgxMjQwMDAwMDAwNTRDCi06MTAzNTAwMDAwMjE2ODgyQzIwMDgxMDAxMDIxNjgxMjgwMDAwMDAwOEVECi06MTAzNTEwMDAwMjE2ODEyQzAwMDAwMDA2MDIxNjgxMzAwMDAwMDAwNzEwCi06MTAzNTIwMDAwMjE2ODEzNDAwMDAwMDAwMDIxNjg4MzAwMTAxMDEyMERCCi06MTAzNTMwMDAwNjE2ODEzODAwMDAwMDA0MDIxNjg4MzQwMTAxMDEwMURBCi06MTAzNTQwMDAwMjE2ODE0ODAwMDAwMDAwMDIxNjgxNEMwMDAwMDAwNEIxCi06MTAzNTUwMDAwMjE2ODE1MDAwMDAwMDA0MDIxNjgxNTQwMDAwMDAwMjhGCi06MTAzNTYwMDAwMjE2ODgzODA4MDEyMDA0MDIxNjgxNTgwMDAwMDAwNTYwCi06MTAzNTcwMDAwMjE2ODE1QzAwMDAwMDA1MDIxNjgxNjAwMDAwMDAwNTUzCi06MTAzNTgwMDAwMjE2ODE2NDAwMDAwMDA1MDIxNjg4M0MyMDA4MTAwMTI0Ci06MTAzNTkwMDAwMjE2ODE2ODAwMDAwMDA4MDIxNjgxNkMwMDAwMDAwNjE3Ci06MTAzNUEwMDAwMjE2ODE3MDAwMDAwMDA3MDIxNjgxNzQwMDAwMDAwMUZECi06MTAzNUIwMDAwMjE2ODg0MDAxMDEwMTIwMDIxNjgxNzgwMDAwMDAwMUY2Ci06MTAzNUMwMDAwMjE2ODE3QzAwMDAwMDAxMDIxNjgxODAwMDAwMDAwMUNCCi06MTAzNUQwMDAwMjE2ODE4NDAwMDAwMDAxMDIxNjg4NDQwMTAxMDEwMUU1Ci06MTAzNUUwMDAwMjE2ODE4ODAwMDAwMDAxMDIxNjgxOEMwMDAwMDAwNDkwCi06MTAzNUYwMDAwMjE2ODE5MDAwMDAwMDA0MDIxNjgxOTQwMDAwMDAwMjZGCi06MTAzNjAwMDAwMjE2ODg0ODA4MDEyMDA0MDIxNjgxOTgwMDAwMDAwNTZGCi06MTAzNjEwMDAwMjE2ODE5QzAwMDAwMDA1MDIxNjgxQTAwMDAwMDAwNTMyCi06MTAzNjIwMDAwMjE2ODFBNDAwMDAwMDA1MDIxNjg4MTQyMDA4MTAwMTZCCi06MTAzNjMwMDAwMjE2ODFBODAwMDAwMDA4MDIxNjgxQUMwMDAwMDAwNkY2Ci06MTAzNjQwMDAwMjE2ODFCMDAwMDAwMDA3MDIxNjgxQjQwMDAwMDAwMURDCi06MTAzNjUwMDAwMjE2ODgxODAxMDEwMTIwMDIxNjgxQjgwMDAwMDAwMTNECi06MTAzNjYwMDAwMjE2ODFCQzAwMDAwMDAxMDIxNjgxQzAwMDAwMDAwMUFBCi06MTAzNjcwMDAwMjE2ODFDNDAwMDAwMDAxMDIxNjg4MUMwMTAxMDEwMTJDCi06MTAzNjgwMDAwMjE2ODFDODAwMDAwMDAxMDIxNjgxQ0MwMDAwMDAwNDZGCi06MTAzNjkwMDAwMjE2ODFEMDAwMDAwMDA0MDIxNjgxRDQwMDAwMDAwMjRFCi06MTAzNkEwMDAwMjE2ODgyMDA4MDEyMDA0MDIxNjgxRDgwMDAwMDAwNUI3Ci06MTAzNkIwMDAwMjE2ODFEQzAwMDAwMDA1MDIxNjgxRTAwMDAwMDAwNTEyCi06MTAzNkMwMDAwMjE2ODFFNDAwMDAwMDA1MDIxNjg4MjQyMDA4MTAwMTdCCi06MTAzNkQwMDAwMjE2ODFFODAwMDAwMDA4MDIxNjgxRUMwMDAwMDAwNkQ2Ci06MTAzNkUwMDAwMjE2ODFGMDAwMDAwMDA3MDIxNkU0MEMwMDAwMDAwMDQyCi06MTAzNkYwMDAwMjE2ODgyODAxMDEwMTIwMDYxNkU0MTAwMDAwMDAwNENCCi06MTAzNzAwMDAwMjE2RTAwMDAxMDEwMTAxMDIxNkU0MjAwMDAwMDAwMEExCi06MTAzNzEwMDAwMjE2RTQyNDAwMDAwMDA0MDIxNkU0MjgwMDAwMDAwNDVECi06MTAzNzIwMDAwMjE2RTQyQzAwMDAwMDAyMDIxNkUwMDQwODAxMjAwNDQ2Ci06MTAzNzMwMDAwMjE2RTQzMDAwMDAwMDA1MDIxNkU0MzQwMDAwMDAwNTIzCi06MTAzNzQwMDAwMjE2RTQzODAwMDAwMDA1MDIxNkU0M0MwMDAwMDAwNTAzCi06MTAzNzUwMDAwMjE2RTAwODIwMDgxMDAxMDIxNkU0NDAwMDAwMDAwOEVDCi06MTAzNzYwMDAwMjE2RTQ0NDAwMDAwMDA2MDIxNkU0NDgwMDAwMDAwN0M4Ci06MTAzNzcwMDAwMjE2RTQ0QzAwMDAwMDAwMDIxNkUwMEMwMTAxMDEyMERBCi06MTAzNzgwMDAwNjE2RTQ1MDAwMDAwMDA0MDIxNkUwMTAwMTAxMDEwMUQ5Ci06MTAzNzkwMDAwMjE2RTQ2MDAwMDAwMDAwMDIxNkU0NjQwMDAwMDAwNDY5Ci06MTAzN0EwMDAwMjE2RTQ2ODAwMDAwMDA0MDIxNkU0NkMwMDAwMDAwMjQ3Ci06MTAzN0IwMDAwMjE2RTAxNDA4MDEyMDA0MDIxNkU0NzAwMDAwMDAwNTVGCi06MTAzN0MwMDAwMjE2RTQ3NDAwMDAwMDA1MDIxNkU0NzgwMDAwMDAwNTBCCi06MTAzN0QwMDAwMjE2RTQ3QzAwMDAwMDA1MDIxNkUwMTgyMDA4MTAwMTIzCi06MTAzN0UwMDAwMjE2RTQ4MDAwMDAwMDA4MDIxNkU0ODQwMDAwMDAwNkNGCi06MTAzN0YwMDAwMjE2RTQ4ODAwMDAwMDA3MDIxNkU0OEMwMDAwMDAwMUI1Ci06MTAzODAwMDAwMjE2RTAxQzAxMDEwMTIwMDIxNkU0OTAwMDAwMDAwMUY0Ci06MTAzODEwMDAwMjE2RTQ5NDAwMDAwMDAxMDIxNkU0OTgwMDAwMDAwMTgyCi06MTAzODIwMDAwMjE2RTQ5QzAwMDAwMDAxMDIxNkUwMjAwMTAxMDEwMUUzCi06MTAzODMwMDAwMjE2RTRBMDAwMDAwMDAxMDIxNkU0QTQwMDAwMDAwNDQ3Ci06MTAzODQwMDAwMjE2RTRBODAwMDAwMDA0MDIxNkU0QUMwMDAwMDAwMjI2Ci06MTAzODUwMDAwMjE2RTAyNDA4MDEyMDA0MDIxNkU0QjAwMDAwMDAwNTZFCi06MTAzODYwMDAwMjE2RTRCNDAwMDAwMDA1MDIxNkU0QjgwMDAwMDAwNUVBCi06MTAzODcwMDAwMjE2RTRCQzAwMDAwMDA1MDIxNkUwMjgyMDA4MTAwMTMyCi06MTAzODgwMDAwMjE2RTRDMDAwMDAwMDA4MDIxNkU0QzQwMDAwMDAwNkFFCi06MTAzODkwMDAwMjE2RTRDODAwMDAwMDA3MDIxNkU0Q0MwMDAwMDAwMTk0Ci06MTAzOEEwMDAwMjE2RTAyQzAxMDEwMTIwMDIxNkU0RDAwMDAwMDAwMTA0Ci06MTAzOEIwMDAwMjE2RTRENDAwMDAwMDAxMDIxNkU0RDgwMDAwMDAwMTYyCi06MTAzOEMwMDAwMjE2RTREQzAwMDAwMDAxMDIxNkUwMzAwMTAxMDEwMUYzCi06MTAzOEQwMDAwMjE2RTRFMDAwMDAwMDAxMDIxNkU0RTQwMDAwMDAwNDI3Ci06MTAzOEUwMDAwMjE2RTRFODAwMDAwMDA0MDIxNkU0RUMwMDAwMDAwMjA2Ci06MTAzOEYwMDAwMjE2RTAzNDA4MDEyMDA0MDIxNkU0RjAwMDAwMDAwNTdFCi06MTAzOTAwMDAwMjE2RTRGNDAwMDAwMDA1MDIxNkU0RjgwMDAwMDAwNUM5Ci06MTAzOTEwMDAwMjE2RTRGQzAwMDAwMDA1MDIxNkUwMzgyMDA4MTAwMTQxCi06MTAzOTIwMDAwMjE2RTUwMDAwMDAwMDA4MDIxNkU1MDQwMDAwMDAwNjhCCi06MTAzOTMwMDAwMjE2RTUwODAwMDAwMDA3MDIxNkUwM0MwMTAxMDEyMDI0Ci06MTAzOTQwMDAwMjE2ODI0MDAwM0YwMDNGMDIxNjgyNDQwMDAwMDAwMDQxCi06MTAzOTUwMDAwMjE2RTUyNDAwM0YwMDNGMDIxNkU1MjgwMDAwMDAwMEEzCi06MTAzOTYwMDAwMjE2ODI0ODAwMDAwMDAwMDIxNjgyNEMwMDNGMDAzRjExCi06MTAzOTcwMDAwMjE2RTUyQzAwMDAwMDAwMDIxNkU1MzAwMDNGMDAzRjczCi06MTAzOTgwMDAwMjE2ODI1MDAxMDAwMTAwMDIxNjgyNTQwMTAwMDEwMDVCCi06MTAzOTkwMDAwMjE2RTUzNDAxMDAwMTAwMDIxNkU1MzgwMTAwMDEwMEJECi06MTAzOUEwMDAwNjE2ODI1ODAwMDAwMDAyMDIxNkU1M0MwMDAwMDAwMEU2Ci06MTAzOUIwMDAwMjE2RTU0MDAwMDAwMDAwMDIxNjgyNjAwMEMwMDBDMDUwCi06MTAzOUMwMDAwMjE2ODI2NDAwQzAwMEMwMDIxNkU1NDQwMEMwMDBDMEI4Ci06MTAzOUQwMDAwMjE2RTU0ODAwQzAwMEMwMDIxNjgyNjgxRTAwMUUwMEU0Ci06MTAzOUUwMDAwMjE2ODI2QzFFMDAxRTAwMDIxNkU1NEMxRTAwMUUwMDEwCi06MTAzOUYwMDAwMjE2RTU1MDFFMDAxRTAwMDIxNjgyNzA0MDAwNDAwMEI0Ci06MTAzQTAwMDAwMjE2ODI3NDQwMDA0MDAwMDIxNkU1NTQ0MDAwNDAwMDU3Ci06MTAzQTEwMDAwMjE2RTU1ODQwMDA0MDAwMDIxNjgyNzg4MDAwODAwMEJGCi06MTAzQTIwMDAwMjE2ODI3QzgwMDA4MDAwMDIxNkU1NUM4MDAwODAwMDI3Ci06MTAzQTMwMDAwMjE2RTU2MDgwMDA4MDAwMDIxNjgyODAyMDAwMjAwMENGCi06MTAzQTQwMDAwMjE2ODI4NDIwMDAyMDAwMDIxNkU1NjQyMDAwMjAwMDc3Ci06MTAzQTUwMDAwMjE2RTU2ODIwMDAyMDAwMDYxNjgyODgwMDAwMDAwMjk5Ci06MTAzQTYwMDAwMjE2RTU2QzAwMDAwMDAwMDIxNkU1NzAwMDAwMDAwMDgwCi06MTAzQTcwMDAwMjE2ODI5MDAwMDAwMDAwMDIxNjgyOTQwMDAwMDAwMEVFCi06MTAzQTgwMDAwMjE2RTU3NDAwMDAwMDAwMDIxNkU1NzgwMDAwMDAwMDUwCi06MTAzQTkwMDAwMjE2ODI5ODAwMDAwMDAwMDIxNjgyOUMwMDAwMDAwMEJFCi06MTAzQUEwMDAwMjE2RTU3QzAwMDAwMDAwMDIxNkU1ODAwMDAwMDAwMDIwCi06MTAzQUIwMDAwMjE2ODJBMDAwMDAwMDAwMDIxNjgyQTQwMDAwMDAwMThECi06MTAzQUMwMDAwNjE2ODJBODAwMDAwMDBBMDIxNjgxRjQwMDAwMEMwODA1Ci06MTAzQUQwMDAwMjE2ODFGODAwMDAwMDQwMDIxNjgxRkMwMDAwMDEwMDdGCi06MTAzQUUwMDAwMjE2ODIwMDAwMDAwMDIwMDIxNjgyMDQwMDAwMDAxNzY3Ci06MTAzQUYwMDAwMjE2ODIwODAwMDAwMDgwMDIxNjgyMEMwMDAwMDIwMEZDCi06MTAzQjAwMDAwMjE2ODIxMDAwMDAwMDAwMDIxNjgyMTgwMUZGMDFGRjU5Ci06MTAzQjEwMDAwMjE2ODIxNDAxRkYwMUZGMDIxNkU1MTAwMUZGMDFGRkVBCi06MTAzQjIwMDAwMjE2RTUwQzAxRkYwMUZGMDIxNjgyM0MwMDAwMDAxM0EzCi06MTAzQjMwMDAwMjE2ODA5MDAwMDAwMTNGMDIxNjgwNjAwMDAwMDE0MEU0Ci06MTAzQjQwMDAwMjE2ODA2NDAwMDAwMTQwMDYxNjgwNjgwMDAwMDAwMjMyCi06MTAzQjUwMDAwMjE2ODA3MDAwMDAwMEMwMDYxNjgwNzQwMDAwMDAwNzg2Ci06MTAzQjYwMDAwMjE2ODA5QzAwMDAwMDQ4MDIxNjgwQTAwMDAwMDA0ODU5Ci06MTAzQjcwMDAwNjE2ODBBNDAwMDAwMDAyMDIxNjgwQUMwMDAwMDA0ODc3Ci06MTAzQjgwMDAwNjE2ODBCMDAwMDAwMDA3MDIxNjgyMzgwMDAwODAwMDkwCi06MTAzQjkwMDAwMjE2ODIzNDAwMDAyNUU0MDIxNjgwOTQwMDAwN0ZGRkE0Ci06MTAzQkEwMDAwMjE2ODIyMDAwMEYwMDBGMDIxNjgyMUMwMDBGMDAwRjY5Ci06MTAzQkIwMDAwMjE2RTUxODAwMEYwMDBGMDIxNkU1MTQwMDBGMDAwRkEzCi06MTAzQkMwMDAwMjE2ODIyODAwMDAwMDAwMDIxNjgyMjRGRkZGRkZGRjc5Ci06MTAzQkQwMDAwMjE2RTUyMDAwMDAwMDAwMDIxNkU1MUNGRkZGRkZGRkIzCi06MTAzQkUwMDAwMjE2RTZCQzAwMDAwMDAwMDIxNkU2QzAwMDAwMDAwMjVCCi06MTAzQkYwMDAwMjE2RTZDNDAwMDAwMDAxMDIxNkU2QzgwMDAwMDAwMzM5Ci06MTAzQzAwMDAwMjE2RTZDQzAwMDAwMDA0MDIxNkU2RDAwMDAwMDAwNjEyCi06MTAzQzEwMDAwMjE2RTZENDAwMDAwMDA1MDIxNkU2RDgwMDAwMDAwN0YwCi06MTAzQzIwMDAwMjE2ODBFQzAwMDAwMEZGMDIxNDAwMDAwMDAwMDAwMUZBCi06MTAzQzMwMDAwMjE0MDAwQzAwMDAwMDAxMDIxNDAwNDAwMDAwMDAwMTBBCi06MTAzQzQwMDAwMjE0MDA0NDAwMDA3RkZGMDIxNDAwMEMwMDAwMDAwMDdBCi06MTAzQzUwMDAwMjE0MDAwMDAwMDAwMDAwMDIxNDAwNkMwMDAwMDAwMENDCi06MTAzQzYwMDAwMjE0MDAwNDAwMDAwMDAxMDIxNDAwMzAwMDAwMDAwMUYyCi06MTAzQzcwMDAwMjE0MDAwNDAwMDAwMDAwMDIxNDAwNUMwMDAwMDAwMEI4Ci06MTAzQzgwMDAwMjE0MDAwODAwMDAwMDAxMDIxNDAwMzQwMDAwMDAwMUNBCi06MTAzQzkwMDAwMjE0MDAwODAwMDAwMDAwMDIxNDAwNjAwMDAwMDAwMDkwCi06MTAzQ0EwMDAwNjAyODAwMDAwMDAyMDAwMDIwMjAwNTgwMDAwMDAzMkRFCi06MTAzQ0IwMDAwMjAyMDBBMDAzMTUwMDIwMDIwMjAwQTQwMzE1MDAyMDQ4Ci06MTAzQ0MwMDAwMjAyMDBBODAxMDAwMDMwMDIwMjAwQUMwODEwMDAwMDRGCi06MTAzQ0QwMDAwMjAyMDBCMDAwMDAwMDMzMDIwMjAwQjQwMDAwMDAzMDE1Ci06MTAzQ0UwMDAwMjAyMDBCODAwMDAwMDMxMDIwMjAwQkMwMDAwMDAwMzI0Ci06MTAzQ0YwMDAwMjAyMDBDMDAwMDAwMDA2MDIwMjAwQzQwMDAwMDAwMzJGCi06MTAzRDAwMDAwMjAyMDBDODAwMDAwMDAzMDIwMjAwQ0MwMDAwMDAwMjEyCi06MTAzRDEwMDAwMjAyMDBEMDAwMDAwMDAwMDIwMjAwRDQwMDAwMDAwMkY1Ci06MTAzRDIwMDAwMjAyMDBEQzAwMDAwMDAwMDIwMjAwRTAwMDAwMDAwNkM5Ci06MTAzRDMwMDAwMjAyMDBFNDAwMDAwMDA0MDIwMjAwRTgwMDAwMDAwMkE5Ci06MTAzRDQwMDAwMjAyMDBFQzAwMDAwMDAyMDIwMjAwRjAwMDAwMDAwMThDCi06MTAzRDUwMDAwMjAyMDBGQzAwMDAwMDA2MDIwMjAxMjAwMDAwMDAwMDM4Ci06MTAzRDYwMDAwMjAyMDEzNDAwMDAwMDAyMDIwMjAxQjAwMDAwMDAwMTYyCi06MTAzRDcwMDAwMjAyMDIwQzAwMDAwMDAxMDIwMjAyMTQwMDAwMDAwMTE1Ci06MTAzRDgwMDAwMjAyMDIxODAwMDAwMDAyMDIwMjA0MDQwMDAwMDAwMTA2Ci06MTAzRDkwMDAwMjAyMDQwQzAwMDAwMDQwMDIwMjA0MTAwMDAwMDA0MDc3Ci06MTAzREEwMDAwMjAyMDQxQzAwMDAwMDA0MDIwMjA0MjAwMDAwMDAyMEEzCi06MTAzREIwMDAwMjAyMDQyNDAwMDAwMDAyMDIwMjA0MjgwMDAwMDAyMDg1Ci06MTAzREMwMDAwNjAyMDUwMDAwMDAwMDEyMDQwMjA0ODAwMDIwMDRBQTdDCi06MTAzREQwMDAwMjAyMDA2MDAwMDAwMDBGMDIwMjAwNjQwMDAwMDAwNzAxCi06MTAzREUwMDAwMjAyMDA2ODAwMDAwMDAwMDIwMjAwNkMwMDAwMDAwRUU5Ci06MTAzREYwMDAwMjAyMDA3MDAwMDAwMDBFMDYwMjAwNzQwMDAwMDAwM0MyCi06MTAzRTAwMDAwMjAyMDBGNDAwMDAwMDA0MDIwMjAwMDQwMDAwMDAwMUFECi06MTAzRTEwMDAwMjAyMDAwODAwMDAwMDAxMDIwMjAwMEMwMDAwMDAwMTg0Ci06MTAzRTIwMDAwMjAyMDAxMDAwMDAwMDAxMDIwMjAwMTQwMDAwMDAwMTY0Ci06MTAzRTMwMDAwMjAyMDAxODAwMDAwMDAxMDIwMjAwMUMwMDAwMDAwMTQ0Ci06MTAzRTQwMDAwMjAyMDAyMDAwMDAwMDAxMDIwMjAwMjQwMDAwMDAwMTI0Ci06MTAzRTUwMDAwMjAyMDAyODAwMDAwMDAxMDIwMjAwMkMwMDAwMDAwMTA0Ci06MTAzRTYwMDAwMjAyMDAzMDAwMDAwMDAxMDIwMjAwMzQwMDAwMDAwMUU0Ci06MTAzRTcwMDAwMjAyMDAzODAwMDAwMDAxMDIwMjAwM0MwMDAwMDAwMUM0Ci06MTAzRTgwMDAwMjAyMDA0MDAwMDAwMDAxMDIwMjAwNDQwMDAwMDAwMUE0Ci06MTAzRTkwMDAwMjAyMDA0ODAwMDAwMDAxMDIwMjAwNEMwMDAwMDAwMTg0Ci06MTAzRUEwMDAwMjAyMDA1MDAwMDAwMDAxMDIwMjAxMDgwMDAwMDBDOEU4Ci06MTAzRUIwMDAwMjAyMDExODAwMDAwMDAyMDIwMjAxQzQwMDAwMDAwMDFBCi06MTAzRUMwMDAwMjAyMDFDQzAwMDAwMDAwMDIwMjAxRDQwMDAwMDAwMjQ2Ci06MTAzRUQwMDAwMjAyMDFEQzAwMDAwMDAyMDIwMjAxRTQwMDAwMDBGRjE3Ci06MTAzRUUwMDAwMjAyMDFFQzAwMDAwMEZGMDIwMjAxMDAwMDAwMDAwMERECi06MTAzRUYwMDAwMjAyMDEwQzAwMDAwMEM4MDIwMjAxMUMwMDAwMDAwMkM2Ci06MTAzRjAwMDAwMjAyMDFDODAwMDAwMDAwMDIwMjAxRDAwMDAwMDAwMDBGCi06MTAzRjEwMDAwMjAyMDFEODAwMDAwMDAyMDIwMjAxRTAwMDAwMDAwMkRCCi06MTAzRjIwMDAwMjAyMDFFODAwMDAwMEZGMDIwMjAxRjAwMDAwMDBGRkIxCi06MTAzRjMwMDAwMjAyMDEwNDAwMDAwMDAwMDIwMjAxMDgwMDAwMDBDOEEzCi06MTAzRjQwMDAwMjAyMDExODAwMDAwMDAyMDIwMjAxQzQwMDAwMDAwMDg5Ci06MTAzRjUwMDAwMjAyMDFDQzAwMDAwMDAwMDIwMjAxRDQwMDAwMDAwMkI1Ci06MTAzRjYwMDAwMjAyMDFEQzAwMDAwMDAyMDIwMjAxRTQwMDAwMDBGRjg2Ci06MTAzRjcwMDAwMjAyMDFFQzAwMDAwMEZGMDIwMjAxMDAwMDAwMDAwMDRDCi06MTAzRjgwMDAwMjAyMDEwQzAwMDAwMEM4MDIwMjAxMUMwMDAwMDAwMjM1Ci06MTAzRjkwMDAwMjAyMDFDODAwMDAwMDAwMDIwMjAxRDAwMDAwMDAwMDdGCi06MTAzRkEwMDAwMjAyMDFEODAwMDAwMDAyMDIwMjAxRTAwMDAwMDAwMjRCCi06MTAzRkIwMDAwMjAyMDFFODAwMDAwMEZGMDIwMjAxRjAwMDAwMDBGRjIxCi06MTAzRkMwMDAwMjAyMDEwNDAwMDAwMDAwMDIwMjAxMDgwMDAwMDBDODEzCi06MTAzRkQwMDAwMjAyMDExODAwMDAwMDAyMDIwMjAxQzQwMDAwMDAwMEY5Ci06MTAzRkUwMDAwMjAyMDFDQzAwMDAwMDAwMDIwMjAxRDQwMDAwMDAwMjI1Ci06MTAzRkYwMDAwMjAyMDFEQzAwMDAwMDAyMDIwMjAxRTQwMDAwMDBGRkY2Ci06MTA0MDAwMDAwMjAyMDFFQzAwMDAwMEZGMDIwMjAxMDAwMDAwMDAwMEJCCi06MTA0MDEwMDAwMjAyMDEwQzAwMDAwMEM4MDIwMjAxMUMwMDAwMDAwMkE0Ci06MTA0MDIwMDAwMjAyMDFDODAwMDAwMDAwMDIwMjAxRDAwMDAwMDAwMEVFCi06MTA0MDMwMDAwMjAyMDFEODAwMDAwMDAyMDIwMjAxRTAwMDAwMDAwMkJBCi06MTA0MDQwMDAwMjAyMDFFODAwMDAwMEZGMDIwMjAxRjAwMDAwMDBGRjkwCi06MTA0MDUwMDAwMjAyMDEwNDAwMDAwMDAwMDIwMjAxMDgwMDAwMDBDODgyCi06MTA0MDYwMDAwMjAyMDExODAwMDAwMDAyMDIwMjAxQzQwMDAwMDAwMDY4Ci06MTA0MDcwMDAwMjAyMDFDQzAwMDAwMDAwMDIwMjAxRDQwMDAwMDAwMjk0Ci06MTA0MDgwMDAwMjAyMDFEQzAwMDAwMDAyMDIwMjAxRTQwMDAwMDBGRjY1Ci06MTA0MDkwMDAwMjAyMDFFQzAwMDAwMEZGMDIwMjAxMDAwMDAwMDAwMDJCCi06MTA0MEEwMDAwMjAyMDEwQzAwMDAwMEM4MDIwMjAxMUMwMDAwMDAwMjE0Ci06MTA0MEIwMDAwMjAyMDFDODAwMDAwMDAwMDIwMjAxRDAwMDAwMDAwMDVFCi06MTA0MEMwMDAwMjAyMDFEODAwMDAwMDAyMDIwMjAxRTAwMDAwMDAwMjJBCi06MTA0MEQwMDAwMjAyMDFFODAwMDAwMEZGMDIwMjAxRjAwMDAwMDBGRjAwCi06MTA0MEUwMDAwMjAyMDEwNDAwMDAwMDAwMDcyODA0MDAwMEEwMDAwMEY0Ci06MTA0MEYwMDAwODI4MDdCODAwMDkwNENBMDcyQzAwMDAzNERBMDAwMEI5Ci06MTA0MTAwMDAwNzJDODAwMDM4RjgwRDM3MDcyRDAwMDAzN0I5MUI3NkQzCi06MTA0MTEwMDAwNzJEODAwMDMxNzgyOTY1MDcyRTAwMDAxQzdBMzVDNEYwCi06MTA0MTIwMDAwODJFNDhFMDM2RTQwNENDMDEyODAwMDAwMDAwMDAwMDFFCi06MTA0MTMwMDAwMTI4MDAwNDAwMDAwMDAwMDEyODAwMDgwMDAwMDAwMDIxCi06MTA0MTQwMDAwMTI4MDAwQzAwMDAwMDAwMDEyODAwMTAwMDAwMDAwMDAxCi06MTA0MTUwMDAwMTI4MDAxNDAwMDAwMDAwMDIyODAwMjAwMDAwMDAwMUQ3Ci06MTA0MTYwMDAwMjI4MDAyNDAwMDAwMDAyMDIyODAwMjgwMDAwMDAwM0FBCi06MTA0MTcwMDAwMjI4MDAyQzAwMDAwMDAwMDIyODAwMzAwMDAwMDAwNDhCCi06MTA0MTgwMDAwMjI4MDAzNDAwMDAwMDAxMDIyODAwMzgwMDAwMDAwMDZFCi06MTA0MTkwMDAwMjI4MDAzQzAwMDAwMDAxMDIyODAwNDAwMDAwMDAwNDRBCi06MTA0MUEwMDAwMjI4MDA0NDAwMDAwMDAwMDIyODAwNDgwMDAwMDAwMTJFCi06MTA0MUIwMDAwMjI4MDA0QzAwMDAwMDAzMDIyODAwNTAwMDAwMDAwMDBDCi06MTA0MUMwMDAwMjI4MDA1NDAwMDAwMDAxMDIyODAwNTgwMDAwMDAwNEVBCi06MTA0MUQwMDAwMjI4MDA1QzAwMDAwMDAwMDIyODAwNjAwMDAwMDAwMUNFCi06MTA0MUUwMDAwMjI4MDA2NDAwMDAwMDAzMDIyODAwNjgwMDAwMDAwMEFDCi06MTA0MUYwMDAwMjI4MDA2QzAwMDAwMDAxMDIyODAwNzAwMDAwMDAwNDhBCi06MTA0MjAwMDAwMjI4MDA3NDAwMDAwMDAwMDIyODAwNzgwMDAwMDAwNDZBCi06MTA0MjEwMDAwMjI4MDA3QzAwMDAwMDAzMDYyODAwODAwMDAwMDAwMjQ1Ci06MTA0MjIwMDAwMjI4MDBBNDAwMDAzRkZGMDIyODAwQTgwMDAwMDNGRkFFCi06MTA0MjMwMDAwMjI4MDIyNDAwMDAwMDAwMDIyODAyMzQwMDAwMDAwMENFCi06MTA0MjQwMDAwMjI4MDI0QzAwMDAwMDAwMDIyODAyRTQwMDAwRkZGRkU4Ci06MTA0MjUwMDAwNjI4MjAwMDAwMDAwODAwMDIyQjhCQzAwMDAwMDAwMThGCi06MTA0MjYwMDAwMjJCODAwMDAwMDAwMDAwMDIyQjgwNDAwMDAwMDAxODlDCi06MTA0MjcwMDAwMjJCODA4MDAwMDAwMDBDMDIyQjgwQzAwMDAwMDA2NjMyCi06MTA0MjgwMDAwQzJCODMwMDAwMDdBMTIwMEEyQjgzMDAwMDAwMDEzOEJCCi06MTA0MjkwMDAwQjJCODMwMDAwMDAxMzg4MEEyQjgzNDAwMDAwMDAwMEQyCi06MTA0MkEwMDAwQzJCODM0MDAwMDAwMUY0MEIyQjgzNDAwMDAwMDAwNTIxCi06MTA0MkIwMDAwMjJCODM4MDAwMDdBMTIwMDIyQjgzQzAwMDAwMDFGNEExCi06MTA0MkMwMDAwMjJCMTQ4MDAwMDAwMDAxMEEyQjE0ODAwMDAwMDAwMDYzCi06MTA0MkQwMDAwNjJBOUFGODAwMDAwMDA0MDQyQTlCMDgwMDAyMDRDRTczCi06MTA0MkUwMDAwNjJBOUIxMDAwMDAwMDA2MDYyQTkwODAwMDAwMDA0ODY1Ci06MTA0MkYwMDAwNjJBMjAwODAwMDAwMEM4MDYyQTIwMDAwMDAwMDAwMjRDCi06MTA0MzAwMDAwNjJBOTFBODAwMDAwMDg2MDYyQTkwMDAwMDAwMDAyMERFCi06MTA0MzEwMDAwNjJBOTNDODAwMDAwMDAzMDQyQTkzRDQwMDAxMDREMEE1Ci06MTA0MzIwMDAwNjJBOURBODAwMDAwMDAyMDQyQTk0OTgwMDA0MDREMUUzCi06MTA0MzMwMDAwNDJBOUQ1ODAwMDEwNEQ1MDYyQTlENUMwMDAwMDAxMTQ2Ci06MTA0MzQwMDAwNDJBQ0IyMDAwMTAwNEQ2MDQyQTMwMDAwMDAyMDRFNjIwCi06MTA0MzUwMDAwNjJBMzAwODAwMDAwMTAwMDYyQTQwNDAwMDAwMDAxMDM0Ci06MTA0MzYwMDAwNDJBNDAwMDAwMTAwNEU4MDQyQTg0MDgwMDAyMDRGODJCCi06MTA0MzcwMDAwNjJBOURBMDAwMDAwMDAyMDYyQUIwMDAwMDAwMDA1MDlFCi06MTA0MzgwMDAwNjJBQkI3MDAwMDAwMDcwMDYyQUIxNTAwMDAwMDAwMjJGCi06MTA0MzkwMDAwNjJBQkI2MDAwMDAwMDA0MDYyQUQwMDAwMDAwMDgwMEM2Ci06MTA0M0EwMDAwNjJBQzAwMDAwMDAwMTUwMDYyQTk0QTgwMDAwMDAzMjJFCi06MTA0M0IwMDAwNjJBNTAyMDAwMDAwMDAyMDYyQTUwMzAwMDAwMDAwMkE5Ci06MTA0M0MwMDAwNjJBNTAwMDAwMDAwMDAyMDYyQTUwMTAwMDAwMDAwMkQ5Ci06MTA0M0QwMDAwMjJBNTIwODAwMDAwMDAxMDQyQTlCMjgwMDAyMDRGQTY1Ci06MTA0M0UwMDAwNjJBOTYzODAwMDAwMDIyMDQyQTk2QzAwMDAxMDRGQzI4Ci06MTA0M0YwMDAwNjJBOTZDNDAwMDAwMDAzMDYyQTk3NjgwMDAwMDAyMkRGCi06MTA0NDAwMDAwNDJBOTdGMDAwMDEwNEZEMDYyQTk3RjQwMDAwMDAwMzM3Ci06MTA0NDEwMDAwNjJBOTg5ODAwMDAwMDIyMDQyQTk5MjAwMDAxMDRGRTMwCi06MTA0NDIwMDAwNjJBOTkyNDAwMDAwMDAzMDYyQTk5QzgwMDAwMDAyMkU5Ci06MTA0NDMwMDAwNDJBOUE1MDAwMDEwNEZGMDYyQTlBNTQwMDAwMDAwMzNGCi06MTA0NDQwMDAwNjJBQjE0MDAwMDAwMDAyMDYyQUM1NDAwMDAwMDE1MEMzCi06MTA0NDUwMDAwNjJBOTU3MDAwMDAwMDMyMDYyQTUwMjgwMDAwMDAwMjRCCi06MTA0NDYwMDAwNjJBNTAzODAwMDAwMDAyMDYyQTUwMDgwMDAwMDAwMjA4Ci06MTA0NDcwMDAwNjJBNTAxODAwMDAwMDAyMDIyQTUyMEMwMDAwMDAwMTE3Ci06MTA0NDgwMDAwNDJBOUIzMDAwMDIwNTAwMDYyQTk2RDAwMDAwMDAyMjc0Ci06MTA0NDkwMDAwNDJBOTc1ODAwMDEwNTAyMDYyQTk3NUMwMDAwMDAwM0QxCi06MTA0NEEwMDAwNjJBOTgwMDAwMDAwMDIyMDQyQTk4ODgwMDAxMDUwM0NCCi06MTA0NEIwMDAwNjJBOTg4QzAwMDAwMDAzMDYyQTk5MzAwMDAwMDAyMjhBCi06MTA0NEMwMDAwNDJBOTlCODAwMDEwNTA0MDYyQTk5QkMwMDAwMDAwM0RCCi06MTA0NEQwMDAwNjJBOUE2MDAwMDAwMDIyMDQyQTlBRTgwMDAxMDUwNUQ1Ci06MTA0NEUwMDAwNjJBOUFFQzAwMDAwMDAzMDYyQUIxNDgwMDAwMDAwMkU4Ci06MTA0NEYwMDAwMjJBQ0E4MDAwMDAwMDAwMDQyQTlCMzgwMDEwMDUwNjJBCi06MTA0NTAwMDAwNjJBNTA0ODAwMDAwMDBFMDIyQUNBODQwMDAwMDAwMDVCCi06MTA0NTEwMDAwNDJBOUI3ODAwMTAwNTE2MDYyQTUwODAwMDAwMDAwRTIxCi06MTA0NTIwMDAwMjJBQ0E4ODAwMDAwMDAwMDQyQTlCQjgwMDEwMDUyNjUxCi06MTA0NTMwMDAwNjJBNTBCODAwMDAwMDBFMDIyQUNBOEMwMDAwMDAwMEIzCi06MTA0NTQwMDAwNDJBOUJGODAwMTAwNTM2MDYyQTUwRjAwMDAwMDAwRUUxCi06MTA0NTUwMDAwMjJBQ0E5MDAwMDAwMDAwMDQyQTlDMzgwMDEwMDU0Njc4Ci06MTA0NTYwMDAwNjJBNTEyODAwMDAwMDBFMDIyQUNBOTQwMDAwMDAwMDBBCi06MTA0NTcwMDAwNDJBOUM3ODAwMTAwNTU2MDYyQTUxNjAwMDAwMDAwRTlGCi06MTA0NTgwMDAwMjJBQ0E5ODAwMDAwMDAwMDQyQTlDQjgwMDEwMDU2NkEwCi06MTA0NTkwMDAwNjJBNTE5ODAwMDAwMDBFMDIyQUNBOUMwMDAwMDAwMDYyCi06MTA0NUEwMDAwNDJBOUNGODAwMTAwNTc2MDYyQTUxRDAwMDAwMDAwRTVGCi06MTA0NUIwMDAwMjEwMTAwODAwMDAwMDAxMDIxMDEwNTAwMDAwMDAwMTVECi06MTA0NUMwMDAwMjEwMTAwMDAwMDNEMDAwMDIxMDEwMDQwMDAwMDAzRDkzCi06MTA0NUQwMDAwOTEwMTgwMDAyMDAwNTg2MDkxMDExMDAwMDEwMDc4NjU2Ci06MTA0NUUwMDAwNjEwMTE0MDAwMDAwMDA4MDkxMDExNjAwMDEwMDc5NjI1Ci06MTA0NUYwMDAwNjEwMTFBMDAwMDAwMDE4MDYxMDI0MDAwMDAwMDBFMEMyCi06MTA0NjAwMDAwMjEwMjAxQzAwMDAwMDAwMDIxMDIwMjAwMDAwMDAwMTA5Ci06MTA0NjEwMDAwMjEwMjBDMDAwMDAwMDAyMDIxMDIwMDQwMDAwMDAwMTZGCi06MTA0NjIwMDAwMjEwMjAwODAwMDAwMDAxMDkxMDNDMDAwMDA1MDdBNjQ4Ci06MTA0NjMwMDAwOTEwMzgwMDAwMDUwN0FCMDkxMDM4MjAwMDA1MDdCMDQ1Ci06MTA0NjQwMDAwNjEwNEMwMDAwMDAwMTAwMDIxMDQwMjgwMDAwMDAxMDdECi06MTA0NjUwMDAwMjEwNDA0NDAwMDAzRkZGMDIxMDQwNTgwMDI4MDAwMEI0Ci06MTA0NjYwMDAwMjEwNDA4NDAwODQ5MjRBMDIxMDQwNTgwMDAwMDAwMDZBCi06MTA0NjcwMDAwMjEwODAwMDAwMDAxMDgwMDIxMDgwQUMwMDAwMDAwMERBCi06MTA0NjgwMDAwMjEwODAzODAwMDAwMDEwMDIxMDgxMDAwMDAwMDAwMEJECi06MTA0NjkwMDAwNjEwODEyMDAwMDAwMDAyMDIxMDgwMDgwMDAwMDJCNTEwCi06MTA0NkEwMDAwMjEwODAxMDAwMDAwMDAwMDYxMDgyMDAwMDAwMDA0QTg2Ci06MTA0NkIwMDAwMjEwODEwODAwMDFGRkZGMDYxMDgxNDAwMDAwMDAwMjg3Ci06MTA0NkMwMDAwMjEwODAwMDAwMDAxQTgwMDYxMDkwMDAwMDAwMDAyNEY0Ci06MTA0NkQwMDAwNjEwOTEyMDAwMDAwMDRBMDYxMDkzNzAwMDAwMDA0QTY2Ci06MTA0NkUwMDAwNjEwOTVDMDAwMDAwMDRBMDIxMDgwMDQwMDAwMTA4MEVGCi06MTA0NkYwMDAwMjEwODBCMDAwMDAwMDAxMDIxMDgwM0MwMDAwMDAxMDk5Ci06MTA0NzAwMDAwMjEwODEwNDAwMDAwMDAwMDYxMDgxMjgwMDAwMDAwMjUxCi06MTA0NzEwMDAwMjEwODAwQzAwMDAwMkI1MDIxMDgwMTQwMDAwMDAwMDlFCi06MTA0NzIwMDAwNjEwODQwMDAwMDAwMDRBMDIxMDgxMEMwMDAxRkZGRjA3Ci06MTA0NzMwMDAwNjEwODE0ODAwMDAwMDAyMDIxMDgwMDQwMDAwMUE4MDY4Ci06MTA0NzQwMDAwNjEwOTA5MDAwMDAwMDI0MDYxMDkyNDgwMDAwMDA0QUQ1Ci06MTA0NzUwMDAwNjEwOTQ5ODAwMDAwMDRBMDYxMDk2RTgwMDAwMDA0QUVGCi06MTA0NzYwMDAwMjEwODAwMDAwMDAxMDgwMDIxMDgwQUMwMDAwMDAwMkU3Ci06MTA0NzcwMDAwMjEwODAzODAwMDAwMDEwMDIxMDgxMDAwMDAwMDAwMENDCi06MTA0NzgwMDAwNjEwODEyMDAwMDAwMDAyMDIxMDgwMDgwMDAwMDJCNTFGCi06MTA0NzkwMDAwMjEwODAxMDAwMDAwMDAwMDYxMDgyMDAwMDAwMDA0QTk1Ci06MTA0N0EwMDAwMjEwODEwODAwMDFGRkZGMDYxMDgxNDAwMDAwMDAwMjk2Ci06MTA0N0IwMDAwMjEwODAwMDAwMDAxQTgwMDYxMDkwMDAwMDAwMDAyNDAzCi06MTA0N0MwMDAwNjEwOTEyMDAwMDAwMDRBMDYxMDkzNzAwMDAwMDA0QTc1Ci06MTA0N0QwMDAwNjEwOTVDMDAwMDAwMDRBMDIxMDgwMDQwMDAwMTA4MEZFCi06MTA0N0UwMDAwMjEwODBCMDAwMDAwMDAzMDIxMDgwM0MwMDAwMDAxMEE2Ci06MTA0N0YwMDAwMjEwODEwNDAwMDAwMDAwMDYxMDgxMjgwMDAwMDAwMjYxCi06MTA0ODAwMDAwMjEwODAwQzAwMDAwMkI1MDIxMDgwMTQwMDAwMDAwMEFECi06MTA0ODEwMDAwNjEwODQwMDAwMDAwMDRBMDIxMDgxMEMwMDAxRkZGRjE2Ci06MTA0ODIwMDAwNjEwODE0ODAwMDAwMDAyMDIxMDgwMDQwMDAwMUE4MDc3Ci06MTA0ODMwMDAwNjEwOTA5MDAwMDAwMDI0MDYxMDkyNDgwMDAwMDA0QUU0Ci06MTA0ODQwMDAwNjEwOTQ5ODAwMDAwMDRBMDYxMDk2RTgwMDAwMDA0QUZFCi06MTA0ODUwMDAwMjEwODAwMDAwMDAxMDgwMDIxMDgwQUMwMDAwMDAwNEY0Ci06MTA0ODYwMDAwMjEwODAzODAwMDAwMDEwMDIxMDgxMDAwMDAwMDAwMERCCi06MTA0ODcwMDAwNjEwODEyMDAwMDAwMDAyMDIxMDgwMDgwMDAwMDJCNTJFCi06MTA0ODgwMDAwMjEwODAxMDAwMDAwMDAwMDYxMDgyMDAwMDAwMDA0QUE0Ci06MTA0ODkwMDAwMjEwODEwODAwMDFGRkZGMDYxMDgxNDAwMDAwMDAwMkE1Ci06MTA0OEEwMDAwMjEwODAwMDAwMDAxQTgwMDYxMDkwMDAwMDAwMDAyNDEyCi06MTA0OEIwMDAwNjEwOTEyMDAwMDAwMDRBMDYxMDkzNzAwMDAwMDA0QTg0Ci06MTA0OEMwMDAwNjEwOTVDMDAwMDAwMDRBMDIxMDgwMDQwMDAwMTA4MDBECi06MTA0OEQwMDAwMjEwODBCMDAwMDAwMDA1MDIxMDgwM0MwMDAwMDAxMEIzCi06MTA0OEUwMDAwMjEwODEwNDAwMDAwMDAwMDYxMDgxMjgwMDAwMDAwMjcwCi06MTA0OEYwMDAwMjEwODAwQzAwMDAwMkI1MDIxMDgwMTQwMDAwMDAwMEJECi06MTA0OTAwMDAwNjEwODQwMDAwMDAwMDRBMDIxMDgxMEMwMDAxRkZGRjI1Ci06MTA0OTEwMDAwNjEwODE0ODAwMDAwMDAyMDIxMDgwMDQwMDAwMUE4MDg2Ci06MTA0OTIwMDAwNjEwOTA5MDAwMDAwMDI0MDYxMDkyNDgwMDAwMDA0QUYzCi06MTA0OTMwMDAwNjEwOTQ5ODAwMDAwMDRBMDYxMDk2RTgwMDAwMDA0QTBECi06MTA0OTQwMDAwMjEwODAwMDAwMDAxMDgwMDIxMDgwQUMwMDAwMDAwNjAxCi06MTA0OTUwMDAwMjEwODAzODAwMDAwMDEwMDIxMDgxMDAwMDAwMDAwMEVBCi06MTA0OTYwMDAwNjEwODEyMDAwMDAwMDAyMDIxMDgwMDgwMDAwMDJCNTNECi06MTA0OTcwMDAwMjEwODAxMDAwMDAwMDAwMDYxMDgyMDAwMDAwMDA0QUIzCi06MTA0OTgwMDAwMjEwODEwODAwMDFGRkZGMDYxMDgxNDAwMDAwMDAwMkI0Ci06MTA0OTkwMDAwMjEwODAwMDAwMDAxQTgwMDYxMDkwMDAwMDAwMDAyNDIxCi06MTA0OUEwMDAwNjEwOTEyMDAwMDAwMDRBMDYxMDkzNzAwMDAwMDA0QTkzCi06MTA0OUIwMDAwNjEwOTVDMDAwMDAwMDRBMDIxMDgwMDQwMDAwMTA4MDFDCi06MTA0OUMwMDAwMjEwODBCMDAwMDAwMDA3MDIxMDgwM0MwMDAwMDAxMEMwCi06MTA0OUQwMDAwMjEwODEwNDAwMDAwMDAwMDYxMDgxMjgwMDAwMDAwMjdGCi06MTA0OUUwMDAwMjEwODAwQzAwMDAwMkI1MDIxMDgwMTQwMDAwMDAwMENDCi06MTA0OUYwMDAwNjEwODQwMDAwMDAwMDRBMDIxMDgxMEMwMDAxRkZGRjM1Ci06MTA0QTAwMDAwNjEwODE0ODAwMDAwMDAyMDIxMDgwMDQwMDAwMUE4MDk1Ci06MTA0QTEwMDAwNjEwOTA5MDAwMDAwMDI0MDYxMDkyNDgwMDAwMDA0QTAyCi06MTA0QTIwMDAwNjEwOTQ5ODAwMDAwMDRBMDYxMDk2RTgwMDAwMDA0QTFDCi06MTA0QTMwMDAwMjEyMDVCMDAwMDAwMDAxMDIxMjA0OTAwMEUzODM0MDVFCi06MTA0QTQwMDAwMjEyMDUxNDAwMDAzQzEwMDIxMjA2NkMwMDAwMDAwMTY2Ci06MTA0QTUwMDAwMjEyMDY3MDAwMDAwMDAwMDIxMjA0OTRGRkZGRkZGRjI0Ci06MTA0QTYwMDAwMjEyMDQ5OEZGRkZGRkZGMDIxMjA0OUNGRkZGRkZGRkVBCi06MTA0QTcwMDAwMjEyMDRBMEZGRkZGRkZGMDIxMjA0QTRGRkZGRkZGRkNBCi06MTA0QTgwMDAwMjEyMDRBOEZGRkZGRkZGMDIxMjA0QUNGRkZGRkZGRkFBCi06MTA0QTkwMDAwMjEyMDRCMEZGRkZGRkZGMDIxMjA0QkNGRkZGRkZGRjgyCi06MTA0QUEwMDAwMjEyMDRDMEZGRkZGRkZGMDIxMjA0QzRGRkZGRkZGRjVBCi06MTA0QUIwMDAwMjEyMDRDOEZGRkZGRkZGMDIxMjA0Q0NGRkZGRkZGRjNBCi06MTA0QUMwMDAwMjEyMDREMEZGRkZGRkZGMDIxMjA0RDhGRkZGRkZGRjE2Ci06MTA0QUQwMDAwMjEyMDREQ0ZGRkZGRkZGMDIxMjA0RTBGRkZGRkZGRkYyCi06MTA0QUUwMDAwMjEyMDRFNEZGRkZGRkZGMDIxMjA0RThGRkZGRkZGRkQyCi06MTA0QUYwMDAwMjEyMDRFQ0ZGRkZGRkZGMDIxMjA0RjBGRkZGRkZGRkIyCi06MTA0QjAwMDAwMjEyMDRGNEZGRkZGRkZGMDIxMjA0RjhGRkZGRkZGRjkxCi06MTA0QjEwMDAwMjEyMDRGQ0ZGRkZGRkZGMDIxMjA1MDBGRkZGRkZGRjcwCi06MTA0QjIwMDAwMjEyMDUwNEZGRkZGRkZGMDIxMjA1MDhGRkZGRkZGRjRGCi06MTA0QjMwMDAwMjEyMDUwQ0ZGRkZGRkZGMDIxMjA1MTBGRkZGRkZGRjJGCi06MTA0QjQwMDAwMjEyMDRENEZGODA5MDAwMDIxMjA0QjRGMDAwNTAwMDVFCi06MTA0QjUwMDAwMjEyMDRCOEYwMDAxMDAwMDIxMjAzOTAwMDAwMDAwOEQ2Ci06MTA0QjYwMDAwMjEyMDM5QzAwMDAwMDA4MDIxMjAzQTAwMDAwMDAwOENCCi06MTA0QjcwMDAwMjEyMDNBNDAwMDAwMDAyMDIxMjAzQkMwMDAwMDAwNEExCi06MTA0QjgwMDAwMjEyMDNDMDAwMDAwMDA1MDIxMjAzQzQwMDAwMDAwNDZBCi06MTA0QjkwMDAwMjEyMDNEMDAwMDAwMDAwMDIxMjAzNkMwMDAwMDAwMUFBCi06MTA0QkEwMDAwMjEyMDM2ODAwMDAwMDNGMDIxMjAxQkMwMDAwMDA0MDM2Ci06MTA0QkIwMDAwMjEyMDFDMDAwMDAxODA4MDIxMjAxQzQwMDAwMDgwMzFDCi06MTA0QkMwMDAwMjEyMDFDODAwMDAwODAzMDIxMjAxQ0MwMDAwMDA0MERDCi06MTA0QkQwMDAwMjEyMDFEMDAwMDAwMDAzMDIxMjAxRDQwMDAwMDgwM0Y5Ci06MTA0QkUwMDAwMjEyMDFEODAwMDAwODAzMDIxMjAxREMwMDAwMDgwM0QxCi06MTA0QkYwMDAwMjEyMDFFMDAwMDEwMDAzMDIxMjAxRTQwMDAwMDgwM0I4Ci06MTA0QzAwMDAwMjEyMDFFODAwMDAwODAzMDIxMjAxRUMwMDAwMDAwMzk4Ci06MTA0QzEwMDAwMjEyMDFGMDAwMDAwMDAzMDIxMjAxRjQwMDAwMDAwMzgwCi06MTA0QzIwMDAwMjEyMDFGODAwMDAwMDAzMDIxMjAxRkMwMDAwMDAwMzYwCi06MTA0QzMwMDAwMjEyMDIwMDAwMDAwMDAzMDIxMjAyMDQwMDAwMDAwMzNFCi06MTA0QzQwMDAwMjEyMDIwODAwMDAwMDAzMDIxMjAyMEMwMDAwMDAwMzFFCi06MTA0QzUwMDAwMjEyMDIxMDAwMDAwMDAzMDIxMjAyMTQwMDAwMDAwM0ZFCi06MTA0QzYwMDAwMjEyMDIxODAwMDAwMDAzMDIxMjAyMUMwMDAwMDAwM0RFCi06MTA0QzcwMDAwMjEyMDIyMDAwMDAwMDAzMDIxMjAyMjQwMDAwMDAwM0JFCi06MTA0QzgwMDAwMjEyMDIyODAwMDAyNDAzMDIxMjAyMkMwMDAwMDAyRjRFCi06MTA0QzkwMDAwMjEyMDIzMDAwMDAwMDA5MDIxMjAyMzQwMDAwMDAxOTYyCi06MTA0Q0EwMDAwMjEyMDIzODAwMDAwMTg0MDIxMjAyM0MwMDAwMDE4MzVCCi06MTA0Q0IwMDAwMjEyMDI0MDAwMDAwMzA2MDIxMjAyNDQwMDAwMDAxOTIyCi06MTA0Q0MwMDAwMjEyMDI0ODAwMDAwMDA2MDIxMjAyNEMwMDAwMDMwNjE1Ci06MTA0Q0QwMDAwMjEyMDI1MDAwMDAwMzA2MDIxMjAyNTQwMDAwMDMwNkYyCi06MTA0Q0UwMDAwMjEyMDI1ODAwMDAwQzg2MDIxMjAyNUMwMDAwMDMwNjQ5Ci06MTA0Q0YwMDAwMjEyMDI2MDAwMDAwMzA2MDIxMjAyNjQwMDAwMDAwNkI1Ci06MTA0RDAwMDAwMjEyMDI2ODAwMDAwMDA2MDIxMjAyNkMwMDAwMDAwNjk3Ci06MTA0RDEwMDAwMjEyMDI3MDAwMDAwMDA2MDIxMjAyNzQwMDAwMDAwNjc3Ci06MTA0RDIwMDAwMjEyMDI3ODAwMDAwMDA2MDIxMjAyN0MwMDAwMDAwNjU3Ci06MTA0RDMwMDAwMjEyMDI4MDAwMDAwMDA2MDIxMjAyODQwMDAwMDAwNjM3Ci06MTA0RDQwMDAwMjEyMDI4ODAwMDAwMDA2MDIxMjAyOEMwMDAwMDAwNjE3Ci06MTA0RDUwMDAwMjEyMDI5MDAwMDAwMDA2MDIxMjAyOTQwMDAwMDAwNkY3Ci06MTA0RDYwMDAwMjEyMDI5ODAwMDAwMDA2MDIxMjAyOUMwMDAwMDAwNkQ3Ci06MTA0RDcwMDAwMjEyMDJBMDAwMDAwMzA2MDIxMjAyQTQwMDAwMDAxM0E3Ci06MTA0RDgwMDAwMjEyMDJBODAwMDAwMDA2MDIxMjAyQjAwMDAwMTAwNDg1Ci06MTA0RDkwMDAwMjEyMDJCNDAwMDAxMDA0MDIxMjAzMjQwMDEwNjQ0MDQ2Ci06MTA0REEwMDAwMjEyMDMyODAwMTA2NDQwMDIxMjA1QjQwMDAwMDAwMTQyCi06MTA0REIwMDAwMjEyMDFCMDAwMDAwMDAxMDYwMEEwMDAwMDAwMDAwQzdCCi06MTA0REMwMDAwMjAwQTA1MDAwMDAwMDAwMDIwMEEwNTQwMDAwMDAwMEZCCi06MTA0REQwMDAwMjAwQTBFQzU1NTQwMDAwMDIwMEEwRjA1NTU1NTU1NUI2Ci06MTA0REUwMDAwMjAwQTBGNDAwMDA1NTU1MDIwMEEwRjhGMDAwMDAwMEY5Ci06MTA0REYwMDAwMjAwQTBGQzU1NTQwMDAwMDIwMEExMDA1NTU1NTU1NTc1Ci06MTA0RTAwMDAwMjAwQTEwNDAwMDA1NTU1MDIwMEExMDhGMDAwMDAwMEI2Ci06MTA0RTEwMDAwMjAwQTE4QzU1NTQwMDAwMDIwMEExOTA1NTU1NTU1NTMzCi06MTA0RTIwMDAwMjAwQTE5NDAwMDA1NTU1MDIwMEExOThGMDAwMDAwMDc2Ci06MTA0RTMwMDAwMjAwQTE5QzAwMDAwMDAwMDIwMEExQTAwMDAxMDAwMEVGCi06MTA0RTQwMDAwMjAwQTFBNDAwMDA1MDE0MDIwMEExQTgwMDAwMDAwMDZDCi06MTA0RTUwMDAwMjAwQTQ1QzAwMDAwQzAwMDIwMEE2MUMwMDAwMDAwMzdECi06MTA0RTYwMDAwMjAwQTA2Q0ZGNUMwMDAwMDIwMEEwNzBGRkY1NUZGRjc1Ci06MTA0RTcwMDAwMjAwQTA3NDAwMDBGRkZGMDIwMEEwNzhGMDAwMDNFMDMxCi06MTA0RTgwMDAwMjAwQTA3QzAwMDAwMDAwMDIwMEEwODAwMDAwQTAwMDQyCi06MTA0RTkwMDAwNjAwQTA4NDAwMDAwMDA1MDIwMEEwOTgwRkUwMDAwMEJBCi06MTA0RUEwMDAwNjAwQTA5QzAwMDAwMDA3MDIwMEEwQjgwMDAwMDQwMDVCCi06MTA0RUIwMDAwNjAwQTBCQzAwMDAwMDAzMDIwMEEwQzgwMDAwMTAwMDEzCi06MTA0RUMwMDAwNjAwQTBDQzAwMDAwMDAzMDIwMEEwRDgwMDAwNDAwMEIzCi06MTA0RUQwMDAwNjAwQTBEQzAwMDAwMDAzMDIwMEEwRTgwMDAxMDAwMEMyCi06MTA0RUUwMDAwNjAwQTIyQzAwMDAwMDA0MDIwMEExMENGRjVDMDAwMEUwCi06MTA0RUYwMDAwMjAwQTExMEZGRjU1RkZGMDIwMEExMTQwMDAwRkZGRkY4Ci06MTA0RjAwMDAwMjAwQTExOEYwMDAwM0UwMDIwMEExMUMwMDAwMDAwMDU0Ci06MTA0RjEwMDAwMjAwQTEyMDAwMDBBMDAwMDYwMEExMjQwMDAwMDAwNTVFCi06MTA0RjIwMDAwMjAwQTEzODBGRTAwMDAwMDYwMEExM0MwMDAwMDAwN0NECi06MTA0RjMwMDAwMjAwQTE1ODAwMDAwODAwMDYwMEExNUMwMDAwMDAwMzY4Ci06MTA0RjQwMDAwMjAwQTE2ODAwMDAyMDAwMDYwMEExNkMwMDAwMDAwMzIwCi06MTA0RjUwMDAwMjAwQTE3ODAwMDA4MDAwMDYwMEExN0MwMDAwMDAwMzkwCi06MTA0RjYwMDAwMjAwQTE4ODAwMDIwMDAwMDYwMEEyM0MwMDAwMDAwNDJDCi06MTA0RjcwMDAwMjAwQTAzMDAwMDAwMDAwMDIwMEEwMzQwMDAwMDAwMDg5Ci06MTA0RjgwMDAwMjAwQTAzODAwMDAwMDAwMDIwMEEwM0MwMDAwMDAwMDY5Ci06MTA0RjkwMDAwMjAwQTA0MDAwMDAwMDAwMDIwMEEwNDQwMDAwMDAwMDQ5Ci06MTA0RkEwMDAwMjAwQTA0ODAwMDAwMDAwMDIwMEEwNEMwMDAwMDAwMDI5Ci06MTA0RkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAwMDAwMDAwMEMxCi06MTA0RkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCi06MTA0RkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCi06MTA0RkUwMDAwMDAwMDAwMDAwMzAwMDMxMDAwMDAwMDAwMDAwMDAwMDYwCi06MTA0RkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCi06MTA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCi06MTA1MDEwMDAwMDMxMDA1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECi06MTA1MDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCi06MTA1MDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyMDA4OTk1Ci06MTA1MDQwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OTAwOEQwMDhEMDA5MTJDCi06MTA1MDUwMDAwMDkxMDA5NTAwOTUwMDk5MDA5OTAwOUQwMDlEMDBBMTg4Ci06MTA1MDYwMDAwMEExMDBBNTAwQTUwMEE5MDBBOTAwQUUwMEFFMDBCMUY2Ci06MTA1MDcwMDAwMEIxMDBCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENCCi06MTA1MDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCi06MTA1MDkwMDAwMDAwMDAwMDAwQjQwMzA5MDMwOTAzMTMwMzEzMDMxREY4Ci06MTA1MEEwMDAwMzFEMDMyNDAzMjQwMzJCMDMyQjAzMzIwMzMyMDMzOTkwCi06MTA1MEIwMDAwMzM5MDM0MDAzNDAwMzQ3MDM0NzAzNEUwMzRFMDM1NUEwCi06MTA1MEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCi06MTA1MEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCi06MTA1MEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCi06MTA1MEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCi06MTA1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCi06MTA1MTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCi06MTA1MTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCi06MTA1MTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCi06MTA1MTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCi06MTA1MTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCi06MTA1MTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCi06MTA1MTcwMDAwMzU1MDM1QjAwMDAwMDAwMDAwMDAwMDAwMzVCMDM1Q0JDCi06MTA1MTgwMDAwMzVDMDM1RDAzNUQwMzVFMDM1RTAzNUYwMzVGMDM2MDE3Ci06MTA1MTkwMDAwMzYwMDM2MTAzNjEwMzYyMDM2MjAzNjMwMDAwMDAwMEI0Ci06MTA1MUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCi06MTA1MUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCi06MTA1MUMwMDAwMDAwMDAwMDAwMDAwMDAwMDM2MzAzNkQwMzZEMDM3QjFCCi06MTA1MUQwMDAwMzdCMDM4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Ci06MTA1MUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCi06MTA1MUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCi06MTA1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCi06MTA1MjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCi06MTA1MjIwMDAwMzg5MDM4QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Ci06MTA1MjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCi06MTA1MjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzhBMDNENkY4Ci06MTA1MjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCi06MTA1MjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCi06MTA1MjcwMDAwMDAwMDAwMDAwMDAwMDAwMDNENjA0MDEwMDAwMDAwMDUwCi06MTA1MjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCi06MTA1MjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCi06MTA1MkEwMDAwMDAwMDAwMDA0MDEwNDMzMDAwMDAwMDAwMDAwMDAwMEMyCi06MTA1MkIwMDAwNDMzMDQzQTA0M0EwNDQxMDQ0MTA0NDgwNDQ4MDQ0RkM2Ci06MTA1MkMwMDAwNDRGMDQ1NjA0NTYwNDVEMDQ1RDA0NjQwNDY0MDQ2QkQ2Ci06MTA1MkQwMDAwNDZCMDRBNDAwMDAwMDAwMDAwMDAwMDAwNEE0MDRBODYzCi06MTA1MkUwMDAwNEE4MDRBQzA0QUMwNEIwMDRCMDA0QjQwNEI0MDRCODFFCi06MTA1MkYwMDAwNEI4MDRCQzA0QkMwNEMwMDRDMDA0QzQwNEM0MDUxMzQyCi06MTA1MzAwMDAwNTEzMDUyQTA1MkEwNTQxMDU0MTA1NDMwNTQzMDU0NUMxCi06MTA1MzEwMDAwNTQ1MDU0NzA1NDcwNTQ5MDU0OTA1NEIwNTRCMDU0RDFECi06MTA1MzIwMDAwNTREMDU0RjA1NEYwNTUxMDU1MTA1RTgwNUU4MDVFOTBGCi06MTA1MzMwMDAwNUU5MDVFQTA1RUEwNUVGMDVFRjA1RjQwNUY0MDVGOUM5Ci06MTA1MzQwMDAwNUY5MDVGRTA1RkUwNjAzMDYwMzA2MDgwNjA4MDYwRDE4Ci06MTA1MzUwMDAwNjBEMDYxMjA2MTIwNjEzMDAwMDAwMDAwMDAwMDAwMEYxCi06MTA1MzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECi06MTA1MzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECi06MTA1MzgwMDAwNjEzMDYyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBCi06MTA1MzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECi06MTA1M0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjI0MDYzOTk0Ci06MTA1M0IwMDAwNjM5MDYzQzA2M0MwNjNGMDAwMDAwMDAwMDAwMDAwMEU1Ci06MTA1M0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECi06MTA1M0QwMDAwMDAwMDAwMDAwMDAwMDAwMDYzRjA2NzUwMDAwMDAwMDBECi06MTA1M0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECi06MTA1M0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECi06MTA1NDAwMDAwMDAwMDAwMDA2NzUwNzc4MDAwMDAwMDAwMDAwMDAwMEEyCi06MTA1NDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDCi06MTA1NDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdDCi06MTA1NDMwMDAwNzc4MDc3RjA3N0YwNzgzMDc4MzA3ODcwMDAwMDAwMDNGCi06MTA1NDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDCi06MTA1NDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzg3MDdDOEVGCi06MTA1NDYwMDAwMDAwMDAwMDAwMDAwMDAwMDdDODA3RDEwN0QxMDdEQURDCi06MTA1NDcwMDAwN0RBMDdFMzA3RTMwN0VDMDdFQzA3RjUwN0Y1MDdGRTk0Ci06MTA1NDgwMDAwN0ZFMDgwNzA4MDcwODEwMDgxMDA4NjcwODY3MDg3QzY3Ci06MTA1NDkwMDAwODdDMDg5MTA4OTEwODk0MDg5NDA4OTcwODk3MDg5QTNFCi06MTA1NEEwMDAwODlBMDg5RDA4OUQwOEEwMDhBMDA4QTMwOEEzMDhBNkJDCi06MTA1NEIwMDAwOEE2MDhBOTA4QTkwOEIyMDAwMDAwMDAwMDAwMDAwMDIyCi06MTA1NEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCi06MTA1NEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENDCi06MTA1NEUwMDAwOEIyMDhCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCi06MTA1NEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCi06MTA1NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEI4MDhCQjE4Ci06MTA1NTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCi06MTA1NTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCi06MTA1NTMwMDAwMDAwMDAwMDAwMDAwMDAwMDhCQjA4QzEwMDAwMDAwMERGCi06MTA1NTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVCCi06MTA1NTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCi06MTA1NTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNCCi06MTA1NTcwMDAwOEMxMDhEMDA4RDAwOERGMDhERjA4RUUwOEVFMDhGREYzCi06MTA1NTgwMDAwOEZEMDkwQzA5MEMwOTFCMDkxQjA5MkEwOTJBMDkzOUZDCi06MTA1NTkwMDAwOTM5MDlBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Ci06MTA1NUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZCCi06MTA1NUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUFBMDlCRjcwCi06MTA1NUMwMDAwOUJGMDlEMDA5RDAwOUUxMDlFMTA5RTIwOUUyMDlFM0NCCi06MTA1NUQwMDAwOUUzMDlFNDA5RTQwOUU1MDlFNTA5RTYwOUU2MDlFNzVCCi06MTA1NUUwMDAwOUU3MDlFODA5RTgwOUU5MDAwMDAwMDAwMDAwMDAwMEY3Ci06MTA1NUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCCi06MTA1NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBCi06MTA1NjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhBCi06MTA1NjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdBCi06MTA1NjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBCi06MTA1NjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVBCi06MTA1NjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRBCi06MTA1NjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBCi06MTA1NjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJBCi06MTA1NjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBCi06MTA1NjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBCi06MTA1NkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCi06MTA1NkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVBCi06MTA1NkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAyMDRDMDEzCi06MTA1NkQwMDAwMDAzMDk4MDAwMDQwRTQwMDAwNTEzMDAwMDA2MTdDMEY3Ci06MTA1NkUwMDAwMDA3MUM4MDAwMDgyMTQwMDAwOTI2MDAwMDBBMkFDMDhCCi06MTA1NkYwMDAwMDBCMkY4MDAwMEMzNDQwMDAwRDM5MDAwMDBFM0RDMDFGCi06MTA1NzAwMDAwMDBGNDI4MDAwMTA0NzQwMDAxMTRDMDAwMDEyNTBDMEIyCi06MTA1NzEwMDAwMDEzNTU4MDAwMTQ1QTQwMDAxNTVGMDAwMDE2NjNDMDQ2Ci06MTA1NzIwMDAwMDE3Njg4MDAwMTg2RDQwMDAxOTcyMDAwMDFBNzZDMERBCi06MTA1NzMwMDAwMDFCN0I4MDAwMUM4MDQwMDAxRDg1MDAwMDFFODlDMDZFCi06MTA1NzQwMDAwMDFGOEU4MDAwMDA5MzQwMDAwMDIwMDAwMDAwNDAwMEY5Ci06MTA1NzUwMDAwMDAwNjAwMDAwMDA4MDAwMDAwMEEwMDAwMDAwQzAwMDA5Ci06MTA1NzYwMDAwMDAwRTAwMDAwMDEwMDAwMDAwMTIwMDAwMDAxNDAwMEY2Ci06MTA1NzcwMDAwMDAxNjAwMDAwMDE4MDAwMDAwMUEwMDAwMDAxQzAwMEU1Ci06MTA1NzgwMDAwMDAxRTAwMDAwMDIwMDAwMDAwMjIwMDAwMDAyNDAwMEQyCi06MTA1NzkwMDAwMDAyNjAwMDAwMDI4MDAwMDAwMkEwMDAwMDAyQzAwMEMxCi06MTA1N0EwMDAwMDAyRTAwMDAwMDMwMDAwMDAwMzIwMDAwMDAzNDAwMEFFCi06MTA1N0IwMDAwMDAzNjAwMDAwMDM4MDAwMDAwM0EwMDAwMDAzQzAwMDlECi06MTA1N0MwMDAwMDAzRTAwMDAwMDQwMDAwMDAwNDIwMDAwMDA0NDAwMDhBCi06MTA1N0QwMDAwMDA0NjAwMDAwMDQ4MDAwMDAwNEEwMDAwMDA0QzAwMDc5Ci06MTA1N0UwMDAwMDA0RTAwMDAwMDUwMDAwMDAwNTIwMDAwMDA1NDAwMDY2Ci06MTA1N0YwMDAwMDA1NjAwMDAwMDU4MDAwMDAwNUEwMDAwMDA1QzAwMDU1Ci06MTA1ODAwMDAwMDA1RTAwMDAwMDYwMDAwMDAwNjIwMDAwMDA2NDAwMDQxCi06MTA1ODEwMDAwMDA2NjAwMDAwMDY4MDAwMDAwNkEwMDAwMDA2QzAwMDMwCi06MTA1ODIwMDAwMDA2RTAwMDAwMDcwMDAwMDAwNzIwMDAwMDA3NDAwMDFECi06MTA1ODMwMDAwMDA3NjAwMDAwMDc4MDAwMDAwN0EwMDAwMDA3QzAwMDBDCi06MTA1ODQwMDAwMDA3RTAwMDAwMDgwMDAwMDAwODIwMDAwMDA4NDAwMEY5Ci06MTA1ODUwMDAwMDA4NjAwMDAwMDg4MDAwMDAwOEEwMDAwMDA4QzAwMEU4Ci06MTA1ODYwMDAwMDA4RTAwMDAwMDkwMDAwMDAwOTIwMDAwMDA5NDAwMEQ1Ci06MTA1ODcwMDAwMDA5NjAwMDAwMDk4MDAwMDAwOUEwMDAwMDA5QzAwMEM0Ci06MTA1ODgwMDAwMDA5RTAwMDAwMEEwMDAwMDAwQTIwMDAwMDBBNDAwMEIxCi06MTA1ODkwMDAwMDBBNjAwMDAwMEE4MDAwMDAwQUEwMDAwMDBBQzAwMEEwCi06MTA1OEEwMDAwMDBBRTAwMDAwMEIwMDAwMDAwQjIwMDAwMDBCNDAwMDhECi06MTA1OEIwMDAwMDBCNjAwMDAwMEI4MDAwMDAwQkEwMDAwMDBCQzAwMDdDCi06MTA1OEMwMDAwMDBCRTAwMDAwMEMwMDAwMDAwQzIwMDAwMDBDNDAwMDY5Ci06MTA1OEQwMDAwMDBDNjAwMDAwMEM4MDAwMDAwQ0EwMDAwMDBDQzAwMDU4Ci06MTA1OEUwMDAwMDBDRTAwMDAwMEQwMDAwMDAwRDIwMDAwMDBENDAwMDQ1Ci06MTA1OEYwMDAwMDBENjAwMDAwMEQ4MDAwMDAwREEwMDAwMDBEQzAwMDM0Ci06MTA1OTAwMDAwMDBERTAwMDAwMEUwMDAwMDAwRTIwMDAwMDBFNDAwMDIwCi06MTA1OTEwMDAwMDBFNjAwMDAwMEU4MDAwMDAwRUEwMDAwMDBFQzAwMDBGCi06MTA1OTIwMDAwMDBFRTAwMDAwMEYwMDAwMDAwRjIwMDAwMDBGNDAwMEZDCi06MTA1OTMwMDAwMDBGNjAwMDAwMEY4MDAwMDAwRkEwMDAwMDBGQzAwMEVCCi06MTA1OTQwMDAwMDBGRTAwMDAwMTAwMDAwMDAxMDIwMDAwMDEwNDAwMEQ4Ci06MTA1OTUwMDAwMDEwNjAwMDAwMTA4MDAwMDAxMEEwMDAwMDEwQzAwMEM3Ci06MTA1OTYwMDAwMDEwRTAwMDAwMTEwMDAwMDAxMTIwMDAwMDExNDAwMEI0Ci06MTA1OTcwMDAwMDExNjAwMDAwMTE4MDAwMDAxMUEwMDAwMDExQzAwMEEzCi06MTA1OTgwMDAwMDExRTAwMDAwMTIwMDAwMDAxMjIwMDAwMDEyNDAwMDkwCi06MTA1OTkwMDAwMDEyNjAwMDAwMTI4MDAwMDAxMkEwMDAwMDEyQzAwMDdGCi06MTA1OUEwMDAwMDEyRTAwMDAwMTMwMDAwMDAxMzIwMDAwMDEzNDAwMDZDCi06MTA1OUIwMDAwMDEzNjAwMDAwMTM4MDAwMDAxM0EwMDAwMDEzQzAwMDVCCi06MTA1OUMwMDAwMDEzRTAwMDAwMTQwMDAwMDAxNDIwMDAwMDE0NDAwMDQ4Ci06MTA1OUQwMDAwMDE0NjAwMDAwMTQ4MDAwMDAxNEEwMDAwMDE0QzAwMDM3Ci06MTA1OUUwMDAwMDE0RTAwMDAwMTUwMDAwMDAxNTIwMDAwMDE1NDAwMDI0Ci06MTA1OUYwMDAwMDE1NjAwMDAwMTU4MDAwMDAxNUEwMDAwMDE1QzAwMDEzCi06MTA1QTAwMDAwMDE1RTAwMDAwMTYwMDAwMDAxNjIwMDAwMDE2NDAwMEZGCi06MTA1QTEwMDAwMDE2NjAwMDAwMTY4MDAwMDAxNkEwMDAwMDE2QzAwMEVFCi06MTA1QTIwMDAwMDE2RTAwMDAwMTcwMDAwMDAxNzIwMDAwMDE3NDAwMERCCi06MTA1QTMwMDAwMDE3NjAwMDAwMTc4MDAwMDAxN0EwMDAwMDE3QzAwMENBCi06MTA1QTQwMDAwMDE3RTAwMDAwMTgwMDAwMDAxODIwMDAwMDE4NDAwMEI3Ci06MTA1QTUwMDAwMDE4NjAwMDAwMTg4MDAwMDAxOEEwMDAwMDE4QzAwMEE2Ci06MTA1QTYwMDAwMDE4RTAwMDAwMTkwMDAwMDAxOTIwMDAwMDE5NDAwMDkzCi06MTA1QTcwMDAwMDE5NjAwMDAwMTk4MDAwMDAxOUEwMDAwMDE5QzAwMDgyCi06MTA1QTgwMDAwMDE5RTAwMDAwMUEwMDAwMDAxQTIwMDAwMDFBNDAwMDZGCi06MTA1QTkwMDAwMDFBNjAwMDAwMUE4MDAwMDAxQUEwMDAwMDFBQzAwMDVFCi06MTA1QUEwMDAwMDFBRTAwMDAwMUIwMDAwMDAxQjIwMDAwMDFCNDAwMDRCCi06MTA1QUIwMDAwMDFCNjAwMDAwMUI4MDAwMDAxQkEwMDAwMDFCQzAwMDNBCi06MTA1QUMwMDAwMDFCRTAwMDAwMUMwMDAwMDAxQzIwMDAwMDFDNDAwMDI3Ci06MTA1QUQwMDAwMDFDNjAwMDAwMUM4MDAwMDAxQ0EwMDAwMDFDQzAwMDE2Ci06MTA1QUUwMDAwMDFDRTAwMDAwMUQwMDAwMDAxRDIwMDAwMDFENDAwMDAzCi06MTA1QUYwMDAwMDFENjAwMDAwMUQ4MDAwMDAxREEwMDAwMDFEQzAwMEYyCi06MTA1QjAwMDAwMDFERTAwMDAwMUUwMDAwMDAxRTIwMDAwMDFFNDAwMERFCi06MTA1QjEwMDAwMDFFNjAwMDAwMUU4MDAwMDAxRUEwMDAwMDFFQzAwMENECi06MTA1QjIwMDAwMDFFRTAwMDAwMUYwMDAwMDAxRjIwMDAwMDFGNDAwMEJBCi06MTA1QjMwMDAwMDFGNjAwMDAwMUY4MDAwMDAxRkEwMDAwMDFGQzAwMEE5Ci06MTA1QjQwMDAwMDFGRTAwMDAwMjAwMDAwMDAyMDIwMDAwMDIwNDAwMDk2Ci06MTA1QjUwMDAwMDIwNjAwMDAwMjA4MDAwMDAyMEEwMDAwMDIwQzAwMDg1Ci06MTA1QjYwMDAwMDIwRTAwMDAwMjEwMDAwMDAyMTIwMDAwMDIxNDAwMDcyCi06MTA1QjcwMDAwMDIxNjAwMDAwMjE4MDAwMDAyMUEwMDAwMDIxQzAwMDYxCi06MTA1QjgwMDAwMDIxRTAwMDAwMjIwMDAwMDAyMjIwMDAwMDIyNDAwMDRFCi06MTA1QjkwMDAwMDIyNjAwMDAwMjI4MDAwMDAyMkEwMDAwMDIyQzAwMDNECi06MTA1QkEwMDAwMDIyRTAwMDAwMjMwMDAwMDAyMzIwMDAwMDIzNDAwMDJBCi06MTA1QkIwMDAwMDIzNjAwMDAwMjM4MDAwMDAyM0EwMDAwMDIzQzAwMDE5Ci06MTA1QkMwMDAwMDIzRTAwMDAwMjQwMDAwMDAyNDIwMDAwMDI0NDAwMDA2Ci06MTA1QkQwMDAwMDI0NjAwMDAwMjQ4MDAwMDAyNEEwMDAwMDI0QzAwMEY1Ci06MTA1QkUwMDAwMDI0RTAwMDAwMjUwMDAwMDAyNTIwMDAwMDI1NDAwMEUyCi06MTA1QkYwMDAwMDI1NjAwMDAwMjU4MDAwMDAyNUEwMDAwMDI1QzAwMEQxCi06MTA1QzAwMDAwMDI1RTAwMDAwMjYwMDAwMDAyNjIwMDAwMDI2NDAwMEJECi06MTA1QzEwMDAwMDI2NjAwMDAwMjY4MDAwMDAyNkEwMDAwMDI2QzAwMEFDCi06MTA1QzIwMDAwMDI2RTAwMDAwMjcwMDAwMDAyNzIwMDAwMDI3NDAwMDk5Ci06MTA1QzMwMDAwMDI3NjAwMDAwMjc4MDAwMDAyN0EwMDAwMDI3QzAwMDg4Ci06MTA1QzQwMDAwMDI3RTAwMDAwMjgwMDAwMDAyODIwMDAwMDI4NDAwMDc1Ci06MTA1QzUwMDAwMDI4NjAwMDAwMjg4MDAwMDAyOEEwMDAwMDI4QzAwMDY0Ci06MTA1QzYwMDAwMDI4RTAwMDAwMjkwMDAwMDAyOTIwMDAwMDI5NDAwMDUxCi06MTA1QzcwMDAwMDI5NjAwMDAwMjk4MDAwMDAyOUEwMDAwMDI5QzAwMDQwCi06MTA1QzgwMDAwMDI5RTAwMDAwMkEwMDAwMDAyQTIwMDAwMDJBNDAwMDJECi06MTA1QzkwMDAwMDJBNjAwMDAwMkE4MDAwMDAyQUEwMDAwMDJBQzAwMDFDCi06MTA1Q0EwMDAwMDJBRTAwMDAwMkIwMDAwMDAyQjIwMDAwMDJCNDAwMDA5Ci06MTA1Q0IwMDAwMDJCNjAwMDAwMkI4MDAwMDAyQkEwMDAwMDJCQzAwMEY4Ci06MTA1Q0MwMDAwMDJCRTAwMDAwMkMwMDAwMDAyQzIwMDAwMDJDNDAwMEU1Ci06MTA1Q0QwMDAwMDJDNjAwMDAwMkM4MDAwMDAyQ0EwMDAwMDJDQzAwMEQ0Ci06MTA1Q0UwMDAwMDJDRTAwMDAwMkQwMDAwMDAyRDIwMDAwMDJENDAwMEMxCi06MTA1Q0YwMDAwMDJENjAwMDAwMkQ4MDAwMDAyREEwMDAwMDJEQzAwMEIwCi06MTA1RDAwMDAwMDJERTAwMDAwMkUwMDAwMDAyRTIwMDAwMDJFNDAwMDlDCi06MTA1RDEwMDAwMDJFNjAwMDAwMkU4MDAwMDAyRUEwMDAwMDJFQzAwMDhCCi06MTA1RDIwMDAwMDJFRTAwMDAwMkYwMDAwMDAyRjIwMDAwMDJGNDAwMDc4Ci06MTA1RDMwMDAwMDJGNjAwMDAwMkY4MDAwMDAyRkEwMDAwMDJGQzAwMDY3Ci06MTA1RDQwMDAwMDJGRTAwMDAwMzAwMDAwMDAzMDIwMDAwMDMwNDAwMDU0Ci06MTA1RDUwMDAwMDMwNjAwMDAwMzA4MDAwMDAzMEEwMDAwMDMwQzAwMDQzCi06MTA1RDYwMDAwMDMwRTAwMDAwMzEwMDAwMDAzMTIwMDAwMDMxNDAwMDMwCi06MTA1RDcwMDAwMDMxNjAwMDAwMzE4MDAwMDAzMUEwMDAwMDMxQzAwMDFGCi06MTA1RDgwMDAwMDMxRTAwMDAwMzIwMDAwMDAzMjIwMDAwMDMyNDAwMDBDCi06MTA1RDkwMDAwMDMyNjAwMDAwMzI4MDAwMDAzMkEwMDAwMDMyQzAwMEZCCi06MTA1REEwMDAwMDMyRTAwMDAwMzMwMDAwMDAzMzIwMDAwMDMzNDAwMEU4Ci06MTA1REIwMDAwMDMzNjAwMDAwMzM4MDAwMDAzM0EwMDAwMDMzQzAwMEQ3Ci06MTA1REMwMDAwMDMzRTAwMDAwMzQwMDAwMDAzNDIwMDAwMDM0NDAwMEM0Ci06MTA1REQwMDAwMDM0NjAwMDAwMzQ4MDAwMDAzNEEwMDAwMDM0QzAwMEIzCi06MTA1REUwMDAwMDM0RTAwMDAwMzUwMDAwMDAzNTIwMDAwMDM1NDAwMEEwCi06MTA1REYwMDAwMDM1NjAwMDAwMzU4MDAwMDAzNUEwMDAwMDM1QzAwMDhGCi06MTA1RTAwMDAwMDM1RTAwMDAwMzYwMDAwMDAzNjIwMDAwMDM2NDAwMDdCCi06MTA1RTEwMDAwMDM2NjAwMDAwMzY4MDAwMDAzNkEwMDAwMDM2QzAwMDZBCi06MTA1RTIwMDAwMDM2RTAwMDAwMzcwMDAwMDAzNzIwMDAwMDM3NDAwMDU3Ci06MTA1RTMwMDAwMDM3NjAwMDAwMzc4MDAwMDAzN0EwMDAwMDM3QzAwMDQ2Ci06MTA1RTQwMDAwMDM3RTAwMDAwMzgwMDAwMDAzODIwMDAwMDM4NDAwMDMzCi06MTA1RTUwMDAwMDM4NjAwMDAwMzg4MDAwMDAzOEEwMDAwMDM4QzAwMDIyCi06MTA1RTYwMDAwMDM4RTAwMDAwMzkwMDAwMDAzOTIwMDAwMDM5NDAwMDBGCi06MTA1RTcwMDAwMDM5NjAwMDAwMzk4MDAwMDAzOUEwMDAwMDM5QzAwMEZFCi06MTA1RTgwMDAwMDM5RTAwMDAwM0EwMDAwMDAzQTIwMDAwMDNBNDAwMEVCCi06MTA1RTkwMDAwMDNBNjAwMDAwM0E4MDAwMDAzQUEwMDAwMDNBQzAwMERBCi06MTA1RUEwMDAwMDNBRTAwMDAwM0IwMDAwMDAzQjIwMDAwMDNCNDAwMEM3Ci06MTA1RUIwMDAwMDNCNjAwMDAwM0I4MDAwMDAzQkEwMDAwMDNCQzAwMEI2Ci06MTA1RUMwMDAwMDNCRTAwMDAwM0MwMDAwMDAzQzIwMDAwMDNDNDAwMEEzCi06MTA1RUQwMDAwMDNDNjAwMDAwM0M4MDAwMDAzQ0EwMDAwMDNDQzAwMDkyCi06MTA1RUUwMDAwMDNDRTAwMDAwM0QwMDAwMDAzRDIwMDAwMDNENDAwMDdGCi06MTA1RUYwMDAwMDNENjAwMDAwM0Q4MDAwMDAzREEwMDAwMDNEQzAwMDZFCi06MTA1RjAwMDAwMDNERTAwMDAwM0UwMDAwMDAzRTIwMDAwMDNFNDAwMDVBCi06MTA1RjEwMDAwMDNFNjAwMDAwM0U4MDAwMDAzRUEwMDAwMDNFQzAwMDQ5Ci06MTA1RjIwMDAwMDNFRTAwMDAwM0YwMDAwMDAzRjIwMDAwMDNGNDAwMDM2Ci06MTA1RjMwMDAwMDNGNjAwMDAwM0Y4MDAwMDAzRkEwMDAwMDNGQzAwMDI1Ci06MTA1RjQwMDAwMDNGRTAwMDAwM0ZFMDAxMDAwMDAwMDAwMDAwMDFGRjEyCi06MTA1RjUwMDAwMDAwMDIwMDAwMDA3RkY4MDAwMDdGRjgwMDAwMDE0MDEwCi06MTA1RjYwMDAwMDAwMzUwMDAwMDAwMDAxMDAwMEZGMDAwMDAwMDAwMEZDCi06MTA1RjcwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDIzCi06MTA1RjgwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDEzCi06MTA1RjkwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAzCi06MTA1RkEwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMDAwMDAxNDBBRkYwMEQ1Ci06MTA1RkIwMDAwMDAwMDAwMTAwMDAwMDAwMDAyMDEwMDEwMDAwMDAwMEFGCi06MTA1RkMwMDAwMTAwOTAwMDAwMDAwMTAwMDAwMDkwMDIwMDAwOTAwNDE5Ci06MTA1RkQwMDAwMDAwOTAwNjAwMDA5MDA4MDAwMDkwMEEwMDAwOTAwQzVECi06MTA1RkUwMDAwMDAwOTAwRTAwMDA5MDEwMDAwMDkwMTIwMDAwOTAxNDJECi06MTA1RkYwMDAwMDAwOTAxNjAwMDA5MDE4MDAwMDkwMUEwMDAwOTAxQ0ZECi06MTA2MDAwMDAwMDAwOTAxRTAwMDA5MDIwMDAwMDkwMjIwMDAwOTAyNENDCi06MTA2MDEwMDAwMDAwOTAyNjAwMDA5MDI4MDAwMDkwMkEwMDAwOTAyQzlDCi06MTA2MDIwMDAwMDAwOTAyRTAwMDA5MDMwMDAwMDkwMzIwMDAwOTAzNDZDCi06MTA2MDMwMDAwMDAwOTAzNjAwMDA5MDM4MDAwMDkwM0EwMDAwOTAzQzNDCi06MTA2MDQwMDAwMDAwOTAzRTAwMDA5MDQwMDAwMDkwNDIwMDAwOTA0NDBDCi06MTA2MDUwMDAwMDAwOTA0NjAwMDA5MDQ4MDAwMDkwNEEwMDAwOTA0Q0RDCi06MTA2MDYwMDAwMDAwOTA0RTAwMDA5MDUwMDAwMDkwNTIwMDAwOTA1NEFDCi06MTA2MDcwMDAwMDAwOTA1NjAwMDA5MDU4MDAwMDkwNUEwMDAwOTA1QzdDCi06MTA2MDgwMDAwMDAwOTA1RTAwMDA5MDYwMDAwMDkwNjIwMDAwOTA2NDRDCi06MTA2MDkwMDAwMDAwOTA2NjAwMDA5MDY4MDAwMDkwNkEwMDAwOTA2QzFDCi06MTA2MEEwMDAwMDAwOTA2RTAwMDA5MDcwMDAwMDkwNzIwMDAwOTA3NEVDCi06MTA2MEIwMDAwMDAwOTA3NjAwMDA5MDc4MDAwMDkwN0EwMDAwOTA3Q0JDCi06MTA2MEMwMDAwMDAwOTA3RTAwMDA5MDgwMDAwMDkwODIwMDAwOTA4NDhDCi06MTA2MEQwMDAwMDAwOTA4NjAwMDA5MDg4MDAwMDkwOEEwMDAwOTA4QzVDCi06MTA2MEUwMDAwMDAwOTA4RTAwMDA5MDkwMDAwMDkwOTIwMDAwOTA5NDJDCi06MTA2MEYwMDAwMDAwOTA5NjAwMDA5MDk4MDAwMDkwOUEwMDAwOTA5Q0ZDCi06MTA2MTAwMDAwMDAwOTA5RTAwMDA5MEEwMDAwMDkwQTIwMDAwOTBBNENCCi06MTA2MTEwMDAwMDAwOTBBNjAwMDA5MEE4MDAwMDkwQUEwMDAwOTBBQzlCCi06MTA2MTIwMDAwMDAwOTBBRTAwMDA5MEIwMDAwMDkwQjIwMDAwOTBCNDZCCi06MTA2MTMwMDAwMDAwOTBCNjAwMDA5MEI4MDAwMDkwQkEwMDAwOTBCQzNCCi06MTA2MTQwMDAwMDAwOTBCRTAwMDA5MEMwMDAwMDkwQzIwMDAwOTBDNDBCCi06MTA2MTUwMDAwMDAwOTBDNjAwMDA5MEM4MDAwMDkwQ0EwMDAwOTBDQ0RCCi06MTA2MTYwMDAwMDAwOTBDRTAwMDA5MEQwMDAwMDkwRDIwMDAwOTBENEFCCi06MTA2MTcwMDAwMDAwOTBENjAwMDA5MEQ4MDAwMDkwREEwMDAwOTBEQzdCCi06MTA2MTgwMDAwMDAwOTBERTAwMDA5MEUwMDAwMDkwRTIwMDAwOTBFNDRCCi06MTA2MTkwMDAwMDAwOTBFNjAwMDA5MEU4MDAwMDkwRUEwMDAwOTBFQzFCCi06MTA2MUEwMDAwMDAwOTBFRTAwMDA5MEYwMDAwMDkwRjIwMDAwOTBGNEVCCi06MTA2MUIwMDAwMDAwOTBGNjAwMDA5MEY4MDAwMDkwRkEwMDAwOTBGQ0JCCi06MTA2MUMwMDAwMDAwOTBGRTAwMDA5MTAwMDAwMDkxMDIwMDAwOTEwNDg4Ci06MTA2MUQwMDAwMDAwOTEwNjAwMDA5MTA4MDAwMDkxMEEwMDAwOTEwQzU3Ci06MTA2MUUwMDAwMDAwOTEwRTAwMDA5MTEwMDAwMDkxMTIwMDAwOTExNDI3Ci06MTA2MUYwMDAwMDAwOTExNjAwMDA5MTE4MDAwMDkxMUEwMDAwOTExQ0Y3Ci06MTA2MjAwMDAwMDAwOTExRTAwMDA5MTIwMDAwMDkxMjIwMDAwOTEyNEM2Ci06MTA2MjEwMDAwMDAwOTEyNjAwMDA5MTI4MDAwMDkxMkEwMDAwOTEyQzk2Ci06MTA2MjIwMDAwMDAwOTEyRTAwMDA5MTMwMDAwMDkxMzIwMDAwOTEzNDY2Ci06MTA2MjMwMDAwMDAwOTEzNjAwMDA5MTM4MDAwMDkxM0EwMDAwOTEzQzM2Ci06MTA2MjQwMDAwMDAwOTEzRTAwMDA5MTQwMDAwMDkxNDIwMDAwOTE0NDA2Ci06MTA2MjUwMDAwMDAwOTE0NjAwMDA5MTQ4MDAwMDkxNEEwMDAwOTE0Q0Q2Ci06MTA2MjYwMDAwMDAwOTE0RTAwMDA5MTUwMDAwMDkxNTIwMDAwOTE1NEE2Ci06MTA2MjcwMDAwMDAwOTE1NjAwMDA5MTU4MDAwMDkxNUEwMDAwOTE1Qzc2Ci06MTA2MjgwMDAwMDAwOTE1RTAwMDA5MTYwMDAwMDkxNjIwMDAwOTE2NDQ2Ci06MTA2MjkwMDAwMDAwOTE2NjAwMDA5MTY4MDAwMDkxNkEwMDAwOTE2QzE2Ci06MTA2MkEwMDAwMDAwOTE2RTAwMDA5MTcwMDAwMDkxNzIwMDAwOTE3NEU2Ci06MTA2MkIwMDAwMDAwOTE3NjAwMDA5MTc4MDAwMDkxN0EwMDAwOTE3Q0I2Ci06MTA2MkMwMDAwMDAwOTE3RTAwMDA5MTgwMDAwMDkxODIwMDAwOTE4NDg2Ci06MTA2MkQwMDAwMDAwOTE4NjAwMDA5MTg4MDAwMDkxOEEwMDAwOTE4QzU2Ci06MTA2MkUwMDAwMDAwOTE4RTAwMDA5MTkwMDAwMDkxOTIwMDAwOTE5NDI2Ci06MTA2MkYwMDAwMDAwOTE5NjAwMDA5MTk4MDAwMDkxOUEwMDAwOTE5Q0Y2Ci06MTA2MzAwMDAwMDAwOTE5RTAwMDA5MUEwMDAwMDkxQTIwMDAwOTFBNEM1Ci06MTA2MzEwMDAwMDAwOTFBNjAwMDA5MUE4MDAwMDkxQUEwMDAwOTFBQzk1Ci06MTA2MzIwMDAwMDAwOTFBRTAwMDA5MUIwMDAwMDkxQjIwMDAwOTFCNDY1Ci06MTA2MzMwMDAwMDAwOTFCNjAwMDA5MUI4MDAwMDkxQkEwMDAwOTFCQzM1Ci06MTA2MzQwMDAwMDAwOTFCRTAwMDA5MUMwMDAwMDkxQzIwMDAwOTFDNDA1Ci06MTA2MzUwMDAwMDAwOTFDNjAwMDA5MUM4MDAwMDkxQ0EwMDAwOTFDQ0Q1Ci06MTA2MzYwMDAwMDAwOTFDRTAwMDA5MUQwMDAwMDkxRDIwMDAwOTFENEE1Ci06MTA2MzcwMDAwMDAwOTFENjAwMDA5MUQ4MDAwMDkxREEwMDAwOTFEQzc1Ci06MTA2MzgwMDAwMDAwOTFERTAwMDA5MUUwMDAwMDkxRTIwMDAwOTFFNDQ1Ci06MTA2MzkwMDAwMDAwOTFFNjAwMDA5MUU4MDAwMDkxRUEwMDAwOTFFQzE1Ci06MTA2M0EwMDAwMDAwOTFFRTAwMDA5MUYwMDAwMDkxRjIwMDAwOTFGNEU1Ci06MTA2M0IwMDAwMDAwOTFGNjAwMDA5MUY4MDAwMDkxRkEwMDAwOTFGQ0I1Ci06MTA2M0MwMDAwMDAwOTFGRUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjRBCi06MTA2M0QwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkNECi06MTA2M0UwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkJECi06MTA2M0YwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkFECi06MTA2NDAwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjlDCi06MTA2NDEwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjhDCi06MTA2NDIwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjdDCi06MTA2NDMwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjZDCi06MTA2NDQwMDBGRkZGRkZGRjAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMEIzCi06MTA2NDUwMDAwMDAwMDAwNTAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMDlBCi06MTA2NDYwMDAwMDAwMDAwNTAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMDhBCi06MTA2NDcwMDAwMDAwMDAwNTAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMDdBCi06MTA2NDgwMDAwMDAwMDAwNTAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMDZBCi06MTA2NDkwMDAwMDAwMDAwNTAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMDVBCi06MTA2NEEwMDAwMDAwMDAwNTAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMDRBCi06MTA2NEIwMDAwMDAwMDAwNTAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMDNBCi06MTA2NEMwMDAwMDAwMDAwNTAwMDAyMDAwMDAwMDQwQzAwMDAwNjE4MEM2Ci06MTA2NEQwMDAwMDAwODI0MDAwMDBBMzAwMDAwMEMzQzAwMDAwRTQ4MDcwCi06MTA2NEUwMDAwMDAxMDU0MDAwMDEyNjAwMDAwMTQ2QzAwMDAxNjc4MDUwCi06MTA2NEYwMDAwMDAxODg0MDAwMDFBOTAwMDAwMUM5QzAwMDAxRUE4MDM0Ci06MTA2NTAwMDAwMDAyMEI0MDAwMDIyQzAwMDAwMjRDQzAwMDAyNkQ4MDEzCi06MTA2NTEwMDAwMDAyOEU0MDAwMDJBRjAwMDAwMkNGQzAwMDAyRjA4MEY3Ci06MTA2NTIwMDAwMDAwMTE0MDAwMDA4MDAwMDAwMTAzODAwMDAxODcwMDhFCi06MTA2NTMwMDAwMDAyMEE4MDAwMDI4RTAwMDAwMzExODAwMDAzOTUwMDEzCi06MTA2NTQwMDAwMDA0MTg4MDAwMDQ5QzAwMDAwNTFGODAwMDA1QTMwMEMzCi06MTA2NTUwMDAwMDA2MjY4MDAwMDZBQTAwMDAwNzJEODAwMDA3QjEwMDczCi06MTA2NTYwMDAwMDA4MzQ4MDAwMDhCODAwMDAwOTNCODAwMDA5QkYwMDIzCi06MTA2NTcwMDAwMDBBNDI4MDAwMEFDNjAwMDAwQjQ5ODAwMDBCQ0QwMEQzCi06MTA2NTgwMDAwMDBDNTA4MDAwMENENDAwMDAwRDU3ODAwMDAwNUIwMDEwCi06MTA2NTkwMDAwMDAwN0ZGODAwMDA3RkY4MDAwMDAwRDUwMDAwMTUwMDIzCi06MTA2NUEwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEVECi06MTA2NUIwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMERECi06MTA2NUMwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMENECi06MTA2NUQwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEJECi06MTA2NUUwMDAwMDAwMTkwMDAwMDAwMDAwMDAwMDAwMDBGRkZGRkZGRjk2Ci06MTA2NUYwMDAwMDAwMDAwMDAzOTM4NzAwMDAwMDAwMDAwMzkzODcwMDYxCi06MTA2NjAwMDAwMDAwN0ZGODAwMDA3RkY4MDAwMDA2OEUwMDAwMzUwMEQzCi06MTA2NjEwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjY0Ci06MTA2NjIwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDYxCi06MTA2NjMwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjQ0Ci06MTA2NjQwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDQxCi06MTA2NjUwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjI0Ci06MTA2NjYwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjE0Ci06MTA2NjcwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDExCi06MTA2NjgwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRkY0Ci06MTA2NjkwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMEYxCi06MTA2NkEwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkQ0Ci06MTA2NkIwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRkM0Ci06MTA2NkMwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEMxCi06MTA2NkQwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRkE0Ci06MTA2NkUwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMEExCi06MTA2NkYwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjg0Ci06MTA2NzAwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjczCi06MTA2NzEwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDcwCi06MTA2NzIwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjUzCi06MTA2NzMwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDUwCi06MTA2NzQwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjMzCi06MTA2NzUwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjIzCi06MTA2NzYwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDIwCi06MTA2NzcwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjAzCi06MTA2NzgwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwCi06MTA2NzkwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkUzCi06MTA2N0EwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRkQzCi06MTA2N0IwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEQwCi06MTA2N0MwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRkIzCi06MTA2N0QwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMEIwCi06MTA2N0UwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjkzCi06MTA2N0YwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjgzCi06MTA2ODAwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDdGCi06MTA2ODEwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjYyCi06MTA2ODIwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDVGCi06MTA2ODMwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjQyCi06MTA2ODQwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjMyCi06MTA2ODUwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDJGCi06MTA2ODYwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjEyCi06MTA2ODcwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDBGCi06MTA2ODgwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkYyCi06MTA2ODkwMDAwMDAwMDBGRjAwMDAwMEZGMDAwMDAwRkYwMDAwMDBGRkZDCi06MTA2OEEwMDAwMDAwMDBGRjAwMDAwMEZGMDAwMDAwRkYwMDAwMDBGRkVDCi06MTA2OEIwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMERBCi06MTA2OEMwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMENBCi06MTA2OEQwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEJBCi06MTA2OEUwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEFBCi06MTA2OEYwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkE4Ci06MTA2OTAwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjk3Ci06MTA2OTEwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjg3Ci06MTA2OTIwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjc3Ci06MTA2OTMwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjY3Ci06MTA2OTQwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjU3Ci06MTA2OTUwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjQ3Ci06MTA2OTYwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjM3Ci06MTA2OTcwMDAwMDAwMTAwMDAwMDAyMDgwMDAwMDMxMDAwMDAwNDE4MDc1Ci06MTA2OTgwMDAwMDAwNTIwMDAwMDA2MjgwMDAwMDczMDAwMDAwODM4MDVECi06MTA2OTkwMDAwMDAwOTQwMDAwMDBBNDgwMDAwMEI1MDAwMDAwQzU4MDQ1Ci06MTA2OUEwMDAwMDAwRDYwMDAwMDBFNjgwMDAwMEY3MDAwMDAxMDc4MDJDCi06MTA2OUIwMDAwMDAxMTgwMDAwMDEyODgwMDAwMTM5MDAwMDAxNDk4MDExCi06MTA2OUMwMDAwMDAxNUEwMDAwMDE2QTgwMDAwMTdCMDAwMDAxOEI4MEY5Ci06MTA2OUQwMDAwMDAxOUMwMDAwMDFBQzgwMDAwMUJEMDAwMDAxQ0Q4MEUxCi06MTA2OUUwMDAwMDAxREUwMDAwMDFFRTgwMDAwMUZGMDAwMDAwMEY4MENBCi06MTA2OUYwMDAwMDAwN0ZGODAwMDA3RkY4MDAwMDAzNDQwMDAwMzUwMDJECi06MTA2QTAwMDAxMDAwMDAwMDAwMDAyOEFEMDAwMTAwMDEwMDA1MDIwNjkyCi06MTA2QTEwMDBDQ0NDQ0NDNUZGRkZGRkZGRkZGRkZGRkY3MDU4MTAzQzQxCi06MTA2QTIwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDY4Ci06MTA2QTMwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDU4Ci06MTA2QTQwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDQ4Ci06MTA2QTUwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDM4Ci06MTA2QTYwMDAwMDAwMDAwMDAwMDAwMDAxQ0NDQzAyMDFDQ0NDQ0NDQzVBCi06MTA2QTcwMDBDQ0NDMDIwMUNDQ0NDQ0NDQ0NDQzAyMDFDQ0NDQ0NDQzgwCi06MTA2QTgwMDBDQ0NDMDIwMUNDQ0NDQ0NDQ0NDQzAyMDFDQ0NDQ0NDQzcwCi06MTA2QTkwMDBDQ0NDMDIwMUNDQ0NDQ0NDQ0NDQzAyMDFDQ0NDQ0NDQzYwCi06MTA2QUEwMDBDQ0NDMDIwMUNDQ0NDQ0NDMDAwMDAwMDBGRkZGRkZGRjFGCi06MTA2QUIwMDAwMDBFMDAwMDAxMTYwMEQ2MDAyNjI1QTAwMDI2MjVBMDA1Ci06MTA2QUMwMDAwMDI2MjVBMDAwMjYyNUEwMDA3MjAwMDAwMTIzMDBGMzY3Ci06MTA2QUQwMDAwMDI2MjVBMDAwMjYyNUEwMDAyNjI1QTAwMDI2MjVBMDBBCi06MTA2QUUwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEFBCi06MTA2QUYwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDlBCi06MTA2QjAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDg5Ci06MTA2QjEwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDc5Ci06MTA2QjIwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDY5Ci06MTA2QjMwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDU5Ci06MTA2QjQwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDQ5Ci06MTA2QjUwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDM5Ci06MTA2QjYwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDI5Ci06MTA2QjcwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDE5Ci06MTA2QjgwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDA5Ci06MTA2QjkwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEY5Ci06MTA2QkEwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEU5Ci06MTA2QkIwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEQ5Ci06MTA2QkMwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEM5Ci06MTA2QkQwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEI5Ci06MTA2QkUwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEE5Ci06MTA2QkYwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDk5Ci06MTA2QzAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDg4Ci06MTA2QzEwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDc4Ci06MTA2QzIwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDY4Ci06MTA2QzMwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDU4Ci06MTA2QzQwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDQ4Ci06MTA2QzUwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDM4Ci06MTA2QzYwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDI4Ci06MTA2QzcwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDE4Ci06MTA2QzgwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDA4Ci06MTA2QzkwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEY4Ci06MTA2Q0EwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEU4Ci06MTA2Q0IwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEQ4Ci06MTA2Q0MwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEM4Ci06MTA2Q0QwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEI4Ci06MTA2Q0UwMDBGRkZGRkZGMzMxOEZGRkZGMEMzMEMzMENDMzBDMzBDMzI5Ci06MTA2Q0YwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDY2Ci06MTA2RDAwMDBGRkZGRkZGMTMwRUZGRkZGMEMzMEMzMENDMzBDMzBDM0FCCi06MTA2RDEwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDQ0Ci06MTA2RDIwMDBGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMENDMzBDMzBDMzE2Ci06MTA2RDMwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDIzCi06MTA2RDQwMDBGRkZGRjQwNjFDQkZGRkZGMEMzMEMzMDVDMzBDMzBDM0FDCi06MTA2RDUwMDBDRjMwMDAxNEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREVDCi06MTA2RDYwMDBGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0VBCi06MTA2RDcwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDRERECi06MTA2RDgwMDBGRkZGRkZGQTMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0UyCi06MTA2RDkwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREI1Ci06MTA2REEwMDBGRkZGRkZGNzMxRUZGRkZGMEMzMEMzMENDMzBDMzBDMzA0Ci06MTA2REIwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDRDg1Ci06MTA2REMwMDBGRkZGRkZGNTMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0E3Ci06MTA2REQwMDBDRjNDRjMwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDQ1Ci06MTA2REUwMDBGRkZGRkZGMzMxOEZGRkZGMEMzMEMzMENDMzBDMzBDMzI4Ci06MTA2REYwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDY1Ci06MTA2RTAwMDBGRkZGRkZGMTMxMEZGRkZGMEMzMEMzMENDMzBDMzBDMzg5Ci06MTA2RTEwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDQzCi06MTA2RTIwMDBGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMENDMzBDMzBDMzE1Ci06MTA2RTMwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDIyCi06MTA2RTQwMDBGRkZGRjQwNjFDQkZGRkZGMEMzMEMzMDVDMzBDMzBDM0FCCi06MTA2RTUwMDBDRjMwMDAxNEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREVCCi06MTA2RTYwMDBGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0U5Ci06MTA2RTcwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDRERDCi06MTA2RTgwMDBGRkZGRkZGQTMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0UxCi06MTA2RTkwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREI0Ci06MTA2RUEwMDBGRkZGRkZGNzMwRUZGRkZGMEMzMEMzMENDMzBDMzBDMzA0Ci06MTA2RUIwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDRDg0Ci06MTA2RUMwMDBGRkZGRkZGNTMwNEZGRkZGMEMzMEMzMENDMzBDMzBDMzg2Ci06MTA2RUQwMDBDRjNDRjMwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDQ0Ci06MTA2RUUwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0RDCi06MTA2RUYwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDk4Ci06MTA2RjAwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0JCCi06MTA2RjEwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDc2Ci06MTA2RjIwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzlCCi06MTA2RjMwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDU1Ci06MTA2RjQwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzdCCi06MTA2RjUwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDRDMzCi06MTA2RjYwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzVCCi06MTA2RjcwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDRDBGCi06MTA2RjgwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzNCCi06MTA2RjkwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREU3Ci06MTA2RkEwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzFCCi06MTA2RkIwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREI3Ci06MTA2RkMwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0ZCCi06MTA2RkQwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDc3Ci06MTA2RkUwMDBGRkZGRkZGMzMyMEZGRkZGMEMzMEMzMENDMzBDMzBDM0E1Ci06MTA2RkYwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDYzCi06MTA3MDAwMDBGRkZGRkZGMTMxMEZGRkZGMEMzMEMzMENDMzBDMzBDMzg3Ci06MTA3MDEwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDQxCi06MTA3MDIwMDBGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMENDMzBDMzBDMzEzCi06MTA3MDMwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDIwCi06MTA3MDQwMDBGRkZGRjQwNjFDQkZGRkZGMEMzMEMzMDVDMzBDMzBDM0E5Ci06MTA3MDUwMDBDRjMwMDAxNEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREU5Ci06MTA3MDYwMDBGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0U3Ci06MTA3MDcwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDRERBCi06MTA3MDgwMDBGRkZGRkY4QTA0MkZGRkZGMEMzMEMzMENDMzBDMzBDMzdCCi06MTA3MDkwMDBDRjNDQzAwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREU1Ci06MTA3MEEwMDBGRkZGRkY5NzA1Q0ZGRkZGMEMzMEMzMENDMzBDMzBDM0FECi06MTA3MEIwMDBDRjNDQzAwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREI1Ci06MTA3MEMwMDBGRkZGRkZGNTMxMEZGRkZGMEMzMEMzMENDMzBDMzBDM0MzCi06MTA3MEQwMDBDRjNDRjMwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDQyCi06MTA3MEUwMDBGRkZGRkZGMzMyMEZGRkZGMEMzMEMzMENDMzBDMzBDM0E0Ci06MTA3MEYwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDYyCi06MTA3MTAwMDBGRkZGRkZGMTMwMkZGRkZGMEMzMEMzMENDMzBDMzBDMzY3Ci06MTA3MTEwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDQwCi06MTA3MTIwMDBGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMENDMzBDMzBDMzEyCi06MTA3MTMwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDFGCi06MTA3MTQwMDBGRkZGRkYwNjFDQkZGRkZGMEMzMEMzMENDMzBDMzBDMzk2Ci06MTA3MTUwMDBDRjNDQzAxNEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDRDFDCi06MTA3MTYwMDBGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0U2Ci06MTA3MTcwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDREQ5Ci06MTA3MTgwMDBGRkZGRkZGQTMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0RFCi06MTA3MTkwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREIxCi06MTA3MUEwMDBGRkZGRkZGNzMxQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzIwCi06MTA3MUIwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDRDgxCi06MTA3MUMwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0Y5Ci06MTA3MUQwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDc1Ci06MTA3MUUwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0Q5Ci06MTA3MUYwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDk1Ci06MTA3MjAwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0I4Ci06MTA3MjEwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDczCi06MTA3MjIwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzk4Ci06MTA3MjMwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDUyCi06MTA3MjQwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzc4Ci06MTA3MjUwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDRDMwCi06MTA3MjYwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzU4Ci06MTA3MjcwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDRDBDCi06MTA3MjgwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzM4Ci06MTA3MjkwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREU0Ci06MTA3MkEwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzE4Ci06MTA3MkIwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREI0Ci06MTA3MkMwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0Y4Ci06MTA3MkQwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDc0Ci06MTA3MkUwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0Q4Ci06MTA3MkYwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDk0Ci06MTA3MzAwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0I3Ci06MTA3MzEwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDcyCi06MTA3MzIwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzk3Ci06MTA3MzMwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDUxCi06MTA3MzQwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzc3Ci06MTA3MzUwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDRDJGCi06MTA3MzYwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzU3Ci06MTA3MzcwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDRDBCCi06MTA3MzgwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzM3Ci06MTA3MzkwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREUzCi06MTA3M0EwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzE3Ci06MTA3M0IwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREIzCi06MTA3M0MwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0Y3Ci06MTA3M0QwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDczCi06MTA3M0UwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0Q3Ci06MTA3M0YwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDkzCi06MTA3NDAwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0I2Ci06MTA3NDEwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDcxCi06MTA3NDIwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzk2Ci06MTA3NDMwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDUwCi06MTA3NDQwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzc2Ci06MTA3NDUwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDRDJFCi06MTA3NDYwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzU2Ci06MTA3NDcwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDRDBBCi06MTA3NDgwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzM2Ci06MTA3NDkwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREUyCi06MTA3NEEwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzE2Ci06MTA3NEIwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREIyCi06MTA3NEMwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0Y2Ci06MTA3NEQwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDcyCi06MTA3NEUwMDAwMDBDMDAwMDAwMDcwMEMwMDAwMjgxMzAwMDBCODE1ODMyCi06MTA3NEYwMDAwMDAyMDIxMDAwMDEwMjMwMDAwRjAyNDAwMDAxMDMzMEMwCi06MTA3NTAwMDAwMDBDMDAwMDAwMDgwMEMwMDAwMjgxNDAwMDBCODE2OEYwCi06MTA3NTEwMDAwMDAyMDIyMDAwMDEwMjQwMDAwNzAyNTAwMDAyMDJDMEU3Ci06MTA3NTIwMDAwMDEwMDAwMDAwMDgwMTAwMDAwMjgxODAwMDBCODFBODBCCi06MTA3NTMwMDAwMDAyMDI2MDAwMDE4MjgwMDAwRTgyOTgwMDA4MDM4MDMxCi06MTA3NTQwMDAwMDEwMDAwMDAwMDEwMTAwMDAwMjgxMTAwMDA5MDEzODU0Ci06MTA3NTUwMDAwMDAyMDFDODAwMDEwMUU4MDAwRTAxRjgwMDAwMDJEODk1Ci06MTA3NTYwMDBDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQzVCCi06MTA3NTcwMDAwMDAwMjAwMENDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQzVCCi06MTA3NTgwMDBDQ0NDQ0NDQzAwMDAyMDAwQ0NDQ0NDQ0NDQ0NDQ0NDQzRCCi06MTA3NTkwMDBDQ0NDQ0NDQ0NDQ0NDQ0NDMDQwMDIwMDAwMDAwMDAwMDY3Ci06MTA3NUEwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkZCNTFDRkMwRjAwMzUwCi06MTA3NUIwMDA4QUI3QjEzMTMwRUNFNjQ0RjBFOTgxNTkxODE4MThGODZGCi06MTA3NUMwMDA5OUM4RDdCRjExNjhDMDRFMjBCRTAxQzQwNzU5NDhENzFCCi06MTA3NUQwMDA3RjU1MUFDMTVFMjZDOUMwNzAwQTg4Mjc4ODMzMzBCNDI3Ci06MTA3NUUwMDA0QTIxQzRFRDY1MTgxOEVFMDFGOTJCQTE2MjcyNDAzREU1Ci06MTA3NUYwMDA3M0E0Qzk3N0YzMjgxRTNDQjhEMDE0OTUxRjYyMENBMTYwCi06MTA3NjAwMDA1Rjk4NDBFODIyMzRGOTUwQThCQ0I4MUU4NDJFMzZDNUQ1Ci06MTA3NjEwMDA2RUFFODQxRTcxRjZBN0E5QTBGMkJENTVGMEFCQ0ZENTEyCi06MTA3NjIwMDA0MEU1QzdBMkE5MEY4MUYyMDE3RUU5QjIzNEQ4MDMwMDc4Ci06MTA3NjMwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDk4Ci06MTA3NjQwMDAwMDBCRUQ3RDBCNzQ1NUQ1QjVFOERBOUZCM0NGRkY2NDIxCi06MTA3NjUwMDAyNzg0NzAxMjNFRUVDNDAwQzEwNjNDNDI4MEEwQTgzQkM1Ci06MTA3NjYwMDBGQzFBN0RENDFFMTAyNUU1QTExQzQ0NkIwMDQ5MjJBNkZFCi06MTA3NjcwMDBENzhDOTZENzZDQzg4NzA0NTBFM0U3NTFCRDQ1N0JBMEYzCi06MTA3NjgwMDBEODhCMEU1QkEzQTY4QUJEQjQzRDg4N0FBOUMzREIyMjQyCi06MTA3NjkwMDA1QUE1MkQ3QTgzRkEyQzU4QTBCMTU3MkFCRDRGQ0I1QjNGCi06MTA3NkEwMDA3M0FFQjU5MkJENzdDRUM5Qzc0RjQ3RUY3ODhENDM3NjlECi06MTA3NkIwMDBENkRFRUIzQkZGNkJDRUI5NTYzNEQ5NDNGMjJFMjdFNDJFCi06MTA3NkMwMDAxQ0ZDRDBBNzI5MTE0MkE2RjczREM5MkQ1OTMyQzkyMzY4Ci06MTA3NkQwMDBFNDFCM0U4MjNGMUZGOTIzNTM0ODE2MjEwRDNFRjZCQ0EyCi06MTA3NkUwMDAzRDEwRDkwNUNGMkQ4RDg0QTQyNkMyRjc3MTQ5MTIyMUYyCi06MTA3NkYwMDAyNDQ4NDg4OTlBMEIyRDAyQjE4NzBCRTE1OTc3NjE3Q0E4Ci06MTA3NzAwMDAzMjNFNjdDMjMzODdDODg0OEM4NEYyMThGREJEMjBFQkZCCi06MTA3NzEwMDBGQjlDNDJGRjM5OUFBODgwRjExNEY2OEFBOEE0M0M5NkYzCi06MTA3NzIwMDBDMkY2REYyMjY0NDZERjNDNDhERDU3RjU3OEI4NkZERUVECi06MTA3NzMwMDBFRUE3QTI2QjI0QzVFQjlFODM3Rjk0RTU1OTg5NTBFNkEyCi06MTA3NzQwMDBGQTBENDdBNUM3OUZCN0Q1MUY0RkMyQjkzODJGOTVBOEM3Ci06MTA3NzUwMDAzODJGREU5RTEwOEJEOEU3RTdFRUU3QTM0NkYyRjhGMzZBCi06MTA3NzYwMDBFM0ZCQzMyREQzQjgwMjZFNkQ4RDNFN0NCNjM2RUEyNEEyCi06MTA3NzcwMDBFNTI1ODQzNjMzM0I0QkU5MzM0NENDNURBNUZEREJDREI5Ci06MTA3NzgwMDAyMzEyODcxRjlGMEY4QzYzRDBGQUY0N0Y0MkUxREU5Q0E3Ci06MTA3NzkwMDA0QjkyNDFDMDIxNDkzOEUwRDYxQzVBRUMzM0QzRjQyNzMwCi06MTA3N0EwMDA5RTI0OTdDMkFEODRDRkI5QThGRjdBRkQzMDJGMEEwNzc3Ci06MTA3N0IwMDAzRkNDMkIwRDNDOTdDMkJDQTZGNzlGOTdCRkQ4M0RBRkRGCi06MTA3N0MwMDA2QTYyODdDRjcwRTcxNTk4NDRDODIxQzA4NzZBMTI4MjIxCi06MTA3N0QwMDA3OEI5Q0REMTlGQUM5QjU2Nzc5QUZFMDhBNzBCRDVFMDIwCi06MTA3N0UwMDBFQjFCMjI5RTgyMjU3MkRGRjgwMDA3MjNFMEEwMkY2RjlCCi06MTA3N0YwMDAzNEM3NDk2RjZFQkEwNjc4MjBCRTNBMzg3Q0UyMEFFMzk1Ci06MTA3ODAwMDAwN0FCMEY4RkY0MTk5QTFEOTM4MDM1NjhGMTEwRTAyREE2Ci06MTA3ODEwMDA5RjMwRjhFNTU3QjdERTJBNEYyMTk0RDUzQTBGNEVBMDk2Ci06MTA3ODIwMDBGMENCRUY1RUI5OTA0MEY5RTgxNTI3ODBERjlBQ0JBNjQwCi06MTA3ODMwMDA1NkNFQTVGNUIyQ0I2M0FGMkNBMDRENDIzMTQzMDI3QUIwCi06MTA3ODQwMDBERDBBOUQxNTQwN0Y1RkIzMkE2OEI5MDlGQUEzNjVDQkFECi06MTA3ODUwMDBCQUNBQjQxMDZFQTYwMzZFMTQ3Mjg2NEFDQjFFRjhCNTZGCi06MTA3ODYwMDAyODBERkM0ODJGMUVBNDczREVGRUVEMzNDMUNGNDM2QzAwCi06MTA3ODcwMDBGODQzN0U1RUVGQTBDQjhDNzhCRjkxRTFDQkEyRkYwMUY1Ci06MTA3ODgwMDBCRTQ2MTAxQjVGRDM3RUIyMkIzNTA3NUVCMjVDRTMzQzc1Ci06MTA3ODkwMDAwQUJGMjBCQzZGRkQ5QjhDOTc0MzlFRjQxOTk0Q0UzRDhDCi06MTA3OEEwMDBBNUIyOUVBNDc4Q0EyNkIxNkNCNThDRTI2M0ExNEE0MDA5Ci06MTA3OEIwMDA4RUU1RTRFQTEyOTBDMzYwNzg2OTI2QTQxMkY4OUY0QTI0Ci06MTA3OEMwMDAwN0IyQzgyNkU3N0VDRUY5QUI2MENERUU5REFENzQ5Q0M1Ci06MTA3OEQwMDAzM0IzNDMzMUE4OTVBRkQzQjk0RUVEQkY5RTNCNDBCRTA1Ci06MTA3OEUwMDA3ODZERTVCMkU3NDgwMkM3RUIzQzU4NDRFNzY1OTVDOUI3Ci06MTA3OEYwMDBCMTg3MjlERDZDMkQzREFDREJFNUUzQjE1RUY5RTJBNjk1Ci06MTA3OTAwMDAwRjYyQTgzM0I4M0NBMEYwNTE0QTY1RDMxRkY5RUNGNERDCi06MTA3OTEwMDBBMTdDNEFGQTA4REZFOEM0Qzc3MEYxNzU3QTk4RjRGMURGCi06MTA3OTIwMDA1OUM3MTM3OEVEQ0Y1NzFCMDU1RTdEODQ3RURGNTJCMkI5Ci06MTA3OTMwMDA3ODQwN0RENTFGQUY0RjkyMDQ2RDE3MkEyNTY2MzI0REQyCi06MTA3OTQwMDBCQkZGQjRFQjBCRjdEMzI2REZERDcyNTQxOTM1QTM2QTA2Ci06MTA3OTUwMDBFNzQwNzhDQjc1QUU1N0Y0RUI2RjUwOEM3NzQ3RDBBMkU5Ci06MTA3OTYwMDBBQUEzN0NENUI4MUU2ODhGREU2MzExNEE3NzY3NDBGNkZDCi06MTA3OTcwMDA1MDc4MjgxRDE3QTVBMDRDOEE0OUVDNjFENjRENEFBMjIzCi06MTA3OTgwMDA2NTdGRDQ0QzZFNDEzQTQ4MjI1RUM0RkNCQzg2RUM5MEM0Ci06MTA3OTkwMDBCMzZBQUU1MzBFOTMyQTRCQjJDRkRGREZBMEUxM0MzNDgzCi06MTA3OUEwMDAxODJGMTdFQzAyREEyMTA1ODUxQTIyMjlBMDVCNDFBRkI2Ci06MTA3OUIwMDBBMDkyQ0U5RDBGNjVBNzlERDE2NjRDMjVFOUYwQTA3MkRGCi06MTA3OUMwMDBCQzRCOTJBMEQ3NkYwRDREQkVCOEM3NUJFMjlDRUY5MDQ5Ci06MTA3OUQwMDBEQjg1NTRFMzNERDEyNjhEOUNFRTZCQTc5MkY3MDQ3RUE4Ci06MTA3OUUwMDAyODEwMkYxMzc2MURDN0QzNjYwRkQ5MkI1RDQ4RTVDMTJDCi06MTA3OUYwMDA5ODZCQzE1MjIwOUJFMUQzMkM2QTg3QzA5MzJBOUZDREZDCi06MTA3QTAwMDA2M0E2RUE0MDU3NjQ4RkE0QzIzQzcxNDg4QTQ3NDJGNTk2Ci06MTA3QTEwMDAxREQ0MEI0QTA2RjYyM0ZCRUE5MEZFOTQ5MDg5NEZGMUExCi06MTA3QTIwMDAzREYzQkNEOEY4QkQ2NTVGQTIwNkYwNTMxREQ1OEMyRDgzCi06MTA3QTMwMDA3NDhFNkIxNUQzRDgwODc0MzE4REM5QTdFQUU4ODQ3OUEwCi06MTA3QTQwMDBBMEVGM0MxMjlCRDdCN0E1N0M1Qzg3OUFEMzk2ODc3NjJDCi06MTA3QTUwMDA1OTA2RkJBRTVBQTUyQTdGMkE3Q0RGMzY2MTIwN0UyMjlBCi06MTA3QTYwMDA0OTRGNEZCNzBEOUU2RTdCRjA2Njg5REE4MzVGQTJCRkU4Ci06MTA3QTcwMDBDQzI0MzMwMThFN0Y4QTJEQ0U0QTBEODBBRkY3MUIwRkE5Ci06MTA3QTgwMDBFQUVBRjgzRTdCRDBGRDdEQUQ0MkVBRDJDOTgxNTZDOTEzCi06MTA3QTkwMDBDN0Y4RDI2NzY5NjAxRjg4NzVBRjA1NzZBNzIwREQxNjI1Ci06MTA3QUEwMDBEQkM0RDY5QjlCOEJGMDVEQkJFNzE3QkE2QUUzQkZCNTFGCi06MTA3QUIwMDA1NENENzhBN0Y2NUY4RjgwQjdFOEE3Qjc3REYyQTBBMzczCi06MTA3QUMwMDBCREJCNUQ2RjdGNDI1RTUwN0IxOEU4NUNEMDQxNTA0QTgxCi06MTA3QUQwMDA2Qzk1RTg3QjZGNkNCMTA1RUE2Q0VENjMxNTBDRkYxOUQyCi06MTA3QUUwMDBFNkRGOEJBRjRGMzk3RkQxNkUzMEJBRkFEM0VFQTY1NkIwCi06MTA3QUYwMDBEMDRGRUY2OTFENTc1RDRDRTlFOEY3NEYyOEIxNERGNEMxCi06MTA3QjAwMDA2QkY1OEU4OUYzQzA1RTdBOEZEM0I3QzBEMzg5REQ0RDE0Ci06MTA3QjEwMDA3OUU5RTgyMzEzOUU3RTIxRjk3MTFDNDE1RkQ1RjJGMkM5Ci06MTA3QjIwMDAwMUU5NjEzMEZBN0FDQTRENUY5RDU3N0YyMUY0NzVDODJCCi06MTA3QjMwMDA0RDVGMUMxRTI3M0JEOUZBQzlGRDIzMTg1RTM4QkVEQ0Y5Ci06MTA3QjQwMDBGOEM5ODg5NzRGREJBRTNGM0RGRDVBQTI3Q0VERURCQ0Y2Ci06MTA3QjUwMDAzQTNEM0RGMUY5MEE3QzdERDZGOTBFNDY0Nzc5ODY2OUIyCi06MTA3QjYwMDBFQTc0RkM1MUQ0OEU5MTQwN0Y5NDkxNTg4QUNFNTNBN0U5Ci06MTA3QjcwMDAwRkQ0NUIzMUE2Qjc4NDVDMTJFRDRGNEJDQzRFNTNDOThBCi06MTA3QjgwMDA2QkQ4NUUyMTI5NEI0NzdCREI2OTY3Q0M1N0U4NEJEQTIyCi06MTA3QjkwMDA0RjczMDk0OTdBNzE1RjY0RkE1MDRGOTVBODg0RTkzRkExCi06MTA3QkEwMDAzMzk0M0YwM0VDMDhGRUEzQ0M4RUMxQkFCM0MwRkUwN0VBCi06MTA3QkIwMDBGRDM1OUJFQjVGODlEQTVCNzQ3REExMzJFN0JFMzdFMDcwCi06MTA3QkMwMDBCMjNGMTRCRTVGRTg2NzZGMEQ3MzdGRUM5N0Y5RkUzODI0Ci06MTA3QkQwMDA0ODQyQTg4RkM0RkUzODAzN0ZGNkVFOEIzOTVDNDc2QUIzCi06MTA3QkUwMDBDNDk0RTlCQUI1ODM5RUU0MjYwOUI0MUI0MUZENEM4RUNBCi06MTA3QkYwMDA0QTQ5RTYyRjIwMjU2MDM3QUY5NzBBNjJBMDBGRTgzRTdBCi06MTA3QzAwMDBBRjI3OEI3RTdGRUYwNzBBRUE4Nzg2NjhERDhBMTY1OEUyCi06MTA3QzEwMDBGNkI1MEQxM0JCRTlCOEY3MzQ5MjY5QzU5RUJFRjFFRTE3Ci06MTA3QzIwMDA1MTNCN0MwMEVGRjZFMkY1MEVCQkY2QkI1MkEyNTBCNjFDCi06MTA3QzMwMDBFOTFEN0Y1NDlCNTYzQzBEODY1M0RGRUVBNkYwOTAyOTNDCi06MTA3QzQwMDAyMDgxRkYwMkExRkJBMjJGMTgwMDNGRjZCRTE3NEVGNkJGCi06MTA3QzUwMDBCMkQyQkY5QzBCMzY0RjAxMTY1M0IwMkY2REE3QjYzQjY3Ci06MTA3QzYwMDBCOTE4OEFBM0E1MEE0QTA3RUQxRUZFRERGQTREMDVFQ0Y4Ci06MTA3QzcwMDA3N0RCRkRBQ0JDNjNEM0FDOEQxNjk0NDdGMkZBNTYxNTk2Ci06MTA3QzgwMDBGQjlFQ0ZDQUI3NkRGQTQxMDVFQzBCREFCMkU5OUFBOUFGCi06MTA3QzkwMDBCRTZFRjMyNEFCRTI2OUY4RkIzNjU5NzZEODVGNERDNjY5Ci06MTA3Q0EwMDA4MkYyRkY0M0Q3RTFGNzk5MTdCRDQwRTE0OTgxMTJCMzUyCi06MTA3Q0IwMDAwQ0QyNkI5NzE1MEFCRjQxQzdERDk1MjUwMEZGRDcxNDdECi06MTA3Q0MwMDAwMkY0RUMzNzYyRjE5QjBDQTQzRkE0N0I3RkFFMTlEQjdFCi06MTA3Q0QwMDA0MjRCMERGNDg1MENGNTI4REUxRTk2NjA1RkM3RUMzMTMzCi06MTA3Q0UwMDBGMEU3OUM0M0ZBQTU3QzQxQkZBRkNGRDZCMTNFRDE2RDQyCi06MTA3Q0YwMDBGNjU5NTE5RjNERDY4QjI3MTdERUVFNTU3QkZDODBCNzlBCi06MTA3RDAwMDBFRjhERjlGMDE3MTM2OTNGRDY0MjM5MDY2NEYzQkQwREM0Ci06MTA3RDEwMDA0NUQ5MkI2RDc4N0NDQzM3QTcwQUYwNDg5QTczRDEyRUMxCi06MTA3RDIwMDA4OTkyREUxRjEzQ0E2MkRGNUM0MDNBMkJDMDc4MUM0Mzg1Ci06MTA3RDMwMDAyNTFGQTE3NDNBMkVERTUzMDEyODMwQUFGNEU3NzA4Rjc0Ci06MTA3RDQwMDA0QkU2RTlFRkExNURBNTQ4RTdCRTM0NzQzQkNBMEQwN0Q5Ci06MTA3RDUwMDBEQUUzQTg0NTU0M0U4RDkwNDgzQzlEREM1REE5RTZBMDQxCi06MTA3RDYwMDAzQzE4NTE0OUQ3M0I4MDlGRTA5QjU0OUYzMEZCMkNFMTRFCi06MTA3RDcwMDAwM0ZGNTZBNjcxMzJDREYzMzNDMDczOTM0Q0M3MUQ0RDJDCi06MTA3RDgwMDA5MjA4QTdDMUUwOUEwOTlFQUREMTI3QjM1MTVFN0ZDRTdDCi06MTA3RDkwMDA3MENERDRERTBEQ0YxMTEyRTM5Nzk1NkEzOUYyQ0I1MDM2Ci06MTA3REEwMDBGRDNCNkQ3QzNGRDUwMjdFMzhGQTZDRTI3RTM4Nzc3QkY2Ci06MTA3REIwMDBCRkRBNDE2MjY5RjBFQjM3OUNGRTIxMERGNjI1QjY3MjAxCi06MTA3REMwMDBCRDZDMzA3RDEwNzJGQjg5MTg5RUREN0E2MTAxRDcwQjg2Ci06MTA3REQwMDAyRDUxQUExNzk4M0M1QzA4N0EyMEM4RTFERjAyQkI3RUNGCi06MTA3REUwMDA5MDlGNjE5MkI0RThGNzIwRjcwNzkxNTIyNkZGN0RGNDQ3Ci06MTA3REYwMDAzRkUwQjc1MTU1NEU3REEwMEQ1MTFGQkMyQkM1NUY5MDg0Ci06MTA3RTAwMDA5MTBFODkwNEYzQkI1RkVBQjg2MjAyRDA0RjNFQjNDNzVDCi06MTA3RTEwMDBBMzM3QjQ0NTEzMzYzOEQ0Q0I0Q0RGMDk3RDk2MkMxNkU2Ci06MTA3RTIwMDBGQThDMjBGQ0NFRTM3MzQ4OTIwRTNGRThDMzA3MzYyQzUxCi06MTA3RTMwMDBDRTQyQkZERDhENDE4NzFDOEFCNjJFQzZGREFGOEQ5RTFBCi06MTA3RTQwMDBEMTJGREFDMUZEQTM5OUYwQTc2QkM5NDQzQTc5NThBODlDCi06MTA3RTUwMDAzMDc5MTgzMTdCNTJFMEYzNDM0MkNFRTMyRTQzNEVENkM1Ci06MTA3RTYwMDAwQ0ZFQzRCMTBGOEI0Q0VEMzk3ODNFNURFRkNFOEJFNDQ4Ci06MTA3RTcwMDBEODI2REE0RTlEQURBNjNDMTRCRTZBRjk4QjU1MTI3RDBDCi06MTA3RTgwMDBFRTJDNjRGMEI3NjYxMUE0RDM5MEIxRTA4NDAyRkE1OEU2Ci06MTA3RTkwMDBFRDQ2N0Y0REE4RDJCRDJGQjY5NTE1RThBN0U3N0FENDU5Ci06MTA3RUEwMDBERjc2M0ZGNTAwRkJCOEExM0U5QjI4QkNERUI2RjEzRjc0Ci06MTA3RUIwMDA4NTVDNEFBMUVCNTAzNzEwMDNFQzA5RDVBNDIyMzEwMkFFCi06MTA3RUMwMDA0RjNEMEZFODQ1MzU2MzIxN0M3NjU3NTRDMkYzQkNEOTRBCi06MTA3RUQwMDBGMTRBRDlBNjA3NTQzM0JFMDVFQThGRjhDQTdERURCMDQyCi06MTA3RUUwMDA1RUY1MjY1OTU2MjRDNjA3MzkzNjc4OUI0QUExNjMzRjZBCi06MTA3RUYwMDA5N0FEQkJGQ0E1ODlENjJBRDRFRjg2NDZDNjE3RjY5RjU4Ci06MTA3RjAwMDA3N0JEQUM3MkI5RTdBNDE3NDEyNzAzQzhCQkNGNDQxRkE0Ci06MTA3RjEwMDA2RkNBQzI1RkVEQzRCRjgzNEU4QUZBRjAyQkRBODVGQUNFCi06MTA3RjIwMDBGOUFCOUNGODc1OTczRjZGQkNGQTAxNEYxNDFGRTc1MUVFCi06MTA3RjMwMDAzQzAxN0Q5RTM3OUJEMTIzQjU0N0QxN0U3QUMwRDc2MTY2Ci06MTA3RjQwMDAwMkJDMUYyODM2NjQ0QkVBNkIxNzU2NzI5ODlGRjkyQ0I3Ci06MTA3RjUwMDBERDY4NTFCQkU3RkU5NURCNEQ2ODk3NUY0QzY1ODA4NDFCCi06MTA3RjYwMDBDRkI0RkVBMzdBNTlDMzc2NTQyRTU0MkFDQzZFOTdDMDUwCi06MTA3RjcwMDAxRTlGQUY2Q0FCODJGNjNCMjk1RTgxREY3NzAyN0Y0M0E5Ci06MTA3RjgwMDA3QzIwQTFBMTFDQUU5N0RCMkIzNkQyQkU1QjhGNEFCMjAwCi06MTA3RjkwMDAwMjQ2QUNCRTE0RjFFQkU3RkNGRTkxMjc1MTA5N0VDODA2Ci06MTA3RkEwMDAyREZGNEIyNkJCMENEMDRCMDNGQkJEOUEzOEJFNDUxOUE5Ci06MTA3RkIwMDBGQzBENjA5RjhDQTlEM0E3MDJEODMzQjVEQjVFMjc1NzkxCi06MTA3RkMwMDBBNjVCNTdCNUMyRjA3RjQ3RERFMTBFMzQ0RjlGNzdFRUQ5Ci06MTA3RkQwMDA0NzNDQ0I0REEwNDhEODk3NTQyQjM2RkEwRTk3MzE3RkFCCi06MTA3RkUwMDAwNzQ5RDBGNTQwN0Q0RTM3MUYxNTBFNENBRjBGQkFFNjRFCi06MTA3RkYwMDAzRjk2Qzc1M0RDRjU1RTU2QjhCRkNFNjBGMDMyNDRGRjAzCi06MTA4MDAwMDAxQjA3RUU1RkMwRTc2QzlCQzJFMzIzRDQwMDQzMjIxRTM0Ci06MTA4MDEwMDA0OUVDRkE1QkI5RjE1MDA1QkNBNzVDQjcwOUYwQjU1RDU2Ci06MTA4MDIwMDAyNkQ1Q0NERjFDNDczRDE0RTFFM0VEMkNDRkMxRjYwQjg4Ci06MTA4MDMwMDA1NTI2NDdDNzlBRkExNkMwRjdEODY2MTkyQzA1RjJCODI0Ci06MTA4MDQwMDA2MkUwRkI1MUNCRUJGNjdCMjgxRURBMEI0OTJDNjRFMDk3Ci06MTA4MDUwMDAxMEQ4RUY4QkUzMzVBNENCRkM1Q0E2QzdGMkVCMjkwOTYzCi06MTA4MDYwMDBEMDdBRjlBNTI0NjlEMEY2RURGQjFGQThEMDY4Mzk0MjczCi06MTA4MDcwMDAzNzU0NjAwQUZCQ0ExOTNFN0QyNTI0MDZBNjkwQzcyMjA0Ci06MTA4MDgwMDAyOTk5N0Q0RjQyNEM1MjI5RUZCMTQwOTUxRTE4M0YwMzZDCi06MTA4MDkwMDBGNzVGNzdFNjkyOThEN0U4OTMxQjgyQUVFRTZDQkVDNzg3Ci06MTA4MEEwMDAwRjdBRTQ4MUUyN0JBRTk4MDBGRUM2NTIxNUZERTRFNDRGCi06MTA4MEIwMDA2MzBBMjdFMTRGNTQyMDVFMTYzNzYxQkNGNjU5NkNERTI3Ci06MTA4MEMwMDBGNDBERTI1M0Q1RDlGQUM3REMzRjFCRjlBNDNERkMzNENCCi06MTA4MEQwMDBDRUMzNUE0NzYyRTNCMTVFOEM2MEZDODYwQTU0RjA1NzA3Ci06MTA4MEUwMDAzNjU1MzM3QkQ3OEQ4RkY1MjRGMUI4MzJERDRFQUY4NzBGCi06MTA4MEYwMDA5MDZFREEzRjUxRjhCRUUwQzU4RDYwRTc4RjgzNUY2OTBGCi06MTA4MTAwMDBGOTk3NEQ3RkRDMzgxQ0JCNDVDNDBGODVEREIyNDVFRENBCi06MTA4MTEwMDA0NEJFQjcyOENGODE1RTEyNzY4Q0JGQjgxM0M3RkRCRkFGCi06MTA4MTIwMDA5Q0RFODdEQUJGQkZDNEU5NkY3NURCMzU2RTdCQTY1RTY4Ci06MTA4MTMwMDBENjFERjZBQjdCNUQxRjc5NTI1N0MwRkNCNkU0NTM3RTZCCi06MTA4MTQwMDA0RkEzMDc3RTAzRkE5QUI2REYxMTVERkNBQjg5NDY1RjQ5Ci06MTA4MTUwMDAzRjdENzJDOEMwRUZBMjNDRTZBQzg2RjgxOTdBN0QyQTUyCi06MTA4MTYwMDBGNzYwOEY2NjMyQkUxQTJCRTREMDM3Mjg1RjBEMTA3RjgwCi06MTA4MTcwMDAxNDdDRjUxMTE1MTI4NzgwNEZENDBFQTQyRjYyOTYyMDFGCi06MTA4MTgwMDA1RjA5N0U1MUJBM0JEQUNGQTdGNDYwRDRDQkUwQjkwNkUxCi06MTA4MTkwMDBGRTIyMzlCNDVDNDhFOTNENjVCMzg3ODRCQzUwNEIzQjUzCi06MTA4MUEwMDBFMzEzQTVGRTc0RjdBMDIxMjMxRUNGOTQzMTdGNzU5NkFCCi06MTA4MUIwMDBENTZENDI5MzYwNjkyN0M2RjUyODVERkQxN0QwOTVBQTU1Ci06MTA4MUMwMDAyNzI1QzBFQjk4RkIxN0UwQkE3RUE5MzA1NkY3QUIyQ0Y5Ci06MTA4MUQwMDA3RUVDNUVDN0NGMzk3Qzg5QkUxQkVENzkzRjFCOEVCMjJBCi06MTA4MUUwMDBGODdEMzEzNjNGNTc5Q0JERkU1NzAzQzZEOUZEMzE5NzA4Ci06MTA4MUYwMDA5RDMzNEMzRjQyOEVDQUZEMDhEQ0VGMzU1OEZCRTFDNjhCCi06MTA4MjAwMDBENzk1QjMyMzkwM0U3QUNCMTlFNEVENEQyQUU3OEJBM0EzCi06MTA4MjEwMDBCQjFDNzBFOTA3MEY2NTQ3NkNBMEY5Rjk4NTlGRkU1M0Y5Ci06MTA4MjIwMDBDNjA1NTA4NzBEMDEwRTZFMzg1RUEyM0FGRDg3OUYzNzU2Ci06MTA4MjMwMDAxQ0RERjFFRjk3QjhEQzFGNEMxRTA0NEQzMzI1MkJFMEZECi06MTA4MjQwMDAzRjIzQ0NCRjEzMjJEQ0JGRTNBNEY3OURDRDMyREEyMTVDCi06MTA4MjUwMDBDMUIwQkMxMzRDQzlBQ0ZBNkVENEMxNjI3QzRBRUY1NUI0Ci06MTA4MjYwMDBBQThEREU0Nzk3MUU0QTQxM0JCNzNFQ0FBNDg3MDY5M0I0Ci06MTA4MjcwMDBCN0FCN0NFNjBEMkFDQUFERjRGQkYxQkU3QzAzQ0EyNTgwCi06MTA4MjgwMDA2OUYyMEQzMkUyQjVFRUYzQzkzNzE4MkFCQzdCRkQ5QkNCCi06MTA4MjkwMDAzQzdGRTA4NjcyNDFDN0M2RDJERjUxQjhBQzNFRTgyMUQwCi06MTA4MkEwMDBFODk3Rjk5OEFFQ0UxNjU3NUJDREY3ODEzN0YwN0RFNEFECi06MTA4MkIwMDA4RDI0MUU4MThGQTc4ODVDMDlGQzcyOEExQzhFNENCM0FBCi06MTA4MkMwMDBDOTkzRkI1NDhERjE0QjlCRTc2REYwQUY4QTc4Rjk0RDY0Ci06MTA4MkQwMDAxREFDMkNFNjczRjNGRENFRjJEN0M5RTIzQ0YwRUI3RDhBCi06MTA4MkUwMDBGRDNFMEZFMjZCQjVDQkJGRDZBQzMyRkQ3MTMzQTk2QjRGCi06MTA4MkYwMDAwNUJDQjU3ODQ4MTVDOEIxMUI3NEEyOEVBMEE2RUJCQTEwCi06MTA4MzAwMDA2NzFFOUNCMTkyOTZCRkNCRUQ5MUY3QTk1QzM2NkM3MTVDCi06MTA4MzEwMDBEMDM1QTFBNDA2Rjg3REE3NkJEQUI1OTcxMDY4OUY2Q0RECi06MTA4MzIwMDAyRDgwN0Q1QTM2QzE3REFCMUJDRUFCREE5Q0YzMUI2QzI2Ci06MTA4MzMwMDBGRUVFRjk1MkYyQzJGOTY2OUE4N0JBNDc0QTZCNEYzRjhFCi06MTA4MzQwMDAyMkU0MERDNzU3QTZCQzJBOTE0RkY1MEIyMDIwNUFERjE3Ci06MTA4MzUwMDA5QTQzRDhCRUYzQUQ2MEIyMDlFNTM1Q0JBNzFBQUNGREEwCi06MTA4MzYwMDAyRjU1NDYzRjlGQjZGREFCODNCNDVGRTdFQjU5MDBDQzdBCi06MTA4MzcwMDBENjk2NkJDNUMxMkYyNEUyODIzNUE0Q0UxQzREN0Y1NTA1Ci06MTA4MzgwMDBGNzJEQjI0NjEzNUJCREU4MTBFQjE1MEY1QzJGRDNCQzg1Ci06MTA4MzkwMDA0RkU4M0U0QkJFQjA2RkZFREY5NTEyQzdENDM0RjNCRjNCCi06MTA4M0EwMDA1RDQ5RDQ0MEZGNUVDMDgzMDI0RjE1RjE4RDdFNjA4QTI3Ci06MTA4M0IwMDBERjVBMzVENDI2NjU0MUJFNTMxN0VFMDNGRDg2RUFBMDg5Ci06MTA4M0MwMDA4NzVBRjgwNUU0NUEwOTkzNkJDMTEyRTc3N0I3N0ZGODJCCi06MTA4M0QwMDA0MzU1QzRFMTUzQzg3RjE4ODIzNkMwN0UwOEE1MTRGMDA3Ci06MTA4M0UwMDBERjk0QUIyNzdCRUJEM0YxNkE2MDVEMTc0MjI5OEU3Mjc1Ci06MTA4M0YwMDBBMzVFNjdGNTZCODg3MUQ3RUMzMkU0M0Y4QzNGRDRCNzRFCi06MTA4NDAwMDA5RjhGNzFGNUZBOTEwNkZBNzc1NTEyMzNCMTBGMTdERDg4Ci06MTA4NDEwMDBENTlFOTU0OEQyQTYwRjZCRDUxRTBERjhBQzk2REE0NUMxCi06MTA4NDIwMDBGNkY3RUJBMzhBQzM0RkVCN0U3QUE4RTUxQzJBODE3RDgxCi06MTA4NDMwMDA5MkNDRkM0ODNBMkREQkQ2RkRBNzBFODlFN0FGMTg1OTQwCi06MTA4NDQwMDA0QjA2RjBERkFEOEYzMjdGRjAwREVERTNCMzk4REZEMDU4Ci06MTA4NDUwMDAyOTdGNEYzNzMyQkZEQ0JGM0RGNjdEMERGQ0ZDQTcxRUU4Ci06MTA4NDYwMDAzRDc2MTVDMDdCRURCRjJBQzQwN0Y5MUI4Rjg1NDkwQUVECi06MTA4NDcwMDBFREIxQTQwNkY2RDg5QTJFQzU0Q0E2Q0RBRjY4NjJGMTMwCi06MTA4NDgwMDBDRkM3QzM4OEFGMzU0RjdBOTMwQjY5RkIzNTRGQkYzM0U2Ci06MTA4NDkwMDA4NUQwRjk5RERFRDRGM0UyNjhCMDlCMUY5NTU4MUU4MjBCCi06MTA4NEEwMDBENTNERTU2QUZBN0U4RDRBNTZBNEYzMUI0Q0Y2MzBGOUE5Ci06MTA4NEIwMDA3M0YyRDk2MDE1RjBCN0I0NjdGRkY1RDg2RkU3NTI4RjQ0Ci06MTA4NEMwMDBEN0I2REYyRUY2Nzg5MDZGNjkzRDY2OTczRjIyMjVDN0I1Ci06MTA4NEQwMDA0QkU5RTZDN0YyM0Y0RTNFMjJCMUY5RURGNTI0RkQzMEZGCi06MTA4NEUwMDBCRjNEM0JCNTA0OUQ0N0VEOUUwRjUwOUVDQzdERkM4NzY0Ci06MTA4NEYwMDAxMTgwNDNFRDVFQzVBMTA3NkFGNzI4MjlFRjE0N0MxRUExCi06MTA4NTAwMDA4MzI3QzQ4REE0MTk0MDI3OUM1RUJBRDY2MUJDQThBNjU3Ci06MTA4NTEwMDA3M0VCMDdFMEM3QThEREVCOTQ2QjE0MkVCMTE0QzBGNTI0Ci06MTA4NTIwMDAwRDI1QjYxMENBNEZGRDRCQzRBMEEwN0FGRkQwQzMxMUQxCi06MTA4NTMwMDA4MDJCRUQ3N0E1OTYwNUZBQzY0OURGRDBGRkQ5OUNGRUMyCi06MTA4NTQwMDBGRDExRDI4M0YxQkFEQUNFNzYzNjVFRDc1NzdFMEY3QTM2Ci06MTA4NTUwMDBBNUQ2MjUzRkRGODc1RkYyRkJEQjMzRDc3ODVDRjZDQzBGCi06MTA4NTYwMDA5RUExQzVFQkQ2RkVGMENDNDMxNjFERjdFNDkzN0Y3OEIxCi06MTA4NTcwMDBDOEEyRjNCRkU1QUZGRkY5RDBCNzgwM0Y3RkU2RDc0MTkwCi06MTA4NTgwMDBGRUQ3M0VGQUVCMDhCMUQxNjNBRDg3RjFFM0U5QjFDNEEwCi06MTA4NTkwMDBBMjdCNTQ3MkZBMzdERTI0Rjg0QjRFRkZGNEY3RTMwQzVCCi06MTA4NUEwMDBCQUVFRDM0RkZDMjVDRkEwRjVFQjdGM0E3RjE0QzBBMUU0Ci06MTA4NUIwMDBGRUM3NzM0NzBEQjRGRjA2N0E0RDdBRURGMzRBMjI1RThCCi06MTA4NUMwMDA4REJEMTIzMzgyRjZGMUE3MEIzRjA3QkEwRThDODM3OTZCCi06MTA4NUQwMDA5RTNBRTI4RDgxREJCOTk2QkU2Qjk4MEFGODVBODdGQTBCCi06MTA4NUUwMDAxOENBMUIyODlDNkIxRURCRkMwMUM4ODlGRUYwQjY0NjJFCi06MTA4NUYwMDBDQkU4QUM0RjhEMDZBNzdENERENzNCMEIxMDZGQTQwNzgyCi06MTA4NjAwMDBGNUE4QkI3RUVENkIxNDlGMTc2NkM2REYxOUYyQjEwNkE1Ci06MTA4NjEwMDBGMkFFRjZCMTc2MzY1RTI3QzU1RkE0M0ZGRTRFQzEyRjlGCi06MTA4NjIwMDBCM0ZBRTNFRjBFMTdGRUNFOTA1QkJFOTcwRjc5OEQ1RDI4Ci06MTA4NjMwMDAyMzFDNzE1MkYxRUM4QjBGQzZCM0UyMDNDODBCMjEwRjYwCi06MTA4NjQwMDAwNjgzNkZCNUM0RTZCNUNDNjMzRUU4MDFCRTdBMzJEODg2Ci06MTA4NjUwMDA4QkRGODU4MERGMUY5RTE5NDcyODdEMUNGN0Y0NUMwRjk4Ci06MTA4NjYwMDA3MkIzRTdBNzVFN0QxNzdEQkZFNkE3NkYyMDlGOURGRUQzCi06MTA4NjcwMDBGMTJCOUE4MUY5OTkyNDI0RTVGMTNDMzFGNjczMDhFNDUxCi06MTA4NjgwMDA3MDBEREJDQjkxREFEREUxOTQzN0QyODdBNzlBRTRBMkIzCi06MTA4NjkwMDA0QTIzODJFRjhGRTFGQjI0QTNGRjlBRTRGRTI1NTIxQUJFCi06MTA4NkEwMDBCQ0JERTEyOTYyNzY0MDcyMjRDMjY1RERFRURGNjlDQzkzCi06MTA4NkIwMDBCRUVDQzNBNzU0MEVGODNDQjYwMERFNjdDMkE3NThCRjk1Ci06MTA4NkMwMDAwRUVCOUY2OUMzRUI2RUM2QjdFRUZBMzU5NDNGNDFFRkYwCi06MTA4NkQwMDBGNUMzNkY1MjdBMDM5RUE3Nzc3QTU1RDA3QkE3QzFGRTY4Ci06MTA4NkUwMDAwQUY1Qzc3QjFGRkM5OUZEMzNEQ0ZEQ0EyQjZFRkUxNjE1Ci06MTA4NkYwMDBGMTYzMEU4N0NDRjQ2MTcxM0I2MEUwRjUwRDE3N0UzRkFFCi06MTA4NzAwMDBGNzE4MEUzQTEyNzAzQ0Y5NzE3QUY5N0Y4QUNCOEQxQUZDCi06MTA4NzEwMDA2MjU1MTZEOEVDMTM5Rjg3REEyNzkwNUY0NkUyRDZFOEI5Ci06MTA4NzIwMDBDMkJFRjk5RTg0N0QwNEE1QkY5MzhGMkExOEFGNjlFRDYwCi06MTA4NzMwMDAzQzgwNzJEQzJEMkY2QTQ4RkE3REZCNUYzRENDNUVBQzNECi06MTA4NzQwMDBEOUJCN0YwQUM4QjU5M0NGM0Q4QkY0NTlGM0Q4MzEwRDBGCi06MTA4NzUwMDBGNjJGMkZFRTc5NEFFQjJFRURFMzA3RDAwRjQ5OUI3RUUzCi06MTA4NzYwMDAzOEY5QTNGRDUzOTgzQzQ4QkZGRjBENkFBQ0ZGREE3RDkyCi06MTA4NzcwMDBDRUZFNkIxRkZCQzBEMUZGNUFBQjUzNjM3OTBDMDM4RjQ2Ci06MTA4NzgwMDBGM0JFNkEyRTg1RjVCRTdGQzg0MzQwOUVCRURGQTlBNDE2Ci06MTA4NzkwMDBGNUJGRjY3MEZEMjhFMEQ0RkFDQTgyREY0MTlDQkZFQzM5Ci06MTA4N0EwMDA3MEMwMDAzRERBQjVDOTFDNzUwN0Q4NkI4NzNEMDRFNDdECi06MTA4N0IwMDAzNzUxQ0QzRjc4NjlCOUVCOTUwMEM2MzNCQTBFNUZBQjQwCi06MTA4N0MwMDAxODM2RkZDNDMzMkU3OENFN0NDRDlBMUJBNkZEQ0RFQzk3Ci06MTA4N0QwMDA4RTk3QzExNkNBMkQzN0NBOEZEMjdEQTNERDdGRjU0QTg5Ci06MTA4N0UwMDBFNTI4OTBGQkNENjBDRjRGODRGMTYyNTFGMDdGMjg5MTU2Ci06MTA4N0YwMDAwNTk1MkM3RjUwRDZGRDY5RjUzN0VCQ0YxMzhBNjNCRTA0Ci06MTA4ODAwMDBBMDQ3OTc3QjdEQjY0ODhGNjJCRkM1RkQ0REFEQTFGNEYzCi06MTA4ODEwMDBGRUU4MDU5QUQ4MTdEMDcxNkQ3MjkwREFBQTU1RTlGMDgyCi06MTA4ODIwMDAzNjRCNjM3NjQ4QTZFRjk3NkFDQ0RGOTNFOTdCQzUyMDg5Ci06MTA4ODMwMDBFRDdCRjk5QkUzNDcwQkNCRjE3NEYzOUVDNkZCNzFGQjE5Ci06MTA4ODQwMDA1NzMzQzkwMzBGRUZBNzRDMzMxQ0VCMDU3ODJGQjJFNTY0Ci06MTA4ODUwMDBDNThGMjZDOThEOTAyNzRBNDIyMTc3M0MzQUVFQjNDNzhGCi06MTA4ODYwMDBBM0FCMEVFRDg3Rjg3M0VFRDVGQkYyMDFGRTExRDJBQzhGCi06MTA4ODcwMDBCRjg3NzYzQzg5OUQxQkMwOEU3NUM3OUZERDc5ODk5OTFFCi06MTA4ODgwMDBFMkQxQkU1MENEOTExNEU5REY1RkZGRjhCQjg5NzkyOEIyCi06MTA4ODkwMDBDRDYzRTZGOTBBNkRGMUY3NjZCRDVGRkM3REJENDZDN0E1Ci06MTA4OEEwMDA2REM5ODA4NzI1REE5QzdGRDI4MEJFNjQ5MjQ4Rjc3REFGCi06MTA4OEIwMDAwQkE3OUJDQjQ5Rjc1MzJCNjE5RTMxMTZCRjlGRUQ4MkNGCi06MTA4OEMwMDBEN0E1MUM1RTNGM0I5RjJFOUNBQTlFMEE2MkE4MUUwQTRCCi06MTA4OEQwMDBERkI5NEJDQzY2MTA4MUYzOTdGN0FDREQwRjdDMjZFMjU1Ci06MTA4OEUwMDBGN0Q2NDRGOTVDNzBFOEYwMUI2RTVFQzQyQURGRTI3QkM5Ci06MTA4OEYwMDBCNTIxRTQ0NTEwM0QyN0FENUVFODlCODdDNUY3NTU1MThFCi06MTA4OTAwMDBEQzI3NzkzODlGMUQ3OEYzNjYxRkM4MkQ5NTI0MkEwQjI0Ci06MTA4OTEwMDA2MUJGQzRFMzlBOTg2RjRGRkJDQjRCRjk4OTQ5RTdBQjMyCi06MTA4OTIwMDBFOTA2REFEQjc5QTlENTBGREMwNDcxNzU3RDBDQzYyMzY1Ci06MTA4OTMwMDA5NEIzOTdBMEZGRDBEREFGMTI4RDU5OTgwRjE2MzIyQTRECi06MTA4OTQwMDAxNERCMzhBREI5MkMzRUEzRUFGMUI0NzlDM0FCQjRDNDlGCi06MTA4OTUwMDAxM0IwNUVFNUVDNjVEOEFGRUM4QjYxM0QxMjFBNUFCRUUwCi06MTA4OTYwMDBFQzc3QUU4RTIwN0M3RDE0QkUyMDFGMTE2NEIwMkU5RTRECi06MTA4OTcwMDAzNzc1RjdENTExRDQzM0ZFODM5RTlERjBERDFGNjI3OUU0Ci06MTA4OTgwMDA1NEI3Q0I4MTE4RTQ1OUI5RjNBODJBREU2QTI3RDA1RjFGCi06MTA4OTkwMDBFQjMxMDlFMzI4ODI3RTVCMEJFQkNFMDMzOTNFNDAxRUIwCi06MTA4OUEwMDBENTRCOUFDREFGOUUyOThGQ0ExRkJBMTFGM0E4RkM5RjUxCi06MTA4OUIwMDAzNjhGQ0EyQTk4MDdGNjU4NkIzNjExNzk1NTk2NDRFN0QwCi06MTA4OUMwMDBEMUNBRjNBMkZFQTNGNUE1QjlBMDlGNUFGREUyRkJDQjQ1Ci06MTA4OUQwMDA3MzREN0JEOTVBN0YwMENCM0NFRjZBQjRCN0JEMDlFQTJGCi06MTA4OUUwMDBFNzhFMjY3NTlERThDRjMzQzkzNTM2MzkxQkYxQUEwOEM1Ci06MTA4OUYwMDBFNzdGRDZDQzc3MzU0NzlFN0NENDExNUYzQUYwRTY2NkE4Ci06MTA4QTAwMDAxRkU4NkZGQUFDMkMwMkY4NTFCQTAyQkIzRDJGRDU0RUNECi06MTA4QTEwMDBFQ0ZBNDgzQzA1MURCNTE2MEYxQ0JGNTNDRjVFODQ3RTkzCi06MTA4QTIwMDA3QzUxRjZFOTQ5RDM0QzUzN0ZCRThGRDkxRjgyN0U3RDlFCi06MTA4QTMwMDBCOTI0MDk3QUM5NjcyNDFFQjgwOUU4MzkzNzE0MEIzMkZBCi06MTA4QTQwMDBCQUM0Mzg1OTVCMDhERDUzRkRENkQxNTY3QzAzQzZEQjZBCi06MTA4QTUwMDBDRUU4MDRCOTVFRDA3MUZGRjk1RkM2RTc1RjY0NjE1QzgwCi06MTA4QTYwMDAyMjQ0MzA5RTk2NzkxRDY1Qjg4RTU1OUExOUY2REFFMDQzCi06MTA4QTcwMDA5ODdCNUVGQUJDRDRCQkJENkMzRDJERjFFNTJDRUZBQzEwCi06MTA4QTgwMDBEQTE5ODcxNTc5MUFBMjdFNTA0QTE0Nzg0MTFFRTZCMjg3Ci06MTA4QTkwMDAzOEFDRUM2M0ZDRDY4NzJGQUEyQTZDRkVDRDI2QjJEQzVDCi06MTA4QUEwMDAwMjEyNTA5Nzc3RTJEMTQ2NTU0RjYyRkQxMjdGRTI3QzY5Ci06MTA4QUIwMDBBRjIzM0VEN0NERTJCQUFFNzhFMjdDRTUxNkM2REY4M0JGCi06MTA4QUMwMDBFMDRGOUNDQkQ4MEE3MUI3ODkxMDlGOEJGMkYzN0QwNkRCCi06MTA4QUQwMDA4RkQzOTkyQ0FGMjgwMzNEQjUxNTBGMUM4N0VBNjg4Q0ZFCi06MTA4QUUwMDA2MUZCQkIxQUNCNTlCRTkyNDRCODVGM0JEOTA0NzQwMkY4Ci06MTA4QUYwMDA2RTA5NDZGNzNGNjgwMkJFMDkyQjgyMkY3RTg4RTUzQjUwCi06MTA4QjAwMDAyNTU2QkVDOUZCQ0M1Q0M4MzczQ0YwRTYxQjU1QUIyOEVDCi06MTA4QjEwMDA3REI0OUEwMUU0RkZDMUQ2QTcyNzY3MjA1RTg3M0I0RTRDCi06MTA4QjIwMDBGRkY1QjI3MURCQ0MxMEVFNzcwNzVCQjc5RTYyRTMwRTA4Ci06MTA4QjMwMDA3NTFDMTE1RkVCNUI5RjBGQzc2OTM1MDYxOUE3ODM4RDA1Ci06MTA4QjQwMDAzM0Y4RkMxOTlGRENCMTdGMzVFNjJGRjgyOEZGRkJFOUVECi06MTA4QjUwMDA3QkRGRUMxRTkyNDhEMzdGMTZFNzlGMDM2RjdBNTE1RTRFCi06MTA4QjYwMDBCN0U1QjJGQzI4NEY0OUM4NjQ0RTQwNjdGRjlFRDJCQ0FGCi06MTA4QjcwMDAzOTc4REVBMUVDMDJDQzlGQkY2MzdGM0JDQTE5MERDNkRBCi06MTA4QjgwMDBBMTU1M0NCMUQwNEFENjJFNjFDMjM5REJDODNDODJGMTM2Ci06MTA4QjkwMDA2NzRGNDlERTJBNzhERjQwM0FFMjczNDAwRjk3Q0IyQ0NCCi06MTA4QkEwMDAzRkI5QTRFNDI2RTgyNzFCRjg5MkNFQTNEQ0M3RjY5REM0Ci06MTA4QkIwMDA5RTkyOEI2Rjg2RkFGQkE3QkY5RTY4MDIzODk1MzMzQTY4Ci06MTA4QkMwMDAyMDA3RjMxRDcwNkMzNThBQzRCOTlEMDFGOURFNTNFRUEwCi06MTA4QkQwMDA4QzVCMTA5RjMzRkY5M0E4NEIzMDZFNEVFNTQyODdEN0Q2Ci06MTA4QkUwMDA2NjU3NTJCRDc4MUZGMjMzMjlCM0MwREVEQkZFQjU2QjhBCi06MTA4QkYwMDA2Mzc2N0VGRTY3MkRGRTFENTY1RkU0NkIwOTNFNEY5RjM4Ci06MTA4QzAwMDAzN0Q3OUEyQkYyRTYxMjNFQTUwQ0NFMjlGNUU2NTMyRjY0Ci06MTA4QzEwMDBDQ0I3RTc3RkYxN0NFQTkwQzhBN0U2RjFDQzBFRkE1RjBCCi06MTA4QzIwMDBCQUZDMzlGNzM5QzZDRjJCOUZGQTI5MkZERjBGMDdDOUI2Ci06MTA4QzMwMDA1OEM4QTdGRTg5ODdDNDUyOTAxN0YzNkIyNTA2NzkzMTZGCi06MTA4QzQwMDA2RUZBNzBGN0U3M0UwN0QwNkI4RjY0RTBFN0Y3MDEzODA0Ci06MTA4QzUwMDAzNkI5OTc5RjcwRTFFRDQ2M0ZDNkU3QzQ3OENGODM3Qzc1Ci06MTA4QzYwMDAyQTFEOUM0RjQ3NTczQkZCMTk1QkU3M0M5Rjc1NUU4MzcyCi06MTA4QzcwMDAzMzVFNTU2ODE1MzhFQTlGREY1NkU0RjgzRUJFRTMwMkRFCi06MTA4QzgwMDBDN0Y3ODlGNzRGNzU5NDI3MjUyRjc2RDRGRkQyOUUzOUUxCi06MTA4QzkwMDA4RUYyRTRDRTJCMURGNTJGRENCQkQ4NTFCRTI4QjVDQzBGCi06MTA4Q0EwMDA1MTdGREFDMTFCMUNERkE3MUY1QUUzRjgzRUYzQzg3QUQ1Ci06MTA4Q0IwMDA0Nzc5NTZGNzM3MURGNTFCQTg3OTAyRjkyQzcwNDAwMDRCCi06MTA4Q0MwMDBGN0FCREI0NkNCNzZGQTZDQ0ZBNjdBMjUwQkYzQjgzNTNCCi06MTA4Q0QwMDA5RUQ0OEZGMTY2OTY4QkRDOTc2N0UwNkVBNzE0NkJBNjI3Ci06MTA4Q0UwMDA0RUY5NTczMTI2Q0NEMzMxQ0ZGMDQ2RTQyM0E1Mzg2RjY3Ci06MTA4Q0YwMDA4RTgxRUY2NzJDMDBCRjEzMjk2M0U3QjQ0NEZDREE1MzdECi06MTA4RDAwMDA0QzUyN0VDOEVGMEJCOUYwRUI4QTRCN0I5NDZEMjlDMEI3Ci06MTA4RDEwMDBCMzc2RjRDQjA3QTU0ODdGQkM3QUEyRUU3Q0M2QTFDNThBCi06MTA4RDIwMDBCNTU1RTNCM0U1MDdFNEY5Mzg1RjhDQTU3QzgxN0VDNEQzCi06MTA4RDMwMDA4RjE1RDhCNzkwNzk2MUI0MEY2Q0ZCMUI4NEEzRDhERjczCi06MTA4RDQwMDA1Q0U2MjNDRDAwNTNDMTE3MTVDQjdCNDZCRjgwRDVDNDRECi06MTA4RDUwMDBCRUM2MkIwRjI3MkZCOUJGNUVGMUEyREQyNUU0Q0M2MDg0Ci06MTA4RDYwMDA3QTQ1NDk0RTczRTQyMUI4OUY1NEZFOTVGOTYwOUYxRUUxCi06MTA4RDcwMDA1OTg2RjJBODc3NUZEMDJCMUZFMzMzRTFCQjQ3OERBMTYzCi06MTA4RDgwMDA3Q0VDOTU3RjdCMEExQzcyNjFBOEY2OTk1QjRFREYwNTJGCi06MTA4RDkwMDA0MjFGQ0YwNUE1OTdENzExQzgwQkEzNzJFOUNFQUJBRjgxCi06MTA4REEwMDBDMjM4MThBOTI3OEVGMzgwNzk1NTcxMUZFODNENkE5NzVDCi06MTA4REIwMDA3REM1NjdEQjNGNDdDQTk5N0RGNkY3NjZBNzg2NjBCRDJDCi06MTA4REMwMDAzNkY5MjdFQzU1MDFENzExODU3NTcxOENFQjg1NjUwMjU1Ci06MTA4REQwMDBGQkFBQTZEOUIxMjhGODAxREJBMDhBNkQ5RkY2NURERjVBCi06MTA4REUwMDBGOTU4QkYzOUE0QzlFMDJGNkQzRTM4MUZFMzAzNUU3RkY5Ci06MTA4REYwMDBEQzA3NzlDRTREOUU3ODI1QUNBQjI5NUJENkQzRTUzQjFECi06MTA4RTAwMDA2REY2MzFGRjhDRDYxMDlDQjY3QjAwRkFEMDM0QkFFRkU5Ci06MTA4RTEwMDA0RkIzREU3RkYxMzFCRjRCQjNCRUY4MjBFOEI5OUNCMDUxCi06MTA4RTIwMDA2NjQwRkU0NEVCRkU1OThCMzA1Rjc3QTFBQUMzQkU5NjI1Ci06MTA4RTMwMDBEMDREREMzQkI2QjgyMjIxNzFGNDY3NjlCOTMyRUE0NUZFCi06MTA4RTQwMDBBRDIxODJFMzBGMzZERjVCN0RDQ0NGRTA2REYwMEYzOEQ0Ci06MTA4RTUwMDA1RkFGOTZERTRGOTE2OUJFOUI2MUJFQjk4M0NGRDcwQkUyCi06MTA4RTYwMDBGMzk1NjBGQzEwOEVCRkM5QzdGMEU4ODZCRjg3OTg2RDg4Ci06MTA4RTcwMDBGMzY4QkQ5NjYzNUZFRTI4NDY4QTYxRjk3QUY3MkU5QzA3Ci06MTA4RTgwMDA4QTc0NEEwNUI1ODM3RUM1M0U4MkQyRUZDMzQwQkY2Mjc1Ci06MTA4RTkwMDBGRjJFQ0VCM0RFRTI2Mzc5MDkwMkFGQzQ2MEZFODgxMTEzCi06MTA4RUEwMDAwOTE1RjdCRDM5MDlCNkZGRUQ5MzFGOEM4RTcyM0MzMTYxCi06MTA4RUIwMDA4MkU3QkZDNkE4MTg5NzA0Mzc4REREOEZBMUY4RDlCRTA5Ci06MTA4RUMwMDBDNzdCNjkwQ0YxRDVGRTE1OTU2QzAyN0EyQkE2RUI4MTU4Ci06MTA4RUQwMDA3M0I5MDc1OURDQTlERDEzQUI4QTg3RkFDNjEzRURERjM2Ci06MTA4RUUwMDBFMUZCNDA5NTJDQzlDMjdCNTI5NDg1RDE3NEY2NjcyRjYzCi06MTA4RUYwMDA5RDczQjhCOUU1RUMwMTFGQ0ZDM0NBMjdGOTRDQ0U5NkQ0Ci06MTA4RjAwMDAyRTg1QTM0NDk5RkE3MURCMUIwRERDQUYzQ0ZDRjMyOUUxCi06MTA4RjEwMDAxRDA4Q0ZGNjMxRjdBMTFEMkRGQzYzMjQ1QTM2ODhCRkZBCi06MTA4RjIwMDA4N0M1NEJGQkYwQkNENDQ4NTEzQ0FBNTc0QzQ1QTc1RkMyCi06MTA4RjMwMDA3QjMxQzc3MzlEMkI5Rjk3RTM1OUUwNTdGOEVENDkzNDc4Ci06MTA4RjQwMDAxN0Y5NUFFMDVCMDE3ODAyQUU5NEQ5RDE4MUY0OTVDMjQ5Ci06MTA4RjUwMDBGOUM2MERDRjUzRkY0REUxNzkwNEQ2MDA3NDNCOTZBRUIwCi06MTA4RjYwMDAxRkY4RTZDMDE1MDRFMzYwMkU3RTE0RUQwNEREQkJEN0M4Ci06MTA4RjcwMDAxRkY2RkZGNzVFQkZBMDg3Q0NGNUFEQjRGQjBGMTFENzhFCi06MTA4RjgwMDAwRDczN0FGMzcxQkRGOTQyRjlEQjZENzA5RTQ0Q0Q2NUM2Ci06MTA4RjkwMDBGQkRENzA3OUYzQUQzMjlDQzMyMDk2MEVGRUI1QjAzODgwCi06MTA4RkEwMDBCRjUzRTZCQzdGMjQ1MEVBREM3RkY4NUNGNzRENzhGOENECi06MTA4RkIwMDBGRUEzREZGRDJBRENDRTEyRTdGOURERjM3N0UzNkJBRTJCCi06MTA4RkMwMDAzRjdEMUUyNjE5OTNERUVGRUE4RUM3ODlGODg2Qzg4Mzk3Ci06MTA4RkQwMDAxNTcxMDA4NDAzNURCRjY3OTYxQzQ3Rjk1NzQ2Q0M5RDA5Ci06MTA4RkUwMDA2OUU0RDMzMjNGRDMwQjVEQ0ZGOTMxNEYyMjVDQTVBMUE5Ci06MTA4RkYwMDAzRkI2QTAyQzU1MDFFNTgyM0ExMjAzM0Q3MUYxRjE0M0QxCi06MTA5MDAwMDAyNDQxM0JCRDIwQzBFNDdFNDE1OTUyMDJCRjQ3QzE0OUMzCi06MTA5MDEwMDA5NjE3Qjg5REM3MkIwQkVBOTNEMjRBREIzODk2OUZFOTg3Ci06MTA5MDIwMDBBRDhGREVCQzFERTVFMzczNjM1OTVFRkE2RDE1Q0M3RTMyCi06MTA5MDMwMDAzQjE0QkRBMUEzMDJDNjJENjdGOUU0NjFCQTVGODRCQ0VECi06MTA5MDQwMDBCMUYwMTE2RjEyRURBREIyNkUwMjdFNTRBQTA1QUMzMEQ0Ci06MTA5MDUwMDBGRDdFQkM5MTRDQkQ3MTNDRTQ3REY5RjA3OUIyNTFDNzA1Ci06MTA5MDYwMDBFNzgxQjFEQUZFQ0I2OUJERjU4NTAxMDNGQTZEMjkwQTA2Ci06MTA5MDcwMDBCMEYzQkQ2MTFGRUVGN0ZGOUNGRDc1RjRBQjlFNkU4Q0U3Ci06MTA5MDgwMDA2MkZEQjY2RjlCNjg1NzM0RUYzRjgxN0VDM0EwMzkyREQ4Ci06MTA5MDkwMDBDNkZDQThBNjQyQ0E2MTNFODc0Q0YwNzMxMDM1NjYyQzA4Ci06MTA5MEEwMDA4NkVGMDc3RTgzRjUxNDJERjExQjBCRUM5MzY1MUFFRTBBCi06MTA5MEIwMDBFRjAxMEUxMDRGNjhGMkIzN0NCOUNERkVCQTY4MzYzQ0IyCi06MTA5MEMwMDAwQkM5OEE0NTY5RTBCRDgyRUIxRDRBNTE4QTk2RDc5NzQ0Ci06MTA5MEQwMDA4N0E0OTVBNzk0MkNGMDI3OTc5MTRFQzg3M0Y3QjQyNEQyCi06MTA5MEUwMDAyQjQwNEY5M0Q1QkEwMUUzOENGMTI1MkJDMDdGM0NBNkQyCi06MTA5MEYwMDA1QThGODEwRjVEMkI2N0U3NDUwNDNFM0M3RTEyN0YyMjJECi06MTA5MTAwMDAwNEY1NTJEMkFENzREQzg5MDExREM3MjkzODkyQzRCQzY0Ci06MTA5MTEwMDBFNThGREU5Qzk5RDZGRUJGRkQ2ODA1N0VERkQ2NTg3OUM3Ci06MTA5MTIwMDA3ODlFOEQ5RjQzMTlFMjk1MUI4QkU3M0NFMEE3RTNCRDNBCi06MTA5MTMwMDBFQTY3RkM5QUE5NUZGMTFDNkFCRkFGNzIzQTM5RjBFNkEwCi06MTA5MTQwMDBDNDUxNjA1RjM2NjRDOEEzNTY3NDhBQTcxMTRDM0U4MTJGCi06MTA5MTUwMDAzRjYyRkQ3ODYzNTQ3NkM4REUwRjgzODdGMkRDQjMwQzgwCi06MTA5MTYwMDBBRkE1OEMzRTlCN0UzQzMxMEJGQTdERkVDREE1M0FGODM3Ci06MTA5MTcwMDBGQkZFOTQ1QjhDRkI4NjUzNEY3QjREQjA1RjRFRTU5MEJFCi06MTA5MTgwMDA2QUNDQjc3QzdBRTY4QkIwM0ZGQzQzRTNDMTFDRDUyNkEyCi06MTA5MTkwMDAxNzRGRkRFODk1MTkxRURBREZBOTI3NUY5OUExMjI3MzAxCi06MTA5MUEwMDAyNTFENzZFQ0JBNzNBRkNFMDAzQkMxOUE0MzRBRUFFODdDCi06MTA5MUIwMDBCMzU2RDcwOEY0NUJFQjYzRUIxMDc5NzJEQkYzQjQ1NjZDCi06MTA5MUMwMDA3ODVFMTlDQ0M2RjY3OUEzRTQzQkExQUNGODVFMURGNzM2Ci06MTA5MUQwMDBFRTM0NUMzNzhCMkJGMDM4MEU1RDVGNTMwOEU5NUFBN0VECi06MTA5MUUwMDAxQjEwODgxNzVBREU3MTEwQ0Y3QUQzOEJGNEY3NTEyMUY4Ci06MTA5MUYwMDAyOTI5QkMxMEZDODIwQUI2RUI1OTREOTI5MDRGQTFBNUNCCi06MTA5MjAwMDBFQTgwM0Q4OUZGRTUyNDAxQkUwOUJFQTZFRjQ3NUFFMzg3Ci06MTA5MjEwMDBGN0MxRERFOUU3RjkwRjNDOEY3MEUzOUJCNzRGMDRGODI2Ci06MTA5MjIwMDAwOEI5QUVDRTI1MThDRkU4Rjk5QTJGMDlGNkU4M0RBQTdECi06MTA5MjMwMDBGMTlERTU2MDA3NUVBN0UyM0M2ODE5Q0YxQkI5RjFCMzY5Ci06MTA5MjQwMDAzQzU4RTQ4OEUzRTVGMEY4ODRDMDZCMjYzQUQ5REE0ODY0Ci06MTA5MjUwMDA2MkM1MTRERTNGNkJGNEM1NjBGQzdEOEQzQTk2N0ZEMjBCCi06MTA5MjYwMDAxOEM1RjJERTQ2MDM5RjRGMzc5NkUwQjNBQjMxODZERjc5Ci06MTA5MjcwMDBGNzM0OTZFMzUzRTRGNUUxRDY1RTQxN0IzQTVFMDE3QTNBCi06MTA5MjgwMDBFODFBRTY4N0QzMEREOTg0N0M4NTJDOTVGOEUwQkUyNkI0Ci06MTA5MjkwMDBGREU4QkY1NUMxN0UxQkU0NEE1NjBFRjJCRDA0RUQ3M0Q2Ci06MTA5MkEwMDA3OTlFREZDOEZDMzlFRDE1NDY5RjdDMTVGMkI0Qzk0M0ExCi06MTA5MkIwMDAyNDkwNDdENjJDRTY2NzA4NDM3RkI0N0RFRTEyNDJERTQ5Ci06MTA5MkMwMDBCNkM5RjU3M0Y0OUZCNzRCRjhGQUU4N0NCMjRDRTc3NzcwCi06MTA5MkQwMDA3N0ZEODg0QTE3OTBEM0JGMUQ5NThCNThFRUVCMzczRDJECi06MTA5MkUwMDBGQzg2RkIwNDdGRjlEQjM2RkFERTNFOURBRTlBRDJEMUQ2Ci06MTA5MkYwMDA3Njg5QzlCMTNCRjlGNzNCQTZDRkM4QkEwMUNBQjM2NkI0Ci06MTA5MzAwMDA2NDgxNUNERjNFOEIxODNBODVFMzVEODY2Qzc5QjJGQTQ2Ci06MTA5MzEwMDBFQUVGNjgzQzk4Mzc2RjNDRDc0MTIwQTdFQUY1OUQ1QkEwCi06MTA5MzIwMDA2Q0ZCOTgzMTE2NTkxMUI3RDFDQjVENzU2QUU1MkVCNDM3Ci06MTA5MzMwMDAzMzEyRjk4QjI3NjNCRTMxRjc2QkVGOUU2NzhFQzE3RUM4Ci06MTA5MzQwMDBCMTNDMjFGMEUyM0M4QkVCMTU5MDMzOTc5RDY1N0FBOEY4Ci06MTA5MzUwMDA1N0ZGN0NDQ0RFMEJCREE3NzFGQzZGOUJCRDQ5ODkwMDFDCi06MTA5MzYwMDA5RjgwM0MwNTc5NTk5NjIwNzNFODNDNDM5N0IyRjhGNzAzCi06MTA5MzcwMDBBQzc3NTMwNEYyRkJCNDE4N0QwRkY2QThDNkYyNEQwQTgxCi06MTA5MzgwMDBBMjQ5MDlDQTNGRjJDNzY3MDYyMEVGM0RFN0ZFRDQyRTg3Ci06MTA5MzkwMDA4QUVGMEZCQkJDMDZDNDFCQkI5RUZCMEJFNjY3Mjg1M0MyCi06MTA5M0EwMDAzNDFGRjA3N0MxQkU2Mzk4QjdBNEM4REQxQUVDNzg5Nzc0Ci06MTA5M0IwMDAwNTI2Q0Y1N0MxOUU4NTg5NjA3QzgwMkE2QThBNjcyNUU5Ci06MTA5M0MwMDA4RkFGOEYzQ0Q1MzIyRjA0RTdCRTEyMjdFQ0Y1QjcwN0RECi06MTA5M0QwMDAxMkI3QjIxRDMzMzE3RDUxQ0EwRjdFRDFGRTgyMTY4MDg1Ci06MTA5M0UwMDBDNzU2MEYyQjJGMEI0QzZBQjFCMDRDRUI2N0IzNzIzM0RGCi06MTA5M0YwMDA2REJGMzVCQjMzMkE2NzQzRDJENEM0OTY4Mzk3NDI1OTk1Ci06MTA5NDAwMDBENDlGRDg2MkNEMjZFNDFBQUUwRjQ4Mjg1MTA4RkNERTVFCi06MTA5NDEwMDA1QkQ2NjkzOTZDMkJBQkFDNEM3Q0VDMjlENkJCRUVDMDZGCi06MTA5NDIwMDA1RjVFMUM0REUxNTBCMzRGRUFDNDEwREZCRTlEMTJBQzJECi06MTA5NDMwMDBCQjYwRUY0RTk0QUYwNTQ5ODJGQkZFODJBNDk0ODRBM0U3Ci06MTA5NDQwMDA5RDdCMUEwRkVBQ0RDMkI5MjZGMDQyNDVDM0E0MjhCQkMyCi06MTA5NDUwMDA1RjQ4NEI3QTYyQjBCRDlDQzRFRjBGMTE3NEYxNzQ5MEY5Ci06MTA5NDYwMDBFOUM3NDk0OURBREUxRTk3NzZERDI3MzI4OURGNTc4MzVGCi06MTA5NDcwMDAyMDA1NzlCOThEOUQwNzc2RDM3OTI5RUZBRjgxNTg1QkE3Ci06MTA5NDgwMDBFMDNDMkU3OUNDQTM2MzdDOUNGQkQ5NEYwQUJCODlGQkMzCi06MTA5NDkwMDA3MzZFRTEwRTNDQ0YyNjJCNzAwMUM4QkY5NTJBRkE4MTZFCi06MTA5NEEwMDBENzE2MjYzNzUyMUI4QUFDN0RCNjMwNDYyRDU2RDJFMkVGCi06MTA5NEIwMDA2N0Y0QjIzNkJCMzM2RjJBQzU2NzRCQjZCM0RDQzRGMzZGCi06MTA5NEMwMDBFN0EzRDk1NjM2OUNEN0FERDk3QkY3MzhDOEVGQTkyMTg5Ci06MTA5NEQwMDAxREQ3N0YxM0U2RkIzMjhCODc5RkQ4M0YyQkVCMTI1QUE5Ci06MTA5NEUwMDA1RUY3MzI4QjYzQUNFQjdBNDUwM0ZBQkUyN0MwRjM4RThFCi06MTA5NEYwMDBCQTJFQkExMkQ2NTdCMzREMjY3MjIxRTM0QjczMjI5RDcyCi06MTA5NTAwMDBBRUQ5NzEwMTlDQUM3QjdFRUI1QkYzRkQ2MzA5NzlBNDYyCi06MTA5NTEwMDBDOEQ0RTU4QjA4RTkwRTlFNjhGMTUxRkMzRkEyRTk5MzlGCi06MTA5NTIwMDA4MDNFQkE4MzNEMkQ0MDVGNkI2N0M5OUM5RTdBNUUzMDVBCi06MTA5NTMwMDA1NTlFRkY1ODAwRTM1Q0RFMDI3MTk2RERDQjJBQUYwNDM2Ci06MTA5NTQwMDA3MzJCNEY2NkZDNEIwOTEyRTNEQTRBNzZCMzBGRUNGOTQyCi06MTA5NTUwMDAzRkI2Qzg2ODNGODM4Qjc0MDM4NTdCQjE0QTBFQUFGNDdCCi06MTA5NTYwMDBCOTVEQTNGODA0M0U2QjU1NTExRUQyRjc2RDFFQzQ0Qjc2Ci06MTA5NTcwMDAwN0RFMzM0MkRBRDgzRDJERTNGNzc5NTc4MjlENUQ1Q0YzCi06MTA5NTgwMDA2N0FFNDY3QjVCMkY0NTNGQzAzOEQyRkI4Mzc5MTJFNzNECi06MTA5NTkwMDAxMTI2N0YyN0VBQTQ0MkE1RjU2NjA1MEIxMTdGQzU1NTY0Ci06MTA5NUEwMDBEN0FFODU3NjRBNzg0OTAwRjgzRDRGNDk1QUQ4RkY3N0JCCi06MTA5NUIwMDA5OTFDREUyRTI3M0I3RDIwOTcyMzQ1ODhERkVEMTE0NjQxCi06MTA5NUMwMDAxN0Q2M0RBNTQ4MTdCQkU1MzkxNzgwNURENDIyQUREQzIxCi06MTA5NUQwMDBGMjBCQzA2Qjc2MTE5RTdCODVGN0VCNjFGRDFDOUY0REY2Ci06MTA5NUUwMDA3QUNDMDdGOERCQ0RGMUE5RUM5NDJEQzhENzE0RUZCN0VFCi06MTA5NUYwMDA0QTM3QUMwNkI4OUVEODUyM0ZERjQ3RTE5QUU3MzVEQkUxCi06MTA5NjAwMDA0NjUwM0MxQ0RGNTJERjEyOUQ4NTc4MjhGMkQxRUZDNzBGCi06MTA5NjEwMDAwM0Y1MkQzRThBOTdERDFCQ0QwMkRENTY5RUY4MDk5NTk4Ci06MTA5NjIwMDBFQTQ4QjRGNTJERTY2Q0YwOUZEQ0I3MDY5NDEwRkRGRTE5Ci06MTA5NjMwMDAwMkY4M0YxRUM5MTE3Q0NGQkUxNzE3RjVDQTExMTNFQ0YzCi06MTA5NjQwMDBEMjI2QUI0RkFFRjhBODVFMjhCNkQ1OUY0N0U1QzIwRjJECi06MTA5NjUwMDAxRTUyMTBBRkZGNEVDNzAzMzk0MUQ3NjEwMURERjc0Q0YxCi06MTA5NjYwMDA1MkQxMkUwOEQwQjkwNDY4MzkzMEI5MDhGMzZERTlCQTdGCi06MTA5NjcwMDA0OTAwRUM4NkM5MkFFQTc5MTFDN0QxMjZDOTY4Mzc0MzVGCi06MTA5NjgwMDA3REEwODc0MDdFMTFFNkNGNTE3OTFEODc3MzNFNEE5NEI1Ci06MTA5NjkwMDBDNTc1MTQ2NTg3NDk3OTk4MDQ3OUZFQkVBNDJGQzJGQjZECi06MTA5NkEwMDA0OEZDMjVCNkJDMDI5MEJGQUUzQzA0QzU1NTFFRUZFRDhDCi06MTA5NkIwMDBDRTk3QTk3RUNEM0RCQTQ4MUE0N0YxRjI1RTgwRUY4Qjc2Ci06MTA5NkMwMDA3MkU5M0U5NkJFN0YzRkMwRkM0MEI3QzdBRDJGNDNCRTk4Ci06MTA5NkQwMDAwQzMxQkFGMzU5M0MyQTNFMTU5RUEzQUUyQjFFMzU5MDkxCi06MTA5NkUwMDBGRkE1RkY3RTM1ODZGNkNCQkQ2M0Q0QjRGOTYwRkYxQUMzCi06MTA5NkYwMDA2NEZFNDFFRkQ4NjJCQzU3QTM4MTUwRkUwN0JFMDhGMTVCCi06MTA5NzAwMDBGQkYyQjhGQ0YwNzA3QkMxN0Q0RTQwQzgxMzRGMzY1QjU2Ci06MTA5NzEwMDA2MzdERkJEQzUxMzlBMUJFNzM3MDRBQzhGNDgxM0NEODJCCi06MTA5NzIwMDBBRjRGQ0QwMjdCNzQzQzk3NTNDREE5NTk1RjA1QkI0NTI0Ci06MTA5NzMwMDBFNUYyNjA4NzlGOURDQkVEQzkyNjlEQkIwOEQ4QkYzMTYwCi06MTA5NzQwMDA2MkNGNEIxMEYyNjA1QkEzMEY5RjBGNUYzNjAxRTM5NzcwCi06MTA5NzUwMDAwRjVGOTYzNzA3RTIxNTA3MkU3RTFGRjdCRjY3NzYzMDNCCi06MTA5NzYwMDBGRTNENzNFODA1Qjg0Qjg5OUNCMUE4QjYzMTE4NTlBMUU0Ci06MTA5NzcwMDA1RjNFNzUyRkRFMTdGMjdEMzU3RTE3RTZDQjQzQkUwRUJBCi06MTA5NzgwMDA5REQyNUREOUNFM0NDQzQ3Mzk1Q0NFMDU3OERFODA4NzUyCi06MTA5NzkwMDA3RDE3Rjc3OEE4NjdCRjg0N0VFMDZEN0MzREJFQzQzQzMyCi06MTA5N0EwMDBEQzU3ODIxQjBGQ0UxREZCNDkwN0RFQzcyNEUwRTBCRTVECi06MTA5N0IwMDBCRjQzM0QzQjg1RjlFQjAzNkM1RjJBRjI5N0RDNzk0QUE2Ci06MTA5N0MwMDA2MjNFRkI4MjE5RUUzMzc2RTE0M0Y4MzUwNDFFNDRGQjFBCi06MTA5N0QwMDA3QUM5MUNBNTBGNDAzN0I1NjcxNTkyQjRFNTg1RjQ5RDhECi06MTA5N0UwMDBEQkQwRjBGRDY5MzhFRjkyMDVGN0FGMjQzQTJFMjkwNDVCCi06MTA5N0YwMDAzRTQ4QTI5REU4MEYzNTNCRUU3MTI1NTFCNUM3N0VCRUIwCi06MTA5ODAwMDAyNEU4M0FFRkUyRTYxN0I4M0YxOEY0QjQ2NjBDN0NBRUYxCi06MTA5ODEwMDBFNTdEQkFDRDE1NzlCOTk4QTdBRTkyMDdDMEFFM0QxNUQyCi06MTA5ODIwMDA3QzZCMDZGOEUzNkFBOTk4MDA1NzM5NTEyRDNDNEY3QUIyCi06MTA5ODMwMDA5QUVGNEJENDdEQjdFMjc5MUUzMTNGRTE4RjEzRTU5QTYxCi06MTA5ODQwMDBCRDhCRDA0RjU3QkIzQjg0RTc3OTZBOTI0QzBFQUVGMzg5Ci06MTA5ODUwMDA1OTA3QkRCMjNERUZENjRDNDFCRUFENjcyRkVCNkYzQzEzCi06MTA5ODYwMDBFMDgwRDJDNzg3N0E3NTNFQUMzRkQ4NzBGRTRDMzg2NzJGCi06MTA5ODcwMDA5MjI3RDc5RDM3MEVFMEEzMzIzQ0MwN0VGOUM5MTA5RUQ3Ci06MTA5ODgwMDBEMzU1QkRCNkZCNTNERkUyRkJFMzY1REMxRTA5MTI0QjhCCi06MTA5ODkwMDAwNjc4MkE4MTU4Mzc2MTY3MTY0RDk1REE0NzRBQUZEQzVBCi06MTA5OEEwMDA5QkRDMDJGQ0IwREQ2NTZGNkQwRkIwNzI2QjcwNzI0QkFDCi06MTA5OEIwMDA3MzI5RUE2Nzk0OEJDQjAyM0Y0MzdCQThDNTJGQ0FDRjlECi06MTA5OEMwMDBBMjlDRENBRUIxRkIzQUFDQTdCRDA2RTgzRERBMUVDRkU4Ci06MTA5OEQwMDBBNzVCQ0I0QTUwN0YyODQ1QTQwMEUwMzYwRjFDMkQyMDAzCi06MTA5OEUwMDBGRjlFRjZFRTAyM0ZDMzhGRkM4OTZCMDIzNkI4OUQwQURECi06MTA5OEYwMDAxRjE5MDdGQkNBMzRGRDU5OEVGRUM2MERBRjNGM0E3RUQ1Ci06MTA5OTAwMDAxN0UwNDE3QzlGMTdCOTFGRkJBN0VERDBERjQxQzYxQ0I0Ci06MTA5OTEwMDA3QThCREFCQTI0RUY2OTJGOUUzM0RDRTE3MURBREJFMjZECi06MTA5OTIwMDBGOTIwRTdDQjM2RDdCRDFEQkU0NEIzMDk5QjczQzE5RjU5Ci06MTA5OTMwMDBFRTdCOTYwNUJGQUE2NzI3MzlGMkE0QzYwNzU5M0M1QkEwCi06MTA5OTQwMDA1NTRENzA1NUQyRUZBNUVDN0I4MEQxNDExQkNGQzdDOUQ3Ci06MTA5OTUwMDAzQzRFNEU4NjcxOUM3MUJCRkVFM0NDRTA3MjgyRjA3RDgyCi06MTA5OTYwMDBBQ0FBRjdERUNCMzk0MEZFQUIzQkJFRTg5NjZGQkQ0RkVECi06MTA5OTcwMDAyRURGRjIzOTNEQzdBNUM0QjM0MTVBNUU5M0VDNUMxMEFCCi06MTA5OTgwMDA2MEZDMzkwNUY4NzMzNUE3RDM5MjNENzczRjA3NkFGRDMwCi06MTA5OTkwMDAzMTlGRjk2N0Q4MzdBQ0YyOTkxNzA0QTcwRjlGN0ZCQUE4Ci06MTA5OUEwMDA4MzYyM0RGREU0MTdCM0NCQUE5OTlENUJERjNFRUQ0QTkwCi06MTA5OUIwMDAyOEQ3REY1MUE0NUI2OUUyNDVFMjU5N0QzNkU4OTA1RjI0Ci06MTA5OUMwMDBGNzcwN0Y1MUI1NkFBMTFDQUIzRTFCQzFFRjlGREY3OERBCi06MTA5OUQwMDA3RUM3NzlCNkZFRTM4NUYwQkIxOEVGMTY5NzdDM0U3MDI0Ci06MTA5OUUwMDBGMTRCREJDQjI5MURENzNGRTE5MUJEQjY3MUVBOUZFMDdBCi06MTA5OUYwMDBFNzgwRkM1NDVFM0JGOUREMDQ3RTU3MEI0OTZGOUUyMkU1Ci06MTA5QTAwMDBDODg3QkIzNDUxNTY1QUMxMkU3QUM0MkUxRkNBQzE2RUE0Ci06MTA5QTEwMDBFQjZCMEZGNzE2REUxNUUwRjVBRDYwRkFGQTQxNTdGRDc2Ci06MTA5QTIwMDAyMkQxN0YyRUQ2NzdDRjQ3QzgxRjI4ODM5REE2N0VFMkZFCi06MTA5QTMwMDAxNUYzNDNGOTc1QjdFQ0VBMkY0NzhDM0YwNkZCMTNGNjk1Ci06MTA5QTQwMDBGQUI3MDNFMzVGODQzQjI1RUVDQTRFNTY4QzY2RkUxREQzCi06MTA5QTUwMDAwM0VDODBFRkFCQjE4MEZEM0VBQzZGNzM3QUFEM0U3QjIzCi06MTA5QTYwMDBCRTAzREY3RDcwOUZFMDc4RkZGQkM2QTgyMzVGRkZFNkEzCi06MTA5QTcwMDA0NDNEOUVEM0Y4NzY4MEQxNjUzNUI1RThCMUREOEVEMTExCi06MTA5QTgwMDA4RTNDRkQ3RkNDRTNEM0NFRTM5MjBDRjNCOEVDNkYzQzdECi06MTA5QTkwMDA4RjQyMDc3RkY2Q0RBM0Q4RjFGRUQzQ0U2MzFGRjcwQjFECi06MTA5QUEwMDAzRkM3OUZGMzc1NzYyRkMwN0M0MzQyQkZGNTdDNUFEN0UyCi06MTA5QUIwMDA0RjY5RkRDQkY0RTlBM0NGRjkyQUIxNDI3OENGNkQ5MjdCCi06MTA5QUMwMDBERDYzNDZDQkUwMEZGOEVBMjdCN0JEN0IzOURFMEI2RENGCi06MTA5QUQwMDA2MjNFOEU1N0U0RTNGMDczMUU5QkM3MEM3QzVGOTFGQkU0Ci06MTA5QUUwMDBFRjNCQjhCRjA3MzNEQ0QzREExODYyRkJFRUJCMkZCQzA5Ci06MTA5QUYwMDA4QTYwRkU3QTI4ODE3MTgyRkRGOTBCQTI2MEE3N0ZFNzU4Ci06MTA5QjAwMDBDMjFBN0MzNkU3Q0Y4ODgyM0M2QTBBN0ZERDkxNkY0RUFECi06MTA5QjEwMDBGNzA4NjlDRkMxRkU5MUY3NEJDRTdFNTlCNjlGNDdEOTYyCi06MTA5QjIwMDAwQ0U3NTFEMkQ0MTc3MUIxQ0RCRTNBQ0MwM0ZGQTJENjA3Ci06MTA5QjMwMDBGQkUwMTdCNERFNEJDMzhDREUzNkZCMTIxODE3NkM4REJFCi06MTA5QjQwMDA3RTMxRjM3RjI2QzRDNkI5RkJDMkNCMDg5QkVGNjUyOUUzCi06MTA5QjUwMDAxNkY3RDEwQ0ZCNzk2MEYxREMxRjlFMTE4NTc1MzY2NTE3Ci06MTA5QjYwMDAyRjg4MDIzRDM3NjdDRjcwQUM0N0M5QjA5RTU1NjEwNjVDCi06MTA5QjcwMDBBN0NERkExN0JCOUVDMzlGNzkzRDBCRDJFNkMxQUFCOTA4Ci06MTA5QjgwMDBFOUVGMTc2QjE3Nzg4QTI2OTBDRUJFQTg3NTlERkExQjUxCi06MTA5QjkwMDBBRjZCMTRDNzU3NzU4OEY5MEQzNjFCOEM4RjgyNEFGQzQyCi06MTA5QkEwMDA1Nzg1RDJFMDdDMzhEOERGMUQyMUM1ODYzQzk0M0NCQzZCCi06MTA5QkIwMDBERjcyNzg2NUUyREY2NTlFRTQ0ODk4RDc5MTQ2QjY3RjBDCi06MTA5QkMwMDA3RTlEREYyN0Y1REJFQUE2MzBGQUI1NURFMzZDMUVCM0I4Ci06MTA5QkQwMDAyQjNDOTA5RkUzN0Y1NjNCQ0ZBNzBGMjYzNzVBNDIyQzUyCi06MTA5QkUwMDA1RUYzQjU4NEIzREREMkFBNjBEQUZCNEQyOEZDRUUyQTIxCi06MTA5QkYwMDAyQ0VDODM2NzNGRkM3RkNFNzBDQjQ0OEZDMzg1NUI2QkJGCi06MTA5QzAwMDA3NDc4NzAxQjhDMEZBQUUxOTI5QkU5ODNDMzRERDA1QkUzCi06MTA5QzEwMDBBNjdFRkU3RkExQjMwNzg3MEUyRkE0QUZCRjE1QkNGRUEzCi06MTA5QzIwMDA1RUU5RUIxOTgwRDcxMEY4RjIxRkYwM0FDN0Y1RTZEMERECi06MTA5QzMwMDBFMDI1RTREODFFOEREREJCRThFRUU3NDQ5OEREQUYzNEM3Ci06MTA5QzQwMDA1MUFBM0I3QzA1QzQxN0JFQTJBMEJGRjdGMDhFNzlFQkVBCi06MTA5QzUwMDA4ODZDQUZDN0Y0RDlFMUNBQjlFQjMwREYzNTFFQzQ3QkRECi06MTA5QzYwMDAzQzVGOTM2M0ZGNUUwNjcxODdDNUFDNURCRjc5NzJGODk4Ci06MTA5QzcwMDBCQzE0Q0VFNjdFNEI2MzI0RjgxMTVFOEI1RjNERTBGQUE4Ci06MTA5QzgwMDA0OEE1NkQ1RDk4OTc2OUJCOEY0QUU5MEZERkMzQzRCOERCCi06MTA5QzkwMDBBMzBDRkM0RDBCRDNDRjQzRTAzM0QzQjhDM0M1RTc2QjY0Ci06MTA5Q0EwMDBGMUVGMEYwQjlGODNBREY3RDk3MEQxOTBFNDg1RDgzN0QyCi06MTA5Q0IwMDBFNDkyREVCRjk3NzEwMUMwNzM4RkNDRjIzOThFQzJBQkQ0Ci06MTA5Q0MwMDA3Q0I4OUY4QzYwQTVBNTU1QTM3NjAyOUVDQTIyM0NFRjY2Ci06MTA5Q0QwMDA0OTMzRDY4MTlGQ0M3QkY1QzJBRDYxOEFCN0Q3QUVDOTc3Ci06MTA5Q0UwMDA5NkJDMzY3ODc5MjMwQ0NGMzM5NkE3QjcwQjczMjMzQ0Y5Ci06MTA5Q0YwMDAyRkI3QjdCRDQ0RTAzRTQ0NzczRDg1RDdCQjY2MzlCQjNGCi06MTA5RDAwMDA5NzhBQThFNkQ4QzVCNjczNzU1MzVDREZEREVEQzc0NjA0Ci06MTA5RDEwMDAyMkY4RkQzNTFFNkY3NzdGQ0ZFMkVEOTcyRTE5QjgzRDAzCi06MTA5RDIwMDBBOTYzRjdCOTUwQkExQjlCRUU3RTQxQzExRjlERTE0NDY4Ci06MTA5RDMwMDAzNDQyOUZBRjRCODkwN0JGMDE3NDM0MjlDNEUyMUUyQTA1Ci06MTA5RDQwMDAyOTg0NzhCREU4Mjc1NzI1Mjk4REMyRkQ1RDhGMzExNkZFCi06MTA5RDUwMDBGQ0I0NjlGQTI5MUNBODlGNEM3MDE1RUIxMUUzMDAyQjg5Ci06MTA5RDYwMDBDMkJEMkM3NEZGODhGQkM1MzI5MzkwRDlCMDRGRjRDNkE2Ci06MTA5RDcwMDA2RTY1ODcwRDE5MURFNEYwRkM5OTk5NzVDMUU0NDZCMDM0Ci06MTA5RDgwMDBGMzU0QkE0RURCN0NCQkZFNkJFRUZGODBFRjVEODc2NTY0Ci06MTA5RDkwMDA3RDUzNjE3RjM4MEMyNjFGMTY3MEJBQzk1NTEyOUJGQzgzCi06MTA5REEwMDBFMDFGNUIyMUE1QkRERkVDRjIwOEZCM0IyNTFGODQ3Qjk4Ci06MTA5REIwMDBFM0VBMzhDRTg0RkIxMjFFQjhFN0UwNUE5RURGNDQ0ODNGCi06MTA5REMwMDA2MkFDRkRFRjhDN0RDMEU1OEFCQjVEQUVDMkUyRDFFNDQyCi06MTA5REQwMDAwREM2Q0Y3Qjc2QUQxOTlCOEU3RjVFRTU3Q0ZBNDFCOEQwCi06MTA5REUwMDBDNDkxOUZCNDI0N0VBQjA3Rjg3M0M5QzI0NTFFMjMwNEY3Ci06MTA5REYwMDBERjk5QkNCQzg2Q0Y2MzhGOTYxODdCNTFBODBGNEUxOTk0Ci06MTA5RTAwMDBFNTEwODc0RkQ3OTE0NDEzRENFRkIwQTI0MUMyMzg1MjFFCi06MTA5RTEwMDBFOTA2NDY3NzJCMzZFQzk3RDdEMUU3NEVDRTdGOEIwMEZECi06MTA5RTIwMDAwN0I2RkU2RUU1NzhEREIzMkIzMDBFRTZCRkE3RDc0RjQxCi06MTA5RTMwMDA0NzNCQTZGM0I4RkU3RTgyN0VBRkQ1OTFBQjM2ODNERjdCCi06MTA5RTQwMDBBQjVCMjJGQ0VGMzJGQ0E0MTJGMjBEQkE3OTlFNDgwQkY4Ci06MTA5RTUwMDBGREJFMTFFNjNCNkYyNEYyRjc4NDBEMUZENDgzN0NFRTI4Ci06MTA5RTYwMDBEMjA4OUU5N0ZCOEY3NjJGRkU3RDBCNDEyRkJENzI2MjJECi06MTA5RTcwMDBDMzQ3OEQ5MDc0NzdBRjk2OUEwQzc0MzNCMkE5RUUxQkRBCi06MTA5RTgwMDBFOUZDRTQxNkU3RkIwRjQzRjFBQzc0NzZBRTc4MEE3OThGCi06MTA5RTkwMDAyRUVBMkQ1NjBENEZCQUZBNTc1NzNBRTU5ODk4RjcwODFCCi06MTA5RUEwMDA2RkVBNTRCQUZCMUE3QUU5MzAzOUIwREVGQjM1OTdFMzMyCi06MTA5RUIwMDAwMkVGQkRGODNFOTI3RTVGQjQyM0MyRTI3NzdCOTI3M0RECi06MTA5RUMwMDBENkEyREVCMkJDMDZDODQzMzExRjAxQUY1QzhCQzFFOTJDCi06MTA5RUQwMDBEQTI1OEE0M0RFQUU1ODE4NzQ5RDQ3NjI3MEZEQUFENzEyCi06MTA5RUUwMDA3ODA4RDY3MUVGQUU5NzI2RTNERjUxNzRFOTg3ODA5MjQ4Ci06MTA5RUYwMDBEMEUwRkJDRDI0RTUwMTM5NzE1QzMxRjBGOTdBQTNGM0IwCi06MTA5RjAwMDA1RUU2RDc0OUUyOEVFOUEwM0YxQjk0QjQ3Q0Y1MENBNzJFCi06MTA5RjEwMDA5RkQ3QUI1NjVEODNGMzZGNTY3NDk4RkZCMUU1MjNBRUMwCi06MTA5RjIwMDAyQTA3Rjk1MkU1QzE3QjgyOEYzNURGMTZCRUM5QjY3RTlFCi06MTA5RjMwMDBBMUVGRENGM0ZBNkRGNUFBMDFGNUQ2RDIyQTI3REVGNkY5Ci06MTA5RjQwMDA2OENDMkVCMEFFNjQ3Q0I4OUFDQTlCRDk0ODVGREQ3N0U2Ci06MTA5RjUwMDBDQ0E0RTMxRjRFRTY1Q0I0ODU1NTI3RjBGNzFDQUZFNkIyCi06MTA5RjYwMDBCRjFGOTcxMzc3Q0VBNEYyRTY4NENDRkM2MUQ2M0YzMUI1Ci06MTA5RjcwMDBCOUIxRTRCRTc4MEJDNDc5NEYzNDRDRkI2OTM3QURGNzA3Ci06MTA5RjgwMDAzMjVGREY1QjBEMDNFQjQ3MzczRDREQjhDRjc5M0ZFNURGCi06MTA5RjkwMDA4QzIzNDQ4M0Y2ODlGQUY0RkFFMEZBRUMyMDkzQUY2QTUyCi06MTA5RkEwMDA2QzFDQzg5N0VCMzZBNEFGQjcwOTkyMkI2OUJEMTM3RjIxCi06MTA5RkIwMDA1NUFBRDNFNTZEN0VBMjMzM0U1OTExNEZERkZFMTMzRDA2Ci06MTA5RkMwMDBDQ0JFODM1RTRBMDNFN0JENTk0MTJFRTdGNDcxMjBBNzVBCi06MTA5RkQwMDA1NzY0OTg2RjU3NTYwNEVCQkREMzcyRkI3NTEwRUYzQjc3Ci06MTA5RkUwMDAyRTNCRTVGMzBGQjI3OEZDM0M4QkM5RTcxM0JCOTY3OUE3Ci06MTA5RkYwMDA0NjAyOUU1QTI1MURFOEUxRURFQ0Q4MjRBMEI3OTVDRDg4Ci06MTBBMDAwMDBDN0QwOEZGMDJENUVGRkJBNTBGQzQzRDA0RjRCOEUyQzQzCi06MTBBMDEwMDA5RTNGOTJFMkE1NkIzOTg5NDk0NjY2RjlGRjMxRTc5Rjc5Ci06MTBBMDIwMDA1Qzg1REQ2MzQwRjVERkJCQTBGRjY4RDM3N0QxRkU1MEQwCi06MTBBMDMwMDBDRDcxNUY5QkNDQUU2Qzg0QkNDMjEzQjJCNTA2RjM1MDNECi06MTBBMDQwMDA3NjA1NThERTExODk0REI3REYyRjEzRTBGMzM4QjE3QjY5Ci06MTBBMDUwMDA3OEY4QkUyNjFFMUNEMDhFM0Y0QzNBNkE3MERDREQ0MTdCCi06MTBBMDYwMDAxREUyOEY4NzJCOTVENEU1NzQ5MkVGRUQwRUUyM0RBRkE0Ci06MTBBMDcwMDA2RUJFQzgzNEZFNzBFREMwMTNCQjg3NjcwNzBFQjZFRTI4Ci06MTBBMDgwMDA1ODU2RTE5MEVDQzAzMzk1RjdERTU5MDY3Q0E0NzU0QzI4Ci06MTBBMDkwMDA0OTI3N0Y4NTlDN0U4REZCQUREQ0Y0MjM5RUIzMzkzRTQyCi06MTBBMEEwMDA4RTI3MDc5RUQ3Q0RGNzNCRTc3MzVEOUQ3MzNFODI1RjlBCi06MTBBMEIwMDA4RTI3OUIwMjkwMUY0RTQ3OUY2Q0I3NEJDOUJDRTk4MzBDCi06MTBBMEMwMDBFODU5RTZGRkNEMzRDRjM4OUZBNzkwMTM0MDc5MTA0RjYxCi06MTBBMEQwMDA1QkNERTVDRDVCMERGNzQ2RUM3ODcwQUZGRjg0Q0NGNzM4Ci06MTBBMEUwMDAwNzBGQjFCQ0FERjFGMTk1NzM0NjFBN0RGNDc5NUQxNjk5Ci06MTBBMEYwMDA5MzQzOUYzNzVEMEEzREUzRUVFN0VGOUQwRTg1OUUxQjgwCi06MTBBMTAwMDA4QzBFODU1QzcwQjdGRjAwRTJGQzIzRTFFRkUzRTgxQUY4Ci06MTBBMTEwMDBDNDY1M0U4ODE4QUM0Q0Y0MDU3MDQ0ODY5NEYzNzNDQjQ4Ci06MTBBMTIwMDBDNDE4MDdFNzZFNEVFQzBBRTBGREY2RDYxNjZGMTJGRTc1Ci06MTBBMTMwMDA2RUM3RjE1RDk3NENCMkFGNjcwN0M3RkY4QTI1RDk3ODI0Ci06MTBBMTQwMDA1RENBNzEzOTc2QzUyOENDMkY1MEYwQkVBRUQ3OEZFNEVBCi06MTBBMTUwMDAyQzgwRjJCRDg3NjQ5MEQwRTRCQUZBOTUwQUFDRUY4MTA2Ci06MTBBMTYwMDAyQzk2NzdCRTYyQzMyQjY4MEYwRTk3Q0U1N0Q0MzlGNTY1Ci06MTBBMTcwMDBGRjI3N0MxREJENzY5NkRBNTMwNkY0OTMwOTBFRUQ1OTQwCi06MTBBMTgwMDAzRUI2Q0Y4OTJGOUEwRkYyNzlENTA2MDlFNUVEOTYyQ0M4Ci06MTBBMTkwMDAwM0RGQUY1MjREOTREQkE0OTlFOTQ3RTJBM0YwQTAyQTc0Ci06MTBBMUEwMDBFNDE4MkMwMkUwRjFCRkY5REYyOTUzRTM5QUZEN0NEMkQ5Ci06MTBBMUIwMDA0RERCNkU5RjBGRjZBMTlCNUY0NkVCOEM4RUUxNUUzMDEwCi06MTBBMUMwMDA3ODVFMTc0QTNDOTkzNUIyNEYzRUJGMkRENUVEMUY0NUZECi06MTBBMUQwMDBBQjVDOUVDNUVENkRDRUE3NjIzRDk3NjdCMUY1NTEzQjc3Ci06MTBBMUUwMDBFRDg3RjhGNzk5RjhGQTQ4Q0M0NTZGNzI0N0NENEYwMEU0Ci06MTBBMUYwMDBGRTczN0M2ODE3MDRCQzU0RUU0M0RFRENGNzAzM0FDQkY1Ci06MTBBMjAwMDA5QjYzN0MyNUVDMUQ3N0ZCNkJENTg0QzM2RTNDOTQ1NTFBCi06MTBBMjEwMDBFOEM4Qzc3MURCMjFGRkQwMTdFOUVCRkZGOTZGQUMyRjVFCi06MTBBMjIwMDA2NEZERDNFOThCRkYwNzc5QjIyMjA4MDA4MDAwMDAwMEFCCi06MTBBMjMwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkREM0QwQjc4NTRENTlCCi06MTBBMjQwMDA5OUU3Q0U5REI5OTk0OTY2OTI0OTMyOTMzNzM4OTMwMDgwCi06MTBBMjUwMDAwNjI1NzgwMzIxNDQ5RTM3MDk5MUEwQTgwMzA0MEMxQTBGCi06MTBBMjYwMDA3MDQ0RDQyODIxNDRDNTRBQkZEMkNEMEQ4OTMxMjBEQUFCCi06MTBBMjcwMDA1MDVEQjRENjc1ODc4ODVEQjZEMjM1NTg2QUQxRDI3NjJFCi06MTBBMjgwMDBCMDgyOEZFQTM2NUE0NURBOEQxQTFGQTU4MDBGQTJBRDJCCi06MTBBMjkwMDBBQkRCOEZBRDdCRkVGRjlDOTNCOUY3NjYyNjA0NkRGQkFECi06MTBBMkEwMDBGMTJEN0M3RUQ3MzNFN0ZEQkZGRkZGRkNFN0IwQTIyNTkxCi06MTBBMkIwMDA4NTQ0OUQwNEZGN0M0OUZGM0I5QzFBMjBDNDRGQzhGMTk0Ci06MTBBMkMwMDBCRkNBOERCRDZFNDI4RTQ1REE5M0FGODFBRjRENUQ5MEIyCi06MTBBMkQwMDBFRDIzNDRFRjk0QzlBM0I0REQzQjQ3M0VBRDgxRjJCRDBECi06MTBBMkUwMDA3RDM2QUY0NENCMkJENjVGMjM4NzY5QkI0QzI4RjlBMUMxCi06MTBBMkYwMDBERjkyMzQyODdGMDk3RkU2MEVGRkRFRjA4MDRDQTJDNTk2Ci06MTBBMzAwMDBCMTc5QUY4Njc1MThDQUM3N0E5MjM1MDJGM0NERjE0NDk4Ci06MTBBMzEwMDBDNjA3MDlEOUFCMTA5RDk0MTFGMkY2RTZFQ0M4MjY1QThGCi06MTBBMzIwMDBBRTcxMTJERDNEODU5MEI5Njk2Q0JEQkU4RDlGQjc3QTY3Ci06MTBBMzMwMDAyN0QzRjVGNEZDQkE4NDE0RDJGNUREN0RGQjhBRjBBNEIyCi06MTBBMzQwMDAzOEYzN0I2RDg0NENBMzEzMDQwMjM2OTI0NUM4NkQ3Q0IwCi06MTBBMzUwMDBFRkFCNTI4OTA2RTMxMzNBREZBMzg2RjE0NUJGQzNBREU1Ci06MTBBMzYwMDA4NDQ0Q0ZBNUY1RTM2OEJGRjI1ODNGRUJGOENCQUVCQzExCi06MTBBMzcwMDA3MDJDRUNGQkYwOTUzM0M3NUUzMzI5RDYyRjExMUM5NjU5Ci06MTBBMzgwMDA0OUUxN0Y1RTBBRjNCNkM5MkFDMDc1RDczRDQ5OEQzREM0Ci06MTBBMzkwMDA3MUUwQTY3M0I4NUFFNzg3M0Y3NkJBOEYyNUZDRkY5NzFFCi06MTBBM0EwMDA2RUFDQkNDMzQzNDFCMjI5NjVDRUVDNzA5Q0Y5MEY5M0VGCi06MTBBM0IwMDBGMERERDNFODdDRkE0NjM2OUY3NTlFQzU3QzlFQzNGNURBCi06MTBBM0MwMDBENzJFMDVGODdGQTZDQjVFOTlDMjYzQTA0MTRFQUQ4MDIzCi06MTBBM0QwMDA3RUY1MEU3NTNDMUQ3RjQwQkZENTczOUQ2MTlEQkY0RkJGCi06MTBBM0UwMDAwMDlGREYzNzVFRUI4OThCMDdGRUJEQTJERTRDMDc2RjU3Ci06MTBBM0YwMDA5M0MxOTdBN0MzM0MzQkUzQUZFRjE2NTgxRkM1REYzMUFFCi06MTBBNDAwMDAyNTdDQ0Y4NTc0N0RDNzJGOTY1NTlEQUVFN0I4OERGNjE4Ci06MTBBNDEwMDAwMzdBNzk5MEY2MEIwQ0VGNzczREVGRjdGNkM2OTFFOUVBCi06MTBBNDIwMDA3MjQ5QUQ3OTNENEI4RjI0OUJFOUQyNDYxQTdCRTNFQzEwCi06MTBBNDMwMDA2NzY4NUQ2NzQ4RjcyQjJDRkNCNzRCMTkxQ0UzQTVGRDNCCi06MTBBNDQwMDBERkRFNzFFQUNEREI2MTNGM0I5MjExREVENjcxMzJEM0E0Ci06MTBBNDUwMDA2NUM2QTdDMDI3MDBBRjJENDk5QzRGQkE5QjlGQTZGRDlDCi06MTBBNDYwMDBERUJFMzQ0RkRENDQ4NkYzMDcyMUREOTdDREEwRjVGRDM4Ci06MTBBNDcwMDAzREI2RDIyREI0NkE1NzRGNEE2MzI0Q0U3QTI3QTczMzBDCi06MTBBNDgwMDAzQUYwQzk3QUYyNzlCNDNENzk4M0UxMDNDODBERjg2NkYwCi06MTBBNDkwMDAyOUE3Mzc2RkNGMEY1Qjg4MkRENkVGMERBMDgzMjQ0MkZECi06MTBBNEEwMDA3RURCRUFDNEVGMzZBRjEzQzdBOTVCQjg0ODA5RDA3OUExCi06MTBBNEIwMDBBRUIzMTMwREUwODc3RkU4QjhERUYzMEE3NjZDQTE1M0U0Ci06MTBBNEMwMDBCRDZFNjM2NTdEMTVFNTNGNjlGODdBMUVFNjc0QjkyQkFDCi06MTBBNEQwMDBCMjc4NDRGOEQ2MzdDODI2NzhENjJEMzRDM0Q3NEE5RkU5Ci06MTBBNEUwMDA0NzIzQjZEQTc4RkIxN0Y0OUM2OEJFMkIxRDExM0ZFMEJBCi06MTBBNEYwMDBFOTA4REZFRjYxQkVERkRGMzdCNjdCQTBCRDc1OUU1RDhCCi06MTBBNTAwMDA5MTlFMTFGOUUwQUE0NjMzNUQ5QzZFOUY2RjdBODMwODk1Ci06MTBBNTEwMDA4RkU1NjE3M0JGMkJFQUNERkI1RDRBNUE2NjEzNEEyQTY5Ci06MTBBNTIwMDBDQjg4RUE4MDZGMUQ2OTI5Nzk5QTgyRjJFODAzNEI3MDIzCi06MTBBNTMwMDAzREFGMTM1MjBCNzI5RTlDQkFCNTY0NTE0OTZDRkMxNzI3Ci06MTBBNTQwMDAzOTNEN0Y1Njc3RUJBNTIwMkVERjUwNUE0QUJDNzFENjk1Ci06MTBBNTUwMDBGMzNBODc5M0MwRjdFQjA5RTAxOUU1NzJGNzBEQzAzM0MyCi06MTBBNTYwMDBEMEVCMzIzOTJFOUVGRjhCQ0ZGQjQ2QzNDODdDQjRBQ0Y4Ci06MTBBNTcwMDA2RTY0M0M5RkYwN0ExMTNFNkYzNEI0MjdDMzNFOEY4OURFCi06MTBBNTgwMDA3OTFGNjRGMzgyNUUzM0UyRTNDNDU3RDQ1QjU2RkUxRDQ5Ci06MTBBNTkwMDAyMEZBNEQ0OEM3OTE2NDJGRTgxMTFGOTA4NzQxOEY3NEFFCi06MTBBNUEwMDBBNERCOTgxQzJGMUU1OThGODhFRjZGODU1Q0I1QjRBRjY0Ci06MTBBNUIwMDBCMzZCMEUyMzNFQ0FCRDAxODQ5QjI4RDcyRDM0QUZGMzY1Ci06MTBBNUMwMDBCRDU0MDYwRkNBNzE2MzQzMUU4M0RDRTBGQTU1RThCQjM1Ci06MTBBNUQwMDA3QjdGNzBGRTVCQTAzRkM3QTczMzNDRDQ4NTNFNzEwMEY0Ci06MTBBNUUwMDAzQ0E4N0NCREMzMDNGQjdBRDVFNjA1Rjk1QTdFNDQ3M0NCCi06MTBBNUYwMDAxOEUxMzcyNzhEQjUzRkJFNzM2NEY4Q0Q0OTYzRUIzQzU2Ci06MTBBNjAwMDA5RDlDQjVFRUY3RUQ2RkRGMzkwNUM2N0RGQkRCOUYzQjBCCi06MTBBNjEwMDA4Q0UzMkZGQjIyOUY0NDMzNjNFNUFCRUIyNTJEMTI4N0EwCi06MTBBNjIwMDBDRjM2Nzg5NTUxQzE3RDgzMDU4RTU3N0YzMTE2QzdGNzk4Ci06MTBBNjMwMDBDOUE0QTUzN0NFQkVFQ0U5NEU2Q0JGMzQ1NEU5RjA1MzQzCi06MTBBNjQwMDA3ODVFQkI1MTUyMjUzQTg0MjM5REM5REQ2Qjg1QkNCMzJFCi06MTBBNjUwMDAwN0M2MkVBMjcwRjdCN0I3REMxNjhBMzNDRTZDMEVFRkEyCi06MTBBNjYwMDAzRkJCNDM2OUYxRjg0QzdDODUzRTE3RUQ5NkQ5QzM4RTBDCi06MTBBNjcwMDA3OEVEQUQ3QTc1ODBGM0I5QjU1REU4MENFOTcxQzgwRTc3Ci06MTBBNjgwMDBCMkI0MUZFRDNBRTZBNjMxM0FDQzRDOEE3RTA0RjI4ODg5Ci06MTBBNjkwMDA0QzMyREI2MUE3OUREN0QyREUzQUVGNjUxQ0VFODlFNjJFCi06MTBBNkEwMDAxNzc2QUQ3NTdDOURDMzNGMUNBMkY0MTNCN0RFODNGNTBFCi06MTBBNkIwMDBBRjEyQTY1RkY1NDgwQUVBQzM2MzNCQUZCRDA3Q0NCNzRDCi06MTBBNkMwMDBFQjE3REM3NjA4RDRFNENCQTk0MTZDRDcxMDdBQTUwNjQ5Ci06MTBBNkQwMDBEOUVERDRCRDkzMDFFRjlGRDVERTdCNEYxOTVEREE3MUMzCi06MTBBNkUwMDAyNURDRUVBMTFEOEU2RjkyRDA2RUIxQ0VGMzJBRDcyNzU2Ci06MTBBNkYwMDBBRjgxM0MzRDE3QzYyM0NDNUU5RDQ3NDdDQkE1NjA5N0Y1Ci06MTBBNzAwMDBCNTM1MjA1NEM4Qjc5MjAyNDYzQkQ1QjdFMUYzNTYzMjZGCi06MTBBNzEwMDAxOUVDODdEMDI2MEZGRDdEQzJDNjRGRDY4MzVFMjYyNDU2Ci06MTBBNzIwMDA4MkZEREY3NUE4MzcyMkJDMDlCMzczRkI3QkRDM0JCNjI3Ci06MTBBNzMwMDBEMDc2QUY4MjVDODBGMTg5M0EzNjU0NjI5MDEzNzYyRkRFCi06MTBBNzQwMDA5NjQ3OEI5RkRGMjZDMENGOTlDQTI5QjFDRjQ0RjM1MERCCi06MTBBNzUwMDBDOEUzRkExNjU3QjlCQkE0MzRCMDc3MDJEN0MxN0UwNjU2Ci06MTBBNzYwMDAxN0I4QkMzRDE0ODU4QjE1RUQxMjgwQ0ZBQkFGRDg2Q0ZDCi06MTBBNzcwMDA2RDQxMUMxNkVEMTU2MTFGMDcyRjBCREU3NTVFMTlDOEE0Ci06MTBBNzgwMDAxRjg3RTZBMjRCNTkwNENFQ0I4NTk0OEVBQURDM0E4QzY3Ci06MTBBNzkwMDA1N0Y2REI4NThGMDE3RUVFQUQ0RjBBQzgzMERFOUNDMEQ4Ci06MTBBN0EwMDA5QjMyMkQyRkJFMzgyOTAwN0U0Nzc5NUZFMTAxMUYxREE2Ci06MTBBN0IwMDA3RkU5NDJDOTRCNjhGRjc5MEJDNkZCMDdFOEZFNTIzNkJBCi06MTBBN0MwMDBEMDcxRjI2MDc5Qzc2QUFCQzcxMUYyNDM5ODZDMDY2MTI5Ci06MTBBN0QwMDAwQkE2QjA1ODJDRjFCMkVFREIzQzhGQjYzRkNGQkZENzAzCi06MTBBN0UwMDBFNkE2QTA5RUY4NURERjY2MjcxREY3OEVCNjUwOEUzNzcxCi06MTBBN0YwMDA5RERBMTNFOTFGNzQzOTY3MTM5Mjk1QTVGNUNENTUwOUI0Ci06MTBBODAwMDA3MTY3N0M1NDBCRTVCRDBGOEFGMTNFRUVEMjBBMDhGOTYwCi06MTBBODEwMDA5OTJEMUM5NDY4RkRENDhDQTQwNTc2MEEyRjVGOTE5ODFECi06MTBBODIwMDAzRjZGQjMzNjhCRUVFN0UyMUIxRjVENEZDNzVGRkVERDY4Ci06MTBBODMwMDA0OTBCRUNCMEVFMDYzMTdGRTkwMjU4REZEMjU5QTI1QzM5Ci06MTBBODQwMDBFRTgyQjIyRjg1Rjc4N0Y1NTY1MEY5NTUxODVCQkYzRDVDCi06MTBBODUwMDA4N0NFOUYyMURBQ0Y1ODMwOEZGNjNENUNEOTUyNkRBNzU1Ci06MTBBODYwMDBGM0ZGRThCQkRBRTY0OTEzMDk5OUJFQjBEMkFCRDFGMkU3Ci06MTBBODcwMDAxMzE5RjUwQjUyMjg3RUY2MTI0QUE3QjRGQzY0QzY5NTRDCi06MTBBODgwMDAwQjYwRkQzRUQ5QzZDN0JGNkEzM0FDQkZCQzQxM0YwRkFBCi06MTBBODkwMDBFQTI1N0RFNUU2NUFCQUVGQjVDRTgxNDM0MEFFRUIzNjA4Ci06MTBBOEEwMDBFOENFMkNGQTNGMjkxMkUzNjNBN0EzNDVDQkE3QjA3M0U4Ci06MTBBOEIwMDBFQ0FCOENFNkUzNzJCQTE5QkQxNjQ0NEI0MDhGMEQ5NTk0Ci06MTBBOEMwMDA4QjY5QjlDNDUwQ0U2MUU1QkQ5QkM4RDVGMUU0RUQ2RDhGCi06MTBBOEQwMDA5OTRDRUVFRDREOEU1RkFGNjQzMDdCODBDMjBERjU0OTMzCi06MTBBOEUwMDBEQTExQTJFRDhFQTM1NzNFNEE3N0UzN0MwNzkzODlFRUY3Ci06MTBBOEYwMDBDQzg4RjFEQkU1OTQ4NzJCMjg1RjEyMjc1QkE3MTg2N0NDCi06MTBBOTAwMDA5OEZFQzg2MDcyODdFODk3Njc4MDNDNUQwODQzRDBBREM5Ci06MTBBOTEwMDAxN0E5MTJGQUJCQTQyNTI1MzIxRTY4ODc0NEVENEI0MEM3Ci06MTBBOTIwMDA3RkM4MzY1Q0FGNUY5NkFFNUU0NEM3Q0I0QTI2RTEzRDNBCi06MTBBOTMwMDBGNEVCQ0YyNDU4QTZGREI1M0RFRUQ4NzgyRjcxQkFBRjExCi06MTBBOTQwMDAyOTBBRUQ4NEYxNkFCMjczNEJEQjgzQjE3MUU4QkEzQjNCCi06MTBBOTUwMDA5QzUzNENFQkI2NTc2NDQwRkRFMkQyOUIyNzE5RTAzOTdCCi06MTBBOTYwMDA4OUVEODNEMjAxRjZBM0QzM0MzNjk3RjJDMURFQkVGMzY0Ci06MTBBOTcwMDAwQUMxN0VGRkE5NDVFRTk2RjcyRDc2MTBEQUVFQ0E0Qzk1Ci06MTBBOTgwMDAyRTVGMDJBQ0JGQkY5QUM5OUZDMTlCNTMyMjNEQzA5RjlGCi06MTBBOTkwMDA0RUI1MzQ2NEIwM0IwMzFDMUVENTc3MkVCQzFGREEzNTkwCi06MTBBOUEwMDBGNTM5NDgxMjZEQjc3RTRGNjUzNjE5NDEyRjM2N0QzMTI2Ci06MTBBOUIwMDA5MzQ0QTYxQUNBRjZBODAyNzJBN0U5OEIzOUY4N0JGNTY4Ci06MTBBOUMwMDA5RDJGMjlDMEE3MzA0RTgwRUU2QkJENEJDQjU2MDE2RTNDCi06MTBBOUQwMDBFREYxRjE0RjFENzI1QzQ3RDMxN0U5NDQ5RjZBRkM5RDZFCi06MTBBOUUwMDBDMTI5MzZCRTBGRUI0RkI3QUZEODc4MzI4OTY0OEUzNEE5Ci06MTBBOUYwMDA5RTgyRjU0MzcwQjc3M0I4MkJGMUQ3Mzk1RkQwMjk4NUE0Ci06MTBBQTAwMDBCN0NENDA1RjRCMzlCRDUxRTk4NzcxOTRGRUNCMjZGNTM4Ci06MTBBQTEwMDA4MEJDOEZDREJCMDlDN0RGNkJBNzc4MDQzQkIwMkYzOTUzCi06MTBBQTIwMDAwMDc2NzFCOTlEQzlDRkYyQkUwQ0FGMkVDNUU4NDNEMEY4Ci06MTBBQTMwMDA4NUMwRUJERThDOTY0QURDRUYyMkM5REIxMzFDQkVBRTcwCi06MTBBQTQwMDBDQkM0QkFCODNFQ0Q2RTA4Q0JENzE4RDYyN0Y4ODE4RUM2Ci06MTBBQTUwMDBCRjk3OEY1RjU2ODFGQ0YzMkY0Q0ZGNTBCRTU5MDFGQzBFCi06MTBBQTYwMDAwQjc2MEJFQzQzOEQ5NjJDRjYwQzVGRkZDRkE4RUM4MDk5Ci06MTBBQTcwMDAyRkM1MjM4M0ZGQTVFRTA4RTgwMTAxQjdFMUYwQ0YzRjIyCi06MTBBQTgwMDAwRDNFQzc2MjdENzlERjMzMEFFQ0IzMjkwMURGODYzMkUwCi06MTBBQTkwMDA1M0IxNUZGNjkxNjgyQUY4QjVCRjRDNjc3QTZENkZFRkQ2Ci06MTBBQUEwMDA1NEQ3NENFMDhCODUzNjAyMjIwQ0Y2MERGNjZBQjk5MDJECi06MTBBQUIwMDBCNzY0RDcwQjU1NzZGQUZCNTA5OUNBREIwMEUwNjE0OEMyCi06MTBBQUMwMDBGRTQ2OURDRTU4RkJBQUNDNUQwQjNBNjg5RDJGODlFMkNECi06MTBBQUQwMDA3RjEyREFBMTRFNjJGMDI3QkU5REMxRTQ1ODQ1OThDNEFBCi06MTBBQUUwMDBCNTVCOTY2NTMyQkI0NUMwRkI3QjFCQUFDOTdCNzQ3RkY3Ci06MTBBQUYwMDBDRkE1MzNCRUFDMThEMDI1QzA4QkUwNkJBQjlDN0E4ODU5Ci06MTBBQjAwMDBFM0YxN0JGQ0ZCOEY5NzUzRDI2OUU0RDQyMjJFQTdEOEM0Ci06MTBBQjEwMDBFRjA3QTk5OTBGRURCMkIyQTIyNTEyRDU4OUFCNUU5OEM1Ci06MTBBQjIwMDAzQTFFRkM5OTVCNzJFNEMwRkI5NEFGOTY0OEVBOTgxRjBBCi06MTBBQjMwMDBEMTcxRUI5QzAxOEM5MzA5M0FBOTIzQ0U4MDFCRTA0RTg2Ci06MTBBQjQwMDA4REE2MkY0MUVGMkY3NDYxMTlGRTgwNURGMjY5QjdDNEE1Ci06MTBBQjUwMDBFODkwMDREMkVBNEExMkNCMjFCMThFNUI3MjE0OUM2RjRBCi06MTBBQjYwMDBENUU2RjE2OTYxRTNGQUI4OUVCODNDMjlGQTIzNTIzNDdDCi06MTBBQjcwMDA5Q0NGNDU5OUFFN0ZBRDREMzZENEJCOTkzRUZCRDBBMzVCCi06MTBBQjgwMDBGRDM0ODNFMkUxNTU4OUQ0RTM3QTJDRjZEMjZGNzhEQzg4Ci06MTBBQjkwMDBDNjZBMkZENTczM0JEMjBGRTYyNUYyQjEwRDlERDNFQ0RCCi06MTBBQkEwMDBBRUE0MDg2MTVENzRGMDUzQjM3QjA5RTdEN0E4QURDOUMzCi06MTBBQkIwMDA0MDA3QkZDRTI4NjA3NkVEMTVCNEYyMDJDQTk0Q0U2QTgzCi06MTBBQkMwMDBFRDdEODMxQzdCMUVENjgzN0EyMTNBMERGOEY0QTUwQzBCCi06MTBBQkQwMDA2MkIyRjMxQUU0NTA4MTA0NzY2Qjc2OTIwQTcyODZFMkNFCi06MTBBQkUwMDAwOUUxNzBEMDQ1RUMyRTNBRUY3M0Y0MEI3OEFCOTE2RjFFCi06MTBBQkYwMDAzRUUwRjAwMTFENDg2QTNCNDI3RjA3Rjc1QjQ5MTRGNEQxCi06MTBBQzAwMDBDREU1NzM1M0QwNkUyNUE3NkUxRDA3RjEwQTdGMEFBMzA5Ci06MTBBQzEwMDA1QjNBOEU5MzhGRTM0NDNBRTE3MkVGMzc2MzI3RjY4MDE1Ci06MTBBQzIwMDA3RTEyRjI1M0UwODE5QzkyNzEzQzUxN0Y1MDVBNTRFMDY1Ci06MTBBQzMwMDBBNUU1ODNGRTczNEJEQjI1QjNGRDAzRjY1MENDN0U1QUFFCi06MTBBQzQwMDBCRjc5M0VCNTk3QTZEN0Y2NDY2RDVFOTAyQUI3MkZCODY2Ci06MTBBQzUwMDA5REI2QUZBMUY2OTM4QkVFRTc4RjE5NEMwRjFFMENFQTUxCi06MTBBQzYwMDA3MjJBOEMzNzlFRUU4M0ZFNzQyODM5M0NBOUM1MURDMzE5Ci06MTBBQzcwMDAwN0I1NzFDMjgwQkYyQzg1N0VERDhDM0ZFMERCOTlDOUIyCi06MTBBQzgwMDA5MDkxRTE2M0RGMDZGRUNENEE2NUVEODdFOTNENUVBRjU5Ci06MTBBQzkwMDA0OTBDREU1QjJBOTk5Q0IwQjZCM0YxNzFENzNBRjVEQTZDCi06MTBBQ0EwMDBBQzQyQTM3RDE1MjI0MDg3NzZDMkVDMkMxOTc0OEYxRjBECi06MTBBQ0IwMDBGNTE5QzJBQkZBQ0U4NjM0RDA5QjlGRjUyRDREMjM5MzY4Ci06MTBBQ0MwMDA2MjcyRDRFMUZDRUREOEY3QTkxQzg5OTIyNURGMDE3RUUwCi06MTBBQ0QwMDA1NTVFOTcwOUQ4Q0I3NzM4MTg1RDJBRTk2MTZGMDZGRDc0Ci06MTBBQ0UwMDA2NkE2QzRGNzlCMjdGMkY1NjQ4MjVGNEREQkREQzNGREVBCi06MTBBQ0YwMDAxRUM3MTdFN0EzQkY5RDlGQzlFMjQ1QTkzOTc1MjhENzhECi06MTBBRDAwMDAwMTk2MDE4QUY3MzQzMkE4N0IwRDc4NENBQkIwOTlGQ0UwCi06MTBBRDEwMDAwN0M3MTc5M0IxRkY5OURCMEZBNTA5RUM4NzMyOTNGREE1Ci06MTBBRDIwMDAyMEU2QjVEQTExNkZCNkU2RTBGQTQ1RkYxNTM5QUZENTgyCi06MTBBRDMwMDAxMDQzRkI5NTY0RTAwRTE4NkZFNUZBN0M1M0JDMjg5MTM0Ci06MTBBRDQwMDBGRDMxMzc1MzFBQjIxN0Y0QjhFQjUyNENCRkJGNDlGRDZGCi06MTBBRDUwMDA0NUREMzhGRjMxMzY3RjZDREUxNENBNzBCMTc5RTU0Q0MxCi06MTBBRDYwMDA0RENCNDRCRjZGOTZGN0U4RjlGNEUzQTJCRkNCQTg3N0M5Ci06MTBBRDcwMDA1MEZFNTNGREE0RUQ3MEEzNUVBQTA1QjkyREZDMjRFMDlFCi06MTBBRDgwMDA3RjZGMUFGMDc3NjU2REE2REZBMDI3NzkzRkFCM0MzQTVECi06MTBBRDkwMDBDMEZERUEwMzVDREZBNDFEMTE3NjYzNzI0MDkyNjI3QTAzCi06MTBBREEwMDA2N0I4REVFMjc2QjE0NTNFOUVDRUNFQTY3NEFCMUJFRDEzCi06MTBBREIwMDA4MDYxNzhDRUZDQUFGNjY1NTEwMkZBOThGMDBGQjEyRkE3Ci06MTBBREMwMDBDQjY3ODVFNTEyOTA5RkI1MTIxOTRGM0ZEM0U3OTlGNUYwCi06MTBBREQwMDBCRDlFQzlGQzEwOUQzMjlDRDE2RjU5REM2MDZFRDcwMUJECi06MTBBREUwMDBFREZDRjA0RDE5OTVERjYyRDQ0NzkyMEM3MjhGOERENzMwCi06MTBBREYwMDBDQ0U5MjE3OEUyNTUyNTQwRTU3MDk0REI0M0JCN0NEQTUxCi06MTBBRTAwMDA1RDQwMTcxREM5QTk5MzQxNEY3NDI0OEY4RDQwNUM2MjJBCi06MTBBRTEwMDBDN0ZGNTYxN0VGQTBFQjFGN0NEOUExRjZDMEIwRkIxOEY3Ci06MTBBRTIwMDA5RDU0MkU1RkRGNkVBN0JGM0I3QTI1NkYxMjg5QUREMzhECi06MTBBRTMwMDBCRDQxRDI1NjUzM0VCRTlGQ0I4OTI2MUZEQjRGOTMyRjc5Ci06MTBBRTQwMDBBQThDQTNGM0U3MzVCMTc1MTRGNDFFOTBFQzA2Nzk1NzdDCi06MTBBRTUwMDBEMEM4REFFREM4NzQ5OEY0Q0ZBMzUwQTZFMzNDMjJGQzI2Ci06MTBBRTYwMDAxMTEyNjlBQjI5ODNGNjlBMURDRTQxRjI3QTI1OEMwRjE3Ci06MTBBRTcwMDBFN0I1NTA0MDUwN0FDODUzRDlGODZFMzUyMjVEM0IyOTZBCi06MTBBRTgwMDBCNkRGMkVEQkEyNDlBMDI3QkFCMjUyNTREMDEzMjc3REQ5Ci06MTBBRTkwMDBFMUM3NjBCRjRERkREMTI4ODA2QjdBN0Y5RjFERUMzRERGCi06MTBBRUEwMDA5NzVGREIwREJGOEI3RDA2NjQ2RjFFQzhEOTk0N0VCNjlECi06MTBBRUIwMDBCRTZFMEJERDEzNzIxNzVGNTcwRjkzQkYzMjc5OUUwMDgyCi06MTBBRUMwMDA1RTQwODZEMEY5QjIzNjE1QTM5RTEyRURCMzMyQjhERURECi06MTBBRUQwMDBDODIyRTEyN0QwQ0UyMjVEMDRGMTQ2NzAxRjU5OUIyNjdGCi06MTBBRUUwMDBBMEJEMkZGMDFBQjNBQjI2NEUwMUJCQUE2ODZCRDRCRTJGCi06MTBBRUYwMDA4QUY2N0JGQUExRjhGMUZBMTczOTlGRDA3RDFDMzRFRTVGCi06MTBBRjAwMDAyMzExN0YwOEJEMjZEQTM5MTJGOEQ1ODJFRTUzNkFFM0ExCi06MTBBRjEwMDBEQkFCNTQxMzYwN0RFNTcyREY5NUIwRUZBNjBFODUyNEEwCi06MTBBRjIwMDA0OTMxRjhCQkZDQTEyMzIwQjdGMjdBNzc0ODAwMUIyQkVDCi06MTBBRjMwMDA5RDc1NjRGQzUwQ0FBN0ZCQkNGNTQ2RTI5NTQ5RTI3NUQ1Ci06MTBBRjQwMDAzNzZEOTBCNUQ1NDY3RUVFNTAxOEREMjhFNkYzM0RFMTJECi06MTBBRjUwMDA2NzdDQzJFMzA1QjNGREExNjMwMDhGRTY3RERCMTRDMDBGCi06MTBBRjYwMDBGMzhEM0JERjUxNDYzQUQ3MTkyRERDQTQ0NkU2QkYzNEJBCi06MTBBRjcwMDBENTNCMjNCMERGQ0FFNTc2QzRFMzlBMEUyNTAyRjJBOUQ5Ci06MTBBRjgwMDA2OUY3OUVBODBERUNFQzhENDQwNUZFNkZFQURENzMyODkxCi06MTBBRjkwMDA4RkMyMjdCRjQ5OUIyNjA3NjJFM0U1Mzc0NTI0NTg0RkY4Ci06MTBBRkEwMDAxNjI1QzYzRUY0RkZBMjBBRTg2RDJCN0Q4MzlEMENGNkE0Ci06MTBBRkIwMDBDQTIxMTdFM0ZGMEYyQkREQkE0NEUxRjhBMTIzREMwNDFCCi06MTBBRkMwMDBFRDNFQ0M0RDUxRjU2MDBDRUVDRkVEOTlGRkJDNDQ1OUYwCi06MTBBRkQwMDBEQ0YzNDQ1MjE0QkU1REI2OUUxQzI3NkRENzc1OUVBMjRECi06MTBBRkUwMDAwMjNEQjlGQzYxOEY4RkMyMjlDMzFFREEwQkZERDM3REYwCi06MTBBRkYwMDAxRUI1OERGNjBEMjQ5MTI5QThBRjQ3MDk4N0U5MTZCQTI5Ci06MTBCMDAwMDA5OEJFOTFGMUNCNUM1RkFBQjAwM0E3ODA1QzNBRDdFNzBBCi06MTBCMDEwMDAxMTc2MTRDQUFCNDMwRUI2OEYwRUMyRDZEQjk5QTkxNUIyCi06MTBCMDIwMDBDMDdBODgzNzAzRTdDRDZCOEE0QUUwMDc1OEU3OEREMUFECi06MTBCMDMwMDA5NTU2ODhFRDQ3QkRDRTVFMDVFNEZDMUEyRTZGMkE5NzIzCi06MTBCMDQwMDBFRjk0REUzM0QwNDFBOThGOURDRkU2RURERTIxODE3RkU1Ci06MTBCMDUwMDA0OEVCREI2QTdDRDg5RTI0ODFCQ0Q5Q0RDRTI5RDZEMEUyCi06MTBCMDYwMDBGQUVCMENGMjQ1RUMyMzhFOUNBOTgwRjVCOUZCRkI5RTE0Ci06MTBCMDcwMDA2NTcyMjY4QUY0MjdENjZCQzVFNzNDMUZCM0VGMkVBMjc0Ci06MTBCMDgwMDA2NjAyRkVBRUU4QzUwMTNBREVBMUMyNjQxQzRGRjBCRDA3Ci06MTBCMDkwMDA5NTRGRTdGOTE4OURFN0Q1RUY5NDIwOUVFMDRCNjFGNkI4Ci06MTBCMEEwMDBBNDU4OUY2OEI3Q0I1NzU1RUI0MzM4RjQyMTFDRDZENjJDCi06MTBCMEIwMDBEQjExNkY2MjNEMzU0QTY4MUNGODY1Q0JGODc4Q0Y1Q0QwCi06MTBCMEMwMDBGMTk2MzI0MENCRjdGREY0MTVBNEM3QjVERDkyODZGRUFDCi06MTBCMEQwMDA0MkY3MkJDQTUyODhEQkU5RkYyRTQzOUNGNjEyNjZBMjg4Ci06MTBCMEUwMDA5MEVEM0Y3OTA1RjVDQTI1N0I1OUZDNjBFRERFM0RGNjE0Ci06MTBCMEYwMDA2QkREMzEzQTBEOUU3ODY2MjVEMEQ5REFERTI0RTI5MkY2Ci06MTBCMTAwMDAwMDdGMDFFNDUzMkI5RDUyMzk4Mzc0NEY3NDA1Q0ZCOUVFCi06MTBCMTEwMDBBODlDRDQ1MUFFOTI3MDEwRkMxNDIxODczQjM5N0YxMzQ4Ci06MTBCMTIwMDAzN0ZCRkQ0NkJFNkUzMTZFNEM3RUJBOTBERTgzMjdBNjlECi06MTBCMTMwMDAzQ0UzQTRGMDVDQUI0QUFBMEJGODkxQzM5QjhFMUY0NTdECi06MTBCMTQwMDAzOTRDNDgyMUY4NkI2MjdDMkJGQ0ZFOTlEQkVENzFGMEU5Ci06MTBCMTUwMDA3QzFCRTBEOUFBNEY4NDlFMEQzRTVDNDVFMDJCRjA2NzM2Ci06MTBCMTYwMDBFNzcwMUZEMkVGM0UwNUQ3REJFMUIzMzMzRDVGQzlFMkE1Ci06MTBCMTcwMDBEQTFEMEVBNjQ3M0FEQTlDMTFFMEVCRTdEMjJGN0E1RTkxCi06MTBCMTgwMDBBMkYyRDI5M0ExNDRFMTdCRDBCNkFBMDlFQTBGRTZCMUJDCi06MTBCMTkwMDA3NTc0RDkzNjE1QjczMDNENzY4NzBGRjE5NzRBOTg3QzhDCi06MTBCMUEwMDA2MkYyRThCRTFGMzM3OUQyQTRCQkQxN0Y2QzBBRDdBRDVGCi06MTBCMUIwMDBDNjczMDk5RjRCODU3MzA5MTI3RTU2NTlFQTg5RDE4MzVDCi06MTBCMUMwMDAxNUJGODEyNzBFMjgwMTVBN0Y0OTJGRTM4MzE4REM5ODg5Ci06MTBCMUQwMDBCRTEyNzQ0QkU1MUNFMkJEMzM1MzlDNUY4NjgzMDA1NzVGCi06MTBCMUUwMDBFQUQ3Qjc0MUZDNDFGOEY1QTkwRDIxREQxMzE4Q0VBRjIwCi06MTBCMUYwMDA5OURDQUY5RkM2RkQ3QTQ3ODVGMzZGRUFEN0FGRDlGMEU4Ci06MTBCMjAwMDA2QkY0ODM2RUNBNzkwMUJGODI1RkE4RkY2OEUyQUIyNzQ3Ci06MTBCMjEwMDAzOEJFRUZGNzMxQkRGQTk0OEZEMUQ1OUFCMjVFRTQ4NzhDCi06MTBCMjIwMDAzNUVGQjcyMDFGQjk2Qjk5M0M3MUY3OUJFNTIwMjE3NzZCCi06MTBCMjMwMDA3M0ZCNjAyQjhFNTM5M0QyN0I5MTBDN0VGMkJGNEFERTYwCi06MTBCMjQwMDA3NjkyNzhERDM3NDgyREZGMDk3OTMyNjQwRkNGREYzOEU5Ci06MTBCMjUwMDA0NUFERkM3MjBBNTcxNzg3MDE2RkY3NkIxRkYzQjczRUI2Ci06MTBCMjYwMDBEQzQ1MTEwMTdDNjk2RjUxNDZCMjg3NEYzNzJFODlCRThDCi06MTBCMjcwMDAyNjAxQkVENzcwNTg3RkI4QkJGQUMyM0Y0MDlDNzE1N0I5Ci06MTBCMjgwMDAxQUU2QjM3Q0IwN0JDOTM3RkY0MEZCN0ZCODczQUUwQUM4Ci06MTBCMjkwMDA3QURBRDcxRTQyRkExOUY0QkI1NDg4Mjc1MkYxNTkyQjk3Ci06MTBCMkEwMDA1MTdBNjhFQkZENTVFQTRDMzgyRjdCRUM4MjI5MjAzNzI4Ci06MTBCMkIwMDBERkU1N0M3OUUyQzdGMjA2ODBDRkE2N0Y3QjdDMEVENEU3Ci06MTBCMkMwMDBBRjg5NDg5OTYwM0Y3RUI4RUI1RkZGMEE3QUIxNzFFN0JBCi06MTBCMkQwMDAzQUNDNEI2QjdGRUM5NzY4OTdEQjIyM0JEOEVGQkJEMjI1Ci06MTBCMkUwMDBEMENFM0NGRUM4QjYzOTAwRjdGNkRFNzZBQzNGRjFDOEVBCi06MTBCMkYwMDAwRTJDM0ZGMzZGOEZGRkUyMkY2MDc3ODQ1MjU1Njg3N0YzCi06MTBCMzAwMDBFMkM3REJGRUU5MkY0MEU3NzVBOTJBRUNBMzI5NkM2N0E5Ci06MTBCMzEwMDBFN0I5ODJCRUFENzI2QkNGMDFFNDUzNDEyRjk3ODBERTU3Ci06MTBCMzIwMDAwNTM4RDUzM0Y5MjNFOEY5NUQ3RURFQjRBQURBREQwNTA4Ci06MTBCMzMwMDBGMkVDREQyRDlFQzY3ODcxNDZDNUNGRjAwMkIxMTg5NEFGCi06MTBCMzQwMDA2M0Y1MTJDNkQ5QkEyOEQ1NDBCQ0EzMkI5OTU0QzAzNzhGCi06MTBCMzUwMDA2NTUyNTRDOUE3RjM1Q0QxQjA2NzBFREEzREZBM0JENzBBCi06MTBCMzYwMDA0M0ZCMjVGQjVDNjQwQkM2RTUyMEE4NEJGRDAxMjQ3NTVGCi06MTBCMzcwMDA0MjRBQTgxODNDNEFGRDY2M0FGQUNFMkYyOUREMUVBNjlECi06MTBCMzgwMDBGMjAxRjU4RUM1MUY1OEQyRjVDMkZGODAxQ0FENzMwRUI5Ci06MTBCMzkwMDAxQzAwNTEyODdFRUZFMkYxMUJEQTFFRjU0RUY5RkFGODk3Ci06MTBCM0EwMDA3MUQyNTRCRjlCRDMyREQzOUI3OTdCMTcxNTA0NTA0RTdDCi06MTBCM0IwMDAyNEE5RTMwREY2RTk5ODIzMkQ1QjIwM0QyOUFGQjFFRkQ5Ci06MTBCM0MwMDAyMkQ4QzdDNUM1RDc0QzQ1QkE4MEY4MUZFODFGREQ4RDA4Ci06MTBCM0QwMDBFM0FGODVGODI1RTVCRjczRkMzQzJFRTIyNUJFMTk3NDZBCi06MTBCM0UwMDBGRTFBM0JGMUI5RTE0QkM4NkIwRTk0MjM4RkUyQjhENDNGCi06MTBCM0YwMDBGRTQwQkIyQUYwQ0IyQjFFMDU3QjY0QkIyMzlDM0IwRDgwCi06MTBCNDAwMDBDNkU5RTI3QTZCMjc1QjM3RURFRjg1NzM1NDNBOUU3Nzk2Ci06MTBCNDEwMDBDNjE0MUNBN0NGOTE4MUZENzVENjdGRkVDRTM2MjlCNjA2Ci06MTBCNDIwMDA1RTRBQTk2MzQxNkZDMTc4NjU2RUQwMzM3QTNERTIyN0U5Ci06MTBCNDMwMDBBMEUwQkU0RTQwOTM1Q0RDRjdFNDE1MjUzMUZFQjVDNkI2Ci06MTBCNDQwMDA3RDQwOUVDMUY5RjA2QzdGNjU4NTdGNUFFQzJCRTI0MTBGCi06MTBCNDUwMDA1Njc4NkVFNEY1M0ZGMzZCRjgyNUJCMzI0RDdBMjU5MUIzCi06MTBCNDYwMDBCREYyQ0MxNTFGMzNGREZCQjM3NzUwREUzNDAzMURDMzkzCi06MTBCNDcwMDBGQ0UxRjc0REZBRjc1QTQxQzc0RkJEODM3NDdDRUQzRUFFCi06MTBCNDgwMDBBNjdGOUJGNzk1MkE0MEI3MUZCNDZBRTQzRDZBODAzNkQxCi06MTBCNDkwMDBGM0YzRDdFREQyQzBGNTk4RUZGMjk0Q0IwQjcxQkQ4RkRCCi06MTBCNEEwMDBCOUJFNTlCM0Y1OURBMzcwNkU1QUI4MkYxN0ZERkM4RjI2Ci06MTBCNEIwMDA5RjcyRDVDMzM4MDc2RDM2ODRFN0MxOUVGMzc3QjQ0QkNFCi06MTBCNEMwMDBDNjc1MzJCRjgwREFDMTQ4QUFDREQ0NEU2NTc2RjBFQTlGCi06MTBCNEQwMDA2REUwQTdBRDZEMjQyQUYwN0ZCMzg1N0U5QUY3QkQ4MjFCCi06MTBCNEUwMDBGNDIyRUNFMEUwQzM4QjU3MzNGQkQzQTVCQUMwOEY5QkFCCi06MTBCNEYwMDBDN0VDNTE0MkVENTE2ODlGM0UyRkQyQTYyMDdEOTU5NjE0Ci06MTBCNTAwMDAwMzdEM0Q3M0M1MkYzQTQxOEYzN0NGMjM1RTE4N0ZGQkY0Ci06MTBCNTEwMDAxOEVEQTk3Q0RDOEY0NDIwQ0Y2NUJCQTNCQkNBNEVGQkQyCi06MTBCNTIwMDA2RkFGMDk3ODI5MjQyOURDNzZBMkRENEI4QTE1QUVFN0I2Ci06MTBCNTMwMDA1NkEzQkREQzlDNzM5NThBN0M2Njk1MDc0RkI1QTFERDRCCi06MTBCNTQwMDBENTFDNDhDNkY1NUNCMjRGQkE4NUQ5MjM2RUMyRDYyRjNBCi06MTBCNTUwMDAyMTdENUUxMjk5MTk4MUY4RDk0NzFDN0UwMjhFMUYzQjBFCi06MTBCNTYwMDBGQTU2MDIzQzNFRkUwOTI1NDQ1QTdGQzkzQzQ2QUZFOUUzCi06MTBCNTcwMDBGMzdBNTE4RTNDRjdENDdDRDRFMzgyMkUzRDRGMjZBMTQyCi06MTBCNTgwMDAzRUNGQjA3QjI1MTVGNURBOTIyNDIzNUVCQjFENEMyRkYwCi06MTBCNTkwMDBBNTczM0Q1M0I0OTVFMUI3OTNGMzUzQTdERkM2QkY4QUI0Ci06MTBCNUEwMDAzOUZFRTJENTI3ODNERUZEODhFMzFGQzUwOEM4NzcyRTY0Ci06MTBCNUIwMDA0RkQ2QUU4RTIyM0YzNUVENjZFM0Y5OTJCNEQyNUIwREU1Ci06MTBCNUMwMDBGNEVCQUI2NjdBNTE5QzA3QzBGOUMwQTIzOEYyRTIzMUM1Ci06MTBCNUQwMDBCRThFRTBDM0FCQjY4MUJEN0MzMUM1M0JBODk0QkM2MkQ2Ci06MTBCNUUwMDAyRTQ3Mjk1RDAwRENGMjFBNDM0ODA3MTdGQjZFNTAyMUY1Ci06MTBCNUYwMDAzRkQ1OUY0OUQwNUYxQzZDNTM0OEJDQjhDRkUzNUM4RUVECi06MTBCNjAwMDBGQTMzNDM2NTEwODdGNjY3N0JEMENFRjFDQjk1MzYxN0JBCi06MTBCNjEwMDBGNDJCOTVENDlFMDA5RTdCQTI5RDM3RThDRjU1N0I0Q0EyCi06MTBCNjIwMDBGQzFFMkFCM0QxNzZDN0IyM0MwQ0NGOTFERkQ4MTc5NzU2Ci06MTBCNjMwMDAwMDFGMDZEOEI4MTZCQjZGQjhERkNERUNDNjg1RERGQUEzCi06MTBCNjQwMDA2NEYwNDNDNEI5ODY4MDQzQTQyREI5REUyODNGN0ZDMjhECi06MTBCNjUwMDBFMTEwOTlDOEUyQTlENEJFNzc2MzVDREI0QkU3MDFGRjM4Ci06MTBCNjYwMDBCRTY3RTYyM0NDQkY2RkM3NzYwRkZCOTk3RDU0NDNGN0M3Ci06MTBCNjcwMDAwNzc2OUJCRjI4QjQ5RUU5NTM4RjFBMEYxRUIzRkRDMkY1Ci06MTBCNjgwMDAyRTVGNTkwQTdFNjU3MzlENUIwNTdFQkJFRjY3RDIyQUVDCi06MTBCNjkwMDBBNDY3MDgxNjgyREYxRDVFOEQ3ODIwMTQwRkMwMEYyNDZBCi06MTBCNkEwMDBDQ0ZDRDJFNjk2NTAyNDNFQkQyRjQyRkU2QjA2RkU5M0E0Ci06MTBCNkIwMDA5MERFMzEwRTRGRTkzREMyRTg5REU5M0ZFMUZGODM3QzFBCi06MTBCNkMwMDAzNEU2MUQwQTM5MjBFNDRCQjMzMjMwMDFFODU4RjA0MzI4Ci06MTBCNkQwMDBGMzlDODEwOTAwQjdEMUNBOTM4RjFEOTRGRjgxN0YyODA1Ci06MTBCNkUwMDAxQzgwN0YwNEJGNzg5RTY2N0NCMkE1MkQ1MDA5RjU1QjU3Ci06MTBCNkYwMDA2QTg4QjdEREEwOEZBQ0ZFMTJBQzEzRkM0RTIxRDc0Rjg5Ci06MTBCNzAwMDBGQTQyQzdGRDEwMDdCMDQ1M0IyMUJGNDJDOEUxRTZBNzlBCi06MTBCNzEwMDAzNzRGODg5N0ZGMjZFNEIwRDNDRUU0OUIzMzkyMTI2OTZCCi06MTBCNzIwMDAzN0QwMTc5Q0Y5NzlBNkUwMTdGMzc5NTIzNkM0OEY4RjdBCi06MTBCNzMwMDA5Q0YyQkI3OTFDN0Y3NEY5MTI1OUEwQ0I0MURFRjRBNEIyCi06MTBCNzQwMDA2MDVFQkI4ODE3NTlDN0ZERDgyRjk5RTIzMkMyNkY4MTVFCi06MTBCNzUwMDA3MzA3Njg5RjkzQzVGODI3MjU4QkYzNjc5Njg4Q0Y0NkI0Ci06MTBCNzYwMDA0Q0Y0MUZCMDg1REY4MTNDQTM0NEZBNEJGNEZCNUJDNTZFCi06MTBCNzcwMDBBRkM0M0M0MjhGNUFGMTJGQ0U0RDYwM0Y4QjI2MjU2RUQxCi06MTBCNzgwMDBENzdEODBDOTI3MkIzRDRFRTQ3QzcyMTQ3QzBGREFFRTA2Ci06MTBCNzkwMDAzRkY4MzlENzcwRkNCMjcxNDg3OEEyMjkyRkFFQ0JCNkVBCi06MTBCN0EwMDBBNzMxNUUxQzRDOUM3NzkwODcyNjhFMkFFRkVFNDAyQkFCCi06MTBCN0IwMDBDQkFGRkEwRjlFNjc0QjU2NEYzNEU1NTlCOUQ1NDAxQkI2Ci06MTBCN0MwMDBDNDUxQUI5Q0MxNTIxOUU3NjU3MTJDQ0YxQ0YyMDlFODNBCi06MTBCN0QwMDBFMUM5RkJCQThCMjE3RkM5MUYzMjlGOTc2NEQ3Mjc5QjkyCi06MTBCN0UwMDBDRTIzNzJDMzE5QTY3MjdFNjM5RUE5RkQ5ODk2NDI1MzFBCi06MTBCN0YwMDBGRDM5MUJDRTMzRDUwN0Y1MjlBNjcyNTFENzBDNTNGQjYzCi06MTBCODAwMDBGMURENTVBNkYyQjkwRjVDNkM2QTNGMzFCMkQ4NTRERTU3Ci06MTBCODEwMDBEMkQ2NUIwRjc4Mzk3RkQ3OTVBNjdFNTU3NkFGQkQ5NDhCCi06MTBCODIwMDBDMkI1QTQ3Nzk1Mzk3RkNDMDJDRkI0QkZDQTcxRTlCMDU1Ci06MTBCODMwMDAyOTJCODg3OEFEQjI5QkYzODgyRkQ4Njc4NjA3QTRDQkQ1Ci06MTBCODQwMDAwMTlDMjcxMzNFREU5QzYzNTM0NkNBNkY5RDRDRUM3RkUwCi06MTBCODUwMDAxRTEwRkQ4M0MzRTk4MTM4MDdENDUwMUMzRjUzRDBCOTczCi06MTBCODYwMDAyODVCQ0ZCNTg0RkMzODUzRkE0QkI0NEU0MTdGODlFQTRDCi06MTBCODcwMDAxM0MxRUQzQjlDRkYwNTVDMUM0MzcwQTk1NzQ3ODI4QkFECi06MTBCODgwMDBFMzc0NzAyMTE0MkU5RUFGMEUxN0VCNzg5QjUyOUEzMTAxCi06MTBCODkwMDA0RkY4MzUyODE4RUNFMzgxNTZGMzdEOTg2NTdBMUFEMzcyCi06MTBCOEEwMDA0M0ExMjVBN0IxQTM1OTFDMzg5Q0M0Q0UyQkFERjVGRkVECi06MTBCOEIwMDBDOUUxRjIyMTg1MDlFMjYxOTQ3Q0ZEMTZDNzQzN0YyMjJDCi06MTBCOEMwMDBCRURFRjBDOUMxNkM5MERGQjUwNEZENjY2RjRCREIyN0FGCi06MTBCOEQwMDBBMEI3QUVCNjQ3MDlEMEZGN0Q3QzNGREI3OUJFRTgwMzU5Ci06MTBCOEUwMDBBRDVFMUNFNzQxN0UxRUY5NTA2QjAwN0Y3RkI4QjUxODM2Ci06MTBCOEYwMDBCRjkxNTYxNTdGRUY2OUFEQzBFRjRFNkFDRkMxRjcwNzE0Ci06MTBCOTAwMDBBREI1RjhEREQ1MUFDMjc2M0Y2Q0FEQzdFRkVFRDYzMEQ3Ci06MTBCOTEwMDA1QkQ3MzA3QzkxNzJCNDczNDI5OTcxRTNBNUQ3RThGMjlBCi06MTBCOTIwMDBBOEYwNDRFNDgyQjhGQTMyRTEzODcyQzM4OEY5RTUxQjIyCi06MTBCOTMwMDBGQUE1Qzc5RjM1RjBFRjVCNTkxRURGNTFDODZEOUM0RUNECi06MTBCOTQwMDBBNkMzRjlFNkU5RkE3RkRFNEExRTdGNzZGQ0U4Rjk0OEVECi06MTBCOTUwMDBEMDEzMzk5NTM5MjExRTVGODc3OTVFRTU2M0RCNTdEREFBCi06MTBCOTYwMDBBNTRGNEEwQ0FGMTg5REM1ODc1MzlERjNFMzNDNzBENjk1Ci06MTBCOTcwMDAyNzgzQ0Q2MEU4MkZFRTlGODg3MjVEMzgyREFFREQ5MDc1Ci06MTBCOTgwMDA5N0NERjQ2RTdEMTIzQjhGNUY2RUUxRUY2RjY1MzNGQUZBCi06MTBCOTkwMDBGRDU2MzZEMzc3QkY0QjIwNjdEMjc5M0Q1REE3MDNDRkU1Ci06MTBCOUEwMDAwNzg3RjFERDNEQjNFM0MxRjdBRUVDODAyOTJGQzU3QUZGCi06MTBCOUIwMDA2RkM1M0FDRUVGMUNERDYzRDQzODdDNzZCQTcxQzRGRTE1Ci06MTBCOUMwMDBBQ0ZEQUVFMkZCRkY2NjM2NjFFQkZGN0ZDNjlGQkZCQkZGCi06MTBCOUQwMDBDRTgzRkUwM0MwQ0Q2RkQ4RkZFRkFFNEJBOThGMTc5Nzc0Ci06MTBCOUUwMDA2OUNGNjZFN0ExRDQzQTI3QzEwQzM0RjU3NTA1NkNDNTVCCi06MTBCOUYwMDA2MjEyNjBFN0JFRTNCQzEwMUYxMjc5MDE4OUU5RDU4RTlGCi06MTBCQTAwMDA3MTI0ODRBMTNDMUNBRTE0MUYwMUE1ODg4RTZGMUY5QTVGCi06MTBCQTEwMDAyNzZBODc3OTU0NUI0Q0NGNDJBRTBEMzFEQ0ZGOTA4N0FCCi06MTBCQTIwMDBEMzAzRURBRjJCOThENzMzOTAwN0VCM0I1MzdBMjJGMjM5Ci06MTBCQTMwMDA0M0UzNDczQUE3MUJENkZGMENFNUNDOUFFQ0JGQUY5QzdCCi06MTBCQTQwMDAxMTdDNEU0RUREM0IzRTlFOUVBQzg3Qjk2NzUwN0JFQzMxCi06MTBCQTUwMDBGRTg3OTg5QzM5Q0RCODY3MEFCRjdBNzkwMENGQUY0Nzg3Ci06MTBCQTYwMDAwREJGN0RCRTUxQzVBNTNFNzdBNTRFMjZENEFGREJFMDA4Ci06MTBCQTcwMDA2NERGREI5MzUzN0JFMEZCQjk2QjZDODRBNDUyN0U4MTYzCi06MTBCQTgwMDA3NTUyQkVENUFCMDhCQkJGRjU5NkYwOUI1QUE2ODNCQ0RBCi06MTBCQTkwMDBERDlFMUI3QTMwOUI4RUIzNEE2MUZFRTI5RkIyQjRFRjBCCi06MTBCQUEwMDA0MzM5OTk5RjBCMjdGMzczNjEyNTVCRTk4NDMyRDE4QTZGCi06MTBCQUIwMDA3MTVGMTdGMDdENzVEQTAyNjM2MTVGRUY0QkVBNDRGMDY2Ci06MTBCQUMwMDA1QkJDQjY4ODBBREY1NDEyMkQ2MUY5Nzk5MTMwRjg2QkFFCi06MTBCQUQwMDA5OUU3MjcwN0MwREY0RDlFNDA0ODFGQzZDNzU1MTdDNENBCi06MTBCQUUwMDBEMTk0OTRDMTE3QzcwMUZGRkZEMjg2RjdBMjFGRjdCMjA2Ci06MTBCQUYwMDA3NTNFRkU0MDNFOUVCMzUwODE4RkYyNjIzMkZDNEVCN0RGCi06MTBCQjAwMDBCMjA1RUM3MkRBRkZGQjUyRjg4OTZDQkFBRkUzNUVBN0JDCi06MTBCQjEwMDA2RUEzRUI5QUJDRjlCRDhDMENGQUZCRTNGQkFCRjA1Q0JCCi06MTBCQjIwMDAyMUJBNEJENjE1QjhERkQwRjdFMTc3MkZBMUUzNUREMDZFCi06MTBCQjMwMDBFN0MwRjhGMzA1NDQ0NkY5QkVDNjRFQjYwMjFGMjU4MjlCCi06MTBCQjQwMDBFRjA3REY4ODlGMDdFNkM4OTE0Q0Y5NURENkZBRjdCOTkxCi06MTBCQjUwMDAxRUY4MjA0MUJFRjE2QkJDNUVFNENGMzg0NEZFOEM1RjIyCi06MTBCQjYwMDAxQjMxN0ZDNjYxQzk5RjcxRDg0MzA0Q0U4NTFENDNGOTNGCi06MTBCQjcwMDAzMzBEMDRGMzY3RTgzOEM2RkM5OTBGQUFFMkFGQTM5RjIwCi06MTBCQjgwMDBDQjczQzcxNzI5MDlDNjREQzVERjNGMjgxQzc5OUY4RTg3Ci06MTBCQjkwMDAyRjVDQTY3Q0VDNTg3RjM3RkU5RTI4N0ZFNzMzMDFBN0Y5Ci06MTBCQkEwMDAwNEY5NEI5RjBDQUQyRjk3RTg5OUM2N0U4Q0VGNjJGMzlBCi06MTBCQkIwMDAxNDYwQkRDMzkyMDcxNEFCNjdGOTNGMURFOThDNEUwRUFDCi06MTBCQkMwMDBFNDc4N0REN0QwQTFBRjIxMDM3ODlGRjM2QUI3Q0YwMTg2Ci06MTBCQkQwMDBGMUE0MTA1MUY3RTBGRDFFQkI2MzcwNDBGMDYxMjFCNDg5Ci06MTBCQkUwMDBCM0JGMEI3NkI3OEQ0QTVFQjBCQkFGREVFMDc4NzdDMEVGCi06MTBCQkYwMDAyMEI3MTY2OUU2MzI4MUY2MDYzOUJDMTg2MkQ4NzQxRjgwCi06MTBCQzAwMDBDOUU3MTU2M0ZFREZBNzI0OTBFNjFENDE4RTM2MzhFNUFGCi06MTBCQzEwMDA5MEREQjA4RkZFMDQ3NkM0ODU5QzBFRkI3M0UzQzNBRjRBCi06MTBCQzIwMDAzMEM3NjZDQTYzMUFERTlGRTcwM0YwN0I2OEI3N0E0N0JFCi06MTBCQzMwMDA5NjlGMDBERjcwQTY3MTdDMkIxRTdDNTg3RjNBMzhGQkU0Ci06MTBCQzQwMDBFMUIwMERFMjZBOTUxMkNCRjNGRjlCQzMzQjlERTdCQkNFCi06MTBCQzUwMDBCMUZCMDMwRTRCQkVGQUUyNUNFQkJBNTlCRUZBRkRFOTRBCi06MTBCQzYwMDBBMTk5MzlEODJGMzBDMTc4NUY2MEFGNUQ0Qjk5NDJCRjQxCi06MTBCQzcwMDBGRDVDRUU1OEUxQjI4OUMzRDlCQUVGQkQzQ0VGM0U1OTQ1Ci06MTBCQzgwMDAyNjJEN0IwQ0YwQjdFRUY3MUIzOThDQ0U0NUZCMEUwNzRCCi06MTBCQzkwMDAzQkNGMDJDMUU3QTQ3MjZGMDU2MTcyNkY0NTRFMjFDRkExCi06MTBCQ0EwMDAxRjRGQjcwM0JFMUFEODEwNjQ4NUY3MTA5RTJGMDkzOEFFCi06MTBCQ0IwMDAwRjgzMUY4N0JCMTU4RTIxMTI1ODA5RjlEREE3ODNFNzczCi06MTBCQ0MwMDA4NjVDNkQ0NTBFOURGNzlBNTc5MjE1OTBGRjJCOUQ4M0NDCi06MTBCQ0QwMDAwN0MxNjcxREU4QjMxRDFFNDdCRkVGQjhDNzFEREQ0OThCCi06MTBCQ0UwMDBFMDNDQUVGOEM5NjdFODM3QjU0MjY1NzkxNTY0MUVEQUZECi06MTBCQ0YwMDAzRjkyOUUyRjdGNzlGRUU4RUQ5RkNFRDQ3MDMxRjBDNzQyCi06MTBCRDAwMDBGQjNDM0Y1QkU4QTVDRUJDMTMxMzIwQ0ZGRUJEOENDQTI1Ci06MTBCRDEwMDAyOUI5N0U4Q0MzNkI5OTQwNDczRjRGNjI3NEY0MDAxRDc0Ci06MTBCRDIwMDA4OTk2RDdGRDYyMjJERTg3QkYyQTM3QUM0MjNCOTFFNzc2Ci06MTBCRDMwMDA0N0I0QzEwOTkwOTc3MEE2NzBBMjdGMUM0MDQ3QTc4M0EzCi06MTBCRDQwMDBEMzlBMUNDMkY4MzEzNTNFOURGNEU0QjBGOERGRTlGODJGCi06MTBCRDUwMDAwM0VGQTE5NUZERkRGODQzQzA1MzlDNjM4OEY1QTlCOTk1Ci06MTBCRDYwMDA4QzBFQzU1N0MwQ0Q5QTRGQTRFNkRBNzgzQjk2QUY3OEQzCi06MTBCRDcwMDA1NTZFMDhFMTdDNzJDQzI3NDc1RDc0RURGRDRBRkNGN0Y3Ci06MTBCRDgwMDAxRDlFMUNFNUZFMDVCQ0ZGNUU3MkI4M0YzOUZFRkE1RUUzCi06MTBCRDkwMDA0Q0MwQzdGRkE4RjU0RENERTVGNDMzMzlGRUZBREUxRUUxCi06MTBCREEwMDAyNUZDNDI2NEYwQURGNEJGODMxRUEzNzg5RTBBNzgyNjdBCi06MTBCREIwMDAxRDgzMjgxRkZCMzNFMkFGRjNBRkEzNUU2N0Q4RjFGNzEzCi06MTBCREMwMDBEMEI3ODJCRTg5N0U0RDIzOUVERkU3MjRDNzNEQkY1RjhCCi06MTBCREQwMDA0NkZEMjlGMDg3QUNFN0Y4RTJCQzlFQ0EwRkRDNkY5REY4Ci06MTBCREUwMDA3MzcwNjUyNkUwN0QxRURGNzcxNjg5QTZDM0Y5RTYyRkZFCi06MTBCREYwMDA5MkYwM0M2MDk4OUVFNEZDNDFFMTk1OTIwQkZBNjRFMTdDCi06MTBCRTAwMDAyMEM2MzVGQTI3QzQ5NzBCMjlCOThDRUU4NkRBNzdCMUFDCi06MTBCRTEwMDA3OTEyREQ0M0M4Q0M5NTQ2NzUwRjgxOTQ4NTMxMUU1ODQzCi06MTBCRTIwMDBFOTc0NDc2NThBODc1QjM4M0U5NEZDOUI1NEIwMEYyQkJFCi06MTBCRTMwMDA3MzVFM0EwMkZCQTRGMEZGNzAwODlFODZGQ0JFMTNBRDUxCi06MTBCRTQwMDBDRjdCQzczOTEyQ0JFRDM1RjIxM0U1MkQ3MUY2MzMyMUQ3Ci06MTBCRTUwMDAyQjNDMjFENzEwNkY1Q0IzRUIwNUVGMzgwM0JFNEFDODBCCi06MTBCRTYwMDA4MDhERERBMzFFQjQ5OUZDRTQ2QzcyNDY3RUYyN0UxN0QxCi06MTBCRTcwMDBFMzk3RjczMjQyQTgwRjQwM0Y4MERFRTk3Q0ZBQzI1MkQ2Ci06MTBCRTgwMDA0MDI2RDgxOTkwREYzM0U4NDk0NjM5REE5RTM3QTMzODdGCi06MTBCRTkwMDA2MDgwNjc2REFFQjAyRkU1MDQ3NkUzRDdCQjFGMTBCM0FCCi06MTBCRUEwMDA5QjI0OTNGRDFBMUJERjhFQkYwQkZDNTRCQTVGOEM4QjU3Ci06MTBCRUIwMDA4RjA5NTlEQUE1MDBDRkJGNjQ2ODk3QzFENzBBM0ZGRDQzCi06MTBCRUMwMDBDRTU5RTk3OEZGMDBFMDM3MzczNkRFMTBGRTEzRTBGOThGCi06MTBCRUQwMDAxQjU5NUEzREMwNERDRDBDQjBCQzAxOTFENzM3MTRCRjkyCi06MTBCRUUwMDBCMDdCOEYzQTYzRjAxRTJENUU5Mjc5N0M4RERBMERBQkJDCi06MTBCRUYwMDA2MUJENEExMkU3NDdFMkM2N0JFNEMyNkUyMTE2RkI4NkFCCi06MTBCRjAwMDAxNDMzN0Y3NzQ1Q0U0QkZGMDNGMTlGQ0U1NEM2QjI5RENECi06MTBCRjEwMDBGRkU0NDIzRkYwNkFDOUFCQzBCRUE5RkRGMUU2Rjc2OTk0Ci06MTBCRjIwMDBGQjMwODlCRUY5MkRGNDBGODU5RDkxMjI3Rjk5MzJGQTVECi06MTBCRjMwMDA3NTBBRkZGOTc0NzlENkNGODAzRDQ2RDc1MzY1NzNFMzEwCi06MTBCRjQwMDA3OUU3MzM3NDdGQjk1NDZFNTQyOUVDNUIzOTlGNTIxNUVECi06MTBCRjUwMDAxREFGNEEyRUQ4M0Y0MEQ3RjUxOTM5OTUzQzlCN0VCRjdGCi06MTBCRjYwMDA0MzE4MUNENkJGRjI4NzBDRjA0N0FCRUM4RTEzNDZCOUQyCi06MTBCRjcwMDA2NThEN0ZEQzk1NkI4RTdGN0M0NjE2RkVFNjdDODBDQkU0Ci06MTBCRjgwMDBBQzBDODRDQkU0QTdFNjY1MUJFMzJGNDNGMTBGQkU4RjE3Ci06MTBCRjkwMDAyNUZBMzU0QzlFNUFFNDlDOTA2NzM2Mjc3QjZGODQ2ODVGCi06MTBCRkEwMDAyNEUwQ0RDMjM4MTI4M0JCMkVFMUZCNTdCMzQ1MTk5QzY4Ci06MTBCRkIwMDAxNDVBOUVDNTkxMjQ0MTdGQkFFRkQ5RkM0QjU2ODU3MzI0Ci06MTBCRkMwMDA0MENFNDA1QTBGQ0M0N0JEQkYxQ0Y4QjY1RkE4MDZFMDc0Ci06MTBCRkQwMDAzQjU3MEFEOUQ5M0EyMjJDMEY5MUI0MTQ0MDdCOUI3MzVBCi06MTBCRkUwMDA0MDg2Rjk0NUJDMDI1NzkyMDVFMzg4Nzk1OUQ5QzNDQkZECi06MTBCRkYwMDAxRDc1OUZBRUJDMkUzMDNDQUU0MURDMUVCNDdGMTVCRTFECi06MTBDMDAwMDBCRUUzNUVCNzZFMzNDNDNCOTJEQ0QxRTM5OEJGQ0FCRkQ4Ci06MTBDMDEwMDBENkI4QzdFREIyQUU0M0ZFNzYzMkU5NDU3OUU5NzY3RjEwCi06MTBDMDIwMDBBNDAzMzBCQ0M0MkI0MUY5RkI1MkY4RTdDMDE3NDc5NTc1Ci06MTBDMDMwMDA2RTEyQTRCRjlGRkNGOUU3MDRERjY1ODMxQjYyNDVGMDI1Ci06MTBDMDQwMDAzNUVCMjdCRjdCM0RFNjQ1RkI0Mzc2OEI1RTBBNEJDMDU1Ci06MTBDMDUwMDA0N0Q5RjVENkRGQ0RGQUNBNDlGQUYxRkU5MDE0MERFNUJECi06MTBDMDYwMDA3Qzk5NzlGQTc4NEVBMjM4OEVBMzhBQTE3RUYwNDY2NjMyCi06MTBDMDcwMDAwRjFGNEU2NkZEMEYyN0IzN0U2RjcxQkRENDlDQTExMEJDCi06MTBDMDgwMDBDQzhCQzk3MjNBQzE5RUZGRDg3MzBDQUU2QzgyM0VFOTZDCi06MTBDMDkwMDAwMjdERTI3NDY4ODg1N0ExNTdENkVFQkQ5OTAwREU5QUZBCi06MTBDMEEwMDBGNzJENDIzOEZDNUU2MkU3QTRGQTBBMDlGMzE5QzRCQjEzCi06MTBDMEIwMDAwRkY1OTNDOENCQjQyNzk5OTFDN0ZDOTRBNUNGODc1N0E4Ci06MTBDMEMwMDAzNEQxNzJERDRCQTQyNDRBREI5NUNFMERENUMwRkIyRUI2Ci06MTBDMEQwMDBFRDI1NDRERDQ0Q0JFREFFRjA4RjdFMDJGQjc4ODVCRENGCi06MTBDMEUwMDAzN0I2OEVERkFCQTU5ODU4QjM5QjhFQkZFM0NBMzFFQTUzCi06MTBDMEYwMDAxNkQ4NTJGNTYwMjdFNDBCMEQ2RTI2NUVDODJGMTk0NjQwCi06MTBDMTAwMDBCRkE3MjgzRjUwN0E3ODA0Q0E3NERERUI1Njg3RkZFNTU1Ci06MTBDMTEwMDAzNkRBM0VGNzI1QTI2MjFCNUUwRjNFMEFFMDRGRTI3NDVDCi06MTBDMTIwMDAwMUJGQ0ZBNUJGQUZFMzc0NTRCNDVGNjJFN0ZDM0VGNjM2Ci06MTBDMTMwMDAwRTE4MEUwRUVGNzQzOUQ5RkZBRURCNUY3OUY5MzRCQTAxCi06MTBDMTQwMDBBRUEyQkVBOTQ4REVFMzY4N0JDODgzODI0QzA0RDY5RUJCCi06MTBDMTUwMDBEOEUyQjUxRjA3RUQwMzcwQUVDRkYwNDNGMjE0N0MzRjc5Ci06MTBDMTYwMDA4OTcwRjkzN0REQzI4NzMzNjNGQzgwRjVBNUJDQkM4RUNFCi06MTBDMTcwMDBFQjI5MTNERkMwMzhENDZGRDdDQUQ5QjEzRkY2RjMzMUZBCi06MTBDMTgwMDBGRTUwODlGOEMzRjg3OTA2ODlGRDgxNzFBQjYzRjNBMDhECi06MTBDMTkwMDA1QzlFQzdFQjBFMkU1RjgwRjlERkQzRUREMTAzQzBFRkJECi06MTBDMUEwMDAzM0Y5Qjc5NDdGODFERjlEMTQ4RTU3RDg1QjBFRkFFOTdGCi06MTBDMUIwMDA3RUQyMzcxMEI1MEQ2NjY5MDhCNEMzNzg2NTI0MjQwM0IwCi06MTBDMUMwMDA5Q0NCQkQ5QkRCNjE3RDE3MzZCQzkyMDlGNDc1NzM1RTE5Ci06MTBDMUQwMDAxMUQyREYyQ0E3NUFFNEEyMjREMjVFQTFBQURFMjI3OEQzCi06MTBDMUUwMDA2RjRDNDJCODJDQUQ3NzQ2MjBDRjZERTlEMDdCM0ZFMTU0Ci06MTBDMUYwMDBFMDMyQ0EzRjU3ODQyNTdFMEYzRjFDNkMzMEM0NkQ0NTJBCi06MTBDMjAwMDBGRURGQjIyNEVBNUZDNzkxREYzN0U3MzFGRDJFRkFBRkQ4Ci06MTBDMjEwMDBFM0Y3NTM0NEZEREEzQzM3Q0JDRkNDQkI2ODQ2MUU5RUQ4Ci06MTBDMjIwMDBDN0IwQkM2OENBRkZCM0YzQTZDNUU0MEE5RDE3RjM1NkFFCi06MTBDMjMwMDA5NjEwQ0QwMUZCNUFDMkY5NTdGMEZGNTJFRDU2QjQ2Nzg0Ci06MTBDMjQwMDA5Nzg2Q0M3NkU5RUYyNTg2NkY3REI5ODQ3NkUyMTVGNTgxCi06MTBDMjUwMDAyM0RCQUQwQkYzQzRCOTcwODExN0Y1MDAxMTdBOEFEMUQ1Ci06MTBDMjYwMDA5NTkwRTc4QjQxQkY4MzFDQUVBNUZBREM2MDM3MzdEQ0M1Ci06MTBDMjcwMDA3RTJBMURGQjY1RkY2MEVEOTdFN0M0RUVDM0FDQjNEQzFGCi06MTBDMjgwMDA4NzY5RTZGNzYxRDZFRDZCNzM2NDAxQkRGM0ZCMzBFQkI0Ci06MTBDMjkwMDBGNkJGRDM2OUNDMDMxNDcwMUE3RTFGNjYxMEYzMUY5Nzg0Ci06MTBDMkEwMDAyOTkxMDM3MDRGNjhEOTRENzQ4RkI0RkRBRkY4RkQ4OUEzCi06MTBDMkIwMDA2N0UxRkVDNDk0MTgxRDc5QUU3NDQ1NTk3RTlEODY3OTU4Ci06MTBDMkMwMDA3RTA1REUxNDE1RjI1MkJBNkM1MzMwQUZBODJCRDVBM0ZECi06MTBDMkQwMDAxQUYzNzhCNkI0QjVENDQwM0I5MTRGMjRFRUJGMkM0QjQzCi06MTBDMkUwMDA3MDZFRkNDRDNDNjYzRjZGOTc1ODVFOTdCRURDODlGMDYwCi06MTBDMkYwMDBGNkNCRTQ4OEYxOUVCRkJGMjg4NEY5NzQzM0YyMDIzODhDCi06MTBDMzAwMDBDRjc2MUU1RjgwRkNEM0E5RjQxQkExNjYxQUMzMTdFQjdFCi06MTBDMzEwMDA2Rjk1MEY3NEJDMEUxOEFGQkE0OEM1M0M5QUVBMzQ5NkI0Ci06MTBDMzIwMDA4RkU2Q0YwQzk1REUzMjI5MzY2RUREN0U5NkJGNTcxNzJECi06MTBDMzMwMDBGQUU0MTBDQkMzNUQ1NDA2RjA0QzI0RDdBREZBOEJEMjhGCi06MTBDMzQwMDBERjNENDA4RkMzRjU1NkI4MTlFOENGNTExNTVBN0UxRDExCi06MTBDMzUwMDAxREY3RTRDQjBBRTZEQjkxOEQ5QUU0QTBFRDdFRkM4MjJBCi06MTBDMzYwMDA1Nzg1N0I3ODFEOTVBMTQ1MzU1ODZGQzc3QjgyNTlGNTU4Ci06MTBDMzcwMDAyNDlBNDRFQkNCNUU1MjdBMjBDRkFGOTE3NDJCMzA0RThGCi06MTBDMzgwMDBBMzQ1OEZEREU0N0U1NjAxM0VCRDY5QTcyMzQ2OTcwNDkxCi06MTBDMzkwMDBGMjEzRDUyMjEwNzg0REJCODdDNTQ1NTAwRTA5Rjk2NEJDCi06MTBDM0EwMDBBNTY3MzJDRTJDODc0QTg1RENBNUYyODFFNUY3MzUzMENBCi06MTBDM0IwMDBCRDQ3N0UyMDQxN0NFOEE0RTc5OENDRkQ2Qjk0N0JEM0ZECi06MTBDM0MwMDA4NEIwQjJDOEZCNjlGQjlGNDM3QjQ2QzA3MzBFOTUxN0QwCi06MTBDM0QwMDBFMEM3NDlGMEZCNjRFQzg3NjUyQTRGOEIyMUVGNzQyNjk4Ci06MTBDM0UwMDA0OTQ2N0ExQjY2NDdGMEY1OTUwREFEOUZEOTRENDI0RUYzCi06MTBDM0YwMDA1NjU2MTAwMkVGMjM1OEYxNDNFNzQzM0ExN0U3N0Q3MDkyCi06MTBDNDAwMDBCNDAyRTcwODMzRjlGQzlGREJCNDQ5RDEyMEUwOEI0NDQ4Ci06MTBDNDEwMDA2QzE0Q0U5RDUyMEJFQTFEMjdFNDgxRDJFRjE2Mjk4Q0I1Ci06MTBDNDIwMDA3MkYxQTdCQTJFMDM1QzJGMjQyRDRCMTYwNjExRUYyRkE1Ci06MTBDNDMwMDAwMURFNjczOUZCNTIwMDBGNDcxNUQ1MDlGNTM1OTAzMEZECi06MTBDNDQwMDA4ODVGMzNCRUU2QkJFRkIzMDNCQ0U2RTc1OEYxQTJEQjdGCi06MTBDNDUwMDAwMUJFMEIwMkMzRjA4NUY3MEJCNDA0RjhEMjg0NUMyMTUzCi06MTBDNDYwMDA2NkI5MTIyNEE3RDhGREU2Q0Q4NzZFMDNGRkY4NzRGNkVGCi06MTBDNDcwMDBDOUY3QjJDMjQ3RTNEMUFGQjA1MzEyRTVFNTlERTRGMjhDCi06MTBDNDgwMDA3OEI0Nzk3OTI3MURDQ0FGOTg0MTA2QUVERjJEMERBNzgyCi06MTBDNDkwMDA5MzhGMEY2RTkwNzMwQ0Y0MjRFOEY0Njk5RUE3MkZGRDIwCi06MTBDNEEwMDA5MkU3RkQ5Njc5NTBGRkM1RjQyNUEzODM3MjVFOUEwMTQ5Ci06MTBDNEIwMDBGNDY1QTA4M0Q5RkI1QzUxOTlFRUIzOTRGNzlGMDFGNDI2Ci06MTBDNEMwMDAzMDI1QTYyRkEzMzY3NzQwMjkwNEJDQUI1REIyM0NEQ0Y3Ci06MTBDNEQwMDA0RUNFQ0EwODIwRkVBN0RBMzRDNEZGMzRFQTgxNzFCQjBECi06MTBDNEUwMDBEMzlENEZGNzVGRTFFQzZEQjcwNzEwRkZERjA3RkZBNkE1Ci06MTBDNEYwMDA5MjA0MTBGRjk1MTZCRDUzRURBRUIzMDM5RDU0M0JBREIyCi06MTBDNTAwMDA3OEQ2MTBGRjM1REU2MUJGREJCRTBBRkVDRjAxRkMwQjIzCi06MTBDNTEwMDBCRDMyMEFGQjk0RTI3RjQyRkUwOEU3OEQ4OUYwN0Y0MTNECi06MTBDNTIwMDBCRUZCOENGMjMyMDVGRUFENzgxNzcyNjA4RkNCNUJFREVGCi06MTBDNTMwMDA4Njc4NzAyM0NCNEI5RUZBRjJCODc2Mjg2N0FEMERFMjcxCi06MTBDNTQwMDA3RDk5M0RFOUVBQUZCMEJFODVENTk3RjU2OTMyQkNDRjlDCi06MTBDNTUwMDA1OEI0OUVENkQzRjI5RTYwQTgxQUNBRUIzNjQ4Mjg0NzM0Ci06MTBDNTYwMDBBN0JEMTY2RTg3RjJCODhEQUNCRTc0NTNDQkFGRTA5REZECi06MTBDNTcwMDBCMzc1M0FFQkZGRjRGMTRFN0NBRjIyRDJDOUZCNTc3NjhDCi06MTBDNTgwMDA1NzQzNzk1RDE3RUJGRjQ3OEY1MzA3QkZCQ0ZDNDhBNEE3Ci06MTBDNTkwMDAxRDdFOUZCODk1QUQ0M0Q4N0Q3MzM5QkRFRDkxOUVGODUyCi06MTBDNUEwMDAxNUY2RUI2NkZENkUzOEU0NEM2NkZFMTJCM0UzRTZGMDdBCi06MTBDNUIwMDA3RENFN0Q4OEVERDNGN0RFQzVCNTAxMEFGN0VCMDY3NUI0Ci06MTBDNUMwMDAwN0NBMEQ1QjUzMzlDQUQxMDQ3RTVBQTVENDVEMDBERjdBCi06MTBDNUQwMDBGOTU0NEUxMEM0M0JBNUQzNDI5NkI3REE0M0E3NTg5M0ZCCi06MTBDNUUwMDBDRkVDMjY5MUVGMDk3OUU3OEIwQ0Y4NUE5M0NGRkMwODMyCi06MTBDNUYwMDBEMTJFMkI4M0IwRkNFNDA3RDlCQkIzMjIxRjM1N0EzRjgxCi06MTBDNjAwMDA5MTIwN0UwMDdCNDRGRDlCMjAzRjc1N0U1MTBCRUFEMzM5Ci06MTBDNjEwMDBGOUU3ODhCQ0Q0MDFGQjJBM0E2RkU5OTc3RkJBMjg5RUQ0Ci06MTBDNjIwMDA1RjdFNEIzRUIzOTM4RUYxM0M3QUYxN0I2MzI0NjgwM0NCCi06MTBDNjMwMDBGRjY0MEYxMDBGQkUwMzE0N0QxOUVDOTYzREYwQkU5MTAwCi06MTBDNjQwMDBFMTFEOTIzRDQxNTZENkYzRjdERkRENDU5RERDMUI2Q0M1Ci06MTBDNjUwMDAyRDc2MUQ5NEMwNTgwOURGNTVCOUFDOEY0NEQzNTI4NzRECi06MTBDNjYwMDBBRjdGQkU5RDQ0NTlGRTA0NUJGRkY1RUQ0QUNGMTY4M0I0Ci06MTBDNjcwMDAxREJGNTQ4ODhGNTlFMzUxQUZENDcxM0MwOUI5QjE5NEFGCi06MTBDNjgwMDBFMzhCRjJGOUU2N0NCQUZFNjVDRTE2QjQxQjk3MTNBNkNGCi06MTBDNjkwMDBENzZGMjQxMThDNkZEQzY4RTFGMzM1RUUzRkJGNjVCM0QzCi06MTBDNkEwMDA0MTFDQ0RDQ0NGNkJFOTcyRDhGOUZBRTBDM0JGQTNGMDNGCi06MTBDNkIwMDA2RjdDQzBFMzA1RkRCRkI2RDdEQ0FFRjE4MTk3OEYzMDRDCi06MTBDNkMwMDBGQkNCQ0NFRjhEODJERjIzNjY3RUE3MDYwNUUzRjdGQjZECi06MTBDNkQwMDBDRkMzNzMxQjcxM0ZEMEU1MUM3QzRCMjdCMUZEMEVFOTI2Ci06MTBDNkUwMDA3RDBCRkZCOUUwQkU2MDMxRjgzNTM2OTZBN0M4Q0I2MjQ2Ci06MTBDNkYwMDBERTRGQkI5OTVFRDZBOTVFRTY3RTEwOEFEQzRGRkIyRjJCCi06MTBDNzAwMDBDMTdDRjg1MkExNDdCOTlDMTFGQzVDQ0FGNUZDMzAzREQ0Ci06MTBDNzEwMDA1RTZCRjU3N0VFNDMzRTk5Q0E0QjU2RkQyREY0QjZCOEU1Ci06MTBDNzIwMDA4NzQ4Qzc0NUZENERGNUY1Q0IxQTVENkY5RkNEMUQwMUJGCi06MTBDNzMwMDA3OEM3RjQ3NjA0Rjk2ODhBOTNDQTZCMUJFMkVGMDBFMENECi06MTBDNzQwMDA2RjFBQzc1QjNCRDdFQjA5RkQwM0Y3RkFCOEZFMDFGNTlCCi06MTBDNzUwMDAzN0YwMUM2MUI4NUYxMDM1RDlGQkMzQ0UzMTEyRDhGRjVBCi06MTBDNzYwMDA0Mzc4NzM1MTdCMkEwNUZDN0RDMkVDRTIzQzMyQUEzQzQzCi06MTBDNzcwMDAxMTJBQjdERkNDMUY0MTZGMkJDRkIwREYwNzc3QjgzMDVFCi06MTBDNzgwMDBCRTIwRTJFQzgyRkY1RTJGNjA3NkY4QjY1Q0VEM0Q5MDU1Ci06MTBDNzkwMDBGRkZEN0NCRTdFM0U3RUZGQ0RGM0YxRkNGQkNGNDRDM0FDCi06MTBDN0EwMDBGMzZGQzg2N0NBOEY5MzdGMDFFN0RGMUQ4Njc4Njk3RkMzCi06MTBDN0IwMDA3QUZDMzhGODI3NUNGRTk0MTYxMEZDRkVDOUFGN0QwQTlGCi06MTBDN0MwMDBFQjNGQTZCMDM4RkJCMTY0RkU0RDY1RTcxNEZGM0JENEU4Ci06MTBDN0QwMDA5RUM5OEY0Q0ZFMTVFRjkxMUZDQjMwQzdFNzQ1M0IzRkZECi06MTBDN0UwMDBGRkJFREZFQTBDNzUxOEUyRTE4MUZCOTM1QTQwOEZGOTM2Ci06MTBDN0YwMDA4Qjc4NUVGQzdBNDZDNzI3OUY0QURGNjE3QzI3MkU1MEU0Ci06MTBDODAwMDA1MDU5NUEzMDBEREE2OTRBMkVDNDY3OUU2MkZBQTJEOThECi06MTBDODEwMDAzRUEwQzBGQjNFM0U3RjM4QTVDMDBGRjc5Qjg4RjYwNEM0Ci06MTBDODIwMDA4QzEzMTg1MDk2NTA3ODlGRTRFN0ZFMjdGOTdCNDAyNzM5Ci06MTBDODMwMDA1REVDMkJENjE1Mjg1ODU0MEFGRDRFREUzQzgwNzI2MzAxCi06MTBDODQwMDBBOEJDNjgwMEU1NDJBMDIwODRGMzlFNUMyQUVBNzlGOTNFCi06MTBDODUwMDA2RTU2MjZEQ0FGQUNFNDdDODI3MUUzMzg3MUUyRTE3MUE0Ci06MTBDODYwMDA2MUYzN0IzN0VCOTRGOEU3RDVBNEMwNjM4QUY3QUVEOEMxCi06MTBDODcwMDBDRkUyOTAyQjlEQTQzMzlGRDY1RkJEM0YxQkZEOERDNjlECi06MTBDODgwMDA1NDdEMDJEMEMzRDc4REUzOUUxQ0QzODdGQkRBNTIzOTg3Ci06MTBDODkwMDAzOEY2QzEzMjNDMTdDNjc4RDFEQUZEQ0ZBMUZDNUIyQjRDCi06MTBDOEEwMDBGODY2QUY5OTZGNjYxNzhDRUUzQ0M1MUE2NzFGMDUzRjk3Ci06MTBDOEIwMDBDRDJGMThDMTBFN0ExMkY0OTcyMzg2ODc1Qjc4N0U1M0FBCi06MTBDOEMwMDA4RERDNTQwRDcxQTU0RjU3MTNCQzY3N0JDQjBCMzJEMjU3Ci06MTBDOEQwMDBENTJEM0Y5MkYwREQwOTYxQzdBREU1NzA0RUI0MkZCODlDCi06MTBDOEUwMDBBNzEwMzBDODE1QjhBNzEwMzBGODc1NzA0RkMxNTg4NjFBCi06MTBDOEYwMDA3QjBBQzZGNjcwNEZDMTU4MEZGNzE0OENGNTcwNEZDMTA0Ci06MTBDOTAwMDA1ODJFMjVEN0I2NDM5QzZFNUQxN0YxNDYwMkVDREU4MkE5Ci06MTBDOTEwMDBCMTNGREM1QjMwOTZFMURFODJCMTNGREM1QjMwOTYzRkJECi06MTBDOTIwMDAyNTBDNkU5RjNFMjQ2M0ZDMUZFRTJGMThGQkRGRjBDMjI4Ci06MTBDOTMwMDA4RkNCQTNCMDZEMTdDQjUzNkI3NzUxRjgwMzFERUE1QTE5Ci06MTBDOTQwMDBERjI0MEE5RkQ1MUMzRTcwQkZDMTM4RUUwN0E5MTczREYyCi06MTBDOTUwMDAwRkY4NTlERDc3RkQ0MkY4NUVCMEVGMjZEM0I4QTQ5QkZGCi06MTBDOTYwMDBDOUUzMTZGQTE3RTA3ODNEMDlBNTgxM0YzNzg1MEMxRTBCCi06MTBDOTcwMDA4Mjc4NDc3MzQ0NTI2MURFMUIxRTMwQ0JFREExRjc0QzI5Ci06MTBDOTgwMDAyMkU2REZENzEwNDNGQzM3MzgzQ0VFQkZBNUMwRTM0M0I3Ci06MTBDOTkwMDBCQUNBMjM3OUM2Nzg0RjhDMUVEQzZBMTRFMEYwOUFBQ0QwCi06MTBDOUEwMDBDNkEzODc1MjcyNkUxQUM2Nzk5RTk3MjE4NjQxRkU0OEE5Ci06MTBDOUIwMDA1QUI2Q0Y5MjBDRTcwMzE2NzgyNEU1OThFOUMyMTUzMEYxCi06MTBDOUMwMDBEMzQ1NEFCMTk5MkUzQ0FBOTkyRUQyMkFDQzc0OTFBRTY1Ci06MTBDOUQwMDA5RDM3MjI3QzMzNkJDRDc0QjI0NjZFNDJCRTE3NzBBRTZCCi06MTBDOUUwMDBBMDdGMDFDRTUzRTA4NTRBODAyRkREMjdDNDhCQURGMEI4Ci06MTBDOUYwMDA2RERDQkZBRDEzRUNGRTMzODVFRjkzMTZGODdFNDY2NjEzCi06MTBDQTAwMDA1NUJCMDM1ODVERTcyQzhGRDkzMTY1Q0ZCN0UwMjFCMDE2Ci06MTBDQTEwMDAzNTdFMkFFMDI4RUMwODExMDdBNUZBMUZFREU5OTg1RjlBCi06MTBDQTIwMDBDRkZDM0Q2QTFGMUMyQ0MwRjMwM0U2RTcwMTI1ODFEQzI3Ci06MTBDQTMwMDBCQzhFODQ1MTNFNUQ2N0IxMEY2RTcwREZBNzgwN0QzMDg0Ci06MTBDQTQwMDA2Q0JGRDQzMjgzRjcwQkFERkIwNTdCOEIxOEUyNTI1NkRCCi06MTBDQTUwMDBGQjQwREEyRjQ1M0Q5MzYxQkJGQjg1OUMwRTdGODlDNjY5Ci06MTBDQTYwMDA5MDI2OEQ0NjZFRjQ3QUI0RkYwMkI5MDU4RUEyQjNEQzJGCi06MTBDQTcwMDAxNDM3OEU2QkY3ODk3NTA4Qjg4OEY5OTM0ODhCOUMwMzM3Ci06MTBDQTgwMDBGNDVDNkNCNUNGQ0NGRUI1RjBDNzQ1QkM1REM0QjU4NUQ0Ci06MTBDQTkwMDAzRjJERkMxODJCOUNFNTczODJFRDQwRkY1M0JEQzI4RkU4Ci06MTBDQUEwMDBFRUJCMEE3RTE3RkVCM0Q1NkYxREJBMTcwMDkwODU3QkNCCi06MTBDQUIwMDAzNzNDNEU3RkE3N0Y5NTkzQkRDQkM3Rjg0RUZDREVFOTkwCi06MTBDQUMwMDA1QjlDMzY1MjNFRTYxREFERTY3QjMwNzQxQkRBODhGNzgwCi06MTBDQUQwMDA4QTAwNjQ1OTcwRUU0NDIwQTg0MkI2NUU3QTY4MDBERThGCi06MTBDQUUwMDBEQUQ5N0FEOThCODNDRkQyRUY5NjkyMUYwQzZDODJCQUE3Ci06MTBDQUYwMDA1MzVGQ0EwMEQ3QTE3ODNFNjFGNzg0MTVERTRGMjlFODVECi06MTBDQjAwMDBCQzE5RjQ2OEIyNkEyN0VGMUFFOEMyNDkzNUQ1QkJDNTJCCi06MTBDQjEwMDA3QzVFRDAxMzM5NDNGNUJGMzE5RUVCRkZBM0JFNzc1MTQ2Ci06MTBDQjIwMDBGOEJDM0I3RTg0N0E0NTZEOEM2N0Q3NTlFMTI1OUVDMzVFCi06MTBDQjMwMDA3MDREQkFFODM4RDgyNzJFNjJEODM3RUE0MzQzNTk4RTY5Ci06MTBDQjQwMDBDMTBCNTVBQjhDRjdBNjQ0QkQwNkVGOTc3Q0REN0QwMThDCi06MTBDQjUwMDBERURGNzUxOENCRDE1N0RFNzcxOEQ3MUY2MTc5MDVGNjYwCi06MTBDQjYwMDAxMDgxRkM1QkM1NDdFQjhERkE2NTg4MEUyOTQzOTUxQjQ4Ci06MTBDQjcwMDBGNjM3OEE3RDAxRDM4MEZCQzlFQzEyODZFRkJGRDVCRUE0Ci06MTBDQjgwMDAzQTJDRjg4MjcxNDM1OTY3RjVGQUY0QjM3QzdERDFCMzNFCi06MTBDQjkwMDAxQ0JGNjREMUQ5MEQzRjZERDFEOTBEM0ZGRDJDNUY1RjE2Ci06MTBDQkEwMDBGNDJDQzcyRjU5N0M3NkFGNEY1QjdDNzZFMzU3M0ZDQjk1Ci06MTBDQkIwMDBENzE3M0RDQkYxNEI5NjlDRERGMEQzOTY5Q0RERjBEMzlGCi06MTBDQkMwMDBDRkYyRjU0NUNGNkVGQ0VBNjgwN0JBMkJBMjA0REU5N0Q4Ci06MTBDQkQwMDAwODc0MTAzNTE4QTAyNjJCRkQxOUZDRjkyMjk1NjA5RUNCCi06MTBDQkUwMDAwNkUxN0U0OTIxRjc0QkI2NkQ2REE5MDcxN0VBMTE1RDg1Ci06MTBDQkYwMDAwOTYwM0M4OEZBRjczOUI0N0UyMjYxRjU4Rjc0MkRDNjNFCi06MTBDQzAwMDAzODZCREI5ODA5NzlGMDVFOTVCQkVCQTJFMzcwN0Y2RjIwCi06MTBDQzEwMDBBMkNFRkM3MUVCQkYxQkI2NDgzM0ZGRkI2Qjk3NTc2NDhBCi06MTBDQzIwMDA5QUNBRDNGQUNDRUY1NzVDRDU1ODY0QUE1RjFFM0VERjkwCi06MTBDQzMwMDBGMkVGRTc0RDM1RkZCQjY0QTE5OTk2RjcyMDZFMjZDNjRCCi06MTBDQzQwMDA3QjkxODUyNEFBNDI3Q0E1RjA2RTVCMTU5QzlCRDlDMTgzCi06MTBDQzUwMDA2N0JFOTBGRUI3NTNDMTdFMUFGRDZCRjQ1RjBBQTkyNzI5Ci06MTBDQzYwMDAzNDM0N0UxMEUwQTY5OEM2Nzc1QkVBQ0ZGNDFFRUFGRTY1Ci06MTBDQzcwMDBCMUYxRUZBMTEyNzg2NDMyQ0VCRDczNkIxRTI2QjFERjI1Ci06MTBDQzgwMDA4OEYxMzk4MUFGM0IzN0RCRDBFNUZENkMyQkMxNzcxRUQ2Ci06MTBDQzkwMDBBQjIzMDExQkJFODNDRUYxNzYzRTI3M0RCMUVGNDhBQkZGCi06MTBDQ0EwMDBGOTNFN0FBMTRFQUEwMDlGNDUxREM0MDZGMUI1RTA0RTlCCi06MTBDQ0IwMDBBMjZBMDRFMzQyNDgyNzhGRThGMUU5RTQxMUUyQUQ4Mjc5Ci06MTBDQ0MwMDA3N0I5MUU4OTEwRkM3N0IyMDQ1RERDRTkwOEU0QzFCOUNDCi06MTBDQ0QwMDBEQUY5NUQ4QzFFMDQ5RDA0ODA0RTUyMjEyRkM4RkFFRUI1Ci06MTBDQ0UwMDA4MDE1NUY2NDRBOTRBRUY1OTFBRDg1MTlDNjdDNTRCMjQ3Ci06MTBDQ0YwMDA5QkMxREQ0OUZGOEU4NEFGRTI5RDY2N0MwNTg4QTFGQzY3Ci06MTBDRDAwMDAxNUYwRjVFOUQ3QzQ5N0UyMEI0NUQzN0MxMENGMjQwMTg5Ci06MTBDRDEwMDBDODkzM0EzODY2ODIwREUwMTFFQzUyRDFGRkFGQTVDRDMxCi06MTBDRDIwMDAwMENFQzEyRUY2OUU5QUMwOTMxODZGNkIyQjg5Q0UzMzFFCi06MTBDRDMwMDBGODdGNDEzNUFBMDE5QzZCRTQ0OTU1OTA3RkJFQTMwQzU2Ci06MTBDRDQwMDA0M0M2QzNGMEIzODM3ODkzMjFFRUJEQTNDQjk2OEM2RjFCCi06MTBDRDUwMDA1NEVGQTM3ODI5MjFFNEJGMzcyRjRCMkJBNkY1M0Q0MTkzCi06MTBDRDYwMDA5MjBDRUY2Q0Y1QjREOUYwRERCMjlFQTdBNDdBRjNCQkI4Ci06MTBDRDcwMDBDQUQxMjQ1QjBFRUUyM0M5NTY4MTVGM0JGQjZBRkM0Qjk0Ci06MTBDRDgwMDBFQ0FDM0UyQTQzNzlFQ0M2NjFFRjdFQzg1MDlGNUU2QkU3Ci06MTBDRDkwMDBGOTc3MDM4OTI2NDFGQkU0NzM1ODFFNjc5QTY2N0VDRkI0Ci06MTBDREEwMDBDNjUxNjE5NjA3MTQ4QzdEMzlFNTEwNkZFMUY0Q0VERjMyCi06MTBDREIwMDA0OThERDQ5MEM4MjZCQUVFNzNCOERDQjFEMjUxRkExREIxCi06MTBDREMwMDA4QjkxOThEQUM2N0MwM0U1NTk0RjlCODJGMDc3NzA3OTk2Ci06MTBDREQwMDA0NTM2MzJCQUQwRTk1RkEwQTc3NDBCMUQ3OTU0MzMxREQ0Ci06MTBDREUwMDAzOUU0MDJDQ0MzMTU3QzI1RDYyM0U2NkYxQjkzOTU2Q0UyCi06MTBDREYwMDBDNzc1RDlGMTNENkM4NzU1NEU1OEQ2RTc4NjYwMjBDNTdBCi06MTBDRTAwMDA5RERCNDcyMjExNUFFRkQwMTk3RjEwQjkxRjdGNzc0QzU1Ci06MTBDRTEwMDAyNzI0MzNGODE1RDZGOTM1RTU1M0U4OUNCRjhEN0NGMjBECi06MTBDRTIwMDBGMDMxRUY5Q0M2RjZGOTk5Q0FERUI1QUVFRTYwRjRFRUNECi06MTBDRTMwMDBEOUNBRTgxRDZFNzRCMzdDMkQ2RDYxQUVFMTVDNzUyRkFGCi06MTBDRTQwMDA5NzUzNTZCODc5RkFCNDZBQTBFNzhCRTQ5NzM0Qzg4RjQxCi06MTBDRTUwMDBCOEZCMzU0NkZGNkQ2MzBFM0YwRkU1QUQ3NzMzRjgwNzNFCi06MTBDRTYwMDA1NTg2Njc0QTJGNkE5NDJFRkRFRTNCREM5ODE3M0NCNTM5Ci06MTBDRTcwMDA4Q0UyMEJGMEZGOTI1OTlFNENFQjMzQzNCMUM4MjIzN0MyCi06MTBDRTgwMDA4MjA5RTA2QUU1RDc0NDcwRkQ5NjgwNkIzOTg1NkJEMUU1Ci06MTBDRTkwMDA5OUMzNTVEMTk5N0M0RTlGQzVERTU5M0MzODQ2NjFGRkY4Ci06MTBDRUEwMDAzRUFGQ0VFMDk4QUVBOTI4N0YyRjkyNEY0NUQzNjhCQjA2Ci06MTBDRUIwMDA2RDFBOTUzNzc0OURCNTFBODNCNzc3OTY5MEUzNjY3OEE3Ci06MTBDRUMwMDAwQUY5MjJFMDVGQzhFMUVGNTVCRDJGQzBCRkYzRTJENkZCCi06MTBDRUQwMDBFRDI0MjAwMTdDRkY1QjAzM0JBMjdCOUE5MDM3ODMwNDA3Ci06MTBDRUUwMDBGMDk2QTYzMUJBMTU3MEVFOUVDREUwNUNBODcxMzg3NzQ5Ci06MTBDRUYwMDA3MUI4NDk0NDAyMzg1QkU5RDUyQTlGRDNCRTI2OUM3Nzk2Ci06MTBDRjAwMDA5REMzRTNGMTU5QTRGQ0FCQzA3OTVCMEE3QjQ3RDkzMURGCi06MTBDRjEwMDA4RUMxRDVFMTFFOEM4MjlDRUQwQURBNzE1RjA3ODIwQTEwCi06MTBDRjIwMDBENjc3OTVCMEZBRkI1MzU2RTY4MEJFRURGMjc3RTYwMDcxCi06MTBDRjMwMDA1REI2MDVBRkNGMDFGOUVFQ0FFMTcyODY2OEVFRENGMkFDCi06MTBDRjQwMDBEOEJEODMxQTc5MkJCRTQzREExOTUwMTAzRjlFNDA3QzFFCi06MTBDRjUwMDBGOTk1MzYyQkVDQzQ3OTI2RDk4OThDNzA3ODQ4OEQwN0UxCi06MTBDRjYwMDAwNzY3OTk2MjkyOTdGOThENjZGOEE2NThFMEVCRkE5QUVFCi06MTBDRjcwMDBGMkUxQjVBRjI5MUZFRTIxNkNGRDc3OEUxN0VGMzQ3NDA3Ci06MTBDRjgwMDAzQjUxM0Y1NURDODQ3MUYzNEMzRUQ3RTY4NURGNjVCRkVFCi06MTBDRjkwMDA3M0JENjZGOEJEQjYxMEU0ODlEQkFFMDIzQzEzQURCQkQxCi06MTBDRkEwMDBBNzk1RjBGNzVBOUNGQ0ZEMTZGNkFFQ0IzNjc4RDc4NUUwCi06MTBDRkIwMDA5NkJGMDNFRkJBMjQwMUZEQjM3NzVEQjZDMEJCMkVGNDc0Ci06MTBDRkMwMDBEQjA1RUZCQTlDMEJGNkI0ODY1RkY5RDI0MjdDN0ZGMEFBCi06MTBDRkQwMDBCMzVBODJGMUYxNEQyOTdGMjVGMUUwNTVENDY1RDY3RjEyCi06MTBDRkUwMDA0MTNERDlGMjBFOUI1OUNGNjVDQ0NCMzM5NUJEQjNDQzI3Ci06MTBDRkYwMDBFRkI2Nzk1NEY2NkVEQkZGMDE2NDY4MDM0MDAwODAwMEYxCi06MTBEMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCREQ3RDA5Ci06MTBEMDEwMDAwQjc4NTRDNUQ5RjA5QzNENjczN0JCQzk2NkIzQjk5MjRDCi06MTBEMDIwMDA0MDEyNEU0MjA4MUIwODYxODEwNDgzODI5RTg0NDA2MzQzCi06MTBEMDMwMDA0RDcxNDM1MTUxQTg4RDQwMzE0MjQ4Mjg1RTFBN0ZGNTA5Ci06MTBEMDQwMDBDOTQyODI4NDE4MzRBMDU4NUEyRjJDMzc4QkI1NkFCNDQxCi06MTBEMDUwMDA1MUE5MjJERDIwNTJGQUQ1OTY0NTUxRjE1MkJGRjU1MjIxCi06MTBEMDYwMDAyRjQwMjU4QTE3N0MzRTVCRkY3OURGOTlEOTNERTc2NDI1Ci06MTBEMDcwMDAxM0MwRTJGRkY4RkRGMUMxQzk5Qzk5MzM2N0U2QkRCRjVCCi06MTBEMDgwMDBFRkJDMzMyMTg0OTA2RkU4QkYwNENGMDQxMkY0MTBGQzhFCi06MTBEMDkwMDA4MUJBNDMzRDk3MDRFREQxRkEyM0MzRUIxQzZBM0EyMUQwCi06MTBEMEEwMDA1Njc3QTVFMTM5RjFGNzExNUYyMjU2MkQyNDgzOTA1NDZDCi06MTBEMEIwMDBERTM2NURCRUQ3MUUyRTI2NjQ0RENEQUMyNDUyMENGRDRGCi06MTBEMEMwMDBCNDUwMjY2RDRGODA0Njk1OTBENTU2NkY5NjhGM0U0RjQzCi06MTBEMEQwMDBBODU5NTQ0MzVDODRBQzZBMjEyNDM4OEE5MEY2MTYzQkU0Ci06MTBEMEUwMDA5NjJCNzI2Q0RFNjAxQTIxNzdCRTJDN0JFM0U4MkIzNjIwCi06MTBEMEYwMDBDREE3Qjk2OUZGREU5QzVCMDlBMUNGRDdCODA5MTk5MjBBCi06MTBEMTAwMDA0NzlGQkI5NzExOTI0Rjg4NDIzRjIwRDFCQTUyMzNFM0Q5Ci06MTBEMTEwMDAyMzUyNDI1Rjk4QjM4NDkwNDlEMUY5QUNBOUIxNzg4Mzg2Ci06MTBEMTIwMDBBNTg0QzQyNTNCQkRGMDdENTJBQ0JDMTNBNjZENkVGQTQwCi06MTBEMTMwMDBERjM3RjRGRDZGRTBFNzgyNjgxOTQ3NTgzQkFFMTNCRTU2Ci06MTBEMTQwMDBBM0VBRUEwNEJFNjc2QzZGN0U1MzdBNzRBRkFFN0RBQzFGCi06MTBEMTUwMDA5QTk4RjYzRTJDRjYxQzcyQ0UzNzMyMkRFNTc5NDk3NTM5Ci06MTBEMTYwMDA0RTVBOTZBNzEwOTJENUZGN0I1RkI2OTA0N0Y3OEU0NDM0Ci06MTBEMTcwMDA4MDEyOTIwRTY1M0QwMTc4MkE3Q0NDRDVDOUIzRUNDNEVGCi06MTBEMTgwMDAxOTg1QjM3OEJFQ0FDREUwMUIyN0QxQ0FFNEZFRTNCNjQ5Ci06MTBEMTkwMDAwMTVDRTNBMjc1ODUxMEFEMUJGMDkxNUQxQUIzQkYyODQ5Ci06MTBEMUEwMDAyOTA2MDgyOTIzQTRCMzI1NzhGMDNENkJGNEI5NzMwQTQ2Ci06MTBEMUIwMDA3RERGRDlCRkZGNEM1NUM2NzlDRjU1NTUyQzlENEE5MDgwCi06MTBEMUMwMDBCODY5QkY0NDJGN0Q1RjA3MTdBNzc2NjZERkE3M0ZBNTI1Ci06MTBEMUQwMDA2OTc0QkQyRTRFMzdFNDc3OTIwMjc4QjVGMzdBODI1NEEzCi06MTBEMUUwMDAzNzU3MkQwMzdDRjkwODE5NDFGQjk1NkJBNEFFOTg3RDQ4Ci06MTBEMUYwMDA0RjEzRUY0OTUwMkFFNDFENDFERjc5QUM3NEQzNzYwNjEyCi06MTBEMjAwMDA1MjI4NjlCQkRERDhBRTY2MjBCQzcwNUMyNUZBQkVGNjNDCi06MTBEMjEwMDA4RDM0RjBCQ0JGQUIxMkYwRjhDRUM4NDFEQTZEREU3QUM3Ci06MTBEMjIwMDBFMEE3N0VDRjU1OEI4MDYzNUYxQTg1OUJDQ0Q3MUIwMzBECi06MTBEMjMwMDA4RTZEQzBERjAyOEVCMjkzQzFCMTREQ0FEQjE5QTZGQzYwCi06MTBEMjQwMDA2NkQ1NUM1RThBMTE1MjkxQTY3NjAzNUZCNjY5NEVFNDlDCi06MTBEMjUwMDBDQkI2QjRFRTUwMjVBRDlGMjhCNTc4NjFBOEM0OTE5NUEyCi06MTBEMjYwMDBDODhGNkQ0M0Y3MUQ1RTA4NzA5REI5RkZDMzZEMDgzNTBCCi06MTBEMjcwMDAyRDU0MjVFMDRCREIxMzNERDVBMTJBOURCQzExRjg4QTI2Ci06MTBEMjgwMDBFN0JGNzc4QzdEMjBCQzkyOTZBOTE3Q0YyMzZFNEEyQUUwCi06MTBEMjkwMDBDRTIxMzYyMjUzQkMzODQ2NTZEOUVCOUM1MUZDRDhFMEZGCi06MTBEMkEwMDAxN0ZBM0MzRTZEQzY0NzMyRTVGQjc4QUYwRThGRjBFRkM0Ci06MTBEMkIwMDAxQjU2NDc3OEQwQzVEQkIyNkZGREI5MDQ0NDkxMTlFOTFDCi06MTBEMkMwMDA3NzAwRTZBM0E4QkVFOEZDQzhEOUM3MTdDOTRFNDNCRTdECi06MTBEMkQwMDAyNzhBMzcxM0U0NjU3RjdBRjczM0JFRTdGRDA2RTYwQjRFCi06MTBEMkUwMDBENjZGQkE1QzkzNzkxNTg1Q0I5QTE3OTg3QzI0MUUyNjQ1Ci06MTBEMkYwMDAxNzZDNzY4NkNGMzU0NDYzRUREOThBOTdCRTQxRDY2NEU0Ci06MTBEMzAwMDBBRTQ0RjlEMUFFQ0U2RjA3RjlGOTc5QTY4NUM4MTIzQ0MzCi06MTBEMzEwMDA1RjZGMDdGOUExOThFNDQ3QkFDRjYyRDAwNzQzRTZDNDJDCi06MTBEMzIwMDAxQkU0RkU5QTgyNTkyOENGMDY5QTY3NTY5REYxRkQ2MTRCCi06MTBEMzMwMDBGNUM2Rjc3Mzk2QTUxOEVBRTIzRDZCRTY0NTJGNTVBNUFECi06MTBEMzQwMDA0NkVCQUI5NDNBM0JDODkxNUIzM0Q3NEI3NTNBRkExRTI4Ci06MTBEMzUwMDA1MjU0RjczQUQwQUJBOERCMzI2N0UyN0I3MTM5QTUzMTgyCi06MTBEMzYwMDBFN0I1Q0ZBM0JEMDU3MkEyNUQ2NUYzMjZFRUQ4NzBCRTBBCi06MTBEMzcwMDA4QkVCQTFCQkI5MUUzQUQ1M0EzN0YyRkVCRkU2RkRFRjAzCi06MTBEMzgwMDA2RDcxNjMxOUMxNjdDMTM1MDZCQ0FDQ0VBMkYyOUE4RTJECi06MTBEMzkwMDAwN0IwRDc3RkZGMjlCNUVFNzM5ODVGMTRDRjk2Mjg3QzJFCi06MTBEM0EwMDA4MDY5OEIxNzVCODA1RkM1Mzg2RDU5RjkwRUMwREJGQTU5Ci06MTBEM0IwMDBFQUMxRTcyN0Y0QUFFODY3NTU3Q0M0NEJERkIzMTJBM0EwCi06MTBEM0MwMDAxQ0I3QTU1OTBDRjg5ODkwQzdFNUM2QjY2QjBDREZERDA1Ci06MTBEM0QwMDA5QjNDNjM2MzFFQTVBQkY1ODc2NDgyNzRGNzNCRTNGQTVECi06MTBEM0UwMDBGQUQzQUI3MTFERUIzM0Q5RkEwN0E2NkZEM0JBQTk0NEIwCi06MTBEM0YwMDA4OEQwMTFENjUzNENGNUExQTZGRUY5QTZGNkQxQTZGNjEzCi06MTBENDAwMDAwOUE2RkFCOUE2RkU5NUE2RkEwRjRERkQ2Nzk5RUE1NzQ3Ci06MTBENDEwMDA5OEZBQ0YzN0I1MkYzNkI1MkYzN0Q1RkY4RkIxN0YyOTgzCi06MTBENDIwMDBDM0YzRjVFMkQ5MjBGMjA1RjRCQUI5QkZBMjY4ODg1RjY4Ci06MTBENDMwMDBBMUU3MjM3Q0U1MzZGMkUzMEY3MjJBQjQzQzY2NjcxODU1Ci06MTBENDQwMDBGMDJCRThGMzc0RjFCMzlBQ0FCODEwRjA5M0EyM0E1MEYzCi06MTBENDUwMDA5OTk2MkYyNjdBN0E1ODlGOTk4RkZBQTM4RDRFMEJGNUJECi06MTBENDYwMDAzN0I3NUY1MjA0MUQ1NzczRkI3MENFMTIwMzFERjVFNkVDCi06MTBENDcwMDAxNDNBQzA3RTI0Q0UzNDk0NEJBN0EyMEI4OUE0MThEQkE3Ci06MTBENDgwMDBCNUExRDFGNjdDRjhGRkQ5QTU4QjUzRDM3MTgwRUJERDI0Ci06MTBENDkwMDBDMUU3MkRFNEMwMjNDMzdERDcyMjNFMDJENDlFMUUxQkNDCi06MTBENEEwMDA4NTkzMUFCMUE3RTlDNzI4REY2RDQ5MjM4MTM4QUFFRjEwCi06MTBENEIwMDBCNkY4MkQ1OEZGM0M5MzdFMDhFQzk1MkFDNjg3MjM3ODUyCi06MTBENEMwMDA3RjQyQzIxMjhDMjNFNkQzQ0VFOTY1MURDODI5NUFERUZECi06MTBENEQwMDAwMTcyOEE5NkI3QjU2NDYyQjk3QUFEMjU2QjIxOEM1NzEzCi06MTBENEUwMDA2MzQzM0NBNThFQkJENUFGNDA1OTU5NUUwNEZBRkJCNkU5Ci06MTBENEYwMDBCMTNCMzQwQkFEMjc5RTk0NDk3MDIyQjUxNzRBQUUyODM0Ci06MTBENTAwMDA4N0U1MjQ0QzlGOUZCOTE3M0VGNzM1RkRDRTI0RTA0RUFBCi06MTBENTEwMDA4MjQ2QzZFNjJBMTJCMDhFMjM2NEVEOUVBQzFGN0FFOERFCi06MTBENTIwMDBCODZBODFFMjc1NDA1QkIxNzc4NTkyODZGREZDRTAzNjkyCi06MTBENTMwMDBBODRBREZGRTExQjQzRUJDQzA4MkY2ODVCNUJDQUYwNTdCCi06MTBENTQwMDBFQzc3MzFFRkI1M0ZBNDg0NEIzQkU2NTU3QjJEN0UwQTRCCi06MTBENTUwMDA4MjE1QzNFQjdFMDU3MDFBREU0OTJDMUFBREFCN0U1NUUxCi06MTBENTYwMDAwMkI5RjY0NjlFOEFGMjc2RUIxRjI4NDM4RTgwMEZGNUFECi06MTBENTcwMDA2NTgxOUVGRDYyQUQ2RDI1Q0M3MzYwM0MxMUQ5NTJGRTc0Ci06MTBENTgwMDBFRDRCMzEwRURBOTk0M0YxQjkwNkY0QUMyQTQ4NDI3NEY2Ci06MTBENTkwMDA5NTFGNzZDMTNDOUQzMkFCM0Y5Nzc3Q0NCN0IyMzg1QUQ2Ci06MTBENUEwMDA3RjJDRUY5ODdCMjU2REVGOUM5ODZCODE3NUU0QTVCOTc2Ci06MTBENUIwMDBCNDQwMENCQTNBMENGMjE4RDZCNzc2RDE3MEJEMUUzNDBFCi06MTBENUMwMDA5NzZBMEQxRDc3MDgyRDhCNzkwOUI0NzYwRUMwOUY5NzQ5Ci06MTBENUQwMDAyQTdGOUVDOUVBMDczOERDRDQ2NkRFOUVDNkNBQjNGRDQwCi06MTBENUUwMDAxREYzRjhBRkU1Qjk4NTVEM0E5NEZCOEZDNUNFOEM0MTRDCi06MTBENUYwMDBFREQzQzM3OTY1RkRFRDUzMkFFODg2MDI5RDZGQjI3QUJCCi06MTBENjAwMDA4NzVBRThEODlCRDZEQTg4OUZGMkQ0QTYxQzgyN0VBMkRECi06MTBENjEwMDA3RjhEMkRCMDFERjg0MzUxODc1RUFBQjNCQjAyNkIzMkRDCi06MTBENjIwMDBBRUQwRThGQjAxODlDQ0QxQ0JDOTdCMzk5Q0VGQ0E5NzNFCi06MTBENjMwMDA3MDdFRDNFNTYzN0U5OUQyRUYyNjNGNDEzQjZCMTM3MTM5Ci06MTBENjQwMDAzQkMwMUU4OUUwREJGRkI5MEZFOTkwRTNCQjJBQkY2QTRDCi06MTBENjUwMDAxREQwMjk1OUM4RjQ2NjdFNTQ5RUFENTBFODM4OUI2MUIwCi06MTBENjYwMDAxQzVBREZEQzZFQzFGOTZEREE0NUY5OTc3RUVBRjM5QjRGCi06MTBENjcwMDBERkIxODBERDNDOTYwNDJEQjBCRTMxMjQ4MEE1ODcyQzFGCi06MTBENjgwMDBCMzAwNTBCQUI5MUVERkM2RjlCNzkwRjIzN0ZBM0IyMEEzCi06MTBENjkwMDBGQTY4RkJBNUMzRUJCRTA2QkU0ODIyMkFENjU1QkYxQkJGCi06MTBENkEwMDBFOUE5NzE1NzcyNjUyQ0ZCQzA5NjZGRTE3RTI2QTk1N0Q4Ci06MTBENkIwMDAyNjcxM0Y4N0MxRDk5NjVGRDYxRkZFNTZCMjBDRTE3RTE4Ci06MTBENkMwMDA5M0M3NjdDRjA3RkY2RUU3QzFFMDMwREFGNEM0QUI0NjFCCi06MTBENkQwMDBCQTA1QThDQ0QyQzk5RDFDRkU5RDI0QUY0RjkzRTkzODUyCi06MTBENkUwMDA3QjcyRUI5MkUxRkRDNkZBNEZGNjY1QzBEMDdFM0ZCRTdECi06MTBENkYwMDAzRjM5REY4REZEQUUwODc2NEY4NzYxQzY3OUMzOTU0MDBGCi06MTBENzAwMDAwQjYzQUI3QkY3MDBDOThDRDEzNjgzOUI0MTNDRTUzRjczCi06MTBENzEwMDBERjkzQUFDMjNDRUE4NkMyMzg4NUExNzAwNTkwOEZCMzE4Ci06MTBENzIwMDBGRTYwMzAwM0U3NzNCRTA1RTg2MjA0Q0M4N0QzNDcyRDYzCi06MTBENzMwMDBEMjk3OEE3NDIyRjAwREY0NTA0QkVCNTczNDMwRjg1MEU2Ci06MTBENzQwMDA4MzEwREI4OUUyMzZDQzdGQ0IyQTRBMjdDRUZFNzQ5MjQ3Ci06MTBENzUwMDA5QUNGRUMyMzZGMTQ4RUM0M0FCODdGRTVDRDhGNDFCRkNBCi06MTBENzYwMDAwMjJFQjM3QUJDNTYwODE3Rjg3RUU3NUUwNTNFRDBDQzkxCi06MTBENzcwMDA0MERGNUUwNzdEREU5RTVCNzcwRUFDQjM3NEEzQUYxNTEyCi06MTBENzgwMDBFOENGQjkyQkU0ODc3RTAyNEVDRTI5MjE0REMyN0VEQTQ2Ci06MTBENzkwMDBCOUQwNkZEM0NEOTU5NUE4MTdCQTA4RkE0QjQyN0Y5QUE2Ci06MTBEN0EwMDBGMTZGOUQ2MkI0RjcwOEU5QzJGNThDRUMzMkRBRTk5NEM2Ci06MTBEN0IwMDA4RTUxOUZGN0EzRTM5QjIzNzQxQ0FGOEY0QjA4RkQxMzdGCi06MTBEN0MwMDBFOEI0QzQ3QkMwQ0ZBMEZFMDc4RTM1ODAxQzc5ODBFQjA3Ci06MTBEN0QwMDAyNTQxRDdFMjc5MDE4OTFENjdCODMyM0ZFMkNGNjZDQTk5Ci06MTBEN0UwMDA4M0MzRkJDQUZDMThGRUFDMEJGODYzMDRGMkNCN0NDMDBECi06MTBEN0YwMDA4NzlCRjQ2MUZCRjA5QjhERkNEMkI4RjM5MzdEQzNFODZCCi06MTBEODAwMDBGQzlEQTVFQTA0QzA4RkY4N0UwM0M3MzdBNUUzQzU0ODkxCi06MTBEODEwMDBDNzFCRkJGNjgxNUUxQjdFMzNBM0UzNkJDMUQ2NDg4RjJCCi06MTBEODIwMDBEMkUzNEQxRTZEMjk3QzQ3RDA5OTc5M0Q0QkY4N0FEQUM5Ci06MTBEODMwMDA3MzdERDdDMjc4NTc2Q0VDN0VERTgxRUZGOUFFNDczRTQwCi06MTBEODQwMDBEQjE4MEEzQTQ4MTRCRUMzMzk3Q0UzNkU4OUUwRDkwRDZGCi06MTBEODUwMDBGMjYzNTY4REY3NzlEMENGM0U4RjdCM0E5NDMzRDVCRUE1Ci06MTBEODYwMDAzNjMwMkRFNkQ2Q0IwNkJCQ0Y4QzVGNEE1RkFENDg1RjI2Ci06MTBEODcwMDBDNDM3NEQ5MkMwOUFFREI2QTJGRTFDODA2RUEyN0FEMzM4Ci06MTBEODgwMDAyRkU4RkVFNjUzQzhFRDNCNjJFMUUxNzRDNzNGOTlFQjM4Ci06MTBEODkwMDBCQjFCREU0RkE5RjYxMUU0RDNEMzlERDc2OUY2MTM3MUY0Ci06MTBEOEEwMDBCM0E4MUQxQkIwRUJFRDU4NDFGNzFERURCM0QwNEYxNkRCCi06MTBEOEIwMDA3ODEwQ0Y1N0I1Q0ZBQUNFMDMzQTc3MkFERTU4RkU0RjVECi06MTBEOEMwMDA0NERGNzAzQUJGOUZEM0Y5N0E2RTdGNzU3MUZCRUJGNjM4Ci06MTBEOEQwMDAxNjE1RTU3QjY3OEIwN0NCOEUxNjJGOEY4Nzk2NjNCOTVFCi06MTBEOEUwMDBBQTQ1QzM3RUYyOUE0RjJCRDA3RkJGOTk2MDVDNkI2NUNGCi06MTBEOEYwMDA0Mjg5MTQ4QkFFRjJGQzQ2N0I3Rjc4QjMxMUVGQTlENTM5Ci06MTBEOTAwMDA0NkZGM0I1OTZGMkZEMzdGNDlFNUY5ODZGNjQ0RUY2ODEwCi06MTBEOTEwMDA0M0ZCNjlDNDhCMEYwMEREREJEMjJBMERGRDQ4RjgxM0YxCi06MTBEOTIwMDA4MzdEMkJFMDM4NUQ5RTg3RjE2MjBBNEZCNEFCODUzRDY1Ci06MTBEOTMwMDAyQkRBMDlBOUMzNzhBRUQ1RTQ2Nzc2OUFFQ0Q4MEU4MEM1Ci06MTBEOTQwMDAyM0MyOTdDMUIxMEJFMDg4RjAyREU3RjBBQzY2N0UxM0RGCi06MTBEOTUwMDBGNzdCRTI4NURGNTNCNDdFQ0U3QzhDOEIxMDk0NTcyQjAzCi06MTBEOTYwMDA3MjZDQTg5RjNCRjI5OEJEREQ4RjdFMzI3NUYyOTNGMjA4Ci06MTBEOTcwMDBGQ0VBMzU0QzlGMEI3QkZDRjk5QzU3QUFDMUFFREQ5MkFCCi06MTBEOTgwMDA2OTQxMzlCOTI1NkQ4RjY3MkJENkUzQkQ0QzlGRkFCQjMyCi06MTBEOTkwMDAzQzE0N0Y1NjBGOEY1NzUzOEFDREEyRUI0REU0N0NCM0Q2Ci06MTBEOUEwMDBEQTRBMzBGRUREOTFFRUY0NDIxQzJDRDFCM0E4MDZGQjFFCi06MTBEOUIwMDA5OUJFNEJDOENGODlERUZGMjNFRkQ1MUJFQzBFQTI1Q0NFCi06MTBEOUMwMDA2MzU4Njc2NEZFQTUzNjM2OEU0NDI0MTgyN0E1RDg2NkFBCi06MTBEOUQwMDBDMDlGOURFOEVBNzkzMDVGNUIxNDhGNzlCMDVFOEUyNzM3Ci06MTBEOUUwMDA5MzlEMjNFMjE0NjYzQ0I5NkI4Q0ZBNjY3NTExN0JCRjdDCi06MTBEOUYwMDAzN0U3MDFDNEJCMTlCRUFFMkEyM0ZENzY3MEJBNjg0QjY3Ci06MTBEQTAwMDBERjgyN0M2OEVFNkYxRTlGNEM4OTM3Rjg3RjFEOUVDMUI4Ci06MTBEQTEwMDBFMzI0QzI5RjE2RkRDMDhGNzZDN0U4NkZGNkEzQ0Y4NkJBCi06MTBEQTIwMDBCRkVFQzZFRjE5RjU1RDBDN0Y3REQyMDg1RDNDNDlDMEE1Ci06MTBEQTMwMDAzQjgyMDcxMTVGRTQ3RTk4ODg1QjhCRjExNEMyQzZDM0ZBCi06MTBEQTQwMDAzQUM2QjdGRDI4RkY3RTk5RTA0MjNGQjJDMDY5MEI4MDFECi06MTBEQTUwMDAyQzJDQTBGMzAwM0E2RUZCNTU0MjYwMjVBREFGNEI5OERECi06MTBEQTYwMDBEOTk3NDRFQjA1REI2NDE1REI5REJFQTExMDY3RUVEREE1Ci06MTBEQTcwMDAzMDYzNjg5ODdFRjcxRUE5RUVBMjExQkEzOERDQjZFNENFCi06MTBEQTgwMDAxQjMyOTkzREEwQkMxM0Y2MDA5MzRCRThFN0ZBRDc0RDQzCi06MTBEQTkwMDAwQzY5NjA4RjE3MTFFRjc2MDI1RTMwNkIxN0Y0NDRGNDU3Ci06MTBEQUEwMDA3NUI5N0ZGREIzMTE0Q0VGNjZDRTI1Q0JCQTYzRTA3RjJECi06MTBEQUIwMDAwRDZGOEZDQTcxNUYzQ0NBNkIyRUM3MEIzOEJDQjY3NzJGCi06MTBEQUMwMDBDRDhBRDdDQjcxRERGM0E0NTg3NDc1QjZFNDc3MUJDODQzCi06MTBEQUQwMDBFRjUxRjA5RDE3MzVENERCQTU4NENCRUY0N0M4Rjc1MTQ0Ci06MTBEQUUwMDA3RTJGQ0JBQjVCM0RBMjJDQzY3RTlGMTI0NkY5M0Q1MUVCCi06MTBEQUYwMDBENURBMDFFRkU5RTBFRjAxNUU3RTRBRjExMjYzMURDRjU2Ci06MTBEQjAwMDA4RTYwRjZDREY3MTUyRjQyQUY2RUVGN0E5Q0UxQTU1OEU3Ci06MTBEQjEwMDBFMEU1NzYxMkNCRkZGRDFFRTBFNTY5ODA3QjNGQkQ0QTY0Ci06MTBEQjIwMDBDMkI4MEZGQjQ1QjZGNjBDQjQzRkE1NkFCQjAwN0YxMTI3Ci06MTBEQjMwMDBGQzVDMTY5QjZGRkVGOTFERTNFNzdFRUVCN0FFRTdGOERGCi06MTBEQjQwMDBFOUUyRjFGMURCMzk3RTNBQjlCRUVFRTBGODY5RTdGQUQ1Ci06MTBEQjUwMDBGQTU2QzA0RkRDOTlGM0NERjA2NjIzN0U1MkFCRTM0RDBECi06MTBEQjYwMDBGODMwRTIyN0E5REM4ODlGNDRBRjExM0YwOTlFRDEyNkY3Ci06MTBEQjcwMDA3QzE4RjE5MzVFQTAyMkZDRTIzMjhENzhFQUM3MzdBN0M5Ci06MTBEQjgwMDBGMDU3RDI2MDlDMTg3NjcyNzY1REE4MDJGNkI4ODZDRTAxCi06MTBEQjkwMDBFOUVFQjVDMjIwQkVBRTBBMjhDNTdBRUYzNUY5QTVBMkQ2Ci06MTBEQkEwMDA0QzJGNjA3OENEOUMxNjFCRUYxNkRFMUVDOEQ3QTQwMjQyCi06MTBEQkIwMDAzRDlERkMyMDM2MUZEQjc5RkY2M0FBMTY2N0U4N0Y1MTg1Ci06MTBEQkMwMDBFQ0ZFMkVERUZGRjVFMTVBQTJCRTNGRkRCOTRCMUVDNEFFCi06MTBEQkQwMDA1RjMwQUYzRjQxRDJEMjBCNzAxREVBQ0UzMEM1RkRCNkVCCi06MTBEQkUwMDAxNTZDMUY3MjlCNDNFRDg2RkQ3Q0ZGMEFBNzc3QkI4QUVECi06MTBEQkYwMDAyM0Y5RUNFMDFGRjE3MTg4M0YwOUM3Q0RFNTlGMTlFRUNECi06MTBEQzAwMDBEQ0ZGMTVFQ0ZCRTUyREM4MUU3QTM1NkRDRjVCOUU3OUU4Ci06MTBEQzEwMDBBNDhFOTZBMzBCNDZFMDNDRjNFQkJEN0IwMENFQjI2QjJCCi06MTBEQzIwMDBDRTUwQjY3RjNDQ0ZGREZFMTg0QTZBQzE1NEU5MUI3MDQ2Ci06MTBEQzMwMDBCOEREQjFGN0VENDUyOUY0Mjk5NTgzNjgwN0QyODkwNDQ5Ci06MTBEQzQwMDBCNjUzM0E4RDUzODg5Mjk4MDJFQkQ1NzA1RDU2QjA2MzA3Ci06MTBEQzUwMDA2NTU4NkYxN0Q2RTM0OTM3OTY0RTEyNjJGQkQ3REMxRjIzCi06MTBEQzYwMDAzREFGMjAwRkM3NzMxMzM3RkFBQjI5QzQ4QkE1RTA2MzEwCi06MTBEQzcwMDA3QjFBNTFEMjI3RTBGODZENzExMzA4MkFGQ0YzQzA1RkJDCi06MTBEQzgwMDA3NTY2NkZFRTAwOUY0NkEzNTA5ODg0QUM4MkYwOTBFRUNDCi06MTBEQzkwMDBEQTg3RUIyNzFFQTJCMjc4REJDRDZFQ0M0RkY4MzM1RDZFCi06MTBEQ0EwMDBERjk4RDM1RkRGRTlGNkZCRDJFMTJBMjE0OTg0MzREQjM4Ci06MTBEQ0IwMDA1OUY5OEI3OEQ3MTYyOEJGNzRFNDA2MjA2OEE1OERBODdCCi06MTBEQ0MwMDBGQjMxRTBENTVGNDlEMEZFRjBCRjk1MTA2OEM1QzkyRTg1Ci06MTBEQ0QwMDAzQjg3RjkwN0E3M0RDRUJDQjMzNENFQ0ZDRUQyMzg4RDJCCi06MTBEQ0UwMDAwNUU5QTcxRUU3MzZGODc1MzJFQzYzRkE5NjQzRkZCNkVFCi06MTBEQ0YwMDBFNDQ5Njg3NzhBRDIwQ0Q3N0QxRUVEMDY5ODlGNjI3RjMzCi06MTBERDAwMDAyOUY3QkRENEE4RERFNjdDNTM0MkJCQUQ0RDBBMTI4ODhECi06MTBERDEwMDA1M0ZBREY5NkQwQkUyMkM1MEM0RjRFOTU3OEYyQzY0NTE5Ci06MTBERDIwMDBDNzcxN0E5NzBENjdGMTJFMTZFRjU5RjFGNzVGOEMwMkU0Ci06MTBERDMwMDBGQkZCOTcwOTMzQzM0OUY0RkRBRDA3QTk5RDA3NzkzNDZGCi06MTBERDQwMDBEM0JDQUZENzUzN0E0QTRGQjU3OUI3NTBGQTQ5RTU3RTdECi06MTBERDUwMDA3MkRDREE0OTA3RUFFOUFGOUY4QzYyRkNCREEzNjVCRkJDCi06MTBERDYwMDBCQjhEMEFBNDQ0QzU3QkUxMDRGQTlFOTNFRkRGMTJCOTkwCi06MTBERDcwMDAyNjBDNzY2M0UyMjQ0NTg1M0Q4RTIyMzk1ODBERjMyNTI1Ci06MTBERDgwMDA0RDE2MDI3QzcxNEY4MzcxM0ZCN0IzQjAwOEUxMjJFQUIwCi06MTBERDkwMDBDM0Y4N0UyRTI5NTVGQTIyNzkzNkQ0OEVERjU4QzBGMzg3Ci06MTBEREEwMDA2QTVDQzQwNTc2QTFGMjZGMkQyOTU2REU4MzI4QzVGQzc2Ci06MTBEREIwMDA0QUQzQThERTRBODJCODIwRTUxNDVBOTY3NjA2MzFGOThECi06MTBEREMwMDBBM0QyMUJCNDgzMURCQjIxNDBGQzM2MEFBNzA3RTdGQjg3Ci06MTBEREQwMDBBRTgxRjEzQUNCN0QwOTYwOTc2RjM4MzRFQkEyQjE3NDE0Ci06MTBEREUwMDBERUExQjBFMjA1MTAwNDQ3QTVFMEJBNDM5QUJDMzY4MTMzCi06MTBEREYwMDAzRURGRjlBNkM1MERFQkRCQ0FERkVGRjQ0OUM4RkZGNzNDCi06MTBERTAwMDBDQzIzMDEzRjg1QzdENjg2M0Q3NjE5RUNERTkwODU4QzA0Ci06MTBERTEwMDA0NDNCOTczQTVDOTNCODI4NTQyMTVFQ0JGOEZFOTY1MTY4Ci06MTBERTIwMDBFOUY4QjAyN0I0M0MxOUUwQjIyRUUxRkM5MDQ2QzdBRjQ4Ci06MTBERTMwMDBBRDY2NzFFNzE5NzJGNkYzMzA2RUE4RDM4NkY4NDlFNzNDCi06MTBERTQwMDBGOTQ3MTJBOTQ1RkIzOTY1OUVDRTVFQTZGRjEyM0I5OUE0Ci06MTBERTUwMDA1RjE5QkE4RTYwREU1MzUyOTlEM0VCQTdERjdCMjJDQ0Q5Ci06MTBERTYwMDBGNjhERUVBOTY2NzE2NzE3MDlFMkY3NjdDOEJCMUMxNjQ1Ci06MTBERTcwMDBGQUJDQTc1QTcxMDMzRDI1OTlFQzczMjc4QzQ3NDlBRTJDCi06MTBERTgwMDA2NzIzMUJDRjM1OUU4RDk3NjhDQTgzQjI4Qjc5QjlFOTFBCi06MTBERTkwMDBCQzI4RkVFNDQ0MDVGMUVDQUUzNkU2NEZCOTRDRUYzOTUwCi06MTBERUEwMDA0RERGN0I1OUUwMzk5QjE0MDI5RTRGRjg2RTk4RjgxMkIzCi06MTBERUIwMDBCNjdBRDU1OEY5MTM5RDJEMjQ1NEE1Q0JCNzcwMEUxMDAyCi06MTBERUMwMDAzRkZDQjI5MEY5MDlCNkFDQkQ3Njk4RDcwOURGMkI2OTUzCi06MTBERUQwMDAxMEVFN0FFMTVGRkJERUJCMDNDQTdGRkY1NzRGMTM1RDk1Ci06MTBERUUwMDBENzVGQkYzQUJDRUQ1MTgwNjNGMzZEMkYyMjFENzJCRjI3Ci06MTBERUYwMDA2QTA4NEM4MUNFRTdGOTVBMUJDMkIxNEM2M0YxMDE1MjVBCi06MTBERjAwMDBEQUJCRDc1QThBRURCOEFGQjU3NjhGMDNEQjg3OTU5MzI2Ci06MTBERjEwMDA4MDgzQzI3Mzk4QTI2NUZEMENGODM1MjQ3QjU3QTgzMDI2Ci06MTBERjIwMDA4OEU2Q0M5QTQ0RDg1NjE1QURBRkJEOTIxMjBFOTUwRjI3Ci06MTBERjMwMDBFOUYzMzREOTVGMENGMTkwMTc0ODIyQzVGNzA2NEQ1MjJBCi06MTBERjQwMDA1OUZFOUJGNDNDRjA1MzRFOTU4NDdFNThDRTIxOUYwMzlFCi06MTBERjUwMDBFOEUxQzQ2QzBCRTZCRkFDQThCREY0QzI5MTc0RkNGQjU1Ci06MTBERjYwMDAyQTE0OEMzNzU0NTc1NTVDMEVFREMzMEUzMTdBNzE1RDBGCi06MTBERjcwMDBDN0YwNDdFMTE0QUNBMkZDMzBFMjEwOEIyNzk0OTJCMEJBCi06MTBERjgwMDAzNzQ4REI4Nzc5ODkzNTBERjRDNzNDMEE2MDk4NUYyN0VECi06MTBERjkwMDBDNzBGOEYwRjk0OTY4NkZDMDBENDQ0QUYxMThGNkUxMzc5Ci06MTBERkEwMDAxRUNENzg3NThEQTQ3ODA0RkQ1MjQ0OEE5ODVGQzdFQzI1Ci06MTBERkIwMDBDNzVBREU2NzQzRDU0NEY0NUZFRjUxODlERjNBQUUzRjdECi06MTBERkMwMDBCRTVFQTRGNkEzNDZFREJGMTBCNTFGQTFGQzFCQjUxRjk2Ci06MTBERkQwMDBBMUVDQTFGNjIzOTQ4OTVBQzU0NUE1NzRCRUExNzQzQTUzCi06MTBERkUwMDAyRUYwNUY0REQ5NEFEODFGQjg2RkVBRDUzN0ZEOTM5NjBBCi06MTBERkYwMDA2NTdDOUY4RDcyNkE0QTI1RkRDRTJDRTA2MjU2NUZBRjJDCi06MTBFMDAwMDA1MTlCRTRBNTUyRDk1MDVGOUJBNjg4N0QzQzNGRThENDQ0Ci06MTBFMDEwMDBDNDJDMEJERkU3OTk3MUE3NDZFQjlEOTkwQURGRDc2MzA0Ci06MTBFMDIwMDBGNTExQzVDNDUwRUZBOUIxMThFQUU3RUREMThEM0YwNTUwCi06MTBFMDMwMDBGMDEzODdGNTA5MjM3N0FFRjcxNzQ0REJFRjI4QTQ3NUIzCi06MTBFMDQwMDBEQTdFODBEQjczQjU0QjJEQkUyRDMxRTg3N0Q5NDg0NjlCCi06MTBFMDUwMDBCRkNBQkY4OTVGQTJGOEZBQUM4MEEwOUYyRTVCMzQ5NDQwCi06MTBFMDYwMDBERkE0NTA1MTQxQkVGNkQ3Q0I1NDBFRUFGREVCMDIyQTk1Ci06MTBFMDcwMDA1Nzc1RjE5MUMzODUzQ0FFRUVBQjYwNzEzNjEyRkRGOTc4Ci06MTBFMDgwMDA3QTEyQ0ZCMzIyRjBCQzMzMDQ3NkM0QURBRjVFRTkwRDkzCi06MTBFMDkwMDA5MjgxRTVBRTM1NTMzOUEyQTc5MzhCMDUxRDhDMjQyM0JECi06MTBFMEEwMDBEMTlGMjc1MzBFNTQwMDlENzU0RDU0ODAxRTRBMzkxRjMxCi06MTBFMEIwMDAxMDZFQzc2MTg4OUZEMkNGNTM5RkRFRkQxNzREMDUzRjdECi06MTBFMEMwMDBBREREREQzNjEyRjM3RTJFMUZBOUNCOTM1OTk1QkU2OEM4Ci06MTBFMEQwMDAyMkU4MzM5MUY3NDM0ODk1RkI3REJBMkVDOTdGQTkwNTA1Ci06MTBFMEUwMDBFQ0I2ODFFRDE0ODVCQ0FGODM0NzZGRUQ4QzI0RDAwMzczCi06MTBFMEYwMDA0RTJFQzdDREZENTdCNUVDN0MwNUJFQkZCQUE1MUI0QjU4Ci06MTBFMTAwMDA2NzlBMEY4NThDNURGMTYzRkM2NjlGQTdBRTExRTY2NThCCi06MTBFMTEwMDBDRkE2RUQzQTM5NkM0QkEzRUYxOUZDODA2QzY2NzcwOUZBCi06MTBFMTIwMDAzQ0I4MDlDNjgzQzRCRUM5ODZDRTA5RjE3MTE0MTg5REQ2Ci06MTBFMTMwMDA1NDVGODA3Q0RFMTA5QTg1NzkxNTlEREUwOTgzQzZBRjE5Ci06MTBFMTQwMDA0RUM1Mjc1QkFCNUUyMjY5MTQ4RTRGQkUzQUYzMkZCM0U4Ci06MTBFMTUwMDA2OTc5MTBGODhERUFDMTI3MzhERkU0OTQzRkY2REFCNTIzCi06MTBFMTYwMDAwNjdFMzk2QUUyOTdBMzI2N0UzOTdBMEE3RUI5RTA0RUE2Ci06MTBFMTcwMDA2OEVGQzk1NDBDRjUxQ0UwMTc1RDdENkI4NDVGNTgzRDVBCi06MTBFMTgwMDBDQTJGNDc5MTVGRUU3OUQ5ODZGNThEMjM4RjFBRjg2NUVFCi06MTBFMTkwMDA0NTIxQUQ2N0VCRjg2NUJBRUNEQjEyQzMwRTc4RTUzQkMxCi06MTBFMUEwMDBFMjk3NUY5RjI5QkZCQzcxNjZGQ0YyQzREOUUzOTczRjM5Ci06MTBFMUIwMDA4RTRDRkZFRUY4QzU3NzlBRkNFMkVCQ0YyRjg3NjA1RUJFCi06MTBFMUMwMDA2N0NBMkY5REVFMjBFNjAzNzZDRUI2NTQwNzYyRTBGQkM5Ci06MTBFMUQwMDA3QThFNkYxMUY3MkVFMzcxOEE2OUYzQjRDQkM3ODIzRDUzCi06MTBFMUUwMDBDQkYzRDY0NDNFNERFNzNDQTZCRjU3RDRDRTQwN0RCOUQ1Ci06MTBFMUYwMDBGNTIwRDM5NzQyM0Y5NzcxM0NGRThEQzczMUNBNDI0QzAwCi06MTBFMjAwMDA2RkE2OTc0QkY4RkU0QzREMEFBOEY0RDc0RTZBMTJBNDlECi06MTBFMjEwMDA4MkJFOUUyMjkxMkUxNTk2QkFBQzc2QTQxNEI1OUJFOEM4Ci06MTBFMjIwMDBGN0QwNkVCQUNGQ0JGMjY2QzkyMTY2RUZEOEU5N0Y0MDRFCi06MTBFMjMwMDA0RjE3OTc1QjBEN0E3NTg4RDlGRTMyRDVDNTNFQTZEOEEzCi06MTBFMjQwMDBCRkJDMEZGMjEyMjgzQ0JFMUVDOUVEMjY5M0JFMTU3MDRFCi06MTBFMjUwMDBEODcwQTgxMkVEOTBDRkIzNkQ4M0VFNTc3NUYyRjU0NkU2Ci06MTBFMjYwMDBFQ0E5NTI1RjQ1QUM3ODU4N0RBMTg0RjBCRUM5QTNDNTI2Ci06MTBFMjcwMDAxNzk2ODEzRUJFMEFGNUFFRDBFNzY2QkREQzUzRjU5MjM3Ci06MTBFMjgwMDA1MUNFRjhDN0E3NTYxNkVCRTQ4QzdGM0NFQUNEODg5Q0FDCi06MTBFMjkwMDBFMUY1MDFFNTBDMzkwN0U1NDY0NDJGRjM3QTQ0MkZGMzA1Ci06MTBFMkEwMDA3QTQ0MkZGMzdBNDRDRUMwRjhEOTUxQkQzQ0YyODFGMUMzCi06MTBFMkIwMDA3N0ZBNzU3QTdCMTlENEIzNEZBRDk3MTc3MDc5NzBCNjJBCi06MTBFMkMwMDBFNUNDMUZCOEJERkE1REU5RTVDQTQyNEUyRkZGQjk5QzA3Ci06MTBFMkQwMDBBOTI5RkMwRUU1NEMyREM4OTlBNDUzQ0I5OTVBOTAzMzJCCi06MTBFMkUwMDBDNTA2Mzk3MzU1RTFCN0QwQ0I4OTBEQkQ3RUQ4QkZCRjA4Ci06MTBFMkYwMDA2MjAwQkE3NzcwN0MzNzE1NjhEN0MwRjhBNEU2RjRGMkVDCi06MTBFMzAwMDBCNkNENzRENTVCRkJDMEFBMENBMDE3MkZGM0YzMDY3QTI5Ci06MTBFMzEwMDAzRkIxRjlGN0FGQjRFOUYyQTIxMzk1MTAzQjVGRDFGQzFFCi06MTBFMzIwMDAyNDNFOUZEQjcwMTBFMzY1QTc5QTZGN0QyMUMxRDJBQ0JDCi06MTBFMzMwMDA0NzdCNkJGN0Q5OTE2RUJEMTZEQzEzRkZCNkYzRTg5Q0YzCi06MTBFMzQwMDBDREY4RjI4REVENEZBRjA3M0VCQThGQzdGRENDNzZBRTVDCi06MTBFMzUwMDBDMEVCRTlEQTNGRTZFRjVFM0Y1MkM1NzFDRERGM0YxNTE2Ci06MTBFMzYwMDBERDUyM0FERDBDNzQ3QTIyRkJCQTMxRTBFN0M5ODk3N0Q1Ci06MTBFMzcwMDAyNTAwQkNCRTA3RkFGMEM5NkY0M0E3QUY4QzY0RjgzQzE4Ci06MTBFMzgwMDA4RDc1MDc2MUZDRUY2QURERkYwMTdGQkVGQzZERDZCREI4Ci06MTBFMzkwMDBBMDkwRDFENTY5QUNGQkJGQkY0QjdDRkYwN0ZFQzI2NzI1Ci06MTBFM0EwMDBERjY2RERDQjA0QkUwOTNCMkZFMzg2NUYyODlGQUNGRjExCi06MTBFM0IwMDA1N0UxREIxMEJGNThGRkVGRDE4RkMxM0FCQkJFQjI2RjQwCi06MTBFM0MwMDA4NkY4MDVGOUZBMUJEOUFEM0YzRjQ1RDhCOTk5NDRGRTA3Ci06MTBFM0QwMDA1RUEyOEY5RDg3NzE1N0VCQ0U0NzkxRTg3OTI5NUMwRjNDCi06MTBFM0UwMDBDNjM3MjJFRDA3NjI5RDk3RkJBRTRCQjA0N0RFQjEwRUZDCi06MTBFM0YwMDBEMjZFNjM3MTNCRjNGM0ZGMkU5MEQ4MzkzNkE5RDYwMTY0Ci06MTBFNDAwMDA3OUYxQkRCM0Y3NjBCRTQxRTdFQzA5Qjg2RjY1QjY1MzZCCi06MTBFNDEwMDBDNDdCM0QyRDFBQzY5MzNBNUI3QzU4REVERTUyMUQ4MkNBCi06MTBFNDIwMDBCOEM5OTMyRkJEMjU0MTNFNThFOTRCMERBOERGRDY0RTA0Ci06MTBFNDMwMDBGQUUxMzBDQ0UzOUI1QTFBMEZGNURCNEQ3NjhBOEJEQjgxCi06MTBFNDQwMDAyOURFNTFBRkRGQTlGNzVGOUVGQzREMTNDQTQxMTE4NzRBCi06MTBFNDUwMDBCQTIzNjJCRkQwRjc1NDlEOUY0NEVCNDAwRTExM0YwOTkxCi06MTBFNDYwMDBFQTA2M0Y2OUQ5N0FCMDVGN0FDMDdFQTFGREE3OEU1QUNECi06MTBFNDcwMDBCNjNFRDY3N0Q2NUE0ODNERDgyRjZCMUIyQ0Q1QjFFQzdCCi06MTBFNDgwMDA5NzcwNDE2Q0ZCODVENjcxREZDRDkxNjgwRkFDQ0MwM0UyCi06MTBFNDkwMDA3Qjg2RDRFOUUzNkFBN0IyNUYxRTFFRjVEREZBNDk1NzExCi06MTBFNEEwMDA4QzNBM0I3RTUyODQ2RkI5REQzMkE0NDg1QjA4MjFEOTk3Ci06MTBFNEIwMDBCMzI1Mjc4NjlEQTY5QzE4RDY1RjRFREMzOEVBNUJGODBDCi06MTBFNEMwMDA0OUUxMDI5NjVGMkRFODZCQUJFQUM1Nzg3MjY3MzVDMTBBCi06MTBFNEQwMDBGODYzNjc2ODY1NkEwOUFEM0ZEMTYwMjExMkFENUZGRkRGCi06MTBFNEUwMDAzMjhCMEI2RjI4MjcwMTM4NDdCQjIxOUI2MDNERTQ2NUM5Ci06MTBFNEYwMDA3NDMwNDM3NkZFMDhFMkUwM0Q1NUQ0N0Y1MjIxNkVGNzNBCi06MTBFNTAwMDBFMzVBODBFREJBODQ5OUI3MzkyOEJERDQ5NjJCMDRGQzIwCi06MTBFNTEwMDBBNjE5RjIxNEZDNEU0ODYzRjlBMUI1NEVGMkEzMzhGMEU3Ci06MTBFNTIwMDBBQkE2MkE2NEU1MTlDNEFEMTNFNTYyODk3MjI0RTU0RkYwCi06MTBFNTMwMDAzNTE5Rjg3NkEwNzhCNDM5RkU0Q0U0MTdCQzgwMkY3M0Y3Ci06MTBFNTQwMDAxQ0ZBNENFM0NGREIwNTVEN0RGQkY4MzNGMkRGOTcwRjYwCi06MTBFNTUwMDAzNENEODI3OEVFQTlFODcxQzEyODE1RjU5OTU5NEY5OTAzCi06MTBFNTYwMDBGOTU4RDBEMzQwRjRFNzA0M0I2OUEyQUVDRUNGRTE4NkEwCi06MTBFNTcwMDBGOTNFQjUxM0VDQTQ4OTUxQkFFOEFEOUQ5NDE0MkJGRjc0Ci06MTBFNTgwMDA0QTk0MDlDRDdGNzg0NTdGMUUyRjQxRTlDNkYxMTI5QTQyCi06MTBFNTkwMDA3N0UxRjNCQjIwNkYwMEQ2QTc3ODUxOUUzRTU4NDlFNTNFCi06MTBFNUEwMDA3MDhDRjlFRDZFNTk3NjA4RTRFN0FFOTY2NjJDMkY1MDI0Ci06MTBFNUIwMDBGQUU0MTREQUZGRTkxNkZGMjE4MERCQ0U5Njc2MkM5RjcxCi06MTBFNUMwMDA2Q0U5QzJGNjlFOTY4RDU4REVEMTEyQzA3MjZEQ0IwRUVDCi06MTBFNUQwMDAyQzZGNkJFOUM2RjJDMTdDRjY5RDI5NEExMEM3QjlFMEUxCi06MTBFNUUwMDAyNDFENUY0NzQ3NTNGQkU4Nzc3NEY4M0VFRjQzQkZBMTE0Ci06MTBFNUYwMDA3RDcyQjhEREQwN0VDRUUxMkU0M0JEMkNCNEQxRDBERjBDCi06MTBFNjAwMDAzRDI1NjA2ODZGMkFBODNCMDY3Q0U5MkFERDYxNzhFRTJCCi06MTBFNjEwMDAyQ0VFMzZCQzc3QkE3RUMxRDlFRTk3NkI3RjA0QjZDOUIzCi06MTBFNjIwMDA0OTMyOUNCQkEwQUZDODcwNkU4OEYyRjE5MDY2MkE1RTNBCi06MTBFNjMwMDA2OUZERkU0NDFFRTdFODY2RkJFNDk5MjRGMjgzNzQwOTUxCi06MTBFNjQwMDBBOTY0NjAxRkY0MjZCMjNDQzhENjJDRjY3RUVCOERBQ0Q0Ci06MTBFNjUwMDA3RTdGMEVEQjNGMTI3OTlBQjIzRDQyRDc0NENBODhFRUU0Ci06MTBFNjYwMDBFN0RGOUZDOENGMjkxNUIwQkNDOERDRTIwMDQ0MjQ0OENFCi06MTBFNjcwMDAyRTI0QThDMTdFNDgyOURCMjcxM0ZCREVBRDNDRUU3MEJCCi06MTBFNjgwMDBCRjk1RUM5NEE4M0REOUFBQjBGOUI3NkEyNEIwODJGNjM4Ci06MTBFNjkwMDA2QjJENjZGNTdCQUE0OEMwMDJGM0Q3QTgxNENGRDBFRDQ2Ci06MTBFNkEwMDA3MzM3RUZGQjRBMkE4OUVFOTc5M0QxMUFFRUQ3Qzg3Q0NECi06MTBFNkIwMDA5RjNEQjJFRkVENzg5N0UwQkUzRTg3RDdDQTg0OEYzMTk5Ci06MTBFNkMwMDA4RjM2QjlCOTRGMDJGRTFBRDJEQ0Q3MEJGM0JCRkYxNjU3Ci06MTBFNkQwMDA5QjFBQ0IxRkVBQkRFNThCMkNFMDlCNEQzNzdFOTEwNTQ1Ci06MTBFNkUwMDBDQ0JFMjk5MjNGRDNFN0QwRTdDRkU0NzJCODZDNkFDRUI0Ci06MTBFNkYwMDBDN0ZDODU0REY1MkUyRjg3QjNDNUQ0OEVGOTBDOUZENzU3Ci06MTBFNzAwMDBGM0ZCMDk4ODgyN0VEMTMwNzcxNEFFMDE5MTNGMjI0MzFBCi06MTBFNzEwMDBERTFENURGRjg4RThGOUQzRkYzNEJGNjY1M0YzNzI5NkMwCi06MTBFNzIwMDA1RjkzNEQ3ODdFQ0Q0Q0Y0MjcwNTFFMzY0MTM5QUVGRjAwCi06MTBFNzMwMDBCOURFRUYzQUJGRTY5NDc5MzVBNjNDMDcwM0ZENDJERDJBCi06MTBFNzQwMDA2RkE2NkYxNUYxMTJDN0U5NUJCQTk5RTU0NTY0OTlFOEMwCi06MTBFNzUwMDA0NkU0NUQwOEJBMTRGOTE5MjI1RjQzRTQ2RkQ4Nzg1RTg1Ci06MTBFNzYwMDAwN0ZEMkNDRjZCOEU0RDVGQjYzREM0MDNFN0RFNjQ0QkQ3Ci06MTBFNzcwMDBCQzc3NEJERUE5RjMwODlBM0RGOTVDMzkyQzFCQzdDNjYwCi06MTBFNzgwMDA2NUY5MDNGRjMzNEFGQjg1QTcyQzNBNkU5RTQ3QkI1MUMwCi06MTBFNzkwMDA1RjE3RTU1NkY4NzUzMjFEQzIxQkFFMDI3QkI1QTg1QzRCCi06MTBFN0EwMDA2Qjg1RjM3QzI5QTUwNENGRTk5NDk2NEI1ODE2MUQ2MjFFCi06MTBFN0IwMDBGNURCM0MzMjdFQUZDREMzRTI0REEyN0VCMUE2M0QwNzc0Ci06MTBFN0MwMDBFRjI3OTlERUJCMzhGMjlFMTVGQkZEREU2M0UxQTVDMkEzCi06MTBFN0QwMDBFNkNERjM5MDY3NzJGQTVFM0Q1OTY2RjlEMTU1MTI5MzEyCi06MTBFN0UwMDAxQkIwQTEzQTg5RUI0MzBBQkY4Qjg5RkI5MjAyNUREQzI3Ci06MTBFN0YwMDBGNUM3MUM1QkI3QjdCMEZDM0U5MTBGRkRCNzk3NjVDQzcyCi06MTBFODAwMDA4Nzc2OTZGQkE2QzFEOUIzQjI1MDI4MDhGQkVCQTVEQkVGCi06MTBFODEwMDA4ODNCNDU4NUY5ODUzNUUwQzcxNTM5NzdFRjgxN0M4OEQ4Ci06MTBFODIwMDAyNzJFNjQ3QkI2MTcxRjYyRjZDMjhGQ0JBRkM2RkI0NjlFCi06MTBFODMwMDA1QzVGQ0IxODhGNzU0RjQ5RjQwNkUwNDMzNTU2QTZGRjUxCi06MTBFODQwMDA0NTNFNzRCOUQxNUVBODM1RDkwQjE3OUZFMkZFOEYxNEVGCi06MTBFODUwMDBEMkU3MDczREY5ODhDNzE0OEZFNUY3ODAwQzI0QkZBM0UyCi06MTBFODYwMDBGNzgwMzBGOTUwQ0FDNzc0OTZCQjFEMTBCRjJFM0E2NEFBCi06MTBFODcwMDBDMUUzOUVGMjM2NERDNkYzQjE5RDJDQ0ZFMzg5OTA2Rjc0Ci06MTBFODgwMDBEMEYzQTgyRjcyMzg4NkI4OUNGODFCQ0Y5M0VDRTE3MkI2Ci06MTBFODkwMDBFMjc1MkUyNzBFODM5Q0EwRTUyQjNDNEZGMjEwQ0Y5MzAwCi06MTBFOEEwMDAzNDlGOTdEOEQxNTJGRDkyREVERTMxOTc0NTkyN0YxNjg0Ci06MTBFOEIwMDBFNjQxNkQ1NjA4OUVCRjFCRTBCRThGQTIwMDFEQzc5MEFCCi06MTBFOEMwMDBDN0I4MDJFOTY3NkZGMkREMTU0MDFDRUIzNTBCREE5NTJFCi06MTBFOEQwMDA1RDUzNDg1NjJDRkZBRUVCQzJDQTQxRjMwRjNCNUJFNkRCCi06MTBFOEUwMDBCQ0Q0MzY4OERGRThCNDUxN0YyNkQ2RkIxRTcxQUVBQkIwCi06MTBFOEYwMDAwQkNGNUJBNDk1NUIwOEU0NTU2NUQ5RkJEOEZFNDNBRjBECi06MTBFOTAwMDAwM0U5Nzk4OEQ3OEVGQkZCNjQ5RTkzQkNBQkNCNTNCOUVDCi06MTBFOTEwMDBEREQ3MzUwQkU2RkZFMDM2MDVDRkU3ODg3MTEzQkQ3NDEwCi06MTBFOTIwMDAzRTNBM0E0OTlCQjIyNzEzRTZERjM5MzU5ODA5RjY0QzRGCi06MTBFOTMwMDBEN0Y4N0QxQjBCMjA1RkU0QTA0QzgwMENDQ0YzQjIxNjAzCi06MTBFOTQwMDA3MTdGOTZBRjJCNEREMUE0NTg3OUVBMDNBREVCMDM4RkJECi06MTBFOTUwMDA2NEI4NjdDMjBDRkYwMUVEMEVDODA4MThGQ0JDOTVCMzgzCi06MTBFOTYwMDAyODQ2RkVFMjY5Q0MxM0VEREI2Rjc2NUMzQjFCQ0Y0RDk2Ci06MTBFOTcwMDA5RUU2RkQxNzA5OUMwRUIzMTYxMjA3RkFERDQwOEY4MzQxCi06MTBFOTgwMDBFMEQ5NjUwRDIxREVENjJFQjQ1NEM3M0E1RjVCNTRDNDdFCi06MTBFOTkwMDBGMEJEQjZGNDUzQjQ4QjQ5NzFFQzc5MjQ5NTlCRTk5NTlECi06MTBFOUEwMDBDREU3MEU4NThFNEZERkVCMkE4RDNERkVFNTFDNkY5NDgzCi06MTBFOUIwMDBBRTVGMDM3OUQ1NTU2RDQxQkIyMjA5MkU2MkMwRkMxQ0E4Ci06MTBFOUMwMDA2QTA3NDk0OEVGMjg5NzNFMkJCNTMxM0JDMTI0MkZGQUZGCi06MTBFOUQwMDA3REJGNTQ0NzRGRjlGREU1RDBGOTQ1NEU0MzdDRkY0NEQ4Ci06MTBFOUUwMDBGNkVDQTQ2MDBDM0M4QjUyQzA1MUM4QTFGRTcwMjQ3ODk4Ci06MTBFOUYwMDBGRUI1OEJDMzkxMTRDN0U2RUIyOEJFNTY4ODc4NTVERDZCCi06MTBFQTAwMDAyOUNFRUJDRDJFMkE4QjcxNEU2QzAwM0M5OEU5RTE4RTFECi06MTBFQTEwMDA4NTNFNUMxNzc5RUUzNUEyODJCRTJDQTVGQ0E4OEI0M0ZGCi06MTBFQTIwMDAwQzA0M0YzM0JDMTY3RUM3RjAzMkI3RkZBODg4Qzc0NzM3Ci06MTBFQTMwMDA0RTczOURBN0REOEZEQTQ1NkU5RDVEMEM4N0EyMTU1QTNBCi06MTBFQTQwMDA5RkNBRUIzRkY2NEJFMTdCQTg1Qzk1NzZGRDA5RUQ5RUY2Ci06MTBFQTUwMDBBOUJDRkMzMTk0NTQzRkVFOTI4MkVGQkU0MTVGOUUyMkVFCi06MTBFQTYwMDBBOTM5ODBCNDU5NEY4RjgyMDgxOUI5NTU1QTY2QjA3RkI5Ci06MTBFQTcwMDAzQTI0RUZFMTY3MzAyRUQ0OTcwQUZEQTY5MzNBODUyMTE4Ci06MTBFQTgwMDAzOTgwRUJGQTkzMTQ2RTA1ODU3NTI5RDE1NjQxRDk0ODIyCi06MTBFQTkwMDBCQTZDRjA1RTYzQ0Y5RjBFQzM3NzFBN0IxQzQxMTk4MjVDCi06MTBFQUEwMDA5MzNCQURDN0Y0NzFBMzZCRjRFNzQ3RjJFMDE2OEQ2RUFDCi06MTBFQUIwMDA1QjFFOURDRjkyMURDNjdERDIwNjEyQzJGMTk2NzYxQkJCCi06MTBFQUMwMDA5RjlCQ0Y4RjQ4MzIwNTBDNUM0RTEwQzk3RjlEODJGOTA5Ci06MTBFQUQwMDBCREM0QzFEQUUzNDc4QkYzRTg3RDg1RkFGQkNDRUEzOUE0Ci06MTBFQUUwMDBCQ0VBRURDRTIwREMyRjQ0MDJDNjc5OEE3QjczOUVBNzU4Ci06MTBFQUYwMDA3MkNDM0UwMUNGQzMzQzBDNzRGQzkxREJFRUI3NTA3QjczCi06MTBFQjAwMDAzOTIzQTVBRTExRTA3MTE1NTE2REFDNjQ3NjgzNTg5NzI5Ci06MTBFQjEwMDBCODg3NjY4MTczQjYwREUwQkJBMEREQkMwRUNEMDZGM0YxCi06MTBFQjIwMDBGOTU5RDdFMEVCMTM3OEZGNDcxMUMxNzVEQzVFQTQ2Mjk5Ci06MTBFQjMwMDBCOTM0QkU2NkJGMDZDREE1QTE1Q0ZEN0QxMDRENUMzRjFFCi06MTBFQjQwMDA5MDY1QTkwNkZFN0Q1MUQwMjNEMUU0RDM1OTdGN0ZCOENCCi06MTBFQjUwMDAxNjYwOUM0Q0MwNzU2MDNBMzVDNkM5NzZDMTIxRDc3NDIxCi06MTBFQjYwMDA4NERGQ0I3QUY4MTFBNUFFMDRDNjE1RUJGOTY3NTlFODM2Ci06MTBFQjcwMDA4MTIwRUNBQjI2QjI3QkEwREU0REE5N0IwM0ZBRTcxQzFCCi06MTBFQjgwMDAwRUJGMkZEMUE5MTNBNzVBMDhFQkZDNzhFNzQ3QUZDOEVGCi06MTBFQjkwMDBGOUQxRjUxMTEyQkUxQkYyQTNFQjc3Q0FFRTBFNThDRkQ2Ci06MTBFQkEwMDBDRUU3MEUwM0JEMEZCNDJFOTExRjRCRTkwMUUxNDZFN0ZFCi06MTBFQkIwMDBGNTIxRTgzN0YzQkM4RURFNDA3RTBBNzZDOTc0QjlEOEY5Ci06MTBFQkMwMDAxMDQ3Nzk4NkMzRjE5RTYyREZDN0YwNUVFOTRCRDkyRTBDCi06MTBFQkQwMDBCQzdGMjdCRjdCREY1MDNBOEZCRUVCMjVDQ0FCNEQ5MzdDCi06MTBFQkUwMDA0OTE1QzA0RkU0MjM3Q0VBNTREMENGNEU0QkYwQ0IyRUQ2Ci06MTBFQkYwMDA1QUVGQkI4QTc4QjdDMDM0QkNDQkJDNDAyQTcyNEVCMTQ2Ci06MTBFQzAwMDBCNzgzRDI0REM2RjVCMjBGRTRDOURGQUY1QjkwQkM4MENECi06MTBFQzEwMDA5NjE5ODkwQjkzNDdEMEYyODIzOEUyNzdEMEYxMzIyNEVCCi06MTBFQzIwMDA4QkFGMUI4MzUwRjM5MzJGQTFGM0ZDNDkxQzlEMjdBREExCi06MTBFQzMwMDBFN0REOTAxMDFDNDFGOUVEOEYzNjYyMDc3QTRENEJBODQ1Ci06MTBFQzQwMDA1QjM3MURCRTkzMkNFMzdDOEU1MDNCNTFBMTcyQUNFMjJFCi06MTBFQzUwMDBGMkNGMjZEQUU5Rjc4NjdFRUQ5QzAwRjNDOTZBOUU0NjdDCi06MTBFQzYwMDBERUE1QTAzQzVDQzRGOEU0RThDMzVGNEU4NDczRTBGMjI4Ci06MTBFQzcwMDAzNzRFMkY5RTMzRTdGNDk3MzY4MkMxQzM4Q0VGREQxQ0VECi06MTBFQzgwMDAxRTZGQzYzMzdGQTczMURENzYyQkM0REIzRkU2RkUwRjU4Ci06MTBFQzkwMDBEMTNDRTgyRjVDQzdGRDg1MzdFMzk5MUZGNDY2QTE4ODU2Ci06MTBFQ0EwMDAyRjA1RDNGNUY2NkRBMzQzNEJCQTBDOUMwNzZBMjc0MTk5Ci06MTBFQ0IwMDBCRUYzNjc2RTJEMjkxOUZBMTExRkYyRUQ3NURDNkZGRTk4Ci06MTBFQ0MwMDA5ODkwNkFBMEYzRUJENjRDMUI5MjQyREY0RjZGNjU3MEIxCi06MTBFQ0QwMDAzMENGNkZFQzY4QTY5RjFCNEU1MjgyRDZDNUNGMUE5NEQ4Ci06MTBFQ0UwMDBBMDBERTQ3N0MzNDk5QkUxRjlERkE5MURFREQ3OUQ1NzNFCi06MTBFQ0YwMDBGRkM5ODc4N0E2QzNGQ0FFMjRFMTU1RDBGRkNBRUIxMjNCCi06MTBFRDAwMDA1OEUwOUVGMzZCMEY5RkM3NDA3MDY5NEM1Njg4NDJFMUY0Ci06MTBFRDEwMDBEMTI4MTFERjYwRkQ5RUY5QjcxQzEzQkVCMzQ3MzNGQjRBCi06MTBFRDIwMDAyNTdENUFFQ0Y1NURDNEQ3Mzc2RDc1Q0QyRjgxQ0UxQTkwCi06MTBFRDMwMDA0MzU2QjRFNUFGRkI0M0M1OTBDMUVDRTdDNjkzRTc5MUZBCi06MTBFRDQwMDA4MDJFRkVEN0E4ODQxMTFFOEQyN0NGQzdFN0QzNTYxRjZDCi06MTBFRDUwMDBCMzAxRERDMzM4MkE3RDdFOUQ0MzFCMDJGMURBODFFMEQ5Ci06MTBFRDYwMDBCQzlCREI0MThEMjc5Mzg5M0Y1NUZGOUNGMTc3NzRGQzU5Ci06MTBFRDcwMDAzNDZDRkYyRDg3REI2RkY3NUJBQTYzRTU3NzM1OEY2NjExCi06MTBFRDgwMDA3MDE5OURBRUY4MjAxRjY4NEM5MDY4OUI2MzdDNTdGNDA3Ci06MTBFRDkwMDBDQjQ4MzFFRTVGOThFN0Q1NTMxOUJFMTJFNjdENEUxNThDCi06MTBFREEwMDBEMTYyN0Q2RjMxODdBMzk4NkY0RjRBNzg5MTBGRTlCMzk1Ci06MTBFREIwMDBBRjEwRUU5OTg4RDRERDdEQjlGQTdCMjRCNjcyRkNGNUVDCi06MTBFREMwMDBGQzMwOUMwQkUzN0Y3QzYxRUM3MzNCMDJDRjkzOTQ2NTNBCi06MTBFREQwMDA2ODJGQkY5MDUyRjczNEM4Qjc3OTk3RDEwQUE1OEYyMTExCi06MTBFREUwMDBGMzgyMTY3NjNFQzUzRjI4QkVBMzcwOTY0OTYwRTI2MDY2Ci06MTBFREYwMDA3MEI2NjFCQjE4RUZBMzE3MzkzRjUyM0YxQ0YyRDRBRjc2Ci06MTBFRTAwMDBFMkYyRkZBQTZENEIzMEVGNDlDOEE5OEYzNkNBMjhBNzk2Ci06MTBFRTEwMDAzRTQyREQ0MkNCODA4NEY2RUJGQzNBMEE2QjJBNTcxNjYxCi06MTBFRTIwMDA2RDlGQjYwRkQ0QzE1NTk5RDQwNjRENjFDRjZGODZCMjkwCi06MTBFRTMwMDBDRDZBODhGNzhCRUYyRDM4Q0NFQ0I3ODU5RDQ2M0Q1N0QyCi06MTBFRTQwMDA0RjNBM0YwMUZCRTBBMzE3OTkzQ0EwRkM2RDAzNzlCQzRFCi06MTBFRTUwMDBFODJFRTMzOEY1REIyRUZBMDBFNjU3NkZGMkNCMzNCODM1Ci06MTBFRTYwMDA3RTM2REI3OTlCNDdGM0Y4RkUyNDMyRTk0Q0ZDRjI0NjEwCi06MTBFRTcwMDBBMkVEMTg4RDdBQzEyN0MzM0NDQTE0RTMzRDVCQTI0Q0I2Ci06MTBFRTgwMDAyRjYxRjA1RkJFRkQ4NENEQTUwRTNDRUUxMTJBNDcwQTJFCi06MTBFRTkwMDBFOEI4QzdBODNGMEVFNTFGNDc2QkJGMUY0REYxNzBGQ0Q4Ci06MTBFRUEwMDAyMDgzQ0I4MUQxNzU0RkMxRjc4RTFGNjRFQkZGQjRFMTk2Ci06MTBFRUIwMDBEMzQ1NzA0RjBDOTlDM0VDODYzODM4N0M0MDdGOEQ5QkNFCi06MTBFRUMwMDA2QjBGQjREMkY1QUVBNjYyQ0EwMUU3ODJFMjk4M0QyMjhBCi06MTBFRUQwMDBFQzMwNTlCRTU2NzZEMUY2QzlGRjU4OTgwQ0VCNEM3QkY2Ci06MTBFRUUwMDBFODA3RDUzMDVFRkE0MzA5MUFDMEFEQTM0MjFCMEZGMjAyCi06MTBFRUYwMDBCRUEzRDZFOTg1RjMyQTlCMjkxOTk2RDNGN0VENzQxQzk2Ci06MTBFRjAwMDBEMDI3ODFERjRFREUwM0RCOTEwNURERUIyQUUxREUxNzQyCi06MTBFRjEwMDBGN0FFREVFMDMwQkFBRTc2MEJCQjI3QTNGRDdDRTI2RDI4Ci06MTBFRjIwMDAyNUQxRUYzNUVEQUE3RDBDRTY5NTNCOUJFQTA3MDlDRThFCi06MTBFRjMwMDBEMTZCRTNEREJBRjEwOUI3QUYxQTM5NEU4RTNGM0JFQTI4Ci06MTBFRjQwMDA4RUYzRTA1Q0MyN0UxOUNEQzc0RjFCRjJEMUFGMUY0RENGCi06MTBFRjUwMDAxODNEODlGQzdCRjgzNkQ4OTEwMjdFQzdBOEJFMjJCQTNDCi06MTBFRjYwMDAzQ0I1RDFERDUyRDA0QUQ3QjVCNEU3MzFCQzhGQTM2MUVGCi06MTBFRjcwMDA2NTMwNjMyRUU4REIwNzE1QTY0N0Y5RkNEMkZFOTg1NUVECi06MTBFRjgwMDBBOUJBQTJGQTc3QUVFNDQ2M0I1MkQ4Qzk5NzEzRjE1MzE3Ci06MTBFRjkwMDA4Q0YxQzIzOTlDMEYyRUU3RjZGMURDMDQwNkU3RjlDNEM4Ci06MTBFRkEwMDA5QjBCRUY1RDYxMjcyRTBCODVEOURDNjlERDY1Q0I0MEJFCi06MTBFRkIwMDBFRjJFQjEyNjgzN0QwMzZCODk4NTc3NTE5QUVEMjBDMUIxCi06MTBFRkMwMDA4NzhEMEYyNEZBMjFFRUZBQjFENDU3MDg4MzFDQjEzMjkxCi06MTBFRkQwMDAzRUVCN0IzNjJFQjAyNUFGRkYzOEQ2MzFDQ0FGNkYyQzUxCi06MTBFRkUwMDBFNDc2NUQwMUQxRTBGQzQwRTNFRTUxNzgxRTJDMkU5RUNDCi06MTBFRkYwMDBFMjcxMDJDQTNGM0JFMEY1NzlEMEZGNzREREQ3M0NFMzE0Ci06MTBGMDAwMDAwOEUyQjkzMDcxNUY5OTlCRjgxM0U5Nzc5QTc2MEZEOUM2Ci06MTBGMDEwMDAwMjc2NDZEQTA4NkRGQzcyM0FERUM3RDY3MDJFQ0EwQjRECi06MTBGMDIwMDAyQURGMjRBQTVCNzNDN0FDQjk0NEExN0NENTM4OTREQTMzCi06MTBGMDMwMDA1REI0N0VEMTQzNzdCMzdBN0U3ODkxODVENkFGN0RFODkzCi06MTBGMDQwMDBEMTRCMTQ0QTlGOERBM0MzRUY0M0ZEOTY4NzlFNjZGNTZGCi06MTBGMDUwMDAwOUUxNDUzMkFENkY3QzY4M0ZFQjBGN0JEODk0QjBCNkM5Ci06MTBGMDYwMDAzRjc0RTAxMkYwRkY4RjI0MzNGQjgxNzhDMzU3MDJGRDE5Ci06MTBGMDcwMDAzNDNFM0RDQUQyQTE1QkVGQkEzMTRDM0UxRTcxQjA3RTI4Ci06MTBGMDgwMDA0N0YyQzg0RjY3MDFCQzNERTFDMjU5QkE3REI5RUJDNzMxCi06MTBGMDkwMDAwODNCOTZEOTcxNjI5REUyM0Q5MjE5N0JGQ0IxNjM5ODYxCi06MTBGMEEwMDAxRUJENjYxQUVCNzc0MTAyNjk3N0IwRjM3NTdFQjBDNzczCi06MTBGMEIwMDBGNkVFMUE4NTcwNDkxOTkzQzJFMTQ1QzcyOThEOEUyMzUyCi06MTBGMEMwMDBFMDI4QzYxM0RGNUQwQzdBMURFNEJFOTVDQTdEOUQ5Q0M5Ci06MTBGMEQwMDAzOTk3RTM4RDdFQTcwREJGNTNBQzhEODc3QkFDMUE2NzQ0Ci06MTBGMEUwMDA2NThGMDdCQzUxN0MyOTFDNUY4QTFEMkY1N0RCQ0NFNjNFCi06MTBGMEYwMDA0N0M3NEQyRTQxM0QzMzExRTJDQTdCQkZBNkZERjNBMkE3Ci06MTBGMTAwMDBGMzM2RDNDNzhDMzE0QzFFNUREM0NBQ0VGN0Y3MjU4RkFCCi06MTBGMTEwMDA0MDNBQkEyMDgxRDk4QkE0OTRDMjhGQ0FCMzhEMUM2RTk5Ci06MTBGMTIwMDBFQkM2MjQzMzNGMzI4Mjg3MjExMjhFREZDQUUxOTdDREFFCi06MTBGMTMwMDBGQTlGRTk3QUU3RjA3OTlDRURGNUVBRjBBNDQxN0M2NTY1Ci06MTBGMTQwMDBFRkNFMjJDNEQzQzYwODFEQUMzMzhDNzM2NDg1RTlCREYxCi06MTBGMTUwMDA3MkNBNzgzMDhGOTQxMUY4REU2QTA3QjFFMzczQjIyNTcyCi06MTBGMTYwMDBGMjVFMUU3REVGODI2OTdEMTM4MTFGOTY3MjdCOThGODk3Ci06MTBGMTcwMDBDRkM3QkM4NjA2MkUyRDk2QjY4NzZDMTA5NzVFREFDRDZCCi06MTBGMTgwMDBFMkU0QTQ4MEFFMEZFODYzNTY0RDI5NUY5RjlCQUZDRkFBCi06MTBGMTkwMDBDREQ2MTczMEQwMjczOUQ0OTczQjNCQjEzRkRENDZFMDgxCi06MTBGMUEwMDAxRTE5QUY3ODAyMUZDRkMwQ0ZCMUM2MDNCRTE4MDgxRjBCCi06MTBGMUIwMDAxRDY3MUIxRjYyOUUyNjc4NDZFMDZDOUE5RjgwMjdGMDkxCi06MTBGMUMwMDAzMUJFNTc2Q0U0MjczMUNGNUJDNjQ0RTJCMTQ2N0VDRUY4Ci06MTBGMUQwMDBGQjk2REZBQjYwRUYyREJEOTFFMjExRUMxRkQ1NDhDRjYwCi06MTBGMUUwMDA0QjdCRjIyQ0YzOEJBM0VGQjU3N0FGRjA4MTlDNEY5MDY0Ci06MTBGMUYwMDA1NDE2MDdFRkE5RjU4M0ZFNkJEQTU1ODE3MUFBQTU0RjY2Ci06MTBGMjAwMDAzREZDQTQ5RkJFQkZGOEQxMEQyRTQ4QUVGQTQ4RTlDQTE2Ci06MTBGMjEwMDAwMDNCQjg2MUZCMkExN0RDMzNGN0ExRTI3NzgxRkNGQ0U1Ci06MTBGMjIwMDAyODIwQzdDQzVCN0Y5QkNCMDE2MTc3MzU3MjdENzNFNDZGCi06MTBGMjMwMDBCN0I3Q0QwNDc4N0NCMUREOEFFNzBDOUI3NkM0MDVFM0QzCi06MTBGMjQwMDAzMDZFNzIwRERBNjNCNEZFMzZBQkFGRkUwNEZDRDhBNkE2Ci06MTBGMjUwMDA5RDQ2RkI2OUYxNkYzNjY0QTg0ODRGRkU2MTE2REMwNEQ5Ci06MTBGMjYwMDAwQjBFODNDREIwQzY2RDU2REM0RjY5M0MyNDdCRTk2NzNECi06MTBGMjcwMDA0ODEzRTlCQjE1RTY2NzdFMUZFNjcxOTJFMkJEQTk1QjA0Ci06MTBGMjgwMDBCRTBBRjJGQkNDRUQ1NDkyQTAzREQ2RDQ3MzFCREE2OUQyCi06MTBGMjkwMDA0RDNEMTc3RTAwNzY0NTkzMjk5RkEyN0UwMDNCRUNDNTJECi06MTBGMkEwMDAzMURDMEVFM0Y3QTQwQkY4OTA0MDNBREEzN0FEMEZGRUVECi06MTBGMkIwMDBCMkU0NkQzQUFGNjNEQkZFRTI5MjhBRjU3QTczMjVFMjNGCi06MTBGMkMwMDBFOUQzRUUwNTlCOUU1NjA3RDZBRjFGODM3RDEwQTc3RjFGCi06MTBGMkQwMDA4RkUxNTdERDI5QjE4REExNURBQzZDQjAwNjVEMTAxRkNCCi06MTBGMkUwMDA2OEQ4NkNGNTUyMEQ0QzFBMUVERUZBQzBBRkMxQkY3QzU3Ci06MTBGMkYwMDAyRENFMEJBOUE2NEIxRTdFRkU5NTczNjk3REM5NjNENkU0Ci06MTBGMzAwMDBCNDFBMzY3RDI3RUM3MzBCM0M0MUNFMDZEODI5MDIyRjY4Ci06MTBGMzEwMDA4QjdGRkZCQzBERTI5MEYwMUNFQzVFODE5RjI1OEZGNThBCi06MTBGMzIwMDBEQUUwOUM5RjE5OEVEM0JBN0I2RDk4MEY2QkM2NTNGN0FBCi06MTBGMzMwMDBEQjMzQzAwNDY5N0RGMDRCMUJEMEY3NDdCQjI1QkNGNzFFCi06MTBGMzQwMDBERUZDN0VGREU2RTc1RDQwODcwMDI3RjA0MzA1QkUyMjM4Ci06MTBGMzUwMDBGOEVCODdCN0UwQ0NBNzRCQjExRkM2NDM0RTg1QkZDN0JDCi06MTBGMzYwMDAwMTQ3NjU0OEU3OEYzQzBENzE5NEQ3RTNCQzAwODdGQUVECi06MTBGMzcwMDA0N0FFNzVDMTdBM0U1MDk2MzE3QUJGNkY1NTA2REM5NzFECi06MTBGMzgwMDA1NzZGRjU2N0I4QjE2NENGRUJFRkJGMUVFOUYwRUE4M0MyCi06MTBGMzkwMDBENzY3QjA3QjI0QjQyQzc2OEZBNjNGMEJENkY5QjM3QjBFCi06MTBGM0EwMDAyRkMxNzUyRTIyNzU0ODg3RjVGN0IxRjhDNkU3MEFBOTZGCi06MTBGM0IwMDA3RTJDMDZCRkNDMkQ2NkZDRjJDMTk2Mzg0ODBFMjIxRjZCCi06MTBGM0MwMDBDMDNFMDJFQzlCQkMyOEUzQjlGQjdFRjcyMjkxRTU1OEQ2Ci06MTBGM0QwMDBGRjlDQzcxN0M2MTU0N0VFRURCMzgzN0REN0M0N0IzNUI5Ci06MTBGM0UwMDA2RDVCMUQwMjNDMURDOUQxODY0MDNDOUZDMkMxQ0ZFMTZGCi06MTBGM0YwMDAyNkMxQkRFRkYyQzFFOTQzMTg5RTg4MEFGQjIxRjgxRTIxCi06MTBGNDAwMDBCNUM3QTdDMTczRTgxRkIyNkE4RTEyQzM3QkZDN0UxQjBGCi06MTBGNDEwMDBGNjdEMTFERkEwRjM4RTg3RkRGNDBGMzI1ODVFOUU3OUUyCi06MTBGNDIwMDA3RDFEQzU0MjFFOTAxMEQxRDNEOTQwRkNCRjZEMEREMkI5Ci06MTBGNDMwMDBENzY3ODcxOEZGMzQwNjZBQUJCMTNENjQwRDBFODFGNkJECi06MTBGNDQwMDA0MEVGNkMwOUU1NDM5QzYxRkYzQzQyMUZEQkFDOUNCRjc1Ci06MTBGNDUwMDA4REVENzQ5RThBQTQ4N0VGNkUwOUVGRDMxNEY0QjJFOEExCi06MTBGNDYwMDBBRTM4QzM3RTdEOTQ3RThDRjc0NTA5N0UxNTdFRDZENTU5Ci06MTBGNDcwMDA1QzFFOThENzZEOTYwRjk3MTY5QkZFOEVDMkJERTlBN0FFCi06MTBGNDgwMDAxNUZGNkVCMDA2MUVGODM1RjAzM0U1NUZCRjBBRkM2QzYxCi06MTBGNDkwMDBDNUY4QzBEMURGM0RGN0NBMTU5NEVFOEY3NjBCM0UzNjI2Ci06MTBGNEEwMDBDQTVCMzMxRkQ3M0Y1RTQ2NjJGMUYxNTFBNzk3QzRFNEIwCi06MTBGNEIwMDA2M0ZBM0MyNjFGM0JEOUI5RTlGRjU3RjJGNkVBMDFFNEFCCi06MTBGNEMwMDBBREJGRDgyODZGM0YyN0M1NDlFNzExRDAzMzRCRjBCRUY5Ci06MTBGNEQwMDA1NzMzN0M4NURGNkI5NkEzOTlDNTZBNEMzOTRBN0YwRUZBCi06MTBGNEUwMDAxMTFEM0MwNTFDMDU3RDJFN0U2ODI5N0UyNzQyQzc4MkEyCi06MTBGNEYwMDA0RTA1MUQ0N0U4RDRCQzZFMjMzQ0NERUQ1NTMwNzc1REZECi06MTBGNTAwMDBGRTgzNzUyNUY1NjNDMENFN0Q1NjBFNkNBMTUzM0I0RTMwCi06MTBGNTEwMDBFNzcyMkI4NUZGRjFERkU1NjFCRUQxMkFFRTA3MUM3NzhDCi06MTBGNTIwMDBGN0I5MjA3RjZDMTVGNzNCRkEyMDJFOTkxNDdEREVFN0EyCi06MTBGNTMwMDA2MEY2RDI3MTVGOUYyQjU5NjczN0JEQkQ0Qjc2ODE5REI5Ci06MTBGNTQwMDAxNzBFOTBFQTU4RjEyNDJBQjE3MTFFNjEzMjUwM0JEQjRDCi06MTBGNTUwMDAxNzNCQ0VFM0ExQzc3OUJDNzNCQUVDQ0M2RDg2Mzg3MDhCCi06MTBGNTYwMDAxN0JCRDc3RkUxOEFDQjVDQjAyRjcwN0NENzg4M0I4MEZDCi06MTBGNTcwMDBGRjdFRjY2Nzk5RERFQkU5RDcxNEM4OTM1OEMwNDA0MDg5Ci06MTBGNTgwMDAzRTI0RkVCQkE3RDA3NTJFRDhCNTA0RjMxQkNDNzE5NEQ2Ci06MTBGNTkwMDA0NUNFNkRCOEJGRjAzOUI5MTk0QjczRkM2NDMxQzQ1OTBECi06MTBGNUEwMDA4MERFRUYzNTNEREY3NTExRDJENzYyMTM3REQ1MDE3RDQ5Ci06MTBGNUIwMDA2NUY1QTdBRjE3MDRCRjhFMjdFM0Y1RTdDRjk2NzNCOUJDCi06MTBGNUMwMDAzNzVEMkVCRTAzRUM5OUUzRDRDRkM3NUMwMkI5RjgwMEQ3Ci06MTBGNUQwMDBFOEREQ0ZDMUVGMDdDNkYwQTcyM0REMkVBOUZCRDBDNjFCCi06MTBGNUUwMDBFRjcxNDY3QTE3NzQ2OEY2RjdDREU1QjEyN0ZFM0VFOTZDCi06MTBGNUYwMDAyNkRBQTVFMUM5Mzc0QUVFQTFFNUIxMjc1RjJCN0MwNkUzCi06MTBGNjAwMDBFQTRGQkQ5QUZCMDZFOURGN0ZEQUVFQUZEMEJGMzlCRTI1Ci06MTBGNjEwMDAzQjBFRTc3MzdDRjc5RjcyNkY4MkZBRDM3MTk4ODc3NTAwCi06MTBGNjIwMDA3QzY1MUNFNjQ1Rjk3NzI3MDZFMDNDREZGMTFDMTZCNzQwCi06MTBGNjMwMDA2QjdERjZDQjEyQ0NCRjIwNkQ4OEM3OTNDNTM2NjY4RjI1Ci06MTBGNjQwMDBFQ0ZBOUZCNzIwN0ZGQUQzNUQ3MTJBQzQyOTlBNzYyN0Y2Ci06MTBGNjUwMDBBMERGREVGNEI0MDNGMzVFOEUzRkZCRTUyNDdEOUNFOTdFCi06MTBGNjYwMDAzRjVENEZBMzhEQzUzMzhGMjc5MjM5OEYwMzNEMjczM0RECi06MTBGNjcwMDBGRkFFRTk5OUM5NUIyMTVGNkU2OTRGQUYwREY2MDdBNjMyCi06MTBGNjgwMDBGREYxNUYyNTIwOTc4RTNGQ0VFQzBGRUFDRkRGMEYzN0RECi06MTBGNjkwMDAxRENBNjM5QkVFQjY1Mjc4N0YwQzM2MjJGNUMzMzc4REI4Ci06MTBGNkEwMDBFREJFMTRGQ0YwRkU3MDYxNzAzODRFRTEwMEVCQTI3MDBDCi06MTBGNkIwMDBBOTA3NzkzQTEwM0M4NjhFQjUyMUZEN0ZGRkUwRjEwOTVDCi06MTBGNkMwMDBGQTE3MERCQkNFNDEzRThBQzI0NUQyRDhGM0M0ODA1RDQ1Ci06MTBGNkQwMDBDMkY1QjNFN0JCQkYyQzAxN0JFQTY4RjcwQUI0MEI0RTU3Ci06MTBGNkUwMDBCNUVFQzk2M0JGQUY3NEYwNkRENzJEMDU0RjY3REQ3M0ZECi06MTBGNkYwMDBCRUI3Rjg2NkY0RkYxNkQ3NTc2NjNFRTg0RkU3NEZERDEyCi06MTBGNzAwMDA4MEY1NDcxMkJEMzhERkQzRTRGRkU2RkZERkYwRkVCODM3Ci06MTBGNzEwMDA4NEZCRjJBN0MyRkIyRkZGRDdFMkZEQ0YxQ0VGODk2RTVGCi06MTBGNzIwMDBDODJGM0JGRUVDQkY3Mjg5NkVGREE3NUFGNzkzRkY0QkMzCi06MTBGNzMwMDBENzFEQjE4RjY0OUYxREFFQjhFRjI0QzExMDlDNUY1RkQxCi06MTBGNzQwMDAzNTgwOURGMkVFNTg0OUU0RUZBMDFGMjJGMjc3RTRCNDMxCi06MTBGNzUwMDBDNTY4NjdDODY5MUQ2ODM3QUMyMkVDMUU2NEJGNkFFMUUyCi06MTBGNzYwMDBGN0IxQjFCQ0VGRjY2QzZGMDBFM0EyOEFBRjdFMzNBREE4Ci06MTBGNzcwMDA1Qjg3Mzc3ODNCNzAwNEEzN0YyNjY3RDQ1NDQzOUNBNUVFCi06MTBGNzgwMDA3NTA1OUQxNzFEQTczNURERTI2RTU1RTE5QTc2NEIzMDY0Ci06MTBGNzkwMDBBRTA0Q0JCN0ExNUM5REYxQzNGREYwNURDNTY5QkNBRjA0Ci06MTBGN0EwMDBENjY5RjIzN0UyMEI2Q0M2QkM2MkIyQzcwREZCRDUwRTUwCi06MTBGN0IwMDBBRjAyNzdCOTUzNTNENjc4QkY2REVGNThCNkFGMUQ0RjMwCi06MTBGN0MwMDAwMjk4Qjc3OUE2NzA0QTJEMTkxQzRFNjZGODA4QjhGNTRDCi06MTBGN0QwMDA4MzEzRjc0N0M1N0RGQzRBNUE0NzA4Rjg1MDIxRDQ5RjQ4Ci06MTBGN0UwMDA2NEVCNDEzRjE0RkU4RTE0RUNENzU4OTMxNjc5M0JEODQ2Ci06MTBGN0YwMDA3RThBMUFCOUM3MUZGMjIwQjhCRjE5Qjk2NzU2QjVBMERCCi06MTBGODAwMDA1RjJBRTBBQzFCMEZENzZGODZGMzk5QzI1N0UwQzU0MTYyCi06MTBGODEwMDA2NjIxOUUxREQ5NEU2RjgwQ0U3Rjk1Q0FFMEJFOEFDMkZBCi06MTBGODIwMDAxREVFMTcxN0YwMTU3MDMzRTNFMTdEQTA1MTlEMUQxRkVDCi06MTBGODMwMDAyRDhERjkzQUZFNEFFMjgxN0Q5NkU5RjI5NEIwMUZFQ0YzCi06MTBGODQwMDBFNUYyMDRCNDk3OEY0OTI0Mjg1MUZGRUQ1ODQ1NDYyNTI5Ci06MTBGODUwMDBGODE1Qzc3MjZDMEE5NDUzRkJFODlBNzRGM0JERTBBNEUwCi06MTBGODYwMDAzREYyMzdGNEEwNUU0MTkyMERGNTYzMzk4NUY4RkUzNDIwCi06MTBGODcwMDA3Qjk2RTFCRDAzOTBCNzRERkRGNjYzNTlFNTc2REMwRjRECi06MTBGODgwMDA3NUU3MTlERTlCOTlFMERBMDJFRDA3MjA4RjFCQkYzRjc5Ci06MTBGODkwMDAwM0ZEOUIxRjY0MTYxOUM2OTlGOUNFQjE3QkFGQTJFNTkzCi06MTBGOEEwMDA0RUVFNTdGNzREQjU2MjNDRkVEODlGRTc1NTAyMUMyRjMwCi06MTBGOEIwMDA1NEM3MUJGQTFGMjRFRTc0MjAyQUJBQkUyQTU4REY0NTBCCi06MTBGOEMwMDA5RUM5ODZFRjM2QkNCREE3MTBFMjEwM0ZGMjU2MTg5RUM3Ci06MTBGOEQwMDA1RjVDN0VBMTYxMUM5RjNEMUMwNEYyQUVENTZBMERDRjFBCi06MTBGOEUwMDAxQjlBQkYyMDRBMkEyMUU3MzU3RjREOTQ4OUQ0N0MwRjhCCi06MTBGOEYwMDA3NjFCQzY5OUI4N0ZBN0ExQkYzN0U0OUUwNjI2RTM4NDhFCi06MTBGOTAwMDBDM0RFRTdBMDE0RjlFQ0I2NTRCQkRGNDJDQkIxNkY1N0FFCi06MTBGOTEwMDBDQUIwRUY1OUY2NUU1RDJCODRBMUNGM0I0NjNDNDAwNzUxCi06MTBGOTIwMDBFNzkwNzhEQzBGMUMyOEVGRkQ0QjRCQTAwRUQ2RjkwQkFGCi06MTBGOTMwMDAzOUUwODEzMjdFRDhBMjEyNThENzQ3OTk5RDMyNkM0QjVDCi06MTBGOTQwMDBERjIzRDU1RDVFMDI3NkQ2Njc4MTU2QTg1RkYwNzVCNzc2Ci06MTBGOTUwMDAwQ0ZFNjRFQjBFMTlDRkQ3NEQ5NzZCMTJGRTBBRjJCODZFCi06MTBGOTYwMDA1QkMyMUNGRjA2QTcwNUUzRjA0NzUzQkE0QkFFRDVEMUU3Ci06MTBGOTcwMDA5REM4REIzMUYzNzFEMUM0OEEyNTMwN0U1QkE2RDZENTE0Ci06MTBGOTgwMDAwQkYyQjRGMkVGNTdDQTMxQ0VCQjEyQjdGMTVFQkFBMjk2Ci06MTBGOTkwMDA4OUJFREI2MTlGNUVFNDI1QzU0RjkzNTk3MkZCMEZBQ0I2Ci06MTBGOUEwMDAxODJGQjlENUUyNzU3MEExODA3QUQ3M0RDM0JBMTlGODdFCi06MTBGOUIwMDBERDNBOEVDOThERjhCRjEwMTVFMjQxRjFBOTc1MzI5QzcwCi06MTBGOUMwMDBCMzIzNzc0ODk4RDcyMkJFQjdBMDlDRTVEQkRGNUUyMjQxCi06MTBGOUQwMDBFRTM3NzFBN0ZGNjQyQ0JDOUZDOEYyMDUyMDk2MDZFRjk2Ci06MTBGOUUwMDBENTU4RDA0RTcxMURGNkVFODNGQkM4RUVGNDFDNzI4MzIxCi06MTBGOUYwMDA3OEU4QTk3OUM3MEZGQjIyM0Q4NzQzNTMyNThBOTcyMUQxCi06MTBGQTAwMDA5RDE1MjcwQTU4N0YwMkYxQ0QxRTRGNTVDMjU4RDQ2RjVECi06MTBGQTEwMDBFNTk4ODdCMzlDRTdDRkY0NEVGRDhEMDdGNEM3RjJBMkJCCi06MTBGQTIwMDBEMTQzMDZDQjJGNzc5RDk0ODhBQUNCMzNCMDhFNTM3MUU4Ci06MTBGQTMwMDA1RTJFMjU4Q0U3QzU1QzI3MTU2QzI3RTFGMUNDMUZFNDExCi06MTBGQTQwMDBFM0JCRTZBOUFGNUUwQkYzRDg2RkM1N0M2N0EyNjg0QjNBCi06MTBGQTUwMDA2MDFEMURBM0RGNTQzQjcwMUQ4NEZGNUQ5MTMwRkVEREYyCi06MTBGQTYwMDAzQ0M4NEZDMjBCRDE5NDcwRTY0RjYyOUNDMzNCQjJBMzFCCi06MTBGQTcwMDAyQzE5RkNGMkQ0MEEyRjlFMUI0QzdENTg4RTlDOUIwNUEyCi06MTBGQTgwMDAzOERDMEVGRkMzNzNCNTk3QkU1QTQ1QzdERDAxQjI5MjhECi06MTBGQTkwMDBCNTA3MDlBNUVGMEU5QjY4QTdBMkM2QzNFRjNEQzRGNjQ0Ci06MTBGQUEwMDA0QjJGODMxODQzQkM2Q0VDM0YyRTNGRDI1RkIzNjc0NkFECi06MTBGQUIwMDBDN0ZGNDNDOUE1QUZCNkM1ODQ2NzFDRUFFQjhFMTk1NkNDCi06MTBGQUMwMDBDQzlGMzgzNTVDMTM0RTAxNTcxNzgzRUJENzU0MkI2NDBBCi06MTBGQUQwMDA0NEUzOEJFRjQ5NkEyRUQwREI5RDcwNUM4MEZBRDFCRjg2Ci06MTBGQUUwMDA0Q0FFMEI5NkE0QzNGQzgzNjNFMUY5N0M5NzM2NjQyQTgxCi06MTBGQUYwMDBBNUJGMUU5Qjk2N0IyM0M2NDkxQzk4RkY1NUZCRjNBMzBECi06MTBGQjAwMDAxQkUxQzg5ODZCRTYxMTRGMUJEMDhEQTIyNTRDODAzOEE1Ci06MTBGQjEwMDA5NUZCMEI5NDBCMjJDRjJEMEE0NzRBQ0ZGNDlCQjc1QjgyCi06MTBGQjIwMDBBMjc1OTAxM0FFMjg1QzM1QjgyQkI4NDMwNzY3M0JBRDgwCi06MTBGQjMwMDBENzcyQjhGRUNGMjNGNTk3QjUwMTdFMTdEQTkxMkVBRUI2Ci06MTBGQjQwMDBFNTNDRDU5NjRDQkEyMENGRUU4NEZCODE0QjgxMUU0RTBFCi06MTBGQjUwMDBFQ0IwNjIzMjZCMEYzNDgyMUVGNUQ4RDlERkY1NDkwQjU5Ci06MTBGQjYwMDA2N0MyREY3MTE5N0JEMDgyRjFCRDM3Mjk3RDY4NDAxRkU0Ci06MTBGQjcwMDBDMUYxMDg3NzMxREU4OTI5QUZBNkMwRjk4OTEzNjk0QTM2Ci06MTBGQjgwMDAwQUMwNjc3MUQ4ODY3MEZCODk0MjgyNzA3RjZBNEZEQTNCCi06MTBGQjkwMDBDMjY5MTVDODFGMkFCNjc3RjM3MTI2NEZENEZFNTE4MjY5Ci06MTBGQkEwMDA3QTlEOUZGRkQ1Q0U5NUUxQkVENDgxRjA2NURFQ0Y4N0VCCi06MTBGQkIwMDBGOEYwQjkyOTAzRDM0MTVCODUxREVGMUY2QTJBNUY1MTE1Ci06MTBGQkMwMDAwQzdBNjI3OTcyMjFFNjYzMzU1NTQ5QTg4NzlCOUEzRjgyCi06MTBGQkQwMDA0M0I4OEJGMTk1OTMzMjUxNzU3OTUzM0QxMDRENENENzA1Ci06MTBGQkUwMDBERDIzN0ZEMjg2RUQwRENEMjc1MDlFRDNFOUU0MDFERkUyCi06MTBGQkYwMDAxQ0UzRkI5RDVENTZGMkQzNUE1QTM2RkM1QkZFNjlBREExCi06MTBGQzAwMDAxM0Y3MkREQjQxOUYzNDkwM0RCNkU1M0E3OTQ4QkEzRjcyCi06MTBGQzEwMDA4OUM4RkY3MTE0Nzc3N0Q2QkMxODBGNzJCNjU2NzI1RjE5Ci06MTBGQzIwMDAwMjk3MEVDQ0VBREU3QjE5RUNFN0Q3M0FEQzk3QzBGRUYwCi06MTBGQzMwMDA3RjhFRjcxMTU2Q0Y3MTVGMDJGQkZENjMxRjREOUEwMzU0Ci06MTBGQzQwMDBGQkZCQjU1OUVFMERGMDk3NDFBRkYwMTZDREMxRjYzQzc4Ci06MTBGQzUwMDBGN0NCNTA5RjMxNkUwNkFCMjczMjNBNDg3OTM0N0Y4RTBFCi06MTBGQzYwMDAxRkY1QjkxM0UxRjI2OTdCNDI2MEIwN0I0OEFFNkU3RTRFCi06MTBGQzcwMDBDNjAwOTc3RUVEQjI4NDc5NTE5OEI4NDFFOUU3OUY2QjUxCi06MTBGQzgwMDA4NkIxN0I3MTBCNDI5OEE3MzU3MjFDOEJBRjY3QTRCMDBECi06MTBGQzkwMDAzRkM5MkJGMjc3RDM0NjEwMERGNjU3RDM5RTcyQjA3QjM3Ci06MTBGQ0EwMDA1QkRGMEJFNTAyRkNBRTdFQ0ExMTg0QjhFNEQyRkI5RTlBCi06MTBGQ0IwMDBCMzgxM0U5QTJGQUI4NUMwNTdCM0NCRUFDNjhDMkI4MzVBCi06MTBGQ0MwMDBGODQ5MDhFQjU3MzdFRkM2Nzk3NTRDNzBGM0ZCNzJGQkI4Ci06MTBGQ0QwMDA4QTIxN0U1NUNGRjM5RUVCNERGOUJGOEI5RDdCMzExRTY0Ci06MTBGQ0UwMDBCNzc4OUIzMUVFQjY4NDg0REYwMjNFNkRGOERERTA3OUIzCi06MTBGQ0YwMDBCRkVGNThEODNDMTQwRThGRjk3MkU4NEExQjlCRDdGOTE2Ci06MTBGRDAwMDBFM0U4Rjc5N0E2RjQ2MkRFQjFFMjBFNjVENDIxN0MxQjJFCi06MTBGRDEwMDAzQ0U4QUY2NEM2RTNCOTlBNUI4N0JFNUUxMkVCQkU5ODVGCi06MTBGRDIwMDBFRTE2QUFGRjI5Q0IzRERFQjIxMzRCRTc3ODgyRUIxOTIyCi06MTBGRDMwMDBBMjg0NkQ1RTNBNEUyMzk3Q0I5MzQyRUZEOEY0Rjk4M0I5Ci06MTBGRDQwMDA3MzM5NUM5Mzc2QjJGRDZGNzM1RUVDNUNEMDU3MDAxNzJECi06MTBGRDUwMDBCRUNGQkM3NEQ2MEI1MzAwMkYwMjlGMTcyNDkwNkVDQ0RECi06MTBGRDYwMDA1RjREMjE1RThFMTcyRkUwNDVDMDNGQkFERjRDREZDQkUxCi06MTBGRDcwMDA4QjQ1MTcwMkZFODRFNURCQzUzMzc5RDFGNzg0MDNFREFCCi06MTBGRDgwMDAyQkYzRkNBRkUzRkE1N0FDQTM5REQ3MDc5QTdGM0JENzgxCi06MTBGRDkwMDBCNzY3N0JGRUVENUNBRTlCRDcyMUY4NTgzQzE3N0M2Q0I3Ci06MTBGREEwMDA1RUI3OThGNzk5RDM1OUM4NzYzQTc0MjZFNDRDMjNBOURDCi06MTBGREIwMDBGMzYwNUM5NkNCMTUwMTY3MzE0RjAxQUY5RTAxRjI1RDk4Ci06MTBGREMwMDA5NUU2M0YxOEQ2QTM4NDJBRjFCMEZDNzY1MEE0MjBDNzRDCi06MTBGREQwMDBCQTJGQzQ5NDJCQTU3OTE3RjYzQkQzRjUwODc5M0JEMEZECi06MTBGREUwMDBCQTg0OUMzNUFGNEZDODVCQjE0RTIxNzdDNTdBQTc1MjE0Ci06MTBGREYwMDA0MTgyRjIxMEVFN0U5MEMwN0ZBODMzRDhDMzE1NzA2MkE2Ci06MTBGRTAwMDA0MUJGMEY2NEZGQjlBMTNFREQ3REEzQTFGRjBGMzI1N0IzCi06MTBGRTEwMDAxOERBMkY1NEQ3MThEQTJGRjJBQzMzRDQ3RkU0RkQ5NURCCi06MTBGRTIwMDBDOUFFREY2QzY4QUZENTFFMzRCNDRGMDk4N0E2ODFERDNCCi06MTBGRTMwMDBGREI3OTY2QUNDRTczRUZGQzNCRUU3QTAxRTZDNzE2M0I4Ci06MTBGRTQwMDA3RDRGNEIyNjk2N0I1QjU0RTRFRjdEMkQxRTJDRjdCNzQwCi06MTBGRTUwMDA3OEYxRjk3RkI1OTQ2M0Y5NDI4Qjg2NjVBOEM1ODdBNUNCCi06MTBGRTYwMDA1OTJFQ0NGQ0ZENjUwQUQ4RURFNUExMkVGNDA3QzY4RjBFCi06MTBGRTcwMDBBRkZCMENFNEUxMDE0QkEwMzU5MUMyRTk5QzM3OTk3REMxCi06MTBGRTgwMDA0RTAyNjY3REZDRTU1QjM3ODE1RTc3QjM3QkU4REE3QTBDCi06MTBGRTkwMDAyNzRCNkEwQzdCQ0U0NUY1OURBNkEzMTc1NzREOThDMEZFCi06MTBGRUEwMDBGRUIyOEJDNENFQkJGQzZBMUNDQkY3QzE3QzNENEE5QjI3Ci06MTBGRUIwMDA3M0VDRUM1RURCMzk3MzI0Q0M0RjlDNDNEODc5MDU1QTQ0Ci06MTBGRUMwMDAwNkVCNjhGQjRDODVGODQxRkZENzNBMTVEQzhGMjJGQzI2Ci06MTBGRUQwMDBGQ0YwMjU2QzlBNzBCRkJBM0YwRUY0Nzc1QTJBOUU1N0YxCi06MTBGRUUwMDA5QTBEMEZFOTdDNjU0REM2QkNENjRCQ0FGRjgyRjk4MERFCi06MTBGRUYwMDA1NzM4RDlERkNEQkE3Q0ZGQ0E3RkRFNDREQjQ5OUJCRkQwCi06MTBGRjAwMDA4QzlEODcxMEY3ODZCQzZFMzkxM0JCRTEyQjM4NjMwMERDCi06MTBGRjEwMDA3OUEwOTI5N0ZEREQ5NDY0QzVBQkY3MDc0NEY5RDc3MURBCi06MTBGRjIwMDBDQzFGOThEOUNBQ0YwQjFDMjQ2OEM3MDk3RUE0RUI2QkUxCi06MTBGRjMwMDA4N0Y5MEJCRUE4NzUyQkMxNTEyRUQwRjdFQkE2NDFGRjU4Ci06MTBGRjQwMDBGRjBCMjcwNDIwRTAwMDgwMDAwMDAwMDAxRjhCMDgwMDRBCi06MTBGRjUwMDAwMDAwMDAwMDAwMEJCNTVBMEI3NDE0NjU5NkJFRDVENTkxCi06MTBGRjYwMDBBRjkwNEVFODg0MDA0MTFFNzY4ODYwMjBBRjRFMjcxRDdBCi06MTBGRjcwMDBDMjZCMjgxMkMwMTc2MkEzQjIwMzhBNTJBMDE4OUU0OTBFCi06MTBGRjgwMDAwQ0NDOEFBMzdCQkFCMTE5MDRENkIzOUIxOTNEQUVBRTkzCi06MTBGRjkwMDBFODY5NzA1MDc2RDY3Mzg4OTBCODE5NEQ5ODA2OTVDNzYxCi06MTBGRkEwMDBBQ0EzNTE0MTQxQjNEODIwRjI1ODEzM0ExMjE0NzAzODFGCi06MTBGRkIwMDA4N0JERjdGRTU1NzQ1NzI3MDFGNEFDQzlDOUI5RjlBQjMxCi06MTBGRkMwMDBGRUZBRkZGRkJFRUZGREFBOTYxRDcwQjk4MzAwNTA1RERCCi06MTBGRkQwMDBCNjNBMEYwQTkwNEU5MThFREE5MDJFNUJGNTAzOThGQjlECi06MTBGRkUwMDBFMTc4RDUzOTMwMTcwMzRDOTVERjA4QTY5NjAwOUMzRDgzCi06MTBGRkYwMDAwNDZFMUJDRTFGRDNBRTlFREFFMUMyN0YyRTVEOTY2MEVCCi06MDIwMDAwMDIxMDAwRUMKLToxMDAwMDAwMDAwQzA0QTNCRkU4RkUzQjJDRUJBOEFCRUY4NkY1MUI4NDkKLToxMDAwMTAwMDFFQ0M3NDBEN0YyRUUzNUZGMUJFMjYzMEU3QzRDNkUzMkQKLToxMDAwMjAwMDJFRDRCRjRCRjM3NkZBNTUzMDVCMDA5QUZEQjM5OTg2MTgKLToxMDAwMzAwMEZEOEJDMDNDMDI2MEI3QkY4NkM3RUZGOTU3RjE3ODhGRTAKLToxMDAwNDAwMDNGQzA3NDlGN0YxREQzQkZGQUVCRjhGRTA3RkUxNzc4MDEKLToxMDAwNTAwMEZDQTEzRkM0QjRENUJGOTVBRjM3Qjg5RDAwRkQwMUNFMUMKLToxMDAwNjAwMEI1NTYwQzU0RjNGMDY4MzRGNkUyODZGNkM5OTlCRTE0MUUKLToxMDAwNzAwMEE0NjY0MTY3RDM4MTNDNDhFRDYwQzlDODQwM0E1QjYyRTEKLToxMDAwODAwMDc5RTBGNTAwQTQzMzBEQUI3ODdGNTlFNjNCMkMwRkZDRUIKLToxMDAwOTAwMEYxRDk5MURGNTlBMEZENjRGNDMzNDMyOUMwQkQyMEY4QTQKLToxMDAwQTAwMDlGNTVGNkRGMTdBNTU0MUFBODM5MTJDQUVCQkVDQzNFRUQKLToxMDAwQjAwMEIwNDEwMkI4MUYwMkY5RjM5MUNFQUVBQ0IzOEM5N0U4MTEKLToxMDAwQzAwMEZFMTRFNzA5OTQ4NzE0RjhDMjc0MzkxNzY1NDIzRjkzMDgKLToxMDAwRDAwMEJBNTMzQzI4OUNEMEU1MjYwMzJDNzFBQ0IxQzI3MDAwMDkKLToxMDAwRTAwMDk0RDJCMTA4Q0FENzA0MTI1Q0NFMDI1ODBDNjEyQkQwNEUKLToxMDAwRjAwMEZEM0Y1QThFNDVFMkU0QkMxNDIwMEJCMkYxRkM2RjU4NzAKLToxMDAxMDAwMDc4QkU3RTFERThGOUI4NzVFNTBBMTlDQUQyNDk2RTJFODcKLToxMDAxMTAwMDk2REI3Mjg4RjA3QTM2Rjk1MTc3OEQ4M0Y2QUJCM0QyREQKLToxMDAxMjAwMDNBODlGQjJFNzFCQzY3QzU0MTBGRkJCNkYyRjNEN0RBRjMKLToxMDAxMzAwMDU3RDc1MzE1QzA3QzlBQkYyNjUzQTlEQjg1RUIyRUVGMEEKLToxMDAxNDAwMEQzRjZBMDZDRUE0MTFFNEU3M0U3OTVGNTUwMEVGRjMyRDAKLToxMDAxNTAwMDRBRTg1NTRFOTk2MjU3MUQ2NEE3MEUzMEExMUVBMzIxOEYKLToxMDAxNjAwMDM5NjRDMzc1MTY2NUQ1QTVEMkJBNjg5OEE5ODBENzE3MjIKLToxMDAxNzAwMEI3QzhBQzBGMzAyQkU2NDFBOEI3NEE0RDZGRUQxMEZFNjMKLToxMDAxODAwMDhDRjQ1MjM5QTE3MjNBQTBGRTE2NkQzNEYyQjNDNDcxRTgKLToxMDAxOTAwMDlDRTVGRTNEMzRGN0M4NkYxNTNDRjM5RDlDREE5RERGNkUKLToxMDAxQTAwMEFBMDlCNzlDQTRGNUFBMzRCOUYxNzUzQ0Q3QUEzNjY5NTcKLToxMDAxQjAwMERCN0I3MUYzNTZCODUzMzI0RTI0OTM2M0MxMTg5MjBCMTQKLToxMDAxQzAwMEYyRTEwRTkzQkYxRDkwRDlERjdBQjM4RjMzN0U2MDdCNEYKLToxMDAxRDAwMDNGRUY4NzZERUZBMUZEOUZCOTg0MTc2RTAwNzhEMjNEODgKLToxMDAxRTAwMEVEODVDMDg0NUY0RTZGRkQ4QTdERUJEREU0NEY2ODI3QUYKLToxMDAxRjAwMEU0NDdCQTFFRDdBMjBEMDE5RTdCNkRCOTNEMTQ0MDc5MkMKLToxMDAyMDAwMDQ2QkQ0RTMzRUQxRjk1NDJDMTU0RDJDQjQ1NzBBRjQ2MkIKLToxMDAyMTAwMDc5NEY2RURFN0I4OEZDNjRCMkREMTEyNkI5MjExM0VEQzcKLToxMDAyMjAwMEYxN0E5REQ0MkUyRTRGM0MxRTBBQTZFMEZDRjE2RDAxMDIKLToxMDAyMzAwMDk5REM3NkVDMDEzNUU4QzBGMTk4MEYxNEQ0MzRDNjk5RjYKLToxMDAyNDAwMEY3N0MzMkU5N0RCQkJGODlFNTUwRUZBRjY3MUFGMzlGQkEKLToxMDAyNTAwMDlCRDhDRjYwMTA1RUNCQkU3RTNGODM4N0VEMjY4QTZCMzYKLToxMDAyNjAwMDJCQjQzMzA1RDNBMENFODQwMUFCQ0IzMTRENEU0MTNFRjAKLToxMDAyNzAwMEJBQzJFMEE2RUI0NTA3NUM0MTNBNTc3MTlCMjJBN0UyNjAKLToxMDAyODAwMEI5QkNDN0Q1MjA5RDdCMkRBQTQxQjE1MTlDMENDODdEMUUKLToxMDAyOTAwMEYxQkFDRDBDNjExQkM2MTE1QkE2MDk5NDM4Qjk4RTNEMkQKLToxMDAyQTAwMDE3MEE1MjFDRDRFMzVBNzM5MkIwRTc0OTk3RUE2NThBNTkKLToxMDAyQjAwMDVCNEVBQkJBNzUxM0NBMTNERTRFNzI2RjcxNzUzRkY3QTIKLToxMDAyQzAwMDNCNkUxM0NCRkRFQjc0REYzQjZFQTRFMDcwOERGNEU1NjkKLToxMDAyRDAwMDkzRkRCNEJGRjYxMkQ5NEY0M0IyREI4NkNGMjVDNjY5NzIKLToxMDAyRTAwMDNEMkVFQUVCRTg3MkQzRTU1OEVERUNFMkI4QkY2QzU1NzEKLToxMDAyRjAwMDE3QzdCREM0N0RBQjREQTBENkEzREMzRDE1QUVFMjVBRjkKLToxMDAzMDAwMDVDQTc3RDM1Q0M5Qjg5RTMzQTBCRDJCQ0VFRjMzRkYxODEKLToxMDAzMTAwMDk0N0Y0OEY2MzI1NTlFRDBBQUQwQjk5Q0E2QUJEQTc1MjgKLToxMDAzMjAwMEY1QUFFRjc4RkY1RUVGNkJGQjU3Qjc3ODlEMEIxQ0IxMUEKLToxMDAzMzAwMEVCOEUyMjQ5QzQ3OTMwM0I0RkQ4NjNGQUJDNUVCRDRGODcKLToxMDAzNDAwMEVDOUM2REM4NUI5MzJFQTg4NkJDMzUxOTIzNkRGQ0ZEMTMKLToxMDAzNTAwMDBBRkJBMzg2RjE1NEU3RTM4NkY5Qjc2NEFFMzZEQ0JGNDcKLToxMDAzNjAwMENEQjVERTcwRkY4RTlDREYxQkM2NzdCQTVGMzRDQ0JGODUKLToxMDAzNzAwMEFCNkM5M0UxRkU0Q0U1M0YwQ0Y3NjdDOEEwNDhFODczMEYKLToxMDAzODAwMEY5NTJDODQyN0UzNjA3RUE5OUNFODU1NkE2MEY0MjI3MTMKLToxMDAzOTAwMDUzMTUyRDg5RTgwMjcwMzM3RDE4N0M0Qzk3N0I1NEI5MzYKLToxMDAzQTAwMDA4RUQyNjZBRTkxQzQwN0VERkYxRDZERkYzQzgyRTNBNUQKLToxMDAzQjAwMDdFMzVERTk5RTU4QUU1NjUzRDRGRkZENDdDRENDNzhBNTIKLToxMDAzQzAwMDdBRUFDMTFFMDYxNDA5QkJENUUzN0RBRkZBNDk4OEY3NjYKLToxMDAzRDAwMEQxMjI4QzI3NzhDRTY4NjMzMkM3OTk2ODRBOUY5MDI0Q0YKLToxMDAzRTAwMEM1RTIwOTVBQTQ4OUYyQjFFRUI3N0E3QzI5OUVFQkZFRTgKLToxMDAzRjAwMDY4MDVGOUQxMDczMjhDNzA3NThGMzc1M0NENTgxQTc4NEMKLToxMDA0MDAwMEU4QkEzQkU3ODFGQ0Q4RkU0MTEzMkMyMjNCREI4QUY0OUYKLToxMDA0MTAwMDRERTRBM0VGREM4OEQ5MTVDNzRGMDFGMTgxRjYzNjc5OTkKLToxMDA0MjAwMENFMTQ4OEUwRjUxOTRFNTA0MjM4N0Y4NjFEMzIyRTUwOEEKLToxMDA0MzAwMDJDQkNENDk1MzcwQjAzQzQ4QzBCQTgyOEI0RTcxRkQzNkUKLToxMDA0NDAwMDk1NDI5Mjc3RTBFOTA5NjkyNzcyQjVCODc0MjNFQUVGMUIKLToxMDA0NTAwMEE4ODlGOTgxQzU1MjY4MDRDQUEzQTk0MThDRjMxN0E2REIKLToxMDA0NjAwMDMxN0ZGNzQzOThGNUY4MDA0NDJDQzRGRjNDMDA4RUQzNEQKLToxMDA0NzAwMEYzQzFDNUY0MjE1MDU4OUZCODcyNzIwMUM2QTc4NTBEMEIKLToxMDA0ODAwMDY2Q0YwNkU0QjMzMEJENzMzOEY5NjdGRUQ4QzNFOTEyMEUKLToxMDA0OTAwMDlFMEI0QjNCODVGODI5MzRDMTNBQUE2Rjc0M0U2QTM1RUUKLToxMDA0QTAwMDNFMzYxNDI5MTU3NEJFQzJGNEQ2MERDRkUyRkU5RDhERTIKLToxMDA0QjAwMDI2RDg4Q0VCOUMxQ0ZCRjgyMzEwOTc4RkI3N0FDQTZGNTkKLToxMDA0QzAwMEE1NzlEQjI0NTAyOEFGMDY1QTZDQTEyRDU5QjQ3RkU3REIKLToxMDA0RDAwMDAwQ0EwN0ZBQkNFNTlFOEExOTQ1QjhFRUFDMjI2MDdERDkKLToxMDA0RTAwMDQzRUI1RjgwRjQzM0QzMjk2NDBGNTNGQUIzMENGMEI5QjQKLToxMDA0RjAwMDYxQkVGQzlFRkMzM0MwQ0YxNTkyMkM2RjAwNzFBMThDQTUKLToxMDA1MDAwMEY3RTVGMTIzNkZCRTMxN0I0RDFFRjMxM0EwM0E2RUFCQkUKLToxMDA1MTAwMDQ3OURDN0U3Qjc2MjJDQTBGM0JGNkMwQjZERTY3QUFCQzMKLToxMDA1MjAwMDY2OTg4NEU3QUM3Q0M1NjZBMkZDN0YxOEUzMzNEQzBDREMKLToxMDA1MzAwMEYwQTVERkNFRjQ3RkZDNEVBNjVGRjkzMzk5MUVGNUJCMjQKLToxMDA1NDAwMDk4N0VFRENGNjFCQUYwMDIzMjgwRkEzQjU5QTQ1NDExODMKLToxMDA1NTAwMDNGQkRGMUQxN0I5QzExN0M0NDI1OTg1REVGRTg3RUJGQzcKLToxMDA1NjAwMDUyRjM4NzgyODZFMzRGMjU5MzFEMzRDOTZFQjJEM0ZDQzQKLToxMDA1NzAwMDQ2MzQ0QzNDRjc5OUU2MzEyMTM5MkI1RUFFRUExM0M0ODAKLToxMDA1ODAwMDY3NDFEM0E3N0YxODVGNDJDRjk5OUQxMkNFM0ZEM0Q0NDYKLToxMDA1OTAwMDM1ODBGQzM3RjE3QzU3RTREMTYyMTVGMkQwQ0VCQjJEMEIKLToxMDA1QTAwMEFENzUwMzNEQkZBRDcxMzg5RDEwRTMwODA4M0IyNDdENTgKLToxMDA1QjAwMDRBM0RGMUIxOUFFREU0NTc0NTIyREZERjY1RUIyQzcxM0UKLToxMDA1QzAwMDNBNjJGQzAxOTUxODk4Njc2QUI1M0MzMzU1QkU5NDRBNjcKLToxMDA1RDAwMDdFMzE5M0Q2MUQ0Qjc2N0REMzQ3QjQ1RjYwOUZGMDQzNDkKLToxMDA1RTAwMEQ0RUIzQzVGOUMzRkVERDBFNEEwRDNGQzE2QUI4RkZDN0EKLToxMDA1RjAwMDY5NUJDQjY3NzdERjgxNzI5ODMxRUUzNkFGRUM4QUNEREQKLToxMDA2MDAwMDdGOTU4NEUwMjVGQkJFRjhFRkNGNjZGMDdDMjc2RDM1NDMKLToxMDA2MTAwMDA3MzY0RDc1RTJCQ0ZCRURCQkRFMjcxMTNDRTAzQzNBRjIKLToxMDA2MjAwMDM1MERDN0YzMzJBNTNENDRFN0JCQjJBNkE1NTMxQzgwRTgKLToxMDA2MzAwMDEwM0ZGRjUwQ0VFNDNENjQ2MkQzREQzM0FENTQ0RjRDRTgKLToxMDA2NDAwMDI2QTc4QThCQkIxNTc2OEMzNzg2MzhERkNGMzBCRTI1NDAKLToxMDA2NTAwMDczQjA2MUZFNkRBRTZDQzNGRDNCNzI3MjBERjdGNTdEM0MKLToxMDA2NjAwMEE3QkI4QjBERjNDODVGQTlERTQ2M0U1OEVGQjA0NTBFMjEKLToxMDA2NzAwMDhEOTBDODBFQ0U3REIxOTRGOTlGNTM0MkZDNDc1MTdFQjgKLToxMDA2ODAwMDU2MkMxQzRFOTVBRDdGRkU1OTBBMUI4REJCNTNDOTNGOUUKLToxMDA2OTAwMDEzRUJEQTY1MkRBRkVFNTE1Q0JERDdCNTU1RTBFQjFCMjIKLToxMDA2QTAwMDk2N0FBRjY3N0JBQjA3QUZCN0FFQzUzOEYyMDc4QTIzNDAKLToxMDA2QjAwMDg1NkZEREVCMENFMjM5QjY4REJENzg4MzBCRjlGQkI4QTUKLToxMDA2QzAwMEE4RTc3QTM3QUFENUJCODk3Njc0QzU1RTI1OTdCMDlGMEYKLToxMDA2RDAwMEZEMzI1MDNEQTREN0JEODk3NjA0RjA5NDU2MDcwOEZBNDAKLToxMDA2RTAwMDUzRkQ3REM2MjcyMjZGN0Q0MzdFREYyRkRFQkUzNTFBODgKLToxMDA2RjAwMDJBMzJFNDk5NDIyQkU2MTdENDRGRTdERjY0RDg0QzE3MkYKLToxMDA3MDAwMDJFRTEzOTc0M0Q2NEM3RUMxRjFFREVGNEZFQTAxMkJFNUMKLToxMDA3MTAwMDFFQTBCQUI2OEFGMjAyQUU5RkVDOTFDNEJBQ0I3NkJERTcKLToxMDA3MjAwMDNGMjgyMzc2MUY1NjFFMzVDQzg3MjdBNTNEODZGMTlBOTQKLToxMDA3MzAwMDJDRTNGODk5Qzk3QkUyOUZFRjJEMUU1NTZFN0NENEFBNUQKLToxMDA3NDAwMDYyOUNBRTdDNEVFMjdDOTU3ODVGM0ZDRkQ0REQ0OTBBNTcKLToxMDA3NTAwMEM1NEQ3M0IzOERGQkE5MkFBNzAyOEE4M0FBMjZDQzIzOTEKLToxMDA3NjAwMDNERTQ3NTNEM0VDQzkxQTFBNkE3MzgzNzQwNUI3N0ZBQjIKLToxMDA3NzAwMEVFMjQ5MDdGQzZCQTg3RDE1NkU4M0M4MUZGMTJGOUU2OTUKLToxMDA3ODAwMDcwNUYwNTdDNzFGQjY0Nzk0NEZERDc5MTU2Rjc0RjNGNEMKLToxMDA3OTAwMEUwQkM4RTNGODM5QjQ0REY5MTI2RTI2RTQxQzM0OTkzQzgKLToxMDA3QTAwMDg5RjI1RjFGNjEyRjA1Q0U4ODI5MUQ2OTc0NTE3MjAwN0YKLToxMDA3QjAwMEQwOUZBQTE3QTcwNDRDODU3ODdGNzhFNzY3NzY1NEZEMDkKLToxMDA3QzAwMDI4Q0ZBMDE3RURBOEI3MkY0QzI2NDNGRTg5NTJDQ0MzRTMKLToxMDA3RDAwMEIxNjc3QkU2MUNDQTNGNzdFQzRFMEE5QjdFMDYzRjFFNDQKLToxMDA3RTAwMEFBMzk5MDE2OTYwQkJGN0Y5MEVDNDZFQ0EzMDBGQTQ3MEYKLToxMDA3RjAwMEY1RUY0MERGNTdBMTM4NDFGQ0QzNzhBOTY3QzhFMUU3OUUKLToxMDA4MDAwMDcwRERFQUZEMjIwRUUwNkQ0NzYyM0Y3QjdGNUMzRjBCQUYKLToxMDA4MTAwMDFCODVGRkRBRjE5N0VBOUQyQTA4NEQ3MzEwNkUxMDQ2OEEKLToxMDA4MjAwMEZGODc1RkNFRkY2Nzc4MUMxOTVDRTc5MDlGREZEQ0RERjgKLToxMDA4MzAwMEFGNzVCRkFGM0UyOEZDRkU2Q0YzRjc5RjUwOUMzRjhCMUIKLToxMDA4NDAwMEY5MkZERUVGNzVCOUU5RkU1RUZEODJDQzdFQTk1RjNGMzAKLToxMDA4NTAwMEQzMkNERjFBRUE0MUNFNjVCQTVGMjk2RUY2RDc1QUE3QzQKLToxMDA4NjAwMEQ4Qjc3NkUyRjlCQjI5Q0ZENUI2QTA4NkE0RUVGQkU4Q0YKLToxMDA4NzAwMEI0N0E5RDBDQUVCODdEQjZFREI0MkQwQTM5NjI3QzQ0RDUKLToxMDA4ODAwMEY1RkNEQUYyN0RGQUU0M0M0MTU3NTNGRTg1M0EyREZFNDEKLToxMDA4OTAwMDg4QkEwNkYzQUEyNTgzRjJFQTRDQzlCRDA1QzlDMTk2RjgKLToxMDA4QTAwMDgxRTUyNEJGODMxMjg0NUQxRTVFRTI1RTNCOUVFRjFFRTcKLToxMDA4QjAwMEIxMUM1RDc3NTA3RDA2OTkzOTY2REFFNzZFNERBRkY3NkEKLToxMDA4QzAwMDY4RjhEMkFDOTY1OTIzMjhERTdGRDZCMEUwQTA0MjUxMUEKLToxMDA4RDAwMENFOTNDREZCRkQxQTAyNUMxRjFFNENGMzBENUQ0MTc1REUKLToxMDA4RTAwMDY4NTBEOEY5QzFCNENFNzZDMkEzMEU0RTRDOTY4MjEyOEYKLToxMDA4RjAwMEFGQkYyNkJFRkUzQjY4RjEwREFENjFCRTM0NUM0QTE5NDgKLToxMDA5MDAwMDJENUY0RUZFMDlGREIyMTYxNzUxOUYwMTQ5RjQ3N0VDOTkKLToxMDA5MTAwMDA3RTY0MUNGMzBDRUIwMTg0MjdCMTREQ0I3Q0ExREU2RTMKLToxMDA5MjAwMDNBNzUyOTA4NUMyMEIxQkVBRjlBRjBBRDk1RjI0MzYyRUEKLToxMDA5MzAwMDNGM0FCOTY5RDcyMUE5QTAwNzFDMjNDMTZFQUY4NTVCRDcKLToxMDA5NDAwMDI0RjZDMUJERTEwRjNGQTZGQkI2NzhFMkYwQzNDNDdBM0UKLToxMDA5NTAwMEZENEE1REFBRDc1NTVCOTI0MzlCRjEzQ0VGNEVGQ0I3MzUKLToxMDA5NjAwMDMzNEI3MUJDNzI0QkIyOTNGQUVFRDNBRkQ4MDIxNDlGRTMKLToxMDA5NzAwMDRGNkZCNjg1MjRCQzdGM0FCREIzOERGQTkwRDNEQkYzQkQKLToxMDA5ODAwMEREQjgwMjU0OUE1Q0ZGRjkwNkU1RjkzRjU5RDgyRTAwMEMKLToxMDA5OTAwMERDQzIzRkFFRDhFOTYzNDcyOERFRDU2RTQ5OTE4MEVBRDQKLToxMDA5QTAwMDZCNTVEQ0Q3N0I0MEY5RjUxNEFFMTMxNkVGMTgxNEIyNzMKLToxMDA5QjAwMDQ5QjEzQzQzRkVFMUMyRDJFMkQ0Q0I0OTBBMTVGREE3QkUKLToxMDA5QzAwMEY3REREMzk3RjBBQjc2RDM5QkMzMTgwRjkzOUYzQ0YyMjAKLToxMDA5RDAwMDM4M0VCN0Y0QjUxNDBGRDUxMzkwMDdBQ0I3NDU5QjQ3MTUKLToxMDA5RTAwMDZEQTJGQUY4MjU4QkJBOTdGOEFGNzhGRENFODE1OUI0OEQKLToxMDA5RjAwMEZFQTdGRDgxRjg4OTM2RUYxODQwRjU1MUFDNkVFRkI5Q0UKLToxMDBBMDAwMERFM0JEQjlDREQxN0YyNjI3MkQyRjFDNDc1N0Y1Q0VERDgKLToxMDBBMTAwMDIzQkQyNzRCMkVCRTZFODYxQTY1MzBEOTQ1RDM0Q0EwMTgKLToxMDBBMjAwMDc1M0RCMkE0OTA1Rjc2QUU0RkU2M0EzNUQxRUU4RTc4NDIKLToxMDBBMzAwMDQ0OUZCMjRDQzcxRkZBODEzRDkzRkM0NzA1OTY0Mzc0MEYKLToxMDBBNDAwMDdERUVFNjBEMjhBNzFGM0NFOTVBQkVFRTFDNzk3NzdFQTUKLToxMDBBNTAwMEJDN0RCNjU1QkQ0M0Y2QjlEMUM2Qjg0ODdCOTJCMTZFRTAKLToxMDBBNjAwMEQwRTlGRjdBRDI3ODlGNEFGQjM5MDMwRTUxQjVFQUEyNEEKLToxMDBBNzAwMDcxOUM4N0ZEMUUzRUVGMDlCQThBMUY0NUJBNDI5MzdGREIKLToxMDBBODAwMEQ3Njg1Rjg3MDc5RjVGNTJGRkZCQjczRTYwQjk2Q0ZDN0EKLToxMDBBOTAwMEM3MkY2OERGN0QwRTgxQzc3QzIwRTQ5N0Q4MEY1NERBMUEKLToxMDBBQTAwMDA1RUUwMUIwODlDRkFCNUYzRkY5RjJFNzA1NjQ4NzI3MTgKLToxMDBBQjAwMDFCNzM0NzkyMUUxN0M4QUQyNzVFNDIzRUNGQTRCNDFFREIKLToxMDBBQzAwMDc5MDJFOUY2N0Q5RkIwNUUxMkNGOUI4OERGQjQ0QjEyQUUKLToxMDBBRDAwMEYzQkI4Q0Y4QzBFQkY3N0E3RDcyNzE3Rjc2NjdFRUUzM0IKLToxMDBBRTAwMDE2NkNDODY3Rjk0RDk1RjNGQTkyMUVBM0E3N0JFOTU3RDgKLToxMDBBRjAwMEI0NzNFQUVCRUJFN0QzRDdEN0U3Mzk4Qjg1QkUzRUQ0QTcKLToxMDBCMDAwMEYwRjcwRTZCRUIxOUQyNkZDNzVCQjkxMkUxODM1N0FFRUEKLToxMDBCMTAwMEE3QjcxNkE0QzVEOUNCMkY4NUNCREZBN0UxMjM4NzRDNzgKLToxMDBCMjAwMEFCN0Y2MzQ1N0I2Q0FGN0ZENkEyQzZDN0JEOUY4OEM3MkUKLToxMDBCMzAwMDVGQTkwNzE1NzAzOTA3ODg1NEMyNzkwQjk5MzNFMzc4OTgKLToxMDBCNDAwMEEyM0UyNjY3QzBGMTA0RUQ3ODEyOUQwN0ZENzJBMjQ2MTEKLToxMDBCNTAwMDYxODk5QUM5NzgzQkFEODczNDA5NDIzQzBFNEU3NkJCMTkKLToxMDBCNjAwMDg4NEU5MjdDOEM3QkU4N0RDMzM0QTgxOTQyN0M5OEVDM0IKLToxMDBCNzAwMDExQzYwOUQ3MTAzRTg5NzVDQkFDQjRCNTc3NjZFMTdFNTYKLToxMDBCODAwMDZCRkFDMzVBQUE2N0Q2NTg4NDVGMDRFNjI3NzMzRkE3NTcKLToxMDBCOTAwMENCNDlDRjMzRTBDQzMzRTQ5NzM1NEU3MDk5NzE5REQ5NzIKLToxMDBCQTAwMDY2NTg2NzQ5MTdGMzZFNDQzOTFGRENCN0UwN0RDMjVEQjQKLToxMDBCQjAwMDNGMzdEN0Y0QTc3RDBGM0I5RUNCOTc0QzU0RTc4NTUyMjgKLToxMDBCQzAwMEE4NjdGQ0UyOTMzRjc5RkY4NjczQkYwNDY1MjJENTE1QzEKLToxMDBCRDAwMEY3RUVCNTczREM0RkM0MjcxNjgyQ0FFMzRBODg1OENFQjUKLToxMDBCRTAwMEUxNzM1RjhERkQ3MUNCNkU4OEYxRjVENUI4MUYxQUE5NDEKLToxMDBCRjAwMDRGQjgzRkVEMjkyRjNEMUYyODg3MUNDQTRCRTc5MzUyNjIKLToxMDBDMDAwMDBCODg5RjU1NzY0MTFGRUI5M0JBOTlFODY5QTcyMzQwNUIKLToxMDBDMTAwMEI4RUNGOUE0NjEyMUNBQTcyRjQ5RUE4MzY0Q0ZGODFDNzQKLToxMDBDMjAwMEY3QjE4MTIzQzkyMUNBNzc4RkM5NkExNUUzRDA2OTU2MDQKLToxMDBDMzAwMDkwNzA3RUI0QkYyNjk3MEU2MEI5NDQyRERBRkNFRjVDNEQKLToxMDBDNDAwMDNDMkVBOUYwMzA0RTA5RTc1RDFDOTdDNzI3RTQ5RDkyMjIKLToxMDBDNTAwMDVDOTNFOENGMkU4QkY5MTMzQkNEODZCQzUzNTJBOEUxQjEKLToxMDBDNjAwMDM5N0Y3NzcxOUQzQUU5ODJGOUFBNzlFOTUyQjFFODc3M0IKLToxMDBDNzAwMDRCRkE5OTZBN0FBQTE3OUZENUVFMDcyMTJDMEI5QzQ3NEQKLToxMDBDODAwMEQ0MEJFM0FGRDg5NzIyOTMxRUFCQjQ3MTE1RTUzNUI0RkUKLToxMDBDOTAwMEFCNjhBQTNEMjAyM0JGRTM5Qjg1OUQ4RDM3ODc3NzExRTUKLToxMDBDQTAwMEM1MjgwQkFCQThCRTY4QzJCQ0E3OUYwM0UzMEE2NEU2RDUKLToxMDBDQjAwMEIyM0Q4Q0QzRUQxNEQ3OUE4QkYzRDY0QTM1RENDN0Q4MjYKLToxMDBDQzAwMEE5QUU0MUJBNDE2QUU1NzNGQzBBM0E5OTJBNUEzRTJGMDUKLToxMDBDRDAwMDA3MzdEMzI5RTA2MzhBNzZDQUY0NTZBODYzN0EzQkQ0RUYKLToxMDBDRTAwMDMzOUQwRUFEMjJGRjhGMEUwNzM5QUZDMTkzNEVFRTA3MzUKLToxMDBDRjAwMDZGQUIzNDUxREQ1MUYyRUI5RUZCODc0NjJEOUVGNDJFRjcKLToxMDBEMDAwMDA3NzRCQ0QyOUYyRTg3Njk4MEZFOTdERDgzM0M4NkU0MDIKLToxMDBEMTAwMDcwMUM0OTk0NDdBMjlGNEU4NDg4Q0M3RTRBMDEyMjlCMzYKLToxMDBEMjAwMEYwMDMxN0ZCNkIwNTI4M0M5RTdBOUQ3MjI4OEJBODY2MDIKLToxMDBEMzAwMEM2NkYxMkU1NTFEMUIzNURFQ0Q0RUNBMjk2NkNBRDdGRDkKLToxMDBENDAwMDRDNEY1REM1MkUxRUVCRkE0MkZGQ0FBNDNBMzQ1MThGQjgKLToxMDBENTAwMEZBRjU5MkU0RjIyRTE3ODZFMjJGNzYxQzlGNjNDNkJDNEEKLToxMDBENjAwMDU0NTI1Q0JFMjIxQkM3RURDNURGQ0YzMTYzM0UyQjE5NDkKLToxMDBENzAwMDVGQkU2MzM4OEVDRkVDRjg0MThDMEJDQjhCMkQ2RUVDQzUKLToxMDBEODAwMDYyNTY5RjlGMzMwNUU3QUJFNDlGODU0NEQxMEYyOTlFQjAKLToxMDBEOTAwMEE5QTIzRjVFQTlENTMxRUFFQURGQjg5REU4MkZFQTUwNjMKLToxMDBEQTAwMDg3OUJGOEI0NjNCMTlGODQ3Mjk0QjNDNTdCQzc2MUI3NjYKLToxMDBEQjAwMDg2Nzc1QjcwREU3MThCN0E5MEZDNzdCOTNEOUNFQTQyNTYKLToxMDBEQzAwMEY5QUY1QzNENzUyMDg1Q0VBN0FENjJCRUNEMjY3MDVBQzkKLToxMDBERDAwMDlEM0ZCQzFFNDhDMkYxRjZFREI5MkJBNEUxRDczRTA3RkEKLToxMDBERTAwMEFFRkYzNUFEQUZBRTFFMTEyMEZGNTUxQjI1QjdEMDZDNDEKLToxMDBERjAwMEY5QzBEOTI4QzNGNjU2MEIxMDZFQUFFRkY3RDQ2OEY1RTAKLToxMDBFMDAwMDE0RTc0Nzk3OUJFM0Y3NjBBRENFNjlERjlFOUI0QjdBNzMKLToxMDBFMTAwMEVBMkExNjM4MTg2NDY0MTU5MzFDOEY4RUY2NzVEMUZDNzcKLToxMDBFMjAwMDY4OEFCMEI3MkVDQUU1REVERUU5RTAxMkU1M0I5QTlGOUMKLToxMDBFMzAwMDc4M0RGQTBEMUUwMDlGMzc5N0E4RTdFOTdFNzVGMjI1RTkKLToxMDBFNDAwMENFRkI2NzhBM0U1RDFCQzk4QUQ5QUQ4NDRBOUI4QkZDNjkKLToxMDBFNTAwMDA3MTUwODU5MzkzRjRDNzA1RUE5NTMyOURFMkRDNDc1MUEKLToxMDBFNjAwMDUwMUUyNTNFMzU0ODIxNkVDQ0RDQ0U1MjhBQUJCOEFFNDIKLToxMDBFNzAwMEE5MDRGN0E5QjY0Njg2MTVFMTczQ0ZERDczQzQyQUVDNDEKLToxMDBFODAwMDZFODhCMDNCMkQyRUI1RUNEQ0ZGQzQ2MDMxRjQ0MTlDODQKLToxMDBFOTAwMDlGNTVFRkJDRjhDMzk3MjhCRkVBQjMwRTM3NEQ4RkY5QzMKLToxMDBFQTAwMEQ3OEIyQkI4REYwNDg3MjE4RUU4N0UzN0FFQzlDNkY1MTUKLToxMDBFQjAwMEY2RjhFNjUxMEI2OURFQzQ0RkRCQjI4OUFGNDk2RDExMUMKLToxMDBFQzAwMDdFOEYxNjZERjk3Q0IwMzg4N0RFODc5Qzk3N0U0RTNFMEMKLToxMDBFRDAwMDNFQTlFNTg5OTM3NjkxMTdFOEJEMzBGNzdCOERFMkJEOTkKLToxMDBFRTAwMDcwQUQ4NjczRDZCNjQ4QTEwMEM3MUZEMTNGMkZEMkY4ODgKLToxMDBFRjAwMDVCQkVCRjcxMEZFMTI3OEIzNjNFMzQ5REVEMjgyNEZBOEYKLToxMDBGMDAwMDBBMTdGRTUyNUM1ODcyNDhGNENENEJCNzFBRkI4RDZBMzMKLToxMDBGMTAwMEVBOUI2OTNFODRBRDY0MEZDQkVCMTNFRTZGQUNFMEJFOTEKLToxMDBGMjAwMEI5M0EzRUZFRjdEMDM3N0I0QjM0N0M2QzI4MEM2NUJFNUIKLToxMDBGMzAwMEU0Qjk3REQ1MUVFMjYxNjI1RjVDMDVDQTg0MTJBRTdCQjYKLToxMDBGNDAwMDdEMzJFREVGMzVGNzhDM0ZGNDJGRDBERjkzODlGQUJEN0EKLToxMDBGNTAwMDUyREI5QkU0RTQ2MEI5NThCOTlGQTg3RDc5ODVEQjQ5RjEKLToxMDBGNjAwMDYzQ0Q2RjM3OTlBOEE3QzY4OUVGN0QwNEYxQ0ZFOTdFREQKLToxMDBGNzAwMEJDNzg5REM0N0QwNzZDRUNDNzM2NThGODlBNEQyMTdFMkQKLToxMDBGODAwMDBCNUYxQkM4N0QwOEY2NEI1QzFGNkU3QUNEQjY4RUM2MTQKLToxMDBGOTAwMEMxREZGNTA5Qzg4NTg0NDM3N0RFNDAzODRDMzAwOUVCNjIKLToxMDBGQTAwMDREODFFNzgzRTQ2MTFDODY3MTkxNDc0QkI0QjhBRkQ1OUUKLToxMDBGQjAwMDAxMTAyRTMyRjRGMzQxMkRGRkQ3QTY4QzFDODg5RDczQUYKLToxMDBGQzAwMDZDREVCRTQxODZGRTI0QThENURCMjU3NDRFQUExQkI3NzUKLToxMDBGRDAwMERFMjBFRTI3MDkzRTc2N0RGQzBGQzk1NEY3MzY5QTdENTgKLToxMDBGRTAwMEM5ODQ2QjlGM0QzMDlDRkI5OERFRTRFRUM1MzQwNDU3MEEKLToxMDBGRjAwMDc5NEZFOUZEN0M3QUY2RDVGNDU2RjI4MjU5Qzg0QkIzQTUKLToxMDEwMDAwMERCQjdGRDBBN0M2RDg5RTk0NUU3NkZBQUZDNDY4NTk1NEIKLToxMDEwMTAwMDcwOTE4N0MxNDkzODQ5RURGRTU3ODM3NkVBMEJENzAzQjMKLToxMDEwMjAwMDIzMTA2NzQxRDhGM0Q5NTMyNjdFRUY1RTBBMzlGRjNBODEKLToxMDEwMzAwMDAxQzdERTUzNjY3NzA4OUY2RkQwRTIyMkJEN0Y3NkM1NzkKLToxMDEwNDAwMEQ5OTk0REMzN0Y5MzVDN0RDMDE1RDc0NzI3RTdBNDFCNzMKLToxMDEwNTAwMEM2MjlFRTFCMENDRkY1MkQxQjZFQjg4RkYyREU0Q0VCQzQKLToxMDEwNjAwMDQzNDA2OUNEMkI4REQ1QkQ2OUNBNjhDMzczNEZBNzRFNjgKLToxMDEwNzAwMERCQzc3RURGRkEwOEUzNTJGRDZFRjUxOENGMjMzN0NCQ0UKLToxMDEwODAwMDE0MEZFMDlDQTg5N0NBRjA5N0ZDNkQwQzA0ODJBNDhGMDMKLToxMDEwOTAwMDcxRURDNjNBQUEyQzUyQzc3RDYzRDIwMUIzMDEwN0IwRTUKLToxMDEwQTAwMDVEMDM5N0RBNDRGRTQ1NzE3MjA4MEMxMTcxMjM1MURFMUQKLToxMDEwQjAwMEM2RUYyRjZBRjdDQjVDRUZENTBFQzU0MjM1QUIyNzc5NkIKLToxMDEwQzAwMERGNjQ5MEI3RUU4RkJBRENGQkZCOEM3MjFGMzhEQjI4MzUKLToxMDEwRDAwMEVGNDFBQTUxREU4MzE3MTlFNTNEQjRDNjI4RUYxQjU3MkYKLToxMDEwRTAwMDE5RTU5QTE1MzBDQTMxN0JERDM4QzNGQzExNzVFNTg2RTgKLToxMDEwRjAwMEYxQ0QyRkRDNkU5ODNGMkE3NEI3NjE5Q0JCRjUzRUMzREYKLToxMDExMDAwMEZDRkNGQTA1ODZGQjg1NEQ0QkFFNEJGRjQ1RTE1QUMzMEYKLToxMDExMTAwMEJDNDRGRDE3RUZGQkVENTVGNTFGQzA1RkExN0Y2MDdENUYKLToxMDExMjAwMDk0QTEzRUMyQUVGRjNGM0IzOEE2Qzc1OUREMEVBRTMzOTkKLToxMDExMzAwMENFQkU0RDNFQ0I3OEMyODQ0ODgwRUNBMDJDOTlFRDY0QTUKLToxMDExNDAwMDQ2QjI4ODNCMUZFRTNCN0I0MEMxRjE0N0FFNjI0QjI2NjcKLToxMDExNTAwMEQ1NTk1QUZERTBEM0UyOTBERUNGMjRGNjhENzc5NTQ5M0MKLToxMDExNjAwMDA5RUZGQjkzMENFRkZCQUZGNTVEOURCNzM1NkMxODE3REUKLToxMDExNzAwMDFEMDBGRTZFQzY3M0M4RkQyRTUxRUY3MTg1RTFBRUQyMjMKLToxMDExODAwMDUzMzVFRjEyMUQ3QjhFRDM3NkI3N0U1NUZGM0UyRkIxQzAKLToxMDExOTAwMERGODI2NTA3RjhCREUyNUNGREJEMEMzOTQ1Njk3NzdDRUYKLToxMDExQTAwMDUyRUZDN0Y0M0UzN0IxRkZENUZCREVFRTdEOUFBODYzNjAKLToxMDExQjAwMEJBRjcxQkVFNEMzM0Q3RDEyQUQ3RDU3QjI1OTU3MUNFMDQKLToxMDExQzAwMDREQTNENEMxNUUyRjM1MDFEODI3OUJBODRGOEUwNDg1MkYKLToxMDExRDAwMDMwMTVBMEY3RDA1MUZBOUY4QTkwQzBCM0Y3MTExRTFGQTcKLToxMDExRTAwMDREMDNDNkNGMTVBOUVFQkU0MDFFMUZERjE5MjkxNUYwMEQKLToxMDExRjAwMDExRkQxNDdCRDUxMTVFRDRFQjMxQzlCOUI2OThGMDg5RDUKLToxMDEyMDAwMDcxREYwRUEzN0EyNEM3MkJFQTNDOUI4QzkyQzJCQzM0QkMKLToxMDEyMTAwMDcwQUUwMjc0RkRDNzc0NjU5NEQ3MUJDMzRCN0FCMzlCNDEKLToxMDEyMjAwMEM0RUY5MzFBRkM2MUE2NjZBNzlCQkY1RjRBQzQxNzIzNEQKLToxMDEyMzAwMDI2MTdEN0E3ODFERjRBRkNERENGQjc3NEI4QjFCMTNBMjIKLToxMDEyNDAwMEU2RUMzQTBCRDczMUEwRjVGMzBGNjhGMkQ3NzE4RkI5RkUKLToxMDEyNTAwMDFBM0ZDNzcwODk0NTk4OTcxRjY4REFDQjdBNTk5QUQ5OEYKLToxMDEyNjAwMEFFRTEyNTM1NUM4RjNGMzRDNEUxRTFFRkUxOTQ2MkI3MzQKLToxMDEyNzAwMEMwQzk3NDFDNjRCMEZDNTNFQUFFNkJGMUJGMzRGM0I0NjQKLToxMDEyODAwMDAxODc4MjM3RkE1REQ3RkJGMjE4REY2MkZENjNFQjA1NTkKLToxMDEyOTAwMDlFNzk2Q0ZENTBDNkNGNjNFQjlGNjEzQ0VBODE5QThGQ0IKLToxMDEyQTAwMDBERkUzMTZGRDU2MTgzM0ZDQzBGMUMzNURDOEY2NDc0MkMKLToxMDEyQjAwMDVBMDg3RjhDQkMzNTY4REFGRDI4QkY4RTQ2NUIyOUU5NjkKLToxMDEyQzAwMDAzRURFMDExRDJBQkJFN0U2NDdERUUxNERBRjdEQTdDN0EKLToxMDEyRDAwMDdFQ0JFNzY4RjNCN0IyN0U3NTNFOEZGODBGRjEzOEUyNDgKLToxMDEyRTAwMDhGMjQ3QzlGMjZGOEQ0NzEwRTlENUE3NzQzOEU5OURFMDkKLToxMDEyRjAwMDI3NEE3RERDODQyQkY3ODY3RkU4N0U2NjJBMURDRUVCQUQKLToxMDEzMDAwMDlDMzdCOTRFMDg5Q0E4NjYwQ0Q1N0Y2RDkzMDc5NEQzODMKLToxMDEzMTAwMEI5REI4NjVBQ0Q4MjhFMTRFMzQxNjU3NjMxOUU3NjJCRjkKLToxMDEzMjAwMEQxQThDNUIxOEU3MDkxMzY0OTdDNEYzNDU3NTI1RTk5MjEKLToxMDEzMzAwMDhGRkIzRTMxNEE3RDlBRkNBMTdBNDk2NzAxRjk1Rjc1QkUKLToxMDEzNDAwMDYxRTQ0MTA5RDdFRkVBQUY2RTIwRjk0OEQ4NUUwQzRBNTQKLToxMDEzNTAwMDY3M0VGOEJCQjM1M0E2NDA4MTg0QUVCMkM3RkJGNTdEQjAKLToxMDEzNjAwMEQ0Mjc5RUVBMTMzODQzMTVDQUNFQzYyMzYyNkMxNUZFRjUKLToxMDEzNzAwMEY4QTE3NzFGRkJERjcxNUM4Q0Y4MENGQzU5MTJGODk0MTQKLToxMDEzODAwMDIzNjI5RDg5RUI2NEY0NTc5RkE3N0RFOTdCMzI3QUJGODYKLToxMDEzOTAwMDQ3RDdDOTNFNzVCQzM0NkExMTc1NjI1NEFCMTc1RkY2MDYKLToxMDEzQTAwMDhBN0FGNjk1MDREQTQ0MzUyRUUxOEY0NDM5NUUzRjMzNkMKLToxMDEzQjAwMDkyRjBGNEIzMUI2RDQwRjUyREVFQUY5ODRBNjJERkFGQUIKLToxMDEzQzAwMDBDNDA1RUE4OEU3RERGMkFGQTRDQ0Y1RjZDNjE4QTUzOTkKLToxMDEzRDAwMDNBQUVGQUE2Mzc4QkQ3Q0JDODE2Nzg2OUM2M0Y2M0RDMUUKLToxMDEzRTAwMDIyM0Y4Q0I0MEU5Qjk5MTI3N0RFMDNDMDM4NzYwN0UxNUEKLToxMDEzRjAwMEQxNzEzOEY2OUI1RUQxQUZDM0MzMjJFRTc1QUMxRkNDNjIKLToxMDE0MDAwMDc4RkJGMkZEQzc4RTUwRkNCQUQ3QUIzNjkyNUMxNzk4Q0EKLToxMDE0MTAwMDVDQTVGQzdENTZFQTJFQzZDREY2N0E1REJDMkY5RTk3NjQKLToxMDE0MjAwMEY5QzUzOEI0ODZGNEI0REMxRTYxOUNFRDVBQjg3QTZGMDUKLToxMDE0MzAwMEZDNzcyQzZDN0QzRThGNzE2NDU3MDFEOThEQkUyRjlFMzkKLToxMDE0NDAwMDYzQUYzNzBFRkZENkNGMTE1QkU3RUE3RUEwRTNDM0ZBQTYKLToxMDE0NTAwMEY4RTRDQjRGOEZENEYwRkQ3OUJFMUVGMkVCMTE0RDJFODgKLToxMDE0NjAwMDZEOTY5RUYxRjg4QjVFRjExRUFGOUI3RTZFMDYyMEZDQTIKLToxMDE0NzAwMERGRDYwNzczM0ZEMjZGQkQ4MkZGOEUzOUM4MEZFMzFCRTMKLToxMDE0ODAwMDRBMTFFOTc3RjlERDBFMzdDOTU5NUYxRkQ3NTFERkJDMjMKLToxMDE0OTAwMENBM0U1REEzN0RERjEwRkY0QjZBMDQ3RUFGREY4RjRBM0IKLToxMDE0QTAwMDQyQUY4MUY1MDI0RjVEQkVGM0YwOTEyNzcwOTdDNUFGNTMKLToxMDE0QjAwMEU3MTc1MzNFRDA5RjRGOTQzM0NBNzcyNDdGN0YyNzhCMDMKLToxMDE0QzAwMEY3NUYyOERGQjNCNDdFMjI2RUZGNzNFNTFBMUQyQURFQjQKLToxMDE0RDAwMEQzNDYzNzVEMUM0NkRGQTcyREE3RUZFMTBBQzgzRTA0QkYKLToxMDE0RTAwMEZFMDUwRDQ2NUMwQkU1MTUyMDdDQTNGQjdCMkRFMEY3OEMKLToxMDE0RjAwMDYzMzYyRDlGRDhGNEU3ODc5ODBEQ0ZEN0E3Rjg5MjRBODcKLToxMDE1MDAwMEYxRkM2RjY5NzEwM0U3ODc0Q0Y0M0RCNzE2OUYxQUI0N0QKLToxMDE1MTAwMEJFM0IxMTdGNjk2ODE1Qjg2OTQzQTY5NUVCNjhBQTdGNDEKLToxMDE1MjAwMEU4QkU1RUZGQUNGQzU4RTBBNjJCQjM0NDlENERFNzI0MUIKLToxMDE1MzAwMDNENEI4N0Y2NzBCRDcwMDUxNzk3MzBERkEzMUNEM0FEMDgKLToxMDE1NDAwMEVBOTA1MkYyMjc3NTA1RTczM0Y5NDZENDMzQkQwRkY5MTcKLToxMDE1NTAwMEVCRUQxQThFMjBGMkEzNTdDQjg3NUU1QTg3Q0U5NUQ3MzQKLToxMDE1NjAwMDk3RjM2NDg5QjYyRkY2MTc4Q0RGOEQwNTU1QUIxRjM0QzIKLToxMDE1NzAwMEZDNkRGRDFFMDNGRUYwN0ZEREY1RUM0OTMwMzEwMDAwMEYKLToxMDE1ODAwMDAwMDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwQTkKLToxMDE1OTAwMDAwMEJGQjUxQ0ZDMEYwMDMwOTQ3QjBBM0YyMEZBMEYxM0QKLToxMDE1QTAwMDY3QjJBMUYyRDNCODUwRjk4NzU5NTBGOUZFNjhGQUQxNjEKLToxMDE1QjAwMDcxM0IxMzAzMDMyMzEzN0UzNUY4QjAwODMzMDM4MzBDMDgKLToxMDE1QzAwMDEwQUIwMEIxMEUzM0Y5RTY4MEIwQkUyODAzNDM4MTA0QUUKLToxMDE1RDAwMDAzMDMzQjkwRkUyM0NFQzBFMDBFNjQxNzAyQjExNzkwQzgKLToxMDE1RTAwMERGMDJDNDUzODE1ODFDMjg3RTE2NDg0Qjg5MzEzMDNDOTkKLToxMDE1RjAwMDExODVFOEIzMDBCMjNGOEI5MTY3QTcxOTJGNjU2RTFFNjYKLToxMDE2MDAwMEM1OTQ2MTEzNTk1NDNFQUYxQTAzODM5QjNBMDM0MzlGMTkKLToxMDE2MTAwMDA2ODRBRjhEMjRCRjE0MjhDNkE3MDY2MUVGOTc2NzYwQzQKLToxMDE2MjAwMEQwMDRGMjk1NjRCMTlCN0IwMDI4QUYwNTk0REZBNjgxQkUKLToxMDE2MzAwMERGRkVDRDNBQTg3QzA3MzM1NDdFMjY5QTdDQTMwQjJBODIKLToxMDE2NDAwMDVGQzMwRDk1QUZFMzBFQTEwMUMwNjJCQUM0RDgwMzAwMTkKLToxMDE2NTAwMDAwMDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwRDgKLToxMDE2NjAwMDAwMEJDRDdEMEI3QzU0RDU5OUY4Qjk4Rjk5QjkzMzk5N0UKLToxMDE2NzAwMDk5REMyNDEzOThCQ0UwMjYwNDA4MUE3MDEyQzI0M0M0RjMKLToxMDE2ODAwMDcwMTMyMjQ2OEQ2MTgyNjg3MTk3QkEyM0FEMzZBMjQwRUQKLToxMDE2OTAwMDQwRDZDNjQ3Q0RFNDFENUUxQUM0RUUyMkI4NzRFMjEzRUMKLToxMDE2QTAwMDk0RDZENDYyRkZCNEFCNzQwMkI4RDI5NjZBNTRBQ0I0ODgKLToxMDE2QjAwMEI1REQ0ODVENkJGRDJCQkZBMEEyRDREMkIyRTdGQkNFNTcKLToxMDE2QzAwMEI5OTk3QjZGMjYwMUI0REQ1RkUzRTNFNkRDN0IxRURGQzcKLToxMDE2RDAwMEY5Q0VGNzNFREYzOTcxOEEwRUEyQ0UyM0U0MENGQ0QwOUUKLToxMDE2RTAwMEU3MUI4NEZFNjQyNjlFODQ3NDEzMzIwMzlFMDM3Mjc4ODMKLToxMDE2RjAwMDJBM0NBM0ZDM0Q3QjA2OTZGNjBBQTQwMDhCRkQ2NDI2REIKLToxMDE3MDAwMDIxNzk4NEZERTQzNTc2QUMxNkE3MTEzMjk2ODQ3RTNBQjEKLToxMDE3MTAwMDM5OUY5NjA3NkVBQzIxN0U1QTdFRUI4QTNGQzJCMzYzMzcKLToxMDE3MjAwMDcxNjVGNTY1MUEyMTU5NEI3QTVGQkQ5QzNFMDNFMTk4QkUKLToxMDE3MzAwMDEwMjkyNjY0MEIxMTA5Qzk4NkZFMEFBMzE1NUU0MkRBMzgKLToxMDE3NDAwMEEwQjMzOTg0OEM4OTY2RTlEMTYyMjhFOEI0NDBDOEJGNjcKLToxMDE3NTAwMDJBN0MyMDIyNkEzMjJERkJGMEQ3QzQzQzhDMjcyMTRFRjQKLToxMDE3NjAwMDEyMkZDMjhBQzIxOUQ3RjBGNkY2RkFDNkQzMDdFRDhDNEIKLToxMDE3NzAwMDNBRjlGMEZGMzUwNEU2NzdCNjc2NjQyRDFCMkY0QUZGNjEKLToxMDE3ODAwMDM5NDNGMTkyOTMxODFGRkJDOUFBMzc5NTA5RTBDN0ZBQUMKLToxMDE3OTAwMDVEMUZDMkZCRUFGRjkzRjFCMjQ5QTk1QjJCQTNGM0FEMzYKLToxMDE3QTAwMDExRDUxOEQ0MjdCRDY5MzIyRDA3NkU5MzQ5NUNBMERGOEYKLToxMDE3QjAwMENCQkEwNTg3NzZGNjc1RTkyMEE0QkFENzhCRjgxNUVBNzcKLToxMDE3QzAwMDdDMDlGOEFFMjUwMkNFNjdEQzVERUZGNDc0MDYwODM5QkIKLToxMDE3RDAwMEI5RDQxQjQyRkE1MDA5Qzk0ODFGM0U5RjZGMzcxMTEyRjYKLToxMDE3RTAwMDc3OTlDQThCMkI4NTA4OEUxN0ZBNjkyMTZEMUY1RDJDOUUKLToxMDE3RjAwMDg2MUUwNzc4NkExNkE1QzE3QkEzREUzN0Y5MzhDM0U5RDAKLToxMDE4MDAwMDgzNjgzMkM1QTNDQ0U5NDNBRTExNzVGN0I0MkY0RjFGREYKLToxMDE4MTAwMEYyMTdBNDhGQ0NCNUE2NzZFNEZDRDcwQkYxM0VFM0RDM0YKLToxMDE4MjAwMEU5RTNDQjhFNjdBQ0VCNzBCRTZBNDYzOEM2REQ1NUU4OUYKLToxMDE4MzAwMDI2NzRGRDFGQTg1RTk0MUE0OTUyNkZFNDc1MkQ0NTdFRUIKLToxMDE4NDAwMDBGRDQxMDNEOTZBNEREM0E1ODRGOUM2N0Q0MjI2RkYwMTgKLToxMDE4NTAwMDQ5RDc0NzFBNUFERURCMkRFQjI1OEQ5REI5QTQ2NzE0QjUKLToxMDE4NjAwMDdDNDgwMUVCN0M4RDdFOUQ4RDkyRjY0RTA2MkRDQUFBOUEKLToxMDE4NzAwMDA4RkRDOUJDQkYwRTc1NTk5NDAwREQwMjZENTM3QzQ4NEMKLToxMDE4ODAwMEREMjU3MTQyRjk4MzA0NDlFODcxMEU4MTQ4Q0I0RTU1M0MKLToxMDE4OTAwMDhGQUQxN0EwMTRDMzc1MzFFMDUzMEE0NUNCNzg4RTVDMjkKLToxMDE4QTAwMDhGNjUzREM4OTJBODYwODZERkQ5RTg0NDM4NjQ2MDEzMkMKLToxMDE4QjAwMDJFRUZDMjI4REMxOERDMzBDNDk5MDk1MEJFREJCMkZFMjIKLToxMDE4QzAwMEIyOTdDNERENTRBRUFFMkIyQzI1RTY3NTMwRTg1NDEwMkIKLToxMDE4RDAwMDBDM0FCREZCRENFNDhBN0RCQ0M1NTYzOENGQjk5RDU3QjgKLToxMDE4RTAwMEQ2REUzNURBMTQ4Q0Q2NEUyNkVGMUE3OEEyQzg3QjFEQzgKLToxMDE4RjAwMDdFMzFBRDdCQTc4M0VDMTUyRTIyQTQzNUI3MjMwQTZGNkEKLToxMDE5MDAwMDNCRTE3RjE3MjM3RDgyRDAyMjlEQjlBNTJBRDAxM0Q5MzAKLToxMDE5MTAwMDI5QzgwMEE3REIyMDhGNjAzQUQ2RUIyMTFBRDI1MzU0OTYKLToxMDE5MjAwMEI4ODM0MDNEQzkxQjQ2M0MxOURGNDc4NjhCRDM1RDU0QzUKLToxMDE5MzAwMEVGMkJBNEZENUVDREJCQkQ5QUVCMzM1MkU2Nzg2N0MwQkEKLToxMDE5NDAwMDgwQkIwMEU3OTEyOEQzNzk3Qzc4MjdGRDFGQTU4RjY4OUQKLToxMDE5NTAwMDg5MTA3QjVDMThGRUJEMDZGNDIxOTU0NzM1RjBERTI0MjYKLToxMDE5NjAwMDRGNUM4MjU1OUVENUYwNkYwNzlFN0I3M0QyNzQ0QThGNzEKLToxMDE5NzAwMEZEMjE4OTgwQjg2QTc5Q0VBNTU3RDFGRTVGQkQ1NDg4MTQKLToxMDE5ODAwMEI5MDQwRTJGQUQ1RkNCRTEzQ0FDNjdFNDAxN0RGNjU3QTcKLToxMDE5OTAwMEI5OTA3RTZCMkZGRjJDMDBFNDdCN0NFRkVCNzIzMjdFRTQKLToxMDE5QTAwMEFEOURFQjQ4QzA0MUZGNUI2NTlFMUZGRDZGMEM4QzgxQjgKLToxMDE5QjAwMDdDNTk4NTc0NjRDMEI1QTI1NDQyMzhGQUU3MEEzMTE4REMKLToxMDE5QzAwMEU3RTA2RkZGNzBERjI1MTRDRUMzNjU0MkM4QTUyMUJDRDgKLToxMDE5RDAwMDNFNDJDN0VCRDczRjBFOEMyNjI3ODgzMUJFNDY1NEMwMDcKLToxMDE5RTAwMEE3N0RGQ0ExRjU1MDQyNEI4MDJGRUI1NUE3QjY5RThFRUMKLToxMDE5RjAwMDc3QUIxNDNBMDQ3QThDOEM2NUZBQTE1RTlENTQwNUVCQTIKLToxMDFBMDAwMDIzMDk4QzNFRTYwQjU5RDhBRUQ1REIzMjA2RDc1RDVBOUEKLToxMDFBMTAwMDlBNTQ1RUQ1NTM0NUExOTZDMkY3OEQ5MzQ2ODUzM0U2MTkKLToxMDFBMjAwMDE4MUMzMEQxNzVFMzVCRjlGNzFEMzRDMTM5NTVGMDA1NDkKLToxMDFBMzAwMERFNERBMUJGQ0MyMkIzNjA5RDNGRjIyRTRBOEQ5MzkxMjMKLToxMDFBNDAwMEZCN0JCRjQ5Njk5NjFEODQ3Q0Q2QTRERDc3RDAzMUZDMzEKLToxMDFBNTAwMEZCQUQxMjY5RTgyRDFFRkVGRTRBNDFFMUY4ODgzQUMxNEQKLToxMDFBNjAwMDNFMzNFNjNEMzQ0RjZGMDBFOUZCNTYxMEJGOTRENDZGMTAKLToxMDFBNzAwMERERTk2RTk2Q0RGMkM3MzY4RjIxRkM3RUMxNzY0QTYwRDUKLToxMDFBODAwMDREMzQ1QjAzN0U4QjJDMTRBMDFGOTlGRTMzMzNDMThGMjIKLToxMDFBOTAwMEI3RUVBRTYzN0M2NzgzQjczREYwQjc4MUY3NkM3Q0ZDMzMKLToxMDFBQTAwMDkxQjdBNTAzRUNENTU2MDdBMzk3QjY0QzMxRDQ0Mjg2MUYKLToxMDFBQjAwMEQzOEJCMTFFMDYxRUNGNzUzRDM2MEE2RUU0MEY4MzhFQTIKLToxMDFBQzAwMEVBQzVBNUEzQUVGQkQ5RThFODBFQTBBMzBCRkZGRTc0MDAKLToxMDFBRDAwMEI0MDVFODY4QzYzRjI0MUQ2REZENDdBNEEzNDRGOTcyMTAKLToxMDFBRTAwMEI0MTcxNkYyQkVGQTA2N0VGRjIwQzhFNzVGRUExMkNBRjQKLToxMDFBRjAwMEJENUZDRTY1RjJGRjk3MTEyNjE3RkI0OTY0RDMwQ0QwNkEKLToxMDFCMDAwMDA3NDcyNDk0NTNGRDdBQUIwRkUxQTUyNjMxQ0MwM0ZEQTIKLToxMDFCMTAwMDJFNEE3RkFGODNCRDM0OTlDQUY1MjYwNTlGNzRGNjc5QTYKLToxMDFCMjAwMDhCRThGNzU3MkZGQjJDMTdGNEQ3QUI3NDZEQzFGRTI2NEIKLToxMDFCMzAwMDY0NTBENzY5RkI1Nzg2Q0FENDAwODdCMjlCOTUwNzlCMzAKLToxMDFCNDAwMDRGNDVDMTNFRUYxNzU4RjkyN0NEQTdGNDI4OEVCN0IxRkUKLToxMDFCNTAwMEUzNzI4QUNGODVGMDJCODU2M0YxNUM0MThGMjVBMThCRTEKLToxMDFCNjAwMDlGMDk0RTg2OTcyQTYyRDFBQjc0NUQ3RTI2NTA3QTUxQ0EKLToxMDFCNzAwMEMyQUJEMUFFMjYyNDRDRDAzRjJDQTQ3NjgyQzlCRTY4MUQKLToxMDFCODAwMDA0MDUwNjcyQjlDQTg1RkFDRkRFRkYyQkRDMkVCNERCNjIKLToxMDFCOTAwMDcxOEJFNzk2Mzg0MDVGQjhDMjI3RTQwMUZBNUMxODE2RUIKLToxMDFCQTAwMEIwMENGODU3NEQ3MDhCQkFBMDgzMUUwOENGNzUzRDAyNUMKLToxMDFCQjAwMEZBMkYyQzEzODc5QTg0NUYxN0VBMkU4QkRENzU4MkVCNDAKLToxMDFCQzAwMDMxOEE5NzI1Q0M2RjUxRjNFQUE2MjZFQTlGMzBGNEFGMEQKLToxMDFCRDAwMDZEM0UyM0QxODUzMTBGQTM3Q0NEREMxMzA3MzM2MERFNEUKLToxMDFCRTAwMEQ1NDI2ODIyMzQ1NEQ0QkMxQjdDRTZGRTUzMENGQkM2QTEKLToxMDFCRjAwMDA3NzhGQkU1OTI2QjUyMTkxRDQ0NTBBRjFBRjRGNEQzRTkKLToxMDFDMDAwMEI3QkZFMTgwRjk5M0M1MTk0ODk3OEI2QjI0OEIzREI5MTkKLToxMDFDMTAwMEE4MkFDNTUyQkU2RUVFMzVBM0RBRTEyNDYyQzI4Mzg5REEKLToxMDFDMjAwMEVFRkQzOTA0RTk5NEZDMzdCNTUzMjg5RDQ2MkIwNzIzNzQKLToxMDFDMzAwMDY4QjcxQzEzQjQ1NjVBNEUyRDZGMUMwRkZEREUyREE2MkYKLToxMDFDNDAwMDYzN0RBMUJDNzFGMjAwREE1QjBCOTBGRTUzNzg5RkE5MTMKLToxMDFDNTAwMENFODYzRjE0ODA1QzlEMjg5MjQ3MzRCMDQ3NDdGNzBCRUYKLToxMDFDNjAwMERBMzk5RDFCNjU0NzIwMTIxNUU4N0E2QTUxQjU1NDFBNzYKLToxMDFDNzAwMDA1REYzMTVEQUM0RUU2Mzc0QzEwRDlCQUI1NDcxN0E5MzAKLToxMDFDODAwMDg1MDBEMDQxQUJEQzQ4QUI2QTQwRkJDRkE4NEZFOTc4NzgKLToxMDFDOTAwMDgyOTgwOUUzNDZGMUZEMTAxRDc3RDE3OUQxNzYxRTY2NTEKLToxMDFDQTAwMDhCOTBENDBCMTZBNTkyNTFFNkQxNjY1QjdGMkFGRUY1ODgKLToxMDFDQjAwMDY0NzJGNjU2MEUxRkQ5Q0JGQTM3NjQ1MjZBM0FFRDNGN0EKLToxMDFDQzAwMDQ5N0RFM0Q5QzlGQjNGMTUxMjQ5M0ZDMDI5ODcxNUU0NzcKLToxMDFDRDAwMDg3QTI0QTYyRUU4N0U4MjU1ODc2RjJBMjJCMTg1NkYyQzAKLToxMDFDRTAwMDI5M0U1REM1MjI0QzgzQjQxNzNGQTJDQjFBRTAyMThBNUUKLToxMDFDRjAwMEVCQkQ4MUFFNkRBRTg5MkYzN0ZDNDU0MjNGRkY1NkIxM0IKLToxMDFEMDAwMEEwMTlFNEM2ODZCRTVCODg0NkYxRTEwOUM2MDg5NkE3MUQKLToxMDFEMTAwMERFQUMwMDlFMzY1MDI3QUIxRkM2OTc3QjA5QzA5MTkyNjAKLToxMDFEMjAwMDRCN0ZBN0UzQTRBODI0QTZEMUZFNjRBRDM3MkVEMkIyODAKLToxMDFEMzAwMDVDNEQ0MjNBRkRFNDUzNDM4Mjg3Q0E4OUZEQzE4MjY2MDUKLToxMDFENDAwMDk5QkU2RjVCNEE1MDNFMTI5MDFFMjZGQTY5MEJCRUE2RTIKLToxMDFENTAwMDRCNDAzRjRCNDgwODAwNkUwQjJDQzM3OTc2MTQyRkVCOTkKLToxMDFENjAwMENBQTdFRjRGRDZDODE4M0YyMEE3MjlCQzg2NUY0RkZERjIKLToxMDFENzAwMDBDNEYxMUQxNjFCQzBENTkyNEU2NDUzQjU4NDdGQzNBNDQKLToxMDFEODAwMDU1QjY3RURBRDY0MjEyOUY0RUJGQTdDREVDODNGMUEzQTMKLToxMDFEOTAwMERGMjI4QzJGMDk5MzZCMzI5NzI3NDRBNkY0MDdFMzM3OTEKLToxMDFEQTAwMEFBQTFGNTQ5RTg0RjIxOTE1QkM0MTlBNjc1NTZDM0U4NkQKLToxMDFEQjAwMEM3REFGMTk2RUEyNDU3MDI3RURCNEEyODFGMjQ5MTdCN0EKLToxMDFEQzAwMDc3ODgyMkQyNDEyQ0I0Njg2MTQxOTI3MUVFMTYzNTk0MjUKLToxMDFERDAwMDRGNDY1OTNCRTU0NEY4NDdBQTlGQTgyNzkzNzgwNjc0RDUKLToxMDFERTAwMEFEMEI4MDE3MTIwRUUwRkNEMkM5RDA4RjBFRTUwQzNFNzEKLToxMDFERjAwMERGMzFBNDAxRUIwNTY3NzdGNzAxQkY2NUVCQkQxNTgwMDcKLToxMDFFMDAwMDhCNkZGQkFFN0IxNUQ3OEQzQ0FDODIxRDRCQTEyRDNDNUYKLToxMDFFMTAwMDkzOTE5MDE3QTA3MzYwN0UxRjg1NDRGNDNCN0M2MjVDQjUKLToxMDFFMjAwMEQ1NjkwNzNFNzc3RjEwOUQ1RjhENjA1QzJFMTU5QTUwQjcKLToxMDFFMzAwMDgwRDczNzI5NkQ2MDk3Rjg0OTQ4ODBFRkJFOTAxQzM1RjAKLToxMDFFNDAwMERCRjVBOTg0OTYyREYxMTQ3MkE0NzAyNjYxMjIxRkJGQzAKLToxMDFFNTAwMEFCN0RDMDNBNkE1MUMzNDUwMENDMTZCRkZFNUZFMDM3ODgKLToxMDFFNjAwMDZERjQ0NUQwMEZGQkNDRUQ5RjA2ODM3REQzRTM3RjA0NUIKLToxMDFFNzAwMDlFOUZCOUM3QzVEMDNGMEIzMTdGNEJBMUZGODBCQzRCQTQKLToxMDFFODAwMDlEMkQ1QkZDOUIzNERENUFDRUIwRjk2MTBCMjQyRkNFMjcKLToxMDFFOTAwMDMzRUQ2QUMyRkQyQkJENjZFMjk4MDQ1QzE0QTIzQUEwNDEKLToxMDFFQTAwMDk3Q0Q1NTMyMDFGRkRGRUI2NUYwMThGMDY1NDhGN0NDQjAKLToxMDFFQjAwMDQyRkQxODkyOEYwMTFDMTQyRDA4Qzc0OTcyM0EwRTRCMkYKLToxMDFFQzAwMEVDMkYyMjE4M0ZBNTcwMURCM0MxNzVDQzA2RDczMTMzNTYKLToxMDFFRDAwMDVDOEQwQTlCQUZERDVFOEM1NjkyQTIwNjBBREMwQjIyNUIKLToxMDFFRTAwMEY3M0ZBOEREMDQ3NkUzNDlGMjgxNUUwRDg0MTNCRTEyNEMKLToxMDFFRjAwMEY1QUM1RjY1NkRCQzRBM0YwNjJCNTRBMjIyMUREOEVEQTAKLToxMDFGMDAwMDQ2QkE0RTFGNTlGQ0FGRDlCQ0FDMTEwMUU2NDFFMUI0NTEKLToxMDFGMTAwMDdFMjdCOTQ4MkY1ODk2Qzg1MDVDNzhEOTZDMDM1RkRBOTEKLToxMDFGMjAwMDU3N0U0M0Y5RUY5NjQzMEUwMkZDNDVGOTU4ODJFRjBFQjcKLToxMDFGMzAwMEZFRjUxNjFFMUY1RTA2RkUzNUM1REZENzQ5RDgwRkYwMjkKLToxMDFGNDAwMDdENDg0NDhDNDM3RDQ4NUVGMzRGMzdDOUM5RTMyMkI3Q0YKLToxMDFGNTAwMDRGNjA4OUNEN0M0QzQyNDE5MEUzQjJCN0EzNUZGMjIzM0UKLToxMDFGNjAwMDFBMEM3QTEzQ0VFMDNBODY5ODlDRjczMkJBOEIxMkE1RjcKLToxMDFGNzAwMDE5RjU2MTE3RjMzRjhENzhFQTREREQ1NjdGRjgxQjVCNEQKLToxMDFGODAwMEFERTU5QkM5QTIzMTEwMkZCREY5NDEwNzg5RDE3RTZGMDQKLToxMDFGOTAwMDMxRkJGNzc0OURERTEwNTU4NEVGMUJBNEExMDNFQzkyNzYKLToxMDFGQTAwMDRFMDdCMzM3OTZBOTQ0ODZGOEU3OEFGRkY3MUYzMzZGQzkKLToxMDFGQjAwMEE0RjMzOTA5RjI2MDA2RDhFRjE0N0M5MzFFNTkxRTg4RTkKLToxMDFGQzAwMDM5RjVFMkUxRjM2QjE1NDJCNTk3MDgyM0NGQUZEM0QxRDIKLToxMDFGRDAwMDVGMEJGRTc3NzQ5MzAzRUQ0QzYyOEY4M0VFOTEzMDBFQUUKLToxMDFGRTAwMDZBNkE4N0YwN0VBRENCM0FCRkIzQ0RERjNFNUY0MjFFNUIKLToxMDFGRjAwMEMwRjkyRURGNzkyM0RBRTcyM0NEQzdCOTMzQjlCREU5QkMKLToxMDIwMDAwMDk1MDQ0QkRDQzdFMDZCODNERUVERkM1RDI2NjkyQ0FFRUUKLToxMDIwMTAwMDQzRDUyMERBMkJCRjRCODlCNUUyRkEzNkNDODJGNTNEQTkKLToxMDIwMjAwMDVCRkI4QkExN0RFNjE3NkY1RkZFMjVDNzlGN0Y5NkY2NTIKLToxMDIwMzAwMDJCOTRDMTA1QjBERUVCMDJERDYxRTA0RjIzOEVCNTkyM0IKLToxMDIwNDAwMDQ0RjUxQ0ZBQUJFM0Y5RDU1MTMwREQ4NkVBMDVDRkIxOTIKLToxMDIwNTAwMDVFMkVBRDI3OUQ0M0JEQzJEMUZCM0JDRUVEOTI5Nzc2NjAKLToxMDIwNjAwMDNGRUEwNDNCRjVDM0E3REVBRTA1M0JFMEQ2RkY5NDg4MEMKLToxMDIwNzAwMDQyRTlFMUY4NkUxRjg5QTNCRDEyNzM4MjdEQjM5Q0QyNDEKLToxMDIwODAwMDVEMENDQkYxOTlENzk4RUM2MTRBRDFCODBFQjczRUUzMUQKLToxMDIwOTAwMDQzM0I2MkY5QjNBRTU4MEQ2REJGRkM4N0JGOUY0NjI4MjYKLToxMDIwQTAwMDFFOEVCNzBDRkU1NzBFRDBGMzUzMDI4QkJCNDYwN0E2MEQKLToxMDIwQjAwMDVENDNERjJGOTdDOUJGODQ5M0QwRDE4RDEyRTNBNzBGNjMKLToxMDIwQzAwMDdFOTRCMjA0RUM0NDYxNjdERjBERDg2RkVGNTcxQzJFOEQKLToxMDIwRDAwMDkzM0U1RTIyMzk3MDVDNUEwRkZEODhFODJFMjEzNjUxRkUKLToxMDIwRTAwMDYwRjA5OUZEMDEyM0RFRkRDMTJFODFDMUI3RDcxMTczQzgKLToxMDIwRjAwMDAzN0MzQjdCOUMxMTVBNkZENUNFMTM0OEQ3RjM5RkY5RDUKLToxMDIxMDAwMEFFMUZGMEIwNkFBRkQ1NEU1RkI1NTM4QUJCQTZFMUYzMDAKLToxMDIxMTAwMDZENzg4MjA2MTU2NjAyM0UxOTNGQUZEQ0IzMDJGNUM2NDQKLToxMDIxMjAwMENBREUwRDI3ODA5RjU3RUQ3NTU4RTQzRkM1NEIyODBFM0EKLToxMDIxMzAwMDc4N0Q1MzBBRDU0MEY5MDc0RkZBMzU4QUFBRjdGQjFGNzUKLToxMDIxNDAwMEY3MDM1RTY5QkYzNzNBMjk1RDJEOUM2RDZEMDdGRDlGRDIKLToxMDIxNTAwMDRBMUZERTFGRjUwQ0QxNkY1RUQ1QkI4RThEQjdFN0VBNDcKLToxMDIxNjAwMDNGODBCQzVENDU5ODlFMzJGOEY5N0RGODI1NkJCODlFOUUKLToxMDIxNzAwMDU5Mjc1OUUzNUIyN0M5RTE5OUI4MEZCODMzMjNBOUZGNjEKLToxMDIxODAwMDZDRTgxNTgzQUY2RkZERUVDOTFENTEzQUZFMDdDRkZFMTcKLToxMDIxOTAwMEZGMUQ1MTNBOEZEQkZFRkFGMThFQkJFOUZDQzgzRUI3NUEKLToxMDIxQTAwMDBBRjI2QUQ1NTM2RkY4ODkwOUZGOEY0OTZDM0ZFMEY4NEUKLToxMDIxQjAwMEFFMjc5RkQ4NDZGOUU0RjhBRjVDNjgwNzFFN0ZFMTBGQjEKLToxMDIxQzAwMEUzMzQzQUZGRTNERkZGRDMxOEIwNTNEN0JFNzBEOTU4REEKLToxMDIxRDAwMEMwQzdEQUU3RTY4RjFEQ0Q1RTA3QkE4REI5Q0NFQjFCMjEKLToxMDIxRTAwMEMzRkVCNUJEMDI2QzgyMTBGMjNDN0ZEQUQ2RTlDMDFFOTgKLToxMDIxRjAwMDI5MEUyMTgyMEY4RkJBNjIyRThBOUY1NUY0NUQ2MzI5QzIKLToxMDIyMDAwMEFDREIwQUQ0NTc1MEJFODdFMjdCRTVFRUNFMTNEMkI0RTYKLToxMDIyMTAwMDY0Nzg4RkU2ODg0MTc4QzY3MzQ4MTBENkZEOUE4NTk3MTIKLToxMDIyMjAwMDk2QzFEMzExRDI4MDRFQzgyMEVBMDk3QkJCNTU0N0U4M0UKLToxMDIyMzAwMEZBNUUzNEYyN0E1MjdCQzIwOUY4NUZCNTdCMUQxQkI3OTgKLToxMDIyNDAwMDk3QUVBNzdGRjg3QTdFMDhCRjVDM0M3QzNEMEY0OEQ2RUUKLToxMDIyNTAwMDM4RDM0OTcyREI3N0I2QzFDNzNEMTlCOEZFMjNBREU3NjUKLToxMDIyNjAwMDhBRTdBRTFERDVCRjMzRTRDM0Q5RjA1QzJGMzBCOEVFOUEKLToxMDIyNzAwMDk3RjRENzI1RTBDNzY3OUY3RTYyNUI4MEFENzMwRDQ1RkQKLToxMDIyODAwMENDRjFFRjlFMUMwNzlCQkNFRjM5MDY2RjAwMzkzOUY4ODMKLToxMDIyOTAwMDgyNEIwNUJCN0FGOTBCNkYyMkRGMUQ3RkVFNTVBNzg2QjcKLToxMDIyQTAwMEZCRDNDNDJCNTAzRDc5OUMwQ0ZERjQ4M0RFNUMyOUIwM0MKLToxMDIyQjAwMEMyQUFDNzdDNzE5NzNGQjE1RTJCNjM3NUQ1OUExRkRGQTkKLToxMDIyQzAwMEJGOERFRjYzOEMxRjU2QzZGQTE2MEI0OUQ2Q0YyQjE3NUUKLToxMDIyRDAwMDMwRkQxNENCNDRCQ0FDRDBGQTlEQUFEN0JBQUVDMjZDQzgKLToxMDIyRTAwMDU4Q0ZCNzE3MDBGRDhEQjQ5RUM2RkM1NTk4RkYyQ0QzNzAKLToxMDIyRjAwMEJBM0VDNkY4NzgyNDdFM0RERUUzOTI4NUQ0RTFFQjdDREQKLToxMDIzMDAwMDlDREIxNUFCNjJDMjlCQzlENjlEOTAxNjE2REYxQjIxQzQKLToxMDIzMTAwMEVFNkQzQ0VENzRFMTk0QUQ3QzZFQjQzN0U2N0YzNjNFRjUKLToxMDIzMjAwMDNGRkJCQ0NFMEY2RjI3QjlCRUI2RTNFRjgzRDNDOUY1MzEKLToxMDIzMzAwMDQwODEyQzcwQkRENTVEOUQ2REQyNzc2RTA3RDU2M0Y5NTgKLToxMDIzNDAwMDYwNzczNjQ0NzNGMjEzRjA3NkY0NEEyOERGM0ZEODI5RDkKLToxMDIzNTAwMEExQkQ2Rjk3MTMyQjQ3RjBFQjQzQzYzODdCRkJBNjgxREIKLToxMDIzNjAwMDNDRkI2MEZGOEYzODNEMzI3QTVGQjlGQjZENjc5NEVCQzEKLToxMDIzNzAwMDg1OTg1OTJGNDA3RjQ5RDY2MzBFRUY2RkQ1RjNDOUZCN0YKLToxMDIzODAwMDVCQjVGQjQ0RDJGRURFOTdGNUFGMDBGQ0VGRjczQjQ4QjAKLToxMDIzOTAwMDk0NzZGMTdFQUY5NDM0NEU1MjI4M0IyQzc2NTY4NzZGNUMKLToxMDIzQTAwMEU2RDE1NERBNEVGMjdCMzQ5ODc3NkI4QkZFNjYxNEVDRjAKLToxMDIzQjAwMDkxRDcxQzA0RUQ0NzM5RjQ5RThCN0U2RkY1Nzk3MEJGODEKLToxMDIzQzAwMEE1RDU3RjMzRDE0Q0ZBQkJDRDg2MjczOTE4NDYzRjVBNjUKLToxMDIzRDAwMDBFODRDQkQ4NUU2OENDRTJDRjNBNTREMTAyMzc5MUEzQjkKLToxMDIzRTAwMEI5QjBDRkY5NzJGRTFGNjRFODE3RTI2OTlBMjkyRUY0OUEKLToxMDIzRjAwMDhBNENEQTIxOUVGNjhBMkU4NDlBNDk5MkI4OTZBREZGQ0QKLToxMDI0MDAwMEYwNUM4OTY4NjYzQUQzQzc4QkU2RjhBMjdGRkY5RDE4MTcKLToxMDI0MTAwMEQ3NjgyNDBENzE4ODM3OTE1Q0QyRkJCOEE5REY4NzlCMDAKLToxMDI0MjAwMDM0MTY3NzBEOEYxN0NERjEzRjU3NDM4M0VFQTI3MEU0M0EKLToxMDI0MzAwMEFFNTUwQkMwN0YxQjY5RkNCQzA2RUJCRUFGMzFGRTFBNkMKLToxMDI0NDAwMDFFOEYyMDNCOUY3QUVBMjk1QTFFMEZERjQ0QTBDM0IwOUIKLToxMDI0NTAwMDhFNzA5QzY2RkJDQUYzQjkzQzdDODlEQkNGRkIwNTcyQUUKLToxMDI0NjAwMDEwRUNCMEVBN0IyMjMyQzgzQjIxNzgyM0M2NDUxN0U0NDIKLToxMDI0NzAwMERFMjgyRjMzRDFFMzgyRTA4OTJDRDBBQkRGRjk4QkI0OTcKLToxMDI0ODAwMDI0MTk5REVFRTU3NEQ1RkNBRDI3QjJBMEZEMzZGNzU3QjMKLToxMDI0OTAwMDcyOTkzMzFCNDZGODcyNzhCQ0VCNjBFNkU1NUU4OEVGMTQKLToxMDI0QTAwMEY1RERCMkUwRjAyNDNBREY2QzU1MjIxMEFGQzkyNjE1RjUKLToxMDI0QjAwMERFMTIwQTY3Q0UxMTI5RTQ0RUIyMEVDNjczMDc4RkVCMDcKLToxMDI0QzAwMDNERDJBNEEyRkM3RkFDMjk4OEU1MjczODVFNzczNjE1N0IKLToxMDI0RDAwMEUxRjNBOUE2MTA3RURGREQzNDFCQ0JCRDRERDVGODdDMjIKLToxMDI0RTAwMEI2Mjk4Q0VGRkQ3N0ZEQjhDRjA5NzhCOTk3RjQ0MkJDRDcKLToxMDI0RjAwMDY2NEZEMzEyRkNGRUMzQTYwODNFMUZFN0YzNTkwMDc4Q0YKLToxMDI1MDAwMEYxNUFFNjhGRjE5OEJENkRGMzVBMjAxRTYzRTBEMThFMkIKLToxMDI1MTAwMEY3NzkyNDdBRDA4NUZCRjk4MjA2NzhCRjUzNjZGMkM1MzUKLToxMDI1MjAwMDhFREY3MUFFNUUwMUU0NEJFMzZEMDRFREQ3MUQzQzZFQjIKLToxMDI1MzAwMDZDQ0NGNzIxOTlEOTlCN0IzODNDM0Y3NDQ3QkUyN0MzQUQKLToxMDI1NDAwMDdFNTM3NTYxMzFEQTQ1MjQxQzAyRjlCRDQzMDhBNzk2MTQKLToxMDI1NTAwMEQwMkEyRjY2Q0UwQTlBRTU3MEI2MkZCMjQ3MzZFRDJCRjkKLToxMDI1NjAwMDhDRUI2MkYxOUU2RDMyOTM1N0UzQjUxMzdENjkxNDBGQzYKLToxMDI1NzAwMEQ1Qjk4MjA2RTEwNDYzQkVGQjJCQjQ1QzkwOTNGQjA1RTYKLToxMDI1ODAwMDAxRDdCQjNBNTcyMjQ1MjZCQTM3RkFGQjBGNTlFNEZCNkQKLToxMDI1OTAwMDFCQzlFNTc2ODI4RTk5M0M0OEJGNDIyRTAyQkZGNjI0QzUKLToxMDI1QTAwMEYxODQyNENBRUZGQkIyQzgxRTQyRUQ4RjdENDA5NzIwMTQKLToxMDI1QjAwMDE3N0U5QjgyNzE2MkMzQkZEOUM4RDczQjFEODgwMkYyQzgKLToxMDI1QzAwMDI1REVGMkM1NDBGRThDRTRGNzc0RjBGQTFGNzFCODU2QjAKLToxMDI1RDAwMEM4RTFENzY1REM1N0U2RjE1NzEyQzczODI2QTQxQzAxQkQKLToxMDI1RTAwMDNENkU3MzJGQkRCRjhBM0VFRjlCRjNGRTUxODgwRjdFNzkKLToxMDI1RjAwMEY4OUM1QjAzQjgzNjk1MURGMzlCRjE0OEVBRTUwRkNDRDgKLToxMDI2MDAwMEZCRjE0M0YyRTY1NDBFQzZDNUZFODc0NERFOTZDRDcyNUEKLToxMDI2MTAwMDI4MzBFODg0RjZGQjA0NkQzM0VDNUY0N0RGOTA5MEZGRDEKLToxMDI2MjAwMEY2MDlCMTI5MThDNzkyMDlGQTA1RkI2RTA5NjI3RTg3N0YKLToxMDI2MzAwMEQxQ0UxN0IyRjI3N0JBN0I2MEZCMkE5ODc3QkQzMzE0RkMKLToxMDI2NDAwMDREQzIxN0JGNEVEMTJDRkI0NkFFQTBCNTdEMTA3NEU2MkYKLToxMDI2NTAwMDBDNTZENjI4N0Q5NkYwNzk4NzY0NUQwMjM4NjY5MDA4MUUKLToxMDI2NjAwMDNFNjcxMTBEOUY1OThFQzhFNzMwOEZFOUE0MzcwQkNBMUEKLToxMDI2NzAwMDJEMjlFMzJFNjFGQjA3N0YzN0JDMjk4RTdGNDBCQzE5RDMKLToxMDI2ODAwMEY0MUE5QzUzODQ3MDkwQkJDNEQwNDQwREJENDkwQjlEN0IKLToxMDI2OTAwMDJGNzQwODFDQkYwQUNBRjNFQ0ExRkRBOTg2OTdGMjAyQTkKLToxMDI2QTAwMEQ4MEQ4QjkzQTgyOTI4MDdCM0REMEM3RjhEMDMyNzMwMjUKLToxMDI2QjAwMEJFMUIxQzQ3MkM3MUY3RjY3QTExRjk2MERCNUI2QzVGNkYKLToxMDI2QzAwMEVGNjQ3REMxRTY0OUI0N0UwNUQxRUVBRkNBMUYzRTBGNkYKLToxMDI2RDAwMDgzM0ZCNjI5RTFENDY0RkI1M0M2RDNFMDBCQTNCQzc5OTYKLToxMDI2RTAwMEZDMEQwNEU0RDBCRjhGQkYwMUYzOEVCMkRGNzI2QkUwNEMKLToxMDI2RjAwMDc3NTRGQzZFNTczM0M4QzVGNkI3NTk3RUM1NTE0RjY0NDEKLToxMDI3MDAwMEFFNjM0NjQyQ0VCNERGRDIzMDFFRkMyMEI3MkY1QzBFNDMKLToxMDI3MTAwMEVGQzNCOUIxRUI0MURFOURBQzVFRUJDMkE5N0I1OURFRTQKLToxMDI3MjAwMDRCRTMzRERBRTZDOURBQzhFQkIzQTM3MUY0RkQxQjYzRjIKLToxMDI3MzAwMDVFM0I2MDVFQTNFQzVGMThGMzMyRDZFQjY0RjVFMkMxNUEKLToxMDI3NDAwMDlCMzU5MDMzODVBOTkxMjRFRDg2RTRDOTE1OEI0NzFERUYKLToxMDI3NTAwMDdGMDdENzJCNzRGRTRCQ0RGNDM5QUU1MUM1RkMxNkEzQzEKLToxMDI3NjAwMEJEMzE1RjdCN0JGQjdDMTNGQkMwRTc5NjE3RDRFQjIwNkUKLToxMDI3NzAwMDE5NDBFRkRGRkZGM0I4MUZCQzgyQTIzMTJDODE5RUE2NjcKLToxMDI3ODAwMEZDQjkxMkUwOTk0OTFBQjA0Q0U0REUyQ0IwNkYwQzdBMTcKLToxMDI3OTAwMERFRDZGMTQ0MTZFQTA1Mzk5NjhGRjk1REU3Mzg1RTNCREYKLToxMDI3QTAwMDA5ODcyQjgwREY0MjYyQzg2Q0FGMThDRkQ2MjEzQThGRTEKLToxMDI3QjAwMDYzNUNENUM1RTU4MDk4NzI0RjMwMTk5RTg3RkFDRkI1MTYKLToxMDI3QzAwMEYyRkY0NjQyOTg5QzhGMkIyOEU3MjE1MEE4RDI3MkZFMzgKLToxMDI3RDAwMDIxNTJCQTlFRjY1NzBGNDlBMTc0OUMwQTk5QzU0M0E2ODcKLToxMDI3RTAwMDFGRDI3QTI0MTY1Nzk1RUE3QzI2M0NGMkZEMDYyM0JFQkEKLToxMDI3RjAwMERCNEVFRTIxQUEwNjdFNDU0OTFGNTQzN0Y4RjQ4MDMzOUMKLToxMDI4MDAwMEYyQTAwM0YyRjA4MjFBRTY3QjNBMDIxMTgxRURDN0IxMjEKLToxMDI4MTAwMEZEQTEyMjZFOTc1QzI2MkQ1NUMwMkU2OTI0NjFFNTAyMkMKLToxMDI4MjAwMEUwREIyMzEyNjE3OTc4OENBRjVEQzYzRTE4RTc2MzE3NTEKLToxMDI4MzAwMEU3NjNDQUMxNTg5RUM0QkYzRkNGRTk2QjJGRDgyNzY4NTIKLToxMDI4NDAwMDRGMzAzQURBQzNFRDkzQUFDMUMxMDMzRURBQUVBOEJGNTYKLToxMDI4NTAwMEJCMTJBNkYzMkNEODJCMkVCMDRGNDJGOEZEN0I2MEFGRjUKLToxMDI4NjAwMEQwRjI4MUI0N0ZCRkYyMDI4QTk3OURCQTE4MDI1Q0VGNjIKLToxMDI4NzAwMDZFRDIxOTNGMzRENUUzRjc0NjEyRjVBQzA2QjlGNEIwODEKLToxMDI4ODAwMEE4MDI5QzlEMEZCNzQ4N0U1QURFQTUwODE4QkY3OEI4RUQKLToxMDI4OTAwMEE5MDFFQkZCNEY3QkUyRTA2RkVFNTJFMjAyRDgyMzI3NjcKLToxMDI4QTAwMDQzMjQxNDA1QjhBOTdCMDRGMzlBQzRFNzUxRjE0RTNGQzEKLToxMDI4QjAwMDZFOTczRjExRkJFOEY3RjdEMzdBNUI2NjdCNzA5RkNDOEUKLToxMDI4QzAwMEUwQUY0OThEODNFQTk1QzA1NzhGMUZEMzU2MDNGQzMzODEKLToxMDI4RDAwMEQ2RTg1MDdGNjNBODAwRjcyOTlFQTRGODgyNzVEQUI5N0MKLToxMDI4RTAwMEY1QTNBREZERjRCQjVGRUU1QzBEN0VGMEU0QkM0NTY4ODYKLToxMDI4RjAwMDBGRjk5NTdGQkYxRENBN0VGNUU5N0ZDNUE3RjJBMzZGQ0IKLToxMDI5MDAwMDgyQkU5RTFDMTMyREZCRTc3RUU1RTc3N0MyRjdDQTgxRTYKLToxMDI5MTAwMDUwNTUyQUVENjdDQTkxRkVBRTJCRThCMzNEQjQ1NjA0N0MKLToxMDI5MjAwMDEyNEY0REZGMjNFRTZCRUMxN0Q0QUY3NzQzNUNFRDQ2QUYKLToxMDI5MzAwMDI3RDJBQjdFNTQ2RjA2NzY3NDk0NTlGMzIwMzMwRjQ3MzkKLToxMDI5NDAwMDIwNkQ4MThDM0Q0OEYxNEUwMEVGQkEwQ0ZEQkVFN0M4MEEKLToxMDI5NTAwMDQ3M0EwQkZBQjNBQUZDQjRGQ0M0NjNDNzdFN0EwNUZEMDAKLToxMDI5NjAwMDdFNjBFQjFBOTQ4QkFFODc2NUI0QzcyNkZGQzc1QUYyMTgKLToxMDI5NzAwMDBEOTM5QzcwM0QyNjI3Q0QyQjdEQ0ZFMTYyN0NGNEYwM0EKLToxMDI5ODAwMEUyRUUyOTFBMjM0RkUwQkYyOThGNTcyOTI4MjcwRTVCMzMKLToxMDI5OTAwMEYzMUM4QzdERTExRTEyNzlDRjgxRjRDQ0VDMTM1OTY1QzgKLToxMDI5QTAwMEZCQzhCMEU3MDVGQjg5NjRCQkM4RjgyNDFDRjE5OEYzQTkKLToxMDI5QjAwMDlGOEIxRTEyQzNDOUUyRENBNzFDMzJDRUFCMkQ1NjU1MkQKLToxMDI5QzAwMDA0RUIyMDlGQjkwM0Y3Qzk0OEI3NzU3QzYzM0MzQUZFMTYKLToxMDI5RDAwMDI5QjM3QzkzNTUwNjU3MUVBODdFQkE5RTdEQ0VERjY0MzAKLToxMDI5RTAwMDAxRkNBNzFBMEMzRDE1NDczRDc1QjA0NDhDOEZBN0YwMkMKLToxMDI5RjAwMDNERjBBMDE4ODNBNENDMDNENTRDNkY2RDkyNTlCRUUwNzYKLToxMDJBMDAwMDI2NUU3RUVDMzQ4OTA5RjkwOTNFOUFDQ0Y5RURCMTg3NEUKLToxMDJBMTAwMDQ1NjZDRkM1MDhFQTM5NzJGQTBDREExNzVFRkUzREJEOEQKLToxMDJBMjAwMEU0MzUwNUY3MjdBMkJBQjc2MjI2NjYwNUYyMUYxM0JEODMKLToxMDJBMzAwMDUwMUM1RDE0RjU1OEU0QUNEODk4NkU1OUZGM0M2QUIxNEYKLToxMDJBNDAwMDU4RjNBOTBCMTJGNTI1OTBFMzQ3MTRBMERGOTNENDZGMzgKLToxMDJBNTAwMDA1RkE5REM3Rjc4OUFBOEMzQzRDRTlGNDc0OThGRjc2NzcKLToxMDJBNjAwMDQzQ0YxQTc5MzNCNjNDRTlDNzFCOTY3OTIwNUVGOEEyQUEKLToxMDJBNzAwMDQxM0ZGNTBEM0FGQTNGQUEwQkM3MzNGNjA5OEI2RTBCQUYKLToxMDJBODAwMDQ3NDE3RjNBNzJBREY5RDMxNUI2RkNFODc5QjZGMkY5NTEKLToxMDJBOTAwMEM2NTc0QTlERjYzOEVBQzYyOTQ4MDc5QTFGRTU1NTIxQzgKLToxMDJBQTAwMEM3RjNFMzE3NTM3NzNFNzU3ODlDNjVBODVGMUU0NzIwRjAKLToxMDJBQjAwMEREN0U1Q0JGNDI0RTQwRjdERDI1RDU4MzVGRTA3RkEwMjEKLToxMDJBQzAwMDM0Q0Q5QzVGNzBCOTkzRDlERDA3N0ZFQjIyNjBFN0VGQ0YKLToxMDJBRDAwMEFBNTIzMDlFNjlFNDc1M0FGOEI4QjU0RTBERUJFRDdBMUUKLToxMDJBRTAwMEYwMEUwNURBNzcwNjBBREM4MEFGMDM3Mzk2N0IzMEZGQzEKLToxMDJBRjAwMDgzRTdBNzFBNzJCNzY1Q0VGMjJCNkYwMTc5OTgyOUEyRTYKLToxMDJCMDAwMEVFNjlDRjZEQzk4NjdERjkwN0FBMTRDQzNGRjVBNzBDRjUKLToxMDJCMTAwMEY0MUVBMDY1RUY5M0NFRDAyM0Y0RkJBRThBRjgxMjczQjcKLToxMDJCMjAwMERDRTYwRTI3RDM1RkQ3M0JGOTNFRDA0NjZCRkUwNkU1QzkKLToxMDJCMzAwMDgzRUI5RDkwMUZFNjZEQzA3RDRCNTFFMTc5QkMzNkZGNjQKLToxMDJCNDAwMERFQzA4NzdGRkZGNTYyQkU4RjNEMEI3Q0UwOEYzMkZBREYKLToxMDJCNTAwMDg4NzFGQUQ4QzFGREQzODc0MUZFQkI4MDZFOThGQ0RGMzcKLToxMDJCNjAwMEM4RkQ1MzdCQkYxM0VCQzNGQjlENjA4N0REQTY5NjQyNzgKLToxMDJCNzAwMDI4Q0FCRUJFMTNCQUFDRjY0NDdFRDQyQUU3QzZEQkU5NDcKLToxMDJCODAwMEJFMjFEQjUyM0ZBN0JFQzBGMkREMTdCQUMwNjY5RkM0QUMKLToxMDJCOTAwMDk5NUUyMzZDN0QzQUREREUwOTIwQjc0QkE5REU2NTc2QjAKLToxMDJCQTAwMDg2MkE4NkNERkIyQTM2QkQ1RUVGRDA5QjlDRTc2MURGOEYKLToxMDJCQjAwMEY4NTNDMjBEQjAzRTc2N0I3QTAzNUY5RkFGQ0FGQTNBRjQKLToxMDJCQzAwMEU3MENGNERGMzZDMDkzREFDNzNDNUZERDZBN0YwQzgzMjUKLToxMDJCRDAwMDkzNTAzOEE3OEUwQUU3ODNFNzAzRTdEOUY2RDlFQ0ZCRDEKLToxMDJCRTAwMDZCREY5NEMyNUI1RkExQ0ZGMjU0OTYwRkQ5RUU2M0ZFMDgKLToxMDJCRjAwMDdDM0JDNDUxNjlGOUM3OUMwRTlGNzY0QUQ4RkY1RTNFNjQKLToxMDJDMDAwMERGRjIxNDVBM0YwOTdGMUJGMUQ1RTcyMUYxMDZFQThENjcKLToxMDJDMTAwMDREOUU2NzA5MTYxMDdFQ0Y0OUZFRkQ3OTI3REJDRjJFMkEKLToxMDJDMjAwMDFGM0ZGQTM4RkI2MDFDRkFEQ0U4RDA3RkU0MzRDNUYxQzIKLToxMDJDMzAwMERBOUNGQTdGOUFDQjcxMjdEQjdGMUU1QTE3OUU0NzY5NzEKLToxMDJDNDAwMEQ4NjM3NzM4RjQzRTczRkRDNEQzMkEzNzhEN0Q5MDRDMUEKLToxMDJDNTAwMEJFOUUzRUMyRjhFRkM1MjVDQkQ2NERBNEZDRUNDQ0Y1MEMKLToxMDJDNjAwMEEyRkQ5M0I5QTQ2REI1RTg4N0ZDQTM3RTE1RkM4MTRDNDkKLToxMDJDNzAwMEJFOEY0RjE2MzMzOTZBRUNBQkE3RDc1OEU1QUFGREJDMTcKLToxMDJDODAwMDk1OEJFN0M1QkJFQ0U3NkNCODdDQjVEM0UzNDhGMkY1QjAKLToxMDJDOTAwMDc3NEVFQkJFQzY1MEZDN0EwNEJBQjJDN0FGMUJFMTU3MDEKLToxMDJDQTAwMDY2Njc3MjNCMzg5Q0JBNjhFQUM4RjRGODcyRDNFMEE2NEIKLToxMDJDQjAwMDgzMTMxM0U1NTdFMEZDNEM1MjNBNjBGQjg5RkVGRDdGMUQKLToxMDJDQzAwMEFDNTk1QzA2RkI3NjJDOUVENkRGMTQyRjdGNjc2MjQyRTAKLToxMDJDRDAwMDdFODVFN0E2QkQwODcxQ0Y3MDU1MUFDQTlCREFFMEE3QkEKLToxMDJDRTAwMDlCMEU1MjdGQkM0RUVGMkI3RkM3MzRDRjdFOTU0MjNCNkQKLToxMDJDRjAwMDYxMTQzRUQxMUQ5RjlCRjlFQjQ5ODFEMTRGM0IxRkVGRTIKLToxMDJEMDAwMDdFOEU0RkJCMURERDI5NDY1REQwRUYyNzY0NDAxNzkyQjQKLToxMDJEMTAwMEY4QjVFNjc5QjcyMURFMDZCQzQwNjcyM0NEM0JFNDYyMTcKLToxMDJEMjAwMDdDRTU5RkREMTA4MjM4OURFQjhDODQ3Q0UwMUE2RkQ4QTcKLToxMDJEMzAwMDJEMjFCNDVCQTZCQkQyRDhCOTBGNkYwMUVFRTM1MTNGOTIKLToxMDJENDAwMDdEQjAwRkQ2QzFDQkYyRkIwREZERjhCMTExNEZFNTdBODYKLToxMDJENTAwMEVGRjYzNDU2REVEMEM0RTJDN0FFMDMxN0JGQTlEMTc2NzIKLToxMDJENjAwMEJFQzMwRUUyQTZFRkQ3NTFCOTBFNzFDMDJFNkFDN0MzMUIKLToxMDJENzAwMDc3N0ZEOTAwODEzODdBMkJBRDFGMzFGOUREQURBMTRBQkIKLToxMDJEODAwMDE1RUM4NEI2RTI1MjQ1QTNERkE1QTk2NTU4OTZGMzRCMkUKLToxMDJEOTAwMEQ1NEEzQUU2MDVBRTZGQ0ZDRjg0Mzg3OEExODg3OUI1QTkKLToxMDJEQTAwMEM1QjREQzRDNERCQTU0OTc4QUYzN0JCOUU4MUQyRkQ4RDMKLToxMDJEQjAwMDY3QTlFMDlDQ0Y0OEFDQTdBMzJDQTI0QjE0MUU0NzUwOTgKLToxMDJEQzAwMEFEODQ1QzhDMjFCRENERTk4Q0JFN0YwNEUyMjU0RjBBMjkKLToxMDJERDAwMDkxOTkyRTNBRkY5N0Y5RjlBQjRFNjc0M0QxMUFGMDdCRTAKLToxMDJERTAwMEU0QTgwQkUyMDc4RDBBREI4NzAwN0E2ODlCOUU4MDdCNTQKLToxMDJERjAwMDFFQzdBRjkzOEYzQkU0MDdGMUY1RkM0NDFFODg0MjZBN0YKLToxMDJFMDAwMDZCQTc0OEVBOTNBRENGMTUyRTI2RTdEQTU0NUQxRDk1RTIKLToxMDJFMTAwMDlFNTRGOTczNEJGRUY0NUNDNjRGQ0UwMEE1QTcyNEYxNzcKLToxMDJFMjAwMDQ3QkJCQzI2QUU3MDlEMkIzMzkxQUY0NDE3NTY0NTNFMzEKLToxMDJFMzAwMDI1Q0NERTMzQ0VGN0JDRTNENEFGNzVEMTc5N0NDQkNCRDgKLToxMDJFNDAwMEU1NTg2RTNBRDIyOTdENUZFOUY5NDI3MjlGQzU2N0Y2NkYKLToxMDJFNTAwMENGMkQ3QkI1MEFGQzkyN0UwN0M2OEJGQzEzQzhCRjg0QkUKLToxMDJFNjAwMDRERjJGNjkwMEI4MzZFRjRDOUVDQTRGNTk0M0U2MjkzOTgKLToxMDJFNzAwMDU5NUM4MjAwRERBNDUwNDUwQ0ZCOTA3OTYyRUM5MTdDOUEKLToxMDJFODAwMDgwQjdBNzdBMDJFREFGNTM5RTQ4MkRGMzQ0M0YxNTc5RTIKLToxMDJFOTAwMENDRkVERjU0RTlBOTM3RkIwMUVGQTVCMEZEOTdCNURFMDUKLToxMDJFQTAwMDhBNjcwMTBGQzVERTU4MjVCQUNGOTA5RDM5ODY5RDlGNTAKLToxMDJFQjAwMDAyM0FCRTUwMjUwMzgyMDg3MjMwNEM5OERFMEMyOTRDMzEKLToxMDJFQzAwMEJGNTZBOTcwNUU0QTIwMTE3MjI2NjUzNEZENjgzRDU3RDEKLToxMDJFRDAwMEY1OTQxQzZCRjEwMDNFMDIyQ0RFRTVEQjJBNjAzMkEwOEIKLToxMDJFRTAwMEQ0QUJDNzNEQjQ0RUE5Nzc1MTlCOEJFOThCMjIxOEE3NzEKLToxMDJFRjAwMDZGQTY4Nzc4NjlGRDRGRkI5QzY4MUZGNkZBNzI2NEMwNjUKLToxMDJGMDAwMEVCM0U3MUQ5NzcyMEZFMzRGODJCMTdFNjM3RjZGRUU1NTUKLToxMDJGMTAwMDAyQ0NCRkVGRjU1REIyMDBFNDc2QUY0MDBFNTE2NTRGRDUKLToxMDJGMjAwMDJBNEVFNUYwNjQ0MzkyMDJGQjdDRkVGOTNBODE3RDhFRTUKLToxMDJGMzAwMEMxMTc0OTA4RjI4MzFEQzE5Rjk3QkYzMzFEMjc5RTIyRTkKLToxMDJGNDAwMENFQTZFRERDQTRDQjREREI4NTNFRjc3QzNDOEZEMkQ1MDUKLToxMDJGNTAwMEIzREVEMjJEMTc5MTQ0NUNDNTg4QTc1NEE0NDRCNjAzQjAKLToxMDJGNjAwMDlDRUQ2MzdFNUQwRjdDRDM0NUUxOTREMDdFRDU4MzAwREMKLToxMDJGNzAwMDc3NjlBNjg4RjE0NzkyRTk4RDREODQ3OEQ5QTE0MDE1RUIKLToxMDJGODAwMEU0OEY1NkM4MjU5ODFBRUI5RkNGRDZGQkE4MjdGMjM4QjYKLToxMDJGOTAwMEY0NTNBNUQ2NTU0MTdDQkRFQzg4ODY3Mjc2NDE3MEY1MTgKLToxMDJGQTAwMDQxMjhDRjdDOEI5NURCOUQ4QzVGMjA1RTQ0NEM3MkI3QjMKLToxMDJGQjAwMEUyRDQzODlDNUYyRkE3OTNCNkEwREVBRjBCQTNGMjhEQUYKLToxMDJGQzAwMEVEREM4MTM1NUZDRTRDMDc5MEU3NkVBMjgzODhDMzRDNjEKLToxMDJGRDAwMDA3QjMyOTFENEMzNUQzODEyRTlDMEYxRERDOEJDQUZBRkIKLToxMDJGRTAwMDhCRjA4RkZFNjY5NTkwODhEQjBERTc4M0Q1NEE3QUYxRUEKLToxMDJGRjAwMDcwN0UzMUUwNTg1Rjk2MUUwMDM5NkFGMDg1M0FFQjFFMEMKLToxMDMwMDAwMDk0QUJBRTFCOUQ2MUYwRDcwRDNFMzFGOEUzNTNCNzAzOEYKLToxMDMwMTAwMEY5OTBGMkM5NTUxRUZBNUNFQ0Q1MkU0QkM2MjdFMDg3MTUKLToxMDMwMjAwMDk4RjlFMTlBMTFGOEE2OTYwQzFFMENEMDQ2QjUzMjg5OTMKLToxMDMwMzAwMEE2NTI1MUYyRjJDNUVGMTU4RTMzRjE4MTFENkZCNTczQjMKLToxMDMwNDAwMDA1NzJDQzIyQ0Y1OEQ5ODQ1Nzc1RTg3Q0EzNzRFRUY4NkEKLToxMDMwNTAwMDdGNERENkRBMDMyNjNFRUNBMDdFMDgxOENCNUQ2Mjg4NTEKLToxMDMwNjAwMDgwNUUyOUY1MkVGQjE0RTg1MkFFRjk3RTEwRkM0MTg3RjQKLToxMDMwNzAwMDJCNUM4Rjc5QjNCMzNFNDhCOTk5RDJFNUE3NjM0NDBENzEKLToxMDMwODAwMDI2REZBRTJEN0IwNkY5Rjk2ODBBMDFGQjY0RDNDQ0U1OTcKLToxMDMwOTAwMDE4RjdGREY0OTZDODc4RDAxM0VCMjhGRThGQTE1RThFNEEKLToxMDMwQTAwMDhEMTUzMTA3NzM2MDJDREI2RkQ3ODJFQzE5MDlCMkY3RUQKLToxMDMwQjAwMDg0N0Y4RkYxQjJDRUVCMEQ2MDNEQkFDRTE2RjlCOERFNEIKLToxMDMwQzAwMENERjZCQkQ2QkI5OUJFNTlFN0VDNTY4MERGMDZGMzE1QUIKLToxMDMwRDAwMEQ1OUNFRjNDNEY2Mjc2NkM4OUMyRjc5RjRFQjc2QTEwNjEKLToxMDMwRTAwMDFGMjk1MTk4OUVEOUQyRDQ4QkY2QzdCQUE2QkRGOENDNjkKLToxMDMwRjAwMEE4ODkxMUM4QTdGMjE0NDUzNUQ4Rjc1NkZFM0E1RjcwNzMKLToxMDMxMDAwMDAwMUY1RkMwRjY2N0UxN0RCM0M5RkVDQTUxMTgxQ0NBMzMKLToxMDMxMTAwMDVGQTUwOEYwQTdEMjEyRDVEMjRENzI1NjExODU0ODMyNUMKLToxMDMxMjAwMDNCN0FBMzlCQzU1Rjk0MTY4MkRGOTVGRDBGRTE3RTc2MDcKLToxMDMxMzAwMDQ2NjE0OEI4MDlDQTJEREQyNDA0RjFGMzM4N0IxRjI4MDUKLToxMDMxNDAwMEQ0ODVBRjlCRkEwREQ0RjQ1QUY0NUMyRDVEODJENDUyMzEKLToxMDMxNTAwMEI0OUVGMEJDNEJCQkU2QzFGREFGREE0MEU1MUZFNTY5QUMKLToxMDMxNjAwMEMzRTkwODdFOEU5OUU4QzE4MERGRDg4NzVEQ0JGREVGOEIKLToxMDMxNzAwMEFBMDIwNUY5QUZCREQxRDkwM0FBRjkyQTg1RDk0NTlGN0QKLToxMDMxODAwMDA0MkE0NzNEMkYwMEZCQUZENDcyNDMzRjE3OUVCMDBGNzgKLToxMDMxOTAwMDFCOURDQ0Y2NjFBMTBDRkJCMEYwODQ3RDU4NzhDMjNFM0IKLToxMDMxQTAwMDJDN0M4NzdENTgyODdGQUY0OUM3MzJFQ0M3NDIxOUY2N0YKLToxMDMxQjAwMDYzQTM5M0Q5RkUyQjk0NjFGRjE1OUU3QjlCRUFGMUY5RTMKLToxMDMxQzAwMEUzQTYwNkZDRkU3QzUzMjM5NkU3Qjk5ODdGNDM4QUEyQzgKLToxMDMxRDAwMDQxQjA5N0JCRUU3NEVBOTA2N0QzQzJEN0VCODA1RTkwQTQKLToxMDMxRTAwMDExQTJFQkVBMEVCMDM4ODFGQkYwMDM3OERFRDkxRDE0OTIKLToxMDMxRjAwMDMxNkVENzExN0M4MDdDOEQzRUJCNjZGOEJBMjBFRUExODMKLToxMDMyMDAwMDNDRTNDNUE3NUJERTQyQzAxRURCMjE0NEVCNDk4ODkwNEUKLToxMDMyMTAwMDVCQkE0QUFBNjQ2QTI3MTQwNjU3NTdBNkQzRjJBQUFFMjUKLToxMDMyMjAwMDU5NkQ5MDc3Mzg0OTZCMEUyRDUzMTM2NUNENTdCQUZDMDUKLToxMDMyMzAwMEZCQTZGMkY4RTIxRUQ5MTMwMjNDQ0Y2OTAzNzkwMDcwQjUKLToxMDMyNDAwMEMwQTZEOUJENUQ3M0FCOUEwQkE5REY1NDQwMEQxNTkwOTQKLToxMDMyNTAwMDZCRjlDRTE4RDBGM0Q3NjFCRDI2MDJGQ0NDQkVCQjhBNzkKLToxMDMyNjAwMEI0MDYyMUFFMzE1RTczOTYwMjFGRDJGQTcxNDZGRkU3QjMKLToxMDMyNzAwMDU2QkY0NUQxRjBCREJEREQ2OEY1QzRCMjczQUE0N0E0MDEKLToxMDMyODAwMDUxRkE4M0VGQzIyOEZEQjQ5MzU2QjU5RkMyQkUwMTY0QzQKLToxMDMyOTAwMDA2RDg0NzZFQjZDRkRCRTU2MEZDREZFNTY2Q0ZCN0RENkQKLToxMDMyQTAwMDhDN0Y3RkU4QUVBQzc0RDM2N0E1OUJGMTc3OTczQjVDQ0UKLToxMDMyQjAwMDBERTc0RDA2QTc4QTE4REZFOTc1RDAyRUUwRjA0MTYzQ0YKLToxMDMyQzAwMEZFRUI3MDJFRTg4RTlGQzkwNEY2MEYxRUUyNzQzMDcxN0IKLToxMDMyRDAwMEJDOEZFOUU5QkIxNUQ0RDM5NzhGRkY2RTVCM0EyRDRGQjYKLToxMDMyRTAwMDdDMzQxNDAyQkRCQjgxODQzQzQwMjdEMThEMjJFNkExRjEKLToxMDMyRjAwMDNDNUQzNjIxQkQ4RTU2QkY3MEM2NzNFOUEwN0YzRTU1M0EKLToxMDMzMDAwMDk4RkM4OTcxN0ZBM0I5RkRFNkYxMTA5N0ZBRjQ1NTI2NzAKLToxMDMzMTAwMEZGNzY3MkI5RDNFM0U4NkZDMEY1OUNFMTQ1N0I4NTNBNEYKLToxMDMzMjAwMDBDNjg4RjM0MDc2NUNDMUYxMkIzRDhEM0U5NTBGRjA5NUUKLToxMDMzMzAwMEVBMzlBOUMyOEY1Mjc4OUM3Rjk5QTU2MEZDRTM5NDhCRUYKLToxMDMzNDAwMERGNkZEMThGNzY4QUQzMUQ1MUQzRThGQkVFQTg4OEZDQkUKLToxMDMzNTAwMERFQUE3QTYyNjA1NzZGRjA5NkUyQjlEMjY4QjE4Q0U3NjQKLToxMDMzNjAwMDRCMzYxNEIzRjg2OThBRUZCQTE4RDgyN0Y3RjdCOTk5MkEKLToxMDMzNzAwMDdDRjAyQTk4M0YxQTJCREU3M0E4MzIwMDRGNTEwNTdFNEQKLToxMDMzODAwMDhGRTk4QkFBMTFFRkFBQTg2MjFFMkFGRDBEQkZENzA3RUQKLToxMDMzOTAwMEYwM0NDQTA2QzJEN0E1NUVDNEYzNzRFRDYzM0VGRkY5RTQKLToxMDMzQTAwMDQ1OTA5NzczOTMxQUUyNzcwRTYwOUUzNzlBNUMyMkVDRjEKLToxMDMzQjAwMDA3MERFRTRGMDE3OEJFNkFEQzU3MzBEMDkyNDJFQkI3NzIKLToxMDMzQzAwMDJENTM0M0IwMEVEM0Q0Q0E2QUM4MjM2ODU3MkJEMUNGMkMKLToxMDMzRDAwMDQ5OTk1QUE1REM4ODcyNjhFODNDMDZERThCRDE1NjJDRTgKLToxMDMzRTAwMDYzMUUxMTdDMDdCRTI0NkRFNDIwOUM4N0NGRTFCMjJDQzQKLToxMDMzRjAwMDI1QUQ1NDAwRkJBQUJEMDZDMzdDNzA1RUMxOTI1N0RFQUEKLToxMDM0MDAwMDk2N0UyNTlFNDM5MjZBRDMxMUNFNzZBMjJCNTAzRjVBQzgKLToxMDM0MTAwMDIzQTNGRUNCRjEyQTcxQjAzNzcyOEM3ODJFMUNCMTMwMDkKLToxMDM0MjAwMEM1MUIzMjZFQjM5RUQzQzhBQTk3MkRFN0MyQzc0NkFDNjAKLToxMDM0MzAwMEU1NEMxRTNGQzhCNDlERTdGODU4MzFGNkM3QUM3OEIyRUEKLToxMDM0NDAwMENGMzcyM0YwNDgxQUMwOUIwMTA3NzlCNUUxRjNEOTEyQjEKLToxMDM0NTAwMDI4QUQ4Mzc5RTZBODFFODQzQkE4QjY1NDgwRkMxQTRCOUQKLToxMDM0NjAwMDFBOUE4MUVFQ0UxQjVFMUI5Q0QzOEFEQkZBNjFEREE3MjQKLToxMDM0NzAwMDY5MzJEMUU4RjgxNzkxQzExNkU4NzcwM0E3RjNBRTdDNUIKLToxMDM0ODAwMEFCM0U3RTQ4OTEwQzdFQkMxMEY4NzE3Q0EzNDhBMkE2OEUKLToxMDM0OTAwMEYxMjEwRTE5MzU4RDM3QTEyQkRENTI5RUQ4OUQ2REE5RDYKLToxMDM0QTAwMDNGNzk2QjgxRTVGQjk0RDgwNTk2RUYxN0VFMkNCNTk0MjgKLToxMDM0QjAwMEE3RjZDRUIxRDRCRjY4NkZBNUE1NUMxMkJGRDI1MjdGNkMKLToxMDM0QzAwMEZBQTE0NTk2RjI4Q0ZFN0ZCMkQ0OUY3NTc0OTlFNUZCMDQKLToxMDM0RDAwMEM1MDNDQjJEREYyRjc5NkY4REE1N0NFOUUwNUQ5NkZBRDIKLToxMDM0RTAwMDg2QkQ2RUQ3OEIxM0I5REQ3MkJFNzZCQTBCRUU4OUIwOEUKLToxMDM0RjAwMEM0NjVBRDdFODBERDhFNTdGRURBQUFCNTgwNUNGMzNCRjUKLToxMDM1MDAwMDkxQkU2NUQwRTNCNEJDRTY0RUU2NDcyOUU1MjEwREU0NjMKLToxMDM1MTAwMDRBMEU5N0EzRDkzRUJERDQwREZCQTk3RTA1RjU4MUVDREIKLToxMDM1MjAwMDY1RjU2NEVGMDJCNDNGQzY2REE1RjI2ODNBNTg5QjY0MzYKLToxMDM1MzAwMEU4N0IwQUM4RTVBNjY4NzlBMTI5REVFNDU2QkJGMTZDRjAKLToxMDM1NDAwMDU2ODVCRjFBRjczNzhDRjZCMkFBOTM4ODBGQzZEM0Q4MjAKLToxMDM1NTAwMEY5NkFFQUE1NDIzREI3NDZEQjlCRTZCNTRGMTRGMTA4OTAKLToxMDM1NjAwMEY0MjBGNUY3MUUzMUY5N0IyM0Y5Nzc3NjdGRUU1Q0ZEQzkKLToxMDM1NzAwMEI3NzEyMkYxRTBCOTAyMjFEQzAwQ0ZFMjg2NTcyQjIxOUUKLToxMDM1ODAwMDFEOThGQTc1RDcwMUZENkU3Mjg2RUI3QjY4QkY5QjBBQUEKLToxMDM1OTAwMDNDNkMxRjk0RkI3NTVERjlCREM4MTc4M0Y5MzJFQTE3QkYKLToxMDM1QTAwMDIyNkJDNUU2Nzg1QzMzRDc0MzI5Q0FEM0U4NTc1MkJDQUYKLToxMDM1QjAwMEEzQkMzNUYwQkU0MTE4ODhCNTgyRENCOUQzODNGMjcwNjQKLToxMDM1QzAwMERDN0ZCQjVFMDNGRTUyMEE5NDFDODVCRTBGMUQ3MEVBQjEKLToxMDM1RDAwMEIwQkZCNDg1RTNCNTQwMkRBOTg0OTA1MjYxQjA2RTNGNzEKLToxMDM1RTAwMDNDMjc2OUQ0Q0VBMENGQTJBMkNERkJFMTc5QkI5QkU1NUQKLToxMDM1RjAwMDAzNUYxMEZBN0UyNUM4MTJBNTlDRDk3RkYyMzQ2N0FDMTAKLToxMDM2MDAwMDg1RjYyM0E5MTQ4RTI0N0U4NUYxOTRGQzVCRDlGRTQ1QjIKLToxMDM2MTAwMEExRkMyRUQwMUI1OEY1NjdFODE0MkFEMjE1Q0NGNzcwMDAKLToxMDM2MjAwMDAzMUQwOEY4NDRGQTcxMDdCQ0E4MzdEQzcwQjgxNUNBNDYKLToxMDM2MzAwMEIyMTA4M0ZEM0ZCMDRGNjExRkFFMjI3RDJCQUVCQjYxNDgKLToxMDM2NDAwMEI3ODIzRDFCNjE3RTZFMzNEMDU3QTBDNkJBREUyOUNBNTEKLToxMDM2NTAwMEY3MTA0RjZEMDI4QjdCNzdBNTY5ODcyQkU5Qjg1RDk5RDEKLToxMDM2NjAwMDA1RTkxMDYzODVCODQ4OUQ0OURFQUNFN0ZBRjQ5RjNENTMKLToxMDM2NzAwMDIyQ0Y3MzYzRjJFNkNGRDBFNzhDODRCRDQzRTk3RkFCMDIKLToxMDM2ODAwMDM4MDFFMEVCMjYyMEI3RENGNzc0MTNBMDc3Qjc0QTU3NzAKLToxMDM2OTAwMDEzRURGQUE4MTY0NjdEQ0FFQ0REREIzOTRDNTUwNTRCMTcKLToxMDM2QTAwMDcwN0ZGRkUzNDAyOURBQjdFRUM2N0Q0OUYxRTcxRTkwNEYKLToxMDM2QjAwMDg4M0U3RDY0QkNGQTI3NkQ0MzdENEYwQTlDMUFEODE1NUQKLToxMDM2QzAwMDhEOUE1M0VGNDkyMjBGQTY3MDNGNjRERDM4RTMzQzJCRkYKLToxMDM2RDAwMENCRUZFOUUyRjgzMEUyQTE0MzcxNDYxRTRGMzNFMjhDQjIKLToxMDM2RTAwMDQ2M0ZCNzY3OTY4RTFEQ0QxRTc3NTNGRjMyNjI4Mjc3QjUKLToxMDM2RjAwMDFEMUQwN0YwRDI3RUJBQUUxQUYxMjAxMzc2MUVGNzJGRTkKLToxMDM3MDAwMEM1M0RFQjcxOUY5NUY5NDk1MzM4QkU0QjM4N0VDNzM5OUIKLToxMDM3MTAwMDA5RkEwOUYzMjE2RTkyMDE1RUVENTVENUMwOTc0NjlDREEKLToxMDM3MjAwMEU1Mzc2MDZDRDE3QUExMjg5MTU4NUNDRDYxRTgyREYxMjQKLToxMDM3MzAwMENDNDUwOEIzRTYzNEYyQzNEMEU0NjU3QThERkVEQjA3RUUKLToxMDM3NDAwMEU3QzYyNjc0NTlDRjY1NEVFQ0I2OTYyNzZGQjU5NkE3OTcKLToxMDM3NTAwMEM0QUM2NTZBMzUxRjAxQkIwMDZDMzQ4QzVCRUNCNDdFNzUKLToxMDM3NjAwMEFGMzNGNjAzQUFEODM5MzI4NThFN0M4NkU5NUZDQkJEQUMKLToxMDM3NzAwMDM4ODRFQjdGMjM4RjJEQUYzNzVFMDFFMjM1NzdBRDU1NkYKLToxMDM3ODAwMEFGNjY3MzNEOUY2REQzOUZBNTNFMDlFMzA5MTU4NzAyODAKLToxMDM3OTAwMDA3QzE3RTM0RTIzRTQ3M0Q5QTI1OUZDQzg4REZEOEU1QkQKLToxMDM3QTAwMEI5RTdBRENEODQ3RTQxQkYzQ0UyNjI3MTBDODgwRjdGRUEKLToxMDM3QjAwMDk2QzdFMzI1QjkzQzVFMzI4RUM3NEJGMjU4QkNDNDIxOTQKLToxMDM3QzAwMDY5QUYyQzE1MzBGRkYzQjgxQjhEOTc4NjhCNTg5Qzg2RkMKLToxMDM3RDAwMDlERTdGQUE4NUE3RTUxRDBEODc4MTFEMzc4REYyQzhBODkKLToxMDM3RTAwMDVFQ0VEMDEwQ0I4MjdBNDZEQ0M0ODgwQkI4N0Q3QTI1QjkKLToxMDM3RjAwMEYwRUY4NkQwNkIwRDA3Mjg5RDU0RkVDQTQ1QTA5RkNCRTUKLToxMDM4MDAwMEE0QzM4NzlBNDBCRUU1Qzk5OEI3QURDRUJBRUQzQjFFQkEKLToxMDM4MTAwMDg4NDNDMjc3NUFBRUNDRDdDNjIyMUZGQ0Q0ODFGMTgxMkYKLToxMDM4MjAwMDRFNEVEN0M2Mzk0NDIzQ0U5MkUyNjE3NjkxQ0I2M0Q4MEYKLToxMDM4MzAwMDQ3NTEwRkNGQ0JGNzgwQkQ3QkUxNEUyQUEzMkRGQThFRTcKLToxMDM4NDAwMEM1RjM4Q0I4RERENDVFRUJGNzVFMjI2NEE4QjBFRkJGQTEKLToxMDM4NTAwMDI0MjYzMkZCNEFGNzU2OThGMjFBMkZFMEVCMzY2RDY5QjAKLToxMDM4NjAwMEZDODFBNUI0QkM5QkM0NEFFMUJFQjkxMjRFMUZBMTgzMjIKLToxMDM4NzAwMEQ2RjNBRjYzODg4MEU3OUZDNjFDOTE0MjMxNUE3RkRBNDYKLToxMDM4ODAwMEYzRDZFRkM1QjZGM0IxMTdEOENGQ0JEQUY2ODU3QzEyRjUKLToxMDM4OTAwMDM5NzEyMzFENkZBM0Q2MjA4MDFDRERCODk0REFGMkI0RjEKLToxMDM4QTAwMDVDRThFMUZCNDU5M0M4MjRBMEMzQ0IyNDZGMjgwRUY4NDUKLToxMDM4QjAwMDdENDNDMkZEMkREN0RCOTNERkJDMTFGNEZBQUIyQ0VGQjcKLToxMDM4QzAwMDQ4OURBMDZEODYzOEIyRkE3MzA5RjU5NDlBNDI0QTRBMjcKLToxMDM4RDAwMEJDODk3REE0N0YzQjEzMjJCMDJGNjJDNEI1OUVBMkVCQUUKLToxMDM4RTAwMDBBN0E2NTM3RjVDQjBCMURFMDY3QUI1OEVFQTU3RTM5M0MKLToxMDM4RjAwMDk0OUZBNTdFMzkzQ0Y3NTBCRjFDREVGRjkwRkFFNTUwM0YKLToxMDM5MDAwMERFNEJGRDcyNzhGRTk4RkFFNUYwRkU3OUVBOTc0Mzc5OEUKLToxMDM5MTAwMEFEQjdBMjEyRTI2MkZEQjQzRUQwOEJBNzY0OEYzMjgxQjQKLToxMDM5MjAwMEMyREJBOTM4NTRBMDBGQkIxQ0FBQThCODVENTk0QzQ5RUEKLToxMDM5MzAwMEVBMkI5RDRGRTNGRTQ1RTU2NTJDNEZCQTcyRkREM0I4RTcKLToxMDM5NDAwMDdGNjE4RUFGOTlFMzhGODlGOERBODA2MEM0RDcyMEU0NzUKLToxMDM5NTAwMEY5M0JCRUNGMzAxNDY3OEJCMDM4REJEOUZCRDE4RDdFRkQKLToxMDM5NjAwMDMwQUUzOUFDMUYxRURGRkNGMENFNUYzRkQxNEEzRkFEMTkKLToxMDM5NzAwMDk4RjE0MDk3QTcwMENFNkQzNEYwNzg5RTkxMTdBMzU5MjcKLToxMDM5ODAwMEYyRUU1N0VDNjlDNkJDMTg2N0Q2OTEwNjU4RDczRDY1NkMKLToxMDM5OTAwMDVFQ0MxNzcxM0EyMjJBQzg1QkJCM0Y2N0Y4NzE3NjdCMTEKLToxMDM5QTAwMERBNzhEQUY1OUI4RkRCMTU0NkRDNzQ5MzgzNjA5RTc0QkUKLToxMDM5QjAwMDU0QTBGNjA0RDgxNzREQjFGMjc3MUMyM0M3NTM1RkY3MTQKLToxMDM5QzAwMEYwRjM0MzM2QjkzMDc0M0U4MEM3N0Q1QzYwQ0REMjc5NjgKLToxMDM5RDAwMDNBMDU4RTBGOUVCNzhFQTJCMTgwQzVGNUNDNzE1NTRGQkEKLToxMDM5RTAwMDYxMEMwRkE1N0JCQzNBREE3NTAyQjVGN0QwRkU1MzIzMDQKLToxMDM5RjAwMDQxODhBMzc1QzA3OTgwMjRGMzhCNzk5OEZFNkJDRTcyRDEKLToxMDNBMDAwMEEyQkREMTkxQzVGMjQwQUE3MjQzNDE2OERGOUEzNTMzMTUKLToxMDNBMTAwMDY4M0UxRjYwOUM1RjM4RTg5QkE5MEM5OEZBNUJFMzJCMUIKLToxMDNBMjAwMDE4NTVGRjQ5NTQ1RjZCQTNFODZCQzlDNUNFRUZCNEVFRTAKLToxMDNBMzAwMEJGNTg4MTczMTk1RERFNjVGREUwNDc3NzA1MDMxODdGODgKLToxMDNBNDAwMEVGQ0I5QTQ5MDY0Q0ZENEJDMUQ5Nzg3RTQzRjIzMjdCQ0QKLToxMDNBNTAwMDU4MEEyQTY4MEZDQjMwRkZFMjQ0N0RBM0RFM0QxRTQ2QTQKLToxMDNBNjAwMDI3OTQ5RDMxQkVFOEY2NzY2MzNEOTcxQ0M2N0IyMzVDQTgKLToxMDNBNzAwMDAxNTA5OUY0QTlCMkZEMzg0RkExNDgxNDkzQkMzMEM2NDcKLToxMDNBODAwMEZENTcwRjkzOTc1REM1MTExNUUyMkM1RDQxNTk4MzczNjYKLToxMDNBOTAwMDIwNUQ1QTI5RTJCOTk1RTNCOTM1Q0ZCMDI3NDI2OEM3MEUKLToxMDNBQTAwMEVDRTE3ODM2RkE2OUU1NzE4MEQ2N0EyN0RBNzNFMUM2RjcKLToxMDNBQjAwMDM0QjUyQTAzRjM3NTc3QzFCRTU2OTdCNzQ1ODE3RDQ5NjIKLToxMDNBQzAwMDY3NTZEOUE4RkRGRTg0Q0JFQjkxRkIyRDE5NTMzNTFEMEMKLToxMDNBRDAwMEZCREQwM0ZEM0E3RENCNTRFOEQ3MzFDMkI5QTNDMzFDNEIKLToxMDNBRTAwMENFMkY2QUI3REFGN0YxMjhCNDQxNzMzRThBRkRFOUUzRDUKLToxMDNBRjAwMEY2QTdCREREOEFFMjAxMjdBQ0ZCQkFDN0FDRTc5NDFEOEYKLToxMDNCMDAwMDg0OUREQjVBQjk3NzM1RjJGOTI2QjkxRkVEQTg0REE3ODgKLToxMDNCMTAwMDg1QTRFN0JGMzI1MjA0Q0U2RjQzRkVCREM1MEVDQUUxOTUKLToxMDNCMjAwMEZDOTRDM0JGMDNBOTgxQkUyODg5NUJFRDk2RTk4N0FDRUQKLToxMDNCMzAwMEU1MTlGREQ2RjJBQ0EzNzYzQjQ4N0YwM0VDQTBDNTVDNEIKLToxMDNCNDAwMEVFRjU1Mzc5Q0Y5MjYxMDY2NUMwNDczODFBQUIwMEI4REQKLToxMDNCNTAwMEVCNDg2RjMzRTQ0OTM4Nzg5QzdDMzFENzdGMEJCOTdFRDIKLToxMDNCNjAwMDc0QTdCMDc4NkY0RUJEQzdFMjdGMTI3RUNGNUYyRUVGOTUKLToxMDNCNzAwMDNGQUZFQUUwRUEzNjEwQjI2MUMzQUVEMkQwNkZDREJCNDAKLToxMDNCODAwMEUyRDkwQTE0OTczNkZCQUE0RUI3OUVFMzVGNjhCMzlGNEIKLToxMDNCOTAwMEVDNzY1Njg1REM4M0Y5QjhEOUI2Qjg4NkIxOUYwQkYzQkQKLToxMDNCQTAwMDg0RkIwQ0VDRTM5RkVGQjg0NjdGOTA4NzA1RjJDREI4MUQKLToxMDNCQjAwMEU3MDVFRjE1QTZFREYzRTRCODEwQTI3OENBNkU2MEU3NEEKLToxMDNCQzAwMDcwNzJENjEyQkQyNzA5MURDRjQ5NjE3QzMxMEM2RkQxQUYKLToxMDNCRDAwMDc5ODhCN0Y5RkM1REI2OTdERENGOTU1RDI1QzUzNDNBOTgKLToxMDNCRTAwMDdFNzY3RDJGREEwMzhCNkVBM0YzNDEzQkZDMENFNkMxOUUKLToxMDNCRjAwMDE4RjVEM0QzN0FGMTNDRDJCNjFBODFFN0U3MTJCNDZCNDkKLToxMDNDMDAwMDhDNzVERUU2NjVFNzA3RUIyRTE1NjIyMkI0NkYyOEMwREYKLToxMDNDMTAwMEYxMTFBRTgyQzRGQTUyM0MxRDYzNzg2MkY5ODZENzU0MjIKLToxMDNDMjAwMDVCQ0YzOUQ2RDlFQzE3ODMxRTE2REFERUZGRDZDM0Y2ODIKLToxMDNDMzAwMEM1MEQzRUY4RjBFMkEzOTNDNjUxMzg1NjA4RERENTI5RUMKLToxMDNDNDAwMDEzQ0U1RDVGOUFGOEMzNzEwNkY4MTA3RTFGQzM1MjVGRjIKLToxMDNDNTAwMDMwOEY1N0Y5ODE4QUU3M0REMjA2QjYxMzRBOTJCNTI5Q0IKLToxMDNDNjAwMDI0NUEzNTE3RTRDRkUwODUwMjJENUY5QkYyQkRGNkFFRjYKLToxMDNDNzAwMDRCRTFGOEY2RTBEMzYwRTRCOTVDM0ZCOEFDM0EyRjUxQzEKLToxMDNDODAwMEY2Nzg3RTgyRTUwMDFGMDdCNjE2RDk3QTlCRUU3REExRjUKLToxMDNDOTAwMEE4REJDRUYzRTMzN0U4NjRCMzA0QjlCNUEyQkEzOTk0MkMKLToxMDNDQTAwMDlGNjg5NzBFRUQ4NDUxREE4NUM5NjYzOTQ5M0JBRkQxREIKLToxMDNDQjAwMDhFQTJBQjAzRUU3NUUyRjNGMkYwRUYyMjg3QzczQ0JFQjMKLToxMDNDQzAwMDBDNzg1MzM1MkY5RTYzNUMyMEFCOTA5N0YxNjVFMTE4MUIKLToxMDNDRDAwMDczQjY3OTQ3Qzg2NkM3ODRFMUVEMjhEOENEMDZGQzYyODMKLToxMDNDRTAwMDcyRjg2M0YwREQzQ0JFNjMxNEY4RkZENkY4Mzg1QjdGRjIKLToxMDNDRjAwMDRFRkVGREJDRTFBM0Q1NUJDNjhDM0M1RjgwQ0I4MUY3NUIKLToxMDNEMDAwMDBENjk1RUQxRDRDRkZEN0Q3RkMyQjhCODdDM0QwOTQxM0QKLToxMDNEMTAwMEM4NEI3NkU4MkFFQ0U3MTVBQjBGQTI3RjJGQTc1NUE5NzEKLToxMDNEMjAwMDYwMDdBQ0EzNjVCMDAzRDZGNTc2NjNGQ0JCQjhGMDgxNDEKLToxMDNEMzAwMDJFMjBGQUUyQjg4NzgwM0M5ODRBRDRCNEREQjRERkE5REIKLToxMDNENDAwMEFBMEMyN0FCODg3Q0U5NDExMUUyRTlFNDZBODI3OTIzNzUKLToxMDNENTAwMEE5N0QxRTc2M0Y1MEZFOUM0N0MxREY0QTRCNTM3MDNGMDIKLToxMDNENjAwMDIzMjU2REU2QTNDQ0U4NjU3MTY2MDNGRTk0OEEyMzk1NEUKLToxMDNENzAwMDEwN0Y5N0VCNDg0ODAwQjg4NDE4QTkwMDI2OUI0MjcwMzIKLToxMDNEODAwMDdGQzNBM0VGRjkyNjlDMDMyMDMyRDM0Rjc4NDcwRUU4NzgKLToxMDNEOTAwMDU1MUU2RjFGQ0I0ODg2NzQzOUQ1M0FDQzVGRjk5OThDODQKLToxMDNEQTAwMDcxQUNCMTcwMDUxODI1Q0FFMkUyRjRDRDAwNEY3MTg0MDAKLToxMDNEQjAwMDc2MjAwMEZDMkM1RTM2MzUyMjg2RTJCNEZGRDIxM0FDQUUKLToxMDNEQzAwMDFERjkwNTNCM0Y0MjdEOTMyNUNGNzkxMzc4MzVFNENBMzEKLToxMDNERDAwMDU4MUU4NzBGMkVCNUM2QTlDOTIwOUQzMzZENUZGQThCN0IKLToxMDNERTAwMDQ1OEY0MzlDNjJDQzMwRjlDREZDNzYwRjg3MzNGNTA0QzgKLToxMDNERjAwMDA5NDNGRjgxMUFBQkRFRjBGMEZDNkQ4RkVERkU5ODhCNkUKLToxMDNFMDAwMDdDMEVFQkJEQ0Y3NkZGRTFERTMwRUEwMTE3MDkyOTRFQ0IKLToxMDNFMTAwMEI0MkY5NkEyREQ2MEY4MjVEQkEwMjJEOEUzNzk4NERERkIKLToxMDNFMjAwMEI3NkI2RjNGOTNCNTI3NDFFNkE3QjgzQzQ0NTE0QUU5QzkKLToxMDNFMzAwMEY3RTUxRTFERjMwRDVEQjQ0Q0YxMjgzODg5OTI0NURGN0UKLToxMDNFNDAwMDY3OEIyQ0RFRDIyQzEwMTlDQTg5RjFFMjk4NjdFMDUyRjgKLToxMDNFNTAwMEFFNkEwM0ZCNjVCRjMyMURFRjQ1MzNGQ0VBNTYzNTg0N0QKLToxMDNFNjAwMDc5MTBBNEE4RDI2MjM3MUJGOTVFNkI0QTBBQzZDMkY3NjIKLToxMDNFNzAwMEQ0MzE0MzcxMjcxNUU4NzI0RDY2MjFEQUQxRkU4QzgxNjkKLToxMDNFODAwMDdGMDYzOUZCNTk4QTZGODEwMjcyMTVGMjMwRTZDMEI1QTAKLToxMDNFOTAwMEI0QUU4RTI4OTVCQkFFNTMzOTQ0MzNEOTY3MkVCOTAxRTEKLToxMDNFQTAwMEUzNkNBRTUzRTMyQ0VGRTM0REQ2NzNENEJBNTdBQzgyMzgKLToxMDNFQjAwMDcxQjJCRDFBM0JCRjQzRDQzNjY4NTc0MUFDRTdBNTVEMkMKLToxMDNFQzAwMEE3QjIyQ0Y2N0FBMkZGNUNDQkZCMzhCNTZCQ0NGN0ZCMjQKLToxMDNFRDAwMDhDREM3RjBBRDE4QUNDRkQ0RjE4QTFGRjQ5QjZGRUQ1RjQKLToxMDNFRTAwMEE0RkQyN0ZBQ0RCMEY0REIyRUIzRjg2QjM0RTA0OTdBQTkKLToxMDNFRjAwMERGNjRBOUI3NzJCQzc3QzZDOEZCMDMyNTVFMTZEN0VDOTIKLToxMDNGMDAwMDBDMzZFMEZFNDAyNUExOEM0RkU5NjVERUU5NjMxMjNCRUIKLToxMDNGMTAwMEM3NEJEMDdFMjNCOUQ2RkQ4MTRBNEVDNzIyQTUwQzNDQTMKLToxMDNGMjAwMDE3MjA1QkVGMkQyRTI3RjY3QjhDQUQ3NkQxMTEwODZFMTYKLToxMDNGMzAwMDUxN0ExNzdENjVGREI4NEZGMDI3MkY5RUYzMUJDOTZFOTAKLToxMDNGNDAwMEVFNkYyMjE4OUYyRTRGMTlCODFERjZDMUFGRjQ4RTczNzUKLToxMDNGNTAwMEI2MDczMTlGMTlGREY5MjVERUU5MEJGOEJEOUYyQ0FGOUYKLToxMDNGNjAwMDM5MjAyMjVFQzI5NTYzRjE5Qzk2RDE0RkQ4NDkyNjgyQjIKLToxMDNGNzAwMDVDMEM4QjJDMEYwMjdGRThGOEZEOTlEOThGQUM0RjgyMzcKLToxMDNGODAwMDNGRkIzOUY3M0E1RDI4MkYzNENEQUIxRkYyMEFDREUzNjIKLToxMDNGOTAwMENEQ0ZFOTkxNENGMzA4QkJDODBDMUM4RkRCQkI0M0UzQ0UKLToxMDNGQTAwMDhERjk2MkUzQkRDQUUzNTlDNjc4NzUwQkFDRjNBQjczMDgKLToxMDNGQjAwMEFBMzhCRjNBQ0VDN0M2NzhBRkMyRkM5MkUwRjdBQ0UzRUUKLToxMDNGQzAwMEYxQkNDOUExRjEyRUI3Q0VBRkNFQTVFMkZDRUFGODNEMTcKLToxMDNGRDAwMEJCNDNFMzhERjk2MkUzMTk3MTlENEU2NzQzMDNEMEUxNjIKLToxMDNGRTAwMDQ4RjExRDIzQUU3MzRERTcyRTRCNUM4NzQ0NzdDREFGNzAKLToxMDNGRjAwMDI4MjQ2NEIzQzBFNEM3RjY4REYzM0FDMEZGRkJCODY2NkIKLToxMDQwMDAwMDREMTFFQTE1NkU1RkUzN0RBQTU0MUYyRjk0MTlCQ0I1QkMKLToxMDQwMTAwMEI5REU1OEIzMDk4RkRCQTgxQ0QxMjdDMzM5MDk4NUMwODUKLToxMDQwMjAwMDgxMzIzODM3QTFFMzM5OEEyMDNFMUZBMUY2QkE4RUY5RDIKLToxMDQwMzAwMDI1NDVGOEZEODlBNjEwOTY3NzM2Q0RDNkE3RDE0RkQxNzQKLToxMDQwNDAwMDZDNzZFRkQ3OTRCOTQyNTJCQkZENzUyRkIzREIzNzY3NUYKLToxMDQwNTAwMEE5RDc3RjFERjQ1Qjg1ODdFNUZCQ0VCRTg0RTgyNjNCQjAKLToxMDQwNjAwMDlBMUFENkZCRERCMDNGNzQxRDI5MDExRDM5NjkyQjgzRDcKLToxMDQwNzAwMDNCNTAzNTI2MDZFQkVGMjkzOUQ4REYwNDcxNTBEOUExMjIKLToxMDQwODAwMDYxQkVBQjk2RkNFRjE4QkNFQzY1RkVCQ0NCQzVEQTkzMDkKLToxMDQwOTAwMDRCRDhGREE3QjU1QzNGMTFBOTA2RjM4RjZBMTdBNjYxM0YKLToxMDQwQTAwMDNFQzJBMkM1QkE0RkE1Nzg1QjJDMDg2RjE0NzI3RDA3N0IKLToxMDQwQjAwMEU3OUVBRUU1NEI2REY3MTcwMkEwNzlFODdBMDU3NDI5MDMKLToxMDQwQzAwMDA2RjdDMzVEOUI3Qjc4ODk0MEZCMERGQkFFNDEzRjIzMjgKLToxMDQwRDAwMDRDMUJBNkQzN0VBRUU1RkFCNkUyNkQxNzgxNzgwNEI5MjMKLToxMDQwRTAwMENDODlGMjZCRjE2MkFCNUZCMEQ5MUQ1N0MxQ0VEOTVDMDAKLToxMDQwRjAwMDEyMjBDREI0RERBMjFBRUI3Nzk3OEJGMTU1RDg3NkZGNUQKLToxMDQxMDAwMDRCRUQ1OUVFODMzMUYyNkRFREY4QjFDNzREMEY3OUY5RjIKLToxMDQxMTAwMDc5MjUxRTFGM0Q0OThBRUZDNzMzNUYzQzJGRDdERURFNkUKLToxMDQxMjAwMDg4ODMzNjc5OTk3Q0VCNzQzMkY5MzA5QzBGMTgzQ0VGMTgKLToxMDQxMzAwMDcxMzlCOEFERTkyOEM2RDEwQ0Y4QjJFNTk4MDBGMjNFNjUKLToxMDQxNDAwMEE3RkVBODI1RUY5RDIyMTY4RDZBNjM5RjgwNDhCQjRCNzIKLToxMDQxNTAwMDUwMEZEQkU2QjM0REQ4OUQzNURBN0Q1MEQ5NDQ3RTc3REMKLToxMDQxNjAwMEEwODhGRkREMDI2MUY4QkNGRkUwQjVDNjg1NEY5MkI5QkIKLToxMDQxNzAwMEFGMTQ5MjY0RkNDM0UyQzFCNTg3QTQ1MEIzOTZDMDhCNjAKLToxMDQxODAwMDgxODdGRjZCM0VEQTAyNzhBN0NGNTdFNjdGNTJDNkZDRTUKLToxMDQxOTAwMEMwNUNDQkRGMDczMENFNkY1RDMzNTQ5Njg5NkNBMkU3RUQKLToxMDQxQTAwMDg1Q0I5RDNBRjM1NzA3OEI4MTJFOEY1QzlBMTI2MjdGRTUKLToxMDQxQjAwMEU3ODJEQjQxRjE1Rjg5NjAwNzdERjlGRUY1M0M0QjVFRUMKLToxMDQxQzAwMDMzRUY3N0E0RjVCMkU3NTM5QUNFMUIyN0VFM0Y4MEZDN0UKLToxMDQxRDAwMDk3RTY1MDEwRUQ4MTRDOTEwMDNGNjU0MzNFOUU5RjdERDgKLToxMDQxRTAwMDNGNjZCNTVCMkRGOTc4QUQ3REJCMDQ4ODFCNkU4N0ZDRkYKLToxMDQxRjAwMDQ0RDMzOUJCOUNGQTVFQTExREVDQkJFNjE4OEI0M0M0Q0IKLToxMDQyMDAwMDY5M0QwQTc3NkU3RDVDNjgyQjRFRTQ3REQ5RTU3QUVFRDgKLToxMDQyMTAwMDZERDY3Q0MxRjZCOThCRDVERDFBRTRENTU0NzZDM0M1MEQKLToxMDQyMjAwMDVGRUJCNkIyMzg5NzUxN0YyOERFQzVDRjlGM0E0ODAzN0YKLToxMDQyMzAwMDgxRjMxNzkyOTdDNTlCODNGQzVFOEVCM0U1RUY3RTI2RDQKLToxMDQyNDAwMDQ2RDVGQzdDQzhEQjhEMjkxNTc0RkUwRjY1NDQyQTdDOUQKLToxMDQyNTAwMEI0REZBRTQwNjk0MzBGRDBBNzFDQzIzQ0VGQTU4RDc3RjkKLToxMDQyNjAwMDg3MjE0RUE4NjYyNDhGODMyRkU1RjY0MThEOEZDNUQzMTUKLToxMDQyNzAwMERFNzJDNEYzMjA2RUZFOEI4Q0NBMUFERjhDMjRGNTFCMTEKLToxMDQyODAwMEVGQzVGRUNBNDdCODZGRkUyNjFGQTNDRkVENjI3Mjc5NTUKLToxMDQyOTAwMDcwMDMxRkU3MkIyQjQ0QkM0N0M4NEQ3Qzc4M0VENTVEOEYKLToxMDQyQTAwMEQ4M0QxQkYwQjE3REU1QjY1MEIyNzM5NkQzRDVDODU3NTMKLToxMDQyQjAwMDdEQTYzOEFCQkI5MEREMDM0MDQ4RUZDNTMwQ0Y3NTdGOUUKLToxMDQyQzAwMDdFQjhGNzE5M0FFRkY0M0Y3QjUxQ0VBNjRCQUM1RjUzNjMKLToxMDQyRDAwMEZCOUJDQ0YzMzFEQUVGRkJEMzJGRjFGQ0ZDM0U3RUFGM0UKLToxMDQyRTAwMDNBODkxNjVDMEU3MUY2NEQ0NjE5QjYwMEEwOUMzNjU0RkMKLToxMDQyRjAwMEJFMUNGQ0NBNDRGOUM3MEJFMEVGMjY2RDAyMUFBNUM0MjgKLToxMDQzMDAwMEY3REVBNkMzQTg4NzM3MDk4NEVCRTk1RjJDQzBGRUY4NjcKLToxMDQzMTAwMDNERUUyRkYyRUZFNTU3N0VGMEU4RkRBMDBGNjYzQUQxQjMKLToxMDQzMjAwMERGRENDNEVEMUQwM0JFRjc3REVDOUNDMkZCMUM1RjIzRUMKLToxMDQzMzAwMEUxQjM5M0UzREIwQkY4MEM5QzE3M0UzQjkzRTE2MzQxNDUKLToxMDQzNDAwMDQwRUYwMjNDQkIyMTEzODQ4MkUwRkVCM0IyMTZGMkFEMTMKLToxMDQzNTAwMDFGNkEyMkUxQUZEMzM5NkMwRkVERDkwNTY3OEE2OEZCN0MKLToxMDQzNjAwMEZCOTNBREM3MEYzM0Y0NkUxRkMyNzMwQ0U3RTcyQkY0NUEKLToxMDQzNzAwMDg2MDAxNUVCNjYxMUVDMjcwOTFDNUI0NzVCRDdBOTY5MjIKLToxMDQzODAwMDRDQ0VDMTFENjNGMDRDRTdGNkE1RTRFQTBGNDJGRTgyNzUKLToxMDQzOTAwMDVBRjY2RkI3QUI1NENFNzRFNEY3MkY0OTE2Mjc3RUMyOTYKLToxMDQzQTAwMENGRUNGRUI0MTFFMkUyMkY3MEZDNTVBNTg3NzcwMkRDNUEKLToxMDQzQjAwMDZERUEwM0U4RUYzOTA1MTI4NkZBRUI2NjBGMTBDMUQ0RjcKLToxMDQzQzAwMEVFMkQzRjVCMEYwQTc3MkZDMEVEQkM5OERENEZFREEzQkMKLToxMDQzRDAwMDc4ODcwNDM5NUYxOTgzN0Y5RDc2ODQ0MEZFQkIyRjc4RjAKLToxMDQzRTAwMDA0RjM1QTdENjUwM0M4RUYyODBBQjMxOTVEODEzRkE4MUQKLToxMDQzRjAwMDcwRkJFRDg1NEQ2RjJGMDBCQTQ4OTcwQzNBQkNCRDEzOEEKLToxMDQ0MDAwMEU4NEM0QTk0OTFFRTdBRDI1OUZCNjNGN0REREUwOUZFNUYKLToxMDQ0MTAwMEUyMEUyNzZEMDM3MjMwREI4OUY2OEQ3RDdFODczOEJDMTYKLToxMDQ0MjAwMDgyQUExRjgwRjkwREMzQTc2QkUwNTFCODZGNjBEMzQ0MTcKLToxMDQ0MzAwMDc2NEY0QkI5RDhCRkU0NkI0MDk3NTc3QUQxM0VBM0VGODQKLToxMDQ0NDAwMDk3OThDRkRCOUZFNEY4M0FFOTYzRjZENUE2M0YyOUY4QzEKLToxMDQ0NTAwMEREQkUxRTIzRDFFQjZGQkYzOEJERkU3NjA0N0FGRDlEMTUKLToxMDQ0NjAwMDhENUUzRjIxQzlFOUY1N0Y0NkEwRDc3N0UxQkQxRDJGQkQKLToxMDQ0NzAwMEY2QjI0NEY0QURCMEFGMkM3RkJFNjAyN0Y0Mjc1RjM1QjEKLToxMDQ0ODAwMDc3RUIzM0Y0Mjk3REJFMzE4QUFCMTkxMjJDRTc5OTEzRUYKLToxMDQ0OTAwMEYyM0VGMjA5RjQ2RkRDMkI2MEZDN0RBMkJCN0MyM0Y0QkUKLToxMDQ0QTAwMDNCNkJFNjU2OTA2M0U3RDBFRjE5QzA4N0JEREY1RkYwNDYKLToxMDQ0QjAwMDdFQ0JBRkY0NDY5MkREOTNCMENCQ0ZGMkUzN0ZFMDY3RTMKLToxMDQ0QzAwMEY1NDZFMjlCNUZGOTU5N0VDQTQ4N0MxM0Y3MEZGMTREMjAKLToxMDQ0RDAwMEFBM0ZGM0VDN0MzM0M4RUJEMzc1MThFQjlGNzEyRTdDQUQKLToxMDQ0RTAwMEYzMjAzRUREODU4QzZGNzBGRTczODZGMzBEMjExMUU0QTEKLToxMDQ0RjAwMDkzOEU3Q0M2MTc0NUZFMTU5REQxNUMxMzFGOTE3QkFEMzUKLToxMDQ1MDAwMDdDNDRFRUI1RjBEMUE3RkU3QjkxOEZFQ0VERkQyM0RDNzIKLToxMDQ1MTAwMDA3NzhEMTEwRkY4N0E3QzEzQ0Y0MEJENTM2NzYzRTY5RUEKLToxMDQ1MjAwMDAwQ0ZFMUY2OTBDMTNFMTdFNjA5QjNCQzVDNEYzNEFBNTgKLToxMDQ1MzAwMDMzRjNBMDlGQzBCREIzQjM3OEZCMURFMEEzODExRjM0NEMKLToxMDQ1NDAwMDkzQzdCM0U0N0VCMkM4Mzc5QzlGN0Q2NUYxMzJGM0ZEMUIKLToxMDQ1NTAwMDJFMkZGM0Y2QUVENDcwMzlFMEJEODcwQzRDMDFGQjZDMDYKLToxMDQ1NjAwMEE0NzU5QUNGRUI5RjRFRDdFN0ZCOTNEMEY5RDlGNDUwQkYKLToxMDQ1NzAwMEJEOUZFOUExN0FERTRGRkE5Rjk1MDZCMDRGRURGQzVFMzQKLToxMDQ1ODAwMEJFRjJDNzdGN0M2Mjk0N0U2RUUyRUJGRjU1REVDRjE3RjIKLToxMDQ1OTAwMEUwRkZBRkZBOTNGMDJGRTVGRjFCNjAxRDRDRkM1RjI2OTgKLToxMDQ1QTAwMDE0MjRFNUZGOUJGQzQ5RTQwN0U1RkY5QkZEN0Y1QjdFNTAKLToxMDQ1QjAwMDVGRTM0RkMyOTc1NzAxQkY2NTlFMURERkNGNzE3QzNGMDAKLToxMDQ1QzAwMEY3MjVGMUJEODVFMzdCODNGRjBCQ0JEQjBEQzlGMDQ1MDAKLToxMDQ1RDAwMEYxQkRGMTFDRjFCRDY1MDQ3QzNGRThDN0Y1N0YxNkUxMzQKLToxMDQ1RTAwMEY3Njk1RThDOTc3N0NEMjI3QkEwOUYyNDcwM0M2Q0VFQTAKLToxMDQ1RjAwMDQ3RDE1ODNGOTRBNzNFMTEyOEREOTc3RkRFMTU0QTc2QjQKLToxMDQ2MDAwMEZGMTE2REY3NjhCMjc2RjNGREFBOTE3Q0JFMUFGQzg3QTQKLToxMDQ2MTAwMEVENTc3OTcxNUY4MUVBQzcyNzkzRjFDNzk3QTA4MzFGOTAKLToxMDQ2MjAwMEY4OTNDOEZENzI5MUM5MjFDNzdEMTc3NzQyMUNFRjRCRTMKLToxMDQ2MzAwMEY0RkY5MzY0RkRERkM5RTVGQUQ5RUM4MkQ3Mzg1REQwODkKLToxMDQ2NDAwMDc5RkY5NzdGQzY3MEY5RDdDM0NGMjcwQjZBRTQxNzdFMkYKLToxMDQ2NTAwMDhDREIwRjVDMDFGMjZBQzc1REU5MDJDNEJCNzJGNUI4N0UKLToxMDQ2NjAwMDAwN0UwMjVFRUE0M0UxOTgwQjk3RjhDQzQ4QjREQjIxNjgKLToxMDQ2NzAwMEM3MDVCODNGNjc0NzgzMkFDMDc5Mjk1MzdGNkZGQTMzNEMKLToxMDQ2ODAwMDQ3RUVDRjBFMDc4NUVGRDc3RTk0NzdGQTZGRTAzOTlGMUMKLToxMDQ2OTAwMENGRUY3Q0VEQTQ3REU5RkFFRkZENEM2RUZGMEYzQ0Y1MEEKLToxMDQ2QTAwMEM5NTZCOTZEQ0M0MzBDNzdCMzNDREJEOUM5RkY3RUU1NjUKLToxMDQ2QjAwMDAxOUZDQ0Y1NThGOEI4NTlGRUJGM0I0NDU3QUNCRkYzNDcKLToxMDQ2QzAwMEQ1M0YxNEJFQ0YzODdDN0ZDMjdFNkRGMEQ5RjE3MjM2RjMKLToxMDQ2RDAwMDM4Mjc4MTlFNjdGRDQ5QTk5OUMzRjU5NEJEM0ZDM0NGOTMKLToxMDQ2RTAwMDM2RDYwOUFFQzUzMEM3N0RENEQ0MjFGRDlEMEFGRDc5RUIKLToxMDQ2RjAwMERCNDUzQzQ3NTVDQkU1NDlFREVDMzQ2RUI3QUIxRUU4RTYKLToxMDQ3MDAwMDdGM0I4RkMzNkZCRkVEODEwQUQ4NTdFRkI5NDcyRDAxQUIKLToxMDQ3MTAwMDE0NjRENzMzQkRBN0REMzYwRUUzQUJEOUJDNUYzQkZDRDkKLToxMDQ3MjAwMDQzRUQ5REJENTNFMEVGNDJEMDcxQzdDMUI4RjNFNjkyQUYKLToxMDQ3MzAwMDM4Rjg4REE5NjAzNzYwQkM0MkM1QkY1RjlDRUVFQTBFQjkKLToxMDQ3NDAwMDQyN0M3NjlERDBCRDY0MTlFOEQ1MkJCQ0VDNUM0QzcwRTYKLToxMDQ3NTAwMEYxNTlFRUM1NkNCMUQwMkQwOTk2OURBNTdFMzNENjU3ODMKLToxMDQ3NjAwMDUzQkFGMUZFOTQ3M0FFRUZFQTRFNkE2N0NENEIxNTBENjYKLToxMDQ3NzAwMDdGNjJDRUE4NzgwRDA2MzBFRTY1RTA3N0Y4Mzg2Q0ZERTQKLToxMDQ3ODAwMDJBQzIwRDAyRTBEQjU3MjZBODkwN0FFN0EzNzQwMkY2NEUKLToxMDQ3OTAwMDkyNThEODhGNzk1MzU3OTczMTdBMjFENDJGMTlGREZFMkIKLToxMDQ3QTAwMDk1MEUwM0FFQUJGRjE2NzAxOUY1NDYxRThGRDdCMzlENUQKLToxMDQ3QjAwMEI3MThGQTNCNjM1RTI2QzdCMDIyMkQ3Rjc0MjgyM0U5MjEKLToxMDQ3QzAwMEJFODJGMUVDNkM1Mjc1QjgwQUY5MjM1NUMzN0IxOTNCRDQKLToxMDQ3RDAwMDg3RjJCRTQzQzE0NUJFQkY3RkJEQzRCQzYyNkNERkM5QUEKLToxMDQ3RTAwMDU2N0ZFOEZFOTFBMDgyRjYxRkZFRkQwRTEzMUQ3NUE0RjQKLToxMDQ3RjAwMDMyQkY1NTRBMEJERjlEOEFGMjM3ODRGNzNGRDJGMkI3QkEKLToxMDQ4MDAwMEIwQUNEMEIyMEZDQjREQjAzRTQ0MUQyQTM3RTNGNzIwRjkKLToxMDQ4MTAwMEFCNEY1NEY1OUNGMDRFREI3NTYxM0I3OUE4OUZGNUQ4MDIKLToxMDQ4MjAwMEFGNzc2OERDOEQ1ODBFMEM5NUVGQzNGQUI5QUNGRUI5QzIKLToxMDQ4MzAwMDhFMzNFQ0ZFOTU3RTA5RTdGRjg5QUNBN0MyQkVFOTc1MTEKLToxMDQ4NDAwMDhENUZDM0Y4RDJGNThEQjdFMEIzQUI0OUFEODAzODlEMkQKLToxMDQ4NTAwMDcxMEZDOTc1RDc3RjREMDU3RkZBRkE5QkI2RTBCRUJFRDIKLToxMDQ4NjAwMEQxRkY0MkYwM0I4MEZGMzVCOTFBRUMyNTY3QkUxODdFQjgKLToxMDQ4NzAwMENDOUJFMEJGMDQxQzZENThBRTk1RDk3REZFMEI2NzlGQTUKLToxMDQ4ODAwMEQ4RDQ2NjhBREYyOUYwNzdEMTIxQkY0NjMzREQ4MzQxNTIKLToxMDQ4OTAwMDEyRjJGMDQ5NDFERjlEN0ExRUY0M0M3QzlFODQxQ0E0RjgKLToxMDQ4QTAwMEY0RkI4OUI3MzAxNjQ1N0FBRTU0OTNGMThEMzFERjkxMjAKLToxMDQ4QjAwMEZBMzdFNjNCOTJCQzMxRjA2NkJDNUY1N0M4RkY4RUFFNUMKLToxMDQ4QzAwMDJEN0VFOTlFNTg4NUY5M0YwQjA1MEVBNzhGREYwQkM5OUEKLToxMDQ4RDAwMEVCRDVEMjcxOUUyRDQ2QkFEMDgwNkU2QkI5N0Y2N0Q3NkIKLToxMDQ4RTAwMDBGQzZCODRGMEE5MUQ3MDEzRjEwMjdCRUE3NzQzODdFNzQKLToxMDQ4RjAwMENGMTU2RjQ2RkY2MzIzNTEwMkY3NzI3OThBMDlFRThCNTkKLToxMDQ5MDAwMDA1N0NDNkJFM0E5MzZCMEY3QThENzIxNDkzNEJDMjg1QTkKLToxMDQ5MTAwMEREMjhFN0RDOUEyMUY3OTg5RTU0NTM3QTc1QjE4NEZBMjIKLToxMDQ5MjAwMDQxQTk3RkJEM0MzODA1RjI0MDIzNDFGODEzM0VCNEZDNTkKLToxMDQ5MzAwMDEyRENDRjlDMkVCMTMyMjE3RjdERTkyMERBM0ZFQTA1REYKLToxMDQ5NDAwMDcwOTNBMzIyN0ZGRUQyQTEzQ0MyOEUyRTYyRENFNkYzREUKLToxMDQ5NTAwMDk3MjA5RUQ3MzM1NDI2NzEzODVGRDBFMzE5MkFFQjRBNEIKLToxMDQ5NjAwMDkwOTYwQjg2Q0E1MTI4RUZFMDc2REZFOUQ0Q0Y1RjZBRDQKLToxMDQ5NzAwMDQzN0QxNkZFMENGOEM3OTBBQjE1NUNBRUZFQURFNEU5QzYKLToxMDQ5ODAwMEZGMDJDRUQxNzRCMjAwODAwMDAwMDAwMDFGOEIwODAwMkYKLToxMDQ5OTAwMDAwMDAwMDAwMDAwQkU1N0QwQjc4NTRENUI1RjAzRTczQTgKLToxMDQ5QTAwMEU2OTU2NDI2OTlCQzI3QkM3MjEyNDBBMjNDOUMwNDAyODYKLToxMDQ5QjAwMDQxQjE0RTc4MzU1RTc5MENGNTE1MjRDODI0RTExMTlFN0QKLToxMDQ5QzAwMDAxQTQzMkFEQjYwQzI0MjAyODY4QUMyRkVBODMzQjI4MjIKLToxMDQ5RDAwMEY2NkFBRkY2ODJDNTVCRkUxNkY5MDc0MTBCMkQ2MkFDOTUKLToxMDQ5RTAwMEE4Rjg0MEMzQTMxNTFGMjUxMUI0NENBRDJENzdBREI1NjQKLToxMDQ5RjAwMEY3Q0U5QzczMzIwM0MxQjZGRkRGRkZGQkMzRDcyRUY3QTAKLToxMDRBMDAwMDM5RkJFQ0M3NUE2QkFGQjVGNjVBNkJFRjYxMkNDQzU4M0IKLToxMDRBMTAwMDJFNjM5QkI1NjZDRkU4NjE4Qzg1QkQ1NjVGN0Y4REIxRjcKLToxMDRBMjAwMDc1MENGRTBBMTgzQjg3N0Y1NzMzRDZENzYzNjdBQzlDNUIKLToxMDRBMzAwMEIxNDczMjgzMjkxRUE4M0ZFOThFMEVBQjEzRUEzOThCQUEKLToxMDRBNDAwMDcyREM0MTE3NjM4NURFMkZDMjk1RjA3REUxMjhDNjM0MDQKLToxMDRBNTAwMEZDQjY1RjE2NjMyM0ExNURFRjMyQzU5RTAzNzAxMEYzQjEKLToxMDRBNjAwMDI4OENERUFERjI0MEZEMUMzNzYzQUQwMDk5MzVDMkQ4MEQKLToxMDRBNzAwMDIwQzYxRTcwQzkzMjhDMDc2MEEwMjRDMkRBRTA3OUFBNzEKLToxMDRBODAwMEM2REY1QkIwMENDRjU1MDc1QkJDMTVDQTY5MjVDQzFGRDAKLToxMDRBOTAwMDgxQjJDN0MxNjYwNDAwRjZGMjU4NjgxRTAzM0RBQTgwQzEKLToxMDRBQTAwMDBBOEQzN0MzREJDQzM0QThFRkFDQjJGODIzMDAzMzEwNDcKLToxMDRBQjAwMEJBRTJGMzYyQUM5OUVBMERGNDU4MDkzMjgxOEZGMTM5MDgKLToxMDRBQzAwMEMxMDExRTI4NkY2NkFDNkEyQjhFOEI0NTAzMjUzMDhGODMKLToxMDRBRDAwMEQ0NEI3M0IyRUU4MjUyNjU4OTc1MTk4MzJFRkY3RDA1MjIKLToxMDRBRTAwMDBCQ0NCNDMxMzZENDEzQjA2MzdENTc2OTRFNkE3MDEwNjUKLToxMDRBRjAwMDk1ODc1MDc5QjUyNUNDMDAyRjk1Q0MxRDUxOEFFMjc4NDkKLToxMDRCMDAwMDgxOTFBNzA2RENGMTcxQzRDN0MzRkI3RjZCNDUzMDMwRDAKLToxMDRCMTAwMEQ2RDZGNUJEODQzNzRFNTUwM0ZBNzk0ODU4ODk3ODgwNDIKLToxMDRCMjAwMDdFNEY1NUZGRkUyMTlDQ0U0MjY3ODc5RDE1MDMzREZCQkUKLToxMDRCMzAwMEREMTc2MDJBQ0U0N0EzRjdDRUVENTNBMjNERTFGREEyREIKLToxMDRCNDAwMDFENEIxODhFNzc1NTVBRkEyOEE0QTNCOURGQjdCRTdFM0QKLToxMDRCNTAwMEQ4MTM4MEY3Mjk3Rjc2MDRCNjI2RTg2RjBFRTIxOUM2Q0YKLToxMDRCNjAwMDdCNjg0NTM1N0QwN0NENkJENjNDQzY2NkUwNTQ4QTE5MTcKLToxMDRCNzAwMDExQjRDRDg5OTAyOUU3MUMzNEJENDNGREUwRkQyRDhDOTcKLToxMDRCODAwMDMzQzNGNTgxREE4OTBDRjA1QTU3QUQzMkI1MDhCRkVCNjMKLToxMDRCOTAwMEFDQ0ZDRTQxRjk5NkI2REEwOTZDMDgxNDQyQjYxM0Y4RDgKLToxMDRCQTAwMERDMDlGRkNFNDFCQjQxOTYzOURFMDM4RjZCQzNGQzM5NzQKLToxMDRCQjAwMEQ1ODdGRkNENjJCRUYxQjlGMDVERkQ1QUQzRjNGN0FGRjMKLToxMDRCQzAwMEY5OThBNUUzN0JFQjg5QjY5Mjc4RkIzNzU1RDcwNkM2RjMKLToxMDRCRDAwMDhBN0E2N0U4RkYyMzg0OUZFQjM1RTY0N0JBNURFRjRCOUYKLToxMDRCRTAwMDhCODQ2MThBMzcwNEE2MDZDNjk2QzREQjdCRkJBRkVBREEKLToxMDRCRjAwMDBDQzQ4QjE5MUZEQjA1REYxRDVBMTEwODhDRURERjE1NjYKLToxMDRDMDAwMDFGNzUwMUM1RUVEMTJFOEM5N0VFRTJBMUQ2NUEzQTNFMjEKLToxMDRDMTAwMDU3RUI4QTA3RjNGQzAxNjMxQjEwQ0ZCMzAwQ0Y3NzE1NjYKLToxMDRDMjAwMDI1QzcwN0Q0MjM3QUJDM0QxNUVBQzE1NEM2QUIxMzZDMjMKLToxMDRDMzAwMDE2QzA0M0ZEMTQ4NTM5MTRDMjZGM0FFQjhCRjVGQzEzOTMKLToxMDRDNDAwMEM2RTlDNjZCQzZBMzE5NUZGNTJGMzI1RjE0REFBRDdGRDQKLToxMDRDNTAwMEQwRUQwMzBFNjdCRjkzRjg4OTAyRDI4NjgzM0NFMTU1RkQKLToxMDRDNjAwMEY1RjMzQzg2RTNGN0MwM0Y5Q0U3NzcyQTRBNUZDRTgxQTUKLToxMDRDNzAwMDcxMDQ5QjE1MUZFM0YzM0RBNjlGNUYxRDBCNjQ0NDE1NTQKLToxMDRDODAwMDlBRjdCMTI0NzQzRkE2OUZBNzc5N0NFNkYxQTdBMEIwNUMKLToxMDRDOTAwMDAyRjkxNzdBQkZFODlFQkRCQTdBQ0MxQTFEMTQxOENDNTcKLToxMDRDQTAwMEQ4MzMxRTc3Q0UxRkQyQTAzQzg0RjlDRUMxQkFGQTkyNzcKLToxMDRDQjAwMDhEQ0ExODhBRUZGQkU1RDBGQTM2RjNDNUQ5MTVEQTNENkYKLToxMDRDQzAwMDdCNkRGQTc1Q0VGOTZDNDY2ODRBNjdCRkQ4QkVDMjgyNjIKLToxMDRDRDAwMDlENjUwRkUwMzkzMDU1REQ3MDAzRkNGNzVCRkJCMjU3ODMKLToxMDRDRTAwMEUzQjNBNTVFNTUzQjkxOERGODgyRjkxMkJERkM4QzQ5NkEKLToxMDRDRjAwMEZFNjIwOEMzQkI1NUMwREYxNEU2RDQ1Q0QwQ0VENTIwMUQKLToxMDREMDAwMEE0Q0VDMTVDMjZGOTUzMzQ5NzZFMUVBNzVCOTQyQTk0RjcKLToxMDREMTAwMEEzNDBCQzhDRUIwN0M3RTc2QjFFRjc1MkFGOURGQTAzQUQKLToxMDREMjAwMDdFRkM0MkNGOEY2NkJDQkM1NUREMzcwM0U1Qzg4MTM4QjkKLToxMDREMzAwMDVFODY1QzBDNUU0NkUzNjIwNjM5RTJDOTY2NTEwNUU4QjAKLToxMDRENDAwMERDQTEzODIzNEZDMDk4NkE0MkI3MDdDNjBFNDVCQ0IwRjUKLToxMDRENTAwMEIwMUQ0NEU3NTE0RjExRDU5M0YzQjYzMUY5Qjc5OEExN0YKLToxMDRENjAwMDNDQURCMUIzMjBDRUVCN0QxQkFCREVFNjQyMThFRDVENzIKLToxMDRENzAwMEE2OTM1QjI3QjIyQjhGQTI1Qzk2RTU5QUQwMEZBOTdERjQKLToxMDREODAwMDYwNDRFMjQzQzlDRkI3Mzg1RDUxOTVGM0UxNjc5RDdDM0MKLToxMDREOTAwMDQzRjJBQ0M2RjM4NzgxNDQyNzc2MEVFNkE5NjYyQ0QwOTEKLToxMDREQTAwMDcwREU2QTVBRkExMDk2QzFEODVBQUMwMkYzNTQzMzAzMzMKLToxMDREQjAwMDdGNDQzREE5QTZGNTg5MjBGRkE1NEU3RDcyMkRBN0UzNkUKLToxMDREQzAwMEZENTUzN0VBRTg5ODMyRUJFNzYxNkE1Q0NCMzJFMDNGQTkKLToxMDRERDAwMDRERDBBRjUyRDAyRkE1QzQ2OUE2MUZDMzc1MUEyRTYxM0UKLToxMDRERTAwMDkxQTcxNDgxMDIyODlGRUVFNzhGRTBCQTREQTYzNzI0RTEKLToxMDRERjAwMDNENTM0QUFDNUZCNUU5Rjk5QUI1MTAzRjRBM0FCMkJEQTYKLToxMDRFMDAwMEMzM0E3MEJEMDZCRDU2NzYxN0JEMkYyMUZDMDQzRDEyNzYKLToxMDRFMTAwMDNGMUQzNkQ0MjczMzQyQjZEM0ZBNzY4MjA1MzMyMzJCOEYKLToxMDRFMjAwMEYxQkI3NTBFMUYzRUFCQjM2ODc5NTgwRkYwRTQ0MTNERkUKLToxMDRFMzAwMENFNEE3QzNFNUMzRjJDMENERjQ5N0U0MkJDQTIzMUExQjUKLToxMDRFNDAwMDZCQkYwREU2NTA1MDg2RUQ4MUY0QzRFRkQ2RUFGQTI5MjcKLToxMDRFNTAwMEVFREE2RkU3QkEzMkI3NkJGQTRFNTVDMTdFMjAzQkMyMkQKLToxMDRFNjAwMEU3RjNFOUU0Nzc5RjRDNkUzRjlDRjYwRURCNkEyOTRFMzAKLToxMDRFNzAwMDhFQkYzQTY3QjZERjlBMUQyRjFGMkI3MDU2NDcxMkU4NzgKLToxMDRFODAwMDAxRDk5RUQ0RTc1OTZBRDA2QkMxQjlCMTI3RjdFRDFEOUUKLToxMDRFOTAwMDg1N0FEODczMTk0ODMyNzZGN0VBQzdGN0VERUJDRDkwRUIKLToxMDRFQTAwMDQ1MThFQjgxRDUxRkRGRTc3NzkxRERDMUNCQzg5ODMwN0UKLToxMDRFQjAwMEZFQ0RBOTlENjVCRkQzMEJFNUUyQ0U3MjE4Q0I5QkEwQkEKLToxMDRFQzAwMDNCNzYwNUM4RUJGQjFFREZENzBDREY5RjNERTIyMEZERTQKLToxMDRFRDAwMDc1QkEyQTM1ODI4QjI3M0IzNDg2MUQ4NzcxNUJDMUNDMUUKLToxMDRFRTAwMEM5MDA1NjAzMTA0NkU4MENGNUE0RjkyODU2QzAxQ0UwOEEKLToxMDRFRjAwMDNCNUJGMzI5ODhFRkM5OTkxQUYxODM1NTYzNTEzNzBDNEQKLToxMDRGMDAwMDJFREJFQTUzMTA1RjNGQjJCMzA2MjEzNzJFOURBMkIzQ0EKLToxMDRGMTAwMDVGMjY2NzcyQkI0M0Y2RTM3MEIyNzA0QTU5QkM1REM2NDgKLToxMDRGMjAwMDdDMkI1MThGNTgyNzMwRDIyQkIwQ0VDOTZFOTNFQjVCQzAKLToxMDRGMzAwMEI2MzMyRDkzRUJDRkNFRjU3OUUxRjUzQzJEMzNDMTdBMjUKLToxMDRGNDAwMDNFNjA1OUZDRTEwRkQwOUVGRDhEQ0E5RTgyQTk0Q0Y3QjAKLToxMDRGNTAwMDdFOEY5RURGMThBQTI3MzgzNTM0OTdFMEFDNEM2RUJGQTEKLToxMDRGNjAwMEZDOUUwNTY3NjUwMjZDQUQ3RTYzRkE3MkUwREZDNkVERkMKLToxMDRGNzAwMDBFMUZBQUU1ODVCNzdEN0M0RkI5ODY3ODAyQkFFMzc3MjQKLToxMDRGODAwMEIzRUExRjJDODdGN0Y2RkUxNkIyNjdEN0Y2NjZENUM4QzgKLToxMDRGOTAwMDRGRjY5NTBBRDk0N0VCMzQ3QkQ1NzY4MDBGNjQ1NERFMDMKLToxMDRGQTAwMDhGRURDOTcxM0Q5MDMxOTZDQUFDNEFCMzIwOUYyRjc1RTEKLToxMDRGQjAwMDcyM0UzRjdCRTQ0RTZGMUREQTk1MkUxN0FEMTdGQkNBOEMKLToxMDRGQzAwMEEyN0IyRDUwNjZGQjYxREMwQ0U1MDcyMzNCNDM3NTcwMkIKLToxMDRGRDAwMEI4M0E5M0RCQTlBQjA1QkU3RjIwRjhDQzE5NDMyMjczMDYKLToxMDRGRTAwMEJFNUUwQ0ZEM0JBRDYxODY3NkI2MzM2NkE1RTc3NjA1MDEKLToxMDRGRjAwMEM2OTc4MDRGNjU3QkNFMTgyQ0QyQTFEODlGRjk3QjNCRkEKLToxMDUwMDAwMDNEQzc3OUUxRjc2QTM2MzNEODNERjdFMEY3QjkwOEU1RUYKLToxMDUwMTAwMDM4RDJGODM4QjJDREVEQTRGM0U3NjJGRDk5Qzc3MUQyNkEKLToxMDUwMjAwMDMzRTY0Nzg4OUYwNzMyRkNGNzY3OTIxRERFNjY0Mzc5QjcKLToxMDUwMzAwMDdFOEJFQjM3ODc5NTIxREQ5MUM3NkQwQUNBRTM0OTVGMDcKLToxMDUwNDAwMDJCRDE0MkMwNUY0QUE1MUE1OTU1ODQ3QUNEMzM3MTE4QzUKLToxMDUwNTAwMEYwMDFBQkI0RjkxMDlGQURGRDcyRENDNUJBRkU5RjEyMzIKLToxMDUwNjAwMEY0N0ZEREVBNzFFMzM4MDNFM0MwQUUyNkZFNjZCOUQ3MEMKLToxMDUwNzAwMDYzM0JFM0VBODc3M0Y5MDcwNjk3NEVDRkJFQUU2RDU5REYKLToxMDUwODAwMDVCOENGMjM3NkNBM0ZERDIwQzY3Mzg4MkUzRDNEOTZEMDkKLToxMDUwOTAwMENBMzkyRTk3MzVFQkYwQjhGRDM3NjNBQ0VBNEY0OUVGQ0MKLToxMDUwQTAwMDZBREZDMTM2NjQyRkQ5N0Y1Mjk2ODdBMTBDREY3RDIwM0QKLToxMDUwQjAwMDhBMUY4RTNENzMwMzRFQTM4RDc5RUNDNTdBN0IxMDc3RTIKLToxMDUwQzAwMDRCQzNEMUJFRTE3RjMzNDI0NkJCQ0Y2QzE3RDY1NTk0NUMKLToxMDUwRDAwMEJFMDI2NDAwQkM0NEFBODYyMTlGNUQ2QTIxM0VFQkFFRkQKLToxMDUwRTAwMEJEQ0NEODdEOUNDRUUzOUEzQ0I4QUY3QTA0RTUwNEVFMDMKLToxMDUwRjAwMDA3QzcxRTFGNEI3MjAzNEMyQjZDNzdGMjU4RDUxMzg1RDQKLToxMDUxMDAwMERBRUI0MzE2RTY4NzgxMUZGNEFCMTEwNUU2NzZCMEE0MEYKLToxMDUxMTAwMDZERkZENTg4QjcwQTlCNDY3QUFCODQ2REI4MkUwN0RGNDIKLToxMDUxMjAwMDBGRjUyMDlFMDNDMjBFODFGQTVDQkY3OTlEOTFGRUYwQkYKLToxMDUxMzAwMEFDRDU3RkRDNTVBRkUzQkI4MzE1QzcyRkM1RkQwQUM4Q0YKLToxMDUxNDAwMEJEODY0NEZDQzREODRBRTJFQkJEREY0RkE1NzYzRTdDNjkKLToxMDUxNTAwMDQwODkzODYwRkNFM0Q0QUY1RjFEODFGNkVDMEY2QzNFRjQKLToxMDUxNjAwMDg3NDZEM0IyMjA1RDI3Rjg5OEQ4QjhGQTVERTM3NDc2MDUKLToxMDUxNzAwMEMwNzExNjE4NEU3NjY1RTk5MTRBMDdEQUFGQUIxNTVBMzkKLToxMDUxODAwMEE3MTJGRjMzNDI0NjdCMzNCODE4RUMzMkFEQUI3RDBBMzEKLToxMDUxOTAwMDhERDk5MTlGQkI2QjlGOUFFREFCQjM5OUMyQUUyQTYzMzkKLToxMDUxQTAwMDY1N0FCQjJBOTk5RTkyNzY5NTk1RjlGRjQ2NzI4N0I1RTYKLToxMDUxQjAwMDU5NTFFRjRFODIwNzg5RTRDMDREMTk1Q0VFOEU1MzNGODIKLToxMDUxQzAwMDIzRkE5Q0FFNTAzNUM0RDdDMUQwMjcyRURDOEYxRkZDRUMKLToxMDUxRDAwMDVBRTVGQjYwN0ZBRUMxOEVDQkM5RTI3RTgxNEQ3NjMwNTEKLToxMDUxRTAwMEM4RTBCQjREM0Q5QzkxOTVEMEQ0RUVFRjVGOTZERjQ2NzUKLToxMDUxRjAwMEY0RDExRTFFODU3NEZDOEQ4REU0NzBCMkYxQkE0MzJBODEKLToxMDUyMDAwMEVCMDc4QzM5MzFBNDEwOTRGNDJCMENBNTMwQUI0RTNGMzYKLToxMDUyMTAwMDE0QjJDNEUzRUY5RkM1Qzc5RjdCMDdCMzY4RDA2RjY2MjYKLToxMDUyMjAwMDk4RjkxM0VEOEY2NTNERDgxNzhGQjczMkFBMUZDRDg0M0IKLToxMDUyMzAwMEYxMkRFQTY3MjFGRTk0RkJFMzE0NUJEOERGMTNFNjZGRTAKLToxMDUyNDAwMERCQjkyNDhDRkJFNDQyMTgxRjhFNDM4M0YxQTFCRTJDRjIKLToxMDUyNTAwMDBBQTU1MUI5Mzg5NDREQjA2RjI4OTM2MEJGNTA0RjdBNkEKLToxMDUyNjAwMERGM0ZENDk3RTAyNUExMjI3QTNFMjAzNDkwQ0EyNUExQzEKLToxMDUyNzAwMEExMDQyRjBEOTUxMkJDMkM3NDI1QzE4MUEwMzdCMURFN0QKLToxMDUyODAwMEEwNTAyNUMxQzFBMTZCRTlGOTkwRDA3NTA0MkYwRjREMzUKLToxMDUyOTAwMDIxRTgwQjREQTNGN0E1QTE3QTgyNjVBMTVBN0EzRTM0ODUKLToxMDUyQTAwMDM0OUZDQUMzNDJCNzUyQjkzQ0I0ODRFMEYwRDBFRDA0OTUKLToxMDUyQjAwMDQ3ODQ5QTA4NTY4NDU2NTJCRDkxQTFCQkE5N0M0NUU4MDMKLToxMDUyQzAwMDdFODI1Nzg2RUUyMzM4MkFGNDI4QkQ5Nzc2NEJBQTU4NUIKLToxMDUyRDAwMDhGNzc2QjMzM0RFOEVGMDAwRUQ3OTA4RjkzQURCQjk5N0UKLToxMDUyRTAwMDU5NUMyRjFEQzhGNDRGQzgyQThGRDdCMzVCNDA4RkJCQzIKLToxMDUyRjAwMEJBRDYwQjY2NzFCRDkxODk3NDRERDBERTM0NDFBRjUzN0YKLToxMDUzMDAwMEJFNjMwRjBENjA3MUJBQURGMzlFREY5RkMxNEExMkVGMEQKLToxMDUzMTAwMDM3RTJGMjgxQ0ZFRkRBMkMyRUJGMzY1OTVCRkQyQUYyNEQKLToxMDUzMjAwMEVGNjJFNjBCQzNBMzg5QzM1RTU3NTBCRTZDRDZBQzU1ODMKLToxMDUzMzAwMDg5RUNCQjA3QjI2Q0Y0REQyMzk5QzFGOTU5MDBEMzhBMUIKLToxMDUzNDAwMDRFRUM0NTc5MzIzOUVDNzk3NTM0RjJDQkEwOUNERjhDODgKLToxMDUzNTAwMDg2RjYwQTlCMkRCNERERDc5ODY3MzdGQUQ3QjRCMThDOUYKLToxMDUzNjAwMEU0QTJGNDJCODE1RDY3RDBBN0VCMDU1RTE4REJCQUFGMzIKLToxMDUzNzAwMDk4RDY1M0JGMzJBRTdGREFBRUMxRjU2NUZGN0UzMUVEMTAKLToxMDUzODAwMERGMzdEOUEzOEExNUVEOUJBNUEwQzM3NEY2RkZBNjM1MTgKLToxMDUzOTAwMDc1M0ZDMUY3RjFGNkVDMzRDRUMyQjVFQzI1MzRCMThCRDQKLToxMDUzQTAwMDVBQjREMTI5MDBGQjZFRjRCRjk0MDI5RkY0OEYwNDQ3RDYKLToxMDUzQjAwMEE3NDI3OUMwRDNFMTk3MTA1RUJBMzUzMjNBMERFMEMwMEEKLToxMDUzQzAwMDFERDE5NzUwREMwQzhFQjY4RDc2NDFGOUYyN0Q2QzBGQjUKLToxMDUzRDAwMDJFRkZEMjU2NkQ4QzFCQ0E0MzBGRkJGNzAwMUJCMEYyOTkKLToxMDUzRTAwMEI2RTA5ODc0MERDNzEzNjk0QTg3RjE2Q0ZBMDAwQzNENUEKLToxMDUzRjAwMDI4NTc3Q0Q2QTJDMjc2Mjg0RTdGQjBFM0QwN0U5Mzc0MjUKLToxMDU0MDAwMDcxMEY2QjFEOUIwREZGRDk2Qjk5QTc1NEM1RUZBRDZENDcKLToxMDU0MTAwMDI5OTk4M0JBRDI2NzMzQ0UxQkU3MDk3QUU0Mjk5ODU3RDIKLToxMDU0MjAwMDJGN0Y1NEYxRThGODY0NDc5NjIyRTlGMDE4RjI5QkY0RDQKLToxMDU0MzAwMDRCNkU2RUNFMjJCRkU0RTY1NDRGMjU3NkQ5MzE4RTc5N0QKLToxMDU0NDAwMDlFRDA5MDhGQUQ4NDI3RkJFQTYyRjJDNzQ5QkUwM0ZDNzEKLToxMDU0NTAwMDFBRUNEOUY1ODJFRjM2NzVEQUJCODlGMUJCNDNDOEJGQzgKLToxMDU0NjAwMDdGMTVGQzdFNUJGMDczMzJGQzNBOTE1NzQ2NUU3ODFERTcKLToxMDU0NzAwMEVGMTdFQjEyRDZGMUNCQzhERkM5RUE5RDEyRjgzN0UzN0MKLToxMDU0ODAwMDc5QjM4NUVEMDM1RDA1RkQwMjlGRjI3NUM1RDA4RkY2RkEKLToxMDU0OTAwMEIxRTBFRjBCRTFGNUY4QkYxOERGNDYyRjgwNTdBNkU1MjYKLToxMDU0QTAwMDkwOUMwNDdFQkQxNEZENjNDOUU0OEQ1REVDNjdDQ0VGNzgKLToxMDU0QjAwMDYzNURFNTFDRjdEQjdBNDBDRUY1NEQyRUU3RjY2NkYxMkQKLToxMDU0QzAwMEU3NDlFNTk3OTAzMzc2OTM3RkM3OTZDREZCMUJFQTA5QjIKLToxMDU0RDAwMEE4RDk4OUZDRDRERTFDODM5RjdBODJFQUE5NDQ3OUMzQzcKLToxMDU0RTAwMDA2MzBCMkEzRDMwNjQ1QzJCODRGMjkwQzZCNjUyQTU2QzUKLToxMDU0RjAwMDQzQTE4Qzc4RUM1MTQyRkU4NzIyQjAzM0FDNDA3RjY4RTgKLToxMDU1MDAwMDJBOEFEMEE5NzkyQzc1RTg3Rjk3RUJDRDUzRUJENUFGREMKLToxMDU1MTAwMDM3QTlFRkUzRUI1MUYyNDVENkU2QkJCODVGNTI5QjAyRTkKLToxMDU1MjAwMEY2Q0I1ODMxRUU3ODNCREMwRkIyRTY3QjNEMzZERkE1OUIKLToxMDU1MzAwMDkzODM5QkJENUUyQUNCRkFDOUY4QjcyRTVCRjA2RkYzNUQKLToxMDU1NDAwMDJBQzJBNzczNTQ2MkJCRTE1QkQ5QUFFMERCMEUzRkYyMkIKLToxMDU1NTAwMDc5Rjg1QkNDODNGNjRDNjZGMzMxOTI0Rjk5MjA5RjE0MTcKLToxMDU1NjAwMDkyNEZCQ0ZGNUVBMUQ0OUY4NEExN0M1NTc2OUVGMDAzMzAKLToxMDU1NzAwMDc4NTI2Rjc0RkZERkUzRTcyQ0I0QTk3MDNEOERGMkVDMzUKLToxMDU1ODAwMDU2MzE0RTAzN0E0OEMzNzUzQTBBQzYzRTBDRjE2NTI3NzgKLToxMDU1OTAwMEJBNkI4Q0QzNTExQkM1MjI2OEY3MDJERUEyQjg2RjBGMUQKLToxMDU1QTAwMDVCRENFNDY3QjJEQjVCRkNCODlFOTkzRDkzRTYzRkQ0REQKLToxMDU1QjAwMDEzOUM5MDdEOUU3NUUxNDlEMzRBOTFBOEQzRUZGRkQ5MDIKLToxMDU1QzAwMDM1MkVFMEJGMzU0NTlFNTQyQ0RGMENFNUY1MTVEMDZGMjgKLToxMDU1RDAwMDU2MUIxM0U1NzVBRTkxREZEQ0VGMzEzREZCQjlGRENEMTgKLToxMDU1RTAwMEQwREZBRTJDRkYzNDFDMEZGMEY1NzQ4NEZFMDExRTJCQUYKLToxMDU1RjAwMEY5QUJCREREQjMwN0U0RkE4Q0FGMjc0RkE5NUM0RkI1MUIKLToxMDU2MDAwMDgzNDgxRUNFQzE3NjY1N0JDOUVDOUJBMjZDMkVFNzQyMTcKLToxMDU2MTAwMDAyMjZCMzZGMjRERjVGQjQ3RDIzQzYzQjNCRkJGQ0VCNkMKLToxMDU2MjAwMEZGQUQ3REY3NkZEQ0MyNzRGRUM2MUUwRkI1NUEzNUY0QjAKLToxMDU2MzAwMDY3NzAzRjhEQzVEOTRBRURCOTg1QkZEMThGRkU0NkUwNzEKLToxMDU2NDAwMDAzNjczRjVFQzZCRjQ0RkVFMkU0Nzg4Q0QwNzhBNDlGMzcKLToxMDU2NTAwMDUxRkExM0QzMDU1RjMxQUIxMjQxM0Q5RTVFRTFCMUQ2RTUKLToxMDU2NjAwMDUxN0I2REVDM0JEMERFODMwMjRGNzI1REEzREM3QTdFMTIKLToxMDU2NzAwMDEwQ0FBNTJDMkJFRUQ3RDE5RkU0Q0U4QUI3OEZFNThDMkMKLToxMDU2ODAwMEIyQjg3QzYyNjIxRjc3QUIxODczQ0IyQTVGMDZCQTlDRjQKLToxMDU2OTAwMEMzMDdCOTFGQTVFNTg3N0M1RDRFRUNDNTIyQUI1MDRFMTQKLToxMDU2QTAwMEY4OTlFNjgxRkEyOTRDRkVGOTBERkVFNDA5NUYyOUNDNTAKLToxMDU2QjAwMDBGRTMzRkYwOTU0QTUwRTlDN0EyNkVEOEVGNERGNDI5QTkKLToxMDU2QzAwMDUxREMwN0RBMkRDRTA4RUFEMkNBMUU0RTg2RjE0RDdCOTgKLToxMDU2RDAwMEJBMjU4MkYxMTFGQjMxODVFNjY5MkY0QjhCQTBGMDFCQjcKLToxMDU2RTAwMERCQTMyMjAzRTM5ODY3MEVFQzcxMDUxM0QwRkZBNjYwREQKLToxMDU2RjAwMEFEQzFGRjY1QzY2MzY3QkRFOTJGN0IxMDhGOEY1RTIwNEMKLToxMDU3MDAwMDRFQkIzN0JCMzM0RUJCMEJGOTc0RDJDQzhFNjZCQjE2ODcKLToxMDU3MTAwMDhGRDNDQUY4NjM4MTc3RkJCQTRBNTQ1OTBCQjg3RERBNDQKLToxMDU3MjAwMDgzNDU1NkVBRUQyQTVEMUM3NDFGQjZGMzY4M0MwRURBMTkKLToxMDU3MzAwMDdBODkzRTBFREFEODYzMjdEQUJCM0ZFRThDODMwNjdGODgKLToxMDU3NDAwMDg1RkFDNDlGQkRCNTE0RjlGNzUxREZGNjY3RUU0NTdDQzUKLToxMDU3NTAwMDNBNDRCQzYyRTgxMTk3ODY3RUZBRjIzREI5Mzg5RjU3MDkKLToxMDU3NjAwMDRERTM5NzUwRkFGMUNDRkJFMEMzRDlDNkY4QzIxOURGN0MKLToxMDU3NzAwMDc1MTk1MUUyQURFQzg0RUI1QkZBMTdFNTdFMThGRDg3RjUKLToxMDU3ODAwMDlFODRFQkQwODg2RkQ5N0Y4REMyRjdCNUNDQTY3MEY5MTcKLToxMDU3OTAwMDI3RjQyOEM4OTc0RjQ4MEU0NDE4RTk0REJGNDM3OTAyQjMKLToxMDU3QTAwMEY1Q0QxOURGNTAxRkM1M0Q5M0M4MUIzOTFFQzA2M0ZGREYKLToxMDU3QjAwMDQ0RjE1RkU4MkY2MTlDRDU5QUMzRjU1ODhEOERGQjRENjAKLToxMDU3QzAwMDk1MjVFNThCNzE1QzM1NkU5N0UyRDBGOUZCM0I4NEJFODUKLToxMDU3RDAwMDMzQzc4NUQ0OENBRkNCODNDMkVGOUQ2OEZFRTZGODRFMEQKLToxMDU3RTAwMDg3RDAxNzg4MkZCRDlGRkM0MkY4M0E2QzZCQTFGOEUxNzcKLToxMDU3RjAwMEUxNTkyQTVCMDlFRDlDMDk4RUM4NjcwOUJFOTdGMDVERTcKLToxMDU4MDAwMEU0OUJGRTAwNzM3ODdGOURGNDRDMTIyRjNBQkNBMjgxN0EKLToxMDU4MTAwMEUyQ0NFNjc4NUFFN0ZCREE5NDZBRDRERkQ1ODg0NzVEQjQKLToxMDU4MjAwMEJGRTUzOTVDQ0Y0RjEyOTAzOTgyOUEwN0RFREJFQjFFNjEKLToxMDU4MzAwMEY0MzA4QzdGRjVGRkEyM0NFQzQ2QkY1OEM3MEIxOEJGNzUKLToxMDU4NDAwMDYwM0Y3MDkzQkZBMkJBRjZDQkYyOTU4Mzc1RjhBQzYwNTcKLToxMDU4NTAwMDNDM0VCQkU3QzcxRTBEOUU1N0Y3NkZDRTBEQkI5MkUzRDQKLToxMDU4NjAwMDcxMTJCNjA1NzhCQTFCMUY4QzI0N0Y4QzJGODdGQjM3RUIKLToxMDU4NzAwMEJCRTU4RjYxODM3ODVDODhFRDQ5QTFGODY5Q0E5QkFBNzIKLToxMDU4ODAwMDBGRUQwNkVDOTdFQjAxRUU0RjVFMjZFMjI2RTYzODVFNjIKLToxMDU4OTAwMDc1Njg5MTQxQkVBNEM1MTQxNkQxQzUyRkQyQUM1QkM5QTEKLToxMDU4QTAwMDNGOUIxNkIzRDI3M0YzN0FDQkNBODFGNTM2MzBCRURFOTYKLToxMDU4QjAwMDI0RkU5M0QxNTNFMkRGRkM3Q0IwQzBGQkUxREFCOTFBREQKLToxMDU4QzAwMEZBMERFREE5ODlFREUwNjY1MTRGOTZDREY5MDhDOUUyRDAKLToxMDU4RDAwMEVFQjU2MjdEOUMwOThFQ0M0NzdGNTVCNTNERENCRjNCNjQKLToxMDU4RTAwMEVCNUNFMkU3NDI3OTBFMzdFN0YwRkQ5MDdCRUExQjIyQTIKLToxMDU4RjAwMDhFQTczNjYzNkI1MkFGQTY1OUNGMUY4RkY1OUJFMkIxQ0YKLToxMDU5MDAwMDY5QzNCQUM0RjNGRTI5RjFEODFGOUFFOEQ3REQ3OEVDNTEKLToxMDU5MTAwMDc4QjExRTJGOTQ4NzcyOTNERDY4Rjc0ODc4OURBMEUzRDUKLToxMDU5MjAwMDk5NjAwQTBCODM3Q0JDQjU1MkE1MzgxNEYwMDdFOUM3MEYKLToxMDU5MzAwMEMzMEYyQTY0NkY0NjZCMURBNDk3RUI2QjUzQzgzRjVCODQKLToxMDU5NDAwMDVGQUFEMkZCRkEwRDJBRTlDRjI4Qzg4NzA1MjAxRjVFN0YKLToxMDU5NTAwMDE1NzJDMkVDOUZBRDY0OEEyMTdFM0U2OTU4OEFBMTNDRDMKLToxMDU5NjAwMDc1RDZGREFGQUU0MEZGNzI4NTREQzNGRTBFNkFEQ0RGMUIKLToxMDU5NzAwMDFDRjZBQjY0QkY0MjFCQkUyOEZBQTcxRkI4Q0E4N0ZBNDEKLToxMDU5ODAwMDRDRjJDMzQxQkY0QUVCMkQ3QzQ4RjU2MUI3QURDMjFGNTUKLToxMDU5OTAwMDdENzA2RDY5MDRGMzU0OTgxMjhGRDM2QjdEQjFGRDdBREQKLToxMDU5QTAwMDhBMDNCRkUzREQ0ODcxQ0U5NEJGM0UxQzA4RDBGRTMxQjAKLToxMDU5QjAwMEE4OTU5MkRFRTRGMUQzMTRCMTRFQzdGNEE4QjgxMUY1NUUKLToxMDU5QzAwMEY4ODdFQjZEMENGRDQ2MUZERTcxODZENjczREI4QUM1NEEKLToxMDU5RDAwMDk0MTcyMUZEQ0JEMjNGNkNGNjMzOUJGRENCNURGQ0NBMDcKLToxMDU5RTAwMDI2N0Y3MkIyN0M4Njk3NzIxMkM3RUJBNUJDNEFDNjFGOEYKLToxMDU5RjAwMDIwQjZGNjdGMTMzOTI2RTVDN0JCNjI5RTYzN0E2Q0RDNUUKLToxMDVBMDAwMEIwMTJGMDkwMzY1MzI1M0M0OEJFN0NFN0VCM0IxRjQ3NzUKLToxMDVBMTAwMDM5OUMwMkZDQjE4QTIxM0VGRkUzNjVEQzg3QjBCOTRBQkMKLToxMDVBMjAwMDQyM0Y3MkFBOTRFQjk4M0Y1MTEyQTdDQkQ0RTBEQ0NFNTAKLToxMDVBMzAwMDMyMkVGRjY5MEQ0QjBDNzkxRjY2QkQ5MjVDQUU5RDVGRTcKLToxMDVBNDAwMDZFQURDRkUxRkUwQUIzREUzMUFGODc3RkI0REVBOUFFMjMKLToxMDVBNTAwMDdEQjAwNEJGQUZBRTlEMTU0MUI4QUU4N0IzMDFFNUFGRDEKLToxMDVBNjAwMDU5M0U5OEY1QzQ3NTI2MzkxQkQ3MEYyQThCMENENThGNTQKLToxMDVBNzAwMDVCQTM3QTcxM0Q2MUE3Rjc2NzUzNzhCRTQzQzhDOUUxNUMKLToxMDVBODAwMEYyRDRGNDI3MTA5RTRERTFGOTBFNjEzNDBBRDE0RUZEOTcKLToxMDVBOTAwMDIwMkREMjQ0RkJGMkM1MjM5MDRGNDJDQ0Q3MTZDNjc5QjUKLToxMDVBQTAwMDdBNTNDOThGRDBEMjhCRDc1M0FGNDlFNTc2RjlERTRBMDYKLToxMDVBQjAwMDlBQUYyQTBERjNFNjRBNUEzNzRENjIyRTNGQ0UwRUY2QzQKLToxMDVBQzAwMEM4ODVGMTM0RjkyRDI5MTg1RjE4RTNCNkVFNDdENzRCOTYKLToxMDVBRDAwMENCNjgwQjczQjAzOEJFRTI3OTIxQ0NBM0MwRjdGNDRFOEIKLToxMDVBRTAwMEMxRkQ2N0E5RDNERTk3RUNENEUyNUNFNENCMUZDMkZFMTQKLToxMDVBRjAwMDEwRjhGRUMwMDE3NUZCNjY5OEVBMDFERkQwOEM0NDc2OTEKLToxMDVCMDAwMEJBODRFNjM4RjI5MUVGQkVERDA3RDdFREVGNTk3MDMwNzkKLToxMDVCMTAwMEI2RDc1QTVEQkYwMUUzQzM4RDNCNTQ4QTJGNERCRkVEMEQKLToxMDVCMjAwMDlENEJDOEVFMzZDNTI5RDU3NDY3MDlGQTUzOUE5NDU0MkIKLToxMDVCMzAwMDFGQ0ExMzg5QzdERDZFM0JDOTk5QTYyMzY5QjQ5RjY4NDQKLToxMDVCNDAwMDNBQUE4OEIyOUJFNEExQzRGQjVFQTg1NzMwMEM3Mzk1QjcKLToxMDVCNTAwMERDMjQzNzI1RkU2MTVFNTcyMTdFMjQxRDJBNTlGNEMwQkUKLToxMDVCNjAwMEE4QTJCRjZCNUU1NUU3OUY1NzJGMEZDOTBGRTQzMzM1Q0YKLToxMDVCNzAwMDNFMEZENTZEQTVGOUI1QjM1NDFGOEUyRjI0RkM0M0VDMTEKLToxMDVCODAwMEZEMzREQUZGNDkzQTM3MEE3RTk0NzQ1RTI0RThEQ0JFQkQKLToxMDVCOTAwMEYzQ0I3QkFFODRGQTJERkUyQzhBM0FBOEJEMTlFMUExODUKLToxMDVCQTAwMEZEN0QzN0YxODlDNDgzOUMzN0YwQzU3NEZEQkNGN0VDRUIKLToxMDVCQjAwMDFDN0EzODg4REZBN0E3NTIxQzVGREFERDMyRUZDMDNDQzEKLToxMDVCQzAwMEZGMUFCMTdGNkZDODU1M0FFRDVFRjQ1RkJDOUEzREJBREIKLToxMDVCRDAwMDIxQjczQzQxN0Q2MUVGMDJCRUU3NjNCRjk1MUVGNjQ1RUMKLToxMDVCRTAwMDg0QzVGNzc5QzlGMjFCOTZFNzJBMTc5QkRGQjA1Q0RGMDMKLToxMDVCRjAwMDdGNjc3RUMzMzdBN0U3QUE4QkExNjdBM0Q1QjU1NkM5MzAKLToxMDVDMDAwMDg4RTM1QkVFOUI2OTQ5NkI1REQ3QkY3OUZENDk3QTI4RDQKLToxMDVDMTAwMDNCNzdGRjE5RTNGODY2QjlCMDVDNURDQzE0RTg2N0NENUIKLToxMDVDMjAwMDYwQkUyRUQ5MUQ0Q0EzRkMyMEQzN0FCOTkwQkMwMUZBREEKLToxMDVDMzAwMDNGOEU3NDQ4MjY3N0JBNEJGRkE3QkJEMkZGRTlGM0QxNUEKLToxMDVDNDAwMDdGNDM3NkUwQTdGODFFQkJFQTU5NDZGQkMyNjdCMThDREEKLToxMDVDNTAwMEYyQzQ1RTRDRkQxMURGNzY2NDMyQ0E2NzkzRjkzMTcyOEIKLToxMDVDNjAwMDNDMzI0RkU2NTc5OEI0OUFBQkNCQzMyOUYxMjlBODI3MDkKLToxMDVDNzAwMEJBQzExRkJGRkEwN0YzQzcyQkU3RTc4RjI4QUREMzg1NUIKLToxMDVDODAwMDgyRkUwQjY1NUVDNkY2RjNFNzY1NzQ4MzdFNkYyNkEyMUYKLToxMDVDOTAwMERGNzJENUQ3MTEyQ0VBM0VGRERBQkFEMkFGRURGQ0Y0QjMKLToxMDVDQTAwMDBCMUUyNzdENjI2NzVGOTBGRDVFNTFFQjQ1N0UxOUVBMTIKLToxMDVDQjAwMEYxNEZDNkI4RjlBRTk1NDJFRTE0MDFGREUwRkRDQjM5QzcKLToxMDVDQzAwMDJBQzlCNTFGQjFDQjQ4NkU3RkNCNjJBMUYxQjY4M0JDQTgKLToxMDVDRDAwMDdFNDJFOUQ2M0NDRjkwREU2MTYxNkIxNkI0QkJGQzNBRTQKLToxMDVDRTAwMDQ2RjEzREFGQjY1MkMxNzJCRTA2N0E1QUVCRkU3Q0ZGNUEKLToxMDVDRjAwMEQ2NzVCRTdGQkI4MEJDNTJGMjcyODkzRjk3MjE3RjNBMzYKLToxMDVEMDAwMDM1OEZGNTdDRjJDQTlENjdCNDEzQkFDMThGRUVCQ0RDNDcKLToxMDVEMTAwMDdGMjgzRjdBRjMyRTQyQUY3NjAzRkZDNUQ4NUUzMjM5MzMKLToxMDVEMjAwMEQxREQzQzUwNThBN0FDNjc1NkQ3RkUxOUYzNTE1Q0FEOTYKLToxMDVEMzAwMDMyRERDOUY1RjYzNjQ1RThGMUQyMjA5NURENEUxMjE2NzIKLToxMDVENDAwMDdCODU5RTNGQkQ5REJGNTc0NzI3QjYyQjA3RTY2NTExNTQKLToxMDVENTAwMEZFMTc2RTVEMTJCMDFBRjI0OUMyRjRGQzVFRkY2OTRGODUKLToxMDVENjAwMDNGMTVGM0I0NUQzNDlGRUM4OURDMEYyOUU3MkZGM0I0QzIKLToxMDVENzAwMEQzQzU3Q0IyN0JGMzc5NjcxRkUxNzlFRDEyNUZFOTYyRUQKLToxMDVEODAwMEJGOTE1MTYxMzVFQzIzMjRERTk2QUIwMTA1RkRFODk5MDYKLToxMDVEOTAwMDM5MENEMzI0NjA5RjMwNDg0MTNGNTdBNkRGNTg1RkUyNUIKLToxMDVEQTAwMDNCOTdBREZGNUNDNTk0QUYyQUUzRkI1Q0RDQ0YwQ0MxMzUKLToxMDVEQjAwMEY3QkFFNzA5RjZBRjQwOUYxMkNDMUZCQjMxNEZFQzRGNEIKLToxMDVEQzAwMEVDQ0M4QkZBODhBOTM1RTdFNTIzRERGRTY0N0E1RTM3RjMKLToxMDVERDAwMEY2MjdGNTc5MzJERTZFRDQ3QjVCNTM1ODQyM0ZDM0U3M0EKLToxMDVERTAwMDYyM0Q4MEJENDJGRTY2NTVFOEI5QjE2RDQ1OTRFRkIyQTMKLToxMDVERjAwMEQ0QUQ5MUZGNDE1NTdEQ0UwOTQ1NURCRkNGRjRDM0YyQ0YKLToxMDVFMDAwMEQ2RTEyM0JCMkE5NTY5QkE3OUU3MDZCMjBDRTVGQ0VBMkMKLToxMDVFMTAwMDFFODZGQTA1QzE2MkMzRkI5RTBEOTcxOURFRjc1RTVDMTQKLToxMDVFMjAwMDY2MjgxNzg2QUUzMEQ0MkYwMkM0RUFDQjdERDdGRTlCRkUKLToxMDVFMzAwMEExN0VGRjk2RUYxOENBMDMzNkRFNkNBODdGNjlBNENFNTgKLToxMDVFNDAwMEYwN0VFMEQzRjMwQ0VGMDc2RjVENkEyODVGQkVFM0ZCRTMKLToxMDVFNTAwMDg2RkE0REMyOEY2Q0M2Q0JGNjNDNkUxNzM1NTlCOTFDMEQKLToxMDVFNjAwMDVBRTkyQTIzRkY2NjkzQ0JFOERGQkM0N0Q0QUJDQzE4QjIKLToxMDVFNzAwMDU1ODI3RUY1QTY2M0E1MjU4OEVGQkRFOTU3OTA5RjNEMjUKLToxMDVFODAwMDE5NUY5OEU1NUEzMjc5NkE3RUZFOUNBMEY3QTk5N0VDRDMKLToxMDVFOTAwMDE2RTRFQjQ1N0I2MERENUUwRTY1RDdCQjZCNzA0RUVCQTkKLToxMDVFQTAwMDA2RjFGOEFDOERGMTdDMjExOUFGOTFERjc3QzY2QkFDQjAKLToxMDVFQjAwMDNFRUVBRjRENzdCMUJCMTJGMEM1M0Q3OTVBNDI3RkFBOTUKLToxMDVFQzAwMEU0QTM2NDc4OTNGQzc4MjFCQ0JEMjBFQUZEQkQ3ODdCMTcKLToxMDVFRDAwMDVGRTFGOUFFN0E3REIwMkRDMUI4NEU4OTc1MDVGQUU2NUQKLToxMDVFRTAwMEI1M0M2RTBGMEQ0QjI1NEJERTQzRUJGMTYyRjU4MTFDOEIKLToxMDVFRjAwMDA3RTg4Mzc3NTFCRjk4RjM3NDRGNTVCRjMxRkI2MTBEQUQKLToxMDVGMDAwMEVCQ0ZFNkY1MkRCRTEyQTQ0QjMyN0ZGQUE5QkMyRUZFRDQKLToxMDVGMTAwMEY0MDZFRTRGNEYzNUUwRUQ3REI5REU0RDdFQkRBNkY0QzMKLToxMDVGMjAwMEFGQzg5RkRFNjRGNzk1NzRDNzlGRkUzRTdDOEJGREJEQjYKLToxMDVGMzAwMDgwNzRDRUQ1RDE1N0Y4RTM5M0VEQTM0MjhDRURDN0YzMkYKLToxMDVGNDAwMDEwQ0M2NUQ1RjRGQkE2NjRGQjYzMjlDRjYxN0Y1QzgyMkUKLToxMDVGNTAwMDcxREExNkRDN0YyOTA5RjVBMDM1QkY5Q0Y2Q0ZBNDBGQjYKLToxMDVGNjAwMDVBNDAwRjNBQzg0RkMwRjY2QjUwNUUzRUM2QzJFRUQyRTIKLToxMDVGNzAwMEUyRjM5NkY2QkM4M0Y5OUM3Njk1RTg5QTlBOEY3OEY5QzUKLToxMDVGODAwMDIxNUI5NkEyRkU0M0Y2OTlCOUY5MTdBMUU3RDk4NUUzRkIKLToxMDVGOTAwMDdENjRBNzREODRGOUFGRDJFREFGMjU3RUNDRjEzRDg5NkMKLToxMDVGQTAwMDlGODkzRTFFQkY1QjBERkExMUUzN0JCQjczQjk5RTVFRkEKLToxMDVGQjAwMDBERkI2RkM0QTMyNzNCRTBFRDgzRjYzQzNDN0YwMkM5OTkKLToxMDVGQzAwMDkxM0I5Q0Q2OEZDNEFCMzlDRUQ3NURCOTMzMjI5RkYzQkEKLToxMDVGRDAwMEEzQ0U4RTFCOTE5RkMwM0YxMzNGQUZDMkU3QkY1NEVDQ0YKLToxMDVGRTAwMDlGQzdBOTgzQjZBMjFGRjM3NENDNEU3ODUzMTlDRkJCQjkKLToxMDVGRjAwMDZDREM2NzYzMTFBMjIzQ0Y1Rjk2NzRCNEM1RDZCNEEyREMKLToxMDYwMDAwMDdFQjYzMTczQkVCMjk2ODFGM0I3RURFM0U3QzQ1ODBFQTYKLToxMDYwMTAwMDdGMUY2NkNFOTU2OEY3NjQ1NDE4RjU1N0E2REZBOEJGQjIKLToxMDYwMjAwMEIyQUJCMjRDRkFDQ0E4QkZGMkFCOERGQUFCMjA2OEQ0QkQKLToxMDYwMzAwMDVGM0QxQkNBNENGQUNDQThCRjBBNDNBMzRERkFDQ0E4QkIKLToxMDYwNDAwMEJGRkFBRUZEOEU0OTlGMTlGNUQ3ODA4RDQ2RkQ3NTY5NjMKLToxMDYwNTAwMEM0QThCRjA2M0VCREQ0QTRDRjhDRkFFQkYyMURBQjBDOTYKLToxMDYwNjAwMEVGNEJBMzc3MTlERTBGRERGNzIzNDNCOUJDRjUxMTQzREUKLToxMDYwNzAwMEZEMzlGQjdGNEU3OTNEMjMwRTNGNjFBODM3QjJFREE3NzYKLToxMDYwODAwMDg2N0E4MEYwNTZDQ0ZGOUU0OTI0NjFFQ0NBOTNDRjFCRTAKLToxMDYwOTAwMERFQ0YxNEY2REE1NTFEQkYzNEI0QzM1QTc4MUU3NzE4MTQKLToxMDYwQTAwMEZFMjFCRDNFNjI0MTNCMUEyOTU2RDZGMTRBNEZBMEVCNzQKLToxMDYwQjAwMEEyODhFMjhCNDJCNUI5M0JCNjBEQzc3MTdDRkFDMTM1RjcKLToxMDYwQzAwMEZCQjA5RDM5MUI4REY5REY3MzIzQzY3MjIzMkJDRTQwQTUKLToxMDYwRDAwMEI5RDAwODdDMTEwMTNFOTk4Rjc5RTEzQUY5MzY5RjJEQUMKLToxMDYwRTAwMDE2RTcwMkJCQzc2NzczRjY1RkM3Mjg5RjM0RUM2RkM1MUUKLToxMDYwRjAwMEJDNzczOTRGQzk2RjdFQzE2RjcyN0M3MkJFRjNDMUZFMkYKLToxMDYxMDAwMDhCNkFGMTc5RkFFMTFGREY2RkI2RDk5MTZGNjdFRjUwQjMKLToxMDYxMTAwMEQ4MjM0QUQ3RjkzNEVDQkM2RjREQ0YwNEYzMzJDRkMzNDgKLToxMDYxMjAwMDZDODdGRTI0REYxODNGMTlBN0JBMjg1RTcwRkE5MEVBNDAKLToxMDYxMzAwMEUzRkU0NkUzM0E1Q0JBOUZDNzA5OTYzRUE3OTBCRkNFRkUKLToxMDYxNDAwMDhDMEY2OTlGMjZDMzhCMUFFNkZCODZDNjFDMTY4OUU4NEUKLToxMDYxNTAwMEQ2OUYyNkYwRTFGMDFBRDdERjY5RkMwRjFDQ0Y2MzZBRTcKLToxMDYxNjAwMDA0RjM4RDUyQjQ1NDMzQkYwRDhGQjJBRTc4NEUyQjMxNDEKLToxMDYxNzAwMEFFNTMzMzlFRERCRTFFMDlGOTRBODM3RjM4OEVEOUUyQzUKLToxMDYxODAwMEZDQTE5OUFGQ0M3ODVGQjRFMzNFM0JDQUMzOEJDNUZCOUYKLToxMDYxOTAwMDlCRjk4OUUzMTJBMEVEODZEOTEzRTRENzQ5QkNDMkJFQUUKLToxMDYxQTAwMEZEM0RENDIzQzlGNkIzMUZFNTVGRjQ3RUY2QTNGQzdGNjMKLToxMDYxQjAwMEVDN0VGNkY0RjlGNDVDM0JGQURCQzBCRTM0RkJEOUNDRTAKLToxMDYxQzAwMDdBNThEOUI5RTdDRjRBM0FGOUI1REIxQ0I4RUU4MjNFMjYKLToxMDYxRDAwMDI3Q0Y4MzMxRTlDOTkyMTI4MzlFRUNEQ0Y3MUU1MzY4MDYKLToxMDYxRTAwMERGQkIyREMzQUY3ODYxM0NBRjY0RjgyRDA4QTc2NkY4MUMKLToxMDYxRjAwMDU1QUY2RUJFNEQ4MDE3M0FGNzAzN0E2QTVCMDIzQkYxRUEKLToxMDYyMDAwMDZBQUZCNDhGMDJFNDM3NTk1REM5RUI5QkVCMERGMEYyMzYKLToxMDYyMTAwMDczNDJCQjczODc3QkM5RkUzQzVBRUEyNUZCRDMzREZDMjYKLToxMDYyMjAwMEJDRjZFN0JEMjI0RTc0MzdDNjIxRkJDN0YzODMzNjg4MjAKLToxMDYyMzAwMDc4MEQyQzNCM0ZEMjZEQjUyREUwRDVFNzBGQTc3QTMzMTMKLToxMDYyNDAwMDQ5OUZBNjhGN0NCRTE1RjNBODlCM0MxNjhGQTIyMUU0MjQKLToxMDYyNTAwMEY5RENDRDJFNkJENTE2RjE1RDhFRTEzQjNFNEUxNUYxOEUKLToxMDYyNjAwMDBENzhCNUJBQUM1RkU5RjlGNjZBMkZFM0U3QUY5MkNDRTcKLToxMDYyNzAwMEYzNkEyRjhGMTNEQjU4NzAwM0RBNDMzMjNFNkMzQjU2QzAKLToxMDYyODAwMEU5NDQ3OUQ3QzRGQzFFMkUyNzdEMUU3REZFODc4REYxNDMKLToxMDYyOTAwMDc4RjA2ODExMUY5NkNGNTVDRjM3Q0JDM0ZBNkQ0NkYwMTMKLToxMDYyQTAwMDVCREUwNDc5NThDQjMyRkM1NzIzN0Q0M0Q2QjAwM0VEMzcKLToxMDYyQjAwMENFOTAzM0YxQkU3ODlDNTdDNEVEQzQ3Q0MxMDAyNUJFOUUKLToxMDYyQzAwMEEyNzFBODE3MUZGRjAxN0IzMzgwRkQyRTU3QzM5NDI3QUYKLToxMDYyRDAwMEQ5RTQxRTVFMTI3NDc1REZDRjM1Q0REQkM1M0U5QUU2N0MKLToxMDYyRTAwMDNEOEY3RDA0RjZFOTY0M0M0N0U2Q0ZFODYxQTU2RDg3MDQKLToxMDYyRjAwMEQ1NTc4MkY4NUU4QkZGM0Q5MkZDQjQ3NTg4OUYyRTc5NEUKLToxMDYzMDAwMEFGRTIxQzJFRUNFM0NFOUJDNzJCREJEOTk1RTU5RkVCRDAKLToxMDYzMTAwMEU1Rjk4NkYzQjEzREZGMDA0RkIzQUE2QjI3RkQwMkVEMEYKLToxMDYzMjAwMDQ4M0Y0NzM3RkM1NkRGRjMyNkYwNUIyRDU3N0QyNzUxNUEKLToxMDYzMzAwMEJGNzcxNzhGQ0RERTJFRkVDMjY2RUY3OUZDODU2NzhGQTMKLToxMDYzNDAwMDBDQzhDMDc4QjZGNDc3OTlFQkM5NzM5MUIyQkMzNkQzNTgKLToxMDYzNTAwMEQ4RkY5QTMyNUVCRTU3RDBFRjc3RTI3RThBMjdDNTM4RTMKLToxMDYzNjAwMDlDQTZGM0EyQ0UwOThDRUVFOTkwRTc0QzY1M0I0RjdBRjAKLToxMDYzNzAwMERENTRGRjhFRUNEMTRGRTI3OEQ3MTQyOUI0MEY1RDkzMzIKLToxMDYzODAwMEE5MThGNkEzQjc3ODJCOUY0NDdBM0MyRUZBN0I1MkYwREIKLToxMDYzOTAwMEVGRTY2MkVFQ0YzMUU3NjFDRTExRjVFNzc4NDcxM0M0M0YKLToxMDYzQTAwMDczQUQyOEM3RUNBQTlBMTA4RjRGN0JGOUY4Mjc0MzQzQTcKLToxMDYzQjAwMDk0MUYyN0ZDNkVGNTBGMkE2MkZGNjRCQzE3MDFENkY5MDMKLToxMDYzQzAwMDVCNjkyMDdGOEVBRkI3RDFCOUQ3NTlBQTZCMERGMjYzNDUKLToxMDYzRDAwMEIyN0IwRTZBMDcwNTI4RkZFOUVGM0QzRjg2Rjg0Q0NCRkMKLToxMDYzRTAwMEVBQUE1N0EzREU0RTdCQzY3NzkxRTdDODdFQ0RGMUQzRUMKLToxMDYzRjAwMEJENzg3RjVCMkFFN0QzMEVCNzhCRkNFNkU2N0E0NzA1Q0MKLToxMDY0MDAwMEZERDcwQkJGMDZDQTc1RDQyRjU5MkE1QjlDNDhDRjFDRjkKLToxMDY0MTAwMDE1NzJGNTlCOUY2QkU2Rjc3OTY0QkI1Q0Y0OURGOTVDQTQKLToxMDY0MjAwMDczOUJCRDZENzUzRThFRjcyQUM1ODdFNzE3RjI2QjNDRUYKLToxMDY0MzAwMEJCRjM3M0YwMUNBMzQ2M0VCRTM1NDUyQ0JEMDJERjk3NkYKLToxMDY0NDAwMDVBRTg3REU2RjU5RTM1MzZDQ0ZCRDYxODY2RUUzMzFCNTIKLToxMDY0NTAwMEY0RTM4NjdFNTIwQTc4MUM2NzdERjhCQURERjk1MDJGODYKLToxMDY0NjAwMDQzRUI2MEM1ODNFOEJDRjc3ODJGQUVEQjZBOUUzRjZGRDUKLToxMDY0NzAwMDlFREY1NzAyMUZBRUQ1QjBCRjQwN0M2ODg5RjNEMEJGMDYKLToxMDY0ODAwMDEyNzgwMDc5RjM2N0E0NDdBNUM2QjZGMzczNTkzQzBGOTkKLToxMDY0OTAwMDE2RDk5MkYyMTU3RDNDNUYzQjBERjM5REZBNzI3OTgzMUMKLToxMDY0QTAwMEVGQkZDRTFBNzMwRUJGOTNFQjRCMTVGODM2OUZFNzRFMzYKLToxMDY0QjAwMDI5QjhCOEYzREM5MzZCMTI4RkI3NUYwMUU3ODdDMzE5NzQKLToxMDY0QzAwMDgxOEMwMkU4NzdGMkE4OTVEQzFGRjZGNUI5NzNFQTcwQzMKLToxMDY0RDAwMDM0OEVGOTNBODFFRjE5RkEyQjUyNzJCODFDNEVEMTM0MkUKLToxMDY0RTAwMDkyQ0JDQ0EzNTA5RUFCNTNGMzM1NjAzOUM1NzU4NTQ3MkQKLToxMDY0RjAwMDQ1M0JEOUMxRTM5MjZDQTY4NUUxRkQyQTYzNDQzQkZFOEUKLToxMDY1MDAwMDZBQTZGQ0ExODRGQjY1Qjk5Q0I1QjIzRjQ4RkU1NzA1NUQKLToxMDY1MTAwMDcyODZBMzlFRTU3RjYwM0ZBRDRGODNGOThDNzExREEwMEQKLToxMDY1MjAwMEY4NjQ0QUJGQzU5NTc4QUVFMUU1MTlCQzhEMUYyNTM5RTEKLToxMDY1MzAwMDM3MjBDRkJCNzc5RUVCMEY0NzBFMThDRUY1REIxRTNEMDUKLToxMDY1NDAwMDYwMzhEN0NGMUUzREYwRjc5Q0VCQUYyQzc4RjRDMDNGRkUKLToxMDY1NTAwMEYzNUNCRjk0Njc4N0Q1RTBFMURCMDFGRjM3MDA1Mzg1MkIKLToxMDY1NjAwMENBMTA1QTU5MEREMURCNEI3OEJCNUVFMDM5RkMxNUUwRkYKLToxMDY1NzAwMEQ5MTlDN0YzMEQzQkY3MTNGRTBFREI2MERDRDBCRjZERkUKLToxMDY1ODAwMDM0NDdCNUVERkIxOTkxMjY5MjhCMTFFQUY3NDY2N0NCOUMKLToxMDY1OTAwMDM4REM3N0I2REIzQjg2NjBCRkVEMkZCRUREM0IwQ0YyMEYKLToxMDY1QTAwMEU0QzgwRkNFQjgxOUYwREY4N0Q2MEUzNzNFM0Y3OUM3NjMKLToxMDY1QjAwMDFCNkVDNEQ3OTEzQjU0QjJEN0U4NUNCNDJFMUZBOTVFQzIKLToxMDY1QzAwMEYwRDU0QjA1ODE5QjkxQUY2NkFDRjhFQjcwQkQzRENFMkQKLToxMDY1RDAwMDQyQjlBNDdGRTc0NjU0NEFCRDkyRjI2RkZFRDM2OTgyNjYKLToxMDY1RTAwMEU5Nzg3OUUxRDY2QzQzNTlFQUU1ODU4RUM0RTdENDFGOTIKLToxMDY1RjAwMDExRUI2MkVFQjM5QkVEM0QzNUVDM0ZCODAwRkIzRjI5NUMKLToxMDY2MDAwMEYyMUI0RTZFNzdEMzNFNEM4RUE3RUVEOTUyM0JFRTNCM0IKLToxMDY2MTAwMDNGRENFOTYwNTFGMjAzQjdEQTE4RjlCM0ZDMTM5NDNDOUMKLToxMDY2MjAwMEJDQzc4OEZGOTlDN0Y5Q0FBRTM0NkE2RkQ2ODMyQUY5MDYKLToxMDY2MzAwMDlENkFBMUFGMTBFMDM1Qjg3MzJFREYwNzlCRTYzMUVCMDIKLToxMDY2NDAwMDg4MzYxRUU1RDVBQzc1MEEwQjZCQkNGRTFENzg3RjQ2RkYKLToxMDY2NTAwMEU4NEU4QUMzOThFNzY5RDYyRjczOTJEQzlGMzM2N0U3QzkKLToxMDY2NjAwMERERjRGRDRDRTZCRjFCRUREOTU5MkRFNkY3RDc3Qzg0NTAKLToxMDY2NzAwMDRDM0VFNzAyRjE5QzdCMEI4NERFMTlDRTQ2OUNFQjRCMzMKLToxMDY2ODAwMEYxQTM4Q0MxREE4NUY1Q0VDOTE1N0M5MTdFQjJDMjQ5RTEKLToxMDY2OTAwMEYwQjMxNTFFODIzNzE3NzAzRTlFQkY2M0Y3MkIzRDY5MUUKLToxMDY2QTAwMDk5QjcwRTQ3QkRGNEQ2QkVGQUI0OUJCNUI4REQzRDdDQjQKLToxMDY2QjAwMEYzQUQ3QjFFQTVBQUM2RkNDQzFBODFGNzExMjIyRjczNUQKLToxMDY2QzAwMDhFMzhGNzUwN0VGOEZDNzk5OTM1ODg4RjIxNURDNzJCN0QKLToxMDY2RDAwMEVERUMxQTkzREY1N0RBREQ2NjdDOUNERTM3MjYwREY5ODgKLToxMDY2RTAwMEUzRjkwMkIxQ0YxRDAxNzg1MUZGN0VCQzI0RkI2RUExRkUKLToxMDY2RjAwMENBRUY0RDMzM0Y5N0VCRTg2NkMxRDczM0I3NEM1OUQzNTgKLToxMDY3MDAwMDAzRkE2RjdBRjFBMzNFNkRDNEE3REM3RjUxMkVGMDU1REEKLToxMDY3MTAwMEVFNUFEMzhBRjMyRjY3MjZCRjYxOTgxRDYyM0E3RTA2MzAKLToxMDY3MjAwMDdFNTI1MUVGOThGOTU2RjIxMzNCQzRCRjc3MEFCRjQ2MjkKLToxMDY3MzAwMDI3QkZFRURDNDBGODk1N0M4NTI3MUQyQzY4QzM4MUU1REEKLToxMDY3NDAwMDYyQTlCOEYwM0Q1N0IzNUE4Q0U1NTNCNkI2M0UyODRGMTAKLToxMDY3NTAwMEU2OThGQzBEQTc5NEM0RkJCN0JEMDVDNTFDMEY5QTdGMzYKLToxMDY3NjAwMDNDRTY1RkNDNjI4MTM1REMzRkNGRUZDNzM5Njk2RDc5OUMKLToxMDY3NzAwMEU1NzY1Q0U3NUJGODNBNUJGODhCRTdGRTFCRTVEN0JDOTgKLToxMDY3ODAwMEZGN0EzMDFERTVEN0M3RDY5NjNDRUM2RkMxNTNBQkQzMkIKLToxMDY3OTAwMEZEMjhDN0FDRTE3NEZDRkVFMzg4OUFGMDFDNzE1MTBGMzAKLToxMDY3QTAwMDQ1RTZFQkJCMzA0RjZEMTFCMTFBRkM2RjY2NzgxMkNBMkIKLToxMDY3QjAwMENGM0YzRDY1RjNBMDFGQjZGMTY5NDdENDAxRjg1OEI0NDcKLToxMDY3QzAwMDlERTMxMUNBNDc3OUY5NEVDMjU3RTMwRUUzQkE5Q0Y3MkQKLToxMDY3RDAwMDFGMEZFNjY5RTQwRjA4RjcxNEY4RUI4OTIyN0NEMTE2NDUKLToxMDY3RTAwMDFCRTVCNTJFM0FBNEZBQjA5QjQ2RDY0MUYzMzM3RjhGMTIKLToxMDY3RjAwMEUzODgwMUREMUFCN0FBQjVGNjhDQUVFRkMxMTJCMkUzOTkKLToxMDY4MDAwMDdBNkJEQ0NFRTlEOUI4OUREM0FCRDE2NDg3MzYwOEI5QjEKLToxMDY4MTAwMDZERTZGRkNDMUU0NkJFMDdGQzkwNUY0REU2REJCMjA4N0UKLToxMDY4MjAwMDk3REY0RENGM0MzQ0U0Mjg4Q0VGQjMyREJGNEQ1NzA2OEUKLToxMDY4MzAwMEM1Rjk5RjYxNTYyOEUwRURGNEQ2RkExOUY2RjNEQ0Q3RDYKLToxMDY4NDAwMDczNEFBQzkzNEVCRDIwRjQ5MEI2MDMwNjk2MEZDNTlERDcKLToxMDY4NTAwMDFDMkVCMDQ1RDNBRjA0QkMyQ0Q4NkNGMzg1RTFGMTgyN0IKLToxMDY4NjAwMEU3NTRCRjBCRURBODc3MUM3NEZGQzRGQ0U3NUU3RUVCMUEKLToxMDY4NzAwMDBBMThERkZDNkRCNjlDMDk3QzFBMkU5NERGOTI1RThEOUYKLToxMDY4ODAwMEM4RTc2NTcxRkFDQ0ZCRjlDQjc2Q0NEM0M0RTc3NzY0NjMKLToxMDY4OTAwMEM1RTkzNDdGREI2RTNCRTY3RDlBRjEzOTY2RUI2RTNCRjIKLToxMDY4QTAwMDVGNkYyNjdBNkQzRDNBMUVGNTc2RDMzMzY3RURDODBGREMKLToxMDY4QjAwMDFGRUY1MjU4N0U1MUQ3RUYxQjM2QkY5QzhFNzIwNkYxRTgKLToxMDY4QzAwMDg0RkE0NUQyQUQ5MzhFNURFODE3OURGNENCNjE1NENGMjkKLToxMDY4RDAwMDgzNzE5RTBCRDFGMTczM0M4MzUwNEVGQ0ZFQjM1RkMyQkIKLToxMDY4RTAwMDM4MUFERTc1RjgxMDBGMEQzRkJCMzUxREU3RjM5MTc1QjMKLToxMDY4RjAwMDMxRTdGQkM3NTdFN0ExREU2RUIwODVGMzNDMDRGOUYzM0YKLToxMDY5MDAwMDg2NERERjI1N0U5Q0YzRkE3N0Y5N0Q0RUNDNUY4MEVCRDgKLToxMDY5MTAwMDE5RTY1QjgwRjM5Q0Y1RDgwRDM0Q0ZEOTJDNDhGQ0Q4MTAKLToxMDY5MjAwMEYwMzhCRkRGRjA0QjJCQUI0QUI0MUY3ODRDQUM5QjhGRDkKLToxMDY5MzAwMDlFNzBEMEU2RTEyMzNCRTNGNzg1RkM0RTE1Rjc2MTJEMTEKLToxMDY5NDAwMDIxN0JFNUJCNjJDRTIwQTFBOUZDQTU1M0QwQUI4NzhDRUYKLToxMDY5NTAwMEZCNzNGOUQ2Mjg2QTM1NkVCOTkzRTREQjI3QkRGREY5RTAKLToxMDY5NjAwMEI4RkUwMTBGNDZGRkVDRUJFM0YyODU1Q0E0N0I1REU4MkIKLToxMDY5NzAwMDNCRTBCRjMxRjgxQ0VCQjdEQUZDMjk0MzBDREY4OUZDQTQKLToxMDY5ODAwMDVCREVGRjMyRDEzRjhDM0IxNUZEN0MxRkU1MTlGN0I5NkIKLToxMDY5OTAwMDEyRkVCNjg3RjRBQkIxNTZBNkU3QjM2NDcyNjBDQjNBODkKLToxMDY5QTAwMEUyQUYyRjBFNzEzOUIzMjgzMkE1OEFERUI3REFBMkY5MjkKLToxMDY5QjAwMEY4M0VCMkZCN0E4NUU0MDREODIxODlENkY5MTY5QjU4QjMKLToxMDY5QzAwMEU3QzZGNzMwNEVBQkEyQzdFRjJFN0U3RTRGRjJDQkVDODAKLToxMDY5RDAwMDA3QTBCRTZFNURDN0Y5QzcxRTdGNUUxNDVGQUYzMjdGMzIKLToxMDY5RTAwMDYzOEVDOTlFOTNEMDJDMjcxRTMyQzkwOUY5M0Q3QjJDOUEKLToxMDY5RjAwMDM3RTFGOTg4Qjg3QzA4MTNGRTE2RDgyMjNGNzkwNEQ3MEUKLToxMDZBMDAwMEY1M0IwRTNBMTdCOUUwMzkxQkRERUZGM0U5QjM3QkRFNTYKLToxMDZBMTAwMEJBMTlGOEZGRDNBRDcyM0QxQkU1QUY3OTNEMzczQzdGMjYKLToxMDZBMjAwMDAzNEJCNDlFM0ZDRDA5QjA4NEVCMTk5RTI3NUNDRjM5NTAKLToxMDZBMzAwMEZDQkNDMUZGMjlGOTNCMjc4OUZDRERERDQzRDg2MzNBNjMKLToxMDZBNDAwMEJCRTM0QTI4N0VGMkQzRjk4NUI0M0YzM0UxNTdFMkQ1NjAKLToxMDZBNTAwMDJDNEZBQkQxNThDOEVEMkE0RkUxRUYxMEQzRTE1M0UyRjAKLToxMDZBNjAwMDUxRjJFOUJDRkY1QzQ4RkQ3NEYyQjNFNDU3QzlDRjlEMTUKLToxMDZBNzAwMEZDNkE5RUI3MTE5RkU2RjdDREI4NzdDQThERDNERkI2MTMKLToxMDZBODAwMDBBRjZFNTE4QUY3RDUxQTVGQ0JDNzZBRDIzM0QwQkZBQTcKLToxMDZBOTAwMDVEMkRGMjdCREEzREEyOUNDOUNCMURCOUY2MzUyODRGOUUKLToxMDZBQTAwMEU0RjM4RTE0OUVFRkQwMUVFODQ4Q0ZENEVEMDc4RUVFQUYKLToxMDZBQjAwMDU0RDNGMTNDNDA1QjI0NzE1RTA2NjU2Q0U0RTJFOUQ2OTgKLToxMDZBQzAwMDY0RUY1N0QyN0E2ODRGRTVGRUJFRjY1NEVFRTcxQkE3OTcKLToxMDZBRDAwMEJBRkE4NDcwN0ZEN0MyRTM0QjMzNTdERTk0OEVGQkZCNDgKLToxMDZBRTAwMEY2OUQ3RDI3NTdFMzdFNjBCRkNBNzM4RUMyN0U2QjAxMjEKLToxMDZBRjAwMEUwQjc5RTRGOUQ5RDY0RTE4NzQ2QTFGREJFNzNGRTA0RjUKLToxMDZCMDAwMDZDNjdFNjdBMjM1RTY2QkJCNkQ4QjE5RDJGRDkxRDA0QUIKLToxMDZCMTAwMDY3M0Y2MDhCRjMwOUZDNkYxRUU2NkIyMTlGM0Y2NjdBMkYKLToxMDZCMjAwMEJFRjM1QUUyQUI3OTI2QkUwQTIyNUYyNTM4NEZFMkVBNkQKLToxMDZCMzAwMDI5RjhBQTk0OTVGMkZEQjY4ODhGMDlCOTM3NEUxRDM0MEQKLToxMDZCNDAwMEI5MUFGMzI5RjdGMUYzMUVBNzc3QUE2QzBEQ0VGNzU5RkUKLToxMDZCNTAwMDExMkYwQkU3MTJCRjJFMDJGRUQ2RkI0RDNGNDNCRTFCOEIKLToxMDZCNjAwMDkwNUNDRjdGRjZDMjkxRTFCNzQzOTUwNUZGRkRERTkwQzMKLToxMDZCNzAwMDQ3MDE3RUY2REZFRjVDRjIyQjJDRkZFMkVEM0VFRkIxM0EKLToxMDZCODAwMEFFRjVDN0VDRkFGMzJEOTREN0I5Q0I0MUY3OUFCNkVGMkYKLToxMDZCOTAwMEZBNzU5RkRCQjFGQzRCMDdERDJGREFCRThBRUZCM0MzN0EKLToxMDZCQTAwMEJCRENBNEZGREI3QjczN0JCMUU5QzVCMzQzREE0ODdGNzEKLToxMDZCQjAwMEYxN0I4MzQ3RjRFNEU3M0U0RUVGRkNDQjA3MEFFNkYzQjQKLToxMDZCQzAwMEVEODQ1OUExN0MxNEZCQjdDNjVGQTZEMDNFQkRGREM1QzAKLToxMDZCRDAwMEIzODZGREU5REYzQjlGNDVFMkRDNTVCQjlCNTVFMzM5QkUKLToxMDZCRTAwMEU5RjY0QzdFNEVCNUYxNTcyMzlGQzQ3Mzk3MEJCN0VGNzAKLToxMDZCRjAwMEI2RDdDM0ZCMzFGRkZCQUY0MzUwMEVCNTNGQ0ZFRDBFMTEKLToxMDZDMDAwMEIwODczNzMxMUY2M0EzMUZCRDY3ODMwREU4NzcwQTZEMTcKLToxMDZDMTAwMDQ0NTgzM0VGM0Q3QTcwNjI3ODUwMjJCQzcwM0NCNDAzMjQKLToxMDZDMjAwMDFFNzA1RTgwOTcwNjk0OUZDOUYwMzFCNTI3M0Y3RkZDQTgKLToxMDZDMzAwMEFGODc4RkNGNkZDMUZFMTdFQzFDNDFGNzBDQzdGMUEyRDUKLToxMDZDNDAwMEY4Rjk3MzM3RTU3QkMwRkNGOUYzNUQ2Nzg3QTAxRDc1MjQKLToxMDZDNTAwMEExRjkyRUZGRkY2Q0JFMEZGRUNCQ0U5N0YzN0JFRjlFMEMKLToxMDZDNjAwMDVDMUY5OUY5QkUyQjVGRkZFMjM2MkFGRkNDRURBM0YxNDIKLToxMDZDNzAwMDc2NzNCREJGRjAyRkJCREVGRjM5RjQ3RUUzNUY3NkJFRDcKLToxMDZDODAwMDE3QTJGNzdFNDE2RkI3MDdFMzMyRUQyRkZFQjUwRkJCQkEKLToxMDZDOTAwMDg4Nzk5RkZFN0Y3NERFOUQ3NjhGQzVFNzFDMDZFMzdCQjcKLToxMDZDQTAwMDk3NDU2RUE4NTQ5MkU3OEYxNkY2MzJFRTMzRTQzRERDM0EKLToxMDZDQjAwMDkzNzI2NjkzMUQzMUM5Q0ZGRDMxNERBQzZDMUY5RUIzRUQKLToxMDZDQzAwMDBCRkI1NThBNUY1MEYyMEVFMEExRjVGQUQyMDhFNTg5NzgKLToxMDZDRDAwMDU5QzNGRDFGQzJCQ0IxMUIxN0ZBRjg3RDY1QzZGREQ3QUQKLToxMDZDRTAwMEE0QkNBQTJBQjRFNzBFQUU4NDcxNDFCRDgzNkU4QkE3MDMKLToxMDZDRjAwMDA5QTYzMEQ5QUY5MkZEMDc5MEVDQkUzNzQ3NUY0Qjc5QkMKLToxMDZEMDAwMDI4OTMyQjhDRkI5MDlCNERGQjg5OUJBQThERUY2RjY0ODYKLToxMDZEMTAwMDRGRTQ2MkJFREY4RDBEMzZDQTRGQkFDMTU0RkZBRjNEOUUKLToxMDZEMjAwMDNENDRENzlCRDhFMkQ1REM5RjczNzE3ODlBMkNGMEQ0ODAKLToxMDZEMzAwMDE1MEZFN0M3NUIxNzNDODlGRDI2RTUwRTY5NURGMUU2OTcKLToxMDZENDAwMDA4RjJGREE3MDM1RTA4N0I0QkU0RTUyREVEMTYzRTk5QTYKLToxMDZENTAwMEQ4OTczQTQ0RDcxMkJGMEUzRkJGNzc1NEQ3MkVFMTQ1OUMKLToxMDZENjAwMEUyRkQ2MkYxMkRFOTY0QzZCQkM0QUZDNDlCOTkwRUM1QjgKLToxMDZENzAwMDc4REU1MzY3OUZDN0ExRjE1RTZEMjZFQ0M2NDk5RDc2MEMKLToxMDZEODAwMEEzOEJGMEY4REExNjdFNUVFMkI1OEFGQUY1QTU1ODdFOTYKLToxMDZEOTAwMDk2REYwN0ZGRTVBOEExQ0MwOUYzM0Q2ODYzM0IyODJFRTkKLToxMDZEQTAwMEU0Rjc2QjlFRTFGMUZDMTlBNUUyRDcxNDlGQzBGQzQ1MDYKLToxMDZEQjAwMEZEN0UxNUYzMTdGNUYzQzJGQzQ1N0QxOUYzMTdGNUY1QzQKLToxMDZEQzAwMDMxN0Y1MUZGMUVGMzE3RjVFRjMxN0Y1MTVGQzZGQzQ1NTAKLToxMDZERDAwMDdEN0RDQzVGRDQ5NzMxN0Y1MTVGMUZGMzE3RjU2NUNDNzQKLToxMDZERTAwMDVGRDREN0M3RkM0NUZEN0JDQzVGRDRCRkM3RkM0NTdERDYKLToxMDZERjAwMDE5RjMxN0Y1RjUzMTdGNTFGRjFFRjMxN0Y1RUYzMTdGQ0EKLToxMDZFMDAwMDUxNUZDNkZDNDU3RDdEQ0M1QkQ0QkZDN0JDNDVGRDdCRDcKLToxMDZFMTAwMENDNTNENDk3MzEzRjUxNUZGRkVBRDg0Qjg2NzIyNUZCQTQKLToxMDZFMjAwMEFEQTFGRTE4RTcxQjg2RjIzOENGN0I4NkZBREZGNjFFOEYKLToxMDZFMzAwMDM3QkNCRjQ2RkJENEYwNUVEMkZGREE5MjMzODZFNzE4NDgKLToxMDZFNDAwMEZCMDgwRkM3N0QwQ0ZGOUJFOEZCOEJBMTFEMkIwQjUwOTQKLToxMDZFNTAwMDlDRDRDRTE2MTM3NEEyQkYxNzYwMkFEQjRBRDAwNUNCOTAKLToxMDZFNjAwMDFDRTE4OTAxQzE2NzdBMjFCRjZFMEFBRjQxRTYzQTM4NTkKLToxMDZFNzAwMEYyNkMxRjk0RkZBRjhEQkE4RUZCMjU0NDdDNjEzMkZFMEQKLToxMDZFODAwMEE3MDY0QzlDRjY3NTJGRENFN0NBRjg2OTdBNEM2NUQxRTkKLToxMDZFOTAwMEExQzA4NzMxODVBMDI3OTZDNkEyRDlDMDg3QjExNDgyMjgKLToxMDZFQTAwMDU5QjE2QzdBOUUxRENCMjQ5ODEzRUI0OUNGNzM2MzA1QkYKLToxMDZFQjAwMDA0RjM2MjdEMDlFNkM3OEEwODdBNjMwMzA5MTZDNDJFQzMKLToxMDZFQzAwMDI1RDgyMzM2OTRCRUVCMTkyQjI1RDgyQjc2MjUzREVGRkMKLToxMDZFRDAwMDFEMUI0OUIwNEY2QzBDM0QyRjhDNTUxMkQ0NjJENzEyM0MKLToxMDZFRTAwMDJDOEE1RDQzQjAzODc2MURENUVCMUI5QjQyQjA1RjZDOUUKLToxMDZFRjAwMDFBM0RFRjFGOUI0QUYwOTI1ODNEQzEwMUIxNUE4MjI1QkQKLToxMDZGMDAwMEIxRjkwNDJGOERDRDI1Nzg1OUVDNTZGQTZFNjA2QzA5RDUKLToxMDZGMTAwMEMxNDFCMURCRTlGOUUwRDhGNzA4MEU4OTM1MTFCQzNDNzUKLToxMDZGMjAwMEI2OTJBMDJGNzYzN0Q1MkI4REFEMjM1ODE2QkI5RjlFREEKLToxMDZGMzAwMDBGOERERDQ3NzA1OEVDNTE3QTVFMUVGQjMxQzFFMUIxMTcKLToxMDZGNDAwMDI3MDk4RTg4NkQyNjU4MTFGQjRGODIyMzYzQ0YxMEJDMTIKLToxMDZGNTAwMDIyRjY3M0ZBRUVDQUQ4MzY4MkEzNjJCRkEyRTc1N0M1RkIKLToxMDZGNjAwMEZFMTdDMTZGQzVGNkQwRjNBQjYzQkIwOUZBNjNCRkE1Q0IKLToxMDZGNzAwMEU3OTVCMUZEMDQ0N0M3REVBMEU3NjM2MkFGMTMxQzFCQjIKLToxMDZGODAwMDdCOEY5RThGOEJCRDQzNzA3Q0VDMzhDMTZGQzc4RTEyOTgKLToxMDZGOTAwMEFDOEE3RDRBRjA5QUQ4QzcwNEZGMkQ3Njg2QkVCQjM2RjAKLToxMDZGQTAwMEY2MzlDMTA5QjFCRkQwRjM4OUIxM0YxM0VDRENGRjhGRDMKLToxMDZGQjAwMDRBRkFCQjAyOTY3M0I4N0Y3NjY1NzVFQkJFQjJGQkQyMTgKLToxMDZGQzAwMEQyNDkyRTRFQkE4M0NCQzU4N0QzNEVFRDI1MzkzOUQyNUYKLToxMDZGRDAwMEExMzk0OEY4NkQzNEM0QkJFODQ3MjQ2MERGQjc3QkU0Q0YKLToxMDZGRTAwMDQ3QkREMERFNTk1Mzc5RkNGRDVCNTE5RjJENzEzMEExMTcKLToxMDZGRjAwMENGNEM3MkY3NkI5N0YwNzczMkNDNDc5QzJFRjhGQUI1RUUKLToxMDcwMDAwMDhBM0RCOTY4NDdBRDI5NkI1QjgwN0U5MzBENDU2RDM1MzAKLToxMDcwMTAwMDA4RjM3QTczQkZBQzVCQzA5Q0RFM0M1RkUxMkYwM0I4MjIKLToxMDcwMjAwMEZFQUQ1OUQyOUZGRkJFNDA0RUY3RTY3NzVEMkZGRTlEMjUKLToxMDcwMzAwMEFDRkY3NTFGMEZENzE3QUU4RTNFNzQ1RUFGOUJFRDc0MUQKLToxMDcwNDAwMEI3REU4NUYyQjA2MkJEODI5N0Y1Q0UzRERGRjlDMTZFNDUKLToxMDcwNTAwMEI3MzNCNDc3ODI3Q0FFNkZEMENFQThFRUI0RjNBMUEwRTQKLToxMDcwNjAwMEZCNjNCRDAzN0UxQzNGQjNGQTg3RTBGQkQxQUIwQTU0NDAKLToxMDcwNzAwMEZDNUQ5NURBRjU4QTA3RjlBNUJFQjk3NDNDRDJCNThDRUEKLToxMDcwODAwMEY5QzkyRjM5M0Q0OTNFRDk2QzQxRDdCQUM1MzY4NkZFN0MKLToxMDcwOTAwMEM5M0E4RDkxN0ZCODZFM0JDRjQzNDY3RkVBNDRFMDk3NzMKLToxMDcwQTAwMDA2QzEyRjBCRDc3RDRFN0VBNzg2QzU3Mzc4REU1Mzg0MkQKLToxMDcwQjAwMEZCQTdFNEVGRDhDQzZGRDlGQzBBQkFGNUJFNjQwNzI4NjkKLToxMDcwQzAwMDNGN0VGRUQzNDZGRjU1QTNGMDRGMkREQzZBN0FCRUY4MTMKLToxMDcwRDAwMERCMDlGRDlFNjZCRkQ0OENERUMyMkZFNUUzNzk0RjRDMDEKLToxMDcwRTAwMEVENDVGM0ZFMTJFNjhERjkyNEMxREJEQzRFRDQxQjgwQTYKLToxMDcwRjAwMDBGOEFDMzQ4M0M0OEJGQTdDNDA3RUI3QUVFODJGMjU3MTkKLToxMDcxMDAwMDRGRUZFQjRGNzk3MkE3MzUyRDFGRUIwNUQzRjlFRjU5RjAKLToxMDcxMTAwMDI5RDZFMDA4N0MwRTc4QTQ3Qzk2OEU5NTY5OTQwRjc1MkMKLToxMDcxMjAwMDE0RjQ4MDg2ODk1NzlFRTAwOEJDM0ZBRUVERERERTRDNEUKLToxMDcxMzAwMERDNUY2OThDNDczOEQ3NTM5RTc4MkQ4QzAxRjM1MjZBRjcKLToxMDcxNDAwMDlGQ0FBNjczOUJEMERFOTAxREU4RDc3Q0NBNDZGOTQ4M0IKLToxMDcxNTAwMDYxQjZENENCMkFCQUM2MkIwMkFCNkRDNDE3NzUzQjMyQ0QKLToxMDcxNjAwMDc5N0U1QUQ4N0YwOENGMTU0OEJBMUM2REVFM0IxRUYzQzYKLToxMDcxNzAwMDlBRUFENjE2OTU5MkJCNkU4NzhERUM0MzE5OTc5NUY0RDMKLToxMDcxODAwMEVBOUFCRkNERjMwNTFBNTk2NDBEQTYyRTAxQkQ0RTI0MEYKLToxMDcxOTAwMEE0NTdDQjZFQTIyQkQwRUQ0NDEyQkE5RDM4MUZERDFFMzIKLToxMDcxQTAwMDMyRDEwREZERDQzN0UxQ0IzQkIyNjkzREQ3QUM4QUY2ODUKLToxMDcxQjAwMDVGQUNFMzRGQjNGRjlGQ0RCQzgyRUUzRDkxRjlDRjU1NUQKLToxMDcxQzAwMDNERTRFRjhDRjlGMjkwQkU2N0Q2OTcxM0REQ0NGNEFBQkMKLToxMDcxRDAwMEZBNUIzREQxODVCREVCQTY3Qjg3QTdGNzY1MzNCRTAzODAKLToxMDcxRTAwMENGNjcwOEJGRTdGNEE2NkJDOEZFRkVBRkRFN0M1RkYwOUEKLToxMDcxRjAwMERBMEFDQ0ZENjRFQ0Y1MTU0RUU2MDdFM0ZCOEQxNTFFQUYKLToxMDcyMDAwMDJBQkZCOUMyNEJFNUI3NTc2ODA0REY1OTUxNDJGMDg0MzEKLToxMDcyMTAwMDlERTcxNUM5RjUwNThDNDBGOTdEMkZGNEU2NzFBOTE3OTYKLToxMDcyMjAwMDdBQ0JCOEYwMzIyRkZBQjlBQkZFRjY0NjM5RTYxOUU1NUIKLToxMDcyMzAwMDg2REY5QjM0RUUyQUIyREIwREY5MjJENUQ3MUJGMzQxNTIKLToxMDcyNDAwMERBNkMyMkRGNkM5REUyQzNGQjY0RUEwMjU3MUFFQUIzRjAKLToxMDcyNTAwMDkyQTFGMTMyRUExRjkxQkY1MkI3MzY5M0VFQjE5QjNBMzkKLToxMDcyNjAwMDIxREI1MEZGQzZCNTNEMERFNTU3N0I2QjM0QkUyOTU1N0MKLToxMDcyNzAwMDdEMERDRjZGQUUxOTY4MjhENzhBREY4RjYwNUEwNUFEQjQKLToxMDcyODAwMDFCMTlGRjAyQ0RDREU5RTJFMTc1QkY1ODNDMjI3RjM5RTEKLToxMDcyOTAwMEY0RkZDNTAxMUJCRDM3RDNFMzg0M0Q0Q0ZCRjlGMDEzNkMKLToxMDcyQTAwMDBFMUZDNkY3NEVFMkY5MzcyODlGN0M1M0E1RkNBMjkzMjgKLToxMDcyQjAwMDM2MTZGNjgwODgzRkE5QjA2Njg0Q0NDQUQ3RDU5Nzg3QTIKLToxMDcyQzAwMEY5QkFBQUZBOUJDQTcwMUZDRjdFRUFBMEY4NjBGRDQ2MDEKLToxMDcyRDAwMDg1ODVGMTZFODYwRUMwM0NGNEJCRUMxOTA3Q0Q3QkU2Q0MKLToxMDcyRTAwMDQ2OTUwNUU5N0M5NUI2MTVFM0U0Q0I5RTFBRTBDM0Y4MTQKLToxMDcyRjAwMEU4RjRCRUQxREU3OERFQjBFMzg1MTQxRjlFRkJBQTZGRjIKLToxMDczMDAwMEUzREY5Rjg0RkQ3OTI2RTY0NzI5NjUxNDhGRjhFM0M0RkYKLToxMDczMTAwMDk2RDkxNkNDQjc1MzBGRTRFMjdBRkRFM0YzRkM3N0NEQjAKLToxMDczMjAwMEU2MkU3OTczQjgwN0YwM0NFRjk1QUQ2RjU1NDAzRjI3RDcKLToxMDczMzAwMDVBNTRFQUY3RDNBNzFEOUI1NTVBRjdGRTdDQkNERjM2OUIKLToxMDczNDAwMDNFRUYwOEY5MjlDNkY3MDhGQzA5RTVGQjI3QjMyMzQzRkMKLToxMDczNTAwMDQ4RkVEQ0MxRkRFMzVERjEwM0YzNDU3QTIzQkZFQUU0QjcKLToxMDczNjAwMDU5NUNCRkYxRjgxQjA4QTEwMjk0MTNGNTM2MUZDNTY1REYKLToxMDczNzAwMDRGQUNCNzUxQkMxMEY0MDFFNTFCOUM2OEM5QjY3MDM5MUQKLToxMDczODAwMEY0M0NGMTVEOUQ1NUIzRUJGQkFENUJBRkZBRjlFRjYzRjgKLToxMDczOTAwMDY4NzYxQzJGQkI0RjBEQjIxMTU4RTZGOTExRTFCNTRBQzIKLToxMDczQTAwMDkwQzc3RjhDRjRCRDc1QzkwODNBMTc2RENFRTM5MkYwOTMKLToxMDczQjAwMDE0QUNBOUEwMkVBRTM0RUY0NTFFRkY2NUMzREFBQ0ZBQkIKLToxMDczQzAwMDNDNzdFOTlGNjFDMTBBQzM3RDQ2MEI4QTFGQkU2NzE0RTMKLToxMDczRDAwMEMwRDM3RTdFRjVFMjk3NUJEQzI0MjczRkIzQkMzNDdDRDAKLToxMDczRTAwMDM5QzA0RjI3ODZGRjYwMDVCQUJDQUUwNjhCRkI2MERFNTYKLToxMDczRjAwMDkwNjVGRDI2ODVFMjJBQzdFRkMxQjhGRjI3Q0ZEOTdDNkIKLToxMDc0MDAwMEI0MEM0NURFRDhCQzlGQ0VBNUY4NTQ3MjdCODE3OTc5NDcKLToxMDc0MTAwMEZDM0E5QUE3NzhGMTc2NjI0NkY5MjJEM0Q4NTZFMTVGMTIKLToxMDc0MjAwMDg4RjAzQzAzMUMwNEUwQzdCMzgwQzdDNThFOTdCQkVGNTAKLToxMDc0MzAwMEMyRjNDM0Y1QTZGM0M2QzdDNTM5OEJGMjNFOEE0MTVGRDYKLToxMDc0NDAwMDJGMTNFNTdBMEI1RjlGNkMxN0JGODc1MkZFNUU5Qzk0RUIKLToxMDc0NTAwMEUzNTJERTRBNzkzREFFNEYzMTdEMjdFNTJDNjM1QjQ5MkYKLToxMDc0NjAwMEJFQ0MxNkY3MjUyRjc4REFDMUNGMTc2OUNDODM3ODlDNkMKLToxMDc0NzAwMENCQzlDNDU2RjVEMUU4QkI3OUY2RTcxRTQyQjY5RUMzMjgKLToxMDc0ODAwMDVBNDlFRjdENjI4QkNDNkUyREMyRUYzNzM3NjdEMUY3NEIKLToxMDc0OTAwMDM2NUYwNEQ3NzE0NEZFMUU5RDk1RTRDODFDQzZDN0I5NkIKLToxMDc0QTAwMEIwNDU4OTQ0NzVGRTBFRjlGQjI0MENGNTg0NEVFRTc0NEMKLToxMDc0QjAwMEQxMEIyNjdEMzA0QkU4QkY1OUNDOTQ2RkQ0NjJENDUzQTYKLToxMDc0QzAwMDgxMzQzN0NENkI1RThCQzhDM0VFMUM5N0NBQ0U2MUJDQ0UKLToxMDc0RDAwMDJCMTg3OTY1MTI4RDVCRjE0NTEyOEM2MzBFRUI4OEUyRjcKLToxMDc0RTAwMEJEQzgwQjlGRTVFNzk4Q0NFMzMyQ0ZBM0JCRTM5Q0VEOEYKLToxMDc0RjAwMDlCMzIxNkVGNTdFRUVDRDczNDZFODk2Rjg2MDdBQjc0NkMKLToxMDc1MDAwMDc0OTA3ODlGMURFNkY4OUNCRDUzMjE3QUZENUVEODVCOTAKLToxMDc1MTAwMEYyN0NBMDk5RkU3MzU4NjAxMkNBQjkzOTBGQzAzRUIzMEQKLToxMDc1MjAwMDI4Q0UwRjkyMEZFNjZFOEJEMDc5QzA0RjU5NEJCQTBCMTUKLToxMDc1MzAwMEQ2QzM4MjhEREI2RTFDMDlERkNGNzlFQzc1M0JGMjdCMDUKLToxMDc1NDAwMDRENTZCNEJGMjUxMzdGQUE2N0Y0QkQ1NUJEMTNFODdEMjIKLToxMDc1NTAwMDkzOUVGRjQ3RTE4OTA5QkYxNTdEMDc3ODk5QjU0NUE1MzkKLToxMDc1NjAwMDNDMEE1RDNEOTE0NzEwMjY3QzM1ODRGOUVGMDkzNjFDQjUKLToxMDc1NzAwMDUyN0Q0REYwQjQwMTdGRTZBOEVDRTJDNzJCRjFGNkNGQzcKLToxMDc1ODAwMDFFQjdEOUFFRDlENkU3RkM3NjhENTlERTc0QjE2QjRDRjcKLToxMDc1OTAwMEZBMTRDRjczQTBGRUVDQzhFNUY5RTk1RjU4RkQxOTU5NUMKLToxMDc1QTAwMDI0QTc0RDcyMzhCNzhDRUU2Mzk1NzI3OEI2RDA4M0IyNEIKLToxMDc1QjAwMDlGNTlBOEZGQTBGQzg3OEQzRjRGNDc3RkM2RUYxRkY4NUMKLToxMDc1QzAwMDc5MUVFNTZCQTBCRTE5MTRENzM3QjdENUYzRkU2RUZCNTUKLToxMDc1RDAwMDQ1MEFFNTRCRkQ3MTYyRUIxMEI0MDc2QjFFRkY3NUJBRUYKLToxMDc1RTAwMEZFQkVENzkzMDVDMUQ3RkFFMDc4ODU3RTVDQTg2RUVFMjMKLToxMDc1RjAwMDgzQkY2QjI4RTVFQzA1Rjc2REM5RTZFOUJFQzAzQ0RENEQKLToxMDc2MDAwMEM2NzlENkUxM0M3NUU3NTRFQUM1M0M4RkFERTVGMzNCNUUKLToxMDc2MTAwMEJFOUVDRjc3NjY5Nzc5ODYyOUFFNzJEQjkzMEU1Rjk4MTAKLToxMDc2MjAwMEVDOEUyOEU5RjU5M0RCNTQ4NkZCQUM0RUJCQzM2NDA3QjQKLToxMDc2MzAwMDdDQzk1QTM2MjEzRTE2MkU3REZCMDMyQkYwQzVEQzRCNTAKLToxMDc2NDAwMDAwM0ZDMDA3MzVGNzM5NDhFRkNGN0Q4MUM3NTMzRjUxMjEKLToxMDc2NTAwMDJBRjMyOUEwQkYzNzlBRkUzRDc4M0UwRkVDMDVCNDM3RDgKLToxMDc2NjAwMEUyRTNFOEI0MDNDRTIyMUUzQkVEODA2RUUyNkY5MUYwQzAKLToxMDc2NzAwMDZCMkREQUY5NkJGQTFEMkRDNUNGRjMzMTE3Qzk3QjZENzAKLToxMDc2ODAwMDc2OThFRUI1RDE1MDA2RjA3M0ZFNEVBNDUzMkZGMzdEREQKLToxMDc2OTAwMDVDREMzRkZCQTdGRTlGREZCMjk0RjhCRkUzMTJGRDM5MkQKLToxMDc2QTAwMEI2QzZENEE4MERGMzkwM0JCNjI5NjQyNzJENUM1Njk5MzUKLToxMDc2QjAwMDVFQzlGMDdDMUJGN0FCRTUxNDcyQkI1NkYxRkIyOUJGMkEKLToxMDc2QzAwMEM2MDE3NDREODVGRUYyMEIzNUZFNUNGM0YwN0NGM0M3MEEKLToxMDc2RDAwMDE4RERBMzIzQzc2QjdFOEVGRTc2MjdFQTQzOTc4NUY0RDkKLToxMDc2RTAwMEExNzlGRUUzMEJCOURFNUNBODVBQzhCRTVFNjBFNzc2RkUKLToxMDc2RjAwMDc2QkJCOEJGQTI5RjE4NDdCRjQyNkU2RjVGNTZDOEZERUEKLToxMDc3MDAwMDBBRUQ2ODU3NjJCQ0ZCMkEwN0ZEOEUxMTYzNjNDOUVGNUYKLToxMDc3MTAwMDZFNjU5Q0ZGQUMxMjZGMUVFQkE5Q0VGNTRERjY3MzQ3NUMKLToxMDc3MjAwMDJGQzREMzJEQUM5NTdFMTc3MTUyQzUxNDBEQ0YzMzdDNjkKLToxMDc3MzAwMDkwRTdBNDdCQTJFMDJGODBFRDRDMTNFRDFDQjRGMUYzOTUKLToxMDc3NDAwMDBCMUY2MDFGMzBBRjY5QzIzRkZEMDE1RThGMEFGRDdGRDYKLToxMDc3NTAwMDUwNjAyN0JCMzZGQ0EyODNFQzg2M0I1M0I5RkY5MEU1MTMKLToxMDc3NjAwMDY0NTg3MTNEREMyQ0U0RDRGNDUxMEUzRkNBRjU2OUEzOTIKLToxMDc3NzAwMEVFMEMyMDg0RjZDMjBDRjA1NUUzRUM1ODVEMEFGREFDMkIKLToxMDc3ODAwMEI0NzA3REJGMzI4QjcxQkY0MDczNUIzOUUyRUY3MjMwRjIKLToxMDc3OTAwMDkzMzE3RjFGNjZCRkZENUNGNkY5RjhDODc4N0U2MjAxMDEKLToxMDc3QTAwMEZBMTlBRTYwOUNDMTJBMDhCRjg2RjIwMjNCN0Y1RjUzODQKLToxMDc3QjAwMEY4OTNDOTBGRjQ2MkVDNzc5ODM1ODU3QTA2NzE4NDdDNkEKLToxMDc3QzAwMDUxOUI0MUZCREZDOTc4QkUyMDBCQTE5NUY4RUQzQjU2REMKLToxMDc3RDAwMDE2QjY3MEI4RDY0NUY3MkE3OTBEQkYwQjdCNDMwNThCREIKLToxMDc3RTAwMDY2QzBGQ0EyRkI4REU3M0I2RThBNUFBMjAzMzA1RTY0NDIKLToxMDc3RjAwMDhERUU0NkZDNTk5QzlBQ0QwM0ZEMDRBQTk0MzJDNEZCM0QKLToxMDc4MDAwMDgyNTVERDFCNkY2M0UxMzYxQUVGMDJCQ0NGMEJDN0Y5NUYKLToxMDc4MTAwMDNEODVGMjg1QTZDMUEyNDczRUJEQzVDQUY2QUE2NTlDQjQKLToxMDc4MjAwMDdFQzg4NzhENTk1QTk4RUEyREUxN0MyRUNGOTU0OEJBQUIKLToxMDc4MzAwMDk0NDJGMzdBRkM0RTEzRTM4Mzc2RDZBNkUzRjdGNkM0QkMKLToxMDc4NDAwMDdFOTVEQjBCRTVCRThGREI2QkYzQzVCQTlEMkZGOUVFQTIKLToxMDc4NTAwMDU5RTM3QTdEMUNENzBERjAyRERBQjI0OEY3NjkwMjI2N0MKLToxMDc4NjAwMEUzRkI0NzQ0RkI4RjA4QkU1RjUzMjhFMzdGRERFQjZGRUMKLToxMDc4NzAwMEExODM0NTY5REUyRjNBODg4RUIyREZDOTAyNkUyQ0U0RkYKLToxMDc4ODAwMEY5RDM3MjFDOTI3RjY3QjNDNTk0Q0YzMzVCRjg2OTJDMzAKLToxMDc4OTAwMDIwNDkyODNGQjhFNTQ5RUUxNzMyRTUxRDgxQTE0NEY5OUEKLToxMDc4QTAwMDZERjNCNjk4OUZFQkZDM0NBQTQxMkU5MURGNTRCMTc3NjMKLToxMDc4QjAwMENDQzRGMTI5REY0QUYxMjFCRjRGQjM2RjI1RkY4MEI5NTYKLToxMDc4QzAwMDlFMEQ3RjNGMTVFMzZFNkJDMUFFNTI0NEJDMENDQThFNTkKLToxMDc4RDAwMEY1MEFGREVFQzVCNDVFMUQ4MzUxOUY4M0I0MUU0RkU3Q0MKLToxMDc4RTAwMDQyODVCRDNENUJEMEQ3MjFFRUI3OUE4REY2MTVDNkQ1NDIKLToxMDc4RjAwMEQwQkU0MjdDNkRFNDc2QTU1NUQ4QzM3NUVCOERGNkM2MzcKLToxMDc5MDAwMEI0NjY5REREQzk4MUUxN0UwMDg3Mjk0RkREMjZFQzhFQkUKLToxMDc5MTAwMDBGRUQxRDgzNTFFRTlCRUYwQkY4RDBDMkU3MTFDRTYzNDQKLToxMDc5MjAwMEZDNUVDRDFDRkVERTJBRUM0QkM5NTczRjJEQjQxOUUyOUMKLToxMDc5MzAwMDZERjJEQzY5MERDQTJCN0U2RjgzMjk0RkNCNDVGN0M3RUIKLToxMDc5NDAwMEQ0MjhGQ0ZFNEVFOTg3N0M1RkMwRDM2MDg3RDI3RDM5QTYKLToxMDc5NTAwMDQ3RDIyODBFNkVGNjRGQjY1N0JBQzMxNjlEOUY3MjdBNUQKLToxMDc5NjAwMEM2NkQ5MzEwM0YzNUU5NzYyQkMyRjczQkVGMTU2QkEzM0QKLToxMDc5NzAwMEZFOEY3ODhBQzlGRTU5NTMzOTc0MjNFNjI3MUQyQkZDRTQKLToxMDc5ODAwMDdDQjJCMzM3NDU1M0M0NzlBODNGQkQ4NkY5RjRENzdGOUQKLToxMDc5OTAwMDBERjNBMUYyRDlDOTdFRDg0N0I1QkZEQzcxOEIxMzQ0NzIKLToxMDc5QTAwMDc3RUNERkNGNEVCNjgyOUU2RjdGQjA2MzEzOTY1MzIzODIKLToxMDc5QjAwMDJDNjAwNUZERDhCRUExQTMwRkRFQjk5Q0FBRDkwMkY0QTQKLToxMDc5QzAwMDdFQTU2Q0NGMTZDMEY2REE3RkNDQ0IxRjE1REEwMjc4MTUKLToxMDc5RDAwMDlGNkU4RDM4Qjc1NDczODU0MkYyRDcyMUQ2OTdGNDMzMTIKLToxMDc5RTAwMEQ1NTg1RUUyNzAzNEZGNUQ5NDBCRDVDQkQ2MDI4RUMyQzMKLToxMDc5RjAwMDcyQkMwRkY1MDRGREZFNDI5RjYyQkZBMzEwRUFBNUY1MUQKLToxMDdBMDAwMDA5OUU0NjM4NkY4QTEyQjZFMzc5RkY0MzkxNEI4NDVFMzQKLToxMDdBMTAwMDRCRjgzQjIxOEU0MkVFNkZDRDJCMEFEMEY3RDI4RjBFNjIKLToxMDdBMjAwMEVERkNFNTlCQjRCMzQ1OENFQjdGMDA1M0RGRjdBQjAwNzcKLToxMDdBMzAwMDgwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFNTdEQTcKLToxMDdBNDAwMDA5Nzg1NDQ1QjY3MEREQkVCRDY1NkZCMjYwNjIyMDc2QzAKLToxMDdBNTAwMDEyMTIwMjA2NjgyMDgxMDA0MTlCODQyNTJDODEwRTI4ODkKLToxMDdBNjAwMDQ2ODlEQTJDMDI2MjIwOTFEMTMxMzMzQTdGNzdEODQ0QUIKLToxMDdBNzAwMDc0MzRBODRGMTkwNzlEMTY5MTYxRTZBOTJGQTMyQzQxRDQKLToxMDdBODAwMEI2MEVBMDgyM0FEQTI4MkEzQUMwNDQ0NTA1OEQ0RTQ0MDMKLToxMDdBOTAwMDc4MTNGRjg3RkE5RjczQUEyQURENzU0OTU4NjZFNkJERjkKLToxMDdBQTAwMEVGN0RERjFGM0VCRUNBQjk1NUI3RUVBOUIzOUY1Mzc1MzAKLToxMDdBQjAwMDZGQUE2RUNGNDlGMEU2MzMxNjkzRTEzNTNCNTMxODVCNUUKLToxMDdBQzAwMDUwQTFGOUFEMDMxODYzODcwMkI5OUUzOEM2MjYzM0U2ODQKLToxMDdBRDAwMDZFOEM2NUVDMjdGQ0I5M0FEQ0RBQUUzMDMxMDZFMzZGMjgKLToxMDdBRTAwMENGRjREOEFFMjg2NEFDMkEzQzRGREMzRjMyQ0YyMUMzNjAKLToxMDdBRjAwMDNDMzc2OTcwRUYzMEY4Q0Y1QzRFQkNGRjg2NkM3NzFGNjcKLToxMDdCMDAwMDI3RjRERkY2N0Y5ODE3RTc2MUEzNDc5OEQ4MTBDNjdFNjEKLToxMDdCMTAwMDY2NjdGNEYzNURFREQ2NUM3QjAxQjRDRkQ5OTI1ODI2NEQKLToxMDdCMjAwMDhDN0I2MTVCQzY1Qzk4ODdENUMxRTQ2OThDN0RENUZDOTQKLToxMDdCMzAwMEExRDUwOUYzMkM2QUQ3OTkzQjg5QjE5QTc2OEREQTQ1OUMKLToxMDdCNDAwMDlCOUFBRDYzNjE1QzBEQjRBNTExRjg1NTBCN0MxOTZCNjQKLToxMDdCNTAwMDMxNEY4RDBCNUZFRkVGMDQ3QzBCRjFGQTZBQzJGQkI2N0QKLToxMDdCNjAwMDE3NEU5QUJEMzBFRTM2NTNFM0U3NEYyNEMzRTVFMTlBNTIKLToxMDdCNzAwMEVCNTlFN0I5RUJFQ0VFRTRFQjNDQzY1ODU5NjNGRUI5QzAKLToxMDdCODAwMEZEMDU0RThERkE3RjlERTMxRThDRjQ0QjgxMzlGMDM5NTMKLToxMDdCOTAwMEJBODlBRkQ3MzhGRTU3MDI4RkFBNjg3NkIzMDdGQTY3NUIKLToxMDdCQTAwMDBGODlCMzNCODFERTg1ODdCQzRCRTMwMDhGQjk2QjMzMTQKLToxMDdCQjAwMDA3RTkzMDQ3RkY4QzkyOTE0ODM3MzY2N0I4NDJBRkIyMzkKLToxMDdCQzAwMENCMTkwQkUxRkFDQzZEREQxOUI0REZFRDI4NEM2MDgwRTgKLToxMDdCRDAwMDU3NTU2MkU4MEUzNjEwQzhFNkNDNjlCMDhGNjQ2Q0UyODcKLToxMDdCRTAwMEUzMzBFNjcyQkFDNUNERTBERTMyOUI4NDhCM0RBMzhCRDkKLToxMDdCRjAwMDAxRkU1MTI3Nzg0NkEwQjBDMTBGRjNFQzQ3N0M2MDlFOTAKLToxMDdDMDAwMDFCODdGNjhCNjZGRDgxN0E5OTMxMjY0NzAyNjMyMzdCQjkKLToxMDdDMTAwMENFQUNDMzc1REQzODc0RTQ1OEJDM0VDQTE2OTczQjkzQUUKLToxMDdDMjAwMEU4Q0I0ODNFNDZGNkY0NEM0MzNDNzEzQzgzNzU3OEFENTYKLToxMDdDMzAwMEMxOTRFQjYwMURERUQ3NzU5NzFGRDZFMUVEMUZFMzBERjQKLToxMDdDNDAwMDc0NDJCNzBBNDFENzNBQTc4M0U4QjFERjA0NzgwRTBBMzUKLToxMDdDNTAwMEUzMjE5RkNGOThFMzhFMTBDQzc3N0M0OURBQzA1NTMwNzIKLToxMDdDNjAwMERGREE5RUEzRUU0MjdDRTRGM0Q3RjZGNENFODk3QzNFQzUKLToxMDdDNzAwMDJDQjczRjVFQkY1ODNDNjYwQTNDRUU0MkJFNDFFQjI5NDIKLToxMDdDODAwMDA2MzkxM0I0RkUwOUZFNEYxRDFEQTNDMEQ3NEM0QTYyMkUKLToxMDdDOTAwMEVFQkMzMDNDRkQ5QTc0MDVBRUFDQ0E1NkM2REYzMEU3ODgKLToxMDdDQTAwMDRBQTVCRkRDMTYyQUE4OEQwRENCQjcxMTFGRDkzMkU2MjUKLToxMDdDQjAwMDI3N0M2QUUyMzZDNjMzNDBGMUU4OEUzM0VGQ0YwMDNERDEKLToxMDdDQzAwMEY5REI3QUREQTUwMUFFQjdFRTdDRjZGRDExMzBFQTE0RTIKLToxMDdDRDAwMDJDMzgwOUU4NzZDQTBEMDBBQ0Y3RDQyNjNERTBDRjQ0MzUKLToxMDdDRTAwMEY5NzA5QkNCQkIzMzM2MUZBNzgyRjEwQjBGQkM2NDFEMTEKLToxMDdDRjAwMDA1QkZDRUFGOUQzNzA5Rjk3ODZCQzBGMjQ5NEIwNDlFQTIKLToxMDdEMDAwMDY3RDg1OTJCQ0IwMjdERDhBODVFQUY2MTBGN0NBQkY3NEIKLToxMDdEMTAwMDQ3Mjg2OEY1RjQ4Mzc5MUEwREZEQjVFM0JFNjBGMTM4QTQKLToxMDdEMjAwMENFRkM0OThCNUMyNzNDQkZFRTQ4RTY4M0ZCMjJENkJERTgKLToxMDdEMzAwMEM2MTk5N0ZDRjk5NUYwQ0IyMDM2RTgyNzFEOUZEN0ZBOTYKLToxMDdENDAwMDJBQUM5MDk1MzYzNTEzOUY5NjFFRDA1RDI4QTI0QjdCQUEKLToxMDdENTAwMDZBNEM4Mzc1OEVEQjY0MEI0NDgxNkE3REJERUQ2M0FCMzkKLToxMDdENjAwMDEzRThGNTc3OUZGM0MxN0QxNkQ0RkY3QUM2OTJGMEJFNzMKLToxMDdENzAwMDhGQUQyRDcwQkRDOEU5MjQzQTJEREFGMUFEOTUwMURGNDQKLToxMDdEODAwMEM3RURCODlERjQ3QTJDRDhCMTA0OTA5RjUwMzNFQkI3NkYKLToxMDdEOTAwMDA5RTZGNzY3QzZCOTlFODVGOTZGNUIzOTlFQjFDMThDNUMKLToxMDdEQTAwMDI1QjRDRkEwQjZCQTYxM0NDREI3QjA3RDFBQzE4QkRBOEQKLToxMDdEQjAwMDYzMDhERTFGMUQxQUNCMDA4RkZENUJCQUIxQTU4MEM3MUIKLToxMDdEQzAwMERCN0EzMEY3QjczODhGMkQ4RUVDNDQ3OUZBOEQ0QjcwMTMKLToxMDdERDAwMERERkJBM0ZERjkzRjgzRTc5NUZGQzdCODMyQTRFQkEyMTMKLToxMDdERTAwMDREOUExQkU1QUM1QzY3RkJCNTQ0QzQzNzhBRTYyQkQ3REMKLToxMDdERjAwMERGMjlCODFEQUU0RjJDOERGMzlCMTJBODlGMzFFOEQ3MTkKLToxMDdFMDAwMDg3QzRBRDYyMDBFQjU2QjAxNzlEQzhFNzNFNjE1RjJDOUEKLToxMDdFMTAwMDJEMUNFRjMxRUQxNTM0OUZFQzdGREQ5OTQ1RkQxMkI2MzkKLToxMDdFMjAwMEE0QUMzN0NGOEEwREFGQzdEMkEyNTEzQkExRkQ0QTZBOUQKLToxMDdFMzAwMDZCMzY1NTk4OURGMDlDRDdGMzlFNDk0NjNBQzFGODU4NDkKLToxMDdFNDAwMDZGQTc3Njc5NjgwMkVCQzQ3RTc1RDg3RjYxOEY2N0EwRDMKLToxMDdFNTAwMDNEODY3OTlCQjNEQzJEQTg4NzkzRUY2OTMxREJEMTlFRkEKLToxMDdFNjAwMEM2REExRENGODIxQzRDMkUxQUU4OUMxQkIxMkU3RENGOEEKLToxMDdFNzAwMEY1Q0MwOTcyNjQ0QjZFQjNCODYxRkUxOUQwNDZEQUVGRTcKLToxMDdFODAwMDlCQkJGMDM3OUYwQjNENjVBQzlFRUM4NUY0NEJBQ0M3QkMKLToxMDdFOTAwMDNEMENGMUJFQzlDMUYxOTY3QUY1QUUxODJGRUYwRjY5MEUKLToxMDdFQTAwMDVDM0ZGQzlCNkQ4MTY3RTFGNzhGQjJCQ0VENjg0NzQyOTgKLToxMDdFQjAwMEEzNThFNThCNjQ0RjQzMTkxNTcxRkYzQUZDODFCRjc2RDcKLToxMDdFQzAwMEU0N0ZCQ0I5ODUyNUMyRkQzRjc0RTBDRkY1RkE0MkY4RTYKLToxMDdFRDAwMDdGMjVGQ0M0REIzQUFCNDNCOTc4RkJFQUFCNDM2RUMwMDkKLToxMDdFRTAwMEFCRjlFRUMxODNEMTNGQzhFN0M1Njc1QUY5QkM4RUI2N0UKLToxMDdFRjAwMEIzMjhBRjM1QkI2MjlDQUI2MDdERTVDMDFCODREQjc2RUQKLToxMDdGMDAwMERBMDJFQjMyRTkzQUQzOTJCMUI1QUREM0EwQkYyNkJFQzcKLToxMDdGMTAwMDJEMTdGRDRGRTlFRUE4MjBDQTZERjNFRTI4MzNGQTkxMzQKLToxMDdGMjAwMDNEMzlERUY4Q0MxNEJDREU3QkI0MDZGMkVEREU2MTMzMDUKLToxMDdGMzAwMEEzMUMyNDM5REQwOTc4QkQyQjdDMkY2NEM3QTQzRTFBMEQKLToxMDdGNDAwMEU1Q0NCQjkyRUI5RjU3RThFMTRDMjFCN0IzODQxRUNFNDIKLToxMDdGNTAwMDM0QkIxMkVFMDJCQzZGN0U1MzY3NjhDNzY3RERBM0Y1QzIKLToxMDdGNjAwMERCNTQ4MDM2MkRDRTk1MTNBMTg3NTJERjJDMjg5NzgzQzIKLToxMDdGNzAwMDUxM0VCOTVDNTZCNzc3MTNGQTlEMjlFNkU1N0E1MDBFNjMKLToxMDdGODAwMDBFMUFFOTUzN0U2NUI3MDBFQUY3QTJGNjI0MUEyN0Y1MjAKLToxMDdGOTAwMDU1RUE2OTZBQjZGN0FBNENFMDQzRjk1MkQwNkY3ODhFNzkKLToxMDdGQTAwMDc3NDk1QTAxRUE0QjU4NEVBQzBFOTQyNzkwOTNENEI5QjYKLToxMDdGQjAwMDExNzJCMEI0Rjk3QjMzQ0E4OUE1NTgyMzM5QjE0MTVCM0EKLToxMDdGQzAwMDFBMjE0NzlFOEUzOEM1MzFCNjNCRTAzMTc5NTlBNjY5RjIKLToxMDdGRDAwMDE1MEJGNzk3NjZDQTc4RTVFMkU0REQ5NUM5RTU2QjU2QkYKLToxMDdGRTAwMDZDMzBDNzA0RjM1OTZBQTM1QzRCMDBBRjUzQzk0RUIyNUYKLToxMDdGRjAwMDYzOEJFRjAzMDA0OEIwRDhFMjI5QzUzODYzRjE2RjM0RDIKLToxMDgwMDAwMDE3REE1RjhDM0ZEMEZFMEMzOTVDNkJGNTQ2RTA3NzdENkMKLToxMDgwMTAwMDdCN0ZFNjA0M0E0RDZCRUY0NTZERkYwQzZGMDVGMjdGRjkKLToxMDgwMjAwMDY2RkI3NDQxQzdGRUQ0MzI2NzkxODk4MTlGQjlDM0NFODQKLToxMDgwMzAwMEZEQ0NFOURBN0I2RkMyRTc5RDBFRDg1Q0Y4M0NCMEQwOEUKLToxMDgwNDAwMDlDREYwMkRGNDJCN0VCQjJCQjEwQkYzNzJERUM2OTE4RTMKLToxMDgwNTAwMDdGMjJDQUFCQTM1RTlFRThDOTFDOEYwMDhBQjNENzAwRkIKLToxMDgwNjAwMDlGNjFERTEzMTZFNjc3MDAzRkU3MDBFQzQ1QjgxQjczMEYKLToxMDgwNzAwMDc3MUI4NDdBMDdFQjhDRjAyQjY3Q0MwRDE5MkMxQkY4M0YKLToxMDgwODAwMEJCRjg4MzYzNjYzMDg1QjdFNjg2RkEwN0UxQjk1NUEzODYKLToxMDgwOTAwMEI4RkY2RjVENkYyMUZGNUZEREZDQ0UxMDEzRjQ3Rjk5OTkKLToxMDgwQTAwMEU5QkU4QzgxRUQxRDdCQjlGNzM2NUNDRjgyQTk4MTE3QzMKLToxMDgwQjAwMDJDMDBERkY2RUI5N0UyODczOUMzRjQ2QzM0MDc3M0NDRkUKLToxMDgwQzAwMDcwN0YyM0QwRDEwRjc4MzUzRUEwOTcwNTc4REMxMzUzMEQKLToxMDgwRDAwMEQxRUZDMjcyQkRBMDNEOUJFODIzRkQ4REI0REY1QjdENzcKLToxMDgwRTAwMEE5QjA4OEIwMURCRjkwMUY5MkYyQkQ1MEU4QzE0MkQ0MjQKLToxMDgwRjAwMDAzMTZFOTZGMkEzQ0EzNTAwRUYzMzQ1NzBFOEJGNDM3NjYKLToxMDgxMDAwMDVDMUZBNDlEMDY3OTI3QkQyOUNGRUVFOTVBQ0FDMjc2MjUKLToxMDgxMTAwMERCRTg4RkY2RUE4RDhGMEM4N0Y1RkFCMkJDNEZBMkRDNTQKLToxMDgxMjAwMDk3RkNGQjdGQkRGNDExNzQ1NUJGRjg4N0QxQzhBNzUxRTgKLToxMDgxMzAwMDU3NkE0Q0Q3MkVDNjRFN0U2RjIxM0I3OTRGMDUyMzNCQTUKLToxMDgxNDAwMDA5NkRBNDlEQjQ3NDExQTdBRkJCNDRCOTZGMTA3MjBGMzEKLToxMDgxNTAwMEYxMkRDNThENjhDNzIzRTdGQjI4QUI2NDEzRjI3OTVCNkIKLToxMDgxNjAwMEE2QzZFN0ZCMTdFMTZEQjRFRkRCM0FGMEJFMzhGQkZFQzUKLToxMDgxNzAwMEZCQ0M4QkIzRUY2RkEyN0QyRjNDRDc5RTMzOTgwRkVERDYKLToxMDgxODAwMEY5REY3NkY2MDlBMEJEM0ZDNkMwRkVBMzdGREIxMUUzOTEKLToxMDgxOTAwMDdDNTZEODdCRjIwN0QxMDk4MUYzRDlGQjVGRTdDQzdFMEYKLToxMDgxQTAwMEIzMEI3QkZGNjdFNEZGM0Y2QkVGQTU3QzE5RjVDMUE4MUMKLToxMDgxQjAwMDA3NDZCOTlGNzgzRkM0NUZDOEE3QUQxQTQzRkIxQThFMjQKLToxMDgxQzAwMEI3MThDOUYxRkUyQzJFQzc1MjZGMjJFMjJGRjJGM0EwOEUKLToxMDgxRDAwMDBGODE5Q0NDNzNGNUYyQkJEQTBGMEE5Qzk4NkYxNkM0MjIKLToxMDgxRTAwMDBENjQ1QTU4REVBNUJFNDg3OTM3RkE5MTM5NTlERTFGMTkKLToxMDgxRjAwMEM5MEYwODNEQTk3RUQxRTgwN0JBOTJBNzZEMTZDQzVGREEKLToxMDgyMDAwMDJERDVERjcyM0YwMDZEQTQxRkU4MkFERUQxQjMyRTJEREQKLToxMDgyMTAwMERFRjlGNjIyRTVBOTdCMTY4RjE3RkUxQkU1QTk3QjU2MzIKLToxMDgyMjAwMDYxQTdGMjc0NTlENjNGMTEzRjlDODc4RkU0NjdBNDlDRTUKLToxMDgyMzAwMDREN0M4M0NCMDdDQkU2RjEzRUM4MEJFMUJEREZEQTMzRTMKLToxMDgyNDAwMEIwMzQxM0VEMUVCNzg3MTM3RjYyQjU0OENGOUI0NTNEMTEKLToxMDgyNTAwMDQxQ0FFQkE4NkNFRjg4QUMwODNFNjM3QzhGNzFGQkM1MEMKLToxMDgyNjAwMEM2ODUzMzkyNkI5OTFCQUVERjBDNkRBNEREQjAyMUZGODgKLToxMDgyNzAwMDNBODlFRkRENTk5NzY2RUZGQTBCQjlCODEwOUYyQkIyMjgKLToxMDgyODAwMEZFRTU3MTYxNTU2NzdDNjU2RUVFRkZDMzdDQjE0RDQzQzEKLToxMDgyOTAwMEI5RjkyRTY4NjZBODVGNURGMUQ1QjI4NkQzNURDMkNCMTEKLToxMDgyQTAwMDgzNjZFOTVGOTNEMEJGODJCQ0RDOThGNTRGRDg5RkYyMUMKLToxMDgyQjAwMEQyQzZEMzc2MDhGREVFQ0UxQTVFNjExRTA2Nzk3QTExMUIKLToxMDgyQzAwMDEzRjU4RjExQUJERDY2QjQyRkYwRUI3MDlBOTFFQTIzQjIKLToxMDgyRDAwMDZGRUIxMjJFM0UzODFBRjA5OEY4NDg0N0JGMUZGQkM3QzUKLToxMDgyRTAwMDE0Mjc3NEQ0NTMzMDk1OTBFMzdGOTkzNUVDRTAwMzg0RTAKLToxMDgyRjAwMDc3MDNFN0EzQjdDNUVDRTkxNzAxMTcwMDFDMTcwMTE3QUYKLToxMDgzMDAwMDE5RTBCNTdDM0NGQTExMDdDRDEzRTBGNjFFRTZENzA2NUUKLToxMDgzMTAwMDIxMkNFNzEzN0FDMERBQzY3NkMzNzg3MTkzRTZDMDdBNjcKLToxMDgzMjAwMEM4MERDNTdGQjMyMjdGQ0E0QjVCNUU0RDg3RjUzRTk4NzMKLToxMDgzMzAwMDU1NUExMTBCMjFDMDBENjgwNzAxREZBN0IyMjZBRUY2MTIKLToxMDgzNDAwMDlCQzVGREREQTkzRTQ2M0ZCNjQ2Q0RBRDAzOUZBQThCM0EKLToxMDgzNTAwMEI0NDA1NkU2Qjk3NDdDMkE0QkY1NjdGODYzNTZFRjY3NkMKLToxMDgzNjAwMEQ2ODI0QkJCMUZGOTQ4Rjc2N0QxRkQ0MURCMjUzQ0ZGQTcKLToxMDgzNzAwMEJBNjJFNjBFNzQ2MjI3OUY5Mzc2RjIyQ0MwNzI3RUEwREEKLToxMDgzODAwMEREQjQ0NjlFODcxQkM3NkYxMkUzNDMyNkQzNDIwNkY0MzMKLToxMDgzOTAwMERBOTE3NUYzNkFBQzk3OEQ2MTVDM0U3NjY1REQ1NEUxRTgKLToxMDgzQTAwMENGRTdFOEJBMERFQjNEMUZCRUVCM0E1OUFGNTNCRDNGRTcKLToxMDgzQjAwMDc4M0U3QTZEM0NFNzdFMjExRkYzNTU3OTQ5MzA3QkY2OTQKLToxMDgzQzAwMDdEMDc3ODI0MjQ2QjBFOEM2QjE3NzlBMjFFQzBGOEJEMzQKLToxMDgzRDAwMEJDNTRDQUY3QUQxNUVFNjI1ODVGMTQ1M0VBN0Y2MUY5RDkKLToxMDgzRTAwMDVFNTAzMTFBRDZCNzg4QzlGRUVBRDVFODk3M0NBNjhFMEEKLToxMDgzRjAwMEYxNUNERTc3NjgxREY3RTc4MUZDNTAyOTBFRUUzRjlDQUIKLToxMDg0MDAwMDc1REI2QUE0MEZGMDgzRkEwOTM2OUY0N0RFMUIwRDcwRjcKLToxMDg0MTAwMEIxNDEzRjg0N0M5MzdFQTJERDA2RkFFNDc0NjIzN0NFREMKLToxMDg0MjAwMDA4QkU3REFEQjE0QUI0N0JBMTEyMUVFRjg1QjI3ODlCMjgKLToxMDg0MzAwMDkyQ0RFQjI0M0YwODNBNUFCMjc5MUI4QThFQTA0MzhGMjMKLToxMDg0NDAwMDMwOUZFMTI3ODg3OTQ0QzRCQTg5NEVENzI3OEI3NUZCQzIKLToxMDg0NTAwMDU3NTU0Q0VBMDVGNzI3QjI3RTFBQzg0OUMyMzMyQjU2NDYKLToxMDg0NjAwMDJGRUIxOUJFQkZEQjMzQUI0ODRFM0FFNkYzQUYzQzg4ODcKLToxMDg0NzAwMDc0QkM1RUQwMjlFNTk5RkIwRTBBMzlEMjUwRUYxNjkyRjIKLToxMDg0ODAwMDQwODAxQzZDRDJGQzNBQUM3MzIxQ0E0MTI3RUJGQ0VCNTgKLToxMDg0OTAwMEI5NzJFNDM3RENFRkI2OUNFN0ZFQ0ZDRUJEREY2REI4MzYKLToxMDg0QTAwMDlGNTk5MjJGRTU3RUMxQTc0OTA2M0U5NjE5RjgzOERBMDIKLToxMDg0QjAwMDAwNTc0OTM4QTBEODMzNjlFNzY2MzVBRDVFREUzRDE5MEYKLToxMDg0QzAwMEVCOEQxQUJBMDlCNEQ3NTY2RDIwNjM3REIzMUZBRDg4MDIKLToxMDg0RDAwMDFEODZGMkVBQjRBNDgzQ0RFRjlGRkREODQxM0JDODcyNUMKLToxMDg0RTAwMDA1REEzMzkyREZDN0M5N0U0RjQzN0QyNzc4NEQ4NTdCMDAKLToxMDg0RjAwMDAwQ0E0RkVERjI1NDE4NUY5MEZEOUJENTc2RDBBRjFCQUMKLToxMDg1MDAwMDk2QURCNjYwNEM1Mzk0RkREQkQ1NjY5OEY3RkE4MkZGQzIKLToxMDg1MTAwMDc4MTVFNzMzNkI0RjFFOUM5NDc5MUU3OTZEMzBBQzYzRjAKLToxMDg1MjAwMEFEMDFGNjFCQzYzRjdBMDFGQkJFQ0M3MEZGM0Q4NkZFNTcKLToxMDg1MzAwMDA3MENGMDFBMDNCQzUyQkQ3RkU2MUM4REY0NjQyNkYwRDQKLToxMDg1NDAwMDBGMDk3NzIxQkQ5OTlDREQxMTE3NzZGODMzMkQ5NkUyM0UKLToxMDg1NTAwMDI0NDVFRTI3MkVFNTcwNjVGNkJGNTdBQzhDOEQ4MDlGQzUKLToxMDg1NjAwMDc5QUUyMjUyOEUyRDhDRkZDQzQ4NjY3RUY0MUY5NjJFNUIKLToxMDg1NzAwMEVDRDlEODZDQjVERUQ1QjE5RTNDQTNCRkUzRkQ3RkM1NzkKLToxMDg1ODAwMDVGRDM2ODlGNDVGMUNCN0I3NTE1NkVENkE1QkVCRDdDQ0MKLToxMDg1OTAwMEYwOEU1OEJDMjhFMTZEMTU1OEJGRTg3MkRGQzNCRkI1MzcKLToxMDg1QTAwMDAyRjczRDI2M0UyNEZCQjc1NkI4MjNENjI5Qzc4RkZERDgKLToxMDg1QjAwMEUxMjcxRDlGQjdFODk5MkQxNUVCQTFCRkFBMjQ5ODgzNDkKLToxMDg1QzAwMEY1RkFBQTQ0REU4MjlGRDFEMThGRDU4ODdBQzdEODlEOEIKLToxMDg1RDAwMEJBMDdGRDRDNTU3NDMwNjc3MTdFQzQzQTU5NjMyRUFFQUMKLToxMDg1RTAwMEIzRjk2RTlERjhFMzVGQ0FGMzkxNTlDQzY1QzU3QTQ1M0UKLToxMDg1RjAwMDczNDI0MkREMDYxOEJGRjc2RUJEMEVGRERBQjFCQUE0QjQKLToxMDg2MDAwMEVFOTg0RkVDQ0VFNkY5REVERTg0MkJCQURGMDI3MDczMTMKLToxMDg2MTAwMENDQ0Q1NkFDRDczNkRGM0I4NkRBM0RCQTdCNDUxQkM4OUUKLToxMDg2MjAwMEYxMDNEOUFGNTZDNEY2QzFGRTA0QTJDRkNBNjc5QTJCOTQKLToxMDg2MzAwMEVBQzE1RUREOUZFREE0RkJCRDg5OEVFRTREMThBRkFFQTUKLToxMDg2NDAwMEIyMzBBQzU3MzNFNjdBOEFFNEU2RDdCNjgxQUIwMDhGMTYKLToxMDg2NTAwMDk5RjU1N0QyRkVEMUFDN0ZBQjE4OUIwNkUzNjYyREI3RDgKLToxMDg2NjAwMEQwQkUwMkZDRjQ0N0JDQkRBQkM2NThCMTdGQ0UzMkQxMDAKLToxMDg2NzAwMEZBQzc1MUJCRkJDNzk3REVFODBGRTNEQkVFRDM1REVCMzgKLToxMDg2ODAwMDYwRjBBRUY2QUNGODU5ODBEN0E3NTFEQzBFN0ZEMkRBOTUKLToxMDg2OTAwMDJCMUVGMUVDRDVDQkZCNzgzNkNBNkI3QzVDQjQ4NkNFNTYKLToxMDg2QTAwMEMzRTE4QzlGMEFGMzY2RTZCOEQ3RTA3NTM5N0VGNzhGOTEKLToxMDg2QjAwMDNBRUQ4MzZENkY5REQ1MURGOUI3NEVDOENEQUVGNjU5MTUKLToxMDg2QzAwMERENjc0NUY4RkJCOTVGOUI4OUNFQkJBRENFM0IzMEJFQzUKLToxMDg2RDAwMERDMURERDUzQzNCQTBDRDAzOTA5RUJCNjczNDQ3QzBERjUKLToxMDg2RTAwMEYyNTJGNzUyMjc3RUZGQTE2QzlERTg3MkRDNTZDNzNFMUUKLToxMDg2RjAwMDA1MjE2RUJFM0ZBNTE4RjE5NEY3QzlGRDM3NEIwRkU3NzIKLToxMDg3MDAwMEEwQzgzOEZBNzc1Nzk0QkM5MDlEMTIyOTY3NDcwRTYyMkIKLToxMDg3MTAwMDdDNEY3MTM0QzBEQkIyM0Y1Q0VEMDdCRkMyRjY0MkZDNTgKLToxMDg3MjAwMDhGNzgyNEJCQzdBMjVDQjE3QjkyRjgzRTY4NkE2MzZFMDcKLToxMDg3MzAwMDY0M0QyMjFDQTcyRTExRjY4MDhGM0JFQThGQTNCQ0Y1NjcKLToxMDg3NDAwMEU4NzM1MTAxQ0M2NzhFRkFGRjEyMTc1OTdGOTc3QTMyN0UKLToxMDg3NTAwMDJGM0VDRThGQ0VGODhCQjgzODMzRDJGNTk4RDlGN0Y5QjMKLToxMDg3NjAwMDJGNzBERkYwNDkwQkQ5RDFCOTRGQTZEQ0QzODZGNjAwQzQKLToxMDg3NzAwMEY4ODlGNTIwRTM3MzkzN0E1OTY4OUVBRUY3MDdCRjU0RTIKLToxMDg3ODAwMEY1QzQ3RkYyQkM3QUYyNkVGNkM5OEFGNUY5NURFQkM5RTEKLToxMDg3OTAwMDNDMTFCNzhGN0REMkUyNDEzOTlGNTcxODY3QzY3REJBMjkKLToxMDg3QTAwMDkyMjc1Rjc5MTZFNTcxREVFRDUxODM2QzgwRjhCQzI3NjYKLToxMDg3QjAwMDZEQzRERjk2QjgzOEJGMDNGNzExRTNFM0NDRERBMDNEMEQKLToxMDg3QzAwMDIxRUM1NzRCN0QxNEU1Mjk3QTc3MkJEOTNEN0Q0NUExQzYKLToxMDg3RDAwMDEzRTk1M0FBMzNCMzFERkM4QTFFRUY3MjdBMzhCQzBDMUUKLToxMDg3RTAwMEVCODZDQkUzOEE5Q0M4NUY0NzJGQUUwRjFERkQwOTk1MzIKLToxMDg3RjAwMDEzQjRGRUUxN0RCMzkzNzU4RjNDMzYxNDU3Q0QwMkQzOEQKLToxMDg4MDAwMDg3NjZGRUYzRkI2ODM1Q0M5MzgwRjVDN0ZGQUU3RDM0RjkKLToxMDg4MTAwMEFENTc1Q0YyRTc5MDhBODdGN0QxRjIxM0FFNDNGMUFCMjQKLToxMDg4MjAwMEQzMDk2RjdENDk1NDAwRTlBOTY3NzAzRjMxOEU2OUI0NUYKLToxMDg4MzAwMDhGQzYxQ0IwRkU3RUUxN0QzNEZEOTc4Mzg5M0VDNzdERTcKLToxMDg4NDAwMDIwNTdCRDgxMkVGMTc2MUFBRkZGNTIwRkQ4RTBCOUE1OUYKLToxMDg4NTAwMDQ5QkNERUFBM0Y1NkMxNzA1RjBERThFQTc3MDAzQzJFQTYKLToxMDg4NjAwMEI5OTZGNkQ3N0UyNUVDQ0M0QzhENzkxQTQ5RkY1RDE5NjcKLToxMDg4NzAwMDk4MjdDRjdEMzI4QUY4MzhFRkE5NUJERkZGNEQwMUYyRjAKLToxMDg4ODAwMEFEM0MzOTUyOUY3QTA4Rjk4M0Y5OTgzRDMxM0NDRjE3QjYKLToxMDg4OTAwMEY1QkZDQTQwN0M0QTdGMDdGOTI1RTY5REJBRjdCMUVCRTAKLToxMDg4QTAwMEM5NkVDNkQwN0UxQjczQjRGQzdBMjhDQTRCN0RDQzQwRkYKLToxMDg4QjAwMEFDOTNDRjdCMzIyRDIzMkIzRjdDRkZCQzI1NzdFN0YyOTcKLToxMDg4QzAwMEZCMjE2RjhENDdCQjE1NDVFQkE5REU2NDIzNzk5OTc5QjAKLToxMDg4RDAwMDlGRUUyNjNGRDlEMzRBN0VGMjkzNjU1MTA0NTdGNzI4N0QKLToxMDg4RTAwMDIyN0Q5QjY5RTJGQjZGMTAxM0E2OTI3REU3MjQ2N0Q1N0EKLToxMDg4RjAwMEIxQ0NGRDUyMkNEQUZCMDc0MjNBRTc4RjVGRjBDRDhBMEMKLToxMDg5MDAwMEZDMTlEQTJCODk5RTdGMzNEMjE4RkNENzc1NDJERTY2QkMKLToxMDg5MTAwMDlBQjgxQ0IxNUQxQUVEMzczMTU2RUI0NDNCNTA2NUQyMjUKLToxMDg5MjAwMEM4REUxOUY1QjJBQzE3OEY1RjY3NjZCODZFQzJGQjE2NkEKLToxMDg5MzAwMDNFNjg3MzJEQzlFNDM4RTgxMjFGQzg5QjE2OUE0MjczMkIKLToxMDg5NDAwMDcxMUY5MjZEQjE1MTdEQTMwNkQ2MTExNUNGQ0YzREJDREQKLToxMDg5NTAwMDA4RjhENzk4OTlEOThBRjUyOTI3Qjc2QjEyOUYxQTY3MTMKLToxMDg5NjAwMEM1Mzg5NDU3RTgzRjZDODZGRTg1NzFEQzJFMkZFQ0M2MjcKLToxMDg5NzAwMEVCM0UyQ0NFMUU3ODM2RjI3OTg4NzMzNkJGQ0YxOThGMzYKLToxMDg5ODAwMEZBMzY4Q0U0MDVGNURGMDRGRDdGNjNCQ0JGMzRCRUM4NTYKLToxMDg5OTAwMEQ5OTI0RkZCRjcyQkIxNUU4MkY4RjRFOTFGRjE1QzgwQUUKLToxMDg5QTAwMEQzRkFBMzNDREU2RUNFOEE0MzNFMjQ0REFGQzRFNzNERUUKLToxMDg5QjAwMEFGOTM3RDAyQTU3QUIwMDhFM0MwRTdGNUMxOThDRkNFQUEKLToxMDg5QzAwMEJDNkZFRkQ4MzUwOEZGNjlBMDAzNTE5OEY5QzJCQkU0MkEKLToxMDg5RDAwMEE3NkUxMzcyRDY4MkYxM0ZGQTJEODBGRjA0NkQ2RDJGQzIKLToxMDg5RTAwMDZFMUZCQzNBQUZFN0Q0RjZFMjc1NUU0OTU3RDlCRkYwQzcKLToxMDg5RjAwMDNFMEJGMTYzRTE3MjJFMEYwQkVCM0ZBMDc5MTdDNjg1OUEKLToxMDhBMDAwMEJBMjMzRjE2NkVCNjBDNDFCOUZFODVDMDdCNTY3RENGQUEKLToxMDhBMTAwMEUyQzMyMDFGQjMyQzA5MEUwRDJFNTVGQkNCQUQwODU3MUEKLToxMDhBMjAwMDM3NjgwNENCRTcyREJDRUZCREVFQTY3QzNFMUZCNjM2MDMKLToxMDhBMzAwMDIxNDdFMTc5NTMzMkQwQUY3REY1NUM1MkM2Q0MwOEJFRjgKLToxMDhBNDAwMDdGQjU2QzZCM0NFRTZCN0YxQTE1Q0M3MTYwM0RFNkY2MjIKLToxMDhBNTAwMDI4RDczQUQyNTNDRThGQUY5NkU1QUNDMzdBQ0QxQzQ3MTgKLToxMDhBNjAwMDI4MEVGN0MzRTdEQzkxOUQ4OEZFRUU5ODIzNjhDNUZFQ0IKLToxMDhBNzAwMDYzOEQ5OTI2ODRERDBFNDczMUMyNkVGMzAwODJCRjEyRUEKLToxMDhBODAwMEU3NTRFODA3RjhCNDQ4RTM3MjUzRkREQzVFNkIxNjNDMkMKLToxMDhBOTAwMEVGMjk0MTlGQUY5RjdGMzcxN0VCMDYwQjMzNDJCOUU4QjEKLToxMDhBQTAwMDg3NDFBRTcyRDM5MTJGN0ZENDI4NUU1OEY0OUNFRThFMEUKLToxMDhBQjAwMEVBMUY5NkFCNDUyODU3QTBGRjBCODQ1QzJEREFCNEY1NkUKLToxMDhBQzAwMDJFRDREMzQ1Mjg0RjgzQ0U5NTRCQzgyRkY3RDFGNTE3MTkKLToxMDhBRDAwMDlGMUVDQkY4RkRGQjUwRUVBNERGMDc3ODk5MDVFQjZCRUEKLToxMDhBRTAwMDU2MDFDMzczMTBGRTFERDIzRjg1RkE0N0YzN0U3RjNFQzkKLToxMDhBRjAwMEY5MTNENjYyQzVCOEI4NDZFN0YxMDI3MDM2MTVFMzg5QjYKLToxMDhCMDAwMDlBMjY4QkJGMjVDMjNFMkVDMkZFRkM3MDdGNTc3MjEzODEKLToxMDhCMTAwMEVDMjVGNkNCRUE2REU0OTc4MjQyRkY1QUVFREIxQzhGMjAKLToxMDhCMjAwMDcyRjFGNUYzN0I1RjFEOEU3OUQ2OEI5QTAzRURGRTM5REEKLToxMDhCMzAwMDdBMjhFODU2ODM3NDhBQTc3NTUyN0M1NDgzNzQ4OTBGMDcKLToxMDhCNDAwMEQzQTk0M0RGODQ1Q0Q0MzA0RTA3NDk5NzFBQjNBMDkzNkUKLToxMDhCNTAwMEVDMTdGNzM3MEIzOUFDNjY4MkFFOUI3QTczN0QxN0ZBNDgKLToxMDhCNjAwMDBEMTI0MzdFNDRBRUNGOUJBODlFMUYzODI1RTRGRTZEQjgKLToxMDhCNzAwMEIxQ0U2QTkwMUI1NzNFQzk5N0RCM0E0NEU0RkZEMEY1NkIKLToxMDhCODAwMEY1OUY5RUE2RkE5MUU0QTdDNDNCM0E4NzNGMUZFQ0I0MzkKLToxMDhCOTAwMEJCNUI2Mjk4Q0YyRDI2MzZCRkIzN0FGNTY3NDJBRTJDMDkKLToxMDhCQTAwMEIxRENBRTdDNUM5RjdFNTMxREQwNkZDMTczQkE4Qjg4RTUKLToxMDhCQjAwMDg3Qjk1N0M0NzM2REE2OTYzODhBNEY3RkE5M0I3MDVERkQKLToxMDhCQzAwMEE1RkY1RTMxMDFENzJERTVDRUIyNTEzMzM3RTEzRTIxMEQKLToxMDhCRDAwMEVCNDZGNDk3Rjg5NTVFRTY5OUQwOERDQjVEMTBGMTkxNTgKLToxMDhCRTAwMDc4N0VBQzA1ODk1RkZFM0Y2OTBFMUVFRkI2NThCMThFRTgKLToxMDhCRjAwMDI4RjVENDg4RUYyOTgxQUYxRUFGMERENzA2MjAzRTJFNzEKLToxMDhDMDAwMDI3RUEzNzAzM0Y0OEY4QzQxRUJFOUI5RUU3M0Y3QTc3QUEKLToxMDhDMTAwMDY2RkZGMDczOEVGOUUzQ0MzOEVFMThFMzc2NDBDQUU1RDAKLToxMDhDMjAwMEM3QTIyRUYxRjFGMkFEMTQwRkNCRTdEODczQjg1QzQ1QjMKLToxMDhDMzAwMDNDQzc1Qjk3N0NFRTczM0FFMkJDMUM4RTk3RDQ4QkZERUQKLToxMDhDNDAwMDg5NUNGRTRCOTc3RDQwRTNBNDlEQzUxRkFDQzc0OTdBNjQKLToxMDhDNTAwMDRBQkE0NUU4QTU0MjFGQTk1RjUyOUYyNDVGRkY1MUJENTQKLToxMDhDNjAwMDYyRjdBNDUwREM3QUFGNTgzN0U5NDhGN0IwNUY0MEY5QjMKLToxMDhDNzAwMDQ0N0Y2N0IzRjI3MzcwMTE3RTkzRTI5QTcxM0RCRUI1ODMKLToxMDhDODAwMDdBM0JCOTJFRTk2NEJDMUVDRUFCMUMxOTQ4RkY3MUIxMEEKLToxMDhDOTAwMEE5QjQ1RkNFOTZBNUVFRUIxNTExOUY3RDhBNzUyRkI0MTIKLToxMDhDQTAwMEE3N0ZEMDAzNjQ0RjE5Njg2NTg0M0Y5NzcxNUJGREVEMjIKLToxMDhDQjAwMEUzMUNBMzUwQkU5RUQzRThEQzkxRjRERkYwRjM0MDg3QzEKLToxMDhDQzAwMDlDQzI3Q0YzMEI2RUNGQzU3ODYyNzk0RTE2Rjc2N0M5RUMKLToxMDhDRDAwMEVFOTM3ODdGRjU4OUQwRDg3ODY3Mzg3RjE5NzkzQUE4RUMKLToxMDhDRTAwMDI3NjA3RDcwNTNBNjkyM0Y1NEI3RUUyMzNENUZDODQyODQKLToxMDhDRjAwMDJCMzBERjlENzlERkJCRTU0MzkxRkY3RkIwRDBGOTg1NTUKLToxMDhEMDAwMDM5MEQ5OUU0RkY0RUFFOUYzRDE4NTNEQjk5Q0I3MzA4QTQKLToxMDhEMTAwMEJFRjVEOTVCMzg3QzFGOEZFQjY2MkUyRkRDODBGNUY5MTIKLToxMDhEMjAwMDRGQTNEQzYzNTFDRURCNTY2QjBFQ0NCRjQ2M0M1Qjc4NjkKLToxMDhEMzAwMENGMEREMDNGMjJFRThBNkU4OEVGRDFGNTlGOTYwRkM3RjgKLToxMDhENDAwMDNDQTI0RTI3QkQ3MUFGN0Y2NDNBRjZCQjlCNzQxNzJFRDEKLToxMDhENTAwMDcxMEU3M0RDNzMwM0NBQjkzOTgxRjQ0RTlFNkI1QzZBODEKLToxMDhENjAwMEUxRjJFNkNERTE3NkEzMzI4N0RCOEQ0QTIxQkZBNTRCNDgKLToxMDhENzAwMDk3RTZFMkI5ODJCNkE3QzE0RkUxRkVCQUQ1RDkxOEM0QzkKLToxMDhEODAwMDNDNzBFNzY1QUU3NUYwOUMxQTQ4NUI1MzQxOUU0RTY4OTcKLToxMDhEOTAwMDNDMUU5RjZGNjU3Njk0QUYwMzk2RDA5RDg4RkY4MTNCMDQKLToxMDhEQTAwMEUzMDZENjIzMDJGQUQ5MjFBODFGNkU5MTc3NDExRTQ1MEEKLToxMDhEQjAwMENGOTVGNDkyQ0ZCRjU5RTg4MTlDNDdERUI3MUZFMzJBRDUKLToxMDhEQzAwMEY0MjMwMkRGOTNDQkZFMzAxREUzODU5MzFCNzMxMjU5MEUKLToxMDhERDAwMDA0REQ0RkUyQkE4MERFQjc4MjdEN0NCMTkzN0NCMDNBOEQKLToxMDhERTAwMDQ3RDZCOTAyRkMzOUEyOEU3OEMwRDJEMDAzRjc3MzIxREUKLToxMDhERjAwMEFFM0YxRTE5OUY3RkYxNzQ5NDFERTUxMkUyN0FGNUJBMTkKLToxMDhFMDAwMDg1RkIxNTg4RTc5NUVCQTAzRjBBREM5MUVGRTk1NTA5NTIKLToxMDhFMTAwMERFNEVFQzkxNkM4REYxQkUyRjI3QjZEMzc4NUZFQTlGQzIKLToxMDhFMjAwMEYxN0UxOURGNzdENDVEN0E1RERBQjlBRTU2MUYzMDA2NzAKLToxMDhFMzAwMDE0NjIyODA2Njc4MEVGRTg5ODFGNUVDMkYzOTc3MzFCRTEKLToxMDhFNDAwMDZDMEUxQkQwRjczOEVBMTdFRTBCNkVENjc5QkM2OEU3Q0MKLToxMDhFNTAwMEZBNzY3Q0U3QzAwMEQ2MTVFNjFFNjFBRTIwQzA3MzBGMUYKLToxMDhFNjAwMEU5MkUyNzhDREZCN0ZBNUUzQURGNzFDQjVBOEQ1REE2MEIKLToxMDhFNzAwMDQ1RTQ1RDhGQUU5RThFRUE3NkNBRTU1RDkxMDZFMzRGQ0UKLToxMDhFODAwMDZERTRFNzUxQTAzQkQ2OTA2RkJEOUFFNkVDM0FERkZBNkQKLToxMDhFOTAwMDU3RTU1OUIyRkU2NEE0RkY3RkU0ODg3Q0NCQzU1QzJBMDkKLToxMDhFQTAwMEZENzlERUJFMUJDNEE4NjhEMEI5RjQ2RkY1NzkyOUFGOEYKLToxMDhFQjAwMEZBQzYzNzlGREE2MThENEY5N0E2QzMzQUZFQTY3REZDQUUKLToxMDhFQzAwMEUwMDhENEEzQjgwNEFBOUZCNEZBNkE2OTczRjA5QkE2MTkKLToxMDhFRDAwMEMxNjcyNzAzOURCNkM3MjYzOEQwN0U3Q0UzQUJBM0VCRTIKLToxMDhFRTAwMDFENzIyM0U0NzRFNEE2NjYzRDlERDFGODFEMjM2MEZDNDkKLToxMDhFRjAwMEFFRDgwNERDRUVFODY0MUY4RUYzRDk3OEZFRTY2N0I3REYKLToxMDhGMDAwMDBGQkQwQ0FGQ0JGNTdFRjkwQkNFNkY4OUZGOTcxQjY3QkEKLToxMDhGMTAwMEM3NjNCQ0RBRkNEQkE0MURDMzkwQ0YzMTA5MEUxNDg1RjYKLToxMDhGMjAwMDc5RTIxQ0NFRTc2QkI4M0QzQTYxNEZEODgwNzVENDEzMTcKLToxMDhGMzAwMDZCQTc3NUM3RkNGMDE2NEI5QkQ1MDVGM0JBNzY1NkM0RTQKLToxMDhGNDAwMDYzN0RFNDMzNzM0QkJDMDM1QjE4MUY0NDNDQ0MwMTFEQjEKLToxMDhGNTAwMEVERTBGMDMyNDZGQjgzQzM4MzY2RTZDQ0E0QUQ3QjkyQTIKLToxMDhGNjAwMDlGNjFBREU2MDBFNkNENUZFMUJFMjFGQUYxQjNEMTdDQjEKLToxMDhGNzAwMEZGNUVFQzA3REVCMjhERDdEOTNBRUEyQUEyQkUzMDQyQjQKLToxMDhGODAwMEFDMzczNjM3NTFFRTAzRDFGNUQyMjI3RUZEOEJCNTJGQUIKLToxMDhGOTAwMDREQzZGOTRFQUVCNzM4MTBERjZGRDY1QjY4RkUwNTkwNTAKLToxMDhGQTAwMERGOUI0MDFFNEY2Q0U0RTcwNTE2RUM4MDNDMzkxM0VENjcKLToxMDhGQjAwMDg4NDZGMkJCMDBFNEQ3OEVGMjc3QkJDNTZENEQzODU3QkIKLToxMDhGQzAwMDJFNEIzN0YyRkM3QTQxQTM0NkY5QjY5NENGMDVFRUMwOUEKLToxMDhGRDAwMDU4QTJCQjkwNTMzQkZDRkIwOTVDNDczN0Q2QjgwMkU5NkIKLToxMDhGRTAwMEQxOTVCQ0ZFQTNGNTAwM0RCN0YzN0E4MDUxMUUyNERENzgKLToxMDhGRjAwMEE0NUM4NEU1OTQ5MTdDNEFGRTI3MzYwRTFDOTU0RTM3N0UKLToxMDkwMDAwMEY4ODk5RUZFMTI5Njg3RjFDMjUyMkJDQkMzRjM1MDdFOTUKLToxMDkwMTAwMDUzQjQwQkY1RkVFRjUxRjFGREIxMEU1NTY3RTdFRDVENzEKLToxMDkwMjAwMEQxRjFFQkIwRkQ3QjU0NDYwMEYxRkVCQkM5RjEwQUU2N0QKLToxMDkwMzAwMDU5QkZDQ0NEMjRCOUJENEI3NzVBMzRGODc1NUE3MkNCOTEKLToxMDkwNDAwMDY4NzIwM0E1MjZCNzA5RkRFMDUyMUJEOTExQTMxRDcyNTIKLToxMDkwNTAwMEU2NzJGRkIzMkQ5N0QxRkRDNUI5RkM5Q0I4ODVENTUyRkEKLToxMDkwNjAwMDdDMjE1Qjg4MDc3QTYyRkM1MjExOTM3ODA2OEY5MkY3MTUKLToxMDkwNzAwMENCNEQ5OTY2MDZCOUFFMTg5MTc4NjczNjQ0OUU4NUI5OEUKLToxMDkwODAwMEU5RDM3MEZGQjc2MjcwRTJFNjJDODA4NzZFNDhFM0ZEOUIKLToxMDkwOTAwMDAzMTIwQjJEMDBENzZCM0RBNjhEODZGRTZCNzJERDU3M0MKLToxMDkwQTAwMEU2NDYzQzQ3Q0UwQkQ3RkJFM0Y1OTIzNEVGQzBEQzE0MjkKLToxMDkwQjAwMEY0NzNCMTJCRDEwRkZDNEQ2QjVCNjREMkMzRTMwRjZBMjkKLToxMDkwQzAwMEVDRDg3NjJEMENCNzU4NTgwNkM2REJDNTg4N0Y0QUQ3MzIKLToxMDkwRDAwMEVERDI1Q0Y3NzBGRTVDRjVGQTJDMDgzOUIwMkUzMUNCN0UKLToxMDkwRTAwMEZGREE2MThERUMxOUYzRDg4MTlGNTM4NEZDQ0RCMkM3QjAKLToxMDkwRjAwMDA2QzlDRUFEQjRCNDc2Qzg0NzE2REFBOTA0MzNGMjdERkEKLToxMDkxMDAwMEIyNjBGQjE0NzNCMDE5RUZFRkMzOTYzOTNFQjc1M0E4QTIKLToxMDkxMTAwMEI4RjZBN0E0QUVFRDNGMjgyQUZCNUNDRTA3RUJGQjlCN0QKLToxMDkxMjAwMDA1RDYwQjdDRDVEQ0MwNkI1MDMxMEQ4ODVDMDVGNjRFNDYKLToxMDkxMzAwMERCRjFEQUY3MzhFRjUyM0Y2Qjg5MjIzRTU0MzlGMDdDOEQKLToxMDkxNDAwMEI3QzZCQ0E2OUZBMDVEMTgwMzcyMzEwMDVCOTAwNzE4REMKLToxMDkxNTAwMEI3NzhGM0Q3RkI1MDJENkU5NTcxOTZCNzg4RTJDNTNCNzMKLToxMDkxNjAwMDFDN0MzRENDM0I5Q0U0RjU0RTIxQUY1RkY4MjA3NTA3OUQKLToxMDkxNzAwMEY5OUMxMjBBQzVFMzUxRDhENkM5QzE1Q0I0MEY2NUJBQ0YKLToxMDkxODAwMDc3MzZGMkUxOEJCNTRCN0IyQzA2RjlGOUZBNDU5QjZCRjAKLToxMDkxOTAwMDEyOEMzRjExNzgyOTFFRkQ2QUI1ODhGN0Q5NTkzRDc4QTAKLToxMDkxQTAwMDM1RjRFRkNGRUNCMzZFNTU4NDdDNTVFNzcyQkZERjlBOTAKLToxMDkxQjAwMDE5Q0NCODFCRUQ0QzI2Q0Y1N0Q5RDlCRDE5NzdDM0Y4QjgKLToxMDkxQzAwMEIyQUNGMTg1QUI4ODBBRUU0NUI5MTFGQjkzOTNDRDlEMDYKLToxMDkxRDAwMDlGREZBOEU4QzFFMzIzQjY5RUZCNjM5Qjk5RjlFMzEyRTYKLToxMDkxRTAwMEE5NjVGMTQwQTdGMTgwNEIxMTlFNEIwNTU4QTdGREZDRTYKLToxMDkxRjAwMDAwM0QxRkM3QzU2MzVDRTM5QzlEQ0FGNzdCOTgwN0VERTQKLToxMDkyMDAwMDk2RTRBRkU0REIzOUZDMDQ5NDMxQUUzN0Q5OTkwNUQ3NDUKLToxMDkyMTAwMERCODdBRDc1QTBGRTRCQkU3RTIxRjRGMTBCM0JEN0MzQkYKLToxMDkyMjAwMDMxN0EyQ0Q5QTlDNTlCNzk1RDZGQjFDNkVERURFMjlENzAKLToxMDkyMzAwMDFBQUY2RjlFRTM2RjM3QUY0MDlCM0M3RkVENkNCMjY3MTgKLToxMDkyNDAwMEQyOEUzOUUxMUZDQUQ3MDI4NzI3MjFFOEZDMDdGQ0VFM0UKLToxMDkyNTAwMERBRDI4QkIyNjc0RkU2OEFGNzA0MDZCMjgxMjg3RjE3MEQKLToxMDkyNjAwMDhBOTdBNDFEMDNGNkFDQkYyNDdFMjFDOTYwRERGMzA0RjgKLToxMDkyNzAwMDhFNjNGNDJBQTcxOUU5OTI2Mjc3QTEzRDVGRkM2NDM2RjgKLToxMDkyODAwMEY5NDk3NjYyMEQ4QjFDQzdENjI2OTFGQ0FFQzhENDg5RUQKLToxMDkyOTAwMEFGRTU0REU5Q0MwOTk3NkU2REQyRTg5Q0VDQTRBNjI0MEQKLToxMDkyQTAwMDgyRTNEQkQzMDgyRUZGRkQ2NTI1QjhFRThFN0REMERGOEYKLToxMDkyQjAwMEY3MjZGOEU0ODYzNzBBQkNCQzRFNjNDN0Y5M0Q0Q0UyOUEKLToxMDkyQzAwMDkxREY4OEZFRTc1NDJDRTAwMTc0RjZDNEFFQTRCQUEzODMKLToxMDkyRDAwMDg3NzVFNDQzREE0RjFBQzIyMDM1QTg3NzZFOEI5RkYzNjcKLToxMDkyRTAwMEM3NUU0RkZBMkZENkI1NThFOEQ1RTIwM0RDNUYyRjFFRDQKLToxMDkyRjAwMEM1RjcwQkNERkUzRTA5Qzg3RkNCN0U5RDA1MDBCRUY2QUYKLToxMDkzMDAwMDgwNUUxODg0QTE0Qjg1M0RCN0E1OUE5ODMzODI2RjUxMzIKLToxMDkzMTAwMENFNjhFNjhDRTAwRkYzQkI0Mzk4NkY1NTBBNzlCOTM3RjYKLToxMDkzMjAwMDhBREJGRDk4QkM0NDY1NUM2NUVDNUM5MjlGNTBDNkQ4QjYKLToxMDkzMzAwMEZEQjhERTM4RDdFNUNBQkNDQ0NCRTM2MzI5NTdEMzQ1QUIKLToxMDkzNDAwMEREN0MzMjZCNUI4NjdFRjJEQTRBRTg4Rjk4Q0Y1MkZDODYKLToxMDkzNTAwMDJERjkwRDRCQjExQTU3MDM1RDhFOUY0RjlFQkU5MEZFQTcKLToxMDkzNjAwMEIxMEZFQjQzRjI2NEEwMEZFODA3RjlGQjUzODdGOEZCNUEKLToxMDkzNzAwMDI3MTA5NTNDNUUwQ0YwRjRGRDE2MTY4MEZFRTU4MjJFNUIKLToxMDkzODAwMDE4Qjc2MkZFNzNDQTFENDc3QTIzRTUyRTg0N0UwRkVDNjAKLToxMDkzOTAwMDVDNDI5MTRBQjc2RTZFOTU2RTQ5NjUyQTdENTIzQzJBQjEKLToxMDkzQTAwMDNEMkVBQkNDNTJGQUQzQkM3RDk1RkVGNEY5ODMxNEI4QjQKLToxMDkzQjAwMDY3RUQ3MDY1RkMxNTc1MjUwQTlDRTk5RkEwOENDRjVFNTIKLToxMDkzQzAwMDM5NTU4MTczMUE2RTUwQzZGNzVFMzM0QkU5RUYxMzU4NjcKLToxMDkzRDAwMEEwRjQ1RkI5NzFCMTAyRjc2QkZDQTUzMjdFNDBEMzEyRTUKLToxMDkzRTAwMEE1N0Y2MDcwOTVEMjNGNzhGRkMzMEE1QzE4N0E0MjE5NTYKLToxMDkzRjAwMDNGRjRGMDNBQTU3RjU4Q0IxRjk1RkUxMTI3NUU1NEUwNEQKLToxMDk0MDAwMDkxNkQyRjJCRTNBRjZFREZBM0MwQTNEODFCQ0FGODUyMTgKLToxMDk0MTAwMEZCQkIwQTNDQzZGMTE3NjVGQ0I4RDQ0Rjk1RkVGMUNFRjQKLToxMDk0MjAwMEFGOTRGRTg5NzlERjI5RjA3MjExRTc5NEJCRkU0QkI5NDYKLToxMDk0MzAwMDJGQzQ5NkU1QTAxQzNCN0I3ODhCN0E1M0RERTc4NDE5MUIKLToxMDk0NDAwMEY1RUZGMDhEMUE0QkMyRkM2N0ZGMzQwN0U5RkQyNUU2MDYKLToxMDk0NTAwMDgxRUVERUFBMUM5RjYxQjEzN0UxNzlGNjBCRDlDNTBDMEMKLToxMDk0NjAwMDExNEY4Q0QxMjdEMTdCNTVBNzFBNzlCREMzRThENzY1OTkKLToxMDk0NzAwMDNDOTcwMDZFRDkxQ0YxREM2RTZFM0IyNEY0NjEzOEE5NzgKLToxMDk0ODAwMENDQTFDMDI5OUU1NDY1RkM2NTk1NEVBNTNGQ0Q5QkE3RjgKLToxMDk0OTAwMEY0QTdDRjc3Mjk3MENGREEyMjY1RkMxNTc1NkUwNUNFNUIKLToxMDk0QTAwMEY0OTcyOUUzQjM1NzdBMTQzOEE3QTE1MjE5REY3QjhEQkIKLToxMDk0QjAwMDU3RTlFRjEzOThBRkY0NUZCOUIxNTY4MUZCMzVENjI5NjAKLToxMDk0QzAwMEUzMDczNEY5OTVGRTgxQzE5NTRBRkZFMEZEMEQwQTVDODIKLToxMDk0RDAwMDE4NUFBMzhDMUY3QTM4QTBGNDBGNkJEOUE4RjQ4RjM4RDAKLToxMDk0RTAwMEQxQThDMDIzREI5QTk0RjE1N0I3MDcxNTc4MTQzQkEwOTUKLToxMDk0RjAwMDhDMkZCNTFGNTRFMDMxOEUwRjk1RjFFMzUyM0Y1NkZBOTEKLToxMDk1MDAwMEM3M0I0RjJBRkRENTVGQjk4MkI0MkZCNTlEQkZFRjJBNjcKLToxMDk1MTAwMEUzQjk4OTc5REYyQUUzMkNDOTEwRUY2M0ZEOUI0NUJCRDIKLToxMDk1MjAwMEYwQkM3RjU3NzFCRThDMDNDQjVEREYyQkNGRkRCQjg5QjkKLToxMDk1MzAwMEM3RTdCRkVGQ0RERjRGQkI0QkU3NzFFMjUyQkY4N0NFMkUKLToxMDk1NDAwMEU3MjVFMjgxNTdEMDkzMDRCRjQ2RjI4NzI5NTYxNUQ1MDcKLToxMDk1NTAwMDIzOTM2OURGODI1Q0E2MTNDRkJCNDExQzA0NDBBMjI5ODAKLToxMDk1NjAwMDMzMTNGMzkwOTg3MDFDREJFM0E3QzExNzFGQzc2RTg2RjcKLToxMDk1NzAwMDFDMDdGMTM4REVEQkZCQzdERTg1OThCN0ZENjkyQ0U2RkEKLToxMDk1ODAwMDM5QjczMkZGMEFDNDAzRkM2RTAyRUU2M0JEMTVBNUQ2REYKLToxMDk1OTAwMEEzNjQzQkRFMEU3NDhDNzhERTgxQTg4NjFFODNDRUEzODYKLToxMDk1QTAwMEJGRTNFREFEMzRCRTYzNUU1MUFGRDI2MDdEOEIyM0U2ODkKLToxMDk1QjAwMDdGMTBGMjJGMzNFODY5ODMwRkY0MEMxMkVEODc3RDBFRDQKLToxMDk1QzAwMDgyMUZGNUE1MTJGQzk4Q0Y0OUVEMUE1RjFFQjU0RkY4MjIKLToxMDk1RDAwMDVDRDRCRkQ2NTc0NEYwNTMzRTM3QzEwMTVGMTlCNUVCOTkKLToxMDk1RTAwMDdDMUVCQUJFREU1NzQ5RjAwNjlGOTdEQThEQkVGOUQ0Q0QKLToxMDk1RjAwMEZFRDE1NzRCRkRDRkY5RUEwODdFQzFFN0E3QjZEMUI3MzgKLToxMDk2MDAwMDkyQUVCRkU4NkIyMDc4OTM2RjBEQzE1QjdDMDE2QTlCQzMKLToxMDk2MTAwMDdDMUJBOTdERDlENzQ4RkQzQjdDNEQwNEVGRjIwNTA5QTEKLToxMDk2MjAwMDBFRkFGNjEzQkNDNzE3MjI3ODlGRUYzMEMxQUZGQTVBNzMKLToxMDk2MzAwMEE4RERFRjNCNDFFREVCQkUzNkVBN0ZEM0Q3NEU3MEFCRjIKLToxMDk2NDAwMEQ4NEZGOEE0QjdBNkJDQUYyNzYxQzY0NjkzM0NDOEY4NkMKLToxMDk2NTAwMDc3MzJFNjNEMjgxQzQ1OTY2Rjk0QkNDNzkwN0YxOEY5NzkKLToxMDk2NjAwMEYxQTU3ODhFQTUwNEMyNUY4QzdGMkVDRjVEQjczNDIyMjIKLToxMDk2NzAwMDJGRjg0NjNDRUZERTY4RTY4RjAyN0RBODM3RjFCQTQwNEUKLToxMDk2ODAwMDdEMjJBM0Y3QzM5ODg4Q0ZFNzA5Qjk2NEM5M0MyRTlGMTAKLToxMDk2OTAwMDJCRjA5QTI3RjRBMDEwRTUzMzhGRTRGM0NENEJDOUIzMzgKLToxMDk2QTAwMDY0QkUxRDkzRTFGRDkxRTRCM0E3Qzk0Rjc1ODc1OEZFRDEKLToxMDk2QjAwMDFFN0VGRjBDQUY5NjA3RkRBNzZBNkY3OTk1OUVFNzcwMzcKLToxMDk2QzAwMEU1RTI0M0NBNkRDMTk0RUJCMDlFNzQ0MEE3M0E2QzU3NzMKLToxMDk2RDAwMENGQUIxMUVGNDk3NEQ5QkZFQjY0MEZGNDQ3NjUzRkVBOTQKLToxMDk2RTAwMDU0QUY3RkNCMTI1Nzg5RjU5NkE0M0M1RTg3NERDQTMzQTEKLToxMDk2RjAwMDI5RURENjBDNEY2MjFFRUVEQkU3RDQ2RUY4OTkxNjdFOEMKLToxMDk3MDAwMEZGN0YwQUE2RTZBMEU3MTVDQzY5QTE3M0I4Q0NGRDBBRDUKLToxMDk3MTAwMEJFN0E3MzJEMDQ3QzA4NUZDN0ZDRDQ4RUVDRTk0REM3N0MKLToxMDk3MjAwMEY1NUMwRjA5MDZDMkRFRTFCNjhDQ0VENjYzQzQyNzQ3Q0UKLToxMDk3MzAwMEUwOTMyM0YwOTBFREExMEM0RjJGQzRFNzc4OEU1QkMxMkUKLToxMDk3NDAwMDI3RUEwQUE3Mzg1N0RGRjYxNEUyRjU5RjNCQkZGRDVDMTYKLToxMDk3NTAwMENCMEVEMzVCRDYzNzU2OEMxMkU3QjQ2RUQ3RTQzRTM4QzcKLToxMDk3NjAwMDhGMTNFRDRDQzY4OUQ0NUY3NTI3QUZGNzQ4N0Y3OUE0NzYKLToxMDk3NzAwMEEzRTVGNkYwNTRBRDg1RUM2Njk1MTZFREMyNzhGQjU0ODIKLToxMDk3ODAwMEVEOUQwMzcwQkZGMDQ2QzhGNzcwRkY1NERBRDEyQTgwMTAKLToxMDk3OTAwMDREMDA1NzMxN0VFRUEyRUE0ODFDQzk5OUQxQkVDMjdENjgKLToxMDk3QTAwMDBDRjdGQkFBMjAwNEMwRkNGMTZDMDZBRkE3QkNFNUY5REUKLToxMDk3QjAwMEQ2ODJGM0IyRTQzNjdBNkYxNUU0NjYwQ0FFN0ZDMTMwMjAKLToxMDk3QzAwMDlEQkVERkYwOTYyOTkwQUJFOTI0MkY1NjBERjA5Rjk3QjAKLToxMDk3RDAwMDBDRjJEMjQ5QkMyMEU1NjI5MTc4MkY0NzVFMDc3OTlCNTUKLToxMDk3RTAwMDgyRkNGOTY2REJEMDNDREFBN0Q5MzVDQzg5RjQ1QzZBMTcKLToxMDk3RjAwMEUyRUZENUY5NUZEN0Y5QjkwQzJDRTVFM0I5OTE4NEZDMTgKLToxMDk4MDAwMEE3RTlGRDAyMEMyRTkwN0ZDM0UyRThGRDgyNjY5REQ1OUMKLToxMDk4MTAwMEZEQTkxMzdCNUEyQkY4Rjg1NkFBQTUyQzQwRjNBQUZCRjYKLToxMDk4MjAwMDhBQjdFNkYxRkFDRkFENzk1QzJGQ0JGNzFDRTg4OUVGNjgKLToxMDk4MzAwMDBEMkVEQTZGQTFCQzg4MTVCNEU0N0IzQTM5NTc1NTUzMjUKLToxMDk4NDAwMDc3RkZDRjdCNDVDODc5NEREM0M3RkMzQzE2NkJDOThGREEKLToxMDk4NTAwMDNDODdCNTUyQ0MyQkU1NEJCN0M2Nzk5RjhFOERDNEFGRjQKLToxMDk4NjAwMDQzQ0U2Qjg0OUM3RjhFNzFGRjY0OUIzM0UxM0FCOEI1MjUKLToxMDk4NzAwMDA1NDgxMzg0RDZGQjNCMDc5REU3OTNFN0ZBRTYzMDBGRDQKLToxMDk4ODAwMEI1RjM4MEREMjhENzFFRkY2QTdBQUY3RTAxNkJBNEVCQUIKLToxMDk4OTAwMDhCOEE2NjY3MjA1Q0MzREE0NkE3QzI3Q0Q3QUVBQzdGRjIKLToxMDk4QTAwMDI1MTVCMDlCRDZCMDdBMENENkI5QTcwNjY2QkU4MjZERDgKLToxMDk4QjAwMEM1N0FFRDczQkY5M0Y0QzQ4RkNGNkZEMTZBOTc1RjBFRjMKLToxMDk4QzAwMENGQkJFMUI5NTFDQkIxOEUzQzU5RTc3QzYwNkY3MDNFQTQKLToxMDk4RDAwMDgwM0NCOUY1QzQ3M0Q3MDc3QTcxQUZEMDBCQzI1RkVBODkKLToxMDk4RTAwMDQ1RDUxMkU2RDY5MkMzRUY4MTc0RTg0OUQxNkQ3RjREMUMKLToxMDk4RjAwMEM3M0QxNjczMUI5RDQzQTlEOTY1NEJDNEZBQzkwMkM2NUYKLToxMDk5MDAwMEZENzZCODBFQzRGREI1RDQ4MzJGMkQ5Q0VGNUYzRUFGMUUKLToxMDk5MTAwMEQxN0IzNjVGNkE4Q0JFRTdEMDU1REMyMEUzNEZEMDNGNjkKLToxMDk5MjAwMEFFNzdDNzYyQjhGQ0VCQTJBRTk3RTE0RDFEOTQxREY2NzEKLToxMDk5MzAwMENGNUY5QTAyNDNFMkIzQzk3RjNGODNFQkIxOTQ3ODFGQjQKLToxMDk5NDAwMDE4ODhFN0Y1NUVEMDVDNEIwMTk3MkZCQjA1MzJGODM5REMKLToxMDk5NTAwMDgxMEUzRkMwN0U4QTA5RDcwOTFGQjRGMEJBOUQzMURFNUYKLToxMDk5NjAwMDk1RUJFODBBNEY5Qjk1Rjk3MTNGNEIyQjdBRjU3QjhDNzEKLToxMDk5NzAwMDQzQ0VDNUQ3OUIzQTA0RThCMjE0NTk4NDc1QzkxMjhGRjcKLToxMDk5ODAwMEIzMzMzQzk2ODlFN0VGRkY4MUU3RTNGRTlFOENDRTA1N0IKLToxMDk5OTAwMDE5RTlBOTM5Rjg3M0JBQUFBRkRBQTIzOTNFRDI0RjQ5MDgKLToxMDk5QTAwMDNDQ0ZDNThCRjNFQkFEQkM0QzVFNjcxNEY4MzFFNkM4MTkKLToxMDk5QjAwMDczQzBGM0NERTY2ODE3RUE2Qjg1RDlGQjY3RDQ3MzU5OUEKLToxMDk5QzAwMDdGOTM3OUYxRkVDQzJGQzgxRkIwQjM0QjdCRjBGM0M3NjgKLToxMDk5RDAwMEMxQUVGQzcwNkI0NzNFOUUxNUY2OTNCMjhFQzU4QTNCQjYKLToxMDk5RTAwMEFGNDc3QUVDMEVCMjVGNTM5OThCRkM0NTFGNzY0NEQyOTkKLToxMDk5RjAwMDhCRUE1ODNBRUUxMDUyOURENzRCRUJCMEExQkQ4NjM2OUMKLToxMDlBMDAwMDBBRUIyOEU0MkYwMzI0QUYzMTg4MTdBRDJCODQxNTExRkUKLToxMDlBMTAwMEI2M0EyNjlFRTgzMEZDMzAyMzNCM0QxQ0Q3MDBFQkRERjgKLToxMDlBMjAwMEY5MzEwQkUwNzlBQUU2MzNEMzRCRTNBMDdGRTdENzY2QTEKLToxMDlBMzAwMENBODMxRThGNzkyMTFEQkYyM0IxRjNFNEZCRTk1OEVGRTAKLToxMDlBNDAwMEE5M0ZCMzg1RTAyMUFENjM0RkYyRkFEOTkxMTkzOERGMTAKLToxMDlBNTAwMEY2RDM1NkE3OERFMjgwREI4OTBFQjI0RUI5OUQzMTE3NDEKLToxMDlBNjAwMEVFODMxNjdEMTg0QkVGMTkxNzFFNkE4QzIxQkE4OUJBM0UKLToxMDlBNzAwMDVBQjE1ODc3RjE2OTVFMEZEOTg1QzAzMEM4MDNEQUFDQTYKLToxMDlBODAwMDJDMTgxMTJGNUIxQzJBNUNDNDIyRTA0QzdDMjRDMDExRDIKLToxMDlBOTAwMDc1OEU0QkNEMUZFRDdENDQ1RDZEMjgxQjFBNTk1NzYzQTQKLToxMDlBQTAwMEVEODk5REJFNEY2NURDNDcyQ0QwMzhERTlGRTY3OUJBNDQKLToxMDlBQjAwMEY1QTEzQURCNTQ5REQzRkI0NzFERTk3NTc1NkMyMDBENkMKLToxMDlBQzAwMEUzREJFNjVCMzdBNDYxQkNGQjc4Q0M4RjQ0QzcyNzdFMjEKLToxMDlBRDAwMEIwQTYyMTVEMUI0NkZEMjdGOTkxMDZCODM3ODRGOUFGODIKLToxMDlBRTAwMDM5MTBDNUE4RkVCNTkwRUE2QjU3MEIzRkZCQzREOTRGQTAKLToxMDlBRjAwMDU4MkFEMEIzQTE4ODkxRkY2NEMyMEZDQkZFODZCM0E3Q0EKLToxMDlCMDAwMEU2MjMzRkNGMTREQjlENjgxNzcyNDUzREI0RkVBQUZGRTQKLToxMDlCMTAwMDlCREExMjQxOEY5RDEwNTcwNzgxQzFEQjIxQUUwRTQyQTcKLToxMDlCMjAwMEVDQkYwREUyNkE4NEYxQkQ1MzZDMzc0MzVDOEQ2RDAwNzAKLToxMDlCMzAwMEUyNkE2QzlGODJCODFBQzc2MTVDOERFRDEzMTA1NzYzOUYKLToxMDlCNDAwMEJCMDZFMjZBNkMxRjgzQjgxQUM3M0QwQTcxMzVCNjBGQUYKLToxMDlCNTAwMDQzNUM4REQ3MUJDRUNFMkEyNTdDMEUzMzdBQkY3RTQ5M0YKLToxMDlCNjAwMDRDQkMwOUVEMkJFMDFGOEQ3NUExQjdERDgzQTI5MTFFQzIKLToxMDlCNzAwMDU3OUQzNjI5RkMyRDZFOEQ1NkUwRTFDNzEzQzNGQzQ1NzkKLToxMDlCODAwMEZFMUZCOTVDRTkxRjcyMjg0QkU5Q0ZGNEY3NTVFMDJCQjMKLToxMDlCOTAwMEVBMDYyOTMwRDY4NzIyRUY0RjlGNUZBMkMwNjlERTA5MEYKLToxMDlCQTAwMENBRjhDQjJBQTcyQTcwOEFFNzA2NjU3QzUyRDkyQ0E1NjkKLToxMDlCQjAwMEZGQTE3ODAzMUYwM0Q1MjY5NThGRkNGQjBBNjc4QTYzRjQKLToxMDlCQzAwMEU5N0M2NTU3NzJGQUIwRTA4Qjg0MUZGOTg1NUVEOTU5M0MKLToxMDlCRDAwMERENzY2RTFGQjk1RkNGRjM4MUNCMDU2RThCRkEzODQ5MDYKLToxMDlCRTAwMDNFRjcxRDFERkE4N0RDMDJFNDg3ODk2RjlCQkFEQjYyQjIKLToxMDlCRjAwMDdBMDE1RjcyMUYzMTMxM0M1NzQ4MjcwRTAwM0Y4N0I4MEEKLToxMDlDMDAwMEVGOTE5MjUzMzEyODk3N0JDQkFENTFDODlGRERFRTkyRjcKLToxMDlDMTAwMDY4ODQ5Nzk0NUJEMzIyRTVBODIxRDMzQjg4REU1M0YwNzgKLToxMDlDMjAwMEYyRjVDOUZCMUYyQTk5N0FERTdERjQ4NzUxRkU3QTlGRUYKLToxMDlDMzAwMEE3N0ZDMjgyMkNENDg3NzNFOEM4RTZEMzdFNkQ5ODhFNDYKLToxMDlDNDAwMDUzRTlGQjRFQ0MzQjVGQzFERkE4MTcwQzM3RTlEM0YwREIKLToxMDlDNTAwMEI5NzY5NTlFRUVBQ0ZCOTAwRTRGM0M2QUE2NzM1ODFERUMKLToxMDlDNjAwMEYzODlGQkU1N0M2M0Y0QjMzMTJERjlFN0UyQkZEQkNEOEIKLToxMDlDNzAwMEM3NDNGQzFCODU3NDgxNjcyOUY4MjVCQTlDQTM5MDNFRDUKLToxMDlDODAwMEJGMTFGQUY2NkY0MkRGMUUxNzdDQzUzQzE2NjFFNkUwOTUKLToxMDlDOTAwMEY3NDlCRTM1Q0M3Rjc4N0MyRUVBNEQxMUM3NkJERDM1OTgKLToxMDlDQTAwMDBGNkI2ODZFOTI5OEFCREUxMTQxRDc0NzA1MUU0Rjg5NDYKLToxMDlDQjAwMDc1QURDNTc5MDE0RUI5QzZBRDIxRkQzMkVBM0MxQUVBNEYKLToxMDlDQzAwMERCMTVGN0I0MTBGQzg0RDBFRjFFQjU2RDc0QkRFNzFEMzUKLToxMDlDRDAwMDQxNkEyRjlGMUZBMkZFMzFGQTczQjQ4RTBFM0FCODU0MTgKLToxMDlDRTAwMDNBMUFGOTE0MTBFQjkxRjM4NkVGN0ZGMTAwQ0FEQjE5RjEKLToxMDlDRjAwMDM3QzczRkRFMUZFQjQ2N0YxMUVGNzdCODc4RUIxNEFEMjcKLToxMDlEMDAwMENCODU3NjNGREVFRjE2NzA2RDNFQzJEQkM0QkFFMkZENTYKLToxMDlEMTAwMDdFODIwMzYyNUQwREYzOTMwRjZDNzA4NjlGQzc5QzM1NDYKLToxMDlEMjAwMEE2NDg3RkQzOTUzQzZEMTVGNERGMkNFODY0QkM2RjlCOEYKLToxMDlEMzAwMEE1NzZCMEEzMTNCRDkyQURGNEE3NDU0NzRDMDZCQjEzNUYKLToxMDlENDAwMEFERThGRDAxRkM4NUZCODE3N0M4MEZGODNEQkFEOEJGQUYKLToxMDlENTAwMDIyM0E0RUVCQzg5N0FBNDg5RTU2QzdEQ0Y0MDZFNkRCQ0IKLToxMDlENjAwMEQ3MUNEMjE5RjdCNzkzNUY0MTdCRjlFRTc4MUJGOUQzNzMKLToxMDlENzAwMEU2RjFFMzdBNDZDQTVEOTM1OEM3NTY0MUY3NjE3RUY3MkMKLToxMDlEODAwMEQxM0I2MEZDNDQ4RjhERUFGMTQzOTlCQkU3OUQzMERGMDYKLToxMDlEOTAwMDg0NDlCQTJCMDhGMzFERUFGMDI3OUUxODdFREU4MUZCNkEKLToxMDlEQTAwMDkzQTk2MjBEN0IyNjREQkIxRjlGRkZFRTIxQjAwQkNFMEEKLToxMDlEQjAwMDMwOUVCMjdGNzNEOUI0ODlGRDkwOEYyMUNFQzdBRUU4QjMKLToxMDlEQzAwMEYzOUFFMEQ3MkIwMkFGQkQ4MjVGQ0Q0MkJFNzcwQjdGMDcKLToxMDlERDAwMEIyNTNGODkzRURFODRGNkNDOEU3MjJCMTFFRUU0RjM2NTAKLToxMDlERTAwMDBCN0YxMjQyN0YwMkVENUJDMjlGQkM4OUZFMDREQTgyQzgKLToxMDlERjAwMEYxRDlBM0M5NkVEQTM1RTE0RjIwNDFBMUYzMDQ4Qjk0NjgKLToxMDlFMDAwMDc1NDlCQ0NBN0FFODBBQkZDNjI2QzcyOEZDMUExRDlCM0EKLToxMDlFMTAwMEE0RjQ5Nzk4RDMxNUQ4N0QzNjRCODFBRjNBREREN0UwQkYKLToxMDlFMjAwMEE3NTRCRjMyRkNGODcwODM5RjJBNTFFMDIxODcyNjI4NkYKLToxMDlFMzAwMEY3NTdCOEE3MjlGRDUzOEE2NjI4RkRFNUFFRDk0QTNGRjIKLToxMDlFNDAwMDEzRkI2MTg1RkM3NzU2MThCRDU2QTczQzU3RUMzQkM5MDAKLToxMDlFNTAwMDc4RUFERDMyOURGNjZEODZCREE3QkIyMkY1QjY5MDc1MUEKLToxMDlFNjAwMEVDOTM5OTcwOUYwQ0MyMTdBNzU5Q0U5N0E1RjQ1MzFDNzkKLToxMDlFNzAwMDc1QzhFMjQ5QzdGMzdCRjUxNTIwODdEMDE2MUY4MjM4RDUKLToxMDlFODAwMDhEOEE4RjIwRDcxMEY3MTY3QUM2NTExQzA4RjFEMjYwNDAKLToxMDlFOTAwMEUyNDMxQkRGNkY5MkZCNTZDMzBDRkI0RjEzRjJENUZENjEKLToxMDlFQTAwMEE5QzIwQkVDNEY4REU4REI0NTVDRDYyQkU5QTJFMjMyNzAKLToxMDlFQjAwMEQwMkY4QUJGMUU4RkI5NjkyRkNBQ0RCNjBGMjE0RUM1Q0MKLToxMDlFQzAwMDM4RjdDMzlGNTNGQzI1RTNCNkFEOUZGRDlDRTJEQkFEQTUKLToxMDlFRDAwMDFERkFFMjU1RjRBNTUwRThFRDk2NDM1OTREMkRBMDZGQkIKLToxMDlFRTAwMDlCNTMzNTk3MjAzNUU5NEI5MUQ0OTcxNjYxMzdDQjZBNTAKLToxMDlFRjAwMEU4RkExMDcxREY1NjhCMjcwNkUzQkZDRDg3OTc4ODc5ODQKLToxMDlGMDAwMDIzRUMwOEM1RUIxMTc2MDRGMzQ4OTZBOEY2QTdBNjg3QkMKLToxMDlGMTAwMEZCQjMzOEIzMjJDNzMzRDZENzMwREYyMDAzM0NEQzMwNjUKLToxMDlGMjAwMEJFQzQwMDRGMzA4QzlGNkE4MDZGMzA4QzlGQTVGNDM3ODEKLToxMDlGMzAwMEMxQkFDRjE3NkY2RjE2RjY0MThFMkIzNDdCNzQ1NzI3M0IKLToxMDlGNDAwMEY2NzZDODIxRDVCRTMyNEY4RDcyRUVBMUY5RTg1Q0IyMkIKLToxMDlGNTAwMDlCNUI4RUFDMTA3NDlDQUZGMDY3OEY3Q0NFMjFBMDczOUUKLToxMDlGNjAwMEZFQjlGNzk3OThGRDMxRkQ0MTBFNEEwRTlCNURGNUNFODcKLToxMDlGNzAwMDMwRkYyNDlGMThFNkMzMTFGMzk1REE3NTQ1RkY5QTBFNUEKLToxMDlGODAwMDczRkU3NkI1Q0U1REMyM0VFRjEwN0VFNjY1NDNGQ0E2NUQKLToxMDlGOTAwMEZGNzBGQUREMjkyMDNGNUI1QTRDOTQ1RjZEMzkzNDM1RjAKLToxMDlGQTAwMDA5RTdEQjdENzYwRUUxREI3NEQ4NDRFRjkxQURGRkUzOEEKLToxMDlGQjAwMEE0NkJGMTdENDU4OTlGQzRBN0YwQkQyNTMxQjhDRjdBNDgKLToxMDlGQzAwMEE2QzU0NEY2QUZEMEUyNDk3Mjc0NDI3N0EzN0M3NTM1REEKLToxMDlGRDAwMEFGOTQ1QjA4QTA5MjkwMkVCQkMxMEZEMUI5NjE2MTRGQzUKLToxMDlGRTAwMDI1NURGNjFDN0Q4Q0U4QkVFREYwRTIyNEE0RkJENUVERUEKLToxMDlGRjAwMDI2ODUyRTIzREJENDc4N0RDNDg5NDQwNTFFRkEzMThGNTMKLToxMEEwMDAwMDA3QzFFRjJBRjRCRDEwREU0NkJEQzA5RDExMTVCRTVDMzAKLToxMEEwMTAwMDFEN0Y5MUYxQzA3NkMxQTc2RDgyNEZEQkEzNUM5NTlEM0EKLToxMEEwMjAwMEVENkI2QzNCNjY5RDFGRjk1RDg1NEZGQkYyQkFEMUE3QzYKLToxMEEwMzAwMDdENzlGRDZEMzNGMDExRURFQzk5RTMyNkIyQjMyMzFDNkQKLToxMEEwNDAwMDhEN0E2RDI3RkMyODZFMzUxOUZDODQxQTM3NUM2QUJFNDAKLToxMEEwNTAwMDdBQUNBRkQ4RUYzNEQ4QzVBRUVFOTc3NkIxNDQ3RTNGMzgKLToxMEEwNjAwMDI1NzQ0REE3RTc2M0MzN0MxMEU3MkEwREY0OTQ3MUY0QkYKLToxMEEwNzAwMDg1RjkyNkNGQTMxQkY4RDdDNUZERTE3OUZDQzY3Q0ZBOEMKLToxMEEwODAwMEJGRkE2MkZEQTVBNTgyRkNDREVBOThCNzg0M0Q3RjhCMUYKLToxMEEwOTAwMEVDRjkzQkRGMEI3QkZFN0Q3NzhBOTMwRThFQkZBQzI3RkUKLToxMEEwQTAwMEVBRDFDMTBFM0JDRUUyMjJFREI4M0MwRjE5NkE3RDI3MDIKLToxMEEwQjAwMDI2MzJDRUY3MDg3OURDRTk3RTc3RTIwMEU0NjcyRkZERUYKLToxMEEwQzAwMDdGMzRERTc5NEJDNDNCNkY2MkJDRDMxQkY3ODE3OEJDMTUKLToxMEEwRDAwMDczQzAzRDlCQzczQkE5MUE3RDJGNjY0OUNDNTU2NjZGNUYKLToxMEEwRTAwMDI3NzJGQUJGM0RDRTk5NTJBNEM2MzlFNTJFMzVDRTkxREUKLToxMEEwRjAwMEZCMDdCQjFEMUE5REMzOUE5OEE3QzYzREJCRjExN0FDQzEKLToxMEExMDAwMDMzRDlCNTAwQkVDN0I1REQzREVEQkM3NjM4MjhGNEZCQ0MKLToxMEExMTAwMDgwRTBDRjZCQzIwRUJGMjJGMjg2MUQ0ODdGRTI0Qjk5RDIKLToxMEExMjAwMEUwMEJBRjU3MTQ5Rjc2QzVCQTlDQzg5RkY5M0MyRkNCNjQKLToxMEExMzAwMEFCQTE3QzdBQTRGNEVGQkU1QTFBN0ZGMENDQUNEM0Y4NzIKLToxMEExNDAwMDdFRkY2RTQ3MENENTU5NzYyMzNFQjA4NDgzMTZFRjY5QTcKLToxMEExNTAwMEZDN0VDNTZFQjdFNjVDRDI0OTVFM0ZBMjREQjUwMzMyQzgKLToxMEExNjAwMDRFOTA3MkI5QkJGNTEzOTJDQjVERURFN0Y3QTdEMjdFQTcKLToxMEExNzAwMEM5NzFBRkIxOTc0QTkxM0U1N0I1MzI4Njc5QzM4NUVDMjQKLToxMEExODAwMDhGRDEyRjVFRTgzOUM2RjEyM0NDOEQ3QTY3N0VDN0Y4NzAKLToxMEExOTAwMDFDNEY3QjUwQzdGM0NGM0JEQjQyNDlCODVERTcwOTFFM0MKLToxMEExQTAwMEQwRjEzREYwRTJCNjIwRTFCQkNGQUQzOUY0NEMxQTU3MDcKLToxMEExQjAwMDhBRTdBMjVGM0JGQkNFNDRCQ0JFRUJCNEQ5NjRBMzdENkYKLToxMEExQzAwMDI2MDdFOTZEQjFEMENGMzdDRjlBNjI1RDQ0NUY5REY2MjcKLToxMEExRDAwMDM5ODI2RDlGREM4RkZBRUFCN0VCRjRCRUM4RUVCMzgzMjkKLToxMEExRTAwMDkyMjNFOUI2RUE0QTlERUNDOUY2RDEzNjEzRDY5N0I3NjEKLToxMEExRjAwMDlGMzY4QkYzRDY0MThBMUY3NkI0NjdDNTYyQkJERDBERUYKLToxMEEyMDAwMEZBNDNGNjIyNDRGNDdGRUM0QTA3RERCNzEzRTZFMzc2MUYKLToxMEEyMTAwMEMyNDk3ODQ4MzkwODlFMzY5NTc1RjZCRDlEQzdBRUU0QUIKLToxMEEyMjAwMEVGRDE4RjM4RkJENzE4QTRDRkFCQTdGN0M0QTBCRERBMDYKLToxMEEyMzAwMEQ1QzY5RjMzRTI5RTk2MThDQzMzREY2ODM3QzVGMUJBOTYKLToxMEEyNDAwMENBRTA2NEJDREUzQ0U2REVEODQxQjhBRTM2MTNERkJGMDAKLToxMEEyNTAwMDExNzE4RDdDREVFRUQxRjNBODlFQkZCQjhERTc2MUJCOTMKLToxMEEyNjAwMDRGRjNGQUQxRjYwMDNGQjdDNjg0MUQ5M0UzQjc5RjlFMjQKLToxMEEyNzAwMDNBQjExRkQ2MEYwMjE2MUEzRjgyMDU1NkM0QzNCODU3MEIKLToxMEEyODAwMDUyQjY1RTQ5RTc2QkZDRDUyQ0QyRUU5NTNBRDQzOEE3OEUKLToxMEEyOTAwMEE0Q0RFMDlGQkNENUE0MDc5MjBGMDdCRjlEN0E0RDA1QzIKLToxMEEyQTAwMDlEQUZFNzc2NzJCQzU5QjUyRkJCNEUyRjQ5OUU4QUNGMjIKLToxMEEyQjAwMDhGRTVDRjY3MDE3RUJGQ0NDRkYwQzcxQ0YxREQ5NUZBRUIKLToxMEEyQzAwMDMxRDc0RDJCQzdGOTM2RjM3MzY2MjM2MjU1N0I3NjcwMTEKLToxMEEyRDAwMEQ0RUNERjJFQzRGM0ZGOUI2MkM4Q0Y2RUM3RjVFM0ZDNUUKLToxMEEyRTAwMDg3MThENUNGNzY5NzNENTIxQThGNzVFQjU2RTZFMjcxRjcKLToxMEEyRjAwMDlDNkFENzRCQ0Y2Q0RBMUIwRkUzREY1OUFGMTE3REM3RDgKLToxMEEzMDAwMEU1QTlFQkRERTlDRUZFMzVFNkMxNjc1QTM5N0Q2NTNENEQKLToxMEEzMTAwMDQ5RUFFNTlFRDZDNDFCQzkzRThEODZCQjgxOEVFRjk0NkIKLToxMEEzMjAwMEJENDQ3NUVDNUIwM0VBM0M0MzM3QzYyODc4MkY2QzQ5ODMKLToxMEEzMzAwMDM0RTQ2RjZBN0QxQ0UyNEQ1OTFGODgyRDFGMTJDRURGNTkKLToxMEEzNDAwMDBBREI3OTdEN0RFODBGNTMwNzA3MDFERkUyRDFGQ0ZDRDIKLToxMEEzNTAwMEJDQjEyRTNFREU2QzUzRTMyQzQzNURCQ0QwNTgxNzM3QTYKLToxMEEzNjAwMEZBNzMxMThGMEQxMUZCMUFFN0M0M0ZDMkNGQzk3QUMzMkMKLToxMEEzNzAwMDM2NEI3MDg2RTcxMkUyODc2MTY2NDg1REU4NUNBRjM3NkUKLToxMEEzODAwMEE5MDBFOEZGQjI4ODJGODc1OTFCN0U5NjA2QUFCMjU1MEUKLToxMEEzOTAwMEY3OEY2MDExNzEwMTczRjg1OUYyOTA3MDdFM0JGQ0I4MzEKLToxMEEzQTAwMDlBMEYxNDFENTFFNTEyRjJDN0NGMzE5RjVDODk3QjlBMzkKLToxMEEzQjAwMEE0MDc3RTdFMkVFMjIyRTM4Q0Q1MzFGRDlCNUE4MEFGMkUKLToxMEEzQzAwMDQzMEYzMUIxREZGMTdGRjZBMjVDMzU3RDI2RjczMzIwRjQKLToxMEEzRDAwMEY0RTg4RUZCRjM4Q0UyRURFNkNGQUMyNDc3NUJDNjcwM0QKLToxMEEzRTAwMDNGMjVFMzE0Qjk0RjczMEQ2QjU5NTZBQUUxQjk2Q0ZCQzUKLToxMEEzRjAwMEYyMTZBMEU3QTY4MzczRDMxN0MxRkNFRjdENDREQjlENjMKLToxMEE0MDAwMDZDNEJBMUZDM0U3RDgzOTI1RjBFOTU3NUE4MjMyNjdGNDEKLToxMEE0MTAwMDUyMDFDNkVCMzY0NUFGNjU3RkQzOTEyNTMxRjg3RDkxNkEKLToxMEE0MjAwMDMzMjExM0M5NjlGMzg3NTY4NjdGMUZBMDY5ODc4REY2OEMKLToxMEE0MzAwMDczOUEwRTVCNjlCRjY1REIwRUFFMjdCMkVFMkNFM0ZDQjAKLToxMEE0NDAwMEQ3ODUzRERGMkZFMkRFNTc0NURDQjI0RkM0MkQ3QjQ0N0MKLToxMEE0NTAwMERDMTIxNDcxQ0IyRTExQjdFQzEwNzFDQkNCQzI2RjZFMjYKLToxMEE0NjAwMDNBMjJGNEVGOUU5ODAwRkY4RTJEQUZDQjRBM0M2RkVFNjAKLToxMEE0NzAwMERENzJENDBDMEJBRUY5NjhDODlBMjA0MzdGQUVFQUM5RUUKLToxMEE0ODAwMDc4QTdBQTI3RTM1MjU1RkIzMUM2OTFBRThDMkZCNTY3NEEKLToxMEE0OTAwMDJCRkRBM0Q4OTU0QUZGRDVFRDgzMENGOUM4NzA0MzNFMzgKLToxMEE0QTAwMDUyNjI4ODQ3MjZBQTdBNzkyODIyREZBNUZDNUFDRDc3RkUKLToxMEE0QjAwMEFGOERDQzc3MzM5MTRGM0MwRkRDRDZGMjMwRjE3MURCQUUKLToxMEE0QzAwMEYxQUM4NEM4QjhFQzY1QTEzN0RCOEU3M0ZGRkNGMjg5NzAKLToxMEE0RDAwMDUzNzE5REM1NkQyNzA0M0ZCRTE0RkM2ODE1NzE4QTI3MTIKLToxMEE0RTAwMENEN0Q3RDdFMEFFNjE1QTdBQzc4RUVBMzJCNzk5NkY3OTUKLToxMEE0RjAwMENCRkI0RTA0M0U4RDhGRjQ3RjlGNTFEMjE4ODZCRkRFN0EKLToxMEE1MDAwMEYyOTc1Q0FBOUY1Q0E0N0UyQzhERTNFN0RDMzY2QkQxQ0UKLToxMEE1MTAwMEY0RkVGRDg1REU2QkE5Q0JDRjEyRTc5MjZBMDdGMDdERDIKLToxMEE1MjAwMEQxREFBMUQ4NkVCMDc4RDJGMUZEQTdDRDlBNjcwNkRBNUMKLToxMEE1MzAwMDcxRkY2RkFDOURGRTNEMDk1RkJFM0NEN0M0OUFEMDNGMTIKLToxMEE1NDAwMEYwMjNDOUYwRjM5QzY2NDZGOThBMTJFMEQzQ0NFQjQzQzIKLToxMEE1NTAwMEZBRDgzMTVGODc0MTdBQUM4N0UxQkEzNjU5NTgxM0ZBOTUKLToxMEE1NjAwMDc5RTY2NjRFNDc3N0M2NTUwODlFNzNBQTlGNzczOThFNUYKLToxMEE1NzAwMEQ3NDI3Q0ZGMThEQzJCN0RFRjAzOEY2NkUxNzdCN0IwMDUKLToxMEE1ODAwMEM1N0QzMjlCOURCRjc3NjBDOUY3REU5RjVGQzhCRjY3RkYKLToxMEE1OTAwMDlCMzAwOEU3MkRDOUU2RkJBODQxQjJERjMzQzRCQ0E2NTcKLToxMEE1QTAwMDk4MUQzREM5OUY3NjY1NTcwRDc5MkVBQjU2REY0NzMxMTMKLToxMEE1QjAwMENBNEI5M0IwQjMyRjY3N0E2Njc0RjYxRDhDNjdGM0Y5QjQKLToxMEE1QzAwMEI5OTA2RDVGNENENkYxQjkwNUY2NzgzN0ZGMkVBNDVCRDQKLToxMEE1RDAwMEM3RjdDMDVFRkU3MjQyQ0NDQzRFRTQyQ0Q4N0ZFNkIzMDcKLToxMEE1RTAwMEY5MTE3MjUwMTBBQUQ1QzVERkE5MzBBOUY1MkQ1MzEwNjUKLToxMEE1RjAwMEY5N0QyNkQ2NEE3QTNEMUMxNzlDNzhFRTdDMjM0RUE4MUUKLToxMEE2MDAwMDcxREVCMDE2MzVGRjBGRUZFRjM3Njg3OERFQUM0MzlFOTIKLToxMEE2MTAwMDkwMjFDOEZGODNGQzdCMUExNzkyMjdFM0JFRkQwN0Y5NDAKLToxMEE2MjAwMEYyQkNBNEY3MkY3ODhFNTg0Rjg4QTVGMzM1OUIwRURBMkQKLToxMEE2MzAwMEQ3NjExQzY5QUNGN0JERkQxRUI3RTM0NkZDOUJERjlCRjEKLToxMEE2NDAwMDlFOEVGMUQ3RTY5MUQ3QTVBMzFFNkY0MTAzNEZERkYzOEUKLToxMEE2NTAwMDU5MzRERDFEMDlFM0ZBNjNEMURFMzNGRTlEMkQ3RkY1MEMKLToxMEE2NjAwMDc0M0MyRkIzNjVCQzg0MTdGMkYxQTNGOEY4Rjc5RjdCMTUKLToxMEE2NzAwMEVCMzFGQzFFRDg5NjFCNDUzRjdCODA4Rjk3QjBCRjY2QTEKLToxMEE2ODAwMEZBMjhFQ0I3OTgwOEFFNzgxRUM2NDM3RjdCNUZGNzA3QzEKLToxMEE2OTAwMDI0NkZGOUVFQzMyOEE3MUI1MDc3MDAxRUQ1RDdGRDExRjQKLToxMEE2QTAwMDVFRkYwMDY1MENBRUJGRERDNzdEMjQxMjhFRUZFMzNFN0EKLToxMEE2QjAwMDE2MDk2RkVFRjAyRjZEQjE5MUZCQzc1MjBFREYzRTNDRDUKLToxMEE2QzAwMDU1RjgxRENFRjcyOTMyQUYyOUJFQjgzQUZGOUY4NTlDQjkKLToxMEE2RDAwMEJFMjFFQ0Q1MDFFMTNGNUUxM0ZFRTMxNUY0MUY5NDBGOUMKLToxMEE2RTAwMDczRkZEMTJDRjY4RDc3MEJGRkIxNTNFNEJERTFCQ0NCRUEKLToxMEE2RjAwMDIzRTI4QjRBOTEwRkYzM0NBQzYwNjQyOUNGN0IxREIyRkYKLToxMEE3MDAwMENFOUY2MUVFMkMxRjlBNUNBMEM2ODk5M0YyNTVCRjMyOTIKLToxMEE3MTAwMEExNTc5MjIyQTc2NTNERDIwRDc5NzJCNjIxNEY1NkZEMDEKLToxMEE3MjAwMDRBODk3OUIwMjE0RjFFNkVDODkzRDVCQ0I3Qjg3NTgyREYKLToxMEE3MzAwMDIxNEY5RUFBOENGRjIwREYyOUY2OTE2RTMwRTRDQkIzMjcKLToxMEE3NDAwMDk0NzE2MTNFQUFGQjM2NjE3RUNERUU5NDhGNUI4QTY3ODEKLToxMEE3NTAwMERGRkZCRjhCOEY5REVGRDdGQ0ZGQzdDNzdGNTAxRjYzMDUKLToxMEE3NjAwMDREQ0FGRThEQjE3RDUzRjhGRkQ3ODVERkQ4MkZFMjgwMkIKLToxMEE3NzAwMDU3NDU5RDYzOUY4OEU3RjYyMDFGN0I2MzVDRTcxMjcxNTYKLToxMEE3ODAwMDFEM0ZDNzIxRUIyMDJGOEIzQTU0OTMzOEM3QjE0NUVDQkUKLToxMEE3OTAwMEJCNkQxMjc1QThBNUM1REZGMTczMUM2Nzk5RTBFMzVCN0IKLToxMEE3QTAwMDlERjJCMURDQTVDNjc5MTNGMzU0M0U4RTc3MjYxOUUyRUIKLToxMEE3QjAwMDNFMzVDRTFCRTM1MEUzQkM1MkJCQ0FDNzUxNkNCMDIxM0YKLToxMEE3QzAwMEVFNTNGOTM4QjJBREM0MTBGNzREMzBGODI5RjUxQzA3MzcKLToxMEE3RDAwMEM0MDVBQkZBMTVFMjdCMDlFQTc5OEVDMjkwN0E5RUMzNzIKLToxMEE3RTAwMEU4REZFNUZCOEEzMjZFRTg4ODEzN0NFQTNFRjMyNkY0NjQKLToxMEE3RjAwMEExQjg1Rjk0NjZFNURGREIzMDdCMkZDN0I4NDNEMkVCQUYKLToxMEE4MDAwMEI3RkRCODNGREZGMjk3OUI4ODlFODVFOENGM0JGMURGMkQKLToxMEE4MTAwMDFCRkFGMUI4Njg0MzNGNUU5N0MwRjcyM0EzMDc2MTc5M0QKLToxMEE4MjAwMEQzQ0ZFMzlGODQ0OTBFN0VBRThBODVGMEZCNTNFNzg5NDAKLToxMEE4MzAwMDlCMzZGNDRCMDlDNzRCNjY0NzJEQzMzODQyQjc5OUZDOEEKLToxMEE4NDAwMEY4RkQ1REE2REJFOURDREREQjVEQzQ1MUM3RkE2NUNBNTYKLToxMEE4NTAwMEVGOUY2QTM4RUY1RkM0QkM1QUYxNkIxNDU3OURFQUU3NkIKLToxMEE4NjAwMDZFQTRGOTRCNUQ2RDU4MTdERkZDQTFENTU1OEZGMjFDMTYKLToxMEE4NzAwMEM1QkY4MzYyOENCNzVFRUY5N0NCRkY3RThGQTAxRjlFMTQKLToxMEE4ODAwMEZGRkYzOUZBNEJGQzUwMkNGOURGMTZENTdGNjIyMDAxMEYKLToxMEE4OTAwMEYzNkM4OEU2RjA5QkZEM0U5RThFREYxNzk0RkVGQUZEN0EKLToxMEE4QTAwMEU3NEY5MTNGQ0Q4REJEN0MzNkU2Q0JEQTFBN0YyMkRGQjQKLToxMEE4QjAwMEFGMEM5MjdFMTlFM0I2MkVFMzVGNDM5Qzc2MjRDRkZENjYKLToxMEE4QzAwMDA2QUVFQjFCRTE5NzczRjE5MzUyODNCQUJFN0Y0M0I0OUMKLToxMEE4RDAwMEU3MzZGRTNEMThCNzhFQ0Y5NTc0OTJGREZCMDRERjVGMUYKLToxMEE4RTAwMDE3RjM3NUQwNDVDQTE1N0U5RjI2MzFFMjNENTgwM0ZFMDkKLToxMEE4RjAwMDkyNUUyQjBFRUUwREUxMTFDNjRCNUQ4RjVDNDcyN0YyODkKLToxMEE5MDAwMEUzQjk0MERDRkQ0RDY3RjJDMzI2QjlDNDdCQkE5REM3RUQKLToxMEE5MTAwMDdEMTYxMTQ3NDZGMjdGMzhBRDJCMjBEN0NGQzYwQ0MyMkIKLToxMEE5MjAwMEY3NUZFNDdCRUJEQzFFQ0E3NzY2MTIxRDBEOEU0Q0QwMDAKLToxMEE5MzAwMEEzOUIwRUU5NzRDRTgxODk3RDcwNzMwNzNGOEIzNUY0M0MKLToxMEE5NDAwMDMzRTZCMTFBNEI4QUE4QkIxQUY3MTM4REY1MDNFM0I5QTYKLToxMEE5NTAwMEIyRTJENkNCMTVGOEFBRDNFQUI5MzJGN0Q5QkVFN0Y1RjkKLToxMEE5NjAwMDJCQTM2MzQ3MThGQzUyQTlDMTZGNEQzNEY4QjU2OTA2OTMKLToxMEE5NzAwMEJGQTdENkM1Q0RDQzJDQkYzMzI0RjZFQjM1Mjc3RTdGQzEKLToxMEE5ODAwMEM3Q0MyOTE0RDkyRkJFMDNDNEU5QkRBQzBCRkQ5NUU3OTQKLToxMEE5OTAwMDY3NEZGNTczMTJERDNCRjQ2MzJENzM3MkZFRjk5NUY3ODMKLToxMEE5QTAwMDRDRjQ1ODJGRjFGOUExMjFEMjhGQjkyOEVGQjUwNjg3QzEKLToxMEE5QjAwMEQxRjczQ0FEMkVGNUVGMzMwNDdDRjY4RjQ2RTdFMDdCMTQKLToxMEE5QzAwMDM2OENEQUE3N0M4RThGNDZEM0ZCMzhBOUQ0M0VFMTczNTAKLToxMEE5RDAwMEQyRjUzNUJFM0M2QTFGRjNCOUU4RkFBM0JFMjI2QTFGNUUKLToxMEE5RTAwMEY2QjlBOTZERjA5NTUxRkI4MENGNDNFMzU2RjkyQTA5REEKLToxMEE5RjAwMDVFRTlGMzUyOUIwNUUxMERGRUJEODEyQzNGNzMwMUM2NUMKLToxMEFBMDAwMDJDN0IyNTNDMkY4MkNFOTk3RUMwMjM4MjhFNTdENDM5NTEKLToxMEFBMTAwMDE0Qjg2NzZEQUEzMjNFN0RCRTUzRTk0RkYzRTYyOUZEQjcKLToxMEFBMjAwMDk3NTVCQTE0MzhDNTUzQTQ4QzRGMkE3MzJCNzAzNzc3QjcKLToxMEFBMzAwMDk5MzIzRUNFRTU1MUUwOThCQzRBNjU3Qzk0RDNBQkY0QTQKLToxMEFBNDAwMEVGQjk2QTc4NDJDQjc5RjRCOUMxRTczRThBNzQ1OEU1MjgKLToxMEFBNTAwMEYzMUNFNTc0MkEzQkNBRTk1MzQ5RUQyREZEQkIxMTdGNzgKLToxMEFBNjAwMDFERTY0NjM3RkE2RDQ3QkU4M0UxRjk3NkFCOURCRkY3MjkKLToxMEFBNzAwMEREQ0RFQ0QwQkE0NUNDREZDRDBERjMyOUY4QzI3QzRBNTAKLToxMEFBODAwMDNFMTdFMEU3ODlGMzNDNDc1NUJDMkI5NUZCNDAwN0M5Q0YKLToxMEFBOTAwMDRGQ0EzODY2OENERTIzMEVGM0IxRkIyRDhFM0YwRjA2QjYKLToxMEFBQTAwMDNDRUUxQkEzMzM3QzZGRTVFMEU4Njk1NDE3QzEyRDRDRTUKLToxMEFBQjAwMEQ2ODkxREZENENDNEE3MzFGREVEOTQyRjRFNzk1NEEzQ0EKLToxMEFBQzAwMEZDMEU1NjUyOEU3NUM0Qjk4N0IyNUQ5MTdGMEY0QUI2OUYKLToxMEFBRDAwMDZGRkY4QTdGNkYyODY2Q0YzNjI3RDZDNUE2MTRDRjRDNjYKLToxMEFBRTAwMDhBOEFDOEZGQTYwNEJGMUY5RDQ2RjMwRDFDMTIwNTc4NzUKLToxMEFBRjAwMDRDNTkzM0QzM0EzQjNGQkMzRTM5NkVFRUEzNkEzQzFBMDUKLToxMEFCMDAwMDk2RkY4MDVEQzRFM0I0NEU2OTlGNTYzOUQ2RDFGNTU1QTIKLToxMEFCMTAwMDc5RTdERkI3MzkyOUQ2RjU4NTg4RDczRTEzRjFEQUE3NkIKLToxMEFCMjAwMDIyRUVGRTU4QzREREM3NDREQzdENDRDNEREMUY4OUI4NzUKLToxMEFCMzAwMEZCQjA4OEJCREYxN0YxREEyMTExQUZCRDIzRTJFRTE1QzAKLToxMEFCNDAwMDIyRUU1RTk1Qjc4RUZFQUVENTk5OEQxQUQzQ0Y3M0JFMjkKLToxMEFCNTAwMDc0QzE3QTc1OURGM0Q3QUFGQjg2NzMxRjU1RTNFRTM5NEUKLToxMEFCNjAwMDBGQThGMURBQUM2NTZBREM3RDczOUQxQUFGREQ1OEFCRDYKLToxMEFCNzAwMEM2NkIzM0U2QUJGNkYxN0E2RkE5MDI1RjU3QTlENkU1NEIKLToxMEFCODAwMEFFRjVBOEZCODY5MjRGRDNDQTU0M0I2OTRCNTVFM0I1NEIKLToxMEFCOTAwMEFFRDZCQjM1Mzg1RUM3QkY0MzgyQ0NGQzM0QzIxRjQ2M0QKLToxMEFCQTAwMDdDMEY1RTM5RUY1OEUwNzA5N0UyN0U0RDIxRjMyQ0M1QTMKLToxMEFCQjAwMEZEOUM5MUE2RDBCQkI4REZDNERFRDdFOTNCOTA0RDc4QjEKLToxMEFCQzAwMEM3MzBEMEQ3MzM0MzI2NEQ3MTQ2RjgxREJGNEFEN0FBQTgKLToxMEFCRDAwMDIzNkE3REU0ODYzQkQ0MzhCOEEyNUFDRDY3QUM2NTZBNTcKLToxMEFCRTAwMDFDRUNFRUExRUVDNzRFMzNGODFEMjZGQ0ExOTVGRkNFNUUKLToxMEFCRjAwMDQ2N0JDRUVGODc0QzMxRDVGNEJFRDJBNUZBMjMyQjMzNUEKLToxMEFDMDAwMDlFMUZFM0ZFODg5RTlCQTVGNDkzM0YzMjBGRTBFNzI0NEUKLToxMEFDMTAwMDg2ODhGNzE0RUFBMzg2QkU4OUZCNzc3QjNFRTRFRjE3QUMKLToxMEFDMjAwMDAwRDk0M0JERTBGRUFCMThBN0I3RDUzRThFQkUxRkI3MTcKLToxMEFDMzAwMEQzQzJERjFCRDg5RDE2RUI1QTAyNUQ1NzlERTVFRjA3ODcKLToxMEFDNDAwMEIwNzYzMzlEMUZGM0UyN0IyMzU5MzhBRjdBN0VBQzMwNjgKLToxMEFDNTAwMDY0NTZDRTk3NTkwREZEOTdBMTRGM0MyRjNFRkMxQ0RENEQKLToxMEFDNjAwMEZGMUMzRUUyMUNDNzAwMzY4MENFNDdCNDc0RkVCRTQxRDYKLToxMEFDNzAwMDQ3MUM2NzkwNTM2OTdGMEE4MjNDM0UyQUU4MzIzRUFBMEQKLToxMEFDODAwMEEyRUY4Qzk5REY2N0Y0OUVCRENERDQ3NkUyMTk3QzNGQUMKLToxMEFDOTAwMEVBNzM1RTg3MURDNUQ0QkNFRDlBNDk2QURFMzZDNjcxN0IKLToxMEFDQTAwMEZFQkM2REJDNTM5NUQ3ODk3OUFBMUQyODc3QTk3NkUwOUIKLToxMEFDQjAwMDlDQjhBNjg1OUY0M0VDMkFBRUYxMENDODkyRUZFOTEwMzAKLToxMEFDQzAwMDdEQTI3MkY2QzVGMDdENEMyRTNGMjNDNDNBMUZCMjdBQTYKLToxMEFDRDAwMEU4RkQ5NTY1M0QxOUYxNjk4NDgzOUY1N0FDQzc3RDFCREQKLToxMEFDRTAwMDNDRkZGNzFFN0ZFRkM1Q0MzQzQ5MDNCMDNEM0U1NjlDNzAKLToxMEFDRjAwMDVGOUNFNEEyRjk1QTM5QkY4QUUwREY0RjU5RTc5RTRGQzMKLToxMEFEMDAwMEI0ODVDQ0NBNzczN0NDMkM4MkJGRDAzRjA3RTVBQjMwQjcKLToxMEFEMTAwMDJDNDdGRjdCRjAxMkU3MjhBNTlDQzUyNjVFNjBGRkNFN0UKLToxMEFEMjAwMEFGQzQ4MUIyMUQxNTcyRUJCODhFNTcxQzdDMUZGNTk1MTAKLToxMEFEMzAwMDUwNkQwOEJGMTNGOTVEMkFBRjUzRENEQjYzQUE5OTdGMUUKLToxMEFENDAwMEI3QzUxRDNCMDZGODMyNTZBQ0JGNDhFQzkzNkRGMUIxNjgKLToxMEFENTAwMDEwQzY3MzlCN0M3NjZBRTVGRUU3OEFENEM1NDlFODM3NUUKLToxMEFENjAwMEI3NjQ3OEQzRjE1Q0UwOTY5NDZFQ0IxOEQ4RTlDRDk2QjEKLToxMEFENzAwMDZFM0QzQTdCOEZBMEQ5MzI5NEZDRUM5NkU2MzQzM0M2MTQKLToxMEFEODAwMEExQTNDQzBFMzNERTM3QUFDNzJDMURFQkIxRTNGMDdEQjcKLToxMEFEOTAwMDkzNjQ4NDE5RUREMzZERjIwNTQzQTNFOTVDQTg5N0NFQzMKLToxMEFEQTAwMDExQzEzQTRBMzE4RTFERUQ5ODQ5N0ZFRkIxRjkzREZDNTIKLToxMEFEQjAwMDlCNEExODFGNzdBQkMyRkJGNkE1RjBGM0Q3MzYwNzNGQzcKLToxMEFEQzAwMERGM0EzNjc5MUVGMUFCQzBDNUJGREY1N0QwMjNENjE1QTkKLToxMEFERDAwMEMwRTk1MkY5Nzc3Q0U2QzMzRkNFMTdFRTI3NDBFRjk1RTYKLToxMEFERTAwMEVGRkIwQzY1MTEzMEYyQ0IwMEFGMzFGMkM3NzAyRTcxNjIKLToxMEFERjAwMEM1NjE3MTdFQUVBNUYzN0Q5QkJGOEFCODYyOEJBODNCMEYKLToxMEFFMDAwMDFDMTE3MUM1NDcyMkFFMzgyOEUyOEExNTg2M0FEMEJCOUMKLToxMEFFMTAwMDIyQUVEODI3RUE0MEFGOEE3QURFN0U1MUNGN0I1REM0NkUKLToxMEFFMjAwMDE1RjJGQ0I1OTQ4QkQ0OTVDQzY5NEI2MEVDQUQ5OTlDMzQKLToxMEFFMzAwMENFNjkyQkI1NDAxOUFDQTM3NDBFODc1M0VCRjhGRUU4MkUKLToxMEFFNDAwMDE1REUwNjRGNDkwMUY2NUI1Q0UzNjAxREE5OTUwRDYzQjUKLToxMEFFNTAwMDcwMUQ2OTU1NkRGNDlFNTJBNUQ3RUE3NDZCRjg3RUQyQzkKLToxMEFFNjAwMDEzRjQ1RTk0N0MyRkVDMTY0RTFBNzZEMzlDQjE2NDdGNUIKLToxMEFFNzAwMDZGRjE4QTczQzc3QTZCMjFDOUQ3QTMxNkZBNEU5MkZDNzkKLToxMEFFODAwMDdFNUNFNTFDRjU3QjRBQjMwQ0Y0QkRDOTAwNUIzNTZFRjYKLToxMEFFOTAwMDQ3NUU5Mzc0MUZDQzA2NDdEMjNENEQ4QzhEQkE0NTlDQkUKLToxMEFFQTAwMEU3QzU5N0FFM0FEMTk3MzU4MkVFOTIyRUNENTc0RDg4QjEKLToxMEFFQjAwMEUzRUJFMEZCQTEzNjMxQ0ZBMUUyMUJFMjcwOUVGNzdBMTMKLToxMEFFQzAwMEYwRjlBNjBBN0QzMENFQjc0QUNFMjdERUE3ODkxNkZDNTgKLToxMEFFRDAwMDdGQThFRkY5Q0Y5REJFRUQ2M0NBMzlEM0I3MDU3RjNBOUUKLToxMEFFRTAwMEU2MkRCOURGODJERkQzQUUwQ0RFRDcxM0Y1MjVGQzVFOEQKLToxMEFFRjAwMDhEM0I4RUJGQkYzMkU5Q0Y5OUMwQTc1NUUyM0QwNDY5QjMKLToxMEFGMDAwMDU3QUYxM0ZBNkI3Q0RFN0JCRUYzQkZCRkYzNUVDOTBDOTkKLToxMEFGMTAwMDBCN0UwRkZEREFFMDJGRjhERjAzMzZEN0E2NDY5RUY3NEIKLToxMEFGMjAwMDdEMEZGMTAzNUI3OUVGQjUzRkEzQkYyMzE5Q0FFMEYyQjAKLToxMEFGMzAwMDYwQkJDNkU2QzRFRjBDNUVEMUMzQkQxQ0U5OThEQUMzQTIKLToxMEFGNDAwMDM1NDZENDQ3Qzk5RkQ5MDQzRUE2OThCNTVBMEE4RTFGRTQKLToxMEFGNTAwMEFFOTFERUQ2NUYzNTgxQ0VGRjVENzcwRDNGMjdGMUZGRTUKLToxMEFGNjAwMDAwMTA3ODU5NDEwMDgwMDAwMDAwMDAwMDFGOEIwODAwOEQKLToxMEFGNzAwMDAwMDAwMDAwMDAwQkVEN0QwQjU4NTREN0I5RThEQTMzMjAKLToxMEFGODAwMDdCMUVDMEEwODM4QTE5MTJCMDAzQTgxOTUzMUYyMzBGNzgKLToxMEFGOTAwMDA1MUM3MEEzOTgxMjQzNjQxMDU0OEM4ODAzQTJEMEQ2NjkKLToxMEFGQTAwMDE4OTJBNkI3RjRENDczMTgwNDExMDk1MUQzQTYzRERBNDgKLToxMEFGQjAwMEY4MThDREEzQkRCOURFOTY5OERDQTY0RDczQ0UyMUM2OTgKLToxMEFGQzAwMEE0Njk2RjEyQjE0NzFCRUQ2RDBEQkU5MkY0NkJCRjFFRUQKLToxMEFGRDAwMDZERDIzNkE3RUQ3N0JDRkZGRkFGQjU2NkY2REUwQzY4MjUKLToxMEFGRTAwMDUyRDMyNjNEODUyRkQ5QUVCRERFRkY2M0ZEQ0ZCNUI5NjcKLToxMEFGRjAwMDcyMDU3RUU2MzNFNjYwNkE3OEM4QzdGMEM3NzI0NTgxOUQKLToxMEIwMDAwMEZGNDc5ODU3OUQ4M0VGRjE4REExOUU1REM5QzRGRkI3OUYKLToxMEIwMTAwMEIyNjAzMkJDMEY3RUVBMTc2QzI2NjMzNUFDRDUzRjAwQjgKLToxMEIwMjAwMEVGN0JGM0I0NTRGNzc0QThBRUIzNUQxODcyMzJFNjgzQzUKLToxMEIwMzAwMERGMkI1OUQwNDdDQzIzOUYzNTRDQTU3QTM5REU5MjBBQjUKLToxMEIwNDAwMDY4MkZDNzY3MzQ5RkExN0U2QjBGRjMzQUM2NDJFMTRGNkEKLToxMEIwNTAwMEIwQkE4OUQwNUZENDZENTUyMzRFOUNBRjM3RjgzOUE3NkQKLToxMEIwNjAwMEU2NjIyQzJCREREMkUwODBGNTU0NjY2QzVFQ0QyNjQwODYKLToxMEIwNzAwMDgzMkE4NzdCMEFGNjBGMkNGQTc5NkUxRTNDN0RFQkJEODYKLToxMEIwODAwMEI4M0Q2Q0Q3MENFRDRFNERFQkNFRjA0RThGQUQ2QkVCNkIKLToxMEIwOTAwMDM2NTYxMjgyNzlCNjY2RkMwRkNGRkE2NDZDRjdCQkY2QUYKLToxMEIwQTAwMDEwQjZCM0IxREE3RTE4QkY3N0MxMkZEMzMzNURCMUY2RDYKLToxMEIwQjAwMDg3NjY5NTRFRjNFN0MzODBFNUE5OENBNTMxMzZENTFFOEEKLToxMEIwQzAwMENBRjI0RjFGQkU1RkM2QzI4QzQxOTM4RTkyNDRDNjYwQzcKLToxMEIwRDAwMDFERTcxQjk0ODgwM0Q2NTVEQjA3RjAxQjgzRjU5NzVBQjEKLToxMEIwRTAwMEYwN0Q0MzlGQzNEQjhCMEI2NDlBRUIwRUQ4RTc3QUJFRUYKLToxMEIwRjAwMDRERDYzMEE1MkI3RjAwOUVFQkZCOUEyQkE4RkQyRURCQjcKLToxMEIxMDAwMDM5ODQ5NzEzN0UxMUJFMTlBREVBQjkyOEJDQjAzREQzN0UKLToxMEIxMTAwMDk1NzExRTUzRDk4RTczQzA3QTE3Rjg5MzI3QkNGOTQ5REQKLToxMEIxMjAwMEY4NzcyRUNCQkQ2MkU1Rjg0N0Y4RDY4QUI2MDkwREQ1N0IKLToxMEIxMzAwMDYzMTlFMkQzMDNDMDJDMUNCRUFGOTVFRjU5RDlDMDc4NzgKLToxMEIxNDAwMDQ2MDRDM0YyNjNFRjRGMzc2NTI3ODZCMDFGRDI4RDUzOTUKLToxMEIxNTAwMEQwRDUyQ0Y4QkY5Nzc5RUQ3MzEwRkY5Q0FFNkEwNDVERDMKLToxMEIxNjAwMDc5MTk3QjlFRTgyQTZDMEI0N0Q3MDlGQjYyRjdEOTYyRjUKLToxMEIxNzAwMDc0OTc2NTE4OEZFMTdBOTdFQkNCRDQ1RjNCMzkxOUQ2N0EKLToxMEIxODAwMEJGOUFEMTVDNkM3NUEwODVDM0VCM0U0RThGNEU3ODI5N0IKLToxMEIxOTAwMEM2ODlEMTFCOEMxMzM0RDExRkUxNkJBMjU4Mjc4Q0IzMDUKLToxMEIxQTAwMEFDQUNFQ0ZGRkMxMDYwRjZFOENFQUMzQjEwNEZDQkZFMzUKLToxMEIxQjAwMEQxQ0FBQzMwNUYzNTM0QzM3Mjc1QUQxMjg5NDA3OTc5MkMKLToxMEIxQzAwMEUwNTZFMjg3RTVGQUYxRTE3RDREOERFRDgyMUUzRjZGOUQKLToxMEIxRDAwMDZDQ0FBNjcxRDY5NEYzNzFEODI2RERGQ0I0QkU5RDA0NkEKLToxMEIxRTAwMENGMjA2MzVCREMzQTdBN0IzMzkzNEQ2NjAwQzdFNzc3MDkKLToxMEIxRjAwMDM3RUZDM0ZFMTcxRjc0MzBBNDIzODY3REU3MjBERTM5QTYKLToxMEIyMDAwMDVDNEYwMkVEMjJGREJGQjU0RDg5MUM4NDc1NUZEOEVEMDIKLToxMEIyMTAwMEEwNzVCRUI5NEU4OTMwQzQzRjczM0YzRTAwRUZCQkZEMDEKLToxMEIyMjAwMDI5NDQ5NzE3MTM0MkZCQkUwOEY1OEQ1QjkzRkM2MUQ4NDgKLToxMEIyMzAwMDZGQ0ZCOEQ2OEQ0MTk4Rjc2MjRBQTgxRUM3NjlEQ0ZBNkQKLToxMEIyNDAwMDQ5NEIxOERBRjcyNDg2OUQ1OTM4NkVBM0Q1N0YxMEE2OEUKLToxMEIyNTAwMDU4QTkwMjRDQzdDMTEzRkU3RDEzM0MxQjdBNzRGODgzQjYKLToxMEIyNjAwMEZGOEVGOTE1MUE3Rjg5ODU4NUZBNURDM0U5QzczMTlCODEKLToxMEIyNzAwMEQ3MjNDMDFEQkFGNTJGQzlCMkQwN0E0RjNERTRBMEY1NEYKLToxMEIyODAwMDI2Q0NGNjEyM0MxQTBBMTJCNDg0MzE4ODQ3QTZBOTM5OTIKLToxMEIyOTAwMEIwOUU3NDZEMTJBRUYzODIwMkZDMDlGNDc2N0U5OTEyQjAKLToxMEIyQTAwMDQ2RjgzMDk1RTNDNTdFRDM4RDA3OTA5RjFFMTVGQkJDRjUKLToxMEIyQjAwMEYwQzBEQzQ5NDhDRkU3NTM3OEZEMzk0RjYyMDRGNzc1OTkKLToxMEIyQzAwMENFQ0JDQjYxOEYyQkYyMThGMjg2MUFGMjJENEZFNkZCMTQKLToxMEIyRDAwMDUwODAwRTFBQzVCQTFBQkQxNjJEMDFGMERCRjhEMDhBQkYKLToxMEIyRTAwMENGMjI5RTFCM0Q3REY3RTBGMzY0NzIzODU5ODFGRTZGREIKLToxMEIyRjAwMEVEQjYzMjg0MzdDMkMzOTk4M0Y1NDVDRDU4NkY4NkNCRkUKLToxMEIzMDAwMDI1N0YxNkVEMDdFMTM3MUVFMEY2RTZBRUNFRTQxMEVDNDEKLToxMEIzMTAwMDgzQjk1OUM4M0UzMTA2ODc4NjlEQ0Y3QzQxOTk0OUZDNDcKLToxMEIzMjAwMDFDRTZGQ0NFRjk0NDYxQkFGMzE4RTg3N0E1RDcxRTJFQzcKLToxMEIzMzAwMDg3NzFEOEQxQzk0NEI3MkJERDlDNkVFRDg1NUI1MkIzQzQKLToxMEIzNDAwMDc4MzM1Nzk0M0VCQzU0RUVDM0YzQkQ1MTk0MUI5MDZFQkEKLToxMEIzNTAwMDAxQUUyQjkxNUY2NjIyM0NDNkNEMTk4MEY3QjU0RDQ2RjQKLToxMEIzNjAwMEJBREQzMjYxRjMwM0Q1QjBDRjc1MDUzNjY2ODVGQTc1NUYKLToxMEIzNzAwMDFFRDVDMDM3NTU2RDQ2M0U4MjdEMUJDQTYzNjYzM0RBRTMKLToxMEIzODAwMDc3Q0YzODQxOUZERDlDM0U4MUQyMjcwNTY3QzRFODYyQjQKLToxMEIzOTAwMDk3REY0MkVENzA3NUI2NTFFMDZGODZFQkM3MEQwRUU3OTMKLToxMEIzQTAwMDkwNUU0MURFOUNDRkYwRUUyQjI0QjkwMEY0QzNEN0M1RUMKLToxMEIzQjAwMEFDM0E3RTY4RTg3MTEwREQzMzIwMEY4NDEzRDBBN0JENEUKLToxMEIzQzAwMDZBNDY4QzVFMjQ3QzFBNzY3NTEwM0QzNjA4QkE2QkVDQTIKLToxMEIzRDAwMDAzRkExOUEzQTMyMzEzQkM3MENGQUE5QzI3M0I0NjY3OEIKLToxMEIzRTAwMDU0MUY4N0NFQkVFNzY3QzQ0NzkyRkYxQTU4QjA5RTU5RDQKLToxMEIzRjAwMDg3RjNCNTdDMTI5RThCMTA5RjlGQTkwREE3RTMyODYxNTAKLToxMEI0MDAwMEVBQkZBM0E0NjgyQ0QxQkJDMDA3MTczREY0RTM0NEJDM0EKLToxMEI0MTAwMDI1NEJGQzg0RDkwOTNDQ0Y1REEyRDJEREE2OUMyRTAzMkUKLToxMEI0MjAwMDc5NjMxNUU3QUM1RDFCOEMwQ0MwRkI5NDM2MkJCRDQ3RDQKLToxMEI0MzAwMEY5QTI0MjdCOUM5NjIxQzI5RjlCRkJFREE5NTA0RTEwMjYKLToxMEI0NDAwMDY1OTdDMEFCRDVFQTRBNDM3ODI1MzNBM0RFMzM4RTk5OUUKLToxMEI0NTAwMEU0ODk5RkUzNTVDQUQ5OUQzNjk2ODZFNzcxODIzOERGMjUKLToxMEI0NjAwMDlCMTc2NTJCRDg2RUE3QTI5MDdFNjAyRjMzRDI4MUQ1MTMKLToxMEI0NzAwMDI0MDdCQ0IzMkRFMkJDMEJDQjczOEZFNEFERERDOUY3NjEKLToxMEI0ODAwMDlCOTA2NjIxQkVGODZEM0EwODU0MjUwNjBGQkJEOEZGODUKLToxMEI0OTAwMEI4MDE2RkZGMDBENEQ3N0I5Q0ZFMDg5NEM3MzMzN0M5MkYKLToxMEI0QTAwMDg3NTI5ODY5NDAzNzZGNEQ0NTEyMUJEMEUxNzk5MTdCRTcKLToxMEI0QjAwMEJDQTFGQzI5Q0Y0RDg2RjZCNzc5QjMwREY1QjdGQjNFOUQKLToxMEI0QzAwMDY5QThCRkMzOUY2QjI4REI5OTRFQUVFMzNBODczOERDOEYKLToxMEI0RDAwMEVEMDJDRUJBN0EyOTk3MDcxMThGRDU2MjFGM0JFQzIxNzYKLToxMEI0RTAwMDRGMTBDRUUxNkFDRjdBOTJDRjFEMjU5RkYxMENDMTNFNUQKLToxMEI0RjAwMDFDMUVDRTdGNzZENDI3NjFEQzg0Mjk0RDZFRDIyMzg0MzYKLToxMEI1MDAwMDdDMkU4MDVGQzQ0MzI3MEU5MjE2QTMzM0JCMDlDRTY2MDAKLToxMEI1MTAwMEZFMzNFQjkzMERCMzg1REU3MzBCQkI4NUY0MUVEN0I4RkEKLToxMEI1MjAwMEI4RkE4RDU5N0YwMzE5NjE0MTdBNEQxNEY4NUE2NDc1NDAKLToxMEI1MzAwMDkxRENEODVBMDNGQTlDODJGQUU1NTJBRTJGRjlFRTI2MzYKLToxMEI1NDAwMEJDMDY0NTNCMTZCNjkwREVCQTVDRUM1RkVBNUZBRkI1NzEKLToxMEI1NTAwMDMzMzY3MDMzQzA2MzAxRDdCMzk2MTc1Q0FBNDFGQTM0MEYKLToxMEI1NjAwMENGREYyQkRBQzk3MjYyQzEwMTREOEIyMzRGREIwNTdEMjIKLToxMEI1NzAwMDI1MDU3OEZENzIyNzUzNTEwRUM5RkFCMDkwQjdDQjg1RDcKLToxMEI1ODAwMERDNUUwMjdDOEM3NDVCODk0RjlEREVEQTI3QzZFOThCMUEKLToxMEI1OTAwMEQyMkIxQkNDRDFGM0U5MjE0NTQ1MzgyNDg4RTIwMTE2OTIKLToxMEI1QTAwMEVBOUI5RDhBNzAwRTUzMjNBQjJCQzg4OEJGRkYwNEQwNDMKLToxMEI1QjAwMDlENDM3QTBDRkQ5NENFNkVEQUZCNzlBMDVGNDc0REIyQzUKLToxMEI1QzAwMDFGNkQwQjg3RDZGMEQ4NTcwMTdFODkzNTQ5N0U4QjM3QTIKLToxMEI1RDAwMDQ2RUY2NDc3NDA3OTgyOEZEMzdCNkRCQUQzNEZENTYxQzQKLToxMEI1RTAwMEVEQzRFNDM5MzFCREFDNDZFODc3QTlBQzk1Rjg2MDk4NzQKLToxMEI1RjAwMDFERTNFNDc0MzlCMjFEQzNDRjFGMzk5RjQzOUNGRkNDQjgKLToxMEI2MDAwMEJBQzk0Rjc0MTdFNEU3QkUwNTdFOTFFRTk2RDUxQUU5RTQKLToxMEI2MTAwMDZBNDU2ODc0M0FGQjk2QTRCM0I5NkMyRUQxNTk2ODAzOTUKLToxMEI2MjAwMEQxODU0M0I0RDkzMTA5RTg4NUMzODlFODIzNTFDMjU3OEMKLToxMEI2MzAwMEU4REIzNjk1MERBODgwQTc2Mzg4N0Y1OEE0Q0JDNjkyMTcKLToxMEI2NDAwMDcxOUY4M0RBMEJDNDE3ODMzRTY2RDNEMzQxMzA2MEQ1MzQKLToxMEI2NTAwMDIyM0EzQzBFMTZCMjQ0MzdDODk3NDExQkNCNzgxMERBMTkKLToxMEI2NjAwMDhERDE1NjJDNzZDM0ZFMDY0QjFEQzkwRDc0QTg0NjBDMTEKLToxMEI2NzAwMDdBRkIzMTE4RjdBQzhCOERBOEVGOUJGOTYxMkFGQzAzOUMKLToxMEI2ODAwMEU1QzBENjhDMzczREI4OUVBRDM2NDZFNzNEMEI1RkFBODgKLToxMEI2OTAwMEQ1QTBCQzVEOTZEOTJGNkE0QjYxRENFRDA5QjJGQ0VFRkEKLToxMEI2QTAwMDJFQUM3RjNDOTE5NzJGM0ZGOUE3NUQyNDFGODA1RTExNDAKLToxMEI2QjAwMDFGNDkwMjFGNDk1MjdGOUZBRTgzMkJFMEMxMzkyMTg3NkEKLToxMEI2QzAwMENFMTlBNzA5REU2NkJENUVDQTA5RjMzOTZDOUVGNzREMzcKLToxMEI2RDAwMDEzOUU0NkRBRjdCMEY1MDI2OURFMzIzQTVGRkNDNzZDQkEKLToxMEI2RTAwMDkyOTdBRDA2QkUxODNFQ0UwMEU5RUZBQkM0QkUyRDQ5MjEKLToxMEI2RjAwMENGNjU4NEUyRDg5MTUxRjg2RkIwRkQ0QTZGMkYwMDlDNUUKLToxMEI3MDAwMEJGQUJBMERFQUI0MUVGMzk4QzhCMEUxODQ3Mjk3OEU5MkYKLToxMEI3MTAwMDNGNTFGRTJCQkJDMkUzMTA4RTU2Njg4MDcyREVDNjQyREMKLToxMEI3MjAwMEI0MUVDOUFGMDk0ODA3NTY4NEZCMDBENTgzRkMxRDUyREYKLToxMEI3MzAwMEIyNzE5MDNBMzdDMjQ1ODFGNjU3MTAyOUQ3N0E0RTk2QTIKLToxMEI3NDAwMDczQjlCNjUyOUM3Rjk1MzgyNThDNTdEOUMzNEFEMTNFRTAKLToxMEI3NTAwMDRGNThCN0Y2RTAzNjk0NzM5QTAzMzUwQTc4N0ZBOTE0RTgKLToxMEI3NjAwMEQ3MDdGNTlBODM5RTk3MzRDNDFCRDBCMzQxRUUzQzVGNTQKLToxMEI3NzAwMEYyODdCNzFGODE3RUREODM1NkJGMDNDNkVEMEUzQ0NCM0IKLToxMEI3ODAwMDUwRUY3RTY3M0FGM0UzQTZCQkIwMjFBQ0FGM0VFNDVFNzgKLToxMEI3OTAwMDY0RjcyMkRGMEM5Q0VBOUFDMkQ4RDk3NjM2NTg2NjFCMjkKLToxMEI3QTAwMEJFREVDMTIzMDk3NjJGNkMzNjE0NEU5OUY5MzQ4Q0QzNDIKLToxMEI3QjAwMDUzRTA3MEEzM0VGN0M2MjZBQjFERjEzNEI4QjkyMThDMTcKLToxMEI3QzAwMEMwMzg5RDE2RUU1N0UwN0Q4RjFBNjI2OERGREIzNzc1NTMKLToxMEI3RDAwMDJFNDJCRTNCNkQwQkZCQzdDMUIzNjc3M0Y4MkVCNDQzNUIKLToxMEI3RTAwMDM0NkY0NTc5MjZBQ0ZGNjA4RjVBMUU4OTczM0U2RkM4NEYKLToxMEI3RjAwMDUxODhERjVFN0JGRUQzQjRGRjYzNjk3NjdGMDI4QzNCQUEKLToxMEI4MDAwMDg0RkUwREMwREYzMURCQ0UwQzNGOEVEQkYxOTUwQzFDQ0UKLToxMEI4MTAwMEZGRDhCQUFERkUyM0IwQUU2MzFEMEVCNEE0RDhCMUREMUYKLToxMEI4MjAwMENFNUExQ0Y3NTg3MUIzNjdCRDZFN0NFNzRERjY1NjdDNTcKLToxMEI4MzAwMDNGNzhBM0REOUU0REZCQjk5Q0VDQzFGRDZDQ0ExRDhGMEEKLToxMEI4NDAwMEI0RDk5RDY2OUZCNDE2RUJENzM3MzNEQ0FGRERCM0QzRTUKLToxMEI4NTAwMDg2RkI3M0FBNkMxNzlFMkY5RkYwNUM3QTc1MkVEQTRCQ0QKLToxMEI4NjAwMDVFQ0I5QzRGNDFGQkNGRkI0M0I3RTYwMDFFNTdCNjlEMTYKLToxMEI4NzAwMDVEODQ3MkM5NUU5NkIyMDU5RkRENjI5REYyQkM5MkY4NEUKLToxMEI4ODAwMDFENEE2Qjc0RTIzOUQ2RERCNDk2RkI2MTNDOTYwNkMyNjQKLToxMEI4OTAwMDYzOUEyNTg4RTc1MTc3NjA5RDczRUE3NEZFQkU3OUNDODAKLToxMEI4QTAwMDcwQjg3NEEzREY2NTE2QUU3M0JENjdGRDBDNkNGN0JCOTMKLToxMEI4QjAwMEY2MTBCNDFCMkE3NkQ0QzY4MzYzNjMwRTk3NjNDRUNFOEMKLToxMEI4QzAwMEU2QUMzNjU4NzdGNzZFQTcxQkUxRDNBRDg0NzYzNTAwMkEKLToxMEI4RDAwMDVDQzM5OTJFRkY2M0RFRTFGREJFMjVGQTQ5RkEwMDNDMDgKLToxMEI4RTAwMDExMUY2RTM4N0NDM0VFQjA4QUZBMkFDNzIzQzBDNTY5MUYKLToxMEI4RjAwMEQzQzlDRDQzQjM0QTlCMTExRTUxNzg5QkU3NERFQjI2MkMKLToxMEI5MDAwMDc5RDFBRDcwQkVGRUQ2RTE1OUJCQzM1MDlFRTkwRkREQzMKLToxMEI5MTAwMDhERkQ4RUY1MDBBRkNEQTI3RDRFNDI3RDdGMjRGRTE5QjgKLToxMEI5MjAwMDEyRjVERDFEQjBFRjM4RkMzRkQ0NjQ2NTM3OEZFNUNGRUQKLToxMEI5MzAwMDFCRTAzOTc1QjM3NTkyMTIwNzNFNDNDNTZCQjNEMDRGMDgKLToxMEI5NDAwMDc1MENFQTJEMzBDRUQwNkUyNzdGQzJGQjJDQTRBRjExMzAKLToxMEI5NTAwMEU4NzM1NjBFOTdGN0JFOTlDMTJEMzk2ODdGNERGNzkzNUUKLToxMEI5NjAwMDlGRUZFNUQ5QzFBRDM5QTQwN0I0N0FCMEZDMzFBMERGQUYKLToxMEI5NzAwMDdEMUYxMUZBNjVFQzQ2QTREN0U5QkJDMzYwOTIzMkY3OEMKLToxMEI5ODAwMDM4ODNERTNBRDJGOTE5NjQ0MzJBOUVDNzFEMjU3RjY4QTEKLToxMEI5OTAwMDQxN0JBMDc3ODZEREVCRDBGOTA1QTUxRUJEQzRDN0U1QzgKLToxMEI5QTAwMDVCNzBDQTg1M0MzOEI5NTlGNUY0RjU2NERGODBCRTRDNEMKLToxMEI5QjAwMEZFNDEzN0ZDQzZGMzBGMDZEMTFGQTg5Mzg3NEI0QzY1OTkKLToxMEI5QzAwMEE5OUZCRTk0MDM3MjExQ0Y3REExMjdBNzdCNzcwNjE3OEQKLToxMEI5RDAwMEEwRkRGMThBRDUxRjAxQjg2NTYwMDcyODU3NTUyODExQzkKLToxMEI5RTAwMEQ0RDczQjRBOUUyMDNEOUUwOTNENkU4OTU4RTc0RkRCRTgKLToxMEI5RjAwMDlEQUM2QzBBOEJEQTczMkJDNUZCQTQ5NkIzOEZBMjdEMkEKLToxMEJBMDAwMDlEODRGRTRGRjREN0I2MzhCQ0U0N0Y0MUU0QzNGQ0Q1MzcKLToxMEJBMTAwMDYyN0ZEMkFFMjMzRDEyRjZCM0IyNDVGODQxRDk4MzVDQzIKLToxMEJBMjAwMERFNTgwM0Y5NDgwRkIwMEY4MzVEMTI2NDI2M0JBNEM5QUEKLToxMEJBMzAwMDY2QjBFNzU2OTlGNDA3QjNERDUwNkREMjFCNzZBMEVFRTEKLToxMEJBNDAwMDg0N0FBMURBRUY0NDdBN0E3NzdBQ0VCMTJDMkY1NTg3QUYKLToxMEJBNTAwMDA3QTQ3RTBGRUQ0MjA1MjdCNjBDRTlDRTlGMTM0MkZFRTgKLToxMEJBNjAwMEZDQjg1RDNCOERGMjY4NEJGMDExRTcxMEZBQURENTg4NUMKLToxMEJBNzAwMDEzRTU0OTZGRjlFNzkyOTFFRTdBRUJBQ0U1NDg2RjgzRjUKLToxMEJBODAwMEVERTVENEVFQjVGNjIwM0RBRjA4Qjk1MUUxRDc3RTRGRDQKLToxMEJBOTAwMDdDMjlGNEIzRUFGMkQyRDM1RDNBQkM1NjY5Qjc5REVFODUKLToxMEJBQTAwMEQyQURCRkIyQTBDQTUwOTZGNDU1Njk2NUFERkQ3MUNFNTYKLToxMEJBQjAwMDk3NTlCOUQyRUZBMjMxODMzRTZBM0RFNDBGQzUzOTJGQzEKLToxMEJBQzAwMEU0MzM5MUE5RUZFQUUxOTg5QzJCRTg0NkU4NTNGNzRGNUQKLToxMEJBRDAwMDVGMzA3NjM0N0Q0NkVFNTNDMjQ3RUU1RkQ2OEZCNERFREMKLToxMEJBRTAwMERGRTU1QzlGRjU2NkJGQ0ZGNTlBRDcxOUM1RDMwOEVEQTIKLToxMEJBRjAwMDJCRjExMDgzNzNFMDc3ODczQjU2QTI1Q0E4RjA4NzcyMjYKLToxMEJCMDAwMDczMDEwRkQ1NjVDQTk2RjE0MDI3M0YxNkZFQ0ExRjA3N0QKLToxMEJCMTAwMDkyMjM2MTU4Q0Y4QjNFRUVGRjRDNkNFMTc2NjU2MjU5MDMKLToxMEJCMjAwMEQ1MjIzQzlGREUyRkJFRUYyQzUwODgzRjZCMDI0QTQ0NEIKLToxMEJCMzAwMDgzN0ZERTJBRUNENTlGRkExOEM1MUY4MDVGNUY0RDg2OTQKLToxMEJCNDAwMEYyRUJDNTM2RUU0NzY2NUFDNTFENzM2Mjc2NkE2MjFEMTIKLToxMEJCNTAwMDhGNEZFQ0IwMzNGRjAwRjY5QkU2RjI2Rjg2RjdDQjI1RjQKLToxMEJCNjAwMEZGRDUxQUUzMTAzNTM1MzZDMzM5NTM2OThBM0IyNDlBMTkKLToxMEJCNzAwMENFOTlBNTEyRUU3MzAwRUVEOTMxQjg4RjY0N0Y4QzQ0NTQKLToxMEJCODAwMDI3NENCRDk0ODc3RTMxMzM3QzM2OUFFMDYzQjY3NzJBQTIKLToxMEJCOTAwMDlGMzNGMUM3MzVEQTNEMDc3QkYyNUU5QzgwN0E0Njk5ODgKLToxMEJCQTAwMEUyOUY4MkY4QzMyQUU4OTdBODNENDlFMTkwNUVDOTQ3MjEKLToxMEJCQjAwMEMyREU5M0YxQUExRDRCQUJDOURFN0IwREY1ODFCMTE0M0EKLToxMEJCQzAwMDZGOUE4NEZFNkEzOUJFQjRGMzY2RkFCNUZCNzI1MzQ3QzYKLToxMEJCRDAwMDVFQzcwOUQxNkY2QjU1N0MzREUxMDRFQTA5QjNGOEYzMDgKLToxMEJCRTAwMDA2Nzg0RTVEQkEzMDIzOUU5RTcwQTI1MEU4MDk1MDhGQjEKLToxMEJCRjAwMEZBQzE4OURERTVGQzU5NjhENDEzNTg3OUVFNTVFMEQyRDUKLToxMEJDMDAwMDQxRkI0RDk4OTIzNzM2MUVERjFEOUIxNTdBMzA1NzA3NDIKLToxMEJDMTAwMEY3MjQ1RjJCMkJEM0MxN0RGRDZDRURDQkI4REYyQUUxODAKLToxMEJDMjAwMDg3OTBGMzgxN0MzRkFBRDdDM0NDRjMzRDk1RTMxNkY2MEEKLToxMEJDMzAwMEM2Nzg5MjE3RjI3OTM1RkNBOUVFNTY4Njc0NzZCRjREMTgKLToxMEJDNDAwMEFCNDU3RENGRUM0RjNBOUNDQkY1QzQ5RTJDQUQwNUVCQkMKLToxMEJDNTAwMDk5MkJFNzJBRTM3NjQ4N0ZCNTZGRjY0NDFFN0UyMEJGMTYKLToxMEJDNjAwMDhGQzkxRTk0RjZEMzAxQUNDQzhGRDk4NUFBOUJEQjg1RjYKLToxMEJDNzAwMDg5RTk5NzhFQkFBMUFBMzkzN0Y0MENDMkEzRjg1MjI0RTUKLToxMEJDODAwMDZDMDFCRTczNTQyOEE0M0YzOUQyMTlFOTNERDc2Qzg3QTMKLToxMEJDOTAwMDVENjNCQjFFNjQ2QUEwRTdBRDhEREMxRjVGM0E1QkE1RTgKLToxMEJDQTAwMDcyNjJDODdBOTBDRTA1OTMxRjI3NTFCQjRDNzZEODEyOEEKLToxMEJDQjAwMEQwMDM4NERGODZGNEE5NTM0MjlGMEFCMjU2QjJGNzVDRTAKLToxMEJDQzAwMEI2ODgxM0ZEMTU2NkJGNEQ2REJBNjU2MDJBQzhGNURBRjIKLToxMEJDRDAwMDgyNEIzNURFOTlENERGRTBGN0E5RjU2NjFENEQxNUY1RTkKLToxMEJDRTAwMDZFNzgyRTA5NzIzRkQwNzJGNDAzRTFGODM1OTE5RTJDRTQKLToxMEJDRjAwMDhDQzNGOTU1QkZDNkI4OUQ4N0ZBQzU4QUI1NUY5OEYxNjAKLToxMEJEMDAwMDM1RUZGNUYzMDM0OUZGOTJENDE3QTUzRTAzRjJBNTY3N0IKLToxMEJEMTAwMDNDRTI2NUExRTIyNURCREZFNDI3MzJGQjg1QTQ1RkM2QjgKLToxMEJEMjAwMEVDM0YzMkZCOEJERUNCQ0QyNDdDNDhGRDRCRkE3RjdFOTMKLToxMEJEMzAwMDlGNkJENEMzRkUwQkQ4MDNEQkY1MTZDMjkxMEFGQ0RENjIKLToxMEJENDAwMDZCNjMxOTNCQTc3M0ZGMEVFQTRCQzc0QTdGRTA0NkZEQzIKLToxMEJENTAwMEUyQkY0Q0ZEQUVGNTdDRUI4NjczRTgzQzlFQUIyRjI0MzYKLToxMEJENjAwMEQ4NTBERjBFN0E0MkU0NEY1Q0EyMThGOTI0MkQ0RkY4MjgKLToxMEJENzAwMDFCRjM1QzdDMUUxMTQ3RUU2RTZGOTNGREMzMjg2RjgyMzAKLToxMEJEODAwMEU5RjY0ODgyMTIxQjg3MTVFNDVGMTMzRjhEOURBREE1MzAKLToxMEJEOTAwMEU2RTU5MzNENzI0MzFFRDJCMzFGRUM5MTE5Njg4RjA4RkMKLToxMEJEQTAwMEJFMkY0OEE1RkQzMDJEOTU5REQ3Qzc4REM1QkFBM0VCRjUKLToxMEJEQjAwMDcwODJERDMyRTNGRENGM0YyMThGMTlFNkI5MUFEQzc2QzAKLToxMEJEQzAwMDk0MTQzOUVERTg4RjAwMUM1QjM5NURCOUEzRkVGQjJDQTAKLToxMEJERDAwMEY0RUI2Q0YwRUFGNThBN0E4QzVCRTRBMkRFQzlFMzFBMzQKLToxMEJERTAwMEYyQkRDRTdGQUUyMkZEMjZBNjg3QjQ2MDlDNzNGNUNFNTEKLToxMEJERjAwMEJDNjg5QzhDRTJBNzUxRkZCQjhGNTFCQzQ4OEVBMzMyMUMKLToxMEJFMDAwMDRGMDdGMTAxRjJBQTVDOEYzNThFOUY1RUFDQjc0OUYwMDcKLToxMEJFMTAwMDAxMDBEQ0U5MDA5MjU5QkJEM0NBNzg1RTAyRTcxMzE5MkUKLToxMEJFMjAwMDhGNTAwQjgzRTU5OUIwREZCNURCMTQ4QTFCQjM3MEVEM0YKLToxMEJFMzAwMDUxRDRFRkQ3ODk3QUJCRjBCRjk5RTM0OEVCNDQxQzg2MTUKLToxMEJFNDAwMDU5Mzc5MDlFRDZGNDkwMzFCRUQ2RDg2NzJDOUJGNTcyQTgKLToxMEJFNTAwMEU5RUY1NzYxOTFCOEVFN0Y0MDNDNzEzODQ0QUNBM0MzMjEKLToxMEJFNjAwMEUxMDBFREYzNkYxNDBFOTIwRTJCNzIzRkVCQzFCQzk2MDYKLToxMEJFNzAwMEVFODREMEFFMDY4QzZCRUY3NTkyM0Y4NDZDNDhFNDk3RUQKLToxMEJFODAwMDAxRjg4NUZENkNEQjUzRjAwOEVFNjc1QjlFOTVFMEQ3MEIKLToxMEJFOTAwMEFERjAzQzk3QTM2OTVGNzMwRUU5RTg2RDlCRTBGMzVCM0YKLToxMEJFQTAwMEYyQkNEQ0VGODJFNzEyODg0NDk2M0U4MUY4NDhFNkI1QTIKLToxMEJFQjAwMDFDNEJFMzdBQTUzREMwRjVDNjQzOTM4RjJDRTU3MTU3MjMKLToxMEJFQzAwMDlFREZFMjBCQzRGMjVCNEEwMTNFMzMwNDdDN0M1MzlBNTIKLToxMEJFRDAwMEZDMDNGMDlDMTE2ODI2Nzg0QzdGREE2OEFGREVFRTMzMDUKLToxMEJFRTAwMEVBOTUzRUIzQkQ2QTJBRUZDRDhCOUZENzEyOEJCMzA5N0IKLToxMEJFRjAwMEJGQkI1OEJGOTlBRkJFRDlDRUUzMkQ0RjgwREQ4QUNGRUYKLToxMEJGMDAwMDQzRUQ2RTdBN0VBQkRENDNDRkZFNzYyRkU5Njk4N0RCQUEKLToxMEJGMTAwMDdERjQ5NDcwQkZERjE2QUNDN0I4OTZGNDQzNEFGRkY4QkYKLToxMEJGMjAwMEY3RjNCOEZEQzYwMjdDMUQ5NTYyMkY4QkFDRTlDOTA4RkEKLToxMEJGMzAwMEU3RTMwMUFFMTc4RTc0QkU1NDk3MUJGREEwQ0I4MkM2RkIKLToxMEJGNDAwMEY4REU4QTVBNjM3Q0VGRUU5OURBNzM3ODVFMjZDREY0RDgKLToxMEJGNTAwMEQ4NDJCQTc4RDQzQUIxRkYxRDVGRTNGMTI2MzlGRUYxMzkKLToxMEJGNjAwMDdGRTQ3ODk3RTU4QjYyRkZBRjBBQkE0ODNBOTI2NkYzQUUKLToxMEJGNzAwMDAyQjJBQTFFQUFCQTE1RkRGNkNDOUQ3MzRERkFFMDQ5OEQKLToxMEJGODAwMEMxOTc0OTlCREQzNkY0MEI1NTBEQUNCNEUzMzhFQjc2MjUKLToxMEJGOTAwMEMxMzhBRTZCMUY2NzZCQzZDNDBDNjM3Q0UxRUUzQkIxNkUKLToxMEJGQTAwMEZGRjE2ODdDNjFFMzlEQTU1MDdGNUNDNDE3REU3RUJBMUIKLToxMEJGQjAwMEY1RUI2MTE3RDJBQkY2NzM5NDFGRDYzQ0VEMENDMkUzRTAKLToxMEJGQzAwMDZENzE5RTQzNzkwOERGQ0IzMkZDQkM5QzMyNzE1NDNGQ0IKLToxMEJGRDAwMEZFREI3OUY5QzNGREY4RDY4NTRBNkJCQ0JDOTZDQjc5RkMKLToxMEJGRTAwMDUxM0ZEQUFGNDk2RTM5QTM3RUI0NEJCQ0NDRTU5MTlBOTAKLToxMEJGRjAwMENGRTdFRkZDMjk2QkMxNzEzQTlGNjUyRDg3RTNFOEYzMkEKLToxMEMwMDAwMDdGQ0M1M0U0NzhFRkU1OTFGRDJGRTU2MEYwMEZGMUM2QUEKLToxMEMwMTAwMEIzM0FBQTI2MjFCQzJGREE3ODVFOEM3OTNDMzVERjJFMjQKLToxMEMwMjAwMEM3QjNFNDYzRkZGNEU4RkFENDdDREQ3ODNCMDAwNjgzMTEKLToxMEMwMzAwMDg4MjdENTlENEM3MTRENzYxN0M1M0YyNTFEMjVENUJCNEQKLToxMEMwNDAwMEVGQzBCQzA1MzAyQzE5OUUyRjQ5REY3MURGOTE4NzdFMzAKLToxMEMwNTAwMDlDOUY2NEZCMUY2MzIzRTNGNTE3ODJCRURFMTJGQzc1MTEKLToxMEMwNjAwMDExRjkwQkY4RThCQ0UwQUZCM0M4NUZGMDNDMjNGOEVCODQKLToxMEMwNzAwMDY3RUQ3RTJBRkZCNEJEODBDQUE3REEzNTJBRkZBNEJEQ0EKLToxMEMwODAwMDlDOUUyN0RBODNGNEZFQzdFREI1NTRFRTZFMEZEMUYzMTQKLToxMEMwOTAwMDc4RDkyM0I3RTJCOUYzREI2RjJBMjQ4RjQ3NUFDRjY3RTkKLToxMEMwQTAwMDFFQjUxQUY4QTc2NTRGOTI4MURGRDYzRjM0REU1MDZFNzkKLToxMEMwQjAwMEVBMzNDNkNGMUJCQkIyMERFNTM1NkRDNkY4RjlFQTU2QkIKLToxMEMwQzAwMDYzRkM3QzU1Q0IzQ0MzN0MyQjQzMEI0REZDN0NCQjg5NzgKLToxMEMwRDAwMERGQUIwRDY1MkQ5RkVCODlENUU1QUIwQ0ZEMUM5RTQ2QjYKLToxMEMwRTAwMDQzQkJBNEE1MkMxNDBGRkZFNUY5OUMzRThGOTQxNDhEM0YKLToxMEMwRjAwMDFEMUFDNUNGNjE2RkJCRkRFN0E4OUY0NENCNkE4OEExMUQKLToxMEMxMDAwMDNFNkY2RjVCNDJFRkVGNEZFMEU3OURCOTVGN0QzRTNGRDMKLToxMEMxMTAwMEVGQkFDQjlBODIwQjE4RUE0NThCQUQ3QUJERTdEM0IzNjEKLToxMEMxMjAwMDQyNEJGMzc1RjZBMEREQzNFREIxNzcyNkQ3NTgzRDQwRkQKLToxMEMxMzAwMDQ3NEJDQjJFQkY3ODAzRDA1MTY4OTA5MUREQTM4MUJBRDUKLToxMEMxNDAwMEU3MDEzREI4QTBGNUMxODUzNzQwQjkyNjdDOEZDMTdFOTcKLToxMEMxNTAwMDJDNkE3OUYyMDU2MDVGMTYyODNCREUzOTAxRkFGQjY3MkQKLToxMEMxNjAwMDg3RUE3MUZDMTJDRkE1MTdCMEZGODI4QUQ5MkE5MkY1MEYKLToxMEMxNzAwMEZEMjk4Q0Y0RDE4QjE5RjZDOEMxMzhGNDcwNkZCRTYyRkEKLToxMEMxODAwMDg4NUZCRERGNzNEQTFDQTdDRkYyQjE1MkY0MjM2N0Y5RTEKLToxMEMxOTAwMDJFOTVBMjVDODNCMjg2RjFBRjQzQjM0MkY3MjI5RkMxRDIKLToxMEMxQTAwMDdCMERFNUU0RkQzM0Q2NjdFMTc5MzI1MkRDRTg2QjAyQzIKLToxMEMxQjAwMDVGRDI5RjIwRDdCNUEzODRBRkU3Qjg4ODJGMEM5OUUyNTAKLToxMEMxQzAwMDBCM0E3RkMyM0ZFNThGRTI0RkI4MjhGQTBEN0QzNUJFQUUKLToxMEMxRDAwMDNGRTFBMjg4M0I1Qzk0NzE4N0FGNTVDNzhEM0I1QzVDQTcKLToxMEMxRTAwMDI0RkMwOTUwOEY3RTg0OEJCQjZCRjk3M0QxRTg3MTA3RjcKLToxMEMxRjAwMEI5M0YzODhGMUVBMkYzMjcxQTc3MTA3QUJFRjA5QjFGMjMKLToxMEMyMDAwMDlCQTVGRDMzRDZBRjlGQURFREMyRTc2RjY2NjhCQjExNEUKLToxMEMyMTAwMENGQzc3NUYxNEZGNzQ0NURGQ0IzRUMwNzg2RjhFNzUzRTEKLToxMEMyMjAwMDM5QTEwM0Y5M0M2RUNERDBBRUVBMENCM0ExODQ2QzhDN0QKLToxMEMyMzAwMEM3MDYzN0M2QTNFM0ZGOUQyRkY1RUI4MTNGMkIzRUFCMkYKLToxMEMyNDAwMDhCQTM1QUFFN0M5MjVENzMxQ0UwOUFEQjE1RjBCQzE0OTQKLToxMEMyNTAwMEIzN0U5Mzg0MTAxOTE3RDNGQjlFQzgwQjFENDE3ODc1Q0MKLToxMEMyNjAwMEE1N0NDN0NCRjNBRjJDQjFGMzAzODVERjA4RkE5MDc5MzcKLToxMEMyNzAwMDNFMzkxRUNBMkI5NDVCMjc4MDYzRjA5Q0Q5OUU3MkE5MUQKLToxMEMyODAwMDBFRUQ5NDQxMDEzN0YzRjNERkYzREQwMjlFRUUwOTg4RjIKLToxMEMyOTAwMERGMjdGMjgyM0YyNjdDM0ZEREVGQTVCQzM2RjFGRTVBNTgKLToxMEMyQTAwMEQ3RjFCODNERjg3M0Q0NjNCQjFCQURERTgzNUM2RjI3NTkKLToxMEMyQjAwMEJGQzVDRDgxOTQ0OEFGMkUxRUZDNkIzQzJGRjNEMUZGNDAKLToxMEMyQzAwMDM4MzREOTBFRjhFRTBDQkRFMEMyN0NGMDM3RjZBODk4RjEKLToxMEMyRDAwMDExQzNCRTkxMUNCNjIxRkU2QjdERkM3QzVCRTAwOTdEMjkKLToxMEMyRTAwMDYyNjgxNDNFMDc3QTE4NkZGMUQwM0EyQzk2MDIzRTJCMDIKLToxMEMyRjAwMDdGODYxNTdDOUFEQjBGRUU3OTM3RDUwQkUzN0Q2MzJGQjQKLToxMEMzMDAwMDhGN0ZEREJDQjdDOUQ5QTgxQjNGNkIwRTNGNzdCQTkxQjEKLToxMEMzMTAwMDY2RjIzMDNFQTk0NDMwNTFCRDM2NzBGOUQ1QjkxODVGODgKLToxMEMzMjAwMEYxNUFDOENGRjFDNkE2REY5RTVDODE3RTQ3Q0Q0QTdFMUEKLToxMEMzMzAwMEM3MzczNkJENDNFNTUzNUU0QjJFQTJFRjBEQ0Y2RjRFOTAKLToxMEMzNDAwMDYyRkI5QkZGNzFERDQ0NkVCNzcwNzhBQ0Q5OTRGQjc4Q0IKLToxMEMzNTAwMDZGMjZDNUM1OTQzOTAwODc1M0RBM0JDOUQ5RDM2M0YxMzkKLToxMEMzNjAwMEIzMzUwQTBCQzZEMzYzRDJFNjcwQkMyREQ2NUFFRkM0RTAKLToxMEMzNzAwMDc1MkQwRTM5MThFNjM5OUY2QUQ4RkE3MzJDN0ZBMzU0QUQKLToxMEMzODAwMEYxNUFEMUFFRjdGMTc5NkFGN0E4OTQ0RjBCRjBEOTgwNDIKLToxMEMzOTAwMEU1NTdGQzQ5MENFNzVEMTA3QTUyQzVGNkJGOUJBMUIwOEEKLToxMEMzQTAwMDFCOTRFQjA4NTdFRDlENTRFNEMzMzc5MEZFRTJBQ0ZGQkQKLToxMEMzQjAwMEQ3RjJEQzE0N0MzNDU1MDVCRUNGNDFGODFGNzVFOUZEN0EKLToxMEMzQzAwMDk0OTI5RUJFOTRBNzY1Q0YyMUJGNUZBODI1NDg3QUVFQzAKLToxMEMzRDAwMEQyQUJFOEE3OUI3OTlFRjYzNzJGQTkxODdCNDg3Q0I0OEYKLToxMEMzRTAwMEY1NDZGNDJGMEQ1QkU3MDhFQkNCOUJDM0U1RTQ2RjA0NDgKLToxMEMzRjAwMDVGRENCQzU3N0RGNTM2QTRFNzREMzZDQTQzQjgyNTJGMjAKLToxMEM0MDAwMDM4MDdGMTE1QjVCN0FFRjNCOTIxRjNENzA2MEJGODdEQjAKLToxMEM0MTAwMDA0NTBBNzY5MUU1OEFGNEY4NTc1MjQyODg5RkUzMEU3NjAKLToxMEM0MjAwMDJCRjJDRjM5QzVGOTA3RURCNEIxRDA2RTBERUIxRjQwM0IKLToxMEM0MzAwMDNGMUY1M0I1OUQ1NkY0MUYxNkRBQzgzRTVFQjFEQTk2MUIKLToxMEM0NDAwMDhDNzg4OUM1Q0JGQzA2N0JDM0ZDM0M4RkYxMzFDQUQzMDkKLToxMEM0NTAwMDcwRDI3MzEwRUM2QzhDOTdFMDBGNjhFMjUwQTkwQUJEQTMKLToxMEM0NjAwMDdGQzZDMzFBRkNGMzcxOTE1NzdBNkZDMTZEMEY4NzAzQjIKLToxMEM0NzAwMDYwNjc1ODc4Nzk1REMxNkQzNzZEODYyRDlEOUZENDdBNDAKLToxMEM0ODAwMDcyMTlFQ0FCRjc0MUM1REZFMUM1RTc4MTVEOEQ3OEJGN0YKLToxMEM0OTAwMEEyNERGMTk3NDNEM0ZBODE2OUY1MTg2MjZDRUU3MTkwNjEKLToxMEM0QTAwMDhFN0Y2RURCMTc2RTQ1N0E3REM3QzNEQzQ4Q0YyQkQyRkIKLToxMEM0QjAwMDM4M0RBRjNEQzEyMjE2Mjg3RkFBRUY0MThBN0IwNjRGNDcKLToxMEM0QzAwMEE4OTRCNzI2RTNCMjY3RDI3ODVDRjZDQkVEMDNCNDZFREUKLToxMEM0RDAwMEI0NkIxN0NERTEyNjM2RkU4Q0YzQzMzQUQwOEY1QUE2NDMKLToxMEM0RTAwMDUyQkM3NDNDNzM3N0UzRjk5MkE4NjU5NjcyN0REQTZENUQKLToxMEM0RjAwMEE3Mzg0RjA1NjM1RjQ3M0Y0RjFCQjc5QjBCNDU1RUE0QjMKLToxMEM1MDAwMDhDNjNCMTBCRENCRTZEODE1Rjk0MjdFM0NCOERGNjcxM0MKLToxMEM1MTAwMEJFQzlGRTk1RjJDRDFDNkYwMUZBMEZFM0ZCOEUzOTQ2QzIKLToxMEM1MjAwMEZCNzgyNEJGQkQ3QzNFMEQ3QTA0RUVFRjNCMjI4RUZCRjAKLToxMEM1MzAwMDVERDBENzMxOUVGOTJDRThFQkY4N0MwRUY0NzU3Q0ZGQ0EKLToxMEM1NDAwMEFGQTBBRkUzNzMwMEY0NzU3QzFFMDE3RDFEOUY0NzQxRDIKLToxMEM1NTAwMDVGQzdFNzRCQTBBRkUzRjM2NUQwRDdCMURGOEY0MDVGOTQKLToxMEM1NjAwMEM3RTcyQkEwQUZFM0ZCQTc4QkY5RjlENzNEQzUxRUQ5RDEKLToxMEM1NzAwMDBDRUJFREI2QjE5RjIxNUQ4NTRCNDU1QzU4QzRDOUI2NDcKLToxMEM1ODAwMEE1NENBNUYzRERGOTI3QTA3MkQwQTcwNjk1RDA2NzEwQkEKLToxMEM1OTAwMDFGRTEwQzI3QjUxQjRDQkVGNEM3RkZDMEYyQjY0Q0IyNkUKLToxMEM1QTAwMDQzOThFQUZERUUxMEY0RUJGQTYyQTZCRjE3OEEzRDc2RDcKLToxMEM1QjAwMDQ2RjJGRUVDNzFFNjU2NDA5Rjc5NkI5OTMyMTNGREE4NjYKLToxMEM1QzAwMEU3RUY1MEZBQjEzQzc4ODc0MkZBQzQ1NDY0QkQ5Q0Q4NzYKLToxMEM1RDAwMDM5NUFGNEFFRjcyMDlFNjc5REM5NENEMEUzMjM3QkI1NTIKLToxMEM1RTAwMDc0RTg4RjZCMjM3QTFENUI4Rjc2RTk3Qzg3MkNCQkVBMUUKLToxMEM1RjAwMDM1QTBDRkM2MzY0NUQ4QTlFRTdENDhCRkRCMTREOTNGNUMKLToxMEM2MDAwMDZEMkZCNkVGOTJGRDQ1Rjk4NDQ1RjZGRkNDMUVCNEI3MDkKLToxMEM2MTAwMDRGNDZFNzZCNTg4NUUzOURDQzkyRjU0RDc1NTgzRTFCMTAKLToxMEM2MjAwMENEQUIyQjVFOERFRDA3QTNFM0U3RUVDNUYyRjkwQzM5MzgKLToxMEM2MzAwMEZFRkE1NTU0QjZDOUYyRTNENEZFN0MyQTZGN0Y0QjcxRTMKLToxMEM2NDAwMEVBN0VCNDlCQUZGNzc4OUQyMTdFRkVDMTM5QTZFOUUzNkYKLToxMEM2NTAwMDM5OUI4QUFDRTY3QzcwRjJCQkM5MzhCRjI1QzkzNUU1ODkKLToxMEM2NjAwMDVBRkNBNUJBMzgzRkY5NEI2MTNFMUJGMkQ5RTc0QjUzNTAKLToxMEM2NzAwMDI2QTFEQzNEOUJFMThGNkJBNzJDMkMxQUMxN0ZBQTI5MzgKLToxMEM2ODAwMDNDREZERUNENDI5ODFGOUYyOERFMjdGNkYxM0M3QUJCQzcKLToxMEM2OTAwMDRGMUQ5NjQ3N0YyREZFNDQ5OUY3MjBGRDg5QjU0REEzODgKLToxMEM2QTAwMEZCMTM2QjRCOERGRUM0MzVBMjdFMjQ3RkUyMUE5MzNGQjEKLToxMEM2QjAwMDcxRTUyNjUzMUMyMkY0RkVGQzg5NzU2Q0MwODY3NjE4NDEKLToxMEM2QzAwMEQzMTRFMkEzM0E3N0ZGOEIxM0QxREVCRkUwMjU3RjIyOUMKLToxMEM2RDAwMEYzQkU0Q0ZFNTY3OTdGMDJGRjZGOTk4M0Y3Q0Q3OEY5NTAKLToxMEM2RTAwMEFEQkIxNDBGREExNUJENzcyOTEzRjE3OUU2MkVFNTQ2QjcKLToxMEM2RjAwMEU0QUYwQjc3Mjk2RUU0QjdDQjczRjkzRDk4RkNCN0ZEMzcKLToxMEM3MDAwMDJGN0JGMUJDRjU1OEZDMUMxQ0MxN0ZDMTUwNDVCMDI5RTIKLToxMEM3MTAwMEM1REIwQkUzOUNCRDRCMTk4N0ZENTdERjk3Njk0NzdBNTMKLToxMEM3MjAwMDAwQkQ1M0QwMjNEQjgzRkM2MjRENTIwQ0U1QkM0OTkyMjMKLToxMEM3MzAwMDFFRjczRThDRkMzMTdGQkNFNDk3NjU3QjkwNUY0QkVEMzAKLToxMEM3NDAwMEIyN0YzQjk1NTc4NjE0RDFGRURFM0REQTY0RTBBRjA1M0IKLToxMEM3NTAwMEIyRkQ4NDNBQUM1Rjk2MkRDN0RCNEZFM0NGNEY5MkU1MzUKLToxMEM3NjAwMEFGMTJGRkY1NDRDN0ZCNUYzNERGRUIyODIxQTlGQzAwQzMKLToxMEM3NzAwMDhENTc1QTI1RTVEOTc0MkE3N0Q3QzlGMTVCRjc2MjVFRTAKLToxMEM3ODAwMEVDMkE4QkVDN0YxQkYxRkY1QTI2Q0FBOEJGQzM3RUZGQTEKLToxMEM3OTAwMDlGMzgxRkQ2Q0RGREUzMkFFNEE3M0JBM0Y1N0Y3QzE4ODUKLToxMEM3QTAwMEY5QUQ0RTk0OUI5Rjc5NjIwRkQ2RkZDREVGRUYyRjNDRjIKLToxMEM3QjAwMDlGQjlCQzlBMEQyRUJBMjEyRkM2MTdFNjczQTVBRTkwNkQKLToxMEM3QzAwMEVCOUQwNTJENEZBMkY4NjI3NUFEMDdBQ0M4OEZCMUI4Q0YKLToxMEM3RDAwMDVBNUE0RDEwRTlEQjY5QTVGQ0I5QTA4N0REMUEyRjlGRDUKLToxMEM3RTAwMEZGMEY3M0Y5RjlGNDg1QjkyRTgzQkMxRTM5QkUxNjdGOEQKLToxMEM3RjAwMDlDODY0MjNFNEVDRjAyMTZEN0NFM0QzNDZCQzFFNkI5ODEKLToxMEM4MDAwMEY5MzFCRDAxNTU0NDNCM0M0QkUwNjk4MUU3N0IzMzQyNDQKLToxMEM4MTAwMDNENTg4RkIyMEJGRDMwRDJBRkJENDRFNDEzNzc5NDdDMEEKLToxMEM4MjAwMDNEQjgwMEVGMkYxNURBRkNDMjFEM0VBODhGRjdBQUUyMzMKLToxMEM4MzAwMDlFRUJBQTA1M0NDRjJCRDRFQjIwN0JBREE2NDdFNDkxMjEKLToxMEM4NDAwMDU4NUQxNDhGNTA2RkIyMUZBMEI4OTk4OEE3ODYzMEVGM0IKLToxMEM4NTAwMDM4OEJGMkJBNDZCRERGQTE5QUUyQTg5RDYyQkZBNUIzQUMKLToxMEM4NjAwMERGQTUzOEY1REE1Nzc4QkVCMDhDNjNENzhCNzVBRDQ1NDgKLToxMEM4NzAwMEI5MENFQjZFNkM1MjIyMTZFOEQ3ODg4MjA3RTNCQTNFRjkKLToxMEM4ODAwMDE2RjE2NkM2RTJDQTJCQ0JENDAxM0JERTBCMTNGNzMzOUQKLToxMEM4OTAwMDk4RDA4N0EzRjFGMDFBNkYzRkU2QzdBODVBODI1RkMzMEEKLToxMEM4QTAwMDc5RDg0MDkwRjJFMjMwNUU5NEM5QTJGMTY3Mjk0N0FBOTQKLToxMEM4QjAwMDlBNkZCODBCRTNENDNBQjk0NTcxRUE0NDM2NEM2RTkwOUUKLToxMEM4QzAwMDVDODhFNjM1ODkzODdBMzQzRjQ3QzgwMTE5OUY2RTEwNzUKLToxMEM4RDAwMEZCNUExRTk1MDMxNTRCNTBDRjREQkM1RkM0QTk0NUZDQjgKLToxMEM4RTAwMDU5QzZBOUFCNENGN0RBMUEwMzBCQzc5MDNGRDdBRkZBN0EKLToxMEM4RjAwMDI5QUQyNkRENzg5RjI5RDE4NDg3QTk0NUZDNUVBNThDQ0EKLToxMEM5MDAwMDUzQkYzMkQ3MTg2RkJFREZDNjQ4RUVGNjY0MTlFOUFFRTIKLToxMEM5MTAwMEE0ODhEQjNEOUYyQzkyN0VDOEM0ODEwNEQ0QkY5OTkzMjgKLToxMEM5MjAwMEVDOTA1RUY0RTc4Q0U1RjYwODVERTYzMkY5NzVENEI2NzYKLToxMEM5MzAwMDU1RTQ3RkM0N0EwNUU4NTBGMUJERjQ5RjI4OTdCMTVDQjcKLToxMEM5NDAwMDA0RUQ1NUJDREY4MkY4NzA1OUM4MUU5NUZFMUY1NDUzODQKLToxMEM5NTAwMDE2RTU5MDFGRThEQzVDQ0MwMzY5QUJBNzcxRTQ3REY2QkIKLToxMEM5NjAwMEM3MTNFM0YzQzdBRkU3NEEzREExREY4NkVENTY3OTVFMTMKLToxMEM5NzAwMDNBODVGM0ZERDk3RTIwNjE4NzQ1RjUxODJGQ0Y3RjQ5OTEKLToxMEM5ODAwMDlERUI5NTcxMDkxQkJGRUZDNzZDNEI2NzkwQkZFNEJENzIKLToxMEM5OTAwMEI5RTQxRkVCRjdFMjNBRTRCOUI0RUM3QjRGRDEzOTc2NTYKLToxMEM5QTAwMEVENzE3MERFQUZBMUYwREY1Njg1Mjc4QzFDQzc5ODFBOTkKLToxMEM5QjAwMEUwNzhGMkNEMEMzQTMwNjRDRTI2QzhCODgzRTZDNDkwNTUKLToxMEM5QzAwMDc4NTRDRUUyNDYwQTBDNzJCNkFFRTVCRjgxOUM4REU5ODIKLToxMEM5RDAwMEZEREUzQTFDRUZFM0I2N0VBMEE3MDU4NEQ3NzJFRTdGOUEKLToxMEM5RTAwMEZCQjhBREZGMDdGOURBNEFBNEMzMEY3QjlFRUZFNTA3NUEKLToxMEM5RjAwMDlCNzE5RUFEOEE1NkVCQTI3QjMxQ0NBRjhDMUUyRkRDOTcKLToxMENBMDAwMDg4RURDREYxQzJBQkY5MzFGRUVFQjcxOERENkZCMUFCRjkKLToxMENBMTAwMEUwQTNFOUI3RjgzMkMwMEVDRjZCRTBBNzQzQzQ0RjAxRTMKLToxMENBMjAwMENFNEY3RkVCRTcxRkVDRjc0N0I4REZBRDRBN0YyNEQxNEQKLToxMENBMzAwMDdBRkRGRDA2NEZFNDg1NUVDN0YxQTdBNjNCMUI1MDlGMUMKLToxMENBNDAwMDgxNzlCQ0M4N0Y1MTdGMDhBRUJCQzBFMDBGRDlEM0YyNUIKLToxMENBNTAwMDIxRjg0MzYwOUY2RjExNUVDQjM4NUVGRjA2RjBBNjE0OEQKLToxMENBNjAwMEUyN0UzNEFFNDdGQzBERDI2NTQ2MjFFMkIwOUZFRkVGODcKLToxMENBNzAwMEFGMzBGRjBDOUFGRjEwQTc5NzI4N0M4NDlFQTQ4MzRGQTkKLToxMENBODAwMDVEQ0I1RjA3M0VBNUI0QkVFRkYyRjU3RDBDRjBCOTgyMzkKLToxMENBOTAwMEU4RDVDRkQ3N0IzNUZCN0JDMzVDQUVCNzQyQkY3QUVBMjQKLToxMENBQTAwMDk3QzdFOTYwQTNEMEFCQzEyRTVGNzg4MzM3NjY5NzhGQjUKLToxMENBQjAwMDlEQUQzNTE2RjJGODczNTNBMTIxQ0Y1NDVCODdFNTUxMzQKLToxMENBQzAwMEVDRTY0RjE3QTY4RTZBMzdERjhERjUxRjE3QkI3OThGRkYKLToxMENBRDAwMDgwNUIyQzZFMTNBMTdCNzEyMEMxMjlCRTVDMkZEQUY2MUUKLToxMENBRTAwMEI2NTUyRjlFODY3OTM1MDA3RjJDM0I3MDNGNTZERDdFRjQKLToxMENBRjAwMDMyNTQ2RTZGOUJFRUFCQzlFRjFEQzg3REE5RDZCQUIxOUIKLToxMENCMDAwMDAzREUxODNDNUYxQkQzNkFDN0ZCNTBDRDVBNEEzN0RFQTEKLToxMENCMTAwMEJCNUREODc1OTlGMjA2RUQ5QUMzOEI3NkUxMjczQ0RFQjIKLToxMENCMjAwMDZFOENDQjU2NkI3Q0ZGRjYxNjM3RERFRjkzRjdEREU0QUEKLToxMENCMzAwMDNEOTRFNjgxNjkyRkQ5RjFERTFDRDgyRjY5MzA3RTY1REUKLToxMENCNDAwMDk5RUQ5QzdFREYwRUQzQkQxNEQ1NTQ2RUZCNTlFNkY2RUQKLToxMENCNTAwMEEzQkFGNkRGMjg0QzM2RTQzNzgzN0U1MzRFREZFOUU4OEMKLToxMENCNjAwMDUyREMyMkNGOTdGMjMyOUFDNTE4MUQyNTc3MkU0NkZGNDgKLToxMENCNzAwMDI1RTg3MTVFODRDM0MyOUQwRjBFNjIzQ0NEREU2NUE1QzMKLToxMENCODAwMEQ4RjlFRkRCQkREQjhGMDI0QjI1RUNCNTkyQkZFMUI3RTcKLToxMENCOTAwMDZEMEFGRkRFNDcwNThGRTNBRjE1NzE3QzY2RjIzMzQ4RkYKLToxMENCQTAwMDdGQjg4NDYzQzIwMzNDRkZDMzVFNzBCNjhDRUUzN0Q2OTkKLToxMENCQjAwMEFEMUJDQ0U3QjQ0M0ZFMDY5NUFGOENDOUVGNkY1NDA5QUIKLToxMENCQzAwMEJBQUEwRjVDRUVDMjdFQ0IzRDE2NDNGRTkwRDkxRkExRTAKLToxMENCRDAwMDMyNzM5RTNDQ0ZFMzU0MzU5RUM3QTlGQTc4OUU3QzIyREYKLToxMENCRTAwMEQzRTg3QjFEODk1QkFBMDk5RjU1MUFDRkUzMDQyNTQ5MjkKLToxMENCRjAwMDdDNzc4QkUzQTUzMjcwMEZFNUY5OThGRDA4OEUwMkEzRDAKLToxMENDMDAwMDFGQzI0Qzk3NjY3QzlDMzZFMUUzMzE5NURGNEZFQTNFQ0MKLToxMENDMTAwMDYxRjU4N0UxNzVGNzQzNEQzREU4M0YwRjNGNjQyMTNGRTQKLToxMENDMjAwMEM2MDU5OTFGMDI4QjQ0N0ZGRTBBMTY4NTJGRTlDQkREQ0UKLToxMENDMzAwMEFEM0M1RjQwRTI2NUM1NEU5RTM3NDJBRDBDN0VGQjc0NTUKLToxMENDNDAwMEE2RkY4RUM3MEFFMTU3Qjg5M0Y1RDM3RDg3RDU2Q0M4ODgKLToxMENDNTAwMDg2N0NCMDA2NURFOTU2RjRDNzc4RTlCOTk2ODVCNzMwQTkKLToxMENDNjAwMDgyNUZBODI3MTNFNjdCQUM3NUJDMUZGRERBMDMzN0RBQjkKLToxMENDNzAwMDUyREVGNDcxM0IyMjlFRkUxQThCRDdBQUVDNEQ5RDlGOEIKLToxMENDODAwMEZGRUY3RUFERjdFQkQ3QjI4NkU5N0VBOUM3MUU5OUEyNkEKLToxMENDOTAwMDVDRERBRkY1MjM4QzRCRThGQzVBMTc3NjhBRUY2RDg4ODQKLToxMENDQTAwMEZCMTY4M0I2RDY0OTNCNUREOENFNEJFN0U1OTgzRDJCQzYKLToxMENDQjAwMDE2MjMxRDFDREJGQjAzQjdCOEZGQkE2OUUyRThERjg1NkEKLToxMENDQzAwMEM4Mjk4QTkzNEY3QTdDMkVFMzc5MjA5OTQzNzQ4RkZBOEUKLToxMENDRDAwMDhDQ0Q5ODk3MUJGNTEzMDVFQ0MyMkYxMzlBNTc5NDFBMTUKLToxMENDRTAwMEQzOEY5OTNCOUFDNzU5NUM0NEZFMjM3RTVGNUJGQTk5QzgKLToxMENDRjAwMDlBNzM0MzBCRjA3REYxMjU0MTBGMTU0QTQ0ODFGRDU2OEYKLToxMENEMDAwMEJBOTQxNzE1NkY2QzdFNjZDRUEzRkY3QjNDOENDQjA5NjMKLToxMENEMTAwMDg0MEZFNjMzMjVGMEJDREFDMTRDNTY3QjM4MEU3RTI2RjQKLToxMENEMjAwMDE3NzMzOTNBMzgzQjNFRkU2NDNERTgyN0Y3MTZBNTcyODMKLToxMENEMzAwMEZCNjkwQ0Y3MkJGQ0NBM0VCQTVGRTE4QkYxRTg0NkUyRDcKLToxMENENDAwMEY3RDA3Q0VENEIxQ0VGQkM5Qzk0MTNFQUMwRjY5REExODAKLToxMENENTAwMDIwRTVFQkJDRDU2N0Y1NzYyMEZDMDc1QTVGMkI4MEYyMDcKLToxMENENjAwMDkyN0ZCMkJBMzExRUZFNjFDN0Y5NTJFNzY2NUU1MzlDRUMKLToxMENENzAwMEVGQjI4MEVGOTk2ODVFRjdBNjdBRDQwNzdCQTU3RDI2OEYKLToxMENEODAwMEY0Qzc1NUUzNzQ2NTM4OTI4QjRFRjBGNkRGN0I3NkVFOTAKLToxMENEOTAwMEJFQjAzQUIyQkU3OUY3NzM3NTdCRjFGRUFERDQzN0ExNjAKLToxMENEQTAwMEJDMUFDQkIyM0YwQjU3NEMyQTA1N0Q3NjZEOEI4QzI3NzYKLToxMENEQjAwMDU2RUM0M0ZEMzYzQTVGNzhGOTNFQjQ4NzJFRDg4Q0UzQzMKLToxMENEQzAwMDRCN0RGNUZGM0VCQjY4MUY4RTE3OTRGMzg3MTdFRDQzMkQKLToxMENERDAwMEZERjdBQ0E5M0Q3RDlGMTJDNjdCRkREOTUyNkFERkM4MjUKLToxMENERTAwMEU0RjhBNUI0REZBODVGMzFCQzcxMzVGNjNGNjk5N0U1N0IKLToxMENERjAwMENGNTIzRUMxRjY0QzNFREVCMUU3MzZFRTQ1QkZEMTQ3REQKLToxMENFMDAwMDZEM0QxRkY2RjhFRkI3RkQ0ODdBRkYxOTFCQ0YxRjBDRDkKLToxMENFMTAwMDgzOUVGNjU4MjZBNjUxRjY1QjM5RjM2OTc2MkJEMDdGQjAKLToxMENFMjAwMDkxQTZEMDc5RjQ1QkY0ODM0M0ZGQTBDQjIyRThFRTFGRjgKLToxMENFMzAwMEY2QTI0RUJGQUE0NEVFRjMyMEU1ODE4QzQ0NzcxQjAyOTQKLToxMENFNDAwMENGM0M2Q0Y0MTczRkIzQ0FCMDZFQjZCMTFFRkJDQjc1QzYKLToxMENFNTAwMDlGQzBGNkIwRUU1NTFCM0ZFREMxNzVBRTkyRkU4RDcwRDIKLToxMENFNjAwMEU3NUVEQzVGNzc4QUVDMzc2RERGNjhGMzg2MDJEQkY3MUQKLToxMENFNzAwMEUyQkNBQkEyRjM3Qzg1RkFBRjRBOTRFMzdEREQ5OEJGQjgKLToxMENFODAwMDEyREU0RkZFOEZEOEJBRDYxQkUwRjlGQzczRkIwOTlFNjkKLToxMENFOTAwMDQxNzc2NDBCOUUwRjQxMEZBM0YzRjhDRTk2MEVDQUVGQjUKLToxMENFQTAwMDhFRjIxMTdCMjA4M0Y4QzgxMzJERUYzNUYyRDE3REI0QkIKLToxMENFQjAwMEVFRUJCRDJFMzg0RkQzRTdFMUY5RTdFMzc2RTJGNURGOUQKLToxMENFQzAwMDM3OUM5M0I4RUYzRTJFODcyNDFERDVCOTY1M0Y4MDNGMzAKLToxMENFRDAwMEM4OTNCNTVFMzlFRURERjUyREQzQUZDN0JDRENERTBERjIKLToxMENFRTAwMEZFOEE5MTdFMkJGOTA5MzhDOUM0M0ZENzM2NUVBN0VCN0QKLToxMENFRjAwMDVFQ0FBMzY4MDZCOTFFMkYxRjdCRTM1QzQ1RkEzMzZGMzkKLToxMENGMDAwMDI1NzgxNjQ4RkI5OTQ5QkQ2M0YxM0M5RDVGOEU3OUEzNTYKLToxMENGMTAwMDdBNDdDNTNDMzI0MDhDN0E0NzM3RTY1OUNEQTI3QzJFMDEKLToxMENGMjAwMDkyOUIxQUQ0Nzg3NDc5NDAzNzE3RjNGODVBQTdDODkzQUMKLToxMENGMzAwMENDREJDQ0Q2RUJFREVERkYzOTlGQUZFNzFCRjNCOURDRDMKLToxMENGNDAwMDk0REZCNzNEQkY0MUExM0NCMUNFQkVFQzMxNzhERkVERkYKLToxMENGNTAwMDVDQkE3NzNCQ0FCNUMxNEMwQjdEQTdFMDhDRjhCRUU2NDYKLToxMENGNjAwMEUwMTcxRDE5RjdDMUZCNTMxOTRFM0ZDQUFCNTMyOTNCQkMKLToxMENGNzAwMEU5M0I2QUU3RkM1NjQxOUZERjc5MDNGOTU5RTc1NzBDMTMKLToxMENGODAwMEEzNUM5MTdFQzM5NkVGNzc5MTFGRjBCNDk3OTc3M0ZGRTAKLToxMENGOTAwMEVEOTkzN0YwMUM2MzNFRjNGRENFMDBFOTMxRjY1QkUxMUQKLToxMENGQTAwMDE4QzFCRUUyRkI5QzQ1QTJCRTZBREI1MzVGQURDNjMxMzEKLToxMENGQjAwMDg0RkUyMkU1QTdGOUJFMjdGRUQ4RjRGQTU3OEY5NUVCMzkKLToxMENGQzAwMDVGMUVERUNFQzM4NjNBQUU1ODcwNUM1RTc2OEVGMDVEMzQKLToxMENGRDAwMEQ4NUE3OTdGRDlBNDRGNTU5OUVFMjczM0YxMUQ1NEE5MUEKLToxMENGRTAwMDhGMTc0RDY4RjRBMzFENTdCNEMxQTgxRjlERUI3OUExRkQKLToxMENGRjAwMEFGMDBFRDVBQkZENThEQzdFNEVEM0U2M0JERDRDMzE2NzcKLToxMEQwMDAwMEY3M0M0MkY2MjhFODg1ODY3OTY0RkVFREVEQUNCRjhCRUYKLToxMEQwMTAwMEVFODU3QjVGM0U2QTlEMThCMzVCM0FERDU1QTRBNzM0NkQKLToxMEQwMjAwMEZCQTAwNEZCMzlGOUE1RDJFNDdDRDQwRkZBQUNGODQ1OTcKLToxMEQwMzAwMDU4OUU3QkFGREIwN0I0QjM1OTI2RDAzOUVENTcxNDdEMkEKLToxMEQwNDAwMDVFRDBFNkZEQzZCQzIwNUU4RUY5RTNEQkY2MUJGMkU4OUYKLToxMEQwNTAwMEMyNzdBRkMxNzJENENGQzk1NkVFNDczRThBRkFDNUQ4NUYKLToxMEQwNjAwMDUyQUEzRkFGMEEzRjE4NkJEODhGRTc1OUNDQUY3NzlBRDcKLToxMEQwNzAwMEY4M0FFQTI3NjM0QkY2MjMzRDA1QTNFN0RGMEVDQUZCMjgKLToxMEQwODAwMDVCRUUxNkVCNjEzRjIzRjlEMUE5NzE3OUYyRENGNzEzNUUKLToxMEQwOTAwMENFRTBGNzgxREU2RjdCRTBDRjY3ODkzRjgzRkNCQzMzNTYKLToxMEQwQTAwMEQ3MTc5RDg4NzQ4RTExN0ExREU2OEI5QkY5M0MzOUMwODkKLToxMEQwQjAwMEYzRUZDQUI0RDk1REE5NUVFRUJGNzIwMDdFQjRENUQ2RDcKLToxMEQwQzAwMEQ1RTgzNzg4RTVBQjE0RDI3N0QyRDY4RTkwNUY3MjVCMDUKLToxMEQwRDAwMDgwRjNFRjJCRjM0NkNGNTM1OTJCRjI1NDQ2MUFBN0E5RUUKLToxMEQwRTAwMDg0RTcwMzBDMkFFRTFBMkU5N0FEMENFNTcyRTk4M0Q5N0EKLToxMEQwRjAwMDJFOEM0REM5NzZBNTI1RkMxQzc4NkY4Njc2MUFDRjFCMjEKLToxMEQxMDAwMEIzM0ZFRDAyRkFEMzg4Q0ZCOERGNjNBOUEwMUQ3NTI3MUUKLToxMEQxMTAwMEZGNUVCREZDOUVDOUY5MTQ5NzdGMzNCQzVGREEyN0ZDMjQKLToxMEQxMjAwMDE1RTU3RjlFRkZFQzU3RjM4Q0RGMTUxRDI5RkYyMTIwQUQKLToxMEQxMzAwMEQ2OUY1NzcyN0RGMjFGMUU0RkQ0MzQ4NEQ3MTBCNDQ1NEEKLToxMEQxNDAwMEZGRTBCMDdDMDg5MUU3MjBGMzIwMTIwMzNDRUY0RUU2QUQKLToxMEQxNTAwMDQzNzQ4NjVCMDk3RUQ3RkQ5RThCMzhGRjgxNEVDNzA2RTAKLToxMEQxNjAwMDkwNEU2QkI5MUM5MTc0NzY3NDlFOTdEM0RGREI3RUEyRDAKLToxMEQxNzAwMDNGNDk3N0QwM0UzNTgwNzJBNDg2QjcyRjdBOUI3RkY3RTAKLToxMEQxODAwMDQyRUExN0M5Q0YwREVERUQ5ODRDNzJFOEE2ODA1RTBFMEQKLToxMEQxOTAwMEI5QTJGNzIyMzMwMjcxRTREMEYxODVEQTI3MDIzQUZCMTMKLToxMEQxQTAwMDA4RkE2NzA3NTJFM0Y2OUYxMjg4NjMzRkZCNjYwNjdEMjUKLToxMEQxQjAwMDM0NkVGNDNFQTczNjBEQ0JGRkRERjMyMDU4OUYzOUVGRDgKLToxMEQxQzAwMDg0OUYxN0U2QkMxM0E5MEYzNkZERUIyRjU2NjNERUM5MEIKLToxMEQxRDAwMDk1MDU1QTE1QzcxMzg3NkY1NEFGMUNFMjdBNEU0QzlGQzIKLToxMEQxRTAwMEY0NzMzQkVDRkFFQjhCOEQzNEJGQzhBN0Y5MTBDNkRGQTQKLToxMEQxRjAwMEE4MUY1RkVBNEZGMEZFOUU4MDJFOEZFN0EzNjZCRkMxOTcKLToxMEQyMDAwMEZBQjYwNDc0NzE5MzBGRDBGRjAxREE5Rjg4RDdGQzA1M0EKLToxMEQyMTAwMEQ2RkIzMEFENTdFOEZEMUY0MTc4N0UzQjkwRkE5MTVFMUEKLToxMEQyMjAwMERGMEJCNEJFMEE3MTNFQ0Y2M0YyREM3RTg5REUwRkEzNTIKLToxMEQyMzAwMDgzNkJBNkZGRDcwMkJBQjhCOTZFRENFM0ZBRjk0NkIyM0YKLToxMEQyNDAwMENGQTFERDRGQTg3RkM1MzBGRTM5QUQxRjc3OTRGRTY3QjMKLToxMEQyNTAwMDY4OUU2OEJCNjhGRkIzN0FGQUJDMEU3Q0ZFNEIzRDdFQ0QKLToxMEQyNjAwMDNGODQ3M0U0RjdCNERGQzk3Q0ZDMzc4QkEyNzBGQzAzMDYKLToxMEQyNzAwMENEMkJERUZGREQ0Rjc2NTUzQUY3MTYyM0JDNUEzOTNERUMKLToxMEQyODAwMDVEODM3RTNEQjU5OEZCNjc0M0RDM0YxQjk2NzA5RjI2MTAKLToxMEQyOTAwMERFMEZFMTdERDJBNUYzMzg1REREOTIxNzlDNUU5QzFGMDkKLToxMEQyQTAwMEIzNkZBM0Y2MDg3Qjc4MUZBRTM3NkE4RkUwNDBEMzBEQ0IKLToxMEQyQjAwMDcyN0U5RkRFREU1OEY4MkYwN0Y3RTE3QUFEMEI3OUZCMUYKLToxMEQyQzAwMDgyNjJGNzFBOTRCM0U2MzJFODIzNDVCNDlGNTg1RUU2Q0IKLToxMEQyRDAwMDNDMkM1RjZENUM4Q0ZGRTMzQUNERjE3RjVERkRBMjYyN0IKLToxMEQyRTAwMDYzRkUwMkU5QUZBMEI3MzkxRDgwRTNEN0VCQUMxMzFBOTgKLToxMEQyRjAwMEExNUM1OUNDRjU1N0QwM0ZFMkRFRUJBRTJDOEVGQTExOTMKLToxMEQzMDAwMDJBOEI3NUY5MTgyNzgyNTZCQTFGMThENTUzQzIwOTY0OUIKLToxMEQzMTAwMDRGQzVGNEE4NDNGQjhDRjczNkJFNERFNTEyODFERkM2M0UKLToxMEQzMjAwMEUyQzNGNTYyOUQ3N0QyM0UyNjg4N0Q1Q0JEN0Q4OERBQkEKLToxMEQzMzAwMDdCNzhGQjM4RjU0REI0Q0U3NEJFNEVFNjdBRjk4MjU1NTMKLToxMEQzNDAwMDE3MEY0MzRFQjM2MDlDMTdGRjA1RTc0Q0E5NkQ1OTMxODkKLToxMEQzNTAwMDdFMjNFQTQ4OEZFMkI1NDJCOTcxOEZDNEVGRjdGNzE5MUYKLToxMEQzNjAwMEVENDNDRTdGMkIwNUJENkYyRTNFNTI4RkY4NUJGOUFFOUQKLToxMEQzNzAwMDVDQUY4REVDQzVCQzY4MUVEMzExRTI5RkQzQzIxRkUxMjgKLToxMEQzODAwMDJFODFGNkU5QjRCRTM2NUFCRjk3QUZFRjQzMThCRjhCNzQKLToxMEQzOTAwMEM2NjcxQzNFQjUyQzZDOUIzODRBOUU0NTlGQzAzRkY0MjcKLToxMEQzQTAwMEJCOUZGQTM5RjlCQTZBNDMwQUU5RUJDMTI2RTA2OEMwQzMKLToxMEQzQjAwMDczRkQwOTE2RDdDRkY0OTU2MkJCRUNGRjE1RUFFRjEyQTcKLToxMEQzQzAwMDc2QUMzRkZFN0REOUREQjFCOEM5NkU2QUVGRTZGMzU5QTAKLToxMEQzRDAwMDQxRkUyM0RFMDJBMUUzMEJGMTNCMTBCNUUyN0JFM0I1OTYKLToxMEQzRTAwMDY1MkE3RDZGQTFCNkUwRDI1MkUxMDdBMUY4QTY4QzgzMzEKLToxMEQzRjAwMDk3M0UzMDk5RTI5Qjg5NjUwOURDNUU3NDFBRkY4RTQ1ODEKLToxMEQ0MDAwMDcwQUQ4M0JFMjcyN0JGNUIyQkYzMzJBQTk4RjFGQjcyNjYKLToxMEQ0MTAwMDcxRTI1QjA2N0Y4QkY0OEI0NEJGMjc2NzREMjdGQkQ2RjkKLToxMEQ0MjAwMEJFNUZGQ0ZEMjdEM0Y3RTMxMkRCMThGOUI3MUM1REZDRTgKLToxMEQ0MzAwMDFFQjgzOTRFRDVCMEE5RjVCNTQyQ0NGQjUwNkQxNDk3NDYKLToxMEQ0NDAwMDM1QzczM0NEN0YwRjYzQkU5MzY5NjM3MjI4MUZFNUY5M0IKLToxMEQ0NTAwMEUyRDQ1ODFFQ0E1QjdCQjI1REM4ODc2NkZCRjlBRDkxMEEKLToxMEQ0NjAwMEVDRTczRDQ2RkI3OTUwREFDRkRBRjVCMTlGNEYxNDFCNUMKLToxMEQ0NzAwMEVGMEZFQ0NGMERGRTg0RjBBQzZBNzRCRTFEMjkyOTVBNjMKLToxMEQ0ODAwMDhBN0U4NDc3NDQxRUM1RDk4NzI2MkM0MTdGNTRCODhGNjUKLToxMEQ0OTAwMERGNTczODI3RTJGQzMyREU3RkI2OTBCOURDRjhEQ0UyRjkKLToxMEQ0QTAwMDIwNzg5RTVEOTcxMkMxMjM3ODRDNTc3MzA1N0U1NzUwQTQKLToxMEQ0QjAwMERBRDEwODc5RjQ3RjU1OEE3RDlBRURFREM0MDJDMEU3OTAKLToxMEQ0QzAwMDJDNjIzM0IyQjNDRkJBREQxNDE3QThFQzExREY5NzEwN0EKLToxMEQ0RDAwMEY5MDJEMkNFQUUxNEY3RjhENzk2RjE3QkQ1RThCMTQzNzYKLToxMEQ0RTAwMDdBOTBERjBGQUMxNDc2QjhCNEM3MDc3RUM4MTQ3RDFFREYKLToxMEQ0RjAwMEMwNTJFNjI3RkFBRDAxQzJDMEU3NzJGMTNEQzU1QTM3MDYKLToxMEQ1MDAwMERCODI4QkZBQ0Q4Q0QwMUZFOTlDREFDM0U5ODQ2RDU3OUUKLToxMEQ1MTAwMEU5RUY1QzlERUQ3QjkwQ0VENTkxRUUzMTM4ODRCRjgxRjMKLToxMEQ1MjAwMEU0RDhDNDBGQzVDRTc3OTVFOENFOEY2QjM4NkZDNjUxNUYKLToxMEQ1MzAwMDdCOTVGMzcxMTdERUZGNEQ4RDdENTc0MkRFOUJERjlFOUQKLToxMEQ1NDAwMEMyRkQyODM3OTc3MDNGOTNGOTI5QkYxQkYxN0VFNTA3OEQKLToxMEQ1NTAwMEM4Q0ZBQzEyODQ0N0NDOUVDRjJFQjkzNkY5Mzk4REZBOUMKLToxMEQ1NjAwMDg5RUY1NkE0NjExQzg4OUY0QkQzNEJCODVFRTAxREMzNjYKLToxMEQ1NzAwMDgzQjgzREY2RDFGMzAwNzI0QjQ2ODlFN0IyQUJFNzExQjEKLToxMEQ1ODAwMENDQzNGOUNDRkQyRjBCN0RBNDM5MzdBNDk1RjA3ODNGOUYKLToxMEQ1OTAwMEQxQUQzOURFMkZEQjlENDRGRjU0OUNGM0Y2NzMyNTVDM0YKLToxMEQ1QTAwMDdFOTcwMjg5NUE3Mjg2REZFNzdGQkQ1RDNCODMzQURFNTQKLToxMEQ1QjAwMEM5RjY3MjdBOUU1MkMzQzk5OEJGRjU5QUI4Q0YwRjhBM0UKLToxMEQ1QzAwMDE2RTUzM0M5QkMyODM5NkU2RDVERTk5OTBCQkFGM0FDMjkKLToxMEQ1RDAwMDcyRDFBMzk0NjdENkU5M0JGOEIyMDJFQjNDMjdGMkJEQzcKLToxMEQ1RTAwMDA2OTNCRDc0Q0U4NThGRjNFRjRCMkRBRkI5RURDQzA1MEYKLToxMEQ1RjAwMERERjk2MTVFMkZFNjQ1ODU4MUQ1Mzc5NDcwQkZFNjBCNzYKLToxMEQ2MDAwMEE1OEU4MUY5NzlGOEJEMjZDRTg3NEQ3RDY3RTkzRTRDMjAKLToxMEQ2MTAwMDdENUIwMzBCQ0RBMEJDMjkxNUYxN0I2QTFFRkZGRTQyOEEKLToxMEQ2MjAwMDY1ODE5NTg1NzVFQjFBM0I1QjVCNTdDMkZEM0VDRDQ0MkEKLToxMEQ2MzAwMEE3QjFCQ0MwMTY3QzVGNkFEM0M2RTBERjlGOTRGRTQ5RTkKLToxMEQ2NDAwMDE5MkYyODJERjkxNUM1REQwNjUzMThDRDFGRjRCMDA4ODQKLToxMEQ2NTAwMEM2REQxNzZBRjdEODg3MzBFRUUyRjE5MjdGQTRBMUM0NDUKLToxMEQ2NjAwMDRCRUI2Q0VDMzk0MEVCNDkwQzVDQTZGNTk0QUEwMEVGNEYKLToxMEQ2NzAwMDcxQzNFMTJERjlBMjVCQzA1QkI3NkY4MkY3NDhGQzVCMTkKLToxMEQ2ODAwMEI5NDg0RDQ2RjhCRTg2Rjg4Mjc2M0Q4MjZGOEVBOTk3REUKLToxMEQ2OTAwMDVDRUUzODc4OEZGNjJCMjgzNUMwREJFMTI5MzdFMEFEMUEKLToxMEQ2QTAwMDUzRkJEQzE4REM4RkM0NzNBM0E4N0JBQkM3RkEyQUUyNTgKLToxMEQ2QjAwMEYxNURDMDIzMjMzQ0M2Q0Y4MzM4OEVGOEJBOTlCMTdGODEKLToxMEQ2QzAwMDJGRTFERjk5OTNGOEFBRUZFMkRGQkRBRUVGMkFBNUVGRDUKLToxMEQ2RDAwMEM1RDUxN0RDNjY0RkEzMzg4MEQyOEZGNzI1RDc5NjM1OEUKLToxMEQ2RTAwMDMwRDRGN0VENUEwQTdEREY0RUUyNkY2OTE5RTA0RkI3OEIKLToxMEQ2RjAwMDVFRTBDNzdEMjUzQUJERjMwM0Y4RDcxRjI3QkMwQjNEN0QKLToxMEQ3MDAwMEY4QzNGNkZGQzM3QzRGOTdDNEQxQ0JGRjUyRjE4N0UxM0EKLToxMEQ3MTAwMERGRjNFMUU3RUVDRjg0REMzMDNGRTVCOTNCNjI3RTMzRjcKLToxMEQ3MjAwMDVCQjJBNkU1MDNBQzQzRjIwREYyNkQ4NzgyRjk5MzhBRjIKLToxMEQ3MzAwMDBERTkyQzg4RkM4QkY3RDcwQTdFQjEwNUUzQTFDRDFFM0QKLToxMEQ3NDAwMEQ2OEY2N0UxNkVFNDIzODA5QkJEM0NEMzhFRkNEM0I4QkIKLToxMEQ3NTAwMDI3OTNFODAyRUQ3RjgyQTczOEE3NUY4RTlERDM2N0U5MDQKLToxMEQ3NjAwMDdEMEJBNzhCQkY3NkRDMDdENkYzMEVBREE3NEVEQzJGNjMKLToxMEQ3NzAwMEY4ODhDNUE1NkUyQTBGM0FFNkEzN0Y1NjNCNDBGMkU1MkUKLToxMEQ3ODAwMEU4M0NCNzk0NEYxOUZDQkI0REVGMkYwRTVBQTRGMUJDRTcKLToxMEQ3OTAwMDMxMTkwRjhEMTNGRkY0MkExRjIwRkU2OThFQUI4RTE0RjIKLToxMEQ3QTAwMDBGOEQxM0ZGMzRFOEVCMjNDNTNGOTkyOTRFNkE4RTdGMTYKLToxMEQ3QjAwMDJFRUVDOUE2RjhGMzYyOUY4NUJFNTMyREY1N0UxOUY3QUMKLToxMEQ3QzAwMDdDQTVFNzI5OTVCRThCMzQ1RDYxMjk5OUMzRTNBMzNCMTIKLToxMEQ3RDAwMDg1N0Y4Q0ExNTZBN0RCRkZBOTBDRkVGREVCREUzNDI3NkQKLToxMEQ3RTAwMEZEREQ1NUZDQzE3QzJDMDk0RjkwMEY0RTA3Q0NEQkI1RkQKLToxMEQ3RjAwMDg4RTc2NTU2NjUxRTM2QzNENTJFRUM5MjZCODJBQjhDREUKLToxMEQ4MDAwMEFGREI3Qjk0Qzg2NjI0MEQwRjhCRTZGRkQ5NzU3OEI2MjUKLToxMEQ4MTAwMEZCQkU0Mzc4NjRFQTgwMEJCRkM3RERFODFGNEZGOTY0QTUKLToxMEQ4MjAwMDY2M0MxNEY1RjBCRjRCNTlFNDlFNDM3Rjk3NTJFMkJGMkMKLToxMEQ4MzAwMEM4MzMzQzZGNTA5NUVCOEI5MzM3RjgxN0M3QTc3N0IzNzYKLToxMEQ4NDAwMDMzNkIxNDdDQ0EzOEY2NDg3OEJDMjUyRkI4MTFGOTQ2REEKLToxMEQ4NTAwMDdFQkY0OUJFM0Y5NUMxRTE3QjdFMUExMzdGRkZENDg4MEUKLToxMEQ4NjAwMDRGODBCRjQ2RjdGQTdERUNDMDY2NjUzODNEMTQ4OTdDNzEKLToxMEQ4NzAwMENDMjI1RkY4MUVDQTgzNEZBQ0YwNjBEQzJDMEFERkY0QzgKLToxMEQ4ODAwMEVGMTI3QzNCNUJCRERCRDEzRTNBNUU2NkEzN0M5NTM4RjQKLToxMEQ4OTAwMEY0NDA3RkRGRjY2QUY0MzAwQ0VGN0QxRjBDN0ZBQjBBOUIKLToxMEQ4QTAwMDFGNUI5ODE5ODczRTNFMzA1RUFGODI0RkJCRjU1MDRGRUQKLToxMEQ4QjAwMDgxMzcxRTlGQkVEMDQ3N0NFQUI3QkExMUFGMTI5RjEyQzQKLToxMEQ4QzAwMEJGQzNGMUM5RjUwQjg5RUY1M0Y5REEzN0U3RTdFQkYxOUQKLToxMEQ4RDAwMEFDM0Q4MTc4OEVGMTZGOThEQjMxMkNGRTc3NkYwRThCMkIKLToxMEQ4RTAwMDdDMTYxOEU3NDlFQ0Y3RDRGQ0U4Mzg0RkUxQjhENTlGMkYKLToxMEQ4RjAwMDg4RkZGNzRFMEU5NzcyQjk1QkM3RkE1RjlDODg3NkRGOTgKLToxMEQ5MDAwMDA1MjZGMjM1RkQyRjdCRDE0RkQzOTYxRDM3NUZGM0U0MEIKLToxMEQ5MTAwMEZEMEFGRjNCM0QxRTc2QzAyMkNFNTc4QkNFREUzRDhCRUYKLToxMEQ5MjAwMDc5OUI2MERGOUVDNkJDNEQ3OEZFNzA3RTI2RURCNzE3RjIKLToxMEQ5MzAwMEYzMzdDNzgyM0UyRUYyM0JFQjcwNkM5QzA3RjQ1OThDOTgKLToxMEQ5NDAwMENCMzMzNUM0RjA1RUZBMjA3RTlGNjUxNjdFOUZBNTgzOUIKLToxMEQ5NTAwMEU0NkUyQzBGRTMxRDUzMUUwNjJGNTcwNUE0QkM3MTQ1MjIKLToxMEQ5NjAwMDI4RUYyNjFBRkZGNDg0MENGMTRGMzYzMzYyOTQ3NzA1QzIKLToxMEQ5NzAwMDIxNDNGQzUzRTRFOTQ4RjlCNjU5NUIxMDBBMUJFMjlGQzYKLToxMEQ5ODAwMEU1MzRGRTk5M0FEOTdFNDdBNDc0QkEzRUZFNTkxREQxQkEKLToxMEQ5OTAwMEY0RjFDREYwMUQ1NEFFOEI5NjgzNTQ5NjdFRThDNzA2MDUKLToxMEQ5QTAwMDFFMDhBMTFGREEzNzMzRjQ0QkM0OTNCQzM3MEYwMjQ4NkIKLToxMEQ5QjAwMEMzQkY0MzY3NzVCOTBGQTIxRDBFRjYwMUQzRjI0N0Q2NTgKLToxMEQ5QzAwMEFCM0YyQUNGRkYwRjUyNkJBNTdEMDA4MDAwMDAwMDAwMDcKLToxMEQ5RDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRTUzQzBENzQ1NEQ1QkYKLToxMEQ5RTAwMDk5RjdDRDdCRjM5MzY0NDIyNjIxRTIwMDQxNUYwMkU4ODAKLToxMEQ5RjAwMEQ0NDIxODdFMDIwMTA5QkNGOTQ5MzJCNjIwMDMwNDhERDUKLToxMERBMDAwMDA1RTkwMzcyMkM3NDZEMUI2Q0E5QjRBQjlCODFDNDk4OUYKLToxMERBMTAwMDA0ODVEMEIyREI5RjZEQjcyMzQyQ0ZCMURBQjM3MUVCOEYKLToxMERBMjAwMEE5NDRBNDFEQTQ1NTVBMkFDNjM2Mzk2Mjk3NkFBMDI5NkEKLToxMERBMzAwMDA3NUFEQkEyOTVENUVFRTkyOUZCN0RERkJENzdFNkNENjAKLToxMERBNDAwMENCODRBMEQwM0RGNjc0Mzg5RTk3RkJFRTc3RUZGREJFRjkKLToxMERBNTAwMEVGN0VGRkY3M0U5NzJGNTQxODVCQzBFMEU3NEQxQTFBOTAKLToxMERBNjAwMDYzMDM2MUY4NzMwMkI2RkRBNjUxQzZEOEFBQzlCMjVEQjgKLToxMERBNzAwMDk5MzRBNjMxQjZCODQwQjZBQjRENjMyMTYzMUQyRTI2NEUKLToxMERBODAwMEM2QjMwNDAzRjg1Nzk4OTNEQURCOERCMDk5OThDMjU4NUYKLToxMERBOTAwMDY4QjkyQUUwNjMzNEZGNkI2QjI0RkNBRTY0MDhFNjVCNzQKLToxMERBQTAwMEVEMTBFREM0Q0FBNEUxNjVFQzYzNENCNjk3NTI3QjREMTIKLToxMERBQjAwMEJBMURBN0Y2OUQ4Q0FGQkYzRkY1QjA5OTgwRjFERjk5RjUKLToxMERBQzAwMDEzOUY2MDVDMDNFRkEyM0Q3QTdDRkFERjFGRkVBNzE1NkYKLToxMERBRDAwMDg5Q0Y2NDEzRkIzRkU4RjgwMkJGNjM0NjE1NEVDRkY5QzgKLToxMERBRTAwMEZENzc4MEVGNUE5MjhGMDMxQ0RGMEYyMDdFRjcxMDNGRTcKLToxMERBRjAwMDlGRTBGODdEMDBGMDY5MjM3QzdBMDA5RkMyQkZGRDdBMjkKLToxMERCMDAwMDJGNTQxOUJCNzFCREJGMDExRERGQTQ3RDlGQzZFOUI4QUQKLToxMERCMTAwMDBDRjg0Nzg5RUUyMERGMDc3QkZGODQ5MDhGMzFFQzlGNjQKLToxMERCMjAwMEMzRTc3QkQ1MjlFNDI4RDE2NEEyREM5RjcyNUFGNjBEQTUKLToxMERCMzAwMERBMEJGQUU1N0E1QkY0OTA2NkM1N0YwQkU5QzlFQTEyNjUKLToxMERCNDAwMDNFRkU3N0E5N0JDRDQ0NTlBNjBEM0YwM0Y3NUQ4RUZGQkUKLToxMERCNTAwMDNERjY2NzhERkYzQzhERUY3MkE2RTE2OTNEOTdFODU3NzIKLToxMERCNjAwMDBFNkYyMzdDMzNGNDI2MDhCRUNGMDZERjI4RTgyQjNBNUQKLToxMERCNzAwMERDOTE0QzU4RjhDMTEyMEYxMjdGRDI3NjI5RjEzMEQ5QkUKLToxMERCODAwMEE1MDE5NzZDRUYyMEJERDk1OUNFRTcxRjdGRjhFMTI0OUUKLToxMERCOTAwMEUyMEZGQzNCNDZGQzlFQzJGOUY3OEZDRThGM0YxODQyNDYKLToxMERCQTAwMDVFMDI5QzFGNTIwRUJGMzNDN0Y4MjNDQUQ5MDcwRDVGMTAKLToxMERCQjAwMEQ4M0YzNTc0NEQ0NkZFRkYxRkQ2MkJBNkY1ODQzRUJEREIKLToxMERCQzAwMEQ3RjE2OTdEMTQ3RTlGMkQ0OUYzNzc2MjA4REU4RjBGQjAKLToxMERCRDAwMEVCRDQ1RkJERjFDOUM4QjVGMEU3OUFFNjQ3NTQxM0U3NDcKLToxMERCRTAwMDA1MTg1NkNBNTg3QzkwMjVCN0MzOUEzN0IzQTRDQUMwNDMKLToxMERCRjAwMDg3QzU4MzI2RjM0REIzRTgzNUZCMEFFMUUxRjIzQTQ0RTkKLToxMERDMDAwMEZCNUI2NEZGNTYyRjkyNzI3RDIyODlGMTQ1MDY2RkVGMTAKLToxMERDMTAwMDNBRENBNzM0REVFQzlCNTk3ODJGM0NFQzdENDREMDFERDgKLToxMERDMjAwMDBDNTlGNEU0NkFDRkVGMEYwMzVGMkNGMTUwQkEyREY4RDIKLToxMERDMzAwMEIzRkFEMzVGOUI4NDdDNTg1RDIxRTdGRDc2MTJFNzc5QzgKLToxMERDNDAwMEI1NThDRUZCMjRBREJCM0FCRENFMEY3ODNCNUZDMkZGQ0IKLToxMERDNTAwMDk0RTAzMzc4MEQ5ODU5NzgyNTdFNDE3MTk3QzRFQkIxRTMKLToxMERDNjAwMEMzMDNCNDVGMkU1RkYyODE3MTczRTBEOUE0MDQxM0IwRDMKLToxMERDNzAwMDFGMUZEQkI4NEQzNUFENzY4MUY1RTgyMUYwNkY3N0IwMjkKLToxMERDODAwMDc0OUJFNDJBNjMwNzdBNjhEREFCOEREN0U2OTBFMDhGNUEKLToxMERDOTAwMEQwRDMzNDlFODMyQzk4NjA1NkZDMEVGMEZEQjlDQUVCQUQKLToxMERDQTAwMDVCRUNDMjNEMjhCNzU3OUZFRjI5RTdCNTE2QkU0QjNENDkKLToxMERDQjAwMDU4RTM0QkVCQjdDMTNDQzA3NzVEQ0VGMzYzNzNBM0Y3N0EKLToxMERDQzAwMENBRDcwNTM5N0ZEODZBNEZBRTlDOEVCRTVBQTJFMzBERTMKLToxMERDRDAwMEJFMkYxOUZCRjM5Mjk5NkQ3RjJFMUJCRjQ3NDIxNjdGMTMKLToxMERDRTAwMEZFOUVDNzg3QjJGNUNDNjI3RjFFNDdCQTVCQkQyNTJFNkMKLToxMERDRjAwMDk0RUY3NTdFNjYyNDAxQkY4QkY4NUI5Qzc5OEUwRjJCQTkKLToxMEREMDAwMDY0OUZEMkZBNTlDREM3QUZEQ0M1OUE3QkE2MEQ4N0JGRjkKLToxMEREMTAwMDM2RUMyMEI4RDY2N0Q4QzYxRTk4MkZFNDNBREYxNEI3ODEKLToxMEREMjAwMEMwQTU0MkJDRkY1MDQ4QTEyN0QwNzc4OEY4QkY5NUUzMzMKLToxMEREMzAwMDc3MkNBNEQzN0EyMUE2MzEwMzc0QUE2MUU1QTQzMjk0ODYKLToxMERENDAwMDgzRDY1RkYyRjk5ODNGQzg1NjE0NjZFNjNCMkJFNjkzRkMKLToxMERENTAwMEVCMUM1RTVFRDg2OEE1RTMyNzYyOUQ2MzIxNEUwN0ZBM0YKLToxMERENjAwMDdGRTJFNzdEOUMwRUI1RTg2RTNGQ0VBRjE2QzhGQ0YyQjEKLToxMERENzAwMDc3QzRENzc2QTc2ODI3REUyMkJGMzY5MEI2NDM3RjI0QzQKLToxMEREODAwMDc5NUZFNTk2NzJGOTBFRTlCRjhDRDdERjBBRkQ2RjMyMzUKLToxMEREOTAwMEIxMTBGMTY3Q0MzMUNCM0FFRTBGNjQwNzQ3MUIzNzI4M0YKLToxMEREQTAwMEZENDU5QkQ4QUY0NDdBQkY0RTIxREVBMzhENTcyMzRBNTEKLToxMEREQjAwMDMzRjFDOUMzNTIwQUY4MEZENUVCREJEQjA1QTQwNDJBMDMKLToxMEREQzAwMDhENzMzOEZFRTg0Q0UzQjc5NzMzMEZGMEU5M0NFRENCQTkKLToxMERERDAwMEU3QjJGMzExNEJGRkRCQTFBQzdDRTBGQ0RENzE5QzA3RUIKLToxMERERTAwMDU2NzZDM0JFQkRCMjQ2MkQ1RDBGN0NGQjJCRUU0RjE1QTQKLToxMERERjAwMEU1MDdCMTVDRjJGNUQ3Q0NCRUZDMzU5NDE1Q0Y0NzBBRTgKLToxMERFMDAwMEFCNDA4RkQ4Nzg0NzcwQUEzRTdDOUMzN0FDNDgzOTEzMUEKLToxMERFMTAwMEZCQTQzRDgyNzRCNEE3RjU4REI3NzcxNkYzRkVCQ0U3N0IKLToxMERFMjAwMDlDRUI4NDNFMTU4NDcxOURBNzA0N0Y5OUFGMTRENzYzNDIKLToxMERFMzAwMEQzOEVBNkQ0QjlFMDVGNTlGQTY3MzhBMEJEMUVGRjgyMjEKLToxMERFNDAwMEY1MDcyMkE3OUMyODA3NkIzQjE0MjM5OTQzRUU4N0U5MkIKLToxMERFNTAwMDQ5ODc5OEZGQTFGNEZFOEQwRjVGNDNGMzlBNkNBRUYwRjMKLToxMERFNjAwMDFGRjAxQkY4QzQzNjlBQjdCMTQ5MjFGREIzRUJDQkU0RTAKLToxMERFNzAwMDMwRTdERkU0NzA5QTRGOTMwOTdGNDNDOEVGOUNGODU0NzIKLToxMERFODAwMDZDMDMyODczQ0ZDQUNDQkY1NkUwMUQ3MkM2MEY1RDBCNjIKLToxMERFOTAwMDcyRDBERUE2RTg2ODhGRDY2RDVERDc1MTBFNkRBNjM5QkIKLToxMERFQTAwMDgzNTNFMTcxMDM3MjBBQzZCNUZCMkJCQzY4MDc1RTE0OEQKLToxMERFQjAwMEVCRTE3QzJFRDg0N0Y0MjVGRTEyODI2MzFBM0NFN0M2QkMKLToxMERFQzAwMDM2MUZDMUUxRUY0RTM3QUI5MDlFRUFGOEVFMDg5MkI1RUYKLToxMERFRDAwMEEwRjFDOTIzRjhCQzE1Q0MzNEM2MjlEQjE2N0QzRDFFNDQKLToxMERFRTAwMDg2RkRFQjlCRUYwQ0EyQTg0MTc0RDYzNzA1RjA2QTEwQjMKLToxMERFRjAwMDc4Njk0NkZEMzkzNjA2QjIyODE3MEJBNkU2QTA1RkY3MEIKLToxMERGMDAwMDA2QjdDM0ZCODZBNjRGMkM2MTk1MDAxMzc3MEUwRDdBREEKLToxMERGMTAwMDkwMTg5MzVEQUNDMDc5QjVBMUMxMDBFN0Q5NDVCMDcxNDcKLToxMERGMjAwMENCQjczQTMzNkRDNDBERkIzRDk5RkU5NUQ3NzNGQkI0NjcKLToxMERGMzAwMDNBMENGQ0I0QzhERDBGMDU3RDNGMTRGQ0RDMDUzOEY0NTkKLToxMERGNDAwMDREQTMwOTBBMTlFQTBEREJFODQwRkVBRDEzNzNGNUI1RTAKLToxMERGNTAwMEFERkNDODg3MDBCRjBCMDExNkM0QjYxQkU5NTMzM0Y0RjAKLToxMERGNjAwMDlEOUFBNDcxRkE5OEUxNUQzQTBFRDYxNUZCN0FCQzA1MkMKLToxMERGNzAwMDZDREQ4RDMwNkQxQkQwMDlGNDY4RUE5QUEyOTQ0NThFNTEKLToxMERGODAwMDhGOEYzMTU5MTBFM0I2NDBFMjAxMDY3MjEyMzE3NzNCQjAKLToxMERGOTAwMDA3MDE4RkVCOUJERURDODg3MURGNUFEM0FERDcwMzhBOTQKLToxMERGQTAwMDc3NkNGNEQ1NjI1Q0JCRDIxNDdDNTlFMjNDOEQ3NDdCRjcKLToxMERGQjAwMEUwMUZGMkM1OTUzQUY3NjMxN0YyNzlBMUMyQzZDM0ZDMTgKLToxMERGQzAwMENCQTJCQzVGRjJDNUNEQjREMzU2QkU2OEI2RjZENjkzMkQKLToxMERGRDAwMEU1M0I3RjY0ODFGRjRDQjhCMEY0Q0M4N0UxOEZEOTZDMEUKLToxMERGRTAwMEY2NDVBMDEzMENDODUyQzRFNzQyODdFMjUzQ0IwOUNDRDQKLToxMERGRjAwMEMxODA0RTk3ODdFRkUzRkU4RUNEMkZBMjlFQUVGNTZCQ0MKLToxMEUwMDAwMDQxODc4RUY4MzFFMjVGQTM1OEUzOUQxNjdERTc4RjIwQUMKLToxMEUwMTAwMDU2OEQ2Q0REREQ4RDcyNzc0N0JGQ0FEQzAwRDdCRTY2REEKLToxMEUwMjAwMDNGQ0U4NDNGMEZDRUE3MDlCOTcwMTQ3Q0EzNEYwMzM4QUQKLToxMEUwMzAwMEVEOEIyQUMzRjUyNDFGODFERkJFQjlGMEZFRjQwMDhDRkUKLToxMEUwNDAwMDA3RDAzQkFBODE0RkIwRUVBRDg2NUJENzAxMkU3RkUxQjIKLToxMEUwNTAwMDlCNkRDOEE3N0NENjlDMUEwQkVEREJGQzBFOTZGMjY0NzgKLToxMEUwNjAwMEU4MDJCQTEzODIyRjhFOEIwQUFEQTU2QjcyNUQ0NzU2RkMKLToxMEUwNzAwMDNGRjEyNUZGMEIxMUM2RDA3NjI3OENCRTI5MDBCNzVDNzcKLToxMEUwODAwMENBNkQwN0RGQ0ZFNTA2REYwRkI5QUYyQ0NBRTU1NUVFNDUKLToxMEUwOTAwMDRCQkU0RDVFRERENUNFOEM3Q0U2OTA1N0ZCM0UyNDZEQUQKLToxMEUwQTAwMEZCQjA1RkUzN0E3MkFBNUZBNUY4RThENDlFRDI1QkFCQkYKLToxMEUwQjAwMDgxMUY4OTNEMEVEMjYzQzhEMzBFMjg0NUYwNDc0QTYxQkYKLToxMEUwQzAwMDFBRjBGRjc2ODEyRkZEMDA2RTdGNzM3MUIyQUIzQ0IzMDcKLToxMEUwRDAwMDFGQjcwNzlFRkZCMzUyQzkzOEQ0Qjg4QzNENjI5OEM0QUQKLToxMEUwRTAwMDQyRkIzNkQxQkFGREFCODkxMkQ0RDM4RkIxMUUyN0VBRDkKLToxMEUwRjAwMEY1OUQ2Q0QwODlGMkZGNzE0QzA1NTVCNDhGNDExN0JFNjgKLToxMEUxMDAwMDZGRjRGODVDQzhDN0ZEN0I5RTJCNDQzQjkyOUFFMDJDRDEKLToxMEUxMTAwMDNFMTMyMDU1NjE1NjNCNjk3RjIyMjdDRTQ4QkEwMTM4MEQKLToxMEUxMjAwMDI1RURBN0M3RjQ5MzVERjZDMjkzRUNCNEMxQjA1RDVDNzYKLToxMEUxMzAwMDFCRjU5ODM5RkNDOEUxRDlFNjBCNjgwNzY1NUJGMzM1MzgKLToxMEUxNDAwMDMzQzRFMzVCQjNFMzNGMjE3QjI5QzZFQjk1QzY0RkIxRjQKLToxMEUxNTAwMEZEQkQ1OUM2MzE3QzdFMUJFMzNERjAwRkU3QzNGNzUxOEYKLToxMEUxNjAwMDVFRjJFRTc0RTMzOERBMzVCQjFEM0I4RDc2NENDRkM4REEKLToxMEUxNzAwMEMzMEE5QjNDNDgzQjc2MDJFRDE4NzRBRDQwN0QwNUJFNUEKLToxMEUxODAwMEIxRDg5NUQ5QjE1MzUyMEU2RTYyMzcyMTdGODA5RTVGMTAKLToxMEUxOTAwMDkzMUZEMTgwMUVFMENCNkJCOEVGMzMxODU2REY1MkFDMjMKLToxMEUxQTAwMDg0QzhENDdEODA5RjIyRjBDM0Y3MEFEODc3NjVFQjBCMzMKLToxMEUxQjAwMDdGNTZDNkYwRjYwMjgwNTNDNEJFNjIxQTU5OEI3RUUzQzYKLToxMEUxQzAwMDNGODIxRUNGNjRCNDE3RTYwOUE0REJDRTE3NzBDQzRFOTUKLToxMEUxRDAwMENBQ0JGQ0NGOUY0MEI5NzExNDNDM0JDOUNDRTEwN0QzRkIKLToxMEUxRTAwMEZCN0FCN0YzOEQzNDVEQTg0NzEwQzkyMzFEMEEzMzFEOTAKLToxMEUxRjAwMDE3OTExRTFGMjAzMUZFNTI3MjkxMjAzOTY4NUZBQTEwQkMKLToxMEUyMDAwMDdERURFNUFDMTFFRDc5MUI3NkNEMDc3OTVGQUFGNEEwMjEKLToxMEUyMTAwMEJDM0YxRTI5RTFGMUQyMTQxRTE3NzYxNTI3RkQ0MTVFODEKLToxMEUyMjAwMDY3MjE3ODE2MDhCMjk1RDMzM0YzM0UxRTUxMDlGRUE2MzYKLToxMEUyMzAwMDM5NDYwMTNBMkU4OEZCMjg1RTkyRjFBQTg0RjM0NTc4OEMKLToxMEUyNDAwMDVDMzkzNkMyRTM4QzQwNjVCQzg0MUM1RDY5OTBGODBFNzUKLToxMEUyNTAwMDcxRDQ1ODZBN0I1MzQ5QzczODUxMTdFMTNGREQ2MTg5NTIKLToxMEUyNjAwMDIzMDYyNjI2MTlDNjIxRjk0NkVFQjhFMUJBNDhEQUFGRTgKLToxMEUyNzAwMDVGMTc0MTNBRjY0OEJGNkU1QzhGRURDNTYzN0QwRDY4NTAKLToxMEUyODAwMEU3NUM4MEY3REVGMjhDQkZGRUZFRDJGQjU1NTg5NjdEMzAKLToxMEUyOTAwMDM4NTI0RUY4NTUzN0VENkUxRDA3RkIxRDBBNERGNjYyREMKLToxMEUyQTAwMEQ4OTRBQTQ5RkEzMThFRTgxQTBGN0NDOEExMkY1QjIzQjMKLToxMEUyQjAwMERDMEZDRUI5NEVDMDA5N0U0OUJGRUY4MUYwREIwOUVCMjAKLToxMEUyQzAwMDYwOUFFRkMwMzhBMDhDQzcwMTc3NDYyQTY4OUM4QzA3RkIKLToxMEUyRDAwMDAwM0VFMTAyQjhEMDBEMjZDREQzM0UzNUY3N0E3NzBBNUQKLToxMEUyRTAwMDdFNjZGQzZEQjAwOEVEMzU2M0NERTQyRkUyQzI5RkJDQzUKLToxMEUyRjAwMEQyNjJCQzM2MDQ0MjM5RDAxMkEzMjdEOEZGQkUyODE4RjgKLToxMEUzMDAwMEI4MTM1QUEyMzA5ODgzN0ZDQjZBRjc3OUQwNkZCNzA2REIKLToxMEUzMTAwMEQ2N0IwNjMxRkUzMzIyMzQ2RkUzOUFEMDZCNDMxNjdCRjMKLToxMEUzMjAwMERCNTVDNjI2NjExQzcwNUJDMzJEQUYwRDU5RjRBREFGMzQKLToxMEUzMzAwMDkwRTM4QjdFMjZFMUNFQ0NCQjBBRTUwNEYwM0QxMjcyNjEKLToxMEUzNDAwMEE3MTYwMzQzRjNGRDJDRTk1NkU4RTlENDUxMEYyMjNBMEUKLToxMEUzNTAwMEY1Qzc4RDc1Q0NDNDdDQkNGQTk0NDZGNUFGNjI5Njg2NDEKLToxMEUzNjAwMERGMDY1QjEzMDkzMDI3RTIxNUY3MjcxOThFQ0I4NzM2QjYKLToxMEUzNzAwMEMyQzcxN0JFNDlGMENCQUE1NTk2QjBFMDA5RjY2NzJEODMKLToxMEUzODAwMEM5ODEyRDVFREE4NTAyMDZGM0I2Q0Y1NzkyREI2MURFRDYKLToxMEUzOTAwMDA2RkY1REU0N0ZCNjJEQ0FBN0Y3QjA2RUQyMERFRjZGMTIKLToxMEUzQTAwMDlEREE0NDdFNEJDNjU3RUREMTY4OTBGQ0QzMTVDNjUzMTkKLToxMEUzQjAwMDg3NjdDN0VGNDFCQzVDRkVCNDVERkQxQ0M5N0ZDNkFFN0MKLToxMEUzQzAwMDZFODk3MEJCRkE3OTdDMkZFREM3REUyM0FGOTBGRDgwOUMKLToxMEUzRDAwMDFDODRGOERDMDVGQ0ZFQUYxQ0ZCQjg0REU4NDE1NzMxNEUKLToxMEUzRTAwMDk3NDM3QkZGRDc4NEJDQkUzQjNEREU4QUYzMUJFMEQzNjMKLToxMEUzRjAwMEZDQjNERTdGQkNEOTJFRTM0REMxQzcyQkU1MEZGMEUzQTQKLToxMEU0MDAwMERGMjIxNkJCMENGQ0Y4NEFBNDZBMzgxRkUwRDc4NkY2NTgKLToxMEU0MTAwMDQyOTVENkUyMDk0NTQzRjlDRjEzQ0Q0Nzk4OTlDNDcxODcKLToxMEU0MjAwMDFFRDY0QzQwQUEzN0NFRDBERjBEOUYyN0M1NzBEQzZBQzAKLToxMEU0MzAwMDQxREY3QkI1QzdGRjA5RTEwREI3NkJDNjEzMTFDQTBCRUUKLToxMEU0NDAwMEI5M0M0QkJCMEM3QUM5RkRFRkZCQjREQkZEMEVCMEE3QUEKLToxMEU0NTAwMDgwNEYwN0JFOUE5RkU5M0YyNEY2QjlCN0NBM0M4NEVCQzgKLToxMEU0NjAwMERFNTBFNjU5ODdGQzdGNTAzMUZDNUUxNUVCOUU2NjIzM0IKLToxMEU0NzAwMERBMTFBNkNGQ0ExQTM3N0M5RDZEMzRDRjQwODVCOTExMDkKLToxMEU0ODAwMEY1OUFFOTJCNDY4MURGMkVENkQ1QjlCRkQwMzkxREIwMUMKLToxMEU0OTAwMEVFNTdGMzI3NjdEQUEzRDFGNUZEODhGMTczQzRCQkQ1MzYKLToxMEU0QTAwMDhDRkYwQUY1RUVBNTgwNDM0RjI4RjQyNDNERUNBQUNFNUMKLToxMEU0QjAwMDRCMkFEMDJFOTg2NUJFQ0FGNzExRUMyODRDREQxNTc4OTIKLToxMEU0QzAwMDhCRTJBMjY1NEIxNDhBRDM5Njc5MjA4M0NCNjEyN0NGNDgKLToxMEU0RDAwMDA4N0ZCMzRDRTdGREVDQTRFMUI3RDYzQjhBQTM4RUVDRjIKLToxMEU0RTAwMEJDMTc0NEMyQjBENjJGQTI4RUY1NTg5Nzk3RkUwQ0VCRkUKLToxMEU0RjAwMDI2QjlGNEVEQkNEMDI3RDVGRDY2MTlEQUQ1OTc5Q0I5QkQKLToxMEU1MDAwMEVERjY1QjExMTdDMTI5NTE1MTk3MTBGRTZGOTU5QkU3RUUKLToxMEU1MTAwMDU3RUM2NzgwOUZDNUJGRjY1Njg1RkY0N0Q4QUY4NDYyMkEKLToxMEU1MjAwMEYxOEIwMzEzQ0Y5M0JEQTMxRUNCRkI2NUEyRUVDNEZBMDAKLToxMEU1MzAwMEIzRTc5MTc0OTY0NDU5RDZCQTIwQUY4RTI4QUY2M0E4M0EKLToxMEU1NDAwMDUxNEJGRjJBOTVGMUJBNDc1RjM2QkYwMDFGNEY5NEUyNDcKLToxMEU1NTAwMDNGMzYzNDAyM0VGQjcyRTI3MzIyMUI5RjkyMjhERjk3MDQKLToxMEU1NjAwMERFMkFBMzA0RTcwM0ZGM0MxNkQ3RUYwODgzRkNFNUUwQUYKLToxMEU1NzAwMEVGMTMzM0MyRDc2MkJGQzYxMjFEMTVFNTk3OEM1QkFGOTAKLToxMEU1ODAwMDQzMzhEOUI2QzRBRDdBMzREQkJFOTY0N0I5N0RBRDg4ODEKLToxMEU1OTAwMDkyN0RDREJENkVBNUUwREI5NURBODdGN0FCRjczQjZDREUKLToxMEU1QTAwMEZBMkU5RjVEODM0RjE1NTQwMjFFNkU3N0UyQjNBNEFGMUYKLToxMEU1QjAwMEQzMkU0RkJGM0Y3RTVEREY0NEE0RjM5MDkwNEZCNEVENjgKLToxMEU1QzAwMDE4NkYxODNBOEY0NzNFMURFNTcyMUNCQTIxNDk3MENGNkIKLToxMEU1RDAwMDhDMTA3RkE0RTE4MDMxNTg5NzFCMjkwRTk5RkYzRUUzRjAKLToxMEU1RTAwMDkwQUU4NTAzMDUzODRGRUJEQjdCMEIzMDhGN0Y2NjI4QzEKLToxMEU1RjAwMDlDMzMwRTM5NTRENjRENzhEQUUzOTBERTExRTI5MEJCQUQKLToxMEU2MDAwMEEyM0M1RTNERjIxQjE3QzUxNTM1NjdCOTlGQUYzOURCREMKLToxMEU2MTAwMEFERUEyMDlGNzc0N0I5REQ5RTNGRDRBNzlBMjAyNzM1RTIKLToxMEU2MjAwMDE4ODdDMDNDQkQyMjBFNDFGODZEMjBCQTkxQjdCQjU1OEEKLToxMEU2MzAwMEM0NkJGRUQ5M0UxQTU3MDM2RDhDNDNFNjhGMTA4NzAwREEKLToxMEU2NDAwMDE2MkFDQUREODE5QUFFNUZFMEJFRDlFOTdEQTFEMkRDOEYKLToxMEU2NTAwMDEyQjVFNDVCRDU4MzdENzQ0RTIyQzc3NTA1QjYxNzk4NTUKLToxMEU2NjAwMEI0Q0ZEOTcyNzM3ODM2QjdCRjk5NzE1Q0RFRUQ3MDIzODEKLToxMEU2NzAwMEM5NTdBREVBMEQ2MDdEQTA5M0U1MDc5MTBGRUZFNDhEREEKLToxMEU2ODAwMEE5NjQ0NTNDQUZDMUI4QjgxMzQxODFFRUNFOTMwNUM5MkEKLToxMEU2OTAwMDA0RTZENTFFREU3RjZGRkU5OEJERjg5NEY2QzcyM0Y0MUUKLToxMEU2QTAwMEUyOURCQ0VCOTIyMjBGMzI4QTYwRkNCREFBOTE1QTBDMEIKLToxMEU2QjAwMEZFQTA3M0NBOTc3QzlDOUVDREE0NDc1QjA0NkZDMkJCMkYKLToxMEU2QzAwMDM1Q0FBNzZGRjZGMzdEOTBGMUQ3OEJBQjE0OEEwRjYxMzMKLToxMEU2RDAwMDlBMjU0QjAxN0U5RTk4REYzNTg3RTc4Nzc1QUE5N0UwREMKLToxMEU2RTAwMDc2MDQ3ODFDNzk3M0UyM0NENTJGRTYwRkJBNzQxRERBRjQKLToxMEU2RjAwMEYzMDZFRkUyRjlBMkZBRUNEMTAyOENGNzNGQUMzMTE1NDgKLToxMEU3MDAwMERFQUY2QThCQjc5MjdDOUU3NDUxM0RDMzgwN0ZBODlGMTkKLToxMEU3MTAwMDU1RkQzREM0Qjc4MjIxNTc1NjlEMjMxRjJDNTlDQTEyNUYKLToxMEU3MjAwMEI3Qjg2QzZEQTZBRTI5Q0E2NTg3RTREMzVFODc3ODMyMjgKLToxMEU3MzAwMDJBRjJDRjRBMzZFMzIyRjBFNTAyQkJBRjAzNjk3MzRGRkEKLToxMEU3NDAwMDBEMUY3OTk0MEQxRjJGRUIwQjlCNjYxODRGQTM3QzRDNkMKLToxMEU3NTAwMDcxMEU3RUY3NjlFMDU3RUYxQjJFQUE1QkY0RUVEOUYzM0EKLToxMEU3NjAwMEQxNEFBMDJGRDFBRDUxNUQ1N0U2MzM0MDU5Qzk3MkNDODMKLToxMEU3NzAwMDY3OTEwNzU0OTczRUJFMUVFNUYyNjBBMTZDODM0MTAzOEEKLToxMEU3ODAwMEJDMEZBNkNGRUIzN0FEMzcyQ0VENjNEMTA3NEVBM0RGMUYKLToxMEU3OTAwMDNCNzg4RDg0M0ZDN0M3Q0I3NjYyNzAzRERFRDczODM4NzMKLToxMEU3QTAwMDlFQjcyRjQ0RDU0NzEzQjRCRjgzMUFFNUQxNUI3RkVERTUKLToxMEU3QjAwMENENjUxRjhGRDc3MkZEOTJFRDVCQUIzNzczNzkxRDY1MDkKLToxMEU3QzAwMDFDRDhGNTU3QURGQTIxQzdFNTJEMzU3NzRDMDc3RTFDQ0YKLToxMEU3RDAwMDFDNzJEMEY5MTBFNDU5Mjk4QzBGMzZDRDMwNUY0N0Y4MDAKLToxMEU3RTAwMDA3NEY3MEJFMUU3Q0UzMUUxRkVFOTM3QkVDRTBFNzcyQ0EKLToxMEU3RjAwMEQ5RjlERjBCN0Y5NENFRjM2NjcyRkIwMTZFNEU0M0JGRjcKLToxMEU4MDAwMEI1NkJEMTMzQzcyQTYxOURFM0YzQTdDRTUyODEwNEUwRjMKLToxMEU4MTAwMDg1MDdFMzY1MzlERTVENUI5MUE1ODdCNzU2QkZBQ0FFNzIKLToxMEU4MjAwMDQ3RkJGM0M2RTk4NjVDRkE1RTE1MzVGRjk0NEQwRjNGNTIKLToxMEU4MzAwMDE3NkRFREQ2ODhGRjI1Q0ZEN0VGQzU3QjNGQTk5QUVFQTAKLToxMEU4NDAwMDNFMERGNkI3RjdGNzBFODY3OTRBRUY3NDkxODc4Rjg0RkQKLToxMEU4NTAwMDU3MTBGMDJBQjkyQ0JDRjZDQ0NCMjE2RjgwOTdBQkY2QzEKLToxMEU4NjAwMDlBRTE3OEJENTRDQjg4M0YyRjU0MUE5RURBQUFFMTc4RkEKLToxMEU4NzAwMDMyNTFDNzVDMjBFQzdEREVCOTJGNTFEREIxNzdEMDQxM0MKLToxMEU4ODAwMEM1OTMwQjQzN0I1NTE0M0Q1OUZGRUUzQTUxODExMTEwNEUKLToxMEU4OTAwMDVCQkNFNDk0OEEyMjY1REVBNzY2RTlEREJDMTNGOTU5MDYKLToxMEU4QTAwMEVEM0I5QkM3NjZCNTU3NkY5Qzk4RDE0M0Y4NkY0NTc0OTUKLToxMEU4QjAwMDcyNTZEQkVEQkYyOUFCMUQ2MkIzQjNEQTBENEI2RUNFRTIKLToxMEU4QzAwMDlBQUZENjE3Qzk2QUQ3RkIzRjlBMDU3RjhCQkUzMkFCOEEKLToxMEU4RDAwMEZERDFDMEVBMkNGOEE1QzEwRDU5RkQzNUJFREQwRjYwOTQKLToxMEU4RTAwMEY5MjgzRTZEQTYzNjk2OTEzQ0NFNDRCRTE2RjQxQjI0MDQKLToxMEU4RjAwMDhGMEY5RUI4Qzc4NzcyOTFBQTg5NEY0Mjc5MUIyOEVDNjcKLToxMEU5MDAwMDJCQzNGQUY1OEJDRURDRjlEQTdEQjVBQUY0REY2NUU4MjYKLToxMEU5MTAwMEVGMERDNkYzMzUwOTFGQUExOENDQUFDQjZGQThFNUZFRTgKLToxMEU5MjAwMDc5NkRBRDkyQjM0RTYwRjdDN0QyMEY0QkJGNkM1RkRGMEUKLToxMEU5MzAwMEVFNzdFREZFNzZEOTg3RjY3QTc4QkQ5RkZCRkQ1NTQyREUKLToxMEU5NDAwMDBFNUEwMzNGRjc2MkJFRkU2MjAzQUYyMzc0OTVDNUE5NUEKLToxMEU5NTAwMDZFMzAyMEZDRjM5MTU1Qjc0RkMyNzNCNUZDODAzOUQ2QTkKLToxMEU5NjAwMDVEOUVGMUQ3OTE0MDkyRkQxQUVCM0NCRTI0OUIzQzFENkQKLToxMEU5NzAwMEZCOTM2Q0MzNzRBQTRCNkI5MTY5RkNGRDBERTJGRDVEQ0EKLToxMEU5ODAwMEY4MDQzRjVENjdFMTlCRERGRjg2M0MzMzdGNUNDNDMyNkEKLToxMEU5OTAwMEYxNEFDM0JCNDZCNDA4RjBGQjQ4RDM5MzVBMjkzQzIzNDEKLToxMEU5QTAwMERFQzM5QUQ1MEUxREFGRjk2REU5MDg3RUZBOTNCNTM2MzAKLToxMEU5QjAwMDdEQzI3MUJENDMyQjJFRTkwNzVFNkZFMTc1RjdFRkI3OUUKLToxMEU5QzAwMDc4NTgwQUU4M0JEOUUyQTNFNzJGNUJGQ0Y0RkVFNTE2OTIKLToxMEU5RDAwMDlEOUVFRDJEMDE3QUE2NUE4MkQ0RkY4Qjk2NkE3QUZFMEYKLToxMEU5RTAwMEE4QzVBMEU3RjMyRDMxN0ExRTZEODkxM0RDNEY1QjFBQTEKLToxMEU5RjAwMEU5RjlCMzE2OTNERUVGMTQ3QUZBNDFDMUM3MDhDOEJBMzEKLToxMEVBMDAwMDQyRkM4ODQzMjFCRTM2RTA1NUREMDU2NzBERDU2QUU3MzcKLToxMEVBMTAwMDgxQUZGRjlBOEJBRkVGRDc5RkE0NkE3QTI2QTI5QzgxMjEKLToxMEVBMjAwMEJGQ0FBOTRGM0RCNTMyQUU0RkVGMzdFMTI1RTM2MUNDMDgKLToxMEVBMzAwMDVGNTA0RTY0OUQwRUYwN0IwQ0YxNzM2MzdEQUVFNENBQjMKLToxMEVBNDAwMEYxM0JBODcwQkMwRTE2RjNGQTBEQ0VCM0JDMTBFREY5NzUKLToxMEVBNTAwMEQ3RTM2MUIyRTdEN0NDMjQ3QkVFNjc1QUI2M0QyRjFGRDAKLToxMEVBNjAwMDY2Q0ZENzkxREVCMUEzNTgyN0M1RkEyMjlENTNEOEVBQzUKLToxMEVBNzAwMDIwNDU3NTNBOEQ5Mzc1OTA0NUVGRjIzQUM4NjhGNDAzRDYKLToxMEVBODAwMERENDdEMTZFNDlCQjdEQjk3NERCRTkzRDNDREI3ODA5REMKLToxMEVBOTAwMEU3OTFGRTc5OThGRjMwRUYyNkZGNTEyRDc0OTY2OTZGNEMKLToxMEVBQTAwMDUzOUM1ODIwRThEOTc1N0E0NTExREExNzM3MjJDOEYzRjQKLToxMEVBQjAwMDc0ODM1NUUzM0UzMzc5MUY2MEVGQzZCMkUxRjNCRTVFNjcKLToxMEVBQzAwMEQzNDNGRTdDNDczQUNFNzk5M0UyOThFMUZFMkI5QjBGMkQKLToxMEVBRDAwMDE4MEI1OUZEM0JGMEUxNUNCNjVGRTQ3Q0E4NTU5RjFEMjcKLToxMEVBRTAwMERDMEVGRUY5RTAyMEUzNzVCMjM5RkNCQzRFRkFDMTgzQkUKLToxMEVBRjAwMDY3NzkxREUzODJBNjI0MTk2QzVEOTgzNTc3Q0Y4M0U3OEIKLToxMEVCMDAwMDgxRkI1OTY5MUNDRjlCMjYzOTgyRkIwMUI0RTBCOTVFQjkKLToxMEVCMTAwMEREMDM3MEExNDE3MzZDMUVGNDU3QTdGMjY4NUM3OEM5REQKLToxMEVCMjAwMENDMjRCNjFCRTI2RjkyN0QwQTZCRDk3RTEyMjNENEI0M0IKLToxMEVCMzAwMERGQTEyMjU4ODlBRDNEMjEwM0FGRTJGRTU2NjREQTMwRjEKLToxMEVCNDAwMEVGMjc2NjlCNUExREQwQjVFMjdDMzNEMzYxN0U3NzE5REYKLToxMEVCNTAwMDczRDJGRDkwRTFGRUZENkVDNTUyNjdEMzU4QjAwM0U5NTQKLToxMEVCNjAwMEQwQkVCMDgzOUZFQkQ5RTQ0REYyNDlENkRCNjQxRUZFRTQKLToxMEVCNzAwMDA4MzM3Qzc1MzlFMjg3MzY3MUVFNjIzRjZGNzk2QkJBODQKLToxMEVCODAwMEU5NDc3OEM1RjczQzlEQjdCMDhEOENERjhGNzA0MDdFMkMKLToxMEVCOTAwMDgyRkMxQkUzNEFFRTJGMUYyRTc3REY5Qjc1Q0JBNDNBMzYKLToxMEVCQTAwMEFBNTMyNDk0QUI5M0I3NzcyQjk0Qjc4QkJDODlFOTlGNzYKLToxMEVCQjAwMDcxNThGMzE4OTkzN0Q5RjNBMzg3ODQ5REREODk3NjE2QTgKLToxMEVCQzAwMDlFMEYzOTE5RTU1QkVENEE3RTcwQUY5MkM5OTdDMDZGMTEKLToxMEVCRDAwMENFNDBCQTE2RDU4OUYzMTdENjNDOEY5RkQzREQ5Rjk1Q0IKLToxMEVCRTAwMDJGOEQ4OEI3Qzg0QjlDRTk3RDJGRjM5RDI5QzhFQ0JCQkUKLToxMEVCRjAwMEQ3RDVFREM3N0I4RTlEMzNCRkQxQjgxRUY5MzZEMzQzMzEKLToxMEVDMDAwMEU3OUM0QzRCRTk2ODc3RUNGNDMwNUY4Mjk1Q0VDREVDMTUKLToxMEVDMTAwMEI3Q0FCNDMzNTg5RkVEODA2MDA2Q0Y3QjFGQzYyRjAxNjMKLToxMEVDMjAwMDYwQkVDMkEwMjMyQkVFMjlBQUNFOEVEQjZFQUY5Mzc2RjgKLToxMEVDMzAwMEY2RUFEMDgxMDI0MEU3REIxMjRGMTYxN0U3OTkzQ0ZFNTcKLToxMEVDNDAwMEY0ODhGNzZEM0FCNzE3MENFRDlERTU3Q0JEQ0Q2Qjc4NzgKLToxMEVDNTAwMDdDOTZGRDdGMTBGN0M3M0QzMjNFNkE3OTlCMEZFQkUwNTMKLToxMEVDNjAwMERENUUwN0U5Nzc4N0FFNzU5NjQzQkJDM0FCRjFGODQ2MjcKLToxMEVDNzAwMDc3QzQ3MjlENDNFREFBNTMwNEREMUMyRjlGQzA0QjBEM0EKLToxMEVDODAwMEFEQTAzODY4QTRGNUJBODRCQ0M4NzZGRTM0RDMyMDdEMjQKLToxMEVDOTAwMEQ0ODM3MUNDOTM1QkJEQTUwQUQ2NDc2NUZGQTYzQTQ1RTAKLToxMEVDQTAwMEM4NEIzN0YxQTE1M0M0NTVGOTgxOUU5NDAzRTU2Q0ZDMjAKLToxMEVDQjAwMDVEQjM5MTZEMUU4ODkzQ0VDMDdCQ0ZCNDFFOEFBQkJDNzIKLToxMEVDQzAwMDEzNUM2NjJFQkNCRjJDRTZFQjc0MDY2Mzk0RjcxNzNBMTAKLToxMEVDRDAwMDE4RTZGRDlERTVCOUZERTgzRkQ3RjEzOEIzNTU5RjE1MUUKLToxMEVDRTAwMDQ3RjgwNEYwNjVBQTMyMUNFRTUzNDIwRTFFNzA4MjFDRDcKLToxMEVDRjAwMEMyRkE5RDUzNkZBMzdCNjI5RDkzMThEOUVGOEFGQUU5RkMKLToxMEVEMDAwMDhGNkVGM0U2OTA0M0ZEMzNCNDdGNEUxRjkzRTdFRjU5QzgKLToxMEVEMTAwMEY3MjU1QUY1ODZDNjc1QjBBRUY2MzIwQkEyQ0RCMEVCMkMKLToxMEVEMjAwMDlCNzNGQzhBQzY3NTc4REZBMjNBM0Y4OEYwQjVFQUNGQkMKLToxMEVEMzAwMDEyQzhDN0Y2MjBBMzdBODc1NkRDRTQ0MUJDMUYyQ0QzNDcKLToxMEVENDAwMEU4N0U0NDlBQUYzM0NDQzdEMDdFOEMyNkRGNzY3QzYwRDkKLToxMEVENTAwMDNEOTJCQjkxRjZENzhFMUY4NUYyQjMyRTAxNUY2QzM2QzQKLToxMEVENjAwMEM2NzNDQ0Y3Q0JCNDVFNjVDQjk3NzMxNEY5MUE4RDlFM0UKLToxMEVENzAwMDJDRkY1QTk2RjFBRjNGQTlEQkJDMDFFRkE5M0RDQzc4M0YKLToxMEVEODAwMEZGQjFCQTMwRTVGQkY2RjZENUQyRjM1NkFEQkIxMUY3QkQKLToxMEVEOTAwMEE1NzU4QThCRTRDRjNFQkVCMzlDRTNENUY1N0M4RDU4MzgKLToxMEVEQTAwMEQ3QTdBMEZDRUZBQzJFQzk0M0ZCRUU0NTQzNkRFMTZCNEEKLToxMEVEQjAwMEFBRDIzQzU1NjdGMURGQzVEMTY2MUVCN0Q3MzE5MjVGNDUKLToxMEVEQzAwMEFGMUVGNzREMDFCOUYwRjZBQjIwNTNDMDc3Qzc1RkRFMzkKLToxMEVERDAwMDNEQTVCRjdGM0VCMjZFODNFNDk2NEMzQjk3NUJGNjE3MzIKLToxMEVERTAwMEUwNEI5MTEwRUIzMUVDQTEzRTdFNUY2NDBCQzE0OTdFOUMKLToxMEVERjAwMEVEQkFGRTBGQzFENDI1RjgzNjY2NjE3NjdERUFCREQ2NDAKLToxMEVFMDAwMDlGOTRGQUMyNTJFMjczMUVDQjQzM0U1RjYwRjcyOUU0M0YKLToxMEVFMTAwMEJGQTMwNkU5OUQyRjZENTdGOUJEOTU1MkQ5MDQ3MkIwNzUKLToxMEVFMjAwMDREMjJBNzY0RUE1MjBDQ0YzRDUwQkY0QzQ2RjEwRDQxMzQKLToxMEVFMzAwMDhFMTM0NzVFNDRCNzhGQzY0RDE0RDM0Q0MwMEIzNTJBOTIKLToxMEVFNDAwMENBM0ZCN0JCMTdEODFCN0M3RDE4ODZGNzU2OTQ4NDgzQkUKLToxMEVFNTAwMEZDRUNGNTI4RDcwMDU3Q0VDQzNGOUZDQTcxOUY2NzkyMzQKLToxMEVFNjAwMEFGRTlDOTBERjA5QzU4MkZFQTY5ODI5RUQxRjgyMUYxRDMKLToxMEVFNzAwMEZFNUJDOUFEOEMwRkVDNzU1NDU5Njc3RDFBRUJBQ0NBQkIKLToxMEVFODAwMEU4NzU1NEE2OUQyN0JFQzlGOEQ3NUU1NzA1QkY1NjgwQzIKLToxMEVFOTAwMDdDN0ZFNzA2OEQ3NTExREY3OUJDOTBDOUYzNEQ4RkY1NDYKLToxMEVFQTAwMEZFOURGNDk3RURCRTE1NTlGNUY5NzkyM0QwRkJENDI4RDIKLToxMEVFQjAwMDdFQjFBQjFGRUMyNkM2RDFGRUVENTQ5RjNGNzA3MkZEQjQKLToxMEVFQzAwMDUxQ0NFMzJGRjg1RDNBQjNEOEZGRjZDMkVDRjMwMzM5MjcKLToxMEVFRDAwMEVGRjY3QTUxODcxRjVGQzc3MEJDRDY2NzMyQkNCN0U3QzEKLToxMEVFRTAwMEYyMDdDOTJGQjQyQUI5Q0YxREJBRUExREUyQkNEMUU2OTgKLToxMEVFRjAwMDI3NkNFNzMzRkY5REU3NERCQTJBNThEQTdGQThDMjNFNTgKLToxMEVGMDAwMDRCRkZDQTM0RjBBMkUzQUNFM0I5MUQ5NUZDMzgyMEUyMTQKLToxMEVGMTAwMEQxQUVFNzM2RDEzRDAzRTZCN0Q0N0QyQjcyQUM2RjhGMEYKLToxMEVGMjAwMDFCMEQ0M0Y3Q0RDREM0QjFDQTIwOEY1RkU1RkFFRDIyQUEKLToxMEVGMzAwMEVGNkUzREM5RjcyMzVGREMzN0IyRDMwQkYxRUYxN0VCNzAKLToxMEVGNDAwMDgxREU4MjgwQzM1NkRGQ0FCNjM3RjY3OEQ4RUQ2MTg5OTQKLToxMEVGNTAwMDdDOEJGRDgzNzhCOEE1OUVFMjg0RUM3ODc2NDI4Q0YxQjgKLToxMEVGNjAwMDdCNDFDNTI2QzNGQTRGQzQ2RkFBNThBRjk5REJERkFDMEIKLToxMEVGNzAwMDMyQTA3QkRFQzk0QkVGNDc2MzNEOEYxN0RBMDNFQkUzMkIKLToxMEVGODAwMDk4MzdDOUZBRjNBRTQ1MUYyMUZCMEE3RUI0QkJERTYyOTcKLToxMEVGOTAwMDc3RTU3RDg3Rjc1QThGOTJGMjNBNTdFQzYzN0E3REZCREIKLToxMEVGQTAwMEJEOTQ4NTVCRjhCOUQxQzk3QjhFQTEzQzFFMDA3OTQ0MjQKLToxMEVGQjAwMDNGREY1RTk4RDgzMTFERTM5Mzk3NTVCNjVGMUY1RUJGNjQKLToxMEVGQzAwMEIyRDMyNUVCNTA2MzYzRkNERThBQ0JERjdFNjRCMUMzMzIKLToxMEVGRDAwMEMyOUZDMTY2NTUyN0ZFMTgwQ0NGODkzNDcxNEU2NEFGQUQKLToxMEVGRTAwMDNCQjlERDQ2MzNGQUVGNTQ4REQxNjhBRDNCNEJCRTM1QUUKLToxMEVGRjAwMDBBNzk3RUJEQTY5OUNFQjE5RTFFRTFEQzU4QzJFMUU3M0EKLToxMEYwMDAwMDY1OTg4N0NCM0E1NkQ5MENGMzU5RTRFRkRDRDg2NjE1RUUKLToxMEYwMTAwMENENDg3NTdDMzNEREJGMkNGODE3NDZGOTIzQ0I1NzkyQ0EKLToxMEYwMjAwMEZCNjFBOUU3MTYzRDQzRjlFNTlGRkM4Q0VBNkMyRUNDMDkKLToxMEYwMzAwMDJGNEIzMTlGRTRGOUE1Q0M1QkE1OURBODU1OUZFOEE4NkYKLToxMEYwNDAwMEMwN0IxREZEMUFEREQzMkI3ODZFOTMwN0UzREU1MEZGRTYKLToxMEYwNTAwMDA2Q0FGMTBDNjU1NTAxRUVBM0JDQjcyNEYxQkNEMkZDODUKLToxMEYwNjAwMEI0MEFGMzUzQ0JGOTRBQzY2RUM0N0U4NTcyRDBENTEyNkEKLToxMEYwNzAwMEZGNTUxNEU0QTNCN0M1QTA3NjdCNEIyMzNEQUJCNEE0RTYKLToxMEYwODAwMDgxRjQ1NDA1MjhFMzYzMEI4NkEwREY4MjQ3NTU1RjJDOEIKLToxMEYwOTAwMEFCREQ1NTY5RkU4NkVCNTUzQ0VCQkREQjBGRjM1OUU0NjgKLToxMEYwQTAwMDAyRjJFMzczMDgzN0Y3MjRFN0E3NkI4OTQyRjcxMTk2NUEKLToxMEYwQjAwMDBEQjIwN0I4NkVGRkMzRDhBMTgyRDhENUIxNDNCRUQ4NzAKLToxMEYwQzAwMDI1RUQxMDNGNjc3NTBEOEE3MzU2OUJCRTNENUVBRjkzNkQKLToxMEYwRDAwMDFFQTRGNTBFQ0Y1QkM5Q0YyNTY4M0M5RDE5Q0UwNzdBREIKLToxMEYwRTAwMEM2N0M5MkRCQURDQ0JEMEVGQTlFMzEyNEJFQjNCRUYxMjAKLToxMEYwRjAwMDY4Q0QzRThDNjdEQjVGOTVGRENCRjcxOTk2N0U5Njg4RDEKLToxMEYxMDAwMDM2NjFFREVGMzAyNkM3MTA2Nzc2MUUyRDZEQTJFRkIwODkKLToxMEYxMTAwMEM1NzczNDkxQzZFMkIyMDE5NkI5RUY2OEU3RDc0MzMxQkIKLToxMEYxMjAwMDQ3RDY3RDlBMTBFM0Y1MzREOUJGMzkyNkYyNDMyMDA3M0MKLToxMEYxMzAwMEVCNzZGMkJFNDQzRURFOTdDODExQkZGRjkzOThFRjVFQjgKLToxMEYxNDAwMEU0NTMxNTdFMUZDMkVGMkIyQ0I2N0QxRjYyQzQyRUZEMkIKLToxMEYxNTAwMDdENDg0MkY0OEZGNjNEQzgxRDMxOUU1Rjk4NjIzREZDQUMKLToxMEYxNjAwMEZFM0Y4NkY4QzZGOTc3MThFQkM1N0UyREU4NEZCNjhFQzAKLToxMEYxNzAwMEMxMjBEMUNGNzJDRTEzOEY3MTNGRkY0MjhDREY3NzcxRTgKLToxMEYxODAwMEY5MEQwREY3MDVFNjVCNDE3MkQwQzhFRjY3Q0FGRTA1QzEKLToxMEYxOTAwMDY3RDNGREI3RDE3QTBEQkM3RkMxNTk5M0VBNDhGMkJCNjIKLToxMEYxQTAwMEJDNzhFQ0M2N0REQkI0Q0NCRDlDNzZBQzQ3NzhGMUZCN0IKLToxMEYxQjAwMDE0N0VERkU5REYwNTlERjZBN0ZDM0VFNTM2OUZCOERGNEMKLToxMEYxQzAwMEMzMjZFRkMzREE2NkFCQzFCRkM3QkMyNTc2RDM1MDQyQjYKLToxMEYxRDAwMEEzRjVFRkEyRjVDNUY3MzhENTgyNUU3OEJGODlERURCRUYKLToxMEYxRTAwMEZFQkYwMjREQjFCMjdERTIzQjlFNEYxMTVEQ0QxQ0VGRTMKLToxMEYxRjAwMEY0RkYyNzIxMzE5QkU0NEJDMjU3Qzc2NjM1MDlGOENGOEUKLToxMEYyMDAwMDEyRkM0NjBFOUY0MzFFODQzQzU2MTE5RTk3MzFERkZEMzMKLToxMEYyMTAwMDg0REYxQThFREY4NzYyN0FENkY3NUY1MjZFMDE2RTNCMEIKLToxMEYyMjAwMEMxODlFRjgzRkFFMzFCM0M2OENGRDNERkZEMjdBNkVENEUKLToxMEYyMzAwMDMzQTY1QzE2OUY3NkQwM0NBNjVDOEZGMzQ5NzU3M0JERjAKLToxMEYyNDAwMDkwRjIyRkU1RTFCQjYyMUY2NkM2MTQyOTU3NUZBNkYxNTUKLToxMEYyNTAwMDRENTc4REZFNkYxMjNGNkRERjIzOEQ0NjQ3QTAzMkJFQTYKLToxMEYyNjAwMDhGRjBGMEE3RUYyM0VGOEZFNUQ2Q0ZGNzg0OEZGQzdFRUEKLToxMEYyNzAwMENDQUUxN0NGMEFGQTYxRERFRkQxM0E2NTQxQkE5NzA0RjcKLToxMEYyODAwMEVCM0U3NTM1RDY4NTc5N0Y0MDdDRjBBNEU3RkQyMUI1NEUKLToxMEYyOTAwMEFGNzA1RTU2NTY3QTU5Rjc0QUZFMEZFRDkxM0I2RjYwOUMKLToxMEYyQTAwMDQ2MDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwNjYKLToxMEYyQjAwMDAwMEI5M0U0NjY2MEY4NTEwRkMxODE0ODZDNjJGMTFBNEIKLToxMEYyQzAwMDc2MDY4NjY4MTYwNjg2OTlBQzBDMEMxNTQwMkNDNzQ5NDQKLToxMEYyRDAwMDlBRkVFNTQwRkQ4QjgwNzgyRTEwQ0YwMEUyQzk0MERDMUQKLToxMEYyRTAwMDA3QzQ5RDQwREMwMkM0OTI0MEYzNDQ4MDk4MUY4OEI5NTMKLToxMEYyRjAwMDgwOTgxNTg4MTk4MEY4MzcwNzAzQzMzNzBFODQzOTM3OEIKLToxMEYzMDAwMDgwNjIwRjQ4QjQxQjg0QUQ3ODEwRUMzMzQwRkY2RjA0NkIKLToxMEYzMTAwMEUyQUI2NDg0QzMyODFFMUUzODlEOUY4MUExNUEwMEMxQTAKLToxMEYzMjAwMDE3MTA0NDk1Q0ZFMDQ3QjBCOTQ0MjlCMzRCMUFBODFGMzIKLToxMEYzMzAwMDAwNjU2RDQwQjQ4MDAzMDAwMDAwMDAwMDAwMDAwMDAwODQKLToxMEYzNDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRTU3RDBCNzg1NEQ1RjIKLToxMEYzNTAwMEI1RjAzQThGNzk2NjY2NzIxMjQyOTg4NDIwMjcxMDMwOTEKLToxMEYzNjAwMDY4MEE0MzgwMDg4QUY1MTAyMjYyNEJFRDQ4QTk2MjJGOTMKLToxMEYzNzAwMEI1MDM4RDgwMTA0ODU0QUNEQzRBQkYwQzRDODAyMDI4NkIKLToxMEYzODAwMDQxNTE0MTkxMEUwODE2MTU2RDQ0QUM1OEQxM0IyMEI1NDIKLToxMEYzOTAwMEI0QjU2RDZDQjlENTVBRUQwREI1QUQyRjBDODg1MkZERDUKLToxMEYzQTAwMEZCRUJFNUVFQjVGNjNFOTk3M0NFQ0MyNEUwRUJCN0Y3NzgKLToxMEYzQjAwMDBGOUZFRUVDQjM1RjZCQUZENzVFN0JFREI1NzdEQ0IyNDIKLToxMEYzQzAwMDBCMEEwNzAyOUNDNDlGMEIwMDZFNzEwM0MwOTg3NDNBMkQKLToxMEYzRDAwMEYyQzY2RkNDN0Y2ODM0RkJGREZGQkEyM0RCRjU3NDNEQ0EKLToxMEYzRTAwMDMzMUQwODEyRDUwMzMwMDA4QTAxMkVGMEIyNUY1OUJEREIKLToxMEYzRjAwMDg5M0YzRkYyQTcxMTQ1MDBGQjQwMDEwRkZCOTQ1MjI3QzQKLToxMEY0MDAwMEY2RjkxQUVCNjdERjg3MTBDMTcyRjlFNzgxQjJDRTAwMTcKLToxMEY0MTAwMEI2OEI1M0JCMkYwMzZGOTcyQUQ3Q0JCNDJBQ0M4MDhDRTMKLToxMEY0MjAwMERGMEQyRkZEQ0VGQTE5QkNBOTg5QjUzRkYxNDE4MERBNzUKLToxMEY0MzAwMDNCRTEzMDUzRjg1MDg2OTQ2ODczNzIxMEY2QUJCRUQ3MzgKLToxMEY0NDAwMDU5MjlGMkU1QzAwNjA3MDE2RjFENDA0RDFBREUwM0FGRDIKLToxMEY0NTAwMEJDNDZGMEVFNTcxOUJDN0E5NkYxQkQwQ0ZFQTIzNEZDMDYKLToxMEY0NjAwMEZCRTAxQkY5NTBDNUUxMzc2QUQyRjA5RjJFM0MzNEZGMTgKLToxMEY0NzAwMEJFMDAyQjlCRjUyNzJCNUMwMDM3MzdDMzkzMTU0MzAwNDkKLToxMEY0ODAwMDU2Mzc3QjI5QkZCQzU5QTM3Q0EyMzk0Q0Y5OTUyQTZCMEUKLToxMEY0OTAwMEMyRjBCMDcyMUIyNEUzQUM3RDY4MzRBQjZGRjZDN0ZFREMKLToxMEY0QTAwMDBCNTQ3OTZENzk3NzExNkJFRjRERTdENTQwRDg5NkY3MEUKLToxMEY0QjAwMDk2RTlCNjNDMDNFNzUwOThDREZCMkMzMTlGRTVDRDBDODcKLToxMEY0QzAwMDA3MUUxQ0RGMEJDNjk5NThGRTZEQzI4QjRGRTAyRDExMzUKLToxMEY0RDAwMDFDN0FGOTIwODY5N0Q2RTcxNTQ2NjkwMDk3NkU0QzQ3NDcKLToxMEY0RTAwMEY4MkEwMjZFM0RDOTU4RTNBQ0MwRUMyOTMwOUM4RDFCNTQKLToxMEY0RjAwMDhBMDFCMDdBODlEQjAxNkU2NTcwMEYwQjRDN0EwMzQyOEEKLToxMEY1MDAwMDAwRjdCMUZFNUI1OUZGNEFBOEY1NDUwRjJCNUY1NUVFOUEKLToxMEY1MTAwMEQ2MTVDNENCMEVGNTJGOUQ2QzBDMkZGQjg3NzgzQjczNTMKLToxMEY1MjAwMDAzQ0ZBN0U3QzVGMjk2NzkwRTAzNEIzOTZCRkZDQjgyNjkKLToxMEY1MzAwMDNCNUU5NDE4MUM4OTBBQjdFRTkxRDJFMzc0RDNBNTk3NjkKLToxMEY1NDAwMEZFODdCNEQ5RjNDRUZFMkI3NEEzMTZGOUQ0RUM3NzA4NUEKLToxMEY1NTAwMDQ0OTc2OTgxMkY2RUJGNjczMURDRjYyOTRDRjc2QjhFQkIKLToxMEY1NjAwMEQzNkJCRjhDRkM1MUQ2NzZDODA2NDhBNkNBMzNDN0E5NTAKLToxMEY1NzAwMEQwMjM5M0UzQUNCQzYyODMwQUM5NzJGRUJEODhDOTQzNDEKLToxMEY1ODAwMDA1RkYxNTU2OTZENUZBNjM1NTk5RjA4MDc1OUM0MTY5MkIKLToxMEY1OTAwMEJBNTRFOEVFOTkzMkUzOEI4QThBQ0JFNjRCOEM2RkEwQTMKLToxMEY1QTAwMENENDJFNzQxOUM0MTUxNUVENjM2NkJDNDhGMzczNzU3MDkKLToxMEY1QjAwMDUyQkFBRDU5NkIyN0Y5Rjk0ODk5REU1RTk1Mjk4NzdGRDQKLToxMEY1QzAwMDQ1M0RDNURBRERFMjAyRTJDM0Y4NzY0ODZFOTdCMEJGOEEKLToxMEY1RDAwMEU4RjQ5OTJDQkY2NjY0NzFGNTREM0FFNkE3Q0JBODE3RkQKLToxMEY1RTAwMDRDRkU1RTIzRTlDNERGNzFDNkRGQThGRjlDRjI3MUIzNTUKLToxMEY1RjAwMENCRjgwQUY2Qjc2QUE0MkMyRDQzM0M1NzcwN0VBRjcwNDcKLToxMEY2MDAwMEE1QkM4M0IxREZCNjQxMjNFM0Q4NEZFNDc3OUQ1OEFGNjMKLToxMEY2MTAwMDYyQzg1MDVENjFFMzBFQUJFMEZDRkZDQjMxNzc3ODUxRkYKLToxMEY2MjAwMDBGNzZDRjdGNzE3MTdCQzUyODgwN0MwNzFGNjhBN0M4QzQKLToxMEY2MzAwMDA3REFGODlFRjlDMDFDRTdEMzk2ODdDRjhFQkZEQTdBMzcKLToxMEY2NDAwMEU0QUYzNTkxNUJERjQwQkRCMUFEODJFQjBEMjc1QzI1QUEKLToxMEY2NTAwMDAzNTNFMTY4MjA5M0RGMkEyQTE4OUYyMTlEMjIzREYzNUUKLToxMEY2NjAwMDk5MzNCREJEMzkwOUFGMzIxRUJBQUQzOTRDN0NCN0FFNDYKLToxMEY2NzAwMDU5QTc3NEI1RTA0MzE3RjI1NDA5Q0IwQjNFODRBMkQxQ0QKLToxMEY2ODAwMDk0Q0ZCOTVFQzE1MjVBOEZGQTRFNEI0MjhDQzE3OTFCNEUKLToxMEY2OTAwMEYyRTdCOUY4N0RCOTYxOTRCMUU2OTU2NjFFNTIzMkQzQUUKLToxMEY2QTAwMEZERUJCMEJDOTRGMjA2OTQyMTdGOUFFNThGQzQwREQ2OTEKLToxMEY2QjAwMEJFNTBENDlGMjQzRDEyNEYzMDI0RERFNkUzRjlDOTUyRjkKLToxMEY2QzAwMDk3MTEyRkIzQjY1RjZEMThFM0QzRjU1OTNFNTU1QjYxQzMKLToxMEY2RDAwMEVEOEZGNTVGNjU4NUU3MTlBQTZGRjY1NzJGMUQzNkUyQTYKLToxMEY2RTAwMDJDQkZDRUM3RkI2Qjk1NUVGQzVDRkFCRjQ5NkEwQkUzOEYKLToxMEY2RjAwMDQyQjNDQUQxQ0Y0RDY2M0VERTY2MTg1NUU5NzFDQTk3NEUKLToxMEY3MDAwMDNFNkNDNEFERTVGMEIwQURCQzY2Njk1QjNDQ0VGMDc2NTYKLToxMEY3MTAwMDI3NDQwNzRCOENCRTI1NTNBMjYxNjBGNEY3NDU5MzcxRDMKLToxMEY3MjAwMDVDNkFEM0YwNzE3Q0E3RTc3NzA3QzFFQkFGRTBFNTU1RTIKLToxMEY3MzAwMEQyRUY4RDg0ODUzRTEzQTRERkM0MTE3RUQzQkU1MTA0NjUKLToxMEY3NDAwMEJGQ0EzRjJGQkJFRTM5QzZBRjRBQkUzQjQyNzY0NjExMTkKLToxMEY3NTAwMENCOEM2M0UzNEQ4QjgxQ0VFMDkwQzMzMTQwN0RBMDg0QTAKLToxMEY3NjAwMEQ1QkY1QkU1QzBFNDNGMDZFNzU4ODJCMzJFM0EzRDA3QkMKLToxMEY3NzAwMDlDNzEyQjlDMjYxQ0JEQzE2REMyOTE5QjRGRjlGODRFMEMKLToxMEY3ODAwMDdFQUFCRDY0RUM2RkM3MzMxNkY3NzVCODIyNjhFN0Y1M0IKLToxMEY3OTAwMDQxM0MzMTNEMDAxRkRFNjZCOEQ4RjczRTUzMTlFRTc1ODcKLToxMEY3QTAwMEEyREI3NDE4OUNEOTZGRDE5NDUyNDg1QUQ2RjE0RjlCNjIKLToxMEY3QjAwMEFFODMzMTNGODZGMEY2MUQ2OTRDOUFCRTJDM0ZEMzhBNEEKLToxMEY3QzAwMEM3QjFBMjlFOTNGRkNDRjlCOTMzRTZGNzVEREJGQzQwRUQKLToxMEY3RDAwMDZEMEI0NzgzQkRDRjZGOUQyRjMyM0QxQUM4QUNGNzRCRTEKLToxMEY3RTAwMDg5REJEMUI1OTNDNjdFMURGODc4RTA2MUZBQUIwMEM3MUUKLToxMEY3RjAwMEFCNEU4RjU3RjAxNTM2MUU3NkE2MjZCMzhFNTc1OEM3RDgKLToxMEY4MDAwMEM2RjM3RTc2Rjg3NENBQTMwOUFGMkYwM0RFREI2Q0YwNzMKLToxMEY4MTAwMERFRTQ2MjcyOUI4NUZFOUYzNUJDQTcyQTdGN0VBNjdGQjEKLToxMEY4MjAwMDQ5RkUyQTdCOTZCRjRGQkJCRjAyRkM5NUYxRDNCQjJBOTIKLToxMEY4MzAwMEE0MkU2MEY4NUE3NEExMzcxOTk3RDI3QUVFRjNDNjU3RkUKLToxMEY4NDAwMDFGMkM2MkY0NUJGNEVCNTE4NzJGOTAzMUMzRjhGQTRCMTUKLToxMEY4NTAwMEU5RjExNzRBM0FDMTlEOEJCRjczQ0QwNzIwNjlFQkU3RTkKLToxMEY4NjAwMEZGRDU3QzcyRTFGNUIzRDY0M0E3QUE1Rjk3RkRDMTRGRTAKLToxMEY4NzAwMEZCQkJFNTE1OTA0NDc5NUE3RUYwNDJEQTY3MkU3RjZFMjUKLToxMEY4ODAwMDYyM0Y2MEZEQjg1QUNGMDY4MzREQUE0MEQ4MTlDQkQxNEMKLToxMEY4OTAwMENFQzBGRUVCNEVDRENFQjhBOTE5REE1Qjk4RDFGNTU4QTMKLToxMEY4QTAwMDI4NEE3NkQxNzIwOUE4RkQxQTY2QjcyNTk5RkQzMkZBNjEKLToxMEY4QjAwMEY5NkRERTk5MDFCMkFCMjg1REVFMDJCMjYzNDYzRjdGN0YKLToxMEY4QzAwMDQwOUJDOEE2RTAxRjUyMzgxMjc5N0ZCOUNGRkM3RTY4RjIKLToxMEY4RDAwMDMyREFCOUFCMkJEODc3QzYxQUNCODNCQzNGRjYzRDhBNTgKLToxMEY4RTAwMEY1RjM4NkYwRUZCOUUwQ0FBQjY0RjA1OEYwRUU3MzI3OTkKLToxMEY4RjAwMDYzRDlGNEUzOTc2NTk5RjBCMzUxRDg1RDM3QTNEREM1QkIKLToxMEY5MDAwMDE0QjJDRkRGMTY0M0JCREE1RkVDRDZCNzRBOTlFREE2NDcKLToxMEY5MTAwMENCRENFRTVGM0ZFNDI3NzE3NDY5QUM0MkZCOERDRDdGOTkKLToxMEY5MjAwMEZGQTVGNzQxNjcxNUFFODM2RDg2OENFRDIzREMzNUIwRkUKLToxMEY5MzAwMEQxQjFERTA3RDA4NkEzNzUzMzJDNEQ2NDZCQTZERjkxNjEKLToxMEY5NDAwMEJGRDlBQzFGRDcyN0EwQkQxNkFBRTRFNTEzOTY5RDNGRUIKLToxMEY5NTAwMDIxNjEyRDg3MTExMzcwREQzNUNCQUY1QzM2ODZDQTRCMjQKLToxMEY5NjAwMEJDRDExN0M3QjNGMTRCOThGRTRDMzAzQzk1QTg2RDUyRjMKLToxMEY5NzAwMDEzRDEzMzNCQkZBQ0JGQ0EzQjNEQzk2MDU4N0ZFOTFEQzMKLToxMEY5ODAwMEU1NTc2NUMxMTNBMzIyRDFEOUNDOTdENkRCRTU2QkEzOEMKLToxMEY5OTAwMEMwREJDRDAyOEY2MTk0NzE4QjVFRjNGMUFBREQ3QUNENkQKLToxMEY5QTAwMDc3MjZENzZCRkVDQUI2QTU4OEU3RDI3QTg4QTA5REJEMTgKLToxMEY5QjAwMDlFRTEyRjY2MTlERjU3NjlENzZGMjVBQTdENUU5RkQ1MTcKLToxMEY5QzAwMDdDRUUwNEUzMEFCOTZGRUVGRTlERjI3NTI3QzQ2NjYyMTEKLToxMEY5RDAwMEZEMTJCMThFRkIyQjkzNTJBQ0FBRjdGOTNCRTc5QjZCNjAKLToxMEY5RTAwMERFNUYxNUY4NjRFMzJDQ0MzNkNFRTc4NTk3OTIwMDFCREEKLToxMEY5RjAwMDY3RjRBNzNGOEVCRkRFQUUyNzRGMTVFRkQwQjBDREMwNjYKLToxMEZBMDAwMDdEMzU5QTlBQjg2RkY2NDE1RDI0NDVGQkI5MUJDOTBGNDUKLToxMEZBMTAwMDc3QkQ4MDFENjIxQjM1QjQ2QjEyMDA1OUY1OTk1QUUxMTAKLToxMEZBMjAwMDRFRkJEM0YwN0ZDQThDRkM2Qzc0MzFEM0M1MkZCRjUzMEYKLToxMEZBMzAwMDcwQzA1MjNGMjkwNzhCRkU5RUM3N0UzOTA3Q0UzOUE5NzkKLToxMEZBNDAwMEE0REI4M0YwRjdBOTI2MUM4MTQyREJCQ0RFNkYzRTU2QTcKLToxMEZBNTAwMDcwMDBGRDcyREFENDdDRTg2MUJDRUQ0QzhGQTY5ODdDMTYKLToxMEZBNjAwMEREREJFQzg1MTQ5M0FGMkRDRDFBRTU3RkM4RTQwREQzMTMKLToxMEZBNzAwMDdCOThGQzYxN0EzN0RCMkY2MkY5QzZFNjA4RTVFRjZDMEMKLToxMEZBODAwMDFFNEJFOUVEQ0QwNjdEQkZBRDc5MzJFNUQ3MzU0NzI5NkYKLToxMEZBOTAwMEJGQjY3OTNBRTVCQkYxRjkyMTFCQUY0NkYwMkI5QkM3MDYKLToxMEZBQTAwMDkwOEE2NDVDNDYzRkVENjg4ODMwMzA2MTI1N0VCN0MwM0YKLToxMEZBQjAwMDdGQjMzQ0UxNjkxOUZEOUVEMzdERTRERjA4MDhGRjg2MzIKLToxMEZBQzAwMDlGRDE3NzMwQjYzQkE0QzA3NkM4M0RBRjA0Q0U4QkMxODIKLToxMEZBRDAwMEYxMTU0NUU2RkU1M0I1OTJFNEM1NkZDQUNCN0EyMEJGNTcKLToxMEZBRTAwMDhBMkZDMkQ2MkRBNjcyRDU4MkJBNDJFNDc3NUY4NDdGNzAKLToxMEZBRjAwMDBGNTRBQTQ5NzRDMTA0ODE2MEM0MEQ3QzcyN0IzOTk1OEUKLToxMEZCMDAwMEE3N0NDM0E5MEIxNUZCMUIyMUY4QTMzNTIwNTNCRDM1REEKLToxMEZCMTAwMDNCNzg3RjRFM0UxOTUxQkQ0QjY2MTQwMzZGNTBFNUY1OUYKLToxMEZCMjAwMDkyN0NCREFDMUE3NTJCN0Q2RkQ1NjQxQTc3Q0QwNkRFM0QKLToxMEZCMzAwMERFNTdDOUY4QzZDMkI3NjE2NTEwQ0Q2MzY3RTg0MDY5OTIKLToxMEZCNDAwMDM5MUJFRkM3QzFGRDgzMDZCMzc0MUREQkRBRTBGQTc1MUMKLToxMEZCNTAwMEVGOUFBRDg1MzMyRDdFMjRBRkMyRURGMzYwRERENkE5REIKLToxMEZCNjAwMDE1QUMxRTFCRDZDMDcxOTUzNUZFRTRENjcyQTI4NzgyRjUKLToxMEZCNzAwMEYwOURFNUUzRjAwN0JEN0NERTRBMDMyNDcxNUQzMkNCRTYKLToxMEZCODAwMENGMkVFMDMwMDRCNTg4MTFBREIyN0MxNzhBMjdBODI3QTQKLToxMEZCOTAwMDk3RjlCMTVEMkI0NEI2RUFFOUYyNEFCMzlENjE2RjU3MUMKLToxMEZCQTAwMDY5QjY4QkI3RUZBNzc2NEI1ODNCNDg5NzBGMkIxMEYwRjEKLToxMEZCQjAwMEMwNDg1QkJCNjEyNjlDQjA0Q0E2NzY3MTdCQkJBMUEyMDIKLToxMEZCQzAwMDlEMzlGRjYxREIzQTI0QUI5QzBEREREMDI5NzFCOUIxQzEKLToxMEZCRDAwMEQzMjUxN0ZGOEMwMDIxQjdGQkUzRDI0OUM0NDczQkNGQTUKLToxMEZCRTAwMDRCOTJCN0Y1MjQyM0Q1RDkzQkVDNzIzRDJDRTk5MEYzMjkKLToxMEZCRjAwMDBENkU5QjFGM0Q4QUIyQ0JFOEIxNTZEMDZCNTM1Mzc2NDYKLToxMEZDMDAwMDdBQUQ1NThGMUQ0NEZCNDREOUExREFGMDY5RDI2OUFEQjQKLToxMEZDMTAwMDU3RDBCMUM5NEU0NzkzNEU2QjM1NDFDN0E4ODM4RTAyNkEKLToxMEZDMjAwMEVGNkI0RDdBQ0RDODRFQUZCNTM5RThCNUQ2QTQ1N0NDRjkKLToxMEZDMzAwMERFQ0VBNEQ3REExQ0Y0NUE2QkQyNkI1QTc2N0EzOUU5NDUKLToxMEZDNDAwMDMxNkM1QjhDRDY5RDM0REQyMjk0RkZBQ0U4RTFENDBCQTMKLToxMEZDNTAwMENGQzkzQTdEOTdENzFCREEwNEQ0MEZGNTJBREYyNzU1OTEKLToxMEZDNjAwMEE2MDBGNzAzNTA1NkQ4OEJERDFBMTdGNjQ5MTNFMEJBRjEKLToxMEZDNzAwMDcwMEJGRTZBQjFDQkVGNzVGM0ZDOTU4OUMzMTNEMDBFMDAKLToxMEZDODAwMDBGNzVEQkUxRkIyN0EwM0Y2QzkzMjhCRjJFNzE4MkNBNjIKLToxMEZDOTAwMDFGOTdBMzMxODVGQTRCRjJGMTFERjhGMjQ0OTNCMDgxMUUKLToxMEZDQTAwMDgxNTRBRTZBMTc1NzMwQkUyODVGMjM0N0UyMTYzOUYwRjkKLToxMEZDQjAwMDgwODkyNzEwRTczN0E3QzZGRjAwNUNGRjIwNzgyNzA3NTkKLToxMEZDQzAwMDlGMTI5Q0Q3MkI4NENGMjRDRDNCMDM0RUI2QkZEQ0MwMDQKLToxMEZDRDAwMEY2MzVBNTgyQkY0QjlCMTg5Q0YwRTlDMzA5RjU3Q0JEQTYKLToxMEZDRTAwMEU4NUU5Rjg1OURFNDgyRUNGRDU0QUM5MTZEN0E3NjUwODAKLToxMEZDRjAwMDhCREY5NkQ3OTcxNERBRjI2NzJDMkFCNUYxNTU1OUMzRTIKLToxMEZEMDAwMDIwNUJCRUI0RkUyQzVCM0UzQ0EzREE5NjJGOUU3NkFFMDMKLToxMEZEMTAwMEFEQkZBMjI5QjVCNkYyMEM3RTExRjk2RENBNEI0QjZEODEKLToxMEZEMjAwMEZDMTIxRjVBOEJGQkI2NERBMjdDNDc2MjY4MkRFRURCOUUKLToxMEZEMzAwMDdBMkJGRkZBNTVBQUUxNjVGODU3OEJEQ0I0RkUzMDBBM0UKLToxMEZENDAwMDEyN0U0QzdDRTU2QjEwNzdBM0JDMTYwNTkyMTdCMTcyM0UKLToxMEZENTAwMEJGNjZDNEM5MUZBMDE5ODA3Njg0QUNDNTI4RUYwQURCMzIKLToxMEZENjAwMEQ3QTdBRkExQTFDNEY4RjRFQkVCNTRFOEE1N0ZFM0UzNzgKLToxMEZENzAwMEY0REZEQkJDOUNGQzYyQUVFRjRBMTE1RjRGRDdCMUVEMDQKLToxMEZEODAwMDkyODRFNzIyNEMzRkUyM0FFRTYyNjY4RTJGODQ3QzIxMTkKLToxMEZEOTAwMEY4ODdGMTMzRUExNTREOTU4NEZDOUU5RTlDMEQ2Q0I1NTkKLToxMEZEQTAwMEVCOUIwMTcxN0JCRUZGNjJGQjdDNEU5NUJGM0YyRkY5NDEKLToxMEZEQjAwMEVEMEQ3RjZCMjExMjU3NEUwMTdGMTE1NTEyRTdENUE3MkMKLToxMEZEQzAwMDI3RkZFMTE5NzZGQzE0NEY3MzNCRTRDNEExQ0YzRjY3RDIKLToxMEZERDAwMEZDQjU5OEVCMDU2OEI1QjhGRTA2NUFCODBGRTVERTM1RjgKLToxMEZERTAwMEZCQjU1ODE2RkM5OUZDQjJBRUFFREE2RkI1NDMyMDYyOTMKLToxMEZERjAwMDk5RDdBMEY0Mzg5NDU3QjJFNUJGNjg3QzkyOUM0MEY2M0UKLToxMEZFMDAwMEYxNUMzNkZGNzJCNDYzNzJDQzVGRDA3QkVERjhGREJFNUYKLToxMEZFMTAwMDdGQTVGOUE3RTlGQzgzRDM2QTFGRUU4NkI3NENBM0ZENDMKLToxMEZFMjAwMDlBOTk3N0VDQ0IzMkRCQzdCOUJFODlGOTY0QUI5RTY0OTMKLToxMEZFMzAwMDNGOTUyQUUzQjMxMEY4MjM4OEU3Rjc3REExRTE5MENGM0YKLToxMEZFNDAwMEY2ODc1RTlFN0VENkZCQjY3QkVCRjg3RTI2RkU3MjVFNjQKLToxMEZFNTAwMDcyMDhFMjUzQzQ3MURDRjJGMjk3OTI0NEY3RjEzMkRDOUIKLToxMEZFNjAwMDgxRTU1NTMyOTVERkUwMEY2RDQ1QjhCRUE5QzQ2RTUwRUYKLToxMEZFNzAwMEZCMjJCQzY3MjRGMUJDMThENDRFNkRFQTk3MkNGMzE0MTYKLToxMEZFODAwMDc2OTEzOUZGNUNGNkQxQjI5NkVCRUNFQjE5NENBQkI1NDEKLToxMEZFOTAwMEYyRTM5RDJEMkJBOTlDRDkxRDJEMkFEMUVCOEI2MjFGM0UKLToxMEZFQTAwMEU1ODQ3M0EzRkEwNUI2OEZDQ0YzMDE2N0ZCN0YxNUZCREUKLToxMEZFQjAwMEU4QTBEQUIwQ0M2RTFGRURFMTc0MTBFNUNGQjVFQ0E5ODcKLToxMEZFQzAwMDNEOTU3MkQzM0VGMjA3REM2MjFGRUZCMDVGMkE5OTdENDkKLToxMEZFRDAwMDg0RTc0NzAxNjFCRjU0MjZDOTVFRjE1NTI2QjlGRDUyM0EKLToxMEZFRTAwMDY5REEzM0Y2RjVFQTFBMzQ0MEM3QTRFREEzMUVGQTM3RUYKLToxMEZFRjAwMDNFNEVGRkJEQ0QyQkQ3RkFFRTBCOThGNjUxMUJCNzhGQjgKLToxMEZGMDAwMDE4RUUzMUNFNDRBOUU0N0UwRUM1QjFCRThGNzZFNTU4MTkKLToxMEZGMTAwMERGRkZEN0Q4NDdEOUU1QjczN0ZDQUQ4NTM2NkUxRkY1N0IKLToxMEZGMjAwMDgyQkY2OUI5RjBGNzJGNkUxRkVENTBFMUZGMzNGQjI4NTgKLToxMEZGMzAwMDE3OUZGQ0VGQjY4RkQyNzRGRTc0RUMxQ0E3NUQ2M0RBREEKLToxMEZGNDAwMDExOUZCNTdENjNEQTI3Q0M4RUE5NTQ1MTZFOTk5RDg1OUEKLToxMEZGNTAwMDc2Q0NGQjcyQkJGNzBFMzY5RjFCOTQ0RTJGMkU4QUI3QzIKLToxMEZGNjAwMDBBNzk1REFDNDZEN0I5NjhGREVFMjQ3RkZGMDZENEU3NzkKLToxMEZGNzAwMDdEODU5RUM1RjYwMTExOUZBNzQ2MDBFRDlEQzU2QTZDNjMKLToxMEZGODAwMDgzQ0I3MjBFQTEwNDNBQjU1OEUwOEI4NzA3NjZFN0Q5OTgKLToxMEZGOTAwMEU3MkZGMDYyRTI2MUI3QUI0MEQwQkJFOTlDMjg5RkQ3NjYKLToxMEZGQTAwMEEzODQwN0U4RTQ3NjhDREFFOUM1RjQ0OUIxQkVERDlCQTkKLToxMEZGQjAwMDgxMEYyMEJCNTExOUFCMjc1MTFGQjBGNjRGQkFGQURBQTcKLToxMEZGQzAwMEYwRTJCNUUxODVBRDQzN0MzQzUwQTIzNkJCOTFBN0ZFODMKLToxMEZGRDAwMEQxOUE4NEZFNzI5NkVENDBGRUE1RjM3MjFERkRDMjZEQUUKLToxMEZGRTAwMDkzODczMkY4RkJDNDU2NUM4M0YxOThDMTk3MkY3RTAzNDgKLToxMEZGRjAwMEUzMUFGQjc0Q0VBNEY4QzY5NkFBRUE4M0I1QUM1RTdFN0IKLTowMjAwMDAwMjIwMDBEQwotOjEwMDAwMDAwNDRCQjc0OTI4RUVCMkE5MDVGNzExNTc2NDZFQjI2MjRFMgotOjEwMDAxMDAwMjYwNEM0Mzk0RTI5QzA2Rjk2OUYxMEVCQTYwMTc2QkIwQgotOjEwMDAyMDAwNUNENjU1RDM5RjM0MjhCN0JDQjAxRkU5QTQyN0IzN0Q1NQotOjEwMDAzMDAwMkVGOTcwNTlFNTlBRTRGM0RBNTM5MzRGQTFGN0UzRUMwNAotOjEwMDA0MDAwMUZFQThCMDI0NzNGRjk4NjdENUQwODgyMjVDRkNBM0ZCNAotOjEwMDA1MDAwMTA3Q0NDMkM5NENGNjUzQzBENkVGNUVBOEMzRjVDMTU4MgotOjEwMDA2MDAwQjI4NkYxOTFGOUEwMTUyMEZGRjlFQjU0NDhBMUZGQTU0NAotOjEwMDA3MDAwRTg1ODFDNURCMEJERDFBNTA1RkRFODdDM0YwQTk3NUE0NAotOjEwMDA4MDAwRjYxMzQxMzc5N0Q3RjBBQzk2RjIxNUFDREYxM0EzNzk4RQotOjEwMDA5MDAwRkM3RDFGOERGRDU3OUQzOTlGRDU0MkJFQkFGMzU1NUI0MAotOjEwMDBBMDAwRTlEQzM0QzFGODY5MTBERkRGRDAzRDgyNTUxNUJCMzQ3RgotOjEwMDBCMDAwQUI5RTFFRTE5NjZDRjcwODJDRkIzNjVEQUQxMUY2MzQ1NQotOjEwMDBDMDAwQzM4RjUyMjExQjY4MDc3QzUyRkU1MDNFMjY3RkU0NERCMQotOjEwMDBEMDAwQjFEQjA5QTc0QkFGRjFFMjVFQzVBOUYyQzcyNzFEQ0Y3RgotOjEwMDBFMDAwQTQ2QkE2NUMyRDE1NzRBREY3QTJEREJGMjIzQ0I1Qzc4RAotOjEwMDBGMDAwNzNENDRDQkFERTRBNzRGNTU3ODA5MUNDRDJGRjA0Qjc2MgotOjEwMDEwMDAwOTQzNTdFRDZCOTNGNzJEQUVCNEFCRjlBRTk1QjdBQTJBMAotOjEwMDExMDAwNUI5MUQzQUVFNUZERkExNjJCRkE1RjUxNzlBOTFBQURDMgotOjEwMDEyMDAwMDM1RUQxREYyQUZERDYzOEVBQ0YxM0E4MTMxOTNFOTQxNwotOjEwMDEzMDAwQjY5MTI5NzFGRTE4RDlDRUFCNTBGQzg3NEYzNzQ4OUYzNgotOjEwMDE0MDAwRDI3OTc3NEQxQTNFNzc5OTdEQkZBNjE2RjlFRDc2RTEwMwotOjEwMDE1MDAwRjRCODY0ODVERkI3RDg0RDcwNzg3MTNDRDREMzFBRDAyOQotOjEwMDE2MDAwQjlBNzFBRTBGRUJEOENGREEzQzM2RTU4NTk1NjlEMzU0NAotOjEwMDE3MDAwQ0U0MEZEQjRGNkFCRDNFQ0YwOUU3MkJCODBBQUZGREQ5RgotOjEwMDE4MDAwNkM5MzQ1NEZBN0RCQTlGMDc3OEIzREI1MDZGOURENDJBRgotOjEwMDE5MDAwRkYxNTJFRDgyM0IxNzUzODExQkUwQzYyM0FDQjYzNTFDRQotOjEwMDFBMDAwMDk0MDJCQTZFMzkwMEZBQkI5N0RCNzQzQTJGMzYwMTJEMQotOjEwMDFCMDAwNjkxREZGRTNFNzQ0NTdCODc1RUE0N0Y2QzYwODRGNEE5QQotOjEwMDFDMDAwQzAwMEFBQUY5RkRBMzlEMkZCMDM3OERDRDIyMDA5NkNEOQotOjEwMDFEMDAwRjUxRjc0QkJBOTVDODUyODYwOUNFMkZCQUY1QzE0QTY4QwotOjEwMDFFMDAwN0UwREY2QTkyNjBEODdCM0RGMkJEQ0IxMDdEREQ4NEVENwotOjEwMDFGMDAwRTNGMDYwMDM1QUM3Qzc3MkJGNDBEOENCREJCRDNGNzM4MwotOjEwMDIwMDAwMkFDNTcxRTU4MjZGNDMzMzNGNUZFRkNFOEJCODJDNjgxMAotOjEwMDIxMDAwM0RCNUI4QUVGN0Q5OTgxRDU1QzRGRjdFRENENzQyMUI1QgotOjEwMDIyMDAwQjc4NzA2MEE5QTZENTk1MjQ4REZCN0I0RjQyQ0U3NzdCRQotOjEwMDIzMDAwMDkzOURGOENGNjkxODdFRTU1RDhFNDdFOUI4ODM3REI1MQotOjEwMDI0MDAwMkU4MUVEOUVDNTEwMEY4RkNGN0E0QkM4RkQxNjZGREM0NwotOjEwMDI1MDAwNDdGNzE1OUU1OUU1MUI4QUYxMkU4Nzk0ODg4RkUxQTFGNwotOjEwMDI2MDAwRTIyQUEzMzBENjAzMUU4NkI0RDlFNUVENzRFMzNCNUVFMwotOjEwMDI3MDAwNzY2NzhGRUZDOEQ1REU4Q0VCRjhBNDc4MjFEQkFDMTQ2MQotOjEwMDI4MDAwRjEzMDNCNDFGQjk2RDQwNTI0OUYyNTgyNkY0QUQ4RkU2RQotOjEwMDI5MDAwMDVGNUQwQzAzODI0NzVBQ0ZCRTE0OUIwRjIwN0ZCRDlCNQotOjEwMDJBMDAwOEY3RThBRDI3QTM2MTZEMjJCMjZEM0I5NzRFOUVERUUzOAotOjEwMDJCMDAwQTQ0Q0YyQUVERDg0RURDMzg3MTQxRTZCMDg0NjYwNjY2NQotOjEwMDJDMDAwMERCMTJBQjUwRjJCQ0Y0RDQwNTExQjJDRUMzMzU4NjM4OQotOjEwMDJEMDAwQkY3NzUxQjZDNDdFNUZBQUQ0NzE0RjIyOENGNjVEMDhGOQotOjEwMDJFMDAwRkRBRTk2N0FFNTlGOUMxRTIxMEZBM0M3RDk5RjNGM0Q4NwotOjEwMDJGMDAwQjZBOTg2NUZCM0I0QUY5MDIwREE5RUE1QkYwQTBGQjc0OAotOjEwMDMwMDAwM0IyQUQ2QURFNzcxNjBGNTAxNzhENUIyNUZEQzJFMTlENgotOjEwMDMxMDAwODVCODE4NkM2RURCQkExNENGRDlFMkY1MTAxOUMyRjBBQgotOjEwMDMyMDAwRERCRjAxNjQyQjFGOEZGMkU0NTEzRjJFMzBFMjY3MzJCNAotOjEwMDMzMDAwQkMyREZGRjY2NTlENEYyMTVEQzc4MzREOEY2NUQxMUY5NQotOjEwMDM0MDAwQTMzQzRDNUU1QzQ1NUM3RjZDNkI5QkNBRDMwRjE1NUExQgotOjEwMDM1MDAwM0ZDMjRCMjBCOThDODE1ODE3OEIyRDc1MjFGREU3MDJDOAotOjEwMDM2MDAwQzVBMTg3RUI5QkY2NjE3Qzc1NDkwMzQ0NzAxOEM2NTc5RAotOjEwMDM3MDAwQzQ1RkUxRTk5MDM0ODg1RkUwNTA5OEYxQzcwMDNFMTUxMgotOjEwMDM4MDAwMTg4MDdDODFFQkNGMjI0RTVGOTMyRjRBMUJFQ0Y3NkREOAotOjEwMDM5MDAwQzJGNUY2N0NCMUIwRkI4QjlERjdCNzFDRkQ5NEU4RkM3MQotOjEwMDNBMDAwMUU5NEJFNDQwNkJDRjcwN0QzRUNGNzZEQzJEMDc5RkZBQwotOjEwMDNCMDAwOEYxMEJFMDM4MTQ4MEFGOTM1RUUxOEM3RDFCRjBBQjFDNAotOjEwMDNDMDAwQ0IzQzBDOUY4RjdEN0ZDQTJGQ0Y2NEY1N0ZCOEE0QjYzRQotOjEwMDNEMDAwMEZFMjY1OEIzNzlBNEZGNzhBNUFCM0M3OUQ2NUYwQUIyQQotOjEwMDNFMDAwNjk3N0U0QTg5RkQ2QTM3MTVCNUNCMzMzNUQzMUE0Rjg1MQotOjEwMDNGMDAwQkE1OTBDOEU1NTQxMDM0OEFGQzVBRjIwRkRBRTA4Rjk4MAotOjEwMDQwMDAwN0RBNkU0MzIyRkM2OTMyRTBGNTQ1MzdDRDgzRUNDQjMzNgotOjEwMDQxMDAwNzQ3OTc4NjgzRjZCQkM5ODIyRTI3N0NEN0M0MkU4NTNEMAotOjEwMDQyMDAwRTc3OEQ3N0JCODFFRkQzQjE4RDcyMzFFNDY3QTYyNjE1QQotOjEwMDQzMDAwOUNCNzJCNUNGQ0U4NEM5RENFMEI4RDY0OTY3NjczM0M5MAotOjEwMDQ0MDAwN0U2RTVGRUFFQTNGQURGODY3MEJCODQ2NzIwODcwNUFGNQotOjEwMDQ1MDAwRkU4NTU5OUU1ODJCRjI2N0JDOTY2RDI3OTBGRjA3NDE4OQotOjEwMDQ2MDAwMzI4MUY0NkY2QTEzN0VGN0VFN0EzNzhCN0E3MUJDNzczQwotOjEwMDQ3MDAwRDk1RDJGRDYwNkQ2N0QyN0FCNzcyQkNFODdENTMzNkNBQgotOjEwMDQ4MDAwRjVBMjE5RjVFRTE0RjVDMDM2QUU5MTMxRUUyNjEzM0UwNQotOjEwMDQ5MDAwQjBGNjE3QzlFODZGOEJFODhGRUNDMUVFN0E3QTQ2N0YyOQotOjEwMDRBMDAwRjc4OUZFMEM1QjNEMkRBM0RFODMyNjdDQjY3MUMxM0UzMQotOjEwMDRCMDAwNkU3N0Y5NTlFRTY0ODJGNDM2OEZBN0RGM0Y2NDEyRjE0QwotOjEwMDRDMDAwQ0I4MTIxOTMyNkNGNjJFMzVDRjcwQjk3RDAxMTU3RDJGMwotOjEwMDREMDAwQkE2REYyRDUzRTUxQUYwNUY5QUE4QUUyRjA1QTFCRjA4NwotOjEwMDRFMDAwMUVCMEI4Mjc5QzA4NENGNUM2MkNERkJCRjkyQTMwNTU0NgotOjEwMDRGMDAwQ0JGRTdEOTZBREJFREFFQTAzNjMxNDdEQTdGQTJEMUYwRAotOjEwMDUwMDAwMjkzQ0JFMzk1RTUwODdGRUI4OTU0NUIyODg3N0ZFNUJDMAotOjEwMDUxMDAwQzI1MDk5MUVFQkFCREFGMkFENjE1RTNFRENGQkI3NDQzNAotOjEwMDUyMDAwMUNFRjE0ODk3QjMwNEM1NzNFNTk2NTkxRUZFRUYxM0YzQgotOjEwMDUzMDAwMkZGOEM1Nzk0NjFBRkU3NzEzNDY4NTE1N0U5RTM3RTE1QQotOjEwMDU0MDAwMzdGM0RFMTI1RTVFRERGQUVFNDRCQzU4NjVERTAzMTg1QQotOjEwMDU1MDAwRENEQUE3ODVGQzE3NUZEOEY5NDkyREY2RjlGMTdDN0EyQQotOjEwMDU2MDAwN0UzQzZGQ0U2Rjc0QUI1NEY3QUYzNUJGRkMxNjNCRkZDQwotOjEwMDU3MDAwRjE3QzdBN0UzQzZGQ0VBRkE2MzVGRkI0RTZFN0FDODc2MAotOjEwMDU4MDAwRjc5NTUwQ0ZBRjFBNzI1RjE4RDc5RDU1Qjg5MEIyN0VDRAotOjEwMDU5MDAwQzdCNkJFOTA1OENBRjIzN0Y1MzVFRDZEOURGNEZCNDhFRAotOjEwMDVBMDAwMzBDRUYyOEVFOUJERERBRjMwRjhBRDJGQzZBREYyRjMzRgotOjEwMDVCMDAwNjAxOEUyMTZFN0MxNkQ2MUY0NzNCRUU2RDE0NDFDMURGQwotOjEwMDVDMDAwODc1M0YxREFGMzAzMzFERjM3OUQ2N0JGRkMxM0Q3NjEzRgotOjEwMDVEMDAwMEM1M0U0RkI0OTg3OUVFRjY1NUQ1QjVFQzJENzkzMTVDNAotOjEwMDVFMDAwQzE4ODZDNUREN0NDMzhFODY3RkFENjkwRkU0OTY4NUM2NAotOjEwMDVGMDAwRkZFQ0VCMkJGNDUxMTE1QkQ3QjgzRjhGRUFCQjg0QkUwNQotOjEwMDYwMDAwQkFCNTk5QkYxN0QwMjZFRUMzMjY4QUFBMDkzRjZERTY3MAotOjEwMDYxMDAwN0REOEY4MjQ5QjdFREIzRjYxRDI0MUY0NUYxRDNGQzQ0RgotOjEwMDYyMDAwREY4OTc4QzJDQkQ3QkRFNUNERDBDRURGM0RGMEQyQkRERQotOjEwMDYzMDAwRUVBNzU5QkYzMTU2NjEyRkIzRjczMEZEMjlCM0Y3MzAxQwotOjEwMDY0MDAwREREMzFDQTZGNDI3Q0QzQUE1QkJEOEI4OTgzRURDMUM1OAotOjEwMDY1MDAwODExODFCN0Y2N0YzNTg0QUVGMTRGQkFCREI4NURGRjc4QwotOjEwMDY2MDAwQ0I0NTMyRjkyREI2MzQzMzRCRDk4NUZFNUYyRkE1RjczNAotOjEwMDY3MDAwMzQ2QjZCRDQyMUU4RkYwRDUzRkVCODM0NzU4RTk3RjZCQQotOjEwMDY4MDAwQUY5RDg5N0MwNkU3NjNCRkFCQTA3QkUyRTM4QjU0NUE0NgotOjEwMDY5MDAwN0Y0MTREMjlGOUEzRDNERjREQkMxRTk3NkExQkIwREQwNgotOjEwMDZBMDAwQjk2MTk5RDdGMzI2MTNBMUVDRjVBRUMxN0E2M0MzMkFEOQotOjEwMDZCMDAwQzEwMzgxQjgxMjJBQ0E1QUVGN0JDODVGMzUwMUQxOUZBNgotOjEwMDZDMDAwMTY0QjA0QjNGNzc3MjNGNjU3MUQxMEZEMTVFOTg5NDA0MwotOjEwMDZEMDAwRjZGRUUyRDhERjcwOERFMzAxQzI5RENCRjJCMkQ3NUJBQwotOjEwMDZFMDAwOEVGNUFBMzQzMURGQjI5NDlDOTc3RERDOUJCMDVFNjFCRAotOjEwMDZGMDAwNjExQkREREZCOTYwMDY5MDNERUEyQUQyQjc5MENGNDI5OAotOjEwMDcwMDAwRDQ0QkY2OEQ4MkNDRjhCQ0IwNEY1QjEzRDYzQjNGMTY3MgotOjEwMDcxMDAwODE0MTZDN0MzRDE0MDE5OUYxQjMyQkMwQ0FBQkYwMkUyMgotOjEwMDcyMDAwMzlFQjg3QTVFNzRENjNFNUFDNUUxMkNCQkY2NDI5QzcwMwotOjEwMDczMDAwRjYyQzFEMzc1REI0Q0ZCNzk3OUJFM0I5NUFBMUZCRkVFQQotOjEwMDc0MDAwMzQ1RTFBNzdCNUQ4RjMwNTMyOTdDRjA3NUFBRkE4NDM2RQotOjEwMDc1MDAwQjkyRjEwRTc0RkJGQzYzQzFCRDdCNTA0NEM3REM0RUI4NwotOjEwMDc2MDAwRkI3OUY5NTM2NkZEMTAyRjdGNDVFNDBCMEJGOUJDN0QzNwotOjEwMDc3MDAwOTNCQzE0MkY3Q0NGRjU0MzRCNjY1NUE1RTczQkUwN0IzQwotOjEwMDc4MDAwOTVDMzY2NTlFNjc3Q0ZGN0NFMkQ5OTE1NDhDRjY3QzA0OAotOjEwMDc5MDAwMERFMzg3Q0RFQTYxREZEMzY3QjJEQ0ZEMjYwOUVBQUQ2MAotOjEwMDdBMDAwODJCNjJBRDI5RjIzM0Q1MUIyMEY0N0Y2QUIzMTUwOUVGRAotOjEwMDdCMDAwOTUzNTFDQUVCN0JERTUyRENCNTQ4MjJCNEVGNzM0MDVENQotOjEwMDdDMDAwNUM3NzJGQjBDM0Q1N0ZBMTFEQUVCQjE3REFFMUVBREY5RQotOjEwMDdEMDAwRDgzMzVDNEY3OEI5NUVDQjA1MUYxQkRGQjA4RUJGRjlGNQotOjEwMDdFMDAwREZFREUzOUZGMTdERkJGODlCQkY2RjFGRkY4QzFCM0Y4RAotOjEwMDdGMDAwRjFGODI5MkI1RDM2NUQ2MzFGQkZFQzVBRkJGODlCQUUwOQotOjEwMDgwMDAwQjU4RjVGNzZERDI3MUJGRkQzQjJDN0NGRjdDNkZFRTlGMgotOjEwMDgxMDAwMTVGNkFFNjJCNTNCOUI2MjM2RkI5NEQ1M0IyOUVBRjFGNwotOjEwMDgyMDAwNzNGNDZFN0IzQzY2QjM0RjU5M0RENTI3RUM1RDVCQkRFMQotOjEwMDgzMDAwNjg0NjNEOUY0RkQ4QkJCNjcxOEQ4QzcxNDNBMkJGOTQ2MwotOjEwMDg0MDAwNkNFRDJGOTJEMTVGMUY1MThGRUVBREE0RURGMThDRkVCOAotOjEwMDg1MDAwQzI2MjVDQzM1NjRGQ0JBODM3QzA4NENGMzYyRUQ4QzdGMAotOjEwMDg2MDAwMDUxMTA3NzYwM0M2ODE0OTQyREU1OUZEQzUzM0Q4M0VERQotOjEwMDg3MDAwQkIxQ0Y3QTE1MTA5RjdGQjVBMUYxODc5ODA3RDg3QzE2RQotOjEwMDg4MDAwRkNEREEzODI0OThCMDdFMjdBMkU0RDVBN0MyNkFFN0Y4RgotOjEwMDg5MDAwQUQwNTYwREJCNzRERjI3MTNGQzIxODlGNDJBOTk2MDdDNAotOjEwMDhBMDAwNERFNEJGRjMzNjk1NUM2QUI5RjdCQTU5RDRFQjJFMEYxNQotOjEwMDhCMDAwMzQ5NTdDQzM1MjdFOTE2OERGMkFFRTBERDZGOTdFNEJDQgotOjEwMDhDMDAwRjY4OEQ2OUZENUNGRTIzN0JCRDhFQzRGOTQ0MzUxQTRERQotOjEwMDhEMDAwQzM2MDcwREY3OUM1RDQzMTU2RkRCQ0Q5RTdBMkY5NkI4RQotOjEwMDhFMDAwMDNDNUI4NjVEOUUxNkEyREU3RTNERTgzRTMwNkYwQkIxMwotOjEwMDhGMDAwNjk3RjM0OTUxMEJFMzU5RTlBREY2RjBGQ0U5NkZFOEFDMwotOjEwMDkwMDAwNThEREU2QTU3NUREMkRENkY1MDI3N0QzOEZDQTE5MUMwMwotOjEwMDkxMDAwODkwMTMyRTBGRDg2OTU2NTNERkI3MzVBOUFFREU3MEI0MAotOjEwMDkyMDAwQUExNjM1NzBERjU3M0E1N0FCNDZGMUM4RDVFRUFFQzlCNwotOjEwMDkzMDAwRjJFNDZDRTcwRkY1NjIzRTJENzM2QkRCRjBCRTBFMUMyQwotOjEwMDk0MDAwQjBGQjcxMTk4MzgzRjUzRUYyMTVFRTU4QkQyRjlCMUY0NgotOjEwMDk1MDAwQjdDNTZCQjM2RjBBOEE3QkJFRkY2NURFOTNFQTlFMDc1RAotOjEwMDk2MDAwRUIyODFCREQ1NkZCQzRGOUM4MjFBRkNEREUyQTI4OTQ0NQotOjEwMDk3MDAwNjlERjc5QTI4QTlGMUI0MEJDODRGQzg0REQ3ODJEQURBMQotOjEwMDk4MDAwRjU1QUM3NUZFNTE4Q0YwNzUzMEQ1QzA3NzA5OTQyNzk5OAotOjEwMDk5MDAwNzE1N0YwNzc1NUZDNDU2RDVBQjk4RUZFODMwRTNBMEZBQwotOjEwMDlBMDAwMDQ3MURGQ0RFQ0I3MjUzQzk1RjZFMzI3QzQzRDU4MzVGRgotOjEwMDlCMDAwREMzNjgxRkIxRDA1N0M5QUQwNTU2MjlDRDIwRDJBQTRBMQotOjEwMDlDMDAwRkFCMEIxNURCMUQ1QkUzMTU2QkFDNUU5NUVEMEZCQUU2NQotOjEwMDlEMDAwRTRDNUY0REU1MzM5QTNCRjk0MzlGRjNCN0NEQzVGN0M3NAotOjEwMDlFMDAwOTczRUY1QjdFNTU5RTg3QjM3M0E4QjJERkQ5NjdFRTBDQgotOjEwMDlGMDAwODZENEE4RENGNUQzRjUzODVDREQ3QzFCNjZGQzhBRjI3NgotOjEwMEEwMDAwQUYwQkJFNzUxQjNGRjQ2NThCQjczMEY1ODMzODA3OUY3RQotOjEwMEExMDAwMzUxNkM0OEY3RUY5OUZEODNDQUUzRUU4RTJFRjJFODhCMwotOjEwMEEyMDAwRkIzNkU2RjlEMEQ1QzI2RjNBNEJGODVERUIyMTFBQzIxRQotOjEwMEEzMDAwQzJCNzQxQTY3QjQ5NkZDM0VGNDJBMzJDRjQ3RkQyRTczNAotOjEwMEE0MDAwRTY3MEI1QkFDOERGNjU5RUZCNUVENUU2QjJGOUMzRTZDRgotOjEwMEE1MDAwNkNCMEU3NjdDM0Q0NjJENDVCQjNEN0JCQzhCRjc2QjUwRAotOjEwMEE2MDAwQzM0RkZCQTA5OEVGMUM2ODVBODE3NkJDNzk2RjdCOTZDOAotOjEwMEE3MDAwMDYyQUJFQ0JCM0UwRjE3QjZBRjA3RUQ0N0UxRkJGQkZGNwotOjEwMEE4MDAwRjcyNkUzMUJERDIyNkZGMzAyNDkzN0RFMDM3ODc1RjdBMwotOjEwMEE5MDAwQThDQkNFMDM2QzlGNUM1MThBRkFCNjAwQjJCRUZCRjZCRgotOjEwMEFBMDAwREQ1NjNCN0NCREMxRUY4NDE3NjA1OThGNzBBODNCQTQxNQotOjEwMEFCMDAwQUNGRUFEMEU5Rjc5NEVDQ0U5OTUyQkNFQzM4Q0JCMzhFNgotOjEwMEFDMDAwMkVGOEE4REIwRkYzRTczQ0UxODdFMUYxMTdCREI1N0YxNgotOjEwMEFEMDAwQkY5N0Y2MEJCQzlENkU5NDlGNDZCNTY5QjIyNEE3Q0YxNQotOjEwMEFFMDAwQTczQ0FFOThEMTlGQ0REM0I1Njc0MkFBM0ZEOEVBQjUwRgotOjEwMEFGMDAwRjY1Q0VGRDgyNDIwN0REOTE0NDUzRTMyRUIyRDA0NTYwOAotOjEwMEIwMDAwMEZFNTcyRUZBNTcxNUJCRDBBNTY2RjcwRUU3QTVENDIxQwotOjEwMEIxMDAwQUZGRTdDRTdCRDZFRjQ0N0JFRkRDMEUxNEI1MDJFRTc1MwotOjEwMEIyMDAwM0ZBOTgwOTc4RERCQjUzMzA4MjlEQUM3MjZEREI4OUY0QQotOjEwMEIzMDAwOUJCNzVCQzk3QTlFNEIxMTAzQUNGRkY5M0YwRUQyN0E4QgotOjEwMEI0MDAwMzk2Rjk3MjczOTg1QjU5RkY3OTM1Nzg3MDNDMzQzRDdFNQotOjEwMEI1MDAwQjI2M0NGRjZDNzc1RjcwMTg5OUZBQkM2M0I4N0UzQkE4RgotOjEwMEI2MDAwMzY0Rjg1RUY0NEIzRjREN0Q3Q0ZGOUYwQzgxMzc5RDMxNAotOjEwMEI3MDAwOTFDRUQyOEU3RDU3NTJCRkVEOTdCQjNDMTY3RDExRjBDMgotOjEwMEI4MDAwQkJDQzdBREMxRjc3QkY5NDFDOTI0NTlGOThFNzYwNDdFNwotOjEwMEI5MDAwRUU5NzM4N0M3QjVDNDkxRkMyQjc2MzhCM0JDNkUwNjgyRAotOjEwMEJBMDAwRENGMTBFRjFENUM0MUYzRjE0NDIzQzM0RUU1MTZDN0U5MwotOjEwMEJCMDAwRTJDNjFENEFDQTMzOUNEMkMzMUVCQThGNkEwNEE0MUE2NQotOjEwMEJDMDAwQzQyN0Q3OEYwQjc3MkYyMEZGRjlDMkY2RDVFRjI4MjE0NgotOjEwMEJEMDAwNkM2RkU3NkY4Njk3NDgwQUYxRkE4MjEyOTk4MkY5NDc5QgotOjEwMEJFMDAwN0YxNEQyMTlBQURFRUNEODFFNDJCQ0IyN0U2N0JBRjNEQgotOjEwMEJGMDAwRjExQ0Q4RUVGN0M2RkUzRjI4Q0NFQzBGRTA5ODFCRjlBRAotOjEwMEMwMDAwQUJCMTdEMTUxRjZGRjdENzVFNDNGREQyRTg5MEEzMzdEOAotOjEwMEMxMDAwRjE5NzkyQ0M3Mzk3RjNGRDhFNzNCMDFEN0Q0RUM5QkVENAotOjEwMEMyMDAwOUNGRkQwODlDRDcxMzZFRTkxNUQ2RjZEOEUzM0Y4MUJEMAotOjEwMEMzMDAwRkVGQkREQ0QzN0EyMURGNEI0NEY0MzNERDBGOEMwN0Y5RAotOjEwMEM0MDAwODZDMEIyNkU1RUVFRTdGMkQ4NzVGRjhGRUVCQjhCQzk0MQotOjEwMEM1MDAwNDdENzFGM0RCNDdFNzQzREY1REExOTNBOUI3N0Q3MjMwOQotOjEwMEM2MDAwRkZBNzU4NjdGNTE3M0Q3NTIxRjkwQjE2M0QzNkIxNUZBMwotOjEwMEM3MDAwNEZFQjI3RjI2QkQyRkEyRTk5Qjg3RkFFRUY2MUUzRjQxNwotOjEwMEM4MDAwNjNEOUJEMjI3NUQwRTc5OUREMEFGODE4OUM2RkJGRThEQgotOjEwMEM5MDAwQTE3QjUyOERFQ0RCRTI2QUE0RDcwMkQyQ0I5ODVGQzI3MwotOjEwMENBMDAwRjBCQzcwRTdDQTc3OTRFMUQ5RjAxREVGMkZFM0E1MDNGQwotOjEwMENCMDAwNjA2MjE4NDY3QTdGRTNFQkU3OEZDNkQ0NDVFNzJCOEQ1OQotOjEwMENDMDAwNzA4Q0Y0QUFCMzVERTMyMTQ2RDcxMUI5RTk3ODAyM0VFRQotOjEwMENEMDAwNzQ2M0RDNEFFM0NFNTU3Q0RDNzY0NkM3NTAyNjFEREZDNAotOjEwMENFMDAwQzY1RkM2NjVEMkYxN0IwRTNBOUU4MDg2MUZFMkY5MjA3MAotOjEwMENGMDAwRUNFRTkzRjU1Q0Q4M0MzRjVCRjBEODM3N0JCNEI3NEM1NwotOjEwMEQwMDAwQkREMDFCOUVFNzRBMUNBRTVBQkZCMUMyOEZGMkI1RUJGNQotOjEwMEQxMDAwQzFGQkVFMkFFMjc0OUVDMjEwRDNGNUQwODkzM0YwNTJBMwotOjEwMEQyMDAwRjdFQkFFNjM1N0EyN0UzQ0Y2OTQ0N0MzRjU3RURFNTNFNQotOjEwMEQzMDAwMkY5MEJDNzUzREY2QkM1QjI3RkIxQjAyMTJCMzM3QkE4NAotOjEwMEQ0MDAwQTBGQkE3MDNFRDhGODUxMkNGMzQ2RTBCQTYzQ0ExMzQxOAotOjEwMEQ1MDAwQkQxNjI2MkY5REFDODdFOEZCNjFGQTlFRTQ3MkIwMzA4OQotOjEwMEQ2MDAwQjk2RjlBOTQ4NTdFNEZGQkY5N0Q2RTQ4RjYyNUJDMkNCMQotOjEwMEQ3MDAwRDhGNjI3Mzc5RDgzNUJFODJBOEQ0NTdBMUU5RTg0REY0RgotOjEwMEQ4MDAwNzNEMUQzOUNCRjg2RjMzRkM3NDJENzZENUM3RTczQzlENgotOjEwMEQ5MDAwNjlENzE2OEY4QTcxMEQ0RTNBNzdCOUY4M0VBMTMxMjk3RAotOjEwMERBMDAwQkQ5MDhERUVFNjNBNzhCQUU3QUE0RjM4RTU1QkNDQkI0QQotOjEwMERCMDAwMzdGOUVFN0QzRUE3ODdBRjFEN0VEREM2MzcyNkRFOEU3NgotOjEwMERDMDAwN0M5ODVERUYxRkYyNEIwMjhFQTZDOUE1ODMzM0Q3NDFGNQotOjEwMEREMDAwMTVBMkYxRkVFNTY5Nzg4RkQwREI2NDJDN0Q0MEExRjc4OAotOjEwMERFMDAwNEU1N0I0M0Y0M0ZBREJBOTI3MTZFNkIwQjNGRjI2RjQwQgotOjEwMERGMDAwRDNDMjNERkI4NkEzM0UzQkIyRkYwOUUyQzc4NTNCMEY1MgotOjEwMEUwMDAwQkI3MTdGRjNFQzhFNDdERDlENTU2OUZFQzc3NUMxRkE1NgotOjEwMEUxMDAwQkVDNTkxODdGNzBEMjdGRDhERkQ2N0ExQ0Y3MUQxN0ZFRAotOjEwMEUyMDAwRTM1RTdCRkY4RDNCREZCMUY1M0YzRkRFRUUyNkZGNkFFMQotOjEwMEUzMDAwMkZFM0JDQTkxQTk3RTM3Q0RGRUM3MDAxQkU5QkY0NjYzQwotOjEwMEU0MDAwQkIzMjM5OUIxREY0ODI1ODE3QkJFMzZBODIzNTJGQTI0RgotOjEwMEU1MDAwN0Y1MjI5NzRFQkE4RkY1QTk2MUEyRkUwQkI4OUYxRTc1RAotOjEwMEU2MDAwNURGQ0RENEFENTc4RDFDM0U0MzM1MUUwRDY3MURGREJEOAotOjEwMEU3MDAwMTJCQzBDNzQ4QjFFNkY3M0UwNTMyQkQyMjZFMDdFNDBBNQotOjEwMEU4MDAwQUI4QjhFQjZFRUJGNENGODBCMENEOTA2RkZBMkUwRTQ5QwotOjEwMEU5MDAwN0VGOERFMTVFRUUzNzQ3QzI3NTY4RDcwRkY3NTY4RDIwMAotOjEwMEVBMDAwNjRCQUY3QThDOTlBMkZFQkJBQ0RGQjQzQkYxREYyQkZCNgotOjEwMEVCMDAwNEI5MzQxQjdGMEQ3Qzg4OTk3OUQ4RDJFM0IxNTc0REJCNgotOjEwMEVDMDAwN0U2MDVEMUQzRjBGMzZFN0JGNkUwMDZDQzJDNzIzRDY0NAotOjEwMEVEMDAwNDkzQ0RFM0Y3RTMxOEYzMzM0RUQzQjcwRENGRjcyREEwQwotOjEwMEVFMDAwN0I2MDE4M0FFQTIzNTI0NzNBMUZERkIwREM3MzRFQzdFMwotOjEwMEVGMDAwRjE4MjJFNTMzQzczODQzNjAxMkFDNDI4MDhDMzhCNzFCNwotOjEwMEYwMDAwQjY4MzcxREZENTRFNjk4MEE5Mzc0Q0M3RTcwREUyRkM4NwotOjEwMEYxMDAwMERDNzI4N0ZFQkU0QkY1MERDNjM1MTVFNzQ2NDVFNUZGNQotOjEwMEYyMDAwQ0MxNzhBNzcxNDUyQjRDRjEzQ0YwNjgwOUM1NzU2RDI3MQotOjEwMEYzMDAwOTMzRTgwM0FGNTg4RDU5RkU0ODE0REI0OUY0MTc3RTY5MgotOjEwMEY0MDAwQzkzRTY5QkM5OEYxNzY2NkJGRUI3Q0UzMjU1QzhGNzA4NwotOjEwMEY1MDAwOUVGREYxOUQzNjdDRTRBODk4OUYxRkYwNzkxQjk0RUZDRAotOjEwMEY2MDAwNkJFNjFERTM2MDREQUQ0NjJDQzEyNDlBMzFDOTM1MTg5RQotOjEwMEY3MDAwQ0ZGN0RCMjQ5QzVGMjlCNDUzNUEwNjFEOTQxNjdBMzVBQgotOjEwMEY4MDAwNDkyNUY4NUUyNjdGOTcwQzdGODE5Mzc5MEVGODRFQzEzNAotOjEwMEY5MDAwOEU3N0RBREYzNzI4RkE0QjMxNDZDNzg0RDhFNzZDMkRENQotOjEwMEZBMDAwQjBDNzIzN0QzQjhGRUI5OTZCRjI2NDMzRkUzOTY2REQ2RQotOjEwMEZCMDAwQjcyNUEwODE3MEUwMkJFMkNGOTM3NUNCNDE1RUVDQUEwMAotOjEwMEZDMDAwM0MwQjlGMjk4MTBFMUU1RkU2RDgyRjVGQTgyQ0ExRjM1MgotOjEwMEZEMDAwRkQ5NUUxOUVFM0JBOTY4QkY4RjA1Q0U1NkQ3REJEMzMzRgotOjEwMEZFMDAwQjcwMEMxQ0ZGRDYwOTI5N0M3NzkxQkEwNkI1NjdFQzQzNgotOjEwMEZGMDAwNTg5RTFBNkJEQ0E0NjE3QjRGQzc4NTdDQTgyMDlFRTNCQQotOjEwMTAwMDAwOTRGQTUwQUU1ODlBODc3Q0M1RThCMDVBRjA2MTEwM0EwRAotOjEwMTAxMDAwNDUyN0M3QzhGRkIxRDkxRDRCMjAxRkY2QUI4ODQ5M0NGNwotOjEwMTAyMDAwOTgyODJBNzFCRjlBQTE1OEY5NDBDRTlCNTFEMjUzREMxRgotOjEwMTAzMDAwMTY0QzYzN0M2Mjg5OUJEOTJBRThBMkFBQTBGQUFCMTE1QwotOjEwMTA0MDAwOUU0RDgyRkU0RUZFQjRDN0MxOUE3NjVENDBFNDNDMjJCRQotOjEwMTA1MDAwMUVFRjY3QTM3RjQ3RUY4Q0E5NDUwMThBN0YwOThDNkUzRAotOjEwMTA2MDAwQjkwNkRGNkY1NUExNDk0M0JEMUEzMEUzNUJDNDdEMEY1QwotOjEwMTA3MDAwNzM1RkVEN0NGN0M1RTM4ODhGNzU4OUZEN0I0NkJDQjg0RgotOjEwMTA4MDAwNTg4RkU5N0U1QzE2QkJEOUI5MUUzRjk4OTczRENFMDlCMwotOjEwMTA5MDAwQzY2NjhGNEIzNEVEQjQ4RkNCRkZFNkZFQjNDMURCRjFGOAotOjEwMTBBMDAwMkMwMUExMTkxNEQ3QTkwQUJGQzU4NDY5MUFGOURCOEZDRAotOjEwMTBCMDAwRUU5NEY4N0IxQjBFN0UzQUJBMkI3RjM4N0Y2QzQ3QTNFOQotOjEwMTBDMDAwRjdDQkYzQzQ3NzY5RTdCRTdENjg1RkI1ODRDMDI4Mjg5NQotOjEwMTBEMDAwMjRGREE3MkIwQ0ZGMkJBNDkxNUU4OUE1MEI3NkJGRjNGMwotOjEwMTBFMDAwOUIyN0QxOEZCRjU3MDE3Q0Q3RUQyODlCNjMwN0NFNTMzOQotOjEwMTBGMDAwMzUwQTkwNjg3OUIwQzY0NkU3OEYzQkFGQ0M3MzRDMkU2QgotOjEwMTEwMDAwN0ZENzZBQTZGQzA1QThEREYxOUQxMkREMTc1M0UwRUM0MAotOjEwMTExMDAwM0JGMUJEQUJDNjgzMkU0OEIyRjJFM0MwRkIzREJFODlCNgotOjEwMTEyMDAwREIwRDczN0VGMTY4MEQ5MzA0RDgyMEUwQzFGNUNCQkFENgotOjEwMTEzMDAwQ0VGNDk5RUMwN0REQzIyNzYxNzM1RDg4MUIxREY4REVENAotOjEwMTE0MDAwNzNCREMwNEZERjY4QTFBRDlFMzlCRkI3NjY0RDNFNDg0NQotOjEwMTE1MDAwRkU5RjE4N0ZGRkI5REZGNDUyNUJGRjIwRkMyMzNBRkJCMAotOjEwMTE2MDAwODc3Qzk5RTE2NzkwNjM2RUEwNzUyNTlBOUYyMjNCODhFMgotOjEwMTE3MDAwRURBNzcxRkY5MTk0MjIwOEI3RDM5RkIyNzA4RjQ0RUIxMwotOjEwMTE4MDAwRDlENTZDM0RDM0Y3RDhBRTRFM0FGNkEzOEU3ODJBMTM2NAotOjEwMTE5MDAwRkY0RUJFOTUwM0MyOEUwQzQwMjAwNzlFMjNBOUQxNzQzQQotOjEwMTFBMDAwM0U0QjcyNzdFRDJGMTRCMkM3QUU3RDQ4NEE1MjNDNzU2NAotOjEwMTFCMDAwRTc5OUY5NDA3ODU3QzgyRkY1MUEzNEREQzE1Njk4MzRBRAotOjEwMTFDMDAwN0YzQkYwRTcwOURCRjFFRUQzRUQ3OENGQUJCNEUzMzc0QgotOjEwMTFEMDAwMThCMUUzRDE4OUU3RkNCMTgzNkNGNUU3MkIwRDZFNjJBMgotOjEwMTFFMDAwM0U4MUVGNEFGNjBGRjFDREY0MjRDRDYzMjE5QjQ3NEFBRgotOjEwMTFGMDAwQ0ZDNEU3RENCREVCNTZBMEJGQTQ1NzNDM0FGMDc3OTZDRQotOjEwMTIwMDAwMDM3RjI3NjBFRjNFNUUwQTUxNkZCMTI1RkU1MzREOTE3QgotOjEwMTIxMDAwNUMzOUU1RDBDNDUzOTlENjMxODFCRTQ1ODJFNEE3MEUyRQotOjEwMTIyMDAwOEI0RUE0N0FERUFFRDREQkNFODVBQTNBNDI3MjY4QzY3MwotOjEwMTIzMDAwMjlFNzc1QUZBQkFGQzI0OTk2NUU3N0U5ODFDM0IzMjBBQQotOjEwMTI0MDAwQjdEQ0I1Mzc3QjIzRjUyRTNDMUY4NzQ4RkQxMDNDMkZCQwotOjEwMTI1MDAwRDcyOEREODRGNTQ3RjRCNERFMUEzNDlFMEIyMjFBQTY5MwotOjEwMTI2MDAwQjc4ODczOTNBMzU1RkM1REE0RjZENDdCQzU2OEZGRERGNgotOjEwMTI3MDAwNTI3REVDMTJCNEZCMUJBRjgyMjhFQUZGNjQ5MEFGQkYzMwotOjEwMTI4MDAwQkI0NTVBMTdFNDcxRDYzNzQ1NjUzMEQwNUZCMDU3NDkzMgotOjEwMTI5MDAwNEFFODg3RDI4QzVGNUM4MDc2REI1RTk3NEVFQjlGNzY2OAotOjEwMTJBMDAwRUMzN0ZGNDZFNUEzMzQzQ0M3Mjg5MURCNDZFMkI4QUNGNwotOjEwMTJCMDAwM0VGOUZCOEZFRTdEMzVGNDVEOEI3REQ0QjVFN0I2NjFFRAotOjEwMTJDMDAwQjgzRTZEOTQ2MTZFQjY3RDQwN0Q4MDhGREY1NUY5OTc5NQotOjEwMTJEMDAwNjI2NENCMDVERTYzQjQyRjVGRDk2OUY3QjNCOTc3NzM2NgotOjEwMTJFMDAwM0ZEQ0MyM0Q5NzkyM0Q3QTYwMzY3RjhGRjNCMTIzRkM5RAotOjEwMTJGMDAwNUVFQTI0NjVDNjU3QkZDNEYyRTNGRTUzQkM2MzA0QzY2RQotOjEwMTMwMDAwOTQ5OUM1M0M5NDAzRTk5OUYwMzEzQzMzM0NBRTE3RjExNAotOjEwMTMxMDAwOUI4RDdGOTUyOTdFNzNEQ0Y5MjBBMUJDOEVGQjIzRDBBOQotOjEwMTMyMDAwM0RENEQxNERCMzY5QkQ3QTMyMzRFOTIwQTY3NTdCMjUxMQotOjEwMTMzMDAwRjIxRjM1MUVFMUVCREI5ODBFQkI5RkU4OUMzQUE2MTcyNwotOjEwMTM0MDAwNThGRjM1N0JCOTdGQUJBNjkzOUYwRjlDRjNBMkJEREUwMAotOjEwMTM1MDAwQjg0RTdCRkVCQzVFRjg3NzU5NDBBQzVCMjEyODNFOURDMQotOjEwMTM2MDAwRjhEQ0JEMkU2MzU1ODA5RkE3RDFCREIyODg5QTdERkY2MgotOjEwMTM3MDAwRDUxOUU0NzYxOEMzMDdDREZGRTgzMTg4MkM2M0YzMzgxQwotOjEwMTM4MDAwNUE1RjNBMDFFRjI5MUQ3RDhGOUYzNzFDRkQ1MDk5OUNCNAotOjEwMTM5MDAwNkQ3RkI1MzlDMEY5NjVBMzlCOUYxRjZGOUMxRDQ4MkVCQgotOjEwMTNBMDAwNjVGM0Q4M0Y3QkRFNDBEQzU3RkRFM0RGNjMwM0I1OUU4QQotOjEwMTNCMDAwRUMxMkE2MjI2NDVBMTM4RDdDMTg4QkYyRDFDMkVGQkJCQgotOjEwMTNDMDAwNDE1QjQ5QjZGNzkzNERCOTMwRTVDNDk0OEY5MkQ5RkU4RAotOjEwMTNEMDAwNTgzNkJGRThBMDIwREZGRkQ1Q0VBRTk0MzA3RUJCRUIwMQotOjEwMTNFMDAwNjk4OUNFOThCQTk2MzFCODdBQzA2MzFDOTZGNTQ3Nzg2OQotOjEwMTNGMDAwMUFGN0JDNEI3RTBBRUZERUVDRkVFRUE3MDMyMTlBN0ZDNAotOjEwMTQwMDAwRDdCMkY4RDJGMzE4QkVCRUM3ODQzQjhFRjJFMDZFMkI4MwotOjEwMTQxMDAwQ0ZENjdGMUNENjkzRkY2QTdCODBGMzczOTc5N0VGQzM3OQotOjEwMTQyMDAwNDE2RDJCOTkxQTQ0Mzk5OTc4RjEwQTA2RTc1RDRDRkUxMwotOjEwMTQzMDAwNzBGRERFRTg4QTEwRENGMTA1NDBFRkZGODFCODVGNThFRgotOjEwMTQ0MDAwNzYwOTZDQjlDOUIyNUYzQjE4OTg3MDA4RTk3RDI4QzA2RAotOjEwMTQ1MDAwRTM4RkZBQzQyMjEyQzIxREY5RThGRDEwRjY3RkY0MDNFRgotOjEwMTQ2MDAwMEZEMUFGNTRGODhCQ0M3NjQ3MDNFMjFDMkU2OEZDODY3NAotOjEwMTQ3MDAwRjg2NTZFMTEyOUM1NDgyQzE0QTkxRjA1MzA2MjBGQzNFOQotOjEwMTQ4MDAwQjc0NTdGQTdFOTE2QTc3MTBBNjM0QzA3MzI3ODBBMDNBQwotOjEwMTQ5MDAwMzIzRjBGNjNGQjM0REM3RjM0ODJGOTEzQTdGRDhBMjlDNgotOjEwMTRBMDAwN0Y3OEU5NERCNUM0REQ0QjdCQTU1NDkwRTlDRkQxREUwMwotOjEwMTRCMDAwNDAwQUZEMzI4NTczNjU3QzgzODdEOUEzNUVERTVGODczMgotOjEwMTRDMDAwREQ2RTQ1MEQ4Q0ZBMTc3NTAwNTA5RUVGOEY0QzdENkNDQwotOjEwMTREMDAwRUFGMTk2MDJBRUZGNUFENkE5QTQxRjM3QTk5RDNFRjRBMQotOjEwMTRFMDAwNEI5NzFCN0FBRENBQzYyRDU0NzU4QUI3MTgzMDk3Q0I2NwotOjEwMTRGMDAwN0JERUUwN0IwQUJBRURBMkYzMDAxRUY5NDhDOUVBMUZDMQotOjEwMTUwMDAwMzkzMzY4RTIyQkY2MEZDNEQ3RjA4M0M3RjZBMzc5MTVGOQotOjEwMTUxMDAwRjE0MTFGQTRGNzI0NjFGNzhDN0I1QkJDOEIyOEVFMTk4QgotOjEwMTUyMDAwMzQ3NkRGMjNCMEVCQTM4RDNFNjFDNzQwREJFRkYxREMwNwotOjEwMTUzMDAwRkU4OUJGQUE3NDdGQTA1QkZGQ0M5RTQ0RUIyOTI4NTU4RgotOjEwMTU0MDAwQ0YyMDdGOURGNzJCQjEzRDEwRkE4N0VERjYwODJGRTdFRQotOjEwMTU1MDAwM0MxNzRCMjAxQzRFN0QzMzE2OTg1RTkyN0FENzNCNEUzQgotOjEwMTU2MDAwM0EzMzIzQkMzQjVGQzY5MDMyRUEyMDkzMzM0QjdCQTdEMAotOjEwMTU3MDAwOUVFQTE3MTRFQkFDRDA1MzI3NjA3Q0JGMEJGNTM0M0ZDOQotOjEwMTU4MDAwNTUyRjhFM0NFM0IxRjA4RkE5QTdEMkZDOTQyNEJDM0EyRQotOjEwMTU5MDAwQzc5MUMwREI5REQ3MDZBMzdFNzk0RTQxM0ZDQUQxMDlEMgotOjEwMTVBMDAwRkNFRkZDQTQ4NDFDMTVCQzk3QkMxOEY5NjFGRERFOEIxNAotOjEwMTVCMDAwN0NDOEY3QkIwRTRFRjRBMjU4NUQxQkU2RjdDRUQ0N0Q3NwotOjEwMTVDMDAwRDNFMjIwRDhDNzdBQUVFQzAyQUYxRUE4NDQ3Q0M4ODQxMAotOjEwMTVEMDAwMDc0NTYzNzlDQkY4QzdEQjI0NzFFRjUyQ0Y5Rjk2RTVCRgotOjEwMTVFMDAwN0Q2QzMzQkQzNkNDRUY5NUVEM0EzODI4OUZFRjQ3NTNFRAotOjEwMTVGMDAwNDRGNzZFQkUxN0ZFMEI1MzJFNEM3RTc3RjJCNzI5MEZDMQotOjEwMTYwMDAwMDlENjRBQjZEODExOEFENDJFRjY4Rjc2M0Y0MjQyRDhGMAotOjEwMTYxMDAwMTEwOUYzRkQ5OTc4MDlEOTg3OEI4NDdEOTgwODBDNURCMQotOjEwMTYyMDAwOEQ3RkU2QTAyNTU1QUJFMUI5QzdBMkUwMjA4QUFGNUU2OQotOjEwMTYzMDAwRDQ5N0UzQ0Y4OTBGMzM2REZDODBEOThCOTYzOEY4NDY2OQotOjEwMTY0MDAwRjUxOEY5QzcxQTNGNzBEQkJFOUJGOENEODUxNzEzQkY5RAotOjEwMTY1MDAwRTcyMjdFQTU4RjhGREY3MzgyOUNDRTRFM0M3RkQyRjkyRQotOjEwMTY2MDAwOTc1RDNCMzZFQjdEQkU3Rjk1Rjk5RjA3QjEyNzNCQzk2MAotOjEwMTY3MDAwMUZDQkVGOTM5OEZDNjZFQThGOUFFQjVBMTM3OTdBNUE0QwotOjEwMTY4MDAwNUY5OEY3NDE0Q0JENjNFQTk3NzMxQURBOUVDOUNCQTIwMwotOjEwMTY5MDAwM0Y5QzdBMjNFMkQyQkVCQjg2RTEyRkYyQjMwMEJENzczNgotOjEwMTZBMDAwRTJENDIzRUZFMTJGMjVFNDc3QkIzQkM4RTA3REU0RDkwQQotOjEwMTZCMDAwMzc2NUY0OUIzQ0Y2NTMzNjc3NTYxRUQ5NTdDN0ZEODJFMwotOjEwMTZDMDAwMURBNzc2REU2NURBQURBNkJERUFBQzY3REFBQkU2QkE5MQotOjEwMTZEMDAwNjM5RTM3RkQzQTE4N0IwMEM3OTdGNjMwNzkwQTYxN0MyNAotOjEwMTZFMDAwMkNERjI3MUYwQ0M0MUVDMkVGNzkwQzY2M0ZDNjAyNTZDMgotOjEwMTZGMDAwQTZDQUY5N0VENjJFQUZCOUU0MzNDRjIxN0ZFRDI5OTU2NgotOjEwMTcwMDAwRDZCRjM4NUJGRjg2NDg5OTcwOThFM0Q3MDdDNUJCMDIwMAotOjEwMTcxMDAwOENFQkQwQUUyOUFCMDEzRUQ4NDJGRTZFNDBEOTcwODgyQQotOjEwMTcyMDAwRTFGQThDRDc0QjcxOUVCRjEyNzZEOTczNjJCRDMxRDM2QgotOjEwMTczMDAwODM4MUU4MDE4NERGQTU0MkRDNTNGREYxRTEzNkZEOEJCNgotOjEwMTc0MDAwQkYwRTFBRkJCMTNGRUY2NDgzRTZEMTVGODMwOERBRkI3QgotOjEwMTc1MDAwRkRENTc2MjlDMkUwMjg2Q0QwQTU2RTY3OEZCOUFFQjNFRgotOjEwMTc2MDAwRkVGQTRGRDFFOUREOEZGRTc4QTcwMEVCQTM3RDk0ODVDQgotOjEwMTc3MDAwM0U3RjBFRjJCOEE2MDVERUNFNjdEMTg0NkY5Q0QyMzREMAotOjEwMTc4MDAwMzlENEMzRjk3QUZBM0Q4NDg4RjA3M0Q5RTM0MDhFM0VBOAotOjEwMTc5MDAwRjVDMjAwM0NGRjdDRTUwN0VGMDZGMTVDRUJCRkQ0NjNDQwotOjEwMTdBMDAwNDE4NEYzRjUyNUJGMEZFMjdEODg1Nzk2RjBGREM3OTU3QwotOjEwMTdCMDAwMEUzQkU3ODRDMERGQjQ1MEY0NDg5MEE1REY2OUZFQTg3MwotOjEwMTdDMDAwQzZGNjBFQzk2MjdFM0U3Mzc1NTJDMTRENjkzN0JGQ0ZGMgotOjEwMTdEMDAwREY5MTQ3QkUzRDMzQkZBMEJEOEYyRDZGRjJFOTAyMEZGMQotOjEwMTdFMDAwOEZEQjcyQ0VCRjJBQzRFMzY4QUVERUI5QzVERDVGQzc0QQotOjEwMTdGMDAwRjE2M0ZGOERFM0JGMkVFQ0I4RDc3NzA3QzlGRjYxQzI1NQotOjEwMTgwMDAwMzM2QkU3NDgzN0UyRTFCRkY2N0FDNEI5N0Y4NzhCRTNGMQotOjEwMTgxMDAwREY5ODgyRTc3MzMxNDEwQTI3OUNDRjNFOUQ0N0ZENURFQgotOjEwMTgyMDAwNzVCQjQyNzZDNzRDMzZENjYyQzZERkIxQkQ1N0QzM0VENAotOjEwMTgzMDAwREMzOThGQUI1RUQxMjdGNTYzRjRCQjZBOTU0NEY2MkE5OQotOjEwMTg0MDAwRDY1RkMyRjgyMUI2NzgyNTlERTMzOUU3MzkzM0VFODhCMwotOjEwMTg1MDAwMUYxMTc2ODUzM0NFNjRDRTVFN0VGRTVFMEZGQUVBRjEwRQotOjEwMTg2MDAwRTU1OUUyNEVGNjVFNENFNzZFNzM3QUQ5Rjc5NDg3ODRCOQotOjEwMTg3MDAwM0Q1MTAzRTc2MERDRkMwOUE4NUE1QkE1RjdCRUVGNzk5MAotOjEwMTg4MDAwQkQxOTI4ODhFQ0NENjYyRkE1NDc5QTM1OUUwQUZEMzlFQgotOjEwMTg5MDAwN0ZDRkJFNjc4OUNGRDQ4RTFBOTRGQjVEMDc1RkNERkJFNwotOjEwMThBMDAwOTY5RUQ2RTM1RkRFRjJFRTMzNzdCM0ZDMjhFMDdFMUUzMQotOjEwMThCMDAwRDNERjNFNDNFMEZEMDJBMUNGRTcwODdCNjFENDA3M0RDMwotOjEwMThDMDAwRUJGMzE5ODg4RkUxOTlGMDlBN0E3QzA2RkVCRDQxMEIwMwotOjEwMThEMDAwMUU0Q0JERUVDNEM3RjE4MzgzRjM5MDNGRUE0MkNFRjNDMgotOjEwMThFMDAwRTY0Rjg2OTc1Q0VEMTYyOEQ5RTMxOTREMzkzQTEyRTQ5NAotOjEwMThGMDAwN0M1REJGRUREMjE1QTU2Q0ZDQzQ1M0FGOUREMUM5RjU3RAotOjEwMTkwMDAwQzQyMUQ0MTMyNjlGMDIzNEI5NTE4RTlERkM2OEYyNDkzQwotOjEwMTkxMDAwMzdERkVEQkQ5OUYwNjRGMjA3OTNBQkIwMzhFNzBDRTMyNQotOjEwMTkyMDAwRkVEMEM5N0ZCREM1Mzc3NUI5M0FDRjQwQkRFMEU0QjMzRAotOjEwMTkzMDAwMkVDN0JENjgzM0JEMkNDNEZERUZGNUJBMzEwOUY3QUIzNgotOjEwMTk0MDAwNkNCOTU5QzFDRjAzQjkzRTdBNUQ2RDdCRjY0Njk0RDcyOQotOjEwMTk1MDAwNkQ1QzVFMTYzQ0ZFRDA0RjUwMEZDREZCRjFFRDIxRDRGNwotOjEwMTk2MDAwNDM2RkE4NkRDNTM4NUVDM0Y2RTUyMTNDNTc3RjVEOEQ5QQotOjEwMTk3MDAwODdCMEZEMUI0OTI1NkJGQ0UzQ0U5MDY0QkVBNzYxOEI0RAotOjEwMTk4MDAwOTM4MEQ2RjgyNTI4QzdGRkQ4RUVEMkYwMUNBQzcxODcxQgotOjEwMTk5MDAwODc5RkJCRUZFNjc4NjM3OTdFREVCRTNCN0I5Q0M0QkM1MQotOjEwMTlBMDAwMUZERDVFQUNGM0I4NUI3QkJDQzQzNjE3RjkyRkQwQkYyQwotOjEwMTlCMDAwODZDM0U0M0EyRkVFM0U3RjZFRUZGOTNDQkQ3MUI3ODhFNwotOjEwMTlDMDAwQjNEOTdENzFENjc4MDkzMzJFQzFDOUM3OUIxQ0ZDQ0IxNgotOjEwMTlEMDAwRjA0MzdFQkYzODgzOEJEQ0VERTI5QzNDNzFGRjlEQzNGRQotOjEwMTlFMDAwMEYzM0Y4OEU2Q0ZCNTU0OEFBQjJGQUUzRjk3OUZDRjE5MwotOjEwMTlGMDAwRjZFRkZFRDAyQkU3RTZERjJFQzFFRjY5N0IyMjk5MzVBQgotOjEwMUEwMDAwN0VBMkMxOTUwQUUxQkVBQTYxOEI4QkY2ODEwRDBGMjlEQQotOjEwMUExMDAwRjQ1RTFERkNEMTQzRUJGOUZDODc3RUY2ODc3MzE5N0NERAotOjEwMUEyMDAwRjMxRjcxMTU0REUxRDNBMDM4MDk5MzVFREQ3MTJDODI0RgotOjEwMUEzMDAwM0VGMzFFRkQxOTNGNUZENjQ1M0M4QkEwRDNGQzQ3RjYxNQotOjEwMUE0MDAwQjkzMTJFQzc4OUNGODlFREZCREM5RDhFMzgwOEEyNTdBRQotOjEwMUE1MDAwRkJFMTQ5NzQ5RkYwRkVGN0REQjhDRUJFRjFCNDA0RkRBMgotOjEwMUE2MDAwQ0EzM0RCQ0ZEREYyQjMxMEVBMEJDNDEzQzUwMTA4QkFFOQotOjEwMUE3MDAwRTU4RTVCNEE1REYyRDNEMTU0OEZGQzc2QkREMTcxMDlGRQotOjEwMUE4MDAwQ0FFMjE4RTJGNzg3N0ZDQUUwOThGQjkyODdFMkE3RTZFRQotOjEwMUE5MDAwM0U3QzFEQzUxOUJEQTYzNjcxQkVCRjY3NzkzMUFFQkY4QwotOjEwMUFBMDAwNzM1REYxNjI4RDUyRkU3REVFRTZFQjg5MUZFNzNDN0ZCMAotOjEwMUFCMDAwN0RCMUI4OEY1NEMyRkQzREYxMTI5Q0U3NTU5QkJFNDlFNAotOjEwMUFDMDAwRjM5QzBEMzFFMkM3QjlGNzI4NTFGNEIzOUM1MDYxRjI5MQotOjEwMUFEMDAwMjM1OUU0NjY2ODNFOTc5QkQ3QjY3QUYwMzExRDc4NEQ1RQotOjEwMUFFMDAwRjgzOUUzQkY1M0M0REY4Qjc0OUU1N0YxNzc2MzRFODg5OAotOjEwMUFGMDAwRkRGNzNGNDNEREU3OEQ1RUVCN0VBQzcxREJDQTBFQTRFNAotOjEwMUIwMDAwRDM5QjAzOEM3RTFBQzUxM0E4NzE4MTM3N0E3RjVENzlDOAotOjEwMUIxMDAwRkVDMjdFNDJCRkQxN0IzN0E2MUQzNDExQkY2M0ZEMEVDRQotOjEwMUIyMDAwMTdCRDdCNjM2OTY3N0JCNzY2OTExODlGQzFFRDk3NDZDOAotOjEwMUIzMDAwQjBCNDM4QkIxRkY0OUJGOTkyMTkwN0NGRTM2RjRDM0U0QQotOjEwMUI0MDAwQ0JBNTA3QjZGMTc4OTZGNzBFNzEzRDgzNzEzOTU0REU1NwotOjEwMUI1MDAwRTE0QUY1QjNDNUUzNzg2Q0VGQTJBNEUzNEM1QzQyQ0U1NgotOjEwMUI2MDAwRURFNTBDNEU4QTk3RTlDNkVGRDMxMkZEM0QwODkzNUY3MQotOjEwMUI3MDAwNjZBRkY3RDhFM0YzQkFGOUM3Rjk2RThGM0Q3RTY2OEU4QwotOjEwMUI4MDAwQzMyRTMzRDM4Q0Y1M0ZERjcxNUVCN0U5RDRFMjY3MUExOQotOjEwMUI5MDAwNUM0OThBN0Y2QUY4QTM4N0Y2MjcwRDBGQjlBMjg4OTc1OAotOjEwMUJBMDAwQjc3NjNFRjM4NzZGMzFCRTdGQUJERDk0NjNCQkRFNzVFNgotOjEwMUJCMDAwQ0FGMURDNUQ2MzIwOUIxQ0JGMTU4ODQwNTYzOTY2REY4NwotOjEwMUJDMDAwQjNDQTcxMjA3REFFQTFDMzY3QUY3N0U3RTREMEJCNUYzNgotOjEwMUJEMDAwNzVFMDkzRDkwREY5MTg0N0ZDRTYwM0YzMDc5MkJGQzJFRAotOjEwMUJFMDAwODE1RjUzREYzQUY1RThBQjIxOURGMDlDMTlFRkM3RDczMQotOjEwMUJGMDAwRkQ3NDNDMjZDN0EzQzk5RkYzMUU1QzQwRTM3NEYzQjE5OAotOjEwMUMwMDAwQzlBNzI2MUZFNzg4MUI3M0UyRDM1OTlFOEZCRUIzMzE0NQotOjEwMUMxMDAwOTk3RTkxNzgyRDU0RTJERjY5NEFCODgxQkZGNzI2RkI5RgotOjEwMUMyMDAwMjNDOEJGQkQ5RDc3RkUzNkJGREM3Q0ZGNkQwNERGMTc4OAotOjEwMUMzMDAwRjJGM0NFNDg0MEMzQkY1ODgxRjdFNTk0NkNFN0VDOTFDRQotOjEwMUM0MDAwODk3MjU2RkJGRjA3RjlEQzRFNDJCNzJDQTY4RkU3NzM2QgotOjEwMUM1MDAwRkNCNTI4NTFFMUM4NkJBNzdCMEM3NEI2OEE3MDE2ODQ1QQotOjEwMUM2MDAwNDhDRTVDMjI0RTg1RjU0Q0Y3RDEyMzc5RjJCQjNBRUI5NgotOjEwMUM3MDAwRTNBRUI1MDcyRTUyRDEzRjNCNEFCRTZFMzBDQkVGNUE5MgotOjEwMUM4MDAwRkJFMjQ1MkFBMzc3RTQzQ0Y5RDE0MTJDQkY3QkVEMUY1MQotOjEwMUM5MDAwNzlGOTA4Nzk5NDhCQjFFQThFRjg0QjE3RDVCMUZDNDJFQgotOjEwMUNBMDAwMzFFRjg1QTY5RkE0NjU4Q0NENEZBMkNBODdFRkMwRjMwNAotOjEwMUNCMDAwMUNGNUE3RkNFRjExQUQ2NjcyRUZBRDRFOUYzM0U3NzlDRgotOjEwMUNDMDAwMjBFRTYzRjkzQzM3NEI1OTdFNDVGOUVGNTdFMDI2RjI5OQotOjEwMUNEMDAwNTdGRUQ4ODY3Q0MyNTdBRDhFNzgzRUEyNzkyOTdFNjdBMgotOjEwMUNFMDAwRDExMzE3NTIxQ0U5RTNGOURDMUY3REY2QTNFN0QxREYxRQotOjEwMUNGMDAwNzVGQzBDRTFCODNGQkY2RjZFMzg1QTVDQkM5RjIzQkJDQwotOjEwMUQwMDAwQ0U5RTg4NzgzRTdCMjBGQUQ0RDJGNEE4NTY3NUZBRUU5RgotOjEwMUQxMDAwNjM2ODhGNzNCQjNGOENGNzVCMTIwNTZFRUFFNzcxQzE5NgotOjEwMUQyMDAwNjdBNzlBOUE3MTJGNEExRUU3MEIyNTVGNkU3QTg0QTVFMgotOjEwMUQzMDAwNEYwQjdFRjg4RjdDQ0Q1Qzg3NjhERjdERjRBOTdFNUJERQotOjEwMUQ0MDAwRjlCQjMxQzdDRTQwN0EyQkNBRjEzRkEzQkQ3OUVDREI5QQotOjEwMUQ1MDAwNzlGNEY3NDc1RUYyNzNCQ0JERTRFNzc4QkIzQzdGOEQ1NgotOjEwMUQ2MDAwRUIyQ0Y2QkREQTdCQzY3NUM4RjQyRjQ5M0JBRkM3NzRDMAotOjEwMUQ3MDAwOEIxNkZCMjVBNzA3QTRCMERGNkY1REE5RjA3RTAzNEQ4RQotOjEwMUQ4MDAwNDE3QzM3NEUzMkI4MUQyRTMxNjY5QUMxRjA5MTMwNDBGOQotOjEwMUQ5MDAwNzcwRjQ2MTFCNkM3N0YyODRBRjVCMTE0OEQxRkI0OEQ1MQotOjEwMURBMDAwMEY2NTZDREQ2NDcyN0VGOTM4NEUyRjg2NUI1QTQ3NUY5MwotOjEwMURCMDAwMThDQkYzMjY3Q0QzOTM4MzEyOUQzQUMxRjMyNzg0NjcxMwotOjEwMURDMDAwQTQyNzM5MDBGNzUzREY2MjY2MTVFNzdCRkJCRUJFQ0I2NQotOjEwMUREMDAwQ0ZDRjM3QkJCMEZERjA3NEZDNDBFM0RGNjREQUNGMzYyMQotOjEwMURFMDAwRTIxQzU4RkVEMTIzMjBGRTVFMjE3RjVGQzdGNDdCOEM2RQotOjEwMURGMDAwRkJGNUI1RTRGRjFFQkQ2NzNFOEYzMzExRkUyRUYzM0NBRAotOjEwMUUwMDAwQkZFNjAwM0Y5RjczRkFCN0NFODMzNUE0NEZDNzM5RjRCRQotOjEwMUUxMDAwRTg3OTdCQkU0QUZBQjVCN0YzQjk3Rjk4N0FCNTE0NEEyOAotOjEwMUUyMDAwNEZGMzdDRUVBM0ZDNTMzODlGRkIxRjc2MjJCMjZFMDA2QgotOjEwMUUzMDAwODAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkI1NUE1NgotOjEwMUU0MDAwMDk3NDU0NTU5QUZFNUZCRERBOTJBQTU0QUEyQTQ1MDgyRAotOjEwMUU1MDAwMDRFMzRCMDIyNDIxMEI0NTEyMjAwNEQ0MjIyMEQwMzE2QwotOjEwMUU2MDAwNEE4MDE2ODFGNjQ4ODFCMjk4QUQ5OEI0REI2OTlENDNFQgotOjEwMUU3MDAwODUyMEQyREFBMzE5NzU2Q0NFNjlCQUU3ODVENjExMjUwQgotOjEwMUU4MDAwRTkyOTI0RDFFMDU0MzJDNTIyMDQyNTRFOTA0NUEwMURGNQotOjEwMUU5MDAwM0JFRDc0MjNEQTY0MzEzRDgyNEJGNzYxRkVGRkRFRkJEQwotOjEwMUVBMDAwQTgyNTQxRTkzRTY3QzhFMURDQkFFRkRENzdERjdGQkZGNwotOjEwMUVCMDAwRkZGQkI3N0JERkJBNDQwOTYwMENEMDNGMUQyNDAzRDQ3RAotOjEwMUVDMDAwOUJGMTk3MDIzMDdDM0MyMzExRjIwMEY0N0EwMEQ5MDk4RgotOjEwMUVEMDAwNjA1NDY0MjhDMUY2MkFGREJCMERBMDZEMzM4RTMzODU5NgotOjEwMUVFMDAwRkI2RjI1MkE2QzlFRkM1M0Y2RkJDMTQ2MkRBQzg2ODIwNwotOjEwMUVGMDAwODg3OUVEN0NERURCNjUyQjQwMzFDRTdGMTE1NDUzM0E3RgotOjEwMUYwMDAwQzBCNEJFRUM5RkNGQzFCRUExREIwMDJBQkQ5NzlFQTA4RQotOjEwMUYxMDAwRkI2Nzc1QUExRjQ1OUI3MUVDRDc0NTIxQkNCNDM1Q0UzNAotOjEwMUYyMDAwNTYwMDUzRjE5NTI5M0E1MENDNkM1RUI4OEFGRkUzOTQ4MQotOjEwMUYzMDAwNzg1MEIyQzM3RDRCQjYzM0FBMkZDN0RCNzY0MTIyRkU2MQotOjEwMUY0MDAwRjA3QjdBNTM1MDhFMjI3RTBCMTJEQ0UzQTNFNjc5REIyMgotOjEwMUY1MDAwQjZBODlCRTQyRUIyQUZBRjIwQjkxMzRCMzJBMkU2ODFGNAotOjEwMUY2MDAwRTNGQTRGRkFCMDlGOEQ3RjU3MzMwMEE2NDM2NTYyMDhBRQotOjEwMUY3MDAwRTUyRjg0NEE4Rjg0RjJCQTNGMDI3NzA4RTU5RjcxOEE4MQotOjEwMUY4MDAwOEZEMzlFNzM4N0ZDQjIxNzcxMkNGOTI4RkE3QTI5NDRGMwotOjEwMUY5MDAwRjQ3MTlFQzczRUZBQzI3MTM4NDI5RUU5RjYwNEQ3MDUzNQotOjEwMUZBMDAwMEJGRTE4MEZFM0FGQ0FBM0UyRTgwRTExNEVBNzY0Mzc4OQotOjEwMUZCMDAwQUEwMUVBOEZFMTIwMTdCNjlGODEwQTg4REIzNDI4NDhGRQotOjEwMUZDMDAwMDQ4NkFCMEMyQUY2REYwNEVGMEI3M0IwQkRCMjc5QzgwMAotOjEwMUZEMDAwNzE3ODUyMTg0Rjg3MjcxQUNGQTQ0NUQxNzg4RUE5OENEMwotOjEwMUZFMDAwQzY3M0VDOEE2OERDQzY3OUEzNzE0QUREMzgyNUVBRkUzRgotOjEwMUZGMDAwNEQ5QjBBQTNGQTM3M0Y1NjFBMzUzRURENUYxNkQ1Q0YwMwotOjEwMjAwMDAwREM1RTFFMzU3RTUyRDNEMkE4N0VENjhFNTU1MUUzNzM0OAotOjEwMjAxMDAwRDRCNTUxRjc3Mzc3NTdERDkwRkVGMzAzRjU1MUUzNjJDMgotOjEwMjAyMDAwRjUzRkI1RTMyNzUxRjM5NkNBRjdDQTkwMTFFNjgxMUYzMQotOjEwMjAzMDAwRkY4ODA3ODVBNDYyRDIzRkVBMjEwNDIzRjUzRkQzRTU1OAotOjEwMjA0MDAwMjdDNkZGQ0RGQTdGOThGNDlGMUJBMTdGRjlERTQ0QUYyRQotOjEwMjA1MDAwMzU2QzZGQjFBREE2RDc5RkQwNUFDNzkwNUU3MTRFMTQ0NAotOjEwMjA2MDAwRUUwQUU5MTlBRjBEMUFBQ0RCMjU2QzFEQzg5RDdCRjE5QQotOjEwMjA3MDAwRkE2MzY2N0VGRDUxODFDRjk1QjgzNDk1RDZFRjA4MUU4MAotOjEwMjA4MDAwRkQ1QUMyMTZENUMyRUNEMEZGQjE0NTZENDRERTNDMkFFNAotOjEwMjA5MDAwMkIwREM0QUIxN0U1NEEwOTUwOUU1NDU0OUQyRTEzNzk1RAotOjEwMjBBMDAwQTQ4MzhEMDFFNEY3QjMzQURERUFDQTA4Rjk5RUIzNzM1RAotOjEwMjBCMDAwQkZGMjlDNURDN0RBNUYxOEQxNTZGMUJEQTkxNkYwOUIzRgotOjEwMjBDMDAwMEJEOTczQjQzNkZBRTcwMTVDQjcyRDg5ODE4MjJGMkNDNgotOjEwMjBEMDAwREYzRTdGMEVERTc3RjQ2NTJCMEUwMDMzRjU2RjAxMzg5RgotOjEwMjBFMDAwMUZDRkU1M0QxRkNGRTU1QzY1NTIxQUZCQzg3RkM4RUFFQwotOjEwMjBGMDAwMjQ5MkE3RDlFRURENjlDN0Y3OUM5NzlFMzBFMDlCQzE3QgotOjEwMjEwMDAwRTBGMjFCQzhFRTUyQ0RFMEI3RTFGQjFBMERCMEJBMTJGNwotOjEwMjExMDAwRkIwRTcwNDlGNUQ4MjZDMjRFM0JFMThCNjIyODU3OTFFMQotOjEwMjEyMDAwMTQ4N0FBNzIxM0ZCRjBGQUZCMjREMTM4QjIzMUI3MEUzMAotOjEwMjEzMDAwNjYwMEFDRDRGQ0UxQzYxQ0U2MEY4NzcxOERCREE0NTBDRgotOjEwMjE0MDAwQkQ5MjA4RDgwRTNGOTBDOUFFOUZCQjBGQUQxMEVERTkxMAotOjEwMjE1MDAwOUM5MUUzQTFFMTcwNTFGOEM5Q0YzNzlCNTk3QjY5QjNEQQotOjEwMjE2MDAwM0RDQTZGNkU2QzdFMjE0MUMxNzlDRTY1QzNBMjQwMDQyOQotOjEwMjE3MDAwN0U1RDg0REY3NDZBNjU4NkRGODBGQUM3NjQ4MjY3NzA3QgotOjEwMjE4MDAwRERCNzkzNDk2ODlGRDRCQkNEOEE0MzlFREFGMTBGOTVBMgotOjEwMjE5MDAwODA3QTMwQjYyREYxQTM0RTYwQTU1MTYxRTNCNTc5N0MwQwotOjEwMjFBMDAwQzFCOTQwMzgxMDYzRTlGQTNEMUZDMjI2OTJFRjlFNkYxNQotOjEwMjFCMDAwQjE4RDc4NUY4RkREQzBERUQ3NDNFRkMzNzYzOTM2NzZEOQotOjEwMjFDMDAwQzQ2RDM5RUFDNTQxRUREMTM5MEJDODJFRjA3QTQ4QzI0OQotOjEwMjFEMDAwRkVFMjZFMzA5MDNEMkNGMUE2MUI0ODlFOTNFMDNFREQ2MgotOjEwMjFFMDAwOEVGMjlDQjUyQkVDRjkxRjQyQTU4MUU0M0E3MzVGNkQyQQotOjEwMjFGMDAwMDI4REJCMzY5RjM2MEYwQUVCQzA3OEYyQTFDMzZGNDg0MQotOjEwMjIwMDAwNDZCRjM1NzQ4QkU0REVBNUIwRjc5OUU5N0FFNUJEQTk0MAotOjEwMjIxMDAwNEY1QTk1RjBGQkNFODBCN0ZGMzRFQTdCMjlCOEQ5QkM4MgotOjEwMjIyMDAwREFGQzY4Nzk1MTdFRjE4RDhERDVCRjRCQ0EyMDdGQTgyRAotOjEwMjIzMDAwMDMzM0Y5QzM0RTEzRjM4NzgzNTU1NzVBNUZDMkZCQUI4MQotOjEwMjI0MDAwNTNGQjZFMzJFMjczRTdBQkJFOUQ0Q0I4QUNEQzIxODMyRQotOjEwMjI1MDAwODJGQUZGMjRDMUZCMDdGQkY0MzAxRUU3MUVGODczMDI2RAotOjEwMjI2MDAwREQ1RjY1NTI1Rjc5MDlFRDAwRjY5OERDQUYwMDNEQjdBMAotOjEwMjI3MDAwODczREE3OEQxQkIwQ0ZGRDhDNzgwNzI1MDhENEFDRUIyQwotOjEwMjI4MDAwREJBNzg2RkZCQ0Q3NzNDNjEyQ0YzNDdFM0QyOEY4NTUzNgotOjEwMjI5MDAwRkY1QUQ2NThFMjUzN0RDMjM1N0VGMUZFMkI5OTYzODlGMQotOjEwMjJBMDAwNUYzMzI0Q0VDQkQ4NzlCQjkwNUY0QTE2QUUxQjc5QTU5RAotOjEwMjJCMDAwMjBBRkJBQkUyQTRCMjIzRkIxRUZCOEIzODhFNEQ0ODMzMwotOjEwMjJDMDAwRjc2QUU0QkFGNkJEQkYyQTk3RUVDMzU5RDcwREM5NEJEQQotOjEwMjJEMDAwQjZFOTQ3MzlFRjAxMkU2NzhGQjA4RjE1QzFBNDIyRDIxRQotOjEwMjJFMDAwM0JEQTlEQzU4MUUzNTZGREM3NkJGREJGMjU3QzNBRjcwMAotOjEwMjJGMDAwQkNGMjM4OEQyOUJFMzEzQzM0RkZCNDM3OUVDNzIzMTA2MQotOjEwMjMwMDAwNzFDRTJENzBDMTM4OTdBRDQ3NTEwNzIxREU0REY5QzIwRQotOjEwMjMxMDAwRjVGQ0Q2NUVGMjBCQzhBQjJCM0E3NDdDOTlFNEFGMkE3RAotOjEwMjMyMDAwODFGQzgyMDVEQzBBQjVFODY1REU5QjhEN0E2QzNDQTBGOQotOjEwMjMzMDAwODNBN0IxNkIyM0E3QTZGOTlGMTJFQ0NCM0FFRTdGQjAyRgotOjEwMjM0MDAwNkY0RUMxMzgyMkZDRDMyNEM3QkYyRURBQ0FFQ0M3NjM1NAotOjEwMjM1MDAwNUQzMzgzQjk0NDI2NTdGMUUxQUEwQTdBMkZGNEEyMUYwQwotOjEwMjM2MDAwNDc1OTJCRjE4RkUyQzE2Q0Q4NzQyODBFRTU5Q0IxMDM1QwotOjEwMjM3MDAwRjMwMzFDMzdGMzJDQkZBRkY5RjU1OTIxREQxQTYzMjJBMwotOjEwMjM4MDAwOERGQkQ5MTdCMjhEMjA4QThFMDNCMzBGOTc3RjRBRjM0NgotOjEwMjM5MDAwQ0U4Njg4RTc0Njg5MEZCMzFDN0Y1RjdDOThFRkUwRkUwRQotOjEwMjNBMDAwMjE5MENERkQ3QjIwMTRBRkZBRDNEOUI0NDU5NUY5Qzg1RgotOjEwMjNCMDAwMTcyNzhGMUYyRDg4MzlEOUIxNTExQUM4MzZBMzFGNUUzMAotOjEwMjNDMDAwRTQ2OERFQkU3RDAyRDI2MTIyQzc4NUZBOERGNDVCMjkwNgotOjEwMjNEMDAwNjIzQ0JFOTYzNzFFOUVDMkZDMjFGQzA1QTUyMkJDRUNDOQotOjEwMjNFMDAwNDJFNjE4Nzk4QUQxRUU3ODMwNzY0N0U1OURBMTIzREY2MQotOjEwMjNGMDAwRDhGQTcwMURBRDRFRTVCRjQ4NUY0Mzk4RDc5MDVGODgwRgotOjEwMjQwMDAwRDNGNzE5MURBM0FDRUY0REYyQUZDOEZGRTcxQzNBMjY3NgotOjEwMjQxMDAwQUZCOTQzRjJBOEY4N0VCM0UyMDEwOUQ3MTA2N0I3NEYwRQotOjEwMjQyMDAwOTNBNUYwRjgzMjA3OEY0QkI1NDdDRUE3MTk1MTVGRkQ0MgotOjEwMjQzMDAwQkFFM0I2M0M5Q0JGQTZGRDBEMUIyRTFGN0U2Q0YzQUUwRgotOjEwMjQ0MDAwNzNFMDNDRDVFNzNFOTg0MUExMEIxOTlFNTY5OTQwMzg2MAotOjEwMjQ1MDAwNjUyNDkyM0RFNUVCQzFBRjJGMUMyOTg3NkYwNzJFMDYzRgotOjEwMjQ2MDAwMjk1RkI3MjM4OUI1MzkxRDEyNUI5RjJGQzRENzM5RDA5NwotOjEwMjQ3MDAwRDFFODhDRjQxQkQ3OUVGQkNGQ0VGMUE0QjczRDYzNjBBRgotOjEwMjQ4MDAwMDVGOUUzRkM2MEQxMDZFMjMxQzk2MjQwNURCQ0ZFNTU0RQotOjEwMjQ5MDAwMkU5QkVGMDk0NzNBQ0ZBRkY1QTBBN0VCMDBBQTZFMjkxNAotOjEwMjRBMDAwMEVEQTYzQzBFNzcwREU4MUFGNjQzNjRFOUIzN0JGNjNFMAotOjEwMjRCMDAwQUU2QzQ3MUVFNTg1OUEwRTUyNUUxODE3MzQyOUE0RTdDNAotOjEwMjRDMDAwQjg5NzgxRTMxMjhDNjM3RUQxRDdCNTEwMjg3RjFENzQzNQotOjEwMjREMDAwODA1QkMyRkJBREYxNDMxRjEzMkY4NjNBNERDQTJFODk5NAotOjEwMjRFMDAwRjA2QjAyMjdDRURGNkFFNEYxMzMwNzBERTEwRDZCRjhFNAotOjEwMjRGMDAwQkFGNkJFQjhFMENGODFGQzE1RjJDM0EzRDI3RDdEMTMzRQotOjEwMjUwMDAwREM2MjhEQzQzRDgxQzlGRjRCMDdFNzU3NkI3QzQ4Njc5MAotOjEwMjUxMDAwMjVCRjhGOUNEQ0M1RTQwQUNCMDlFQ0JEOUE5QzM5QUM4NQotOjEwMjUyMDAwMEU2ODM1MEU1RDc4RENDNUU0QjIxMzFGNzI4MENCMDlFRQotOjEwMjUzMDAwQzEyQ0U1MTU3QURFRUU2MUVCODhCMzJCNkVCRjM0NTIwOQotOjEwMjU0MDAwMkU1RjAxRTZDNTY4NzdDRjZFODE2Qjc2NEU3NkVGOEI5NgotOjEwMjU1MDAwMEZGN0NENjgxM0FEMTkyMEZDQzIyOTk2ODc4NEZCRThEQwotOjEwMjU2MDAwQjA0QUMyQ0ZCRkYxQ0Y2N0I2NkY5REMzRUEyM0JGOEMxRAotOjEwMjU3MDAwN0NCMDYwOUJFMEE0NzU3MkZCQzJCMkM5MzNBNjkwRTM0NQotOjEwMjU4MDAwRTA0NjlDMkM2NjdFRkZEQTc4RTRCQjk1RkE1NjNFQ0U5OAotOjEwMjU5MDAwOUQ2OEI3OTQ0QkNDNkU4MEVDQTY0RUY4OTk4N0E0RDA3QQotOjEwMjVBMDAwODVEQjUwQjU1Rjg2MEUxNjI4Mjg0QkNERDFCNzE5NkY0NQotOjEwMjVCMDAwQUI3NUMxOTdGMkYxN0U1OUJDMzc0OEZFRjdBRDhGNzQwOQotOjEwMjVDMDAwNjBDM0Y1N0ZGRTVBOUM1QTgxNzg2NEVGNkY0RUY2NThDRgotOjEwMjVEMDAwNDdDRUY3RDREOTJEQ0ZBNzkyQkVGNzRCMEEyMjhENzlEQgotOjEwMjVFMDAwRTE1MDFBQzk1NzE3RkNENEU4QzE3NjYxQzdFRjhEMTRDMgotOjEwMjVGMDAwOUY1NjM5QkQ0N0M4MEU0QTNBMUFFNjExN0VCM0EwQTlDNAotOjEwMjYwMDAwRDE2RTY1N0VEMTRCM0MwREE0NzBGRjMxN0M2QUYyQUU3OQotOjEwMjYxMDAwODYwOEJDMkYzOTc4REUwMjQzREU5QkM5NkU4MkMyM0UzQgotOjEwMjYyMDAwQkIyOEZGQzFCNjVERTQ2MUVEMDc1NjY2MkFGOUUxRTcxNAotOjEwMjYzMDAwRkM3MDMwMTU3MENFMkQ3MDM4OTU3MEQ2QUUwRkFBRkE5QQotOjEwMjY0MDAwNDVDNEE3REMzM0U2RDU5RTA4QkU1RDEwRjY3RTQxQkNDRQotOjEwMjY1MDAwRUYxRjlEREU4RjA4ODdFQTAzOUYxODZEQjgyRURGMUZERQotOjEwMjY2MDAwMDI2OTE0OUYwMjk4QTdEOUJGQzMyRkZBNjJFQ0M2QTdDQwotOjEwMjY3MDAwMUYzMkQyNzhERjQ1NjA3RTA0RjVCQTM1MTFGNUI0RTczNAotOjEwMjY4MDAwNENDNzk0MzU1NjI2M0YyNEUyQkFEQkNGOTk5OERGNkNDRAotOjEwMjY5MDAwNEZFN0Y2RDc3MEZBNzIwMUY5QURDQjlERDUzNzEzNUVDRgotOjEwMjZBMDAwRUYzQjBDMUFDRkNCRTJDOTlFRjYwMkYzNjM5QTNERTZFQwotOjEwMjZCMDAwOTEzREEyRTg3OUM0RjM2MkVBRTdCMEY5NUE4REJERTUyRAotOjEwMjZDMDAwQ0NGRURBNzU0MEY2ODczQzY3QkM0NzlFREIyOUZGQzgyNQotOjEwMjZEMDAwQjMyM0VGRDlGMzU5Q0M5RTVCN0IzMUUwNjFERjhGN0U3MgotOjEwMjZFMDAwN0MxMkVCOTcyREEzN0U2QkVGN0MzQkIzNjcxRDQyNUJBNwotOjEwMjZGMDAwNDg3NjE5M0FDOEU2MDk2MDRDMjNENTQ5NTAxOTk5QTc3QwotOjEwMjcwMDAwOTYzOTZDNEM1RUNEM0Y1NjNBQjhGRjBGNjQyQjg5NkVGQwotOjEwMjcxMDAwNUM4RjQ1OTZBM0VDMjAyMjVFRjJCRTg4QTcyQjlGMzdFNAotOjEwMjcyMDAwRkNGNEM1MDk2NDREMjIyRTg4QkNBQzRCRTRDMUUwMkRGRAotOjEwMjczMDAwNjJGRUZFQzcyMjk2RDVCRjUzQkFCODA1RDc1QkRGMjMyQQotOjEwMjc0MDAwNzNGRjJGNzg3MjUwRTRDOTg3MzdBN0IwM0VDNTBCMDVEOQotOjEwMjc1MDAwRjUzNDFENUIwRkZBRDMxOTlFNERGM0QwQzZBMDY0NTExQQotOjEwMjc2MDAwRDMyMTZBNEIyQjAzRjMxMDcxOThCM0EyRjc5MDgxOUI4RQotOjEwMjc3MDAwNzMyRUYxQUZFREUwMEY3MkY1QzRGNzczMjY4ODQzMTFBNQotOjEwMjc4MDAwREJCRTE5RkFGODc1QzRFMTkxMkVDNDdGOTRCODg0Q0JFRQotOjEwMjc5MDAwNjFGQzQzMDQxODFGQUZDNzlCNDFBOUVGQUVEOTZFNEMzMwotOjEwMjdBMDAwRjk5RjFGRkIwMzdEMUNEQTBGMTEwM0YxQzg3QjdFQ0M2MAotOjEwMjdCMDAwNEZGRDI4NTBCQkQzMzNENTg5MzhGRTM2QzkzQkQ1ODk2OAotOjEwMjdDMDAwMzgwRTlFRjgyNjk5N0M3QUZCQTk0RjZDRTRFRkRCOENERgotOjEwMjdEMDAwOUU1Q0UyNTk1QjA2RDYwQkEzRjA3MzgyOTNGM0E3RDhGNQotOjEwMjdFMDAwMTQ5REE3NkJFRDUyMjdFN0ZGNjQzRjNDNDNGQ0E5NkJBOAotOjEwMjdGMDAwOTNFRDJBRUFCQkJGNERGNjE4MzE4RkJBRTBGMTI2RUIxNAotOjEwMjgwMDAwMTFEMjhCRTA1RjNFOUJFMkJCQTg3RkQ3NzFEODYxMURFMAotOjEwMjgxMDAwRTUyRjE4NjdENkJGNjg4OEFBNEI2QkM0QkU0NjE2RjQ2RQotOjEwMjgyMDAwNkQ0QjQ1OUM3QzJGNEJBQ0FFREQxODkzOEZENDUwRkU4NgotOjEwMjgzMDAwNTI0MEY1NDVCMzkxRDY1M0Y1NzJDQzNDOTRDNzE0RDBCMQotOjEwMjg0MDAwQjhFRkFFNzM5NzNBQzUzRTQ3MjY2NDUyMUU4MzNDNjI4QQotOjEwMjg1MDAwRjVGNEQwNjlEOUJEOEI2MkEwMUVCQTREQzhERjNEM0FGMAotOjEwMjg2MDAwOEUxM0ZBNEQ2NjhGNUEzRTYzNzI3OUU2OTFERENGRDNBRgotOjEwMjg3MDAwRTI4QUE4NUI4NzVBMjU5NUQ5Q0Y2RUY0RjNEODJGQkQ4RAotOjEwMjg4MDAwQTgzNDAzQzdFMTU0Q0EwQzVBMEZFNzY1QTk5RThGMkZERAotOjEwMjg5MDAwMERBNjMzRkIyQkYxNjAzRDhGRUI1RThGRjVCQzRBRUI1MQotOjEwMjhBMDAwRDZGMjNDRDVDMEQ2OEZFMTk3RTU3OUIzNDA2REI0RTE1RgotOjEwMjhCMDAwQjgwREJCMjVCNkVGNTNCRERCMTA5NUU3RjkwNDNFMzVFNwotOjEwMjhDMDAwM0I0RTFDQTE3MkIyMzYxMDczNUZFMEUzOEJDMUU3MEQ4MwotOjEwMjhEMDAwRkEzMTZCMjQ0RThGM0E0NUJFOTcwNjY5OTFGOTFFNzQwMgotOjEwMjhFMDAwM0I0N0FEMEIzNDdDQjQzQ0ZCNEYwNjlFNUY3QzIwRTYzRgotOjEwMjhGMDAwRDdDNkZEOEI5M0Q3RTc3NTFFNjBGQjQ3MzVBQUFDQUFGOAotOjEwMjkwMDAwM0MxRkI0QUU0MUJFREMyRkY4NzJCRkUwOEIwRkY4QjhBRAotOjEwMjkxMDAwREFERDkyMUFBMjc4RjUzM0FFNzczM0ZFMTEyRUVCMDI5MAotOjEwMjkyMDAwNkIxNkE0MkEyMzc5NTUyNUYwRDhEODYyNjBGOTJGQzBGOAotOjEwMjkzMDAwMjYyM0Q5RTdDNjlEMzFFMzA0MkU1NTMxQjhENDc5QTVCNQotOjEwMjk0MDAwMThGOTc4M0VGRUI3Q0E1NzZERTBGQjM1RDVDODJGQkZFMgotOjEwMjk1MDAwRjJGRjI3NkZBQ0ZFRkU1REQzREYxNDk4MTJBNUJGNDVEMgotOjEwMjk2MDAwNDkzN0E0QkZEODNDNzlFRjkxMjkxNjdBN0VCODNCODNDQQotOjEwMjk3MDAwRUQ0MzY4QkM4OTlENjc4MUM4QjMxN0VFRTBGOTY4N0ZCNQotOjEwMjk4MDAwQzczQzRCM0VENTUzQzdGNTZFMDlFNzI5RUFGOTVGNUJCMwotOjEwMjk5MDAwM0VFMjUxRDgyOTQzMDU0RTMxMTgyQzdBQzY4RkVCREMyNAotOjEwMjlBMDAwRDczRDcxOTk4MkYxQTFCMDQ3Q0ZFMjRCNTE0RkExNEE3NwotOjEwMjlCMDAwNzU0RDYxNEZBMTI1MzM4MTE5NEYxMkQ1MEIzODBGOEJGRgotOjEwMjlDMDAwQ0Y4M0M3Mjc5RUNDMjMzRkRCM0RCRjk4NjA2RjM4NUUyNwotOjEwMjlEMDAwNjhBMTNDNjIxRkYwN0QwREE5QTczOEE5MkYyMkRFNzRFMwotOjEwMjlFMDAwM0JGOUJFQzZCNjk0RkY3OTk2RjJGQzg1N0IwRDZFQ0FBNAotOjEwMjlGMDAwNDcxNjFBODZERTlGRURBMkY3RUJERDBERDhBRkU5NTkzOQotOjEwMkEwMDAwQkIyNThFRjRGRTlBRTRBNjc0RkM0ODZGQkRFQjQ3QTQ4OAotOjEwMkExMDAwREZBMEMxNkU2MkYyM0U3QzkwRUVGQjVCMjRGNzI0MUNDQgotOjEwMkEyMDAwRUZFQkJDM0RCNzE1RkI4NUNENDU2RTgyNTk3QjVGQTFCMQotOjEwMkEzMDAwNDM3OUExODJGMkM1NzExNjU2QzcyRkJDQzlDMEUyRUUxOAotOjEwMkE0MDAwQTVGMTk2NUY1M0JFNTRFNTY5NUU0MEZFRjhEMkRCRkIwQwotOjEwMkE1MDAwOENFNDBGMDY1QjI1NDhDMTg1MUM0OTM5RjQxQjNGQUU0OQotOjEwMkE2MDAwRjNEMjlCMjc4Qzk0OTRDRjZCM0I2MUVDRkI4RTdDQTJDMgotOjEwMkE3MDAwNUY5NTIxQzRFQUY3MjYyM0Q1NDFCNUNENUFCRkNGNDg4QgotOjEwMkE4MDAwN0FBQTE0Rjk1NUREQ0JCRjY3RkQyQUFBMTNGMDdENTU0QwotOjEwMkE5MDAwM0I2NTU1QzE5Rjg3M0FERjMyMTJERTc1MkQxMjhDNEQ5MgotOjEwMkFBMDAwOEZCOEZGQjJDNEVFNkJCQzVGMEI5QzA3NkI4NTdGQUEyRgotOjEwMkFCMDAwMTZGQjkwRDVCNDBGODlENzYxM0JGNzM3MUFFRjFGRDhCMwotOjEwMkFDMDAwQkRFNDA4ODVFRjc1NEREMTdFRTg0MUMxRjMwRDU0OTcwMwotOjEwMkFEMDAwQjJGQURCNkIyNEJENkVEODExMzM0RUYwRkNDMUVGRTFDRQotOjEwMkFFMDAwQjkzNTQ5RjhGMzFDQzgyMTlFNUY5RUNCRTNDOUU1MTNCNQotOjEwMkFGMDAwRjE5NjNDNUNEN0U1NjNCMjFCRTAzQkY5Q0VFMkVGNzFBNwotOjEwMkIwMDAwOTEyRjBDODc3NDJDOUU2OUUzMDYzQUZFQ0NFMjhERUY4MAotOjEwMkIxMDAwRjhCMDkxRjJEQjA1QzEyRjk4M0UyQTgyMDdFNjEzREU1QQotOjEwMkIyMDAwNzc4MkI3ODZGMEJCMzM2OEIxOTNGRDU3RjQ3MTdGNTA1RAotOjEwMkIzMDAwMUUzNEE5QjQwRjdFMjcwNEI2OTI5RTA3QkI1RURERUE2MQotOjEwMkI0MDAwMjRERUZDMUJFNzBEMDg3RkI3NDFFMEJBNDFFMEJBMDE4MwotOjEwMkI1MDAwMUQ3RTEyQkFEOEFBQkMwMzJGNjFCQTBGRTVDMEZENTA4MgotOjEwMkI2MDAwNzk0MEY4QTE5REQxMzg2M0U0Qjk4RkY0NTUxNzM0QzE4OQotOjEwMkI3MDAwRDM3OEZGMEVFMThGRUU2OEUxRkUyODM2NEVENjg5N0REMAotOjEwMkI4MDAwODBDMTcxQjk4QkQ5N0UyQkQ2QkI5NEM3RDVCNDQ0RTMzMQotOjEwMkI5MDAwNUYyN0Y2MDVFQTYyRTJGMENENDk3Q0RGRUVGQkVBRkY1MwotOjEwMkJBMDAwNTgzRENEOEREMTUzQzUxMEU3NEYzOUM1M0Q1QzdGNzc3QQotOjEwMkJCMDAwNjg0QjFFRUREQjY5NzhDNUVBQTk1QkM5NEMxQ0FEOUU2QwotOjEwMkJDMDAwRDVEQUY3NDVERUFGRjUxNzIzNzEyOURGMENEODlCQUNCQQotOjEwMkJEMDAwOTE3NUZDQUI0OTNDRkU1NENEOTJGREE0RTc2QkY1Q0U1QwotOjEwMkJFMDAwQzQ0MzA1OEEyRTVDRUY2MDlEQjMzMjY5MENBRjdCQTZBRgotOjEwMkJGMDAwRTFENDQ3MjdDOEUwNzI4NUVCOURBNzUyNUVBODI4QTRDMAotOjEwMkMwMDAwN0NBNTg1RkI5MTgxMTI5QzJGOTFGMjc5NjBGRUNCRDczOAotOjEwMkMxMDAwNjI1MkE5NEVGMTIxN0Y1ODlENDNCQ0MxQjYzMjI4RERENgotOjEwMkMyMDAwNEVCQ0MxRkE2MTFEQ0RCRjg0QjY4RTExODcyNTFEM0NGNwotOjEwMkMzMDAwRUY1OTMyRkYwQkM2Qjc2MzEzRjk3QTg3RjVDQUQ4RDFCQgotOjEwMkM0MDAwRUEwOUFEOEVBOEZCOEFFN0E5REFGNTNBQjQ3QjFBNUZFOAotOjEwMkM1MDAwMTc5NDU4NUREQzc2RjBFQkI0NzRGNDlGODM5RDU3RDJFMwotOjEwMkM2MDAwRDY2MEZCQTI1OEJGOTZBNzBFNjE5RTlBMjFGMjE0Q0FBNQotOjEwMkM3MDAwOUZENzczOTVDMTA2NEM4NzFGNDMxRUFFMTc3MTBFQTRENAotOjEwMkM4MDAwQURDQzRFRUEyOEQ5MjVCRUI1NEI3QzFGNjczRjVFOTg3OAotOjEwMkM5MDAwODlGRUY3ODM3ODk2QzcwQzlDRTFFNzQzRjRGQzEzOTgxMAotOjEwMkNBMDAwNDcwREFDMEQxQzc2RTJGOENCQUQxMjhCN0ZFQjMxQzczNAotOjEwMkNCMDAwQkRCNTcwQTRCREQ3MEE1RTM2QzAxNjUxOTc2RDY1NkQ1RgotOjEwMkNDMDAwNzlGNkRFNEYxRTI3N0ZENDYyNTZDOEJGMEU3NDM0MUFDMQotOjEwMkNEMDAwRDlGRUIyMUFGMTdDQzZDODdDQTg1NkYwQjdGNjdCRjZDRQotOjEwMkNFMDAwQjU1RTREMTI3MTUyRjAxMkQ3QzFGMkRCQzE2M0IyREQ5NQotOjEwMkNGMDAwMjQzMUZDN0UzNTNFMTIyNzkxRkZCNDFEOEM2MzdBMUU3MQotOjEwMkQwMDAwM0M2MTU1MjlDRkZGNUNGMEVGOTJEODc3NkYyODkxMTk3RAotOjEwMkQxMDAwMkVCQTU5QkNDREVEN0EyQjgzRjQ0QTdBRjBEMjNFNEFEMgotOjEwMkQyMDAwRDc1QjUzM0M2QzlGNEY2NUY2NTRCRDVCQTZDM0JFQjBFQQotOjEwMkQzMDAwRkMwMTBCREIwQkQ1RkExQUJFM0U4MTJGQ0EzNUQ5RTg1MAotOjEwMkQ0MDAwMEFDQkQ1QUVFRkIzQjk0N0IxMUI0OTNBQzhGNEE2OTM0NQotOjEwMkQ1MDAwQTJFQjVDREY3RUI5NTI4REIwMjc1Q0NGNkFGMjZGRkJDRAotOjEwMkQ2MDAwMDUzRjQwM0Y5NDRDN0VCOTMzNDk2MUYyMzUwNEI5OUUyQQotOjEwMkQ3MDAwNzU5REJDQzVGNzJGRTdGQjM2MDZGNkZFMTFGN0NCRkNCOQotOjEwMkQ4MDAwMzU3NEZGNzJCQTA1MTg0RkJFRjI1NzUwRkY5MTBDOTk3NwotOjEwMkQ5MDAwRjlBOTQ3M0VBOENBODI4OEY3ODNDNEVCNzE5RjYxMjhDRQotOjEwMkRBMDAwOTlENUMzMjc3NDRDM0VERjg5RTFFNDg5NTZGMjgzQ0Q3RgotOjEwMkRCMDAwRjNFRDc5RTRERkI4N0YzODkyNjFEOTQ4RkNGNkQzN0IzNAotOjEwMkRDMDAwQzc4NkU3NTk5OEM0RTMzQ0QwN0E1MzI4OUI3OTkxQ0ZDMgotOjEwMkREMDAwMkJENkJCMDU5NjMyMUNCNjA4OUU3NTg5N0MxNEVCQTZEMwotOjEwMkRFMDAwMzM2NDhGQjE3NUQzRjVGMkREODhGQThEM0Q3Rjc5QUUwRQotOjEwMkRGMDAwNzJGMjQ3Qzg4M0MyNjM3QTNGRDVFQkZCQ0U3MjNGRDFGNAotOjEwMkUwMDAwRDBCOUUxNzc1NDA3RkJDRTlCODBGQ0M0MjM1RDFCQjI5NQotOjEwMkUxMDAwMjgwRTgzRDczQjk1RjJCQkNCNUQwRjRFNjVGQjk3RDI1NwotOjEwMkUyMDAwMTYyNjk3OUZFNDRCQTFCQ0U5NzQzMkU1NDNCNTlEQTdGNAotOjEwMkUzMDAwOTM1OTVDNkY5RkZFMDJFNTQ5OTgxN0RENDFENzMxNUZEQQotOjEwMkU0MDAwNjFGQzJCRUMyOTY2RkNEQjc3QkMzODI5OTMwNDA3QjdCRgotOjEwMkU1MDAwODVFNkFEM0RBNkFGMjQ3QzZBOEYxNUJGNTc0MUY5NEI3RgotOjEwMkU2MDAwNEYxOUNCOTNCNEJDQTg4OEVBNzFDQTkzOEU0RDhDQ0ExMwotOjEwMkU3MDAwOTNGQTA1N0U4MzA3RTJEOEZFODcwNDE5OUMzRjMwMzEyMAotOjEwMkU4MDAwOEEzRjM1NkRFRkIwN0NBMkE2NDNGNjQ0RjJFOERBNzNEMAotOjEwMkU5MDAwMkUzREUzOERDMUE1QjBGOTFBMDI5Mjg3RjE2MzJGNkYyMQotOjEwMkVBMDAwNkIzQUY2QjFGNTU1MUIwMjRDREYwRDJEMDY3RUJGOTUzMgotOjEwMkVCMDAwQjcwMDRERUM3OTNGMzhGRDg0Qzc3Qjc0MDlGNTUwNkUzRgotOjEwMkVDMDAwNTQyN0QwRkVGQUJCRTlCQ0JFODhENUM3NzYxN0RGNEZDMgotOjEwMkVEMDAwNzhGNzlDRjc2NkUyQ0JCQjczQkQ1OUY2NTFFMjg2MUZDQgotOjEwMkVFMDAwQ0E3OEREMkQwOUJDREIwQzJDQUY4QzFEQjdDREM1RjcyNgotOjEwMkVGMDAwN0I2QzQ5MTA3NURFQThCNUY1MkVDRTlGNzIyM0RGQTczNwotOjEwMkYwMDAwOEFCRDdGQUI4QkQ3Q0RGOEVGMTkxREYyRTI2NDg1QzE4NgotOjEwMkYxMDAwRkVCNEE4MjdDNkExQkZCRDRCRjhEQjY1NzcxQTU4REUwMwotOjEwMkYyMDAwNzE1MjlDMzNEREE1RjlERDEyMUVCRkI1RkRGRTI1M0JCOAotOjEwMkYzMDAwRTE0OTJDRkZFMTRCQzg2M0U3NjA0QjNDRDE3RUVGNkU2QgotOjEwMkY0MDAwOTE1RjJENUIxNDczNURFNDUzNzc3RjRGM0UzNUMzMjU0RQotOjEwMkY1MDAwRkNFMTY0OThDQ0VCMDZBQjg1RjY0NUJGRUMzNkQ4NjU1MgotOjEwMkY2MDAwMjZCNzNBQjEzMjdGRTQzQTM1N0Y3MzQ0OUMwRjc1QTM5QwotOjEwMkY3MDAwMUZBNEI2MjFFNzQzQjY0RkY1RUU4MTczQkY3MTMwM0YxMgotOjEwMkY4MDAwMUEwNzE5N0NERjkxRUREN0Q3NUU2N0JGQkVFMTlBOUQyNgotOjEwMkY5MDAwRkUzMDhBNzc5QTlFRkEyOUNGQ0YxQkE5QTdBNTAyRUYwOAotOjEwMkZBMDAwNUFGMzI1MjMzQkI3ODQ0RERCNzU3MkY4OUNEMjY0RjA0RAotOjEwMkZCMDAwN0E1MjcxMUQ4NjhFQjkyMTNBQkY2Q0M4MzFCMTdDQTk5NQotOjEwMkZDMDAwRkY3NjQ5MjU3RjhGNzJBNjk5MjJGQzdERkYzODlFN0Y3MAotOjEwMkZEMDAwM0RCMjVDNjJGQkMyMDc3MjNFNjQ3MUJDMzZENDZCMjRBNgotOjEwMkZFMDAwNUU0RDZFNUJGMzI0QjM1RjNGOUNBMjdBNDlEM0U3NjJFOAotOjEwMkZGMDAwMzM4RjlGRDdGNEE4QUQ5NzZFMkFCNDNFQTc5RkZCNjU4OQotOjEwMzAwMDAwMTc2QjY5M0NDNUNCQkI0NDdDNUM1QzEyQURCRjJDRTg0NAotOjEwMzAxMDAwNUQ0MEZCMjNGNzc4MjQ5NjJGNUQ0RkVGNEI1NzRDN0I5OQotOjEwMzAyMDAwODdEQ0RGOERFQUZGOUY1Q0RFODc1RDY0RUZCREMzQ0I4RAotOjEwMzAzMDAwNjk3RkY3REQ5QzRGRDMyOEJFRDY1RDg3Q0Y3RTgxQUZGOQotOjEwMzA0MDAwQ0ZDMkNGQzU3QzE2N0UxRUU2Q0U1MjFBRkIxMDFGQkQyNgotOjEwMzA1MDAwQzNCQkQ5NDVGQjRGQkFCRkQ4QTYwMENERDNGN0FCN0FENwotOjEwMzA2MDAwODlGNDAzMENGRkVCRDlEMTM2MzFFRjM2OTc5RERCOEIxQQotOjEwMzA3MDAwOEI5RjBGQzU1MTlGRUNEOUEwNEUyMDNGMDE3OTM3NzYyOQotOjEwMzA4MDAwQ0VEN0IwRkY2ODAxRTk2OUUwQzBCMTAyNjM4NDNFMkY4QQotOjEwMzA5MDAwRDVBMzNGQTBGOEQyNzkyODU5QjE0NkYyNEQyN0Y4QTYxQQotOjEwMzBBMDAwNjdBRDI0MkQxNTcxMzM5QTdGOTc4ODdGQTRGRkJEODc2NAotOjEwMzBCMDAwRUVBMkJBQjBCRjZEOTk0QjUyMjJFMjZBRkI0OURCQTQ4MwotOjEwMzBDMDAwODg3OUZCODMzMjFCOEZGNUQ4RTRCQjEzMjJFNTdDOTIxMQotOjEwMzBEMDAwQzlEOTFGRTBGMzAxRjQ0RDVFOTYxRjc5QkY5MTlGMUI4NAotOjEwMzBFMDAwOTlGQjE4OEY5RkNBREVDNENFREQzNTFFRUI4MUYzQjg4NQotOjEwMzBGMDAwQUU2MzA5QjAzODI1RDYxRDMwRTIwRkFBMzNCQTRDMkE4OAotOjEwMzEwMDAwOUQ1M0QwN0VCQjIzQzI0RThFMEE5QzY3NjI3MTQwRkNFOQotOjEwMzExMDAwOUMwNTdFOTlFNjlEODkzM0RFNEI3RDNEODRFODRDNkVBRgotOjEwMzEyMDAwMzY4NDY0N0VERTNEMDE4OEQ3MzMwNEFGNjdFQTQzMDcwNwotOjEwMzEzMDAwQTQwMjM2OEU5RDRCOTU0MjJGMUI3NzJCMENCMUQ2MDNFNAotOjEwMzE0MDAwNzYzREI1NjVFMDY2NkQ4OTM5NzQwN0I5OTNCQzQwODBGQQotOjEwMzE1MDAwN0Q5NzE0NEFENjNCMkU5OEQ5NTEyOThDQTZCRkYwRkFGOAotOjEwMzE2MDAwRjU3MDQxRTMyOTBFQzZBNDg3RURFM0M3OEUxQjE2NzZFMgotOjEwMzE3MDAwRUZBNkRBODJGNERDMEY2QzFGRUUxNkU4OTNFOTI1QjNCNAotOjEwMzE4MDAwRjVCMDg4QkUyN0JCNDUwRkU2Nzg5NDc3RUY2MTFEQjM5NQotOjEwMzE5MDAwRTdBRTNFNDUyNTdGRTY0RTEyQ0Y3RDg2Q0Y2MTdGQTYwNgotOjEwMzFBMDAwODdEQjJEODUyMEZBNkU0NTVCNkYyQzBFQTUzODFGRUQ1MQotOjEwMzFCMDAwMEJDRUQ0NjNFNUNCNzAwQ0IxRjdERDQ2ODJFM0JBRTcwMgotOjEwMzFDMDAwODJBMkE3RkUxRjVERTk2MjNGODVENzY5RjM0NDlEQTZGMQotOjEwMzFEMDAwMzNGQjE5MUU3RjEyRjE5MUNFNzM2QzM4NEY2OTkzMDQ0MwotOjEwMzFFMDAwNjdFOTdDMjY5M0FGNTc5QkJGMTRCM0MxQzQ0MjFBQ0Y4MwotOjEwMzFGMDAwRTMxQjZEODU5Rjc1RjI3MzFFMUIzQjlGOUI2RjI3QkM2NgotOjEwMzIwMDAwQTQ1MEIyRUVBQUU1QzY3MTFENEMwNjI2QjdFREZFQTE4QwotOjEwMzIxMDAwODFDNzhCQzNFNzVERUVFMEQxQjNGNDVEOEVFNEYxQjAxRQotOjEwMzIyMDAwRUY3QURDNjY2Qjg4RjI3MzY0QzdBNUM4QkNGQkFBNkIzNwotOjEwMzIzMDAwRUQ1RkM5REUyNUM1Q0VGMDAyMkYyODk0N0Y4QzBEN0Y2RgotOjEwMzI0MDAwRUYwMjU3OTNDMkRGRDMxMDhDMTc5M0MzRTdGQkRBRjc3MwotOjEwMzI1MDAwMzVCQkQ1QTU4QTBFRjVCMkMyNjU3NjkzNUUwQUNENjlGNwotOjEwMzI2MDAwNDU1NDBGMzZEQkJEN0Y3NUIxRUY2QzVBMjZCMUM5RjRGQQotOjEwMzI3MDAwRUFGNENBODQzMERGMkRFMDI5MjFCQ0I1NzM3RDQ5RTgyQQotOjEwMzI4MDAwRUY3QUU3RjY2NEFCQzQ3MzBCQkE3REZBMkVFODE5QjQ5MwotOjEwMzI5MDAwMTdCMzczQjRFRjhGRjg3OTNFNUFBMTQyREYxREMxMTMwMwotOjEwMzJBMDAwRjMxNEZBMkU2MDlCQzNFQzdFNUFBMjE0MUZENzY3MDk1MQotOjEwMzJCMDAwQUZBRkQxQ0NCRjI3NjgzNEYzRUYwMjYwRUI3NEI2N0ZCOQotOjEwMzJDMDAwRjY5MDM4OEY2OEI0RUFCMkE5REU2QTg0NzgzNzk1RjQ0QwotOjEwMzJEMDAwOUFCQzBGMjU3MDNFM0VGNERGMTY3NjNFMUEyQkY3RDdDOAotOjEwMzJFMDAwRjFERTlDMzFEM0MzRjIzRjJBQkJDRjYyRUUxMzg1RTdGOAotOjEwMzJGMDAwMUMwRDRGNUQxOENGMTU2QTQ2NjM5RkMyRjA5QjQ2Q0ZFOQotOjEwMzMwMDAwNEYzM0E5MzdEMUJFQzgyQTEzRkY3RTQ5QzMwRDE1Q0E1MgotOjEwMzMxMDAwNDg2RDE3RkFEMEYwQjM5M0JFNjkxRDFFRDRCN0M2OTc5NwotOjEwMzMyMDAwOEMzMDdFQ0ZDNDczREMwQ0Y0RTU0NDI2N0I1NjIxN0ZDMQotOjEwMzMzMDAwMUQ4QkNCRkYwMUFGNkI3RjhFRjAyOTAwMDAwMDAwMDBEQQotOjEwMzM0MDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDBDQgotOjEwMzM1MDAwMDAwQkZCQ0FDRkMwRjBBMzFFODE0M0QxRjhFODM4OUQxMwotOjEwMzM2MDAwMEY1MzRDOTQxMTgyRDdCM0UwRDc4QjBENUIzMTIyRDgyOQotOjEwMzM3MDAwRkVEQzBDMENDQTlDMEMwQzJBNDBEQzA3QzRGRDQwRkM5MwotOjEwMzM4MDAwMUU4ODBEQjgxODE4MEM4MTM4MERDODRFMDc2MjdCMjBCNgotOjEwMzM5MDAwNzZFMzg2RTg2OTY2Njc2MEU4MDZFMkM5NDAzQzlCOUQ4MwotOjEwMzNBMDAwNzRGQjM5MjQxOTE4QTZDODIyRjg0RjgwNkM0NTA1RDI0MQotOjEwMzNCMDAwQ0QxOUM1NDMxM0YzMUJBMUYyMzVCNDUxRjlDMUJBQzBGRAotOjEwMzNDMDAwRjQ4MUE0NDY1MzlCMzRGMzRGMDFGNTlFMzZDMjJEQUZEMgotOjEwMzNEMDAwNkU4RUNBOTdCMzQ0RTUyRjMzNDNFNTVGNzQ4N0QwMDAwMAotOjEwMzNFMDAwOTNEREUxMzRCODAzMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAotOjEwMzNGMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJDNTdEMEQ3QzU0QzUyQwotOjEwMzQwMDAwQjVGOERDQkI3N0VGN0U2RjM2MUY4NDBEMjRFMTI2MDQxMAotOjEwMzQxMDAwMTIzMEMxMjUwNjBDNTZEQTREMDQwNTQ1MUE1MDJCQTg2QQotOjEwMzQyMDAwNEY5NzAwMDlDODU3NTAyQTY5QzU3RjJFNDkwODAxMDJFNQotOjEwMzQzMDAwMkMxODZCNTBDNEU1NTNBQ0QwMDYwNTNGNUVBRDVEMTA1MwotOjEwMzQ0MDAwMkRGQTdDMzYyQTJBRURCMzE4MTA0MTI5RDAxNEE1NkMyOAotOjEwMzQ1MDAwREZEM0YyOUY3MzY2NkVGNkRFQ0Q2RUMwRTdGQkJGN0ZGMwotOjEwMzQ2MDAwRkFBQkMzREM5OTNCNzdFNjdDQ0YzOTY3NjY2NUQxNEMxNAotOjEwMzQ3MDAwRDIwNjEwNzIwOUZFN0U0NEM4MTgxMzIxNjQ0NEI0MjQ5NQotOjEwMzQ4MDAwMTVBQTQwNDYxMkYyNTMyQkMxM0ZBRDVGNkNEOTU4NDc4NQotOjEwMzQ5MDAwNDhEODQyNDg2NDI2MjExRDRFREE1MUFBQjE5MjQyNUFCOAotOjEwMzRBMDAwREU3RUIzNDhEMjA5NDk4MkY3MTU0MjlBODQ5QTQzMDNEMwotOjEwMzRCMDAwNEIwODUxQjM0NEIyOUQzRTVBOUUzOTM5MjlFMDRDM0NFOQotOjEwMzRDMDAwRUUyRTNFRUVBRkVBQUM1OEI2RDc3OUIwN0NCRUNFOEJDRQotOjEwMzREMDAwRTVERTNBODU4NEYzMDk3OUIxQUUwMENCOTdFQjdDRjg1MQotOjEwMzRFMDAwRkM1RkVCNEFCMTdDQjVDRThGRTU2Qjc1RTNCMDBDRDdEMgotOjEwMzRGMDAwNTU2MDc5QTA2RTBBOTYwN0VCMDJGOERFOUI3NUIzQjBCMwotOjEwMzUwMDAwM0M1NDU3ODNDRkRGQUVBQkM1RjI5RDNBMTU5RkJGNUJFRQotOjEwMzUxMDAwRDc4QzY1NDc1RDEwQ0JGN0VCREFCMDNDNUMxN0MyN0UwOQotOjEwMzUyMDAwMUZENUVEQzRGMjQ4NUQzQjNFRkY1M0REQ0I1ODdFNTJDNAotOjEwMzUzMDAwMTdDNkYyNEU5MjRDNDgxRjQyRUVCOEUzODI3NTFBNURGMAotOjEwMzU0MDAwNkZGRTUzOEJERTFGOUY0NkM4REExMUEyMEZDMDk1RkY5NgotOjEwMzU1MDAwRDQwOTZGQTAzMEJBRUVCNURGOUFBNkI0Qzc4MUNCNEZCRAotOjEwMzU2MDAwODg4MEUzQUM3NTExNkM1RkJCRkY4RjQ0MjkyMjY0Q0Q2QQotOjEwMzU3MDAwODg0RUFGNEFFQkUzRjk3Nzg2NkMzRjZDOUQ1NjE4RURBOQotOjEwMzU4MDAwMTczQkNFRTdDNEM0QzYzMUQzNzZEQTZGRjAwNkQ2NUZGOAotOjEwMzU5MDAwNkIxRjBGREYxOTExNkRERkQxRjZCRTc1QkE1M0RGQ0U4OQotOjEwMzVBMDAwREU3RjY2RTNGQjU2QzBERkVBODg0NEMyODg3Nzk1MTA2OQotOjEwMzVCMDAwNUFEQTk1QUVCNjNFMTRDRkI2MjMxNjYyQzlBMUY4NTdCMwotOjEwMzVDMDAwREE0OTI3MUQ2N0NEQTg1Rjg0QzUxMjU4MzdFREE2QzAxQwotOjEwMzVEMDAwM0EzRjIwMDI4NTgzRUEyMjQ4MEYwQThDNzE2REY0M0I0MgotOjEwMzVFMDAwRDcxMjExRTc5MUZGRDQ2MUY2OUREQjJGNjBGOURBM0YyNgotOjEwMzVGMDAwNjQ0MkU4N0I2QkVFMTA0MjBFM0FGRTlBRDFFN0JEN0U0NAotOjEwMzYwMDAwQTAzN0Y1NTkxM0QwMUI5MkFCMDJGRkU5RjQ1NkQwQjFBNQotOjEwMzYxMDAwRDc4RUZFQzhBQjUyMzhBREZFRjY4MzI5RDM4MUZFODYyNQotOjEwMzYyMDAwMTMxRjdDNkZGNUZFNTc4ODAyRUQ0NTVEMDhCRjA2QkU4RgotOjEwMzYzMDAwRUVENTUzQTcwREYwMTQyNkE2NEI0QTQ5NDQyQ0E1Q0IzMgotOjEwMzY0MDAwNzUxMjdGMjgwRTdDRkYwNTgwNDBFMTYzRjI4NDcwNEQ4NwotOjEwMzY1MDAwNzZEQTJGMUUxRUZFODVDOEQ4NkZCNUFCRTI0MzgwOEI4RAotOjEwMzY2MDAwN0E4N0Q5Qjc5RENFRkIwNjVGOTg5Qzc0NDZFNzBERjUyNwotOjEwMzY3MDAwQ0Y2OERERjk3NTk4OTg1QzMwRUYyRkJEMjZCQTdFNDc4QwotOjEwMzY4MDAwQTk3QzhEOERDRUM2RDlENTc1MDRERTc3NUU1RkU1ODdDMgotOjEwMzY5MDAwQjVBRjE5REVFOUFEQTJGREFEMDUxREI4NUVFMjIzQkVGMgotOjEwMzZBMDAwNDE3NDVDN0I4MTRBQTYxNzAyMUM0Qzg4RDdEOEY5NEMyMAotOjEwMzZCMDAwMDc3OEY3MDEzQ0ZEREQwQjM4RDFFOEYwQzNEQjNGQjAwNAotOjEwMzZDMDAwNTZFQUZBM0ZBM0QxODdDMEU4OEJCNDg0QUQ5MzVDRDFBRQotOjEwMzZEMDAwRjZBN0I0NzYxQkEzMUY2MjM1QjY2Rjg4QTE2MzkyOTlEMwotOjEwMzZFMDAwQTBERDRDMDE4REY4MTI0M0RCMDU4NEJCNzU3MjUxQ0YxMAotOjEwMzZGMDAwNzlCNzg0REY0MjNFNzBGQUMyRDY0MDlDNzU1MTNFQjEyNAotOjEwMzcwMDAwODJEQzQ5MkExMTdEMDBBRjM1QTMyOUJGMTQ0NkQ3Nzk0MQotOjEwMzcxMDAwMzlCRTZCRTY3MDU5NUQzMkQ5MDVFMzVGNEU2RTE1QjU2MwotOjEwMzcyMDAwOEIyNDVDQzA2NTI2RkRGRkQ1MkZEQkU5Q0NBM0Y1RTEzQQotOjEwMzczMDAwRTExNDQzRkQ5QTQzRkQwQ0ZENDc3NEU0MUFEQUFGM0RGMgotOjEwMzc0MDAwMzJENEQwM0VBQUIzRDg1MEZGQzExN0Q3MTlGQThGRUVBMgotOjEwMzc1MDAwMkEzN0Q0N0YxNEI5RDlEMEJGOENEQzY2QThERjYwQkQwRQotOjEwMzc2MDAwREJEMDdGQUM2N0JBQTFGRDI2RUYxQzQzRkI3OEU1NDFCNwotOjEwMzc3MDAwNDNGRDk2ODI4NzBERkQ2RkY1MzUxOERBN0Y1Q0JBQ0E3NgotOjEwMzc4MDAwRDAzRUM5RkZBOEExN0VEQkI4MjcwREZERUZBOEQ4NkFGRgotOjEwMzc5MDAwNjhCRjczQ0E3Mzg2RjZBOTgxMTcwQ0Y1NzlGNkMwNTExNAotOjEwMzdBMDAwQzBDRkREQjM3RTYzNzhFRjVGNkE1RTM3RDQzRjI0NjRCOQotOjEwMzdCMDAwNUMzQ0ZDMTI4MUM5MTk0QTQxOUU5MzU3RjFGRTU0QzRFNgotOjEwMzdDMDAwNzk4MEU2ODA4RUZCMzAzQTJERDg5QzQwNEVGMkY2NjcyOQotOjEwMzdEMDAwQjdCRDZGOUQ2OTkwOTM2NjQ2QzcxOUFDN0Q2N0U4RkREQwotOjEwMzdFMDAwRjhFRjY3NzEzRTIxMURENkM5MkU3RDNCOUJENzU1RkY1MwotOjEwMzdGMDAwQTBGMjE1REEyNUY1M0JDOTU3OTdDNzg3RkQzNUI5NEFCOQotOjEwMzgwMDAwRTk5QjkwRUIyODdDRDVGRUFBOEFERkEzRTM1MTc5Njk3NgotOjEwMzgxMDAwNjI0QjI2QjU4NEM5Mjk0MjFFQzRFNzlBREUyNzk5MjQ0MwotOjEwMzgyMDAwNkNBMkUzMzZCODMyMzdBRjA0OThEMEIxQTUzNEE4MTdFQwotOjEwMzgzMDAwNkU4MUJBQThGODQ5NjcxQ0I4OUEzQ0IyMDE0RkIxRjA0MgotOjEwMzg0MDAwMjVDRTE0NEFDQ0JEQzk1OTE1RTFBNzhFMjUwNTEyN0M5OQotOjEwMzg1MDAwNUZCMEZCOTZEMkY1NEEyNEQwNEZBMENGMkY4QTAxMkYxQwotOjEwMzg2MDAwNEM3RUIxNDlGRDdEMjAyN0RBN0ZFOTY4RkE0RkU4N0Y3OQotOjEwMzg3MDAwNEMwOEQ1NjM3RjA1RTFEODUwNDRGQ0EwMzdENDBDMzlGRgotOjEwMzg4MDAwQjQzRDA3RTE2OTAxNzlBMkJENDcxRjI4OUQ2Q0JFRUFERQotOjEwMzg5MDAwQTU4MTg2M0E5QkVGNjVFQkRGRTQxQkVCREFCODNGMzc5NwotOjEwMzhBMDAwQzI5M0MyMTlFQUY3RjE0QThGNzVGQkU0MjhERDlBQTBBQQotOjEwMzhCMDAwMUZBQjJCQTI0MDJFQTExQzM0QjY2QkRGQjk2ODczMEY2RgotOjEwMzhDMDAwMjM0OTE0OEY1NjU2MkVCNkJCQjc0MDc5RDE5NjFEMjI4OAotOjEwMzhEMDAwNkU0MjBBQzU0MDM5QzA0RDJENjdGMDUxOEYzQTQyMERGNgotOjEwMzhFMDAwMzg1RUNEQjUxNTQ1MDBERkY4RjYwMjIxRjU4QzNGM0U3OAotOjEwMzhGMDAwMTkyRkVBRDc5MTA4NkYwRDYwQjdFNUVCRTgyMEQzODc2MQotOjEwMzkwMDAwNzI5Q0FFMUFGNTVCNkNGRjNCMDU5OThERUZBNEE4QTJFMwotOjEwMzkxMDAwRTM1QjA4QTNCMTI0NTNFMDRFNjEwNEFDQjY4MjQ4Mzg5RgotOjEwMzkyMDAwNEYxRkE5NDA3QzhEMjM2MDk3NUEzNTc4MDY2NzYyREQ2QQotOjEwMzkzMDAwQzlFRENDRkRBRTkxNDcwMjE0Q0ZBQkZEQjIwRkM2QUFDNAotOjEwMzk0MDAwMTQxNDhFMDc5RjE3RjQ4MEE1NTQyNDJCNjk2REI1RjJDQgotOjEwMzk1MDAwQkUxNUY4QTMzOTQ3Q0UwMEI5NkU5MTZBODg4N0Q2MkQ3NwotOjEwMzk2MDAwNzk5NDBGRTJFODkxMDVERDcyRTIxMTcyMjU3NjcxMkNFRgotOjEwMzk3MDAwOUUwQUU4RUI2QzFFMDRFMUE4Q0QzRjk4RDU2MUNEMDUwOQotOjEwMzk4MDAwQkExQzRERUQ2MjNBRDVCNUQ3RjdBRTVGOTY3MUY4QUU3OQotOjEwMzk5MDAwMDJCQjk4OTY2Qjk0Qzk0OTA0Rjk5NjRDMDVGQTZFQ0UxMQotOjEwMzlBMDAwNDkxNzkxNEYzOTlDQkFFMTkyRjM5MTE1Rjg3NDA1N0Y0QwotOjEwMzlCMDAwN0ZCNUVGN0RCNEQzNTc2ODdBM0MwNjhFQ0RDMzhGMjM5NQotOjEwMzlDMDAwN0NBNjA5NEMxRkFGMkFCMjRGMDlDNTgxQ0IzNEMxOERFQgotOjEwMzlEMDAwRURDREMwNTM2OTY4NUYzMUZFOEFBMTE3REFFMkFEQTQ2QwotOjEwMzlFMDAwRUQ1NkM1NTNCQzkyOEUzRkE2NDg5QTBBNzRFMTJBMjUyQgotOjEwMzlGMDAwOEEwNUY5RDdFRkNDQTBERkI3RjNERTkyMjIxQUU0ODc2RAotOjEwM0EwMDAwMkI4REQxQURGNTEzMjFBNEQwRkU0RTJGRkI5RUM1NDlDMQotOjEwM0ExMDAwNDI3RTdDN0ZBMTAxMkZGNkQyQzAwNDMyOENEQTQ5RkZBRQotOjEwM0EyMDAwMzBFMTdCNzQ4RUNDOEUzODNDMUVGOUQxRUM2MUVCMjRGNgotOjEwM0EzMDAwMDUwQzRGMUVGQUJGNEJCOTc0M0M0NTM2RTg4REE1NjVBMQotOjEwM0E0MDAwQjIyRjRDQkZCM0Q4RUQ0NDdBMzJFQkYxNEFCRkVCRjg1QQotOjEwM0E1MDAwRjY4NTBBMTg3Rjc5RTYwM0Y2QTU3NEZDOEI2NTREQ0JENQotOjEwM0E2MDAwODEyRDREOUY4Q0ZGMTJGOENFMTREQjNGNkJGMjFGMDZBOQotOjEwM0E3MDAwQzZFMTAzQUQ3NDc0QkE0OTM4MTUwNkI4QTc1NzNBNzA1MQotOjEwM0E4MDAwN0ZCMkY5RUQ4M0JBNzlCRTJBQjhEMjUwQkU1RTRCQUU5MgotOjEwM0E5MDAwNDVCOTcwOTlGNzJGRDY4NURFM0UzODA4RTEyMTVFMDlEOQotOjEwM0FBMDAwM0QyRjhCRTFFQkE2MUM0RDZGQTlERTQ5M0FCQkVDODJBMgotOjEwM0FCMDAwQzBGNDFBNTFDQjEwQ0UxMkU3RTdBNkQxQTQwQkVDRDY3NgotOjEwM0FDMDAwMzUzOUIyNTI0RkJCNDhBNTcyMTg0ODA3RkVCQUU4RjcxRAotOjEwM0FEMDAwQzEzNjIzMjBBRjk1QTYwRUY2RkNBNzA2QjlCOUEyRUYxMgotOjEwM0FFMDAwNDQ1RkI4MTdCODQ5NzkzMUZBRTYzMkVCQUYwNUY4RTkyNwotOjEwM0FGMDAwRkE5RjAwRjgzOUEyRjBCMzkwOEFBNDMwRDA0QjcwOUNBMgotOjEwM0IwMDAwNjExRkJCQkNFQzIxMjU0Q0ZGQjlCQ0RGMkZGQ0M3ODg3MwotOjEwM0IxMDAwMEU4RTNGQTI3Q0E4RTMwRjRCNjY4OEU4QkZBRkM5QzVGNQotOjEwM0IyMDAwREI0NDdGMTdDODYxOTNFQzQzMzk0NTcyNjVEQzhGQzQ3MQotOjEwM0IzMDAwQ0VBRjQwNjRGMjI2MEE2N0FCNDQ3NEZDNDEyNjg0MTA4MQotOjEwM0I0MDAwRUVGNEFGQzI5QUNFRTE0N0ZGNkNERTM3RkYwMUYwQTM3RgotOjEwM0I1MDAwM0EzQUVDMTg4NkNGMUJBNTYyM0E5RjM0QTIzQUFFQTYzOQotOjEwM0I2MDAwRUY0QjQ0ODI3QTk2OTg4MzdDNEJEQkM3QzgyOUMwQkY1MQotOjEwM0I3MDAwMzdGQTQwMEUzNkYxN0QxRkYxNkNGNkVBRURGMjJDOTEyQQotOjEwM0I4MDAwRTEzNURBMUVGMkRFNjE2ODY3RjY0RTkzNjZENzdCQjZFMgotOjEwM0I5MDAwMUFFOEEyRkJGRDY0MTI3N0ZGRDE0NzY0NzY3Njk2RThCNwotOjEwM0JBMDAwRTFGNEIzMTVGNzZGMkJEMjI2NDQwMDBEQjY4QzFCN0RDNAotOjEwM0JCMDAwOTVDMEFGMUU4MjcwRDBGNDg0QTYxN0E4QkVDODEyRkJCMQotOjEwM0JDMDAwNDRDNzkzRjMyQTg4ODBFRDQ2RkQ5QjUwNUVDN0U4NURBRAotOjEwM0JEMDAwNUI4MTUxMEUxMEJEM0Q5MzBCRkZDREY0MjBCRDkwNTg3RAotOjEwM0JFMDAwN0RDRkNCOEE5QkFGODhBRjdBRTg0QjEyN0ZCRjM4NDkzNQotOjEwM0JGMDAwNjQ3Mjk4QTg2OUI4N0U4REFGMDhCNzI3Q0MxQTVEMTA5QgotOjEwM0MwMDAwNDZBRjZFRkU1RDE5RTYzMzEwRjAxQ0MyQzExRDc0NUIzOQotOjEwM0MxMDAwMDU3NTE3QTlDMUZBODVEMkUyMzBDMEM5MjI3NTM2MTNERAotOjEwM0MyMDAwQUUxRkQ1OUMzOEZCMjhFRTg3NDlCNDhFQjVBM0UzRUJENQotOjEwM0MzMDAwODczMkQxOERGODM0Mzk2QjQ4MDBFOUY4MUVCNDAzMDU5QQotOjEwM0M0MDAwMzU0MDJFQTEzRDE4RTQ3QUQ1RTcwNTNDMkVBRkFCMjVEMwotOjEwM0M1MDAwOUZEMUM1RDgwRjhDQzdGREI5OTRFOUY3QzNGRURFMDQyOAotOjEwM0M2MDAwNDQ5MDQxRkZFRjJDNjFBNUU0NTNGNEY0RDk4RDQ3QjJBMQotOjEwM0M3MDAwMTRDNzMzNTNCMEMwM0FDRDRFRUIzNEQwMDM2NkE3NjdCOAotOjEwM0M4MDAwMTI5NjA1NDM2NzBBNTAyNkRENTgyQjIyNUJDNUE3MjdFRAotOjEwM0M5MDAwNkQzQzRBNTdCMzQ0MTgyRjJEODBGQzJDNzkyQUIwMjQ1MAotOjEwM0NBMDAwQ0UzNEI0NUY2OTdGQTUyMkVFM0MzODFERjA3RTA5RTk3MQotOjEwM0NCMDAwQUU5QjZFMzQzODI4MzI4QzE3NEI0RjM2MUZERDMwODg2MAotOjEwM0NDMDAwNThFRDgwRjlBNkYzRjlBNkRGRDNCNDEwNDBFQzI0QUE4RQotOjEwM0NEMDAwNzUzMDg1NTE3QUU3MzRENDdCNEVBRTdGMUEwQjhBOUJDMAotOjEwM0NFMDAwQ0I2OTNGNzcyMTQ5QkU5MTk2QjZCQzJFOUMzRkVFNkJDNwotOjEwM0NGMDAwRkJDMTc4NzcyRjJENDNGRjA3QzE3QTYzN0Q0NTE5REIyMAotOjEwM0QwMDAwMUZGODYzRUM1NjUxOTEzNDNBQ0JFREQ1REUxMTJFNTlBNAotOjEwM0QxMDAwN0FCRTlGNjhGREIxRkE5NDkwMDdBRUNDQkU5QUMyRjgwNQotOjEwM0QyMDAwNTFBNUZGMDM3RUY0MTAxRDdGRDI3MURDRDcxQkY1ODFGNgotOjEwM0QzMDAwMzNFNjNCQkYwMjU4MjJCQzE3RkVBRjdDMkY4OUQ0NUIxMQotOjEwM0Q0MDAwMTU0QTBBNjY0NUY0ODQyODlFMjg2QTkyNjExRjY1RjMyNQotOjEwM0Q1MDAwRDNGRDFEQjRBNzc1RkE0NUU1RjI3ODY5ODQ3RDZDMjEyMQotOjEwM0Q2MDAwQTMxNzNERkRCRkNFRTU2QkRGN0IxNzFENUI0NkM3QkRDRgotOjEwM0Q3MDAwRTA3M0ZBQTA1NzNBMTVBN0E5QzUzREQ3QjMzMjQ2RUU2RQotOjEwM0Q4MDAwQUMyQzU4OEY3NEQxNDBFOTI4MTdGNjA3MDUyMkVBQTUxNAotOjEwM0Q5MDAwNjY2NThCNDdFRjU3Rjk1QzkzNDMzREU4ODMyOEQyNDgyQgotOjEwM0RBMDAwQkU5RkE0RjAzMTI5QTJERkU2RkVGRUY0MTE2QjNGNUQ1OQotOjEwM0RCMDAwMjk3REQ4QTcxOEYxRjE1REYxNzVGRTNCRDJDN0Y3RkQ1QgotOjEwM0RDMDAwOUU4NkQ3NDRGMjhDRTIxNUVERjFDQkY5OUY3QUUyQjVFRAotOjEwM0REMDAwMUVFNUFFNEQ4OUVGQUZCQ0Q4OEQ0RkI1Njc2OUYwQTczMgotOjEwM0RFMDAwMUFGRDAyRDZCQjlCREFFMkQ5MkQ1QTY5QkQyNzc2RkZCMAotOjEwM0RGMDAwQ0ZDNkI1RDU5QTk0MTM2MERGNEExRUMzM0U2ODg1QjIxQwotOjEwM0UwMDAwNUUwNTdCRkUwMkQ4RTU2MDFGMDZDQkQwM0Y0Q0YyOThFMgotOjEwM0UxMDAwQkYxNjA2MTA4MTVGMTQ3Rjg4RUQ2RjQyNDRBRjA3RTUzRgotOjEwM0UyMDAwNENBM0RGQ0Q5NDY2MzdFQUVGMjlBQUEwOUZCRkFENTYxOQotOjEwM0UzMDAwQzY3OTU4RTE3QjY5RThDRjBEQzE3NzREMUUxMkI2QjkzRQotOjEwM0U0MDAwQTNGNDBBOUY2MkZFODA4N0FGODgwRTM0N0EwNTMzOTgwOAotOjEwM0U1MDAwRDFBQkYxQkRFNTk5QzUyNDFFRkU3QTdDRUY3NkUzN0NGQgotOjEwM0U2MDAwMTNDQUE1RDhGNzlDOTI3MjUyNjdBNzI0N0U0RjIyMjdDNwotOjEwM0U3MDAwNzVGNjRFQjkxNkY3RTE3OEEyNzZERUNCNDIxMjk1MDdCOQotOjEwM0U4MDAwREU5RjkwMDA4NTZGMTMzNDY1ODA3QzIyQThDRjlBQkM5QQotOjEwM0U5MDAwQzUyODE3Qzg0RTIxNjZERkFFMzBGQTUxNTJCMEJGNjg1MAotOjEwM0VBMDAwNjU3QTUzQUIyNzlFMEZGQjZFMzQ4RUE0RTBCRTM2NTE2RAotOjEwM0VCMDAwRkY4NkJBRDJDNzI0QUE4QzFDQjVBRkI3NEExNDhGOEQxRgotOjEwM0VDMDAwNEJGRDUzMkE3MDdGN0JBODU1MUExNEVEMzdDRkE0RUQxNAotOjEwM0VEMDAwREJBOUZBMUMxOUE1Njc4OUQwN0UwODM3OTE1Q0JBMDY2MAotOjEwM0VFMDAwMUU3QTg4MzIxMkEwQzlFOTlCNzQ2MDNCN0RDQUYxNDhGMgotOjEwM0VGMDAwODRFRUZEMEMxREIyMERENjg5RkU4OTIzRDgwRjA2QkFCQgotOjEwM0YwMDAwODRGRUE2NEU1NkE3MkY0MjdEOTVEOUVGQzc3OTQ5NDEyOQotOjEwM0YxMDAwRUIwMzE0NUVBQjZDQkNBRUYwN0EzMkFGN0I3ODNEODdCRQotOjEwM0YyMDAwRDdDOTdBQUMzQjY0NUEwN0ZFMzUwNzNENThCN0YzN0FEOAotOjEwM0YzMDAwMEVBRkE3RjA3QTMyQUZFN0YyQkFCMDFFRUJBQjY0MzY0MQotOjEwM0Y0MDAwREU0QTI5QzRDNkI3RjNCQUMyRUIyOUJDRUVFMUY1NUM4MAotOjEwM0Y1MDAwNUUyNzVCRDhGNzJEQUM2RTM3ODdEOEY4MEU1RUNGRTFDMQotOjEwM0Y2MDAwRjU1NDVFNEZFNkY1ODFCQzJFNkNDMTdBNDI3OTk5NDdEMwotOjEwM0Y3MDAwRTE2RjkwMEYxREQxM0EyQTExMEVEN0VFN0E2NzRDM0JCNAotOjEwM0Y4MDAwQTM5NzU0ODE3MDNCMkM5NDAxNzZEM0ZFRDlCRkM4MDAwRgotOjEwM0Y5MDAwN0ZFODg2NjNENzdBNjEzRkQ2NzBBQjQ2NEYzRTk0OUZFOQotOjEwM0ZBMDAwMjRGMzE2OTQ2MzE5N0NBQzg2MTk1QkQwMEZEMTMwNEI4NwotOjEwM0ZCMDAwQzZGRDI3RTFGRTk5Njg3QkYxMjE4NUI2NUYwODg4M0U0MgotOjEwM0ZDMDAwQTA5QjI3OTJFM0ZCQzk3RTUxQzdFMjk1QUREQzRFNUUxNAotOjEwM0ZEMDAwQzdFMzk1NkIyMTVFMDlGRTE2MUVBRjVDMDVGMTRBMEIyNwotOjEwM0ZFMDAwRDBBOTBGRUJDQjIxNUU5OTBGRkI2QjE2QUY2QzgwNzhERAotOjEwM0ZGMDAwMjVBRDNGMDdGMTRBNUEzRTBCRjE0QTVBM0VDM0UzOTVCRAotOjEwNDAwMDAwREI3OUJDNzIyQkM0MkI2OUI5MTlFMjk1QjQ3QzlBQzdEMQotOjEwNDAxMDAwMkI5RkUyRjFDQTI3NzlCQ0IyNkQ0NkYxNUI3OTMwRkY4NAotOjEwNDAyMDAwQjk2Q0ZFODlGMEQxNzc4QTUxN0VGNkE5MzBDNjJENTIzRgotOjEwNDAzMDAwQzZBNDE4REEzREQ3MUJFMzE2RUU5MjVDNDNERDU5NjgzRgotOjEwNDA0MDAwOEM1QkQ4RjM4QTBERTM1OTMzQUYzM0I0Q0I2OUU1ODY4MwotOjEwNDA1MDAwQkFFNDM0QzYyRDBBNzc0RDM2RDQ4NzZFQkJDQjUwMkZDOQotOjEwNDA2MDAwRDg1ODY5MTg3RjcwRUJGRDg2RjZCQzk2MDcwQ0VEQjk0MQotOjEwNDA3MDAwOEQzRjM3RDQ5NTI1RjU4NkZFNEY5QTcyOTFCRUIyMTdDMwotOjEwNDA4MDAwQUQzNEY0Q0I5Q0JCREVEMDZGOUVERDdGREEwNEYyNkVFNAotOjEwNDA5MDAwNDJEQTE1QzkzN0YyQjU5QUFFOTc5N0IxRkFDMTk0NEQ4NQotOjEwNDBBMDAwRkM3RUQ0NzM0QzFGQTE4RjE2RkM2QTU5Q0M3RjY1RkQzMgotOjEwNDBCMDAwRTRBNjQzQjA3RkIxRTQzMTNEMTVFQkFGOEExRDRGNzZFNgotOjEwNDBDMDAwRUUzOEEyRDJFRjk0QjkwRjc5M0I3NUZDNDhCQ0JBRjczMQotOjEwNDBEMDAwRTg1MjkzMjQyNjI3NTczRUMyRjZFNzJEOEZDNERGQTc2OAotOjEwNDBFMDAwQTMyNkEwRUI2OEY5MzYzRTFGQjgyNDkzNDE4RjY4RkJFNgotOjEwNDBGMDAwOUE5NjQ3MDRFQ0ZGN0RDN0Q3REE2M0M3OEQ3RThGRDJDRgotOjEwNDEwMDAwREU0OEZEN0UzOEM0RTc0Mzc1ODRDRTVFMzA3NzI2NEZBNwotOjEwNDExMDAwMjdBOEU3RDk3RUQ5QzRGRDNCNjUxMzRCOEYzNTUyN0U2NgotOjEwNDEyMDAwNTlFNjIxM0UwQkFEMkY3Mzk2RkI5OTVENDJBRDczQzBFRQotOjEwNDEzMDAwQzU5MjVCNzE1RkFGRjVEN0U2RDVFODlDQ0NFNDBCRDFCNwotOjEwNDE0MDAwRjkyRDUxNEVEOTBEN0U4NTY1NjlCRERCNkY3MkM0ODQzMgotOjEwNDE1MDAwRkUzRjUzNDQyMDYxQUE5NzY0QTk2MjVDMEU5RDhGN0M0OAotOjEwNDE2MDAwRDhFNDVCNEE1MDNGQzVGNTBGMTBCMjlFQzU5REJENDZEMQotOjEwNDE3MDAwQkY2OUUzOEMxOEY5QzdGMzMyQ0M3Q0ZFMEQ2OUU1RjgxMgotOjEwNDE4MDAwQkNEMUQzRkJCQzJDMzAyRjk4MEY5Rjk3MzlFMkMwRDIwMwotOjEwNDE5MDAwMTRCMUUxN0M0NzQ1NTJCMTVFMUE0OUM2RjJEQTQ4N0Y1NAotOjEwNDFBMDAwMkM0NzQ2MzJCMDFDMTExOTg4NjU0OTI0MDdDQjZCMjI3NQotOjEwNDFCMDAwNTdFMTdCQzU5MTIxNTgwRThGNUM4M0NGN0Q5MUUxNThFQgotOjEwNDFDMDAwNUUxREY5MDEzRTFGMTYxOTg1NjU1MUU0MDY3QzVFMThENwotOjEwNDFEMDAwMjlDM0YyQUFDODJERjg3QzY4NjQzQzk2NDMyMkI3RTE1MwotOjEwNDFFMDAwRjM4MkM4MjQyQ0YzMjM3NzYzMzkzODMyMTVDQjQxOTFGRAotOjEwNDFGMDAwRTk1OEU2NDVBNjYxMzkzMDMyMDdERkNCOERDQ0M2MzJBRgotOjEwNDIwMDAwMjdGMjIwM0U1NzIyMEJCMTFDMTA3OTE4Q0JFQ0M4Q0ZGNwotOjEwNDIxMDAwQjBDQzhBMzQ2MDk5MTk1OThBNjVGRkM4MkE3Q0FGNUY4RgotOjEwNDIyMDAwNjQwNTk2MTk5MTQ3RjFCOTM3QjIwRUNCRjRDODA2MkM0NAotOjEwNDIzMDAwOTMyMzVCQjFERDEzRDk4QzY1NTJFNDM5N0NFRThFM0M1RgotOjEwNDI0MDAwOEJBNTJCRjIwMjNFNzc0NkY2NjBFOTg4RkMwNjlGREJFMQotOjEwNDI1MDAwMjNBRjYwNjk4QkJDOEVDRkFEOTFGRDU4NUUwRTRGOTczQQotOjEwNDI2MDAwQjM4MzRCNEYxOEUzQ0YyMzNGMzFDQUYxOTJDM0M2Rjg1MwotOjEwNDI3MDAwNzNGMTNCNDYzOUVFM0I2ODhDM0YwRjdCRDUxODdGMkVBMAotOjEwNDI4MDAwREM2QjhDM0YwRkRENjU5NEUzMDVEQjhDNzI3Q0YwQzY0NAotOjEwNDI5MDAwQkIwQ0ZERjM1QTJCMERFREI5MkRGNzFCRTU3NEEzNTFBMwotOjEwNDJBMDAwOEU2NzJGRjlCOUExN0ZFNkEyN0E0MzdCQkZCOTJCMERBOAotOjEwNDJCMDAwRURERTE5NDZGOTlENEU5RTMwRUNEMzNDNjNCNjE4RjUwMQotOjEwNDJDMDAwREFGNUJGMzRFRURCNEE5RThGRDlENzg0NTBCRUQ4MEJDNwotOjEwNDJEMDAwRkZENUYwOUUzNUVGNDA4QzVDNTY5OTdDOEFGMUI3MDM5MAotOjEwNDJFMDAwNDgyMEJFQjk5OEQ4N0RCMEFGODlDNTY3MEE5NzA3QTk5RAotOjEwNDJGMDAwQzA3N0I0NENFMzdDRDcwN0Y4OEU5NjI5QjdDQ0Y1MDI4QgotOjEwNDMwMDAwM0RBNDRFMkM5RDA2NzZDQ0M1NjM4MjAyQkUzMjYxNjIwRQotOjEwNDMxMDAwNkQzRUM0N0I1MkZBMTM4Q0ZCMTI3NUM4MEQ3RTVBNkYyQQotOjEwNDMyMDAwQ0FFMDc1RkE0NDgwN0ExNjYxRkUwNkIyQjQxQ0ZDNkNEMQotOjEwNDMzMDAwNEQzOUFDRkU1NkUzOTI3MkM4OEI2OTMyRjM3NkI1QjE1MwotOjEwNDM0MDAwMUNERkI3QjFGQTkxQzYxOUY1RDA5RTkyRTRFQkU3QTM1MgotOjEwNDM1MDAwRUY2RDM1Qzc5N0Q3OUY0QTJDQkVENzVGRjJGRjQxQTJCQQotOjEwNDM2MDAwRUJGRjZCNTlFNzQzRTA5N0ZCNzc2QkUwMDM4OTNFOUZEOAotOjEwNDM3MDAwNkIwRDBDODBEMERBNTk3M0UwMTk1MDFEQjk4MkZGMzBGMwotOjEwNDM4MDAwRjQyQjEyRkMxRjRBMjhCNzhEN0VENjA5QTAzOEU5RjMxQQotOjEwNDM5MDAwMUNDOUZGNDc2OEQ3RDZERkU0RUE3RDFFRUY3MkJERDRBMwotOjEwNDNBMDAwOTQ0QzcwOUZBOTNFMjZGM0JDMTI4MkZBNTJGMzZCM0RFNwotOjEwNDNCMDAwRUU3MEEzQkM1RkZFOThCQzA1RTI1MkU2Q0NGNEU5RTBFNwotOjEwNDNDMDAwNEY4MzNGODNGRTY4NkQ1QTA4N0U3NjJCRThBMTgxMjBEQgotOjEwNDNEMDAwRTVEQkIxNzQ5MjBFMkNEREE0MEI0QjBGNjQxMjBDOEMzOAotOjEwNDNFMDAwQUVCQjdCQkQ1OTZDQkQxNDBFNUY0QkI4OEZBOEMxRkUzMAotOjEwNDNGMDAwRjU4RTg5QTVCMDFFMEE4NzBCMUMwRTdGOTdGQTI0ODZCRQotOjEwNDQwMDAwMDNGREFCRjA4RTY0MkU1MUI0Mjc3NjA5MDY3RjY2OTJDOQotOjEwNDQxMDAwMjk0MENDM0M4RTBBQ0U5OThDMTkzRURDOEZGRDQ5RjJBNgotOjEwNDQyMDAwMjAzRDZBRjBBMzdGOEI1MjQ2NDZGMzAxRTg3QjU2NzMyQQotOjEwNDQzMDAwOUY5RUUzNjlFMzIwQzBFMEZCNUMxRjZBRjQ1QzlCNDA0NQotOjEwNDQ0MDAwM0Y2OTdFNkVBMkRFRkE5REUyNERCRjk3QzVCOERGMzFBRgotOjEwNDQ1MDAwNDkzRThDRDdDNkJFMjczOThERjJDRkVDMEM2MDFFODQ0NgotOjEwNDQ2MDAwMkNDNThGRUJDQTE2MUVBRkRBMzhGMThBRTJEQjNCQjhGNwotOjEwNDQ3MDAwOUQ0RjFBNkZCREEyRkU1QkI0NzU1MzRBODBGRTU5MUE1OAotOjEwNDQ4MDAwRDc2RkJDMTVFOTZFMTA3RjNGMEJFQzNBNEE0RkFGRkY3OAotOjEwNDQ5MDAwQjlCQUJFMDVFODBGNjJEMkYxRkMwN0FEMjJEQTgzNTk0MgotOjEwNDRBMDAwMEJBOUUwQzk4OUMyM0JCMzkwREE4M0MzQTJERkNENUMxQwotOjEwNDRCMDAwNjRGNEJGODQ2NTE2NUYyMUFENTcwNjdGMkRBRjMzOEI0MwotOjEwNDRDMDAwMTJGQ0JGQTZGNDlDMDdEOTM2OTFBRDg3Qzc1MUE1MEQ0NAotOjEwNDREMDAwMTVDRDM2MkE3RjA2Mzk1OTNEQjNCNUY3RjkxMDFFQjcwOQotOjEwNDRFMDAwQzhFNDc0OTVFOUU0N0U5NzlEQzY3MTdCN0NEN0Y0Q0VEMQotOjEwNDRGMDAwRjA3ODc5NUUwOUJGRjMxREUzODAzM0NERjFFM0E4MTRCMgotOjEwNDUwMDAwNUY4OEVGODFEQTNDNkFFOTFGOURENzYwM0U3RjZEM0M5MgotOjEwNDUxMDAwMkQxRUE4RDUyOTNFQUQ2MDc3MzdCNTU0QTI5REQ1RTRCMAotOjEwNDUyMDAwNjVGQTlCN0M0MzQ3MUY4OTJDNEZFMkVEQ0I0MjFDRkU3MgotOjEwNDUzMDAwOUJGODdFMzJBNDk2NjNGRTIzRDk2NUE0NTM2NUE5NjREMwotOjEwNDU0MDAwMEZBMEZEMjZBNjQwQjlCOTkxRjVDQjU5OTY2NjA3Mzg1QwotOjEwNDU1MDAwMzU3QTUyNTJBMERDNTQyQkQ2REIyOEREMzRBQUM0MEZBNgotOjEwNDU2MDAwQ0JDQUZFRDkwOTFCNkIzRjlFMEM2NTRFNUJENzVCRjkyRQotOjEwNDU3MDAwMTQ3RjM5MUVEMTI3RDFGOTY0QThFN0RGQkEwOUNBMTYxQQotOjEwNDU4MDAwQkYzNTA3RkM3MDRCMjRDQzIzQ0M2RTIzRjYwMkRBMkYwOAotOjEwNDU5MDAwN0IyRUMxN0UwNDQ0MjA5RENGOTMxQTFFRDU1NjYxMUNFQwotOjEwNDVBMDAwRkQ2NzY2NEJENzUyMUJCRTQ3RkM4Mzc0RkQzNjcwRjAyNwotOjEwNDVCMDAwRTUzNTNFNTAwNjZDOUFEN0UyOTkzQzBFRTJGMzg1QzQ4RAotOjEwNDVDMDAwMzc4ODQ0RkIzRENFQzc3MzQwM0I4QzMzODZFNTMxNkE2OAotOjEwNDVEMDAwRURFQjc4QkJBNUY2QkM5QTBGNjU0QkU3QkE5QkEwNUZFNQotOjEwNDVFMDAwQUI3MTlDQjVCQ0RGMjBBREJEQzREOEJFNUEyM0FCMjU5MgotOjEwNDVGMDAwQ0Y4NzYxMUM1MzRCRDc3QjM3QzE3Q0RBNThCRjZFQjk2QwotOjEwNDYwMDAwQzVGQkFGRTJGRDYzRTVDNTYwNzg4RkZCMkJGNUYzNUM3RQotOjEwNDYxMDAwMTE4MzVGNEQ3RTg0QzAzRjkwMEZGODY1RkUwMThCNzU1RQotOjEwNDYyMDAwRUI1M0UwOEZENEZBMkQxN0Q4RkU0ODg5QzkzMzdEQzVFNgotOjEwNDYzMDAwQ0NFNDYxOTdDQ0ZDQjYxQTNEMjVBMjZGMzI1N0I3MUY2OAotOjEwNDY0MDAwODBCOEU1MENCQkIxN0U0RjhBNjExRjQ4QzZGNDMzQjYxMwotOjEwNDY1MDAwNUY5RjZCNkMyRjE5NkFBQzE3MTYxQkVCNzlENzE5RUFBMQotOjEwNDY2MDAwMTdCQkZEMkY0MTFCRTY4NTczRkZDQjYwRkU4RDBENkRFMwotOjEwNDY3MDAwOTU5ODg3MTJGNUZCRjlFREZBN0Q0QTI2RUZCN0FEQTZCRQotOjEwNDY4MDAwMThGOUE3QzFDOUY5ODdGQjY5MUNCQ0JEQTlCMEQyQUU5NgotOjEwNDY5MDAwOEZCRjZCRkNEMzBDN0UxMDBCRjg1OTU4REVGNjhFQjYyQwotOjEwNDZBMDAwREVFMUI1ODlFMzdCMjNDRkFGNzk4MkUzQTk4REUzRTkyRQotOjEwNDZCMDAwMTdEQzhGMTNFNDdFOUMzNTNDRUZCQzg1RTc5REFGRTRBRgotOjEwNDZDMDAwN0U5QzQ2OUU3N0ZFMDJGN0UzRUNFMTdFOUM2RERDOEZEQwotOjEwNDZEMDAwRjM2QkVFQzdEOUNERjNDRTlGRTM3RTlDMTVDM0JCQTY4QgotOjEwNDZFMDAwODJGRkVDNTlFRUNGNzk4NkZCNzNDNjcwRjlCRDYyQUNFMAotOjEwNDZGMDAwQUYxRkY4RjdCNjhFOERCRjdGMUVDM0U5RTJDN0UwQzhEMwotOjEwNDcwMDAwRUMwMzdBREI1MzZGMDZCQUY0QjEzQ0VCOUM1QThGNjgyQQotOjEwNDcxMDAwMjkwMTNCOTdEMTY1Q0UyQzhGMjg5NzgwOURDQkVBOTNCQQotOjEwNDcyMDAwQjhCRTA1QkQ4Mjc5MzM5OTNDNkYyNjkzNkE5RDc0RUVCRAotOjEwNDczMDAwRkY4NUFFQUE0QUMwMUZERjc3OEE2NzM4Qjg0MkREMzJFQwotOjEwNDc0MDAwRDdBMzBBRjFFQUUzMDY3REQ1ODAwMDcxMkRDOUU0NEZCNQotOjEwNDc1MDAwOTI0N0MwRjg2QzVFRjlDMUFFMDM5MEE3RThFQkU4Mjg3OQotOjEwNDc2MDAwMDc3NDBFM0JENDVFMEZGRDBBMEI4MzEwOTEyMEU2QjQ1NAotOjEwNDc3MDAwOTAwODcyNjk0NTk5MEZGRDZGNEY3RjY4RjI2RDgxMzEyNgotOjEwNDc4MDAwRDM4ODgxMkVFODFDNTE5RkU1RjFGRDJDQjlERTQ4MTczNgotOjEwNDc5MDAwOTZDODI2QjQ5QjlCNkE1ODdFMDZFRDEzNzdGRkFFOTVBQwotOjEwNDdBMDAwQzk3RUEzRkQ5MDU0NkFGNDgzMzUwNTI3RjdFQTk3RjY4RQotOjEwNDdCMDAwQkQ2QTdDN0ZEODVFRTNGRUFCQTlEMDk4MjcxMjVCMTY1QQotOjEwNDdDMDAwRUUxMjYzRkM1QzMxRUYzQjdCRkY3RTdFNjQyMkFFMzdGMgotOjEwNDdEMDAwMTE5RERGNjZBQTJDOTc3NTc5MTJDRUM4MEY3MTFGMTEzMwotOjEwNDdFMDAwNkIwRjRBNjBFNzBEQzRCQzFBM0ZEOEJGNTI5RUM3MEY3QgotOjEwNDdGMDAwRkUxMjI5NEZFMUE1OEYzRkY3RjM3QTA1RDZBOURERjgyMAotOjEwNDgwMDAwNjMxODlGRTJDNTYwMzc5QTQ4MDA2MzIyMkI4NjEwQkU2QQotOjEwNDgxMDAwMUZGOTY3QkQ5RjJBRkYxNTc3MTBEQzRGNzg5QUVDMzc5OAotOjEwNDgyMDAwQTg0MDgzRkU5OTg4MUY5OUUzMjc1NUFFNzkwNkZDMUY5RgotOjEwNDgzMDAwNEZBRjE2MDlFMDdGNkI0QkVGRkNEQjIzOUZDMkU5Qzc0QwotOjEwNDg0MDAwMzg1MkQ2MjI0RjMxRThCRDQ0RUZCNTJFMTJDN0M1OEI4MgotOjEwNDg1MDAwOEZDREU3NzRCRDZDRDE2NDBGRUE4RDgzOTdDRDE3OTgyNwotOjEwNDg2MDAwMEZFQkQ3RjIwNUZBRENDRUYzMDVDRThDMzdGODk1NTM3MwotOjEwNDg3MDAwQUI3QUM3RTMwNjJFQkZCNDdBMDY4OTZGQkZFRUUxRkNDMAotOjEwNDg4MDAwNEU5QzJDREY0NEEzRkJENDYxQkQ4RkRGN0Q2RTI3MjRCQgotOjEwNDg5MDAwOTIwRUUwMEIyOTgwRjJCM0NGRUQwMUNDOEIyNzE0NUY5MQotOjEwNDhBMDAwN0EzRTY5RkE3NkZBREJDMDg3RUEzQTk2QTc0OEZCODkyRQotOjEwNDhCMDAwN0EzQjRDOUI0Nzg2Mjc1QzI2NDBGRkZEQTMzMDdGNjNGNQotOjEwNDhDMDAwQjAzMzIwNDJEQ0JBNjkzRkUxREY2OTQ3N0JEQzMxQTNDQQotOjEwNDhEMDAwQzZDRkZDNjVFRDA0RkNGNjhFMUE5RjBBREYwNzdDNjFFQgotOjEwNDhFMDAwMUU1MjQ2Nzc3RkQ0MEZBQjgyMjJBNjdFMzQ5NDMwQkIxMwotOjEwNDhGMDAwNTc5M0ZGMUE5RDM0Nzg4QjBGNDE3Q0ZENDI4OTg0NzE1OAotOjEwNDkwMDAwNkY2QTVGNURCQUE0RUQ2N0U4N0YwNkI3MzEzQTY4RUE3RgotOjEwNDkxMDAwNDNGMERDOEQ1NEEwODY4MTFFODk3RjFDQzIwREM4MUYwOAotOjEwNDkyMDAwRkU5QTVDM0ZGMUUzQjk5NDIyQTZGRjRENzBERTAzRkFENAotOjEwNDkzMDAwNDkxRDdFQ0M4MzBFNzg3QzkwQkY5OEQ1MzYwQ0Y5NENGRgotOjEwNDk0MDAwRjJENDA4ODBERjg3QzRDMDZFM0Q1Rjk5OUMyQ0ZGQUIxQQotOjEwNDk1MDAwMjlDMUI5ODIxNjJFNjdGQjI1QzBFQjg3QkMzRDU1RUVGOQotOjEwNDk2MDAwMTgwRjcyRjhFOUM3MjhGREM3QzlDQkY5MDNENzBCNEY1OQotOjEwNDk3MDAwQjU0RUZFNDM4MTEyRTU1RkFERkQ0RjYwQTRFOUU2OTVCQgotOjEwNDk4MDAwMTU5MTU5N0U2MURCNzdEQjA3OEMzNTEzOUU3RjY0N0M0NAotOjEwNDk5MDAwQ0YyQzU1MThGNjYxNTk2NkUzRjdFNDM0QTMzRkYyQ0EwOQotOjEwNDlBMDAwRTcyOUExNUMyMjg1MzcxQkYwOUNEQUFGNzdGOUE5RjFFMgotOjEwNDlCMDAwRkZDNUFDMThCQjIzQUYwMEU5Mzk2QTc3OTQyMzNENkM3RgotOjEwNDlDMDAwRjQxMjQ2MkY5QzlFMzQzREUyRUFGNEFCRTJDMDlFRjQyMgotOjEwNDlEMDAwQjEzMTc4QzAwNjc2QjI0NjY3MTY2N0M4MEY3RTAzODc4NgotOjEwNDlFMDAwMzc4Q0U5ODIzQTdBRjgyQkQwNDM1NkRCNDg4NEI3QUI1MAotOjEwNDlGMDAwNDRDNUU3RkJCOEZFQ0JBREVEMkFGM0M3NTk4NzY2REZBOAotOjEwNEEwMDAwQzFCRUNCNUIwQzVGODhEOUZGOTA4QTIwRDhENTU5NTk5RAotOjEwNEExMDAwMTBDMzAzQjVDQ0ZDMEI5OTk5OTdEQjZGNUQ1OUZDNUExOQotOjEwNEEyMDAwOEIyNzY3RDMzRkQ4RkZCQ0EyRTFGRDhCMThCRjk1ODdDQQotOjEwNEEzMDAwQUE3ODVEM0NCNUVGMTdEMzA1MzFBNzI3MUU2MkRGNkI1RgotOjEwNEE0MDAwRjQ5NDdCRTJDOTZGQzkxNDQ4QjdFOEYwMUZCQjhGOEY5RAotOjEwNEE1MDAwREQ2RjEzQkU3Rjk0QkJBQjhCNTAwRTVCMjY4Q0MzRjgwRgotOjEwNEE2MDAwNDhGN0JFN0JFMzQ0NUNCNzg1RTM0RjZFRDFFMkZCQjExMAotOjEwNEE3MDAwRkJDQUI5QkVERUZEQUFERjZGNUZFOUIzMThGMzRCQUYyNwotOjEwNEE4MDAwMzgzRkY3M0JGQTI1QjY3MkJCMzU3NjdGMTEzQjhFRDg5RgotOjEwNEE5MDAwMTYxMEUzOUREQkM4NkYzM0MyM0RBRkM1NjhGRjBDRTM2MgotOjEwNEFBMDAwRkM5REEzMUFGREM4MDM2QUZCQzVGNzc3RjI3Q0I1Q0E2MwotOjEwNEFCMDAwNTIwRDRGQ0E5REZGNDFFOTc3RjYyMTMzRTZFMTZCRkJDQQotOjEwNEFDMDAwNjBDREVGMzQ5QkU3QUQ1NUYyM0NCNjE5QTRDMjBEOEQxNQotOjEwNEFEMDAwNjc4OTg4RTc3N0NFOTJGN0RERDdFOEY4QTZDQUMyQ0UxNQotOjEwNEFFMDAwRDE5MTY2RjM3MTM4N0ZBMUU1NjdDRDBDQjJCQTM2OUZEQwotOjEwNEFGMDAwRUEzNjYzQkQ4QTRDNEUwN0JGNkI1NUFCOTk0MDNFRDYzNAotOjEwNEIwMDAwNkMyMjFERUZENEU2NEZFOUY4MjcxNjk2ODc1QTRENkFCNgotOjEwNEIxMDAwOUE0MEJFMkRFMzc5QUY5NTFFMjJBNUE2MTAzMkVGQTVDRgotOjEwNEIyMDAwQTc0NkMyNzk5RTc5MTYyNjdGNEY1M0Y4MkIzQTdEN0Q5MgotOjEwNEIzMDAwQkYzMzI0MDM3RjdGQjZGNzlBOUZGQzgwQzBGQkExQTZGQQotOjEwNEI0MDAwN0VBMDNGOTNFMzlGODM5OERFNkM5Q0RGRTVFNjFGM0JFRQotOjEwNEI1MDAwNUZFRDlDNDZBMjc5NDgzQjg1QjhGOTNGMEY2QkZFQUZFRAotOjEwNEI2MDAwMkIzQzQ3QjIxNTgyNjIyMzEyOUYyM0I5RENGQjNCMkRGRAotOjEwNEI3MDAwOEM3RUZFQkJFRkVGRkU5RUVGM0Y3Rjk5RjlDRkIzNzZDMQotOjEwNEI4MDAwREQ4ODc5REU2OTM1MTUyMDU3QjU3Qzk2RjkyNEUwMDc3NAotOjEwNEI5MDAwNTdCQUU5RDU0OTZBN0Y0NUQ3Q0Y3Qjg1RkQzMjY5M0Y1MgotOjEwNEJBMDAwRDMxNUY0Q0JFQjdEQkM3MzlDQ0Y3RkJGNkJBQjBDRkMwMAotOjEwNEJCMDAwN0JGNjk3QzcyNjgyM0Y3MENFNkY0Q0M0NEFFOUUwREM5MwotOjEwNEJDMDAwMkUxNzNGMkYxNjkyNDFFRkREQkZEN0U0MEY2MTNEM0MxQQotOjEwNEJEMDAwRjIzNjVEQkUyMDY2MTZEMkYxRTdGQ0RBODVGRUM0RkIzNAotOjEwNEJFMDAwOUZCNzg0MjZEMEY3RUY3RkYxQjM2MTg0QzJFMTVDN0Q4QgotOjEwNEJGMDAwRDc5QkZEQzEwRUZBQTVDMEYyQUZENENFNjFCN0QxRTcwNQotOjEwNEMwMDAwRjc0QkU0QkU4QTM4N0FBQjgzRjNDMTk5NTcxQzUzODBDMwotOjEwNEMxMDAwQ0U4NDlERkJFRkM1NzFEQkVGMzQ1Qjc0NzE4RERGNUI4MAotOjEwNEMyMDAwQ0MwODdGREE4RjlEQzc3QTU2MDgwRDEyRDhGQ0Y0RjlBQwotOjEwNEMzMDAwRTI1QURFREI5OTY3MDUzNkJGOTdDRDIxMUJDQzZGRTdDMwotOjEwNEM0MDAwNjYzOTQwRkIyREQ4RjkzN0E0RUIxQjdFQkREQjBENzAxOAotOjEwNEM1MDAwNThGMEIyQzkyMDdGMTZFQzM0ODUyREMzQjAzQzY2NDFCNAotOjEwNEM2MDAwRkZCRERGMjk4QzA0NzgxMkQ0NTdGM0Y3Q0U5QjAwRjRGNAotOjEwNEM3MDAwMzBCRjdERDVERjRDNkU3OERGQzg1RjE0MkU3OEVFNjNEMQotOjEwNEM4MDAwQ0VDNzI2REYwNEE4QkZGMDhDMUJFQ0Q5RDMxRERCREQxQgotOjEwNEM5MDAwMDA1NzNBRUUzNDk5RDJENTBGQkZENkYxMjE2MUUzNDdFMAotOjEwNENBMDAwNTI3QThFMDcxRTFCQTBBRjA1RUQyQkQ4RjdGNkRFN0FFMQotOjEwNENCMDAwMEFFNERCODIxODNFM0UwREZGQzhFOEE5M0YyMjE2QTM5NgotOjEwNENDMDAwNUZGMjAyNzk2NzI0RDgxRDY0Njc2QURDRkNFMjZFRkQzRQotOjEwNENEMDAwQzFGOTdBQ0VFRTBCOUJFMDNDRjE5OUU3RkZCMjA5RUMwQgotOjEwNENFMDAwRkJCOUZGRkM2QUQzQzNFMDE3NzhDREU2MDE3OUI0RTBFNQotOjEwNENGMDAwOTcxRkJBODkwRUZFQTk1NjY2Q0Y5RjdCRjY5OTFENEY2NgotOjEwNEQwMDAwNTAzRTM5Rjc0NzBCREEzQkU3N0U3QjJBNUJBMUVCM0Y0RQotOjEwNEQxMDAwQjdFNzFGRTk3MEVFNzZEMTZGQzdGNjA1NzgyQ0RBNzcyMgotOjEwNEQyMDAwNDNERkRFRjYxQjQwQjcyMThCMUVCRjIxQzRBRkYyMzIzQQotOjEwNEQzMDAwRkQ0RTVGMDIwNzU4NTgxOTgzQTdEN0Y3QkU5RTBERjNBMwotOjEwNEQ0MDAwM0M3QkM0ODJFNzZGMTZEMDY3QjVDNTgwQjc3OUE4MUZEMgotOjEwNEQ1MDAwQTBCRTg0QzI3QkZFQUVFNTdGMzMwRDhCMDc3N0I1QkY2NwotOjEwNEQ2MDAwMDg2Nzg1NDhCODNGRjEwMkRFNkZGQkYxRTgxMjI4Q0RGNQotOjEwNEQ3MDAwM0UwNUM2MjM1RDI4REY2M0RGNUI3MDk4RTJGN0VBQzQ3NwotOjEwNEQ4MDAwRjhCQzQwQkU5MTAxRkUwQjc2QUQ2MERGNkRBN0Y4NzRGNAotOjEwNEQ5MDAwRjdDNEU3NTlGOEM3QTg5RUY4MkNCNkM2RTI3M0VFRDM1RAotOjEwNERBMDAwNEY0MEUzREVENEI4NzkyNDFBM0VFN0VEQkJBMzU3QkJFRQotOjEwNERCMDAwNDE5MzBGOTc4M0YzMkM5RTM3RjU0RjhCQkZEQzBBN0MxMgotOjEwNERDMDAwRjZCQzQzRjUzMjNDODcyNkQwQjY3M0JCMkY2NDEzNEEzQQotOjEwNEREMDAwMjc1Rjk4QkJFRTA1MzlEOUY1NUI4QjY3MEI3RDdFRkZBRQotOjEwNERFMDAwNkYzRjQ2QkUzQkI3RUYzRDU5NjFFNzRGOUMwMkI1MkI4NQotOjEwNERGMDAwQ0U5MUVFQkYwRUIwMzNFNkYzRDhEQTgyNkRBRUIwQzUxOQotOjEwNEUwMDAwMURDNUQ3RkNEMEE0NzE4QTFCOUYxRkMzRTcyMUM2MEYwNQotOjEwNEUxMDAwRjM0M0ZCNkYxN0UyRTA2Rjg5MzU5N0U5QTc1MDFGODREMgotOjEwNEUyMDAwQ0IzQ0QyMjFDM0Y5N0MzRDVFODU1MkMwRTdCMTFCODFFQQotOjEwNEUzMDAwRkUxMkUxNTM1QkJGMDdENjdGQUQwRUFGREIxODFGQzc3NQotOjEwNEU0MDAwRjY5RjRGRjkxNUU0NzAwRkZDODY4NDhGQTEzQ0I3RDkwQgotOjEwNEU1MDAwMjI0MTdFRTQzOTFFNkY4Q0M1N0IxNEZFRkNGQ0U0Nzc5NgotOjEwNEU2MDAwQjQxNzFGQjIyNjg4NDM3MDM4NUM4RURGMkZCN0JFRUZCMQotOjEwNEU3MDAwMEFCRjE5NTYwNUM3OEQ4NUUzOTk2RkUyRUI4M0Y1NUM5MAotOjEwNEU4MDAwN0VDQzI3MzVFM0ZBRTlGNDk5QzU0Q0Y1NTkwRUQ4N0I2OQotOjEwNEU5MDAwMTU2QTdGMjEzQURGQTY3NjEzQ0FGOTMzM0I0RDIxRDAzQwotOjEwNEVBMDAwMTdCMUYyNjI3RTgyN0Q3MkM4Q0FFQzk3RjkyRkVGMUZBQwotOjEwNEVCMDAwMDY3MkVEQ0M4MTU3Mzg1RDMyQkE5RkJGRUI5OEFDNzI2OQotOjEwNEVDMDAwRkQxMEQyRUI4NzA0NzFDQTVGRjJGMTE2QkMxQTdGQkNFOQotOjEwNEVEMDAwMDVCQkZFMTY3N0JDRDM5MkZGNEU5OEZGRTkwRTMzNTEwNwotOjEwNEVFMDAwRTkxMEE3REI0RDcxRkQ0OUFENTZCMzMxQ0ZENjM1RjI5MAotOjEwNEVGMDAwNDgxMjdEQ0ZFNEI2MkJCMEVFODY3QUZGQzcyQUQ4MjVCQwotOjEwNEYwMDAwRUY5QkQxQ0Y0MjI0REYxNzE2M0M2RjZENTc1NjUyQjgzNgotOjEwNEYxMDAwMzVCOEFCRDBBRkEyOERENzE4MDMyN0M5NUJBMTBBMjUzRQotOjEwNEYyMDAwNzBGRUFCQTI4NEQ5RDQ2Q0RFNUFCQkQ5MjMxQUU2NERFRAotOjEwNEYzMDAwRjU2RTI2RThBNUEzQzM0Rjk5NjE5RDlGQzZEODhGOUZBNAotOjEwNEY0MDAwNEFBNEE5MkYxREVGNTM1NUYwMkQ1NUUyRUQxNzhERTMxRgotOjEwNEY1MDAwMDc5Njk4ODhBMkQ3ODc5NkFFQTMzMDFGRjIzQjFCMDExNQotOjEwNEY2MDAwM0ZCMkU5MzU5QjBBRjI2NEMxMjY1QjA4RTI5QkFGRUZEMgotOjEwNEY3MDAwQkJCODAzRTA3NkVFNjkwQjhGNzdCMjNDREI2QUJFNUZBRAotOjEwNEY4MDAwM0JCNUVGRTJBNkZGQTJFREE3RTA2NUZBRkRFQTREQjQ1RQotOjEwNEY5MDAwM0ZEOEVEQkIxQzk4RjRGQ0Q3RTc5Mzg2MTEyQUE3QUI0QQotOjEwNEZBMDAwN0ZGN0YwNDQ5MDJGRDVCMEM3QTJGREFCN0ZERDM3RDQ5QgotOjEwNEZCMDAwNDBDNzNCRDk4N0Q1NEZFRUNFMEEwMTVFRTZCRUYwREI5NwotOjEwNEZDMDAwRjlBMDRGRTZGQ0NBNDE4MDI0NUZERkY3RjFCRDUwM0ZGNgotOjEwNEZEMDAwRjczQjE3RTY3QjlERkJEREE5MUYwMjFGNTA3QjVCRDFEMgotOjEwNEZFMDAwRUJGNUQ5RkFGM0RFNzREQzM5NTA2N0VEQzIyNTVEMUVBRQotOjEwNEZGMDAwQzExQzI4MjlCRENGNzkzOUM5MEZGQjcxNUQzRjdDNkY3QQotOjEwNTAwMDAwODFBNUVCMjE3NDQwMTFCNTlGODg3QkEyNzAzRkUwQzM1RQotOjEwNTAxMDAwMzkzQjhEREZGQkFCOTVEOTUzMEJFNEFFMkFENjNGRDg5NQotOjEwNTAyMDAwOEZGMTZCMDdCRUY3OEQ0NkE3QkMzREY2N0RBREZGN0ZDOAotOjEwNTAzMDAwNUE3MzYzQzY2MUVGQ0ZCNzkwOUE3OEY0NkZCMUIxNzFDQwotOjEwNTA0MDAwRTdFQ0ZDMzZERjM4MUVBM0Q3OUVERjYxQ0Y3RjJBQjBBNgotOjEwNTA1MDAwRkM3Q0IyQzc4NkU3N0ZFN0NBRTFDMTI5OTQ1RjVGOTQxMQotOjEwNTA2MDAwQzkyQ0UwREJCOUVFRjBFMDY0RkFCRERGNzA3OTM5RDcyNgotOjEwNTA3MDAwNEVFQkY0NzkzRjNFMEZFODBGNzU2MkVERkMxNUUwNzdEQgotOjEwNTA4MDAwREU0QjM2MDJGNDNFRUY3NzJFRjQyQkNGN0JGMUUyQzlGNAotOjEwNTA5MDAwMjdFOUYzMzNGQjFDOThDNzNBRUY3NzhCMTFERkYzMkMyQQotOjEwNTBBMDAwRTE3QkMxOEZEM0I1Qzc4MkZFQjEzMzdCREVDQTA2N0JGRAotOjEwNTBCMDAwRTQ4QzM5OUM5REQyOEI5RjY4NUVCQjg1M0IyRjhDRUIyQgotOjEwNTBDMDAwQTBGQjgyODIxQTI3RjgzOTU5NUU0RTJENjFGNzBFRDQ2MwotOjEwNTBEMDAwNDJFMjA3RDBGMTI3MzYxNjBGRTFGMUE5MDdCOEJGRTg4MQotOjEwNTBFMDAwRkMwQzI1MDlFNzdGRkQyREVDMzk4RjVGM0Y3MEFCRDJCQgotOjEwNTBGMDAwMzc1OTM3MEZDODlCMjNEN0QwN0Q4OTVDOTMwRjcyRDY2MQotOjEwNTEwMDAwMTRCOTg1MjhCNDJFNDUwNjYyQTlGNTMzQzFGRDBERTAxQQotOjEwNTExMDAwMEY0RDIzNjhCRjlCRDM3Q0E0OUE5NjhCNTM0ODAwQ0YzNgotOjEwNTEyMDAwRkYzODZGRUVFNkIzM0Y1MDE0M0ZCMDQxRTkwQkUzRjlBRgotOjEwNTEzMDAwNkM0Q0JFQ0NCM0ZCNDdEQjMwNkZDNDc4RUY4MkJBOEZDOAotOjEwNTE0MDAwQURFQjIyQkY0RjIxNzZCRTE3Q0RBQTA1RTQ3OTM0NkVCMAotOjEwNTE1MDAwQzdGMjA2NkIyNUU1NjNGMEZGOTI0MzVDMkVGNTU4M0ZERQotOjEwNTE2MDAwRTNCM0YzOUUxNEU0MzM2RDFEQUJFQTNDMjg0RjU2RDRGMQotOjEwNTE3MDAwNzlCMTVDNUU1NzQwMTRDQzc3RjY2MUREQzRFMTYxMjlGQQotOjEwNTE4MDAwNTQwOUY4NTc4MTA3RTFDRkUyQUNGMEMzN0QxNjMwMjYxMQotOjEwNTE5MDAwQzQ1MzREQ0UwMEQyOTdDNTVCODNCRTAyMkI4RjhCOUEzMgotOjEwNTFBMDAwOUMyQUE5NzY0MjlFMDc4MzkzQzk1OTgxNzA5Mjc5NURBMgotOjEwNTFCMDAwNkE5QjgwNzBBNUVGRTNGM0IxRjZDMDBDREIwOEM4M0YzMwotOjEwNTFDMDAwMUU2QTkwNTM3MjVBQjFBMURFMDM2RTFBNURFQ0ZFREZDNwotOjEwNTFEMDAwODYxRjQxNzhBREE4QjM2MjA5RjlFMjAwMzdDODE3ODc4NgotOjEwNTFFMDAwRkFGRjA3RjhCNTMwRjg1RDQ3MTQxREZGNDBGRUI2NjJDMAotOjEwNTFGMDAwRTBBNzA0RjBEQjQwRTE5NzE2RTVBQjU4MzhENEYyM0M2OQotOjEwNTIwMDAwMUQ4RDlGMTJGMTJGRTREQjQzMTA2NjdENUQxQjk2REE0NgotOjEwNTIxMDAwRjM5NDA0N0FGREFDOEREOTIzQjUyNEIwMTRFM0ExMUUxOAotOjEwNTIyMDAwRTY4NzIxNjkyQUM5RDRGOTlGODg1N0M1NzMyMDc4REU5QgotOjEwNTIzMDAwMTREQTMzNkY0MUZGQTU4NjVGOTM0NzNBNjk5NDdGQ0FCQQotOjEwNTI0MDAwQzdCMDlFQzU2RjlCNDU5MDU3QTZEQUFERTQzMzVEMUM5MQotOjEwNTI1MDAwREYzNEExQzJBNjIwOUM3RDAyQzQzNTFBQjg3RTVERDY3QgotOjEwNTI2MDAwOEQ0RjIzN0ZBQ0FBNTNCMDVDQ0RGOTY0MkRFNzkzNzVDNQotOjEwNTI3MDAwODA3NzVBNkZGMEIxRkM5Rjk2NzEwNEY1RTc2M0I0Q0U2NgotOjEwNTI4MDAwRjZGQjYxQTJGNzhCMjdGQkRBQzM2NjhBN0Y5NDQ5MEE5MwotOjEwNTI5MDAwOTZFQzFFOEUyMzk2RDAyMEZBOUVBMzkwNjAzQzIzRjlCNAotOjEwNTJBMDAwQzhDRjQyQjg1NkQyOEVFN0FEOTNCNTdCNjA1RUNENEQ4OAotOjEwNTJCMDAwOUU4QTcxMjA2MjY2N0E4QTk4NTgxOTM0QzMzRTJBMTZFQgotOjEwNTJDMDAwQkUwREJFMDM3OEJGNDRBMkY5OTQxRDlEMkRDMEY3MkVEQwotOjEwNTJEMDAwNEU2NUIxQjNCNDdCREE4RkMwN0QxMENFMTYwNzNCQTcwNQotOjEwNTJFMDAwRThBQjE5OTA4REYyRDU4MkY0RUFGNDA1ODQ2QTFEMUVBQwotOjEwNTJGMDAwRDMxM0Q4N0Y0QkVDRTNGRjAzRThGMTEzQzg0QkE0RjhCQQotOjEwNTMwMDAwNURERjM2MTBGMzVBNTY5OURCQkQyMDBGNTdGMUYzMUFDMwotOjEwNTMxMDAwQ0ExNDBBMDVEREZENjI2RjcwMzlFOTJFMzFDQTAxNERFQwotOjEwNTMyMDAwMkU3QkFFMkYzNkQwQjMyNjc3NTNDNjE4RTk1RTkzQkJEQgotOjEwNTMzMDAwQkZFRTk2QkIxNTY3NDFFRUE2NDYzNjIyNUZDNkYyNDEyOAotOjEwNTM0MDAwODM1OTU2ODVBQkYxM0UxQUU2N0YzQTI2QjBGQjMyN0E5NgotOjEwNTM1MDAwQ0EwMzhDQkY5RkVGQ0NEOTAyRTdCMTM1RkU4OTVEQkY5MAotOjEwNTM2MDAwRDQzQzFFQkZEMzZEMEYyNkM4N0ZFQ0NGRUY2NTY4QTY3NwotOjEwNTM3MDAwRjQ0NkYyMjE1RjQxNDE0NEFDQTE3NDA2NjU5MEQyMTkxNAotOjEwNTM4MDAwRTNBNzUyMkMzNTNBQUUyNzRDODZBODdCNDUzNjRGRUUyNAotOjEwNTM5MDAwQUZENUNFRTJENDVCOEJGRDgwQzc2NUVEOEM4N0IyRUNEOAotOjEwNTNBMDAwOENDRjk2QTU4OUEwQkI4ODQ0Rjc5MzRFRkE0OERBM0Y4NAotOjEwNTNCMDAwQ0EwQUY2QTU2NDY2RjFGQzJFOTdEODBFRjFEQzY1Q0UxQwotOjEwNTNDMDAwQzk1NkM4MkIxNTkyNEI5MDdFRkVFRUFBMUNEMDVCN0M3MgotOjEwNTNEMDAwMDdFRTVGMDNGQUYzMzg3REU0MzhFREI3OENERkVCNjQ1QQotOjEwNTNFMDAwRjIxNDEzRDg5N0VFNzY3NjYwM0U5NEQzMkUxQUUyNDlFMwotOjEwNTNGMDAwRjNFQzgxNUNCQkFFNUUwNDVGRTc3ODg3NjE3NzI3QjgyQQotOjEwNTQwMDAwMUY2QTE4NUYwRkM5NTQ0OTlFNEU0RTc0REY5N0E0QThCNwotOjEwNTQxMDAwQTQ0MDI3MkZFQTA3REQ4OEY3MzFGNTk0MTMwOUU0RTE2QQotOjEwNTQyMDAwRjZGRjE5NzlEODMwMjA4NDc4MzVDN0NBOUYzNDNGREUxQgotOjEwNTQzMDAwMDE0NTRCMTVBRTU2QTBENkY5QjJCQjg3MjM5RERFNjA2MQotOjEwNTQ0MDAwODc3RDg4NzM0QkI3MURGNEEzREM5RUYzOEM5NTdGNTE0OQotOjEwNTQ1MDAwQkRBNkEwMUY4Q0VBQjVDNzRCNDE5RTI2RDQ2QjM1Rjc3RAotOjEwNTQ2MDAwMjExREI3RjQ1NzgwOEVGN0FGNzlGODY5QTg3RkI2QzZDQgotOjEwNTQ3MDAwODJGN0JFNTQ0NTU2MTA4NUNFQjczQTMyMEFDQjU5NkRFNQotOjEwNTQ4MDAwOEY2MjU5RDlCNjk5MzIxMTIxNEI1NzU3QUY5OTBBRkRGRQotOjEwNTQ5MDAwMzc5OEQwRkY3MzMyNzRDREI5NUE1QTNGRDk2MjQxRkI2NQotOjEwNTRBMDAwRkRFNEM2MDcwNzgwRkQ3N0IyQzVBMTk4QzBERURGMzhFRQotOjEwNTRCMDAwQzJEOERFQ0NFRTdGMzlEOTY2MEU5OTE4RkQ1RTMyNDEzNgotOjEwNTRDMDAwM0M4MjcwRjkwRTVFMjBERDdDNDk4OTgyNzZGQ0Y5OTg3OQotOjEwNTREMDAwNzg0QkU1NUE4QjVGNzAyNzg2N0Y2NTVCN0M3QjEyQ0ZBQwotOjEwNTRFMDAwNkY2MzcyNkU0RDNFQzhEN0IyQTMzRjFCMDBGNEExQzlEMwotOjEwNTRGMDAwOTlDNTI5NTRFRTAxRkM4RTVBNDhCQ0I4QzA1OEZCRDg1NwotOjEwNTUwMDAwMDU4MEE3QjE3NkZGNjI4NkFGMkJCQjM3RUIzMzkxREEwQwotOjEwNTUxMDAwREQ4OEE3ODA3QjkyQzFFRkNCRkNBQTlGNzFCQjlDNTgxMgotOjEwNTUyMDAwMTNCNEJCRjlGQjlFRjhFREYzNUFGRUYyRTYyMzA0RjI0NgotOjEwNTUzMDAwNTQ4RDdFNkQxM0Y4QUIwNUQ4OEY0RjYyNzkwRjVBMUNDRQotOjEwNTU0MDAwQTgyNzVEMzM3QkJBQzU4MjcyNjUwNkY3NDc2OTc0MUU2QQotOjEwNTU1MDAwQTVCMzgwOUI5RkRCMzNEMEUxRUNDODNBOTQ3QkMyQUExMQotOjEwNTU2MDAwQTJDNzQ3NTFGODdENDVFOTBGRTg0MzU4MzVCQTJGQzAyNwotOjEwNTU3MDAwNzdFOUNBMUZBQ0JEODc4RUZGRjUzQjI2N0MzRTJCNjJDOAotOjEwNTU4MDAwQzNGRTVGM0VFMjdCRkMxRUQ4MkZGQ0JCMTlGMzQ5QkU3NQotOjEwNTU5MDAwM0UzNDE2RTNDOTVGOUE4RDdFOEMzMjA3OTM5N0FGNzFDNAotOjEwNTVBMDAwRkVBRjhBQUMzMkQ4RTc1NUNERDM2NUYwODM1NjQ1RDZFOQotOjEwNTVCMDAwRTBGMzJBMDgyMjYxOUVGQzVENkY5NDQ5MTA1RjIyOThGNwotOjEwNTVDMDAwRTdGMjlBRkRDRUIxRjVBODRGOEJEMThGNTZCRERBMTIxNgotOjEwNTVEMDAwMzdDRkZGMzVCQjYyOTA1N0Q1OUQyRDM4MkVBMUY2NTk5OAotOjEwNTVFMDAwNUEzQTFGNEYyNzc3QUEyM0E5QzgxRkM0QTMxMkM4RkY3RQotOjEwNTVGMDAwQUVFMkYyQTc3QjdFMUJDRDA2RjlGM0E1MkRCRTlGRTY5QQotOjEwNTYwMDAwNUQzQjVCNjc1NUU0MDdDODc3M0REN0Y3NDM3QzVFQTVGNAotOjEwNTYxMDAwN0RCNzkzRjE2OTc0M0Q4RjhGOEFCNzlFRTgzQUFFQzcyNAotOjEwNTYyMDAwRkU1RjI2QzdGRkZFMDUwRURGOTM3NUIzODg5RkNBQUZFNgotOjEwNTYzMDAwNEEwQkVERTc4NEVGM0ZEODU0MEFGQkZDOERDOTI5ODI2MQotOjEwNTY0MDAwNkU1REQ1NkQ3Mzg4NUZCN0FFRUE4REQzNjRGREZEOTQ1MgotOjEwNTY1MDAwNTEzQzJDMzJFMEUxQzJDQTA1ODg4NzI1RjY4QTYzQTA1NgotOjEwNTY2MDAwMDcyQTU3OEQxRTE2QzA3REZFMEE4NEYzNjc2NjVGMzZEMwotOjEwNTY3MDAwQzhFMzUzNkQwRkJBRTNFNTE3NUY4OEM1NEYxQkM3MEYyQgotOjEwNTY4MDAwQjVCQjRCNzRGOEQxRjAxMkZCRkVDOTNGNTdGRkZEMTFCQgotOjEwNTY5MDAwOTA1MzFCNUMwNkI5MTI1QkY2QzA1QjRFN0NCODI1NzE1QgotOjEwNTZBMDAwRkEzQzQ5RjU3NzAwRTFBNkJDNzgwNEU4N0FCNTAzRjM0MwotOjEwNTZCMDAwRTQxMkMzRUYyQTEyRTgwRDdFMDlFQzY3NkE2NzU5MURGMAotOjEwNTZDMDAwMjNFMEJCMDRFMTUwRERDNkU4RTA3MjcwOEI3RTk3RDMyNwotOjEwNTZEMDAwNDE1OUZDRjU4Qzc2Njg3NDUwNEI1NENBQjBDN0U1Q0I4MQotOjEwNTZFMDAwRDFDMUMzNDRCNUY2QjI4RTZFM0E2ODdCQTMyQzJGNEE2MwotOjEwNTZGMDAwMDdBMzFEQzFCMUY1QjRERjE3NjBGRkU0RjdDNEZGNzE2NAotOjEwNTcwMDAwNTk3NTVGMDdGNkNFNEExM0M2QkQ4RURCRDVGNEJCNTg3QwotOjEwNTcxMDAwN0QzOEM4RTdFM0VFRTBDNEVCNEFBMkY1RDlEQjA3Qjk3MAotOjEwNTcyMDAwRjVGNzNBOUU2QUE2NzA4ODAzQkZEMThFMDRGNDkzQTc1QQotOjEwNTczMDAwOTJDMjkxRkZFRkU4RTczMzczRkMzQ0QxQjFGNkIyMzI4RAotOjEwNTc0MDAwQzAyNzA5QzZGNzI3NkJBNTI2QkY0RDQ5Q0VFRTdEMkY5MgotOjEwNTc1MDAwRThEMUUzQ0VEQ0JGODc2OEVCMUE3QkUwNTYwNzZENkZCQwotOjEwNTc2MDAwNEM3RTA4RjVGQ0YxRTMwMkVBRTFBNTdGNUU5QzBGNzIzNgotOjEwNTc3MDAwQjg4N0ZENUIxNzc5RTJDNDIwRjQ1QjNFNzlDMjhDRjZGMgotOjEwNTc4MDAwMTQ4RTRCQThGRDAzN0EwMENGRDdFMDNFQTAzRkZBNTkxNAotOjEwNTc5MDAwMTJDNTczMUY4NENCN0Y0NzQ0RTNCQTVBRkM3NjU5NUQyOAotOjEwNTdBMDAwQzdBMzMwM0VCMUFBQzRBMzlERDc1N0EwNjRGNkQ4N0Y0MwotOjEwNTdCMDAwQzIzQzc0RkU3OUQ5MUNGMEMwQjkyMTU5MjAxNTQwRjdCQwotOjEwNTdDMDAwNjYyOUQwMENGOTg2NjY2RkRBNzA1NTA3RTc4NTBFOTY2NAotOjEwNTdEMDAwOTc2MzNCNzhCMDM5ODdCRTZGOUJGOTA3MEZGOEY5MkNCOAotOjEwNTdFMDAwRjQzQjUwNUEzM0E1RjM3QTdGQjkzOUFEOURERDc3OTRGOAotOjEwNTdGMDAwQTc3QjlFMEJFN0EyNjlEREUwNzdBMEYzRUQ2NURGRkNGOAotOjEwNTgwMDAwMUJBMUZCOUUzNUJDREY3OEFBNzZEMTE3ODA4RUQyQ0Q0NgotOjEwNTgxMDAwMUZCNUZDMTVBOTkxQjUyNzZCQ0Q4REFDOURGQjUxMTcxQwotOjEwNTgyMDAwNTQzMjNGRTlFQkQzOTIxMDdFREFCQUE2QkVCQTFDRUYyRgotOjEwNTgzMDAwNUI5QkZBNkEwNjlFNzM5QUVBQ0NGRjFDRTBGOTFCQzhEMAotOjEwNTg0MDAwRkIwMUJBNEY2NkZBMzk5NjJFMUVFNUYyRTdFRUNEQTJCRAotOjEwNTg1MDAwNkFBNkUzMUQzNDc3MUQ3MDAwNUZGQzU0QzA3REY1NURDMgotOjEwNTg2MDAwMUYxRTM0MDNDOUZGRTlGMDcxMzNEQzk3NzAxRkE0RUFFRgotOjEwNTg3MDAwRDBGNTRDMjM4QUNDOENFODEwQkUzRjlEQjRCQjU4QkRGQwotOjEwNTg4MDAwQkQwRkRDN0YxQTFEOEY2RTk5NjFCQzg1MkNGRTdDRDcwNQotOjEwNTg5MDAwODc4N0M3ODIxQUE1RTMyRDgzRjJCRTc3ODgwQ0UzNEY3MgotOjEwNThBMDAwREJBQjM0QjE2MzUxN0NCQzU3RTk3ODYyNzRCQzZFRjhGMQotOjEwNThCMDAwNDk1Njg0NDcxNDNFNTY4NDk3MDYxRkI4NUUwNERCQTNGRQotOjEwNThDMDAwRjA0NTdCNDU4MzZGMDNDMDhEQzI2RjZBRDI5NDlCQzkzQwotOjEwNThEMDAwQjBDNEZDMzJENTM5Rjg3Mzc2NUU4Q0NEMjcxNkJFNUYyNgotOjEwNThFMDAwNDMxM0U1QjdBNzFDRkUzREMwN0Y4RDBFRkZGM0MwM0ZGRAotOjEwNThGMDAwNzNBRDVERDk1MjJFOUUwNzdCMTE5RUNGMzcwNTA2QTQ0RQotOjEwNTkwMDAwMEZDNDczNjJGOTdEMjAwRkFEMjM3RTlDMzc5NjRGOEZCNQotOjEwNTkxMDAwMDJCRjVDMEQyNUU1MEI5ODA3M0ZCNzcyMkY1RkU3RUJFMQotOjEwNTkyMDAwM0YzQkU1QzJGMzI4RkIzRUNFODY3MjlFQTk3M0Y1OURGMAotOjEwNTkzMDAwQzA2RkZGNjY0MkZCRjNGQ0RFRkM1RUYzRUI4RTcyQkZEMgotOjEwNTk0MDAwQ0JCQjBFN0U5RTg4QUZGMzNFNkVDRkREQjdENzExODIwNAotOjEwNTk1MDAwN0IxMEVGQUIzNTc1RUZBRjgwQUVFRkFCNjVGOTI3NDQ0OQotOjEwNTk2MDAwRUExODc2QkJDMTlFNkNFNEYxOTA5RUUzQzA3RTIxNzY3RQotOjEwNTk3MDAwMUM2RDlEMDdCMkZCNUQwNUZCQ0JBNzQ3QzhCODhGRDg1MAotOjEwNTk4MDAwRkZDRUY5M0Y1NkQzQkEzRENCOEFGQjg0RDVDOTlDN0U2NgotOjEwNTk5MDAwQ0JEOEJFRjVFOTY0QkZBMzA4RkM1RjJCNTM3QzJBNUQxRQotOjEwNTlBMDAwRTdDQTM3NDhCQjQ4RTE3NDYwQzg0M0ExRjIxMkI4MTc5MAotOjEwNTlCMDAwNUE0NERGRDlEQUM4RDY2MDM5QkM1N0M4RUU5REYxNzBCOQotOjEwNTlDMDAwQkI3NDZEQzdGMTM2QTBDNzUzNDcyQzE4NzdGOEQyQzUwMgotOjEwNTlEMDAwQ0UxM0FFMzQ1NzY0ODMxREZGRjk2NjM5RUVGRDY3OUYyMQotOjEwNTlFMDAwQkEyNDlDRUY2NkExNTMwMDNBOUY0RTgyNTY5MDE3N0JEMwotOjEwNTlGMDAwM0IyNkY3ODVGOUI4N0RDNDAzRTQ3RjZBQTM0OTY0RjdDMQotOjEwNUEwMDAwQTM2OUZFOTZCMEM0RkNGREFBQzRFQTdFNUU3QTZDRkE3NQotOjEwNUExMDAwRkJDNjU2OEMxQjgzNzkxRTMzNUFERUMzQkM1QTc3MDlFQQotOjEwNUEyMDAwRjNEQkM1Q0UyM0M5QzlFNkVCRUE0OEMxN0M1MkQ3MThERgotOjEwNUEzMDAwMTFGM0IxNURCRTJFMDFERTFCRDA1MTJFRTNGQjQxQTE1RgotOjEwNUE0MDAwRDdGNzA3MkNGMThDMDdCOEMyRkIyMEU3MDc1Q0UxRkIxNgotOjEwNUE1MDAwMTYyN0NCRDM1QUM3RjdEOTlCQ0RCRUE2MzE3NDlDQ0RBMAotOjEwNUE2MDAwQUI5MzA1QzA4N0Q2NEY3MTMyQjk3MjZBOENFNjQ3MEE4QwotOjEwNUE3MDAwQTIxRjI5M0JDRjYzODM3QjJDQjJGREM4RENDNDU1MTIyNwotOjEwNUE4MDAwQzRGQkJFQjc0MDNGRTY2NzQ1Mzg2QzFFRjI2MjE4RTJDMQotOjEwNUE5MDAwRDgyQkMxQkYwMjc4MzYzMzdBNUFCOTVBNDBCRjJBODUwQgotOjEwNUFBMDAwNUYzRkQwMTM5RjNGNjZCOTA1RDYzMUEwNTlGMEMwREVFNQotOjEwNUFCMDAwOUQ5NjcxRTczREM1NjU2NTc0REVGMjM4RUUwQkMxNEQwQwotOjEwNUFDMDAwMEJFMzY2NkZGQzAwRTdFNTRBQjBERTdBMTdCQjI3RkYwMQotOjEwNUFEMDAwRjNDQkQwQzc1NzBFNzY2RjYyNzY2RDA3QkYxRjJGOEM0MgotOjEwNUFFMDAwRjdFMDA1QjU3QkJFRkMyNUVDN0UxM0M5QUZFOEYzNjM5OAotOjEwNUFGMDAwQTJGQ0IzOTREMzIxRjE0MzlDQURCMjU0MEU4MTFGNDE1QgotOjEwNUIwMDAwNkNERTNDMDVENjNEM0Q2ODIxMzdEMUY1QjUwODFEN0VEQwotOjEwNUIxMDAwRTAxNzc1ODRDOEVGNTNGMjFGMDUzOEFENTlENzE3RjM1NgotOjEwNUIyMDAwRjA5NjhCRkU2Q0QwQzNFQUZGOTEzMTRFNzdDMDdGN0UzQQotOjEwNUIzMDAwMDNEQzFGQkZBOTU0NDZCRTM4MDA3MEE3RjVBNzk3RTQ0MQotOjEwNUI0MDAwNkU4NjM4QTVBQkI2QkM2RDNBMUQyRkU0OTE1MUIyMzRDOAotOjEwNUI1MDAwOTQ5MEI3RjMyMTRFQjk0NEY0MDhCNDdGQjA0MkNCREY0MAotOjEwNUI2MDAwRjZFMDc5OUVFMUE2QUZDNjE3NDAxQzJGNDM0NDlGRDJCMgotOjEwNUI3MDAwMjk4MUREREJCMDZDNDlCOTA3RjBCQUNDOTMyNkU4Rjc5MAotOjEwNUI4MDAwMkY3NzcyM0EzODlBNTI3MUE3OTNDMkM3RkJDODdBMEYxRgotOjEwNUI5MDAwMzVFMzI4N0ZBNjVFMDU3RTQ0QjU1OTU2QjZCMzc4MjExNQotOjEwNUJBMDAwREVGNzkwQ0FGMTkyREEyMTg2QUJEQzU4NzdDRTRBODFEMwotOjEwNUJCMDAwRkI3NDk5QkZGNEQxOUIwM0NDQ0YwOUIxRDE5MUU4RTczNQotOjEwNUJDMDAwRTQ3RjVFQzQ2QjFBQUZBRDFDNkFDNzRBNkI3RDE1RjZFNQotOjEwNUJEMDAwODc3MUQyRTkzOEE5MjU2Mjc4MjQxRDc3NEJCMjdGMTNFQgotOjEwNUJFMDAwRkFFREM2NUExMTRFNDRFQTZDMDMzODg1QzZGNkMzQkNCQQotOjEwNUJGMDAwRjBGNUEzMDZCRjA3RTc1ODUyMEY3NTREMDYzRDFBQ0FDOAotOjEwNUMwMDAwQjJGRjY5MzNDOEE5NjVCMjAyN0M5RUJBRTRFNDNENzg2QwotOjEwNUMxMDAwRjk5QkVGMTcwRjQyOTlEQUY4RDFDMzIwQTc5MzNCRkYwNgotOjEwNUMyMDAwNTY4N0NGQzdDOTA2RkY2MkVBMjc1RjdFMEJFREE5MTUyRAotOjEwNUMzMDAwQjJDMTRGRjk0RDRBQzVDRjAxMkU5QjBBODM0MUJDMTcxMwotOjEwNUM0MDAwMTMzMDlBMUU1REM3RUVBNTFERTNFMEJFRTM1MzkzNDRGNwotOjEwNUM1MDAwREYxNkRFOEVFQjZBRjU4NDU2MzJCODk1ODA1RUQwRTBCMgotOjEwNUM2MDAwQjY1QzU0REFDM0IwQUU4OTU2QTQ4RjNDRDI4MUYyMkExNgotOjEwNUM3MDAwMDNBMkQ5MDNBMzc4NDlGRDY0QzU0MkM4RDc4ODlEQ0Y0NAotOjEwNUM4MDAwMUFBN0QwN0RGRjA2REMxMzA4Qjg4MkZDMTgzOTYzMEMxNAotOjEwNUM5MDAwOUU0M0RDNTNEQ0UxMDU3QjdFNzU4MkZCNzNERTc1QjFEMAotOjEwNUNBMDAwRjcyRDIyRjNCM0M2QjZCRkVENjJGNDAwMjJCMUFEMThGMgotOjEwNUNCMDAwNEI3RjExOTQ0RUEyMjY0MTk5NjlDNUZCRTZGNjg4Q0EyRQotOjEwNUNDMDAwN0YyMDlEQUYzNzI5ODAxRkU4NkZBNkY4REJGRkY2NjlCQwotOjEwNUNEMDAwRjQyRkVFMEY3RTgwRTVCM0FFMDJGQzFFNkQwRkE3RDM0RQotOjEwNUNFMDAwRjdENzk0QjBGQjhFRDc3ODE4OEQ1NDM3MzM3OTUxRURCMAotOjEwNUNGMDAwRURCNDQyRENBNEJBOTA3OEI2NzA3QTUzMzUzODgzQkZERAotOjEwNUQwMDAwOENFQkFCQ0FEQjE5NUNEMzBBMDlDNjdEQzExNzA0Rjc1QgotOjEwNUQxMDAwNERBNTQzM0YwQUJGQjRFNkE1MEIxMThGQTQ0MzFENDgxMAotOjEwNUQyMDAwRkJBRDgxNzEwMTNGOEQyQ0FGOUY5MDRFMkJGMjZGRDA1OAotOjEwNUQzMDAwODQ3MTRGQ0FFRkVGODI1RkFCQjJBNTJGQzZGREUxRjhDOQotOjEwNUQ0MDAwMzA4Qzk3QzJCRjlCQzJDN0RCNENDNzAxRkZFMUE5NjY3RAotOjEwNUQ1MDAwMTNEOTgyRjJBRDAzRUY2NzU3OTY1MDVBNDZGQUVDMkFGMAotOjEwNUQ2MDAwODNGMzlBNEE4OUM3QjM1MkEzMDM0RDhFNTFENjk4NDEwMwotOjEwNUQ3MDAwRjUwNUMwNkQ4NkFBMkUwNEZBM0I2RUY1QkMwREYzNzBENgotOjEwNUQ4MDAwQjQ1QTE0NThGRjhDRDY5NzE2ODNGREUyRjA3NjM2ODMwQQotOjEwNUQ5MDAwN0NBODJFNjVGMzRENjlBMUNGRDFDRTUxREU4NUZFRDUwRAotOjEwNURBMDAwMkQxNjg1N0Q4RkMzQUY4NEQzMTk4N0MzNEMzRUVGOTlFMQotOjEwNURCMDAwMUJEOUJDRUQ1OUExMjBEMDY3RjUxMjBBNTc2ODBCMzBFQQotOjEwNURDMDAwQkEwNzk3RTgyNTExRjlFQTEwQUNERkE1QTZFM0I4N0Q3QwotOjEwNUREMDAwQTZDNEYwNDUwQ0ZENjlFQkFBRTRFQkFBNUNDMkQ2NDU2QgotOjEwNURFMDAwMzgzRkQxNjk4NTYxRENDQTEyQjZDRTE5ODRCRDJGQzI5NQotOjEwNURGMDAwNzMzQUZFNENCRTlFNEFGNTQ1MkM2NzM2NUIwQ0UzNkY0QQotOjEwNUUwMDAwMkFEOEQ2MDFGM0M5Mjk5NDE1M0MzNzQyRDg3RDg3RDlDMQotOjEwNUUxMDAwN0M1REQ5OERFQzdCRDk4NTJGMjJCQzQ4QUQ2RUJFRTg2OAotOjEwNUUyMDAwNTdENUQ1Mjk1RjlEN0E4QjMyMTZCNTczODU2QzJCMTJBOQotOjEwNUUzMDAwRDNGMTlGQzkxOENGQzk2QjM1QUVFQkQ0OEFGQ0FENzBENgotOjEwNUU0MDAwMUVGQ0IzQzc2NDhDN0JFRjExN0Q0NzA3RTA3RTU0NTY4MAotOjEwNUU1MDAwOThGQ0YxN0QzMDAxRTRGNENDNDYxRkM4RjFERDY1MENGRgotOjEwNUU2MDAwRkVBNzZFMjUyMUEwODc0MTg3MkE1MjAwREU4MzBFMDVGQQotOjEwNUU3MDAwNzg1OTgzRjE3NDBBMTBBMTVCRUVEMUY5RDEyRDUzQjM5NwotOjEwNUU4MDAwMDBGMjMyMzJGMEI5NTkyMDA3NEFEOTM5OUYyQ0ZEQkNCMwotOjEwNUU5MDAwRTlGQzUyOUJEM0NCMjExRjJBQUQzNEE1NUNDNkFCNUQ3OAotOjEwNUVBMDAwNjNEQTBGM0QzMTU5ODRGNjgzNEYzQzA4REZDOTIwQkFDRAotOjEwNUVCMDAwRjVEMDc2RDkzRDkwOUQ2QjM5NDg1QkExNUZFREM5NDcyMAotOjEwNUVDMDAwMDAxRjJERkMxRUYyNDEzMEIzMTQyQzBGNDI5OTRBRjlFOQotOjEwNUVEMDAwN0I1NTBBQ0M1MzIyNjM3NEY3NTg2RTdGNkMyNDlFMDM2MwotOjEwNUVFMDAwQzc5NEE3NjIyQ0MzMjRDRTNEOTdCQUZFNDM3ODdGNTU1MgotOjEwNUVGMDAwODhEM0NGRTU1NjBDRkJGM0VEOEZERDM4MDRGNkYxNkI1QwotOjEwNUYwMDAwQzA0RTRDODI3M0JDOUVBRjIwNEY0N0Y1ODkwOEY3MzVEMQotOjEwNUYxMDAwRTZCMEI1OTBENjk3NTNCQjExRUM5N0I1MDUxRjg5QzA3NQotOjEwNUYyMDAwNzc2QkY2MTIxRkQwNDc2QUM1M0YyRDdBM0NERUU0NjJEQwotOjEwNUYzMDAwQkZDRjIzQzk2NDE1RjBGRjgxMjEyN0M3MDE5RTQyRkIxMwotOjEwNUY0MDAwQTlERDQ5RkI5N0ZGREVGOTg0MDNFQ0ExM0ZCMjNDOTg0MQotOjEwNUY1MDAwQ0Q2RkQ1QTBGRTdFMjg1QjhFN0IxRjJGQjk4QzlEMTg0MAotOjEwNUY2MDAwREIzRjY1RDA2NEY0RTcwRDY4NUQzNzBFRUVGN0FDMUVERAotOjEwNUY3MDAwMjdGOTZFQTJCREQzNUFDQkNBQzA4RTUxMkEyODc1RjUxNwotOjEwNUY4MDAwQTVGM0RFMzg3QzI5MzBBMTMyODFDNUNCOTQ3MUVDQjkwMAotOjEwNUY5MDAwMzI4Njk1QUJFQTBFM0QwQUZCRjZFMDRFQzk5NjQ3RTcxRQotOjEwNUZBMDAwM0I3NDA1QkI1NzZDNTVFMTc5NkI4MERBQTUyNTY1Q0Y0RAotOjEwNUZCMDAwNUI2RkE1Q0Y0Rjk0NTAyRDQ4OUY5RkI4RkVCQzBERTI1QwotOjEwNUZDMDAwM0I0Rjk3OTRBNzAyM0NGNzM2MUJFRDNBMDI5NzVERDEwMQotOjEwNUZEMDAwRkQ1MDkxMjVFODc3RDE3OUI1N0M0ODEwOUUyNjRCQjhDNQotOjEwNUZFMDAwQUQ5MkQ2NEQyRjM5QzFDMkU5QjFDRjU5RDFCMjc5MEE5QwotOjEwNUZGMDAwRDBFOThDMDIxOURERjZCMUVCRkQ4OEVCOTNFOUI1NURENAotOjEwNjAwMDAwRTNFMDdFRkQxQzk1MzBGRjdFRjA3MTE0Q0EzM0I5QzgwMQotOjEwNjAxMDAwQzg1MTNCNTBFOEI4NUFEOUZFMjQyOEY5REYwNEI5MUMwRQotOjEwNjAyMDAwMkMwQ0M4RjA4QTI2Q0Y1QTA2NTVFRTAwNzlGNjY3NkUxQQotOjEwNjAzMDAwRDc5MTlBNTk3OEJFMENGOURGMDRGNjUwNTc1OUJDN0RCOAotOjEwNjA0MDAwNTM4OUQzOEVGRDRGNkRCQ0VENjNGMDUzQ0ZBODY1RjYzOQotOjEwNjA1MDAwRkU4MDhENUYwOTg4MEY2QUY3NjVEMEYxMDc5NEUwNTVERgotOjEwNjA2MDAwODM2NEM2OTJBMEI1MDhGMDkzMjcxMjQ1ODFGOUI0MTM1MgotOjEwNjA3MDAwRDgyNzA0QTlGRUQxQzM0MTFCRjdCRkZCRkU0Mjk3MDVGOQotOjEwNjA4MDAwRjlCMDA0NkM2N0REN0E5QzdDM0REOTNFQkE5RTM4N0FDMwotOjEwNjA5MDAwQkE5ODdGRjdBNzRGN0RCNTdGMTRDMDdGMDlEQjIyMEQyQgotOjEwNjBBMDAwMDgxRTEzQUNCQTc5MEM1MEFGNkMxRUQ3QzA3ODYwQkYxNQotOjEwNjBCMDAwQkFEOEY5NTM1NzQ5Mjc5RTkzOEE5NUVGNjBDRTAzREZFQwotOjEwNjBDMDAwNkU3MjlDMUJDRUY2Rjc0Njc5REFBM0NFRTkyQUY2NzlGMgotOjEwNjBEMDAwNzY4Q0JDMkFCMkI0REY4Q0Y4RERDREVFQkQ4NjhDNTg1MAotOjEwNjBFMDAwNjgxNzg4QThCMDdCM0Y0M0RBRkRENDM1RDA2RkE4Q0JDMgotOjEwNjBGMDAwRTkwMTNBNjgxOUYyNTEzMUMwNjczNUI3MTc2NjE2MTJDRgotOjEwNjEwMDAwRENBRkNFQ0NFQzQwN0I2MTdBMjNCNzE3MjQ1RjEzMDg1OQotOjEwNjExMDAwNTlDN0M2NjRCMjUyNjczRkEwQTkwNDVCRTg0NjZFMkYxOAotOjEwNjEyMDAwNjhGQTlGRUJFRDZBNkY0NzMzRUE1NUIwMEY3NDdBQjVBMgotOjEwNjEzMDAwNTI2NTdBNzU4MDk3RTlGNUVBNjZGQTFEODUxM0YzNDg4QQotOjEwNjE0MDAwQkQ1REMyRjRCOEQyQ0FFRDA3QUU4NzUzRjk3N0QzOUFEMgotOjEwNjE1MDAwOTlCRTRBMDUzQkMyMEQ2OTEwMkFFQTY1OEM2MUE1NDdDNAotOjEwNjE2MDAwRUQ5NjNFODU0QzVGQTZCNkVDNDFCREQ2MEU4N0I2NDc5MAotOjEwNjE3MDAwODBEQzYwRkEzMkVCQkRDMzJBODBDOTRCMUZCNzUxMzlBRQotOjEwNjE4MDAwRkQyNDZGRjc3QUE4N0Q5NjEyQjVDRjk2OEIzQ0RFNDQzRQotOjEwNjE5MDAwOTg3RDg4MzlGRjc0OUU4RjQyN0Y5REREQjg4RENGNkZDQgotOjEwNjFBMDAwQ0ZDMTk0NUI0MEJFNkUwRkU2RTJGOTcyOEQ2RkQxRkJGQQotOjEwNjFCMDAwNDlFQkQ5MjUyQzdGMjVCQjk2QzVDOTVEQkVBQTFEMjZGNgotOjEwNjFDMDAwNUQxQzYyOTY4QkREM0IzNDRCQTNBQkRBQjAxN0M2MEQ3QQotOjEwNjFEMDAwQzJGQjI4QzdEOUZEM0YyQkUwQkUxRUEwMTdCRUJGQkEyOQotOjEwNjFFMDAwQ0VDOUZEMUE5QzdFMTJFOTEzNEQwRUI5ODhERjVENDhCOQotOjEwNjFGMDAwRTE3QjIyQjQwM0U1QjU0QUY3NEJCMEI2MTNDMTg2N0UwNgotOjEwNjIwMDAwRjcwM0JGMDcyNzk1QzBGQ0Q3OENGQTNCRTY3RjBDNDgwNQotOjEwNjIxMDAwQjA1RkZDNTREQjY3N0U0N0I5RUUxQTc3OThFRDQzM0JERAotOjEwNjIyMDAwQzRCOEU3N0IzMkREQ0NGRkQwMkUxMTA3QzBEMzE2NjQ5MwotOjEwNjIzMDAwRjdDOEQ5NEFFNUI4RkQ5M0RDQ0NDRTNFQ0RFMUI2NjZEMQotOjEwNjI0MDAwRDQwRTNDQTc5OTUwM0Y0QjQ0MzVDNUQxQTc5QUJFNkQ5QgotOjEwNjI1MDAwMDEzQzVGNDdGQkJCREU2RTUyNzE5RjFFQUEzMEExN0NFMgotOjEwNjI2MDAwMjVCOEVGMEM5MjRFREM0N0FBMDUzMkZBMEQ1QkNDNDEwMwotOjEwNjI3MDAwMkJFMDYzNkQwOUM3QUJDN0JBMTlDRUZCN0U2N0JDNTA3NAotOjEwNjI4MDAwNzgwMDlFNTdGOEM1OTA5MDAzNzgwRTc5OEE5ODVGMDczQQotOjEwNjI5MDAwRUY0MTM4NDVGN0VGRkE3OEM1MTBCN0M4RTFBNEUwMEYzMQotOjEwNjJBMDAwRjMwRDY4NjZGNEI1NjY5NDhDRjM1ODM5M0M3REIzMjlEOAotOjEwNjJCMDAwNDcyRjdGMDUyRTNGRDkzOUIxOTVBM0RFNDRGQUJBRDJENAotOjEwNjJDMDAwRjk1NUQ1M0VGN0Q0MDk1RDNDRjFFNDg2Njc3MjAxQ0VGRAotOjEwNjJEMDAwQkE3QjMwN0EzRDRGNTE1NUZCQjdENjZENzFFMjA0REQ4NAotOjEwNjJFMDAwRURCMDhGNzJDMjNFMzA3NDk3MjFBRUM5RjEzQkM2MkQxRQotOjEwNjJGMDAwMUFGQzZFMjA1RkNEQjhCOTA4RjUwM0ZGRDJFRUQxMjFBQwotOjEwNjMwMDAwMzdCQzQ3OTZCMEI4RUQ2QzFFQjczREJERUQzNjNDNTc3NwotOjEwNjMxMDAwNUU0NEM5Q0ExQzA3RUY1RkQ2MTlDRkRGN0ZCOUZEOTk2QwotOjEwNjMyMDAwN0VDQ0FGMTEzMkU0MDlDRkRFRjFDQTUwNDM3Q0Q4NEZBNgotOjEwNjMzMDAwOTRCNDkxRUMxRTYzRDREMzZGRkE1NDhCMjk3QTBGODFGNQotOjEwNjM0MDAwNzYzRkQ2OTVERUI3OTU0MkNEMzBEQzc3OTEwQTJDRDNENwotOjEwNjM1MDAwNDkwRDk2NUUxMkM0QjIxRjY5NjdFNzY2NjE5RjNCMTBFNAotOjEwNjM2MDAwRjQ0MjE3OTYwQUYxODg0NDI3Rjc3Mzg5MEZFQjc5QTQ1MgotOjEwNjM3MDAwMDI0QjA5RjA5NjFBOEQ0QjQ4M0JBRDk4QkYwMUYxMEJDQgotOjEwNjM4MDAwRTBGQjQ0RTdDRTdDRUVDQTg1NkVFNEVGOUFBQkQ5RUYzMgotOjEwNjM5MDAwMThCMTc4QzU2NEI3RkYwMTM3RTIyMThDRjI3QjNBMTc1OAotOjEwNjNBMDAwRTU4NzdFMzVCNDFEQ0UxRjNEQjA5QTlEN0JEMUU0M0I4MQotOjEwNjNCMDAwRUU2RkU4Nzc5RTRCNjFGQTQwNUQyRkEwMUNBQjc3NENFNwotOjEwNjNDMDAwRkMyMUMyQjNDNTdDNDYxRjZGMjA1NjZCMUVGQzNFODg2NQotOjEwNjNEMDAwMzZFRTc0RUU2Nzk4Q0VGNTIwQjhCQkQ5Rjk0MTFGOUUxMgotOjEwNjNFMDAwNEY5QTBFRkUwNjVEM0JFOTZFNjdGN0Q5NjhFMzg4OEUyQgotOjEwNjNGMDAwRUIwN0Y3MTZFRkQzQkQ4RkY5RDE5NTMxRkI4MENCRUFEMAotOjEwNjQwMDAwRUY5OEZBOENEOEY3QkZBMTEzNEE4RkZBRTM5RUZCQTE0RAotOjEwNjQxMDAwOTI4REY0Q0FGNTM3MjUyODA1REY2QkI2MUNDM0ZENThFRAotOjEwNjQyMDAwNzBBQzVGMEY5NzY3MzkxRjY4N0E2NTQ2NENCRTQ3NkM0MgotOjEwNjQzMDAwMzk0M0UyRkMxMTMzMEVENTgwQzk3MEFFMTdFRjk2RDAwOAotOjEwNjQ0MDAwRjFCNzc2M0ZBOUY2QkI1QUIzRkQwMTM5ODNCREU2MDUyNgotOjEwNjQ1MDAwM0M3QUY4QkM4MzY0NjM3OTA2MkRCRjgwQkFDRUJGN0ZENwotOjEwNjQ2MDAwMzgyOUYwOTI1QkI3MUZGMUY4NkI0NEZEQkQzNzczMzlFMwotOjEwNjQ3MDAwM0Y4RTM1QjU5NDgxOUMzQjE1MjAzRUQ4NDdDQzI2MzVDMAotOjEwNjQ4MDAwRUUxRjgwM0ZGRkIwMDlFNTVDN0YzQTZGQjkxOEVGMUQ0MgotOjEwNjQ5MDAwNTNDNTE0QUNBQkYwN0IyRjY3RUJEODM5QTE5M0ZDN0VDRQotOjEwNjRBMDAwOUExREZDN0U5QUJGRjA3Qjg1OEJEQTE2NEYwNDNBMzgzMgotOjEwNjRCMDAwQ0RFRkE1MjlEOEJCQTIwMkZDM0U0NUVEOEU2OUEwRjcyMQotOjEwNjRDMDAwOEJEQTQ3NTc0MzdCRDE0RTBCRkIxRDFGMkUyN0I0NzkyOAotOjEwNjREMDAwQzFCOTZDM0JGRDRFMjZGRDlFMzUwNUU0MDk0MUJEN0JFRgotOjEwNjRFMDAwQjZDNTFFODJERkZGMzlEQjZFNjJGN0FBMTY4QTc4OUY3NwotOjEwNjRGMDAwMDNEQzhCNjZFMkYzNEI0QTgxRUZGREQ3QkQ2MDhGOUNENgotOjEwNjUwMDAwRTZGMkU0OEMzQjk5RTE0QjUyMDUzNTBERDI1Mjg4MEZFRgotOjEwNjUxMDAwRUM5QTc1OEVGOTc4MEVCMkNBMTlEQUYxNDQxQUU0ODc0QQotOjEwNjUyMDAwNUI3REY1RjRGQkZCRjdCQzk0MERDRjFGNzdDQ0M3RjI3NgotOjEwNjUzMDAwMkYxQjNFQ0UwNkI5NzU3NkRGQzc3MjNDQkE5RDI3ODUwNAotOjEwNjU0MDAwNjVGMDRGQ0REOTJCODgxMDNGMjk2QjlGMjY0MzdDQTQ0MwotOjEwNjU1MDAwNkFENzdFRjQyQkNGRjMwNEIwN0Q2RURCMUVBQzhGRDlFRgotOjEwNjU2MDAwRjUxRUM2NEYwNjI2MjkzOEFGQjMxOTAxRjRGM0U2QjU3OAotOjEwNjU3MDAwNTlDMkYwN0IxQ0JCNzM4M0Y3Qzc4RERCMjczMTNEQjM1QQotOjEwNjU4MDAwQ0VGMTFBOEVGRkI4RTNCNTM3MTEyRTFCMkM3OEZFNjNCRgotOjEwNjU5MDAwRkY4NkRGRTNCODY3RjZCREM0RTc0QjMwNUZGMEFDQUQxNAotOjEwNjVBMDAwRkRFOENGNDE3RkVERTFFNzMxQUQxRDZFQkQzRjU4NEFCQgotOjEwNjVCMDAwMTIwQ0YyRjVBQzhCQzdCRDMyMkZEMzhGRTcwQjEyNjdFRAotOjEwNjVDMDAwODc5QkM5QTUwRTM3QzRDREFBREExOTFDRkU2MjBFQ0I3MwotOjEwNjVEMDAwNjA0N0NFNjkxNzE0RjgzREJEQjI1RDlCRjEzQ0UwOUM2RAotOjEwNjVFMDAwQkQ1NjNDMkYzMTA3RTAwMTcwQTNGMDQyQjhCNEVEQzdBRgotOjEwNjVGMDAwRjlFNzAyNUNGQUMwM0EzRUMwN0NGQ0JDQkQxNDJFQzM3NQotOjEwNjYwMDAwQTJFQjlFRTMwQzIwQkY2QUVCQTU3MDYwRUJERTdEMzk0OAotOjEwNjYxMDAwM0MwNThDNzg2QTdCNEYwNkJGQ0NEQ0JEMDJDMjZGRUVCNgotOjEwNjYyMDAwMkUzNjhGQUFCRDZDNUU2Mzc2NEQ0M0ZDOUZEOTQ3MTQwRQotOjEwNjYzMDAwRjBCNzlDRENGM0YxNjk1OENGRDk3RDU2QkNDRjU3OUI5RQotOjEwNjY0MDAwMTdBNTUzRTIyRTA2RkU2MTc0NEFGNjMyQjlBQUQ5RERDNwotOjEwNjY1MDAwRjM0MkU5RjhCQjAzRERFREJCRDhFRjkyMDJDODZDOTRCRQotOjEwNjY2MDAwNUU4QkY2NEVDMkI4NjAwOTEwMkZGMEJGQTc3RDI4RkJFNQotOjEwNjY3MDAwN0RDMTYwMzZDMDc1RjdFODcwMzZDQ0ZCOENGNkZCNDgwMAotOjEwNjY4MDAwNTIzMDFCRjBFMjczMDc0QTkyNzRGOEY4RjJEODRCQTgyNAotOjEwNjY5MDAwMTcwQkM0OUE0RjFGMDEzRTdFNUU0NEJCNjhGMTI3RUI4NwotOjEwNjZBMDAwMENGN0FEREMwMDNGNDgzNTAyRTBGNkFFMUJFMUQ2N0RDRAotOjEwNjZCMDAwOEY0QjkwRTU0QjkxMDBGMjYzMTVFN0M3QjM5QkU5QkVBMgotOjEwNjZDMDAwOTNBRUZGQ0JCNjE3QjBGRDZDODYzMUJGRUEyRjZEQUYyRQotOjEwNjZEMDAwQTcwMERDMkFGOTc5MEMxMkJBMERFNTExODU0QkIzMzUwOAotOjEwNjZFMDAwOEU5RUVGM0VENzE2NjJFNzE1Q0YwOUZDNUVDREE3MzQyQwotOjEwNjZGMDAwQjhENUM4OTMwRDcxM0UyNjBGMzMzN0U2MUNDNDdENDZDRQotOjEwNjcwMDAwMjhGRTM5Qzc1ODNCMjlGNkJFRDQ0NEY5MDBDN0I5M0MyNgotOjEwNjcxMDAwM0JDMUVGM0ZEMEY0RUU2NDc3NjA1QTUyOUZDNEU3QkRBRgotOjEwNjcyMDAwMkI1N0NEQ0IwNjc4NTdDMkQ5NDhCQzA3NzVGRjRERTAzMwotOjEwNjczMDAwQUZDMDczNDNFQzlFRDQzMEMwRTdBNDc2MEYyQTc5RTk0QQotOjEwNjc0MDAwMjZDODMzM0Q5OUNDRUFCNTQ5MURDQkMxQUUzREE5REQ4NAotOjEwNjc1MDAwQUJBQUJFQzFERUNGNjFFREFERDA0RUZCRkZDQTVENTEyRAotOjEwNjc2MDAwOTNDNEVDN0I4MUZEQkU4RjM5MTk3RUE3NDFEMzFCODk3MQotOjEwNjc3MDAwRTE2MEZDOUQ4NjY3RTg1QTAxMkU3NEJDOUZFMzc4MTJBNQotOjEwNjc4MDAwMURBRkU4RkI4RkE3QzlFOUVGM0Q4RUY1N0Y3NjFDNEQ2NQotOjEwNjc5MDAwN0YwMTdGNDJFQTIzRjFGOTg2RkU0RkMwRUZCRkZCM0U0NwotOjEwNjdBMDAwMDlDRTM0RjBENUM1MEQwMzlCMjA4RTc2ODFERjIzNjM5RgotOjEwNjdCMDAwNjk1OTRBNDA5RkNGNkM1RDE3RjdGN0RGQkFFQjNDMkY2MgotOjEwNjdDMDAwNDcxRTQ4Rjk0REM3RDc4NzkyOTg1RDdFODhDQjY5RjhGOAotOjEwNjdEMDAwODNGODk2NzZDRjI0RkNCNUE0NjNFQTEyRUU5RkYzRjkxMgotOjEwNjdFMDAwM0RFNjA1MjQ4OEY2RTk1MEQyOEU2NTIxRTlDMDcyMTg4RAotOjEwNjdGMDAwRTlDMjEyQzNDQzAzQzE1NUVBMzNGMUZCNjg0N0MyRTJEOAotOjEwNjgwMDAwRTc1QTAzNEZEQjQ0Q0MzQjc4MDNFNDEwREM0QjJCOTg3NgotOjEwNjgxMDAwQzA5RTlDN0YxRENDRkZFRDI0MEY4NzU3RDhGMDdCMkJBQgotOjEwNjgyMDAwNDRGRjdCMTgwQUQ4ODMxM0JDQkREOTgzQzQyMzlERTlEOAotOjEwNjgzMDAwQ0U3QkM5QzU3QjZEREY0QkMyRjUyNUZBMURCNTg1MzExMQotOjEwNjg0MDAwRjdERUIwNzNFMTFBMUNFNjkxNzZDQzIzNzk2M0UzMDM5QgotOjEwNjg1MDAwNkYwRkExRjBCRjdGOTcwQkVERTRDMTFCMUIxNzgyM0NBQwotOjEwNjg2MDAwQkY5Rjc0QTRDMzM5RTFDMUZDMUUxMUQyNjZGQ0ZEQTYxMgotOjEwNjg3MDAwMjE2RDE2RTNFRjA4QzdGQzVFQ0YxQ0I4ODcwNENGRUY4RAotOjEwNjg4MDAwMTk5RjZCRTc3MEYxMUVDODM4RjkxOEIxRTc3OEZGOUFDNQotOjEwNjg5MDAwMTRGRkRFMTc1MjE4RkZGNzUwNjJDRkYxRUU2QTE3MzE3RQotOjEwNjhBMDAwM0ZFQTAxQzhCQkQyRUQyRjg2NkNBQkIxMThFOTRCRjlCQQotOjEwNjhCMDAwQjczQ0IzQUUyRUY4OTgzRkMyNjVGNzZGMTc3QTdFRTcwNAotOjEwNjhDMDAwRkYwMjBGMjE5NEU2MDA4MDAwMDAwMDAwMUY4QjA4MDBFQgotOjEwNjhEMDAwMDAwMDAwMDAwMDBCREQ3RDBCNzg1NEQ1QjVGMDNFMzM5MQotOjEwNjhFMDAwNjc5RTk5ODQ5OTY0OTI0Q0RFMTMxRTIxMjhFMDA0NDMyQwotOjEwNjhGMDAwOEM2OEVCNDk4ODE4MTFFREYwQTg0NURCRTIwNDA0MDIyRQotOjEwNjkwMDAwMjQ5OTQwRDFFMjJEMkQxMzEyMjAyMDZBRDA4ODQwMDkwRAotOjEwNjkxMDAwMEVGODI4RDY0NzI3QkRBODg4ODEzQjIwMjI1QUVEMERDNgotOjEwNjkyMDAwRDVCNkQ0NUEzQTIwNTU0NDg0RjE0NUI5QkRGNTdBRDc0NQotOjEwNjkzMDAwNUE3QkVGQ0M4M0E0NjBBRkRGQkRGRkY3QTc5RjNERUM5MAotOjEwNjk0MDAwQjNERjZCQUZGNzVBRkJDQ0U1MEU4NUIxNENDNjlFNTY1NAotOjEwNjk1MDAwOTREQkJDMjMxOUZCMTJGRkFFODkzRDZGQjFFQjE4MUIxMgotOjEwNjk2MDAwQ0JFMEFGOEQ0RDJDNjdBQ0I1NDFCNUFGODE1MjZCRDA0QwotOjEwNjk3MDAwQUFFOTlERjBCNEVCODI0QTMxNjM3OUE5RDVFNkY5NTBEMgotOjEwNjk4MDAwNjYwRTlEN0Q5ODlCQjEwOUZBQUIwRkJBQTFCREIxNTFCRQotOjEwNjk5MDAwQkREQzA0RTVGRERCRTZGNzFBQjBCRjRCNjUyNjk4MzI5NwotOjEwNjlBMDAwQ0YwMUUzNDI5OUU1RTg4MkMzQTBEQzY2RkZBNTYzMTY0OAotOjEwNjlCMDAwQ0M1RjYyODNGNzMwNEU4MTlEMDVERDMwRUVERUFENzczMgotOjEwNjlDMDAwRUFCMERDREFDQzU4MzZDRUEzRjg3QURERDQ0RjY1OEY0NgotOjEwNjlEMDAwRTFCMjk4MzZBOTJDOEJCMTIyRkMyN0NDQTNCMkI1MUYwQgotOjEwNjlFMDAwRUJEMzE4QUI2OTNDNkU4OUQ4RTA3REE0NkUxMjFCQ0Q0OQotOjEwNjlGMDAwNTg5NUJEOThGNkE5QkU3M0ZEMDc1OERFQjJFNDk4QzM1QQotOjEwNkEwMDAwMDdGM0JEQkE3NUU1NkYyNkMwNzg4NjIwQUMwQjg2MjhFMwotOjEwNkExMDAwRkRBMkY1RUQwOTMwNUY3NEFCOTE2RDYzMzEzODE0MkUzMgotOjEwNkEyMDAwNTU4RjQ1Q0MzNDIxRkIxMkZFQ0I1RjlDNTgzNjMyMjg2MwotOjEwNkEzMDAwOTc4QTcyMzFBRTIzQUUxRUNBOTc4QkY5MTk5QkNFQzJDQwotOjEwNkE0MDAwNTk1ODJGRDZFQkQ0MTg4Mzc1MzJCQkNERjlERUE1OENGRgotOjEwNkE1MDAwNUQ2MzU3RDg5NzgzNjNFNUIxQTJCQ0RERDA1MTZEODVFNgotOjEwNkE2MDAwNzU2RUZGOTNFMjY5ODFFQTdENUJFNzE0RTFGRUNFQkVCRAotOjEwNkE3MDAwRTAyQkIyQzMzRTk2OThEMzQ2QjM0MUU3OUY5RkMxRUU0OQotOjEwNkE4MDAwMTZFNzE3QjBFODVDRjgwQzVCOTgyQkQ2N0VDNEEzQ0Q1NAotOjEwNkE5MDAwMjYxRjhDRDNCNjhDNzk4RTBGNjNDQzFDREM2RkJEMTQ5MwotOjEwNkFBMDAwQ0ZGMUEwQzEwMzQ1QjY0MjYxRDM0MzUwQUZEQTk4MTY4NwotOjEwNkFCMDAwODI3OTJFMTdGODkyRkM1Q0IxQ0NGREFCQTE4NkQ4QkNENAotOjEwNkFDMDAwMkJCRTk4M0ExRENGMzc5QTZBRDVCNjI5RTdBRjRCRjY1OQotOjEwNkFEMDAwNTNFREVFMDA5RUFGMjE5Rjc5NTI2MDNFODNCMzM3RDdDRQotOjEwNkFFMDAwMEVGRDJFN0RERUU4QjEwMUM4MjZGQzYyRTRBMDA4Q0NENAotOjEwNkFGMDAwN0JFOTRCQjczMDc3MkE4NzE3QUU1NzVENjJGNDFDQ0YxRQotOjEwNkIwMDAwNjBDQ0I0QzRFOTUxMkZDNzc2MzZDMkM3NEY2Q0M2QTA1QgotOjEwNkIxMDAwMDlFMUJGRTRFRTBFQUM2RkRENUFFMTcyQzdFMUY1Q0FFMAotOjEwNkIyMDAwNjU3NjhGMEFFQkRDQkNDQ0VDNTE2MTgzMkJDNUZFOTIwMQotOjEwNkIzMDAwRDc1N0UwRDA3OTgzRDBDRkE4NjMzRUFDNUYwNEU3ODAxRAotOjEwNkI0MDAwNzA1QzY0NEZBMUU3NDI1MUVFNTIwMzUzNzBGRDVEODBDQgotOjEwNkI1MDAwM0YyRDg4QUY4QjM5RkUyRUNBMzEwNzExQ0YxN0JEM0FCMgotOjEwNkI2MDAwMjQ5QkY1NDM1N0YyRjlGODMyOTc2NzI4QUM2M0YzRTJCOAotOjEwNkI3MDAwOTkyRTA2NURBQjE2RUVCNzVDMDdGQjVGOTQ2QUI2MjNGMQotOjEwNkI4MDAwM0VFQUQzNEExRUJBMUFGMUZEMzUwMzQzQkE2QTREQUQ0NwotOjEwNkI5MDAwNzBDRjhBMUI0RjlGNTZFOTQyNzhFODc1ODE1QzY2NjcyMwotOjEwNkJBMDAwNkM5NTdENDZBRDlBODNGODEyRDhDNDNDOENEREQ3NzFDNAotOjEwNkJCMDAwMkQyRkE3MDY3MjE1QTg3RkE4RTM3QTVFQ0UwQzZDNTIyMwotOjEwNkJDMDAwQTBGRUUxOEUxQjc5QjkyMDkwQUI4M0YyQ0YzQTI2RjM3OQotOjEwNkJEMDAwRjJCMEMwMjYyQ0ZGQTJFM0RCQkMzQzBBRDY5MENCRDg5NwotOjEwNkJFMDAwRjMxREI3RDQwNjYwRkU1NjgzNjdCQTA3RTY3RDA2RDY2NgotOjEwNkJGMDAwM0YxMkQ2MUYxMkNGMTdFQ0ZDNUM2NUZEMkZGMTNEQzA5NAotOjEwNkMwMDAwN0I4Nzc4MjZENzNGMjdGQUVEMUNBMDdFOTdBOEVGMTkzRgotOjEwNkMxMDAwNjBGQzNEQTI1Rjc4ODBGRUZCNDRCRkZEMDNGNDNGMjA5MwotOjEwNkMyMDAwRkExRDFDQTBGRTM1NTFGRkZBMDBFM0ZGNUFGNEVCMUREQwotOjEwNkMzMDAwQTBGRjZGNDRCRkI3MDZFOEZGM0JEMUVGRjAwMEY1NkY1MAotOjEwNkM0MDAwOEJGQTc3OTJDNjNGMjJEQTQ3QzRGQkZDRDRGNkI3MDMyRgotOjEwNkM1MDAwODA3N0Y5QzBCN0YwQUYzNEI1M0QxREYxNkU3MzczMzk2RAotOjEwNkM2MDAwRTE3RkVCNThDMEYzOTEzMTdDQ0Y1Nzk4MTdDQkEzMUQzMAotOjEwNkM3MDAwMkE4RDM3MUFGOTMxM0NERjE0RTM1NzJEMUM3QTFGRTJCNQotOjEwNkM4MDAwRERBMjM3RjQxRUM0QzM1NkM1NzNEODA3RTMwNzE2RUE1RQotOjEwNkM5MDAwM0NDODc3MTdCREFBRTc3OEJFNTAwREIyMzhGQTdFMzNFQwotOjEwNkNBMDAwNjlGRDVCQzRGQURBQzQ3QTdGNjUxRjRDNzQ1M0I0QzRCRgotOjEwNkNCMDAwRTU5OTI0RjkyNUQyQkQzREIxNkMwNjdBRDI2MEZFMzY0NQotOjEwNkNDMDAwMjc5NzJGQTUwQkFCQ0RDMzUxN0U4MDdDNDFCRUI5QzJBNwotOjEwNkNEMDAwNjYwQzlCNjBGRTE1NzY5NUVBREI5Q0Q1NzZBQzBGRDhFQQotOjEwNkNFMDAwNTU5MjNGMkI5Q0Q1RTY1OUM4NTc2REMwRUMyQTYwM0VBMwotOjEwNkNGMDAwM0IxRkJCQ0RBRUQ2MDY5MTdGMzg2QUE4N0VDMjJGMjYzOQotOjEwNkQwMDAwRDk5MThGQjZCMUE4QTMwQUY3QjcxNEU0MEFGNERGREI3MAotOjEwNkQxMDAwNUM0REVGOEIxQzlGMzk5MDNGMUY0QUU3RkJEQTlGN0E0RgotOjEwNkQyMDAwQzA1MjBDRURENDNCNzQyNDJGNEFFQzJBQzlCMUMxNEI5QwotOjEwNkQzMDAwNzU0MTM3MzREOTZGNUZBNEMzRjIyMzZENUM1RUMxNUZDOAotOjEwNkQ0MDAwNkExOUNDM0Y5NDRGQ0ZCNkRGNTlGMTVBMjlDQUIzN0JBOQotOjEwNkQ1MDAwNTQ4RkRCQ0RERkE5NzFGMjYwMjhDQUFCMzQ5QzM3M0Q3QwotOjEwNkQ2MDAwNDE1RTc1OTUzMzBEQzcwREI4Q0NDMUM3NjBEQ0ExMkE1MwotOjEwNkQ3MDAwNzM2NUE0QzdFMDVFRTREMDczRjlBMjlGRTQ0MUI5MzYxRAotOjEwNkQ4MDAwQTQyMzUxM0UxNUI3QzdDOTI3ODZGMjMyNTEzRTI1Q0IwMQotOjEwNkQ5MDAwQUI4MjY2RTA4RjcxRkQ0RDJFN0I0MkQ5RTI0ODI1RjkyQQotOjEwNkRBMDAwMDQzQ0M2RjMyNTRDQkRBODdCRDE3NTU2MTZFM0Q3Qzk2NAotOjEwNkRCMDAwRjJBODU1QzgwN0M5Nzc1QkJGQjgzQzQxM0U0OEJFOUNBNgotOjEwNkRDMDAwMkMxRjJFQ0M1RkRGQkM3RTM4RTEyMTcwMkJGNzg1RjlCQwotOjEwNkREMDAwRUM5Qjg4MDc4MDdGMDY5RjQyRjI4M0E5M0U5NzM3RjU5OAotOjEwNkRFMDAwQzJGMDMyMThCQzc2QkJFREMyNzAzMzY0QkU0NTdBODUwMgotOjEwNkRGMDAwQzFBN0QyRjhFN0M5OTUwQkMwNTVCNjMzOUExRkU5M0EzNwotOjEwNkUwMDAwMEU3MkVEQjM3NzdFNThDQTgwNjQ1NjAyNkNFOEZDMzM4QwotOjEwNkUxMDAwNzVDMUM3NjBERkY5NEI5RUVDQzJGMUYzMEU1OERCMTA3MQotOjEwNkUyMDAwQ0U0NkQ3QUNBRTM2REM0RkM3NDM4QzAxM0VFOUNEMUMxNQotOjEwNkUzMDAwOUY4QzM5RDU3NkVDQUZFQTM0NTdGQTEwMjgzRkYxQkI3NgotOjEwNkU0MDAwNUIxNUMwMjc3RDQ2QjM4N0MxQjkxRDdDRTZCNUY0MUIzMQotOjEwNkU1MDAwMTA3RTZGMTg4OENFNEQzQUFGOUQwREExRTUxMEJFQURFNgotOjEwNkU2MDAwMkFCMDZFNUQ0Mzc4RUMzMzIzOUNGMkI3OUI0OTBFQjA5OQotOjEwNkU3MDAwQzBBM0FCMzU0MEVBNTYzODBFMzYwRUVCQTdBRkQ2NjA0RQotOjEwNkU4MDAwREZEQjk1QkVGMkY1NTgwRTA1OERCQzNEQjA2OEZDQkY0QQotOjEwNkU5MDAwNkU5RDIyRUE5OUE2QkE0OEVGMTRGNUJGQUNBREI5MUFCNwotOjEwNkVBMDAwREFBQkY2NEI1NTkwM0I4QkQ2M0REQjZFMjhDMDdBOUQxNgotOjEwNkVCMDAwRUNBRkIxNEFEODJGQ0UyN0NBMkE5Q0NGOTNGQjQ1N0Q5MQotOjEwNkVDMDAwRTBBNUY2MUEyMEEyNkVBMzlDOUYwNUIwN0RCNzRFQzcyMQotOjEwNkVEMDAwQ0I4MTlFNzYxQ0ZGRTk2QUQxM0ZGMEY4NkEyRDlGRDZFMAotOjEwNkVFMDAwNzM4M0RFMDE0NUM3MkJFREI2MkI2M0VCNUQ5N0ZFNDY0MgotOjEwNkVGMDAwN0IwQkVDRUYyMzc3MjQwREI2QzExQUI3MUVDRjQyRjlGNgotOjEwNkYwMDAwQkM2QTdBQjMxN0UxODY4OEVGMDU5OTM4NDhFRjI2M0NDQQotOjEwNkYxMDAwRUQzQkI3MUQ5MzAzNzk1MDdCRTZDMERGRDI0NjQyOTUyNwotOjEwNkYyMDAwNUYxRjM5OTAwMkYwNkJEQ0Q5NkMzNjQwN0Y5M0MxMUIzOAotOjEwNkYzMDAwQzgyQjhFRjU2QkRDNTE0N0ZBOENCRkE3OEM5RUZERjRGNQotOjEwNkY0MDAwM0JBODBFRkVBN0ZBOTk4RDE3MzFERjQ3RTFERjM0M0RFQwotOjEwNkY1MDAwMDU1NThERkFFNjc2OUI5RURBMzM3RUZFRkRFRjRGRjYwMQotOjEwNkY2MDAwRkZFOEE5REZEQzhDRjM5RDc2NDdCMjI2NDJFQjU1NjE0MgotOjEwNkY3MDAwODA0QjNGRkQ2NEZCQTY5RDkzRTk3OTM4NDVCQkNGMDE2QgotOjEwNkY4MDAwRUZFNzAyRUYyMjdFQTUzNjdCQjA3REM4REM2MUY3MDAxQgotOjEwNkY5MDAwQTAyRDg2MEUyRkNBMEQwMDdENTA1NzE5N0JERUVGMThFRAotOjEwNkZBMDAwNEFFRDkzREYyN0QzNTdDOENDMzIyNjIxMUY2RjUwNDlCMwotOjEwNkZCMDAwNEU4NUNDODE5NEQxNTA1RTBCNzY0ODBCMkM2OTc5RDlFMwotOjEwNkZDMDAwRUZDNjhDQzRGMkIzMzY4Njc2NDk2QkMzN0VENzQ4QTQyRAotOjEwNkZEMDAwMkI4RjkxQTFCRUJCRjZDQTUwMEVEMjc5NUJBMzcxRkE3QQotOjEwNkZFMDAwQTM4OEJGRTE0NUFFRDk3MUZBRDZCQTc0MDNBRDYzRjU5MwotOjEwNkZGMDAwQ0I0MDc3OTdDMUQzMTA3MjI4RDg3RjE4QzgwRDA1RjlGOAotOjEwNzAwMDAwQTJDRjhDNzY4RTI1Mjc5RDA1OEFCMTlENkQyREQyRTc2NgotOjEwNzAxMDAwNkE4M0FGQjYxQURCRTVFODQ4QkU1ODg2NERBQkFEODY0RAotOjEwNzAyMDAwNzVCODMyNzU4QTlFRDY1MTczNzgwRUNBMzdCQjExMjU1MgotOjEwNzAzMDAwMjgzQjkyM0U3MzI3QzJFOTQ5RDVEMzhDNzRGOEE0Q0Q3RQotOjEwNzA0MDAwNjYwRjQwMDVGMDQ4MERGOTlGM0FDQzE5QzRCMjQ5Q0ZGQwotOjEwNzA1MDAwOUE1MThFRTc5NTgxM0M4RkQzNjM4RjA4RkU3OUM0NjE4NgotOjEwNzA2MDAwMjQ3RUI3RDYxMjlBNUMwNUUzNTgxN0U5RUMwMTk4NkZCNQotOjEwNzA3MDAwNzVFM0ZBREUwOTMwQ0Y0RjFCOUYzQkQ0MDJFRkQ3NjQ5NAotOjEwNzA4MDAwQTkwQ0Q3NjE3M0FBNjEyM0M4MUZDMzhEQjA0NjU4RjdGNgotOjEwNzA5MDAwRDMyRDVFM0JGMkQ3NjhBNkNBQjY0MUJENzVBODkxQjk5QgotOjEwNzBBMDAwRTNGODk1NkQyNDk0RTNGODY0ODY1M0Q1MkNEMEZGRUY3NAotOjEwNzBCMDAwRTlCRTdGNzdDMEJDOTdCRkYxOTYxOUZCQkJDNkVBNzRFNwotOjEwNzBDMDAwNDgzNjIxOTU5RjczNUE3OUUyMzhGNkFCMTNDNzQ5QUYxQQotOjEwNzBEMDAwNDlBQzc3NEU0QUFDQ0Y5QTk2NThFRkZBNUU2MjM5RjdEMAotOjEwNzBFMDAwRjZDNEYyNzQ4OTZGQzA3MzZDMjA4RkFEQkM4QTU5MjNDQgotOjEwNzBGMDAwMUYyRjQzNzkwQkYwRjkwM0MyREY1QUEyRjMyMDdDMkMzNwotOjEwNzEwMDAwOEQ4RjlFOTgwM0Y1NzlDODRGRDAxRTFBQ0Q0OEVFRUVBQwotOjEwNzExMDAwMkJGQzE3MzdFQTA1QTZGNDY2Qjc2M0U0RjlGMEM4MkIzMQotOjEwNzEyMDAwMzBERjgwRTc2NTFCQUFEQTE5QjRCN0JERjNDMTE3MzhBMQotOjEwNzEzMDAwQkU4REM1QjUyQjQ2Rjg2ODUxNDcyNjJGQkI2MDNEQTlDQgotOjEwNzE0MDAwRjgwRjM3QzJCQkY5Q0YzRjQ2Qjk3ODQ4RUY0MTc4RTcyRgotOjEwNzE1MDAwMzVBQTM0RkYzREQzREM0MTNERDcyNzVDQThDRkE0ODlCNQotOjEwNzE2MDAwRjY2OUU2QjVCRDdBRTBFNzY5RUZBQzVFODg3NjZGMzIyNgotOjEwNzE3MDAwNUNCMzU4QjM4Mjc0MDlGOEMxRURFRDNBNDZGMjYzOTVGOQotOjEwNzE4MDAwOEVENTIzREVBMDhEODBFMzkxN0EwNEZDNjI2QTg2OTExRAotOjEwNzE5MDAwRTA2NDRBNTc4NEREQThFQUIwM0U0QkU4NEZDNjlDREI2QQotOjEwNzFBMDAwMkQ0OEM3MkIwRTcwRkM1RjYxRTRFM0Y0OERFN0E2NDkyMAotOjEwNzFCMDAwMTFFNTE5RjJDOThDNzQ1REMyMzhFQkVEQTI4RDI4NjcxOAotOjEwNzFDMDAwM0E3OEI5N0I3RkZBMEQ0ODk3RUJBN0E1OEY0MTNDMzEwMAotOjEwNzFEMDAwQTFERDA1RTMwRENBMzc2QjIzNjA3Rjk2NTc4RDAxMDU0RQotOjEwNzFFMDAwMDYxREE0QjJGRDA2MzhDQjZFMkJCQkNEMEJFQkQ4NzhCOQotOjEwNzFGMDAwRDAxQUQwQzM3QkNCRUNGQkVEQThBNzk1OEI3NTc3MkY2RQotOjEwNzIwMDAwRjdCQzg5N0MyMDVBQTcxMjFDMkQ5OTFERjYzMTIzRjk1MQotOjEwNzIxMDAwMUUwMkIwM0U0NDA3OTQ4QjU1QzMzQTQ5Q0ZCMzU0NzUxMAotOjEwNzIyMDAwOTA3Q0I3OTQ3NTc0MjA5QzM2NEVEMjkxQkU5MTdFQkJGMwotOjEwNzIzMDAwOEVGMEQ5NTIxMDNBMzQxNEZEMDRCMzc1NzYxQzJGMUQwQwotOjEwNzI0MDAwMDRCRjExMDY3OTIwQkZDMzhCN0UxMzA2MzBENzU1NzA1QgotOjEwNzI1MDAwNTRDMTcxNjk4NzMwNEY4NjgwQUJEM0I5RTM4NzBBOENGQwotOjEwNzI2MDAwOTM4MUUzOERFNkVEMTE0RTBFMDFBN0FCRDNERDA0NzdEQwotOjEwNzI3MDAwQTcxODM3NjMyOEI0MUZDREM3NjlBQjg4OEQyM0NGNzE5QQotOjEwNzI4MDAwNjMyRDBCRTJGQUU0QkM3MjlDQkVGMTk5QTYyMDVGMzUzNwotOjEwNzI5MDAwRkMwQUUwMDZFN0E0MTQ5QTY5NzEyQkU2MzNCMjhGQkJBRgotOjEwNzJBMDAwOTc3QjlCQjcxMjVEREJDOENGOTFFQkNDQUY0NjNDQ0E1NgotOjEwNzJCMDAwM0RCODY5OEE2RTM0RjZCM0QyM0M4NkQ5MkM4ODc4OUM2NgotOjEwNzJDMDAwQUIzMkYzMzdEMzUxQkZGMTEyMUM5M0U5MzU2NzdGQzc1NwotOjEwNzJEMDAwNTRENDUzRTVCOTI0RDM2RjhFQ0FEQUY1RTlFN0QzNzFGNAotOjEwNzJFMDAwOEVEMzU5NUQzMkJBMUY3QTRFQTI5NzlDODNEMTNCMTA0MAotOjEwNzJGMDAwRTk5M0U5N0E0QkNBRTkzMjg0MEI4QjZGQUZCRjcwNTlCRgotOjEwNzMwMDAwQUYwRjFENDIzRjBGQ0IwNjM5MDFBMDJGNEM5QThGQjExMgotOjEwNzMxMDAwRkYzMjYxNTk2MTNBRjc5NzQzOTBFRjNCODRGRjA2RTRFRgotOjEwNzMyMDAwMTUxMDZCRjcxOEZCNzgxQkQyRTk0MjQ2Rjg1NUZERkNBNwotOjEwNzMzMDAwREE1QjdGMDVFMzlEMUQ2NkI0QTM1QzI5MzhEOEQxOEI0OQotOjEwNzM0MDAwRjI5MUVERjQwREM3NzNEOEFDRkExRTRFODFGQUNEODdEOQotOjEwNzM1MDAwQjMxOUYyRURENTE2NkU4RkE5MDJDRjkzRTVDQjNBNDE2MgotOjEwNzM2MDAwMzc2RTk0NzNBRTdGRkUyOUY1QzNEMEQwQUM0QkVENDBBMQotOjEwNzM3MDAwN0JFQkVFQUY3REQ1OUNGOUJGQTg2N0IxQTc0OUNGQ0ExQgotOjEwNzM4MDAwREZERkRCNjJDM0Y5RDcxRDZDMzcwMzdDMkQ2RkYwRjZBRQotOjEwNzM5MDAwMUQ1MDBFQTgwOEJGMDZGMjY3RUQyQjk4NDM3MDUyREYxMAotOjEwNzNBMDAwMzYzMUM0RDM1MTdBMkQ4ODY1RjY0NzBCNDNGRUJCRkRCOQotOjEwNzNCMDAwRDlFRkQ1QkI5MUZGNjQ0RDc0MjMxRkRBMjZFODNEMjgzMQotOjEwNzNDMDAwRUNCM0U0RkRBQjQ2Q0Q4N0ZBNDRGMkZCNERFOTNBNzFFQwotOjEwNzNEMDAwOUVERTEzNzU3MDhFQTMxRTMxQjIzNTUwNTlBQTlCRDkwQgotOjEwNzNFMDAwOEVGNjVENzQzNUYwNUZBODlEQTk3NzM3REQxRDY3REZFOAotOjEwNzNGMDAwREU2QkFEMEFBNUEzNURCMkNDQ0M3Q0EwMzBFNzlGNTM3OQotOjEwNzQwMDAwOTgwRjg4QjNDMEY5OUIyQUU0M0Y4NTJDQUNBMDlDMkQzMwotOjEwNzQxMDAwNkMwNjg1MTdGMTZBQjE5NUY5RTJGMDNERkY5QzRBRURFMwotOjEwNzQyMDAwRUZCNTZBQTFGNEIxRkNCRDE5Rjg4MDgxRkY5MzNEOTlENQotOjEwNzQzMDAwRUU2NTc1NEVDRUEzNTA3RjMxM0M2NTNEOEE3QzgzMzkyNQotOjEwNzQ0MDAwNkJCNDNFN0I2NDMwRTIyRkM4N0Q5ODZGQjdEOEI3MDEyQwotOjEwNzQ1MDAwNjA2ODE4MDNGRkQ5NzQ2MUQzRThGM0RCRUYxMzcwNTI0RgotOjEwNzQ2MDAwQ0RCNjMwRjI0QkQ1RjZGQTYxRTIyRjc2RjU1NDdDM0I3RgotOjEwNzQ3MDAwQjRCQjg5ODkzNTMwRjJDQjIyNUNBOEZDMDMzQjk1RjM4MQotOjEwNzQ4MDAwODBGRjlBQzY5MERFMUY0MEZCM0I5MEM2RUQxMUE2NjlCNwotOjEwNzQ5MDAwNkU2NzE2RDIwQjIzMjBFNzlCNTlCQjE5REExMUI2MDM4RQotOjEwNzRBMDAwQkRFNUIwNUUwQkU5Q0RGQjk5MUJFOTAxM0Q2Q0VGQTU5NQotOjEwNzRCMDAwMTBDQjYyMDhEN0NEOENENUM2RDM4MTdDNEFCRjg0QkFBNQotOjEwNzRDMDAwNDQ0RkY2RDRBNTJGNTk2ODNEODY2NjE2QjRBMDNFODQ3NQotOjEwNzREMDAwNkIwMzc4QUI4QjU5NTAyRDhFRjkwNTQ3M0JEQ0Q0Q0YyRAotOjEwNzRFMDAwQzg5QTQ5OUY3REZBOEIyM0I5QzhBN0FEMDc0MDFGQkIzNwotOjEwNzRGMDAwMENDRjU5NDc3Q0NBNkE0REE0M0ZDNjVBMDg0RTUxODFFOQotOjEwNzUwMDAwMUY1RENCRUM3NENFN0RGNjlCRUYyRDcxQ0U5MTE2OTQ2MgotOjEwNzUxMDAwMTc4NThCRDMxM0NFNTdCNkNCM0Y5N0M3N0M5N0M3OEZCMgotOjEwNzUyMDAwMUJBNDcxRjM4N0VFNTdEMDJGOTM3RkFFOTBFQUJCOTZFMgotOjEwNzUzMDAwQjkyRjMwRkVFMDAxQzZDRjIxM0MxQTc4RkM3Q0FBRUZCRgotOjEwNzU0MDAwMEFCRkU1QjgwOTQwQjEzOUJBREZFMTc1QzdGNEVCNjRBOQotOjEwNzU1MDAwMzhFNzJGNEVFNENCOTdFRDRDMkM0QkI4NTgwQzlBNzM3MAotOjEwNzU2MDAwMzJDMERDNzI4N0NFQjMxNUM2QkJFMjcwNjJCQkRBRTIxMgotOjEwNzU3MDAwREY5MkZEMUI2QjFGNzY0RUM1RjY2MDlGNkY4NUI3NTc3OAotOjEwNzU4MDAwOUQ0ODZDRUZBRDdBRDk4MTc0MUM2QkNGRDc3N0NEQjk5QwotOjEwNzU5MDAwQzQ3NkM5RTc5M0JDNUU1ODU3RTZCN0UzRDYzNURFNkNEMAotOjEwNzVBMDAwNEFBODlGNUU3N0RFQkEzMkJGMTNCN0FFRUI1Qzg5RURCNwotOjEwNzVCMDAwN0QyREZEQUZFQjg2NTJEMzNGNUM5NzZDRjdBRENBOEI0OAotOjEwNzVDMDAwNkI5N0JDOEZBOUI1QTYwMUUwQ0VEQjdGNjdGQUM1OERBRQotOjEwNzVEMDAwRkJEREZBN0ZEQ0VFQjYyNUM5RjMwNDA4REYxN0U5QjQ1QQotOjEwNzVFMDAwRjExOTUwM0YxMzVGQTFCRTY4QjM5MkRFN0I5RTlEMjVDQgotOjEwNzVGMDAwRTREMzQ0NTQzQ0EwOUYyNzREOUI4OEZENkEyNUREMDlCOAotOjEwNzYwMDAwM0ZDM0MxNjcyRUM5NDZCRTlFMjdGQ0U4NENGODE1QkE5OQotOjEwNzYxMDAwMUI1Q0U0NTdGMDg5RjYyMDRGREE5MDVGNzQ2Rjg3N0UyOQotOjEwNzYyMDAwNjk3QzVERjFGQTUzNDYwM0I3MkJFQzJDNEFGNDJDRjUzOAotOjEwNzYzMDAwQTU3NDY2NTdCODNEQ0VGNTlEODFFNjQ5MUVGRjFFNTRFMAotOjEwNzY0MDAwMDA2MUJEQjM5NjhDNjdFRjAyMUQzRTY3QjQ1N0E5NjgxMQotOjEwNzY1MDAwOUY2RDUxNDgxRjk4NTVBM0U5NTMwMTNGQzZCNTJCRTREMAotOjEwNzY2MDAwNTc5QTc1RDc5QjBGQTAzRkU2Q0FFM0VFOUQxMTc4M0Y2RQotOjEwNzY3MDAwMkJFOEYwRTBCNDREQkQ0Q0MzMzg0MUI2N0U2MUQ5OEZFNAotOjEwNzY4MDAwRTFGOUUwM0U0NjcxMzQyQzJGNDQ3Q0IzNjk2RUI0Mzc4NwotOjEwNzY5MDAwRUE3MDQ1MzBDRTI5NDM3Mzk5MURGOUU2Rjc2RDFBRjI2OQotOjEwNzZBMDAwQ0RCQTY5REExRjY4QkY3RjA3QUQwNERBQ0RFNjVCNjc0NAotOjEwNzZCMDAwQ0Y3NzRFMzY2MkJDQTNFRTdCRUU0QUQ0N0JFQTQyMTYwRAotOjEwNzZDMDAwOEQ5RTY2QTY1QTYxMUY3NUEwOEZFMTMzREJDODU0MEJFRgotOjEwNzZEMDAwM0VBRENDOENDRjhBRTU1Q0ZGNEFBQkY0MUFFQjYwRkU4MgotOjEwNzZFMDAwQkE5RTlGN0Q4RUZERTZBQUUxQkQ1QzlGMENEMkJFRUJFQgotOjEwNzZGMDAwN0E1RUZEMEZENEQ3NjY2QjVFMjNGMjhCNEJCNzFCQjk1NgotOjEwNzcwMDAwNEUyQUYwNjE1NDI4QjE4Q0ZDMjBCRTVDMTY0RTJDNUZEMgotOjEwNzcxMDAwN0UzMEIxRkM3MTA2ODdFRjM4RTFDN0RBQjdEQjQ0N0MxNQotOjEwNzcyMDAwN0JDMTg3NTZEMjNGNzc4MUMwNDMzQjM5RjBCNDg5RTRBRgotOjEwNzczMDAwQzdGODA1MzYzQUFGMEY0RjVBQjdBMjVGNkZFRkRCNTY2NwotOjEwNzc0MDAwNkEzRkZGNDkwQjZGQUYwQjNEODNFNUMwMzMyOTY0Njc4OAotOjEwNzc1MDAwMkZDODA4NTVBNEMzQkE1RkZDNDI0RkYwQzY2RDE5NzAxQwotOjEwNzc2MDAwRkM2NzQ2NkM1RDgzRjU5Nzg3MkEzMDJFRjZEQzI1OEMwNgotOjEwNzc3MDAwRjU2MkJEMUExQzhERkI3Q0VFQkZCOERGM0FGQTg0Mjk5NgotOjEwNzc4MDAwQjgwREM2RkRGMDg1OUYzREYzMjM5Q0Y3ODlCQzc0MDVCOQotOjEwNzc5MDAwQ0VFNzJBOTQwQkQwNkVEQzIzNjYyQkRBMUJFMzNFN0MwQgotOjEwNzdBMDAwNkEwOEYyOEQwNURCNEQwOUZCN0IyNjQzMTFGQTgzM0IwQQotOjEwNzdCMDAwMERGMTZFMjBCRkUzQjFENTNGQTNGRUE1MjcwRTEzREU2QQotOjEwNzdDMDAwRUQzMjA0NzQxOEM3MEJBQ0U2NzhCNkNCQzJGREE0QkI4RgotOjEwNzdEMDAwMkM4NTQxM0NBN0REMTk5Q0FFQUVEMjZERkI2OTEzRUE0NgotOjEwNzdFMDAwOTc2RjcwM0Q2NEEwRjE0QjVEQjNCQTZBRkFGMTMzRjY1RQotOjEwNzdGMDAwRDVDM0JDQzU3MENFNjczRUIwREU4NkZFQjhFMTFCMTJCNQotOjEwNzgwMDAwQ0Y2OTQ0MzBCMUZDNzIwNkQ3MTM2NkIyQjhGN0M1Qjg3OQotOjEwNzgxMDAwOUVDMTJCNURCODlFQUQ4Q0Q2NTM3QUUyOUQ1QjhCNTE5OQotOjEwNzgyMDAwMUYzNzcxM0QyNDc5REU1RjY3NzBGOUY5RjM5RkMzMzgyNAotOjEwNzgzMDAwOUNDRkU4QjkxRTBFMTAwM0JBNUUyMEU4RTE0NTg1RUI0NwotOjEwNzg0MDAwQzFGMEI3MzgwRkYwN0YwMTJBMTA4MzYzRUYxNzI0QUQyMgotOjEwNzg1MDAwNDM4RURGMjJFMEY0QTkzOTZEMUJDQTczQTc5MUUzRkRDMwotOjEwNzg2MDAwQzk2NTA3MUZDMDM4QTY2Q0Y3REUzMjREQUI4OUYzMkIxNAotOjEwNzg3MDAwQ0ZEOUIwRjA0MDBFOUM3RjQzNzcyNkQ5OTlGMjdEQzNEMwotOjEwNzg4MDAwMTMyRjY1N0QxN0RFOUZEQUFFN0E1MEY1NkRCOEU1RjFGRQotOjEwNzg5MDAwN0JDNzYxQkIyN0Y0MjE1QzI3RDY2QjMwRkVBOUQwQ0IxOAotOjEwNzhBMDAwNjlEODZFQ0U2NkM3MThGNDk3QzhGRTczMzc1Q0FCRDUzRgotOjEwNzhCMDAwQzRGMUQzQUY0QTRGOTJGRTFCODQ3REZDN0M2NUVGODRGQwotOjEwNzhDMDAwM0M4MEY3ODIwRDhBMDc5QjJEMDg3RDdCRUE4REE4RUIxMwotOjEwNzhEMDAwNkNENjdCMzBCRTUxQTEzMkFGN0UwQzk5RUVEM0YwRDk3RAotOjEwNzhFMDAwRDBGREVDODE1Q0E4RjdFRjFFNUI4MUZCNUFBM0YzREVCMQotOjEwNzhGMDAwMzAwQUU5NjU4QjgxRkM2MEM5RTc2Mzc0NzJGQzg1RkUyMAotOjEwNzkwMDAwNjExREY0NUY3M0IzQUQxRUUzMjIzMEVFN0UyQ0VGMkJDRQotOjEwNzkxMDAwRERBNjQ3M0Y3RURBMDlFMDZGRkNGRDYxMURGMENDMTM2OAotOjEwNzkyMDAwM0QyQjQ2ODNDRDAyNzg2QzZCNDdGQUQ4ODU4RTBCOUMzNQotOjEwNzkzMDAwRTc2OTNEQzkwOTE2RTZGQjE4MjdGQ0NGMEJGRUQ0NjlBMQotOjEwNzk0MDAwNTRFMTc5RTJDNEYyQjQyQTRFN0Y3NDRFQzhENDlEQjA5QgotOjEwNzk1MDAwQkZGQTQ3NDYxMUJEQ0VERDkwNDg1RkIyOUQ1Q0VGQkNEQgotOjEwNzk2MDAwNjA2MjdEMzI1RTk0MzhBNUJGODI5NUM2RTM1NzcyQkJENAotOjEwNzk3MDAwOEM0OTAxMjNEMjYzQzMxMkUwRTc3MTc0RDM3MEJDQzM5NgotOjEwNzk4MDAwODg3QTU3RjIzQ0E4NDEzMjc5QUU3QUMyNEJFNkE2RkQxRQotOjEwNzk5MDAwNUFGODdFNDFFNTM1QzM3RTRGRTJCRkI4REY1QzQxQkI5QwotOjEwNzlBMDAwN0VCRTQyNUI2NDBCMkU2MTM1NkU4MEU3ODIyOUFDMTY4OQotOjEwNzlCMDAwOUY5MjFGOUVBQTBDOERDNkY2QkIwQzkxQzc3RjRBN0M3NgotOjEwNzlDMDAwMzA5NUY4QzEyOTdCMzgwREZENEFCOUMyQUY3N0NBMUQ4MQotOjEwNzlEMDAwNEU0MzNFNzc0NkM0RURCMDFFQ0JGMzdCNDAxRTAwNURBOAotOjEwNzlFMDAwN0ZGODkxOTFFNDQyNEJFOEE1MzQzQ0FGNTNDRjU4NzRGMwotOjEwNzlGMDAwM0EzODk3MEZCQjMzQUFEMTFGNzQyQUY0QUIzNERDRDdDMwotOjEwN0EwMDAwQzk1MDQ2MzVGQUY1MDZFMjEzQzlGQzRERUEwMzQ3RjFDMQotOjEwN0ExMDAwOUY1NzgyREVFM0Q0MjYzODExQkUxODY0QzgwMTc5OTNEQgotOjEwN0EyMDAwRDE1Q0Q2REMwRkREQ0I3RTRFNjM3MzE5RTY2OTQ0QkZCMwotOjEwN0EzMDAwNkZGMzIwOUY5REVBNzREM0ZCM0E4NThGODc3RjE4REYxMQotOjEwN0E0MDAwRkJFNDYwQzYzNjNDRkY4MzdCNEIwNkExOUVGMDA5NzNDNgotOjEwN0E1MDAwMEY0MkJFQkQyMENCN0IzM0NFRTdBQUVFQTVCOEJFNkJFRQotOjEwN0E2MDAwMjJGM0I0NDI5Rjc3RjU5RTNCRUQwMEI3REIxOUM4MkQ5QQotOjEwN0E3MDAwN0M5NkZCOENFNDZGNjlDQkE0NzVDRDUyNTk1ODA1M0NCQwotOjEwN0E4MDAwOUQ4NTcyNzUzNDk1NDk4Rjk5QjU1OTA5QjZDMjNBNkU3QwotOjEwN0E5MDAwNUY5QkI4Q0YzOTlEQTZEOEY5QzI3RkYzMTgzMDQ0MjQzNAotOjEwN0FBMDAwQTBDRDcxRUQ2MEZDNzkyODNGMDE3RUYzQ0QyQzlDMDJDNgotOjEwN0FCMDAwRTNDRTdGMzRCMURGMDIxNkE2RjUzNDNDRjVBNUE5M0YyRAotOjEwN0FDMDAwMzg3RTJFRTBCODIwNEJGMzNCQTFBQzRDMzFEM0JBN0VDQwotOjEwN0FEMDAwRjBCNDQyRjJDRDI5RkM4Q0QxMDcwNzA1MzExRUI2NDAyNwotOjEwN0FFMDAwQzhFQkQ5QTZCREI0MUVGRjVENzVEQUVEODAzNzY3OTY4OQotOjEwN0FGMDAwQ0NEMjZFQ0ZFMDI5MjM2NDk3NkQ1MDA4MEYxN0Q0QjAxNQotOjEwN0IwMDAwNzAwMUFDNkY0MThGMTIxRTg1RkFDNDVCRkM5Q0U0QjgxNwotOjEwN0IxMDAwNkMwQjZGNzdBQkQwNzc2NjAzNUM1MDdGMThGNzk0MTJDRAotOjEwN0IyMDAwNDgwNUZFMzlEQjBDQTYxQ0YyMTFCMTNGQUMxRjA0RTU4MQotOjEwN0IzMDAwN0FENjQxRkI2QTY0MTE1QUM3NUEzQzQ3RUVDRkEzRjU4NwotOjEwN0I0MDAwN0ZGRTE2M0ZCRjcxRjU1QkY1QjhBODgzN0IyQjI4RkUzRgotOjEwN0I1MDAwRjcyOUYzRDAzOTgyNUVDMjJDRTlFN0UzMDlDMjVEOEJENQotOjEwN0I2MDAwODM1M0ZERTZDNDMyN0IzNEFFM0MxOEUxMEFFNTM4NzgzNQotOjEwN0I3MDAwMzdFREY4RDJBNEY1MDNFNzA3RkJFNDQ5NzBDNEU0NTFGQwotOjEwN0I4MDAwRUMzQ0JERjc4ODM4ODcwN0JGM0QyNzA3RjlDMDdEQThDMwotOjEwN0I5MDAwQkZFNjhBMDEyQTkxNkYzMkU5RDcwODlCNjE3Q0VCRTU0OQotOjEwN0JBMDAwMkNDMUNGMDFGQTE1OTU5RjcwNEU5QkI4MjE5RkIxRjU1RQotOjEwN0JCMDAwMDYxRkM1MEI2NkU5QkQwNzMwQjQ5NTkyRUQ3QjFBRjEzRgotOjEwN0JDMDAwNzY5NjRFMkI1NDg5MUY2ODI1NjRFRjJFRTFFN0YxRDA5RAotOjEwN0JEMDAwOThFNjExQ0RGREQ4Qjk3MkZERUI5NTUwNTg4N0ZDRTBDMQotOjEwN0JFMDAwMDVBRTFGQTQ5NjQ3MERCRTM4M0E3QjQ1RjBCOTQxRkI2MAotOjEwN0JGMDAwMjIwN0YyMTA1RjlFNTVDODJGQkY1MTYxNkQwQUMwRDk5MAotOjEwN0MwMDAwMDVDNzgyRjI2MEEzNzJGNDAwQ0E4RjhERDdCQjU5MkJDRgotOjEwN0MxMDAwRDQ5N0VGOThCQ0YwNjVCMjk1QUQ5NEQ3RDNCOEEzNEE4QQotOjEwN0MyMDAwREY2OEEzRkQ3MzdEMzVBNTc5QUIwRUVBQjM2RjJCMUQxRAotOjEwN0MzMDAwODM3NDAyRkJCRTZEMEFCQzdGNUREMDZEOEU4REUzODNDNQotOjEwN0M0MDAwNkI3OUEwNzgxMUZBNjVGNzc5MTdCRThDRjQzRENBNEFCMgotOjEwN0M1MDAwRkVBRjZDODA1NTZBM0EzRERCNTEwRjc1QjExNjA1REJGRQotOjEwN0M2MDAwQURDQzU0NzhERTQxMUQ5QkZFQ0I5MTg0MzVFQUEwNzRFNwotOjEwN0M3MDAwRkUzQzBDNEY0NTY1NkRFOENGQ0Q1NjQxQUZFNUVGREJERgotOjEwN0M4MDAwNzA5RTA3RDNGOEJBMzI3NUZBREIyNkEzNUUzRDg2OTc1RAotOjEwN0M5MDAwRDM5NzJBREEzNjQyRkU3NUI0QUU2QzEzQUJDNTdERTNEQQotOjEwN0NBMDAwN0JENEMzNjExOTVBMzdENTA3MDk0RUQ5RTM5QkNCNzBGMgotOjEwN0NCMDAwMUREOTQzRjhEMzY5MENFN0UzMzhBRkY3RTE4OTRGODc2MwotOjEwN0NDMDAwRkM3QUIxOTBCQjhCQjc1NjY3MjM3RjdERkQ5NDU5NDVGNQotOjEwN0NEMDAwM0VGQUJBNEJFQThGNjExQkVBOEY2QzY4Mjk2RjJGRTQ3QQotOjEwN0NFMDAwREJFMkIyRjFEOTg4RjdDRUMyQzQ3NjY3MENEQUEwQ0I1QQotOjEwN0NGMDAwNTE0RTFDRDI1M0JDRTczMzlCMzZDODAxRURBRTMyQjJCNQotOjEwN0QwMDAwN0VGM0VDQkUxMEU3RUEzRkE3QjA2MDlDREZDMDNGRkQwQQotOjEwN0QxMDAwMkNFOUU3RkU3MzZBQzJGQjUzQ0JDQzJDMThFNzM3NjgxQgotOjEwN0QyMDAwQThERjM3MDFEQjM1QjJERTk1ODg4RjhEQTExNDE2OEM2NAotOjEwN0QzMDAwQTM4RkFCQUNGRENGMkJFOUMyN0Y0RUNGMDJGRENFNkI0NAotOjEwN0Q0MDAwNEM3QzdGMkU4MzA1MzJGQTZCOTc5NUY4MUVGNjkxNTA4NgotOjEwN0Q1MDAwREVGOUQ3QkU3REUwN0I1NjE5NDk0MzNGRUEyNDk0ODc3QwotOjEwN0Q2MDAwNTAzRTEzRDQwNTBDQzA4NzVFMzc3MDM5NzdEQTFFNDk1MAotOjEwN0Q3MDAwOTA4M0E3REQxMTJFMDdEMTRGNjRFMzdBRkE2NDNDNjc0NAotOjEwN0Q4MDAwMzU5QTM2MjUzNTM2OEZBQ0M3RkVFOTcxRkIzRDNERERCMgotOjEwN0Q5MDAwQzhDMjc0M0U1MTVBMDdDMjJGMzA5Q0IxNEQzRDFGMUJDMwotOjEwN0RBMDAwMzEzRkE2QTE2NzJGQzE0RkUyNEQzQzFDMDNGMTcxQTdFMwotOjEwN0RCMDAwRDZERUIwMEU3ODQ2NjVFNjRGRDc4QzFDMDEyOEI4NEY0QQotOjEwN0RDMDAwRjI4N0FFMzVFOEU3Q0NEMkVCMTJGODQ1NEE3OTFGRkZDRgotOjEwN0REMDAwMjA3NkY1MjA0NkMxODhERjZDNTk4MzdFRDI1ODk5Qjc0QQotOjEwN0RFMDAwOEZGNTdGNzg2MjBEOEM1NzNFOTJGN0FGQ0UwQ0JFQjYwMgotOjEwN0RGMDAwOUM5MjQ0M0EzOEZGNTVBMzg1REVENEI4QjIzOUE5NkNCOQotOjEwN0UwMDAwODNGMkE4QjhCMjNEQTlERTk5NTRFRjRBMkFFN0YzRjYwNwotOjEwN0UxMDAwQTc1MkMzODU3QTBGNjMzNzY2M0UzQTUxMDVCRTc5MkE2OQotOjEwN0UyMDAwMjczQzAzRjNDNkQ2QjYzRTNFQjEwNkY4NTk2MzM5OTdGMAotOjEwN0UzMDAwQ0Y0RDNEOEE4NzdDN0YwMjdFNEQxRUFFMzdEQTNDMTFFNgotOjEwN0U0MDAwMjNFNkFCQTU5NEY3MUU0MEZFRDJCMDUzQjEyQjQwMEZGMgotOjEwN0U1MDAwQjY1MDc3OThDQUQ4Q0YxREQ3MkZBNDUwQkY4NkQwNTExRgotOjEwN0U2MDAwRUEzN0UwRjhBNTNBQTJGNzM1QTVDNzc4QkJEMEZCQTQ1RQotOjEwN0U3MDAwMDdBQzZBNUI0OEYxNzkxOTdGRDYzMzlGOTZBN0M0RTJCNQotOjEwN0U4MDAwQ0Y5MkNGOUVDRUQxNUUyMjNFQkI1QkIxMjM3REY2RTE4OQotOjEwN0U5MDAwMjk4RTFCRTdGNzkxRURGRjM4QUFFN0I3QTg2NkE0MkM1NwotOjEwN0VBMDAwRkVCODA1RjVEOTNGMzVCRTNGMTZGNUJCM0YwQTc5QjI5RQotOjEwN0VCMDAwNUUwOThFQzA3OTM3MzFERjA4OTQ5N0RGNkYxQ0I2NTdBMwotOjEwN0VDMDAwMDdFRDhFMTgyMjVEMTg2MzVCOUJEOTMzMTFGM0U4OEVBMgotOjEwN0VEMDAwQTQ0NjBBMzAwRkVGREUwNzBGMTAzQzhGNjQ0NkJBMTAzRAotOjEwN0VFMDAwOUVDNzFGN0M4NUQ3MTc0NDBBMzBFRkVFRkVDQzRGNzgzMwotOjEwN0VGMDAwNzk1OEE0MEJDQkJCMUVGQzEzMkY4RjhBMTRFOEExRkY2QgotOjEwN0YwMDAwRTBDMDkxODkzNUQwRkYzMTdCRkY3NEREOUFDOUY1N0JFNAotOjEwN0YxMDAwQjlCRTJCODY2QTNGQzk0NDdCQjU4MUNCQTEyRUIwODlGRgotOjEwN0YyMDAwQ0NDMDM3NjdDQzNGRjlGNDYzMDA4NzE5RkY5MjQyRkM1RAotOjEwN0YzMDAwRUNCMTUzNTMyNzcyRkQzQ0UwNTUyQkQwN0ZDQkZGNDg2QgotOjEwN0Y0MDAwNEUxMkJGNTdDOTZFQ0U0MUQ5OTgxRTNCOEZENEMyNUUyOAotOjEwN0Y1MDAwMzdDOTkxNEI5QUJCNTFERkM4OUUzMTkyRTQ0ODhENTM4QgotOjEwN0Y2MDAwRkIwQkNFMkI5RkY3RTdDMTEzREFGRjI1RDNDRUY5Qjc3MgotOjEwN0Y3MDAwNUU0N0YxRUNFQzFGQTU5MjdFNzY5Rjg1RUYwN0U4ODZDMQotOjEwN0Y4MDAwQ0VENzI2Q0U2MzgzRDhDRjg2NEM2RTU3MzYzQUFGQTU3MAotOjEwN0Y5MDAwNzE2RTE1RkE3NEU3RUFFMDEzMTY4MEZGREIzMjRGNjY2NAotOjEwN0ZBMDAwMUREN0NGQkZCQjE1RjgwQUYwRjE0RTg3OTY4M0ZDRTRDRQotOjEwN0ZCMDAwQkIyMkVGNERGMjBGN0M5RjFFNjc5Nzc0OTY0MUQ5MTYzNgotOjEwN0ZDMDAwQjMzRjNCMjc2QjM5NTYyNzNFQjM3NDE4Qjc5MUZDQThEMwotOjEwN0ZEMDAwQjM5OEY3OTM3MjI5QkI5NUNGOUI3RERGODg2REI4OEZERgotOjEwN0ZFMDAwMTQ5NUZCOUY2NjRGMkZEOUQ2NDI3QUMxMTQ1QTJGRDNDRQotOjEwN0ZGMDAwQjQxQzA1QzYzQjNFNkZCMDBFRkQ1MkYyN0NBNjBGRDVGOQotOjEwODAwMDAwN0U4OUYwQjk1NUY4RjVFNTM5QzlGM0ZDOEJEOEY3MkMyMgotOjEwODAxMDAwM0RFODE1QjBDRjc3QjM3QzM0MUVFODE5QTM4NUZGOEJGQwotOjEwODAyMDAwRjQ4Q0JGRTAxOUM3QzE5N0E5OTFCMUY4RkVGRjIzMzhCRQotOjEwODAzMDAwRkRGRUVCODA1M0UzMTJFMDE3QkE4QkUwMTcwMjdFRUJGNAotOjEwODA0MDAwOTVCMDIxOUJGMzBCQjJBN0YxM0RDQTlENUYzQTdEMUYwRQotOjEwODA1MDAwNjZDNkU1QzdDQ0Y4NTEyM0U5OTU3MjVEMjkzRjdDQkUyMQotOjEwODA2MDAwRjYzQkVDN0MzQTRCRDZGQjNFQzdGMzhBRDM0RjNERDI2RQotOjEwODA3MDAwOEYyOUU2MzlGMkI2OTlFMjE2NDc4QzIxRTI5QjQ3QzA3OAotOjEwODA4MDAwMUU2QTQxRkUyMkUyRUUxNUZGQjJFMDc1QjQwN0U1QjhDNAotOjEwODA5MDAwREZDREQyNzM3RkIwM0M3N0M1REIzREE3MThGMzUwNThENgotOjEwODBBMDAwQzA4Q0ZCOTg2Q0E0NzM5NzcyQjdEM0MxRjM0QTNBRUZCNAotOjEwODBCMDAwQ0FBM0JDOTIzMzJDQzJDODFGNUFDOTg4M0YwMjFFNTBBMwotOjEwODBDMDAwN0RGNDk2MkNBMjdGNjgxRkIwNjBGQjc5OTc1MDdCQzAyRgotOjEwODBEMDAwOEIwMEYxODc1QkFDNjRCRjc0NjI5QzFBRUI2RjI5MEQ1NwotOjEwODBFMDAwNjIxRTBDREFDRDg0NkZGMzc0MzQ2RjNGRjhDMkZEQ0Q5RAotOjEwODBGMDAwQzM3OTlFODVDNDlCQUM1NkVFRDc2MUFBMzY3QTcyOUMzMgotOjEwODEwMDAwOUNCRjIyOEI5RjczNEE3OUU0RDlERkEzNUVCQkQ2NDIyMgotOjEwODExMDAwN0EyRENBNTg4QTA5NzU2NEQzMzg3MEZFRUUyQ0VFMTc5MgotOjEwODEyMDAwMjAzQ0JCRkRERTU0OTFDRkU2QTk0MEI4QUU0QUU1NzhDRAotOjEwODEzMDAwQjlEOUMyRTM1NTlCNDE4RjI2QkUyOEYwNTdFNkQzRjk0MwotOjEwODE0MDAwODRCRTE3QTlEN0E1QTFCRTMwM0FBQkNGREZBMEExRkQ1MQotOjEwODE1MDAwNEZGRTcyQTg5RjE5NTE4RUEyREQzNjMzQTAwRjlCRDAxRgotOjEwODE2MDAwMEU2QkJGNTY4QkM0RDkzMUY4ODdGMUJFREIwNDVGNjU1NwotOjEwODE3MDAwMUIxOEY5MEY2RkMzN0U2OTM4QkUzNTBERTM5QkI3NjFERAotOjEwODE4MDAwN0ZGNEQ3MkVCRDM2MjE4RUE3NjU3MUZBOTZFQjRCRTZBQwotOjEwODE5MDAwRkI1QTk2RjA0Qjc2M0NBNEM1Q0YyM0M3NEYxRTBGRUM3RAotOjEwODFBMDAwRDEyQTg0MEZDMDM5M0MwOENGQjc0NTRGRTc5N0JDQ0VFMgotOjEwODFCMDAwQzgwNkVFRjc4RTZDMjgyMkJDOTNFMzBEQjRDRTNGRUJERAotOjEwODFDMDAwQTM3NzI4MjAwN0U3OENFNzc2QkFCNDdGNjYwQjNCOUE0MwotOjEwODFEMDAwMkQ0REI0RUZEMENGRDI1N0Q2OUY1RjRFQjYxNzMxM0U1QwotOjEwODFFMDAwOUZEODlFRUIyRDI5MjNBMzQ2QTI1QkI3OTJCMDdFMDlCMAotOjEwODFGMDAwQUY4MUUwMzBGNzJCQzI0RENBQkQ4NzJDNDAwN0U5NjgzQwotOjEwODIwMDAwODYyQjg0QkYxQkVFNEEyMTM5RTYzNDA2NDcyMDVFMkRCQgotOjEwODIxMDAwQ0E3MjUzQkI0RDk4Mjc0MzcyOTVEQkNEOUZCRTJFRkQ4RQotOjEwODIyMDAwMUU4OUY2QjJERjFBREQ4MkYwRjI1QjE5RDFEM0U5RERFNwotOjEwODIzMDAwQTk0NDNGNkM2ODY0MDZFNjk5OUREOTY1NjI4OEJGNEQ4NAotOjEwODI0MDAwNEFBNDA0RjlENjY5NDVBQkEzNzYyRDI5NkVBNDIzRTk4NwotOjEwODI1MDAwNTc3OEY3MzlFRTU3RjAyMzI0NjE3REZFQzA3RjUyOUU5OAotOjEwODI2MDAwOTM3RjY3QTIxRDdEMUFGRUFCMDdCQzNGQUQ4QjU0RTAyOAotOjEwODI3MDAwNzg5MjFGODAxRUFEOTE3RTU0Q0ZFMzNGNEQzQTE2NDA1OQotOjEwODI4MDAwM0JFQjJBRERDQzc5OUNDRTczRDkzNjdBN0ZCNDY0NTEyRQotOjEwODI5MDAwOUM5RTBFRURGNjJCRTkxQzdEOTA2RTFBMDQxQzlCNzRCRgotOjEwODJBMDAwQzdBODVEMDNFNjJCMjEzQ0QxREU0MjNGMTk1NkM2RjkzMwotOjEwODJCMDAwNzU5QkQ2N0U0OEY5NTI0RDNCMTJDRkJCMjE4NjBGQ0EyMwotOjEwODJDMDAwOTcwQUY2OEJDMzBGQTJFNzgwRTAwNzhDRkIzQjZBNzgyNgotOjEwODJEMDAwRkMzQTU1OTQ1MzZBN0IyOTdGQ0EyRkZDMUY5OUZCMjJENQotOjEwODJFMDAwMTM5MEFGQTQ5Njg3RDg0Qzc4RkE0RjcwN0Q2MzVDQ0YxQgotOjEwODJGMDAwRDY5N0QwQUU3NkQ0RjYxNjIwMTlGODg1OUY1MDlFQjc0MwotOjEwODMwMDAwNUNFNzk1M0RFQkM4REYyMUY1OTQzOEJCNzNDNDk0MDQ1QQotOjEwODMxMDAwQkZDMzcyRUE4Nzc2MkNDRTE3QzE1NzM5ODgwNjVDQkU3OAotOjEwODMyMDAwQUQxN0YyMkQwNTBENjI5NDgzMURDMzQ5MEVBMjlDNDIyOAotOjEwODMzMDAwRkUyNEVENjBFNDU3QzgyNzUyQjJBQkY3MjBCRDNFOTI1MQotOjEwODM0MDAwNURGRDAyRTc2QjgwNjdBOEQ3QTM1MTc1RTVDMEZFM0REMAotOjEwODM1MDAwMDkxRkQ5MEVFREUxN0ZFNEJGN0I1NUUwQURGNEFCRDM0RgotOjEwODM2MDAwOEFDQTMxREYzQTUzRkFFQjI4QUVCNzQ4NzE2NzIzREU4OQotOjEwODM3MDAwQkVBN0Y3OTE1RjZFMkUwQjkwOUY2ODFFRkFDM0UwRDlERgotOjEwODM4MDAwMjBFODdEOEVGMDJGQ0QxMTdFMjVGNEY3QzZDNzFGRDFEMgotOjEwODM5MDAwRUYxQTVGOUVDRjdBMzlERkQ4NkU4QUU1RTVBMDFGQTg3NQotOjEwODNBMDAwODY4NTUzNjFCQzQ2RjQ1M0UxMzM5NEQ4QUY4OTQ1QTkxRgotOjEwODNCMDAwOUY3RkU3OTdBNjg0Rjg2NjI3REZGNzZERTJGQzFEMzVGRgotOjEwODNDMDAwNDEzREYyODk4RDE2RUU5RjkyRkM2M0RDNTJFRUM3MUE5NgotOjEwODNEMDAwMzQ0NjJCNUU4MTc4RkVBQTgxRkMxQjdGMTFFN0Q2RTcyRAotOjEwODNFMDAwMkZDREFBN0UyOTBCRTA2NEQ1RjM3QjZDRDExNTI2RTI1NAotOjEwODNGMDAwOUJDNzQxMUU3NzBCQkZDQTE0QjQ0Mzk3MzEwREYzREUwMAotOjEwODQwMDAwOTk2QTJGOENCNzUzRTU3M0NEMkU0QjNERTJDRjY3NDI2RgotOjEwODQxMDAwOUVDOUY3REJCMzBDQjQxRUYyMzcxMTVGNEUyMUI5MEJDNgotOjEwODQyMDAwRUM2MzM0RTI1N0M1NjAyOTE3RDk2OEY0NzMxRDE1NzZEQgotOjEwODQzMDAwNzNEM0NEMzYxRjhFMTdEMTcxN0VBMzY0NzMzOUE1NjRCMwotOjEwODQ0MDAwRjNCQzNFNTlFRUIzRjMwNEZFQzhCODIxRkE3REUyRkQ1OQotOjEwODQ1MDAwRUVFNkJFRjZFQjg0M0VDOTY4QkZFQkU3ODlCQ0YwM0VCMgotOjEwODQ2MDAwM0NENjExNUY0QTE5RTkyNUZFN0I5NUFFOUFGODUyRjQ4NQotOjEwODQ3MDAwMDM5QjFCRTE1MkZCNjFDMzNDRENDNzI3RDNBRDc0RkZGOAotOjEwODQ4MDAwRUY3NkUxMDc3NjY1M0I2ODdDRTlGN0JENTAzQ0FENzY1OQotOjEwODQ5MDAwQ0QwOEUyOTdCMjdEMUUxQTI4NjNDRkY3MUZFRjEyN0MzQQotOjEwODRBMDAwNkMxN0UzRUIwRDlDQjBGMjNDMTU5NTA1OTBBRkVEMEEwRgotOjEwODRCMDAwOEQwOEUyN0FFQjg0RkYwMUY1MUJFNEFGRDE2N0Y5Mzk0RgotOjEwODRDMDAwMzI5NUVCNDNCQjdBNDYwNTExREY4RjFBN0MxQjY3QTNGRAotOjEwODREMDAwM0ZBN0RCNDA3RTM5QTYwNjlGNzgxQ0M3RDk5M0UzQzEyRQotOjEwODRFMDAwQkNBMUQzQkFFODk2NUY0M0JCNUQyNzdFOUU4NzcxQTI4RAotOjEwODRGMDAwNURDMjVGREY2MDBDOTc5MERFMkNGMjI0MUJEMkMyMjU5OAotOjEwODUwMDAwRTgwNzdBNTE5QzU3ODMxNUNBRjAzRUMzRTIyQkNGMUU3MQotOjEwODUxMDAwMUI4QkE3NjEzRjdDN0YyQ0M4RjVGMjYzOENFMzQxNjAyNQotOjEwODUyMDAwMkQ4Rjk3MDI3QzczNjZFMzdBNTc2NzUzM0MwRUNGMDUxNQotOjEwODUzMDAwQ0ZFMURERERBMzY4NUZFQjBEQTJGRDBCMEFCNTU3QTYwOQotOjEwODU0MDAwOTRDRTIwQjlCMEM2OTQ4MUYwM0ZFMzM1NTI5RUFGRkY4MAotOjEwODU1MDAwM0VBRTM3Q0VEMkI5QjcyQzQxNUVCOTI3ODVGNjM3QkJEMAotOjEwODU2MDAwRjMxMEM1NDlGQ0Y3Q0VBNUZCOTNGRUY5NEI2RjYyRkZGNAotOjEwODU3MDAwMjA3RTgwNzIyNURFRUY3RDlBNDUwQkM5MUVBRTFGMUM0MgotOjEwODU4MDAwMEFDMzNBNEVGNzhDRjBGMEYwMUZCRjhGRDMyNEYyNDlBNAotOjEwODU5MDAwOEYxQjk4ODZFQjhFRUUzNjA0RkJCQjI3MzhEMEY4RTRCMQotOjEwODVBMDAwNDBBQ0UwRjI4REZDRTNGMTcxMUE5MjA3ODk3MTlCMEJFQwotOjEwODVCMDAwOTU0RjFCMjIyNTc3QzFGQzZCMzM3QzczQjJFM0Y0NDVFNgotOjEwODVDMDAwRkY5RTFDRTI3N0VGREVGM0Q3NDJEMjJCM0E3ODlDRTE5NAotOjEwODVEMDAwQjg0MTlCODE3NEUyQTgwOTFCNjdDNkU5NjEzRkM5MTZDRgotOjEwODVFMDAwRjY4NzQ5RTg4RkMwMDdFM0U5NUVENjU3NTQyN0QyOTk0QQotOjEwODVGMDAwN0NGRTM4OUJFQjIxQTkyMkFGRTBGQzdBOTlCNzM2RDVGNwotOjEwODYwMDAwODRGMjkzQkI5NjcwNUMzN0JEMkYxMkYxQkE3MTI3QTIyQQotOjEwODYxMDAwN0IzMTNGQUIyMTU0NDZGMUMwQTJBNTYxQTI0QjgwNzdDQwotOjEwODYyMDAwMThGNUZGRTMxQjUzMzkzRjgxNkRFMjM4NzMyQTE5RTlDRQotOjEwODYzMDAwQUY3M0Y0M0M0RjYyOEUwOUY0NjEyRUM3QTlGRDdCMUIxQQotOjEwODY0MDAwQjMwOTBFMTVDQkI5MUUxODdENTYyMUJFMjhFMzk2NzVDOQotOjEwODY1MDAwOENGNzdGQkVFRDY4NDAwRkVERUJCNjJCNjVDMDVBNTkyNQotOjEwODY2MDAwNUQ1QjE1RTU1MUNDREY1QzRDRTczRjRFRjBERjU5MjZGMgotOjEwODY3MDAwQUQ2NDIzRTJEQkYzM0NFRTA1RjM5MURFREQ4MEI5NjIwRAotOjEwODY4MDAwNjM4ODJGMTk1MTFFRDY2RjU3MThERTM3OTZGQjRGOEUxMQotOjEwODY5MDAwMTNCMjYwNjI5QzY2NUM4OEYzNkY5NDFCMkM0RTVGOTNGMAotOjEwODZBMDAwNzIwOEU1MDU0QkQyMjMxM0YxMjIyMEUyNTdGQzdDN0VCMQotOjEwODZCMDAwMkVFMDJBRjkzRjQxRUMxRkM4NDFEMEE3OUY0NEZDQTlGNgotOjEwODZDMDAwQThFNkY0MTdFRDU2MDhDRThEQUM5OUM3OTU4NDFDRUE0MAotOjEwODZEMDAwNUI4RjkwNjNFRkU5QjlEQzlDNjM1QTQ3Q0YzMDVFMUUzNQotOjEwODZFMDAwMUI4QjcyMzBDMkU1MjBDODM1RTQ4QjAzRTE0NTc4MDA2RQotOjEwODZGMDAwQkM5MEY4QjAxN0Y3MDFFMzM1OUM2MEUxNkZDMDdDMERDQQotOjEwODcwMDAwNEI1OUI4NzEzNDdGQTY4RTI2QjlDQ0U1QjM5OUNCNjdBNwotOjEwODcxMDAwN0M1QTJGNDI0RTI3Q0JFNzY0Nzk5QzJDODc1MTBDQTFDMQotOjEwODcyMDAwQkM5NTc4MTBFRkE3NDc3RDY0RENEMkEwOUVGQjYxRjM3NwotOjEwODczMDAwRUQ5ODFGMjhDRkE1RDFBOTFEQ0UxQjFCRDNCN0ZDODc1MQotOjEwODc0MDAwQ0Q2NkY3NjU1OEY2QjJDMTM2RjQyRjU1REQ1RTAwRkJGNQotOjEwODc1MDAwRjdBQkZDOUU3MjBBQzA2OTJCQkNFRjEyRkFGOUU0MDI3NwotOjEwODc2MDAwQkU3Rjk3QzgwMzMyQTg1RTU2NjZDMzczRUEyNTdCM0E3QwotOjEwODc3MDAwOUFDOTI4QUY1QkMyQjcyQjE1RkE4REMxN0U1Q0ZFRjU5NgotOjEwODc4MDAwRjUzN0IzMzY2QjVDRkZFQTVEMTY5MjJGNjc1RjQ4QTUzRAotOjEwODc5MDAwRkI2ODRDRjUxNTM5NjBCQ0FDM0Y4MjlFMEVFNUQzQkIzRgotOjEwODdBMDAwNTI0OUJFOUYxNkZDREUyOUZEMTY2QzI1OURENzY3NzhDMQotOjEwODdCMDAwQ0U5OTg4NzVENTc5RThGRjY1Q0FDNDNDNDZGN0I0Qjk0NwotOjEwODdDMDAwREVEOEU4MThDODZGMkZFQThCN0I2RkU2Nzg2NjIyMzkwRgotOjEwODdEMDAwN0JENjExQjkxM0NCQjAxRUNBMzMzRTI1Q0VEREJGNjNBNQotOjEwODdFMDAwN0NEOThGMzAzRkMwNkJGMzcwQThGQUNBNTA2RjMwRTk2NAotOjEwODdGMDAwMTdERjZDRDZFMzdERkRBNUQxQkI2MDFGOEQwNTM2Q0FBMgotOjEwODgwMDAwNUZBRTI5N0FFNzc3Qjc0MEY5ODMxRDA2QkFFNzM4RUZGQwotOjEwODgxMDAwQjFBOTgzQzJEODRERDU1Q0ZEQzlFNzc5NDE0M0MyRkRGQQotOjEwODgyMDAwQjkwNURCMTNDQjhEQTFDNEIyM0ZFOUJFRkM5Mjc3QjY4QwotOjEwODgzMDAwQkVCNjNGQUUzRUQzOTVFQUE0RjM3NzMzMEZFNjVGMzM3RgotOjEwODg0MDAwRkRGNzA2RjlGQUUxOTdGMkY5RDc2NUMxRDdGNjBGQTM1QwotOjEwODg1MDAwRkNCNTdDMTdDRkNCMzFBMjVFMzMxM0YxQTE5RjdFNkZBNQotOjEwODg2MDAwMEFCREM2NjQ2QTNFODE3OUYwQTYxNzRENzRBRkZFNDQxNgotOjEwODg3MDAwQjY2RjE4RjY2RkQyNDUwRkUwNzk5QThBNEU4RDQ2Mzk1OQotOjEwODg4MDAwNTg1REY0Nzc4QUE3OURGRDMxRjMyMDdDQ0U1QUFBNDgyMwotOjEwODg5MDAwQkYzOUJCRDFFMjQ2RkJBQ0IzRDA0Njc4RDBCOTQ3MDk2QgotOjEwODhBMDAwMkE1QzdGOUYzNEI2MDJFM0E3QjQwN0U2REY3MEZEMDdCQQotOjEwODhCMDAwRkNEMjA2MzNGMzdCRjg2MEJEQjg5MENGNjg2NDRGQkQzRgotOjEwODhDMDAwMzdEOTZBNUYwRUZERUEzNzcwNzlEQkMwN0FEMzkwMEYzMwotOjEwODhEMDAwQ0M3NzcxRkVFM0Q3M0Y2NTM0QzMzRjhCREJCNDExMkRGQQotOjEwODhFMDAwQjBERTA1NUUyQkRERDc1MUJGNTBFOTlFRkEyQTFDMzI1RgotOjEwODhGMDAwNEVGRkFGNzIwOTNGQTkzOTYyQUNDMkY5RkZCRUI4MTY4QwotOjEwODkwMDAwNUQ2M0QyQ0Y2NTMyRjgzNEJDMTc2NkQ4NTkxNkNFODM3MgotOjEwODkxMDAwNTc3Mzk3QkM0NDc2NEU1RjFDN0EzN0U3NUI3M0VGREE4OAotOjEwODkyMDAwNEJFRjk1MjlCNUI0REZGNzYwQkYwODk3OTczNjlBNjg4MwotOjEwODkzMDAwQkZFRjE1RDhDOENFN0NBRjhCREJCRjczRURDNkEwOTk1NwotOjEwODk0MDAwRjQ4RDczMTk3ODlGRjZCRDJFMDNERDYzM0YxRjFFRDc4QwotOjEwODk1MDAwRDFCREQ2RjczN0JGNDI3RUI4RjcxOTlGMzdCMDQzNEYyNgotOjEwODk2MDAwRkFDQUZCRjY2ODQ1MThFMUU4NkU0RTQzN0RCNzdFQzM1MAotOjEwODk3MDAwM0NCQTE3M0JCNzRCRUY0NTdFMzZCN0VCOEU1RjVGODk0RQotOjEwODk4MDAwRkVBMzI5Qjc5NkUzOTZBRTcxMkNDRTcyREI2MkY1NTI0OAotOjEwODk5MDAwNEY1NUQzMkIxRjQ3M0FCQ0U2OEJGMUJERDdBMEJFRDRCMQotOjEwODlBMDAwMDU3NDUyQ0NGM0VFNTE0RkRGREY3NTFERTlBNTczMjczNwotOjEwODlCMDAwNUIxREI4MkZGN0U2QzcyNkEwRkM3ODdGNzIyRURERTM5QgotOjEwODlDMDAwOURGQkI0QzJGMEQzMEQ3MzFENEJCMkYwRkQ1QzQ1RjVCOQotOjEwODlEMDAwRjY4NzRGQ0NDNUZENkQ1NTQ1MzY0RjE4RkJGRDU2NEZGQwotOjEwODlFMDAwNzgwMjc0NzUzM0NBQ0ZDNjJFMDNFOUJERkJBN0JDRkQ2MAotOjEwODlGMDAwQkI1QjlDMzFCQTUyQTY2Q0I4NjkxQ0I2RkY5OTgxREE5MAotOjEwOEEwMDAwRjdFOTNCOUI2Rjk0RjhDMkMyMTU2ODU3NzFCODI1RDMzQwotOjEwOEExMDAwOTlBOTY4NjkwOUFFMkI5OURFRTYyRTZGMkVFMUYxQUJCQwotOjEwOEEyMDAwQUY0Njc3NkMzM0JGRDdEQkU2NTJEODk3QkFBRjQ0NzdGRgotOjEwOEEzMDAwNzdCQkM2NUUzQ0REQjFGQ0Y0MDQ3QkVBN0NGRTE2MjAwRAotOjEwOEE0MDAwM0M5NUZFN0ZCMzg3Njk4RkQ5MjhERUFCMjlDMDdGNzczRAotOjEwOEE1MDAwQjhGOEJERjUxRDJFN0VCRjRERkQ4RjQ1REJERjAwRjg1QwotOjEwOEE2MDAwNTRCQTdDNURCODhFMjJBNjk1QTFEQzc0NDdFREQ1NzgwQQotOjEwOEE3MDAwMTdDOTI2RjQzOUI2RDkyNEVEMDBEMkVGRDc2N0IyQzdBQgotOjEwOEE4MDAwRDdDNEY5MUY0MjJFNkUyNzAxMUY3ODFDQzczOUZEODdGNgotOjEwOEE5MDAwQkYxRkMwNzM2QTJBM0MzNTFBRkRCRUZFNzM5RjUxQkNDRQotOjEwOEFBMDAwRDBENkMzRTNDRDM2NEY5NEUyRjAwNkE3OTdGMDUwRjI0QwotOjEwOEFCMDAwNzdCRjg3Q0I5RkYzRTBFNUUyRjczQkZDQ0UyODhERjM1MQotOjEwOEFDMDAwNTYwRUU3Q0Y5RDIyQkVCMjY5ODk5NUZDQTk5QjlDNDFCOQotOjEwOEFEMDAwMEJGNzJGMDQxOENBQTc0OTk1N0ExRTI3MTNGQUQ2OERDQgotOjEwOEFFMDAwQzIxRjY5MkU3Rjg5NjE3QzhDNURDREYzQzJERTI4N0YzOQotOjEwOEFGMDAwNDlDRDgwRjJBRjJCQUZGNUQwN0RCRUYyNDdEQTA3RTM2OAotOjEwOEIwMDAwQkVBRjM2ODhGQTIxRjRCRDhEN0ZEN0FBQTg3RTkxNEJERgotOjEwOEIxMDAwRUY0NkZBOUU1NENFRjMyMjU5N0QxQUY5NERERTI4N0Y5NgotOjEwOEIyMDAwRDc3OTdCRENGQUJEQ0NFQ0I2MDFERTRDMDE2MjhEQ0Y4RgotOjEwOEIzMDAwQzNCQkU5NkE4QkRCMTY4NzNGOUY3NDI4QjU1Q0VGNzU3MgotOjEwOEI0MDAwMEY5QTM2OEFGQjQ1NDgxRTk3MjdDMjYzOTFDQjQ4RjM5QwotOjEwOEI1MDAwM0U5MjVENzUwOEUxN0NDRDM3Rjk3OTlDN0NEQTE0NDQ0RQotOjEwOEI2MDAwM0U3ODUyREM4RjQ5ODY1RkM0MjVGMDQ3MUQ5MTEwQjdDRgotOjEwOEI3MDAwNzcxQTQzODUyODI3M0Y1NDEyRkJDRDZGRDc1M0RDN0NFRgotOjEwOEI4MDAwNUVCQkMyODIzMERGQzkyNzlFMkY0NDdFRkVDMTYzQ0YwOQotOjEwOEI5MDAwMTdDRThDNUI0RjcyM0ZGOTNDMjlFNzEzN0VDMTY0M0ZDRgotOjEwOEJBMDAwRUY0MEZFNUREOUVFQ0MwNkU2MzMwRjg5QjUzRjUzRkZBQgotOjEwOEJCMDAwMzdGMkVGQ0VFQzExRkU2MTREMUJFQTQ0N0I0OEI0NEYxNwotOjEwOEJDMDAwMUUyRjMzOTdGMzZCNjVBNzQyN0UwRkU5REYzQzc2RjBFQgotOjEwOEJEMDAwMTE4Q0E0RjQ5RDlGQTVBNzU4MTc5RkNGMjg5RkUzQzQ4RAotOjEwOEJFMDAwQjk0REM1NzM4M0FENThEQTc5NzlBMEYzMUE4ODFFN0YyMQotOjEwOEJGMDAwMjFFNDkwM0NCNzYzRUQ0MzA2MjExQzhENEQzNjk1RjE4MQotOjEwOEMwMDAwN0I2QUE1QThBRjc3MzFBQjA3RTlFOUFGMjJBRkQ1Njk5OQotOjEwOEMxMDAwODUyN0U4NjlDNjVDOTcwREY5OTlGQzJFQzAwRkFENjlGMAotOjEwOEMyMDAwREJGMEY5NTc5MUY3RUFCNEMyMTNDNjI5QzgyREE1RjFCNAotOjEwOEMzMDAwRkVBQUYzOTI1REY3NDM3RDA3REQ1Rjc0MDkzQUM5NjZDQQotOjEwOEM0MDAwNjE0NUMxNEYxRDJDNzg0RUExQkNBRkY2NDQ3ODY3QjU4NQotOjEwOEM1MDAwNzIzOTEyQUQzMzkyRkM5MjcwQkY2QUU2OUQ2NEJGRjYyMgotOjEwOEM2MDAwNzM1RTFCMTA4RjcyMkJGOUJCQzkzOUM1QzJERjExQTEwRQotOjEwOEM3MDAwMzg4MkE1OTJEOUQxQkU2RkJEMzI0MEVCOTBFN0U1RTdDRgotOjEwOEM4MDAwQ0Q5OUQyQTM5MEZFOENGOTJGMjlFOTE0MkYwRDg4MjdCNgotOjEwOEM5MDAwQjNBNUIzQkVGODQxOEFCMDc3NTk1MkJDMjAxQkY0NkUxRAotOjEwOENBMDAwNkMyN0Q3MDk2NUNBQTNCOUNGMTFFQTI4RTFGMTU2RDJEQQotOjEwOENCMDAwNEI3MTVDN0MzRjczQTQ0QUZFNzY2QzY3MUM3MzYxRkM0RAotOjEwOENDMDAwRUJDMzUzOTE5NzM4NDlCRUFGQjdGNjFCOUY5ODg0RjcxMwotOjEwOENEMDAwODNGMDFDNDAzRUEyNUVDODNDODY4NEZCNDE5QjQxOUZDMgotOjEwOENFMDAwNDYzQjREQzY3RkY1QkE1MDk5OEJFQzkzREUwOEZBNEZBMAotOjEwOENGMDAwOEMxNTY2MzdDQURCMTQ3REE4MTRDRjJGMzkxRTBDRURGNgotOjEwOEQwMDAwOEE3OTFFNDJCRTAzRTU4Q0JDRkZEM0I0NjRCQzE3RTM3MgotOjEwOEQxMDAwNTRBMDdGMDRDQzc4N0U5M0Y5RjkzNURENTU0NUVGOTU2NQotOjEwOEQyMDAwMjlBNTJEODg1RkZFQTU4Q0JFNTMzMEJFQTc5QkYyQTQ1QgotOjEwOEQzMDAwRkNCNTVDMUZGM0VGM0M2QTY0ODBCRjMzODUzRjg3MDk1NQotOjEwOEQ0MDAwRkY3Mzk2MzhENzYzNDJGRjhFQzVCQjIyNUIzMEVGQkIwMwotOjEwOEQ1MDAwNzM1RTNFRERGNzREQ0UyQkY5QUFGMUNFMzNBOTAwOTAxQwotOjEwOEQ2MDAwQ0JFMkUyNTg4M0NDNUNDRTg4RjM5N0Y0MkRFMzVBQTk4QQotOjEwOEQ3MDAwMjNCREM1QTg4OUZGMkUzQkZBMkJFQkQ4QUY5MDM3MTI0NQotOjEwOEQ4MDAwMzg3OENGM0ZDRTFCOTk3NjEzRTY4RDk4NTFDQjE3RjVFNwotOjEwOEQ5MDAwQjgwQzkwQTM3REY3RjkyQzZFOEE3QkY1RDVFMzc3MTg5NAotOjEwOERBMDAwQ0MzQjE1NzE3RjhGREQ3NEVENTBDQTM3MTVFNUQ3RDZGMgotOjEwOERCMDAwNjJERUY4N0QxNjk2MzA1RkZDRkFENEE0RjEwRDMwQkU2OQotOjEwOERDMDAwQ0QyRERBMDc0RURFNzBBRDRBRjE1RjUxM0Y3MTJERTZEMQotOjEwOEREMDAwQzlEQzY3NDgxQzhGNTA1MERFM0YzNEM3RTZCQjdERjNDQgotOjEwOERFMDAwODY3QkQ2RTZDN0U0MzlDOEY3OEQzOTYzNjM3MjdERDVEMwotOjEwOERGMDAwREI5MzNBMkU3MzIzN0Q3RDRBRjlCQjUyM0VGQjlEM0NBQgotOjEwOEUwMDAwOEYyNDk5OEYzRDlBQTM0OEJENzgwMjhBREM1NUQzMTdFOQotOjEwOEUxMDAwRDI3NzBCRkFFMkJGM0Q3NTFBRUFDMzMyRkVFQjVGRUE4NgotOjEwOEUyMDAwQTUzQzVFRDAwN0I2RTc5MDNFNzBFQUJEQkQwQ0Y1Q0UxRQotOjEwOEUzMDAwOTM2NDE3RjhDRkE5REM0RjA0N0EwNTdFODdDNkRDNTMwQwotOjEwOEU0MDAwNDVGRTUwNEM0RjFEMTY3N0ZFRjM4NTlDNDIxRDFFRTlEMgotOjEwOEU1MDAwQzFCRkY5M0I4RkU5QjEzRTU3RUJDRUM5OENEOTg3Qzk2OQotOjEwOEU2MDAwRUI3RDJEODdFN0I5RkI0QkFCMzcyMjNGNjA4RjJBRjRCMAotOjEwOEU3MDAwMURBODM1QTU5RjkwREVEMUY0QzJCNTYzRTNGM0QwRTcxQQotOjEwOEU4MDAwRUQ3QzkwRTczMTZGMzdGNEJCRkZENzcyRjg3NzYyOUFDOQotOjEwOEU5MDAwNUU3ODk2RkM5RDI3ODNGQ0ZBNENCRDFBNUM4RDdBNjgzRgotOjEwOEVBMDAwN0RCRDBFMzUyRjU2MUVBQ0JCODVGNDgxRTlCMDBGRDhDMQotOjEwOEVCMDAwNTcyODg3QzNDN0JGN0Q2QTAwRjNFMkZERjA5RjAyQUY2QQotOjEwOEVDMDAwMzY3OUU3OTA1REIwNjlCQUQ5ODY3MTFDN0ZFOUNDODVBNwotOjEwOEVEMDAwODRGRjc2QUI4NkZCNEY1RTY3MkNDRTZDQTVGQkNCNkIxRAotOjEwOEVFMDAwNzYxQTZBNTE4RkFBMDBCREU5NUY2MUJEMDVFOTEzNkI2RgotOjEwOEVGMDAwM0RDMDk3RjJGNERENjUzRkIwNjFEQ0JEN0ZCOUVDQ0ZEQQotOjEwOEYwMDAwRTNFN0Q4QTY3ODAzREYyQTI3M0YyNzhCQ0ZFMzI5REFDOAotOjEwOEYxMDAwQzlGNUIzQTMzOUM2MDRCRkZBRDExQzk1RTA3OTc1QTA5MQotOjEwOEYyMDAwNzczQ0UyREMxRTM1OTI4MjdBQjI5RjY5MUZBM0ZEQ0JBQgotOjEwOEYzMDAwQkMzNjM3Rjk3NzE5OEZCMzNCOTdCOUM5QkY2Qjc2NDYwMwotOjEwOEY0MDAwRUVCRThDRjQyODk1RTJDQ0QyQkUzOEZEMDJGNzhCNERGNAotOjEwOEY1MDAwQ0RGNTlENDZGQ0E4RDA0NzFFRjgxNkMyRUQ2RTU1RjgxQgotOjEwOEY2MDAwODkzOTlGMjk5QzZBMUI4MzdFMkM4QjMzRjI0MEFEOUJGMQotOjEwOEY3MDAwRjI2RkM4MkYzMUU4MUI2RDc0MEU3QjlDQ0M4RUYwMTlGQwotOjEwOEY4MDAwMUZBODUzOTUzODM5MjNGOUM2RjhCRUZCM0I0RUYyOUYxNAotOjEwOEY5MDAwNTY3M0I2QzY4NkMxNjlCRDY3MjYxNDZERkIzMjIzQTYxQgotOjEwOEZBMDAwMjcxQ0ZDRkIzNDE1NUY0QUZENDE2N0Y2OTE5RDUzMzM0NgotOjEwOEZCMDAwMURFQzQ2QzRCQjk1RDEwMzNBRjRENzNCN0I0OTdGNkM4QgotOjEwOEZDMDAwMEMyOTM0NEY2M0U5MkYyOTNGNkU4MUM4QzNFQUNCODc1MAotOjEwOEZEMDAwNTIyMzk0MUY2NkNFNEQxMTdFQTYzNjhFOTdBQzk3RUMyOQotOjEwOEZFMDAwNjJGNjE0ODczRkM4NERDQTFCOEJFOUYxMkRENDRFOEUxMwotOjEwOEZGMDAwNjcxNDcxODY0NkUxQzcwMTQwNTE3RDQ2QUUyMkM2NURDOQotOjEwOTAwMDAwOUUxODlGMTBGMzMyRDU1RDExRUY3NzU4M0YxOTI0MDk1MAotOjEwOTAxMDAwQURDQjlEODZFQkJERDdFQUNEQ0Y4NUY2QzdFQTc1MDQwQgotOjEwOTAyMDAwQTI2M0VEMjlGNDVEQUFGNTRBQUY4NkZFQzg0MDE5Q0ZDOAotOjEwOTAzMDAwQTc0REM2QTMzMjMxRUZBMDdERDEwOTI4NEZBMjJGMEMzNgotOjEwOTA0MDAwOTQ0RkNCRjM2NzM3OEVCRDg0RjJEMENCNzc3RTNDMDE1MwotOjEwOTA1MDAwRjE4M0Q1MzJBMkM3QTY5RDE3OTc0RjVCODFFNzMxRjYwMgotOjEwOTA2MDAwRkZBMTdDNUE4RkEyNkQ4M0U3NzVCOThFQzQ3QzVBMEYxRAotOjEwOTA3MDAwM0YyRjE5RDc0Q0NFQTMzRDlEMTM1Njc5QkU1QjY0Q0JEMQotOjEwOTA4MDAwNjM2OEI3RUYzNDUxOUVDOEE0OURBRjFDNDZCRkU2MjQ2OQotOjEwOTA5MDAwMzMwQjUxOUMzNzQ5N0YzOEUyOUNFQUNEODU3OUNFN0NGMQotOjEwOTBBMDAwRjRERTk2MTUwQ0YzQjA5RkYzRjA3Qjk5ODlGQUMwNDA3QgotOjEwOTBCMDAwRjYwMEM1M0FFMkVDQzY5OTEyNkZCRTI2N0I0MEYyNkIxMQotOjEwOTBDMDAwQkZCMEFGM0U1NEEyRjc5NkUwRkU3NkVCRURGREREQTMxOAotOjEwOTBEMDAwRjFFN0NBRjhEODAwNzkyMDNERkRFNzgxQzg3QjY2QjU4NQotOjEwOTBFMDAwOTFFMjg0QjhENTVEN0Q3NEYwRDVFMjYwNEI1MTc2RjY5RgotOjEwOTBGMDAwMTMwNzUzNDU1RTk3QUE3MEQ2QzExQzNDRUY0N0M2QzEwMwotOjEwOTEwMDAwRDRFRTExMTRERjMyQzVFMjYwNjFENjRGMUM0QzE1NzFFQwotOjEwOTExMDAwQTU1NTA2QUQ4RUZDMzRCQjRENkU2RTQ3N0I4OTdGQjU4MQotOjEwOTEyMDAwNzU2NzdBOTBCRkY5RTc5RjdDMDYzRjA1QTAzQTI2Qjg5RAotOjEwOTEzMDAwNTA2RjY4MTNGMDZGQjhGODM4RDg4M0I5RkRDNEMxQjY2MgotOjEwOTE0MDAwMEFCREVEREQ1MjVERDgwODcwRERDQTM4RkYwREY0QzhFOAotOjEwOTE1MDAwNzg5ODhFRUNEQUU4M0QwNUI0NkU2NThBOTlENkZERUUxNgotOjEwOTE2MDAwMUVEMzM2RjQ0RkNEOTI3MUFFM0REQ0JGMzY0QkM0QjM0NwotOjEwOTE3MDAwREU5RDUyNDJGRUE3ODFFMDNDQUIzRDMxNUVGMDMzMDEwMwotOjEwOTE4MDAwRTdCMzk2MkFGMkQzREY3OUZGNjRGMkNGQ0Y0MUZGRkUzNwotOjEwOTE5MDAwOTBEODdEMDkyNkZDN0NFRTc2N0U5RkRFQkQ1REExRUYzQQotOjEwOTFBMDAwOTkyMjlBRTg0ODI3QjVEMzc3NEQxNzAwMUJERDg0QUM4OAotOjEwOTFCMDAwMzcwMDU4NzMwNUJDNTY3NDBBRUE0M0VFMzYyODgzRDI0QQotOjEwOTFDMDAwQUZBRTU2MDMyRTY4QjdGNTcwMEFGOTE1NTczOUREMjI5MAotOjEwOTFEMDAwNkY4REM3OUQwMzZCOTVFMDMwM0UyRTdEQzcyQ0QwQTZDQQotOjEwOTFFMDAwRDM3MDlDNTc3MkI5M0ZFQUNGQjlDNjdFQkYyM0QxNjYxMAotOjEwOTFGMDAwMTBGMTYzMzE1RjBCODM3Mzg3QTc0RUUxQ0Y1NUUyM0JEQwotOjEwOTIwMDAwNzlDOUYwOTBFM0I1MTk5QUNERThERjhCMTZGMEVGQTE5QwotOjEwOTIxMDAwOUMzNTZBRDNDOUVGOUM1RTQyREYzRDZBNEI2RDZFQUZGMQotOjEwOTIyMDAwRTVGNTQ0QjM2NzJENTEyRkQ1N0Y0M0U1MEEyOTczQTc5MAotOjEwOTIzMDAwRTM3QTc3RTc3MkZEMjYxOUNFQjMzQjEyQ0JDOTcxOUY1MwotOjEwOTI0MDAwRTQ3QjVBQjM5ODZGNzhDRTkwRjNFRjMxRUQxNkZDRjZDRAotOjEwOTI1MDAwRUM5QTYyNzEyRTFFOEFBM0I0MTlEQ0JGMjlBNkY4MjlFNAotOjEwOTI2MDAwRkZBRTUxNEIzRTg3OUJBRTgwM0YwNzNCNkFFOEZCNzRFNQotOjEwOTI3MDAwNDAyRjVDOEY2MzdDRkQ4M0JGRTE1NDkwNUVEQTFDMUM0MQotOjEwOTI4MDAwNkZGRkE3RUI0RTVFRUZGQkI5MjUxQ0JFMEU0RUFGNkQxOAotOjEwOTI5MDAwQUI5NTIwODcxNzVGRjdDNUZBNDkwQzc5NUYyRjVGN0M4NAotOjEwOTJBMDAwNTdGMTNDMUUyRUE2N0VDNDFGMDJGNzE4ODhFRTc2NTk5MQotOjEwOTJCMDAwRjhGRDRCQzlBRjI4QjEwN0VENEY2MUVGMEU0MjY1MUFCQgotOjEwOTJDMDAwRTNBMTI3NTZEMkY3ODkzNkQ1MEY0RUMzNzhFOUY4QTkxRQotOjEwOTJEMDAwMzZEQTQ3RDMxRTdFQkZCNzcxNjlBNDEwRjFCQUE5M0EzNgotOjEwOTJFMDAwNTJEMkRDMEY1QzcxMDI1NUYyNTc2ODM3RDNDOUY4Nzc1OAotOjEwOTJGMDAwNkVEQTEzRTM3RkM5NzFEREI1MTk1QTQxNUUyNkRBNEI4OAotOjEwOTMwMDAwRUY3NkJGODJFN0RENkQyMUY5REFCNDM0RkEzOEZBMEY2RgotOjEwOTMxMDAwN0MxOUJFQTE1ODdGRUFBRUI3MjcyODZFRUE0NkZBRkM1MAotOjEwOTMyMDAwOTlEREMzRTk1RUUyQ0NCNkM0N0I1RTZDNkQ2MjVDOTE5NAotOjEwOTMzMDAwQjVBN0YzRkI2QzlEODlFRkYxM0U1MzQyQkZGM0UyOEM3RQotOjEwOTM0MDAwNUNCRjU5NkZGNDhENDBGREYzOUE2RkYyM0M4QThGRTY1MwotOjEwOTM1MDAwRTkxODlFRUI0NzE2N0VGRTgxN0I1MjA1QkZGNjk0QzQ0QQotOjEwOTM2MDAwQ0I4M0FBMDFDRjE3REE4REM0NzgzRUNGMUY5NUVEMUJCMgotOjEwOTM3MDAwRjE3Q0UxNUMxQkM0Rjk3RUY0RUMxNTI1NzhCRUE3QkEzQwotOjEwOTM4MDAwQUYyOEMxRjM1RDZGRThEMDkwM0U1MkIyN0RENzYyOUNBQQotOjEwOTM5MDAwRURGOEI1NUVEMjBGNjVCRUVDQzVFMkREQjRCQ0FGRDc2QgotOjEwOTNBMDAwM0ZGNzU1RTU3MTlEOUNGRjJCQ0E2M0ZDOEJGNzlCRUM0NwotOjEwOTNCMDAwRjlCQjNFNjAyMUY5QzJFRkI1QzZGQzc3MjdFOUZCNUUzOQotOjEwOTNDMDAwNjdDRUU5MTRFNEM3MDM4REY3ODlCMDk3NUM2NjE2NDA1MQotOjEwOTNEMDAwM0RBQ0EyM0E0MkZEMkFGRUE2NjNBODBGNEEzRDM4Nzk2OQotOjEwOTNFMDAwRkQ4QkM1QjlBRUM4RDMwRUEzNUQyOEZEQkRGNTYyNkM3QgotOjEwOTNGMDAwNzNGMDUzQUU2RjNGQUE5MDNGRDdFQzBFQTQ4RDIzRkJDMgotOjEwOTQwMDAwNkFGNkU1N0FFMjJGRkY0QUY3MjU1ODhGNjI0NzNCNjVGNwotOjEwOTQxMDAwREVBMzJENTQ3RjdBRTcyQ0FBRDc5OUMzNjFCNEM3MUE2QgotOjEwOTQyMDAwQTExRUNCQUJBRTRFQ0M3RjM2RUVFMEYxMjA2OUZGQzI4MQotOjEwOTQzMDAwM0FERUMyNzVBNDM4QTM0NkM0Q0YyNkQ0QUY2MTg5NERBNQotOjEwOTQ0MDAwMkFGNzdCMzczOTk5MjdDMDUwMUY0RUI0MTc2NTVDNzdEMAotOjEwOTQ1MDAwOTM5NzdGM0Y2NjUzOEY0MkRGOTFDQTMyRkE4QUYzRjFDNgotOjEwOTQ2MDAwNUM5M0UyQkJGN0U3NjlERDg4NzczMkNFQkUyMDRCRUIzOQotOjEwOTQ3MDAwQ0NFM0Y5Njc4NTA4QTc5RkUyQTJBMDFDMzFDODdCNUJGQgotOjEwOTQ4MDAwODlGNzBGMEZFRUJEOTlGNEExQ0Y5OTc3NTBGRkY5NjhENgotOjEwOTQ5MDAwQzE4NEY4RkIxQzcxNEY3NDhFQjgyNzhBN0MzQTlDQzQzNwotOjEwOTRBMDAwQTdFM0NCMEQ3MUY5NjhFMUZFRjIwQUUyRjJEMUUyRkIyQgotOjEwOTRCMDAwQzVFN0EzODUxM0Y4MTlBN0ZGNkNGRDIyOEE3QkZCMDE4MgotOjEwOTRDMDAwQ0Y5NzhDODlFMTYxMDMxMzdGMUJBMkVGRDJGRDk3RUQ0QgotOjEwOTREMDAwMjZGMkFCMzU4ODdDNTQ3RkZEMzFCMjU3RkM3ODlGODZFRAotOjEwOTRFMDAwRDNBM0M2RUY2MTczN0RBODAxRUM0MENBQ0IwRDI1RTY3RQotOjEwOTRGMDAwQUQxRUZDOUFFOTUzQjYxQkM4N0ZGRTY2MTIzRENBN0RCRAotOjEwOTUwMDAwQzk3RDM0RjQyODlDN0U5MkQ2OTk2Q0ZGMjZGQkMxQTVCOAotOjEwOTUxMDAwRkQ3QUIxN0NFOUZEQUY1OTFFN0U1NUJFRjREOUQ3QzRBMgotOjEwOTUyMDAwOTdDRThCMjcwQzhEQTY3OUJFODY3OEMyMDdFRThFMkMzRgotOjEwOTUzMDAwNzQyOUNBRkNFMUY2REQzQzdGNzg4MkRFQTZGMUY4QTU0RAotOjEwOTU0MDAwOUVFNzM3MjRDNzcxREQxMzI4NEUyOUUzQzZFNkU3RjQwQQotOjEwOTU1MDAwQzFFNUM1RDRERTgzNzk1RjhEQkI1MzI5REZBMERFNUQxNQotOjEwOTU2MDAwNEY3QTc3NzJGQzcyM0VFQjlFODA0N0YxMzk3QjlERUUxRAotOjEwOTU3MDAwNkZGRDRGRjMwNkYyRjNDNTc3ODlEREFDRjgyQkU2MERFRQotOjEwOTU4MDAwMENDOUZGMEFGMUNCOTc2QzlGNjZGOEUyRjBBNTdBMjQyQwotOjEwOTU5MDAwMjhGMDIzMDdDRUVCMkFDQkU3Rjg5NzIyRjI0QkNDNkFEMAotOjEwOTVBMDAwODAzOUUyRkEwRkQ0RUZDQTdDQUUxRkJGMjRGMjkxRUVFRAotOjEwOTVCMDAwNEI0REExN0JGRjJFMjNCRkFGRTBEMkYxQkMyOTk2RUIzMAotOjEwOTVDMDAwQkQyQTNGMTNFNTAxM0ZDRjg3NUZGODBFQzNGQjY3MEY0RQotOjEwOTVEMDAwMUI0Mjc0MEYzRkQwNjhGM0EwMUM5MzdFMjczOUZFODM5MwotOjEwOTVFMDAwMzk3QzNGMTc0QjQ3REVGQ0ZGNURGRTcxQUI5Q0VGNjJBMQotOjEwOTVGMDAwRTM2RjFCMDAwNjcxRjQ5NTRDMEYwM0Y1MUI4OEJGMkMxRAotOjEwOTYwMDAwQzhGN0NFQzkyNzdCNUMxQjRENzE4QjhCRTQ0QjI5RTVEQQotOjEwOTYxMDAwQzBCNzUxNEVFRjMwQjlEMTdFNDAzRjBBQzlDN0I1MzkwNgotOjEwOTYyMDAwRDJGRUU2REYyNUI4QUY4MEU0RDc0NzE2NkU0RkM4RkIwMQotOjEwOTYzMDAwM0Y3MkZGM0YxOTEwREVGRjlDOUVGNzZFOTYzNzgwNzhEMQotOjEwOTY0MDAwN0VCQzRBQTNGQjAzQUI1MkI5N0M4OTNFQzFGMzg3OTIyRgotOjEwOTY1MDAwRUZDMTI0Q0IxNTc5OEY0M0NFNzc3RkZFRkYyRDVGN0Q0MQotOjEwOTY2MDAwNThDMkU3N0ZDODU3NDFDRTkyRkQzMjYwOUNGNkJDRkVERgotOjEwOTY3MDAwMDE5MUM3RDlBQjg5N0MxOUJBMEYyMUQ3RTVFRkU1NzlGQwotOjEwOTY4MDAwNzdCRjEwRUI5M0VGRDcwOTM5RjA1OUJFMTY0MkJDM0FCOQotOjEwOTY5MDAwRjUwN0IzMTlFM0EwRTVFNTlDN0YzNjc5NkQxNDQ3NjhCQgotOjEwOTZBMDAwMEFGMUZDOUFBNkE1OENFQzdFNzlERkI1RDJFNURCODVDNAotOjEwOTZCMDAwRkQ1NkJENkRBM0VGOUUzNkVERENEQTNFOThGMjBGN0NEMQotOjEwOTZDMDAwQTRERjlERkUwMzdGN0YyMkRCQjcwN0RCRjk5NzQ2MTJGRAotOjEwOTZEMDAwRTIxNTE1NUY3RUJBQjJCNjlDRDY0Qjc2QkJEMzk0NzhCMgotOjEwOTZFMDAwOEYyODkyQ0ZGMzg2RTRGMzRGN0RGMDA1RkIwNEZBOURCQgotOjEwOTZGMDAwQUFFNzc5REU3RUE3NjZBRkEyQkMwM0VFMEY0RjcxRjczMwotOjEwOTcwMDAwOTIxRkE4NjkwNzA5MDk0NjQ5QTc1OEZGQTM3Q0MyOUI3NQotOjEwOTcxMDAwQTYxRDU1NjVGNEZEODE5MEE1OENCRTVGRjM0N0ZFQkQ4NwotOjEwOTcyMDAwQTc1Mzc3RTUwNkY1REM3RkZFNUI1QzZGNkE3OUYwN0ExQwotOjEwOTczMDAwRDQzMzhCNjAxRTU0NDk0Rjc1NUY1RjQ2RkVDMTI0QkExNwotOjEwOTc0MDAwOTNGNEQ2Nzc3RkY0QkJFNjYwQUIxMkEzQzdGNTA2MkU4MQotOjEwOTc1MDAwMjdBNTdDN0IzOURGQ0RGREQ1NEU5MTNGRDgzMzk5Q0QwMAotOjEwOTc2MDAwQjZDNUNBMzY2NzYyNUVFNThBQkM2QjVGQzZGNUJDOUM0RgotOjEwOTc3MDAwQ0ZFMzA1MzJDRTVFNkMwNkVCNzNGMEY5Nzg1ODJDRTIzRAotOjEwOTc4MDAwRUM5MzQ1N0UwNDBCOTg2Mzc5MTE4MzJGMUM2Nzk3RUI0QwotOjEwOTc5MDAwOTM2NTE5Njc0RjM5Mjc3RTVGQzA2RTI0QkM0ODZERTcxQgotOjEwOTdBMDAwN0M4MzAxNUVBMDlFN0Q3NUI0NzczQ0RFREIxQURBMTlGRQotOjEwOTdCMDAwQkUxQUUxMzUwOEMxNEY3OUFBOTFCQjJGQzNGODQ1ODY3RgotOjEwOTdDMDAwN0EzNUM2MkZCNjJDMTlCMzBGRTNBQUVBRUFERTZGRTBBQQotOjEwOTdEMDAwRDFCODNCRUNENTY4NjI1NkJBQkNCQTAyRTIyRkNEQTUyRgotOjEwOTdFMDAwODhGRkQ1QkYzNUYwN0NDNkQ1MjkyNEVGM0IwQjFCMjg1RAotOjEwOTdGMDAwOUZGMUY0REJBNjg0N0IzQUM5Q0YwMDVCRUU0MkJGRDE3OAotOjEwOTgwMDAwRTBGNjM3Mjk3RTkwQkE0M0U5Mzc0RkI1QUFDMDQ2RkI0OAotOjEwOTgxMDAwQzRGNkU4ODc0QTZERUYwRDU0QTI1RkU1MUU4NTdGM0JENQotOjEwOTgyMDAwMTI1NkFGQjhEMEZFNTc3NUE4NzdDQ0RBQzlFRjdEQ0YwNgotOjEwOTgzMDAwRUE3MDU0OUI4OTlGMkEzQ0ZFNzJCNTkzRjhBNEJBRkE0OQotOjEwOTg0MDAwMDYxRERBNjk2QTBCQTNFRkI0NTUxNjcwM0ZGNkIwNEVFOQotOjEwOTg1MDAwQkIwRUNGRkRERkJFRDBGNzFCNTcxQjVFMTBDQjhGNDM3NwotOjEwOTg2MDAwNzAzNTlBQTIwNzVDQzVCMTc4QTBDQzhCMUJFOEZCRTdFQQotOjEwOTg3MDAwNTIxRTI1RUJCM0U3RTlCMTQyMUVGNUU5RjM0OTc4M0MwNgotOjEwOTg4MDAwNTAzRjg5REYxMjlGRkZDREMwNDgwRkZCMzdDNTRDRjcxMwotOjEwOTg5MDAwQzEyNDVFQjdDOTNDRkYyRkI4NUZCNzQ4RTREQjFDNUI0RgotOjEwOThBMDAwRjM5RkEzRjk3RDc3MTk0RjA5RjIzQzI5NDM2NDY1MUVBNAotOjEwOThCMDAwQzEyQkYyQ0QwMEVFN0I4NzQzRDczNDkyRkM2MTREMzQ0RgotOjEwOThDMDAwQ0U2QUZFN0RCNUEyRjYyMUNCMkJDQkYxNjk2NzBBMkNCRgotOjEwOThEMDAwRTFEOEFFMDU0NTQ4OTcwMUMwODM2MUZERTA4MUIxODBDNAotOjEwOThFMDAwREY1NzUxNTdBN0QwQjlBOUVCRThDQkQyNEM3NTY0RDE1QgotOjEwOThGMDAwQjlBOTBGRjJGMzYxMDU3QzNGMzI5RTJCRkQ5NjlGRTVERgotOjEwOTkwMDAwRkI2RTQ2M0NFQ0JCQkZCNUM0Q0FFRjZGODlGQkMxQTk3NwotOjEwOTkxMDAwNEJERTdFMUFFRjQ1NkQxMUZFRTM3RDdCMkVBNURGODVDNAotOjEwOTkyMDAwMzhCQjVBNTU1MDRGM0RFQkE4QTNERjQxQUEyQkUwRkFCNAotOjEwOTkzMDAwNTJBQURBQ0JFQ0I2NzhGQ0RDNDc3OUI1ODM3N0YzRkMzNgotOjEwOTk0MDAwNDA1NURDN0Y1NjU3M0JCNzIyM0M2QjlDM0VDQTFGRkVGRQotOjEwOTk1MDAwNDY1Qjk4N0UzQTYxOEZGRDM4QzVFOTQwMkZBMjdCQUUwOQotOjEwOTk2MDAwMjc1RjUwQTQ1RTk0MjAwRkE1REQ5NjZDOEZERDUxRjAyQgotOjEwOTk3MDAwQkZBQjI3MDVFNDdDNUZENUNFNjI4OUY2NjY1RjdCNjk2NQotOjEwOTk4MDAwM0YyNkRCMTM0OUZEMDdEMjdGOTgxNjQ4Qzg5Mzc5NDBEQwotOjEwOTk5MDAwOUNCQjk0RUZCOTgyMzdDQUZDOTlCRUZCQ0UyQzY4QzE0MAotOjEwOTlBMDAwRkIxMjIzOTAyOEM3QzZGMjg4OThDODJGREFBMDU4M0QyQQotOjEwOTlCMDAwQTgyRjBEOTQ0N0Q0OTdFN0MzOUEyRkUzRkVDOEU2MkI1MAotOjEwOTlDMDAwRjAyOUYzOTA2NDlFOTEwNUYzNEQzMkNFQ0YzN0IxNjAwQwotOjEwOTlEMDAwQkU0OTA2RkU3RTA2QkYzNzJERjM0NTVBMEQ2RUNBM0ZCRgotOjEwOTlFMDAwMDlGQzk4NTExQzUxOTk1MjRCRkVCQTc0QUY5MUYwRUY5QgotOjEwOTlGMDAwMEMwQjZFQzRFRkM3MDdBNkQ5RTg3RTM4REUyNzQyQkM0MQotOjEwOUEwMDAwOEYyQTJFMUE3NzdDQUQyNkRCRUJCMDdEREY3NzA4RUI1MwotOjEwOUExMDAwMThENUE3MEZENTcyNTAwRkIzNDAzRDdFMUZCOUVGQkVDQQotOjEwOUEyMDAwRjQ2Q0ZFQkRGNkU0N0MxMzk5RjcyNEUzQzBCOUMzOUY0MAotOjEwOUEzMDAwNTNEMDJGOEE2RTdGQ0EzRkY4ODFFODU3Q0NDN0U5RkMyNAotOjEwOUE0MDAwQkU5QkY4NDY1NjJCQ0Y2QjhBNUVDOUVDRTg5N0FGOTY2MwotOjEwOUE1MDAwRkNDNzlDNzhBRUVCMTU1RjMxRDJFNzdBMkJGRjVFNDBGNgotOjEwOUE2MDAwMTdGM0I0RUJBMTdDNzdDMTYwRUVENzYxRUVCRDNBNjIyQgotOjEwOUE3MDAwRDgxREY0N0IwRjlCOUNEQTZCMDU5OTMxN0M5MkVCNjJDRAotOjEwOUE4MDAwMUJGOEJFQ0ZFMEZEMzAyNTM2REY5OTc5N0YyQjQ0RkRGMgotOjEwOUE5MDAwQUFCQUM3QzRGMTMyNjlGRTREN0RERjZCMDk1QTUwOUVFOAotOjEwOUFBMDAwRkNCOTgwRjFFRjhDMjZFOUJCRjJGOTY3ODlGRjgyMkZDMAotOjEwOUFCMDAwQ0JGOTA3REE5RkM0Q0YwQkU5RjExMkZGMDZDMkI3NDAxQQotOjEwOUFDMDAwQjUzOEE3MjMyOUE0N0Y0ODdDREJCNzZDM0I3RDg3NzAyMgotOjEwOUFEMDAwRkZCMjEwM0RDRjU4OTQ5MDFFRUZENTVBQTIzMzkwMzM2OQotOjEwOUFFMDAwMUVERkYyNUYzN0UxRjczQ0NFQTQ0NjBCRjE3QjIwRDFCRAotOjEwOUFGMDAwODdGNTVFMkE2NzQ2OEY2MDk5MTU1REMxQ0JDM0EyNUI2RgotOjEwOUIwMDAwRjBGQjIwNTkwRkJGRjgyRDJBRTM3OUU2MzI3NkFFMjAxQwotOjEwOUIxMDAwRjRBRDgwOERCRUNCQjVCMjE3RTU1Njc5NTIxRTRCRDI0RgotOjEwOUIyMDAwNzcwQzUyQzRFRjA3NjVEQjhDQTQ0RjY2OEJCODFFQUI3NQotOjEwOUIzMDAwMTE3QTNENDZBMEEwREM5QTUzNDY3MTNDMUI3M0VGRThCNgotOjEwOUI0MDAwQzVGQTdDMTNGRkRFMDEwM0ZDQzdGQTYxQzUzQzFGODIyNgotOjEwOUI1MDAwRjE3REIzN0NFMTlGNjY5MTAwRkQxRTYwQjE4M0ZBRjc1MQotOjEwOUI2MDAwRjFGMTFEMjYxMTlGRTJGMzFGN0E5NkM3MTE2NTVFMkY1MgotOjEwOUI3MDAwNjNGNjAyRDQ4NzZDNkU5NjUwOTZERjAxNjFBQUJEMDAzMQotOjEwOUI4MDAwRUZGREI3NEFCRjlGMjhCRjk4RTJDQjJEOENEMzk3MEUyRAotOjEwOUI5MDAwNURGQkMzOTFGNEJCMjRDRkZENjgyOEYyQ0RFQjhDODkyQgotOjEwOUJBMDAwREY3NTk2Q0YzRjE0NzE3QkU1OENGODdFRTExRDI5QkVGMQotOjEwOUJCMDAwMjE4NTk5RjhCQjI0MzMyNkUwQTc2OEE3Njc1NDE5MURBRgotOjEwOUJDMDAwQTRCRjNEQTE0NzNFOTUyOUYwQzMzMThEQUZDRjUxRTNFRQotOjEwOUJEMDAwNTVGMEY3NDBFNEY3MDMzMzdEMkFGOTA5OThBRjUzOEYyNgotOjEwOUJFMDAwNzIzNUYzQjg5N0YyMDUxQkNDRDE0MkZDREQ5NjM3Q0MyOQotOjEwOUJGMDAwQkVDQjcwRkNCMzc1NDdFRkE0Nzg2MUVFQTEyMzk4REY2QwotOjEwOUMwMDAwNzFDOEQwMzEzRTBERTU0OEIxRjg5RTA0MDY2NEExN0NEMAotOjEwOUMxMDAwMjBBRjg4RUNDMTNFRkUzMDRDQTE3OEU2QTQ2OUZDREVBMgotOjEwOUMyMDAwRUI0NDE2NTJGMTlDMjdEOEY5M0RBQzA5RTVDNTlFNTY4OAotOjEwOUMzMDAwOTg2RjkyQzgwRjk5NzBEODlCODZGQzZEQzI3NzIyMkFDNAotOjEwOUM0MDAwRkZERTQ1NTQ4RENGQzc5MDRGRTYzMkI4RTNFOUUxN0FBNQotOjEwOUM1MDAwNzc1Qzk5RTE3NzhFMTNDQjM3N0ExMkNCREZBQUZDNjI1RgotOjEwOUM2MDAwNzg3Qzc5OTRBMjREQzQ3REJFQTg4OEVGNDYwMDdGRTE0MAotOjEwOUM3MDAwRkJFMjc5ODczRjE3RjZEQ0E1MkU2NjJFNDI3Rjg1NTNERgotOjEwOUM4MDAwMDlBMEJENzBFOUYzQjkxNDY3NzlCRTkyNTEzOTZCQkI3NQotOjEwOUM5MDAwNzk5QjM5N0VGRkVCNzQzQzBFMkRGQ0UwRjI3NzhEQjBBMgotOjEwOUNBMDAwMEVFNUVENzM3RkM4MjI3ODY1RDk4MERGM0E4OUZCMTAxNQotOjEwOUNCMDAwQkVFRDEzNzRCQjRGRDA2OTQ1OUVEOThBRkM3RjlGQzEwRQotOjEwOUNDMDAwQkQ5OUYwM0NENUVDNDYzRkQ1REU1NDIzN0QzN0I2NzVDMwotOjEwOUNEMDAwMjFGRjVEMDQyNUNEQ0M4QzMwQUU3RTI2MkY0MzNCRjY5NAotOjEwOUNFMDAwNERBOEQ3NTc5ODI5OUY2NDlGQzhEMzZFRkRCMTRBN0U2RgotOjEwOUNGMDAwMkVBQ0M3RUZGOUVBRUZCNTkyN0ZCQjI2QURGNDdCNThFNwotOjEwOUQwMDAwQUY0RjMzRDIzRDg5QkRBOTE1M0UzMTFGN0RDRkZFRDE2NgotOjEwOUQxMDAwNTQ3MzE4N0Y1RjIxRjlGQjlEODc3MDVEMDgzNzU4RDcxMgotOjEwOUQyMDAwNjM3QzFENDQ4RkZBMEEyM0U5RTFGMkRFM0E4QzQzRjFBOQotOjEwOUQzMDAwMzc3REFFOTlFNkRCRTdCMEVGNDVCQzZCRkQ4MDM0M0Q4NwotOjEwOUQ0MDAwQThBRjc0NjNGRTk3QzRFRjlBQjQ0QUZBQkQxMkEwQkVERQotOjEwOUQ1MDAwQTFGMURGNjdENzY3NzlEQ0ZDQkUyREZGMUQ4RUQyQkU3NwotOjEwOUQ2MDAwREZFNTgwNjlBMTFERkU4NjExMjNCQUU1RjFCQzAyMDk3OQotOjEwOUQ3MDAwNzdBNjZBRDgzRTg3QzkzMkJGNkY5NkQ1NTdBRTUyRTlFQgotOjEwOUQ4MDAwQkI0MThBMkNCNzUwRjkyMTUxMkZCRjM3RkE0RUExOUIwNgotOjEwOUQ5MDAwREY0QkVFNzlFNTNGMTA2Rjg3QTYwMTVDRTA5QzNDMjkyNAotOjEwOURBMDAwRkRERjc3N0FCMjkwRjNGN0YzQ0ZBRkMyODU3RTdGMDUwMAotOjEwOURCMDAwRjczOTMyQjZGRjdEMEU4RkNCMUI1N0VFRTc1QzgyODhGQQotOjEwOURDMDAwNkZDOUU3QjJDRkUyNzFBMzlGRURDMkUzNzFCOENBN0Q1QwotOjEwOUREMDAwRTg3MzM5M0NGQkY2OTFEMUZGM0VERTExRkIwODg5RkJBRAotOjEwOURFMDAwRDlDOUY1MDcwQjc1NUZGNzNFRkJDNUJGN0Y3QTlGNTk1MQotOjEwOURGMDAwODlGQkZDMUFENzE5NTFCRTg2NzVFQTBCNjE3REI2RDg2RQotOjEwOUUwMDAwRkFFODY3QzcyQTkwNkY3MkZDOUIyOEYyOUI1OTY5NjIzNwotOjEwOUUxMDAwNUUxMkFCRjQ5OEI5QkU5ODk4ODc3NDlEQjJCOTBERTVGRgotOjEwOUUyMDAwRUI0MzIyQ0VGRDhBQTBBQjAzMjkzRjE5OEFGQUQ2MkIzOQotOjEwOUUzMDAwMzM0QUY2MTNCRjFERDREMjg2QzQyNUY5QjNFNEZGNjdCNQotOjEwOUU0MDAwNzM4RTU2NjAxOUU0NDAxNEU1RDU5RDgzMEZDREMwQzFEMwotOjEwOUU1MDAwRjczQjFFMUE4QUYyMEFGOEU2Qzc4NTk5RTdBRjUzRDI5NAotOjEwOUU2MDAwNkZERjdBODE3RTkxOEUyNEZEMjZBRjVGRDIxMUJCMjlGMAotOjEwOUU3MDAwNDQwOTlENUQyQzRDNEYxN0UzRjlGM0EwOTdEMEY3RDExRgotOjEwOUU4MDAwOTlCQjIwQjYzRjIwRjIwOUU2NjZCRThGOTYwMEFERkI3NwotOjEwOUU5MDAwM0FDNzAzOTQzNzY4MkRGNjE5OEI2MDVERDMyRkZCOTg3MgotOjEwOUVBMDAwQkVBM0M0NUM3NUMzNTE4RUMwN0E0RDQ1NjNGRkVGRDYyNwotOjEwOUVCMDAwMEJGQzI5MDdERjRCM0QzRjU5QUZCRjUwMUVCOTVDNjcxNAotOjEwOUVDMDAwMzIzRjk0RUI1MUE2NkMyNzNEREUwRjdBM0NDRjMzNTdERgotOjEwOUVEMDAwODhERkZCRUI3NTlDMEZFRjU0NDhBRjZGMDIzOTgzNzIzQwotOjEwOUVFMDAwNEE3RUNGRjc5QTEyNkIxQjdFMkY3Mjk3ODFGQjUzMDMyQQotOjEwOUVGMDAwQ0Y5QURDODlERjU3NEFDRTM3MTdGNkM0NTIyNkVEMDVENAotOjEwOUYwMDAwRkUxRDg5NDYzQkZGN0U5MjkwMzM5RDc3MEM5NkRGNTc2RQotOjEwOUYxMDAwRTJGMjEwRTQ1NEMyRjc5NUVBREM4OURGNTcxQUMwNUUxQQotOjEwOUYyMDAwMDBCQjgwRjQzMzM2NDgyN0VDMDIyRUE3M0JBRjc0REIyRQotOjEwOUYzMDAwMDM4Q0ZDQ0ZGQ0Y3MjU2RjMxMEE3RDEwNjA5MTE1RkI3NwotOjEwOUY0MDAwRkUxQkQ4MDFGNDVEQkIxQjhBOEFDNUY3QjU4MkZDRjdGRQotOjEwOUY1MDAwM0M4NEZFOUZFQzhGNEVDOUY2REQ4NDc4MzI3QkE0NTY5QwotOjEwOUY2MDAwODgzRjJEMzNDQkM4RkRDRDgwNkY5QjdCMTlBNjREMzYyNgotOjEwOUY3MDAwM0Y4QURGNDdCRDlFMzVCRkE1MUI0MkY4MzYwRERCNEYzQwotOjEwOUY4MDAwQkZGNDYzRkVEREQ0MThCRTdEQkIyODkzQ0IyNTE0MzIwRAotOjEwOUY5MDAwMTdBMkUzMjM0RURGMEMxQ0E3RDMxMUZBMjM3RTNGN0RDQgotOjEwOUZBMDAwNTM4Rjg5RTAyREYzNTI5M0U5M0I2RTNEQzcwRDdDM0QwNQotOjEwOUZCMDAwNEVCRDlFRDYzMzg3RjAzRjY5M0QxNzgzRjdGMTc4OTUwNAotOjEwOUZDMDAwQ0QzODdFMEY4NEZGNzhGRjIzNzU0QzBDRkY0NzI5QkVFOAotOjEwOUZEMDAwM0I3MERFM0UzQTU4QzlFREFFRjNENkFEQjdEMTc5REY2RQotOjEwOUZFMDAwN0MwQjhGQ0JGOTUzQTQ5REFDNERDQUM5NDIzRjI0OUYzMwotOjEwOUZGMDAwRkZFNkQ1MUMyRjZFQUVFMzc5NDQ5MzdCMUEyOTBFQzc3QQotOjEwQTAwMDAwNkE3ODVDQ0QwM0ZGQTNERjg3MTFGQzZEOUFCM0NDODAyNwotOjEwQTAxMDAwQThGNzM5RkI5RTAxRkQ5Q0QzMjYyNUM2REZBNjlCQUY4MgotOjEwQTAyMDAwQTM3OERGQ0REMzBDMDlCRjhGMjlFMTMwNURGQ0ZFRjZBQwotOjEwQTAzMDAwRjRBNERGQzU0Qzg2NEI3MkRDQUU4RjFGODhGREU2RTFEMQotOjEwQTA0MDAwRUZDNUMwMzM5RkYxN0IzNzM5RTI3N0NDMzYxNEY1QzVDNQotOjEwQTA1MDAwRjc4NjdGQzVGOERFQzMxQzhGMkUyRUJFQjdERjEwQTU5NgotOjEwQTA2MDAwRUYzQkJDOUMzOTc3RjM0MkEwOUJFMTNGMUQ0OURGN0I2RQotOjEwQTA3MDAwQkYzNjZCREVBM0VCQTBGQ0IzNEQ5NzUwRjlFNUFDRUYxOAotOjEwQTA4MDAwMkUzRTg0RjU1QjRBQTg1Q0EzRkI3ODA2RDI0MTY5QzVFNQotOjEwQTA5MDAwMkQxM0YxRkJGOEZCMkQ3QzFDOTdENUQ3ODlCRjlCRTJENAotOjEwQTBBMDAwMUEzRDc4MENFNjBGRDcxOEEzRDRFRTg2Q0IxQTJGQzcyQgotOjEwQTBCMDAwN0NBODFBMkIyRkJGNUVGNkZCMzE1NDFFMkNDQTYzNUVBMAotOjEwQTBDMDAwQkMwNENCRkI5NThGNjdGNDE3MUZCQ0I0NTQwOUUzRUZCNgotOjEwQTBEMDAwQTNENUE0RjNGNjkzQzYzQzkxOEJGRUEyOUE2QTVFQkUwQQotOjEwQTBFMDAwRDQ1M0I1N0EwOEQ2RUIzRTk5RDE5RjNFRjI4NkIwODcxRAotOjEwQTBGMDAwQTQ3RUVEMTVGNEZFQkM3NkI0MERFRjExN0E2RDhBMDdERgotOjEwQTEwMDAwRUY4Qjc4MkI4RkYyRUZBQTk5Nzk1RTg5NTcyQjUzRjE1OQotOjEwQTExMDAwQkI5QkQ1MUFGN0YzOEVCN0I1RTQyMDVGQkNDOTY3MkM5QgotOjEwQTEyMDAwNDc3RkJFREQ1NkRDODY3QUYxQTBDQUFBQjE3OERFRTNBRAotOjEwQTEzMDAwQ0Q4Q0YwMDlFOEVBMTBEMUQ1MTUxRjE3QTYyMTMyREIyNgotOjEwQTE0MDAwMTJFOTRBRTJFRDY0NDk0RjM1ODk3NDAzRkNFMEY3RkNGQgotOjEwQTE1MDAwMUMxM0U5MDFDNjdEODdGOEM3NTU4OUYyQUE4RkRGMjc0RQotOjEwQTE2MDAwRDE2RDMyM0UwRUE4MTdCMDQ0M0UxOEMzRDM5MDEyOEY2MwotOjEwQTE3MDAwOUY1RDQ4QUY5QzdFM0ZDMjc1MTg3NUJENkU3QzVGQTQyNQotOjEwQTE4MDAwNzgyRUExNDQ5QjAxRjQwQkI5M0U3NDVCQjIzMUU3QUY2QQotOjEwQTE5MDAwMEJGRjU0QTk4RkYzMTVEOEVENTkzODJGQUY4NzdFMUFDRQotOjEwQTFBMDAwRkU5ODlENUMxN0NDRkYwNUMxNjcyNTVGNEY5N0QyMkNBOQotOjEwQTFCMDAwN0UxRjg1REI2MUQyREZEMTI0RjZGQkRGNzk4NDI5QzNFMgotOjEwQTFDMDAwMDA4MDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDA1RAotOjEwQTFEMDAwMDAwQkU1M0QwOTc4OTRENUI1Rjc5RjdGQjYyNDkzNjRDRAotOjEwQTFFMDAwOTI5MDkwMTAwODkzMDQ0MjgwMjQ0Q0MyMjJDQUUyQjA5QwotOjEwQTFGMDAwMDRBMzJDMEU5QjgwMjJGRTA5NUJDODQyMDJFODMzQjYwMgotOjEwQTIwMDAwRDgwQzg0NEQ4QjZEQThBOEE4QTgwMzAyQTI0NTBDMEFGRgotOjEwQTIxMDAwODgxQUU4QjA4ODU4NTE2M0Q1RDZBNUQyNDRBREVDMTA2MQotOjEwQTIyMDAwODNCNkQ4RkFFQTNCRTdEQzdCMzNGM0ZGNDk4QUY0QkQxNwotOjEwQTIzMDAwRjc3RDdEREY4M0RBQ0JGREVGN0VDRUI5RTc5QzdCQ0U2OQotOjEwQTI0MDAwQjk3N0Q4M0VDQkI5QzY0QzQ2N0Y3RTQ4NjM2QzUwMzg1MAotOjEwQTI1MDAwRjM4NUU1MzE5NkM4REM2QjU0MTUzRTc2Q0FFREUzQ0Q0NwotOjEwQTI2MDAwQzZEMkFFMzE1RkY1NjUwQzNGRkQ3MDNENjMxNzJEOEU5NAotOjEwQTI3MDAwMzU0QTM0NjMxNUUxNTEzOUFDMUY2MzUzRUNERTA3NkM4QQotOjEwQTI4MDAwMjZDNkE2QzZDQ0I2MzBFODY3MUFGM0VEODk0OTY3RUM1NgotOjEwQTI5MDAwODUwODJEREEzNTEwREE5OTdDRkIxQjE1QzZFNjMyOEY1RQotOjEwQTJBMDAwOTVDMUY3NkNDNUUzQzRFRjhDMDU2MDUwQzYxNkUyM0Y1QwotOjEwQTJCMDAwNURDMTdFQkI0MTVGMENFNkIxRDBFRTA4QTgzOUYwNkZGRQotOjEwQTJDMDAwMEZFQkQxMjk4MTMxNDVENDYzODY3OTQzN0QwRjhCODU4RQotOjEwQTJEMDAwRjJGQTM3QkU1M0IwRkVBQTNBMDVDN0U5Q0ExQTkyMzA1RAotOjEwQTJFMDAwNEQ2Mjk1OTQ2RjVEOTc2MTNEMzU5MUI4NTZDNjlBNzNFRQotOjEwQTJGMDAwNkRGRUNEMzg4ODE5RkUxQkMwRDhGMUMyMENGRkZENEE5NwotOjEwQTMwMDAwNzA1RUM3MTU5NjY5ODY3QTNFMjVEQ0JEMzU5NUIxQkY2RQotOjEwQTMxMDAwODZDMUZBRTE3QjI3MDE4NzIxNDVGRjMxODE0NUI1OUQ0MwotOjEwQTMyMDAwNkY5NTlERDdCQjNCM0M2QTMzQTZENzY3ODRBRjMwNDU1QQotOjEwQTMzMDAwNjNGQjE0M0ZENkVGMTQwRTY5NEU3MEZFN0YzNTMxQ0RBRQotOjEwQTM0MDAwMEVGM0JENUI4NTc1QThCODhFRTY2NTY2MThFRjA5NTZGNQotOjEwQTM1MDAwNEJGOTQ5MkU1ODM0QzBBRjczRUI3QTdDMEFFMkM5NkFENAotOjEwQTM2MDAwNTJFRUYwM0E2MDRERjhFN0ZBNjAzQUM5MDUwMDhEMjdFMQotOjEwQTM3MDAwNzAyOTJDMjEwODZGRTY1Mjk4MURGMjQ1MjIyRkUxREQ0RAotOjEwQTM4MDAwQzlFQUVBOEFGRDE4RTE1QzY0QjczNTExN0NEN0U0N0I0MQotOjEwQTM5MDAwMUFFREMxRUZBQ0Y2MTE0RjY4M0YxREQ1NTMwMEFFQzlBMQotOjEwQTNBMDAwQjE2REUxMEZGM0E3Rjk4REFGMUFFNUZEMzIwRUM3MTdCNgotOjEwQTNCMDAwRjhCODI3OTJGMDMxRkU5RTExRjQ1RDk5OTRBOTM0QzI0OQotOjEwQTNDMDAwQkM0NjE1QjgyODhEMURGMDlFOTk2NTEzNUVBNkQ3NjUwRAotOjEwQTNEMDAwMDVGMUY0NzVCQzM2OEJFOENCREMzODcwMjJFMEY2RUQ4NQotOjEwQTNFMDAwODFDRkU0NkE1MDdFQzJDNDhBQjE5RTExM0UyNTA4OUY4NwotOjEwQTNGMDAwODE2REUxRDM0QTdGMDYzODc0MzRGRkQ3MjJCQzY1MzhCQgotOjEwQTQwMDAwRUU3OUE1NjExMDE2QzY3NzcxMEFCODZCQTk4ODlGMThGNgotOjEwQTQxMDAwNjdFQTg4MTg4NEZCRjczMDJFRDBGRDE0MkMwMjNDM0ZFRAotOjEwQTQyMDAwOTZBMEREODlFREE2MzE2RkJFMTlENjFCNUJBMDU5MzQwRAotOjEwQTQzMDAwMDcwRDY3QzJGOTJDNzZGMkY5RTRBQjBFQTJDQjk2MUQ5QwotOjEwQTQ0MDAwOEFERjA2RjU0NjdCN0EzRjMyMTRGMjE1QzcyQ0NDMEYxMwotOjEwQTQ1MDAwRTUyRDhDRDM2RENCNDZENUVGMDM3QTk5RkZFNjRCODM4MAotOjEwQTQ2MDAwNjA4N0IxMkYwNDlERjZEQTYwNjIyRTg5MEZGOEFGQjdDRQotOjEwQTQ3MDAwM0Y5Q0I5MzI4M0Y5QkVEQjYzNzVGOUVDQkEyRUJBRkFBOAotOjEwQTQ4MDAwRkRGNkE1RTlDQTczMDM3RDc0RTVGRDhGRTVFOUYyMDNFNgotOjEwQTQ5MDAwMUJBRUQzRDVCRkU2QTM5MUJBRkNCNThEMzdFOUVBMEY2MQotOjEwQTRBMDAwMzkzNTQ5OTcxRkQ2N0NBQkFFN0U0RDE4RUM5RjdFMDhBMAotOjEwQTRCMDAwNkU0RjQzMjZDMDY1OEVDMEQzRjU5NzhCNzRFRENFNDZBNAotOjEwQTRDMDAwOEQzOTg2RkI2QUNFREFGOUUzNzA1RjhENjBBNUJBN0VCRQotOjEwQTREMDAwNThBREU1NzNBNENCNEFGODhCRjg5Q0M3QkNEMTAxODA3QQotOjEwQTRFMDAwNTczRTZCM0U5QTBDRjA1QkU4NTdEQzA4QjdGOTFCNzhENwotOjEwQTRGMDAwM0REOTZFQzFCRTQ1MjM2MzMwRjVFQkJGOTczMjczMzA1MwotOjEwQTUwMDAwMEZGRDU0RkQ3MUQzNkY4Rjg0OTQ4Rjc2MTY5QTkwRkU1MQotOjEwQTUxMDAwRUE1QzkxOUQ5MDZFRDgzNUVDOUExRkQ0NzZGMUVCMEVFMwotOjEwQTUyMDAwMjBGRTNFNTBERDM2RjhCNEY4NEQ5NUY2QzFFMkU3MTU1MQotOjEwQTUzMDAwM0Y4MzdFMzM1OENGNjhDQzU3MUM1Mzk5MUZGMDdGOTJDRQotOjEwQTU0MDAwNTUzRTNDMTREMkJGNTZGQjdGN0JBNDY3MTAzRUI2NDRGOQotOjEwQTU1MDAwM0Q5RUMzNUM3QTNDNDc2NEVBRjExQ0U5RDZFMzM5N0E1NAotOjEwQTU2MDAwQjAxRUNGMzExRTNEOUVFMzBBRjQ3ODhFRjdFQUYxREM4RgotOjEwQTU3MDAwNzlCQTFFQ0Y0OTlBMUVDRkM5QzU3QTNDNzdBQkQ0RTNDRQotOjEwQTU4MDAwQjk3Qjk1MUU5RkE5QkUxMjNERkUwQ0Y4OTdGQzM3N0Q0NgotOjEwQTU5MDAwQ0Q2MjVEQkQ1NjNBRjAxNjhGQzNCNDY3RUQ0Rjc0RkRDMgotOjEwQTVBMDAwOTZBQTY1NTY2NjBBRDI4MzBGRkUyMjNERjQ2MkNDMUQ0MAotOjEwQTVCMDAwMDAzODJGMDQzQzA0NUM2REU5QTBCODdFRERBQUU0N0Y3RQotOjEwQTVDMDAwODEwRTlBMTFGRjExMjFGODU3Njc0NjZCRURGMDZCOTlEOAotOjEwQTVEMDAwNEFCQzgyQkNGQzhCMEJGODQ4NzhBQUY2MURBNkQzN0IzQwotOjEwQTVFMDAwN0Q5RDYyMDZCRUMxQkM4NUJEQkM5MTQxQkU2Nzk0QTc3RQotOjEwQTVGMDAwNTI4RUEyM0MzMjBGMEFDQUEzOEVGODVBMUIzOTNBNDEzNgotOjEwQTYwMDAwQ0E5RjBFRTRBOEFCNUI5MDBGMDI0MDNFNjY1Q0NFMzM1RgotOjEwQTYxMDAwQjZENjg0RjM5ODIxRThGQTUwMzhBN0NCNEI1ODc0MkQ1RQotOjEwQTYyMDAwRDQ4MzNBODM2MTVFMUZFM0JDNjE5QzhGQzNGQjFFQzE3MAotOjEwQTYzMDAwN0Q3QTJCQUJCMzYwRkYzMzU5MDNBNUIzNTgzM0E1MUEwQQotOjEwQTY0MDAwNzM5MkRFNTBDNERDOTRDRTYxNUU0QURGQjY2QkM5QTk1QQotOjEwQTY1MDAwQzAzN0NCRUM4RDgzNTBFRkY4NEJFMTdCMjcxNDlDQ0NCQgotOjEwQTY2MDAwRjEzODlDNkM4NzcwOTVGQ0ZBN0RGQzI3RDRGM0E2N0FCMAotOjEwQTY3MDAwRDM1MzIxM0ZEQUVFQkFGMzIxRjg3NDA4RTUwNEYyREY5MAotOjEwQTY4MDAwNzE3MTM0NUY2NkY2NjY0RkNBNkVBRjlGRTUyNDM3NUUyMAotOjEwQTY5MDAwNTMzNDBERjlBRTJGQzlFRURFMEE2QkVCOUJDQ0VDNDlCRgotOjEwQTZBMDAwMjhFNzEyRkQ2OTkzMDAzRjc5QTk3QUY5RDI0N0QwQzQwRgotOjEwQTZCMDAwRjM1REVBMTZBMzlFQzQ5ODNGMTZFNUMzRDU4RTNCM0NENgotOjEwQTZDMDAwRDU3MzJEQUU1RkQ2QkZEMjdBQURENkJBNDUzOENGRTZCOAotOjEwQTZEMDAwNzI4NzdCMzNEMEU3MDcwMjFGNEZERjYyMEJBODUxNDExRgotOjEwQTZFMDAwM0FGQTI4NjJENkQxNzhDMERCNUQxMURBMEREOEZGRjREMgotOjEwQTZGMDAwNjkzN0FFQzJCQzcyMjhDRUI1MThFNjc3QjExMEUwQ0Q4RQotOjEwQTcwMDAwRTEzRjk2QzM1RkVCOUUwMDRCM0NERjRERUIxNThERjBCOAotOjEwQTcxMDAwRjc3MkY4QzMzRkIyQkRFRENFOUZDRjY3OTRDMkM3N0YzQgotOjEwQTcyMDAwMkQ0MjlCODJGRDFDMzIzNUE0QjgxMTFFRTY4NjQxQTQ0MQotOjEwQTczMDAwNzczQUUyQTk5RkYzNTYwRTk3OEVFMDMwMzJBMkRCNENCNwotOjEwQTc0MDAwNUNENzFDOUJDREFENDI5RjIzMTU4RUQ3MkZFM0VFOTg4RgotOjEwQTc1MDAwNTUwMUZGOUM2QkYyMjYwNDU0RERCQzhCMTBERjY1Q0VFNwotOjEwQTc2MDAwQzJFRTQ5NDAzN0U3MkQ2MkRFRjY3ODAxNzc1NzE2RUVFNAotOjEwQTc3MDAwQUI4RUU2NUQ4M0ZEQTMxRTc4QUZFMjQ3M0Q5MEZFNDBDMQotOjEwQTc4MDAwRkU2NTVGOENGRjdFQzhEQjRDOTczRTk4OENGQTRCQjYxQgotOjEwQTc5MDAwQzlCRDE5OEEzNjg2NDNENzQwRUZFRjBBNzgzRjYxODFGOQotOjEwQTdBMDAwN0MyQzdENUY4M0RGMTNDMzc5RkJDNDg3NERGRTFBNjg2MQotOjEwQTdCMDAwRUYxREY5MEFFMUU5RTk4NTBFNUE0RjIxNzM1OTcxOTNBQQotOjEwQTdDMDAwQ0QxNkZBRjM5RjQ3RkM3RDdGMjNFMEMzOTdBQUZEMTRDMwotOjEwQTdEMDAwRDc3MTQ3OUMyOUU1MDM5QTg3RDYxN0Y1MUQzNkY0QzcyQwotOjEwQTdFMDAwRDFCRkRDQTc5MzlDN0MwOTczMDVEQzI2MzMwRkVEQkIzRQotOjEwQTdGMDAwQTk0Q0IzRTBCOEJGQkI2MEY1MjBGRkZDOURFMDI3QTBFQgotOjEwQTgwMDAwREZEM0Y3MTlDQzRGRTk2RDJDNDBGNTZGNjc4RDk0N0YzRQotOjEwQTgxMDAwMkYyMkE3NUIxNUNDNkZFMjIzQkQ3QTIyN0YwRDgxRkIyRgotOjEwQTgyMDAwM0E4MkJCNURCQkEzMTNBNzk3OTM5RDExRUVFQkUzN0YyOQotOjEwQTgzMDAwMTRGRDRFMTRGNDAyRkJGNTUxQTQxN0Q4QUYwMzcyRDNFNAotOjEwQTg0MDAwNDJGNkNENjg0RTJGQ0NFQ0VDRjlDRkY2NEQ0MzBCOTc4QQotOjEwQTg1MDAwMTdDMDE4MUQ0OUIwRkUxQjA0MEE2RkYwOTQ5MjlDNDA2QgotOjEwQTg2MDAwM0RBQjEzQzBCRkMxQTU5MjlFNTUzMEEyQzk4Q0YzREY4QQotOjEwQTg3MDAwRjYzNUU3NjM2RjJDNjM5MTNFMjg3RjYzODRDQTEwNUZDRgotOjEwQTg4MDAwMTMzNjhDMzk4REVEOEVCMzQwQTcwMTUwM0ZGRkIyNzY2MQotOjEwQTg5MDAwMjQxQUQ2M0YwMUY4M0I3MDY0NTZEMDE1RTQ0NDg4NUMxNgotOjEwQThBMDAwQkEyOTcxREQ2OEQ0MjM2RUVBQTFGRjNFOTZENUFBMDhDNQotOjEwQThCMDAwQkY3MTU5N0FCOTMyMDFFNThBQUMwN0UzMUQ0NDM4QzQ0NwotOjEwQThDMDAwQjY5NTJGRjVBOTQyQkVGNDYxN0RBRTQ2QkUyQzM2NzkxMQotOjEwQThEMDAwMEUxMzFGMDEzQTQzQkEyRjMyMzM0RjdCRkJDREQ1NEJCQQotOjEwQThFMDAwOTE3QzhDRjQ5NjlCQzVEODJERTMyRTU5MkZDMjdBRkYwQwotOjEwQThGMDAwOUVBQUJEODNGRDJDMUVGRkU3NTlDODhGRTExQ0Y1NzY4QgotOjEwQTkwMDAwN0Y5NEEzRUZBOEVDN0UyOEZGQkMxQTIwMEVDMkY1Q0JFMwotOjEwQTkxMDAwNkEzQkYzODA4MkYzNTVCNTkzRjJBN0FBMTMyOTNENTNGRQotOjEwQTkyMDAwRURBMkY0NUM3NTI2OTU1RkE4NzY1MzNFMkRDREZCMDcwRQotOjEwQTkzMDAwRUNCNzY4Q0RENzY2RDRBMzU2ODc0OUZDRjE3OTJDMTFDMgotOjEwQTk0MDAwRjRCQjNBOEM5RkEzOTY0NDJFRjlBODEwQzY1RDQyMDIzMAotOjEwQTk1MDAwMTBFNDc1NURFRDE4MDQ0QkM5QkVCQUEzOThDMjc3RDU1MwotOjEwQTk2MDAwODFFNUVCMTQzN0NBQTdCOTQ3QjQ1NTQ4M0VGMzhGMzc5MgotOjEwQTk3MDAwNEU0MEI2MzNGMEMzMkYxMzEwNkVFNTk3MTVBNkMxNTY5RgotOjEwQTk4MDAwQkFCRkE3RTcyQjFDRkY2NEY1NjA5QUQ3RTk2QTBGQ0QyMQotOjEwQTk5MDAwQ0I1M0RGNzQzNDBFREE5RkFEMkVBMEZDOTAzNEVGMzkyOAotOjEwQTlBMDAwQUNFNzYxNUY1QkIxRkRGODFENERFNjY0MjhDRkY3Mjg4OQotOjEwQTlCMDAwMUVEQ0RGQzMzRENDRUYwN0ZDNkRCMDcwNzlCMTAxRTQ2NAotOjEwQTlDMDAwMDVEMkNGODhFQzQ5NEZEQ0M5OTA5RjZCN0ZDMUZEMzEyOAotOjEwQTlEMDAwMzU3Njc2N0UxQ0QyRDVFMDQyMzNENjlCRjYzREU4NUNEOAotOjEwQTlFMDAwQTk0MUZBQkVEMjNFMzk3RjQwMjFGODlDM0YxMDQzRjA4NgotOjEwQTlGMDAwOTA3MDJBMTdGODNBQkZCN0VGQ0Q0M0EwREYwM0EwNDcwNgotOjEwQUEwMDAwQUEzMEJGOTZDQjI2OUE1RkNCNDdFMTdFNTQxMjhDRURERAotOjEwQUExMDAwMTdFRjQ5RUZDQzFDQjg0RTY4NkNDMzdDREZDRTBDRjA0RQotOjEwQUEyMDAwMTA2MTdGRkEwOTNDOTc5RDdERkVFRTQ0QzRDQkQ5RDhENgotOjEwQUEzMDAwQkFCRjdDODI3Q0VGMzNDRUY3NDBFM0ZERUEzMUU0OEI5MgotOjEwQUE0MDAwNUQxM0RERjc0M0VFODIwNUNFNjk3NEFFQTk4QzQwQjk4MwotOjEwQUE1MDAwQjhEMENBMzQ5RUQ3RkE2MkZFNkMzOEEzRjNFQkEwOUQzRgotOjEwQUE2MDAwQzkyMzcxM0ZFMTc4QUU1RTQxQkU5NkE5Qjg1ODE1RDBCMgotOjEwQUE3MDAwN0RDNkNFNDdEMjdFMEFGM0RFNUUzN0Y3OTNDNzIwM0QxMAotOjEwQUE4MDAwRUYzN0Y5MkMyMEI3Q0VCM0JBMEJBRjIyNUZERUUyNzBGRQotOjEwQUE5MDAwNkY2NTU4REYxQzhFRjU3RjZFRTFGM0YyNkQ4NTczQkIzOQotOjEwQUFBMDAwMEJGQkYzMTMxRDQzQjkxNUNCQ0I1RTdDQjQwQkNFRkY3MAotOjEwQUFCMDAwMzVENDRCMjBGRkRBQkEwOEUyNzdBRjU5REMyN0FBQjBDOQotOjEwQUFDMDAwREQxM0JDQkY2NzdFNzFDRkU3RkIzMDdEQTAzQ0VGMUU3RQotOjEwQUFEMDAwNDhGQkE3QzU1MjNGNzM3RUI1QTAwRkI2MDdCOUNGOTIwQQotOjEwQUFFMDAwODAzRkZFRkE2NTI1MTAwNjcwQ0I1RTdGNzA3OTEyOEM3MAotOjEwQUFGMDAwRDc2RjYzOTNBOTBCQTRCOTVCOTQxQTRDRkI3NjJCMzhFMAotOjEwQUIwMDAwODZGMkY2REEzNDE3RTFBQkZGOEU1NDE1RjVDOTNFNURENwotOjEwQUIxMDAwRkM5RjVDNEZGQTgwNUU0RkM4NUFGRkY1QzgyRTJDQThFOAotOjEwQUIyMDAwMkZGNDUxRUFDRTJDMDM3QTU4RERFREY3NzlGQzlDNThDRQotOjEwQUIzMDAwNEJGM0Q4NTMzRkY5RkREQjE4QUUwMzM0MTE5Qzc3QTFEQQotOjEwQUI0MDAwOTVFQzE0Qjg1QzBCRTRDRkVGNEVERjg0RjY4Q0JEMjY5OQotOjEwQUI1MDAwREYyNjkyNUY0NTVDNUYzOUVGRjUzRDhBNzQ1NjBFRjU0RQotOjEwQUI2MDAwN0Q5MDJGQ0ZGNTQ1NUQwN0U1RTU5RkY1NzAwMzQ1QjE3NQotOjEwQUI3MDAwNkU0RkRFNTA4MEYwNThCOEZCQTEzMTVEQTBERUY5QTEyOAotOjEwQUI4MDAwQ0MwREE4NjBDNTdCMkU4REMxNzZBQzFCRThENkQ4Q0Y4NgotOjEwQUI5MDAwRUU5QTg0NUJBMUREQ0ZCMzQ2MEU0NEJBRjJBQTc1MzRCNwotOjEwQUJBMDAwMEVBQkUwRTMzQzIyRTQxRTZCMDRFMDI0MDgxMTA0RjU0NAotOjEwQUJCMDAwN0UwRTlGRjE3QjZDN0RDQ0MxNjQxNkM0NEY0NUZEQjIwNwotOjEwQUJDMDAwNTRCNEI3MENEMEVDNkUxNUY3NERBQTJGQTlEMjExOTQzRQotOjEwQUJEMDAwQTMyMEZGNkU0QjgzN0E0OTU2RDFBRjczNzI4QUY3MkE0RQotOjEwQUJFMDAwRTQ5RjU1QzgzM0Q5REYyMzU2RTYwQjhCRTU3QUIzODI1MQotOjEwQUJGMDAwRjJEOUNBRTVGNjU2RTAyRjU1Nzk0MUI5MERFMzk2RTI1MAotOjEwQUMwMDAwQjg1NkExMkYyNzgzOTBDRTg1NzkyNjNGNjJGMzkzNkVBNQotOjEwQUMxMDAwRjAyM0M3MzdEQUQxQTRERTMyM0RBRTY2N0YyM0RBN0I3QwotOjEwQUMyMDAwMjJCNEJCNzExQzY5Mzc2MzY2QjcwQkY1QTIxNTExOUU4MAotOjEwQUMzMDAwQUEzNEQyQkI5QTUzNzAwRDIwNTc5N0E2NDE3RjBCNTU2QgotOjEwQUM0MDAwRDBDM0QyNDNGNDMwRkI4RjkzQUIyRjQ0Nzg5NjYzN0YwRAotOjEwQUM1MDAwM0ZCNkJFOTFFRjJFRjlENkM0NzI4MTBFOTYzQzY0QTMyNgotOjEwQUM2MDAwNzM2QThEQjAzN0Q0MDhGQjU2NERFNDIwM0JGMjBCNzY2NwotOjEwQUM3MDAwQzQ1NDc2MTRFNEVEMzBERTQzNkJCRjRCMjJGMzg4OUY1RgotOjEwQUM4MDAwRDQzMEQ2MkVEQzBFMDAxRkQwODBFRjA0NDA2RTY4QzA5QQotOjEwQUM5MDAwMEY4NjVGNkU1NjM5REQzNzFDOEUxRTgwRkM5Njc5MjIzQQotOjEwQUNBMDAwNUQ2ODA3MzAzMTJENDQ5RTFBRkIwMUJDNkRDNjc1OEU2MAotOjEwQUNCMDAwNjAxMTRDMEI5MTlCMUUxNjYzQzVGRENCMUNCMUZGRDJERQotOjEwQUNDMDAwRkE4NzBBRkNDOTc1MEMxNUY2QkNBMTJEMUY0NTIwREZCQgotOjEwQUNEMDAwNUNGMjZEMUVGMUNGOEVENkI3NUZBQ0VGMzdCODNFNDg1MQotOjEwQUNFMDAwOTM3QTc5RjdFMDNDODc3REUzMzRFMzNBODc5OTI3QTZBNgotOjEwQUNGMDAwQTA5RTAzRjM3RjBERjEzQ0ZDMUI5MzdFRkVERjg3RUJGMAotOjEwQUQwMDAwRjIzRjc2MUQ3NzI5Q0M2N0MyRkRGOUI1RDU4RkZCQjMyRAotOjEwQUQxMDAwMUVFODFCRjc3M0ZEODIyQzNGRjI4MUJEQjAxRkVDNzg1QgotOjEwQUQyMDAwQUU5OTY0MjUzREI3NUVEODQ5RUJFMzlENjQ1RjdBQ0Q2QgotOjEwQUQzMDAwQzJGM0JFMTlBMjdEMTgyMzM5NTIzRkEzMEJCNUVGNjJBRgotOjEwQUQ0MDAwQUI3QzJCMUJGQkFGODkyMEZFNTk2RkYxQUY0OUMzRkVEMwotOjEwQUQ1MDAwRUY4RDczRkIwMDVGMkFDQThGRkU3MERFMTBGQ0JCQzY0RQotOjEwQUQ2MDAwMTJCODREQzVGRUJFQjYzMjFDNkY3RDRDMjBCOTAyRUE0QQotOjEwQUQ3MDAwQUY1RkQwODVFQTdGMDRBQTE0REFFRjg2OTg0Qzc3NEM0RgotOjEwQUQ4MDAwNzQ2MEI5MjcyOTE2RjI3QkZGQTE5MkRDNTg5RjBCNzlEQQotOjEwQUQ5MDAwMDdGMTcxQjIwN0FFOUZFODQ5MEFFRjg0Njk4Mjg5RTYzQwotOjEwQURBMDAwQTNCMjRBRkE5RUNBREI3RDYyRTFGNTZFMTVGOEZCNTg0NAotOjEwQURCMDAwRTAwN0Y2MzlGMTAxNkQ0Mjg0MTlFOUQ4OTQ1RUY0NkQyQgotOjEwQURDMDAwMUFFMUREOTNBNEMwN0MxRTlCRDM5MzIxMUZCREI1RTQ4MwotOjEwQUREMDAwQzY1NEEyOUJEQTQ3ODg5RjREMTczODkwRkQ2MTAzRkI0QwotOjEwQURFMDAwMjBENEEzRjk5RjE5NzNCNzg2MjEzRUE3MTY4NzkxN0RCQQotOjEwQURGMDAwRjRBM0UyRTU5MTJFNjgzRjU1NTMwMzM2QjQxQjRGQzlDNwotOjEwQUUwMDAwRjc4NDlFQzc0REU5MUUxQUI3QkNBRTc3RkE5NzIxNzQzNgotOjEwQUUxMDAwNUQ2NDAzQkUwMUZERkYyMjVDRkI5RUY2RURCRTVDMkE3NQotOjEwQUUyMDAwREYwN0NBQ0QwRkIwQUYzRTlGRDM3MzI3RDkzNUU2QzgzMQotOjEwQUUzMDAwNzM2NDYwMzZFMkY1NDBCMzlERTFGOUE0MjM3QUE4NDEzQQotOjEwQUU0MDAwM0M0MEJGREQ4NTVDMjc3QTQ1RkM0RjBGRTdFNzFDMzNBQwotOjEwQUU1MDAwRDAwQkU0NkJFQTdBRDMzOUU3MjkwQkYzMjg4OEFGM0RBRQotOjEwQUU2MDAwMzZDMjdGQzEyNEJCODdFQzhGRDNDMzM3RDlBMEZDMEU3OQotOjEwQUU3MDAwQzFDRjZBQTY4N0QzRjc5QUZEOTE3RTkzNDJFNzI3Q0E4RQotOjEwQUU4MDAwRkI3NjU5QTg1RDk5RDVGRkVDMzZFOEE3RUM0MDZGOTJBOAotOjEwQUU5MDAwMzc3QkFENjJEQzU3MjM3ODc5OTQyNzc1RTUwMDJDRUY3QQotOjEwQUVBMDAwNEM3NEYwOUFDNTE1NERFNTZGQUE4Q0NBQzMwMzE5MzFDRAotOjEwQUVCMDAwMDBDN0I4MzBBRDVCRkE0MEE0M0JDMEIzMDNGQkU1REY4RAotOjEwQUVDMDAwNEYwOEZBM0EwMUREMjJGRTdDOTU5MUQ0MkY2RDdEQzhBMgotOjEwQUVEMDAwNkIzNUREMzYyMzNFMzUyQjJGNjczRjUxQTlGQzg0RDNEQwotOjEwQUVFMDAwOTMzNDE3RjIyNzJBOTM2OTVFRDJDRTc0QzI2QjI1QkFDNwotOjEwQUVGMDAwM0Y1MUE2OTBCRUY0QzcyQTM1NjAwREI1RTM0RkRBN0UwOAotOjEwQUYwMDAwNUYwNkI0RkJFMjgwODVFQzc4MzM3RjU5N0ExQ0JGQ0ZCMwotOjEwQUYxMDAwNUM1RTRFRjZDODk5MjU0QkM5NEY3MDYxRTkxNzgzMzZDMAotOjEwQUYyMDAwQzA3QTFBOTc3RjlBQTI4NUQ4QTU2Nzk2NDFBQjkwRkQwMwotOjEwQUYzMDAwN0M0M0JBNjc1MDNBRTA2Nzc2QkE3NjJEQUVBRjIyQUI2MwotOjEwQUY0MDAwNzExRUVBRDcxN0FDMEQ0RkUyNzkyMUEzOTMzNjE0QkZENwotOjEwQUY1MDAwNUY3Q0U1RTQzNkFFNzczNzY3QTA5QzU4NjhFNjc0MjJEQwotOjEwQUY2MDAwRTU2RDg1QTBDMzRCRTlEQTQ4QUMwRjcwOUI4NTcyMjU2RgotOjEwQUY3MDAwMjJBQjgxRjNCRkE1M0Y4RUZGOUZBOURGQkE1NzgxNzEzNgotOjEwQUY4MDAwNEFDM0VCMTc1MkFBRkE3M0IwOUZCMzRBMjA0QTQ5MjcyMwotOjEwQUY5MDAwMzg2QUI4QUZDRTM5MDM1MTA4N0ZDREM0RjVCQ0QyRURDNQotOjEwQUZBMDAwRkE3NUUxMUY3MzAyREFDRDE4RDlDMTRCRUI1NDRGMTg3MwotOjEwQUZCMDAwRUUwM0U2QjdFMkZDNEI5OTM1NTgzRjM1ODgyRkU4ODcxQQotOjEwQUZDMDAwRjBDNTFDN0Y5Q0Y1NTNDMDQzQzlCM0JERjNGMDdDNTE2MQotOjEwQUZEMDAwMUFCM0VGMTc0M0E4MUVCNDkzRkI0NTZEOUI5N0VCNjkxQgotOjEwQUZFMDAwM0IxRkJFQkU3MzYyMUY5QzgzMkYxNkE0OTcxRDM2NzkyQwotOjEwQUZGMDAwQ0VBN0YxMkZCQ0QyOTlDNjRGMTBGQkU0ODIyMkU4RjUxMAotOjEwQjAwMDAwRDkzMDRFNTc2RTU4MTdDRUYzMDU0RTU3MEY0QjNFRjlCOQotOjEwQjAxMDAwMkNFRkE3MzRDRTY3NDJCRTU0NUFFRDI0QkE5MjdDMDk3NQotOjEwQjAyMDAwRTY0MkZCRUJFQ0NFNjQ2QTI3RjkxOEYzMzI0NkY1Nzc3QgotOjEwQjAzMDAwMjY2REU2RkE5QjM4RUZFMjg0QTE3RUM5QUZGOTM4OTgxNQotOjEwQjA0MDAwNDc3RTdFRTZCOTY0MzkyRUU5REI0Njc5NkM1Q0Y3RUEyNwotOjEwQjA1MDAwNzQ2RTlGMDIzOURERjk5RjlEMTczMzEzNjczRjMxQTc0NwotOjEwQjA2MDAwN0ZDODdBMjJBRDgyMkZCODEzMjc2NkEzN0ZDMUFBRUJDRgotOjEwQjA3MDAwRjc0MkE0RjUwRThGMDNGRDBDRkFFRkIyQkYwN0QzRjkyOAotOjEwQjA4MDAwNzlCMkJCMDFDRjVERDRFNjgzMzZEQzg3NEYzMzkyMUJBOAotOjEwQjA5MDAwQzY3OTNDMjZEQTNERjc1QzJCNUU1NTYxNEY2NzJFNDkzOQotOjEwQjBBMDAwNEYyRUFFQ0YxM0ZFM0VCNjRBRkNERDk5MENGQ0I4MTQxMQotOjEwQjBCMDAwNjE5NTE2ODRFM0RFNUMyRDE5RTVDNjA1RTExRkRBMUJGOAotOjEwQjBDMDAwMDNGOTJDRDRBNzM4NUU2NDVFRTJDMzQ4OTdDQjNGOUU1OQotOjEwQjBEMDAwOTc4Q0ZFQTgzN0QyQjk5RkNEMDhFRjY1MDA1NzJDQUZFQgotOjEwQjBFMDAwQjFDMEY5MjYwQkNGQjlDNzFFRkNCMjY3NzAzRDVGNTVFMgotOjEwQjBGMDAwN0IzQzczNDJGMkYzMzZFNERBNzEzRkNFREY5ODZCMkY3QwotOjEwQjEwMDAwMEFDMTQ3Q0RGNkZFQzc1QzAwRjc3M0RCQ0Q2RTY0RUY3NgotOjEwQjExMDAwMzU2NkZGMkY1MDRGQUZEOUFFRDYyMTFENDFCOTFERTE4NQotOjEwQjEyMDAwN0RDRTcxRTgxREFDMzc2RjYzNEMxRUVBRTFCMkZERkNDOQotOjEwQjEzMDAwMERGOTlFMzkyMTc4RThCQjVEOEY5N0VDM0E3REJFREYzMwotOjEwQjE0MDAwM0U3REZFM0RENDQxRTNBRkJFNUQ2RTQwOUZFRjdGNEM0MAotOjEwQjE1MDAwOUY2N0NEODBCRDQxQTgwRjcwQkNCRDNDRDg3RENDMDU5QwotOjEwQjE2MDAwNzhFQkVFNTdEREY4QTlCQjYzRDJFNEYxQTg0NzZDNTQ0NQotOjEwQjE3MDAwREQzREExQkNGQjUyRUY1OEQ0MkI0RTZEOUNFQjQ2QjQ4OQotOjEwQjE4MDAwMTdBQkJFODUzRjA1OUMxNjdGM0FFNjE4Q0FENUIzQUMwRgotOjEwQjE5MDAwRUVGN0UzMDEyRkYzRUFENzU5Q0QyRTVDQjc5RURFRjcyOQotOjEwQjFBMDAwOUEwNEZEM0VDN0VENzcwQkZDRkFGMkI2N0M2MTk5QjRDOAotOjEwQjFCMDAwN0I2NDg2RDI5NzkxMEU2MERDNUIzQzMwQTFCMkFBRjcyQgotOjEwQjFDMDAwMUY0NEJFNTAzQzBFMDgxRkU4RUNEQUJBNzU1NkQ0RkY5NwotOjEwQjFEMDAwQUUzQzhFOEZFQjk3MEU4RjBCRTE1MTM4OTg5NzVENTdGMQotOjEwQjFFMDAwMzU4QTdEMDFGQjhFQUQ3RDZGMENDRUJCRjBFNzBBRTlBMQotOjEwQjFGMDAwMUY4NTJGRjUzQTgyRjRENUI0NkJDNjREOTRERTUyNDBDQwotOjEwQjIwMDAwRUI5Nzc2QzJGOUY1NEEyMDEyRjJDRUMxQUU3RDhERDAxMQotOjEwQjIxMDAwNkVBRTlGREIzQjhBNTZEODgyRkM5MEExOUZDQzMwOEZDQwotOjEwQjIyMDAwRjUyMUU1MzBGRkY5RkIwRTdFQTc0MEZGQzUxQkY1RURDQwotOjEwQjIzMDAwMTYwMDlGNDZGOTUzQjJFNTA3NUJFODc3NzkxRUJEQUU2RAotOjEwQjI0MDAwN0U5MzhBRUI5RTJCRTYyRkU1MjdGMzBEMjczRkM1NzVFRQotOjEwQjI1MDAwQkMwOUZCMTJGRjBGRTQ0RTY5ODIxNkRGMjMzRTI4NDcyQwotOjEwQjI2MDAwQUY1QkNGREIwM0RCMkRDNDc1OTczQkFDMkU1Qzc3QjlBRQotOjEwQjI3MDAwOUQwNTIyNjAzRUM3MjJBRDFFMjc3Q0JGQjQyMTkyRUMwMwotOjEwQjI4MDAwNzRGMzZDQTBBRkU2NTFDQTMwOEUwMTE4MzFGOUNCQkUxMQotOjEwQjI5MDAwN0E1NzI1QkRBNzNDOEVFM0JERkMyOTg1Q0U2OUU1NjhCQwotOjEwQjJBMDAwNUNDNUZDRDMzQ0JGODAwNTY4M0Q0ODJGOUVEMDc1RkEzNQotOjEwQjJCMDAwRjU3OTU2Q0JDRjc3NjVFNkMwNDE4NDRCMDk2QkU0RTc1RgotOjEwQjJDMDAwMzNDMEE3MjdDNERGNUQwNkVCRkMyODE2RjUzNzQzN0JBOAotOjEwQjJEMDAwRTZENkM4OEZFN0UwRkE1OEM1QkUxRjZDQTFFNUYyOUMyMAotOjEwQjJFMDAwMjlDRkMxRDI3RUZDNTQ4NjM3MUNDN0IxMDhCRDc5RkQ3OQotOjEwQjJGMDAwN0Q5RTBDOUNFRjRBOEIyNzAzRTFFMDVCMTc0NkU3RkQ0MAotOjEwQjMwMDAwNUIzNzcxRjlCNTNFMDZGNEQ4NEVBNDNGOTMzRTdFQUI1MQotOjEwQjMxMDAwQzJGNTczMzY4M0YzQzMyMUE2MTcwMzI4NkY5QTFGOEFEOQotOjEwQjMyMDAwNzE2Rjc2NTE3RDkyNjNFQjFGRThDREY1RkY3RkE4QTQ4NgotOjEwQjMzMDAwMEYzNUFGRTM3MTExRUI3MzM5RkNENjNGOTBDREY1N0YzQwotOjEwQjM0MDAwMjlGN0UyMTlGNUQ3NTZERkY2NjRBMDFEODIzREM4RTc1QwotOjEwQjM1MDAwRjUwOTJFMjk0NEJGOEVFOEFDNEQ0NjdDQ0JGNTQ5QkQ5RQotOjEwQjM2MDAwOUMxNUZGMzg3RkM2NTYxMUE3RDFCQzJFQ0M4RkZFOEMwMgotOjEwQjM3MDAwMkYxNUVGNTE1Mzg4N0UzQkE3MDc5NzEzODM0NjdBQjY2NAotOjEwQjM4MDAwODk3QUU0Rjc5ODYzOUE3OEZGRjUzMEFGMzkwRjlCNUNDMAotOjEwQjM5MDAwNjg3RjZCODVCN0M3OTM4MUYyRjNDQjc1NjE3OTQ4Njc5NgotOjEwQjNBMDAwODM0NjcyN0JENDg5NUNDRUY3MjMwNjMwOEYxRkQyNzIxRQotOjEwQjNCMDAwRDE2Rjc5MEY5MzJFNEQwQzA3RkE4MzdFQkVDQ0U3RjY0MgotOjEwQjNDMDAwRjBDODAxNUVCMjAzNkU3NTcxQkU2RjVDQzczREEyOUY4RgotOjEwQjNEMDAwMzk1NkVGNkY4N0I1MzMxRjA5MTczNjlBRUIxRDVGMkU2RAotOjEwQjNFMDAwNTIzNkYzNzkwMUJFMjEzRkU4NTc2MTY0M0ZGQzUyQzhGMQotOjEwQjNGMDAwMjUwOTVGQTAxQjhBN0I5MDdDMkJBNjk1NUVGQ0NGODZERgotOjEwQjQwMDAwMDFCREFDQjM3MDNBOTBFN0I2MTA3QTExRjhFRjQ2Rjg4OAotOjEwQjQxMDAwQkQ1NUUwOTczRDEwMjZFOEM1QzRGRTg2NzBDQzc3NzIxNgotOjEwQjQyMDAwN0FCOENBRjMxN0UwN0I1RDhGODE2RENGNjExMkRGQ0NGNAotOjEwQjQzMDAwRUMxRkY4Q0ZGQzJFRTUyRjNGQkZENzA3N0E0NkM5MEI4QwotOjEwQjQ0MDAwMEY0NTMxQTg3N0RBNUM5QkUwODZGNjY1NUI1NzQ2Nzk1NQotOjEwQjQ1MDAwMjAzRDY1RjY0NTM5NjFGQ0QzN0VCNUMwREYwRUJDREYwQgotOjEwQjQ2MDAwNDU3OEYzNzM5QzQzMDlGMTkzOUU3OUVFRTcxMzcwOUQ0MQotOjEwQjQ3MDAwN0ZEOTZBNzEyMjRCQThEODZFQTNGM0Q4QzJERDBCNDhERQotOjEwQjQ4MDAwNUY4NzdDMTNDRkFGRkUxQUZEQTYxNUZCRjRGNkY5OTI4OQotOjEwQjQ5MDAwNjcxRTRBNzAxMUJDN0RDOUE2NDQ0QzAzQzkwQ0QyODVGNQotOjEwQjRBMDAwNUIyQ0FEN0U2NDE4MDZGNEVGRTY1NTM4M0Y2MzdCOUM1OQotOjEwQjRCMDAwQzc2NUMwNzc0NTlENUE2ODhENkU1QjVFMjFGODRCQzVBOAotOjEwQjRDMDAwRUU5RjdGOEQ3NkMzOEFERDM3OUU0NDdFNUY2MUYwMEJGMQotOjEwQjREMDAwMTQwQkZGODhEMTJGRjA5QjFFN0FCRjMzQzA4N0UyMEM3QwotOjEwQjRFMDAwN0MzMEFGOUU0NDJFRENBRTVDRjNFQzIzMzk0REE4M0Y5QwotOjEwQjRGMDAwNkM3OTJCNEFDOTBBRkEwN0E0REZBNEE1NkVGNjUzQUZFQwotOjEwQjUwMDAwQkEzQURFOTcxNzg0N0QzODg4MzdDRUJGNUNGQjE0MENCRgotOjEwQjUxMDAwNTY4MjgzM0Y0RkNCMkM4MUE4MjE3OERFREI2NDIxRkQ0RQotOjEwQjUyMDAwQjdFQ0Y5QTdCNzNEODY3NEY2QjE4REU0N0JFOUYzQUZDQwotOjEwQjUzMDAwRkZGRTNBRDQ5Rjc3NTkzQThERTNDQjcwMjgyMTcxMzlCOQotOjEwQjU0MDAwMTUyRTZFOEY5M0Y4Mjk3OUU5NzVBQjJCOUI3RjVGMUFDNwotOjEwQjU1MDAwMUJDNDUzRTlBRTgzNTY4QzBGMzJDMjczNTRERDQxNkI2QQotOjEwQjU2MDAwQTNBMzFEN0NENTM1OEQyMTNCRDRCMzdGQjVFMkZFMzgzNgotOjEwQjU3MDAwN0Q0MDYxOUQ1M0RCQjYyRkRFRjQ3QTE0RUE2NzA4MjcxRAotOjEwQjU4MDAwOTQ0RjEyNkZBRDc4MzRENDg3RkUyN0JDM0E4MEVBMzlFNQotOjEwQjU5MDAwRjE5QzcyMjUzQzNFRDU4MzcxQkVGMjcyMjQ4QjgxNzk3OQotOjEwQjVBMDAwMTQ3RjYyRjM4RjQzRkNFRTVDMTI4NUVCMzk2OUFFRTRFNQotOjEwQjVCMDAwNzRGRkM0Q0EwNEQ0Rjc4QTJEQkUwNDI3QTVGQzdCRjEwRQotOjEwQjVDMDAwOTM3NzExM0RDRTU3MkExMzlDNTk0NEVGNDkyNkQyMjUzMwotOjEwQjVEMDAwN0M0OUI4Q0VCOTFCQTdEMjNBRTczMThERThCMUY4MDk1QQotOjEwQjVFMDAwRDVFQjg3RjQ1QjMzMkJEOEQ1Q0VCRTE5REI5M0YzQTkwQgotOjEwQjVGMDAwOTM5QjAxQjlCMENFOTMyMjNFQ0JGNzNCNTU5Q0EzMTc0QQotOjEwQjYwMDAwOTEzQ0JGNEJBQzk5QjFDNTk0RkY1NkU4NzNERDdBQjY1NwotOjEwQjYxMDAwRkFCRkVEQTFFN0QwOEEyREFCMUIxMDRGNjdCQTc5M0E3QwotOjEwQjYyMDAwRTMzQzAxMEUzRTAxMzdFNTA3RTg1NzdEMkZCRjMzQzdFNgotOjEwQjYzMDAwMTM3MzYxRkMwMkI1MDNCOTNBMEFCRjYzRkQwNjhCMDdCOQotOjEwQjY0MDAwRURFQzIxRURDNDM5OTE4RjdGQTcxODFGRTYxRDhFRTcyMQotOjEwQjY1MDAwRTA5MzA5RURDNzdGRkRBNEE3RTQwQkFDMjEzNEZFQUI1QQotOjEwQjY2MDAwNDMzRUIwRTUzRUEyQUY2RjNFRTA3QzY2QTE3RjYyMDE0MwotOjEwQjY3MDAwOTUzNzU4MDI5REIxREM3RjcwOEE0MjdDQzJDNjAyRURDQwotOjEwQjY4MDAwRURGMzJEMTZCMUNGRjVFNTMwNEZCMzEyMEFERjAzNUNCMQotOjEwQjY5MDAwM0Y5NUY0MzIwRkY0QjI0MDg4OUUxMEE0MUY2QkYwM0IyQwotOjEwQjZBMDAwQURGRjU3NjIzRDhERTRDRjkzN0VDMEY5ODIzRjE4RDczRQotOjEwQjZCMDAwNkZFNDE3RjkzRDBENzE0QUEyM0REQkQ4QkVGRjI5QzhFMgotOjEwQjZDMDAwMjc3QzM0NkUxOUM4NzdENDQ3Q0EzRUI2OTExRTUxRjYwRQotOjEwQjZEMDAwQkNDNThCNzAzQUJCRTNGMEVGNkZDNUYzNkQ5RERDRDc1MwotOjEwQjZFMDAwN0EzRTZDRENEN0M1MkYwRTZDNzc1RjlGNUQ5QkRCRkVDRgotOjEwQjZGMDAwQkU4NkVGRURFRUVCQjUwQUYxQkJGRjJFMUYwNkM5NDc4NAotOjEwQjcwMDAwNzY4OTJCRURERkY5MURGMEUxNEEwMzVDQkY2NTU5RDE2NQotOjEwQjcxMDAwNDNCMEQwNTlEODlERjA2NDgwQUY4NEFCOTFBRjVBOTFCQgotOjEwQjcyMDAwNDlCNkMzNTcxOTg2NzQ4NEMwNTNDMjUxRDIyQjYzMUFDOQotOjEwQjczMDAwOEREMzRBRDc5MjZFMjU1REI3RDJBRDcxREQ3QTc4MUE3NgotOjEwQjc0MDAwQ0JGMzEwRjczMDFGRUYyQjE2RDIxN0NBRUE3OTdDMjIwMQotOjEwQjc1MDAwQjRBMzc4QkEwQUI0Q0Y1M0VEREFBM0M5OUQ0MkYzN0VGRAotOjEwQjc2MDAwNDNCRUNFNTBERjYzQzg3QjBERjUzNTQzQkU1MjU3QkY5NQotOjEwQjc3MDAwNkNERjYxMkIzRjNGMDQ3NEY1NkM1NTYzRTkzQ0QyNTY5NgotOjEwQjc4MDAwQ0ZGMDczQkZEM0VFQUZBRDNFQTQ4RkFFQ0Q1NkU0OTNGMgotOjEwQjc5MDAwOTZFNUNDMTcwOUVEOUJGN0FCQTRGNzVDNzQzNTQ3QTE5MAotOjEwQjdBMDAwREVCMjMyOENFQjc1MTc5RDIyMUZDM0YzQ0RGMUQ2NTU1NwotOjEwQjdCMDAwQzgyN0U1RjdFNjMwNkU4N0I5RTg2RDhFOEEwOTM5Q0Y3QwotOjEwQjdDMDAwMzdENUFCNTE2OEZGNkRGNEIzODJGNkUzNUI2QTY4M0YyRgotOjEwQjdEMDAwMzVCMjhFQ0FCOTdFNzczMTlDREIxQjJFODY3MzdCNDNENAotOjEwQjdFMDAwQkVFQTQ4QTk0MjNCNkMyRDhGMjM5Q0IzNkM1QTE0QzUwQQotOjEwQjdGMDAwNjFENEE3REYzQzFEQkVDRjdEOTNDMjBDMzA4RUNFOENCMgotOjEwQjgwMDAwRjEwRkIzMzkyQUQ5MjlFNkEzNzhDMkQ5RjUzQzBFNjJFMwotOjEwQjgxMDAwQ0U1QTNEOUVFNzM5QjY1MEJDRENCNzZDMjlBNUYzRDZBRAotOjEwQjgyMDAwRUJFMzE3NEFEODVBQTJCM0UyOEQ4NkVGRjU2MzY5OUYxRQotOjEwQjgzMDAwOTQxOEY2ODkyNkVDQzNDNjdERjJBMURDMjdCOTJDNTdGMwotOjEwQjg0MDAwMTcyNzI5Rjg3OUJFOUE3NUYzNzRDMEM3QzU2MzJBQjM2MAotOjEwQjg1MDAwNDFCRUE1NUU2NUFCMDZGMEI4NThGNDNGRTE4MTA0Rjc0MAotOjEwQjg2MDAwREY0MkQ4QUZBODM3NDk3ODlEQzM3REQ0QUI2M0ZERTVFRgotOjEwQjg3MDAwREM5RUNGMDZGRDE0RTk2NkVGQTczOThGNDM3QTZFRUZBMQotOjEwQjg4MDAwQzcxOUFGNjFGRUU1M0ZBNDdDQ0FEQUQ2MUY3NUUwQkJERAotOjEwQjg5MDAwNTlDOEE3MkYxRUIwMzFBNEY3OEIwN0RFNDg0MTdCRTRCRgotOjEwQjhBMDAwQzU1NzZENzRDRUJFQjhEQ0M2RUREQzA3MjJGRDI4NjIzQwotOjEwQjhCMDAwMkU3NkUzN0E3MUNERkVCRkU2MzQ5MjVDNUVDMUU1NjIxRQotOjEwQjhDMDAwODY5NUYwREM1MkZGRjcxMzY4NEY2RkE5ODc1NTIxREY4QgotOjEwQjhEMDAwM0YxMDQxRkJBOUUyRDUzMEIyMzM1RkRDRkZENzQxQTE3NQotOjEwQjhFMDAwRjZCOUZGRUU3QUE0RkZGRDYyMjQ5QkZFMjJEMjcxMEMxMgotOjEwQjhGMDAwM0YxNzU0QkM3NkVERDNFODVGMkVERjdERDAzQTFCQ0FFQwotOjEwQjkwMDAwNDdGREU2M0Y3MzkwQUY1RTdDOTFFQjUzMTcyQzhENEY1NAotOjEwQjkxMDAwQTI4RDMzMjJFM0QyQUYyQzQ5NjhFNzgzQ0VCQTMwQjY4QQotOjEwQjkyMDAwMjVBM0ZGNjQ1RjU2N0I3MEUxNzBCODA4NzBDMDc1MDE5NQotOjEwQjkzMDAwNUM4QTUxMUU3NDA0OEZCNDdGNUI3ODdDM0Q4QkYzQjdCNwotOjEwQjk0MDAwNkIxOEZBQTM4MzcwNTEzQ0ZDN0JBNERGQUVEMEZBRjlFQwotOjEwQjk1MDAwRjcwMzdGQ0Q0MUZFNzNBNUY1N0E3MEJEMDNGRkZGQUMwMQotOjEwQjk2MDAwNzdENkJGRUQ3QTM5QkQ3Rjg1RjIzNUJFMkREREI3QTUxRgotOjEwQjk3MDAwRUI5N0ZGODNGMjNCMjNERDM0REYxRkI5REY3RkY2RkY1OAotOjEwQjk4MDAwOENCRTM3RkVEQkFFRjc0QUY4N0U1M0UwM0JEMjg5RkUzMQotOjEwQjk5MDAwQ0M4QkZCRkYzMzg1NURDNUJBNUZGQjNGQkE2RUE5Qzc5MQotOjEwQjlBMDAwOEY1NEREQzc3MkExRkU1QkFDRUUwMzc3MkE2OTIzRURFRAotOjEwQjlCMDAwRUEyMUE3MzIxNDc5QkVBM0YzRDMyOEM2RTVGNDI4N0I4NQotOjEwQjlDMDAwMjlFOTlGQTNCQTNFNDBGQTcyMERDQjIzRkY4NUFGQUJBNgotOjEwQjlEMDAwNEE3RTFEMEEwMjAxMzhCQzkxOTg0QkY3QUM5ODM5RDBDOQotOjEwQjlFMDAwNzUwOUU0NDcyNjk3NTNCQzk4RjE1QzM5MkE3QzdDMDFBMQotOjEwQjlGMDAwRUFBNzg3OTdDMUJDQTA5RkMzOTEyNjI3RkFBODQ3NzdEQgotOjEwQkEwMDAwNTUwM0I2MUM0QTlCMzAzRDlBMzI5NkUyRkU0NzNCRjQwMgotOjEwQkExMDAwRTdBQkIxODY3M0QyOEQyRTdENzkwMTdCQjExM0ZBRUQ0MAotOjEwQkEyMDAwMEFCMjJDNzRCRjYyMENENjBGMzk1NzFFQ0Q3MEQyM0FCMQotOjEwQkEzMDAwNkY2NEI1MkI5QzhFQUI4NzUzNjIyRjdFQ0U2QzBCODdDOQotOjEwQkE0MDAwN0YwRUI3MzY3MDEyRTc2OEIzQTg2Rjg0OUJEOTcxN0ZGOQotOjEwQkE1MDAwMDNCNjMzMzMzODE3RjNGNUQyNzk1QTlFOEJBRjA0NEZDMAotOjEwQkE2MDAwMjZDRURCNjYzMUI0ODRBRkI5MkJGN0NGODZGNDRCNzBBQQotOjEwQkE3MDAwOTE3MEJGNUE3ODRCM0MxOUUxMkVFMTJCRTE2NkM0QzNBQgotOjEwQkE4MDAwRDkwQzI2Q0VCNzFDRkU1RENEQjk2NkRDNzdDMzg0NUVDQgotOjEwQkE5MDAwM0ZEQTFDQzNGMzVEMUI1NDJGRUQ0NzNGRTE2REQ0MzdGNAotOjEwQkFBMDAwNkUzM0VBRjUyMzFDMzExNDQ3NkFCQ0JGNTAzNDM4NjY0NAotOjEwQkFCMDAwOTAwMkVCNEQzNjMzOUYwRENFQTFFODdCMjNCQkVCN0Q4RgotOjEwQkFDMDAwNjZGRkYyNTQxQzg3REI3N0JCOTlCOUZEMUE3NkI3MkY1NgotOjEwQkFEMDAwM0M4RkVBN0JBQzkwMkY3QzcwM0VGMzQwRkRDMjY0RTY2NQotOjEwQkFFMDAwNTY3ODdEMTYxRDRCRTE3MTRDQzUzODMxNDhCMTVENjEwQQotOjEwQkFGMDAwMzRFRkI3QjAzM0YzMkZFN0Y4MjRCQ0EwRDkwN0VEMUIyMAotOjEwQkIwMDAwRDBBRkM3MTRDQkRCNDdFNTUxN0I5Rjg5QjdGNzk4MjFBRQotOjEwQkIxMDAwRUQ5RUNFRTMxNDlBNTc3MkJCN0NFMUVBNkUxOUM4M0ZFMgotOjEwQkIyMDAwQzY4REQ0REI5OTZCN0I3MTdGQTQ0Q0JGRUZDNUY3QkI4RgotOjEwQkIzMDAwNkE3MjI3RDI3RDhBMTVCREU5N0NBNDg2N0JDQkY3QTBFQgotOjEwQkI0MDAwOUQ3RTI3OEZEMzI5NUM3NUZCRjg4MTM4QkY5RDcxNkU3MAotOjEwQkI1MDAwOUNERTk5MDlCQjA2RjFGQTMzRUVGQTEwQkU2QkRCQzMyQgotOjEwQkI2MDAwRThCQjJCNTMxQkRCMEJFMzAxMTREN0FDM0RGMEExNjgwMgotOjEwQkI3MDAwRUE2MTZCMjIwQ0ExRDU0RDNDOEY3NkMyMDlCRTVERUYwOAotOjEwQkI4MDAwQTA3RjcyQzIxNDk1RUE0RjYwM0MwRTkzQUQ4OEEwMzgzNgotOjEwQkI5MDAwQ0NGMUJFQUZDRDg5RDBERjc4Mzg3NDYwNzk1Mzk4MzM1QgotOjEwQkJBMDAwNjUxMUNDQkY1MEQ4ODdBNzg5Nzg2MzM1OUM2OTJGM0EzNwotOjEwQkJCMDAwNzA1RUREMzJEMkUwRkI3OEQ2N0U3Q0YyNDM2MjdGQTlGNAotOjEwQkJDMDAwMjM5NThERTg2N0VBM0U4QURCRUY2NTdERUMwN0ZCN0QxOAotOjEwQkJEMDAwQkMxN0I3NDcxNTg5NTRFNjAxQUU1NDdGQ0UxQTVCNTNBNAotOjEwQkJFMDAwM0E5RTdGRDY1ODAyQkQyMEZEQjBGN0M4NzlCREEwN0MzMwotOjEwQkJGMDAwNUMxQTFCQjMwMUUxN0U4RkNBMzZEMzdDOUIwQkM5QUZBNQotOjEwQkMwMDAwMTA5OUU5NDIzQzY4NDBEMkU0NUZBOTRENzVBMTVEQUM1MgotOjEwQkMxMDAwNjk0NDVEMDBGRDA5NEQ4RkE2QkE2QjVDODQ2NThBMDc5NwotOjEwQkMyMDAwOTJFN0FEQTYxMTgxMUU2OEM3NkZDRUU1N0U4OTEzQ0U1RgotOjEwQkMzMDAwQzY0ODNDMkZDRTc2RDhGOUZENDkxMTU3MzQ1N0RDQTNCRQotOjEwQkM0MDAwRTk1RUQzRjhDMDM1NzgwRTdENDgyNTdGQ0REQzg3RjhENgotOjEwQkM1MDAwRkRCMDNGM0JFQzdFMDVDRjZERUJGOTNFNjU2QkY1NzFCQQotOjEwQkM2MDAwNDRDQ0U5MjYzQkQwRUNEQTExNTYzQzZGQ0U3MTc4QUM2RgotOjEwQkM3MDAwQjg0RTdGQTZCNjAyRDcyNUVGMjNGNjQxMjQ0MDk3ODUxQwotOjEwQkM4MDAwQjU4NTE0QUZBMjQ2QzFCRUMzN0Q2Mjc2NDVFMTM5RDgwMQotOjEwQkM5MDAwMTg4NzU0MjFFMjhFNjRGRTE3RTFEQTAzRDg1RjUxQjRBRAotOjEwQkNBMDAwNkIyN0QyQ0JFNzU1RTk2NDFGM0QyRUU4NkUxQ0M2NTVDNQotOjEwQkNCMDAwQTIzRkMzREM5ODg0RjMxOThFREYxMUFFQjFDRTBDMDcxRQotOjEwQkNDMDAwRDE3MzE4NDMzODM0NTk5QzE5NDhERjREMkJDMzRDRThDNQotOjEwQkNEMDAwOTcxQkI3OUNEMzM1RUMzM0JCMTlEQURGNjc2NkUxRTgxNQotOjEwQkNFMDAwNjdCODREQjQ5RkI5Q0NFQ0REMDRGOUFFNzY2NjhFOENBNgotOjEwQkNGMDAwNDVCQUNBMjVCQTRFRUNBMzE1RTE3QzRFRERDQjA2MjMyRQotOjEwQkQwMDAwM0RDQzVFQkI4RUZDMzE5MjJFOThCOTYxNzQxQzhDNzM1NQotOjEwQkQxMDAwNkE2QjZBMUVGMkNENTYzRURENjdFNDk2NUVBMUY0MzA5MgotOjEwQkQyMDAwNDUyMTNBODBGNDYwM0FEMUMzQTQ2NzkxRUVDNzhEMENFNwotOjEwQkQzMDAwRjQ1ODlDODVFN0QxMzJFNjQxRjk5RUM4RENBODI3QjRDNwotOjEwQkQ0MDAwQjA2NkYyNTdCNjM4QUMyRUI0N0Y0OTdFMjJGOTg2QkM3NQotOjEwQkQ1MDAwMkYyQkU5NjAxQkM4N0JCMzg1QjFFREQ1NzY0QTlGQUIyRAotOjEwQkQ2MDAwNzYzMjczNEZDNjc2NTQyNzUyN0U2N0I1OEJEMkJBRUFDNQotOjEwQkQ3MDAwNENGQUZFNjJCNTlCRjJCQkFCMDc1MzdFNkZCNTg3RjIwMAotOjEwQkQ4MDAwRkJBQTBCMjg3REI1REE0QkRGMjU1RjAyQjgxMDFGOTJBNgotOjEwQkQ5MDAwN0M0NUYyQTNEOTBFNkIxM0ZBMkYyNTVGMzJEMkNEMkMzRQotOjEwQkRBMDAwMDBFRkYwM0M2QTRGN0M0RkYyM0I1Qzg3MjkyRkM4OEYzNQotOjEwQkRCMDAwMjQ3RUQzMTRBRjJGMzExNUY5NThFMzBDQzQ3RkJFN0ExQgotOjEwQkRDMDAwRUVGOTk3RjE1QzVFRUM3MEQzMzk5RDcxQkVENzAyRjQ0OQotOjEwQkREMDAwOEE3MDQ5QjFCMjdENjg5N0FENTlFNDY5NUE5RDFBODQ1OQotOjEwQkRFMDAwRkY2REM1MEEzMzg3RDBENUVEOTU2MUNDMUMyMjM3RUVBNwotOjEwQkRGMDAwQTg4QUQxRTU2NzU2QkRGRjdBNjdEQzBGRjFEQTY3ODg1QwotOjEwQkUwMDAwOTcxMzNGRkJFQTg5M0ZDMEY3QTc3RTc2QTYyN0UyMUI4MAotOjEwQkUxMDAwRTZCMUY1MTExQzc3Njk3OEVCM0M2MjMxQkZDMjQyN0UxNgotOjEwQkUyMDAwQUVFRUMyN0VEMjVERDg0RkYwNEZFODdERTZBNzdFRjYzQgotOjEwQkUzMDAwMzdEQUU3NEQ1NTM2MTdFQUM1OUYyMEJFMDBCRTdGMTQ5RQotOjEwQkU0MDAwRjgyQUFBQjIxMTFDMEI1NzdFRjFGQ0NCQjhERjk3NUEyNwotOjEwQkU1MDAwODlERjE1QUQxMEZCRDE3MDBGRkFGMzI0NDY3NjA5RDBCNwotOjEwQkU2MDAwQUEyOTlFRkRGMzdCQUQ4MTA4RThGRjczODVFRjYzMDU4QQotOjEwQkU3MDAwOTQ4Mzk5MTg3RkI4RTY4RDhGOTAwRjI4NTVDN0M4RkYxNwotOjEwQkU4MDAwQUVFMUJEM0Q5QzlGQ0Y3MjRFNzdBRkJBRUEyOEQ1NjMzNQotOjEwQkU5MDAwOEQ1RDYzRDBDRjIzRUYyNTQ3MENGMDU4NURCMDdFQTRCNQotOjEwQkVBMDAwNkRDNDVGNTFFNjIxOTY4NDdFOTY1QUM1ODlBQURGMUMyRgotOjEwQkVCMDAwRjE3RENFMUE4NUZDOUExOEM3MzMwNUVGOTE2N0FBQjRCNQotOjEwQkVDMDAwQUY0NkY0MzIxMzVFOUZDMjE4N0NEMkVGNkE0OTRFNDlFNgotOjEwQkVEMDAwQkE5REIzMTZEQUUxRkVBOENEQjVDRTBCRTFDNzQ1RTJCNwotOjEwQkVFMDAwRkJFQzRDMTNBNUYyN0IwMkY2MEJGRDc1NTk5MzNCMUQ0MQotOjEwQkVGMDAwRjU4QTJFNTg5RTg1NjlERTc0ODQ2RjE3QzcxOEIzMTJCMQotOjEwQkYwMDAwNDIwN0NFNENCMzk4MDcxRkZGMjk0NDJFRkNFRkZFQ0MwRQotOjEwQkYxMDAwMzRFQkRDMkNCQTBGNDg3MjRDOEU1Mzk0OTlCNzBBRTM3OQotOjEwQkYyMDAwNEI4QkQ2OEU0MDJFQ0M2QTJDRUVDNDRFNTAyRkE5QjUyQQotOjEwQkYzMDAwMUY3MTFGREJDRUUzQThDQjNBOTAyM0QyQUU3NjBBRkY2NwotOjEwQkY0MDAwNzkyREFEOUJFQ0JFMjUzQjdGQkQxM0VGMTc5NDdDNkEyQQotOjEwQkY1MDAwMjNGQzk2RjQxMzcxNUI1OUZFNDE5M0M5MDBBOUI3Njc5RQotOjEwQkY2MDAwOEZGRUY1Njc1MUU0QTdEOENERTMzQjIxRTU3NkQ2QTU1MgotOjEwQkY3MDAwQzVEQzJFRUI4NkZERDU4RUJGRThDOENFNEZBM0RBQjU2MwotOjEwQkY4MDAwNjNFRjU2N0Y5NDFEQkI0MkY5M0UwQUY1MDhCOTlFRkM0QgotOjEwQkY5MDAwRkRERjI2RDAzQzk0Q0JFNDI3QUFEOEJGMzJBMUJEMzgyMAotOjEwQkZBMDAwMkZBMzFEQkJENURFMkRFQzdBMTU0QjBCREFCNTc3MUIxNQotOjEwQkZCMDAwRUQ3N0UzMzMwREZFMDMzM0EzN0I2NkQyN0VDN0Q0QUNBQgotOjEwQkZDMDAwNjhGNDAzN0MyQkVFOUY3NDc0Q0U5MUY2RUY4QTBERDA0QgotOjEwQkZEMDAwNDkxQ0VDNTdCMzJCMUFGRDVCMTczQkQwQUYxRkNBRTRDQgotOjEwQkZFMDAwRjJGRkJDQjA5NzVGRENBMUQyQjlFN0UyOEU0OERBNTcyNgotOjEwQkZGMDAwMEI3NzNDNzgxNEZEOEUwQkI3MjgzNDhENzJENjQwRjA0OQotOjEwQzAwMDAwMDNCODMyN0JBODVDQzMzOEI2QjhCNkYzNkVGMUY3OENEMAotOjEwQzAxMDAwNDZCOTUyRkFFQkM4NEFBNEI3MDU3NThBNjcyQkNDQTc3NAotOjEwQzAyMDAwQzVFRThBOEUwRjk5Q0ZBMjRDQkU2RjRBNkQ3NTgzMDhGQwotOjEwQzAzMDAwREU2MkZFRjMzMzVENDQ1N0IyREU4MkZBMDdDOUJFMENGRQotOjEwQzA0MDAwRjUyRTkwNUVGNDQyMDRFM0Y3NTM5QURGQzE3OTlFREQ0QQotOjEwQzA1MDAwRDhERjhERkVDMjA1NzVCQjE2OTI1RUIxMjNDMjg5NzYwQwotOjEwQzA2MDAwODUzMzIyNkU1OUY2NzNBRjE4RUZERTRDQUVFNzlEMTU5RgotOjEwQzA3MDAwRkVBM0IzM0JGOTNCMDAzODRGREM2NzY3MTQ2RTg3OTYyRAotOjEwQzA4MDAwRUQ2QUM0QkVBOEM5RTQ3QTU2MDZDMjIwM0U1ODdGNDE3NAotOjEwQzA5MDAwNUQ1MzU0MEZBODdGNzJERkZCOTQzRTIwQzY1OUUwNjhDMQotOjEwQzBBMDAwQzg0MTc5N0M3Mjc3MDRGOUJGNEVFRTdFN0NDQzZCMzA1MAotOjEwQzBCMDAwREVGOUJBMTE5RDcwNUZDOEZFMUZDRkI0NzA3QzZDNTQ1RQotOjEwQzBDMDAwMEIxMDVFQ0NDRkUzNjZDQTExQkVGRDQzRTcxOUI3QzlCQQotOjEwQzBEMDAwOTcxQUJBRkY3OEZDRDBEOUREMkY0NTk5QjI4MkY4MkM5NwotOjEwQzBFMDAwQjc1N0RBOTM0Q0I4OEYxNjc5OTFCRUEzOTE3OEEwN0Y5OQotOjEwQzBGMDAwRUJFRTg5M0U5NDYxMTVGNUI5MENFOTlBRjY1RjEyRDUxRAotOjEwQzEwMDAwNUY2MzBBQTk2N0IzQjgyOUNFRDRCMkFGRDBDM0VGOTlBMQotOjEwQzExMDAwODg3QjUxMjI4RTNGNUZDRDIyQkZFMkFDN0VBRTY5QjdGNQotOjEwQzEyMDAwMjE5RjdDQ0I0MkY4NThEQ0RCMzUwREY5RDNBNTA2OTU3MQotOjEwQzEzMDAwRTEzQzE3QTdCMjAwRUEyNzRCRUU4OURDODQ3MjRDQ0VCMwotOjEwQzE0MDAwN0I1NjdGQ0UwRkNBRDYyOENDMDNFQjJCRjNBQjRDODNBOAotOjEwQzE1MDAwQjQwQkUwREY4N0Y0OTREODM4MTBFMzI0OUI1MkI5NUUyNwotOjEwQzE2MDAwMjFFMzQ3MUYyQjM2NzlBQzIwMDc1RkNGOEMxNTdDNTYxNwotOjEwQzE3MDAwN0I3NDJFRkFDRjI2NjVEMjc5RUU4NDk1Rjk1NEI0MkJEMAotOjEwQzE4MDAwQkRDOEUzNEJDQkQyNzg1Q0YzNjMyMjFFQkUyQzM2OTA0NQotOjEwQzE5MDAwMTEwN0ZEOUQxM0Y4MkQ5QjE0QzhDMEI4OEJCMjE3OTNERgotOjEwQzFBMDAwMjhFRUUyOUM5NUZCM0RGMTNCRkE1OUNCRjJBMEJEODMxMgotOjEwQzFCMDAwREVEOUQwNjRGQjk4MTA3QTJBMkI3MkJCQjA5RTFBRUJBMgotOjEwQzFDMDAwNzZFNTNBNzBCRUNFMEJBNEU3RUU4OTY0QThFNzlBNUVFNgotOjEwQzFEMDAwOEVFNDcxNTNDRjg0NkRCNjg1RTBFREUzNENBRTQ3Q0I3MgotOjEwQzFFMDAwRjczQkQ4QUQzQ0NFRTg2MTBCOEY0QjdENzg2QjkyREY4RgotOjEwQzFGMDAwMUYwMkFGODcyRERBMEM4NDAzQUUwM0Y1RkIwNUQ2REFGOAotOjEwQzIwMDAwMENENDdGRTU3QzE3NDRENUQyM0NDRjA5N0E1RjEwNUUxMQotOjEwQzIxMDAwQ0JFM0I5QzU3RDYwQUM4RkY5MjYxMTg3REVGQ0FDOEQxMAotOjEwQzIyMDAwRTI4MENFMjQzNUVDQzVGMUNGM0NEQjlCRTFGQTlCNTI5QQotOjEwQzIzMDAwRkRGM0Y2NTEzOUU4OTc4MENGOTJFNzZDMDE1Q0NGRTlDNgotOjEwQzI0MDAwNjdCOTNERkFCNDg1RUI2QkE3MjcyNkJBMTBCRjA1OTNGMwotOjEwQzI1MDAwMzZDQzIyN0JDRDE2OUI4Mjc2QkVEMzBBQjMyNjYyRjlGQQotOjEwQzI2MDAwRDY3ODhBM0YyRkE5QUVBMkY4RUQxMjYwMUI3ODdGMDgxRQotOjEwQzI3MDAwRDIwMkJDMDc3NDdBNkI2RjhBMzczQjhERUYzNjI4RjQ5NQotOjEwQzI4MDAwN0QwRDdFRDc1OEVEQUM5RjIwM0NCNkYzRjNENTk5RTdGMgotOjEwQzI5MDAwRkVERTNCMzRERTVCQTYyNTVCRjRGMTc1OTI0RTY0Rjk1RAotOjEwQzJBMDAwREYwNDdGRkI5QkQ4RTdGRkM4RTRGNjg4RjI4OEJBODdGMwotOjEwQzJCMDAwRDM2ODlEMUNFRTgwMjdGRThFMEQ2QjhDN0M3QzAwQzZBNwotOjEwQzJDMDAwNTNGNDU0OTA4RjNDQzYwMjE5OEZBM0RENjEzQjNGN0YyRQotOjEwQzJEMDAwOUREOTYxQTFCOEY1OTI5NzIzM0QxNEM3QjZGQTFBMTNGOAotOjEwQzJFMDAwQzU1M0E4NUM0RjJGMzEwMUY4MjA1NTdFQjY5REUyQ0I5NwotOjEwQzJGMDAwM0EzRDE3OTY2NzIzRkQ5Q0QxMzlCNzc5QUIyQUM2NjFDMQotOjEwQzMwMDAwMENFRjUzOUVERUM2RTM4RUM3QTEyRTQ5RTVEOTU0N0VCRAotOjEwQzMxMDAwNUFFNDRGRUZDRDI2QkQwRkZBRjdFMEZEQUE5MjlGRkMzRAotOjEwQzMyMDAwOTRDMzcxNzJGMTcxQUU3N0Q5ODlERjk2QjVGQTc5ODZDNwotOjEwQzMzMDAwNDZBMzFDMkM1RjNEMjQxQUVGMkJCMjc3NTU4NjdBOEJDRgotOjEwQzM0MDAwMTE0RTk3Q0NFRUNFQzg2N0M3RjdFNkZDQUM3NEVGMTM3RQotOjEwQzM1MDAwRTQ5RjJBMTVGNzA4NEE5RjUzQjgxRjFBRjYyMURFRTcxMwotOjEwQzM2MDAwMkM1RDM1RTQxMUEyQ0Y3NzJDQUMyN0FDRTc1Q0REODNFNAotOjEwQzM3MDAwNTFBMUY4QjhBNjM3RTc3M0FERjVBRDZFQUE1RjBBRjUxRgotOjEwQzM4MDAwQjE5RkQyNTU2RjQ1RDE3Q0I2NTkyODVFQzU4OEM3MUY2RAotOjEwQzM5MDAwRERGRTM5RjU0N0I1NkZBNThGM0E2RTY3NjlCMzdFRDY3NgotOjEwQzNBMDAwRjAxRjlGNDJGRkRGRUMwODczRkJFODZCMURERDgzM0I1MgotOjEwQzNCMDAwNkJBOTlCODdFQjNGRkI3QzE4RjFBREIzMzE5QzNGOUM5NQotOjEwQzNDMDAwMDQ3RUVBRUI4NUYzMThGQjRCOEFFRkZBREQ2NEJBQkYxMwotOjEwQzNEMDAwMzdERkFGRUY1NzhFM0JCNDM3RTdFM0U1NzFFRTY4OEM5QwotOjEwQzNFMDAwMTcyQzdGOTdGMzQxQzBDQkNERDRGRTVEMEJCNTM3QUU5NAotOjEwQzNGMDAwMjM1OUI0NkJERDlGQ0Y0NzEwM0Q5Q0VEQzJGMTcyNzY5RgotOjEwQzQwMDAwNjcyRjkyNEY0RDMxOUNDRTYxQkUyOTc4REZFRkVDRjM2MAotOjEwQzQxMDAwQkQ3MkU5MUUxRDJBM0Q0MDBGMjVFMkZDN0IzNkE2MkU4QgotOjEwQzQyMDAwQzUxOTUyREU2NDExRTdCODAwRDQ0NEJBQzEzNkMwREY4MgotOjEwQzQzMDAwNEJBQUI4QkU1NTZBNUY0QkYxMjUxOEFGM0IyODhGRDI4NwotOjEwQzQ0MDAwODAyREI2NkREQzJERDAyQjlEMkYxRkVDMkRFQzk4Mzg1OAotOjEwQzQ1MDAwNUU4Mjg4MTMyNzNEQThDRThBN0M1QjEzRkE2MkQ5MEVEMAotOjEwQzQ2MDAwNjNEQzJFMkY1RjJDREJDMzZDM0JDOTM4NjFBNDQzOUY3OAotOjEwQzQ3MDAwNDI3MTJBQTUyQjE2MkRBMEY4RkJDQTc1QjdFMTNFOTM5MQotOjEwQzQ4MDAwRjMyRjM1QjMwMjNDQTczNTI5MkFDREEzMjk4Q0REMzEwMgotOjEwQzQ5MDAwMDlGNUNBRDA3MTQyRjRCOTdCODNFMzMwNjcwMkU5QjE5MAotOjEwQzRBMDAwQTRGNDJGRUJFREEyRUY5OEFGQzU3QkFEMkI5NEI1MzQ4MAotOjEwQzRCMDAwNEVBQTNDRUZGMjc1NDkzODAxMzhBQzE4MjdEODM0NDJGRgotOjEwQzRDMDAwOTQ3N0IwNkUzOTRGRTNCQTVCRjVBRURFOUNFRjM3QTVEQgotOjEwQzREMDAwQkE3RTM5MTRGMUZDQjY0QUY3N0YyRjdEREYzRjNBQjZCQQotOjEwQzRFMDAwMUQzRDJEMjhFN0FEQzE3ODU5OThGRkU2REU4Q0ZBOTlGRAotOjEwQzRGMDAwRDc5QkYzQjU1MjhDQzc4NTc5NjY2Q0Q0Qzc4QjY3NkVCMgotOjEwQzUwMDAwRDFFN0ZCRUNEMEU3QjM3NkVCRjMzOUY1RkFCQ0ZCODg2NwotOjEwQzUxMDAwM0U3RkJGMTgxN0NGRTE3OERGMThDRkUxOThFMjM5REMxMgotOjEwQzUyMDAwNjVFM0U3NzBDQ0UzMzkxQzUzM0M4N0UzNzczQzg3NjNEMgotOjEwQzUzMDAwMUVDRkUxOThDNzczMzhFNjI1QkNGMTNDOEU3OTNDOEY1RAotOjEwQzU0MDAwNjNGOUZCQkQzOURGMkUxM0YxOTY4ODA3QTQ3N0Y2NEEwRAotOjEwQzU1MDAwOThFRTNFRDJDNUZERkM3RTA5RDAwMURGMzczM0FDQjQ4NgotOjEwQzU2MDAwNkYxRUMzMUE3NDFFRTE3NkE3MkU5M0VEMkU4QzFGNUVFQwotOjEwQzU3MDAwMUJBN0VERUYxRDhGRjc1MDFBNTYyNTIxREVDQzhEMTQyOQotOjEwQzU4MDAwQzc1QUYxMkE4RjYzMkRDQjBCNzNBMEZEQTM3MUU1QzlBOAotOjEwQzU5MDAwNTUxODFFQUFDNTY5ODdCMEZFNDU0QkYzMzY4NDZGNzlERQotOjEwQzVBMDAwRDU2MUJBQUZERkI4Q0NGNUVFRjUxQzdGNjQ4NzYxQzUwNQotOjEwQzVCMDAwQjFBNDQ3MTVBMjlDOEJFRDE4OEZDNjc4NzJCNjU2MUY5MgotOjEwQzVDMDAwM0Y2RThDMjczN0M2OTExQkU5NDBFQTdGNEY1OTlBOTNGQgotOjEwQzVEMDAwOTBBRjdGRjFBQzdEMkRDRUZGOEIzMDcxMUY2NkJBREQ0MQotOjEwQzVFMDAwMTAwRkUwMjA3RUIyRjgwMTY1MzNDQUVCMkY3QTczM0Q1RAotOjEwQzVGMDAwQUFFNTE4RThFQkVEQzg1OTk5Q0VCRURDOUZGNEYyRDY1NwotOjEwQzYwMDAwRkM1QUM1NDRGMUU5OUE4N0U0RDAxMjMxQTcxNEE1QjlDMAotOjEwQzYxMDAwNjkzNUYyQjkwNTI2OTI5Qjk3NDA1RjIzN0RGMDAzOTUxQgotOjEwQzYyMDAwRjQwNzdDNTcyQjc0M0RGOEFFNTYyODdERTFCQjVBRkFDRgotOjEwQzYzMDAwRkIxMjVENzRGNUYxNUQyREZEN0Q4OTNFRkFGOEZDMjk1NAotOjEwQzY0MDAwQ0IwRUUyQjk3RkYyREFGRUJBN0E3M0JDNDMwQzcwMTRGNwotOjEwQzY1MDAwRjMxNkZBRUMxQzkwMUYxRUQ0MkY5NzZFNDg0MUZDMkU0NwotOjEwQzY2MDAwNTlEMEQyQjQxQUYwQkI2NDRGOTgxQkNCOEJGMUZGODAyQQotOjEwQzY3MDAwMkYxNjQzOUY3OEVGQjI3OEI3QjhCRjVDQTU5N0MzQjNDNgotOjEwQzY4MDAwODUxQzJBMzYzMzlGMzMzNjQ4ODdDNTRFRTY4OTgxRjZBNgotOjEwQzY5MDAwMEJGQTM0RTRFMEZCNTkwQkRFN0M3RjkwMzMwRENGMTlBRAotOjEwQzZBMDAwMjMzQTIzM0Y0QUIxNzgyOEFFQjY2QzU3Q0Y5ODY1RDA2RAotOjEwQzZCMDAwRUYzNzNEQjREODNFODA5NzJGNkIwRkZGNjIyNkNBQzM3OQotOjEwQzZDMDAwNURGQ0ZDRjdDNURBOTdBMjI4QkU0Q0QwNUI4QUM1MTk4MQotOjEwQzZEMDAwOEU3OERGNTRDQkUzRUJEMDdFQTZDNjA2RTk2MjUzNkRCRAotOjEwQzZFMDAwNUM3ODBGNDc3MEJENDEzQUY4OUVGMDA0RjhFMTc2OUUwMQotOjEwQzZGMDAwRTI0M0U0MTc2OUE5MTNFQjFEQTFGODUwQ0Y5NkVCOTMyMQotOjEwQzcwMDAwRUY2RUIxMTVCQzlGM0I0NUZFNEI3MURFOTBFQjNDRDcwNQotOjEwQzcxMDAwRkI2MDhFMEJFRjc1NTRFRjRCNTE5MTlGOUI3NjZDQzM3MgotOjEwQzcyMDAwNzNDODNGNkM1QTc2OUY3ODhDMDdFREY5MDc3Qzg3QUQwQwotOjEwQzczMDAwRTQ0M0JFOUUzRkFGMUYxNTc1MkRFQTlGQ0Y1QkRDRTM0MAotOjEwQzc0MDAwMjBCRkJBRjY2OTJCOUUyQjRBQ0M3RTJCQzU2NzNFQkIxOQotOjEwQzc1MDAwQzk4QUYxQ0EzNzZDREY0NERGRTc2RDJGQTQ3OENDRjlDMgotOjEwQzc2MDAwQUM5MkNFQTNBN0U0M0IwOTAyMUVDNTIzOTU4RDRFOTgzQgotOjEwQzc3MDAwRjc4MzdEMzg5RjJEMEVFN0ZFM0REMDhGNUVDNzc3NEE0OQotOjEwQzc4MDAwMkU2RDU3NzIzMUNFNjc4QTc3OTdCNTEwQkU4RkU5QzM4OQotOjEwQzc5MDAwRjk4QzcxOUZCNDFDOUY5QzFGNEZGMEUwRjc0MDNFNjRFMgotOjEwQzdBMDAwNzBCQTRGNkZCQjJGMjY1RjRFQTU3RDMxRTU3MjVGM0FBMQotOjEwQzdCMDAwQTc0RDBERjRFNkU3RTEyQ0MzNzlGOEI4Q0FFRDc5RjU5OQotOjEwQzdDMDAwN0MxRjE0NUIwMzlEMjZFMzNFMzk2MDIxM0RCN0RDQ0MyMgotOjEwQzdEMDAwREY3OTJBODc3RjVGMDdBOTc3QThBQUEzRDc4QUQxMTExMwotOjEwQzdFMDAwM0E3QTlFQ0U2Mjc1Rjc2OTZFQzFBMDkyOTBGQzk0NzEwMAotOjEwQzdGMDAwRTlCQUZBRDNBNkY0MzVEMDdGNUVCMDlDRjhDODc1QkExMgotOjEwQzgwMDAwN0I3RkU1NEI3RDJFODVGNENDOTFGQUVGOENDNzE3MzJGOAotOjEwQzgxMDAwNzY5M0FFN0QzOTlCMTRBQzg3RjRCRDQ1RTFFNzlFREQ5MAotOjEwQzgyMDAwMzE5QkQxMEU1ODZDRTJFN0E3RTkxQUZGQkU3MDFGRkZEQgotOjEwQzgzMDAwQ0VBNjMzREQzRUVDOUVFRUZFMDM5NzhCMTZGMjFCNDgzMAotOjEwQzg0MDAwN0JGQjc0RkM3NzNCRjA2NzJDQkNGNTFFM0JERUUzNDdCQgotOjEwQzg1MDAwRkI4NEVFN0VCN0YwMTdFMkJDMTEwRkU1QzI5RTU0OUUzQQotOjEwQzg2MDAwQzlFRDQ5RTVCRTA2MkJCRTkzMDBGMDM3QzdDNTUyM0Q2MgotOjEwQzg3MDAwN0IxQ0M2NTVENjJBNjQ2RkM0NzQyOUM1NTlFQUUzQjQzMwotOjEwQzg4MDAwQjAzRjhDN0Y1Qzc4NEMyREM0N0Q2MjJDMkZDNjc3OEE5QwotOjEwQzg5MDAwMTBCRkFGRjJCOEQ0ODU2ODE3OEE2QUZCM0VEQTQyQjQ5QgotOjEwQzhBMDAwMTNBMTdEQ0JGMDFFREE4NzdENUNDMjZGRTc1RkQ1MDVGMwotOjEwQzhCMDAwRTEzODRFQzlBNTdCOUIzQjBFNUEzMTNFNkZDQTk0OTgxNgotOjEwQzhDMDAwNUNEQzNGNDYzQTkzRkMxREY2MzVDNTE1QjYxQzNGNEM2MwotOjEwQzhEMDAwNzRENjUyNkMyNjNBQkUxMjNDMTY3QUI4OURENTQ4N0Y2MwotOjEwQzhFMDAwRjM1ODgzMTVFRkE3Q0NEQkFEQjhGMTVDOEFGNTEwMkVCOQotOjEwQzhGMDAwNUQ5MDJFMEQ3MDg5OEI2RDBCMEYwOUE3NTZCODE5Q0E2NAotOjEwQzkwMDAwRTczMzBFQUZGOUZCMTQzRkYyQzczNjcwMTJGMDMzQ0VBNwotOjEwQzkxMDAwQkYyM0Y4Qzk3NUNERDNCNDMxQzgyN0U0RkFFNkUzM0FBQQotOjEwQzkyMDAwNzAxQzU4MDc4RTIzRkQxNjZDQjA3MUJGQTY5M0ZENkE2QwotOjEwQzkzMDAwQTE5N0M3RDkxQUU5NjNEMjY1NkU5N0I5RTVCMjk5RDJDMgotOjEwQzk0MDAwMjlFM0Y0RkIxM0RCRTEzRTk5N0EzOTgxQ0FBRjk2N0U4NQotOjEwQzk1MDAwMTZDMjNDNTEyRTVDMkREREM4RjU0ODdFMUNEQzI3RkM0MAotOjEwQzk2MDAwNUVDMjk1REUzOTMyREEyNzlCRkE4OEZCMTAwM0Q5NDA4NAotOjEwQzk3MDAwNUQ3Q0IzRTBCN0M2RjZDNkY4NjZBOTFGMThFNTRFNjE0MAotOjEwQzk4MDAwQTQ4OUUyMkQ1QjFDNjlBNDc3NDhGRUFCMDlCOUEyQUQ2RQotOjEwQzk5MDAwRkM5NkVBNjk1MDhGQ0ZDNkEzOTM0MzlBQjAxMzJFOEVBQwotOjEwQzlBMDAwNENBMzc3MjQ1Mjk2QzUyNTIwQkUwQUMzOUMxNEQ3NUY5QQotOjEwQzlCMDAwQjg0Q0E1MzhFQTQyQThFNzBBRDE1QjU2QUQ0ODRGNDFDQQotOjEwQzlDMDAwMzlGMkY5N0RCRDlFRjQ4MTNFRkZGOTNEOUQxMjA2QzMwQgotOjEwQzlEMDAwMzg1RkFDQjQ3NEIyQkI4MkY1M0U1Rjk5OUY4MkYxMURBMwotOjEwQzlFMDAwNUZBQ0IzNERGN0I3MDNBRjg4QkVFMjNFRDNDRjNFMjI3NAotOjEwQzlGMDAwMzk3N0RFNzQzQzZBM0FCNDJGNUJCOTI3MEFBRjBGOTREQgotOjEwQ0EwMDAwQUVFNEYyRkRFMTFFNUE3OERGODEyOEU3Mzc2RDczMjIyQwotOjEwQ0ExMDAwRkM5QzlCNzJEMDRFOUM4NDM2REZGOEEwNUU1MUIyMzJGMwotOjEwQ0EyMDAwQkYzM0VBMUQ2NUZGMzhGQ0E0MTNFRjg1MkZCMzI0QTBBNAotOjEwQ0EzMDAwNUU3QUZBMDM5MDkzMEFDOTM5RDIyNzRFODU0MTE3RTRFQQotOjEwQ0E0MDAwODc4QkE0RjdDRjRFMjlDQzgzRkVBODczQTY4MzdGNTk4QQotOjEwQ0E1MDAwOERFN0M1RENCQThDODA4MkNFNTMyREE5MkZEQTU1NTdDRAotOjEwQ0E2MDAwM0U0REZBNENDOUZEQ0IzMkYwMUQ0MjZENTlDRkU4RjY3MAotOjEwQ0E3MDAwRUMyOTMyREQyNkU0MzlFQUY1OThBMjVFOEZGMTM1QTg3QgotOjEwQ0E4MDAwRDc2MzFFRjU3QTRDNTFBRkM3RUYxNTFCRjQ3QTYxOUE0NAotOjEwQ0E5MDAwRjA2RjQ5QkI3M0Y3OUFFNjVDRjRGQkY5NDZCMkNDNEFGNwotOjEwQ0FBMDAwOTJDMzBFN0ExNzc4ODkxMkVFNDZGRUI0MDQ3NTI4Q0MyQwotOjEwQ0FCMDAwN0YxNjQxNzYwN0Y2QzE4RDNBM0NDQjc3ODNFNUJCQzA0NAotOjEwQ0FDMDAwQzM5QTQxNTcwQkQ5MjdENzVGQjZCM0QwN0JCQTIzNTg0NwotOjEwQ0FEMDAwOEMyRTNGQ0E5RUE0QUI5RkVGNENENTk1REY5MEQ4NUJDMAotOjEwQ0FFMDAwNTc3RUEzMkI1Nzk3MUY5Qjc5QURBRUZFNzhGNzA4NUQ1NQotOjEwQ0FGMDAwRkVFNkMxMzdFQUVBNEZGNDRDRDRFNTI3MTdDQ0QwRDU4RgotOjEwQ0IwMDAwOUZFQTJERDQ5NTRGOUJCRTQwNTczRTQzNUJBNENCREY5RAotOjEwQ0IxMDAwNTY3QzhGQUVGRUVEOTVDQjc0RTVGMjlERTQ3QTNDOEZBQQotOjEwQ0IyMDAwRDlGMEZEMTczQkE1RjJCREU0QkI1NTQ2RUZCMTBEMUQ5NQotOjEwQ0IzMDAwNjVFMjc2NDYxQjk3NDc0QkRFRUVFOTA4QTU4M0Q5N0Q3MwotOjEwQ0I0MDAwQjkxRTc0MzBDQjMzMEJFOTU1QkU4NzI5REZCOTVDRDRFRAotOjEwQ0I1MDAwOTdFMzM1OTkwNTE0N0UxRTZFNDg0MjNBMzZENjMzOTZEMQotOjEwQ0I2MDAwMEY4RDM4NzRDOTA1QjhGQ0E0RUZEQjUzQ0RDMDJGODZGOAotOjEwQ0I3MDAwNUU3M0E4N0YzQUU0RDNCMkUyNkVBMUZDOTA0MzJGQTU4NgotOjEwQ0I4MDAwMzlGMTVDM0FFMzE2MzNGMEFCQTFGRDBFNURDMkYyREQ4NAotOjEwQ0I5MDAwNTk4OTNDM0Y5OTkxNkEzMjY4QzdCRUE5MTgyRjNCRjQ2NgotOjEwQ0JBMDAwRkFCNEI1NkU2RTQ3NjlGN0JFQkI0QzExMUU3ODRGMUNDOAotOjEwQ0JCMDAwRTE4MTY5MDBFODE4RDM0MzQwQzc5ODFFMDEzQTlFNjM5QgotOjEwQ0JDMDAwNjFFQzI4RDAzMUE2QzdFMDdDOEFERjdGMEJFNzUzNENBRAotOjEwQ0JEMDAwOEZDM0Y5MTREMzc3RTA1QzhBNjkwMzlDNEIzMUZENUQwOAotOjEwQ0JFMDAwRjU3NDRBM0ZBOEQ2QThEREVGQUI4QjI5RkRBOEJBOTIxMQotOjEwQ0JGMDAwQkU3RjUyNUQ0NUU5MUZBQjdERjRGRDgxQkU4QTkwRTNBNwotOjEwQ0MwMDAwMDFERDdCQTMxREJEMkIyQUZEOUNEMkFGNTk1M0M5MUE1MAotOjEwQ0MxMDAwMjM5MDZGMzQ5QTYzQkVCMjA3RkQ5NTFEREIwOUNDRUNGRgotOjEwQ0MyMDAwQUIxMDdEMkQ1QkYxNkNFODRCRTM3Nzc1MTIxRjE3REZCRQotOjEwQ0MzMDAwNURBOURBMTM4OEU3MEY1MzI3RjdFQ0FGQTIxQ0FCN0M5MgotOjEwQ0M0MDAwMUQ0MzZEM0UzNEI1RkY3RUU0MjI0MTFGRUJCMzNDOUI5OAotOjEwQ0M1MDAwQjFERDMwM0JCRjlGM0NDQ0NFRUYxRjBGMzMzN0Q0MjAyQwotOjEwQ0M2MDAwN0RENTdDQzc1QzE4RkY3MzMwOTJCRkZCNTE3MzlGRDk5MQotOjEwQ0M3MDAwOEY3NjUwRTUzMkRGRTdDMzNCMzFDQUQ3N0NENzQ4RjcyMAotOjEwQ0M4MDAwOTU4NzM5REQ4OTI4QUY2NEJFRDVFRjhGN0Y0MkUyN0M3RQotOjEwQ0M5MDAwQTQxRjVFQzZGNzhDQkVEQzMwMEFGNTg1RTEwRUFCMEIzNwotOjEwQ0NBMDAwRjk0ODY4REMwMEZBREIwRjQ2N0UyNUU3QzM3MDNDRTlGMwotOjEwQ0NCMDAwREZERkYyMUQwQjk4NzI4MjdFRkM2MUY2ODY1NEI0MUI5NgotOjEwQ0NDMDAwMENCRkQzRUUwRThENUI5MkZFN0FFNTcyQTM4QTc2NTU4OQotOjEwQ0NEMDAwMTk5RjI0Qzc5MUYzOEQzNDQzN0Y3OUMxRjhBMzYxQ0VBNgotOjEwQ0NFMDAwQkE1Q0Y0NzdENDk0M0JBOEJGQ0VGMEREOUE0N0Y1M0MwQwotOjEwQ0NGMDAwMkFCNUFCQ0I0NUJCRENGMDMyMDdDNUMxQ0EzODgxQ0UwMwotOjEwQ0QwMDAwNjJERDUwOEZENjM5RkFCMjQ2NzExMkMzNDU5QzA0RjZFMwotOjEwQ0QxMDAwNjNFN0U1M0VFQzY3NzhBNzQwMTJDNjgxMERBRkU0RUYwQwotOjEwQ0QyMDAwOTAzREExRjBGN0U4NjVEQzAyRDY4RjA4RDlCNzM4NEZGRgotOjEwQ0QzMDAwRUNCN0M3REY2MEJFQTg0Nzc5M0MwNERGQzlGMjVDRTcwNwotOjEwQ0Q0MDAwMTI3OUU5NzdCNDhGMjRGQkQ2MjhDMTZCMUU0RUQ1QkU2RAotOjEwQ0Q1MDAwNDAzQUYyREE5QzlGNDVEMEZFNEVFRjg2NzZEMzg5NDI2OAotOjEwQ0Q2MDAwQUZGRjI3RjQ3MjBBREJGREY3RTlDNUMzRjFERDk1OTE0QQotOjEwQ0Q3MDAwQkRDRDQ4MzcxMjJGMTJDRjFERDE5MUM0N0I0ODlDMTlDRAotOjEwQ0Q4MDAwRTFCOTM1NkU0Q0Y0NjNBNEFGOEVFODRBRDJEMzMwM0JBMAotOjEwQ0Q5MDAwQzczQkUyMTVFM0Q0MjQxRDI5OTdGOUJCNkVDM0NCRUM0NgotOjEwQ0RBMDAwMjRFRjI0MUQxOUU5QTAyRDFENzFCQUFDQjlDQjRFRkQ5RAotOjEwQ0RCMDAwQjVBNUEzMjBGRTExMUVGRjNBMUQzNUFBRThCRkJBNUEzOQotOjEwQ0RDMDAwRkFCOUEzOTk4RDg5ODZBMjY5NjlEQTIyQzQ2RkUxNjVFRgotOjEwQ0REMDAwRDc1MUNDQ0Y2NjIzQzYyMDQ5Qzk3MjBEQ0IwN0I2MkREQgotOjEwQ0RFMDAwRDdCRTY5QjY0NDg3RDBEOTMwNDE2N0FCM0JBODJGRUI5QgotOjEwQ0RGMDAwQzk3NzJGNjRGRkNGNzQzMEZFNUI0MjZGNzgyQjRDQzYyRgotOjEwQ0UwMDAwQTk3ODFDQjk4MzgyNzFBMzRCRjIzOTdEMTVBNEFBQTQxOQotOjEwQ0UxMDAwNzc4Q0NBRTJFRjlGMzMwN0Q3QjM1REYwMTdGOUYxNEQ3NgotOjEwQ0UyMDAwNEMzQjEyOUQ4QUVGOTQ3QUU5N0REMjMxOUQwQ0VGOTNCMQotOjEwQ0UzMDAwMEFGREJDQzBFMEU3QkYyOUVCMDZEMkNGNkZCQUMyM0IwOAotOjEwQ0U0MDAwRDdFM0IzODQ3RTlEQ0E1MkFGRjIxREQyMjk1OTY0RDc2RAotOjEwQ0U1MDAwRkVCMUVGOTBGMkY3NkI0NzhCRkQ5RTJDRTgyOUREQTUyNAotOjEwQ0U2MDAwQjJBMUIxRjg5RUJCNjY0NkUxNzIwNERGQUZDREMxNzdENwotOjEwQ0U3MDAwNUU3RDk0QkY5MUY5MjkxRENCMDJBNDQ3OEMwNzQxODRBNAotOjEwQ0U4MDAwRjk5QjE5QTM3QkZCODcyMzI2Q0NDNDNCODdBM0ZBOEY4RQotOjEwQ0U5MDAwRUE4MURGNDNERUQ5NUI5MDE1NEZFRkVDRkRDOTE5RjI1MwotOjEwQ0VBMDAwQ0VERUExRDEyRUJBQkY3QUM4OUU0RTdBMjhFRTU3NEI1RAotOjEwQ0VCMDAwODhCREY0NEQ5MENGM0Q2MDdEODc0MTdFNjNGQTNBQzhDRQotOjEwQ0VDMDAwRUYxRTIwNDdERjAwRjk4REY5OUIzMjk3MzE2QzM3QzY5MgotOjEwQ0VEMDAwQTU4RjdCOTJFREM3M0E0N0MxNDFBRDYzRjg4RENENzlGRgotOjEwQ0VFMDAwQTUyQkMyRjdBRDk4NUVBMzkxMkVERThBQjk2NjM0QUU0QgotOjEwQ0VGMDAwRjdBRDk4Q0UyNjlFREFBQzk0NjZCRkRDQTMzRDNENTlEMwotOjEwQ0YwMDAwRUU4N0UwNzg2MzY4M0MyMzdDMjUzQzhENzA5NEYwRkRDRgotOjEwQ0YxMDAwMTdFMEY5NjA3QkYwNUM4NEU3MDhCNERGREFERjhGNEE2MgotOjEwQ0YyMDAwNEM0M0ZGMjZFN0IzRTUxMTI5RTIzREQyQjc3M0Q0MzQ3MQotOjEwQ0YzMDAwOENGNzFENDJGMzFDNUU3NTJEMzNBM0JGRERDRUUxNzQ2QgotOjEwQ0Y0MDAwQjI5QUY5MTBCRUE3NzEwOTY4RjAzNkQ4Rjc5ODc5QTQ5QgotOjEwQ0Y1MDAwMjkzNDBFRkE2NTlCQjYxNUU5RUVFNDQ2OTVFRUVCOUY5MwotOjEwQ0Y2MDAwN0YzMThDRUM3NkE3RkNEQzJFQjlEOEE0M0Q4N0U1NjUzMwotOjEwQ0Y3MDAwQUE2QkFEMUJGNUNEQjc1NEZFOEVFOEY3ODc1MzI2NDU1NwotOjEwQ0Y4MDAwNUUwNUJENkVFMUVGMUM5NEQ5QzdCNDhCNEY3OUJFQUM4MgotOjEwQ0Y5MDAwNENGMzEwQkY2MDg2REZBM0U4NkFFM0VGNDFDODc3Mjk0RQotOjEwQ0ZBMDAwM0JEMkI3RTRFRkI4NzRCNTcxN0UyREYxQkJEMTJBRjQ1MgotOjEwQ0ZCMDAwMDBFODY3MTBGMEQ5RTQ1Rjg2RDM3OUVCQjEwNENGMjFBNAotOjEwQ0ZDMDAwNUMxRjlDNjNFOEZEQTk5NkFFOTEyNDlGMEU4OUI4QjhCQQotOjEwQ0ZEMDAwRTE4MUJFRjRERTVBODFGOEREODEzN0M0N0JFRTg3NDRGRgotOjEwQ0ZFMDAwQkNEQzkxMENFRDZENkNGRjg2RUI1MDU3QjQzRjVDQ0YxMQotOjEwQ0ZGMDAwQjgxRkU4NDYwNzdGM0ZGRjZBQ0ZFNzFGNjY4OUY4QTFBMQotOjEwRDAwMDAwMUM5NjczNTVCRjkzMTBBRkQyN0Q4QUUxMkM4M0ZDRjA0MAotOjEwRDAxMDAwQTM3MEJFQzhFN0RFOUM2RDQ2MzkxOUYyM0IwOUI0QUU3OQotOjEwRDAyMDAwRkY2QkJGOTNDMDU4QjM4QUVCNEE3NjJBRUNCMUQ0QUJGRQotOjEwRDAzMDAwRkZERDA0NTU5Q0FCRTRFRjI3MTRGMEEyMzZCRjlCRjA1NAotOjEwRDA0MDAwNzg1NDAxOEZDQjc3Q0M2QkY3NzcxMzkyQzVCQkQ2Q0NENgotOjEwRDA1MDAwQzVFNTg2RkNERDg0RkM0NEJEMUMxOUU1MUM3MUM0NDk5MgotOjEwRDA2MDAwQTlERUNFOTM3Qzg1RjhCMUY4NkMyMTNGQUUxNkZGRTVDMgotOjEwRDA3MDAwOENGMERGMUE2N0RBODlDNzNGMEREN0ZBRkMxMkVERjM5RgotOjEwRDA4MDAwQTMzQTU5REM3RTU3NUIzQUY4NzdGQjVEOTQ4RUYwNjRFNwotOjEwRDA5MDAwRkNCRDE0MjM5RThDQkY5RjkyQUM5Njk5RTkxRDQ4ODFEQwotOjEwRDBBMDAwQTdFOUYwMTdGMTc0QkRGODdEOEJEMUY4RkIxNkVDN0Y4MgotOjEwRDBCMDAwMEU2RkUzMEM3OEZCOTZBRDFEODhFRjk2NUUyQ0U0N0MzQQotOjEwRDBDMDAwQkQyM0I5MUY5RUVBOTk5NDBERkM2Mzk2QjAxRjQ5RkJERQotOjEwRDBEMDAwODg4Q0NCMzVGRTdFOTJCNDAzQzg3ODVEREY0ODhFNkZCNgotOjEwRDBFMDAwREY4OTA4RjI1RkREQUQzNjQ2QTI5QzM5NjFFMkJGOTc2OQotOjEwRDBGMDAwOTQxMUFGNjlEOEZGMUQ1OTk1MEFDMjIzOTE3OTc3Q0Q1NAotOjEwRDEwMDAwODNGOUNGRkE4RDJEMDVGM0IzQkFGM0Y3MjI1OTE2RkY0MQotOjEwRDExMDAwQkQyMDM5QkY1OUM5M0M5RUFCMzg1QkYwNkYzNzhGREZGQwotOjEwRDEyMDAwMkFDREU2NzZCMjQ4Qjc5M0UyQ0MwQkIzOTg4ODlGNjVEOAotOjEwRDEzMDAwMjlCM0IyOTEzRThGODdGNTQyRkE1QkNGRUQ4MThERjgyRQotOjEwRDE0MDAwNUU2NUE3RTA3Qjk1QThBN0EzNUVEQzRERThBNTM1MUYyQgotOjEwRDE1MDAwREJFRDlDMEU5OTRFRkVGN0Y2REI3NTcxQ0U3REI3M0I4RAotOjEwRDE2MDAwNzVGOUVDQkE0NDVERkQ3RUZCNUNCQUYyREM0MEE2QUUxQwotOjEwRDE3MDAwQkNGRjMxQjcyRTNGQjA2MUIwQUVGRTM1MUY3OTc0RjlGOAotOjEwRDE4MDAwNkIxQjBCNzRGNTg3OUNGMkVBRjJDOUFDRjk1MTg0RUY4MgotOjEwRDE5MDAwRTZFQzM0QzI1Qjc3NDVEODQ5NUMxQzFGQjNFRTRFQTA2OQotOjEwRDFBMDAwRkI0QUYyRkMyMUUzREUzNTQxQ0ZDNjczNEQ3NzJCRDcyNgotOjEwRDFCMDAwRUI2QjkyMTgzRkI3REFDNUY5OTRFOUNGMzc5QTg4NUJFMQotOjEwRDFDMDAwOTc3QTNERjNFOUUzRDY2NUJDN0FFQjM5NDg5QzczRTQ4MgotOjEwRDFEMDAwNzkyMjI0NUVERDgzRjM5N0YxRUFBRDc4MTdFRjg3MUFBMQotOjEwRDFFMDAwRTlGNTg1NkNFMTU3MzNBQ0EzQkI5NURGQUZBQkI5QzdBRAotOjEwRDFGMDAwNEFGNzg0RTRGQzhDRjMzQTJFRTI5OEI3REFEQjdGMEYyRgotOjEwRDIwMDAwNkE3RjM2QjdBQjQ0RjZGMEVFNDE3QTdEMTJEODE1QzE4RAotOjEwRDIxMDAwQjNDRDc4RUU0NkZDRkQ4MTlBN0JBREVFRTVBRTJCOEY2QgotOjEwRDIyMDAwMzdBQjFGNUZDRjRDN0MzNzM3OEJERTVGQTU3QjgxNzJCRQotOjEwRDIzMDAwRENCNzA1N0RFRkU5QTdCNEJCQkU1OUQxM0MzRThFNDVCNgotOjEwRDI0MDAwNUJFOTVFNEJDN0UzNzFCODI2NUFEOTBBN0FCNzRBREM2NAotOjEwRDI1MDAwRjNCODdENkRERDAzNTgzNEQzNUE2QkUxMEYwRkY4MkQxMQotOjEwRDI2MDAwNjg0NzFCMzcxMkY0QzQ1Q0MwQzMzMzRCMUU3MjgwNUUyOAotOjEwRDI3MDAwRjQ2NDk1OTlFQzYyMUYzQzdGRUUxNkQwMzA1QkVGRURDNQotOjEwRDI4MDAwNzQ4NzczMUFEMkM5MzhDNDNGRjQ3QjUzM0YxRTlGRkU4NAotOjEwRDI5MDAwNkQzNjVGNUZCRUZBN0RFQjdEMEI5QjhFRkYzM0UyRkY0OQotOjEwRDJBMDAwRUREMDFERDFBMzVDQzdGRkQ2RkQwQjQ5QkY0NjM4QzlFMQotOjEwRDJCMDAwNzMzOTEzNzJBRDg3OTg5Nzg0OUZEQzE3MTI3RUYyRkU0NAotOjEwRDJDMDAwOEI2QjkxQzVCQkQ5NDFGNzY4MEEzMDJFNEZFMkVGRjY2MAotOjEwRDJEMDAwN0U5QzJFN0JFNTcwNzg2MDNERTQ0NzFERDVDQjU3QjMyRgotOjEwRDJFMDAwQTJEMTVGRDBDMjVDRDFDRTJCRDhDREZGOTdFRUE1MTBENgotOjEwRDJGMDAwRkMzQkJBNEZENzExOUY2OEMzMUYzQUI4NUZENzExN0Q2NwotOjEwRDMwMDAwRDI5RkFCQjg2NzE3QzIyNzc4QkM5NEMwODdCRjg3ODkwNAotOjEwRDMxMDAwRTIxMjU2NDdFQUY3RjFCNDFDMkUxN0ZFMkVFNTg1MEZGMAotOjEwRDMyMDAwQ0VFNzdBM0VDMUQwRkY1MUIzNTIxNTdDNjI1RUVCRUY3RgotOjEwRDMzMDAwOERFMEY3QjkyQjJEQTQ3NzMzRTY3RDE4RTMzNEZFQkNERQotOjEwRDM0MDAwREU0MkVGM0MwRUY3MzBEMjZGOEEzNjJBRkU0RDRBRjBBRAotOjEwRDM1MDAwNzdCRTBBN0Q4Njc3NUFENEVGNDkzRkZDNzZBREUyQzRBQQotOjEwRDM2MDAwREY4Qjk4QkQ0NjVGM0VERkMxN0ZBNzY0QUVGMUJEMUE3QgotOjEwRDM3MDAwRTk4RkJCQzJCOUJFMjA0N0U4RTU2RUU2MjZCRDRDQzRDNgotOjEwRDM4MDAwNTExNDhCM0E0NkJEQUNDNUNGRkQ4RDc4MkU1N0I5MUREMwotOjEwRDM5MDAwOEJFMkVGQTREQzc3QTFCRjJCRTQxRDE2ODA2Qjc4MjYwRgotOjEwRDNBMDAwQ0FGMTE1RTY3NkUzMjI1QkUxREE0MURDQzczOTg3ODgwQQotOjEwRDNCMDAwRkI3MEYwMzg5Nzk2REQ2MURDM0YyQ0ZENzBBMkZFMzlFMgotOjEwRDNDMDAwREYyNTJBQzdGQUQ4REJGOTVDMUVCRjIyRkQ2RjQ2RkZCNgotOjEwRDNEMDAwNUU4QkMzNDRGRUE5OTZERDkxMTRFNzgwN0VBRjY4QTAwMgotOjEwRDNFMDAwODczM0E2NUQwOTgzNTM4M0YzRDMxQTU1OURERkM4OTgwRAotOjEwRDNGMDAwNkFDQkY2RDA3OUYyRTExRURBRTIxQzhDNkYzN0JCRUQxNgotOjEwRDQwMDAwNkVDOERGRTczODQ0RUY3ODhEMTM3NjMwRTM3QzVCN0ZCRQotOjEwRDQxMDAwRjc2RjI4N0Y1N0E3QzVDN0Y1REQ5NjAyRkVERTA5RjAzNgotOjEwRDQyMDAwNDc4NkZCNDlDNjczNEM2NEEwREQ0MTVBMThCODk2RTY5RQotOjEwRDQzMDAwNzNCNUZFQUZDOTk3NzNCOUZGRjdGMjEwNkFBRkFEQjkxNAotOjEwRDQ0MDAwOTZGMkRENTczQ0IwMDhFRjE5NERBRDk5NkZDMTUwODA5MQotOjEwRDQ1MDAwQzY0Nzk3RTY4NzQzRDNDNjZFRkVFNUUxODhCNzExNEExMwotOjEwRDQ2MDAwQkJGRThCMDc3M0I4NUM2OTM0REM1QjkwQTlEQThGRUY4NQotOjEwRDQ3MDAwMUI1NzNGQzlDRjQ1M0NENzMyODVGNkMzNjI4NUM5RjhGMwotOjEwRDQ4MDAwMkVFMkU3MzI3RkE5NTZFNEYzNzk3RUM5NEE5RTZGMTRGMwotOjEwRDQ5MDAwQkZBQkIwNEREODVCNzBERDk4RTJCQUQxMkVCMDQzRDhBNwotOjEwRDRBMDAwNjM3MEREOThFMkJBRjEzQkYyMkZDQzIzRkZDMjNDRjI2RAotOjEwRDRCMDAwMkZDQzIzRkZDMjE0RjkxNzdFMkY2MkRFOTQ1Qzk1RkJGQwotOjEwRDRDMDAwRUQ0Njg3RUMwRkY0REI4RDBFRDE4RkQwNkYxNzlBNDdBNgotOjEwRDREMDAwQkY1RDY4N0RGNERCODU5NkEzREYyRUI0MUNGRDc2QTFDRAotOjEwRDRFMDAwNzlGNERCODVENjQ3QkY1RDY4OUUwREJFMzE5ODQ3N0VENwotOjEwRDRGMDAwRTc5OUE4Q0I0RjA2RkQ3Rjc0QzhGRTQ2QkY1RDY4RkY2NQotOjEwRDUwMDAwRThCN0QzRjVBNzJERDJCNUJGOEQ1NUU5REFBM0RGMkU0NQotOjEwRDUxMDAwQjRGRTFENTU4QUNFQUY3Nzg3Nzg4Nzc2RjY4NjM4QTIxNwotOjEwRDUyMDAwMUY1RkFBQjcwMUU5RkU0RjExRkZCOENCODJFNzQ1QjVFRgotOjEwRDUzMDAwN0UwMTNGQjc4NUJCMzk5RTZCMEIzOERFNERGQzlFODU2NwotOjEwRDU0MDAwRDIzQzgzRjBCQ0Q0Q0FGM0Y5M0NDRURCNDgzRkU4MTdBOQotOjEwRDU1MDAwMUI2REUxN0UzMTRDRDEyRjg2MjlGQUM1MzA0NUJGRDhFRAotOjEwRDU2MDAwRTg5RURDMkY4NjI5RkFDNUYwM0JGQUM1MzA0NUJGMTg4NgotOjEwRDU3MDAwQTZFODE3QzMxNEZENjI5OEEyNUYwQzUzRjQ4QjYxM0JCRAotOjEwRDU4MDAwRjQ4QjYxOEE3RTMxRkM4RTdFMzE0Q0QxMkY4NkRGNEY0OQotOjEwRDU5MDAwQTA3RkNFMTI5QzE3RUFGMzNENzRFNzRBQTA0M0REQjlBMQotOjEwRDVBMDAwRDJBOUNCQTMzRTFGNUExRkY1RjlEMDcyRDRFNzQzQ0JDMwotOjEwRDVCMDAwNTE5RjBGQ0RBMzNFMUY1QTFGRjVGOUQwN0M3NDhFOEI1RgotOjEwRDVDMDAwRjYyMUVBRjVBMUVENTBBRjBGQ0Q2N0Q3RkE1RTQ3REI0NAotOjEwRDVEMDAwRDlGODhEMTc4RTYwREExOEE5M0NBOTAwQ0I4ODc5NjEzQgotOjEwRDVFMDAwQzUzNEY0NUYzNjg2MjkyOTMxQzAzOTJEQ0FGREQzNDZBQQotOjEwRDVGMDAwMjcwMTk5ODgzOENBMUNENjZDQTJERkVCQzNDMzIzQzZBNwotOjEwRDYwMDAwMzkwNDE4QzVBRDY2N0Y5NzQ0RTU2OUYyRkUxREZFMDEzOQotOjEwRDYxMDAwQkNFN0VFNjZGNDdCMzREMkJGMkVEQkJCOTk1M0M1NTQxNgotOjEwRDYyMDAwRDYwRkU2REJBRjY3MUM1RkQ2MjNGRTE5MzIwRkJDNjk0RAotOjEwRDYzMDAwOERGMTNFQjk0QjFENzkxODM3QkI0REZDNUVFRUI2RTU1QQotOjEwRDY0MDAwM0NERURBNDg1N0Y5NDI1RkRBNjZEQTc1MDhFRkQzMzQyMAotOjEwRDY1MDAwMTcyQTc0RUYzQUMzQ0M4RTU5RjIxMDRFOTU3OUE4NDcyOQotOjEwRDY2MDAwNjRGNzhCMTFFQkFBQkMwRTdGNzc0Q0NFNUJEQTQxODE1RAotOjEwRDY3MDAwNEZEMEZEQzRBMUNEMERBM0EyQTExRkNEMzc4MjdFMUYyNwotOjEwRDY4MDAwNjc5Qzk1RUIwRkQ4MEVDRjk1N0Q3RDhBNjc3MzA4N0REQgotOjEwRDY5MDAwNUYyM0Y0NzFDREM3Qzc3RkU2QTkwOUJDNUQzODZGRjc3QQotOjEwRDZBMDAwQ0M1MzUxMDRDNzA5MkIxNDhBM0IxQkJBODM3OUYwMUU1MwotOjEwRDZCMDAwQjQ0N0NDQkJFRjhFODA4QUUzMTVBRUUwRTNDOTdFMEJBNgotOjEwRDZDMDAwMzdBNkQwQkREMDQyRDYzODFBRUZCNUIwMDEwQTQzQkU1NgotOjEwRDZEMDAwMkRFMTA2RUIzQjgyRUJDQjgwQUQ4Mjc2RUMxRjdCOUY4RQotOjEwRDZFMDAwNkFEODgwOTg3QzhDNDc2NEY1OENERTE1MUQzRkUwM0Q0MAotOjEwRDZGMDAwREQ3QTA5RUQ4M0E4NUY5MjZCQkQ3QzBBQkRFMzNDQzE3NgotOjEwRDcwMDAwQjc2QzM5ODI2RkJDNkZEMUVCRjE1ODdGMEI3M0E3QkEzRQotOjEwRDcxMDAwNDgxNEQxRkQ2MzM5OUYzRTlFNUQyNjEwOEIyQzhCMzVCRQotOjEwRDcyMDAwOThDMjE0QzQzNzNCMUMxNzQyM0ZCMEYzQTcyMEJFNzMwNgotOjEwRDczMDAwREQxNjdBNTc3OUEyRDk2OUExNzczQTNBODhEN0I5RTQ0MAotOjEwRDc0MDAwOTBGMTNBMDY3REMxMTA5NzUzQjNGNEEzMTRCNDM3MkY2OAotOjEwRDc1MDAwOEUzNDkxREQ2NEYxOUUwOEQyMUJCNDBEMEFGMTM1QTkxNwotOjEwRDc2MDAwMDcxNThBNzhCRjRCMkI1RThGOUY4NjcwREY2NUExRkUwMQotOjEwRDc3MDAwNjRCQzRFNzlCQTNGQzU4NEY3MTNCQTZDQ0E4OTU1NDk1RgotOjEwRDc4MDAwMEY1OEQyMEZGNTAwREY0QkI3MENDNjdBMkJGOUJCQTJBRQotOjEwRDc5MDAwOTc1NkVDRTFCRjRCMkFGQzNCRjI3NzRFRTc4OEY4QUY5NwotOjEwRDdBMDAwQzI2QzZGMzRDNkMzQzhERjUzOTNGNzY0RTRFRjk4NEE4MgotOjEwRDdCMDAwM0I0RkUxREJGRDhGMjI3RTBCOUYxMEVGN0VBRjI5QTQ1NAotOjEwRDdDMDAwRkJFRkM2QjhBQjUyQTFGRjJENTg2MUExQjhBRDA1MDY1RAotOjEwRDdEMDAwRkRCMDU0QzQ2NTVERTlGNzRERDdGNjMzRTg4N0YyNzdCRAotOjEwRDdFMDAwNzI0NDFEQTY3NkZEM0REQTg1RTVCRENGOTkxNkNFMDdCQwotOjEwRDdGMDAwNjZFRTYyRTRBRjlBQjk2Qzk0MDlERkFCNjY3QjM4RkRFNAotOjEwRDgwMDAwQ0M1Q0M2RjU5Qzk5QUY3OEU4RkVBNkQ0MUJERjE1RkE3MAotOjEwRDgxMDAwQ0NBNENCQzkwNEZGRjc4NUZFMzIxNUUzNTUwMUNFRTM1NgotOjEwRDgyMDAwMUFDMzQ0MUM1QjEyQTVEMzJFRjNGOEQ1NDkwRUNFMEZCNAotOjEwRDgzMDAwMUFGN0YzNzczNzVBN0MzNkFFNTcxRDYxRkNERDM4MDM5MwotOjEwRDg0MDAwN0Q0RTM0RkI0RDc4QTFEMTNEMTRFODEzRjJFMzUxMUYxNgotOjEwRDg1MDAwODJGRUE2QTM3RTE0ODdGNDlFOUE0RkYxOTAwNTBBRERGRQotOjEwRDg2MDAwMjMzMkQyRkIzODRCRTVFQjE4NkYzQjZFMkI3M0ZCNTgyMgotOjEwRDg3MDAwMjhCRDAzMUQ2MzdGM0U4NURFNjNEMEM0Mzk1N0QyQjExNgotOjEwRDg4MDAwOTFFRTY3NDUwOEZCOTQ4M0RCOUY1QUVEMTRBOEFCRDI1OQotOjEwRDg5MDAwMjNFQTdGOUE4NkYxQzRCM0QwNjZEODg1OTZFMUMxQjhGMQotOjEwRDhBMDAwQkRDODJDNUU3RUI0REY5RkE2QURDMEJCMUYxREQ4MkRBQQotOjEwRDhCMDAwRDQ5RjU4MDkxRTlBN0M3N0EyMDMzQjAyREEwRjkwNUYyRgotOjEwRDhDMDAwREU3RTY3QUVCNTI4ODQ1RjNFOUMzQkYyMkJGN0MwMjAxRQotOjEwRDhEMDAwQkU4QjBDRjcyOTE3REZENzkzN0VGRkE4MjNCRDc4MzZDMAotOjEwRDhFMDAwQzAxNUY3QzdBQ0U4QzZCQjgwNTJEOTlGRkIzMUNGRTg2MwotOjEwRDhGMDAwQzFGOEZCOTI3MjdEMkM4MEYxOThCNzhBN0M2QzlERUQwQgotOjEwRDkwMDAwQTMzNTBFODIwQkU1OUJGQTlEOUY4NjcxMzRFNUY2QzYyMgotOjEwRDkxMDAwMzE0ODc2MTU1OTk1MDUxODlGMURFNDUzOUEyNzM5MTVGNgotOjEwRDkyMDAwRjk1NDZFMDA3RjhGRUZCODk0NDMwNkZCNDRBQzlCRDc0RAotOjEwRDkzMDAwMzdEQTI5NjY2NzcxRkVDREM0N0JFMzlGREZGN0YyNEVDRAotOjEwRDk0MDAwOTQ1QjcyRkU5RjVCRjRGNzZBNjUxQUVFMTZGMkEzRkExNwotOjEwRDk1MDAwN0ZFNjVFODlGMTNFQzlBRjkyQjVCRkY3ODNGRTFGMzYwMQotOjEwRDk2MDAwRjFGNzEzQkFBOEI1NENEODhCQzhBRjJDRjkwNjEzRUY1MgotOjEwRDk3MDAwOEUwNEYxRUVBMUY3OERGRjBCMjkwRTcwRDUwMDgwMDAwQgotOjEwRDk4MDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkVEN0Q3MAotOjEwRDk5MDAwMEI3ODU0RDVCNUYwM0U3M0U2OTU2NDEyMjYyMTIxMEYxRAotOjEwRDlBMDAwNDg5ODA0MDJBOTQ2OThCQzIwQkMwRjkxNDdCMDY4MDc2QwotOjEwRDlCMDAwOTIyODY4MTIyNjg0NDdCMDY4MjM2QTBEMkQyRDEzOTI5MQotOjEwRDlDMDAwNjA0MEYwMDY4RDgyRDRDNzgwQ0E0NUE1MUE5NTVCNDE5OAotOjEwRDlEMDAwNjkzQjQ4QjU2QTUxMzE0OEY1RDZERTMwM0M3REI1MzVGNgotOjEwRDlFMDAwRTJGNUFBRkZFNzZERUY1QTZCRUY5RDk5NzMzMjEzRjBFMgotOjEwRDlGMDAwRDFGRkVGN0ZCRjhFOUZERjY2OUZCRENGN0VBQ0JEREVDOAotOjEwREEwMDAwNkJFRDkzOTYwRDhBNzM1RDM2NjM1RTg3RjU4NDkyMDBBNQotOjEwREExMDAwNjVCQjEyQjA4RDYxOENGOTY2NkFDMTNDNDZCRkJGRTUzQgotOjEwREEyMDAwMzA3Njc4QjQ4QkIxMTRBOEU0RjVERUYzNzAzMjYzQjVDOAotOjEwREEzMDAwNkJBRDZDMjMzQzdBNjAxNEQzMThENDFGRjg5MUQ1RUZFQQotOjEwREE0MDAwODM3MUFBQUQ0NzVFQjA0Mzk5RTRFNkZEREY2OUJBQzNDRQotOjEwREE1MDAwQzI0QzM4NEEyMEQ3MDVGREFFNkU4QzcxNkY4NEY2QkI4MAotOjEwREE2MDAwMEIzQzg5NkU2ODhGQ0I3NzVCQkQwRUM2Q0VCQTE5RjVCRAotOjEwREE3MDAwOUY5MUUyNDlDNkU3RDc2RDNBNzhGRjVCRjBFODA3MDc2OAotOjEwREE4MDAwQjJBRERFN0NDNkVBRjYxNUFDNEY3M0UxN0JERTc0Nzc4RgotOjEwREE5MDAwMDlENDFENEVBQjA3REVCQkJFMzVEMUVBODJCMjM2OTU0NgotOjEwREFBMDAwMzU3NkU1RTMzQ0JENTlGM0UzNjFDREY4OUJDNjU4ODE3QgotOjEwREFCMDAwNUI2MTBDRkE3RjUwQzBBOEZDQzhDMjE2RjA3RTFEOTZCMAotOjEwREFDMDAwNzlCQTdFMjY2QTY3MUQ1QjM1RkIxMDgwMDNERjNBQ0I4RgotOjEwREFEMDAwMzQzMzlGQTk5MEIxRTE1NjJGRDM2MEZEMkRFOUNDOEQ1MQotOjEwREFFMDAwRjAxQTBBQ0Y2RDg1QkMzRDI2MjkwNDNGMjNEQ0FDOEM5RgotOjEwREFGMDAwNjkyNjY4MUYwQUE1QjUzMDA0Qzc0QzY4NTdFMUI5MjVFNwotOjEwREIwMDAwRUZFNDQyOTY4MzcwNjM4QjcwM0Y3MjNEQjI1QzJDRDYxQgotOjEwREIxMDAwQ0YxNkQ4NEQwQ0Q2QjVENDBFRkY4NjIxNjZBQUY5QjMyMAotOjEwREIyMDAwNTI4QjE5NUJCNTQ1NzFEQUUwRDExMjg3RUJBQTA5NTAyNwotOjEwREIzMDAwNUZGMjkyODVBRDgzRkFEQzI0OTczNTFERUFCRDcwQkU5NQotOjEwREI0MDAwM0JBMUJFRjhBNjAyQUIwQkY2NUQ4RDY3MDFFQjU4QjJBOAotOjEwREI1MDAwNkQwMjczMEQ4NkQyMEY2NTUxRkY3OTY1NzlDRDk2NDNCRAotOjEwREI2MDAwOTlGQjVENzg3QzlBRDUwM0YwNUFFMkQ0QUM0OUY5QTFDRgotOjEwREI3MDAwRjZGQTBFNDVGMzNCRkFEN0U3QkI1NURBNjczNTFDMjlCMQotOjEwREI4MDAwQzJBRkU2QTY2Q0VCNjIwN0Q2NUZCMkFDQ0FDNzdEQjk3RQotOjEwREI5MDAwNjg1RkYyM0RFODE3QzA3RTczNzNEODhCMENENzBERkIxRQotOjEwREJBMDAwREE5OUNERTcyQjBDMUI3RjMxOEUxRjM2M0ZGNDVGRTRGMwotOjEwREJCMDAwQzE3REI5RTM2OUJFM0EyN0VDM0IxQjRCMjdBRDEzRTBBRgotOjEwREJDMDAwNDA3MEVBREQwQ0UzQjk2ODFFM0E4RkZBODBERkUyQzZFNgotOjEwREJEMDAwRjU5ODYxNUVBODVGRURGNDVCNzA5RUM1QUQwNTU2MDZENQotOjEwREJFMDAwQTU3NzEzOUZDN0RCOUU2OEJEMDRFQTc1NjZBNzM1MTM0QQotOjEwREJGMDAwRTc4OTA1NTgyNEQzRkFGQzNCRTE2ODk2MDA1QzkyMUM0NwotOjEwREMwMDAwMzgwRjVCMzRERkQxMUYzRTc1NjJCRDRCM0ExMkFENEIwRQotOjEwREMxMDAwNzVDRkI3NThGMDNDMTZDMjdBQkEyMjlDRkJFRDc4RUU2RAotOjEwREMyMDAwMjlCODlFRTk1Njg2RUY5QjM1QUIxQkQ3MjNFMDdCRTZGMAotOjEwREMzMDAwODY5ODhENkMxMEJDREZCOUQ1OTIwREY1OUYyMkZFQTY5QgotOjEwREM0MDAwRTA3QjFDQkZFNkU2MDQ3MjE1RENGNzBEMzE2RTVDRTc4NQotOjEwREM1MDAwNDI2NzA3RURBRjBGQkU3NzAxM0NFMEY5NTJBNzg3RTBCRQotOjEwREM2MDAwMEI3OEUxNjMwMDg3MjU5REZBRjMwQ0FEODdDMzc3NDlGNAotOjEwREM3MDAwNjcxREQxREIzMkIzRDdFQTBDNUZDN0I2ODNCOTBBQzBFMAotOjEwREM4MDAwNjUyMUQwQjcwMkYwNjc0RTZGMTZFMkNCRDlCQkFFQ0FBMgotOjEwREM5MDAwQTI3REMyM0ExMUFFRjE2RUQ3QUNCNDYyQzIxM0MyNjNCOAotOjEwRENBMDAwODkyRkI1NDU5QzdFRTU3Q0JCREM2NjlBNkY5N0Q4NTc3QgotOjEwRENCMDAwNzRCQUQ0NUU0QzQzQkE4NEYzNURFNzhBNEU5NzU2MDYzNQotOjEwRENDMDAwRTNDMUJDRDYyNThBQkY0NUU5NEZBNzkyM0UyNTVENEFGMAotOjEwRENEMDAwM0E5NUY0N0JCRkM1MTM0ODUzNDI3Q0E2NzYxMDZCN0MwMwotOjEwRENFMDAwMkEwMjlDQ0UwQTNFNzJCNTM4NTc4MEVCNkYxMEFFQjI1NgotOjEwRENGMDAwRkQ3NTcxQUVENTM5N0E3QUM3RjE3MERDRTc2NDdCNTk2RQotOjEwREQwMDAwMjBGNzg2RkM1MDdGMzk2Rjc1MTI3RjBGRjExRUYxRUQwMQotOjEwREQxMDAwMzkwMTFGRUNCRjhBRkEwQjc4MDk3RTUxREZDNzJGRjY1NQotOjEwREQyMDAwQjQwRDQxN0VGMUE0RTI0NjdFQjE2QUYzQTFDQzVCMDA2MgotOjEwREQzMDAwNkVBQjdFMUU4NzlDOTc3REI4RjJFMUVCRDMwMTBFQ0NEMwotOjEwREQ0MDAwRUNBNzczOTNFQjVBRkE3OTAxRjE4OTY1OUY0RkUyRkNENgotOjEwREQ1MDAwMjIxMDk5NUZCOEYyQkM4NzkxNkZDQkZBOTIzQjdGM0U1RAotOjEwREQ2MDAwQ0FDQkY5NEQwMEY5Q0QxRjdGRkVEQ0IxODlDODQ3OThCOQotOjEwREQ3MDAwREZFMkI5MjRCNDlGQzVFRDZGNThFQTFDRTFGMEUzRkM4MwotOjEwREQ4MDAwNkU2M0RFQjkzQTNDQUY3QTg3RDVBNUMyQTNGQUQ2M0ExQwotOjEwREQ5MDAwRTJCRjJDOERCOTczOTVEMEY5MUJGMUEyQUU1NUQxRTgzNQotOjEwRERBMDAwQkRBNjcxN0VGNTVCRTREM0Y1OUJFNjMxOTQ1M0YyRENCRQotOjEwRERCMDAwNjA2MkM2QzZDMTNFMTk4N0FGNUNGRjQ3NjJGREU3MDREQgotOjEwRERDMDAwN0ZCQjVBRTBGN0Q1MEREM0FERTlDOUI4REZCQTIyRTA4MQotOjEwREREMDAwOEM2Q0ExNzhCRTcwODlGRTc5REZCOTM5RkJGOEZDN0FDQQotOjEwRERFMDAwQTQ5NzczNURGQ0RDQ0U2REIyMTBGRjM5QjcyN0RFQ0Y5MAotOjEwRERGMDAwNjA3RjFGQUU3QUU2QjUyQkExREYwNzc3RUZDODYyQUE3NgotOjEwREUwMDAwRkVEQzU4MTEzRjM3MkM5N0MzQjlCMUMxMTFDRjREMkQ0RQotOjEwREUxMDAwMDhFM0MzQ0IxRkUwRTc1NkZGRjhBQkZGRjFBQzhCRjY4RQotOjEwREUyMDAwQ0JGOURENjY5QjFGRjlGMUUyQUUyN0U5MUMxN0I2NkY0RgotOjEwREUzMDAwQjE2NDQzQkZDMTA1RDkzQTNFNUVERjU4RTA2NDAwREZGQwotOjEwREU0MDAwQUJEQjc3NTg5MDRGMEMyRUUwNzAzNEQyMDM5NDFBMEI1MgotOjEwREU1MDAwQTMzMzk0NEI0QTEyRTI1RjMwMURGMTRGRjY0N0ZFRjhCMAotOjEwREU2MDAwMjRDQzczRDMwRDMxMDk2QzZDNjg5RUM5MDU5Q0NFRUEzNQotOjEwREU3MDAwMUIxMzkzNzBCRUZBQzZCQURCRDk5ODkwM0MzMEVFRjMxMAotOjEwREU4MDAwNTQwQ0E3OTdDNTMwMUVEMkVEQTlFOUVFQUM1NTg0OUY3RQotOjEwREU5MDAwQTY4ODcyQjdBODgwOUZFM0NGMDBEQzMxODAwRjQzRTNGMAotOjEwREVBMDAwQkExRTQxMzgwQ0ZENDFBQzFCRjlDN0M4OTE0MTNGQ0VBOQotOjEwREVCMDAwOEJGODhERUJCNjAyRkZCNDQzQkY5MTJCODMxRkUzM0E3RgotOjEwREVDMDAwNDYwMjg2RTE3QjU4QzYyNzUxQzk4NjQwN0QyNzJDQkI3OAotOjEwREVEMDAwMTRDQTFDOTU5NzBCMEIzODlFNDA3QjAwREI1OTcyQjAxRgotOjEwREVFMDAwMDRGNzJGRjFEQjg4QkY1NkY2NTA3QjBFRjJCMTY0RTZFMwotOjEwREVGMDAwNkU3MTg1RjA1NThFMjNGMTU1RTI3M0I0RkRDRDJCRTBBNAotOjEwREYwMDAwN0NFNTdDRkIzQjk1Q0RFMTY5OEQ4NUZEMjU3RDg1RkQxRgotOjEwREYxMDAwMDFCMjk2MjY4NUY2MjVEN0M3RjI2MDVEQTgzRkZFRjhDOAotOjEwREYyMDAwOTIxRDFCNjE5RTUzQ0RFRUFDNDZDNzQwRkJFRDlDMzk2NAotOjEwREYzMDAwMjRDMjdFOERGQjk0NzRCM0M0Q0U2OTFBRTg2NjUwMTA3NwotOjEwREY0MDAwRDY3REFFNjNDNDIwOTQzQkE3MTQ5MDZGRjBERUE5MUI2RQotOjEwREY1MDAwNjI0Q0I4N0VCOUFGNUQ2QkExMzNBQzc1Rjc1QTNCOTU5NwotOjEwREY2MDAwOEZBRTA1QzIxQkNERDg5RUI1Njk1NDdGN0NBRDhCQ0FFMAotOjEwREY3MDAwQUVCNTc5RjRGQ0U2ODIyNEJFMEYxNjhDNDczRDEzRjQ0RgotOjEwREY4MDAwMDFDRTBGMDI5QzRFN0E5QTQ2RDBCRUU0NzNBOTE3RjRENAotOjEwREY5MDAwMzg4M0YxNDk2MUZDRkI3NEEzOTA5QjJDQjgxOUU5OUI3MQotOjEwREZBMDAwMzU4RDYwMEZDMzU0M0QxREE3RTI0REY5ODg5RjdDN0RFMAotOjEwREZCMDAwRjJCRDlCMkNCREM0MEY1OUJDRDVGNTMwOTA1Q0RDNEQzNwotOjEwREZDMDAwNkZDQzRDODVGOTk2NzY2NjE3MjhGMDVFNEQ1MzUxNEYwRAotOjEwREZEMDAwMTNCNEQ3QjRBNkJBOTE2RjJDNzVCOEQ2QTM1QzVDRUExQgotOjEwREZFMDAwQ0I3NkEzNUM4Q0VCMkMzOEJCMEREQTk3QjY1RUVDQzYxNwotOjEwREZGMDAwRkUzNzI5Q0M4M0Y0MDVGQzkzMjFEQzk2QjFCRTlGNjZFNQotOjEwRTAwMDAwMDdCRUI2NUNGMEI1RTVDODJGMDE1RUNCOUEwRThENzRFNQotOjEwRTAxMDAwQzJGQkNCREMzMTA1MjhERjk3NkZFMzc2QzI1QzEzNkI2NAotOjEwRTAyMDAwNTc1MDBFQjc3ODY2MjExRkVCQkQ0NzcxQTNCRUM5RUVFRQotOjEwRTAzMDAwMDVGRTZBMEZGMTU3N0Y5RUE3QTMwMEU1RDI5NzgwN0Y2OAotOjEwRTA0MDAwMzBGRTQ1Mjg4MzU1REM1Nzk3ODZGQjYwQTA4RjNDQ0M3QgotOjEwRTA1MDAwNzBERDFFRDJFQjA3MDk3Q0U5RTkzQzExRUZDQUU3RjA1RAotOjEwRTA2MDAwNDY3RDlENzkzNTEzRjJERDU1NDJBRTBEQjdGNjlFQjg2QgotOjEwRTA3MDAwMTVGNTk5Nzg5MzdCMjdFNzk3QUZCQjcwOUYyRkFCQ0NCMwotOjEwRTA4MDAwNDZGMjQ2RjQxN0ZDNzRGODRGNEJFREM4REY1NkM1RTc2RgotOjEwRTA5MDAwQTQ5MjVFQjU0RDI1RkUyOEYxQTc0MUFDNzlFOThFOEFBMAotOjEwRTBBMDAwMjE4ODM3NEJBMTFERTVERDc2N0MwODJDNzQ3REU3QTUyMgotOjEwRTBCMDAwNDMxMEFGOTY2Qzk5NzlCNzBGRTQ1ODk2ODBFMzY5NzM3MwotOjEwRTBDMDAwNzAxRTlFQ0Y3QjNCNTI5MzlBNTEyRkJDQUU2NTE0ODMzQQotOjEwRTBEMDAwRjYyNTNCNkVDREMyRjJCRDFEMzEwQjkwREZDRjcwQ0U2OQotOjEwRTBFMDAwOUI5MTA4RkI1RDc2NkY2MjgxMUEyNjM3N0UyREU4RjFFMQotOjEwRTBGMDAwREFFQjJFNEQ0NTdCNjBFNTVGMEZEREVGMUMwMUYzMDM4RQotOjEwRTEwMDAwQUMxMUVFOUY3NkM1Rjk3REQwNjVFNURBN0Q1OTJBRDA1MAotOjEwRTExMDAwRDg1RjZEREU2NzkxNkY3RkRGNzRFMENBMDlDOEZGMTVCNQotOjEwRTEyMDAwRkZBRTc0RUFFRjRBNzU0NkEwRjczRUY5MEFGOEVFMDIzMAotOjEwRTEzMDAwN0NCRUVFQTc2RkQzMzg3RjM2MURCRTYyMjFCQ0JGRjIxNgotOjEwRTE0MDAwQkFBNzEzNzA5Q0VGREY3NTc0OUMxMzlFREYzREQyRkI2MgotOjEwRTE1MDAwMjI5RUQ3MDdDQThFNUQ0RTE0NENEQjc2OEM0MUI5RkRFQQotOjEwRTE2MDAwNUI2MTQ3Q0Q0REYyNUNCOTEwRTFGRUIyNEE3MDhGMzY2QgotOjEwRTE3MDAwNUZDMzNFODVFMDJCRUIzNUZFNDFBNENGN0EwM0NDRUFBQQotOjEwRTE4MDAwQzREMkM5NDg1RjdFNEY2NTREQTgwRjQ4QkQ0NjNFRkZDQgotOjEwRTE5MDAwODM4MENCN0I4MzNBQjIxMDJGNTZFQ0RBOUE4NTcyRTVGNgotOjEwRTFBMDAwRkQ3ODVFQUZERTc1RDUyQkM4QTdCQzBGRDlCOERFNkU4MwotOjEwRTFCMDAwNjZBNDI3RDdGQkI4REVDRDFBODA1RUQzNDNGMzlGMkUyQgotOjEwRTFDMDAwODhBM0Y1QUZEODU2QTQ5Mzg3ODBBMUY0RkM3RDMzMkJBOAotOjEwRTFEMDAwQzc3NTBDNkZFOTJENDBGREVCMUQ3MzYwMjk5RUVCM0I2RAotOjEwRTFFMDAwQTBEN0EyN0RGQjZCMjFDRkRFRTk1MDY3RTE3MzFGMTA0MgotOjEwRTFGMDAwMTJFQTIzRUY3NDNDMUQzRkQyMTFEMkUzRTI4QkJCMDI0MwotOjEwRTIwMDAwQzhFN0FFREI5QjU4QTg3Mjk0MjJGQ0JBREUyOUY5OTNDQQotOjEwRTIxMDAwNjNENkQwNjREMkM3OUM4OEE3QUJGNkJGMzA4QkYxM0FFNwotOjEwRTIyMDAwMDhDMkU4RjBCQzU2RTg2MTdERjVCRDRGOTI1REI3NzI1QgotOjEwRTIzMDAwMEZENzI3NTY3NjNERjk2MjA2OEM3M0ZEM0VBMTRGMDgzNQotOjEwRTI0MDAwM0RFNTNBNDFDRkQ3RUZFNTcwQjk2RUVGMDk2QjdEQjg4OAotOjEwRTI1MDAwM0Q5Mjk3QjQ3RTI4Njg4MkI2QzI0MTBCRUU3MkExQkQ5MgotOjEwRTI2MDAwMEQ4Qjk4MDhGOERENjU1QUQ4MEM0QzNDQ0JFREU0N0E2MAotOjEwRTI3MDAwQTVCOTk3RjRDMzhENzlERDY0OTc1RkQ3MkFDNkNCRUIzOAotOjEwRTI4MDAwNUU5RjQzRkI5RDM3Mzg1QzFGQjIxNzVBMDhBRUYyN0Q4NAotOjEwRTI5MDAwODAwN0JERjc1OTRDQzIxOEU0N0Y4MUVCNjJEQjUxQUVCOQotOjEwRTJBMDAwNkJENzNCQ0M1OEI2NUNFNzIwMzk3RjZGQTMyOUNGMENFNgotOjEwRTJCMDAwRjBENTk0NTgzN0VBNzE0RDc2REVGRjk2RDg4NDlENTg5NAotOjEwRTJDMDAwMUU4OEU1RjVDRjYyQjI0ODRFN0Q2NkYyM0NCOTBDRkE4NQotOjEwRTJEMDAwRERBMjFFODk2MTIzRjBDODdCMEY5OUEwM0UyQUM1M0JCMQotOjEwRTJFMDAwQkMxMEU2NEY2NTQwM0QyQUNBOEY4MDgyRUQxRkZERjJDQgotOjEwRTJGMDAwREQyMjVDQzdENEUxQzE0RjE4MkNDREEyMjQyRTlDMDE5NQotOjEwRTMwMDAwNzgzMkJBRDBDOUY5N0I3RUIwMDhGMTNERTU3OUNFQUY1RAotOjEwRTMxMDAwRUZCM0IwNzY5NDc3Q0NFQzYxRjNFMTc5MDBGOTE3OUUxNgotOjEwRTMyMDAwRkYxNzI2M0ZGMkUzMDM0QUUwQzE3MEZEQUJCQTkwRUI2MgotOjEwRTMzMDAwMEYxRTlCQTM1RDgxNzUyRUNGRjZCQTcxMURERjUzMkM4NgotOjEwRTM0MDAwOTdBMEVBQzI1QzZBMkU4RUZGOTE4NUI3NEIzREI2NEMxMgotOjEwRTM1MDAwMzBFMTRDNjE4RjU5MzNEMjFDQjhCRjE2MDEyRjQ1RDMyMQotOjEwRTM2MDAwNTgxM0FDNjM1REZFRjNGNTg4MkZCN0Y1REE5OTBERTYyNwotOjEwRTM3MDAwMkZFQjhEMjVCRDM2MzNBMzlDRTQ1QjhCODA4QkUyNEE2QgotOjEwRTM4MDAwNDY5OUMzOUVDRjM3Rjk2Q0IwREVEQjk4REQ4RkZEOTlERgotOjEwRTM5MDAwRERBMEZGOUE2MjM0N0M0RjM5RjBEQjJGOTBERjBGNTUwMAotOjEwRTNBMDAwM0YzRTM0MDhGQTBGQkQ0NTcxQjc0MDlGREE3MzY3RUZGRgotOjEwRTNCMDAwN0I5REExRkRFQzJGNDBGODJENERGMTVFNTYwOEU3RDk2RAotOjEwRTNDMDAwNzNBRUZDODQxN0NFRkIzNjY3OTdERDlEQ0ZDNzBCREY5RQotOjEwRTNEMDAwQzc4MUQ1NUYyNDI0OTk0MkVCRkJBOEY3RUNDRjlGMjk5NgotOjEwRTNFMDAwQzZEMjRFNzJBOEVDODBDQUZENEQ4NkY1N0M5NEU2MzIwQQotOjEwRTNGMDAwRDMzOUY1REEwMzI2RUNFRjMwRjkxNTA1RkIxRjdBMUI0QwotOjEwRTQwMDAwRDc1NzY2NzcwNDU0RDRFM0VEOTYzRjg1Q0IxOTc2MjQyRAotOjEwRTQxMDAwMzNGMUVDQzUyNDVBRDhERjQwNTkxOEQyQzJDRjZGRUE4NQotOjEwRTQyMDAwMjBCRDdERjk4MzQyQUUzRkZFNDA5QzkzODRBRjg0MUJBOAotOjEwRTQzMDAwNzM2OTJDNUNDRUZDQ0FCMUFCODZGQkIxMzgxREZGNDBDMgotOjEwRTQ0MDAwM0MzRkY3NzkwRUU5MTdFNzBFODA5RTExNDFFRjk0RTUwNgotOjEwRTQ1MDAwNTFENDMzNDA3RjA4RTQ2OEI3MTQ5Njg0RTQ2Qzk1OTRGMwotOjEwRTQ2MDAwQkE0MjBFQUI2MkRDMkEwMUFGMkE4Nzg5QzNBN0QyMDA2OQotOjEwRTQ3MDAwMUY4MTM3NDZCQzMwOUVCQjNDNEZGNkEzMjMyRjBDQ0FFRQotOjEwRTQ4MDAwQTY3M0JDRTQ1RjE4OURERjNBNUM0N0NGMTc4N0RCODAzQgotOjEwRTQ5MDAwREM1ODg2QUE5REYwNjZGRjIzOUU1RjIwNjYzNEVBMTU0RAotOjEwRTRBMDAwNzc5OTQ4QUY0MEJEMEZGNTQ0QzkzRkJDQzgwN0M2RDJGNQotOjEwRTRCMDAwNzNBRTA3RTYzMUUyMUJCNTZBMkNGOTE5OEQ3QzQzRjI4NQotOjEwRTRDMDAwMEI2RjJDOTQ2MzkwNkY3NDEwM0ZCODQ1RUQ3REMxQTQyMQotOjEwRTREMDAwODRGOEM0RjBGMkUwMjUyODg3N0JDMEY0QzdGNkEwQTkzMQotOjEwRTRFMDAwOEI5RUJGNTQ5ODQzRjgzMjhDMUQ0OUM3RTc2MEFGOTRBOAotOjEwRTRGMDAwQTAxRUE4REExRkJDRUYzNDg4OTRDRTBEOUMzRTVBMkM4NwotOjEwRTUwMDAwRkU3Qjk2MjE3RkE4NzJCODUxQUZGQkM4NkZGMjU5NjBBRAotOjEwRTUxMDAwOUQ5RDg5OUM2Rjc0QUVDODIwNzlGRTExMTM3QzY0ODEyNwotOjEwRTUyMDAwOTVGOEM4MjQ5M0M5NDdGNkQ2QzIwQ0IyQjdGQUZBRTdGMQotOjEwRTUzMDAwQkFDOEJGRkE4QkJGQUFBM0I2NjFGQjNDM0JDOURENEU4QwotOjEwRTU0MDAwOTRDNzUwRUZEQzdDMDlCNTNGMjdGOUQyMEFDRTk3M0E0MQotOjEwRTU1MDAwRTc2OUU5QjFEODNFNkY4ODA5RTdEQjlFRUM3RDFFQ0YwNQotOjEwRTU2MDAwM0Q0M0Y1M0YxMjgzRkFFNEY3NjNEOUMzRjBCQzMzNUI1NAotOjEwRTU3MDAwNEI0Nzc5N0JCN0UyNTlCODE0REZCRjg0QUYzQkI4MzA2MwotOjEwRTU4MDAwRjZGMTVERkM3ODAyRTg0RkVBNjk4QURGQjkzMTRDM0U2QQotOjEwRTU5MDAwMUQxRUNERjlGQTcwREY4OTdCMTA1RUJFMzI5Njg3RkFCOAotOjEwRTVBMDAwN0MwRkUyRTdEOEQwNzk4MTU1Q0U5QTkyNDJFNzk2NkNGQgotOjEwRTVCMDAwMzgzNzg5QUYzRTBCOUM1RjMyM0ZCRjc1NEFGNEYzNEI0RgotOjEwRTVDMDAwMTZFN0E3MzQwMTdFMTNGRkU3RTc3MzhCQ0FGOTNCRkIxRAotOjEwRTVEMDAwMTUxOEUwNTA3RTlDRTIwREUyN0U1QjZFODA3MzIxODExNwotOjEwRTVFMDAwMThCQzE5RTE3NURGRUE3ODBERjdEMTYzNjIwRDVEMTE5MgotOjEwRTVGMDAwRThGNjQzQzExRjE4NEE2M0EwODc0NTgyMUUxNjQ5QkMyRQotOjEwRTYwMDAwNUQ2M0MwREJFMEIwQzRCMzcxMDI2RkUxRkRFN0UyM0NFMwotOjEwRTYxMDAwN0ZDNjc5RkZBQzFDMUQ4NzBGMEZGRkI3QkEyMEQyM0MxNQotOjEwRTYyMDAwRkYyNUY4Q0Y0MUJCRjdEMzQyOTJBRjY1M0E3REY1NzAzNQotOjEwRTYzMDAwQzFCQjk5MjhBN0Q4OTc4Nzg2QTFEQzdEMkFEOUYzMzk1MQotOjEwRTY0MDAwOEUxQjMzQjI5N0ZDRTYzREU5QkQxNkRDNjdDRkMyMEZFNwotOjEwRTY1MDAwMzI1MTJGNUFENEY0NUJBMkFGMEI1REU3QkFCODVBMEIxNAotOjEwRTY2MDAwOEU5MzU4OTk2RDA5NDI5OTVBOTlGRDAyRTJDRkIxMzlCQQotOjEwRTY3MDAwMzY5NzJEODIxRTcyNzBDRUU4NENENDdGQkJBQjQ2NjdCNgotOjEwRTY4MDAwMjJERkVCODYwMzNDODJFQjMzQkJFMjkxRkZCMTdEMzVBOQotOjEwRTY5MDAwQzRDN0FBMDQxRkVCQUUxQ0MxOUYwQkJFMTlGNjdDNzM0NgotOjEwRTZBMDAwMzFFQUI1MEU5MzNCNUM1RjMwOTZFRjAzREYwQzAwREY4MQotOjEwRTZCMDAwN0MxN0VDMzMyQ0NGODA3RDE2MDBGREY1MTREODY3NThGRAotOjEwRTZDMDAwM0YwMUY2MTk5NkM3QzEzRUMzQjI3QkFEOUJEQTVCMkEwOAotOjEwRTZEMDAwNDdFQzBCQzIzOTdGREFBRUQwRjhFOEJGOERBNDE3NUZFNAotOjEwRTZFMDAwRkI5MENBMDIxMjNFRjA3RkMzQkQ3MTJDOTAxN0FBMkY3NwotOjEwRTZGMDAwRUIxQ0FDQUIyRkQ5MzQ1NDU3NUZEQzNBNDI1Nzk3N0FCNgotOjEwRTcwMDAwQTQ3N0NEQzVCQTcxMkJDQThCNzRGREQ2QzU4REIxRTA4NwotOjEwRTcxMDAwQjkyNjk2MTc3MEI4OTcxNzEwRENCQjJGOEYwMkY3Q0I2RQotOjEwRTcyMDAwQzcxM0RDOEZDRTE5OUY4OUYwM0M4QTcwNDdGQkNERUM3NAotOjEwRTczMDAwOEVDNzczOTA3MDlGMkZFNjNDNUE1RUM0OUYwQkI4ODdCQwotOjEwRTc0MDAwOUU1NzBDMjhBNzNFNDQ3OERCMTBFRTc2MkFERjQ1NzhFQQotOjEwRTc1MDAwMTNEQzM5QkM0RjIxQkM2RDA4RjczQzJBOEYyM0JDNDcyMgotOjEwRTc2MDAwRTNCODAwRUZFMkYzQzM3QkU1MUU1NTA3ODc2QjFGRDJDQQotOjEwRTc3MDAwQzNCQkUxREVDMTA2RjgwRkQ1QzE3MUM5QTYxMUJBQkE5MwotOjEwRTc4MDAwODRGN0UyNTYzREJDQkQ2QjhBMENGRDE4REIwNDcwQTgxMwotOjEwRTc5MDAwQzA3RjAwMUQxQzJEOTk0RDcxMjlCMzlERjlFMjgwQUZGQQotOjEwRTdBMDAwMjQyMkJEQzFGQUNEOTUwQUQ3OEZFMEQ3MDE3NDM4MUY1NgotOjEwRTdCMDAwRkYwMUY0NjU3NkYwRjZENjg1OEExRkY5MTJFQTQ0NjhGRgotOjEwRTdDMDAwNTcwMDVDMDM3MTQwNjcxNUNFNTE2NzkwMkY1RDg1MUMyMwotOjEwRTdEMDAwNEM0NUJCREU0RkU1MzUyQzQwRjQ1OUMzODI1NDVGQzQzMQotOjEwRTdFMDAwN0FCM0FDNTA1RUFGMDZENkEzRkZFRTU1QkJGN0M2MjI5OAotOjEwRTdGMDAwQTBGQkZGOUFGMzQ2OEY4MjQ0RTlBRTFCOEQ3NENFMUNCQQotOjEwRTgwMDAwNDk2NDZGNDYzQjI3RTA5NDVDMUZDN0FFRTNDNEJFRTA5QgotOjEwRTgxMDAwNTc4OUZDMUZERUVCOEUxQjczRjNDRDcwMEUxRkQ1MDVFMQotOjEwRTgyMDAwQzdFMUZDMkJFRERFMDc5MjREMzQ1RjczMTFGMjI1OEJBRgotOjEwRTgzMDAwNzdGNDYwNzhGRTZBQzlGODRDQTQ3RkU2NDlEMUQ5NDlEQgotOjEwRTg0MDAwRDFFNkRCODI5QjA1MzhENDk1MDM5QzE0OENDMzcxQjg0OAotOjEwRTg1MDAwOUNBRUUyNzAzOUI4QzU2NjQ1N0ZDNkU5MEQxNkYyNTcyMQotOjEwRTg2MDAwNkU4RENCQ0E0MkJDM0RERDM2M0IwQkYxQUU3OUNCRThCOQotOjEwRTg3MDAwMkNDNEY3RjlFREIzREY0N0ZFM0Q1MzlENUI4QkVGOUY1MwotOjEwRTg4MDAwRUNFMDc4Q0ZEODBEQTQ3N0REMkNDRUVFQTQ4QkI5MDNDNQotOjEwRTg5MDAwRDA1RTM1MjdERUVEODNGRDc4N0REOTA5QjQ1RUE2MzlEQgotOjEwRThBMDAwMEFBMDVGQkREODc3N0RDN0YyQjkzODlFRENGRkUyNEQ4NAotOjEwRThCMDAwMzZEREY5N0ZBRjU0NUZBRjYyRDYxMDlFNjVFMzM5NUJGQQotOjEwRThDMDAwNDNFRDc4RkU2QUY1MjBFRjAwNzY3NEQzMUY3N0JDRjIzMwotOjEwRThEMDAwOUJCMEYxMUUyQjhBNEY0NkJFQ0FDNkIzRjE3RjUzNDM4RAotOjEwRThFMDAwRUY0NzgzRUI2NzZCRkRBRkZDMjYzNzA0NTc4OTRGRUI4RgotOjEwRThGMDAwOEIzQzdCMTExRkUwMzFDNURCODA5NjQ4MUU1Q0RGRTc1NwotOjEwRTkwMDAwRDczQTkwODBGMERCMTJGN0FCREIyNzIxNUNERUU0N0VBOAotOjEwRTkxMDAwOEVBRDcxQjVDNDNGM0U0NEJFOUQ4RDdDRkFBQUNDNjBERAotOjEwRTkyMDAwMTg1RjkwRUYwNzA1M0YzREY2RjNBQjg4OEYxQ0FBNEFBRQotOjEwRTkzMDAwQTU3ODRDRjc1RUVFNUYzRTJFRThCRUJCRjJBQTlBOUIyRQotOjEwRTk0MDAwODE3Rjc2RUY1MTQ5Q0ZFQkRFRjdDOTBCRThBN0U5RUVGRgotOjEwRTk1MDAwNTJEQzAyRTRBNkYwNzFCQkY3MDEzRjQ3N0VFQkIxNTBGOQotOjEwRTk2MDAwRkJDMTNENEZEMzNBQkYyRDdFNUVCOTVGRjBGMzZEN0NBNgotOjEwRTk3MDAwRkVBNTY2MEZGMTE3RTY1REEwREJERkRGOEJBRjlGOEY5MwotOjEwRTk4MDAwOUYxRkIzNzAzQ0VEM0VBNjkyQkY4REY5QjQyMzc5NDMyRgotOjEwRTk5MDAwQzJGMEIzOUNFMzY3NzM5NThENzFGOUNBRjlDQ0ZDNEE1OAotOjEwRTlBMDAwQTAwM0Q0RjM5OUFCMDQ2RENBMEZGNzU1QTQ5MEJDREM1NwotOjEwRTlCMDAwNjQzOTg5RkFCNDEzRkU0M0I5NkQ4NDYzMTUzMzlGMEMyRgotOjEwRTlDMDAwODZFMUVGQ0FCREQwM0Y2QzdERjNCMTNEMEM5RjhERjg2MQotOjEwRTlEMDAwQUExNDAzQkU1RTFDQzJENzRGRDk5NzU5RDYxQ0RFN0UzRgotOjEwRTlFMDAwNjQ0ODg4RUZFMTJGOUNCRjQ4QkUyNUYxMTdGODU2MkRFQgotOjEwRTlGMDAwRjIzNUUwMkI4RTYyQzBEQjFGMTY2NkZGMzJBODg0RjE3MQotOjEwRUEwMDAwOTUwQkU0NjM1QkUyRkU0QTcyNzA2QkRDNUYwOThGOEZFQgotOjEwRUExMDAwNTYwOTNDMDYzRDAzOUY3NzVGQ0VGNTBERTY1RjQwRjQ1NwotOjEwRUEyMDAwQjA0OEVBMTExNjRGM0NGQTQ5OEZBRDE5OUM4MEVEMjc4QQotOjEwRUEzMDAwNUEyQjg4RUUyNDNEMTlFNzNCMkVGMDRGRjY1QjY0RUUyRgotOjEwRUE0MDAwQjVCODIzQzg0M0VGMUEzREZFQjBERDBCMDhERjZGMzZDMwotOjEwRUE1MDAwRTA1OUI0RjE4REZERTUzQzhCMENGMTVFRTMzQzkzOEIwQQotOjEwRUE2MDAwODVERUQ5NTU3MzQxRjMyMTE5RjZCRDRGRkE2RDZDMDg1NwotOjEwRUE3MDAwMkY1NUU0MDM5RkM1MDc0OUZGNUFBMEQzQ0I4RTk3OEYyQwotOjEwRUE4MDAwMjdCREVDNjhFNTI3MTFGNUIzRTM5NTlGQkMzQTFFRTk3NQotOjEwRUE5MDAwQUREQzIyRThCRDgxREVBRjEwRURDNjc1QkMyQkY0ODY3RgotOjEwRUFBMDAwMzM4MjdGOUMxMjc0MkREQkQ1MUQ2RDQzQUU0NkJDNUY1NwotOjEwRUFCMDAwQTNCQTkxNUYxRDlCNUI0NDc4RkU5RUJGOEFFNjNGNUVEMgotOjEwRUFDMDAwQTk5MkJGQTk3NkVGNzdBRTQ2N0Y5MzVDOEY5Q0FGRTJBOQotOjEwRUFEMDAwRjI0RkUyRDE5RkY2MjlDMDBCRkQ2MzE1MTY3NzRBMjQ0OQotOjEwRUFFMDAwRkRDMjA4OEY2OEUzNEFGQzAxN0RGNjE4RUVGMzI4RjJCOAotOjEwRUFGMDAwNTE2Q0Y1RUFFMTc0MTRERjg3RjZGOTNCNTQ4QUI3MTlEMwotOjEwRUIwMDAwRTE3NDY4Q0U2OEUyNEJDNzc3MEJGRTA5NzA0NTNEQkNFNwotOjEwRUIxMDAwRTE1RUZEQjkyRUVCOEMzM0YwOUJDMUJBRjZGOTU1NUM4MgotOjEwRUIyMDAwMkY5M0ZDNUFBRUVGRTg5QTExMjlDQzcxRTFFNzJEQzc3QgotOjEwRUIzMDAwQjk1MDdDQjk1NkJDOEY2MkYzNkYyNDdGOTM3NEUzODEyNAotOjEwRUI0MDAwQTU2ODk4MkZDN0QwN0U5MUExQkQ1MDVGQkY0MDNDM0VDNQotOjEwRUI1MDAwMjFGMDQ3Q0E5RjEzMzFFRTlBNDg3MUJDRTM5N0Q5MUE0NgotOjEwRUI2MDAwQzJGMzEzRkVCNTk4RkI4N0ZGQjU1OEM0QkRCRkEyREM0NgotOjEwRUI3MDAwREU2OUUwODNFNzdCNUZGMkJEQTYyMkNGMjNDOEVGNThCMgotOjEwRUI4MDAwQTA4MkUyRDkxN0NBRTdDMkU0RkM5M0M1NDhFNzQxQzVCMQotOjEwRUI5MDAwOEFFRjRCQkRFQURBNzIyRTE3QjZDNjNENEU3OTFBN0Y2MAotOjEwRUJBMDAwNkVFNjdBRDFDMTY2MUJFMUUxNUYyRUU3RUQ3RkY5QjczMgotOjEwRUJCMDAwNzc0OTlGM0FCNDdGNkI0MkI4OUM5Nzc4RjlGRUJFRDlFQgotOjEwRUJDMDAwMDlFODE3M0U1REY5NjA0MkI4MUQyMERCM0ZBODdDRjBFNAotOjEwRUJEMDAwRjY4OTQ0REZBQTdCQTA3M0Y5QkFGNjQwNzdBNUIwMDc5RgotOjEwRUJFMDAwODRCRUYwN0Q3M0Q3RkYxNTdCQzA2ODA3Q0M1NEVGNEQxMgotOjEwRUJGMDAwNDBGRTY3QjQwN0RFNzc2OTA5NEU4MjhGQTAzQjIxNTczQwotOjEwRUMwMDAwQUUxNUYwRjk4QjQ1NEJBMDM4RERFRTIyMkU1NzBDRjhFRgotOjEwRUMxMDAwMjlFMTcwNTZDMjYxNTNDNTgwNzg3MzQ2QzgwNTU5NUZCMwotOjEwRUMyMDAwNkE2NjA0MEZBRjlEOTFCRUNDM0ExNTM3QzZCRjMwNEQxMgotOjEwRUMzMDAwQTUxNENFRTU0ODY1QzE4M0U4QkY5MkZEN0Y1NEMyRjNCOQotOjEwRUM0MDAwQTlFNDNDQzdFRTUzQkFEMEJGRjJEQkQ2OEE5QTlCMzExNwotOjEwRUM1MDAwREY2MTZFMUNGMTU1RDk3Rjk5NkY2MEY5NzU2QzczRTJCNQotOjEwRUM2MDAwMTUzODhGNzc5QkVBQzY0NzVFREY4OTk0RjBGNTRCM0RGOAotOjEwRUM3MDAwQ0RGOERFMEE3M0M3MDVEOUQxNUVERjhFMDRCNDZGODM4OQotOjEwRUM4MDAwNjI5REMxODMzMTU2NTc3Q0ZGRjczMDVFODNGQjVGMzE1NQotOjEwRUM5MDAwNTc3NTM3QzNGQTU3NkNFMkVCQUFGMkE5RUUxQ0E4RkYyRQotOjEwRUNBMDAwQjZFM0MxMkI5MDBFNEUzNTU5NENEQzNFNzBFQUYwRkNCOQotOjEwRUNCMDAwNzA0N0QxNkJEOEZGNzQzOTk3MkIyNzJBMkY0REMwM0M1MgotOjEwRUNDMDAwMzhERjM2OEIzQkQ3RDU3RkJFRDEwODQ3OENGM0VDQjMwQQotOjEwRUNEMDAwOTlEMDdGRkE3RTkzODUwNUM4N0ZFMTIxN0JGOUQ4QTY3QwotOjEwRUNFMDAwMTE1NEJFOEZGMEUzRjYzNTlEN0Y1MTA5Rjc3MzlERUEwRAotOjEwRUNGMDAwQTgxRkMyRTlDOTQ1RUI5MEY4NzI2MkI3NUFFRThGQzBGRgotOjEwRUQwMDAwQUY4QUM0N0M2N0JFN0M4MkYwRURDNUREMTUyNDhGNEZEMQotOjEwRUQxMDAwNTVGMjc5Q0VBQzcxMjcyMDNDN0ZCNzQ5MjUzQTNFRURCQwotOjEwRUQyMDAwRTNFMzFGREM3RjZCQzI0NEQ4QzdGQjk1N0M1RkVGRUY0QQotOjEwRUQzMDAwQkJFNUI1MDlCMENGNjBBNTk0Qzc1QzRFQzlGQzlFRTBBOQotOjEwRUQ0MDAwQTYxMTE0RUZGRDczMkJCN0JGMjVCRENCNzhGOEE1QUI4QgotOjEwRUQ1MDAwOEYyNUQwRkI1MkNFRUQ1OUEwNUI3RkY3RUU1MzY0ODczMQotOjEwRUQ2MDAwQkRCRjA5NjZFMzcyQ0U1MTgwRjk4NkZDNzVCNjZDQUUwNAotOjEwRUQ3MDAwRkU3Q0U3NTdDNkU5RUE4QkRBRjVGMkFDNzkzRkU3NTc1NAotOjEwRUQ4MDAwNDYzRDc3RTkyNkQwODNEMTJGNjVCMEYzRUE5QjhCMTJGRAotOjEwRUQ5MDAwNEE5MTdFNTEwRkM2M0M5Mzg3MkI1RTQ4QzU3RDc0RDU0MgotOjEwRURBMDAwNTBCRjRBMTEzN0FCRUZCNEU5Rjg0MTU1QUJERUFFNUI2QgotOjEwRURCMDAwNkNCMEUzRkFEOTc1MDY3OTI0RTE3NDVEMTRGOTI0RjU5MQotOjEwRURDMDAwQjk2RTYxQUYxQ0I3Nzg2QTIyRTU1M0FDMkVFMTdBREJFRAotOjEwRUREMDAwMjJBMERGMzQ4QzEzMzFBRDZBOTI4MEY3NDY4NDhGQjU2MAotOjEwRURFMDAwRjdEMzVDRDBBN0JCNTVGNzE0RDRBQkZCRDE4MTQxMEY0RgotOjEwRURGMDAwQUMyOEQ3QzM5N0I5N0RBQzU0RkEyMzVDQTRERjlGNDVGOAotOjEwRUUwMDAwRkRCRjdEQjA5MERCM0U5MDQzRjEyODk3QjQxRjk3QTBFMwotOjEwRUUxMDAwNUNCQTUwRkZDMTA1RUJFN0I1NDIzRkFGRDVFOUU3REQ4RQotOjEwRUUyMDAwRDgyNUVDRkQ4MzU1NTc5MTlGRUFEOEU1NTc5MUJFN0VEMgotOjEwRUUzMDAwQUNDRjRGRTVEMUY5QTlBNDVFNzc2QzZFODU0RUZGMEM3RgotOjEwRUU0MDAwN0IzRTg4MERDMDRGQTNFOTlCMjc5MDFGMTM5RkU2NzI1RQotOjEwRUU1MDAwNjlCREIwMjM1Qjg1MUQ3OTZDQUVCMDIzOTMxOUQxOTE0OAotOjEwRUU2MDAwRDlBQ0IxNDhGQ0VDQUJFQTZGOEI1QkY1NzJDOUJCNDYyMQotOjEwRUU3MDAwNkYzRjNFMzNEREZCNTQwOUUwODcyREVEMjJERDczOEJDMAotOjEwRUU4MDAwQjM1MEVGM0YzNEUwRTc1MEM2RkRFN0I3QTIyRjAwRTBGNAotOjEwRUU5MDAwREU1MkM1RjM0RUYxMzlFNkJGNDhCOUM0QTAzRkYyOEI0QwotOjEwRUVBMDAwQUE0RDE3RjkzN0YyNzY5RjVBODhFOTcyMEM1NTNBRUE1QgotOjEwRUVCMDAwNkZFNjc1NERFMTc1OUY0M0I0QUIyMkVGQ0QwMkY1MTNCQwotOjEwRUVDMDAwRDlFRTA1QTg3NzYxNUU0RjVDMTI2RjQ3MTQxOTBBNzg3NgotOjEwRUVEMDAwOUQ5MDE0OTI3RkU4RDc4RkUxQTE3NTVGMDJCQzM3QUM5QgotOjEwRUVFMDAwMzJGQjM3NDhENzk4RUYzMzBBRUFDNzRBQjIwOTZGRDJFNAotOjEwRUVGMDAwRDBBNTVGNDhFMzA3MzBBRjI3RDgzMjhERkNDRDE1RjY5QgotOjEwRUYwMDAwMDQxRTlGMDczQjdBNjBGQzZCRTZGNjUwRjk2MDlBNkMzMgotOjEwRUYxMDAwOTg5OUFGMjcyQTNFOEI3RUU3QzNFNzMwM0RFQzI0RDE5QQotOjEwRUYyMDAwMEIzMzkxQkY2NTRCREMxODBCRTJFRjdDODcyNzEzRTFCNQotOjEwRUYzMDAwMDBGODRFRjJCNUZCOTc1NkUyQzMwN0FCQjgxRkI2N0I5RAotOjEwRUY0MDAwQ0VGOEZCNkU4MkU3NjM5RTcwOTAyRkJEN0JBOUY0ODNBMQotOjEwRUY1MDAwRjdDNjg3RTNFREYxMzVBNzRDQzg5NzdGQkY4RkI5MzE2RQotOjEwRUY2MDAwOEZGMUY4OUVFQTE3NUU4MTcxMEVBREE5REY1QzgyNzRBNQotOjEwRUY3MDAwNzQ1ODI1QkJDMUU4QkY5REZFQzQ2NEIyQkZBRUJDNUM4MwotOjEwRUY4MDAwQTVGQ0VFQTNFNTJBNDNCOTc2NzQ1M0FDQ0UwRTA5Rjk3RAotOjEwRUY5MDAwNzU1NUMyOEY0RjBGOThBOTFENEQ5RDNDQ0NCRjQyRkZBOAotOjEwRUZBMDAwMjZFNjY5OTVGMzczNzk1NkYwQjMyRTcxOEU4RjA4M0Q3RQotOjEwRUZCMDAwNjY5N0EwOUI0RTQxMzc3NzA4QkFEOTYwRjRFRkRFQ0I1NQotOjEwRUZDMDAwRTlFNkU4M0UzMDFDNDBBRUJGM0VCN0JFOENGQ0Q2REI2NwotOjEwRUZEMDAwMThDNUExQjNFN0E4MUI4QjYxN0YxN0RCREMxNjg0REZBNAotOjEwRUZFMDAwRjRCOTA1MUM5RTk1OEEwOUUzMzcxNUU1MDUxNkE0RjdDMwotOjEwRUZGMDAwOEIwN0JCMkNDODQ3MkJDQUU3NTE3RDQ2NjUzNkQ5RjkyQwotOjEwRjAwMDAwMDdENzgwN0M0NDdCM0ZERTlEODk3NDM5NzJBRTJENjBDQQotOjEwRjAxMDAwNEE0MEJCQjE4OEY4QzRBNEY3NEMzQTdBMjkwOEM0RUEzQwotOjEwRjAyMDAwRThFRUEyODc5Mjc0RURBM0I3NjVFOEVBMjk5RTFDNUQxRAotOjEwRjAzMDAwRkZDMUU1N0E3QThDMUQ1OUE4RTdCQjhDRUI4NTEyQ0UwRgotOjEwRjA0MDAwMzNENUM5RTRFNzNBMUU5MkEzRDQyRUY1MTFFOUFGOTM2NAotOjEwRjA1MDAwRkQwMTVBM0FCRUQ2MkVFNEM4MThBODYzM0VERDg2Q0EyMgotOjEwRjA2MDAwMTYzQkU2NEQ3Q0RBNjU3NkYzRjFBQjQ5M0ZCMDY3RUZDRQotOjEwRjA3MDAwQjUyMzlENjA2ODE1RjNBQkRBQTVGRTI5RkNGNzRDNjM1OAotOjEwRjA4MDAwODY3NTZENjIxODY3M0Q1RUNFMDg5RjYyNDYzMjA1RjU1MwotOjEwRjA5MDAwQUY0RTcxREU3NzhBNzk4MUFGNEVCNzkwOUY4RTlGRTMzNgotOjEwRjBBMDAwRTBCOTFFRUFDNzNDN0FGQjIwMERFOUFDMTBGMTg0QkY0MQotOjEwRjBCMDAwRkY4ODc4N0Y5N0MwOTdFM0U1MEZBRThCNDU3QzU4QzBGQgotOjEwRjBDMDAwNDhERjk4QTlBRTVDODdGMUM0RTM3MzE5RDE0OTU3RTBEMgotOjEwRjBEMDAwRjk1ODVDM0Y4RTgzRjk4MUNGNDYxQkE3RjJFOTc3QUVFMgotOjEwRjBFMDAwQzdGNUVDQjZEMjM4MTUwRkIxQTk4ODI3MTc3REVGQzQ0NAotOjEwRjBGMDAwMDdBRjIxRjhCNjM5MEZDNUIwRkU3Mjc4Q0M0MzlBMUIyMgotOjEwRjEwMDAwODE5M0Y3MUUwQjU4QTgwQzY4Qzg3RkYyREUzQkEyNjEwMgotOjEwRjExMDAwM0NGMEEyQkZFQ0ZFRTA3MTg2RjM3MkI5RDAyRUYwREJCQQotOjEwRjEyMDAwQzg1RjFGN0JGODE3OEI1MTNFM0ZCNjZCN0JFMURCNTAwRQotOjEwRjEzMDAwN0U2N0REM0QxOTRENTAzRUIyRUVGQkRCNkY3Mjg1RkMwNAotOjEwRjE0MDAwQTVCQkFFNThCRUIzMTNFQUEzQkZGQjkzNDdGNzIyNUUzRAotOjEwRjE1MDAwNURGMTkzM0ZFQ0M1RjU1RUYxQzU3RjM4NjBGREEzNUFDNAotOjEwRjE2MDAwRTIxOUQyQjc1QzlGNzE5RTM0RDZBRTYwNUMxNEY5Mjg2OAotOjEwRjE3MDAwRjE2NUIzOEZFQTc1M0VCREZENjM5NEZCRDhERjBDRjBGQgotOjEwRjE4MDAwQUI2ODdBOENFMkNCNjlFMkZEQTM5N0RGQUFBODMwRUZFNwotOjEwRjE5MDAwREI3NTlDQUY3NEFGRURFRDlDNjFBMUZFMDFFQzBGN0NDMwotOjEwRjFBMDAwOTJGMjM1ODcwRTAzQjY4MkVGNUI3RDBBQzZDNTQxNDFGOAotOjEwRjFCMDAwNzI2M0JDMzcxRERBOTE5RjMzOTc4QkY0QUIyQzg5QkZGOAotOjEwRjFDMDAwODJBRkUwMzUwNzQ2RkU0MDMzRTE1OTlFODg0NzIyRkY3MwotOjEwRjFEMDAwNDU3RTdGRTczODFFMDcxRkVBNjAxQTlFNkZGOTczOUIxMgotOjEwRjFFMDAwMTRDQzUzN0JDQkVCNzI5MzVFQjA5NkREMzUwM0VDRTQyRAotOjEwRjFGMDAwOEI1NDlFNzc5MTU3RkVENkQ1NzgyRUIwNTVCM0I3MzA0NQotOjEwRjIwMDAwMzRFRTZFQTFENzk1M0ZFN0EwQkNFREI3NzYzQjc2OTA4NAotOjEwRjIxMDAwOUU3RkU0MEE1M0I4N0U1OEY2RDg5RjlFRkExREUyNTdBNwotOjEwRjIyMDAwNUQwQ0UxOTc1MTZGRTkxNkY0RDE1N0I3QjhFRUJCMDkwMQotOjEwRjIzMDAwRTBFM0ZCQTU5RERCNTU5QTJCOTNFQzc0QjcyQjEzRjNGRQotOjEwRjI0MDAwNzdGQUZBRkQ0NEM2RDNEQ0ZGODFGQzdDN0U3NTFDQzVEMQotOjEwRjI1MDAwMTk2NDVDNDkyREZGQjgwREU5NzE1MTY5NjMwOUVBRUY0MgotOjEwRjI2MDAwMTk3ODBFODM0MzcxRUNCNzU3NTgyOURGQzBBN0M0NTJGMQotOjEwRjI3MDAwNUU3QUI0NzhGNUExNzFEOTIyOUVEQzM4OTZENkMxMUE4RgotOjEwRjI4MDAwQzc2M0Y5Qzk4Mjk2RkJBQ0FFRThGMkFBNTU5QzZCQjQ5MQotOjEwRjI5MDAwNzY4Qjk1NzkyM0M1OTUwRjhERTNGRTkwMTYzQzA3NEIzMQotOjEwRjJBMDAwRDgzOTM4N0U3RjM1QzY4N0EzOUQwMzMzRkIwQjI5Q0YyMgotOjEwRjJCMDAwRDI2RTFGODk3OTIwQTlFMkYxRDZCODlGQkU4QUYyQUE0MAotOjEwRjJDMDAwRTcxODk3NTdBOTREOUZBRDQ1RkE5MzdFOEJEQTM0RDY1MAotOjEwRjJEMDAwMTczN0QzRTAzRDhCNzgyRjU1QzQ1OTkwODY1MUZGQUUzOAotOjEwRjJFMDAwMTVGMUEyOUUxQTQ2RjFBMkQ0QTY3N0ZGMUJFMUIzNDUwMQotOjEwRjJGMDAwOEM1RkZCMjYxRkRGNkEwRTFDNDQ3Q0E5NzVCODQ4RUVBNAotOjEwRjMwMDAwRjRBNDI0QjhGMTVFMTNGQjkyRTdBNzY0MzA4RThGNzJFOQotOjEwRjMxMDAwN0MyNkM2Qzc5NUIzQjA3NUE3QzY1NkJGNEVEN0E3QTY1RAotOjEwRjMyMDAwQjI0MDFDRTI4RjYyQTc3OTMzRDZEODI4QUY1NUVBNTc4RQotOjEwRjMzMDAwQTk0REI3REVBMDhFRDE4REE3QTA1RUZENTYzNUI3QjcxQgotOjEwRjM0MDAwRDFFQ0VDMUIzNzVCQTc1NzkxOUU2NTVDODc3Q0FGQzcwMAotOjEwRjM1MDAwQzJGNkExRkQxQkE2Njc5MTFFQzZDMkU3MTlBMUFCMEJBMQotOjEwRjM2MDAwM0Y5QUJFNkU0OUIzRUFGOEM0NUI1RjU2MEM2QUU0NzIxQQotOjEwRjM3MDAwQzA5NTNDOEVGQkVGMTAxRTUyMUY5MzdBNUJCRjcxMDU0OAotOjEwRjM4MDAwQkQ4N0U5OTczRUU0MTczMjhGQTI0RjRGNkEwOEIzOUJCRgotOjEwRjM5MDAwNzJGQUJGMjdGM0Q1RTQzOTQ4Nzg0NjdCRkY5OUU5NUFEQQotOjEwRjNBMDAwQzI3OEQyQjMwMjM0OEU1NzBDNjM4QTczNjQxMTdDMEQxOQotOjEwRjNCMDAwRkMxMkQ4MTZDRkE3MTc3QTI4Njg5MUJBM0MwNkE5NTcyRAotOjEwRjNDMDAwNEFGRURDMjNGODZFMzAzQjQ4N0U0Mzk5MjczRTBDREUzNAotOjEwRjNEMDAwQzk0MjNENjg3QzIyRDE4M0Q0NEY4RkFGRkQ4OEUyRUZENAotOjEwRjNFMDAwQjVBODg3QzJGQ0MxNzUxRkVBRUVBMTE0OTc0RDFGMzk1RAotOjEwRjNGMDAwOUVGQzczRkE3Qzg5QjBCODJCQURENzJCRjhFNjRDRDVDMAotOjEwRjQwMDAwNDE3OTJCM0QyQ0Q2OERGQ0FCQzcyN0Y0QjEzRkM2OTE3QgotOjEwRjQxMDAwM0UyNkY5ODU5MTNGNUNFRUQ2RjNGRkVGOTVFQUY5RkZDMgotOjEwRjQyMDAwM0M2REIwQzEyRUQ0QzdBOUFBM0M4Njc4Rjg5QjczNzRGMgotOjEwRjQzMDAwN0M1M0YyOUY1QkQwQ0RBN0EyN0JDOTQzNzE5REMzODI1MQotOjEwRjQ0MDAwNUZCRTI2RjQ0MDJCNkJBNEU3NzZDQzE3MUQ4MUZDQkY3MgotOjEwRjQ1MDAwOEI0QTA3M0I0MjY1MDJFQkE1RDJDOTlDOTQ1RjkzQzREQgotOjEwRjQ2MDAwREM1NDI2MzMwRjk1NDM1ODIzOTU2OThDRTc1MzY1QjBEOAotOjEwRjQ3MDAwMkUyQTg3QjEyMzU0NjZCMTVFMkE1RENDNjlDMjMyODdEOQotOjEwRjQ4MDAwQjlBOTFDQzkzQzU0N0E5ODkzRTJFNDZGQzYwNzMzOEYzQwotOjEwRjQ5MDAwMDJGQ0U2NUVDNUM4NkZDRjdDN0JBRkQxRTA5QzdBQUE0OAotOjEwRjRBMDAwNDQxRDExMDhFOTZBMjZFM0M4RTc3QjhBQjdDRjkxRjVDNgotOjEwRjRCMDAwQTdBRkQxQjA3RDNBRUY1RjNGN0VGRkNGN0MwRUUyMzc0MgotOjEwRjRDMDAwQTJGRDE3QkNCREFGRkU2RkQ3NENDN0Y3MkQyNkFBRkYxNAotOjEwRjREMDAwNDBGNDdGQkM1ODVCODJGOERBMzQ5RUQxNzkyNzE2NkJGMgotOjEwRjRFMDAwQ0JDMkVCNEYxNjY5MERFMUY1RTMyNURBQjVFMTc1NTZCMAotOjEwRjRGMDAwQTRBRDQ0RkM5MUY1QjE0NURBRjVFMUY1QjYxMkFEOTE1NAotOjEwRjUwMDAwRDc3OUJFRTk5QjE2OERGNDVERjhFRDU2QzY3MTdDQzNDNAotOjEwRjUxMDAwREYyMEQ1REI0NDc0QjM0NzMxRTNCOURBMDRCRDU5RjFEOAotOjEwRjUyMDAwMUM1NUE0MjNCN0REODZBNTg3RTdGRDA0NjMxQ0MxMzhGRAotOjEwRjUzMDAwRDMwMEY2OEY4MThFODJDODlGMDAwRjJGNTFCQzZEMzQ4RgotOjEwRjU0MDAwOEY4MTlGMjgzRTkxM0Y5OEFDOEY5QjAwQkU5MzVGMzU4MwotOjEwRjU1MDAwQjg4NkRCRTk4QzQ1NkU5N0YzOUUwRkNGOTkxNkU2RTdFOAotOjEwRjU2MDAwQ0QwOThEMUI2RDFGNDZGQzNEMjJGNEJDNkVBMUU3QkQ4RAotOjEwRjU3MDAwMjlFMkM4N0RGQjBFOUExM0NGREE0Mzc0MUNERDNFMzRCQQotOjEwRjU4MDAwQjNCM0UxRkNCMkRGQkVGRjU0NjMwMUJBMEUzNkQ5OUNCRgotOjEwRjU5MDAwMjhFRjdBNjJEODZCNjhBN0Y5OEVBOTBDRjU4Q0FGQkEwMAotOjEwRjVBMDAwREU5QUEyNTk0RjcyQkUzOENDNDlGOTAzNzI1RUMxNjcyOAotOjEwRjVCMDAwN0FGMDlGQTBFNzVDM0M0OERBOTc2RTNCODczN0I3M0IxMQotOjEwRjVDMDAwMTJDNUJBNUE2NjI0NUQ5NjQ3RkU3Q0FFRDdFNzVCOEVCRAotOjEwRjVEMDAwQ0M5QjBERUI0Q0REQzRGREFBMDk0OERGMTgzQTdCRTI1OQotOjEwRjVFMDAwOEY0RThDQTM3NUNDMzQzMUU0NTM2REQyQ0Y2QkYwQzcwMgotOjEwRjVGMDAwNkQ5OUIxQ0ExOUVFMEY2RTRCRjAyQjE4QkZDQzA4QzQzMQotOjEwRjYwMDAwNzAzRjQ0MzJGM0M3QTAxQzJENzc5NzUzREU4QzRGNzVBMwotOjEwRjYxMDAwOTY2M0JEOUE1RDkxMDdGNUM1OURBQUFCMUNFNjNERDRFNgotOjEwRjYyMDAwRjlGNDJBRjQwMzJFQTlCNjUyMUNDM0EyQ0Q3QTlGRkI4QgotOjEwRjYzMDAwRkY3OEZFNDY5MkMwRjNENjBEMzY3NzAwRTE5OEUyMjBCRgotOjEwRjY0MDAwQkY2RDdFNUI2MTM5REFCQjJEOEVBNDI0QzRDNUE0RUFFQwotOjEwRjY1MDAwNjVFNDM3NkM3MUI4NUZDMkZCMUQzRUE3ODlGMjEzOTk1MAotOjEwRjY2MDAwNTNCMzU3ODBCRUIyRTMyNjczMzlGMkYxQ0MyNzhCMTMyNAotOjEwRjY3MDAwRDRCMDc1OUY2QTNEMTc4MzcxOTAwNzlDMjY2QTdGNjA5RQotOjEwRjY4MDAwNEQ5OTdEOTkwM0VGMzE4MkJEMDBFNTIxRTc0OTBERjVFNAotOjEwRjY5MDAwRjdFREQwMDdGRDhEQjczNzlDRUMxODM1QzAzOTI2OTRBRgotOjEwRjZBMDAwNUI3NTc4MUJFN0Q2RDc2RDA2N0ZBM0M1QTAxN0Y0OEVEMAotOjEwRjZCMDAwMTc3OTIyRTNEODM4M0NFN0IxOEY3RTQ5RjZFRjIyODdFRAotOjEwRjZDMDAwOEJGQ0VBNjVFRDBBRTVDNzA0MEZCQUIzNTBERjNDQjUyMQotOjEwRjZEMDAwNzkzNEU1QkJCNEI2RUJGREQxQzE0Qzk2ODVGNzdERUEzNAotOjEwRjZFMDAwM0ExNEQyNTdENUQ2OEY5QkYxQkRFMTc5QUU3NDFDNjcyMQotOjEwRjZGMDAwQjhCQjM3REQxOTQ2N0YwRkZDRTQ4NzMxMjhFRjVBRjE5QwotOjEwRjcwMDAwQzIxQUUxMTFFMzcxMjE2MUFGQ0E3QkU1NzVDRTczMzU5MQotOjEwRjcxMDAwQThGNzJGRTk3OEMzODNGMDRGRDQ0QzQ0MzNDNzJERkVBQwotOjEwRjcyMDAwMzQzQ0ZGOEREM0U3MTM1REUyM0QyREQ0NjNGQUU5QTNBQQotOjEwRjczMDAwOUZDMzNBQzNFRTI3QjQyNUU3QzRFMkJDMjFGQ0Q1MTIyRgotOjEwRjc0MDAwNzBCRkE3M0I4QTQ4M0ZEQUQ5NUU0NkY3MDE4Q0UzRENGRAotOjEwRjc1MDAwQjY5Njc1QTFERURBQjZENkRFMTU0OUZGQkQyRENCOTM4MAotOjEwRjc2MDAwODVGN0I3Q0Y2Qzk5QkU5RUMxRjk5RjM5QjgyMjBERUZDRQotOjEwRjc3MDAwQkIyRkVEQjBCMTE4NTdGRkZFQTdCNzhDQTdGOTk2RTJFMwotOjEwRjc4MDAwM0Q2QTlDQjc2MzlFMTVFNUM2RUNDRUU5NTY4NERCNkRGOQotOjEwRjc5MDAwNkIxNzNDMTkzRUNGQ0ZDQUJDQTM0QTgxRkVFMjNBOUUwQQotOjEwRjdBMDAwMjQzQzcxQjA4MDBGRTFGQUVCMjk1QTE2RUExN0E3NzNDRgotOjEwRjdCMDAwNTlDNDdDNEU3N0E5NDJGQ0ZDNzc1MzNDNzQzRkU1NEMxRQotOjEwRjdDMDAwNjZFNDdFQzVBNTVDM0Y3RkE0RDQ0NUZERUJDQ0VDQjVEQgotOjEwRjdEMDAwRTVDOTY0MEYzQTkxNUU0RkI1MTc1MUZDQ0U4MjcxNzczRgotOjEwRjdFMDAwOTA4Qjk2N0Q1RkFFNDVGQ0ZGQTRCQUZFRURFNUQwREVDMgotOjEwRjdGMDAwMzZFN0NBRjdCMDFDNkI2RDI0QkQ5OUZENUUyNTdBMDAxMwotOjEwRjgwMDAwQkQ5MEVFODlGRDY3QTVEREQ5MTI5NjQ3ODhGQUEzQTZCQgotOjEwRjgxMDAwRjM2Qjc4MThEQTFGOTY3NjM1NjAwNUZFNkUzOTcwOTZCMAotOjEwRjgyMDAwRjQ3MEM0NTcyRDBDN0ZFOTM3NEVFOEYzMjIzRjI0NkQ2NgotOjEwRjgzMDAwMUNEREJCQTM1RkRCNjU1N0ZBMDM1MDlFNkNBRkI3NDc3NwotOjEwRjg0MDAwM0FDN0U4RjM4NzhEOEJGQUVEMENBNkM1ODRDRDBGNTIyRAotOjEwRjg1MDAwMzE0MDdFNkQyRjlGQUZBRjlGNjgwNzMzNTRBM0Y1MDlFQQotOjEwRjg2MDAwQkREQ0Q4MkVENzNGN0E5QjlFM0U5Nzg5RjM5MUZBNzlEQgotOjEwRjg3MDAwQjRGNTdFQzdBRjdGQUYwNTgzMTM5NDk3NzE4NThFNUUxNQotOjEwRjg4MDAwMkU1MkJCNTY2MTVDODVCREM1RjkzRkQ4NzVDQzEzMjE5RQotOjEwRjg5MDAwQ0UxNUUyQjNCMEY2MjEwMjdFMDBDRkY1QzlGM0M5M0UyMgotOjEwRjhBMDAwODlCNjBFQUJGRjg4OTYzRDI2NjRCRjdEMjc0REJGMkVERgotOjEwRjhCMDAwRDlBRkE1OTRDN0MxNkQ3RTE2QjAyNDYwMTlBMEZCMUNGQQotOjEwRjhDMDAwMzY3ODFGRTVGN0E3RDUzNzNBMkY4QjQwMTdCMjM0RjJCOQotOjEwRjhEMDAwMkRGQ0I5QzJFMjNGNDYzRTgxNjgzMDUyRUEyMzI2RkU0MwotOjEwRjhFMDAwQkUxNkM2RTdFMkVGRTJGQUVGRTk2RDBBRTlCRjFCQjcyMQotOjEwRjhGMDAwRjAzQzhBNEZGRDUwMjdFNTgyOUYxM0FBMTY3RjEzQ0E1QQotOjEwRjkwMDAwOEUyM0VDREVFMUIyRTdEQTZGQkZDOEE1ODNEQjEyOEE5MwotOjEwRjkxMDAwNjc4OUY2RjcxRUZERDE2QkQ4RkVFRUUzM0ZGMkUwNzI4OQotOjEwRjkyMDAwNkY0RDVFOTJDMEY5RDY4OUM1MzhDRjk5OEJBREU0OEYwMwotOjEwRjkzMDAwQzE5RjVERTIwNzc0NUNFRUI3RTlGMDcwRTNGRTQ3Qjc4NAotOjEwRjk0MDAwMkQ0NkI5QjNERkVFQzY3NEJDQTVEQkY0RURCNkI0QjA5QQotOjEwRjk1MDAwN0QzMThFNUYzRTFEOUM4MjM5RjM4MDhFOEVGRkU0NUY4OQotOjEwRjk2MDAwRTk3RTc4MkNGMjRGQTRDNzM1MzZCQTE3RDY4RjBFNEFFNwotOjEwRjk3MDAwRkJCRTMzNDI3OEJCMzgxNDg3QTJGQjIwOTJBRTRFNkU5QQotOjEwRjk4MDAwNkEzOUEzQzIzOEVCRDc1ODVERjQzRDA1ODNGRDc1RENCOQotOjEwRjk5MDAwMzU0RjRCMEI4QjBGNUJEN0YwN0I5QTJDREM0RUNDMDk5MQotOjEwRjlBMDAwRUQ1RjhFN0JEQzU3NkY3NzM5RkE4RkQ3MEZFRkEyOEMyNAotOjEwRjlCMDAwMzdBODRDRkIyREYyQzVCNDMyQ0ZDQkE1MTQ4RkFFQTcyMAotOjEwRjlDMDAwN0QzN0VENUI3M0ZDMTVFODczN0JBQ0Y3RDVEMjEyNUMyOQotOjEwRjlEMDAwRkY4ODcxMEFERTk3MzFCQkU4REU2MDZCQUIyOTA2Rjk2MAotOjEwRjlFMDAwN0U0Nzk3Mzk2NjI0QzJCQkQ1NDQ3MkJFQTMyQjM5NzZCNQotOjEwRjlGMDAwMjRDQTI1ODc4OUUyQTcyODU3RDQzMEZGM0U5QkMwRjk0NwotOjEwRkEwMDAwNjQ0ODdFNzgxMkMyRjU5RjU4ODE4RjY3RjI4NEZFMzM3NgotOjEwRkExMDAwODNFQjNGQ0ExMzA3NDhFRjY4NkRFMzcxMkFBOTZGMzg3QgotOjEwRkEyMDAwMDVGRTM4NUI3OTFDMzI5QUZFODM4QzA3RDcxRDVGQjJDNgotOjEwRkEzMDAwQzQ4OTdDQUQyRDgxN0Y3RjYzQzkwQ0I3MEZFRjczNUVFNgotOjEwRkE0MDAwRUE2MDI0Mzc4NkUzQTUwQUQ0QjMxQ0NDM0YxQkU2NTFGOQotOjEwRkE1MDAwOUQ1Q0JGRjE3NjMwRDI2NzkyMUMwRTM3ODIzQUI1RDNFNwotOjEwRkE2MDAwRUZBMzc1NkI5Q0NFRUNGMDFGQzIzMzM2NEY2MzM4QkVFQwotOjEwRkE3MDAwRDlBMDU3NTgwRDdBODM2QUE4N0Y1MUFBRDcyMzk4RDA2NgotOjEwRkE4MDAwQkY2NTNDMzg3RUYzQzA3OTQwRDJBRkRCMjFGQzEzQTBDOAotOjEwRkE5MDAwM0ZGOUU4REU0ODI5RjMyM0RFMzI0RDczMjUwRjA5RDlGQgotOjEwRkFBMDAwMDFFODc3QzRGNkI0NTJCNkEzMjUyQ0ZFQTQ2ODJGOTJDMQotOjEwRkFCMDAwREY0MEZBMjVBNUZGNDFGQTM5QzY5NDgyQkQ5NjEwRTZDQgotOjEwRkFDMDAwOEZGODE1OTg5NjJBQzVDMzkyMjYwMDlFNjQwMzNCMjBBMgotOjEwRkFEMDAwN0IzMjlGMjlGQzdBQzZEN0Q0RDM5QjJFMkNFRUYzQjM2RQotOjEwRkFFMDAwRTdGOUZEQTA1NjUzQUM3QjY3NzZGRjdFQzU5MzM5N0Q2MQotOjEwRkFGMDAwQzYxRUMyMUM0OTk4RTUyQTNCRERDMzk5QTlFRUExN0IyRAotOjEwRkIwMDAwRjc1QjhCNEQzQ0FGOTkxRDcxQTIzRTkwM0Y4MUNCOTMyQgotOjEwRkIxMDAwRUMzMkNGQzVCODFGRTZGMDY0MjNERTAwM0M3QzE2QkM5NwotOjEwRkIyMDAwQkYyN0ZDQjY5OTM3RTdDNEEyM0VGQzc2RkFEOTJEQThDOAotOjEwRkIzMDAwOTdGQkRBNENDNDZGMjQxQ0IzOUI0RDc3MjAxQTg2QzUwMwotOjEwRkI0MDAwRTcwMkU2QzI1MDlDNkRBM0U3OUMwRkVGMEJBNzRFRTZDMQotOjEwRkI1MDAwN0VEN0Q4NzlBNzBGQTIxRjc0QzM0ODEzRjlEOTZGOEQyOAotOjEwRkI2MDAwRDcyODZFMDdGNDYzNTc3OUJDRUUyNThDQjdCNUJCOTJFNgotOjEwRkI3MDAwOTJGMEJCM0I4RjI3RjI3NjI2Q0VGMUVFRjgyMTNCQzIwNgotOjEwRkI4MDAwRjM0QkUyQzRCRUVGNTYyMkVCMkI3RjlDQzRFNTRCQ0Y3OAotOjEwRkI5MDAwN0UwMEU0MjBGMjZCMDk3QkZDMEZENTlBMjNCQzBFNzAyQgotOjEwRkJBMDAwODNGN0ZGQzVDN0VERTk3OTEzRkU1MEVEMzM5MzlEMjQyQwotOjEwRkJCMDAwRUNGOTk4MUFCMkQ3RDFDNzA4RUQ3QjI2M0M1OEVEODNGMwotOjEwRkJDMDAwRkFGREQ5OTFFN0VEOThDQ0U3QkRGRjY1RUY3MEQ0NjdGQQotOjEwRkJEMDAwODNGQjAxN0YwNjQ1M0FERjAwMzM5NUQyQjg1OTE4OTc2OQotOjEwRkJFMDAwMEFBRUI2MkQ4OEY0MUQ5QjMzNjI5RjVCQTFDRDM2MjhFQgotOjEwRkJGMDAwQTRDNzZFQUQzNkVBQTk3RUUyNTc5RjM0OUM3QzgxRDJDMQotOjEwRkMwMDAwQjQ4MTdGOTQwMDNEMjRCMkM4RkNGMkZDRkFBQTNCMERGQgotOjEwRkMxMDAwRjVDRTk2RDVDQTdBRTQxRjJEQTBBRjYyNUMzMEQ1NjlDNwotOjEwRkMyMDAwMjU3REI1MzVGMTg3RDNGMTVDM0U2OTYwNEVCQ0VGQkFGNgotOjEwRkMzMDAwMTNENDNFRTQ1RkU4NTdDNTdCQUNCMzlCMzg5RkYxM0FFMQotOjEwRkM0MDAwQjk5RjE1RUMzOENGQTU4ODhGRTk2NkMyNDdBOUJGOUEzRQotOjEwRkM1MDAwQUIzOUZGQjlEOEM2RjM5MTdCMTIxREU0Mzc0RDZDRTI4NgotOjEwRkM2MDAwRjlDNzcxM0VEMDY3NzE3RjMzNzhGRUIwMDZGRjIxMUY2MAotOjEwRkM3MDAwOTJGQUFEMjNERkFDQ0IyM0I2MUFGMjhDQ0Q4NkJDRTI3MAotOjEwRkM4MDAwOEQxM0Y0N0MyOEJFQTQ3ODQwQkRFQTU3NjBGRkUyM0FBOQotOjEwRkM5MDAwMEYwMEZGQzEzMjAwNzYzMDk2Q0Y4M0REOEVFNTZGQzA1NgotOjEwRkNBMDAwNkVDN0I4QzE4QjZCRjNBODdDNjlBRDlCOUVCRkIyQjYyMwotOjEwRkNCMDAwOTRDQTY5NTk0MThBMkI5MjFGOTk5QzhGMkNBMDkwMUYzRQotOjEwRkNDMDAwNEZFMkQ3MUJDM0NBMTBERkE3RjNGNjVGNEVBQzdFQzA2RQotOjEwRkNEMDAwMzcwQ0RBOTM2NUZGQjE4NDdGN0Q3NTVGNzUwREY2QUZFNAotOjEwRkNFMDAwNERFM0Y1NTFDRjVFNUQ4M0ZFOUZERTk5REE0MzEzMDA0RAotOjEwRkNGMDAwRUY1MjRDOUVCQTM2RUNGQjIzOUIzQjkyN0Q1RjMwNTExQQotOjEwRkQwMDAwREUxMzhCNkNCRjMzRkM0NDgyREU5RkYzMTRGMTg5MjgzMQotOjEwRkQxMDAwRkU5Q0JCMTVCRThFM0Y0RTdBRjA1RUE0OEI0MUYzQ0NBOQotOjEwRkQyMDAwMUVDNEUzQUMxQ0JEOUY3RkYwNDRDRTc3MTY4QjMyRUIzNAotOjEwRkQzMDAwMTVBMDhGMDFFMDJFRTkyMzVBN0JDQjdFNDA4MTA4NzQwOQotOjEwRkQ0MDAwMjVDQkFERjE2QzJBRERDRkFFQjEyRTg4OTRFNzc0NDA5RgotOjEwRkQ1MDAwRDA1NUQ0RjExRENDNjUxQjFCQTJCNzE2ODc5MURFODI0RQotOjEwRkQ2MDAwMTRERkZEQTRFOUM2ODMyODJGQkYzOUJEMzFCMjBGODM0QwotOjEwRkQ3MDAwMzUxQUM5RUIyMEQwMUJGMjczQjU4MUQzOUI2QUU2RjcyNQotOjEwRkQ4MDAwMzM2QjBGNzNGRkM4NEVBNDJGQ0M4NzQzN0E4MzdGQ0U4QgotOjEwRkQ5MDAwRjZGMTdBQUE4MURFNUE4Q0Y0RTZEMEQzNUIxMEU5MEQzNQotOjEwRkRBMDAwQzY0QkY0NzFGRDIyQUVCQUVCNUJBNUI3Q0ZCRjIxQkQ0OAotOjEwRkRCMDAwRkQ3QTRBOTBGMjFBN0FCMjFCRDMxMTNFNUJDNUY3RjA3NgotOjEwRkRDMDAwQkUyQTFEREUzNUQxQ0FCRkNGNzE4OTQ2N0U4MTU2MUM0MQotOjEwRkREMDAwQzc0MUZBRkMyNkZDQ0VDQUVDNjFDREU2MjQ4MERGREMwQwotOjEwRkRFMDAwRTQwMkZBMEVDMUU0ODk0MzA0M0QxQzcxQTBCRjI2NjEwMAotOjEwRkRGMDAwQkFFNjlDODhGNDc1RTU3Qjc0QkYzMUM1QzRFOUI3RTAwOQotOjEwRkUwMDAwRDkzNzQ5MUU2NEI2NzVDRjlCOEQ3NEI3NUEyNTM5NjlBOQotOjEwRkUxMDAwREM1N0VCNTQ4RTZGMkQwQTlGMTc0RTJFM0QzQ0FFMzdBQwotOjEwRkUyMDAwNDJEMEE1NkI3NThCNjI0NzdEQkM4RUI5NzNCM0U5QkJCRAotOjEwRkUzMDAwMzJGNEJEOUI3RjY5RkQ0RjI3OEVEQjNBMzU4OUQ2RTVDRAotOjEwRkU0MDAwNkE3RTMzRDFDQkZENkI2OTY4QkZEMTk1RTZDMkZFRjQwMwotOjEwRkU1MDAwMDhCRjJFQ0IxMDFEM0RFNzRGMUNDMDNGN0IzRUZFRjE3RgotOjEwRkU2MDAwQzgwNDQ1RjIwOUNBMDNGNjhBRkI5QjMyMkUxMjk1OUVGRQotOjEwRkU3MDAwMEQ3RURDQThGRUMzNEIzODdDOENFRkM3NEZFMUYzQjY5OAotOjEwRkU4MDAwMDhGRkFGNTFERjkzRkIzRjNBREQzQjFCRjdBNzM4NUUxRQotOjEwRkU5MDAwRTQ3RUUwMDNDQzg1RUI5NDcxQjNCRTNDMjNBOTFGRkE0QQotOjEwRkVBMDAwOThCRjA1RjU2RDMzQTgzMjQzQjhCQTgxRTNGNUU1MUY3NQotOjEwRkVCMDAwMDkzRDcxNDU5OTc3M0U4RUJCODNCOTBFQTI3QzczQjgxQwotOjEwRkVDMDAwNzlCRUMyMzNEM0I1MEE4MkU3RDdENDAzNEJDQkI0NkIyOAotOjEwRkVEMDAwMDZDMkFCMTVCM0I1NDUwM0I1QjMyRjYxOTQ3MUExQjg5NAotOjEwRkVFMDAwRDZGNDc5NjZDRTE3OUExNEMxMDcxQ0VCQUQ1MERGOUE5MQotOjEwRkVGMDAwMDhGQ0NDODU3QTNCREZCNzEzRjg4NjhCRUMwQ0JEMUQ3NAotOjEwRkYwMDAwMzEwQjlEOTFDODM3OTA4RjEwNzBCNUI5OTg1Nzk5MjBEMwotOjEwRkYxMDAwQzYwRkM5RUJFMDBCQTg5NzA2MDFCNjc3NDA1MzgyOEY1NgotOjEwRkYyMDAwQ0JFQjk2QzM5Q0FGNTg4MUFGNTA1Q0JBOTREQjA5RjIxRgotOjEwRkYzMDAwNUU1MDVDQkU5QkVDMkY1NTFCRDg3RTMwMUJFQ0ZCRTY2NQotOjEwRkY0MDAwODkyMkVGQkQ5MDE1MjNEQ0IyNENBRTNCMjdDMEYzQTI1MwotOjEwRkY1MDAwN0I2NjFFOUQwMDhGNEJFRTVCM0ExOEM1RTlGODFENkQ2MAotOjEwRkY2MDAwMTVGOEJEQUYxNTBGOUZEOTgxN0VEMjA5RkY2RTYzRTJGMAotOjEwRkY3MDAwQkI2QTk0NjdGMDc3OTQzMzc0MkUwNzI2OUZFMUZBNjM4NwotOjEwRkY4MDAwNzY2NDNDQkU2MjBBOTc3RjMyQ0UzQTAwMUVGQjA5OEYzMAotOjEwRkY5MDAwNDU5Q0YzMkJFMEIxRTMzQzc4RkM1ODE0M0NERUYzMERCOAotOjEwRkZBMDAwRjE3OEVGNDREOEQ3MzU3ODA4MzA0RUNDNkNFRDE3NTgzRgotOjEwRkZCMDAwOEY4NkI3QjM2NjY5Q0YwRUQ0MUUxNjNGRTBGOTQzQUMwNwotOjEwRkZDMDAwODFFQzY3MTlCRjM0QUVBNzBERTU2QkVFMDA3RUE5MEQ3RAotOjEwRkZEMDAwM0I2M0QwOUU2RDY5RDhGOTMyN0VGN0IxQTU4OURCRDkzNAotOjEwRkZFMDAwM0RGMTZFN0IyOURBMzc2RkE4RjQzREFCNjhFRkEzRERGNgotOjEwRkZGMDAwRUQwMzY2Mzk3MzBBQ0Y4RjNFQjREQTE2OTgwNkUzNjREMAotOjAyMDAwMDAyMzAwMENDCi06MTAwMDAwMDAzOEI4QkNDRDcwNjgwQ0YzQzVDRENFQTBDNTFCOEZGQTM3Ci06MTAwMDEwMDA5QTg3QTE5RDYxNEQzNjMxNUY5ODNGNjZBQ0U1MDhDOTZFCi06MTAwMDIwMDBFNTFFOTBFMzQ4MUY0MDlGOUNERTEyRjkzODUyM0U0Rjc4Ci06MTAwMDMwMDA1QjdEMjc0NjcyRDg5NDVFOTA4MzYxNzRGMkYyRkU1MjIzCi06MTAwMDQwMDBGMkMzQzU5N0VDNUQ4NUVGQTkzNTU2MTdFMkY3QjRDRjNCCi06MTAwMDUwMDA0MTZFODZDRDMzMUQzNDkxRjBGQUE1RjY3NEREMzgzMzQ4Ci06MTAwMDYwMDA5REQ5QkFGNkQ5NjlERkQxQjU1RjA2Rjg2MkE1MzgzNkYxCi06MTAwMDcwMDBCRjE3MjhGNTlBMzlBRTAyNURCRjQ0MTFFN0Y4NkVERTZFCi06MTAwMDgwMDAwNERENzg2NkY1Q0IzQkM2MjNGRDBCM0Q2MjMyRkM4NzcxCi06MTAwMDkwMDBGNEFGMUFGNDA1QTMzRTYxRDQxRkQ4MjRGRDNERDUzMTM5Ci06MTAwMEEwMDA2NjkxODc2NkU2RjkxMTVCOTk5REJFNEIwMTdDOTBCRTE3Ci06MTAwMEIwMDA3QjUwMUJDQTEzMjAzQTE5NjMwREVFQkMwREZEMkEwQkIxCi06MTAwMEMwMDBFRDZFMUYzQzZCREQ3RjU5NUE1RDcxQzg3RkI2QjU4OUY3Ci06MTAwMEQwMDBGQkZENUFGNkQ5NzcyMDNENkMxNzc0MjlFOTJCM0ZGRUJBCi06MTAwMEUwMDBFNDQyNDY3MkREQ0E1MDFFMUJFOTU1RTYzQjQ5N0Y4MTVBCi06MTAwMEYwMDBGNDI3MjgwRERDQ0ZGMEQ0RDQ2Q0EyMDdDOTdGQjY1NjA0Ci06MTAwMTAwMDA3M0ZCRjc2NzRBMjA0NjE5QzFFOUQyOTUxNEZBM0U1REEwCi06MTAwMTEwMDAxQTUzN0M3MzM4N0Q2QjQ5QTI1NDQ1M0VBQUNDN0JDNUVCCi06MTAwMTIwMDA3MUQwQ0U0RUUzRjNCMTk3NzhERTY0RjM4RkYxN0QyNzgzCi06MTAwMTMwMDBGMzBEMTNGRThDQ0NBNDkwOUYwMkYzMTM1NkYyRjc3Q0MwCi06MTAwMTQwMDA3M0M0N0JDMzQ1QkVFNTIwQkVGRUMwNEMzMURGMTgyODFBCi06MTAwMTUwMDBENTQ2NERGOEE3QkQ1NERBMzAxRTBFNjU4RUUyOEU0NUE5Ci06MTAwMTYwMDBGRkM3MDhENTQzODE5NjA0MTE1RkNGMTBGMUY0MzgyNUZECi06MTAwMTcwMDBDMDk5QzdEN0U0MjM2MzgxOEQ2MjVFMDI0QkUyREYxNzJCCi06MTAwMTgwMDAyOTdCQ0NDMTU0QTIwRkVCNEU5NDQ3Qjc5RTcwQkY4RTEzCi06MTAwMTkwMDBBOUJBQURGMTNGN0M3NTFBM0M2RjdGNDM3NUEzOUZGNEZDCi06MTAwMUEwMDBENjRDREZEQjQ4RDc2NjQwMDYxRkY5QjUzQzc1Nzg2RTQ0Ci06MTAwMUIwMDA2QUE1REQzOTFCREU1MzdEM0I5QTMxQkUzQkQ2RUEzRjUzCi06MTAwMUMwMDA0OEU3QjlDRTQ2RjQxRTg0RjcxMDFGQjZDNzAzOUQyMjM4Ci06MTAwMUQwMDBCRUEyQTc2QjVDMjgxRjQ4QzYzMTgyMTNEQzc2OTRBM0FECi06MTAwMUUwMDA0MUVDQzdGRENEM0FGRjY3ODQ3QzEzRjI5NzlBNDVCRDc5Ci06MTAwMUYwMDBENUIxOTNGNEY3RjVDOTU2RkNFMjI2RTZGNzY0MzUyMTRDCi06MTAwMjAwMDA1RUE2QzRGMkZCQjc4Q0M3MEQ4NkUzM0ZDMkYyRURBRDJDCi06MTAwMjEwMDBDRUM4N0U0REQwRDcwODBFQzFFNkU1NjkwM0U5NUQ1MTMxCi06MTAwMjIwMDBFMzI4MEU1M0MwOUE3MEUxNzE5NEI2NkJBRkY0MDdDMjI1Ci06MTAwMjMwMDBENjI5RjdCRERFQjE1MzU5Q0NCRUNBRkM0QzFGNDc2OTY1Ci06MTAwMjQwMDA2MDVBQ0M5ODA4NzE5NEEwNUZDMTc1MEU2RkUwNzE5NkVBCi06MTAwMjUwMDBFMUMyNUZGRjc1RTMyODU5NTNCRjVFMUM0NUVFRjc3MjlDCi06MTAwMjYwMDBGMUVGQjk4MEQ4RTI5RTMxQzUxM0U4QkM0Q0ExRjU4NTA5Ci06MTAwMjcwMDBDMUVGMjFFMjQ3ODQxQjAyNDVBMEZFM0Q1MTdGNzU0RjJGCi06MTAwMjgwMDBGNzlGMUU4NTdGMUVERUZERkMxRTJDQTUxRTM3NEZCNDdBCi06MTAwMjkwMDA1RjMxRkFCMzAzOThCQjM1NkZDMzJBMTFDN0QyQzcxRkFBCi06MTAwMkEwMDAyRTA3QUIyRURDQ0Y4RkRGMEIwOEFGQ0YzM0FDQTdDQzQ0Ci06MTAwMkIwMDBBQzhGMTNDQzcwRThGQkNGNEFENkI3OTcwRkIzRjUzQkEyCi06MTAwMkMwMDAzN0Y0Q0JEMzdFOTVGRUZCQkQzNUVFNzZDNkJGMzcxNTMyCi06MTAwMkQwMDA3NjBFRUFGOUVCNzZDQzlCQzNCODhGQUIzRjlFODRDNzEyCi06MTAwMkUwMDAwMTNDQkYzNEIzQTQ2MkM0MTcxM0U5QTVEQjdEQ0JFRjk3Ci06MTAwMkYwMDBBQTAyRkE1OTBGNzI5NEYzNjI5NzhFRkU0MjcxOEY3MkJFCi06MTAwMzAwMDAwREYxNDlGQUZCQTNEMUQzNDk0NzBFRjlGRjg3MzcxREY5Ci06MTAwMzEwMDBFQzlBMzE5OEY1QzUwMTZFOEZGNUJFMzEwOUJGMTdFNDJGCi06MTAwMzIwMDAzOEE3QTAxRTMyQkNFOTM3RDQ3RUU1QzI5MjAxRjEyODdECi06MTAwMzMwMDBCN0U5NTBENzhDQjBFRjA4RTY5QTNEMjZCNDlGNzM5QjdGCi06MTAwMzQwMDA1RUE0RTc1MUY1RjlGRTdDODRGMkQ2NzIwNTVFQzhCQzY2Ci06MTAwMzUwMDBDMEVEOTgxNzA4NzBDRjZEMTBERjA3RUUxQzM4RkY0RDA5Ci06MTAwMzYwMDBDQUMzRDZCMEZDM0U0QTY2NzAyOTJDN0M3QzI5RjdGQUI5Ci06MTAwMzcwMDBGOUQzMTlGN0ZCQ0FGOUZBRjIwMjBERjNGNkM5M0YyN0QwCi06MTAwMzgwMDA5NzdGQ0Y0Q0Y3N0UzMTI5MjVFQzVFODZCOEM3MDFGQkZECi06MTAwMzkwMDA4RTk4MDdDQTI2OEI3QkIxRDFGM0Q4QjhERDU5RjlEMjM0Ci06MTAwM0EwMDBEQjM4RkU1N0I2M0JBMzhDM0IyRDJCMThGMTlFRDRBMDE3Ci06MTAwM0IwMDA4OUMyOEYxQzEzQ0M0NEJGNDE4RjI1QjI1RUZGQjM5OTE1Ci06MTAwM0MwMDBCMzkyMjcwRjYwQTc2MURFMkNDMjMyREEzQUJGNkVERTJECi06MTAwM0QwMDBFQzA0MTE2RjkyRjE1Njk5M0YyQkYzNjJDRjk3M0ZGQkRDCi06MTAwM0UwMDA0REZERjA2NUMyMUYxMDM3OTk1MTY5OEM0MzE4RDczQkZBCi06MTAwM0YwMDA1OUY4QzdCM0NCM0M5MzI2RDM3REFFQzhGMTA3RDlGRkRDCi06MTAwNDAwMDBFRDc0NkI0NEJGRjhGRDUzMDU5RUY0QkY3RjQ0RjlBMTIyCi06MTAwNDEwMDBCMERFRTQ3MDNCNDhCRTI3RjNGMjhERTM4MTVENzRDNTI2Ci06MTAwNDIwMDBFNDMwN0ZBMEI3Mzk5N0ZDN0Q2MUY2OTZDQzg3MjVGQTNBCi06MTAwNDMwMDBEODJBRkMxMDdENzQ2MEQ0MEI0NTNDQzRBODE3Q0FGOEI4Ci06MTAwNDQwMDA4ODUyQ0RGRDEzNDAxRjM1MDgwN0Q0QkIzMDJGNUREQTJECi06MTAwNDUwMDA3OTMyOUY1NEU2OEQ2MjVFMjhDNUEzQkVBNjVFRjVBREQ3Ci06MTAwNDYwMDBEQjUzQ0QzMzI5QUZBQkM1NTlGNkQyMzdCMUE3REFBN0U1Ci06MTAwNDcwMDBGMjdCQzJEMjlFRjIzQUI4REZDMThCRjZENDI1RkRFREY1Ci06MTAwNDgwMDBBOUUyMzI2RjJCQzJDQjY4NTcxREZGRTk4Nzk0MUYwQjdGCi06MTAwNDkwMDA3NjY4REJFNDZGODM0RjE4RkM1MzIzMjY3MEZDOTY3MjVBCi06MTAwNEEwMDA1QUZBRDMwRThFMzRFOUZDQUVCM0Q0MzUwNzI5NUZCQ0JCCi06MTAwNEIwMDA4MUZCNUIzMkI0MkVCMkQzQUMwRUFCMEJGRDJERTYxOTMzCi06MTAwNEMwMDA5QzhFMkNGOUNDQUZGMTM4MkZGOTU3NjQ1RTU5OTI2M0FBCi06MTAwNEQwMDA1OUM0RkJBNkQyNEUwQzRBM0JEMUM3RUZBN0Y2MUNFNjg3Ci06MTAwNEUwMDA3MURCMzhGNEI3NjBDNzcyMkVEN0E0QkZDNTkyMkNGQzVECi06MTAwNEYwMDAyRDg2N0NFQzM4ODM3RkM1RTg2Rjc5NjJCMkRFREY3MkNGCi06MTAwNTAwMDBCRkUyQkEwRDQ5RkRFOTZEMzM3Rjg3QTBGOEI3N0I5NzRECi06MTAwNTEwMDBDNkExQTlGRjhDQkZFREJCQzJERjcyOEYwM0Q2QjdGRkE4Ci06MTAwNTIwMDA2REJEQkZDNTE4RkY4QTEwRjcyMkU3RDU5OTAzNEY5MDFDCi06MTAwNTMwMDBERjQ0QzI1N0QyQURGNDY3NjUzNEYxRUYzN0NENTJGN0RGCi06MTAwNTQwMDAyOEM4NUZCNjNBMzg3QzU1RjQ2NzI1ODdGQzU5Q0ExMzJBCi06MTAwNTUwMDA3RkVBRjM0QkQxN0REQzdFNzFGMkM2OTc3MTlENjY2MEI4Ci06MTAwNTYwMDAzODFCMjNGOUI3MDQ1QzhERjFBODg0MjY3MTBGRjg1QjYyCi06MTAwNTcwMDBGMjY3QkQ2MzgwNkZFMTNENDU3N0UyNzc4RDhCRUZBQjJFCi06MTAwNTgwMDAzODhBRTVCODFEMzcwRUJFMUFDQUQyODdFRkFDQzBGMjYyCi06MTAwNTkwMDBCRjVFMEU2NkEzREU2OUY0NjNCRDgyMUY0MTRFRTkwRkE0Ci06MTAwNUEwMDA1RjIzMUMyNTlFN0ExQjI0OUUzQUFDNDRCN0Q1MUM4RTMzCi06MTAwNUIwMDA0NjM4QTU2QTFDNEY3MzAxNEY0MTQ1RThDM0JGOUU0NEFFCi06MTAwNUMwMDA0RTlGMTkzM0RDMkZBMTdGNkQ3OEJFOTk0NUMyNjM3M0FFCi06MTAwNUQwMDAxM0ZGNUU5Njg0RTM3NjAxQzdBNDg2NjVFNDI3MzRFMkMwCi06MTAwNUUwMDBFOUYwQ0VBRjg2OUZFQTE0RTExNzEwRjA3QjZBNUJEMTg5Ci06MTAwNUYwMDA2RDA4QjdCREY3NTZGQzBFQ0I1RkY4NkY4QzQzQjhFREI2Ci06MTAwNjAwMDA3QkU4Q0VFRjBBRjhBNUQzRjc3NDBERjA1QjE0MDU3RUY2Ci06MTAwNjEwMDBEM0RDRENCRUZFQjhDQzlCMzgwNUU0QzI2NUMwMjFEMDdCCi06MTAwNjIwMDAxRkIyQjNCREQwQUU4RjAzRTlGOTY5RUFCN0U0OUYwQTAwCi06MTAwNjMwMDBGNkYxNTNGNjVBRUU1N0UwQTc0RjFCRkM1M0E5M0U0RTc2Ci06MTAwNjQwMDAzN0E5QkUxMzQ0OUYxOTQwOUYzMUU4QUY2QUUwN0EyNDZFCi06MTAwNjUwMDA4ODdEN0Y5QzgyMzYzN0U3QUY1MkFFMjFDQjMxODFGMDY3Ci06MTAwNjYwMDBEOUVFRTQ3MUU3MDg3RUNBMDA3REVGRDdDMDg3RDE4MTVCCi06MTAwNjcwMDAxMzhFNzcyMDU3Mjc0QzQ5MDlDOUJCRUQwRDNDOEU3NjY4Ci06MTAwNjgwMDBFMzRDQ0YyNDg0QUI4Q0FCM0QzMzVEOUIzQzg1RUUyRjlDCi06MTAwNjkwMDA3QzZERkZFMzBDOUM0N0ZBMUYwMTRGNjlGRjJBRTAzQjhBCi06MTAwNkEwMDA3RURGRkM1MjkwMjc2OEZGOUIxQjgyMTY5NDJCQjU0RDcyCi06MTAwNkIwMDAzNzI4NUUyOERGOUVDOENGM0YzNUNEQ0IzMENFREFERjdFCi06MTAwNkMwMDA1RjE3OEM0N0JEN0REQUM4M0U3Q0E4MDhDNzg3QjFBQkYxCi06MTAwNkQwMDAzRkI5MTNGRDVDRDFGMDIxMjM0QUJFRDJGOUYxQTE0QzAwCi06MTAwNkUwMDAyNzVGQjdGNkUxNDNFMzg2NTFDOTE3OEUwRjQ3OERGOEIwCi06MTAwNkYwMDAyMEU4M0ZCNTIxNzgwRkQyQUY1OUUwODNEOTA5N0MwQ0FGCi06MTAwNzAwMDBFMEExMjIxRUU0ODdFMjlFOTIxRTgyMjJGRkMwMDg5RjgzCi06MTAwNzEwMDBBMDZGNDQ5NDNDODQ1NTRBRTkwMEVCQkJFMEZDMDMxMTE0Ci06MTAwNzIwMDAwRjZEMTFGMTUwNkYxM0NGOTdFRDU5NkQ5QkE1Q0YzRjEyCi06MTAwNzMwMDA3MEQzQkE2NzNCMUE5NUYwM0NGRTA4NzlCMkI3RTFGOTdECi06MTAwNzQwMDBDOTM4QTc4QzZCN0U1Q0U2RDk4Q0NGQTdFNUYxNzMwRTE4Ci06MTAwNzUwMDA0NjhGMzMwNUYwN0UyQkEwOUZEMzgwRTc3NzEzOUVDQjg3Ci06MTAwNzYwMDBGQjA3NDI4RkJCNzFBNkI2MTU5RjhGQjFGQTI5Q0YxOTJGCi06MTAwNzcwMDBGNEJEN0JCMUJFN0RGRkEzRkM3QkJCQzIwRjI5RjNGMkFFCi06MTAwNzgwMDBCRUIxREYyQ0MxRUFDN0ZCOTJEMjZGQjYzNURFQkExMzE5Ci06MTAwNzkwMDBDRkJCOEUwNTY3RDI3NzdFMzE0RTgxN0VBN0NEMzZDQTFDCi06MTAwN0EwMDA2QkFDNTdDMEYwNDZCRTc4QTlCNzZCMEFFOTREMUVDQUJDCi06MTAwN0IwMDBDN0Y1NTZEQTlEQThFN0I3MjZDRTRBNDNCRTUxQkI1RUMxCi06MTAwN0MwMDAyNUI5MUVDREJFOTFGNDU2MEJGQzg2RThBRDg5RjM5QjhFCi06MTAwN0QwMDA1NEMwMkZDMjM3OUY0MkZDMjYwM0Y4MERFNzNGMUE0MzRGCi06MTAwN0UwMDBCRENFOEM3NEU3RThDRjZGQjYwRTAwRkYwQkU0M0IyRjU1Ci06MTAwN0YwMDBFMTc5NDZFMDNCQUZFMDNFQzNGOENFRUZBNjdDODNCODlDCi06MTAwODAwMDBDN0E1NTMxODhGRTc4OEZENjMzQzgwRjY4RkY0MTVCRUFCCi06MTAwODEwMDA3RkEzM0VEQkI3NkYzRDdENDlCQUZCNUY0MDY3OUYyM0Y3Ci06MTAwODIwMDA1QzIzRDBEOUZGRjk4Njc0QTY0RThENEM2N0U2QTk3QTcxCi06MTAwODMwMDAzQThCOTlGQThGNDk2Nzk5NTM0QkNFNEY2NzVEMDJBRjU4Ci06MTAwODQwMDA2NEZFQjZENDJCMkU1MkJCQ0VFNUUyRkNGRjhGRjNCNzhECi06MTAwODUwMDA2RjlGQzRGREE5RTdDQkRGQzZERjg1Rjg0RjhERjlEQ0JDCi06MTAwODYwMDBGRkY0QTdGRUFGRjVBN0ZFNzhFQUI3RTA0RkZERjc0OTIyCi06MTAwODcwMDAyRUQyREI4QzdFRDVCREUzQjVCNkE5MDNDNDk1MjU5RkVBCi06MTAwODgwMDAzNjRCM0UwREZDMTg3OTZGMkRGMDMzRTRDRkE5RDVCRDYyCi06MTAwODkwMDA3RjdFODZEQjlCRUUzODE3RjkxQkVFQzBGNTY2MDg3RTdGCi06MTAwOEEwMDA2REU0Q0JBMDc3REUzOUY1RUZFODZGRjg3QkY5MERDQjdGCi06MTAwOEIwMDAyNjVGRDg3REZCQjJDOTJFRTE3NzhEN0NFRkJFNDVEODhGCi06MTAwOEMwMDBGNzJEMzAwNkRFRDNEQkJFREFFQTZGODUwNUE3OEJGM0EyCi06MTAwOEQwMDAxOUQzNzBFNTY1NDg2NEFGQUZCMEM2MDYwN0IwOUJFNEI2Ci06MTAwOEUwMDBERjkxRTg1OEVCN0RFRTc0NkVGOEZFNTg0NEI5RDVCNzQ5Ci06MTAwOEYwMDAzRjgzOUUxQzZFMzdCOUJFODJERDk0MzI0REVGODczMjQ2Ci06MTAwOTAwMDAzNzcwM0JENzBDRjI4RUUyRkE1QTY5MDBGOTc1ODY0RkMwCi06MTAwOTEwMDBFOUMyRDQ2MDZGNzJBMzgyNzIzMEI1QzE0M0Y5RjA1RjRGCi06MTAwOTIwMDAzNUFFNkZDNEEzNjg3MUZFNkYzQkFFNkZDQzFCRjg0NzRBCi06MTAwOTMwMDA4OUYzRkZGNzU0RkQ3NzJENjU5QzVGRkE1RjhENzFGOUEwCi06MTAwOTQwMDAzMUQ2OEU3MjkyQUYzNTI2RkMwQjE4QUM3NUZGMDczQjgzCi06MTAwOTUwMDA2RkMzRjM1RTY4QTc3QjFBQzY3QzgwNjg3MUZCMzE0OTYwCi06MTAwOTYwMDBENjYwNUM0RUY0RjhCREY0MTdEQzZGNjk3QzE5RURGMENECi06MTAwOTcwMDBGQjlCNEQ3NEJFQzZCQzgxRkM3ODlFM0ZGRUQ0QUYzNjU3Ci06MTAwOTgwMDBERDQ3RjkzRjUyMUZBRTE2N0NBNjQ5QjFEMjc3MURBQkE5Ci06MTAwOTkwMDBGREM0NjdCQ0RBRUU2NjhDMjdBNzNBNTgxN0VBNTk0N0I4Ci06MTAwOUEwMDBBNzcyN0E1MUQzMzRFMjMzRTY2QTJGRTE5NThDNEZENEEzCi06MTAwOUIwMDA2NkYxN0I3MzMxMDJCRkQ0OTE4REFGRTJGODg5NDc1NDYxCi06MTAwOUMwMDAzN0M2QjczNzYzNTdFMDE5RjEyODJCNTE4Rjk4NjBBMkNCCi06MTAwOUQwMDBCQzg4NEVBNTkxRkMxRTFEOEE4QkZFRkU0NzYyQkU5MzBECi06MTAwOUUwMDBGNEEzQzcxM0REQkY1RjgwRUI0RkUxN0ZBN0U0RDA5QzhBCi06MTAwOUYwMDA2NTY5QzgwN0Q3MzczN0E3RTFGREM0RTI2OTNDMUZGMTM1Ci06MTAwQTAwMDA4RTM5Njc2QjI4OEU5RTA3RkE5RjQyQTVFRUVGRDlDQUYyCi06MTAwQTEwMDA3MkE3QTY4OEJGQjdFNEE3N0M0NDU4RjczNjdBNkZBNEJDCi06MTAwQTIwMDA5NUZDNkNBQTc2Rjc4REM4MDdENDUxQjMwOEFGM0IxNDc4Ci06MTAwQTMwMDBFN0MyQzU3ODVFQjk1NkQyNjM1QTczQzcyRDU4MDJGQjE4Ci06MTAwQTQwMDBEQTkwRTIyOUNGQzY3MzREMUM0OUZCNkM0RDFDOTI4MDk1Ci06MTAwQTUwMDBGQUU4ODZGNDFDOUFCRjVERjE5NjY3RTM3QkU5MjZBMjZCCi06MTAwQTYwMDA2QjU1QzRFNzM3RTQyRTdCMDlGRjBFNDg0Qjg2ODlFMUJFCi06MTAwQTcwMDBCRDgzQ0VEQ0IzRUREOEFGNzMwMkZGMjMzOEM2RjVBQTMxCi06MTAwQTgwMDA0RUZEM0QyOUZDRjAxMUYyNkYzNThEQzdDNTU1MTExNzhDCi06MTAwQTkwMDA1NzBENzFFNTMyNEQ5MTdGNjc4M0UyMEUzMTgyNkZENTNDCi06MTAwQUEwMDBFNkFFNUI0MERGNEY3MDU4OUQ4ODY0MkRGMUMxMkFDMkNECi06MTAwQUIwMDA4RkQ1MTY4NjcxM0E2NkVFRDBFOTY5QjdBREQ1N0ZGRjVFCi06MTAwQUMwMDBDNTkxQUY1RjRGN0JERkZEODQ2QzJGRjIxOUZBMUJCMDJECi06MTAwQUQwMDA5NDJGOUVFODQ1RkM0MDdFQ0I5M0ZFRTI3ODNENDZENEMxCi06MTAwQUUwMDAwMzE2QUYyRkMyRjlGQ0IzRkM2N0Y5Q0ZGMjlGRTVGRjA1Ci06MTAwQUYwMDBFRkU1RkYwMDgzNERFQUU4MDA4MDAwMDAwMDAwMDAwMDAxCi06MTAwQjAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkM1NUIwRDc0MUNENTk2Ci06MTAwQjEwMDA3NUJFQjMzMzNCQkIyQkFEQTQ1OUZERDgyQjkwQ0RDOENDCi06MTAwQjIwMDA5Njg4MEM0MjFFMEJDQjQ4OEQ4RDY2QTU5NUI0MzIyRTRGCi06MTAwQjMwMDBEOTM4RkM5OEM0NzZENkQ4QjhFNDM0Mjc1NTlEMjZCMTY4Ci06MTAwQjQwMDAxMzVBQURBRDk1MjU0QkI2MkMwOTgyOUM0M0NGRTlEQUZCCi06MTAwQjUwMDAyNDM5NkRGMDAxMjVFOTY5MEMwMUNFMUExQzQyMDgzNEQ0Ci06MTAwQjYwMDAwQTEwNDI3QTkyMjA4Q0UzOTQ5NkU2OTg4Mjg5Njg2OTBBCi06MTAwQjcwMDBFOUJERjdDRDY4Nzc0NjJCRkZDNTNEMTE4N0YzRkM2NkNECi06MTAwQjgwMDBERURDRjdERUZEN0JERkJERjcyRDAwNzg2MDAxODBFQzU5Ci06MTAwQjkwMDAwNzAwMUQ2MDczOTEyNzA5RTUwMDY3NkIyMDBERDVEODBDCi06MTAwQkEwMDBGNzRFNTc2ODQxODAwRkU5QUYzNURCMEVGNzAyNjQ3Q0UyCi06MTAwQkIwMDBEOTdFQjA1RTA1QjMwRUY4RUY0M0QxQjhFODhFOUIxNjMwCi06MTAwQkMwMDA1REY4NjNEMjFEQUM1NTM3QTQ4MzczRTlEQUUzREE0Q0UwCi06MTAwQkQwMDAwOUEwMjlFRjNDMjA1REQ0M0NBNzdGQTZFM0Y4RTRDRjMxCi06MTAwQkUwMDA2NEE4RDVFN0NFRTdGRURFRkU2RTczRDFGQTEyQThGRjQ5Ci06MTAwQkYwMDBGRjFCM0YxRjVGOTc5QTFFODAwQUQxODc1NUI4NkY2QTA3Ci06MTAwQzAwMDA5Nzg4QUU4RTdDNTA0MEYwQTFBRjczNTUzQTgzRkY5QzFECi06MTAwQzEwMDA5MDEyODNENUI0QkY5MEM3RjgwNkNDRTU4M0REQ0FEQTVECi06MTAwQzIwMDAxQ0Y5NjVFOUNCODI3Q0I5NEQxRjk3MjBFRjBDOTg4MUE4Ci06MTAwQzMwMDA2MjdBODVERjIxRUYzNTVDRjY4NzI4MTJBNURDQzNDRjA5Ci06MTAwQzQwMDBDMUEyMTcwNjc4RTY0MzVDREZEMUFDQkM0MDVCOTBBNTNGCi06MTAwQzUwMDAyQjZGNTQ3OUZDNzJCNUU3ODVBNjk1RjhFQzE1RDlGODk5Ci06MTAwQzYwMDA4NjlFQTVDQkVCQTkwNjlFMDBFQ0VGQUFCM0VGMTU2QjExCi06MTAwQzcwMDBERThGMUM1MjIxNjM4RkM3RkY4Rjk5MjFFNkQzQzRBNjU0Ci06MTAwQzgwMDBGQjIxODFGQ0ZERjlDNjRGOTQyNEYyRTg4MUREMkU0QjU3Ci06MTAwQzkwMDAzQkJGN0YwMzY5MDJGMzBERDJERkMwN0ZBNzdFMzEyQUZECi06MTAwQ0EwMDBGMUU0QzdDNEYzRDQwQTJEM0Q4NENGODdBNEY0RDAzNTMyCi06MTAwQ0IwMDAzNEVFMkVDMTVGNUIwRTg1OTYxQ0YwMkY1QzgzN0NGNEI2Ci06MTAwQ0MwMDA1QTcyRjJCQUY3ODU3RkNBMDJFNjkzQzU5QzFDMzkyQzhBCi06MTAwQ0QwMDA2MTFBMzVCNEVGM0U5QjlFNkU2NDAwRjkzNEJDQkM2MTcyCi06MTAwQ0UwMDBDNTkwNEVGQjFGRkQ4NzZGRTEzQTBFMUREREYzRTZCN0ExCi06MTAwQ0YwMDBGMDc1QTBCRTYxQTQxOUQ3NTM2MDc4MEM5OUY0Rjk1MzJDCi06MTAwRDAwMDBDNzhFQTFCODYwQTBGRTBCQTM0NDc2REJBODY0NkFGODg2Ci06MTAwRDEwMDBERUFGMDU4RkM4QjQ0N0JGNjQxMjNERTVFMDQyREU0RjQ5Ci06MTAwRDIwMDA3ODlCNTMwRjI2MjQ2MzQxMjVFRDZGNEMwMjkyNEJBMTEzCi06MTAwRDMwMDBFMTdDRUZEMzczRjY4M0ZGMUYyMjM5QjM3RUU2M0M0Nzk1Ci06MTAwRDQwMDBCRTIxRjczNjRDRDZDRkU1RkIyQjk2M0UyQjM4M0U2OUJECi06MTAwRDUwMDBEMzQ1QkU4QzdCRjU5Qjg5Q0ZFM0ZCNjQ0ODIyQzlGMTY4Ci06MTAwRDYwMDA1RDY4MTQ1NzAwRkM1QkU2QkU0RkVGNDZEQkZFNDJCRkZBCi06MTAwRDcwMDA5N0U1MzAxMTUxRDMxMjhFOUYyOEQyNkVEQjQwRkQwQUM5Ci06MTAwRDgwMDA4RjcxODQ5OThBRkZFM0JFNDY5NzVEQ0RGQkIyRTc2QjE2Ci06MTAwRDkwMDA2QUQ1NzlCRUIxQzg4MjRBQjI0NzFDNTcxOUJGNkVBRTM4Ci06MTAwREEwMDBGRUI5RDc3RkIxRkE3N0I3NTk2QUU5RkIyODEwN0Q5ODY5Ci06MTAwREIwMDBCQ0Q5NDNGNkU0QjdDNjVDMjM0RjM2MkVBMUY5N0UyRThDCi06MTAwREMwMDA4M0QwOUIxRTg4MTdDREU1NEYzRkY5ODM4RjY0RjU0NDkwCi06MTAwREQwMDBCNUY0Njg2RkY5RkE5RjEwRjlGOUY0NTk0RDRGOTlENUE4Ci06MTAwREUwMDAwRDM0MEZGNDEwREY5Nzg1OURFQkIzQzc3RENFOTI5NzNFCi06MTAwREYwMDAyRjBEMTk2RjMxQjUxOTEzMUFBODlEMzIyNTZDQ0Y2RUJFCi06MTAwRTAwMDBGQ0JDQjY1NjlGN0YxRTFGRTREMEFEMjY3QUMwRkJGNjExCi06MTAwRTEwMDA0MjgyOTk0NTcyMzU3M0U0QkFBN0IwRTEwRTkyNEJGRjU2Ci06MTAwRTIwMDA0RDJBQjBGRUI5Rjk3QzlFQkVBQTY0OEU0QkM1QTQwRkI0Ci06MTAwRTMwMDAxRjYxRkQ0OEEyN0VENDIyMUQ2RkQ4QTk4N0YxMjc1NkQ1Ci06MTAwRTQwMDBDMjc0NTBDODI5QzlDRjYzMjZDOTY5NTlBQjc3RDY3RjA4Ci06MTAwRTUwMDBGQTczRkMyNUU4QkI3RjIzMjNCRDdCNjNBQTNFODRFQkFBCi06MTAwRTYwMDBCQzM3QkVGREFCQjc5MjlEM0YyRjFCMTJCRkQ3RDkxRjFBCi06MTAwRTcwMDA3RUMxOUEwMzQ2Mjc1ODFGNEFBQzczNjdFN0IxN0I1RTcxCi06MTAwRTgwMDA3QjhFNjQxNDUzNUYyN0JFOTExRENGRjI0NUY4NjdEMzY0Ci06MTAwRTkwMDBCRjJBM0JERkMxRTY5MzgzNEI5MTBGQTlDMUZDRjRFRjVFCi06MTAwRUEwMDAyQ0QzM0Y0N0ZDQjNGOTNDMUZERDU5RkZCREYzRjg2NDc5Ci06MTAwRUIwMDBGNEZBNkM3RkE0MjAxMTg4QTAxQzQ2ODIwNjNBMDE3QUJECi06MTAwRUMwMDA3RjgyREZDMzRBRDRDQkNBRjlFNTg5MUM2NUZFQkM0NkU0Ci06MTAwRUQwMDBGRkM0NzFERDUxNTM4QjYwNUYzRTg2NEI1RjhFN0VCMUU4Ci06MTAwRUUwMDA0OEJGNzkzREJFRUEyODdGN0QxM0YxN0Y1QkQwQTNDOTVGCi06MTAwRUYwMDAzOUY2RDVCN0RGMEI5OTIwMzEwMkU3NDVCRDVCMDdEMzQzCi06MTAwRjAwMDA5QkQ2RTMzOEE4RjFCMjlFQ0JFNTJCRjhGOUQ2QTJCODcwCi06MTAwRjEwMDBFMkMxRjZFQUM4MTI5RUNGRkVCRTFCRUU1Mzc2RTBGM0E2Ci06MTAwRjIwMDBFNTVFRUQxNUQyOTM1NEI5NDQyQkMyRTdDODQwNUNGQTk0Ci06MTAwRjMwMDA1QTA1Q0M2MjZDQkJGNDg4OUZDRUI1RDhFMzM0MTE0MDFGCi06MTAwRjQwMDA2QjY4QkM5Q0NFQTU4NkM3MEU1NTI1QzhBRTkzRTY1NEVCCi06MTAwRjUwMDAxRENBMjc2NDg5RUI1QURGNTRCQzFERTlGNUJEMjAxQjZGCi06MTAwRjYwMDA3QkIwMUYwQTZFNUYwN0E4NDdEMjIzNDFGNjEzN0RFOEM2Ci06MTAwRjcwMDBFNzdEMjg3NzI1RDhGOTI2M0Q1RjczMDYyMDlBQTM0RjkxCi06MTAwRjgwMDBBRDMzN0U4OEU2RjhCRDA4NTJDRUVEQjdGQjJCMURFM0VFCi06MTAwRjkwMDAzQkI0NkFDNzdCMTk0QzIzODM3Q0VBMEEyRjczOEMyQkUyCi06MTAwRkEwMDA2QTVBQTlEMTdBQkJGNTE1OEVFNzM3RDVCNTM4QkU4NzExCi06MTAwRkIwMDBBODcyNzIxQUZCQUJGMTNGOTJCQjBDQTJDRkVGQUIwOTQ4Ci06MTAwRkMwMDAyNzYwM0ZFNzdCMDU3MkZBRjg3RTZEQTRBOEZDMzQxRDBDCi06MTAwRkQwMDA0QTM3QzAwRDY0NDcyODk3MjNDM0U0N0YzNkY4RjlEQzBECi06MTAwRkUwMDBFQUYzQzIzMUE5MDRDOEY0OTNEMDQ4Q0MzNkY5QkM5N0NGCi06MTAwRkYwMDAyQzdENEQ0NkFBNTk0RTUyRjA5OUY3NTkwRjFGOUZGNjc2Ci06MTAxMDAwMDAxMENFODJDN0EwOTFGQ0VCREY2QUZBNzEwRjBFQjk5Mjg1Ci06MTAxMDEwMDA0OEUyRjc2MTU0NzQxREU1ODRBRTNBMTk2OEU0RTdFNkU2Ci06MTAxMDIwMDBEMjUyM0FFN0E0NjQzN0Y2MTdFMUI4QjA1MDQ1Nzg5NjQzCi06MTAxMDMwMDBDNkY5NjFGNzU3QzQzODU4NDRFMzM0NDg1NjYxNUYzMzAyCi06MTAxMDQwMDBBMDgwRTQ1QTg1NzQzRTVCQ0FERjI1QkJBREVGQUUxMkNCCi06MTAxMDUwMDBERjI1NEI0QTA1RkQ4NjQ2M0U0NzMzMUREODFFMDYwMzU1Ci06MTAxMDYwMDA3Q0VDN0ZFMjA4OUFDODhCRjQ3MDdCMTVBRDBBOUYzRjM5Ci06MTAxMDcwMDAwODQ2MjNGNTZCNjE5QUZEMTQ4QTVGQTJGRTQyOThENDVDCi06MTAxMDgwMDA4NDkzQ0YwOEJGM0RBRDg0NEVGQjg1REZDRjY3MkY1OURBCi06MTAxMDkwMDBCQjUxRTBCNDJEMEYxQzdDNTVBQkY5MjVCMkJGREJFRTg0Ci06MTAxMEEwMDA2ODNBMjdFRTUwNzYzRUVEQjBEQkVGNDQ3NDcxMUVFRUU5Ci06MTAxMEIwMDBFQzYyM0I1MTc2M0VDM0VGNUY4QUM0Rjc5MDFEMTJFQkEyCi06MTAxMEMwMDBGRDhENzNGOUREQTA2NjgwRkM1NzJBMDI0NjEyNDlBNDAzCi06MTAxMEQwMDAxRTVEMUJERTgyRjI0RDNFRUEzNzZBRTFGMkM5RTM2MjMxCi06MTAxMEUwMDBFNTkwMDZBRDgwRjgyQUY3NUNBQTFDODBDRkY5RTAzMUM0Ci06MTAxMEYwMDBGRkUxMjE1NjQ2OTNDRkM5M0Y0MDJFREZCQTE0QjlCODVECi06MTAxMTAwMDBFNTAxRjc5NDAxQjQ5Q0RGOEYzRTIwNjUwMkQyNTJFNkUwCi06MTAxMTEwMDA4NzE5NkVDQ0YyMUZGQkM5NjUxNkJGNEEyRDc5QzhBMjhDCi06MTAxMTIwMDBDREM4RDY3M0E1NzQ3RUI5MTBCREIyRDJBQzdDQ0UyNzIzCi06MTAxMTMwMDA5NzcwMUNERjM3NjZFNTIzRjc5OENDM0NGQjlDRjZDMTIzCi06MTAxMTQwMDAxOUM2Qjc0QjI0ODNFNUI1NTQ4RTdCQTg1RjI4NjUyQzYwCi06MTAxMTUwMDBEMDkzRTY3M0JEMTgzNDk2Q0YxNUQwQzM2REI5Nzc3QUE2Ci06MTAxMTYwMDAwQkUzRTE5RDM4MTFFMUQ5MEZGMDk0Q0Q4OUM3NTJDMTRECi06MTAxMTcwMDAzNjdGMzVGOUQ3M0FDNUYwNjBCRkJFQzgxMzRGMjMxRjdECi06MTAxMTgwMDBBRjU0MjA0M0ZCQUI1NDIwNDlGRTFDOTEwMUQzNEYzRDhCCi06MTAxMTkwMDA4QUE3MTU5RTMzMjkzQ0E2M0RGNEREMkU3RjNBMjU2NUFFCi06MTAxMUEwMDBFNzZGQjBGQ0Y2NEY4QUJFQTk0REQ3NjdGOTdDOTJGQzc5Ci06MTAxMUIwMDBENzcyQzEwRjBGRkI5RkM5MEM3RDFGOEU4MUQxQTdDRkE2Ci06MTAxMUMwMDBGNTY3MzgyRTI5NUI3RThBREFDREY0QTI4NUY5OTYyQzU0Ci06MTAxMUQwMDBDNkJFMzRGOEMzRjcwOTY3MTAzRDA1RkJERjhCMjRERTdDCi06MTAxMUUwMDAyMUJEMjE5QzFFMkM2NUJGMzQ1RDQ4QzA3QTJFMkUzMDU3Ci06MTAxMUYwMDAwOTU3NkNCMUU2RDk3MEEzQkUzODhFRUJEQzMyRTg3QkMwCi06MTAxMjAwMDA5REU4NDFDQUU3QzQwNUVFRUY3NTA5NzJCRkI3QkY5QjAxCi06MTAxMjEwMDBENTJCRjdGNzk3NjgwN0IwQjNFMjgyNzA0MEU0OTFENTE5Ci06MTAxMjIwMDAyNUQzNzk3MEZCMkNDRTI0M0IyOUNCRkQ0RUM4NDkyRDBDCi06MTAxMjMwMDA0RjMwRUU1MEM5NUVDQUNFNEZDN0VCQzIyRjM2MUQyRkJFCi06MTAxMjQwMDAyQTJFRDFGMTVBRjhDNTNFQTdCNkMzMTlBRkIyRDQ1QTY3Ci06MTAxMjUwMDAyN0YyNkIyQkQ4N0ZFNUNDQ0ZDRDE2RkYzRTRERTc1NTVGCi06MTAxMjYwMDAzMUYxMTMwMzE1RENGNzM2ODhBQkE0Qjc3Rjg2MTA5QUVCCi06MTAxMjcwMDA3MEZDOTI3RERCOEExOTJGNDA1NDIzRkU0ODk5OEZDQTU3Ci06MTAxMjgwMDAxRjVFN0IxMTdDQjRGOEI0MzlGM0E2NTcyN0JGQjRCMzAzCi06MTAxMjkwMDAwOERFQzg4RERGQUNGN0VGNkNGQzg0ODhEM0ZERkUxQTQ2Ci06MTAxMkEwMDA3RjRFN0M1ODc4RUM4MzVFNzJFQTdCMEFGRkU2ODU1NkI3Ci06MTAxMkIwMDA1QzdBRkY0QkIyMjE1N0QzN0I4MTlCMDMyMENFRUY0MjU4Ci06MTAxMkMwMDBCMjUzNUM3N0UxRTNBN0ZGODdDNjE3QkE3MDM1NTE4NjQyCi06MTAxMkQwMDAxQ0JBOUVDMkZEOEM2NzBCOEI1NTlENzFCNjRCQ0Y2Q0IzCi06MTAxMkUwMDAxQzBEMUYwODFDMUNCNEI4OTc0MzU3MjJCQzZDQzczRDhCCi06MTAxMkYwMDA0QzU3OUEzQkVGNzUxNjNFQzc1NzkxMEYyRjAwQ0ZCQjQ3Ci06MTAxMzAwMDA3MTNBQ0NFMjczRjEzRTE4NTQ4NTlENjA5Qzk5NzFDNDhBCi06MTAxMzEwMDBDMTdBNUUzQkIzRDc2RDdGNTdBMUM2QUI4REZBM0NERjc4Ci06MTAxMzIwMDA1QjcyQThBNzQwMUNGREMyQzIyQTQ4RUZDNkY1MEUwRThDCi06MTAxMzMwMDBFRTg4MTQ2MjdGQUMwMjc0OEMzMDYxQTBGMzhCMTJFMUYyCi06MTAxMzQwMDA4REI2NzJBMTRBQTE2NjgxMEI2OTBBQjBFMzc4RkMwQkU1Ci06MTAxMzUwMDBGREFCM0U1NDg3RUZCNzU3MDUwRDVDMTkyQzdDMEI3MTI0Ci06MTAxMzYwMDAzMkQyQjlBQkNBNkY5OEY4MjAwNUUyN0RCMkQ5MjNFMjM4Ci06MTAxMzcwMDBDOTI0QkM0Qzc4NzQ5QjI1MUZFRkUzMDI2N0IyNkNEMDg0Ci06MTAxMzgwMDAwRUY3QjcwOTdDQjVFREQ4NjdENzkxN0M0NzRBNkYzMTI2Ci06MTAxMzkwMDAzMjM4NkUxQkZBQTczMkMyNjNBMzVFQzY3Mzg4RUIxQzk5Ci06MTAxM0EwMDBCOERGRDc5QzgzMDNGMUZGQkIwRTc5MUQ3REFGMEIyNzAwCi06MTAxM0IwMDAwRUI3MjEwRTQ0RkRCNjcxRTBGRDZEQzA3NjQ2RUJBMjdFCi06MTAxM0MwMDBGM0U0NzJDRDAzQzE3MkY2QTdENzI5NTM5RTdDRjkzNzk3Ci06MTAxM0QwMDA1QjFFMzZGRTdFQTI0MkYwRDlGQkFFRTAwQjA2Q0MzQjk0Ci06MTAxM0UwMDBFOEI5RUY1RDExOEZBMTAzMEYzNjJEQTBEMzVGRjBDRkM5Ci06MTAxM0YwMDBENzg0RkNBMUE3RUY4QUYzMDBCRkU0NzU5QkY4MUZBRDZCCi06MTAxNDAwMDBEQjhEODc3RDJFM0NFQzVFQUYyRDg3NDc2Q0ZFQUM4MjdBCi06MTAxNDEwMDA1NUM0MUZDNEU3OEMxM0VDRkRCOEY3RjEzOEM2RTc1MThCCi06MTAxNDIwMDA1NDhBMjc3QkZEREM2NjdBMzU2RTlGRUEwRDczN0JBMkJBCi06MTAxNDMwMDA1Nzg3MjgwMkIwNjc3QUVCQjg3REI2RDdFMEU3Q0ZGNURCCi06MTAxNDQwMDAzNjczNkJGMzYxMkU3RjQ0NUVGMzJBNkJDRDRBRkQ1NEY1Ci06MTAxNDUwMDA5Q0NFRDEyQkEyMUUzNjg1QjE3QjNDQ0NCN0IzQTg5RkM2Ci06MTAxNDYwMDA2NDdDQzUwNkU1REU3MDdDQ0M5M0E2OTBERThFN0YxNjhDCi06MTAxNDcwMDA1QUZBN0FBREVGQ0M3MTFGOEUxRkE5MDQ2MzBGN0VCRjlECi06MTAxNDgwMDBCMDc5M0JFQkQ5OUEzMzlFQUM5RDAwQzUzOTA1OEUzQ0IzCi06MTAxNDkwMDA0MTA0Q0ExQ0ZENzZGRjk1OEVGMTFEREE1MkM3RkJEMkJFCi06MTAxNEEwMDBDODM0RkJBOUFFRjBCNThFNzFCNjlDRkY4RUUyMkM1QzAxCi06MTAxNEIwMDBERjU4RjRBNDQ2N0NFREQ2QUY3NzhDNTNFRTQxRjkzNzc0Ci06MTAxNEMwMDA1MEZDRjM1MTA3NUQ5MEQ3MTlFNEE3NEIzNzNBRjVCMEJDCi06MTAxNEQwMDBEODI1NTdGNUVFNzNDNzQxQjY5Q0RGNkE3M0M2NDNGMzUwCi06MTAxNEUwMDBDOUQ3QURBRjM2NUY0QjY3RjkyQUUyQ0ExNEM1OTVDOEI0Ci06MTAxNEYwMDBENzUyNERGMEQ1REVFRjg4QjU1RjdCNUVBNTU5RUNFRjk2Ci06MTAxNTAwMDA3MkM3OTdDNTE0NUY1NkU3OEIyRjRGNTk3QzNFNEY3Q0FGCi06MTAxNTEwMDAxOTczQzY5NzZFQkU5RTJGQkU1Q0QwRUVGNDJCMTdDQTExCi06MTAxNTIwMDBDRkNEOEI0NURFQURGNDc5OTlFMzE2MzlENkMzRTc2MEFDCi06MTAxNTMwMDBEOTk0NkM3NDkxNEJCNDcwNTkxMUY5MDAxQ0I3Qjk0OTI2Ci06MTAxNTQwMDA0RDEzQ0UxQzgzRTkzMDlERTcwNzI1RTQyQUVBNUI1OTU5Ci06MTAxNTUwMDBCRDUxNDk3RUU2RTE5MEYxQ0EwNkMyOERERDIyMEZGODQ5Ci06MTAxNTYwMDA3NEU0QjYzMEUxOEVGRUREODdDMzc4NTg0MTRCQkI4NzBCCi06MTAxNTcwMDBGRERENjhFNDM0RTcyRjE0MUQzODdGODFBRDk5Q0U4M0ZCCi06MTAxNTgwMDA0RkVDRjE3NkJFRjFFMDI2MzUyREUxRjg4MzU2QkVGMTQxCi06MTAxNTkwMDA2MEY3NkNCRTkxRUIxQjEzNEQyMkRGRjgyN0VEQkE5NTc3Ci06MTAxNUEwMDBGRjRCODYyOTVFQjk3N0QzQUE0QTNFQUMxNEVDNUY0NzVECi06MTAxNUIwMDBDMzBEQjY5M0ExODA1NjRDNzE3NDZBOTM0N0EzN0RDOTNECi06MTAxNUMwMDAyQkVGRkYzQ0U5QzcwMUE5Njc1RjBEQzU2RjE1MUVDRTY0Ci06MTAxNUQwMDBCQkE2NDJBQjJBQjdFMDM4NzkzM0MyMThFQTZGNUFGNTk2Ci06MTAxNUUwMDAyQUY5RUM4OTBBN0Q1RjBEN0QxRkFBNjFGRUY1QUZCRTY5Ci06MTAxNUYwMDBDRDRGRjM4Qzg0MTY3NDUzN0U2NEE0QzNDMzMyOTIwOTE2Ci06MTAxNjAwMDA2NzE0MzM5REJBNzNDNTNERUUzQTgwNEMxRTk3RTJCNzFFCi06MTAxNjEwMDA3MjRGNDZBNUYzOEFGMDQ3NEVERURGOTZGRjUwNDhFNTRECi06MTAxNjIwMDBGQ0VDRDZGNjg3MEUyNzZCRjgzMUZCQUY4NTc2NUQ2NjRFCi06MTAxNjMwMDA1MzFCRTc5OUNGMTI5RTkwRTZBRkNCRUNCNUYyOURCMzZBCi06MTAxNjQwMDBFNzRFRDhCOTlFM0NGMzMwMkVCMEVCMTJGNEE3REI3OTBECi06MTAxNjUwMDA1QUZDNEJERERDOTlBNjczNzQxQ0UyMzFGMjlGQzlFMEExCi06MTAxNjYwMDBCOUVCMjA0QUYwREM3NTkwRjlFQTFFQkJEQTQ1MUVGNUFECi06MTAxNjcwMDBDQjI0Nzc5MTVGNzRENDRCOTQ5ODU1MTdCMUUyRDc4M0ZDCi06MTAxNjgwMDA5NDBGMjc3RDcwRDU0OUVDNzVGNDU5RjQ1MkIzN0FFNDgwCi06MTAxNjkwMDBBQTlCQUM1NjJEN0EwNkU0Q0I1RkZGQTFGNTkzRkJEQjRBCi06MTAxNkEwMDA0NUJERTY2MkVCMjZERjZEMDdCMTVFMkJERkVEQjVFNEVECi06MTAxNkIwMDA3RjhEM0NCOTgzRjRGMThGOURFRkZFNkVGQkU1Q0Q3NzE2Ci06MTAxNkMwMDBDRkFEMTNBNUQ5NUVFMEQ4OTkzN0Q4QUU5NzJEQjBGMDNECi06MTAxNkQwMDBDQkI5RUI0MDQzMDRGNDUxN0VFMzJCMTA5NzUyRkRDMzhBCi06MTAxNkUwMDBFQTI3QUYxMzc0REQ3NUExODA5NTQ3Rjk1MUZCNTIxMUJDCi06MTAxNkYwMDA2RjkxM0YyMUUxMkFDNjYyRTI2QjUwRjk3NjUyQzM3REI5Ci06MTAxNzAwMDAxNDA0QzcyMDg0QURBRjdDNEI5MkRBRDZDNTNBRDc4Nzk0Ci06MTAxNzEwMDBDNjk3NzlGOEJDMUEyRjRBMUNFRUE3RjUyRjBCRTZCNTMxCi06MTAxNzIwMDA4QjU3MkRGRjM3NjhENTZGNDg4MTNENjQ2RjkyNkQxQ0Q0Ci06MTAxNzMwMDA5MEYwQTA5QzI2NDBDOEY5QURGNjEwOEY1N0I0RDFFNkMyCi06MTAxNzQwMDAzQjUxNkY0RTkxM0U1NEYwN0VGMkQ2N0Y0RUI3OEJGQUVFCi06MTAxNzUwMDA0RjBFRkRBRjkzOUVBNjJDRTI0NDY3MEJEMkY5MEY0QkMwCi06MTAxNzYwMDAxRjgxMEU4RTA1MTRFQzg4RjlGQ0ZBNjgzM0UxODJERkU0Ci06MTAxNzcwMDBCNTZCRTJCREIyQzIyMDdCMTgwRkU1OUZFRjc3RDY3RTM2Ci06MTAxNzgwMDA4MDUyMzFBQkIyRjg2OEUxNDY0MTA3RkNFMkZCODNEMkZDCi06MTAxNzkwMDA5OTBEMjc1N0IyNUNEOTlFNjgxREY0REU1REZGNzJEM0E4Ci06MTAxN0EwMDAwRkQ0MzlFMzFCQjVDQTM5RkU4M0Q5N0QzOEUzQTIwM0QwCi06MTAxN0IwMDBGM0Q0QzcxNjQ1ODVCRUI2MkUxNjdBNDZGQUIxMjc4RkUyCi06MTAxN0MwMDA3RUI4RUQ1REE1QkMyN0M1NTNEMTkwMzU5RkYwM0I0MTU4Ci06MTAxN0QwMDA2NUFBOERFMjlENjAzRDE4NUM1MzU0OEVGMzdFRTM0RjA1Ci06MTAxN0UwMDBENDFDOUI1RTQ5N0VCRUQ4QTAzODQ4RjFBM0FCNkNDQzFDCi06MTAxN0YwMDBDNjg5RUU3RDlGMkZDRTUzMTQ0ODdBMUJFN0M2N0I0OERGCi06MTAxODAwMDBENzJDNjkxNEU3NEMzMjg3REU1NTUxQTEyNzcyNkUzQzA0Ci06MTAxODEwMDA1ODRERTE4ODdFMzNEN0YxQTgwRTQ4RkQ1REJFMERGOTI1Ci06MTAxODIwMDBDRUU5REE3NkVGQUM5RkNDNTdENzM5MTRDNzM4ODI4MjJECi06MTAxODMwMDBENDQ3RjZFRkRCOEFGRDc3MzQ4RkU2RTMzMTdBREVCQTAwCi06MTAxODQwMDA4RTY2RjU2N0VCM0FGMTBCQUJFQjhDNDY0QkJCNkIyRTIwCi06MTAxODUwMDBBNkFFMzMwRkRERDlGMzc4NkU1RDI3MUFDNTdEOEUwNUYwCi06MTAxODYwMDA0NTdENjVCNkFFNzM0QkY5MDVFNTczQzAzQTk3NEIyREQwCi06MTAxODcwMDBCRjVDRDQ2REM1MTEzQjI1OEUyMzlFNkFGQUVERjA3MkQ0Ci06MTAxODgwMDBEMkIzMjYyRkVCMDFFQzlGODA1QzNCNTlCNzUxRkY1QTM2Ci06MTAxODkwMDAxOTlEMzNBRkZBQTA1NkY4MzU5M0U4RDk3MUIxQ0QzRjExCi06MTAxOEEwMDBENUEyREZGNkQwRjMwQThEMUZBRkY0QUM2MjdBOTBGMUM3Ci06MTAxOEIwMDA3OUI4RDg5RDU0QUQ1NkE2NzZCOTlBOTE0Qjg4NkUyOUMxCi06MTAxOEMwMDA1ODc1RjQ4QzQ0Q0YyM0M4QUNEQ0Y4NjA2NEU2QzVGNkU4Ci06MTAxOEQwMDAxMkNBOTMwNEMxMjAxNzM0MTJEMTc2OTdEMDNGQTgwQUI4Ci06MTAxOEUwMDA0NDc4QTc1QTRGOTNCRjZERjcxNzNBRkNGRjQ4QjcyQUMxCi06MTAxOEYwMDBGQzZCQURCODJGMzM3RTVDRkZEQTM2MUMzRkIwMzNDMEQzCi06MTAxOTAwMDBCOEU5NDA5NTQ3RDg1NzUyRTI3QTcyODdFNjhDN0JDNjkxCi06MTAxOTEwMDAyNzk3MDgzQ0I2REY2QkQwM0Q5MUEzOTM2MkZDRDZDOEY1Ci06MTAxOTIwMDBBQUI0Q0NCOERCMTkxNzc1RUJDRUI4Njg2QjY1RTMyQjlFCi06MTAxOTMwMDA4NDE3QTFERkNCRjk3OENEQzJCNTM3RDUzOUUzQTRBMjlFCi06MTAxOTQwMDBFQTlFNjcwOUE3NkNFRTE3Nzg3ODZGQjg3NEMxNTZGNEYxCi06MTAxOTUwMDA3RkJGOEFFQThFMzg3MTRCRkY1RDVDMzdFQTU3ODFFQkI3Ci06MTAxOTYwMDBBOTIzOUI1NEI2OEYxMUVGRUI4N0I2MzI2RTJDNjAzRUU1Ci06MTAxOTcwMDA0RTZDNTIyQjEzMzlGNjUyRDZFMUIzRUU0NTA4RkM4MTdBCi06MTAxOTgwMDBGMDMyMzE5OUU3N0Q1OTg3RjAzQkE4RDg3QzhFREJGQTlECi06MTAxOTkwMDBGMkE3OUYxMTdDMkVBRTgyQjQ0RTM4QUU3QjQ3ODZFMjEyCi06MTAxOUEwMDBDQUYxMkFEQzEzQkVFRjBGRDc3NDFGQTdGOTVGOTY4MTI3Ci06MTAxOUIwMDBGNkU5RDZDM0VBOEU1QUI2RDNEOUYzQjREOUUzRTA5M0E1Ci06MTAxOUMwMDBENzE3RUYyMUZBNzAxM0U4RTREN0EyMzFFQzUzMUU2MDY5Ci06MTAxOUQwMDBBMzBBOTQxRkYwODVGRjhBRjc1QjhBRkQwMEY2RkRCMTJDCi06MTAxOUUwMDBEMUE0ODI3RDdGNERFMjdBQzJDNTRGRUZCQTdEMzA1MkRECi06MTAxOUYwMDA0RUU3OURCMDZGREZDNkVERjE0RkQwRjg5NTVFMDhEMDkxCi06MTAxQTAwMDBGQTQwOTdDMkI0QkVBNEI4Q0ZFMEI2ODdCREE5MUY0NEMwCi06MTAxQTEwMDA0OTRFN0IwRDg5NDVCNEI5N0JGREREN0M2RkE5QkM4MDQ3Ci06MTAxQTIwMDA3MUQzQTgzN0JFODVGREQxQUQ3RTJEQzk2N0UwMzRDNzFGCi06MTAxQTMwMDAxMURFQUZGODgwRjQ2RTYyRDc2RjJBMDg3RkZGMzgyQTc0Ci06MTAxQTQwMDBFQTlBMDFERDE5NUZGQjYxOTRDRkVERDVFNkQ0NDZGQTQxCi06MTAxQTUwMDA2RTc1QjM0QTE1MEY3OEFBRTUzNENCNkRBMkM5NjdGODQ1Ci06MTAxQTYwMDA3MDFEMTMyRDEyRjNGOUJEMjY2RjlBRTY3OTUyOUQ5MkRGCi06MTAxQTcwMDA2OURFMjdERkMzQjlBQkYzRDk3NzdFQkJCMkVEQzgzREQyCi06MTAxQTgwMDA3RUE0NzlCRDlGRjQ2MjJGNENERDQyRkM0OUNFODgzQzk4Ci06MTAxQTkwMDA5NTdCNUNCQzQzOUM1NzdCNTNCN0Q2Mjk5Q0NGNTJCOUVFCi06MTAxQUEwMDBERUFFOUMzMUNDMTJBNDFFOUE4OUZGM0RFNTVFOTM1MUI3Ci06MTAxQUIwMDA0NUM0NDk5NTlFQTQ4NEY0MDZCQUM1QkQ4QzgxQTJDNEQwCi06MTAxQUMwMDAyMEU5RjMwMEVBM0RDNzQ5RTVFMjNFRDI3ODY1QjkzMTQ1Ci06MTAxQUQwMDA5NDMzREY3OENCNkQ3NUU0Q0Y1RTY4MEEzMEJFRUYzQkEwCi06MTAxQUUwMDBGMTE3NzcxMkJFNkY5M0RGRkFFRTIzMTQ1NzU1QTkyQzI2Ci06MTAxQUYwMDBDRjAxNkZDRkFCMTQwNzI1OUIwMkJDREUxMzhCNTRGMEQ0Ci06MTAxQjAwMDA5MzNGMjhCRkYzNDE4QUIzRTFFODQ2QzhENUQ3ODk5ODA3Ci06MTAxQjEwMDBCMEQzODkyQTYxRjdEMjIzMUIzOTBFMTg5NzY0RTZCMzM0Ci06MTAxQjIwMDA1OTcxNDQyMjNDRTY4QkQ5NzkyNzkxNjc4QTU4RUU2QzJCCi06MTAxQjMwMDA2MkUzNzczODBGNzU0NUI3QzhBMzQ2NjI1NkJFNDkwRUIzCi06MTAxQjQwMDAyNjU5MkY2RjA4M0M0OEY2NkYyQTVFNDc3Q0JDRTY4QzBFCi06MTAxQjUwMDAzMzVFQkVDMjE1MkZCQkYzNTFGRjFCQjVGMjExNTZERTJCCi06MTAxQjYwMDBDOUQ2Q0I2MjZCQ0M0NEIzRTVBNzU3RkFEMjQyMEY3QjAwCi06MTAxQjcwMDAyQUI1RkFCOUY2RkRDRjE2N0U5RUVBRjVGMzNEQjIxNzA3Ci06MTAxQjgwMDA3QjM1RUUxNzlCNkZFRjJFNDMzQTJGRjc4NkY5RjlDNzk3Ci06MTAxQjkwMDA1NjFGOTY3MkJGMUI1OTc5QUI1RjY3N0YzMjFEMjZCQUZECi06MTAxQkEwMDA2RTNGRTJENjhCQTE2ODgxRTMzQ0IxRDc1OUQ0RDIyNkVGCi06MTAxQkIwMDBFRURGOUQ2MThGMEM2QjgyRDNFRDdDMzZDMjU0MzAxNzAzCi06MTAxQkMwMDBFRjY3N0FDNTNEQjdBN0FDNzU5RUEwNzVGQTI4NEYyNjdBCi06MTAxQkQwMDBENkY3NkNBRkNFRUQ3M0JENzVEQzZFRUEwMDUxMEZCMDc5Ci06MTAxQkUwMDBGREMzNTVFODFGOTAwRkQxMkFEMTI3N0Y0MEYyMkYyRDNBCi06MTAxQkYwMDBCRjkzRjM2NEJFQjBBMjkxQkRGQkFCNDYzMzUyOEU3RjYwCi06MTAxQzAwMDA5ODI4RUFGOUM1NURFNEY3MkI4MkFDOEZFRTdEQURFOTRCCi06MTAxQzEwMDBGMEU0REREN0U2OTYxREVDNzdDRUUyM0NDNDdGRjQzM0VBCi06MTAxQzIwMDA3N0IzMUY0MkJGQzBGMzZFNTRFRkUwNzU5OEU4OTdEOEMyCi06MTAxQzMwMDAyRkY0N0NFRDc2RjYwQjVFMjAzRDc3RkI4MUQyQTRCMENECi06MTAxQzQwMDBFRjg0MkVGMjc3RjYzREExNTlCRjgwRjNBNDcxOUVBN0QxCi06MTAxQzUwMDBEMEFGNTM3RjAwRkQwMENEMzNEMEYyRkE5RkQzQkNFRjVECi06MTAxQzYwMDBCRDVGQzBGN0EyMjYzNkJEQzI3RUUxODVCM0U4QjMyRkMzCi06MTAxQzcwMDBBMzVGQjBFREYwQjUxMzkxMjNCOUYxN0M1NkNFRUI2RkI1Ci06MTAxQzgwMDAzRjI2RjhBMTgxRTBFQjg2Nzg5RTM4RjE2MkU1MENFNjBDCi06MTAxQzkwMDA4NUUxOThCNDMyN0Q4N0E4M0JBQUNDODc3OUVCOEU0OTQxCi06MTAxQ0EwMDA4RjQxNjk4MUJFNDkyNTY2RDUxRDgxRUE4RTc2RkQzMTU5Ci06MTAxQ0IwMDBBN0VFNThFMEFDM0JBQUU5MTRFMzlCQjQ1NTc3QkM2REEyCi06MTAxQ0MwMDBBREE4M0JBQTA1RDNDMUVDM0FFQzdBNjMzRjNEQUFDQzYwCi06MTAxQ0QwMDBENkU3RUZFQzQ4RUNFQTY4Q0FENjE5NzU0OUQ0QzE1RjdCCi06MTAxQ0UwMDA4QTk4NUZBNkU3NTA1RUNBRTdCRkJCNEU2OUQ3MjMxMTRCCi06MTAxQ0YwMDBERTQ5ODk5Q0ZBNjYwMzNFRjc5NzY2RUI1RkVFN0FBNkFCCi06MTAxRDAwMDA3RDJGQTM0MTlEM0UzMjhDN0NFOUJCQzNDRkY4QzE1RUUxCi06MTAxRDEwMDA1RkRGQTM3RkYyNkFBMjNDN0IxRkMwQUU3N0RBRjU0QzhGCi06MTAxRDIwMDBCQkVFODlFQjFFQ0I1RDM3M0MwRUVDNzdFMDMxRkY2MUZCCi06MTAxRDMwMDAzQURGRENFQkZENUUyNDcxN0Y0NzQ1OUU3NTVGNjA3RDc5Ci06MTAxRDQwMDA3MTFENThGNDExNzc5MTNEQkY2NkYxRDExRUY3OTA2NTcyCi06MTAxRDUwMDA4RkNCNTU5MURGODY2Mjk1RTM5REI2ODc4MjIwMTNDRUE3Ci06MTAxRDYwMDAyRTUyOEY5MDVENkM4MUU5MEVFMjZGNUY0OEUwQkNENDJCCi06MTAxRDcwMDAwMTJGRkJDOUEzMUQzQUNCQUY0MjM1RjkzRTQ0QzU5N0FECi06MTAxRDgwMDAwM0M2NkUyNDkzM0FBRTE1NTNGRUE5M0I2QTFFRURFMERFCi06MTAxRDkwMDA3NThDREVCMjlFRDY4MUI4OURGQ0REQUY2QkJGNUFDRThFCi06MTAxREEwMDBGNTdFQkFGNzU0NDJGMTlGQjE5OEYyMjBDRjc3RTRCRkE1Ci06MTAxREIwMDBBRkQ0QkFGOENDN0E5RUI3QzgwMzE0OUZBNTAyQzZCM0I1Ci06MTAxREMwMDA3Q0FGRjgwOTg1RTk3NTIzMDlCMzkxRUYyRjQ1RDU1MjBBCi06MTAxREQwMDBBMjIzRUVBN0Y2MDU0RkIyQkM1QTZCN0QyQjM4QUY1NzQ2Ci06MTAxREUwMDA5NDNGMEU3Q0E2NDNDNEFENkI5MTk2OEE3NDNFRDM5NjA1Ci06MTAxREYwMDBGODAxQUQ5QjcyQTU2MUQ2NjMxMURGM0Q0RjdFNTJGOEFECi06MTAxRTAwMDBBRjdCM0NBQkIyNzlCMDEyMzlGMTNDOEQ4N0EzOTI0MkUzCi06MTAxRTEwMDBFN0EzQ0ZEMjFCM0I0RTdDQkJDRDdDODFFNDhFRjIzMDVFCi06MTAxRTIwMDA2OTdFRkIxRTkwM0RGRjRCOTYxQzkyMURFNjhCMzRFRUE3Ci06MTAxRTMwMDA3NTZCOUUwNjJEMTkyMTNCNkM0OEEwM0U0ODZDM0ZBRTQ5Ci06MTAxRTQwMDAzQUJDRDAwQkI3QkVEQUZBMzY1Qjg3QjdGNDUwRDI0NDRGCi06MTAxRTUwMDBCRDE2RjVFQTc1NUVFRjkzRkE3MThGNDRGNUY2QzRFMUFECi06MTAxRTYwMDA2MUZBRjYxMkVCREQ1N0I2OUI2RkQyQkE0QkRBRTJGRjlFCi06MTAxRTcwMDA0RTc0N0ZCREVCNzZCRTE3N0NBMUY3Mzg1QTE3Rjc4NEY2Ci06MTAxRTgwMDBBOThFM0YxMDEwQjhGOUUxODhFMUYwNzc4QjNBODU3Qzk0Ci06MTAxRTkwMDAxNjc1MEFCQzc0MkRFQUNDMTRERjJGMzVGOERFMzdDMDc2Ci06MTAxRUEwMDBERDhDQTM2REZGMzREQTlCRjhGRUE5REFFQ0Y3QTk1RUFFCi06MTAxRUIwMDA5OEE0N0FEMDdDRUJGMEVFREJDMTc5RERCRUFBMzYzRjg4Ci06MTAxRUMwMDBGOTFGRjQ2RjI1RDQxRkE4MzJDM0I5RUI0ODE1MDkzRDlCCi06MTAxRUQwMDA0RjJFMTI3OTBCQ0FBNzI1NzNFRTkzOTc3NkNBQkM5RjMzCi06MTAxRUUwMDBGNjJBQzg5MEVFRjg4MkEyRUVFNjQzQzNENUYxRkNGMUUzCi06MTAxRUYwMDA5OUNEN0NCRjE4OUY0RjUyOEFFMThBNEU1REM0RTVFNUJCCi06MTAxRjAwMDAwNjk4MTQ2RjU2QzU4MUVDREJBNzY1QkZBNzNBNkE3QkJDCi06MTAxRjEwMDA1NTBGREZCNzlDOEY4RTFDQjZCRjRGRjBGNzM3NzY2QTMwCi06MTAxRjIwMDA0QzU3MkRGNzM4RjIwMEU3RTM5QjlCMkZGREM0QjdEQTNGCi06MTAxRjMwMDBGOUY5QTY1RTMwREY4NEREQjlGOUI1Q0FFMkQ3RDNBMURECi06MTAxRjQwMDAyRkYyRkVFMDgzNzZCNjMzOUY4NkZCQzQ3Njc1QTdGMDRBCi06MTAxRjUwMDAyRjcyRDA4NDQ0MTFGOUE4MzgyMjQ4Q0FCM0Y3MDBENUFCCi06MTAxRjYwMDBBMTZEM0VDQjlBRTBCM0FDRjVGMDc3QkUyQTAzMTJENzUxCi06MTAxRjcwMDAxMTVGMTJDQzE3MzcxRkQwNEYwMEY5ODkxRjNEN0FBODg3Ci06MTAxRjgwMDA5Q0YwNjkyQkY2QzNDMjdGODAwRkRCMDczQTg0NUM2QzQwCi06MTAxRjkwMDAzQjVEMDczRjBEOEFGQ0I3RjNCQzcwRkI1M0JCN0REODlDCi06MTAxRkEwMDBDQTNGQkI5RjRCNUQwMUUxM0Y3NDcwRjBCREM4RkFGREI1Ci06MTAxRkIwMDBDMjkxQzE0NkM2MDc3ODdFMjZFOTVFNEM2NzY1NkQwMTExCi06MTAxRkMwMDBGNTJGNzcxREQxNUQzRjc0RDcwOURERjVDMUFDREU5OEUzCi06MTAxRkQwMDA3RTVBRTczQkRBQzlFNEM3RjNFODhCREQwRTVCRjZENjQxCi06MTAxRkUwMDBERkVCQ0Y2Qjc3QzM2OEVGMjRCRjgxMTYzMzQ5NzVBMzRFCi06MTAxRkYwMDBCREExRTkzMEVCQ0RGMTM3MTkxNzJCQ0ZDQjA2RTE0QjYzCi06MTAyMDAwMDA0NTExNzJFRTVDMzRDRDcyRUM2QTM2ODFFQTREQzNCRDg3Ci06MTAyMDEwMDAxQkJFOUQ0QkY3ODFCNkM0NTczQTUxNEYwQUI1NDk5MzQxCi06MTAyMDIwMDBFODA0MjE5M0E0RjM2NzZEOTlEOTkzMEYzNzBENTg3RTc3Ci06MTAyMDMwMDBFNEVEQjZGODZFRkE4RUFFQUQ5M0ZDNEY0NUNDM0RENEQwCi06MTAyMDQwMDBCRjUwQkYzNTlGM0QyOTM2RUYyRURBOUU0RTBBN0I2QTgwCi06MTAyMDUwMDBERUMxRjYzNDUyRDVDMzM4NkJFNEE3MzIyMUE5MkM4RUU5Ci06MTAyMDYwMDBCNEVDNjlBNEU1MzREQkJCNkQ1NzY5REJGRjM0MEJCQjEzCi06MTAyMDcwMDBBMDNDMDI5RERGQzU1NTI2RkI4RDZGNUFGNkE0QTA5RDlFCi06MTAyMDgwMDA5MDNERjkyQzdCMkFENkIyRTMyOTNGREU0RTdDQzZFNzkxCi06MTAyMDkwMDA0QUQ1MzQ3RjU3REM2Q0Q5MUZEOTUzOTBFRTBGMDNFMzM4Ci06MTAyMEEwMDA4MDAxQjQzQkNBOEJCOEVEQUJCNTQ2OUM5QjhGQjcyNTdFCi06MTAyMEIwMDAxRUVFMjQ3Q0IxNjgzREU3RTUwN0FBRkVCMzhDRjE4QkU4Ci06MTAyMEMwMDBBNUZGNTlCQ0RCQzhFN0Y5RDk0MThGNDFGNkQwNDAwMEU0Ci06MTAyMEQwMDBCQTMxNkIwN0Y2QkU1N0NGQzg5MDQxRDFBQzk5OTFCOEQxCi06MTAyMEUwMDBCRDcxQTY5MERCRDY5OTAwQjdFNjRDMTlCNzkxOTkxMDRGCi06MTAyMEYwMDBCNzZEMzM1NzcyREIzRTUzQzk2RDc0MDZFREUwN0FCNEE5Ci06MTAyMTAwMDA4Nzk5NkE2RTNCNjdBRUU1QjY2QjY2MTlCN0IxOTlFQjE2Ci06MTAyMTEwMDA3OTVDRjdDQzBBNkVEN0NFN0M5NERCOUI2NjVBQzQzQ0M0Ci06MTAyMTIwMDA3NTYyNUY3OUVDODFDQTYwOTdDMTFFOEMyNDE0OTExRDgxCi06MTAyMTMwMDA3Q0U2NTVGNkVGOUFDQTc3OTQ1MkExNTU1QzI3RjIyOUFFCi06MTAyMTQwMDBEMzZDMEY0NzlBODVCRkVGMEEwQTM5QjlFREUxRURCNkI2Ci06MTAyMTUwMDBDNEFGRjJEOUMzMkNCRTU1NDAyM0ZFQUI2MEZEQjlGMDJECi06MTAyMTYwMDAwM0UyOUZERkQwRjczNkVFNTVDMzI2RUIxOUUyOTNEMzk3Ci06MTAyMTcwMDAyNENGNEJDNTA5QjMzODczQjFDQTc4RDRDNjk5MjM4QjIxCi06MTAyMTgwMDAxMDY3NTY2NzcxRTY0MDhCODhDQjUyMDc3QzFDQkY2RDg5Ci06MTAyMTkwMDA5NUM0RkRCMjJCREIxM0ZGQzVGNjA5MjI0Rjk0QjhDNUQ5Ci06MTAyMUEwMDBBRjExNkU0RTg1M0FDMzQxQ0FFQkVEOTU4MUYyMDU4OEI5Ci06MTAyMUIwMDA0MzNFRTA3NTJBNzE3MTlGRjUwMkVERjk1NDQ0Rjg3REI0Ci06MTAyMUMwMDA3QjdDMDM5Q0Y0RjQ1QzA0OEVGOTM1RkRCMzY1N0VCRjIzCi06MTAyMUQwMDA1MDdBQTlFN0FDQjc1REY4MDU0REY4ODU1NDU1Q0YyMDg2Ci06MTAyMUUwMDBEN0E1NUQ3RUMxM0U2NzkxMUYwRUJGQjBCNENCRjIwQjg5Ci06MTAyMUYwMDA5NjlEOTc1Njg5RjNCMjk0RkMwMkYyNjc1OTk3RUQxN0IyCi06MTAyMjAwMDA5Q0U3QUM2MkUzOTA5ODhENDMyQ0JGMTAxM0RGMjE2RUU2Ci06MTAyMjEwMDA3NzlDQjMyODZFM0ZFNEUwNjJENEEzRTU1RDc5NzAwODUzCi06MTAyMjIwMDA5RkU3MzlFNzVDNUY0RDZEODQ3RTRCMTAzQTAzMTE1Mjk2Ci06MTAyMjMwMDBDRkUyMTk3REFEOTFFN0RDNDk2OThENkMwN0M3OTU3NkQyCi06MTAyMjQwMDBDOENEQUY1Q0I0OUQ4NUVDNzNDN0U0NzNDNzNEQ0VCNjEzCi06MTAyMjUwMDBCNzgxRTNERDYyOUZENjM5NzQxQ0Y3NkZFNkQ4NUI5N0QwCi06MTAyMjYwMDAyNkNFMjMzQzdGNkVBMjdEQkFFREFENzVCMTk5ODhFNzhECi06MTAyMjcwMDA1OUU3MjdCQjA0REVGRkYxMUEwQkY3MjJBRTM0ODI4QzNDCi06MTAyMjgwMDBFRkYzRTI4NjRGOTJGQzlBQzRFRjM0MUU0M0ZGRDMxMTYyCi06MTAyMjkwMDA0QkE2MTQ5REVERkM5MzM0RUZFQUU4OTQ0Qzc5QTAxQjE3Ci06MTAyMkEwMDA5QjQ3NUZBNjkyMDhEQUU5QTdCQTlBMkVERDRFOUJEQjIwCi06MTAyMkIwMDBBQzdBREZDRTMyNzFEOUQ5NkFDRkE3RkYzNjJFQjJFRDE0Ci06MTAyMkMwMDBDMDNERUVFMTZBNzM0MzNFN0UzQzYzRjFBMzZGRDBEMzIxCi06MTAyMkQwMDA0RDE3RkU2Q0JEMzhBRTJDNjVGQzkzQzdERjlBQzY2NTAyCi06MTAyMkUwMDBGMUI3MTc4NjNGOEVFMzM5NDg3MjNGMDdGRTE4Q0UyN0I1Ci06MTAyMkYwMDBGRkY5RjBDNzc4RDcyQ0ZFMTgyMzM5QjVENjBCRkNGMUJGCi06MTAyMzAwMDA0QzE3OUMzM0JFQjk2NDVDMTEzOUM5N0NCQjU0NUNGMTc5Ci06MTAyMzEwMDA1MEQ3Qjk3MUM1QjdCQjg0REY1NEI0NjlGNjFGQzU5N0YwCi06MTAyMzIwMDA4ODJCREM3RTAyRjFDMzNGMzE3RjBDNzFFRURBQkYzN0MwCi06MTAyMzMwMDBFMTBCOTQzOUU3MTdGQTk5RUZEMzM4QzIwRDc0NzlFQ0IxCi06MTAyMzQwMDA0OEIwMkQyOUIxMURDNDlGQTBFN0EzRTYxMkQ2QTNDQkE4Ci06MTAyMzUwMDA2NTBGODgxMzdGRDg5NUQzM0Y5RjVENUNGMEI4Qzk0RDVBCi06MTAyMzYwMDA5QzA3QjRFQjk5QkYwRjE0Mzc1MDdFNjRBNzVGQjQ1RjJFCi06MTAyMzcwMDAyQTI4M0U0MkVENThBRkM4NDNFRkI3RjI3RTYzNUVFMEQ1Ci06MTAyMzgwMDBGQTQxQkY1NDYwMUM5MUU4QkJDNTY5OTE2RkVGNTk0RThCCi06MTAyMzkwMDA3OUNGREY3NkQ5QkY5N0VDQjk4MTdGNzcwMzdGRURBODNFCi06MTAyM0EwMDA5QkNFQkYyRTcxQ0Y5NzQ4N0RDOEY3QzFBQjM0Q0VBMzZCCi06MTAyM0IwMDA1QjdDQTE3NDEwOUREMzQzQ0JGQzhDMDM4NzNBOEUxRUFCCi06MTAyM0MwMDBCQTkzRjIzMjFEMjIwRjg2MEE1MUZENzEzQTdGMTFENjVGCi06MTAyM0QwMDAzNEU3OUMwQjMyMjhBNzI5M0YzRjQ4NzdEQjE5NzQ2QzAwCi06MTAyM0UwMDAxMEY3QTAzNUYxQkUzNDhBRjE3QjZFRERDRUI4REJEMUJCCi06MTAyM0YwMDAwNzJCNUY2QUZGM0VCMDcwQ0Q3QURCNEU5ODhFNkQyNzVCCi06MTAyNDAwMDA4NTQ1OTM5QTk2RTM2RjA2N0I5REJGRkY3NkI3NzJFRDg1Ci06MTAyNDEwMDA3RDcxQkE5QjNDNUFFRkUxRkFDNUJFMUEyNTQwRjU5NDhFCi06MTAyNDIwMDA3RDc1MjJDQjNFNUNFMzg5RTVBQjhGNUYxQjkzMUM3OTA2Ci06MTAyNDMwMDA2REJCQkU1RDEwMTFFQjlBNkZCRTAxRDc3QTdDN0FEQzYyCi06MTAyNDQwMDAyNDNEMURENkQzNzFGRTFENzI1REI5OTRDQ0M5M0I3QjcyCi06MTAyNDUwMDBBRDc5ODYyNDIzRDM4QUNDMUMyQTEyRTc4NUFGMkEwOUJBCi06MTAyNDYwMDAxRUMyMDNBMUVERDcxMzhGRkQ1NTNENzAzQTQ4RjczN0QzCi06MTAyNDcwMDA5MkYwMDZCNkExNTIzNTkxQ0VFMzg3OTZDNzg0MUYxQTEzCi06MTAyNDgwMDBGMjRFQzY1ODhFRDc3OTM4REY4Qjk4MkE2RjlFNkM2MUQyCi06MTAyNDkwMDA0Q0Y4RTlFMTlBMjNCQ0JFMjRGMjg1RUE1NUVFNzEwMUJECi06MTAyNEEwMDA2QjVDODEzQUNBRjU4RTdEQjVERkQ0Njk1RkZCRTgwN0M2Ci06MTAyNEIwMDAzNzU3QTA3Q0JCRkZGQkMxREQ0MUQyREZCQjM5NEYzM0I3Ci06MTAyNEMwMDA0NkY5MUFGNEE3MDVENzFDOEJCNTIxRERGRDM3MkExQTZBCi06MTAyNEQwMDBFREEzNDNBRURBNERFQjFBOEQ4MkMxNzUwMDk3NUU5NDgxCi06MTAyNEUwMDBBQzUxMDI1QzJGMzUzRDdDMDdENEFEMjcwNUM1NTQxOThFCi06MTAyNEYwMDAyMTNEOUNGMjBCRkQxMDdBMTZCNEY0RTY4MDIxRUEzRUYxCi06MTAyNTAwMDAwN0EyQTI3RTY1Q0IyRkU3N0Q4MEVBRDI2N0EzMEFDNzI4Ci06MTAyNTEwMDAyNTc2RkQ4QTZBM0RGOTcwREM3RUNCMkVGQjJEQkI0NDBGCi06MTAyNTIwMDA5Q0NBNzU4N0Q5Rjc4QjMzN0NFRUVDNkZDOTg0RTk5QzI0Ci06MTAyNTMwMDAyOUQyRkM0NjhDRTgxRTc1QUU2QjZGRDM5NDAzOTcxQ0IyCi06MTAyNTQwMDA1OEYxQTJERkJBOENFRjVBOUZEMDJGRTVBOTVGQjAzRkI4Ci06MTAyNTUwMDAyRDUyQTZGOEJDMkE1QTdEOEFGREU5N0RENjdBQkE5QTEwCi06MTAyNTYwMDA4MUY3NTlCQ0QyRjJEQjcxMzMyMkU4RkRBNUMzMEY0OEQ1Ci06MTAyNTcwMDBEN0JDNkE3QUU5NUNCODU1REM0OUYwMzY4QkJBNUQ4MTI0Ci06MTAyNTgwMDAwQTQ2MDZGOTdDQTAyMkM4Rjc5QUNBNTY1QTc1QkE3NTQ3Ci06MTAyNTkwMDBFMjVFODU3RDJGQkMyMkVFQkMxNzE2ODI5Q0RGMDk1NEJCCi06MTAyNUEwMDA4QjdCNTlCOTdEOTAzNzlFRjNGRURCQ0U1RjFFN0VFRUFFCi06MTAyNUIwMDA0NDBFQkQyRkM1OUNGN0M3Q0ZGN0ZERUY3QkQzQ0Y5RDUyCi06MTAyNUMwMDA0MEZEMUEzNUNFNkQ4N0I2QkNFRUVENkQ2NjdFRDlGQTRDCi06MTAyNUQwMDA2OEVCNjc4OEI2RDgzOEZGRjc2M0ExNzhERUZBQ0MzMUFDCi06MTAyNUUwMDBDQjBFQ0VFN0NGQ0E3Q0YxMUVDMjQ1RjdBRDg5M0JGMERBCi06MTAyNUYwMDBEMTAzOTY3RDNFMTAxM0Y5NEY3NUYxMTlDRUFCMURCNDgyCi06MTAyNjAwMDBFRTVGMUQwQ0MwODZFRkU0OTkzNzEzNTM3OTdDNTZGRkJCCi06MTAyNjEwMDA5RDM4QzJENjlGQjk3QzM4MEY4RTU4MTNCNUUyMTA0RjQzCi06MTAyNjIwMDA4MENFRjE1MUEzRUQ1OUFBNDdCRUFCQTkzQUU0RjgwMTE3Ci06MTAyNjMwMDA3NzlFRERDNjExMDVERDc2QkVFRjNEQzY1MTI1QzEyOTY5Ci06MTAyNjQwMDBBMUI3MkI5RDcxODcxQjA3MEMyQkU5MEQ2NEU3QzM3NUEwCi06MTAyNjUwMDBBQUVEOUZEODhGNUNGRDZDRTFENzkzOEM5MzkyNTJFRURDCi06MTAyNjYwMDBCOUI5M0Y3MzA3RDMwREI5RjJFQzUwRUVGQ0REQ0FGRUU5Ci06MTAyNjcwMDAxOEYwN0E0MkZBOTkyOUJBNjcxRThBMjlFMkRFRDZBOEFBCi06MTAyNjgwMDAwOUI5Rjc2RUM2M0NCRjlDMzk2NUZERkIwMzFCNzdCMEVCCi06MTAyNjkwMDAzRUVGOUZFMkRGRDNDMDE3MjA3N0ZFQkQxRkRCQ0NCRjJDCi06MTAyNkEwMDAyRjM5OUZEQzY3RkQ3QTU4NzVFNERGMkVENjJFRkUyNTg0Ci06MTAyNkIwMDA2NkQ1QjcwMzEwMjBCQjM4MEJGNzcwREQxRDQ2NjM4RTVGCi06MTAyNkMwMDBGMzg4MkIxMDBCRjhDODE2N0ZCODRENjU5NTc1NzQ0OUMzCi06MTAyNkQwMDA1OTdCODE3NjUxRDczRjlCOThGNThCMEE3RDY3NTg5RjMwCi06MTAyNkUwMDA1NUQyQUQwQThBQzcyMUMzQkY1M0I0RUY5NTlFODU1RjBCCi06MTAyNkYwMDBGMkJDQzlBNzI0NjkxNjY3NUQ4OUUxM0VGREZFNzEyOTE4Ci06MTAyNzAwMDBBOTlDRTZBMUQ2QkRGRTI1NjBGMEYzMUE4ODczN0IzNTNGCi06MTAyNzEwMDBGNDcwNUIwN0EzREM1RTAzOTNEQ0Q2QzMxNEI3MEQ3MEMzCi06MTAyNzIwMDA4NkRCMTVBMENCMzRDOUY1NjBDQUMwNTczNTEzRENCRkIyCi06MTAyNzMwMDAwMTkyRENCNjQwRTJGRDUzQjhGRUZFOEFFRDJCMzg1RTE2Ci06MTAyNzQwMDBCNEZEODdDNTI3OUJDRjc5RUM5RDcxQTRDRDBGOUJFRjdFCi06MTAyNzUwMDBGRjQ4Q0VGQTAyRUMzOTE1MTI3RUI4N0Q2NTg2RjUzQzRECi06MTAyNzYwMDAxODE0MzhEOThFQUY2RDNBRjNFMURFQ0I4NUNGNkM1Q0FGCi06MTAyNzcwMDBGOTdGRTdBREIxNDFFMDQ4MDAwMDAwMDAwMDAwMDAwMDMzCi06MTAyNzgwMDAwMDAwMDAxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MEYxCi06MTAyNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgwMDAwMDAwMDExCi06MTAyN0EwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDE5Ci06MTAyN0IwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMEU5Ci06MTAyN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAxCi06MTAyN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Ci06MTAyN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Ci06MTAyN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Ci06MTAyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM4Ci06MTAyODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Ci06MTAyODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Ci06MTAyODMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Ci06MTAyODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4Ci06MTAyODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4Ci06MTAyODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY4Ci06MTAyODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU4Ci06MTAyODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Ci06MTAyODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4Ci06MTAyOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Ci06MTAyOEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Ci06MTAyOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Ci06MTAyOEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Ci06MTAyOEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwMDAwMDEwMDAwMDQ4Ci06MTAyOEYwMDAwMDAwMDAwODAwMDA5MDA4MDAxMDAwMDAwMDAwMDAwMjI2Ci06MTAyOTAwMDAwMDAwOTAwMDAwMTAwMDAwMDAwMDAwMTAwMDAwOURBOEQyCi06MTAyOTEwMDAwMDAwMDAwMDAwMDAwMDA4ODAwMDAwMDAwMDAwMDAwMDJGCi06MTAyOTIwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Ci06MTAyOTMwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTFBMEU2Ci06MTAyOTQwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDkzQzAwMDAxMDAwNDI3Ci06MTAyOTUwMDAwMDAwMDAwMTAwMDA5M0M4MDAwMDAwMDAwMDAwMDAwMjE5Ci06MTAyOTYwMDAwMDAwOTNEMDAwMDAwMDAwMDAwMDAwMDgwMDAwOTNENDk1Ci06MTAyOTcwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDk0OTgwMDAwMDAwMDI5Ci06MTAyOTgwMDAwMDAwMDAwODAwMDA5M0Q4MDAwODAwMDAwMDAwMDAwOEM0Ci06MTAyOTkwMDAwMDAwOUIzODAwNDAwMDAwMDAwMDAwNDAwMDAwOTQxODM4Ci06MTAyOUEwMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDk0NTgwMDA4MDAwMDIzCi06MTAyOUIwMDAwMDAwMDAwODAwMDA5NEE4MDBDODAwMDAwMDAwMDA5ODczCi06MTAyOUMwMDAwMDAwOTYzODAwOTgwMDAwMDAwMDAwMjgwMDAwOTY3ODZCCi06MTAyOUQwMDAwMDk4MDAwMDAwMDAwMDI4MDAwMEMwMDAwNTQwMDAzMDAyCi06MTAyOUUwMDAwMDAwMDU0MDAwMDBDQjIwMDAwODAwMDAwMDAwMDAwMUFFCi06MTAyOUYwMDAwMDAwQ0IyMTAwMDgwMDAwMDAwMDAwMDEwMDAwMjAwOEJBCi06MTAyQTAwMDAwMDEwMDAwMDAwMDAwMDEwMDAwMDIwMDAwMDAwMDAwMDg2Ci06MTAyQTEwMDAwMDAwMDAwODAwMDA5RDYwMDAwODAwMDAwMDAwMDAwMkE3Ci06MTAyQTIwMDAwMDAwOURBMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDY4Ci06MTAyQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Ci06MTAyQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Ci06MTAyQTUwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDc2Ci06MTAyQTYwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMEU2Ci06MTAyQTcwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Ci06MTAyQTgwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDQ2Ci06MTAyQTkwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMEI2Ci06MTAyQUEwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Ci06MTAyQUIwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDE2Ci06MTAyQUMwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDg2Ci06MTAyQUQwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Ci06MTAyQUUwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Ci06MTAyQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Ci06MTAyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Ci06MTAyQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Ci06MTAyQjIwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDI1Ci06MTAyQjMwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Ci06MTAyQjQwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Ci06MTAyQjUwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMEY1Ci06MTAyQjYwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Ci06MTAyQjcwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Ci06MTAyQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Ci06MTAyQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Ci06MTAyQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Ci06MTAyQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Ci06MTAyQkMwMDAwMDAwMDAwMDAwMDAxMkM4MDA4MDAwMDAwMDAwMDA4MDJCCi06MTAyQkQwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDU0Ci06MTAyQkUwMDAwNzEwMDAwMDAwMDAwNzEwMDAwMDFFQzgwMDAwMDAwMEQxCi06MTAyQkYwMDAwMDAwMDAwODAwMDBBRUMwMDAwODAwMDAwMDAwMDAwODRGCi06MTAyQzAwMDAwMDAwQUU0MDAwMDgwMDAwMDAwMDAwMDgwMDAwQUU4MDk4Ci06MTAyQzEwMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDIwMDgwMDEwMDAwMDZDCi06MTAyQzIwMDAwMDAwMDAxMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwODZDCi06MTAyQzMwMDAwMDAwQTAxMDA3MTAwMDQwMDAwMDAwNDAwMDAwQUY0MDVFCi06MTAyQzQwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMEFGNDEwMDA4MDAwMDgzCi06MTAyQzUwMDAwMDAwMDAwMTAwMDAxRUQwMDAwMDAwMDAwMDAwMDAwMTg0Ci06MTAyQzYwMDAwMDAwMUVEODAwMDAwMDAwMDAwMDAwMDIwMDAwMUVEQTc0Ci06MTAyQzcwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDEyQjAwMDA4MDAwMDg4Ci06MTAyQzgwMDAwMDAwMDAwODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCi06MTAyQzkwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDM0Ci06MTAyQ0EwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMEE0Ci06MTAyQ0IwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk0Ci06MTAyQ0MwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDA0Ci06MTAyQ0QwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDc0Ci06MTAyQ0UwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Ci06MTAyQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Ci06MTAyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCi06MTAyRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCi06MTAyRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDIzCi06MTAyRDMwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDEzCi06MTAyRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCi06MTAyRDUwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDczCi06MTAyRDYwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMEUzCi06MTAyRDcwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCi06MTAyRDgwMDAwMDAwQjAwMDAwMTgwMDAwMDAwMDAwMTgwMDAwQjMwMEIwCi06MTAyRDkwMDAwMDQwMDAwMDAwMDAwMDQwMDAwMEIzMDAwMDQwMDAwMkJFCi06MTAyREEwMDAwMDAwMDAwMTAwMDBCMzAxMDA0MDAwMDIwMDAwMDAwMDJDCi06MTAyREIwMDAwMDAwODAwMDAwNDAwMDAwMDAwMDAwNDA4MDAwMDAwMDkzCi06MTAyREMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDA4MDA0MDNCCi06MTAyREQwMDAwMDAwMDAwNDAwMDA4MDA0MDAwODAwNDAwMDAwMDAwNDFGCi06MTAyREUwMDAwMDAwQkIwMDAwMjgwMDAwMDAwMDAwMjgwMDAwQkM0MERDCi06MTAyREYwMDAwMDEwMDAwMDAwMDAwMDEwMDAwMDg4MDAwMDgwMDAwMEFCCi06MTAyRTAwMDAwMDAwMDA4MDAwMDA4ODAwMDAwODAwODAwMDAwMDAwMjMwCi06MTAyRTEwMDAwMDAwOEMwMDAwMjAwMDAwMDAwMDAwMjAwMDAwMjAwOEJFCi06MTAyRTIwMDAwMDEwMDAwMDAwMDAwMDEwMDAwMDIwMDAwMDAwMDAwMDYyCi06MTAyRTMwMDAwMDAwMDAwODAwMDAxMTA4MDAwODAwMDAwMDAwMDAwODYxCi06MTAyRTQwMDAwMDAwMTE2ODAwMDgwMDAwMDAwMDAwMDgwMDAwMTFBODQwCi06MTAyRTUwMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDEyNzAwMDA4MDAwMEQ4Ci06MTAyRTYwMDAwMDAwMDAwMTAwMDAxMjcxMDAwODAwMDAwMDAwMDAwMUQ1Ci06MTAyRTcwMDAwMDAwOEQwMDAwMTAwMDA0MDAwMDAwMDQwMDAwMTMyMDdBCi06MTAyRTgwMDAwMDMwMDAxODAwMDAwMDEwMDAwMDEzMjgwMDMwMDAxODY3Ci06MTAyRTkwMDAwMDAwMDAwMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCi06MTAyRUEwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTFFOEE5Ci06MTAyRUIwMDAwMDAwMDAwMDAwMDAwMDAxODAwMDAwMDAwMDAwMDAwMDkxCi06MTAyRUMwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgyCi06MTAyRUQwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMEYyCi06MTAyRUUwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDYyCi06MTAyRUYwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCi06MTAyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCi06MTAyRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCi06MTAyRjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCi06MTAyRjMwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDkxCi06MTAyRjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCi06MTAyRjUwMDAwMDAwMDAwMDAwMDA4MzA4MDA4MDAwMDAwMDAwMDA4MEU2Ci06MTAyRjYwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwODM4Ci06MTAyRjcwMDAwMDEwMDAwMDAwMDAwMDEwMDAwMDIwMDAwMDAwMDAwMDExCi06MTAyRjgwMDAwMDAwMDAwODAwMDA4RDEwMDAwODAwMDAwMDAwMDAwODhDCi06MTAyRjkwMDAwMDAwOEQ3MDAwMDgwMDAwMDAwMDAwMDgwMDAwODQ1MDUwCi06MTAyRkEwMDAwNDYwMDAyODAwMDAwNDYwMDAwMDhFQTAwMDA4MDAwMEZCCi06MTAyRkIwMDAwMDAwMDAwMTAwMDA4RUExMDAwODAwMDAwMDAwMDAwMUQ4Ci06MTAyRkMwMDAwMDAwODQwODAwMDgwMDAwMDAwMDAwMDgwMDAwODQ0ODk5Ci06MTAyRkQwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDhERjQwMDA4MDAwMDY3Ci06MTAyRkUwMDAwMDAwMDAwMjAwMDA4REY2MDAwODAwMDAwMDAwMDAwMjUyCi06MTAyRkYwMDAwMDAwOEUwNDAwMTAwMDAwMDAwMDAwMDQ4MDAwMDAwMEFCCi06MTAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDQwCi06MTAzMDEwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCi06MTAzMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCi06MTAzMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCi06MTAzMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCi06MTAzMDUwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDcwCi06MTAzMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCi06MTAzMDcwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCi06MTAzMDgwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDQwCi06MTAzMDkwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMEIwCi06MTAzMEEwMDAwMDAwMDAwMDAwMDAzMDAwMDA0MDAwMDAwMDAwMDAwOEE4Ci06MTAzMEIwMDAwMDAwMzAwODAwNDAwMDAwMDAwMDAwMjgwMDAwMzM5MEFECi06MTAzMEMwMDAwMUMwMDAxMDAwMDAwMDA4MDAwMDMyMDAwMDIwMDAwMEQ1Ci06MTAzMEQwMDAwMDAwMDAyMDAwMDAzNzIwMDAwMDAwMDAwMDAwMDAwODcxCi06MTAzMEUwMDAwMDAwMTAyMDA2MjAwMDM4MDAwMDAwMDgwMDAwQTAwMEFBCi06MTAzMEYwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDNFQTkwMDAwMDAwMEM5Ci06MTAzMTAwMDAwMDAwMDAwMTAwMDAzRUM4MDAwMDAwMDAwMDAwMDAwMkI2Ci06MTAzMTEwMDAwMDAwMUM0MDAwRTAwMDA4MDAwMDAwMDg4MDAwMDAwMEUzCi06MTAzMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDA4MDAwMDU3Ci06MTAzMTMwMDAwMDAwMDAwMTAwMDA0MDAxMDAwODAwMDAwMDAwMDAwMTQ0Ci06MTAzMTQwMDAwMDAwNDA0MDAwMDgwMDA0MDAwMDAwMDIwMDAwNDA2MDUxCi06MTAzMTUwMDAwMDA4MDAwNDAwMDAwMDA0MDAwMDQwMDAwMDA4MDAwMDE3Ci06MTAzMTYwMDAwMDAwMDAwNDAwMDA0MDA0MDAwODAwMDAwMDAwMDAwNDBCCi06MTAzMTcwMDAwMDAwNDA0MDAwMDAwMDAwMDAwMDAwMDgwMDAwNDA0ODNGCi06MTAzMTgwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDgwMDAwMDAwMDAwMEI3Ci06MTAzMTkwMDAwMDAwMDAxMDAwMDA1MDQwMDAwMTAwMDQwMDAwMDAwMTg5Ci06MTAzMUEwMDAwMDAwNTAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwNTAwODU3Ci06MTAzMUIwMDAwMDEwMDAwMDAwMDAwMDA0MDAwMDUwMEMwMDEwMDAwMDhGCi06MTAzMUMwMDAwMDAwMDAwMTAwMDA1MkM3MDAwMDAwMDAwMDAwMDAwMUU0Ci06MTAzMUQwMDAwMDAwNTJDNjAwMDAwMDAwMDAwMDAwMDEwMDAwMzAwMEE2Ci06MTAzMUUwMDAwMDMwMDAxODAwMDAwMDA0MDAwMDMwMDQwMDMwMDAxODE3Ci06MTAzMUYwMDAwMDAwMDAwNDAwMDAzMDA4MDAzMDAwMTgwMDAwMDAwMjQ5Ci06MTAzMjAwMDAwMDAwMzAwQTAwMzAwMDE4MDAwMDAwMDIwMDAwMzAwQ0ZFCi06MTAzMjEwMDAwMDMwMDAxODAwMDAwMDAxMDAwMDMwMEQwMDMwMDAxOEUwCi06MTAzMjIwMDAwMDAwMDAwMTAwMDAzMDBFMDAzMDAwMTgwMDAwMDAwMTE2Ci06MTAzMjMwMDAwMDAwMzAxMDAwMzAwMDE4MDAwMDAwMDQwMDAwMzAxNEJFCi06MTAzMjQwMDAwMDMwMDAxODAwMDAwMDA0MDAwMDUwMDAwMTAwMDA4MDYxCi06MTAzMjUwMDAwMDA4MDAwNDAwMDA1MDA0MDEwMDAwODAwMDA4MDAwNDgxCi06MTAzMjYwMDAwMDAwMDAwQTAwMDAwMDAwMDAwMDAwMDAwMDAwNTA2ODlDCi06MTAzMjcwMDAwMTAwMDA4MDAwMDAwMDAxMDAwMDUwNjkwMTAwMDA4MDkyCi06MTAzMjgwMDAwMDAwMDAwMTAwMDA1MDZDMDEwMDAwODAwMDAwMDAwMkZFCi06MTAzMjkwMDAwMDAwNTA2RTAxMDAwMDgwMDAwMDAwMDIwMDAwNTA3MDJECi06MTAzMkEwMDAwMTAwMDA4MDAwMDAwMDA0MDAwMDUwNzQwMTAwMDA4MDU0Ci06MTAzMkIwMDAwMDAwMDAwNDAwMDA1MDY2MDEwMDAwODAwMDAwMDAwMkQxCi06MTAzMkMwMDAwMDAwNTA2NDAxMDAwMDgwMDAwMDAwMDEwMDAwNTA2MDE4Ci06MTAzMkQwMDAwMTAwMDA4MDAwMDAwMDAyMDAwMDUwNjIwMTAwMDA4MDM4Ci06MTAzMkUwMDAwMDAwMDAwMjAwMDA1MDUwMDEwMDAwODAwMDAwMDAwNEI3Ci06MTAzMkYwMDAwMDAwNTA1NDAxMDAwMDgwMDAwMDAwMDQwMDAwNTA1OEZECi06MTAzMzAwMDAwMTAwMDA4MDAwMDAwMDA0MDAwMDUwNUMwMTAwMDA4MDBCCi06MTAzMzEwMDAwMDAwMDAwNDAwMDA1MDdDMDEwMDAwODAwMDAwMDAwMTVCCi06MTAzMzIwMDAwMDAwNTA3RDAxMDAwMDgwMDAwMDAwMDEwMDAwNDAxOEY2Ci06MTAzMzMwMDAwMDEwMDAwMDAwMDAwMDA0MDAwMDQwOTAwMDEwMDAwMDk5Ci06MTAzMzQwMDAwMDAwMDAwNDAwMDA0MDk4MDAxMDAwMDAwMDAwMDAwNDhECi06MTAzMzUwMDAwMDAwNDExMDAwMDAwMDAwMDAwMDAwMDIwMDAwNDExMkM3Ci06MTAzMzYwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDQxMTQwMDAwMDAwMDA2Ci06MTAzMzcwMDAwMDAwMDAwMjAwMDA0MTE2MDAwMDAwMDAwMDAwMDAwMkYyCi06MTAzMzgwMDAwMDAwNjA0MDAwMDgwMDAwMDAwMDAwMDIwMDAwNjA0MkYxCi06MTAzMzkwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDYwNDQwMDA4MDAwMDc3Ci06MTAzM0EwMDAwMDAwMDAwNDAwMDA2MDgwMDAwODAwMDAwMDAwMDAwODI5Ci06MTAzM0IwMDAwMDAwNjBDMDAwNDAwMDA4MDAwMDAwMDgwMDAwNjAwMDNECi06MTAzM0MwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDYwMDIwMDA4MDAwMDg5Ci06MTAzM0QwMDAwMDAwMDAwMTAwMDA2MDA0MDAwODAwMDAwMDAwMDAwMjdFCi06MTAzM0UwMDAwMDAwNjM0MDAwMDgwMDAwMDAwMDAwMDgwMDAwNjM4MDQ3Ci06MTAzM0YwMDAwMDA4MDAwMDAwMDAwMDA0MDAwMDYzODQwMDA4MDAwMEQyCi06MTAzNDAwMDAwMDAwMDAwMTAwMDA2M0MwMDAwODAwMDAwMDAwMDAwMjhFCi06MTAzNDEwMDAwMDAwNjNDNDAwMDgwMDAwMDAwMDAwMDIwMDAwNjQwMDE3Ci06MTAzNDIwMDAwMDA4MDAwMDAwMDAwMDA0MDAwMDcwMDAwMDEwMDAwMDEwCi06MTAzNDMwMDAwMDAwMDAwNDAwMDA3MDA0MDAxMDAwMDAwMDAwMDAwNDAwCi06MTAzNDQwMDAwMDAwNzAwODAwMTAwMDAwMDAwMDAwMDQwMDAwNzAwMDgwCi06MTAzNDUwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDcwMDIwMDA4MDAwMEU4Ci06MTAzNDYwMDAwMDAwMDAwMTAwMDA3MDA0MDAwODAwMDAwMDAwMDAwMkRECi06MTAzNDcwMDAwMDAwNzA0MDAwMDgwMDAwMDAwMDAwMDIwMDAwNzA0NERFCi06MTAzNDgwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDcwNDYwMDA4MDAwMDc0Ci06MTAzNDkwMDAwMDAwMDAwMjAwMDA3NjQ4MDAwODAwMDAwMDAwMDAwODVDCi06MTAzNEEwMDAwMDAwNzA4MDAwMDgwMDAwMDAwMDAwMDIwMDAwNzA4NDJFCi06MTAzNEIwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDc2ODgwMDA4MDAwMEZDCi06MTAzNEMwMDAwMDAwMDAwODAwMDA4MDQwMDAwODAwMDAwMDAwMDAwMTJCCi06MTAzNEQwMDAwMDAwODA0MTAwMDgwMDAwMDAwMDAwMDEwMDAwODA0MjYwCi06MTAzNEUwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDgwNDMwMDA4MDAwMDA4Ci06MTAzNEYwMDAwMDAwMDAwMTAwMDA4MDAwMDAwODAwMDAwMDAwMDAwMjQxCi06MTAzNTAwMDAwMDAwODAwMjAwMDgwMDAwMDAwMDAwMDEwMDAwODAwNEFDCi06MTAzNTEwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDgwQzAwMDA4MDAwMDU5Ci06MTAzNTIwMDAwMDAwMDAwMjAwMDA4MEMyMDAwODAwMDAwMDAwMDAwMjRECi06MTAzNTMwMDAwMDAwODBDNDAwMDgwMDAwMDAwMDAwMDIwMDAwODA4MDNECi06MTAzNTQwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDgwODEwMDA4MDAwMDY5Ci06MTAzNTUwMDAwMDAwMDAwMTAwMDA4MDgyMDAwODAwMDAwMDAwMDAwMTVGCi06MTAzNTYwMDAwMDAwODA4MzAwMDgwMDAwMDAwMDAwMDEwMDAwODA4NDRCCi06MTAzNTcwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDgwODUwMDA4MDAwMDM1Ci06MTAzNTgwMDAwMDAwMDAwMTAwMDA4MDg2MDAwODAwMDAwMDAwMDAwMTJCCi06MTAzNTkwMDAwMDAwNjAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwNjAwMjVGCi06MTAzNUEwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDYwMDQwMDA4MDAwMEE2Ci06MTAzNUIwMDAwMDAwMDAwMjAwMDA2MDQyMDBDMDAwMTgwMDAwMDAwMjhECi06MTAzNUMwMDAwMDAwNjA0MDAwQzAwMDE4MDAwMDAwMDIwMDAwNjA0Q0Q1Ci06MTAzNUQwMDAwMEMwMDAxODAwMDAwMDA4MDAwMDYwNDQwMEMwMDAxODhGCi06MTAzNUUwMDAwMDAwMDAwODAwMDA2MDU3MDBDMDAwMTgwMDAwMDAwMTQzCi06MTAzNUYwMDAwMDAwNjA1NDAwQzAwMDE4MDAwMDAwMDIwMDAwNjA1Njg3Ci06MTAzNjAwMDAwMEMwMDAxODAwMDAwMDAxMDAwMDY2NDAwMDA4MDAwMDMzCi06MTAzNjEwMDAwMDAwMDAwODAwMDA2NjgwMDAwODAwMDAwMDAwMDAwOEFDCi06MTAzNjIwMDAwMDAwNjZDMDAwMDgwMDAwMDAwMDAwMDgwMDAwRDk0MjQ5Ci06MTAzNjMwMDAwMDE4MDAwMDAwMDAwMDAyMDAwMERFNDAwMDAwMDAwMDUyCi06MTAzNjQwMDAwMDAwMDAwMDAwMDBFMDAwMDAwMDAwMDAwMDAwMDAwNDk2Ci06MTAzNjUwMDAwMDAwREQ0MDAwMDAwMDAwMDAwMDAwMDQwMDAwREQ0NDI4Ci06MTAzNjYwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMERENDgwMDAwMDAwMDMxCi06MTAzNjcwMDAwMDAwMDAwNDAwMDBERDRDMDAwMDAwMDAwMDAwMDAwNDE5Ci06MTAzNjgwMDAwMDAwREQ1MDAwMDAwMDAwMDAwMDAwMDQwMDAwREQ1NEQ4Ci06MTAzNjkwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMERENTgwMDAwMDAwMEYxCi06MTAzNkEwMDAwMDAwMDAwNDAwMDBERDQwMDAwMDAwMDAwMDAwMDAyMEQ5Ci06MTAzNkIwMDAwMDAwREEwMDAwMDAwMDAwMDAwMDAwMDQwMDAwREEwMDUyCi06MTAzNkMwMDAwMDAwMDAwMDAwMDAwMDY4MDAwMEJCNjAwMDAwMDAwMDc3Ci06MTAzNkQwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwNDE2Ci06MTAzNkUwMDAwMDAwQjBDMDAwMDAwMDAwMDAwMDAwMDQwMDAwQjBDNEYyCi06MTAzNkYwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMEIwQzgwMDAwMDAwMDRFCi06MTAzNzAwMDAwMDAwMDAwNDAwMDBCMEMwMDAwMDAwMDAwMDAwMDAxMDM1Ci06MTAzNzEwMDAwMDAwRDZCMDAwMDAwMDAwMDAwMDAwMDQwMDAwRDZCNDk1Ci06MTAzNzIwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMEQ2QjgwMDAwMDAwMDA3Ci06MTAzNzMwMDAwMDAwMDAwNDAwMDBENkJDMDAwMDAwMDAwMDAwMDAwNEVGCi06MTAzNzQwMDAwMDAwRDZCMDAwMDAwMDAwMDAwMDAwMTAwMDAwRDM0OEM4Ci06MTAzNzUwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMEQzNTgwMDAwMDAwMDM2Ci06MTAzNzYwMDAwMDAwMDA4MDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMEM5Ci06MTAzNzcwMDAwMDAwRDM1ODAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDE2Ci06MDgzNzgwMDAwNjAyMDUwMDAwMDAwMDAwMzQKLTowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9ibngyeC9ibngyeC1lMWgtNi4yLjkuMC5mdy5paGV4IGIvZmlybXdhcmUvYm54MngvYm54MngtZTFoLTYuMi45LjAuZncuaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTFjZTUzCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvYm54MngvYm54MngtZTFoLTYuMi45LjAuZncuaWhleApAQCAtMCwwICsxLDEzMTkyIEBACis6MTAwMDAwMDAwMDAwNEY0ODAwMDAwMDY4MDAwMDA3MEMwMDAwNEZCOEQ3Cis6MTAwMDEwMDAwMDAwMUVENDAwMDA1NkM4MDAwMDAwOTQwMDAwNzVBMDI3Cis6MTAwMDIwMDAwMDAwOUY0QzAwMDA3NjM4MDAwMDAwQ0MwMDAxMTU4OENECis6MTAwMDMwMDAwMDAwREM1ODAwMDExNjU4MDAwMDAwOTQwMDAxRjJCOERFCis6MTAwMDQwMDAwMDAwNDAwQzAwMDFGMzUwMDAwMDAwQTQwMDAyMzM2MEU3Cis6MTAwMDUwMDAwMDAwRjQyNDAwMDIzNDA4MDAwMDBGRkMwMDAzMjgzMEU0Cis6MTAwMDYwMDAwMDAwMDAwNDAwMDMzODMwMDIwNDAwNDgwMDAwMDAwRkM0Cis6MTAwMDcwMDAwMjA0MDA1NDAwMDAwMDQ1MDIwNDAwNUMwMDAwMDAwNjc5Cis6MTAwMDgwMDAwMjA0MDA3MDAwMDAwMDA0MDIwNDAwNzgwMDAwMDAwMDc4Cis6MTAwMDkwMDAwMjA0MDA3QzEyMTcwMDAwMDIwNDAwODAyMjE3MDAwMEY2Cis6MTAwMEEwMDAwMjA0MDA4NDMyMTcwMDAwMDYwNDAwODgwMDAwMDAwNUU2Cis6MTAwMEIwMDAwMjA0MDA5QzEyMTUwMDAwMDIwNDAwQTAyMjE1MDAwMDlBCis6MTAwMEMwMDAwMjA0MDBBNDMyMTUwMDAwMDYwNDAwQTgwMDAwMDAwNDg5Cis6MTAwMEQwMDAwMjA0MDBCODAyMTAwMDAwMDIwNDAwQkMwMDEwMDAwMDdFCis6MTAwMEUwMDAwMjA0MDBDMDEwMTAwMDAwMDIwNDAwQzQyMDEwMDAwMDMwCis6MTAwMEYwMDAwMjA0MDBDODMwMTAwMDAwMDIwNDAwQ0M0MDEwMDAwMEQwCis6MTAwMTAwMDAwNjA0MDBEMDAwMDAwMDAzMDIwNDAwREMwMDEwMDAwMDIwCis6MTAwMTEwMDAwMjA0MDBFMDEyMTQwMDAwMDIwNDAwRTQyMjE0MDAwMEIzCis6MTAwMTIwMDAwMjA0MDBFODMyMTQwMDAwMDIwNDAwRUM0MjE0MDAwMDUzCis6MTAwMTMwMDAwNjA0MDBGMDAwMDAwMDAzMDEwNDAxMjQwMDAwMDAwMDk4Cis6MTAwMTQwMDAwMTA0MDEyODAwMDAwMDAwMDEwNDAxMkMwMDAwMDAwMDRGCis6MTAwMTUwMDAwMTA0MDEzMDAwMDAwMDAwMDIwNDAxRDAwMDAwODkwNjAzCis6MTAwMTYwMDAwMjA0MDAwNDAwMDAwMEZGMDIwNDAwMDgwMDAwMDBGRjc5Cis6MTAwMTcwMDAwMjA0MDAwQzAwMDAwMEZGMDIwNDAwMTAwMDAwMDBGRjU5Cis6MTAwMTgwMDAwMjA0MDAxNDAwMDAwMDdGMDIwNDAwMTgwMDAwMDBGRkI5Cis6MTAwMTkwMDAwMjA0MDAxQzAwMDAwMEZGMDIwNDAwMjAwMDAwMDBGRjE5Cis6MTAwMUEwMDAwMjA0MDAyNDAwMDAwMDNFMDIwNDAwMjgwMDAwMDAwMEI5Cis6MTAwMUIwMDAwMjA0MDAyQzAwMDAwMDNGMDIwNDAwMzAwMDAwMDAzRjU5Cis6MTAwMUMwMDAwMjA0MDAzNDAwMDAwMDNGMDIwNDAwMzgwMDAwMDAzRjM5Cis6MTAwMUQwMDAwMjA0MDAzQzAwMDAwMDNGMDIwNDAwNDAwMDAwMDAzRjE5Cis6MTAwMUUwMDAwMjA0MDA0NDAwMDAwMDNGMDIwNDA0Q0MwMDAwMDAwMUFGCis6MTAwMUYwMDAwMjA0MjAwODAwMDAwMjExMDIwNDIwMEMwMDAwMDIwMDhBCis6MTAwMjAwMDAwMjA0MjAxMDAwMDAwMjA0MDIwNDIwMTQwMDAwMDIxOTVECis6MTAwMjEwMDAwMjA0MjAxQzAwMDBGRkZGMDIwNDIwMjAwMDAwRkZGRjVBCis6MTAwMjIwMDAwMjA0MjAyNDAwMDBGRkZGMDIwNDIwMjgwMDAwRkZGRjNBCis6MTAwMjMwMDAwMjA0MjAzODAwMDAwMDIwMDYwNDIwM0MwMDAwMDAxRkJCCis6MTAwMjQwMDAwMjA0MjBCODAwMDAwMDAxMDYwNDIwQkMwMDAwMDA1RjhBCis6MTAwMjUwMDAwMjA0MjIzODA3RkZGRkZGMDIwNDIyM0MwMDAwMDAzRjk3Cis6MTAwMjYwMDAwMjA0MjI0MDA3RkZGRkZGMDIwNDIyNDQwMDAwMDAwRkE3Cis6MTAwMjcwMDAwMTA0MjI0ODAwMDAwMDAwMDEwNDIyNEMwMDAwMDAwMDlDCis6MTAwMjgwMDAwMTA0MjI1MDAwMDAwMDAwMDEwNDIyNTQwMDAwMDAwMDdDCis6MTAwMjkwMDAwMTA0MjI1ODAwMDAwMDAwMDEwNDIyNUMwMDAwMDAwMDVDCis6MTAwMkEwMDAwMTA0MjI2MDAwMDAwMDAwMDEwNDIyNjQwMDAwMDAwMDNDCis6MTAwMkIwMDAwMTA0MjI2ODAwMDAwMDAwMDEwNDIyNkMwMDAwMDAwMDFDCis6MTAwMkMwMDAwMTA0MjI3MDAwMDAwMDAwMDEwNDIyNzQwMDAwMDAwMEZDCis6MTAwMkQwMDAwMTA0MjI3ODAwMDAwMDAwMDEwNDIyN0MwMDAwMDAwMERDCis6MTAwMkUwMDAwQzA0MjAwMDAwMDAwM0U4MEEwNDIwMDAwMDAwMDAwMUM0Cis6MTAwMkYwMDAwQjA0MjAwMDAwMDAwMDBBMDYwNTQwMDAwMDAwMEQwMDZECis6MTAwMzAwMDAwMjA1MDA0NDAwMDAwMDIwMDIwNTAwNDgwMDAwMDAzMjAxCis6MTAwMzEwMDAwMjA1MDA5MDAyMTUwMDIwMDIwNTAwOTQwMjE1MDAyMDNECis6MTAwMzIwMDAwMjA1MDA5ODAwMDAwMDMwMDIwNTAwOUMwODEwMDAwMDQzCis6MTAwMzMwMDAwMjA1MDBBMDAwMDAwMDMzMDIwNTAwQTQwMDAwMDAzMDA4Cis6MTAwMzQwMDAwMjA1MDBBODAwMDAwMDMxMDIwNTAwQUMwMDAwMDAwMjE4Cis6MTAwMzUwMDAwMjA1MDBCMDAwMDAwMDA1MDIwNTAwQjQwMDAwMDAwNjIwCis6MTAwMzYwMDAwMjA1MDBCODAwMDAwMDAyMDIwNTAwQkMwMDAwMDAwMjA3Cis6MTAwMzcwMDAwMjA1MDBDMDAwMDAwMDAwMDIwNTAwQzQwMDAwMDAwNUU2Cis6MTAwMzgwMDAwMjA1MDBDODAwMDAwMDAyMDIwNTAwQ0MwMDAwMDAwMkM3Cis6MTAwMzkwMDAwMjA1MDBEMDAwMDAwMDAyMDIwNTAwRDQwMDAwMDAwMUE4Cis6MTAwM0EwMDAwMjA1MDExNDAwMDAwMDAxMDIwNTAxMUMwMDAwMDAwMTBCCis6MTAwM0IwMDAwMjA1MDEyMDAwMDAwMDAyMDIwNTAyMDQwMDAwMDAwMTA1Cis6MTAwM0MwMDAwMjA1MDIwQzAwMDAwMDQwMDIwNTAyMTAwMDAwMDA0MDdGCis6MTAwM0QwMDAwMjA1MDIxQzAwMDAwMDIwMDIwNTAyMjAwMDAwMDAxMzlDCis6MTAwM0UwMDAwMjA1MDIyNDAwMDAwMDIwMDYwNTAyNDAwMDAwMDAwQTY5Cis6MTAwM0YwMDAwNDA1MDI4MDAwMjAwMDAwMDIwNTAwNTAwMDAwMDAwN0Y0Cis6MTAwNDAwMDAwMjA1MDA1NDAwMDAwMDA3MDIwNTAwNTgwMDAwMDAwMDJCCis6MTAwNDEwMDAwMjA1MDA1QzAwMDAwMDA4MDIwNTAwNjAwMDAwMDAwMTA5Cis6MTAwNDIwMDAwNjA1MDA2NDAwMDAwMDAzMDIwNTAwRDgwMDAwMDAwNjc1Cis6MTAwNDMwMDAwMjA1MDAwNDAwMDAwMDAxMDIwNTAwMDgwMDAwMDAwMUEwCis6MTAwNDQwMDAwMjA1MDAwQzAwMDAwMDAxMDIwNTAwMTAwMDAwMDAwMTgwCis6MTAwNDUwMDAwMjA1MDAxNDAwMDAwMDAxMDIwNTAwMTgwMDAwMDAwMTYwCis6MTAwNDYwMDAwMjA1MDAxQzAwMDAwMDAxMDIwNTAwMjAwMDAwMDAwMTQwCis6MTAwNDcwMDAwMjA1MDAyNDAwMDAwMDAxMDIwNTAwMjgwMDAwMDAwMTIwCis6MTAwNDgwMDAwMjA1MDAyQzAwMDAwMDAxMDIwNTAwMzAwMDAwMDAwMTAwCis6MTAwNDkwMDAwMjA1MDAzNDAwMDAwMDAxMDIwNTAwMzgwMDAwMDAwMUUwCis6MTAwNEEwMDAwMjA1MDAzQzAwMDAwMDAxMDIwNTAwNDAwMDAwMDAwMUMwCis6MTAwNEIwMDAwMjA1MDBFMDAwMDAwMDBEMDIwNTAwRTgwMDAwMDAwMDU5Cis6MTAwNEMwMDAwMjA1MDBGMDAwMDAwMDAwMDIwNTAwRjgwMDAwMDAwMDM2Cis6MTAwNEQwMDAwMjA1MDBFNDAwMDAwMDJEMDIwNTAwRUMwMDAwMDAyMEYxCis6MTAwNEUwMDAwMjA1MDBGNDAwMDAwMDIwMDIwNTAwRkMwMDAwMDAyMENFCis6MTAwNEYwMDAwMjA1MDBFMDAwMDAwMDFEMDIwNTAwRTgwMDAwMDAxMEY5Cis6MTAwNTAwMDAwMjA1MDBGMDAwMDAwMDEwMDIwNTAwRjgwMDAwMDAxMEQ1Cis6MTAwNTEwMDAwMjA1MDBFNDAwMDAwMDNEMDIwNTAwRUMwMDAwMDAzMDkwCis6MTAwNTIwMDAwMjA1MDBGNDAwMDAwMDMwMDIwNTAwRkMwMDAwMDAzMDZECis6MTAwNTMwMDAwMjA1MDBFMDAwMDAwMDREMDIwNTAwRTgwMDAwMDA0MDU4Cis6MTAwNTQwMDAwMjA1MDBGMDAwMDAwMDQwMDIwNTAwRjgwMDAwMDA0MDM1Cis6MTAwNTUwMDAwMjA1MDBFNDAwMDAwMDZEMDIwNTAwRUMwMDAwMDA2MEYwCis6MTAwNTYwMDAwMjA1MDBGNDAwMDAwMDYwMDIwNTAwRkMwMDAwMDA2MENECis6MTAwNTcwMDAwMjA1MDBFMDAwMDAwMDVEMDIwNTAwRTgwMDAwMDA1MEY4Cis6MTAwNTgwMDAwMjA1MDBGMDAwMDAwMDUwMDIwNTAwRjgwMDAwMDA1MEQ1Cis6MTAwNTkwMDAwMjA1MDBFNDAwMDAwMDdEMDIwNTAwRUMwMDAwMDA3MDkwCis6MTAwNUEwMDAwMjA1MDBGNDAwMDAwMDcwMDIwNTAwRkMwMDAwMDA3MDZECis6MTAwNUIwMDAwNDA2MTAwMDAyMDAwMDIwMDIwNjAwREMwMDAwMDAwMTFBCis6MTAwNUMwMDAwMTA2MDBEODAwMDAwMDAwMDQwNjAyMDAwMDAzMDIyMDFCCis6MTAwNUQwMDAwMjA2MDBEQzAwMDAwMDAwMDEwNjAwQjgwMDAwMDAwMDc4Cis6MTAwNUUwMDAwMTA2MDBDODAwMDAwMDAwMDIwNjAxNkMwMDAwMDAwMEM3Cis6MTAwNUYwMDAwMTA2MDBCQzAwMDAwMDAwMDEwNjAwQ0MwMDAwMDAwMDY1Cis6MTAwNjAwMDAwMjA2MDE3MDAwMDAwMDAwMDcxODA0MDAwMDkxMDAwMEJECis6MTAwNjEwMDAwODE4MDdEODAwMDUwMjIzMDcxQzAwMDAyQkY3MDAwMDZDCis6MTAwNjIwMDAwNzFDODAwMDJERDEwQUZFMDcxRDAwMDAyRjQ2MTY3M0ZGCis6MTAwNjMwMDAwNzFEODAwMDE2MzQyMjQ1MDgxREIxMzA0OURBMDIyNTE1Cis6MTAwNjQwMDAwMTE4MDAwMDAwMDAwMDAwMDExODAwMDQwMDAwMDAwMDc0Cis6MTAwNjUwMDAwMTE4MDAwODAwMDAwMDAwMDExODAwMEMwMDAwMDAwMDU0Cis6MTAwNjYwMDAwMTE4MDAxMDAwMDAwMDAwMDExODAwMTQwMDAwMDAwMDM0Cis6MTAwNjcwMDAwMjE4MDAyMDAwMDAwMDAxMDIxODAwMjQwMDAwMDAwMkZGCis6MTAwNjgwMDAwMjE4MDAyODAwMDAwMDAzMDIxODAwMkMwMDAwMDAwMERGCis6MTAwNjkwMDAwMjE4MDAzMDAwMDAwMDA0MDIxODAwMzQwMDAwMDAwMUJECis6MTAwNkEwMDAwMjE4MDAzODAwMDAwMDAwMDIxODAwM0MwMDAwMDAwMUExCis6MTAwNkIwMDAwMjE4MDA0MDAwMDAwMDA0MDIxODAwNDQwMDAwMDAwMDdFCis6MTAwNkMwMDAwMjE4MDA0ODAwMDAwMDAxMDIxODAwNEMwMDAwMDAwMzVFCis6MTAwNkQwMDAwMjE4MDA1MDAwMDAwMDAwMDIxODAwNTQwMDAwMDAwMTQxCis6MTAwNkUwMDAwMjE4MDA1ODAwMDAwMDA0MDIxODAwNUMwMDAwMDAwMDFFCis6MTAwNkYwMDAwMjE4MDA2MDAwMDAwMDAxMDIxODAwNjQwMDAwMDAwM0ZFCis6MTAwNzAwMDAwMjE4MDA2ODAwMDAwMDAwMDIxODAwNkMwMDAwMDAwMUUwCis6MTAwNzEwMDAwMjE4MDA3MDAwMDAwMDA0MDIxODAwNzQwMDAwMDAwMEJECis6MTAwNzIwMDAwMjE4MDA3ODAwMDAwMDA0MDIxODAwN0MwMDAwMDAwMzlBCis6MTAwNzMwMDAwNjE4MDA4MDAwMDAwMDAyMDIxODAwQTQwMDAwM0ZGRjFECis6MTAwNzQwMDAwMjE4MDBBODAwMDAwM0ZGMDIxODAyMjQwMDAwMDAwMEE1Cis6MTAwNzUwMDAwMjE4MDIzNDAwMDAwMDAwMDIxODAyNEMwMDAwMDAwMEUxCis6MTAwNzYwMDAwMjE4MDJFNDAwMDAwMEZGMDYxODEwMDAwMDAwMDQwMDU4Cis6MTAwNzcwMDAwMjFCOEJDMDAwMDAwMDAxMDIxQjgwMDAwMDAwMDAzNDNGCis6MTAwNzgwMDAwMjFCODA0MDAwMDAwMDE4MDIxQjgwODAwMDAwMDAwQzRCCis6MTAwNzkwMDAwMjFCODBDMDAwMDAwMDIwMEMxQjgzMDAwMDA3QTEyMDZBCis6MTAwN0EwMDAwQTFCODMwMDAwMDAwMTM4MEIxQjgzMDAwMDAwMTM4ODI0Cis6MTAwN0IwMDAwQTFCODM0MDAwMDAwMDAwMEMxQjgzNDAwMDAwMDFGNDcyCis6MTAwN0MwMDAwQjFCODM0MDAwMDAwMDA1MDIxQjgzODAwMDA3QTEyMDUzCis6MTAwN0QwMDAwMjFCODNDMDAwMDAwMUY0MDIxQjE0ODAwMDAwMDAwMTEyCis6MTAwN0UwMDAwQTFCMTQ4MDAwMDAwMDAwMDYxQTEwMDAwMDAwMDNCMzZBCis6MTAwN0YwMDAwNDFBMUVDQzAwMDEwMjI3MDYxQTFFRDAwMDAwMDAwOEIxCis6MTAwODAwMDAwNjFBMjAwODAwMDAwMEM4MDYxQTIwMDAwMDAwMDAwMjk2Cis6MTAwODEwMDAwNDFBQUY0MDAwMTAwMjI4MDYxQTM3MTgwMDAwMDAwNDFFCis6MTAwODIwMDAwNjFBMzcxMDAwMDAwMDAyMDYxQTUwMDAwMDAwMDAwMkVECis6MTAwODMwMDAwNjFBNTAwODAwMDAwMDA0MDYxQTUwMTgwMDAwMDAwNEIwCis6MTAwODQwMDAwNjFBNTAyODAwMDAwMDA0MDYxQTUwMzgwMDAwMDAwNDYwCis6MTAwODUwMDAwNjFBNTA0ODAwMDAwMDA0MDYxQTUwNTgwMDAwMDAwNDEwCis6MTAwODYwMDAwNjFBNTA2ODAwMDAwMDA0MDYxQTUwNzgwMDAwMDAwMkMyCis6MTAwODcwMDAwNDFBNTJDMDAwMDIwMjM4MDYxQTQwNTAwMDAwMDAwNjU2Cis6MTAwODgwMDAwNDFBNDA2ODAwMDIwMjNBMDQxQTQwNDAwMDA0MDIzQzg0Cis6MTAwODkwMDAwNDFBODAwMDAwMDEwMjQwMDYxQTgwMDQwMDAwMDAwM0QwCis6MTAwOEEwMDAwNDFBODAxMDAwMDEwMjQxMDYxQTgwMTQwMDAwMDAwMzlGCis6MTAwOEIwMDAwNDFBODAyMDAwMDEwMjQyMDYxQTgwMjQwMDAwMDAwMzZFCis6MTAwOEMwMDAwNDFBODAzMDAwMDEwMjQzMDYxQTgwMzQwMDAwMDAwMzNECis6MTAwOEQwMDAwNDFBODA0MDAwMDEwMjQ0MDYxQTgwNDQwMDAwMDAwMzBDCis6MTAwOEUwMDAwNDFBODA1MDAwMDEwMjQ1MDYxQTgwNTQwMDAwMDAwM0RCCis6MTAwOEYwMDAwNDFBODA2MDAwMDEwMjQ2MDYxQTgwNjQwMDAwMDAwM0FBCis6MTAwOTAwMDAwNDFBODA3MDAwMDEwMjQ3MDYxQTgwNzQwMDAwMDAwMzc4Cis6MTAwOTEwMDAwNDFBODA4MDAwMDEwMjQ4MDYxQTgwODQwMDAwMDAwMzQ3Cis6MTAwOTIwMDAwNDFBODA5MDAwMDEwMjQ5MDYxQTgwOTQwMDAwMDAwMzE2Cis6MTAwOTMwMDAwNDFBODBBMDAwMDEwMjRBMDYxQTgwQTQwMDAwMDAwM0U1Cis6MTAwOTQwMDAwNDFBODBCMDAwMDEwMjRCMDYxQTgwQjQwMDAwMDAwM0I0Cis6MTAwOTUwMDAwNDFBODBDMDAwMDEwMjRDMDYxQTgwQzQwMDAwMDAwMzgzCis6MTAwOTYwMDAwNDFBODBEMDAwMDEwMjREMDYxQTgwRDQwMDAwMDAwMzUyCis6MTAwOTcwMDAwNDFBODBFMDAwMDEwMjRFMDYxQTgwRTQwMDAwMDAwMzIxCis6MTAwOTgwMDAwNDFBODBGMDAwMDEwMjRGMDYxQTgwRjQwMDAwMDAwM0YwCis6MTAwOTkwMDAwNDFBODEwMDAwMDEwMjUwMDYxQTgxMDQwMDAwMDAwM0JECis6MTAwOUEwMDAwNDFBODExMDAwMDEwMjUxMDYxQTgxMTQwMDAwMDAwMzhDCis6MTAwOUIwMDAwNDFBODEyMDAwMDEwMjUyMDYxQTgxMjQwMDAwMDAwMzVCCis6MTAwOUMwMDAwNDFBODEzMDAwMDEwMjUzMDYxQTgxMzQwMDAwMDAwMzJBCis6MTAwOUQwMDAwNDFBODE0MDAwMDEwMjU0MDYxQTgxNDQwMDAwMDAwM0Y5Cis6MTAwOUUwMDAwNDFBODE1MDAwMDEwMjU1MDYxQTgxNTQwMDAwMDAwM0M4Cis6MTAwOUYwMDAwNDFBODE2MDAwMDEwMjU2MDYxQTgxNjQwMDAwMDAwMzk3Cis6MTAwQTAwMDAwNDFBODE3MDAwMDEwMjU3MDYxQTgxNzQwMDAwMDAwMzY1Cis6MTAwQTEwMDAwNDFBODE4MDAwMDEwMjU4MDYxQTgxODQwMDAwMDAwMzM0Cis6MTAwQTIwMDAwNDFBODE5MDAwMDEwMjU5MDYxQTgxOTQwMDAwMDAwMzAzCis6MTAwQTMwMDAwNDFBODFBMDAwMDEwMjVBMDYxQTgxQTQwMDAwMDAwM0QyCis6MTAwQTQwMDAwNDFBODFCMDAwMDEwMjVCMDYxQTgxQjQwMDAwMDAwM0ExCis6MTAwQTUwMDAwNDFBODFDMDAwMDEwMjVDMDYxQTgxQzQwMDAwMDAwMzcwCis6MTAwQTYwMDAwNDFBODFEMDAwMDEwMjVEMDYxQTgxRDQwMDAwMDAwMzNGCis6MTAwQTcwMDAwNDFBODFFMDAwMDEwMjVFMDYxQTgxRTQwMDAwMDAwMzBFCis6MTAwQTgwMDAwNDFBODFGMDAwMDEwMjVGMDYxQTgxRjQwMDAwMDAwM0RECis6MTAwQTkwMDAwNDFBODIwMDAwMDEwMjYwMDYxQTgyMDQwMDAwMDAwM0FBCis6MTAwQUEwMDAwNDFBODIxMDAwMDEwMjYxMDYxQTgyMTQwMDAwMDAwMzc5Cis6MTAwQUIwMDAwNDFBODIyMDAwMDEwMjYyMDYxQTgyMjQwMDAwMDAwMzQ4Cis6MTAwQUMwMDAwNDFBODIzMDAwMDEwMjYzMDYxQTgyMzQwMDAwMDAwMzE3Cis6MTAwQUQwMDAwNDFBODI0MDAwMDEwMjY0MDYxQTgyNDQwMDAwMDAwM0U2Cis6MTAwQUUwMDAwNDFBODI1MDAwMDEwMjY1MDYxQTgyNTQwMDAwMDAwM0I1Cis6MTAwQUYwMDAwNDFBODI2MDAwMDEwMjY2MDYxQTgyNjQwMDAwMDAwMzg0Cis6MTAwQjAwMDAwNDFBODI3MDAwMDEwMjY3MDYxQTgyNzQwMDAwMDAwMzUyCis6MTAwQjEwMDAwNDFBODI4MDAwMDEwMjY4MDYxQTgyODQwMDAwMDAwMzIxCis6MTAwQjIwMDAwNDFBODI5MDAwMDEwMjY5MDYxQTgyOTQwMDAwMDAwM0YwCis6MTAwQjMwMDAwNDFBODJBMDAwMDEwMjZBMDYxQTgyQTQwMDAwMDAwM0JGCis6MTAwQjQwMDAwNDFBODJCMDAwMDEwMjZCMDYxQTgyQjQwMDAwMDAwMzhFCis6MTAwQjUwMDAwNDFBODJDMDAwMDEwMjZDMDYxQTgyQzQwMDAwMDAwMzVECis6MTAwQjYwMDAwNDFBODJEMDAwMDEwMjZEMDYxQTgyRDQwMDAwMDAwMzJDCis6MTAwQjcwMDAwNDFBODJFMDAwMDEwMjZFMDYxQTgyRTQwMDAwMDAwM0ZCCis6MTAwQjgwMDAwNDFBODJGMDAwMDEwMjZGMDYxQTgyRjQwMDAwMDAwM0NBCis6MTAwQjkwMDAwNDFBODMwMDAwMDEwMjcwMDYxQTgzMDQwMDAwMDAwMzk3Cis6MTAwQkEwMDAwNDFBODMxMDAwMDEwMjcxMDYxQTgzMTQwMDAwMDAwMzY2Cis6MTAwQkIwMDAwNDFBODMyMDAwMDEwMjcyMDYxQTgzMjQwMDAwMDAwMzM1Cis6MTAwQkMwMDAwNDFBODMzMDAwMDEwMjczMDYxQTgzMzQwMDAwMDAwMzA0Cis6MTAwQkQwMDAwNDFBODM0MDAwMDEwMjc0MDYxQTgzNDQwMDAwMDAwM0QzCis6MTAwQkUwMDAwNDFBODM1MDAwMDEwMjc1MDYxQTgzNTQwMDAwMDAwM0EyCis6MTAwQkYwMDAwNDFBODM2MDAwMDEwMjc2MDYxQTgzNjQwMDAwMDAwMzcxCis6MTAwQzAwMDAwNDFBODM3MDAwMDEwMjc3MDYxQTgzNzQwMDAwMDAwMzNGCis6MTAwQzEwMDAwNDFBODM4MDAwMDEwMjc4MDYxQTgzODQwMDAwMDAwMzBFCis6MTAwQzIwMDAwNDFBODM5MDAwMDEwMjc5MDYxQTgzOTQwMDAwMDAwM0RECis6MTAwQzMwMDAwNDFBODNBMDAwMDEwMjdBMDYxQTgzQTQwMDAwMDAwM0FDCis6MTAwQzQwMDAwNDFBODNCMDAwMDEwMjdCMDYxQTgzQjQwMDAwMDAwMzdCCis6MTAwQzUwMDAwNDFBODNDMDAwMDEwMjdDMDYxQTgzQzQwMDAwMDAwMzRBCis6MTAwQzYwMDAwNDFBODNEMDAwMDEwMjdEMDYxQTgzRDQwMDAwMDAwMzE5Cis6MTAwQzcwMDAwNDFBODNFMDAwMDEwMjdFMDYxQTgzRTQwMDAwMDAwM0U4Cis6MTAwQzgwMDAwNDFBODNGMDAwMDEwMjdGMDYxQTgzRjQwMDAwMDAwM0I3Cis6MTAwQzkwMDAwNDFBODQwMDAwMDEwMjgwMDYxQTg0MDQwMDAwMDAwMzg0Cis6MTAwQ0EwMDAwNDFBODQxMDAwMDEwMjgxMDYxQTg0MTQwMDAwMDAwMzUzCis6MTAwQ0IwMDAwNDFBODQyMDAwMDEwMjgyMDYxQTg0MjQwMDAwMDAwMzIyCis6MTAwQ0MwMDAwNDFBODQzMDAwMDEwMjgzMDYxQTg0MzQwMDAwMDAwM0YxCis6MTAwQ0QwMDAwNDFBODQ0MDAwMDEwMjg0MDYxQTg0NDQwMDAwMDAwM0MwCis6MTAwQ0UwMDAwNDFBODQ1MDAwMDEwMjg1MDYxQTg0NTQwMDAwMDAwMzhGCis6MTAwQ0YwMDAwNDFBODQ2MDAwMDEwMjg2MDYxQTg0NjQwMDAwMDAwMzVFCis6MTAwRDAwMDAwNDFBODQ3MDAwMDEwMjg3MDYxQTg0NzQwMDAwMDAwMzJDCis6MTAwRDEwMDAwNDFBODQ4MDAwMDEwMjg4MDYxQTg0ODQwMDAwMDAwM0ZCCis6MTAwRDIwMDAwNDFBODQ5MDAwMDEwMjg5MDYxQTg0OTQwMDAwMDAwM0NBCis6MTAwRDMwMDAwNDFBODRBMDAwMDEwMjhBMDYxQTg0QTQwMDAwMDAwMzk5Cis6MTAwRDQwMDAwNDFBODRCMDAwMDEwMjhCMDYxQTg0QjQwMDAwMDAwMzY4Cis6MTAwRDUwMDAwNDFBODRDMDAwMDEwMjhDMDYxQTg0QzQwMDAwMDAwMzM3Cis6MTAwRDYwMDAwNDFBODREMDAwMDEwMjhEMDYxQTg0RDQwMDAwMDAwMzA2Cis6MTAwRDcwMDAwNDFBODRFMDAwMDEwMjhFMDYxQTg0RTQwMDAwMDAwM0Q1Cis6MTAwRDgwMDAwNDFBODRGMDAwMDEwMjhGMDYxQTg0RjQwMDAwMDAwM0E0Cis6MTAwRDkwMDAwNDFBODUwMDAwMDEwMjkwMDYxQTg1MDQwMDAwMDAwMzcxCis6MTAwREEwMDAwNDFBODUxMDAwMDEwMjkxMDYxQTg1MTQwMDAwMDAwMzQwCis6MTAwREIwMDAwNDFBODUyMDAwMDEwMjkyMDYxQTg1MjQwMDAwMDAwMzBGCis6MTAwREMwMDAwNDFBODUzMDAwMDEwMjkzMDYxQTg1MzQwMDAwMDAwM0RFCis6MTAwREQwMDAwNDFBODU0MDAwMDEwMjk0MDYxQTg1NDQwMDAwMDAwM0FECis6MTAwREUwMDAwNDFBODU1MDAwMDEwMjk1MDYxQTg1NTQwMDAwMDAwMzdDCis6MTAwREYwMDAwNDFBODU2MDAwMDEwMjk2MDYxQTg1NjQwMDAwMDAwMzRCCis6MTAwRTAwMDAwNDFBODU3MDAwMDEwMjk3MDYxQTg1NzQwMDAwMDAwMzE5Cis6MTAwRTEwMDAwNDFBODU4MDAwMDEwMjk4MDYxQTg1ODQwMDAwMDAwM0U4Cis6MTAwRTIwMDAwNDFBODU5MDAwMDEwMjk5MDYxQTg1OTQwMDAwMDAwM0I3Cis6MTAwRTMwMDAwNDFBODVBMDAwMDEwMjlBMDYxQTg1QTQwMDAwMDAwMzg2Cis6MTAwRTQwMDAwNDFBODVCMDAwMDEwMjlCMDYxQTg1QjQwMDAwMDAwMzU1Cis6MTAwRTUwMDAwNDFBODVDMDAwMDEwMjlDMDYxQTg1QzQwMDAwMDAwMzI0Cis6MTAwRTYwMDAwNDFBODVEMDAwMDEwMjlEMDYxQTg1RDQwMDAwMDAwM0YzCis6MTAwRTcwMDAwNDFBODVFMDAwMDEwMjlFMDYxQTg1RTQwMDAwMDAwM0MyCis6MTAwRTgwMDAwNDFBODVGMDAwMDEwMjlGMDYxQTg1RjQwMDAwMDAwMzkxCis6MTAwRTkwMDAwNDFBODYwMDAwMDEwMkEwMDYxQTg2MDQwMDAwMDAwMzVFCis6MTAwRUEwMDAwNDFBODYxMDAwMDEwMkExMDYxQTg2MTQwMDAwMDAwMzJECis6MTAwRUIwMDAwNDFBODYyMDAwMDEwMkEyMDYxQTg2MjQwMDAwMDAwM0ZDCis6MTAwRUMwMDAwNDFBODYzMDAwMDEwMkEzMDYxQTg2MzQwMDAwMDAwM0NCCis6MTAwRUQwMDAwNDFBODY0MDAwMDEwMkE0MDYxQTg2NDQwMDAwMDAwMzlBCis6MTAwRUUwMDAwNDFBODY1MDAwMDEwMkE1MDYxQTg2NTQwMDAwMDAwMzY5Cis6MTAwRUYwMDAwNDFBODY2MDAwMDEwMkE2MDYxQTg2NjQwMDAwMDAwMzM4Cis6MTAwRjAwMDAwNDFBODY3MDAwMDEwMkE3MDYxQTg2NzQwMDAwMDAwMzA2Cis6MTAwRjEwMDAwNDFBODY4MDAwMDEwMkE4MDYxQTg2ODQwMDAwMDAwM0Q1Cis6MTAwRjIwMDAwNDFBODY5MDAwMDEwMkE5MDYxQTg2OTQwMDAwMDAwM0E0Cis6MTAwRjMwMDAwNDFBODZBMDAwMDEwMkFBMDYxQTg2QTQwMDAwMDAwMzczCis6MTAwRjQwMDAwNDFBODZCMDAwMDEwMkFCMDYxQTg2QjQwMDAwMDAwMzQyCis6MTAwRjUwMDAwNDFBODZDMDAwMDEwMkFDMDYxQTg2QzQwMDAwMDAwMzExCis6MTAwRjYwMDAwNDFBODZEMDAwMDEwMkFEMDYxQTg2RDQwMDAwMDAwM0UwCis6MTAwRjcwMDAwNDFBODZFMDAwMDEwMkFFMDYxQTg2RTQwMDAwMDAwM0FGCis6MTAwRjgwMDAwNDFBODZGMDAwMDEwMkFGMDYxQTg2RjQwMDAwMDAwMzdFCis6MTAwRjkwMDAwNDFBODcwMDAwMDEwMkIwMDYxQTg3MDQwMDAwMDAwMzRCCis6MTAwRkEwMDAwNDFBODcxMDAwMDEwMkIxMDYxQTg3MTQwMDAwMDAwMzFBCis6MTAwRkIwMDAwNDFBODcyMDAwMDEwMkIyMDYxQTg3MjQwMDAwMDAwM0U5Cis6MTAwRkMwMDAwNDFBODczMDAwMDEwMkIzMDYxQTg3MzQwMDAwMDAwM0I4Cis6MTAwRkQwMDAwNDFBODc0MDAwMDEwMkI0MDYxQTg3NDQwMDAwMDAwMzg3Cis6MTAwRkUwMDAwNDFBODc1MDAwMDEwMkI1MDYxQTg3NTQwMDAwMDAwMzU2Cis6MTAwRkYwMDAwNDFBODc2MDAwMDEwMkI2MDYxQTg3NjQwMDAwMDAwMzI1Cis6MTAxMDAwMDAwNDFBODc3MDAwMDEwMkI3MDYxQTg3NzQwMDAwMDAwM0YzCis6MTAxMDEwMDAwNDFBODc4MDAwMDEwMkI4MDYxQTg3ODQwMDAwMDAwM0MyCis6MTAxMDIwMDAwNDFBODc5MDAwMDEwMkI5MDYxQTg3OTQwMDAwMDAwMzkxCis6MTAxMDMwMDAwNDFBODdBMDAwMDEwMkJBMDYxQTg3QTQwMDAwMDAwMzYwCis6MTAxMDQwMDAwNDFBODdCMDAwMDEwMkJCMDYxQTg3QjQwMDAwMDAwMzJGCis6MTAxMDUwMDAwNDFBODdDMDAwMDEwMkJDMDYxQTg3QzQwMDAwMDAwM0ZFCis6MTAxMDYwMDAwNDFBODdEMDAwMDEwMkJEMDYxQTg3RDQwMDAwMDAwM0NECis6MTAxMDcwMDAwNDFBODdFMDAwMDEwMkJFMDYxQTg3RTQwMDAwMDAwMzlDCis6MTAxMDgwMDAwNDFBODdGMDAwMDEwMkJGMDYxQTg3RjQwMDAwMDAwMzZCCis6MTAxMDkwMDAwNDFBODgwMDAwMDEwMkMwMDYxQTg4MDQwMDAwMDAwMzM4Cis6MTAxMEEwMDAwNDFBODgxMDAwMDEwMkMxMDYxQTg4MTQwMDAwMDAwMzA3Cis6MTAxMEIwMDAwNDFBODgyMDAwMDEwMkMyMDYxQTg4MjQwMDAwMDAwM0Q2Cis6MTAxMEMwMDAwNDFBODgzMDAwMDEwMkMzMDYxQTg4MzQwMDAwMDAwM0E1Cis6MTAxMEQwMDAwNDFBODg0MDAwMDEwMkM0MDYxQTg4NDQwMDAwMDAwMzc0Cis6MTAxMEUwMDAwNDFBODg1MDAwMDEwMkM1MDYxQTg4NTQwMDAwMDAwMzQzCis6MTAxMEYwMDAwNDFBODg2MDAwMDEwMkM2MDYxQTg4NjQwMDAwMDAwMzEyCis6MTAxMTAwMDAwNDFBODg3MDAwMDEwMkM3MDYxQTg4NzQwMDAwMDAwM0UwCis6MTAxMTEwMDAwNDFBODg4MDAwMDEwMkM4MDYxQTg4ODQwMDAwMDAwM0FGCis6MTAxMTIwMDAwNDFBODg5MDAwMDEwMkM5MDYxQTg4OTQwMDAwMDAwMzdFCis6MTAxMTMwMDAwNDFBODhBMDAwMDEwMkNBMDYxQTg4QTQwMDAwMDAwMzRECis6MTAxMTQwMDAwNDFBODhCMDAwMDEwMkNCMDYxQTg4QjQwMDAwMDAwMzFDCis6MTAxMTUwMDAwNDFBODhDMDAwMDEwMkNDMDYxQTg4QzQwMDAwMDAwM0VCCis6MTAxMTYwMDAwNDFBODhEMDAwMDEwMkNEMDYxQTg4RDQwMDAwMDAwM0JBCis6MTAxMTcwMDAwNDFBODhFMDAwMDEwMkNFMDYxQTg4RTQwMDAwMDAwMzg5Cis6MTAxMTgwMDAwNDFBODhGMDAwMDEwMkNGMDYxQTg4RjQwMDAwMDAwMzU4Cis6MTAxMTkwMDAwNDFBODkwMDAwMDEwMkQwMDYxQTg5MDQwMDAwMDAwMzI1Cis6MTAxMUEwMDAwNDFBODkxMDAwMDEwMkQxMDYxQTg5MTQwMDAwMDAwM0Y0Cis6MTAxMUIwMDAwNDFBODkyMDAwMDEwMkQyMDYxQTg5MjQwMDAwMDAwM0MzCis6MTAxMUMwMDAwNDFBODkzMDAwMDEwMkQzMDYxQTg5MzQwMDAwMDAwMzkyCis6MTAxMUQwMDAwNDFBODk0MDAwMDEwMkQ0MDYxQTg5NDQwMDAwMDAwMzYxCis6MTAxMUUwMDAwNDFBODk1MDAwMDEwMkQ1MDYxQTg5NTQwMDAwMDAwMzMwCis6MTAxMUYwMDAwNDFBODk2MDAwMDEwMkQ2MDYxQTg5NjQwMDAwMDAwM0ZGCis6MTAxMjAwMDAwNDFBODk3MDAwMDEwMkQ3MDYxQTg5NzQwMDAwMDAwM0NECis6MTAxMjEwMDAwNDFBODk4MDAwMDEwMkQ4MDYxQTg5ODQwMDAwMDAwMzlDCis6MTAxMjIwMDAwNDFBODk5MDAwMDEwMkQ5MDYxQTg5OTQwMDAwMDAwMzZCCis6MTAxMjMwMDAwNDFBODlBMDAwMDEwMkRBMDYxQTg5QTQwMDAwMDAwMzNBCis6MTAxMjQwMDAwNDFBODlCMDAwMDEwMkRCMDYxQTg5QjQwMDAwMDAwMzA5Cis6MTAxMjUwMDAwNDFBODlDMDAwMDEwMkRDMDYxQTg5QzQwMDAwMDAwM0Q4Cis6MTAxMjYwMDAwNDFBODlEMDAwMDEwMkREMDYxQTg5RDQwMDAwMDAwM0E3Cis6MTAxMjcwMDAwNDFBODlFMDAwMDEwMkRFMDYxQTg5RTQwMDAwMDAwMzc2Cis6MTAxMjgwMDAwNDFBODlGMDAwMDEwMkRGMDYxQTg5RjQwMDAwMDAwMzQ1Cis6MTAxMjkwMDAwNDFBOEEwMDAwMDEwMkUwMDYxQThBMDQwMDAwMDAwMzEyCis6MTAxMkEwMDAwNDFBOEExMDAwMDEwMkUxMDYxQThBMTQwMDAwMDAwM0UxCis6MTAxMkIwMDAwNDFBOEEyMDAwMDEwMkUyMDYxQThBMjQwMDAwMDAwM0IwCis6MTAxMkMwMDAwNDFBOEEzMDAwMDEwMkUzMDYxQThBMzQwMDAwMDAwMzdGCis6MTAxMkQwMDAwNDFBOEE0MDAwMDEwMkU0MDYxQThBNDQwMDAwMDAwMzRFCis6MTAxMkUwMDAwNDFBOEE1MDAwMDEwMkU1MDYxQThBNTQwMDAwMDAwMzFECis6MTAxMkYwMDAwNDFBOEE2MDAwMDEwMkU2MDYxQThBNjQwMDAwMDAwM0VDCis6MTAxMzAwMDAwNDFBOEE3MDAwMDEwMkU3MDYxQThBNzQwMDAwMDAwM0JBCis6MTAxMzEwMDAwNDFBOEE4MDAwMDEwMkU4MDYxQThBODQwMDAwMDAwMzg5Cis6MTAxMzIwMDAwNDFBOEE5MDAwMDEwMkU5MDYxQThBOTQwMDAwMDAwMzU4Cis6MTAxMzMwMDAwNDFBOEFBMDAwMDEwMkVBMDYxQThBQTQwMDAwMDAwMzI3Cis6MTAxMzQwMDAwNDFBOEFCMDAwMDEwMkVCMDYxQThBQjQwMDAwMDAwM0Y2Cis6MTAxMzUwMDAwNDFBOEFDMDAwMDEwMkVDMDYxQThBQzQwMDAwMDAwM0M1Cis6MTAxMzYwMDAwNDFBOEFEMDAwMDEwMkVEMDYxQThBRDQwMDAwMDAwMzk0Cis6MTAxMzcwMDAwNDFBOEFFMDAwMDEwMkVFMDYxQThBRTQwMDAwMDAwMzYzCis6MTAxMzgwMDAwNDFBOEFGMDAwMDEwMkVGMDYxQThBRjQwMDAwMDAwMzMyCis6MTAxMzkwMDAwNDFBOEIwMDAwMDEwMkYwMDYxQThCMDQwMDAwMDAwM0ZGCis6MTAxM0EwMDAwNDFBOEIxMDAwMDEwMkYxMDYxQThCMTQwMDAwMDAwM0NFCis6MTAxM0IwMDAwNDFBOEIyMDAwMDEwMkYyMDYxQThCMjQwMDAwMDAwMzlECis6MTAxM0MwMDAwNDFBOEIzMDAwMDEwMkYzMDYxQThCMzQwMDAwMDAwMzZDCis6MTAxM0QwMDAwNDFBOEI0MDAwMDEwMkY0MDYxQThCNDQwMDAwMDAwMzNCCis6MTAxM0UwMDAwNDFBOEI1MDAwMDEwMkY1MDYxQThCNTQwMDAwMDAwMzBBCis6MTAxM0YwMDAwNDFBOEI2MDAwMDEwMkY2MDYxQThCNjQwMDAwMDAwM0Q5Cis6MTAxNDAwMDAwNDFBOEI3MDAwMDEwMkY3MDYxQThCNzQwMDAwMDAwM0E3Cis6MTAxNDEwMDAwNDFBOEI4MDAwMDEwMkY4MDYxQThCODQwMDAwMDAwMzc2Cis6MTAxNDIwMDAwNDFBOEI5MDAwMDEwMkY5MDYxQThCOTQwMDAwMDAwMzQ1Cis6MTAxNDMwMDAwNDFBOEJBMDAwMDEwMkZBMDYxQThCQTQwMDAwMDAwMzE0Cis6MTAxNDQwMDAwNDFBOEJCMDAwMDEwMkZCMDYxQThCQjQwMDAwMDAwM0UzCis6MTAxNDUwMDAwNDFBOEJDMDAwMDEwMkZDMDYxQThCQzQwMDAwMDAwM0IyCis6MTAxNDYwMDAwNDFBOEJEMDAwMDEwMkZEMDYxQThCRDQwMDAwMDAwMzgxCis6MTAxNDcwMDAwNDFBOEJFMDAwMDEwMkZFMDYxQThCRTQwMDAwMDAwMzUwCis6MTAxNDgwMDAwNDFBOEJGMDAwMDEwMkZGMDYxQThCRjQwMDAwMDAwMzFGCis6MTAxNDkwMDAwNDFBOEMwMDAwMDEwMzAwMDYxQThDMDQwMDAwMDAwM0VCCis6MTAxNEEwMDAwNDFBOEMxMDAwMDEwMzAxMDYxQThDMTQwMDAwMDAwM0JBCis6MTAxNEIwMDAwNDFBOEMyMDAwMDEwMzAyMDYxQThDMjQwMDAwMDAwMzg5Cis6MTAxNEMwMDAwNDFBOEMzMDAwMDEwMzAzMDYxQThDMzQwMDAwMDAwMzU4Cis6MTAxNEQwMDAwNDFBOEM0MDAwMDEwMzA0MDYxQThDNDQwMDAwMDAwMzI3Cis6MTAxNEUwMDAwNDFBOEM1MDAwMDEwMzA1MDYxQThDNTQwMDAwMDAwM0Y2Cis6MTAxNEYwMDAwNDFBOEM2MDAwMDEwMzA2MDYxQThDNjQwMDAwMDAwM0M1Cis6MTAxNTAwMDAwNDFBOEM3MDAwMDEwMzA3MDYxQThDNzQwMDAwMDAwMzkzCis6MTAxNTEwMDAwNDFBOEM4MDAwMDEwMzA4MDYxQThDODQwMDAwMDAwMzYyCis6MTAxNTIwMDAwNDFBOEM5MDAwMDEwMzA5MDYxQThDOTQwMDAwMDAwMzMxCis6MTAxNTMwMDAwNDFBOENBMDAwMDEwMzBBMDYxQThDQTQwMDAwMDAwMzAwCis6MTAxNTQwMDAwNDFBOENCMDAwMDEwMzBCMDYxQThDQjQwMDAwMDAwM0NGCis6MTAxNTUwMDAwNDFBOENDMDAwMDEwMzBDMDYxQThDQzQwMDAwMDAwMzlFCis6MTAxNTYwMDAwNDFBOENEMDAwMDEwMzBEMDYxQThDRDQwMDAwMDAwMzZECis6MTAxNTcwMDAwNDFBOENFMDAwMDEwMzBFMDYxQThDRTQwMDAwMDAwMzNDCis6MTAxNTgwMDAwNDFBOENGMDAwMDEwMzBGMDYxQThDRjQwMDAwMDAwMzBCCis6MTAxNTkwMDAwNDFBOEQwMDAwMDEwMzEwMDYxQThEMDQwMDAwMDAwM0Q4Cis6MTAxNUEwMDAwNDFBOEQxMDAwMDEwMzExMDYxQThEMTQwMDAwMDAwM0E3Cis6MTAxNUIwMDAwNDFBOEQyMDAwMDEwMzEyMDYxQThEMjQwMDAwMDAwMzc2Cis6MTAxNUMwMDAwNDFBOEQzMDAwMDEwMzEzMDYxQThEMzQwMDAwMDAwMzQ1Cis6MTAxNUQwMDAwNDFBOEQ0MDAwMDEwMzE0MDYxQThENDQwMDAwMDAwMzE0Cis6MTAxNUUwMDAwNDFBOEQ1MDAwMDEwMzE1MDYxQThENTQwMDAwMDAwM0UzCis6MTAxNUYwMDAwNDFBOEQ2MDAwMDEwMzE2MDYxQThENjQwMDAwMDAwM0IyCis6MTAxNjAwMDAwNDFBOEQ3MDAwMDEwMzE3MDYxQThENzQwMDAwMDAwMzgwCis6MTAxNjEwMDAwNDFBOEQ4MDAwMDEwMzE4MDYxQThEODQwMDAwMDAwMzRGCis6MTAxNjIwMDAwNDFBOEQ5MDAwMDEwMzE5MDYxQThEOTQwMDAwMDAwMzFFCis6MTAxNjMwMDAwNDFBOERBMDAwMDEwMzFBMDYxQThEQTQwMDAwMDAwM0VECis6MTAxNjQwMDAwNDFBOERCMDAwMDEwMzFCMDYxQThEQjQwMDAwMDAwM0JDCis6MTAxNjUwMDAwNDFBOERDMDAwMDEwMzFDMDYxQThEQzQwMDAwMDAwMzhCCis6MTAxNjYwMDAwNDFBOEREMDAwMDEwMzFEMDYxQThERDQwMDAwMDAwMzVBCis6MTAxNjcwMDAwNDFBOERFMDAwMDEwMzFFMDYxQThERTQwMDAwMDAwMzI5Cis6MTAxNjgwMDAwNDFBOERGMDAwMDEwMzFGMDYxQThERjQwMDAwMDAwM0Y4Cis6MTAxNjkwMDAwNDFBOEUwMDAwMDEwMzIwMDYxQThFMDQwMDAwMDAwM0M1Cis6MTAxNkEwMDAwNDFBOEUxMDAwMDEwMzIxMDYxQThFMTQwMDAwMDAwMzk0Cis6MTAxNkIwMDAwNDFBOEUyMDAwMDEwMzIyMDYxQThFMjQwMDAwMDAwMzYzCis6MTAxNkMwMDAwNDFBOEUzMDAwMDEwMzIzMDYxQThFMzQwMDAwMDAwMzMyCis6MTAxNkQwMDAwNDFBOEU0MDAwMDEwMzI0MDYxQThFNDQwMDAwMDAwMzAxCis6MTAxNkUwMDAwNDFBOEU1MDAwMDEwMzI1MDYxQThFNTQwMDAwMDAwM0QwCis6MTAxNkYwMDAwNDFBOEU2MDAwMDEwMzI2MDYxQThFNjQwMDAwMDAwMzlGCis6MTAxNzAwMDAwNDFBOEU3MDAwMDEwMzI3MDYxQThFNzQwMDAwMDAwMzZECis6MTAxNzEwMDAwNDFBOEU4MDAwMDEwMzI4MDYxQThFODQwMDAwMDAwMzNDCis6MTAxNzIwMDAwNDFBOEU5MDAwMDEwMzI5MDYxQThFOTQwMDAwMDAwMzBCCis6MTAxNzMwMDAwNDFBOEVBMDAwMDEwMzJBMDYxQThFQTQwMDAwMDAwM0RBCis6MTAxNzQwMDAwNDFBOEVCMDAwMDEwMzJCMDYxQThFQjQwMDAwMDAwM0E5Cis6MTAxNzUwMDAwNDFBOEVDMDAwMDEwMzJDMDYxQThFQzQwMDAwMDAwMzc4Cis6MTAxNzYwMDAwNDFBOEVEMDAwMDEwMzJEMDYxQThFRDQwMDAwMDAwMzQ3Cis6MTAxNzcwMDAwNDFBOEVFMDAwMDEwMzJFMDYxQThFRTQwMDAwMDAwMzE2Cis6MTAxNzgwMDAwNDFBOEVGMDAwMDEwMzJGMDYxQThFRjQwMDAwMDAwM0U1Cis6MTAxNzkwMDAwNDFBOEYwMDAwMDEwMzMwMDYxQThGMDQwMDAwMDAwM0IyCis6MTAxN0EwMDAwNDFBOEYxMDAwMDEwMzMxMDYxQThGMTQwMDAwMDAwMzgxCis6MTAxN0IwMDAwNDFBOEYyMDAwMDEwMzMyMDYxQThGMjQwMDAwMDAwMzUwCis6MTAxN0MwMDAwNDFBOEYzMDAwMDEwMzMzMDYxQThGMzQwMDAwMDAwMzFGCis6MTAxN0QwMDAwNDFBOEY0MDAwMDEwMzM0MDYxQThGNDQwMDAwMDAwM0VFCis6MTAxN0UwMDAwNDFBOEY1MDAwMDEwMzM1MDYxQThGNTQwMDAwMDAwM0JECis6MTAxN0YwMDAwNDFBOEY2MDAwMDEwMzM2MDYxQThGNjQwMDAwMDAwMzhDCis6MTAxODAwMDAwNDFBOEY3MDAwMDEwMzM3MDYxQThGNzQwMDAwMDAwMzVBCis6MTAxODEwMDAwNDFBOEY4MDAwMDEwMzM4MDYxQThGODQwMDAwMDAwMzI5Cis6MTAxODIwMDAwNDFBOEY5MDAwMDEwMzM5MDYxQThGOTQwMDAwMDAwM0Y4Cis6MTAxODMwMDAwNDFBOEZBMDAwMDEwMzNBMDYxQThGQTQwMDAwMDAwM0M3Cis6MTAxODQwMDAwNDFBOEZCMDAwMDEwMzNCMDYxQThGQjQwMDAwMDAwMzk2Cis6MTAxODUwMDAwNDFBOEZDMDAwMDEwMzNDMDYxQThGQzQwMDAwMDAwMzY1Cis6MTAxODYwMDAwNDFBOEZEMDAwMDEwMzNEMDYxQThGRDQwMDAwMDAwMzM0Cis6MTAxODcwMDAwNDFBOEZFMDAwMDEwMzNFMDYxQThGRTQwMDAwMDAwN0ZGCis6MTAxODgwMDAwNDFBNjJDMDAwMjAwMzNGMDYxQUQwMDAwMDAwMDA3MjU0Cis6MTAxODkwMDAwNjFBRDI0ODAwMDAwMDEwMDYxQUQ2QjAwMDAwMDAyMDM4Cis6MTAxOEEwMDAwNjFBRDQ3MDAwMDAwMDkwMDYxQUQ0NjgwMDAwMDAwMkU2Cis6MTAxOEIwMDAwNjFBQTAwMDAwMDAwMUM0MDYxQTMwMDAwMDAwMDAxMDQzCis6MTAxOEMwMDAwNjFBMzA4MDAwMDAwMDEwMDYxQTMxMDAwMDAwMDAxMEQ3Cis6MTAxOEQwMDAwNjFBMzE4MDAwMDAwMDEwMDYxQTMzMDAwMDAwMDAxMkMyCis6MTAxOEUwMDAwNjFBMzM5MDAwMDAwMDcwMDYxQUQ0NTgwMDAwMDAwMjU3Cis6MTAxOEYwMDAwNjFBRDM0ODAwMDAwMDAyMDYxQUQzNTgwMDAwMDAyMDQwCis6MTAxOTAwMDAwNjFBQTcxMDAwMDAwMUM0MDYxQTMwNDAwMDAwMDAxMDlCCis6MTAxOTEwMDAwNjFBMzBDMDAwMDAwMDEwMDYxQTMxNDAwMDAwMDAxMDA2Cis6MTAxOTIwMDAwNjFBMzFDMDAwMDAwMDEwMDYxQTMzNDgwMDAwMDAxMkU5Cis6MTAxOTMwMDAwNjFBMzU1MDAwMDAwMDcwMDYxQUQ0NjAwMDAwMDAwMjNDCis6MTAxOTQwMDAwNjFBRDM1MDAwMDAwMDAyMDYxQUQzRDgwMDAwMDAyMDY3Cis6MTAxOTUwMDAwMjFBQUUyMDAwMDAwMDAwMDYxQTUwMDAwMDAwMDAwMjJCCis6MTAxOTYwMDAwNjFBNTA4MDAwMDAwMDEyMDQxQTQwMDAwMDAyMDM1RkIzCis6MTAxOTcwMDAwNDFBNjNDMDAwMDIwMzYxMDYxQTcwMDAwMDAwMDAwNDJDCis6MTAxOTgwMDAwNjFBMzIwMDAwMDAwMDA4MDIxQUFFMjQwMDAwMDAwMDBGCis6MTAxOTkwMDAwNjFBNTAxMDAwMDAwMDAyMDYxQTUwQzgwMDAwMDAxMjdCCis6MTAxOUEwMDAwNDFBNDAwODAwMDIwMzYzMDQxQTYzQzgwMDAyMDM2NUI2Cis6MTAxOUIwMDAwNjFBNzAxMDAwMDAwMDA0MDYxQTMyMjAwMDAwMDAwODA5Cis6MTAxOUMwMDAwMjFBQUUyODAwMDAwMDAwMDYxQTUwMjAwMDAwMDAwMjkzCis6MTAxOUQwMDAwNjFBNTExMDAwMDAwMDEyMDQxQTQwMTAwMDAyMDM2NzlBCis6MTAxOUUwMDAwNDFBNjNEMDAwMDIwMzY5MDYxQTcwMjAwMDAwMDAwNDg0Cis6MTAxOUYwMDAwNjFBMzI0MDAwMDAwMDA4MDIxQUFFMkMwMDAwMDAwMDU3Cis6MTAxQTAwMDAwNjFBNTAzMDAwMDAwMDAyMDYxQTUxNTgwMDAwMDAxMjU5Cis6MTAxQTEwMDAwNDFBNDAxODAwMDIwMzZCMDQxQTYzRDgwMDAyMDM2RDE1Cis6MTAxQTIwMDAwNjFBNzAzMDAwMDAwMDA0MDYxQTMyNjAwMDAwMDAwODM4Cis6MTAxQTMwMDAwMjFBQUUzMDAwMDAwMDAwMDYxQTUwNDAwMDAwMDAwMkZBCis6MTAxQTQwMDAwNjFBNTFBMDAwMDAwMDEyMDQxQTQwMjAwMDAyMDM2RjgxCis6MTAxQTUwMDAwNDFBNjNFMDAwMDIwMzcxMDYxQTcwNDAwMDAwMDAwNERCCis6MTAxQTYwMDAwNjFBMzI4MDAwMDAwMDA4MDIxQUFFMzQwMDAwMDAwMDlFCis6MTAxQTcwMDAwNjFBNTA1MDAwMDAwMDAyMDYxQTUxRTgwMDAwMDAxMjM5Cis6MTAxQTgwMDAwNDFBNDAyODAwMDIwMzczMDQxQTYzRTgwMDAyMDM3NTc1Cis6MTAxQTkwMDAwNjFBNzA1MDAwMDAwMDA0MDYxQTMyQTAwMDAwMDAwODY4Cis6MTAxQUEwMDAwMjFBQUUzODAwMDAwMDAwMDYxQTUwNjAwMDAwMDAwMjYyCis6MTAxQUIwMDAwNjFBNTIzMDAwMDAwMDEyMDQxQTQwMzAwMDAyMDM3NzY4Cis6MTAxQUMwMDAwNDFBNjNGMDAwMDIwMzc5MDYxQTcwNjAwMDAwMDAwNDMzCis6MTAxQUQwMDAwNjFBMzJDMDAwMDAwMDA4MDIxQUFFM0MwMDAwMDAwMEU2Cis6MTAxQUUwMDAwNjFBNTA3MDAwMDAwMDAyMDYxQTUyNzgwMDAwMDAxMjE4Cis6MTAxQUYwMDAwNDFBNDAzODAwMDIwMzdCMDQxQTYzRjgwMDAyMDM3REQ1Cis6MTAxQjAwMDAwNjFBNzA3MDAwMDAwMDA0MDYxQTMyRTAwMDAwMDAwODk3Cis6MTAxQjEwMDAwMjAwQTQ2ODAwMEIwMUM4MDIwMEEyOTQwNzFEMjkxMTRECis6MTAxQjIwMDAwMjAwQTI5ODAwMDAwMDAwMDIwMEEyOUMwMDlDMDQyNDc1Cis6MTAxQjMwMDAwMjAwQTJBMDAwMDAwMDAwMDIwMEEyQTQwMDAwMDIwOTBFCis6MTAxQjQwMDAwMjAwQTI3MDAwMDAwMDAwMDIwMEEyNzQwMDAwMDAwMDY5Cis6MTAxQjUwMDAwMjAwQTI3MDAwMDAwMDAwMDIwMEEyNzQwMDAwMDAwMDU5Cis6MTAxQjYwMDAwMjAwQTI3MDAwMDAwMDAwMDIwMEEyNzQwMDAwMDAwMDQ5Cis6MTAxQjcwMDAwMjAwQTI3MDAwMDAwMDAwMDIwMEEyNzQwMDAwMDAwMDM5Cis6MTAxQjgwMDAwMjAxNjBBMDAwMDAwMDAxMDIwMTYwQTQwMDAwMDI2MkU2Cis6MTAxQjkwMDAwMjAxNjBBODAwMDAwMDAyMDIwMTYwQUMwMDAwMDAxODExCis6MTAxQkEwMDAwMjAxNjIwNDAwMDAwMDAxMDIwMTAwQjQwMDAwMDAwMTEzCis6MTAxQkIwMDAwMjAxMDBCODAwMDAwMDAxMDIwMTAwREMwMDAwMDAwMTg5Cis6MTAxQkMwMDAwMjAxMDEwMDAwMDAwMDAxMDIwMTAxMDQwMDAwMDAwMTA3Cis6MTAxQkQwMDAwMjAxMDA3QzAwMzAwMDAwMDIwMTAwODQwMDAwMDAyOEE3Cis6MTAxQkUwMDAwMjAxMDA4QzAwMDAwMDAwMDIwMTAxMzAwMDAwMDAwNDJFCis6MTAxQkYwMDAwMjAxMDI1QzAwMDAwMDAxMDIwMTAzMjgwMDAwMDAwMDU1Cis6MTAxQzAwMDAwMjAxNjA1ODAwMDBGRkZGMDIwMTYwNzAwMDAwMDAwNzQxCis6MTAxQzEwMDAwMjAxNjA4MDAwMDAwMDAxMDIwMTA1NTQwMDAwMDAzMDU0Cis6MTAxQzIwMDAwMjAxMDBDNDAwMDAwMDAxMDIwMTAwQ0MwMDAwMDAwMTFDCis6MTAxQzMwMDAwMjAxMDBGODAwMDAwMDAxMDIwMTAwRjAwMDAwMDAwMUI0Cis6MTAxQzQwMDAwMjAxMDA4MDAwMzAwMDAwMDIwMTAwODgwMDAwMDAyODJFCis6MTAxQzUwMDAwMjAxMDA5MDAwMDAwMDAwMDIwMTAxMzQwMDAwMDAwNEI1Cis6MTAxQzYwMDAwMjAxMDJEQzAwMDAwMDAxMDIwMTAzMkMwMDAwMDAwMDYwCis6MTAxQzcwMDAwMjAxNjA1QzAwMDBGRkZGMDIwMTYwNzQwMDAwMDAwN0M5Cis6MTAxQzgwMDAwMjAxNjA4NDAwMDAwMDAxMDIwMTA1NjQwMDAwMDAzMEQwCis6MTAxQzkwMDAwMjAxMDBDODAwMDAwMDAxMDIwMTAwRDAwMDAwMDAwMUE0Cis6MTAxQ0EwMDAwMjAxMDBGQzAwMDAwMDAxMDIwMTAwRjQwMDAwMDAwMTNDCis6MTAxQ0IwMDAwMjBDMTAwMDAwMDAwMDI4MDIwQzIwMDgwMDAwMDIxMTk1Cis6MTAxQ0MwMDAwMjBDMjAwQzAwMDAwMjAwMDIwQzIwMTAwMDAwMDIwNDk0Cis6MTAxQ0QwMDAwMjBDMjAxQzAwMDBGRkZGMDIwQzIwMjAwMDAwRkZGRjcwCis6MTAxQ0UwMDAwMjBDMjAyNDAwMDBGRkZGMDIwQzIwMjgwMDAwRkZGRjUwCis6MTAxQ0YwMDAwMjBDMjAzODAwMDAwMDIwMDIwQzIwM0MwMDAwMDAyMUQzCis6MTAxRDAwMDAwMjBDMjA0MDAwMDAwMDIyMDIwQzIwNDQwMDAwMDAyM0FFCis6MTAxRDEwMDAwMjBDMjA0ODAwMDAwMDI0MDIwQzIwNEMwMDAwMDAyNThBCis6MTAxRDIwMDAwMjBDMjA1MDAwMDAwMDI2MDIwQzIwNTQwMDAwMDAyNzY2Cis6MTAxRDMwMDAwMjBDMjA1ODAwMDAwMDI4MDIwQzIwNUMwMDAwMDAyOTQyCis6MTAxRDQwMDAwMjBDMjA2MDAwMDAwMDJBMDIwQzIwNjQwMDAwMDAyQjFFCis6MTAxRDUwMDAwMjBDMjA2ODAwMDAwMDJDMDIwQzIwNkMwMDAwMDAyREZBCis6MTAxRDYwMDAwMjBDMjA3MDAwMDAwMDJFMDIwQzIwNzQwMDAwMDAyRkQ2Cis6MTAxRDcwMDAwMjBDMjA3ODAwMDAwMDEwMDYwQzIwN0MwMDAwMDAwN0Y4Cis6MTAxRDgwMDAwMjBDMjA5ODAwMDAwMDExMDIwQzIwOUMwMDAwMDAxMkEwCis6MTAxRDkwMDAwMjBDMjBBMDAwMDAwMDEzMDYwQzIwQTQwMDAwMDAxRDZGCis6MTAxREEwMDAwMjBDMjExODAwMDAwMDAxMDIwQzIxMUMwMDAwMDAwMTlGCis6MTAxREIwMDAwMjBDMjEyMDAwMDAwMDAxMDYwQzIxMjQwMDAwMDAxRDVGCis6MTAxREMwMDAwMjBDMjE5ODAwMDAwMDAxMDYwQzIxOUMwMDAwMDAwNzc1Cis6MTAxREQwMDAwMjBDMjFCODAwMDAwMDAxMDIwQzIxQkMwMDAwMDAwMTJGCis6MTAxREUwMDAwMjBDMjFDMDAwMDAwMDAxMDIwQzIxQzQwMDAwMDAwMTBGCis6MTAxREYwMDAwMjBDMjFDODAwMDAwMDAxMDIwQzIxQ0MwMDAwMDAwMUVGCis6MTAxRTAwMDAwMjBDMjFEMDAwMDAwMDAxMDIwQzIxRDQwMDAwMDAwMUNFCis6MTAxRTEwMDAwMjBDMjFEODAwMDAwMDAxMDIwQzIxREMwMDAwMDAwMUFFCis6MTAxRTIwMDAwMjBDMjFFMDAwMDAwMDAxMDIwQzIxRTQwMDAwMDAwMThFCis6MTAxRTMwMDAwMjBDMjFFODAwMDAwMDAxMDIwQzIxRUMwMDAwMDAwMTZFCis6MTAxRTQwMDAwMjBDMjFGMDAwMDAwMDAxMDIwQzIxRjQwMDAwMDAwMTRFCis6MTAxRTUwMDAwMjBDMjFGODAwMDAwMDAxMDYwQzIxRkMwMDAwMDAwNzI0Cis6MTAxRTYwMDAwMjBDMjIxODAwMDAwMDAxMDYwQzIyMUMwMDAwMDAwN0QyCis6MTAxRTcwMDAwMjBDMjIzODA3RkZGRkZGMDIwQzIyM0MwMDAwMDAzRjRCCis6MTAxRTgwMDAwMjBDMjI0MDA3RkZGRkZGMDIwQzIyNDQwMDAwMDAwRjVCCis6MTAxRTkwMDAwMTBDMjI0ODAwMDAwMDAwMDEwQzIyNEMwMDAwMDAwMDUwCis6MTAxRUEwMDAwMTBDMjI1MDAwMDAwMDAwMDEwQzIyNTQwMDAwMDAwMDMwCis6MTAxRUIwMDAwMTBDMjI1ODAwMDAwMDAwMDEwQzIyNUMwMDAwMDAwMDEwCis6MTAxRUMwMDAwMTBDMjI2MDAwMDAwMDAwMDEwQzIyNjQwMDAwMDAwMEYwCis6MTAxRUQwMDAwMTBDMjI2ODAwMDAwMDAwMDEwQzIyNkMwMDAwMDAwMEQwCis6MTAxRUUwMDAwMTBDMjI3MDAwMDAwMDAwMDEwQzIyNzQwMDAwMDAwMEIwCis6MTAxRUYwMDAwMTBDMjI3ODAwMDAwMDAwMDEwQzIyN0MwMDAwMDAwMDkwCis6MTAxRjAwMDAwQzBDMjAwMDAwMDAwM0U4MEEwQzIwMDAwMDAwMDAwMTc3Cis6MTAxRjEwMDAwQjBDMjAwMDAwMDAwMDBBMDIwQzQwMDgwMDAwMTAxMTA5Cis6MTAxRjIwMDAwMjBDNDAwQzAwMDAxMDAwMDIwQzQwMTAwMDAwMTAwNEQ1Cis6MTAxRjMwMDAwMjBDNDAxNDAwMDAxMDIxMDIwQzQwMUMwMDAwRkZGRkE2Cis6MTAxRjQwMDAwMjBDNDAyMDAwMDBGRkZGMDIwQzQwMjQwMDAwRkZGRkI1Cis6MTAxRjUwMDAwMjBDNDAyODAwMDBGRkZGMDIwQzQwMzgwMDAwMDA0NjQxCis6MTAxRjYwMDAwMjBDNDAzQzAwMDAwMDEwMDYwQzQwNDAwMDAwMDAwMjQzCis6MTAxRjcwMDAwMjBDNDA0ODAwMDAwMDE4MDIwQzQwNEMwMDAwMDBGMDI5Cis6MTAxRjgwMDAwNjBDNDA1MDAwMDAwMDFGMDIwQzQwQ0MwMDAwMDAwMTc1Cis6MTAxRjkwMDAwNjBDNDBEMDAwMDAwMDNBMDIwQzQxQjgwMDAwMDAwMURECis6MTAxRkEwMDAwNjBDNDFCQzAwMDAwMDAzMDIwQzQxQzgwMDAwMDAwMTA3Cis6MTAxRkIwMDAwMjBDNDFDQzAwMDAwMDAxMDYwQzQxRDAwMDAwMDAxQUM4Cis6MTAxRkMwMDAwMjBDNDIzODA3RkZGRkZGMDIwQzQyM0MwMDAwMDAzRkJBCis6MTAxRkQwMDAwMjBDNDI0MDA3RkZGRkZGMDIwQzQyNDQwMDAwMDAwRkNBCis6MTAxRkUwMDAwMTBDNDI0ODAwMDAwMDAwMDEwQzQyNEMwMDAwMDAwMEJGCis6MTAxRkYwMDAwMTBDNDI1MDAwMDAwMDAwMDEwQzQyNTQwMDAwMDAwMDlGCis6MTAyMDAwMDAwMTBDNDI1ODAwMDAwMDAwMDEwQzQyNUMwMDAwMDAwMDdFCis6MTAyMDEwMDAwMTBDNDI2MDAwMDAwMDAwMDEwQzQyNjQwMDAwMDAwMDVFCis6MTAyMDIwMDAwMTBDNDI2ODAwMDAwMDAwMDEwQzQyNkMwMDAwMDAwMDNFCis6MTAyMDMwMDAwMTBDNDI3MDAwMDAwMDAwMDEwQzQyNzQwMDAwMDAwMDFFCis6MTAyMDQwMDAwMTBDNDI3ODAwMDAwMDAwMDEwQzQyN0MwMDAwMDAwMEZFCis6MTAyMDUwMDAwMTBDNDI4MDAwMDAwMDAwMEMwQzQwMDAwMDAwMDNFODZFCis6MTAyMDYwMDAwQTBDNDAwMDAwMDAwMDAxMEIwQzQwMDAwMDAwMDAwQUI4Cis6MTAyMDcwMDAwNjBENDAwMDAwMDAwQTAwMDIwRDAwNDQwMDAwMDAzMjdFCis6MTAyMDgwMDAwMjBEMDA4QzAyMTUwMDIwMDIwRDAwOTAwMjE1MDAyMEE4Cis6MTAyMDkwMDAwMjBEMDA5NDA4MTAwMDAwMDIwRDAwOTgwMDAwMDAzM0FCCis6MTAyMEEwMDAwMjBEMDA5QzAwMDAwMDAyMDIwRDAwQTAwMDAwMDAwMEQ0Cis6MTAyMEIwMDAwMjBEMDBBNDAwMDAwMDA1MDIwRDAwQTgwMDAwMDAwNUFDCis6MTAyMEMwMDAwNjBEMDBBQzAwMDAwMDAyMDIwRDAwQjQwMDAwMDAwMjhBCis6MTAyMEQwMDAwMjBEMDBCODAwMDAwMDAzMDIwRDAwQkMwMDAwMDAwMjY5Cis6MTAyMEUwMDAwMjBEMDBDMDAwMDAwMDAxMDIwRDAwQzgwMDAwMDAwMjQ3Cis6MTAyMEYwMDAwMjBEMDBDQzAwMDAwMDAyMDIwRDAxNUMwMDAwMDAwMTk2Cis6MTAyMTAwMDAwMjBEMDE2NDAwMDAwMDAxMDIwRDAxNjgwMDAwMDAwMkUwCis6MTAyMTEwMDAwMjBEMDIwNDAwMDAwMDAxMDIwRDAyMEMwMDAwMDAyMDZDCis6MTAyMTIwMDAwMjBEMDIxMDAwMDAwMDQwMDIwRDAyMTQwMDAwMDA0MEU5Cis6MTAyMTMwMDAwMjBEMDIyMDAwMDAwMDAzMDIwRDAyMjQwMDAwMDAxODFFCis6MTAyMTQwMDAwNjBEMDI4MDAwMDAwMDEyMDQwRDAzMDAwMDE4MDM3RjNBCis6MTAyMTUwMDAwNjBEMDM2MDAwMDAwMDBDMDIwRDAwNEMwMDAwMDAwMUExCis6MTAyMTYwMDAwMjBEMDA1MDAwMDAwMDAyMDIwRDAwNTQwMDAwMDAwMEFCCis6MTAyMTcwMDAwMjBEMDA1ODAwMDAwMDA4MDYwRDAwNUMwMDAwMDAwNDdECis6MTAyMTgwMDAwMjBEMDBDNDAwMDAwMDA0MDIwRDAwMDQwMDAwMDAwMTY0Cis6MTAyMTkwMDAwMjBEMDAwODAwMDAwMDAxMDIwRDAwMEMwMDAwMDAwMTBCCis6MTAyMUEwMDAwMjBEMDAxMDAwMDAwMDAxMDIwRDAwMTQwMDAwMDAwMUVCCis6MTAyMUIwMDAwMjBEMDAxODAwMDAwMDAxMDIwRDAwMUMwMDAwMDAwMUNCCis6MTAyMUMwMDAwMjBEMDAyMDAwMDAwMDAxMDIwRDAwMjQwMDAwMDAwMUFCCis6MTAyMUQwMDAwMjBEMDAyODAwMDAwMDAxMDIwRDAwMkMwMDAwMDAwMThCCis6MTAyMUUwMDAwMjBEMDAzMDAwMDAwMDAxMDIwRDAwMzQwMDAwMDAwMTZCCis6MTAyMUYwMDAwMjBEMDAzODAwMDAwMDAxMDIwRDAwM0MwMDAwMDAwMTRCCis6MTAyMjAwMDAwMjBEMDExNDAwMDAwMDA5MDIwRDAxMUMwMDAwMDAwQTZCCis6MTAyMjEwMDAwMjBEMDEyNDAwMDAwMDAwMDIwRDAxMkMwMDAwMDAwMDRFCis6MTAyMjIwMDAwMjBEMDEzNDAwMDAwMDAwMDIwRDAxM0MwMDAwMDAwQjEzCis6MTAyMjMwMDAwMjBEMDE0NDAwMDAwMDAwMDIwRDAxMTgwMDAwMDAyOUY5Cis6MTAyMjQwMDAwMjBEMDEyMDAwMDAwMDJBMDIwRDAxMjgwMDAwMDAyMERDCis6MTAyMjUwMDAwMjBEMDEzMDAwMDAwMDIwMDIwRDAxMzgwMDAwMDAyMEI2Cis6MTAyMjYwMDAwMjBEMDE0MDAwMDAwMDJCMDIwRDAxNDgwMDAwMDAyMDdCCis6MTAyMjcwMDAwMjBEMDExNDAwMDAwMDE5MDIwRDAxMUMwMDAwMDAxQURCCis6MTAyMjgwMDAwMjBEMDEyNDAwMDAwMDEwMDIwRDAxMkMwMDAwMDAxMEJFCis6MTAyMjkwMDAwMjBEMDEzNDAwMDAwMDEwMDIwRDAxM0MwMDAwMDAxQjgzCis6MTAyMkEwMDAwMjBEMDE0NDAwMDAwMDEwMDIwRDAxMTgwMDAwMDAzOTY5Cis6MTAyMkIwMDAwMjBEMDEyMDAwMDAwMDNBMDIwRDAxMjgwMDAwMDAzMDRDCis6MTAyMkMwMDAwMjBEMDEzMDAwMDAwMDMwMDIwRDAxMzgwMDAwMDAzMDI2Cis6MTAyMkQwMDAwMjBEMDE0MDAwMDAwMDNCMDIwRDAxNDgwMDAwMDAzMEVCCis6MTAyMkUwMDAwMjBEMDExNDAwMDAwMDQ5MDIwRDAxMUMwMDAwMDA0QTBCCis6MTAyMkYwMDAwMjBEMDEyNDAwMDAwMDQwMDIwRDAxMkMwMDAwMDA0MEVFCis6MTAyMzAwMDAwMjBEMDEzNDAwMDAwMDQwMDIwRDAxM0MwMDAwMDA0QkIyCis6MTAyMzEwMDAwMjBEMDE0NDAwMDAwMDQwMDIwRDAxMTgwMDAwMDA2OTk4Cis6MTAyMzIwMDAwMjBEMDEyMDAwMDAwMDZBMDIwRDAxMjgwMDAwMDA2MDdCCis6MTAyMzMwMDAwMjBEMDEzMDAwMDAwMDYwMDIwRDAxMzgwMDAwMDA2MDU1Cis6MTAyMzQwMDAwMjBEMDE0MDAwMDAwMDZCMDIwRDAxNDgwMDAwMDA2MDFBCis6MTAyMzUwMDAwMjBEMDExNDAwMDAwMDU5MDIwRDAxMUMwMDAwMDA1QTdBCis6MTAyMzYwMDAwMjBEMDEyNDAwMDAwMDUwMDIwRDAxMkMwMDAwMDA1MDVECis6MTAyMzcwMDAwMjBEMDEzNDAwMDAwMDUwMDIwRDAxM0MwMDAwMDA1QjIyCis6MTAyMzgwMDAwMjBEMDE0NDAwMDAwMDUwMDIwRDAxMTgwMDAwMDA3OTA4Cis6MTAyMzkwMDAwMjBEMDEyMDAwMDAwMDdBMDIwRDAxMjgwMDAwMDA3MEVCCis6MTAyM0EwMDAwMjBEMDEzMDAwMDAwMDcwMDIwRDAxMzgwMDAwMDA3MEM1Cis6MTAyM0IwMDAwMjBEMDE0MDAwMDAwMDdCMDIwRDAxNDgwMDAwMDA3MDhBCis6MTAyM0MwMDAwNjBFMjAwMDAwMDAwODAwMDIwRTAwNEMwMDAwMDAzMjQzCis6MTAyM0QwMDAwMjBFMDA5NDAyMTUwMDIwMDIwRTAwOTgwMjE1MDAyMDQzCis6MTAyM0UwMDAwMjBFMDA5QzAwMDAwMDMwMDIwRTAwQTAwODEwMDAwMDQ5Cis6MTAyM0YwMDAwMjBFMDBBNDAwMDAwMDMzMDIwRTAwQTgwMDAwMDAzMDBFCis6MTAyNDAwMDAwMjBFMDBBQzAwMDAwMDMxMDIwRTAwQjAwMDAwMDAwMjFECis6MTAyNDEwMDAwMjBFMDBCNDAwMDAwMDA0MDIwRTAwQjgwMDAwMDAwMDJDCis6MTAyNDIwMDAwMjBFMDBCQzAwMDAwMDAyMDIwRTAwQzAwMDAwMDAwMjBDCis6MTAyNDMwMDAwMjBFMDBDNDAwMDAwMDAwMDIwRTAwQzgwMDAwMDAwMkVFCis6MTAyNDQwMDAwMjBFMDBDQzAwMDAwMDA3MDIwRTAwRDAwMDAwMDAwMkM3Cis6MTAyNDUwMDAwMjBFMDBENDAwMDAwMDAyMDIwRTAwRDgwMDAwMDAwMUFECis6MTAyNDYwMDAwMjBFMDE0NDAwMDAwMDAxMDIwRTAxNEMwMDAwMDAwMUI4Cis6MTAyNDcwMDAwMjBFMDE1MDAwMDAwMDAyMDIwRTAyMDQwMDAwMDAwMUUyCis6MTAyNDgwMDAwMjBFMDIwQzAwMDAwMDQwMDIwRTAyMTAwMDAwMDA0MDhDCis6MTAyNDkwMDAwMjBFMDIxQzAwMDAwMDA0MDIwRTAyMjAwMDAwMDAyMEI4Cis6MTAyNEEwMDAwMjBFMDIyNDAwMDAwMDBFMDIwRTAyMjgwMDAwMDAxQjkzCis6MTAyNEIwMDAwNjBFMDMwMDAwMDAwMDEyMDQwRTAyODAwMDFCMDM5N0FBCis6MTAyNEMwMDAwNjBFMDJFQzAwMDAwMDA1MDIwRTAwNTQwMDAwMDAwQzk1Cis6MTAyNEQwMDAwMjBFMDA1ODAwMDAwMDBDMDIwRTAwNUMwMDAwMDAwMDFDCis6MTAyNEUwMDAwMjBFMDA2MDAwMDAwMDEwMDIwRTAwNjQwMDAwMDAxMEU4Cis6MTAyNEYwMDAwNjBFMDA2ODAwMDAwMDAzMDIwRTAwREMwMDAwMDAwMzZFCis6MTAyNTAwMDAwMjBFMDAwNDAwMDAwMDAxMDIwRTAwMDgwMDAwMDAwMTlECis6MTAyNTEwMDAwMjBFMDAwQzAwMDAwMDAxMDIwRTAwMTAwMDAwMDAwMTdECis6MTAyNTIwMDAwMjBFMDAxNDAwMDAwMDAxMDIwRTAwMTgwMDAwMDAwMTVECis6MTAyNTMwMDAwMjBFMDAxQzAwMDAwMDAxMDIwRTAwMjAwMDAwMDAwMTNECis6MTAyNTQwMDAwMjBFMDAyNDAwMDAwMDAxMDIwRTAwMjgwMDAwMDAwMTFECis6MTAyNTUwMDAwMjBFMDAyQzAwMDAwMDAxMDIwRTAwMzAwMDAwMDAwMUZECis6MTAyNTYwMDAwMjBFMDAzNDAwMDAwMDAxMDIwRTAwMzgwMDAwMDAwMURECis6MTAyNTcwMDAwMjBFMDAzQzAwMDAwMDAxMDIwRTAwNDAwMDAwMDAwMUJECis6MTAyNTgwMDAwMjBFMDA0NDAwMDAwMDAxMDIwRTAxMTAwMDAwMDAwRkM2Cis6MTAyNTkwMDAwMjBFMDExODAwMDAwMDAwMDIwRTAxMjAwMDAwMDAwMEUxCis6MTAyNUEwMDAwMjBFMDEyODAwMDAwMDAwMDIwRTAxMTQwMDAwMDAyRjlFCis6MTAyNUIwMDAwMjBFMDExQzAwMDAwMDIwMDIwRTAxMjQwMDAwMDAwMDk5Cis6MTAyNUMwMDAwMjBFMDEyQzAwMDAwMDAwMDIwRTAxMTAwMDAwMDAxRjhFCis6MTAyNUQwMDAwMjBFMDExODAwMDAwMDEwMDIwRTAxMjAwMDAwMDAwMDkxCis6MTAyNUUwMDAwMjBFMDEyODAwMDAwMDAwMDIwRTAxMTQwMDAwMDAzRjRFCis6MTAyNUYwMDAwMjBFMDExQzAwMDAwMDMwMDIwRTAxMjQwMDAwMDAwMDQ5Cis6MTAyNjAwMDAwMjBFMDEyQzAwMDAwMDAwMDIwRTAxMTAwMDAwMDA0RjFECis6MTAyNjEwMDAwMjBFMDExODAwMDAwMDQwMDIwRTAxMjAwMDAwMDAwMDIwCis6MTAyNjIwMDAwMjBFMDEyODAwMDAwMDAwMDIwRTAxMTQwMDAwMDA2RkRECis6MTAyNjMwMDAwMjBFMDExQzAwMDAwMDYwMDIwRTAxMjQwMDAwMDAwMEQ4Cis6MTAyNjQwMDAwMjBFMDEyQzAwMDAwMDAwMDIwRTAxMTAwMDAwMDA1RkNECis6MTAyNjUwMDAwMjBFMDExODAwMDAwMDUwMDIwRTAxMjAwMDAwMDAwMEQwCis6MTAyNjYwMDAwMjBFMDEyODAwMDAwMDAwMDIwRTAxMTQwMDAwMDA3RjhECis6MTAyNjcwMDAwMjBFMDExQzAwMDAwMDcwMDIwRTAxMjQwMDAwMDAwMDg4Cis6MTAyNjgwMDAwMjBFMDEyQzAwMDAwMDAwMDczMDA0MDAwMEM5MDAwMDA5Cis6MTAyNjkwMDAwODMwMDdEODAwMDUwM0IyMDczNDAwMDAzMzJCMDAwMEQwCis6MTAyNkEwMDAwNzM0ODAwMDMwQTQwQ0NCMDczNTAwMDAzNTFBMThGNTJDCis6MTAyNkIwMDAwNzM1ODAwMDJBOEEyNjNDMDczNjAwMDAxOEQ4MzBERjBDCis6MTAyNkMwMDAwODM2NDYzMDM3M0EwM0I0MDEzMDAwMDAwMDAwMDAwMEZECis6MTAyNkQwMDAwMTMwMDAwNDAwMDAwMDAwMDEzMDAwMDgwMDAwMDAwMDhDCis6MTAyNkUwMDAwMTMwMDAwQzAwMDAwMDAwMDEzMDAwMTAwMDAwMDAwMDZDCis6MTAyNkYwMDAwMTMwMDAxNDAwMDAwMDAwMDIzMDAwMjAwMDAwMDAwMTQyCis6MTAyNzAwMDAwMjMwMDAyNDAwMDAwMDAyMDIzMDAwMjgwMDAwMDAwMzE0Cis6MTAyNzEwMDAwMjMwMDAyQzAwMDAwMDAwMDIzMDAwMzAwMDAwMDAwNEY1Cis6MTAyNzIwMDAwMjMwMDAzNDAwMDAwMDAxMDIzMDAwMzgwMDAwMDAwMEQ4Cis6MTAyNzMwMDAwMjMwMDAzQzAwMDAwMDAxMDIzMDAwNDAwMDAwMDAwNEI0Cis6MTAyNzQwMDAwMjMwMDA0NDAwMDAwMDAwMDIzMDAwNDgwMDAwMDAwMTk4Cis6MTAyNzUwMDAwMjMwMDA0QzAwMDAwMDAzMDIzMDAwNTAwMDAwMDAwMDc2Cis6MTAyNzYwMDAwMjMwMDA1NDAwMDAwMDAxMDIzMDAwNTgwMDAwMDAwNDU0Cis6MTAyNzcwMDAwMjMwMDA1QzAwMDAwMDAwMDIzMDAwNjAwMDAwMDAwMTM4Cis6MTAyNzgwMDAwMjMwMDA2NDAwMDAwMDAzMDIzMDAwNjgwMDAwMDAwMDE2Cis6MTAyNzkwMDAwMjMwMDA2QzAwMDAwMDAxMDIzMDAwNzAwMDAwMDAwNEY0Cis6MTAyN0EwMDAwMjMwMDA3NDAwMDAwMDAwMDIzMDAwNzgwMDAwMDAwNEQ1Cis6MTAyN0IwMDAwMjMwMDA3QzAwMDAwMDAzMDYzMDAwODAwMDAwMDAwMkIwCis6MTAyN0MwMDAwMjMwMDBBNDAwMDAzRkZGMDIzMDAwQTgwMDAwMDNGRjE5Cis6MTAyN0QwMDAwMjMwMDIyNDAwMDAwMDAwMDIzMDAyMzQwMDAwMDAwMDM5Cis6MTAyN0UwMDAwMjMwMDI0QzAwMDAwMDAwMDIzMDAyRTQwMDAwRkZGRjUzCis6MTAyN0YwMDAwNjMwMjAwMDAwMDAwODAwMDIzMzhCQzAwMDAwMDAwMUZBCis6MTAyODAwMDAwMjMzODAwMDAwMDAwMDFBMDIzMzgwNDAwMDAwMDA0RUI2Cis6MTAyODEwMDAwMjMzODA4MDAwMDAwMDEwMDIzMzgwQzAwMDAwMDAyMERFCis6MTAyODIwMDAwQzMzODMwMDAwMDdBMTIwMEEzMzgzMDAwMDAwMDEzODI1Cis6MTAyODMwMDAwQjMzODMwMDAwMDAxMzg4MEEzMzgzNDAwMDAwMDAwMDNDCis6MTAyODQwMDAwQzMzODM0MDAwMDAwMUY0MEIzMzgzNDAwMDAwMDAwNThCCis6MTAyODUwMDAwMjMzODM4MDAwMDdBMTIwMDIzMzgzQzAwMDAwMDFGNDBCCis6MTAyODYwMDAwMjMzMTQ4MDAwMDAwMDAxMEEzMzE0ODAwMDAwMDAwMENECis6MTAyODcwMDAwNjMyODAwMDAwMDAwMTAyMDYzMjIwMDgwMDAwMDBDODc1Cis6MTAyODgwMDAwNjMyMjAwMDAwMDAwMDAyMDQzMjhFQTAwMDEwMDNCNkMxCis6MTAyODkwMDAwNjMyM0VCMDAwMDAwMDA2MDYzMjNFRDgwMDAwMDAwMkJDCis6MTAyOEEwMDAwNjMyM0U4MDAwMDAwMDBBMDQzMjNFQTgwMDAyMDNDNjQxCis6MTAyOEIwMDAwNjMyM0UwMDAwMDAwMDIwMDYzMjUwMDAwMDAwMDQwMEY2Cis6MTAyOEMwMDAwNjMyNDAwMDAwMDAwMDA0MDQzMjc0QzAwMDAyMDNDODU1Cis6MTAyOEQwMDAwNjMyNDExMDAwMDAwMDAyMDYzMkQwMDAwMDAwMDAzMDM1Cis6MTAyOEUwMDAwNjMyREQ0MDAwMDAwMDQ0MDYzMkRBMDAwMDAwMDBEMDZECis6MTAyOEYwMDAwNjMyREVBMDAwMDAwMDAyMDYzMkUwMDAwMDAwMDgwMDAwCis6MTAyOTAwMDAwNjMyODQ1MDAwMDAwMTE4MDYzMjEwMDAwMDAwMDE4OEQxCis6MTAyOTEwMDAwNjMyNTAwMDAwMDAwMDIwMDYzMjUxMDAwMDAwMDAyMDY2Cis6MTAyOTIwMDAwNjMyNTIwMDAwMDAwMDIwMDYzMjUzMDAwMDAwMDAyMDUyCis6MTAyOTMwMDAwNjMyNTQwMDAwMDAwMDIwMDYzMjU1MDAwMDAwMDAyMDNFCis6MTAyOTQwMDAwNjMyNTYwMDAwMDAwMDIwMDYzMjU3MDAwMDAwMDAyMDJBCis6MTAyOTUwMDAwNjMyNTgwMDAwMDAwMDIwMDYzMjU5MDAwMDAwMDAyMDE2Cis6MTAyOTYwMDAwNjMyNUEwMDAwMDAwMDIwMDYzMjVCMDAwMDAwMDAyMDAyCis6MTAyOTcwMDAwNjMyNUMwMDAwMDAwMDIwMDYzMjVEMDAwMDAwMDAyMEVFCis6MTAyOTgwMDAwNjMyNUUwMDAwMDAwMDIwMDYzMjVGMDAwMDAwMDAyMERBCis6MTAyOTkwMDAwNjMyOERGMDAwMDAwMDAyMDQzMjhFMDAwMDAyMDNDQUVECis6MTAyOUEwMDAwNjMyOEUwODAwMDAwMDAyMDYzMkRFOTAwMDAwMDAwMkFGCis6MTAyOUIwMDAwNjMyMUM0MDAwMDAwMDM4MDYzMjg4QjAwMDAwMDExOEMyCis6MTAyOUMwMDAwNjMyMTYyMDAwMDAwMTg4MDYzMjUwODAwMDAwMDAyMEU4Cis6MTAyOUQwMDAwNjMyNTE4MDAwMDAwMDIwMDYzMjUyODAwMDAwMDAyMEE0Cis6MTAyOUUwMDAwNjMyNTM4MDAwMDAwMDIwMDYzMjU0ODAwMDAwMDAyMDkwCis6MTAyOUYwMDAwNjMyNTU4MDAwMDAwMDIwMDYzMjU2ODAwMDAwMDAyMDdDCis6MTAyQTAwMDAwNjMyNTc4MDAwMDAwMDIwMDYzMjU4ODAwMDAwMDAyMDY3Cis6MTAyQTEwMDAwNjMyNTk4MDAwMDAwMDIwMDYzMjVBODAwMDAwMDAyMDUzCis6MTAyQTIwMDAwNjMyNUI4MDAwMDAwMDIwMDYzMjVDODAwMDAwMDAyMDNGCis6MTAyQTMwMDAwNjMyNUQ4MDAwMDAwMDIwMDYzMjVFODAwMDAwMDAyMDJCCis6MTAyQTQwMDAwNjMyNUY4MDAwMDAwMDIwMDYzMjhERjgwMDAwMDAwMjkwCis6MTAyQTUwMDAwNDMyOEUxMDAwMDIwM0NDMDYzMjhFMTgwMDAwMDAwMkYxCis6MTAyQTYwMDAwNjMyREU5ODAwMDAwMDAyMDYzMjFEMjAwMDAwMDAzODA5Cis6MTAyQTcwMDAwMjMyOEQ1MDAwMDAwMDAwMDYzMjQwMTAwMDAwMDAwMkJCCis6MTAyQTgwMDAwMjMyOEQ1NDAwMDAwMDAwMDYzMjQwMjAwMDAwMDAwMjk3Cis6MTAyQTkwMDAwMjMyOEQ1ODAwMDAwMDAwMDYzMjQwMzAwMDAwMDAwMjczCis6MTAyQUEwMDAwMjMyOEQ1QzAwMDAwMDAwMDYzMjQwNDAwMDAwMDAwMjRGCis6MTAyQUIwMDAwMjMyOEQ2MDAwMDAwMDAwMDYzMjQwNTAwMDAwMDAwMjJCCis6MTAyQUMwMDAwMjMyOEQ2NDAwMDAwMDAwMDYzMjQwNjAwMDAwMDAwMjA3Cis6MTAyQUQwMDAwMjMyOEQ2ODAwMDAwMDAwMDYzMjQwNzAwMDAwMDAwMkUzCis6MTAyQUUwMDAwMjMyOEQ2QzAwMDAwMDAwMDYzMjQwODAwMDAwMDAwMkJGCis6MTAyQUYwMDAwNzIwMDQwMDAwOTEwMDAwMDgyMDA3ODAwMDEwMDNDRThBCis6MTAyQjAwMDAwNzI0MDAwMDJBRkYwMDAwMDcyNDgwMDAxNTA5MEFDMERFCis6MTAyQjEwMDAwODI0QTlGMDY5MjgwM0QwMDEyMDAwMDAwMDAwMDAwMDZCCis6MTAyQjIwMDAwMTIwMDAwNDAwMDAwMDAwMDEyMDAwMDgwMDAwMDAwMDU3Cis6MTAyQjMwMDAwMTIwMDAwQzAwMDAwMDAwMDEyMDAwMTAwMDAwMDAwMDM3Cis6MTAyQjQwMDAwMTIwMDAxNDAwMDAwMDAwMDIyMDAwMjAwMDAwMDAwMTBECis6MTAyQjUwMDAwMjIwMDAyNDAwMDAwMDAyMDIyMDAwMjgwMDAwMDAwM0UwCis6MTAyQjYwMDAwMjIwMDAyQzAwMDAwMDAwMDIyMDAwMzAwMDAwMDAwNEMxCis6MTAyQjcwMDAwMjIwMDAzNDAwMDAwMDAxMDIyMDAwMzgwMDAwMDAwMEE0Cis6MTAyQjgwMDAwMjIwMDAzQzAwMDAwMDAxMDIyMDAwNDAwMDAwMDAwNDgwCis6MTAyQjkwMDAwMjIwMDA0NDAwMDAwMDAwMDIyMDAwNDgwMDAwMDAwMTY0Cis6MTAyQkEwMDAwMjIwMDA0QzAwMDAwMDAzMDIyMDAwNTAwMDAwMDAwMDQyCis6MTAyQkIwMDAwMjIwMDA1NDAwMDAwMDAxMDIyMDAwNTgwMDAwMDAwNDIwCis6MTAyQkMwMDAwMjIwMDA1QzAwMDAwMDAwMDIyMDAwNjAwMDAwMDAwMTA0Cis6MTAyQkQwMDAwMjIwMDA2NDAwMDAwMDAzMDIyMDAwNjgwMDAwMDAwMEUyCis6MTAyQkUwMDAwMjIwMDA2QzAwMDAwMDAxMDIyMDAwNzAwMDAwMDAwNEMwCis6MTAyQkYwMDAwMjIwMDA3NDAwMDAwMDAwMDIyMDAwNzgwMDAwMDAwNEExCis6MTAyQzAwMDAwMjIwMDA3QzAwMDAwMDAzMDYyMDAwODAwMDAwMDAwMjdCCis6MTAyQzEwMDAwMjIwMDBBNDAwMDAzRkZGMDIyMDAwQTgwMDAwMDNGRkU0Cis6MTAyQzIwMDAwMjIwMDIyNDAwMDAwMDAwMDIyMDAyMzQwMDAwMDAwMDA0Cis6MTAyQzMwMDAwMjIwMDI0QzAwMDAwMDAwMDIyMDAyRTQwMDAwRkZGRjFFCis6MTAyQzQwMDAwNjIwMjAwMDAwMDAwODAwMDIyMzhCQzAwMDAwMDAwMUM1Cis6MTAyQzUwMDAwMjIzODAwMDAwMDAwMDEwMDIyMzgwNDAwMDAwMDAxMkM4Cis6MTAyQzYwMDAwMjIzODA4MDAwMDAwMDMwMDIyMzgwQzAwMDAwMDAwRTlDCis6MTAyQzcwMDAwQzIzODMwMDAwMDdBMTIwMEEyMzgzMDAwMDAwMDEzOEYxCis6MTAyQzgwMDAwQjIzODMwMDAwMDAxMzg4MEEyMzgzNDAwMDAwMDAwMDA4Cis6MTAyQzkwMDAwQzIzODM0MDAwMDAwMUY0MEIyMzgzNDAwMDAwMDAwNTU3Cis6MTAyQ0EwMDAwMjIzODM4MDAwMDdBMTIwMDIyMzgzQzAwMDAwMDFGNEQ3Cis6MTAyQ0IwMDAwMjIzMTQ4MDAwMDAwMDAxMEEyMzE0ODAwMDAwMDAwMDk5Cis6MTAyQ0MwMDAwNjIyMTAwMDAwMDAwMDQyMDYyMjIwMDgwMDAwMDBDODcyCis6MTAyQ0QwMDAwNjIyMjAwMDAwMDAwMDAyMDYyMkIwMDAwMDAwMDBDNjBDCis6MTAyQ0UwMDAwNDIyQjMxODAwMDUwM0QyMDYyMkIzMkMwMDAwMDAwQjA3Cis6MTAyQ0YwMDAwNDIyQjM1ODAwMDUwM0Q3MDYyMkIzNkMwMDAwMDAwQjcyCis6MTAyRDAwMDAwNDIyQjM5ODAwMDUwM0RDMDYyMkIzQUMwMDAwMDAwQkRDCis6MTAyRDEwMDAwNDIyQjNEODAwMDUwM0UxMDYyMkIzRUMwMDAwMDAwQjQ3Cis6MTAyRDIwMDAwNDIyQjQxODAwMDUwM0U2MDYyMkI0MkMwMDAwMDAwQkIwCis6MTAyRDMwMDAwNDIyQjQ1ODAwMDUwM0VCMDYyMkI0NkMwMDAwMDAwQjFCCis6MTAyRDQwMDAwNDIyQjQ5ODAwMDUwM0YwMDYyMkI0QUMwMDAwMDAwQjg2Cis6MTAyRDUwMDAwNDIyQjREODAwMDUwM0Y1MDYyMkI0RUMwMDAwMDAwQkYxCis6MTAyRDYwMDAwNDIyQjUxODAwMDUwM0ZBMDYyMkI1MkMwMDAwMDAwQjVBCis6MTAyRDcwMDAwNDIyQjU1ODAwMDUwM0ZGMDYyMkI1NkMwMDAwMDAwQkM1Cis6MTAyRDgwMDAwNDIyQjU5ODAwMDUwNDA0MDYyMkI1QUMwMDAwMDAwQjJGCis6MTAyRDkwMDAwNDIyQjVEODAwMDUwNDA5MDYyMkI1RUMwMDAwMDAwQjlBCis6MTAyREEwMDAwNDIyQjYxODAwMDUwNDBFMDYyMkI2MkMwMDAwMDAwQjAzCis6MTAyREIwMDAwNDIyQjY1ODAwMDUwNDEzMDYyMkI2NkMwMDAwMDAwQjZFCis6MTAyREMwMDAwNDIyQjY5ODAwMDUwNDE4MDYyMkI2QUMwMDAwMDAwQkQ5Cis6MTAyREQwMDAwNDIyQjZEODAwMDUwNDFEMDYyMkI2RUMwMDAwMDAwQjQ0Cis6MTAyREUwMDAwNDIyQjcxODAwMDUwNDIyMDYyMkI3MkMwMDAwMDAwQkFECis6MTAyREYwMDAwNDIyQjc1ODAwMDUwNDI3MDYyMkI3NkMwMDAwMDAwQjE4Cis6MTAyRTAwMDAwNDIyQjc5ODAwMDUwNDJDMDYyMkI3QUMwMDAwMDAwQjgyCis6MTAyRTEwMDAwNDIyQjdEODAwMDUwNDMxMDYyMkI3RUMwMDAwMDAwQkVECis6MTAyRTIwMDAwNDIyQjgxODAwMDUwNDM2MDYyMkI4MkMwMDAwMDAwQjU2Cis6MTAyRTMwMDAwNDIyQjg1ODAwMDUwNDNCMDYyMkI4NkMwMDAwMDAwQkMxCis6MTAyRTQwMDAwNDIyQjg5ODAwMDUwNDQwMDYyMkI4QUMwMDAwMDAwQjJDCis6MTAyRTUwMDAwNDIyQjhEODAwMDUwNDQ1MDYyMkI4RUMwMDAwMDAwQjk3Cis6MTAyRTYwMDAwNDIyQjkxODAwMDUwNDRBMDYyMkI5MkMwMDAwMDAwQjAwCis6MTAyRTcwMDAwNDIyQjk1ODAwMDUwNDRGMDYyMkI5NkMwMDAwMDAwQjZCCis6MTAyRTgwMDAwNDIyQjk5ODAwMDUwNDU0MDYyMkI5QUMwMDAwMDAwQkQ2Cis6MTAyRTkwMDAwNDIyQjlEODAwMDUwNDU5MDYyMkI5RUMwMDAwMDAwQjQxCis6MTAyRUEwMDAwNDIyQkExODAwMDUwNDVFMDYyMkJBMkMwMDAwMDAwQkFBCis6MTAyRUIwMDAwNDIyQkE1ODAwMDUwNDYzMDYyMkJBNkMwMDAwMDAwQjE1Cis6MTAyRUMwMDAwNDIyQkE5ODAwMDUwNDY4MDYyMkJBQUMwMDAwMDAwQjgwCis6MTAyRUQwMDAwNDIyQkFEODAwMDUwNDZEMDYyMkJBRUMwMDAwMDAwNUYxCis6MTAyRUUwMDAwNjIyQkIwMDAwMDAwMDUzMDQyMkJDNEMwMDAxMDQ3MjA3Cis6MTAyRUYwMDAwNjIyQkM1MDAwMDAwMDAzMDQyMkJDNUMwMDAxMDQ3M0U1Cis6MTAyRjAwMDAwNjIyQkM2MDAwMDAwMDAzMDQyMkJDNkMwMDAxMDQ3NEIzCis6MTAyRjEwMDAwNjIyQkM3MDAwMDAwMDAzMDQyMkJDN0MwMDAxMDQ3NTgyCis6MTAyRjIwMDAwNjIyQkM4MDAwMDAwMDAzMDQyMkJDOEMwMDAxMDQ3NjUxCis6MTAyRjMwMDAwNjIyQkM5MDAwMDAwMDAzMDQyMkJDOUMwMDAxMDQ3NzIwCis6MTAyRjQwMDAwNjIyQkNBMDAwMDAwMDAzMDQyMkJDQUMwMDAxMDQ3OEVGCis6MTAyRjUwMDAwNjIyQkNCMDAwMDAwMDAzMDQyMkJDQkMwMDAxMDQ3OUJFCis6MTAyRjYwMDAwNjIyODgwMDAwMDAwMTAwMDYyMjgwMDAwMDAwMDIwMDA2Cis6MTAyRjcwMDAwNDIyMTI3MDAwMTAwNDdBMDYyMjMwMDAwMDAwMDBDMDAzCis6MTAyRjgwMDAwNjIyNjcwMDAwMDAwMTAwMDYyMjkwMDAwMDAwMDQwMEY1Cis6MTAyRjkwMDAwNDIyNkIwODAwMjAwNDhBMDIyMjEyQzBGRkZGRkZGRkY4Cis6MTAyRkEwMDAwNjIyMTFFODAwMDAwMDAyMDYyMjEyQzgwMDAwMDAwOUYzCis6MTAyRkIwMDAwNjIyMTJFQzAwMDAwMDA5MDYyMjhDMDAwMDAwMDAwODI2Cis6MTAyRkMwMDAwMjIyMTE0ODAwMDAwMDAwMDYyMjEzMjAwMDAwMDAwNjIzCis6MTAyRkQwMDAwNjIyMzMwMDAwMDAwMDAyMDYyMjYwNDAwMDAwMDAzMDlDCis6MTAyRkUwMDAwNjIyOEMyMDAwMDAwMDA4MDIyMjExNEMwMDAwMDAwMDg0Cis6MTAyRkYwMDAwNjIyMTMzODAwMDAwMDA2MDYyMjMzMDgwMDAwMDAwMkYzCis6MTAzMDAwMDAwNjIyNjEwMDAwMDAwMDMwMDYyMjhDNDAwMDAwMDAwODBCCis6MTAzMDEwMDAwMjIyMTE1MDAwMDAwMDAwMDYyMjEzNTAwMDAwMDAwNjlBCis6MTAzMDIwMDAwNjIyMzMxMDAwMDAwMDAyMDYyMjYxQzAwMDAwMDAzMEJBCis6MTAzMDMwMDAwNjIyOEM2MDAwMDAwMDA4MDIyMjExNTQwMDAwMDAwMEVCCis6MTAzMDQwMDAwNjIyMTM2ODAwMDAwMDA2MDYyMjMzMTgwMDAwMDAwMjYyCis6MTAzMDUwMDAwNjIyNjI4MDAwMDAwMDMwMDYyMjhDODAwMDAwMDAwOEZBCis6MTAzMDYwMDAwMjIyMTE1ODAwMDAwMDAwMDYyMjEzODAwMDAwMDAwNjEyCis6MTAzMDcwMDAwNjIyMzMyMDAwMDAwMDAyMDYyMjYzNDAwMDAwMDAzMEQ4Cis6MTAzMDgwMDAwNjIyOENBMDAwMDAwMDA4MDIyMjExNUMwMDAwMDAwMDUzCis6MTAzMDkwMDAwNjIyMTM5ODAwMDAwMDA2MDYyMjMzMjgwMDAwMDAwMkQyCis6MTAzMEEwMDAwNjIyNjQwMDAwMDAwMDMwMDYyMjhDQzAwMDAwMDAwOEU4Cis6MTAzMEIwMDAwMjIyMTE2MDAwMDAwMDAwMDYyMjEzQjAwMDAwMDAwNjhBCis6MTAzMEMwMDAwNjIyMzMzMDAwMDAwMDAyMDYyMjY0QzAwMDAwMDAzMEY3Cis6MTAzMEQwMDAwNjIyOENFMDAwMDAwMDA4MDIyMjExNjQwMDAwMDAwMEJCCis6MTAzMEUwMDAwNjIyMTNDODAwMDAwMDA2MDYyMjMzMzgwMDAwMDAwMjQyCis6MTAzMEYwMDAwNjIyNjU4MDAwMDAwMDMwMDIxNjEwMDAwMDAwMDAyODQzCis6MTAzMTAwMDAwMjE3MDAwODAwMDAwMDAyMDIxNzAwMkMwMDAwMDAwMzU0Cis6MTAzMTEwMDAwMjE3MDAzQzAwMDAwMDA0MDIxNzAwNDgwMDAwMDAwMkYzCis6MTAzMTIwMDAwMjE3MDA0QzAwMDAwMDkwMDIxNzAwNTAwMDAwMDA5MEIxCis6MTAzMTMwMDAwMjE3MDA1NDAwODAwMDkwMDIxNzAwNTgwODEwMDAwMDg5Cis6MTAzMTQwMDAwMjE3MDA2MDAwMDAwMDhBMDIxNzAwNjQwMDAwMDA4MDdGCis6MTAzMTUwMDAwMjE3MDA2ODAwMDAwMDgxMDIxNzAwNkMwMDAwMDA4MDY4Cis6MTAzMTYwMDAwMjE3MDA3MDAwMDAwMDA2MDIxNzAwNzgwMDAwMDdEMDY4Cis6MTAzMTcwMDAwMjE3MDA3QzAwMDAwNzZDMDIxNzAwMzgwMDdDMTAwNDY2Cis6MTAzMTgwMDAwMjE3MDAwNDAwMDAwMDBGMDYxNjQwMjQwMDAwMDAwMjkxCis6MTAzMTkwMDAwMjE2NDA3MDAwMDAwMDFDMDIxNjQyMDgwMDAwMDAwMUU4Cis6MTAzMUEwMDAwMjE2NDIxMDAwMDAwMDAxMDIxNjQyMjAwMDAwMDAwMTM5Cis6MTAzMUIwMDAwMjE2NDIyODAwMDAwMDAxMDIxNjQyMzAwMDAwMDAwMTAxCis6MTAzMUMwMDAwMjE2NDIzODAwMDAwMDAxMDIxNjQyNjAwMDAwMDAwMkIwCis6MTAzMUQwMDAwQzE2NDAxQzAwMDNEMDkwMEExNjQwMUMwMDAwMDA5Q0Y2Cis6MTAzMUUwMDAwQjE2NDAxQzAwMDAwOUM0MDIxNjQwMzAwMDAwMDAwODA1Cis6MTAzMUYwMDAwMjE2NDAzNDAwMDAwMDBDMDIxNjQwMzgwMDAwMDAxMDk3Cis6MTAzMjAwMDAwMjE2NDA0NDAwMDAwMDIwMDIxNjQwMDAwMDAwMDAwMUE5Cis6MTAzMjEwMDAwMjE2NDBEODAwMDAwMDAxMDIxNjQwMDgwMDAwMDAwMTFDCis6MTAzMjIwMDAwMjE2NDAwQzAwMDAwMDAxMDIxNjQwMTAwMDAwMDAwMUQwCis6MTAzMjMwMDAwMjE2NDI0MDAwMDAwMDAwMDIxNjQyNDgwMDAwMDAwMDUyCis6MTAzMjQwMDAwNjE2NDI3MDAwMDAwMDAyMDIxNjQyNTAwMDAwMDAwMDA0Cis6MTAzMjUwMDAwMjE2NDI1ODAwMDAwMDAwMDYxNjQyODAwMDAwMDAwMkRDCis6MTAzMjYwMDAwMjE2NjAwODAwMDAxMjI0MDIxNjYwMEMwMDAwMTIxMDAyCis6MTAzMjcwMDAwMjE2NjAxMDAwMDAxMjE0MDIxNjYwMUMwMDAwRkZGRjBFCis6MTAzMjgwMDAwMjE2NjAyMDAwMDBGRkZGMDIxNjYwMjQwMDAwRkZGRjBFCis6MTAzMjkwMDAwMjE2NjAyODAwMDBGRkZGMDIxNjYwMzgwMDAwMDAyMEMwCis6MTAzMkEwMDAwMjE2NjAzQzAwMDAwMDIwMDYxNjYwNDAwMDAwMDAwMjhDCis6MTAzMkIwMDAwMjE2NjA0ODAwMDAwMDIzMDIxNjYwNEMwMDAwMDAyNDQzCis6MTAzMkMwMDAwMjE2NjA1MDAwMDAwMDI1MDIxNjYwNTQwMDAwMDAyNjFGCis6MTAzMkQwMDAwMjE2NjA1ODAwMDAwMDI3MDIxNjYwNUMwMDAwMDAyOUZBCis6MTAzMkUwMDAwMjE2NjA2MDAwMDAwMDJBMDIxNjYwNjQwMDAwMDAyQkQ1Cis6MTAzMkYwMDAwMjE2NjA2ODAwMDAwMDJDMDIxNjYwNkMwMDAwMDAyREIxCis6MTAzMzAwMDAwMjE2NjA3MDAwMDAwMEVDMDIxNjYwNzQwMDAwMDAxMUVDCis6MTAzMzEwMDAwMjE2NjA3ODAwMDAwMDEyMDYxNjYwN0MwMDAwMDAwRkE0Cis6MTAzMzIwMDAwMjE2NjBCODAwMDAwMDAxMDIxNjYwQkMwMDAwMDAwMTM3Cis6MTAzMzMwMDAwNjE2NjBDMDAwMDAwMDBDMDIxNjYwRjAwMDAwMDAwMURDCis6MTAzMzQwMDAwNjE2NjBGNDAwMDAwMDMxMDIxNjYxQjgwMDAwMDAwMUFBCis6MTAzMzUwMDAwNjE2NjFCQzAwMDAwMDBEMDIxNjYxRjAwMDAwMDAwMUJECis6MTAzMzYwMDAwNjE2NjFGNDAwMDAwMDExMDIxNjYyMzgwN0ZGRkZGRjI1Cis6MTAzMzcwMDAwMjE2NjIzQzAwMDAwMDNGMDIxNjYyNDAwN0ZGRkZGRjlBCis6MTAzMzgwMDAwMjE2NjI0NDAwMDAwMDBGMDExNjYyNDgwMDAwMDAwMEFGCis6MTAzMzkwMDAwMTE2NjI0QzAwMDAwMDAwMDExNjYyNTAwMDAwMDAwMDlGCis6MTAzM0EwMDAwMTE2NjI1NDAwMDAwMDAwMDExNjYyNTgwMDAwMDAwMDdGCis6MTAzM0IwMDAwMTE2NjI1QzAwMDAwMDAwMDExNjYyNjAwMDAwMDAwMDVGCis6MTAzM0MwMDAwMTE2NjI2NDAwMDAwMDAwMDExNjYyNjgwMDAwMDAwMDNGCis6MTAzM0QwMDAwMTE2NjI2QzAwMDAwMDAwMDExNjYyNzAwMDAwMDAwMDFGCis6MTAzM0UwMDAwMTE2NjI3NDAwMDAwMDAwMDExNjYyNzgwMDAwMDAwMEZGCis6MTAzM0YwMDAwMTE2NjI3QzAwMDAwMDAwMEMxNjYwMDAwMDAwMDNFODZCCis6MTAzNDAwMDAwQTE2NjAwMDAwMDAwMDAxMEIxNjYwMDAwMDAwMDAwQUIwCis6MTAzNDEwMDAwMjE2ODA0MDAwMDAwMDA2MDIxNjgwNDQwMDAwMDAwNUVECis6MTAzNDIwMDAwMjE2ODA0ODAwMDAwMDBBMDIxNjgwNEMwMDAwMDAwNUM5Cis6MTAzNDMwMDAwMjE2ODA1NDAwMDAwMDAyMDIxNjgwQ0MwMDAwMDAwNDM2Cis6MTAzNDQwMDAwMjE2ODBEMDAwMDAwMDA0MDIxNjgwRDQwMDAwMDAwNEEwCis6MTAzNDUwMDAwMjE2ODBEODAwMDAwMDA0MDIxNjgwREMwMDAwMDAwNDgwCis6MTAzNDYwMDAwMjE2ODBFMDAwMDAwMDA0MDIxNjgwRTQwMDAwMDAwNDYwCis6MTAzNDcwMDAwMjE2ODBFODAwMDAwMDA0MDIxNjg4MDQwMDAwMDAwNDIwCis6MTAzNDgwMDAwMjE2ODAzMDAwMDAwMDdDMDIxNjgwMzQwMDAwMDAzREVGCis6MTAzNDkwMDAwMjE2ODAzODAwMDAwMDNGMDIxNjgwM0MwMDAwMDA5Q0FECis6MTAzNEEwMDAwMjE2ODBGMDAwMDAwMDA3MDYxNjgwRjQwMDAwMDAwNUY4Cis6MTAzNEIwMDAwMjE2ODgwQzAxMDEwMTAxMDIxNjgxMDgwMDAwMDAwMEJCCis6MTAzNEMwMDAwMjE2ODEwQzAwMDAwMDA0MDIxNjgxMTAwMDAwMDAwNEE2Cis6MTAzNEQwMDAwMjE2ODExNDAwMDAwMDAyMDIxNjg4MTAwODAxMjAwNDYwCis6MTAzNEUwMDAwMjE2ODExODAwMDAwMDA1MDIxNjgxMUMwMDAwMDAwNTZDCis6MTAzNEYwMDAwMjE2ODEyMDAwMDAwMDA1MDIxNjgxMjQwMDAwMDAwNTRDCis6MTAzNTAwMDAwMjE2ODgyQzIwMDgxMDAxMDIxNjgxMjgwMDAwMDAwOEVECis6MTAzNTEwMDAwMjE2ODEyQzAwMDAwMDA2MDIxNjgxMzAwMDAwMDAwNzEwCis6MTAzNTIwMDAwMjE2ODEzNDAwMDAwMDAwMDIxNjg4MzAwMTAxMDEyMERCCis6MTAzNTMwMDAwNjE2ODEzODAwMDAwMDA0MDIxNjg4MzQwMTAxMDEwMURBCis6MTAzNTQwMDAwMjE2ODE0ODAwMDAwMDAwMDIxNjgxNEMwMDAwMDAwNEIxCis6MTAzNTUwMDAwMjE2ODE1MDAwMDAwMDA0MDIxNjgxNTQwMDAwMDAwMjhGCis6MTAzNTYwMDAwMjE2ODgzODA4MDEyMDA0MDIxNjgxNTgwMDAwMDAwNTYwCis6MTAzNTcwMDAwMjE2ODE1QzAwMDAwMDA1MDIxNjgxNjAwMDAwMDAwNTUzCis6MTAzNTgwMDAwMjE2ODE2NDAwMDAwMDA1MDIxNjg4M0MyMDA4MTAwMTI0Cis6MTAzNTkwMDAwMjE2ODE2ODAwMDAwMDA4MDIxNjgxNkMwMDAwMDAwNjE3Cis6MTAzNUEwMDAwMjE2ODE3MDAwMDAwMDA3MDIxNjgxNzQwMDAwMDAwMUZECis6MTAzNUIwMDAwMjE2ODg0MDAxMDEwMTIwMDIxNjgxNzgwMDAwMDAwMUY2Cis6MTAzNUMwMDAwMjE2ODE3QzAwMDAwMDAxMDIxNjgxODAwMDAwMDAwMUNCCis6MTAzNUQwMDAwMjE2ODE4NDAwMDAwMDAxMDIxNjg4NDQwMTAxMDEwMUU1Cis6MTAzNUUwMDAwMjE2ODE4ODAwMDAwMDAxMDIxNjgxOEMwMDAwMDAwNDkwCis6MTAzNUYwMDAwMjE2ODE5MDAwMDAwMDA0MDIxNjgxOTQwMDAwMDAwMjZGCis6MTAzNjAwMDAwMjE2ODg0ODA4MDEyMDA0MDIxNjgxOTgwMDAwMDAwNTZGCis6MTAzNjEwMDAwMjE2ODE5QzAwMDAwMDA1MDIxNjgxQTAwMDAwMDAwNTMyCis6MTAzNjIwMDAwMjE2ODFBNDAwMDAwMDA1MDIxNjg4MTQyMDA4MTAwMTZCCis6MTAzNjMwMDAwMjE2ODFBODAwMDAwMDA4MDIxNjgxQUMwMDAwMDAwNkY2Cis6MTAzNjQwMDAwMjE2ODFCMDAwMDAwMDA3MDIxNjgxQjQwMDAwMDAwMURDCis6MTAzNjUwMDAwMjE2ODgxODAxMDEwMTIwMDIxNjgxQjgwMDAwMDAwMTNECis6MTAzNjYwMDAwMjE2ODFCQzAwMDAwMDAxMDIxNjgxQzAwMDAwMDAwMUFBCis6MTAzNjcwMDAwMjE2ODFDNDAwMDAwMDAxMDIxNjg4MUMwMTAxMDEwMTJDCis6MTAzNjgwMDAwMjE2ODFDODAwMDAwMDAxMDIxNjgxQ0MwMDAwMDAwNDZGCis6MTAzNjkwMDAwMjE2ODFEMDAwMDAwMDA0MDIxNjgxRDQwMDAwMDAwMjRFCis6MTAzNkEwMDAwMjE2ODgyMDA4MDEyMDA0MDIxNjgxRDgwMDAwMDAwNUI3Cis6MTAzNkIwMDAwMjE2ODFEQzAwMDAwMDA1MDIxNjgxRTAwMDAwMDAwNTEyCis6MTAzNkMwMDAwMjE2ODFFNDAwMDAwMDA1MDIxNjg4MjQyMDA4MTAwMTdCCis6MTAzNkQwMDAwMjE2ODFFODAwMDAwMDA4MDIxNjgxRUMwMDAwMDAwNkQ2Cis6MTAzNkUwMDAwMjE2ODFGMDAwMDAwMDA3MDIxNkU0MEMwMDAwMDAwMDQyCis6MTAzNkYwMDAwMjE2ODgyODAxMDEwMTIwMDYxNkU0MTAwMDAwMDAwNENCCis6MTAzNzAwMDAwMjE2RTAwMDAxMDEwMTAxMDIxNkU0MjAwMDAwMDAwMEExCis6MTAzNzEwMDAwMjE2RTQyNDAwMDAwMDA0MDIxNkU0MjgwMDAwMDAwNDVECis6MTAzNzIwMDAwMjE2RTQyQzAwMDAwMDAyMDIxNkUwMDQwODAxMjAwNDQ2Cis6MTAzNzMwMDAwMjE2RTQzMDAwMDAwMDA1MDIxNkU0MzQwMDAwMDAwNTIzCis6MTAzNzQwMDAwMjE2RTQzODAwMDAwMDA1MDIxNkU0M0MwMDAwMDAwNTAzCis6MTAzNzUwMDAwMjE2RTAwODIwMDgxMDAxMDIxNkU0NDAwMDAwMDAwOEVDCis6MTAzNzYwMDAwMjE2RTQ0NDAwMDAwMDA2MDIxNkU0NDgwMDAwMDAwN0M4Cis6MTAzNzcwMDAwMjE2RTQ0QzAwMDAwMDAwMDIxNkUwMEMwMTAxMDEyMERBCis6MTAzNzgwMDAwNjE2RTQ1MDAwMDAwMDA0MDIxNkUwMTAwMTAxMDEwMUQ5Cis6MTAzNzkwMDAwMjE2RTQ2MDAwMDAwMDAwMDIxNkU0NjQwMDAwMDAwNDY5Cis6MTAzN0EwMDAwMjE2RTQ2ODAwMDAwMDA0MDIxNkU0NkMwMDAwMDAwMjQ3Cis6MTAzN0IwMDAwMjE2RTAxNDA4MDEyMDA0MDIxNkU0NzAwMDAwMDAwNTVGCis6MTAzN0MwMDAwMjE2RTQ3NDAwMDAwMDA1MDIxNkU0NzgwMDAwMDAwNTBCCis6MTAzN0QwMDAwMjE2RTQ3QzAwMDAwMDA1MDIxNkUwMTgyMDA4MTAwMTIzCis6MTAzN0UwMDAwMjE2RTQ4MDAwMDAwMDA4MDIxNkU0ODQwMDAwMDAwNkNGCis6MTAzN0YwMDAwMjE2RTQ4ODAwMDAwMDA3MDIxNkU0OEMwMDAwMDAwMUI1Cis6MTAzODAwMDAwMjE2RTAxQzAxMDEwMTIwMDIxNkU0OTAwMDAwMDAwMUY0Cis6MTAzODEwMDAwMjE2RTQ5NDAwMDAwMDAxMDIxNkU0OTgwMDAwMDAwMTgyCis6MTAzODIwMDAwMjE2RTQ5QzAwMDAwMDAxMDIxNkUwMjAwMTAxMDEwMUUzCis6MTAzODMwMDAwMjE2RTRBMDAwMDAwMDAxMDIxNkU0QTQwMDAwMDAwNDQ3Cis6MTAzODQwMDAwMjE2RTRBODAwMDAwMDA0MDIxNkU0QUMwMDAwMDAwMjI2Cis6MTAzODUwMDAwMjE2RTAyNDA4MDEyMDA0MDIxNkU0QjAwMDAwMDAwNTZFCis6MTAzODYwMDAwMjE2RTRCNDAwMDAwMDA1MDIxNkU0QjgwMDAwMDAwNUVBCis6MTAzODcwMDAwMjE2RTRCQzAwMDAwMDA1MDIxNkUwMjgyMDA4MTAwMTMyCis6MTAzODgwMDAwMjE2RTRDMDAwMDAwMDA4MDIxNkU0QzQwMDAwMDAwNkFFCis6MTAzODkwMDAwMjE2RTRDODAwMDAwMDA3MDIxNkU0Q0MwMDAwMDAwMTk0Cis6MTAzOEEwMDAwMjE2RTAyQzAxMDEwMTIwMDIxNkU0RDAwMDAwMDAwMTA0Cis6MTAzOEIwMDAwMjE2RTRENDAwMDAwMDAxMDIxNkU0RDgwMDAwMDAwMTYyCis6MTAzOEMwMDAwMjE2RTREQzAwMDAwMDAxMDIxNkUwMzAwMTAxMDEwMUYzCis6MTAzOEQwMDAwMjE2RTRFMDAwMDAwMDAxMDIxNkU0RTQwMDAwMDAwNDI3Cis6MTAzOEUwMDAwMjE2RTRFODAwMDAwMDA0MDIxNkU0RUMwMDAwMDAwMjA2Cis6MTAzOEYwMDAwMjE2RTAzNDA4MDEyMDA0MDIxNkU0RjAwMDAwMDAwNTdFCis6MTAzOTAwMDAwMjE2RTRGNDAwMDAwMDA1MDIxNkU0RjgwMDAwMDAwNUM5Cis6MTAzOTEwMDAwMjE2RTRGQzAwMDAwMDA1MDIxNkUwMzgyMDA4MTAwMTQxCis6MTAzOTIwMDAwMjE2RTUwMDAwMDAwMDA4MDIxNkU1MDQwMDAwMDAwNjhCCis6MTAzOTMwMDAwMjE2RTUwODAwMDAwMDA3MDIxNkUwM0MwMTAxMDEyMDI0Cis6MTAzOTQwMDAwMjE2ODI0MDAwM0YwMDNGMDIxNjgyNDQwMDAwMDAwMDQxCis6MTAzOTUwMDAwMjE2RTUyNDAwM0YwMDNGMDIxNkU1MjgwMDAwMDAwMEEzCis6MTAzOTYwMDAwMjE2ODI0ODAwMDAwMDAwMDIxNjgyNEMwMDNGMDAzRjExCis6MTAzOTcwMDAwMjE2RTUyQzAwMDAwMDAwMDIxNkU1MzAwMDNGMDAzRjczCis6MTAzOTgwMDAwMjE2ODI1MDAxMDAwMTAwMDIxNjgyNTQwMTAwMDEwMDVCCis6MTAzOTkwMDAwMjE2RTUzNDAxMDAwMTAwMDIxNkU1MzgwMTAwMDEwMEJECis6MTAzOUEwMDAwNjE2ODI1ODAwMDAwMDAyMDIxNkU1M0MwMDAwMDAwMEU2Cis6MTAzOUIwMDAwMjE2RTU0MDAwMDAwMDAwMDIxNjgyNjAwMEMwMDBDMDUwCis6MTAzOUMwMDAwMjE2ODI2NDAwQzAwMEMwMDIxNkU1NDQwMEMwMDBDMEI4Cis6MTAzOUQwMDAwMjE2RTU0ODAwQzAwMEMwMDIxNjgyNjgxRTAwMUUwMEU0Cis6MTAzOUUwMDAwMjE2ODI2QzFFMDAxRTAwMDIxNkU1NEMxRTAwMUUwMDEwCis6MTAzOUYwMDAwMjE2RTU1MDFFMDAxRTAwMDIxNjgyNzA0MDAwNDAwMEI0Cis6MTAzQTAwMDAwMjE2ODI3NDQwMDA0MDAwMDIxNkU1NTQ0MDAwNDAwMDU3Cis6MTAzQTEwMDAwMjE2RTU1ODQwMDA0MDAwMDIxNjgyNzg4MDAwODAwMEJGCis6MTAzQTIwMDAwMjE2ODI3QzgwMDA4MDAwMDIxNkU1NUM4MDAwODAwMDI3Cis6MTAzQTMwMDAwMjE2RTU2MDgwMDA4MDAwMDIxNjgyODAyMDAwMjAwMENGCis6MTAzQTQwMDAwMjE2ODI4NDIwMDAyMDAwMDIxNkU1NjQyMDAwMjAwMDc3Cis6MTAzQTUwMDAwMjE2RTU2ODIwMDAyMDAwMDYxNjgyODgwMDAwMDAwMjk5Cis6MTAzQTYwMDAwMjE2RTU2QzAwMDAwMDAwMDIxNkU1NzAwMDAwMDAwMDgwCis6MTAzQTcwMDAwMjE2ODI5MDAwMDAwMDAwMDIxNjgyOTQwMDAwMDAwMEVFCis6MTAzQTgwMDAwMjE2RTU3NDAwMDAwMDAwMDIxNkU1NzgwMDAwMDAwMDUwCis6MTAzQTkwMDAwMjE2ODI5ODAwMDAwMDAwMDIxNjgyOUMwMDAwMDAwMEJFCis6MTAzQUEwMDAwMjE2RTU3QzAwMDAwMDAwMDIxNkU1ODAwMDAwMDAwMDIwCis6MTAzQUIwMDAwMjE2ODJBMDAwMDAwMDAwMDIxNjgyQTQwMDAwMDAwMThECis6MTAzQUMwMDAwNjE2ODJBODAwMDAwMDBBMDIxNjgxRjQwMDAwMEMwODA1Cis6MTAzQUQwMDAwMjE2ODFGODAwMDAwMDQwMDIxNjgxRkMwMDAwMDEwMDdGCis6MTAzQUUwMDAwMjE2ODIwMDAwMDAwMDIwMDIxNjgyMDQwMDAwMDAxNzY3Cis6MTAzQUYwMDAwMjE2ODIwODAwMDAwMDgwMDIxNjgyMEMwMDAwMDIwMEZDCis6MTAzQjAwMDAwMjE2ODIxMDAwMDAwMDAwMDIxNjgyMTgwMUZGMDFGRjU5Cis6MTAzQjEwMDAwMjE2ODIxNDAxRkYwMUZGMDIxNkU1MTAwMUZGMDFGRkVBCis6MTAzQjIwMDAwMjE2RTUwQzAxRkYwMUZGMDIxNjgyM0MwMDAwMDAxM0EzCis6MTAzQjMwMDAwMjE2ODA5MDAwMDAwMTNGMDIxNjgwNjAwMDAwMDE0MEU0Cis6MTAzQjQwMDAwMjE2ODA2NDAwMDAwMTQwMDYxNjgwNjgwMDAwMDAwMjMyCis6MTAzQjUwMDAwMjE2ODA3MDAwMDAwMEMwMDYxNjgwNzQwMDAwMDAwNzg2Cis6MTAzQjYwMDAwMjE2ODA5QzAwMDAwMDQ4MDIxNjgwQTAwMDAwMDA0ODU5Cis6MTAzQjcwMDAwNjE2ODBBNDAwMDAwMDAyMDIxNjgwQUMwMDAwMDA0ODc3Cis6MTAzQjgwMDAwNjE2ODBCMDAwMDAwMDA3MDIxNjgyMzgwMDAwODAwMDkwCis6MTAzQjkwMDAwMjE2ODIzNDAwMDAyNUU0MDIxNjgwOTQwMDAwN0ZGRkE0Cis6MTAzQkEwMDAwMjE2ODIyMDAwMEYwMDBGMDIxNjgyMUMwMDBGMDAwRjY5Cis6MTAzQkIwMDAwMjE2RTUxODAwMEYwMDBGMDIxNkU1MTQwMDBGMDAwRkEzCis6MTAzQkMwMDAwMjE2ODIyODAwMDAwMDAwMDIxNjgyMjRGRkZGRkZGRjc5Cis6MTAzQkQwMDAwMjE2RTUyMDAwMDAwMDAwMDIxNkU1MUNGRkZGRkZGRkIzCis6MTAzQkUwMDAwMjE2RTZCQzAwMDAwMDAwMDIxNkU2QzAwMDAwMDAwMjVCCis6MTAzQkYwMDAwMjE2RTZDNDAwMDAwMDAxMDIxNkU2QzgwMDAwMDAwMzM5Cis6MTAzQzAwMDAwMjE2RTZDQzAwMDAwMDA0MDIxNkU2RDAwMDAwMDAwNjEyCis6MTAzQzEwMDAwMjE2RTZENDAwMDAwMDA1MDIxNkU2RDgwMDAwMDAwN0YwCis6MTAzQzIwMDAwMjE2ODBFQzAwMDAwMEZGMDIxNDAwMDAwMDAwMDAwMUZBCis6MTAzQzMwMDAwMjE0MDAwQzAwMDAwMDAxMDIxNDAwNDAwMDAwMDAwMTBBCis6MTAzQzQwMDAwMjE0MDA0NDAwMDA3RkZGMDIxNDAwMEMwMDAwMDAwMDdBCis6MTAzQzUwMDAwMjE0MDAwMDAwMDAwMDAwMDIxNDAwNkMwMDAwMDAwMENDCis6MTAzQzYwMDAwMjE0MDAwNDAwMDAwMDAxMDIxNDAwMzAwMDAwMDAwMUYyCis6MTAzQzcwMDAwMjE0MDAwNDAwMDAwMDAwMDIxNDAwNUMwMDAwMDAwMEI4Cis6MTAzQzgwMDAwMjE0MDAwODAwMDAwMDAxMDIxNDAwMzQwMDAwMDAwMUNBCis6MTAzQzkwMDAwMjE0MDAwODAwMDAwMDAwMDIxNDAwNjAwMDAwMDAwMDkwCis6MTAzQ0EwMDAwNjAyODAwMDAwMDAyMDAwMDIwMjAwNTgwMDAwMDAzMkRFCis6MTAzQ0IwMDAwMjAyMDBBMDAzMTUwMDIwMDIwMjAwQTQwMzE1MDAyMDQ4Cis6MTAzQ0MwMDAwMjAyMDBBODAxMDAwMDMwMDIwMjAwQUMwODEwMDAwMDRGCis6MTAzQ0QwMDAwMjAyMDBCMDAwMDAwMDMzMDIwMjAwQjQwMDAwMDAzMDE1Cis6MTAzQ0UwMDAwMjAyMDBCODAwMDAwMDMxMDIwMjAwQkMwMDAwMDAwMzI0Cis6MTAzQ0YwMDAwMjAyMDBDMDAwMDAwMDA2MDIwMjAwQzQwMDAwMDAwMzJGCis6MTAzRDAwMDAwMjAyMDBDODAwMDAwMDAzMDIwMjAwQ0MwMDAwMDAwMjEyCis6MTAzRDEwMDAwMjAyMDBEMDAwMDAwMDAwMDIwMjAwRDQwMDAwMDAwMkY1Cis6MTAzRDIwMDAwMjAyMDBEQzAwMDAwMDAwMDIwMjAwRTAwMDAwMDAwNkM5Cis6MTAzRDMwMDAwMjAyMDBFNDAwMDAwMDA0MDIwMjAwRTgwMDAwMDAwMkE5Cis6MTAzRDQwMDAwMjAyMDBFQzAwMDAwMDAyMDIwMjAwRjAwMDAwMDAwMThDCis6MTAzRDUwMDAwMjAyMDBGQzAwMDAwMDA2MDIwMjAxMjAwMDAwMDAwMDM4Cis6MTAzRDYwMDAwMjAyMDEzNDAwMDAwMDAyMDIwMjAxQjAwMDAwMDAwMTYyCis6MTAzRDcwMDAwMjAyMDIwQzAwMDAwMDAxMDIwMjAyMTQwMDAwMDAwMTE1Cis6MTAzRDgwMDAwMjAyMDIxODAwMDAwMDAyMDIwMjA0MDQwMDAwMDAwMTA2Cis6MTAzRDkwMDAwMjAyMDQwQzAwMDAwMDQwMDIwMjA0MTAwMDAwMDA0MDc3Cis6MTAzREEwMDAwMjAyMDQxQzAwMDAwMDA0MDIwMjA0MjAwMDAwMDAyMEEzCis6MTAzREIwMDAwMjAyMDQyNDAwMDAwMDAyMDIwMjA0MjgwMDAwMDAyMDg1Cis6MTAzREMwMDAwNjAyMDUwMDAwMDAwMDEyMDQwMjA0ODAwMDIwMDRBQTdDCis6MTAzREQwMDAwMjAyMDA2MDAwMDAwMDBGMDIwMjAwNjQwMDAwMDAwNzAxCis6MTAzREUwMDAwMjAyMDA2ODAwMDAwMDAwMDIwMjAwNkMwMDAwMDAwRUU5Cis6MTAzREYwMDAwMjAyMDA3MDAwMDAwMDBFMDYwMjAwNzQwMDAwMDAwM0MyCis6MTAzRTAwMDAwMjAyMDBGNDAwMDAwMDA0MDIwMjAwMDQwMDAwMDAwMUFECis6MTAzRTEwMDAwMjAyMDAwODAwMDAwMDAxMDIwMjAwMEMwMDAwMDAwMTg0Cis6MTAzRTIwMDAwMjAyMDAxMDAwMDAwMDAxMDIwMjAwMTQwMDAwMDAwMTY0Cis6MTAzRTMwMDAwMjAyMDAxODAwMDAwMDAxMDIwMjAwMUMwMDAwMDAwMTQ0Cis6MTAzRTQwMDAwMjAyMDAyMDAwMDAwMDAxMDIwMjAwMjQwMDAwMDAwMTI0Cis6MTAzRTUwMDAwMjAyMDAyODAwMDAwMDAxMDIwMjAwMkMwMDAwMDAwMTA0Cis6MTAzRTYwMDAwMjAyMDAzMDAwMDAwMDAxMDIwMjAwMzQwMDAwMDAwMUU0Cis6MTAzRTcwMDAwMjAyMDAzODAwMDAwMDAxMDIwMjAwM0MwMDAwMDAwMUM0Cis6MTAzRTgwMDAwMjAyMDA0MDAwMDAwMDAxMDIwMjAwNDQwMDAwMDAwMUE0Cis6MTAzRTkwMDAwMjAyMDA0ODAwMDAwMDAxMDIwMjAwNEMwMDAwMDAwMTg0Cis6MTAzRUEwMDAwMjAyMDA1MDAwMDAwMDAxMDIwMjAxMDgwMDAwMDBDOEU4Cis6MTAzRUIwMDAwMjAyMDExODAwMDAwMDAyMDIwMjAxQzQwMDAwMDAwMDFBCis6MTAzRUMwMDAwMjAyMDFDQzAwMDAwMDAwMDIwMjAxRDQwMDAwMDAwMjQ2Cis6MTAzRUQwMDAwMjAyMDFEQzAwMDAwMDAyMDIwMjAxRTQwMDAwMDBGRjE3Cis6MTAzRUUwMDAwMjAyMDFFQzAwMDAwMEZGMDIwMjAxMDAwMDAwMDAwMERECis6MTAzRUYwMDAwMjAyMDEwQzAwMDAwMEM4MDIwMjAxMUMwMDAwMDAwMkM2Cis6MTAzRjAwMDAwMjAyMDFDODAwMDAwMDAwMDIwMjAxRDAwMDAwMDAwMDBGCis6MTAzRjEwMDAwMjAyMDFEODAwMDAwMDAyMDIwMjAxRTAwMDAwMDAwMkRCCis6MTAzRjIwMDAwMjAyMDFFODAwMDAwMEZGMDIwMjAxRjAwMDAwMDBGRkIxCis6MTAzRjMwMDAwMjAyMDEwNDAwMDAwMDAwMDIwMjAxMDgwMDAwMDBDOEEzCis6MTAzRjQwMDAwMjAyMDExODAwMDAwMDAyMDIwMjAxQzQwMDAwMDAwMDg5Cis6MTAzRjUwMDAwMjAyMDFDQzAwMDAwMDAwMDIwMjAxRDQwMDAwMDAwMkI1Cis6MTAzRjYwMDAwMjAyMDFEQzAwMDAwMDAyMDIwMjAxRTQwMDAwMDBGRjg2Cis6MTAzRjcwMDAwMjAyMDFFQzAwMDAwMEZGMDIwMjAxMDAwMDAwMDAwMDRDCis6MTAzRjgwMDAwMjAyMDEwQzAwMDAwMEM4MDIwMjAxMUMwMDAwMDAwMjM1Cis6MTAzRjkwMDAwMjAyMDFDODAwMDAwMDAwMDIwMjAxRDAwMDAwMDAwMDdGCis6MTAzRkEwMDAwMjAyMDFEODAwMDAwMDAyMDIwMjAxRTAwMDAwMDAwMjRCCis6MTAzRkIwMDAwMjAyMDFFODAwMDAwMEZGMDIwMjAxRjAwMDAwMDBGRjIxCis6MTAzRkMwMDAwMjAyMDEwNDAwMDAwMDAwMDIwMjAxMDgwMDAwMDBDODEzCis6MTAzRkQwMDAwMjAyMDExODAwMDAwMDAyMDIwMjAxQzQwMDAwMDAwMEY5Cis6MTAzRkUwMDAwMjAyMDFDQzAwMDAwMDAwMDIwMjAxRDQwMDAwMDAwMjI1Cis6MTAzRkYwMDAwMjAyMDFEQzAwMDAwMDAyMDIwMjAxRTQwMDAwMDBGRkY2Cis6MTA0MDAwMDAwMjAyMDFFQzAwMDAwMEZGMDIwMjAxMDAwMDAwMDAwMEJCCis6MTA0MDEwMDAwMjAyMDEwQzAwMDAwMEM4MDIwMjAxMUMwMDAwMDAwMkE0Cis6MTA0MDIwMDAwMjAyMDFDODAwMDAwMDAwMDIwMjAxRDAwMDAwMDAwMEVFCis6MTA0MDMwMDAwMjAyMDFEODAwMDAwMDAyMDIwMjAxRTAwMDAwMDAwMkJBCis6MTA0MDQwMDAwMjAyMDFFODAwMDAwMEZGMDIwMjAxRjAwMDAwMDBGRjkwCis6MTA0MDUwMDAwMjAyMDEwNDAwMDAwMDAwMDIwMjAxMDgwMDAwMDBDODgyCis6MTA0MDYwMDAwMjAyMDExODAwMDAwMDAyMDIwMjAxQzQwMDAwMDAwMDY4Cis6MTA0MDcwMDAwMjAyMDFDQzAwMDAwMDAwMDIwMjAxRDQwMDAwMDAwMjk0Cis6MTA0MDgwMDAwMjAyMDFEQzAwMDAwMDAyMDIwMjAxRTQwMDAwMDBGRjY1Cis6MTA0MDkwMDAwMjAyMDFFQzAwMDAwMEZGMDIwMjAxMDAwMDAwMDAwMDJCCis6MTA0MEEwMDAwMjAyMDEwQzAwMDAwMEM4MDIwMjAxMUMwMDAwMDAwMjE0Cis6MTA0MEIwMDAwMjAyMDFDODAwMDAwMDAwMDIwMjAxRDAwMDAwMDAwMDVFCis6MTA0MEMwMDAwMjAyMDFEODAwMDAwMDAyMDIwMjAxRTAwMDAwMDAwMjJBCis6MTA0MEQwMDAwMjAyMDFFODAwMDAwMEZGMDIwMjAxRjAwMDAwMDBGRjAwCis6MTA0MEUwMDAwMjAyMDEwNDAwMDAwMDAwMDcyODA0MDAwMEEzMDAwMEYxCis6MTA0MEYwMDAwODI4MDdCODAwMDkwNENBMDcyQzAwMDAzNEYxMDAwMEEyCis6MTA0MTAwMDAwNzJDODAwMDM4QTYwRDNEMDcyRDAwMDAzN0I2MUI2NzMxCis6MTA0MTEwMDAwNzJEODAwMDMyNjMyOTU1MDcyRTAwMDAxQzY4MzVFRUZDCis6MTA0MTIwMDAwODJFNDhCMDM2RUEwNENDMDEyODAwMDAwMDAwMDAwMDQ4Cis6MTA0MTMwMDAwMTI4MDAwNDAwMDAwMDAwMDEyODAwMDgwMDAwMDAwMDIxCis6MTA0MTQwMDAwMTI4MDAwQzAwMDAwMDAwMDEyODAwMTAwMDAwMDAwMDAxCis6MTA0MTUwMDAwMTI4MDAxNDAwMDAwMDAwMDIyODAwMjAwMDAwMDAwMUQ3Cis6MTA0MTYwMDAwMjI4MDAyNDAwMDAwMDAyMDIyODAwMjgwMDAwMDAwM0FBCis6MTA0MTcwMDAwMjI4MDAyQzAwMDAwMDAwMDIyODAwMzAwMDAwMDAwNDhCCis6MTA0MTgwMDAwMjI4MDAzNDAwMDAwMDAxMDIyODAwMzgwMDAwMDAwMDZFCis6MTA0MTkwMDAwMjI4MDAzQzAwMDAwMDAxMDIyODAwNDAwMDAwMDAwNDRBCis6MTA0MUEwMDAwMjI4MDA0NDAwMDAwMDAwMDIyODAwNDgwMDAwMDAwMTJFCis6MTA0MUIwMDAwMjI4MDA0QzAwMDAwMDAzMDIyODAwNTAwMDAwMDAwMDBDCis6MTA0MUMwMDAwMjI4MDA1NDAwMDAwMDAxMDIyODAwNTgwMDAwMDAwNEVBCis6MTA0MUQwMDAwMjI4MDA1QzAwMDAwMDAwMDIyODAwNjAwMDAwMDAwMUNFCis6MTA0MUUwMDAwMjI4MDA2NDAwMDAwMDAzMDIyODAwNjgwMDAwMDAwMEFDCis6MTA0MUYwMDAwMjI4MDA2QzAwMDAwMDAxMDIyODAwNzAwMDAwMDAwNDhBCis6MTA0MjAwMDAwMjI4MDA3NDAwMDAwMDAwMDIyODAwNzgwMDAwMDAwNDZBCis6MTA0MjEwMDAwMjI4MDA3QzAwMDAwMDAzMDYyODAwODAwMDAwMDAwMjQ1Cis6MTA0MjIwMDAwMjI4MDBBNDAwMDAzRkZGMDIyODAwQTgwMDAwMDNGRkFFCis6MTA0MjMwMDAwMjI4MDIyNDAwMDAwMDAwMDIyODAyMzQwMDAwMDAwMENFCis6MTA0MjQwMDAwMjI4MDI0QzAwMDAwMDAwMDIyODAyRTQwMDAwRkZGRkU4Cis6MTA0MjUwMDAwNjI4MjAwMDAwMDAwODAwMDIyQjhCQzAwMDAwMDAwMThGCis6MTA0MjYwMDAwMjJCODAwMDAwMDAwMDAwMDIyQjgwNDAwMDAwMDAxODlDCis6MTA0MjcwMDAwMjJCODA4MDAwMDAwMDBDMDIyQjgwQzAwMDAwMDA2NjMyCis6MTA0MjgwMDAwQzJCODMwMDAwMDdBMTIwMEEyQjgzMDAwMDAwMDEzOEJCCis6MTA0MjkwMDAwQjJCODMwMDAwMDAxMzg4MEEyQjgzNDAwMDAwMDAwMEQyCis6MTA0MkEwMDAwQzJCODM0MDAwMDAwMUY0MEIyQjgzNDAwMDAwMDAwNTIxCis6MTA0MkIwMDAwMjJCODM4MDAwMDdBMTIwMDIyQjgzQzAwMDAwMDFGNEExCis6MTA0MkMwMDAwMjJCMTQ4MDAwMDAwMDAxMEEyQjE0ODAwMDAwMDAwMDYzCis6MTA0MkQwMDAwNjJBOUFGODAwMDAwMDA0MDQyQTlCMDgwMDAyMDRDRTczCis6MTA0MkUwMDAwNjJBOUIxMDAwMDAwMDA2MDYyQTkwODAwMDAwMDA0ODY1Cis6MTA0MkYwMDAwNjJBMjAwODAwMDAwMEM4MDYyQTIwMDAwMDAwMDAwMjRDCis6MTA0MzAwMDAwNjJBOTFBODAwMDAwMDg2MDYyQTkwMDAwMDAwMDAyMERFCis6MTA0MzEwMDAwNjJBOTNDODAwMDAwMDAzMDQyQTkzRDQwMDAxMDREMEE1Cis6MTA0MzIwMDAwNjJBOURBODAwMDAwMDAyMDQyQTk0OTgwMDA0MDREMUUzCis6MTA0MzMwMDAwNDJBOUQ1ODAwMDEwNEQ1MDYyQTlENUMwMDAwMDAxMTQ2Cis6MTA0MzQwMDAwNDJBQ0IyMDAwMTAwNEQ2MDQyQTMwMDAwMDAyMDRFNjIwCis6MTA0MzUwMDAwNjJBMzAwODAwMDAwMTAwMDYyQTQwNDAwMDAwMDAxMDM0Cis6MTA0MzYwMDAwNDJBNDAwMDAwMTAwNEU4MDQyQTg0MDgwMDAyMDRGODJCCis6MTA0MzcwMDAwNjJBOURBMDAwMDAwMDAyMDYyQUIwMDAwMDAwMDA1MDlFCis6MTA0MzgwMDAwNjJBQkI3MDAwMDAwMDcwMDYyQUIxNTAwMDAwMDAwMjJGCis6MTA0MzkwMDAwNjJBQkI2MDAwMDAwMDA0MDYyQUQwMDAwMDAwMDgwMEM2Cis6MTA0M0EwMDAwNjJBQzAwMDAwMDAwMTUwMDYyQTk0QTgwMDAwMDAzMjJFCis6MTA0M0IwMDAwNjJBNTAyMDAwMDAwMDAyMDYyQTUwMzAwMDAwMDAwMkE5Cis6MTA0M0MwMDAwNjJBNTAwMDAwMDAwMDAyMDYyQTUwMTAwMDAwMDAwMkQ5Cis6MTA0M0QwMDAwMjJBNTIwODAwMDAwMDAxMDQyQTlCMjgwMDAyMDRGQTY1Cis6MTA0M0UwMDAwNjJBOTYzODAwMDAwMDIyMDQyQTk2QzAwMDAxMDRGQzI4Cis6MTA0M0YwMDAwNjJBOTZDNDAwMDAwMDAzMDYyQTk3NjgwMDAwMDAyMkRGCis6MTA0NDAwMDAwNDJBOTdGMDAwMDEwNEZEMDYyQTk3RjQwMDAwMDAwMzM3Cis6MTA0NDEwMDAwNjJBOTg5ODAwMDAwMDIyMDQyQTk5MjAwMDAxMDRGRTMwCis6MTA0NDIwMDAwNjJBOTkyNDAwMDAwMDAzMDYyQTk5QzgwMDAwMDAyMkU5Cis6MTA0NDMwMDAwNDJBOUE1MDAwMDEwNEZGMDYyQTlBNTQwMDAwMDAwMzNGCis6MTA0NDQwMDAwNjJBQjE0MDAwMDAwMDAyMDYyQUM1NDAwMDAwMDE1MEMzCis6MTA0NDUwMDAwNjJBOTU3MDAwMDAwMDMyMDYyQTUwMjgwMDAwMDAwMjRCCis6MTA0NDYwMDAwNjJBNTAzODAwMDAwMDAyMDYyQTUwMDgwMDAwMDAwMjA4Cis6MTA0NDcwMDAwNjJBNTAxODAwMDAwMDAyMDIyQTUyMEMwMDAwMDAwMTE3Cis6MTA0NDgwMDAwNDJBOUIzMDAwMDIwNTAwMDYyQTk2RDAwMDAwMDAyMjc0Cis6MTA0NDkwMDAwNDJBOTc1ODAwMDEwNTAyMDYyQTk3NUMwMDAwMDAwM0QxCis6MTA0NEEwMDAwNjJBOTgwMDAwMDAwMDIyMDQyQTk4ODgwMDAxMDUwM0NCCis6MTA0NEIwMDAwNjJBOTg4QzAwMDAwMDAzMDYyQTk5MzAwMDAwMDAyMjhBCis6MTA0NEMwMDAwNDJBOTlCODAwMDEwNTA0MDYyQTk5QkMwMDAwMDAwM0RCCis6MTA0NEQwMDAwNjJBOUE2MDAwMDAwMDIyMDQyQTlBRTgwMDAxMDUwNUQ1Cis6MTA0NEUwMDAwNjJBOUFFQzAwMDAwMDAzMDYyQUIxNDgwMDAwMDAwMkU4Cis6MTA0NEYwMDAwMjJBQ0E4MDAwMDAwMDAwMDQyQTlCMzgwMDEwMDUwNjJBCis6MTA0NTAwMDAwNjJBNTA0ODAwMDAwMDBFMDIyQUNBODQwMDAwMDAwMDVCCis6MTA0NTEwMDAwNDJBOUI3ODAwMTAwNTE2MDYyQTUwODAwMDAwMDAwRTIxCis6MTA0NTIwMDAwMjJBQ0E4ODAwMDAwMDAwMDQyQTlCQjgwMDEwMDUyNjUxCis6MTA0NTMwMDAwNjJBNTBCODAwMDAwMDBFMDIyQUNBOEMwMDAwMDAwMEIzCis6MTA0NTQwMDAwNDJBOUJGODAwMTAwNTM2MDYyQTUwRjAwMDAwMDAwRUUxCis6MTA0NTUwMDAwMjJBQ0E5MDAwMDAwMDAwMDQyQTlDMzgwMDEwMDU0Njc4Cis6MTA0NTYwMDAwNjJBNTEyODAwMDAwMDBFMDIyQUNBOTQwMDAwMDAwMDBBCis6MTA0NTcwMDAwNDJBOUM3ODAwMTAwNTU2MDYyQTUxNjAwMDAwMDAwRTlGCis6MTA0NTgwMDAwMjJBQ0E5ODAwMDAwMDAwMDQyQTlDQjgwMDEwMDU2NkEwCis6MTA0NTkwMDAwNjJBNTE5ODAwMDAwMDBFMDIyQUNBOUMwMDAwMDAwMDYyCis6MTA0NUEwMDAwNDJBOUNGODAwMTAwNTc2MDYyQTUxRDAwMDAwMDAwRTVGCis6MTA0NUIwMDAwMjEwMTAwODAwMDAwMDAxMDIxMDEwNTAwMDAwMDAwMTVECis6MTA0NUMwMDAwMjEwMTAwMDAwMDNEMDAwMDIxMDEwMDQwMDAwMDAzRDkzCis6MTA0NUQwMDAwOTEwMTgwMDAyMDAwNTg2MDkxMDExMDAwMDEwMDc4NjU2Cis6MTA0NUUwMDAwNjEwMTE0MDAwMDAwMDA4MDkxMDExNjAwMDEwMDc5NjI1Cis6MTA0NUYwMDAwNjEwMTFBMDAwMDAwMDE4MDYxMDI0MDAwMDAwMDBFMEMyCis6MTA0NjAwMDAwMjEwMjAxQzAwMDAwMDAwMDIxMDIwMjAwMDAwMDAwMTA5Cis6MTA0NjEwMDAwMjEwMjBDMDAwMDAwMDAyMDIxMDIwMDQwMDAwMDAwMTZGCis6MTA0NjIwMDAwMjEwMjAwODAwMDAwMDAxMDkxMDNDMDAwMDA1MDdBNjQ4Cis6MTA0NjMwMDAwOTEwMzgwMDAwMDUwN0FCMDkxMDM4MjAwMDA1MDdCMDQ1Cis6MTA0NjQwMDAwNjEwNEMwMDAwMDAwMTAwMDIxMDQwMjgwMDAwMDAxMDdECis6MTA0NjUwMDAwMjEwNDA0NDAwMDAzRkZGMDIxMDQwNTgwMDI4MDAwMEI0Cis6MTA0NjYwMDAwMjEwNDA4NDAwODQ5MjRBMDIxMDQwNTgwMDAwMDAwMDZBCis6MTA0NjcwMDAwMjEwODAwMDAwMDAxMDgwMDIxMDgwQUMwMDAwMDAwMERBCis6MTA0NjgwMDAwMjEwODAzODAwMDAwMDEwMDIxMDgxMDAwMDAwMDAwMEJECis6MTA0NjkwMDAwNjEwODEyMDAwMDAwMDAyMDIxMDgwMDgwMDAwMDJCNTEwCis6MTA0NkEwMDAwMjEwODAxMDAwMDAwMDAwMDYxMDgyMDAwMDAwMDA0QTg2Cis6MTA0NkIwMDAwMjEwODEwODAwMDFGRkZGMDYxMDgxNDAwMDAwMDAwMjg3Cis6MTA0NkMwMDAwMjEwODAwMDAwMDAxQTgwMDYxMDkwMDAwMDAwMDAyNEY0Cis6MTA0NkQwMDAwNjEwOTEyMDAwMDAwMDRBMDYxMDkzNzAwMDAwMDA0QTY2Cis6MTA0NkUwMDAwNjEwOTVDMDAwMDAwMDRBMDIxMDgwMDQwMDAwMTA4MEVGCis6MTA0NkYwMDAwMjEwODBCMDAwMDAwMDAxMDIxMDgwM0MwMDAwMDAxMDk5Cis6MTA0NzAwMDAwMjEwODEwNDAwMDAwMDAwMDYxMDgxMjgwMDAwMDAwMjUxCis6MTA0NzEwMDAwMjEwODAwQzAwMDAwMkI1MDIxMDgwMTQwMDAwMDAwMDlFCis6MTA0NzIwMDAwNjEwODQwMDAwMDAwMDRBMDIxMDgxMEMwMDAxRkZGRjA3Cis6MTA0NzMwMDAwNjEwODE0ODAwMDAwMDAyMDIxMDgwMDQwMDAwMUE4MDY4Cis6MTA0NzQwMDAwNjEwOTA5MDAwMDAwMDI0MDYxMDkyNDgwMDAwMDA0QUQ1Cis6MTA0NzUwMDAwNjEwOTQ5ODAwMDAwMDRBMDYxMDk2RTgwMDAwMDA0QUVGCis6MTA0NzYwMDAwMjEwODAwMDAwMDAxMDgwMDIxMDgwQUMwMDAwMDAwMkU3Cis6MTA0NzcwMDAwMjEwODAzODAwMDAwMDEwMDIxMDgxMDAwMDAwMDAwMENDCis6MTA0NzgwMDAwNjEwODEyMDAwMDAwMDAyMDIxMDgwMDgwMDAwMDJCNTFGCis6MTA0NzkwMDAwMjEwODAxMDAwMDAwMDAwMDYxMDgyMDAwMDAwMDA0QTk1Cis6MTA0N0EwMDAwMjEwODEwODAwMDFGRkZGMDYxMDgxNDAwMDAwMDAwMjk2Cis6MTA0N0IwMDAwMjEwODAwMDAwMDAxQTgwMDYxMDkwMDAwMDAwMDAyNDAzCis6MTA0N0MwMDAwNjEwOTEyMDAwMDAwMDRBMDYxMDkzNzAwMDAwMDA0QTc1Cis6MTA0N0QwMDAwNjEwOTVDMDAwMDAwMDRBMDIxMDgwMDQwMDAwMTA4MEZFCis6MTA0N0UwMDAwMjEwODBCMDAwMDAwMDAzMDIxMDgwM0MwMDAwMDAxMEE2Cis6MTA0N0YwMDAwMjEwODEwNDAwMDAwMDAwMDYxMDgxMjgwMDAwMDAwMjYxCis6MTA0ODAwMDAwMjEwODAwQzAwMDAwMkI1MDIxMDgwMTQwMDAwMDAwMEFECis6MTA0ODEwMDAwNjEwODQwMDAwMDAwMDRBMDIxMDgxMEMwMDAxRkZGRjE2Cis6MTA0ODIwMDAwNjEwODE0ODAwMDAwMDAyMDIxMDgwMDQwMDAwMUE4MDc3Cis6MTA0ODMwMDAwNjEwOTA5MDAwMDAwMDI0MDYxMDkyNDgwMDAwMDA0QUU0Cis6MTA0ODQwMDAwNjEwOTQ5ODAwMDAwMDRBMDYxMDk2RTgwMDAwMDA0QUZFCis6MTA0ODUwMDAwMjEwODAwMDAwMDAxMDgwMDIxMDgwQUMwMDAwMDAwNEY0Cis6MTA0ODYwMDAwMjEwODAzODAwMDAwMDEwMDIxMDgxMDAwMDAwMDAwMERCCis6MTA0ODcwMDAwNjEwODEyMDAwMDAwMDAyMDIxMDgwMDgwMDAwMDJCNTJFCis6MTA0ODgwMDAwMjEwODAxMDAwMDAwMDAwMDYxMDgyMDAwMDAwMDA0QUE0Cis6MTA0ODkwMDAwMjEwODEwODAwMDFGRkZGMDYxMDgxNDAwMDAwMDAwMkE1Cis6MTA0OEEwMDAwMjEwODAwMDAwMDAxQTgwMDYxMDkwMDAwMDAwMDAyNDEyCis6MTA0OEIwMDAwNjEwOTEyMDAwMDAwMDRBMDYxMDkzNzAwMDAwMDA0QTg0Cis6MTA0OEMwMDAwNjEwOTVDMDAwMDAwMDRBMDIxMDgwMDQwMDAwMTA4MDBECis6MTA0OEQwMDAwMjEwODBCMDAwMDAwMDA1MDIxMDgwM0MwMDAwMDAxMEIzCis6MTA0OEUwMDAwMjEwODEwNDAwMDAwMDAwMDYxMDgxMjgwMDAwMDAwMjcwCis6MTA0OEYwMDAwMjEwODAwQzAwMDAwMkI1MDIxMDgwMTQwMDAwMDAwMEJECis6MTA0OTAwMDAwNjEwODQwMDAwMDAwMDRBMDIxMDgxMEMwMDAxRkZGRjI1Cis6MTA0OTEwMDAwNjEwODE0ODAwMDAwMDAyMDIxMDgwMDQwMDAwMUE4MDg2Cis6MTA0OTIwMDAwNjEwOTA5MDAwMDAwMDI0MDYxMDkyNDgwMDAwMDA0QUYzCis6MTA0OTMwMDAwNjEwOTQ5ODAwMDAwMDRBMDYxMDk2RTgwMDAwMDA0QTBECis6MTA0OTQwMDAwMjEwODAwMDAwMDAxMDgwMDIxMDgwQUMwMDAwMDAwNjAxCis6MTA0OTUwMDAwMjEwODAzODAwMDAwMDEwMDIxMDgxMDAwMDAwMDAwMEVBCis6MTA0OTYwMDAwNjEwODEyMDAwMDAwMDAyMDIxMDgwMDgwMDAwMDJCNTNECis6MTA0OTcwMDAwMjEwODAxMDAwMDAwMDAwMDYxMDgyMDAwMDAwMDA0QUIzCis6MTA0OTgwMDAwMjEwODEwODAwMDFGRkZGMDYxMDgxNDAwMDAwMDAwMkI0Cis6MTA0OTkwMDAwMjEwODAwMDAwMDAxQTgwMDYxMDkwMDAwMDAwMDAyNDIxCis6MTA0OUEwMDAwNjEwOTEyMDAwMDAwMDRBMDYxMDkzNzAwMDAwMDA0QTkzCis6MTA0OUIwMDAwNjEwOTVDMDAwMDAwMDRBMDIxMDgwMDQwMDAwMTA4MDFDCis6MTA0OUMwMDAwMjEwODBCMDAwMDAwMDA3MDIxMDgwM0MwMDAwMDAxMEMwCis6MTA0OUQwMDAwMjEwODEwNDAwMDAwMDAwMDYxMDgxMjgwMDAwMDAwMjdGCis6MTA0OUUwMDAwMjEwODAwQzAwMDAwMkI1MDIxMDgwMTQwMDAwMDAwMENDCis6MTA0OUYwMDAwNjEwODQwMDAwMDAwMDRBMDIxMDgxMEMwMDAxRkZGRjM1Cis6MTA0QTAwMDAwNjEwODE0ODAwMDAwMDAyMDIxMDgwMDQwMDAwMUE4MDk1Cis6MTA0QTEwMDAwNjEwOTA5MDAwMDAwMDI0MDYxMDkyNDgwMDAwMDA0QTAyCis6MTA0QTIwMDAwNjEwOTQ5ODAwMDAwMDRBMDYxMDk2RTgwMDAwMDA0QTFDCis6MTA0QTMwMDAwMjEyMDVCMDAwMDAwMDAxMDIxMjA0OTAwMEUzODM0MDVFCis6MTA0QTQwMDAwMjEyMDUxNDAwMDAzQzEwMDIxMjA2NkMwMDAwMDAwMTY2Cis6MTA0QTUwMDAwMjEyMDY3MDAwMDAwMDAwMDIxMjA0OTRGRkZGRkZGRjI0Cis6MTA0QTYwMDAwMjEyMDQ5OEZGRkZGRkZGMDIxMjA0OUNGRkZGRkZGRkVBCis6MTA0QTcwMDAwMjEyMDRBMEZGRkZGRkZGMDIxMjA0QTRGRkZGRkZGRkNBCis6MTA0QTgwMDAwMjEyMDRBOEZGRkZGRkZGMDIxMjA0QUNGRkZGRkZGRkFBCis6MTA0QTkwMDAwMjEyMDRCMEZGRkZGRkZGMDIxMjA0QkNGRkZGRkZGRjgyCis6MTA0QUEwMDAwMjEyMDRDMEZGRkZGRkZGMDIxMjA0QzRGRkZGRkZGRjVBCis6MTA0QUIwMDAwMjEyMDRDOEZGRkZGRkZGMDIxMjA0Q0NGRkZGRkZGRjNBCis6MTA0QUMwMDAwMjEyMDREMEZGRkZGRkZGMDIxMjA0RDhGRkZGRkZGRjE2Cis6MTA0QUQwMDAwMjEyMDREQ0ZGRkZGRkZGMDIxMjA0RTBGRkZGRkZGRkYyCis6MTA0QUUwMDAwMjEyMDRFNEZGRkZGRkZGMDIxMjA0RThGRkZGRkZGRkQyCis6MTA0QUYwMDAwMjEyMDRFQ0ZGRkZGRkZGMDIxMjA0RjBGRkZGRkZGRkIyCis6MTA0QjAwMDAwMjEyMDRGNEZGRkZGRkZGMDIxMjA0RjhGRkZGRkZGRjkxCis6MTA0QjEwMDAwMjEyMDRGQ0ZGRkZGRkZGMDIxMjA1MDBGRkZGRkZGRjcwCis6MTA0QjIwMDAwMjEyMDUwNEZGRkZGRkZGMDIxMjA1MDhGRkZGRkZGRjRGCis6MTA0QjMwMDAwMjEyMDUwQ0ZGRkZGRkZGMDIxMjA1MTBGRkZGRkZGRjJGCis6MTA0QjQwMDAwMjEyMDRENEZGODA5MDAwMDIxMjA0QjRGMDAwNTAwMDVFCis6MTA0QjUwMDAwMjEyMDRCOEYwMDAxMDAwMDIxMjAzOTAwMDAwMDAwOEQ2Cis6MTA0QjYwMDAwMjEyMDM5QzAwMDAwMDA4MDIxMjAzQTAwMDAwMDAwOENCCis6MTA0QjcwMDAwMjEyMDNBNDAwMDAwMDAyMDIxMjAzQkMwMDAwMDAwNEExCis6MTA0QjgwMDAwMjEyMDNDMDAwMDAwMDA1MDIxMjAzQzQwMDAwMDAwNDZBCis6MTA0QjkwMDAwMjEyMDNEMDAwMDAwMDAwMDIxMjAzNkMwMDAwMDAwMUFBCis6MTA0QkEwMDAwMjEyMDM2ODAwMDAwMDNGMDIxMjAxQkMwMDAwMDA0MDM2Cis6MTA0QkIwMDAwMjEyMDFDMDAwMDAxODA4MDIxMjAxQzQwMDAwMDgwMzFDCis6MTA0QkMwMDAwMjEyMDFDODAwMDAwODAzMDIxMjAxQ0MwMDAwMDA0MERDCis6MTA0QkQwMDAwMjEyMDFEMDAwMDAwMDAzMDIxMjAxRDQwMDAwMDgwM0Y5Cis6MTA0QkUwMDAwMjEyMDFEODAwMDAwODAzMDIxMjAxREMwMDAwMDgwM0QxCis6MTA0QkYwMDAwMjEyMDFFMDAwMDEwMDAzMDIxMjAxRTQwMDAwMDgwM0I4Cis6MTA0QzAwMDAwMjEyMDFFODAwMDAwODAzMDIxMjAxRUMwMDAwMDAwMzk4Cis6MTA0QzEwMDAwMjEyMDFGMDAwMDAwMDAzMDIxMjAxRjQwMDAwMDAwMzgwCis6MTA0QzIwMDAwMjEyMDFGODAwMDAwMDAzMDIxMjAxRkMwMDAwMDAwMzYwCis6MTA0QzMwMDAwMjEyMDIwMDAwMDAwMDAzMDIxMjAyMDQwMDAwMDAwMzNFCis6MTA0QzQwMDAwMjEyMDIwODAwMDAwMDAzMDIxMjAyMEMwMDAwMDAwMzFFCis6MTA0QzUwMDAwMjEyMDIxMDAwMDAwMDAzMDIxMjAyMTQwMDAwMDAwM0ZFCis6MTA0QzYwMDAwMjEyMDIxODAwMDAwMDAzMDIxMjAyMUMwMDAwMDAwM0RFCis6MTA0QzcwMDAwMjEyMDIyMDAwMDAwMDAzMDIxMjAyMjQwMDAwMDAwM0JFCis6MTA0QzgwMDAwMjEyMDIyODAwMDAyNDAzMDIxMjAyMkMwMDAwMDAyRjRFCis6MTA0QzkwMDAwMjEyMDIzMDAwMDAwMDA5MDIxMjAyMzQwMDAwMDAxOTYyCis6MTA0Q0EwMDAwMjEyMDIzODAwMDAwMTg0MDIxMjAyM0MwMDAwMDE4MzVCCis6MTA0Q0IwMDAwMjEyMDI0MDAwMDAwMzA2MDIxMjAyNDQwMDAwMDAxOTIyCis6MTA0Q0MwMDAwMjEyMDI0ODAwMDAwMDA2MDIxMjAyNEMwMDAwMDMwNjE1Cis6MTA0Q0QwMDAwMjEyMDI1MDAwMDAwMzA2MDIxMjAyNTQwMDAwMDMwNkYyCis6MTA0Q0UwMDAwMjEyMDI1ODAwMDAwQzg2MDIxMjAyNUMwMDAwMDMwNjQ5Cis6MTA0Q0YwMDAwMjEyMDI2MDAwMDAwMzA2MDIxMjAyNjQwMDAwMDAwNkI1Cis6MTA0RDAwMDAwMjEyMDI2ODAwMDAwMDA2MDIxMjAyNkMwMDAwMDAwNjk3Cis6MTA0RDEwMDAwMjEyMDI3MDAwMDAwMDA2MDIxMjAyNzQwMDAwMDAwNjc3Cis6MTA0RDIwMDAwMjEyMDI3ODAwMDAwMDA2MDIxMjAyN0MwMDAwMDAwNjU3Cis6MTA0RDMwMDAwMjEyMDI4MDAwMDAwMDA2MDIxMjAyODQwMDAwMDAwNjM3Cis6MTA0RDQwMDAwMjEyMDI4ODAwMDAwMDA2MDIxMjAyOEMwMDAwMDAwNjE3Cis6MTA0RDUwMDAwMjEyMDI5MDAwMDAwMDA2MDIxMjAyOTQwMDAwMDAwNkY3Cis6MTA0RDYwMDAwMjEyMDI5ODAwMDAwMDA2MDIxMjAyOUMwMDAwMDAwNkQ3Cis6MTA0RDcwMDAwMjEyMDJBMDAwMDAwMzA2MDIxMjAyQTQwMDAwMDAxM0E3Cis6MTA0RDgwMDAwMjEyMDJBODAwMDAwMDA2MDIxMjAyQjAwMDAwMTAwNDg1Cis6MTA0RDkwMDAwMjEyMDJCNDAwMDAxMDA0MDIxMjAzMjQwMDEwNjQ0MDQ2Cis6MTA0REEwMDAwMjEyMDMyODAwMTA2NDQwMDIxMjA1QjQwMDAwMDAwMTQyCis6MTA0REIwMDAwMjEyMDFCMDAwMDAwMDAxMDYwMEEwMDAwMDAwMDAwQzdCCis6MTA0REMwMDAwMjAwQTA1MDAwMDAwMDAwMDIwMEEwNTQwMDAwMDAwMEZCCis6MTA0REQwMDAwMjAwQTBFQzU1NTQwMDAwMDIwMEEwRjA1NTU1NTU1NUI2Cis6MTA0REUwMDAwMjAwQTBGNDAwMDA1NTU1MDIwMEEwRjhGMDAwMDAwMEY5Cis6MTA0REYwMDAwMjAwQTBGQzU1NTQwMDAwMDIwMEExMDA1NTU1NTU1NTc1Cis6MTA0RTAwMDAwMjAwQTEwNDAwMDA1NTU1MDIwMEExMDhGMDAwMDAwMEI2Cis6MTA0RTEwMDAwMjAwQTE4QzU1NTQwMDAwMDIwMEExOTA1NTU1NTU1NTMzCis6MTA0RTIwMDAwMjAwQTE5NDAwMDA1NTU1MDIwMEExOThGMDAwMDAwMDc2Cis6MTA0RTMwMDAwMjAwQTE5QzAwMDAwMDAwMDIwMEExQTAwMDAxMDAwMEVGCis6MTA0RTQwMDAwMjAwQTFBNDAwMDA1MDE0MDIwMEExQTgwMDAwMDAwMDZDCis6MTA0RTUwMDAwMjAwQTQ1QzAwMDAwQzAwMDIwMEE2MUMwMDAwMDAwMzdECis6MTA0RTYwMDAwMjAwQTA2Q0ZGNUMwMDAwMDIwMEEwNzBGRkY1NUZGRjc1Cis6MTA0RTcwMDAwMjAwQTA3NDAwMDBGRkZGMDIwMEEwNzhGMDAwMDNFMDMxCis6MTA0RTgwMDAwMjAwQTA3QzAwMDAwMDAwMDIwMEEwODAwMDAwQTAwMDQyCis6MTA0RTkwMDAwNjAwQTA4NDAwMDAwMDA1MDIwMEEwOTgwRkUwMDAwMEJBCis6MTA0RUEwMDAwNjAwQTA5QzAwMDAwMDA3MDIwMEEwQjgwMDAwMDQwMDVCCis6MTA0RUIwMDAwNjAwQTBCQzAwMDAwMDAzMDIwMEEwQzgwMDAwMTAwMDEzCis6MTA0RUMwMDAwNjAwQTBDQzAwMDAwMDAzMDIwMEEwRDgwMDAwNDAwMEIzCis6MTA0RUQwMDAwNjAwQTBEQzAwMDAwMDAzMDIwMEEwRTgwMDAxMDAwMEMyCis6MTA0RUUwMDAwNjAwQTIyQzAwMDAwMDA0MDIwMEExMENGRjVDMDAwMEUwCis6MTA0RUYwMDAwMjAwQTExMEZGRjU1RkZGMDIwMEExMTQwMDAwRkZGRkY4Cis6MTA0RjAwMDAwMjAwQTExOEYwMDAwM0UwMDIwMEExMUMwMDAwMDAwMDU0Cis6MTA0RjEwMDAwMjAwQTEyMDAwMDBBMDAwMDYwMEExMjQwMDAwMDAwNTVFCis6MTA0RjIwMDAwMjAwQTEzODBGRTAwMDAwMDYwMEExM0MwMDAwMDAwN0NECis6MTA0RjMwMDAwMjAwQTE1ODAwMDAwODAwMDYwMEExNUMwMDAwMDAwMzY4Cis6MTA0RjQwMDAwMjAwQTE2ODAwMDAyMDAwMDYwMEExNkMwMDAwMDAwMzIwCis6MTA0RjUwMDAwMjAwQTE3ODAwMDA4MDAwMDYwMEExN0MwMDAwMDAwMzkwCis6MTA0RjYwMDAwMjAwQTE4ODAwMDIwMDAwMDYwMEEyM0MwMDAwMDAwNDJDCis6MTA0RjcwMDAwMjAwQTAzMDAwMDAwMDAwMDIwMEEwMzQwMDAwMDAwMDg5Cis6MTA0RjgwMDAwMjAwQTAzODAwMDAwMDAwMDIwMEEwM0MwMDAwMDAwMDY5Cis6MTA0RjkwMDAwMjAwQTA0MDAwMDAwMDAwMDIwMEEwNDQwMDAwMDAwMDQ5Cis6MTA0RkEwMDAwMjAwQTA0ODAwMDAwMDAwMDIwMEEwNEMwMDAwMDAwMDI5Cis6MTA0RkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAwMDAwMDAwMEMxCis6MTA0RkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCis6MTA0RkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA0RkUwMDAwMDAwMDAwMDAwMzAwMDMxMDAwMDAwMDAwMDAwMDAwMDYwCis6MTA0RkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCis6MTA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCis6MTA1MDEwMDAwMDMxMDA1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECis6MTA1MDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCis6MTA1MDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyMDA4OTk1Cis6MTA1MDQwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OTAwOEQwMDhEMDA5MTJDCis6MTA1MDUwMDAwMDkxMDA5NTAwOTUwMDk5MDA5OTAwOUQwMDlEMDBBMTg4Cis6MTA1MDYwMDAwMEExMDBBNTAwQTUwMEE5MDBBOTAwQUUwMEFFMDBCMUY2Cis6MTA1MDcwMDAwMEIxMDBCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENCCis6MTA1MDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCis6MTA1MDkwMDAwMDAwMDAwMDAwQjQwMzA5MDMwOTAzMTMwMzEzMDMxREY4Cis6MTA1MEEwMDAwMzFEMDMyNDAzMjQwMzJCMDMyQjAzMzIwMzMyMDMzOTkwCis6MTA1MEIwMDAwMzM5MDM0MDAzNDAwMzQ3MDM0NzAzNEUwMzRFMDM1NUEwCis6MTA1MEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTA1MEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTA1MEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1MEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTA1MTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTA1MTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTA1MTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCis6MTA1MTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTA1MTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTA1MTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCis6MTA1MTcwMDAwMzU1MDM1QjAwMDAwMDAwMDAwMDAwMDAwMzVCMDM1Q0JDCis6MTA1MTgwMDAwMzVDMDM1RDAzNUQwMzVFMDM1RTAzNUYwMzVGMDM2MDE3Cis6MTA1MTkwMDAwMzYwMDM2MTAzNjEwMzYyMDM2MjAzNjMwMDAwMDAwMEI0Cis6MTA1MUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTA1MUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTA1MUMwMDAwMDAwMDAwMDAwMDAwMDAwMDM2MzAzNkQwMzZEMDM3QjFCCis6MTA1MUQwMDAwMzdCMDM4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Cis6MTA1MUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCis6MTA1MUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1MjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTA1MjIwMDAwMzg5MDM4QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Cis6MTA1MjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTA1MjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzhBMDNENkY4Cis6MTA1MjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTA1MjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCis6MTA1MjcwMDAwMDAwMDAwMDAwMDAwMDAwMDNENjA0MDEwMDAwMDAwMDUwCis6MTA1MjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCis6MTA1MjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTA1MkEwMDAwMDAwMDAwMDA0MDEwNDMzMDAwMDAwMDAwMDAwMDAwMEMyCis6MTA1MkIwMDAwNDMzMDQzQTA0M0EwNDQxMDQ0MTA0NDgwNDQ4MDQ0RkM2Cis6MTA1MkMwMDAwNDRGMDQ1NjA0NTYwNDVEMDQ1RDA0NjQwNDY0MDQ2QkQ2Cis6MTA1MkQwMDAwNDZCMDRBNDAwMDAwMDAwMDAwMDAwMDAwNEE0MDRBODYzCis6MTA1MkUwMDAwNEE4MDRBQzA0QUMwNEIwMDRCMDA0QjQwNEI0MDRCODFFCis6MTA1MkYwMDAwNEI4MDRCQzA0QkMwNEMwMDRDMDA0QzQwNEM0MDUxMzQyCis6MTA1MzAwMDAwNTEzMDUyQTA1MkEwNTQxMDU0MTA1NDMwNTQzMDU0NUMxCis6MTA1MzEwMDAwNTQ1MDU0NzA1NDcwNTQ5MDU0OTA1NEIwNTRCMDU0RDFECis6MTA1MzIwMDAwNTREMDU0RjA1NEYwNTUxMDU1MTA1RTgwNUU4MDVFOTBGCis6MTA1MzMwMDAwNUU5MDVFQTA1RUEwNUVGMDVFRjA1RjQwNUY0MDVGOUM5Cis6MTA1MzQwMDAwNUY5MDVGRTA1RkUwNjAzMDYwMzA2MDgwNjA4MDYwRDE4Cis6MTA1MzUwMDAwNjBEMDYxMjA2MTIwNjEzMDAwMDAwMDAwMDAwMDAwMEYxCis6MTA1MzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECis6MTA1MzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECis6MTA1MzgwMDAwNjEzMDYyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBCis6MTA1MzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECis6MTA1M0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjI0MDYzOTk0Cis6MTA1M0IwMDAwNjM5MDYzQzA2M0MwNjNGMDAwMDAwMDAwMDAwMDAwMEU1Cis6MTA1M0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECis6MTA1M0QwMDAwMDAwMDAwMDAwMDAwMDAwMDYzRjA2NzUwMDAwMDAwMDBECis6MTA1M0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECis6MTA1M0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECis6MTA1NDAwMDAwMDAwMDAwMDA2NzUwNzc4MDAwMDAwMDAwMDAwMDAwMEEyCis6MTA1NDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDCis6MTA1NDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA1NDMwMDAwNzc4MDc3RjA3N0YwNzgzMDc4MzA3ODcwMDAwMDAwMDNGCis6MTA1NDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDCis6MTA1NDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzg3MDdDOEVGCis6MTA1NDYwMDAwMDAwMDAwMDAwMDAwMDAwMDdDODA3RDEwN0QxMDdEQURDCis6MTA1NDcwMDAwN0RBMDdFMzA3RTMwN0VDMDdFQzA3RjUwN0Y1MDdGRTk0Cis6MTA1NDgwMDAwN0ZFMDgwNzA4MDcwODEwMDgxMDA4NjcwODY3MDg3QzY3Cis6MTA1NDkwMDAwODdDMDg5MTA4OTEwODk0MDg5NDA4OTcwODk3MDg5QTNFCis6MTA1NEEwMDAwODlBMDg5RDA4OUQwOEEwMDhBMDA4QTMwOEEzMDhBNkJDCis6MTA1NEIwMDAwOEE2MDhBOTA4QTkwOEIyMDAwMDAwMDAwMDAwMDAwMDIyCis6MTA1NEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCis6MTA1NEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENDCis6MTA1NEUwMDAwOEIyMDhCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCis6MTA1NEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCis6MTA1NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEI4MDhCQjE4Cis6MTA1NTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCis6MTA1NTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTA1NTMwMDAwMDAwMDAwMDAwMDAwMDAwMDhCQjA4QzEwMDAwMDAwMERGCis6MTA1NTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVCCis6MTA1NTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCis6MTA1NTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNCCis6MTA1NTcwMDAwOEMxMDhEMDA4RDAwOERGMDhERjA4RUUwOEVFMDhGREYzCis6MTA1NTgwMDAwOEZEMDkwQzA5MEMwOTFCMDkxQjA5MkEwOTJBMDkzOUZDCis6MTA1NTkwMDAwOTM5MDlBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA1NUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZCCis6MTA1NUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUFBMDlCRjcwCis6MTA1NUMwMDAwOUJGMDlEMDA5RDAwOUUxMDlFMTA5RTIwOUUyMDlFM0NCCis6MTA1NUQwMDAwOUUzMDlFNDA5RTQwOUU1MDlFNTA5RTYwOUU2MDlFNzVCCis6MTA1NUUwMDAwOUU3MDlFODA5RTgwOUU5MDAwMDAwMDAwMDAwMDAwMEY3Cis6MTA1NUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCCis6MTA1NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBCis6MTA1NjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhBCis6MTA1NjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdBCis6MTA1NjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTA1NjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA1NjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRBCis6MTA1NjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBCis6MTA1NjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJBCis6MTA1NjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBCis6MTA1NjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBCis6MTA1NkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCis6MTA1NkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVBCis6MTA1NkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAyMDRDMDEzCis6MTA1NkQwMDAwMDAzMDk4MDAwMDQwRTQwMDAwNTEzMDAwMDA2MTdDMEY3Cis6MTA1NkUwMDAwMDA3MUM4MDAwMDgyMTQwMDAwOTI2MDAwMDBBMkFDMDhCCis6MTA1NkYwMDAwMDBCMkY4MDAwMEMzNDQwMDAwRDM5MDAwMDBFM0RDMDFGCis6MTA1NzAwMDAwMDBGNDI4MDAwMTA0NzQwMDAxMTRDMDAwMDEyNTBDMEIyCis6MTA1NzEwMDAwMDEzNTU4MDAwMTQ1QTQwMDAxNTVGMDAwMDE2NjNDMDQ2Cis6MTA1NzIwMDAwMDE3Njg4MDAwMTg2RDQwMDAxOTcyMDAwMDFBNzZDMERBCis6MTA1NzMwMDAwMDFCN0I4MDAwMUM4MDQwMDAxRDg1MDAwMDFFODlDMDZFCis6MTA1NzQwMDAwMDFGOEU4MDAwMDA5MzQwMDAwMDIwMDAwMDAwNDAwMEY5Cis6MTA1NzUwMDAwMDAwNjAwMDAwMDA4MDAwMDAwMEEwMDAwMDAwQzAwMDA5Cis6MTA1NzYwMDAwMDAwRTAwMDAwMDEwMDAwMDAwMTIwMDAwMDAxNDAwMEY2Cis6MTA1NzcwMDAwMDAxNjAwMDAwMDE4MDAwMDAwMUEwMDAwMDAxQzAwMEU1Cis6MTA1NzgwMDAwMDAxRTAwMDAwMDIwMDAwMDAwMjIwMDAwMDAyNDAwMEQyCis6MTA1NzkwMDAwMDAyNjAwMDAwMDI4MDAwMDAwMkEwMDAwMDAyQzAwMEMxCis6MTA1N0EwMDAwMDAyRTAwMDAwMDMwMDAwMDAwMzIwMDAwMDAzNDAwMEFFCis6MTA1N0IwMDAwMDAzNjAwMDAwMDM4MDAwMDAwM0EwMDAwMDAzQzAwMDlECis6MTA1N0MwMDAwMDAzRTAwMDAwMDQwMDAwMDAwNDIwMDAwMDA0NDAwMDhBCis6MTA1N0QwMDAwMDA0NjAwMDAwMDQ4MDAwMDAwNEEwMDAwMDA0QzAwMDc5Cis6MTA1N0UwMDAwMDA0RTAwMDAwMDUwMDAwMDAwNTIwMDAwMDA1NDAwMDY2Cis6MTA1N0YwMDAwMDA1NjAwMDAwMDU4MDAwMDAwNUEwMDAwMDA1QzAwMDU1Cis6MTA1ODAwMDAwMDA1RTAwMDAwMDYwMDAwMDAwNjIwMDAwMDA2NDAwMDQxCis6MTA1ODEwMDAwMDA2NjAwMDAwMDY4MDAwMDAwNkEwMDAwMDA2QzAwMDMwCis6MTA1ODIwMDAwMDA2RTAwMDAwMDcwMDAwMDAwNzIwMDAwMDA3NDAwMDFECis6MTA1ODMwMDAwMDA3NjAwMDAwMDc4MDAwMDAwN0EwMDAwMDA3QzAwMDBDCis6MTA1ODQwMDAwMDA3RTAwMDAwMDgwMDAwMDAwODIwMDAwMDA4NDAwMEY5Cis6MTA1ODUwMDAwMDA4NjAwMDAwMDg4MDAwMDAwOEEwMDAwMDA4QzAwMEU4Cis6MTA1ODYwMDAwMDA4RTAwMDAwMDkwMDAwMDAwOTIwMDAwMDA5NDAwMEQ1Cis6MTA1ODcwMDAwMDA5NjAwMDAwMDk4MDAwMDAwOUEwMDAwMDA5QzAwMEM0Cis6MTA1ODgwMDAwMDA5RTAwMDAwMEEwMDAwMDAwQTIwMDAwMDBBNDAwMEIxCis6MTA1ODkwMDAwMDBBNjAwMDAwMEE4MDAwMDAwQUEwMDAwMDBBQzAwMEEwCis6MTA1OEEwMDAwMDBBRTAwMDAwMEIwMDAwMDAwQjIwMDAwMDBCNDAwMDhECis6MTA1OEIwMDAwMDBCNjAwMDAwMEI4MDAwMDAwQkEwMDAwMDBCQzAwMDdDCis6MTA1OEMwMDAwMDBCRTAwMDAwMEMwMDAwMDAwQzIwMDAwMDBDNDAwMDY5Cis6MTA1OEQwMDAwMDBDNjAwMDAwMEM4MDAwMDAwQ0EwMDAwMDBDQzAwMDU4Cis6MTA1OEUwMDAwMDBDRTAwMDAwMEQwMDAwMDAwRDIwMDAwMDBENDAwMDQ1Cis6MTA1OEYwMDAwMDBENjAwMDAwMEQ4MDAwMDAwREEwMDAwMDBEQzAwMDM0Cis6MTA1OTAwMDAwMDBERTAwMDAwMEUwMDAwMDAwRTIwMDAwMDBFNDAwMDIwCis6MTA1OTEwMDAwMDBFNjAwMDAwMEU4MDAwMDAwRUEwMDAwMDBFQzAwMDBGCis6MTA1OTIwMDAwMDBFRTAwMDAwMEYwMDAwMDAwRjIwMDAwMDBGNDAwMEZDCis6MTA1OTMwMDAwMDBGNjAwMDAwMEY4MDAwMDAwRkEwMDAwMDBGQzAwMEVCCis6MTA1OTQwMDAwMDBGRTAwMDAwMTAwMDAwMDAxMDIwMDAwMDEwNDAwMEQ4Cis6MTA1OTUwMDAwMDEwNjAwMDAwMTA4MDAwMDAxMEEwMDAwMDEwQzAwMEM3Cis6MTA1OTYwMDAwMDEwRTAwMDAwMTEwMDAwMDAxMTIwMDAwMDExNDAwMEI0Cis6MTA1OTcwMDAwMDExNjAwMDAwMTE4MDAwMDAxMUEwMDAwMDExQzAwMEEzCis6MTA1OTgwMDAwMDExRTAwMDAwMTIwMDAwMDAxMjIwMDAwMDEyNDAwMDkwCis6MTA1OTkwMDAwMDEyNjAwMDAwMTI4MDAwMDAxMkEwMDAwMDEyQzAwMDdGCis6MTA1OUEwMDAwMDEyRTAwMDAwMTMwMDAwMDAxMzIwMDAwMDEzNDAwMDZDCis6MTA1OUIwMDAwMDEzNjAwMDAwMTM4MDAwMDAxM0EwMDAwMDEzQzAwMDVCCis6MTA1OUMwMDAwMDEzRTAwMDAwMTQwMDAwMDAxNDIwMDAwMDE0NDAwMDQ4Cis6MTA1OUQwMDAwMDE0NjAwMDAwMTQ4MDAwMDAxNEEwMDAwMDE0QzAwMDM3Cis6MTA1OUUwMDAwMDE0RTAwMDAwMTUwMDAwMDAxNTIwMDAwMDE1NDAwMDI0Cis6MTA1OUYwMDAwMDE1NjAwMDAwMTU4MDAwMDAxNUEwMDAwMDE1QzAwMDEzCis6MTA1QTAwMDAwMDE1RTAwMDAwMTYwMDAwMDAxNjIwMDAwMDE2NDAwMEZGCis6MTA1QTEwMDAwMDE2NjAwMDAwMTY4MDAwMDAxNkEwMDAwMDE2QzAwMEVFCis6MTA1QTIwMDAwMDE2RTAwMDAwMTcwMDAwMDAxNzIwMDAwMDE3NDAwMERCCis6MTA1QTMwMDAwMDE3NjAwMDAwMTc4MDAwMDAxN0EwMDAwMDE3QzAwMENBCis6MTA1QTQwMDAwMDE3RTAwMDAwMTgwMDAwMDAxODIwMDAwMDE4NDAwMEI3Cis6MTA1QTUwMDAwMDE4NjAwMDAwMTg4MDAwMDAxOEEwMDAwMDE4QzAwMEE2Cis6MTA1QTYwMDAwMDE4RTAwMDAwMTkwMDAwMDAxOTIwMDAwMDE5NDAwMDkzCis6MTA1QTcwMDAwMDE5NjAwMDAwMTk4MDAwMDAxOUEwMDAwMDE5QzAwMDgyCis6MTA1QTgwMDAwMDE5RTAwMDAwMUEwMDAwMDAxQTIwMDAwMDFBNDAwMDZGCis6MTA1QTkwMDAwMDFBNjAwMDAwMUE4MDAwMDAxQUEwMDAwMDFBQzAwMDVFCis6MTA1QUEwMDAwMDFBRTAwMDAwMUIwMDAwMDAxQjIwMDAwMDFCNDAwMDRCCis6MTA1QUIwMDAwMDFCNjAwMDAwMUI4MDAwMDAxQkEwMDAwMDFCQzAwMDNBCis6MTA1QUMwMDAwMDFCRTAwMDAwMUMwMDAwMDAxQzIwMDAwMDFDNDAwMDI3Cis6MTA1QUQwMDAwMDFDNjAwMDAwMUM4MDAwMDAxQ0EwMDAwMDFDQzAwMDE2Cis6MTA1QUUwMDAwMDFDRTAwMDAwMUQwMDAwMDAxRDIwMDAwMDFENDAwMDAzCis6MTA1QUYwMDAwMDFENjAwMDAwMUQ4MDAwMDAxREEwMDAwMDFEQzAwMEYyCis6MTA1QjAwMDAwMDFERTAwMDAwMUUwMDAwMDAxRTIwMDAwMDFFNDAwMERFCis6MTA1QjEwMDAwMDFFNjAwMDAwMUU4MDAwMDAxRUEwMDAwMDFFQzAwMENECis6MTA1QjIwMDAwMDFFRTAwMDAwMUYwMDAwMDAxRjIwMDAwMDFGNDAwMEJBCis6MTA1QjMwMDAwMDFGNjAwMDAwMUY4MDAwMDAxRkEwMDAwMDFGQzAwMEE5Cis6MTA1QjQwMDAwMDFGRTAwMDAwMjAwMDAwMDAyMDIwMDAwMDIwNDAwMDk2Cis6MTA1QjUwMDAwMDIwNjAwMDAwMjA4MDAwMDAyMEEwMDAwMDIwQzAwMDg1Cis6MTA1QjYwMDAwMDIwRTAwMDAwMjEwMDAwMDAyMTIwMDAwMDIxNDAwMDcyCis6MTA1QjcwMDAwMDIxNjAwMDAwMjE4MDAwMDAyMUEwMDAwMDIxQzAwMDYxCis6MTA1QjgwMDAwMDIxRTAwMDAwMjIwMDAwMDAyMjIwMDAwMDIyNDAwMDRFCis6MTA1QjkwMDAwMDIyNjAwMDAwMjI4MDAwMDAyMkEwMDAwMDIyQzAwMDNECis6MTA1QkEwMDAwMDIyRTAwMDAwMjMwMDAwMDAyMzIwMDAwMDIzNDAwMDJBCis6MTA1QkIwMDAwMDIzNjAwMDAwMjM4MDAwMDAyM0EwMDAwMDIzQzAwMDE5Cis6MTA1QkMwMDAwMDIzRTAwMDAwMjQwMDAwMDAyNDIwMDAwMDI0NDAwMDA2Cis6MTA1QkQwMDAwMDI0NjAwMDAwMjQ4MDAwMDAyNEEwMDAwMDI0QzAwMEY1Cis6MTA1QkUwMDAwMDI0RTAwMDAwMjUwMDAwMDAyNTIwMDAwMDI1NDAwMEUyCis6MTA1QkYwMDAwMDI1NjAwMDAwMjU4MDAwMDAyNUEwMDAwMDI1QzAwMEQxCis6MTA1QzAwMDAwMDI1RTAwMDAwMjYwMDAwMDAyNjIwMDAwMDI2NDAwMEJECis6MTA1QzEwMDAwMDI2NjAwMDAwMjY4MDAwMDAyNkEwMDAwMDI2QzAwMEFDCis6MTA1QzIwMDAwMDI2RTAwMDAwMjcwMDAwMDAyNzIwMDAwMDI3NDAwMDk5Cis6MTA1QzMwMDAwMDI3NjAwMDAwMjc4MDAwMDAyN0EwMDAwMDI3QzAwMDg4Cis6MTA1QzQwMDAwMDI3RTAwMDAwMjgwMDAwMDAyODIwMDAwMDI4NDAwMDc1Cis6MTA1QzUwMDAwMDI4NjAwMDAwMjg4MDAwMDAyOEEwMDAwMDI4QzAwMDY0Cis6MTA1QzYwMDAwMDI4RTAwMDAwMjkwMDAwMDAyOTIwMDAwMDI5NDAwMDUxCis6MTA1QzcwMDAwMDI5NjAwMDAwMjk4MDAwMDAyOUEwMDAwMDI5QzAwMDQwCis6MTA1QzgwMDAwMDI5RTAwMDAwMkEwMDAwMDAyQTIwMDAwMDJBNDAwMDJECis6MTA1QzkwMDAwMDJBNjAwMDAwMkE4MDAwMDAyQUEwMDAwMDJBQzAwMDFDCis6MTA1Q0EwMDAwMDJBRTAwMDAwMkIwMDAwMDAyQjIwMDAwMDJCNDAwMDA5Cis6MTA1Q0IwMDAwMDJCNjAwMDAwMkI4MDAwMDAyQkEwMDAwMDJCQzAwMEY4Cis6MTA1Q0MwMDAwMDJCRTAwMDAwMkMwMDAwMDAyQzIwMDAwMDJDNDAwMEU1Cis6MTA1Q0QwMDAwMDJDNjAwMDAwMkM4MDAwMDAyQ0EwMDAwMDJDQzAwMEQ0Cis6MTA1Q0UwMDAwMDJDRTAwMDAwMkQwMDAwMDAyRDIwMDAwMDJENDAwMEMxCis6MTA1Q0YwMDAwMDJENjAwMDAwMkQ4MDAwMDAyREEwMDAwMDJEQzAwMEIwCis6MTA1RDAwMDAwMDJERTAwMDAwMkUwMDAwMDAyRTIwMDAwMDJFNDAwMDlDCis6MTA1RDEwMDAwMDJFNjAwMDAwMkU4MDAwMDAyRUEwMDAwMDJFQzAwMDhCCis6MTA1RDIwMDAwMDJFRTAwMDAwMkYwMDAwMDAyRjIwMDAwMDJGNDAwMDc4Cis6MTA1RDMwMDAwMDJGNjAwMDAwMkY4MDAwMDAyRkEwMDAwMDJGQzAwMDY3Cis6MTA1RDQwMDAwMDJGRTAwMDAwMzAwMDAwMDAzMDIwMDAwMDMwNDAwMDU0Cis6MTA1RDUwMDAwMDMwNjAwMDAwMzA4MDAwMDAzMEEwMDAwMDMwQzAwMDQzCis6MTA1RDYwMDAwMDMwRTAwMDAwMzEwMDAwMDAzMTIwMDAwMDMxNDAwMDMwCis6MTA1RDcwMDAwMDMxNjAwMDAwMzE4MDAwMDAzMUEwMDAwMDMxQzAwMDFGCis6MTA1RDgwMDAwMDMxRTAwMDAwMzIwMDAwMDAzMjIwMDAwMDMyNDAwMDBDCis6MTA1RDkwMDAwMDMyNjAwMDAwMzI4MDAwMDAzMkEwMDAwMDMyQzAwMEZCCis6MTA1REEwMDAwMDMyRTAwMDAwMzMwMDAwMDAzMzIwMDAwMDMzNDAwMEU4Cis6MTA1REIwMDAwMDMzNjAwMDAwMzM4MDAwMDAzM0EwMDAwMDMzQzAwMEQ3Cis6MTA1REMwMDAwMDMzRTAwMDAwMzQwMDAwMDAzNDIwMDAwMDM0NDAwMEM0Cis6MTA1REQwMDAwMDM0NjAwMDAwMzQ4MDAwMDAzNEEwMDAwMDM0QzAwMEIzCis6MTA1REUwMDAwMDM0RTAwMDAwMzUwMDAwMDAzNTIwMDAwMDM1NDAwMEEwCis6MTA1REYwMDAwMDM1NjAwMDAwMzU4MDAwMDAzNUEwMDAwMDM1QzAwMDhGCis6MTA1RTAwMDAwMDM1RTAwMDAwMzYwMDAwMDAzNjIwMDAwMDM2NDAwMDdCCis6MTA1RTEwMDAwMDM2NjAwMDAwMzY4MDAwMDAzNkEwMDAwMDM2QzAwMDZBCis6MTA1RTIwMDAwMDM2RTAwMDAwMzcwMDAwMDAzNzIwMDAwMDM3NDAwMDU3Cis6MTA1RTMwMDAwMDM3NjAwMDAwMzc4MDAwMDAzN0EwMDAwMDM3QzAwMDQ2Cis6MTA1RTQwMDAwMDM3RTAwMDAwMzgwMDAwMDAzODIwMDAwMDM4NDAwMDMzCis6MTA1RTUwMDAwMDM4NjAwMDAwMzg4MDAwMDAzOEEwMDAwMDM4QzAwMDIyCis6MTA1RTYwMDAwMDM4RTAwMDAwMzkwMDAwMDAzOTIwMDAwMDM5NDAwMDBGCis6MTA1RTcwMDAwMDM5NjAwMDAwMzk4MDAwMDAzOUEwMDAwMDM5QzAwMEZFCis6MTA1RTgwMDAwMDM5RTAwMDAwM0EwMDAwMDAzQTIwMDAwMDNBNDAwMEVCCis6MTA1RTkwMDAwMDNBNjAwMDAwM0E4MDAwMDAzQUEwMDAwMDNBQzAwMERBCis6MTA1RUEwMDAwMDNBRTAwMDAwM0IwMDAwMDAzQjIwMDAwMDNCNDAwMEM3Cis6MTA1RUIwMDAwMDNCNjAwMDAwM0I4MDAwMDAzQkEwMDAwMDNCQzAwMEI2Cis6MTA1RUMwMDAwMDNCRTAwMDAwM0MwMDAwMDAzQzIwMDAwMDNDNDAwMEEzCis6MTA1RUQwMDAwMDNDNjAwMDAwM0M4MDAwMDAzQ0EwMDAwMDNDQzAwMDkyCis6MTA1RUUwMDAwMDNDRTAwMDAwM0QwMDAwMDAzRDIwMDAwMDNENDAwMDdGCis6MTA1RUYwMDAwMDNENjAwMDAwM0Q4MDAwMDAzREEwMDAwMDNEQzAwMDZFCis6MTA1RjAwMDAwMDNERTAwMDAwM0UwMDAwMDAzRTIwMDAwMDNFNDAwMDVBCis6MTA1RjEwMDAwMDNFNjAwMDAwM0U4MDAwMDAzRUEwMDAwMDNFQzAwMDQ5Cis6MTA1RjIwMDAwMDNFRTAwMDAwM0YwMDAwMDAzRjIwMDAwMDNGNDAwMDM2Cis6MTA1RjMwMDAwMDNGNjAwMDAwM0Y4MDAwMDAzRkEwMDAwMDNGQzAwMDI1Cis6MTA1RjQwMDAwMDNGRTAwMDAwM0ZFMDAxMDAwMDAwMDAwMDAwMDFGRjEyCis6MTA1RjUwMDAwMDAwMDIwMDAwMDA3RkY4MDAwMDdGRjgwMDAwMDE0MDEwCis6MTA1RjYwMDAwMDAwMzUwMDAwMDAwMDAxMDAwMEZGMDAwMDAwMDAwMEZDCis6MTA1RjcwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDIzCis6MTA1RjgwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDEzCis6MTA1RjkwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAzCis6MTA1RkEwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMDAwMDAxNDBBRkYwMEQ1Cis6MTA1RkIwMDAwMDAwMDAwMTAwMDAwMDAwMDAyMDEwMDEwMDAwMDAwMEFGCis6MTA1RkMwMDAwMTAwOTAwMDAwMDAwMTAwMDAwMDkwMDIwMDAwOTAwNDE5Cis6MTA1RkQwMDAwMDAwOTAwNjAwMDA5MDA4MDAwMDkwMEEwMDAwOTAwQzVECis6MTA1RkUwMDAwMDAwOTAwRTAwMDA5MDEwMDAwMDkwMTIwMDAwOTAxNDJECis6MTA1RkYwMDAwMDAwOTAxNjAwMDA5MDE4MDAwMDkwMUEwMDAwOTAxQ0ZECis6MTA2MDAwMDAwMDAwOTAxRTAwMDA5MDIwMDAwMDkwMjIwMDAwOTAyNENDCis6MTA2MDEwMDAwMDAwOTAyNjAwMDA5MDI4MDAwMDkwMkEwMDAwOTAyQzlDCis6MTA2MDIwMDAwMDAwOTAyRTAwMDA5MDMwMDAwMDkwMzIwMDAwOTAzNDZDCis6MTA2MDMwMDAwMDAwOTAzNjAwMDA5MDM4MDAwMDkwM0EwMDAwOTAzQzNDCis6MTA2MDQwMDAwMDAwOTAzRTAwMDA5MDQwMDAwMDkwNDIwMDAwOTA0NDBDCis6MTA2MDUwMDAwMDAwOTA0NjAwMDA5MDQ4MDAwMDkwNEEwMDAwOTA0Q0RDCis6MTA2MDYwMDAwMDAwOTA0RTAwMDA5MDUwMDAwMDkwNTIwMDAwOTA1NEFDCis6MTA2MDcwMDAwMDAwOTA1NjAwMDA5MDU4MDAwMDkwNUEwMDAwOTA1QzdDCis6MTA2MDgwMDAwMDAwOTA1RTAwMDA5MDYwMDAwMDkwNjIwMDAwOTA2NDRDCis6MTA2MDkwMDAwMDAwOTA2NjAwMDA5MDY4MDAwMDkwNkEwMDAwOTA2QzFDCis6MTA2MEEwMDAwMDAwOTA2RTAwMDA5MDcwMDAwMDkwNzIwMDAwOTA3NEVDCis6MTA2MEIwMDAwMDAwOTA3NjAwMDA5MDc4MDAwMDkwN0EwMDAwOTA3Q0JDCis6MTA2MEMwMDAwMDAwOTA3RTAwMDA5MDgwMDAwMDkwODIwMDAwOTA4NDhDCis6MTA2MEQwMDAwMDAwOTA4NjAwMDA5MDg4MDAwMDkwOEEwMDAwOTA4QzVDCis6MTA2MEUwMDAwMDAwOTA4RTAwMDA5MDkwMDAwMDkwOTIwMDAwOTA5NDJDCis6MTA2MEYwMDAwMDAwOTA5NjAwMDA5MDk4MDAwMDkwOUEwMDAwOTA5Q0ZDCis6MTA2MTAwMDAwMDAwOTA5RTAwMDA5MEEwMDAwMDkwQTIwMDAwOTBBNENCCis6MTA2MTEwMDAwMDAwOTBBNjAwMDA5MEE4MDAwMDkwQUEwMDAwOTBBQzlCCis6MTA2MTIwMDAwMDAwOTBBRTAwMDA5MEIwMDAwMDkwQjIwMDAwOTBCNDZCCis6MTA2MTMwMDAwMDAwOTBCNjAwMDA5MEI4MDAwMDkwQkEwMDAwOTBCQzNCCis6MTA2MTQwMDAwMDAwOTBCRTAwMDA5MEMwMDAwMDkwQzIwMDAwOTBDNDBCCis6MTA2MTUwMDAwMDAwOTBDNjAwMDA5MEM4MDAwMDkwQ0EwMDAwOTBDQ0RCCis6MTA2MTYwMDAwMDAwOTBDRTAwMDA5MEQwMDAwMDkwRDIwMDAwOTBENEFCCis6MTA2MTcwMDAwMDAwOTBENjAwMDA5MEQ4MDAwMDkwREEwMDAwOTBEQzdCCis6MTA2MTgwMDAwMDAwOTBERTAwMDA5MEUwMDAwMDkwRTIwMDAwOTBFNDRCCis6MTA2MTkwMDAwMDAwOTBFNjAwMDA5MEU4MDAwMDkwRUEwMDAwOTBFQzFCCis6MTA2MUEwMDAwMDAwOTBFRTAwMDA5MEYwMDAwMDkwRjIwMDAwOTBGNEVCCis6MTA2MUIwMDAwMDAwOTBGNjAwMDA5MEY4MDAwMDkwRkEwMDAwOTBGQ0JCCis6MTA2MUMwMDAwMDAwOTBGRTAwMDA5MTAwMDAwMDkxMDIwMDAwOTEwNDg4Cis6MTA2MUQwMDAwMDAwOTEwNjAwMDA5MTA4MDAwMDkxMEEwMDAwOTEwQzU3Cis6MTA2MUUwMDAwMDAwOTEwRTAwMDA5MTEwMDAwMDkxMTIwMDAwOTExNDI3Cis6MTA2MUYwMDAwMDAwOTExNjAwMDA5MTE4MDAwMDkxMUEwMDAwOTExQ0Y3Cis6MTA2MjAwMDAwMDAwOTExRTAwMDA5MTIwMDAwMDkxMjIwMDAwOTEyNEM2Cis6MTA2MjEwMDAwMDAwOTEyNjAwMDA5MTI4MDAwMDkxMkEwMDAwOTEyQzk2Cis6MTA2MjIwMDAwMDAwOTEyRTAwMDA5MTMwMDAwMDkxMzIwMDAwOTEzNDY2Cis6MTA2MjMwMDAwMDAwOTEzNjAwMDA5MTM4MDAwMDkxM0EwMDAwOTEzQzM2Cis6MTA2MjQwMDAwMDAwOTEzRTAwMDA5MTQwMDAwMDkxNDIwMDAwOTE0NDA2Cis6MTA2MjUwMDAwMDAwOTE0NjAwMDA5MTQ4MDAwMDkxNEEwMDAwOTE0Q0Q2Cis6MTA2MjYwMDAwMDAwOTE0RTAwMDA5MTUwMDAwMDkxNTIwMDAwOTE1NEE2Cis6MTA2MjcwMDAwMDAwOTE1NjAwMDA5MTU4MDAwMDkxNUEwMDAwOTE1Qzc2Cis6MTA2MjgwMDAwMDAwOTE1RTAwMDA5MTYwMDAwMDkxNjIwMDAwOTE2NDQ2Cis6MTA2MjkwMDAwMDAwOTE2NjAwMDA5MTY4MDAwMDkxNkEwMDAwOTE2QzE2Cis6MTA2MkEwMDAwMDAwOTE2RTAwMDA5MTcwMDAwMDkxNzIwMDAwOTE3NEU2Cis6MTA2MkIwMDAwMDAwOTE3NjAwMDA5MTc4MDAwMDkxN0EwMDAwOTE3Q0I2Cis6MTA2MkMwMDAwMDAwOTE3RTAwMDA5MTgwMDAwMDkxODIwMDAwOTE4NDg2Cis6MTA2MkQwMDAwMDAwOTE4NjAwMDA5MTg4MDAwMDkxOEEwMDAwOTE4QzU2Cis6MTA2MkUwMDAwMDAwOTE4RTAwMDA5MTkwMDAwMDkxOTIwMDAwOTE5NDI2Cis6MTA2MkYwMDAwMDAwOTE5NjAwMDA5MTk4MDAwMDkxOUEwMDAwOTE5Q0Y2Cis6MTA2MzAwMDAwMDAwOTE5RTAwMDA5MUEwMDAwMDkxQTIwMDAwOTFBNEM1Cis6MTA2MzEwMDAwMDAwOTFBNjAwMDA5MUE4MDAwMDkxQUEwMDAwOTFBQzk1Cis6MTA2MzIwMDAwMDAwOTFBRTAwMDA5MUIwMDAwMDkxQjIwMDAwOTFCNDY1Cis6MTA2MzMwMDAwMDAwOTFCNjAwMDA5MUI4MDAwMDkxQkEwMDAwOTFCQzM1Cis6MTA2MzQwMDAwMDAwOTFCRTAwMDA5MUMwMDAwMDkxQzIwMDAwOTFDNDA1Cis6MTA2MzUwMDAwMDAwOTFDNjAwMDA5MUM4MDAwMDkxQ0EwMDAwOTFDQ0Q1Cis6MTA2MzYwMDAwMDAwOTFDRTAwMDA5MUQwMDAwMDkxRDIwMDAwOTFENEE1Cis6MTA2MzcwMDAwMDAwOTFENjAwMDA5MUQ4MDAwMDkxREEwMDAwOTFEQzc1Cis6MTA2MzgwMDAwMDAwOTFERTAwMDA5MUUwMDAwMDkxRTIwMDAwOTFFNDQ1Cis6MTA2MzkwMDAwMDAwOTFFNjAwMDA5MUU4MDAwMDkxRUEwMDAwOTFFQzE1Cis6MTA2M0EwMDAwMDAwOTFFRTAwMDA5MUYwMDAwMDkxRjIwMDAwOTFGNEU1Cis6MTA2M0IwMDAwMDAwOTFGNjAwMDA5MUY4MDAwMDkxRkEwMDAwOTFGQ0I1Cis6MTA2M0MwMDAwMDAwOTFGRUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjRBCis6MTA2M0QwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkNECis6MTA2M0UwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkJECis6MTA2M0YwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkFECis6MTA2NDAwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjlDCis6MTA2NDEwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjhDCis6MTA2NDIwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjdDCis6MTA2NDMwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjZDCis6MTA2NDQwMDBGRkZGRkZGRjAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMEIzCis6MTA2NDUwMDAwMDAwMDAwNTAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMDlBCis6MTA2NDYwMDAwMDAwMDAwNTAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMDhBCis6MTA2NDcwMDAwMDAwMDAwNTAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMDdBCis6MTA2NDgwMDAwMDAwMDAwNTAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMDZBCis6MTA2NDkwMDAwMDAwMDAwNTAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMDVBCis6MTA2NEEwMDAwMDAwMDAwNTAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMDRBCis6MTA2NEIwMDAwMDAwMDAwNTAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMDNBCis6MTA2NEMwMDAwMDAwMDAwNTAwMDAyMDAwMDAwMDQwQzAwMDAwNjE4MEM2Cis6MTA2NEQwMDAwMDAwODI0MDAwMDBBMzAwMDAwMEMzQzAwMDAwRTQ4MDcwCis6MTA2NEUwMDAwMDAxMDU0MDAwMDEyNjAwMDAwMTQ2QzAwMDAxNjc4MDUwCis6MTA2NEYwMDAwMDAxODg0MDAwMDFBOTAwMDAwMUM5QzAwMDAxRUE4MDM0Cis6MTA2NTAwMDAwMDAyMEI0MDAwMDIyQzAwMDAwMjRDQzAwMDAyNkQ4MDEzCis6MTA2NTEwMDAwMDAyOEU0MDAwMDJBRjAwMDAwMkNGQzAwMDAyRjA4MEY3Cis6MTA2NTIwMDAwMDAwMTE0MDAwMDA4MDAwMDAwMTAzODAwMDAxODcwMDhFCis6MTA2NTMwMDAwMDAyMEE4MDAwMDI4RTAwMDAwMzExODAwMDAzOTUwMDEzCis6MTA2NTQwMDAwMDA0MTg4MDAwMDQ5QzAwMDAwNTFGODAwMDA1QTMwMEMzCis6MTA2NTUwMDAwMDA2MjY4MDAwMDZBQTAwMDAwNzJEODAwMDA3QjEwMDczCis6MTA2NTYwMDAwMDA4MzQ4MDAwMDhCODAwMDAwOTNCODAwMDA5QkYwMDIzCis6MTA2NTcwMDAwMDBBNDI4MDAwMEFDNjAwMDAwQjQ5ODAwMDBCQ0QwMEQzCis6MTA2NTgwMDAwMDBDNTA4MDAwMENENDAwMDAwRDU3ODAwMDAwNUIwMDEwCis6MTA2NTkwMDAwMDAwN0ZGODAwMDA3RkY4MDAwMDAwRDUwMDAwMTUwMDIzCis6MTA2NUEwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEVECis6MTA2NUIwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMERECis6MTA2NUMwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMENECis6MTA2NUQwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEJECis6MTA2NUUwMDAwMDAwMTkwMDAwMDAwMDAwMDAwMDAwMDBGRkZGRkZGRjk2Cis6MTA2NUYwMDAwMDAwMDAwMDAzOTM4NzAwMDAwMDAwMDAwMzkzODcwMDYxCis6MTA2NjAwMDAwMDAwN0ZGODAwMDA3RkY4MDAwMDA2OEUwMDAwMzUwMEQzCis6MTA2NjEwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjY0Cis6MTA2NjIwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDYxCis6MTA2NjMwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjQ0Cis6MTA2NjQwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDQxCis6MTA2NjUwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjI0Cis6MTA2NjYwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjE0Cis6MTA2NjcwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDExCis6MTA2NjgwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRkY0Cis6MTA2NjkwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMEYxCis6MTA2NkEwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkQ0Cis6MTA2NkIwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRkM0Cis6MTA2NkMwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEMxCis6MTA2NkQwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRkE0Cis6MTA2NkUwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMEExCis6MTA2NkYwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjg0Cis6MTA2NzAwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjczCis6MTA2NzEwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDcwCis6MTA2NzIwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjUzCis6MTA2NzMwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDUwCis6MTA2NzQwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjMzCis6MTA2NzUwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjIzCis6MTA2NzYwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDIwCis6MTA2NzcwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjAzCis6MTA2NzgwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwCis6MTA2NzkwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkUzCis6MTA2N0EwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRkQzCis6MTA2N0IwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEQwCis6MTA2N0MwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRkIzCis6MTA2N0QwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMEIwCis6MTA2N0UwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjkzCis6MTA2N0YwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjgzCis6MTA2ODAwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDdGCis6MTA2ODEwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjYyCis6MTA2ODIwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDVGCis6MTA2ODMwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjQyCis6MTA2ODQwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjMyCis6MTA2ODUwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDJGCis6MTA2ODYwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjEyCis6MTA2ODcwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDBGCis6MTA2ODgwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkYyCis6MTA2ODkwMDAwMDAwMDBGRjAwMDAwMEZGMDAwMDAwRkYwMDAwMDBGRkZDCis6MTA2OEEwMDAwMDAwMDBGRjAwMDAwMEZGMDAwMDAwRkYwMDAwMDBGRkVDCis6MTA2OEIwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMERBCis6MTA2OEMwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMENBCis6MTA2OEQwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEJBCis6MTA2OEUwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEFBCis6MTA2OEYwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkE4Cis6MTA2OTAwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjk3Cis6MTA2OTEwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjg3Cis6MTA2OTIwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjc3Cis6MTA2OTMwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjY3Cis6MTA2OTQwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjU3Cis6MTA2OTUwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjQ3Cis6MTA2OTYwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjM3Cis6MTA2OTcwMDAwMDAwMTAwMDAwMDAyMDgwMDAwMDMxMDAwMDAwNDE4MDc1Cis6MTA2OTgwMDAwMDAwNTIwMDAwMDA2MjgwMDAwMDczMDAwMDAwODM4MDVECis6MTA2OTkwMDAwMDAwOTQwMDAwMDBBNDgwMDAwMEI1MDAwMDAwQzU4MDQ1Cis6MTA2OUEwMDAwMDAwRDYwMDAwMDBFNjgwMDAwMEY3MDAwMDAxMDc4MDJDCis6MTA2OUIwMDAwMDAxMTgwMDAwMDEyODgwMDAwMTM5MDAwMDAxNDk4MDExCis6MTA2OUMwMDAwMDAxNUEwMDAwMDE2QTgwMDAwMTdCMDAwMDAxOEI4MEY5Cis6MTA2OUQwMDAwMDAxOUMwMDAwMDFBQzgwMDAwMUJEMDAwMDAxQ0Q4MEUxCis6MTA2OUUwMDAwMDAxREUwMDAwMDFFRTgwMDAwMUZGMDAwMDAwMEY4MENBCis6MTA2OUYwMDAwMDAwN0ZGODAwMDA3RkY4MDAwMDAzNDQwMDAwMzUwMDJECis6MTA2QTAwMDAxMDAwMDAwMDAwMDAyOEFEMDAwMTAwMDEwMDA5MDIwNjhFCis6MTA2QTEwMDBDQ0NDQ0NDNUZGRkZGRkZGRkZGRkZGRkY3MDU4MTAzQzQxCis6MTA2QTIwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDY4Cis6MTA2QTMwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDU4Cis6MTA2QTQwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDQ4Cis6MTA2QTUwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDM4Cis6MTA2QTYwMDAwMDAwMDAwMDAwMDAwMDAxQ0NDQzAyMDFDQ0NDQ0NDQzVBCis6MTA2QTcwMDBDQ0NDMDIwMUNDQ0NDQ0NDQ0NDQzAyMDFDQ0NDQ0NDQzgwCis6MTA2QTgwMDBDQ0NDMDIwMUNDQ0NDQ0NDQ0NDQzAyMDFDQ0NDQ0NDQzcwCis6MTA2QTkwMDBDQ0NDMDIwMUNDQ0NDQ0NDQ0NDQzAyMDFDQ0NDQ0NDQzYwCis6MTA2QUEwMDBDQ0NDMDIwMUNDQ0NDQ0NDMDAwMDAwMDBGRkZGRkZGRjFGCis6MTA2QUIwMDAwMDBFMDAwMDAxMTYwMEQ2MDAyNjI1QTAwMDI2MjVBMDA1Cis6MTA2QUMwMDAwMDI2MjVBMDAwMjYyNUEwMDA3MjAwMDAwMTIzMDBGMzY3Cis6MTA2QUQwMDAwMDI2MjVBMDAwMjYyNUEwMDAyNjI1QTAwMDI2MjVBMDBBCis6MTA2QUUwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEFBCis6MTA2QUYwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDlBCis6MTA2QjAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDg5Cis6MTA2QjEwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDc5Cis6MTA2QjIwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDY5Cis6MTA2QjMwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDU5Cis6MTA2QjQwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDQ5Cis6MTA2QjUwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDM5Cis6MTA2QjYwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDI5Cis6MTA2QjcwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDE5Cis6MTA2QjgwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDA5Cis6MTA2QjkwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEY5Cis6MTA2QkEwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEU5Cis6MTA2QkIwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEQ5Cis6MTA2QkMwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEM5Cis6MTA2QkQwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEI5Cis6MTA2QkUwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEE5Cis6MTA2QkYwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDk5Cis6MTA2QzAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDg4Cis6MTA2QzEwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDc4Cis6MTA2QzIwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDY4Cis6MTA2QzMwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDU4Cis6MTA2QzQwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDQ4Cis6MTA2QzUwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDM4Cis6MTA2QzYwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDI4Cis6MTA2QzcwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDE4Cis6MTA2QzgwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDA4Cis6MTA2QzkwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEY4Cis6MTA2Q0EwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEU4Cis6MTA2Q0IwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEQ4Cis6MTA2Q0MwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEM4Cis6MTA2Q0QwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEI4Cis6MTA2Q0UwMDBGRkZGRkZGMzMxOEZGRkZGMEMzMEMzMENDMzBDMzBDMzI5Cis6MTA2Q0YwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDY2Cis6MTA2RDAwMDBGRkZGRkZGMTMwRUZGRkZGMEMzMEMzMENDMzBDMzBDM0FCCis6MTA2RDEwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDQ0Cis6MTA2RDIwMDBGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMENDMzBDMzBDMzE2Cis6MTA2RDMwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDIzCis6MTA2RDQwMDBGRkZGRjQwNjFDQkZGRkZGMEMzMEMzMDVDMzBDMzBDM0FDCis6MTA2RDUwMDBDRjMwMDAxNEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREVDCis6MTA2RDYwMDBGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0VBCis6MTA2RDcwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDRERECis6MTA2RDgwMDBGRkZGRkZGQTMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0UyCis6MTA2RDkwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREI1Cis6MTA2REEwMDBGRkZGRkZGNzMxRUZGRkZGMEMzMEMzMENDMzBDMzBDMzA0Cis6MTA2REIwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDRDg1Cis6MTA2REMwMDBGRkZGRkZGNTMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0E3Cis6MTA2REQwMDBDRjNDRjMwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDQ1Cis6MTA2REUwMDBGRkZGRkZGMzMxOEZGRkZGMEMzMEMzMENDMzBDMzBDMzI4Cis6MTA2REYwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDY1Cis6MTA2RTAwMDBGRkZGRkZGMTMxMEZGRkZGMEMzMEMzMENDMzBDMzBDMzg5Cis6MTA2RTEwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDQzCis6MTA2RTIwMDBGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMENDMzBDMzBDMzE1Cis6MTA2RTMwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDIyCis6MTA2RTQwMDBGRkZGRjQwNjFDQkZGRkZGMEMzMEMzMDVDMzBDMzBDM0FCCis6MTA2RTUwMDBDRjMwMDAxNEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREVCCis6MTA2RTYwMDBGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0U5Cis6MTA2RTcwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDRERDCis6MTA2RTgwMDBGRkZGRkZGQTMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0UxCis6MTA2RTkwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREI0Cis6MTA2RUEwMDBGRkZGRkZGNzMwRUZGRkZGMEMzMEMzMENDMzBDMzBDMzA0Cis6MTA2RUIwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDRDg0Cis6MTA2RUMwMDBGRkZGRkZGNTMwNEZGRkZGMEMzMEMzMENDMzBDMzBDMzg2Cis6MTA2RUQwMDBDRjNDRjMwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDQ0Cis6MTA2RUUwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0RDCis6MTA2RUYwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDk4Cis6MTA2RjAwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0JCCis6MTA2RjEwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDc2Cis6MTA2RjIwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzlCCis6MTA2RjMwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDU1Cis6MTA2RjQwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzdCCis6MTA2RjUwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDRDMzCis6MTA2RjYwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzVCCis6MTA2RjcwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDRDBGCis6MTA2RjgwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzNCCis6MTA2RjkwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREU3Cis6MTA2RkEwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzFCCis6MTA2RkIwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREI3Cis6MTA2RkMwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0ZCCis6MTA2RkQwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDc3Cis6MTA2RkUwMDBGRkZGRkZGMzMyMEZGRkZGMEMzMEMzMENDMzBDMzBDM0E1Cis6MTA2RkYwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDYzCis6MTA3MDAwMDBGRkZGRkZGMTMxMEZGRkZGMEMzMEMzMENDMzBDMzBDMzg3Cis6MTA3MDEwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDQxCis6MTA3MDIwMDBGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMENDMzBDMzBDMzEzCis6MTA3MDMwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDIwCis6MTA3MDQwMDBGRkZGRjQwNjFDQkZGRkZGMEMzMEMzMDVDMzBDMzBDM0E5Cis6MTA3MDUwMDBDRjMwMDAxNEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREU5Cis6MTA3MDYwMDBGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0U3Cis6MTA3MDcwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDRERBCis6MTA3MDgwMDBGRkZGRkY4QTA0MkZGRkZGMEMzMEMzMENDMzBDMzBDMzdCCis6MTA3MDkwMDBDRjNDQzAwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREU1Cis6MTA3MEEwMDBGRkZGRkY5NzA1Q0ZGRkZGMEMzMEMzMENDMzBDMzBDM0FECis6MTA3MEIwMDBDRjNDQzAwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREI1Cis6MTA3MEMwMDBGRkZGRkZGNTMxMEZGRkZGMEMzMEMzMENDMzBDMzBDM0MzCis6MTA3MEQwMDBDRjNDRjMwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDQyCis6MTA3MEUwMDBGRkZGRkZGMzMyMEZGRkZGMEMzMEMzMENDMzBDMzBDM0E0Cis6MTA3MEYwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDYyCis6MTA3MTAwMDBGRkZGRkZGMTMwMkZGRkZGMEMzMEMzMENDMzBDMzBDMzY3Cis6MTA3MTEwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDQwCis6MTA3MTIwMDBGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMENDMzBDMzBDMzEyCis6MTA3MTMwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDFGCis6MTA3MTQwMDBGRkZGRkYwNjFDQkZGRkZGMEMzMEMzMENDMzBDMzBDMzk2Cis6MTA3MTUwMDBDRjNDQzAxNEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDRDFDCis6MTA3MTYwMDBGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0U2Cis6MTA3MTcwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDREQ5Cis6MTA3MTgwMDBGRkZGRkZGQTMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0RFCis6MTA3MTkwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREIxCis6MTA3MUEwMDBGRkZGRkZGNzMxQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzIwCis6MTA3MUIwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDRDgxCis6MTA3MUMwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0Y5Cis6MTA3MUQwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDc1Cis6MTA3MUUwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0Q5Cis6MTA3MUYwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDk1Cis6MTA3MjAwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0I4Cis6MTA3MjEwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDczCis6MTA3MjIwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzk4Cis6MTA3MjMwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDUyCis6MTA3MjQwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzc4Cis6MTA3MjUwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDRDMwCis6MTA3MjYwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzU4Cis6MTA3MjcwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDRDBDCis6MTA3MjgwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzM4Cis6MTA3MjkwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREU0Cis6MTA3MkEwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzE4Cis6MTA3MkIwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREI0Cis6MTA3MkMwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0Y4Cis6MTA3MkQwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDc0Cis6MTA3MkUwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0Q4Cis6MTA3MkYwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDk0Cis6MTA3MzAwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0I3Cis6MTA3MzEwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDcyCis6MTA3MzIwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzk3Cis6MTA3MzMwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDUxCis6MTA3MzQwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzc3Cis6MTA3MzUwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDRDJGCis6MTA3MzYwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzU3Cis6MTA3MzcwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDRDBCCis6MTA3MzgwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzM3Cis6MTA3MzkwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREUzCis6MTA3M0EwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzE3Cis6MTA3M0IwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREIzCis6MTA3M0MwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0Y3Cis6MTA3M0QwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDczCis6MTA3M0UwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0Q3Cis6MTA3M0YwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDkzCis6MTA3NDAwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0I2Cis6MTA3NDEwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDcxCis6MTA3NDIwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzk2Cis6MTA3NDMwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDUwCis6MTA3NDQwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzc2Cis6MTA3NDUwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDRDJFCis6MTA3NDYwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzU2Cis6MTA3NDcwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDRDBBCis6MTA3NDgwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzM2Cis6MTA3NDkwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREUyCis6MTA3NEEwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzE2Cis6MTA3NEIwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREIyCis6MTA3NEMwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0Y2Cis6MTA3NEQwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDcyCis6MTA3NEUwMDAwMDBDMDAwMDAwMDcwMEMwMDAwMjgxMzAwMDBCODE1ODMyCis6MTA3NEYwMDAwMDAyMDIxMDAwMDEwMjMwMDAwRjAyNDAwMDAxMDMzMEMwCis6MTA3NTAwMDAwMDBDMDAwMDAwMDgwMEMwMDAwMjgxNDAwMDBCODE2OEYwCis6MTA3NTEwMDAwMDAyMDIyMDAwMDEwMjQwMDAwNzAyNTAwMDAyMDJDMEU3Cis6MTA3NTIwMDAwMDEwMDAwMDAwMDgwMTAwMDAwMjgxODAwMDBCODFBODBCCis6MTA3NTMwMDAwMDAyMDI2MDAwMDE4MjgwMDAwRTgyOTgwMDA4MDM4MDMxCis6MTA3NTQwMDAwMDEwMDAwMDAwMDEwMTAwMDAwMjgxMTAwMDA5MDEzODU0Cis6MTA3NTUwMDAwMDAyMDFDODAwMDEwMUU4MDAwRTAxRjgwMDAwMDJEODk1Cis6MTA3NTYwMDBDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQzVCCis6MTA3NTcwMDAwMDAwMjAwMENDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQzVCCis6MTA3NTgwMDBDQ0NDQ0NDQzAwMDAyMDAwQ0NDQ0NDQ0NDQ0NDQ0NDQzRCCis6MTA3NTkwMDBDQ0NDQ0NDQ0NDQ0NDQ0NDMDQwMDIwMDAwMDAwMDAwMDY3Cis6MTA3NUEwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkZCNTFDRkMwRjAwMzUwCis6MTA3NUIwMDA4QUI3QjEzMTMwRUNFNjQ0RjBFOTgxNTkxODE4MThGODZGCis6MTA3NUMwMDA5OUM4RDdCRjExNjhDMDRFMjBCRTAxQzQwNzU5NDhENzFCCis6MTA3NUQwMDA3RjU1MUFDMTVFMjZDOUMwNzAwQTg4Mjc4ODMzMzBCNDI3Cis6MTA3NUUwMDA0QTIxQzRFRDY1MTgxOEVFMDFGOTJCQTE2MjcyNDAzREU1Cis6MTA3NUYwMDA3M0E0Qzk3N0YzMjgxRTNDQjhEMDE0OTUxRjYyMENBMTYwCis6MTA3NjAwMDA1Rjk4NDBFODIyMzRGOTUwQThCQ0I4MUU4NDJFMzZDNUQ1Cis6MTA3NjEwMDA2RUFFODQxRTcxRjZBN0E5QTBGMkJENTVGMEFCQ0ZENTEyCis6MTA3NjIwMDA0MEU1QzdBMkE5MEY4MUYyMDE3RUU5QjIzNEQ4MDMwMDc4Cis6MTA3NjMwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDk4Cis6MTA3NjQwMDAwMDBCRUQ3RDBCNzQ1NUQ1QjVFOERBOUZCM0NGRkY2NDIxCis6MTA3NjUwMDAyNzg0NzAxMjNFRUVDNDAwQzEwNjNDNDI4MEEwQTgzQkM1Cis6MTA3NjYwMDBGQzFBN0RENDFFMTAyNUU1QTExQzQ0NkIwMDQ5MjJBNkZFCis6MTA3NjcwMDBENzhDOTZENzZDQzg4NzA0NTBFM0U3NTFCRDQ1N0JBMEYzCis6MTA3NjgwMDBEODhCMEU1QkEzQTY4QUJEQjQzRDg4N0FBOUMzREIyMjQyCis6MTA3NjkwMDA1QUE1MkQ3QTgzRkEyQzU4QTBCMTU3MkFCRDRGQ0I1QjNGCis6MTA3NkEwMDA3M0FFQjU5MkJENzdDRUM5Qzc0RjQ3RUY3ODhENDM3NjlECis6MTA3NkIwMDBENkRFRUIzQkZGNkJDRUI5NTYzNEQ5NEZGMjJFMjdFNDIyCis6MTA3NkMwMDAxQ0ZDRDBBNzI5MTE0MkE2RjczREM5MkQ1OTMyQzkyMzY4Cis6MTA3NkQwMDBFNDFCM0U4MjNGMUZGOTIzNTM0ODE2MjEwRDNFRjZCQ0EyCis6MTA3NkUwMDAzRDEwRDkwNUNGMkQ4RDg0QTQyNkMyRjc3MTQ5MTIyMUYyCis6MTA3NkYwMDAyNDQ4NDg4OTlBMEIyRDAyQjE4NzBCRTE1OTc3NjE3Q0E4Cis6MTA3NzAwMDAzMjNFNjdDMjMzODdDODg0OEM4NEYyMThGREJEMjBFQkZCCis6MTA3NzEwMDBGQjlDNDJGRjM5OUFBODgwRjExNEY2OEFBOEE0M0M5NkYzCis6MTA3NzIwMDBDMkY2REYyMjY0NDZERjNDNDhERDU3RjU3OEI4NkZERUVECis6MTA3NzMwMDBFRUE3QTI2QjI0QzVFQjlFODM3Rjk0RTU1OTg5NTBFNkEyCis6MTA3NzQwMDBGQTBENDdBNUM3OUZCN0Q1MUY0RkMyQjkzODJGOTVBOEM3Cis6MTA3NzUwMDAzODJGREU5RTEwOEJEOEU3RTdFRUU3QTM0NkYyRjhGMzZBCis6MTA3NzYwMDBFM0ZCQzMyREQzQjgwMjZFNkQ4RDNFN0NCNjM2RUEyNEEyCis6MTA3NzcwMDBFNTI1ODQzNjMzM0I0QkU5MzM0NENDNURBNUZEREJDREI5Cis6MTA3NzgwMDAyMzEyODcxRjlGMEY4QzYzRDBGQUY0N0Y0MkUxREU5Q0E3Cis6MTA3NzkwMDA0QjkyNDFDMDIxNDkzOEUwRDYxQzVBRUMzM0QzRjQyNzMwCis6MTA3N0EwMDA5RTI0OTdDMkFEODRDRkI5QThGRjdBRkQzMDJGMEEwNzc3Cis6MTA3N0IwMDAzRkNDMkIwRDNDOTdDMkJDQTZGNzlGOTdCRkQ4M0RBRkRGCis6MTA3N0MwMDA2QTYyODdDRjcwRTcxNTk4NDRDODIxQzA4NzZBMTI4MjIxCis6MTA3N0QwMDA3OEI5Q0REMTlGQUM5QjU2Nzc5QUZFMDhBNzBCRDVFMDIwCis6MTA3N0UwMDBFQjFCMjI5RTgyMjU3MkRGRjgwMDA3MjNFMEEwMkY2RjlCCis6MTA3N0YwMDAzNEM3NDk2RjZFQkEwNjc4MjBCRTNBMzg3Q0UyMEFFMzk1Cis6MTA3ODAwMDAwN0FCMEY4RkY0MTk5QTFEOTM4MDM1NjhGMTEwRTAyREE2Cis6MTA3ODEwMDA5RjMwRjhFNTU3QjdERTJBNEYyMTk0RDUzQTBGNEVBMDk2Cis6MTA3ODIwMDBGMENCRUY1RUI5OTA0MEY5RTgxNTI3ODBERjlBQ0JBNjQwCis6MTA3ODMwMDA1NkNFQTVGNUIyQ0I2M0FGMkNBMDRENDIzMTQzMDI3QUIwCis6MTA3ODQwMDBERDBBOUQxNTQwN0Y1RkIzMkE2OEI5MDlGQUEzNjVDQkFECis6MTA3ODUwMDBCQUNBQjQxMDZFQTYwMzZFMTQ3Mjg2NEFDQjFFRjhCNTZGCis6MTA3ODYwMDAyODBERkM0ODJGMUVBNDczREVGRUVEMzNDMUNGNDM2QzAwCis6MTA3ODcwMDBGODQzN0U1RUVGQTBDQjhDNzhCRjkxRTFDQkEyRkYwMUY1Cis6MTA3ODgwMDBCRTQ2MTAxQjVGRDM3RUIyMkIzNTA3NUVCMjVDRTMzQzc1Cis6MTA3ODkwMDAwQUJGMjBCQzZGRkQ5QjhDOTc0MzlFRjQxOTk0Q0UzRDhDCis6MTA3OEEwMDBBNUIyOUVBNDc4Q0EyNkIxNkNCNThDRTI2M0ExNEE0MDA5Cis6MTA3OEIwMDA4RUU1RTRFQTEyOTBDMzYwNzg2OTI2QTQxMkY4OUY0QTI0Cis6MTA3OEMwMDAwN0IyQzgyNkU3N0VDRUY5QUI2MENERUU5REFENzQ5Q0M1Cis6MTA3OEQwMDAzM0IzNDMzMUE4OTVBRkQzQjk0RUVEQkY5RTNCNDBCRTA1Cis6MTA3OEUwMDA3ODZERTVCMkU3NDgwMkM3RUIzQzU4NDRFNzY1OTVDOUI3Cis6MTA3OEYwMDBCMTg3MjlERDZDMkQzREFDREJFNUUzQjE1RUY5RTJBNjk1Cis6MTA3OTAwMDAwRjYyQTgzM0I4M0NBMEYwNTE0QTY1RDMxRkY5RUNGNERDCis6MTA3OTEwMDBBMTdDNEFGQTA4REZFOEM0Qzc3MEYxNzU3QTk4RjRGMURGCis6MTA3OTIwMDA1OUM3MTM3OEVEQ0Y1NzFCMDU1RTdEODQ3RURGNTJCMkI5Cis6MTA3OTMwMDA3ODQwN0RENTFGQUY0RjkyMDQ2RDE3MkEyNTY2MzI0REQyCis6MTA3OTQwMDBCQkZGQjRFQjBCRjdEMzI2REZERDcyNTQxOTM1QTM2QTA2Cis6MTA3OTUwMDBFNzQwNzhDQjc1QUU1N0Y0RUI2RjUwOEM3NzQ3RDBBMkU5Cis6MTA3OTYwMDBBQUEzN0NENUI4MUU2ODhGREU2MzExNEE3NzY3NDBGNkZDCis6MTA3OTcwMDA1MDc4MjgxRDE3QTVBMDRDOEE0OUVDNjFENjRENEFBMjIzCis6MTA3OTgwMDA2NTdGRDQ0QzZFNDEzQTQ4MjI1RUM0RkNCQzg2RUM5MEM0Cis6MTA3OTkwMDBCMzZBQUU1MzBFOTMyQTRCQjJDRkRGREZBMEUxM0MzNDgzCis6MTA3OUEwMDAxODJGMTdFQzAyREEyMTA1ODUxQTIyMjlBMDVCNDFBRkI2Cis6MTA3OUIwMDBBMDkyQ0U5RDBGNjVBNzlERDE2NjRDMjVFOUYwQTA3MkRGCis6MTA3OUMwMDBCQzRCOTJBMEQ3NkYwRDREQkVCOEM3NUJFMjlDRUY5MDQ5Cis6MTA3OUQwMDBEQjg1NTRFMzNERDEyNjhEOUNFRTZCQTc5MkY3MDQ3RUE4Cis6MTA3OUUwMDAyODEwMkYxMzc2MURDN0QzNjYwRkQ5MkI1RDQ4RTVDMTJDCis6MTA3OUYwMDA5ODZCQzE1MjIwOUJFMUQzMkM2QTg3QzA5MzJBOUZDREZDCis6MTA3QTAwMDA2M0E2RUE0MDU3NjQ4RkE0QzIzQzcxNDg4QTQ3NDJGNTk2Cis6MTA3QTEwMDAxREQ0MEI0QTA2RjYyM0ZCRUE5MEZFOTQ5MDg5NEZGMUExCis6MTA3QTIwMDAzREYzQkNEOEY4QkQ2NTVGQTIwNkYwNTMxREQ1OEMyRDgzCis6MTA3QTMwMDA3NDhFNkIxNUQzRDgwODc0MzE4REM5QTdFQUU4ODQ3OUEwCis6MTA3QTQwMDBBMEVGM0MxMjlCRDdCN0E1N0M1Qzg3OUFEMzk2ODc3NjJDCis6MTA3QTUwMDA1OTA2RkJBRTVBQTUyQTdGMkE3Q0RGMzY2MTIwN0UyMjlBCis6MTA3QTYwMDA0OTRGNEZCNzBEOUU2RTdCRjA2Njg5REE4MzVGQTJCRkU4Cis6MTA3QTcwMDBDQzI0MzMwMThFN0Y4QTJEQ0U0QTBEODBBRkY3MUIwRkE5Cis6MTA3QTgwMDBFQUVBRjgzRTdCRDBGRDdEQUQ0MkVBRDJDOTgxNTZDOTEzCis6MTA3QTkwMDBDN0Y4RDI2NzY5NjAxRjg4NzVBRjA1NzZBNzIwREQxNjI1Cis6MTA3QUEwMDBEQkM0RDY5QjlCOEJGMDVEQkJFNzE3QkE2QUUzQkZCNTFGCis6MTA3QUIwMDA1NENENzhBN0Y2NUY4RjgwQjdFOEE3Qjc3REYyQTBBMzczCis6MTA3QUMwMDBCREJCNUQ2RjdGNDI1RTUwN0IxOEU4NUNEMDQxNTA0QTgxCis6MTA3QUQwMDA2Qzk1RTg3QjZGNkNCMTA1RUE2Q0VENjMxNTBDRkYxOUQyCis6MTA3QUUwMDBFNkRGOEJBRjRGMzk3RkQxNkUzMEJBRkFEM0VFQTY1NkIwCis6MTA3QUYwMDBEMDRGRUY2OTFENTc1RDRDRTlFOEY3NEYyOEIxNERGNEMxCis6MTA3QjAwMDA2QkY1OEU4OUYzQzA1RTdBOEZEM0I3QzBEMzg5REQ0RDE0Cis6MTA3QjEwMDA3OUU5RTgyMzEzOUU3RTIxRjk3MTFDNDE1RkQ1RjJGMkM5Cis6MTA3QjIwMDAwMUU5NjEzMEZBN0FDQTRENUY5RDU3N0YyMUY0NzVDODJCCis6MTA3QjMwMDA0RDVGMUMxRTI3M0JEOUZBQzlGRDIzMTg1RTM4QkVEQ0Y5Cis6MTA3QjQwMDBGOEM5ODg5NzRGREJBRTNGM0RGRDVBQTI3Q0VERURCQ0Y2Cis6MTA3QjUwMDAzQTNEM0RGMUY5MEE3QzdERDZGOTBFNDY0Nzc5ODY2OUIyCis6MTA3QjYwMDBFQTc0RkM1MUQ0OEU5MTQwN0Y5NDkxNTg4QUNFNTNBN0U5Cis6MTA3QjcwMDAwRkQ0NUIzMUE2Qjc4NDVDMTJFRDRGNEJDQzRFNTNDOThBCis6MTA3QjgwMDA2QkQ4NUUyMTI5NEI0NzdCREI2OTY3Q0M1N0U4NEJEQTIyCis6MTA3QjkwMDA0RjczMDk0OTdBNzE1RjY0RkE1MDRGOTVBODg0RTkzRkExCis6MTA3QkEwMDAzMzk0M0YwM0VDMDhGRUEzQ0M4RUMxQkFCM0MwRkUwN0VBCis6MTA3QkIwMDBGRDM1OUJFQjVGODlEQTVCNzQ3REExMzJFN0JFMzdFMDcwCis6MTA3QkMwMDBCMjNGMTRCRTVGRTg2NzZGMEQ3MzdGRUM5N0Y5RkUzODI0Cis6MTA3QkQwMDA0ODQyQTg4RkM0RkUzODAzN0ZGNkVFOEIzOTVDNDc2QUIzCis6MTA3QkUwMDBDNDk0RTlCQUI1ODM5RUU0MjYwOUI0MUI0MUZENEM4RUNBCis6MTA3QkYwMDA0QTQ5RTYyRjIwMjU2MDM3QUY5NzBBNjJBMDBGRTgzRTdBCis6MTA3QzAwMDBBRjI3OEI3RTdGRUYwNzBBRUE4Nzg2NjhERDhBMTY1OEUyCis6MTA3QzEwMDBGNkI1MEQxM0JCRTlCOEY3MzQ5MjY5QzU5RUJFRjFFRTE3Cis6MTA3QzIwMDA1MTNCN0MwMEVGRjZFMkY1MEVCQkY2QkI1MkEyNTBCNjFDCis6MTA3QzMwMDBFOTFEN0Y1NDlCNTYzQzBEODY1M0RGRUVBNkYwOTAyOTNDCis6MTA3QzQwMDAyMDgxRkYwMkExRkJBMjJGMTgwMDNGRjZCRTE3NEVGNkJGCis6MTA3QzUwMDBCMkQyQkY5QzBCMzY0RjAxMTY1M0IwMkY2REE3QjYzQjY3Cis6MTA3QzYwMDBCOTE4OEFBM0E1MEE0QTA3RUQxRUZFRERGQTREMDVFQ0Y4Cis6MTA3QzcwMDA3N0RCRkRBQ0JDNjNEM0FDOEQxNjk0NDdGMkZBNTYxNTk2Cis6MTA3QzgwMDBGQjlFQ0ZDQUI3NkRGQTQxMDVFQzBCREFCMkU5OUFBOUFGCis6MTA3QzkwMDBCRTZFRjMyNEFCRTI2OUY4RkIzNjU5NzZEODVGNERDNjY5Cis6MTA3Q0EwMDA4MkYyRkY0M0Q3RTFGNzk5MTdCRDQwRTE0OTgxMTJCMzUyCis6MTA3Q0IwMDAwQ0QyNkI5NzE1MEFCRjQxQzdERDk1MjUwMEZGRDcxNDdECis6MTA3Q0MwMDAwMkY0RUMzNzYyRjE5QjBDQTQzRkE0N0I3RkFFMTlEQjdFCis6MTA3Q0QwMDA0MjRCMERGNDg1MENGNTI4REUxRTk2NjA1RkM3RUMzMTMzCis6MTA3Q0UwMDBGMEU3OUM0M0ZBQTU3QzQxQkZBRkNGRDZCMTNFRDE2RDQyCis6MTA3Q0YwMDBGNjU5NTE5RjNERDY4QjI3MTdERUVFNTU3QkZDODBCNzlBCis6MTA3RDAwMDBFRjhERjlGMDE3MTM2OTNGRDY0MjM5MDY2NEYzQkQwREM0Cis6MTA3RDEwMDA0NUQ5MkI2RDc4N0NDQzM3QTcwQUYwNDg5QTczRDEyRUMxCis6MTA3RDIwMDA4OTkyREUxRjEzQ0E2MkRGNUM0MDNBMkJDMDc4MUM0Mzg1Cis6MTA3RDMwMDAyNTFGQTE3NDNBMkVERTUzMDEyODMwQUFGNEU3NzA4Rjc0Cis6MTA3RDQwMDA0QkU2RTlFRkExNURBNTQ4RTdCRTM0NzQzQkNBMEQwN0Q5Cis6MTA3RDUwMDBEQUUzQTg0NTU0M0U4RDkwNDgzQzlEREM1REE5RTZBMDQxCis6MTA3RDYwMDAzQzE4NTE0OUQ3M0I4MDlGRTA5QjU0OUYzMEZCMkNFMTRFCis6MTA3RDcwMDAwM0ZGNTZBNjcxMzJDREYzMzNDMDczOTM0Q0M3MUQ0RDJDCis6MTA3RDgwMDA5MjA4QTdDMUUwOUEwOTlFQUREMTI3QjM1MTVFN0ZDRTdDCis6MTA3RDkwMDA3MENERDRERTBEQ0YxMTEyRTM5Nzk1NkEzOUYyQ0I1MDM2Cis6MTA3REEwMDBGRDNCNkQ3QzNGRDUwMjdFMzhGQTZDRTI3RTM4Nzc3QkY2Cis6MTA3REIwMDBCRkRBNDE2MjY5RjBFQjM3OUNGRTIxMERGNjI1QjY3MjAxCis6MTA3REMwMDBCRDZDMzA3RDEwNzJGQjg5MTg5RUREN0E2MTAxRDcwQjg2Cis6MTA3REQwMDAyRDUxQUExNzk4M0M1QzA4N0EyMEM4RTFERjAyQkI3RUNGCis6MTA3REUwMDA5MDlGNjE5MkI0RThGNzIwRjcwNzkxNTIyNkZGN0RGNDQ3Cis6MTA3REYwMDAzRkUwQjc1MTU1NEU3REEwMEQ1MTFGQkMyQkM1NUY5MDg0Cis6MTA3RTAwMDA5MTBFODkwNEYzQkI1RkVBQjg2MjAyRDA0RjNFQjNDNzVDCis6MTA3RTEwMDBBMzM3QjQ0NTEzMzYzOEQ0Q0I0Q0RGMDk3RDk2MkMxNkU2Cis6MTA3RTIwMDBGQThDMjBGQ0NFRTM3MzQ4OTIwRTNGRThDMzA3MzYyQzUxCis6MTA3RTMwMDBDRTQyQkZERDhENDE4NzFDOEFCNjJFQzZGREFGOEQ5RTFBCis6MTA3RTQwMDBEMTJGREFDMUZEQTM5OUYwQTc2QkM5NDQzQTc5NThBODlDCis6MTA3RTUwMDAzMDc5MTgzMTdCNTJFMEYzNDM0MkNFRTMyRTQzNEVENkM1Cis6MTA3RTYwMDAwQ0ZFQzRCMTBGOEI0Q0VEMzk3ODNFNURFRkNFOEJFNDQ4Cis6MTA3RTcwMDBEODI2REE0RTlEQURBNjNDMTRCRTZBRjk4QjU1MTI3RDBDCis6MTA3RTgwMDBFRTJDNjRGMEI3NjYxMUE0RDM5MEIxRTA4NDAyRkE1OEU2Cis6MTA3RTkwMDBFRDQ2N0Y0REE4RDJCRDJGQjY5NTE1RThBN0U3N0FENDU5Cis6MTA3RUEwMDBERjc2M0ZGNTAwRkJCOEExM0U5QjI4QkNERUI2RjEzRjc0Cis6MTA3RUIwMDA4NTVDNEFBMUVCNTAzNzEwMDNFQzA5RDVBNDIyMzEwMkFFCis6MTA3RUMwMDA0RjNEMEZFODQ1MzU2MzIxN0M3NjU3NTRDMkYzQkNEOTRBCis6MTA3RUQwMDBGMTRBRDlBNjA3NTQzM0JFMDVFQThGRjhDQTdERURCMDQyCis6MTA3RUUwMDA1RUY1MjY1OTU2MjRDNjA3MzkzNjc4OUI0QUExNjMzRjZBCis6MTA3RUYwMDA5N0FEQkJGQ0E1ODlENjJBRDRFRjg2NDZDNjE3RjY5RjU4Cis6MTA3RjAwMDA3N0JEQUM3MkI5RTdBNDE3NDEyNzAzQzhCQkNGNDQxRkE0Cis6MTA3RjEwMDA2RkNBQzI1RkVEQzRCRjgzNEU4QUZBRjAyQkRBODVGQUNFCis6MTA3RjIwMDBGOUFCOUNGODc1OTczRjZGQkNGQTAxNEYxNDFGRTc1MUVFCis6MTA3RjMwMDAzQzAxN0Q5RTM3OUJEMTIzQjU0N0QxN0U3QUMwRDc2MTY2Cis6MTA3RjQwMDAwMkJDMUYyODM2NjQ0QkVBNkIxNzU2NzI5ODlGRjkyQ0I3Cis6MTA3RjUwMDBERDY4NTFCQkU3RkU5NURCNEQ2ODk3NUY0QzY1ODA4NDFCCis6MTA3RjYwMDBDRkI0RkVBMzdBNTlDMzc2NTQyRTU0MkFDQzZFOTdDMDUwCis6MTA3RjcwMDAxRTlGQUY2Q0FCODJGNjNCMjk1RTgxREY3NzAyN0Y0M0E5Cis6MTA3RjgwMDA3QzIwQTFBMTFDQUU5N0RCMkIzNkQyQkU1QjhGNEFCMjAwCis6MTA3RjkwMDAwMjQ2QUNCRTE0RjFFQkU3RkNGRTkxMjc1MTA5N0VDODA2Cis6MTA3RkEwMDAyREZGNEIyNkJCMENEMDRCMDNGQkJEOUEzOEJFNDUxOUE5Cis6MTA3RkIwMDBGQzBENjA5RjhDQTlEM0E3MDJEODMzQjVEQjVFMjc1NzkxCis6MTA3RkMwMDBBNjVCNTdCNUMyRjA3RjQ3RERFMTBFMzQ0RjlGNzdFRUQ5Cis6MTA3RkQwMDA0NzNDQ0I0REEwNDhEODk3NTQyQjM2RkEwRTk3MzE3RkFCCis6MTA3RkUwMDAwNzQ5RDBGNTQwN0Q0RTM3MUYxNTBFNENBRjBGQkFFNjRFCis6MTA3RkYwMDAzRjk2Qzc1M0RDRjU1RTU2QjhCRkNFNjBGMDMyNDRGRjAzCis6MTA4MDAwMDAxQjA3RUU1RkMwRTc2QzlCQzJFMzIzRDQwMDQzMjIxRTM0Cis6MTA4MDEwMDA0OUVDRkE1QkI5RjE1MDA1QkNBNzVDQjcwOUYwQjU1RDU2Cis6MTA4MDIwMDAyNkQ1Q0NERjFDNDczRDE0RTFFM0VEMkNDRkMxRjYwQjg4Cis6MTA4MDMwMDA1NTI2NDdDNzlBRkExNkMwRjdEODY2MTkyQzA1RjJCODI0Cis6MTA4MDQwMDA2MkUwRkI1MUNCRUJGNjdCMjgxRURBMEI0OTJDNjRFMDk3Cis6MTA4MDUwMDAxMEQ4RUY4QkUzMzVBNENCRkM1Q0E2QzdGMkVCMjkwOTYzCis6MTA4MDYwMDBEMDdBRjlBNTI0NjlEMEY2RURGQjFGQThEMDY4Mzk0MjczCis6MTA4MDcwMDAzNzU0NjAwQUZCQ0ExOTNFN0QyNTI0MDZBNjkwQzcyMjA0Cis6MTA4MDgwMDAyOTk5N0Q0RjQyNEM1MjI5RUZCMTQwOTUxRTE4M0YwMzZDCis6MTA4MDkwMDBGNzVGNzdFNjkyOThEN0U4OTMxQjgyQUVFRTZDQkVDNzg3Cis6MTA4MEEwMDAwRjdBRTQ4MUUyN0JBRTk4MDBGRUM2NTIxNUZERTRFNDRGCis6MTA4MEIwMDA2MzBBMjdFMTRGNTQyMDVFMTYzNzYxQkNGNjU5NkNERTI3Cis6MTA4MEMwMDBGNDBERTI1M0Q1RDlGQUM3REMzRjFCRjlBNDNERkMzNENCCis6MTA4MEQwMDBDRUMzNUE0NzYyRTNCMTVFOEM2MEZDODYwQTU0RjA1NzA3Cis6MTA4MEUwMDAzNjU1MzM3QkQ3OEQ4RkY1MjRGMUI4MzJERDRFQUY4NzBGCis6MTA4MEYwMDA5MDZFREEzRjUxRjhCRUUwQzU4RDYwRTc4RjgzNUY2OTBGCis6MTA4MTAwMDBGOTk3NEQ3RkRDMzgxQ0JCNDVDNDBGODVEREIyNDVFRENBCis6MTA4MTEwMDA0NEJFQjcyOENGODE1RTEyNzY4Q0JGQjgxM0M3RkRCRkFGCis6MTA4MTIwMDA5Q0RFODdEQUJGQkZDNEU5NkY3NURCMzU2RTdCQTY1RTY4Cis6MTA4MTMwMDBENjFERjZBQjdCNUQxRjc5NTI1N0MwRkNCNkU0NTM3RTZCCis6MTA4MTQwMDA0RkEzMDc3RTAzRkE5QUI2REYxMTVERkNBQjg5NDY1RjQ5Cis6MTA4MTUwMDAzRjdENzJDOEMwRUZBMjNDRTZBQzg2RjgxOTdBN0QyQTUyCis6MTA4MTYwMDBGNzYwOEY2NjMyQkUxQTJCRTREMDM3Mjg1RjBEMTA3RjgwCis6MTA4MTcwMDAxNDdDRjUxMTE1MTI4NzgwNEZENDBFQTQyRjYyOTYyMDFGCis6MTA4MTgwMDA1RjA5N0U1MUJBM0JEQUNGQTdGNDYwRDRDQkUwQjkwNkUxCis6MTA4MTkwMDBGRTIyMzlCNDVDNDhFOTNENjVCMzg3ODRCQzUwNEIzQjUzCis6MTA4MUEwMDBFMzEzQTVGRTc0RjdBMDIxMjMxRUNGOTQzMTdGNzU5NkFCCis6MTA4MUIwMDBENTZENDI5MzYwNjkyN0M2RjUyODVERkQxN0QwOTVBQTU1Cis6MTA4MUMwMDAyNzI1QzBFQjk4RkIxN0UwQkE3RUE5MzA1NkY3QUIyQ0Y5Cis6MTA4MUQwMDA3RUVDNUVDN0NGMzk3Qzg5QkUxQkVENzkzRjFCOEVCMjJBCis6MTA4MUUwMDBGODdEMzEzNjNGNTc5Q0JERkU1NzAzQzZEOUZEMzE5NzA4Cis6MTA4MUYwMDA5RDMzNEMzRjQyOEVDQUZEMDhEQ0VGMzU1OEZCRTFDNjhCCis6MTA4MjAwMDBENzk1QjMyMzkwM0U3QUNCMTlFNEVENEQyQUU3OEJBM0EzCis6MTA4MjEwMDBCQjFDNzBFOTA3MEY2NTQ3NkNBMEY5Rjk4NTlGRkU1M0Y5Cis6MTA4MjIwMDBDNjA1NTA4NzBEMDEwRTZFMzg1RUEyM0FGRDg3OUYzNzU2Cis6MTA4MjMwMDAxQ0RERjFFRjk3QjhEQzFGNEMxRTA0NEQzMzI1MkJFMEZECis6MTA4MjQwMDAzRjIzQ0NCRjEzMjJEQ0JGRTNBNEY3OURDRDMyREEyMTVDCis6MTA4MjUwMDBDMUIwQkMxMzRDQzlBQ0ZBNkVENEMxNjI3QzRBRUY1NUI0Cis6MTA4MjYwMDBBQThEREU0Nzk3MUU0QTQxM0JCNzNFQ0FBNDg3MDY5M0I0Cis6MTA4MjcwMDBCN0FCN0NFNjBEMkFDQUFERjRGQkYxQkU3QzAzQ0EyNTgwCis6MTA4MjgwMDA2OUYyMEQzMkUyQjVFRUYzQzkzNzE4MkFCQzdCRkQ5QkNCCis6MTA4MjkwMDAzQzdGRTA4NjcyNDFDN0M2RDJERjUxQjhBQzNFRTgyMUQwCis6MTA4MkEwMDBFODk3Rjk5OEFFQ0UxNjU3NUJDREY3ODEzN0YwN0RFNEFECis6MTA4MkIwMDA4RDI0MUU4MThGQTc4ODVDMDlGQzcyOEExQzhFNENCM0FBCis6MTA4MkMwMDBDOTkzRkI1NDhERjE0QjlCRTc2REYwQUY4QTc4Rjk0RDY0Cis6MTA4MkQwMDAxREFDMkNFNjczRjNGRENFRjJEN0M5RTIzQ0YwRUI3RDhBCis6MTA4MkUwMDBGRDNFMEZFMjZCQjVDQkJGRDZBQzMyRkQ3MTMzQTk2QjRGCis6MTA4MkYwMDAwNUJDQjU3ODQ4MTVDOEIxMUI3NEEyOEVBMEE2RUJCQTEwCis6MTA4MzAwMDA2NzFFOUNCMTkyOTZCRkNCRUQ5MUY3QTk1QzM2NkM3MTVDCis6MTA4MzEwMDBEMDM1QTFBNDA2Rjg3REE3NkJEQUI1OTcxMDY4OUY2Q0RECis6MTA4MzIwMDAyRDgwN0Q1QTM2QzE3REFCMUJDRUFCREE5Q0YzMUI2QzI2Cis6MTA4MzMwMDBGRUVFRjk1MkYyQzJGOTY2OUE4N0JBNDc0QTZCNEYzRjhFCis6MTA4MzQwMDAyMkU0MERDNzU3QTZCQzJBOTE0RkY1MEIyMDIwNUFERjE3Cis6MTA4MzUwMDA5QTQzRDhCRUYzQUQ2MEIyMDlFNTM1Q0JBNzFBQUNGREEwCis6MTA4MzYwMDAyRjU1NDYzRjlGQjZGREFCODNCNDVGRTdFQjU5MDBDQzdBCis6MTA4MzcwMDBENjk2NkJDNUMxMkYyNEUyODIzNUE0Q0UxQzREN0Y1NTA1Cis6MTA4MzgwMDBGNzJEQjI0NjEzNUJCREU4MTBFQjE1MEY1QzJGRDNCQzg1Cis6MTA4MzkwMDA0RkU4M0U0QkJFQjA2RkZFREY5NTEyQzdENDM0RjNCRjNCCis6MTA4M0EwMDA1RDQ5RDQ0MEZGNUVDMDgzMDI0RjE1RjE4RDdFNjA4QTI3Cis6MTA4M0IwMDBERjVBMzVENDI2NjU0MUJFNTMxN0VFMDNGRDg2RUFBMDg5Cis6MTA4M0MwMDA4NzVBRjgwNUU0NUEwOTkzNkJDMTEyRTc3N0I3N0ZGODJCCis6MTA4M0QwMDA0MzU1QzRFMTUzQzg3RjE4ODIzNkMwN0UwOEE1MTRGMDA3Cis6MTA4M0UwMDBERjk0QUIyNzdCRUJEM0YxNkE2MDVEMTc0MjI5OEU3Mjc1Cis6MTA4M0YwMDBBMzVFNjdGNTZCODg3MUQ3RUMzMkU0M0Y4QzNGRDRCNzRFCis6MTA4NDAwMDA5RjhGNzFGNUZBOTEwNkZBNzc1NTEyMzNCMTBGMTdERDg4Cis6MTA4NDEwMDBENTlFOTU0OEQyQTYwRjZCRDUxRTBERjhBQzk2REE0NUMxCis6MTA4NDIwMDBGNkY3RUJBMzhBQzM0RkVCN0U3QUE4RTUxQzJBODE3RDgxCis6MTA4NDMwMDA5MkNDRkM0ODNBMkREQkQ2RkRBNzBFODlFN0FGMTg1OTQwCis6MTA4NDQwMDA0QjA2RjBERkFEOEYzMjdGRjAwREVERTNCMzk4REZEMDU4Cis6MTA4NDUwMDAyOTdGNEYzNzMyQkZEQ0JGM0RGNjdEMERGQ0ZDQTcxRUU4Cis6MTA4NDYwMDAzRDc2MTVDMDdCRURCRjJBQzQwN0Y5MUI4Rjg1NDkwQUVECis6MTA4NDcwMDBFREIxQTQwNkY2RDg5QTJFQzU0Q0E2Q0RBRjY4NjJGMTMwCis6MTA4NDgwMDBDRkM3QzM4OEFGMzU0RjdBOTMwQjY5RkIzNTRGQkYzM0U2Cis6MTA4NDkwMDA4NUQwRjk5RERFRDRGM0UyNjhCMDlCMUY5NTU4MUU4MjBCCis6MTA4NEEwMDBENTNERTU2QUZBN0U4RDRBNTZBNEYzMUI0Q0Y2MzBGOUE5Cis6MTA4NEIwMDA3M0YyRDk2MDE1RjBCN0I0NjdGRkY1RDg2RkU3NTI4RjQ0Cis6MTA4NEMwMDBEN0I2REYyRUY2Nzg5MDZGNjkzRDY2OTczRjIyMjVDN0I1Cis6MTA4NEQwMDA0QkU5RTZDN0YyM0Y0RTNFMjJCMUY5RURGNTI0RkQzMEZGCis6MTA4NEUwMDBCRjNEM0JCNTA0OUQ0N0VEOUUwRjUwOUVDQzdERkM4NzY0Cis6MTA4NEYwMDAxMTgwNDNFRDVFQzVBMTA3NkFGNzI4MjlFRjE0N0MxRUExCis6MTA4NTAwMDA4MzI3QzQ4REE0MTk0MDI3OUM1RUJBRDY2MUJDQThBNjU3Cis6MTA4NTEwMDA3M0VCMDdFMEM3QThEREVCOTQ2QjE0MkVCMTE0QzBGNTI0Cis6MTA4NTIwMDAwRDI1QjYxMENBNEZGRDRCQzRBMEEwN0FGRkQwQzMxMUQxCis6MTA4NTMwMDA4MDJCRUQ3N0E1OTYwNUZBQzY0OURGRDBGRkQ5OUNGRUMyCis6MTA4NTQwMDBGRDExRDI4M0YxQkFEQUNFNzYzNjVFRDc1NzdFMEY3QTM2Cis6MTA4NTUwMDBBNUQ2MjUzRkRGODc1RkYyRkJEQjMzRDc3ODVDRjZDQzBGCis6MTA4NTYwMDA5RUExQzVFQkQ2RkVGMENDNDMxNjFERjdFNDkzN0Y3OEIxCis6MTA4NTcwMDBDOEEyRjNCRkU1QUZGRkY5RDBCNzgwM0Y3RkU2RDc0MTkwCis6MTA4NTgwMDBGRUQ3M0VGQUVCMDhCMUQxNjNBRDg3RjFFM0U5QjFDNEEwCis6MTA4NTkwMDBBMjdCNTQ3MkZBMzdERTI0Rjg0QjRFRkZGNEY3RTMwQzVCCis6MTA4NUEwMDBCQUVFRDM0RkZDMjVDRkEwRjVFQjdGM0E3RjE0QzBBMUU0Cis6MTA4NUIwMDBGRUM3NzM0NzBEQjRGRjA2N0E0RDdBRURGMzRBMjI1RThCCis6MTA4NUMwMDA4REJEMTIzMzgyRjZGMUE3MEIzRjA3QkEwRThDODM3OTZCCis6MTA4NUQwMDA5RTNBRTI4RDgxREJCOTk2QkU2Qjk4MEFGODVBODdGQTBCCis6MTA4NUUwMDAxOENBMUIyODlDNkIxRURCRkMwMUM4ODlGRUYwQjY0NjJFCis6MTA4NUYwMDBDQkU4QUM0RjhEMDZBNzdENERENzNCMEIxMDZGQTQwNzgyCis6MTA4NjAwMDBGNUE4QkI3RUVENkIxNDlGMTc2NkM2REYxOUYyQjEwNkE1Cis6MTA4NjEwMDBGMkFFRjZCMTc2MzY1RTI3QzU1RkE0M0ZGRTRFQzEyRjlGCis6MTA4NjIwMDBCM0ZBRTNFRjBFMTdGRUNFOTA1QkJFOTcwRjc5OEQ1RDI4Cis6MTA4NjMwMDAyMzFDNzE1MkYxRUM4QjBGQzZCM0UyMDNDODBCMjEwRjYwCis6MTA4NjQwMDAwNjgzNkZCNUM0RTZCNUNDNjMzRUU4MDFCRTdBMzJEODg2Cis6MTA4NjUwMDA4QkRGODU4MERGMUY5RTE5NDcyODdEMUNGN0Y0NUMwRjk4Cis6MTA4NjYwMDA3MkIzRTdBNzVFN0QxNzdEQkZFNkE3NkYyMDlGOURGRUQzCis6MTA4NjcwMDBGMTJCOUE4MUY5OTkyNDI0RTVGMTNDMzFGNjczMDhFNDUxCis6MTA4NjgwMDA3MDBEREJDQjkxREFEREUxOTQzN0QyODdBNzlBRTRBMkIzCis6MTA4NjkwMDA0QTIzODJFRjhGRTFGQjI0QTNGRjlBRTRGRTI1NTIxQUJFCis6MTA4NkEwMDBCQ0JERTEyOTYyNzY0MDcyMjRDMjY1RERFRURGNjlDQzkzCis6MTA4NkIwMDBCRUVDQzNBNzU0MEVGODNDQjYwMERFNjdDMkE3NThCRjk1Cis6MTA4NkMwMDAwRUVCOUY2OUMzRUI2RUM2QjdFRUZBMzU5NDNGNDFFRkYwCis6MTA4NkQwMDBGNUMzNkY1MjdBMDM5RUE3Nzc3QTU1RDA3QkE3QzFGRTY4Cis6MTA4NkUwMDAwQUY1Qzc3QjFGRkM5OUZEMzNEQ0ZEQ0EyQjZFRkUxNjE1Cis6MTA4NkYwMDBGMTYzMEU4N0NDRjQ2MTcxM0I2MEUwRjUwRDE3N0UzRkFFCis6MTA4NzAwMDBGNzE4MEUzQTEyNzAzQ0Y5NzE3QUY5N0Y4QUNCOEQxQUZDCis6MTA4NzEwMDA2MjU1MTZEOEVDMTM5Rjg3REEyNzkwNUY0NkUyRDZFOEI5Cis6MTA4NzIwMDBDMkJFRjk5RTg0N0QwNEE1QkY5MzhGMkExOEFGNjlFRDYwCis6MTA4NzMwMDAzQzgwNzJEQzJEMkY2QTQ4RkE3REZCNUYzRENDNUVBQzNECis6MTA4NzQwMDBEOUJCN0YwQUM4QjU5M0NGM0Q4QkY0NTlGM0Q4MzEwRDBGCis6MTA4NzUwMDBGNjJGMkZFRTc5NEFFQjJFRURFMzA3RDAwRjQ5OUI3RUUzCis6MTA4NzYwMDAzOEY5QTNGRDUzOTgzQzQ4QkZGRjBENkFBQ0ZGREE3RDkyCis6MTA4NzcwMDBDRUZFNkIxRkZCQzBEMUZGNUFBQjUzNjM3OTBDMDM4RjQ2Cis6MTA4NzgwMDBGM0JFNkEyRTg1RjVCRTdGQzg0MzQwOUVCRURGQTlBNDE2Cis6MTA4NzkwMDBGNUJGRjY3MEZEMjhFMEQ0RkFDQTgyREY0MTlDQkZFQzM5Cis6MTA4N0EwMDA3MEMwMDAzRERBQjVDOTFDNzUwN0Q4NkI4NzNEMDRFNDdECis6MTA4N0IwMDAzNzUxQ0QzRjc4NjlCOUVCOTUwMEM2MzNCQTBFNUZBQjQwCis6MTA4N0MwMDAxODM2RkZDNDMzMkU3OENFN0NDRDlBMUJBNkZEQ0RFQzk3Cis6MTA4N0QwMDA4RTk3QzExNkNBMkQzN0NBOEZEMjdEQTNERDdGRjU0QTg5Cis6MTA4N0UwMDBFNTI4OTBGQkNENjBDRjRGODRGMTYyNTFGMDdGMjg5MTU2Cis6MTA4N0YwMDAwNTk1MkM3RjUwRDZGRDY5RjUzN0VCQ0YxMzhBNjNCRTA0Cis6MTA4ODAwMDBBMDQ3OTc3QjdEQjY0ODhGNjJCRkM1RkQ0REFEQTFGNEYzCis6MTA4ODEwMDBGRUU4MDU5QUQ4MTdEMDcxNkQ3MjkwREFBQTU1RTlGMDgyCis6MTA4ODIwMDAzNjRCNjM3NjQ4QTZFRjk3NkFDQ0RGOTNFOTdCQzUyMDg5Cis6MTA4ODMwMDBFRDdCRjk5QkUzNDcwQkNCRjE3NEYzOUVDNkZCNzFGQjE5Cis6MTA4ODQwMDA1NzMzQzkwMzBGRUZBNzRDMzMxQ0VCMDU3ODJGQjJFNTY0Cis6MTA4ODUwMDBDNThGMjZDOThEOTAyNzRBNDIyMTc3M0MzQUVFQjNDNzhGCis6MTA4ODYwMDBBM0FCMEVFRDg3Rjg3M0VFRDVGQkYyMDFGRTExRDJBQzhGCis6MTA4ODcwMDBCRjg3NzYzQzg5OUQxQkMwOEU3NUM3OUZERDc5ODk5OTFFCis6MTA4ODgwMDBFMkQxQkU1MENEOTExNEU5REY1RkZGRjhCQjg5NzkyOEIyCis6MTA4ODkwMDBDRDYzRTZGOTBBNkRGMUY3NjZCRDVGRkM3REJENDZDN0E1Cis6MTA4OEEwMDA2REM5ODA4NzI1REE5QzdGRDI4MEJFNjQ5MjQ4Rjc3REFGCis6MTA4OEIwMDAwQkE3OUJDQjQ5Rjc1MzJCNjE5RTMxMTZCRjlGRUQ4MkNGCis6MTA4OEMwMDBEN0E1MUM1RTNGM0I5RjJFOUNBQTlFMEE2MkE4MUUwQTRCCis6MTA4OEQwMDBERkI5NEJDQzY2MTA4MUYzOTdGN0FDREQwRjdDMjZFMjU1Cis6MTA4OEUwMDBGN0Q2NDRGOTVDNzBFOEYwMUI2RTVFQzQyQURGRTI3QkM5Cis6MTA4OEYwMDBCNTIxRTQ0NTEwM0QyN0FENUVFODlCODdDNUY3NTU1MThFCis6MTA4OTAwMDBEQzI3NzkzODlGMUQ3OEYzNjYxRkM4MkQ5NTI0MkEwQjI0Cis6MTA4OTEwMDA2MUJGQzRFMzlBOTg2RjRGRkJDQjRCRjk4OTQ5RTdBQjMyCis6MTA4OTIwMDBFOTA2REFEQjc5QTlENTBGREMwNDcxNzU3RDBDQzYyMzY1Cis6MTA4OTMwMDA5NEIzOTdBMEZGRDBEREFGMTI4RDU5OTgwRjE2MzIyQTRECis6MTA4OTQwMDAxNERCMzhBREI5MkMzRUEzRUFGMUI0NzlDM0FCQjRDNDlGCis6MTA4OTUwMDAxM0IwNUVFNUVDNjVEOEFGRUM4QjYxM0QxMjFBNUFCRUUwCis6MTA4OTYwMDBFQzc3QUU4RTIwN0M3RDE0QkUyMDFGMTE2NEIwMkU5RTRECis6MTA4OTcwMDAzNzc1RjdENTExRDQzM0ZFODM5RTlERjBERDFGNjI3OUU0Cis6MTA4OTgwMDA1NEI3Q0I4MTE4RTQ1OUI5RjNBODJBREU2QTI3RDA1RjFGCis6MTA4OTkwMDBFQjMxMDlFMzI4ODI3RTVCMEJFQkNFMDMzOTNFNDAxRUIwCis6MTA4OUEwMDBENTRCOUFDREFGOUUyOThGQ0ExRkJBMTFGM0E4RkM5RjUxCis6MTA4OUIwMDAzNjhGQ0EyQTk4MDdGNjU4NkIzNjExNzk1NTk2NDRFN0QwCis6MTA4OUMwMDBEMUNBRjNBMkZFQTNGNUE1QjlBMDlGNUFGREUyRkJDQjQ1Cis6MTA4OUQwMDA3MzREN0JEOTVBN0YwMENCM0NFRjZBQjRCN0JEMDlFQTJGCis6MTA4OUUwMDBFNzhFMjY3NTlERThDRjMzQzkzNTM2MzkxQkYxQUEwOEM1Cis6MTA4OUYwMDBFNzdGRDZDQzc3MzU0NzlFN0NENDExNUYzQUYwRTY2NkE4Cis6MTA4QTAwMDAxRkU4NkZGQUFDMkMwMkY4NTFCQTAyQkIzRDJGRDU0RUNECis6MTA4QTEwMDBFQ0ZBNDgzQzA1MURCNTE2MEYxQ0JGNTNDRjVFODQ3RTkzCis6MTA4QTIwMDA3QzUxRjZFOTQ5RDM0QzUzN0ZCRThGRDkxRjgyN0U3RDlFCis6MTA4QTMwMDBCOTI0MDk3QUM5NjcyNDFFQjgwOUU4MzkzNzE0MEIzMkZBCis6MTA4QTQwMDBCQUM0Mzg1OTVCMDhERDUzRkRENkQxNTY3QzAzQzZEQjZBCis6MTA4QTUwMDBDRUU4MDRCOTVFRDA3MUZGRjk1RkM2RTc1RjY0NjE1QzgwCis6MTA4QTYwMDAyMjQ0MzA5RTk2NzkxRDY1Qjg4RTU1OUExOUY2REFFMDQzCis6MTA4QTcwMDA5ODdCNUVGQUJDRDRCQkJENkMzRDJERjFFNTJDRUZBQzEwCis6MTA4QTgwMDBEQTE5ODcxNTc5MUFBMjdFNTA0QTE0Nzg0MTFFRTZCMjg3Cis6MTA4QTkwMDAzOEFDRUM2M0ZDRDY4NzJGQUEyQTZDRkVDRDI2QjJEQzVDCis6MTA4QUEwMDAwMjEyNTA5Nzc3RTJEMTQ2NTU0RjYyRkQxMjdGRTI3QzY5Cis6MTA4QUIwMDBBRjIzM0VEN0NERTJCQUFFNzhFMjdDRTUxNkM2REY4M0JGCis6MTA4QUMwMDBFMDRGOUNDQkQ4MEE3MUI3ODkxMDlGOEJGMkYzN0QwNkRCCis6MTA4QUQwMDA4RkQzOTkyQ0FGMjgwMzNEQjUxNTBGMUM4N0VBNjg4Q0ZFCis6MTA4QUUwMDA2MUZCQkIxQUNCNTlCRTkyNDRCODVGM0JEOTA0NzQwMkY4Cis6MTA4QUYwMDA2RTA5NDZGNzNGNjgwMkJFMDkyQjgyMkY3RTg4RTUzQjUwCis6MTA4QjAwMDAyNTU2QkVDOUZCQ0M1Q0M4MzczQ0YwRTYxQjU1QUIyOEVDCis6MTA4QjEwMDA3REI0OUEwMUU0RkZDMUQ2QTcyNzY3MjA1RTg3M0I0RTRDCis6MTA4QjIwMDBGRkY1QjI3MURCQ0MxMEVFNzcwNzVCQjc5RTYyRTMwRTA4Cis6MTA4QjMwMDA3NTFDMTE1RkVCNUI5RjBGQzc2OTM1MDYxOUE3ODM4RDA1Cis6MTA4QjQwMDAzM0Y4RkMxOTlGRENCMTdGMzVFNjJGRjgyOEZGRkJFOUVECis6MTA4QjUwMDA3QkRGRUMxRTkyNDhEMzdGMTZFNzlGMDM2RjdBNTE1RTRFCis6MTA4QjYwMDBCN0U1QjJGQzI4NEY0OUM4NjQ0RTQwNjdGRjlFRDJCQ0FGCis6MTA4QjcwMDAzOTc4REVBMUVDMDJDQzlGQkY2MzdGM0JDQTE5MERDNkRBCis6MTA4QjgwMDBBMTU1M0NCMUQwNEFENjJFNjFDMjM5REJDODNDODJGMTM2Cis6MTA4QjkwMDA2NzRGNDlERTJBNzhERjQwM0FFMjczNDAwRjk3Q0IyQ0NCCis6MTA4QkEwMDAzRkI5QTRFNDI2RTgyNzFCRjg5MkNFQTNEQ0M3RjY5REM0Cis6MTA4QkIwMDA5RTkyOEI2Rjg2RkFGQkE3QkY5RTY4MDIzODk1MzMzQTY4Cis6MTA4QkMwMDAyMDA3RjMxRDcwNkMzNThBQzRCOTlEMDFGOURFNTNFRUEwCis6MTA4QkQwMDA4QzVCMTA5RjMzRkY5M0E4NEIzMDZFNEVFNTQyODdEN0Q2Cis6MTA4QkUwMDA2NjU3NTJCRDc4MUZGMjMzMjlCM0MwREVEQkZFQjU2QjhBCis6MTA4QkYwMDA2Mzc2N0VGRTY3MkRGRTFENTY1RkU0NkIwOTNFNEY5RjM4Cis6MTA4QzAwMDAzN0Q3OUEyQkYyRTYxMjNFQTUwQ0NFMjlGNUU2NTMyRjY0Cis6MTA4QzEwMDBDQ0I3RTc3RkYxN0NFQTkwQzhBN0U2RjFDQzBFRkE1RjBCCis6MTA4QzIwMDBCQUZDMzlGNzM5QzZDRjJCOUZGQTI5MkZERjBGMDdDOUI2Cis6MTA4QzMwMDA1OEM4QTdGRTg5ODdDNDUyOTAxN0YzNkIyNTA2NzkzMTZGCis6MTA4QzQwMDA2RUZBNzBGN0U3M0UwN0QwNkI4RjY0RTBFN0Y3MDEzODA0Cis6MTA4QzUwMDAzNkI5OTc5RjcwRTFFRDQ2M0ZDNkU3QzQ3OENGODM3Qzc1Cis6MTA4QzYwMDAyQTFEOUM0RjQ3NTczQkZCMTk1QkU3M0M5Rjc1NUU4MzcyCis6MTA4QzcwMDAzMzVFNTU2ODE1MzhFQTlGREY1NkU0RjgzRUJFRTMwMkRFCis6MTA4QzgwMDBDN0Y3ODlGNzRGNzU5NDI3MjUyRjc2RDRGRkQyOUUzOUUxCis6MTA4QzkwMDA4RUYyRTRDRTJCMURGNTJGRENCQkQ4NTFCRTI4QjVDQzBGCis6MTA4Q0EwMDA1MTdGREFDMTFCMUNERkE3MUY1QUUzRjgzRUYzQzg3QUQ1Cis6MTA4Q0IwMDA0Nzc5NTZGNzM3MURGNTFCQTg3OTAyRjkyQzcwNDAwMDRCCis6MTA4Q0MwMDBGN0FCREI0NkNCNzZGQTZDQ0ZBNjdBMjUwQkYzQjgzNTNCCis6MTA4Q0QwMDA5RUQ0OEZGMTY2OTY4QkRDOTc2N0UwNkVBNzE0NkJBNjI3Cis6MTA4Q0UwMDA0RUY5NTczMTI2Q0NEMzMxQ0ZGMDQ2RTQyM0E1Mzg2RjY3Cis6MTA4Q0YwMDA4RTgxRUY2NzJDMDBCRjEzMjk2M0U3QjQ0NEZDREE1MzdECis6MTA4RDAwMDA0QzUyN0VDOEVGMEJCOUYwRUI4QTRCN0I5NDZEMjlDMEI3Cis6MTA4RDEwMDBCMzc2RjRDQjA3QTU0ODdGQkM3QUEyRUU3Q0M2QTFDNThBCis6MTA4RDIwMDBCNTU1RTNCM0U1MDdFNEY5Mzg1RjhDQTU3QzgxN0VDNEQzCis6MTA4RDMwMDA4RjE1RDhCNzkwNzk2MUI0MEY2Q0ZCMUI4NEEzRDhERjczCis6MTA4RDQwMDA1Q0U2MjNDRDAwNTNDMTE3MTVDQjdCNDZCRjgwRDVDNDRECis6MTA4RDUwMDBCRUM2MkIwRjI3MkZCOUJGNUVGMUEyREQyNUU0Q0M2MDg0Cis6MTA4RDYwMDA3QTQ1NDk0RTczRTQyMUI4OUY1NEZFOTVGOTYwOUYxRUUxCis6MTA4RDcwMDA1OTg2RjJBODc3NUZEMDJCMUZFMzMzRTFCQjQ3OERBMTYzCis6MTA4RDgwMDA3Q0VDOTU3RjdCMEExQzcyNjFBOEY2OTk1QjRFREYwNTJGCis6MTA4RDkwMDA0MjFGQ0YwNUE1OTdENzExQzgwQkEzNzJFOUNFQUJBRjgxCis6MTA4REEwMDBDMjM4MThBOTI3OEVGMzgwNzk1NTcxMUZFODNENkE5NzVDCis6MTA4REIwMDA3REM1NjdEQjNGNDdDQTk5N0RGNkY3NjZBNzg2NjBCRDJDCis6MTA4REMwMDAzNkY5MjdFQzU1MDFENzExODU3NTcxOENFQjg1NjUwMjU1Cis6MTA4REQwMDBGQkFBQTZEOUIxMjhGODAxREJBMDhBNkQ5RkY2NURERjVBCis6MTA4REUwMDBGOTU4QkYzOUE0QzlFMDJGNkQzRTM4MUZFMzAzNUU3RkY5Cis6MTA4REYwMDBEQzA3NzlDRTREOUU3ODI1QUNBQjI5NUJENkQzRTUzQjFECis6MTA4RTAwMDA2REY2MzFGRjhDRDYxMDlDQjY3QjAwRkFEMDM0QkFFRkU5Cis6MTA4RTEwMDA0RkIzREU3RkYxMzFCRjRCQjNCRUY4MjBFOEI5OUNCMDUxCis6MTA4RTIwMDA2NjQwRkU0NEVCRkU1OThCMzA1Rjc3QTFBQUMzQkU5NjI1Cis6MTA4RTMwMDBEMDREREMzQkI2QjgyMjIxNzFGNDY3NjlCOTMyRUE0NUZFCis6MTA4RTQwMDBBRDIxODJFMzBGMzZERjVCN0RDQ0NGRTA2REYwMEYzOEQ0Cis6MTA4RTUwMDA1RkFGOTZERTRGOTE2OUJFOUI2MUJFQjk4M0NGRDcwQkUyCis6MTA4RTYwMDBGMzk1NjBGQzEwOEVCRkM5QzdGMEU4ODZCRjg3OTg2RDg4Cis6MTA4RTcwMDBGMzY4QkQ5NjYzNUZFRTI4NDY4QTYxRjk3QUY3MkU5QzA3Cis6MTA4RTgwMDA4QTc0NEEwNUI1ODM3RUM1M0U4MkQyRUZDMzQwQkY2Mjc1Cis6MTA4RTkwMDBGRjJFQ0VCM0RFRTI2Mzc5MDkwMkFGQzQ2MEZFODgxMTEzCis6MTA4RUEwMDAwOTE1RjdCRDM5MDlCNkZGRUQ5MzFGOEM4RTcyM0MzMTYxCis6MTA4RUIwMDA4MkU3QkZDNkE4MTg5NzA0Mzc4REREOEZBMUY4RDlCRTA5Cis6MTA4RUMwMDBDNzdCNjkwQ0YxRDVGRTE1OTU2QzAyN0EyQkE2RUI4MTU4Cis6MTA4RUQwMDA3M0I5MDc1OURDQTlERDEzQUI4QTg3RkFDNjEzRURERjM2Cis6MTA4RUUwMDBFMUZCNDA5NTJDQzlDMjdCNTI5NDg1RDE3NEY2NjcyRjYzCis6MTA4RUYwMDA5RDczQjhCOUU1RUMwMTFGQ0ZDM0NBMjdGOTRDQ0U5NkQ0Cis6MTA4RjAwMDAyRTg1QTM0NDk5RkE3MURCMUIwRERDQUYzQ0ZDRjMyOUUxCis6MTA4RjEwMDAxRDA4Q0ZGNjMxRjdBMTFEMkRGQzYzMjQ1QTM2ODhCRkZBCis6MTA4RjIwMDA4N0M1NEJGQkYwQkNENDQ4NTEzQ0FBNTc0QzQ1QTc1RkMyCis6MTA4RjMwMDA3QjMxQzc3MzlEMkI5Rjk3RTM1OUUwNTdGOEVENDkzNDc4Cis6MTA4RjQwMDAxN0Y5NUFFMDVCMDE3ODAyQUU5NEQ5RDE4MUY0OTVDMjQ5Cis6MTA4RjUwMDBGOUM2MERDRjUzRkY0REUxNzkwNEQ2MDA3NDNCOTZBRUIwCis6MTA4RjYwMDAxRkY4RTZDMDE1MDRFMzYwMkU3RTE0RUQwNEREQkJEN0M4Cis6MTA4RjcwMDAxRkY2RkZGNzVFQkZBMDg3Q0NGNUFEQjRGQjBGMTFENzhFCis6MTA4RjgwMDAwRDczN0FGMzcxQkRGOTQyRjlEQjZENzA5RTQ0Q0Q2NUM2Cis6MTA4RjkwMDBGQkRENzA3OUYzQUQzMjlDQzMyMDk2MEVGRUI1QjAzODgwCis6MTA4RkEwMDBCRjUzRTZCQzdGMjQ1MEVBREM3RkY4NUNGNzRENzhGOENECis6MTA4RkIwMDBGRUEzREZGRDJBRENDRTEyRTdGOURERjM3N0UzNkJBRTJCCis6MTA4RkMwMDAzRjdEMUUyNjE5OTNERUVGRUE4RUM3ODlGODg2Qzg4Mzk3Cis6MTA4RkQwMDAxNTcxMDA4NDAzNURCRjY3OTYxQzQ3Rjk1NzQ2Q0M5RDA5Cis6MTA4RkUwMDA2OUU0RDMzMjNGRDMwQjVEQ0ZGOTMxNEYyMjVDQTVBMUE5Cis6MTA4RkYwMDAzRkI2QTAyQzU1MDFFNTgyM0ExMjAzM0Q3MUYxRjE0M0QxCis6MTA5MDAwMDAyNDQxM0JCRDIwQzBFNDdFNDE1OTUyMDJCRjQ3QzE0OUMzCis6MTA5MDEwMDA5NjE3Qjg5REM3MkIwQkVBOTNEMjRBREIzODk2OUZFOTg3Cis6MTA5MDIwMDBBRDhGREVCQzFERTVFMzczNjM1OTVFRkE2RDE1Q0M3RTMyCis6MTA5MDMwMDAzQjE0QkRBMUEzMDJDNjJENjdGOUU0NjFCQTVGODRCQ0VECis6MTA5MDQwMDBCMUYwMTE2RjEyRURBREIyNkUwMjdFNTRBQTA1QUMzMEQ0Cis6MTA5MDUwMDBGRDdFQkM5MTRDQkQ3MTNDRTQ3REY5RjA3OUIyNTFDNzA1Cis6MTA5MDYwMDBFNzgxQjFEQUZFQ0I2OUJERjU4NTAxMDNGQTZEMjkwQTA2Cis6MTA5MDcwMDBCMEYzQkQ2MTFGRUVGN0ZGOUNGRDc1RjRBQjlFNkU4Q0U3Cis6MTA5MDgwMDA2MkZEQjY2RjlCNjg1NzM0RUYzRjgxN0VDM0EwMzkyREQ4Cis6MTA5MDkwMDBDNkZDQThBNjQyQ0E2MTNFODc0Q0YwNzMxMDM1NjYyQzA4Cis6MTA5MEEwMDA4NkVGMDc3RTgzRjUxNDJERjExQjBCRUM5MzY1MUFFRTBBCis6MTA5MEIwMDBFRjAxMEUxMDRGNjhGMkIzN0NCOUNERkVCQTY4MzYzQ0IyCis6MTA5MEMwMDAwQkM5OEE0NTY5RTBCRDgyRUIxRDRBNTE4QTk2RDc5NzQ0Cis6MTA5MEQwMDA4N0E0OTVBNzk0MkNGMDI3OTc5MTRFQzg3M0Y3QjQyNEQyCis6MTA5MEUwMDAyQjQwNEY5M0Q1QkEwMUUzOENGMTI1MkJDMDdGM0NBNkQyCis6MTA5MEYwMDA1QThGODEwRjVEMkI2N0U3NDUwNDNFM0M3RTEyN0YyMjJECis6MTA5MTAwMDAwNEY1NTJEMkFENzREQzg5MDExREM3MjkzODkyQzRCQzY0Cis6MTA5MTEwMDBFNThGREU5Qzk5RDZGRUJGRkQ2ODA1N0VERkQ2NTg3OUM3Cis6MTA5MTIwMDA3ODlFOEQ5RjQzMTlFMjk1MUI4QkU3M0NFMEE3RTNCRDNBCis6MTA5MTMwMDBFQTY3RkM5QUE5NUZGMTFDNkFCRkFGNzIzQTM5RjBFNkEwCis6MTA5MTQwMDBDNDUxNjA1RjM2NjRDOEEzNTY3NDhBQTcxMTRDM0U4MTJGCis6MTA5MTUwMDAzRjYyRkQ3ODYzNTQ3NkM4REUwRjgzODdGMkRDQjMwQzgwCis6MTA5MTYwMDBBRkE1OEMzRTlCN0UzQzMxMEJGQTdERkVDREE1M0FGODM3Cis6MTA5MTcwMDBGQkZFOTQ1QjhDRkI4NjUzNEY3QjREQjA1RjRFRTU5MEJFCis6MTA5MTgwMDA2QUNDQjc3QzdBRTY4QkIwM0ZGQzQzRTNDMTFDRDUyNkEyCis6MTA5MTkwMDAxNzRGRkRFODk1MTkxRURBREZBOTI3NUY5OUExMjI3MzAxCis6MTA5MUEwMDAyNTFENzZFQ0JBNzNBRkNFMDAzQkMxOUE0MzRBRUFFODdDCis6MTA5MUIwMDBCMzU2RDcwOEY0NUJFQjYzRUIxMDc5NzJEQkYzQjQ1NjZDCis6MTA5MUMwMDA3ODVFMTlDQ0M2RjY3OUEzRTQzQkExQUNGODVFMURGNzM2Cis6MTA5MUQwMDBFRTM0NUMzNzhCMkJGMDM4MEU1RDVGNTMwOEU5NUFBN0VECis6MTA5MUUwMDAxQjEwODgxNzVBREU3MTEwQ0Y3QUQzOEJGNEY3NTEyMUY4Cis6MTA5MUYwMDAyOTI5QkMxMEZDODIwQUI2RUI1OTREOTI5MDRGQTFBNUNCCis6MTA5MjAwMDBFQTgwM0Q4OUZGRTUyNDAxQkUwOUJFQTZFRjQ3NUFFMzg3Cis6MTA5MjEwMDBGN0MxRERFOUU3RjkwRjNDOEY3MEUzOUJCNzRGMDRGODI2Cis6MTA5MjIwMDAwOEI5QUVDRTI1MThDRkU4Rjk5QTJGMDlGNkU4M0RBQTdECis6MTA5MjMwMDBGMTlERTU2MDA3NUVBN0UyM0M2ODE5Q0YxQkI5RjFCMzY5Cis6MTA5MjQwMDAzQzU4RTQ4OEUzRTVGMEY4ODRDMDZCMjYzQUQ5REE0ODY0Cis6MTA5MjUwMDA2MkM1MTRERTNGNkJGNEM1NjBGQzdEOEQzQTk2N0ZEMjBCCis6MTA5MjYwMDAxOEM1RjJERTQ2MDM5RjRGMzc5NkUwQjNBQjMxODZERjc5Cis6MTA5MjcwMDBGNzM0OTZFMzUzRTRGNUUxRDY1RTQxN0IzQTVFMDE3QTNBCis6MTA5MjgwMDBFODFBRTY4N0QzMEREOTg0N0M4NTJDOTVGOEUwQkUyNkI0Cis6MTA5MjkwMDBGREU4QkY1NUMxN0UxQkU0NEE1NjBFRjJCRDA0RUQ3M0Q2Cis6MTA5MkEwMDA3OTlFREZDOEZDMzlFRDE1NDY5RjdDMTVGMkI0Qzk0M0ExCis6MTA5MkIwMDAyNDkwNDdENjJDRTY2NzA4NDM3RkI0N0RFRTEyNDJERTQ5Cis6MTA5MkMwMDBCNkM5RjU3M0Y0OUZCNzRCRjhGQUU4N0NCMjRDRTc3NzcwCis6MTA5MkQwMDA3N0ZEODg0QTE3OTBEM0JGMUQ5NThCNThFRUVCMzczRDJECis6MTA5MkUwMDBGQzg2RkIwNDdGRjlEQjM2RkFERTNFOURBRTlBRDJEMUQ2Cis6MTA5MkYwMDA3Njg5QzlCMTNCRjlGNzNCQTZDRkM4QkEwMUNBQjM2NkI0Cis6MTA5MzAwMDA2NDgxNUNERjNFOEIxODNBODVFMzVEODY2Qzc5QjJGQTQ2Cis6MTA5MzEwMDBFQUVGNjgzQzk4Mzc2RjNDRDc0MTIwQTdFQUY1OUQ1QkEwCis6MTA5MzIwMDA2Q0ZCOTgzMTE2NTkxMUI3RDFDQjVENzU2QUU1MkVCNDM3Cis6MTA5MzMwMDAzMzEyRjk4QjI3NjNCRTMxRjc2QkVGOUU2NzhFQzE3RUM4Cis6MTA5MzQwMDBCMTNDMjFGMEUyM0M4QkVCMTU5MDMzOTc5RDY1N0FBOEY4Cis6MTA5MzUwMDA1N0ZGN0NDQ0RFMEJCREE3NzFGQzZGOUJCRDQ5ODkwMDFDCis6MTA5MzYwMDA5RjgwM0MwNTc5NTk5NjIwNzNFODNDNDM5N0IyRjhGNzAzCis6MTA5MzcwMDBBQzc3NTMwNEYyRkJCNDE4N0QwRkY2QThDNkYyNEQwQTgxCis6MTA5MzgwMDBBMjQ5MDlDQTNGRjJDNzY3MDYyMEVGM0RFN0ZFRDQyRTg3Cis6MTA5MzkwMDA4QUVGMEZCQkJDMDZDNDFCQkI5RUZCMEJFNjY3Mjg1M0MyCis6MTA5M0EwMDAzNDFGRjA3N0MxQkU2Mzk4QjdBNEM4REQxQUVDNzg5Nzc0Cis6MTA5M0IwMDAwNTI2Q0Y1N0MxOUU4NTg5NjA3QzgwMkE2QThBNjcyNUU5Cis6MTA5M0MwMDA4RkFGOEYzQ0Q1MzIyRjA0RTdCRTEyMjdFQ0Y1QjcwN0RECis6MTA5M0QwMDAxMkI3QjIxRDMzMzE3RDUxQ0EwRjdFRDFGRTgyMTY4MDg1Cis6MTA5M0UwMDBDNzU2MEYyQjJGMEI0QzZBQjFCMDRDRUI2N0IzNzIzM0RGCis6MTA5M0YwMDA2REJGMzVCQjMzMkE2NzQzRDJENEM0OTY4Mzk3NDI1OTk1Cis6MTA5NDAwMDBENDlGRDg2MkNEMjZFNDFBQUUwRjQ4Mjg1MTA4RkNERTVFCis6MTA5NDEwMDA1QkQ2NjkzOTZDMkJBQkFDNEM3Q0VDMjlENkJCRUVDMDZGCis6MTA5NDIwMDA1RjVFMUM0REUxNTBCMzRGRUFDNDEwREZCRTlEMTJBQzJECis6MTA5NDMwMDBCQjYwRUY0RTk0QUYwNTQ5ODJGQkZFODJBNDk0ODRBM0U3Cis6MTA5NDQwMDA5RDdCMUEwRkVBQ0RDMkI5MjZGMDQyNDVDM0E0MjhCQkMyCis6MTA5NDUwMDA1RjQ4NEI3QTYyQjBCRDlDQzRFRjBGMTE3NEYxNzQ5MEY5Cis6MTA5NDYwMDBFOUM3NDk0OURBREUxRTk3NzZERDI3MzI4OURGNTc4MzVGCis6MTA5NDcwMDAyMDA1NzlCOThEOUQwNzc2RDM3OTI5RUZBRjgxNTg1QkE3Cis6MTA5NDgwMDBFMDNDMkU3OUNDQTM2MzdDOUNGQkQ5NEYwQUJCODlGQkMzCis6MTA5NDkwMDA3MzZFRTEwRTNDQ0YyNjJCNzAwMUM4QkY5NTJBRkE4MTZFCis6MTA5NEEwMDBENzE2MjYzNzUyMUI4QUFDN0RCNjMwNDYyRDU2RDJFMkVGCis6MTA5NEIwMDA2N0Y0QjIzNkJCMzM2RjJBQzU2NzRCQjZCM0RDQzRGMzZGCis6MTA5NEMwMDBFN0EzRDk1NjM2OUNEN0FERDk3QkY3MzhDOEVGQTkyMTg5Cis6MTA5NEQwMDAxREQ3N0YxM0U2RkIzMjhCODc5RkQ4M0YyQkVCMTI1QUE5Cis6MTA5NEUwMDA1RUY3MzI4QjYzQUNFQjdBNDUwM0ZBQkUyN0MwRjM4RThFCis6MTA5NEYwMDBCQTJFQkExMkQ2NTdCMzREMjY3MjIxRTM0QjczMjI5RDcyCis6MTA5NTAwMDBBRUQ5NzEwMTlDQUM3QjdFRUI1QkYzRkQ2MzA5NzlBNDYyCis6MTA5NTEwMDBDOEQ0RTU4QjA4RTkwRTlFNjhGMTUxRkMzRkEyRTk5MzlGCis6MTA5NTIwMDA4MDNFQkE4MzNEMkQ0MDVGNkI2N0M5OUM5RTdBNUUzMDVBCis6MTA5NTMwMDA1NTlFRkY1ODAwRTM1Q0RFMDI3MTk2RERDQjJBQUYwNDM2Cis6MTA5NTQwMDA3MzJCNEY2NkZDNEIwOTEyRTNEQTRBNzZCMzBGRUNGOTQyCis6MTA5NTUwMDAzRkI2Qzg2ODNGODM4Qjc0MDM4NTdCQjE0QTBFQUFGNDdCCis6MTA5NTYwMDBCOTVEQTNGODA0M0U2QjU1NTExRUQyRjc2RDFFQzQ0Qjc2Cis6MTA5NTcwMDAwN0RFMzM0MkRBRDgzRDJERTNGNzc5NTc4MjlENUQ1Q0YzCis6MTA5NTgwMDA2N0FFNDY3QjVCMkY0NTNGQzAzOEQyRkI4Mzc5MTJFNzNECis6MTA5NTkwMDAxMTI2N0YyN0VBQTQ0MkE1RjU2NjA1MEIxMTdGQzU1NTY0Cis6MTA5NUEwMDBEN0FFODU3NjRBNzg0OTAwRjgzRDRGNDk1QUQ4RkY3N0JCCis6MTA5NUIwMDA5OTFDREUyRTI3M0I3RDIwOTcyMzQ1ODhERkVEMTE0NjQxCis6MTA5NUMwMDAxN0Q2M0RBNTQ4MTdCQkU1MzkxNzgwNURENDIyQUREQzIxCis6MTA5NUQwMDBGMjBCQzA2Qjc2MTE5RTdCODVGN0VCNjFGRDFDOUY0REY2Cis6MTA5NUUwMDA3QUNDMDdGOERCQ0RGMUE5RUM5NDJEQzhENzE0RUZCN0VFCis6MTA5NUYwMDA0QTM3QUMwNkI4OUVEODUyM0ZERjQ3RTE5QUU3MzVEQkUxCis6MTA5NjAwMDA0NjUwM0MxQ0RGNTJERjEyOUQ4NTc4MjhGMkQxRUZDNzBGCis6MTA5NjEwMDAwM0Y1MkQzRThBOTdERDFCQ0QwMkRENTY5RUY4MDk5NTk4Cis6MTA5NjIwMDBFQTQ4QjRGNTJERTY2Q0YwOUZEQ0I3MDY5NDEwRkRGRTE5Cis6MTA5NjMwMDAwMkY4M0YxRUM5MTE3Q0NGQkUxNzE3RjVDQTExMTNFQ0YzCis6MTA5NjQwMDBEMjI2QUI0RkFFRjhBODVFMjhCNkQ1OUY0N0U1QzIwRjJECis6MTA5NjUwMDAxRTUyMTBBRkZGNEVDNzAzMzk0MUQ3NjEwMURERjc0Q0YxCis6MTA5NjYwMDA1MkQxMkUwOEQwQjkwNDY4MzkzMEI5MDhGMzZERTlCQTdGCis6MTA5NjcwMDA0OTAwRUM4NkM5MkFFQTc5MTFDN0QxMjZDOTY4Mzc0MzVGCis6MTA5NjgwMDA3REEwODc0MDdFMTFFNkNGNTE3OTFEODc3MzNFNEE5NEI1Cis6MTA5NjkwMDBDNTc1MTQ2NTg3NDk3OTk4MDQ3OUZFQkVBNDJGQzJGQjZECis6MTA5NkEwMDA0OEZDMjVCNkJDMDI5MEJGQUUzQzA0QzU1NTFFRUZFRDhDCis6MTA5NkIwMDBDRTk3QTk3RUNEM0RCQTQ4MUE0N0YxRjI1RTgwRUY4Qjc2Cis6MTA5NkMwMDA3MkU5M0U5NkJFN0YzRkMwRkM0MEI3QzdBRDJGNDNCRTk4Cis6MTA5NkQwMDAwQzMxQkFGMzU5M0MyQTNFMTU5RUEzQUUyQjFFMzU5MDkxCis6MTA5NkUwMDBGRkE1RkY3RTM1ODZGNkNCQkQ2M0Q0QjRGOTYwRkYxQUMzCis6MTA5NkYwMDA2NEZFNDFFRkQ4NjJCQzU3QTM4MTUwRkUwN0JFMDhGMTVCCis6MTA5NzAwMDBGQkYyQjhGQ0YwNzA3QkMxN0Q0RTQwQzgxMzRGMzY1QjU2Cis6MTA5NzEwMDA2MzdERkJEQzUxMzlBMUJFNzM3MDRBQzhGNDgxM0NEODJCCis6MTA5NzIwMDBBRjRGQ0QwMjdCNzQzQzk3NTNDREE5NTk1RjA1QkI0NTI0Cis6MTA5NzMwMDBFNUYyNjA4NzlGOURDQkVEQzkyNjlEQkIwOEQ4QkYzMTYwCis6MTA5NzQwMDA2MkNGNEIxMEYyNjA1QkEzMEY5RjBGNUYzNjAxRTM5NzcwCis6MTA5NzUwMDAwRjVGOTYzNzA3RTIxNTA3MkU3RTFGRjdCRjY3NzYzMDNCCis6MTA5NzYwMDBGRTNENzNFODA1Qjg0Qjg5OUNCMUE4QjYzMTE4NTlBMUU0Cis6MTA5NzcwMDA1RjNFNzUyRkRFMTdGMjdEMzU3RTE3RTZDQjQzQkUwRUJBCis6MTA5NzgwMDA5REQyNUREOUNFM0NDQzQ3Mzk1Q0NFMDU3OERFODA4NzUyCis6MTA5NzkwMDA3RDE3Rjc3OEE4NjdCRjg0N0VFMDZEN0MzREJFQzQzQzMyCis6MTA5N0EwMDBEQzU3ODIxQjBGQ0UxREZCNDkwN0RFQzcyNEUwRTBCRTVECis6MTA5N0IwMDBCRjQzM0QzQjg1RjlFQjAzNkM1RjJBRjI5N0RDNzk0QUE2Cis6MTA5N0MwMDA2MjNFRkI4MjE5RUUzMzc2RTE0M0Y4MzUwNDFFNDRGQjFBCis6MTA5N0QwMDA3QUM5MUNBNTBGNDAzN0I1NjcxNTkyQjRFNTg1RjQ5RDhECis6MTA5N0UwMDBEQkQwRjBGRDY5MzhFRjkyMDVGN0FGMjQzQTJFMjkwNDVCCis6MTA5N0YwMDAzRTQ4QTI5REU4MEYzNTNCRUU3MTI1NTFCNUM3N0VCRUIwCis6MTA5ODAwMDAyNEU4M0FFRkUyRTYxN0I4M0YxOEY0QjQ2NjBDN0NBRUYxCis6MTA5ODEwMDBFNTdEQkFDRDE1NzlCOTk4QTdBRTkyMDdDMEFFM0QxNUQyCis6MTA5ODIwMDA3QzZCMDZGOEUzNkFBOTk4MDA1NzM5NTEyRDNDNEY3QUIyCis6MTA5ODMwMDA5QUVGNEJENDdEQjdFMjc5MUUzMTNGRTE4RjEzRTU5QTYxCis6MTA5ODQwMDBCRDhCRDA0RjU3QkIzQjg0RTc3OTZBOTI0QzBFQUVGMzg5Cis6MTA5ODUwMDA1OTA3QkRCMjNERUZENjRDNDFCRUFENjcyRkVCNkYzQzEzCis6MTA5ODYwMDBFMDgwRDJDNzg3N0E3NTNFQUMzRkQ4NzBGRTRDMzg2NzJGCis6MTA5ODcwMDA5MjI3RDc5RDM3MEVFMEEzMzIzQ0MwN0VGOUM5MTA5RUQ3Cis6MTA5ODgwMDBEMzU1QkRCNkZCNTNERkUyRkJFMzY1REMxRTA5MTI0QjhCCis6MTA5ODkwMDAwNjc4MkE4MTU4Mzc2MTY3MTY0RDk1REE0NzRBQUZEQzVBCis6MTA5OEEwMDA5QkRDMDJGQ0IwREQ2NTZGNkQwRkIwNzI2QjcwNzI0QkFDCis6MTA5OEIwMDA3MzI5RUE2Nzk0OEJDQjAyM0Y0MzdCQThDNTJGQ0FDRjlECis6MTA5OEMwMDBBMjlDRENBRUIxRkIzQUFDQTdCRDA2RTgzRERBMUVDRkU4Cis6MTA5OEQwMDBBNzVCQ0I0QTUwN0YyODQ1QTQwMEUwMzYwRjFDMkQyMDAzCis6MTA5OEUwMDBGRjlFRjZFRTAyM0ZDMzhGRkM4OTZCMDIzNkI4OUQwQURECis6MTA5OEYwMDAxRjE5MDdGQkNBMzRGRDU5OEVGRUM2MERBRjNGM0E3RUQ1Cis6MTA5OTAwMDAxN0UwNDE3QzlGMTdCOTFGRkJBN0VERDBERjQxQzYxQ0I0Cis6MTA5OTEwMDA3QThCREFCQTI0RUY2OTJGOUUzM0RDRTE3MURBREJFMjZECis6MTA5OTIwMDBGOTIwRTdDQjM2RDdCRDFEQkU0NEIzMDk5QjczQzE5RjU5Cis6MTA5OTMwMDBFRTdCOTYwNUJGQUE2NzI3MzlGMkE0QzYwNzU5M0M1QkEwCis6MTA5OTQwMDA1NTRENzA1NUQyRUZBNUVDN0I4MEQxNDExQkNGQzdDOUQ3Cis6MTA5OTUwMDAzQzRFNEU4NjcxOUM3MUJCRkVFM0NDRTA3MjgyRjA3RDgyCis6MTA5OTYwMDBBQ0FBRjdERUNCMzk0MEZFQUIzQkJFRTg5NjZGQkQ0RkVECis6MTA5OTcwMDAyRURGRjIzOTNEQzdBNUM0QjM0MTVBNUU5M0VDNUMxMEFCCis6MTA5OTgwMDA2MEZDMzkwNUY4NzMzNUE3RDM5MjNENzczRjA3NkFGRDMwCis6MTA5OTkwMDAzMTlGRjk2N0Q4MzdBQ0YyOTkxNzA0QTcwRjlGN0ZCQUE4Cis6MTA5OUEwMDA4MzYyM0RGREU0MTdCM0NCQUE5OTlENUJERjNFRUQ0QTkwCis6MTA5OUIwMDAyOEQ3REY1MUE0NUI2OUUyNDVFMjU5N0QzNkU4OTA1RjI0Cis6MTA5OUMwMDBGNzcwN0Y1MUI1NkFBMTFDQUIzRTFCQzFFRjlGREY3OERBCis6MTA5OUQwMDA3RUM3NzlCNkZFRTM4NUYwQkIxOEVGMTY5NzdDM0U3MDI0Cis6MTA5OUUwMDBGMTRCREJDQjI5MURENzNGRTE5MUJEQjY3MUVBOUZFMDdBCis6MTA5OUYwMDBFNzgwRkM1NDVFM0JGOUREMDQ3RTU3MEI0OTZGOUUyMkU1Cis6MTA5QTAwMDBDODg3QkIzNDUxNTY1QUMxMkU3QUM0MkUxRkNBQzE2RUE0Cis6MTA5QTEwMDBFQjZCMEZGNzE2REUxNUUwRjVBRDYwRkFGQTQxNTdGRDc2Cis6MTA5QTIwMDAyMkQxN0YyRUQ2NzdDRjQ3QzgxRjI4ODM5REE2N0VFMkZFCis6MTA5QTMwMDAxNUYzNDNGOTc1QjdFQ0VBMkY0NzhDM0YwNkZCMTNGNjk1Cis6MTA5QTQwMDBGQUI3MDNFMzVGODQzQjI1RUVDQTRFNTY4QzY2RkUxREQzCis6MTA5QTUwMDAwM0VDODBFRkFCQjE4MEZEM0VBQzZGNzM3QUFEM0U3QjIzCis6MTA5QTYwMDBCRTAzREY3RDcwOUZFMDc4RkZGQkM2QTgyMzVGRkZFNkEzCis6MTA5QTcwMDA0NDNEOUVEM0Y4NzY4MEQxNjUzNUI1RThCMUREOEVEMTExCis6MTA5QTgwMDA4RTNDRkQ3RkNDRTNEM0NFRTM5MjBDRjNCOEVDNkYzQzdECis6MTA5QTkwMDA4RjQyMDc3RkY2Q0RBM0Q4RjFGRUQzQ0U2MzFGRjcwQjFECis6MTA5QUEwMDAzRkM3OUZGMzc1NzYyRkMwN0M0MzQyQkZGNTdDNUFEN0UyCis6MTA5QUIwMDA0RjY5RkRDQkY0RTlBM0NGRjkyQUIxNDI3OENGNkQ5MjdCCis6MTA5QUMwMDBERDYzNDZDQkUwMEZGOEVBMjdCN0JEN0IzOURFMEI2RENGCis6MTA5QUQwMDA2MjNFOEU1N0U0RTNGMDczMUU5QkM3MEM3QzVGOTFGQkU0Cis6MTA5QUUwMDBFRjNCQjhCRjA3MzNEQ0QzREExODYyRkJFRUJCMkZCQzA5Cis6MTA5QUYwMDA4QTYwRkU3QTI4ODE3MTgyRkRGOTBCQTI2MEE3N0ZFNzU4Cis6MTA5QjAwMDBDMjFBN0MzNkU3Q0Y4ODgyM0M2QTBBN0ZERDkxNkY0RUFECis6MTA5QjEwMDBGNzA4NjlDRkMxRkU5MUY3NEJDRTdFNTlCNjlGNDdEOTYyCis6MTA5QjIwMDAwQ0U3NTFEMkQ0MTc3MUIxQ0RCRTNBQ0MwM0ZGQTJENjA3Cis6MTA5QjMwMDBGQkUwMTdCNERFNEJDMzhDREUzNkZCMTIxODE3NkM4REJFCis6MTA5QjQwMDA3RTMxRjM3RjI2QzRDNkI5RkJDMkNCMDg5QkVGNjUyOUUzCis6MTA5QjUwMDAxNkY3RDEwQ0ZCNzk2MEYxREMxRjlFMTE4NTc1MzY2NTE3Cis6MTA5QjYwMDAyRjg4MDIzRDM3NjdDRjcwQUM0N0M5QjA5RTU1NjEwNjVDCis6MTA5QjcwMDBBN0NERkExN0JCOUVDMzlGNzkzRDBCRDJFNkMxQUFCOTA4Cis6MTA5QjgwMDBFOUVGMTc2QjE3Nzg4QTI2OTBDRUJFQTg3NTlERkExQjUxCis6MTA5QjkwMDBBRjZCMTRDNzU3NzU4OEY5MEQzNjFCOEM4RjgyNEFGQzQyCis6MTA5QkEwMDA1Nzg1RDJFMDdDMzhEOERGMUQyMUM1ODYzQzk0M0NCQzZCCis6MTA5QkIwMDBERjcyNzg2NUUyREY2NTlFRTQ0ODk4RDc5MTQ2QjY3RjBDCis6MTA5QkMwMDA3RTlEREYyN0Y1REJFQUE2MzBGQUI1NURFMzZDMUVCM0I4Cis6MTA5QkQwMDAyQjNDOTA5RkUzN0Y1NjNCQ0ZBNzBGMjYzNzVBNDIyQzUyCis6MTA5QkUwMDA1RUYzQjU4NEIzREREMkFBNjBEQUZCNEQyOEZDRUUyQTIxCis6MTA5QkYwMDAyQ0VDODM2NzNGRkM3RkNFNzBDQjQ0OEZDMzg1NUI2QkJGCis6MTA5QzAwMDA3NDc4NzAxQjhDMEZBQUUxOTI5QkU5ODNDMzRERDA1QkUzCis6MTA5QzEwMDBBNjdFRkU3RkExQjMwNzg3MEUyRkE0QUZCRjE1QkNGRUEzCis6MTA5QzIwMDA1RUU5RUIxOTgwRDcxMEY4RjIxRkYwM0FDN0Y1RTZEMERECis6MTA5QzMwMDBFMDI1RTREODFFOEREREJCRThFRUU3NDQ5OEREQUYzNEM3Cis6MTA5QzQwMDA1MUFBM0I3QzA1QzQxN0JFQTJBMEJGRjdGMDhFNzlFQkVBCis6MTA5QzUwMDA4ODZDQUZDN0Y0RDlFMUNBQjlFQjMwREYzNTFFQzQ3QkRECis6MTA5QzYwMDAzQzVGOTM2M0ZGNUUwNjcxODdDNUFDNURCRjc5NzJGODk4Cis6MTA5QzcwMDBCQzE0Q0VFNjdFNEI2MzI0RjgxMTVFOEI1RjNERTBGQUE4Cis6MTA5QzgwMDA0OEE1NkQ1RDk4OTc2OUJCOEY0QUU5MEZERkMzQzRCOERCCis6MTA5QzkwMDBBMzBDRkM0RDBCRDNDRjQzRTAzM0QzQjhDM0M1RTc2QjY0Cis6MTA5Q0EwMDBGMUVGMEYwQjlGODNBREY3RDk3MEQxOTBFNDg1RDgzN0QyCis6MTA5Q0IwMDBFNDkyREVCRjk3NzEwMUMwNzM4RkNDRjIzOThFQzJBQkQ0Cis6MTA5Q0MwMDA3Q0I4OUY4QzYwQTVBNTU1QTM3NjAyOUVDQTIyM0NFRjY2Cis6MTA5Q0QwMDA0OTMzRDY4MTlGQ0M3QkY1QzJBRDYxOEFCN0Q3QUVDOTc3Cis6MTA5Q0UwMDA5NkJDMzY3ODc5MjMwQ0NGMzM5NkE3QjcwQjczMjMzQ0Y5Cis6MTA5Q0YwMDAyRkI3QjdCRDQ0RTAzRTQ0NzczRDg1RDdCQjY2MzlCQjNGCis6MTA5RDAwMDA5NzhBQThFNkQ4QzVCNjczNzU1MzVDREZEREVEQzc0NjA0Cis6MTA5RDEwMDAyMkY4RkQzNTFFNkY3NzdGQ0ZFMkVEOTcyRTE5QjgzRDAzCis6MTA5RDIwMDBBOTYzRjdCOTUwQkExQjlCRUU3RTQxQzExRjlERTE0NDY4Cis6MTA5RDMwMDAzNDQyOUZBRjRCODkwN0JGMDE3NDM0MjlDNEUyMUUyQTA1Cis6MTA5RDQwMDAyOTg0NzhCREU4Mjc1NzI1Mjk4REMyRkQ1RDhGMzExNkZFCis6MTA5RDUwMDBGQ0I0NjlGQTI5MUNBODlGNEM3MDE1RUIxMUUzMDAyQjg5Cis6MTA5RDYwMDBDMkJEMkM3NEZGODhGQkM1MzI5MzkwRDlCMDRGRjRDNkE2Cis6MTA5RDcwMDA2RTY1ODcwRDE5MURFNEYwRkM5OTk5NzVDMUU0NDZCMDM0Cis6MTA5RDgwMDBGMzU0QkE0RURCN0NCQkZFNkJFRUZGODBFRjVEODc2NTY0Cis6MTA5RDkwMDA3RDUzNjE3RjM4MEMyNjFGMTY3MEJBQzk1NTEyOUJGQzgzCis6MTA5REEwMDBFMDFGNUIyMUE1QkRERkVDRjIwOEZCM0IyNTFGODQ3Qjk4Cis6MTA5REIwMDBFM0VBMzhDRTg0RkIxMjFFQjhFN0UwNUE5RURGNDQ0ODNGCis6MTA5REMwMDA2MkFDRkRFRjhDN0RDMEU1OEFCQjVEQUVDMkUyRDFFNDQyCis6MTA5REQwMDAwREM2Q0Y3Qjc2QUQxOTlCOEU3RjVFRTU3Q0ZBNDFCOEQwCis6MTA5REUwMDBDNDkxOUZCNDI0N0VBQjA3Rjg3M0M5QzI0NTFFMjMwNEY3Cis6MTA5REYwMDBERjk5QkNCQzg2Q0Y2MzhGOTYxODdCNTFBODBGNEUxOTk0Cis6MTA5RTAwMDBFNTEwODc0RkQ3OTE0NDEzRENFRkIwQTI0MUMyMzg1MjFFCis6MTA5RTEwMDBFOTA2NDY3NzJCMzZFQzk3RDdEMUU3NEVDRTdGOEIwMEZECis6MTA5RTIwMDAwN0I2RkU2RUU1NzhEREIzMkIzMDBFRTZCRkE3RDc0RjQxCis6MTA5RTMwMDA0NzNCQTZGM0I4RkU3RTgyN0VBRkQ1OTFBQjM2ODNERjdCCis6MTA5RTQwMDBBQjVCMjJGQ0VGMzJGQ0E0MTJGMjBEQkE3OTlFNDgwQkY4Cis6MTA5RTUwMDBGREJFMTFFNjNCNkYyNEYyRjc4NDBEMUZENDgzN0NFRTI4Cis6MTA5RTYwMDBEMjA4OUU5N0ZCOEY3NjJGRkU3RDBCNDEyRkJENzI2MjJECis6MTA5RTcwMDBDMzQ3OEQ5MDc0NzdBRjk2OUEwQzc0MzNCMkE5RUUxQkRBCis6MTA5RTgwMDBFOUZDRTQxNkU3RkIwRjQzRjFBQzc0NzZBRTc4MEE3OThGCis6MTA5RTkwMDAyRUVBMkQ1NjBENEZCQUZBNTc1NzNBRTU5ODk4RjcwODFCCis6MTA5RUEwMDA2RkVBNTRCQUZCMUE3QUU5MzAzOUIwREVGQjM1OTdFMzMyCis6MTA5RUIwMDAwMkVGQkRGODNFOTI3RTVGQjQyM0MyRTI3NzdCOTI3M0RECis6MTA5RUMwMDBENkEyREVCMkJDMDZDODQzMzExRjAxQUY1QzhCQzFFOTJDCis6MTA5RUQwMDBEQTI1OEE0M0RFQUU1ODE4NzQ5RDQ3NjI3MEZEQUFENzEyCis6MTA5RUUwMDA3ODA4RDY3MUVGQUU5NzI2RTNERjUxNzRFOTg3ODA5MjQ4Cis6MTA5RUYwMDBEMEUwRkJDRDI0RTUwMTM5NzE1QzMxRjBGOTdBQTNGM0IwCis6MTA5RjAwMDA1RUU2RDc0OUUyOEVFOUEwM0YxQjk0QjQ3Q0Y1MENBNzJFCis6MTA5RjEwMDA5RkQ3QUI1NjVEODNGMzZGNTY3NDk4RkZCMUU1MjNBRUMwCis6MTA5RjIwMDAyQTA3Rjk1MkU1QzE3QjgyOEYzNURGMTZCRUM5QjY3RTlFCis6MTA5RjMwMDBBMUVGRENGM0ZBNkRGNUFBMDFGNUQ2RDIyQTI3REVGNkY5Cis6MTA5RjQwMDA2OENDMkVCMEFFNjQ3Q0I4OUFDQTlCRDk0ODVGREQ3N0U2Cis6MTA5RjUwMDBDQ0E0RTMxRjRFRTY1Q0I0ODU1NTI3RjBGNzFDQUZFNkIyCis6MTA5RjYwMDBCRjFGOTcxMzc3Q0VBNEYyRTY4NENDRkM2MUQ2M0YzMUI1Cis6MTA5RjcwMDBCOUIxRTRCRTc4MEJDNDc5NEYzNDRDRkI2OTM3QURGNzA3Cis6MTA5RjgwMDAzMjVGREY1QjBEMDNFQjQ3MzczRDREQjhDRjc5M0ZFNURGCis6MTA5RjkwMDA4QzIzNDQ4M0Y2ODlGQUY0RkFFMEZBRUMyMDkzQUY2QTUyCis6MTA5RkEwMDA2QzFDQzg5N0VCMzZBNEFGQjcwOTkyMkI2OUJEMTM3RjIxCis6MTA5RkIwMDA1NUFBRDNFNTZEN0VBMjMzM0U1OTExNEZERkZFMTMzRDA2Cis6MTA5RkMwMDBDQ0JFODM1RTRBMDNFN0JENTk0MTJFRTdGNDcxMjBBNzVBCis6MTA5RkQwMDA1NzY0OTg2RjU3NTYwNEVCQkREMzcyRkI3NTEwRUYzQjc3Cis6MTA5RkUwMDAyRTNCRTVGMzBGQjI3OEZDM0M4QkM5RTcxM0JCOTY3OUE3Cis6MTA5RkYwMDA0NjAyOUU1QTI1MURFOEUxRURFQ0Q4MjRBMEI3OTVDRDg4Cis6MTBBMDAwMDBDN0QwOEZGMDJENUVGRkJBNTBGQzQzRDA0RjRCOEUyQzQzCis6MTBBMDEwMDA5RTNGOTJFMkE1NkIzOTg5NDk0NjY2RjlGRjMxRTc5Rjc5Cis6MTBBMDIwMDA1Qzg1REQ2MzQwRjVERkJCQTBGRjY4RDM3N0QxRkU1MEQwCis6MTBBMDMwMDBDRDcxNUY5QkNDQUU2Qzg0QkNDMjEzQjJCNTA2RjM1MDNECis6MTBBMDQwMDA3NjA1NThERTExODk0REI3REYyRjEzRTBGMzM4QjE3QjY5Cis6MTBBMDUwMDA3OEY4QkUyNjFFMUNEMDhFM0Y0QzNBNkE3MERDREQ0MTdCCis6MTBBMDYwMDAxREUyOEY4NzJCOTVENEU1NzQ5MkVGRUQwRUUyM0RBRkE0Cis6MTBBMDcwMDA2RUJFQzgzNEZFNzBFREMwMTNCQjg3NjcwNzBFQjZFRTI4Cis6MTBBMDgwMDA1ODU2RTE5MEVDQzAzMzk1RjdERTU5MDY3Q0E0NzU0QzI4Cis6MTBBMDkwMDA0OTI3N0Y4NTlDN0U4REZCQUREQ0Y0MjM5RUIzMzkzRTQyCis6MTBBMEEwMDA4RTI3MDc5RUQ3Q0RGNzNCRTc3MzVEOUQ3MzNFODI1RjlBCis6MTBBMEIwMDA4RTI3OUIwMjkwMUY0RTQ3OUY2Q0I3NEJDOUJDRTk4MzBDCis6MTBBMEMwMDBFODU5RTZGRkNEMzRDRjM4OUZBNzkwMTM0MDc5MTA0RjYxCis6MTBBMEQwMDA1QkNERTVDRDVCMERGNzQ2RUM3ODcwQUZGRjg0Q0NGNzM4Cis6MTBBMEUwMDAwNzBGQjFCQ0FERjFGMTk1NzM0NjFBN0RGNDc5NUQxNjk5Cis6MTBBMEYwMDA5MzQzOUYzNzVEMEEzREUzRUVFN0VGOUQwRTg1OUUxQjgwCis6MTBBMTAwMDA4QzBFODU1QzcwQjdGRjAwRTJGQzIzRTFFRkUzRTgxQUY4Cis6MTBBMTEwMDBDNDY1M0U4ODE4QUM0Q0Y0MDU3MDQ0ODY5NEYzNzNDQjQ4Cis6MTBBMTIwMDBDNDE4MDdFNzZFNEVFQzBBRTBGREY2RDYxNjZGMTJGRTc1Cis6MTBBMTMwMDA2RUM3RjE1RDk3NENCMkFGNjcwN0M3RkY4QTI1RDk3ODI0Cis6MTBBMTQwMDA1RENBNzEzOTc2QzUyOENDMkY1MEYwQkVBRUQ3OEZFNEVBCis6MTBBMTUwMDAyQzgwRjJCRDg3NjQ5MEQwRTRCQUZBOTUwQUFDRUY4MTA2Cis6MTBBMTYwMDAyQzk2NzdCRTYyQzMyQjY4MEYwRTk3Q0U1N0Q0MzlGNTY1Cis6MTBBMTcwMDBGRjI3N0MxREJENzY5NkRBNTMwNkY0OTMwOTBFRUQ1OTQwCis6MTBBMTgwMDAzRUI2Q0Y4OTJGOUEwRkYyNzlENTA2MDlFNUVEOTYyQ0M4Cis6MTBBMTkwMDAwM0RGQUY1MjREOTREQkE0OTlFOTQ3RTJBM0YwQTAyQTc0Cis6MTBBMUEwMDBFNDE4MkMwMkUwRjFCRkY5REYyOTUzRTM5QUZEN0NEMkQ5Cis6MTBBMUIwMDA0RERCNkU5RjBGRjZBMTlCNUY0NkVCOEM4RUUxNUUzMDEwCis6MTBBMUMwMDA3ODVFMTc0QTNDOTkzNUIyNEYzRUJGMkRENUVEMUY0NUZECis6MTBBMUQwMDBBQjVDOUVDNUVENkRDRUE3NjIzRDk3NjdCMUY1NTEzQjc3Cis6MTBBMUUwMDBFRDg3RjhGNzk5RjhGQTQ4Q0M0NTZGNzI0N0NENEYwMEU0Cis6MTBBMUYwMDBGRTczN0M2ODE3MDRCQzU0RUU0M0RFRENGNzAzM0FDQkY1Cis6MTBBMjAwMDA5QjYzN0MyNUVDMUQ3N0ZCNkJENTg0QzM2RTNDOTQ1NTFBCis6MTBBMjEwMDBFOEM4Qzc3MURCMjFGRkQwMTdFOUVCRkZGOTZGQUMyRjVFCis6MTBBMjIwMDA2NEZERDNFOThCRkYwNzc4QkFDMDhFMDA4MDAwMDAwMDgwCis6MTBBMjMwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkREM0QwQjc4NTRENTlCCis6MTBBMjQwMDA5OUU3Q0U5REI5OTk0OTY2OTI0OTMyOTMzNzM4OTMwMDgwCis6MTBBMjUwMDAwNjI1NzgwMzIxNDQ5RTM3MDk5MUEwQTgwMzA0MEMxQTBGCis6MTBBMjYwMDA3MDQ0RDQyODIxNDRDNTRBQkZEMkNEMEQ4OTMxMjBEQUFCCis6MTBBMjcwMDA1MDVEQjRENjc1ODc4ODVEQjZEMjM1NTg2QUQxRDI3NjJFCis6MTBBMjgwMDBCMDgyOEZFQTM2NUE0NURBOEQxQTFGQTU4MDBGQTJBRDJCCis6MTBBMjkwMDBBQkRCOEZBRDdCRkVGRjlDOTNCOUY3NjYyNjA0NkRGQkFECis6MTBBMkEwMDBGMTJEN0M3RUQ3MzNFN0ZEQkZGRkZGRkNFN0IwQTIyNTkxCis6MTBBMkIwMDA4NTQ0OUQwNEZGN0M0OUZGM0I5QzFBMjBDNDRGQzhGMTk0Cis6MTBBMkMwMDBCRkNBOERCRDZFNDI4RTQ1REE5M0FGODFBRjRENUQ5MEIyCis6MTBBMkQwMDBFRDIzNDRFRjk0QzlBM0I0REQzQjQ3M0VBRDgxRjJCRDBECis6MTBBMkUwMDA3RDM2QUY0NENCMkJENjVGMjM4NzY5QkI0QzI4RjlBMUMxCis6MTBBMkYwMDBERjkyMzQyODdGMDk3RkU2MEVGRkRFRjA4MDRDQTJDNTk2Cis6MTBBMzAwMDBCMTc5QUY4Njc1MThDQUM3N0E5MjM1MDJGM0NERjE0NDk4Cis6MTBBMzEwMDBDNjA3MDlEOUFCMTA5RDk0MTFGMkY2RTZFQ0M4MjY1QThGCis6MTBBMzIwMDBBRTcxMTJERDNEODU5MEI5Njk2Q0JEQkU4RDlGQjc3QTY3Cis6MTBBMzMwMDAyN0QzRjVGNEZDQkE4NDE0RDJGNUREN0RGQjhBRjBBNEIyCis6MTBBMzQwMDAzOEYzN0I2RDg0NENBMzEzMDQwMjM2OTI0NUM4NkQ3Q0IwCis6MTBBMzUwMDBFRkFCNTI4OTA2RTMxMzNBREZBMzg2RjE0NUJGQzNBREU1Cis6MTBBMzYwMDA4NDQ0Q0ZBNUY1RTM2OEJGRjI1ODNGRUJGOENCQUVCQzExCis6MTBBMzcwMDA3MDJDRUNGQkYwOTUzM0M3NUUzMzI5RDYyRjExMUM5NjU5Cis6MTBBMzgwMDA0OUUxN0Y1RTBBRjNCNkM5MkFDMDc1RDczRDQ5OEQzREM0Cis6MTBBMzkwMDA3MUUwQTY3M0I4NUFFNzg3M0Y3NkJBOEYyNUZDRkY5NzFFCis6MTBBM0EwMDA2RUFDQkNDMzQzNDFCMjI5NjVDRUVDNzA5Q0Y5MEY5M0VGCis6MTBBM0IwMDBGMERERDNFODdDRkE0NjM2OUY3NTlFQzU3QzlFQzNGNURBCis6MTBBM0MwMDBENzJFMDVGODdGQTZDQjVFOTlDMjYzQTA0MTRFQUQ4MDIzCis6MTBBM0QwMDA3RUY1MEU3NTNDMUQ3RjQwQkZENTczOUQ2MTlEQkY0RkJGCis6MTBBM0UwMDAwMDlGREYzNzVFRUI4OThCMDdGRUJEQTJERTRDMDc2RjU3Cis6MTBBM0YwMDA5M0MxOTdBN0MzM0MzQkUzQUZFRjE2NTgxRkM1REYzMUFFCis6MTBBNDAwMDAyNTdDQ0Y4NTc0N0RDNzJGOTY1NTlEQUVFN0I4OERGNjE4Cis6MTBBNDEwMDAwMzdBNzk5MEY2MEIwQ0VGNzczREVGRjdGNkM2OTFFOUVBCis6MTBBNDIwMDA3MjQ5QUQ3OTNENEI4RjI0OUJFOUQyNDYxQTdCRTNFQzEwCis6MTBBNDMwMDA2NzY4NUQ2NzQ4RjcyQjJDRkNCNzRCMTkxQ0UzQTVGRDNCCis6MTBBNDQwMDBERkRFNzFFQUNEREI2MTNGM0I5MjExREVENjcxMzJEM0E0Cis6MTBBNDUwMDA2NUM2QTdDMDI3MDBBRjJENDk5QzRGQkE5QjlGQTZGRDlDCis6MTBBNDYwMDBERUJFMzQ0RkRENDQ4NkYzMDcyMUREOTdDREEwRjVGRDM4Cis6MTBBNDcwMDAzREI2RDIyREI0NkE1NzRGNEE2MzI0Q0U3QTI3QTczMzBDCis6MTBBNDgwMDAzQUYwQzk3QUYyNzlCNDNENzk4M0UxMDNDODBERjg2NkYwCis6MTBBNDkwMDAyOUE3Mzc2RkNGMEY1Qjg4MkRENkVGMERBMDgzMjQ0MkZECis6MTBBNEEwMDA3RURCRUFDNEVGMzZBRjEzQzdBOTVCQjg0ODA5RDA3OUExCis6MTBBNEIwMDBBRUIzMTMwREUwODc3RkU4QjhERUYzMEE3NjZDQTE1M0U0Cis6MTBBNEMwMDBCRDZFNjM2NTdEMTVFNTNGNjlGODdBMUVFNjc0QjkyQkFDCis6MTBBNEQwMDBCMjc4NDRGOEQ2MzdDODI2NzhENjJEMzRDM0Q3NEE5RkU5Cis6MTBBNEUwMDA0NzIzQjZEQTc4RkIxN0Y0OUM2OEJFMkIxRDExM0ZFMEJBCis6MTBBNEYwMDBFOTA4REZFRjYxQkVERkRGMzdCNjdCQTBCRDc1OUU1RDhCCis6MTBBNTAwMDA5MTlFMTFGOUUwQUE0NjMzNUQ5QzZFOUY2RjdBODMwODk1Cis6MTBBNTEwMDA4RkU1NjE3M0JGMkJFQUNERkI1RDRBNUE2NjEzNEEyQTY5Cis6MTBBNTIwMDBDQjg4RUE4MDZGMUQ2OTI5Nzk5QTgyRjJFODAzNEI3MDIzCis6MTBBNTMwMDAzREFGMTM1MjBCNzI5RTlDQkFCNTY0NTE0OTZDRkMxNzI3Cis6MTBBNTQwMDAzOTNEN0Y1Njc3RUJBNTIwMkVERjUwNUE0QUJDNzFENjk1Cis6MTBBNTUwMDBGMzNBODc5M0MwRjdFQjA5RTAxOUU1NzJGNzBEQzAzM0MyCis6MTBBNTYwMDBEMEVCMzIzOTJFOUVGRjhCQ0ZGQjQ2QzNDODdDQjRBQ0Y4Cis6MTBBNTcwMDA2RTY0M0M5RkYwN0ExMTNFNkYzNEI0MjdDMzNFOEY4OURFCis6MTBBNTgwMDA3OTFGNjRGMzgyNUUzM0UyRTNDNDU3RDQ1QjU2RkUxRDQ5Cis6MTBBNTkwMDAyMEZBNEQ0OEM3OTE2NDJGRTgxMTFGOTA4NzQxOEY3NEFFCis6MTBBNUEwMDBBNERCOTgxQzJGMUU1OThGODhFRjZGODU1Q0I1QjRBRjY0Cis6MTBBNUIwMDBCMzZCMEUyMzNFQ0FCRDAxODQ5QjI4RDcyRDM0QUZGMzY1Cis6MTBBNUMwMDBCRDU0MDYwRkNBNzE2MzQzMUU4M0RDRTBGQTU1RThCQjM1Cis6MTBBNUQwMDA3QjdGNzBGRTVCQTAzRkM3QTczMzNDRDQ4NTNFNzEwMEY0Cis6MTBBNUUwMDAzQ0E4N0NCREMzMDNGQjdBRDVFNjA1Rjk1QTdFNDQ3M0NCCis6MTBBNUYwMDAxOEUxMzcyNzhEQjUzRkJFNzM2NEY4Q0Q0OTYzRUIzQzU2Cis6MTBBNjAwMDA5RDlDQjVFRUY3RUQ2RkRGMzkwNUM2N0RGQkRCOUYzQjBCCis6MTBBNjEwMDA4Q0UzMkZGQjIyOUY0NDMzNjNFNUFCRUIyNTJEMTI4N0EwCis6MTBBNjIwMDBDRjM2Nzg5NTUxQzE3RDgzMDU4RTU3N0YzMTE2QzdGNzk4Cis6MTBBNjMwMDBDOUE0QTUzN0NFQkVFQ0U5NEU2Q0JGMzQ1NEU5RjA1MzQzCis6MTBBNjQwMDA3ODVFQkI1MTUyMjUzQTg0MjM5REM5REQ2Qjg1QkNCMzJFCis6MTBBNjUwMDAwN0M2MkVBMjcwRjdCN0I3REMxNjhBMzNDRTZDMEVFRkEyCis6MTBBNjYwMDAzRkJCNDM2OUYxRjg0QzdDODUzRTE3RUQ5NkQ5QzM4RTBDCis6MTBBNjcwMDA3OEVEQUQ3QTc1ODBGM0I5QjU1REU4MENFOTcxQzgwRTc3Cis6MTBBNjgwMDBCMkI0MUZFRDNBRTZBNjMxM0FDQzRDOEE3RTA0RjI4ODg5Cis6MTBBNjkwMDA0QzMyREI2MUE3OUREN0QyREUzQUVGNjUxQ0VFODlFNjJFCis6MTBBNkEwMDAxNzc2QUQ3NTdDOURDMzNGMUNBMkY0MTNCN0RFODNGNTBFCis6MTBBNkIwMDBBRjEyQTY1RkY1NDgwQUVBQzM2MzNCQUZCRDA3Q0NCNzRDCis6MTBBNkMwMDBFQjE3REM3NjA4RDRFNENCQTk0MTZDRDcxMDdBQTUwNjQ5Cis6MTBBNkQwMDBEOUVERDRCRDkzMDFFRjlGRDVERTdCNEYxOTVEREE3MUMzCis6MTBBNkUwMDAyNURDRUVBMTFEOEU2RjkyRDA2RUIxQ0VGMzJBRDcyNzU2Cis6MTBBNkYwMDBBRjgxM0MzRDE3QzYyM0NDNUU5RDQ3NDdDQkE1NjA5N0Y1Cis6MTBBNzAwMDBCNTM1MjA1NEM4Qjc5MjAyNDYzQkQ1QjdFMUYzNTYzMjZGCis6MTBBNzEwMDAxOUVDODdEMDI2MEZGRDdEQzJDNjRGRDY4MzVFMjYyNDU2Cis6MTBBNzIwMDA4MkZEREY3NUE4MzcyMkJDMDlCMzczRkI3QkRDM0JCNjI3Cis6MTBBNzMwMDBEMDc2QUY4MjVDODBGMTg5M0EzNjU0NjI5MDEzNzYyRkRFCis6MTBBNzQwMDA5NjQ3OEI5RkRGMjZDMENGOTlDQTI5QjFDRjQ0RjM1MERCCis6MTBBNzUwMDBDOEUzRkExNjU3QjlCQkE0MzRCMDc3MDJEN0MxN0UwNjU2Cis6MTBBNzYwMDAxN0I4QkMzRDE0ODU4QjE1RUQxMjgwQ0ZBQkFGRDg2Q0ZDCis6MTBBNzcwMDA2RDQxMUMxNkVEMTU2MTFGMDcyRjBCREU3NTVFMTlDOEE0Cis6MTBBNzgwMDAxRjg3RTZBMjRCNTkwNENFQ0I4NTk0OEVBQURDM0E4QzY3Cis6MTBBNzkwMDA1N0Y2REI4NThGMDE3RUVFQUQ0RjBBQzgzMERFOUNDMEQ4Cis6MTBBN0EwMDA5QjMyMkQyRkJFMzgyOTAwN0U0Nzc5NUZFMTAxMUYxREE2Cis6MTBBN0IwMDA3RkU5NDJDOTRCNjhGRjc5MEJDNkZCMDdFOEZFNTIzNkJBCis6MTBBN0MwMDBEMDcxRjI2MDc5Qzc2QUFCQzcxMUYyNDM5ODZDMDY2MTI5Cis6MTBBN0QwMDAwQkE2QjA1ODJDRjFCMkVFREIzQzhGQjYzRkNGQkZENzAzCis6MTBBN0UwMDBFNkE2QTA5RUY4NURERjY2MjcxREY3OEVCNjUwOEUzNzcxCis6MTBBN0YwMDA5RERBMTNFOTFGNzQzOTY3MTM5Mjk1QTVGNUNENTUwOUI0Cis6MTBBODAwMDA3MTY3N0M1NDBCRTVCRDBGOEFGMTNFRUVEMjBBMDhGOTYwCis6MTBBODEwMDA5OTJEMUM5NDY4RkRENDhDQTQwNTc2MEEyRjVGOTE5ODFECis6MTBBODIwMDAzRjZGQjMzNjhCRUVFN0UyMUIxRjVENEZDNzVGRkVERDY4Cis6MTBBODMwMDA0OTBCRUNCMEVFMDYzMTdGRTkwMjU4REZEMjU5QTI1QzM5Cis6MTBBODQwMDBFRTgyQjIyRjg1Rjc4N0Y1NTY1MEY5NTUxODVCQkYzRDVDCis6MTBBODUwMDA4N0NFOUYyMURBQ0Y1ODMwOEZGNjNENUNEOTUyNkRBNzU1Cis6MTBBODYwMDBGM0ZGRThCQkRBRTY0OTEzMDk5OUJFQjBEMkFCRDFGMkU3Cis6MTBBODcwMDAxMzE5RjUwQjUyMjg3RUY2MTI0QUE3QjRGQzY0QzY5NTRDCis6MTBBODgwMDAwQjYwRkQzRUQ5QzZDN0JGNkEzM0FDQkZCQzQxM0YwRkFBCis6MTBBODkwMDBFQTI1N0RFNUU2NUFCQUVGQjVDRTgxNDM0MEFFRUIzNjA4Cis6MTBBOEEwMDBFOENFMkNGQTNGMjkxMkUzNjNBN0EzNDVDQkE3QjA3M0U4Cis6MTBBOEIwMDBFQ0FCOENFNkUzNzJCQTE5QkQxNjQ0NEI0MDhGMEQ5NTk0Cis6MTBBOEMwMDA4QjY5QjlDNDUwQ0U2MUU1QkQ5QkM4RDVGMUU0RUQ2RDhGCis6MTBBOEQwMDA5OTRDRUVFRDREOEU1RkFGNjQzMDdCODBDMjBERjU0OTMzCis6MTBBOEUwMDBEQTExQTJFRDhFQTM1NzNFNEE3N0UzN0MwNzkzODlFRUY3Cis6MTBBOEYwMDBDQzg4RjFEQkU1OTQ4NzJCMjg1RjEyMjc1QkE3MTg2N0NDCis6MTBBOTAwMDA5OEZFQzg2MDcyODdFODk3Njc4MDNDNUQwODQzRDBBREM5Cis6MTBBOTEwMDAxN0E5MTJGQUJCQTQyNTI1MzIxRTY4ODc0NEVENEI0MEM3Cis6MTBBOTIwMDA3RkM4MzY1Q0FGNUY5NkFFNUU0NEM3Q0I0QTI2RTEzRDNBCis6MTBBOTMwMDBGNEVCQ0YyNDU4QTZGREI1M0RFRUQ4NzgyRjcxQkFBRjExCis6MTBBOTQwMDAyOTBBRUQ4NEYxNkFCMjczNEJEQjgzQjE3MUU4QkEzQjNCCis6MTBBOTUwMDA5QzUzNENFQkI2NTc2NDQwRkRFMkQyOUIyNzE5RTAzOTdCCis6MTBBOTYwMDA4OUVEODNEMjAxRjZBM0QzM0MzNjk3RjJDMURFQkVGMzY0Cis6MTBBOTcwMDAwQUMxN0VGRkE5NDVFRTk2RjcyRDc2MTBEQUVFQ0E0Qzk1Cis6MTBBOTgwMDAyRTVGMDJBQ0JGQkY5QUM5OUZDMTlCNTMyMjNEQzA5RjlGCis6MTBBOTkwMDA0RUI1MzQ2NEIwM0IwMzFDMUVENTc3MkVCQzFGREEzNTkwCis6MTBBOUEwMDBGNTM5NDgxMjZEQjc3RTRGNjUzNjE5NDEyRjM2N0QzMTI2Cis6MTBBOUIwMDA5MzQ0QTYxQUNBRjZBODAyNzJBN0U5OEIzOUY4N0JGNTY4Cis6MTBBOUMwMDA5RDJGMjlDMEE3MzA0RTgwRUU2QkJENEJDQjU2MDE2RTNDCis6MTBBOUQwMDBFREYxRjE0RjFENzI1QzQ3RDMxN0U5NDQ5RjZBRkM5RDZFCis6MTBBOUUwMDBDMTI5MzZCRTBGRUI0RkI3QUZEODc4MzI4OTY0OEUzNEE5Cis6MTBBOUYwMDA5RTgyRjU0MzcwQjc3M0I4MkJGMUQ3Mzk1RkQwMjk4NUE0Cis6MTBBQTAwMDBCN0NENDA1RjRCMzlCRDUxRTk4NzcxOTRGRUNCMjZGNTM4Cis6MTBBQTEwMDA4MEJDOEZDREJCMDlDN0RGNkJBNzc4MDQzQkIwMkYzOTUzCis6MTBBQTIwMDAwMDc2NzFCOTlEQzlDRkYyQkUwQ0FGMkVDNUU4NDNEMEY4Cis6MTBBQTMwMDA4NUMwRUJERThDOTY0QURDRUYyMkM5REIxMzFDQkVBRTcwCis6MTBBQTQwMDBDQkM0QkFCODNFQ0Q2RTA4Q0JENzE4RDYyN0Y4ODE4RUM2Cis6MTBBQTUwMDBCRjk3OEY1RjU2ODFGQ0YzMkY0Q0ZGNTBCRTU5MDFGQzBFCis6MTBBQTYwMDAwQjc2MEJFQzQzOEQ5NjJDRjYwQzVGRkZDRkE4RUM4MDk5Cis6MTBBQTcwMDAyRkM1MjM4M0ZGQTVFRTA4RTgwMTAxQjdFMUYwQ0YzRjIyCis6MTBBQTgwMDAwRDNFQzc2MjdENzlERjMzMEFFQ0IzMjkwMURGODYzMkUwCis6MTBBQTkwMDA1M0IxNUZGNjkxNjgyQUY4QjVCRjRDNjc3QTZENkZFRkQ2Cis6MTBBQUEwMDA1NEQ3NENFMDhCODUzNjAyMjIwQ0Y2MERGNjZBQjk5MDJECis6MTBBQUIwMDBCNzY0RDcwQjU1NzZGQUZCNTA5OUNBREIwMEUwNjE0OEMyCis6MTBBQUMwMDBGRTQ2OURDRTU4RkJBQUNDNUQwQjNBNjg5RDJGODlFMkNECis6MTBBQUQwMDA3RjEyREFBMTRFNjJGMDI3QkU5REMxRTQ1ODQ1OThDNEFBCis6MTBBQUUwMDBCNTVCOTY2NTMyQkI0NUMwRkI3QjFCQUFDOTdCNzQ3RkY3Cis6MTBBQUYwMDBDRkE1MzNCRUFDMThEMDI1QzA4QkUwNkJBQjlDN0E4ODU5Cis6MTBBQjAwMDBFM0YxN0JGQ0ZCOEY5NzUzRDI2OUU0RDQyMjJFQTdEOEM0Cis6MTBBQjEwMDBFRjA3QTk5OTBGRURCMkIyQTIyNTEyRDU4OUFCNUU5OEM1Cis6MTBBQjIwMDAzQTFFRkM5OTVCNzJFNEMwRkI5NEFGOTY0OEVBOTgxRjBBCis6MTBBQjMwMDBEMTcxRUI5QzAxOEM5MzA5M0FBOTIzQ0U4MDFCRTA0RTg2Cis6MTBBQjQwMDA4REE2MkY0MUVGMkY3NDYxMTlGRTgwNURGMjY5QjdDNEE1Cis6MTBBQjUwMDBFODkwMDREMkVBNEExMkNCMjFCMThFNUI3MjE0OUM2RjRBCis6MTBBQjYwMDBENUU2RjE2OTYxRTNGQUI4OUVCODNDMjlGQTIzNTIzNDdDCis6MTBBQjcwMDA5Q0NGNDU5OUFFN0ZBRDREMzZENEJCOTkzRUZCRDBBMzVCCis6MTBBQjgwMDBGRDM0ODNFMkUxNTU4OUQ0RTM3QTJDRjZEMjZGNzhEQzg4Cis6MTBBQjkwMDBDNjZBMkZENTczM0JEMjBGRTYyNUYyQjEwRDlERDNFQ0RCCis6MTBBQkEwMDBBRUE0MDg2MTVENzRGMDUzQjM3QjA5RTdEN0E4QURDOUMzCis6MTBBQkIwMDA0MDA3QkZDRTI4NjA3NkVEMTVCNEYyMDJDQTk0Q0U2QTgzCis6MTBBQkMwMDBFRDdEODMxQzdCMUVENjgzN0EyMTNBMERGOEY0QTUwQzBCCis6MTBBQkQwMDA2MkIyRjMxQUU0NTA4MTA0NzY2Qjc2OTIwQTcyODZFMkNFCis6MTBBQkUwMDAwOUUxNzBEMDQ1RUMyRTNBRUY3M0Y0MEI3OEFCOTE2RjFFCis6MTBBQkYwMDAzRUUwRjAwMTFENDg2QTNCNDI3RjA3Rjc1QjQ5MTRGNEQxCis6MTBBQzAwMDBDREU1NzM1M0QwNkUyNUE3NkUxRDA3RjEwQTdGMEFBMzA5Cis6MTBBQzEwMDA1QjNBOEU5MzhGRTM0NDNBRTE3MkVGMzc2MzI3RjY4MDE1Cis6MTBBQzIwMDA3RTEyRjI1M0UwODE5QzkyNzEzQzUxN0Y1MDVBNTRFMDY1Cis6MTBBQzMwMDBBNUU1ODNGRTczNEJEQjI1QjNGRDAzRjY1MENDN0U1QUFFCis6MTBBQzQwMDBCRjc5M0VCNTk3QTZEN0Y2NDY2RDVFOTAyQUI3MkZCODY2Cis6MTBBQzUwMDA5REI2QUZBMUY2OTM4QkVFRTc4RjE5NEMwRjFFMENFQTUxCis6MTBBQzYwMDA3MjJBOEMzNzlFRUU4M0ZFNzQyODM5M0NBOUM1MURDMzE5Cis6MTBBQzcwMDAwN0I1NzFDMjgwQkYyQzg1N0VERDhDM0ZFMERCOTlDOUIyCis6MTBBQzgwMDA5MDkxRTE2M0RGMDZGRUNENEE2NUVEODdFOTNENUVBRjU5Cis6MTBBQzkwMDA0OTBDREU1QjJBOTk5Q0IwQjZCM0YxNzFENzNBRjVEQTZDCis6MTBBQ0EwMDBBQzQyQTM3RDE1MjI0MDg3NzZDMkVDMkMxOTc0OEYxRjBECis6MTBBQ0IwMDBGNTE5QzJBQkZBQ0U4NjM0RDA5QjlGRjUyRDREMjM5MzY4Cis6MTBBQ0MwMDA2MjcyRDRFMUZDRUREOEY3QTkxQzg5OTIyNURGMDE3RUUwCis6MTBBQ0QwMDA1NTVFOTcwOUQ4Q0I3NzM4MTg1RDJBRTk2MTZGMDZGRDc0Cis6MTBBQ0UwMDA2NkE2QzRGNzlCMjdGMkY1NjQ4MjVGNEREQkREQzNGREVBCis6MTBBQ0YwMDAxRUM3MTdFN0EzQkY5RDlGQzlFMjQ1QTkzOTc1MjhENzhECis6MTBBRDAwMDAwMTk2MDE4QUY3MzQzMkE4N0IwRDc4NENBQkIwOTlGQ0UwCis6MTBBRDEwMDAwN0M3MTc5M0IxRkY5OURCMEZBNTA5RUM4NzMyOTNGREE1Cis6MTBBRDIwMDAyMEU2QjVEQTExNkZCNkU2RTBGQTQ1RkYxNTM5QUZENTgyCis6MTBBRDMwMDAxMDQzRkI5NTY0RTAwRTE4NkZFNUZBN0M1M0JDMjg5MTM0Cis6MTBBRDQwMDBGRDMxMzc1MzFBQjIxN0Y0QjhFQjUyNENCRkJGNDlGRDZGCis6MTBBRDUwMDA0NUREMzhGRjMxMzY3RjZDREUxNENBNzBCMTc5RTU0Q0MxCis6MTBBRDYwMDA0RENCNDRCRjZGOTZGN0U4RjlGNEUzQTJCRkNCQTg3N0M5Cis6MTBBRDcwMDA1MEZFNTNGREE0RUQ3MEEzNUVBQTA1QjkyREZDMjRFMDlFCis6MTBBRDgwMDA3RjZGMUFGMDc3NjU2REE2REZBMDI3NzkzRkFCM0MzQTVECis6MTBBRDkwMDBDMEZERUEwMzVDREZBNDFEMTE3NjYzNzI0MDkyNjI3QTAzCis6MTBBREEwMDA2N0I4REVFMjc2QjE0NTNFOUVDRUNFQTY3NEFCMUJFRDEzCis6MTBBREIwMDA4MDYxNzhDRUZDQUFGNjY1NTEwMkZBOThGMDBGQjEyRkE3Cis6MTBBREMwMDBDQjY3ODVFNTEyOTA5RkI1MTIxOTRGM0ZEM0U3OTlGNUYwCis6MTBBREQwMDBCRDlFQzlGQzEwOUQzMjlDRDE2RjU5REM2MDZFRDcwMUJECis6MTBBREUwMDBFREZDRjA0RDE5OTVERjYyRDQ0NzkyMEM3MjhGOERENzMwCis6MTBBREYwMDBDQ0U5MjE3OEUyNTUyNTQwRTU3MDk0REI0M0JCN0NEQTUxCis6MTBBRTAwMDA1RDQwMTcxREM5QTk5MzQxNEY3NDI0OEY4RDQwNUM2MjJBCis6MTBBRTEwMDBDN0ZGNTYxN0VGQTBFQjFGN0NEOUExRjZDMEIwRkIxOEY3Cis6MTBBRTIwMDA5RDU0MkU1RkRGNkVBN0JGM0I3QTI1NkYxMjg5QUREMzhECis6MTBBRTMwMDBCRDQxRDI1NjUzM0VCRTlGQ0I4OTI2MUZEQjRGOTMyRjc5Cis6MTBBRTQwMDBBQThDQTNGM0U3MzVCMTc1MTRGNDFFOTBFQzA2Nzk1NzdDCis6MTBBRTUwMDBEMEM4REFFREM4NzQ5OEY0Q0ZBMzUwQTZFMzNDMjJGQzI2Cis6MTBBRTYwMDAxMTEyNjlBQjI5ODNGNjlBMURDRTQxRjI3QTI1OEMwRjE3Cis6MTBBRTcwMDBFN0I1NTA0MDUwN0FDODUzRDlGODZFMzUyMjVEM0IyOTZBCis6MTBBRTgwMDBCNkRGMkVEQkEyNDlBMDI3QkFCMjUyNTREMDEzMjc3REQ5Cis6MTBBRTkwMDBFMUM3NjBCRjRERkREMTI4ODA2QjdBN0Y5RjFERUMzRERGCis6MTBBRUEwMDA5NzVGREIwREJGOEI3RDA2NjQ2RjFFQzhEOTk0N0VCNjlECis6MTBBRUIwMDBCRTZFMEJERDEzNzIxNzVGNTcwRjkzQkYzMjc5OUUwMDgyCis6MTBBRUMwMDA1RTQwODZEMEY5QjIzNjE1QTM5RTEyRURCMzMyQjhERURECis6MTBBRUQwMDBDODIyRTEyN0QwQ0UyMjVEMDRGMTQ2NzAxRjU5OUIyNjdGCis6MTBBRUUwMDBBMEJEMkZGMDFBQjNBQjI2NEUwMUJCQUE2ODZCRDRCRTJGCis6MTBBRUYwMDA4QUY2N0JGQUExRjhGMUZBMTczOTlGRDA3RDFDMzRFRTVGCis6MTBBRjAwMDAyMzExN0YwOEJEMjZEQTM5MTJGOEQ1ODJFRTUzNkFFM0ExCis6MTBBRjEwMDBEQkFCNTQxMzYwN0RFNTcyREY5NUIwRUZBNjBFODUyNEEwCis6MTBBRjIwMDA0OTMxRjhCQkZDQTEyMzIwQjdGMjdBNzc0ODAwMUIyQkVDCis6MTBBRjMwMDA5RDc1NjRGQzUwQ0FBN0ZCQkNGNTQ2RTI5NTQ5RTI3NUQ1Cis6MTBBRjQwMDAzNzZEOTBCNUQ1NDY3RUVFNTAxOEREMjhFNkYzM0RFMTJECis6MTBBRjUwMDA2NzdDQzJFMzA1QjNGREExNjMwMDhGRTY3RERCMTRDMDBGCis6MTBBRjYwMDBGMzhEM0JERjUxNDYzQUQ3MTkyRERDQTQ0NkU2QkYzNEJBCis6MTBBRjcwMDBENTNCMjNCMERGQ0FFNTc2QzRFMzlBMEUyNTAyRjJBOUQ5Cis6MTBBRjgwMDA2OUY3OUVBODBERUNFQzhENDQwNUZFNkZFQURENzMyODkxCis6MTBBRjkwMDA4RkMyMjdCRjQ5OUIyNjA3NjJFM0U1Mzc0NTI0NTg0RkY4Cis6MTBBRkEwMDAxNjI1QzYzRUY0RkZBMjBBRTg2RDJCN0Q4MzlEMENGNkE0Cis6MTBBRkIwMDBDQTIxMTdFM0ZGMEYyQkREQkE0NEUxRjhBMTIzREMwNDFCCis6MTBBRkMwMDBFRDNFQ0M0RDUxRjU2MDBDRUVDRkVEOTlGRkJDNDQ1OUYwCis6MTBBRkQwMDBEQ0YzNDQ1MjE0QkU1REI2OUUxQzI3NkRENzc1OUVBMjRECis6MTBBRkUwMDAwMjNEQjlGQzYxOEY4RkMyMjlDMzFFREEwQkZERDM3REYwCis6MTBBRkYwMDAxRUI1OERGNjBEMjQ5MTI5QThBRjQ3MDk4N0U5MTZCQTI5Cis6MTBCMDAwMDA5OEJFOTFGMUNCNUM1RkFBQjAwM0E3ODA1QzNBRDdFNzBBCis6MTBCMDEwMDAxMTc2MTRDQUFCNDMwRUI2OEYwRUMyRDZEQjk5QTkxNUIyCis6MTBCMDIwMDBDMDdBODgzNzAzRTdDRDZCOEE0QUUwMDc1OEU3OEREMUFECis6MTBCMDMwMDA5NTU2ODhFRDQ3QkRDRTVFMDVFNEZDMUEyRTZGMkE5NzIzCis6MTBCMDQwMDBFRjk0REUzM0QwNDFBOThGOURDRkU2RURERTIxODE3RkU1Cis6MTBCMDUwMDA0OEVCREI2QTdDRDg5RTI0ODFCQ0Q5Q0RDRTI5RDZEMEUyCis6MTBCMDYwMDBGQUVCMENGMjQ1RUMyMzhFOUNBOTgwRjVCOUZCRkI5RTE0Cis6MTBCMDcwMDA2NTcyMjY4QUY0MjdENjZCQzVFNzNDMUZCM0VGMkVBMjc0Cis6MTBCMDgwMDA2NjAyRkVBRUU4QzUwMTNBREVBMUMyNjQxQzRGRjBCRDA3Cis6MTBCMDkwMDA5NTRGRTdGOTE4OURFN0Q1RUY5NDIwOUVFMDRCNjFGNkI4Cis6MTBCMEEwMDBBNDU4OUY2OEI3Q0I1NzU1RUI0MzM4RjQyMTFDRDZENjJDCis6MTBCMEIwMDBEQjExNkY2MjNEMzU0QTY4MUNGODY1Q0JGODc4Q0Y1Q0QwCis6MTBCMEMwMDBGMTk2MzI0MENCRjdGREY0MTVBNEM3QjVERDkyODZGRUFDCis6MTBCMEQwMDA0MkY3MkJDQTUyODhEQkU5RkYyRTQzOUNGNjEyNjZBMjg4Cis6MTBCMEUwMDA5MEVEM0Y3OTA1RjVDQTI1N0I1OUZDNjBFRERFM0RGNjE0Cis6MTBCMEYwMDA2QkREMzEzQTBEOUU3ODY2MjVEMEQ5REFERTI0RTI5MkY2Cis6MTBCMTAwMDAwMDdGMDFFNDUzMkI5RDUyMzk4Mzc0NEY3NDA1Q0ZCOUVFCis6MTBCMTEwMDBBODlDRDQ1MUFFOTI3MDEwRkMxNDIxODczQjM5N0YxMzQ4Cis6MTBCMTIwMDAzN0ZCRkQ0NkJFNkUzMTZFNEM3RUJBOTBERTgzMjdBNjlECis6MTBCMTMwMDAzQ0UzQTRGMDVDQUI0QUFBMEJGODkxQzM5QjhFMUY0NTdECis6MTBCMTQwMDAzOTRDNDgyMUY4NkI2MjdDMkJGQ0ZFOTlEQkVENzFGMEU5Cis6MTBCMTUwMDA3QzFCRTBEOUFBNEY4NDlFMEQzRTVDNDVFMDJCRjA2NzM2Cis6MTBCMTYwMDBFNzcwMUZEMkVGM0UwNUQ3REJFMUIzMzMzRDVGQzlFMkE1Cis6MTBCMTcwMDBEQTFEMEVBNjQ3M0FEQTlDMTFFMEVCRTdEMjJGN0E1RTkxCis6MTBCMTgwMDBBMkYyRDI5M0ExNDRFMTdCRDBCNkFBMDlFQTBGRTZCMUJDCis6MTBCMTkwMDA3NTc0RDkzNjE1QjczMDNENzY4NzBGRjE5NzRBOTg3QzhDCis6MTBCMUEwMDA2MkYyRThCRTFGMzM3OUQyQTRCQkQxN0Y2QzBBRDdBRDVGCis6MTBCMUIwMDBDNjczMDk5RjRCODU3MzA5MTI3RTU2NTlFQTg5RDE4MzVDCis6MTBCMUMwMDAxNUJGODEyNzBFMjgwMTVBN0Y0OTJGRTM4MzE4REM5ODg5Cis6MTBCMUQwMDBCRTEyNzQ0QkU1MUNFMkJEMzM1MzlDNUY4NjgzMDA1NzVGCis6MTBCMUUwMDBFQUQ3Qjc0MUZDNDFGOEY1QTkwRDIxREQxMzE4Q0VBRjIwCis6MTBCMUYwMDA5OURDQUY5RkM2RkQ3QTQ3ODVGMzZGRUFEN0FGRDlGMEU4Cis6MTBCMjAwMDA2QkY0ODM2RUNBNzkwMUJGODI1RkE4RkY2OEUyQUIyNzQ3Cis6MTBCMjEwMDAzOEJFRUZGNzMxQkRGQTk0OEZEMUQ1OUFCMjVFRTQ4NzhDCis6MTBCMjIwMDAzNUVGQjcyMDFGQjk2Qjk5M0M3MUY3OUJFNTIwMjE3NzZCCis6MTBCMjMwMDA3M0ZCNjAyQjhFNTM5M0QyN0I5MTBDN0VGMkJGNEFERTYwCis6MTBCMjQwMDA3NjkyNzhERDM3NDgyREZGMDk3OTMyNjQwRkNGREYzOEU5Cis6MTBCMjUwMDA0NUFERkM3MjBBNTcxNzg3MDE2RkY3NkIxRkYzQjczRUI2Cis6MTBCMjYwMDBEQzQ1MTEwMTdDNjk2RjUxNDZCMjg3NEYzNzJFODlCRThDCis6MTBCMjcwMDAyNjAxQkVENzcwNTg3RkI4QkJGQUMyM0Y0MDlDNzE1N0I5Cis6MTBCMjgwMDAxQUU2QjM3Q0IwN0JDOTM3RkY0MEZCN0ZCODczQUUwQUM4Cis6MTBCMjkwMDA3QURBRDcxRTQyRkExOUY0QkI1NDg4Mjc1MkYxNTkyQjk3Cis6MTBCMkEwMDA1MTdBNjhFQkZENTVFQTRDMzgyRjdCRUM4MjI5MjAzNzI4Cis6MTBCMkIwMDBERkU1N0M3OUUyQzdGMjA2ODBDRkE2N0Y3QjdDMEVENEU3Cis6MTBCMkMwMDBBRjg5NDg5OTYwM0Y3RUI4RUI1RkZGMEE3QUIxNzFFN0JBCis6MTBCMkQwMDAzQUNDNEI2QjdGRUM5NzY4OTdEQjIyM0JEOEVGQkJEMjI1Cis6MTBCMkUwMDBEMENFM0NGRUM4QjYzOTAwRjdGNkRFNzZBQzNGRjFDOEVBCis6MTBCMkYwMDAwRTJDM0ZGMzZGOEZGRkUyMkY2MDc3ODQ1MjU1Njg3N0YzCis6MTBCMzAwMDBFMkM3REJGRUU5MkY0MEU3NzVBOTJBRUNBMzI5NkM2N0E5Cis6MTBCMzEwMDBFN0I5ODJCRUFENzI2QkNGMDFFNDUzNDEyRjk3ODBERTU3Cis6MTBCMzIwMDAwNTM4RDUzM0Y5MjNFOEY5NUQ3RURFQjRBQURBREQwNTA4Cis6MTBCMzMwMDBGMkVDREQyRDlFQzY3ODcxNDZDNUNGRjAwMkIxMTg5NEFGCis6MTBCMzQwMDA2M0Y1MTJDNkQ5QkEyOEQ1NDBCQ0EzMkI5OTU0QzAzNzhGCis6MTBCMzUwMDA2NTUyNTRDOUE3RjM1Q0QxQjA2NzBFREEzREZBM0JENzBBCis6MTBCMzYwMDA0M0ZCMjVGQjVDNjQwQkM2RTUyMEE4NEJGRDAxMjQ3NTVGCis6MTBCMzcwMDA0MjRBQTgxODNDNEFGRDY2M0FGQUNFMkYyOUREMUVBNjlECis6MTBCMzgwMDBGMjAxRjU4RUM1MUY1OEQyRjVDMkZGODAxQ0FENzMwRUI5Cis6MTBCMzkwMDAxQzAwNTEyODdFRUZFMkYxMUJEQTFFRjU0RUY5RkFGODk3Cis6MTBCM0EwMDA3MUQyNTRCRjlCRDMyREQzOUI3OTdCMTcxNTA0NTA0RTdDCis6MTBCM0IwMDAyNEE5RTMwREY2RTk5ODIzMkQ1QjIwM0QyOUFGQjFFRkQ5Cis6MTBCM0MwMDAyMkQ4QzdDNUM1RDc0QzQ1QkE4MEY4MUZFODFGREQ4RDA4Cis6MTBCM0QwMDBFM0FGODVGODI1RTVCRjczRkMzQzJFRTIyNUJFMTk3NDZBCis6MTBCM0UwMDBGRTFBM0JGMUI5RTE0QkM4NkIwRTk0MjM4RkUyQjhENDNGCis6MTBCM0YwMDBGRTQwQkIyQUYwQ0IyQjFFMDU3QjY0QkIyMzlDM0IwRDgwCis6MTBCNDAwMDBDNkU5RTI3QTZCMjc1QjM3RURFRjg1NzM1NDNBOUU3Nzk2Cis6MTBCNDEwMDBDNjE0MUNBN0NGOTE4MUZENzVENjdGRkVDRTM2MjlCNjA2Cis6MTBCNDIwMDA1RTRBQTk2MzQxNkZDMTc4NjU2RUQwMzM3QTNERTIyN0U5Cis6MTBCNDMwMDBBMEUwQkU0RTQwOTM1Q0RDRjdFNDE1MjUzMUZFQjVDNkI2Cis6MTBCNDQwMDA3RDQwOUVDMUY5RjA2QzdGNjU4NTdGNUFFQzJCRTI0MTBGCis6MTBCNDUwMDA1Njc4NkVFNEY1M0ZGMzZCRjgyNUJCMzI0RDdBMjU5MUIzCis6MTBCNDYwMDBCREYyQ0MxNTFGMzNGREZCQjM3NzUwREUzNDAzMURDMzkzCis6MTBCNDcwMDBGQ0UxRjc0REZBRjc1QTQxQzc0RkJEODM3NDdDRUQzRUFFCis6MTBCNDgwMDBBNjdGOUJGNzk1MkE0MEI3MUZCNDZBRTQzRDZBODAzNkQxCis6MTBCNDkwMDBGM0YzRDdFREQyQzBGNTk4RUZGMjk0Q0IwQjcxQkQ4RkRCCis6MTBCNEEwMDBCOUJFNTlCM0Y1OURBMzcwNkU1QUI4MkYxN0ZERkM4RjI2Cis6MTBCNEIwMDA5RjcyRDVDMzM4MDc2RDM2ODRFN0MxOUVGMzc3QjQ0QkNFCis6MTBCNEMwMDBDNjc1MzJCRjgwREFDMTQ4QUFDREQ0NEU2NTc2RjBFQTlGCis6MTBCNEQwMDA2REUwQTdBRDZEMjQyQUYwN0ZCMzg1N0U5QUY3QkQ4MjFCCis6MTBCNEUwMDBGNDIyRUNFMEUwQzM4QjU3MzNGQkQzQTVCQUMwOEY5QkFCCis6MTBCNEYwMDBDN0VDNTE0MkVENTE2ODlGM0UyRkQyQTYyMDdEOTU5NjE0Cis6MTBCNTAwMDAwMzdEM0Q3M0M1MkYzQTQxOEYzN0NGMjM1RTE4N0ZGQkY0Cis6MTBCNTEwMDAxOEVEQTk3Q0RDOEY0NDIwQ0Y2NUJCQTNCQkNBNEVGQkQyCis6MTBCNTIwMDA2RkFGMDk3ODI5MjQyOURDNzZBMkRENEI4QTE1QUVFN0I2Cis6MTBCNTMwMDA1NkEzQkREQzlDNzM5NThBN0M2Njk1MDc0RkI1QTFERDRCCis6MTBCNTQwMDBENTFDNDhDNkY1NUNCMjRGQkE4NUQ5MjM2RUMyRDYyRjNBCis6MTBCNTUwMDAyMTdENUUxMjk5MTk4MUY4RDk0NzFDN0UwMjhFMUYzQjBFCis6MTBCNTYwMDBGQTU2MDIzQzNFRkUwOTI1NDQ1QTdGQzkzQzQ2QUZFOUUzCis6MTBCNTcwMDBGMzdBNTE4RTNDRjdENDdDRDRFMzgyMkUzRDRGMjZBMTQyCis6MTBCNTgwMDAzRUNGQjA3QjI1MTVGNURBOTIyNDIzNUVCQjFENEMyRkYwCis6MTBCNTkwMDBBNTczM0Q1M0I0OTVFMUI3OTNGMzUzQTdERkM2QkY4QUI0Cis6MTBCNUEwMDAzOUZFRTJENTI3ODNERUZEODhFMzFGQzUwOEM4NzcyRTY0Cis6MTBCNUIwMDA0RkQ2QUU4RTIyM0YzNUVENjZFM0Y5OTJCNEQyNUIwREU1Cis6MTBCNUMwMDBGNEVCQUI2NjdBNTE5QzA3QzBGOUMwQTIzOEYyRTIzMUM1Cis6MTBCNUQwMDBCRThFRTBDM0FCQjY4MUJEN0MzMUM1M0JBODk0QkM2MkQ2Cis6MTBCNUUwMDAyRTQ3Mjk1RDAwRENGMjFBNDM0ODA3MTdGQjZFNTAyMUY1Cis6MTBCNUYwMDAzRkQ1OUY0OUQwNUYxQzZDNTM0OEJDQjhDRkUzNUM4RUVECis6MTBCNjAwMDBGQTMzNDM2NTEwODdGNjY3N0JEMENFRjFDQjk1MzYxN0JBCis6MTBCNjEwMDBGNDJCOTVENDlFMDA5RTdCQTI5RDM3RThDRjU1N0I0Q0EyCis6MTBCNjIwMDBGQzFFMkFCM0QxNzZDN0IyM0MwQ0NGOTFERkQ4MTc5NzU2Cis6MTBCNjMwMDAwMDFGMDZEOEI4MTZCQjZGQjhERkNERUNDNjg1RERGQUEzCis6MTBCNjQwMDA2NEYwNDNDNEI5ODY4MDQzQTQyREI5REUyODNGN0ZDMjhECis6MTBCNjUwMDBFMTEwOTlDOEUyQTlENEJFNzc2MzVDREI0QkU3MDFGRjM4Cis6MTBCNjYwMDBCRTY3RTYyM0NDQkY2RkM3NzYwRkZCOTk3RDU0NDNGN0M3Cis6MTBCNjcwMDAwNzc2OUJCRjI4QjQ5RUU5NTM4RjFBMEYxRUIzRkRDMkY1Cis6MTBCNjgwMDAyRTVGNTkwQTdFNjU3MzlENUIwNTdFQkJFRjY3RDIyQUVDCis6MTBCNjkwMDBBNDY3MDgxNjgyREYxRDVFOEQ3ODIwMTQwRkMwMEYyNDZBCis6MTBCNkEwMDBDQ0ZDRDJFNjk2NTAyNDNFQkQyRjQyRkU2QjA2RkU5M0E0Cis6MTBCNkIwMDA5MERFMzEwRTRGRTkzREMyRTg5REU5M0ZFMUZGODM3QzFBCis6MTBCNkMwMDAzNEU2MUQwQTM5MjBFNDRCQjMzMjMwMDFFODU4RjA0MzI4Cis6MTBCNkQwMDBGMzlDODEwOTAwQjdEMUNBOTM4RjFEOTRGRjgxN0YyODA1Cis6MTBCNkUwMDAxQzgwN0YwNEJGNzg5RTY2N0NCMkE1MkQ1MDA5RjU1QjU3Cis6MTBCNkYwMDA2QTg4QjdEREEwOEZBQ0ZFMTJBQzEzRkM0RTIxRDc0Rjg5Cis6MTBCNzAwMDBGQTQyQzdGRDEwMDdCMDQ1M0IyMUJGNDJDOEUxRTZBNzlBCis6MTBCNzEwMDAzNzRGODg5N0ZGMjZFNEIwRDNDRUU0OUIzMzkyMTI2OTZCCis6MTBCNzIwMDAzN0QwMTc5Q0Y5NzlBNkUwMTdGMzc5NTIzNkM0OEY4RjdBCis6MTBCNzMwMDA5Q0YyQkI3OTFDN0Y3NEY5MTI1OUEwQ0I0MURFRjRBNEIyCis6MTBCNzQwMDA2MDVFQkI4ODE3NTlDN0ZERDgyRjk5RTIzMkMyNkY4MTVFCis6MTBCNzUwMDA3MzA3Njg5RjkzQzVGODI3MjU4QkYzNjc5Njg4Q0Y0NkI0Cis6MTBCNzYwMDA0Q0Y0MUZCMDg1REY4MTNDQTM0NEZBNEJGNEZCNUJDNTZFCis6MTBCNzcwMDBBRkM0M0M0MjhGNUFGMTJGQ0U0RDYwM0Y4QjI2MjU2RUQxCis6MTBCNzgwMDBENzdEODBDOTI3MkIzRDRFRTQ3QzcyMTQ3QzBGREFFRTA2Cis6MTBCNzkwMDAzRkY4MzlENzcwRkNCMjcxNDg3OEEyMjkyRkFFQ0JCNkVBCis6MTBCN0EwMDBBNzMxNUUxQzRDOUM3NzkwODcyNjhFMkFFRkVFNDAyQkFCCis6MTBCN0IwMDBDQkFGRkEwRjlFNjc0QjU2NEYzNEU1NTlCOUQ1NDAxQkI2Cis6MTBCN0MwMDBDNDUxQUI5Q0MxNTIxOUU3NjU3MTJDQ0YxQ0YyMDlFODNBCis6MTBCN0QwMDBFMUM5RkJCQThCMjE3RkM5MUYzMjlGOTc2NEQ3Mjc5QjkyCis6MTBCN0UwMDBDRTIzNzJDMzE5QTY3MjdFNjM5RUE5RkQ5ODk2NDI1MzFBCis6MTBCN0YwMDBGRDM5MUJDRTMzRDUwN0Y1MjlBNjcyNTFENzBDNTNGQjYzCis6MTBCODAwMDBGMURENTVBNkYyQjkwRjVDNkM2QTNGMzFCMkQ4NTRERTU3Cis6MTBCODEwMDBEMkQ2NUIwRjc4Mzk3RkQ3OTVBNjdFNTU3NkFGQkQ5NDhCCis6MTBCODIwMDBDMkI1QTQ3Nzk1Mzk3RkNDMDJDRkI0QkZDQTcxRTlCMDU1Cis6MTBCODMwMDAyOTJCODg3OEFEQjI5QkYzODgyRkQ4Njc4NjA3QTRDQkQ1Cis6MTBCODQwMDAwMTlDMjcxMzNFREU5QzYzNTM0NkNBNkY5RDRDRUM3RkUwCis6MTBCODUwMDAxRTEwRkQ4M0MzRTk4MTM4MDdENDUwMUMzRjUzRDBCOTczCis6MTBCODYwMDAyODVCQ0ZCNTg0RkMzODUzRkE0QkI0NEU0MTdGODlFQTRDCis6MTBCODcwMDAxM0MxRUQzQjlDRkYwNTVDMUM0MzcwQTk1NzQ3ODI4QkFECis6MTBCODgwMDBFMzc0NzAyMTE0MkU5RUFGMEUxN0VCNzg5QjUyOUEzMTAxCis6MTBCODkwMDA0RkY4MzUyODE4RUNFMzgxNTZGMzdEOTg2NTdBMUFEMzcyCis6MTBCOEEwMDA0M0ExMjVBN0IxQTM1OTFDMzg5Q0M0Q0UyQkFERjVGRkVECis6MTBCOEIwMDBDOUUxRjIyMTg1MDlFMjYxOTQ3Q0ZEMTZDNzQzN0YyMjJDCis6MTBCOEMwMDBCRURFRjBDOUMxNkM5MERGQjUwNEZENjY2RjRCREIyN0FGCis6MTBCOEQwMDBBMEI3QUVCNjQ3MDlEMEZGN0Q3QzNGREI3OUJFRTgwMzU5Cis6MTBCOEUwMDBBRDVFMUNFNzQxN0UxRUY5NTA2QjAwN0Y3RkI4QjUxODM2Cis6MTBCOEYwMDBCRjkxNTYxNTdGRUY2OUFEQzBFRjRFNkFDRkMxRjcwNzE0Cis6MTBCOTAwMDBBREI1RjhEREQ1MUFDMjc2M0Y2Q0FEQzdFRkVFRDYzMEQ3Cis6MTBCOTEwMDA1QkQ3MzA3QzkxNzJCNDczNDI5OTcxRTNBNUQ3RThGMjlBCis6MTBCOTIwMDBBOEYwNDRFNDgyQjhGQTMyRTEzODcyQzM4OEY5RTUxQjIyCis6MTBCOTMwMDBGQUE1Qzc5RjM1RjBFRjVCNTkxRURGNTFDODZEOUM0RUNECis6MTBCOTQwMDBBNkMzRjlFNkU5RkE3RkRFNEExRTdGNzZGQ0U4Rjk0OEVECis6MTBCOTUwMDBEMDEzMzk5NTM5MjExRTVGODc3OTVFRTU2M0RCNTdEREFBCis6MTBCOTYwMDBBNTRGNEEwQ0FGMTg5REM1ODc1MzlERjNFMzNDNzBENjk1Cis6MTBCOTcwMDAyNzgzQ0Q2MEU4MkZFRTlGODg3MjVEMzgyREFFREQ5MDc1Cis6MTBCOTgwMDA5N0NERjQ2RTdEMTIzQjhGNUY2RUUxRUY2RjY1MzNGQUZBCis6MTBCOTkwMDBGRDU2MzZEMzc3QkY0QjIwNjdEMjc5M0Q1REE3MDNDRkU1Cis6MTBCOUEwMDAwNzg3RjFERDNEQjNFM0MxRjdBRUVDODAyOTJGQzU3QUZGCis6MTBCOUIwMDA2RkM1M0FDRUVGMUNERDYzRDQzODdDNzZCQTcxQzRGRTE1Cis6MTBCOUMwMDBBQ0ZEQUVFMkZCRkY2NjM2NjFFQkZGN0ZDNjlGQkZCQkZGCis6MTBCOUQwMDBDRTgzRkUwM0MwQ0Q2RkQ4RkZFRkFFNEJBOThGMTc5Nzc0Cis6MTBCOUUwMDA2OUNGNjZFN0ExRDQzQTI3QzEwQzM0RjU3NTA1NkNDNTVCCis6MTBCOUYwMDA2MjEyNjBFN0JFRTNCQzEwMUYxMjc5MDE4OUU5RDU4RTlGCis6MTBCQTAwMDA3MTI0ODRBMTNDMUNBRTE0MUYwMUE1ODg4RTZGMUY5QTVGCis6MTBCQTEwMDAyNzZBODc3OTU0NUI0Q0NGNDJBRTBEMzFEQ0ZGOTA4N0FCCis6MTBCQTIwMDBEMzAzRURBRjJCOThENzMzOTAwN0VCM0I1MzdBMjJGMjM5Cis6MTBCQTMwMDA0M0UzNDczQUE3MUJENkZGMENFNUNDOUFFQ0JGQUY5QzdCCis6MTBCQTQwMDAxMTdDNEU0RUREM0IzRTlFOUVBQzg3Qjk2NzUwN0JFQzMxCis6MTBCQTUwMDBGRTg3OTg5QzM5Q0RCODY3MEFCRjdBNzkwMENGQUY0Nzg3Cis6MTBCQTYwMDAwREJGN0RCRTUxQzVBNTNFNzdBNTRFMjZENEFGREJFMDA4Cis6MTBCQTcwMDA2NERGREI5MzUzN0JFMEZCQjk2QjZDODRBNDUyN0U4MTYzCis6MTBCQTgwMDA3NTUyQkVENUFCMDhCQkJGRjU5NkYwOUI1QUE2ODNCQ0RBCis6MTBCQTkwMDBERDlFMUI3QTMwOUI4RUIzNEE2MUZFRTI5RkIyQjRFRjBCCis6MTBCQUEwMDA0MzM5OTk5RjBCMjdGMzczNjEyNTVCRTk4NDMyRDE4QTZGCis6MTBCQUIwMDA3MTVGMTdGMDdENzVEQTAyNjM2MTVGRUY0QkVBNDRGMDY2Cis6MTBCQUMwMDA1QkJDQjY4ODBBREY1NDEyMkQ2MUY5Nzk5MTMwRjg2QkFFCis6MTBCQUQwMDA5OUU3MjcwN0MwREY0RDlFNDA0ODFGQzZDNzU1MTdDNENBCis6MTBCQUUwMDBEMTk0OTRDMTE3QzcwMUZGRkZEMjg2RjdBMjFGRjdCMjA2Cis6MTBCQUYwMDA3NTNFRkU0MDNFOUVCMzUwODE4RkYyNjIzMkZDNEVCN0RGCis6MTBCQjAwMDBCMjA1RUM3MkRBRkZGQjUyRjg4OTZDQkFBRkUzNUVBN0JDCis6MTBCQjEwMDA2RUEzRUI5QUJDRjlCRDhDMENGQUZCRTNGQkFCRjA1Q0JCCis6MTBCQjIwMDAyMUJBNEJENjE1QjhERkQwRjdFMTc3MkZBMUUzNUREMDZFCis6MTBCQjMwMDBFN0MwRjhGMzA1NDQ0NkY5QkVDNjRFQjYwMjFGMjU4MjlCCis6MTBCQjQwMDBFRjA3REY4ODlGMDdFNkM4OTE0Q0Y5NURENkZBRjdCOTkxCis6MTBCQjUwMDAxRUY4MjA0MUJFRjE2QkJDNUVFNENGMzg0NEZFOEM1RjIyCis6MTBCQjYwMDAxQjMxN0ZDNjYxQzk5RjcxRDg0MzA0Q0U4NTFENDNGOTNGCis6MTBCQjcwMDAzMzBEMDRGMzY3RTgzOEM2RkM5OTBGQUFFMkFGQTM5RjIwCis6MTBCQjgwMDBDQjczQzcxNzI5MDlDNjREQzVERjNGMjgxQzc5OUY4RTg3Cis6MTBCQjkwMDAyRjVDQTY3Q0VDNTg3RjM3RkU5RTI4N0ZFNzMzMDFBN0Y5Cis6MTBCQkEwMDAwNEY5NEI5RjBDQUQyRjk3RTg5OUM2N0U4Q0VGNjJGMzlBCis6MTBCQkIwMDAxNDYwQkRDMzkyMDcxNEFCNjdGOTNGMURFOThDNEUwRUFDCis6MTBCQkMwMDBFNDc4N0REN0QwQTFBRjIxMDM3ODlGRjM2QUI3Q0YwMTg2Cis6MTBCQkQwMDBGMUE0MTA1MUY3RTBGRDFFQkI2MzcwNDBGMDYxMjFCNDg5Cis6MTBCQkUwMDBCM0JGMEI3NkI3OEQ0QTVFQjBCQkFGREVFMDc4NzdDMEVGCis6MTBCQkYwMDAyMEI3MTY2OUU2MzI4MUY2MDYzOUJDMTg2MkQ4NzQxRjgwCis6MTBCQzAwMDBDOUU3MTU2M0ZFREZBNzI0OTBFNjFENDE4RTM2MzhFNUFGCis6MTBCQzEwMDA5MEREQjA4RkZFMDQ3NkM0ODU5QzBFRkI3M0UzQzNBRjRBCis6MTBCQzIwMDAzMEM3NjZDQTYzMUFERTlGRTcwM0YwN0I2OEI3N0E0N0JFCis6MTBCQzMwMDA5NjlGMDBERjcwQTY3MTdDMkIxRTdDNTg3RjNBMzhGQkU0Cis6MTBCQzQwMDBFMUIwMERFMjZBOTUxMkNCRjNGRjlCQzMzQjlERTdCQkNFCis6MTBCQzUwMDBCMUZCMDMwRTRCQkVGQUUyNUNFQkJBNTlCRUZBRkRFOTRBCis6MTBCQzYwMDBBMTk5MzlEODJGMzBDMTc4NUY2MEFGNUQ0Qjk5NDJCRjQxCis6MTBCQzcwMDBGRDVDRUU1OEUxQjI4OUMzRDlCQUVGQkQzQ0VGM0U1OTQ1Cis6MTBCQzgwMDAyNjJEN0IwQ0YwQjdFRUY3MUIzOThDQ0U0NUZCMEUwNzRCCis6MTBCQzkwMDAzQkNGMDJDMUU3QTQ3MjZGMDU2MTcyNkY0NTRFMjFDRkExCis6MTBCQ0EwMDAxRjRGQjcwM0JFMUFEODEwNjQ4NUY3MTA5RTJGMDkzOEFFCis6MTBCQ0IwMDAwRjgzMUY4N0JCMTU4RTIxMTI1ODA5RjlEREE3ODNFNzczCis6MTBCQ0MwMDA4NjVDNkQ0NTBFOURGNzlBNTc5MjE1OTBGRjJCOUQ4M0NDCis6MTBCQ0QwMDAwN0MxNjcxREU4QjMxRDFFNDdCRkVGQjhDNzFEREQ0OThCCis6MTBCQ0UwMDBFMDNDQUVGOEM5NjdFODM3QjU0MjY1NzkxNTY0MUVEQUZECis6MTBCQ0YwMDAzRjkyOUUyRjdGNzlGRUU4RUQ5RkNFRDQ3MDMxRjBDNzQyCis6MTBCRDAwMDBGQjNDM0Y1QkU4QTVDRUJDMTMxMzIwQ0ZGRUJEOENDQTI1Cis6MTBCRDEwMDAyOUI5N0U4Q0MzNkI5OTQwNDczRjRGNjI3NEY0MDAxRDc0Cis6MTBCRDIwMDA4OTk2RDdGRDYyMjJERTg3QkYyQTM3QUM0MjNCOTFFNzc2Cis6MTBCRDMwMDA0N0I0QzEwOTkwOTc3MEE2NzBBMjdGMUM0MDQ3QTc4M0EzCis6MTBCRDQwMDBEMzlBMUNDMkY4MzEzNTNFOURGNEU0QjBGOERGRTlGODJGCis6MTBCRDUwMDAwM0VGQTE5NUZERkRGODQzQzA1MzlDNjM4OEY1QTlCOTk1Cis6MTBCRDYwMDA4QzBFQzU1N0MwQ0Q5QTRGQTRFNkRBNzgzQjk2QUY3OEQzCis6MTBCRDcwMDA1NTZFMDhFMTdDNzJDQzI3NDc1RDc0RURGRDRBRkNGN0Y3Cis6MTBCRDgwMDAxRDlFMUNFNUZFMDVCQ0ZGNUU3MkI4M0YzOUZFRkE1RUUzCis6MTBCRDkwMDA0Q0MwQzdGRkE4RjU0RENERTVGNDMzMzlGRUZBREUxRUUxCis6MTBCREEwMDAyNUZDNDI2NEYwQURGNEJGODMxRUEzNzg5RTBBNzgyNjdBCis6MTBCREIwMDAxRDgzMjgxRkZCMzNFMkFGRjNBRkEzNUU2N0Q4RjFGNzEzCis6MTBCREMwMDBEMEI3ODJCRTg5N0U0RDIzOUVERkU3MjRDNzNEQkY1RjhCCis6MTBCREQwMDA0NkZEMjlGMDg3QUNFN0Y4RTJCQzlFQ0EwRkRDNkY5REY4Cis6MTBCREUwMDA3MzcwNjUyNkUwN0QxRURGNzcxNjg5QTZDM0Y5RTYyRkZFCis6MTBCREYwMDA5MkYwM0M2MDk4OUVFNEZDNDFFMTk1OTIwQkZBNjRFMTdDCis6MTBCRTAwMDAyMEM2MzVGQTI3QzQ5NzBCMjlCOThDRUU4NkRBNzdCMUFDCis6MTBCRTEwMDA3OTEyREQ0M0M4Q0M5NTQ2NzUwRjgxOTQ4NTMxMUU1ODQzCis6MTBCRTIwMDBFOTc0NDc2NThBODc1QjM4M0U5NEZDOUI1NEIwMEYyQkJFCis6MTBCRTMwMDA3MzVFM0EwMkZCQTRGMEZGNzAwODlFODZGQ0JFMTNBRDUxCis6MTBCRTQwMDBDRjdCQzczOTEyQ0JFRDM1RjIxM0U1MkQ3MUY2MzMyMUQ3Cis6MTBCRTUwMDAyQjNDMjFENzEwNkY1Q0IzRUIwNUVGMzgwM0JFNEFDODBCCis6MTBCRTYwMDA4MDhERERBMzFFQjQ5OUZDRTQ2QzcyNDY3RUYyN0UxN0QxCis6MTBCRTcwMDBFMzk3RjczMjQyQTgwRjQwM0Y4MERFRTk3Q0ZBQzI1MkQ2Cis6MTBCRTgwMDA0MDI2RDgxOTkwREYzM0U4NDk0NjM5REE5RTM3QTMzODdGCis6MTBCRTkwMDA2MDgwNjc2REFFQjAyRkU1MDQ3NkUzRDdCQjFGMTBCM0FCCis6MTBCRUEwMDA5QjI0OTNGRDFBMUJERjhFQkYwQkZDNTRCQTVGOEM4QjU3Cis6MTBCRUIwMDA4RjA5NTlEQUE1MDBDRkJGNjQ2ODk3QzFENzBBM0ZGRDQzCis6MTBCRUMwMDBDRTU5RTk3OEZGMDBFMDM3MzczNkRFMTBGRTEzRTBGOThGCis6MTBCRUQwMDAxQjU5NUEzREMwNERDRDBDQjBCQzAxOTFENzM3MTRCRjkyCis6MTBCRUUwMDBCMDdCOEYzQTYzRjAxRTJENUU5Mjc5N0M4RERBMERBQkJDCis6MTBCRUYwMDA2MUJENEExMkU3NDdFMkM2N0JFNEMyNkUyMTE2RkI4NkFCCis6MTBCRjAwMDAxNDMzN0Y3NzQ1Q0U0QkZGMDNGMTlGQ0U1NEM2QjI5RENECis6MTBCRjEwMDBGRkU0NDIzRkYwNkFDOUFCQzBCRUE5RkRGMUU2Rjc2OTk0Cis6MTBCRjIwMDBGQjMwODlCRUY5MkRGNDBGODU5RDkxMjI3Rjk5MzJGQTVECis6MTBCRjMwMDA3NTBBRkZGOTc0NzlENkNGODAzRDQ2RDc1MzY1NzNFMzEwCis6MTBCRjQwMDA3OUU3MzM3NDdGQjk1NDZFNTQyOUVDNUIzOTlGNTIxNUVECis6MTBCRjUwMDAxREFGNEEyRUQ4M0Y0MEQ3RjUxOTM5OTUzQzlCN0VCRjdGCis6MTBCRjYwMDA0MzE4MUNENkJGRjI4NzBDRjA0N0FCRUM4RTEzNDZCOUQyCis6MTBCRjcwMDA2NThEN0ZEQzk1NkI4RTdGN0M0NjE2RkVFNjdDODBDQkU0Cis6MTBCRjgwMDBBQzBDODRDQkU0QTdFNjY1MUJFMzJGNDNGMTBGQkU4RjE3Cis6MTBCRjkwMDAyNUZBMzU0QzlFNUFFNDlDOTA2NzM2Mjc3QjZGODQ2ODVGCis6MTBCRkEwMDAyNEUwQ0RDMjM4MTI4M0JCMkVFMUZCNTdCMzQ1MTk5QzY4Cis6MTBCRkIwMDAxNDVBOUVDNTkxMjQ0MTdGQkFFRkQ5RkM0QjU2ODU3MzI0Cis6MTBCRkMwMDA0MENFNDA1QTBGQ0M0N0JEQkYxQ0Y4QjY1RkE4MDZFMDc0Cis6MTBCRkQwMDAzQjU3MEFEOUQ5M0EyMjJDMEY5MUI0MTQ0MDdCOUI3MzVBCis6MTBCRkUwMDA0MDg2Rjk0NUJDMDI1NzkyMDVFMzg4Nzk1OUQ5QzNDQkZECis6MTBCRkYwMDAxRDc1OUZBRUJDMkUzMDNDQUU0MURDMUVCNDdGMTVCRTFECis6MTBDMDAwMDBCRUUzNUVCNzZFMzNDNDNCOTJEQ0QxRTM5OEJGQ0FCRkQ4Cis6MTBDMDEwMDBENkI4QzdFREIyQUU0M0ZFNzYzMkU5NDU3OUU5NzY3RjEwCis6MTBDMDIwMDBBNDAzMzBCQ0M0MkI0MUY5RkI1MkY4RTdDMDE3NDc5NTc1Cis6MTBDMDMwMDA2RTEyQTRCRjlGRkNGOUU3MDRERjY1ODMxQjYyNDVGMDI1Cis6MTBDMDQwMDAzNUVCMjdCRjdCM0RFNjQ1RkI0Mzc2OEI1RTBBNEJDMDU1Cis6MTBDMDUwMDA0N0Q5RjVENkRGQ0RGQUNBNDlGQUYxRkU5MDE0MERFNUJECis6MTBDMDYwMDA3Qzk5NzlGQTc4NEVBMjM4OEVBMzhBQTE3RUYwNDY2NjMyCis6MTBDMDcwMDAwRjFGNEU2NkZEMEYyN0IzN0U2RjcxQkRENDlDQTExMEJDCis6MTBDMDgwMDBDQzhCQzk3MjNBQzE5RUZGRDg3MzBDQUU2QzgyM0VFOTZDCis6MTBDMDkwMDAwMjdERTI3NDY4ODg1N0ExNTdENkVFQkQ5OTAwREU5QUZBCis6MTBDMEEwMDBGNzJENDIzOEZDNUU2MkU3QTRGQTBBMDlGMzE5QzRCQjEzCis6MTBDMEIwMDAwRkY1OTNDOENCQjQyNzk5OTFDN0ZDOTRBNUNGODc1N0E4Cis6MTBDMEMwMDAzNEQxNzJERDRCQTQyNDRBREI5NUNFMERENUMwRkIyRUI2Cis6MTBDMEQwMDBFRDI1NDRERDQ0Q0JFREFFRjA4RjdFMDJGQjc4ODVCRENGCis6MTBDMEUwMDAzN0I2OEVERkFCQTU5ODU4QjM5QjhFQkZFM0NBMzFFQTUzCis6MTBDMEYwMDAxNkQ4NTJGNTYwMjdFNDBCMEQ2RTI2NUVDODJGMTk0NjQwCis6MTBDMTAwMDBCRkE3MjgzRjUwN0E3ODA0Q0E3NERERUI1Njg3RkZFNTU1Cis6MTBDMTEwMDAzNkRBM0VGNzI1QTI2MjFCNUUwRjNFMEFFMDRGRTI3NDVDCis6MTBDMTIwMDAwMUJGQ0ZBNUJGQUZFMzc0NTRCNDVGNjJFN0ZDM0VGNjM2Cis6MTBDMTMwMDAwRTE4MEUwRUVGNzQzOUQ5RkZBRURCNUY3OUY5MzRCQTAxCis6MTBDMTQwMDBBRUEyQkVBOTQ4REVFMzY4N0JDODgzODI0QzA0RDY5RUJCCis6MTBDMTUwMDBEOEUyQjUxRjA3RUQwMzcwQUVDRkYwNDNGMjE0N0MzRjc5Cis6MTBDMTYwMDA4OTcwRjkzN0REQzI4NzMzNjNGQzgwRjVBNUJDQkM4RUNFCis6MTBDMTcwMDBFQjI5MTNERkMwMzhENDZGRDdDQUQ5QjEzRkY2RjMzMUZBCis6MTBDMTgwMDBGRTUwODlGOEMzRjg3OTA2ODlGRDgxNzFBQjYzRjNBMDhECis6MTBDMTkwMDA1QzlFQzdFQjBFMkU1RjgwRjlERkQzRUREMTAzQzBFRkJECis6MTBDMUEwMDAzM0Y5Qjc5NDdGODFERjlEMTQ4RTU3RDg1QjBFRkFFOTdGCis6MTBDMUIwMDA3RUQyMzcxMEI1MEQ2NjY5MDhCNEMzNzg2NTI0MjQwM0IwCis6MTBDMUMwMDA5Q0NCQkQ5QkRCNjE3RDE3MzZCQzkyMDlGNDc1NzM1RTE5Cis6MTBDMUQwMDAxMUQyREYyQ0E3NUFFNEEyMjREMjVFQTFBQURFMjI3OEQzCis6MTBDMUUwMDA2RjRDNDJCODJDQUQ3NzQ2MjBDRjZERTlEMDdCM0ZFMTU0Cis6MTBDMUYwMDBFMDMyQ0EzRjU3ODQyNTdFMEYzRjFDNkMzMEM0NkQ0NTJBCis6MTBDMjAwMDBGRURGQjIyNEVBNUZDNzkxREYzN0U3MzFGRDJFRkFBRkQ4Cis6MTBDMjEwMDBFM0Y3NTM0NEZEREEzQzM3Q0JDRkNDQkI2ODQ2MUU5RUQ4Cis6MTBDMjIwMDBDN0IwQkM2OENBRkZCM0YzQTZDNUU0MEE5RDE3RjM1NkFFCis6MTBDMjMwMDA5NjEwQ0QwMUZCNUFDMkY5NTdGMEZGNTJFRDU2QjQ2Nzg0Cis6MTBDMjQwMDA5Nzg2Q0M3NkU5RUYyNTg2NkY3REI5ODQ3NkUyMTVGNTgxCis6MTBDMjUwMDAyM0RCQUQwQkYzQzRCOTcwODExN0Y1MDAxMTdBOEFEMUQ1Cis6MTBDMjYwMDA5NTkwRTc4QjQxQkY4MzFDQUVBNUZBREM2MDM3MzdEQ0M1Cis6MTBDMjcwMDA3RTJBMURGQjY1RkY2MEVEOTdFN0M0RUVDM0FDQjNEQzFGCis6MTBDMjgwMDA4NzY5RTZGNzYxRDZFRDZCNzM2NDAxQkRGM0ZCMzBFQkI0Cis6MTBDMjkwMDBGNkJGRDM2OUNDMDMxNDcwMUE3RTFGNjYxMEYzMUY5Nzg0Cis6MTBDMkEwMDAyOTkxMDM3MDRGNjhEOTRENzQ4RkI0RkRBRkY4RkQ4OUEzCis6MTBDMkIwMDA2N0UxRkVDNDk0MTgxRDc5QUU3NDQ1NTk3RTlEODY3OTU4Cis6MTBDMkMwMDA3RTA1REUxNDE1RjI1MkJBNkM1MzMwQUZBODJCRDVBM0ZECis6MTBDMkQwMDAxQUYzNzhCNkI0QjVENDQwM0I5MTRGMjRFRUJGMkM0QjQzCis6MTBDMkUwMDA3MDZFRkNDRDNDNjYzRjZGOTc1ODVFOTdCRURDODlGMDYwCis6MTBDMkYwMDBGNkNCRTQ4OEYxOUVCRkJGMjg4NEY5NzQzM0YyMDIzODhDCis6MTBDMzAwMDBDRjc2MUU1RjgwRkNEM0E5RjQxQkExNjYxQUMzMTdFQjdFCis6MTBDMzEwMDA2Rjk1MEY3NEJDMEUxOEFGQkE0OEM1M0M5QUVBMzQ5NkI0Cis6MTBDMzIwMDA4RkU2Q0YwQzk1REUzMjI5MzY2RUREN0U5NkJGNTcxNzJECis6MTBDMzMwMDBGQUU0MTBDQkMzNUQ1NDA2RjA0QzI0RDdBREZBOEJEMjhGCis6MTBDMzQwMDBERjNENDA4RkMzRjU1NkI4MTlFOENGNTExNTVBN0UxRDExCis6MTBDMzUwMDAxREY3RTRDQjBBRTZEQjkxOEQ5QUU0QTBFRDdFRkM4MjJBCis6MTBDMzYwMDA1Nzg1N0I3ODFEOTVBMTQ1MzU1ODZGQzc3QjgyNTlGNTU4Cis6MTBDMzcwMDAyNDlBNDRFQkNCNUU1MjdBMjBDRkFGOTE3NDJCMzA0RThGCis6MTBDMzgwMDBBMzQ1OEZEREU0N0U1NjAxM0VCRDY5QTcyMzQ2OTcwNDkxCis6MTBDMzkwMDBGMjEzRDUyMjEwNzg0REJCODdDNTQ1NTAwRTA5Rjk2NEJDCis6MTBDM0EwMDBBNTY3MzJDRTJDODc0QTg1RENBNUYyODFFNUY3MzUzMENBCis6MTBDM0IwMDBCRDQ3N0UyMDQxN0NFOEE0RTc5OENDRkQ2Qjk0N0JEM0ZECis6MTBDM0MwMDA4NEIwQjJDOEZCNjlGQjlGNDM3QjQ2QzA3MzBFOTUxN0QwCis6MTBDM0QwMDBFMEM3NDlGMEZCNjRFQzg3NjUyQTRGOEIyMUVGNzQyNjk4Cis6MTBDM0UwMDA0OTQ2N0ExQjY2NDdGMEY1OTUwREFEOUZEOTRENDI0RUYzCis6MTBDM0YwMDA1NjU2MTAwMkVGMjM1OEYxNDNFNzQzM0ExN0U3N0Q3MDkyCis6MTBDNDAwMDBCNDAyRTcwODMzRjlGQzlGREJCNDQ5RDEyMEUwOEI0NDQ4Cis6MTBDNDEwMDA2QzE0Q0U5RDUyMEJFQTFEMjdFNDgxRDJFRjE2Mjk4Q0I1Cis6MTBDNDIwMDA3MkYxQTdCQTJFMDM1QzJGMjQyRDRCMTYwNjExRUYyRkE1Cis6MTBDNDMwMDAwMURFNjczOUZCNTIwMDBGNDcxNUQ1MDlGNTM1OTAzMEZECis6MTBDNDQwMDA4ODVGMzNCRUU2QkJFRkIzMDNCQ0U2RTc1OEYxQTJEQjdGCis6MTBDNDUwMDAwMUJFMEIwMkMzRjA4NUY3MEJCNDA0RjhEMjg0NUMyMTUzCis6MTBDNDYwMDA2NkI5MTIyNEE3RDhGREU2Q0Q4NzZFMDNGRkY4NzRGNkVGCis6MTBDNDcwMDBDOUY3QjJDMjQ3RTNEMUFGQjA1MzEyRTVFNTlERTRGMjhDCis6MTBDNDgwMDA3OEI0Nzk3OTI3MURDQ0FGOTg0MTA2QUVERjJEMERBNzgyCis6MTBDNDkwMDA5MzhGMEY2RTkwNzMwQ0Y0MjRFOEY0Njk5RUE3MkZGRDIwCis6MTBDNEEwMDA5MkU3RkQ5Njc5NTBGRkM1RjQyNUEzODM3MjVFOUEwMTQ5Cis6MTBDNEIwMDBGNDY1QTA4M0Q5RkI1QzUxOTlFRUIzOTRGNzlGMDFGNDI2Cis6MTBDNEMwMDAzMDI1QTYyRkEzMzY3NzQwMjkwNEJDQUI1REIyM0NEQ0Y3Cis6MTBDNEQwMDA0RUNFQ0EwODIwRkVBN0RBMzRDNEZGMzRFQTgxNzFCQjBECis6MTBDNEUwMDBEMzlENEZGNzVGRTFFQzZEQjcwNzEwRkZERjA3RkZBNkE1Cis6MTBDNEYwMDA5MjA0MTBGRjk1MTZCRDUzRURBRUIzMDM5RDU0M0JBREIyCis6MTBDNTAwMDA3OEQ2MTBGRjM1REU2MUJGREJCRTBBRkVDRjAxRkMwQjIzCis6MTBDNTEwMDBCRDMyMEFGQjk0RTI3RjQyRkUwOEU3OEQ4OUYwN0Y0MTNECis6MTBDNTIwMDBCRUZCOENGMjMyMDVGRUFENzgxNzcyNjA4RkNCNUJFREVGCis6MTBDNTMwMDA4Njc4NzAyM0NCNEI5RUZBRjJCODc2Mjg2N0FEMERFMjcxCis6MTBDNTQwMDA3RDk5M0RFOUVBQUZCMEJFODVENTk3RjU2OTMyQkNDRjlDCis6MTBDNTUwMDA1OEI0OUVENkQzRjI5RTYwQTgxQUNBRUIzNjQ4Mjg0NzM0Cis6MTBDNTYwMDBBN0JEMTY2RTg3RjJCODhEQUNCRTc0NTNDQkFGRTA5REZECis6MTBDNTcwMDBCMzc1M0FFQkZGRjRGMTRFN0NBRjIyRDJDOUZCNTc3NjhDCis6MTBDNTgwMDA1NzQzNzk1RDE3RUJGRjQ3OEY1MzA3QkZCQ0ZDNDhBNEE3Cis6MTBDNTkwMDAxRDdFOUZCODk1QUQ0M0Q4N0Q3MzM5QkRFRDkxOUVGODUyCis6MTBDNUEwMDAxNUY2RUI2NkZENkUzOEU0NEM2NkZFMTJCM0UzRTZGMDdBCis6MTBDNUIwMDA3RENFN0Q4OEVERDNGN0RFQzVCNTAxMEFGN0VCMDY3NUI0Cis6MTBDNUMwMDAwN0NBMEQ1QjUzMzlDQUQxMDQ3RTVBQTVENDVEMDBERjdBCis6MTBDNUQwMDBGOTU0NEUxMEM0M0JBNUQzNDI5NkI3REE0M0E3NTg5M0ZCCis6MTBDNUUwMDBDRkVDMjY5MUVGMDk3OUU3OEIwQ0Y4NUE5M0NGRkMwODMyCis6MTBDNUYwMDBEMTJFMkI4M0IwRkNFNDA3RDlCQkIzMjIxRjM1N0EzRjgxCis6MTBDNjAwMDA5MTIwN0UwMDdCNDRGRDlCMjAzRjc1N0U1MTBCRUFEMzM5Cis6MTBDNjEwMDBGOUU3ODhCQ0Q0MDFGQjJBM0E2RkU5OTc3RkJBMjg5RUQ0Cis6MTBDNjIwMDA1RjdFNEIzRUIzOTM4RUYxM0M3QUYxN0I2MzI0NjgwM0NCCis6MTBDNjMwMDBGRjY0MEYxMDBGQkUwMzE0N0QxOUVDOTYzREYwQkU5MTAwCis6MTBDNjQwMDBFMTFEOTIzRDQxNTZENkYzRjdERkRENDU5RERDMUI2Q0M1Cis6MTBDNjUwMDAyRDc2MUQ5NEMwNTgwOURGNTVCOUFDOEY0NEQzNTI4NzRECis6MTBDNjYwMDBBRjdGQkU5RDQ0NTlGRTA0NUJGRkY1RUQ0QUNGMTY4M0I0Cis6MTBDNjcwMDAxREJGNTQ4ODhGNTlFMzUxQUZENDcxM0MwOUI5QjE5NEFGCis6MTBDNjgwMDBFMzhCRjJGOUU2N0NCQUZFNjVDRTE2QjQxQjk3MTNBNkNGCis6MTBDNjkwMDBENzZGMjQxMThDNkZEQzY4RTFGMzM1RUUzRkJGNjVCM0QzCis6MTBDNkEwMDA0MTFDQ0RDQ0NGNkJFOTcyRDhGOUZBRTBDM0JGQTNGMDNGCis6MTBDNkIwMDA2RjdDQzBFMzA1RkRCRkI2RDdEQ0FFRjE4MTk3OEYzMDRDCis6MTBDNkMwMDBGQkNCQ0NFRjhEODJERjIzNjY3RUE3MDYwNUUzRjdGQjZECis6MTBDNkQwMDBDRkMzNzMxQjcxM0ZEMEU1MUM3QzRCMjdCMUZEMEVFOTI2Cis6MTBDNkUwMDA3RDBCRkZCOUUwQkU2MDMxRjgzNTM2OTZBN0M4Q0I2MjQ2Cis6MTBDNkYwMDBERTRGQkI5OTVFRDZBOTVFRTY3RTEwOEFEQzRGRkIyRjJCCis6MTBDNzAwMDBDMTdDRjg1MkExNDdCOTlDMTFGQzVDQ0FGNUZDMzAzREQ0Cis6MTBDNzEwMDA1RTZCRjU3N0VFNDMzRTk5Q0E0QjU2RkQyREY0QjZCOEU1Cis6MTBDNzIwMDA4NzQ4Qzc0NUZENERGNUY1Q0IxQTVENkY5RkNEMUQwMUJGCis6MTBDNzMwMDA3OEM3RjQ3NjA0Rjk2ODhBOTNDQTZCMUJFMkVGMDBFMENECis6MTBDNzQwMDA2RjFBQzc1QjNCRDdFQjA5RkQwM0Y3RkFCOEZFMDFGNTlCCis6MTBDNzUwMDAzN0YwMUM2MUI4NUYxMDM1RDlGQkMzQ0UzMTEyRDhGRjVBCis6MTBDNzYwMDA0Mzc4NzM1MTdCMkEwNUZDN0RDMkVDRTIzQzMyQUEzQzQzCis6MTBDNzcwMDAxMTJBQjdERkNDMUY0MTZGMkJDRkIwREYwNzc3QjgzMDVFCis6MTBDNzgwMDBCRTIwRTJFQzgyRkY1RTJGNjA3NkY4QjY1Q0VEM0Q5MDU1Cis6MTBDNzkwMDBGRkZEN0NCRTdFM0U3RUZGQ0RGM0YxRkNGQkNGNDRDM0FDCis6MTBDN0EwMDBGMzZGQzg2N0NBOEY5MzdGMDFFN0RGMUQ4Njc4Njk3RkMzCis6MTBDN0IwMDA3QUZDMzhGODI3NUNGRTk0MTYxMEZDRkVDOUFGN0QwQTlGCis6MTBDN0MwMDBFQjNGQTZCMDM4RkJCMTY0RkU0RDY1RTcxNEZGM0JENEU4Cis6MTBDN0QwMDA5RUM5OEY0Q0ZFMTVFRjkxMUZDQjMwQzdFNzQ1M0IzRkZECis6MTBDN0UwMDBGRkJFREZFQTBDNzUxOEUyRTE4MUZCOTM1QTQwOEZGOTM2Cis6MTBDN0YwMDA4Qjc4NUVGQzdBNDZDNzI3OUY0QURGNjE3QzI3MkU1MEU0Cis6MTBDODAwMDA1MDU5NUEzMDBEREE2OTRBMkVDNDY3OUU2MkZBQTJEOThECis6MTBDODEwMDAzRUEwQzBGQjNFM0U3RjM4QTVDMDBGRjc5Qjg4RjYwNEM0Cis6MTBDODIwMDA4QzEzMTg1MDk2NTA3ODlGRTRFN0ZFMjdGOTdCNDAyNzM5Cis6MTBDODMwMDA1REVDMkJENjE1Mjg1ODU0MEFGRDRFREUzQzgwNzI2MzAxCis6MTBDODQwMDBBOEJDNjgwMEU1NDJBMDIwODRGMzlFNUMyQUVBNzlGOTNFCis6MTBDODUwMDA2RTU2MjZEQ0FGQUNFNDdDODI3MUUzMzg3MUUyRTE3MUE0Cis6MTBDODYwMDA2MUYzN0IzN0VCOTRGOEU3RDVBNEMwNjM4QUY3QUVEOEMxCis6MTBDODcwMDBDRkUyOTAyQjlEQTQzMzlGRDY1RkJEM0YxQkZEOERDNjlECis6MTBDODgwMDA1NDdEMDJEMEMzRDc4REUzOUUxQ0QzODdGQkRBNTIzOTg3Cis6MTBDODkwMDAzOEY2QzEzMjNDMTdDNjc4RDFEQUZEQ0ZBMUZDNUIyQjRDCis6MTBDOEEwMDBGODY2QUY5OTZGNjYxNzhDRUUzQ0M1MUE2NzFGMDUzRjk3Cis6MTBDOEIwMDBDRDJGMThDMTBFN0ExMkY0OTcyMzg2ODc1Qjc4N0U1M0FBCis6MTBDOEMwMDA4RERDNTQwRDcxQTU0RjU3MTNCQzY3N0JDQjBCMzJEMjU3Cis6MTBDOEQwMDBENTJEM0Y5MkYwREQwOTYxQzdBREU1NzA0RUI0MkZCODlDCis6MTBDOEUwMDBBNzEwMzBDODE1QjhBNzEwMzBGODc1NzA0RkMxNTg4NjFBCis6MTBDOEYwMDA3QjBBQzZGNjcwNEZDMTU4MEZGNzE0OENGNTcwNEZDMTA0Cis6MTBDOTAwMDA1ODJFMjVEN0I2NDM5QzZFNUQxN0YxNDYwMkVDREU4MkE5Cis6MTBDOTEwMDBCMTNGREM1QjMwOTZFMURFODJCMTNGREM1QjMwOTYzRkJECis6MTBDOTIwMDAyNTBDNkU5RjNFMjQ2M0ZDMUZFRTJGMThGQkRGRjBDMjI4Cis6MTBDOTMwMDA4RkNCQTNCMDZEMTdDQjUzNkI3NzUxRjgwMzFERUE1QTE5Cis6MTBDOTQwMDBERjI0MEE5RkQ1MUMzRTcwQkZDMTM4RUUwN0E5MTczREYyCis6MTBDOTUwMDAwRkY4NTlERDc3RkQ0MkY4NUVCMEVGMjZEM0I4QTQ5QkZGCis6MTBDOTYwMDBDOUUzMTZGQTE3RTA3ODNEMDlBNTgxM0YzNzg1MEMxRTBCCis6MTBDOTcwMDA4Mjc4NDc3MzQ0NTI2MURFMUIxRTMwQ0JFREExRjc0QzI5Cis6MTBDOTgwMDAyMkU2REZENzEwNDNGQzM3MzgzQ0VFQkZBNUMwRTM0M0I3Cis6MTBDOTkwMDBCQUNBMjM3OUM2Nzg0RjhDMUVEQzZBMTRFMEYwOUFBQ0QwCis6MTBDOUEwMDBDNkEzODc1MjcyNkUxQUM2Nzk5RTk3MjE4NjQxRkU0OEE5Cis6MTBDOUIwMDA1QUI2Q0Y5MjBDRTcwMzE2NzgyNEU1OThFOUMyMTUzMEYxCis6MTBDOUMwMDBEMzQ1NEFCMTk5MkUzQ0FBOTkyRUQyMkFDQzc0OTFBRTY1Cis6MTBDOUQwMDA5RDM3MjI3QzMzNkJDRDc0QjI0NjZFNDJCRTE3NzBBRTZCCis6MTBDOUUwMDBBMDdGMDFDRTUzRTA4NTRBODAyRkREMjdDNDhCQURGMEI4Cis6MTBDOUYwMDA2RERDQkZBRDEzRUNGRTMzODVFRjkzMTZGODdFNDY2NjEzCis6MTBDQTAwMDA1NUJCMDM1ODVERTcyQzhGRDkzMTY1Q0ZCN0UwMjFCMDE2Cis6MTBDQTEwMDAzNTdFMkFFMDI4RUMwODExMDdBNUZBMUZFREU5OTg1RjlBCis6MTBDQTIwMDBDRkZDM0Q2QTFGMUMyQ0MwRjMwM0U2RTcwMTI1ODFEQzI3Cis6MTBDQTMwMDBCQzhFODQ1MTNFNUQ2N0IxMEY2RTcwREZBNzgwN0QzMDg0Cis6MTBDQTQwMDA2Q0JGRDQzMjgzRjcwQkFERkIwNTdCOEIxOEUyNTI1NkRCCis6MTBDQTUwMDBGQjQwREEyRjQ1M0Q5MzYxQkJGQjg1OUMwRTdGODlDNjY5Cis6MTBDQTYwMDA5MDI2OEQ0NjZFRjQ3QUI0RkYwMkI5MDU4RUEyQjNEQzJGCis6MTBDQTcwMDAxNDM3OEU2QkY3ODk3NTA4Qjg4OEY5OTM0ODhCOUMwMzM3Cis6MTBDQTgwMDBGNDVDNkNCNUNGQ0NGRUI1RjBDNzQ1QkM1REM0QjU4NUQ0Cis6MTBDQTkwMDAzRjJERkMxODJCOUNFNTczODJFRDQwRkY1M0JEQzI4RkU4Cis6MTBDQUEwMDBFRUJCMEE3RTE3RkVCM0Q1NkYxREJBMTcwMDkwODU3QkNCCis6MTBDQUIwMDAzNzNDNEU3RkE3N0Y5NTkzQkRDQkM3Rjg0RUZDREVFOTkwCis6MTBDQUMwMDA1QjlDMzY1MjNFRTYxREFERTY3QjMwNzQxQkRBODhGNzgwCis6MTBDQUQwMDA4QTAwNjQ1OTcwRUU0NDIwQTg0MkI2NUU3QTY4MDBERThGCis6MTBDQUUwMDBEQUQ5N0FEOThCODNDRkQyRUY5NjkyMUYwQzZDODJCQUE3Cis6MTBDQUYwMDA1MzVGQ0EwMEQ3QTE3ODNFNjFGNzg0MTVERTRGMjlFODVECis6MTBDQjAwMDBCQzE5RjQ2OEIyNkEyN0VGMUFFOEMyNDkzNUQ1QkJDNTJCCis6MTBDQjEwMDA3QzVFRDAxMzM5NDNGNUJGMzE5RUVCRkZBM0JFNzc1MTQ2Cis6MTBDQjIwMDBGOEJDM0I3RTg0N0E0NTZEOEM2N0Q3NTlFMTI1OUVDMzVFCis6MTBDQjMwMDA3MDREQkFFODM4RDgyNzJFNjJEODM3RUE0MzQzNTk4RTY5Cis6MTBDQjQwMDBDMTBCNTVBQjhDRjdBNjQ0QkQwNkVGOTc3Q0REN0QwMThDCis6MTBDQjUwMDBERURGNzUxOENCRDE1N0RFNzcxOEQ3MUY2MTc5MDVGNjYwCis6MTBDQjYwMDAxMDgxRkM1QkM1NDdFQjhERkE2NTg4MEUyOTQzOTUxQjQ4Cis6MTBDQjcwMDBGNjM3OEE3RDAxRDM4MEZCQzlFQzEyODZFRkJGRDVCRUE0Cis6MTBDQjgwMDAzQTJDRjg4MjcxNDM1OTY3RjVGQUY0QjM3QzdERDFCMzNFCis6MTBDQjkwMDAxQ0JGNjREMUQ5MEQzRjZERDFEOTBEM0ZGRDJDNUY1RjE2Cis6MTBDQkEwMDBGNDJDQzcyRjU5N0M3NkFGNEY1QjdDNzZFMzU3M0ZDQjk1Cis6MTBDQkIwMDBENzE3M0RDQkYxNEI5NjlDRERGMEQzOTY5Q0RERjBEMzlGCis6MTBDQkMwMDBDRkYyRjU0NUNGNkVGQ0VBNjgwN0JBMkJBMjA0REU5N0Q4Cis6MTBDQkQwMDAwODc0MTAzNTE4QTAyNjJCRkQxOUZDRjkyMjk1NjA5RUNCCis6MTBDQkUwMDAwNkUxN0U0OTIxRjc0QkI2NkQ2REE5MDcxN0VBMTE1RDg1Cis6MTBDQkYwMDAwOTYwM0M4OEZBRjczOUI0N0UyMjYxRjU4Rjc0MkRDNjNFCis6MTBDQzAwMDAzODZCREI5ODA5NzlGMDVFOTVCQkVCQTJFMzcwN0Y2RjIwCis6MTBDQzEwMDBBMkNFRkM3MUVCQkYxQkI2NDgzM0ZGRkI2Qjk3NTc2NDhBCis6MTBDQzIwMDA5QUNBRDNGQUNDRUY1NzVDRDU1ODY0QUE1RjFFM0VERjkwCis6MTBDQzMwMDBGMkVGRTc0RDM1RkZCQjY0QTE5OTk2RjcyMDZFMjZDNjRCCis6MTBDQzQwMDA3QjkxODUyNEFBNDI3Q0E1RjA2RTVCMTU5QzlCRDlDMTgzCis6MTBDQzUwMDA2N0JFOTBGRUI3NTNDMTdFMUFGRDZCRjQ1RjBBQTkyNzI5Cis6MTBDQzYwMDAzNDM0N0UxMEUwQTY5OEM2Nzc1QkVBQ0ZGNDFFRUFGRTY1Cis6MTBDQzcwMDBCMUYxRUZBMTEyNzg2NDMyQ0VCRDczNkIxRTI2QjFERjI1Cis6MTBDQzgwMDA4OEYxMzk4MUFGM0IzN0RCRDBFNUZENkMyQkMxNzcxRUQ2Cis6MTBDQzkwMDBBQjIzMDExQkJFODNDRUYxNzYzRTI3M0RCMUVGNDhBQkZGCis6MTBDQ0EwMDBGOTNFN0FBMTRFQUEwMDlGNDUxREM0MDZGMUI1RTA0RTlCCis6MTBDQ0IwMDBBMjZBMDRFMzQyNDgyNzhGRThGMUU5RTQxMUUyQUQ4Mjc5Cis6MTBDQ0MwMDA3N0I5MUU4OTEwRkM3N0IyMDQ1RERDRTkwOEU0QzFCOUNDCis6MTBDQ0QwMDBEQUY5NUQ4QzFFMDQ5RDA0ODA0RTUyMjEyRkM4RkFFRUI1Cis6MTBDQ0UwMDA4MDE1NUY2NDRBOTRBRUY1OTFBRDg1MTlDNjdDNTRCMjQ3Cis6MTBDQ0YwMDA5QkMxREQ0OUZGOEU4NEFGRTI5RDY2N0MwNTg4QTFGQzY3Cis6MTBDRDAwMDAxNUYwRjVFOUQ3QzQ5N0UyMEI0NUQzN0MxMENGMjQwMTg5Cis6MTBDRDEwMDBDODkzM0EzODY2ODIwREUwMTFFQzUyRDFGRkFGQTVDRDMxCis6MTBDRDIwMDAwMENFQzEyRUY2OUU5QUMwOTMxODZGNkIyQjg5Q0UzMzFFCis6MTBDRDMwMDBGODdGNDEzNUFBMDE5QzZCRTQ0OTU1OTA3RkJFQTMwQzU2Cis6MTBDRDQwMDA0M0M2QzNGMEIzODM3ODkzMjFFRUJEQTNDQjk2OEM2RjFCCis6MTBDRDUwMDA1NEVGQTM3ODI5MjFFNEJGMzcyRjRCMkJBNkY1M0Q0MTkzCis6MTBDRDYwMDA5MjBDRUY2Q0Y1QjREOUYwRERCMjlFQTdBNDdBRjNCQkI4Cis6MTBDRDcwMDBDQUQxMjQ1QjBFRUUyM0M5NTY4MTVGM0JGQjZBRkM0Qjk0Cis6MTBDRDgwMDBFQ0FDM0UyQTQzNzlFQ0M2NjFFRjdFQzg1MDlGNUU2QkU3Cis6MTBDRDkwMDBGOTc3MDM4OTI2NDFGQkU0NzM1ODFFNjc5QTY2N0VDRkI0Cis6MTBDREEwMDBDNjUxNjE5NjA3MTQ4QzdEMzlFNTEwNkZFMUY0Q0VERjMyCis6MTBDREIwMDA0OThERDQ5MEM4MjZCQUVFNzNCOERDQjFEMjUxRkExREIxCis6MTBDREMwMDA4QjkxOThEQUM2N0MwM0U1NTk0RjlCODJGMDc3NzA3OTk2Cis6MTBDREQwMDA0NTM2MzJCQUQwRTk1RkEwQTc3NDBCMUQ3OTU0MzMxREQ0Cis6MTBDREUwMDAzOUU0MDJDQ0MzMTU3QzI1RDYyM0U2NkYxQjkzOTU2Q0UyCis6MTBDREYwMDBDNzc1RDlGMTNENkM4NzU1NEU1OEQ2RTc4NjYwMjBDNTdBCis6MTBDRTAwMDA5RERCNDcyMjExNUFFRkQwMTk3RjEwQjkxRjdGNzc0QzU1Cis6MTBDRTEwMDAyNzI0MzNGODE1RDZGOTM1RTU1M0U4OUNCRjhEN0NGMjBECis6MTBDRTIwMDBGMDMxRUY5Q0M2RjZGOTk5Q0FERUI1QUVFRTYwRjRFRUNECis6MTBDRTMwMDBEOUNBRTgxRDZFNzRCMzdDMkQ2RDYxQUVFMTVDNzUyRkFGCis6MTBDRTQwMDA5NzUzNTZCODc5RkFCNDZBQTBFNzhCRTQ5NzM0Qzg4RjQxCis6MTBDRTUwMDBCOEZCMzU0NkZGNkQ2MzBFM0YwRkU1QUQ3NzMzRjgwNzNFCis6MTBDRTYwMDA1NTg2Njc0QTJGNkE5NDJFRkRFRTNCREM5ODE3M0NCNTM5Cis6MTBDRTcwMDA4Q0UyMEJGMEZGOTI1OTlFNENFQjMzQzNCMUM4MjIzN0MyCis6MTBDRTgwMDA4MjA5RTA2QUU1RDc0NDcwRkQ5NjgwNkIzOTg1NkJEMUU1Cis6MTBDRTkwMDA5OUMzNTVEMTk5N0M0RTlGQzVERTU5M0MzODQ2NjFGRkY4Cis6MTBDRUEwMDAzRUFGQ0VFMDk4QUVBOTI4N0YyRjkyNEY0NUQzNjhCQjA2Cis6MTBDRUIwMDA2RDFBOTUzNzc0OURCNTFBODNCNzc3OTY5MEUzNjY3OEE3Cis6MTBDRUMwMDAwQUY5MjJFMDVGQzhFMUVGNTVCRDJGQzBCRkYzRTJENkZCCis6MTBDRUQwMDBFRDI0MjAwMTdDRkY1QjAzM0JBMjdCOUE5MDM3ODMwNDA3Cis6MTBDRUUwMDBGMDk2QTYzMUJBMTU3MEVFOUVDREUwNUNBODcxMzg3NzQ5Cis6MTBDRUYwMDA3MUI4NDk0NDAyMzg1QkU5RDUyQTlGRDNCRTI2OUM3Nzk2Cis6MTBDRjAwMDA5REMzRTNGMTU5QTRGQ0FCQzA3OTVCMEE3QjQ3RDkzMURGCis6MTBDRjEwMDA4RUMxRDVFMTFFOEM4MjlDRUQwQURBNzE1RjA3ODIwQTEwCis6MTBDRjIwMDBENjc3OTVCMEZBRkI1MzU2RTY4MEJFRURGMjc3RTYwMDcxCis6MTBDRjMwMDA1REI2MDVBRkNGMDFGOUVFQ0FFMTcyODY2OEVFRENGMkFDCis6MTBDRjQwMDBEOEJEODMxQTc5MkJCRTQzREExOTUwMTAzRjlFNDA3QzFFCis6MTBDRjUwMDBGOTk1MzYyQkVDQzQ3OTI2RDk4OThDNzA3ODQ4OEQwN0UxCis6MTBDRjYwMDAwNzY3OTk2MjkyOTdGOThENjZGOEE2NThFMEVCRkE5QUVFCis6MTBDRjcwMDBGMkUxQjVBRjI5MUZFRTIxNkNGRDc3OEUxN0VGMzQ3NDA3Cis6MTBDRjgwMDAzQjUxM0Y1NURDODQ3MUYzNEMzRUQ3RTY4NURGNjVCRkVFCis6MTBDRjkwMDA3M0JENjZGOEJEQjYxMEU0ODlEQkFFMDIzQzEzQURCQkQxCis6MTBDRkEwMDBBNzk1RjBGNzVBOUNGQ0ZEMTZGNkFFQ0IzNjc4RDc4NUUwCis6MTBDRkIwMDA5NkJGMDNFRkJBMjQwMUZEQjM3NzVEQjZDMEJCMkVGNDc0Cis6MTBDRkMwMDBEQjA1RUZCQTlDMEJGNkI0ODY1RkY5RDI0MjdDN0ZGMEFBCis6MTBDRkQwMDBCMzVBODJGMUYxNEQyOTdGMjVGMUUwNTVENDY1RDY3RjEyCis6MTBDRkUwMDA0MTNERDlGMjBFOUI1OUNGNjVDQ0NCMzM5NUJEQjNDQzI3Cis6MTBDRkYwMDBFRkI2Nzk1NEY2NkVEQkZGMDE2NDY4MDM0MDAwODAwMEYxCis6MTBEMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCREQ3RDA5Cis6MTBEMDEwMDAwQjc4NTRDNUQ5RjA5QzNENjczN0JCQzk2NkIzQjk5MjRDCis6MTBEMDIwMDA0MDEyNEU0MjA4MUIwODYxODEwNDgzODI5RTg0NDA2MzQzCis6MTBEMDMwMDA0RDcxNDM1MTUxQTg4RDQwMzE0MjQ4Mjg1RTFBN0ZGNTA5Cis6MTBEMDQwMDBDOTQyODI4NDE4MzRBMDU4NUEyRjJDMzc4QkI1NkFCNDQxCis6MTBEMDUwMDA1MUE5MjJERDIwNTJGQUQ1OTY0NTUxRjE1MkJGRjU1MjIxCis6MTBEMDYwMDAyRjQwMjU4QTE3N0MzRTVCRkY3OURGOTlEOTNERTc2NDI1Cis6MTBEMDcwMDAxM0MwRTJGRkY4RkRGMUMxQzk5Qzk5MzM2N0U2QkRCRjVCCis6MTBEMDgwMDBFRkJDMzMyMTg0OTA2RkU4QkYwNENGMDQxMkY0MTBGQzhFCis6MTBEMDkwMDA4MUJBNDMzRDk3MDRFREQxRkEyM0MzRUIxQzZBM0EyMUQwCis6MTBEMEEwMDA1Njc3QTVFMTM5RjFGNzExNUYyMjU2MkQyNDgzOTA1NDZDCis6MTBEMEIwMDBERTM2NURCRUQ3MUUyRTI2NjQ0RENEQUMyNDUyMENGRDRGCis6MTBEMEMwMDBCNDUwMjY2RDRGODA0Njk1OTBENTU2NkY5NjhGM0U0RjQzCis6MTBEMEQwMDBBODU5NTQ0MzVDODRBQzZBMjEyNDM4OEE5MEY2MTYzQkU0Cis6MTBEMEUwMDA5NjJCNzI2Q0RFNjAxQTIxNzdCRTJDN0JFM0U4MkIzNjIwCis6MTBEMEYwMDBDREE3Qjk2OUZGREU5QzVCMDlBMUNGRDdCODA5MTk5MjBBCis6MTBEMTAwMDA0NzlGQkI5NzExOTI0Rjg4NDIzRjIwRDFCQTUyMzNFM0Q5Cis6MTBEMTEwMDAyMzUyNDI1Rjk4QjM4NDkwNDlEMUY5QUNBOUIxNzg4Mzg2Cis6MTBEMTIwMDBBNTg0QzQyNTNCQkRGMDdENTJBQ0JDMTNBNjZENkVGQTQwCis6MTBEMTMwMDBERjM3RjRGRDZGRTBFNzgyNjgxOTQ3NTgzQkFFMTNCRTU2Cis6MTBEMTQwMDBBM0VBRUEwNEJFNjc2QzZGN0U1MzdBNzRBRkFFN0RBQzFGCis6MTBEMTUwMDA5QTk4RjYzRTJDRjYxQzcyQ0UzNzMyMkRFNTc5NDk3NTM5Cis6MTBEMTYwMDA0RTVBOTZBNzEwOTJENUZGN0I1RkI2OTA0N0Y3OEU0NDM0Cis6MTBEMTcwMDA4MDEyOTIwRTY1M0QwMTc4MkE3Q0NDRDVDOUIzRUNDNEVGCis6MTBEMTgwMDAxOTg1QjM3OEJFQ0FDREUwMUIyN0QxQ0FFNEZFRTNCNjQ5Cis6MTBEMTkwMDAwMTVDRTNBMjc1ODUxMEFEMUJGMDkxNUQxQUIzQkYyODQ5Cis6MTBEMUEwMDAyOTA2MDgyOTIzQTRCMzI1NzhGMDNENkJGNEI5NzMwQTQ2Cis6MTBEMUIwMDA3RERGRDlCRkZGNEM1NUM2NzlDRjU1NTUyQzlENEE5MDgwCis6MTBEMUMwMDBCODY5QkY0NDJGN0Q1RjA3MTdBNzc2NjZERkE3M0ZBNTI1Cis6MTBEMUQwMDA2OTc0QkQyRTRFMzdFNDc3OTIwMjc4QjVGMzdBODI1NEEzCis6MTBEMUUwMDAzNzU3MkQwMzdDRjkwODE5NDFGQjk1NkJBNEFFOTg3RDQ4Cis6MTBEMUYwMDA0RjEzRUY0OTUwMkFFNDFENDFERjc5QUM3NEQzNzYwNjEyCis6MTBEMjAwMDA1MjI4NjlCQkRERDhBRTY2MjBCQzcwNUMyNUZBQkVGNjNDCis6MTBEMjEwMDA4RDM0RjBCQ0JGQUIxMkYwRjhDRUM4NDFEQTZEREU3QUM3Cis6MTBEMjIwMDBFMEE3N0VDRjU1OEI4MDYzNUYxQTg1OUJDQ0Q3MUIwMzBECis6MTBEMjMwMDA4RTZEQzBERjAyOEVCMjkzQzFCMTREQ0FEQjE5QTZGQzYwCis6MTBEMjQwMDA2NkQ1NUM1RThBMTE1MjkxQTY3NjAzNUZCNjY5NEVFNDlDCis6MTBEMjUwMDBDQkI2QjRFRTUwMjVBRDlGMjhCNTc4NjFBOEM0OTE5NUEyCis6MTBEMjYwMDBDODhGNkQ0M0Y3MUQ1RTA4NzA5REI5RkZDMzZEMDgzNTBCCis6MTBEMjcwMDAyRDU0MjVFMDRCREIxMzNERDVBMTJBOURCQzExRjg4QTI2Cis6MTBEMjgwMDBFN0JGNzc4QzdEMjBCQzkyOTZBOTE3Q0YyMzZFNEEyQUUwCis6MTBEMjkwMDBDRTIxMzYyMjUzQkMzODQ2NTZEOUVCOUM1MUZDRDhFMEZGCis6MTBEMkEwMDAxN0ZBM0MzRTZEQzY0NzMyRTVGQjc4QUYwRThGRjBFRkM0Cis6MTBEMkIwMDAxQjU2NDc3OEQwQzVEQkIyNkZGREI5MDQ0NDkxMTlFOTFDCis6MTBEMkMwMDA3NzAwRTZBM0E4QkVFOEZDQzhEOUM3MTdDOTRFNDNCRTdECis6MTBEMkQwMDAyNzhBMzcxM0U0NjU3RjdBRjczM0JFRTdGRDA2RTYwQjRFCis6MTBEMkUwMDBENjZGQkE1QzkzNzkxNTg1Q0I5QTE3OTg3QzI0MUUyNjQ1Cis6MTBEMkYwMDAxNzZDNzY4NkNGMzU0NDYzRUREOThBOTdCRTQxRDY2NEU0Cis6MTBEMzAwMDBBRTQ0RjlEMUFFQ0U2RjA3RjlGOTc5QTY4NUM4MTIzQ0MzCis6MTBEMzEwMDA1RjZGMDdGOUExOThFNDQ3QkFDRjYyRDAwNzQzRTZDNDJDCis6MTBEMzIwMDAxQkU0RkU5QTgyNTkyOENGMDY5QTY3NTY5REYxRkQ2MTRCCis6MTBEMzMwMDBGNUM2Rjc3Mzk2QTUxOEVBRTIzRDZCRTY0NTJGNTVBNUFECis6MTBEMzQwMDA0NkVCQUI5NDNBM0JDODkxNUIzM0Q3NEI3NTNBRkExRTI4Cis6MTBEMzUwMDA1MjU0RjczQUQwQUJBOERCMzI2N0UyN0I3MTM5QTUzMTgyCis6MTBEMzYwMDBFN0I1Q0ZBM0JEMDU3MkEyNUQ2NUYzMjZFRUQ4NzBCRTBBCis6MTBEMzcwMDA4QkVCQTFCQkI5MUUzQUQ1M0EzN0YyRkVCRkU2RkRFRjAzCis6MTBEMzgwMDA2RDcxNjMxOUMxNjdDMTM1MDZCQ0FDQ0VBMkYyOUE4RTJECis6MTBEMzkwMDAwN0IwRDc3RkZGMjlCNUVFNzM5ODVGMTRDRjk2Mjg3QzJFCis6MTBEM0EwMDA4MDY5OEIxNzVCODA1RkM1Mzg2RDU5RjkwRUMwREJGQTU5Cis6MTBEM0IwMDBFQUMxRTcyN0Y0QUFFODY3NTU3Q0M0NEJERkIzMTJBM0EwCis6MTBEM0MwMDAxQ0I3QTU1OTBDRjg5ODkwQzdFNUM2QjY2QjBDREZERDA1Cis6MTBEM0QwMDA5QjNDNjM2MzFFQTVBQkY1ODc2NDgyNzRGNzNCRTNGQTVECis6MTBEM0UwMDBGQUQzQUI3MTFERUIzM0Q5RkEwN0E2NkZEM0JBQTk0NEIwCis6MTBEM0YwMDA4OEQwMTFENjUzNENGNUExQTZGRUY5QTZGNkQxQTZGNjEzCis6MTBENDAwMDAwOUE2RkFCOUE2RkU5NUE2RkEwRjRERkQ2Nzk5RUE1NzQ3Cis6MTBENDEwMDA5OEZBQ0YzN0I1MkYzNkI1MkYzN0Q1RkY4RkIxN0YyOTgzCis6MTBENDIwMDBDM0YzRjVFMkQ5MjBGMjA1RjRCQUI5QkZBMjY4ODg1RjY4Cis6MTBENDMwMDBBMUU3MjM3Q0U1MzZGMkUzMEY3MjJBQjQzQzY2NjcxODU1Cis6MTBENDQwMDBGMDJCRThGMzc0RjFCMzlBQ0FCODEwRjA5M0EyM0E1MEYzCis6MTBENDUwMDA5OTk2MkYyNjdBN0E1ODlGOTk4RkZBQTM4RDRFMEJGNUJECis6MTBENDYwMDAzN0I3NUY1MjA0MUQ1NzczRkI3MENFMTIwMzFERjVFNkVDCis6MTBENDcwMDAxNDNBQzA3RTI0Q0UzNDk0NEJBN0EyMEI4OUE0MThEQkE3Cis6MTBENDgwMDBCNUExRDFGNjdDRjhGRkQ5QTU4QjUzRDM3MTgwRUJERDI0Cis6MTBENDkwMDBDMUU3MkRFNEMwMjNDMzdERDcyMjNFMDJENDlFMUUxQkNDCis6MTBENEEwMDA4NTkzMUFCMUE3RTlDNzI4REY2RDQ5MjM4MTM4QUFFRjEwCis6MTBENEIwMDBCNkY4MkQ1OEZGM0M5MzdFMDhFQzk1MkFDNjg3MjM3ODUyCis6MTBENEMwMDA3RjQyQzIxMjhDMjNFNkQzQ0VFOTY1MURDODI5NUFERUZECis6MTBENEQwMDAwMTcyOEE5NkI3QjU2NDYyQjk3QUFEMjU2QjIxOEM1NzEzCis6MTBENEUwMDA2MzQzM0NBNThFQkJENUFGNDA1OTU5NUUwNEZBRkJCNkU5Cis6MTBENEYwMDBCMTNCMzQwQkFEMjc5RTk0NDk3MDIyQjUxNzRBQUUyODM0Cis6MTBENTAwMDA4N0U1MjQ0QzlGOUZCOTE3M0VGNzM1RkRDRTI0RTA0RUFBCis6MTBENTEwMDA4MjQ2QzZFNjJBMTJCMDhFMjM2NEVEOUVBQzFGN0FFOERFCis6MTBENTIwMDBCODZBODFFMjc1NDA1QkIxNzc4NTkyODZGREZDRTAzNjkyCis6MTBENTMwMDBBODRBREZGRTExQjQzRUJDQzA4MkY2ODVCNUJDQUYwNTdCCis6MTBENTQwMDBFQzc3MzFFRkI1M0ZBNDg0NEIzQkU2NTU3QjJEN0UwQTRCCis6MTBENTUwMDA4MjE1QzNFQjdFMDU3MDFBREU0OTJDMUFBREFCN0U1NUUxCis6MTBENTYwMDAwMkI5RjY0NjlFOEFGMjc2RUIxRjI4NDM4RTgwMEZGNUFECis6MTBENTcwMDA2NTgxOUVGRDYyQUQ2RDI1Q0M3MzYwM0MxMUQ5NTJGRTc0Cis6MTBENTgwMDBFRDRCMzEwRURBOTk0M0YxQjkwNkY0QUMyQTQ4NDI3NEY2Cis6MTBENTkwMDA5NTFGNzZDMTNDOUQzMkFCM0Y5Nzc3Q0NCN0IyMzg1QUQ2Cis6MTBENUEwMDA3RjJDRUY5ODdCMjU2REVGOUM5ODZCODE3NUU0QTVCOTc2Cis6MTBENUIwMDBCNDQwMENCQTNBMENGMjE4RDZCNzc2RDE3MEJEMUUzNDBFCis6MTBENUMwMDA5NzZBMEQxRDc3MDgyRDhCNzkwOUI0NzYwRUMwOUY5NzQ5Cis6MTBENUQwMDAyQTdGOUVDOUVBMDczOERDRDQ2NkRFOUVDNkNBQjNGRDQwCis6MTBENUUwMDAxREYzRjhBRkU1Qjk4NTVEM0E5NEZCOEZDNUNFOEM0MTRDCis6MTBENUYwMDBFREQzQzM3OTY1RkRFRDUzMkFFODg2MDI5RDZGQjI3QUJCCis6MTBENjAwMDA4NzVBRThEODlCRDZEQTg4OUZGMkQ0QTYxQzgyN0VBMkRECis6MTBENjEwMDA3RjhEMkRCMDFERjg0MzUxODc1RUFBQjNCQjAyNkIzMkRDCis6MTBENjIwMDBBRUQwRThGQjAxODlDQ0QxQ0JDOTdCMzk5Q0VGQ0E5NzNFCis6MTBENjMwMDA3MDdFRDNFNTYzN0U5OUQyRUYyNjNGNDEzQjZCMTM3MTM5Cis6MTBENjQwMDAzQkMwMUU4OUUwREJGRkI5MEZFOTkwRTNCQjJBQkY2QTRDCis6MTBENjUwMDAxREQwMjk1OUM4RjQ2NjdFNTQ5RUFENTBFODM4OUI2MUIwCis6MTBENjYwMDAxQzVBREZEQzZFQzFGOTZEREE0NUY5OTc3RUVBRjM5QjRGCis6MTBENjcwMDBERkIxODBERDNDOTYwNDJEQjBCRTMxMjQ4MEE1ODcyQzFGCis6MTBENjgwMDBCMzAwNTBCQUI5MUVERkM2RjlCNzkwRjIzN0ZBM0IyMEEzCis6MTBENjkwMDBGQTY4RkJBNUMzRUJCRTA2QkU0ODIyMkFENjU1QkYxQkJGCis6MTBENkEwMDBFOUE5NzE1NzcyNjUyQ0ZCQzA5NjZGRTE3RTI2QTk1N0Q4Cis6MTBENkIwMDAyNjcxM0Y4N0MxRDk5NjVGRDYxRkZFNTZCMjBDRTE3RTE4Cis6MTBENkMwMDA5M0M3NjdDRjA3RkY2RUU3QzFFMDMwREFGNEM0QUI0NjFCCis6MTBENkQwMDBCQTA1QThDQ0QyQzk5RDFDRkU5RDI0QUY0RjkzRTkzODUyCis6MTBENkUwMDA3QjcyRUI5MkUxRkRDNkZBNEZGNjY1QzBEMDdFM0ZCRTdECis6MTBENkYwMDAzRjM5REY4REZEQUUwODc2NEY4NzYxQzY3OUMzOTU0MDBGCis6MTBENzAwMDAwQjYzQUI3QkY3MDBDOThDRDEzNjgzOUI0MTNDRTUzRjczCis6MTBENzEwMDBERjkzQUFDMjNDRUE4NkMyMzg4NUExNzAwNTkwOEZCMzE4Cis6MTBENzIwMDBGRTYwMzAwM0U3NzNCRTA1RTg2MjA0Q0M4N0QzNDcyRDYzCis6MTBENzMwMDBEMjk3OEE3NDIyRjAwREY0NTA0QkVCNTczNDMwRjg1MEU2Cis6MTBENzQwMDA4MzEwREI4OUUyMzZDQzdGQ0IyQTRBMjdDRUZFNzQ5MjQ3Cis6MTBENzUwMDA5QUNGRUMyMzZGMTQ4RUM0M0FCODdGRTVDRDhGNDFCRkNBCis6MTBENzYwMDAwMjJFQjM3QUJDNTYwODE3Rjg3RUU3NUUwNTNFRDBDQzkxCis6MTBENzcwMDA0MERGNUUwNzdEREU5RTVCNzcwRUFDQjM3NEEzQUYxNTEyCis6MTBENzgwMDBFOENGQjkyQkU0ODc3RTAyNEVDRTI5MjE0REMyN0VEQTQ2Cis6MTBENzkwMDBCOUQwNkZEM0NEOTU5NUE4MTdCQTA4RkE0QjQyN0Y5QUE2Cis6MTBEN0EwMDBGMTZGOUQ2MkI0RjcwOEU5QzJGNThDRUMzMkRBRTk5NEM2Cis6MTBEN0IwMDA4RTUxOUZGN0EzRTM5QjIzNzQxQ0FGOEY0QjA4RkQxMzdGCis6MTBEN0MwMDBFOEI0QzQ3QkMwQ0ZBMEZFMDc4RTM1ODAxQzc5ODBFQjA3Cis6MTBEN0QwMDAyNTQxRDdFMjc5MDE4OTFENjdCODMyM0ZFMkNGNjZDQTk5Cis6MTBEN0UwMDA4M0MzRkJDQUZDMThGRUFDMEJGODYzMDRGMkNCN0NDMDBECis6MTBEN0YwMDA4NzlCRjQ2MUZCRjA5QjhERkNEMkI4RjM5MzdEQzNFODZCCis6MTBEODAwMDBGQzlEQTVFQTA0QzA4RkY4N0UwM0M3MzdBNUUzQzU0ODkxCis6MTBEODEwMDBDNzFCRkJGNjgxNUUxQjdFMzNBM0UzNkJDMUQ2NDg4RjJCCis6MTBEODIwMDBEMkUzNEQxRTZEMjk3QzQ3RDA5OTc5M0Q0QkY4N0FEQUM5Cis6MTBEODMwMDA3MzdERDdDMjc4NTc2Q0VDN0VERTgxRUZGOUFFNDczRTQwCis6MTBEODQwMDBEQjE4MEEzQTQ4MTRCRUMzMzk3Q0UzNkU4OUUwRDkwRDZGCis6MTBEODUwMDBGMjYzNTY4REY3NzlEMENGM0U4RjdCM0E5NDMzRDVCRUE1Cis6MTBEODYwMDAzNjMwMkRFNkQ2Q0IwNkJCQ0Y4QzVGNEE1RkFENDg1RjI2Cis6MTBEODcwMDBDNDM3NEQ5MkMwOUFFREI2QTJGRTFDODA2RUEyN0FEMzM4Cis6MTBEODgwMDAyRkU4RkVFNjUzQzhFRDNCNjJFMUUxNzRDNzNGOTlFQjM4Cis6MTBEODkwMDBCQjFCREU0RkE5RjYxMUU0RDNEMzlERDc2OUY2MTM3MUY0Cis6MTBEOEEwMDBCM0E4MUQxQkIwRUJFRDU4NDFGNzFERURCM0QwNEYxNkRCCis6MTBEOEIwMDA3ODEwQ0Y1N0I1Q0ZBQUNFMDMzQTc3MkFERTU4RkU0RjVECis6MTBEOEMwMDA0NERGNzAzQUJGOUZEM0Y5N0E2RTdGNzU3MUZCRUJGNjM4Cis6MTBEOEQwMDAxNjE1RTU3QjY3OEIwN0NCOEUxNjJGOEY4Nzk2NjNCOTVFCis6MTBEOEUwMDBBQTQ1QzM3RUYyOUE0RjJCRDA3RkJGOTk2MDVDNkI2NUNGCis6MTBEOEYwMDA0Mjg5MTQ4QkFFRjJGQzQ2N0I3Rjc4QjMxMUVGQTlENTM5Cis6MTBEOTAwMDA0NkZGM0I1OTZGMkZEMzdGNDlFNUY5ODZGNjQ0RUY2ODEwCis6MTBEOTEwMDA0M0ZCNjlDNDhCMEYwMEREREJEMjJBMERGRDQ4RjgxM0YxCis6MTBEOTIwMDA4MzdEMkJFMDM4NUQ5RTg3RjE2MjBBNEZCNEFCODUzRDY1Cis6MTBEOTMwMDAyQkRBMDlBOUMzNzhBRUQ1RTQ2Nzc2OUFFQ0Q4MEU4MEM1Cis6MTBEOTQwMDAyM0MyOTdDMUIxMEJFMDg4RjAyREU3RjBBQzY2N0UxM0RGCis6MTBEOTUwMDBGNzdCRTI4NURGNTNCNDdFQ0U3QzhDOEIxMDk0NTcyQjAzCis6MTBEOTYwMDA3MjZDQTg5RjNCRjI5OEJEREQ4RjdFMzI3NUYyOTNGMjA4Cis6MTBEOTcwMDBGQ0VBMzU0QzlGMEI3QkZDRjk5QzU3QUFDMUFFREQ5MkFCCis6MTBEOTgwMDA2OTQxMzlCOTI1NkQ4RjY3MkJENkUzQkQ0QzlGRkFCQjMyCis6MTBEOTkwMDAzQzE0N0Y1NjBGOEY1NzUzOEFDREEyRUI0REU0N0NCM0Q2Cis6MTBEOUEwMDBEQTRBMzBGRUREOTFFRUY0NDIxQzJDRDFCM0E4MDZGQjFFCis6MTBEOUIwMDA5OUJFNEJDOENGODlERUZGMjNFRkQ1MUJFQzBFQTI1Q0NFCis6MTBEOUMwMDA2MzU4Njc2NEZFQTUzNjM2OEU0NDI0MTgyN0E1RDg2NkFBCis6MTBEOUQwMDBDMDlGOURFOEVBNzkzMDVGNUIxNDhGNzlCMDVFOEUyNzM3Cis6MTBEOUUwMDA5MzlEMjNFMjE0NjYzQ0I5NkI4Q0ZBNjY3NTExN0JCRjdDCis6MTBEOUYwMDAzN0U3MDFDNEJCMTlCRUFFMkEyM0ZENzY3MEJBNjg0QjY3Cis6MTBEQTAwMDBERjgyN0M2OEVFNkYxRTlGNEM4OTM3Rjg3RjFEOUVDMUI4Cis6MTBEQTEwMDBFMzI0QzI5RjE2RkRDMDhGNzZDN0U4NkZGNkEzQ0Y4NkJBCis6MTBEQTIwMDBCRkVFQzZFRjE5RjU1RDBDN0Y3REQyMDg1RDNDNDlDMEE1Cis6MTBEQTMwMDAzQjgyMDcxMTVGRTQ3RTk4ODg1QjhCRjExNEMyQzZDM0ZBCis6MTBEQTQwMDAzQUM2QjdGRDI4RkY3RTk5RTA0MjNGQjJDMDY5MEI4MDFECis6MTBEQTUwMDAyQzJDQTBGMzAwM0E2RUZCNTU0MjYwMjVBREFGNEI5OERECis6MTBEQTYwMDBEOTk3NDRFQjA1REI2NDE1REI5REJFQTExMDY3RUVEREE1Cis6MTBEQTcwMDAzMDYzNjg5ODdFRjcxRUE5RUVBMjExQkEzOERDQjZFNENFCis6MTBEQTgwMDAxQjMyOTkzREEwQkMxM0Y2MDA5MzRCRThFN0ZBRDc0RDQzCis6MTBEQTkwMDAwQzY5NjA4RjE3MTFFRjc2MDI1RTMwNkIxN0Y0NDRGNDU3Cis6MTBEQUEwMDA3NUI5N0ZGREIzMTE0Q0VGNjZDRTI1Q0JCQTYzRTA3RjJECis6MTBEQUIwMDAwRDZGOEZDQTcxNUYzQ0NBNkIyRUM3MEIzOEJDQjY3NzJGCis6MTBEQUMwMDBDRDhBRDdDQjcxRERGM0E0NTg3NDc1QjZFNDc3MUJDODQzCis6MTBEQUQwMDBFRjUxRjA5RDE3MzVENERCQTU4NENCRUY0N0M4Rjc1MTQ0Cis6MTBEQUUwMDA3RTJGQ0JBQjVCM0RBMjJDQzY3RTlGMTI0NkY5M0Q1MUVCCis6MTBEQUYwMDBENURBMDFFRkU5RTBFRjAxNUU3RTRBRjExMjYzMURDRjU2Cis6MTBEQjAwMDA4RTYwRjZDREY3MTUyRjQyQUY2RUVGN0E5Q0UxQTU1OEU3Cis6MTBEQjEwMDBFMEU1NzYxMkNCRkZGRDFFRTBFNTY5ODA3QjNGQkQ0QTY0Cis6MTBEQjIwMDBDMkI4MEZGQjQ1QjZGNjBDQjQzRkE1NkFCQjAwN0YxMTI3Cis6MTBEQjMwMDBGQzVDMTY5QjZGRkVGOTFERTNFNzdFRUVCN0FFRTdGOERGCis6MTBEQjQwMDBFOUUyRjFGMURCMzk3RTNBQjlCRUVFRTBGODY5RTdGQUQ1Cis6MTBEQjUwMDBGQTU2QzA0RkRDOTlGM0NERjA2NjIzN0U1MkFCRTM0RDBECis6MTBEQjYwMDBGODMwRTIyN0E5REM4ODlGNDRBRjExM0YwOTlFRDEyNkY3Cis6MTBEQjcwMDA3QzE4RjE5MzVFQTAyMkZDRTIzMjhENzhFQUM3MzdBN0M5Cis6MTBEQjgwMDBGMDU3RDI2MDlDMTg3NjcyNzY1REE4MDJGNkI4ODZDRTAxCis6MTBEQjkwMDBFOUVFQjVDMjIwQkVBRTBBMjhDNTdBRUYzNUY5QTVBMkQ2Cis6MTBEQkEwMDA0QzJGNjA3OENEOUMxNjFCRUYxNkRFMUVDOEQ3QTQwMjQyCis6MTBEQkIwMDAzRDlERkMyMDM2MUZEQjc5RkY2M0FBMTY2N0U4N0Y1MTg1Cis6MTBEQkMwMDBFQ0ZFMkVERUZGRjVFMTVBQTJCRTNGRkRCOTRCMUVDNEFFCis6MTBEQkQwMDA1RjMwQUYzRjQxRDJEMjBCNzAxREVBQ0UzMEM1RkRCNkVCCis6MTBEQkUwMDAxNTZDMUY3MjlCNDNFRDg2RkQ3Q0ZGMEFBNzc3QkI4QUVECis6MTBEQkYwMDAyM0Y5RUNFMDFGRjE3MTg4M0YwOUM3Q0RFNTlGMTlFRUNECis6MTBEQzAwMDBEQ0ZGMTVFQ0ZCRTUyREM4MUU3QTM1NkRDRjVCOUU3OUU4Cis6MTBEQzEwMDBBNDhFOTZBMzBCNDZFMDNDRjNFQkJEN0IwMENFQjI2QjJCCis6MTBEQzIwMDBDRTUwQjY3RjNDQ0ZGREZFMTg0QTZBQzE1NEU5MUI3MDQ2Cis6MTBEQzMwMDBCOEREQjFGN0VENDUyOUY0Mjk5NTgzNjgwN0QyODkwNDQ5Cis6MTBEQzQwMDBCNjUzM0E4RDUzODg5Mjk4MDJFQkQ1NzA1RDU2QjA2MzA3Cis6MTBEQzUwMDA2NTU4NkYxN0Q2RTM0OTM3OTY0RTEyNjJGQkQ3REMxRjIzCis6MTBEQzYwMDAzREFGMjAwRkM3NzMxMzM3RkFBQjI5QzQ4QkE1RTA2MzEwCis6MTBEQzcwMDA3QjFBNTFEMjI3RTBGODZENzExMzA4MkFGQ0YzQzA1RkJDCis6MTBEQzgwMDA3NTY2NkZFRTAwOUY0NkEzNTA5ODg0QUM4MkYwOTBFRUNDCis6MTBEQzkwMDBEQTg3RUIyNzFFQTJCMjc4REJDRDZFQ0M0RkY4MzM1RDZFCis6MTBEQ0EwMDBERjk4RDM1RkRGRTlGNkZCRDJFMTJBMjE0OTg0MzREQjM4Cis6MTBEQ0IwMDA1OUY5OEI3OEQ3MTYyOEJGNzRFNDA2MjA2OEE1OERBODdCCis6MTBEQ0MwMDBGQjMxRTBENTVGNDlEMEZFRjBCRjk1MTA2OEM1QzkyRTg1Cis6MTBEQ0QwMDAzQjg3RjkwN0E3M0RDRUJDQjMzNENFQ0ZDRUQyMzg4RDJCCis6MTBEQ0UwMDAwNUU5QTcxRUU3MzZGODc1MzJFQzYzRkE5NjQzRkZCNkVFCis6MTBEQ0YwMDBFNDQ5Njg3NzhBRDIwQ0Q3N0QxRUVEMDY5ODlGNjI3RjMzCis6MTBERDAwMDAyOUY3QkRENEE4RERFNjdDNTM0MkJCQUQ0RDBBMTI4ODhECis6MTBERDEwMDA1M0ZBREY5NkQwQkUyMkM1MEM0RjRFOTU3OEYyQzY0NTE5Cis6MTBERDIwMDBDNzcxN0E5NzBENjdGMTJFMTZFRjU5RjFGNzVGOEMwMkU0Cis6MTBERDMwMDBGQkZCOTcwOTMzQzM0OUY0RkRBRDA3QTk5RDA3NzkzNDZGCis6MTBERDQwMDBEM0JDQUZENzUzN0E0QTRGQjU3OUI3NTBGQTQ5RTU3RTdECis6MTBERDUwMDA3MkRDREE0OTA3RUFFOUFGOUY4QzYyRkNCREEzNjVCRkJDCis6MTBERDYwMDBCQjhEMEFBNDQ0QzU3QkUxMDRGQTlFOTNFRkRGMTJCOTkwCis6MTBERDcwMDAyNjBDNzY2M0UyMjQ0NTg1M0Q4RTIyMzk1ODBERjMyNTI1Cis6MTBERDgwMDA0RDE2MDI3QzcxNEY4MzcxM0ZCN0IzQjAwOEUxMjJFQUIwCis6MTBERDkwMDBDM0Y4N0UyRTI5NTVGQTIyNzkzNkQ0OEVERjU4QzBGMzg3Cis6MTBEREEwMDA2QTVDQzQwNTc2QTFGMjZGMkQyOTU2REU4MzI4QzVGQzc2Cis6MTBEREIwMDA0QUQzQThERTRBODJCODIwRTUxNDVBOTY3NjA2MzFGOThECis6MTBEREMwMDBBM0QyMUJCNDgzMURCQjIxNDBGQzM2MEFBNzA3RTdGQjg3Cis6MTBEREQwMDBBRTgxRjEzQUNCN0QwOTYwOTc2RjM4MzRFQkEyQjE3NDE0Cis6MTBEREUwMDBERUExQjBFMjA1MTAwNDQ3QTVFMEJBNDM5QUJDMzY4MTMzCis6MTBEREYwMDAzRURGRjlBNkM1MERFQkRCQ0FERkVGRjQ0OUM4RkZGNzNDCis6MTBERTAwMDBDQzIzMDEzRjg1QzdENjg2M0Q3NjE5RUNERTkwODU4QzA0Cis6MTBERTEwMDA0NDNCOTczQTVDOTNCODI4NTQyMTVFQ0JGOEZFOTY1MTY4Cis6MTBERTIwMDBFOUY4QjAyN0I0M0MxOUUwQjIyRUUxRkM5MDQ2QzdBRjQ4Cis6MTBERTMwMDBBRDY2NzFFNzE5NzJGNkYzMzA2RUE4RDM4NkY4NDlFNzNDCis6MTBERTQwMDBGOTQ3MTJBOTQ1RkIzOTY1OUVDRTVFQTZGRjEyM0I5OUE0Cis6MTBERTUwMDA1RjE5QkE4RTYwREU1MzUyOTlEM0VCQTdERjdCMjJDQ0Q5Cis6MTBERTYwMDBGNjhERUVBOTY2NzE2NzE3MDlFMkY3NjdDOEJCMUMxNjQ1Cis6MTBERTcwMDBGQUJDQTc1QTcxMDMzRDI1OTlFQzczMjc4QzQ3NDlBRTJDCis6MTBERTgwMDA2NzIzMUJDRjM1OUU4RDk3NjhDQTgzQjI4Qjc5QjlFOTFBCis6MTBERTkwMDBCQzI4RkVFNDQ0MDVGMUVDQUUzNkU2NEZCOTRDRUYzOTUwCis6MTBERUEwMDA0RERGN0I1OUUwMzk5QjE0MDI5RTRGRjg2RTk4RjgxMkIzCis6MTBERUIwMDBCNjdBRDU1OEY5MTM5RDJEMjQ1NEE1Q0JCNzcwMEUxMDAyCis6MTBERUMwMDAzRkZDQjI5MEY5MDlCNkFDQkQ3Njk4RDcwOURGMkI2OTUzCis6MTBERUQwMDAxMEVFN0FFMTVGRkJERUJCMDNDQTdGRkY1NzRGMTM1RDk1Cis6MTBERUUwMDBENzVGQkYzQUJDRUQ1MTgwNjNGMzZEMkYyMjFENzJCRjI3Cis6MTBERUYwMDA2QTA4NEM4MUNFRTdGOTVBMUJDMkIxNEM2M0YxMDE1MjVBCis6MTBERjAwMDBEQUJCRDc1QThBRURCOEFGQjU3NjhGMDNEQjg3OTU5MzI2Cis6MTBERjEwMDA4MDgzQzI3Mzk4QTI2NUZEMENGODM1MjQ3QjU3QTgzMDI2Cis6MTBERjIwMDA4OEU2Q0M5QTQ0RDg1NjE1QURBRkJEOTIxMjBFOTUwRjI3Cis6MTBERjMwMDBFOUYzMzREOTVGMENGMTkwMTc0ODIyQzVGNzA2NEQ1MjJBCis6MTBERjQwMDA1OUZFOUJGNDNDRjA1MzRFOTU4NDdFNThDRTIxOUYwMzlFCis6MTBERjUwMDBFOEUxQzQ2QzBCRTZCRkFDQThCREY0QzI5MTc0RkNGQjU1Cis6MTBERjYwMDAyQTE0OEMzNzU0NTc1NTVDMEVFREMzMEUzMTdBNzE1RDBGCis6MTBERjcwMDBDN0YwNDdFMTE0QUNBMkZDMzBFMjEwOEIyNzk0OTJCMEJBCis6MTBERjgwMDAzNzQ4REI4Nzc5ODkzNTBERjRDNzNDMEE2MDk4NUYyN0VECis6MTBERjkwMDBDNzBGOEYwRjk0OTY4NkZDMDBENDQ0QUYxMThGNkUxMzc5Cis6MTBERkEwMDAxRUNENzg3NThEQTQ3ODA0RkQ1MjQ0OEE5ODVGQzdFQzI1Cis6MTBERkIwMDBDNzVBREU2NzQzRDU0NEY0NUZFRjUxODlERjNBQUUzRjdECis6MTBERkMwMDBCRTVFQTRGNkEzNDZFREJGMTBCNTFGQTFGQzFCQjUxRjk2Cis6MTBERkQwMDBBMUVDQTFGNjIzOTQ4OTVBQzU0NUE1NzRCRUExNzQzQTUzCis6MTBERkUwMDAyRUYwNUY0REQ5NEFEODFGQjg2RkVBRDUzN0ZEOTM5NjBBCis6MTBERkYwMDA2NTdDOUY4RDcyNkE0QTI1RkRDRTJDRTA2MjU2NUZBRjJDCis6MTBFMDAwMDA1MTlCRTRBNTUyRDk1MDVGOUJBNjg4N0QzQzNGRThENDQ0Cis6MTBFMDEwMDBDNDJDMEJERkU3OTk3MUE3NDZFQjlEOTkwQURGRDc2MzA0Cis6MTBFMDIwMDBGNTExQzVDNDUwRUZBOUIxMThFQUU3RUREMThEM0YwNTUwCis6MTBFMDMwMDBGMDEzODdGNTA5MjM3N0FFRjcxNzQ0REJFRjI4QTQ3NUIzCis6MTBFMDQwMDBEQTdFODBEQjczQjU0QjJEQkUyRDMxRTg3N0Q5NDg0NjlCCis6MTBFMDUwMDBCRkNBQkY4OTVGQTJGOEZBQUM4MEEwOUYyRTVCMzQ5NDQwCis6MTBFMDYwMDBERkE0NTA1MTQxQkVGNkQ3Q0I1NDBFRUFGREVCMDIyQTk1Cis6MTBFMDcwMDA1Nzc1RjE5MUMzODUzQ0FFRUVBQjYwNzEzNjEyRkRGOTc4Cis6MTBFMDgwMDA3QTEyQ0ZCMzIyRjBCQzMzMDQ3NkM0QURBRjVFRTkwRDkzCis6MTBFMDkwMDA5MjgxRTVBRTM1NTMzOUEyQTc5MzhCMDUxRDhDMjQyM0JECis6MTBFMEEwMDBEMTlGMjc1MzBFNTQwMDlENzU0RDU0ODAxRTRBMzkxRjMxCis6MTBFMEIwMDAxMDZFQzc2MTg4OUZEMkNGNTM5RkRFRkQxNzREMDUzRjdECis6MTBFMEMwMDBBREREREQzNjEyRjM3RTJFMUZBOUNCOTM1OTk1QkU2OEM4Cis6MTBFMEQwMDAyMkU4MzM5MUY3NDM0ODk1RkI3REJBMkVDOTdGQTkwNTA1Cis6MTBFMEUwMDBFQ0I2ODFFRDE0ODVCQ0FGODM0NzZGRUQ4QzI0RDAwMzczCis6MTBFMEYwMDA0RTJFQzdDREZENTdCNUVDN0MwNUJFQkZCQUE1MUI0QjU4Cis6MTBFMTAwMDA2NzlBMEY4NThDNURGMTYzRkM2NjlGQTdBRTExRTY2NThCCis6MTBFMTEwMDBDRkE2RUQzQTM5NkM0QkEzRUYxOUZDODA2QzY2NzcwOUZBCis6MTBFMTIwMDAzQ0I4MDlDNjgzQzRCRUM5ODZDRTA5RjE3MTE0MTg5REQ2Cis6MTBFMTMwMDA1NDVGODA3Q0RFMTA5QTg1NzkxNTlEREUwOTgzQzZBRjE5Cis6MTBFMTQwMDA0RUM1Mjc1QkFCNUUyMjY5MTQ4RTRGQkUzQUYzMkZCM0U4Cis6MTBFMTUwMDA2OTc5MTBGODhERUFDMTI3MzhERkU0OTQzRkY2REFCNTIzCis6MTBFMTYwMDAwNjdFMzk2QUUyOTdBMzI2N0UzOTdBMEE3RUI5RTA0RUE2Cis6MTBFMTcwMDA2OEVGQzk1NDBDRjUxQ0UwMTc1RDdENkI4NDVGNTgzRDVBCis6MTBFMTgwMDBDQTJGNDc5MTVGRUU3OUQ5ODZGNThEMjM4RjFBRjg2NUVFCis6MTBFMTkwMDA0NTIxQUQ2N0VCRjg2NUJBRUNEQjEyQzMwRTc4RTUzQkMxCis6MTBFMUEwMDBFMjk3NUY5RjI5QkZCQzcxNjZGQ0YyQzREOUUzOTczRjM5Cis6MTBFMUIwMDA4RTRDRkZFRUY4QzU3NzlBRkNFMkVCQ0YyRjg3NjA1RUJFCis6MTBFMUMwMDA2N0NBMkY5REVFMjBFNjAzNzZDRUI2NTQwNzYyRTBGQkM5Cis6MTBFMUQwMDA3QThFNkYxMUY3MkVFMzcxOEE2OUYzQjRDQkM3ODIzRDUzCis6MTBFMUUwMDBDQkYzRDY0NDNFNERFNzNDQTZCRjU3RDRDRTQwN0RCOUQ1Cis6MTBFMUYwMDBGNTIwRDM5NzQyM0Y5NzcxM0NGRThEQzczMUNBNDI0QzAwCis6MTBFMjAwMDA2RkE2OTc0QkY4RkU0QzREMEFBOEY0RDc0RTZBMTJBNDlECis6MTBFMjEwMDA4MkJFOUUyMjkxMkUxNTk2QkFBQzc2QTQxNEI1OUJFOEM4Cis6MTBFMjIwMDBGN0QwNkVCQUNGQ0JGMjY2QzkyMTY2RUZEOEU5N0Y0MDRFCis6MTBFMjMwMDA0RjE3OTc1QjBEN0E3NTg4RDlGRTMyRDVDNTNFQTZEOEEzCis6MTBFMjQwMDBCRkJDMEZGMjEyMjgzQ0JFMUVDOUVEMjY5M0JFMTU3MDRFCis6MTBFMjUwMDBEODcwQTgxMkVEOTBDRkIzNkQ4M0VFNTc3NUYyRjU0NkU2Cis6MTBFMjYwMDBFQ0E5NTI1RjQ1QUM3ODU4N0RBMTg0RjBCRUM5QTNDNTI2Cis6MTBFMjcwMDAxNzk2ODEzRUJFMEFGNUFFRDBFNzY2QkREQzUzRjU5MjM3Cis6MTBFMjgwMDA1MUNFRjhDN0E3NTYxNkVCRTQ4QzdGM0NFQUNEODg5Q0FDCis6MTBFMjkwMDBFMUY1MDFFNTBDMzkwN0U1NDY0NDJGRjM3QTQ0MkZGMzA1Cis6MTBFMkEwMDA3QTQ0MkZGMzdBNDRDRUMwRjhEOTUxQkQzQ0YyODFGMUMzCis6MTBFMkIwMDA3N0ZBNzU3QTdCMTlENEIzNEZBRDk3MTc3MDc5NzBCNjJBCis6MTBFMkMwMDBFNUNDMUZCOEJERkE1REU5RTVDQTQyNEUyRkZGQjk5QzA3Cis6MTBFMkQwMDBBOTI5RkMwRUU1NEMyREM4OTlBNDUzQ0I5OTVBOTAzMzJCCis6MTBFMkUwMDBDNTA2Mzk3MzU1RTFCN0QwQ0I4OTBEQkQ3RUQ4QkZCRjA4Cis6MTBFMkYwMDA2MjAwQkE3NzcwN0MzNzE1NjhEN0MwRjhBNEU2RjRGMkVDCis6MTBFMzAwMDBCNkNENzRENTVCRkJDMEFBMENBMDE3MkZGM0YzMDY3QTI5Cis6MTBFMzEwMDAzRkIxRjlGN0FGQjRFOUYyQTIxMzk1MTAzQjVGRDFGQzFFCis6MTBFMzIwMDAyNDNFOUZEQjcwMTBFMzY1QTc5QTZGN0QyMUMxRDJBQ0JDCis6MTBFMzMwMDA0NzdCNkJGN0Q5OTE2RUJEMTZEQzEzRkZCNkYzRTg5Q0YzCis6MTBFMzQwMDBDREY4RjI4REVENEZBRjA3M0VCQThGQzdGRENDNzZBRTVDCis6MTBFMzUwMDBDMEVCRTlEQTNGRTZFRjVFM0Y1MkM1NzFDRERGM0YxNTE2Cis6MTBFMzYwMDBERDUyM0FERDBDNzQ3QTIyRkJCQTMxRTBFN0M5ODk3N0Q1Cis6MTBFMzcwMDAyNTAwQkNCRTA3RkFGMEM5NkY0M0E3QUY4QzY0RjgzQzE4Cis6MTBFMzgwMDA4RDc1MDc2MUZDRUY2QURERkYwMTdGQkVGQzZERDZCREI4Cis6MTBFMzkwMDBBMDkwRDFENTY5QUNGQkJGQkY0QjdDRkYwN0ZFQzI2NzI1Cis6MTBFM0EwMDBERjY2RERDQjA0QkUwOTNCMkZFMzg2NUYyODlGQUNGRjExCis6MTBFM0IwMDA1N0UxREIxMEJGNThGRkVGRDE4RkMxM0FCQkJFQjI2RjQwCis6MTBFM0MwMDA4NkY4MDVGOUZBMUJEOUFEM0YzRjQ1RDhCOTk5NDRGRTA3Cis6MTBFM0QwMDA1RUEyOEY5RDg3NzE1N0VCQ0U0NzkxRTg3OTI5NUMwRjNDCis6MTBFM0UwMDBDNjM3MjJFRDA3NjI5RDk3RkJBRTRCQjA0N0RFQjEwRUZDCis6MTBFM0YwMDBEMjZFNjM3MTNCRjNGM0ZGMkU5MEQ4MzkzNkE5RDYwMTY0Cis6MTBFNDAwMDA3OUYxQkRCM0Y3NjBCRTQxRTdFQzA5Qjg2RjY1QjY1MzZCCis6MTBFNDEwMDBDNDdCM0QyRDFBQzY5MzNBNUI3QzU4REVERTUyMUQ4MkNBCis6MTBFNDIwMDBCOEM5OTMyRkJEMjU0MTNFNThFOTRCMERBOERGRDY0RTA0Cis6MTBFNDMwMDBGQUUxMzBDQ0UzOUI1QTFBMEZGNURCNEQ3NjhBOEJEQjgxCis6MTBFNDQwMDAyOURFNTFBRkRGQTlGNzVGOUVGQzREMTNDQTQxMTE4NzRBCis6MTBFNDUwMDBCQTIzNjJCRkQwRjc1NDlEOUY0NEVCNDAwRTExM0YwOTkxCis6MTBFNDYwMDBFQTA2M0Y2OUQ5N0FCMDVGN0FDMDdFQTFGREE3OEU1QUNECis6MTBFNDcwMDBCNjNFRDY3N0Q2NUE0ODNERDgyRjZCMUIyQ0Q1QjFFQzdCCis6MTBFNDgwMDA5NzcwNDE2Q0ZCODVENjcxREZDRDkxNjgwRkFDQ0MwM0UyCis6MTBFNDkwMDA3Qjg2RDRFOUUzNkFBN0IyNUYxRTFFRjVEREZBNDk1NzExCis6MTBFNEEwMDA4QzNBM0I3RTUyODQ2RkI5REQzMkE0NDg1QjA4MjFEOTk3Cis6MTBFNEIwMDBCMzI1Mjc4NjlEQTY5QzE4RDY1RjRFREMzOEVBNUJGODBDCis6MTBFNEMwMDA0OUUxMDI5NjVGMkRFODZCQUJFQUM1Nzg3MjY3MzVDMTBBCis6MTBFNEQwMDBGODYzNjc2ODY1NkEwOUFEM0ZEMTYwMjExMkFENUZGRkRGCis6MTBFNEUwMDAzMjhCMEI2RjI4MjcwMTM4NDdCQjIxOUI2MDNERTQ2NUM5Cis6MTBFNEYwMDA3NDMwNDM3NkZFMDhFMkUwM0Q1NUQ0N0Y1MjIxNkVGNzNBCis6MTBFNTAwMDBFMzVBODBFREJBODQ5OUI3MzkyOEJERDQ5NjJCMDRGQzIwCis6MTBFNTEwMDBBNjE5RjIxNEZDNEU0ODYzRjlBMUI1NEVGMkEzMzhGMEU3Cis6MTBFNTIwMDBBQkE2MkE2NEU1MTlDNEFEMTNFNTYyODk3MjI0RTU0RkYwCis6MTBFNTMwMDAzNTE5Rjg3NkEwNzhCNDM5RkU0Q0U0MTdCQzgwMkY3M0Y3Cis6MTBFNTQwMDAxQ0ZBNENFM0NGREIwNTVEN0RGQkY4MzNGMkRGOTcwRjYwCis6MTBFNTUwMDAzNENEODI3OEVFQTlFODcxQzEyODE1RjU5OTU5NEY5OTAzCis6MTBFNTYwMDBGOTU4RDBEMzQwRjRFNzA0M0I2OUEyQUVDRUNGRTE4NkEwCis6MTBFNTcwMDBGOTNFQjUxM0VDQTQ4OTUxQkFFOEFEOUQ5NDE0MkJGRjc0Cis6MTBFNTgwMDA0QTk0MDlDRDdGNzg0NTdGMUUyRjQxRTlDNkYxMTI5QTQyCis6MTBFNTkwMDA3N0UxRjNCQjIwNkYwMEQ2QTc3ODUxOUUzRTU4NDlFNTNFCis6MTBFNUEwMDA3MDhDRjlFRDZFNTk3NjA4RTRFN0FFOTY2NjJDMkY1MDI0Cis6MTBFNUIwMDBGQUU0MTREQUZGRTkxNkZGMjE4MERCQ0U5Njc2MkM5RjcxCis6MTBFNUMwMDA2Q0U5QzJGNjlFOTY4RDU4REVEMTEyQzA3MjZEQ0IwRUVDCis6MTBFNUQwMDAyQzZGNkJFOUM2RjJDMTdDRjY5RDI5NEExMEM3QjlFMEUxCis6MTBFNUUwMDAyNDFENUY0NzQ3NTNGQkU4Nzc3NEY4M0VFRjQzQkZBMTE0Cis6MTBFNUYwMDA3RDcyQjhEREQwN0VDRUUxMkU0M0JEMkNCNEQxRDBERjBDCis6MTBFNjAwMDAzRDI1NjA2ODZGMkFBODNCMDY3Q0U5MkFERDYxNzhFRTJCCis6MTBFNjEwMDAyQ0VFMzZCQzc3QkE3RUMxRDlFRTk3NkI3RjA0QjZDOUIzCis6MTBFNjIwMDA0OTMyOUNCQkEwQUZDODcwNkU4OEYyRjE5MDY2MkE1RTNBCis6MTBFNjMwMDA2OUZERkU0NDFFRTdFODY2RkJFNDk5MjRGMjgzNzQwOTUxCis6MTBFNjQwMDBBOTY0NjAxRkY0MjZCMjNDQzhENjJDRjY3RUVCOERBQ0Q0Cis6MTBFNjUwMDA3RTdGMEVEQjNGMTI3OTlBQjIzRDQyRDc0NENBODhFRUU0Cis6MTBFNjYwMDBFN0RGOUZDOENGMjkxNUIwQkNDOERDRTIwMDQ0MjQ0OENFCis6MTBFNjcwMDAyRTI0QThDMTdFNDgyOURCMjcxM0ZCREVBRDNDRUU3MEJCCis6MTBFNjgwMDBCRjk1RUM5NEE4M0REOUFBQjBGOUI3NkEyNEIwODJGNjM4Cis6MTBFNjkwMDA2QjJENjZGNTdCQUE0OEMwMDJGM0Q3QTgxNENGRDBFRDQ2Cis6MTBFNkEwMDA3MzM3RUZGQjRBMkE4OUVFOTc5M0QxMUFFRUQ3Qzg3Q0NECis6MTBFNkIwMDA5RjNEQjJFRkVENzg5N0UwQkUzRTg3RDdDQTg0OEYzMTk5Cis6MTBFNkMwMDA4RjM2QjlCOTRGMDJGRTFBRDJEQ0Q3MEJGM0JCRkYxNjU3Cis6MTBFNkQwMDA5QjFBQ0IxRkVBQkRFNThCMkNFMDlCNEQzNzdFOTEwNTQ1Cis6MTBFNkUwMDBDQ0JFMjk5MjNGRDNFN0QwRTdDRkU0NzJCODZDNkFDRUI0Cis6MTBFNkYwMDBDN0ZDODU0REY1MkUyRjg3QjNDNUQ0OEVGOTBDOUZENzU3Cis6MTBFNzAwMDBGM0ZCMDk4ODgyN0VEMTMwNzcxNEFFMDE5MTNGMjI0MzFBCis6MTBFNzEwMDBERTFENURGRjg4RThGOUQzRkYzNEJGNjY1M0YzNzI5NkMwCis6MTBFNzIwMDA1RjkzNEQ3ODdFQ0Q0Q0Y0MjcwNTFFMzY0MTM5QUVGRjAwCis6MTBFNzMwMDBCOURFRUYzQUJGRTY5NDc5MzVBNjNDMDcwM0ZENDJERDJBCis6MTBFNzQwMDA2RkE2NkYxNUYxMTJDN0U5NUJCQTk5RTU0NTY0OTlFOEMwCis6MTBFNzUwMDA0NkU0NUQwOEJBMTRGOTE5MjI1RjQzRTQ2RkQ4Nzg1RTg1Cis6MTBFNzYwMDAwN0ZEMkNDRjZCOEU0RDVGQjYzREM0MDNFN0RFNjQ0QkQ3Cis6MTBFNzcwMDBCQzc3NEJERUE5RjMwODlBM0RGOTVDMzkyQzFCQzdDNjYwCis6MTBFNzgwMDA2NUY5MDNGRjMzNEFGQjg1QTcyQzNBNkU5RTQ3QkI1MUMwCis6MTBFNzkwMDA1RjE3RTU1NkY4NzUzMjFEQzIxQkFFMDI3QkI1QTg1QzRCCis6MTBFN0EwMDA2Qjg1RjM3QzI5QTUwNENGRTk5NDk2NEI1ODE2MUQ2MjFFCis6MTBFN0IwMDBGNURCM0MzMjdFQUZDREMzRTI0REEyN0VCMUE2M0QwNzc0Cis6MTBFN0MwMDBFRjI3OTlERUJCMzhGMjlFMTVGQkZEREU2M0UxQTVDMkEzCis6MTBFN0QwMDBFNkNERjM5MDY3NzJGQTVFM0Q1OTY2RjlEMTU1MTI5MzEyCis6MTBFN0UwMDAxQkIwQTEzQTg5RUI0MzBBQkY4Qjg5RkI5MjAyNUREQzI3Cis6MTBFN0YwMDBGNUM3MUM1QkI3QjdCMEZDM0U5MTBGRkRCNzk3NjVDQzcyCis6MTBFODAwMDA4Nzc2OTZGQkE2QzFEOUIzQjI1MDI4MDhGQkVCQTVEQkVGCis6MTBFODEwMDA4ODNCNDU4NUY5ODUzNUUwQzcxNTM5NzdFRjgxN0M4OEQ4Cis6MTBFODIwMDAyNzJFNjQ3QkI2MTcxRjYyRjZDMjhGQ0JBRkM2RkI0NjlFCis6MTBFODMwMDA1QzVGQ0IxODhGNzU0RjQ5RjQwNkUwNDMzNTU2QTZGRjUxCis6MTBFODQwMDA0NTNFNzRCOUQxNUVBODM1RDkwQjE3OUZFMkZFOEYxNEVGCis6MTBFODUwMDBEMkU3MDczREY5ODhDNzE0OEZFNUY3ODAwQzI0QkZBM0UyCis6MTBFODYwMDBGNzgwMzBGOTUwQ0FDNzc0OTZCQjFEMTBCRjJFM0E2NEFBCis6MTBFODcwMDBDMUUzOUVGMjM2NERDNkYzQjE5RDJDQ0ZFMzg5OTA2Rjc0Cis6MTBFODgwMDBEMEYzQTgyRjcyMzg4NkI4OUNGODFCQ0Y5M0VDRTE3MkI2Cis6MTBFODkwMDBFMjc1MkUyNzBFODM5Q0EwRTUyQjNDNEZGMjEwQ0Y5MzAwCis6MTBFOEEwMDAzNDlGOTdEOEQxNTJGRDkyREVERTMxOTc0NTkyN0YxNjg0Cis6MTBFOEIwMDBFNjQxNkQ1NjA4OUVCRjFCRTBCRThGQTIwMDFEQzc5MEFCCis6MTBFOEMwMDBDN0I4MDJFOTY3NkZGMkREMTU0MDFDRUIzNTBCREE5NTJFCis6MTBFOEQwMDA1RDUzNDg1NjJDRkZBRUVCQzJDQTQxRjMwRjNCNUJFNkRCCis6MTBFOEUwMDBCQ0Q0MzY4OERGRThCNDUxN0YyNkQ2RkIxRTcxQUVBQkIwCis6MTBFOEYwMDAwQkNGNUJBNDk1NUIwOEU0NTU2NUQ5RkJEOEZFNDNBRjBECis6MTBFOTAwMDAwM0U5Nzk4OEQ3OEVGQkZCNjQ5RTkzQkNBQkNCNTNCOUVDCis6MTBFOTEwMDBEREQ3MzUwQkU2RkZFMDM2MDVDRkU3ODg3MTEzQkQ3NDEwCis6MTBFOTIwMDAzRTNBM0E0OTlCQjIyNzEzRTZERjM5MzU5ODA5RjY0QzRGCis6MTBFOTMwMDBEN0Y4N0QxQjBCMjA1RkU0QTA0QzgwMENDQ0YzQjIxNjAzCis6MTBFOTQwMDA3MTdGOTZBRjJCNEREMUE0NTg3OUVBMDNBREVCMDM4RkJECis6MTBFOTUwMDA2NEI4NjdDMjBDRkYwMUVEMEVDODA4MThGQ0JDOTVCMzgzCis6MTBFOTYwMDAyODQ2RkVFMjY5Q0MxM0VEREI2Rjc2NUMzQjFCQ0Y0RDk2Cis6MTBFOTcwMDA5RUU2RkQxNzA5OUMwRUIzMTYxMjA3RkFERDQwOEY4MzQxCis6MTBFOTgwMDBFMEQ5NjUwRDIxREVENjJFQjQ1NEM3M0E1RjVCNTRDNDdFCis6MTBFOTkwMDBGMEJEQjZGNDUzQjQ4QjQ5NzFFQzc5MjQ5NTlCRTk5NTlECis6MTBFOUEwMDBDREU3MEU4NThFNEZERkVCMkE4RDNERkVFNTFDNkY5NDgzCis6MTBFOUIwMDBBRTVGMDM3OUQ1NTU2RDQxQkIyMjA5MkU2MkMwRkMxQ0E4Cis6MTBFOUMwMDA2QTA3NDk0OEVGMjg5NzNFMkJCNTMxM0JDMTI0MkZGQUZGCis6MTBFOUQwMDA3REJGNTQ0NzRGRjlGREU1RDBGOTQ1NEU0MzdDRkY0NEQ4Cis6MTBFOUUwMDBGNkVDQTQ2MDBDM0M4QjUyQzA1MUM4QTFGRTcwMjQ3ODk4Cis6MTBFOUYwMDBGRUI1OEJDMzkxMTRDN0U2RUIyOEJFNTY4ODc4NTVERDZCCis6MTBFQTAwMDAyOUNFRUJDRDJFMkE4QjcxNEU2QzAwM0M5OEU5RTE4RTFECis6MTBFQTEwMDA4NTNFNUMxNzc5RUUzNUEyODJCRTJDQTVGQ0E4OEI0M0ZGCis6MTBFQTIwMDAwQzA0M0YzM0JDMTY3RUM3RjAzMkI3RkZBODg4Qzc0NzM3Cis6MTBFQTMwMDA0RTczOURBN0REOEZEQTQ1NkU5RDVEMEM4N0EyMTU1QTNBCis6MTBFQTQwMDA5RkNBRUIzRkY2NEJFMTdCQTg1Qzk1NzZGRDA5RUQ5RUY2Cis6MTBFQTUwMDBBOUJDRkMzMTk0NTQzRkVFOTI4MkVGQkU0MTVGOUUyMkVFCis6MTBFQTYwMDBBOTM5ODBCNDU5NEY4RjgyMDgxOUI5NTU1QTY2QjA3RkI5Cis6MTBFQTcwMDAzQTI0RUZFMTY3MzAyRUQ0OTcwQUZEQTY5MzNBODUyMTE4Cis6MTBFQTgwMDAzOTgwRUJGQTkzMTQ2RTA1ODU3NTI5RDE1NjQxRDk0ODIyCis6MTBFQTkwMDBCQTZDRjA1RTYzQ0Y5RjBFQzM3NzFBN0IxQzQxMTk4MjVDCis6MTBFQUEwMDA5MzNCQURDN0Y0NzFBMzZCRjRFNzQ3RjJFMDE2OEQ2RUFDCis6MTBFQUIwMDA1QjFFOURDRjkyMURDNjdERDIwNjEyQzJGMTk2NzYxQkJCCis6MTBFQUMwMDA5RjlCQ0Y4RjQ4MzIwNTBDNUM0RTEwQzk3RjlEODJGOTA5Cis6MTBFQUQwMDBCREM0QzFEQUUzNDc4QkYzRTg3RDg1RkFGQkNDRUEzOUE0Cis6MTBFQUUwMDBCQ0VBRURDRTIwREMyRjQ0MDJDNjc5OEE3QjczOUVBNzU4Cis6MTBFQUYwMDA3MkNDM0UwMUNGQzMzQzBDNzRGQzkxREJFRUI3NTA3QjczCis6MTBFQjAwMDAzOTIzQTVBRTExRTA3MTE1NTE2REFDNjQ3NjgzNTg5NzI5Cis6MTBFQjEwMDBCODg3NjY4MTczQjYwREUwQkJBMEREQkMwRUNEMDZGM0YxCis6MTBFQjIwMDBGOTU5RDdFMEVCMTM3OEZGNDcxMUMxNzVEQzVFQTQ2Mjk5Cis6MTBFQjMwMDBCOTM0QkU2NkJGMDZDREE1QTE1Q0ZEN0QxMDRENUMzRjFFCis6MTBFQjQwMDA5MDY1QTkwNkZFN0Q1MUQwMjNEMUU0RDM1OTdGN0ZCOENCCis6MTBFQjUwMDAxNjYwOUM0Q0MwNzU2MDNBMzVDNkM5NzZDMTIxRDc3NDIxCis6MTBFQjYwMDA4NERGQ0I3QUY4MTFBNUFFMDRDNjE1RUJGOTY3NTlFODM2Cis6MTBFQjcwMDA4MTIwRUNBQjI2QjI3QkEwREU0REE5N0IwM0ZBRTcxQzFCCis6MTBFQjgwMDAwRUJGMkZEMUE5MTNBNzVBMDhFQkZDNzhFNzQ3QUZDOEVGCis6MTBFQjkwMDBGOUQxRjUxMTEyQkUxQkYyQTNFQjc3Q0FFRTBFNThDRkQ2Cis6MTBFQkEwMDBDRUU3MEUwM0JEMEZCNDJFOTExRjRCRTkwMUUxNDZFN0ZFCis6MTBFQkIwMDBGNTIxRTgzN0YzQkM4RURFNDA3RTBBNzZDOTc0QjlEOEY5Cis6MTBFQkMwMDAxMDQ3Nzk4NkMzRjE5RTYyREZDN0YwNUVFOTRCRDkyRTBDCis6MTBFQkQwMDBCQzdGMjdCRjdCREY1MDNBOEZCRUVCMjVDQ0FCNEQ5MzdDCis6MTBFQkUwMDA0OTE1QzA0RkU0MjM3Q0VBNTREMENGNEU0QkYwQ0IyRUQ2Cis6MTBFQkYwMDA1QUVGQkI4QTc4QjdDMDM0QkNDQkJDNDAyQTcyNEVCMTQ2Cis6MTBFQzAwMDBCNzgzRDI0REM2RjVCMjBGRTRDOURGQUY1QjkwQkM4MENECis6MTBFQzEwMDA5NjE5ODkwQjkzNDdEMEYyODIzOEUyNzdEMEYxMzIyNEVCCis6MTBFQzIwMDA4QkFGMUI4MzUwRjM5MzJGQTFGM0ZDNDkxQzlEMjdBREExCis6MTBFQzMwMDBFN0REOTAxMDFDNDFGOUVEOEYzNjYyMDc3QTRENEJBODQ1Cis6MTBFQzQwMDA1QjM3MURCRTkzMkNFMzdDOEU1MDNCNTFBMTcyQUNFMjJFCis6MTBFQzUwMDBGMkNGMjZEQUU5Rjc4NjdFRUQ5QzAwRjNDOTZBOUU0NjdDCis6MTBFQzYwMDBERUE1QTAzQzVDQzRGOEU0RThDMzVGNEU4NDczRTBGMjI4Cis6MTBFQzcwMDAzNzRFMkY5RTMzRTdGNDk3MzY4MkMxQzM4Q0VGREQxQ0VECis6MTBFQzgwMDAxRTZGQzYzMzdGQTczMURENzYyQkM0REIzRkU2RkUwRjU4Cis6MTBFQzkwMDBEMTNDRTgyRjVDQzdGRDg1MzdFMzk5MUZGNDY2QTE4ODU2Cis6MTBFQ0EwMDAyRjA1RDNGNUY2NkRBMzQzNEJCQTBDOUMwNzZBMjc0MTk5Cis6MTBFQ0IwMDBCRUYzNjc2RTJEMjkxOUZBMTExRkYyRUQ3NURDNkZGRTk4Cis6MTBFQ0MwMDA5ODkwNkFBMEYzRUJENjRDMUI5MjQyREY0RjZGNjU3MEIxCis6MTBFQ0QwMDAzMENGNkZFQzY4QTY5RjFCNEU1MjgyRDZDNUNGMUE5NEQ4Cis6MTBFQ0UwMDBBMDBERTQ3N0MzNDk5QkUxRjlERkE5MURFREQ3OUQ1NzNFCis6MTBFQ0YwMDBGRkM5ODc4N0E2QzNGQ0FFMjRFMTU1RDBGRkNBRUIxMjNCCis6MTBFRDAwMDA1OEUwOUVGMzZCMEY5RkM3NDA3MDY5NEM1Njg4NDJFMUY0Cis6MTBFRDEwMDBEMTI4MTFERjYwRkQ5RUY5QjcxQzEzQkVCMzQ3MzNGQjRBCis6MTBFRDIwMDAyNTdENUFFQ0Y1NURDNEQ3Mzc2RDc1Q0QyRjgxQ0UxQTkwCis6MTBFRDMwMDA0MzU2QjRFNUFGRkI0M0M1OTBDMUVDRTdDNjkzRTc5MUZBCis6MTBFRDQwMDA4MDJFRkVEN0E4ODQxMTFFOEQyN0NGQzdFN0QzNTYxRjZDCis6MTBFRDUwMDBCMzAxRERDMzM4MkE3RDdFOUQ0MzFCMDJGMURBODFFMEQ5Cis6MTBFRDYwMDBCQzlCREI0MThEMjc5Mzg5M0Y1NUZGOUNGMTc3NzRGQzU5Cis6MTBFRDcwMDAzNDZDRkYyRDg3REI2RkY3NUJBQTYzRTU3NzM1OEY2NjExCis6MTBFRDgwMDA3MDE5OURBRUY4MjAxRjY4NEM5MDY4OUI2MzdDNTdGNDA3Cis6MTBFRDkwMDBDQjQ4MzFFRTVGOThFN0Q1NTMxOUJFMTJFNjdENEUxNThDCis6MTBFREEwMDBEMTYyN0Q2RjMxODdBMzk4NkY0RjRBNzg5MTBGRTlCMzk1Cis6MTBFREIwMDBBRjEwRUU5OTg4RDRERDdEQjlGQTdCMjRCNjcyRkNGNUVDCis6MTBFREMwMDBGQzMwOUMwQkUzN0Y3QzYxRUM3MzNCMDJDRjkzOTQ2NTNBCis6MTBFREQwMDA2ODJGQkY5MDUyRjczNEM4Qjc3OTk3RDEwQUE1OEYyMTExCis6MTBFREUwMDBGMzgyMTY3NjNFQzUzRjI4QkVBMzcwOTY0OTYwRTI2MDY2Cis6MTBFREYwMDA3MEI2NjFCQjE4RUZBMzE3MzkzRjUyM0YxQ0YyRDRBRjc2Cis6MTBFRTAwMDBFMkYyRkZBQTZENEIzMEVGNDlDOEE5OEYzNkNBMjhBNzk2Cis6MTBFRTEwMDAzRTQyREQ0MkNCODA4NEY2RUJGQzNBMEE2QjJBNTcxNjYxCis6MTBFRTIwMDA2RDlGQjYwRkQ0QzE1NTk5RDQwNjRENjFDRjZGODZCMjkwCis6MTBFRTMwMDBDRDZBODhGNzhCRUYyRDM4Q0NFQ0I3ODU5RDQ2M0Q1N0QyCis6MTBFRTQwMDA0RjNBM0YwMUZCRTBBMzE3OTkzQ0EwRkM2RDAzNzlCQzRFCis6MTBFRTUwMDBFODJFRTMzOEY1REIyRUZBMDBFNjU3NkZGMkNCMzNCODM1Cis6MTBFRTYwMDA3RTM2REI3OTlCNDdGM0Y4RkUyNDMyRTk0Q0ZDRjI0NjEwCis6MTBFRTcwMDBBMkVEMTg4RDdBQzEyN0MzM0NDQTE0RTMzRDVCQTI0Q0I2Cis6MTBFRTgwMDAyRjYxRjA1RkJFRkQ4NENEQTUwRTNDRUUxMTJBNDcwQTJFCis6MTBFRTkwMDBFOEI4QzdBODNGMEVFNTFGNDc2QkJGMUY0REYxNzBGQ0Q4Cis6MTBFRUEwMDAyMDgzQ0I4MUQxNzU0RkMxRjc4RTFGNjRFQkZGQjRFMTk2Cis6MTBFRUIwMDBEMzQ1NzA0RjBDOTlDM0VDODYzODM4N0M0MDdGOEQ5QkNFCis6MTBFRUMwMDA2QjBGQjREMkY1QUVBNjYyQ0EwMUU3ODJFMjk4M0QyMjhBCis6MTBFRUQwMDBFQzMwNTlCRTU2NzZEMUY2QzlGRjU4OTgwQ0VCNEM3QkY2Cis6MTBFRUUwMDBFODA3RDUzMDVFRkE0MzA5MUFDMEFEQTM0MjFCMEZGMjAyCis6MTBFRUYwMDBCRUEzRDZFOTg1RjMyQTlCMjkxOTk2RDNGN0VENzQxQzk2Cis6MTBFRjAwMDBEMDI3ODFERjRFREUwM0RCOTEwNURERUIyQUUxREUxNzQyCis6MTBFRjEwMDBGN0FFREVFMDMwQkFBRTc2MEJCQjI3QTNGRDdDRTI2RDI4Cis6MTBFRjIwMDAyNUQxRUYzNUVEQUE3RDBDRTY5NTNCOUJFQTA3MDlDRThFCis6MTBFRjMwMDBEMTZCRTNEREJBRjEwOUI3QUYxQTM5NEU4RTNGM0JFQTI4Cis6MTBFRjQwMDA4RUYzRTA1Q0MyN0UxOUNEQzc0RjFCRjJEMUFGMUY0RENGCis6MTBFRjUwMDAxODNEODlGQzdCRjgzNkQ4OTEwMjdFQzdBOEJFMjJCQTNDCis6MTBFRjYwMDAzQ0I1RDFERDUyRDA0QUQ3QjVCNEU3MzFCQzhGQTM2MUVGCis6MTBFRjcwMDA2NTMwNjMyRUU4REIwNzE1QTY0N0Y5RkNEMkZFOTg1NUVECis6MTBFRjgwMDBBOUJBQTJGQTc3QUVFNDQ2M0I1MkQ4Qzk5NzEzRjE1MzE3Cis6MTBFRjkwMDA4Q0YxQzIzOTlDMEYyRUU3RjZGMURDMDQwNkU3RjlDNEM4Cis6MTBFRkEwMDA5QjBCRUY1RDYxMjcyRTBCODVEOURDNjlERDY1Q0I0MEJFCis6MTBFRkIwMDBFRjJFQjEyNjgzN0QwMzZCODk4NTc3NTE5QUVEMjBDMUIxCis6MTBFRkMwMDA4NzhEMEYyNEZBMjFFRUZBQjFENDU3MDg4MzFDQjEzMjkxCis6MTBFRkQwMDAzRUVCN0IzNjJFQjAyNUFGRkYzOEQ2MzFDQ0FGNkYyQzUxCis6MTBFRkUwMDBFNDc2NUQwMUQxRTBGQzQwRTNFRTUxNzgxRTJDMkU5RUNDCis6MTBFRkYwMDBFMjcxMDJDQTNGM0JFMEY1NzlEMEZGNzREREQ3M0NFMzE0Cis6MTBGMDAwMDAwOEUyQjkzMDcxNUY5OTlCRjgxM0U5Nzc5QTc2MEZEOUM2Cis6MTBGMDEwMDAwMjc2NDZEQTA4NkRGQzcyM0FERUM3RDY3MDJFQ0EwQjRECis6MTBGMDIwMDAyQURGMjRBQTVCNzNDN0FDQjk0NEExN0NENTM4OTREQTMzCis6MTBGMDMwMDA1REI0N0VEMTQzNzdCMzdBN0U3ODkxODVENkFGN0RFODkzCis6MTBGMDQwMDBEMTRCMTQ0QTlGOERBM0MzRUY0M0ZEOTY4NzlFNjZGNTZGCis6MTBGMDUwMDAwOUUxNDUzMkFENkY3QzY4M0ZFQjBGN0JEODk0QjBCNkM5Cis6MTBGMDYwMDAzRjc0RTAxMkYwRkY4RjI0MzNGQjgxNzhDMzU3MDJGRDE5Cis6MTBGMDcwMDAzNDNFM0RDQUQyQTE1QkVGQkEzMTRDM0UxRTcxQjA3RTI4Cis6MTBGMDgwMDA0N0YyQzg0RjY3MDFCQzNERTFDMjU5QkE3REI5RUJDNzMxCis6MTBGMDkwMDAwODNCOTZEOTcxNjI5REUyM0Q5MjE5N0JGQ0IxNjM5ODYxCis6MTBGMEEwMDAxRUJENjYxQUVCNzc0MTAyNjk3N0IwRjM3NTdFQjBDNzczCis6MTBGMEIwMDBGNkVFMUE4NTcwNDkxOTkzQzJFMTQ1QzcyOThEOEUyMzUyCis6MTBGMEMwMDBFMDI4QzYxM0RGNUQwQzdBMURFNEJFOTVDQTdEOUQ5Q0M5Cis6MTBGMEQwMDAzOTk3RTM4RDdFQTcwREJGNTNBQzhEODc3QkFDMUE2NzQ0Cis6MTBGMEUwMDA2NThGMDdCQzUxN0MyOTFDNUY4QTFEMkY1N0RCQ0NFNjNFCis6MTBGMEYwMDA0N0M3NEQyRTQxM0QzMzExRTJDQTdCQkZBNkZERjNBMkE3Cis6MTBGMTAwMDBGMzM2RDNDNzhDMzE0QzFFNUREM0NBQ0VGN0Y3MjU4RkFCCis6MTBGMTEwMDA0MDNBQkEyMDgxRDk4QkE0OTRDMjhGQ0FCMzhEMUM2RTk5Cis6MTBGMTIwMDBFQkM2MjQzMzNGMzI4Mjg3MjExMjhFREZDQUUxOTdDREFFCis6MTBGMTMwMDBGQTlGRTk3QUU3RjA3OTlDRURGNUVBRjBBNDQxN0M2NTY1Cis6MTBGMTQwMDBFRkNFMjJDNEQzQzYwODFEQUMzMzhDNzM2NDg1RTlCREYxCis6MTBGMTUwMDA3MkNBNzgzMDhGOTQxMUY4REU2QTA3QjFFMzczQjIyNTcyCis6MTBGMTYwMDBGMjVFMUU3REVGODI2OTdEMTM4MTFGOTY3MjdCOThGODk3Cis6MTBGMTcwMDBDRkM3QkM4NjA2MkUyRDk2QjY4NzZDMTA5NzVFREFDRDZCCis6MTBGMTgwMDBFMkU0QTQ4MEFFMEZFODYzNTY0RDI5NUY5RjlCQUZDRkFBCis6MTBGMTkwMDBDREQ2MTczMEQwMjczOUQ0OTczQjNCQjEzRkRENDZFMDgxCis6MTBGMUEwMDAxRTE5QUY3ODAyMUZDRkMwQ0ZCMUM2MDNCRTE4MDgxRjBCCis6MTBGMUIwMDAxRDY3MUIxRjYyOUUyNjc4NDZFMDZDOUE5RjgwMjdGMDkxCis6MTBGMUMwMDAzMUJFNTc2Q0U0MjczMUNGNUJDNjQ0RTJCMTQ2N0VDRUY4Cis6MTBGMUQwMDBGQjk2REZBQjYwRUYyREJEOTFFMjExRUMxRkQ1NDhDRjYwCis6MTBGMUUwMDA0QjdCRjIyQ0YzOEJBM0VGQjU3N0FGRjA4MTlDNEY5MDY0Cis6MTBGMUYwMDA1NDE2MDdFRkE5RjU4M0ZFNkJEQTU1ODE3MUFBQTU0RjY2Cis6MTBGMjAwMDAzREZDQTQ5RkJFQkZGOEQxMEQyRTQ4QUVGQTQ4RTlDQTE2Cis6MTBGMjEwMDAwMDNCQjg2MUZCMkExN0RDMzNGN0ExRTI3NzgxRkNGQ0U1Cis6MTBGMjIwMDAyODIwQzdDQzVCN0Y5QkNCMDE2MTc3MzU3MjdENzNFNDZGCis6MTBGMjMwMDBCN0I3Q0QwNDc4N0NCMUREOEFFNzBDOUI3NkM0MDVFM0QzCis6MTBGMjQwMDAzMDZFNzIwRERBNjNCNEZFMzZBQkFGRkUwNEZDRDhBNkE2Cis6MTBGMjUwMDA5RDQ2RkI2OUYxNkYzNjY0QTg0ODRGRkU2MTE2REMwNEQ5Cis6MTBGMjYwMDAwQjBFODNDREIwQzY2RDU2REM0RjY5M0MyNDdCRTk2NzNECis6MTBGMjcwMDA0ODEzRTlCQjE1RTY2NzdFMUZFNjcxOTJFMkJEQTk1QjA0Cis6MTBGMjgwMDBCRTBBRjJGQkNDRUQ1NDkyQTAzREQ2RDQ3MzFCREE2OUQyCis6MTBGMjkwMDA0RDNEMTc3RTAwNzY0NTkzMjk5RkEyN0UwMDNCRUNDNTJECis6MTBGMkEwMDAzMURDMEVFM0Y3QTQwQkY4OTA0MDNBREEzN0FEMEZGRUVECis6MTBGMkIwMDBCMkU0NkQzQUFGNjNEQkZFRTI5MjhBRjU3QTczMjVFMjNGCis6MTBGMkMwMDBFOUQzRUUwNTlCOUU1NjA3RDZBRjFGODM3RDEwQTc3RjFGCis6MTBGMkQwMDA4RkUxNTdERDI5QjE4REExNURBQzZDQjAwNjVEMTAxRkNCCis6MTBGMkUwMDA2OEQ4NkNGNTUyMEQ0QzFBMUVERUZBQzBBRkMxQkY3QzU3Cis6MTBGMkYwMDAyRENFMEJBOUE2NEIxRTdFRkU5NTczNjk3REM5NjNENkU0Cis6MTBGMzAwMDBCNDFBMzY3RDI3RUM3MzBCM0M0MUNFMDZEODI5MDIyRjY4Cis6MTBGMzEwMDA4QjdGRkZCQzBERTI5MEYwMUNFQzVFODE5RjI1OEZGNThBCis6MTBGMzIwMDBEQUUwOUM5RjE5OEVEM0JBN0I2RDk4MEY2QkM2NTNGN0FBCis6MTBGMzMwMDBEQjMzQzAwNDY5N0RGMDRCMUJEMEY3NDdCQjI1QkNGNzFFCis6MTBGMzQwMDBERUZDN0VGREU2RTc1RDQwODcwMDI3RjA0MzA1QkUyMjM4Cis6MTBGMzUwMDBGOEVCODdCN0UwQ0NBNzRCQjExRkM2NDM0RTg1QkZDN0JDCis6MTBGMzYwMDAwMTQ3NjU0OEU3OEYzQzBENzE5NEQ3RTNCQzAwODdGQUVECis6MTBGMzcwMDA0N0FFNzVDMTdBM0U1MDk2MzE3QUJGNkY1NTA2REM5NzFECis6MTBGMzgwMDA1NzZGRjU2N0I4QjE2NENGRUJFRkJGMUVFOUYwRUE4M0MyCis6MTBGMzkwMDBENzY3QjA3QjI0QjQyQzc2OEZBNjNGMEJENkY5QjM3QjBFCis6MTBGM0EwMDAyRkMxNzUyRTIyNzU0ODg3RjVGN0IxRjhDNkU3MEFBOTZGCis6MTBGM0IwMDA3RTJDMDZCRkNDMkQ2NkZDRjJDMTk2Mzg0ODBFMjIxRjZCCis6MTBGM0MwMDBDMDNFMDJFQzlCQkMyOEUzQjlGQjdFRjcyMjkxRTU1OEQ2Cis6MTBGM0QwMDBGRjlDQzcxN0M2MTU0N0VFRURCMzgzN0REN0M0N0IzNUI5Cis6MTBGM0UwMDA2RDVCMUQwMjNDMURDOUQxODY0MDNDOUZDMkMxQ0ZFMTZGCis6MTBGM0YwMDAyNkMxQkRFRkYyQzFFOTQzMTg5RTg4MEFGQjIxRjgxRTIxCis6MTBGNDAwMDBCNUM3QTdDMTczRTgxRkIyNkE4RTEyQzM3QkZDN0UxQjBGCis6MTBGNDEwMDBGNjdEMTFERkEwRjM4RTg3RkRGNDBGMzI1ODVFOUU3OUUyCis6MTBGNDIwMDA3RDFEQzU0MjFFOTAxMEQxRDNEOTQwRkNCRjZEMEREMkI5Cis6MTBGNDMwMDBENzY3ODcxOEZGMzQwNjZBQUJCMTNENjQwRDBFODFGNkJECis6MTBGNDQwMDA0MEVGNkMwOUU1NDM5QzYxRkYzQzQyMUZEQkFDOUNCRjc1Cis6MTBGNDUwMDA4REVENzQ5RThBQTQ4N0VGNkUwOUVGRDMxNEY0QjJFOEExCis6MTBGNDYwMDBBRTM4QzM3RTdEOTQ3RThDRjc0NTA5N0UxNTdFRDZENTU5Cis6MTBGNDcwMDA1QzFFOThENzZEOTYwRjk3MTY5QkZFOEVDMkJERTlBN0FFCis6MTBGNDgwMDAxNUZGNkVCMDA2MUVGODM1RjAzM0U1NUZCRjBBRkM2QzYxCis6MTBGNDkwMDBDNUY4QzBEMURGM0RGN0NBMTU5NEVFOEY3NjBCM0UzNjI2Cis6MTBGNEEwMDBDQTVCMzMxRkQ3M0Y1RTQ2NjJGMUYxNTFBNzk3QzRFNEIwCis6MTBGNEIwMDA2M0ZBM0MyNjFGM0JEOUI5RTlGRjU3RjJGNkVBMDFFNEFCCis6MTBGNEMwMDBBREJGRDgyODZGM0YyN0M1NDlFNzExRDAzMzRCRjBCRUY5Cis6MTBGNEQwMDA1NzMzN0M4NURGNkI5NkEzOTlDNTZBNEMzOTRBN0YwRUZBCis6MTBGNEUwMDAxMTFEM0MwNTFDMDU3RDJFN0U2ODI5N0UyNzQyQzc4MkEyCis6MTBGNEYwMDA0RTA1MUQ0N0U4RDRCQzZFMjMzQ0NERUQ1NTMwNzc1REZECis6MTBGNTAwMDBGRTgzNzUyNUY1NjNDMENFN0Q1NjBFNkNBMTUzM0I0RTMwCis6MTBGNTEwMDBFNzcyMkI4NUZGRjFERkU1NjFCRUQxMkFFRTA3MUM3NzhDCis6MTBGNTIwMDBGN0I5MjA3RjZDMTVGNzNCRkEyMDJFOTkxNDdEREVFN0EyCis6MTBGNTMwMDA2MEY2RDI3MTVGOUYyQjU5NjczN0JEQkQ0Qjc2ODE5REI5Cis6MTBGNTQwMDAxNzBFOTBFQTU4RjEyNDJBQjE3MTFFNjEzMjUwM0JEQjRDCis6MTBGNTUwMDAxNzNCQ0VFM0ExQzc3OUJDNzNCQUVDQ0M2RDg2Mzg3MDhCCis6MTBGNTYwMDAxN0JCRDc3RkUxOEFDQjVDQjAyRjcwN0NENzg4M0I4MEZDCis6MTBGNTcwMDBGRjdFRjY2Nzk5RERFQkU5RDcxNEM4OTM1OEMwNDA0MDg5Cis6MTBGNTgwMDAzRTI0RkVCQkE3RDA3NTJFRDhCNTA0RjMxQkNDNzE5NEQ2Cis6MTBGNTkwMDA0NUNFNkRCOEJGRjAzOUI5MTk0QjczRkM2NDMxQzQ1OTBECis6MTBGNUEwMDA4MERFRUYzNTNEREY3NTExRDJENzYyMTM3REQ1MDE3RDQ5Cis6MTBGNUIwMDA2NUY1QTdBRjE3MDRCRjhFMjdFM0Y1RTdDRjk2NzNCOUJDCis6MTBGNUMwMDAzNzVEMkVCRTAzRUM5OUUzRDRDRkM3NUMwMkI5RjgwMEQ3Cis6MTBGNUQwMDBFOEREQ0ZDMUVGMDdDNkYwQTcyM0REMkVBOUZCRDBDNjFCCis6MTBGNUUwMDBFRjcxNDY3QTE3NzQ2OEY2RjdDREU1QjEyN0ZFM0VFOTZDCis6MTBGNUYwMDAyNkRBQTVFMUM5Mzc0QUVFQTFFNUIxMjc1RjJCN0MwNkUzCis6MTBGNjAwMDBFQTRGQkQ5QUZCMDZFOURGN0ZEQUVFQUZEMEJGMzlCRTI1Cis6MTBGNjEwMDAzQjBFRTc3MzdDRjc5RjcyNkY4MkZBRDM3MTk4ODc3NTAwCis6MTBGNjIwMDA3QzY1MUNFNjQ1Rjk3NzI3MDZFMDNDREZGMTFDMTZCNzQwCis6MTBGNjMwMDA2QjdERjZDQjEyQ0NCRjIwNkQ4OEM3OTNDNTM2NjY4RjI1Cis6MTBGNjQwMDBFQ0ZBOUZCNzIwN0ZGQUQzNUQ3MTJBQzQyOTlBNzYyN0Y2Cis6MTBGNjUwMDBBMERGREVGNEI0MDNGMzVFOEUzRkZCRTUyNDdEOUNFOTdFCis6MTBGNjYwMDAzRjVENEZBMzhEQzUzMzhGMjc5MjM5OEYwMzNEMjczM0RECis6MTBGNjcwMDBGRkFFRTk5OUM5NUIyMTVGNkU2OTRGQUYwREY2MDdBNjMyCis6MTBGNjgwMDBGREYxNUYyNTIwOTc4RTNGQ0VFQzBGRUFDRkRGMEYzN0RECis6MTBGNjkwMDAxRENBNjM5QkVFQjY1Mjc4N0YwQzM2MjJGNUMzMzc4REI4Cis6MTBGNkEwMDBFREJFMTRGQ0YwRkU3MDYxNzAzODRFRTEwMEVCQTI3MDBDCis6MTBGNkIwMDBBOTA3NzkzQTEwM0M4NjhFQjUyMUZEN0ZGRkUwRjEwOTVDCis6MTBGNkMwMDBGQTE3MERCQkNFNDEzRThBQzI0NUQyRDhGM0M0ODA1RDQ1Cis6MTBGNkQwMDBDMkY1QjNFN0JCQkYyQzAxN0JFQTY4RjcwQUI0MEI0RTU3Cis6MTBGNkUwMDBCNUVFQzk2M0JGQUY3NEYwNkRENzJEMDU0RjY3REQ3M0ZECis6MTBGNkYwMDBCRUI3Rjg2NkY0RkYxNkQ3NTc2NjNFRTg0RkU3NEZERDEyCis6MTBGNzAwMDA4MEY1NDcxMkJEMzhERkQzRTRGRkU2RkZERkYwRkVCODM3Cis6MTBGNzEwMDA4NEZCRjJBN0MyRkIyRkZGRDdFMkZEQ0YxQ0VGODk2RTVGCis6MTBGNzIwMDBDODJGM0JGRUVDQkY3Mjg5NkVGREE3NUFGNzkzRkY0QkMzCis6MTBGNzMwMDBENzFEQjE4RjY0OUYxREFFQjhFRjI0QzExMDlDNUY1RkQxCis6MTBGNzQwMDAzNTgwOURGMkVFNTg0OUU0RUZBMDFGMjJGMjc3RTRCNDMxCis6MTBGNzUwMDBDNTY4NjdDODY5MUQ2ODM3QUMyMkVDMUU2NEJGNkFFMUUyCis6MTBGNzYwMDBGN0IxQjFCQ0VGRjY2QzZGMDBFM0EyOEFBRjdFMzNBREE4Cis6MTBGNzcwMDA1Qjg3Mzc3ODNCNzAwNEEzN0YyNjY3RDQ1NDQzOUNBNUVFCis6MTBGNzgwMDA3NTA1OUQxNzFEQTczNURERTI2RTU1RTE5QTc2NEIzMDY0Cis6MTBGNzkwMDBBRTA0Q0JCN0ExNUM5REYxQzNGREYwNURDNTY5QkNBRjA0Cis6MTBGN0EwMDBENjY5RjIzN0UyMEI2Q0M2QkM2MkIyQzcwREZCRDUwRTUwCis6MTBGN0IwMDBBRjAyNzdCOTUzNTNENjc4QkY2REVGNThCNkFGMUQ0RjMwCis6MTBGN0MwMDAwMjk4Qjc3OUE2NzA0QTJEMTkxQzRFNjZGODA4QjhGNTRDCis6MTBGN0QwMDA4MzEzRjc0N0M1N0RGQzRBNUE0NzA4Rjg1MDIxRDQ5RjQ4Cis6MTBGN0UwMDA2NEVCNDEzRjE0RkU4RTE0RUNENzU4OTMxNjc5M0JEODQ2Cis6MTBGN0YwMDA3RThBMUFCOUM3MUZGMjIwQjhCRjE5Qjk2NzU2QjVBMERCCis6MTBGODAwMDA1RjJBRTBBQzFCMEZENzZGODZGMzk5QzI1N0UwQzU0MTYyCis6MTBGODEwMDA2NjIxOUUxREQ5NEU2RjgwQ0U3Rjk1Q0FFMEJFOEFDMkZBCis6MTBGODIwMDAxREVFMTcxN0YwMTU3MDMzRTNFMTdEQTA1MTlEMUQxRkVDCis6MTBGODMwMDAyRDhERjkzQUZFNEFFMjgxN0Q5NkU5RjI5NEIwMUZFQ0YzCis6MTBGODQwMDBFNUYyMDRCNDk3OEY0OTI0Mjg1MUZGRUQ1ODQ1NDYyNTI5Cis6MTBGODUwMDBGODE1Qzc3MjZDMEE5NDUzRkJFODlBNzRGM0JERTBBNEUwCis6MTBGODYwMDAzREYyMzdGNEEwNUU0MTkyMERGNTYzMzk4NUY4RkUzNDIwCis6MTBGODcwMDA3Qjk2RTFCRDAzOTBCNzRERkRGNjYzNTlFNTc2REMwRjRECis6MTBGODgwMDA3NUU3MTlERTlCOTlFMERBMDJFRDA3MjA4RjFCQkYzRjc5Cis6MTBGODkwMDAwM0ZEOUIxRjY0MTYxOUM2OTlGOUNFQjE3QkFGQTJFNTkzCis6MTBGOEEwMDA0RUVFNTdGNzREQjU2MjNDRkVEODlGRTc1NTAyMUMyRjMwCis6MTBGOEIwMDA1NEM3MUJGQTFGMjRFRTc0MjAyQUJBQkUyQTU4REY0NTBCCis6MTBGOEMwMDA5RUM5ODZFRjM2QkNCREE3MTBFMjEwM0ZGMjU2MTg5RUM3Cis6MTBGOEQwMDA1RjVDN0VBMTYxMUM5RjNEMUMwNEYyQUVENTZBMERDRjFBCis6MTBGOEUwMDAxQjlBQkYyMDRBMkEyMUU3MzU3RjREOTQ4OUQ0N0MwRjhCCis6MTBGOEYwMDA3NjFCQzY5OUI4N0ZBN0ExQkYzN0U0OUUwNjI2RTM4NDhFCis6MTBGOTAwMDBDM0RFRTdBMDE0RjlFQ0I2NTRCQkRGNDJDQkIxNkY1N0FFCis6MTBGOTEwMDBDQUIwRUY1OUY2NUU1RDJCODRBMUNGM0I0NjNDNDAwNzUxCis6MTBGOTIwMDBFNzkwNzhEQzBGMUMyOEVGRkQ0QjRCQTAwRUQ2RjkwQkFGCis6MTBGOTMwMDAzOUUwODEzMjdFRDhBMjEyNThENzQ3OTk5RDMyNkM0QjVDCis6MTBGOTQwMDBERjIzRDU1RDVFMDI3NkQ2Njc4MTU2QTg1RkYwNzVCNzc2Cis6MTBGOTUwMDAwQ0ZFNjRFQjBFMTlDRkQ3NEQ5NzZCMTJGRTBBRjJCODZFCis6MTBGOTYwMDA1QkMyMUNGRjA2QTcwNUUzRjA0NzUzQkE0QkFFRDVEMUU3Cis6MTBGOTcwMDA5REM4REIzMUYzNzFEMUM0OEEyNTMwN0U1QkE2RDZENTE0Cis6MTBGOTgwMDAwQkYyQjRGMkVGNTdDQTMxQ0VCQjEyQjdGMTVFQkFBMjk2Cis6MTBGOTkwMDA4OUJFREI2MTlGNUVFNDI1QzU0RjkzNTk3MkZCMEZBQ0I2Cis6MTBGOUEwMDAxODJGQjlENUUyNzU3MEExODA3QUQ3M0RDM0JBMTlGODdFCis6MTBGOUIwMDBERDNBOEVDOThERjhCRjEwMTVFMjQxRjFBOTc1MzI5QzcwCis6MTBGOUMwMDBCMzIzNzc0ODk4RDcyMkJFQjdBMDlDRTVEQkRGNUUyMjQxCis6MTBGOUQwMDBFRTM3NzFBN0ZGNjQyQ0JDOUZDOEYyMDUyMDk2MDZFRjk2Cis6MTBGOUUwMDBENTU4RDA0RTcxMURGNkVFODNGQkM4RUVGNDFDNzI4MzIxCis6MTBGOUYwMDA3OEU4QTk3OUM3MEZGQjIyM0Q4NzQzNTMyNThBOTcyMUQxCis6MTBGQTAwMDA5RDE1MjcwQTU4N0YwMkYxQ0QxRTRGNTVDMjU4RDQ2RjVECis6MTBGQTEwMDBFNTk4ODdCMzlDRTdDRkY0NEVGRDhEMDdGNEM3RjJBMkJCCis6MTBGQTIwMDBEMTQzMDZDQjJGNzc5RDk0ODhBQUNCMzNCMDhFNTM3MUU4Cis6MTBGQTMwMDA1RTJFMjU4Q0U3QzU1QzI3MTU2QzI3RTFGMUNDMUZFNDExCis6MTBGQTQwMDBFM0JCRTZBOUFGNUUwQkYzRDg2RkM1N0M2N0EyNjg0QjNBCis6MTBGQTUwMDA2MDFEMURBM0RGNTQzQjcwMUQ4NEZGNUQ5MTMwRkVEREYyCis6MTBGQTYwMDAzQ0M4NEZDMjBCRDE5NDcwRTY0RjYyOUNDMzNCQjJBMzFCCis6MTBGQTcwMDAyQzE5RkNGMkQ0MEEyRjlFMUI0QzdENTg4RTlDOUIwNUEyCis6MTBGQTgwMDAzOERDMEVGRkMzNzNCNTk3QkU1QTQ1QzdERDAxQjI5MjhECis6MTBGQTkwMDBCNTA3MDlBNUVGMEU5QjY4QTdBMkM2QzNFRjNEQzRGNjQ0Cis6MTBGQUEwMDA0QjJGODMxODQzQkM2Q0VDM0YyRTNGRDI1RkIzNjc0NkFECis6MTBGQUIwMDBDN0ZGNDNDOUE1QUZCNkM1ODQ2NzFDRUFFQjhFMTk1NkNDCis6MTBGQUMwMDBDQzlGMzgzNTVDMTM0RTAxNTcxNzgzRUJENzU0MkI2NDBBCis6MTBGQUQwMDA0NEUzOEJFRjQ5NkEyRUQwREI5RDcwNUM4MEZBRDFCRjg2Cis6MTBGQUUwMDA0Q0FFMEI5NkE0QzNGQzgzNjNFMUY5N0M5NzM2NjQyQTgxCis6MTBGQUYwMDBBNUJGMUU5Qjk2N0IyM0M2NDkxQzk4RkY1NUZCRjNBMzBECis6MTBGQjAwMDAxQkUxQzg5ODZCRTYxMTRGMUJEMDhEQTIyNTRDODAzOEE1Cis6MTBGQjEwMDA5NUZCMEI5NDBCMjJDRjJEMEE0NzRBQ0ZGNDlCQjc1QjgyCis6MTBGQjIwMDBBMjc1OTAxM0FFMjg1QzM1QjgyQkI4NDMwNzY3M0JBRDgwCis6MTBGQjMwMDBENzcyQjhGRUNGMjNGNTk3QjUwMTdFMTdEQTkxMkVBRUI2Cis6MTBGQjQwMDBFNTNDRDU5NjRDQkEyMENGRUU4NEZCODE0QjgxMUU0RTBFCis6MTBGQjUwMDBFQ0IwNjIzMjZCMEYzNDgyMUVGNUQ4RDlERkY1NDkwQjU5Cis6MTBGQjYwMDA2N0MyREY3MTE5N0JEMDgyRjFCRDM3Mjk3RDY4NDAxRkU0Cis6MTBGQjcwMDBDMUYxMDg3NzMxREU4OTI5QUZBNkMwRjk4OTEzNjk0QTM2Cis6MTBGQjgwMDAwQUMwNjc3MUQ4ODY3MEZCODk0MjgyNzA3RjZBNEZEQTNCCis6MTBGQjkwMDBDMjY5MTVDODFGMkFCNjc3RjM3MTI2NEZENEZFNTE4MjY5Cis6MTBGQkEwMDA3QTlEOUZGRkQ1Q0U5NUUxQkVENDgxRjA2NURFQ0Y4N0VCCis6MTBGQkIwMDBGOEYwQjkyOTAzRDM0MTVCODUxREVGMUY2QTJBNUY1MTE1Cis6MTBGQkMwMDAwQzdBNjI3OTcyMjFFNjYzMzU1NTQ5QTg4NzlCOUEzRjgyCis6MTBGQkQwMDA0M0I4OEJGMTk1OTMzMjUxNzU3OTUzM0QxMDRENENENzA1Cis6MTBGQkUwMDBERDIzN0ZEMjg2RUQwRENEMjc1MDlFRDNFOUU0MDFERkUyCis6MTBGQkYwMDAxQ0UzRkI5RDVENTZGMkQzNUE1QTM2RkM1QkZFNjlBREExCis6MTBGQzAwMDAxM0Y3MkREQjQxOUYzNDkwM0RCNkU1M0E3OTQ4QkEzRjcyCis6MTBGQzEwMDA4OUM4RkY3MTE0Nzc3N0Q2QkMxODBGNzJCNjU2NzI1RjE5Cis6MTBGQzIwMDAwMjk3MEVDQ0VBREU3QjE5RUNFN0Q3M0FEQzk3QzBGRUYwCis6MTBGQzMwMDA3RjhFRjcxMTU2Q0Y3MTVGMDJGQkZENjMxRjREOUEwMzU0Cis6MTBGQzQwMDBGQkZCQjU1OUVFMERGMDk3NDFBRkYwMTZDREMxRjYzQzc4Cis6MTBGQzUwMDBGN0NCNTA5RjMxNkUwNkFCMjczMjNBNDg3OTM0N0Y4RTBFCis6MTBGQzYwMDAxRkY1QjkxM0UxRjI2OTdCNDI2MEIwN0I0OEFFNkU3RTRFCis6MTBGQzcwMDBDNjAwOTc3RUVEQjI4NDc5NTE5OEI4NDFFOUU3OUY2QjUxCis6MTBGQzgwMDA4NkIxN0I3MTBCNDI5OEE3MzU3MjFDOEJBRjY3QTRCMDBECis6MTBGQzkwMDAzRkM5MkJGMjc3RDM0NjEwMERGNjU3RDM5RTcyQjA3QjM3Cis6MTBGQ0EwMDA1QkRGMEJFNTAyRkNBRTdFQ0ExMTg0QjhFNEQyRkI5RTlBCis6MTBGQ0IwMDBCMzgxM0U5QTJGQUI4NUMwNTdCM0NCRUFDNjhDMkI4MzVBCis6MTBGQ0MwMDBGODQ5MDhFQjU3MzdFRkM2Nzk3NTRDNzBGM0ZCNzJGQkI4Cis6MTBGQ0QwMDA4QTIxN0U1NUNGRjM5RUVCNERGOUJGOEI5RDdCMzExRTY0Cis6MTBGQ0UwMDBCNzc4OUIzMUVFQjY4NDg0REYwMjNFNkRGOERERTA3OUIzCis6MTBGQ0YwMDBCRkVGNThEODNDMTQwRThGRjk3MkU4NEExQjlCRDdGOTE2Cis6MTBGRDAwMDBFM0U4Rjc5N0E2RjQ2MkRFQjFFMjBFNjVENDIxN0MxQjJFCis6MTBGRDEwMDAzQ0U4QUY2NEM2RTNCOTlBNUI4N0JFNUUxMkVCQkU5ODVGCis6MTBGRDIwMDBFRTE2QUFGRjI5Q0IzRERFQjIxMzRCRTc3ODgyRUIxOTIyCis6MTBGRDMwMDBBMjg0NkQ1RTNBNEUyMzk3Q0I5MzQyRUZEOEY0Rjk4M0I5Cis6MTBGRDQwMDA3MzM5NUM5Mzc2QjJGRDZGNzM1RUVDNUNEMDU3MDAxNzJECis6MTBGRDUwMDBCRUNGQkM3NEQ2MEI1MzAwMkYwMjlGMTcyNDkwNkVDQ0RECis6MTBGRDYwMDA1RjREMjE1RThFMTcyRkUwNDVDMDNGQkFERjRDREZDQkUxCis6MTBGRDcwMDA4QjQ1MTcwMkZFODRFNURCQzUzMzc5RDFGNzg0MDNFREFCCis6MTBGRDgwMDAyQkYzRkNBRkUzRkE1N0FDQTM5REQ3MDc5QTdGM0JENzgxCis6MTBGRDkwMDBCNzY3N0JGRUVENUNBRTlCRDcyMUY4NTgzQzE3N0M2Q0I3Cis6MTBGREEwMDA1RUI3OThGNzk5RDM1OUM4NzYzQTc0MjZFNDRDMjNBOURDCis6MTBGREIwMDBGMzYwNUM5NkNCMTUwMTY3MzE0RjAxQUY5RTAxRjI1RDk4Cis6MTBGREMwMDA5NUU2M0YxOEQ2QTM4NDJBRjFCMEZDNzY1MEE0MjBDNzRDCis6MTBGREQwMDBCQTJGQzQ5NDJCQTU3OTE3RjYzQkQzRjUwODc5M0JEMEZECis6MTBGREUwMDBCQTg0OUMzNUFGNEZDODVCQjE0RTIxNzdDNTdBQTc1MjE0Cis6MTBGREYwMDA0MTgyRjIxMEVFN0U5MEMwN0ZBODMzRDhDMzE1NzA2MkE2Cis6MTBGRTAwMDA0MUJGMEY2NEZGQjlBMTNFREQ3REEzQTFGRjBGMzI1N0IzCis6MTBGRTEwMDAxOERBMkY1NEQ3MThEQTJGRjJBQzMzRDQ3RkU0RkQ5NURCCis6MTBGRTIwMDBDOUFFREY2QzY4QUZENTFFMzRCNDRGMDk4N0E2ODFERDNCCis6MTBGRTMwMDBGREI3OTY2QUNDRTczRUZGQzNCRUU3QTAxRTZDNzE2M0I4Cis6MTBGRTQwMDA3RDRGNEIyNjk2N0I1QjU0RTRFRjdEMkQxRTJDRjdCNzQwCis6MTBGRTUwMDA3OEYxRjk3RkI1OTQ2M0Y5NDI4Qjg2NjVBOEM1ODdBNUNCCis6MTBGRTYwMDA1OTJFQ0NGQ0ZENjUwQUQ4RURFNUExMkVGNDA3QzY4RjBFCis6MTBGRTcwMDBBRkZCMENFNEUxMDE0QkEwMzU5MUMyRTk5QzM3OTk3REMxCis6MTBGRTgwMDA0RTAyNjY3REZDRTU1QjM3ODE1RTc3QjM3QkU4REE3QTBDCis6MTBGRTkwMDAyNzRCNkEwQzdCQ0U0NUY1OURBNkEzMTc1NzREOThDMEZFCis6MTBGRUEwMDBGRUIyOEJDNENFQkJGQzZBMUNDQkY3QzE3QzNENEE5QjI3Cis6MTBGRUIwMDA3M0VDRUM1RURCMzk3MzI0Q0M0RjlDNDNEODc5MDU1QTQ0Cis6MTBGRUMwMDAwNkVCNjhGQjRDODVGODQxRkZENzNBMTVEQzhGMjJGQzI2Cis6MTBGRUQwMDBGQ0YwMjU2QzlBNzBCRkJBM0YwRUY0Nzc1QTJBOUU1N0YxCis6MTBGRUUwMDA5QTBEMEZFOTdDNjU0REM2QkNENjRCQ0FGRjgyRjk4MERFCis6MTBGRUYwMDA1NzM4RDlERkNEQkE3Q0ZGQ0E3RkRFNDREQjQ5OUJCRkQwCis6MTBGRjAwMDA4QzlEODcxMEY3ODZCQzZFMzkxM0JCRTEyQjM4NjMwMERDCis6MTBGRjEwMDA3OUEwOTI5N0ZEREQ5NDY0QzVBQkY3MDc0NEY5RDc3MURBCis6MTBGRjIwMDBDQzFGOThEOUNBQ0YwQjFDMjQ2OEM3MDk3RUE0RUI2QkUxCis6MTBGRjMwMDA4N0Y5MEJCRUE4NzUyQkMxNTEyRUQwRjdFQkE2NDFGRjU4Cis6MTBGRjQwMDBGRjBCMjcwNDIwRTAwMDgwMDAwMDAwMDAxRjhCMDgwMDRBCis6MTBGRjUwMDAwMDAwMDAwMDAwMEJCNTVBMEI3NDE0NjU5NkJFRDVENTkxCis6MTBGRjYwMDBBRjkwNEVFODg0MDA0MTFFNzY4ODYwMjBBRjRFMjcxRDdBCis6MTBGRjcwMDBDMjZCMjgxMjQwNTRDNDQ2NjUwNzE0QTU0MDMxM0M5MzE3Cis6MTBGRjgwMDAxODk4MTU0N0Y3NzQ2MzMzMDhBQzY3MzczMzdBNUM1REFDCis6MTBGRjkwMDBDMUQzRTBBMEVDQUNFNzEwMjE3MTMzOUEzMDBEMkE4RjY5Cis6MTBGRkEwMDA1OTQ3QTM4MjgyNjZCMTQxRTRCMTI2NzQyNDI4RTI3MEU1Cis6MTBGRkIwMDA4RTdCRUZGREFCRThBRTRFMDJFODU5OTM5MzczRjM1Nzk3Cis6MTBGRkMwMDBGREY1RkZGRjdEREZGQjU1MkQzRkU0NzIwNzAxQTBCQTcxCis6MTBGRkQwMDA2QzREMUUxNDIwOUQyMjFEQjcyMTVEQkVGQTNCMzBGN0VCCis6MTBGRkUwMDBDM0YxRUEwQjYwMkUwNjk4MkFCRjE2NEMyRDAxMzg3RjBDCis6MTBGRkYwMDAwNERDMzY5QzNGQTY1RDNEQjNDQjg1RkY1Q0ZFNTE4MkExCis6MDIwMDAwMDIxMDAwRUMKKzoxMDAwMDAwMDAxMDBBQkVDRjgzRjhFQ0IzQUVCMkFGQUUyQkY0NUUxQjgKKzoxMDAwMTAwMDdBMzBEMzM1RkNGOTExRkY4QTBGMzQ4MTM5MjczNjFFMjcKKzoxMDAwMjAwMEY3N0RGRERCMzQ2RkI3NUYwNUIzMDVBMEQ5M0Y4NzY5NjYKKzoxMDAwMzAwMEQ4QkYxOENDMjMwMEY2RkE2Qjc4RkM4RTdGMzU4RkY3OEIKKzoxMDAwNDAwMEY5MDM0QzBGRjhENzMzRkRBQkJGOEVFRkJGRTc3RjlFQjAKKzoxMDAwNTAwMEM3RUZGQjQzNEM1QkZEREJGOTdBODNEQjA5RDAxRkUwODQKKzoxMDAwNjAwMDQyNkJDNTQwMzUwRjhGNDY2MzJGNkU2ODlGOUNFOTRCRUUKKzoxMDAwNzAwMDQxNkExNjc0MEUxREM4ODNENDBFOTY4QzBDQTQ3MzI0OEEKKzoxMDAwODAwMDk2MDc1RTBGNDAzQUQzQjA4QUY3OTc2N0JFQzVGMkMwQjUKKzoxMDAwOTAwMDFGOUYxREY5OUQwRERBNEY0NjNGMzM5NDAyREMwMzgyMEEKKzoxMDAwQTAwMEZGRDk2NUZGN0Q0OTRBQTU4MTlBMjNBMUJDRUVDREVDMUQKKzoxMDAwQjAwMDAzMUIyNTgwRkIyMDkwQkYwMEU5OUNDQTNBQ0I3ODg5QkUKKzoxMDAwQzAwMEVFNEY3MTlFNDI3OTQ4ODFDRjRDM0ZFNkEyNENFODY3RTMKKzoxMDAwRDAwMDUyNzc4QTA3ODU1M0JBREM2NDgwQTU4RUI1NTYxODBFMTAKKzoxMDAwRTAwMDgwNTIzQTExNDFGOTlBNDA4MjFGQjMwMDk2NDBEODBBRDMKKzoxMDAwRjAwMDc0RkY4Rjk2MTM5MTM4MzkyRjAzQzg4MjZDM0NGRjZCQzUKKzoxMDAxMDAwMDE2OUVBRjVGMDc3QTNFNkU1REI5NDI4NkIyNzQ5MjlCQ0YKKzoxMDAxMTAwMDhCRTVCNjAyMjJCQzlFNEQ3RUM0NURFM0EwRkRFQUFDMzkKKzoxMDAxMjAwMEI0NEVFMkJFNEIxREVGNTg3MUQwQzNCRUFERkNGQ0I1NjIKKzoxMDAxMzAwMEY2RDVGNTU0MDVCMDgwRTZBRkNENTRFQUY2RTBCQTJCMUIKKzoxMDAxNDAwMEZBQjQzRDIwOUI3QTkwODdEM0RDNzk2NTNEOTRDM0JGOTgKKzoxMDAxNTAwMDhDMTI3QTk1NTNBNkQ4NTUwN0Q5QTkwMzRDQThDNzY4MUQKKzoxMDAxNjAwMDQ4MEVEOTcwOURDNTU5NzVBOUI0MkUxQTY2MkFFMEY1QjYKKzoxMDAxNzAwMDI1MkQzMkVCMDNDQzhBNzkxMEVBQUQ1MkQzNUIzQjg0NTgKKzoxMDAxODAwMDNGMjFCRDU0NEVBODlDMDFBOEJGQzU5QjhDRkMyQzc1N0IKKzoxMDAxOTAwMDlDNjRCOTdGMEJDRDNERjI1QjA1NEY3RjIzQTc3NkU3Q0IKKzoxMDAxQTAwMEI3NkFDMjJEQTc2OUJEMkE0RDZFN0MxRENGQjVCQTRENjkKKzoxMDAxQjAwMERBRjE0RURDQkM5NUVFOTQ4QzUzQzlFNDU4MzA4NkU0RjkKKzoxMDAxQzAwMDgyN0NCOEMzRTQ2Rjg3NjRGNkI3REVFQ0UzOUMxRkQ4OEIKKzoxMDAxRDAwMERFMkZGQTYxQzczQjY4RkZFNzJFRTM4NTFCMDA5RTcwQTgKKzoxMDAxRTAwMDRGN0IzRTMwRTE5N0QzNUJCRjYyREYwNjM3RjkxM0RBMEUKKzoxMDAxRjAwMDA5Rjk5MUFFQzc3NTY4NDM4MEU3NUU1NzZFMEYwNTUwRTkKKzoxMDAyMDAwMDlFNTFBRkQzNENGQjQ3QTU1MDMwOTVGNDcyMDlEQzZCN0YKKzoxMDAyMTAwMDUwREU5MzlCRjcxRjIxM0Y5OTZDNzc4NDQ5NkVDODQ0NDkKKzoxMDAyMjAwMDdCQkM1RTI3QjU4QkNCMTM0Rjg2ODIyOTM4N0Y3QzVCRTYKKzoxMDAyMzAwMDQwMjZCNzFEN0I0ODBEM0E3MDNDRTYzRDA1MzU4RDcxNzMKKzoxMDAyNDAwMEU2MUQ5RjRDN0FERkU5NkY2MjM5RDRGQkVCOTlDNkZDNUYKKzoxMDAyNTAwMEU3MjZGNjMzMTg4NEQ3QjJBRkRGQ0ZFMDIxQkI4OUUyQkYKKzoxMDAyNjAwMERBNEFFRDRDQzEzNEE4MzM2MUMwRUE3MjRDOTM1MzkwMjIKKzoxMDAyNzAwMDhGQUUzMEI4RTk3QUQxMjE1NzkwQ0U1NURDQTZDOEE5MDcKKzoxMDAyODAwMDc4MkVFRjQ5MzU0OEU3NUU4NzZBNTA2QzE0MjcwMzcyNzEKKzoxMDAyOTAwMDVGQkM2RTMzNDNEODg2NzFDNDk2NjkwMjI1NEVBRTYzNDcKKzoxMDAyQTAwMDJGODQ4MjE0MDdGNUI4RDY5QzI0RUM3OUQyRTU3QTk5OEMKKzoxMDAyQjAwMEUyOTZEM0FBNkVERjgyRjI4NDM3OTNEQ0RCNUNERENGN0IKKzoxMDAyQzAwMEZEOTZEQkM0NzJGRjMyRERGNzk2MUIyOTM4NUMyMzdENzcKKzoxMDAyRDAwMEY5NjQzRkVEQUZCQzQ4RjZEMzkwRUNCNkUxNzM4OTcxOTkKKzoxMDAyRTAwMDVBOEY4QkZBM0FCQURDNzQzOTU2M0JCQjM4RUUyRjVGMjMKKzoxMDAyRjAwMEREQzU3MTJGNzFERjZBMTNBOEY1Mjg3NzRGODVBQkI4N0MKKzoxMDAzMDAwMDE2RDc2OTVGMDNGMzY3RTFCOENFODIzNEFGRkJGQzhGODkKKzoxMDAzMTAwMDNDRTVFRjkzQkQ0Qzk1MjdCNDJBNzQyRUE3RTlBQTc2NDUKKzoxMDAzMjAwMDVEQkRGQTFCREVCRkQ3RkJEQUZFRDUyRDVFRTc0MjQ3ODcKKzoxMDAzMzAwMEVDQkFBMzQ4MTI3MTFFQ0NDRTUzRjY5ODNFQUY1N0VGREQKKzoxMDAzNDAwMDEzM0JFNzE4RjJENkE0RUY1NTQzREU5QThDOTEzNkZFQTQKKzoxMDAzNTAwMDdFODVGRDExQzM3OEFBRjMzMUMzRkM1QjMyRDcxOEVFNUEKKzoxMDAzNjAwMERGRUFEQTYwQjg3RjdCQ0VFRjBERTMzQkRDMkYxOEU2RTcKKzoxMDAzNzAwMERGNTlCNkM1NzA3Rjk2RjIxRjg2RkIzMzY1NTAyNEY0QjMKKzoxMDAzODAwMEI5N0MyOTY0MjEzRjlCMEJGNTRDRTc0MTJCRDMwN0EwOTcKKzoxMDAzOTAwMDkzQTk4QTk2NDQ3NDIxQjg5OTNFMDQzRUE2MkIzQ0FBQTAKKzoxMDAzQTAwMDVDODQ3NjEzQjU3NDBFMjBCRkVGNzhFM0VGNzk2NDE3QTEKKzoxMDAzQjAwMDFEQkYxQUVGQ0M3MkM1RjJCMjlFQTc3RjZBM0VFRTYzRjQKKzoxMDAzQzAwMDQ1M0RGNTYwMEYwMzhBODREREVBRjFCRTU3RkQyNEM0ODQKKzoxMDAzRDAwMEZCNjgxMUM2MTMzQzY3QjQzMTk5RTM0QzM0QTU0RjQ4MTAKKzoxMDAzRTAwMDkyNjJGMTA0MkREMjQ0Rjk1OEY3NUIzREJFMTRDRjczRUQKKzoxMDAzRjAwMDdGQjA5MkZDRTgzRDE5NDZCOEJBQzc5QkE5NjYyQzBEQTAKKzoxMDA0MDAwMDNDNzRERDlENzM3RjdFNkNGRkEwMDkxNjkzOUQ2RDQ3NDQKKzoxMDA0MTAwMEZBM0FGMkQxNzc1RUM0RUM4QUUzQTc4MEY4NDA3QjlCN0UKKzoxMDA0MjAwMDNDNzcwQTQ0RjBGQTRDMjcyODIxQ0E0Mzc2Qzg0OEEyRjAKKzoxMDA0MzAwMDU4NzhCOTJCNkYzNjA2ODg5OURGQTNBMkQwOUU3RjQ4RTMKKzoxMDA0NDAwMDU3MEE0OURFODFBNzI2QTQ5RENBRDVFMkQyOERBOEJGNEUKKzoxMDA0NTAwMEUzMjZFNjA3OTY0OEExMTEyODhGQTYwNjMxQ0U1Rjk0QzEKKzoxMDA0NjAwMEM2RkNERDA3NjFENkUzRkQxMEIxMTBGRkYzMDEzODRFODUKKzoxMDA0NzAwMDJGMDAxN0QzMDc0MTYxN0RFMkNBQzkwNTE4OUYxNjM1QzEKKzoxMDA0ODAwMDk4M0QxQjkxQ0ZDMkY0Q0VFMUU0OUZGOTYzOEZBNjRCNTgKKzoxMDA0OTAwMDc4MkUyQ0VEMTRFMkE3RDAwNEVCQTlCRUQxRjlBOEQ1OTMKKzoxMDA0QTAwMEY4RDg1OEE0NTREMEY5MEFEMzVCMzczRTgzRkI3NzM2OEIKKzoxMDA0QjAwMDlBNjAyQkFFNzM3QUVDNjMwRjQzNUMzRURFRUUyOTlGQUQKKzoxMDA0QzAwMDRFRjM3NjQ4QTA1MDVFMERCNEQ4NDJEQkIyNjhGRkNFNDIKKzoxMDA0RDAwMDAxOTQwRkY0NzkyQjNDMTUzMzhCNzBEREQ5NDVDMEZBQUMKKzoxMDA0RTAwMDg2RDZCRjAwRTk2Nzk2NTNDODFFQTZGNDY3MTlFMDczNjUKKzoxMDA0RjAwMEMzN0NGOTNERjk2NzgwOUYyQjI0NTlERTAwRTI0MjE5NDUKKzoxMDA1MDAwMEVGQ0JFMzg3NUY3RjZEQ0VEQTNDRTYyNzQwNzVEQzc2ODQKKzoxMDA1MTAwMDhGM0E5RkNGNkZDNTU4NDBFN0RGNkMwQjZERTU3QUFCMjQKKzoxMDA1MjAwMDY2OTg4NEU3QUM3Q0M5NjZBMkZDN0YxNEUzMzNEQzBDREMKKzoxMDA1MzAwMEYwQjlERkNFRjQ3RkZDNEVBNjVGRjgzMzk5MUVGN0JCMEYKKzoxMDA1NDAwMDk4N0VFOUNGNjFCQUU4N0I2NDAwRjU3N0JBNDhBOTIyQzIKKzoxMDA1NTAwMDdFN0FFM0EzRjczODIzRjg4ODRBMzBBN0RFRDFGRDdFMDAKKzoxMDA1NjAwMEE1RTYwRjA1MEQyNzlGNEMyNjNCNjg5MkRENjRBN0Y5OTEKKzoxMDA1NzAwMDhENjg5ODc4RUU3M0NENjM0MjcyNTZCQzVDRDVDNzg5OUUKKzoxMDA1ODAwMENGODJBNjhGRkYzMEJFODQ5RTMzM0IyNTlDN0ZBRUE5RDEKKzoxMDA1OTAwMDZCMDBGOTZGRTJGOUFFQzhBM0M1MkFFNEExOUQ3NzQ3QzUKKzoxMDA1QTAwMDVBRUI0NjdBN0U0N0UzNzAzQTIxQzYxMTEwNzY0OEZBMzQKKzoxMDA1QjAwMDk0N0FFMjYzMEREQkM5QUY4QTQ0QkVCRkQzRDY1OUUyNTkKKzoxMDA1QzAwMDc0QzRGODAzMkEzMTMwQ0ZENDZBNzk2NkFBN0MzOTk1OEQKKzoxMDA1RDAwMEZDNjIxNkFEM0I5NkVDRkFBNjBGNjhCRkMwMDFFMTg3M0UKKzoxMDA1RTAwMEE4RDdGOUJFMzg3RkRBQTVDOTQxQTdGOTJENTYxRkY5NUEKKzoxMDA1RjAwMEQzOEU5NjRGRUVCQTFERTUzMDczRENBRDVFRDkxNTlCRjgKKzoxMDA2MDAwMEZGMzIwOUMxNEJGNjdERTlERjlGQzlFMEY5NEVEQTZBOTYKKzoxMDA2MTAwMDJFNkM5OUVBQzQ3OUY3RDlGN0JDNEIyMkI4REY3OTdDMDQKKzoxMDA2MjAwMDZBMUE4RUU3Njc0QUZCODgyRTcwNjU0RDRCQTczODAwMjMKKzoxMDA2MzAwMDIxN0VGRUMxOUNDOUZCQzhDNDY2Qjg2NzU5QTk5RTk4QjMKKzoxMDA2NDAwMDRDNEUxNTE3NzcyQkVDMTg2RjBDNzFCRTlGNjE3QzRCQ0QKKzoxMDA2NTAwMEU2NjBDM0ZDNUI1REQ5ODZGQkI3RTdFNDFBRUVFQkZCMTMKKzoxMDA2NjAwMENFNzAxNzFCRTY5MUJGNTJCRDhEN0NCMERFNjE5QjFDMjYKKzoxMDA2NzAwMDFBMjE5MTFENUNGODZDMTlGMzNGQjc4NEY4OEZBMkZDMjYKKzoxMDA2ODAwMEFDNTgzODlDMjlEQkYwREMzMzE0MzYxQUY3QTY5MjdGN0QKKzoxMDA2OTAwMDI2RDZCNUNCNUI1RURFQTdCODdBQUY2QkFCQzBENzM3REIKKzoxMDA2QTAwMDJDRjU1RUNGRjY1NjBGNUU2RjVEOEI3MUU0MEYxNDQ3MkQKKzoxMDA2QjAwMDBBREZCOEM3MTlDNDczRUMxODdCRTkwNjE3RjJGNzYxQjMKKzoxMDA2QzAwMDUxQ0ZGNTZFNTRBQjc3MTNFREU4OEFCRDRBMkU2MTNGRUEKKzoxMDA2RDAwMDA3NjVBMDdBNDhBRjdCMTNFRDA4RTA0OUFEMEUxMEY0MzIKKzoxMDA2RTAwMEE3RkFGQkNDOEY0NERFRkE4QUZDQkU1RkJDN0Q2QjM0N0MKKzoxMDA2RjAwMDU0NjRDODMzODU1NkNDMkZBODlGQ0VCRkM5QjA5NTJFNjEKKzoxMDA3MDAwMDVDQzY3M0U4N0FDODhFRDkzRjNDQjRFNURENDEyNTdDRjAKKzoxMDA3MTAwMDNENDA3NTZEMTVFNTA1NUMzRkQ5MjM4OTc1OTdFRjc5RTcKKzoxMDA3MjAwMDc3NTA0NkVDM0VBQzNBNkU5ODBGNEY0OEZCMENFM0I1NjEKKzoxMDA3MzAwMDU5QzZGMUQzOTNGN0M1M0ZERjVCM0NBQURDRjQ4ODU1N0IKKzoxMDA3NDAwMEM1Mzg1REY5QUNDNEY5MkFGMUJFN0U5RUE5N0I5MzE0MkQKKzoxMDA3NTAwMDhBOUJFNjY2MUJGNzUzNTU0RTA1MTQwNzU1NEQ5ODQ3N0YKKzoxMDA3NjAwMDdBQzhFQjdBN0M5ODJCNDM0RDRGNzE2RTgwQjZFRThDMzUKKzoxMDA3NzAwMEJENDkyMEZGOEM3NThGQTJBREQwNzkwMkZGMjVGMkNENDcKKzoxMDA3ODAwMEQxQkUwQUY4RTJGNkM5RjI4OEZBQUYyM0FERUU5RkJFRjkKKzoxMDA3OTAwMEMzNzkxRDdGMDYzNzg5QkUyMzREQzRERDgyODZEMzI2RUIKKzoxMDA3QTAwMDEzRTVCRjNFQzI1RTBBOUMxMTUzM0FEMkU4RTJFNDAwNzAKKzoxMDA3QjAwMEEwM0Y1NTJGNDkwOTk4MEFGMUZFRjBDRTRGRUNBOEZBNTgKKzoxMDA3QzAwMDUxOUU0MTJGRDg1MTZGOUY5OTRDODZGQzEzQTU5ODg3NTUKKzoxMDA3RDAwMDYzQ0ZDRUNDQjk5NDdGNkVERjlCMTQzNkZEMEM3RTNDOEMKKzoxMDA3RTAwMDU0NzMyMDJEMkMxNzdFRkYwMEQ5OEREODQ3MDFGNDhGMkMKKzoxMDA3RjAwMEVBREY4MUJFQUY0MjcxODJGOEE3RjEzMkNGOTBBM0NGN0EKKzoxMDA4MDAwMEUyQkFENTA3NDUxQ0MwREI4RUM0N0VGNkJFQjg3RTE2QTQKKzoxMDA4MTAwMDM2MDlGRkI1RTMyRkQ1M0I1NTEwOUFFNjIwREMyMDhDMzYKKzoxMDA4MjAwMEZFMEZCRjlDRkZDRkY0MzgzMkI4Q0UyMTNGQkZCOUJCMUIKKzoxMDA4MzAwMDVGRUI3RTVGN0Q1OEY4RkRGOUU2NkYzRkEyMzg3RjFFQzMKKzoxMDA4NDAwMEYzNUZCQ0RGRUI3MkQzRkRCREZBNzk5OUZENTJCRjdFMzkKKzoxMDA4NTAwMEFFNTk5RTFFRUE0MUNFNjVCQTVGMjk2RUY2RDc1QUE3RjkKKzoxMDA4NjAwMEQ4Qjc3NkUyQzVCQjI4Q0ZENUI2QTA4NkE0RUVGQkU4MDQKKzoxMDA4NzAwMEI0N0FCRDBDQUVCODdENzZFQ0I2MkQwRTM5NjI3QzQ0RjAKKzoxMDA4ODAwMEY1RkNEQUYyNkRGQUU0M0M0MUQ3NTBGRTg1M0EyREZFRDQKKzoxMDA4OTAwMDg4QkEwNkYzQUEyNTgzRjJFQTJDQzlCRDBEQzlFMTk2RjAKKzoxMDA4QTAwMDgxRTUyNEJGQzMxMjg0NUQxRTVFRTIxRTNCOUVFRjZFOTcKKzoxMDA4QjAwMEIxMUM1RDc3NTA3RDA2OTkzOTY2REFFNzJFNERBRjc3MkEKKzoxMDA4QzAwMDZCRjhEMkVDOTZEOTIzMjhERTdGRDJCMEYwQjA0MjUxM0IKKzoxMDA4RDAwMENFOTNDREZCRkQxQTAyNUMxRjFFNEVGMzBENUQ4OUU3MjIKKzoxMDA4RTAwMDlDMTkxNDc2N0UzOEFEQjM5REYwQThDMzEzOTNBNUEwRDAKKzoxMDA4RjAwMEM0RUJBRjhEQUZGRjBFNUI3QzQzNkI5ODJGMEQ5NzUyMEYKKzoxMDA5MDAwMDQ2Q0IzRjI2RkY4NDdFNTk4QjhCQThDRjgwMjRGQTNCQjEKKzoxMDA5MTAwMEY2MDNGM0EwQTcxOTY3NTgwMkExN0QwQUVFNUJFNTBFNjYKKzoxMDA5MjAwMDczOURCQTBDMDQyRTkwNThERjU3NERGOERBNEFGOTIxMUUKKzoxMDA5MzAwMEIxMUY5RERDQjRFNzg4NTREMDAzOEU5MTYwQjdEN0MyNTUKKzoxMDA5NDAwMDJEMTJGQkUwREVGMDg3MUZEMjdEREIzQzcxRjg2MTYyODcKKzoxMDA5NTAwMEJEN0VBNTJFRDVFQkFBNkRDOUExQUQ3ODlFQjcyN0ZFQTkKKzoxMDA5NjAwMERCQjk2NTM4NUVCNTJERDk0OTdERjdEOTk3NkMwMThBMTkKKzoxMDA5NzAwMENGNjdCN0RBNDIxMkRFM0Y5QkRFRDk0NjdEQzhEOTlERUMKKzoxMDA5ODAwMEY5NkU1QzAxMkE0REFFRkY3QzhERjJGQzlGMkM2QzE3M0EKKzoxMDA5OTAwMDAwNkVFMTFGNTdFQ0Y0RDE2MzE0RUY2QUI3QTU0ODQwMkQKKzoxMDA5QTAwMEY1QjUyQUVFRUIzREEwRkM2QTBBRDcwOTRCNzYwRDBBOTUKKzoxMDA5QjAwMEQ5QTQ1ODlFMjFGRjcwNjE2OTcxNjY3MzkyNDI0NUZGMDgKKzoxMDA5QzAwMEQ5MDM3N0Y3MjVGQ0FBRERGNEZBMzBDNkMzRTQyNzhFRjUKKzoxMDA5RDAwMDNEODZDRjJEN0IyNUM1NDNGNTA0RTQwMUVCNkRGMUQ2QjMKKzoxMDA5RTAwMDUxNUJBODNFN0VEMUEyRUUyN0ZFMkI1RUJENjM2MDE2NTIKKzoxMDA5RjAwMEFERkY3MTdGMjA3RUEyQ0RCQjA2NTA3RDE0QUJEQjdCQUIKKzoxMDBBMDAwMEFFRjdDRTM3NjdGNzg1QkM5ODlDNzQzQzcxRkQxRkQ3NTUKKzoxMDBBMTAwMEY4NDhFRkM5OTI4QkFGOUJBMTQ2MTk0Qzc2RDEzNDBCQTUKKzoxMDBBMjAwMDY4NUQ4RjJDMjlFNDk3OUQxQjkyQjk0RTREQjRCQjYzMzIKKzoxMDBBMzAwMDFFRDFBNzJDRDdGMTg3N0U2MENGMjRGRjUxODFFNTEwMEUKKzoxMDBBNDAwMEREOTBCQjc1MjNDQUU5M0I0RkJBOTZBRjNCNDdERTk1QjUKKzoxMDBBNTAwMDFGNkY5RjZENTU2RjkxN0Q2RUIyMzEyRUQyOUU2NEFDMkIKKzoxMDBBNjAwMDFCNzRGQUJGOUUzNERFQTdEMjdFQzE4MDQzNTRBREJFNTQKKzoxMDBBNzAwMDY0MUNFNzYxQkY4N0NGN0I4MkFFRTI0NzkwQUVENEU0Q0YKKzoxMDBBODAwMERGMzVEQUQ3RTFDMUU3OTdENkZGRkU4REY3NTgyRTlCMDkKKzoxMDBBOTAwMEZFRjEzM0RBRjc4MDQzRTAzMUVGMDlGOTI1RjYwMzk1RUIKKzoxMDBBQTAwMDc2ODE3QjAwNkNFMUYzRUFENzRGNkZGRUI0ODBFQ0YwMDcKKzoxMDBBQjAwMDc0NjNFRTQ4RDJFMzQyQjlGNUQ0OEJDOEU3Qjk5NEQ2NTMKKzoxMDBBQzAwMDYzOEYyM0RENzlFMDIzRDY0QkUyNzkxM0YxOUI3NjQ5REUKKzoxMDBBRDAwMDYyN0U5NzEzMUY3OEZEMUVBRjRGMkVFRUNGRUVDQzdEQkEKKzoxMDBBRTAwMERDQzI4REY5MkNCRkE5NzI1RTVGRDI2M0Y0NkMyRkZENUUKKzoxMDBBRjAwMDhBNzY0RTdEN0RGRDdDRkFGQUZBM0M2N0IxRDBEN0ZCNTEKKzoxMDBCMDAwMDFBRkVERTYxNkQzRDQ3RkFFRDc4MjM1NzIyN0NGMENBNkMKKzoxMDBCMTAwMEY1RjRENjgyQjQzODdCRjlBNTcwRjk3QjM1N0NFNDg4OEUKKzoxMDBCMjAwMDY5Q0Q2RkFDNjg4RkVERjVDRjU4RDRGOEI4RjcxM0YxRjUKKzoxMDBCMzAwMEY4MkJGNUEwMDIyRUU3MDA5MTRBMzg2RjIxNzM2NjFDNEUKKzoxMDBCNDAwMDRGRDRDN0U0MEMzODlFQTAxRDRGQTJGM0EwNUY0RUQ0MzMKKzoxMDBCNTAwMDI4MkM1NTMzMTk2RkE3RjU5MDI2NDE4OEM3QzFDOTZFNTcKKzoxMDBCNjAwMDE3RDE0OTkyOEY3MTBGQkQ2Rjk4MDYzNTQzODgwRjkzNDcKKzoxMDBCNzAwMDNEQzIzOEUxNUFDMjI3QjE2RTk5OURCNkVFOEUyQ0RDOEIKKzoxMDBCODAwMDZGNkQ3RjU4NDdGNUNDNUE4QkYwOEJDMDgyNjRFRUU3Q0YKKzoxMDBCOTAwMDc0MzlFOTc5MDY5Qzc5ODZGQ0IyRDYwOTJFMzNBRTMzRDYKKzoxMDBCQTAwMEM3MENFQjJERTk2MkRFOEQyOEU3QzMwNzE2QkU0QkI4RjQKKzoxMDBCQjAwMEVCQTdFNjlBRkVCNEVGNTFDN0IzRjk5Mjg5RUFCQzUwQUQKKzoxMDBCQzAwMDBBRjU4QzlGN0RGNDI3RUZERjcwRUVFN0EwNENBNEJBMDYKKzoxMDBCRDAwMEUyOUVGRDc2OEVGQjg5RjhDNDIyNTA3OTVDMDkxMUNCMjgKKzoxMDBCRTAwMDA1N0NFRThCQjEzRjZDREIwQjMxQkVCRTE4Rjc1RDIzOEQKKzoxMDBCRjAwMEY1MDlGN0E1M0RFOUE1RTcwM0U1OTA0Mzc5RTk2MjUyRDgKKzoxMDBDMDAwMDZBMDFGMUIzREEyRUU4QTM3RDUyQjcxMjNERUI3NDA0MEEKKzoxMDBDMTAwMDA4OTdCRDk4MzQyQzQ0RjlGNDQ1NDk3RDgwRUMxOTlGMjAKKzoxMDBDMjAwMEUzM0UzNjcwMkMzOTQ0RjlFRTUxNTlBRDYyMUMzQUNEOTEKKzoxMDBDMzAwMDBBMTJDRThGRjZEN0U0RDIwMTJDOTdBODQ1OUJGRjhERTAKKzoxMDBDNDAwMDhCQzcyNTE1MUVDNjI5RTFBMjhCRTNGMkY4ODRCQzUzOUQKKzoxMDBDNTAwMDkyNkIxMkZERDk4RjYyRkVDNDRFQjMyMUVGOTQxNDZBRDkKKzoxMDBDNjAwMDc4Q0VERjVENUNBNzRFRkFERTdDRDVCQzc0Qjk1OEY0NTMKKzoxMDBDNzAwMEJCMjVGRDRDMzUzREQ1OEJDRjY4Rjc4MzEwOTYwNUNFNEYKKzoxMDBDODAwMDIzRUE4NUYxNTdFQzRCOTE0OThGNTVEQUI4OEFGMjFBNkQKKzoxMDBDOTAwMERBNTUzNEQ1MUU5MDkxREZGMUNEQzJDRUM2OUJDMzdCMTEKKzoxMDBDQTAwMDg4NjI5NDg1RDU1NDVGMzQ2MURFRDNDRjgxNzEwNTMyN0IKKzoxMDBDQjAwMDczRDkxRUM2RTk3NjhBNkJDREMzNzlFQkE0MUFFRTYzQUQKKzoxMDBDQzAwMEVDNTRENzIwREQyOEI1RjIzOTdFMDU5RDRDMTUyRDlGQkIKKzoxMDBDRDAwMDk3ODM5QkU5MTRGMDMxNDUzQjY1M0ExREVBOThERTA2OUYKKzoxMDBDRTAwMEY1NEM2NzQwQUJDOEZGQTNDMzQxQ0U2QkYwODQ5M0ZCQzgKKzoxMDBDRjAwMEMxNUIyQjRENTQ3Nzk0RkNCQUU3RkVBMTUxOEIyN0JEMDUKKzoxMDBEMDAwMENCMDExREFGRjRBN0NCNjExQUEwRkY2NUY3MjA4RjIxOUYKKzoxMDBEMTAwMDM5MUM0NzEyRTU5MUU4QTcxMzIxMjJCMzlGNTI4MEM4REUKKzoxMDBEMjAwMDI2RkNDMEM1RkU1QTAxMEE4RkE3NUVBNzFDQ0EyMkFBQ0MKKzoxMDBEMzAwMDk5RjE5QjQ0Nzk1NEY0NkMxN0JCMzVCQkE4MjU1QkVCNDgKKzoxMDBENDAwMDFGRDM1MzU3QjE4QkM3QkFCRUQwQkYzMkE5MEU0REQ0RjMKKzoxMDBENTAwMEEzN0VCRDI0QjlCQ0NCODVBMUY4QjM1RDI3RTc5QTMxNEEKKzoxMDBENjAwMDJGOTUxNDk3QUZDQ0M2NzE3QkYxQjc3M0NEOThDRjRBNEUKKzoxMDBENzAwMEM2OTdFRjFBOEVFMzczQkJCRTEzRTNDMkYyNjI4QjFCRkUKKzoxMDBEODAwMEJCOTgzNTE3RTc0RUMxRjkyQUY5NjcyMTUxRjQ0MzhBMTgKKzoxMDBEOTAwMDY3QUFFODhGNTc2OTc1OENCQUU2Mzc2RTI3RkE4QjNBREYKKzoxMDBEQTAwMEQ0RTEyNjNFRUQ1OEVDMTMzRTJBNjc4QkY3OEVDM0E2OUUKKzoxMDBEQjAwMDg3Rjc1QTcwREU0OThCN0E5OEZDNzc4NTNEOUNFQTQyMkEKKzoxMDBEQzAwMEY5QUY1QTMzNzUyMDg1Q0VBN0FDNjJCRUNEMjY3MDVBRDYKKzoxMDBERDAwMDlEM0ZCQzFFNDhDMkYxQ0U5REI5MkJBNUUxRDczRTA3NzEKKzoxMDBERTAwMEFFRkYyNUFEQUZBRTE5MTEyMEZGNTUxQjI1QjdEMDZDNTYKKzoxMDBERjAwMEY5QzAzOTI4QzNGNjU2MEIxMDZFQUFFRkY3RTQ2OEY1NzAKKzoxMDBFMDAwMDBDRTc0Nzk3OUJFM0Y3NjBBRENFNjlERjk5OUI0QjdBODAKKzoxMDBFMTAwMEVBMkExNjM4MTg2NDY0MTU5MzFDOEY4RkY2NzVEMUZDNzYKKzoxMDBFMjAwMDY4OEFCMEI3MkVDQUU1REVERUU5RTAxMkU1MUI5QTlGQkMKKzoxMDBFMzAwMDc4M0RGQTE1MUUwMDlGMzc5N0E4MTdFOTdFNzVGMjY1NzEKKzoxMDBFNDAwMENFRkJFNzhBM0U1RTE3Qzk4QUQ5QUQ4NDRBOUI4N0ZDRjAKKzoxMDBFNTAwMDA3MTUwODU5MzkzRjRDNzA1RUE5NTMyOURFMkRDMjc1MUMKKzoxMDBFNjAwMDUwMUUyNTNFMzU0ODIxNkVDQ0JDQ0U1MjhBQUJCOEFFNjIKKzoxMDBFNzAwMEE5MDRGN0E5QjY0Njg2MTVFMTczQ0ZERTdEQ0MyQUVDMkUKKzoxMDBFODAwMDZFODhCMDNCMkQyRUI1RUMzRUY4Rjg2MDMxRjQ0MTlDRjUKKzoxMDBFOTAwMDlGNTVFRkJFRjREREU3MjhCRkVBRjMwRTM3NEQ4RkY5MUIKKzoxMDBFQTAwMEQ3MEIyQkI5REYwNDg3MjE4RUU4N0UzN0FFQzlDNkY1OTQKKzoxMDBFQjAwMEY2RjhFNjUxOEI2OERFQzQ4RkRCQjI4OUFGNDk2RDExNUQKKzoxMDBFQzAwMDdFOEYxNjZERjk3NEIwMzg4N0RFODc1Qzk0N0U0RTNFNTcKKzoxMDBFRDAwMDNFQURFNTg5RDM3NjkxMTdFOEJEMzBGNzdCOERFMkJENTUKKzoxMDBFRTAwMDcwQUQ4NjczRDZCNjQ4QTEwMEM3MUZEMTNGMkZENkY4ODQKKzoxMDBFRjAwMDVCNzFCMDcxMUZFMTI3OEIzNzNEMzg4M0VEMjgyNEZBRjEKKzoxMDBGMDAwMDBBMTdGRTUyNUM1ODdBNDRGNENEQ0JCNjFCRkI4RDZBQUYKKzoxMDBGMTAwMEVBOUI2OTNFODRBRDY0MEYyQkVBMTNFRTZGQUFFMEJFMzQKKzoxMDBGMjAwMEI5M0EzRUZFRjdEMDM3N0I0QjM0N0M2QzI4MEM2NUJFNUIKKzoxMDBGMzAwMEU0Nzk3REQ1MUVFMjYxNjI1RjVDMDVDQTg0MTJBRTdCRjYKKzoxMDBGNDAwMDdEMzJFREVGMzVGNzhDM0ZGNDJGRDBERjkzODlGQUJEN0EKKzoxMDBGNTAwMDUyREI5QkU0RTQ2MEI5NThCOTlGQThEREJDRDJFREE0OTQKKzoxMDBGNjAwMEIxRTZCNzVCNENENDUzRTNDNDc3M0U4MEY4RTc3NDNGRjcKKzoxMDBGNzAwMDVFQjI1RUUyQkUwMzM2RjU2MzFCMkM3Q0M1QTYxMEJGRDUKKzoxMDBGODAwMDg1QUYwQ0U0M0UwNEZCMjVBRTBGQjdCQzYyNUI0RkUzQkMKKzoxMDBGOTAwMEUwRUZGQTA0RTQ0MkMyQTEzQjZGMjAxQzI2OTg4NEY1REUKKzoxMDBGQTAwMEE2QzBGMzQxRjIzMDBFQzNCOEM4MjMyNTVBRENEN0VBRjUKKzoxMDBGQjAwMDAwMDgxNzE5RkFGOUEwOTZGRjZCNTM0NjBFQzRDRTM5RjQKKzoxMDBGQzAwMDM2RUZDMDIwNDM3RjEyRDRFQUVEMTIzQTI3RDU4RERCRUQKKzoxMDBGRDAwMDZGMTBGNzkzMDQxRjdCM0VGQzg3NjRBQTdCMUJDREJFN0EKKzoxMDBGRTAwMDY0QzJCNUNGMUYxQUNFN0Q0QzZGNzJGNzYyMUE4MkFCMDYKKzoxMDBGRjAwMEJDQTdGNDdFM0EyM0ZCNkE3QTJCNzlERTJDRTRBNUQ5RDAKKzoxMDEwMDAwMEVEOUI3RTA1QkVCNEM0RjRBMkYzMzc1NTdFQURDMjRBNTMKKzoxMDEwMTAwMEI4Qzg0M0UwMjQ5Q0E0RjZFMENCNDEzQkY1ODUxQjgwOTcKKzoxMDEwMjAwMDExODhGMzIwRUNGOUZDMTkxM0JGNzcyRjg1OUM3RjlENjUKKzoxMDEwMzAwMDgwNjNFRjE5QjMzQjg0Q0YzNzY4NzE5MURFM0ZCQkUyMjkKKzoxMDEwNDAwMEVDQ0NBNkUxQkY0OUFFM0VFMDhBRUJBMzkzNzNEMjBEOTAKKzoxMDEwNTAwMEUzMTRGNzBEODZFN0ZBOTYwRDM3REM0Nzc5NkZBNUY1QUYKKzoxMDEwNjAwMDIxQTBCNEU2OTVDNkVBREUzNDY1QjRFMUI5QTc1MkE3N0IKKzoxMDEwNzAwMDFENjBCRjZGN0Q5ODcxQTk3RUQzM0RDNkYzQzhDRDMyODgKKzoxMDEwODAwMEM1MDNCODIwRUFBNTMyRkMyNTdGMUIwMzgxMjBFOTYzNTQKKzoxMDEwOTAwMDVDQkJCMThFMkE4QkQ0NzFERjk4NzRDODZDQzAwMTZDQjQKKzoxMDEwQTAwMEQ3QzBBNUI2OTA3RjUxOUMxQzAyNDM0NERDNDg5NEI3M0UKKzoxMDEwQjAwMEYxRkI4QkRBODMzMkQ3N0JCNTQzQjE1MENERUE0OURFMDEKKzoxMDEwQzAwMDM3MTlFNEFERkJBMzJFRjdGRTNFQTNEQzA3Q0UzMUNBRjEKKzoxMDEwRDAwMDdCOTA2QTk0RjdFMEM1NDY3OTBGQUQzMUNBRkJDNkQ1NUYKKzoxMDEwRTAwMDQ2Qjk2NjA1OEM3MkNDNUUzRkNFMzA3RjQ0NURCOTYxRjcKKzoxMDEwRjAwMDdDRjNGM0I3MTlFNjhGMEFERDY1MThFNzZFQkZENzMwQ0EKKzoxMDExMDAwMDNGQkY3RUExRTE3RTYxRDNEMkVCRDI3RjUxQjhENjMwMTIKKzoxMDExMTAwMDJGNTFGRkM1MDc3RTdCNTVGRDA3RjA1N0U4MUY1ODFGNkQKKzoxMDExMjAwMDY1QTg4RkIwRUJGRkNGMEU0RUU4NzE1NkI3ODNFQjhDRkUKKzoxMDExMzAwMEIzNkY5MkNGMzI5RTMwMjExMjIwM0IyODRCNjYzQjk5RjEKKzoxMDExNDAwMDk5MkNFMkNFRkIwN0NFMUY1MjcwRkM4MUFCRDg5MjQ5OUUKKzoxMDExNTAwMDc1OTY1NjNGRjhCNDM4QTRGNzMzODk3REUzOUQ2NTUyMDAKKzoxMDExNjAwMEMyRkJGRTI0QzNGQkZFNkI3RDU3RTc2RDBEMUJDNjQ1MUUKKzoxMDExNzAwMDg3ODBCRjlCRjExQzcxQkY0REQ0N0I1MjYxQjhBQkY0MkIKKzoxMDExODAwMDRDQ0REQjQ0Qzc1RUUwQjREREFENUZENUJGQ0Y0QkVDRUIKKzoxMDExOTAwMEI3NjBGOTIxN0VBRjM4NEY3RjJGNDM0RTUxREExRDlGNDQKKzoxMDExQTAwMEQ0RkIzMUJEQ0Y0REVDN0ZGNUJFQjc3QjlGMjZFQTk4Q0YKKzoxMDExQjAwMEVFRkQ4NjNCRDNDQzc1QjRDQTc1RjU3RTQ5NjU5QzczNEMKKzoxMDExQzAwMENCMjg3NUIwRDc0QjREMDBGNkM5MjZFQTkzMjM0MTIxQjEKKzoxMDExRDAwMDRDMDVFODNENzQ5NEZFQTcyMjI0RjBDQ0JEODRDNzQ3OUIKKzoxMDExRTAwMEQzODBGMTczNDVBQUJCMzc5MEM3Qzc3NzQ2NEEwNTdDQzEKKzoxMDExRjAwMDQ0M0ZDNTVFNzU4NDE3RjU3QTQyNzJBRTJCMjY3QzYyMzkKKzoxMDEyMDAwMERDRDdDM0E4MUVDOUYxOEEzQUNGMjZBM0E0MzAyRjBEN0MKKzoxMDEyMTAwMDlDQTcwMDVERkYyMTVEMTlFNUY1QzZGMDkyREVFQzI2ODYKKzoxMDEyMjAwMEYxRkJBNDA2N0Y5OEE5RDlFOUU2RUY5NzEyRjFDNTg4RUEKKzoxMDEyMzAwMEM5QzVGNTY5RTBCNzEyN0ZGN0YzMzUxRDZFNkNBQzhFNEEKKzoxMDEyNDAwMDM5QkZERUMyNzUwQzY4RkRGQ0ZEOUFGQzc1REM2MzlFM0YKKzoxMDEyNTAwMEM2Q0YwOTVDNjIzMUU2RTVGQjlCRjZCMzVFOTY2NUI2RTgKKzoxMDEyNjAwMDZCNzg0OTBERDdFMzBGMEU3MTc4Rjg3QjM4QTVEODJEMzAKKzoxMDEyNzAwMDcwMzIxRDA3MTkyQ0ZGOTRCQUVCNUFGQzJGQ0IzQzZCMzQKKzoxMDEyODAwMEMwQTFFMEI1N0VEN0Y1QkUzQ0M2Qjc1OEZGQzQwNjgxMDUKKzoxMDEyOTAwMDY3OUVEODMwOTRGMUYzRDhGQUU3MTg4RkJBQkZFNjQzQzcKKzoxMDEyQTAwMDgzN0ZDQzVGN0RENEUwMEYwQjAyQzcwREY3MjMxOTlEMjAKKzoxMDEyQjAwMDE2QzIxRjIzNkYwQzlBNzYxRkNBQUZBM0QxNTY0QUZBRTMKKzoxMDEyQzAwMDQwM0I3ODk4RjRBQUFGMUZEOTkwM0I4NUY2QkQzNjlGNzYKKzoxMDEyRDAwMDVGRjMzOURBRkNBREFDNUY5RENGNjNGRTIzM0M4RUY4NDMKKzoxMDEyRTAwMDIzMDlERkE3MDkzRTc1OUM0M0E3RDZCRDkwNjNBNkY3RTcKKzoxMDEyRjAwMDg5NTIxRjM3RTFDQUJERTExRkJBOUY5OTRBODdGMzNBNjUKKzoxMDEzMDAwMDE3NERBRTUzMDIyN0FBMTk0M0Y1NUZEQkU0MDFFNTc0REMKKzoxMDEzMTAwMEVFQjZBMTU2QjNBMDIzQzU3ODUwOTk1RDhDQTc0RDI3OTIKKzoxMDEzMjAwMDFBQjUzOEQ2MTMyRUQyMjY4OUVGODlFNjQ5Q0E0QjBCNTcKKzoxMDEzMzAwMDcwREZDNzQ3QTk0RjkxM0Y1NDJGRUQyQzIwRkZBQjJFRjQKKzoxMDEzNDAwMDhDM0MyMEUxRkE1REZERDU4RDI0MUYwOURCOEI0MUU5NDIKKzoxMDEzNTAwMENDMDc3Rjc3NzZDNjE0Mjg5MEQwNTVGNjc5QkZCQzk3MTYKKzoxMDEzNjAwMEZBQzQzMzdEMDJFN0E4NDJEOURENzg0QzhDQURDMjFGQTgKKzoxMDEzNzAwMERGRjcxRTYwRkYzQjg5OEIxMTlGODEzRjRCMDI5RjcyRkQKKzoxMDEzODAwMDQ0QUNCMzcwOUQ4Q0ZFRUE3M0I0MkY3RDRGNDZFRkY3RUIKKzoxMDEzOTAwMEU4M0FEOUE3OEU5NzQ2MkRBMjRFOEM2QUY1RTI2NkFGNDEKKzoxMDEzQTAwMEE4Njc1RjRBQTA0RDU0RTMxMkZFNDg5NEUzRjVEMzIzQTcKKzoxMDEzQjAwMDA5NEYzRkJGQzkwNjU0REZFMkZFOEFBOTI0RjZGRENBRTEKKzoxMDEzQzAwMDAwRTQ4NUVBRDg3N0FEQTJDRkY0RkNDNTE2QTYzOEE1MEYKKzoxMDEzRDAwMEUzQUFBRjdCQjM3OEJEOEM2QzgxOTc2NkZDMzNDNjJERDYKKzoxMDEzRTAwMEYyQzM0OEVCQjA1OTI5NzFFNzNEMDQ4QzYzNzcxMDFFQjYKKzoxMDEzRjAwMDFEODc2M0JGRUUxNUZEM0EzQzI0RTI1RUM3ODZDMThDQjMKKzoxMDE0MDAwMEI3QUYzODc4RTIxOEM1QUY3QkJDNkEyM0M5NzVBMUM5RUMKKzoxMDE0MTAwMDU1Q0FERjY3QTVFRTYxREM2Q0JGRDdDNUZCRTI3OTk5RTEKKzoxMDE0MjAwMDVGOEM0MzZCNDk0RjJCRUMxMUM2RDlBRTg1QUJGN0M2MjkKKzoxMDE0MzAwMDdGQzdBMkQ2RTdGMjE4NDc3NjE1OTBEREU4RkJFMjM5QzAKKzoxMDE0NDAwMEY2N0JFM0YwNkZGRDFDQjE3NUFFRUUwNzNBM0VBQzhGNTQKKzoxMDE0NTAwMDRGNkY3RTZBQTQ4NkVGQ0ZGN0Y1OTA1RjhGNjk3MjY5NTAKKzoxMDE0NjAwMEIzRjQ4Q0M3NUZGMjhBRjc3OERERjQ3MzMzMDBFMUZGRTEKKzoxMDE0NzAwMEI2M0U5OEZCOTE3RUVEMTVGQzc3Q0M0NTdFMThERjUwOEIKKzoxMDE0ODAwMDhBNDhCRjJCRUU3MkI4NDlDRUZBRkFCODhFRkFGQTU1RUUKKzoxMDE0OTAwMEY2RTkxQUVERkI4QUY4NUY1QTIzRjA3QkZEN0U1NDEyQzEKKzoxMDE0QTAwMDdBMEQ2QzEwNzhFQThBREQ0NzhGM0Q4RUJCMkM3OTM1M0EKKzoxMDE0QjAwMEJGOThGMjgxRkU3Q0EyOUM1MUJFMjNGOUZCM0I1OUJDMzQKKzoxMDE0QzAwMEZGNDJGOTlFQTdGNTEzNzFGQjlGMkJEN0U4NTBGMTlFQzEKKzoxMDE0RDAwMDM2QkFFNUQyMzBGQTNFNkQwNTdEMEY1NzQwRjYyMUYwNjEKKzoxMDE0RTAwMDJGNjgzMEUyNUEyOEFGMDBFMTFCRERERjZCMDFCRjFGMjAKKzoxMDE0RjAwMEIzNjlGOUM0QTYzRjNGQzQ2Qzc4QkUzRUM1OTc1NDhBMTEKKzoxMDE1MDAwMEU3N0Y0MzhCMUIzODNGNjRBMkVGQjlCNUY4RDRBMEY1NTEKKzoxMDE1MTAwMEREODlGODRCNDNBQkMwNEQxQjMyQUQ1QzQ3NTNGRDQzRjcKKzoxMDE1MjAwMEY3RjVGQTY3RDU4NzAyMzc1RDk1MjVFQTZDM0EyN0U5MjIKKzoxMDE1MzAwMDU5M0FCMjhGRUI4NTJCQjhCODg0RjkxRUU1OTg2RTU1RjEKKzoxMDE1NDAwMDg3OTQ5MjNGQTkyQjM5OUZDOTM3QTI5RUU5N0RDODVGMzYKKzoxMDE1NTAwMDZGRDM3MDA0OTExRkJENUEzRUY0RDIzQTc0QUVCQ0JFMzQKKzoxMDE1NjAwMDlDMjc0QkI0N0RCMUJGNjBGQzZFMkNBODVBRkRBMEUxNTYKKzoxMDE1NzAwMDZGMUJGNjE5RjA4N0ZGMDM3QTVGQTg4MDMwMzEwMDAwRjcKKzoxMDE1ODAwMDAwMDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwQTkKKzoxMDE1OTAwMDAwMEJGQjUxQ0ZDMEYwMDMwOTQ3QjBBM0YyMEZBMEYxM0QKKzoxMDE1QTAwMDY3QjJBMUYyQjNCOTUwRjk4NzU5NTBGOUZFNjhGQUQxODAKKzoxMDE1QjAwMDcxM0IxMzAzMDMyMzEzN0UzNUY4QjAwODMzMDM4MzBDMDgKKzoxMDE1QzAwMDEwQUIwMEIxMEUzM0Y5RTY4MEIwODkyODAzNDNBOTA0QkIKKzoxMDE1RDAwMDAzMDMwRjkwNjYwNEQyM0U0MDVDMDZDNEZFNDA3RTI3QTMKKzoxMDE1RTAwMDEwQ0YwMjYyMTk3MTA2ODY0QjQwNUE1RThDODFFMUE1Q0MKKzoxMDE1RjAwMDI4NDQ5RjJEOTBGRDQzOEMzQzNCQUQ3OTI5NzNGMzI4MDMKKzoxMDE2MDAwMEE2MEM1QkNBQTJGMjg1RDQxODE4QkNENTE5MTgyNjZCOTMKKzoxMDE2MTAwMDQwRjgwNjQ4RjJBQjgwNjJDMjZBMTBGNjExNzkwNjA2RkQKKzoxMDE2MjAwMDNEMjA1RjVEMTZCQkI5NDc4MUYyRkE0MEY5REQxQUY4M0IKKzoxMDE2MzAwMEVEREZBMTgzQ0E3NzM1NDNFNUU3QTFDOTM3QkFBMEYyNDgKKzoxMDE2NDAwMDM1REM1MEY5QUFFRTEwMUEwMEIxQzkyQTNCRDgwMzAwQzQKKzoxMDE2NTAwMDAwMDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwRDgKKzoxMDE2NjAwMDAwMEJDRDdEMEI3QzU0RDU5OUY4Qjk4RkI5NzM2NzMyRDcKKzoxMDE2NzAwMDMzQjk0OTI2MzA3OUMxNEQwODEwMzBFMDI0ODQ4MDhBN0UKKzoxMDE2ODAwMDcwMTMyMjQ0OUJDMjA0Njk4QkJCNkM3N0M0RDY0NjE0OEEKKzoxMDE2OTAwMDA4RUE2QTdDNkMzMzc5MDcwMTA5NkE3NzI5NUEzQUIxRkEKKzoxMDE2QTAwMEEyQTBCNDRENUREQzNGQjVENjlENDBEQ0QyRDZENkEwMUQKKzoxMDE2QjAwMDU4RTlBRTZEMjNGNURGNUE1N0Q5QTA1MkE5RDJCMkU3NDcKKzoxMDE2QzAwMEZCQ0VCOTk5N0I2RjI2MDlFOEVFRkUzNjNFNkVDRUJEQTUKKzoxMDE2RDAwMEU3RjE5REVGN0NFRkYzOUQxMzQ1RjQxMDZEMDkyMUU3RDEKKzoxMDE2RTAwMEUxODczRTVGMjVGNDI3M0JGOTI0QTQ4NzkwRjlGMDFDOUQKKzoxMDE2RjAwMDkyMjM3M0UwMTlFM0VGRDkzM0I4QjY0RjIwNDU1ODFDNTUKKzoxMDE3MDAwMDI0OTU4NDE0MTBGNjUzRDBENEI5NTk5QzRCQzg2NDEyNTQKKzoxMDE3MTAwMEZFRjFDQzQyNUExRUJBQkU4RTA0NjhGOUY1QUJGRjAwNEEKKzoxMDE3MjAwMENGQ0VENUQ1QjU1N0U5ODRFNEFDRTkzQkI2OUMzRTgzMzIKKzoxMDE3MzAwMDkxQjgxMDJEMjVFNDQxMjIxMjkyMEJGRDE1QzdBQTdDMDkKKzoxMDE3NDAwMDg0QjQ0MzY3OTcxMzMyMjk5NjYzQzQ0QUExNjBEMDAyRDgKKzoxMDE3NTAwMDIxN0ZBN0YyODE4OEE4Q0JCNEVDQzc1RjkzRjMzMDlGQjkKKzoxMDE3NjAwMDg0MjgyNDUxODIxNTg1RjNFRUQxRUQ5REY1Q0RBNzFGNzgKKzoxMDE3NzAwMERBOTk3NTBBRTFGRkI3MTI5OERGNDRFREM4RUQ2Q0JDNDkKKzoxMDE3ODAwMDE4RkRFNzNDQzU0QjVFNzI3Q0VDMjdBN0MxNTIyNjgwNTIKKzoxMDE3OTAwMDFGRkI3NzYzMDRFRjlCRkY1N0M2Q0IyNUU1MUVCRDgyNzkKKzoxMDE3QTAwMENFQjc0RUQ0RTI1MDlGRjQ2NUM4QjQxQ0JDNDUyNjA5QTAKKzoxMDE3QjAwMDgxN0VBRkU4MTE1Q0ZBQzRFQkQyNDk0ODZEOUYwRkYxMEUKKzoxMDE3QzAwMDJCRDRGQjkzRjA3RDhFMDgzODlGMjk3N0JGRDlEQjE1OEEKKzoxMDE3RDAwMDI0RTRDQzVBNUYxOEU5NDMyMzI0MkI3M0Y0N0NCRUQ2NEYKKzoxMDE3RTAwMDRDNDhDMjZEMjlBRkFFMTZBMjM4NUVGOEM3QzVCNDdEQUQKKzoxMDE3RjAwMDZDQjUxOERFMEJGMEQ0QURDQTgwRjc2NkJEM0JGOTM4ODYKKzoxMDE4MDAwMEEzRTk4M0U4MzJDNUEzQ0NFOTQzQUUxMzBEQ0ZEQzRGODcKKzoxMDE4MTAwMDRGMUZGMjI3QTQ4RkVDREIyREVEQzhDNUFGMTdFMjdEN0IKKzoxMDE4MjAwMEZFODVEM0M3QTcxRENGNUNEN0QxN0NENTgyNzA0Q0I5QkMKKzoxMDE4MzAwMEJCRDg0M0U4RkEzRjUwQkIyQTNEOUFBMkRFRDhFQjVBMDgKKzoxMDE4NDAwMDhFRkMxRUFDMjM0NjNDNDVCQjJEQjA5RTM4Q0Y5ODREMzgKKzoxMDE4NTAwMERFRTA5M0FFOEYzNEIyQkNCN0Q5RDY0QjlBNUNCOUE2NTIKKzoxMDE4NjAwMDc3MUM3QzQ4NDFGQjdDQ0Q3RTk1MjY0OTdGMzM4QjE2QzcKKzoxMDE4NzAwMDY1NEQ4NEZFNjRERTVGQTdCNjJFNDY4MDZFODFCNjI5NzQKKzoxMDE4ODAwMDNFQTQ5RUIyMDRBMUZDNDE0MjI0QkM5NzQzMjBEMkIyQTQKKzoxMDE4OTAwMEEyMTlGMUZCMDQyOEM1NzE1RDRDRjhENDYyRDEzNjlFQzMKKzoxMDE4QTAwMDJCREY2QjVCMEZCMjI2MjY1OEUxNTc5QTE0ODQ0MzA2NTAKKzoxMDE4QjAwMDM2RTFGMjJFODJDMjhEQzEwRDQzOUM5RjA2RTU3QjZDMDIKKzoxMDE4QzAwMEVCMkZGQjQ4QzI0M0U1RUE5NkUyNzI2MjVEMDc5MzRFNTYKKzoxMDE4RDAwMDA1QzFBNEQzN0IyRTRDQUUzOEM3NUI2RDg3RjM4MkRCOEEKKzoxMDE4RTAwMEY5NjRGRDc3NjY5QkEyRjFEQUM5RTQ3NzI2OUUyOEYyQjcKKzoxMDE4RjAwMDVFODE1RjJDRUJERUU1MjI4Nzg0NEIwOTY5Q0JFRjhDQTAKKzoxMDE5MDAwMEMxREIyRUY4REY2NTQ4OUYyMEI0NDg1NzdFQjkwNkY0NDYKKzoxMDE5MTAwMDQ0RjYwOTMyQzBFOTMxQzkyMzk0ODlGNTdBODk4RUY0RjUKKzoxMDE5MjAwMDE0MTNFRTIwNTA0RkYyNDUxMDRGRTZGN0IxRTFFMjc0ODgKKzoxMDE5MzAwMDE3MzNGQThCNjlCRjlGRTVERDdFOTZFQjMzNTJFMTdBNzAKKzoxMDE5NDAwMDczQzg4NEJCMDhFNzkxMkNEMzc5QkM3QjE3RkQxRkE1MTYKKzoxMDE5NTAwMDhGNTg5OTEwREYyQjhDRkU1RTA3RkE5MENBQTMzQTc4NTUKKzoxMDE5NjAwMDZGOTEyNzZFQzEyRUNGRUFGOEI3MjNDRkJDMzY2MzFFMjYKKzoxMDE5NzAwMEE1QzdDMUIwNDQ0MDVDQjUzRUUzMzY2QTY4RkZDN0FFNTgKKzoxMDE5ODAwMDE0RTI2RTgxQzM0QkVCQUZFMDcwQkU2ODY0MTUwMDdENUUKKzoxMDE5OTAwMDBFRDZCODkxN0U1NzJDRkYzMDA4RTQ3QkVBRDAyQjcyMkMKKzoxMDE5QTAwMDJBN0U1REIxQzg5NTg0ODNGRUI3QzkzQTNGRkFERjI0MjkKKzoxMDE5QjAwMDE4MDNGOUIyMDZFOUM4ODQ2QjQzQjk4NDcwMEMyRTEyN0YKKzoxMDE5QzAwMEUyMzBDRUMwQUY3RTdGRkYxNTE0Q0UxNzJCODRCMDVCMDQKKzoxMDE5RDAwMDQ3NzhGRDg0OEUzNzY4QkMxRjFDNEY0RTEwNzM3QzlENkEKKzoxMDE5RTAwMDY4ODA0RkU3RjgyM0VCQTE4NkQ3MDA1RjM2Njg4QTdFRDAKKzoxMDE5RjAwMDFGMURFRjY2Mjk3QzE0RjQxODk5Q0NGNDQzODMzNkEzOTkKKzoxMDFBMDAwMDA2RDY0NzEyMTg3RDJDMTU3MkIwNUQ5QkFGNzUxMkFFQ0QKKzoxMDFBMTAwMEJCQjQzNkE1QkM2QUEwOEE0MjJCODdFRkRCNjY4QzBCNzEKKzoxMDFBMjAwMDY3REMzNTNDNjRBMUVCQTZENzBCRUYxRkIwQzAzOTQ3OEMKKzoxMDFBMzAwMEYwMDc3Rjk3NDY3RjU5NDAxNkMwM0FCRkU3NUI5NTlFRjcKKzoxMDFBNDAwMDIwNjNGN0Y3NzZCM0RBMjJCQjA4RjlCMDU5QkY3RkMwM0QKKzoxMDFBNTAwMDM1RkFGQkNEMTI2OUVDMkIxREZERkUxQTQxRTVGODg4MjUKKzoxMDFBNjAwMDI5NjA5Rjk5RjMxRTk5QTcyRjg4RjQ3RDMzODg1RjRBRDgKKzoxMDFBNzAwMEVBMzdFRkYzQjRDODU2RjlFMzk4QzcwODdFM0Y2MTNCRjUKKzoxMDFBODAwMDM1Nzg2QjJDNTcwNzdFOEJBRTE0QTAxRjk5RkU1Mzk5QTcKKzoxMDFBOTAwMEU0Qzc5QjBGRDQzM0JFNzNDMERCMTFGQ0VGODE3NzIyMDgKKzoxMDFBQTAwMDNFN0VDRkQ3REEwOUY2NkE5QjhCRDE0QjdCQjYxODZFOTgKKzoxMDFBQjAwMDI1QTNFOUM1NUMwRjEzOEYxN0JBMUVEQjA0MEZGMjg3NEQKKzoxMDFBQzAwMDQ5NDcwREUyREE3MUQ3N0QyMjNBQkEwM0U4RTg5MkZGN0UKKzoxMDFBRDAwMDc5M0E3QTEwRTg2OEZFRkY0OTNBREFGNTdGOTE4RTkyRkEKKzoxMDFBRTAwMEU1RTU2ODJGQUNFNDdERjUwRkZERjYyMTkwQ0ZCRjMwMjIKKzoxMDFBRjAwMDI0OTQ3QkJGNThDNEU0RkYyRkEyNEMyRTBFOTJFOEY2MkMKKzoxMDFCMDAwMEY5QTAwRjhFNEIyOEE3MDY4RDM2M0ZDMjRCNEQ2Mjk4MjkKKzoxMDFCMTAwMDA3RkE1RDk0RkU1RTAxN0I2OTI2OTVFQkNEMkEzRUU5Q0UKKzoxMDFCMjAwMEVDMEI1NkQxRUZDN0FFRkEzMDFGRjRENzMxQkFCNjYwMUUKKzoxMDFCMzAwMDdGMTMzMjZDMThCNEZENEIyMzY1NkE4MDQzRDlDM0NBNDYKKzoxMDFCNDAwMEMzMkQ2NzYzNjA5RjBGMEFBQ0ZDMkYyRDY3OEQxODhFMjUKKzoxMDFCNTAwMEI3QUQ3MzM5QzVFNzRBRjg5NUMyQjE3QTkxNjBDNDUzRkQKKzoxMDFCNjAwMEQwQzU0RjA0ODVFMUE1ODZEOEY0MkE1RDk3OUYwODk0RDcKKzoxMDFCNzAwMDVFRDRDODY2QjRBQjA5ODkxMEY0MEY4QkE5OUQ2MEIxMUYKKzoxMDFCODAwMDJGOUE0MDgxODE1Q0FFNzFBM0ZFNzNGNkZGMTJCNzBCRjIKKzoxMDFCOTAwMDlENzZEQ0VBNDU2NTJFRDAxN0VFQzg2OTc5ODgzRTU3RjgKKzoxMDFCQTAwMDQ2MDQyQzAzRkUzNTBCRENBMjIxMThBMDA3MjI4QkRDOTcKKzoxMDFCQjAwMDhGODJGRThCQzhDNEE1QTVFMEQ3OTU4NkRCNjY3NzlEOEUKKzoxMDFCQzAwMEU2N0E4Q0UyNjUwREYzNUJCNDgyRkEzOUM5RkFBNzRENjcKKzoxMDFCRDAwMEZERUI5OENGNTg3NDYxQ0VDMzJDNUZCQkU4RjQ0MDE2ODAKKzoxMDFCRTAwMENDQkI1NjA4NEY4Nzg2QUE1NkYwNDVCRkI1RkYzNEQzMDUKKzoxMDFCRjAwMEJFRjEwM0RFN0VCMUU2REE3NDQ2MDc1MUQ0QUIyNjNENzIKKzoxMDFDMDAwMEZERjg4REFGQjg2MEZFNjQ3NTE2RDJFNUVBM0FDOTY2OTQKKzoxMDFDMTAwMDRGQUVBQTQ5QjM5NTNGQkZFOERBNzFFRDcwMTJCNUUwNTcKKzoxMDFDMjAwMEMxNDJGNzgxM0M4Mjc0NEE3RTQzRUQxNDRBQTdCMUVBNkYKKzoxMDFDMzAwMEUxMjhEQTJEMjcwNUJEOEQ5NkQzMTczNzREODU3RUVGMjgKKzoxMDFDNDAwMDExMzNCMUJFQjBCODY5RTYxMERBNUJDQjkwRkVEMzc4NDEKKzoxMDFDNTAwMDlGRTk0QUUzRUY4QjQwQUU0RTE3QzlBMzNBRDhBM0UzRkUKKzoxMDFDNjAwMEZCMDUxRDlDQ0VDREIyMkIxODhEMDk3NDNERjU5ODU2MDEKKzoxMDFDNzAwMDJFOEQ4M0VGQjgyMUQ2QTZGMjFCQTY4OTZDREQzQTYyQzEKKzoxMDFDODAwMEFCQjQ2MjAwNjhDMDJFMzczMjZBMUFEMUZFMzNFQjUzMTAKKzoxMDFDOTAwMDNBOUUyNjY2QzNCODMxN0MzRjQyQzdERDc0NUVCNDlENzAKKzoxMDFDQTAwMDk3RDkyMjI0N0RGNkFBNzQzMkNFM0NEQTFERUI0RkM1QkIKKzoxMDFDQjAwMEJGOTE0QUNFREVDQ0UxMjM4NzU4RkZBNjRDNEFDRkE0ODEKKzoxMDFDQzAwMEZEQTdBODZGM0VCQjc4RkY2N0MzMjIxOTA0MzhFNTg4REIKKzoxMDFDRDAwMDhBRkM1MDUyNERBQ0ZEMTBBMzBDQ0IwQTJGQkE0MzExMTUKKzoxMDFDRTAwMEI1OTBFMkQzNUQyQUMyMzQ0ODQ3RTlBMzg2QUMwMzFFMEYKKzoxMDFDRjAwMDYyQjhERTVCRTlEQUU2NUJGODcyRUI5RjI1RjRGMzZGMUUKKzoxMDFEMDAwMDE2OEI1QTQwNkU2Q0VEQkY4OUU4MTQxRkRFNTA5QzYwNDQKKzoxMDFEMTAwMDc5Q0U4RDJBRTA2OTJCNzVCMjA2NjE3Q0I5OEYwMDFDRTMKKzoxMDFEMjAwMDY5RjlGNDc3M0E0RTlBNDZFMjNBRUQ0RkQ2RkIxMjIyMjEKKzoxMDFEMzAwMDJEQ0JCNTI0NkNEMDRGN0UyRDJDNzhBOTlDMzgxQzJBMzUKKzoxMDFENDAwMDZBOTFFOUZCRjZCNTA0RTUyMzAxRTk2MUExOUZGNkQwQUMKKzoxMDFENTAwMENCODYwNEY0QjM4Njg0MDFFMEY2RTAzQTlDNjc2N0U5MzkKKzoxMDFENjAwMEJBRUU0MkZBRkU0QzlEOENGMTAzNzI4RUMyNkJGQUY1MEMKKzoxMDFENzAwMEQ0Q0ZGMDk2MTAwM0M2REI5QTQzRTIzRUI0ODMwREM0ODEKKzoxMDFEODAwMEFGQTJCMUY1RDM3NzE1OTNDNDNDRkEzREEzQjIxRkM2RjkKKzoxMDFEOTAwMDhGRkQzRDYxN0M0OTk4NUM5M0I5M0MyMTMyQTUzRjE4ODkKKzoxMDFEQTAwMEJGNDkwQkRGOTc4MkZFNTQxMkJENDk5QzZGNTk2NzJEQzYKKzoxMDFEQjAwMDgyN0VBQzEzNkZFOTBBQjkwNkYwREI1RTQ2RjkyMDg1MzYKKzoxMDFEQzAwMERDQkI0MzE0OTEwRUUyRTE1NTJCOEI1MjhDNzM4RkE4MzAKKzoxMDFERDAwMEEzN0MzMkNCRkE1OTA1RTExRkFCN0VCMjlFNEMxMjU5NUYKKzoxMDFERTAwMEQwQjUyMTAwNUU0ODI0ODhGM0NCMjQyMzNGMDY5NEIzNkEKKzoxMDFERjAwMEY4N0MyNzkxNDZBQzE3NUFEOEQzMEZGQzk2NkJGNDU1NTQKKzoxMDFFMDAwMDAxMkVCRUU2RkZGQzMxNUMzN0YyODgwNjc2MkM4NUI2RTMKKzoxMDFFMTAwMEY4N0M1NjUyNUU4MENFODFGOUJEMTcxNkQxRUZGMDhCNUIKKzoxMDFFMjAwMDA5Q0RBMDFERjgzRDgzMjE3NDdFNzU4MjcxQjk3NDY4NTcKKzoxMDFFMzAwMDQyMDFCRUFGNTk2RDA3QkIyNDQwQzIwMjdDRjc4N0U1NjMKKzoxMDFFNDAwMDk4RDVBRTRGMjdCNDZDOEJBNzkwRTNDNTk1ODQ4OTdDNTkKKzoxMDFFNTAwMEZDQUVGNTAzRUI2ODI1OEQ5NzAyMzAwRjA2OEM3RjA1RUQKKzoxMDFFNjAwMEJGNjk5QjNGOEE3RUQ4ODc5RUMwNUMxOEVDNEU2RkUwQUUKKzoxMDFFNzAwMDUxNzg3RUU4OTkxMjQ3RkYyQ0NDRkMyRDk1RkUwM0YyOTkKKzoxMDFFODAwMDJFN0RBMTZDRjM2RjMyMEM3QjM5Q0JFMTg3MkQ5MzdDRDcKKzoxMDFFOTAwMDM4Q0Y4Q0NGMTJFRTVGMTk3NUQzMjcyNUUxQTIxMEQ1NkMKKzoxMDFFQTAwMDAzQkRFQ0FDOTEwOUY4RkYzRTFGODNDNzg0MkY0QkJBRUEKKzoxMDFFQjAwMDc3MDFFQUM3QjA3QzEyRTBBMDY4NDEzOENFOTA3MzA5ODAKKzoxMDFFQzAwMDU4RTI0MDA5QzFGODI5ODVFQkE0MDNBRTkzMEVCODRFNDEKKzoxMDFFRDAwMDVBRTE2QTUyRDk3QzlERjY2MkFDOUE5NDM0NTJFMDdFMDMKKzoxMDFFRTAwMDI4NzJGRjgzREE0RDYwMzc5RTIxRUYxOEI1NDAzODkxOTQKKzoxMDFFRjAwMDZCNTBDRjA2MzRENkM2QTcwRTYyQjA0MjIzMUFEMjgxRTkKKzoxMDFGMDAwMEQzNkVBNEVCRjQ5RUNERkY1QUM4Q0IzQTExNjAxRTE0RDkKKzoxMDFGMTAwMDRFRkI3NzkyOEZGNDgyNjU4OThDQzQ4NUQ3MkQzNEYxN0UKKzoxMDFGMjAwMEE1N0ZFMURGMjlGRkRENzRENDQ1ODBCRjI4MUY0QkYwN0EKKzoxMDFGMzAwMEREQzVCRkRFQzRFM0MzRUJDMEJGQTZGOEZCMTI4OTA0NTYKKzoxMDFGNDAwMDAwQkU3Nzg5ODg3MUE4NzdDOUNCODE3OTE2Mzk3OTRBMUIKKzoxMDFGNTAwMEU0RjYwOTJDQjE5NThGNDkzODA0NzI1Q0Y2NzUwRTRBODcKKzoxMDFGNjAwMDAxNDQ4MzQ5NkZDMjc5NUNDNzMwOTNGMzNFNDY3NzMxQjEKKzoxMDFGNzAwMEEyQjZBMDNFRUM2NkZFQTcxOTRGRkQ3MjhGREQxRkZFRDQKKzoxMDFGODAwMENBMkU3QkY5NDZCMjZBMTJDNDRCNkY3Q0M4NDVFMkI0RDQKKzoxMDFGOTAwMERGOUJBQ0ZFM0Q1REE3NTc0NTBERTFGQjBBNjlFQzA0RjQKKzoxMDFGQTAwMEJCQTRDQkM1RUM4RDc1MUE5MTIxRkVCOUUxRkY3REEzRDEKKzoxMDFGQjAwMEYyN0EzQTlGMzMyMDBGRTY4M0ZENEVDMUI3RTg5MUY1RTAKKzoxMDFGQzAwMEMxQjg2Mjk0OEU5RTVGOUIxMDVFNzE4NTMwRjZGQ0JBM0MKKzoxMDFGRDAwMDVDODMyQkMwRkY4RTZENzdBMTlENDk5QzcxRDA4MzEyQ0QKKzoxMDFGRTAwMEM2NDEyREVEMTBERTFCQkFFREYzOUI2OEZFQ0VGOTEyNTMKKzoxMDFGRjAwMEYyMDBDRTc3RkRCRUVCRDEzRTFGNkIzRUNBQkVENEY2REIKKzoxMDIwMDAwMEE2NEYxMjZDNzExRjkzQUY0RDdBNzdGMjc3ODVBNEIzMDgKKzoxMDIwMTAwMEI4MEU1NTgzNjhBRkZDM0EyRERFODZFQkRCQjgwMEQ2RjAKKzoxMDIwMjAwMDc3QTJGNjk3NDFGQkVDNEZERTdFRjFBNzFDN0ZFOTA0MTcKKzoxMDIwMzAwMEVEMzdBOEMzQ0I2MEJEQjcwNDdCMjJDMDlGNjYxQzZCODUKKzoxMDIwNDAwMDIzODkxOTc5RjQ1N0Q3NzM5QjYzNjBCQThERDQwQjVEREMKKzoxMDIwNTAwMDYwQkQ3QzVBNEZCQTgwN0FDNUUzRjc3NzhBREIyNTNGQUIKKzoxMDIwNjAwMDNBRjAyRDA1RUNENDc3OUY3QzYzMDVEODAxMzdGRjQwMEIKKzoxMDIwNzAwMDIyMkFBNTg3NTMwN0ZDMjQ4MUY2NEE1QzAxRkI2NjNEQjIKKzoxMDIwODAwMEE1QkIzODk2MTM5NUQ3NUFFQzYxNEFEMUI4MEUzNzdGNjUKKzoxMDIwOTAwMEQ3OEY3NkM0RkFBN0RERjEzQURBN0VGRDNGRkY3NjJFQzAKKzoxMDIwQTAwMEExNzgzOEQ1M0FGQ0FGNzk0MENGNEYwQTJDRUUxQTFCRjUKKzoxMDIwQjAwMDlBN0IyRDdEQkY1RTI2N0YxQjQ5NDE0N0Q3NEI4QzlGNjYKKzoxMDIwQzAwMERFRjk3RURBMUFCMDEzODU3REZENUZDNDdFRkJCRUUwQ0IKKzoxMDIwRDAwMDcyNUJGNEYxMUFDOTg1RTNEMjdBRTg0N0M0RjYwQkYxRDIKKzoxMDIwRTAwMEU5MDI4M0NGRUEwRjk4RjFFRTc3RjYwQjBDQkU0M0FFMTAKKzoxMDIwRjAwMEI4MDdFMERCRDdBQjQ0NjlCRDRERkI0RTIzNUQyRkZEMzgKKzoxMDIxMDAwMEVFQjcwMzgwODc0RDg3RUM3NkZBQTY3RDUyQzIzRDE3NjUKKzoxMDIxMTAwMDlGNkZDMDEzMzRBODUwMDlGODY0RkNCQ0YxRTAwNkQ0RUEKKzoxMDIxMjAwMDFCMUJGQkI2OUUwNjdFREU3NEM4NjU5M0ZGMTQyRkUxNzEKKzoxMDIxMzAwMDA0RTBGNTM1Mjk1QzA3RTU3RjdBMjJBMDUzNTRCRDNEQzQKKzoxMDIxNDAwMEI4MzcwMDc4QTVGRDVFQUY1MEJBNUFCOUQwREUwRUZBQTYKKzoxMDIxNTAwMDNGOUIzOUJBM0ZFQTE5QTJERkJDQTk2RjBCMUJFRkUwMjYKKzoxMDIxNjAwMDY3N0YwRkYyNzYxMzYxN0FDQUU0RTdCN0UxOTc5Q0QxRjMKKzoxMDIxNzAwMDdBNjY4QjY0OEY2RjlEMjEyRjU2RTIzRUUwQkVBQzk0NTEKKzoxMDIxODAwMEZFQjNBOTU3NENCRUJFRjlEQjY3RjZDNEU4RjhFRjNDRDYKKzoxMDIxOTAwMEZEMUY3QjYyNzQxRUI3RkNFNUZEM0RGN0QwRjk5MUU3QUEKKzoxMDIxQTAwMDNEMUFDOEFCNEQ0RkJFMUEyMDE2RkMzRjI2QjFGRDgwMkMKKzoxMDIxQjAwMDUzRkI5Rjc4N0MzN0U1OTM1M0JGNzRBMzFENzhFQTg3NjAKKzoxMDIxQzAwMEJGOUZBMkQzRjk5RkZBREU5RjI2ODE5RDdBRkIwRkFGQjYKKzoxMDIxRDAwMDlBMENGOEI4RkQ5OUE1OTNDN0IzRDc4MTZFRTM2RUVCNUYKKzoxMDIxRTAwMEZBQzZCMTdGRkQ5MDAwOUIyMDg0M0NDNzlGOEU3NTNBNTQKKzoxMDIxRjAwMDcyNTA0QTQwODhFMEREMTNFRUI4OUJFMjY3MTM3REQ3NEEKKzoxMDIyMDAwMDU0MEVFQkI2MDFGNTE1OTRFRkE1RjhERTc4QTBFQkI0MEIKKzoxMDIyMTAwMDM0MzcxNURFNjM3OTYyMDg5RTg5M0MxMjgyNzVCRjc2NzkKKzoxMDIyMjAwMEU1OTUxNUYwNzQ4NTc1QTAxMzMyOEM3QUMyRDk2RUQzRkEKKzoxMDIyMzAwMDcxQkFCRTk3OEVCRDlFRDQ5RTUwMDBGRjlCMEU2QzYxRkUKKzoxMDIyNDAwMEUzRjZEMUY1MEM4QzVFQ0Y3N0UxOTdDQjQ2QUZFNzExODMKKzoxMDIyNTAwMEM5MUU2NzNBNDM2RUY5RTY2RUY4NzgzMDBCRDc3RkFDNEIKKzoxMDIyNjAwMEY1RENGMENDRTdDNkY1RUY0Q0Y5MzAxMTlFMUIwNDA2MDcKKzoxMDIyNzAwMEQ3MEVDOTc4NDUwMjdFN0NGQUE5Qzc3NzA3RDkzQUQ3MjUKKzoxMDIyODAwMDUxQzQ5Q0ZBRjY5OTI5QjBDOUZCOTY2QkY4OEIyMDI3QUMKKzoxMDIyOTAwMDg3N0ZFOEQ2QzBBRTVFRkZDM0Q3OTBFRjRFM0Q3MzRDNEMKKzoxMDIyQTAwMEQxNzE3RjlBRjgwNEFBMjc0RjkxOTE5RjQxRDA5QjFCMkYKKzoxMDIyQjAwMDA1NTZEOEY0OTgzRkUxMEUyNEQ3NkI2M0JDQkU1NjBGODkKKzoxMDIyQzAwMEUwRkIzN0YwN0Q5Q0YxQzNDNjc4RkY2QTIxQzVGQUY5QkYKKzoxMDIyRDAwMEU0MjJBNjlGRTJEOTg4OTcwREZBQTBBMkY5RUNFQjJBOTYKKzoxMDIyRTAwMDJDODRGNTdDNjMxOUQwREY1OEVCNjlDRTVGODNGOTJGMUUKKzoxMDIyRjAwMEIwQUNFQjYzOEM4RkM3RTJENzUzQkQ2RTU5NDgxRkJEOUUKKzoxMDIzMDAwMENFQTdCODVEQjEyOTJFQkM5NjZBREQwOTY5NjVGMUJEMUQKKzoxMDIzMTAwMDMxRTJERUU2RDM0OTE3OEE2Q0U3NzNCM0JEMzlGRjg5MzIKKzoxMDIzMjAwMEY4N0NFMjc5NUQxQ0RFQ0U3MDdERURDNERGM0JFNzUyQzgKKzoxMDIzMzAwMEVCODEyMjU5RTA3QUFCQTczNkQ3QTJFRjNDMkVBQUM3OTEKKzoxMDIzNDAwMDBBQzFFRTZDOENFNTE1MjZFMUVERUM5MzUwQkVCRkIzRUYKKzoxMDIzNTAwMDRGNDI3QkRGMjkyNzM2OEVFMUQ3ODdDRDcxMEVGNUNGMkYKKzoxMDIzNjAwMDA1NzlGNkNFRTFFRjczN0E2NEY0QkVGMUMwMUI0QThDQjYKKzoxMDIzNzAwMEVCODVCODU1MkY0MDdGMjlENkUzNzJERURGQTZFNzUyMDIKKzoxMDIzODAwMEY3QjdFOUMwRTk5NEZEQkQyRDFCNUYwMEY4REYxRTc0QUYKKzoxMDIzOTAwMDkxMThFREUyRUQzRTI5NjU5Q0E0NTg3NkQ5RUNBQzRFM0YKKzoxMDIzQTAwMDdGRTU4OTc0REE0RTBBNzg3NTk4Nzc1QkFCRjE1QTBDNDEKKzoxMDIzQjAwMEVDOTE5NzVEMDRFRDQ3MzlGQzk2OUI3RTZGRjM3QjcxNDIKKzoxMDIzQzAwMEJGQTUyRDcwMjNEMTJERkFCQkREODEyNzM5MTQ0MTNGRTQKKzoxMDIzRDAwMDVBMEU0NjJBRDg1RTY4RENFNkNGQkEzNEQxMDYzNzkxNjkKKzoxMDIzRTAwMDYzRjlCMENGRjlGM0MyREZDQkQwMkZDNEQzNzQ0QjVDMDkKKzoxMDIzRjAwMEU4MjU5OTc0NDAzQ0VEMjU0MzA4Qjc5MDE0NzEyRDQ3QUEKKzoxMDI0MDAwMEZGOTE0NTEyRDFBRDc0NjY0QzE1QURGMUM1QzBFMUJCNkQKKzoxMDI0MTAwMDMwQUVEMTQ0MUExMzEwNkYyMkY5QTQ2RkFGQTVERjQ3NzUKKzoxMDI0MjAwMDlBNzUxNjc3OEQ0QzE1QURGMTNGNzc2M0EzRTFBNjcwRDEKKzoxMDI0MzAwMEU0REZBRTE1ODFGRjM2RDZGODA1OERGNjdENUY3M0ZDQkYKKzoxMDI0NDAwMDVCNzkzQzgyRUM3QkYyQzkyNzY5NzkyQTdDMTM4MTBFODcKKzoxMDI0NTAwMDIzMDZDMjcxOEVFRDJCMkZFNUYyRjA0N0RDN0UzRTJDNzkKKzoxMDI0NjAwMDkwMDFCMEMzNkFFRjhEQ0EyMEVGODREMEY1MTgxNzVERDQKKzoxMDI0NzAwMDk2N0ZCREJDQ0U0MjhGQ0I0MkE3NzM0MEFGN0VGM0NGRDkKKzoxMDI0ODAwMEQyOUE1NDc0N0E4OEQzNTVDQkRGM0Y5RTAzRUQ3NzdCODUKKzoxMDI0OTAwMEJFOTBDRjlDRDkwOEMyOTdDN0UzNUQwM0Q5Q0I3RDEwMEUKKzoxMDI0QTAwMERGRUJCRjY5RDk4QjMzRTg3QzczMzU4OTQwQkMyNjk3NTUKKzoxMDI0QjAwMDU0RjlDQTI4OUM3OUM3QTVCMDI3QzUzQTk4Q0YzRDNDQTYKKzoxMDI0QzAwMEFFRjc2OEIzODZGMkZGQjFFNjEwOTYxRkU3NzhEREQ3NjYKKzoxMDI0RDAwMDVDODJDRjI3OUJDM0Y4RkQ0MEYzNDIyQ0Y3MzVEN0UyNEYKKzoxMDI0RTAwMEYzRTlFNjA4QkUwRkRDRkQ2Q0JGMDI3OEY5MkFFOTgzNDgKKzoxMDI0RjAwMDc4Q0RDMUU2MzVGOEZEOUY5QkEzRjhEQ0NCRTdCMzBDQTQKKzoxMDI1MDAwMEYwRTJCM0NEMUZFMzMxODdEQTk3QjQ0MjNDQzZDNEEzRUYKKzoxMDI1MTAwMDEzRUY0QjQ4NkNDMDhERkJGOTgyMEU3OEJGNEI2NkYyMEYKKzoxMDI1MjAwMEM1ODlERjI5RUUzRTAxRTQ0QkQzMkQwNEVERDczRDNDQjgKKzoxMDI1MzAwMDZFNkNDRUY3RUIzMkIzMzcwRjcyNzg3RUUwODk3RTQ3NTAKKzoxMDI1NDAwMEE2Q0ZGNzZBOEI0QkQxMkUyMjkxMzBDOEVGM0Q0MjI0QTMKKzoxMDI1NTAwMEJEOEM1Njc5MjE3QjQxQzgyQTg3QTdGQUEzMDc2NUNCOTIKKzoxMDI1NjAwMEJFQzI5NDZFMTZFRkQ5MkQzMzc5MzU1NTNGREQ5RjQxQUMKKzoxMDI1NzAwMEYxNTA5QjJGRTgxMDRFMzBFNzdCQjg0QUNGMDczOTc5RUUKKzoxMDI1ODAwMDU4MTA3MEJENkJGMzI1NTI2MkExN0JCM0JGNkZDODIyOTgKKzoxMDI1OTAwMERGREY0ODJEQjc5Mzc0Q0NFNDQxRTZENTcyMDlGOEI1NzYKKzoxMDI1QTAwMDY3ODgzNzJDNTE3RTdGM0U4NzFDMjRENEZFNzgxRUU4MzYKKzoxMDI1QjAwMDEyRTRDMkFGRDIzMDRFNkNGQTM3REJGODdBNjcwMjUxQzAKKzoxMDI1QzAwMDQwQkVDNEVCRkUzOEM4OUZCMUZDOUU0RTVFRkYzRDBFODAKKzoxMDI1RDAwMEQ3MDYzOUYyOEE4Q0ZCQ0EzQ0ZFNEExMjE4Qzc4NDk0OEIKKzoxMDI1RTAwMDIzQTBDN0REOUVCNTNCNkFFOEYzRkVDQkRGM0UwMUYxRDkKKzoxMDI1RjAwMEMxNzc5RkYxRTgwMEQ3RjY4QTkzMDEyQjFFNDk4M0ZDMkYKKzoxMDI2MDAwMDhFNzUzRjdFNDRERTlDQ0RDM0I4RDhGRjI3RDEzNzY0OUEKKzoxMDI2MTAwMEFCMUMwQTBFMkJEMEZFNzk0MURGMDlGQkQ3QjE1NzI1NDEKKzoxMDI2MjAwMEU0QkZFNzg1RjgyQzhDNjNDOTA0RkQ4MkU3NkYwQTYxN0IKKzoxMDI2MzAwMDdFODdEOUNFMUZCNkYzNzdBNjY3RThFMTREMzBFRjA2NjcKKzoxMDI2NDAwMDI1MUM0QkMxMTdCRjQ5RDM2REZCNDZFRTkwQkQ3RDA4REQKKzoxMDI2NTAwMDc0RTY3QzU2RDYyOTdEOTZGMTc5ODc2NTQzMDIzOEU2ODMKKzoxMDI2NjAwMDkzMjgzRTE3MTAxRDlGMzlBRUU4NDczMDhGNzlBNDJGNkQKKzoxMDI2NzAwMDA3Q0FBRDY5NTNBRTYwRkIwN0ZGNjM3ODUzNURGRjA3ODAKKzoxMDI2ODAwMEYxNjZEMjZCRThGMjEyODQ4M0RDMkQ4NkE3RUJFODRENkQKKzoxMDI2OTAwMERBRTg3Q0E1NEJFMEY4NTU1MTlFRTc4RUVDNEYzNUZFMEQKKzoxMDI2QTAwMEE4MjA4OEREQjAzODg5OTY4NjcyMzBEN0MzRjBENzM0MzkKKzoxMDI2QjAwMDc0MUFFM0JCQTEyOUM0MTY3N0VGNjgxMDkxMEY3NkJGOTcKKzoxMDI2QzAwMENFRjZGNUNFMzQxNEVEOUM0MUVCNTcxMTdENDc0REUxMkMKKzoxMDI2RDAwMEU4Nzk5OEZDQjE1QjhEQTRBN0RBOUYzMjlGMjY1Rjk4QkEKKzoxMDI2RTAwMEU1OUQ1M0JGNDg0MDBFRkRFM0Q0MkY2MkRFNTFFRUVCNzMKKzoxMDI2RjAwMDFFMURGQzhFQUE1RkVGNkYwMUI5RDhGMTA2Q0JBRkY4QjMKKzoxMDI3MDAwMDk1MzdCQUM4MzUzRjI5NjczQTZFNkE5QzBBN0U1MEMwMzEKKzoxMDI3MTAwMDFGNTlFQ0EyRjg4OUU0QzdBRjAzNzk3N0E2RjY3NjM3OUMKKzoxMDI3MjAwMDRFRERDN0YyNUU5QUVFRDU3N0NFRDRDNzVFOUYzRDREQTMKKzoxMDI3MzAwMEUzRUZERjk4RjNEQTAzRjMxQTY3RkZDMjlDOTdCOTVFMDEKKzoxMDI3NDAwMDY3NkE1NzBGREZBODgzOUMyOTRFOEZBNjY4MzcyMjRGRjAKKzoxMDI3NTAwMEFFNUUzREVFRjg3QkI4NUVBMUYzNUY2QkE1Q0YyOTRENzEKKzoxMDI3NjAwMDFBRTZCNzk4RURDREY5M0FEQjNCRTc5QkRDMDdCRUIwNDQKKzoxMDI3NzAwMEJDQTAzRTE3QzkwMjdBRkZERUM3NTNGRUU5MjUxNDhEQkYKKzoxMDI3ODAwMDExMDlGNDM0RTVDRjhEMDA0RjI1NjlDNDMyOTFGQjcyRjUKKzoxMDI3OTAwMEMwQkUzMUU5Nzk3N0U3RTMzOUE4MTdFNDc4MjFFNjc3MTUKKzoxMDI3QTAwMDVERTA3ODFEMjQxMkE5MDI3RTBCOEI2MUFCQkQ2MjNFRjkKKzoxMDI3QjAwMERCNDZFODNDODE3MTU1Mzc5NzAzNjJEQUJEQTE1NDc4NTYKKzoxMDI3QzAwMDFFRTkzRkRGQ0VGRkRCMDg2MTcyM0VBMUEyOUM4NzQwN0QKKzoxMDI3RDAwMEExNDZDQjg1NDc0OUY5N0RCNEJGMDY0ODBBQTVFMzU0MTUKKzoxMDI3RTAwMEM5MkMxRTMyRUZBOERFMkJCMUI4QUE1NEVGQjdFMDkxODYKKzoxMDI3RjAwMEVGMzc5OEYxREQwRTcyMkZEMTc0RjAyQkNBRkFBMUJBMUYKKzoxMDI4MDAwMEM5QTc0Nzk0RTg0MzQwQTc0QTQ4Qzc3QzRGNTczMDJBOTYKKzoxMDI4MTAwMEIwRkQzOEI2M0Y1NEMyRUQ5MkFCQTRCNTJBRDgyNTRERDEKKzoxMDI4MjAwMDI0QTJDRTA2QkUzRDJFMTE5Njg3QzdGOERBNkRFRTgzNDAKKzoxMDI4MzAwMDcxM0U3NjczM0VBNjFDOENFNTE5RkNGQjczOUNCRTBFQTQKKzoxMDI4NDAwMDgxN0Q4MkY2MDRBM0EzODNEQzNFQTkxOTFFM0VFMkE3ODQKKzoxMDI4NTAwMEVENEEwNjdCQUE2MTNBNEY4M0JERTIwNkZCMjQ4Q0RGN0EKKzoxMDI4NjAwMEJGMDNGNjBBMkQxRkM5RjhDNzZCNjY1M0JDRUMzM0M0MEYKKzoxMDI4NzAwMDMwRTBGQTQwQjNDMUY4QTFCOTAxQkYzNzkxOTg3NzMzN0UKKzoxMDI4ODAwMEM4QTU0NzQ0MERFMEVDN0FBNDU1MEFEMEYyN0U1NUMwQTUKKzoxMDI4OTAwMEY4QzUyM0NEOEQ1ODNGNzBDRTlCMDA3RjczQkY5QTEwMzMKKzoxMDI4QTAwMEMwMUUzOTEzMjZFMTE4QzA0REREMjM5OEQ3MEMzRThGOEEKKzoxMDI4QjAwMEFBMzcwNzcxQkJGQ0YxRjg3QkJGREQ0MUVCM0RCOEQwMTcKKzoxMDI4QzAwMDhCRkI2NDI2N0ZDRDY4MUFENkFFMDFCRURBN0I1MkRGNjEKKzoxMDI4RDAwMDBDRjBDRkJGRDU4MEZBREJDMjQ1Qjg0RkYxMDRDNTE3NjUKKzoxMDI4RTAwMEFDRDNCRTVERUZFRDFBQTRERjAzNzJENzY2RjA4MzY3NDkKKzoxMDI4RjAwMDE2QUM0MjdCMjhBMEZFRTM2RDUwMEU2ODRGRkQxRDNFRDYKKzoxMDI5MDAwMEQ1RUZERjA5RkE3QTY2NUNCNEVEOUYwN0Q0OUZERTA1NDgKKzoxMDI5MTAwMERGQUI4N0MyMzVFOUI0OUY1OUM3MDdCQkFGQTZDRjhFREYKKzoxMDI5MjAwMEYwRUQyMjkwNzg3QUU2MUY3MDVGRTNCMEEwN0RBOTA3RjIKKzoxMDI5MzAwMEUyNkFENzJCNDhBRkM2MDlBMzA1RDhEMTU1NjFDRjgzMkEKKzoxMDI5NDAwMENDN0UzMTBBNjkwQjY0RjIwMEM1M0IwMUJDMUIzMkY0M0EKKzoxMDI5NTAwMEZCOTZBQjEwRTkyQzE0QzhBOTA5RDBGMkUzOEY5REZDQkIKKzoxMDI5NjAwMEYxRDVGNEZCOTE1REI3QTI1Qzc0M0YyMkEzM0QzNkYzMzEKKzoxMDI5NzAwMDFCQjc5M0FGNThFNDg0RkIzMTM5NjU1RUU5NUIyRTM3QjIKKzoxMDI5ODAwMEUzQTM0NzU2RjdDQ0QyMTk3OTAyRkZDRERBNUJBM0EyQjUKKzoxMDI5OTAwMDlDNzhEMTlFRTc2MEVFMEJGNzkyRTg1QjJFQTQ2NzY2MDkKKzoxMDI5QTAwMDlGQzgxQURCNDc4NjNEMkZEODRGMjQwRjhCOEM0RjIyQjAKKzoxMDI5QjAwMDUxQUYzNUZGQjlFNEVCNjIyNDU1OUNGQkFDNEJDNjc5QjMKKzoxMDI5QzAwMEI1Qzc2QjRBNjAxREU0RjM3N0UwM0UxOUU5QjE4RjZGM0MKKzoxMDI5RDAwMDhFNDdDNzNGNkI5NTZGQjJDNkUwMkEwMEQ1NEZEN0IzN0QKKzoxMDI5RTAwMDVGRjlGNzFDODBGRjZDQTNBOUE3MTJBOEE3MDZDQUM0QTkKKzoxMDI5RjAwMEM0NTQwQURGMDMwRjg5NzE0OENBM0M1MkNCRjRENjc2MUYKKzoxMDJBMDAwMDk5RTUwQjZFRTdFNUM3Q0U5MUI4NTA5OEU0QTM5OTlDODEKKzoxMDJBMTAwMERGMUU3QjQ0NjRGNjVDOUNBMDlFMjNFN0NFQTM3REUxOTEKKzoxMDJBMjAwMEUzREYzM0NCNUU1NjcxN0YyMjY2RjhBQTJBMzEyQjkwMDIKKzoxMDJBMzAwMEZGNThFODg1RTJFOEQyOThENzI2NjdDNUE2NENEQkZBQUUKKzoxMDJBNDAwMDE3NTA4QkM1OUU0RjVEOTRBQzJGODExQzNGQUUwMkZEOEQKKzoxMDJBNTAwMDlFQTE3RTJCRDBFRjEyQkU0RjU0NjNFNjYxNEFFN0U2OUIKKzoxMDJBNjAwMEMxRkMxRjM2RjVBQzk5MzdFM0M4OTNERURCQjhDRTBCNUIKKzoxMDJBNzAwMEYxQzIxNzRDRkE2OTY4MzREMEZGRDFEQzM4OUVCOTRGRTcKKzoxMDJBODAwMDU4NzI0QjI0MDZGQUQzOTU2RkNGOUZBRTcyRTQ0NzJGNEUKKzoxMDJBOTAwMDcxOTQyRjM2QkU1MkFFMzhFM0E4REI2NjIxMURFODAxRTMKKzoxMDJBQTAwMDk0NTdDNTFDQ0Y3QjJGQTNFRTdDRkFFODM4Q0I0OEJGRTgKKzoxMDJBQjAwMDNDOEU0MDdBMDJCODdFQzU5QzgwRUVCRjVCNkEwMEJGNDgKKzoxMDJBQzAwMDIwRjA0MDc5ODYzNUJGNjBCOUMyRUNFRTgxNUZCOTA5NkMKKzoxMDJBRDAwMEQ4RjlGQjZCNTQ4QzY3OUE3OTlEMkUzRUVFMEE0NUM3NTgKKzoxMDJBRTAwMDdBRkIxRkJBNDM4NUY2NURDMTIyMEZFMEVCQzhFNUVCMjgKKzoxMDJBRjAwMEJEOThGRkMxRjM1MzREQjlEQjdBRjlGQTZCNkUwMjc5RDkKKzoxMDJCMDAwMDk4MkRBMkVFRTlDODZGQ0Q4NTdERjkwNzZBNTRDQzNGQjgKKzoxMDJCMTAwMDBEQTQwREY1MURBMTY1REYxMzRBRjg1MUZBN0Q3RjU1MEYKKzoxMDJCMjAwMDYyOEQzNTZFNzM4N0MyRjRENzc1MEFERjA3REE2NkNGMTgKKzoxMDJCMzAwMERGQTA3QzcwOUQwMkY5NjFCRTQ2RENCNzE0NTU5RUM3Q0MKKzoxMDJCNDAwMEVCRjBFRjREN0MwNDBFNUYyNzE2RkFEOUIzQzgwRkZFRTkKKzoxMDJCNTAwMDI4QTM4RjM4QTc4RjNEREMzRjdEMDRFNEJGMUJFODg2QTgKKzoxMDJCNjAwMEM5RkY2RERDM0Y3NUY2M0JCRDIxNzI1ODAxM0JFQzE2ODkKKzoxMDJCNzAwMEFEMUM0MjUxQ0VGNTlERDY2REI3MjcwQTYzNzYzOTM3MjUKKzoxMDJCODAwMEQ1NDlGNzhEQjlCNkZBNzkwRDQ1QjZFRkZFRjA2Qzg3RTkKKzoxMDJCOTAwMDdEOTI2MDdBOERCMEY1RTlGMkY4QTY4MURDMkVBNzdBRjUKKzoxMDJCQTAwMDk3RDkxOTlBMThCMUVFQUIzOEY0N0E4M0NCNjg1NjJFQzAKKzoxMDJCQjAwMEMyQkUwOUE0NDUxQTYxN0Q5Q0Y2RjQ1NkJFM0U3RjIzMzEKKzoxMDJCQzAwMDFCNUI5NEY5RThCRjZEODUyN0I1OEY3OUJFQkFEREZFMzIKKzoxMDJCRDAwMDE4MDUyN0ExNzBDRTE5MTdDRTg3MkUwNkNFODlGNkQ5RjMKKzoxMDJCRTAwMDlDRkI2Qjc3NEE5MTVEMkZEMUU3RTI3NDk2MEZEOUUxOTgKKzoxMDJCRjAwMDY3RkU3QzA3QzQ1MTY5Rjk1OTRFODc0RjI5MTJGNjdGNDkKKzoxMDJDMDAwMDg4Q0Y3NzcxMUFBRDlGODJCRkNERjhFQTczOTA3ODAzQjEKKzoxMDJDMTAwMEY1MjZBN0NFQjMwNDBCMDhCRkU3QTVGRUZFOUNDMkY2QkYKKzoxMDJDMjAwMEIzMTc0RjFEN0Y5Q0U3NjExQ0ZBRENFNjMyQkVBRjU4M0MKKzoxMDJDMzAwMEUyNzhFRDhBRjEwMzZCMzlBMUIwRkRFNzkxNzVFMTc5OTYKKzoxMDJDNDAwMDk0QTYzRDc2ODdDQkU4QjdENjRGM0VFRDcyRDNEQzA3MkUKKzoxMDJDNTAwMEM5RTZFQkU5Mjc4Q0ZGNUU1OEIzNkVDQjc0Q0FDRjRBNDYKKzoxMDJDNjAwMEJFMEZFRDlGRUMzNUVEOUJDNTAwRTQxRjBENkFFMDBGMzQKKzoxMDJDNzAwMDY0RjM3RDdDQjI5QUM5NTE3MzVGM0RCM0NFMkU1NzlERUMKKzoxMDJDODAwMEU3QUREQzNDMkZERUVEM0M2N0MzRTVBQjkzMUVDNzkyOUUKKzoxMDJDOTAwMEFGQkY1NkVDRkIxQTIzRjFFQjMxRThDQTE5QkY2RTgyQzUKKzoxMDJDQTAwMDVGOTk5REM5RURFMDQ4RkFBQTM5NjNEM0UzQ0Y5Qjg3Q0EKKzoxMDJDQjAwMEI3MEY0QzRGOTY1RjgyRjMzMzI5RTk4MEVEMjcwNjBFNUMKKzoxMDJDQzAwMEZGQTE2RTc1MDVFQ0RCQjE3OERBNjA3MzYyRjE5QkQzMUUKKzoxMDJDRDAwMDkzRjIyQkIyMjhFMzA1ODg3QjQ2NkEzMjUwREVBQzA4QkIKKzoxMDJDRTAwMEZENzFGQjAwRjVDN0VCOERGRUM1NkY1QUU2MzlBODUxQTMKKzoxMDJDRjAwMDY4QTc4REMzMjc4NkVCMjMyQjdGM0QyMTMwRkFFOUUwQkYKKzoxMDJEMDAwMEUzRURFMEY4NzREQUQxNUQ2MkNDMERGRDdFNDA4NjBDMTcKKzoxMDJEMTAwMDIxODU1RjZCOUQ3NzNCRTI2REM4MDc3NDM2RDZCQ0MzRDcKKzoxMDJEMjAwMDZFQzY1NzgxODU4RDYxODhEM0I5Q0Y0QkM4MDdFRUE5OTAKKzoxMDJEMzAwMEE2REQxMjQ2QkI2NTlFM0I4MzlERkJGMDE1RTEzRTFFNjIKKzoxMDJENDAwMEY1RDM4N0ZCNjExRDdDMkNCRkRGRDQ4RkVGOUJGMTU0NDMKKzoxMDJENTAwMEFFRjc2RUNCNjBFNUFEQ0QyQzdFRUMzRTcyRDk2QjNBMTIKKzoxMDJENjAwMDZERTc3RkQxNDUzQ0Y0RkQxNjJBRDcyMTBFRDg0REVERjUKKzoxMDJENzAwMDc4RjgxRUE4MTgyMjEwNDc2RkEzRjVBMzE2QkZCQjJEMjUKKzoxMDJEODAwMDVDQUQ4MTlERDA1RTVBQUVFQUY0QkIzNEE3MDJDQjcyMzMKKzoxMDJEOTAwMDYxQjk1NjREQzc5Q0VERkVEQUQyNkM4ODgzMTc4Qjk4Q0IKKzoxMDJEQTAwMDU3NUI0QUNCMkRENEE0NEI3NzZCMzhCRjlGOTdCQ0U5QjgKKzoxMDJEQjAwMDAzRkIyQzFEOUNGM0Y5QzlGNTc0NTU0NDBEODlDMkUzM0UKKzoxMDJEQzAwMDBBNjlENTkwOEIzMUEyQjczOTlERDFGNzhGNDJCQ0U0MDcKKzoxMDJERDAwMDA5MjE1QUU5QTZGM0ZGMzkzRjdGRDVBNTM0OTZEQzBBQ0QKKzoxMDJERTAwMDdFOEYxQzczNDNGQ0EwNDk2NUZCMTA0MDBGRURGMzkyRUUKKzoxMDJERjAwMDcwMkZFMUY4NTVGOEI4MjM3RTEwNUZDRjBGRTRBMTE4Q0IKKzoxMDJFMDAwMEE0QjY3Njg5QTQyMUQ1RkE1Q0VENjY3MkFFNUQzM0I0QzIKKzoxMDJFMTAwMDcxRTk0OTkzM0ZCMkU1NEYyRjYyRkNBNDA0MjkzREE1MTcKKzoxMDJFMjAwMDg4M0YzQUU1MzU3MTQ3RUFEREQ5Qzk3QzI1QkFCMDFBNDEKKzoxMDJFMzAwMEYyMjk2MUY2OUU3OUJFRTc0REM1Rjg5QzlCQ0VBM0Q1REQKKzoxMDJFNDAwMEM3RTU1ODdFMjZEMjI5N0RCRkRDRkI4OUU0M0U4QkNGQzcKKzoxMDJFNTAwMDFDNUU1NDcxQUMwNkZDOTI0MTE3QzY4QjAyRDNDOERGQ0UKKzoxMDJFNjAwMDQ2MkNGMkY2QTgxQjgzNkVGNEM5RUNBNEZCMjg3REM0QTMKKzoxMDJFNzAwMDY3QjJCODA0MDFCQTQ5QTM4QTE4RjYyMTBCQzRGOEEzQjMKKzoxMDJFODAwMDg1MDA2RjZGRUQzNERBNUY5NzNDOUQ1QUU2Qzk3RUFBRTQKKzoxMDJFOTAwMDBBOThGREJGQkREQURCNjBGNTAzREU0RDYzRkIyRjc3REIKKzoxMDJFQTAwMEY5QUE5RTg2Rjk5NUZBRTJENUU4M0U0Mzc2RTYyNDc2QkQKKzoxMDJFQjAwMDdFMEFFOEY4MTI4RDBDMDkyMkM4QzEwODYxN0EzM0FDODkKKzoxMDJFQzAwMDMyRkQ1QUEzQzE3OTI5ODE0NEM5RjlCNEYxRjRBM0ZEQjMKKzoxMDJFRDAwMDVDRDU5MzcyQkNENTBCRjgwOEIyNzg5NzdGOTc4MEM5MDAKKzoxMDJFRTAwMDgwNTI5RjkxRjA4Mjk4RjRBRDZBNzczMzdENTEwMkUzNkUKKzoxMDJFRjAwMEY0NTc3QTg5OEZENkZGNjNCRjgyRjY2MTlGM0Y0RjA2RjIKKzoxMDJGMDAwMEJDM0UyRkFFRkIyNkM0OUY4NjdGRTlDNkZDQzZCRTNGRjMKKzoxMDJGMTAwMENGQzZGQ0ZCM0VGRjE1Q0I0MDZFRjcwOUU0Mjg1NUY2MDMKKzoxMDJGMjAwMEE0RUE2QzFFNEYzNjI0NjlCMENGMTc1ODZBMTBEOEU3NTAKKzoxMDJGMzAwMDE4N0U4MTg0MjEzRkQ4MTVGQUU5RTIzN0U3RTFDNEQzNEUKKzoxMDJGNDAwMEM0ODVCNDlEODc3NDdCNjhCQkYwNDdERUY3OTc1MEJBQTEKKzoxMDJGNTAwMDdBREE1N0ZFRTBBNTI0MTk1NzMxRTMyOUNCRDJBMjBGMjQKKzoxMDJGNjAwMDAzREUzQTI2RkQ1QjAzRjA0RDM3ODU1MzQyRkJENTA4NUYKKzoxMDJGNzAwMDAxRENFNUQ5MjJDNjFGNDlCNjJGM0UxREUyNjU0NzgzMTUKKzoxMDJGODAwMDM1OTAzRjVBMjU5NzYxNkE2QzYwMjk1QkVGNUY3OUEzQTIKKzoxMDJGOTAwMDdCNjFCRTM1NUE3RDBEQzRENzJCOEVFQjI4Njc5Nzg1OTQKKzoxMDJGQTAwMDM2MEY0MEI5RjI3NTU2RUU1MDE4QkY0MEJDODg1OEU0NTEKKzoxMDJGQjAwMDZFRDVEOTI5MzhCRjNFNEUyN0VEMjE2M0QwMTBDNkU1MjYKKzoxMDJGQzAwMDFCQzdCOTAzN0JCRTlDOTUwRTIwQ0ZERDQyMDc1MTk3RUUKKzoxMDJGRDAwMDk1MEUxNjUyM0E5ODYzQTUwMzQzQjgxODNBRjgyQTJBNzAKKzoxMDJGRTAwMEVCNEZDMjNGQzY2QjM1NDIzMjZFMzc5QTBGMzZBQjk5MDQKKzoxMDJGRjAwMEE1QTNGOUM1ODRFM0JFOEFDQzIwQzg1MTkzMkZCNDA1OUMKKzoxMDMwMDAwMEY3QTI1Qzc1NUZBRjQ0QzA1RjM3RjlDNEU0OEY4RjNEQjIKKzoxMDMwMTAwMDIzN0MxMjAxN0U1RkVERDNBRjRBQzUyN0UwODc1OEY5QzQKKzoxMDMwMjAwMEUxREEzMUY4NjYwNTE5MUUwOEQyNDYyQjY0MTI0QkE3NjcKKzoxMDMwMzAwMEEyRTRFNzk3QkQ1NTNDQzVDMjA3NEVCQ0FENTgyNDkwRUQKKzoxMDMwNDAwMDkzMzY3OUM2Q0ExNkJDNkEyM0U3MUJBNTBCQzdGRkNCMEMKKzoxMDMwNTAwMEIyREUxMUI0RjA2MTI3RjU0M0MwNThFRTE2QzMwNEY0OTQKKzoxMDMwNjAwMENBMDJERkJBM0YwMjVEQ0E3NURGMEI4MTNGRTg3MjQ3RDMKKzoxMDMwNzAwMDFBMzA2Rjc2QzEzQjY5Mzc1MkJBRkNFMzI0NTE4N0M5RDUKKzoxMDMwODAwMDc3RThFQkJFOEJGQzdDMjI4RDgwN0RCMkJENzIzREM2QTUKKzoxMDMwOTAwMDdERkY3ODUzNzQyQUU4ODkyRDE0RkYyNzUxMkZDNzI3MDUKKzoxMDMwQTAwMDhCOTg4MzM5MzQ5OUVEQjdFQjIxRjY4Qzg2RDg3QkMyQTcKKzoxMDMwQjAwMEJGQzc3OUQ5RTBGNTg2QjAxRTVENjc5QjdDRENFMTYxMTYKKzoxMDMwQzAwMEZCNUQzQjNDNENERjZDNTE3QTU0RTBCN0UxNDI1NTRCMjEKKzoxMDMwRDAwMDk1RUY1Q0E5QjJGQTRCRENBNDIyMUNDNEQxNzA1RkI5OTUKKzoxMDMwRTAwMDQzOTU2QTdCNTk5QzJGQjE4NEJFNUYzMkFERTQ1MUVCQUUKKzoxMDMwRjAwMDdFODFEOUVFQzFFNjNFQjQ1M0I2MzQxRkMyNjc1NjVEMzkKKzoxMDMxMDAwMDlDNDBERTk1QjcyNEE2QzNGRUI4RkE5N0E1ODIwQkZBQjkKKzoxMDMxMTAwMDlEQ0RGNjcxRTE3RDhCQzU0RUQzNTVDNjlGRUE1RkE0NjgKKzoxMDMxMjAwMDI4RjBCMURBMUFEMzMzMkRGMjU4MTU4NTY4MkE3QjdCNDMKKzoxMDMxMzAwMEE3ODdDNTY5RDQ1NjgyREZENUMzNUZDNzdERUZBQ0UyRjAKKzoxMDMxNDAwMEIwRjA2NTI4QjdGNjkwMzBFREM3OTM2MEVGODNDNTg2ODEKKzoxMDMxNTAwMEYwMjU0QkJGQzFCQTNFOUIzRTVDNDE5NzJBQkQxQ0FEREEKKzoxMDMxNjAwMDJDM0MxN0QzQTE3QjcxOUY2QzQ1QjBGQTBGRjJEQ0QxRDgKKzoxMDMxNzAwMEY0MDYzRjI3MkQ3NDYzQzI2RkVFRDdERUNFRkRGNDlBQkUKKzoxMDMxODAwMDIyMTVGOUI0QTM0OUU5QzU3MzMwMkFCMzlGM0UwODU2MDYKKzoxMDMxOTAwMDhGN0JBRTAwRjY2OUE5ODU4N0ZFMzAzQzYxQkYzNjM2NkQKKzoxMDMxQTAwMDkzRURENzQyMTlGNjZCRTEwOUZCQjVGMDg0RkQ1QUY4QUYKKzoxMDMxQjAwMDBFRkJCNTUwRkU0RUIzODE2NUQ4Qjc4NTMyRUNEQkM2NDkKKzoxMDMxQzAwMDY2QjI3RDVBMjhDMzNFMkQzQzBGMzUzN0UwRjNEOUU2NzEKKzoxMDMxRDAwMDQ2RkNGRTVDNzMxMzk2MjkzREEwRkQ0NzRBNjIyMUIwNzAKKzoxMDMxRTAwMEFCQkJFRjUyMENDOEM3RTlFMkVCN0VDNDI4Q0EwMjdBMzcKKzoxMDMxRjAwMEYxMDQ1OTNDQzFGM0UyMDM3ODJFREExMzEyMzFCRUQ3NDEKKzoxMDMyMDAwMDE5N0E4MERDNDA5RkRERjNGREREMTAxRjUxQkZFQkMzNTkKKzoxMDMyMTAwMEE3NDc3RTkwODBEREI2NDc4ODM1OTAzMDIxMUJENThBNDAKKzoxMDMyMjAwMDFBOTlEQTEzQzVBMUNERDU5OTYxQzBEQkU1RUQ5MDlGNjAKKzoxMDMyMzAwMDM4NDM2RjA5QUZEMzkyNjVERDVGQkVGRTdCOTZGMkQ0NTMKKzoxMDMyNDAwMEQyNUVEOTRCRUJERkQ1QkRBODFERTQwNkMwMDE5QjZCNTgKKzoxMDMyNTAwMDZERUE5MjlBOTY2MjRBQjQ0NUQ0QTAwMUY5NTdBOEM0N0YKKzoxMDMyNjAwMDgxRUVCRjA0RUIzNTFERTA2Nzc2RTA2NzQ4NUIwOEUyNUUKKzoxMDMyNzAwMDFGNTM3NUE1MUNGODk1RDY0RjMwM0VCOUIwRkE1REFBMUMKKzoxMDMyODAwMDhFRUY5REVEQzZBQjI3NTY1QzUwM0QyMjhERDMxRjdDNDMKKzoxMDMyOTAwMDE3QzZFOUE3ODNCNDY5ODMxNEY2QUQyMDVCQzA4RUYyMkMKKzoxMDMyQTAwMEIwRkRFMDZFMTc5MzEzREQxRUY2RkM5REM3REMwRkFGN0IKKzoxMDMyQjAwMDVFRUVBMUNGRTUxRUM2ODdERDlFNDgyRDlDNEIxOTlFNzQKKzoxMDMyQzAwMDIzNjIxQ0E4Q0Y0NUJCODA0MzBBNEQ4NUFGQzBGOUExM0UKKzoxMDMyRDAwMDNCN0UyMjEzRDg2N0Q4QzNGOTc2RkE1NDNGRDNFN0Y3NzkKKzoxMDMyRTAwMEE4QThDRjk3NEZGRDc2N0IyNjJENEZGRjU2MzgwQ0ZBQjYKKzoxMDMyRjAwMDc5MkIwOTdCODE0RTYyREI5ODVDNzlBQTYyNUE2NjNEMjQKKzoxMDMzMDAwMEFEN0VDOUZDNjczMjQxNEY3REFDMzJCQjM2Q0VGRDkyRkIKKzoxMDMzMTAwMDk2OEUxQkE3NDJGQ0VBOEZDNzk4OUNGQzM2MUZBN0Q3NDYKKzoxMDMzMjAwMDM1RDg4OEVCMzlERjg3NzYwRDc1MkNEMDZFNjkwOUM5RTEKKzoxMDMzMzAwMDk4NjcyNEU2QjBBN0UyRDJGRTBBRUEyOUQ0MzA4ODUxODEKKzoxMDMzNDAwMDc4OTQzRjJGNTAzMTRFNzJENkNERUZDMTE4NDQ3QjQ2NTIKKzoxMDMzNTAwMEYxNDRCNTBDRkFCRTI3MjYyMkJGQjc2OURFMzhEOERGQTQKKzoxMDMzNjAwMDVCN0RFNTc4RkUzNDU2MkFFMzM5OTRBREE1MkNDRTlBRTAKKzoxMDMzNzAwMEU2RkY3QzFDRUM5ODFERkQxRTI2MUY3QzJBRTY5OUM2RTQKKzoxMDMzODAwMDRCMEYxRUFEMEVDMjUzRDQ4MERGRTNDNkFBNUFDNEJCOTYKKzoxMDMzOTAwMDI2NkE5OEFGNEE3RkMzRUYwRDQxM0NCN0IyOTVGMDc1RUUKKzoxMDMzQTAwMDY5MTBGMURDNURDN0E0OEY3RTdBMjlFNEVGN0M1OTBCQUMKKzoxMDMzQjAwMEYzQkIwOTMwMUYxQzREMzMxMUY2OEQ4NjBGQTcwMTNDNUUKKzoxMDMzQzAwMDdGNjNERTZCMzBENDlBNDZFQkI3QUZEM0MyQjAwRTczRDcKKzoxMDMzRDAwMEI1RUE1QUM4MzdFOEQwQUFEMTFGNEE5QjUzQTM1RThGREIKKzoxMDMzRTAwMDcyNjhFNERDMDZERTlGRDE1RTJBNjNCRTExN0MwN0JFRjQKKzoxMDMzRjAwMDI0RUQ2NDAwQ0VDREU3NzE1OTk2OTY1MTJFODAxREQ2RUUKKzoxMDM0MDAwMDUxODdFMTQwMzhENzYwQ0IzRjZGQ0ZCQzA2Q0YyQjQ5MDcKKzoxMDM0MTAwMDJCMzIxMUNFMEU2MkE4NTAzRjU2MjdBMzlFQ0NGM0E5QTMKKzoxMDM0MjAwMDA5QjA0QkYyQ0NCODJGMUNDNUIwQzQyNUIyNkVCMTlGMDkKKzoxMDM0MzAwMEU3Qzg2OTkwNkRFN0M3Mjc0N0VERTU2QzFFNjdDODc2NUEKKzoxMDM0NDAwMDlDRkIzOENCRTlDNTg5MjdFNzdDQjM4MjhGNjYwMEJDM0IKKzoxMDM0NTAwMDU5NzBFMDU3MUYzRDlGMDc4M0U1RjUzMENGM0NDRDhCN0EKKzoxMDM0NjAwMDcwODdCNEQ2MkE5MDVGOTM0OTYzMEJEMERENDVDM0VCRDgKKzoxMDM0NzAwMDgwNzM2RTY5RkIyMEFDRkI1QzVEMjYzQTFERkY1MjMyMDcKKzoxMDM0ODAwMERDMEFGRDZFRTU3NERFNUQ2OEQ3REI3QjU0QzlFNEM3RkEKKzoxMDM0OTAwMDMwRjBFM0Q0MjY5MUM0MkNFMzQzQkMzMjY2MTk2RjVBNTIKKzoxMDM0QTAwMDc3QTZBRDNDQkQyN0Q3NTY3RkU2QUUyMkRCRjc1OUYxQjQKKzoxMDM0QjAwMEQ5QjZFRjk3RUMyQkI3OTVFN0Y0NUQ2RUFCN0ZFOUExM0EKKzoxMDM0QzAwMDZBNUJCOTJDNzE4REFERkVCQ0EzQUI2Q0U1Rjk4MzdGNTMKKzoxMDM0RDAwMDY1QUJCRkUwQzQzQURCRjdDQjg2RDZEQkJFNUZGMUQ2ODcKKzoxMDM0RTAwMEFEQjZGMjk1QzM3N0RCRUE5Qjc2QkQ1MzJGQ0VFNkY2RjkKKzoxMDM0RjAwMENEQzVEQUYzNkVCODRGQzIxNkJGQjVGQjBCNEU3QjVGN0UKKzoxMDM1MDAwMEZENEI5QkRFMEE3MjJEQTAyMDdEQ0JBMEM3NjlGOUQ2QUEKKzoxMDM1MTAwMEJCOThCRkE1MkUwRUVCMjA1Nzc0MkU0N0E5MTg1QzAwNTAKKzoxMDM1MjAwMEVCNTYxNTUwNTExRkM4M0U1NjRGRjYyRDQzRkI2M0NBNEMKKzoxMDM1MzAwMDJFMkE4RkU2ODE1NTRBNDZCRUE3ODE1QzZFOEUyRDJFQkYKKzoxMDM1NDAwMEI2QzRBNTNDNUEwRjlFRTFBQTBBRDRFMjNFODhEOTVFRDEKKzoxMDM1NTAwMEQ2MEMxMkY1QzM3ODNBQjM3QkE4MzcwQkY1M0MzQTZEMUQKKzoxMDM1NjAwMDZGOTlEN0YzQTI4ODQ3QTU4N0E5NUZGOEE4QzUyRjFDMzQKKzoxMDM1NzAwMENCMEY3NEZBN0QxN0VBRTc0RDExODkxN0NGMUYwODkxMTkKKzoxMDM1ODAwMDQ2Nzg5NjM2MUVBQjg2QjQ2MUVBRkZGREI1ODdGMkU3NTIKKzoxMDM1OTAwMDc2MjVEMkQwNEJGQkRENUVFNDY1RkJBNURDRkZFQjJFOTAKKzoxMDM1QTAwMEVDNDNCRTE4MkU5NDUxQkYxMDU5MkZCNUM2RUQzQUY5MTEKKzoxMDM1QjAwMEZBQTZBOTRGQTFGRjQ5RjE4RUYyRDZDNEZCNTY2MTI4QTUKKzoxMDM1QzAwMERFMDY3MkU3MkUyRkNBQzMyOUJGNzFCRjBDRkNBNTE2RjkKKzoxMDM1RDAwMEE5NzkyQTdEMUYzRUEyMThCMDBGRjUyMEM3NkI5MTU2MUUKKzoxMDM1RTAwMDU2MERBMUE3RTI1MEZENjE3OENFRDBBOTlENDE5RjI1M0YKKzoxMDM1RjAwMDI1M0IwRkEzNUFGMzE0RTE3OEIzQzNERkFCMDY1OUEyRkUKKzoxMDM2MDAwMDJFNjZGNjlGM0M1Nzg5QjdEMjdFMjQ4REMyOTFDMkZGQTkKKzoxMDM2MTAwMDMwOUY1MjYwMTdEQkU3Mjg5NjdGMDdGNDA2RDZGRjc5QzQKKzoxMDM2MjAwMDNBODVBQTRDMTVGMzQyM0M0MDA3MDIzRTkxN0UzQzQxNEMKKzoxMDM2MzAwMDFGRUEwRDBGMUM4Mjg1QjIyQ0M0NjE5RjEwRUM1M0Q4NzkKKzoxMDM2NDAwMEFGQUJDQURDODVFQjZFREFBRDYwQ0Y0Njk5M0ZEQzA5RTMKKzoxMDM2NTAwMDc4MERENkQ5RDczQjRERkQwRUUyQTk1RDYwRjFGMUVFQjQKKzoxMDM2NjAwMDBDRkRDNTZBM0E2RTc3NzY1MTI2QzQ2MjIxN0U1MjZGOTAKKzoxMDM2NzAwMDkxMzczQkI4M0U4RDdBRDlEMzk0MzdCODkxMzMzRjY5QUYKKzoxMDM2ODAwMEVGNTBGQURGMjU0RTAzRjg3QTA4QzgyRENGQkQzRDA0NzAKKzoxMDM2OTAwMEU4RERBM0QxRDU0NEJCM0VBNjQ3NTA5RjMyN0JGNzM2MjkKKzoxMDM2QTAwMDBFNTM0REQxMUFDQzAzNzgzRjU4OEVGNkFEQTdFOUY5RTkKKzoxMDM2QjAwMDk0RjhGMzBDNDlDNDk4MzczNjVFMDMzMzc2QTNCRTI3REIKKzoxMDM2QzAwMDQ1OEEwRTc2NDU5M0FFMThCRDI5RTRDMTVDOTVGQjM5NTkKKzoxMDM2RDAwMDUzQ0M3M0FGMkMwRkE4OUJFM0MzOEM5QjhFQzQyMzc5NzAKKzoxMDM2RTAwMERDQ0Q4QzQ3OUFGRERDOTY1RDNFNzkzQzdCREM0M0ZENkUKKzoxMDM2RjAwMEQwQTgwNURFMkQ3NDFDQzA0QkM3QjlGQTVBQzQ4MzRDNDAKKzoxMDM3MDAwMEQ4QjlERDNGOTdGNkRFODdGQkIxNkQzQUVDMzdDRkU1RjAKKzoxMDM3MTAwMEY2NzIyNUUwODdFMjdCOEE0MkQwNEY1ODBBRjE5NTJDNTkKKzoxMDM3MjAwMEYwN0UzRjUzMEI3QzY5QzY2Mzg2M0NFQzFDNzczODQ2QzEKKzoxMDM3MzAwMDI0MTY3RjczOTk3QTRCM0M3RjI5QzJBQzJCNjYxRTE5RTUKKzoxMDM3NDAwMDlBQkM0Q0FGRDE3RkZCRTE3Q0Q5QjQ2RUZCRjlDREU5REIKKzoxMDM3NTAwMDNERjZGMkNDNURGNkYyQUNCOEJENENBREU2RTM2MDE3RDkKKzoxMDM3NjAwMDgwOEQ4NkYxOEQ3REY2RUZGNUU2QkU0MTBEM0I2RkE2QUYKKzoxMDM3NzAwMEQyOTFDRjMzRkQ2QkJCM0Y4NzcwRkQ2RkU2QkIxNUY0NzUKKzoxMDM3ODAwMDI1QUE0MEJDRTZERjZFRDdBQkI5NUNDRkU3M0FGNDY3NTkKKzoxMDM3OTAwMEI5NUZDMkI4NDNENUQxRTAwMEQ4OEY2NjdDRTg1NzVFRTgKKzoxMDM3QTAwMEREOTY3NzY2QzY3OTlDRjJEQ0ZCRkE0RTQyQkZBMEZGM0QKKzoxMDM3QjAwMDFFNzVCMzc4MDdDNDkxM0YyQ0UwNzE5NTdDMUU1Nzk5MTQKKzoxMDM3QzAwMEMyRTMyQTA1MkNBRUUyOTJGNDk3RDYwQTk4MjdGQTNFNzUKKzoxMDM3RDAwMEYyMDU2OUJDOTRDNTczRDhCOUFGRjc2QUU1MTcwNDlEQzMKKzoxMDM3RTAwMDhEMTdCNThDNzc2NzQ5NkMzOTQzNDMzQzA3RUE5OUYxRUIKKzoxMDM3RjAwMDE1MzM3RTEwRjAxQkNCODE3RkI3ODY1RjZFM0M0MkU5QUMKKzoxMDM4MDAwMEE0RkE5NzZFMDJGRDVDMjVCRDc4QjQxOUU0NUI4MThDNDcKKzoxMDM4MTAwMEY5REREQTgyNUJCRUU5ODU3ODI1N0NBN0U1RUE0MjdEQTEKKzoxMDM4MjAwMDMyRjJDMThGNUQxODQ3RThFMjc0NkQ5RTU3MzRFMzMxODAKKzoxMDM4MzAwMDlBOTdGMTgxQ0Y2QkRBNDczMTJGQ0ZERkY3ODJCRDdCQ0IKKzoxMDM4NDAwMEM5M0UyQUEzNkRGQThFQzVGRENDRjhERTlDM0VGQkY3N0YKKzoxMDM4NTAwMDNFMjI2NDY5OTAxRkIwMjYyRTMyRkJDQUYwNTU1OUYyMDEKKzoxMDM4NjAwMDFGNjdGMzc1OUJCQjM2RjFDMDVBNUEzRTQwRTJFNTcwQzQKKzoxMDM4NzAwMDJGNUQxOUE3OEZGMDgwRkQ5Q0VDMjQyMkUwMzlBOTQ5MjcKKzoxMDM4ODAwMEM3QTU3MDlDRDY5RkZCOUNGRDdCQTlFMzFDRUQ2Q0U3NTQKKzoxMDM4OTAwMEI5NUFDN0ZFOTE1RjIyQTdBRkE3RTM2REQzMUIwNTkwNkUKKzoxMDM4QTAwMEEzREJENjUyNUI5RTk2Njc3OUY5QkVGRDBDMzIwM0U4MjYKKzoxMDM4QjAwMEYwMkFDOTE3NEUwMDdFNUY5NTcwMUZDQ0ZEQzZDQ0Q3OEQKKzoxMDM4QzAwMEFFMDdCRDdFOENFNTI3NjlEM0Y0OUQxMDZGRDY3RTJBQTYKKzoxMDM4RDAwMEExOUVEMkQyNDg1OTk5MkZCOURGRjQwRkU3QzMwNEY2NUQKKzoxMDM4RTAwMDRGQ0NGOEQ3OTM3NDVENDFBRjFDQTA3RTc5QjEwQkZDMkYKKzoxMDM4RjAwMDZDMERDQjdERDQyRjg3RjJEM0Q0MkY4N0U3NDFFQTk3ODUKKzoxMDM5MDAwMEMzRkI3RkE2N0UzOTk0MEY1MUJGMUM5RUNGNTJCRjFDQjQKKzoxMDM5MTAwMERFM0Y0N0ZENzIyOERGRTVBQkMyNzhGOTIwQUQwRkY0M0EKKzoxMDM5MjAwMEUyMkQzQkE4NEVBQjAwMzlFQ0QyODAzRTlDNzJBOEFBOTcKKzoxMDM5MzAwMEVBMzY3NTM1MjVBOTJGNzQzRDg1RkIxQ0Q1NTdCMTdDMUEKKzoxMDM5NDAwMEVBRTVGNzNEODVGQjFDRDYzODlDMzU0RTk5OENDMzBEQjYKKzoxMDM5NTAwMDA5NjYxQzBFNDJBM0JGRTZGQjExMjNGMUI4Mjg4QkM3RjIKKzoxMDM5NjAwMDREREM4RjYxRjY4M0YxQ0Y1MUZERjAzOEU4QkI3N0ZENzgKKzoxMDM5NzAwMERCRTM2REY0RDM4NkY5MEY3NDdCOEJFMDdDNDcyMzhGRjgKKzoxMDM5ODAwMEZCOTlGOTMzQkEyRDNGN0ZDM0MxMTZDQzlGNTE3MjhFN0MKKzoxMDM5OTAwMDM3QzJCQTFFQUNGMDYxNUU4OUUyOEE2QTIwNkY5REZFNzIKKzoxMDM5QTAwMDlDRTlDNzM5RUQ2OUYzRTlENDZGN0U2RTU3OThGMUQ1N0MKKzoxMDM5QjAwMEVEMkU4MkY5RDQzMTgxREExMzYwNUYzNEM3MTdCRkU5ODUKKzoxMDM5QzAwMDFBM0JFRTdBQzI1QkM0RjNGOEVDNzI2MUU0MUMwMThGMUYKKzoxMDM5RDAwMEZCQjhDMTlBQTVGMzU0MDQ4RTBGOUVERjhFQTJCMTg4NjYKKzoxMDM5RTAwMEM1RkZBQ0YxNTc2RjcxMUMwRkFGN0I3RDA2REE3NTAyMTYKKzoxMDM5RjAwMEI1RjdEMEZFRDNBMjIxODhBMzc1QzJCOTgxMTRGM0RCMzkKKzoxMDNBMDAwMENCRjlCRDI1NDc0MTdCQTMzMzg3RTU4QkQ0RTQ4NzQzQkUKKzoxMDNBMTAwMEQwQkUyREE3MzI2NDNENDc2MDlFNzMxOEYwNTdBQTQzNkQKKzoxMDNBMjAwMDk2RkU2RUY1MTc4REFCRkYyNEFBQUZGNTcxRjRCNUU0RTEKKzoxMDNBMzAwMDY2RTc3Q0RBMEU1RkE2QzJGOThENkVERkJBNDFGMEEzQUQKKzoxMDNBNDAwMEJCNDM0MThDRDNGN0U3NTQ5MjIxNEJGRjUyNjgyMTlFMzAKKzoxMDNBNTAwMEYzOTA3Q0NDMUU5NjQyMkFEQUMzMzJDQ0JGMzQ1OURGQjUKKzoxMDNBNjAwMEFDRDdDMkU1M0U2NTY3OEMyRjdBN0MzRDU4Q0YyRDQ3OTkKKzoxMDNBNzAwMEYwN0UwOTc3MTA1NDI2N0Q2QTZDREZDRTVCMkMxMkQ1NjAKKzoxMDNBODAwMDIyMkZDQzcxRUZGNjMyNzlEOTVEMUFENTIwQ0VEMjFEMTYKKzoxMDNBOTAwMDkyNzUzODJGRDJBRDk3MjM5RURCMzg5RURCMEE0QzdCODQKKzoxMDNBQTAwMDIyOEM3NkNDRjdCOTdDMzVGQjY5RTM3MTgwQjYwNjA1Q0MKKzoxMDNBQjAwMEVEQjk0ODUzODY1NjkzODU3OUJEREYwMTdFRUVGNkI1QTQKKzoxMDNBQzAwMEFBQjA3RkE5RTQ1NDhDREJFRkMwODRGRDk2NERBQTk5N0YKKzoxMDNBRDAwMDg3RkQ3RTFGRkE1NUZDRUIzNEU4RDczNUM2RjlBNDYzQTEKKzoxMDNBRTAwMDlDMUUzRUE5RERFQURDRUZBM0QwODZBQzc5MkJDRUE3RTUKKzoxMDNBRjAwMDlGREI5RkNFNzYxQjRBODcxNDU4RjcyRDhGRDlDRjMzODMKKzoxMDNCMDAwMEJCMDgzQkRGQjVGMUQwNjZFNEYzRURGMjIwREE1MURCMjAKKzoxMDNCMTAwMENGMDkyOUNGODk4NUQyMDRDRTZGMjNGRUJEQ0QwRUNBMzEKKzoxMDNCMjAwMEUzRkM5NEM3QkYwM0E5ODFCRTI4NEJEOEVEOTY3OTQ3MjMKKzoxMDNCMzAwMEVERTVGOTgzRjZGMjgyMTM0RTNCQzg3ODE1RUNBMEQ1N0IKKzoxMDNCNDAwMDVDRUUwRDUyNzlDRjkyNjY4NjY1QzA0NzI0MTZBRjAyQUYKKzoxMDNCNTAwMEI4RUI0OTVGMEJFNDUzQjgyNDk2MTdCMjlBRUJCRjk1QzQKKzoxMDNCNjAwMDVDM0YwNkQyMzIxMEZFQkMwNkFGQ0RGRjI0RkMzRUMwNDcKKzoxMDNCNzAwMDdDREU3RjQxQ0RDMEU2NzYxMEIyMTFEM0FFRDJEMTZGREMKKzoxMDNCODAwMDJEQjhGQUU5MkExNDk3MEVGQkFBREVCMDlGRjc1RkU5NzkKKzoxMDNCOTAwMEIwOUY5Qzc2NTY5NURDOEI3OUJCQjk4RUI4ODZCOUVGMTEKKzoxMDNCQTAwMDBCRjM4NDdCMEY5Q0UzNUZFQ0I4NjY3RjkwQUYwNUYyNkMKKzoxMDNCQjAwMENEQkMwRjA2RUYxRkE2RUQwQkU0ODQxMEE2NzhDQTZERUUKKzoxMDNCQzAwMDY0RTc3NUYyNkUyNzQ2NkYwQTNBNUVDMkQ3N0QxNERFNEYKKzoxMDNCRDAwMDYyNEIxMDZGNEJGOUJCNUMxRkJCQzcyQkI3NDY4QUVCMjAKKzoxMDNCRTAwMDc0RkNEQzg2M0VCNDA3NTZERDQyRTc4Mzc2Rjg3OUNDNzgKKzoxMDNCRjAwMDk3MzFFQjY3NjZGNEUxQjlBNURENzUwMkNGRTMyNTY4N0YKKzoxMDNDMDAwMEQ3OThFQkJDREJDN0NFMTlENjVGMjlDNDQ1NjhERjU4MEYKKzoxMDNDMTAwMDg0RTMyMzVDNDVDOUY1QTU3ODNBQzlGMEM0RjIxMkFGMzQKKzoxMDNDMjAwMEFEQjU5Rjg3QUM3N0Q4MkYyNjNEQUM3NEJDM0ZFOTY1MTYKKzoxMDNDMzAwMEZCRTcyNjFGQkM3QkQ5ODkxOTUzMjgxQzFCODQ5RURBRkQKKzoxMDNDNDAwMEI0NjkxN0FFMkYyREZDRTEzQTBGN0MwOEJGNEY2MjI5RjMKKzoxMDNDNTAwMDMyOThFRkFCRkU5Mzg2RTc0MjMyODYxRTI2OTQyNEFGNUQKKzoxMDNDNjAwMDREMjNCMTlBNDU4NEZDOEI3N0Y4MTI4MTk2RkY2QTZCREQKKzoxMDNDNzAwMDVGNDc3NzAxMUNGMzFFN0UwQThDM0M3N0Q3MzM1N0Q1RkMKKzoxMDNDODAwMDVFOTkyQzdCRUZFQkM3NzI5MDhGMDM1QjkwNkNCRDJEMjAKKzoxMDNDOTAwMEY3QzM1MEQ0QzVEMzE4N0M1QjBEQjI1MzgyMUM1QzUxNjIKKzoxMDNDQTAwMERCMTkyRTRDQjZDQjg0NzZDMjM4RUQyMjY0QTc5Q0EyRDkKKzoxMDNDQjAwMDlEQ0Y2QzQ3RDFENTA5RjczRkYxNzk3OUY5Nzc5MUMzNTkKKzoxMDNDQzAwMDYzMUQ1RjA2QkM2OUJBMEZDRjNCMkU5MzM1RDhCRkZBOTAKKzoxMDNDRDAwMEI0NzA0QzlBNjhERTUxQjJEMzM1NkQ3NDNCMEE3NjhCNjIKKzoxMDNDRTAwMDA5QkY5ODFBRkUzODdDQjc4RUVGMUEwN0ZFRkY2RTdDNkMKKzoxMDNDRjAwMDRDRDQ5RkMyQkY1RjM0N0NCNDdBRUJBNEIxRTcwQjcwQTUKKzoxMDNEMDAwMEI5RjA1RTIyREQyNzVBRkFEOUQxRkYyNzhDOEJDQkQ3QTkKKzoxMDNEMTAwMDkxMzA4NEJDNjQ5N0ExQzE3RTVFQTlGNjEwRkFGNzcyNTcKKzoxMDNEMjAwMDQ2OEQwNjc2QzAxNjVBMDYzQjYwNEI1RjBGQzZCRjRCRUEKKzoxMDNEMzAwMDhCMUZFODA2QTIyRjRENzgwOUM4ODMzOTQ0Q0IzODQwNDEKKzoxMDNENDAwMEZCOURBM0M5NzAwMjhCQzg1NzBFODgxMDRGMjc5RjI1NzMKKzoxMDNENTAwMDk4NUY5MkRFRUY2NUY3MDgxNTVFRkUyREYwQjczMjMyMDAKKzoxMDNENjAwMDU0RENDRjQ4Q0JBOEZDMTYzMzdBNTk5Q0Q5ODQzRkFEOUMKKzoxMDNENzAwMEVBNzgzNUM0REZFNTdBMTIxNjAwMkUyMTRFQUE4MEM5RjIKKzoxMDNEODAwMDY2MTFEQ0RGRjAxQTA3RUY4NEYzMDI0NDY2RkEwOUVGRUMKKzoxMDNEOTAwMEQyMDFCRENBRTNFRDkzMTlDOTkwNkU0NUFCQzczQzk3RkMKKzoxMDNEQTAwMDlGQzgxOEM3OUEwQzU3ODU1MUEyMkMyRENEREMwOUYwNUQKKzoxMDNEQjAwMDk0NDY2OTA3MDJDMENGRTI2NTczQTI2MjM4NDFGQjJGQzcKKzoxMDNEQzAwMDNGQ0REQTkxOUZCMTczMjZENDM3NTlGMzhDMkY4OTU3QTEKKzoxMDNERDAwMDUzQUU0Q0U2NzFGOEQwNUE3QjlDOUEwQ0QzMzlEM0Y2OEIKKzoxMDNERTAwMEU1M0Y1QkI1MTdFMjE0OTM0NkM5NkZFNkI3N0IzOTlDOTQKKzoxMDNERjAwMEU5QTc0OTA0RkEwRkQ2RDlGNTg2OTdFNzc5N0IxREY3MkQKKzoxMDNFMDAwMENDNTRGODVERjZGQkExOURGRUMzNTcyM0E4MDdEQzI0MjQKKzoxMDNFMTAwMEFDMkE2ODVGQUM0NUJCQzFGNDRCNzY0MzQ1QjBDNzBCRDkKKzoxMDNFMjAwMDA4QkI5N0Q3RDlCRTkyQjUyNzIxRTZBN0I4QkQ0NDU1QTAKKzoxMDNFMzAwMENCRTlGN0Y1NUUwM0YzMTJEREI0NENGMTI4Mjg0NENENEQKKzoxMDNFNDAwMEExRUY3MzQ1MTY2RjY5MTE4ODBDRTVFNDc4MDlDQzQ3M0EKKzoxMDNFNTAwMDcwQUI5RjY5MDdGQkU1QjAzQTBGRUY0RjMzRkRFQTM2RDEKKzoxMDNFNjAwMDJEOENGOTEyQTRBNERBNjYzNzlCNzk2MUI3OTYxNTREQUIKKzoxMDNFNzAwMDg2RUZFOTkzNDZFMjRFMUFEMEU1QUREOUM1Njg0NzA3MEIKKzoxMDNFODAwMEIyODZGRTFBRTRFQ0I5QURFOUNCNTQ5MEFCOTBBRjcxQjkKKzoxMDNFOTAwMDM5RTQ0NzdCM0I2MzU0RTlCQkNGRTYxMURENjI5RkI5NTAKKzoxMDNFQTAwMEU1NDY4Q0IzQjlDRjRFQjFCRDRGMzREQkNGNUIxQjNFODMKKzoxMDNFQjAwMEIxMDZDNjk5RUE2MzdDNTg0NUI0NzY2ODU3NDVFQ0U3ODUKKzoxMDNFQzAwMEFBREQ2NzczNkNGNjdBQjJGRjdDREJGQjA0QjU2QkFDRTIKKzoxMDNFRDAwMEY3MDA4REREN0YxQUQxNEJBQ0ZENEYxQkEzRkYxOThFNzAKKzoxMDNFRTAwMEZFQjU5NEZEMjdGQkNEQjJGNURCMjFCM0Y4NkIyQ0U4RDIKKzoxMDNFRjAwMDRENzkyRkU1MDI1Rjc1MzExQzk1MUQ2QjdGQTBEMkM3RjAKKzoxMDNGMDAwMEUyOUE1REExNDZEQzFGQTgyNjk0RjEyOUJEMkMzOTc3RTEKKzoxMDNGMTAwMDUyNjJFNzdEMDlEQTZGMjRERkJFM0Y1MENERTk1OEE0MzUKKzoxMDNGMjAwMDk0ODFFNzA3NjRGQkZEQzY4Qjg5RjNCRTYzQkI1REY0MzgKKzoxMDNGMzAwMDRCODgzOTUwN0M4OUZFOEE0MURDMjdGODkzMEZDRjAzRTgKKzoxMDNGNDAwMDhFNjUzNzBGMzYxMzhDNEYyRjRFMUJCQTBERjZDMTU3QTcKKzoxMDNGNTAwMDZFRDM5NThFMTBFNjNEQTMzRkZGMzdEQkU2MkYwMzNCODQKKzoxMDNGNjAwMERGQkMwN0IzMjMyODIyNUUyMkQ1OTNGMTNDOTdEOTRGQkIKKzoxMDNGNzAwMDQ0MjFEMzQxMkU0NjQ0OTYwNzgxM0Y3NEZDQzFFQzVDM0EKKzoxMDNGODAwMDVCQkU4NkY5NzQ5RTg3QUYzNzg0QzVDNTk2NzkwRDQyQUUKKzoxMDNGOTAwMEZFQTE3NUJDQTU3OUJEOTI2NTFFMTEzNzk5OEZFMzcxOUQKKzoxMDNGQTAwMDdCNzc2NEJDNDk5RjZDQkM2MzNDOUU2NThFNTdCRkNDREQKKzoxMDNGQjAwMDNFQkY3QTQ1QzNGOUQ1NzMzRTM2QzczQjA2RjM0QjgxMDYKKzoxMDNGQzAwMERGMDlDN0UzRjk5NTIzRTMyREI3Q0ZBRkRFQURFMUZDMDEKKzoxMDNGRDAwMEVBRjk3REJDMjNFMzRERkE2NEUzOTk3MTlEMkVBNUIxMDYKKzoxMDNGRTAwMDExRTg3MEFDRjg4RTE5RDdCOUI2NkJCRjJEQUU0MzYyMkQKKzoxMDNGRjAwMEZCOTc1NjE1MTNCMjUzNjBGMjIzRUVBQkVFMDRCQTc4N0EKKzoxMDQwMDAwMEJGRUVENjEyRDQyQkRDQkVDNjdCNTdBOTNFNUUyOTMzNDkKKzoxMDQwMTAwMDc4NTdFNEZCRTIyRDE2M0NFRUE2NzJDNDk4MDlFNzI5MTYKKzoxMDQwMjAwMDU0MDIwN0NGRTA3Qzg1ODFFNzJENDJGODdDOTREQUVCREYKKzoxMDQwMzAwMDA2RTY5Nzk0RTBGN0M3OUJDMzU4REVEN0JDMTA5RjY2OEYKKzoxMDQwNDAwMDNGMjUwQkQ5RkQ2MEIzMTYwOTI5RURGNjEzM0VFNjdGMzcKKzoxMDQwNTAwMEVFQ0NEMUFFRkIxMkU4QjcyQTJGQ0IwQjVFNzgwNTMxNDAKKzoxMDQwNjAwMDJDNzYzNDM1QUMwRjdCNjA3RkU4RjNBNDBDNzRFNDhDQzEKKzoxMDQwNzAwMDVEMENFRTYwQ0RBNDM4QUNCRkI3NkM2MEIwMTlFMkEwQTcKKzoxMDQwODAwMEIyNEJDN0JDNTgzREY1REYzQjc4QzVDN0ZDNzlCNzlCNDEKKzoxMDQwOTAwMEI1Mjc1N0IwN0I1MjU3NzBGRDQ0QTQzQUNDM0Y1QUIxNzQKKzoxMDQwQTAwMDMyMDNGMzExNTZBRDM2RkMxQUM1REI2QTQxNzhCNTk4NzgKKzoxMDQwQjAwMEVCM0IzODFGRjUzOUJFRDQ0RTdGMjEwODlBODdBRTU3QTcKKzoxMDQwQzAwMEQwOTBFMjcwOEZEQ0U3RjI1RjVDMjNEMDdFMjNGRTZCNDIKKzoxMDQwRDAwMEQxQ0Y4OEQwODY5OUI0OUZDRjcxN0Q1QkY1ODY5QjQwMDgKKzoxMDQwRTAwMDNDODI1Q0E1QTBGQzVBQkREQUVFMTdFQ0Y0MjQzNEIwOTcKKzoxMDQwRjAwMDczNzY5NjA1NDkwQjZEQjdBQUNFRkVEREVENjY3QzE1OEQKKzoxMDQxMDAwMDcxREMxM0IzNjI4MjdCNjNDQ0JDNUMyNzdFOUM3MUQzNzEKKzoxMDQxMTAwMDlGRjlFQ0YxRDEzM0E0NzQwNzlFMERFM0Y5QkJDRUY2MDEKKzoxMDQxMjAwMDY2MUNCNEREQzdFNDVCOTdDMkU0QzM2ODNFNjBGMEJDQzQKKzoxMDQxMzAwMDBCN0RBM0ZGNzcwMkUzNjgyNjdDQjk3MjVDMDA3OTlGNTAKKzoxMDQxNDAwMEQ3NzBDMjk2MUY0RjExOEI0NkI1Qjk0RjQwQTQwMzY1NzcKKzoxMDQxNTAwMEE4ODcxREYzRDkyRDFDQzgxOUVGREVBODVDMjJGRjZFQkQKKzoxMDQxNjAwMEE4ODRGRjdEMDM2MUY0QkNERjE5MzVFRjQ1MkYxNTkzNUIKKzoxMDQxNzAwMDU0RkNDM0UyQzEyQjhFNEFFMTE2M0Q4OTE3MTMwRkZGOTEKKzoxMDQxODAwMERCN0NCNENCQzdGMEY5RDJEMjBGMkE5ODFGOTg2RkZCMTMKKzoxMDQxOTAwMDNCMDJFNjM5QUY2QjQ3Q0EzMjkxMkRGNEJDNzJCRDYyNjcKKzoxMDQxQTAwMDMwN0Y3NUI4MTRFOEYyRjg5NTY5NjFGNkY3MzBCODFERkMKKzoxMDQxQjAwMDk0RjhBNTA4NzZEMEE3RUZERjI4QjBFNTNGRjM3RUM3RDcKKzoxMDQxQzAwMDVBMkY2N0RFQTVFNTVDNzJGMjlFMDRDODdGNjkwOTg3RjUKKzoxMDQxRDAwMEQwMUVDODE2MDlGMDUzMkVFNEUzMDVEOEY3OTM3NkJCM0EKKzoxMDQxRTAwMEQ1OTY4RkQ3RDZCRjVGODBCOEUxQzM5MDlGNjgzOThGQ0YKKzoxMDQxRjAwMDk3RDdEMDI3NzQ4MDdERDcxMjY3NzE4ODA0QUQ0N0UxQzcKKzoxMDQyMDAwMENFNkY0ODA4RURBNUM5QkMyRkE3NUNDRkJGQzU5RTJGQjgKKzoxMDQyMTAwMEQ4QjE2OEI1NzY0MDg3QkM5QUVBMUVCODIwNkNDQjJFMjAKKzoxMDQyMjAwMDE2RTczMkVCOEZDNEJCRjgzOTU1MTc2OTI0NzA0RTQzM0IKKzoxMDQyMzAwMEYyQjE3ODczODhERkRGMzE1MTlFRUY4NzYyNEMyQjJDMEYKKzoxMDQyNDAwMDg0RkNERUI4NUE0NUU3QkYyNzJCQkFDQzRGRkJFRDBFRjYKKzoxMDQyNTAwMDk2MzdGNjAyN0RDQTYxQ0MwNzVGREI3NDRGMDRFMjg0QjcKKzoxMDQyNjAwMDVBNTZFQTM4Rjg1QTZFMUZENEZCMTk1REJERUU0QTE0NEYKKzoxMDQyNzAwMDQwRENGQ0U1QUNFQTdBN0Y3NjhBRkE0RDVGQzVGRTE2MzMKKzoxMDQyODAwMDhGNzEyRkZEN0EzRjhCQ0YzQzJDQTY5NjA3MzdGMEVGMkUKKzoxMDQyOTAwMDVGRDgyMEUyN0Q0MzFFRTJDNzczQUM5RUUyOUU4NTgwMUMKKzoxMDQyQTAwMDhGODczN0VFMEVBNzNBOEZCOTUwOEJBRUYzNUJGMEVFRTcKKzoxMDQyQjAwMDI5NjZGNzA1MTBEMjc3MTlDQzczQ0JDNzhGRjQ3RDk3OTkKKzoxMDQyQzAwMENFM0JGMzYzMUZDQUQ5NEM4OUY1NkI2OUJGREUzQTFGMzkKKzoxMDQyRDAwMEIzRkRGMzdGRkEwNTlFQjM3RjlFREZCRjRFQzhGNEU1QzIKKzoxMDQyRTAwMDEwNjdERjNFNTIyNjMxMzhFOEJDM0Q4Mzk3NjNFMjcyQTcKKzoxMDQyRjAwMEYwMkI5M0U1RTc5NjU1NDExOTY4OTQxMkRGQkJGRTk3QzIKKzoxMDQzMDAwMDNBRTFGRTlBRUQwMkUxQzQzQUI4MENFQkYzRkJERTdGMzIKKzoxMDQzMTAwMEMyQkYyRkJFRTY5RDZGRUQwMDdENTBBOUEwQkZCOTlEMjUKKzoxMDQzMjAwMERCM0IyNjdDRkZFOTY3NzkzRkZGQzlENzY1MkM3QzZFQjQKKzoxMDQzMzAwMEUzREY3RDgwQ0ZFMDQ1RTE3MzVCMkE3QzdFMjY2ODZDRkQKKzoxMDQzNDAwMDg3RjcxRUM4MDRBMTIwNzgzRTU2NkY4N0JDRUNBRjM3QjQKKzoxMDQzNTAwMDkzQzg5N0U4MUMxRTBFMUZEQzBGNjc4RjY4RkI4NzUyRkYKKzoxMDQzNjAwMEI1RkY0MTk2RjEzNTNGQzI3MzEyRTdFNzJGRjY4NTAxOUQKKzoxMDQzNzAwMDE1NUIxNjEwRUMyNzA1MUNERjE4NkY1RENCMzM5ODlDN0UKKzoxMDQzODAwMDRCNEI2N0NGNEM2RTVGNEFFRUMxMTBFNDJGNjgxNUZGQjAKKzoxMDQzOTAwMDcwOUI0NkU1NEM2N0UxRTA5QTU0NzFFMkE3MDJDQ0VFQ0YKKzoxMDQzQTAwMENGMTgyMzJFN0U5OEUzRUZFQUNDQzhCNzAxRUU3NkVENjYKKzoxMDQzQjAwMDAxRjRGNzE0ODE0NEEwRkU5Njg1NDM0NEIwQjQ3QjIzRjYKKzoxMDQzQzAwMEMwRTg5N0MyRkQwQ0MwQUQ1Q0M2RUVCMUY2NTNCQzQzNkQKKzoxMDQzRDAwMDgyOUNCRjgyQzFCRjQ1M0Y0RTIwNEZERTFGM0E4RTc5N0YKKzoxMDQzRTAwMEFERkU4QTIxRTQ3NzE0ODVCOThDQUVDMDFGNTRCOUZEQTcKKzoxMDQzRjAwMDc2RDhGRjI2REFGNTk5OTI0OTc3Nzc3NDAxMUQ0QUM5NzQKKzoxMDQ0MDAwMDMyRDI2NTZGMjY2QkZGRkJDMDFENURFMDJGRUU1MTY4NTkKKzoxMDQ0MTAwMDFCOTA4M0I5MEFEQTM3Q0VGOUZEMkNDMEU2QTc2OEM2MkYKKzoxMDQ0MjAwMDUxODA3NzE0M0VERDQzREY4MjdCMDlCNjRGNjdGN0I5RDEKKzoxMDQ0MzAwMDJDMTYwN0Q3REMwMDc0Nzk4RDBGRUQzM0ZBN0U4REY1REQKKzoxMDQ0NDAwMDVDRkU0NzlDN0YzRkYyMzNGQjZBRkI5RjU0RkNFRTVDQjMKKzoxMDQ0NTAwMDhGQjFFOEY1MjQ2RkZGMDlFOEY1NjQyQUZFQTVGNEZBQTgKKzoxMDQ0NjAwMDVCNzg2RkExRDcwRjQ4NkE3QTdEN0IwQzdBRkQwRjY4NjUKKzoxMDQ0NzAwMEVGQzQ4QkIzMkMxMTYzMTdFQzJCQ0IxRjJEREIwN0ZEODcKKzoxMDQ0ODAwMEM5OUY1OUI0RUJCQkY0Mjk3REI0MkQ4NkFCMTkxNjZDQ0EKKzoxMDQ0OTAwMEU3OUU5M0YyM0VGQTI3MThEN0JDN0ZDMEZDM0I0NkNEN0YKKzoxMDQ0QTAwMDQwMDhGMzUzRjRCQkEwNzIxN0M4QjEwQkU4NTcwRTY0NzEKKzoxMDQ0QjAwMDhGRUVGNzY1M0Y4Mzc3RjEzNUJFNjhBQUZCMTRCRTEzMTQKKzoxMDQ0QzAwMDkwRDlGOUQ4MDBBQjM3MTZERkZDM0FDMEYyNTNDNkUyRjgKKzoxMDQ0RDAwMDlCMTczODFGNTBCRTA5MDZFNjRGQ0MzNzY3OTI3QzkzNzYKKzoxMDQ0RTAwMDFGQjgyMEJFNzkwODlGOUU2MkM2MzczOEZGQ0I0N0YzQkUKKzoxMDQ0RjAwMDBEODlBREVCMDJGOURBNTlDOEY4NjJDRUZEOUI5MDJGMTkKKzoxMDQ1MDAwMDQ2RjgyODE2QzNFRjUyQjI4Q0YyREJFNEEzOEZFRjhGOEMKKzoxMDQ1MTAwMDYxN0Q2N0ZCQzAxOEY3MDY1NjcwN0U1QUE4NDVFNjAxMTQKKzoxMDQ1MjAwMEZFOEQ0QkI0NzY3NjhFNjkwOENGRUJGNjkyRTE3RTM3M0UKKzoxMDQ1MzAwMEU2MDlCM0JDNUM2RjJDNjYzMEYzNjA5MEMwRkRCNDhCQjEKKzoxMDQ1NDAwMDM4MUVGNjgwOEYwNjdFNTAyNThGNjdDOTgzNjQ5NTdGNUQKKzoxMDQ1NTAwMDM0M0ZGQjJCMTIxNUQ2N0I2MDVFRTFFM0ZCRDIyMzRCOEQKKzoxMDQ1NjAwMDAxOEZCRDY0NjgxNkQ4Njc2M0FENTMyRDFGNEZDODMyRTUKKzoxMDQ1NzAwMDZBMDMyOUY4N0YyMjNEQjQyMUMwRjREMDA2M0U2RUU2REUKKzoxMDQ1ODAwMEM3NkEyM0Q4QTc0RTdFNUZCQ0YxRDkzRjNDM0U0RTNGNjEKKzoxMDQ1OTAwMEVCMzkxQ0VCMDI5RjU4NUZBRDBCQTRENjU3MzcwNEVDRTgKKzoxMDQ1QTAwMEZBQUE0MjI4NEFDOUZGRUIwMzI5RTQwN0U1RkY5QjUzMTcKKzoxMDQ1QjAwMEUxRTU1M0YwRkI5RDgxMTRGQzFFMDk1QzE4QkU5RkU1RUMKKzoxMDQ1QzAwMEY4N0VGNjUzRTI3QjE3NkZERjEzRjhDNEYyQjYyNzE1QjcKKzoxMDQ1RDAwMEJFMjhCRTc3MDZCMjJGMDhERkJCNTJBRDE3QzVGN0Q3OEUKKzoxMDQ1RTAwMDAzQjhGRTRGMjNGQzdFREQ4N0YxRjJFRTA1RTQyMEY0RjQKKzoxMDQ1RjAwMDkzMDI4RTVFNkIzRkFBQ0VGQUExM0NGNTgxNDBFOTdFMjQKKzoxMDQ2MDAwMEYxNDdEREUxNTRGNzI0RDE3NkZCNTJCNUFCMEQ2ODNDQTAKKzoxMDQ2MTAwMDBFQUQ2RjA2RkZFMUUxQ0ZGODcwNUY4MUVBQzcwMzgxNUQKKzoxMDQ2MjAwMEZGNUVCOTdGMjgxNTFEMkMxNjk5MUNGMjA2MTY3NTgxQTAKKzoxMDQ2MzAwMEJFRkYxNEZEMEZBNDkyRkY1RkU1NzQzNjkxNURGMDFBODIKKzoxMDQ2NDAwMEE3MEIzQUVGOUYwMjlDNEVGOUQ3Q0JDRjMxMkI1QUY0RjAKKzoxMDQ2NTAwMEU1MDBFMjZCRTg2QTkwNTc3QkVFQ0UxNDIwREU5NTZGQTIKKzoxMDQ2NjAwMDI0MDRGMDEzOEU3MjNENTYwNTk3RkRDQzRGQjZEQjIzMjQKKzoxMDQ2NzAwMDI3MDRCODY3Njc0RkEzMjZDMDc5Mjk0QjdGQUYwN0IyREQKKzoxMDQ2ODAwMEM3RUVDRjA5MDc4NUVGMzczMEJFMkZERDE4ODI3NkI1MkMKKzoxMDQ2OTAwMDdDN0UxNzZCMjcxREM5MzRERTBBQTBGRTg5QkMwRDRGMzYKKzoxMDQ2QTAwMDYzQTY1RDZFOUJGMzEwMjMzRDJDQ0Y3NjYxRUFCRjczNEEKKzoxMDQ2QjAwMDc5RDQyRjlCRjJGRjdEQUJGQ0ZGOEYxMUJBNjJGRDVEQjkKKzoxMDQ2QzAwMEFDRkVBMUYwOURFM0YwRkQyNTE1N0M0RUJDNEMwNEU3NEIKKzoxMDQ2RDAwMDI1MDE5OUVCREI4ODlBOUU0MjRGMzlGQjMzRkRFQzkxMjMKKzoxMDQ2RTAwMDc1MDI5RDY0ODlGQjY0QTc4RkU4RUY2MDNBQUM0Nzg3NDkKKzoxMDQ2RjAwMDg4RTdBODU2NzA3OUIyNjI2MTA2QjdEQjM1MkZGNEZGMDAKKzoxMDQ3MDAwMDMwOEZDMzNGN0NDQjAzNTVCMEFGREU3QkFGNTYwNjI4NUUKKzoxMDQ3MTAwMEM4NkQ2MDdBNEZCRjY1MEFDNjU3QTdGMjdFOURGMDhGQkQKKzoxMDQ3MjAwMEI0NTdGQTY2QzFERjhGQTBFMzRFODM3OTJDNTk0NDEyNDcKKzoxMDQ3MzAwMEUwMzdBNjgzREQ4MEYxMEEwREZGQ0U3MUE2QkIyNzA0MEEKKzoxMDQ3NDAwMEYxRDkyRDQyQ0Y5QTc1QTA1N0FGRjZCMTczMzFBMUQ1RUIKKzoxMDQ3NTAwMDEzREM5RkQ5NkFBMzVCMTJBQTk4QTA3RTBCRDZEN0QyOEUKKzoxMDQ3NjAwMDdBRjA5RTk1MEJBRUVGRUU0OTY5NjdENUE0OEI5QzlFQkYKKzoxMDQ3NzAwMEEyNEJDNkM1NkIyODg4NzEyRjEzQkZBM0M3NjFFQjU3MjcKKzoxMDQ3ODAwMDE1NjkxNDAwREZGRTBBNDE4M0Q0M0IzRkE1MTNCMDk3OUYKKzoxMDQ3OTAwMEM0RTI0MUNDOUJGQTZDMDVBMzE3NDJGRDkyRjFFRjY5OEMKKzoxMDQ3QTAwMEU5MzRFMTVBMDU3OEZGQjQ3MDk5RjVDNjFFOEZENzczQzYKKzoxMDQ3QjAwMDlDQjcxOEY5N0I2NDNFMjZDN0IwMjIyREJGNzczNDJCRjcKKzoxMDQ3QzAwMEU1QkU4MkY5RUM2QUQ2MENCODMyRjkzRDREQzdGQjFCNDkKKzoxMDQ3RDAwMEJCNDZGMkJFQzNBMTU1RkVGRkY5N0FDOTc5QzU1OTdDMjMKKzoxMDQ3RTAwMEQ0NTE3RkU0OUU5MjkwOEFGNjFGRkU5RDBGRUI3RDNEOTMKKzoxMDQ3RjAwMDlDMkVENDhDNDgyQzFERTU0QTE4RUY4OUE0RTU1NjU4MDgKKzoxMDQ4MDAwMDBGQTJEMkIyMUZDQkVENThENjQ2Q0E5RDU4M0ZDNEVBN0MKKzoxMDQ4MTAwMDEzNERCQjIwQkNEMzc2REJCMTFGNzlBNDlGMUREODhGNkQKKzoxMDQ4MjAwMDZGNjREQzlENTgwRThFOTQxRkM0RkFGOUFDRkU4NThFMjEKKzoxMDQ4MzAwMDMzRUE5RTk2NDEwOUU3RkY4MTZDQTRDM0JFRTlFNzlCN0EKKzoxMDQ4NDAwMDZFQzBGOEQyNzU0RDM3RTFCM0JCNTlBQjgyMzg5RDc5NTQKKzoxMDQ4NTAwMDVGQzlFN0FGQkI0MTAzN0ZGQUJBMkYzRjg4RkJGQTY2MTcKKzoxMDQ4NjAwMEZGMkJDMUVGMDBGRUQ3RTU1QUIwOTc5NDQyMzFGMjk4ODIKKzoxMDQ4NzAwMDJGQzk3RjQ5MzhEQUIxQkM0MjY2RjdGRUFGNUM3ODdBNUYKKzoxMDQ4ODAwMDdCQkIyNTdFQTdDMkRGNEY4N0ZDMUFERDcyNUYwNjQ5MUUKKzoxMDQ4OTAwMENBQzMyNzA0RTM3QkU5MTc0MUNGQTNFNzQ5QzgwMEE1QjIKKzoxMDQ4QTAwMERGMEY3Q0M1RjExOEQyNzNCNTk2OEE2RkNDRjk4RUQ1MUYKKzoxMDQ4QjAwMEJGMzlERkIxRTQ4RDg5MzdGM0ZEOTY2MkZFRjc3NjFEQ0YKKzoxMDQ4QzAwMEYxNEJDRkY0MUFDQ0ZGNTkyOTcwMzhGREZDRkU0ODVFM0QKKzoxMDQ4RDAwMDZGMDUxREU3RTk1MkE0MEIxREU4NzYwNUY3RUY5Q0ZBN0EKKzoxMDQ4RTAwMEMxMUNGNzA5MjE3QTAyRTgwNEUyQzRGNzk2OEZDNkVGRUIKKzoxMDQ4RjAwMDg1RTJDREVDN0Y3MjM0NDZFMEZFMkU2RjI5QzE3REIxOUEKKzoxMDQ5MDAwMEEwREZEQzU3Njc3MkVEMjE5RjU5OEU2MTcyNDlBNEI4MTAKKzoxMDQ5MTAwMDA3RTU5QzQ3MzdFNTFFRDM5MzVBNUE5RjIxOTY1MTNGOEUKKzoxMDQ5MjAwMEE4ODdENDg2NjY0MTFFNjgzNDA0N0ZFQTg3OTY4RkNBQkEKKzoxMDQ5MzAwMDY4NEZCMDMyMURGRUU4MDBEQTNGREE2Q0I4RjE1MTZEMTUKKzoxMDQ5NDAwMDNGRjdBM0EzNTcxMjc2NzQxMUY3RERDRUZEMDhGNUI3MzQKKzoxMDQ5NTAwMDU5ODYwQjdDNEI2OEQ5M0I1MjM2RDQxMDJEMTc4RDk0NTkKKzoxMDQ5NjAwMDYzNTBERUMzRUQzRUExRTdEQzhGNjBDRjg0RUFFNTczRTAKKzoxMDQ5NzAwMDU2Nzk1RkM1RTVFQTQ0RjJGNEJGMDBCOUU5MDVDQTAwMUIKKzoxMDQ5ODAwMDgwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFNTdEODgKKzoxMDQ5OTAwMDBCNzg1NEQ1QjVGMDNFNzNFNjk1NjQyNjk5QkMyNzA0OTAKKzoxMDQ5QTAwMEM4MDkwRjA5OEEzODA5MDQ4MjYyM0JFMUQ1NTg3OTBDOUQKKzoxMDQ5QjAwMDE1MzU5NjI4OTM4NDQ3NzgyNjIwRDVCMUQyMzIyMTgwQTgKKzoxMDQ5QzAwMEEwRDg4NkFBMTU2QkM1MDlDNTdCNjlBRkI2QTBCNEU1QUEKKzoxMDQ5RDAwMDdBRDE3RjEwQjREMDUyMUEyQjU1QjRBMjUxNTBGMTUxNTQKKzoxMDQ5RTAwMDkzODI5NEE5RDU3MkQ3NUE3QkVGQ0MzOTI3MzMyMUI0NUYKKzoxMDQ5RjAwMERFRkZFRkZGNURGODc0QjNDRkQ5NjdFRkJEMUU3QkFENkYKKzoxMDRBMDAwMEI1RDc1QTdCMEY2MzYxQzY3MjE5NjNERTFDQzZDNjMxMDcKKzoxMDRBMTAwMDc2MUVGRjdDQjk2N0M5NDRCQjM2NkRBRDY3QzI2OEE4MTYKKzoxMDRBMjAwMDc5QURCRUExMUE2MzFCRjE1NTQxQkM1RDg5Qzc0RUVEM0UKKzoxMDRBMzAwMDFFQ0QwQ0E2N0JDQTE5OUJCRUFBQ0JFQTg0NzZDRUUyMTkKKzoxMDRBNDAwMDFDNzdEMEM1NTg5MUY3OTM3MDI1N0M1RjM0OUUzMTBENEIKKzoxMDRBNTAwMEJGMUQ5MjQ1RTNCNjc5NTcyQTc2OTg0MkRCMDhFNjUxQTYKKzoxMDRBNjAwMDE4QkQ1QkUzODFGNjM5NkVDNkRBQTE2NEQ2MDg2MzIzMEMKKzoxMDRBNzAwMDE4QkJERjI1RUIzMDFGMjgwMzI1MTFENjAxQ0Y1MzM1OTYKKzoxMDRBODAwMEZFREU4Mjc1NzhBRTNBNThEMzRFQThBNzk1MzA3RjA0RTMKKzoxMDRBOTAwMEVBMUUwNzlCMTM4MEIyRDg2MzYxMENFNkU1RjNBODM0RTUKKzoxMDRBQTAwMDRGMUY4RTA2RjUwQ0VGNUFBNjQxN0I2Nzk1QzUxRjgxRjcKKzoxMDRBQjAwMDMyMDM0Qjk3MUVGRUI1RTIzQjJCOTUxMjFGRDdFNjA0M0YKKzoxMDRBQzAwMDQ3MjA5QzZEOEM1NUVEQzQ3OUIxNjhBMDA0RTA0ODFENjkKKzoxMDRBRDAwMDlFOTM3NTM3RDQyQTRCQUMyQjE5MENGOUU4NkExNjk4QkIKKzoxMDRBRTAwMDZCNjNBQ0MyMTM0OEMzRjZBRUQyOUNENEUwMDhBQThGNjUKKzoxMDRBRjAwMEYyNDAzRkFFNzU5NjMwMDNCQzU0MzI3NzQ0Mjk4RUUzQzIKKzoxMDRCMDAwMDA1NjY5RTFBNzAyN0E3QzdDQkFCODM4MTQ5QjZFNDc0QUMKKzoxMDRCMTAwMEJCRTEyNjM1QTA4NzQzOTY1MzEwMEZGMEZEQzdENUVGQjQKKzoxMDRCMjAwMDdDMUZDMTU5RUFFQ0IyQjM0MTQwQ0YyMTlCMDM0QzQ1RjUKKzoxMDRCMzAwMDc4MzQ4MkQzQjk3QjY2QjQxMERFMkZEQkIzOUNFMTdDODIKKzoxMDRCNDAwMEQ3QTRBNThGNDczQTlBQzc3REY5QjMwNzNEMDE3ODlGNEYKKzoxMDRCNTAwMEYyNTc0NzYwNjc4MkYxOTYwODNDMUY1RDVENERERjQxNkIKKzoxMDRCNjAwMEY3OUEzNThGQjEzOTA4Q0EyMDQ2MDRFRDcwNjJDOTk0QUUKKzoxMDRCNzAwMEYzMEUwMkVGRTgxMDc4N0YwQkUzQ0MzMDJCNTAzQjhEMjcKKzoxMDRCODAwMDAxNUVFQkFBNTVBNjE2RTM3N0RERUREOTc5QThERkQyNTEKKzoxMDRCOTAwMDUxM0I5NThEODQ0QUM4NzYxMjlGM0JFMUVGNzlFODM3MDcKKzoxMDRCQTAwMEM4MzJBNzc4RTA3MTZEOTgzRkE3RjZGMERGM0NFNjlCMkUKKzoxMDRCQjAwMDkyMEJERkQ1NkYzMDNEN0ZGRDlBRjc1OTNBQkVCNzlFMTUKKzoxMDRCQzAwMEVDMjg4OUY3N0Y2Mzc1NkQ2MDkyNjg3Nzg2RkUxRjIxRjgKKzoxMDRCRDAwMDc4NjY2OUNDOEY3NDlCRTU0QjhCODQwMUM0RUIwMzM3RkIKKzoxMDRCRTAwMDA1MjY5NUM0RkI3QkU1NzM3NTBFRTJDNThDOEZGRjQ0RUIKKzoxMDRCRjAwMDdDRTQyMjNFMDI4MTQ5NDM3QkUyQTMyRUEwRDgzRERBMjkKKzoxMDRDMDAwMDg1RjFEMjU3M0NENDVBNEJBN0U0NkEzREYxNjA4NjFGMjgKKzoxMDRDMTAwMDMwNzYyRkUyNzkxRUUwRjlFRUUyRTRGODgwNzY0NDhGRjgKKzoxMDRDMjAwMDU3NkU4Mjc2MDBDQTE0NzVBQUNEMDI3OEE4OUZBOTMwNjMKKzoxMDRDMzAwMDg3NDJGODRENjc4M0IxOUQ3RkVBNjRERDdDQ0Q3ODM0OEYKKzoxMDRDNDAwMEUzQUJGRTE5RTY4QjQyQkZGNTBGQjg3REMwRTFFQ0Y3OTAKKzoxMDRDNTAwMDEyM0Y1MTQwREExODkwMjdCQ0E5MUVDRUI3NzFGRTFFMzQKKzoxMDRDNjAwMEY4OEI3MDdFQURBMkY0RjkxQzk4NDc3MEFERTI2MzFDMUUKKzoxMDRDNzAwMERFQjdGNUYwRDVCMTQwNDY1NDIxQjhERjRFNDJGN0I3NjQKKzoxMDRDODAwMEY1NzA5QUU3Njc5RTdGMEEwQTJCOTA3RkExRDc4QkJGQUEKKzoxMDRDOTAwMDczNDBENzhFNTlBMzIzMDI5NzMzRjY1MzhGM0JFN0REM0EKKzoxMDRDQTAwMENCQTAzRTkyRjlDRUMzQkEzQUNCQzY2NzhDQzJGNzQzQ0IKKzoxMDRDQjAwMDEyQ0JEQjczQUJCNUVGMUNCMEU5RDczOUU3QjMzOUExNDEKKzoxMDRDQzAwMDk5RERFMzYyRkYwQTBCNzZENzNEODBFN0MwNERFQUJENzAKKzoxMDRDRDAwMEQ3QzNCRjVGM0U5OEJEMEU5RkFERjBBQURBQzk2Q0M0QzIKKzoxMDRDRTAwMDE3QzA0QkY0RjIzMzI2Rjk4QjYxMTlERUE3MDJGRTY2N0EKKzoxMDRDRjAwMDMyQTdFNjgyN0VCRTBDNDJFQTNDQzAzMkREOUZBMkI5RkEKKzoxMDREMDAwMDc0NzA5QzZFNTVBQTUwOEUwMkYxMzI2NjVEMUU4N0Q3NzQKKzoxMDREMTAwMDNDRUYxNTVFM0I4RDA3RkNGODg5OUUxRkNENzg3OUI5NzUKKzoxMDREMjAwMDdBNzAwNkNBOTExNzExMkY2OTg0OTc5MTE3ODM5N0FGRUMKKzoxMDREMzAwMEUwNjI4Njc1RTNDOTY2NTEwNUU4RENBNTM4MjNEQjYwQ0YKKzoxMDRENDAwMDRFMzVBMTNCMDM5MzQ2MjE1RTU4RDgwRUEyRjM1RDRGMkEKKzoxMDRENTAwMEIxOTBEMzFDNkUxQjkzN0Y5QTE4Q0FEMzFBM0IwQjIyQjcKKzoxMDRENjAwMDVDQUZEQjU4RjUyRTE3OTZEMTAxNjUzQUI5RjU3RTc2MjIKKzoxMDRENzAwMEU1QkIyOEE3NjVCRDI2RjQ2REVBMUYxODkxRjg1MEYyMkYKKzoxMDREODAwMEYzMkQ0RTU3NTRFNTdDRjg1MTM3REY5MDNDQUJGMTIwQzIKKzoxMDREOTAwMEREODE0RUVDM0NDMEE5NjYyQ0QxMTA2RTM1MkQ3RDI0RjIKKzoxMDREQTAwMENCNjA2QzAzMzYwMTM4OUQ5OTgxRDMyOEZGRDVCNDgxM0YKKzoxMDREQjAwMDExRTRCRkQ0OUI3RUI0ODFEM0YxQkVBQTFCNzQ3NDRDQTIKKzoxMDREQzAwMDk5Rjc1NDk4M0FEN0IyMENGODRGMTNGNEFCMTRGNDRCNEMKKzoxMDRERDAwMDI5NzE5QUU5Qzc3MDlEODY0QjU4RTQzMTQ1QTAwMEVBRDUKKzoxMDRERTAwMEE3ODdGODIzQjg2RTkzRTkwRDQ5Q0Y5NDEyRUJBNzFENUUKKzoxMDRERjAwMDdBQkU2NkFEODQ1NzQ5NDc3NjYwNzQxN0FFRDdBMEQ3QTAKKzoxMDRFMDAwMENBRUVBNkY3MjU4NDlGQTA0N0UyQTdDQjg2RkE2NDRFOTgKKzoxMDRFMTAwMEM4NzY1QURGNEZCMDYwNkVBNDE5QkZEQkU4RjBFMUIzOEIKKzoxMDRFMjAwMDNBOEI5Njg3RUQwMDRGMUVENEUzQUNDNEU3QzNGNUMzQkQKKzoxMDRFMzAwMEMyRjA5REU0MjdDNDJCMUExM0JBRkUzQjAwODY4MjMyQ0YKKzoxMDRFNDAwMEVDMEZBNDI3N0VCNzQxMzdDRUEwOUVFMzc2QUYyQjczM0QKKzoxMDRFNTAwMEJGQTZFRjU0MTVFQzA3QjIyMzdDM0U5RjRFN0UwRkNFQ0IKKzoxMDRFNjAwMEU0RjZDMzY5RUZFODlEOTY0MUM5RjE1N0U3Q0NGNjVCREMKKzoxMDRFNzAwMEIzRTNGNUI3MEI5Q0Q1OTEwNDdBNDBGNjI3RjU3OTk2MDQKKzoxMDRFODAwMDFBRjQ1QTEwQjZGMDYzMDcwRkY0NDczREVDQjkxNDI0MzYKKzoxMDRFOTAwMDE5QkJDNzE2Mzk3ODcwMDA0MzE2NjFBQzFGRkUyRjcyMUMKKzoxMDRFQTAwMEQwRUYyMkJCNDNENDgxMzE2MUZFNkRBOURENzVCRkQzNDQKKzoxMDRFQjAwMDBCRjU0MURERjUzMEQ2QjdDMjcwRUM0QUIwNUIzMjIzNUEKKzoxMDRFQzAwMDA3RDdDMjdDQ0UxRDc3OTBGRTNBNUQ5NTFBQzFDNTkzNzcKKzoxMDRFRDAwMDFEOUFDODRFQzBCQ0FENjBFNjY0MDBBQjQxMTFDNkQyOUQKKzoxMDRFRTAwMDE5MkEyNDc4MTQyQjYwMEVGMDlEQURGOTE0QzRGN0FDODgKKzoxMDRFRjAwMDRDOERFNjZGRDU1OEQ0MEQ5M0NCQjZGQTE0QzREN0Y3QzIKKzoxMDRGMDAwMEVDQUM0MUM4OERFMTMzNzVGNkNCMkMwMUFGMUNDN0UxODkKKzoxMDRGMTAwMDY0RTE5NEIyNzhCRjYwNjEzNUEzMUVCMTRFNjVBNDU3QjkKKzoxMDRGMjAwMDYwOUQ5M0REMjZEN0I3RUMyNzk4QzlGNTY3RjdGQUJDRTMKKzoxMDRGMzAwMEYwN0EwRTY2MjY1OENGODcyRDRENkY3RTBCRUREOTVGMjgKKzoxMDRGNDAwMEFCRUMzMTAwRTU2NkVGMURGNEZDODY1MDNEOTUzNzg1RUUKKzoxMDRGNTAwMDE2NTJCOTQ4OENGNzBFMEIyRUNBODRCMkJERkFBNTlCMjcKKzoxMDRGNjAwMDZGMDdGRTZERENFREYwQTE1QTVFN0FEQkZCREYyOUQ3MUYKKzoxMDRGNzAwMDEwNEY0MDc3RkM2RTVFRkQwM0U1RjBERTNFRDQ0MkY2NTYKKzoxMDRGODAwMEVDODYwMUFDMUFGOUM5REVBQzkwN0RCNDUxQjM1N0VEOTMKKzoxMDRGOTAwMDg2RjJBMThDQ0EyRDk5M0EzODFFQ0E5ODQ0NzU1NkE1MzYKKzoxMDRGQTAwMDU5OTBDRjU3MzgzOTlGOUYzQjdFOTdCNzBFRUQ0QTk3NjAKKzoxMDRGQjAwMDhCRDY4QkJEQjlGOEJCMTZBOEIzNDMzMDZGODZGMjgzOEUKKzoxMDRGQzAwMDkxOURBMTNBNzg3OTc3MjZCNzUzRUYxNkY4NUU5M0M5ODkKKzoxMDRGRDAwMEVEM0Q2NzBDODlDQ0Y5QkEwOUM2Nzc1QUMzMENFRDZDNjQKKzoxMDRGRTAwMDY3Q0M0QUNGRUQwQUNDMkYwMTlGQ0FGRTlDMzE1OEE0NTIKKzoxMDRGRjAwMEEzNzAzQ0YzRjc3NjdBOEU3MEUxRjc2QTM2MzNEODNEQ0EKKzoxMDUwMDAwMEY3RTFGN0I5NThDQTc5QTRGMTc5NjQ5QkZCNDlFN0NGNzYKKzoxMDUwMTAwMEM1RkEzM0NGRTM0RjlFODkwRjIyN0UxRUNBRjA2RkM5QjcKKzoxMDUwMjAwMEE0NzVEMzYxNDM3OTdFOEJFQkQ3Qzc5NDkxN0Q5MUM3RUIKKzoxMDUwMzAwMDFEMEFDQUUzRTk5RjI5RDEyMkMwNUY0QUE1MUE1OTUzMjQKKzoxMDUwNDAwMDhDN0FDRDMzNkQzNEYwMDFBQkI0RjkxMDlGRUQ0MzcyMUYKKzoxMDUwNTAwMERDODM3NEUzRkY0NEQwRkY0NUFCQzc4REYzMEM0QzA2RjMKKzoxMDUwNjAwMEJCOUFGODlCRTVDRUMyN0UyNkQ3OEZFMUYyMEYwQzJFQkQKKzoxMDUwNzAwMDlEOUU3RDUxREJCRTYxMTBDQURGQjA4REY2NEI3MzlDRTcKKzoxMDUwODAwMEUxMDhDRTRGNjdCNzI5RTdCOTVDRDZBQzYzRTJGNkRGM0IKKzoxMDUwOTAwMDlDNDlBQTNGMjVCREE3N0QwN0RCOTAwMzY0RkY0OTU5QzIKKzoxMDUwQTAwMDFFODYzQTdDRjc4NkE4QkUzOUU5Q0NGNTA4NDYwN0YzOTgKKzoxMDUwQjAwMEQ4MDdFOUVENDFEQzJEOEQ0MUZCODZGRjk5MTMzMkRBRUIKKzoxMDUwQzAwMDdENjZCQkIwQUVBMkY0MDUyMDAzRTAyNTUyMzUxQUY5ODcKKzoxMDUwRDAwMDZDQjg4NUY4QUNBRkY2MzI2MzlCMzk5RDI3Qjc3ODcwMTIKKzoxMDUwRTAwMDVGRjUyOENBMDlBODRGOUY3NDYyMTJDQThEMTk2MDVBQzkKKzoxMDUwRjAwMDYxQkYzMzI2QTk5RTI4QjRERTE0QjIzMDNGNENGQzg4MzEKKzoxMDUxMDAwMDVGOEQyODAwREI5MTkyOEU0MzVGNDZCQzU1RDgzNEQyMjgKKzoxMDUxMTAwMDVCMjVFQ0RFRUI3MkYwRkQyODBGRTIzOTIwRUMxMDY4MjUKKzoxMDUxMjAwMENGRjU5QkQ3MTkxOTBBQ0ZEQUZEMjc1Q0Y1M0FCRTNCQkMKKzoxMDUxMzAwMDUyNzE2MjM4RUU1NzQwRUUzNTI0RTIyN0M2OUE4OUFGQTUKKzoxMDUxNDAwMDBGN0MzMzk1RkE3OUYzN0UyNUUyODBGOTRGNTYzRkZCQzkKKzoxMDUxNTAwMEVENThCNDY3QkY2NUYzMzkzNDAyQ0I4Mjc0OURFQTYzQkUKKzoxMDUxNjAwMDYyRTNFQTc3NERENkQ5MDEyNzU4NjAwQ0Q5OTVBNUM3RDcKKzoxMDUxNzAwMDJCMUQ2OEJGQUU1MzY4OUQ0QUZDQ0YwOTE5RURDRDYwNjkKKzoxMDUxODAwMDEzRDg2NTVBNEZGQjE0M0FCMzIzM0ZGN0Q1M0UzNURCQUUKKzoxMDUxOTAwMDU3OUY2NTBBN0JCMzhDOTVFOUVEQUE2NDdBNEFEQTU1ODQKKzoxMDUxQTAwMDU2RTY1N0IzRjg3QUIyQTJERTlEMEUwRjEyQzk4MTlBNjUKKzoxMDUxQjAwMDBDQkUwRTI2QUIxRjExN0Q0RTU3QTgxQUUyRUI0OEU4MzUKKzoxMDUxQzAwMDAzMTdFRUM3OEY3Q0E2RjI3REIwM0ZENzYwQzcxNTY0OEEKKzoxMDUxRDAwMDcxQkZDMDU2M0IxODY0RjBEREQ2N0VDRTQ4MzM3NEI1M0YKKzoxMDUxRTAwMEVGOUI5N0U2NzcxMDdEQjQwN0M3MjMxRDdGNkQyMzM5QUEKKzoxMDUxRjAwMDlDNkNCRUVFOTBDQTg2MDA2MzRFMEIyOTU0NEFGQTE1ODkKKzoxMDUyMDAwMDg1NTI5ODU1QTcxRjhBNThFMkY5NUY5QUM1RjdBMUI5NDgKKzoxMDUyMTAwMEFCOTg0NTgzNzEzM0MzQ0M5RjY4N0YyQ0RCQzFCRTc4Q0MKKzoxMDUyMjAwMDhBOTU1MUZCNjgyNkNDNkZEOTEwMEJGMUE3REMxRkE3MUMKKzoxMDUyMzAwMEQ4QzJGRTQyODBERkI2Nzc3OTE4RjdDOTQ1MzAzRjlDNjcKKzoxMDUyNDAwMDg3MDZGMzQzN0Q1OTFDNEFBM0ZBQTA1MDM2OTU4MzQzNDEKKzoxMDUyNTAwMDk5NTQwRTA5MTVEMkZCQTFBMUMxNTQ1RTEyMkFBNkU3RUEKKzoxMDUyNjAwMEMzNDI5NzUxQkQyNDM0OEFDQUUxQTE1MjJBMkYwRDVENTEKKzoxMDUyNzAwMDQ1RTU2NUEwMzdCMUREODg1MDI1OTU5Nzg3QUVBNUU3NTAKKzoxMDUyODAwMDIzNDNENzUxNzk0NTY4MjY5NUJFRDA2QzdBNUYxQUFBMTgKKzoxMDUyOTAwMEE3QjIyQzU0NEJDRjQ3ODUxNjUzN0Q3NEU4NTZBQTk3NzYKKzoxMDUyQTAwMDg3OTY1MzM5MjY3NDI3OTU2MzQzMkQ1NDU2ODQ5QUE5QkIKKzoxMDUyQjAwMEREQjhEMDNENTRCRjMyNzQxRjk1NTc4NTM2NTMzOTNFMDMKKzoxMDUyQzAwMEY0MzBCRDk3NzY0QkFBNTg4RkY3Njg3MzNERThFRjAwMkUKKzoxMDUyRDAwMDBFRDc5MDhGOTNBREJCODU1OTVDMEZCQzk4RTk5Rjg5MjEKKzoxMDUyRTAwMDdDMjdEQkQ5MkRBMEM3NUQzRERCQ0QxMzY1MjZEMjM1RUMKKzoxMDUyRjAwMDQxN0ZDMTJDQ0U5NzFGRkJERUZFRkUzMDE2QTdEQjQ2OUEKKzoxMDUzMDAwMDZGRUZGRTBDNTZEMjM3QkY1NzIwOEJDQkFGQURENjc2QTIKKzoxMDUzMTAwMEJGOEFGQ0RCQzQ3QzYxNzgzNDZERjQ4QjBBQ0E5NzM2OTMKKzoxMDUzMjAwMENENUE5NUM4QkU3QjI4Q0I0NkUzM0U5QTE5NkNDQTgyRkIKKzoxMDUzMzAwMEVGRDM4QTRGMUU0MDc5MzIyM0VDRjlFRDA0RTQ5NzExNDQKKzoxMDUzNDAwMDM5QkY5RTAwRkQxNUFEQjVEMDc2NUY2MzlFN0RFODVGRTkKKzoxMDUzNTAwMEQzMjYzMTkyOEJEMkFGMDQ3NjlENDE5RjZFQ0U5Mjc2NEEKKzoxMDUzNjAwMEUzQ0U4MzgzNjgzRDBEMjlFM0ZBQTdFMzFBNUM1RkY2NzkKKzoxMDUzNzAwMDZGMEVBMkZERkI1NjdCNTRCMUEyN0RCMzgyMzFCREZEMDEKKzoxMDUzODAwMEJGNzU3REREQkZFMUZCNzg3RjdDN0QxNjZENjBDRkExQjEKKzoxMDUzOTAwMDg5NUREQ0FBNEQ0ODgxNzJGMDE2RkY3MzI5RjBDOUQwRUYKKzoxMDUzQTAwMDQ4NzA0MjJBRDQ4N0VEMDgzRjg3RTVGMDlEOTEwOTY5NEUKKzoxMDUzQjAwMDUwNUVCNjI3RkExQzZFRTMyRThGNzY0QzcwNDFGRDhBNDQKKzoxMDUzQzAwMDgzNkMzRjJFRkZEMjc2NkRBMjFCRUFBMzhFRjlGNzAzMDIKKzoxMDUzRDAwMDFCQjBGMjhFRTBDNDc0MERFNzEzNjk0OTg3Rjk2QzdENDgKKzoxMDUzRTAwMDAzMEMzREE4NTc3Q0Q0QUFDMjc2Mjg0RTdGQjBFM0QwRTgKKzoxMDUzRjAwMDdFOTM3NDcxOEY2RTlGOTQwREZGRUNCRkQyNTNBQUUyMUYKKzoxMDU0MDAwMEY3RDY4RTk0Q0MxMTNERTlEMzg2NzAyMzlDQTA0NzFFMUQKKzoxMDU0MTAwMDAzQjhGQUZCQTM4QTQ3QzcyN0NGMDhGRTAwM0FCNDIxOTYKKzoxMDU0MjAwMDFEQTQ1RkIyNkQ2RDE2RjkyNURCNTIzRDk1Mzg2NEQ3MkEKKzoxMDU0MzAwMDY0RTZEOUE2MjExRjVCMDk0RkY2NzU4M0M4MUYyN0Y5QkIKKzoxMDU0NDAwMDBFRjA2QkIwNjczNzBCMzlCMUI1REJERTREOENERjY3MjMKKzoxMDU0NTAwMDEwQkZFNUZGM0FGODlEOUFDNUQ3NDMzMkZDM0E5MTU3MDEKKzoxMDU0NjAwMEM2NUQ3ODFEMUYxMTdDMDhFQkY4RDc4OEQ3NjRFRENFOTgKKzoxMDU0NzAwMDA4RkM5QkYxREM2NjYxMDc0MTU3QzFCOEMwQTc3QzVEQTEKKzoxMDU0ODAwMDMxRjRBMzdEMkNENkZCODVGMDdBRUE1RjBDQUZDRjBCMEQKKzoxMDU0OTAwMDM5OTEwQ0FGNENDQjIxMzkwOUZDM0ExQ0ZENjNDOUU0QUUKKzoxMDU0QTAwMDhENURFQzY3Q0NFRjNGMTdGQ0E2OTM3M0RDNkZFQjAxQ0YKKzoxMDU0QjAwMDM5MzczOEI5OUMzQjc0MjFGOTI1RTQ4Q0RERTRERjQ5QTgKKzoxMDU0QzAwMENERTZFMzU1NzgwMkNFRUNGMjA0N0U2QTExMzc5MDdFODkKKzoxMDU0RDAwMEVBQTlBQUE3MTJFNTBEMUJDNkM4OEU0RTFCMTEwOUUzNDcKKzoxMDU0RTAwMDNFQTUyOEFDOTVBOUQ4MEM4NTMyRTJCMTVGMDlGOTFGMTkKKzoxMDU0RjAwMDhBQzFDRUIwMDJGREExQUIyODk2NEVDRDYzQTk0M0ZGNzEKKzoxMDU1MDAwMEJCNUM2RjlFNUFBRjdFQkQ0OTdEMUY1RjhGOTIyRkIyRUQKKzoxMDU1MTAwMERBRUVFNjdFNDk2RDI2RDgyRkQ3NjQ3MzdFOEJGN0MzMEIKKzoxMDU1MjAwMEZEMjBFQkVGRThENzc2Qjc0RTBFQjY3OUJENTQ5N0VENzgKKzoxMDU1MzAwMDkzRjFFRjAyRjFCRTZERUQxQUMyQTc3MzdDNjJCQjYxRkQKKzoxMDU1NDAwMDYyQjYyQUU0NDE5NzFGRjkzQ0ZDMjVFNjQxN0IyNjczQUQKKzoxMDU1NTAwMEVEREIyNDlGMzI0MTNFMjkyNDlGRjhGOEZENDNBOUZGNEIKKzoxMDU1NjAwMDE2ODZGQTg0RUMzQzIxQ0YzREE5MzdCOEZGREZGMTczRjIKKzoxMDU1NzAwMDNFREE1NEE4MDdDNjdCRjZBOTE4QTcwMTNEQTRFMTNBNzQKKzoxMDU1ODAwMDFEMEY3MzFGOERGOEIyMTNERDM1QzZFOUE4OEQ2NzExQTUKKzoxMDU1OTAwMEI0N0IwMTZGNTFEQ0I3ODcyRDZFRjIzM0Q5RURBRDdFNTAKKzoxMDU1QTAwMDVDQ0ZDQzlFNDlGMDU3Nzg4MjMzQjM3QjkxMzc5RTM0RTEKKzoxMDU1QjAwMEFEMTQ4OTVBOTdCREVCMUExN0YwREZGQTYyNEYyQUQ2NUQKKzoxMDU1QzAwMEU3NDA3RDUzMDU4QzlCRDVDMTQ0N0RBMzZCREMzRkVFNEEKKzoxMDU1RDAwMEY3QThCQkVGNjc4N0QwRUZCMTNGQ0IxRkNDRTY3QzVENzAKKzoxMDU1RTAwMDg3QTU3Rjk4Qzc0QUZFRUEzRUM2QzFFNEZBOENBRjI3N0EKKzoxMDU1RjAwMDRGQTk1QzRGQjUyMzQ4MUUyRUMxN0U2NTdGQzlFQzlCMjkKKzoxMDU2MDAwMDRCQjJCOTlDRkI1NkI2QzVDMEQ3M0RDNzZEMzZBRkZCOTQKKzoxMDU2MTAwMEJFRDkzNzYyQkU4QkIzN0I1RkZGMkYxRkJDNkZDQjc2Q0IKKzoxMDU2MjAwMEE2RjMzN0Y2RkI3RUJCNTU0MzdGMDZGN0QzNTg5Q0VEQjgKKzoxMDU2MzAwMEQ0OUY1QkY4MUJGREU4NkYwNDNFNzAwRUUxNzVGQzkzOTAKKzoxMDU2NDAwMEM4NUY5QzFDOEYxMTlBQUZGNDMzNEE3RjYyQkFFMDJCN0IKKzoxMDU2NTAwMDY2NTUyMkE4QzdEMzJCM0NENjNBRUFBRjgzN0QwREZBMTQKKzoxMDU2NjAwMEZCODFDMDkzNUNENzI4Qjc5RTFDODE3MjI5Q0I4QUZCMzMKKzoxMDU2NzAwMDc1RjQyN0I5QjNFMkZENjMzREEzMkMyRTlGOThEOEM3REMKKzoxMDU2ODAwMEREMkFFNkRDQkFDNjk3ODEyRUU3RjAxMUVFNDc2OUZEMDgKKzoxMDU2OTAwMDM2NUY5N0QzRkFCM0M4MUE5NDEzN0VBNjc5QTA3RDBBMTEKKzoxMDU2QTAwMDkzN0ZGQzA2N0ZGMkQ0NEYxNUU2ODdGOTFGRkU1NEE1QzEKKzoxMDU2QjAwMDUyMTlDMkEyNkVEOEVGNERGMzI5NTFEQzA3REEyRENFNzQKKzoxMDU2QzAwMDA4RUFEMkNBN0U0RTg2RjE0RDdCQkEyNTgyRjExMUZCRTMKKzoxMDU2RDAwMERCMEFDMTY5MkY0QjhCQTBGMDlCRDRBRjIyMDNFMzk4NjgKKzoxMDU2RTAwMDY3MEVFRjc3MDUxM0QwRkZDNjYwQURDMUZGNjVDNjYzRDcKKzoxMDU2RjAwMDc3QkI5QjlGRjcyMDFFMUZCRTQwOUNGNjUwNzY3NzlDODEKKzoxMDU3MDAwMDc2N0YzNkRBNDM3M0JCRDZEQUI1Nzg5QzU2QzYxRjBCNjQKKzoxMDU3MTAwMEJDQkIzNzU2QTJDQTVBQzJFREQzN0UyQ0QyQUNCN0FCQjMKKzoxMDU3MjAwMDc0NzFEMERGMjJCRjNGMUM4RjgzQjY1RkEyOEY4MzM2OTgKKzoxMDU3MzAwMEY2REI4QkY2RUU0M0RENzFEMDYwMTRDN0Y1NjdFRjJDMTYKKzoxMDU3NDAwMDQ1RkU3REQ4QjdGQkM3REY0NTdDM0E0NEJDNjJENDcxQzcKKzoxMDU3NTAwMDk3ODY3RUZBRjJGREI5MDhDRjZGNERGMzk3QTVGNEUzNzMKKzoxMDU3NjAwMDk5RjdDMUM3QjM4REYxODUzM0JFRUIzMkEyQzQ1QkQ5QzMKKzoxMDU3NzAwMDA5RDdCN0Y0MkZDQUZEMzBGQTBGM0QwOUQ3QTExMURGQzEKKzoxMDU3ODAwMDcyRkMxQTg1RUY2Qjk5NERFMUYyNEZFODUxOTAyRjlEMTUKKzoxMDU3OTAwMDI0MDcyMjhDRjRBNkRGQTE2QzQzN0Q3M0M2MzdDQTQ3NjkKKzoxMDU3QTAwMDcxQ0YyNEYyNDZDRTA3RjAzODM0NTFGQzE3QzY0QjE4OUYKKzoxMDU3QjAwMDY3NERDOUUxN0FBQUM2QzZGREE2Q0FGMkYyMjY5QzU3NzEKKzoxMDU3QzAwMDhEREJBNTM4NzRGRUZFQjM0MkFGOUJFMzQyNkFDNjY3MjkKKzoxMDU3RDAwMEU1NDFFMUY3NEUwNEJGMzlCRTczNTZFODBCQzQ5N0RFQ0UKKzoxMDU3RTAwMDRGN0UyMTdDMURCM0I1NTJGQ0YwRDgzQzk1MzU0MzNGMkMKKzoxMDU3RjAwMDY3ODI2M0YzNTk4MkVGNjVGOTFBRjJDRDUwQzZERUNDQTkKKzoxMDU4MDAwMEUxRTM3NUQzMzM0OUJDRThEOEVBMDY4QTMzOUJFMzY5MDAKKzoxMDU4MTAwMERERUY2QjUzQUE1MTdGNTcyMzFFNzVFMzVFMjlGMDc3QTYKKzoxMDU4MjAwMDlEMjg5OTIzQTg3OUUwQkRCREVFMDEwRkMzRjhEN0QwMUMKKzoxMDU4MzAwMDRGQ0FDMzZFRjQ4Qjc1RkQxQ0UzMTdFQzVCNkVGMjU3MTkKKzoxMDU4NDAwMDU0RDc5RTJENkZCRTVDODdDRjBBQzZFM0IzRkIxRkYyMTEKKzoxMDU4NTAwMDY4RjBCQzdBRThEQURDQjAyQjM5MUVEMUI3ODU3OEJBQUIKKzoxMDU4NjAwMDA3MUY4QzIzN0Y0Qzc5Q0U0NUY4NjNEODA4MUUxNzYyM0EKKzoxMDU4NzAwMEZCNTMyODdFOUFGMjA3RDU4Nzc2MDM4RUNCRjUwMEY3ODcKKzoxMDU4ODAwMDI3QUYxNDcxMTM3MzFDQUYzQUI0Q0MyMDVGRDI2MjBBRjUKKzoxMDU4OTAwMDhCRThFMjE3NjlENjlERTQ5RjREOEI1OUU5Qjk3OUJEMzQKKzoxMDU4QTAwMEU1RTc3NEM3Mzk2OUJENDlGQzI3QTNBN0M0QkZGOTc5RTcKKzoxMDU4QjAwMDU5MEVFN0NCNjNCNTBCMzVGNDFCREE1MzEzREJDMTFCNzEKKzoxMDU4QzAwMDQ1M0I1OTM3RTcyMzI0OEJCQkNGMTc3NDNEMTMxQzk3RjcKKzoxMDU4RDAwMDhGRkVBQTZBN0I3ODY4NUZENkI5QzRDRjg1RjIxQ0U2RDIKKzoxMDU4RTAwMEU0NzA3REVFQkVFOTI1MTFDNzUzRDc2MjZGNTJBRkE2QjMKKzoxMDU4RjAwMDU5N0I4RkM3RkE0REYxRDhCNEQxM0RFMjc5RkYyM0YxM0UKKzoxMDU5MDAwMEQ4OTY5QzdGMkMxRTdCQURFMERCMEJFNUExREM2ODM3RDUKKzoxMDU5MTAwMERBM0RERDc4MTU3NDNDMTM0QzYxNjE5MDhGQjc1NkFBNUYKKzoxMDU5MjAwMDE0ODcwMkZFMjBGRDc4RUMwMTg1RUNDRDY4QUQ4M0Y0OTAKKzoxMDU5MzAwMDcyN0Q2RDBBRjk2N0VCNEI1NTdBNUY3RkFGNEFGQTMzOTgKKzoxMDU5NDAwMDBBRjI2MTA5Qzg4N0RGMEEzOTYxRjZDRjU2MzJDNTEwRkQKKzoxMDU5NTAwMDNGOUYzRTNBQzU1MEJGNjlERTdEQkY1RDhERkVFNTBBQzMKKzoxMDU5NjAwMDlCODZFMzFERDFCOEJGMzlFQzU3Qzk3RTg1M0U3QzUxN0IKKzoxMDU5NzAwMEY0NEZERjdGQjUwRkY1OTlFNDg3MjM3RTk1RDY1QkY4NkEKKzoxMDU5ODAwMEE4RUFDMzYxREI4NTNGRkFDODg2RDIwOEU2QTkzMDI1QkMKKzoxMDU5OTAwMDFFQTdENzA2NjNGRkY1MTQwNzdFRDVCQjg1RTI5QzI5QjkKKzoxMDU5QTAwMDlGM0YxODA4RDBGRTMxQTg5NTkyREVFNEYxRDMxNEIxRTAKKzoxMDU5QjAwMDRFMjdGNkFCQjgwMUY1Rjg5QjlCNkMwQ0ZENDY2RkFFMUQKKzoxMDU5QzAwMDNBNDNFQkI5NjM3NTEzRTU0NTQ4RkZCMkY0MEY5QkZEMEQKKzoxMDU5RDAwMENDNjZGRjcyMEZCRkIyQzk5RjlDMkM5RkUxNTc0OUY4NUMKKzoxMDU5RTAwMDQzQ0FBQjY0RkMwMTYyRUI0ODRFRUVDNUNCMzEyOTNGQTQKKzoxMDU5RjAwMDVFMTM3MDRFRUNCN0U1REU2NkMwNDNEQTVDOTVGMDIwQ0UKKzoxMDVBMDAwMEY5RjJENUNGRUU3QTA0RTU3MDBBRjBDNzFBODZGOEZDRjEKKzoxMDVBMTAwMEY3RTc3MTFGQzIxNjJBMDlGREM4MTk1MkFFNjNGRTQ0OEEKKzoxMDVBMjAwMDQ5OUMyRTM3MDUxNzc2RDc3MUY5Q0Y2RTU4NkVDOEZCOTMKKzoxMDVBMzAwMDMwRUI5NUU0NzJBRDc3QjlCNTM5ODdEQjVENjZCRDYzNTAKKzoxMDVBNDAwMDVFMEY1RkI0REVBOUFFN0RBMDA0QkZBRkFFOUQxN0MxRUYKKzoxMDVBNTAwMDcyNjMzRjY3MDNDQTVGQjM3QzMwRUI4OTZBOTM5QzhEQTYKKzoxMDVBNjAwMEVCMDc5NTQ1NDZFOUU3QUQ1MUJCQjg5RUIwRDNGQjczNTQKKzoxMDVBNzAwMDI5M0NERjIxRTRFNEU1RURBOUU5REJCMDNDOTdDMkYzODIKKzoxMDVBODAwMDFEQzI2ODE0QTI5REZBNDY1QUE0ODVGNkU1NEQ2MzkxOUQKKzoxMDVBOTAwMDRGNDJDQ0Q3MTE0NjM4QkRBOUU0NDc2OEVEQ0ZEQkE5MEEKKzoxMDVBQTAwMEQ3QTQ3MkJCRkM0MDI1QzFBQjRBQzM3QzZEMjVBRDlCMUUKKzoxMDVBQjAwMDE2MDFDQkQ2RUM2MDUxMkVDQ0E3QzU2RjQ5QzFGOEMyRjgKKzoxMDVBQzAwMDQ0QjdGNTEwQkE1RTVBMjc1ODk4ODNDNUYxMTVDRjBCMjUKKzoxMDVBRDAwMDYxMUUwNUJFQTc3NzBBRUUzRjRCOURGNkMxNjRBNzBFNzcKKzoxMDVBRTAwMENCNDU3RUY5MzZFQzBGODFFRjBGMUY1Njc3QjcwMUE4MzMKKzoxMDVBRjAwMDg3N0RBMzMyMTJEOUU5QjIzNEM3OTE4RjdGRTM5NTgxQjQKKzoxMDVCMDAwMEI4NkVERjYxQzFCMjVDOEExRkQ3REY4QkYxRTFDNjNEQTEKKzoxMDVCMTAwMDJBQzU5NzZFQkVFREQ1NEJDOEVFMzZDNTI5RDU3NDY3M0MKKzoxMDVCMjAwMDA5RkE1MzVBOTQ1NDFGQ0ExMzg5Qzc3RDZFM0JDOTk5MDkKKzoxMDVCMzAwMDk2RTM2OUI0OUY2ODc5NEIxMTc1MzdDOTQzODlGNzAzQjgKKzoxMDVCNDAwMEQwQUU2MDM0RTYyQUI5NDk2RTRBRkMwMzVDMTM3MDFFN0QKKzoxMDVCNTAwMDkyMEU5NTJDN0E3ODdDRjEzRjA1RDczNEM0Nzc3MkI4RDEKKzoxMDVCNjAwMEZBN0I0ODdFMjA5RkE5NzEzODU0Qjc5NUUwRUI2NEE5NzEKKzoxMDVCNzAwMDNFOUM1RjQ4Rjg4N0Q4RUI2OUI0RkY5Mzc0NkUxNEZDQzEKKzoxMDVCODAwMDI4RTlCQzRDRDBCOTczRUZEOUVGNUMwNUVENUJGRDU5NEEKKzoxMDVCOTAwMDE0NzU1MDA3MzBDMjQzRTdFQjZFRTIxMzg5MDcwOTM3RUIKKzoxMDVCQTAwMEYwNDUxRENFNTNDMkJEN0ZFRkE4NjM0MUZDM0UzRDk1M0QKKzoxMDVCQjAwMEUyRjhEMkVFOTY3OTA3M0RFNDk0RDhCRjJGQ0Q1NUJBREUKKzoxMDVCQzAwMEVENUVGNDVGRkMzRTdCQzJEMkRDREMwNEVEODVCRDBCRjgKKzoxMDVCRDAwMEY4NkVDMjcxMkIzREVDOTMwODhCRUZGMzkyRTUzN0FDNzYKKzoxMDVCRTAwMDEyRkQ3N0Y3NzNFMUZDODY1NUI5ODlGMjFCRkU3MTdBRDUKKzoxMDVCRjAwMERFNzUzMUY0NkNCNEJBMzYyODE5NzE3Q0NCN0QzMzJENDcKKzoxMDVDMDAwMDY5QURFN0ZBMzdBRjNGNDkwRjY1RUZCRUJGNjIxQ0RGRjIKKzoxMDVDMTAwMDJDMTc2RTU3OUI5ODAyRTNBQ0JGOUNBRjRCQjY4QTY5QkEKKzoxMDVDMjAwMDk0MUY2NDVBMkYxNzkyMzc0MEZGNkQwODU3MzJCOUQzMkIKKzoxMDVDMzAwMDU3RkEzRkQxOTNGRTRGRjQ0NkZGRUY2NTA3N0U4NkVGOUMKKzoxMDVDNDAwMDcxQThDMjMyREExN0VFQzIzQUNBMTNGQjIwMUE4RkY4RDMKKzoxMDVDNTAwMEI2MkI5MzUxM0U5QkNDOEY5MUYzOTE3OTMyNTE0QzVBOTQKKzoxMDVDNjAwMENERDVFNUUxOTRGODE0RDQxMzdERTA4RkE4N0U3RTVGNTYKKzoxMDVDNzAwMDAwN0ZGQ0E2NzczOTE2QTU3NUJBNTREMDdGQTlDQ0NCODYKKzoxMDVDODAwMEQ4REQ3QjVFNDYxRkU4Rjc1QTIyRkFEREFFRkFCQTgyMEIKKzoxMDVDOTAwMEM1N0RBN0RGM0IzREU5Rjc0RUVGRjQwQjlFQzJGNzJEMjQKKzoxMDVDQTAwMDc2RjYwOUQ5RUYxNUI1NUVFNDk3MEE4RjdGMTZFNkExNUYKKzoxMDVDQjAwMDNDREIyQ0U0NEUzMUQwMEZERTNGOUZBMzkyNUNGQjFFRjkKKzoxMDVDQzAwMEJCOTRFNEY2OTcyQzE2OUE2RjI3QzhFQjZENEE5RkUwQjkKKzoxMDVDRDAwMDhDRTVEMkZFMkY2Q0NEODI3RTZGQkY4RTUxN0NDRkFCMTgKKzoxMDVDRTAwMDM1MkI1OENGRDc0MDRGNkI3RDg3NTdDREUzN0E1QzA3NzQKKzoxMDVDRjAwMEFGOUE5NzQwQUZFQkU0OTUzRDhGRjNFNzRBRTQ0RkE3QTcKKzoxMDVEMDAwMEU2QjFGNjI2QUZCMkYyOEM3NjQyMUZGODMxMkJFRjhCNUMKKzoxMDVEMTAwMEU1QzcwMTc5QkRDQUFCOEJFNkIzNjEzOEJGNjQ3MkEyMzcKKzoxMDVEMjAwMEFGNzlBMEIwNEU1OTYxNTZDRkYxMTlGMzUxNUNBRDMyNDUKKzoxMDVEMzAwMEREQzlGNUY2MkU0NUU4RjFEMjIwRDVERDRFMTIxNjA3NjUKKzoxMDVENDAwMDg0OUUzRkJEOUJCRjU3MjcyNEI2MkI3RDc5NTlDNENGNzYKKzoxMDVENTAwMDRCNzcyRTBGNTgwREY5MjQ2MTdBRkU1REZGNjlDRjEwNDUKKzoxMDVENjAwMDE1RjNCNDVEMDQ0RkY2MzRFRTg3OTRGMENCM0NFRDc0M0MKKzoxMDVENzAwMDAxNEZGNjAwMEU3N0Y2NzE5RUQ3MkVGMTk1MkVGNjFCODkKKzoxMDVEODAwMDE5MTU1NkMzM0U0MkUyRUQ3NjM1QTBBMDFGM0QzMzg3N0MKKzoxMDVEOTAwMDYxOUEwNEVDMTM0NjI4RThFN0NBRjQxQkRCNEI3Q0U3NjYKKzoxMDVEQTAwMEIyNEQ3RjU2MzFFNUFCQ0FGODNFMTdGNzMzMjNGMUJENEMKKzoxMDVEQjAwMEVFNzk4MkZEMkJEMEE3MDRGM0M3NjZFNzA5RkY4MzlEMjgKKzoxMDVEQzAwMDc5NTExRjMxQjVBNjU3M0VEMkVENEZFQUYyRkFFMDY3OUUKKzoxMDVERDAwMDY5QzhCMzg4N0Q4MzUxRUZFRDRDNjEwOUZEMEM3RjExREIKKzoxMDVERTAwMEVCMDFFQzE1RjIzN0FCNDJDRjRERUEyOEE2N0M5NzE1QjQKKzoxMDVERjAwMDZFOERGQzBGQUFFQTczNEUyREVFRjk3REE2MUY5NkI3QTUKKzoxMDVFMDAwMDBFMUZEOTU1QTk0Q0QzQzE5RDFCQzgzMkQ0RjNBQkZCOEYKKzoxMDVFMTAwMDE5REExNzA0MDcxOURFMTczNjVDNkE3ODNGQTBBOUNDOTcKKzoxMDVFMjAwMDUwMkYwQTVENjk2ODVGMEM4OEQ1RDcwNzZGRjhBQUExNjMKKzoxMDVFMzAwMEZERDBENkFGMTlFQUMzQjY3Q0RERDA3RTc4QTRDRUYwMTMKKzoxMDVFNDAwMEZFQjIxRDhCMENFRjJGREZCOUMyNTBCRjYyQ0YzNzBERjIKKzoxMDVFNTAwMEVENUI4NDFGRDk4Qzk3RkZDQ0UzNzJCQkM1Q0FFNTUwQkMKKzoxMDVFNjAwMEIzQUI4Q0ZDOUIyRDJFQTM3RkYzM0U4MUZGQ0E4Q0YxM0MKKzoxMDVFNzAwMDI1RTg1NzZGNzlCQkI0MDRGMTdEMjBGRDRBRjJCMzI3QzIKKzoxMDVFODAwMEUzMEJCMzVDNEIyNjRGQ0RDRjlGMTRFMzdERkM5Q0REMzEKKzoxMDVFOTAwMDgyN0NCRDZDM0ZBQ0RCMkJBMEVFN0E2RDNEQzJCNDcxNTEKKzoxMDVFQTAwMDA0OEZDRkRBMThDRjE3OTJGMTFBRjk3RDc3QkNDNkVBQzIKKzoxMDVFQjAwMEUzRkVEQTc0MTdCQjNCMDE1RkRDOTdBNzI1RjRBNzRBMjIKKzoxMDVFQzAwMDNFNEE4NjM3Qzk4RjE3QzJEQkQzMDJCRkZGMkNERTVFODYKKzoxMDVFRDAwMDU3NzhCRUFCNUUxRkVDNEEzMEFGMzM3OTE2MTE1RjBFQjgKKzoxMDVFRTAwMDFFMTVGQTY2NzQyQTU5RjIxRTVBOEYxN0FCMEZFNDNDM0UKKzoxMDVFRjAwMDQwMUZCQzk5OTdEQjMzNEZGN0UzRUE5N0U2M0ZBODYxNzEKKzoxMDVGMDAwMEZCRjlCQ0JEQzU1NzgyNzQ0OUU2NEYzRjIzRjBBNkYzQTkKKzoxMDVGMTAwMEE3Mzc3MDdGN0FBQTAxNkY2RkM5RjU2RUYyRUJCNUE0NEYKKzoxMDVGMjAwMDdGNEFGRUY0MTZCQkFGQTQyRkZFRjRCN0YyMThFMUZGRDAKKzoxMDVGMzAwMDY5QTQ3M0FFOEVCRUMyMUY5RjZDMUYxNTYyRUMxMDlFQ0IKKzoxMDVGNDAwMDg3NjAyRUFCQTZERjM3MjVEQjFGNEI3OTBFRkJFMzEyRjQKKzoxMDVGNTAwMDhDRDNCNkUyRkU0QjQ5QTgwNzUzRjJDQjY5RkY0Q0ZBNEIKKzoxMDVGNjAwMEEwMTVGNEEwODNGQzA0RUM5MDA2RjVEQjI3NUFEOEREREQKKzoxMDVGNzAwMDVBMUM2RTY5Q0YzQjk4Q0Y2OTU3ODlBRTE5RjgzREZCMjMKKzoxMDVGODAwMDM2NUI5OUEyN0UyMUZCQ0M3RUY5MTdBMUU3RDk4NUUzODgKKzoxMDVGOTAwMDdENjRBNzREMDNGOEQ3RThGNkQ3MTIzRkU2Rjg5RUM0MTQKKzoxMDVGQTAwMENGMzQxRjhGREZBRDAzRkQ4OEYxQkQ3REI5NUM0RkFGRUUKKzoxMDVGQjAwMDgzRkQzN0UyRDE5MzFERjAwRTQ0N0IxRTlFNkY0MzcyMkEKKzoxMDVGQzAwMEU0OEVBMUY1MjNGMTZBOEVGM0Y1NTVFRThDQ0ZFRjYxRTcKKzoxMDVGRDAwMEI3OEVDRkVGQzU2RTk1RjBBRjEwRkJFN0M5RUE4ODlEOEQKKzoxMDVGRTAwMEU4QzczQzFEQjMxM0RFNTRDNkYzMkUxQjBGREE1ODg0RUEKKzoxMDVGRjAwMEU4QzhGMzk3MjUxRDZEQjFGNUVEQTg5RjZEQ0M5Q0FGNUEKKzoxMDYwMDAwMEFDNjUyMEZDQjY4M0ZDOUMxOENCRTFFRkMzQ0NEOThDRUIKKzoxMDYwMTAwMDc2NEY0Njg1NTE3RjY1RkE4REZBMkJCQjJBQ0JBNENGRUMKKzoxMDYwMjAwMDhDRkEyQkJGREFBOEJGMEE4MjQ2RkQ1NUQ4NTA2NkQyM0IKKzoxMDYwMzAwMDY3NDZGRDU1MTQ5QTYwRDI2NzQ2RkQzNTc4QzNENzRDNDQKKzoxMDYwNDAwMEZBQ0NBOEJGODY2RDMxRUFBRkUxMTFBM0ZFQkE2Q0M3RTYKKzoxMDYwNTAwMDBBOTMzRTMzRUFBRjJCRjZBQzMxQkMyRjhEREU2RDc4NjAKKzoxMDYwNjAwMDNGRUFFMEY3MENGNUYyRjYxRjE4REEyRjM4RjQxNEU1RTIKKzoxMDYwNzAwMEY1OEMzREI2Q0REMDZFNUNDNzRGMENFRDAwRTFFRDk4RDAKKzoxMDYwODAwMEZGM0Q5NzQ4QzJEODU1QTc5RTM0QkM5RjJCRUNCNUFCQkIKKzoxMDYwOTAwMEJCOUUzNkY0QzM1QTc5MUU3NzE4RkUyMkJEREU2MzQxREIKKzoxMDYwQTAwMDNCMUEyOTU2RDZGNTQyMjFEMDc1NTk0NEYxNDVBMUQ5NUMKKzoxMDYwQjAwMEMyM0RCQkM2RTAzQzNFN0NFMzlBODNEOENGODIyREM2NkUKKzoxMDYwQzAwMEZDRUY4NTExNjNCRDkxMERDQTQwQjlEMDA4N0MxMTAxNjgKKzoxMDYwRDAwMDNFNTk4Qzc5RTEzQUY5QjY5ODM1ODk3MzgxN0RFM0IzRkQKKzoxMDYwRTAwMDA1ODdBRTYzOTQ0RjFBRjZCNzYzREVCQjg0NTNGMjlCMDkKKzoxMDYwRjAwMDVGRjA5QjlDOUY4NDc3MzFEODdGNTEyRDBFQTcxRkZFQTgKKzoxMDYxMDAwMEYyRkQ2Njg3MURGOTc2RkUxRTg1RkQ0MEU5MDk0RkMzNDUKKzoxMDYxMTAwMERFQ0RFQjBCMTNDMDY1ODZDMzZDODdGRTQ3QkVEMTNGNTcKKzoxMDYxMjAwMDNFNTk3NTUxQkNFMEY0NTFENUM3RkQ4REM2NzVCOEUyMzYKKzoxMDYxMzAwMDEwOEYxM0FDNzg0MjIxN0Y5RDE5MUZEMjNFNEQ4NjE3RDgKKzoxMDYxNDAwMDM1Q0NGNzBEOEQzOTJDMTJEMUFEM0Y0REUwQzNFMTM1ODMKKzoxMDYxNTAwMEFFQkZEM0Y4MEY5Q0NGMEZENTA4RTYxQkE1NjhBOTY2ODQKKzoxMDYxNjAwMDdFMUIxMzY1M0RGMTlDNTY2MjVDQTc2NjNDQkI3REZEQzIKKzoxMDYxNzAwMDEyRjI5NTA2N0Y3MTFFRjNDNUY5NDMzMzVGOTlGMUJFQTQKKzoxMDYxODAwMDZDQ0Y2NjNCQ0FDMzhCQzVGQjZCRjk4OUUzMTJBMEVERUMKKzoxMDYxOTAwMDQ2REIxM0U0RDc0OUJDQzJCRUJEMDNGNTQ4QjJGREVDRjMKKzoxMDYxQTAwMDQ3RjkxN0JEOUZGRDI4RkY4QkREQ0Y5RUVCNERDRjc1QzcKKzoxMDYxQjAwMEEyQkYwREVDNEJCMzlGQ0RBQzg3OTVCREZCRkZBQUE0NEUKKzoxMDYxQzAwMDkzNUZCQkMzODFFQjJFRTg3M0YyM0MxODkzOUUyQzI5OUUKKzoxMDYxRDAwMDMxRThDOUVFN0RFRkRCMEFFRDdCN0Y5MUUxQjc3QjYxQjIKKzoxMDYxRTAwMDNFQkZDOUYwM0JCQzAwRTcyRDE5N0VBNzU3MDc2RjBCRDgKKzoxMDYxRjAwMEUwODVDRUZEODA5RURBOTVDMDRFOUNFNDk1NzE5NzAwQjcKKzoxMDYyMDAwMEY5NERENjU1RjJGNkU2NzYyM0JDRkM5Q0QxQkVEQzMxQzYKKzoxMDYyMTAwMDVFQjIzRkRGMkFGNTkyRkRFOTFFRDNBQkZERjk1RDExQjkKKzoxMDYyMjAwMDI3QkEwN0UzOTA0M0UzRjk0MUY3OEE3ODBEMkMzQjNGMDcKKzoxMDYyMzAwMEQyNkQ5RDJERTBENUU3MEY2Nzc4MzM2OUJDRjQ3MTRGQkYKKzoxMDYyNDAwMEI2NjMxRTc1OEJDN0UyNTEzNDJDNzkzRUY3NUE5N0I1NjkKKzoxMDYyNTAwMDZBQkJGODJFQzdGMDFEM0ZDRkE0MjJCRTAxQUY1Njk3RjAKKzoxMDYyNjAwMEY1NTMzRERGNEVGMjMyRUEzNzE5OUM5M0JDN0MzRjY5MEYKKzoxMDYyNzAwMDYzQzE3QkQxMUU5MkYxNjFEQkRCOTU0RTk0NzcyRENDMEYKKzoxMDYyODAwMEVGRTE3MkQyRTdEMUU3N0ZEODE4OEYwNzRGMTBGMTYxQTUKKzoxMDYyOTAwMEY5NUNGNUZDNjM3OTU4RUQxOUMxODlERTA0Nzk1ODc3MEEKKzoxMDYyQTAwMDY0RjgyN0UxRjM5MDM1RUM0MEJCMzNFNDRDQkMyRkZFOUYKKzoxMDYyQjAwMEFBOTdBRjEzOUI4MDE3MEM1MEUyMkI5QTg3N0FGMUYxQzMKKzoxMDYyQzAwMDFGQjAzN0FGQzc3MTZGNTdDMzk0MjdEOUUyMUU1MzEyNUYKKzoxMDYyRDAwMDc0RjVERENGMTVGNEY2QjA4RjgyREU1RUVDMjNCMDRGOUYKKzoxMDYyRTAwMDY3RTE3OTMyN0Y0NjNGMkI2RDNCQUNCRTEyQzRGNzA2QTcKKzoxMDYyRjAwMEZDRjczOEYyRDMyRUMwRUY3QkU0QkQ4QTczQjhCMDhGQzEKKzoxMDYzMDAwMEVCMzU4RjU3RjZCMzNGQ0JCRkNDQ0JGMzBEOUJCMDNGRjQKKzoxMDYzMTAwMEZGMzBDRjVBNTVENzRGRkEwNUZBOTE3RThFM0VGOEFEMzEKKzoxMDYzMjAwMEJFRUQ0REVDMUYzRDg1RkFCREFGNzhEQ0U4RURFMTJGMDkKKzoxMDYzMzAwMERDRThFREM1NUY3OEVFRjhCMDBDOEM2NzRCN0Y5N0I5NjEKKzoxMDYzNDAwMDlEM0MxNzI5RUIxQjMyOERFM0FGMkZFM0Y1RkJDNUI4NUUKKzoxMDYzNTAwMEFGODg3QjNBNzY4OEJBRDM3NDVFRDQzOTk1RDEzRDFEMjcKKzoxMDYzNjAwMEYyOUNBOUVDNjc4N0Q3NERFRDlCQjMyN0VDQzBGOUFFNDMKKzoxMDYzNzAwMDJGNTY2ODFGQkEzRTUzMzFFQzQ3RUJCRDk1M0I5MDBFNEMKKzoxMDYzODAwMERCNDRGRjNCOTA3RjczMjk2Rjk0RkMzOUU2M0NDQzI1QkUKKzoxMDYzOTAwMEEyRkQxMkVGMDQyQUYxNUMyQkNBMzFCQkFBMjZDNEUzOEEKKzoxMDYzQTAwMDEzNUUzRUZGNTk5OUJDNUZFOTc3QUI3RjQwMTFGQjI3MzUKKzoxMDYzQjAwMEUzQkQwOEIwQ0U1RjRFMDNGOTczNjI5MzhEQ0VCRENFQzAKKzoxMDYzQzAwMDUzNURFQjkxMUY5M0RENzM1MDNCMjI0MEY5NEZGRkVDN0YKKzoxMDYzRDAwMEY5MzFDNDY3NUE1NjRGQkRGQUJDMzdGMUJEMDVDOUU0NUYKKzoxMDYzRTAwMDg4Q0U5Rjc2RDg3QjExNzk0QjFEQTk5QzRGQkJEQzJFQTQKKzoxMDYzRjAwMEYyOUI5QkRCQkQyQkU4QjM0OUY4MzU1MEFFQTM3RUM5QjkKKzoxMDY0MDAwMDUyNTk1MzIyM0RGM0FFQzBGQjNGN0VBRTk5REZFNzkxNzgKKzoxMDY0MTAwMEVENzJEMTc3RTY3M0NEMURGNjhFNzVGOTM4REZBQjE1QzkKKzoxMDY0MjAwMDFGOUU1RkM4QUZGMUVDQ0JDRkMxNzM4QzFBRjlGOEQ2QzEKKzoxMDY0MzAwMDE3QjNGNDBBN0M1RjZBQTFGNzk5QjMzQ0VCNkQ5OEY3NDgKKzoxMDY0NDAwMEFEMzFDQ0RDNjczNjE4QzcwREUzQTQxNzE0NzNCOEMyOUUKKzoxMDY0NTAwMEQ3RURDQjg3NzYxOTVBMTcxQjM0ODJDRTdCNEZGMUUyRUEKKzoxMDY0NjAwMEJBQURFNkY5RjMzREYwMkRFNDlCNkIxREVDMkYxMDFGNDgKKzoxMDY0NzAwMDVBRTIzQ0Y0RjM0MkJGODBCQ0Y5M0JGMjZCQTVDNjc2MEUKKzoxMDY0ODAwMEYzNzM1OTNDMEYxNkQ5OTJGMjE1N0QzQzVGM0IwREYzMjcKKzoxMDY0OTAwMDlEMDY3Mzc5ODNFRjk1RUM4OUQ2ODJEQ0Y4RkE1MjA1NzQKKzoxMDY0QTAwMEJFQ0RFN0I5RDMwQkY4Mzg3RDNEQ0YzREEzMjZGMTdDQjcKKzoxMDY0QjAwMDg3MTc3MEI4OEU2NzA0NzI3MERDMTlFMzlCQjkzRkVDRTQKKzoxMDY0QzAwMEIzRjNFN0Q1MzE2ODFDRjM3NTAyREYzM0Y0NTdBNEU0NjYKKzoxMDY0RDAwMDcwMzk5Q0EyNjkyNDk3OTk0N0ExM0M1N0E3RTY2QkMwRTUKKzoxMDY0RTAwMDdBOEFFQjRBOEY4QTc2QjI4M0M3MjVEOTVDMEJDM0ZCQzUKKzoxMDY0RjAwMDU1MjY4QTdFRkNENTRDNzlCNzg0RkI2NUI5OUNCNUIyMkMKKzoxMDY1MDAwMDc3MjVGRkFCMDIzOTYzNTBDRkYyM0Y2MDNGNkQ0QTAzRkUKKzoxMDY1MTAwMDc4MjZCQTBFNTM3QzMyNjU0ODUzMjU5RTZCNzg3RTBFRTIKKzoxMDY1MjAwMEVGRTM3QjQ5Q0UwREM4RjNFRURERTdGQUQ5OEYwRTFCMDIKKzoxMDY1MzAwMENFRjVBRjdCRTRGMEMxQUI3NUU3RkFDMzhGMUNGNjhGRTUKKzoxMDY1NDAwMEY4QzdGM0RCQTczQ0Y0QzhFMUI1QUVGRkI5NzNGRDUyNjEKKzoxMDY1NTAwMDlFMUQ1MzgzQzdFRTA0RkM1RjBGNEMxNTJBQzNEMkNBOUQKKzoxMDY1NjAwMDZBODhERTVFQzJEQjJDODFFN0YwQTc4MDY3NjcxQ0NGRkMKKzoxMDY1NzAwMEQ3RUYzRDQ0RjgzQjY2ODM3OUMzRjhCNjA5MUNENUI2MUUKKzoxMDY1ODAwMDZGNjY0NDVBNDgyRTQ2NjhEQzFCOUNBRDkzNzFERkQ5NzgKKzoxMDY1OTAwMDY5RUYxQTg5RTM3NjNFRjNDQTgwMzBDODkzRTNERjNBQTUKKzoxMDY1QTAwMEUzNjZDMDdGNkY1QUJCRENGOEZDRDRBQTk3REM3ODBGOTcKKzoxMDY1QjAwMEMyRjE1NTJBRDk2Qjc0MkU1QTk3OEZENDIwRjhFQTU3MTYKKzoxMDY1QzAwMDA1ODEzOUM4NTc3MzU2N0YzRTQ2NkY4RkIzNTAyRUU5MDkKKzoxMDY1RDAwMERGODUxMTk1NTJBRkE0RkM1QkJDMjM0RDMwMURBRjJGNUUKKzoxMDY1RTAwMEREOTk2REE4NEJCREJDRDQ5MUY4OUNGQUEzMDU5Q0VFMzcKKzoxMDY1RjAwMDBCMUY2RkIzMTc2QTM4N0U3MDM5OEU3RjRBRTQzNzlDNjEKKzoxMDY2MDAwMERBRURBNjdEOTg5QzRGRERFM0E1NzZEQzc3QkVCOUQ3QTEKKzoxMDY2MTAwMEMxQTJFNDA3NkVCNzMxRjI2N0Y5QTcyQTc5Nzg4RjExMjIKKzoxMDY2MjAwMEZGNjM5RUU3MEJDRkE2NTE3RkYzMUU1MEM5RUY1NDBCQkIKKzoxMDY2MzAwMDYzODUwMEFGQzFCRDBCRjkzRUQ4MDRDN0JDRTNEQTE0RDMKKzoxMDY2NDAwMDk0NTdGMzM2MkEyQ0FDRjFGNkFCRjBGRThDRDA1RDE0RTcKKzoxMDY2NTAwMDg3MzFDMzY5RDYyRjBCOTJEQzlGQjM2MEVGM0RGNEZEMDkKKzoxMDY2NjAwMDVDRTZCRjA3RUREOTc5QURFNkY3RDdCQzg3NENCRUUwNTUKKzoxMDY2NzAwMDAyRjE5Q0ZCMEI4NERFMTlDM0M2OUUxRjRDRjFBMzhDNTgKKzoxMDY2ODAwMENCQjUwQkVCOUQ1M0FCRjkyMkZENjBCNTkzQ0E4RjU2OEEKKzoxMDY2OTAwMDdCQTg5QzUzQzBGOTc4RjE5RTdEMkYxNEQyMzI2RjFGRDYKKzoxMDY2QTAwMDgzN0FFOUU1ODNGNTY5NUZEN0UyNzZGNzk4QjY1QkY3MTkKKzoxMDY2QjAwMDNGNEM0RDhERjk5OTM1MDJFRjYzNDU1RUU2MDI3MUVFNzAKKzoxMDY2QzAwMEExRkM1OEVGNzk5OTM1ODg4RjkxM0RFNzJCRURFQzFBQjUKKzoxMDY2RDAwMDkzREY1N0RBREQ2NjdDOUMzRTM4MzEwREY5RTM5NzA1OTAKKzoxMDY2RTAwMDYyOUYzQjE2RjBBMkZFRjM3ODQ5RjZERDUyOTVERjlCRTAKKzoxMDY2RjAwMDY2N0UyRUQ3RDExQ0MxRDc3M0I3Q0Y1Q0RGMEZDNjZGQjQKKzoxMDY3MDAwMDc5RTZCRDgxMURDNEE3REM3RjUxMkVGMDU1RUU1QURGMUUKKzoxMDY3MTAwMDhFRjA5NzMzOTNERjMwQ0M4RTMyMUQzRjAzM0ZBOUE4MTQKKzoxMDY3MjAwMDc3Q0M3QzJCRjk4OTFERTVERjNCODU1RkEzOUI1RkY3NjkKKzoxMDY3MzAwMERFNEJGODk1N0M4NTI3MUQyQzY4QzNCMUE4RDc1MjcxMTQKKzoxMDY3NDAwMEUxN0JBRUU2QjUxQUVCMUZEQjNBMDZBMjNDNTk2MEYyREMKKzoxMDY3NTAwMDM3N0NBQzI0REVCRjFEMkExODQ0Rjg5OEFCRjlBNzYwM0IKKzoxMDY3NjAwMEZFQzUzQzE2NThDRkZERjNGQzdFOUM1M0Q2RDYxN0VFRTMKKzoxMDY3NzAwMEM0NzVCRTlEQUZCM0E1QkY3Q0UyMTcyOEJGMTZGREVDNjQKKzoxMDY3ODAwMDgxNzQ5NDVGRUY1QjVCRjM3MEJDMjU4RkFENEI0Nzc5RjEKKzoxMDY3OTAwMDdGQ0ExQTRFQzdFRkRGOEZBODA5Q0YxMTVGRDI0RkVFMjUKKzoxMDY3QTAwMDlGRkQyRUNDNTM1QjQ2QUMwNkZGQ0QwRDRGNDdGOUY5NEMKKzoxMDY3QjAwMDk3Qzc2QzFFRjRDMzM2RUU3MDQ0MUQ4MDhGNjVCQjM5REQKKzoxMDY3QzAwMDFFQTFGRTE2QUZERjQ1Rjg2QURDNjM1Qzk3OEJGRUZEMDkKKzoxMDY3RDAwMDgxM0M4REZDMDFFMTQyODFCRjQyMTRFMUNCQjZEQjI4NTQKKzoxMDY3RTAwMEFGNzVEOTUxRDU4N0MzMzRCMjJFODJDRkZDM0RDRTIzQUQKKzoxMDY3RjAwMDA2NzQ2QkRDQTlENkRBMzM3QUJFMDc0QkM4OEVFQkFERDQKKzoxMDY4MDAwMDcxMzdBNzY3RTM2RTRFQUY0NjkzMUREQTIwRTRCNjk5NjEKKzoxMDY4MTAwMEZGRjNGQTA5NzkyMEY4MUVGMDQzN0UzNTk5NkZDQjIyRjkKKzoxMDY4MjAwMDVDN0VCN0ZDRjhDMTkxNkZDMUZDM0VEQUZFOUI3NDY1REIKKzoxMDY4MzAwMDQ0OUNGRjE5NjY4NTAyM0Q0RUVGQUM5RjYzRUZFNUJFQjkKKzoxMDY4NDAwMDlFOEZDNTNBRTlENjBCNDIwRjY5N0I2MDYyRjk1MEREMzUKKzoxMDY4NTAwMENCQ0IyNUI2NjhGQTU1ODA5NzI1NkQzNjVGMTgxRTJGNkQKKzoxMDY4NjAwMDc5NDJGNUJCRDA4RTdBRDU0MUY3NEYyQzdFRTJGOTk3NkQKKzoxMDY4NzAwMEFGODRGOTJEREU2NUNCOTlDQUMxNzBBMUZDOTZGNDZBOEMKKzoxMDY4ODAwMDQ0M0UyRjhCRDM2N0QxNTNDRkRCMzE0RjEzOUZBRkNBMTkKKzoxMDY4OTAwMDhBRDM2OUYxQUU3RDc2Q0NGQjM0RTM3M0UyQ0U3RDc2QUMKKzoxMDY4QTAwMEJFREU0Q0Y0REFGOUQ2MTRENERCMkQzRjNFNjc0NzdFQ0EKKzoxMDY4QjAwMDc4RkY1OTg1RTUxN0Y3RkNCRUExRURGOTc0OTQzMzg4OEMKKzoxMDY4QzAwMDI3RDQyRjkyNkVERDc0RUM0MUJGRThGNEE3NDc1MzNCMDkKKzoxMDY4RDAwMDBGQzY3OTJFNDRDN0JGRTAxOTg0NUNFMkY3OUYzRTBERDYKKzoxMDY4RTAwMEYzNjg3OENERTE0MzNDMzRGQ0Y0RDY3NDg0RTczRDZCMjcKKzoxMDY4RjAwMDEzRTdGQjQ3RDZFNUExREU2RUIwODVGMzNDNTRGMkU3MjMKKzoxMDY5MDAwMDBENUJCRjQxRkNCOEUwQzU2RkYwRkI5Qzk4QkYwMEQ3QTIKKzoxMDY5MTAwMDMzQzA1QjgwNzBDRUZCRTFGNTA0RTc3QzE2MjQ3RTZDMEYKKzoxMDY5MjAwMDc4ODRERjZGNzhENkNBQUExMkVEMDdEQUM0QkE3OTZGMTUKKzoxMDY5MzAwMDlCODMzNjBGRUZEOTE5QkYyRkU0RjdBQUI4MEY2QjM5MzUKKzoxMDY5NDAwMEQ5MkJERjEwMzA4Mzg0QTZGQTU5MjdBN0Q3Q0E3RUYyNDUKKzoxMDY5NTAwMDlDM0Q5NzZGOERBMjU1RTNGNkJCNDhCRTdEMzBDMDlGMkUKKzoxMDY5NjAwMDhGRUIxRkYwNjBGNENGQkUzODM5NUZDODQ1QkFENzg1Q0EKKzoxMDY5NzAwMEJFMDNGRTlCODhDRkIxN0RCQkNEOUYzMkQyRjA5REM4QjgKKzoxMDY5ODAwMEJGRTVFM0FGMTRFM0MzQkM1M0QxQ0ZGNzVFOUU3MTlGNjUKKzoxMDY5OTAwMDJCQ0JGNjZFQjlDMERBOTk5RUNGOTJDOTgxRUQxQjg5RDcKKzoxMDY5QTAwMEJGM0UzOUNBRTVDQ0IyQzhDQzJBN0FERjZFOEJFNkUzQUIKKzoxMDY5QjAwMEZCQzhCRTU5MEFDOTA5QjA0MzEyQURGM0VEMzZCMUNFREEKKzoxMDY5QzAwMDhERUY2MTlFNTY0NThGREY2N0Y5RjkzREM5MkZGM0VGRDMKKzoxMDY5RDAwMDg3RjZCQTc1MURFNzFGN0JGQzc5NzE3Q0JEQ0FGQzhERkIKKzoxMDY5RTAwMDA1MjY3QjRFOTY2NjM5RjFCMDQ5NEVDOEVGRDkwRjczMzQKKzoxMDY5RjAwMDEzOUU4Rjg4Q0I4NzMwRTE2Rjg5MkRGMjZGM0ZDMDc1NzIKKzoxMDZBMDAwMEZEQUE4M0NFNDUyRTc5QzI0NkY3RkI3Q0Y4RjhGRTk3QTcKKzoxMDZBMTAwMEJGMEVGQ0ZGRTE0RUI5OUU4REYyRDdCQzlFMUI5RUJDMDMKKzoxMDZBMjAwMDlFMjU1QUNGMUZFNjA0NThDMkY1MENDRjEzQUVFNzFDQzMKKzoxMDZBMzAwMDdFREVFMEZGOTZGQzVEOTA0NEZFQkVEMEFGQTdERDcxMjgKKzoxMDZBNDAwMDE1NTQzRkY4QzlFMjIyREE5Rjk5RjAyQkYxNkE5NkE3MTQKKzoxMDZBNTAwMDM3QTNCMTkwREI1MzlFQzI5RkEzNEM4NzRGODk0N0M5OTAKKzoxMDZBNjAwMEE3OEJGRTYzMjk4REQzQ0RDRjkyNUYyNTNGNzdGM0FCMDQKKzoxMDZBNzAwMDE5NkUyMzNFQ0RFRjM3RTJERUE5M0M0RTdGREIxQUQ4RkMKKzoxMDZBODAwMDk3NjNCQ0Y2MTk5NUYyRjMzQUI1QUVGNDJDMTg3NzlEREUKKzoxMDZBOTAwMEM4RUZFOUY0ODg3QTI2QUY3N0U1REFEN0EzM0M5MUNGM0YKKzoxMDZBQTAwMEJCNTI3OEJFNDM2N0EwMkIzRDUzQjcxRjc4NkJBRjlBOUMKKzoxMDZBQjAwMDhFRTcwMTNBMjI4OUYzMzIyODYzMDNGRDIwNDlGMjM2M0EKKzoxMDZBQzAwMEU0QjlERkNFNTRFRUVGRUI0Q0U1N0VCRUM5QUE2QjYwQjUKKzoxMDZBRDAwMDA4Rjc3N0FEM0NCRTM0QjdGOUM2NzREQ0RGNzdFRTFEM0UKKzoxMDZBRTAwMDNDQTMxQUY3MDM4NzU0OUU3MzE0RjY1QjBCMDBCRkY1QTMKKzoxMDZBRjAwMDFDNzQ3NjhBODVCRjNGMUVFREY3QkQ4QkE3NjIzRjczN0UKKzoxMDZCMDAwMDM3MTlGMTMyREZCNUREOEVGRDlDNjVBQkE4OUM3RkJGRTgKKzoxMDZCMTAwMDJEQ0UyN0YwREYyMkNDRDc0MjNFRkZBMUU5RjlERTZCNzQKKzoxMDZCMjAwMDg5QUYxNjk5RjgyQTg4N0M5NUUwM0M0OTY2QTE1OEFGNTAKKzoxMDZCMzAwMEE1QUM5NEVGQjc0NTdDNENDOEJEQzlFQTg4MTlENTk4NzcKKzoxMDZCNDAwMDRGNzk5MDlGRjczOEJENTc2NUVCMTFERUM3NDVCQzJDRDgKKzoxMDZCNTAwMDlDNEJGQ0JBMENGODVCRUYzN0ZEMDhGOTZFNTg3MjNEQTAKKzoxMDZCNjAwMEZGRDFDRjhGOEZCOTEzOUEyQ0Y5QzUxRjQ3M0UwQ0U1ODMKKzoxMDZCNzAwMDQ3QkY3OEY1OTJGRkMyRkEyRjVGMTlGODQ3RDZCM0ZERTkKKzoxMDZCODAwMEM0NjdGRjdBMEJFNTc1M0VFQkEwN0I0RDNCOUZGREQ1QkYKKzoxMDZCOTAwMEMwM0JCMUZFQjQ4M0VFMTdFRDVDQzNGN0Q5RTE2N0REMEUKKzoxMDZCQTAwMEE0RkYzQjA3NzA3QkIxRTU5OTczMjMzQjQ4N0ZGMTdCRTIKKzoxMDZCQjAwMDgzQzcxN0YyN0IyQTRFRUZGRERCMUIwQUU2RjNFRDA1RDgKKzoxMDZCQzAwMEE4NTAzRThBRkQ1QkUzRDMyOUI0NEZFRjdDRTY5QzYxN0QKKzoxMDZCRDAwMDdGRkFDRkMyQjM0QzlDQkJFQTc0QjM2QTNDMjdERDk5MDEKKzoxMDZCRTAwMEM5Q0ZBOTM2RkVEN0I4MUZFMUI5Q0JBNUJCRjdEOUVCMDIKKzoxMDZCRjAwMEUxRkRDNEZGRjNGOTQ4OTQ0MzlENEY3MkJCMDNFQ0UxMDAKKzoxMDZDMDAwMEFEQ0NDN0Q4NTcwQTM3REY2QjAzRkE3RDhDMzYyMkFDODAKKzoxMDZDMTAwMDk5OEVDMjE3QTdFMTc5OTI5RTc4RTE3OEU4MDQzQzIwMkEKKzoxMDZDMjAwMDVDODA5NzA2OTQ5RkM5RjA3MTRCMjEzRjA3RjNBRjg3QjMKKzoxMDZDMzAwMDhGM0ZERjgyRTMyRkQ5M0I5NkVFMTk4RUUzNDVGMUYzQzgKKzoxMDZDNDAwMEU3NkVDQUY3MDBGOEY5RjM2N0NGOEQ0NDNCRUE0MkYwRUMKKzoxMDZDNTAwMEFFRkE1RjA2RUYwRkZFQzVGOTdENTAyMUQ3NDc2NkJFM0QKKzoxMDZDNjAwMEVGQzlEN0JGQkM4REVBM0Y3NUZCNjhCRTdENUNFRjRGQjcKKzoxMDZDNzAwMEZGMkZBM0Y3QjFGRjZGRTk3RDQ4RDBEQkVEQzFCODRDMjIKKzoxMDZDODAwMEU3MzM5RjBGNjQxNzAxRjdCOTdGNTkzQUY3MEU3N0I3Q0IKKzoxMDZDOTAwMERENjNGMTM5NDdDM0ZDNUU2MzkxRUIyQjk1RTRGOUEzMDcKKzoxMDZDQTAwMDQzRkEyQjcyMUY0NEZCMEM3OTBGRjdGNDlDRjk2NDQ3RUQKKzoxMDZDQjAwMDRDRjc3MzdGNEMwQjJCM0I4OEU3RUNDMjdFOTVFMjE3QjkKKzoxMDZDQzAwMDk0QkMwMzc4Njg5RjU1MUFBMTNDMzE2Qjc4RThGNzMxODIKKzoxMDZDRDAwMDZGRUM4NkE1M0U3RTVGOTk3MUZGMzUzREFGQUEwQUVENDgKKzoxMDZDRTAwMEI5MjNDRDMwMkY2ODc3QzQ2REYxQjQwMDA4MzNGQzJBODYKKzoxMDZDRjAwMEQ5N0Y1MDkyRERGNzg3MDlENzUyMUVDQThDMEFFMzNFMkUKKzoxMDZEMDAwMEU0RUJBNkZEQzQ4REQ1QzZGNzM3QjA2REI5OThFRjc3MjMKKzoxMDZEMTAwMDQzODM4REYyOTNBRTM3QjVCN0Y0RjcxMDVFNkU2NDRERDIKKzoxMDZEMjAwMEVCQjgzRkU3RTJGMDM0QUIzRkRGOEZGNUM0NDNFRjc4RDkKKzoxMDZEMzAwMEVCODEyN0IxREZBNERDMjFBRDI3REUxQzQxQkVGRjc0NEYKKzoxMDZENDAwMEMwMEI2MTZGODlCQ0JDMTU3REMyMjcxM0ZCNTI4NzE4MkQKKzoxMDZENTAwMDVBRTJEN0UxRTdGNzhFRUFGQTI1QkM0OEJDNUYyQ0JFQzEKKzoxMDZENjAwMDI1OURDQzc4OTdGODk1NzgzM0QzNjExODlFRjdDQzhEMTQKKzoxMDZENzAwMEUzM0Y1RTFBRUZENTY2QzI2RTlDREU2RDM3QkEwODhGQjAKKzoxMDZEODAwMEJGREJDRUNGNEJGQ0FFQTI3RTUzMjlENjFGRTdGN0MxQTcKKzoxMDZEOTAwMDlGMUQzRjhBMzkwMURFMjMzNkI2ODdFMjQyN0VCRkU2NzkKKzoxMDZEQTAwMDE5MTNDRjlGNTEyQTdFNDVGMTA5Q0M1RkQ0RUY1NzMxOUIKKzoxMDZEQjAwMDdGNTEwRjE3RTYyRkVBRUI5OEJGQTg2RjhGRjk4QkZBNzgKKzoxMDZEQzAwMEY3OThCRkE4N0Y4RkY5OEJGQTNBRTYyRkVBREI2M0ZFQ0MKKzoxMDZERDAwMEEyQkU4RUY5OEJGQUY2OThCRkE4QUY2M0ZFQTJCRTNEQTUKKzoxMDZERTAwMEU2MkZFQURGNjNGRUEyRkUzREU2MkZFQUVCOThCRkE4OUUKKzoxMDZERjAwMDZGOEZGOThCRkFGNzk4QkZBODdGOEZGOThCRkEzQUU2NzUKKzoxMDZFMDAwMDJGRUFEQjYzREVBMkZFM0RFNjJERUFERjYzOUVBMkJFMzMKKzoxMDZFMTAwMDhFRjk4OUZBRjY1RjhFM0Q2N0E4NTdCMkRGMThEQTRGMTAKKzoxMDZFMjAwMDc0QkU2NEE4NEZGNkZDRDFEMEZFMkJERTEzODZGN0Q3RDQKKzoxMDZFMzAwMDY4MUYxQURFNEJGQTVGNUI3MkM2RjAxQzYzMUZFMTMxRkMKKzoxMDZFNDAwMEI4OEZFMTdGQTZGOUZFNjZFOEM3Q0EwMjE0MjdCNUIzN0EKKzoxMDZFNTAwMDI2MkE5REU4RUY4NTMyOTVFREE0RDIwNUNCMUNDQkY3MTEKKzoxMDZFNjAwMDg3MDU3RkRBMUZGOTc1NkI3ODNEMzJENzkxNzFFNzA2OTgKKzoxMDZFNzAwMEEyRkNGRkRERjhFQkI4NUY0MkM0MTc2NkUwM0YzNTYwNjcKKzoxMDZFODAwMEUyQjRDRkZBRTMzRTU3QzY0RkQzNjMyQThCOEUwMjNFNUQKKzoxMDZFOTAwMDhDMjk1NDdBNjI2OTJDOUEwRDdDMTg0QkExMzIyQjk2NUUKKzoxMDZFQTAwMDREQ0ZCMzYzOTk1NEU2QzQwQUU5Nzk2RUFDODBDQUJDOEQKKzoxMDZFQjAwMEQ4NjAyQUYzNjNDNTU0N0E2Mzk3NTE1OTEwMUI0RTY1MDUKKzoxMDZFQzAwMEJGRDgyOEZBQUUzMDU2NEE2NUZGRDg1NUY0N0M0MDZDREUKKzoxMDZFRDAwMDFDOTUwMzYzMTNFOTc5NTFBQzkyNEEyRDc2MkQ5NUM1MjMKKzoxMDZFRTAwMEIxNkJBODFDMTRCQjhFREEwRDhFQ0RBNDcyNDg2QzM2MjMKKzoxMDZFRjAwMDNEMUYxQUJCODlDQTRCNjJGNTU0MEU4QkQ1NTI1OTEyRUQKKzoxMDZGMDAwMDVCNENFNUYwRDg0MjJBMkY4RERENEFERjVEMTY1QjRFRTMKKzoxMDZGMTAwMEU1ODhEODlERjRGQ0YyRDgxRDU0OEU4Q0I1NTA3OTQ1ODcKKzoxMDZGMjAwMEFDOTk0QTVGRUMxRTZBNTcxQURCNDg2NTU5RUMzRTdBMDkKKzoxMDZGMzAwMDNFMkFCNjk5Q0FEMUIxODdFOTc5NzlFQzIxMkFDN0M0MkEKKzoxMDZGNDAwMDdFNDRFNUQ4NTgxQjk1MTVCMUZGQTA3MjVDRUNDNzU0ODAKKzoxMDZGNTAwMDVFMTk3QjhBQkVCQjJBQjY4QkNBRjFCMUZGQTJFNzU3ODYKKzoxMDZGNjAwMEM3RkU5M0NBMkZDNUY2RDNGMzJGQzdGNjUxRTk4RkZEOUQKKzoxMDZGNzAwMDg2OUU1N0M2MEU1MTM5MjFGNjEyM0Q5RjE4N0I5MUNBNDUKKzoxMDZGODAwMDQ5QjEzRkQyRjNDOUIxNTdBOTlDMTIzQjQxRTU1NzYyQzEKKzoxMDZGOTAwMDZGNTE1OTE1RkI5MENBNkI2MkVGNTNGOUQ1RDgxOUZBQTYKKzoxMDZGQTAwMEVFREFEODlGQTk5QzFBRkIxQjNEOUYxNkZCMkI5NUREQTMKKzoxMDZGQjAwMEZCRkZGMTQ5N0Y1N0MwNzIxRUY3Q0ZBRUFDM0VERDU3RTUKKzoxMDZGQzAwMEI2MzkyRDlERTRFMkY0NTU1QzJFM0U5OEY2RjEwMTkyMUYKKzoxMDZGRDAwMDkzRTMxQzlBODM4NERGMTY0M0JDOEI3RTQ0MDJGNjdEQzgKKzoxMDZGRTAwMEZCQzZCREQ3MUZFRDlERjU5NTI3NUVCRjE1RjVEOTcyODAKKzoxMDZGRjAwMDA3MTNGQUNDMjQ3NzNGNzMwOTdGMjdDMzdDQzQ5QjA1MTIKKzoxMDcwMDAwMDVGRkZBRTYyN0YyRURBNTFFQkNCM0E5NkEwREZFNERFNzMKKzoxMDcwMTAwMEUyOEUxQTJDMEIwNzcwM0Q5OTI1Q0E4MjAxQzJDRjVBMDUKKzoxMDcwMjAwMEMyRjU2RkNERjJBMUZDRjcwNTcyRkEwNjVGQjVEMERCQjEKKzoxMDcwMzAwMEIyQkQ1MjI0RUFBRUFFODE3NDVFQUY4RkZERjRCNUREMTEKKzoxMDcwNDAwMDg1RjJCMDNFRUYxRkJDNjI0MDZFNkZFNzA3RkJEQzRGN0UKKzoxMDcwNTAwMEM1MTdENDRGRTU4MDA0Nzk2MUU2N0VERTE0NzQ2RjFCOUEKKzoxMDcwNjAwMDEwOTg4Q0VEOTlENTNGMTJERjRGNTg1M0EwRTJFRkFBNEMKKzoxMDcwNzAwMEQ0NkU1MjNDQzgyRkY1NkI0QkE3MjA1RENCOTg5RkZDN0MKKzoxMDcwODAwMDkyMzcyN0M5Mjc1QjJDRTg1QUQ3NjQ2M0U4OUZBQ0QzQjMKKzoxMDcwOTAwMDE4Rjk4N0VCNzZGMzNDNjRGNEE3NEUwMzdFNjkxMEZDODUKKzoxMDcwQTAwMEIyNzRFMzlGQzlFRkQ0RDBCNDgwRTczRDQ1Qjg3RjRBQkUKKzoxMDcwQjAwMEZFOEVDREUyRDZCNjE3RDBBRDc3OTYxREE2RkNGOEM1RUMKKzoxMDcwQzAwMDNCOENGRUFCNDZFMTlGNUFCQUQzRjRCQ0U5MkIwOUZERDkKKzoxMDcwRDAwMDlFNjZCRkQ0REMwMUMyREZFOUUzNzk0RjRDRUQ0RjcwMEYKKzoxMDcwRTAwMDlGMDVCODMxOUYyNDc4OUJEQjg5N0EwM0YwNDE3MTE4QTIKKzoxMDcwRjAwMDg5MDdFOUY3OTRGODYwM0RDRjVENTBGRUVBRTk4MzQzRTQKKzoxMDcxMDAwMDI5NEZFRUI0QTZFNTYzQkI2MDNBRkYzRDJCQzUxQTFDQzAKKzoxMDcxMTAwMDhCQ0YwMThGOTRDRkQyRDU5QzQ2Rjk1MDZGODExRUQwNzIKKzoxMDcxMjAwMDMwRjFDQTEzMUM4QkY3Qzc3NUJDMzY4MDg5RkIyQjhERDkKKzoxMDcxMzAwMEYxMDhFNzI2Q0ExM0FGODUzOTYwNUU0QUVENjNEOTc0NUEKKzoxMDcxNDAwMDZFMTNGQTFCQjkwN0ZEOUE4RkQ5MjgxRjI5Q0M1Njc4RTAKKzoxMDcxNTAwMDU5NDVDRjc4NDU2MDlEOERGOEEyNkU0RjI2Q0Y0RjBCRDUKKzoxMDcxNjAwMEZCOEZFMkI5MDI0OTk3QjdENjBFOUU4Mjc5NEQ3NTFCMDcKKzoxMDcxNzAwMDhBNEJDOTVEQjdDNzQ2RjZBMThDQ0I0QTdBRjVDQ0RGRkUKKzoxMDcxODAwMEU2RjkwMjhEMkNCMjFFNTM5NzgwNUUyNzEzRDJBQjc1QTEKKzoxMDcxOTAwMDFGRDExNUU4NzYzMjA5REQ0RUY2NDZCNzg3NEQ3NDQzQTgKKzoxMDcxQTAwMDNGRjU4REY4NzI1NTM2QURFNzlBMzVEMUExNEQzQUZFQ0YKKzoxMDcxQjAwMDM0RkJGRkQ5REMyQkU5REUxMzk5RkY1Q0Q1NEZGRUNFMDMKKzoxMDcxQzAwMDk4MkYwRkU5N0I2NjUzMzlEMUNENENBRkFBQkZENzEzQTcKKzoxMDcxRDAwMDVERDg2QjZFQkE3N0Y4RTZDMTZDQ0VEN0UwRjkxQ0UxRUEKKzoxMDcxRTAwMEY3QkNCOUU1MUFCMkJGNzcwQjM5RjdCQkQ1OThGQkM5MjUKKzoxMDcxRjAwMEQ4OEJBQjlEQ0MwRkM2Rjc0QkFCM0Q1NEZGQzM2QTJGNkEKKzoxMDcyMDAwMEQ1NUY1OUFENTFGOUVBRUExMjJBNEZEQTc5NUU5MTVDRkQKKzoxMDcyMTAwMDVGQzAwODk0REZGN0I0NTg1NzRGMEY5MEZCQjI5NTVFRUMKKzoxMDcyMjAwMEY0NzM1N0ZERkRBNTcyMEI4OUJFMzdBNjRGMUU0MDc2M0QKKzoxMDcyMzAwMEJCMjE1RkE0N0E5NjMxMUZBNEMzMjZGMkNEMzYyQTNFMjUKKzoxMDcyNDAwMEJDNEZBNjJFNzA5NUExM0QyQjE5MTVBRkEzRkUxMUY5QzkKKzoxMDcyNTAwMDJCNzUxQjMyRTkxRUJCOUJBNjY2MUJEQURGQjBBMUQwRTMKKzoxMDcyNjAwMDUwRkZGRDAwOERFMDlFNTkzNUQ4RjBGQ0VCMzU5NzE5QTUKKzoxMDcyNzAwMEVBQjVFMkY3MjM5ODU2NDFFQjQ2QzZCRjQwNzM3M0JBQUUKKzoxMDcyODAwMDc4NzhEQjRGOUFDNkU2REYwRUUzN0Y3MkQ4NDZFRkNEMDMKKzoxMDcyOTAwMEY0Mzg2OTBGRDM3RTNFQkNDREUxQzNGOERFMjkzQ0ZGNTQKKzoxMDcyQTAwMDA2RjU1MzdGNTAyOUJGRTg5NDhEODUzRDIwRTI0RjI5OTQKKzoxMDcyQjAwMDZDMkQ5NkNDQ0FEN0Q1RDk2MzdDNUQ1NUZENUQ2NUI4N0MKKzoxMDcyQzAwMDhGNjczRjcxNTA3Q0IwN0U4QkMyQzI3ODM3NDMxNzYwQTYKKzoxMDcyRDAwMDFFQzY1REY5NjMwN0MxM0Q3NzhCQ0E4Mjc0QkU0QURCNjcKKzoxMDcyRTAwMDg5NzFGMjk1OEYwREYzNjE3Q0Y0RTZDMUQxMDE3OERFRUUKKzoxMDcyRjAwMEIwRUJFNzI5M0UzQ0Y3NTVERkMxQkYzRjA1RkJGMzRDNDAKKzoxMDczMDAwMENDOEY1MkNBMjgxRUYxQTc2OUFERjMyRDk4NkZBNzFFMjYKKzoxMDczMTAwMENFQzVGNUZBQTcyN0Y5RUY5QTJENUNGRTg3MzExRUMwN0UKKzoxMDczMjAwMEYzQTIxNzc2QkU1QzAxRTM5QzZDNTU2OURDMEY3NzM4REQKKzoxMDczMzAwMERBNTQ1QUY3RkU3Q0JDREYzNjBFNzc4NEZDMTREN0Y2OUQKKzoxMDczNDAwMDBCRkMwREU1RjUwN0YzMjMyMzQ5RkVBQ0UyRkVGMTlFQUQKKzoxMDczNTAwMEY4MDE3ODkxREVDOEFGM0E3OTE2RDc2RjNDRkUwNjQyNDUKKzoxMDczNjAwMEE4MDBFNTQ0QkRDRDQ3NzFEOTkzOUI2QzE0MkYwNDdERDMKKzoxMDczNzAwMDQwRjkwNjI3NUJCMzJENUMwRTNENDk3QzU3NjdENUVDODEKKzoxMDczODAwMEZBNzFFQjM2QTk3RUZFRkIxODlBMURFN0NCMzZBQjQxQUUKKzoxMDczOTAwMDM2MTZFQjNDM0YyMkJDNDEwOUYyRjg4RjkxQkVCNzJFNjYKKzoxMDczQTAwMDFGNEJFN0EyQ0Q3OTVDQjJGQzE4RDY1NDUwMTc1NzVBNDAKKzoxMDczQjAwMEY0MEM4RkZGQjJEMTFENTY3RDlFQkJGNENGQjA2MDg1MUIKKzoxMDczQzAwMEUxM0VBMzI1ODMxRUZDQ0U3ODI4NEZGQkY5RDU4QjY3QzEKKzoxMDczRDAwMEI3QkI0OTRFN0U2NDc5NkVDQ0VENTA3RTM4MkRGQ0FFNDUKKzoxMDczRTAwMDE1RThGMkEyMUExQzM2MTBGMzg2MkM5QkI2MkExNDU3MDUKKzoxMDczRjAwMDM5RjExRDhDRkI3RkYwODRDRDQ3Q0I1MEU0OEQyREZBMDUKKzoxMDc0MDAwMEM5NDI4QTRGMjVCNzE3OTg5N0M3QUZBMzc5OEExNzZGRDQKKzoxMDc0MTAwMDI3NjY5NDJGMzI5QkVEMTRGRTg1MDhDRjMzQzA0OTAwQjgKKzoxMDc0MjAwMDdFM0M0Qjc4NUNFQzQ0QjlGQjZFM0MzRjVDNkYzQTZGNDIKKzoxMDc0MzAwMDdDNDI5Q0IzQjg3MkEwNjJEMEQ3NzcwQ0U0NzJBMERFMTUKKzoxMDc0NDAwMEMyRDcyNzdCOTZERjQzMjk3RjJGNEVDQTcxMjk2RkE1QUMKKzoxMDc0NTAwMEJDRkVFQTQwOUVDNzIyRTUyQzYzM0I0OUJFQ0MxN0Y3MzEKKzoxMDc0NjAwMDI1MkZEOUUxRTBFNzhCMzRFNjQxM0MyRUU0NjQ2Mjc3RDYKKzoxMDc0NzAwMDBERTRFQjdBOTFGRDg5RUYyMzVCMkY2MEVEQTRGNzNFREQKKzoxMDc0ODAwMEIwNDVFNkI3MTdFM0Y3NkQ2QkIzRTg3QjlCMkY4MkVCNTQKKzoxMDc0OTAwMDM4MjI3RjhGQ0U0QTcyNjQwMUUzRjM1Q0RBQUE0NEEyRjkKKzoxMDc0QTAwMDNBN0Y4N0ZDN0QxMjg2N0E0MjI3Nzc3QUU4MDU5MzNFRjkKKzoxMDc0QjAwMDk4MjdGNERGM0M2NkNBMzc2QTM1RUFBOTQwOUE5QkUwMTAKKzoxMDc0QzAwMDVBRDQyQUYyQjBCQkU3QTVCMkYzMThFRjBBNDY1RTk4ODkKKzoxMDc0RDAwMDRFRjM1NjdDOTEwNEYzNThDMEJBQTI3ODJGRjJEMkM3NkIKKzoxMDc0RTAwMEY5MzkyNkYzQkNDQzcwRjQ3NTlFRjM3RDMzMjdFMUZEQUEKKzoxMDc0RjAwMENBRERFMzlBRTYyREYxQ0RGMDYwOTU4RTBFMTJFRkYzMjIKKzoxMDc1MDAwMEMzMUM5RkYzRjcyQTQ0QUY3Nzg0QkQyNUNGMDc5QUU5QzAKKzoxMDc1MTAwMEJGODAwNUE2QTM5QzVCNzAzRkVDMzM4QkUzRkMyMEY5OTYKKzoxMDc1MjAwMDYwRTFBRTA4OUQwN0ZDOTBCNUE2QkI2MDNEMkNEOUIyQ0EKKzoxMDc1MzAwMEVCODY3MUYwRkQ4MjFGQkU2ODQ3N0VBRkM5OEEwRUI1MkIKKzoxMDc1NDAwMDY0QzJGRTMzM0NFOUJCNTU1NzI3RDBGQjI2M0RGRjQ1QkYKKzoxMDc1NTAwMEUxODkwOUJGMTU3RDA3Nzg5OUI3NURBNTNDMEE1RDNCQjgKKzoxMDc1NjAwMDkxNDcxMDI2N0MzNTg0RjlFRjA5MzYxQzU1N0QyREYwQTYKKzoxMDc1NzAwMEI0MDE3RkU2QThFQ0UyRTcyQkYxRjYzRjNENkZCMzVEODcKKzoxMDc1ODAwMEYzOEI4MUJEREIzNTY2NzlEM0MzQUUzMUU5NTMzQ0NGOTQKKzoxMDc1OTAwMDgxRkFCMzJCOTdFN0E3N0Y2MkY1Njc2NDkxOUMzNkM5QTAKKzoxMDc1QTAwMEUxREMzMkJBOEY1NUNBRTFGOTQyMEZDQTcxRTZBMUZFOTkKKzoxMDc1QjAwMDgzRkFCQjVCOUU0QTQ3N0ZDNjNCRjczRjk1NDdGOTFBNjQKKzoxMDc1QzAwMEE4NkY0NkM0RjVDRDZERjU3Q0JDREI3RTk5NDJGOTUyQkYKKzoxMDc1RDAwMDdGOUFENjNFMTJFREMxOUE0NzdFOTVBRUJGRUZGNTRGMkEKKzoxMDc1RTAwMDA1QzFBMzAzNzFCRTQyM0YyRTU1REIwNkUyRUYxQTRBRTYKKzoxMDc1RjAwMDM5N0JDMTdENUIzMjM4REQxNzgwRDM2RDg0QjMwRUUxRkEKKzoxMDc2MDAwMEQ0OUQ1M0E5MTc3MEJFQkQ4MUMzNzc2MjEzODc3NzZFNkYKKzoxMDc2MTAwMDBGMzhDMzE0NTdCOUVENDcwRTVGOThFQzhFMjhFOUY1ODMKKzoxMDc2MjAwMDUzQkI1NDg2RkJBQzZFQkJDMzY0MDc5QzY1QUQ1QjExNUEKKzoxMDc2MzAwMDFGNEI1N0JDRjI4NjE1Rjg2MkUxMjU4MDFGRTA4MzlBNDQKKzoxMDc2NDAwMENEMEVEMkZCMEI3RkNFRTNBOTFGMjg5NUY5MTREMDNGQjYKKzoxMDc2NTAwMDEwNERCRjAzOUUyRjAyN0IwMUVEOERGODNDQkFFRDgwRUIKKzoxMDc2NjAwMENGMTA4RkRENzY0MDFGRjFCNzRDRjhCNTk2RURGRDE1QzQKKzoxMDc2NzAwMEZEOEU5NkUyRTdGOTk4Q0JFNEJEMzY3QjRDRjdEQTY4RUQKKzoxMDc2ODAwMDI4MDNGODM5N0YyN0QyQTlCRkY5M0UyRUVFOUZGRENCMDQKKzoxMDc2OTAwMEQwM0ZERkIyODJGOEJGRUIxMkZEMzlCNkM2RDRBODBERDkKKzoxMDc2QTAwMEYzOTBCQjc2Mjk2NDI3MkQ1RDU5OTk1RUM5RjA3QzFCNDgKKzoxMDc2QjAwMEY3QUIxNTE0NzFGREE2RjhGRDk0NUZFMzAwQkFBNkMyRkUKKzoxMDc2QzAwMDc4RkQ4QjM0RkU1Q0YzRjA3Q0YzMUYzMkJBNDc0N0NFNzMKKzoxMDc2RDAwMEQ3RkMxQ0ZERUQ0RUQ0ODcyRTBCRTk0MzMzRkNENzE2QTcKKzoxMDc2RTAwMDcxQkRCOTU0QjU5MDdEQkRDNENFRURFQzRFNzE3RkM1NzIKKzoxMDc2RjAwMDcwMzE4RkUxNDVGQzlDQzMxNUMyQUZEMDg5NzYyNUM2OTkKKzoxMDc3MDAwMEJCQUY3NkQwRUYxODMxMzY4OUZDRUU1NkM2RjlDRjJBREEKKzoxMDc3MTAwMEYxRTZCMTdFRENCREJFQzk3RUVFRUE4Rjc4QkE4NUI1RjIKKzoxMDc3MjAwMEQzRUYyMjRFQUY5OEE5RTE3OTg2MzdGMjlDNzQ0RjE0QkIKKzoxMDc3MzAwMEZDMDk2MDNGQjM0NTNGNDc2Q0ZDRkNDMjFCMzgwNkMwRTgKKzoxMDc3NDAwMDM1NUJGOEE3REZDMEVCNTE2MUZDMzcwQUVDNjRENzg2RTQKKzoxMDc3NTAwMDlGNzE5MERENzA1NzJBRjcxRkIyOUMwQzJCQUU4N0FGM0MKKzoxMDc3NjAwMDBCMzk3NUYzNzg4NzFGRTVGQUVDRjE3NzA1QjA4NEZFRTUKKzoxMDc3NzAwMEMyMENGMDU1RTNFQzVBNTcwQUUzMzQ1QkI4QkU2RkNFNDcKKzoxMDc3ODAwMDYyREMyRkIwQjZBMzFDRjE3NzA1OThDOTk4QkYwRkQwNjMKKzoxMDc3OTAwMEVGM0U5RkREMUIxRjE5Q0Y0RjJDNDEzRkMzOTU4QzMzMEMKKzoxMDc3QTAwMDU4MDVFMUQ3NTA1RjYyRTdFRjZCMUZERDMxRTNGRUYxNzMKKzoxMDc3QjAwMEIwNEZDMEFDMjlENDMzODgyM0U0OEJEQTBDREFGRkNFODcKKzoxMDc3QzAwMEMwRjMwNTU5NTg1QTg5REZCRTY2NjU2MTBCMkYzN0I4N0IKKzoxMDc3RDAwMEU4NUUyNUFGRTE3NzYxQUZBRjYwRDEwQzgwMkY3QUM4NEEKKzoxMDc3RTAwMDc4QkVFM0M2QTgyNTNBMENFMzQ1RDZFODNFQzQ5RkM1NUIKKzoxMDc3RjAwMEE5RDkzQzMwNEVBMDRBMjk0M0JDMkY1OUQzQjdGOUFFODIKKzoxMDc4MDAwMDdDRjRBOTE5RjdGNzg3M0FERUU3ODVGM0JDNDNBMTdDM0UKKzoxMDc4MTAwMEExRDlCMEU4OTE0RjZGQjFCMjAzNkExOUE3MUZGMjYxMDUKKzoxMDc4MjAwMDYzOTYxNkE2NzZDQjM5OUZDQjczMjU5MjJFQTVEMEJEMzUKKzoxMDc4MzAwMDFFQkZCM0M1RkNBMDlGMERFOUY4QkQzREIxNUYyNTJDNkYKKzoxMDc4NDAwMEY4NTJEQTZCOEJDNUJBNUQyQ0Y5RUU3MUUzN0FERDI2NUUKKzoxMDc4NTAwMEQ3MEREQTg3ODBCN0Q5QTI0Q0M2Rjc4RjhBNzVGMTY4NDEKKzoxMDc4NjAwMDExREY2N0RFNTMyNEY3OTk3RDFCNkZBOTgzNDUwOUVFNkQKKzoxMDc4NzAwMDY3MUM0NDQ3MzlFRTBDNTEzRTUyMzQ4OEZBOTNGMzkwMUEKKzoxMDc4ODAwMEZDM0I5RjM1NTEzRUNGN0NFMUE3QjE4MDI0QTFGQ0UwQjkKKzoxMDc4OTAwMEQ2MUY3MUJGOTAyOUVGMDgwQzI1Q0E2RjVCQjREREZDQzEKKzoxMDc4QTAwMDVDRTdFNzUxMEQ3Mjg5RkNBNjhBQkQ2QjJFQ0U0RkY5QkQKKzoxMDc4QjAwMDUyOEEwRkY5N0RCNjdEMjdGOTA3Q0NFRDZDRjhGQkE5NEMKKzoxMDc4QzAwMDE4NzdEQjAwNzY5NTIyRTI2NTUwNzc2QzUyRTg3NzJGQzcKKzoxMDc4RDAwMDY2RjdFRkJBMUNGNTM5NDhFQjI5NzQyRTU0RDhEQkYzNjAKKzoxMDc4RTAwMDA1N0QxREUyN0VBQkY5Njg1RjYxNUMwREVEMkJDNEQ3QjEKKzoxMDc4RjAwMDE2NkU1NzVBODUzRDVDQjdDOTY4NkZDQzVFQUJCMzNCMUIKKzoxMDc5MDAwMDc5NjFCODFGQzA2MUNBNTNCNzA5QkJFMzREN0JEN0U1QTYKKzoxMDc5MTAwMDI4RjdDREY3MDVCQzY5RTE3MDg0RjMxOEJGNTczMzg3QUEKKzoxMDc5MjAwMEJGQjcwQUZCNTJGMkQ1Q0Y4QTZDODY3ODlCM0M3NzVBNTgKKzoxMDc5MzAwMDgzRjI4QURGREI2MENBRDM3MkQxRkQzMTM1MEFCRkJGNjMKKzoxMDc5NDAwMDUzRkEyMTVGMTdFNTY5QjA0M0U5QkU5Q0UzNjkxNDA3NjgKKzoxMDc5NTAwMDM3RkIyNzNCMkJERDYxOEJDRTRGNzk3M0M2NkREMzExN0YKKzoxMDc5NjAwMDNGMzVFOTc2MkI5NkFGNzdERjJCRDY0MUUzMUZGNzBDMzcKKzoxMDc5NzAwMDIyRkI2NzdERTVBODJEOTg5RkY0REVBMzY3NjYzODA3OTQKKzoxMDc5ODAwMDUwMzQ0NTlDOUY4QUZEMEVGM0U5Njc3RDA2RjA1MEZENUIKKzoxMDc5OTAwMEFGMzNGQ0IwOEZFQTdDQkVFQjE2Mjc4OEVFQ0Y4QjNFNzAKKzoxMDc5QTAwMDlENjEwNTNEREZGOTQwRDc1NkFDNjc2ODZBODBFQUY3MEMKKzoxMDc5QjAwMDc2MERDNDNCOTczMzIyMEU1RTZGOTZGRDM5MDJEODVGNzkKKzoxMDc5QzAwMEU3NDNCQ0ZFRDFBMzhFNDAxOEVENUY3MTZFQTlFNjRBNzUKKzoxMDc5RDAwMDg1RTRBRjBCRDc1Nzc5RENDRjU0NjM3OThFOTcxM0Y4RDIKKzoxMDc5RTAwMEVGQTI1Q0E4OUQ1NzBCQjg4QUNBRjEzRUQ0OTNGNEZCNzIKKzoxMDc5RjAwMDBCODMwN0Y5NUQ0NTgwN0ZDRkMwRTAzOTJDMTdDRDU0NEMKKzoxMDdBMDAwMEMyNzYzQ0VGN0YzNDcyODlEMDZCMDk3RjI3QzQyNUQ2QkMKKzoxMDdBMTAwMDZCNjE3MTgwQkU5NzdFNzRFODg3NjlFNTNERkJGOTZGMDUKKzoxMDdBMjAwMDhFOEIzRUEwMDA4MDAwMDAwMDAwMDAwMDFGOEIwODAwMkQKKzoxMDdBMzAwMDAwMDAwMDAwMDAwQkU1N0QwOTc4NTQ1NTk2RjA3REY1QjcKKzoxMDdBNDAwMDZBNEI1MjQ5OEEyNDQwNDIxNjJBMDkwOTAxMDMxNDkwQkMKKzoxMDdBNTAwMDQwODBBMDQ1MTIyMDJDODEwQTI4QTJBMDE2OEIxMDEwNkQKKzoxMDdBNjAwMDQ4NDBFREE2NUI3QUFBQzIyNkUyMTZENEIxNjkxQjlERjYKKzoxMDdBNzAwMDEyRDFDNjZFQjVBM0IyMDREOTJBNkM4MjNBNTIyOERBNjIKKzoxMDdBODAwMEE4QTA0MTUwNDE2Mzc3NDQxOEUzMENCNkZGMzlFN0RFMDQKKzoxMDdBOTAwMDk3QUFGQkE4QjBGNEY0Q0MzN0RGRjc4NzhGRUZFNkJDRUEKKzoxMDdBQTAwMDdCREY1RENFN0VDRUJERjc2NTFDNjNBRTdBMUI2MzNGODgKKzoxMDdBQjAwMEUzQ0YwREExRDJENkQ1QzA1ODIxNjMyRjNBRENCNkFFQTQKKzoxMDdBQzAwMDUwNEU1RDk4MTNFRkM5NjdDQzlFRTE4OTcyMDAzQ0I3QjgKKzoxMDdBRDAwMDUyRjE5OUZCMzBDNjhFRkE3M0REQjE4QzhEQkI0MjNGRkIKKzoxMDdBRTAwMEJGQzhCQ0E0OUY4NDdGQTQ5RjhGNzRGRERDQUVDMEJCQzUKKzoxMDdBRjAwMDgzRTAzRjczM0FGMEZEM0JCMjVEQkQxRDFEMTlCQkVCNEEKKzoxMDdCMDAwMDVGOTgwN0ZCNjE2NTQzMEM2QzAwNjM3NzVCMTlGRDdDMzQKKzoxMDdCMTAwMDVGQjMzNUQ3NUEwMEU1NEI5NjQ0OTYwOUVENUVEOTk2OEEKKzoxMDdCMjAwMDMxMEJGQTYxOEJFMUE1MTRDNkJFNjlGQ0M4RUM4MDdFRkUKKzoxMDdCMzAwMDE2QjRBQUNDOTVDODU4NzVBQjQyRTU4MjREOERFNjExQjYKKzoxMDdCNDAwMEQwQUUxQUNBRDJCMEY5Q0QxM0YzNjVBQ0M5MzgyMTM2MUMKKzoxMDdCNTAwMEY0QkNCRjgzQ0Y5N0IxMzU4Q0UxN0M1RTM5NkJGNDQwQzgKKzoxMDdCNjAwMEJCQkIwQ0Y1NUYzRTk1MDQ4RjA3MkJDRUU3MUQ5N0FFOTAKKzoxMDdCNzAwMDMzNTVCQ0Y3Mjk2M0U1RjVGOTk3RDYwRjcyMjg1NEZGMDIKKzoxMDdCODAwMDU4OEVBQjA4RDdEOTA1RkE0MDU4MzVGMEY1RUFEQjJGMDcKKzoxMDdCOTAwMDE1RkQ0RDhENjY3N0I4QTE3RUM2ODA1OEFCMDNGMDVEQUMKKzoxMDdCQTAwMDc4RDRCMzJDMTZFNjMxNkI1RDY2M0YxNUZBRTg5RjUxMjkKKzoxMDdCQjAwMDUyODJGREIxOTk4MzI1N0M5NTc3NjEyQzg4RUIzM0I2OTEKKzoxMDdCQzAwMDc0NjI1MDdFQkZBMzMwOUVDMUJDQTYyNjA0RUY2MTdEQzcKKzoxMDdCRDAwMDE5RkI4REJGN0I5RDc1Mjg2MzYzN0UwQjZEQkFEMDJCMUYKKzoxMDdCRTAwMDJFMDZFRjk2NUIwNEVDQkJERTVENTYwQ0YwREY1NTgyOTMKKzoxMDdCRjAwMDNEOEVBMjNBMUZCQzdGMTBFNzAzRTU2RDAzN0I0NUIzQzIKKzoxMDdDMDAwMERFODBCRENDMTg4MzNEOUVCMTkyRjQ2OUJGNDFCRUI4MDEKKzoxMDdDMTAwMDZERTBEMDExRjg3Qzk4MjUzNjc3MUFFMTk3MTE3Rjk0QTIKKzoxMDdDMjAwMEE0QkIyNzYzM0RCNjY3QjAwRThGMzlEMEYxNjY1ODg3ODUKKzoxMDdDMzAwMEU3MkRENUU5ODM3NTc4N0FDNzc4RkMxMUYwMzY0OUUwRUQKKzoxMDdDNDAwMEUxMzcwRTNCOTUwNzBEMzBDRjdFQTE3OTY4RTMwMzY3REUKKzoxMDdDNTAwMERFMTM4NEZFNEUyRjRERTlCQjFBRkE3QjM2N0REODEyMTcKKzoxMDdDNjAwMEMyOEIxOEZGRDk3NENGOUNGMEYxNjFCOUJERjFGOUQ1ODEKKzoxMDdDNzAwMENFNjM5Njk4QzcxMjQxMzc3NzMxRjA5OUMwRjVDRkYwQUYKKzoxMDdDODAwMDdGNDI1OThDMDRERjM4MzY5MUI5RjI0MkYwQTQxQjUzN0QKKzoxMDdDOTAwMDI1NzhGMkQ0NkNBOUZEQUQzM0FGOTNFQTJCMkNDMTgyQzkKKzoxMDdDQTAwMDFBNUI4OEJGRjVGM0QxNEEyMDE0RjE2OTc1RUNDNjM4MjgKKzoxMDdDQjAwMDA2NTMzQ0IxRTNDMjg3NTM0MDRFRkVCNjQxNzUyQTMwQUQKKzoxMDdDQzAwMEQ3MzkzQjlGRkY3MDA4QjQzQTA3MEI0RTA0QkM5RDczMzUKKzoxMDdDRDAwMDAxMDBFQjNEQjc0OUY1RkIzMjkxM0Y1Q0M2OEE0RThDMDMKKzoxMDdDRTAwMDU1NjE1N0QwN0VGRUExRDdDREMzRTBEN0FBOUFEOTYzRkMKKzoxMDdDRjAwMDkxOEU3M0ZDQTZDRjlCQzJFNjc5ODE1RDM0QjMyQzkwNDQKKzoxMDdEMDAwMDg3OERGMkYzNkFGNkQwNzc2QTZGODQwMjY2NzcyRkU4ODAKKzoxMDdEMTAwMEE3NUU1NzVGMzNGMjJCMTY4N0VEOEM5RjM3NjlFQjg0OTQKKzoxMDdEMjAwMEYxMTcxRkNGN0M2NDVGRDhCQTlGNzZDNDI2N0Q3OTFEN0EKKzoxMDdEMzAwMEZDRDI4RkY1RkI1OUM1RjE5QTBGQzAwQTU5Njk0MzIzNEMKKzoxMDdENDAwMEQxNjlEOTIxRDU4OTJDQkEyQzVENjEwQUFDNzNFNDI2OUUKKzoxMDdENTAwMDhCM0YwQTQ0RUJEQjZEMjdDRDBFQzBENzBGNUVDNzIzRTgKKzoxMDdENjAwMEZCNEMyOEZGQjU4QzI1RTI3QjI3Q0Q0REYwN0NBOEMzQ0EKKzoxMDdENzAwMDQxNzg1QUIwRTMzQjMzMDNCQThGRENCMTkwRTQ3QTA0MjQKKzoxMDdEODAwMEU4QjE3OEUwOUY2MDIzRUJCNTA5RkFGNzY1QzYzQTlGNDIKKzoxMDdEOTAwMDg3RkVFRjVBMzUwQTg0OEJCMUY4RDYyOTU0Q0VBQjFCMzcKKzoxMDdEQTAwMDQ1RkRDRDZGOUQ0OEYwODJENjE4ODIwRjQ2MDc0NzMwQkIKKzoxMDdEQjAwMDk4QzdDMTJEMUREODMyOThDNzYxMzU5MEZCN0JFQ0M3QTEKKzoxMDdEQzAwMDEyNEI3QUEyMjJGNUI2QTVCOEVFODNEMUJFRkNCQjYxRjgKKzoxMDdERDAwMEJDOEEzRjhGMkM0N0JDMkVEOEE0Qjg5MENGMkE1NDc2QUIKKzoxMDdERTAwMDUwNDlDMEY5NDY1MTdGMTVFQTdCMDUwQkUxRjk5OEQyNUQKKzoxMDdERjAwMDU4OUYyMTlFRUExOTgzN0E3NTQwRUM2QTA2QjA2QTA2OUMKKzoxMDdFMDAwMDdEMTE4MTNGMEYwOUZENjI2QUUyRjMxRURFNUE0OUZERDIKKzoxMDdFMTAwMDY5RjU4NzFENTlCNDdFMEQzNjc1REM2MDlDNkUwQkFEMUYKKzoxMDdFMjAwMEM3RDRBNDUwMzlCQUY1M0EyQUFCMzc1NTFBMUQzMENFMEIKKzoxMDdFMzAwMDVCNzlDRjI1MjE5RUEwQkRDRDEzNTEyRjBGOEM2NzExRUIKKzoxMDdFNDAwMEY0OTc1NjVBODQzRTlFODJGQTE4RkEzRDkwRTVGQTAyNUIKKzoxMDdFNTAwMEU1NzJEQzkyMjZBMzE1RjVBOUNENkE3RjFFRjg2MDVDNTkKKzoxMDdFNjAwMDUxNUZDN0FDQjA3NUE5N0I2RTYxMEVFMDIzNEI1MjhCOUUKKzoxMDdFNzAwMEM5MDVGRDRGODEzMjVDN0ZERkQxOEVCREY5QTY0RDdGRjQKKzoxMDdFODAwMEQ3NTJBOUQ5MjVFNjVDQzIxOEYwRjlFRDc2M0U2RjREQzAKKzoxMDdFOTAwMEFFOEU4OUY2REFGQjQxODVDQjg3NkZCM0M1RkYzQ0ZDMUMKKzoxMDdFQTAwMEZFNTk5NkU3Mjc5QzZGNzAxODlCRkMxQUU5RDM2MDQ2MzEKKzoxMDdFQjAwMDY1RUMzRjZGRkU0MDVGMkJEMjNGQ0VEOEM0MTJFMDdEMTEKKzoxMDdFQzAwMDQzQTYzNjdGMkVENzU3OUE3RjhCOThGRjYxOTUyRDQ2MTQKKzoxMDdFRDAwMEJFMzg3Q0MzMEQ0MTE3Q0NBQkYxQkVGRUZERDEzRTY4NzAKKzoxMDdFRTAwMEUzMjU2NjlBQTkzRjY2NkZCOTg4RkM1QUJEMkJDNkIxRDcKKzoxMDdFRjAwMDFBRDY1NzAxQjQ0MUI4NjVBN0M1QkYzRTkzOUUzMzI1MzYKKzoxMDdGMDAwMDA5NEJDQjdBMDVFQUFCRTM1QTcyRDFGRTk0RUU4RTBBQTYKKzoxMDdGMTAwMDIwREYzNkVFOEUzMkEyMUQ3OTMzQzc5Mzk4RDkxMTlGOTgKKzoxMDdGMjAwMDc3MkY1MzgwQkY1RDNCMkM0NkU0ODM2NDg3MkIyOUIzQjYKKzoxMDdGMzAwMEIwRkRGOTVFNDk4RjY5RjJBOEU3MzNDRjJBMkU3RjFFODQKKzoxMDdGNDAwMDIxODdEMzA0REY0RTE3NzIzOENERTg4Q0ZGMjVDQ0ZCOTgKKzoxMDdGNTAwMDhFNzc1NDg2N0E3Q0ZBMTJBNUQ3QTYwMkQ0NjlCMUNFNjAKKzoxMDdGNjAwMDlDMzAzOUQ0RTRDRDg0N0NEOTFGRjk5M0YzRTVCQ0Q2OTkKKzoxMDdGNzAwMDBFNDJCRTMzNDVCRjVDMEUyQUMwNDAyMzdFMkFBRUVCQzQKKzoxMDdGODAwMEUwNDdGOTVFRDA5QTQ4RUQzNDc5RDVFNDM0M0REQjUzQ0YKKzoxMDdGOTAwMDhBRUJBRTU4MDZGMjBERTM3ODk2QTYxNEEwQkM4NEY4REUKKzoxMDdGQTAwMEM0NkM0NzdFMDIzRTQ5OUUxNUM2MDdDQjFBN0YzNDIyMTkKKzoxMDdGQjAwMDlGOTg4QTE1RTIxMzBCOTRBNTYxN0NFNDZFRjM1M0VDNTEKKzoxMDdGQzAwMDIzM0FDMTNDQzYyRENGMzRBQzY2QTFGQTcyRTQ5NzhFMzkKKzoxMDdGRDAwMDU3Q0ZFRjg1QTJGRDc0NUIyMEM3MDBGRDk5NkFBMjlDNzQKKzoxMDdGRTAwMDRCNjE1RUU3OTIxQ0E0QzcxNjNEMDAwMEEwNjA5MUM5REEKKzoxMDdGRjAwMDVEOEE3RUM2QTJERjI5NEVENEJGRTg3RkEwRkUxOTcwM0QKKzoxMDgwMDAwMEFDQzZFQzA5OUJERjJEQURCRDk5MDNGMDM0QjFCNTFCQjcKKzoxMDgwMTAwMDk1RkQzMzNDOTMxMDBGRDM1QTI3MDkzQ0Y2QTY5MjM5QUQKKzoxMDgwMjAwMDhBMEMzODlGN0JBQ0RDQ0U5Q0FGQjlGRjc2MUNFRkJDRDIKKzoxMDgwMzAwMERGRTJDNEYxMTgyQkUyRjQxNkYzMkQ3NDM5M0JGRjEyODIKKzoxMDgwNDAwMEU3Rjc4RTg5M0QwQkVEQ0Y0NDc5NTQ5NENCMzNFOUNDREYKKzoxMDgwNTAwMEZFMzg0QzcxQzY1QUEwMzNGNDdCQzZDNDdDNzZBMEU3QzgKKzoxMDgwNjAwMDRDODAzRDA4Nzc2MEFFMEVGRDUwRUU2MDlENjE3NkU1NzgKKzoxMDgwNzAwMDgyQjEyRTgzNjUwMzdEMTdGREU1NTMyM0E4QzIzOUI5NkMKKzoxMDgwODAwMEMxREUwMTE4NzdFQTMwNkVGRjlCMzc5OEM4RkVDRjZCRDAKKzoxMDgwOTAwMDdDNkY4MDAxRUFCRkNFNzQ3NTY2QTA3QkM3NzRGMUQ0OTMKKzoxMDgwQTAwMEUwN0FFNjRFRjBCRjYyMDJGOEFFODc1RjhGMUJFNDA4MEQKKzoxMDgwQjAwMEUxQjNERTE4QzgzMUMyRkJGNTgwNDcxRkNDQUJGRTIxMEYKKzoxMDgwQzAwMEI1RENDRkZEOUU5OENBNUU1N0U2RUJCOUFERDk4NDFGRUIKKzoxMDgwRDAwMENEREU2OEZBN0JBQjM3MTkxNjExRDJFMzU3QjI0MzFBREIKKzoxMDgwRTAwMDdGQ0YxNzcyMzAxRkU1ODA4NURCOUI0QUY3MzBFNEMzRjIKKzoxMDgwRjAwMDNDQzU5OUMzQzJFRDBEOTcwNzRENEYwM0JGOTNEQzU0QTgKKzoxMDgxMDAwMDY0QTczQjk3QjE5MERFRDZEQkEzQkQ2QUZERTM4MzYxMzQKKzoxMDgxMTAwMEJEQ0JCMzNDRUI1MTBGOTRGQ0U5QkY1RUZGMThBQUU2NjAKKzoxMDgxMjAwMEJERjY2MjE5RDI2OUQ4NzUwQTUzOTVBQkQxOTMzRjlBQkYKKzoxMDgxMzAwMDQ4NEYyRUE5NjRBNDI3QTEwQ0Q3OTNBNjc2RkNGNDNGNDAKKzoxMDgxNDAwMDY0NUU5QjlFRkY1N0MxRjdFMERGOTJERjg4N0EzQ0JDRkMKKzoxMDgxNTAwMEJGQ0ZCMjRBQjYyMTlENzc2NTJBNUNFRkZFOTNFNkFEQUMKKzoxMDgxNjAwMEQ3RUZCQkRBRTRGNUVBRjRGQjRCQTJGRDk1RjRGQjExODMKKzoxMDgxNzAwMEQ0RUY4NTk3RUE3MzA2RkRBMTNFRkZEQkNFMUU3RUQ0QzkKKzoxMDgxODAwMEY3OUYzMkQwRkY2OERGNzZDNDM4OUUxN0ZBOUVFQzQxMjUKKzoxMDgxOTAwMDc0QkNGRjcyRkFGRUIxOUMxOTQ3MTAzRjExRjRGRDdCQ0QKKzoxMDgxQTAwMEZGMEM3REFGRjE5NzVFMUVGNDcyQTBFN0ZCMzEwRjgyRUEKKzoxMDgxQjAwMEZGODU3NERBQUEzMEQ0QUYyMTdGOEIxMTFGMUZDQ0UyNjgKKzoxMDgxQzAwMDdDQUNDOTREOThGRjQ1NzYxRUU0QzE5RjkzNzlBOTVDQUMKKzoxMDgxRDAwMDdFNUZGMzk3MDIwN0M2OUIwNUIxN0Q5OTEyRTI3NzRENEEKKzoxMDgxRTAwMDVFMzQ3RUQ3REI5MTM5NTkxRTM1QUIzMDI0MjdGMzVFRTAKKzoxMDgxRjAwMEQzREI4MUY2Rjg2OTlCMDlFMzU3RDNCQ0VGQjgxRDgwNDgKKzoxMDgyMDAwMDMyREMwRUI0RTdFRjU4QjNBRTREMEVGRUUzMkFGOTI5ODcKKzoxMDgyMTAwMDM1RUI3RjlDOUY1MkIzMjJGMzUzNUE1NkM3N0Y5QzlGRTYKKzoxMDgyMjAwMDJFNDM0N0IyMzMxQTlGOEQ3OTlCRjMwN0NCRTZGRTNFNzAKKzoxMDgyMzAwMEYwMEJDREZCQTAzOUREQkYyQzEzRjUxRUQ3ODc2MzdFNzUKKzoxMDgyNDAwMDY2MzU4OENGM0I0NDNFNDFFM0Q3MTFEOTFFMTdDRTUzNDQKKzoxMDgyNTAwMEEzMzNGQUY3RThCNzVGQUQ1RjM4MjVBOTg2QjlFMEY5MkYKKzoxMDgyNjAwMDFENTA4NkVCMEQwQkQyMkY4MjdGM0ZGQzFBRTlEQzNGQkQKKzoxMDgyNzAwMEVCRUFFODNDNDlEMEY5OUZFODE3NEVDQjhBRTAxNzMyODkKKzoxMDgyODAwMDE3QjdGRjIxQkE1ODI2MjJERjdDMUYzMDMyOTRBRkY2OTEKKzoxMDgyOTAwMEU4NkE1QUNCRjFBRUMxMkIwMjQ2Q0RCRTI2QTI3RDA1QkYKKzoxMDgyQTAwMDdFOTlGRURGRTE5NzhBRDJGQUYzNTY3MEZEN0NFQjhCNjQKKzoxMDgyQjAwMDJCOEQ4MzAwMUY0NTRDRTQzRjg2QUU3MTc1NDNGRDAyNTQKKzoxMDgyQzAwMEJGMEZBNjFFMjkzRjcyNTgxNUIwRUZGQTIzNjUzMDhGRjUKKzoxMDgyRDAwMDMxOEZCN0Q1RkJCMDdFNzg3MTdDNUIzRTA1NDMwOUFEMkQKKzoxMDgyRTAwMEJENzdGRDkwMjMwRkQxQkNFQjM4QkUzRDRENDY3N0FGMzcKKzoxMDgyRjAwMDMwQjgwMEUwRDgzMEI4NDgwN0FGRTNFREQxOEVEOEE5NDgKKzoxMDgzMDAwMDFGM0Y5NzRGRTg1RkU5ODdCMEQ2OUY5MDAzRDYzMkEyMTAKKzoxMDgzMTAwMDAzRkE4QjlCMTQzQkU2NDM2RTJERkU5QjE5RTk1MzUxRTgKKzoxMDgzMjAwMERBNzQyMDE1RDZGQkY4RkFFMTk1QjYxRUYwMUNGNTIwOUMKKzoxMDgzMzAwMENDRjdCOUY1MTU2QjdDNDZGMTdFMjdDQThGRDE4RkE1OTYKKzoxMDgzNDAwMDVFNzFBOTQwQTc3OTQ1OEEzRjJCRjM1MjNDM0U5NzI1QTEKKzoxMDgzNTAwMERCMzNGQzMxQ0FFRjMzNzNDMUI1QkQ4RkYyNEJFRjY3MkUKKzoxMDgzNjAwMEQxRkIwMUNCMzU4QzdGNzMzMTczRjkyM0U4Qzk1N0I1NDUKKzoxMDgzNzAwMDc2MTcwMUQ2RkEwN0RDNERBQ0U3NzFCOEJFRkQzNjIxQTEKKzoxMDgzODAwMDZGNDE4MzYxM0UwMzdDMzVBRTlGQjYwNkYzNjVDMzE5MkEKKzoxMDgzOTAwMEU3OEZCREVCM0Q5NTk4MEYyMzQyRUJENjdCQjlGOUZFRjUKKzoxMDgzQTAwMDIxNEI4RUVGRjBDNzIxQkYxRkI4MUNCRTVFQkVFNDdEMUYKKzoxMDgzQjAwMEMxMUY1NTMyQkZDNDFCRERGQkJFODc3OUM0MjcyOTc2OTgKKzoxMDgzQzAwMEY0NkIxN0I4QTMxRTQyRkZCREEyNTRFM0VGQkIyQTVEQjYKKzoxMDgzRDAwMEM1QjBCRTI4MjZFNUZGNDJGQzNEQUYxMkY5N0IwMUQzQjQKKzoxMDgzRTAwMERBMkY1ODgzNzZDOTZENjg2QkNGRjk3RDg3RDJGNjdFMTgKKzoxMDgzRjAwMDFFRjAwRkE1RTJFMEZEMTNFQkU3QUZGMUQ5ODgxRTU0QTQKKzoxMDg0MDAwMDRGNzBCN0NCRjA3QkJEMEUyRUQ2Qzk4N0UwNkY5MjRGNzEKKzoxMDg0MTAwMEQ0REI4MDlGOUMwODdBRTMzRjA1OURCRjU1RDg2NEQ0ODgKKzoxMDg0MjAwMDdCQzExMkVFRUYwNUIzNzhEOTI1OUJGQjc3ODY2Q0RFMTYKKzoxMDg0MzAwMDJFM0E1QkQwMzkzQTBDMEY2OTIxM0FDMzRGMDBFMzg4REEKKzoxMDg0NDAwMEIwNzUxMzlFNkU0OUQyRDZGRDcwRTU1ODU4NTczMDgxRUQKKzoxMDg0NTAwMEY1NTI4MDRGOTJCMjFGNThCMzNDOEM0RjNBNjUzRjVDNDcKKzoxMDg0NjAwMDg5NzgwOEY1RjdFMDExRDRGQkI3MDgzQzc1Qzk3RUU4QjgKKzoxMDg0NzAwMDg4OEZFQjMzMDVFNTZFM0UzMTA0RjBDMTI2QzVBN0MyRjcKKzoxMDg0ODAwMDNBRTcyMzFGNDQ1OEU3RTk0QkU1QzZBNzdCREY2NUJBMDcKKzoxMDg0OTAwMENDRkI1RjVGQ0E4NzJFRERGQkNDOTQ3NDJERUYwQjNBQ0IKKzoxMDg0QTAwMDhERDVEMUIxNUM0N0M3MzIxRDNDNTU4M0ZEOTIzRUQzN0IKKzoxMDg0QjAwMEY0RENGNDg2MzUyQjNBMjU2MUJFNTE0MTMzODFGQURBN0EKKzoxMDg0QzAwMEFDRjQ2NUFDQ0Y3MzRGNTZEQTA2MjFCRjNBNENBOUEwODUKKzoxMDg0RDAwMEYzRkIzRkI3RjY4ODE1NzhCOTEyRjUxOUYxRUZFRkQ2MkYKKzoxMDg0RTAwMEI4ODAxRjI3QTJCQzEzRkM1NEE1QUIwRkYyNEZDRDhBNTYKKzoxMDg0RjAwMDY0NjgzRkU4QjlERkFGQjE0MkQzNUI5N0FGMzFBMTRGQkEKKzoxMDg1MDAwMDMzRjRCOUE3RDcxODgxN0VCNzE0RkNGOTAwRjY2N0FDMkQKKzoxMDg1MTAwMEZEQjcyMzYzMzMyRkMzQUY3NUJBNzVBQ0QzQzEzRTVEQ0UKKzoxMDg1MjAwMEZCMjdBRUEwREY5N0VCREU1RkEyQUI3RjQ4MDdBRkQ1OUUKKzoxMDg1MzAwMEMxQUJFNEY3QTdDRDU0NDg0RUE2MDFGRDEwNzE1NzkyODgKKzoxMDg1NDAwMDlCODlEOTZENzlBNDM2N0JBNkQ4Qzg0RjkyRjg3RUNDOEEKKzoxMDg1NTAwMDMyMEVERkY2RENDQjk1QUJGMkMzRTBFQzNGNTc4NkYzOEYKKzoxMDg1NjAwMEIxODlGMTlGMjk0OUNDODdGNkMzRDQ4RTNFMUI5M0REOTgKKzoxMDg1NzAwMDBFMUZFNUU5RUQxREFGRkYwQzdGNERBMTdEMTZDOTJFNDUKKzoxMDg1ODAwMEVGNTU2NUI4NTFENUU2QkRGM0M4M0QzNjdDQThDMTNCNzMKKzoxMDg1OTAwMDJBRDExRjZGNzdERjgzQkQ1MTg5RkIxRTYzMUUxNUIwODMKKzoxMDg1QTAwMDZGNUIyNUVBM0Q2RDlENUFGQjExM0ZGREFDRTI3ODc3OEMKKzoxMDg1QjAwMDY3NkZBQkRDODBGQjJBMjU4MTFDQ0NENzRGNERFMDI1QjMKKzoxMDg1QzAwMEQ4MTkxNUVENThCNUM4Nzc4Q0Q4QTlCQUQxQ0U0QzhEMkQKKzoxMDg1RDAwMDBFRTQyQ0NBMEY1QjI3QUJDRkM1NzUzNkRFQTcxMjdEMjQKKzoxMDg1RTAwMDdDQ0I3ODNDMzI5RDM5Q0Q5OEFGNjg4QzhGNUZGQzAyOTQKKzoxMDg1RjAwMEI0REY3QjlGQkExOEVEREFBNzhCMTMzQkUxRkNGNzY1N0MKKzoxMDg2MDAwMDczQkY2RDZGN0NENzRFNzcwMkRDMTg3Mzg3MTlGM0I1OTMKKzoxMDg2MTAwMDhERjcwRkE3NzI4RkVBNUFEOTAyN0NCQ0U2Qjk4MzY0NDIKKzoxMDg2MjAwMEU3MUI2M0UyMDkzRjBGNjdFRkFCQUMwNUI5QThDQjc2NTgKKzoxMDg2MzAwMEQwRkI5RTA0N0JBNzA2RjQ1NzU3OUIxOEU2QUJDMTkxNkQKKzoxMDg2NDAwMDdBODZGOEU2NjE0QkRGRDUzMDhGNjlCNUQ3RDFGRUQxOTgKKzoxMDg2NTAwMEY0N0ZBRDFDOTEwMkVEQTZBRjMwRDFCRTAyRkNGNEM2OTIKKzoxMDg2NjAwMDc5N0I1NjBGMzc2M0ZEQ0NFNUEyRjQ4REE0NzJGN0RGNUEKKzoxMDg2NzAwMDVGN0ZCQjM3QjQ2Rjc5NDA3NUFFODdDNkJCNUFCM0UyMzQKKzoxMDg2ODAwMEE2QzNCQzRFNDU3MTNERkM3OTczQjczODlDNjc4RjZFQUQKKzoxMDg2OTAwMDlFNzVEOUM4QUY3MUIxRDEwQTFBMEZCQjIzNkUwMkY0MEYKKzoxMDg2QTAwMDlCOUJFMzdBM0FCQjYzQThGREVFQkZBQkI0MEZCNkJEQUMKKzoxMDg2QjAwMDc5N0EyN0NDM0ZGRDQxRThFRjVEQUREMzNCNEQwRkIzNTkKKzoxMDg2QzAwMEY3QjNCRTM1MTI5RTc3OUIxREY3QTA3RkI5M0IzQTVEOEQKKzoxMDg2RDAwMEMxQkMwQ0UwMzkxMUYzQjYzMzg1N0YwREZDQjJGOEY1NUYKKzoxMDg2RTAwMDA4NzZGRjg5NkM5NUYwNzJEQUIyOTg5RDAyMjY2RTdDNEUKKzoxMDg2RjAwMEIwNjMzMUNFNTM3QjRGREI3RjMzQTUzOUZBODVGQkQxOTUKKzoxMDg3MDAwMDFCQkE5NkJDOEVFQjA4RjFEOTY3NDc5MDZGQzg4RjA2RUQKKzoxMDg3MTAwMDc4RDc3MzlGQUNGMUExMkREQzBCRkUzRkNFMjNDOTM1N0EKKzoxMDg3MjAwMDAyRUJEOTkyNDRCRTBGOUE1QzlGMUI5RThGMDhGOUE5NTkKKzoxMDg3MzAwMDRCODUzRUUwRUQ0RUY4NjIyOTZFM0RGMTUyOTQxRkUzMDkKKzoxMDg3NDAwMDk5MTNCRTRGNjJDM0YzRUY5QTlDQ0M4RThCRjVBMTMxODcKKzoxMDg3NTAwMEZFMkEzNkQ2ODg3OEZERDRFOEZERjI1N0I4NkZGOEI0MTMKKzoxMDg3NjAwMDg5RjRFOEFDQTczQjJFNjk0MTdEMDBGNEM0N0M5MDdFN0YKKzoxMDg3NzAwMERDRTQ2RTI2MUFCN0ZERkRDMUU2Q0FCMkI0MzAzOTYxMzkKKzoxMDg3ODAwMENEOTVBRUZDRjZFNUU0RDg3M0RGNTQ2RUIwQjUyRjI3NzcKKzoxMDg3OTAwMEIzODVERjNFRTI2OTkzMUJGOTdDNzY2MUFDMTFGN0U5QTIKKzoxMDg3QTAwMDRBOUVERUZGM0NGMkUzRUM4NTUxRkQyQzMwRjFEOTRGQkYKKzoxMDg3QjAwMDVCODhCRTREQjFCMTNFM0JFRTIzQzZDNTFBM0I0MEY5QzYKKzoxMDg3QzAwMEFERDAyMzREQjU1MTE0QTdBODlEQ0NBNEY3RDQ5NTg1NjEKKzoxMDg3RDAwMDBFQzQ0RkE5Q0E4QzU2QjAyQjZBOUNEM0UxRTZGMDcyNDYKKzoxMDg3RTAwMENDMUJBRTg4MkQ3MjIwN0QzQjc2RTNGMkQwNTYxRjNGMjYKKzoxMDg3RjAwMDc5QjREMjNCQjQ2Rjc2NzZGMUUzNEYwRTg0Rjk3RENEMzgKKzoxMDg4MDAwMEZDOTMwNjY2RkVGN0Y3RDFBQTk5M0IxRUYzOEZGRjUzNDAKKzoxMDg4MTAwMEZCNjhFNjZFRkE3REI0RkNGODlCOTFGRDE2QUIzNDZGRjUKKzoxMDg4MjAwMDc1Njk5NDFGRjFBOTY2NzAzQjMxOTIyOUI0OEZDNkVDMkIKKzoxMDg4MzAwMEIwRkU1RUExN0QzNEY1RDdGRDA5M0ZBN0JEQzA1N0RENzEKKzoxMDg4NDAwMDAxMkY3MTU2NkFBRkZFNUFGNTVCNjBEQ0QyNDQ5RTZGMTEKKzoxMDg4NTAwMDU1OUZBQzY0QjhBRjA2NzhGNUQ5MDExRTk5NTQ0M0ZCMTcKKzoxMDg4NjAwMDZCNEI4NTlFOTlBNjMwNzczREM5QkYzMzAzRTNFNDU5MkUKKzoxMDg4NzAwMDRGNDcxMTFENjczRjMzRTdDM0RGMTUyMEREMkE5MkMyNDIKKzoxMDg4ODAwMEU1Mjk1M0YwMUZGNEM3QUMwOUExN0VCRUFBRkQ0RDA2MzEKKzoxMDg4OTAwMENFQTdGNERGMjBCRUM0Qjg1M0Y1M0M3OTBCRTlDRDE4NjAKKzoxMDg4QTAwMERBNkY2M0Y2QTY4NzA3MjJCRkQ0QzZGNEM1M0NGOUVDOUQKKzoxMDg4QjAwMEE3NTMzMkIyRjI0M0VGQ0Y1RTdBNUYyRTdGMUZFMkQ2MkMKKzoxMDg4QzAwMDM4RDQ1QjUxQjQ5RTc5OUIyQ0M0MkZEMzFFNTA1RDY0NjkKKzoxMDg4RDAwMDI3RDNDRDY0MjczRjVGMUU0NUYwQkNCNDIyOTJCNzY5MTEKKzoxMDg4RTAwMDA2QkVGRjA2M0U2MTMyRTk3NzhFNzIzNkNGQzY1Q0FGQjgKKzoxMDg4RjAwMERCNTBERjNGMTQ1NDM5N0Q3QzgyNkU2NkE0NEY3MUI3MjQKKzoxMDg5MDAwMDQ0OTJDQjNCMTBDNzYwQkZBNjIyQkY3NUE0RkU3ODFFNjEKKzoxMDg5MTAwMDZBOTc0MkZCNEQ4Q0Q1Mzg1MDBGNEMzNTI4QTRFRkY0QTQKKzoxMDg5MjAwMDcyNTlEMThERkJBRkQzMzI5Q0I3RTM3QkYzMUZCMTM4QzMKKzoxMDg5MzAwMDk3NjZGMjM5QThEQTdDMjA2RTlBNkYwOENFQzI3RDQ4MUQKKzoxMDg5NDAwMEI2QzU0MkY5OEQ2QTU4NDc1NDFDM0ZGN0YwMUFDQ0JGQTAKKzoxMDg5NTAwMERBQzg4QzY2Q0M0RjM5Qjg1RUQzRTY1M0VEQTgxQzg5RDMKKzoxMDg5NjAwMEZDMEFGNUM3OEM1MDNGM0Y5NkVCRTVGOTFENzhERTg3OTIKKzoxMDg5NzAwMEM1NUFGRENGODc4Rjg3NzNDRUU2RUYzOUUyNTBERTA2MEEKKzoxMDg5ODAwMDExQkZBMEZDMUJBMEZFNkY4Q0Q3OTdDNjE1Mzk5QUYyQjkKKzoxMDg5OTAwMDY5RkY3RTE1RTY0QjcwM0UzRDdBODc4RDBCNzA0QTZGRkUKKzoxMDg5QTAwMEU0Qzc4NUM2QUM1OEE0NDNFMkE0QzkzOERFQ0IyQUU5QTMKKzoxMDg5QjAwMDI3MTBBQTQ3OEFEMDBGN0M1OUVEOEZGMUVDQjQwN0Y2NDcKKzoxMDg5QzAwMDhFNTg4QkYwQUI3REVEMzg4NTY5QUZCQzRGNzZFQTJFQzMKKzoxMDg5RDAwMEMxNjc0REU4RkZBM0REMDJGODU1MjhFRkVEQzZGNTgzMkEKKzoxMDg5RTAwMDQ3RTVGOTlDN0JCQjI5RDJCRTlGNTYzRkZGMDExM0QxQkYKKzoxMDg5RjAwMDYzRkUwQUNFMEZGMzZCRkY0MkZEQ0U4RjBENzY0MjdBRjcKKzoxMDhBMDAwMENDREY2QzFBODA3Q0ZEMkY2MkRFRDM2QkQzOEI4RjAxQTEKKzoxMDhBMTAwMDdGNEMzN0M1REIxNTc4MzRDRjU3NjE0Njc4NUU5RDQyNzEKKzoxMDhBMjAwMEIwMzZERUZDMDczRUU4NjRDOEU3RkQ2MTY5MTE3QzE0REUKKzoxMDhBMzAwMEVBQjc2MzA2REFCNTZGNUU0QUNDOTgxNjQ2Rjc2Rjk2Q0EKKzoxMDhBNDAwMDZGOERDMzdERUQ1MzUxODExQzNCRTY2MzE2NDYzOUQ3Q0MKKzoxMDhBNTAwMDkzOUM3MjdBN0NCMzNDNjczREU2NkI2NkRBODNCMUI4NkYKKzoxMDhBNjAwMDFGM0VGMzlFRUMwNEI0Nzc5RkRBMDM2NkFDRkZCNDNFN0UKKzoxMDhBNzAwMEQzODBCMENCNkUyRjQ2RDg2NUVDNDNGMDM3RTI5QzBBMkEKKzoxMDhBODAwMEZEMDA5RDE2Mjg5QzZGRTZCREI0RDc5QzA1RTMzRDI3RUQKKzoxMDhBOTAwMEY4RUNEQjk3REZDRkM1QkNDMUZDOEM2MDJFREE2MUUwNUYKKzoxMDhBQTAwMEFCREM1NEE0Q0IxRjE1RjIxNzE2QkNBNEJBQTI3QTg3NkMKKzoxMDhBQjAwMEY4NkEwMUYyMTVDOEZGNUNDMTU3MEIzNjZERkQyNUNBNzcKKzoxMDhBQzAwMEU5MDJFNEE3N0U5N0YyMjVDNDk3RkJFOEY5NkJDRjhFMDUKKzoxMDhBRDAwMDYwRkNGRDdEQzg3NzlBREQwNzc4QjkwOUYzNkI2NjAxMDQKKzoxMDhBRTAwMEMzMzgwODZGMTBGQTFBRUFDQjc4QkQyRjlGRUMwOTZCRDgKKzoxMDhBRjAwMDMyQTM1RjVDQUQ3MjdGMDFFNDI5MTlGRDg5RUEwNjkzMTgKKzoxMDhCMDAwMEFGMjk0QzNGMkVDMEZBRkM1MDdEN0I3Q0IzQkY5QkQ4NzUKKzoxMDhCMTAwMDJGQUJCNTkwNUREQTJGRjBEMkY0QzBFNjM4RTQ4QjZGNUUKKzoxMDhCMjAwMDVGREU3QjYwMzBDNjU5QUYyOTc2RDRGQjk3QzhBMUMwMDEKKzoxMDhCMzAwMDVCMzVFMjI5OEVENjQ5RkU1MTM1RTIyNTJFODRBNzM2RDMKKzoxMDhCNDAwMDc5MTM3QzUxQ0QzODFFMzRCQzU0MUIwNTlFQjQ3QUYxODgKKzoxMDhCNTAwMEZFMDFDMTg3RjM5OEMwRUJBNkVFNUNERTg1N0MwM0M3RkYKKzoxMDhCNjAwMDkwMUREMUQ2RTc0OTkwQ0YwRkZDMjBGOEZFQTg1OEU3MUEKKzoxMDhCNzAwMDNDRTAxQjY3M0VGMTk3Q0IzQzQwQzRGRjUwRjVFREFCQUEKKzoxMDhCODAwMENGNTJGRTQ4QTNBNzM2RUZGODFDODdBNkE3NUQxRDEyOUIKKzoxMDhCOTAwMDQyNzQ2RTMyQjBBQTQ4RjlFQUFGODVEQzk5NkM1Q0FGREEKKzoxMDhCQTAwMDlDQUM0REJEN0QzMUUwNkZFRTRCQUE5MzkwODdCMTU3RTEKKzoxMDhCQjAwMEQ4QjgxNjQzNTMyQ0Y5QTdCRjU2RURCOEFFRDIzRjU1REYKKzoxMDhCQzAwMDhFQzY3NTZCN0M2N0RBQTgxODFCNzA5RjkwNzUyMEZDQTkKKzoxMDhCRDAwMDZCRjMyQkVERUMxRUREODFGMzVEMDBFN0EzQ0RGM0E0NzkKKzoxMDhCRTAwMDEyMjA3QUY5NUU1NUVDRENERjZEMzI2MzFFNTE5MzUzMkYKKzoxMDhCRjAwMEZEN0M3RjEwRjM1NUUzOTRDMTRBMUY5QzhGRDM4MUYyMTMKKzoxMDhDMDAwMENEQzAwRUQyN0M2Q0M3RUVBM0YxN0MyN0VFQ0JFQzFENjEKKzoxMDhDMTAwMDFBRTc1MzVGQUMxMURCN0RDQUI4MUVEMEY4RjJBNEM4QzYKKzoxMDhDMjAwMDRCOUM1Q0IxOTVGQzYxNkQ5Q0Q4MUNDRTU3NjFFMzc4ODAKKzoxMDhDMzAwMDE2Mjc1RDNBOEVENkRFOTRDM0U3QTVDOUM1QzEwNENFMUEKKzoxMDhDNDAwMEZGQTVDQkZGNDJFRDM0M0Q4QjNGOTg4RkQzRjBBOUUxRDgKKzoxMDhDNTAwMDJENEMyRTI1RkM2OEYyQTVDOTkzNDZENzdGNTRBRUQ4N0IKKzoxMDhDNjAwMDkyOEVFNEI3REUyRkQ2NEQzMkQyMjk2NDE3OTAzRkQxRDEKKzoxMDhDNzAwMERFNTlDQ0ZDMUM1Qzk4REQyNEJGNjY2NERBNzc2NjRGNTUKKzoxMDhDODAwMDg0RTcxQTlFRjRDRjQzNzE5NTNEMDNGMTNGRDI5NjRDOTEKKzoxMDhDOTAwMEZCRTU2Qzc5RjJCRTZFNjFGRUQ5MjlDQzdCQTEzRTdERUQKKzoxMDhDQTAwMDUxRjU5MzNFNjUyMDk1NjFGNjVDRjNEQjZBMTc4RUI0NEYKKzoxMDhDQjAwMDBGNDNGRTdBNDlBMTczNDc5QUZEODY5Rjg3REFGODE0MUQKKzoxMDhDQzAwMEZBQUIyQTU4OTg4QkZFQzRFQTlDMkMxQUJGM0FDOTc1OTUKKzoxMDhDRDAwMDE2REY5Rjc3MjYzODIyQ0UxMThBNUY4NjlFMEZBOEYxNzUKKzoxMDhDRTAwMDk4MUZEQzk0MjlDNTBGRjM5QUY3OTE5Q0NGNjdDMTk1MjMKKzoxMDhDRjAwMDE4RUY0RTdCRTBGRDhBODE0OEZGMTc0RDc0N0U2MTY2NTgKKzoxMDhEMDAwMDVEMjZEOUJGQjMxQjY2RjRDN0QwNzZEQThBMUM4MkU3MkEKKzoxMDhEMTAwMDNDN0YyNzg3MUZFMDdFRERCNDE1ODUyRjYwN0VGRTU0RTMKKzoxMDhEMjAwMDk0NkIwNEYyNzlDQjFBQzU4RUYxRDc5MEU3MEI5N0RDRTAKKzoxMDhEMzAwMDBBRjU0MzYyQkI3NkMwRjk5RUQ4NzBBQTYyMzBDNjExQUMKKzoxMDhENDAwMDhCNTU5MjFCRDc4NkM3Mjc2MUJEQUI0MTc1RTIxMjY3NzEKKzoxMDhENTAwMDMyRkI5MjVCOTFDRjhERjEyNDc3REFCOUM2NjUyNkNFQ0UKKzoxMDhENjAwMDZGNzdFNjcwQkQ3MTVCMEVENzFCQjcwOUZFMkQ1REI2NDAKKzoxMDhENzAwMDJDMTdDRjE1QjQzQzBCNzYwQUY3RDdDRDhFRkEwMEM2NjgKKzoxMDhEODAwMDgxM0IzQjNCRDdDMzM4RDUxMEI2MjYwMzNGOUQ1MUI4MzYKKzoxMDhEOTAwMDNGNUU2NTY2NTZFNEFGNDNBNkUwQkQzOEZGNDNGN0M2QzUKKzoxMDhEQTAwMEY2QURDNTA5QTgxNzA3QTA3Q0I4NDREQzA1NzExNDhEODEKKzoxMDhEQjAwMEFCRTE0QjFCN0ZBNjE4NTdFQjQ3N0JFRjIwRkE1NTY4QkEKKzoxMDhEQzAwMDQ3QzQ3Q0NGMkU3RjcxMTJGQTBCNjczN0U2MjRCMDMwOTAKKzoxMDhERDAwMEJDOUZDNTc1MDFCRUU3ODA3RTdDMkQ0MjNDQjgzMDQ3MDQKKzoxMDhERTAwMENCNEZGOEE5QUMxMjc5QzQ0M0E2QkEzNERDQ0YwNUJGODcKKzoxMDhERjAwMEZFNzRCODdGRkVENUIzNTE1NkU0NEJGMEVCRTVFNzI2QTEKKzoxMDhFMDAwMDZFNTdDMDlGOTc5RTgzRkM0ODcwNUJCQ0E3NEU4REY3NDIKKzoxMDhFMTAwMDQ0RDA0NzVBQTlGN0Y3OTdFN0Q4MjJGQUZCOUFGQzVEQTYKKzoxMDhFMjAwMEEyRDc4NDdGREY5Njc3RTk3NjZERTdCQTlBQkQ0MDE4QkUKKzoxMDhFMzAwMDEwODg2Mjc0Q0VFMEZEQjI5ODlGNUVDN0YzOTdCM0VBRTQKKzoxMDhFNDAwMDJDNzYwQkUwRjczNENBMTdFRTBCNkU1NkI5QkY2OEU1MDcKKzoxMDhFNTAwMEYyNzY3QTY3NUYzRkU2MTU2NjFENjdDRTAwQzBCMzhFNzcKKzoxMDhFNjAwMEFBNEUwN0I0REZCN0U2N0UzQURGNzFFNzNBODU3NTU2NUEKKzoxMDhFNzAwMEMyRTJBRTI3RDY0QzQyNzEzQkU3RjRBQzRDODFGNkU3MzgKKzoxMDhFODAwMDM2RjJGMzI4NTA2REQzQzU1QjA3NTIxQ0VEQzc1QkZGNkMKKzoxMDhFOTAwMEFDMzg0QkNCM0ZFOUYxQkYyOTA3RTJBRDE4RjhDNUM5QTMKKzoxMDhFQTAwMDlDMzJGRTc5RENCRTFCRDhBOEE4REZBNUY4NkZGNjdBNDUKKzoxMDhFQjAwMDI4QUVGQUFCQjc4QUNBNDFGNUNGOTZBNkMyM0FGRUE2NEIKKzoxMDhFQzAwMDlDN0M2NDA4Q0E1MTZDM0NFNTRGOUFCRDM1QjQzOUY4QjYKKzoxMDhFRDAwMEQ3ODZGRTE3QzcwMTlFQjZEQkUyRURBODNGRkVFQTVEMkUKKzoxMDhFRTAwMDRDQ0ZEQkY4NDZGMEU5RDA0RDhENkEyQUEzRjYzQjg2REQKKzoxMDhFRjAwMDQwRkI1REI2NzhEQ0VFODhCMDBGQzdFOUFDM0Y3RjczMEUKKzoxMDhGMDAwMEY3QzI4MTlERjFCOUI2REVBRjdGQzVFOURENjZDNzM3MkYKKzoxMDhGMTAwMENFODg0MzdGQjVGMUY3ODkzQjA2MjE5RDYzRTJFREM4MUEKKzoxMDhGMjAwMDBBQjNDNTM5OUMyRkQ3NzI3RDc0QzYxQUZGMDJFNjUxNjkKKzoxMDhGMzAwMENGQUM5QkQ4MDlFM0MzM0I0RDJENjYyN0Y0RUJEQzU5M0UKKzoxMDhGNDAwMDE5ODdGOTgyMkY4QzRENzE3NjJDQTE3RDAwRTc2MUY0OTEKKzoxMDhGNTAwMEFCQTgwNzA3OTczM0RBMUYxQzFDMzAzMjQ3MjY2REREOUMKKzoxMDhGNjAwMDEzRkYwQzZBMzZGQTMxNkVGRTA2RjcwREQxOEU1RjhDNTgKKzoxMDhGNzAwMEU2RkJGNzYyM0ZGMENFNkQzQ0NGRDY5NjU3MTFGOTg1RjAKKzoxMDhGODAwMDIxNjJCRDFENzIxM0I0N0QyMDdBNUU1QUM0OUY3RkI1RTUKKzoxMDhGOTAwMEVFRjU3MUQ4REZEOTBEMjYzQkNFRjdBRjFCNENENEZGRDEKKzoxMDhGQTAwMDVDODhFRjBEQzA4RjY3MzZGMkYzMDI3Mzc3NDA5QzlDQUMKKzoxMDhGQjAwMDg5N0E0NDIxRkU5RDBCRkM2QjQ1RkU1QjY4NzI5OUUzNDgKKzoxMDhGQzAwMDJGRTVDQkQyOEQzQ0JFOUU1QkFGNTBCQ0FERjFFNzVDRDQKKzoxMDhGRDAwMDk3N0YwNEUxNURGMEE5MTVGRUZEMENBNkEzMDNBQjVGMkUKKzoxMDhGRTAwMDg5Rjg2ODhGNUZGRkQxN0M4MDM1Mzc3MjNFNDBDRjBGQTQKKzoxMDhGRjAwMDFBREUzNEJFMDhGMTI5MjNGRUQ0RTg5RjUwREY3NzU4RUIKKzoxMDkwMDAwMDJBQkRFMDIzN0NGQTRBNTgxRUZBMEJDQkNDMkMwRkNGOUEKKzoxMDkwMTAwMDQzRjkwQ0QxNEU5NEZCMUZBMkUyN0E2MzFFNkFCMTk1MEMKKzoxMDkwMjAwMDk3QkY4QzhFNUI4RkU1MEY1MTE5N0U5Q0Y3MEYwNkZCNjcKKzoxMDkwMzAwMDdFOENCM0JDQjk5OUM0QjdCRjU0MUQyNjA1N0U5RDk4REMKKzoxMDkwNDAwMEQ0NTQ0NjY2QTBENEUwMzJBMDFENUM2NjIxM0RBMkQ3NzAKKzoxMDkwNTAwMDQzMzlCOTIyMEY5OENCQTgxQzk2Q0JDRjg5OUI1ODBEQ0EKKzoxMDkwNjAwMEY5MTc1QTA5RkU0MDNBRkEyRjk1MzEwOTE3RjAyODc5NzUKKzoxMDkwNzAwMEJGMTczQTRGQzRGRERFQ0EyMTA5Rjc2NjgzRTczOUY4MDYKKzoxMDkwODAwMDg1RjQ4OTQ2RTBGM0NBRkUwOTlCQjMwMDJFQ0U0REUzN0EKKzoxMDkwOTAwMDcwOUY4NDQyMTNDMEI1QjUxOTEzQ0JBMEZEMkRCOTJFMTYKKzoxMDkwQTAwMDY3NkVEODM4NUFCRkYwQkMzRjNFMUY5OUUyMTk5MDhCQ0IKKzoxMDkwQjAwMEY2REY2QzVCODU3NkUwNkY0QUNCMDI4MzFBNkE3RjQ0RTkKKzoxMDkwQzAwMDYxOUY2RTU3NDI3MDkzODk2NUEwQkYzREFDNkRGRTkxNjQKKzoxMDkwRDAwMENCNTVCOUFFMUI3MjIzM0M5RkNFRDgwQUNDNEI0Q0Y3NzQKKzoxMDkwRTAwMEJENzk0QzIxN0RDNkRDNTZBMEU3NzhDMTdGRDNBREI2RjMKKzoxMDkwRjAwMDAwRTlCOTU1QTZFNjM2RkVDODQyM0QxNTZGNDRCQThGNjEKKzoxMDkxMDAwMDEzNjQxRjZGMEMzNEUyRkIzREQ4NzJGQjk3NTY3MjE1NDcKKzoxMDkxMTAwMEQ3RkQ5Q0Q4QkVGRTA3NDE2NTVGNkFGREMxRkFGRTY2QjkKKzoxMDkxMjAwMDgyRjUwMjVEMTUxN0QwMUE0NDRDMDEyNDRGMDU3REE3MjYKKzoxMDkxMzAwMEVDNzhGMzQ3RUM3Nzk5OEYzNTQ1MTExREE2REE5MTBGM0UKKzoxMDkxNDAwMDE1RTYzMUZDMENFNUZDMThFMDhCM0U1ODAyM0Y0MEJCQjUKKzoxMDkxNTAwMDQ1OUJCRkREODc2MjMxNDdGM0IzM0M0NUU0MkZERTYzQjcKKzoxMDkxNjAwMEU3RUI2MTlFQzFDNEFGRjcwQTdFRkRDQUNCNkEzMDU1RkEKKzoxMDkxNzAwMDM0M0UxODhDQzNBM0IwQ0RFMzAyQjlBODFGQ0E1NTRGMjMKKzoxMDkxODAwMDE1RDJFMUFCNzVDQkQyMTYwMUZGN0NGQjlBQzUzOTE2MUYKKzoxMDkxOTAwMERBOUZGMUJGMUU4Nzc2NzU5RUYwRjdEOTQ1MzU3MDAzQ0IKKzoxMDkxQTAwMEQ0MUZDQ0VDQjE3RTc1MTg3RjJEQ0NFNTc2QkYzOTMzNUEKKzoxMDkxQjAwMDkwNzExRkVBOTk0QzFFQUZCMjhCN0IzM0VFODNGNkU1QkMKKzoxMDkxQzAwMDU5QTMwQTU3MTMxNjVDNzdFNzg2RUQ0RjhFMzM0NjNFNTgKKzoxMDkxRDAwMEJGMzEyOThERkJFQjZDMDNCN0M3MTYyM0YzQzUyNjUwQUYKKzoxMDkxRTAwMEM5RTIwMDRGQTM2MDJFNDU3ODJFMTU2MDk1RjZGM0ZENzkKKzoxMDkxRjAwMEQ0MUVEQkM1QTE1RkUzOTg5MUNDRjc3Qjk4MUJGNTk2NTUKKzoxMDkyMDAwMDQ2NUY4RDZFOTdEMDEzQTY4QzdFQkRDMUNBNENCOERFNkEKKzoxMDkyMTAwMDFFNkM5RDFERUQ5MzQ2RDdBRjg0M0M3RTY1RTU3MjM4OEMKKzoxMDkyMjAwMDVDQjU5MTlFNUFCNDk5RTdGNTE2Mjk1Q0RGMkVEQUE5NTAKKzoxMDkyMzAwMEYwRkNFNjI1RjY3NkYzNEFENEM5NTVFQjY2OTAzRUQzQUEKKzoxMDkyNDAwMEY0OTgwM0ZFMjE3RkNEQjVCQkUzMDM4RTdGQzBFRUFFNjUKKzoxMDkyNTAwMDJCQkQyQTdEQjY1RUQzNjc3RDU5NUZFNEJGMkJGOTRCRUEKKzoxMDkyNjAwMDlBMUUwM0YyQkM5OERCRjExQUU4ODUyODgzNzVDRjE2QTUKKzoxMDkyNzAwMDczMUNBRTRFNzUxODExMkYxREFENEVENEU3OEI5RUNFQ0MKKzoxMDkyODAwMDI2M0JDOTJFQUU2NUUxRUREOEJBNDRFMkRGOTU5OTJBQjYKKzoxMDkyOTAwMEQxQjVBMjIxOTUzOUUwRDE5QzA2ODVDRUM5OEU2RDQ4MDUKKzoxMDkyQTAwMDI0MzhBRTM1ODVFMDhBM0Y3NDJFQzE3NUI3RUQ4M0ZFNTQKKzoxMDkyQjAwMEExM0JDMTY3NUY3OEJCQzBDM0YzMzQ1NkVDREZDREI0Q0MKKzoxMDkyQzAwMDc5RTREN0EzRkQzOTY3ODM3OTAwOUVEREI2NTU5NDc3OUQKKzoxMDkyRDAwMDc0QjNCNjc4NDhGOTU5NDExOEI4MDZFNUNFNjVGMjcxMEQKKzoxMDkyRTAwMEZBNTg2QjQ5RkVDNUJBMTYwOUI5NUE3NDg4REJFQjQ1QzIKKzoxMDkyRjAwMEMzRjg3RUExRDFENzIzMUVFOTZGM0FBODMyM0ZDMDM3MDkKKzoxMDkzMDAwMDFENTIwQjAzRDA3NDk5RDBFNzk2NjQwMzczODREMTJENUEKKzoxMDkzMTAwMENBMTFDRDFDNjFGNDYxM0U1NzEwRTNBREM5ODI1RkVFMDYKKzoxMDkzMjAwMDhGRTI3QTNGMjYyRjQxNkEzN0Q5MzY4QkY4Mjc5ODMxNUEKKzoxMDkzMzAwMEUyMjBBRTM3RDZEOTQ1RUE5Nzc5Qjg3RkFDRjFENTI0OEIKKzoxMDkzNDAwMDkxMzcxRkM3NUE5NkEzOURCQzY5MzJENDg3RjU2NzJBMDcKKzoxMDkzNTAwMEZFOEVFQzg2QTk1OEY2QUIwMTJGQTcyRkM3NEZDRDFBNkEKKzoxMDkzNjAwMDNGRjU2MDNEODg5Rjc0RjgwMUY5MjA3QjdGRUUyOEJGQjAKKzoxMDkzNzAwMDdGMDI1RUM5NkY4QjAxOUU3NEQwQzRGQzUwQkY0MkUwNzcKKzoxMDkzODAwMDA1RkQ1NjhDN0ZDRUI5NjI0OTZFMzRCRTBCQTJERDAzNUIKKzoxMDkzOTAwMDNEMTc1RjI0RTNBRDgzNEJDNjVCNjJCOThDOUY4RTZFMzUKKzoxMDkzQTAwMDE5MUY5RDI3Njc0OUY1Mjk5RTlFNTI3RDZBNTUzRjA5RTEKKzoxMDkzQjAwMDRFQUYxOTJDQjVFRkJBQjg0NDgyMzM3REEzQTVGNkQ5QzgKKzoxMDkzQzAwMEFCMjY0ODcwNEVEREFENTJGQkVFNkJBNzRCRjUzREZDNzYKKzoxMDkzRDAwMDczQTVGQUVCMzYyRTkyRTA1RUY1QkY5NkRBRjc2OTU4ODAKKzoxMDkzRTAwMDJBRDVGNzBEQUM5NkVBRkIxRjdDNEM4MjBCODM0RjQ5QzQKKzoxMDkzRjAwMEVEMDcxRTVCMkZENTBGNkFGQUEzNTQzRkU0Q0M2QjEyMjYKKzoxMDk0MDAwMDNDQjRFNTBEQTlGRDBEQUQ3QjI0NzgxODdCNUI2QTVGNEMKKzoxMDk0MTAwMDZBN0Q1RjgyODdEQjNGOTFEQThGNEMzRTI1RDU4RjcyNjQKKzoxMDk0MjAwMDdDMjNENThGQzlGQjVFODI1NzA4M0ZBN0MyRjk1RkQyNjQKKzoxMDk0MzAwMDdCNDE4OEQ4OTA4RjczRDIzQzQzQkI1M0RFRTc4QzExQkQKKzoxMDk0NDAwMEU1RUZEODZEMEE0QkM0RjhFN0UwNDQzQkM5RkQzNUM2RUIKKzoxMDk0NTAwMDgxQzNCQjhCMzg0NEYwRjEwNTY2QkIxRENGQjM1RjQ5QjgKKzoxMDk0NjAwMDJGNjZBMzNGNTE4ODdDM0U5NkVFNTU5REFCRTdGOTBFRTMKKzoxMDk0NzAwMEJENUREN0ZDQjk3ODMwQ0JDNkIwNzEzQkI4QUMxMEQwNkQKKzoxMDk0ODAwMDg3RTBDNDcyQkIwNDc3NzQyNzRCRUQzQjRGNzY0OEY1RjkKKzoxMDk0OTAwMDI5OUUzQ0E5M0VCNUNBMjlDMUU5MzU0NTUyRkJBRThCOTAKKzoxMDk0QTAwMDVEMTI5Q0U5MkI5N0RBNjdBRjcyNEI3MDRFREQ2NEE5QjEKKzoxMDk0QjAwMDdERjdCNTFFQTlCRTg3QkY0QUFBQkY2RTYzOEQwNEY3QUMKKzoxMDk0QzAwMEFBNUYyQ0I1RUZEM0UwOTNFQUZCMDY1NjQ5RjVGRDBGRjIKKzoxMDk0RDAwMEQ2NDk3MDYxNzBBREQ0N0VFMDMxQkY1NDNGQTg2OUEzMTYKKzoxMDk0RTAwMDU0M0ZFNDRDQkQwNDBGNkQ2OTkwREFERkQwMUE5MEUwNzAKKzoxMDk0RjAwMDYxRUM5MEQ0QkVENDdBNDQ4Mjg3REIzRjkyREE4RjRDMDEKKzoxMDk1MDAwMDNFMjlENThGNzI5Qzk1RUFFNzdERTMwQ0QwQkVENDc2RDgKKzoxMDk1MTAwMDdFREY1NUYzRTdDNkU0N0QyN0I1MzMyNTgxQkY4RkY5OUMKKzoxMDk1MjAwMDZGMTZFREM0RjNGRUVERjlGOTlBMUY1OEUxRkM1MTFBREMKKzoxMDk1MzAwMEY3MDcwM0Y3Q0Y1RkVBOUUyNUZDN0ZFRTI3MkVGM0I5RUUKKzoxMDk1NDAwMEU5N0M1RTAyMUU3ODA1Mzk4OUY3MjlDNDdGMTg2MjREQ0YKKzoxMDk1NTAwMEE1N0M2NDEyRUQ1QjkwQzk3NEUwNzkzN0YwODMwMDQ4MTQKKzoxMDk1NjAwMDMwNjQ2NjYyMUMxMjEzRjI2M0QzN0VFRTdGRjU3RUVDRUMKKzoxMDk1NzAwMDFCMTBFM0EwNUY3REI2QkJFN0NGMjg5NzczRUI1RjFEQTEKKzoxMDk1ODAwMDgxNzFDRTFDRTY1Qjg5RjMwMEJCMUI4RkZCNThFRjQ2NTUKKzoxMDk1OTAwMEM5RjkyOEFEMUM2NTA1M0M4NjhENzcyOEFBMkVBRERGNUMKKzoxMDk1QTAwMDY1RTQ3Nzk0QjU5OURBQjdGNTJCRjI1NTBBQUM2RjUxQUIKKzoxMDk1QjAwMDU4RkY4RjQwRkM2NTA0MzlBREYzODI5QzQxQTBGRDk4QjMKKzoxMDk1QzAwMEQ3NEVGMDEzREU2NDgyOUZGNDNBQTg1Q0VCQ0RBM0YyOTEKKzoxMDk1RDAwMDI5QUY5M0VBRDc3OThCMDg3RUM2RUIyMkQ4RUYyREE3NjcKKzoxMDk1RTAwMDcyQkRENzREQ0YzNzc4MjcxM0ZDODJENzQzRTU0NjZGM0UKKzoxMDk1RjAwMDE1OTU3RkY0RDY1MEZENEJERUM1MDRCRkUyRjU1MTU5RjkKKzoxMDk2MDAwMEVGNUQ0NUNGNUZGM0Q2MTFCQ0M5QkI5NkUwMkQ1RTNGNDEKKzoxMDk2MTAwMDk1MERERThENTRCRUUxQURBN0ZBMURERTA2ODI3Nzc5ODkKKzoxMDk2MjAwMDAzMDQwN0JDMDcwOURFRTMwRDEyQkNDRjdCOENFMDAzMEIKKzoxMDk2MzAwMERFMjYyQTBGN0FDRjUwRjk5NkI3ODVFQURGRjFCNjEyMDcKKzoxMDk2NDAwMERDMkNGNjEzQkVFQUFFNDhGNzE4MzU5OEIxMzJFMjA3QzMKKzoxMDk2NTAwMENERkYxRDg3NzEwRjMyNDc5MUU5QUY1MkRDQTM4QjNGREQKKzoxMDk2NjAwMEY0RjRGODVBOEM2MzJBMDFGNzE3RkQ5RjJFQjlFQjk3OTMKKzoxMDk2NzAwMDg1QzUwNURGOEJGMUVFOEY2NkJFMjg5MDg3NUEwM0NGMzQKKzoxMDk2ODAwMDBCRDQyNjMwQkExRkM2ODQ3RjNFNUJGMDI1NEJFMjdFQUEKKzoxMDk2OTAwMEY5MkMzMUFGRDk0MjBFMEE5MTNGRjM4ODNGREZCOTk2REEKKzoxMDk2QTAwMDM4NEI4QkI3RUQxOTFFMzUwRkY5MzNEREUwQTNCQzgzQzIKKzoxMDk2QjAwMDhEREZDM0VGOUZFMTMxRTc4MTFDOURBQkI5RjMwMDhERDYKKzoxMDk2QzAwMDY3NzdFNkUyMjAxNTk2NDBDNzlCMzE5Rjc0NDhBNTNDMUEKKzoxMDk2RDAwMDZDN0JFMzU1OEI3QjEyRURENkVGM0E5Qjg2RjZBOEZDQUMKKzoxMDk2RTAwMEVGMkFFNUVCREYzNUM1NEVDNjdDNEI3MjFFQzc0QjcyQzkKKzoxMDk2RjAwMDlFNDEyQTc3NjRCODNCRTMzQ0JGQ0FBOTc5RTE2RTI1NTUKKzoxMDk3MDAwMDc0RkY3RjNDODZFNjIwRTc5NUNDNjFBMjczQjhDQ0I1QTgKKzoxMDk3MTAwMDFGQUZERURDMDQwRTFGQzIzNzMzMUY5NTI1RTkxRTA3N0QKKzoxMDk3MjAwMEJFN0YwQjA0MTgwODdCMDY1QjMyMjJBRDQ3M0Y5RjlFMkQKKzoxMDk3MzAwMDc5REM3RkVGOTk2NzkwQ0E4RjMyREMzRDEwM0ZBNzczQzkKKzoxMDk3NDAwMDVDRDI3Q0UyQkEzQUM0N0Q5Qzk2Njc3MDVFRkZCMUYzNEUKKzoxMDk3NTAwMEJCMkY5NUVDMTBCRUI1RkNDNkNBNjFFMjlDRDY0MjQ1NTMKKzoxMDk3NjAwMERCMDdFNzdFQTI5NTY5N0UyMkQ1NEZCRDk3RTc3QjM0NjQKKzoxMDk3NzAwMDdCNzlCQ0FERTRGQUYwNUM4RDg5RjRFNjU0MjVEQTg5OTYKKzoxMDk3ODAwMEZFRjZCOTlBN0JGQkUwN0VFMTZEMTBFRkUxRkVBOUE2NDMKKzoxMDk3OTAwMDQ3QTcwMjZDMDA3ODJBRTNFNzJFQTYxRThGMjUzRUQzNEEKKzoxMDk3QTAwMEVCNTc3ODhGRTE3RURGNTRGMDNGMzE3RTU0QkFGMjdDODQKKzoxMDk3QjAwMENBQkJFRUVGNENEODJGNEI2QUExN0JBQkMwMzdBMzcxNkQKKzoxMDk3QzAwMEZENzMwN0E5RjRGRDg2NzcwREZFNUM0NTI1N0UzMTJCRTAKKzoxMDk3RDAwMDMwRkZEOTQ5QzAyRjExRkMwNThEMkYxNjg4N0IzOURBNEYKKzoxMDk3RTAwMDczRTBCNzFCOTEzRTdGREQzNjMwOEZGNjY5NzYwRDcyRTAKKzoxMDk3RjAwMDIwM0U5NzE5RjhCRDNBREY1QjJBM0Y5NzgxQTk3QzNDNTAKKzoxMDk4MDAwMDM3MTI5RkZGMkNERDJGNDBFNzAyRTkzNzI4OTZFRTE3MkQKKzoxMDk4MTAwMDM0QUE2Q0YxQUIxMUY0RTlCRDgyOEVFRjI2OUJDQUZEMzAKKzoxMDk4MjAwMEQ0QUZCQ0FGQjg0MEQwNzU4MTY4NTdCMUU3NTAzQURFQ0QKKzoxMDk4MzAwMDFCNUM3MEQwNDQ3MTExMkI2OENBNzc0NzM4NTc1NUJERUYKKzoxMDk4NDAwMEY4QzE1Rjc0MEJFM0YzRUE4NjkzRkMzQzE2NkJDQTBGMTYKKzoxMDk4NTAwMDNGODdGNUIwRTA2QjhEQkY1NDczQUNFNzU5NUJGOEZDMDQKKzoxMDk4NjAwMEY4RjhDMEU3RjcwODNFRkYxMkZERkU3MTE2NDdGQ0NEODEKKzoxMDk4NzAwMEYwNkExM0EwMjYwMEE1RTdERkVDNzQ5RTRGM0JENzM3QjQKKzoxMDk4ODAwMDkzQjlBOTlDMERFNDQ2QkU3NkZCRDZEMEJERkFCOUFDMUYKKzoxMDk4OTAwMDlFOUUyRjI4OUE5MTgxNzAzNTZCMjk0Qjg2RkU2RTVBQjkKKzoxMDk4QTAwMDU1QkIzRjE5NjYzN0IxNkVDRDcwQ0M3MzRGRjA0RkRCQUYKKzoxMDk4QjAwMDhGNjVFNTA2RTU0QjlGODNFNDY0MDU4RURGQTRENEFDOTkKKzoxMDk4QzAwMEU4MDJFM0RERkFEMkIwMTU5ODQ3MUVBNzcyM0FCMEI3QTYKKzoxMDk4RDAwMDM5MUQ4MDlGNUM2QUMyQTVFQjAzQjk3ODQ4QzgwNUNERTUKKzoxMDk4RTAwMDVGOTM4QkE5NEI5OTRCNDkwQUREMDM2OTkzOTNBMkJCMDQKKzoxMDk4RjAwMDNFNEJDNTNEMTY2MzBCOUQ0M0E5REU2NTQ5QzBGQ0M5QkYKKzoxMDk5MDAwMDVDQzZFRDc2MjgwRkM0RURCNTI2MDc1RjlCMzhEREJGM0EKKzoxMDk5MTAwMDdFNTlBMTdCMzY1RjJCOENCRUU3RDA5RURGQTBGOTlGREUKKzoxMDk5MjAwMDIwN0Y1Q0VFM0U4REUxRkNBRjhBQkM1RTg2MjdCOTVGOEUKKzoxMDk5MzAwMDc2QzgzRTdGNkRGMDBGODhDQjI2RkJCRDExRDc2MzJBMUEKKzoxMDk5NDAwMEYxM0NENDE3Q0ZFQkJEQTIzODk3QzE1Q0JFRUVFMENGOUYKKzoxMDk5NTAwMEUwRTcwNERBRUMwMEZCMzkyNjk0Mjc3Q0M0QzRGMzc2RjQKKzoxMDk5NjAwMDdBN0Y1NzVCNDc3QkYzQjQ5ODk5MEZGN0IzOTRBMjAzQzAKKzoxMDk5NzAwMDNGQTIxRjcyRTk3QzNEQzkwMzAwMkZDQjkwNDQ5ODk3MEEKKzoxMDk5ODAwMDJDNzEzQjIyQ0Q2M0I5MThGRkUwNEYzQzFFRjdBNTMzODUKKzoxMDk5OTAwMDNBMTdBNEM3QTc2MkU3RTNCNDk3NUZCNTQ0RjNGOTY4NDEKKzoxMDk5QTAwMDc2NEE5QkU3QTVGM0UyRjQ3QTNGMkY5M0U4QUFDRDBGMUUKKzoxMDk5QjAwMDM0NDU5RTFEQzYzNzFBQTM5RDI4QUY5NTQ2Q0Y3Qjg4OTgKKzoxMDk5QzAwMDRGMkRGRkE2QzVDNTA3MzNCRjIyN0JDMDJFMkU0QkUzMEMKKzoxMDk5RDAwMEU3OEYwM0VERDlFMUU2QjY3ODNDMkI2NDI3QjUzQzE2NUEKKzoxMDk5RTAwMDJCOEU5QzhGNzQ1QkVEQTRCRjI2MzAyN0Q5OEIxRUVDODkKKzoxMDk5RjAwMEI4ODYyRkNBNjNBOUI4NDM0ODc5NUUwRkFEQzM4MkZBMEYKKzoxMDlBMDAwMDFBQ0EyOENDQTM5MEJERjQ5MzdDQzZFMEJDNjg1RDQxMjMKKzoxMDlBMTAwMENDODhCMDM1MzE3MTg0ODdDMUM3MThFOUU5QzFCODA2NkYKKzoxMDlBMjAwMDU4RUZDRTkzQ0M4RkU3QTkxQTJGNEMyQThEODVGQTlEM0IKKzoxMDlBMzAwMERGMUEyOTBFRkE2RENDMkJBOUY4MUQ4OTlENjczRjRDQzIKKzoxMDlBNDAwMEM1N0M0RkVEODUyRDA0MEY2ODFFNzE5NkU3Q0Y4RTRGQjQKKzoxMDlBNTAwMEMxRkVCNjlGMzczQjJDRTQwNzJDMjQzQzY4NzlDQUVENDUKKzoxMDlBNjAwMDhDMzk3MTFGQjRFODIzMUJERDMzMkUzQzVBMUY0Mzc4MTkKKzoxMDlBNzAwMDEzNzlCNTYyQjFFRUUyRjMzQzFGQjIwQjgxNDExMDA3REUKKzoxMDlBODAwMEI0OTg1OTIwQ0M1RjM2RDk2NUI4ODg4NUMxOTkzODI0RjcKKzoxMDlBOTAwMEMwNjE3OThFNkI4RDFGNjM3Qjg4M0NDODQwMzYzMDNDM0IKKzoxMDlBQTAwMEFGQzY1QTEzMjJERUE3RDJFRjIzMTYyODdDREU2N0YyNTgKKzoxMDlBQjAwMERDOUQ3QTUwRkU2QzgyQ0FGMUZENzcxNUYxNzU4M0NEN0QKKzoxMDlBQzAwMDlGODJGRTZERTM5QzE3NTJEMERGRkQ2RENDREYwOThGQzYKKzoxMDlBRDAwMDRGRkQ2NDRFNDFCQ0Q2MERGQjBGQjIyMzc1RjA2RTEwRTYKKzoxMDlBRTAwMEUzNUZBMzNGOEE1MUZFNkIzRUU1RDc2RTEwNzZGNkE5ODEKKzoxMDlBRjAwMDhCOUZCMzY0QzA2NzVEMTEyM0ZCQzk4NDFERDZFQUVCNUQKKzoxMDlCMDAwMDJFOUVBQjQyN0E1RTI4QjYzQTUwMkZFNDhBN0M2OEVERUUKKzoxMDlCMTAwMEY1RkY5OURDMTQ4NjhGOURFMDU3MDc4MEMwREJDMUFGNEQKKzoxMDlCMjAwMDBFODBFRkJGMERGQzZBODRGMURFMjk5NjlCQzFBRkM2QTMKKzoxMDlCMzAwMEQyMEY3RTM1OTZDRjgwNUY4REVERDBBRkM2RjIyOUYwODMKKzoxMDlCNDAwMEFCQjE1QzBCN0UzNTk2NEY4MjVGOERFRDlFMDBCRjFBRTgKKzoxMDlCNTAwMENCQzdDMEFGQzZFNzc1MTdBNzk3RDI3QzhFMzFCQTVGNjcKKzoxMDlCNjAwMEJGMzQyNkNFODBGQTE1RTYxRjhENzlBMUMzQUU3RUQxMTMKKzoxMDlCNzAwMDg4OEZFQkNGMUIyNEZBMTYzNzQ3NEJGMEUwRDMwOTIxMkYKKzoxMDlCODAwMEZBMjJGRDhGNzc5MUVBMDcxQ0NEOTJFQTMzN0QzRDI1QkQKKzoxMDlCOTAwMEI4RUJFMjdFMTI4Q0Y5QTFGMEY3NTNBQjRBMjQzOEM1M0EKKzoxMDlCQTAwMDMzNUE2QURGNzlGMjA0MDlFRUU4QkU1NTZBOUY1ODNFREYKKzoxMDlCQjAwMDVEQUE3RjM0NEU0NzQ3RkYzQzgzNEM0N0ZFN0Q4NTBCQjMKKzoxMDlCQzAwMEM1MzYzQTVGRDkxRTlGM0UyNkU4QTJDMThGRkY0QTlENDcKKzoxMDlCRDAwMDFDMjk2RjdCNTcwRjgzMTQwRjc0MTE3M0JCQkI4NzgzRDIKKzoxMDlCRTAwMDlFRUYzQjMxRjBDNURDMDJBNDg3ODE2RjlCQkE1QTYyQkQKKzoxMDlCRjAwMEJBMDE1RDcyMUYzNzMwM0M1NzQ4MjcwRTYwN0U3NkYxMDAKKzoxMDlDMDAwMERFRTMyNUU3NjI5MDJGRjc1Njk4QTM5MDNFQkI1RDI1RDMKKzoxMDlDMTAwMEQxMDgyRkFEMzBBNzg0RjM1MTVEQTZBNzFGREQ1M0YwMDcKKzoxMDlDMjAwMEYwRjU2OUVGM0Y1QTMyRTFCMkZCRTg4RjIxRkY3NUJGRDMKKzoxMDlDMzAwMDRDRkRFOEI5NTkyODBGOTdFMDkxNTVEMTdFNkQwODhGRkEKKzoxMDlDNDAwMDEzRThGQjRFQ0M1MzI1Q0Q1RjJGMTcwQzM3RTk1MzcwMkIKKzoxMDlDNTAwMDVDQUI4QzRGNTdENjAzODg4N0E3OUUzMEQyMzlBQ0I2MDEKKzoxMDlDNjAwMEZFQzRGQjVBN0ZDM0Q1OEIzMTRERjk5N0NFN0ZCNzhCOUUKKzoxMDlDNzAwMEI3MDdGRjM3MEFGMTAyNjM0OUYzNEI3MDNBODYyMTdFM0EKKzoxMDlDODAwMDdFMjdFNEVENUY4NUJDRkQ1NkQwMTVFMzU4ODQ5OTlEOTEKKzoxMDlDOTAwMEJGQTdEMUFEQUVFQUIxNTFCOTI4Mzc0NTdDNUVFQjZGQjUKKzoxMDlDQTAwMDdDNEM0MTc1OTNDODlDQjVGNjMwQkMzRTIxRTZGMThDRTYKKzoxMDlDQjAwMDU4RDczQUVDMTdFMDhFMzdCQTE0QzQ1RkM2NjJCNzgyNDEKKzoxMDlDQzAwMEYyRDY3NTQ5MTNDMTRGMDlGOTRFQUI2OUExRTdFOUY3MUYKKzoxMDlDRDAwMDA0QThFQzUyMTVBNEZBRTFFQTRCQjQ4RTM2M0MzODY1ODAKKzoxMDlDRTAwMDNDRUFFOUU0MTdFQkQxRkEwREJERkZEQTIxRTRCNzBCNEEKKzoxMDlDRjAwMDJFM0VGRjM4OUZDRDg1RjYyMkNFNjc3N0YyRDIyMTRBREQKKzoxMDlEMDAwMEE3MTNGNTdFOUNDRjI1RTA5QTdDODRCNzg5NzVDNUY5QTkKKzoxMDlEMTAwMDdDMDRGQkM1QkFFQUFBOTIwRUJERTAwODhEQzcxQ0Q1MkIKKzoxMDlEMjAwMDg2NzA3QkQzMUUzRjZEMTVGOERGMkNGMEE0N0Y2RjlCRjAKKzoxMDlEMzAwMEE5QTZCRjNEODI1QzY5QTU2NjRGOEI4RTFCNzQ3QTI3RUUKKzoxMDlENDAwMDVBOTJGQjQzRjgwQkI3MDM3RkU5ODFGMkU4NzNBQjYyRTkKKzoxMDlENTAwMEZGOEFGMDM4QjEyRDVFOUE0QUZDQjQyNkU2RjZCNzMxOTgKKzoxMDlENjAwMERFQkVGMUE4Q0FCOEJEMURCNzFGRjVFNUZCQTMyQzY0ODQKKzoxMDlENzAwMDRGMUI0NzhENEMwRkU3QkIwNkIxOEVBRDAyRUY4MzdDQzYKKzoxMDlEODAwMEFFMTNGNzQwRkIzMTZFMEJFNUUzMDczMjU3RkFCREQwNTcKKzoxMDlEOTAwMERGRThCMUFBMzMwMEZEMUQ2REIzMjdFRTE4N0VERTgxMkEKKzoxMDlEQTAwMERCOTMwOTYyMEQ3QkM2NEU3QzEwQzc3RkZGMjhFODA1NTgKKzoxMDlEQjAwMDQ3Njg5RTVBRkRFNkYyODk2MzdBMjExRDgzOUM4RUVERTkKKzoxMDlEQzAwMEUxRTc0RDQxQUZGRDYyNUU3QjA1QkQxQTA1N0ZFRjE2RjEKKzoxMDlERDAwMEY2NjRBN0IwMjdEQkQxOUU1ODkwQ0U0NTYyM0REQzlFNEQKKzoxMDlERTAwMDZDMTZGNjI0ODhGNjA0Q0E3Nzg1M0Q3OTA3RUQwOTk0NDgKKzoxMDlERjAwMDA1QTNCMkNCNDg2RkUyMjUzNkIyMjcxMEEwRDA3OTgyRjYKKzoxMDlFMDAwMDA1RDJCQUI0Nzk5NUE3QTkxMkJENDYyNEM1NDhGNDJBNEIKKzoxMDlFMTAwMEIzMjU0QUY1MjVDNjU0MDk3NjVEQ0M5MkUwRUJDRkY3MjEKKzoxMDlFMjAwMEQ0RDkyOUQ5QUUwQzNFM0Q1ODY3QTc0QTI0NzhDMEQxNzEKKzoxMDlFMzAwMEQxRDJGQjk1QUU4OTUyRkRGOEEyMjk1MjdEODU3Mzg2NTkKKzoxMDlFNDAwMDU0Q0ZDNDdFMThERkEyODMzMjdBOUQ0QTcxQUVEODc3OTAKKzoxMDlFNTAwMEQyRkNBOUY3Q0I1NURBQjcxOUY0ODFFQTBDOTdEQjQyQUIKKzoxMDlFNjAwMEQ2QjY0RjY2QzA3RDMyNzA1RjFDNDZBREJGMkNBOTlFMzIKKzoxMDlFNzAwMEZDQThBMzI2NzcyQTlFREZBQkFEMDQzRTg0QjJGODI4NjcKKzoxMDlFODAwMEY4Njk5NDdDMDRCRTA2QkZCN0QwM0Q5MkZDNDBGMDk3QzEKKzoxMDlFOTAwMEZBMTMxRDVBRjg3RTkzQjY2RjM1NDhCN0ZGMzQzQTVGMTAKKzoxMDlFQTAwMERFOUYyQUJDQzJGRTk0QUI2NzNCN0U1OUI3QzRBQkYyQkYKKzoxMDlFQjAwMENCNDBCRUM4RkZGQTZEQ0NFRDdCOTE2RkI2N0QwNDdFQzIKKzoxMDlFQzAwMDJBRkFCOTFGRkQ4MkZDMkZDRDZGREJGQUM1MkZDOEJGNjAKKzoxMDlFRDAwMEREREEyNjJGMUU0OTVFMEE4NURDNkUzOTlBRDVEMDA0NUMKKzoxMDlFRTAwMEYyQjYzOTU5NzEwQTU0OTNCQzE0NjlGMkQyMjRGNDY2NUIKKzoxMDlFRjAwMDc5MzUzRDFGMjBERURCNkE3MkM3QTBGRkI3RjlEODUyNjMKKzoxMDlGMDAwMEQxNkY5ODFFMjE3RjNENEM4RjYwMUNDOTEyRTRGQUU0OEEKKzoxMDlGMTAwMEQ0NTA3RDE2Mjc1Njc4N0JDNjdBRUFGQUVCQTc4MzA3REEKKzoxMDlGMjAwMEVCREE5N0U4RTBEMUJBRjYxMzc0RjBBREJBRjZEM0E1NDAKKzoxMDlGMzAwMEZBMDY1OEY3RTVGQ0VEQ0Q0MjNGNjhFRDBBOEQ2RUQ1ODcKKzoxMDlGNDAwMDE5NDFERjBFMzgyQUVCNTdFNkFFOTZDRTNEMzQ5RTk4ODcKKzoxMDlGNTAwMDQ1N0E3M0NCRjE5NTAyOEY1NTEyN0RGNjY4RTMxQzA1QTcKKzoxMDlGNjAwMDNDRTc1RkZBN0U4OUQxMTdEMzFCRjhBMEU0OThEMTU5NUEKKzoxMDlGNzAwMEVCMDhEMTRGQTMxM0MzNzgzOEFDQkY1MkFCMkFDOTVGRUIKKzoxMDlGODAwMEMzMzE0RURGRjZENkI5NEJFOEU3MURDMkNFQkNBMUYzMTQKKzoxMDlGOTAwMERGRDQ5RkNFQkYzRjFFRjg2NzRCOTM4MUUyQUIyRDQ3QzYKKzoxMDlGQTAwMDI3MjQ2MjdGQkIyRkNFQTRGOTM2MUMzM0QwM0RCMjE3RDUKKzoxMDlGQjAwMDdCOEVCRkE5QjY1QjY4N0VEQTdDMEEzRjU4MUE4M0ZCQUEKKzoxMDlGQzAwMEFDMTc5QTBDQTRGRjBBNERFRTQ0N0IwNEJDRUJGOUFCMzIKKzoxMDlGRDAwMEJEN0UzNUJFMDUwNzJBMTFGMUIyMUJFQzEwOUQxQjE2ODQKKzoxMDlGRTAwMEZBNTRDM0NCOUUxMzRGMTJERUI3MUQ1Qjk0ODg3OEJGMjMKKzoxMDlGRjAwMEExRDUyMEUxNjU2ODhCRUNBRjBGMzk5MzIwQzEwMzRGRTkKKzoxMEEwMDAwMDcyN0YxMEVDQUU4NERGMkJDRDVCMkYxN0I4MzMyMkMzRTkKKzoxMEEwMTAwMDVERTRGNjU3RTkwRjZDMTc3NERBMjZFOEI0M0RDQTM5RTcKKzoxMEEwMjAwMDM5RDJCRUM2QjY0RkNENTVFMURGNTUzOEQzOTNFN0RCMDUKKzoxMEEwMzAwMENFRjRFNEY5QUZDRDQwNDdENEIzMTc0RTFCNDhDRjBFNTIKKzoxMEEwNDAwMEIxRDdBQjM1MTFFODUxREM2Q0QwRDkwOUQ5NkZCOEQ2OEUKKzoxMEEwNTAwMDc4RjU1NDNCN0FCMUJERjczNUJENThBMjdEM0YyNTc4RTAKKzoxMEEwNjAwMDYzQzRGM0IxMjEzQTg4NzM5NTNBN0M2QTdFRjQ5NUU5MkEKKzoxMEEwNzAwMEE2OUQ0N0Q3RDFBRjlERjc0M0ZERjhGNEYxMzRCQjBFNTEKKzoxMEEwODAwMEZCNjlBQTI0N0JCMzI2RTY1REExQ0ZERjI1N0RGRURFM0EKKzoxMEEwOTAwMDhGNDI5RkZGRDg4OUZDQTQyM0EzM0FBN0EzMUMxRDY5NjQKKzoxMEEwQTAwMEQzRTMyQzM2NUM4RjZCRTcyMTgzQ0RFRkM1ODRGQkY5QkUKKzoxMEEwQjAwMDZFQzE4RjNCNURFRjhGRTk4M0Y0RUNBNkZFQUZGQTNCRjgKKzoxMEEwQzAwMEVGMEE3RkU3MURGNDc3QkFFMzNFMTBGNzc3MEVCOTY2MjMKKzoxMEEwRDAwMDcwN0YyNzU5QTFFRkM1MkM4REI5REVFODg5QzBBN0ZGOTUKKzoxMEEwRTAwMEQ3RkQ5Q0YxNDVCMjlGNTNFMTk0RkQxQzZERkY2MEI3MTUKKzoxMEEwRjAwMDVEQTE3MzU4NjNGMjY0QkY2NzM3RkU4Mjc5MjZBQkUyRDUKKzoxMEExMDAwMEM3N0I1Q0RCNUQxMzJGQUI4NzAzNDJCRTBGMDlGQUJDMzQKKzoxMEExMTAwMDI5RjRGMDdFMTEzN0VDNDBGQzEzNURDQTA1NUQ3OEJFNzIKKzoxMEExMjAwMEEyRjhCQ0QzRTY3NDIwN0RBQTc4NUM5NjU3NERGMUY0NzIKKzoxMEExMzAwMDUwQ0RCRTdCNkJBOEZEOTEwQkQzQ0ZFM0ZERkVEREY2Q0EKKzoxMEExNDAwMDE4Q0FCM0VDQzZGOUMwMTI4RTk4M0NFN0YxRkIxNUJCRjgKKzoxMEExNTAwMDVEOEE2MzY5ODRCODdFNDg4QkFDMDczNDNGNDFFM0NCQUEKKzoxMEExNjAwMEREQ0Q5RjEzNUZFRTZBQkRCQzNERDVGNDk3RDZFRTREQjUKKzoxMEExNzAwMEY2N0EyOUUyRTdGQTY2QzYzMDZFQjg5MkZFRDFEQkM1MDAKKzoxMEExODAwMDJCOERBMzZGM0ZDNDU4QUY0NkIyM0JGQTcxRENBRDAxRDMKKzoxMEExOTAwMDE1Q0YzRkVGNkMwOTI2RTI3NjlEM0I3MDQ4QzU3QkUwMEEKKzoxMEExQTAwMEM1MkQwMTlBRUYzRTk3NjI1NzMzQTk1RDI5OUU4QjdFOUMKKzoxMEExQjAwMEYzRTI3QjYzRjBGOUFFRjM0NjgzODVGNjk5RUMyNEI3QkUKKzoxMEExQzAwMEM1NDIzRURGQjk2OEIwMzkwOUJGMkFFRDczMDQ1QTNFNzMKKzoxMEExRDAwMDdGMTBFNUQ1Njc1NUU5QkVDOEVFOEJGRDkyQzJGMUY2NUEKKzoxMEExRTAwMEU4NzUyQUU5OTNFRDY1MTYwM0U2OTdCNzlGMzc4QUYzN0EKKzoxMEExRjAwMEQ2MDFGMjFGNzZCNDY2RDlCMERDRUUwMkY5MjE3RDExRUEKKzoxMEEyMDAwMDI0RkNGRkZFM0E3RTRFNzUyN0Y0QzdGNTg0ODNFNkExNTEKKzoxMEEyMTAwMEYxNDFFMEJDQTEzQ0QyRjc3NjdFMkZDNjFCNzJGMUIzQjAKKzoxMEEyMjAwMDE4QzRDRjgxRjM3QjYyNTA1RkVENkFFMUUzMEM1OUQyMzEKKzoxMEEyMzAwMDE0ODM3MUU2REJBRDg2NTg5RTU3RTk5Rjg0Q0YxQjg3NTgKKzoxMEEyNDAwMERGNkZFQjg3RUI2QTMxRjBGRDFCRTFENzY4RTNFRDJFQTIKKzoxMEEyNTAwMDlCNERGOUZDREQyRDNDMEVEQjdEOUVFNzhGQjZGQkY5QjcKKzoxMEEyNjAwMEI5MzUyNkY0OThENjdFRkJGOTA5NjM3QTYxRkVDMDZGOTIKKzoxMEEyNzAwMEEyRjY0Mzk4N0Y2NTFDQjREQkRGNzFFQjc1NzRCRUM2MzQKKzoxMEEyODAwMDM3OEY4NUVCQkQ1MkJCRUNFNzk0QjRFOEVDOTM2NzFFQzcKKzoxMEEyOTAwMEM5ODE0Njg3MjNERjREQjhCMTkyQ0VENzczM0QzOUNBMDUKKzoxMEEyQTAwMDI4RUI5NzVERTc5NzI2NERDMEYxNkQ3QzdDRTZFN0VGRTQKKzoxMEEyQjAwMDZCRjExOUZFMThDM0JFQkI1MjNCRkNFNjg5MTVEOERGMTMKKzoxMEEyQzAwMDY2N0VDRTZDODg0REQ2Njc0Nzg2Q0RGOEZEN0MzQ0ZGMTgKKzoxMEEyRDAwMEJGMjk4NkVDRUM3NjVDM0ZGNjdGOTQ1MUZFNkM3N0Y5RjMKKzoxMEEyRTAwMEUzQTU3MTk4Qjc2RTY2NEVFRUM3Qzk3QUJERjRDMkE2RjMKKzoxMEEyRjAwMEJENzFEMEZFQkQwRDBBRTE3NzY0OUVCQ0RFOURBRUVDNjMKKzoxMEEzMDAwMDg3MzEwRUJFRDBDQ0YxQUJFNTkzMzRCOURDRDM5QzcwNzEKKzoxMEEzMTAwMDFCRTlBNzMyNzgxQkYwRjg1RUY5RUI5NEM3OUVFMzk3MzAKKzoxMEEzMjAwMEZCMTlCODMxNDY5QUY3RkNBNjA0NURGQzI2RTdDN0MxQzUKKzoxMEEzMzAwMERGRDRGMjAzQjY4QTAxQTFGOEFEQjA5NUU3RDcwN0ZFRTYKKzoxMEEzNDAwMDM0QTE3RjAwRTY1QjVDQzZDRkNGRUJGM0UyQTM4QzE2QjMKKzoxMEEzNTAwMEQ5Q0ZEMkU1QzUwQkY1Nzk3MUJEM0QxN0ZFRDgwMEIxNTcKKzoxMEEzNjAwMEFGNzE4OUZGMjNFQzlDOTY2RkQ4NjYwQTRDNzE1RjgzQUUKKzoxMEEzNzAwMEZGMzBDODA4QTEwQjlERUJGNTI0MTYwMEZFREYxMEZFOTAKKzoxMEEzODAwMEU1MjA3M0REREQyOTIwMkE1QjU1REYxMDE2RTYxNzMwNDYKKzoxMEEzOTAwMEJCOEYyNTBEMDhDNUI3ODM0RkNCRjE0MEQxNzE5OTJGRTUKKzoxMEEzQTAwMDIxN0VGQzEyRTNDOTU1QjhBNzQ5NzJFMEUzNzlEMEFCMkUKKzoxMEEzQjAwMEY0MzNENkM0RjQ2RTY4MDJCQTBFM0NDQUM0N0VDN0JGN0EKKzoxMEEzQzAwMEVDNDVCRTZBRjg0MkRCQ0YwMEQ3QTMxM0VFQ0YzM0YyRTEKKzoxMEEzRDAwMEI3MUJCRjMwMTNERjZEMTlDRUVEOTRFNkE3NjhGQjM0RDEKKzoxMEEzRTAwMDM3QjJBNkU1QTUwQTlFQ0JCNkFFNjgwMjdDNkUzQTMyQkQKKzoxMEEzRjAwMDJCNzUwMUY0RkZDMUM3QjREREM5QjYxNDZBREZBN0FGN0UKKzoxMEE0MDAwMDkzRTJDQjgxNUExRUVBQjhDMTk3NTg4MEZFQkE0NTkyQjIKKzoxMEE0MTAwMDZCQURCRUUxRjhEMjE4RkNCRUM4ODVBMDgxRjhCNEYxREUKKzoxMEE0MjAwMDIzMzNDM0JGMEZEMEIwQzM0MkZCMzkwREM3Q0NCNERGNTkKKzoxMEE0MzAwMEIyNkQwNzk3MTMyREVGQUNGOUY5NkYwOTdEN0U1MEY4RDcKKzoxMEE0NDAwMEJEMDc4NERGQjI0RkY4MkQ3Qjg0REYxMjEwN0VDQjJFNDgKKzoxMEE0NTAwMEUxQjdFQzEwN0VDQjFCQzI2RTZFM0EyRUU0NkY0OThDRDYKKzoxMEE0NjAwMDlGN0ZDNzk2RTc2NUI1NzlERUQxQkRFOTg0MTExNjVDOUIKKzoxMEE0NzAwMEZERjE4MEI1MDE4NkY2NUM5NjkzNTEwRTU5NEU0NjI2NDUKKzoxMEE0ODAwMENCRkE2M0I4M0Q1NTZBNUY2QUNEOTZFQTg3QjFFQkE0MTMKKzoxMEE0OTAwMEZBMUI1QUZCRTlFMjkxQzFCQTc4QTQ0NEU3OEY4QzkxODgKKzoxMEE0QTAwMEU1RjI2ODU4QkM0QkYxQjUxQ0VGREUxNDFFRUY2NjIyRDYKKzoxMEE0QjAwMDlENzgxQ0I4QURFOTMxQTJFM0I2RDM1OUYxRTE3RUQ5NUMKKzoxMEE0QzAwMDFCNDI2RUI2OURFNkY2Rjk4RDMzRTc2MjIzRjk2RDY3QTAKKzoxMEE0RDAwMDA0M0RCRTE2RjQ2ODE2N0VDQTREMjlBRURCRjMwQjMxN0YKKzoxMEE0RTAwMEFFMzg2N0M2NzMxRkVERjFCM0Y2QkVGNkRFMTlGRkE5RUQKKzoxMEE0RjAwMEI4NzBGQkY3MDUwNThEMjFGOERCMkQ5RkU0NTJGRUU0RDMKKzoxMEE1MDAwMDJBRTU2MzU5MkMzRkU3QjY1OTg5QTZGQkY3NTdCQUQ3MTYKKzoxMEE1MTAwMEYyOUJGQzJDQjEwRjUxRDM4N0VGOEJENjBDQzRGMjA1MDQKKzoxMEE1MjAwMDkzM0IxNUVGM0Y2RDU2REM1MzUwOEZGQjdFNjc4RUY4RTMKKzoxMEE1MzAwMEY3MjQ5NkU3MkI5QUYwMzdBMDdERTA0NzkyRTFFNzI1RDQKKzoxMEE1NDAwMEM1ODhGQzE1MjVDMDY3OTk2NzM5RTJDNzhBRjEzQTM0OTYKKzoxMEE1NTAwMDUyNkQ2RTg2RUJEQTY0NjIwRDY4RTc5OThCMzlFQzlEN0IKKzoxMEE1NjAwMDE4MTcyMTE4RTc4NzVFOUVENUY5MzAyRjI1QzhGNzhGNzkKKzoxMEE1NzAwMEMxQkNEMkY3M0VGMDY4MTY3RTc3MEI0QkRDMjdCMzU4OTAKKzoxMEE1ODAwMEY5QkQ4M0U4N0M0RjVEN0UyMUZGOUU2RDdDM0ZFQ0I3N0IKKzoxMEE1OTAwMDI0OUJFRkEzMDY0ODdGNEYxMUZEMUE2Mjc2QTQ5MzNEREEKKzoxMEE1QTAwMDZENEZBRkVBRTI1QzM2NEZCRThGQTJFNzk3MDZBMTY3MTgKKzoxMEE1QjAwMERGQzg3NDRGODlGNDFEOEMzRjBBRkM2Q0ZCNkE5QzhBQ0YKKzoxMEE1QzAwMEUzMTY1OEUzNUNGQ0JCOTAyRTE1RUY4MUJERjFGNUU4NzYKKzoxMEE1RDAwMDk4NjkxMUY4NkM3RkVGNjk3RkNDMEZFMzgzODI2MDhERkYKKzoxMEE1RTAwMDJBRkU0RTg1NDFDRTZGMTkwMjQ4RUYwQjM2MzNDOUY1NkUKKzoxMEE1RjAwMDYwNUM3MEMyQTVGRDBEMzkyM0ZCNzk4MzlBRTRGODNGQjYKKzoxMEE2MDAwMEI0QkY1RkE3RTA3OUIzMzY3RTQyODIyMEZEOEZGMEVGQzIKKzoxMEE2MTAwMDY5NUM4OTlGRjRGQkY2QzdGM0I1RjM5MjlFNEZGMDFDN0IKKzoxMEE2MjAwMEIxMUE2RkEzRjMzNTlCOEU1OEQ3QTMxRkE5Q0ZGNzFEN0YKKzoxMEE2MzAwMEZFODBFQjcxRkRGQzFCM0Y5ODk0OEFGRUQ3RTZBMTM3QTQKKzoxMEE2NDAwMEE3QTIxQzZGNDEwNTRGREZFRjU5MzhDOTI1QzFCMDdFNjUKKzoxMEE2NTAwMDFCRUE3QjI2QkVCMzU1Q0RFQjQ3Njk3MENEMjQzQzNGNEEKKzoxMEE2NjAwMEIzNjUxODZGRkY0OUZFOTEyN0YxN0I2MDVCNkUxM0Y1QjAKKzoxMEE2NzAwMEJFNDc3OEJEMDZCMzQ1OTM4NjIxNkMzMjEwM0NBOTE3QkUKKzoxMEE2ODAwMEI0ODdGRTdFRUFFOTNBOEVGQzE5OURFRjNBODFFNTlGOTgKKzoxMEE2OTAwMDUwNzZBMDFDRDFEM0Y1MTlDMkM3OTFDNzYwREQ0NzdCQTYKKzoxMEE2QTAwMEI4NEU4NkMzODkzRDVDQTdDMkUxQ0Q2REY2QTVDNTE2M0YKKzoxMEE2QjAwMEJFN0ZBQ0YxRTFFMTYzMTM4NERERTE3NDFGQUZDNTM1MEEKKzoxMEE2QzAwMEM1NTc5N0U3RkY3N0MxQTc2RjBCN0Q3NTQ4RDg4RjM3QzAKKzoxMEE2RDAwMDg1RkREODhGRjY4M0UyNjE2RTNGMUFDNUJFRjE2RTYxQ0IKKzoxMEE2RTAwMDNGNzY4QUI4MzcxNDc3Qjk4NTdGMzE1OUM0QzMzQzBFOTkKKzoxMEE2RjAwMDJCMTg1QUNBRTM1RUJCOTZFN0NGMzA0NjhBODdDNjE1NDkKKzoxMEE3MDAwMEM4N0VFMkQ4N0NEOUFFOENFRTk2MjhGMTY5Nzk1QUFBMzcKKzoxMEE3MTAwMDJFNEVDRUQ2QzVDOUIyNUQyOTMxRjZEN0M1Qzk4Mzc1Q0YKKzoxMEE3MjAwMDcxQjIxQ0Y3MTYzNzhGRDZDNUM5MTNBNEY2QzdGMzFEMkYKKzoxMEE3MzAwMDQ0RDdBMkUzQjdFQUUyRTVFOTUyQkIxMDFERTU3RDlCRjEKKzoxMEE3NDAwMDEwQkQ2NjQ0QTRFMzk2RTIxOTBGRkVERkEyNjNFNEZEQTgKKzoxMEE3NTAwMDlBRkZGRkU4RjgwRkNBQTNDRDIwRURERkU4Q0I3Nzg0OUUKKzoxMEE3NjAwMEZEN0Y0QkQ4OEQ4M0MyMEYzODIwRjIxQ0ZCODQzRkI3OEUKKzoxMEE3NzAwMDA3RTlEODFERkQzQUE3RjBFQkY4MzkwRTJEMEZGMjg2NDgKKzoxMEE3ODAwMEM4NDMzNTg4NzMxQzVCQzRCRURCMjY5MTg3NUE1NkZDRDAKKzoxMEE3OTAwMDNEM0ZDNzcxOTEwOTNBQkUxQjkxOEUxNTRFRDlDRjFCMTMKKzoxMEE3QTAwMDkzMjdEMzcxOTQyMzUxRTdGN0M5N0VERTcwQkJFQ0U3QTIKKzoxMEE3QjAwMDk1NUE2NTNBMEU2M0ZENzU3RTlGNENDN0ExMkQyNTNBQ0IKKzoxMEE3QzAwMEJGNkZCNENFNEVDOUU3MzhDMDJGNzhCNDU3MjFERTRCRTcKKzoxMEE3RDAwMDkwQ0Y3MzE0MDZFNUYzMUM3QUZCQUVERDU3RDRGQzg2RUMKKzoxMEE3RTAwMDM2M0ZDMTJCRUYzMzZGNDIxQjhBRkI0NTI5NjZGRUJEMDYKKzoxMEE3RjAwMDBEQTNBNzBCRkExRDFBQkVGQ0JERjgzOUM0MkQ5RkRDQjIKKzoxMEE4MDAwMDRFRjgyQzQ0N0IxRUMxN0VGRkE5MTdCN0ZCN0ZFQTY1N0IKKzoxMEE4MTAwMDZGQkIxRjE5REQwRkQzOUIzRUVFRkZDNDhGQjVGMzczRTMKKzoxMEE4MjAwMDU1MkM4OERGOUZCQThDREZGNDI3NUNBRkU2MkYxOUVEM0IKKzoxMEE4MzAwMDM1MENGRDA4RDU2MkYwRTFGNzc3OTk2QUE1NzM3Nzg3NDMKKzoxMEE4NDAwMERCRjFBMzRFRjVDQUQ0QkVCRkFBNjBCRjlGODg3RTk1MzgKKzoxMEE4NTAwMEUyMzdGOUI5QkM1RUFFQ0RCREYwNUU0RkE5QjMwNUYzRUEKKzoxMEE4NjAwMEUyOUIzRjMyM0I2QjkxOUZBM0Y4Nzc1MEY0RkVENkUxMTkKKzoxMEE4NzAwMDVFQjlENDlGODYzRjNDRkZGRjBCQjQ4RkY4QTE1OEZBMTYKKzoxMEE4ODAwMERFREVFNzNBRkIwOTBCODY3RTVFODhFNkYwOTE5NzRGQTUKKzoxMEE4OTAwMDRERjJBNTg1RUNGNTI3QkQyRTkwM0RDREI1NzU5OTgxN0UKKzoxMEE4QTAwMEYxQjJCMkQ2OTdDMEY3MkIwMzI0NUY3QUJGQUQ1REZGM0MKKzoxMEE4QjAwMDU3RTdBNzlEQ0M3MzA1MTE2RkRGQTM1RDJFQTQ3MzU1RDkKKzoxMEE4QzAwMDJFNjNCRkY2REY3RjIxREE3RDE3RkYxRThDNEJDNTcxMkIKKzoxMEE4RDAwMDM1M0M2OUY1ODcwNEREMEY4QkZFREFGMEEyRjExNTdFQjkKKzoxMEE4RTAwMDlGMjYyMUVDMUVBQzZFRkUxQUJFNTYxRUQ5MUJDNDIzMzkKKzoxMEE4RjAwMDhDRDdCQTFFNkQxRDExRjhDNzdEMDVCRkZCN0JBMkFGQkIKKzoxMEE5MDAwMDhFN0ZEODU4QTdCOEE3MUJEOUVGMzMwOTNGMzI5Q0ZFREEKKzoxMEE5MTAwMDgzNjk1RDdFNkRGRDZDNzgzRkJDRkZBMkRENUJFN0ZBNkQKKzoxMEE5MjAwMDUwQkIzMzkzNjBBRkIzNjc4MjFDREQ3RTU0QTU3MzBFQkEKKzoxMEE5MzAwMDRDRUM4MzFCREJFODU5QUNBMDlEMzE4RTUwNTg2MjU4MUIKKzoxMEE5NDAwMERFNTVCRjlGQThDRjFGRThDRjk1MTUzNzc3OTFFMEVCNzUKKzoxMEE5NTAwMENGQ0JFN0NBNUMxNzdCNUVENkFFOTREOTg2RThFQzUyQzMKKzoxMEE5NjAwMEE5Q0U2RThERDFEOUI1ODkzQUJCMjdFN0M1OERDQ0E4QzQKKzoxMEE5NzAwMDdENjc0OEVDRDcyQjBFRkNGRThFOTE2MzI4QkM1RTdDNzUKKzoxMEE5ODAwMDA3ODhFMzdCNzkzQkYyREI3NjdFQjY5NzgzRjBERTI2QTEKKzoxMEE5OTAwMDFGRUI5ODgzRDNDRjI3REQzMzUxNkQxRUEyRjNBMzAzQTIKKzoxMEE5QTAwMDM0M0JFNkE0QjhENzFDMTg0NERGRjMzNDNCRTVCRkNGRjMKKzoxMEE5QjAwMEUwRjc1QTNGMkVDQkMxN0IzNjhDQ0E2N0JDRjY4RkNCRjMKKzoxMEE5QzAwMEU4M0U0RTMyOTU0Rjc5MURGNDdDQUQzNzhGQ0EyN0JERDYKKzoxMEE5RDAwMDRFN0FGRTg0Qjc4OENBQzdCQzJFMkFFQkJDRTU1NDNFMkIKKzoxMEE5RTAwMEU0NzU1M0JCRDVERUM5MDRBRkYyN0FBOENDMDJGNzA2RjIKKzoxMEE5RjAwMEZGREU0MDk2OEYzOTYxQzYyQzdCMTU4QzE3ODZFNzRDOUQKKzoxMEFBMDAwMDFGQ0MyMzBDOEY1RDE3REIyNTM4QkQyNjU5NkE5RjVBNTIKKzoxMEFBMTAwMEU1OTBFQTUzM0M3OTUyN0RFN0M5NEUwOUVFRTgyRTkyNjMKKzoxMEFBMjAwMERBMjc5NkJCMjRCODgzQUI1QzZBMUZFQjc0NEI3MDRDN0YKKzoxMEFBMzAwMERFNjRBOTdEOTRDMzIzRDVFRkI5N0U3MDdDRDM2NUU0MzEKKzoxMEFBNDAwMEI5Q0VFQjNBODE3ODU4RUQ3NTlGRTA3ODJBM0ZDMUYxOTUKKzoxMEFBNTAwMDMzOTlDQUI5QkQzQjEwN0RFREM2N0ExN0RBNkQ3QkJFNUUKKzoxMEFBNjAwMDlERTFGOTc2QjM5NURGRkJFRTYwQjQyQjFEQzJGQUVGRTIKKzoxMEFBNzAwMEUwODJGRUE0Rjk0MjdGNTIzQ0U3RTdFNzg5RjNEQzI3NTYKKzoxMEFBODAwMEU0Nzk0Rjk2REUwMzE5MjQzQkE5RjkzMUMzRDVCNDU4QjQKKzoxMEFBOTAwMDhDQzcxRTM0RDlGRkJEM0ZDQ0UzODFFMTJBQzM3QjJCOTkKKzoxMEFBQTAwMDQ3Q0EyNjUyNUUwNEFGNkNCMjA4N0FGNDBCRTE5RkM2MjcKKzoxMEFBQjAwMEY0QjY1MkJDMzhGRTA5ODVFMjNCNTg0OTA1RTYxMTY3RjkKKzoxMEFBQzAwMDFEQ0Q3Njg2RkYzRDI4QUQzQ0ZDMUJGRUJEQTE5ODNEMEIKKzoxMEFBRDAwMERCMUM5ODE3MUI1RjNDMkQzMTJBMkNGRTFCMUZGOEIxODUKKzoxMEFBRTAwMDJDODVGQUVCM0IyMDBBRTYzMTdFRUQzNEYzOENGQ0QwNkEKKzoxMEFBRjAwMEZBQjQ3NkIzOUU5MEZERDExMEZGRkJBREMyMUZBNzc1Q0YKKzoxMEFCMDAwMDZBRkE2OUI1N0QzRDNENUY5RDc3Rjk3RDlCQjM2MjVERDYKKzoxMEFCMTAwMDVGMDk3RkVEMEJFMUFGOUQxMjdFRjc0OUUxNzc3RjJBNTgKKzoxMEFCMjAwMEZDRUVFM0MyRUZGRTU4RjhEREM3ODRERkZEQTFGMEQ3RUQKKzoxMEFCMzAwMDhFMEE3RkVEM0RFMTc3QUYxNDdFRjdFQUJDRjVGNDc3M0UKKzoxMEFCNDAwMEFEMkU2QzU0OTg3QTk5RjNBNTczMzdDOEVCQUM1QTI3OUQKKzoxMEFCNTAwMEVGMUJDRTdBNDJGNkJCNjczRTI0RkI2QkQzOTdDQjdFQ0UKKzoxMEFCNjAwMEY3MUQ4QjY1N0ZFREI2MUFEOTVGOUI1MjI1RUJDNzVCNEUKKzoxMEFCNzAwMDNDQTUxMjdDRjM2NDM5MkY3NzkzNUJERTM3RDRFODM0M0QKKzoxMEFCODAwMEIxNUNENjkzOTY2NEQ5NUY2QjZGQkQ1QjAzQTM1NEZDMzUKKzoxMEFCOTAwMDNCMjQ0OENDNTM2MUY2MzBFQzdCRjBEMjc5QzcwMkJCNDIKKzoxMEFCQTAwMEFCMTRGNzZCMEE5OTdCMTlFRUU3MEMzNTA0REZDN0ZEOTAKKzoxMEFCQjAwMDI2RjZBMTRBREY4MTZDQzAzNzA2ODFCQzVFMTgzMDc2NkMKKzoxMEFCQzAwMEJDMjNDQ0VFRjg2NEJDNEUzRDJFRTc0NzZFQkQ0N0Y2ODUKKzoxMEFCRDAwMDgzMkJFN0M5RjE4Q0I5NUNGNjgzNUQ2OUYyN0VFQzQ0QTYKKzoxMEFCRTAwMDlEREQ2MUMyMUU5QUY5RUZBQ0NDN0Q3OTNCNjQ4ODk5RkEKKzoxMEFCRjAwMDQ3Rjc5NUFFRDUxRTk5OTlGRUZDMThCNzQ3MzQ2RTk2NjcKKzoxMEFDMDAwMDU0NEZGNjI4QUEwRjNGMjczMTQwREM1M0E4OEQxQUY4N0QKKzoxMEFDMTAwMDBFRUVERkVERjk4OERGMkYwMEI0MDdCQkMxRkJENzMzQTEKKzoxMEFDMjAwMDhFNkZCMzc1MjQ3RDNGNkVBNzg5REYxQkQ4OUQ2MjczM0QKKzoxMEFDMzAwMDJFODVBQUVCMkZGMkZCMDFBQ0Q1NDhFN0M3M0M3ODZGMTUKKzoxMEFDNDAwMDI0MEJGQjk1Q0Y4RjE1MDY4REQyRjkzMkIzQUUzRTBEOTYKKzoxMEFDNTAwMDZERTI2NUU3QzNDRkQxRkRFRkNENDc5Q0UzRThDM0ZBRDIKKzoxMEFDNjAwMEQwRjk4OEE2QzhGNzBEREFGQzM4MUQ5RjZBRkFBNzIwMkMKKzoxMEFDNzAwMEMwRkRBMzgyNzZGREEzQTlGNDlEMzFFMzg3OENFRUQ5QjQKKzoxMEFDODAwMDVCMEMyRDY3OUVDM0ZCNTE1RkYyM0NFQzMwMjZDNzZEMTkKKzoxMEFDOTAwMDM3OEU5NUUzQjZFMUY2Q0JDNzZEQTMxQzMyQkY4RUM5RTQKKzoxMEFDQTAwMDkzRjU0MDg1NTNENjAzOTdGODM1NERGQzFDNjI3QjdFQTcKKzoxMEFDQjAwMENENEQ3REIyQjQ3QjNBODQ5RkE4OUM3RDMxN0MxRjkzOUYKKzoxMEFDQzAwMEYzQ0YxMEIxQ0U0N0NENkVCQUJGQjIzQzlEMTE5RDg2NzkKKzoxMEFDRDAwMEQ4Rjk3OUM1NUFEQ0I3QzFGMzdGMUZGMDdCMkY0NkU2NjAKKzoxMEFDRTAwMDRFRUM4M0U1RTkxMUUyRkNFMjU4MjdGNUQ3Q0NFOTU1QjMKKzoxMEFDRjAwMDA0RkY3RUNFQkFGNDdDQTIyNTY4OTRCRUJCNjE2NDYxNzkKKzoxMEFEMDAwMEY0ODVGQTM5Qzg1RjFENDM3Q0Y0N0Y2NzVFRTJGQjA4NzcKKzoxMEFEMTAwMDFBOUZEOTEyQUVCMDdGRTc5M0ZDNDBBRDFDMTY3NEE5MDAKKzoxMEFEMjAwMEI4OEVGRDc2QkU4RkJBM0Y1ODEzQzRFRjQ0N0U5RkNDRDkKKzoxMEFEMzAwMEYzMTRGN0E3NEQzMEYyRUZCNkI4NkNDMzgxMkUyM0M0REQKKzoxMEFENDAwMEZBOEJDNDNFRDkxNjJGMEJBMjNGQjdDOTZCQTU1MkRCQjUKKzoxMEFENTAwMEZGNUM5OUJDMjgxMUVERTY5NjBDNEYyQTlFMEJEQ0QyQzUKKzoxMEFENjAwMEIxQzM3MjA2N0E3QUIzQTk0MzVBQTQ3QjA0OERBNjgxMzMKKzoxMEFENzAwMDY0NjdCNzM0QTYxOEQxMEYxRDY2QjQxQkU5N0I1MjY5MEUKKzoxMEFEODAwMEQzNTVDQ0NGOEVDNEZCMjY0OTA4MzNEQUE3REJFNDBEQkMKKzoxMEFEOTAwMDA0Q0JFODVDQTg4N0NFMTFDMTNBNEFEMThGMkRCMzRGQkUKKzoxMEFEQTAwMEEzQkZGN0Q4RjgwMUM4ODUwM0ZERTMwRTUzRjFCRDdEQkQKKzoxMEFEQjAwMDFERjlGOTZCOEI5RDlGNkYxRDkxMzQ5QkU4NTVFMEU0NjUKKzoxMEFEQzAwMERGRUYyQjQ4QjMzOUZERDg1RDMyRkY4RTRGMTVGQ0UzMjIKKzoxMEFERDAwMDc0RTE3NjAyRTQ1RUZBQkVDRjQwMTYwNjIzQkQ3NEYwM0QKKzoxMEFERTAwMEQzN0EzREEwM0I5N0I4RjI5ODM4M0ZENzE0NzlERkU2ODUKKzoxMEFERjAwMDMzRTE1NzZDMTE3OTg3RTNDMkFGRjg1OEY4MTU0Nzg0RUYKKzoxMEFFMDAwMDVGQjE1Mjk3MDc3QTVGRjgxNUZCNDQxRUU4ODBDOEU3RTgKKzoxMEFFMTAwMDFEMTRGOUJDQjc4NDVGQTE5REJGRDZGODIyNzkxNTczQzQKKzoxMEFFMjAwMDU4RTIxOTdCNzcxQUM3NzNDQTJBQzU1RjBFRUIyODlEQjMKKzoxMEFFMzAwMEM5RTFFNEM1N0M3RkI0QUJBN0NFNUQ1MjgwRjUyNkU3QkYKKzoxMEFFNDAwMDQ4NTg0N0YyRTRCQUUxQjg4RTk0QTkyRDc0NEY2OUIyMUMKKzoxMEFFNTAwMEM3RUM3MDI5NzgzRkU5MjlCQTE3QTVERDBCQkI5M0EzOEUKKzoxMEFFNjAwMDg2REQzRTczMDRFOURGM0IzREUyRENCMURBNUM0OEZDQTEKKzoxMEFFNzAwMEY1ODQ4OUJFOTNBNDdEM0Y2RUYyNENGOTdCNEFEMzc1NkQKKzoxMEFFODAwMEY4QkQ1RDA3OUIxNUFFNDdERUQxRTRBMjNGRUIxRjhFRjgKKzoxMEFFOTAwMEY3MTREMTM2RUE0RTcxOUUxNzJGNUQ0NTkwOTdCNTAyOTMKKzoxMEFFQTAwMEVGMUE1RTFBQUYxRjFEQ0JEN0MxRjc0MzJEQTI5RkEzODgKKzoxMEFFQjAwMEM1QjdDNjYyM0YxRkE0RjFGRTI2MDg3OUQwRjdCNzVBN0UKKzoxMEFFQzAwMEVCNEZEQ0E3ODkxNkY0N0ZCNEU3RTVDRjlEMUVGNjMyODEKKzoxMEFFRDAwMEU5OUNFOTYxNDE5RkI2N0U0QjFFMzRFMUY3QjQyNzA3MzgKKzoxMEFFRTAwMDFFNDg0Nzc5MDlEREFCNzFDNUYyRkIyQjYzRkYzRDEzQUIKKzoxMEFFRjAwMEU4QjQ1QURDNDNEMEY0RUFDRDQyN0VGNUUzN0RFMEJEMTAKKzoxMEFGMDAwMEZDRkQ5RDBGNEFBNjk4RjA3QkU4MzcwNTdFQzVGRjFFMjUKKzoxMEFGMTAwMEIwQjEyNjM5RkNCQ0VGMDczODNGRDA5NUY3REY3NDM3NjYKKzoxMEFGMjAwMEZEMURDOTYwMDZFNzA3Q0I4RDE2MDc3RTY3QjA2QjlBREIKKzoxMEFGMzAwMDZCMDVFMjMxMzlDRDM5NUNFNDQ3Qzk5RUZEM0ZFRTgxQjYKKzoxMEFGNDAwMDE5MUIwMDgwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwOUIKKzoxMEFGNTAwMDAwMEJFRDdEMEI3ODU0RDVCOUU4REFGMzRFMzI4MTA5NTgKKzoxMEFGNjAwMDA0OUM2MDQyMjdFMTYxQUMwNDI2MkZGMjYwMDgzQjEwOEMKKzoxMEFGNzAwMDM0NDUyNDEzMTIyMTk4MTAyNjA5OTA2OEQxMUJBQTNENEMKKzoxMEFGODAwMEQyN0I2OEIzMjEyMTg0MTg3OTlDNkIzRDUwMDkwRUY4NUYKKzoxMEFGOTAwMDY4Q0ZCOTlFMUFBQ0Q3RDI3RUVBOEQ4QUQ2REVBMzEyQ0MKKzoxMEFGQTAwMDdBNDMwQjZEQzVGMDkyRjY2QjdCMkY1RUQ0OUVEM0EzRDQKKzoxMEFGQjAwMDFGRjdGRkZGQjVENkNDREUzQjkzODAwQUFERjYzNEY5MjAKKzoxMEFGQzAwMDc0QjNGNjVFN0JBRDdGRkQ4RkY1M0ZENzhFOTNDMThGNTcKKzoxMEFGRDAwMDhGMzE0QkMyNUU2NTQyMzI2M0NFNjI4NThEODdGNkE2QTUKKzoxMEFGRTAwMDkyNDU2OTQzMzMxODVCNUVEREJDOThDRDY0RUMxMkZFN0MKKzoxMEFGRjAwMENDODNFN0NDQTYwRDY1RTI0QkNDNzI0OTgxRkY4Nzk5RTMKKzoxMEIwMDAwMENGMzYxQkVGRTMxREMzNzM3NjI5MURGRkRGQ0E4Mjg5OEMKKzoxMEIwMTAwMDcwM0Y3OENCNkY3MTlDNkFENkVBRUY4N0ZCREQ3OUVBRTcKKzoxMEIwMjAwMDA0MEY4Q0NGRUFFQzY3ODc1QzhDNjVDMkVGQTU4Q0U4RDcKKzoxMEIwMzAwMDNDRjI1QUNENkNGNDVDOEVCNzY0MzFGNDk3RTMzMzlBRUEKKzoxMEIwNDAwMENGRjA3QzZCMTdGMzM5Qzc0MkUzMjM4MDZFMjJCQzJGMEQKKzoxMEIwNTAwMDlFNkRCNTg1NUQzODVGNzdGMDVFOTdFQTY2MkMyM0Q1RTcKKzoxMEIwNjAwMEQyRTAwNDc4MkFEMjM2QUY2NEIwNkU1NkU5RjQ0Q0MzMEQKKzoxMEIwNzAwMEY3MDMwQkRGQ0VDRDgzNkJFNjVBMUYyRTBGRkIzNTQzNTQKKzoxMEIwODAwMEJGRTMzNzc2QTZGOTY2NDRFMURBQkE4RDk1ODQ2MDlFMEYKKzoxMEIwOTAwMEFENjk3RkU3NUQ5Qjg4RkQzRTZDMEI2MTNGM0JBQkU5OTMKKzoxMEIwQTAwMDgzRjFCQkU3RkYyRTM1REQxREVEN0Y3MDU2RTk0Q0ZGQzgKKzoxMEIwQjAwMDA0MThCMDFDRkU5N0MyRDg3NDQ3MjhDMzNGNjNGODdBQkYKKzoxMEIwQzAwMDE5RDMxODlCODBGODhGNjcwQ0UwMzhEM0EwODQ5RDAwQkIKKzoxMEIwRDAwMDU3NEQwRkUwNkYwQzNFQkZEMDgyRjcxQjdBOUNCRTZFQkYKKzoxMEIwRTAwMDA0OTBBOUVFREI2MDlENkJGOTMyNTlDM0I0OEVGQzdFRUYKKzoxMEIwRjAwMEI4QUVFRDAxQkE2MUZGRERGNkQzODgyRjE3RkMyMjdFRDIKKzoxMEIxMDAwMEQzNUE2REE3MjNGOEMyRkU0Q0Q3QzY3OTRDNkQwN0NFMzMKKzoxMEIxMTAwMDAxRjBERUUyNEY0QzdFRjcyNkY4NzcyRUNCQkQ2NEU1REEKKzoxMEIxMjAwMEY0NDdGQ0Q2ODhCRTcxMEQ1NTYzMTlEMkQzMEJDODJDRDkKKzoxMEIxMzAwMDFBQkVBRTE1RkY2NjY1RkRFMzE5MzEwQ0NCOEZERTNGRkQKKzoxMEIxNDAwMEIxN0E0QTdDMDhERjQzQkU3MTA5QkU5QTQ1M0NFOTczNzcKKzoxMEIxNTAwMENDNDZGQTczQkVBQTE2N0MwNUFDRjkxMkYxOTU2NkQ3RjcKKzoxMEIxNjAwMDIyNzBDMkJBRDg3REY2MjhERjY1MThDNjYzMDhFRjMyQjAKKzoxMEIxNzAwMDdEOUJERTU3OEY0RDA1Rjg1NzBBRkU1RjE5NjhFMUY4OTEKKzoxMEIxODAwMEJBOEZGM0EzMEI2RThBNzFBMkZDMDZFMzA0NERGQzQ3NTEKKzoxMEIxOTAwMEY0OUEyOEUwODQ3MTZFMkYyQkZCMUYzRjA1OUMzREJFNjcKKzoxMEIxQTAwMDMzRTMzNkE0RDNFRERGQjQzMjJCQ0M1NzA1RERCMDVERUQKKzoxMEIxQjAwMDU1QTM4NEMzRDA1RTE2Qjg5OUU0NjE5OTdFN0NCODVGQ0MKKzoxMEIxQzAwMDVENkQzRkFCQTdDRjNCMUJBN0QwMzhBQkNBRjkzODZDM0UKKzoxMEIxRDAwMEEzNkU3RTgyNkYyN0UxMzNDOEQ4MTY4RjhFREZERTRERDcKKzoxMEIxRTAwMDY3NTMxOUUwRjFBNTNEQ0RGQkYwRkQ3M0JCOUMwQ0Y5NTUKKzoxMEIxRjAwMDg4RTFCQkIzOTFFRTFDQUZDNzgwNzc5MUZGQ0Y2RjUzNEYKKzoxMEIyMDAwMEMyMDcwMEVFQjM3QjlDMDRFN0JCNkI5NDMwNDNGQTMzNzgKKzoxMEIyMTAwMENGOTNGRDcwRkYwMTdGMTJDRDczMkUyRUI0RUYxQkYwODQKKzoxMEIyMjAwMEJDNzE2QjgyNUY4M0Y1NzY4RDZCQkQyNzA4RjM5RTRCRjcKKzoxMEIyMzAwMDBBRDVFMzM4OEQ1QjZGQjI2OEQwQkYyQjVFNzM2NUUwRDMKKzoxMEIyNDAwMEI4OEQ1NkZGMDE5ODYyODUwRDcwM0EwRUFFRjBFRkVCQTcKKzoxMEIyNTAwMEUxREFEMEE1QTMxRkZDMzdFODU3ODhFRjk3NTg1OEE4MjQKKzoxMEIyNjAwMENGM0Q5QzdGRENEOTBBQ0Q4RjA4NzdFQUUwNUY5MjYxMDEKKzoxMEIyNzAwMDIxNzg4RjNGRTQyNDc4Qzc2NEZCNjg5Qzg2QzIzODM1MDgKKzoxMEIyODAwMDZFMENEMjkxQTlCNjFDODAyNzU1OUQ4QzcwOUU1NTQwOUUKKzoxMEIyOTAwMDNFODFERkNFRENBRTY4ODgxRjY2RTM3NDcxNUMzRjY5NzcKKzoxMEIyQTAwMDNGQ0FEMzNGODk3NTlFN0RCMDYwMzJGMkYzOTkyNEZFODgKKzoxMEIyQjAwMEZDQjQzNzNFOENFQjNBRURFMzZEQ0RFQjBFM0Y4MUIyNDMKKzoxMEIyQzAwMDYxMEI2NTJFNEJFNEVCNTA4MDBGMUEwNTVDOEQzRThCQjUKKzoxMEIyRDAwMDFBMDdGNDZEN0M2OEY5NTc5MUNFOERERTlFRjU3ODNEQTYKKzoxMEIyRTAwMDk2QTgyNTJBRjBGRUY5M0Q1Njg2Rjg0NjdDQjg3MkYwRkQKKzoxMEIyRjAwMDc5NzEzMzNFMzdFM0U1MDM3RjA2QzE4M0Y4MUIwRjc4OEUKKzoxMEIzMDAwMDdCNzc3NzdCNjIwOEQ2QzEzQzJDRTQ5ODE4QzU0M0MzOTEKKzoxMEIzMTAwMENFMUZERUFGQ0MyNDc5RDZCOEJDNzMzOTUxOTg2RTNGQkUKKzoxMEIzMjAwMDA2RkU1REUxNzM2OEU1MzAwRTNCM0M5NUY4NzY4NTg3NTcKKzoxMEIzMzAwMEYzQURBMzY4Q0I4NDBDREVDRDFERTEwRjFGQjU3QjcwOTAKKzoxMEIzNDAwMDdGNkYxNEVEMDZFNDVCQzBFQjBBOTQ5Nzk5ODg4RjcxQzgKKzoxMEIzNTAwMEIzRkJFMTdFQ0Q2QTIzREY2RTQ5REVGQzYwMTVBQzczODIKKzoxMEIzNjAwMDREQTE5RDU5RTFGOTFBQUZDRDIwMzc5NTFCOEM3MjA0ODAKKzoxMEIzNzAwMEVCMzZCNEM3NjczMzVBNzdENzM4QzE5RjlEOUMzRjgxNUUKKzoxMEIzODAwMEQzMjcwN0IzQTI3Q0QxRUJCNzQ4QkVGMEQ5NDdDMUJGRTIKKzoxMEIzOTAwMDE5QUY1RjM0M0M5QzQ2N0UwNTdENzMyNkNEQjdBRjg4RTAKKzoxMEIzQTAwMEY0MDJGMDBGODc4QjU5NzVGMkQwRDBFNTI0QkU2N0MwNDgKKzoxMEIzQjAwMDFFODgyN0UwNEY0NzY1NTY5NDVGMjQ3RTFBNzY2RjIyRDkKKzoxMEIzQzAwMDdFNkMxMDdDRDdEODAzRkMzMzQ2Qzc0NzI2N0NFMTlBQjUKKzoxMEIzRDAwMDZENzI5RTI5NTEzRUEzRTczMUY4RUM0NTNGODc1QkNBNjkKKzoxMEIzRTAwMDVGMDMwQkQ2MzNFQjcwQjk5NjU3QTI3MzMxRDBCMzZGQUUKKzoxMEIzRjAwMDVEOEQxNkMwNTEzNDkyRTMxRDI1QzU2Mzg5REYwNTNEN0YKKzoxMEI0MDAwMEI4RUFBMTFGMTdEMjJENTFEMjQ3NjM4M0I4OUZCQkM1OUQKKzoxMEI0MTAwMDQzQ0YwNkU1NDQxOUU4MUJBQkQ4NjcxREVBNDBCODFGQzcKKzoxMEI0MjAwMEVFMjc2REIwRDI3REQ0MkYzNkU4OEZEMzMyMjRGOEYzRDcKKzoxMEI0MzAwMDA1NEY0Rjg3NzY5QzY4QkIwNTVEQUQ1Njc3MEFFMjJCQkEKKzoxMEI0NDAwMDkxMTlFRDlFNzFDQ0E0NEZGQzlDQUU1MkNGRUVCNEIzREIKKzoxMEI0NTAwMDE0REM4RkUzQzRGRURFQkM3MDhBODJGRDc2MkEwQUQ5MzIKKzoxMEI0NjAwMDA3OEUzMjIzMUY1ODREN0E2MDVBQjY4NUQ2MkZGMUMwMDkKKzoxMEI0NzAwMDg0QkU3NUI4Rjg3QUUzNTIyQzI0MTcxRkE0ODI0MjU1NzMKKzoxMEI0ODAwMEEyRjg3MDg4RjU4RkVCRjdGNUY1QzNGMzdBQUZDQjFGMTEKKzoxMEI0OTAwMDQ2M0U2MjFFRDIwRkE1MzA1M0JGNkVERUVBQzUwOUFDMzAKKzoxMEI0QTAwMDVGNDdFNzg1OUVGMTg2RjYyRERFRUIwREZEQkZFMjlCNDMKKzoxMEI0QjAwMDYyNzg3RTZCRTY0RDg2RTdCN0Y5NzMwRDZEMDdEM0U5QzkKKzoxMEI0QzAwMDc1ODQ3Mzg4RTNERDIxRjBBQzdCMkVGNUYyMDBEMkIxRjgKKzoxMEI0RDAwMDRBQUM2Mzg3MjNFNDBEQzIzRTVDRTU1RDRCRkE3OTUzQzkKKzoxMEI0RTAwMEM5NURERTIxNTg4N0QzQ0JFNUNGODFGNjI0OEMxQjM3OEQKKzoxMEI0RjAwMDZEQjU4N0VDMDhBMTlGMEJFMTE3RTlEMDhFODNBNDQ0QkEKKzoxMEI1MDAwMEY5Q0M2MUMyQjM1OUZFQ0NGNkU0REE2Q0IwN0IxMkEwODAKKzoxMEI1MTAwMEYxNjVGNjY1QjI3QkRDRTM2MkRBMzc2NkZCMEQ3NDg0QjUKKzoxMEI1MjAwMDA1RjkzNTVFRDA2QkExRDU0RDdBNjM2QjM1RDg3MzBBQkEKKzoxMEI1MzAwMERBOTc0QkI5QkQ5NEY5NUY4OEFFNDFEMThGNjkxNkIyRTUKKzoxMEI1NDAwMDVCOTc4OUY1NEJGQkVCQUQzNkM2RkE2RjAwN0NDQ0U3MTkKKzoxMEI1NTAwMDc2RDZCMkMyMEJENTdBQkI1QzVFQkI0NTNGRDk4RTJGODcKKzoxMEI1NjAwMERDQUZBQTMxRjQ2OTQ3MzZERjM3MTMwMkZDRjkzMjE3MzIKKzoxMEI1NzAwMEIzQTExRTkyQ0ZCNzY0NzM3REJDNENFOEVEMjUyMEM3MDQKKzoxMEI1ODAwMEM4QjcxNTc4RDVEOUFEQkIwNDlGRUU4QUYwMkIxQkM4ODAKKzoxMEI1OTAwMEQxQ0JFOTUzOEEwREYxMTAyNzlBRkI1OTY4NTdGNjA0NkQKKzoxMEI1QTAwMEM0QjM0NjlEQUNFRTIwMjNGOUZFMDhCMDNCOUJFQzE4REIKKzoxMEI1QjAwMEZBMjlDRDVFRERGQjc1RjQ0N0FBMTNGREU4NUIzOEQ1QUIKKzoxMEI1QzAwMDg2MjdCRTBERjg4QkFGNEVGMDVCN0M1MTdFMjdCRjAzMDQKKzoxMEI1RDAwMERBQzk5OTlDREY2QjUyNUQ3RTdBQUNBOTgzNTM2NzQ3QzkKKzoxMEI1RTAwMEVEQjI2QTYxREY0RDYwQUQyNDA3QzNGQzE4MTdFN0NCRUQKKzoxMEI1RjAwMDkxRkQxOEJFRkZDOEY5OUM2MkZGNjdENjhEN0VFMkJCNDUKKzoxMEI2MDAwMDIwREZGNzJERjA4QjdDNzc3QjhEOTFBRjk2ODc0NkU3MTcKKzoxMEI2MTAwMEIzMUY2NDBCRkJCQTgwMTUxMDlGODVENjExNUYzODQ1QTgKKzoxMEI2MjAwMDlGMUQ5MzgxNUYzODlFODgzRkUyMjU3RTg1QkQ2REI3NjMKKzoxMEI2MzAwMEIxN0UxQkQwRTkwOEQyMUY4MDc0REI1OTIyQUU3MzQwNjMKKzoxMEI2NDAwMDdEODVFNDYyMjA5M0Q5RjU3QzEwMEM1OEQ1QjA4RThFQTAKKzoxMEI2NTAwMDAzNDUyQ0RFMDNGQTY1QzBDRUQyNzY0MUJGMzFFQUYyNTMKKzoxMEI2NjAwMDQ1MUU1OERGNDBBOTMzQjE4MTM2RDVCMEMxNkUzRjAyQzcKKzoxMEI2NzAwMEUzOUU3MkIzMTFFRDdEQjMzQzRDODc3RkEwMUVEODlBMzgKKzoxMEI2ODAwMEY2QUUxN0UxRDk2QTY3QjRERjMzNzZCMTA2RTFEQTJFOTgKKzoxMEI2OTAwMERCREFFRjZBNEFCMTFEMjdEQjFGRUU1NkExRkY5M0YxRkIKKzoxMEI2QTAwMEJDRkQ2MUY2QTVERDVBMkFEMThCRjgyQTQxRDAyMzQxOTEKKzoxMEI2QjAwMERBRUYzMzc0NzgwNTNBQjg5MjczNjg5RjcxOTlGMDZEMzgKKzoxMEI2QzAwMEI2RUJBNTlFMzBFRkMzRTY3OTdGMjdGNzAzNDFBNzkxM0MKKzoxMEI2RDAwMEQ2M0QwQzVFNjBDRDJGOEYyRTE3RUZBMzVDQjhDMDVGRjgKKzoxMEI2RTAwMEQ2Q0JDNUYwNzFGQUM5N0VBRjE1RUJCNjI0M0M5RjE2RDgKKzoxMEI2RjAwMDhBRTE0NzQ2RjBCRkNFRkU3QkJEQkYwMDc4M0VBNEEwRTYKKzoxMEI3MDAwMEREQUJDMkRCQjMxOTU3MUQzMDhFNTJGOERBQkZBM0ZFOTIKKzoxMEI3MTAwMDU3NzY2QkUzMTA4RjU2RTg4MDdBREVDRTQyMDQ4Rjk0MjIKKzoxMEI3MjAwMEQ3MzhFNDAzMkJFMkJEOUY5RTgzRkUxRDUyQTZFMDIwODYKKzoxMEI3MzAwMDc1MUVFNDVGMDVGQTVGNDJGQzVDRTkzRTU5Q0VGNURBMUUKKzoxMEI3NDAwMDBBQjFGRjU1RTA5NDMwNUU0NTE3MkI0NUZGM0M2RTREMjYKKzoxMEI3NTAwMEQzODE2REE4RTc1NDI3NUExNDcwRkY0MjI5QzIwN0NGM0UKKzoxMEI3NjAwMDU1Mjc1RDJGQTg0ODM3RTA2NzgzREU3OUE5RTQ0RkJGRUUKKzoxMEI3NzAwMDc5MENERUVCMUNCMEZBOUQzMDZFNjdFMEM3MENFREVFODUKKzoxMEI3ODAwMDhCMzM5ODFGMTdERDgxMUQwMUJFRkE5MDY3QTFDMzg3MTcKKzoxMEI3OTAwMDcyRDM3RkJDNjMxQTYzQTdEQUQ4NDA5OTdEMzhCQzAzQTMKKzoxMEI3QTAwMDJGQzczOTdDQjBEODkwOTYzNEYzNTkxOEE3QUJEMEU5OUQKKzoxMEI3QjAwMDQxN0JFRTlEOEQ1NjA3RDI2OTYwNzM4Mzg2QzgzODkxQjAKKzoxMEI3QzAwMEEyRjUyOTcwQkZDQjE2NjJFOERGM0IzNkI2MkY0NEZFRTgKKzoxMEI3RDAwMDNFNjFEN0ZDRTNFMERBQjU1OUJCMUJGRDEwRDVCN0I4MjUKKzoxMEI3RTAwMDNDMURFMDNGRDA2NTJCMEZDN0Q4OUZEN0U3NzA3RkU3QTAKKzoxMEI3RjAwMEFEOTdFRUE0RjUxRjQ5NzFGOEUzNjBEQzIxOEM2RjAwNzIKKzoxMEI4MDAwMEZEOEVEODc3QTZGOTcxREM0REZGMkQwREM3M0ZCMjY2Q0UKKzoxMEI4MTAwMEFCRkY2NTgwRUJDODI2Mjc3QTUyRUNDODFFNTcwRDhFMDkKKzoxMEI4MjAwMDdCNjQ2RUIzNzdBRDZFN0NEN0Y1OEU1NkJDM0YzMEM5NjYKKzoxMEI4MzAwMEUxOTg0MkVCNzkyRkQxOEJFQkQ5OTgzQjFFNzlCMzMzNEEKKzoxMEI4NDAwMEM1MzFCOTA5OUZBRjZENjZCODVFODc3N0E3MUREN0U3ODkKKzoxMEI4NTAwMEIyQjFEREI4QkY3Q0M5N0JFMUNEMDJGNDk3N0M5NkQ5NEIKKzoxMEI4NjAwMEI3NDBGRkZGRUEwRkREOUE4M0ZFQzk4NjUzMEI1MTJGQzUKKzoxMEI4NzAwMDM5Q0E5MkI2RTBCNTUzQzAyOUY3MkI0OURGQTE5NDQ2RTcKKzoxMEI4ODAwMDE3RUU2MzlEQUI5Qjc4MUNDNjZCNjkyMDNBQTY1ODgyNjUKKzoxMEI4OTAwMEI4MUY3NTA2RDZCOEE2Q0ZFMEY3OUJDNzBDQzc0QjI3RDUKKzoxMEI4QTAwMEM2NUQ2NjIxOUM2QkJENkJCM0IwREY4NzZEMjFFODM3NDkKKzoxMEI4QjAwMDM0RDc1OTEzMEI4RkNEMzk1QzhGQjlEQTlCMzMzNjAwRUYKKzoxMEI4QzAwMERDOUQ3QjVDMUVDNDRGQTcxMkRBREQwMDc4RDVEMkREOEIKKzoxMEI4RDAwMEZFMjc3Q0MzREZGQjgxNzg0RkYyMDdEMDg5RTQ3MDdEQkYKKzoxMEI4RTAwMENFQTQzRDlBMERFRDU1NEU0N0MwOEJDQkFFRDM5QjA3RjIKKzoxMEI4RjAwMDY3OTVBRUNCRDFFRDkzQzNFNjRERTkyNDdERDFBOTcwMTgKKzoxMEI5MDAwMEI5RkU0MTRFQ0UxRTBEQzZDOUY1ODdFRUNCODFGOThFMkMKKzoxMEI5MTAwMDc0ODFBQ0NEQTI3NTRFNDY3QjdGMjRGOTE5MTJDRjNCQzIKKzoxMEI5MjAwMDM3QzFCQTYzQzhGRkQwNkEyQkJCNjEyQ0JGNUUwN0Q3OTMKKzoxMEI5MzAwMEU5OUJBRDkzOTUxOEY4MTk5QURCOTQ4MTcxQUEyM0YwQ0QKKzoxMEI5NDAwMERDMDJFMzBDRUQ3MUYxMkJEQ0NGNDBGRTFBODEzRkYzRkEKKzoxMEI5NTAwMDcyQjhCRUNGOUExOUVDQzZGNUIyMTk3RThBRjNCRDk5QkEKKzoxMEI5NjAwMDFERUNBMTM2NkJGNTYyRkIwQkMwQkY4RjdENEVGODk3QzcKKzoxMEI5NzAwMEIxNDlDMEFGQ0ZDQ0RDQTM4MTRCQ0EzQ0UzMEM3NkVCMjIKKzoxMEI5ODAwMDQ4RkI2NzkwMEREOTcwM0ZERTU0RjJBNzE2RjQwN0JBNTIKKzoxMEI5OTAwMEIzMUMzRUE3MkUyRTI4RURFODI1OTk1Q0JGMDVBNzlENzgKKzoxMEI5QTAwMENEODM5RDlCNTVDRDU4NEJGRTBERDhDQjE0MUZGNEMwQjUKKzoxMEI5QjAwMDZGQUNGODYwMTBFMzgxM0E3REI4QzRENDk2RjZFOUJGNjUKKzoxMEI5QzAwMEU2MDhGQjQ1RDhDOUE5QkU5REMxRjlFODdGQkM2MUY1NzEKKzoxMEI5RDAwMDg3MDE2RjY5RjgwMkI0MkIxNzJCNjFCNEQ3Mzc5NUZDMzgKKzoxMEI5RTAwMDMzRDlGMTRDRDg3MTRCMDQ5Q0JGNkM3M0IxQjI2OTJDNDQKKzoxMEI5RjAwMEUyQ0ZBRDEwRjcxMzVBNEUzRDhFRkU3NTAyQzYzRjMxQjEKKzoxMEJBMDAwMDVFREJFMkY0NTFGQzA1ODkwRkYzNTc4OUY1NDlCRjhFREYKKzoxMEJBMTAwMEVDNDg1OENGOEExNjExMDc2NUJCQjhCRUIxMDZGMjkxNDMKKzoxMEJBMjAwMDFGNjAxRDA2QkYyNEM4NEM3RUM4NkFCQkMxOUZBQjM1RDIKKzoxMEJBMzAwMEQ5MEY2NkJGQTFDQTY0MzdFQzQwREIwOUVENDI1QjlGQkEKKzoxMEJBNDAwMDBCRjlFOUZEMTkzOTQ3MzI3Q0Y0NThFQjk3RjYzREY0RDAKKzoxMEJBNTAwMDBCMTUwRTZFMTlEMkVEM0Y4MzQyRkZGQ0FDNEQzRDgxQkMKKzoxMEJBNjAwMEZBNjg0QkYwMzExN0M2RTFCQjZENjExN0VBOTNFRUYyNEQKKzoxMEJBNzAwMDdCMTM5MUVGQkFFQkFDRTVDODZGMDM2REU1RDRFRkFEODYKKzoxMEJBODAwMEI2MjA1RDZEQjk1QzZGNTRGQUQ1OEY3MDNGOTFGNjU5NTEKKzoxMEJBOTAwMDU1NzlFOTg5MEUxRDVEMkJENUFGOUNFOEQwQzE1RjUxNkEKKzoxMEJBQTAwMDU4Njk2ODRCRkVBQUIwQjJENkJFMThGQjRCNUVBRThDOEUKKzoxMEJBQjAwMEJCQThDQzYwOEY1QTlGRjI4NzYyRUMxN0YyMUFDRjZDNEEKKzoxMEJBQzAwMEVGRUJGMTM4MkVENzY4RjczRTMwNjNGRUQ4RDFFQzE5OTIKKzoxMEJBRDAwMEI5NEU4OTFGQjk3RUY5N0MyNDc4RkYyMzQ3RkEyNzlGNDYKKzoxMEJBRTAwMDBEREVDQzRGMDhBRjE5NEUwOUZGNDhGRDJCNzAxMzlCOUMKKzoxMEJBRjAwMDg0RjA3NkFDRDA2NjIwMUQ0Mzg1Qjk4MEU3QUEzMjY1MTQKKzoxMEJCMDAwMDBCRTY2NTdFMjZFMjk1M0YwQjI0ODYzNTgwRTdENTRDMTMKKzoxMEJCMTAwMDFFRkY4QzZGRTE3RTY1N0M1OUU1NDJEQzlGM0UyOUJEQUUKKzoxMEJCMjAwMEVGMjg1NDQ4M0VBQjAzNEE1ODg1N0ZERTJDRkNENTVGOTYKKzoxMEJCMzAwMDY2MzJDQTNGODBCQ0JFOTkwOEVENUZDQ0I1RjMzODMyOUYKKzoxMEJCNDAwMDUzMTdERjM2M0JFQUE3QzZEN0YxRkNDNDBFMDdGM0Y3NUQKKzoxMEJCNTAwMEUzN0IzN0JBRkQ5QkUxRkUzMjI5N0YzNUM2M0M0NDc1NTUKKzoxMEJCNjAwMEI1RERCMENGNTQ5OEYyMEVGMUE2N0Q2Njc5QUVCMEJCQ0MKKzoxMEJCNzAwMDY3MDNERUE3NDRGMTNFOTJGRjMxMTI5RjMwREI4NTNDMjQKKzoxMEJCODAwMDhDOEI5OUYxNzM4RjA5M0Y2NjdGQTdFMjc5OTM3QzVDNzgKKzoxMEJCOTAwMEExREY3M0EwMkJFRkQ1NjRCNDMzQ0ExNEZGMzRBNDFGMDQKKzoxMEJCQTAwMDNFODJGN0UyRDU4Mzk0MEVEOTIxRTU0OEY4N0IzMjVGRDcKKzoxMEJCQjAwMEI1NjM2OTE1Rjk3QjZGQTEzRDMwOTZGMjREOTMzMTVFMDcKKzoxMEJCQzAwMDJEQzc5NzdFNUVBRTVGRkQ0NjZFRkVDODcwMEM4QUY3OEQKKzoxMEJCRDAwMEI2NTZDNkI2MTMwNkQxNEU5OEM1QUZEN0MxNzVGQUQyQzAKKzoxMEJCRTAwMDA1NjlCMUVDODRDMTIyNjEyN0MwNzNCNDBGMDZGNzk0RDQKKzoxMEJCRjAwMEYzNkI5MUQxNEU2MEU1Qjk5N0MxQ0IyNjVBNkZEQ0I0OTcKKzoxMEJDMDAwMEJDQjFCMUU0NkU3MDU2RThFMURDMDlEMTc2NDI2NjJCMzYKKzoxMEJDMTAwMDJCRDNFMUZEQUJEOUVBM0ZFMjdBMkI0NTFDNDJDRTA3OUMKKzoxMEJDMjAwMEZBRkRCMERFMEUzM0NGNzcyOEM3QzNGMTVDM0U5RUY0MzkKKzoxMEJDMzAwMDg1QkM1RThFN0UzNjRGMkI0MzNFN0JDMEFFRDZBMEJEMEMKKzoxMEJDNDAwMDY3OEUyN0ZEMzA5N0RCODk1RDE5NkEwQjNFNjdFRTlDOTYKKzoxMEJDNTAwMENCOENCQjQ5QzZBQjMzQjMyN0YyRjQwM0M1N0Q0Q0ZFOTYKKzoxMEJDNjAwMEEwRjQ5RkY2RTNDM0ZDQTg1RjY4RjM3MEJGMzAzRUY1MTUKKzoxMEJDNzAwMEMyNjEwRjNDNUE5NzFCN0ExRUYxMzVGNzQyNThCMzgwQzgKKzoxMEJDODAwMERDMzkxNzJCNjQzRjM5NTMxOUQ5M0Q1N0VDODc1RDYxNzcKKzoxMEJDOTAwMEJGMkUxNDZBRTBFN0FEOEQzQzFFNUY5QTZEQTM3NjdDRTMKKzoxMEJDQTAwMEM4N0E4MEY2MDU1MzFDMjc1RTdEOEZGQ0IwMjU2MDA3OUYKKzoxMEJDQjAwMDg4QjgwREQ5NTNDNzg1M0QxNTY0QURFNEVGQjlFRDYxODIKKzoxMEJDQzAwMDE3QzYyQkNDNzE5QjlBNTQ0QkZGNzREMEVCMzU4NTE3NUMKKzoxMEJDRDAwMEFBN0QzM0U5N0Q0M0RDQTdDNjk3NzE3ODgyNzhFRTgxMkYKKzoxMEJDRTAwMEVCOTIyMDhGMDMyREMzMzgxMDhFNUYxREVFQ0FDMDNDMkYKKzoxMEJDRjAwMDlDREZFNjU3MTlGN0YzRDBCRTU4REU3NDdGRDZDM0JFN0IKKzoxMEJEMDAwMEFCMTcwNzkyRjEyNTY5MkY0QTdCMDZGNDRCRDc3OEE0MkQKKzoxMEJEMTAwMENCMDJDNTQ3QkVCRjI5NEU2NDhFMEJDOUI4OEMzOTdFOTUKKzoxMEJEMjAwMDY0OEUxNzdEOUM5QjRFRjQ5MEY2OTc4Q0ZGN0M5NDZCRjEKKzoxMEJEMzAwMEI0QzNBQzMwMzdGNkVCMkU4MjJEMTVFNEJCREJDRUQyOEMKKzoxMEJENDAwMDc2Q0VFMEYxMURCNDk3OEU5NEZFQzQ4M0Y2ODUzNUNGOTAKKzoxMEJENTAwMDE0RTdCQ0MyRkRBRDEzRjZBMTMzQjhBRkJFMTI2NzQ3RkUKKzoxMEJENjAwMDdCM0JFODBENTEzQzcxODk2Mjk0OTNDOTc5N0M5RkYzQzgKKzoxMEJENzAwMEU0QjlGOTNDMjI4RkRDRDlCNjQxQkVBRkExQkUwOUE2MTkKKzoxMEJEODAwMDNBQzI3MTRBNzQxQzU2OTg3RjQ1RjI5NDlDQUQ0RUNBRDMKKzoxMEJEOTAwMENCMjc3RjI0MTVBRkNDMEZGRTQ4MTZGQTIzMUVDRURGMkIKKzoxMEJEQTAwMDg1MTM2ODNENEM5REMwQ0VFOEYzQzYwMkVFMDgxQzJFRkMKKzoxMEJEQjAwMEYwNUJCMjNFRjlGQzI5ODhFN0ZDRTgzQzk3QzNEQjhFRDgKKzoxMEJEQzAwMDkyNjI5NzAzRTMxMTQwNjMyQkU3MkI0RjI0N0U5RjgxMDAKKzoxMEJERDAwMDcxOUQ3NTNFQkQ1RDUxOEY3OThCNUNCNDNCNzk1RTQzM0YKKzoxMEJERTAwMERFRDdDNUNGNkRDOEJGRjFBOTIxMzUxODYzNUY1RDk1NUEKKzoxMEJERjAwMDY3MzFFNDRGMjNGMUY3NEM0NkY5MjIzOThFOEQ3OTM3QkMKKzoxMEJFMDAwMDkxMUNBMEFDNEE3OEFDMzFFMkY0MDJERUQ1NDIwRTAwQkYKKzoxMEJFMTAwMEUxMkUyN0IwNENEMzRFMkJFMzc1MDk1QzRFNjQzRUMyMzUKKzoxMEJFMjAwMDU2MTQyQzRGODdGNTM2NkQ1MzI4NkZDQ0I0OUFDMzY4REYKKzoxMEJFMzAwMERGQUYxMUNGMUQyMkZFNjZDRTIzQUQxMTc5MTg2NjVERUUKKzoxMEJFNDAwMDQ3NzZEQUVBODc4Q0Y5QjVDNjFFNjNEQjZDOTdDQjc4NDgKKzoxMEJFNTAwMEJGMEQ4MDQ0QjhEQjI0OUQ0MEMxNUI0N0M3QzM3RTVBRjkKKzoxMEJFNjAwMEU3NUYyOTFFMjQxRjJFQ0VGREFBMTdFQjVBM0FFMzQyQTQKKzoxMEJFNzAwMEJCMUIzMEFGRERFQkEyNzgwOEY5OTAyODJGRkRGMDBCNEIKKzoxMEJFODAwMEVCRDlCNkI3RjAzMTVDQ0ZGNjNDMkI5NzdCODVEN0I5QjEKKzoxMEJFOTAwMDFDNEU3OUQ4MzVBNEUzQjdFRDgyQ0Y2NkU1Rjk3OERDOUUKKzoxMEJFQTAwMDA1RjcyNTUwODkyQzM1OTlFNDQ4RDZCNTFDNDlFMTc2MkIKKzoxMEJFQjAwMEE1MjNDMEVEQzZBN0E2QkVCQzk0RTc1RDc5N0Q0QjY2MDEKKzoxMEJFQzAwMDIwNUFERjUyMEFGOEM5MTJGOEM5OUNCNkRBREYwRkQ3MzgKKzoxMEJFRDAwMEFDMDBBRjRCOUFGMUFDRDE1RkJEMzVEMzY4NTc2NjlBRDEKKzoxMEJFRTAwMEZENTU1M0ZCNDA1RUVDQkE5NjY4OUU0REM0REQwNUZDRTMKKzoxMEJFRjAwMDY2QjlGQTVFMUJDRkI3RkMzM0Y4QUQ3ODdEQUFDRDQzQTcKKzoxMEJGMDAwMEQ3RUZCNzc5RTlEQUQ3RTYyMzNCRUQ5OUI2NENCQTRBRDEKKzoxMEJGMTAwMEJDM0Y2MDBGRDY2MzVFNEJDNjIxNjU3Q0JDM0Y4RkZCODgKKzoxMEJGMjAwMDZGMkNDMEUxQTgxMDZCNTk2ODRENEQ0NDNDMUYwRDcwM0IKKzoxMEJGMzAwMEJCNzBBNEZEQTVBQURDMTgwN0JEM0Q2OENDRUYyREFGRjIKKzoxMEJGNDAwMDMxRTZGN0VFOUJBOUJFOTQwN0YwMjRDQ0Y0REE0M0JBQUQKKzoxMEJGNTAwMDdDRDQxQUIxRkUxRDBGRjM3QzkzMUNGRkU4MzczOURENEEKKzoxMEJGNjAwMDY1RkI5QzU4RkZDRjA0NUYyNEJDOUM2MkY3MDFCMTJBOUIKKzoxMEJGNzAwMDFGQUFCQzE5RTNGNkNDOTM3MzQ1RjZFMDJGODU1QzI2MjcKKzoxMEJGODAwMDZDRjZEODMxMkU1NEQ5QkZDMjgxRTNBQ0Q5MERFM0I4RDkKKzoxMEJGOTAwMEFGN0M5Q0FENjkxM0QzOENGOTg1QUZERDgxNzAxQzhEQUUKKzoxMEJGQTAwMEU0MTc1QUVGQzBGQ0MyNTE5MTVGRjg0M0RFQkRERjQxOTgKKzoxMEJGQjAwMDNGNkI1NjlFN0ExQUY1ODYyQjRGM0Q4M0Y4Rjg4M0QwNTcKKzoxMEJGQzAwMDlCRDAzRUE3NkZDM0NGRUI0OTEzNDc4REUzRkYyMTJGRDMKKzoxMEJGRDAwMDdGNzgxQ0RGQkE0MDY5OEQ1NUQ3RjJBMTkwMTdEMDVCRUUKKzoxMEJGRTAwMDE3NzExRUU2OEFDNEQxM0VFMDZEQUU4RkUyRjIzOTdFNTMKKzoxMEJGRjAwMERBN0ZDOTVBNzA5Q0Y2MUZCMzk2Njc2MkQ4RjMyQzVGM0MKKzoxMEMwMDAwMDkxNzFCOThGNDkwRjdBQTUxRTBDNUU4QTM1OUVENTU5NUMKKzoxMEMwMTAwMDM5MTlGMTdEQ0VDRUVCNjJDQ0UzQzVFNTNCMjQ3Q0NFNzUKKzoxMEMwMjAwMDdDN0MzRjM1MDI1RjVDN0U3RTc0QkMxRDgwODMwMUE0RjYKKzoxMEMwMzAwMDkzQ0Q5MzQ4Nzk0RDc2MzdFNTNGMjUxRjI1RDQ3QjZFMDgKKzoxMEMwNDAwMEMzQkEwNTcwMkMxOUVFMkYwOUNGNzk2RUNCQzMzOENFNDkKKzoxMEMwNTAwMENGQTdGODlGNjAyM0QzRjVCNzgyQkZDRTBCRjkzQTg3RkQKKzoxMEMwNjAwMEYyMDU3Mjc0NDZDOEQ3Mjk5NDJGQjg5RTE0RjJGNUVCRTYKKzoxMEMwNzAwMDM2M0ZCNTdGRDk1NjQ4RURFMzZEMkFCNTdGREU1NjRFODMKKzoxMEMwODAwMEQ3QzFCNjIwRERGRjU5NUIwREI1M0JEQjQyNzQzRDVBOEQKKzoxMEMwOTAwMEY2RDhDREI4RUY3Q0YwM0Q4NUY0RjE0OEYwRENGNUI4OEEKKzoxMEMwQTAwMEQ1MjAzRjJEN0IxMzBDRjJCNkY2QTFGMTg2RjZFQTFFRTEKKzoxMEMwQjAwMDYzRkVCQ0IxNjM4QUExQkQ2QTgzMzE3RkJFQjJENTk4RUQKKzoxMEMwQzAwMDNGQUY2RDk5NjM5ODZGNDU2ODgxNDk5RTZGMzVDOTdCMTUKKzoxMEMwRDAwMDk1QTFCRDMwOUZEQjg5NTVFNUI1ODZGNzlDREU0NjQzQ0IKKzoxMEMwRTAwMEJGODRBNTJDMTQ4QkZFQjdFNUYzQjhDOUNCMjVDNTYzNzcKKzoxMEMwRjAwMDg3NDY4OTczMzgzNkRDRkEzNkRBMjc5MUI2MkRDNEQwRjQKKzoxMEMxMDAwMDlFNzc2QzU4NDJGNzFGODhFM0ZCOURGOUJEMjZDMUFGQUYKKzoxMEMxMTAwMDlENjVBQjgzRjMxOURBNDU4QkFDN0FCQkU3OUU1OUExRDkKKzoxMEMxMjAwMEU1RjkzQTdGRDBFMUU1RkVEOEM1QTlENTU2MkZGMEQxODMKKzoxMEMxMzAwMEQyQjJGNzVFQkQwRUY4MjgzNEMwQzhFRjUxQzFEQ0YzQUYKKzoxMEMxNDAwMDgyMUQ1Q0Q4QkE2QkMxNzVEMEFFRDZENjFCRkNDN0UyRDcKKzoxMEMxNTAwMDk2ODNBRjgwRjhCMjQwRDlEMUY2NjQ3ODNGM0YzQkQ0QTQKKzoxMEMxNjAwMDg0RTM5Nzc4MkZCQzgyRUZDRjVGOUM2RDQzMzY3RjIwQUUKKzoxMEMxNzAwMDg5OTEzRDdBMkVDRDExM0UxMDgzMUZFRTE3NzBDQkZDQjYKKzoxMEMxODAwMEQ1MjdEREE3Q0Q3OUZBOEM0QzU2OEE3MUU0OENDQzBCN0YKKzoxMEMxOTAwMEE1QThEN0EwQUQ2MkZFRUJFMEFDRDBGRDA4MUZEQzU3MzAKKzoxMEMxQTAwMDUxNEYzRTkwQjUzNjAzRjc5MzkxRjI0NjhGRTQxQkUzNkYKKzoxMEMxQjAwMDA5MTJBRTFEMjUxQzlFQTMyMkJGMzA2NENBMkZFOEUyREYKKzoxMEMxQzAwMDA5RURGOUEzQzQxM0NFODlGNzg2QkUxRDNCOUU3MDRFQzAKKzoxMEMxRDAwMEU0MURDRUM5QkNDM0MzNTUzMUYzMEVFNzE2OEE3ODAyRkQKKzoxMEMxRTAwMDNDQzczOEMyQjkzRDM1RkNCQTcwRjRCQzgzNUMxRkVDNjcKKzoxMEMxRjAwMDQ3N0JGMjBENzkwNzYxRTc4QkI4RjlFMDJDNzUyRjNFOEMKKzoxMEMyMDAwMEZGNkFCNkRBOEJENzNGNjZBOUZCMTA4RjQ3NzVGOTRGRTcKKzoxMEMyMTAwMENGNDQ1REZFQjNFQzI3ODZGQ0U3QTE5Q0QwOTNGOTNDQUMKKzoxMEMyMjAwMDZGQ0REMEFGNkFEN0Q4NTBEQzE0Q0NDNzA2RUY4OUM1MjQKKzoxMEMyMzAwMEM3Q0ZFNENCRjg2MkZGNjdDQUNGRUFGMkE4OTY0QjM3QzQKKzoxMEMyNDAwMEIxMkJDRTAzNUM3MUJGNDI1RTk3NjJCNjZGMTIxMDIzQjIKKzoxMEMyNTAwMEUzQTI3NkRGRDM3OUExOUYyMERFM0E5MjlFRjNGMUZBMzIKKzoxMEMyNjAwMDJCNEI3NEZGNDBFNTM3ODIzRDY0OUU0RjhFODdGQTBBNjAKKzoxMEMyNzAwMEY1RDYyMDQ4MENFRTMzREI5MzJFRDRBMTlGNzI0Q0QwMjAKKzoxMEMyODAwMEQzN0MzRDlFMkZFOEM5M0NDOTQ4REZBN0YzODJCRjIwN0QKKzoxMEMyOTAwMEZERjM2QzlGOEZFQURBQzRGRDJCODVFMzQ5NDdGMDZEMEYKKzoxMEMyQTAwMEI0NjMzQjFCQURCRTAzREM2RUE3QjhDNTBEODFBNDcwQTMKKzoxMEMyQjAwMEI3MkUxRjdDMTFGN0NCN0M4QzNGMEU0RDc1MDBCRERCN0MKKzoxMEMyQzAwMDQzQUZCOEIxMUVGQzlEQkQzNkFDODg2MURGNERENEVDRTgKKzoxMEMyRDAwMDQ4RkY5QTRDQkVCRkNERjc4NkJFMzQzNDhBOUMwMzNGREMKKzoxMEMyRTAwMDhDQjc3ODA5MEU4QkE1OTBDRkNBQUY5QTgyNTc3M0ZGOEYKKzoxMEMyRjAwMDgxQkRFRjRGRjBDMTc4REZFREU1RjlBRjFCN0E1N0JCOTkKKzoxMEMzMDAwMDFBNzVFM0RGMzA1QkVDOTdDODMzNzk5ODlGNTRDMjU4QjUKKzoxMEMzMTAwMEE4NUUxMzc4RUZDRDAyQ0NBRkY4MkMxNEU3Nzg2N0UzNzIKKzoxMEMzMjAwMDA3Qzc5NjYzREM1MUI1NTJEQ0YxOUQ4RDE3QTk3RERDMDIKKzoxMEMzMzAwMDY3Qzk0NUYyQkRFM0ZEN0ZDN0IwRkYwRERGNUMzMzkxRjgKKzoxMEMzNDAwMEZCMkQxQzFGQUIzNkU2M0VEOTlENEU3OTMxQzc2Qzk4NEMKKzoxMEMzNTAwMEU3Qjg3QTMxNzFDQThDNjhGRTZDOTVDMjgyQjFFQzk4RUMKKzoxMEMzNjAwMEM5QjMzOUZGMkY1MjVCRUY0MEI4MTY4NTlDMENFQjlDOEMKKzoxMEMzNzAwMDhGMzc2QzdEMUJEQkRGMkQ1NTdDNTZGNEVCMzNGOTNDOUUKKzoxMEMzODAwMDM1N0I2RDU0NEYwQkY4NTk4N0VEMzdGQzA5MENFNzlENTEKKzoxMEMzOTAwMDFGM0E2OEMzRkUxRjY2MjlFQzNBRTUyQUUyNTVCRDM4MEMKKzoxMEMzQTAwMDAxRTVGMDFERTRCRjE4RjA1Rjk0RjIyQkU0NjhCQTBEQ0MKKzoxMEMzQjAwMEU0M0UwN0YxN0ZEOEFEOEY1MzRBN0VEMkYyRDRDQ0Q5NzgKKzoxMEMzQzAwMDE0RjcwQkI1MDRDOUNFNUQ3QTE5RkI3NDMzQUZEM0ZFRjUKKzoxMEMzRDAwMERFMDUxQkU2MUVFMjFGNkY5RDg0RjFBNTYxNzA4RTAwRDUKKzoxMEMzRTAwMDVGOTFBMEZCMUZGMzc5MUNGMzg2NUVEQjlCNUY0MTdFQjAKKzoxMEMzRjAwMERFNjhBNzNBODQ1OTc5QzEzOUIzRjVGRUQ2NTVERTM3RTAKKzoxMEM0MDAwMDY0RkREQTQwMjEzRjhGMDBFNjM0Q0QwM0YwNjZEQTAwQTgKKzoxMEM0MTAwMDhFMzgyNURFQUY3MUI5QTJGODlDNEJFQzdGRDA0RjFENTIKKzoxMEM0MjAwMDBCRkQ1NkIxQkU3RThDRjMzMTlCQkFEMzhBRjFDMzIyODkKKzoxMEM0MzAwMDNCRjlDN0NCNTdEQTEzOTEyRUQxN0M5OURGRTA2Rjk4ODcKKzoxMEM0NDAwMEFGNjczMDNGNDY3NTFBMkVCQTBFODA5RjhERjkxMkZDRTkKKzoxMEM0NTAwMDAxNEIxQzFFREE4NERERUY3RjQ0OUQwQTcyMkZFQTRBRUQKKzoxMEM0NjAwMEVGM0Y3NEVCMjM1ODU3N0FDQ0MyREI3NzFEQkFGNUZBNEQKKzoxMEM0NzAwMENEQjBBNDMzOTM1QjhGREQwRUVCRUFERUE1RjgzN0Y5ODAKKzoxMEM0ODAwMEYwQkE3Rjc3MjM5RUFGRDhBMEY4Q0JBMTZCN0RGRjhENEMKKzoxMEM0OTAwMEY1OTg2MjZDRUU3MjkyOEQ3RjdBREJGRDM3MjNCRjVFN0EKKzoxMEM0QTAwMEY0MzIwRkYyRjNGMjE0Q0VDRjREODMyQzZDODFGNjJEQzMKKzoxMEM0QjAwMDNEQkIyOEVGMTkxQ0I0NTFERDlBQ0NDQjlFNENFMTc5RTEKKzoxMEM0QzAwMEQ5N0Y2OEVCMjdCOEQxQUY1RDM4OUJCQkQ4RjgzM0NFQTYKKzoxMEM0RDAwMDBGNzA2MDFDQjVDQzQ2RjlEMkYxQ0NEMzg5RkI0QkJDQjQKKzoxMEM0RTAwMDlBNUVDQUVENjk4RjgzRjIzQzhCMTlGQjBFQzY3OTM2RDIKKzoxMEM0RjAwMDcwQkZCOTQ4RDQ0NUNBM0MxNjNCQ0JGRERCMTZGODQ1QTYKKzoxMEM1MDAwMDdEMzJCRURDRTgxRkU3OUJGQzVGQTlERkNDRjkxNkUwQkIKKzoxMEM1MTAwMDdGMERFRjc3Q0U0RTM0QzRFQjQ2OEFEQkNCRUJCMzYwQjYKKzoxMEM1MjAwMDQ3RTBGQTlFMTM3OURDNDM2MEFGNjMzRUYzQzc2MEFGMjgKKzoxMEM1MzAwMEUzRjU3OUIwRDdGMUZFOEI2MEFGRTNCNTFGRUM3NUJDQzYKKzoxMEM1NDAwMEJFMENGNjNBNUUwRjgzQkQ4RUQ3RDdDMDVFQzdFQkVCNEQKKzoxMEM1NTAwMDYwQUZFMzdCRkYwQkVDNzVCQ0JFMDFGNjNBREU3Rjc2ODUKKzoxMEM1NjAwMDJFREZGRjNBQTczOUMyOUIwMURFNEUzQkZCMzVGMjk1MjkKKzoxMEM1NzAwMDU2MkFGMkMyMjI0RkI2MkQ2OTNBRURFRkFFOEY4MENCMkMKKzoxMEM1ODAwMEMxOUUxQTUwNDI3NzIxM0RCNDM0MTdGNTFCNDhCQ0YwQzgKKzoxMEM1OTAwMDFGRkYxN0RCREJEMkM5MEY2MTM2REZBMTIxNzhBRkUzQzQKKzoxMEM1QTAwMDFCRTlGRTZFNjg3NjM5MThFOUZCNTM0Nzk5NDcwMTdCMTIKKzoxMEM1QjAwMEU2RkNFRENBNEM4Q0EzOUVCOTRERTlDM0Y2QzA2RDBBRUEKKzoxMEM1QzAwMEQ5MTNEMzUxRjQ3MkEyRkI2OEYxRkJCRTAzQjg5RkI1MzcKKzoxMEM1RDAwMDI3MzJDMThGNEZGNkFBQzA3RkU3MTEzNkU0NTcyREE5NDUKKzoxMEM1RTAwMDFFRkREMjc5NEVEOTFFNTM4RkNGMUIzNzI4QzI0RjFENDcKKzoxMEM1RjAwMEI3NEY4NTM1NkM1M0U0RkJBOUJERDhCRjQzQkUyRkRBRDYKKzoxMEM2MDAwMDgzMTZGOUZFQkFCREU4MjcxRjhCQ0NCN0JBNTY0RDg1MDUKKzoxMEM2MTAwMDc2ODY3Q0JFQjYwRUM3M0YxNUE5QUI5QkI3MTJERjFGNEYKKzoxMEM2MjAwMDg4OEMzRkJCMTdERjNGOTMyNkM3QkZCMzk2REE3NkQ5MTYKKzoxMEM2MzAwMEZFQTc5NUQ0OUVDMEZCQ0Y3QUUxQkE0N0IxNkVFNTZBRkEKKzoxMEM2NDAwMDhGRDcxRUUyRkIxRkVDNjNBQTNFOUZCM0E5RDg0QUZCMUIKKzoxMEM2NTAwMDlFQUUxRTlDRTI2RTMyQ0Y2RjQ5NzA0RkJCOTI3OEE5OUUKKzoxMEM2NjAwMDJFQ0Y0RkYxNTI5OENGOEU3MkY2RjVEMkE0QzlBODc3OEIKKzoxMEM2NzAwMDRGQTVGOTYzRkEyOUU1QzU5MUZBNTY2M0ZDNTQ1NTc4M0MKKzoxMEM2ODAwMEJEQkQ4Nzg1QjAzRTNFNUVEQzhGRUZFMTc1RjQ4RTRDMUMKKzoxMEM2OTAwMERCQjAzQUZBMkI4OTI3Q0FCQTA3MTk0RkFDNTkzRDdBNTEKKzoxMEM2QTAwMDNDQjFBNkQ0MTg0RjVDMjU5RThGMTQ0RjVDNjU4QTI3MzkKKzoxMEM2QjAwMEFFRDg2OENBNDM4NDNFNTkzQ0IxOEVGNURCRDEwRjYzRDYKKzoxMEM2QzAwMEFBNDI3MjU0RTdFOTdCNzUyMkZBRkI2NzdEMTQ0RjY0MzYKKzoxMEM2RDAwMEJFRDcyOURFMkFDRjRGRTBGRjJEQjNGMUJDMTk2RjlGRTMKKzoxMEM2RTAwMEJGNUJGMUEyNUZEMTdEQjczMjExQUYyN0VGNTYyNkExMTQKKzoxMEM2RjAwMDdDOURCRDVCRjFBMEJDN0Q1ODkwNDFGOENGRkY4REZGQzQKKzoxMEM3MDAwMDc1MUZFRUI3NUU4QjlGQTMyM0Y4MDJBNjJBODJBQjkzMTgKKzoxMEM3MTAwMDdDREQzMENFQTlCQjk1NzFGOEZFQ0FGQkQyMURDODBGRDcKKzoxMEM3MjAwMDYwNzcwQTdFQjRFRTQ1RkVCNDI2Mjg4Njc2REU2NEM5QkMKKzoxMEM3MzAwMDhGRTE0NzUwM0VFNjhEMTc2RDZERjk1RTk0OUY1Mjg3RUQKKzoxMEM3NDAwMDdDN0YzM0I1NTc4NDE0RDFGRkVCN0I1MUJGMUM5QjJGRUIKKzoxMEM3NTAwMEZCNEZBQ0MzRTdCNzRGOTFFMzFEMjA3OTlDOTcyMERCREIKKzoxMEM3NjAwMEJCNDlGRUJBMjJFMzdERkYxMUVDRkYwQkQ0OTBENERFNkYKKzoxMEM3NzAwMEI5MTdFNUJEQjQ1MkU4MzM2RDI2OERERjU5MjdDN0ZGRTEKKzoxMEM3ODAwMDVBMkZDNkFENkEyREYyRkRDNTI0RkY0RDRDQjZDMTdFQjEKKzoxMEM3OTAwMDg3RjZBRkM0RkU3MEQ3MEYzRkFFQzVCOEQ2MURGMkI5NEQKKzoxMEM3QTAwMEY2RjEyMzA4NEY5RDY4QUYyQkY4OTdCREY4RkNBRjdFREMKKzoxMEM3QjAwMDdEN0ZFNkY5Q0NFRDk1NkM2MEUxNzU3OTUxQjkzMEVGOEMKKzoxMEM3QzAwMDJCMEQ0NURDREYyOTZDMzk4OEVBOEJENUI1RUVCN0EyOTUKKzoxMEM3RDAwMDNDNDZGMzZBMjlENTQxRTQ2Rjk3OTVFQUU3ODI1RTc2OTUKKzoxMEM3RTAwMDczQUM3QUZFNEIwNTdDOUM4RDA1NTc5QTVGOEIzRENFRDIKKzoxMEM3RjAwMERBMjJCRUNGNzVDRDY3MzFGRERDODNCM0U2NkYyREM4N0QKKzoxMEM4MDAwMDhGREEwRDY4MjIzQUUwNUEwMjU3MEI1QzNGQ0UwQTNEQTAKKzoxMEM4MTAwMDg4Q0Y5MUQ2MTg4NzkxNzFFRDI1QTI5RTc4NTNDOTc3NUMKKzoxMEM4MjAwMDgyRjNGMUZDNTI5MUREMkZDMkUxMDNGQTdDQUY0RDlDMDMKKzoxMEM4MzAwMDczQUQ5RENGRUJCQzQyREQ0RUYyRDdBQUJCNDQxRDg5NDAKKzoxMEM4NDAwMEQ1NERGOTA4REJGNThFRkQ5NDM3MTNGOUQ0MTBENjFEQkMKKzoxMEM4NTAwMDY3NTA1REQ3QThFNzNCNkNBNjNDNkE5NzU4NkY2OUY2QUUKKzoxMEM4NjAwMEZCOTRBNzZFN0E4M0Q3MEJDQjNDNzZCRDgwQUIwOUY1RTIKKzoxMEM4NzAwMDMyQzBEREI4NUEwOTVCRTBCRDQ2NTQzQzk4RDdDRDY0NjAKKzoxMEM4ODAwMDYxNUY3QTM0QUZCQ0EyQ0NENkVGQzA3MzYxRTI3QzA2QTQKKzoxMEM4OTAwMDEzRjY3MDI0MUY1RUVERUJDM0ZBMTg5QjFBRTc1NzcxNkQKKzoxMEM4QTAwMDFFRDYxRkE0QkEzOENDMTdBNUIzNDhGRTU5RUE5MUNBQzAKKzoxMEM4QjAwMEU2RUJFRUM2M0NCNTRFNkY1MTlFM0E5RTBERDMxQkE0REYKKzoxMEM4QzAwMDE3MjI3NTREMjI4RjFFQTlDRjExN0E0MEU2QTcxQkM0RUYKKzoxMEM4RDAwMEJBOTY0NUY0QzBFMjI1NjhFN0M2M0YyMEYyRDQyMkZGQUQKKzoxMEM4RTAwMDJDRjNENDk1QTY3MzZEOEQ4MTA1NjMyODlFRUJCN0Y5NjMKKzoxMEM4RjAwMEE5QUMyNkQ1Nzg5RTI5REU0NDg3OUI4QUY5Qjk0QTk5NDYKKzoxMEM5MDAwMEE3M0U1QTYwQ0MzNzNGNjA2N0E0NzdCQjMyOEM3Q0I3QjgKKzoxMEM5MTAwMEEwOThFNzQzRkNDNTMyMEUxOURGMUY4N0Y2Mzc3MzkxRTUKKzoxMEM5MjAwMDFGRDI4REYxOUNCMURDMUZBMUMzNUNBNkI4OEU2RDQzRjQKKzoxMEM5MzAwMDJEQzUxRkYxQjkwMjdDQTg2NEJFRjZFRkE4OTdCMTVEQzIKKzoxMEM5NDAwMDBDRkQ2RDc4QkUwNUU5RTFCNjkwM0YyQUUzM0Y2OEE2OEQKKzoxMEM5NTAwMDJDQ0NBMTM4RDA3OUU0NjdEQjg2N0ExQTQ3OUU2NzdGQjIKKzoxMEM5NjAwMDMyM0VCNjdDNUMyQzkwNzlENjNFM0JGNkFCRjVCRTc2N0IKKzoxMEM5NzAwMDFDRTdGQkNDNzEyMEUxODc0NUVDMTgxRkFGN0Y5OTU0NzEKKzoxMEM5ODAwMEUwOTM3Njg5OUQ5RkY3NjNGNkE1NTkxNDJGRjlCODAwQjcKKzoxMEM5OTAwMEVGQ0ZFOEYzMjExQzcyNUZCQUEzRTgzOURBQzdBRTNDRTcKKzoxMEM5QTAwMDBGQ0VERjVCRkJBMzk3NkFCNUU0OTFGMzE4MzcwNTIyM0UKKzoxMEM5QjAwMDc5MDczN0E2QzA1OUIyQ0MzQkE4ODlEODhFRUE1OTU4MTYKKzoxMEM5QzAwMDQ4QTE0MUNGRDZCNUZDMjdEMEIzNTFCQjNGQTMwRTlGQTIKKzoxMEM5RDAwMDdGRDFFMDA3N0VCQUE1OTBFQUE3NzhGQ0VEOEIwNkZGMzEKKzoxMEM5RTAwMDFCRjk2QTNERjJFMUI1OUVFN0M1RkNFMDNBOUM2N0FCRjYKKzoxMEM5RjAwMEEyRDZCOEU5NUMwQ0YzMkJBM0U3MEJFRkM1RkVFNjdDRUYKKzoxMENBMDAwMEUxRTVFMjE4N0Y4QjVCOEMxRUI3RTgyRDM0RTZGNTNGM0QKKzoxMENBMTAwMDJGNzE4QjdGMDREQ0UxM0UwOUYyNzQ5MEU0MjlDMEU1QkMKKzoxMENBMjAwMEU5QUY3REZGODNGNTFFQzFGNTZFNTVGQUMyRjFENkFCQjUKKzoxMENBMzAwMDFGMzc3ODNBMkZGNDZCOTRBM0U5QTlBRTA2QjQ2NzYwNjgKKzoxMENBNDAwMDFFMUZDQTVGMzQxRTAyNzAxNzFBRTIyMTdCNUJBRTQxQzMKKzoxMENBNTAwMDNDMDRENkY5N0JEMjdGNjU5Q0FFN0YwNTc0NzMxNEUxRUMKKzoxMENBNjAwMDdBNTQ2RTQ3RkMxNUYyNjUwNkFEQUY4RkFGRUYyRjMwRUQKKzoxMENBNzAwMDdGNEUxMUVFMDM0RjcxN0U4OUUyODdEQjQ5M0FGQ0Q0ODkKKzoxMENBODAwMEI1RkM2NUYwNzMzM0MxNzc4OEMzRjcwNUEwNjcxREQxODYKKzoxMENBOTAwMEQzQ0ZFMUJEOUNGRkJEQkU4MEZCMTdGMDVFMTNCRDk3RjkKKzoxMENBQTAwMEM3RjlFMDVFNjE1NzgzNUZCRUUwM0E1RkQ0MkY0RkNFOTcKKzoxMENBQjAwMDU2OUI4QkI4OUQ3QjY3OTFBMUNFNTRCREFCNjg3NEJGNkMKKzoxMENBQzAwMEY5OUVBMkQxRkRFNkZCRjBGRDJGOEFERkJDQkY4MERCMjMKKzoxMENBRDAwMEZCRDFCQzRERDhDNTNGQkVEMTQyRjlFNTdBRDFCNzdCNzkKKzoxMENBRTAwMDQzRDVBMjFCQjFBRTA2RjA4RjZEMjdBRUM3QUE1QjRGMzAKKzoxMENBRjAwMDlBOERGQkRCQTZGMzZBRjI3QjA3NzI1RDM2NkJEREQ4OUQKKzoxMENCMDAwMDdFNUYxNDlGNkY4RDY5NzVFMDc5QTg2NjM1QTkxM0NGOTQKKzoxMENCMTAwMEREMkVFODc4OEZFQTA2MURBQUQzODc3RUUxOTdCQ0JFOUEKKzoxMENCMjAwMDRFQ0NDQjU2QTk3Q0ZEOEUxNjBGOURFRjkzRTdEREU0MkUKKzoxMENCMzAwMDM5OTRFNkZFMUI1RjczRTBCOTM5RjA1RjUyNjBGQzhBRkUKKzoxMENCNDAwMDMyRkI2OUZEQkE5REE2NzMyOTM2NTM3QkMzQUZEM0I3QjkKKzoxMENCNTAwMDFGRDZGNTdGQUFDODU0NEY2ODdEQUE5Q0JFRDNEMUExMjkKKzoxMENCNjAwMDc4NDQ5RDJGRDU2NTM0OEIzMTM2OTVEQ0IxMDhFMzk3MzkKKzoxMENCNzAwMDYwQzdGOTEwMEYwQjc2RUUxQUMwN0M5QUEzQzM0QUI5QUUKKzoxMENCODAwMEYzM0ZCNkY5QjYxRjA2OTE4QUVCQjU1MkJDRTE4MzBEQUYKKzoxMENCOTAwMDBBRkZERUM3NjI5RUM3NkYxMjc5N0M2NjhBMzNDODc4NDcKKzoxMENCQTAwMEI4QzQ2M0RDODNCQ0ZFQzM1MTc4QUE4Q0NFMzdENkFENDMKKzoxMENCQjAwMDE5QzhFN0JDNDNGMTA2MUI4NzhDQzlFRjZGNTQwQUJFNDYKKzoxMENCQzAwMEFBMEZCQ0Q3ODFFRjJERjM1QTBDRjU0M0U2Nzg4NDhEN0MKKzoxMENCRDAwMDk5RUJFNDc5MURBNzRERTU3NTlDQjY0QzVFMjcxRkNGRjgKKzoxMENCRTAwMDU0RkE1RTQ3RkM5NjJBQTI2N0E1Q0FFQjM4QzE0ODEyRTAKKzoxMENCRjAwMERGRERFMjc0QTkwOEFDQTczQTFGNzMxQ0MxNTk2ODhDMjkKKzoxMENDMDAwMDQzOThGOUQyNEM4RjkzMjY3QTNDNjFFM0U3OTMzQTA3MzUKKzoxMENDMTAwMEFEN0UwRDZFNzczRUI0QkEwQkUzRTdEQTQzMTY4QTYzNTYKKzoxMENDMjAwMDlDOTVGNTIxMDAyNEM2RjM5N0IzMDg3RUM5NUVFRTZDOEYKKzoxMENDMzAwMEU1RjUwMjkyMkVDQjc3RjJCQTExRUE2NTg4REJBNzMyQ0UKKzoxMENDNDAwMEZENzczQzk2OEJCOEMyMURBQzhGQ0UzQkFDNjQ0Mzc2NkYKKzoxMENDNTAwMDk0ODM1NTE4NEFCNzYyM0NDNjQ3RDcyNkE2NkQ2MTg0QUYKKzoxMENDNjAwMEJGNTA1NzNBQ0NGNzQ0RUI3ODNGQzZCNUZCMjdEOTkzNzIKKzoxMENDNzAwMERFQ0RFNDdFNDQyQ0ZCMzU5QUFGQjVCMTc3NzU3MUZFRkQKKzoxMENDODAwMEJGQzVCNTNFNjk1Q0NCQUFEMUY5NTJBRjIzM0M0REI5QzMKKzoxMENDOTAwMDdDNUNFQjg4Qzg0QkM4QjhENkQ5OURFMjdCMUJFMkJDNTQKKzoxMENDQTAwMEM1ODBCRDc1RjI0RTM3RjZGMzkxOUUxOUIzNzdGOTIyMjAKKzoxMENDQjAwMEU0ODMyM0JEM0ZGMTg4RjNBRjFCMjc4RUZFNUQ4ODgyOUUKKzoxMENDQzAwMEUyMThGNUE0M0YyRjYwMzQ1RTY3RkExMDlEQTMzRTY5MTkKKzoxMENDRDAwMDM3RDZFNUNBRUJFRDAxNTlCRjE5NTI4Qjc1RjYzMUYzMjIKKzoxMENDRTAwMDQ0RUEzOEU3MTdEMzQ2QzBDRjZCQ0IzOEQzQkFEQ0QwOTEKKzoxMENDRjAwMDJENzg3RkVFMDVDMTBGOEI5NUIwMDJFQkFENzAyQkFGOTkKKzoxMENEMDAwMDJBQkVFOEZDQ0M1QzQ3RkZCNzdDMThDMTFEODdGODAxNDAKKzoxMENEMTAwMDNDMEVDNEYxQkFEQTgxNzQ1NkYzNEMwQ0ZBREMzODk3NDUKKzoxMENEMjAwMEVCRDE4MUVDRDhGNDkzQ0ZDMTNFQjlCRjc4MDJGNzlGMjUKKzoxMENEMzAwMEM2RjBCOEMyRUYxREEzQzcxNUJFNTUxQzIzQUUyMEU5MkYKKzoxMENENDAwMDdCNzA5RUFBNzFCQUYzQjYyNzI3RDQ4OUZEREI0MzQxRDUKKzoxMENENTAwMEFBRDczOURGNjNGNTZENDJGQ0Y3QjdCRTU1MDhFRDI1NUMKKzoxMENENjAwMERGQjI3QTMwMUY3RUFERjM3QzkzMEFEMjg5QUYyRTk3NjMKKzoxMENENzAwMEU3RkI1MEUwRjc2NEE0QUVGQjVCOTQ0RkVGOEVGODY3REYKKzoxMENEODAwMERDN0VBQzFEQTc2QkMzOTY1QzNDQzhGQkJGNTg1Q0JDOEIKKzoxMENEOTAwMDBGQ0ZEOThGNjQ2RkRFMTc1OEQ1OEJGRTlDQjQzN0ExQTcKKzoxMENEQTAwMEJEMTJEQkYyN0Q5MDg0QzlBNUEwMzQ5QjVBNjQzRUIxQ0MKKzoxMENEQjAwMDgyRjJGNUQxRjk1NkVDNDNGQkY4QUNERDM4QkVCNDU3M0UKKzoxMENEQzAwMDA3OEFDQkY3QTFCRDFBOENDQzVGQkUwRkVERDk1M0E2NTUKKzoxMENERDAwMEZFRjQ3RDRBMThFRkQ3QzU2NUQ0QkY5MUM5RjFDQkVBRkYKKzoxMENERTAwMEIxN0YyNEFFQzhENjkzM0Y3QUNDMjFEQkY3RDRBMzNERTQKKzoxMENERjAwMEJFM0Q5RDhGMzcxODU4REZBQjdEMEVFMUI5RDZFMzdGN0UKKzoxMENFMDAwMEQyRkUyM0Q5RkQyN0VEQkM3RTUwMDMzQkVEODk3NDJDNjcKKzoxMENFMTAwMEEzRUNCMzcyRTE1MzFENzhDNkFFNTg1NTY4M0ZGQTkzNDAKKzoxMENFMjAwMDg4ODMwN0REMTZFMUU3NkNFQzQ1QkZBN0I2NDRGMkU5NUQKKzoxMENFMzAwMEUzNTQwNzMyMTJERkFEN0ZGRTQ3OEY2OEZBNzU2QTNGMTEKKzoxMENFNDAwMEFBMzVDMEFEQjU1MjlEODg4NEZCMDRGNjg3NzVENERFNDMKKzoxMENFNTAwMDczQTcxN0UxQUM5NUYxMERENkQ5OEJFQkVCNEM5MkVGQTQKKzoxMENFNjAwMEREQjQwRkRCMjNDREJCRTZGOTlEQkQ4OEVGREFDODNDMEUKKzoxMENFNzAwMERGQTZGNzZCRTNFNTc4QkRENDhFRTJGMzAwQzU0QkEyRTUKKzoxMENFODAwMDcwQjUxOEUwN0EyRDcwQTAxN0UxMEE3QUMyNUI3MDdGNDYKKzoxMENFOTAwMDA4N0ExOUVEQzc3N0I0NkNBMkZBRUU4ODFDNjkzQkQyMDgKKzoxMENFQTAwMDRBNTEwRUJEOTEzNkM3NTc0NDhFRUUyNzM5QkFEQTcwMTMKKzoxMENFQjAwMEMxN0U5QTNFMDdGN0JGNENFRTI3NUVGRDc1QzMzRTg5RTMKKzoxMENFQzAwMEVCRUVFMTdBNDhGMjUxOUQ0NzhFMDNGODA3N0REMkU0RkMKKzoxMENFRDAwMDkzRURBRkQ1QjdCOEFGQzZCQ0RDREYwREZFOUU5MTdEM0MKKzoxMENFRTAwMDJCRTU4OTY5QUI0REYyNzM2NUUzQjVCQkJGNDY3NTE0OUQKKzoxMENFRjAwMENEQTBENzYzRDU2M0RGNUIxMEQxNEZCNzEyM0UwQkE1MzIKKzoxMENGMDAwMEZGQ0NBNERENTE4MUY3MjM3Njg3MkY2Mjc3NTRDRTg5MzkKKzoxMENGMTAwMDYxNzc3NDYyOURENTJDQUFFNzIyQkRBOUMyMTNBRkFFN0EKKzoxMENGMjAwMDBFNjhDNjVDOUUwNzZDMTc3NTkyNzk5QkQ5NUFCREJGNzcKKzoxMENGMzAwMEZERkQ3OURDOUY3RjZBMUU4NzRCN0VERkY2Q0MzQTg1NEMKKzoxMENGNDAwMEVBQzREQTdCQTY4Q0MxRjM2RUE3NTM3RERCNTFBRjBEMkIKKzoxMENGNTAwMEE0NUJFODNCMDUyN0M1RjczNTA3QkVFMTRDQkIwRkVFRTgKKzoxMENGNjAwMDFGNEY3M0Y5NTE1RjFENEZEQTQ5REY1MTNCRURCNzBBOEYKKzoxMENGNzAwMEZFM0NGNDBFRUVGM0JBQjhBMjg2N0E0NUM2MERFRjlFREIKKzoxMENGODAwMEIzRjU1MTk0QTMxMzNFREUyRTlDRjdFMzc3NTA5RTU5RTAKKzoxMENGOTAwMEE2Rjk3QzY3ODBFQzE4QzdDREIwOERFMEJCRTJGQjlDQTYKKzoxMENGQTAwMEM1RTI3OUU1QjYxRjdDQkIwQUM3MTBGNjhCRDQ5RkU2QjUKKzoxMENGQjAwMEYzOUVGODYzRDdEQjVGNUQ1NjZFN0Y3OTc5M0YyRjFCNTkKKzoxMENGQzAwMERBNzRDOTgyRTNGMkI2NkI4NEVGQzJENkM4RjNDQjI2MUIKKzoxMENGRDAwMDdCQUFEMjc0M0U5OTg5RUZBMDRBN0JCQzM4QjlEMThGMjUKKzoxMENGRTAwMDdFNUNGMTNBQTM3RDc0QkFFQjk1OUU0MkY0NkJGRDU2REMKKzoxMENGRjAwMDBGNkU5M0I3NjYxQTlGNEIzQjZDNTFENzYzRTQ4RjgyRDkKKzoxMEQwMDAwMDVENjg5ODQ3RDZERkRFQ0FGQTNBRTg1Q0I4RUZGNUMzNDgKKzoxMEQwMTAwMEQ2ODk1MUJGQTVERDUzNDk3NjRBNzMyNkI0NjAzREM3MTIKKzoxMEQwMjAwMEZFQkUzNDMxMUZFRDgzMUUyQjdFMTE5NkQ3REVFQkQ2NkMKKzoxMEQwMzAwMDAxRkRFQzk2NjREQUE3RkQ4QUEyQUYwQkRBRjIyOENBRUEKKzoxMEQwNDAwMDQ1QjQyRTg4QjdBM0YxRjhCRjdGRDQ1MDQ3QzdCRUI2MEEKKzoxMEQwNTAwMENBMTBFN0Q0NkExRkE1M0EzRTE5MTdEM0FBRTlGOTE5RUQKKzoxMEQwNjAwMDlCODg4MzY5NEQ4RkUyN0UxNjg5OTM2OUJGRUEzNUM0MzgKKzoxMEQwNzAwMEM5QjQyMDNEMEY0NkY2QkY1REZCQjBCRENDMjNFMEQxNjcKKzoxMEQwODAwMDRFRjYyMkJGQjVBQjVDOUZCQzM0Qzc3RDUyQjM3REYyNzgKKzoxMEQwOTAwMEZFMjA5RkZGNzMwRUM2Qjc4MjdDQkYzMzNGMkYxRTBDNEUKKzoxMEQwQTAwMEI3OEYxMTc2MURENjhCOUJFNTdDNUM4MEQ3REY5NUE5NjkKKzoxMEQwQjAwMEQ5MUQxMzdDM0M3RUU1MDRGQUE4MkJBRDJCMzE2RTEwRjQKKzoxMEQwQzAwMEFENTcyOUEyRUZBNDM1OEQ1MDVGQjIyNEMwRTVGN0U4MzMKKzoxMEQwRDAwMDFDQjdDMTJGMzdEN0E5MzQ4OTNBOTU5MUM2QjlCMzg0MDMKKzoxMEQwRTAwMEU3RDkwNzE0NEYzNUQ3Q0I1Njg2N0FCOTc0RDcxNDM3OUEKKzoxMEQwRjAwMEU2QTY2NEJGOUI0QkY4M0VGMDcxOTY3QTEyRDc2RjhFMEUKKzoxMEQxMDAwMEE3OURDNTc4MUFDOTE5OEY3QjJDMTVCQzYzREJDOUJGRDUKKzoxMEQxMTAwMDU3MkZCRjY3NzIyNkM5RURERjBDRjc5N0Y2ODg3ODQ1NjEKKzoxMEQxMjAwMEY5Njc4QjlGQkQzN0M3Nzg0RTdGQTRGQTg3RDIxMkJFQUUKKzoxMEQxMzAwMDlGMTU4OUY1N0VENkZBODcyN0UzNTUxNUYxMzUwNDdEQ0QKKzoxMEQxNDAwMDMxM0UzOEFDMUU0MkQ0MzlDODNBODhCMTgxMEM1RUI3NDIKKzoxMEQxNTAwMEMxNzgzRDQ0QkJENjRBRjhCQkVBRTc1Q0M0RkUwRjdDMEQKKzoxMEQxNjAwMDlBMUM0MDNFQURFMTdBNDRGMkQ5NEZFN0Y4MzhGRkZEMTIKKzoxMEQxNzAwMEM2NEZGQzI3RjkwRUZBNEYwQUEwMUVBOUU2RkQ4QjdGQzkKKzoxMEQxODAwMEMzQkY3QjIxRUQ4QjcxODEzM0JEOUJBNjkyMUVGMjA1M0YKKzoxMEQxOTAwMEY0RkVBRjNCNzIyRTMyMjMxMDQzMEYxRDVEQTA0RTBERTcKKzoxMEQxQTAwMEU4RkMyMzc4M0YzMzkwMUZGM0ZEMkYxM0JDQTZGN0IzQTEKKzoxMEQxQjAwMDY2MDZCM0U4RkRDODc5NEU3NTY2RTA2Rjc1MTBBMDNENTAKKzoxMEQxQzAwMENDNzUyNzdDQkYzMEQ3OUQ0ODdCRjBDRTkyREZBRkM0QjMKKzoxMEQxRDAwMEJBOTM0QkYzRDU2NTFDQ0YxQ0JGMTFCQjcyODhEQjM5RUEKKzoxMEQxRTAwMDUxN0IzMjg3RjZDMzZCNjAyRjM2MTMzRDQ1M0RDRDM1RkQKKzoxMEQxRjAwMDE4RkY1RUZERjhEMjdFODJGQjdGQTdCRkZGNzlGM0RGQzkKKzoxMEQyMDAwMDAwQkU2RTgyNEZFNDREM0VDNUZCRkY0MEVGOEI3Q0NERjAKKzoxMEQyMTAwMDlGMDFERTMwRjE5MUIwRkIzRjg3Rjg3Q0Y2NzMwRURGQTMKKzoxMEQyMjAwMEVCNDRBRkM1OUNERTY1NzM5OERDQjdGRjM1MzYxRjVDRjkKKzoxMEQyMzAwMDMxRkZGRjZGN0E1RkU0Q0Q3NUUzRkU1QzNGREY0OEZFQjAKKzoxMEQyNDAwMDM5RjRGQjE1RTE2REYxMzBGOTM5MTlEMEU1RTM0Nzc5OEYKKzoxMEQyNTAwMEZGOEM3RTdFRERGQkVGRUFGOUYzMkFDOEY5MDUzRDdEMDAKKzoxMEQyNjAwMEFGQzEzRUYyMTE4RDNGOTU4RkZGQkJFMkM4M0EyRUU5NjgKKzoxMEQyNzAwMEVGRkYyRDRFNzY1OTNFOUYzNjE3RjFENUNBRjlFOTBBRDAKKzoxMEQyODAwMEVDRUI5QkU2RjJGQTk2MTA4RkNGNkE5MjdGNjc4QUZCRUYKKzoxMEQyOTAwMDQzNzg5RTc0RjkxQzI2QkU4RjEyQ0NDNkZCMkFFM0ZFOEYKKzoxMEQyQTAwMDZEQzQxRkQxN0FGNzE5RkQxMTE4Njg4NjQxQ0ZFRkQzRUQKKzoxMEQyQjAwMEZCMUJFNTczOUZEODg3NzRCNzJFRTBGREU3QkUzMDZFODkKKzoxMEQyQzAwMDE1RTJERkRDMDY3QjY0REU1QzYzNURBNjhBRURDQjhENTgKKzoxMEQyRDAwMDhCRjk3RjdBQ0Y5NEZGRDczRDVGNDRDRkEzRjUwQjY0RTIKKzoxMEQyRTAwMEJGODJEREU2NzIwMjhEN0Y1MTY3NEQ2RTg0NzZCNUYwQTgKKzoxMEQyRjAwMERCQzFGRTg4NzlBRUJCM0ExQUU3QUU5RUFCQUJDNzE4NkUKKzoxMEQzMDAwMDBDNUFFOTdDNjBDNDRFNjFFRTQ3MTFGRjExM0I0QUZCQTkKKzoxMEQzMTAwMEZFM0VFM0I5OEQ4MzE0RTcyQTExRjQ2RDdFRTFEOTdBREMKKzoxMEQzMjAwMDAxRTcyQUM0Mzc0QjE2RUJCODdDRkYzNUQ0REZDQkZCQzMKKzoxMEQzMzAwMEM3Nzg3RTI3M0Q0RkU1NzAzMkY3RUI2N0FEQkE3QzE4QjIKKzoxMEQzNDAwMDRBOUEwNUYzQkNGODJGMUZDMDZGQkY3RDZFMzJEODJCRjEKKzoxMEQzNTAwMDJGNzcyOTNFMkJCNDFCRjc0QTdFN0E4MUU0NDE1N0Y3OTkKKzoxMEQzNjAwMDQxRjJCNzQyRjBGQkQ2MTcwRUQ3MjMzRkFGNzg1RkMyMkEKKzoxMEQzNzAwMEVCRTRFQjhGRDQzMTFEQTZGNTlGMTBGMTg4MDkyRjQyMDUKKzoxMEQzODAwMDdGQ0VCRkRGMjRGODdDMUNCRTZCMzBGRTM2QTIxM0UzRDkKKzoxMEQzOTAwMEY4QTk2MTlBN0RFMjI4NzUxNkJCMDRGREUxQkQ5RDA0RTQKKzoxMEQzQTAwMDk3OEJDMzU1MTM1MkM4NUUwRkFFMDY4OTA2MzhFQTA3M0QKKzoxMEQzQjAwMDU5Q0MzOEQzRUVCOTBFQjk4RkVEQTY3OUREQzI4RkY1MTEKKzoxMEQzQzAwMEM3M0UyRkJCMkZDQTRGRkJBOEJGODdDRkU3MDJGRDhGRjkKKzoxMEQzRDAwMEVENDBFOEU4MDJGQzBFNDQ4REY4REU3ODREOTk4REJFRjQKKzoxMEQzRTAwMEI3NTA1Mzc4NjFBOTg4ODM1MDdFNTNFNkMxNEIxRjlDODgKKzoxMEQzRjAwMDRBRjlDREY4QjIzOEVFMkZCQThDN0ZDNzIyRDhFNEE0MTAKKzoxMEQ0MDAwMEVGQzlDOUVGRDZDQUJBOEM0QTY2RkNCRTVDOENGQzk2RTIKKzoxMEQ0MTAwMDIxREUyMkUzMjI5MUVGQzk1OTUzQzlCRjc1M0MyQUZFOTAKKzoxMEQ0MjAwMEZFOTNFOUZCNzFGMTFCMThDNUI3OUMxREZDMUNCODM5QjQKKzoxMEQ0MzAwMDRGRDVCMEIxRjVBRDIyQUNGQkIwRDkyOTJGNkJDRTY3N0IKKzoxMEQ0NDAwMDlBRkYxRUM2M0MxNzUzQzdFNDUwM0RDQTZCNzNGM0EzNDMKKzoxMEQ0NTAwMDc1MjhFN0Y3NEU3MUEzMUM5QUZERTdGMzIzRjlDRjdCRkMKKzoxMEQ0NjAwMDhERkVGMzgwRjQ5RkQ1QUJFMzNGOUY5ODZCRjQ5RjFGMzUKKzoxMEQ0NzAwMENGMERGRThBRjhDQUE2RDJGRUY2NzI0OUYxNTI4QzIzNkQKKzoxMEQ0ODAwMDVDMTQ3NTE0QTcxRTRBNUU4MkYxMjhBRDg3OUY1NzM4MzkKKzoxMEQ0OTAwMDJERjJGQzMyREY3RkFBODhCOTNENzhEREUyMjQ3QzlFNDQKKzoxMEQ0QTAwMDVBOTMxNEM2MkQ3ODRDNDdGMzYyRkNBRUEwRjRBMzExMzYKKzoxMEQ0QjAwMEYzMThGRkFBMTBFQjM0RkJEQkYxODU0MENGNTkyNDY2NEIKKzoxMEQ0QzAwMEU0Njc5RkYyNzgyODJGNTBEMTI1QkUyRjIxRUEwNUE0Q0EKKzoxMEQ0RDAwMDlGNUQyMUNFRjEzNzk1RjE3M0Q1MThCMTQzN0U5MERGNzIKKzoxMEQ0RTAwMDBGQUMxMDdFQjhGNEM3RkI3RkNBMTQ3RDFEQzA1MkU2OTYKKzoxMEQ0RjAwMDI3RkVBRDA2QzZDMEVCMzJGMTNEQzUxQTBGREI4MjQwRjgKKzoxMEQ1MDAwMEZEMzEyQkM0NEExMDJGN0IzOTlGQjBFRDM2RkEzQjU3QzMKKzoxMEQ1MTAwMEE3N0E3NkQxQkUzQUQyMzkwNjc3ODkzQ0M3QTA1MTdFMjgKKzoxMEQ1MjAwMEY2MUFGOEY5NDkwNDk3RDgzRkFFNjBCRkI5OEVGQURCMTYKKzoxMEQ1MzAwMEI4MUM2RkMzRjNCRkY5RDFFRjRBQzg3M0YzREI5Mzc4MUMKKzoxMEQ1NDAwMDFDNjU0NjA5REY2RkNDNTdGOUREODg0RkFBM0Y0MDdGNDUKKzoxMEQ1NTAwMERFNTA4MkVGNDdGREY5NEM4NEU3MEFGNEU3NEM4MjVCMkEKKzoxMEQ1NjAwMDdDQjc2MjMyRTY4MUY4RkFCMzRCNzgzRUQ3Mzc4NjI3MkMKKzoxMEQ1NzAwMDcxQkIxQ0EzRDcwMTE0OTY4QzkyQ0Y2NTk3QUYyMzUwMzMKKzoxMEQ1ODAwMDYzQkRGRkExQjBCM0Q3RTU4NjE2OTZGMDdDM0ZGMUFENDEKKzoxMEQ1OTAwMDM5REYyRkZCMURDM0Y4NTQ4Q0ZENzY4Mzg4NTM5NTAyMjkKKzoxMEQ1QTAwMDhCNUE3Mjg2OUZFN0ZGNDU5QjdBMTI2REJDNjM2REU1Q0YKKzoxMEQ1QjAwMDc0M0Q2RUQzMTJCMTdFRUIyRDcxOUUxRjBDMkRBQTY3QTgKKzoxMEQ1QzAwMDkyNzU1MTcyREM5QUJBRDI5MzY3NzVGQjU5QzVDMkM3N0UKKzoxMEQ1RDAwMEE5Q0VBQzNERjNDMEVCMEFDMDc5NUFENDdCMEQyNEZBMzYKKzoxMEQ1RTAwMDY4OUZEMzhFRjJFRjRCMkRBQkZFQ0FDOUIzQkFGREMzMTEKKzoxMEQ1RjAwMDBDMkZENjQ1NjkyMEVBRUI0QkY4NzdDQjVFMjk3NUY2MDAKKzoxMEQ2MDAwMENGQ0JDM0VGMzU3MTM5NUNERDczOEFDRUMzRDQ2RjY4N0QKKzoxMEQ2MTAwMDYwQTEyQ0FBOUJCMjIxN0RERjlFQzNCRkJGNTA1MTY4ODEKKzoxMEQ2MjAwMDY1OUEwRUFFRTQ2Q0Y1QUUxMjFFRjc1OTQ3N0MxMkFENEEKKzoxMEQ2MzAwMDBCQkMxQkRCQTU3Njc1MENGRUZENDkxOTlGOTRGOTgyODYKKzoxMEQ2NDAwMDlCNUZGQzNGOTQ3NzFCNDg2MjM0N0ZEMENCQzI5ODc3QjYKKzoxMEQ2NTAwMDVGQTBBRTc3MEM2MURFQzVFQkEzRjhDOERBMTIxRkNENzAKKzoxMEQ2NjAwMERCRDhCNTlGRTA4OTBGQkM0N0YwODA2REREOEZGNTgzNzcKKzoxMEQ2NzAwMDY2N0M0QkI5RTgxNEY4RDZBRDlCRjAzRDkyRkM1NjJDNzUKKzoxMEQ2ODAwMEI0MjUyMjdFREY0MjdBNDFCRjA3QzUzRTcwQzQ3NkMxMTEKKzoxMEQ2OTAwMEVEODk0MUY3Qzg3Qjg1QTUwNjdDM0JCREU1MDZCQUI1OUIKKzoxMEQ2QTAwMEFCRjc4RUMxRjU0ODNBMzc4QTY3RTdCQkFDNkYyMjFERUUKKzoxMEQ2QjAwMERGMDczQTMyQTI2M0VDM0E4OEEzNDhBRjFCODA2RjRDNzUKKzoxMEQ2QzAwMEY0QUFFRkUwREZCREFFRUYyOEE1RUZDNUQ1MTc3RUM1MDQKKzoxMEQ2RDAwMDkxNDI3OTAwQTUwRkNGNEIzNjk1MzUzMEI0QTcxRDZBMUUKKzoxMEQ2RTAwMDEyN0RERjRFRDI2RjY5MTlEMDRGMDcyRkM4RTM2MzI0MzQKKzoxMEQ2RjAwMEE3QzJFRUZDMTRGMUY1RkY1RUEyQjM4M0FGNzVGQzFGNjkKKzoxMEQ3MDAwMEU2RkI1MTQ5MENCQkZDQ0Y5NTdGMThGRTNEMUZCRUVGRDkKKzoxMEQ3MTAwMDlFMTJGQzYyQkVDQTdENzdDNEZBNjYyREI4QUFFNTUzOTQKKzoxMEQ3MjAwMEMwMjFFNTA2RTU3NjkzODJGNTkzOEExREY5MkM4OEYyRUYKKzoxMEQ3MzAwMDhCRTdENzBBN0ZCQjA1RjNBMUNENUVENjg3N0JFMTNFQTEKKzoxMEQ3NDAwMDk0MjNDMDlCQTMzQ0REODFGMkQzQjgzNzlERjgwMkZENDIKKzoxMEQ3NTAwMDdGQzJBN0Q4QTdERkM0N0Q1QUY4RkY3NEJGODVGM0M1ODEKKzoxMEQ3NjAwMDVGM0FFRjAzRjBGQzFCQzE1MzI3Q0UxNzdDQ0VGMjUyNzkKKzoxMEQ3NzAwMEM5RTU0MUY3M0NDMDVCNTBERDRGRkFFNUE3NDJERUUwNkEKKzoxMEQ3ODAwMDI3OEQ3RkI3RTk5M0U1NDE4QjU1NUUzNzI2RjNBMTMxQUQKKzoxMEQ3OTAwMEYyOUYzRUU1NTNFNDNGQ0Q3OUQ1OTFGMkExMzFGMjlGNUUKKzoxMEQ3QTAwMDA2N0I3REE0RkMyNzMzRTU0OUNERjlDRjQ1NUQ1MzI4QTEKKzoxMEQ3QjAwMEZGQkMyOEQzNDJERkE5OTY3NkJGQ0M3QkJFRDFGNTAzNTAKKzoxMEQ3QzAwMDFCN0QxNzY5ODZDMjkyRDI4N0U3NDdCRjJERjQzMTQzOEMKKzoxMEQ3RDAwMEFCNEVCN0ZFRTM2OUZDRkJEN0REMjkyRUZBQkJBQkY4RjUKKzoxMEQ3RTAwMDgzRjU1ODEyOUZBMDFGNUM0RTk4Qjc2MzIxQUZDQkFDNTYKKzoxMEQ3RjAwMDRDN0ZDNjhDNTc4N0YwNEJBRTA4QUYzMkJGRUVFODUyNzUKKzoxMEQ4MDAwMEMyOUI5MTM1QkMyQzUyRkZFN0QwRDFEOTkxRjkxQ0QxRTQKKzoxMEQ4MTAwMDkxRDlGQURERjgzREVFNDZGRjc4QUEyNzMzRDNBMUI4QjcKKzoxMEQ4MjAwMDhCRkY1RENBNjJDRjZDRkFCQjk0OTJGRUM1REVFMTc1RDgKKzoxMEQ4MzAwMDgzMzYwOTVGOENCQUMxM0YzQjNEN0Q5QjVEMTlBM0QwMDgKKzoxMEQ4NDAwMDUzRTZCMTQ3QTJFM0FDQkNFMEJERjMyNjQ0QkZERjI0RkUKKzoxMEQ4NTAwMEVGMUY0RkUzRjgzRDczMjMxMzdGRkZENDQ4NEZDMEJGNDIKKzoxMEQ4NjAwMDRBRTdGQTMzRDlGRUNEQ0E3MDdFMjgxNkY1OThDNTk5RDUKKzoxMEQ4NzAwMERBN0FBQTgzOEY1RkVDQzVCQzU5MDRCRkE5ODcwOEJGQjkKKzoxMEQ4ODAwMEVEQURCRUVERTgxRjFEMkRCMzUzQkQ0QTBDN0VBMEJGMEMKKzoxMEQ4OTAwMDZGN0IzOTdFMTg0NkY3OUU0RjQ3QkZEQUEyMjcxNkE0NDIKKzoxMEQ4QTAwMEM3RTA4RjRGNEREN0NCRDBEMzYxN0RBQUFCRDAxNzRCRkMKKzoxMEQ4QjAwMDRFNUZFOTIxMzlGNTVCM0Q0ODU3NDk0RjQ5REZFMUY0QjcKKzoxMEQ4QzAwMEU0RkI5REE0RjdEQkY5RUFCRkUwN0UxOEE1QjNGQTM0QzgKKzoxMEQ4RDAwMEQyMzkyQUJGOUFBMTlFQzVGQ0REOUIxRjhBM0ExNjE4MzEKKzoxMEQ4RTAwMEU3MzkxQ0U3MTBGQTU4MTQzRjU0MEZFMTM4NTU1RjhBQTYKKzoxMEQ4RjAwMEZERjc0RTlFMjlFNUZFNEUxREVCN0I3NTIyRkE3RDY3RjYKKzoxMEQ5MDAwMDk5QThEN0Y0QkZFRUMzMzhDRDg2MjkzMUVCMzU4RjNEQ0EKKzoxMEQ5MTAwMEEwRjBCRkQzRTM2NUZCMkQ2MjdGQjVFOEZDREQ1MzU4NzMKKzoxMEQ5MjAwMEI3MDlGRUVEMDlBQ0RCODRFQjVCRjNEMkY5RjdFNUIxQTcKKzoxMEQ5MzAwMDdFNzMyQ0Q4RTNBMkJFQjMwRUM3QzY3OUMwOUVDNUJDMDkKKzoxMEQ5NDAwMDNDQjM4NTE4OUU0QjFGQzBFRkIzQ0NDMkVGQjM2QzIyMjMKKzoxMEQ5NTAwMEJEMUJBREMzRjg5MEY0NTUzNEVFQzlEQjk1MDFEOTc2MDMKKzoxMEQ5NjAwMDg3QTlFRTQ2RTYzRjk5Mzc2NENDN0ZDRTBDMUJGNDFEQTkKKzoxMEQ5NzAwMDJCMEMxOUYzOUZCQzRFNDdFQUI3Q0RFQUZDMTBDNkI1OTUKKzoxMEQ5ODAwMEEzNzFDNTcyMUFGRjY0OURFQ0JGMjM1QzNBNDM5N0ZGRjUKKzoxMEQ5OTAwMEQ0QUFDMkFBNUI5RkRGQkMyREFDQ0Y2RjgyQkVBNEI2NTcKKzoxMEQ5QTAwMDhDNDMzRkQxRkY2MDA4RURGQUFDOTlBMTBCNDgzNzc5NjEKKzoxMEQ5QjAwMDZFMUUxNDkwOEE3Rjg3Q0VFQUY2MUM0MDNGMUNGQzAzNDMKKzoxMEQ5QzAwMEE2RTY4RjZDNTc1RkVCRUJGRjA3MTMzNDQ5QTEwMDgwOEQKKzoxMEQ5RDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFNTNDNjkKKzoxMEQ5RTAwMDBENzA1NDY3QjVERkREN0JGNzI3Qzk4NjZDNDJBMDRCMEQKKzoxMEQ5RjAwMDA5RUQ0REY4Nzk2OTI1NjFGOTA5MDQ0QUUwNkU3NjEzNUQKKzoxMERBMDAwMEI2MkQ5NDA1NDI5QjBBQzUwQjY0MTAxRDVFMERCNTI4MEEKKzoxMERBMTAwMDNFRUJDQjQyNDIxQTQyMEJDMUUxRjkzN0FGQkUyRDA1QjYKKzoxMERBMjAwMDY3N0NENjMxMzg2QUExNDg1REEwNDU5NDk2QTYzNjk5QTAKKzoxMERBMzAwMDUyMUZEMjgwNzkwQ0Q1QUFCNDk2NTc3NTU0REUzOUU3QjcKKzoxMERBNDAwMEZCQkVERDdCNkYzNjg1MDIzQTc1REM0RUU3RTZCQkY3NDEKKzoxMERBNTAwMDdDRTczQkU3N0NFN0ZGN0U5NzQ1QjMxNUM2NjYzMUY4NjgKKzoxMERBNjAwMEY5OTM4NkM2NTg1RjJERkM3OTMzOEU4M0E2NTFDMkQ4QjAKKzoxMERBNzAwMEQyQjE3MjVDOTkzNDI2MzIzNjM3NEY4RUFCNEQ2MzM2NTUKKzoxMERBODAwMDYzMUQxRTI2RTZCMzA0MDNGOEQ3OTg5QkM2OUI4RDVBRTgKKzoxMERBOTAwMDMzMzE4RUIxRjAyMjU1QzBDNzA4RkY5OUU1MTI3RTQ3OTkKKzoxMERBQTAwMDMyMENGODk2QjlDNDM4QjEyNDY5RjgxOUZCMjg5M0UzMEQKKzoxMERBQjAwMDA1MzQ1RTlFMUVDNzY5RkMwMEUzRUJFRjREM0Q2RTI2MEMKKzoxMERBQzAwMDYwRkU3N0E2QzU2RjM2NDZDMEJENjhCNzFFQUZGOEM3MDMKKzoxMERBRDAwMEEzRkY5QzIyRTkxOTZCRTJGMzBGM0JCRDIwRUY5ODUxQTUKKzoxMERBRTAwMDg1RThCOUJDRkYwMUU4NUQ0MUZBQjE5RkQzRkIyMUE0RjEKKzoxMERBRjAwMEVGMjE5MkU3RDM5Q0JFMEYwMTNENkQ0NDRGMzdEMDkzODkKKzoxMERCMDAwMEZGQjc1RkVGQzUyQTYzMjdFRUNGREY4MDhGMjc2OERGN0YKKzoxMERCMTAwMDI3NzIzRUFFMDJGRTI5RTIzQkM0RjdDMUY5RkNFNjcwNzMKKzoxMERCMjAwMDgwMzE3QzNFOERFMzdCREQyREY0MjhEMTY0QTJERTlGMjUKKzoxMERCMzAwMDc1NUJGNjBEQzZCMzdBRTU3QTFCRjRCMDY2QTU3RjAzNzQKKzoxMERCNDAwMEQ5QzlCMjIyM0VGRkQ3QTlDRjlBODk5MkNDMTg3RTA2QjYKKzoxMERCNTAwMEVFQkI5Q0ZGMUI3QzZFOUJGRjE5OUFERkU5NEVDM0QzODMKKzoxMERCNjAwMDdBMUVGMTVDMzlCQzg5RThDREYwOUIyMEY4MUUwNzdDNTkKKzoxMERCNzAwMEEzRTBBRkUwNzA0NzMyNjE5MTA3NEIzQzRBRjI0OUZCQUEKKzoxMERCODAwMEE1QzRFM0U0OTdGQTNDNzJCQzhERUM2NjdCMjlDNzNGRTEKKzoxMERCOTAwMEVBRjBFMzQ5QTQxRkU0Nzc4MkU0M0Q4RUNCRUY5RjVEN0EKKzoxMERCQTAwMDFFQkYzNTg0QkU5NDczNzk0ODNERkNDRTM0RTM3N0E4MUMKKzoxMERCQjAwMDY3MUYzNjdBNjFGRkQ0RjA4ODhDRkVGRjFERDYyQkE0MzgKKzoxMERCQzAwMEY1ODQzRDdERDBGOTY5N0IxNDcxOUZDRDRGQ0I3Nzc0N0YKKzoxMERCRDAwMDE4RUU4RkFBRDVFOTc5RjVEQTdEOTE5QkUwQ0ZFNUNERjYKKzoxMERCRTAwMDRGQUEyNkUyMDUxODU2Q0M1OEJDOUYyNTM3QzM5QTc3MTIKKzoxMERCRjAwMEIwQTRDQTIwODZDNTQzMjYwQjRDQjREODM1RkIzMkQxMUQKKzoxMERDMDAwMEUxRjFCQkM0RjhCRkM4RkYyRDlCMjNGNUZBNTQxMkYzMTIKKzoxMERDMTAwMDhCMENEREZFOTVCODRGNjlCQUQ5MTMzNkJBNjcxRkY2N0IKKzoxMERDMjAwMDNGMjlGODBFODUyRDc2NzJBM0YxMDc2QjQxMkU5NjdDNjUKKzoxMERDMzAwMDI4M0QxNkYyNTlGNkUwNTdDN0EwMUM5Njk1NDlCQ0RGNUYKKzoxMERDNDAwMDQ4MjI5RUQ3MEIyNURFN0RCNEVFQjJGNDNBQ0ZGMTcxQjcKKzoxMERDNTAwMEFFODRGRjI5QzE2N0U4RUEzMzZENzQyNTVFQTVCQzRCMkQKKzoxMERDNjAwMEQyRjVDREMzN0RCNDVGOUU0MDcyQ0JDODY5NzA2RDUyNTIKKzoxMERDNzAwMDQyMDlEODhGOEZBRUREQTQ5QTU2QkZDMEJBRjUzMEM0MjIKKzoxMERDODAwMEI3RkI1OTdBNEM3QTk1RjEwM0REQjRFRThEQTY2QjdEMjYKKzoxMERDOTAwMDU4Qzg0N0Q4Njk5QUNFN0UxNjRBMzAyQjdERkJGOUZFQ0MKKzoxMERDQTAwMERDRTBGNTJEN0VFMTIxRDREQjFCMkZGNzk0RkIyNjhCRTYKKzoxMERDQjAwMERDQTUxRDJDMEZBNEVEREI2MDNFOTBCQjJFRjFCQzYwRkIKKzoxMERDQzAwMEFFRjU1RkZGQkFBMEU3OEY1QkZEQzlGNUYzRDE1MzQ3MEYKKzoxMERDRDAwMDdDQkNDNUY3MjVFMzdGNUUzNkVERkVFN0FBRTk3QjMyMjMKKzoxMERDRTAwMDZDODlFNzFGNzRGRTdGODdFRDc2NjZGMTNGREY0MkJFRTkKKzoxMERDRjAwMDVCRkQ0NTFFRDRFRjk1NDE2NjI0ODFCRUNCRjg5QjlCMEUKKzoxMEREMDAwMEI5OEVBQTU1QzgzRkE1RURCMzlBQ0Y1RkIyODMzNTc3RDgKKzoxMEREMTAwMDRGMUMwQzdGNTNBRDhCRTA1QTlGNjU2QkJCMDE1RkQ4RTYKKzoxMEREMjAwMDczQjEyOTZFODE0Qjg1RjlGMzQzNjE4NUFFQzBERjIxNjQKKzoxMEREMzAwMDkyRkY0NjRFREY4OUIwNEVFQjg1OTlDNjBDQjBBOTg2OUUKKzoxMERENDAwMDI1NjM0QTUwMEY1QTdGQ0VGMUIxNjA4ODJEQ0VDRkUwQzcKKzoxMERENTAwMEJCMjBGMEM5NzUwRTJGQ0E2RkI0RjJGMTEzQjFDRTg5OTIKKzoxMERENjAwMDMwRTcwM0UzM0ZDOUYzMTFDRTg3NUFCMDJFODhGOEQ1QzgKKzoxMERENzAwMDNDNTk1RkZFOUFFNERBRUUxNkUzQzQzQjE0RDdGQUQyQkMKKzoxMEREODAwMDdFRTg3N0E0RUY0QkJENTIyRkRGMjNGQjk3RjlGQTNCRDgKKzoxMEREOTAwMEUxM0YyNTEzQjM5MTdFQzY1QzUzQUNGMzdFNEI3RUYwMUUKKzoxMEREQTAwMDRBRjNGQTY1QkM2ODEzRkI5NTQ4RUZENzU5QTRGQjRBQzAKKzoxMEREQjAwMEYzRDU4OEQyNEM3MkYyQjE5NDAyRjE0M0Y1MDc3Njc3MkQKKzoxMEREQzAwMDAyMkIxNTk1QzY5QjM4RkZBNUM5QzZBRkFFMDYwRkM4NzYKKzoxMERERDAwMEU5MjJFRENCQzNGNjdBQzRGMkZDRERCMEFEMUVCOEI4RDMKKzoxMERERTAwMDJFOEU3ODYwNjUyRkVDREI2QkNCRDVFMjU1MjBCN0JGNkMKKzoxMERERjAwMEUyRkU1NDUxN0QxMENCQTY1RjdGQ0RFQ0NCNUZDM0I2NjYKKzoxMERFMDAwMDdDM0U5MjVGMDU3NkM0NDZCOTQyRTNGNUMxRjNGQ0I1QUEKKzoxMERFMTAwMDhBRDQzM0IxNEZEQTkzQzg0NzdCREFERUY4Nzg3QjIxQjYKKzoxMERFMjAwMDdGOUU3M0M0QkQ1MkQ4NTM1RTJEQUVGMzNEMjE1RjE2NjUKKzoxMERFMzAwMDI4QzZGNUQ4QzRFMzI5NzUzQUM0NTc5NkZFMTkyRTE4OUEKKzoxMERFNDAwMEFGQzJCRjYwRkRCRUM4NTkzN0VBQzE4QTBFQzU0ODY2NzkKKzoxMERFNTAwMEQxRkI0MTc2RDIyMUYwM0Y5NkRFQkY1MUI1MjMwOEFGMEEKKzoxMERFNjAwMEM5QTY4QkY4MDFCRkJFOEY2RjIyQkM4RDREMEFEOTlGMEEKKzoxMERFNzAwMEQzNUVDNkQ2NzJGOThEQUQ0RENCNjkyQ0QxNkY3MEJDMTcKKzoxMERFODAwMEJFNjlGMUYxODgxNzQwOTk3NzRBMDZGRjBBNDE3N0Q4QjEKKzoxMERFOTAwMDFEM0Y3NDEzRTg0MTdCOUJBMkEzM0Y1QUI5NzE2NTQ3QUMKKzoxMERFQTAwMDI5OEM5OUU2MEU4RDg3Q0IwNDk0MTRDQzZCMEY5NkY5RDAKKzoxMERFQjAwMEQxMEZCQzI0RDY0MzdDMUVEODQ3OEMyNUMxMjI4MjYzNTcKKzoxMERFQzAwMDFBNUNBN0M3RDYxRkM1RTk3RkE5MzBBQjcwRERFQUY4OTkKKzoxMERFRDAwMENFMDhCMjM1QUI3MURGNTFCQ0RFMDM2RTFBRjM5NDRENDAKKzoxMERFRTAwMDczQkUxNkFGODVGREVCOTlFOTBFQTFBQTQxNzZENjMzMzQKKzoxMERFRjAwMDBFRTg2QTEwNzQ2OUM2QkMzN0Q5MzBBOEEyM0MyQzk0Q0QKKzoxMERGMDAwMDlBODY3MUREMUZEQTBDRjcxQjlBM0UzRTlGNTUwMjRDMzQKKzoxMERGMTAwMERDM0REMEVGNDM2NjRDNzZCOTBDRjE2QTAzRkRFNTVDNUQKKzoxMERGMjAwMDY2OTdDMUM3MkREQUU4Q0U4QzkxMzY3Q0VFQ0IzQzVGOEMKKzoxMERGMzAwMDcyMkJGNzRGQ0I2QTQxOUUxNkJERkI5MUUwRUY0NzQyMzMKKzoxMERGNDAwMDlFM0I4MDg2OUU4OTg0MjA5RkExRERCMEI1MkU5NERGMDQKKzoxMERGNTAwMDRBODFBQkE3NkRDOTVEQjcwMTdEOTdDQTU5MDhDNzVFRjUKKzoxMERGNjAwMEU0NEZDREYwNzc3NjhDQzZGOTYzODY3RkMxNDg1ODU3NjkKKzoxMERGNzAwMEVDRUJDOTE2RjA3NUZGMDI2OERCODA0RkUwNDc1Mzk3NjIKKzoxMERGODAwMDE3QTQyQzdBN0M3Mjk4Qzk0Mjk4Qjc5NTI3QjYzMEQwREUKKzoxMERGOTAwMDkzODhCOUQzREQwRjc0RENEQUY0RjY1QUNDRkI1Njk4Q0IKKzoxMERGQTAwMDVFN0QxRTkwNzhGRkRBNDAxREU2QjU0QjRDMjE5N0Y5NTcKKzoxMERGQjAwMEVFNzNDOEI3MEZGRTQzQjk3ODUyNkZCRUUwNDEzOUNGNTgKKzoxMERGQzAwMDU2RDgyOEMwQkYzMENBOUY0QkI5Nzg5OTc2Q0UyQTE3NDkKKzoxMERGRDAwMENEMzFERTc4QkE3NEZCRjMxNkY4NEZENUU2MTc5RkZGMDQKKzoxMERGRTAwMDA4RkMzMTk1NERCRDBDN0M4MjAzNTk4MEY0NUNFQTUwRUQKKzoxMERGRjAwMDAyNkEyOTgxQjkxOEYwRTlGMUYxN0REQ0RCQjFGRTI1NzcKKzoxMEUwMDAwMEI0RDMxNTQxMkRFNEQyOTEzRTQ2RjI2QjE0NkJCQ0Q3Q0MKKzoxMEUwMTAwMEEyNkY3RjFFNzJENUM4QzY5RDVEQTg3N0Y3RjdBQUNDMDAKKzoxMEUwMjAwMDBCNzBFRENCRjcyMjI2RkNGOTEwOUYyNkY0QzI5NUY3NzIKKzoxMEUwMzAwMDlGM0QxQUMwNjlGRkE2MzI1QzRGQ0ExMUU0MUQ5ODBFQkQKKzoxMEUwNDAwMEY3Q0ZGNUMxN0MwMEJEQkYxQUU0MDRFQkRFNjM3ODc1NDEKKzoxMEUwNTAwMDFERTA3MjY3QkZERDg2NzJDQTY1Q0RBOUUxMzBCRTM3QUIKKzoxMEUwNjAwMEU4NjIyOTVGODYyRkUwM0IyMUU0RTJCQUFDRDA1QUJBREQKKzoxMEUwNzAwMDI2RDc3NUQ5OUU5MzVDNzIzRjE3NjEwQzdENzdDMkU4RjUKKzoxMEUwODAwMDE5MDc3MDhCQTRERTc2RjBGRDVDNjRGMEZEOTBGQkNBOEUKKzoxMEUwOTAwMEEyNUM1RkU1QkVFNDNBRjRENTVCRURDRUU4NjcxNjdEQTEKKzoxMEUwQTAwMDc1RUU0M0QyQjEwRjdCMzU2RTI3Njc3QjU1Q0E4RkNFOTUKKzoxMEUwQjAwMEVFMkFCRUE3MUFFNDkxRDhFNTIyM0I4NjNBNkRCRjUyRkMKKzoxMEUwQzAwMDAwN0ZBNDE0QTY4MUZDRUYxM0Y0RDIwRkUwRjYzNjE3RkMKKzoxMEUwRDAwMDI2M0I0QjMzRkI3MTVGRjlCMTNGMkE5NThDNDM4RENDQzYKKzoxMEUwRTAwMEY4MjM4NjQ1MkM4Q0VGMTVBM0ZCQkU5MjI4NDIzQkZERkUKKzoxMEUwRjAwMDI4RUI3NkEzNUQzRkMwRkFEREE4RkYxRkMzNTI1MDQ1NTEKKzoxMEUxMDAwMEZGMThGMkUwRkQ0NjVGQzA4MzcyRENCQkVCNDgzRUZBQ0QKKzoxMEUxMTAwMDkxRDRDREVFQzJGM0U1NjQyQUNDRUEyNzlENTc5NEM0OEUKKzoxMEUxMjAwMDc5QzkzNzAwQTdBNEZGRjQ5OTQxRjJDQjdFQjg5MjlGM0EKKzoxMEUxMzAwMDM2MTg4RTBCRUJBMjNFMzM0QjFDMzkzNkQ1RkMzMUZBMjgKKzoxMEUxNDAwMDIzMzlENjAyQ0QwQ0U5RDgzMzM1RkUxM0VFNzdGOUZDMkUKKzoxMEUxNTAwMEYxOTVDNjRGRDE3RkVFOUY2MjlDQzBGQkRGQzA3QzBGNjQKKzoxMEUxNjAwMEUyQzNDNURBNDdBODJFRjk0Qjg1NzExMkVGM0JGREQ4MDMKKzoxMEUxNzAwMDM5RjQ2MzdBNDYxRjE2M0JGNDQxRkFCMTUzRThDN0UwMUQKKzoxMEUxODAwMEQxNjJCNDU3OTAxQjhCNUQ5RjFGM0IyQkY1RTA3Njc2RDkKKzoxMEUxOTAwMDNCQ0EwN0Y4RjkyNUY5N0YwREY4MDFCOTlDQzE3RDlGQUQKKzoxMEUxQTAwMEM0QjBGQjk2NjI0NUM0QTYxRTAwRkExNDQxMUZERTU3OTgKKzoxMEUxQjAwMEMwQkYyQjFCN0ZGQzQ3NjUxODFGQ0YwMjM4NDVFQzJCRDcKKzoxMEUxQzAwMDk2OTE3NTE4MzdCRTFFRjJGOUM2QTJCRjMwNEYyMURGRjcKKzoxMEUxRDAwMDRFQjk0MDYwNzY1MzVEMTYzQzc2MEFGNUM2OTVGN0MzOTYKKzoxMEUxRTAwMDMxNjY5NjM4OThERUQ3NzVFRUI3RDI3Q0ExMUQ0MTI2RjAKKzoxMEUxRjAwMDhGN0MyOENDNzQ1RDQ2N0UwMjQwQzRBOEY3RDM4QjA0ODQKKzoxMEUyMDAwMEU5NDFGQjAyODVGODZCMkY2NThERThDRkRCRjBEMTRDM0YKKzoxMEUyMTAwMEQwRjcwNTRBMzdFQUZCQjcyMjQ1M0M1RjFBQzdGM0MyN0QKKzoxMEUyMjAwMENFQzI2NDMwQzRGQjJDMDRDRkNBNDM2QzQ5NDUwNkVGMTAKKzoxMEUyMzAwMEI3MjIyQUMxNEY5QTY2RTQ2MUUwODJCQzhGRjIyNTk5MjkKKzoxMEUyNDAwMEFGNEFCODQwODRFNzk1QzMyMzNDQ0ZBOEE4OEMxNzUxQTgKKzoxMEUyNTAwMEEwMkIwRTkxREMyMThGMUE0RTYzN0YyQUU5MUEyOUZBMkUKKzoxMEUyNjAwMDIyRkNBN0JCMkM3OTQ0REZFODI0QzMzQzI0RDdDODlFRkEKKzoxMEUyNzAwMDM3REMxMjQ5QzdGNTVCMjJDOEM3MkUxOUQ3OEQ1QjExNTEKKzoxMEUyODAwMEZGRENFMTgxMDZGNDczMUVBMDdCNzc2OTI2NUVGRjYwRTgKKzoxMEUyOTAwMEMxMTc1NDU4OTY3RDI0NTI0QUY0NTUzN0VENkMxRDA5MjgKKzoxMEUyQTAwMEZCMUQwRThGRjU2M0RBOTRBQTQ5MDYzMThGRTgxQzA1MzEKKzoxMEUyQjAwMDcyQzg2MjJGMUIyMzNDMEU0RUJCNDVDMDA5NzlDOUI4RkEKKzoxMEUyQzAwMEVGODNGNERCMERFQjYwOTlFRkMyM0NBMDg0RTcwMTBGMTQKKzoxMEUyRDAwMDQ0Q0E2ODlFQ0MwNzAwM0VFMTAxQjhGMDA0OTNGMEI0NTQKKzoxMEUyRTAwMDhGQ0ZCRURFMDM0MjlFOTk3ODFCMkE0MDdGQ0Q1ODMzRTQKKzoxMEUyRjAwMEM1OEJCODg4MjdBRkI1MTg2NzA2NDAyOUZCNUE2Mjc0RUEKKzoxMEUzMDAwMDA1RkZERjEzMDUwNzc3NEE0QkU0ODdCMkM4NkY2MURENkQKKzoxMEUzMTAwMDFFMUZDNkVERDZGMjU1QkU3RUNDRkY4QzA4RTE2RDVDQUIKKzoxMEUzMjAwMDFFM0UzMzYwRjFCNzlEMjU2QzBDRTYwMUY3MzZEQzc5QjMKKzoxMEUzMzAwMDY2QzA2MjZGM0RGOTlDNUU4QzMzMDk2RjA2RUY1MkQ0NjQKKzoxMEUzNDAwMDEzQTBGNzY4RDg5QjlBMEIwMkNEMERCMkE0NTdBMUFCQ0UKKzoxMEUzNTAwMDVCNDczQjg4RThGNDNDNkVBQzY0MjZENkUzRDU2NzM1NzIKKzoxMEUzNjAwMEVBN0YxNUIyMzRGQzI2RDg5QTQ4Mzk3MzIzNURGMTYwRjAKKzoxMEUzNzAwMDkyRTFCQzVDMTgyMzdDN0NGNkRCMDRCRkIwNUE2NTA5RDMKKzoxMEUzODAwMDBCOURFMDdGNTY5MDFFMzhGMkE1MURBODYwODBCNzdEREEKKzoxMEUzOTAwMEE2OTJEQzBDNzgxQjgyNkIyOEZFNkM5QTkzNEJGNzYxN0IKKzoxMEUzQTAwMEREQTQxN0VFREYzM0JFODlFMjk2Q0NBRkRBQTNEMTEwM0QKKzoxMEUzQjAwMEM1QTdFQkNDQTc4RTREOEQzRjg0RkFFODA5QTZGREVBRjAKKzoxMEUzQzAwMEMzNDQ2N0M2QUY2RTg4NzBCRkZBMTlCQzRBRkZCMUZCODEKKzoxMEUzRDAwMEU4NkJFNDNGQTAwNjIxMzk3NzgyQkNCRjlCNjUxRjM3RkQKKzoxMEUzRTAwMDA5M0JFODJDRTQ3QUU4N0NGRTU1QTFBRjdGQTk4OEI3MDkKKzoxMEUzRjAwMDIyMUQwNkM0QjRFMDk0NkJDRjM3REI2NUJFMjlFNDc4RjgKKzoxMEU0MDAwMEJERjIwMTc5N0MyOTYyRjFDQjIwOEYyRjY3OTMwM0ZDNDkKKzoxMEU0MTAwMERBRDA1RkE4RDI1QjNDQUQ2OEE4RkYzOTYyRjgyNDMzM0MKKzoxMEU0MjAwMDkzMzhDRkM3OUEwOTQ4RjVDNzE5QzZCQkMxNzg1MjBDQjMKKzoxMEU0MzAwMEU3MkQxM0ZDN0Q1MDdGRkMxRDQ4NkZCODVGMzM5RThFMjcKKzoxMEU0NDAwMDUwNURDOEY1NTlGQTY1QjA0QjFFN0ZBRkQxNkZGN0JBNzIKKzoxMEU0NTAwMEMwOUYwMjNEMUQ3ODZCNjZFNkY5MjFCMUNGQ0Y1NTk5N0IKKzoxMEU0NjAwMDg3NzAxRjI3OTRGODU2QTJGQzFGNTU4Q0EwNUZDNUJFNkQKKzoxMEU0NzAwMEE3RDk4ODdFODRFOTUzNkNGMzA2QUZCMzg5RjBGNDk1OEQKKzoxMEU0ODAwMDk5NkJEMUFFOTlCRUY4MEFGMDlCQzVCQTgyNEY5REYzNDUKKzoxMEU0OTAwMDAxRUI3RTI1Nzc2QzY2N0MyNUJFN0UxMDMxN0U4NkYyOTAKKzoxMEU0QTAwMDZBMzVFM0JGNDBCQjdCQjlEQ0E1MjcxNEJBOTIxRDc2NjEKKzoxMEU0QjAwMDU2RTcyNDE1MTgwN0E2OThBRkYzN0QwNDNGMEFBODNCM0EKKzoxMEU0QzAwMENCREZBMUJDNjhFMTdDODVGMkI0ODUzRUE4RTBCMkY4NjAKKzoxMEU0RDAwMEM5RjMyMkRFMkNENEY5NzM3NkRBMDg1QUZCMUQ4NTUxNzQKKzoxMEU0RTAwMDk3QkRFRTA1OTUzMEFDRkQ4QkE4NkIxNUY2RTU2NTNDNDgKKzoxMEU0RjAwMEMzQkU0OTM2N0JCQjI4RUM0OUY1QkU1RDgyN0VGNTY1MUYKKzoxMEU1MDAwMDc3NzZCRkZENEVDNDQzNzA0QTU0RjQyNTQ0RkM1QkVBNjEKKzoxMEU1MTAwMEU1RjUxNTdCMTFFOEIzQzREN0U3QUE2QUZGOEZFMjYyN0QKKzoxMEU1MjAwMDgyMjUxNDRCNUNFQzFCN0Q5MUZDMUQzREIxREM1RjI4MEEKKzoxMEU1MzAwMEZBNEVBQ0Q3OEU0N0YyNTkxNDY1QjY3NTQxNUY1RDUxRkUKKzoxMEU1NDAwMERFQzc1MEEzOTZFNzRCNTVDNkZCMUUzRDc2NzkwMTNEQ0QKKzoxMEU1NTAwMEJFMjhBRkJCOUI5NEU5NTlFOTE5QzdBNjY3QTFFNzk0MDgKKzoxMEU1NjAwMDlEOUVBMjI4REY5N0U3QUE4QzIyQzQwN0YxNzkzOEQyQjIKKzoxMEU1NzAwMEQxNTEwQkZBOTc0NUJFRkIyNkQ1REU4NDcwMUE0Qjc0MzkKKzoxMEU1ODAwMDk0OTVCRTZGREU3QTBCRTI5MTYzNEJERUFBNDdFREZFRjcKKzoxMEU1OTAwMEI1MzRDQUZENkI1OTk0RkM0QUY2NzUyQjg1RENBRUQ3QjEKKzoxMEU1QTAwMDNGNUNBQkRENkY3M0Q4QkJCQzc2RjY3RjJGQUYxMkU4NTQKKzoxMEU1QjAwMEYwN0ExMzlGMjY3QjlENzg3NUY2RkRCMTVCN0E0NjIzMzIKKzoxMEU1QzAwMDlGODc4NDdFQTI2RkM3N0NDM0QwNzkzRUYyNjA5NEVCQjQKKzoxMEU1RDAwMDcxNzg0MjkyRTA5RTFEMjJGRjQ4QzM4MTYwQjAyRjM3QzAKKzoxMEU1RTAwMDU0MUUzMkYzMUFGMzkwQ0VEOTdENzk4OEE3RjVEREREN0MKKzoxMEU1RjAwMDc5NThDNzNGM0I1MDlCMzUwRjM5NTREMjQ1NzQzQUYzOTUKKzoxMEU2MDAwMDkwMDM0M0U0MjE2QkEyM0M1RjNERkFCRjFFQ0EyQjZBMTQKKzoxMEU2MTAwMDJFRjAzODVGNzNBMTRCRDU0MTNGRDc0NUI5M0Y5QjM5QTkKKzoxMEU2MjAwMEQwQTM5QUEwMjczNTk4ODcwMDlFMDMyMjBGNDFGODRENkEKKzoxMEU2MzAwMEEwQkE5MTc3QkI1NEE0NkJFNjg1MUU5QTU3MDM2M0NDQUUKKzoxMEU2NDAwMDQzNjYwRTkxODcwMDE1MkFFQURERkU5QUNFNTc3MURGRTgKKzoxMEU2NTAwMDlDRkNCRTU4Njk2RTg4NUFFQUFERUFGRTFFN0E0RjIyQ0IKKzoxMEU2NjAwMEU3NzU5NjZGQ0UzMzY5OUZFRDdBNzM2QzJBQTczNzMzQkYKKzoxMEU2NzAwMDhGRUJCQjEzNkUyOEZEQUE1M0ZERTVEODFGRDhDQTcyRDUKKzoxMEU2ODAwMDQzMjg4N0Y3NzI4NjU1QjIwMjVFRDc2MDVFQkMxNTQxOUIKKzoxMEU2OTAwMDgxRUZBREE3RjM5MjA5QUNBQjdERkNGOTY3NzM4N0VEMTEKKzoxMEU2QTAwMEM2QUJGNDNGM0U2MTE3RUZFNURDOTIxNDc1OTA1MTAwNjQKKzoxMEU2QjAwMEYzM0ZBQjFBQTlCOTEwMEZCNjhFRkI2MjgwRjNCMzlFN0QKKzoxMEU2QzAwMEVDNjg4MzkwNERFRDRFOERFQUU5M0I4MjdDMUY2NEZFNDEKKzoxMEU2RDAwMEY1RDI1Mjg1RjI0MzQwMzM3RjAxQzBDRjEwRjgzREQzQ0QKKzoxMEU2RTAwMDc4N0Q1OEFGRkEwOTZFNUIzOUNGMjNFRjQ4NUNBNEZFMDIKKzoxMEU2RjAwMEM1Q0M3RThGQUVDMzc4NDZGRjFBNUUyRkFBM0YzQzlFRTQKKzoxMEU3MDAwMDg3RjlGRTQ3MzRBNkMyRkRBNTZERjE1NkQyQ0ZEMzFFQzAKKzoxMEU3MTAwMEVBNjdDOEZFNDI1NTZGMzdDOTJENkZDMDYzRUI3M0U0REIKKzoxMEU3MjAwMDgyMjc0QjU5RjIxNjhGNjNDQ0Q0RTUwNUQ5RkM5MEJDRjcKKzoxMEU3MzAwMDNBRkIxMEZCQTJBMkZFQUM2NDkzMkU4MzVDMkVCMTQ3ODEKKzoxMEU3NDAwMDNBOTAzN0VGRjhEQUEzNEZCMUMxRjM2NTdGRTFDMTQ5RTEKKzoxMEU3NTAwMEM2MzNBODFGRTNEQ0ZEREY3RTA2RTQ3NUUwMkQwRkY1NzAKKzoxMEU3NjAwMDJEMEVFQ0RBNzU3NzI1RjA5N0U4RDJBOEFGMkJFQjE5RDAKKzoxMEU3NzAwMDkwNUJEMTIyQUM2NzUxMDZENDk3M0VCOTBBRjVGMjYwOUUKKzoxMEU3ODAwMEJFMUM4MzQzMDNCQTBGQTZERkQ3N0Y2Mjk1NjExOTlGMzIKKzoxMEU3OTAwMDg4NkUzOTg3NzFFRkUwMDgwOUZGMjY5RjJGQzc4OUZFMzEKKzoxMEU3QTAwMDU1Nzg1RUUzRTAyODNFQkUxNDU1OUY0QUQwRkVGNjZCRDYKKzoxMEU3QjAwMDU0NDc2RkZDQTUzRjlCN0YzQzU5NjdEN0Q3N0JBQUQ3QUYKKzoxMEU3QzAwMDczN0RCREMyM0NGMEVCQUY0N0IzQ0NDQjU5NjA2RUFCQjEKKzoxMEU3RDAwMDAwNzkxQzFDNzBEMUZCMjFBOEIzNTI5ODFGM0MzOEM5OEEKKzoxMEU3RTAwMDdDMDNFMTFGM0RDNUU1N0FGMEFEODcwMkI4NEZERUUxNUQKKzoxMEU3RjAwMEZEMEY2N0YzRjNCRjExRjEyODVERTc0REU2RkU4M0IxMkUKKzoxMEU4MDAwMDAxMERFM0Q2OEUzOUNGOUVBODg0NzU0RUNFMUMzRjQ1QjAKKzoxMEU4MTAwMDA1MTY0MDE2M0VDQzk3RTU3QzZGMURBRkUzMzJGNEJEODQKKzoxMEU4MjAwMEEyQUU0MkZGRjNENkI5ODY2Q0Y2NUUxNTM1N0YxRkI1RjIKKzoxMEU4MzAwMEMxRjNGN0EyQUQ1RDFBQzlCRkU4RDhCQ0RENzhFRTI3RjkKKzoxMEU4NDAwMDU1RDNENUEzQzFGRTFFRjg4RDhCNjE5RDcyQTA0MkQ0MTUKKzoxMEU4NTAwMEUxNDNEMTE1MDJCQThBQUU4QUFFNUQzM0IyRTgxQkQwNkQKKzoxMEU4NjAwMEU1QTkxQjMxOThBRTk3RUIxOEM5RTdDNTRBQzM4N0NGMTYKKzoxMEU4NzAwMDlENzQzMkQxQzc5QzI1RkM3RENFOUI1RkE0QkVFMzgxRjUKKzoxMEU4ODAwMDdFMTczNTRGMkUwREVDNTY1MUY1NjRGRkJCRjM1NDE5MkUKKzoxMEU4OTAwMDY2NDA2Q0VFRkNCMzJBQUE5NEY5ODg2QUIzQkIxOUE3NDgKKzoxMEU4QTAwMDcyNkRFMzA3OUE4N0RCQzZDQkQ2OEVDRUQ4MjFGQ0JGMkMKKzoxMEU4QjAwMDM4M0FENjM2RjYwNjZGQjc4REMzNkNBQTZEREMzMEZGREEKKzoxMEU4QzAwMDBFMUJCRUJBNDBDNDM2OUUxN0JDREIwNjdGQTdCRUM0NzMKKzoxMEU4RDAwMDM2QkVCQjdDOTkwRDdFNDE2OEI1RUQ3OTRENjBFNzE2N0IKKzoxMEU4RTAwMDZDMUZDNTI3NEVENjg2MzNEMkM3Qzk3NUIwMEY3OUJEMDgKKzoxMEU4RjAwMDA2RTlFM0EzQTcxRTBBQTA1RUE0NkFFMjYzNTBERkZBNUEKKzoxMEU5MDAwMEYyN0I0QUIwN0ZGRDkyM0I3QkJERjY0ODlEMkFFMzc3QzAKKzoxMEU5MTAwMDA5QzY3QjgzRjE3QTREQzI4N0NCRkE2RDdERjlENTc1MzcKKzoxMEU5MjAwMDNDM0VBRkE4NTNCMkY2MDk5Q0YxNThDNjYxMTk5NzlEQjkKKzoxMEU5MzAwMEVCM0JFM0FFMzNERTJFQkM2REI3OEZGN0ZCNzlEQzVGQ0MKKzoxMEU5NDAwMDJBRjRBMEI1RkM2NzdFQUNENzVGNkFFMDdEODRDRTkyRTYKKzoxMEU5NTAwMDM4RjUwREZBNDQ3QzNFQkFGNEJFMzFGODVFMkRCN0RDRDIKKzoxMEU5NjAwMDFDRUUyRENEQzRFQjQ4Nzk5MkZEMTJGQjNDODEyNDFCOUIKKzoxMEU5NzAwMDVCODFDRjkzNkM3NTA1RjVBNUI1Qzg0NDdFN0Y4MkI4RTEKKzoxMEU5ODAwMEJGMDZBRjEwQTdFQjJENzI3M0M2REZCMDZGRjIwQjA1OTkKKzoxMEU5OTAwMDJDOTNBRjM0RkNDMTg4MTYwMDdENzczNUVERDM4QUUxMjYKKzoxMEU5QTAwMDFBRjExRkQ2QUM3RUU4NjRDREFGOEE4Nzg4RDM5RkI0QjYKKzoxMEU5QjAwMERCQzcyQjY0MUYwNzA2MTZCRjZGMUM3OEEzODVGN0REMjYKKzoxMEU5QzAwMDdGRDBFMjYzMjlFMEVGNzQ0QjgwQUUzRjZGMDlEMkZENDgKKzoxMEU5RDAwMDU3NUE3NEJBQjZCNzk0RDMzNUQ1MTJBMkU3QUZCNjU0MjYKKzoxMEU5RTAwMEQzRjVGOTE2ODNBRUM3NUE2Mjc0M0RERTEyMjdCODlGN0QKKzoxMEU5RjAwMEI2MzREMkY1QzUxNjkzRUU2RjE3NzZGQTYxQTFDNzI4MjMKKzoxMEVBMDAwMDk3N0Q4NUY4NTE5NzQyNzI2REMwQTNCQUIzMkUxOEFBQUMKKzoxMEVBMTAwMEQ1Q0Y4MzVDRkYyMzlCNUNBRjM1OUVBNDZBQkE0N0EzMjYKKzoxMEVBMjAwMDlFNDFCQ0NBNkE0RkRENzUzMkFGNEZFRjM3RDEyNUYzMzcKKzoxMEVBMzAwMDYxQUM1RjUwNEY2NDlGMEVFOEZCMjZEMkU3QzVGRTVDRDkKKzoxMEVBNDAwMEQxRjVEMzc3NTBFMTc0MUQyQ0U0RkQxQkM0QjMyODFGMEUKKzoxMEVBNTAwMEZERjlEN0UyQjVFNENGNDc0QzI2N0YxRTY0OUFERDlGQ0YKKzoxMEVBNjAwMDk3MEVGMkU3MkJDOUVFRDg3MUVDOTM2MjdGOTFERTUzREIKKzoxMEVBNzAwMDM4RkEyMDA1RjUzQUNEOTM3RDkwMzk3RkUwN0Q5MDJCRDMKKzoxMEVBODAwMEYxMEY3QzFGNDdCRjI1RkRGNkQ1RjJFREU0RjdEODU0MTIKKzoxMEVBOTAwMEUzNjVDNDIzRTNGM0EwRjg2MUFFQTNGODUxMkQ2Qzk2QUYKKzoxMEVBQTAwMDY5RUY1MjlFOTgyN0Y4RDk3MTZFNzEwMUZBMTcyRjEyRUIKKzoxMEVBQjAwMEM4RUI3NDgzNTVFMzNFMzM3OTFFNjBGN0RBOTJDMTc4NzAKKzoxMEVBQzAwMERGQThFOUE2NzhCRTJEOURFN0JDNEQ3OUNDRTBGODY1QkUKKzoxMEVBRDAwMDk3MDNFNjQyRDZGODBFNzI3OEIzQUU2QUIwN0VENkE5MzYKKzoxMEVBRTAwMDNGRUNERjBDRjFGOTYwM0ZFMzdEQjI2OUZDN0Q5RDhDNkEKKzoxMEVBRjAwMDgzMDcyRkYwM0VDNjI1NEQ0OTMyRDhCQTVBRDZEQzM1QTkKKzoxMEVCMDAwMDAzQUVGQkJGQzA4QUUzRjhCRTY5OEMyQkI0MTc0MEYzOTkKKzoxMEVCMTAwMDhFMUNEMDdEMDAxN0VFMzc4N0U3QzBGM0VBNTQwRUNEODgKKzoxMEVCMjAwMEFCOUQzRjM5ODlFMzg2RjhEQkU0OUY2QTM1N0I5Q0M0NjMKKzoxMEVCMzAwMDBDMzUxRDc3QTgwOTU2RTQxOERGOUM4MTU3NzE3RkNCRUYKKzoxMEVCNDAwMDMyNjNDMEJCNkVBQUE5RDUwMzVGOEIyRjM2MzMxREYwOEQKKzoxMEVCNTAwMDdCNEI5ODlCQ0U4NzBDOEVFRkVCMTQ0QjlGNEQ2M0ExQTQKKzoxMEVCNjAwMDBFRTQ0M0ZCREMzNkZFNUVDRkExNkY1MjRFQjJERjI2RDEKKzoxMEVCNzAwMEVCRjAyNzk5MTFDMEY1OUNGOERCQzQ3QjE3RTdGQjk2RjcKKzoxMEVCODAwMEY3MkFDQzIwQzIyQjgxNjNGNEJFODVBRDY1RkM3Qzg0NjIKKzoxMEVCOTAwMDBCRUExMzk0REYzMDRGNzI2RkU5NjBCRERCM0ZFNUNFQzcKKzoxMEVCQTAwMDMxRjU2NERGMDlFNUM2RDRFRDVEMEFENUVEQTI2RTYyRUMKKzoxMEVCQjAwMEZBQTc1Q0Q2M0E0NkQ2NERDRUZBRTgzMUUxNjc2NTVERjQKKzoxMEVCQzAwMEY0OTg5QjUxQkRENUFFRTQ4Njc2MTM5M0NEOTNGOEZCQjQKKzoxMEVCRDAwMEI4RTYxOTc4QURBOTk3N0VFOTBCQjYzQUM5MUZBODNGRTgKKzoxMEVCRTAwMDMzMzAzNTVCMURDN0VCMTE3NzdBQkY0QjAyRTdGMzMyNDkKKzoxMEVCRjAwMEZCRURGNzk4NDEzQ0RGRDgzRTc5REQ1NzU2QTJCQzQ2ODUKKzoxMEVDMDAwMEY4RThGRDI2RDNFMjNBRkE5QkM3RjE0NDNGREE3MzIwRDUKKzoxMEVDMTAwMEMxOEFBNzY3RjY1NzY1REE3OUVDQzc3NjQwRjI4MkVGQ0EKKzoxMEVDMjAwMDc3RTNGNTNDOUY3MEQyRTVCRTQ2QkE3MDIzRTkzREI1NjcKKzoxMEVDMzAwMEI0NzcxNjE3RUYyNTc5MUVFOTEzRjdEQjc0NkVGNzBDMUUKKzoxMEVDNDAwMEZEOTZFNTNENzk5QkRGRjAwNTJDRkJGODI4Q0FEOTNCMDIKKzoxMEVDNTAwMEY0QkVBQUE1NkQwMUVDNjc3N0Y5NUQ2NEE3MURCQUI2OEQKKzoxMEVDNjAwMEI1MTRDNjFEN0U4REU3MjlCQTJCOTZFRDdENTI0N0JEQTIKKzoxMEVDNzAwMDIyRjhFNjc0MDUwNDVENkE3ODMxRTUzMzQzQURENzI5OUYKKzoxMEVDODAwMEY2NUQ4RTczMjc5QTA2RDk5NTFFOEE2M0JEREJFQTJGM0YKKzoxMEVDOTAwMDU2QjBDRjI5OUZBRkFBNTdDNEJFNzc5MTFDQjY4QUZDNDUKKzoxMEVDQTAwMDI4QjdCQzNCRTU0MjdEMTlCNTY2MkE4QUNEMDdGOUNFNjcKKzoxMEVDQjAwMDc5QjhFRjlCRDg0REY5NTFGQjA4OUZFRDdDOTZCQzNFOEYKKzoxMEVDQzAwMDI2RjA2RDc1ODc2MjU0QkZFN0JCMThENkVGNUI0QkIzNzgKKzoxMEVDRDAwMEM3QzM4N0M1RkVCNkVBNTNFMjA4OUYwMEI5OEM1NzA2NDIKKzoxMEVDRTAwMEMzQUQxMTcwNUJEQzVEQzEwMEFDQkI3NUZDQkQ3NERFRjcKKzoxMEVDRjAwMDZCRUIxODcyMzU2Q0Y0OEY2RjdCNkE5MzdGQjA3REMwQkQKKzoxMEVEMDAwMDk4RjZDRjFENjBGMjNEQkFFRERDNDNBQkRFRDBCODEyMTEKKzoxMEVEMTAwMEQ2RDU1RTYxMjEzNDBCNjkzN0RCMzEzRjgxQUI3QkQ0QzMKKzoxMEVEMjAwMEUyNDZENERGNEJENUI5MjE4NEFGNTM1RjRDQTAxQ0RCNDYKKzoxMEVEMzAwMDQzOENGQTE2NUE2MTkzMEZFOTdFQjQ0NEEzNzMwRTkyODIKKzoxMEVENDAwMDVFQzhCQjc3QTNGRkM4MEZCOTZDRjk3OTQxNzVBRUMzMzQKKzoxMEVENTAwMDhGREFFOTgxRjU0OEVGODZEQTVGMjc3RDk0OTI0Rjc5NjMKKzoxMEVENjAwMDFGRjg0MkIzMzE5RTA1REZBQjY5N0JCN0VCOTdGQjBBMTcKKzoxMEVENzAwMEZBNzUyNTdFNkM3MUIyMjQxMzI3OEYxQ0ZCRDdENUY4NEEKKzoxMEVEODAwMEJFRTM3MUM2OUYzRjdGNkMwRUQ1RURDRUYxOERCMkYzMjEKKzoxMEVEOTAwMDU2QURBQjExRjdBNTc1OUM4N0Y0Q0YzOTdGNkIyOUE3Q0EKKzoxMEVEQTAwMEFCQjU3RTk2NTgzN0EwQTBGRTZGQUYyRUNBNDEzRkVEOUYKKzoxMEVEQjAwMDQ3ODc2QjkxRUIwQjk1RTZDRkVCMkQ3MUI4MzBEQTRDQjIKKzoxMEVEQzAwMDcxRjhCQkY1OENFNEU4RDdFMzgxNzFBMDE3RkU1RTE1RkUKKzoxMEVERDAwMDc0MEFFNEVFRkFGMzFGQ0VFQUQ3MkU0N0Q2NjU5MERFMkEKKzoxMEVERTAwMEZBNTlFNkY3Njc5MENCMzBDNkY1QzRDRjFFRUJBMUI4NTEKKzoxMEVERjAwMEM0MzYxMDlDOTREN0Y2NUI0Rjg2NTI2Q0U4NzVGREQ1RUYKKzoxMEVFMDAwMEY2M0VEMzA3RUQyM0ZEQTkzRUJGOThFNDlDQzM3MjUwQTQKKzoxMEVFMTAwMENFOTdEODIzMEFDNUUxQTg0MTc2MTc0OEZCNTU3RUZFNTgKKzoxMEVFMjAwMEE0NTgwRTgxMUQxQzkzQ0EyOTk5RkUxMkMzRjcxNzY4QjYKKzoxMEVFMzAwMDVGMjZBMzNDODUyMDQ3OEE1NzU3M0FFRDBCQ0QxQjJEMDMKKzoxMEVFNDAwMEQwREM4QzA3NjM1NEQ0N0ZFRTc3MkZCMUI3RjhGQTMwNUIKKzoxMEVFNTAwMDBEQ0Y5RjI4MDkxN0M1Q0I1QjUxQUYwMUFFOTQ5OTdGQTkKKzoxMEVFNjAwMDNDOUJFNTVDQ0U5ODQwRDNCRUQ1NzAyRDlFMjdGQTYyQzAKKzoxMEVFNzAwMDgyOUYyQkM5NDNEMkZEQjdEMjVCMTlFNzlERkQ1MEQ5QzQKKzoxMEVFODAwMDJGN0QwNkZCQTVDQTk1RkJBMTRDQkI0ODcyOTM3OUFDQkMKKzoxMEVFOTAwMEIzM0YwQTcxMkQwRkU1RkVERTA0OEQ3NTkyREM3OTFFRkQKKzoxMEVFQTAwMDkwQTlENzREOUZGNTFDOUQ4Qzk3RUQ4MUM1QjYzRUZCNzMKKzoxMEVFQjAwMDBDQTk0QjBFM0VCRjc3ODVCOEQ4RDkwQjdFMTNGM0UxNzIKKzoxMEVFQzAwMEUwNjZFQUIzRUYzRkJERUEzOEQ2RTM5NzgyMUU5RDU5NkMKKzoxMEVFRDAwMEZDN0Y3QkJFRkQzRDgwQzRGQkY5NzlBMjlGM0VBQTlFQ0MKKzoxMEVFRTAwMEUxN0NBREM3NjQ3OEZFQ0UxMzBDNTE1QzY4NTVCMkJGQUYKKzoxMEVFRjAwMDNGNjg5RDI3RjIwOTY3OUM3MEJDNjdGOTlGMUM3RkQyMTEKKzoxMEVGMDAwMDUzQzZEMkYxNDMxNUZFNTlDNjU3QTY0MTE0MUQ2OTlEM0IKKzoxMEVGMTAwMENGRkRBODk0Qzc3RTkxNTc3NjFFRjkwNDlEMTc2MDQxRDYKKzoxMEVGMjAwMDRCRkZCNjJDQ0JGQUNFRkNDRjMwRjRDMEY0NEMzRUFBNEIKKzoxMEVGMzAwMEY0RjMzQzU0QUVERjJFRUFFN0Q2RDM3QzNGNzJDNUI5N0EKKzoxMEVGNDAwMEExNDFGQTVBNjE3RTdBMUVGNjdGQ0E1RDhFM0U5NUREM0EKKzoxMEVGNTAwMERGMzhGMzVBQUY4RjI1NzIyREZFMEZGMkRBOERGMzI4Q0EKKzoxMEVGNjAwMDFGQjFFN0E1QzM2MzhDOUZFRjI5MzQxOUY2NzEyMjQxQzUKKzoxMEVGNzAwMDUzQzVCRUNCRjRERTY2OTUwMURGMzM0RUJGRkY3RTJDNUEKKzoxMEVGODAwMDlBQzdGMzlDRjZGMjU1NzFBQzdGNjQxRjc5Qzc5Q0JCOUUKKzoxMEVGOTAwMEM4QkY0MjFDREQzQUNGNTJDN0NBNzMwQjFGQjRBRjI0OUYKKzoxMEVGQTAwMEY1NzVCQUQ4NDc4OTZGRDBGOTkyRDkxQkY4RkI5RkQzNzIKKzoxMEVGQjAwMDBGOUQ0MDdEREMwRkZBODg3MUJFM0QzRkIxQUQwMkYzN0QKKzoxMEVGQzAwMDkzNTc1NEI2NTcxRkRDODc3MkYyMjVGQjQ5RkUxOEQ3QkEKKzoxMEVGRDAwMDUzNEZCMEZERTg1Qzk3NDUzRUZEQ0RBQTRFRjIzMTE4ODcKKzoxMEVGRTAwMEJFRUZEMUM0RkIxRTY3RkZDOEVCMzU5QTMxN0VBNzZBMUUKKzoxMEVGRjAwMDhDNDY2QkZGNThDQTZEOTFEMEU3Mzc2QTlBRTk3REQ0ODkKKzoxMEYwMDAwMDMzNDNCQ0ZGOTU3MEY4OTkxOEQ2RDNCMjFGNTUzQUM5NEYKKzoxMEYwMTAwMEZDM0VFRUVCRjREODdBMTVERDQ4NzU3QzNEOURBM0NDMjMKKzoxMEYwMjAwMEZCNzc0Njc1MjBDQjU1OTI3QjYxQTkyMzczOUVBNTNBNDkKKzoxMEYwMzAwMEYxRjc0MTQ2RkQzMjBGRDY4OUM1NTgxN0YyM0E1MUQ2M0QKKzoxMEYwNDAwMDlGRDI0RkQ0QTk0Rjc3OTRFMUY5OEM1RThEQ0VEQkU1NEEKKzoxMEYwNTAwMDFERjk4NDBGRjNERTcwRUY2QUFBRDUwQzY1NjkxRUVFMDgKKzoxMEYwNjAwMEEzM0M3RjI0RTlCQ0RFM0FCMzBBRUI0Q0NCN0I5MjhDMDkKKzoxMEYwNzAwMERGODhGRDAyRjVBMEIzMjVGRThCMjhFOEM3ODExNjgzNDMKKzoxMEYwODAwMEM2RUQyRDhENzRBREQyOTIwNkYyNTM1NTRFOTUxQjlCNTUKKzoxMEYwOTAwMDM1MDBDRjJENzQ1NEY1QzQ2Q0UzMUQ5NUU2MTlENENCMUYKKzoxMEYwQTAwMEJDRjJCOEVEQkUzNzA4RjgyQzdBMDE3NUVFMzk5MkVGNTQKKzoxMEYwQjAwMDY5MkU0RkNGN0M4NUNFMTUyQ0VDNjc1QkI4NkRGRkQzRTYKKzoxMEYwQzAwMEY4MjEyRDc2NjNGQzUwNEVFQzdERkQxMDdGNUZFQUU5NjAKKzoxMEYwRDAwMDE3RUY0QjFERjZCNjY3OUU0RTc2OTBCNjNCN0M2RjRBOTcKKzoxMEYwRTAwMDcxMkU0MUYzRTlERERGNENFMDY3RDgyN0I5REZDQTlDMTgKKzoxMEYwRjAwMENGQTBFRjEyQzNFMjdCNjkzRDM2NkIwRkU2QjNFREFGRjUKKzoxMEYxMDAwMDMzRjk5REYwMUVDM0YyMUNGRTZBQzJFRjQ0MEU2M0IxRDgKKzoxMEYxMTAwMDBCNzlFNkU2NTg2MTEzN0Q0RjJEQkU4Nzg5MzQxNjk2MkMKKzoxMEYxMjAwMEY0QjFDQ0I5NDVBN0JDQjZDNDVDQjY3MzMxNjFDNkZCQkIKKzoxMEYxMzAwMDYyRjJGOTI3NjNBMjZFMDM3NjVDOTY3MzBGQjk3OEVFREMKKzoxMEYxNDAwMDIxNEJGRURFMjRGMDM1MEIzOTc1NzhGOEI5ODNCOThFODIKKzoxMEYxNTAwMEVGM0M2NkM2Nzg1RDMwRDQ3NzFFOUYxMzc4QUVGNDVEQzEKKzoxMEYxNjAwMEM3NjIwMTc3M0ZBRTU3NDVFNzIyQzMzMUE0MzcyRUJFQjEKKzoxMEYxNzAwMENGMTI3NENDRUE0REI2MEVDMzI0MzFDOEIyRTJCOTMzMTMKKzoxMEYxODAwMEM2Q0ZFRkE1NjJGQzNDQjEyNzY4NjhCODJGODBFRjZFNTAKKzoxMEYxOTAwMEMyRDdDOENGNTlDQUU3QjMyRUE0OUYyRjI0M0Q2OUUwMzgKKzoxMEYxQTAwMENGNjc1RDMwQTkxRjI0QkZBRkJCRjNGOEQ4M0Q5QkM2MjYKKzoxMEYxQjAwMDY1Q0VEN0I0NjMzRkMyOEZERjk5RjA3MzRCQkIwNEZEQkMKKzoxMEYxQzAwMENFQUJGQ0NFRTRERTgwMzhBNzkzQjg3NThGODE3ODBDODcKKzoxMEYxRDAwMEZFNUQ2NUVERjEwOTAzMDk4REQ2RkYxOEQxMjdCRUFCQTEKKzoxMEYxRTAwMDk5MkNGODg1RkJBQjg4MkVDN0JGMEZGMEMwRjFFMDFFNEQKKzoxMEYxRjAwMEYxM0RDRTFBOUFEN0NDRTlDRUZDN0IwN0ExM0RENkVGRTQKKzoxMEYyMDAwMDdCMjYxRkFGNkMxMkYwRUIwODdFMkQ4N0NGQTIwRjQyM0EKKzoxMEYyMTAwMDFGQTdFQ0MxNUVFQTU1RTBGQjBDRDFCNzlDRDM1NzE2OTMKKzoxMEYyMjAwMEQzRjk3NzU5MEVCRDA1QjhDRkQzQkFFMjNCOUZERUY4Q0MKKzoxMEYyMzAwMDZBMUZGQUYzQ0NGN0ZCQjdEMTdBNTcyMUE3MzZDMjYzMUUKKzoxMEYyNDAwMENBRjU5ODM4Q0ZDNEVENDJFQUJGRDQ4NzZGMDhGREJDMzkKKzoxMEYyNTAwMDNEQTY0OEJEN0E4Q0U4NkRCQTYxRkM3Rjg5RTg3MTdDNzcKKzoxMEYyNjAwMDU3NzQyNTNFMkEyQUUzNEZEMEJDNjBGQTVDRjFENzg5NTcKKzoxMEYyNzAwMEFFRUJBNDQ3N0UwN0U2QjQ4QkVGMEJGRTYxRERBNzY5MUEKKzoxMEYyODAwMDlEOTIxMDlEMkY4Mjc1QkY3RDIzRDYwNUJDQ0YxMDFFODkKKzoxMEYyOTAwMDVGMUFFRkZFNTg3NjdGRjM4MUYwQjI5MkUyQUIzQTFGMkQKKzoxMEYyQTAwMDIyQzdGRjBGOTRCMEJFMzYzMDQ2MDAwMDAwMDAwMDAwQjkKKzoxMEYyQjAwMDAwMDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwOUMKKzoxMEYyQzAwMDAwMEI5M0U0NjY2MEY4NTEwRkMxODE0ODZDNjJGMTFBM0IKKzoxMEYyRDAwMDc2MDY4NjY4MTYwNjg2OTlBQzBDMEMxNTQwMkNDNzQ5MzQKKzoxMEYyRTAwMDlBRkVFNTQwRkQ4QjgwNzgyRTEwQ0YwMEUyQzk0MERDMEQKKzoxMEYyRjAwMDA3QzQ5RDQwREMwMkM0OTI0MEYzNDQ4MDk4MUY4OEI5NDMKKzoxMEYzMDAwMDgwOTgxNTg4MTk4MEY4MzcwNzAzQzMzNzBFODQzOTM3N0EKKzoxMEYzMTAwMDgwNjIwRjQ4QjQxQjg0QUQ3ODEwRUMzMzQwRkY2RjA0NUIKKzoxMEYzMjAwMEUyQUI2NDg0QzMyODFFMUUzODlEOUY4MUExNUEwMEMxOTAKKzoxMEYzMzAwMDE3MTA0NDk1Q0ZFMDQ3QjBCOTQ0MjlCMzRCMUFBODFGMjIKKzoxMEYzNDAwMDAwNjU2RDQwQjQ4MDAzMDAwMDAwMDAwMDAwMDAwMDAwNzQKKzoxMEYzNTAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRTU3RDBCNzg1NEQ1RTIKKzoxMEYzNjAwMEI1RjAzQThGNzk2NjY2NzJGMjIwNEM0MjgwMTM0ODMwQ0QKKzoxMEYzNzAwMDZBOEEwMzg0MDg4MkY1MjQyMEM2OTZEQTkxNTJDNUZFNzMKKzoxMEYzODAwMEQ2MEUzNDIyNEEyMDUxQjE3MjJCRkQ3MjYwMDIwNDAxNjQKKzoxMEYzOTAwMDNCQkMxNDE0RTlFMDBEOEE4QTM2MjI1NkFDRTgzRjIwQzMKKzoxMEYzQTAwMEI1QjRCNTZENkNCOUQ1NUFFRDBEQjVBRDJGMEM4ODUyMEQKKzoxMEYzQjAwMEZDRkJFQkU1RUVCNTFGOTk3MzRFNjYxMjUwRjFCN0Y3MDMKKzoxMEYzQzAwMDBGOUZFRUVDQjM1RjZCQUZENzVFN0JFREI1NzdEQ0IyMzIKKzoxMEYzRDAwMDBGRjI4NzAyOUNDNDlGOEIwMEVFNzAwM0MwRDg3NDNBNzIKKzoxMEYzRTAwMEVBQjY2RkNDN0RBNDlBRkNGRTdGREQ5MTZEN0FCQTlFNjEKKzoxMEYzRjAwMDQ4ODc4MjQ0RUIwMTE4MDA0NTAwMTc3OUM5QUZBNERFQTUKKzoxMEY0MDAwMEE0OUYxRkZFRDM3OTg1MDA3QjQxMDEwRkY5OTQ1MjI3RjkKKzoxMEY0MTAwMDE1N0M4REY0QjNGNzIzODg2MEI5RkNGMzQwNjk1NzAwN0QKKzoxMEY0MjAwMERCOTlCNEREOTc4MUI1NEI5NUU5QTU1QTE1NjY0MEM2QzEKKzoxMEY0MzAwMEVGODY5N0ZFNEVGQTE5QkVCOTk5QjQzRkZFNjE4MEI2QzkKKzoxMEY0NDAwMDc3QzIyMTUyRjg0ODg2MTQ2RjczNzIxOEY2QUI3RUQwREIKKzoxMEY0NTAwMDU1QzlGMzY1NDAwNjA3MEVFRjY0ODA5QTM0QkNGQjVGMjQKKzoxMEY0NjAwMDdCODNDMkJCNEYyNUYwRUExOUM2RjcxMkY4MEJEM0YwMjUKKzoxMEY0NzAwMEVGODU2RkU0NDIxNTgzREZBODQ5QzM3RkJBRjBEMEY5NjYKKzoxMEY0ODAwMDBGMDA1OERFQTIzRjVERUUwMjU4REQwMjRGOTc1NzAwOTUKKzoxMEY0OTAwMEFDNkNGMUQyRkNEMjE2OERFNkUzMkQ2MTlBNUZBRTkyOTAKKzoxMEY0QTAwMDI2MDQwRkNCREIyMTY5OTJGNkExNkE1MjVGRjQ0N0ZFNzYKKzoxMEY0QjAwMDBCNTQ3OTZENzk3NzIxNjlFRjRERTdENTQwRDg5NkY3RjAKKzoxMEY0QzAwMDk2RUFCNjNDMDFFNzYwOThDQ0ZCMUMzRTlGQTUyRDA0NTQKKzoxMEY0RDAwMDA3MUUxQ0RGMEJDNjU5NThGRTZEOEExNzFGQzc1QjNDMDEKKzoxMEY0RTAwMDM4RTJDQTYxMDQyRjZEMkYyQTg0RDIwMDJFREQ5ODgxNjQKKzoxMEY0RjAwMEYwOTUwN0RDN0E5MkIwQzYzOTgxRDk1MzYxMjQxOTM3NjcKKzoxMEY1MDAwMDE0MDMyMEY1RTIxQjAwRDYxMkI4Q0YwRTRDNzkwQjQyNDMKKzoxMEY1MTAwMDAwRjc5M0ZFREI0OEZGNEFBOEVENjUwRjI5NUY1MUU2MkYKKzoxMEY1MjAwMEQ2MTVDNENCNzZGNTJGNUQ2NDBDMkZGOTg3NzgzQjZCMkQKKzoxMEY1MzAwMDIzQ0JBN0U3NDVGMjk2Nzk5RTBEOTY3MkQyRkU5Nzc5NzYKKzoxMEY1NDAwMDc3QkUyQzExMzhFMkU1NkVERDIzQTVDN0U5QTE0QjNGNUMKKzoxMEY1NTAwMEZENTcyNEVDNzk2N0ZGRTVCQTUxODc3QzJBRkFBRDgwMjQKKzoxMEY1NjAwMEU4MTIyREYwQzVFREY3MUM4MkRCODJGQzc0QkY2MjlDQjMKKzoxMEY1NzAwMDdFRkIyNUU0OEY5MkI2MTUxQjIxOTkyQUVCM0Q0RUI5RUYKKzoxMEY1ODAwMDFFQTkzNzQ5NzlGOTQ2MTU5MjY1RUM3QjIxOTE4NzcyNUUKKzoxMEY1OTAwMEY2MkIyQzJGQURGM0M3QUE3QUMzMDNENjcxODZBNUU5NDMKKzoxMEY1QTAwMDUyQUVCQjY3Q0E4NDJGQ0FDQkFGOTgyQjExQkU4MTg0RTEKKzoxMEY1QjAwMDg1Q0VDMzE4ODNBMkJDRkNCMDQ1QTNGQ0I4QkFBNTkyMDMKKzoxMEY1QzAwMEE2RUQyRDVBMDc5NTlGOEY5NTE5MUQ1NUJERTVGMEFGRjYKKzoxMEY1RDAwMEE4QTc0OEJCM0I1QzQwRjlEMERDMDZDOTZEMTJGNjE3MDIKKzoxMEY1RTAwMDlEMzE5M0U0NTc4RDJBMUE3REJCOEVGOTE5MzJFQTA1QjUKKzoxMEY1RjAwMEMxREZBQjI0OURGMkI3NDlGODFCRjU5RjUzM0U1NkJCQzQKKzoxMEY2MDAwMDhDQUY2MDdGMkI0NkM5RDIxMkM0NzMzOUUzRjc3MjU3QUYKKzoxMEY2MTAwMENBM0IxQ0ZCNEQwQzFCNjU2MjNGOTFERjc1NjFCREYyNUYKKzoxMEY2MjAwMDhBMTFCQTQyQzYzREJCOUNGMUZGMkZDN0RFRTk0NTNEQkEKKzoxMEY2MzAwMEQ4MzNGRjg1NDUxREU1NjMwMDcyMUQ3Q0EwOUQyMjFGMDgKKzoxMEY2NDAwMDY4MTNGQkU2MDMzMUNFNjcyRDBGNjc4RUJGMTI3REYyODQKKzoxMEY2NTAwMEQ3QUFDOERBQjc1MDZGQjQ5NzMzQkRFMTg0QUI3ODY4RTYKKzoxMEY2NjAwMDJBMUMwREY0RTZCN0YyNzJDMjY3NDhBNzQ4REY3Q0U2QjEKKzoxMEY2NzAwMDRDMzdCNDI0RTE3NUMyNDNFQjVBQzI5NEVGRDZCNEU4RDgKKzoxMEY2ODAwMDM0NURDOUY5RDA4NTNDNTU0Q0YyOUMwRkExQjA5QUU2ODcKKzoxMEY2OTAwMEIzQUU1N0IwOThBRTQ3MDNBNjI3MjE0NkUwNUM4N0ZDN0YKKzoxMEY2QTAwMDc5MDE3RTVGNkExOEE1QTQ3OUE1Qzg0MzRBMjZCQTdGNjYKKzoxMEY2QjAwMDBEOTY5N0QwQkMwMUE1Qzg5RkEyRkMzMUQzMjBFREYzRDUKKzoxMEY2QzAwMDc5RkQyOUQyNjM2NjlDMjA2OTlEOEZFNUVCQTU2RUMzMDkKKzoxMEY2RDAwMDJDQjVCNjVGNjkxODEzRDNGNTQ5M0U1NTU3NkVFRDhGQkIKKzoxMEY2RTAwMEY0NUY2NTg1RTczOTVBNUZGNEQ3MjAxRDMyNEM5MjVGOEQKKzoxMEY2RjAwMEUzNjNGREI1NDkyRjdGMkVGRERGMkUyNUMyQjhEMEFDQzgKKzoxMEY3MDAwMDcwRjQ3M0JCQzg5QjA5QzNBODRBOEY1M0I2Rjg1MUMzQTIKKzoxMEY3MTAwMEI0OTZDM0EzQjZGMjlBQzUwOUQzMjQ3OEJCMEJBMkMzOEYKKzoxMEY3MjAwMDI1NDJERkUyQTlEMTMwMTBGQUZCQTI0OTEzOTdEQTM0NUYKKzoxMEY3MzAwMDdDMENERkU5RjlERDQ5RTFGNTk3QjNGMjJBRTlGNzQ2RjgKKzoxMEY3NDAwMERDNDI5RjVBRTkzNzI2QzIyRkVDMUI4NUYzQUJGQ0YzNTIKKzoxMEY3NTAwMEQyOUI1RjIwRkNBQUU0QkEyM0Q0Q0UyODI0OTlGMTY0N0EKKzoxMEY3NjAwMEJDRTkzMUQwMDkxQzcyMzgwNkE4MEY5NEIwRkE3N0FCMDcKKzoxMEY3NzAwMDFDMDhGRTIzNzA4RUEzNzA0RThFQ0VDODAyQTc2OTg1MkEKKzoxMEY3ODAwMDUzQzBEMTFGREMwMjhFRUM3Q0NBQzY3N0YyNTNERDY1MTQKKzoxMEY3OTAwMEUzN0UzQjkxQjBCOEFGRDMxNTQxM0JBRjAwRjE0NEY0RTkKKzoxMEY3QTAwMDAwN0NCNENFNzA5MUVGMDVEMzA4RUU3NTRBQjcxOTMwREUKKzoxMEY3QjAwMEJDNzdCRjg1NTM0QjIwNjk1OUM3M0Y2QkJBMEVDN0ZDNTYKKzoxMEY3QzAwMDU4OEFCN0VGNDg2M0QzRjQyNUY5OTk1NjNDOEVFM0Y1OTAKKzoxMEY3RDAwMDlDRkMyN0U2RTdFRTM1QkZFRkRBRTYwNzZBMjIxQzBENTAKKzoxMEY3RTAwMEY2M0ZCRjM1QkVDODhDNjhBMDc3QkQ1RjRBQ0M4RUFFRjEKKzoxMEY3RjAwMDlCMzJFRUVCQzBDNjAzMEZEMTVGNzkzOERFRThGNDc4QjgKKzoxMEY4MDAwMDc5NUYyMUUzNjE2NzZBMzJFMzc4Rjk5M0M5NzhERTMzN0YKKzoxMEY4MTAwMDg3NEZBNzNDMEE3ODdEQkRFMDVENjc4M0Y3NzYxNzkxMzcKKzoxMEY4MjAwMERCMENGNDNGRDNGMDlFQUFGQ0Y5ODlGRUE1RjI1N0Q5NzAKKzoxMEY4MzAwMEI3RkM3REQ2RkRFNUUxQUY4NDlGREU1NzIxNzUxMUMxOTAKKzoxMEY4NDAwMEQ3ODI4QkJENDk1MzRBRUJCOUNGMUI1RjA1NTg0NEU4QkIKKzoxMEY4NTAwMEI3RTBENzYzMEU1RDI0NjM4NkYwRjU5N0QyRTNDRjk3QzgKKzoxMEY4NjAwMDc0MEE3NzM2RkVDRTM2MUY4MEE0QUQ5RkZGNTdGM0M5Q0EKKzoxMEY4NzAwMDg2RDczM0FEODc0RTU1QkYyRUY5ODM5RkVFRUY5Njk2MTAKKzoxMEY4ODAwMDQzMTJFNTY5RTk4MThCRTkzRTczRTkwQjkzMDYwMkU5Q0UKKzoxMEY4OTAwMEM3RDU3NjJFMTg2NDUyNzlEQ0NFNTg4QTc2MDZGNjNGQTQKKzoxMEY4QTAwMEY5RDRFQzhDREI1QkEwQTM5NTE4NUQ0Rjg0QTJENDJFMTkKKzoxMEY4QjAwMDVBMkEwMTZEQkY4QUQ4NkQ0OTYyQkY1NEJGRDhFRTlERTgKKzoxMEY4QzAwMDE5QTA3NjE1NEQ5N0JBODBEQTMxRDUyRkVFRDcyNjkxNEIKKzoxMEY4RDAwMDI5RjgyQkYyNDcyMUVGMkZGNTg5RUYwN0VCRDFDRTVEMDkKKzoxMEY4RTAwMDU5NEVCRTEzRDY1ODFBNjRGRDkxRUY1MUFDOUY1M0MxQzcKKzoxMEY4RjAwMEJFNjc4MzJCQTc5MkMwNjNDMUJCQ0Y5RDhDNjVEMjhGOUYKKzoxMEY5MDAwMDVGOTY2NThBOUY0RERDRUU1QThENzYxNzUxQzgzRTdGMTMKKzoxMEY5MTAwMDIyODY3NkI1QkZDOEFEREYyN0Y1NkUzNzQzNjY3NkZGMjIKKzoxMEY5MjAwMEZBOEE5Rjk4RThEMjU4ODFGNjFCOTlGRkJFQ0JFRjg3RTEKKzoxMEY5MzAwMEFFMkE1QzA3MTM4NjhDRUQyM0NDMzVCMEM5QjFERTA3NDcKKzoxMEY5NDAwMEQwODZBM0VCNjY1ODlBNDRENjRDQkYyM0JGNUFENDM3MEYKKzoxMEY5NTAwMEY1NUFCNEQ3NDI5NUFDQkM3NkM5ODVCNTcxNkIzOTlDNjQKKzoxMEY5NjAwMDU3OEJFQkFFMjhCRjY2Qzk1ODVBNUVFQzhEQkUzQzkxRjIKKzoxMEY5NzAwMDhDNUY0Q0Y0Njc5Q0UwQTk1ODRENDhDRDk0OUU5OUY5NTIKKzoxMEY5ODAwMDY1RkRCNURFMTk0OTAyQzNGQUNCRUYyQ0JCMzYwMzlFRTkKKzoxMEY5OTAwMDA4MTUyOTlENDVCRUE0QzEyRTVGOUIzOERFNTY3MzNDRDkKKzoxMEY5QTAwMDg2NTFDNjJEN0FDREM3QUFGNkU4MzVERjU5NENBRkY5OTYKKzoxMEY5QjAwMDJCMTM4QjExQ0YyNTBEMTA0MTNCN0IzREMxNUZDQzMyMEEKKzoxMEY5QzAwMEJFQUZEMkFFREY4QTU1RkJCQ0NFRDQ3Q0VFMDJFMzJBQkEKKzoxMEY5RDAwMDc5NDBGNkZFOURGMjc1MTdDNDY2NjJGRDYyQkU4RUZCMkQKKzoxMEY5RTAwMDJCOTM1MkFDQUFGRkY5M0JFNzlCNkRERTVGRTVGODI0NTEKKzoxMEY5RjAwMEUzQ0NDRjM0Q0VFNzg1OTdFMjAwMTlBN0ZBQjMxRkM3NEYKKzoxMEZBMDAwMERGNjBENzkzQTc4QTc3Njg2QzM3NzA1RjhEQTYyNkVFODQKKzoxMEZBMTAwMDlCN0QzMDM5OTJBMkZCQjlEQkE4MUZFRTE2MEUzQkM0Q0EKKzoxMEZBMjAwMDM2Njk2OEQ3QzQwMTMyRUEzM0I1REM5REY2QTdFMUZGMzkKKzoxMEZBMzAwMDk0QUI3MzMzRDE0NUE0MEI1RjdEMkY2RkJGQTU3RTUyNkUKKzoxMEZBNDAwMDBFMTZGRTNEODdGQzcyM0U5QzdGNTI0OUI3MDdFRUVGRDMKKzoxMEZBNTAwMDUzMDUxQzgxN0NEQkJDNEVCNDFDQ0REQjRGRjRDNjFBQjUKKzoxMEZBNjAwMDZEMUFENUM3RDlDNjdCOTBFOEQxMTQ5MUFGMDc1QUJDOUYKKzoxMEZBNzAwMDM0RERENkEyNDE4QUM4RDlCRjEzNzlDM0ZDNTYyMjdGOTAKKzoxMEZBODAwMDk4RkU4OEVDMTczMUJEQjcyNTQyQ0JFRjY5MTk0N0YzRDMKKzoxMEZBOTAwMDlCNUEwQzlBQkZBQkE1OUVBNjFCNUFBMkY0RkJCQTk2MjIKKzoxMEZBQTAwMDE5MzRERjgzQ0Y4RkM4NzgzNTk0NjUwMUVEQUFCMzY3MjkKKzoxMEZBQjAwMDI0NERENDYzQjAwMzIyMTUwNEJGQ0JGMUJCMDVGRUQ1QTIKKzoxMEZBQzAwMDcyRURCMzMyRkEzRDY3RjhBODdGMjNDOEU3RTk4N0E0NEYKKzoxMEZBRDAwMDgxRkExQjBFMkFCMDBEQjJDRkVCMEUzRUFGQUYyODMyMkIKKzoxMEZBRTAwMEYzOUZBQTk1NzQ3MDQxNEZCOTFEQTg1RkE1QTg5QUFDNjEKKzoxMEZBRjAwMDVCNDRFNUU2NUVEODlBOEZGQzVFNTRDREJFMDcwMzg0NzYKKzoxMEZCMDAwMDkxQzg3N0E1MUE1MkJFMTAxRDVBQzVGNjFBNkZERjM2NzYKKzoxMEZCMTAwMDRFQTZGNTU2NkIyQTZERUZFNDhCNzNBMTkzQUUzMzYwNUUKKzoxMEZCMjAwMDc4MjMwOEE3NzdCQ0NBRUE1N0IxNzUzMjc4RkUzRUE0OUQKKzoxMEZCMzAwMDIwQjQ0RDk0RTlGQUI5QkE5Q0MxQTE2ODc2N0UwOUQ2ODEKKzoxMEZCNDAwMERDMDc2OEVGODc5NTYxNzQxRUFCMkY1MDM3MEQ0NzM2ODEKKzoxMEZCNTAwMDgwQ0U5Nzg3OTM3RTM2OTBBRDBEQUU2QjBGNkNERUE5OEQKKzoxMEZCNjAwMENEQjREMEQ5QUIzMEZCRkNEQ0U5M0JBMzE1MDg4RjRBMDAKKzoxMEZCNzAwMEU0OUE4QzVGQjhEOTlGQzQ3NTg3RDA0MzQxNzg3MzdDNzEKKzoxMEZCODAwMDZDM0VFN0UyOTgwNDhFQzI0NTkwQkNBRjJDNUQxRUM4NjcKKzoxMEZCOTAwMEUzRjNEMThDNUFFQTk3MTBERkI5RTIzOTU3RUY0OEM5M0QKKzoxMEZCQTAwMEQ4NkUyMzQ0RUU4Mzc0Qjk0RkI0MzNFQ0VEN0NBMjlENDAKKzoxMEZCQjAwMDk5NDJEQzQyRTEyQTdCM0JCRjY4MDdCNUI2NzY3RUQxMkQKKzoxMEZCQzAwMDBFRDYxQTc0QkMwNDY5QTdBN0NCMTVERUFFNDdFRTJCODAKKzoxMEZCRDAwMDM1RDkyQTY3NEE0MDk3OTlEQ0Q4RTk5NDhEN0YzNEUwN0IKKzoxMEZCRTAwMDc0RDg2NzRBMjcxMTVGRDUyQzJGNDlERUI2OTMzMkFFMDEKKzoxMEZCRjAwMEIzNzYzQUY5NTFDRUFEN0EyNjYwQzkxM0QyNDU1MTc2MjMKKzoxMEZDMDAwMDcxQkZDNkU5OTUzNDMzRDM2QjlEMUFGOTQ1MzlDRUFGMzAKKzoxMEZDMTAwMDRBQjVDRDRGRDA2OTlEOTdEM0QxRjQ2N0E0RDMzQThEMUYKKzoxMEZDMjAwMEQzMzEwNjM2M0EwQjdBQUQxM0Y0NkFCNEUzNEZEMDZCOTYKKzoxMEZDMzAwMDVEMTY3QUFEMTNGNDZBQ0U0Q0FGNzU1OUU4QjU0RUQwNjcKKzoxMEZDNDAwMEFCQzFERTRFRDBDQjQ5MEZCMUVFQTRFOUQ2MkMyMURERkQKKzoxMEZDNTAwMENFMTQzRDlDN0FFMTA1NTlBN0RGRTVGNkEzOUQ2ODBGMTgKKzoxMEZDNjAwMDE2MkQ1MEQ5M0VBOUIyMTM1MENGNDM2OTdFM0Y3NkFCRDMKKzoxMEZDNzAwMEM5RUQ5MzY2NUE3RjJERkUyQUZDNUYyOEE3NkU5NkJGQkEKKzoxMEZDODAwMDI2N0VBODE2RURGMDdDNDk5NEVGQUI0NTdGNTgxMkNCNDkKKzoxMEZDOTAwMDg5RkQ3NTczRkMzODJEN0Y1MjhFQzYxNERBNUYxMjcwQTEKKzoxMEZDQTAwMDNGRTJDNDk3Mjc5QTg0OEQwNEE0MEEzNTdBNjkwNUZBM0QKKzoxMEZDQjAwMDI1MzdDQjExRjRERjBBNzgzQzIwRjAwNEZDRkNFNkQ0QjUKKzoxMEZDQzAwMEY4MUY4MEUxMEJDMTNCMzlGQzk0RTBCQzQ1QTFGODRDMjYKKzoxMEZDRDAwMDMyM0MzOUUxMjRGQkNCOEQ2NDVGMzM4NEYzRjcxMEYzQkUKKzoxMEZDRTAwMENDQzAwOTBENkNCREU4NTk5RkI5OURFNDgyQ0NGRDU0OTAKKzoxMEZDRjAwMDZFOTY2RDdDMzM2MkJEREZDNjM3RTVBQkYyNkRFNUMzNTIKKzoxMEZEMDAwMDVBNEI2Qzc5N0REMTMwNUJGRDIxMEJDRUIxOTU5NzM2ODYKKzoxMEZEMTAwMDhFQjY5NTk3MzQ1QzYwQ0I4N0FGQUVCM0U1N0JGMTBCQzUKKzoxMEZEMjAwMENGQjcyQkFGMkNCNkYxOEIzOUEyMEVGNzZENDk2MDc0QUIKKzoxMEZEMzAwMEQ4MUUxRjUxODdGQkI2RkVDQUJGN0U4QjZBNzgwOUZFQUMKKzoxMEZENDAwMEQ1NDIzNzVEODcwODA1Mjk3RTA0QkU3MjM1MzBEREU4NkYKKzoxMEZENTAwMDFGMjgwQzI0MkYyMUU1N0VDRDMwQTkzRjQwMzMwMEY3MkEKKzoxMEZENjAwMDczQjIxNkEzNzk1N0Q4MkU1RjVGNDMwMTIyN0NGQUY1NTAKKzoxMEZENzAwMEFEMkE3ODBCRkJFQ0RGRjgyNEZERjczNzJGMjdCRjg4N0YKKzoxMEZEODAwMEY1NUQyOTY0RUJFQTA2QjI1REMyRjMzNTkzRThDNzZEMTEKKzoxMEZEOTAwMDY0NUM5N0M2RDY3NTk3RTAxRkMyQ0ZBODU3MzQ1NUUyNkEKKzoxMEZEQTAwMEYyN0I3QTcyMzY3Q0EzMURERUIyODQzRDNGQjRDRDYxMTYKKzoxMEZEQjAwMDA3OUUyMjdGN0Y1RUYyREIxRkZFRDY0MUM0NTQ0RTAxQjgKKzoxMEZEQzAwMDdGMTE1NUUyRTdENUE3MjdGRkE1OEQ3NkZDOTQzNEI4QkYKKzoxMEZERDAwMDFENzJFMkQwRTc5RjMzRkU1QUM1N0EwMUQxM0FDNDRCNzcKKzoxMEZERTAwMENFN0FFNjQzNDFCQjJCOTM1RDIxRjg2NUMzRjQ5QkZDQkYKKzoxMEZERjAwMEQ2RjUwQ0FDRUJENEIwRjQzODM0QUY2NENBN0ZEMUY4OEMKKzoxMEZFMDAwMEE0QUIxNkVEOEI5Qzg1NjRGRTY1Q0M4RUM5Mzg3RjRFMDUKKzoxMEZFMTAwMEVGNzU1MzY1QkZENTBFRkJBMkNGM0Y0REU3MUY5QzU2MzQKKzoxMEZFMjAwMEZCNzAwRkJDQTUxQUREQUY4OUJDNjM1RkQ2QkJCREM5MzMKKzoxMEZFMzAwMEY0NERDQzI3NUJGNTI0RjlBOTU0QUJEMTM1RTk4RjIwREIKKzoxMEZFNDAwMDlGOURGMDg1NDY0MjJFRDkxRjdBNTk3QUE2Rjc2RDBGRUQKKzoxMEZFNTAwMDRDNjdGQjEyRjNENTlDNjQwNUUyOTNDNzcxQUM3REY1NEEKKzoxMEZFNjAwMDRCNDk4NDI3Mzk1NTg2M0JGMTlDNzlCMjlDQUMyMEY5RUIKKzoxMEZFNzAwMDVCRkRBMUZCMTBBRTZGMkFCMTVCRDUwMTA4RUY5MDI0QUEKKzoxMEZFODAwMDlFMTc4M0FBRTc0RDBCNUFFNkM5RUQyMjMxRkY2Q0Y2QTcKKzoxMEZFOTAwMEQxOTJENjlCRURFQjE5NENBRkIzRjJFMzVEQURDQjY5REMKKzoxMEZFQTAwMDM5QjEzQjVBNTU0QUFGMkY4QTdEOTQxNUNFNERFQTE3OEEKKzoxMEZFQjAwMEQ4M0UxMkU3MDNDRUY2RkYyQUY2RDEwMUI1NzE4OURERUYKKzoxMEZFQzAwMDNFREFDREU4MDA4QzBFMkZCNEVFQUUzQjk1NzI2MTFGOEEKKzoxMEZFRDAwMEY5MDM2RUJFQUY3N0Q4MkY5NUM0M0VDMkYzQTMwMEI3MjcKKzoxMEZFRTAwMDVGMkE5M0Q0NUVGMTU1MjY5OUZENTIyOUVDMTlGQjdBQ0QKKzoxMEZFRjAwMDc2MjMxQUEwNjNEM0Y2NTExRkZEMUI5RkE0RkZGRUU2RDUKKzoxMEZGMDAwMDk1NkQ3REY3MDU4NDdEOTQ2MEY2MTFDMTM1QzY5OTI4RkQKKzoxMEZGMTAwMDQ0NkRGODQ2MjI1RkQ4RDdGNzZBNTc5NkY1RkQ3RjhDNzcKKzoxMEZGMjAwMDdEOTQ1OTdFRkJDM0RGM0E0ODMwRkJBODFGRkM0RENGQzAKKzoxMEZGMzAwMDg2QkY3RjcxRkI2OEJCMEFGRjlGRDk0N0Q5RjhFNDdGNzIKKzoxMEZGNDAwMEI2N0Q5NEE2RjM2NzYzRTczOEVEMUE2MTQ3OUM2OUZCQjkKKzoxMEZGNTAwMDQ2RDgyN0M0OEVBMTc2OTY0OUVDMkNCNDczNEVDODlBMjUKKzoxMEZGNjAwMEVGNEUzMkNGNUIxNUREODc3RUVBQjU1QzVFMTdBQUQxMTYKKzoxMEZGNzAwMDM1MkVCQTdFRUI3OTY4Njc2QzQ0N0QzRTgwRUI1OUI0RDAKKzoxMEZGODAwMDgzMDIzQzNFNEY4REMwQjQyRjYxRkREODQ2OTdFNTFDREYKKzoxMEZGOTAwMDQyMDlFODc5M0RFNzM2NUYyMDNDMTAzQkFGNTIyREI0NzMKKzoxMEZGQTAwMENDOUZFMzQ1RTA2MTk3MkI4RkQzQkJGOUZDMjg5QkQ3MEYKKzoxMEZGQjAwMEUzMTQwRkEwNEJENERFNTI3NTFGQTY0RkYzRjU4REFFQTAKKzoxMEZGQzAwMEM3RDU1NjdDQjBCQzUyQUYyNzUxMUU0OEZCQTc1RDAzNzYKKzoxMEZGRDAwMDZDNzhGMUQ5RjA0MkQ2MjEzNjFFMjhDQzlFMzM2REYxRDMKKzoxMEZGRTAwMDZDRkU2QTRENDJCRjM5Qzk3NjIyRkZEMkYzNzIxRDIwRTIKKzoxMEZGRjAwMDA4ODlGQTExQTRGRjgyRDhCMjFCMzExRTMzRjhFQUE1OTIKKzowMjAwMDAwMjIwMDBEQworOjEwMDAwMDAwNkY2MTVDNjM0MUQ3NEMxQURGRDg1QTM1RkE0MDFEQTk5RAorOjEwMDAxMDAwOTcxQkQxMkU5RkEyRTNCQTBBRDRDRkI4MDIzQkEzRTcyNQorOjEwMDAyMDAwQTExMEFGMERGMDczMUMyMkRGQkY1OTdBOUNBRjlCMDY2NQorOjEwMDAzMDAwRDhFRDcyNTk1Nzg1M0Y2OTU4NzY3OTIxM0ZEMjQ5NEY5QgorOjEwMDA0MDAwRUZGNkQ5RTRDMzY1OTU2QjJBOUYzNzlEOUE3QzRFNjU4MAorOjEwMDA1MDAwNzI2RDkyN0ZBODJGRjIxQ0ZERTQxQThFRjMwNEIwRTRCNworOjEwMDA2MDAwNDlGOTg3OUM4Rjg5ODVGMkI5OENBN0MxNUFBRjRFRjhBMAorOjEwMDA3MDAwQ0Q1NTJFNkIxODFGOTkwQjVBMUVGMjlGN0ZCMjBBMjk3RAorOjEwMDA4MDAwRjRCRjE0MUUzNUQxMDVEQjFGNUQ1QUI5MUYxRDI1RjBDNQorOjEwMDA5MDAwNzJDQjdFMjJFODY2RjIxQTlFRDU1QUI2OENGNDdCQkNFRgorOjEwMDBBMDAwOUFDNURGMTc2OEU0QkZEMUJERTdCMzkyQ0I1NzRGQkUwNworOjEwMDBCMDAwRUEzRTdBNkUxQTI3RkMzNDBDRjlCODRBQTZGNzA4NTZCRAorOjEwMDBDMDAwOTQzMzNEMkVFQTlERTc5NjZDRjcwODJDRkIzNjVEQUQyOAorOjEwMDBEMDAwRTFGNjM0QzE4RjUyMkUxQjY4MDc3QzVBRkU1MDNFMjEzOAorOjEwMDBFMDAwN0ZFNDRDQjVEQjA1QTc0QkFGODlGQzVFQzVBOUYyQzcyMQorOjEwMDBGMDAwQTcxRDRGRDBCNUI3NUMyREU2NzQ2REYwQTJEREJGMkMwNworOjEwMDEwMDAwM0NBRENGNzNENERFNzQ1RDRCRTlFQTJGMDcyMzk5QTE5MAorOjEwMDExMDAwRkY1QUI3OTQzMTdFRDZCOTNGNzJEQUVCQ0FDMDlBMTk0QQorOjEwMDEyMDAwNUJGQkEyNUJBMUQzMkU2M0ZERkExNjJBRkE1RjUxNzkxRAorOjEwMDEzMDAwQTkxQTVEMDdCQ0JDQkYxNUZBNUExM0Q3OTNFMzY4MzNGRAorOjEwMDE0MDAwMTA3QzI4ODk1MTI5RDQ5RjUwMEVGNDFDMTExOTA2Q0YxOAorOjEwMDE1MDAwNEQ3REJBNDFGN0UxNzQwNUFBNDlDM0U3MkU5NTZERTNEOQorOjEwMDE2MDAwQTk4NTdFQkI1RDNEQzM5NEFDRjBGQjE2QkEyOTFDNUUyRAorOjEwMDE3MDAwMUMwRkY1QjRDNkNFM0RENTgwMzhGNzc0RUMxRjFENzY0NAorOjEwMDE4MDAwQzNGMkQyRDExOUUzMENENENGNkFCRjNBREQwRUVGMjkwNgorOjEwMDE5MDAwQjcwQkE4RkFERjJENzY1NEY2NzYyQUZDREQ2MjRGQUQ1OAorOjEwMDFBMDAwNDI3RUI3RDA3Rjk5MEI3NjRCNjQxRDhFODdBRjgwOThDNworOjEwMDFCMDAwNEVGMjU4NTQwQ0QwODZFOTc4RTRDM0QxMUE1REJGQjYyQworOjEwMDFDMDAwNEJGNDdDOTg4QUI0OEVGRkIxNzNBMkFCREMzQUVENDc1NgorOjEwMDFEMDAwRjZDNjI4OUU5NDgwMDFCNEJFN0U2QUU3NDgyNzA2QjMxRgorOjEwMDFFMDAwQjhBNTYxMTJEOEVBM0ZFQzc2RDM3MjE1QTJGNDNDRkRCMworOjEwMDFGMDAwQzQ2Qjk3ODQ2OUJGMDZGOTU0OTM4NkMzRDlFRjU1RUU1MworOjEwMDIwMDAwRDhDMzZFNkNBNzMxNzhCMDAxRjU0NzhDNjM3RTgxQjA5RQorOjEwMDIxMDAwOTdCNTNCMzFCM0VGQjg4MThEMjg1RjY3NTlGMjNDMkUxQgorOjEwMDIyMDAwMEJEQTRFMkRBRUVCMDQxOUIzQjM4QUYyQkYxRkY3QjU0QworOjEwMDIzMDAwOTA2MEY2RDA1MDRFQjNBRDhCRjJFOUY3QURBRDdEQ0IwQgorOjEwMDI0MDAwRjlERDVDQ0VCNzcwRkJBODFERUQyMzhCRENCN0YzNzgyRQorOjEwMDI1MDAwQjM2RDEyRDhFRTU5NTQ3ODU4N0NENjNCNUNFRUI3N0EyMQorOjEwMDI2MDAwNEQxRkJEQUZGMERDMEFERjA4OEM3NzM5QTg0NDdDMDQ1MQorOjEwMDI3MDAwMEZFNUQ3MUFGOUIxM0VGMDUwOTFCMENCREJFOUM2Nzc2NAorOjEwMDI4MDAwQkNFQUNFMUNERjkxQURCRDg4RUJGOEI0NzhEOUM2RjdENworOjEwMDI5MDAwMzExNTlFRDk3MUJBNkY0OTVENDRFNUIzOThGMzRERjFCQworOjEwMDJBMDAwMUNBMDc2RUQ1MDEzOTIzQUQ2RkRFODI0NThGOTgzRkM1MQorOjEwMDJCMDAwRUM0MzNGNDU0OTAzMTkwQkU5MTU5MzBERDQxRjI1MUI0QQorOjEwMDJDMDAwREM0OTk5Q0FCQjc2M0JCNjBGMUY1NDU4QUMyMTE4ODE0NAorOjEwMDJEMDAwOTkzNTk0NTU2OUZCQjBGMjQyMkQ4QURBNzA2RTlGQzE1MAorOjEwMDJFMDAwMkFGQkJEOEJEMjQ1RjZGQjUyMjU4RTdCMTI2MUI0RUYwMworOjEwMDJGMDAwNDJFODc3QjVENDJCRkJGNEY0MDg3OTA4M0RDRUZERkMzOQorOjEwMDMwMDAwRTlEMUFFMUE3RUNERDJCRTVDODI2ODQ3ODZGRUNBM0Q3OAorOjEwMDMxMDAwQ0NFRTI4NUZCMzlFQzU4MTM1MDRFMDc1MzFERjYxNDhCRQorOjEwMDMyMDAwNTcyMzFGMTc4MzJEODlGQjE2RTMzOTlCRDlDMEUyNkIzNgorOjEwMDMzMDAwMDYzNTgyNkNFNUUzMzE5RTFDREE4RjBCMENGMzJDODJDMAorOjEwMDM0MDAwQjdBNURGQkVBMkVCMTlBNEVCNDRCMEU5QjEwQ0ZBNjM4OAorOjEwMDM1MDAwOEM4N0M4OEJBQjkwRTk4RkY2QzQzNDk2N0VBNEQwRjUxOQorOjEwMDM2MDAwMjNCQzA4OTI0QjA4ODg5MzYzQjFDNTJFQTRGRjFDQTA0MAorOjEwMDM3MDAwNzFFOEUxODZFNkJEMTg1RjVEREMwODExMUM4NkYwMTVBQQorOjEwMDM4MDAwRTVBRkYwMEM0ODFBOTQ1RkUwNjA5OEYwQzc2MDM2MTU0RQorOjEwMDM5MDAwMTg4QzdDODFFQkNGMDI0NjVGQzExNzI1OERGNkZCMzZBQQorOjEwMDNBMDAwRTEwNjdCQkU4OERCRkQ0NUNFRkI1QjhFN0U4QTc1NzZFMworOjEwMDNCMDAwMEY0QTVGMjQwM0RFRkI4M0U5RjZGQjM2NjFFODdBRjAzRgorOjEwMDNDMDAwMDE4NDZGN0YyMDkyNDI3RTM1MURFMzM4RkE1NzIxNzZGMworOjEwMDNEMDAwODU4N0UwRjM4OUVGNEZGREU1NTlBNEZFOEYxNkQ1MTUwQgorOjEwMDNFMDAwMjA1RUI2N0FBM0I5RjQ1RTUxNUJFNkI4QjM1RUZDMkEzMAorOjEwMDNGMDAwRUM4RTJDRjVEMzdBRDRCNEM1MzUzQkQzNjUxNTQ1Mzc4RgorOjEwMDQwMDAwQ0YyMjcwQUMwODFBNDBGNTlBNzkxNUQ1RUYwQTk3REYxQworOjEwMDQxMDAwRTc4QUFGRjA2MjNDRTlEMkMwRTg1Q0Q0QjM3QjMxNEZFRAorOjEwMDQyMDAwRDJBNUUxMTEzNDZFNTdGNEEzRjBGODVEOTE4RjczN0Q3RQorOjEwMDQzMDAwRUExQ0VGMTYwRkQzQTM3RjA3RTMxNkM0QzMyODRGMkM4MworOjEwMDQ0MDAwOENGMzc2ODU4QjFFOUZBOUQzRjM0MjIzOTlBMURENzU4QQorOjEwMDQ1MDAwMUUzRkIzMkY3NUY1OUY1NkZDOTMwNTVDQTM3MjA4NzA4MQorOjEwMDQ2MDAwNUFGRTg1NTk5RTU4MUJGMkE3NTk0N0I2MTNDOEZGQzNCOQorOjEwMDQ3MDAwMjAxOTQ3RkEzNzI3QjhERkJEQTdERTZBNUVDRkE0N0UxMgorOjEwMDQ4MDAwNEY1MTJGOTYwMEVCQkU5M0Q0NUI4QkYzMjFGNTBDNUJBMQorOjEwMDQ5MDAwQkQ2OEFGN0E3N0YxN0E2MDFCRDdFODM1RUU2NjAxMUY0OQorOjEwMDRBMDAwNThGQjhCRjRFQTZGMkJFRjhGREE4MzNERjVGNDVFRkQ5QQorOjEwMDRCMDAwRERDRkZCMzM2Q0Y1QjQ1RUY1MUUxNkYwRDlDNjA1RkIzNworOjEwMDRDMDAwQjgzREU1RTdCODkzNzFBQUI3NTkzQ0ZEQkU4QTI5OTRCNworOjEwMDREMDAwNUZGNjU3NENBOTlGNDVDNkI5RjkxNzJFQUUyM0FFQTFCQQorOjEwMDRFMDAwRUJCNkUwQUJCREJDNUUyQkYyNTUxNURFQzM4NUI2NDY2MAorOjEwMDRGMDAwQkMwN0NDRUYwOUM3MDNEM0JDMzFDQkY3MUVCRTBBNENGNworOjEwMDUwMDAwRDMzMjdGOUY2NUFCQUZCNkY5QzAxODQzQkZEM0ZBQUQwNgorOjEwMDUxMDAwMUYyQkRDRUY5RDM3MTlGRDcxQ0IwQjY1RUU5RkZCNUI0RAorOjEwMDUyMDAwREM1MDg5MUUxQkEwREFGMjZENjE1NjNFRDJGQkI3QjhEMworOjEwMDUzMDAwODk3NzhBRjgzRDE4QTIyQjlGQUVCMkM4NzdDRkY4OUY3MworOjEwMDU0MDAwMTdGQ0ZDM0MyMzBERkZGQjcxQTNEQzBBM0ZDQjBCRjgyRgorOjEwMDU1MDAwNDVERTVCQ0NDQTQ3QjdCRDNGMDkyRjU2ODk3QjAwQzMzOAorOjEwMDU2MDAwREIwQTVBQTlGRkUyMEIzQjNGQTlENTNFM0Y5NjRGQ0Y4RQorOjEwMDU3MDAwOEZFNUM1RkNBQURCQTRDOUZGNUFGM0NCNkRCNUYzMUYwOQorOjEwMDU4MDAwQ0JBN0U3QzdGMjYyN0UzNTZEQjlBNzM1M0Y2NzNEQkNBMworOjEwMDU5MDAwQUY4NDdBN0U0NUM1RkQ2MTVDNzc1NkUwNDI0QUZBMUQxQworOjEwMDVBMDAwRDdGNjUyN0MzMUM5REYzRTQwRDhEQjNBRDVFRkEzQzA0NQorOjEwMDVCMDAwMzhDNzNCQjZGRjc2QkZDMkUwMzdEMkQ2MUI2NEU3QzE2RgorOjEwMDVDMDAwNTBFMUU2RTdDMTg5MzBGQTM5REZGMDY4M0M4RThFQzEzMAorOjEwMDVEMDAwQTk3OEVERjlBMTk4MUY5MENFOTM1RkZFODlFQjMwODY0NAorOjEwMDVFMDAwMjlCMkZEQTQ0M0NGRjdCM0FFMkQyRDY2RUJDOUIyNjA5RgorOjEwMDVGMDAwNDRCNkFFNkIyMjBFRkFCOTAxMzU1NEZGQzQzNUE2N0Y1RQorOjEwMDYwMDAwRjYwRUUwRkFBODkwQUM2QkNDOUY0N0VCQkJCOEJFNUE5NQorOjEwMDYxMDAwREJDMkRFMEI0OEYwRkJCMEYxQzJEMTE0M0YwOTcxMUYwMQorOjEwMDYyMDAwRDY5QzYyRDM2RkZCNkFBNzFDNDBGRkQ1QjE4M0VDOURCQgorOjEwMDYzMDAwODhBN0JDNkNERDVCREEwMjFERUNERDAzMkZCREQ3RkRBNgorOjEwMDY0MDAwMkNFOTM3NDYyQUVDMjFGNjFFQTYzRjI1RjYxRUE2QkI0RQorOjEwMDY1MDAwNUJDMjM0RkQ0OThCNEVEMzlENjQ1QzRDMUY2RDg5NDA1OQorOjEwMDY2MDAwOEM4Q0JGQTM2NTFDNERFRkUyRkJBQjBENjgyRjkyRjRBMQorOjEwMDY3MDAwQ0I4NTMyRjU1QjZDNkQyMTk2QjIwQkZEQkQ1RTlBREVDQgorOjEwMDY4MDAwREJBMkFENTIyQkQwREYxQkE2Rjk2M0QyQjRFQkJDNzQ1NgorOjEwMDY5MDAwRkZEQTE1Q0YyNTcwM0VGMUJCNzI3QTRGN0M2MkExNEExQQorOjEwMDZBMDAwRDc1RjUwNTM0QTZFNzVGQUJCQzBFQjMxQTlBRTExREI3MAorOjEwMDZCMDAwNUQxMDk2NTkzRDZGMzIxRUNBNUNFRjQ2QUMzNzJFQUNDQQorOjEwMDZDMDAwNTI3ODIwNjAyQUExQzI4Q0Y1QkU4N0ZDNTUxM0UwRkQ0QworOjEwMDZEMDAwNjlCMTc4MzA3MzdGQjc2MTdGQTMwM0JDQkY0MjNEMUUxMQorOjEwMDZFMDAwQzhEQzlGODlGRDhERDQxODFFMjBEQ0I1MjQyNzczQkQ3RQorOjEwMDZGMDAwQTU1OEFGNEFFM0YzMkQ0REM5Mzk5OUM3QkQxREVCRTVBOAorOjEwMDcwMDAwRTcyN0U4RkQ5RDhCQUUwNjZBOEZCQTBBRjVBREQ0Njc4MAorOjEwMDcxMDAwQzFFQjI1MDc0NDQxMjY3QzlFNUY5MDY4QzY3QTE3QzZDOAorOjEwMDcyMDAwMjIzMDhDOENBRjg3MjIyMDEzN0U3NjA1NDg3OTE1REUyNworOjEwMDczMDAwMjUyN0ZEOTA3NEMyNzQ1MjhFRTc0MjU4RkUyNTRCMzkyRQorOjEwMDc0MDAwQjYyN0U5RjgxOUJDN0RBRUJENUM4Q0U3NkE4MzlFRkJEOQorOjEwMDc1MDAwRDM3ODY5RENENTZBQ0ZFN0M5NEMzRTFGNkFCQjZBMzJFMQorOjEwMDc2MDAwQ0E3RDFFM0Y3RkZBMzVFNkM5QjhBRTQ1MjBGNDExQUIwRAorOjEwMDc3MDAwRUY2N0U1Q0Y4OEZBMjE1NkZFMUFDRkU3RTdCMzc5RkI5QQorOjEwMDc4MDAwQTY3ODY5QkNGMEJEQjc4QzI4OUU1NTk1OUVFRkUwRUYyQQorOjEwMDc5MDAwNTU5RTNEQ0IzMkJGN0JCRjc3NDFGMUFDNDA3QTNFODM2MworOjEwMDdBMDAwNkY5RDc4RjZBQzNFRjYzRDA1RjU3MkNGOUIyNEE4Qjc1OQorOjEwMDdCMDAwRjIxMjU1NTQ3RjhFRjI0NEE5N0QzODZBNjA4RDgxRjIyMQorOjEwMDdDMDAwQUNBQzYyNzBCREVCMkQ2QjVEQTI1MkI4NEM3QTRGOTMwRQorOjEwMDdEMDAwQzM3NUNGM0MzQjVDODNFNkRCRTFCQTY3QkUxREFFNDEyRgorOjEwMDdFMDAwNEQ3REMzRjU5NDk3RTlCNTZDRjA5MUYxMERFQkY4NUI5NQorOjEwMDdGMDAwRkVDRDNFRkU5MEVGREJDN0RGRjI3REZCRjg0MzZFRkJFNAorOjEwMDgwMDAwRDRFM0E3QUM3NEQ5N0NBMzdERkNEMjlCRUNFMzZGQkU5MAorOjEwMDgxMDAwQzkzRTdFRTlDRDlGNkVGQ0NGQ0ExRUJGRDAxQkZCQTc5MQorOjEwMDgyMDAwOTdEQkJCOEFENUVFNkM4RUQ5RUM1MzUyRUYyNEFGNjdDMQorOjEwMDgzMDAwMkE1NjNCMzYxNkIzRDlBN0E0OUVFQUUzRjZBRUFENUVDMAorOjEwMDg0MDAwQjQ1NzNEOUY4RkRCQkJCNjcxOEQ1RUUzODY3ODdGMjkwMQorOjEwMDg1MDAwRDlEQTVGQTQ1NzdGMDVCQzlFMjk1QkZCRDM3QkY1MTdENAorOjEwMDg2MDAwRTZFMzFBQjY3QTVBQUY3QTgzMDU3Q0I2NzFDMTNFMkU5QQorOjEwMDg3MDAwRjAzOEIwNUI3OTFDMTg5NTc3NTI3RkUxRDU2NDlGNURBNQorOjEwMDg4MDAwODZGQkQwQTg4NEZCN0RBRDAwNDZFREM3RkIyNkMzRDkwRgorOjEwMDg5MDAwQkI0Nzc5NTMxNjBFQzVGNTVDOUFCMkYwMkM1Q0ZGREFCMworOjEwMDhBMDAwRjJDMEI2NkY5QkUyNjM3RTg0QjEzRTg1QTY1QTBFMzREOQorOjEwMDhCMDAwNTNGRjlEQjdCOUY4NzJDQkJERDcyREJDNUU0Rjc5QTA2MQorOjEwMDhDMDAwQjlGODFCOTZGMjRCNzhGQjM2N0U2RjcwQjJFRkI3RDQ1NworOjEwMDhEMDAwMUVEMTA2OTFGQTE5RkM2Njk3OEFGRTc4MzkxNDQ2M0FCOQorOjEwMDhFMDAwMEQwMkY3NUQ1NzREMUI2QkQ1Q0Y1QjdDMkUzQTdGNkRBQworOjEwMDhGMDAwMjgxRkI3MzQzMzVDNkQ2NTZDREM3QjcxREMwMDdFMTdDMAorOjEwMDkwMDAwRjY0NzczMzFDNUI3QzY1MkYxN0Q0MzcwQjZGNDU3QzQ4QworOjEwMDkxMDAwNkFCQjk3QUVFQjZFQkVBRUU3Qjk5QjFGMjgyMzcwQzRDRgorOjEwMDkyMDAwMDdDQjgwRjcyMjk2OTdGNkVEQ0Y2OTZEQjE5RjJGQTg4MAorOjEwMDkzMDAwNUFENEMwN0Q1RkM5MUM2RDM0OEE0N0I2NzY3N0Q3Q0I1MQorOjEwMDk0MDAwRjU5OUNFMUYxQUY4N0M1QUU3RDQyNUNBQzlGOEIwREY0QQorOjEwMDk1MDAwRUVDNzI1MEMwRUQ2RkJDODU3Qjk2MzBEQkU0QzdFREMyNgorOjEwMDk2MDAwNTZBRkNEQkVDOTJCOUE5NjBCN0RDQzIzREU2MkY3RTM0MgorOjEwMDk3MDAwMTJENTZCNjRBMkRCNEExRjNGMUYzOUU4QjVEOTVCNzlGQQorOjEwMDk4MDAwRjkzMkRENzcxRUFGNjJFNzA2NjAxNjUzM0Y2MTBGNUVGNgorOjEwMDk5MDAwNEJFQUJDRDZGMTU3MzhDNkYzQzEzNDAzRDcwMTVDQTY4NQorOjEwMDlBMDAwNTA1RURDRTVFQzVEMTU3RjYxNDIyQkQzRDE3RkQwNDlGMQorOjEwMDlCMDAwQ0YwMzgxREY3NzEzRkRCNjg2QTdEMUZERjg3MTdFMEZENworOjEwMDlDMDAwNTYwRDI3NkE5OURGOTFDM0E3NzE1REM1QzcyOUQ5QThCQworOjEwMDlEMDAwNDJBQTgwOENFRDhBQURGNDhEQjVEMkNEQTRGNzRCNEVGMgorOjEwMDlFMDAwQjg5Mjk3RDJGNzlFQ0EwOEZEQTVERUYzQkZEM0M3RkMyNQorOjEwMDlGMDAwQzU3N0VCRDM3RTVCOTY4MUJFRjdBMEIzRDhEMjZGQzkyMworOjEwMEEwMDAwODc2RTQ4OERDOTVFM0Y1RDhGQzFENUMzQjc2MUMyQUZFOAorOjEwMEExMDAwMjhGRjNBRTc1QkI3RjEyMzVGQTY3ODBCQTExRkY4MzlFRgorOjEwMEEyMDAwRjhBQzcxQzA3RkY0MkJGRjQ0RTY3MUZEMDExNzdCNzdCMgorOjEwMEEzMDAwNDFEQ0I3RTFBNUQ3NzNCRkU5MkNFRTc3NkQ4MDY4MDg3QworOjEwMEE0MDAwMEJERjA1QjkxRUU1RUM1REY4NUQ2ODhDODVGRTRGRkI5QworOjEwMEE1MDAwREMwQ0FFMzYxN0Y1Nzc4OTczREY2QjEzMkU5QjNGRUNGQQorOjEwMEE2MDAwQkE4REY2RkM2Qzk4NTY4NDdBNkJGNjdBMTdGNUFGNUQwMgorOjEwMEE3MDAwRUZGMEQzM0VDQ0U3N0IxRDM0MkY0MzNCNUVEQ0RCOUVBNworOjEwMEE4MDAwQTU4MThBRUZGMkNDN0JGMkRFMUFCQzFGQjVDRkM3RUU5MAorOjEwMEE5MDAwRUZCRDRERjg0NkI3QzhEQjBEODFBNDFCRUYwMUJDQkUwRQorOjEwMEFBMDAwNkJDQzE1MTMwMERCMjc5Nzk1QTBCRUNEODM4Q0VGQkVEMgorOjEwMEFCMDAwN0RCN0NEMEU1RjdGRjAzQkUxMDU1OEQyMjcxQ0VBNzY2QgorOjEwMEFDMDAwMjlBMzdGQUJEMzI3Q0U4OTE5QkRCMkM1Nzk4OEI4OEI0RQorOjEwMEFEMDAwNjM5QzhGN0FGQzMwN0ZDRUUxN0UxODE2N0ZEMTVGRkI1RQorOjEwMEFFMDAwMTNGREI0OUZFN0VENzJBM0ZDMzRBOUNERjU5MjlDM0VCMworOjEwMEFGMDAwOUZGMkI4NjJDNjIwMzI0RkQ3RUVEQUQ0MjBCMEQ1NkI2MQorOjEwMEIwMDAwRUJCQkRFRDEyOTQwRjU2NTczMTRGOTQ4RDQ5QjBGQTRFMworOjEwMEIxMDAwMUVDQUU1OUVDQjRENUJCRDcyNTI2Rjc4RjY3QURENUNFNgorOjEwMEIyMDAwQUZGRTdDQzdCRkJCRDExRkY5RUU0Mzg3MkU0M0I5OUNGNAorOjEwMEIzMDAwRkJCNDAyNUUzMjZFRjc4RTIwQTRFODNFMzZFOUM2RkRCNQorOjEwMEI0MDAwREMwREJCOTQ4Q0U3QjkzNDYyODBGNDNGRjdDNzQxQkEzRgorOjEwMEI1MDAwNUVERUIwRDM5MzlDNEFEQURGRjA5M0Q3NDcwMkMxNDNGRAorOjEwMEI2MDAwRjc5MkEzQ0YwRkMyNzVGNzIxODk5REFCOUE1RDIzNzFEMAorOjEwMEI3MDAwNURCQjQxODVFRjQ0MzNGNDM3QzBDRkY4RjBGMDUzMzkxMworOjEwMEI4MDAwMzM5MENFRDJGNkJERDdEMDdFM0JBRTc0NzkyQ0ZBMjIwQworOjEwMEI5MDAwRTA3Nzg5N0FDQzFGRjdBMDQ0RTNBMzdCQzNDN0NFQzExQgorOjEwMEJBMDAwMEUzRjI4MzFGODc2QkI5MjNFODQ2RkZCNTY3NzhDQzA5RgorOjEwMEJCMDAwRDFCNEZEM0RDQTU3OTM3RUZDNDgwOEYxRDBCNDVCQjE3NworOjEwMEJDMDAwRjk4OTlCQjYyQjI5Q0Y0ODlBMUVDMjE0Q0Y1N0E0MUE3NQorOjEwMEJEMDAwQzQyN0QzOEZGMzc3Q0RBM0ZFRjNGOTFEMkJERjUzNDI0OAorOjEwMEJFMDAwRDhERUNFREYwNDJGOTExNEUyRjUyNTI1MzIxNUYzOEZFMAorOjEwMEJGMDAwM0YxMEQyMDlBQURFRUVEQzE2NDJCQzkyN0U2N0JBNzNDMQorOjEwMEMwMDAwRjExQ0Q4RUVGN0M2RkUzRkNDRUZERDFGQzA1MTM3RjIyNgorOjEwMEMxMDAwNTc1M0M3MEEzNkRFQUVBRkJEODFGQUE1QzkyMTQ3NkY2QgorOjEwMEMyMDAwRTMyRkM1QkRDRjVEMkVGNDNCQ0VDMUI2MTc5QzkyN0RBMAorOjEwMEMzMDAwMzlGNzkxRTM1QjRDMzJFRUUxOURFRjZDMzEwOUZDOERBRAorOjEwMEM0MDAwRkZGNUZFOTZEQkQwMEU3QUQ2QTdBMTFFNjg3QUU4M0ZBNAorOjEwMEM1MDAwNDI2MDU5MzdBRkY0MzM3OUVDN0VGMDgxRkJFRjI2RjIzNgorOjEwMEM2MDAwRDFGRDQ3MEY1RDNGQkE5Rjc5NjM4ODRFRTZEREZERDgyMQorOjEwMEM3MDAwRkYyOUQyNDlGRDA1Q0Y1QzRDRkQwNTBCOUU5ODM0QjA5MQorOjEwMEM4MDAwQUZGNTEzRjkzNTY5N0Q5NzhDREYzRkQ3Nzc5MzcxMDYwMAorOjEwMEM5MDAwOTJFQzFFOUUzQUU4RjNEQzJFMDU3QzA0Q0U3NzVGRjZEQworOjEwMENBMDAwRDA3QjUyNERFNERCQzJEMTQ4QUY3OTU0MkY2MzdFMTEyMworOjEwMENCMDAwQzFGM0ZDMURDQkRGNTM0NjY2QzJCNzM5NDhDNjRCMDdBQworOjEwMENDMDAwNDBDNDMwOENGNEZFQzZENzJGQUNDNkQ0NDVDRjU3OUE1QgorOjEwMENEMDAwRTAyOEQ1QUJDRTc2NEQwNzA5NURDRkNCNEVDN0UzRjAwQworOjEwMENFMDAwOTExQkUzNTY5QTc2QUM2MEUzNzYxMDNBODY3QUQzRjE5QworOjEwMENGMDAwNURGQzY1N0M2RjNBN0VDRjQxQzdFM0QwRjgyMzNDMUY5MworOjEwMEQwMDAwODQ1RDA1MTlDRjg1QzVGOUQ5QkMyN0JFRDlBN0JEMjVGNgorOjEwMEQxMDAwRjQ0MjdGNzg5RTIzMzFCOEVBRkNDNjMyM0ZDQUQ3Q0U3MAorOjEwMEQyMDAwODdFRkJGQkI5MEQxNzkyQTQxNENGNzIzQzc4NzAwRTFGOQorOjEwMEQzMDAwOTMzNzVENDdBRjQxRkQ3OEY0MTk4Rjg2RUJGRDBEQ0ZGQQorOjEwMEQ0MDAwQkM0NEU1QURGQjg5MTdERDNBQjVCRjIxMjAxMTdCQTM3QgorOjEwMEQ1MDAwMUI3QTdFM0FEMUZFOTgyRkIxNEM1MzdCMzBFNTA5QTUyMgorOjEwMEQ2MDAwRTkzNTNGNzk3OUJEMUVBMkRGMEZEMUVGNDkyNjA3RjNBMAorOjEwMEQ3MDAwOTM3QkE3NEIxOUU4RjdBQzlGRERFNzg2RTQwMDhBOTdFMQorOjEwMEQ4MDAwNzlFRDdGNzJEMzczNzAwQjVEQTU3MTQ4Q0Y0MzUzRjAzQgorOjEwMEQ5MDAwN0IzNjdBOEFGOTZCMzhGRkYzMkQ3NDZENjdGMjlCNERDMQorOjEwMERBMDAwNEVCQkI3N0E1NDhDNkI3MEQyQjlEQkM1RjYwOTRENDk4RQorOjEwMERCMDAwRTlBNTRDNzQxN0VCRTBFOTlFQUIzRUU1OTQ2RjNFRUY3RQorOjEwMERDMDAwRkVFNEJCRkZGOTlDMUVCRUI2RkI3NTFCREYwOEJDMUQxNQorOjEwMEREMDAwRkUyOEIzREUzRkU4OTczODFDQ0RGNTI1QzM3QkFGODNGMworOjEwMERFMDAwMkE0NENENDE2NTY5NzgwRkQzQjdDOTQ4RkE5MDQyREZFQworOjEwMERGMDAwM0I1REQ2RjExQ0Q1REY0RTNEMzEzRjhCOURGRDM3QUVCRgorOjEwMEUwMDAwOUZFNkVGREUzQjEyRjVEOUUxN0Q0RjUxN0U5Q0JGRTNCQgorOjEwMEUxMDAwOTAxQkY3MzdDRjZGN0ZEQ0RENTU5NUU2N0Y1QzE3QUMxNQorOjEwMEUyMDAwRUY1QjFDN0U3NEVGNDhBQUJGQjFGRjBDRjQzOUM2RkIyMAorOjEwMEUzMDAwNkZEQTYzRUZCRjY5Qzc3QkI2RkVFNzlBMUQ2RUVBNUZBNAorOjEwMEU0MDAwRUQ2NzlDQjc1NUUzNEE5Q0VGREI5RDJFQzA3NzkzREVBMAorOjEwMEU1MDAwRUU1MEVBMzNEOTQxMkZGMTc1QjEyN0FFMjY1OEYzMzI1RgorOjEwMEU2MDAwRkEyNzk1N0NCNzhFRkFBRjc1QjFGMTEyQkU5QjY4QkVCQQorOjEwMEU3MDAwRTg2MkVGNTZBQUM2Q0IxRTIyOUZGMTNDQjc4RUZCREU3RQorOjEwMEU4MDAwRDZFMDE1QTA1QkY0NzhDMjgxNEZBRDUwQUJDNUZEODBCNAorOjEwMEU5MDAwMzYzOTVBNkRERDdGMDlGOEYzMENEOTA2RkY4MjYwRkQwMworOjEwMEVBMDAwNDA3Q0VGMEFGNzcxM0FCRTUzQTE0Njk4RkYzQTM0QTU0OQorOjEwMEVCMDAwOUVERTdCRDQ2NENEOTc3MURENjZGREExREYwRUY5REY4OAorOjEwMEVDMDAwQTVDOUEwNUJGODZCRDRBNDJCQ0U0NTk3OUQwQUJBNkQzQgorOjEwMEVEMDAwM0ZCMDY2MzIzQjBGMTZGMzVGMzMxODM2MDNEMUMzNkI1NgorOjEwMEVFMDAwQTRBMzA3RjA5RDA4RjM1MjE2NjcyOEVDM0JFMEZCRkUzNQorOjEwMEVGMDAwMTBFRUZCQ0I3QURCN0I2MDE4M0FFQTIzQUE4RTc0MzZCRAorOjEwMEYwMDAwQkU2MUI5RTc5QzhFRTMwNTVENTYzMDlFMzk0MjM3MDFEQworOjEwMEYxMDAwMkFDNDY4MTA4NjE3RTM2Qzg3RTNCRUFCODNBNjAxQTJFMAorOjEwMEYyMDAwREUzMDlEOTgzMzhDRjEzNzFDQTVGOUI1RjU3RkExNzFBMgorOjEwMEYzMDAwOEY4NTM5RDE1MTM5MDMzMDlGMkZCMTc5QTRFODNFNEZDNQorOjEwMEY0MDAwNUNFMzk3NzM0QThCRkJEMjA3MzA1OTNENkNGNTI3NzlFOAorOjEwMEY1MDAwNjAzM0REQ0ZBMDNCRjM2NDQxMUEyRjIyREU0RUY0QkI5OQorOjEwMEY2MDAwQzYzNzUxQzJGNTA4RTczOTA4REY2OUMzNDc4RTJDRUY1MQorOjEwMEY3MDAwNzA4OEY4QzkwMTIyRUYxODA3NkI2QTM1N0MwOUE2QTJCMAorOjEwMEY4MDAwMTk5MzVDQzNGMTdDM0YyMUUxRkM0QUEwODNBNkE1RDA2NAorOjEwMEY5MDAwNDlEMzdDQUYyNkE5MTRCRTU3QTlCRjRCODZCRkMwQzk5MQorOjEwMEZBMDAwMUMwNzdDQTc2MEM3M0JFREVGNUIxNUZEOTUxOEExNjM5RgorOjEwMEZCMDAwOUNFRjczRUVDQkIzQzcyMzdEM0I4N0U5OTkxQjczNjQyQQorOjEwMEZDMDAwMTFGRjFDQjNFRURCRTJEMDQ4NzFFMDJCNjRDRjkzRjU0OAorOjEwMEZEMDAwQzg0MTRFRUNEQTFDMEI5RjI5ODE0RTE2NUZFNkQ4MkZENAorOjEwMEZFMDAwNUZBQzJDQTJFN0ZCQ0JDMzdEQzc3NTJEQzVGOEYwQjM3MgorOjEwMEZGMDAwQjI5NzI3MDY3ODY3NkUwNTBBM0ZGMzgzNDk1RTE2RTdDNgorOjEwMTAwMDAwNkQ4MEFFNTlGOTExNjM3OTZBQUM3MTkzODZFRDNEMUQxRgorOjEwMTAxMDAwMTdGMkExODI3ODM2NjlFQTQzQjkyMjY5MEVGMjE1QTE2NgorOjEwMTAyMDAwQzM0QUNFODc0MUU4RTI5RDFDQTVGRThGMkRFRTU4MUNEOQorOjEwMTAzMDAwRjk3MDYwNzk0QzYyQzE0NDUxODlGOUQ1MENDNUNBMDc3MQorOjEwMTA0MDAwNzJDRUQ1QzU3REM1NkRDMTc0QzIyNzk2Qjg5OUZCMzhERgorOjEwMTA1MDAwNUQ1NDE1NTRGRjY4ODQ2NzMzQTdCRjkzM0ZFRDcxQjBBQgorOjEwMTA2MDAwQzJBRTBCRjA5Qzg3QzdFM0ZEQUNGQTc3RjRGRDE3QjU3MQorOjEwMTA3MDAwMzA0MEUzNUYwMkQ1QUQzN0UyRkJBRDJBMzQ2QkE4NTdCMQorOjEwMTA4MDAwMDMyMkJFMjVDMkUyMTZDNUJFREE1NzY5OEYxN0Y1MzhBRQorOjEwMTA5MDAwRTI2MzVEN0NGRkRFMkI1RTlDQUZDNzc3RTA4NzBDNzY1QQorOjEwMTBBMDAwQjM3MzNEN0UzODI3NzM5QzEzOENDQjFDOTcyOEVDQjQwQworOjEwMTBCMDAwNEZDQUZGNjJGRkQ5RThFRDdDOUUwMkExMTkzNEFFNTNGRQorOjEwMTBDMDAwRTU3RThCREFFOTFBRjVCNzFGRDkyMUIxRjczNjFDRkM5QQorOjEwMTBEMDAwNzQ2NDY3RUU0OEQ0OTcyOENGRjg3RTc5MEVGRjJFRUQyMgorOjEwMTBFMDAwRDhCQjE3RURBQkQ2MTAxODc5Rjk1NEZGRTkwQUMxRkY0OAorOjEwMTBGMDAwMzI2OTk0NTcyMkU5QkM1REVGRkRFNjY5RjRFM0VGNTFGNAorOjEwMTEwMDAwMDBERjc1M0I0MkU2RDg4OUYzNTQ4RDNDMjQ1QTBFQUM3RgorOjEwMTExMDAwQjJEMUY5OTNDRUFCRjczOTI2OTNCRjlCMzQyMTdGMDEyRgorOjEwMTEyMDAwREFFRUQ4MEU4OUJERjMwM0U3REU4NUVGNUQzNTFENzA3RAorOjEwMTEzMDAwNDE5Mjk0MUYwM0Q2RUZCMUNEQ0M2RUI4RUUxNzhGRDc4NgorOjEwMTE0MDAwMTA0OTgwOEQxQzFFNUNCRkFDRUI0QzQxQkQxRjc0MEI2NQorOjEwMTE1MDAwOUY4NEM1QkE2MDFBOURGOERFNzMwM0M3Q0Y4MDY4QkU0RQorOjEwMTE2MDAwQUQ5RTk4REYzQkIzRUEwRjUwRkY0RjhDQkRGRjNDNzA0NAorOjEwMTE3MDAwNDY4OUFEN0ZFMEZFMTE5REZDNDNCRUVDRTU2NzkwNjNDMAorOjEwMTE4MDAwNkVBMEVCNEEzNDM3NDVFRDIwQjI5RkM2RkQ0NzUyOEEyOAorOjEwMTE5MDAwMjBEQzRFN0ZDQUZDREQxMjVEQ0ZBRTI3RUIxOUJFQzc0NworOjEwMTFBMDAwNzY3REQyQjExRjc1QzQ1MzA5RkMzQkY5NTYwRTcwM0JENgorOjEwMTFCMDAwMzIwMDgxMkM3ODhFQTRBQUU5RjkyQzk1QkI5QjdFQTFFNAorOjEwMTFDMDAwNTA3QkVDQTY0N0E0MjQ4REE3RUUzQTJCMTcyOERFMTVGQQorOjEwMTFEMDAwRUE5NzdBMDM5QUVGMjQyQjRDOUFCRjFERjhGMzg0RUQxQgorOjEwMTFFMDAwNzhGN0U5NzZCQ0U3NTREQUYxMUI4Q0Q4RjFFOEM0NzNFMAorOjEwMTFGMDAwRUVCODYxQjZGQTczOTU0NjM3NjUzRThFRUY0QUYyMEY0OAorOjEwMTIwMDAwRjE0REY0MjQ5REM3N0MzMjhGOTRERTFCOUY3M0Y2QUNBNgorOjEwMTIxMDAwNTk4NkZFOTI3RUYxRThDMERGMzkwRUZDMUQ4NzNEN0JDQQorOjEwMTIyMDAwNTkyOTQ0QkQ0NTk2Rjg0RjM1NDVFNUNBMjk4NzAyNEZFRgorOjEwMTIzMDAwQTU1QTY3MkRGRDE2MDk1MjNGNzU5ODc3MjIzNUIwNzY2RAorOjEwMTI0MDAwMjVERTBFMjY1NEEzMjM1NDBFNDU5QzcyNEVDRkJBRkFDNworOjEwMTI1MDAwM0E5QzI0RTlDRDk3RUYzRjM0MEJCMkNCNUQ0NzhCMzdGNworOjEwMTI2MDAwRDJFMEMyRjM3MTg4MzQ1NEUwNzlCOTQ2RDNDRDU4RkY0NworOjEwMTI3MDAwQkNCRUQ2NUI4MzhFRTc4Mjg4ODZFOTFERkNEQ0U0NDgzMQorOjEwMTI4MDAwMTU3QjE3QTkyM0Y1NDExMURBN0Y3NzhDM0U3QTE5REE5RAorOjEwMTI5MDAwRkQ0REQ3NDI5NEJFQ0IxNDY0RUJFRjJFOUU0RTBFQjJBMgorOjEwMTJBMDAwMzhFQkRCQTMzMjE4RTgyRkQ4QTMyNDI1RjQ0MzY5QzYxMgorOjEwMTJCMDAwMkYyRTQyQkI2RDhGNEJBN0VCOUY3NkY0MzdGRjhCOTY5QgorOjEwMTJDMDAwOEZEMUYwMUNBMzU4NEU4Q0MyNzE0OTdERUFFRjNGQjIxQQorOjEwMTJEMDAwRTdGNUQwNzcyREY2NTFGN0VFNzU2N0UzRkFCNDQ5ODY1NgorOjEwMTJFMDAwMzk5OUY2MDEwRDAxMzY3RTc3RTU1RjhBOTAyREU3NzkxMQorOjEwMTJGMDAwOEZEMjdERjlGMjJFQkI5RkNEQkQ4QkY5RTFFNkVGQkUxQgorOjEwMTMwMDAwOUNEQUEzRkI2N0IzRjczODlGMzhDQ0VFQTU0RTUxQUVGRAorOjEwMTMxMDAwRkVFQTk3NDg3RUZDN0ZGMDc3OENDMDk4M0FCMzg4ODVDOAorOjEwMTMyMDAwNzIyMDNERTMzRTgyNjc4MkM3RjUzQzdFQjNFOUFGMzI2RgorOjEwMTMzMDAwOERERjFDN0YyMTQ4MjhBRkUzRkYwODExMTM1MURCM0NGMAorOjEwMTM0MDAwOUJBRTU3NEY4N0E2MUNDMDc0RjIxRTg5RkE4RjlBMEU2NworOjEwMTM1MDAwQjNGNTZENkNBN0RENEY3NEZFNjRBMjE3NDhGRjM1N0JCMworOjEwMTM2MDAwOTg3RkFCQTY4QjlEMEY5Q0ZGQjJCRERFRjgyRTdCN0VENworOjEwMTM3MDAwNDIzRkZDQkIyNEMwRDdBRDEwMTQ5RDRFN0NFRTFFOTc5RgorOjEwMTM4MDAwQjEyMkMwQ0VEM0U4QkRCMjg4OUE3OUZGRDUxNTY0NzY3NAorOjEwMTM5MDAwMThDMTA3OURGRjkxQTMxMDU5NDJFNjcxQTRBMUE0MTY5QworOjEwMTNBMDAwRUYyOTFERjk4MDlEMzcxQ0Y5NDhBOUNGQjRCRkRBMTI4NworOjEwMTNCMDAwNjBGQ0IyQzlDRENFOEYzN0NEMEUyNDE3OTM3OUVDOUI0QworOjEwMTNDMDAwN0RDMzUwREM1N0ZERTNERjYyNDNCNUJFRUMxMkEyMjJDMQorOjEwMTNEMDAwNjRCQTI2MUFCOTMwMEVFNUEzOTVERDc3ODM0NDcxQTY2OQorOjEwMTNFMDAwRjc5Mzg1NUMwODM5MTFGMjUxM0NEQjFGQ0JFNDE3MURFNAorOjEwMTNGMDAwMTY2NEZCQkZCQUQ5OTUxMkM2NkY3NzNGMkJEMTMzQTZCRgorOjEwMTQwMDAwRUUyNTA0QUUzRUYwNjhDMjkyNDEwODRGRDNFRUY3QTkzNAorOjEwMTQxMDAwOUZDMkJCMjdCM0JGRkJEOTQwODhDRUJGN0I4OUI5NzhCOQorOjEwMTQyMDAwMDJDMUQ3Rjc4ODcwOUIyODBGRUU0NDU5QTZGRTRENTg4RAorOjEwMTQzMDAwNEZGRDU3REIwMjhDOUZCQkJENkMxRjBFNkFBMjE4REZFRAorOjEwMTQ0MDAwOERFOERFM0RFOUQyNjUwNENFQkI4OUZDRTFGQUJEQzk3OQorOjEwMTQ1MDAwMTVBMTcwOUJGMzgwQkVGRjA3RkM3RTYxRTk2NUIwRjVDNgorOjEwMTQ2MDAwNzZDQjdFRUQ0MEEwRjYyMEQyRkI2MDgwQzUxRjE1QzQ3MAorOjEwMTQ3MDAwMjIxMkMyMURGOUY4NDQwOEZCM0ZGMkExODdEMkFGODRDMworOjEwMTQ4MDAwRkI4QjQ0QkIyMzAxN0UwRTE3MzQ3RTQzRjk2NTRFMjE0RQorOjEwMTQ5MDAwNTU4QTkxNTgyOEQyMzAwNkUwQkNERDA0REYxNkZEOUQ0OAorOjEwMTRBMDAwQTY5QjQ5QzdDOThGMDFCRDQ3OUYxRjkwRDk3OTE4RDlGRAorOjEwMTRCMDAwQTdFMUZFQTMwOUM0OEY0OUY3MkI0MkZFRjBEMjlCNkEzNQorOjEwMTRDMDAwODlCQjk3RjY0OEE5MjBEMTlGRDVERTQwMEFGRDMyRjlBNQorOjEwMTREMDAwNzM2NDdDODM4N0Q4QTM1RUQ2NUZBN0RENkU0NTBEOENEMQorOjEwMTRFMDAwRkExNzc1MDBEMDNDREIxRjA5N0QyQ0Y0Nzg2QjFFRDNGNgorOjEwMTRGMDAwN0ZBRDZCNTRBQTFGMzdBQjVEM0VGNDRCOTcxOTdBOURCNQorOjEwMTUwMDAwNEFDNkNENTc3NTFBNkYzMTc4MEU5M0Y3OUNFMUY3RTYwRQorOjEwMTUxMDAwRjVEODQ1MTMwMDFFRkI1OEM5RTgxRjM5MkIyOEYwMTVENAorOjEwMTUyMDAwRkIwN0UyNkJFNDgxQTNGQkQwQkM4QUY4QTAwMEU5M0Q5NQorOjEwMTUzMDAwODVEQjNERTNERjY1RkE0OERDMzM2OEVBQjk0NzYwRDcwRAorOjEwMTU0MDAwNDc5QjdDREM4RTgxQzRFRkYxRENGRUE5QkZBQUY0RkVEMAorOjEwMTU1MDAwNDA4RkZFOTkzRDg1QUVBN0EwNTQzRDg3RkMzNUUxNTdFRAorOjEwMTU2MDAwN0M3QkMwRjUwRkQ5RUQ1MUJDOUNGRjQyMkM4RTcwMzhBRQorOjEwMTU3MDAwRjVDRDM4MjA3QTQ5RUE1RkVGMzhFOTRDOENGMDlFN0M1MworOjEwMTU4MDAwMjk0MUNBOTgwMzQ0Q0UyQ0VEOUQ3QTZBNjA5MEFGQjM4RQorOjEwMTU5MDAwNUM0RjFEODc4OTAzMkZENkQzRkMzNDdBNjFFNDM5OEZFMQorOjEwMTVBMDAwODU3Rjg0OUU0QUYzNTM5MkUyRDUzOThFMDRERTlFQkMzOQorOjEwMTVCMDAwMzYxQ0Y1Q0IwQjBBRkE1MThFRDRCMkJGRjM5M0UyNzIwQworOjEwMTVDMDAwOTRGNzQxRjI1MkU0ODdGNTdCMkVGMTIxREZFRjNDMzBCNgorOjEwMTVEMDAwQzk4QjYyNzU1Mzk4REQzQjUzRjc0RTM3ODFCMzhGRjU1NgorOjEwMTVFMDAwNUNEOTA1NUUzRDUwODlGODkwMjkxRTE0OERFNDJERTNFOQorOjEwMTVGMDAwMUY0QjQ4RkNERUE1OUUzQjNEQzNGQkQ4MjJCRDI5Q0MzQQorOjEwMTYwMDAwRUU5NUVEM0MzMDJDOTdFRDQ3NTM5NEVFM0Q3Q0NGRkRBRAorOjEwMTYxMDAwMTc0MjJFMDRCRjNCRjk1QkM4NDM5Q0I0OTIyRDc2ODRERAorOjEwMTYyMDAwMjI3NUYwRkRBM0REOEYxMEU3NzY0NDVDQkMzRjYzMTZBNgorOjEwMTYzMDAwNTNGQjcwMDFCNzBGRTM4MTExMkJGMUNGMUNCNEE2RUE2NQorOjEwMTY0MDAwMzQzQ0Y3NTgxMDFDNDZFM0FCMTcwQzYwRjg3M0UyNDNDOAorOjEwMTY1MDAwQTQ0RDFGMTI3QkQxMTIwN0RGQTQxRUE1RkVCMUE2MEY1OQorOjEwMTY2MDAwRERCNkVGMDJCRkQ5RjAyMkYwN0IwMUUyNTdGQUU0RjhEMQorOjEwMTY3MDAwM0QzRkM4RThFQ0M0RjNBNzlEN0ZFOTRERTMzMkRFRTdDOAorOjEwMTY4MDAwRkI1Nzk5RkYwNDg4M0RERDQ1RkRCMUVDM0U4OUUwMzcwRAorOjEwMTY5MDAwQTEzRjZBNkU2RThCRTdFODY5N0QyMUVFODMwOEJEMjM2QQorOjEwMTZBMDAwRjRDQkY5OEQ4OUU3NzIzMkU4MEZBN0RFODhCOEI0RUY4MgorOjEwMTZCMDAwQUUyMkY4OEJGQzJDNDBERkVCNzBFQTkxMEZGMDk3NjJDMgorOjEwMTZDMDAwRUE3N0JCMjc0OEUwN0RFQ0Y5Qjc2NUY0OUIzQ0YxNTMyMgorOjEwMTZEMDAwMzI3NzUyMUVEOTNCOTlGOTA1M0I0RkVEQkM0QkQ4QUQ0MworOjEwMTZFMDAwQzI1RTc1RDYxM0Y2QUE1ODc3QzQ3OUQzQUY4M0IxODc5MworOjEwMTZGMDAwNzA3QzY5Mzc5MUE3MTBDNkM3QjI3REYyODE0MEVDMTFBQQorOjEwMTcwMDAwRkM5RTQzNjBGNjYzMkM2MDY1QUE4Q0VENjdFREYyOUE0RgorOjEwMTcxMDAwNEQzRTczMUNGMkQ3OTE1MkQ5M0IzMjAxRjYyRTk0MTNGMQorOjEwMTcyMDAwMEUzMTdFNDM5MEJGMkI0MEI4MEVFRDlBRDIxQTYwODNFMworOjEwMTczMDAwQ0Q2N0VGMDY5NDhFODQxOEFFQ0Y3OEJEMTRFN0Y5MkJGMQorOjEwMTc0MDAwNkU5N0JEQzBENzFCOTExRTA4NDRGNzIzRkMyRTE1NEM4NQorOjEwMTc1MDAwQ0ZFODRGMEVCN0YwMkZGRTNBNjhFQ0MzRkVCQ0Y1MDY5QgorOjEwMTc2MDAwOURDNzIwMEQyMjY4RUYwRjUyM0JBNDA4ODEyM0JGNTE3MworOjEwMTc3MDAwOTc3QTlDM0Q2MjVEMjdGRDBEOUFBQUQ3QTIxQzBEQzJFNworOjEwMTc4MDAwM0IwNTU4MUZFREEzMENGNEY5NzM5MEM1MzVDREYzNzZFNgorOjEwMTc5MDAwM0Q4RjI2N0NEM0Q0RTZGQTUwMUZFN0VCRTlGNzEwMjIwMQorOjEwMTdBMDAwRENDRjY1OEYwMzM5RjJDQzRCODNGMUZDRjNCNTFGQkM2MgorOjEwMTdCMDAwMUZDNDczQURGRjU0OEYwNjExQ0UzNzE3RkQzRTg4Rjc1NworOjEwMTdDMDAwMjE1RTVCQzRGNjFGRDczOEVDOUNFMzFDN0ZEMzQzRDE2QQorOjEwMTdEMDAwQzM0MTkyN0VBN0U1RTMxQURCM0IyNDBCRDlGOUNDRjU5NAorOjEwMTdFMDAwNDkwNTM3QTUzREZDM0U3NzdCMEVGNUVEODlGQ0JDOEVBNworOjEwMTdGMDAwMDI1QjVFRjBFOTNDMEY4QkRCNzJDRUJGMkFDNEUyNjg2RAorOjEwMTgwMDAwQUVERkIxRDUzRDQ4QzdGMTYzRkY4NUUzQkZDOUVEQjg5MQorOjEwMTgxMDAwMzc3NzA1QTlGRjQzQzAzMzZCQzcyODM3RTJFMTNGRjdBRAorOjEwMTgyMDAwNzhGOEI5N0ZBNzhCRTFERjk4OEFFNzczMzE0RTBBMjdGMgorOjEwMTgzMDAwOUNDRjNGOUI0M0ZCQkI3NjgzNDJFRDhFOTk2NEFDODU4NgorOjEwMTg0MDAwODRCRjYzN0JBRUE3RkI3MEU3M0NBRTdENEQ5RjMyOTBCQgorOjEwMTg1MDAwRDBFRkRBMTUxMkI1NTdCMUZFMjJDMjBGQjE4NUNCRTkzMAorOjEwMTg2MDAwMzk5RTczOUUzMzRENDdGQzA4QjcyQjlDNzEyNkQ3RURFQworOjEwMTg3MDAwNjFFN0VGMERBMEFGOUM1ODk2MjFFRTY0Q0ZBNUY0REM5NAorOjEwMTg4MDAwRURCQTdFRjYzRDY1MjE2RTRGRDRDMEY5MTgzNzdGMUM0NgorOjEwMTg5MDAwQUE3RTU4QTVGN0JGRUY3OUIzMDU2ODEwRDlEQjJENUU5NgorOjEwMThBMDAwOUExRTZFRDE1OENBRjVFN0RDREQ3QjlGQTc3Q0E2NzYzMQorOjEwMThCMDAwRDZBMERDRUYzQ0YwN0FDRUI3RjRCNDFFRkZGMkQ2RjczOAorOjEwMThDMDAwOUZCQjg3RTRDNzAwRjNGMzA4N0ZGQkQ1MUNFRjE3NzFCQworOjEwMThEMDAwN0Q3RTFEQjcxN0M2N0NEOEI3M0VCRjFBRjEzMUIyMzcyRgorOjEwMThFMDAwQkM0MjhGNUY4RDdGNkZEMDgyMDdBMUQ3OURGODM4NzY3RAorOjEwMThGMDAwNjA3ODBFRjJDN0U0OTBGM0JDRjlEM0UxMjU1QkJCNzlDNQorOjEwMTkwMDAwNEFFNjc4NDYyMTQ3ODc4MzhDQUYxQkRBMkY1RjU2NDIyMQorOjEwMTkxMDAwQzY4RjNGRjNDNjkwMkVBNjI3MEVBMjlFMTA3QzBBRDAzQgorOjEwMTkyMDAwRUM0NjM5NzZGMkEzRTA5MzFFQkVEQkIzOUFFMjQ5RjBBRgorOjEwMTkzMDAwMDc5MUFCMzAzRkU3MENFM0ZFRDBDOTdGRkRDNTM3NzU5QgorOjEwMTk0MDAwQkJCQTg2QTA1RTcwRjI1OUI3RTM1RUI0NDhBRjA4MzEwNworOjEwMTk1MDAwRkY3QjgzNkU0Q0MxRkQyQTU5NkU5NkIxRjM0MEE2OEY3MgorOjEwMTk2MDAwREU1NDEzQ0ZERjg2RjJEQUNFRTQ2NURFOTM4RkZDMDQxQgorOjEwMTk3MDAwRjVEMDBEM0ZERTEwNDIzREY0OTY5QTI4QzJGMTFBQjcxOQorOjEwMTk4MDAwMkQwREUxQjlGQTlCQUExOUMyRjY2RjI1OTU4Q0YxOEYzRQorOjEwMTk5MDAwM0I0MjkyNzg0RkMzMTYyNzAxNkRFNjY1MjhDN0ZGRDhGMgorOjEwMTlBMDAwRTZEMkYwMUNBQzY5QkI4NzlEQkJFRjYyNzgyMzc5NzZFOQorOjEwMTlCMDAwREVCRTJCNzM5Q0M0MEQwRjZDMjhEMjU5RENBRDNENUU4RQorOjEwMTlDMDAwQTJERDQ1RkQxN0U4NUZDMzYxQjI5RDE3Rjc5QzNGNzcyNQorOjEwMTlEMDAwRjQ3RDlFREVCNDhCQzdEOUVDQkEzNDYzQkM4NDg4NEJFQgorOjEwMTlFMDAwNzBGMkYxNjYwN0ZGMTJGQzUwQkY5RjQ5RTBBMkVFNzY0RAorOjEwMTlGMDAwN0U0RTFFN0ZGMEFFOTE4NzA4N0M4N0RCN0YxNTkyQUExMgorOjEwMUEwMDAwQUNGRTc4NzYxRTdGQUNFM0JCM0ZGMkNBRDlGOUI3OUIzOAorOjEwMUExMDAwRjM3QkRBOUU0ODY2OEM5RjY4NzRBNTQyQjhBRjZBREM5NworOjEwMUEyMDAwRUFBMkZCQzBDNjQ3MTRGQTVFMURGQ0QxNDNEN0YzQjk0NgorOjEwMUEzMDAwOEZGQ0VDMEYxNzEwRjhFNjNFRTYyQTlDQ0FBNjQxRTM5RAorOjEwMUE0MDAwMjQwNEJEN0FFMjU4Mzg3RDZFNzhGQzY3RUM3QzU5RTc1NworOjEwMUE1MDAwRjEyQzlDNEU3MzFGREJFQkM2QjgxQzI3M0UyNzc1RUNBMAorOjEwMUE2MDAwNzU3NzM5RTIyMDI4QkQzQTBFNERBMUY3MDkxRjNDRTFGOAorOjEwMUE3MDAwQzY3NUY2QUQ2NzI1MTg1OEQ2QkJGRDlDQUQzRjBCQTFDQQorOjEwMUE4MDAwQkU0MDNDRDEzODAwNEVCN0VDNzE0QkE5Q0I3RTVBNERDRAorOjEwMUE5MDAwRUI1MUJGNUQ3Rjc0NUM4NEIyMzg5NkYyRkJBMzNGMjVBNworOjEwMUFBMDAwNzBDQzc5QzU0M0UzQTdFNjNDN0EzMzhEMzM3QTQzNkQzNgorOjEwMUFCMDAwNjY3QzdGRUZEMjIyNUM3RkU3QjhDQzIyOERBNkVDRkI2MAorOjEwMUFDMDAwOUMyREI3NTA3RUJDRUVDNTVCOEFGODdEQTQ2MkU2RUYyNAorOjEwMUFEMDAwMzE4QjcxOUVENzZFRkUyNjlERTc2Qzg4NTE3RTlDNzM3QworOjEwMUFFMDAwQUYxMjQ1M0ZDQjcxMTVFQTFGQ0IyMDM3MjM3Mjk5REMyQgorOjEwMUFGMDAwQkM3MTlGMDcxRkQzODEzN0I4OUZEM0ZDOURDMkZGNUU4NworOjEwMUIwMDAwQTRGM0JDOEFCRDFCNzM5Q0VGQkZGRjE5RUEzOTZGRjRDNQorOjEwMUIxMDAwNUFGNzYzNERFRENCM0I5MTRFNkYwRjM2MDY2QTM0OUVGQworOjEwMUIyMDAwNDAzNTM5REVFOEZCRUJDQThCMTcwRkU0RkE4REJFNzc0MAorOjEwMUIzMDAwMjNFQ0EwNDlGODFERUI3N0JBRThCQjM3OTY3NkI2Nzc2OQorOjEwMUI0MDAwNkIxNkYwRjEwOURDN0VFOTNDOTIxNjY1RjY4MzdFMzM3NAorOjEwMUI1MDAwNTcxMjcxRjAyQ0ZFNDZGMDU5MzYzREQwQ0VFMjU5M0U3OAorOjEwMUI2MDAwMzhDOEY0MENDNkU1RDBGMjRFNTc2QUEwMkQxRUM3NjNFNAorOjEwMUI3MDAwN0IxNzI1MUQ2N0UyRTI3MjZFMkYyNzcwRDI3ODk5MUVCRgorOjEwMUI4MDAwRkMzRTJCMjVGMTFENjRDMTJGQjNENzdCRUNGMTc5M0REMQorOjEwMUI5MDAwRkNFMzdDQjdDNzFFM0Y3MzlEQzMyRTEzNjlBRkY1M0ZBRgorOjEwMUJBMDAwRDc3MTVFQjdGOUQ0RTI2NzFBNUQ0OTFBRkZENEY4NDdENgorOjEwMUJCMDAwMEZERDlGMzQzRUUyOEEyMjVFREVEOUYxREMxRkJFNDU5NgorOjEwMUJDMDAwRjhGRTlEMEUyMUM3NzZCREVCOTRFMzM5M0JDNzQyMjY1NAorOjEwMUJEMDAwMzk3RTI3MTA4MThDNzI0Q0JFNjc5NEUzNDBGQTVDNDNENworOjEwMUJFMDAwODczM0FGNzdBRkNCQTI3N0JGRUFDMDI3QjExQjcyMzE4MworOjEwMUJGMDAwOEVGOEVEODdFNjBFQTVGRTBBMDc3RTg1QkU3NUVBRDE1MgorOjEwMUMwMDAwRDc0MzNBQzU3M0VGNzgzRkI2RUVBN0UzMzExOTFFMDUwNworOjEwMUMxMDAwN0ZERUYwRjAzQzNBNEUwRjFGMEIzRTE1N0M5QzI1NkU4QworOjEwMUMyMDAwQ0M4OTRGNjc3OTJFRkFDRUM2RjZGNjhCOTg3NTUwODkxNworOjEwMUMzMDAwN0ZBNzI5RUUwNkY2REU5QkVDOEYyMEZGRjY3N0RFRjkxNAorOjEwMUM0MDAwREJEQzMyRjFGRURCNzk2QzVGQzhDRTNCMjMwMTBERkY5QworOjEwMUM1MDAwNjIwNURFOTc1MzMyOURCMzQ3MjZDOTE5RURGRjFGRTQ5NQorOjEwMUM2MDAwMzIzQjA5RERCMjk4M0U5OUNCRjBEN0FBNDRCOTIzQUZGNQorOjEwMUM3MDAwODNERTYzQTA2N0FCMDg2NzVFODhDQTk5OEJDN0E5OTBBQgorOjEwMUM4MDAwOUVFOTdERjQ0ODhFRkNCRTRFRkFCOEZCODdGQjJGNTFDRgorOjEwMUM5MDAwRDEzRjNCNDZCRTc5MzhDOUVGRkNFMUNCOTdBODg0REU0MworOjEwMUNBMDAwOTEwOUYyRTNDMzQ4N0VENzBGRkZDOENBQ0Y5M0M3QjhFNAorOjEwMUNCMDAwMDhBQjZFMzc1RkI5NjQzMkM5Q0ZFN0YzOUUyRkZDMjRCRgorOjEwMUNDMDAwQUQ2MzZEN0UxMjU1M0U3NDI3OUVFN0E4M0Y2NTdGOEZGQQorOjEwMUNEMDAwNjgyNTkxN0JFRkU4RjQzOTczOEUwNzRDMUZDOUU3Qjg4QworOjEwMUNFMDAwNDk0QUYyQ0JDQTdFQkYwQzM3OTFCRkYyQzczNkU2NTJFMworOjEwMUNGMDAwN0NENUU5ODhFN0MzOUE5N0M2RUYyQzc4RUE2MjFBNDc0MQorOjEwMUQwMDAwRkE2NDJFRjM0NzlGRkJGODA0RkE3NzFEQ0YyMDFDMEZDRgorOjEwMUQxMDAwRTYwRUM4MEU0N0FCOEJGNTczNzhFN0I5OTMxMENGRTdBMworOjEwMUQyMDAwMEU0NTlGNUE5QTFFQTM1NTlEN0VGNzExQjQ5QkNDRUU4QgorOjEwMUQzMDAwMEZFM0ZEOTY3ODlFOUJGNkYzMjRFN0IzNTM0RDQ1REMwNQorOjEwMUQ0MDAwOEI5MkMzRjg0MkM5OTU5QjFGMjNFOUIzOUMxRkZFNzc3MgorOjEwMUQ1MDAwQUUyNkQ2MjFCQUVGM0VGMkNDQzBGQkQ4QkIzMTQ3ODdDNgorOjEwMUQ2MDAwMjBCRDE1RTVEODlGRDFERTNDRkFFRDFDRkE3NzRCNUUxRAorOjEwMUQ3MDAwRjEzM0JDQkRFMjY3NzhCQjMyNzc5NUVCMUNGMjdEQjRFMgorOjEwMUQ4MDAwNzdDOENEQzhGNEFGNDgzQjZFQzE3NEFCMTZGQjI1QTMzMgorOjEwMUQ5MDAwMDdBNEIwREY2RjVEQTNCMDdFMDNDRDQxN0MzNzRFMzIyOAorOjEwMURBMDAwOTgxRDJFMTE2NkJBOUFFMDIzNkU4MEVFMUU4RTIyNkM2QworOjEwMURCMDAwOEZGRjUwOTREMTQ3NTM3NEZDQTA2RDdDMjgyNUVCMjZFRgorOjEwMURDMDAwOTFGMzJCQzczMzdBMTFEQ0QyNzVGNEE1NzEyQzJGRTA3NworOjEwMUREMDAwOUI5MTFDMTZFRkQyMjkzQzdGNDI3ODQ2Nzk5MjgzNzEwMQorOjEwMURFMDAwM0ZGNTJENjI1NjMxQkVCN0VGRUJCQkZERUM3Q0IzMUI2QworOjEwMURGMDAwREI4RjRDQzcwRjM0RkQ0REE2RkJEOTI2OUMwM0M5M0Y5MgorOjEwMUUwMDAwN0UxOEY4REYyQjY0RUZFQjA4QkZDN0Y4NUZERjQ0RkRGNworOjEwMUUxMDAwREZENUJCRTdCMjM4MTNFRUVGMTJFN0Y5MzVGQkQ5Rjk5RQorOjEwMUUyMDAwOUNEM0JGMzUwMTU2NTE3RDNBREVBMTQ3MjdFQ0ZFMkFFRgorOjEwMUUzMDAwRDVBRkZEOURDRkZENDNFOEQ1MTIyODM5Q0RGM0I5OEYzRAorOjEwMUU0MDAwNzM0RkUxN0NFRUJGMDEzMzU5MTE4QjAwODAwMDAwMDAxRAorOjEwMUU1MDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJCNTVBMDk3NDU0NTU5MAorOjEwMUU2MDAwOUFGRTVGQkREQTkyQUE1NEFBMkE0NTA4MDRFMzRCMDJGRgorOjEwMUU3MDAwMjQyMTBCNDUxMjIwMDRENDIyMjBEMDMxNEE4MDE2ODExRgorOjEwMUU4MDAwRjY0ODgxQjI5OEFEOThCNERCNjk5RDQzODUyMEQyREFEQgorOjEwMUU5MDAwQTMxOTc1NkNDRTY5QkFFNzg1RDYxMTI1RTkyOTI0RDEzNQorOjEwMUVBMDAwRTA1NDMyQzUyMjA0MjU0RTkwNDVBMDFEM0JFRDc0MjMxRAorOjEwMUVCMDAwREE2NDMxM0Q4MjRCRjc2MUZFRkZERUZCQTgyNTQxRTk4NAorOjEwMUVDMDAwM0U2N0M4RTFEQ0JBRUZERDc3REY3RkJGRkZGQkI3N0JBMgorOjEwMUVEMDAwREZCQTQ0MDk2MDBDRDAzRjFEMjQwM0Q0OUJGMTk3MDI2NAorOjEwMUVFMDAwMzA3QzNDMjMxMUYyMDBGNDdBMDBEOTA5NjA1NDY0Mjg1NAorOjEwMUVGMDAwQzFGNjJBRkRCQjBEQTA2RDMzOEUzMzg1RkI2RjI1MkFGRAorOjEwMUYwMDAwNkM5RUZDNTNGNkZCQzE0NjJEQUM4NjgyODg3OUVEN0MzNQorOjEwMUYxMDAwREVEQjY1MkI0MDMxQ0U3RjExNTQ1MzNBQzBCNEJFRUNBQQorOjEwMUYyMDAwOUZDRkMxQkVBMURCMDAyQUJEOTc5RUEwRkI2Nzc1QUEwQgorOjEwMUYzMDAwMUY0NTlCNzFFQ0Q3NDUyMUJDQjQzNUNFNTYwMDUzRjFGQgorOjEwMUY0MDAwOTUyOTNBNTBDQzZDNUVCODhBRkZFMzk0Nzg1MEIyQzNCRQorOjEwMUY1MDAwN0Q0QkI2MzNBQTJGQzdEQjc2NDEyMkZFRjA3QjdBNTM0NgorOjEwMUY2MDAwNTA4RTIyN0UwQjEyRENFM0EzRTY3OURCQjZBODlCRTQ1RAorOjEwMUY3MDAwMkVCMkFGQUYyMEI5MTM0QjMyQTJFNjgxRTNGQTRGRkE4QgorOjEwMUY4MDAwQjA5RjhEN0Y1NzMzMDBBNjQzNjU2MjA4RTUyRjg0NEFEMgorOjEwMUY5MDAwOEY4NEYyQkEzRjAyNzcwOEU1OUY3MThBOEZEMzlFNzNEMAorOjEwMUZBMDAwODdGQ0IyMTc3MTJDRjkyOEZBN0EyOTQ0RjQ3MTlFQzc3QworOjEwMUZCMDAwM0VGQUMyNzEzODQyOUVFOUY2MDRENzA1MEJGRTE4MEZBRgorOjEwMUZDMDAwRTNBRkNBQTNFMkU4MEUxMTRFQTc2NDM3QUEwMUVBOEY3NQorOjEwMUZEMDAwRTEyMDE3QjY5RjgxMEE4OERCMzQyODQ4MDQ4NkFCMENDMQorOjEwMUZFMDAwMkFGNkRGMDRFRjBCNzNCMEJEQjI3OUM4NzE3ODUyMThDRQorOjEwMUZGMDAwNEY4NzI3MUFDRkE0NDVEMTc4OEVBOThDQzY3M0VDOEE1NworOjEwMjAwMDAwNjhEQ0M2NzlBMzcxNEFERDM4MjVFQUZFNEQ5QjBBQTMzOAorOjEwMjAxMDAwRkEzNzNGNTYxQTM1M0VERDVGMTZENUNGREM1RTFFMzVFQQorOjEwMjAyMDAwN0U1MkQzRDJBODdFRDY4RTU1NTFFMzczRDRCNTUxRjdFNAorOjEwMjAzMDAwNzM3NzU3REQ5MEZFRjMwM0Y1NTFFMzYyRjUzRkI1RTNBNworOjEwMjA0MDAwMjc1MUYzOTZDQUY3Q0E5MDExRTY4MTFGRkY4ODA3ODVDQQorOjEwMjA1MDAwQTQ2MkQyM0ZFQTIxMDQyM0Y1M0ZEM0U1MjdDNkZGQ0Q5MgorOjEwMjA2MDAwRkE3Rjk4RjQ5RjFCQTE3RkY5REU0NEFGMzU2QzZGQjEwNgorOjEwMjA3MDAwQURBNkQ3OUZEMDVBQzc5MDVFNzE0RTE0RUUwQUU5MTlFQgorOjEwMjA4MDAwQUYwRDFBQUNEQjI1NkMxREM4OUQ3QkYxRkE2MzY2N0UzMworOjEwMjA5MDAwRkQ1MTgxQ0Y5NUI4MzQ5NUQ2RUYwODFFRkQ1QUMyMTY3MgorOjEwMjBBMDAwRDVDMkVDRDBGRkIxNDU2RDQ0REUzQzJBMkIwREM0QUI0QworOjEwMjBCMDAwMTdFNTRBMDk1MDlFNTQ1NDlEMkUxMzc5QTQ4MzhEMDEyRgorOjEwMjBDMDAwRTRGN0IzM0FEREVBQ0EwOEY5OUVCMzczQkZGMjlDNUQ0OAorOjEwMjBEMDAwQzdEQTVGMThEMTU2RjFCREE5MTZGMDlCMEJEOTczQjRCRQorOjEwMjBFMDAwMzZGQUU3MDE1Q0I3MkQ4OTgxODIyRjJDREYzRTdGMEUwNworOjEwMjBGMDAwREU3N0Y0NjUyQjBFMDAzM0Y1NkYwMTM4MUZDRkU1M0QxOQorOjEwMjEwMDAwMUZDRkU1NUM2NTUyMUFGQkM4N0ZDOEVBMjQ5MkE3RDlBNQorOjEwMjExMDAwRUVERDY5QzdGNzlDOTc5RTMwRTA5QkMxRTBGMjFCQzhEQgorOjEwMjEyMDAwRUU1MkNERTBCN0UxRkIxQTBEQjBCQTEyRkIwRTcwNDlDQQorOjEwMjEzMDAwRjVEODI2QzI0RTNCRTE4QjYyMjg1NzkxMTQ4N0FBNzJDQworOjEwMjE0MDAwMTNGQkYwRkFGQjI0RDEzOEIyMzFCNzBFNjYwMEFDRDRFMQorOjEwMjE1MDAwRkNFMUM2MUNFNjBGODc3MThEQkRBNDUwQkQ5MjA4RDg2NgorOjEwMjE2MDAwMEUzRjkwQzlBRTlGQkIwRkFEMTBFREU5OUM5MUUzQTE2RQorOjEwMjE3MDAwRTE3MDUxRjhDOUNGMzc5QjU5N0I2OUIzM0RDQTZGNkU4NworOjEwMjE4MDAwNkM3RTIxNDFDMTc5Q0U2NUMzQTI0MDA0N0U1RDg0REZBRgorOjEwMjE5MDAwNzQ2QTY1ODZERjgwRkFDNzY0ODI2NzcwRERCNzkzNDkyOQorOjEwMjFBMDAwNjg5RkQ0QkJDRDhBNDM5RURBRjEwRjk1ODA3QTMwQjYxMgorOjEwMjFCMDAwMkRGMUEzNEU2MEE1NTE2MUUzQjU3OTdDQzFCOTQwMzhEQQorOjEwMjFDMDAwMTA2M0U5RkEzRDFGQzIyNjkyRUY5RTZGQjE4RDc4NUZEMgorOjEwMjFEMDAwOEZEREMwREVENzQzRUZDMzc2MzkzNjc2QzQ2RDM5RUE3QQorOjEwMjFFMDAwQzU0MUVERDEzOTBCQzgyRUYwN0E0OEMyRkVFMjZFMzBGRgorOjEwMjFGMDAwOTAzRDJDRjFBNjFCNDg5RTkzRTAzRUREOEVGMjlDQjVFRgorOjEwMjIwMDAwMkJFQ0Y5MUY0MkE1ODFFNDNBNzM1RjZEMDI4REJCMzY1QQorOjEwMjIxMDAwOUYzNjBGMEFFQkMwNzhGMkExQzM2RjQ4NDZCRjM1NzRGMgorOjEwMjIyMDAwOEJFNERFQTVCMEY3OTlFOTdBRTVCREE5NEY1QTk1RjBBMAorOjEwMjIzMDAwRkJDRTgwQjdGRjM0RUE3QjI5QjhEOUJDREFGQzY4NzlEOQorOjEwMjI0MDAwNTE3RUYxOEQ4REQ1QkY0QkNBMjA3RkE4MDMzM0Y5QzNEMgorOjEwMjI1MDAwNEUxM0YzODc4MzU1NTc1QTVGQzJGQkFCNTNGQjZFMzI2NQorOjEwMjI2MDAwRTI3M0U3QUJCRTlENENCOEFDREMyMTgzODJGQUZGMjQ1RAorOjEwMjI3MDAwQzFGQjA3RkJGNDMwMUVFNzFFRjg3MzAyREQ1RjY1NTJGOQorOjEwMjI4MDAwNUY3OTA5RUQwMEY2OThEQ0FGMDAzREI3ODczREE3OEQ3QgorOjEwMjI5MDAwMUJCMENGRkQ4Qzc4MDcyNTA4RDRBQ0VCREJBNzg2RkZGRAorOjEwMjJBMDAwQkNENzczQzYxMkNGMzQ3RTNEMjhGODU1RkY1QUQ2NTg5NgorOjEwMjJCMDAwRTI1MzdEQzIzNTdFRjFGRTJCOTk2Mzg5NUYzMzI0Q0VENAorOjEwMjJDMDAwQ0JEODc5QkI5MDVGNEExNkFFMUI3OUE1MjBBRkJBQkVCQQorOjEwMjJEMDAwMkE0QjIyM0ZCMUVGQjhCMzg4RTRENDgzRjc2QUU0QkE1QgorOjEwMjJFMDAwRjZCREJGMkE5N0VFQzM1OUQ3MERDOTRCQjZFOTQ3Mzk5QQorOjEwMjJGMDAwRUYwMTJFNjc4RkIwOEYxNUMxQTQyMkQyM0JEQTlEQzVBNgorOjEwMjMwMDAwODFFMzU2RkRDNzZCRkRCRjI1N0MzQUY3QkNGMjM4OERFMworOjEwMjMxMDAwMjlCRTMxM0MzNEZGQjQzNzlFQzcyMzEwNzFDRTJENzBENworOjEwMjMyMDAwQzEzODk3QUQ0NzUxMDcyMURFNERGOUMyRjVGQ0Q2NUVBNQorOjEwMjMzMDAwRjIwQkM4QUIyQjNBNzQ3Qzk5RTRBRjJBODFGQzgyMDU3RQorOjEwMjM0MDAwREMwQUI1RTg2NURFOUI4RDdBNkMzQ0EwODNBN0IxNkI5NworOjEwMjM1MDAwMjNBN0E2Rjk5RjEyRUNDQjNBRUU3RkIwNkY0RUMxMzg5RgorOjEwMjM2MDAwMjJGQ0QzMjRDN0JGMkVEQUNBRUNDNzYzNUQzMzgzQjkxRQorOjEwMjM3MDAwNDQyNjU3RjFFMUFBMEE3QTJGRjRBMjFGNDc1OTJCRjFGQworOjEwMjM4MDAwOEZFMkMxNkNEODc0MjgwRUU1OUNCMTAzRjMwMzFDMzdBRgorOjEwMjM5MDAwRjMyQ0JGQUZGOUY1NTkyMUREMUE2MzIyOERGQkQ5MTc1NAorOjEwMjNBMDAwQjI4RDIwOEE4RTAzQjMwRjk3N0Y0QUYzQ0U4Njg4RTdEQgorOjEwMjNCMDAwNDY4OTBGQjMxQzdGNUY3Qzk4RUZFMEZFMjE5MENERkQzNgorOjEwMjNDMDAwN0IyMDE0QUZGQUQzRDlCNDQ1OTVGOUM4MTcyNzhGMUZDRQorOjEwMjNEMDAwMkQ4ODM5RDlCMTUxMUFDODM2QTMxRjVFRTQ2OERFQkUxNAorOjEwMjNFMDAwN0QwMkQyNjEyMkM3ODVGQThERjQ1QjI5NjIzQ0JFOTZEQworOjEwMjNGMDAwMzcxRTlFQzJGQzIxRkMwNUE1MjJCQ0VDNDJFNjE4NzlFMgorOjEwMjQwMDAwOEFEMUVFNzgzMDc2NDdFNTlEQTEyM0RGRDhGQTcwMUQ5QQorOjEwMjQxMDAwQUQ0RUU1QkY0ODVGNDM5OEQ3OTA1Rjg4RDNGNzE5MUQ0RAorOjEwMjQyMDAwQTNBQ0VGNERGMkFGQzhGRkU3MUMzQTI2QUZCOTQzRjJCOQorOjEwMjQzMDAwQThGODdFQjNFMjAxMDlENzEwNjdCNzRGOTNBNUYwRjg2QgorOjEwMjQ0MDAwMzIwNzhGNEJCNTQ3Q0VBNzE5NTE1RkZEQkFFM0I2M0NCMworOjEwMjQ1MDAwOUNCRkE2RkQwRDFCMkUxRjdFNkNGM0FFNzNFMDNDRDUxQQorOjEwMjQ2MDAwRTczRTk4NDFBMTBCMTk5RTU2OTk0MDM4NjUyNDkyM0Q0QworOjEwMjQ3MDAwRTVFQkMxQUYyRjFDMjk4NzZGMDcyRTA2Mjk1RkI3MjMxNQorOjEwMjQ4MDAwODlCNTM5MUQxMjVCOUYyRkM0RDczOUQwRDFFODhDRjRBMAorOjEwMjQ5MDAwMUJENzlFRkJDRkNFRjFBNEI3M0Q2MzYwMDVGOUUzRkNFQgorOjEwMjRBMDAwNjBEMTA2RTIzMUM5NjI0MDVEQkNGRTU1MkU5QkVGMDk0QQorOjEwMjRCMDAwNDczQUNGQUZGNUEwQTdFQjAwQUE2RTI5MEVEQTYzQzBBQQorOjEwMjRDMDAwRTc3MERFODFBRjY0MzY0RTlCMzdCRjYzQUU2QzQ3MUU0QworOjEwMjREMDAwRTU4NTlBMEU1MjVFMTgxNzM0MjlBNEU3Qjg5NzgxRTM3MAorOjEwMjRFMDAwMTI4QzYzN0VEMUQ3QjUxMDI4N0YxRDc0ODA1QkMyRkIzMAorOjEwMjRGMDAwQURGMTQzMUYxMzJGODYzQTREQ0EyRTg5RjA2QjAyMjc4OAorOjEwMjUwMDAwQ0VERjZBRTRGMTMzMDcwREUxMEQ2QkY4QkFGNkJFQjgyMQorOjEwMjUxMDAwRTBDRjgxRkMxNUYyQzNBM0QyN0Q3RDEzREM2MjhEQzRCNAorOjEwMjUyMDAwM0Q4MUM5RkY0QjA3RTc1NzZCN0M0ODY3MjVCRjhGOUNGMAorOjEwMjUzMDAwRENDNUU0MEFDQjA5RUNCRDlBOUMzOUFDMEU2ODM1MEVCQgorOjEwMjU0MDAwNUQ3OERDQzVFNEIyMTMxRjcyODBDQjA5QzEyQ0U1MTVBMAorOjEwMjU1MDAwN0FERUVFNjFFQjg4QjMyQjZFQkYzNDUyMkU1RjAxRTY1QworOjEwMjU2MDAwQzU2ODc3Q0Y2RTgxNkI3NjRFNzZFRjhCMEZGN0NENjhBRgorOjEwMjU3MDAwMTNBRDE5MjBGQ0MyMjk5Njg3ODRGQkU4QjA0QUMyQ0Y2QworOjEwMjU4MDAwQkZGMUNGNjdCNjZGOURDM0VBMjNCRjhDN0NCMDYwOUI2MQorOjEwMjU5MDAwRTBBNDc1NzJGQkMyQjJDOTMzQTY5MEUzRTA0NjlDMkM1RQorOjEwMjVBMDAwNjY3RUZGREE3OEU0QkI5NUZBNTYzRUNFOUQ2OEI3OTQxNgorOjEwMjVCMDAwNEJDQzZFODBFQ0E2NEVGODk5ODdBNEQwODVEQjUwQjU0NQorOjEwMjVDMDAwNUY4NjBFMTYyODI4NEJDREQxQjcxOTZGQUI3NUMxOTcxMgorOjEwMjVEMDAwRjJGMTdFNTlCQzM3NDhGRUY3QUQ4Rjc0NjBDM0Y1N0ZDQQorOjEwMjVFMDAwRkU1QTlDNUE4MTc4NjRFRjZGNEVGNjU4NDdDRUY3RDQ2NgorOjEwMjVGMDAwRDkyRENGQTc5MkJFRjc0QjBBMjI4RDc5RTE1MDFBQzk4NworOjEwMjYwMDAwNTcxN0ZDRDRFOEMxNzY2MUM3RUY4RDE0OUY1NjM5QkRDQQorOjEwMjYxMDAwNDdDODBFNEEzQTFBRTYxMTdFQjNBMEE5RDE2RTY1N0U2QworOjEwMjYyMDAwRDE0QjNDMERBNDcwRkYzMTdDNkFGMkFFODYwOEJDMkYwMgorOjEwMjYzMDAwMzk3OERFMDI0M0RFOUJDOTZFODJDMjNFQkIyOEZGQzFGMQorOjEwMjY0MDAwQjY1REU0NjFFRDA3NTY2NjJBRjlFMUU3RkM3MDMwMTVFNgorOjEwMjY1MDAwNzBDRTJENzAzODk1NzBENkFFMEZBQUZBNDVDNEE3REM5RgorOjEwMjY2MDAwMzNFNkQ1OUUwOEJFNUQxMEY2N0U0MUJDRUYxRjlEREVCMQorOjEwMjY3MDAwOEYwODg3RUEwMzlGMTg2REI4MkVERjFGMDI2OTE0OUYyOQorOjEwMjY4MDAwMDI5OEE3RDlCRkMzMkZGQTYyRUNDNkE3MUYzMkQyNzgyRgorOjEwMjY5MDAwREY0NTYwN0UwNEY1QkEzNTExRjVCNEU3NENDNzk0MzVEMworOjEwMjZBMDAwNTYyNjNGMjRFMkJBREJDRjk5OThERjZDNEZFN0Y2RDc4NgorOjEwMjZCMDAwNzBGQTcyMDFGOUFEQ0I5REQ1MzcxMzVFRUYzQjBDMUE2MgorOjEwMjZDMDAwQ0ZDQkUyQzk5RUY2MDJGMzYzOUEzREU2OTEzREEyRThDNAorOjEwMjZEMDAwNzlDNEYzNjJFQUU3QjBGOTVBOERCREU1Q0NGRURBNzU0QworOjEwMjZFMDAwNDBGNjg3M0M2N0JDNDc5RURCMjlGRkM4QjMyM0VGRDk4MAorOjEwMjZGMDAwRjM1OUNDOUU1QjdCMzFFMDYxREY4RjdFN0MxMkVCOTdFMAorOjEwMjcwMDAwMkRBMzdFNkJFRjdDM0JCMzY3MUQ0MjVCNDg3NjE5M0E4NQorOjEwMjcxMDAwQzhFNjA5NjA0QzIzRDU0OTUwMTk5OUE3OTYzOTZDNENFNQorOjEwMjcyMDAwNUVDRDNGNTYzQUI4RkYwRjY0MkI4OTZFNUM4RjQ1OTY5RAorOjEwMjczMDAwQTNFQzIwMjI1RUYyQkU4OEE3MkI5RjM3RkNGNEM1MDlDQworOjEwMjc0MDAwNjQ0RDIyMkU4OEJDQUM0QkU0QzFFMDJENjJGRUZFQzc3NgorOjEwMjc1MDAwMjI5NkQ1QkY1M0JBQjgwNUQ3NUJERjIzNzNGRjJGNzgxNgorOjEwMjc2MDAwNzI1MEU0Qzk4NzM3QTdCMDNFQzUwQjA1RjUzNDFENUIzMQorOjEwMjc3MDAwMEZGQUQzMTk5RTRERjNEMEM2QTA2NDUxRDMyMTZBNEJGMgorOjEwMjc4MDAwMkIwM0YzMTA3MTk4QjNBMkY3OTA4MTlCNzMyRUYxQUZENgorOjEwMjc5MDAwRURFMDBGNzJGNUM0Rjc3MzI2ODg0MzExREJCRTE5RkExQQorOjEwMjdBMDAwRjg3NUM0RTE5MTJFQzQ3Rjk0Qjg4NENCNjFGQzQzMDRENgorOjEwMjdCMDAwMTgxRkFGQzc5QjQxQTlFRkFFRDk2RTRDRjk5RjFGRkIwNQorOjEwMjdDMDAwMDM3RDFDREEwRjExMDNGMUM4N0I3RUNDNEZGRDI4NTAyRQorOjEwMjdEMDAwQkJEMzMzRDU4OTM4RkUzNkM5M0JENTg5MzgwRTlFRjgzMAorOjEwMjdFMDAwMjY5OTdDN0FGQkE5NEY2Q0U0RUZEQjhDOUU1Q0UyNTk2NgorOjEwMjdGMDAwNUIwNkQ2MEJBM0YwNzM4MjkzRjNBN0Q4MTQ5REE3NkI0NworOjEwMjgwMDAwRUQ1MjI3RTdGRjY0M0YzQzQzRkNBOTZCOTNFRDJBRUFCNgorOjEwMjgxMDAwQkJCRjRERjYxODMxOEZCQUUwRjEyNkVCMTFEMjhCRTAzOQorOjEwMjgyMDAwNUYzRTlCRTJCQkE4N0ZENzcxRDg2MTFERTUyRjE4Njc3QgorOjEwMjgzMDAwRDZCRjY4ODhBQTRCNkJDNEJFNDYxNkY0NkQ0QjQ1OUM0OAorOjEwMjg0MDAwN0MyRjRCQUNBRUREMTg5MzhGRDQ1MEZFNTI0MEY1NDUzMworOjEwMjg1MDAwQjM5MUQ2NTNGNTcyQ0MzQzk0QzcxNEQwQjhFRkFFNzM5NQorOjEwMjg2MDAwOTczQUM1M0U0NzI2NjQ1MjFFODMzQzYyRjVGNEQwNjkxMAorOjEwMjg3MDAwRDlCRDhCNjJBMDFFQkE0REM4REYzRDNBOEUxM0ZBNEQwQQorOjEwMjg4MDAwNjY4RjVBM0U2MzcyNzlFNjkxRERDRkQzRTI4QUE4NUIwOAorOjEwMjg5MDAwODc1QTI1OTVEOUNGNkVGNEYzRDgyRkJEQTgzNDAzQzczNgorOjEwMjhBMDAwRTE1NENBMEM1QTBGRTc2NUE5OUU4RjJGMERBNjMzRkI4MgorOjEwMjhCMDAwMkJGMTYwM0Q4RkVCNUU4RkY1QkM0QUVCRDZGMjNDRDUzOQorOjEwMjhDMDAwQzBENjhGRTE5N0U1NzlCMzQwNkRCNEUxQjgwREJCMjU3MworOjEwMjhEMDAwQjZFRjUzQkREQjEwOTVFN0Y5MDQzRTM1M0I0RTFDQTEyNgorOjEwMjhFMDAwNzJCMjM2MTA3MzVGRTBFMzhCQzFFNzBERkEzMTZCMjRFRgorOjEwMjhGMDAwNEU4RjNBNDVCRTk3MDY2OTkxRjkxRTc0M0I0N0FEMEI2MgorOjEwMjkwMDAwMzQ3Q0I0M0NGQjRGMDY5RTVGN0MyMEU2RDdDNkZEOEIzMworOjEwMjkxMDAwOTNEN0U3NzUxRTYwRkI0NzM1QUFBQ0FBM0MxRkI0QUUzRgorOjEwMjkyMDAwNDFCRURDMkZGODcyQkZFMDhCMEZGOEI4REFERDkyMUFFNworOjEwMjkzMDAwQTI3OEY1MzNBRTc3MzNGRTExMkVFQjAyNkIxNkE0MkE4NAorOjEwMjk0MDAwMjM3OTU1MjVGMEQ4RDg2MjYwRjkyRkMwMjYyM0Q5RTcxRQorOjEwMjk1MDAwQzY5RDMxRTMwNDJFNTUzMUI4RDQ3OUE1MThGOTc4M0VENworOjEwMjk2MDAwRkVCN0NBNTc2REUwRkIzNUQ1QzgyRkJGRjJGRjI3NkYwMgorOjEwMjk3MDAwQUNGRUZFNUREM0RGMTQ5ODEyQTVCRjQ1NDkzN0E0QkY1NgorOjEwMjk4MDAwRDgzQzc5RUY5MTI5MTY3QTdFQjgzQjgzRUQ0MzY4QkMzOQorOjEwMjk5MDAwODk5RDY3ODFDOEIzMTdFRUUwRjk2ODdGQzczQzRCM0U1RAorOjEwMjlBMDAwRDU1M0M3RjU2RTA5RTcyOUVBRjk1RjVCM0VFMjUxRDhENgorOjEwMjlCMDAwMjk0MzA1NEUzMTE4MkM3QUM2OEZFQkRDRDczRDcxOTkyRgorOjEwMjlDMDAwODJGMUExQjA0N0NGRTI0QjUxNEZBMTRBNzU0RDYxNEYwMworOjEwMjlEMDAwQTEyNTMzODExOTRGMTJENTBCMzgwRjhCQ0Y4M0M3MjcxMQorOjEwMjlFMDAwOUVDQzIzM0ZEQjNEQkY5ODYwNkYzODVFNjhBMTNDNjJBMAorOjEwMjlGMDAwMUZGMDdEMERBOUE3MzhBOTJGMjJERTc0M0JGOUJFQzZCMgorOjEwMkEwMDAwQjY5NEZGNzk5NkYyRkM4NTdCMEQ2RUNBNDcxNjFBODYzRQorOjEwMkExMDAwREU5RkVEQTJGN0VCREQwREQ4QUZFOTU5QkIyNThFRjRCMworOjEwMkEyMDAwRkU5QUU0QTY3NEZDNDg2RkJERUI0N0E0REZBMEMxNkUxQworOjEwMkEzMDAwNjJGMjNFN0M5MEVFRkI1QjI0RjcyNDFDRUZFQkJDM0Q4NgorOjEwMkE0MDAwQjcxNUZCODVDRDQ1NkU4MjU5N0I1RkExNDM3OUExODI4NQorOjEwMkE1MDAwRjJDNTcxMTY1NkM3MkZCQ0M5QzBFMkVFQTVGMTk2NUY0QworOjEwMkE2MDAwNTNCRTU0RTU2OTVFNDBGRUY4RDJEQkZCOENFNDBGMDZGMgorOjEwMkE3MDAwNUIyNTQ4QzE4NTFDNDkzOUY0MUIzRkFFRjNEMjlCMjcyNworOjEwMkE4MDAwOEM5NDk0Q0Y2QjNCNjFFQ0ZCOEU3Q0EyNUY5NTIxQzQ1MAorOjEwMkE5MDAwRUFGNzI2MjNENTQxQjVDRDVBQkZDRjQ4N0FBQTE0RjkxMworOjEwMkFBMDAwNTVERENCQkY2N0ZEMkFBQTEzRjA3RDU1M0I2NTU1QzFBNworOjEwMkFCMDAwOUY4NzNBREYzMjEyREU3NTJEMTI4QzREOEZCOEZGQjIzMAorOjEwMkFDMDAwQzRFRTZCQkM1RjBCOUMwNzZCODU3RkFBMTZGQjkwRDU5MQorOjEwMkFEMDAwQjQwRjg5RDc2MTNCRjczNzFBRUYxRkQ4QkRFNDA4ODVEQgorOjEwMkFFMDAwRUY3NTRERDE3RUU4NDFDMUYzMEQ1NDk3QjJGQURCNkIxRgorOjEwMkFGMDAwMjRCRDZFRDgxMTMzNEVGMEZDQzFFRkUxQjkzNTQ5Rjg3MQorOjEwMkIwMDAwRjMxQ0M4MjE5RTVGOUVDQkUzQzlFNTEzRjE5NjNDNUNBNAorOjEwMkIxMDAwRDdFNTYzQjIxQkUwM0JGOUNFRTJFRjcxOTEyRjBDODc1MgorOjEwMkIyMDAwNzQyQzlFNjlFMzA2M0FGRUNDRTI4REVGRjhCMDkxRjI4OAorOjEwMkIzMDAwREIwNUMxMkY5ODNFMkE4MjA3RTYxM0RFNzc4MkI3ODYyRgorOjEwMkI0MDAwRjBCQjMzNjhCMTkzRkQ1N0Y0NzE3RjUwMUUzNEE5QjRDNAorOjEwMkI1MDAwMEY3RTI3MDRCNjkyOUUwN0JCNUVEREVBMjRERUZDMUJENworOjEwMkI2MDAwRTcwRDA4N0ZCNzQxRTBCQTQxRTBCQTAxMUQ3RTEyQkExNQorOjEwMkI3MDAwRDhBQUJDMDMyRjYxQkEwRkU1QzBGRDUwNzk0MEY4QTE3NworOjEwMkI4MDAwOUREMTM4NjNFNEI5OEZGNDU1MTczNEMxRDM3OEZGMEU2MworOjEwMkI5MDAwRTE4RkVFNjhFMUZFMjgzNjRFRDY4OTdEODBDMTcxQjk5RAorOjEwMkJBMDAwOEJEOTdFMkJENkJCOTRDN0Q1QjQ0NEUzNUYyN0Y2MDVGQgorOjEwMkJCMDAwRUE2MkUyRjBDRDQ5N0NERkVFRkJFQUZGNTgzRENEOERDNQorOjEwMkJDMDAwRDE1M0M1MTBFNzRGMzlDNTNENUM3Rjc3Njg0QjFFRUQ4QgorOjEwMkJEMDAwREI2OTc4QzVFQUE5NUJDOTRDMUNBRDlFRDVEQUY3NDUxRgorOjEwMkJFMDAwREVBRkY1MTcyMzcxMjlERjBDRDg5QkFDOTE3NUZDQUJEOAorOjEwMkJGMDAwNDkzQ0ZFNTRDRDkyRkRBNEU3NkJGNUNFQzQ0MzA1OEE1MworOjEwMkMwMDAwMkU1Q0VGNjA5REIzMzI2OTBDQUY3QkE2RTFENDQ3MjcwMQorOjEwMkMxMDAwQzhFMDcyODVFQjlEQTc1MjVFQTgyOEE0N0NBNTg1RkIyMQorOjEwMkMyMDAwOTE4MTEyOUMyRjkxRjI3OTYwRkVDQkQ3NjI1MkE5NEUwRQorOjEwMkMzMDAwRjEyMTdGNTg5RDQzQkNDMUI2MzIyOERENEVCQ0MxRkE5QworOjEwMkM0MDAwNjExRENEQkY4NEI2OEUxMTg3MjUxRDNDRUY1OTMyRkYyMworOjEwMkM1MDAwMEJDNkI3NjMxM0Y5N0E4N0Y1Q0FEOEQxRUEwOUFEOEVFNgorOjEwMkM2MDAwQThGQjhBRTdBOURBRjUzQUI0N0IxQTVGMTc5NDU4NUQ5NgorOjEwMkM3MDAwREM3NkYwRUJCNDc0RjQ5RjgzOUQ1N0QyRDY2MEZCQTI1MAorOjEwMkM4MDAwNThCRjk2QTcwRTYxOUU5QTIxRjIxNENBOUZENzczOTVEQQorOjEwMkM5MDAwQzEwNjRDODcxRjQzMUVBRTE3NzEwRUE0QURDQzRFRUE4MQorOjEwMkNBMDAwMjhEOTI1QkVCNTRCN0MxRjY3M0Y1RTk4ODlGRUY3ODMwOAorOjEwMkNCMDAwNzg5NkM3MEM5Q0UxRTc0M0Y0RkMxMzk4NDcwREFDMERFNAorOjEwMkNDMDAwMUM3NkUyRjhDQkFEMTI4QjdGRUIzMUM3QkRCNTcwQTQ5QgorOjEwMkNEMDAwQkRENzBBNUUzNkMwMTY1MTk3NkQ2NTZENzlGNkRFNEYyOQorOjEwMkNFMDAwMUUyNzdGRDQ2MjU2QzhCRjBFNzQzNDFBRDlGRUIyMUE5QQorOjEwMkNGMDAwRjE3Q0M2Qzg3Q0E4NTZGMEI3RjY3QkY2QjU1RTREMTJERgorOjEwMkQwMDAwNzE1MkYwMTJEN0MxRjJEQkMxNjNCMkREMjQzMUZDN0UxNworOjEwMkQxMDAwMzUzRTEyMjc5MUZGQjQxRDhDNjM3QTFFM0M2MTU1MjkwNAorOjEwMkQyMDAwQ0ZGRjVDRjBFRjkyRDg3NzZGMjg5MTE5MkVCQTU5QkM3QgorOjEwMkQzMDAwQ0RFRDdBMkI4M0Y0NEE3QUYwRDIzRTRBRDc1QjUzM0NFRQorOjEwMkQ0MDAwNkM5RjRGNjVGNjU0QkQ1QkE2QzNCRUIwRkMwMTBCREJBOAorOjEwMkQ1MDAwMEJENUZBMUFCRTNFODEyRkNBMzVEOUU4MEFDQkQ1QUVCQgorOjEwMkQ2MDAwRUZCM0I5NDdCMTFCNDkzQUM4RjRBNjkzQTJFQjVDREZCNQorOjEwMkQ3MDAwN0VCOTUyOERCMDI3NUNDRjZBRjI2RkZCMDUzRjQwM0ZCMgorOjEwMkQ4MDAwOTQ0QzdFQjkzMzQ5NjFGMjM1MDRCOTlFNzU5REJDQzUzQQorOjEwMkQ5MDAwRjcyRkU3RkIzNjA2RjZGRTExRjdDQkZDMzU3NEZGNzIxMgorOjEwMkRBMDAwQkEwNTE4NEZCRUYyNTc1MEZGOTEwQzk5RjlBOTQ3M0U0QQorOjEwMkRCMDAwQThDQTgyODhGNzgzQzRFQjcxOUY2MTI4OTlENUMzMjc3RAorOjEwMkRDMDAwNzQ0QzNFREY4OUUxRTQ4OTU2RjI4M0NERjNFRDc5RTQ3QQorOjEwMkREMDAwREZCODdGMzg5MjYxRDk0OEZDRjZEMzdCQzc4NkU3NTlDNAorOjEwMkRFMDAwOThDNEUzM0NEMDdBNTMyODlCNzk5MUNGMkJENkJCMDU2RQorOjEwMkRGMDAwOTYzMjFDQjYwODlFNzU4OTdDMTRFQkE2MzM2NDhGQjE5RAorOjEwMkUwMDAwNzVEM0Y1RjJERDg4RkE4RDNEN0Y3OUFFNzJGMjQ3Qzg1MQorOjEwMkUxMDAwODNDMjYzN0EzRkQ1RUJGQkNFNzIzRkQxRDBCOUUxNzc2NQorOjEwMkUyMDAwNTQwN0ZCQ0U5QjgwRkNDNDIzNUQxQkIyMjgwRTgzRDdDNgorOjEwMkUzMDAwM0I5NUYyQkJDQjVEMEY0RTY1RkI5N0QyMTYyNjk3OUY1NQorOjEwMkU0MDAwRTQ0QkExQkNFOTc0MzJFNTQzQjU5REE3OTM1OTVDNkY4RgorOjEwMkU1MDAwOUZGRTAyRTU0OTk4MTdERDQxRDczMTVGNjFGQzJCRUNGRAorOjEwMkU2MDAwMjk2NkZDREI3N0JDMzgyOTkzMDQwN0I3ODVFNkFEM0RCRQorOjEwMkU3MDAwQTZBRjI0N0M2QThGMTVCRjU3NDFGOTRCNEYxOUNCOTNFRQorOjEwMkU4MDAwQjRCQ0E4ODhFQTcxQ0E5MzhFNEQ4Q0NBOTNGQTA1N0VBOQorOjEwMkU5MDAwODMwN0UyRDhGRTg3MDQxOTlDM0YzMDMxOEEzRjM1NkRBNQorOjEwMkVBMDAwRUZCMDdDQTJBNjQzRjY0NEYyRThEQTczMkUzREUzOEQ0MAorOjEwMkVCMDAwQzFBNUIwRjkxQTAyOTI4N0YxNjMyRjZGNkIzQUY2QjE5MAorOjEwMkVDMDAwRjU1NTFCMDI0Q0RGMEQyRDA2N0VCRjk1QjcwMDRERUM2RQorOjEwMkVEMDAwNzkzRjM4RkQ4NEM3N0I3NDA5RjU1MDZFNTQyN0QwRkVDNgorOjEwMkVFMDAwRkFCQkU5QkNCRTg4RDVDNzc2MTdERjRGNzhGNzlDRjdFOQorOjEwMkVGMDAwNjZFMkNCQkI3M0JENTlGNjUxRTI4NjFGQ0E3OEREMkQ2MQorOjEwMkYwMDAwMDlCQ0RCMEMyQ0FGOEMxREI3Q0RDNUY3N0I2QzQ5MTAxMQorOjEwMkYxMDAwNzVERUE4QjVGNTJFQ0U5RjcyMjNERkE3OEFCRDdGQUJFNQorOjEwMkYyMDAwOEJEN0NERjhFRjE5MURGMkUyNjQ4NUMxRkVCNEE4Mjc1NgorOjEwMkYzMDAwQzZBMUJGQkQ0QkY4REI2NTc3MUE1OERFNzE1MjlDMzNEMgorOjEwMkY0MDAwRERBNUY5REQxMjFFQkZCNUZERkUyNTNCRTE0OTJDRkZENQorOjEwMkY1MDAwRTE0QkM4NjNFNzYwNEIzQ0QxN0VFRjZFOTE1RjJENUIyOAorOjEwMkY2MDAwMTQ3MzVERTQ1Mzc3N0Y0RjNFMzVDMzI1RkNFMTY0OThDRAorOjEwMkY3MDAwQ0NFQjA2QUI4NUY2NDVCRkVDMzZEODY1MjZCNzNBQjE0MworOjEwMkY4MDAwMzI3RkU0M0EzNTdGNzM0NDlDMEY3NUEzMUZBNEI2MjFBQQorOjEwMkY5MDAwRTc0M0I2NEZGNUVFODE3M0JGNzEzMDNGMUEwNzE5N0NENgorOjEwMkZBMDAwREY5MUVERDdENzVFNjdCRkJFRTE5QTlERkUzMDhBNzc4RAorOjEwMkZCMDAwOUE5RUZBMjlDRkNGMUJBOUE3QTUwMkVGNUFGMzI1MjM4MgorOjEwMkZDMDAwM0JCNzg0NEREQjc1NzJGODlDRDI2NEYwN0E1MjcxMUQ2OAorOjEwMkZEMDAwODY4RUI5MjEzQUJGNkNDODMxQjE3Q0E5RkY3NjQ5MjVFQworOjEwMkZFMDAwN0Y4RjcyQTY5OTIyRkM3REZGMzg5RTdGM0RCMjVDNjI4NgorOjEwMkZGMDAwRkJDMjA3NzIzRTY0NzFCQzM2RDQ2QjI0NUU0RDZFNUJCRgorOjEwMzAwMDAwRjMyNEIzNUYzRjlDQTI3QTQ5RDNFNzYyMzM4RjlGRDcwMworOjEwMzAxMDAwRjRBOEFEOTc2RTJBQjQzRUE3OUZGQjY1MTc2QjY5M0M3OQorOjEwMzAyMDAwQzVDQkJCNDQ3QzVDNUMxMkFEQkYyQ0U4NUQ0MEZCMjM5MAorOjEwMzAzMDAwRjc3ODI0OTYyRjVENEZFRjRCNTc0QzdCODdEQ0RGOEQ2NQorOjEwMzA0MDAwRUFGRjlGNUNERTg3NUQ2NEVGQkRDM0NCNjk3RkY3REQ4MAorOjEwMzA1MDAwOUM0RkQzMjhCRUQ2NUQ4N0NGN0U4MUFGQ0ZDMkNGQzU3MAorOjEwMzA2MDAwN0MxNjdFMUVFNkNFNTIxQUZCMTAxRkJEQzNCQkQ5NDU4RgorOjEwMzA3MDAwRkI0RkJBQkZEOEE2MDBDREQzRjdBQjdBODlGNDAzMENDNworOjEwMzA4MDAwRkZFQkQ5RDEzNjMxRUYzNjk3OUREQjhCOEI5RjBGQzU4OAorOjEwMzA5MDAwNTE5RkVDRDlBMDRFMjAzRjAxNzkzNzc2Q0VEN0IwRkZCMworOjEwMzBBMDAwNjgwMUU5NjlFMEMwQjEwMjYzODQzRTJGRDVBMzNGQTA2NworOjEwMzBCMDAwRjhEMjc5Mjg1OUIxNDZGMjREMjdGOEE2NjdBRDI0MkRFQworOjEwMzBDMDAwMTU3MTMzOUE3Rjk3ODg3RkE0RkZCRDg3RUVBMkJBQjBBRgorOjEwMzBEMDAwQkY2RDk5NEI1MjIyRTI2QUZCNDlEQkE0ODg3OUZCODNERQorOjEwMzBFMDAwMzIxQjhGRjVEOEU0QkIxMzIyRTU3QzkyQzlEOTFGRTBDRgorOjEwMzBGMDAwRjMwMUY0NEQ1RTk2MUY3OUJGOTE5RjFCOTlGQjE4OEZDQQorOjEwMzEwMDAwOUZDQURFQzRDRUREMzUxRUVCODFGM0I4QUU2MzA5QjBENQorOjEwMzExMDAwMzgyNUQ2MUQzMEUyMEZBQTMzQkE0QzJBOUQ1M0QwN0VGMworOjEwMzEyMDAwQkIyM0MyNEU4RTBBOUM2NzYyNzE0MEZDOUMwNTdFOTk0RgorOjEwMzEzMDAwRTY5RDg5MzNERTRCN0QzRDg0RTg0QzZFMzY4NDY0N0VBQgorOjEwMzE0MDAwREUzRDAxODhENzMzMDRBRjY3RUE0MzA3QTQwMjM2OEUxOQorOjEwMzE1MDAwOUQ0Qjk1NDIyRjFCNzcyQjBDQjFENjAzNzYzREI1NjU2MQorOjEwMzE2MDAwRTA2NjZEODkzOTc0MDdCOTkzQkM0MDgwN0Q5NzE0NEEzNQorOjEwMzE3MDAwRDYzQjJFOThEOTUxMjk4Q0E2QkZGMEZBRjU3MDQxRTNDMQorOjEwMzE4MDAwMjkwRUM2QTQ4N0VERTNDNzhFMUIxNjc2RUZBNkRBODI1QQorOjEwMzE5MDAwRjREQzBGNkMxRkVFMTZFODkzRTkyNUIzRjVCMDg4QkU5QQorOjEwMzFBMDAwMjdCQjQ1MEZFNjc4OTQ3N0VGNjExREIzRTdBRTNFNDU0OAorOjEwMzFCMDAwMjU3RkU2NEUxMkNGN0Q4NkNGNjE3RkE2ODdEQjJEODVFQQorOjEwMzFDMDAwMjBGQTZFNDU1QjZGMkMwRUE1MzgxRkVEMEJDRUQ0NjMzNQorOjEwMzFEMDAwRTVDQjcwMENCMUY3REQ0NjgyRTNCQUU3ODJBMkE3RkUyOQorOjEwMzFFMDAwMUY1REU5NjIzRjg1RDc2OUYzNDQ5REE2MzNGQjE5MUUzNQorOjEwMzFGMDAwN0YxMkYxOTFDRTczNkMzODRGNjk5MzA0NjdFOTdDMjY5NgorOjEwMzIwMDAwOTNBRjU3OUJCRjE0QjNDMUM0NDIxQUNGRTMxQjZEODU2NAorOjEwMzIxMDAwOUY3NUYyNzMxRTFCM0I5RjlCNkYyN0JDQTQ1MEIyRUVBMQorOjEwMzIyMDAwQUFFNUM2NzExRDRDMDYyNkI3RURGRUExODFDNzhCQzM2QQorOjEwMzIzMDAwRTc1REVFRTBEMUIzRjQ1RDhFRTRGMUIwRUY3QURDNjZFOQorOjEwMzI0MDAwNkI4OEYyNzM2NEM3QTVDOEJDRkJBQTZCRUQ1RkM5REVDRgorOjEwMzI1MDAwMjVDNUNFRjAwMjJGMjg5NDdGOEMwRDdGRUYwMjU3OTM2NworOjEwMzI2MDAwQzJERkQzMTA4QzE3OTNDM0U3RkJEQUY3MzVCQkQ1QTVDNAorOjEwMzI3MDAwOEEwRUY1QjJDMjY1NzY5MzVFMEFDRDY5NDU1NDBGMzY2MworOjEwMzI4MDAwREJCRDdGNzVCMUVGNkM1QTI2QjFDOUY0RUFGNENBODQ4QworOjEwMzI5MDAwMzBERjJERTAyOTIxQkNCNTczN0Q0OUU4RUY3QUU3RjZGMAorOjEwMzJBMDAwNjRBQkM0NzMwQkJBN0RGQTJFRTgxOUI0MTdCMzczQjRDOAorOjEwMzJCMDAwRUY4RkY4NzkzRTVBQTE0MkRGMURDMTEzRjMxNEZBMkVBNQorOjEwMzJDMDAwNjA5QkMzRUM3RTVBQTIxNDFGRDc2NzA5QUZBRkQxQ0M2NQorOjEwMzJEMDAwQkYyNzY4MzRGM0VGMDI2MEVCNzRCNjdGRjY5MDM4OEY0NworOjEwMzJFMDAwNjhCNEVBQjJBOURFNkE4NDc4Mzc5NUY0OUFCQzBGMjVFRgorOjEwMzJGMDAwNzAzRTNFRjRERjE2NzYzRTFBMkJGN0Q3RjFERTlDMzE5NgorOjEwMzMwMDAwRDNDM0YyM0YyQUJCQ0Y2MkVFMTM4NUU3MUMwRDRGNUQ5RQorOjEwMzMxMDAwMThDRjE1NkE0NjYzOUZDMkYwOUI0NkNGNEYzM0E5MzczQgorOjEwMzMyMDAwRDFCRUM4MkExM0ZGN0U0OUMzMEQxNUNBNDg2RDE3RkFDRQorOjEwMzMzMDAwRDBGMEIzOTNCRTY5MUQxRUQ0QjdDNjk3OEMzMDdFQ0YzNAorOjEwMzM0MDAwQzQ3M0RDMENGNEU1NDQyNjdCNTYyMTdGMUQ4QkNCRkYzOAorOjEwMzM1MDAwMDFBRjZCN0Y4RUYwMjkwMDAwMDAwMDAwMDAwMDAwMDAyQworOjEwMzM2MDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJGQkNBQ0ZDMEYwQTNCOQorOjEwMzM3MDAwMUU4MTQzRDFGOEU4Mzg5RDBGNTM0Qzk0MTE4MkQ3QjM4NgorOjEwMzM4MDAwRTBENzhCMEQ1QjMxMjJEOEZFREMwQzBDQ0E5QzBDMENGOAorOjEwMzM5MDAwMkE0MERDMDdDNEZENDBGQzFFODgwREI4MTgxODBDODFCQgorOjEwMzNBMDAwMzgwREM4NEUwNzYyN0IyMDc2RTM4NkU4Njk2NjY3NjA2MQorOjEwMzNCMDAwRTgwNkUyQzk0MDNDOUI5RDc0RkJDRDI1MTkxOENFQ0E5NgorOjEwMzNDMDAwMjJGOEIyNzIwQzBDNTEwQUE0OUIzMzhBODcyNjc2MzNGQQorOjEwMzNEMDAwNDJFNUM3NkJBM0YyQkI3NDE5MTg0RTIzQTk0OUQwMjY0NgorOjEwMzNFMDAwQ0Q3QzQ2NjMwNjA2MjY2M0RDRjI3MUU2QThGQzUwNEJGMgorOjEwMzNGMDAwNTRGRTVEMzM1NEZFNDU3NzA4MEQwMEFFQTMyNDgzQjgxOAorOjEwMzQwMDAwMDMwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwNworOjEwMzQxMDAwMDAwQkM1N0QwRDdDNTRDNUI1RjhEQ0JCNzdFRjZFRjZBRgorOjEwMzQyMDAwMkI5QjBGQzIwNjQyNzIxMzAyMDQwQ0I4QzQ4MEMxNEExRgorOjEwMzQzMDAwQkI4OUEwQTBDODVCNTAyQjU4NUY1RDAyMjQyMDA0ODI4QQorOjEwMzQ0MDAwNUE0OTJCRkU3MzIxMjEwNDEyNjA0MUQ0QTA4ODFCM0VFRgorOjEwMzQ1MDAwMTQyQkQ4QTBBMEI2QjU3NkY5RDA1MjlGQ0Y0NjQ1QTU3QgorOjEwMzQ2MDAwQURBNTAxMTVENDAyNERCNUM4RjYzRDdERkNFNzlDOTk4QworOjEwMzQ3MDAwOUJCREY3NjYzN0UwRUJGQkJGN0ZGQUFCQzNEQzk5M0I0NAorOjEwMzQ4MDAwNzdFNjdDOUYzMzY3NjY2NTMxODU2NEU2MTE3MjExRkVDRAorOjEwMzQ5MDAwQkU0N0M4MDQwQjIxNjQ0Q0JDMjQ0MTU1MjA2MzA5Rjk4NAorOjEwMzRBMDAwOTE5REUwOUZENkNGNUMzNkQ2MTMxMkI1MTExMjlCNEI3RgorOjEwMzRCMDAwNDhBNzhCNzY5NDZBRURBNDk4OTZCN0RFMjg5MjJDNDJBMgorOjEwMzRDMDAwNTJFMTdEODU5MDI2QTFGNkM4RTA1MjQyRDQ0MTIyRDkyRQorOjEwMzREMDAwNDkxRkFEQ0E5OTlFMUE3MjI1MUY3NzM3MUZGN0I5N0EwRgorOjEwMzRFMDAwM0I5NjFERjU1RTJDOUZBRkY3NjFCOUFGNUUyMUQxNjFCMAorOjEwMzRGMDAwODRCQzU4NUY4NEU1Q0JGNTdFN0NGRThCRkEzMjJDNUY3MgorOjEwMzUwMDAwQTkwRjYwRjk2QUZEMjQyQ0EzRjU0MTJDMEZENkNGQzA3QQorOjEwMzUxMDAwRjI3MDdEMDhERjdCQkQ3RTFFOTY0N0VBNkJGMUY5MUJEQQorOjEwMzUyMDAwRjU3NTU4QkU1OUFGRTJGM0I3RUE5QkIxRUNBQzBGNjM0NworOjEwMzUzMDAwRjk0RTdEMUI5NjQ3RUIyM0Q4RUZGREZBNUQ1ODFFQUI4NQorOjEwMzU0MDAwRUZDMEU3N0ZBODdGMTlDQjBGRUJBMzU4REU0RUQyMDg2MAorOjEwMzU1MDAwRTk0N0M4NkRCNzlEQjdDRkEyRUIxREY2QzQ3REVGNEMxMAorOjEwMzU2MDAwQ0UyNDY0RkQxOEQxMEZFMDFBRjZDNEM3QkU1MDcxN0M5QQorOjEwMzU3MDAwRERFQkJGQjFDQ0U4NDgwMDk3RUYxMzAxQzc1OUVGMjY0OAorOjEwMzU4MDAwRDhCRUZFQzBFRjg5MzI5MjkwNzU2M0JBN0MyQUFENEZFNworOjEwMzU5MDAwRTZERjE5QkVGM0E4N0Q1NjcxQkM5Rjc5OUM0Rjg4ODVFNAorOjEwMzVBMDAwOEQ2M0E1RURCNERGRDBDREFDQkZENjNFMTlCRTMzMjZCQQorOjEwMzVCMDAwREVGRTU0REIzQkY2RDkyRTdEM0I3QkZGRTkyREVGRDhCOQorOjEwMzVDMDAwMDE3RjZCNjMxMjg5MjJERTU1NDI2OEU5NTBCQURCRkE0QgorOjEwMzVEMDAwNTEzQ0E3MUNCMzExNUIzRUM1QkZEMjQxQkFFODM4RUJFMgorOjEwMzVFMDAwQzYzRDEyMTU0QjYxRERCNDlCMDJFQjdDOTcwODE0MEVBRgorOjEwMzVGMDAwQUE5QjIwM0QyODMwQzZENUYxRUY1QzRENDQ5Q0M3QjA1NgorOjEwMzYwMDAwMjc4RUIyRUZEQzdBMUVDQjU3RkYyMTEzNDJERjVCNzdBOAorOjEwMzYxMDAwOUIxMDcxRDJGMUQ3OERGRkMyMTcwMDdBNTM5RkIxMDA3MgorOjEwMzYyMDAwQkQyMUI5MkFGMDlGMkU1RjkwOEVCRDdFRkNGQjNFOTU5QQorOjEwMzYzMDAwQzI2OUVEMzdFRkNFOTgwREY0Mzc5QUY4RTE3QjZCMEY0NgorOjEwMzY0MDAwRkM5QzI4RDAzRUIyMUJFMUQ3QzBEN0JENzZFNkFDM0M4RgorOjEwMzY1MDAwNkY3MTcyQkFBNDk0NDRDNDMyQkE1QzE3MDk0NDEyQzBBMAorOjEwMzY2MDAwRjc1RjAxMDgxNDNFMTY2RjA0RDdFNEEwRkQxMkUxRTFGNAorOjEwMzY3MDAwNUY4OThDRkRENkJBODNFRjAxNUNENERCQUNGRTlENzQxMAorOjEwMzY4MDAwREVEN0Y5QTNFNDk0MkIzRTZGQTg3RjQ0RUJBRUJGNDc4RgorOjEwMzY5MDAwODlDNTBERjNGRUNDNjdBMUVCNzc5NkM5NTdBNUQwRDlBNAorOjEwMzZBMDAwQjhCQUJCOEZDMUZCQUU2QkFCMDJCMEY2NzVBM0JCN0NFNworOjEwMzZCMDAwNTVCNEJGQkRBODEzRDc0QkZDQzQzRjg0OEVFQjI4NTIzMgorOjEwMzZDMDAwQzlFQzYyODA4MzA1RjE2QTlFQ0Y2QzgwNzczRkMwRDNERQorOjEwMzZEMDAwNTczRUMwODk0Njg3RUZEREZBQUVCRDUyRDdGRjY5OERGMAorOjEwMzZFMDAwM0UwNDQ2NUZBNDM1NkE5RkU2OEVCNzNGQTFCNUE3MzA3QQorOjEwMzZGMDAwRkEyMTc2NjNGQjY2MTMxRDkzOUMyNEVENTYwQTY4QzQ3OQorOjEwMzcwMDAwOTcxOEQ5MjkyMERDRUREMzQ3RjY5RTc3NkJGNEI3QzgxQworOjEwMzcxMDAwMDcyRTdGRDQxRTRBQjAyRUNBMjc3NjkwM0JBOUE1QTJCOQorOjEwMzcyMDAwMUZFMEI1NkUzQ0U1OTdFMkY4M0EyRkM1NzdDRDFDMkUyOQorOjEwMzczMDAwNkI0QkE3QkI2MUZDNEJDOUFEOTExRDIyODkxNjcxOTlEQQorOjEwMzc0MDAwNDlGRjdGRTVDQjBFM0FGMzc4N0Q3NDM0REQ1MEJGRUE1NAorOjEwMzc1MDAwQzgwMDQzRkYzMTlEMDU4NkY2QUI4RjhEMzBCNDhGRUJFQgorOjEwMzc2MDAwMkEzMUQ0QkZGM0U5MzU4NkZFRTNCQjJCMENGNUVGQzU1OAorOjEwMzc3MDAwNkUzNEY0MkYyN0I3MThFQUQ3RDk3RjYwRTgzRkQxM0JFMgorOjEwMzc4MDAwREJEMDdFODM2RjgxQTE3REIyNzJBRkExN0U1M0QxMDM2NgorOjEwMzc5MDAwODZGRTM3RkIxQjBDRURGRjUyRDY2MjY4OUYxNjc4Qzg3OQorOjEwMzdBMDAwNTBCRjY1RDJFMzg2RkVCNzA1QjcxQkRBNkY5RkYxQUM1OQorOjEwMzdCMDAwQTE3RDY2RTgwNTQzQkRDNjExM0EwRUY4RjlDMUJDNUZBQworOjEwMzdDMDAwMUFERUZCRDdEQTQzODZGQTdCODQ0QzRBODQ1RjIyMzBDOAorOjEwMzdEMDAwMzk0MzI5Qzg3QkVBMEFERTlGOEEzODJGRDAxQ0QwNzE3MgorOjEwMzdFMDAwM0Y0NkE3NDVFRDQ5RTQyNDZGN0Y2NkM3M0JGNkI5MDYxRgorOjEwMzdGMDAwMzk2OTY1NzQ5Q0NEREE3NzQ1REU0OUZDRkUyMENFMjcxOQorOjEwMzgwMDAwQTREMzNFRERBRDZGNjdGM0JBRTIxRjU0QkU0MkJCQTQ0MgorOjEwMzgxMDAwN0UyQkY5RUFGNkZBQjFCRjI2NTcyOTdEMTM3MjBEODU4MgorOjEwMzgyMDAwQUYzQTUwNTVGMTdCNzQzQzJBMkYyRDZDQzlBNDhFMzBEMQorOjEwMzgzMDAwMzk0NUM4QkRGODVDRDNGQjI0ODc0NDJENzREQzA2Nzc3QQorOjEwMzg0MDAwNEVGQjFBODAwOTFENUJDQTg0N0FGMTM2QTg4QjRBODAyOAorOjEwMzg1MDAwNzQyNTgwQUJDNTJCMUJGMDY0ODYyRjcxQTU1MzYyRUVENworOjEwMzg2MDAwNEJDRUFBMDgzRjc1MjIyOTkyRTBGQjgyQzNCRjlDQUVEMworOjEwMzg3MDAwNTcyMkExMDEwMjdEN0U0MTBDRjk2MEYyNEIyREVBNkZDNworOjEwMzg4MDAwNDJGOUYxRkVDQkM3RDM3RjQyRkYxMzQyNjQwNUY2NTdERQorOjEwMzg5MDAwMTA4RTBEMjM0OTAwRjQ4NjlBMkQ0Nzc2RTYyMzNDNkQ2MQorOjEwMzhBMDAwMjA0RkI0RjdFODAzQTU4QkNENTdCRDM4RDg1MDY3RjM0OAorOjEwMzhCMDAwQkQ2NEZERUI2MUM2QkEzNkVFNEY4Q0YwQTQ3MDg2RkE5QgorOjEwMzhDMDAwNURCQ0QyNkJERDdFMzk0RUI3MTZFOEM3RUE4QTI4OTAxOAorOjEwMzhEMDAwOEIyODA3OERFRERBNzcyRUE0Nzg0NjkxNTQ4QTQ3M0JFMgorOjEwMzhFMDAwMkI5NzNBM0NEQkEwQkM5MDkyMUIyMTFFNDI4QUM1NTAwQworOjEwMzhGMDAwMDVDMDREQUQ2MEYwNTE4RjNCMjMwRDM4NUVFREQ1QzE1NQorOjEwMzkwMDAwOTEwMERGQzRGNjAyMjEyQjE4N0Y3QzM4NTlENEFGMjNGNQorOjEwMzkxMDAwMTlERTFBQzA2RTFCQTZBMzgzMUMzRkNBNzFCQTZBRDRGMworOjEwMzkyMDAwNkZFNkZFQjcwQjMyMUJERjQ1NTE0NUM3QjcxMTQ2NjM0MworOjEwMzkzMDAwQTk5NkQwRURDMjE4NTg2RDkwNDgzODRGM0YwOTIyQkU2NQorOjEwMzk0MDAwMjYxMUIwNEJFRDFBM0NDMzczQjFFRUUyNzZFNjAxRjdGNworOjEwMzk1MDAwRDg2MzIxOEFFN0I1MDFEOTBGNjM1NTBBMEFDNzgzREYwNworOjEwMzk2MDAwMDc3QUMwNTYyNjkyMzVCNEI2NTY3OUM3MEVGQ0QxOUM1QworOjEwMzk3MDAwMkY2NzgzNUNCNzQ5QjVDNDRCRUJCNjQyQ0EwNzA5RjQ1RAorOjEwMzk4MDAwQzhFMjFFMzlGMTIwQjkxQ0JCRDg4Q0E3MjJGQTNBOUI5OQorOjEwMzk5MDAwMDc0MTM4NkFGMzBGMEZFQUI0MTcwMDVEOEVBNzc2MzEzRQorOjEwMzlBMDAwOURFQUZBNkJGQkQ2MkYyQjM5N0M1QkMwMkVBNkU1M0EzRAorOjEwMzlCMDAwNjU3QTJBNDFCRTI1MzM4MUJFOUJGM0IzNDRFNDUzMEU5RQorOjEwMzlDMDAwQTcxRUI4RTRCRjZGMDczRTVEQ0RERjVGRUI3RjA3RUQ1RAorOjEwMzlEMDAwRjRENTlBMUUzN0MxQjE3OUY0NDk4NENGMkM4MUU5RTMzQgorOjEwMzlFMDAwOTY5MThFMTk5MTA0NzA5OTI1NzhCMEJEMTk3ODJBMTM5MworOjEwMzlGMDAwRUQyQkM2NUYyNjdBQTEyREJFNEFEQTZFNTdCQzI1NkIyOQorOjEwM0EwMDAwRThGODEzNDY0QTMzODEyRURDNjU0NEIxMjFGRjA2NUM5OQorOjEwM0ExMDAwRDlGNEZCMEVERTVCNTI0NDgzRkM3MDY3MzJCQUI1N0Y4QgorOjEwM0EyMDAwMjg0NDE0REFERkU1NjNERkIzQjk0ODI0ODBFRjJGMzE4RgorOjEwM0EzMDAwRTBDNTUxMTY5QTQyNDY1MTNCRTkxRjE2N0M4RkNFOTE0NAorOjEwM0E0MDAwRDkxMTQ3MjcyMzNGNUFCRDZDOURBNDg4RTFDOTRCRkY3QworOjEwM0E1MDAwNzdCMTgwOEVBN0M4MDZCREIxQkM1Q0Y2NDdFOTc3OTYwMgorOjEwM0E2MDAwN0E1QzQ4NEY1NjNENUVFOTc3OURERkJDMTA4NEYxNTc4NAorOjEwM0E3MDAwRTVEQ0UzNTg0RUM3QkY1MERFQjQwQUQ4RDJGMkUxRTQyOQorOjEwM0E4MDAwQ0Y4MEVGMkNFNkZFODNBNkZGNkU3MDAyM0VEMDRBNjcyMQorOjEwM0E5MDAwOTc4NzQ0MzM2MDgwM0JGQkE0MDNDRjg3RUQ2RjFDRDYzMAorOjEwM0FBMDAwQ0RGMzE1QzE5RDg5RjJGNTZBNzIzNUNBODU0QkJDN0Y4RAorOjEwM0FCMDAwQTEzRUYyQzZFMTIxMDgwRkYxNzJFODc5QTU4OUFGOUIxQQorOjEwM0FDMDAwRjIzNUJEQTVGQUE2RTlFQ0IyRjMwMkQzNkI0NDJENDc1QgorOjEwM0FEMDAwMzg0QjlDOUY5QkM2OTM2RUIwNUJEN0U1Q0JDQTBBREE4NgorOjEwM0FFMDAwNDUyQTkzQTM0MDNBRjBENzREQkYwRkI2MTkwMTc5QURERgorOjEwM0FGMDAwMzQ3NUIyRTczRjMyQzhDREQ1RkRBN0ZBQTM3REMwNERERQorOjEwM0IwMDAwMkEzNEU5OUI0QkFDQkYwRUUwQTdFQkZGMzFDMENGMTlDNQorOjEwM0IxMDAwODc5RjhEMDQ1M0EzNDAyRkUxNDkwNjNGNzY1NUY5RkQ1OQorOjEwM0IyMDAwNEE5NEZFNzNENTgwNDcwMjI3ODgwRThFREZBMzdDQThCNworOjEwM0IzMDAwRTMwRjVCNEU4NEU4QkZBRkM5QzU1QkM0NDAzN0M4NjFDMworOjEwM0I0MDAwOEJFQzQ3Mzk0NTBBNjRGNDQ3Q0NGMzJCMTI5OUJDODlCNgorOjEwM0I1MDAwQzNEOTJFMTExRDdGOTAyOTExODQzQkZEMEJEQUIzMzg5OAorOjEwM0I2MDAwRkNFODVGOEFFRkY1N0YwMEZDQTg4RThFM0E0N0UxRjMxMAorOjEwM0I3MDAwNDZBOTg0Q0UyNzkzQThDRTJCRTlGQjEyOTFBMDNFNDhGQworOjEwM0I4MDAwQ0M0N0JFQTVFRDEzRTQ3NEUwREZFQkZEMjAwNzlCQjg0NgorOjEwM0I5MDAwREY0N0JDRUQzRUJENUQzRTQ4NjQ3ODhEQjc0NzdDQjdERQorOjEwM0JBMDAwMTlEQTk5QkREM0E0RDlGNURFRUQwNkJBRTg3OTNGOERDRgorOjEwM0JCMDAwMjRGNDNGRkE4OUNDQ0UxRTI0N0EzOUZENkM0N0ZGNkQ4MAorOjEwM0JDMDAwNzVFNjk0MThBMDIxMjVGQjdBN0YyNUYwQUI5NzIwMUM4MQorOjEwM0JEMDAwMzQzREExRTkwNUFBMkYwNjg5RkRFMkUzQzk4NTQxMjIwQQorOjEwM0JFMDAwNjBCQjUxRkYyNjk1RDcyNkJEOUI1MjY0OTQwMzQ0NkY1QQorOjEwM0JGMDAwQ0YxNEMwN0Y3M0JDNDgyRkM0QUNFRjc5MTlCQ0YxQjJBRAorOjEwM0MwMDAwRjhBQTk3QkUyNDg5RkRDNTY5MjI5M0MzNDRDREM0RjVBMworOjEwM0MxMDAwNkI3QzQ1QjgzRDYxRDVFODgyMzA3QUY1RjBFRkNBMzA2QgorOjEwM0MyMDAwOUZDMTgwRTcwODBFRUVBNDZFMTVENEREQTQxNkVCRTc2NQorOjEwM0MzMDAwQ0I0QUEyMDAyNzlCRDRENTRDQjg3RTU0RjMxM0Y4NTEzRAorOjEwM0M0MDAwM0MwRTkzNkMxREVCQzcyN0Q2MEZFNUEyMDdGMTY5NzFGNworOjEwM0M1MDAwRDU5MjEwRDJGMTlENjgwNzBBNkE4ODVDNDQ3QjMwQ0MwQgorOjEwM0M2MDAwRjVBQURGMDc3ODVDNTU1RjQ3M0VBMjhCNzExQzlDOENFMAorOjEwM0M3MDAwRkVCOTk0MTMwODgwN0Y2RjAxMjJDOEE2RkY3Nzk1QjIyMgorOjEwM0M4MDAwNTJGMjJCN0FGQUVDQzEyMzU5OEVFMzU5Mjk1ODYwOURFMAorOjEwM0M5MDAwNTY5NzdEMTZFODAxQUJDQjNCMERDQkEyMTE3MzA1MjhERgorOjEwM0NBMDAwNTNBRkFGMTM5MUFEMTJEMzkzMzYxRUE1QUI3OTIyOENDRgorOjEwM0NCMDAwOTcxOTQyN0U5NkJDNDEyQzg5MkIxM0VENTdEQTVGMDk4OAorOjEwM0NDMDAwMjY5QzA3QTcwM0RFMkYyOURERjVEMDhEMDYwNzQ1ODY0NAorOjEwM0NEMDAwRjFDQ0Y0RTQyOEE1MUU4OTg4RDU0RTk4NkY3RjhFRUQyRgorOjEwM0NFMDAwRkU3MzlBOTYwMDg4REQyNERDM0M5NEUyQUQ3RkQ3QUM2RAorOjEwM0NGMDAwMjlBMDc3RENBMDdGRTgzQTU3MTY5NzFDMDE5MzJGRDVBRgorOjEwM0QwMDAwRUZERDcwQkQwMjcxMDAyMjAwMUU1NkMzNjBEN0MwNzg3RgorOjEwM0QxMDAwM0Y1ODVFOEVGMTBGRkEzNzgwMEE4QjE1QzE3MkU2MUY4RAorOjEwM0QyMDAwMDQ0Qzc2QUJBODQ4OUE3RDI2RjY2OUVGMDgxNzZEQkQ1RQorOjEwM0QzMDAwREY0RkI2N0UxQkQxRjExNUVBRjE3QjJFQ0ZCRUJBOTNEMQorOjEwM0Q0MDAwN0Q0RkE1RkYwMzdFNEMzM0U5RDlENDgwNTExRkI4NEQ3OAorOjEwM0Q1MDAwREY3OTBFNjA4OUYwNUVGMkJGRjIzRDJGRDk2ODU3QzA1RgorOjEwM0Q2MDAwNUUyOTE0QkQxMTRBQ0JBOUM0OUIwNjdFOTQ2MzAyRjU1QgorOjEwM0Q3MDAwRUY2OEREOUJEM0FEQzI5NDJFODU5Nzk1REM4RjI1OTQ5QgorOjEwM0Q4MDAwOUZGNUY0N0Y4OENCRDdFQ0FBNERCMzlBRThCOEU3NEIwMAorOjEwM0Q5MDAwNUQ3RUEwRTdGRTU0OUM2NkE0Rjc1RTRGNEIzRDMxRjA3QworOjEwM0RBMDAwNzM0QkYxMzZBNEVCMDZBQUYwMEFDMDNGMjgxNkQxNUU4OQorOjEwM0RCMDAwNUY1REY4QkM1N0FGQzczRUQxRTQ1MDJGRkEyMDhBMzQ3QworOjEwM0RDMDAwOTZGQjkzMTQzRTk2NDIzMTkwMzJFQTlGQTcwRkIzRkRDMworOjEwM0REMDAwNzRCOUY0RTFCQ0QzODg4RjZGOEJBRjJGQkUyNTdERkMwNworOjEwM0RFMDAwQjNERjVCOTkyQzNFQzFFNTU5NzY1NTIzRjM1Nzk0QkU1QQorOjEwM0RGMDAwRkQ4M0RFNzhERDg4Nzg3NTUwQkYyNjkxN0NCRUQwODM0OAorOjEwM0UwMDAwNEZCNTc3NjlEMDJCQzZCODgwRjU4NkVGQ0ZEOEQxMDdFQworOjEwM0UxMDAwM0NBQzMzQ0NGRTNGMUIzN0E1Q0VBMjdDMENGNkFERTQwOAorOjEwM0UyMDAwMzVGODQxQUI5NThEMkFEOEYzRTdDMTJFMDdGQjMwNUNGRQorOjEwM0UzMDAwOEVGMTYxNTJDOEUyQjUzMDgwNDhFQjI5NEEyMEMyRkNCRAorOjEwM0U0MDAwOUIwOEQxRUI0MTM5QzcxODc3QjM2NDNBOENGQTdCODY2QgorOjEwM0U1MDAwMkFFOEU3OUY1MjI3RTMzQ0VDRjBCRDRDOENFNzQ2RTBCNAorOjEwM0U2MDAwQkIxNjJGODlBNkEwRkRDOUYwMDc5RjYyRjE4MDA3MkUxRgorOjEwM0U3MDAwOEIwRTM0N0EwNTMzOThEMUFCRjFCRDU1MzkyNTI0MTExOQorOjEwM0U4MDAwRkU3QTdERUY1NkUzN0M5M0NBMjVGMzdCMkU0OTM5QTU1NAorOjEwM0U5MDAwQjM1MzkyQkYyNzkxNTMzQTdCQTc0MkRCRjdFMTc4QTI1NQorOjEwM0VBMDAwNzZERUNCNDIyQTk1MDdCRUVGOTMxMDg1NkYxMzM0NjVGQgorOjEwM0VCMDAwNDMzQzk0QTAzRTZCRjI5NTc4NTE5RkVGMTI0QzdFQkIzMQorOjEwM0VDMDAwQzJFODQ3NDlDN0ZFQTI5REU5NERBRDlFN0MzRUVDQkJEMgorOjEwM0VEMDAwRjE3RDI0MDVGRERBNjRGRDFCRUFDQjFFOTYyODcxM0FCQworOjEwM0VFMDAwRUIwRTZEOTIyODFFMUI5NzA3NjYwNEQxQkYzREIyNDlBOQorOjEwM0VGMDAwMUExMkVGNTc2M0QxRkM3NkFBM0VDN0M2RjcwNzI0NDJEMQorOjEwM0YwMDAwRkIyMURDNDQ3MkYxMkE3OEU4MjVDQTU4ODAyNkZCQjNFRAorOjEwM0YxMDAwOTM0RTZDQTc0RjM5MUU4OUQwRTNDRkQwMjFEQjYwOUQzMworOjEwM0YyMDAwMTg5RjM4ODZGRDYwQTA4QjE4NkZFQTYyNzVGQTIyRDQ1QworOjEwM0YzMDAwNUJBQzgxMDBDRTRCMEFEQkVGQTFGMDZBNDlFMTc1ODVFRAorOjEwM0Y0MDAwRDdEMzc4RERDQkVCRjlCQzRFRjUwNUQ0OUQzMkFERDM5QworOjEwM0Y1MDAwMzJDNTFBRjY2MkREQzFFQkY5QkM5RUNFRUI2OUJDNUVFMAorOjEwM0Y2MDAwQzBFQkMyNDZBQ0I3Qzg2Q0JDMzU1Mjg0OERFRkUwNzU2RgorOjEwM0Y3MDAwODVEN0QzNzlERENCRUIwNUJDNEVCNkIxRUZEQjU4REQ5MQorOjEwM0Y4MDAwNjE4REIwRjE5REJDOUVDRkVCMTlCQzlFQzZFQjgzNzlEMQorOjEwM0Y5MDAwNUREODg2RjU2NEY4NzMxNDUyRjgxQkU0NDM2N0JDOEU1MQorOjEwM0ZBMDAwNEE4NEMzQjVBN0RFNjU2QTY3RjQ5MjIxMTA2RTg3QTlCQgorOjEwM0ZCMDAwRDk2MEI3MUQ5ODc1N0YzNkM0NDMxRjNENzFCNTBGRThCMgorOjEwM0ZDMDAwQTdFMTY2OEQ5RUZDMjgzRjQ5Q0U0RDI4QzdGQTczN0YzNgorOjEwM0ZEMDAwQUVFMUNFMTUxODg3NjgwOEM5OEM4OTc4N0MyNkRFNUUyQworOjEwM0ZFMDAwNzIwNEY0RjZGOTE5QTIxRjFBREI5MkY4MkZDRjcyM0I3NAorOjEwM0ZGMDAwRkUxOTFFOTc3OTlBRUY1N0VFRTRGQjk1REJGOTdFNjU4MworOjEwNDAwMDAwM0JERkFGN0M5MkVGNTczRUMxRjcyQjFGRTdGQjk1OUI0MQorOjEwNDAxMDAwRjk3RUU1MjZEOEFGQTRGRDM2RjBGRENBRjU3Q0JGNzI2NworOjEwNDAyMDAwMkRERkFGNkM4MUZEQ0E2MTQwRUY3NTU4QUVFMkZCOTVBNAorOjEwNDAzMDAwMkJGOTdFNjUwM0RGQUY3Q0U0Q0U5MkRGMTZEMkY1OURDRgorOjEwNDA0MDAwNzc4OTY4MEYyNEMzNDdGMTZFQTNGQzFDQjFDMzI4M0ZENgorOjEwNDA1MDAwOEJCNkE0MUJFQTQzMzcwRDMwQzhGN0MyNTZFM0JFNDUwMgorOjEwNDA2MDAwNDFFMzA4NDM1RDU5NTY2MkE4RTdERTc3OEQ2MUJDOUM0OQorOjEwNDA3MDAwODVDNjdEOEIwMTczNkUzNEQ0RkIwNUE3MUJGQUE3NEY1MQorOjEwNDA4MDAwQjhDMzUwRjc1RTVCNjlBODdCNEFFRjM2RDQ1REM1RjdDRAorOjEwNDA5MDAwMThDNjczMTRGRUM0NTBCN0U3QUMzMEY0N0ZEQzUyODAwRQorOjEwNDBBMDAwRjQyNTY3QUUzMUY0OTM1QzFCMERGRDZBMUM4MUNGMkRBNgorOjEwNDBCMDAwMjBFRkE2NjQ1RTk2N0MyMzdGNTdCM0Y0RjJEMkFDMUY0OAorOjEwNDBDMDAwMkNCOTI0MTA0MDNEQzdGNDExQzY2ODIxQUUzNjg4QzUwRQorOjEwNDBEMDAwQUZFQzFGREU3MDA0RkMxNzVCMjFEMzUzRTY3ODk1NzlCMworOjEwNDBFMDAwM0NEOUY1RDQzMTk1N0VBN0RDNzNDNEQ3QTVBMzVCRTI5OAorOjEwNDBGMDAwRDNCRDQ3OTc5QTJBMzEzOUI5RTY0MTQ2REZBRDBGMjYzRAorOjEwNDEwMDAwQTY3M0Q0MDQ3NDFEQURERjI0OEUxN0JCMjU4QjQxOEY5RAorOjEwNDExMDAwNjg3RTRERUI4MzAyRjZGRjY3QzdEN0RBQ0RFM0M2QkZGMworOjEwNDEyMDAwNDc3MTNENTY2RkI3NDRGODdDQTg4RUQwRDkwQkQ2QUVGOAorOjEwNDEzMDAwQjREOTA0RjUzQ0YzOTcyRDlDREZDQjI3Rjg0RjM0NTJDQworOjEwNDE0MDAwNzhBRkY0MTJCRjhERDY1N0JBMkEwMkNDMkUxMTE1OTQyRgorOjEwNDE1MDAwMEZDQjZFNDZCRjVFRUJBRkNEQUJEMTM1OURDOTE3QTI3RAorOjEwNDE2MDAwOEI1QkEyOUM3MjE4RTIwQTJCMzNGQkI2REZFNDk4MDU0NgorOjEwNDE3MDAwRTM3Rjk2OTg0MEEyNTQyRkM5NTI3MDUyM0VFNTVGRjlGMgorOjEwNDE4MDAwQThDNUJGOUNBMDdFNEExODFGMjA2NDIzREI3N0Y2MTlDMAorOjEwNDE5MDAwRTNBNjhENzM0Q0YyOEZFNzY1NTgzNUY5OTY1OTgxQ0ZCOAorOjEwNDFBMDAwMUJCRDdEQ0ZDQjA2RjM4MkY5RjA3OTU5NjM0RTJDMkRFMAorOjEwNDFCMDAwQjExNDlDRUZCODU4MDZENkNCNjI2OTU4NUUxRDFCODhCNworOjEwNDFDMDAwRTVEODU4MzY5NjYzNjI4M0IxMkM4REU1NjM3OTU1RUM1QQorOjEwNDFEMDAwMEE3Q0FGMjQzNjFDQ0JEMUIxQUJGMEI5M0YzNjFBQ0IzOQorOjEwNDFFMDAwMkI2M0RGQzFFN0EzNjJFM0IwMUMxOUJCMEU5RjE3QzdBNworOjEwNDFGMDAwQ0FCMUJDMjI3NjEzM0UxRjExOUI4Q0U1RjBEODJERjg3NgorOjEwNDIwMDAwQkMyODM2MERDQjYxQjExRjYwMzkzNDM2MTNDQjIxQjFEOAorOjEwNDIxMDAwRDk1ODE2QzY2NjYxMzkzOEI2MDBERjJCODhDREM3MzI0QgorOjEwNDIyMDAwM0Y3NjJGM0U1NzYyNEJCMENDOEIzRDgwNjU2RUVDQzcxRQorOjEwNDIzMDAwNTgwRThBMzU2MDk5MTM1QjhFRTVDMDU4MEJCRTM3MjA0NworOjEwNDI0MDAwQjYxQUNCRUNEODQzRjhEQzE3REI4MDY1NTY2QzMzOTY5NgorOjEwNDI1MDAwNjlCMUVERDhFRThEQjU2Mzk5MUE3QjE2OUY3QjYyQ0Y1RAorOjEwNDI2MDAwNjBFOThFQkQ4MENGNURCMUJENTgzQTYzQkZDNEU3OEVCMworOjEwNDI3MDAwRDhDRkIxNEM4OTFEQzJFN0Y2RDgwMTJDMkY4NUE3NEJBQQorOjEwNDI4MDAwRDlDMTY1MUYxQkY3OUZDNzdFNjhEQzdGMkUzRDZBOTRFRQorOjEwNDI5MDAwRTMyNTZGMUFGNzlGRkQ4NzhERkJDRkEzNUUzMUVFM0ZCRAorOjEwNDJBMDAwMTdFRjMzQ0FGMTExQkI4REZCQ0Y0NTNCOEM3MjdDRTgxNQorOjEwNDJCMDAwOTYzQjhDN0E2NDkzNTE4RTE3QjRERTZERDQyMzhENDY3MQorOjEwNDJDMDAwMzk5RUJCRUMyNzQ2M0Q3MkRGMEFBMzFFNTlCOEM2RDAwMworOjEwNDJEMDAwRUU5QjYzOTRERjU5RTQzMUEzOUYzRTYxOUI1MThGNUM1OQorOjEwNDJFMDAwRkI1M0MzNzhBRUQyRTc0RDdFNEQwNEU1OEJBM0Y4MTdBMAorOjEwNDJGMDAwODZGN0VDODUwNzRENzI1OTY1RjJDOTE0NkYwNzkwQzBCNworOjEwNDMwMDAwRkVFNjUyRTJGMDgzNUY2M0M2NjczQTk3MDcxOUMwNzcwQgorOjEwNDMxMDAwQjRDQ0U0N0NENzBGRjg4RTk2RTkzNzJERjQwMTNENjREOAorOjEwNDMyMDAwNEMyRDlCMDU3NkNDODUxMzgyMDJCMTMyNjE2QUREMzA1QgorOjEwNDMzMDAwRDhFRjQ5MUY0ODU4M0M4MThDQjgwRUUyNjg0REQ5NUFENQorOjEwNDM0MDAwOURBODAyNkQ2RjFBNDQzMEJFNDBENEU1MTUwMTE3QzYxMgorOjEwNDM1MDAwOUJCMUZFNUJFOUMxMEFDODhCNjlCMkYyNzZCMjkyQjUzNQorOjEwNDM2MDAwQTdCMEZBQjFDNjM5MkJBMDNEM0RCNTIzMUIxMjk5MUU0QgorOjEwNDM3MDAwQjcyNjk2RTc1RDEyREJERjFCMjgwNTdFMjdEMUY1RkYwOAorOjEwNDM4MDAwQjVCQ0VCN0U4OENCRkRCQjNERjRBRTQ0OUYyRkI0ODcxQworOjEwNDM5MDAwRjI2MDZCRURBQzM1RjQzNEE4OEUwMjIxNzAxNEZBOEQwNgorOjEwNDNBMDAwMTQwMkVGNDkyOEI3OEQ3MUQ2MjlBMDM4RTlGMzdDMjk4QQorOjEwNDNCMDAwRjgwN0U4OTczMUQ1MjdDMEZBMzUzODM0QjlGQjlFQ0ZENgorOjEwNDNDMDAwNUI1QzNGMzVBNTExRjQzN0Q1RDU3QzNGMThGRTM0QkQ3NQorOjEwNDNEMDAwNDFGNUUxQTM0RTBGQ0FGREM4NkE3OTlCOEREOTg1NDY4OAorOjEwNDNFMDAwRkRBMTY2Q0RDNjc4NjI3M0QzMTJENEM3ODA1RjRCQTI5RAorOjEwNDNGMDAwMzg2QjE3RDY1M0MxQkExQzBDNzE4MUVFNUM4OTk2OEI1MQorOjEwNDQwMDAwNkNEMTI2RDAyNzVGQTU3NTFFMTcyQzA4OEZGM0IwOUVBMAorOjEwNDQxMDAwRkI2RjBDNjFGRjE1Q0VBOTY1QjAxRTBBOEZBRjM4M0M0QgorOjEwNDQyMDAwMkVGNDA1MEZGQTE3RjREMUY5RjkzNEFBREEyRDE4RTJBRgorOjEwNDQzMDAwOUFBOTk2OTA2MEVEQzdGNjUzNjE3QzVGQzg4RjdFRDlDQworOjEwNDQ0MDAwMUYyNTE2NkZEN0UwNDdGRkVFNEJEN0UyMzgwNERGNEI0RQorOjEwNDQ1MDAwQjE4RUU5M0Q5RTM2OEUwMDAwMDNCQUU2N0E1MUEzRUI5OQorOjEwNDQ2MDAwQkEyNDdBNEE4Qjc3MTNGNUU2NkZCNUVGNzQ0NEU2N0U4QgorOjEwNDQ3MDAwOUNFOTNCMTZDOThGRkJCNkU2RjcyNDk3NTEwRTVBNURBRgorOjEwNDQ4MDAwMjFDQzg3OTBBNUM0RkJCQkIyOERFRjVCNkQ5OTdBNTlBNworOjEwNDQ5MDAwRkJEQzNCQjQ3NTM0REU3QzU5RkREQkI1RkVENDMxODRFNgorOjEwNDRBMDAwRkUzOTFDOEU2NENCQ0Q0ODc3MDU1QzFGRTc3MEZCRUVCMAorOjEwNDRCMDAwRDA5RjZFNThEMTRBRjkzOTQyOUZEOTEyQzQxMTIyQ0RFQQorOjEwNDRDMDAwMjJFRTZCRTZENDUwODJDQjhGQzM3QkEwQzJFQzQyRUREMAorOjEwNDREMDAwQkIwMzZCOEQ3MTk4MDMxQTFDMzc1RDFFRkNCNUZDQ0VCNworOjEwNDRFMDAwMUM0QUY4QkYyOEU5M0QwRkIyNjMyQTVCOEY5NzU1QTU5OAorOjEwNDRGMDAwMEQ0MTdCMEE5RDU3MDFBMzI1MzI5MEJBMjNGQTM4QTBCQgorOjEwNDUwMDAwNzkzRTg0RUY1RjBDRTRDMzBENzRCMUZFNjQ5NzcxRENGNworOjEwNDUxMDAwNUVERkI1QkMzMkJBMkYzREQ4RUIzQkRGNzIzRkIwQ0E4RAorOjEwNDUyMDAwOUE3ODNGOTVFMjBCRjEzREQwNjRGRjY5QTVCNjFGQThDQworOjEwNDUzMDAwRDUwRkZEQTlEQTBFNzY3N0QzQzI0QURDNkY2RkYyMzE2MAorOjEwNDU0MDAwRkQ0REJFQTZBMzhFOERBRkRCM0NDRTRFMEVGN0VEREM0RgorOjEwNDU1MDAwOUZEQ0I5QTkwMkYzMUZDOTZFMjM3RDBFNzlGODU2NDc3NworOjEwNDU2MDAwODhEOTZGRTk1MDNFRDVDNkZBMERERDNDODczRkFGQzQxMAorOjEwNDU3MDAwRTdEQjVCRDlGM0MxNkI0QkY5RjMxMjdDQkUyM0NDOUUxNgorOjEwNDU4MDAwMTc2RTk4RTA4MDc4NEVBM0I3MjIxREUzM0E3NUY0NEY3QQorOjEwNDU5MDAwMjdFRjg2Nzg0MzIyQzRFMzg2QjQ5MTAwM0MxQkVDRjVGOAorOjEwNDVBMDAwOEIyMEZGMEJCRDAxMkNCNTc5MEZEQUI0QUQ3QzM4RUQ1MworOjEwNDVCMDAwM0Y2ODYxNzAzQUU0Qjk1MkMyQzRGQzQzMDIyMTE1M0EyMworOjEwNDVDMDAwRUZDN0Y4N0E3M0I1RjY5MEIxQkQ4RDdGMkZBRkFENzI5RQorOjEwNDVEMDAwRjk3MEZBQ0ZCQzg1QTE4RDkzNEJGMTk5N0YwODg5RjdDQgorOjEwNDVFMDAwN0I4NDhGNjNEN0RBMDNDNkY2MzA2RjU3NUE0RkEyMTgxMQorOjEwNDVGMDAwNTAxNkZBREY5OTA0RkQ5QThEREY1QkM3RkJCOTI4QjMyQgorOjEwNDYwMDAwQzFCQzBCMTYwNjFDQzM2MTVFNDVBQ0RGMTMxQURGOUFGMgorOjEwNDYxMDAwRTQ4MjE0NkUyNDkzNzVERjZCRTVGM0I2MkM2NDcxNTY1NworOjEwNDYyMDAwNEQzRTZDRTM3MTgwQUQxMDA3MTgxNkVGQkY0NkVCNkY3RgorOjEwNDYzMDAwREZGRUM0Qzc1NDhGNEIwQjU5M0VBOUQ2REVDQ0U3QTU4RAorOjEwNDY0MDAwRTVFNTE0REM2NzhDREZGRUMyQ0FGOEI4NUI2NkYxNUI5NworOjEwNDY1MDAwOERBRTkyRDEzNzk5MjcxQUZDM0QxMjcyMThFQjMzNzQ0NAorOjEwNDY2MDAwNzYyMUQ0MDMwMzhDRUQ2NTA1QzY3NkZGMDg2M0JEQThFQgorOjEwNDY3MDAwQzQ1ODU3QUUzMUQ0MkZGNEM0NjEzQTUzRjQ3MTE4MkQ5NQorOjEwNDY4MDAwQTZGMzg0QjcxMkZEOTA3OEZDQUYzQjQ1OUY0NzlFQ0JDNQorOjEwNDY5MDAwRjlFREM5QkExMkVDRDdFMEUyN0M2NENBQTc2OTUyMkFFNAorOjEwNDZBMDAwRUNGQTdERjhCRDlDOEZGNjQxM0M4NDk2MkY0MEZFMzY5NworOjEwNDZCMDAwMkRGNzhGMEVEOEYzNDFCRkJGNjdGMTZGMjNDOUUxQjY2NQorOjEwNDZDMDAwOTVFMzcxMEJFN0MzQzcwMDlGQjQ2Q0UzRjg3Qzg0QzcyNAorOjEwNDZEMDAwNzVENkYzQjhDRTVBMUVENzY5ODFCODBFQzY2NzU4NUMzNgorOjEwNDZFMDAwNjcxNThGRUJGQzhDRTdBMUVGRTE3MTlENjc3OTVDRTdDMworOjEwNDZGMDAwMTkxRUQ3Nzk5QUU3QTFFRkU0NzlFOERCNzk1Q0E3OURFOQorOjEwNDcwMDAwQzc3NTI2NzJGOUJEN0Y2MjQ3MzZDNEQ5MUU5Rjk4RDhGNworOjEwNDcxMDAwNEY5RTI4MzM3RDE2ODQ4MDI2MkRBRjIyNEE4MzE1RThDQworOjEwNDcyMDAwOUFDMjA2RjY3NTRBRUExNDhCMERGMjYyMDMwQ0FFMjVBNgorOjEwNDczMDAwRjMxNDhCQ0NGMjcxRjA2RjNBRkYwRUU4MTVDQzlGNzkzMQorOjEwNDc0MDAwOTNFN0Y1RTQ1MEFCNDg0N0VGQTMwRjQ3MDlFNDc1NjRERQorOjEwNDc1MDAwNERGMDhFODY5MDY4MkFBNzQ3REFFNjgzN0U1QzBEOTAzRQorOjEwNDc2MDAwQUNDMzVFMzA3Mzg4NjQwOTc4RTU3RTMwM0VDMTdFRjk2MworOjEwNDc3MDAwQkJDMzA3QzE5QzE5MTFBREFENzBEMkY3OEI1RTBFNTY0RAorOjEwNDc4MDAwNTA0RjlCMEMyREYyMUYxNDE0QzgxNzBBODg4MEU3RkRBOAorOjEwNDc5MDAwRTVGRTIzNEE2OTFDNUY3NDE2MDZCQUEwNzM0NDdEOTYzMQorOjEwNDdBMDAwQTdFOTg3NkI4RDc0NzE1NTZDMkJEQUNCNEQ3NTNDNUYyNworOjEwNDdCMDAwNEEyMTA5RkQ3OEFERjQ1RTJCOUFFMjQ5NDYzRkFBNjk4OQorOjEwNDdDMDAwOTkzMURGQzM1QzhFRDg2MUY0QzM4QkI2OThERTU3RkE5QgorOjEwNDdEMDAwN0U3RkU4MjZEMTE0NUYzM0U2MTEzN0I5QTZGNzE5MUY5QgorOjEwNDdFMDAwQ0Y4RjRERUREMzVGQkNDNTUyNzk5RDNDMjY1RTc3QzYxOQorOjEwNDdGMDAwQkU4QkZEQ0RGNkEwMDQ3NjFFQjU1N0E1QTM3MjAwRUNDNgorOjEwNDgwMDAwNURFOUE4MzcwMDcxMTNFOUE4QzI0QjNGN0YxRUUwRjVCMAorOjEwNDgxMDAwMjBENkE5REQxODg0RjEyOTVFMEM3NkEzODUwQTdDRDgwMAorOjEwNDgyMDAwMUJEOTBGQzIxREZEOTA4QjJCMDJENDE4REE3RjFCNDFDMAorOjEwNDgzMDAwQkYyMjRENzY1RUE3ODI3MTE0OTg4QkY4OTEzOTdFMzIzMworOjEwNDg0MDAwRTREQUE3MjEwRTEyQTkxMUM5MzY1QTdGN0M2MURGRjI4MgorOjEwNDg1MDAwQUU1NzVFODUyQjgwRkI0OTM5QjVERTEyNEIxRkZDQkU3RgorOjEwNDg2MDAwQTk1NjlDOTQ2ODlGNkMzMUE3RUI5NUI1RDNCREE4M0YyMgorOjEwNDg3MDAwMEU1RjMyNkY2MEIxQUNDQjFCRTg3NzJCQ0YxQjM4QzMxOAorOjEwNDg4MDAwRjJFMjA2NjlFQkJBQkY2RjNBNzhENEI0OEVGRTQ5RUMxNworOjEwNDg5MDAwRUFFNzM1QkU3M0IxQkMxMzhERUUzMzBBRkFBNjkzNTUyMQorOjEwNDhBMDAwNUMzRUM2MjIyMkU5MDQ3OTJCMDU1MDdFRjZCQjM1ODQ5NgorOjEwNDhCMDAwRjlGMUEwQTBGNTdDRDJGNENENzVDODg3RUE4M0VDMUM5MQorOjEwNDhDMDAwNEZCRjVCMDM0NDlGNzdBRkNENjM1MDRFMTdCODc1QTRCRAorOjEwNDhEMDAwRTlDMDM4OTZDNzQxRTEwRkZCRDc0RDA3MDhGRjhFOEEyNAorOjEwNDhFMDAwQzJDMTdFMUZBOTgwRUZEOTQ5MkRCMTQzN0NCM0NFQUZBMQorOjEwNDhGMDAwQzI3MzhCOEJDMTBCRkM1NURFMUZFN0Q1QkM0Q0M0OTQzNworOjEwNDkwMDAwOEE4NjA5MkMzRUFBQzk3RjhENEUxQTdDM0M1RTNGNDFBNworOjEwNDkxMDAwQzI3OEI3RTRBRDhEMDJERTlCNDYxMzNDNkY0M0VEQUUyQgorOjEwNDkyMDAwOEIxNzM1RkYwNkYyQkMzMjNCRjFERkQ2QTI2ODE0RThFNAorOjEwNDkzMDAwOTIwNDI2MjFGQ0I0RkNDMDI2Nzc1NjM5RUNEM0FCRjNBNQorOjEwNDk0MDAwMzVGQjgyRTdBMTRBN0UzQ0I3OTBEMzM2OEFDNUMzMzI5NQorOjEwNDk1MDAwQzM5ODU3NzFCRjE4N0E0RUVFQTdBN0JCMEU4NDRGNTM2QQorOjEwNDk2MDAwOTJGMzA1NkI2NTk2RjdFNDRCODJEN0Y3QjkxQ0NFOTBBRQorOjEwNDk3MDAwQTM5Mzk5M0Y0QUU5M0Y0MTlDQTA5M0Y3REJEMjNDRkRDQQorOjEwNDk4MDAwNzc0MzQ5OUM3RkI1RjYzRjRBMEFCNjZCRjU5Qzk4OENGNQorOjEwNDk5MDAwRjMyNjZEREZDRTBGQjg1RUYzRjc0Q0ZFOUI1NTBBMUE3NworOjEwNDlBMDAwRkNCMDVDQUI4MkZEQjRCQTlDNjk5NDY3OTczRjRGODlCOQorOjEwNDlCMDAwRTU0MzE2REY2OEMwNzNDNjgwQkVGOUE2ODlGM0NEODVDRQorOjEwNDlDMDAwNDEyNkJCQTNCMDg4RUQxQkY3RDgxRDIyRjE1MEI4NkU2RAorOjEwNDlEMDAwMzVEMTkzQTY0N0FDNDVERTBEQzNGMjdCRDNDNUQ2NjU3MgorOjEwNDlFMDAwOTVBQTAwRkIyQTdFODJGQjQyNkU3RjQ3MDBGNjA1NUQ5QQorOjEwNDlGMDAwMzk5MTcyQjA4RjI5MURGQzE1RTg0MEEzOEI5Q0I2QjE4QworOjEwNEEwMDAwMDhFRjE3MzVCRDU3NDcyQTAyMDlFNkFGRDk3NUUwNkZBMQorOjEwNEExMDAwRjlEMjYxNjQ5M0RGNDM4MjVFRjBBRjcyOTYzMzFCNzIwQQorOjEwNEEyMDAwMjA4RjJCMEM1NEZCRjZGQjJFNzdGRjVBREI0RkNFQTVDNQorOjEwNEEzMDAwN0ZFMEY3RkM0MkMzRjdBN0E2Qjg5NTk3QjJFQzU4OUQ2NAorOjEwNEE0MDAwN0VGRjM0NDNCMEU4RThCMkM3Q0YzN0JENDdGRDBCNkZGOAorOjEwNEE1MDAwMjJCOTJENTk0MjU5MzYxREJEOThGRDc3QjM5RjREN0EyNQorOjEwNEE2MDAwRTVCRDk1MTJDODlCQjI0Qzk5NzQwNEYyMUY3QkZDRUQxNgorOjEwNEE3MDAwMkQ1Mzk5RkNFMjc4QjM3MjdGQjRCNzNGNzlBN0JGMkY2QgorOjEwNEE4MDAwN0Q2Mjc1OTlGNjU5QkVBNTNGRTlCNzE5RjM0QjJGM0JFNworOjEwNEE5MDAwM0ZGNzVCQzYyMzFBNzg5RTVFMkZCRkMzMzQ4RTE4MEU3NQorOjEwNEFBMDAwODg4OUNFNkQwQzA5MUJFMTJFQjk4Qzc2Qzc5NTU2QzY0OAorOjEwNEFCMDAwOUY4MzlCOEQ3MUU0QkNCQTAxODlFMzlEM0M1RkFEQjJERAorOjEwNEFDMDAwNENDMzkzNzJGQjFGMjlCRkNEM0Y2MjY1M0UxMEY3ODMzNQorOjEwNEFEMDAwQjU3OEQzN0M5RTM3NUQwOTc5NkMxNDRGNzM0OEQwMDM0OQorOjEwNEFFMDAwOEQ2Nzg5ODhGOTMxNjdDOTNCOUVBQjc0N0M1MzY1NjNEOAorOjEwNEFGMDAwRTdFODQ4QjNGNTI0OUNCRkQwRjJCM0U2ODY1OTVEOUI0NgorOjEwNEIwMDAwNEY3NTlCQjE1RTQ1QTY2NzQxRENCNTZBOTM5NTQwM0UwMworOjEwNEIxMDAwRDY3QzIyOURFQ0QyRTY0RkY5RkRGQjM2NjYwNzU1OTMxNQorOjEwNEIyMDAwREEyNjkwNkIyQjc5M0NCMUQyNEIyNEM4QTdBQTc5RTkzRAorOjEwNEIzMDAwODlCMTcwOUVBN0M2QzZFNEY3RTcxNEZFOEEyRUVGRTY5OQorOjEwNEI0MDAwNkU1NzQ0MDZGRUZFNjhERjU1REZGRjBFODFGNzIzNERFQQorOjEwNEI1MDAwMDM0MDZGQTYyNTNFMDczMUJCRDkzOEJGNEJDRERGM0NBNAorOjEwNEI2MDAwNUZFRDlDNDZCMjc5NDhCQjg0ODRFNzE1MUZEMEUyNUVCNgorOjEwNEI3MDAwOTc3OThFNjRCQjhERTEzRkQ5Mzk5MjRCQkRCRjBCREU3NworOjEwNEI4MDAwRUZFMzFDQ0FBNURFREZGMzRGQkVGRkZDMjVFNjVGNjM0MworOjEwNEI5MDAwRUZCRTFFRTRDNEFBQ0NEQTIwQzg1NTJEOUY2NTExMDlDQQorOjEwNEJBMDAwMDUyMDU2NjM3OTY1OUEzQTUwRDFGNUYzNUQ2NkJGMUNDRQorOjEwNEJCMDAwREFDRjcyMTlGRDBBRkIxRUVGMUNEN0MzQkZEOUJENUQ0QQorOjEwNEJDMDAwMDZGRTNERkJEMzEzNTNDMTJFNThGMDRCMEJCMTUzM0FBNQorOjEwNEJEMDAwMzhCN0RCQ0RDRjhCNDU2NEQwOEY3N0VGQjM2MERDODAwNworOjEwNEJFMDAwNDhEMUIxQjdFOEYyMDUzMUIzOTA4RUJGRTA2NzZFREMxMworOjEwNEJGMDAwNUZCRUZCNzk1QjY0MEE3REZGRUUxNzNGMUE0NTI4MUNGOAorOjEwNEMwMDAwQ0VBREU4N0U3RDIwRDgzRDNGMTU1OEZFOTVEQTM1RUFEOQorOjEwNEMxMDAwMTZGQUZDNkU4OURDMTU0Q0EwQjczQTM5MUY5Q0Y5QjkxRAorOjEwNEMyMDAwNzMwNkQwOTlCMEVCQzAwRjcxREM4RURCQUQzNjlENUVBNAorOjEwNEMzMDAwRjg4RENEOEFGMEE3RkREODc5QUM2Nzg0QzgxMDgxQ0RGNgorOjEwNEM0MDAwNEY5RjJGQUVFNUJEOUQ3OTQ2NjBGMzdCRDkxQTQ5ODExMAorOjEwNEM1MDAwRjlFRDZBOTc0M0I0REZFMjVEN0Y0M0JBQkVFRTY3N0I0RQorOjEwNEM2MDAwM0MwMDg3QzUyRjVCMENGMjY3RjEyRTRCRDQzNjBBQ0I4NAorOjEwNEM3MDAwMTMzNjk0RjcwMTk3MzAxNkUwNDk1MDBGMkNEQTU3ODMxQQorOjEwNEM4MDAwNzlCMjhCM0E1QUZFNjZGMUMwRkI0NkZFQTI3MEMxNzM0MAorOjEwNEM5MDAwMUYwQjNFQjBGOEE3NDBGRDg1QTczRDYwQzc3RURFQjk3QgorOjEwNENBMDAwRDMwMzcwQTVFM0NFOTIyOTVEN0RGN0VGM0EzRTI0NkNFNQorOjEwNENCMDAwRkM1ODdBRUZGMTIwNTIwM0Y0QjVCODYzMzVGQkRFQkU0MQorOjEwNENDMDAwOUI0RjgzN0M1QjZDRTJFM0NGRTExRkQ5QkRGNTQ3Q0MwMgorOjEwNENEMDAwNjY4QzQ3OUUyNzZGOEU4NTdEMEFCMjJCMjM2MTdFNzE3RAorOjEwNENFMDAwOEZGRUUwN0NCRDYwQ0ZGOUFENzA5RUY4Q0NGMzdGRDkyQworOjEwNENGMDAwMEE3NkZEQzJGRkZBNzJFQjAzMTAwRjc4MzVDNTBCRjI4RQorOjEwNEQwMDAwNjhGMTRGREZGMzEwMURGQzMzRUNDQzhFM0ZGN0NDRDNCMgorOjEwNEQxMDAwNEYzRDQ2RjlFNERDRUY2RDY4RTc5Q0ZCRDVFOTVDODUyNworOjEwNEQyMDAwQUVGRkRDREU3RjY0QzFCOURCRkI3RTM1QjEzRkMwRTNBMworOjEwNEQzMDAwQkVGREQ3RjVFRkNCQ0YwMEJBOEREOEY0Rjg4RDIwN0UyRAorOjEwNEQ0MDAwOTU5NzA1OTZDQ0ZDMEEyRjRENzgzQUI0RUY1MDJFQ0NBRgorOjEwNEQ1MDAwRjNFQzMxMUI5RUJGNTk0QzlGRDU5NTAwREU2QTUwM0Y0NgorOjEwNEQ2MDAwNDA3RDE5ODVGN0EyRERBQkZFNjYxOTk1MDhFRUVBNDA5NQorOjEwNEQ3MDAwMTEzNzQ1QTIwM0MxQzg1RUI0RUY5NjdGMTk1RjBBQTUzQgorOjEwNEQ4MDAwRDVBRkMwNzhBNDFCRTVCQkY5QkRDNTQ3Mjk3RUFGNENBNAorOjEwNEQ5MDAwOEVDRkYzRTQ2QjE5RTBCRjc4Rjc2QUY2REQwRThBNEYyOQorOjEwNERBMDAwNEY2RjdDOUU4NTdGOENFQjhEQ0YxMkJCMTk5RjBCOUYyNQorOjEwNERCMDAwQzREOEU4QkU4Qzg0NzkyNDFBM0U2QkY2REZENkE3REQxMgorOjEwNERDMDAwQTBDOTg3NEJDMTc5MUVDRjlCRkEyRjVCQTBDMjBFN0M3NgorOjEwNEREMDAwRjZCQzUzRjUzMTNDNDdBNkQwQjY3MzdCQ0VFNzEyNEFGQQorOjEwNERFMDAwMjc5RjVBQkI3RjA4NzJCMkZCNTczNjJGRjgxRDc3RkZGQgorOjEwNERGMDAwRUEwM0U0QkI3M0ZCREY5NjE1NzZGRUM0MjU1MEJCRTJFNQorOjEwNEUwMDAwMUNFOUY5RUIwNDNCNjMxMURGMzM1QkJDQzMxREI1NzlDRgorOjEwNEUxMDAwRTJGODVBMTQ5OTM2NDlGMUUwRjMxM0Y4M0NDMkY4NjEwQworOjEwNEUyMDAwNTFFNEMwQUQ0MjAyRkMyREIzMTczMEZEMTRFOTg3NzA4OAorOjEwNEUzMDAwQTlBMTlFMEU5Q0NGRDdFMzU1MjgwMzdDOUVCODFFRThGRgorOjEwNEU0MDAwMkYxOTNFQjVGNTdCNjFGRDU3RUJGMEJBODNGMUIxQjk4RgorOjEwNEU1MDAwRkYyMkNBQUYyMDg3N0JFMTM3MjI3QzAwRTVCOTc2OUIzMQorOjEwNEU2MDAwMDRGOTkxRTdBQzJDRkU2NkM2N0IxQ0ZFRkNGQ0U0QjdBMworOjEwNEU3MDAwQjQxN0VGQjcyN0Q5N0ZFMDcwQjgxNEJGNUY2QTdEREY0MgorOjEwNEU4MDAwMTY3RTczRUMwQThFNkI4NkUzOTlBRjEzRUI4MzhENUMxMQorOjEwNEU5MDAwN0UyQzIyQjU5MzA2RThGNDk5Q0Q0QUY1NTkzRUQ4N0I4RAorOjEwNEVBMDAwNDE3NUEwMTA5RjZGNTM4NzA1RTVGQzk5NUQ5NjA4RTg1MgorOjEwNEVCMDAwMEJCM0JDNTg0NDEyRUZEQjQ1RUNDQzdFNTlGNEYyODFDNQorOjEwNEVDMDAwNTEyMEQ3Q0UxQ0ZDMzlBNzRCNDZGNzhCNzY5RjkwNTVDNworOjEwNEVEMDAwQUUxRjIyN0FGRDkwQzRERkZFMjkxRjZGRjEyQjg5QzcxOAorOjEwNEVFMDAwNUJCQ0ZCNkYwOUM3RkI1QzBBREMwRUYzRkZCQ0QzNEE1QgorOjEwNEVGMDAwNTQzQUM0RTcxRDk2NDk4OUVDQUQ0RDc2QUIzMUNGRDYxNworOjEwNEYwMDAwM0RGNjU4MkE3RENGRTI3MTI4QjBFRTg2MTU4MTBGNTQwOAorOjEwNEYxMDAwQjA0QkRFQjE2MjlDOTY0OEZFNEY2RDc4REVEQUExQUNGNAorOjEwNEYyMDAwQTE3MDZCRjA1NDYxM0M0NTFCQUZEMTA0MjdDOTE3NDRGNQorOjEwNEYzMDAwQkY1NENBMEM5NjMyOUIzQTYyRjBBN0FERDRERkQ1Q0ZFRQorOjEwNEY0MDAwOUJFQUREMUNEMDRCQzc0NzlGQjZDMjNBRkY2Q0IyMUYyRAorOjEwNEY1MDAwRkYyQzkxQTZGRTc0QkMzRkFCODI3RkI5OTJDODVGMzQzMAorOjEwNEY2MDAwOEUxRjVBNjYyMThBNUUxRkRBQkE4RkMzN0NDOEFGNTM4MAorOjEwNEY3MDAwMDhFNEFGNTk1RTRENTE0MTlFMkNERTlBMTI4MTdEQ0RFMQorOjEwNEY4MDAwNDNGQjJGM0MwNTcwM0JGN0E0OERFRjczQjIzQ0RCNkEwQgorOjEwNEY5MDAwQkVFRjc3N0FGRjg1QURGRjQ5REI0RkMzQ0JGNEZCRDU3RQorOjEwNEZBMDAwNUI2OTdGQjBEQjc3M0IzMTVGRjNBRkNGQTc4RTIyNTRENQorOjEwNEZCMDAwNEU1N0ZGRkE4MUE5MjA1RkFBQzFDN0EyRkRBQjdGRDZEOQorOjEwNEZDMDAwM0ZEMjQwQzczQkQ1OEZENTRGRUQxOTE0MDFCQzJDN0M4NworOjEwNEZEMDAwRTE1NzhCNDA5RjJDNzhDRTQ5ODAyNDBGRURGRkUwODc2RQorOjEwNEZFMDAwNTAzRkY3NkIzN0U2N0I5REZCRjVFOUVGMDIxRjUwN0JFNworOjEwNEZGMDAwNUJEMUVCRjVGOUZBRjNERTc0REMwNTUwNjdFREMyNDVFMQorOjEwNTAwMDAwMkVFQkMwOEY1OTAwMjVBNUY3MDUyRkE3RTJGOTA3NUQwNAorOjEwNTAxMDAwM0Y3QzZGQjFBREZCN0UxNjg4NTIwNzg4RTgxMzQ1MDdDOQorOjEwNTAyMDAwMDAxRjJFRDg2NUZDREU1RkVEQ0M5RTVBMkM3NzU3QjE2MQorOjEwNTAzMDAwRkVFMTAxOEM1RjNCRjFCREFGMzUzQUU1RURFNkY3QjUzQQorOjEwNTA0MDAwRkVGRjYxMkYzMDhEQzNERTVGNjQyM0I1ODlFOERGOTZGNAorOjEwNTA1MDAwQzJDNjVEQjBFQjlCNjFDNkYxMThCREY2RkUwRTdCRkVDRAorOjEwNTA2MDAwMjM4MUU1RTc5M0JEMjlCODRGQjA1MDhFMEU0RDJGQzY3MgorOjEwNTA3MDAwNzhDNzNDRTBEQjg1OUVFOEQwMzRGQUJENUY3Mjc5QjkzMQorOjEwNTA4MDAwRDA0MUVCRjRGOTAwM0UwRkU4MEY3NTYyRUY3QTBFRjBCNQorOjEwNTA5MDAwNUJGMzUyMEEwMTdBQUZGOUI1MUJFM0M5MzUyRjVFMzhDRAorOjEwNTBBMDAwRjUzODdEN0U2NkJGMTNFMzdBMzVCRjVFOEFGOEFFQjExMAorOjEwNTBCMDAwNDU3RjA4RjFCREVFQkQzNkIyOERGNjNGQjNGN0I3QjkwNworOjEwNTBDMDAwNjA4RjlDQjE0NjczRDNGQjg4MEZENTc0RDg3ODMyQjgwMworOjEwNTBEMDAwNzExREQ0MkYyOEFBQTVGMzUxMzdCMEJDOUMzQUMyRUU1QgorOjEwNTBFMDAwMURBODgzQTAwRUQwRjE4NzI5RUMxQzMxREY5N0JBODc2OQorOjEwNTBGMDAwQzdBM0JFOThBM0E0RTJGQ0FGQkQ4OTNERTdGMTg2N0JDMAorOjEwNTEwMDAwNkU1NkZBQTdFOUU2MDE3OTczRTQyQUVBOTdDOEI1QzNBRgorOjEwNTExMDAwNDBDRTVBNjIzNzExMDVGNkZGNjI4M0IxRDRGQTU5RTBFNgorOjEwNTEyMDAwRkU4NjYyQzhERjYyRkI3RUQ2NEMzRkE5QTZFNUQyNzQzQworOjEwNTEzMDAwMTJDMkYzOTdBRTFCN0JGOEVDNzcxNEM1Rjc2QzU2RkFFNgorOjEwNTE0MDAwQzM3OEZFMTQyNjVGNkExQzgxRjEyOTk4MEY2OUJDNzcyOQorOjEwNTE1MDAwNDFERENGRDY3NTgxREZBNzYwOUVFRjA1QUI2QTAzNzk4RAorOjEwNTE2MDAwMUVERkFGNjM3OTgzNzU5MkYyMDFDNDdEQzkxMTJFOTc1QQorOjEwNTE3MDAwN0FBRDlGRjFEOTE3REU3NEU0MzM2RDFEMkRGNTVFOTQ4MQorOjEwNTE4MDAwMjdBQkVCN0Q1OEFFQUEyRjIyMEFFNjI5RkJCMTZFRTFEMAorOjEwNTE5MDAwRjBCMDE1QUIwNEVFOTkwMDFFODQzRjlCMkIxODgwRkJFQQorOjEwNTFBMDAwMkM2MDRDODhCNzVCNUMyMUE0MkY5QkFGMTY2MzA1NzZGRgorOjEwNTFCMDAwN0VGRjhFQzVBNTkyNkExN0M0NjcxODlDMjA2RTBDNzA3RQorOjEwNTFDMDAwOTI3OTVENkE5QjgyNzBBNUVGRTNGMzg5OEVEMDlDOTRGRgorOjEwNTFEMDAwMzE5MEVGM0JDMjIwQTdFNENDMTI0M0JEMTdEQzM0QkFCOAorOjEwNTFFMDAwRDhGM0JGMEQzRjgyRjA1QTVENkZDNzcyNTU3RDE5QzI2QgorOjEwNTFGMDAwNkQ2NTdEMDBFQkZGMUZFMEQ3Q0FFMDc3MEQ1MTc0RkNCMQorOjEwNTIwMDAwMjM2NzU2MThFQTQ5RTFCNzk5QzIyRjMzQ0U1NzY2Mzg1QgorOjEwNTIxMDAwRDRGMUZDMUM4RDlGOTJGMUVGMjNGNTA0Mzc1RjM2RDY1NQorOjEwNTIyMDAwQjc2MUE5M0Q0RjRGQTJEN0NGQTYzMDdCQTQ4RTg0OTZGRAorOjEwNTIzMDAwRTMzRUE4OTdDNTYxNDhBNjRBNzI3NEYxMjdFMjUzRjE4QworOjEwNTI0MDAwMUMwODlFMzc4NUY2OUM5QjMwN0VBOUUxRDdFMjk1NEVERgorOjEwNTI1MDAwMTlFNTlGRjIwMUFDNjdFOTFCNTYxMUU0OTVBNTZFM0I3OQorOjEwNTI2MDAwRjkyODQzQzdDNzUzODIyOTBBQzJEOThGNzFFMDA2QUUxNQorOjEwNTI3MDAwNUY1N0Y2RTBEM0M4MUYyREY1MEE5NjZCMzk5RkFDRTc1MAorOjEwNTI4MDAwN0NCMjAxRjAwRUYxM0RCRjg4Mzg2RDlENDQ1MDdGM0VFOQorOjEwNTI5MDAwNENFQkNDREY4RjEyN0QzQzNDQ0RERjExQjU1MkZDQTMzMworOjEwNTJBMDAwNEM1MkIwNjRGNzcwMUNCMzQ1ODZEMEY3OUNDNTI0MDBGRgorOjEwNTJCMDAwRjQ5Mjc2RUNDNzExNUMyQkU5QzBGM0Q2NjlEQTNEMzA4NQorOjEwNTJDMDAwQUYxNEE0Q0RDNEZEMUY2MjY1N0E4QTU4NTgxOUI2ODJGRQorOjEwNTJEMDAwMUY2NTg2NkY4M0ZGMjBERTJGOTE2QzNFRTVDN0U3MEJDRAorOjEwNTJFMDAwRjBCRDBCMzNEOTlFNTlFNjlEMURDN0UwM0UwODU3QUI3NAorOjEwNTJGMDAwMTNGRENBMkM3RjZENUUyRUNBNTcxQkQyQUJDQjFGMTI3QgorOjEwNTMwMDAwQUE3NTc4Q0M0QTYyRkYyRDczNENGRTIzRDBFMzg3OTBCOAorOjEwNTMxMDAwOTc0OEYxQkJCMTZENzAwQUMwQjlDNURBRTEwMzc5RDgxRAorOjEwNTMyMDAwOTJDNkY0OEQzMjgzNDI0MTc3QkZEODZCNUM0RTdBNEE4NQorOjEwNTMzMDAwOEQ3MjQwOTNDQkRFNkI0QjBDRjRBQ0M5RERGNDA5NDZBNworOjEwNTM0MDAwQkFEN0U0RUVDRjdBRTQ2RUYwMkNDOEREOENEODE2RTQ0MAorOjEwNTM1MDAwNEIzMzFGMzQ1ODY1NTVCODEyRUZBMzYxRjFBNzEzMDIwMAorOjEwNTM2MDAwREI1N0VGMkQwRjcwREZGRDhCQUVGQzZENzAxRTVCRTMyNgorOjEwNTM3MDAwMUZGM0ZBQTVFNkM5Rjg5RDFFN0JEMDlBMzgxRjYwMjA1RQorOjEwNTM4MDAwQkY5N0ExOTlEMjFCQTE3NEQ0NEFFOTBDMTBCMThFRDI1NworOjEwNTM5MDAwMTk5NDYxNEE2NzhDOUZDQUIwRDRFODc4MDU2MTMyNDQ5OQorOjEwNTNBMDAwREQyN0IyNzlGMjc4QURCNjdGQjJDMjVFMTIwMDNDQUVCNAorOjEwNTNCMDAwRUM2MDNDMzRDOEMxRjc0OTMzNDVDQzBCOTBBODNGRTlCOQorOjEwNTNDMDAwQTI4RkE0MDNFM0VDNjA1RjRBNTZCNjhGREZFRDE2M0I3NQorOjEwNTNEMDAwNjAxRjdGQTU2QkJBMURGMjRBODVCNDUyQTQ5RkFGREM1MworOjEwNTNFMDAwOTU3OTdERURFQkMwRkQ2QjQwN0Y1RTk3OUY5QzJDOEU4OQorOjEwNTNGMDAwOUY5QkI0Nzg0QjA4RjhBNTdCNUM5RDk4REZFNDcyODg4RQorOjEwNTQwMDAwODZGREE3MUE0N0E4QzBBMUFCOEY4NEFGNzNCQ0MzQjBGOQorOjEwNTQxMDAwN0I5MjlDQkYxQ0M1RDc0MzcyNTQ1MkE4OTMxMzNERjc4RgorOjEwNTQyMDAwMjUyOTJBMjlEMkM5OEIxNTQzQUVDN0ZCOTg3QUNCODk4NworOjEwNTQzMDAwMjRGMjcwRTdGRjhDM0M2Q0M4OEIyMDVFQUQ2NkY5OTM1QworOjEwNTQ0MDAwMTlDMDNCQTA2OEE5QzJENTBBRDQzQTVGRjk4M0QxNDhGNAorOjEwNTQ1MDAwQTdENzM5QzAwRjcxNkRFQkIxODNCRTU3RDA3QjlFNjY2NQorOjEwNTQ2MDAwRjkxN0Q3NkIwQUM2QzFBODVFN0JCNDBDRTQ2OTUyQkRCQworOjEwNTQ3MDAwNTY3QjE3RDI3MUVCNDAwNUU4RjhDMEJBMDc5RTg0RkE1NAorOjEwNTQ4MDAwNDdFQjZDNzhFRjRCNTU2QzM1NTFFODdDQUI2M0UzQjA4MAorOjEwNTQ5MDAwOUNEN0Y2MTA5Njk1NkRFRDk0ODkwODU5QkVCNjdBRERDNQorOjEwNTRBMDAwNENFOEJGRDk4MkYxOUY1MzkxQUJDRUQ1RDFGQUE5NTYyMgorOjEwNTRCMDAwMUJEQUVGQTdCNkRDOUIwN0Y2REZBOTU2QTc2MjAxN0JENAorOjEwNTRDMDAwN0ZDQjE4NjM3QjMzQkJGRkU1NTQ5QjM1NjI2MUY0N0I3NAorOjEwNTREMDAwRDEwMkZCMTE4NENCNzc4ODAyRTlFNjRCNEExNUI0RTM4RAorOjEwNTRFMDAwQkYzMEVEQjc1NEFFQjcwNTA0NEY3MkY4NTdCNjI1QjZDNgorOjEwNTRGMDAwMjdGMUZDMzZFNDVDOTNEQTYxMjA1RkNCOEZGRjM4MEYzNQorOjEwNTUwMDAwRTg0MzkzMzM0QkQzQTlEQzAzRjgxREI3OTE0NEZCMDI2NgorOjEwNTUxMDAwMTMxRDEzMTcwMzlFMjYzQTAyNEIxOUJFMkVFRkRFQUM2NQorOjEwNTUyMDAwOEY0NDZBNzcyMzlFNDI5RTY5ODZCODJGOEJBQjdFQzREOAorOjEwNTUzMDAwRUQ3MjYyNEZEMkVFRTFFRjdCMTNCN0Q3QjRGRUU1RjUyMworOjEwNTU0MDAwMDc2OTZENTVCMTMxQUU2RDgxNzhCNTAwRkVGODM0OTZCRQorOjEwNTU1MDAwRUZBMEVEMDNGNUE2NkI2NjRGQjdEQTUwQUVDQ0UxRjFFNAorOjEwNTU2MDAwMjg4RENFRTM3NDE2RjJGMDdDMzEwMzFEQ0U4RjZENDA5MgorOjEwNTU3MDAwQjkyN0I0OEM3Qzc0MUM4NURGOTc5NEZFODAzRTg0OTY5QQorOjEwNTU4MDAwRjFGRDAxQkVDQkQ3N0M2N0ZEOUQ3NEZDQkZCRjY5QzEzNworOjEwNTU5MDAwRTdGMzYyMjlEOEZGQjMwN0ZEOEZERTA5RkVDMkJGNUJDOAorOjEwNTVBMDAwMDlDODlGQkYxRjk5ODhGQkM4OUY1OThENzE4QzcyMjdBRQorOjEwNTVCMDAwOTM5N0FGNzJGRUFGOEFCNTE4RUNGM0FBRTZEOTMyQzQ1RQorOjEwNTVDMDAwNDFBQjYyRUJGMDc5MTU2QzIyNjExRUZEMURBRkMxMDY4NworOjEwNTVEMDAwNzAxNTJDRkQxQTc4RkZGNjg5MkI1MDlGOTY2MDFDQUQzNAorOjEwNTVFMDAwN0FBRDJENjE5RUZGQUIwRUM1MjBBRkFBQkI1QTcxNUM5MAorOjEwNTVGMDAwNDJFREIzQ0MyQzNFOUU0RUVFNTRDNzMyOTAzRjg4NTdCRQorOjEwNTYwMDAwMjU5MEY3NURDNUU1NEZDRkZDQjY1ODBERjJFN0IzOTQ5MgorOjEwNTYxMDAwQzQ3MTlBQjcxQzZDOUQ1NUIxRUYyMERGRjU1RURGNzc0MgorOjEwNTYyMDAwRjE3OTk1RjZERDJFQzZBN0YxRjUzQzNBMkVEMTdBRTI1NgorOjEwNTYzMDAwRUJCODE2RkI3Rjk2OTZGOEZCRTczOTdDNEZENUNGMjM2NgorOjEwNTY0MDAwMDEyQUJGMkE2REI0OUYwQkJFN0Y2RjUzMTlGOEY5NUIxNworOjEwNTY1MDAwRDJEMjA1RERCQUFBREIxNjkwODA2RTVERDU1QjY2QzkzNQorOjEwNTY2MDAwRkFGQjI5RTM3OEI4Q0Y4MDg3RjM2QjE2MjMxRTk2MzlBRgorOjEwNTY3MDAwODIyNzQwMEY1NEI2OEMxRjE1NDIzRjdGMzVDMkY5MjM1NQorOjEwNTY4MDAwQUIzRjE3RTRGMUU5QjY3QjNEODlFRTkxM0M2RkM2NEYyNQorOjEwNTY5MDAwMUJDNzBGQjVCQjRCNzVGOEQxRjA2MjdFRkZENDlGQUEzNAorOjEwNTZBMDAwQkY3QTEwRTRENDY2Qjc0MUFFOThDQjVFNzhDQjRGMEM4RQorOjEwNTZCMDAwQjc1NDRFOUZBN0E4RkUwRTIxREM5NDE3OEYwMTVEQUY1MworOjEwNTZDMDAwNzU2MjdFNUM3MkY4NUQ0MTQyN0RDMTJGODlGRDRDRURCMworOjEwNTZEMDAwMkNCQjczMEM3Qzk3MjAxQ0FBREIxODFENUMwQTZFRjE5NgorOjEwNTZFMDAwRUY3MjNBMjg0RkJDOUVGMTRFOEQwRUVBODg0QTE5RjZBOQorOjEwNTZGMDAwQTQ3QzI5M0E3ODgwQThGNjNFRDZEMTQzMDc2REFGOTVCMQorOjEwNTcwMDAwMTdDNkU5NjBCQzMzM0M3MTA1RURGNzI5RDgzRkMzN0E3MQorOjEwNTcxMDAwRTNGRkE0QUM3QUFFMDE3QjY3OEQwNUY3QkQ0RTNBRDRBQQorOjEwNTcyMDAwQUMzQjU4N0QzNEM4RTc5MzlFRjBENDZCNEFFM0Y1Rjk1RgorOjEwNTczMDAwM0I4Nzc4RjRGNzNBOUU2RUE2NzA0ODAwQkZGMUNFMjRGRQorOjEwNTc0MDAwRjQ1M0E4OTJFMkIxRkZFRkU4RTdBMzI0RTc2MDI2M0ExQQorOjEwNTc1MDAwQ0FDQjAxOUYyNDlDMzg5RUFDOTU5QUZDQjZBNEJBN0ExOQorOjEwNTc2MDAwRkM1RUQwQTMyNzVEMDU1RjQ1NjhFQjNBNDdFODY2MjdGNgorOjEwNTc3MDAwNkQ2RjRDQkIxRkY1RkNDOTkzMDJFQUUxRTU3RjVBM0ExNQorOjEwNTc4MDAwMENFNDcwMkZGQkI3M0VGNkQ4Qzc0MzMwNkVGOUY4Qzc2QworOjEwNTc5MDAwNTZCNEE3NzA1QzQyRUQxRkQwMDM5ODZGOEU3RUMwNDA1OAorOjEwNTdBMDAwOENCMzI0REJDRkJEMTcyRUZGMUQxM0RGRDdENUY2NkZDQgorOjEwNTdCMDAwNTdENjc3M0UwNEUzMTNCQjRBQkNEQTc5N0QwNTRBNjZDNworOjEwNTdDMDAwOEZGRDA3Q0M0MzE3OUY5N0FEMjFBRjFGRkM1RDgxMDQ3MAorOjEwNTdEMDAwODFFRUFENTJBODE5RjIwQ0FEQkVDQ0QxQUEwRUNFNEJDMworOjEwNTdFMDAwOUMyQzJGMjdFNUYwRTFFNjdDRkE3RUNBRENERjc5MjFFQworOjEwNTdGMDAwQ0U2N0EzREY4MUQyOUUyMzdEQTE4Rjk3NUIzMzU5REVENQorOjEwNTgwMDAwMTcyOUQ0M0QyRjgwNzNDOEI0NkU4ODNCRDBGOUY2RTFEOAorOjEwNTgxMDAwMzdGRjUyRThCOTY3MERFRjM3OUVBOTVERjQwNUEwQTNFNQorOjEwNTgyMDAwNzRGMzdCMkQ3RjQ1NkE2NEVENjk1QTczMjM2QkU3NzFDRQorOjEwNTgzMDAwRDRDNTk1MkM0RTdBNjg1NjJBQzI0RjVCRDdDQzU3NTZBMgorOjEwNTg0MDAwRTE3RDZCMzM1RkM5QzZGMzRDMzM1REMzM0UwMTc4RkUyNworOjEwNTg1MDAwMTIxMjZCODBFRUQzOTg3RTM2RDNDNTQzNUNGRUZDQTA1QgorOjEwNTg2MDAwNUQ1NEFENzRCQ0MzRDZFRTgzNEVFMDhCMUYwOUU4NTc4MAorOjEwNTg3MDAwREZGMURFNjEyQjkwRkMxRjhFOUVCNDQyNUVENDVEOTAwMgorOjEwNTg4MDAwNTg0NEQ3MzM4QjI4MzIzM0EyMjNGOEZFNkNEMkUxNjYxQQorOjEwNTg5MDAwRjU4RTdFNzBGRjY5N0MzQ0VBMzJDMzc4NEJEOEZFRjMwQworOjEwNThBMDAwMURFRjFEOUQwODZBOTQ4RUI3MTJDQUJCREUyNDMyOEM5MAorOjEwNThCMDAwM0Y2QjlGRDJDNDhFNDNGMUYxNUVBMUUzODlGMUYxN0E4RgorOjEwNThDMDAwRTAyN0Q5MTExRTcxRjhEODExNUVCRkVGMzk1RkEyQTI4RgorOjEwNThEMDAwN0RBMTgzMkZEQTJCMUE3QzFCMDA2RTE0N0UzMzUzNjc1NQorOjEwNThFMDAwREM0ODQ2MjVFNzk3OTlBRUExOUY5MDUxRjFGOTk4RTFFMAorOjEwNThGMDAwRkI3NzY4QTJGQ0Y2ODQzM0IwMTdGOEFGRDExOTc4MUU5NQorOjEwNTkwMDAwRjg2N0ExQkQzQjU3MkFDMDczNjAyRkMyRjM0NTk2NTA3QworOjEwNTkxMDAwNUUxNkE1QUJCMzgzNDJDM0ZBQzFCRDFFOUQ4OUY3Nzk1QworOjEwNTkyMDAwQ0Q3QzdBMUNGOEU1NEEyODI5NUZDMDNDRjg3OTk1MUZBMAorOjEwNTkzMDAwRjI3NTFFRkFGMTY5Mzc5RTQ3RDlGRjQxMkU5NDM1OTZDQworOjEwNTk0MDAwQUVCNUI3MDNCRkZEOUIwNUVEQ0YyRkY2MERFQjMzQUYyMworOjEwNTk1MDAwRUUzODhGQkJCQ0U1MTRGOTc5NkJCNkNFQkJCODNENzc5QQorOjEwNTk2MDAwRDczRTY3MDRFRTQxQkNBQkNFRDJFMzVGMDE1RERGNTVBRAorOjEwNTk3MDAwQzdGMjRGODhENDM5RUE1NjgzM0REOUM4Rjc0MzdBOEZBNgorOjEwNTk4MDAwMDNGRTgyNzkxQzZEOUQwNzczMDc1QzAxRkVFNTkzNjMzRQorOjEwNTk5MDAwNjRGNDIzMEVCQ0Y5QzVFRkFCNjlERDMxQzg4RTdFQzI1RAorOjEwNTlBMDAwREEzNDRFQkZFNUNDNkY3RDMyMkRFMDFDMDlGMUFGMzUwNgorOjEwNTlCMDAwRTk3RTk1QUU3M0NENkJBNDQzQTQ3MDNBMzhGQ0ZFNDhFMworOjEwNTlDMDAwNDUyOURDMEIyRDYyRUM2QzdENkM3QkI4MDJERTJCNjYwRQorOjEwNTlEMDAwRjdDRTc4Qjk1REJBQkVGMzY0MUJEMEUzRTk2MzM2REM3OQorOjEwNTlFMDAwNzdGOENDQ0RDRTExQUVCMTA2NzNDMThFRkZBNDVENEU1QgorOjEwNTlGMDAwNzhGRkQ5OUZERDEyQ0VCNzVERTgxMjgwQ0U2NzkzQjBGNQorOjEwNUEwMDAwMURFNEM1QkVDRUU5RkQ2MTNFMUUzRkYxMDJGOTlGREVGOQorOjEwNUExMDAwNjIxMUQ5RkQ2ODVBQkMyNTJBQjE3OEJGMkFCMTdBODBCMworOjEwNUEyMDAwOTdERTE0RkQ3RDYzQUIyNzREQzAzQzhGMzlBRDZGNjNBRQorOjEwNUEzMDAwMzI5RUE3MzRGMTNEM0ZBOTJFMzY1Rjc3NjdGQTY0QkNFQQorOjEwNUE0MDAwNzc3MzgyODg3OUQ4NkU3RkI3MDBFRkU1NzU1NkM4RjgwRQorOjEwNUE1MDAwN0U1OEU4RjNGREJDNjU1RUNDNDM4NUY3NDFDRUU3NUQzQgorOjEwNUE2MDAwRTZGQjM2MTdDQkQzREFDMEZERUM3NkFCQkY2OTAyMUQ3RgorOjEwNUE3MDAwQTc3RDZEOUEwMEY4RDBGQTI5MkUyNjU3NEU0RkQwRTIxNgorOjEwNUE4MDAwNDg2MThDMjNFNTE2N0E1M0UwMUU4QkRDMDAzMjM3NzFCNworOjEwNUE5MDAwOTc4NkYxQkVFRjZERDA4RkM1NTkxMTBFRURDMzVGOENBNworOjEwNUFBMDAwQzIzRUY2MUE4OEFGMDA5RUFEOEM5RUQ2QUMxNTMwQUVDNQorOjEwNUFCMDAwNEFFMTM3MDBGNEM0MjcwRkRCNkU4Mjc1RTQzNTBCNUVENAorOjEwNUFDMDAwRjBERDY5OTk3MERFMzNEQzc2NDZFN0FEOEZBMjVGMDhDMgorOjEwNUFEMDAwNjE1QTE4Mzc3N0NCQkIzODJGNzc5MkY1QUU3MEIzN0IwRQorOjEwNUFFMDAwRjIzRkI5MDQ3RDdDRTk2NEY3MjZFNkQ2NzVGMkZCRjE1NgorOjEwNUFGMDAwQTI3ODBGNUUxOEUwMDRGNTQwMjlCQkRGNDQwQTI4RkFCQgorOjEwNUIwMDAwRkM5ODM4RkYyQ0U3NzQ0ODAyQjBDRjU2NTkyNjQ3MjAzRQorOjEwNUIxMDAwOEUyMDM2QjdDRjgwNzVDRjBFREJDODBENzQ3REFENDJCOQorOjEwNUIyMDAwNjcwMEY4NDUxRDIzRjJGQjk0MDJDNzAxNEVFQjM2RjRFMworOjEwNUIzMDAwQzczQ0JDNTU2MjIwMTdGNEIwRkE3RjY0RENBNzNCMTg2MQorOjEwNUI0MDAwRjg2MjMzREMxRkJGQjU0QzQ2QkUzODE4NjBFNzBEOUZDNgorOjEwNUI1MDAwNUM1NkQwMEVGQjk0RUVCQThBQjZEOTc0QkM4ODU3NDYxMAorOjEwNUI2MDAwQzlEMjUwNEFERTE4MDZGQjk0Q0I0NEFGNDBGQjg3ODM3MgorOjEwNUI3MDAwNUFERUI2RDcwMTc0MzFEQUYyRTVFNDIyRDhDN0NCMTY4MworOjEwNUI4MDAwMzFBNjc0NUE2MEY3MzZBQzVDNTZFMTA1QkNBRUY0NjZEQgorOjEwNUI5MDAwMEE3QUZGRTU3NjRFMDdDN0QzODNCN0JCMjg3QzdDMEYxNAorOjEwNUJBMDAwNkVGNDUyMzM4RUYyNjdDNjE1MTA0NzU0OUI2NTQ1M0IyMQorOjEwNUJCMDAwQjcwQkY3M0Q2NDcwQkM2NDc0OEFEMTJBMEZENjVERjNDRAorOjEwNUJDMDAwRDJFMTNFNUQxNjJGN0RFOEM2MTA4QjczQzJERUU4NTgyOQorOjEwNUJEMDAwOEM3M0YyM0YxRkUyMzU5M0Q3RDY4QzcwNjA2NUQzOEEwMQorOjEwNUJFMDAwMkFFQzBGRTM2NEQxNzEzMjRBQzVFODU4M0FFRUI2QjRGNAorOjEwNUJGMDAwQzA1NjhDREI0REI0MjM5Qzg4RDRENTA2NzA4QTRDMUNDRgorOjEwNUMwMDAwRTA4NzdCNkQzNzhFMUJGQTM2OUM1RkM5MzhEMjNEMUQwRAorOjEwNUMxMDAwRjQ2ODY0OTBFMzBGRUQyMEE3NTZDQTBBRjA3OUM2QjI4MworOjEwNUMyMDAwNTM3N0MyRjMzNEZGMjNGNzQyOTlEMUY4RkUwMzIwQTczQworOjEwNUMzMDAwRDNCQUZFNTY4RkNGMjdDOTg2Rjg2MkM2ODc5RjdEMDNFOQorOjEwNUM0MDAwRUQxOTQxRDkxMEE3RkMzQTNERjgxMzgwQ0JENkUyNzA4QworOjEwNUM1MDAwMThFRkM1MDQ4QzY2QzVEN0IxNjc3OUU3MjRCOEVGRjhBQgorOjEwNUM2MDAwRjQzNEQxQkY4REI3RTNCQTM2NzkyMzZCMThEQzRBNDFERgorOjEwNUM3MDAwMkY2ODcwNUIyNTJBMUQ1MTU4RDc1NDNCRDI0NzIxRTkyNAorOjEwNUM4MDAwNDQ3OTk1MERCQkQ5ODNFMzc4QzlGODcwRjUxMkM4RDc2QworOjEwNUM5MDAwMzBDRjY3OUQ0QkU4Qjk3RjAzRUUwOTA0NUM0MTdFOENGMQorOjEwNUNBMDAwOUNDRENFMTVFRTJERTlGNDgxM0RCRjM2MkQ3MTdDRjJGMQorOjEwNUNCMDAwMkQzNzdCREYyNkIyMzhBQkI5RkQwRDM3QTMwNzEwODkyRQorOjEwNUNDMDAwNkQyNTJDNUY3RTI0OTQyRUEyQTY0Mjk5NjMwRjQwRkU4MAorOjEwNUNEMDAwRjM1RTUxRjkyM0QyRjk0NjhCMDJGODgxRkU1NjhBQkY1MgorOjEwNUNFMDAwMDM2RjdDOEVGMUM1MDNFMTc3QjE3Q0M2NURBNEU1REQ3MQorOjEwNUNGMDAwNDdCM0U4RkJFQjRBRDk3REM3RUJCQzhDNDZBQTlCOTkxRQorOjEwNUQwMDAwQkNBOEY2NzVEOTYxREZBNEJBOTg3OEI3NzE3QTUzMzUxMworOjEwNUQxMDAwMzg0M0JDOENFQkFCQ0E1QjE5NUMzMzhCMDlFRUZCNDI5RQorOjEwNUQyMDAwMkMwOEVFOUJDQTgyN0UxNDdFOTlDRENCOTcyMDFFNDkwQgorOjEwNUQzMDAwQTczQTk4RjY1QjA3RTMwMjdFMUE0NUMyQzZFREIyMjM4NgorOjEwNUQ0MDAwRkY4NjJEQjhFRjQ5RjlGRDJEODg2QjU1QjZGNkM3N0Q1NgorOjEwNUQ1MDAwN0YzODM2MENFM0E1RjNFRkE2RjNGMURBRTkzODEwM0YwQworOjEwNUQ2MDAwM0NERDZDQzE3MzAxOTA3RTAzNzU2NTE5QTU2NUE0Q0ZGOAorOjEwNUQ3MDAwRUVGMjIyM0FBRTUyRUFGNUFFRDFFODQwOTM2Mzk0MzVBMgorOjEwNUQ4MDAwRTY1MDdEMDE3MDlCQTNBQTRCODBGRTRFREFCRDZGQzAyQQorOjEwNUQ5MDAwM0M5QzlCNkMwQUFDN0ZDRUE2OTc5NjgyRkRFMkY0NzU4NAorOjEwNURBMDAwMzU4MzdDQTgyRTYzRjM0RDZGQTVDRkQxQ0U1MURFODIxMworOjEwNURCMDAwRkVENUFEMzY4NTdEOEZDM0FGOTREMzE5ODdDMzVDM0VDNgorOjEwNURDMDAwRUZCOTVCRDhCQzFEODMyMjYxQTBDRkVBNjUxNEFFRDBDOQorOjEwNUREMDAwMTY2Mjc0MEYyMUQxOEIyMkYyRDUxMTU4QkY1QkNEQzI1MAorOjEwNURFMDAwNzFGQkNEMzBGMTg1ODlGRUI0NzU1NUYyNzU1NTJFNjM4MgorOjEwNURGMDAwRUIyMjlDOUZFOEI0QTIzMDZFNjUyOTVCRTcxQ0MyREVGMworOjEwNUUwMDAwMTdFMTM5MUQ3RjJFNUY0RkE1RkEyMjk2NzM5QjZEODY5MQorOjEwNUUxMDAwRjFCNzE2RURFODg0RjlFNDE3Q0IwQTlFMTMyMUVDQkUyNgorOjEwNUUyMDAwQzM1Q0JFQUVEQzQ2RjZCRERDRTIxNzExNUVBNDRFMzdBNQorOjEwNUUzMDAwNUY4Q0FCRUFFQTk0QUY0RUZGOTYzMjE2NUMwQTAwMDcxRAorOjEwNUU0MDAwRDhFOEI4Mjc3RjJDRTM3RTRFRTEyNkUzQkE0RUFGMUU5QQorOjEwNUU1MDAwQjZCRDk1QjY3RkY0QjA4Q0ZCREU3QjQ1RkZGMTNDRjQxQworOjEwNUU2MDAwNDc2NTg1QzkxRkZGQkI1MzQwNEVDRjZERjQ4MzFDREZEMAorOjEwNUU3MDAwNTNDRUUwN0ZGQTY2MTIwMTdBMTg3MjI0OTgwRUYwMUU1MworOjEwNUU4MDAwNzIyNEM0Q0I1QURDNEZBNzAwMTE3QUU0MUU5RDFGNzUwMworOjEwNUU5MDAwOTk5QTA1OTA5N0IxQzFDRkNFMDMzOTUwQzZFRTIzMUYxMgorOjEwNUVBMDAwQTQ5RjM3OUQ1RjQ2NzM1NjA1RTQ0MzY1OTZBNTU3Qzg4MgorOjEwNUVCMDAwNzhCNUFCQTlGREM4NjNEMzQ1NjgzRkZDRDhCREYwOUQ1QworOjEwNUVDMDAwNkNBMjVCMEY2RDk3M0Q4M0Q5Nzk5NkMzQjQxNUZBRDU1MworOjEwNUVEMDAwOUQ3QTEwRjBEMUNBQ0ZCOTBFODE5OUE1NjM3OTE4Q0FGRAorOjEwNUVFMDAwMENDQURGMkRFOTMwNEY4OTRDMjg4OUNCODM5RDBGOEY1OQorOjEwNUVGMDAwMUQwRDcyMDU1MzlFNEFCMDhDOTI5MkRFNzI0M0Q3N0Y3RAorOjEwNUYwMDAwMzhFRkFGMEEwOUZBQjkzRDhBQzEzRkRGRjlGMEY1QzNBRQorOjEwNUYxMDAwQzE4RjVGMDc3NjYyMkFEQ0M3RTZGRDEyRjI3NDU0QkZCOAorOjEwNUYyMDAwODg3MDVGNjc4RERBOEI2OTdEMTVCNTFCQzE3RTU5NUZGRgorOjEwNUYzMDAwRjRCRTA4N0NCNzZFMUZGMTAzN0Q2NDA0RkZDQkE2QzdENworOjEwNUY0MDAwRTMwRDZFRjZGQjNDOTI0QzVBODBGRjBGMEUzRjM1MDk3NQorOjEwNUY1MDAwRjAxNDM5NDBFRDRFREFCRkUyMzdBRUM3OUM2MDBGRkQ1QQorOjEwNUY2MDAwOUVFNUMxQjRGRkI2MTZGNUY3RkRCOTcyQzJGQjc4Qzk1QworOjEwNUY3MDAwMjVFQzQ0NzNGRkY0MjFEMzMxOUU5N0I3NjkwM0RFRUYxQworOjEwNUY4MDAwNTkzRDQ5RjJERjQwN0I2NzZFMkEyRjA3M0I0NjA5NTI5NQorOjEwNUY5MDAwRUFFQTRGRTdCRDY1RjQ3MjYwNDI2NTBBREIyRjUzMjZEQgorOjEwNUZBMDAwQjFFN0NBMDQ1NkI2RDQxRjc5MDhGQ0Y2RjAyRTI5QTUyRAorOjEwNUZCMDAwOTBDRTc3QzQ2QTc2QUY1ODRCRjExN0Y2MTBCNTRCNEJCRAorOjEwNUZDMDAwQ0I5RkI3REY0QzlGN0Y1QzRBQjUyMDdERkVGMUI1NUY2QworOjEwNUZEMDAwQTRDMEZFQ0U5M0E1MTUxOTAwQ0Y3RENENDZCQjhFQzBDMworOjEwNUZFMDAwNjU1N0Q0MUYxQTY5MEIwN0RDNzQ1RUFERUYxMTg0QTdFNworOjEwNUZGMDAwQzUxNjZEQUJBNDc1Q0I0QjJFQjA3MDdBRjkzOUFCNUI3RgorOjEwNjAwMDAwREI2NzAwOURDRTI5OTIzMTZDNkY1RUVGRkI1QzlGQ0MwRAorOjEwNjAxMDAwQUVFQjlFMDRGN0VCRTdBQjg0QzVGN0MzOEZBMjUwOUVBRgorOjEwNjAyMDAwQ0I0NTQ2QkVEQTg5NDJDN0JEODlGOTI3NjEyOUYwM0FENgorOjEwNjAzMDAwQzhFNTcwNzE0ODg2NTczNDc5RDYzQUE0RjIyOTkwNjczQQorOjEwNjA0MDAwN0ZFMjc2MURBOTlEODdFN0M4OTBGRjJENjAwRjc1OTdBOQorOjEwNjA1MDAwMjdGMjlCNEE1RDBFRUM3RjdBQ0IyRDFGNDA5QzdBNEUzNworOjEwNjA2MDAwMURCM0Y3RjNCNjdDMjkyMDNFQThERDk3NERDN0NGMkI5MworOjEwNjA3MDAwQzVBQjA2Qzk5QzY1NjFGQjQ4QzA0RkExNDgxNDA1RTY0NQorOjEwNjA4MDAwRDM0MUMwNEYwODUzRkRBMzg3ODMzNkVFN0ZGN0ZEMjUyQworOjEwNjA5MDAwNkUxQkYyNjEyOUQ4Q0VCQUY1QjhGODdBNzJGRDc0M0Q1QworOjEwNjBBMDAwMDlGNDc0MDlGRkVFOEY5RUY4RjJDMDM4ODBGRjMyRTZFMworOjEwNjBCMDAwMjJFNTg1NEYwODc2REQzQ0YyRDRDQjlCQzc1NTMwMUVEOAorOjEwNjBDMDAwRDhBRjZFMkY4RUVCMkVFREMyRkI1Q0NDRjIxRENDNzlERgorOjEwNjBEMDAwRTBEQkFEQ0U3M0EzOTk3RjZGOTRBN0JERUE5Q0FFQ0NGNQorOjEwNjBFMDAwQ0Y3MzRERjI2QUE0QURFMzQ2QzRFRjFFNzZFRjM1NjQ3QworOjEwNjBGMDAwQzQ0MkJCNDA0NDg1RERGQjE5RDFFRUE3QUU4NTdFMjNBQgorOjEwNjEwMDAwREMyRTJGRDA0MUVCRjBGNzRCMDAzRTZCQjlCRDMwQjcyMgorOjEwNjExMDAwOThBMEJGM0EzN0E3MTNFRDg1RDk4RERDNUU5MEZDNEQ3MgorOjEwNjEyMDAwMjA2NDlENUJEMkM4MUE5REZEODBBNjEyQjhEMDhEREM3QworOjEwNjEzMDAwNUVEMEY0M0ZEN0RCRDVCRUNFNjZENEFCOERFQ0JDNUY3MgorOjEwNjE0MDAwOEY5REExMzJCRDlBRTc2MzdBQkRCQTk5N0U0N0UxQzRCQgorOjEwNjE1MDAwM0M1NjZGOTczMDNEQUU2Q0UyRjYwM0Q3QzMxOUZDQkJEQgorOjEwNjE2MDAwOTlDRDRDNUY2NTgwMURFMTgxMzQwODE1RjUzMkVFNjFGMworOjEwNjE3MDAwNjVDNUVEOTY3RUM1NEM1RjY2QjRFRTQ1QkRENjAxM0Y2NAorOjEwNjE4MDAwMkUzMzA2RTQwNkQzOTc4M0RFM0VBQTAyOTg3Q0Y0NzE5MAorOjEwNjE5MDAwMUI5NUQzOEZGMzc2OUY5N0RBNjdFOTcxRkI2Qzk1QzhFRgorOjEwNjFBMDAwRjc5QjA4QjMwRjMxRTc5RkNFRjMyMUU4QUZCMzFCNzcxRQorOjEwNjFCMDAwRjBGOUVEM0Q5QzdFMTNDOEQ3OURFMTAyM0M1N0FFRjE0RQorOjEwNjFDMDAwMkQ0NjNGNjkzREI3OTRFNUFGRTRENkIxN0Q3MkI3QkZDOAorOjEwNjFEMDAwRUEyOUZERjlCMzc5NkU3NkVGRDAzQzhEQUVFQUEyM0VBNgorOjEwNjFFMDAwMTgxN0VGODU0MDM5MkU2MzdDNzEzNUI1OTczMEZFQzRBMgorOjEwNjFGMDAwRkRBQjZCNUMzQ0FFQzFFOTI3OTkzRUQxRTQ5MDlCMDRCQQorOjEwNjIwMDAwM0NDNTE0QkUxRjQ3OUU0Mjc5QUQ1MjdGMDlENkY2NzEzOAorOjEwNjIxMDAwQjg2MUMwRERDMEVGRTE2OUE1MzBGRjc1RTNCRUMyRkMyNworOjEwNjIyMDAwOEZCQzI0RkVFMjlGMzUzRkYzNUJDQTc1RjdBNEEzQ0M3NQorOjEwNjIzMDAwMEZFRDE0MTM5RUVGQzlGMUIwRjg0Mzg3NDQ5QzAwQ0ZEMworOjEwNjI0MDAwOTQzMEJCNDcyRUE1NEM0RUQ4M0ZENUMzRUNFQ0NGMzk4QworOjEwNjI1MDAwRENENjhEN0IwQUNGNjcyNkQ1Q0YxMjUxMkQwOUY0QTk0NAorOjEwNjI2MDAwQTY2RjVCMDFDRkQ3RDBGRUVFMzc5QTU0RjREMzIzNDEwQgorOjEwNjI3MDAwMEJDQTU3NzY3RTMxNENCQUQwOEY1NDhCNjQ4QzFCQjZDOAorOjEwNjI4MDAwNUFDMzc2QzBDN0ZBNTI4RTU3QUZCRDFERUVCN0Y5RDZDNgorOjEwNjI5MDAwNzhBMUYwMDAzQ0FGMEU4ODExMjExRkYwMUNGMThFNjQzNAorOjEwNjJBMDAwNzExRDNDQjc3QzlBRkFFRkZBRkQ4QUUxMUU5MUMzNDk1MQorOjEwNjJCMDAwQzExRkU2Q0I2QjY2RjRCNTZFOUM4Q0YzNTgzMzNBQUJEQQorOjEwNjJDMDAwREQ5MkFGOTdCRjAyOTc5RkVDOUNEODlBNzFBRjIzN0Q2OAorOjEwNjJEMDAwNURFRUZDQUFFQTlFQzU3QjNGQjRFN0E3MzYzRjVEMDBCMgorOjEwNjJFMDAwNzA4RURGN0YxMUU4RjMzQzQ1NTVERERGMzZFRDQ4QjBCOQorOjEwNjJGMDAwNEZEMEQzMEU3RTk0MEJGQ0MwQzgxRDg2N0Q0RDhFREYyMworOjEwNjMwMDAwMDkxRUQxMTA3NzAzRjk2QTQ1RTcyMjMyMDBFMjRCN0I4MAorOjEwNjMxMDAwQzY0NzNDRjAxRTU5QzZGNjZERTdGMzdEREJDRjc3REM1MAorOjEwNjMyMDAwODJFN0M5NDc1MkIyQjIyNkMwRkI2N0Y1QzZGM0VBOUZCRgorOjEwNjMzMDAwRUQ3QzdBMDA4QjZCNDQwQzc5QzJGMzlGRkFGOTA4QzNBOQorOjEwNjM0MDAwRkU3MDgwMjg5OTYzRjkxNUFDQzBFRkFGRkI1NTlCMjUxMworOjEwNjM1MDAwN0VGRjgwMENCRjU3MDA3MTc2RTBFMEMxNzBBQjYyMDczMgorOjEwNjM2MDAwOTYyRUUwNUY1QTdBNDgzNzk2NUU1MDQ3ODNDMTRGRjJDNworOjEwNjM3MDAwNjM5OTQ5ODI1ODY2OTE1QTJDN0QyNDhDRTUwMEQyODExQworOjEwNjM4MDAwNjUwRUY4Qjk4MzQxMkY3NDYzQTkxMEFGNDg3NDcyQkZDQQorOjEwNjM5MDAwODBGOEIxNUU0ODgyNTg0QTgwQjc4Q0Y4QkU4NEI0Q0I4RQorOjEwNjNBMDAwOEVGOTFCQjA3RjAxN0M5RkVDREM5OURGNTNCOUM0ODM2RAorOjEwNjNCMDAwRkM1RDdCMjVGQjFEMjNCNjVGMzFERDEzQjhDNzgzNzhGOQorOjEwNjNDMDAwODhBMkZDOUVDRDQ1Rjk5MUU3NDY3NEMwRjlBMzdCRDYxRgorOjEwNjNEMDAwQjI3MzJGOUE3QzQ3RkY4NjdFRTdEOTc0QTYwRkQ0OERCRgorOjEwNjNFMDAwMDJDQUIxMTVDRUE5REY0NTc4QjY1QUNGRThGNzFCODhBNworOjEwNjNGMDAwREQ1RTA4QkYwRkEyOEQzQjlCQzcxOTY2NzMzRDA4RTFBOAorOjEwNjQwMDAwNkU3NjdFRDA4RkU3OTM2NjQzQkM0MUQ3NEU3QURBRDk1OQorOjEwNjQxMDAwQkQzNERBMzhBMkYzREFBMTdERURGN0U5REVDN0ZDRTg5NgorOjEwNjQyMDAwNEE5MzFGNzA0OUZENkRBQUNGMzFCRkZGMzU5RDUwNTY2RAorOjEwNjQzMDAwM0MxRUY3RUM3Nzk1NUNBNDU3QUVCRjI5NDEyOUY4NUU2NgorOjEwNjQ0MDAwQjNFRDA0RkE2M0UxODkwMTNENUM5RUUxN0NBMEU5OTUyRQorOjEwNjQ1MDAwMzlBNjdDMEY3MzM5NDdFMkZDNjExQTg3NkFDMDM0Mzg2OQorOjEwNjQ2MDAwRDc4Qjc3NEFFOEY4NUJCQjlGNTRCQkJGNjc3RTIwMjQ3RAorOjEwNjQ3MDAwNjdCM0Q3N0M4MDQ3MkY5Rjc3OTg2Q0E5QzhBNkU1QTdGQworOjEwNjQ4MDAwNTBEN0M1Rjc4RkE2ODY1RUYyRThGQzExNkZBMDU2RDRGMAorOjEwNjQ5MDAwREY3N0IzOTBGM0UzNDQ0QjZCMzlDOEI5RDMyMUUyMDdGQworOjEwNjRBMDAwM0Y2MjNFQTlGNTdDMDdFMkY5NDcyRDI4RTcwNkQyNzkzRAorOjEwNjRCMDAwQ0JGMDdCMkZCMEMxOTE4RTc1MTU3RUVGRTU2QzNEM0IyNworOjEwNjRDMDAwMjc3NDhBREYzM0ZDMTREQzQ3NDNDQkJGRjA3Qjg1NDc1RQorOjEwNjREMDAwQjYyRDlEMEE3NEYwMzlCRjVGQjg2OERGRUEyMEM0N0QyRAorOjEwNjRFMDAwNDY3NjM4Njc4MURFMUZEOTMxQkUxQURBNDdFRUIyQjE3RgorOjEwNjRGMDAwREZGMUUxNzI0MjlCMTcxQzczNzdBNEUzMzk3NkQ1OUVENgorOjEwNjUwMDAwMEVGMjg0QTBERTNEREJFQTg4QzBFRkZGOUNFREIwQjA2OAorOjEwNjUxMDAwN0I1NThCNDVCQ0JGMENBRTIxQjRGMEY5QTVBNkMzRjdFMworOjEwNjUyMDAwRkVGMzg3NjA4RjdDQ0VFNUM5MTk0RjFBQzM5N0E0MEE4MgorOjEwNjUzMDAwNkEyNkE0QTUxMDNGRDgzNTFCOUM4QkYwMUM2NDk1MkJCNAorOjEwNjU0MDAwRjJENDYzOTk5MDFGNkVGN0FGQTBERjNGQjBGN0E1NUM2MAorOjEwNjU1MDAwNzhGRUE4NzMxMTk2N0ZEOUZDNDEyRUM4QURCM0ZCM0ZERQorOjEwNjU2MDAwOTAxM0QxNkQ4RDE0OTUyMTNFQjU2MDlGMjBDMkZFNDlEOAorOjEwNjU3MDAwNzlDNzJDMTlGNjQ3QUE3NjFGQzBCODcyOEQzNzg0RURGQgorOjEwNjU4MDAwMEJEQkY2NjI3REMyRUVCNzcxRkY2NDcwQUE4MkYzM0E0QworOjEwNjU5MDAwOUIxREMyMzg2RjYxOUIyRDBBQkZDN0IxQTcyMDdDNzdCNgorOjEwNjVBMDAwQzI3REZCNTRBNjY3MzYzODVGQzVGMTFGNzVCRUZBM0E0NworOjEwNjVCMDAwQzI2NUIzMERDRjdGMUNEOEZDMUIxQ0Y3Q0NGRTk3RjgyRgorOjEwNjVDMDAwN0MwOUU2MEI5RTRERTkzOEZFMTNEMDVGN0JGOTc5NENEMAorOjEwNjVEMDAwN0JBNzQ3MUYwRjk2NTIwNTgzN0MzREVCRTZGQjVFMzk5OAorOjEwNjVFMDAwOTdFOEM3RjMwNTg5QUJEM0MzRTQ1MkE3MDdGNkNEQUE1MgorOjEwNjVGMDAwM0ExODFDRkU2MjhEQ0E2MDQ3MkVFODEwMTRGODNEQkRBMworOjEwNjYwMDAwRjJEREVENzgxRTcwQzEzRTNCOUU5NzU4MDBGMDAwQjg1OQorOjEwNjYxMDAwNTE3ODIxNUNEQTBFRTBGQzBCMDAyRUZENjAxREVGNjI2QworOjEwNjYyMDAwM0U3RUUxM0UwQTk3NTFGMTc1MkY3MDg1OTA1RkI1RjU3QQorOjEwNjYzMDAwNTIzOEIwNzVFRkI5MTQ5RTQyNDYzQ0I1QkQyRDQzNUM0RgorOjEwNjY0MDAwNjZFMTNFMDFFMUI3NzAzNzlCNDdENTNFMzZBRjA5QkJFNworOjEwNjY1MDAwNjcyMUZFQ0ZFQzI3MEFDNDVCNEVFREZERTA3MzU4Q0ZGNworOjEwNjY2MDAwRDlGRDc2QkNDRjU3OUIxN0RDQjdFMDI5MDFGRTYxNzREQQorOjEwNjY3MDAwNEFGNjMxQjlBQUQ5REQzNTkxMkNGQ0REODE5RUY2REREMworOjEwNjY4MDAwRUM3NzQ5MDE2NDI5OTQ1RTQ3RUU5Qjg2RkI4MkE1NDAyNgorOjEwNjY5MDAwQkNDMEZGREU4RTExRUNGNzA1QzNCOTAwRDczREUzQTMwNAorOjEwNjZBMDAwQjkzMEVGMzNEQUVGMjM0OUUxNUNDMDhCREYxMzJBNERCOQorOjEwNjZCMDAwRDVFMUUzQjMxMzJGQTE1RTJDMTI2QkZGRkMyMEYwRjFBOAorOjEwNjZDMDAwRjNFQzc3Mzg5NjdFQjg0MUQ0QzNFMzNBRjg0MUFBMzE2NworOjEwNjZEMDAwMDBCN0I3M0MwOEI3OUVGQjVCQzIyQzVGOEE4NDkwMUY1MworOjEwNjZFMDAwQUIzODNGOUU2REE3N0UyNzVERkY2NzZEMkY2MEZCRDk5RQorOjEwNjZGMDAwNkM2MzdFRDU1RkRBMEVBNTAzREMyQUY5NzkwQzEyQjkzQQorOjEwNjcwMDAwMDVFNTExODU0QkIzM0Q4MTlFRUYzOUQ3MTY2MUU3MTUzRAorOjEwNjcxMDAwQ0YwOUZDM0VDRDI3MzRCOEQ1Q0FEMzBERkI3QzRDMUUyNworOjEwNjcyMDAwRTY2Q0M5M0Y4QzdFNDYyNEYxMzk0N0IzOUQ2NEJFMkY4OQorOjEwNjczMDAwMzU1OTNFQzA0OTJFQ0YzRUU2Rjc3NDY5N0E3N0JBMjdCRAorOjEwNjc0MDAwMzQyQkI1NUZGMkYzREU5NTJEMzVCOTAwRUY0QTM4MUJENworOjEwNjc1MDAwODlGNzlDMUVCODAxRTIxNTc4NkU4OEREOTMxQTA1Rjg1QQorOjEwNjc2MDAwOUNFQUI5MDdGNUE1MUIyMENGRjQ1NDFBQUJEN0E1NzY0MAorOjEwNjc3MDAwQUUwMkJCRjY5NDc2QUZBQUZBMUE3QjNGOUZCNTZGODI0MgorOjEwNjc4MDAwNzZEQUZGMzk0RkIwMzY5NUQ5RjcwMkZCN0QxRjZCMUFDOQorOjEwNjc5MDAwRkM0RTgzQTYzNzkyQzNDMUY4M0IwRDRGRDNCNTAyNUNDNAorOjEwNjdBMDAwRTg3ODNGQzFGMTI0M0FERUM4N0Y3RTNDNEQ0RUZGRDNFRQorOjEwNjdCMDAwRTNEOEZGNjdDN0QxRjQxN0YwMjdBNDNFMTJCRjdGQzQwOAorOjEwNjdDMDAwRkYwNEZDRkVCQkVGOTNGMDVDMDM1RjVERDgzQ0I4MDlBRgorOjEwNjdEMDAwRjZEMUNFRkJEODNEMzBCNkQ2RTUwNEY0RjlEQzREMUIzRQorOjEwNjdFMDAwMTJGRUZFNUI0RjlERTdFNUM4ODMyOUJGRTlGOEZBNDgzMgorOjEwNjdGMDAwMkFCM0NCOEY3MDM5MEQ3RkIwQkYwNTc3RTVBMDVENEMxNAorOjEwNjgwMDAwRkY1QUIzMzA3NTA5RkRFNzYxRkMxRUYzMjIxMjQ2RkIwNworOjEwNjgxMDAwNzQwNEU5QzBCMjk4NzQ2MjM5OEE3NDYzODlEQkNDODNFQQorOjEwNjgyMDAwMjE1NEVBQzdGMkFGRTU1RDYzNjFGMTBCRURBMTI3NTM5NworOjEwNjgzMDAwNDRDQzNCNzgwREU0RDBEOTQxQTFBN0UxQTJCNjE1Q0U1NgorOjEwNjg0MDAwNDVEN0MwRkNERjQ4RjU3Mjc4NDUwREJGQjc0MkY0QkZBRAorOjEwNjg1MDAwODdBMTgwM0QzOEM1RDc5NzNENDhCQ0QyOTk5RUJDOTc0QgorOjEwNjg2MDAwMDJCQ0NGRjZFRDU0NUM1RkIyREY1MTVCNjJCQUY3ODZEMworOjEwNjg3MDAwOUQwQkQ3RTA1MDQzM0EzMDhGRTRCNTJERjdCQzMxOUNFNworOjEwNjg4MDAwQzJGRkVFREQ2RUI0OTM4NzZFNjk1QzAyRjJGQzZFRDJERAorOjEwNjg5MDAwOTkwNUU3ODQ4N0YyN0I0NDQ4MUJCQjBGNDdCQjFGNjQwNQorOjEwNjhBMDAwNzg5QkNERjgzQkMyQTZERkUzNTlDMDdGM0Y2QjgxRjlFRgorOjEwNjhCMDAwRjdBOUY4MzlEQzE2Nzg5MDIwMUZDMzdDOEVGN0FGQTlCMgorOjEwNjhDMDAwODlFRjdEMjFDNTg5N0YwRkM1N0M4RTc3Nzc4Nzg4RjkxMQorOjEwNjhEMDAwNTFGNzQwREU5NUNFQkYxOEJFQTNENjY2QTQyRkU1REZFNAorOjEwNjhFMDAwMEFBREJBQkFFMDY3RjEwOEI3MjNCMDUzRThGRDlERkZERgorOjEwNjhGMDAwMEI4MkQ4QjJCNDAwODAwMDAwMDAwMDAwMUY4QjA4MDA5QgorOjEwNjkwMDAwMDAwMDAwMDAwMDBCREQ3RDBCNzg1NEQ1QjVGMDNFMzM2MAorOjEwNjkxMDAwNjc5RTk5ODQ5OTY0OTI0Q0RFMTMxRTIxQzg2QjAyMjFGNAorOjEwNjkyMDAwNDVBNDdBMTIyMjQ2QTQzQTNDNkFDMTVBOUM4MDQwODAwRgorOjEwNjkzMDAwQkNBMDY4QjFDNTlGODE0NDA4MTQyNUQ0ODg0MDAxMDdENAorOjEwNjk0MDAwNDRDNUZBRThBNDE3RTU2MUIwMDM0NDQ0OEJCREExNUFERAorOjEwNjk1MDAwMkY1MjJGMUQ5MDFGMTExMTQ2NkREMUY2NkFGREQ3NUE4NworOjEwNjk2MDAwN0JFRjY0NjY0ODBBRjRGQURERkZGRkZFRjRCMzg3N0QyRgorOjEwNjk3MDAwRjYzRUZCQjFGNjdBQUZCNUY3MEM3NzI4OENBNTMyRjY2OAorOjEwNjk4MDAwODJBMkRDRTMxREM0RDgzN0Y4Nzc1M0Q3NzNBQTVEQzc1QQorOjEwNjk5MDAwRDgwODA2N0Y4RDZDNUMzMTYzMERENUFBN0QxNTk0MUFERAorOjEwNjlBMDAwMDI1NjRERUY4NEE3NUQxNzUwRjIxOUNCNEEyQzMzQ0YxNgorOjEwNjlCMDAwODUzMjczRThFQ0ZEREM4QzhERDU4RjNFRUM4NkY2QzYxNworOjEwNjlDMDAwMUE3NUI4MDlDQUVEREJFNjc2MThGMDdCOTdDQTRDMzAyOQorOjEwNjlEMDAwNjQ5NjAzRkE4NTMyQ0JEMDA1RkE0MUI5RDFGRTFCQzdDNAorOjEwNjlFMDAwMEMxOEJGQzAwNkVGQTE5RjFDM0IwQkI4QTFERkZENUJERAorOjEwNjlGMDAwRUZENzYxQjlBMTlFQjE3NDFDNDdGMTc1QjhFOTNCOTUxOQorOjEwNkEwMDAwM0Q4NUQzNjJEQUY4QTIzNEM2RjJGMDlGMzA4RUNBNTZDMgorOjEwNkExMDAwN0ZBQTRGNjJBQ0JDRTZCNDI1NkM4M0Y3RTFDQUYxNkM4NworOjEwNkEyMDAwMDg2M0E1RjY3QzVBQTdGQUZFQUQxRjYxNzlDQkEyNTM4NQorOjEwNkEzMDAwMEUxRjhDRjdDNkQ2RTU3RjE4MEJGRDE5MDIzMDJGRTgyNAorOjEwNkE0MDAwQTJGMEVCODZFMzYzNjFCQ0M4NTYyM0RCQzZCQUUwOTBENAorOjEwNkE1MDAwQkI1ODNEMTUzNkQzODBFQzFCRjgyRjdCNjE2Q0Q5QzgzMQorOjEwNkE2MDAwQTA1QzI4Q0FGOTM4OEZBODdBMjgwRjE3RTMzMzM2ODUzNworOjEwNkE3MDAwODVEMkIwNUVDQ0Q3QTkzMTA2RjM2NDc2OUJGM0NDNDBDNworOjEwNkE4MDAwQzY2RUIyMkJFQzlCREU1REU1MTFBMkJDQzNEMDVDNjY4QQorOjEwNkE5MDAwODU3OUVFRjg0RkM1QjMxNEFBMEY2QzlEOTU4N0VCQkJCMworOjEwNkFBMDAwQjRDNzk3Njc4Nzc1MkMzMjI3MEQ2MUJEMkVERjNGODNGMgorOjEwNkFCMDAwREQyREY2Q0Y2RkQxQjlGMDE5QjIzMDU3NTdGQjAxREI5RQorOjEwNkFDMDAwRUI0RDNFRThBNzcxMDlGMzlDRUVDNzk4MzlEMDZFMURENworOjEwNkFEMDAwODhGQjc4RDhFMDgxMjI3QjQ4NjE1MzgyNTBBRkRBOThGNgorOjEwNkFFMDAwMTY4NDcxODYwQjdDODk3RjNFQjRDNEZEQkJCRTg2QUUyNgorOjEwNkFGMDAwNzExRkZBN0FEMjE0RENERjQ4QTI1NURCQTY1QzNFMkY2OAorOjEwNkIwMDAwRjk5RDZBNzdGQjcxN0YwREQ5Q0M5MzAwRTMxOTlDMUQyOQorOjEwNkIxMDAwOTk3NkY4NkVFMDJFQTNDNzA2MjAxQkZCRUI0MUJEQzJBMQorOjEwNkIyMDAwMzBFRUMwODM1Mzk5M0I5MUMzMEJFN0FCMkUzMjdBNEVDNAorOjEwNkIzMDAwQTczMDY2NUFFNEY0QThDM0IxOUQ4REYwRjEzMzlCMzFDMAorOjEwNkI0MDAwNjA0MkY4MkZGQTc5MzNENjM3NkMyRDcxQjlBM0YwN0FGOQorOjEwNkI1MDAwRjkxMkJCNDc4NTc5NkU1QTYyRjZBOEIwQzBFNTYyN0QyRQorOjEwNkI2MDAwRjFGM0NCNzFFOEJDMDFGOENFQTg2MzNFQUM1RjAwRkI0QgorOjEwNkI3MDAwODA3MDVDNjA0RkEwRTc3QzUxREVBQ0ZBMjdFMkZDMzcwNgorOjEwNkI4MDAwMDNGRTJDNDU3QzVEQzhGMTc3NDE4NjM5ODA3OEJFRTBGNAorOjEwNkI5MDAwOEQzRUU5QUMxQkJBOTJDRkE3OTdCODNDN0Q2MTFFOUI5NgorOjEwNkJBMDAwMTY0RTc3MzFGOEI0NzQ3RUJCRTUxNjU4RkY4MjQ0QjNCNQorOjEwNkJCMDAwMURGMTUxOUY1NEYwRjg2OEM0RjczNzBEMENFOUFBMjE3NAorOjEwNkJDMDAwQjFDNDNEMjNBQTNGN0REMjQ4MTdDMjQzQUZGMzY3MzIxOQorOjEwNkJEMDAwM0I2MzJCRUNEMzJBRDQwQ0M0MTdGRjQ2RTY2MTZDNEQwMworOjEwNkJFMDAwRjNDREJDOUNFOENGNTRBMEZFRjFFNjVCNzkzOUQ1QkY2QworOjEwNkJGMDAwNTE4MUZBMjc5QUJGQzdDQjM5RkU0QzFEOTQ5RjY5OUVERAorOjEwNkMwMDAwQzBDQkZERkMxQkIxRkNFQkU2RUZGM0YyNjA5ODQzMjYzMgorOjEwNkMxMDAwNjNCQjlBQTc1NkY4NjFGQzA2ODM2NzhBMDdDNjdEMTE5NQorOjEwNkMyMDAwRTYzRjA4RTYxRjE0Q0YzRDc2QkVBRkIyRkUzN0Y4MUUzMgorOjEwNkMzMDAwRTBCRDUzM0NFM0VCNUYxNkRGRURFRUExN0VBRkE4NkY0NgorOjEwNkM0MDAwRUJBMUZGNTdDNTc3QTExRUJFM0YyMEJFNkJFRkUxRkI1NgorOjEwNkM1MDAwNDNFMkJCQzMzREQ0QkYyOUVBOEZGNEQwRkZFRkM1NzczMQorOjEwNkM2MDAwMUQzRDdDRkYwN0YxREQzQjNEN0NGRkFFRjhFRTU4MEY4QworOjEwNkM3MDAwRjVDNzQ1RkRGQjcxRkQ5RjEwRURDM0UyN0Q3NjYyRDM0NAorOjEwNkM4MDAwNzEzRkUwNUQzNkYwMkRGQzJCNEM2QzRBNDZCQ0RCNTQ2QQorOjEwNkM5MDAwNUY0Q0Y4REYzMDAyRjA3QzUwMTdCRTY3MkJDQzhCRTVFMQorOjEwNkNBMDAwMjEwRTk1RkExQjgyRkMxODlFNkY4QkZFNEJFN0Y3NUQ1OQorOjEwNkNCMDAwODM3OEI3RTAyREJEMDdGMUIwNDFGMTFDRjM0MUZGRkUzMQorOjEwNkNDMDAwRjkzQTBGRjJERDA1NkZFODM5OUVDRjU3MDMyQzhBQkVFMworOjEwNkNEMDAwREY4RTlCRkYxNjMxQkY0NjMxREZERkQ5N0IxM0RERTQ0QQorOjEwNkNFMDAwMkQ3Mjc5QzY0QjdFODk3NDZGOEYyRDlCODE5RTM0MThDRgorOjEwNkNGMDAwQkZEMUM5RTU0QkUxRkMzMjczN0Y5NDFGMjA1RjkwNkZEOQorOjEwNkQwMDAwM0U2NDMzODY0QzMwRkU0Mzc2OTVFQTFCOUQ2NTc2QUMzNworOjEwNkQxMDAwRjdEQjU1OTIzRjBGMzlDQkNDMzM5MEFGREE4MEQ5OTU2MgorOjEwNkQyMDAwQzA3ODc2REU3N0EzNURBRDA4MjBGRjcwOTQ1M0ZERDg2MAorOjEwNkQzMDAwNUY4RkI3MjMxRjZENjQxMTQ3MjlBRTZGMzFDODE1RjhGNworOjEwNkQ0MDAwN0U3RjdEMTlCRENGNzNGQ0M1ODFGQ0Y5NjgzMjVGNTcyQQorOjEwNkQ1MDAwN0JFMjIxNEIzRUI0NTNFRkQzOTFCQzI4QjBBQjI0QzdBOAorOjEwNkQ2MDAwN0EyRkQ2MDVEQ0QwQTREREJFNDA4N0U1MjcxQkI5QkM1MQorOjEwNkQ3MDAwODJCRkM0MjIxOEJGMkYxRjlFRURCOEJGRTRDRDQyOTQzRQorOjEwNkQ4MDAwNjcwRkFCMUVCNzlCQkY1M0EzRTQ0MTVGOTQ1NzQ5MzhDRAorOjEwNkQ5MDAwNkU3MjhDQkNEQTVDQ0MzNEVDRDdFRjMyMDc5RTgyN0UwQworOjEwNkRBMDAwRkJBQUNDOTU5MkRDMDVGNzNDODc5RUNCMTdGRDc4MEZBQworOjEwNkRCMDAwQ0FCNTNFQ0RCMUYyMjlCRjI5NEEzRTMxOTQ5N0IxRjIwRQorOjEwNkRDMDAwMjk1RTVFRTVENDAzN0Y4Q0ZBREVFNEIyQzc5NDJEOEU5MworOjEwNkREMDAwNDQ5MjRGQzA2MzNDREZDMEQwMEI1QTE3REM2MjY1NUQ0NAorOjEwNkRFMDAwRkMzQTVFMUUzNTA4RjkyMEY5NkVDM0Q3QzM2M0U0ODMwRAorOjEwNkRGMDAwRTRDQkYxRjJFMUNBRkNGNUVENUJGQjEzMUUwMkI3NzJDNgorOjEwNkUwMDAwNUY5OUNGQkU4RDc4MDBGODY3RjAyOTI0M0Y5OEVBNzMyOAorOjEwNkUxMDAwNzkxM0FGMEMyRjgzQzE2QkI3REJBRTBDMzc0M0VBM0I2MgorOjEwNkUyMDAwQTQ1NzE4N0MyQUY1N0Y5OTVDQjkwMjVDNjUzQkEzRjlFRAorOjEwNkUzMDAwQzlDREE3NDFBRUZERTVGRDlGMTQzMjIwOTlFNTAwMUJBOQorOjEwNkU0MDAwREFGRjU0NURFMDI5NTg3N0Y2QTJFNzM2NjNGRjU5ODdFOQorOjEwNkU1MDAwQUM4RDA4NjdBMzZCQzZFNjQ2NUM0RkYzRTM4QzAxM0UzRQorOjEwNkU2MDAwRTlDRDFDOUY4QzE5NjU3NkZDNUVENTY5QUVFNDNFNTA3OQorOjEwNkU3MDAwN0VGNkREQkIxNEMwMjc3RDRBQkQ4N0MxQkUxRDdFRjFGNQorOjEwNkU4MDAwQ0RFNERCMTA3RTZGMTk4OENFNEQzQUFGOURGNUExRTlCOAorOjEwNkU5MDAwMTBCRUFEQzhCMTZFNUQ0NTc4RUMzMzIzOUNCMjc3OThENworOjEwNkVBMDAwNDkwRTMwRkZGNjk1MUEyMDc1MDM2QzA3MUI4NUY1NTNDNAorOjEwNkVCMDAwNTY2QUIwRUUxRDRBNjdGOTU2MkMwNzAzNDZERTFFNTg4NworOjEwNkVDMDAwMzRGRTVGQUI0RTExRjU0QzUzNURBNDc3OEFGQURGNTQ2NAorOjEwNkVEMDAwOTQ4Rjg2RjZBQTdEQTAwQTcyNjdDMURBOTc5QTBDMzk1OAorOjEwNkVFMDAwNThBRjkzREY2QjZDMjRBQzE3QzcxMzY1MTVGNkU3Qjk4MQorOjEwNkVGMDAwNzY1MUVGM0ZEODU0MEU0NEQ0NkE5NEUzMzMzRkI2NkZEMworOjEwNkYwMDAwRDVFOTc4RDlERkQ2ODRGREJGNTAyNkJFRjczRkJENTIwNAorOjEwNkYxMDAwQ0JBNkY5RENBNjc3NDBEMUYxN0E5M0VERkFBRUY5QUVDMworOjEwNkYyMDAwNEQ3RUFCNjkyOUFDRUYxMzc3MzgwOTk2QzE2QUI2OUVERQorOjEwNkYzMDAwNEU0M0Y5QkM2MjRBQkQxN0UxODY4OEVGMDU5OUQ4NEJFQworOjEwNkY0MDAwRUYyNjNDRUREQ0I3OUQxM0ZDNTk1MDdCRjFEMERGOTM2RAorOjEwNkY1MDAwMDY0MTU1OUQzRTdDMjgwMUUwNTdCM0JCREU2QzgwRUZCNworOjEwNkY2MDAwNEQwNkFGM0YyQkJGRUJCQjlBOUQ5NUE0Q0ZENEI1MTU3MworOjEwNkY3MDAwRDFCMzlCRUYwRUFCQkRGRkE1RUZDQ0M2QUIxOEVGOTMyMworOjEwNkY4MDAwRDAxRjZBOUY4N0FBMUE3RDdEOTM0RDRGRUQxOURGRkZCMQorOjEwNkY5MDAwRUVENzI3QkZGRkU0RjkzRkRDODlFMzVENzA4N0QzQzZGNgorOjEwNkZBMDAwNDFFQjE1MjE4MDRCMzdERkM5RjZCNUJCMjdEMEYzNTgyRAorOjEwNkZCMDAwODJCNkM2MDFFRjY3MDNFRjIyN0VBNUQ2N0JCMDdERDBGNworOjEwNkZDMDAwREM2Q0Y3MDBBMDJEODY2NjJGQ0EwRDAwN0Q0MDM3QjIxRAorOjEwNkZEMDAwRUJGOTBCNDc1RjZBMUZGRjNFOUVCRTgyNjY5NjMyMUUyQworOjEwNkZFMDAwRjk3OEI1NEE3MjJBNjhGNjI3MEM4MUYyNkFCMDQzOTY5RQorOjEwNkZGMDAwQzI5NDk2MTVCRDNCNkMxMDk2NUZCMjMxQjQ0QjFBQUE4MQorOjEwNzAwMDAwREI1RDgzOTBBRTNDNDY4NkZBRUVFQUVCODMxOTQ4RTdGNworOjEwNzAxMDAwOEQzNUM2MjlEQjExN0Y0MzBCNUMzM0EzRjRBREI1QzlCNQorOjEwNzAyMDAwMDY5QUM3Q0FENzgwRUU4NkMyRDMxMDc0MjhGODdEM0Y2RgorOjEwNzAzMDAwOTAxQjBBRjI0NTlGMTlFRDFDNEI0NjMyRjNFNzYzM0I2OAorOjEwNzA0MDAwREI2QUE0Q0Y5NTA2NUY0NTE5QjZDQkQwOTE3Q0IxRjQyRAorOjEwNzA1MDAwOUI1QzUxMDZGMzcwQTVFQTE0M0RDREEzRkNEODJDOTQ5QgorOjEwNzA2MDAwNkY3NjIzNEE1MDc2MjI3OUZBNkU4NEQzNzNBQUE3MUVDQworOjEwNzA3MDAwRTlGMDM5OUJDREVFODcwQUUwOTExQUYyM0ZCNTlGMzNENAorOjEwNzA4MDAwODA2NTkzOUVENUEzMUNDRjJBMDI3OTFFQTVDNzlFMTBBQQorOjEwNzA5MDAwRkNGMzg0QzM0OEZDNkVCNTI1MzhBMTE0RkFCMTJFRDA5OAorOjEwNzBBMDAwRDlGRDMwREVDQTlBNzUxRDYzNjE5QzVGRDZCQzdDNzRDNQorOjEwNzBCMDAwMjlCQzVGOTVBNjMyOUM4N0NEQTk4NjhDMjA3RjBDREZFQQorOjEwNzBDMDAwODMzOUMyQkM1RjU4RUFCNTIzN0Y4REE0QUE2QzFCRDQ1OAorOjEwNzBEMDAwNUJGQjFBOTkzQjhBNUZEOTA2NDEzOThBNEZBNjM4NTUxRQorOjEwNzBFMDAwQ0QwMkRGN0Y5NUVDRkI3NzA3OEMzQkZDQUQ3N0NDRjhDRQorOjEwNzBGMDAwQkQ2Qjg0NEU4NzY0MTM1NEY5M0UyNzE1QzdGNjYzMUY5MgorOjEwNzEwMDAwMUREQjRGNzI3OTZDQkQ3MzdDNkM3RERBRTREODdBRDc2NQorOjEwNzExMDAwRERCMUU1Q0M3QjYzQ0I1MzI0QkUwMUNGQjE4MTNDQjY1RQorOjEwNzEyMDAwRjIyQTY2MEQ3RkJBMDRFNTJEQzBFNzNEODRCRkI1NDA2NQorOjEwNzEzMDAwRTc0MUY4NTg2QUI2OUY5RDA1RjU1OUM4NEZEMDFFMUEwOQorOjEwNzE0MDAwQzI0OEVFMUVDOEZEQTkxQkY1MDI1MzcyQkREQjMxRTgzMworOjEwNzE1MDAwNzI3ODY0RTU5ODZGQzNGREIyRjU1NUVEMENEQURCREVBRAorOjEwNzE2MDAwRkZFODZCRUNERkM2QTJEQUU1MjM3Q0I0ODgyMzk1OTdCMQorOjEwNzE3MDAwNUQzMDlGNDRGQzg3MUJFMTVERkZFNzA3NTEyRTFFRDU2NAorOjEwNzE4MDAwN0IxMERFNTkzNTJBOERGRkYwNjQ3NzQwQ0ZGNTA5MTc2MworOjEwNzE5MDAwRUEzMzQ5QTI3RDkyNzk3NTg3MUVGODc5RDJGQjJCRTdGNQorOjEwNzFBMDAwQTNERDFCMEZENzM0NTZBRjIwNUQwMjdFNzA3QkJCOTJGMAorOjEwNzFCMDAwOTFGQzU4QTE2MzU1ODgzNzY4MjM2MDdGQTQxRTAxQkZFNgorOjEwNzFDMDAwOTg5NDYyMjQzODk5OTIxNTYxMzdBQTNBQUM0RjEzRkExMQorOjEwNzFEMDAwOTMzMUUzNUUwQkQyRjE0Mzg3MzhGRTNGNjRFNEZENzRFNAorOjEwNzFFMDAwRjZFN0E2NDExMUU1MTlGMkM5OTQ2NDVENEMzRkVCRUM1QQorOjEwNzFGMDAwQTI4RDI4QTczQTc4QjlCNTNERjkzNkE0Q0I3NTkzOTNGQgorOjEwNzIwMDAwODcyMTlFOThEMEVFODJGRTdBNjU5QkI1MDFCMDNFQ0I3OQorOjEwNzIxMDAwMUI0NkJGMDI5REY2NTI1OUJCMDFGNkIyRDVDQUVFRjEyQworOjEwNzIyMDAwQzIzQzM2MUNCNkZBRjVGMERFMzJGMzE3NzZENEQzOEFCOAorOjEwNzIzMDAwQzVCQzVCOTc3OURFNDYzRTEwQTk1NDA5OEU5NkQ0NjY4QworOjEwNzI0MDAwRkJCMDQxN0MwRDdFOTgxRkEyMDNDQUM1RDI3RTJEQTQzRgorOjEwNzI1MDAwRTc1OTRBOUI0OUJFNUI4QTlBOUIxMTRFMUJDNkVCNDg3NQorOjEwNzI2MDAwREY0OEJFNTc0N0Y4NkNDOTA5MUVFRDhCN0U4Mjk5M0FGQworOjEwNzI3MDAwM0JGNjk3MEM4MkRGMDg5RDNDOUFEREVDNDVCRjA5MDM4NQorOjEwNzI4MDAwOThFQjRBMzhBQTYwQkZCNDQyMTgyNzQ1QzBENUU5REM1QworOjEwNzI5MDAwRjkxMzA1RkE0OUMxRkU4NkYwRjYwODI3ODc4MEQzRTg3RQorOjEwNzJBMDAwNjQzN0MxREQyOUZBNERFOTBCRUQ4N0YwN0UxQTRCQkE0MAorOjEwNzJCMDAwRkE5MUZCQjhBMTgyMDU3MDdFNzI1Q0Q5NEY2N0ZGNENEMgorOjEwNzJDMDAwNTM5MEFGMUE3RTA3NzA4MzdENTI3MkNEMzRCOTg3RTYzMgorOjEwNzJEMDAwMzJCMjhGNUI5Nzc5RUJCNzEyNUREQkM4Q0Y5MUU5Q0MwNworOjEwNzJFMDAwMkU0MzNDQ0EzQ0JDNzFBMjZFMDg3RTY3QTU3MTBDMzM2QworOjEwNzJGMDAwNTkwMEYxMzg1MzY1RTYxQjkzNTFCRkYxMTIxQ0UzRTlDNQorOjEwNzMwMDAwMzVBM0JENzkxMkVBQTk3MjVGRTJFOTM3NDM2NTRERkEwOAorOjEwNzMxMDAwRTRDQkU5MzhDM0U5MkMyQjE4RDIwRDNEQzdEMTRCQzZCRAorOjEwNzMyMDAwRTFDODdEODhGNEYxNzRCRDI1RTE0MjExQzI4NTQ1QjdGRAorOjEwNzMzMDAwRDc1RkI5QUNENzA3OEZBMjlGODdBNTgzOUMwMEQwRTcwMgorOjEwNzM0MDAwQzY4REM3RDgzRjRDNTg1Njk4Q0VGRDREMUZFNEZCMEU1NgorOjEwNzM1MDAwRTFCRjAxNzkwNUM0REEzQUNDM0VDNjg2NzQzQTlGMTE4MgorOjEwNzM2MDAwN0U5NUVENUE3REQ3RUZBMEJGNEJGRDhDNzY5NDJCMzlERgorOjEwNzM3MDAwODc5QjNCNTAzRUIyRERCRUZFQjgwRjlCNTRERjEzMDkyNgorOjEwNzM4MDAwNTBCRkU5NTgzQTQzQkVCREQyQzJFRDMxNTVFMDc5QkM5OQorOjEwNzM5MDAwN0M1OTJCRThDNjhENzJDRUY1QUYzRkE1N0UxOEVDOUJDRAorOjEwNzNBMDAwMzZEMDBFQjRCN0Y2MTcxNTZGOTg1M0ZGMDdGNTJDRjZDNQorOjEwNzNCMDAwMDJFOTU5RDlFRDFENEI2RDM4RkVEQUMzNEQ2NjgwQUYzOQorOjEwNzNDMDAwRTUyRERFQkUxOUNBN0UxNUUxNTc0REZFQUMwMzM5QjM3QgorOjEwNzNEMDAwMDg0RUVBNzExMzQzM0MxREFDRDcwMjU4NjY3RkIyMzBBOQorOjEwNzNFMDAwRTRCRjNCNUVCQUJCQ0E4REZDMjc2RDlDMUJGOUQwMzY0RgorOjEwNzNGMDAwNDFFRjAxNjE5RkM1QUY1RjM1NkEzRUQ0MjdFMkRGNkY4MQorOjEwNzQwMDAwNENENjg5RkRGNDlFQUQ4NDdEMUNGQ0E0OTFBRDgyQ0E0RQorOjEwNzQxMDAwNDJEREY0MjZCNEVGMjIyQjgxRkY0MkVENzRCREJCRjZCMgorOjEwNzQyMDAwRTc1MUY2RUQyM0Q2RDI2MDMyREEyNTRCQ0NDQzA3MEFGMQorOjEwNzQzMDAwNzNGNjk3MEFGMzAxNzFFNjM4RkY1MDhBRkMyNzk3ODVBNworOjEwNzQ0MDAwMTQ5NEIzQjlGNUEwRjAyMjVFMkRCNDMyNUYxNEJFNjc3OAorOjEwNzQ1MDAwN0ZBOTUyRkI0N0FDNUEzMDc5MDQ3RjZGMDYzRTYwRTA0QgorOjEwNzQ2MDAwRkY2NENGMjU3QjU5QTU5M0YzMjhENDVGMENDRjVCNEZFNgorOjEwNzQ3MDAwMjJERjYwQ0U3MkFERDMxRUU5OERGODBCNzIxRkM2REIyMgorOjEwNzQ4MDAwMjdENjZEMDAxODFBODZDMTdGMzY1REM4MzRFNEYyRjYzRgorOjEwNzQ5MDAwMDcwNDlDNTRCMzJEODRGQzUyQjUxRDM5NDZGQ0M1QUU3RgorOjEwNzRBMDAwOUU4RjZFODc3NjM3MzFCMTZBNDY3RTU5ODQwQjk1N0YwMQorOjEwNzRCMDAwNkNBNzcyMTZGMDVGRDMzMEQyRkJGRDY4N0ZGQjkzQjhFOAorOjEwNzRDMDAwM0RDMjM0Q0RFRDRDNDM3QTYxMDRFNDZDMzM2QjMyNDNGRQorOjEwNzREMDAwM0JDMjc2QTBCNzBDRDY2MTIxQkRCOTlEQjk5MTFFRDAzMworOjEwNzRFMDAwQzM3NjI2ODE1ODE2NDNCODZFNjJBQzIyOUEwRUU0NTNENgorOjEwNzRGMDAwRkEyNUQ0NDU3QUIyQTcwNjFFQjREMDdDMENGNTJDNjBEMAorOjEwNzUwMDAwNDE3RDA4RTcwNkYwNTYxN0IyODA5QURGRTUxNzFDRTJDNgorOjEwNzUxMDAwNzBEMzc3NDY1NjRGRkFFQzBCNUY5RkM4NDQzRTZEM0RFMworOjEwNzUyMDAwMDRGQUQ4NTBEQzY3MURGMTI5QUIzNTk2RkUxODVCNEE4QQorOjEwNzUzMDAwNzA4QTA4RkNEOEJDQzQ0RUZCREM2OUJGRjlERTExRkJDNQorOjEwNzU0MDAwMUM1RThBRjIyMjc3NjE3MkNDRkVDQTc2RDk1RjY2MzEwMAorOjEwNzU1MDAwREZGMEU4N0UwM0Q0NkY3NkRGNzYwNUZEMzJEOTVGRTY5MworOjEwNzU2MDAwNTJGREU2MjVFRTJCRjRERkJCODdGRTMzMDg4RjdBRUU2MworOjEwNzU3MDAwM0Y5QkVBMzc4N0RFNzFEQzBFQTBEODE0Njk3Nzc4REQ4RgorOjEwNzU4MDAwNURGQTc1M0M5Q0IzMTdDNkYyRTVBMUJCNjNDQjEyMkUyNgorOjEwNzU5MDAwMTY4M0U2OUMwMDMwQjdEQ0E3RjM2Qzg1RkVCRTczMkMyNworOjEwNzVBMDAwQjY1RDQ1RkUxRkM5RkVFRDZBMUY3MjRFQzJGNjYwOUZCMgorOjEwNzVCMDAwNkY4NUI3Mzc5QzhENkRFRjJEN0RDRDgxNzREQ0Q1OUVBOQorOjEwNzVDMDAwQ0ZFRkE2MkY2M0RCQzVFRjRGRkM3QzYxNUVBOURGOEY5OQorOjEwNzVEMDAwOUFENzE4QjMyOUE2N0U0QUU1NjVGMzRBRkQ0MUQ0QkM4MworOjEwNzVFMDAwNkU3MUM1QjZGNzJERUQ3RTVFQjcxNTlBRkVFOUJDNjRFNworOjEwNzVGMDAwQkIzQjQ2NUU1REJCRjg3NTRDQUEzMEY1MDA3N0RFRkVGRQorOjEwNzYwMDAwMDc1M0FFQUVERjFGNTZGREYzNzZGNzJDOEExRkM3NEYyOAorOjEwNzYxMDAwRjhCRTQwQTc4RDQ5ODFGQUU5RjgwQUY1NDU5Qjk1RjQzMworOjEwNzYyMDAwREVDQkVDMkMyMTlGQzZBMUUyMDFERjc5OTJCNDcxRjg4OAorOjEwNzYzMDAwNUQ4NUE0M0JFMTY3MzhGQ0UyNzVFOUM4RDdCMzg0MUZEOAorOjEwNzY0MDAwOUQwOUJGNDI2QkI1OEJGQzBBM0VEMTFFRTQ0OTIzRjI3MworOjEwNzY1MDAwOEJENjFERjA1RDEyOUY1N0I0RkU5NDUyQ0RFRDBBM0JDMAorOjEwNzY2MDAwOEIxMDNENEI3RDI5OTlEOTE1NkU4RjczN0RBN0E3NzExRQorOjEwNzY3MDAwRTJGQjdGMTgxNTQwOThFRjhDNDU2M0Q4MDc0MDg3MkZCMQorOjEwNzY4MDAwMUJFREE1MkFEQTY3NUIxNEQyMDc2Njk0NkJGQTQ0QzAzNworOjEwNzY5MDAwOEY1MTREMEFGOTk1NjYzQ0YwRjZBM0U4OEZCOUZFQjQxOAorOjEwNzZBMDAwN0I3NzE4REVDRjA4MzgzQzM4NkM2RDA3RDMzMDRFOTBBRQorOjEwNzZCMDAwQUU5RjVGRjQyMDNDMUYzQkMwMjg4RTg2RTVGOTg4NkZBMworOjEwNzZDMDAwMzZDRDhERjY0NjI1Q0UwOEZBMzk2RkE4MkZCMjIzREZDNgorOjEwNzZEMDAwRkM5MTRENDNCRTU5Mzk1OTdCOEZENkZCMTU2ODI1RDA5NworOjEwNzZFMDAwNkUyNjVGM0FEQkQ1MzJDMTg4RjE4RUNBQkJERDIzNTFFRAorOjEwNzZGMDAwRUZBOTBDNUEzNDdBOUE5OTZBODU3NTU0ODIzRTg2Q0ZERQorOjEwNzcwMDAwNzQyMzUzMkRGOEI0MzIzMzNFNEI5NjcxRkQyQjY5QTQ4QworOjEwNzcxMDAwRDc1ODA5RTM1N0I2M0RGMzU3RkM2RUI2MUFEQUNGRjVFMgorOjEwNzcyMDAwQzkwMEFEQkJCMkVEOERCRkExQkUzNjUzRjMxQTkxNUY1OAorOjEwNzczMDAwMENEQzYxRTQzQUE5QzA4N0MxQzFEODMyRjI4M0U4NzI5NworOjEwNzc0MDAwNTEyOEI2M0NGQzcwNkNGOUQzMTQwRURGNTFDMjhGNzUxMgorOjEwNzc1MDAwNjA5Rjg5RjhGNkJDOEZBREE0N0ZFRTA1ODE4Nzc2QjI3NQorOjEwNzc2MDAwRkYwNTEzQzk4RjMxRjM2Q0I0NUYxRjlGQjM2RTQ1QkYyNAorOjEwNzc3MDAwREVGRUUzNTY2QTNGRjczOTBCNkZBRjBCQkU4ODY1RkYzRAorOjEwNzc4MDAwOEIwOTY0NjdDRjRCMDk5NjI0QzNCQzVGRjk1QTRGRjA0RAorOjEwNzc5MDAwQzY2NTE5QjBGRjE3MDc2QzVEODVGNUMzODMyNTE4MTdGQgorOjEwNzdBMDAwN0JGOTNBQzYzQUIwNUUwRDBDQzE3NUJFRkMwRkVFQjc2MAorOjEwNzdCMDAwOEUzQzZCMEE2QzgzN0UzRkRFRjNDQzhCM0ZDMzcxOUZBNAorOjEwNzdDMDAwQ0Q0QTU2NjA3RjZFNDBCOTAwRUQ0NjNENjlCNkEyQkQxOAorOjEwNzdEMDAwMzFFQUUzRTdGQjIwREY5OEI3QzMxNEIzQkUxNzUzMTRCNQorOjEwNzdFMDAwQTEzRkI4OTMxMEVGN0FGMjNCOUU1QUY5MEM3RDVGNzg3NworOjEwNzdGMDAwRjYxOEUxREQ1RTgzNUY4NzcxM0NGRjRBOEU2NzdCMkQ2MworOjEwNzgwMDAwREM0RkJBRDc5MjFCQzA3RERBOTdDMkU5RUEwNkREQjYzMworOjEwNzgxMDAwNUZENkEyN0VGOTE2RDc0MzdBRUFCRkQwMzU2MzczNzk3MworOjEwNzgyMDAwMzc3RUM2Q0U3QTE4MzcxRkY2RjlFMjQ3RDY3QkQwMUZDRgorOjEwNzgzMDAwRDc3RjdERUMzRTBEMDhDNDk2NUY0QkUxN0FDMjc0MTY4QgorOjEwNzg0MDAwRjUzRTFGRTdEMzdCQjkwQkU3QjM5NUQxN0MwQUNGQkVEQQorOjEwNzg1MDAwN0Y1NzNFRUFFMzI2QUU4N0M0OEZGQkZCMTQyRTNGN0ZBMworOjEwNzg2MDAwRjUyQkU4ODdGMzE5M0REN0MzMDE2MjQwRDdGMzA0M0RGOAorOjEwNzg3MDAwQkNBMjcwM0QxOEZFMTY2NjAxRkVDRjQzMDVBMjc3RDc2NQorOjEwNzg4MDAwRkI3OTcxRjM5MEZEMkYxNTcwRkFEQzlDQjQwREU1QjkwRQorOjEwNzg5MDAwRDNDOEYxRkVEQzkyQzM4RjYyMUM1M0I2M0JCMzQ0RDMxMgorOjEwNzhBMDAwQ0FBM0ZDQ0FCM0Q2Q0YzRjk0MDFGQjVGREQ5QTRBNzZFOAorOjEwNzhCMDAwQTY3QzVGRkRFQ0MxQjQxRkMyRkJGMzNCNTQwRkFBQkUxNAorOjEwNzhDMDAwRDU1MzlGN0U2NDE0QjY3QjU2MUZDNDc5NjJCRDA2RkRGNgorOjEwNzhEMDAwOUYwRkJFOTY4NEVENjY2RDcyMEM0MzdGODlGQzdFRjYyOQorOjEwNzhFMDAwRkE5QkI1RjIyODdFN0FBREY0MjRFOUJGNUFEOEM3QkIxQgorOjEwNzhGMDAwNDY3NjhDQ0QwMjc4Q0Y1QkFGNzhCMEQ5QkNFMEY3Mjc2NQorOjEwNzkwMDAwN0QwRjc1OUQ0RDdBMEZDNjM3NEE1NEU2RDUwRjIzRDNBOAorOjEwNzkxMDAwN0QzMjNFQUI1QjVGM0E5NDA5RjU3NUZCNDY5NEUwQkE2NQorOjEwNzkyMDAwNTZFOUJDQjcwRDQ2N0FEOTYyMjAzRjU4RkNGRTE4OUQzNworOjEwNzkzMDAwMUM3RkUxRkI5MDBFQkU1Rjc1QTdBRDBBRTMyMkQwNkZGRQorOjEwNzk0MDAwM0I5NjBGMTQ2RUQzQTMxRjNGRTkyQ0YwMzdGRUZFOTgzMQorOjEwNzk1MDAwMEU3OEU2RDlCNjg3ODY4MENEMDI3ODZDNkI0MkZBRDg2RAorOjEwNzk2MDAwOEI4RTBCMUNFNzA1M0RDOTA5MTZFMkVCMTgyNUZDQ0ZGMQorOjEwNzk3MDAwRjNGRUIzQzVBOEMyRjNFQ0Q5NjU0OUE1OUNGRTY4OUY4OAorOjEwNzk4MDAwOTBBOTNCNjE3RDU1NEYwRTI2N0E5REJEM0U5NkJFNjQwMworOjEwNzk5MDAwM0IzOURGMzk4MUQ4RkE3OEJDMjg3MDRBN0YwNTJCOENCNworOjEwNzlBMDAwQzZBRkY4NzYyOUUzRkQ0NkE0QzdFQTQ1QzBDRkEzRThGMQorOjEwNzlCMDAwQTZGQTc0QjMxMUY1QUVGODcxNTA4MzY0NzI1RkY1ODQ2MgorOjEwNzlDMDAwOTdDQzRERUJCNUYwRjU4MkNBNkI4NkY1OUVDMzdGNzFGRgorOjEwNzlEMDAwQkZCOTgyNzZGRDVDODU5NkM4RTY1REM3Q0FERDAwQ0Y3QgorOjEwNzlFMDAwNzkxMzU5MDUzRTI1M0YzQzNGMzIzODA0REJFRjM1ODQ5RgorOjEwNzlGMDAwOUZGRTI1RjFDMTQ0RTIwN0U3RURBMTI0RjQyQjY1MEFCRgorOjEwN0EwMDAwQkZERTc5NzcyODA5RjlEQzQ1MTFCN0MzN0EyQ0NGNkQzMQorOjEwN0ExMDAwMDM3OTAwNzRGREYxMjc0NjkyMEI0QjgzMDc5MzcwQkZFNworOjEwN0EyMDAwQ0VCRjY4RDFFOTYwNUYzRTZFNEQyOTQzN0ZEMEY5RTA1QgorOjEwN0EzMDAwRUY5MjcwNURFNzgyMjk2NUU4RDdFQjg5NEZDNEYzMzc5MQorOjEwN0E0MDAwQTkwRjlDQzQ3RjVFMEY3QThGNTMxQkVCNDRGODYyOTBBMgorOjEwN0E1MDAwMjEwM0U0NEQ0QTdENTE3RDM3NzQyRkJGNzMxQUVCOEJBMAorOjEwN0E2MDAwMzA0RjIzRjIyMzlCNjcxQjg3MTNDNUYzM0UzQjlDQjIyOQorOjEwN0E3MDAwMERGNzVCRjJEOTRBODVGNzJGQkY5RkVBQkMzQUJFNUE5MQorOjEwN0E4MDAwQjE2QTAwQzU5OTNFNjNFRTVFQzhFN0VGNDZEQTgwRjk1OQorOjEwN0E5MDAwMURERTVGRDAwQkY1MERGOUZFQzEzNEVGM0Q0RUU4Q0Y5MgorOjEwN0FBMDAwNTVENjQxRjkwMUFFNzFDQ0QzMDA0RDNGRDA3QkVFQjczNgorOjEwN0FCMDAwMDNGQ0VGNjUyMEZGRjA1OUVDMzM5MkRGQTYzMTk1RDYzOQorOjEwN0FDMDAwMzc0MzY1MjExNUYwN0QwNkNBRTcyMTU0MjY3RDY4QzYzNworOjEwN0FEMDAwMjYyNUQwMDBFQkI5Nzc3NTJDQkM2NkI1OThCQUYwMDRCMgorOjEwN0FFMDAwRkU5QkMzODBCMTIyMjE2RThBNkEwN0ZEQ0Y0MTM5MEMwQgorOjEwN0FGMDAwRkIzMEQ3Q0M0MjA5RDBFRkRDRURCMURGQ0Q2MzIxOUE2QQorOjEwN0IwMDAwNEZGNUYzREY5OEJBREI4RkJGOEFGRDc4MzA0RDVCODQ4OQorOjEwN0IxMDAwRkJBMTRDMzREM0JDN0VGQzgyNDI3MkQyMjlGQzk1OTFFRAorOjEwN0IyMDAwQzc3QTA1MzBBRTM2NEZDQUZENzdGOEJFRDUzRDUwQTlBRAorOjEwN0IzMDAwREQwQkY4Nzc3MUQxMENFRERFMTQ0QTNERDE1MDFGNjE5OQorOjEwN0I0MDAwMkQ4OTg0Q0ZGM0NBNTkyODA3RTYzN0FGNEQwOTBENEU2QQorOjEwN0I1MDAwRUFFQThGRkQ0NkUxNzYxRUUzRjFDRUJGQkVDM0Y3RjE0MAorOjEwN0I2MDAwMkVBMTNGQ0Q4NEQ3QTg4RkRDQTBFMzc5M0Q5MTBEMEFFQgorOjEwN0I3MDAwQzlENzUxQ0YyQkZFNDRFMENGMzNDRDYwMkEyMjlGMTJDQworOjEwN0I4MDAwRUJDNkY2QkRBMDNDOUJGOTA5NEVCRjc0RTZEM0ZBRTZGRQorOjEwN0I5MDAwQjAwRTIzQTdBMzQwNDMxQThDNUI3QjE2NzgxM0JCMUE0NQorOjEwN0JBMDAwN0NCODlFRjZGRDczRTZBMTdEREY4MjczNEU0NTdDMjg4RQorOjEwN0JCMDAwMjEzQzkxRUY0MTRGNjI5NkU0Q0JCRkM3RkREM0EyRTBEOQorOjEwN0JDMDAwNURCNTI5QjZDQ0I2NDc5NTdCRTNGRTQwMzk2QURGNkFERQorOjEwN0JEMDAwNzc3RTYzRDJCQUQ5QUZDNzNBRTU1QjYwQzA4NEMxRDFDMgorOjEwN0JFMDAwNzRDMkY1RjAxMzYyM0YxRkZCRkVBQzBDRTQ0QjZCNTAwQworOjEwN0JGMDAwOUZDRTE0MUQ4QzQ0M0VDRUE0OUYyNTY0ODZGRUFEQzM0QgorOjEwN0MwMDAwNTk4Q0RGMDVGNDNEMkFCRkUyRkNEMUI4RjVEOThDQUQyMworOjEwN0MxMDAwMzNGODI4N0UzMTQzRUYzRDg0QTFCNkEyNzRERjZGMTFBMworOjEwN0MyMDAwNEY2NkU4QjQ1Qzk1RTBBQTE1OTBGREJEODhFM0MzRTMxOAorOjEwN0MzMDAwQzNFQTA3RDQ3NzYzNzdDQkY5QUY1MzgyMjExREYyQTc0QworOjEwN0M0MDAwM0Q1QzVGNDkyQzhFMTg3QzUxNzRGRjlFRTBCQkJEMEVERAorOjEwN0M1MDAwODQwRjY1MjFERUJEQTQ1MDlDNjA4M0MyMUExNTgwQjNEOQorOjEwN0M2MDAwMEJGNjE5RTVEMzA2RTVFNDIxOTQ2NzFCNkU3NUIzMDZBMAorOjEwN0M3MDAwQTgyRkRFMzk2MUZFNkI2NEJCNUIyOUNGQTg2NjY3QTlCQworOjEwN0M4MDAwQkVDNjQ2RUJFN0ZBNzM0MkZENTYxREQ0QTdERjUzMzg1NAorOjEwN0M5MDAwMENFOTBERDY3RENGNDQ3ODdGQzJFOUE2Nzk2NUQ4Mzg0NgorOjEwN0NBMDAwRkVCODk2RjlGMzE3QTA5RkY4ODA3N0ZFNkI4ODc3ODM2QworOjEwN0NCMDAwQURFNDhGNEIwNzU4MjUyNkQzQjMwOUY1NjIxNzVCQUFBRAorOjEwN0NDMDAwNjBCQkU1QTkwQUNGODNBODY0NTM3RTMzODhCMDU5RUQyMQorOjEwN0NEMDAwOTVDQzlGQzdFMEE5QThBQzExRkRDQkU5MkFFOEQ5RkM1NworOjEwN0NFMDAwN0QyMzhFRjM1ODEyOUY1N0FBNEU3RkNGMDRENEYzODc3QgorOjEwN0NGMDAwRjE3MkYyNjI0NURCNDZGMjZDMkRDRDJCRERDNDJBNzBBOQorOjEwN0QwMDAwRERGODFFRUQwMjk4ODZENjRBRjUwMTgyNTNGQTk4RkFGQworOjEwN0QxMDAwMjI5QzQ3N0ExRkZFNzQxQTQzRDlEOENGOTE0RTNDRjE2QQorOjEwN0QyMDAwRTk1MDdFMkMxNDdBQzBDMkFENjVFOUM4RUY4RjlDMzc0QworOjEwN0QzMDAwQUJDOEQ3OEZCOEE0M0UxQkIyQTEzRUNCRkExNkYyRjY2MQorOjEwN0Q0MDAwNDJERTJFMkMxQTkzOEU0NEVEQ0M4RDZENzdEMUEwRjVBQQorOjEwN0Q1MDAwMUE4RTcyRUJBODlFRTI0RjdGQjE2OUJEMUNEMEVFMDY3MQorOjEwN0Q2MDAwMjNFQjM2RUZBRjU3MkFERkQ3QkEyRjE1MTY4OEYyNjMwOQorOjEwN0Q3MDAwRDQ0REI5NDRGNjQyREQ5NzZBQ0NGQkYzNEJDQzJDMTBDMgorOjEwN0Q4MDAwRTVDN0E4QUUzQTMwMTZEQkQ1QjA4RUU1ODg4RjM1QzE5MQorOjEwN0Q5MDAwMDQxNjg4QTI4RjFCQUNERDhGMkJFOUEyRUU0QjNERjNCRQorOjEwN0RBMDAwNzczQkFFMzFGNkZEOTcyOUNDOUZEMjVEQkJCNEQ4RjdCNworOjEwN0RCMDAwQjA4RTk4RjJFRTJGM0FENzgxRUZEOUM4NzAxMkZBNzVDQgorOjEwN0RDMDAwQzdBMzdDODZGMkM1ODBDRTZGMDBCRTc1QzRDMEU1RUU0OQorOjEwN0REMDAwMDU3QjM4NDYyRTVGNzA4N0I5NUM0NkJGOTU4RENCQjM2NworOjEwN0RFMDAwMDlCOENGNkEyNDY5NjI2MkQ3MzhCMjFFQkY0RjhFNUE3MworOjEwN0RGMDAwRUY4NTI5NDYxNkEyRkQ4OUQwM0MxMDdFRkVGRThDNkREMworOjEwN0UwMDAwNkNGQkQ0ODhGOTNBRDU2REZCMDk3RTEyNkZBMkUxRThDQworOjEwN0UxMDAwOEY4RTgzMzU3NDg0NzRDMDMzQzZBNTZFNUYzNTY4MDA1OQorOjEwN0UyMDAwQTBFMDAxQzkxRjlFNUVBNThEODY3QUJEMkU4NjVGMjRDNworOjEwN0UzMDAwMTQ3N0YyMEY2MjU3OEY2MTU0OEVGOENEMzNBQkQwNkY0OQorOjEwN0U0MDAwREI1NUU2RURCQkJFREYzMTBFRUI4QjA3RjFFRjI3QTc2RAorOjEwN0U1MDAwM0VGQkU2MzI0QTZBNjlFNjdBOTcxQUM5RjUyNjQ2OTVFNAorOjEwN0U2MDAwQ0Q3MTY1MUI5NDA3NDc5NUVENzFGNUNFQjg3QTU3NUNENworOjEwN0U3MDAwMzk5QkI3M0Y5RjE4Q0FENTdCMThCQjI3RjU4NTcxMkE1OAorOjEwN0U4MDAwRjBDREYzMTlBMTY5OThDN0I2QkFFMUQ3RTNDQTgxOUZDQgorOjEwN0U5MDAwRDUxNDczMzk1RkRCQTY3ODQ4NUMwOUY4RDU3QUI4MUUyQgorOjEwN0VBMDAwNkJGMzg0OEQ5ODNGOTc1MERDNzEwOEY5NEJGNTZFQzVFNAorOjEwN0VCMDAwQUUwMDNERDg4MkFEMjEyQUUzNzdFRUE4RUY4MjBBN0Q5RAorOjEwN0VDMDAwNTcxRDNDNDlERkY1RDg3RkExOEVFODdENTVFMTI5REVCRAorOjEwN0VEMDAwMkVGODIxRTkxMzJCMUFFNzUzQkU4MDhDODdFQjk5NEZCQworOjEwN0VFMDAwQ0I1MkJBRTJFMTkyQ0Y1RUM4RDAwRTEyOUZEREE3RDg4NgorOjEwN0VGMDAwOTEzRTNCRjExNEZCOERGMjQzQzlGNjdGMUFEQ0Y2NDc0NQorOjEwN0YwMDAwNTQ1NzEyMTY3RUJBMTRGNUVCRkZBQ0Y5NzAwNEVBOUJENQorOjEwN0YxMDAwN0YxMkYyNjQ5RDEyMTg4MEUzNkU2NEJFMDEyODRGN0ZDOQorOjEwN0YyMDAwNTREMzZGQkYwRURBOUQzMDg0Mzc2M0NDNkY0QkVBNkI0RQorOjEwN0YzMDAwMDRCRjEzODlFMTFDQ0MwQjBDM0NGNkVGQkM5QzFBREU5MQorOjEwN0Y0MDAwOENGMEJDRjQ1OEM3MzhDQ0ZCM0I5MTEzQ0VDMTNDQzA3RAorOjEwN0Y1MDAwRURBOUZGQzVDQkZEQzI5QkIxN0NFNEIxMzNCQzNDMzg3RAorOjEwN0Y2MDAwOUNBMzg3RUY3QkZCM0YxQzU3MEVERjNGNjVFRjlFQUU2OAorOjEwN0Y3MDAwMUYxM0ZDNDRDRUFGQjZBRkQ2OUM4QTdBNUUzNTk3NDNDQQorOjEwN0Y4MDAwOUJDMTQ2MzMwM0RGOUMzNkY3REMwQjRGMDExQ0E2RkQ3QgorOjEwN0Y5MDAwMzQ4MUY4RDk1M0U3Mjc4REUzRjY4MkRGQUI5NkEwM0YxMworOjEwN0ZBMDAwOTlGRjkxOUMyNDdFQUY5MjlFOTE4MUIyMzFCOTZCM0YzMworOjEwN0ZCMDAwMTI3MzNCREMyNDQ3QUVBQjZGNDVGRDI1N0REQTIwOTI4MgorOjEwN0ZDMDAwMjNFNTRFRUQwQjFDNTczRUY3NjdDMTEzREE3RjkxNkEyQworOjEwN0ZEMDAwRTdGQzVCQUZBM0Y4N0FGQUNGMTI0OUNGNUI2M0UxRUIyMgorOjEwN0ZFMDAwMDFCQUExRkRCNTg5RkRGODk1NThDRkFGNTJCOTFEN0FGOAorOjEwN0ZGMDAwQkZGMzY2RUFFNzJFQTFERkI3QUMwQzNDNkIwMUY4MUZCQworOjEwODAwMDAwOTc3OTNCNkJCOUJERjBDM0FEQzA1NzgwOEZCNzM4QjQxQgorOjEwODAxMDAwMENFNDI3M0YxNDc5Nzg5MjdGRTBGQkU0MjgzQkE5QTU4NAorOjEwODAyMDAwMDhDQUI2MkU3QkI4NjU4Mjk2NjE3NUUyMzM0RDg3NzFCQQorOjEwODAzMDAwMjRDOThGNUFGMkY5Nzc1MjJFQTUzN0YwNzFEM0Q3MEM5NQorOjEwODA0MDAwRDg4NkVCNDg1MEI5M0Y2Q0U2OTQ4MjZENEI0OTJGOTgyNworOjEwODA1MDAwNDhGMzY1OUE5NkExNDA3RkE3RTdGNEQ2QTE5RjRDRUUxRQorOjEwODA2MDAwQ0Y5QUJFNUEzQkFENDdDNDE5RTQzRUM5RkRGQzIyOTVFOAorOjEwODA3MDAwREJGNzMzRjRBMDU3QzAzQTJERTkzRUVBMEZGNDhDMjEyOAorOjEwODA4MDAwQzIxRjQ3N0FDNjE3QjhDNzUxRjA2NTZBNzgwNEJFRkZBOQorOjEwODA5MDAwRkYwODRFMUY3RDFCNzBBQTU5MDRGQzQyNzcxNUZDNDI1NQorOjEwODBBMDAwQzA2RjlEMTIzMkE0NzM3RTQxRjYzREJFNDdCOUQzRUUzOAorOjEwODBCMDAwRjQ3RDlEMUE5NUFGMzNFRDY3MzVBNDU3Q0E3OTI1RkMzOQorOjEwODBDMDAwNjQ1N0M1MEZEOEU1NzQxNkFGRjc5OUQyRjg3RTQ5RkQwRAorOjEwODBEMDAwRDQyM0ZEQUE2MjlDMTNDN0NEMTQ0NzM5NjEwQzEyREY2QgorOjEwODBFMDAwM0MwMTc2RDU1MkU0MkYyMjBGQTBFNEE3RjM4RUEwN0RBOQorOjEwODBGMDAwMkFGQkFENDlEMzczRkZCNERDNzdDNURCM0EyQjFGRjMwMgorOjEwODEwMDAwNjI5OERGOENFQjk4NjBBNDdEOTc3MkI3QzVDMUYzNUM3MQorOjEwODExMDAwNUExRUM4QTIzQzk3OEIyQ0NDQzgzRjNCOTIxMTdGMDRCRgorOjEwODEyMDAwM0NBMEZBQzhENDM0QTI3RjY4RUZCNzYwRkIzOUQ3NTFCRQorOjEwODEzMDAwN0JDMDBCM0ZGMTg3QTk1NkIyODM1QTMwNkU4RUY1NTM0MAorOjEwODE0MDAwMEIwMzk4OTc4Mzc2M0NFMURCMUMxRDhEREIwREJFNzAyNQorOjEwODE1MDAwRkY3NzdGOUVGNzIxRjEyNkFEODFGQjk5OThBQTBEOTlCMworOjEwODE2MDAwMTAyNUU3NkY0REUzRkI5QzUwMUM3RUU5M0Y1MEFGNUQ0RgorOjEwODE3MDAwNkQyMUJEMTY2NTJDQzVBODlBRDNBOTFGRDhGRjYxNjlDQQorOjEwODE4MDAwREM0RjQxNzg3NkVGMjM4OTIyQkZDRTUzODI3MDVEOTExOAorOjEwODE5MDAwQzhGMTcyOTM4NUM3Q0YzNjgxMUU0RDdDNTFFMEFGQ0NCQworOjEwODFBMDAwRUZGMzA5N0QyRjVDQTU0QjQyN0Q0MTRCOTM3NjMzQzg5RAorOjEwODFCMDAwRjUxMkUxQkY4N0ZBRTk2MUU1MjREQTdGRDNGREZBOTA5MQorOjEwODFDMDAwMDlGRENDNEQzNzZCRTEyODNCMDZGRjMwRkU3ODhGRTA5MAorOjEwODFEMDAwQUI2QzNEMjMzQkVCMUVGQzJFMDlGQkI3MjY2MUJDRjVDNworOjEwODFFMDAwMUVGQzFFRURDOEM1MzdDN0M0MTUyN0E2NzFGQTk2RjM0NQorOjEwODFGMDAwOEJFN0ZCMTNFNUJDOUExRkQ3QTJDNzkxRkRDN0Y3MDcxMgorOjEwODIwMDAwNzZFREE0QjQ1NDgyNzNBODE3RUVFRjUyM0RFRDVGRkNGNworOjEwODIxMDAwM0NDM0VCQjkxRjNFQkMzRThGRjA0RUY2RDdEMzNDRkZCQworOjEwODIyMDAwQUM4RkRDQTc4MDFDOUMzNTg2REJGQkQyRkU5OTI5RUM0OQorOjEwODIzMDAwNzFCNjM4RDZCRTQzQkY0RjY3NTk3Rjc5MzlERTVFQzQwOQorOjEwODI0MDAwN0M4MUQ4RjY1QzZGNDkxODE0MzExMkREQkE5NTk4RjkyMworOjEwODI1MDAwNEI3OEY1MDQ4NzA3QUUxMTZFNTJFRTNENkUwMTNBMDA4MQorOjEwODI2MDAwN0M1OThGNzk5NTgwNUZFQjFGNDgyMDM5RTYzNDA2MDZFQworOjEwODI3MDAwMjA1RTZEQzQ3QzFEOTJBN0RDOEVGRkZDNDhBQzNGMjZCRgorOjEwODI4MDAwN0VGRjdFOUUyNkZENkFENzY2N0YzRjgyNzhEMThERkQ3OAorOjEwODI5MDAwNUQ2NzhENkM0MUY4RDc1OTE5RDFFNzg1N0Q4OTQ0OEY4OQorOjEwODJBMDAwQUM2Rjc4MUFFNkQxNUREQzZCNjI0ODBGQjU0QUI4MDA1NgorOjEwODJCMDAwRjlFMDA1NDVBQkE0NzY0QjEzREM0ODk3RDJERkYxQzE1QQorOjEwODJDMDAwQ0JEQ0RGNTE4NzNCMDNFQkFERjNGRjE3RTU3MUQ1RUQ1OQorOjEwODJEMDAwOEVCNUNCMkZDMDdGNTU0MDQ3MTc3NEUxMTJFQzRGRjI5QgorOjEwODJFMDAwMTdEMENCMzVEMkI3QUE3ODdDQUI1NkM3RkM2OEI3RERDMAorOjEwODJGMDAwQTA5QjNFODdGMzhENENCNjhEREU5RjJDNTgxMEE1RjdDMgorOjEwODMwMDAwNDNCQjc2MjU5OUEzMjNEMjYxQjVEODk3NUFERDI5NkE1NAorOjEwODMxMDAwNTc4REY5NThCODNGNjhCRkExMUYxMDJCQTNGQ0Q2QjVFNQorOjEwODMyMDAwQUIzRkE2N0NCMERBOURCMUY4NTNERDg1NUZDQTM3MEE1MgorOjEwODMzMDAwN0UxNzg1NkZDNDFGRkM4MkJGMzBFRThGMjlFN0YxRjlFRAorOjEwODM0MDAwNDQ1MTRFQThFOEEwRkNCMDNBRTE4RjQ5M0QxMDFFOEI4NQorOjEwODM1MDAwN0MyQUIxMzhDOEE2QzNCM0VFMkNENzVGNDZCNTZEM0RCNQorOjEwODM2MDAwODg3NkJBQTNBMjIzMDdDOUFBNEVGODQxMjVGRUM4Nzk4OAorOjEwODM3MDAwNUVERkI2NTY4Rjc2QTRENDdCQTJFQ0Q4MDExMzYzRkNFMworOjEwODM4MDAwMThDQkU4M0JCNDhCNzFCQzMwQkVDQTQwRjRFMkYyNzI0OQorOjEwODM5MDAwOUQ5MDk3MDk2ODYwQTM1QzZERUU0RjcyMTVFNTFFRjIyMworOjEwODNBMDAwM0I2OTU3MjNGRjQzRkMyQTRBMkYzQjhFRjRGRjQ2N0E1MgorOjEwODNCMDAwRDkxRjM5OUYwNEJDNDUzQjAxOERCNEVCN0JDNjNGMDlGNworOjEwODNDMDAwMUZEOTBFRURFQjdGRUU5RjE0N0M5QzcxQkZFNDgyMzdDQQorOjEwODNEMDAwNTJGRjI5MUQ5Q0VGRTRBRjU3RjQ0QkE2MjNCRTJGNTA0QworOjEwODNFMDAwRENFOTg4RUYxNzA1N0YzQ0JDQkY4MEUyQTBGMkZEMTlGNQorOjEwODNGMDAwQkQ4RkZDOEZEMkZGMzUwN0ZEN0VGMEFDMTZGQzY4OTY3MgorOjEwODQwMDAwRjA5N0NEOTI3RUIyRjVCMUYxNUFGNDUzNDc5N0U3NEEwRgorOjEwODQxMDAwQkZEOTBFNTM1NzFFMTNGQUE5Q0E1OTI4MTFGQUFCNDFGNgorOjEwODQyMDAwQkYxQjNFODNCMURGRDVCMjA4N0Q1N0I3RkIxQjUzNEM1MgorOjEwODQzMDAwM0NCODg1QzNGMTFFODE0RjhFRjI4MDFFRjlEODA2MEIyMQorOjEwODQ0MDAwRjc5RjQ5RkUzNjZBRjE1NkMyOTM1RUMzQjRGQzg3OTAyQgorOjEwODQ1MDAwNkVERTMwOTBGRkU1N0YwQjNDOTA3MDc5MzBBREVDQ0Y1NQorOjEwODQ2MDAwQjhBRjU2QkRGMDBGM0U2NDIyQkU3RTFBRjQ4NTU2RTFDOQorOjEwODQ3MDAwRjc5OTg4NzZGMjEyQTZFMTM5MDFBNkRBNzNBM0VENjhCRQorOjEwODQ4MDAwRjk1Q0I1RDc1Mjg1Rjg5ODk5QUU4QkMxRDdGNjM0MDMwRAorOjEwODQ5MDAwOTVDOTFGNDY3MjIzODFGNDAyNjA3MzQzMTA1RjRCN0FDMworOjEwODRBMDAwNEJCOUNEODZBMDFGRUVBNEIwRUI2QkVGQjRGOUIwQkYxMworOjEwODRCMDAwQjA4RUYzQzVGRUU5N0M5RkZCQTdGM0JDNTk1OUVFQjQxRgorOjEwODRDMDAwNDMwNTNFQ0EzODJCRkFBNUEyRTMxNDQzM0FEQkFGMTVBNQorOjEwODREMDAwRkEyRUEzRjVBRTlCMjNGMkU4M0JFOTQyNDc3QzJFNjFERQorOjEwODRFMDAwOTA5N0U0QzMwREJBMzJFMjczOTE4RjZDNkU4NDRCQzVFMgorOjEwODRGMDAwQzdENTczNzAxRDlGNERCMUQyNzlDOTdCODU5RkZDQzZDRQorOjEwODUwMDAwNzQ5RTg3MjZGRERCRDdFQTI3MkY0REVGQzRDNzE4M0Y5RgorOjEwODUxMDAwRjk1RUMxMTdGNzMyM0U1RkZGNTkyQkY3RjdBQUNDOEZGMAorOjEwODUyMDAwN0M3MjZGNzA0MDAwRTc1QjI5RkMyM0E4N0YyMUJGOEUxRgorOjEwODUzMDAwQkNDNEY3OTFBOTVDNUZEQkRCMzYzODgwNzQ3NEQyRTA5MQorOjEwODU0MDAwREIzMDEzRkQ0REFEMDZGMjFCMzIzNUYwRUNEM0Q4Q0Y0NgorOjEwODU1MDAwQUIxOTFFQ0NCM0JBQTA4QjZDRjkzREI0REI3QkY2NTdEQworOjEwODU2MDAwNTkxODU3REIyQkUyMUJENUM2NTAwMUU5RjUyMkFGQjRGMQorOjEwODU3MDAwM0EyOTU0ODA3RUFBNTdDNDdFNTU1QkExMENFRjUzMkMzOAorOjEwODU4MDAwQkVCQkQyNTNCQkUyOEZGODFEQkUzRjE1RTA3NkMzMjlCOAorOjEwODU5MDAwQzZGMUMwQkY5QUM3OTcwMUJFMTkzMzcxQkUyQkQzMjk0QworOjEwODVBMDAwN0U4OUZCODJGQkYwQzFCRUMxQjRBRTc1MDZEMTdFMEZFMQorOjEwODVCMDAwRjc3MzJCMTMwQkE3OTE5QzU5NjU0QTQxRjg1RkY0MUE4NgorOjEwODVDMDAwMjkyRkJBNkUwREQ3NkI2N0U4REM1QjE2MjFFRjdEMzU3RQorOjEwODVEMDAwODFENjM3QjNFNTI4QzU5NUVBMUU5OTRERTc0REVCRTYwMAorOjEwODVFMDAwMkVCRTlERkQ5Mzc4MEJDQUE5NjhGRkZFMDUxNkM5MjUwRQorOjEwODVGMDAwN0JCREFBNzczMDA0RjNCOEQwMzZDMEMzQzNBNUZDRkM1QQorOjEwODYwMDAwNTJBREM4QkYzRDZENjAxQUNFM0JCMkNGMTBFOEVFNUNGNAorOjEwODYxMDAwNjU0RkZEOTM4M0IzODRDQjRCMUNBNzJFM0FBRTQ1RjIzNgorOjEwODYyMDAwMjUzNkNFNzVBNUYyMDU0M0I4RTAwMTE4N0Y3NThBNkYyRgorOjEwODYzMDAwNzVCQUQwM0IxMTVFNzVBRjY2MTAxRkZERTBFMTJGNzI3OQorOjEwODY0MDAwNDlFRjY5RTZGMTk0RDMwNjZEMUFEMjg5QTMzQzY0OUM4NAorOjEwODY1MDAwMUVDNTVGQjcwQjNBOUU2MTEyRkEyREYwQzE2OEJBOTczQQorOjEwODY2MDAwRjUyNTY1QjE3NDI2OUY0RjBBN0E0QjE0NzkxODk3RDc3MAorOjEwODY3MDAwQ0IzQ0JGNDkyNjk0QzdEQ0Y1ODVGREJBRjkzOTM0MTFFNgorOjEwODY4MDAwREYxQzc1MzZCMjFGRjNEOUFBODM0NTE0M0ZDRDVCMUM5RQorOjEwODY5MDAwMjJCQTA0Nzg4N0QwM0UzOUJEMjE5MUYzMTM1ODI2RjZDQgorOjEwODZBMDAwMzM2QjI0MjNGRDdBOTY5RUU3OTVDQzMyODFCRUNFRjVCRQorOjEwODZCMDAwMDI2QTdGNjY0MzNBQzFBMTY0MTlENzUzMjMyRjI5QzRBNAorOjEwODZDMDAwMTc2NTlDQjc5MkYxRUY3NzM1OUVGNEVCQTE3REU1MEUyRgorOjEwODZEMDAwQTUwODU4MkJBQjZDMkNBNUJDOTNCOTlCRjI2OUZGNDczRQorOjEwODZFMDAwMDlGRTNCQzNBNDE1NkM0MDdDREJDNUUzODQzMDFFRDk3NgorOjEwODZGMDAwMDVENTk4NUIzNzhDRjg5MjExRTU2QkQ1MEU4NUUyMjU5MAorOjEwODcwMDAwNzJGREYxNzE1NTE2ODg4RDQ3OEQwQTcyRkU4RDcyODM0OAorOjEwODcxMDAwNDVFOTkzNTIwRUExQkM2MDcxN0E2RTJDNUVGOEFGNEFBNworOjEwODcyMDAwOUVDNkNCODM3N0QzQUY1NkFGOEM5NUE3RUYyMUZGNEE3OAorOjEwODczMDAwQkQ1QzlFODJERDcwMUNGMUIwQTQ4Q0QzNzFBNDk1Qzc4MgorOjEwODc0MDAwOUY2QTU4M0Q4RkMzMDk3OUQ2QjkyRTIxMEZDRkU4Qjk1QQorOjEwODc1MDAwRkM5RDY1NUE0QkNGOEJFOTNDMEUzNTk3ODU0NTFDMkEwRAorOjEwODc2MDAwNjJDNEY5RjU4NDVGMTdEMzY1N0U3QjJDN0U0OUJDOEE5MQorOjEwODc3MDAwMjA5RTQxN0ZENTY3NTlFOEJCMzA1RUY1NjIxNkFBMTk4NQorOjEwODc4MDAwQzI5Rjg5NDM0OEJFNzMzOTZGRTY3MjFFOUZENkFCOTA3NQorOjEwODc5MDAwRjdGMTcyM0U1RUFFQzdDQjczMTQ2NzI4QjcyNTNFNDUyRQorOjEwODdBMDAwQzcyMzUwNEYxQUI1MzhBMEU3RkVFNjZDM0JFNjY1Q0ExMgorOjEwODdCMDAwRkRCRERGQTkzOUIyNTNCQkY0QzBCQTYzNjZCMzdCMjhGMQorOjEwODdDMDAwOTZCREFDQjcwREZENjhBNTlCNzNBMEJFNEVFNUU3QzM5MworOjEwODdEMDAwMTMwMDRFNUJFMUZENjY2MTg3QUNDQUUxNzRFNjEyRjlGNQorOjEwODdFMDAwNTcwNkQ1Q0I4QTZDQjg0RjFERTQzNzg4QTQzMkNBQTc4OAorOjEwODdGMDAwOTdGMEREOUMwOERGNjEzRTQyMEVDNzhGQ0VFRkNEQUMxNworOjEwODgwMDAwRDExQUY1N0REOTVFMEJDOUE5NEI3QjEyRTkxQzIwNTMwNworOjEwODgxMDAwN0Q3OTBFRTgyRkVENEY2MDNGNDBGOUMyREU0NEQyMTM2MAorOjEwODgyMDAwMkUwOEI5RTE5NEZFMTlCNjlDRjZBMzhGOEJFRkIzOUY4NworOjEwODgzMDAwOTU2NUExOUY5QjI5RTNCMjE4OUQ4RkU3RkE2QzhEQTNFNAorOjEwODg0MDAwQTdGODg0QThDRkVGQjg5M0UzOTk4OUU0RjUyNTQ3RjgxMgorOjEwODg1MDAwN0UyQ0MzN0MyOEJGM0JDQkM1RjdCRDZFRTc5OEEyOUY5QgorOjEwODg2MDAwNjE1RTg2RDdFNkUxNTBGNTE1QTFGRTYxRDIyRkJDRDMzQgorOjEwODg3MDAwQUNDNzdCMTIxNjQ3MUU4MDc1RDRFNEQ4Mjg2RkJDM0M2OQorOjEwODg4MDAwRUZGRDc3QTc0MkY5QTM5RDA2M0E1RjNBRTdBOTQ5QkRGNAorOjEwODg5MDAwNDJGODk5QUFCOUJBQTM5MzM5MDE0M0NDQjlDNTc5M0IzNworOjEwODhBMDAwNjJDQjM1QzFEODcyNUREQzNEMDU4QkRFREZGQTY2N0JCRAorOjEwODhCMDAwNTQ3REI5NEI5Q0VCNzQzMzBGRTZCRDMzRkREREJEN0NCRAorOjEwODhDMDAwRERGMDVERjlGQzYyNDlFMENERjY3RTk0Mzc3ODlCOEI1NAorOjEwODhEMDAwRDNCMzExRjVBM0U5ODgwRkREN0NBNzczRjE3RDM1OTkzQQorOjEwODhFMDAwRUFDRkUyRjkwM0QzMkIyNkJBQ0YyMERERTU5QkVDNEE5MQorOjEwODhGMDAwNDUzQjJBNzIwOEY3RDM5NDc3N0UwOENBRDNCMkJDQUYzRgorOjEwODkwMDAwMjg2RTc4RTk0MUU2NDFGODVDQjI5NDkyOUU3NDY5ODNERQorOjEwODkxMDAwQzU4RDc2NjM0QkFFOERGMEEwRTU1NTI1QTA3MEJCNjI4QQorOjEwODkyMDAwRkMwOEUwQUY1NTM0MTU1OEVGRkE1QjNGRTI4NzY1OThENQorOjEwODkzMDAwOTlERjdGMDA1Njk1MEJGOTk1NDY3NkRFOTkwOTU2RkIyRgorOjEwODk0MDAwMzJGOEFFNkEzRDk3REJENUFDMjMwOUY5QzAwNkI5N0Y5MgorOjEwODk1MDAwRkFFNzhENjZGODY3N0VBMzM2NjAyOUNDNzc5RUQ3NEEwMgorOjEwODk2MDAwRTdBNEQ0QUY1NUJBMUY2MDA1NzYxOTY1OTdENEJCMzgxNAorOjEwODk3MDAwM0ZBODMxODc4REE1MzhGRTU3MEIyQkQwMDUyOEZENzlGMAorOjEwODk4MDAwMjY4MzRGQzNGMzc4ODZERDQ1QTEyQzc4MzU3QkQxNDExMgorOjEwODk5MDAwQjJCRjNBRTNGNkZCMzhERjlBRkRDMDdFN0FBRjRDQUM0QgorOjEwODlBMDAwQTBGNTlFODFGNTIyNUMwRTZFMzBEMTdBQ0ZFNEQ4Qzg1NgorOjEwODlCMDAwRkUzREIzOTlEQkY5QjNFREM2ODA5OUY0OTYyRjUzRjBFMQorOjEwODlDMDAwMUNGMzk5Q0QwNkJBM0ZFMDcyNzhEQzQyRTc4OTNGRENDMAorOjEwODlEMDAwRjQzQUY5MUIzRjY0N0M1Q0ZGNEUzREU5M0QxRkRBMjMwRQorOjEwODlFMDAwMjUyMTg0QTNCQjNFMDlGNUU2QUFGNTczRTgzQ0YyRUMyOQorOjEwODlGMDAwQ0Q3QTJGRjJCM0Q5OUJFRkZCRkRGNUU4Mjc5Qjc4NTc5MworOjEwOEEwMDAwMzEyRUU5MjZDN0MyMzRCN0FEQUI1RUVBQkI2QUYyQzgwNQorOjEwOEExMDAwQTc5MTBFNkZGQTdBNENDNzREQTg3NzZEMDYzQUM5RTc1MQorOjEwOEEyMDAwRTcxRDUwREY2RkRGN0MwQkU5QjdCMzI3NTgxREI4MkU2OQorOjEwOEEzMDAwRjdBNkE3QzZBMjFDRkE3MDQyMjY5RDlGOUVGRDgyQzI4MQorOjEwOEE0MDAwRjBDQThDRDk4RTQ1NjlGODdFQjZBMjdBQkJDM0E3QTFCRAorOjEwOEE1MDAwMkU3RUVFQjkzNENGRTYwOUUxNzc3RkQ0MTM5RTAwNUQxOAorOjEwOEE2MDAwREQ4OTcyQjg2NkIzODFGNEU3RjY4OUM3REY5REVBRUM2OQorOjEwOEE3MDAwQTIyQjY1RTJGQURCNDc2MUZCNjcwQ0Q0QkU1MzZGREFDOQorOjEwOEE4MDAwRjQzRDg5MkYyQzU0ODJGNjE5ODc1QjNDOUQ5OUYyMTY5MAorOjEwOEE5MDAwMTdFMEJDRTJFOTZERjZCMkZBMDIxRUE3QkIzNkJBNjM3NAorOjEwOEFBMDAwOUIzOERERkQ5QjRCRENGRjcxRjU3NEI3RDc5NTdBRjVFQworOjEwOEFCMDAwNzRDN0IyOTM2M0U0RjBFNUZDQ0Q0RkYwOTQ3MTBFQjM0QworOjEwOEFDMDAwODc2OTRGRDkyOEFFQUQyOUMwN0YzRkMwODBGRTA4N0NBMgorOjEwOEFEMDAwRjI3MzYyRUFERjE2RUM3ODBCRjFEOEU1M0I4MkYzQzg1QgorOjEwOEFFMDAwNjM1QTExQ0E0RDc3QzQ1RTg2NjdDMDZDNDIyRjY0OUI3RgorOjEwOEFGMDAwNENEMjlFMjAzQjYxNUQyQTdCN0E1NTk0NUZFNENGQTJFNQorOjEwOEIwMDAwM0ZFMDAzN0ZDNDdFMkVCQ0Y3RDUyMURDQTdEQURDRjM3RgorOjEwOEIxMDAwNDNEMEJGNURGN0U1NUYyODJFNkE2QkUzNzE3NTlCMjczNQorOjEwOEIyMDAwNDJGOTA2MDZBNzk3RjA1MEYyRjczQTBGOTczRkYxRUI5QworOjEwOEIzMDAwMkFDOEUwRjY2MTlEMzM0MkZERTgzM0RENTQ2RTExNzFDMQorOjEwOEI0MDAwQTQ4RDhCQUNFNDM3REVFODBDNThCOERGQzNDRjUwM0VDMQorOjEwOEI1MDAwOEQxRkE5RTdGMTQwQTFCNzdENEZGODVEQ0RDNTA3MTk3RAorOjEwOEI2MDAwQzYwMUQ5Njg5RThGRjc1NkYxNDEzNTA1Q0FCRjFGNzlGNgorOjEwOEI3MDAwQjM4N0NFNTExNjNGRDlENDFCRDczRERBMjBFQUZCRDBCQworOjEwOEI4MDAwM0QyN0ZGQUU5NTUyRkQwMjk3REU4REY0M0RCRTk4RTc3RQorOjEwOEI5MDAwQTNCMkFBMjRGMkU3QkM1NUZDODFGM0RFQThGOTdCOTlDNQorOjEwOEJBMDAwRDk2RDAzQkM5OTA4QzQxQTlERkY3OEZCNjg4QkRCMTY0RQorOjEwOEJCMDAwODUzRjlGMzUyQjE1NUM3Rjc2Rjc5QTNDOThGQjZCNDg3OQorOjEwOEJDMDAwMUUxN0M3QzI2MzgxQ0I0OEUzQkU5MTVFQ0EzMjAwQ0U5NgorOjEwOEJEMDAwMzdEREM4RjdFM0RDMEJBNjAwRjJDMTczRTI1QzUyM0M2MAorOjEwOEJFMDAwRkM3QTY1MDhGQzUxMDdDNEU0MjczODhEQzE1Qzk0OTM3NgorOjEwOEJGMDAwMUYyQkIxREZDRDZERDI1MzdFQzA5QzI2ODUwNTYwQkM5NgorOjEwOEMwMDAwNzNDRkVFQ0E0NTdFRkVEMTUzQkI3MkE3NDdDRDI3RkU3OAorOjEwOEMxMDAwM0JGOUNDQzg4OEY1N0ZDNkZCQjM3QkYyNjNDQjc2MTdGNAorOjEwOEMyMDAwRDczMzlGQjk0RjU3RkI4QjU1N0YyNzNGRjZGNDM2RTE3QgorOjEwOEMzMDAwMDdEN0I0QkU0RUI0QUI0NEZCRjhGRUNBMDU3RTI4QkJEMgorOjEwOEM0MDAwMTVGMjlGNDgzRkVFQTlDMzRGNjJDNEE4NzNGRjJDNkQ3NQorOjEwOEM1MDAwRjlCQUU4M0M1MkY5MUMyNUY2NkQxMkVFMUIyQ0M1RDI3MAorOjEwOEM2MDAwQzRDQjNERUQ1NzRGRjQ3ODQyQzgyMUI5NkZBNzlBRkFBQgorOjEwOEM3MDAwRjQ0MjM4MUE2QjZEMkFFM0U3MDMwQjUxRUZERkNDQUNGQgorOjEwOEM4MDAwMUVBNEE3MkY0NDNFQjFEMzBBNEZEMEQzOEM5OTJFMUJEQworOjEwOEM5MDAwRjIzMzc5MUZDMzRGQUM0OURCRjBGOTg1QzgzNzc2NUFGOAorOjEwOENBMDAwRTEwOUZERTQ2NDE2NTI3RjVGRThCQzY0MUZGRTQ0REYwNworOjEwOENCMDAwNENFNzQ2NkZDOUUwNzA0ODY3MjE0NTQxNTYzQkVGNjU3OAorOjEwOENDMDAwODVGMkU0OUE2MkUxOURENkMwRTU0OEE0RDI0OEYyNEIxMQorOjEwOENEMDAwQzJGRDg2RTlGNzkzMUREQ0NEN0VBRDQ3M0NDQTFDQzlCOQorOjEwOENFMDAwREZGOTMzRjI4NTFFMURBNjc4ODk2NTI0QjNBMzlGQTAwMgorOjEwOENGMDAwRTE3QTNGQ0Q0M0VFNTcxRDZGQ0U5NDM2ODVGNDY3Q0NCNQorOjEwOEQwMDAwRjM0OTQ4QTZCOEIwNUYzQzk5MkQ5OTc1QzY0OTEyODRCRAorOjEwOEQxMDAwRERDQ0UyRTIyMkU5QTA3NzYzM0IzOTRGMjg1M0JFRDA5NQorOjEwOEQyMDAwMUE0N0IwQjk4MEM3OTU0OTJGQzU3RUYxRkRGNDQxMkE5NQorOjEwOEQzMDAwQzUxNUIwOUQ3MUQ4OTVGMUFGMTM0RjQ1M0VFODc4Rjk1MAorOjEwOEQ0MDAwQkVDQURBNkQxQzY2M0M5RUNCQzI3RDAwRjk4ODdBMjFEMgorOjEwOEQ1MDAwRjMxODYyQ0U2NTZEMDI3RDFBRUQzRDE5RTdENkVCODIwMAorOjEwOEQ2MDAwNDUyRUIyNEYzQUMyRTg4NzMxOTY5OEREMjg2RjEzRjQ0QQorOjEwOEQ3MDAwQzE0MkRDQkZGOEI4MzdCNENCRTdGOTE2RDkwRTk0MzM0QgorOjEwOEQ4MDAwRjJEQzU1RURBMjMxNUU4Q0M3ODFGRUUxMzdFM0ZFNEQ4QQorOjEwOEQ5MDAwRTBGQjU3RkI0MDI5QkQ1NzI2MTYyRTQ1RkNBQTVCQ0NBRAorOjEwOERBMDAwRTg3RTg4MzE2REFEOTQwRjU2NTdDMUY1QjFCQUREMjcxNQorOjEwOERCMDAwOEQwQ0YwNzdCQUYwMEIzMUUxMTc0RjEzRkI3QTRBRThDQworOjEwOERDMDAwREY1RDcxQkRGMDE2Q0NCNzZGOTk5MzRERTdBQ0UzRjM1RgorOjEwOEREMDAwNjdBRTM1QUU3QjMxMTEwMDMyMzQyQTVFRDdDQkNDRTU5RAorOjEwOERFMDAwOENEODdGNDlERjMyN0U5NzM4Qzg5QjhGOUFCODYxQkQ5NworOjEwOERGMDAwRTk4ODc1QzRCNUU0Qzc4NDFGMkVDRkZFMjdGOTMxRkU3QworOjEwOEUwMDAwRkFEQjMxM0ZDNjhDNUFCRUE4Qzc2OTgwMUNFRDNDNDdDRgorOjEwOEUxMDAwNjk3MTUzN0NBRkIzMUVFRkJGMzBFRjU2QzQ3ODM5QjdEQQorOjEwOEUyMDAwREZBQzUyOUVBRjI4OUY1QThEN0VCMTM1MTYxNjMzNUU0OQorOjEwOEUzMDAwRjRGQ0Q0QjhGRTBERDBCRkNEMkREQkVCQzY2MzdGOEYyNQorOjEwOEU0MDAwMEQxMzY1N0ZFNTZBQ0MwNzVBNjM4OEVEOEY1MDUwOUVGRAorOjEwOEU1MDAwRkIzNDc3OERCNzM5M0JGOEYwRUFEMTVERjIxQ0U0RkJDNworOjEwOEU2MDAwNjE5NDE3NTJBRUFGMzgzRUJFNzlBODFCRTlFQjczQ0FDNgorOjEwOEU3MDAwOUI5NkYyQjlDRUM5RjM2NUUyRjlEOERCODI5RjgzNUU5NworOjEwOEU4MDAwM0MxNjQ1RUU4QTI5RjNFOUJFODhDRTM4Nzc1QkE1ODY4NQorOjEwOEU5MDAwRkFCMDhDNzNENzJERjY1MkZFMzRFODAzRkY5MTQxRkFGNQorOjEwOEVBMDAwQzBGOTMzRkIxOUVBOURFN0M4MkVBOEZCNTJFNUZFMjY2MAorOjEwOEVCMDAwRDAyQkYwRkUxRjczNUIyOUY5NTUzMTlEQjc1RkQ0RkVBRgorOjEwOEVDMDAwQ0YxNTcyMEE3NTc4QTQ4N0JBNEQzRjc4NEEwRkY1NDNEQgorOjEwOEVEMDAwMzNCNTMwRjU2QkU4RkVGRUFGQkY2NTcwM0RCRUFFQjA5QQorOjEwOEVFMDAwNkMwM0YyMDNCNjVEQTFGQkI3NTYxNTdFNDY3QTQ3RUREQgorOjEwOEVGMDAwOUU5QjQ3NDRFN0ZGQ0ZEOUZEMThDRjFGREY2MUU4NzY3RgorOjEwOEYwMDAwRkQ3RkNCRTA3QTZBRUQ5RTk3Qzg2RjdBMkVDMDhGMkREOQorOjEwOEYxMDAwNTVBOTgxOTVBODg3NTY1NUU5NTBGMzYyQzU4MUNBQTkxQworOjEwOEYyMDAwQTQwRjRDODE3NUMwQkFGRTlDQzFFMTUzQjc2MzkyMUY3OAorOjEwOEYzMDAwQ0YyM0Q0QzE3RjBBQkNEQUU4OUQ0NTc2QzFDNjI5NjYzNQorOjEwOEY0MDAwMUJDNjk3RUEwQUE3Q0YyN0ZDQjc1QjM1NUM3RkZDM0NDMgorOjEwOEY1MDAwQkJFMkU5NTYzQTM3QkU2QUI3QTEwMkY1QTgxMkQwOUIyOAorOjEwOEY2MDAwRkUwREU2OUI5MzNDQUVDMjAzN0MyOTRCREY1QUY0NjNCMworOjEwOEY3MDAwMUJFNjE3NzQyRjk3Qjc2NDcxM0RBMDUxRjFGQUVGMjhFMworOjEwOEY4MDAwMjY3RjI5OEJDRTU3Q0FEQkNERjUzMzdCQTYzMUM2M0Y3MgorOjEwOEY5MDAwNkZDRkU0Rjc0QzhERjY3NzhDNDE5QzdCNTUwRDI3QTA2NQorOjEwOEZBMDAwOUU1Q0M3QjQ0RkQxRkU2NTVFOUI5QkZDQzQ4Q0U3MTNFRgorOjEwOEZCMDAwMzg5N0I4Qzk0RjZDNzY4NjdGM0U5NEY0Mjg5NUUyRTlERAorOjEwOEZDMDAwRDJCRUI4QjA4N0ZCRDc5NjY1RkE3MjMyRDEzRkE4MEZGMAorOjEwOEZEMDAwM0Y3QTA3QzJFREU3QUFGMDM3NzMzRTkzM0JDOTM2MENFMAorOjEwOEZFMDAwRkQ2MTE2NjdGOEQxMEEzN0U1MTk5MTVGQTJENzc3MUJBMworOjEwOEZGMDAwNjkxRjVFNzUzMjNCQzI2NzhDQkY1MjU1QTJFNDhDRTQ5OAorOjEwOTAwMDAwMUI2MzNBQ0Y0RDM5QzkwRjVCQzZEOTFBRUIwN0JCNzU0NQorOjEwOTAxMDAwQzY0QzI4REFGODRENEE5NzlFNzBGOEFCQzkyQUJFOTQyMAorOjEwOTAyMDAwRkE4M0NFRUMyMzNCQTc3QzBBRDg4RDg4OTdDQjIzODc4NQorOjEwOTAzMDAwNzRFOEY3Nzc3NjkwRkU1ODEzNTQ2ODlDOUFDMkRGNTAxNAorOjEwOTA0MDAwMUVFMDNDOTE2RkQ2OTlGN0E1ODYyOTBGRUUzQjk5MDk1MgorOjEwOTA1MDAwQzI4RkQ5QzhGMTkyNzU5MDVEQ0M5RUU3RjAwN0ZFNDRBRgorOjEwOTA2MDAwRjk3MTVEN0FGQzUyNkEyN0ZCMzM4QTc4NDU4REYwRTMwQgorOjEwOTA3MDAwMDBBMEE4QkUyQzUzRkFFMTk2ODlBN0NDRTdFM0UzMzIxRgorOjEwOTA4MDAwRDU1RDEyRUQ3NzU4MzcwMTI0MDlDRENCOUQ4NEYzN0Q1MgorOjEwOTA5MDAwQzRFQUJEMkQxM0U2NzUwQUYwMTdENzc5QUEyOTgxRUUyNworOjEwOTBBMDAwMDM1QkE3NzQ2OEU4RDdGNDE3RjFCQ0UxNzgzQ0YyODk1OAorOjEwOTBCMDAwNzE3QjFEODg4QzQ1NzkxMkQ5RDM1M0RFMzBDRjEzREVGNgorOjEwOTBDMDAwMzBFMjNBQ0FEQjJGREVGREU5NThDNDBGNTZDMTg4MUVENAorOjEwOTBEMDAwNkI3NzVGNURERUYwNENCMTFGRkZDRkU0MEQ3QjE0NkQ0RAorOjEwOTBFMDAwMUIzQ0VGQ0Y3NDcwRkQ0QUU2MEQ3QkY4N0VDOTc4NkJCMAorOjEwOTBGMDAwN0NCRUYwODU4QzkwQ0FGM0ZBQzI1QjlFNDJCQjdEQjcwMgorOjEwOTEwMDAwODlGMjYxQzZFRjdFRkQxOEZBMzVDNzlCNTk5MEUyQ0YxMAorOjEwOTExMDAwNzFGQTQzQzQzOTY5MDlEMkM5QzU0RkNFNkM3OTg4NjFFNworOjEwOTEyMDAwQkVGOUNCMUU3RTFFMzY1NjFGRThDOTFFQTA5ODQ5OTQ3NAorOjEwOTEzMDAwRERCODM2NTNFOEU3REY5MjNEMjBGOTc1OURCMEFGM0VDQworOjEwOTE0MDAwNTYyMjhGMTRFMEZBRjZFOUVEREQ5RDVGREEyMkM3RUZEMworOjEwOTE1MDAwMjlERkE1QURGQjdDMTdFOThGQUUwOEU3QzdDNEJGNzY1MgorOjEwOTE2MDAwNzRGNjc3NkRGMUI0RTc1MDc2NzYxMzRGNTM0NUZFOUE1NworOjEwOTE3MDAwQUE3MEQ2QzExQzNDQkY0OUM2RDNENEQ2MDExNDI3MzMyQworOjEwOTE4MDAwNzVDNUQzNDJBQzlCNzg5QTJBRTI1MzJCMEM1QTI1RjkyOQorOjEwOTE5MDAwNjlGNjk5RENEQzhFRjYxMkZGNkE2QzRERjUyMDdGQUIyOAorOjEwOTFBMDAwOUI3QkVFNDUzQzdBQTEzQUM2QkFGMDlDNUZBMzgwN0ZEOAorOjEwOTFCMDAwRjVENUM3RDNEQTMzQkI4OUE3NkQxNTdBREIwNzg1QkEzNgorOjEwOTFDMDAwOTAxMUUwQkE5NTcxRkVFQjZGOTM3MTM1MUREOUI1OTE5MQorOjEwOTFEMDAwODc3MzY4REVDQTQ0MzNDREZCODM1NzREREJEMDNGMzUwMAorOjEwOTFFMDAwNDNDNkNCNUVFNUZFQjUxOTIyMkVGNkMxQzQwMkYyM0Y5RQorOjEwOTFGMDAwRjUwNEU3MTk0REIxNzE4Nzc3MDU5QzJGNTk0QUM5NEY3RQorOjEwOTIwMDAwN0ZGRjJGMjY5MDdGN0UxNkZBRjdGQkEwN0ZBQjU5RjhFMQorOjEwOTIxMDAwRUJCOTlGQ0ZEREM0RUYzMTcwRUY1MEU4MUU1OTQ0MTMxNgorOjEwOTIyMDAwMURFOUE0NzZCQTRGNzYxRUIwRDE4REM4N0FGRDgwMzU3RgorOjEwOTIzMDAwREY4MUQ3OEE0RTQxN0RDOEREMDg2NTUwRkFENTk1QUFGMQorOjEwOTI0MDAwREYwNUVEQjYxRTRCMjBCRkUyMEFBNzVCRTRFN0YxRjhBRAorOjEwOTI1MDAwQjU3RkI1MTJFOEM3RkJBNUZCRTNGQzhEM0EwREZCQjk2MgorOjEwOTI2MDAwOTRDOUU1N0M1Mjk2QjFEQkZCMjgxQTBEMjI0RTIyQzYyQQorOjEwOTI3MDAwNUJDQTYwREZFMUE5NTNGODczODVCODlGMzAxRTFFQjI0OAorOjEwOTI4MDAwQkY0NjQzQkQxOUZEN0I5MTFDN0UwRkNEMjVBMzM2ODVCRQorOjEwOTI5MDAwRkNDRUM5MDU3NERGNTQ2MzYyN0Q1MzA1QUYyNzlBQkRDOAorOjEwOTJBMDAwNjQ4OTc4QTlGRUJCMkE1NzQ4OTkzQjk5RjJBODMzNDVBRgorOjEwOTJCMDAwNUU2MjFDOUM2NzM2Qzc5NkUzRTM0N0YxRTdFMzY2MzBERQorOjEwOTJDMDAwNUZGRjhDM0U5NzlGMUYzQjhGRkMxNkZBQkZCNDJBNUY0RgorOjEwOTJEMDAwRUM4Qjg3RTIyODhEMDZGNzFGRjIyOTBFQ0JFRjkzNUEwRAorOjEwOTJFMDAwOUFDREUxQTZDQkUxQ0ZERThFNzJCQTE3MTBFODg1RUJGRQorOjEwOTJGMDAwNzE4Q0NGQkZGNzc3OUQwQUQyNEJBMzgzRTNFRDdGNzdDNQorOjEwOTMwMDAwREVGMUYzNERDQjJBRTA3QThEODNEMzZCRTM0QTI1QzA5RgorOjEwOTMxMDAwRTFDNUU3N0RCNTdFOTJFMkFDNkZENzRGRjI4MUUyNzk4RAorOjEwOTMyMDAwM0E5NDRGREYxMTdGRjAzRjZDMjBCQURCNkJFMUU3NUVEMAorOjEwOTMzMDAwMjVCRkEyODQyM0I0M0Y4NUJEN0IyMzJBRDMxODU3M0Q4NAorOjEwOTM0MDAwQkI5Q0VFODVEQTU4RDUzQjA5RTNBRTYzMjZEOTY4MUQ5MAorOjEwOTM1MDAwQjVBRkYyNzNENTM1OEJDM0I5ODhEN0I1NjVFMTgyRkE1RAorOjEwOTM2MDAwNkVFMDhBMDNBODkyQkY0MkJCRTk0RUM2RUYxNzZBOEEzNQorOjEwOTM3MDAwOEQyM0M2Qzc4NzU3QTc2OEUzQjM0NkEwQkRGNDQxRUI2QQorOjEwOTM4MDAwRUJCOERGQUQxNjkyQUZCNThCMjM0RkEzRkZDMDk3RTJDQQorOjEwOTM5MDAwOUI5NDA1Rjg3MUZFODFFMzYzMTUzNzdENDZGQUZDQzVBMQorOjEwOTNBMDAwN0RGREU5M0NFOEY0QzZEODczNzE2Qzc1NkM3QzkyMzUzMAorOjEwOTNCMDAwMjU5M0RGOURCNUM0QkVDNzczNUIzMURGNUQxNkFGRTQ5NworOjEwOTNDMDAwRkFDRDNBQTM2RjAwRUE5RjM3RERDOEYzMzEzRTk5QTM4NworOjEwOTNEMDAwNjNCOEFGOUY1OEY4RkVGQjFGNEUxNEZDREE1MzEwMkRGNAorOjEwOTNFMDAwMEZFQTdCREM1RjY4MzcwOEYzMDI3ODlFQUM2QzVGODMyMgorOjEwOTNGMDAwRkIwQkZCNUEyREY2Rjc5Mzk3QkU1MzgwRkI3QkJFRjUxNAorOjEwOTQwMDAwM0IwNUI4QkZFQjBDQ0QxQUQyNDc1MUJBNkYyMUMyRTM2RQorOjEwOTQxMDAwRjRDRDVFRDIwRjY1NUVGMEQ1RTI1REMzQjc4Qzc3RDczMQorOjEwOTQyMDAwMkE4RjlCQjNGRTM1Nzk4QzdGRDE3RTkzNTdCRkQyRkJCOQorOjEwOTQzMDAwMkQyNDVGRjg3OUUyMkVGRkREMzlCQTU3RURFMjk3M0EzNQorOjEwOTQ0MDAwMDVGOTcxNEZGREU1MEIzRENGNjU2NjdFRDRDMzRBQ0E3MQorOjEwOTQ1MDAwQzJGNDVEQzlERjc1MENGNTQxQTkwN0M3Q0ZGRjQ5MzFEQgorOjEwOTQ2MDAwRkY5RDU5OUEwOUU1QTBGNEY3NTY4OUJFQ0Q4MUNGQjk4MQorOjEwOTQ3MDAwQkVCRDVEMjE3RkFFRDlFRDRGMUE0NUY2RDVDQ0UxN0E2MAorOjEwOTQ4MDAwRTIyRkZGNDZFNzQyNTg5QjYyNDczQjY1Q0VGNkE1NTQ2NAorOjEwOTQ5MDAwN0Y2MUY3MENBQUQ3OTk0MzIxQjRDNzZBQTAxRUNCMkJEMgorOjEwOTRBMDAwNDZDN0U2NzkxQjc3RjI3ODkwQjQ3RjYxMUU3QUQ0RDdFRAorOjEwOTRCMDAwMTI5QzExMjNFMjY3MkRFQUQ3MzBDNTVBOTVGQkJENkI4QworOjEwOTRDMDAwOURDQ0UzNjdBODBGQzdEQThCMzJBRUJCRDFDQkVGRURGMworOjEwOTREMDAwRDlEOEE2RDBGRDVENjk0NjVGN0UzNkVFNkI1QzdDNzdBMQorOjEwOTRFMDAwN0Y5Njc2MEVGMTRFQzZFNzFGNENEMzBFMjJERDNBOERFNQorOjEwOTRGMDAwMkM5N0YyRjkwQ0YyNUM1QUVDQjlDRjlFRjJFNDhFNzYxRQorOjEwOTUwMDAwRTJDMTk1RjRBOEE5QTQyRkZEOTU3OTQ5NUY3QTA3MkZBOAorOjEwOTUxMDAwQ0QyNDNERUE0RUQyQUZFNEZCQ0JGM0U0MDIzMUYxRkNDMworOjEwOTUyMDAwNTlFMjlDRUUyQzcxNEUxN0Y5N0UyODhFRUY0Nzk3QUJDRgorOjEwOTUzMDAwQTNGMkU0NDJEREU1M0I0NEU1Qzk0NTdGMTc5RDI3MTdDQgorOjEwOTU0MDAwOEFFMThGOUM5RkE0RUIxNzUwMUNCRDBFRTg2NkQxQjAzQQorOjEwOTU1MDAwMkVCQ0FFNjZFMjZGN0RFNDAzM0EzN0I0QzM0NDdFQkFGNAorOjEwOTU2MDAwNkE5MUM3NUI1Nzc1OEFFQzlGM0EzQzg3QzRFOTVCRTMxNQorOjEwOTU3MDAwRTdFOUI5N0U1NTBENzYyNUU1MzMwNzYzRjM3RDk1RUM3NAorOjEwOTU4MDAwNkY1N0ZGOTZFRDdBRjJDN0RCQjJBNTlEQzhFOTVCQUVENworOjEwOTU5MDAwNEJBRUEzQkE0REUxRjQxODM3Q0Y3ODdCM0FERUFGMkU0RAorOjEwOTVBMDAwRURFMUFCRTU3M0VFNkY3OURERDdDQUU3MDZDN0MxRTE0MAorOjEwOTVCMDAwNUZFNTczOTdDNTI3RkE0NjkyM0NERjQyN0NFMjIzNzc0QQorOjEwOTVDMDAwNzMxQUJBMjg2NTlFNzREMzNFOUUyNzNENTY2RkQzNzg5MgorOjEwOTVEMDAwM0M1NENGRjMyNUUyRTNDMkVFQjExNEY3OTQ3MTY4RjM4MworOjEwOTVFMDAwQ0JGQUMwQjI3QzZBRUZDMTdDQjQ5QTdEODk5NEJGNTAzQgorOjEwOTVGMDAwRTVBRTIyM0QzRTNFMUUzQTk3QjU4RUM1QURGODJCM0JGQgorOjEwOTYwMDAwNDJFN0RFRkVCQjc5MDhERkNGNEU3NDEyOUY3MkIzRkNENworOjEwOTYxMDAwNkJDQzQzQjgzQkZCMUFFMkExMDc2RDlGQTdGOEEyRjAwMQorOjEwOTYyMDAwQTU2QzEwMTgwNDgzN0FDRTM3OUIyQkY2M0Y0MUU0QUIzMAorOjEwOTYzMDAwOTg1NTNGNzM0NDdEREZEMzc3MEJCMkI5M0ZGMUEwQzg5MworOjEwOTY0MDAwOTM1QTkzOTg0MEY3MzdCODhDRkM5Qzg3NEJDN0YzQjk3MworOjEwOTY1MDAwODY2NjdBMTdFMkZDQ0Q2RUJFOUY0RkVDRjkwMUMzNzNBQworOjEwOTY2MDAwN0I0RjE4ODI3NDlGODJCRkM2RTY0MUI5MjhGRDU4QjI2RAorOjEwOTY3MDAwRkY3NkUxNUZCRDVBM0E1QUY5M0ZDQzNGMUU5NTc0NzNBRAorOjEwOTY4MDAwQjVGMUJDRjUwMDgzMjhGQThBQTc4NzlFQkVFQjg5QkY5NworOjEwOTY5MDAwNkNDRkY2M0VDMUYxNDIxQjQyNzE5MEFCRTQ0QjA5QzU2MQorOjEwOTZBMDAwQzBCNzUxRUVFRjM0QjlEMTFFNDFCRjBDQzlEQkQ1MTk5QgorOjEwOTZCMDAwRDI5RUU3Rjc0MkFDQzkyMUI5Rjg4OTg1REIyN0YyRENGNQorOjEwOTZDMDAwOTQ1Q0ZGMkVCOUZFNkY0OTZGQjRBNDdCRjc2NDQzN0ZBRgorOjEwOTZEMDAwQTc0QjM1M0EyN0IxMjI5MUNCOTdDOEIzM0MxRjI5RkUzRgorOjEwOTZFMDAwRkM1MEJDNUM5MUU3NUZFNDc4QkZGQkJGQ0M1NzhGN0QzQgorOjEwOTZGMDAwNEI3QzE1RTQyQ0U5MUQzREM2N0QyRkZCREVDRkVGQzE3MQorOjEwOTcwMDAwMjlFQkQwNDRGRTBEOURGQjkwRjNBQUVCRTA3OTdDNjczQQorOjEwOTcxMDAwQzVGQ0U0RkI5MEQwNzMwNkU3NjgxRjIxNUU5RDdGQ0ZGOAorOjEwOTcyMDAwNkNDNkI4NkE3MTMxRTc5RkI1NUUxQkM1MjU2QTgzM0M3QworOjEwOTczMDAwNUZBNzc2MzEyMzNGODIzQzI3M0NEQkU1RkIxQ0Y3NkZCQworOjEwOTc0MDAwQzU3MTFCREQ1RjVCQkI3QjZCNTM2RkNBNjdGMDkxQkU1RQorOjEwOTc1MDAwNzhFMTNERkUzRURERTVGQjAyREJENTJEMEVDN0M0M0ZDMworOjEwOTc2MDAwNEFCRUY5N0M3OTQ1MzFDRDk3RkMwMDRFNTNFQ0Y5QUJGQworOjEwOTc3MDAwOEMxQ0NFNkZFNDMzMkQ0N0MyMTdFQzFERjhFRTdDMTUyMAorOjEwOTc4MDAwQ0YzRkFGNzM2QUY2NTJDQTYzRTBGRUY1MDQ3NzA3Rjk3QworOjEwOTc5MDAwOTU2QTc3OTI5MDYwOTQwQzhCRjUzRkNCMjZCQ0E5REQzRgorOjEwOTdBMDAwNTk1QTQ0RjczNjA0MkQ0NTc0MEZEMTlGRjhCRDVERTczMworOjEwOTdCMDAwMUZDODBDRThCOTNGM0UyOTY3MDQ5RTNCMDlEQzhBN0E0MgorOjEwOTdDMDAwNkIxRThDODMyQUVFRjlENjVCOEJDOERGMTg0Nzc3OTIyNQorOjEwOTdEMDAwREUzQUNGRERGRUQwMUM2ODUwQkFFODcxOUQ4MUNCNDlERQorOjEwOTdFMDAwMjlERkZFOTFFREU2RjExMEE3Qzg0NzZDOUJDMDY2REE1MQorOjEwOTdGMDAwQkFDQTM2Njc2QzlFRTZDRUFDOUJGRjgxRkJGMzhGNkNEQQorOjEwOTgwMDAwNTVDNEQxNzlEQzNFREYwQ0Q2NkNFRkNCRjEzMDVGQzRCMAorOjEwOTgxMDAwRUQyNzg4N0MwQkU2Mzc3N0U1NTlGNEJFNzJEQzVFQ0UyNworOjEwOTgyMDAwQUY5M0VGOEJCODdEQzI5N0UyNzcyMkVDNDZDMjhCQzQzMAorOjEwOTgzMDAwMjZDRTM3MThFMDA1RUFFREEzMjMxRDYzRjBCQzVCREZGRAorOjEwOTg0MDAwOTZEMDY4ODQ1NzJGMDQzRjlFQTM2MUUxOUYwRkM1Nzg4RgorOjEwOTg1MDAwNDg4QTNBMUFFMzIxNUIxNjBEM0I4MDcxNUE3NTY1QzczOQorOjEwOTg2MDAwNzc3MTZCRENDREY2MzIzNDU5NjdCQkJDMzdFNDEwN0ZCRgorOjEwOTg3MDAwQTkyRjQ0RkMyRkZCQTM4MUU3NDdBRTRDMjA3OURGOTI1MAorOjEwOTg4MDAwNUI0REY5OTExNzhFOUI2MkNFMjNDNTNGRkQ2Qzk5MEIwMgorOjEwOTg5MDAwRkQ1MEJEOUJERUE2Nzg0NEUyNEVBNURCQkNENzlGRTYxQgorOjEwOThBMDAwRDg0NEZFRTQzMjE3RkFCNTEyOUIzQUZDMjNEMTRGRjNBOQorOjEwOThCMDAwQjBDMkVGMDA4NUQ5MkIyRUY0MjdBODNBRDQzQjY2RUMzMgorOjEwOThDMDAwRTZFN0U1NjczNDNCQ0FDQ0M0NEYxNTFFQ0YxOUVEMjQzQgorOjEwOThEMDAwM0VBOUFFQkM0RDg3NzY5RkJBOTREMTdEN0JGMzczQjgxOQorOjEwOThFMDAwNUZCQzVGOEI1RDg3RkJGRURCQUZGNUREQzZFOTdDMzlENgorOjEwOThGMDAwM0ExOTU3MzQyMkI4NkE0QzkxNDM5OERBMjlFMzhCMzJFQgorOjEwOTkwMDAwQ0ZBRUE3N0JFQ0E1M0M4QUQ3NjcyRkQzNjM4NTNDRUExMworOjEwOTkxMDAwRDRFN0UzRjBCOEE3RUYyNDdFNEI3Q0ZFQUQ4MTkxMUUyNworOjEwOTkyMDAwRjY1QkM1NENFN0RFMjQ1RTM3Q0FGMzA3NUY3MzNGNzExMQorOjEwOTkzMDAwOUVDOERGMzlCNUVBQkY4NkYwN0IwMjY0N0MyNkMwRUZBMworOjEwOTk0MDAwNzEzNTg0OTc2NzExQkNDMjM3RkE3MUREM0IxREJBREFGNQorOjEwOTk1MDAwNDFFNDVGQUJBNTdFNTZGMjdCRjJGMjlBRkEyQzFCNTlEQQorOjEwOTk2MDAwOEM0RjNCNTM2MDBBQTdGNkNFQ0I0M0JBRjQwMzFFRjRFOAorOjEwOTk3MDAwRUIwNjBGNkVDQUUxNzk1MkVBQ0EwNERBMzc3NTJERERCQgorOjEwOTk4MDAwMTBDRTU0NDcxQUVEOUJGQTE4REY5RkVCNzMzODNDNjVGNQorOjEwOTk5MDAwN0M1OEZBNDEwN0U3RjhENjYwM0U3MEU3MzlCNTQ1NTY3RQorOjEwOTlBMDAwN0U0RTREOUNBQjRFNUM3NEZDMDUzQ0ZGQjU0NUY4QTM2OAorOjEwOTlCMDAwMEZCQzNBOTA3RURGRTNEMjRBNTU0MTNERjU5MkEzOTIyNworOjEwOTlDMDAwN0VDRjZBQTNEOEQ3NDRCNTgzRDk2REQxRjg3OTgwRjIxOAorOjEwOTlEMDAwNzQ3QkVGRTNGOTg2QUEzODM3QUVBRTc0NkU0NTc4OTY5RAorOjEwOTlFMDAwM0I3RDk0OEZGQ0REQzYxMEZEMDRDNkFCRjZEMzE0RjdBNworOjEwOTlGMDAwMDNCRDg4Q0UwNzlGREJBMzQ4QkQyODQ2MUU0QUJCMkQ2QQorOjEwOUEwMDAwREUxRTdCNTFGMkNERkYyMTNENjk0RjI3OUZCRTQ2M0JCNQorOjEwOUExMDAwOEJDNURBOUI5REVEQTVGRDE4NkY0RkM0N0RERjkzRkVDRQorOjEwOUEyMDAwQzMzNDdGNENERUNEMTFCMUVGNTJCRTY3MEFERTI4RjM5RQorOjEwOUEzMDAwNzEzQUNGODlCMzgwMDVDRjcxNEM0MUEyMUNEMTk1OTc2MworOjEwOUE0MDAwQzQ0NEJFRDI3QUM1RUE0MTdEQTlBN0JDQTRDRUJDMjEzQworOjEwOUE1MDAwNTYzRjk0RkIzN0VCQkY4MzRGOTlENzI0RjM5NjJDOTg0RQorOjEwOUE2MDAwQkY5MjcyNzlGRThBMDVGMzU3NTJGMDc3NTBGODc5NzNGNgorOjEwOUE3MDAwOTk3RkQyNjA3MDUzM0U4QkZGNDE0NjcxNDk2NTYyMDUwNAorOjEwOUE4MDAwRjlGRjkyQkQ0NkMyQkY4QjJDQjAwMTdGMDdDMDNGRDkwMgorOjEwOUE5MDAwNDZFN0VBRjE5QzEzRTI3RDQ0NzE1MUJGNjMyQTM0RDk1MQorOjEwOUFBMDAwNUU4N0VEM0JFRjkzQUM2NDU0OUZEQzU3Q0I0MDNEQ0NERAorOjEwOUFCMDAwMDJGNTc4Q0Y3NUU3MzlGMzk5RkNERUZERjhGQzE1OTlDRQorOjEwOUFDMDAwNDcyNUUzQ0E5OUZENUY1NkQwQ0Y4QTYxMDRDQTY3Rjg3QgorOjEwOUFEMDAwQjFGODJFOUZGN0QzRjIyMzM3RjE4REI0MDY5RTI3MTVFOAorOjEwOUFFMDAwQjk5RUQ5RDFDRjVGMjZGOThGMzk3NjVGRDcyOUJFN0M1MQorOjEwOUFGMDAwQTRDRjc1NTY3RUNGQzI2NkU2NjlEMjQzQjkzREE3Mzc3QgorOjEwOUIwMDAwRURFMzQ2RTZERUFGMjM4NkRENENCRkRCRjFCQzUzRDM4RAorOjEwOUIxMDAwRTdBNjc2RTE5MzlDMTc1QkNGRDc3RDExQ0ZBRDI5NUQ4QQorOjEwOUIyMDAwRTM1RDlDRjNGNzVDRDRBRkNBREE0QzFDMkZFM0M2REZDRAorOjEwOUIzMDAwRDg3OUNGNERDMDgyRjJDNDk1Q0JGMUMxMTNBN0VGQ0EzQgorOjEwOUI0MDAwQTcyQjU3ODlDOUZCOTNFM0Y3QjQzRTg5OUY1N0QyRTMwQworOjEwOUI1MDAwMjVGRUY1ODQ2RkZFMzJCMTRGMjcxMjQ4RkY5MEY4NzY0QworOjEwOUI2MDAwNjBDOTBFQkE0RkIyN0Q0OTkwOUUxNzJENEE1MDhGRTdCQgorOjEwOUI3MDAwODcyRDkxNjlDODE5NzNGMkIyRUVDMDdCNTAyRTI2NDYyQworOjEwOUI4MDAwNzJGMTFFOTUwMTZFQjcxN0VGNTFCOTk4MUEzOTgxRTUzOAorOjEwOUI5MDAwRUI5RkY4QkU5N0VBRkI0NUI2RTBCRDJBNzdFNDFEQkIxNAorOjEwOUJBMDAwODNFQTcxM0YzMzE5MkJEQTcyRTQwRUJGMERDRkE5ODQxQgorOjEwOUJCMDAwOTc3N0EwREMyQThFQ0I4Qjg5QkJGRjIxNDFGQzBFNTQwQQorOjEwOUJDMDAwQkFDRDQ4RkE2NEJBODgxM0IyNzJBMUQ3NjM0NDBCQ0FGQgorOjEwOUJEMDAwMEQxOTQ1MTQxN0I0MzFGN0NFMEVBQ0NGMzZGMTdCMjJGOAorOjEwOUJFMDAwMThFMDNGRDZGN0NCRTdGOTE1OENBRjlCNjUwQjdGMzdCNQorOjEwOUJGMDAwMEJGQkU5NzcxREYzMURGNDdEMjcxRkRGNjkxMkYxMkVBMgorOjEwOUMwMDAwM0VGRUQxOTc3ODVDNTJFNjA5MzM2NkNGNDE3REM4RTZDNworOjEwOUMxMDAwNjYzMTY1Nzk3RjBBNTNFRDM5Nzg1RjQyODNGNDI3OEE4QworOjEwOUMyMDAwRjIyQjA5QkU0OUI5NTE3MkY5RThDRDNGMTk0NEJGMkY1MworOjEwOUMzMDAwRjNGMkNGRkEyMkRGQkNDNTE4N0IzRkI3N0MyNkJCMzlENQorOjEwOUM0MDAwOUZCQzI4RUVBMUJDMkZDMTc3NzdFRTA4RkM3RDk5NjlGNworOjEwOUM1MDAwNjNGMTRBRTEyOTI5QTU0NjA3RTk2RkNGRUE5MTRGQTVBQgorOjEwOUM2MDAwMEFGQzcwNENFNkYzNzM5NDdCMTVGQzVEMTc3OTBGNjQ2NgorOjEwOUM3MDAwQUE0RjI1M0YwMUYzQjVFODUxQUVBNjlFRjY1MkZFNjEwQworOjEwOUM4MDAwQjUzOTkyOEJCRkJGRjM5NkQ5NTc4NUYzQkM1NDc5RjI5RgorOjEwOUM5MDAwN0U4QTNGNjYxRTNEODFGOTIyNDcwRENENjM5MjUwOEUyQworOjEwOUNBMDAwRTQ4QjdCMzgzMEMwMEJFNTQzNTk3OTY0MEY3NkYyODczQgorOjEwOUNCMDAwN0UwQUM1NDdDNzRGRTZFNzcxQzdCMUEwOEFGQjNDRDYwRAorOjEwOUNDMDAwQ0VDRjg3OEQyRENFRjczNEMwNzhFMzQ1QkVDOUQ4NjM5QgorOjEwOUNEMDAwREUyNEU0NkY2MzdGMTA1NkY5M0QyMTExMzUzQUJGNDMwRQorOjEwOUNFMDAwM0U5OUNCRTA4RUE2ODc1QkRENTE2NTg2Rjc1NUM3OTYxQQorOjEwOUNGMDAwQkZFNzg5MkRERjMxRjJFQkZFRDFFNUMxOEFENjgwRUJEQgorOjEwOUQwMDAwN0M0NTExRjc2RDAwN0ZFMUVCRTI3OThDQkYxMkY2REM0OAorOjEwOUQxMDAwNDAxNzMzRTc2MTlFQTU1M0YxQTNCRDMwNzA1NzI2QzVBOAorOjEwOUQyMDAwNkQ3NjhENjQ1NDRFREI2MURFNjY4RTVFRkY1QTFEOEY0QworOjEwOUQzMDAwNkIwQkJGQkFGQzdEMkFBQzQzNzlGQkYyN0I2OTA0QUZBNQorOjEwOUQ0MDAwMzQxQkYwNUIyNzcxMUZDMkI3MDM4MjZFMEYwODNBMkREOAorOjEwOUQ1MDAwQzkzMjVCOTFGRjFGMzBCODM3MTE5RTI3OUFEREU4QTcwMworOjEwOUQ2MDAwREE5RjY4QTRGQjdGMUJFNkYzREZCNzUwOTJDQ0NDMDhFOAorOjEwOUQ3MDAwRkRFQUE3RjMzMkI0NjMzNzQyQkRCRUM0NENGOTI5MDdFQworOjEwOUQ4MDAwNDRERTc3QzM4MzJBRjlCOUIwMUVFRjQxRDQzRjYyMjU4MAorOjEwOUQ5MDAwN0Y3OTc5NTJFMURENThBRjRGMzJEMkI5OEJGRDg5MjVGOQorOjEwOURBMDAwM0UzMTFFRkQyRUMxRjY0NDczMDg3RjI3MjNGRTFFRDZDQQorOjEwOURCMDAwQTMzODJGODQxQkNDRUIyOTNFMEZBMjQ3N0Q4OTkxRjQ1OQorOjEwOURDMDAwNzA3OTNFMUZGQUExNzg5RTNFRDM0Q0UzMUQ3MEQ4RjcwMAorOjEwOUREMDAwMjNERTM1N0M0NDlBMUVENDhGNzQ2MzNFOTlDNEVGRjIxRgorOjEwOURFMDAwQTQ5MUY0QkIzMzQwN0Q3REEzRUZEOUQ3QTc3OURDRkNFOAorOjEwOURGMDAwMUMzMEZGM0Q5NUMyQ0VERjU3ODE2MUExMURCQUQ1MTkzOAorOjEwOUUwMDAwRDEyRDhGMEZFNjQ4QjgzMzU1QzNGNjE5NEM5NkY5RjlBMgorOjEwOUUxMDAwQjVCNENFNzJBOTRBRjcyRDI5QjJCQzk0Q0E4RjhCN0FGOQorOjEwOUUyMDAwNzk2RjZDNkExRUU3NTM0QURCRUI3RjQzQkNFRDlCMDQwMgorOjEwOUUzMDAwNzA4MTdERjIyNDc0N0Y3RUVBQjRFMEVGOTdFRjVGODk1MgorOjEwOUU0MDAwMEJGREZFMEFBRTczNTBEN0ZBMEYzODNDMkU2RjU0Qjk5MworOjEwOUU1MDAwOUI3RDA5MjBCRUM1RUZDQjAxOEJDNzhEN0VCNjJCRjc0RQorOjEwOUU2MDAwQzdFMTJBRDdBMUNGRTRGMEVDNUM0NzRBRjdFQjQ4Q0QzNQorOjEwOUU3MDAwRTNFQjA4OEE3M0UzRjFGNTRBOUVFRURCNUU2N0I3RjgyMQorOjEwOUU4MDAwRjcyRkFGMzMyRDc2OURERkUyM0NDM0NBQjczMDRGN0Q0RAorOjEwOUU5MDAwMkVDQ0NGRDYzNTNGRkFGOUI4MTJFNDlCMUNGRkM2ODkwOQorOjEwOUVBMDAwN0M2OTU2MTg5QkU3QzQ0NjdBQ0M1QzVGOENDRDZCQkE1NAorOjEwOUVCMDAwNDVEOUQ0ODhGMkY1NzExMTM3N0Y1REQwRDVBMTg0RkZFMworOjEwOUVDMDAwRDUxN0Y1QUREN0E3MTVCNDEzQkZFREI1QjQxMTg5NEJCMAorOjEwOUVEMDAwRjI2N0M5RkYyRjY1OUMyQ0MxMzJDODgxMDE3OTIwNjdDOAorOjEwOUVFMDAwRUVFRjdENzQxQTc2REVFRTc4QkMyRkNBMkJFMDlCRDc5RQorOjEwOUVGMDAwRTU4REI4N0M5RTkyN0UzQkU3MEJGNDhCNzQyNEU5MzdBQQorOjEwOUYwMDAwN0VGRTkyOEVEOEVENDE0QTEwRERDQzQyRjQ3NDMxOUUzMworOjEwOUYxMDAwOEYwRjdBMDlERDczQ0ZEQzM5NURFQjAzMjIxRjZCQUU0NworOjEwOUYyMDAwRTdFQjU4RUFBNzc5REZFMjc4OTRGMjEwNkZDOUY3REQyMgorOjEwOUYzMDAwOTQwN0ZCM0Q2NUU4QTc3NEZGMTQ3MzU1RjYyNzNCNEQ2NgorOjEwOUY0MDAwRDFCNEZGOUJGM0M1OEM3RjdDMkZGNUZDNzhCREZFNEExNgorOjEwOUY1MDAwNzlFOTcyOUVGMUZDNTBDRTQ3OTlCODgzRjRGODNBRDA3MworOjEwOUY2MDAwRTM3OURFQkE0MkZDQkVBRTRBQzdGOUYwNkU4NUY0RkE3OAorOjEwOUY3MDAwNUE5MDMzMjhBN0U0QkRDQzM3MTU1ODFCRjE5RUNEQkRCMAorOjEwOUY4MDAwMDZFRTRGRjVCRjY0NzJDN0RFNEIxNTlGQkYyRUVDODlGRQorOjEwOUY5MDAwQzU0Q0RBMEJGQzdFOEIxQTNCQkY3NzRBQzg5OTk2RkJGRgorOjEwOUZBMDAwN0FDQjdCQTlCODNDMDQzOTE1NzMyRjU1QTUzQkY2NUVENworOjEwOUZCMDAwQUExRUVDMDVCMDBCNDgzRjYzQkQ3NEMyMkVFMDcyQkExNgorOjEwOUZDMDAwRTU3QUI3RERDRkM4RkZDQzdGMjc3NEFBNTFFODgzMDBCQworOjEwOUZEMDAwOEJCNEFFN0JGM0MwMEVBMEZCMDAxQkYzRjJDNUJENjRENworOjEwOUZFMDAwMDFGRUJCMkM0MkZGOEZGNzQ3MTdBNUZCNTYyMDlFQ0NFNgorOjEwOUZGMDAwMUNBNEU1RTI0RjA0Q0QzMDcyN0YzM0UwREJBNjBFODY3MQorOjEwQTAwMDAwNjk5OEY1REJGMTVFRDk1QjU5RkQzQkJBM0U4NDZGMEY3MQorOjEwQTAxMDAwMTNCRTBERkM5NERGMzdEQjg1NkY4RkU0QTU3MkI5ODQyNgorOjEwQTAyMDAwNDJFNjRBNzQxQzcxRkExRUM3NzE1QjFDQzEzRkUxM0REOAorOjEwQTAzMDAwRjgxQkRCNEMwNDZGOTlFNzFBNEZERjUxRjMzOTZERTBFMQorOjEwQTA0MDAwRjM3MUVBRjUzNDlGMjdCQTlCQ0ZENUUwN0QzNDVFQTU0NgorOjEwQTA1MDAwMzM4RURGM0RFMTNGOUUyNzQ5MUNENjg1RkY4MzE1REYwOAorOjEwQTA2MDAwOEIzODZFMjcxRDJDRTc3NkQ3NjVGM0Q2REI2OEJGRUZGQworOjEwQTA3MDAwOUNDQUUzNzI3NTA5RDI0RUQ2QzY2N0E0QTExRjkyOEZGRgorOjEwQTA4MDAwN0ZFNzRBOEUxNzc3NTZGMkJDQTQwOTZEMzUxNDg3NjNCMworOjEwQTA5MDAwRTUzQ0FFRTY4MUZGRDFFRkZDMDhGRTM2RDk1OTY0NDBCRAorOjEwQTBBMDAwRDRGQjJCQkJEQjgwN0VDRUM5RTM2M0UzNkY1M0NDQjcxRAorOjEwQTBCMDAwNTBCQ0VGQ0VDOTg2OThERjM5OTU3MDk4MjI3RTQ3N0RENworOjEwQTBDMDAwNEFEQ0VGOUJDNkMzMjUzRTZFRDdDOTBGQzQ3QUIzRjBGNgorOjEwQTBEMDAwNzc3RkUwOTlDREY4Mzk5RTBDRjE3Qjc0NDdGMzNBRTMzMgorOjEwQTBFMDAwN0JGREFGMzFCRTc3MkNFRjFBRTI3QkVEODYwOEREM0JCRQorOjEwQTBGMDAwRjE1QUVBRUM0REYzODE2RUZBRkY3MjEwREREQjdGNzNFQgorOjEwQTEwMDAwREE5Q0VENkJBMUZDQ0NDNkVCQThGQzVBREEwRjE3MUU0QgorOjEwQTExMDAwQzVGQTJEMDU1NDJFRDc3RDNBMERFOUEwQjA2NEVBMzg3MgorOjEwQTEyMDAwRkM5RDgzNzYwQkVGQzc2NUY1QjVFMEVGREZCODg2RjRFRAorOjEwQTEzMDAwMUU4NkY5QzhFNUM2MDhCNUJCNkQ2OENENzBDQ0FGMkFFMAorOjEwQTE0MDAwQjdGMkYyOTFBMkZGMTg0NkU1REVBMjNDRUM5NUVCQjAyNworOjEwQTE1MDAwRENBRTdDM0FBREJCRjhFMEMwNDIyNTg0QkY3MzU3OUVBRAorOjEwQTE2MDAwQ0NEQjhGMUZGNjZDMjZGQThCQ0FDQjc4NzlBMEE3NzQ0QworOjEwQTE3MDAwNjUxRkFDRDc3RDM2QUQzQjdEQzQyOEVDMjFBOTVGN0I0NAorOjEwQTE4MDAwMDVCREVGRDI0RTM2RTJCOTQ0QUY0REYxRTBGOTEzRUYyMQorOjEwQTE5MDAwQzg5M0ZDM0UzQTMzQ0Y1M0Y5M0Y3MjIzMDBCRDAwODA5MQorOjEwQTFBMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkU1N0Q5MAorOjEwQTFCMDAwMDk3ODk0NDVEMjcwQkZGM0NFOTU2NDkyNEMwRTIwMjE1RAorOjEwQTFDMDAwMTAyNjA5ODQwNDkyMzAwOTg3Mjg4NzAzMDQ4QzBBMzhGMgorOjEwQTFEMDAwNUMwMjhBRjA4NjMzRTQyMDExNzQ4REJCRUM2NjIwODAyQgorOjEwQTFFMDAwRThBMjg2MTUxNTE1NzQ0MDQwNzAxMTgzMDJBMjA2QkVDMAorOjEwQTFGMDAwRTE1MDUxNTFFM0IxQUVFODJFN0ZBMkFDREMxMjgzQUU0OAorOjEwQTIwMDAwQjhFQkFFN0Y1NTc1Nzc2NkRFMzdDOTAyRkJGRERGRjMyRAorOjEwQTIxMDAwRUNGN0ZDRjhFQzc2RkFFREFCQkFBQUJBQUFCQUJBQkE3RAorOjEwQTIyMDAwQzdFQkM5MzVDRkNBNjI2Q0I4NDdGMUY4MjExREUxNThCOAorOjEwQTIzMDAwOTI2OEVGQzdEODU4Q0REQTRGNTUxODczM0E1Mjk2MzkwRAorOjEwQTI0MDAwRTMxOThCMUUzOEFDM0Y3MzQxQjk5RDU5NTgyQTYzMzdDNworOjEwQTI1MDAwQTQ2OEUxQUUwRThDNERCOUU2REJFNDI4OTUzMUU2MjgyMgorOjEwQTI2MDAwRUNFOThEODQ5NDA1MTgxQkMwRDgzOEZDMTNFQThGQjMzMQorOjEwQTI3MDAwM0IwMjZBMEVGQzlENkYzOUQ3OTBDMUU4REZDRkQwM0UxQworOjEwQTI4MDAwNUJGMTM4NURGRDMxRDcyNUU2RUJERThDNjExNzNGNUY3MgorOjEwQTI5MDAwNEZGRDc2QzBFRjUzMDY3RDlCNkNDNjhGMDlCQ0RGMEI2QworOjEwQTJBMDAwMTZDNzRBMjUzQUQ4RkY0REEyN0ZFNjYxRERFMzNCMzI2RgorOjEwQTJCMDAwQTY4OEZDNEQ3MkJDMENGRDc4Rjg0RjgxN0E5RDk4RjgwOQorOjEwQTJDMDAwQkJFRUFEMUYxNUFDQjdBMjU2NjE2OTAwMDVGMzUxQkFEQworOjEwQTJEMDAwOUVENTI4MDg0Q0I2QTJBNUUzRkNBQ0E2N0ExNzdFRUY2MworOjEwQTJFMDAwQTZCODdCMzkxMTlFODE2RUJCMzdCQjM1REMxMkJFQUU4MgorOjEwQTJGMDAwMjZGODkwRDcxQTJFRkM2Nzg2N0MxMjkzRkYxNEE3QjMxQQorOjEwQTMwMDAwMjM4RUNCQ0JBMTlEODdDNTA2RTE4MkYxMDcxMDdFNTYzNworOjEwQTMxMDAwNzA3OEQ2MkIxNTk0NjI0MzA2RUQxNjg4NzYwQkU0N0M5NAorOjEwQTMyMDAwRjdFQUU3M0IyMDlDRjlDMjAwOEUwNEU2NUVBOTYyQkIxNworOjEwQTMzMDAwRjhEQzVFRkYwQUVFRjJGMEE4MUNENjg3QjE4OTc2RUY1MgorOjEwQTM0MDAwODMzNjk4QzNBNDk4NTk0NEU3QzlDQ0I3M0IwNkU2RkZDNworOjEwQTM1MDAwNjI4NDU2ODBGMEE4MjZERkJFMDY5OEQ0MUNFNkIxMjI5RgorOjEwQTM2MDAwNUU4MDhFMzc3MjNBNzJCQTQ4Qjg4Q0Y4Njg4MUQzODhBQQorOjEwQTM3MDAwMTcwM0RDNDYzQzA0RTk1MzlGODg2OTIyQUJBMDdDQ0JFMQorOjEwQTM4MDAwQkMwQ0YzQTk0NjFFMDQ3RTZEQ0FCNUY5MzdFMjIwNjZGRgorOjEwQTM5MDAwRjgxRkYwRjNEMUMyNzRGRjAzNEExMEFFQTMwQUNCMzAwQQorOjEwQTNBMDAwNDMzRDlGMTJFRURFOUNDMkQ4MEY2MTMwN0ZGODFFMkYxNgorOjEwQTNCMDAwRjAzMDY4RTYyRkM2QjJBOEQ2RjA1NkRBNzlCRDdCQzI3NworOjEwQTNDMDAwQTMzNjYyN0E3RDdBRjgzMjUzMzRCNjRGRjY2M0ZERjhERAorOjEwQTNEMDAwNzA0ODczODJGMEZGNjA2MjlBMURFMEJENDdBRDI1RkFCOAorOjEwQTNFMDAwNzU2MTRENEJDQzI5NDEzRTdCRDgwNTkzRUU4RjdDMjk3RQorOjEwQTNGMDAwRTdFMzUzOTA0RTU2OTMzMkMzRUI4MDM5RTFCRkVCODNEMgorOjEwQTQwMDAwRTlDMzJFNDA2ODA3OEUyRjNCQzAzNTQzNzBEMzhDMDZCRQorOjEwQTQxMDAwQTU1MTQxNzg1RDI5MEU1QzJGMzNFQzZBQzA5NkQzOUEyMgorOjEwQTQyMDAwNUY3MDQ2NzZBMEQzQ0NDQkYwMEZBQjc5OUM2MUJCRTFEQgorOjEwQTQzMDAwNzY1RTZGMjZGNjhGRjUxNjhGRjQ4NEQ2OUI4OUUzRTA1RgorOjEwQTQ0MDAwQjgyQkUxQkIzREY4NUQwMUJDMjdDNUI2QTYwRkNDOEY4QworOjEwQTQ1MDAwRTAxRjUzMzlDMjdCMjIwRUYwNjUxNUY0QkEzNzkyRTgzQgorOjEwQTQ2MDAwMzVFNkRFNjFGNDVEMTk5RkExMzRDMEZDNDcxNEI4MjhCRAorOjEwQTQ3MDAwOERFREY3QTE5OTY1MTNEREE2RDQ2NjA1RTlBODc2RDQxQworOjEwQTQ4MDAwOUVDMjc1Q0FDQzBERkRDN0MxQkNERkVCRkY1Q0FFMDYzQQorOjEwQTQ5MDAwRTVDNzREQUMwOEVCMTlGMUY3NUMxMDdGNTdCNDhFREFDNQorOjEwQTRBMDAwODNGRkY1MDhFRjM2RTRGQkYzNEFGRDAwMkNDQ0VGRUMxQworOjEwQTRCMDAwMjQzQTMyQTZBNTIwRkQ2MjlDMjlDMzYyMTBERjNGQzE2OQorOjEwQTRDMDAwQjg4MEVGODk1ODA0N0NCMEE3QTNCNjEzRTE5RENDQkMzQgorOjEwQTREMDAwMjNDRDMwREZEODAyQ0RBMjM5NjgzODEzQzJCM0QwQzkzQQorOjEwQTRFMDAwRTExOUE5M0E4ODZGOUJCNzJCN0UxQkQ0Q0JGNzY0M0U0QQorOjEwQTRGMDAwM0UxOEYyRTU0NzJDQ0MwRkU1Q0Q4Q0YzNzVGMzNBRDUzOQorOjEwQTUwMDAwRUYwMzdFOUFGN0Y2Q0IwMzYwMDVCMkFGMDQxRkY3NUM0QQorOjEwQTUxMDAwNkI2MjJFNDkwRkY4NUZBNjNGOUNCOTMyODJGOURFNUI3MQorOjEwQTUyMDAwNjM3NUY5RUNEQUNFQkFGQTdERjZBNkVBQ0E3MzAzQkQxMgorOjEwQTUzMDAwNzRFNTdEOEZFNEU5RjJGREVCQUZEM0Q1QkZFNkIzRTE3RgorOjEwQTU0MDAwQkFGQ0I1MEQzN0U5RUEwRjNBMzU1RTk3MUZEMjc0OUIxNgorOjEwQTU1MDAwQUU3RTc1MThBQ0FGM0U4ODZFNEY3RDA2RTA2NUI2QTA0NgorOjEwQTU2MDAwRDNGNTk3NjZFQURBOUQ4RDFBNzUwNEQ3RERFQzU1RjNCRAorOjEwQTU3MDAwNDZFM0JBMUJDNjRBNzRGREIwMUFDQjk3Qzg5NzE1RjBDQworOjEwQTU4MDAwMUZEMjczMkVGMzQ2MDcwMDVGMjM1OUQzOUI0OTgwQkYyOAorOjEwQTU5MDAwMDU3RUM1OEQ3ODlCQjc5NkQ3OTNFREU2RUZCRDczNzhCMgorOjEwQTVBMDAwMENBNjdFRkRGNzEyNjYwRUU2QTE5RkNBM0Y2RDc4RTcwNgorOjEwQTVCMDAwNzA0ODc5QkVCM0QwODRGQzc3REUxNTE5RkY3NTA0MjI4QworOjEwQTVDMDAwODI1REYzQjNEQTI2N0RERDAxQTRERjI3QUFEQjA2OUZENworOjEwQTVEMDAwMTZCRUFERDIzQTU4Rjg4MkUyNjdEMDZGM0FFQjExOEREMQorOjEwQTVFMDAwRjlGMjIzMkFGMzAzRkQ0RkIyOEFDNzA2NDNGQTQzOTVEMworOjEwQTVGMDAwRkY5REMzM0Q4MkY4QjEyNUU4RTkxQ0U2RDJEMzM5MjI5QworOjEwQTYwMDAwNDM0RkU3NDhCNzlFQ0VEMTAzRjU3NDhFRjFFOEU5MUNCRAorOjEwQTYxMDAwNTdBMEE3NzMwN0FGOUVDRTlEQTZFOEU5OUNBOEU5RTlERAorOjEwQTYyMDAwOUM1NEE0QTc3M0Q3MEEzRDlEQkI1NUVBRTk5OUUyMkIzOAorOjEwQTYzMDAwRDZEM0NGNDA3RjI5OUZEMzU2MkVENEQ1NkJFMTAzNkY1RAorOjEwQTY0MDAwRDE2ODRDN0JENEZDNTJENzZGODk1QTZBNjVBNjIwM0ZFQgorOjEwQTY1MDAwRjhFMDNGRTQ4NzlFOENCOTAzODBFNzA1NDA4NzgwQUIzNAorOjEwQTY2MDAwMzUxRjE0RDVBRDVFOTFGNDZGRjA0MTc2MEFEMEJGNzdGNworOjEwQTY3MDAwMDhGREQ1NjlEMTVBMUJGMjVDQTY5MkFFQTA0RkZCQTY4RAorOjEwQTY4MDAwRjQyNzNCNjgwMEE2NTM3QTgyMUQwNDcyODM3OURCQjZGNworOjEwQTY5MDAwODNBNEZDMEFCNTNCQ0MwMzgyRkFBQTNEQjlENjRBQ0ZDMworOjEwQTZBMDAwOEU5NUZBQTkxRDNERUJFQTFBOTQ4MzgwOTA2MzhDREJBQQorOjEwQTZCMDAwMDE4Q0FEMzIyMTFDNTMwNTVGMUYwQ0U3N0M3OTExOEI5NworOjEwQTZDMDAwQUU4NTdBNTA2NzIwQzA3NTBDRTE4NjcxOEU4NUY3M0VBNQorOjEwQTZEMDAwOENFQkY0MzY1NjZCQzFGRUE3QjE3QTRBQTdCMzI2NEE3MworOjEwQTZFMDAwMzVFNjI0QkI2MjI2NzM1MzNBOUI3OTI5N0RDRkFFNEQ2NAorOjEwQTZGMDAwNDkwMUI5NTk2QTZGMTg4MDc2Qzk1RjBCM0YzQ0FFMjA5QgorOjEwQTcwMDAwMzA0N0UzMTBEODc2RjEyQUU1RjVDN0Y4MjdENDdCMzAzNworOjEwQTcxMDAwQzVBQjIxNUVGM0VEQUVCQjFFODU0RjA3NTE0RkEwRkNDQworOjEwQTcyMDAwMUQxRDQ3RjAzMkIzMzc3QjdDNzY1QkZEMkMyNUY5RkU4RgorOjEwQTczMDAwQkFBMjY5Mjg3NzdEODk3NkY3NjY5ODVCRUYyNDY2NEYyMQorOjEwQTc0MDAwNDQzRDk3RTA0RjFEMEZGNDI5NEZEMUVCOTc1RTgyMjdEMAorOjEwQTc1MDAwNUVFODVDQkIxMEVEMjhDNkZDQjFBODFGQUU3NkRDNUZERQorOjEwQTc2MDAwQTU3ODdFODE3MENCRkE5NzlCQUZENTVBN0IyN0MyRDk0QgorOjEwQTc3MDAwNTRFNjcwNkYwNEZFRkM0NEQwRTNEOTVCNkQwMTM1MkFDQQorOjEwQTc4MDAwQzg0NzlGNDU0QzdGQjMwM0QwRURFRTA4NkQxOUYxREI1MAorOjEwQTc5MDAwRTQxQjU3NjA1RTM5MThFNzVBMDhGMDVEMjgwNDdDNzNBMworOjEwQTdBMDAwRkNBRkM0RjI1MkJCRDZBRDIzNENGMTdDNTdBRDY3MzQzRAorOjEwQTdCMDAwRTJERkNCRjEwRjdGNjQ3QkRCODQ5RkMzMzM0MkUxRTNCNQorOjEwQTdDMDAwQkYxRUExQURDNjdFMEU5QUVBOTNERDg4MEY3M0ZEMDAxMQorOjEwQTdEMDAwQjI0QjFEMURBODlGRjM1NjhFOTdGNkYwMzAzQ0EyRUJBRQorOjEwQTdFMDAwMzQ5Q0Q3NkM5QkNEOERGQjkzRTEwQUE3RUI4OUI4MTlGQworOjEwQTdGMDAwRDNDQkUxQ0YzOTI2NkZDNzgwQUE4M0ZCMTk4MkRCNTlGRgorOjEwQTgwMDAwRDgyRDExRjhFNkJDNDVDMDZERUYyMEYwRUVDQUMyNzUzOAorOjEwQTgxMDAwRDUxRURDRDVEODNGREE4OUJGNTZGQzY4MjdEMjNGQzhBMQorOjEwQTgyMDAwQkZFMjhCRjEzRjAwNzk5QkU5RTIyNzEzRDA3RUM5MzY2NgorOjEwQTgzMDAwQjkzNzQyRDFCQTcwRTgxQUY4RkQwMzgxRUZGNTE2QzhBRQorOjEwQTg0MDAwQzdEMkY3OTVGODNEMjE5Q0I3NEY3OENDRTRBRjg2RjY5OAorOjEwQTg1MDAwREVFMUFGMTI5RDlFNURFMEEwRjkxNDMyOTcxNTE3RDk4NQorOjEwQTg2MDAwMkM2MTVGRkY2NUQ4REZGNzM1MDAzREY2QTU2ODdCNzE4OQorOjEwQTg3MDAwMUUzM0UyNENDOTlGMTAxQzVBNkZCNDc3RDhFMDJCRTMwQgorOjEwQTg4MDAwN0ZCOTRFQzczQkY5MTRFNjA4QkM0RDYwMUU1QTc3OTM1QQorOjEwQTg5MDAwOTg2NkMxNzEzRkZBQzZFQTQxRjlGOTkxOTAyNzYwRkZDNQorOjEwQThBMDAwRDNGN0E5Q0M0RkU5RUQyQzQwRjVFRjYwMEQ5NEZGMzBDNAorOjEwQThCMDAwMjJBNzZCMjVDMDM3RUVGMTlFM0Q1MEJFODZFMEZEN0RBMAorOjEwQThDMDAwQkU1RUI1MTlGMTlDNUY0RTc2NDJCQ0FGRTk3MDQ1RkNBNworOjEwQThEMDAwM0I0RUYwMEJBQ0Q3NEZCMTFGNThBRkZENzI1MzQzRDY3MAorOjEwQThFMDAwNEQzRUU3MTc2Njc2RjZGODU3RUJBNkJFOTlFQjBCMTBEMAorOjEwQThGMDAwOEM4RTQ0OThGRjBEODI4NDM3Nzg0QTQ4NEZBMDlEMTU2RQorOjEwQTkwMDAwMEZGOEFGNzdBOTY0NjcxNTBDNkIzNDIzRkM1QkJFRTVDOQorOjEwQTkxMDAwNzJFQ0FEMjUyQ0QyMDdFNTZGMEQ1MzE5RDI2QkVDREEzMgorOjEwQTkyMDAwNTFBN0IxREQ1MTE2ODhFRjA3RjU0NzVFRDIwRTQ3QzMzOAorOjEwQTkzMDAwRkNDNzgyN0MwNzg5Q0MwQUJBODA5RTA4RDE0QjM3MjU5OAorOjEwQTk0MDAwQUNDRTQ3M0JFMkE2RUVGQUVGMzdCMzFBMTVGMTM3M0EzMQorOjEwQTk1MDAwNEJBRjU3QzZBMjVFOTFGNTYwQkMwMzg4ODdEOEQ2RkE4NAorOjEwQTk2MDAwRTU0N0E5NUY3QUIxNUU1N0EzNUYxNjlBM0MyQzk1RUMzOAorOjEwQTk3MDAwNTQ5NzE1Rjk3RUE2OTk3OURBNUE2RjkzN0IyQUMyOUU2RAorOjEwQTk4MDAwRTU3NkNCMkQ2MkVDRTZEMTE3QUQxNzYwQkUwMzUzQjU2QgorOjEwQTk5MDAwMDhFQzY3RTE5OEJGNEM0Nzc5MENGQkFDRjdGQUEyMUVCNAorOjEwQTlBMDAwN0Q1RjY1MEY0MEY5OTc1NTgwNzE1MEFFMjdBQUVDQ0NCQQorOjEwQTlCMDAwMDMwNkNFRDc1NTRFQ0E5RkFBNEFBMEY0NEM5NThCRDIxNworOjEwQTlDMDAwNzM1NTE5NTRGRTREOTU5QkYyNTM1M0JERjFEOEVGQ0NGRQorOjEwQTlEMDAwOTVERjlBRDE4RUJBMkY0Q0QyOEZDM0IxNDhGMEVGN0Q1QworOjEwQTlFMDAwNjE3QzlGQjUyODcyRDE2Nzg1MzBFRTIyNTI4MEEwQUY3RQorOjEwQTlGMDAwNkI2QjQ2QTFEOTU1QkNCN0Y2NEQ0Q0UxQkJFQUMwRjIzMgorOjEwQUEwMDAwRDU4QTFCRjVEMzlDQzNEQTBBNjQ5Rjc5NDcxQkM2QTI3QgorOjEwQUExMDAwRDhFOUZGODcxMzFEMTE2RjY1OTcxNEE2QzE1MjNBRDA2QworOjEwQUEyMDAwQzM5Mzg2RTM5RkFDMUE0ODcwOURBRUYyMTA1QzlFQkE0OQorOjEwQUEzMDAwQzYzN0UzQTBGREQ5QUEwMkNBMkY0Q0Y1NjZBNjc2NDAxOAorOjEwQUE0MDAwNzVGQkFEMTVEQjhGRDlERTY4NEU4MkYyOTExRUM1ODM5MgorOjEwQUE1MDAwRUI3QkE4ODdGOUZENDBCRkI1MTZBRTJGRDY4MkJFNDA2RQorOjEwQUE2MDAwRkUxOTk2M0Q3RUZENUQwQ0U1QjlENjE3Qzc5OTE0M0JERQorOjEwQUE3MDAwNkI2NDFDRjJENUMwNDIzM0Q2OUJGQzEzRDg1QzI5NDFEMQorOjEwQUE4MDAwRkVCRURDM0EzOUJGNUYyMUZDOUNERjFGNDNGODkwNzhBMworOjEwQUE5MDAwMkExM0Y0M0FCRkE3RjcyRDgzQTBERkZENjA0N0FBMDA3MQorOjEwQUFBMDAwNUZGMzI1MTNDMUQ3RkM1OUI4MUY4RDA0NjNGQjg1QkIyOQorOjEwQUFCMDAwRDMzQTMxMDdDRTEzMUFEQjMwREZCQjEzMDMzQTlDN0Q0OAorOjEwQUFDMDAwRTE5RTA0QTQ0Nzg2NjIzNjU1ODI1QzM4MUI1QkZCRDc0NworOjEwQUFEMDAwQ0Y1MUVFRkQ5OUNCM0RDNjZBQkY3RTEyRTU2Mjk3MDQ2OQorOjEwQUFFMDAwRjcwMzkwRkJDNjAyRkIzNERBRDc1NDQ0QTA1RTVDNjBFNworOjEwQUFGMDAwNjUxQUNGNkJCRDMxN0YzNjlDRDFGRTc2QzA4RUE0RTE0NgorOjEwQUIwMDAwQjg5RTcwM0M1N0NGQTA1QzRCREZGMTc4RUFBRjVDQzFEOAorOjEwQUIxMDAwRjk2RTc5RTE4OUU2RDc1QzU4RUUyN0JFRENCNjYzN0QzNQorOjEwQUIyMDAwRTdBNzIwNTdCQTczNzkzOEMyRjUzQURBMTlCMDRFNUUwMgorOjEwQUIzMDAwNUYxRDQxRjJFQjc1OEJGQjc4MjVDQUVERjUwRUY3NjZDQworOjEwQUI0MDAwQThGN0RDNDNGNzdFQjkxN0QzMDdDQkYyRUU0NUZFNDhGMgorOjEwQUI1MDAwOERBNTdFNjZGRjZFN0UyRjZDMEY3QTlDMjVDMkJDN0UxMworOjEwQUI2MDAwRkY4QTEyMDg0M0ZGQ0I5QTAzNEIxMzYxQkMzRUVCMUFEQQorOjEwQUI3MDAwNEQ5RDIxQ0REREE0NTQ2M0RBQkI2QkMxMTFENDlGMTU2QgorOjEwQUI4MDAwQTkyRTZBREY3NzdCOEE4QUY2NjFBRkNFRkVDRkFGMjcyOAorOjEwQUI5MDAwRkRBRUQ3RkI1OTZCQkUxRERFOTkwNUY1N0YyRkE1RjZERgorOjEwQUJBMDAwQ0MxMkEwRUY3RDVEM0ZDREUzRkJCRTFBRUE2Nzc3RERGNworOjEwQUJCMDAwODQ4RjZGNjczODBGQjAyQzEwRUU0MjJCRjkyNTcwQkFENgorOjEwQUJDMDAwMTZDODlGREY5NUI2MDFGRDE3N0I0Q0JFMERBNDhGNjY5RQorOjEwQUJEMDAwNzJGQkUzQkNEN0Y3MDRGMjREMTlENEY3NDFCRTJDRDc3MgorOjEwQUJFMDAwMTc3NTFEOTQ5N0ZEQjlCQjFCMzg4NDc1N0RGQTg2MDJENQorOjEwQUJGMDAwQzRDNzgyNUQ4RjhFRUEwQ0Y1Q0UwRjY2NkUwNTQwMkZCRQorOjEwQUMwMDAwREE3RDcxMTRCNjYzNURDMTU2QzY3RTc2NTU3N0JDMEQ4QworOjEwQUMxMDAwREFGRDM2NkI3ODdGRTQxM0FGNUE0QkUzQjA3MjNFQ0U2OQorOjEwQUMyMDAwRTM0MjhGQjE4NjFDRjIwQjkwNEE4MTdBQkY4NUNGRjg0MAorOjEwQUMzMDAwM0RCNjJFRTYwMEY3NkQ3MUZBOTRENzJENDk0MUZGNEFEMworOjEwQUM0MDAwM0ZDREVFNTY3MTFEQTRGODEyMkIxQzQxQkQwOEZBRUM0NQorOjEwQUM1MDAwNzdCODdFMTJBREEyNUZFNzg0NjRFRjU1RTgzM0FCRDBERQorOjEwQUM2MDAwNEZCMkJGQzdBRENDMTcxNkNCRUQ2MDA1RjVBRDk1RUI3OAorOjEwQUM3MDAwRTFDRDIwMkY5MDVGQTUxRTg2NzEzN0E2RjJGNjY0RkYwNgorOjEwQUM4MDAwMjY4MUQyQ0QwNTM4OTMxRUI3Rjk0OUQ3NUZFMUY4NDY0MgorOjEwQUM5MDAwQkY5OUI0NDNBNkM0NTVFRjZCNDBGRjRFODRCNjAzQzdCQgorOjEwQUNBMDAwOTE3RTMyNjY3NkJCRDBDRTU5MTZFMTc5MzE5NUVDQTgwQgorOjEwQUNCMDAwQTY2NDlDMDNFOEM5OTdCMURFMDIxNUVDQUFCNDEwQkJFOAorOjEwQUNDMDAwQ0E3RTY1N0FGMkM1MDhDRkFCRDhGRTRBRUIxQkU1RTgzMQorOjEwQUNEMDAwQTJFRjREMkMxN0Y4NjBEMUEzMzZEQTc3NTYwQkZGNDE1RgorOjEwQUNFMDAwQjVGMDY3NTU0NzBFQjBFM0ZBNjc4NzREQTU2RjgyRkU1MgorOjEwQUNGMDAwMUNDMjdCNjhFOTc3NTE2NDFFQzk4NzZBQzZEQUM0REI2NworOjEwQUQwMDAwN0U1OEQ3MUFDODkxMDBFODAxMERENkY3RDA0QjREMkFDRQorOjEwQUQxMDAwRTdGQkZBNDNEMUZENTA3RTMyNEZBNDBCRjdGNTI2QTY5MAorOjEwQUQyMDAwODVFODQ3NjMzRjQwQjc2MzM4Q0Y2MTJDODI2OTIxN0E1OQorOjEwQUQzMDAwRDBDMzYyQUNCODdFOTkyM0Y2REY5QUZGNjA0MTNGMzlGOQorOjEwQUQ0MDAwOEZDMUMyN0YzN0I4RjlCMzA4OTQ4MzhCQkVDRjIzNzkwNAorOjEwQUQ1MDAwRDhERUZDRjY4OUY5RkQxN0NFMEY1MjZGNEZFRjM5ODQxQworOjEwQUQ2MDAwNzNDODc3NEUzM0NFNzM4ODc5NUMzMkRBMkQwMDdGMzMyNworOjEwQUQ3MDAwN0UxRkZBOUQ0OTBGRkY0RkUxQkFGQzk1Q0VFMzZFODUyOQorOjEwQUQ4MDAwRjk0Q0I4M0VCRkI1RkE3MTdERDYwMTdGRTM3QUFFOUIzMAorOjEwQUQ5MDAwOUZFNTQ3MzlCMDA3RDYwM0ZBRjE3REUzQUQ2NEI3RDYzNgorOjEwQURBMDAwMDlCRjY4NUQwNzI3Rjk4QjVFQjdGMEJDNkZBQTY4MUYwMworOjEwQURCMDAwQzY0ODJGRDQ0REVENENFRDNCREIyQURFQ0RDNkZFQUJCNQorOjEwQURDMDAwMjM0ODdFRDY1OUZDMkI1M0IxRkY1RkM3Qjk3RDQwMkY3NgorOjEwQUREMDAwRDVGRUVDRkExMzdENjFGRkUwMzdGOTJDQzgyRjk2QzA0MQorOjEwQURFMDAwRUQyQUY2RjdBRDk1RTE3ODZCNjIwMjQ5RTU1MDdGQ0QyQgorOjEwQURGMDAwRkNDRTU0RkYzMzMwOEREMDFGMzdDODY0OUEzMUNFODFEQQorOjEwQUUwMDAwRTU5RUM0NThDOEVGRjlBNzRBN0E2MDREMkVFNDFEMjQ4OAorOjEwQUUxMDAwQzdDOUJGQjc2NjlDMjczMTNDMUVEMzhFMjY4MjQ3NjVDMworOjEwQUUyMDAwMTVGNDNEODVCN0ZCRENDMkVCREQyNkU4Nzc0Q0QwMDc5NworOjEwQUUzMDAwRDYzOUM5MDE2RDZDODQxOUY5RjhEQUI0OTk1OTY5NjQ4NQorOjEwQUU0MDAwQzc3ODEyMTU4MEU3QzlEOTNEMThDQUQxREI4QTZGNEM4MworOjEwQUU1MDAwMjFCRTExN0VDRTI5ODIwNkIyM0YyNkZDQTQ5M0Y4Njc1QworOjEwQUU2MDAwMzY3NUNFRTYzMEE0RTdBNEEyMzBGMjgzN0U1NkI0MzQyMQorOjEwQUU3MDAwRDIwNUVEMjc2OUMyRkYzOTUxRUYxN0JEMzZDRDQzRTM0NworOjEwQUU4MDAwOTZENTY2QTY5RDA4RTFFQjk5MzY5MDFCRDBGRjQzRTE2RAorOjEwQUU5MDAwNUFERjM0RTRDN0JEQjk1NEJFMTc4Qzk1OUY2MTVEN0QwMAorOjEwQUVBMDAwMzlCQkM3MEVGMjUzQ0M5NkZCQzJDMDJDQTRFQkZFMjZENgorOjEwQUVCMDAwM0JDM0ZENDY3QkZDNTA4RDc0ODA3RUJCMjE1REUyMDQ2QworOjEwQUVDMDAwQkYyMkZEQTc4NEYzN0Q4QjE5RjgwNUYyRDVCNTk5QjQ5RgorOjEwQUVEMDAwNkY3OUM2QzIzQzBBRDI2QkI3OERFODVGMzBERUVFMjFENworOjEwQUVFMDAwN0ZFMjk0RjAwRDM2Mjg5RjIxRTQ1OUY1OTQ3MEZBNUVDNAorOjEwQUVGMDAwQkQyRkQyNkY1MjY4M0Y0NDc5REY0RTBCQjUyQkI1RkFBOAorOjEwQUYwMDAwQjc2RDgxN0U0QUY3Njc5MkJFRDk2MzE1RTNCRTE2QzE1RAorOjEwQUYxMDAwQ0JBMzNDMjlDQkZCNjE3OTI3RTI4M0Q3MkRBRTY4MkFFRQorOjEwQUYyMDAwN0Y1QjY1NTQxRTFFNDg4RjAxM0NDNjg1NjkxMzExMUY0NworOjEwQUYzMDAwOUQ2RDQwNjcwN0Y2Q0JCRjFGMTdGQzc1MUNCQTQ1RkExRAorOjEwQUY0MDAwRjkyQTIyQTk1RjVBRkE5MEQ3QUFCQjZFNDQ3QTZBNTZBOAorOjEwQUY1MDAwNUVDRTdFQTk1MkY5NzFBNzI3NzEwRUU0OEY1NzI0MTE5NgorOjEwQUY2MDAwNUNEMjZGNzREQzZCMjVCRTNGNUVBQTkwRkRGM0E3NEFFRQorOjEwQUY3MDAwMzU2MDBERjVEQjhGREY3QTdGM0FCNEZCNkFCRjg1RkM2NQorOjEwQUY4MDAwNzJEMzFFMkUzOThBREZBNzJEMkQyM0ZGRTJCNEUyQzUyRQorOjEwQUY5MDAwNzQyRUYwQ0RFMkFGMDZBQzg1RjkzNDJDRkQyMjU5MEJBRQorOjEwQUZBMDAwRjEzMzRGMkI4NTU2MjFFQkY5Mzc2OTlFMzJFNDgzMjcyNQorOjEwQUZCMDAwRDNCNDBBOUM1Rjc5NTZDMzVDQjQ5N0JGQjFENjNGOERCQQorOjEwQUZDMDAwRjY3RjdBQkNCNjA4QkY1Rjc4RjVFNDE2NkU0NzM3QTUwMgorOjEwQUZEMDAwQTM5RTU4NjBFNjdDMjJGNTZEQjlFMEMzNUVEREI1N0JDQgorOjEwQUZFMDAwQjEzRUUwNkQzQUVBOTU4OEFDN0EyRUZGMTY1Rjk5RkM4NworOjEwQUZGMDAwM0Y1M0I3Nzk4RjAyRTM5NDg0RDcyREEwNTRGNUU3NjBDRgorOjEwQjAwMDAwM0Y2Nzk1NDA5NDkyNDY3OEQ0NzA1RDlENzMwNkEyMTA3OAorOjEwQjAxMDAwRkY5QTg5REI2RDI1NUJGNUYzQzI3Rjc4OUU1NTgyN0ZCMQorOjEwQjAyMDAwNDBCQjkyNUFENTEzODZFQjgwRjlBRDA4N0YwOUIzMDY3MQorOjEwQjAzMDAwRUJBNzA0RTkwNUZEMTBCRDk4RTM0RkQzN0YwNTc0MjgwNQorOjEwQjA0MDAwREU5Njk5ODdGQjg1OTI5OEJEMEYwREEyN0FEMDRFQUUwMQorOjEwQjA1MDAwMTdCNTc1NUVDRUE3MzUzQzdDN0VFN0M0M0EzODA3NUZFRQorOjEwQjA2MDAwMkNDODJGREI2RDcyREY0RUUzN0ZGMzZBMjcxQUJGQTM3NAorOjEwQjA3MDAwNTgyN0RGMjg4MjVGQjc4NTcxQkU3MkMzQkMxMENFMTcxOAorOjEwQjA4MDAwMzk1RjNEMjZFNUU0MzZERTRGNDk5Q0NGODQ3MkE5QTRBMgorOjEwQjA5MDAwQ0E0OTdDMjVFNTEyQzA0MkVCRUJFQzhFMjQ2QTI3RTUxOQorOjEwQjBBMDAwMThGMzMyNDZGNTc3MjQ2RUU0RjY5QkQ4QkYyMkMwNTBFMQorOjEwQjBCMDAwQkZGOEY3N0MxQ0NDQTMzQzNGRjM3QzkyMUM5N0VDNjc1OQorOjEwQjBDMDAwQTMzRTM2Q0U3QjdGOUE4OUVDMkREMEQzOURGRUQ1RkU1NAorOjEwQjBEMDAwMkYyMzYxRDZGQUQ5N0Q0M0U2MTM2OTE1NzJDMTlEMzBERAorOjEwQjBFMDAwMkUxQkNGMEJBQ0JBN0VCRjg5QjRDRUYwMzhGMERDNDA1QgorOjEwQjBGMDAwRkY1REY2Rjc0RTFBREYxRjc2MzNEMEI5QjNEQTc0QzBBRQorOjEwQjEwMDAwODZFQkYwNTk0NjdBQzMwOEM3ODdBMkRERjNDRkI3RDBFNAorOjEwQjExMDAwNTUxNUZFNzFFNjkyRkNFNEUyRjYzQ0QxRUY5ODU1RDI2QgorOjEwQjEyMDAwRUZBRTI0OTBDNzI1ODhBQkQ0MjAxRUY3RTQ2QTQ5QTg2NworOjEwQjEzMDAwMzdCRTExRTczRDdCNjIyMDlGODVGNjE0QTc4QkNDNEI3MQorOjEwQjE0MDAwN0ExOEY5NzJFOUIxQjk0OTc4QkVGNENGMzRFRUI3MzM2MQorOjEwQjE1MDAwRTI3QjA5RTAxNUNCQUIyREIwNUZDOUMyN0RFQjkxNDcxNworOjEwQjE2MDAwNEVGNDA4Q0VFN0VCMkE4RjY3NzY0ODdFRUVEQTVDM0IzQQorOjEwQjE3MDAwQUVDNzc5RUI3MkVEMzM0M0U4NTFCREI1RUYxMTE3RTA3RgorOjEwQjE4MDAwRkREQzU2QjMxQkM1N0JCNUQ5RkYxMERBRTlENTVCRDUxRAorOjEwQjE5MDAwNUFFNDIzMjhCNzIzQkVDRjM5MEVCRThGRjVFNkFFOEIxNworOjEwQjFBMDAwQzk0MzNCNUNCNjlGQjc3NkE0Njc3NjA4MUQ3QTZGRDUxNgorOjEwQjFCMDAwRDMyNUJCNTY5RkVGQjM1NzlGQjc3NzY3MzRCRkFCNkRBRgorOjEwQjFDMDAwOTcxQkQwRTdGQjFFRDFFNzU5MTM1MDZGMDBEQTAzOUNBMQorOjEwQjFEMDAwNkVBRjBDNzQxRjcxMDFEREJBRjk1NTM3N0VFQUU2MThCRgorOjEwQjFFMDAwM0Y2MTBDREExMUVCNTQ3NzBGMjhFRkI2RDg3QjMzREFENgorOjEwQjFGMDAwMTVBN0Q2Q0Q3MTIzRDk4QjU0REY4MjVGMDE0RDhCQkU0RAorOjEwQjIwMDAwMTg3NTA0RjVFQTU5NTZGQkU5MThBMENCRENCQUQ1NTZGNworOjEwQjIxMDAwQjMwQkU3QURFN0Y3M0QyNkMxQkZDRjczN0ZEQzdDQkY0MworOjEwQjIyMDAwQkVCQ0I1NUM1ODIyRkQxODE5QTFGQzY1RTQwMzE4RjdGMworOjEwQjIzMDAwNTYwRjAwNTQ1QUY5RjEyMzI4MTc4QTQ2MDNFM0EzMUUzOAorOjEwQjI0MDAwQUY1RDZENDVGQkVGRjJFM0Y4Qjg3REU5RjBCODEwMUY5NAorOjEwQjI1MDAwODUwMzc5RDk3NTk1MjNEODU3QjBFRUQ4QUEwRjQ3MjEyMQorOjEwQjI2MDAwREM4NUJGNTVDOEZFMjg3Q0I5RTc2MUU0QUZDNjlENTNCNQorOjEwQjI3MDAwNkZBMkY0RDYwMjlBQkZGNEZCQ0RBQjUzMDI5MTkwNzc0NAorOjEwQjI4MDAwMEU3NEVENkQ4MDc2NzNGQ0RDN0YzMTczOTkyRDI4MEY4MQorOjEwQjI5MDAwMTk5RTdCMTlFMDU4MTM1MjBFRjBDRkRCN0JFMDQ3M0M0MAorOjEwQjJBMDAwMTcyRTVBQTc2RjM3MUZFNDM0RUE5RkUyNEQzRkRCNDI2NworOjEwQjJCMDAwQkZDQkZERTg3NTc1MUI1NDlDRjcxQzAxQkZENDlGQ0MxOAorOjEwQjJDMDAwMzc5NENFMURBRUUzNEREODA5RkMzRkQwM0JCRkVFQTg2RQorOjEwQjJEMDAwOERFRURFM0ZBODQ3QUY1QkMzREI4M0Q4MkRDNDc5OTdFMworOjEwQjJFMDAwMzlBQzJFOUM3Nzk5OUQwNTIyMDA5RTIzOTE1NjBGQzY1RQorOjEwQjJGMDAwOTU1QzVDMUI0OTdFQjdCOTM2QjA1N0YzMjg2NTE4QjcyMworOjEwQjMwMDAwMDA4Mjk4Q0VCRkJFRkU0MDI1QkJBNzJDOEVEM0JERUNERAorOjEwQjMxMDAwMTk4NUY2Njk2NUU4MkNDNUZDQjMzQzNGOUYwNTY4M0U3RQorOjEwQjMyMDAwQzgyRjlFRDA3OUZBRjU3OTU2QzNGNzc3QTVFNkMwMDEwNAorOjEwQjMzMDAwQzQ0QjMxNkJFMEZCMzNBMEE3MjdFNEZDQkExNEU2Rjk1OQorOjEwQjM0MDAwNTkyQ0RBNkY4NkY2Q0NBREQxQjk5QzgzREI2M0U1N0JGMworOjEwQjM1MDAwN0ZCNjg1OTZDQjdEQTZEQzA3NEI3RkYwMzNFOURFNzBBOAorOjEwQjM2MDAwMUNDNzIyRUNFNjM1Rjc3QkQyMTFERUU1MTY0RjNBRTIzOAorOjEwQjM3MDAwQzFCNzNBOENGNkZCQjc2REUwRkE2QjREMENEOEIxRjE2MgorOjEwQjM4MDAwNjQzRjkzM0Q3RTlCQzJFRDczMzY5NUNCQzM0MUE2OTczOAorOjEwQjM5MDAwMDJBODZGOUExRThENzE2Rjc0NTE3REQyNjM2QjFFQ0NBMworOjEwQjNBMDAwRTRGNkZGM0Y1NUIyODc5QTU2RjMzODg4MzVCOTFDN0ZDQgorOjEwQjNCMDAwNkIxRUNDRTZGNkJGRDQ3QjFEMThGNUQ3REFERUY2QTRGQgorOjEwQjNDMDAwQTMxRjgyM0RDMkUxRkExQ0E3MTQ2MjVGRTc3NkQyMUU3QQorOjEwQjNEMDAwRTgxRTMyM0Y2OTk3QjNBMjJCM0I5RkQ4MkNFMjMyOUFFQQorOjEwQjNFMDAwNTY4N0Y5RjE3Q0UyODRFMjdERDMxNDYyREYzRUQ1OUQ3RAorOjEwQjNGMDAwRUI4OTAxQzMzRDVCNDQzRDNBQzc5ODZEMUFGN0MwRjUzMAorOjEwQjQwMDAwMDBEN0VDQzc0QzJFRjRBN0I1RTBEQkUzNDk0N0ZENzk0NAorOjEwQjQxMDAwNjI3NTU4MUVGMkQ5ODBFMURDQkY3NDNDOTdDQkZEODg4MQorOjEwQjQyMDAwN0U4Q0UyOUIzNjg5N0UzNzc1MzdFOUQyODQ3MEUwM0ZBNworOjEwQjQzMDAwRThFN0M0NDhFRURGOEVFQ0U3MjVCRkRFNjYxNzk3RkIzMgorOjEwQjQ0MDAwQzY3OUQ0OEE3RTY2NUJCREVGMEM2OTAzMUU4OTE3OTZBOAorOjEwQjQ1MDAwQ0ZFRDhFMTM3NzJBMUIzOTVDNDA2RkM4MEZGODVEMTg0QgorOjEwQjQ2MDAwRjkwMzRGMDhCRDI0RjEwQjdDNDM3MTBDNTI2RUM1QjQzNworOjEwQjQ3MDAwRjA4QjdGNUIxOEYwQ0I2QTBCRTcwM0I5NkYwQkUxMTcxQQorOjEwQjQ4MDAwNDFGRkFFNDRERkRCMDQ3REQ5ODM2MTgyNUY0Q0VDNkYwQQorOjEwQjQ5MDAwODhDNzkxNEVDRTBGNTdCOUZGMDI3QTFGNDE3QTFCRjcyQQorOjEwQjRBMDAwNjE5MkRFQ0NFQ0VGRkZBRkNFNTFDQTVFNzk2MThGMEZCNworOjEwQjRCMDAwRUM4Q0UyMTcxRjhENjI1MEVGQjRCOUE2QTMxQkRBOTc4QworOjEwQjRDMDAwNkU1RTFFRTU4MUY0OTREOTE3RTU4NEYxNEZGQkQ1MDIzOQorOjEwQjREMDAwN0YxQkY4QjZGNjkwRkU2ODhGNDMwOTM5RjczQ0YzRkMwMgorOjEwQjRFMDAwNkZDN0UyM0NGRkJBRDlFMjQ0OTE1MEJFRDU0NkZCQjFFQQorOjEwQjRGMDAwMDVCQkU2OTNCRDBFRjk0NjlFQkZFRjVCM0MwNzJEREYxMworOjEwQjUwMDAwQUJGN0I3MTczRkY3Njg0NzE3RTFEQjk3NjQ0QUMwMzREQQorOjEwQjUxMDAwOTBDNDIwNURCMEM5RDI3MjJFMENDMzgwRkREREI0MDI5MAorOjEwQjUyMDAwRTEzM0I2NDczODJFMDFCRENCNkJENTQyNkI3NEVCRjJERAorOjEwQjUzMDAwNzIyMTVGQ0E3N0ZERjY1QkY0MUI5NkVGQkFGMTI0Q0E1RAorOjEwQjU0MDAwRkI3MjgzOUZCRjQ4OUM3NzE4RkRGQzdGRURBRTNGNDdBMQorOjEwQjU1MDAwMDZGQzUwREM4MDBGRTBFQTQxRUNDMkZEQzRENURCMUVFNgorOjEwQjU2MDAwQ0Y2OTQ0RkI2MUQzQkI1MTRBNTZEMERGMkZDRjQxOUFGQworOjEwQjU3MDAwNkI2NzNEODNGRUQzRjZENkU1MzdDMkRGMUJBNDFCOTc2RQorOjEwQjU4MDAwNUZBRUJEMEEwRjlBQUJFMzY5QTkyNTEwMzUwOEY3N0JCQQorOjEwQjU5MDAwMUIyQzY0RkY5NkJFRjBFQzk2Mjc5MUNGOEVEOTQ4QkY0NgorOjEwQjVBMDAwOTdCQ0YwQzZBN0Q3QTFGREJDRDMxMjNGOUE0RkMzQTE0OQorOjEwQjVCMDAwODRDNEQ5OTRCQkI4M0Y0RUQyQTdGOEU1MzdBQ0FFNkM4MworOjEwQjVDMDAwRkU3RDcxNkM5MDRFMjUzQjBGNTgzMURFQzc4OENGMTE0MAorOjEwQjVEMDAwQjUwN0FDMEQ4RTM2RTg1NURCMzg4QUZDNTBEQjdFQjAwMworOjEwQjVFMDAwRTJGQTM4QkQ1RjYxOUQ1MjVBQjcyRkRBRjA0NjE0REE5RAorOjEwQjVGMDAwNjc4ODI3RDQ0RjkyNkUyRDc0MzRENDg3RkVDN0JFRDY4OQorOjEwQjYwMDAwOEZFQTM5NzE5RjcyMzkzQTdFMkFFQ0FDQjI1NzIyNTlDRgorOjEwQjYxMDAwMENDMDUxRjRCOUNEM0YxQUU5QkI2MzUxMTRDRUU3QTQ3NQorOjEwQjYyMDAwQjk4MkYzRkRGQUU1MUREMURFMkJCMkY4M0EzQTI5RTVFRAorOjEwQjYzMDAwREY4QjlFQkU5QkY4NzE5RTUyRDFEMTk5NDVGQzlFNjhDRQorOjEwQjY0MDAwMjI1QkMyOTc4OEYzOUNCMzZFMTJDRDczMkVEMzg4MUZGMgorOjEwQjY1MDAwOEJENkFCNUUzRkE0REY5QjU5QzFDRTM2RDZDRDUyQjE1RgorOjEwQjY2MDAwNkU0RTZFMDRFMkMyM0M0RjhBNzgyQkRGNDdBQUQ4NDc2MQorOjEwQjY3MDAwREY0OUZBRkM2RTMxNjdDNjE2NTJGRTdCNjFDRjRERUM5NgorOjEwQjY4MDAwRDE3MjlFNkQwRkREODc5NjZGQkFBRjFFRTk3NEE2QUJCRgorOjEwQjY5MDAwQTcxM0MyMDk3OEYwMDlCQzI5M0Y0M0JGRUE4NzIzM0JCRgorOjEwQjZBMDAwNzEzQTMxMTdDNjIzNTAzQkQwQUIyM0YwM0JENkFGQjcyRQorOjEwQjZCMDAwNzhEMENGMUVEMjRFRUMxM0Y5Rjg3Nzg5RjEwMUVFNzBGNQorOjEwQjZDMDAwREMwNzlGRUNEODc2M0NEN0NFMTZCOUMwRUE0M0UzQjk4NQorOjEwQjZEMDAwREE5NTAzOUJFRTI3RkVGQUVFMTMyRTY3MTZGOEM3MTVEMAorOjEwQjZFMDAwNTA3OUJEMjVEMDA5Q0JGRDA3MjYyQTI0Mjc2QzJDRDAwNAorOjEwQjZGMDAwRDYzQURGNjQxMUVCNUM1RjBFNzA5QTk1NTBGQ0VFRTc3MgorOjEwQjcwMDAwRjZBOUU0OTdCOTYwOTcwNTQyRUM4NDIwRkY1ODgzREZERgorOjEwQjcxMDAwNjlGRUJGMTNGODZFQTBGMzM5NzlBRTM3NEZDODA3RTM1RgorOjEwQjcyMDAwRkM4REYyNjI3MThGQjZFMzRFRDhCQUI2Q0Y5MzgyNzJCNworOjEwQjczMDAwQzI0N0UzOTY4MjdFNDc3QkE0RjQ5ODhERUM4OEQyMTdBQgorOjEwQjc0MDAwMkM1RUM0RDNEOUVEODczRUJEMERGN0I3QjU3MjVERUI2NgorOjEwQjc1MDAwRTVCMDcxNUQxN0JERDRCRkNENzU3RDc2NTU2RURCRUI2MQorOjEwQjc2MDAwMUFCRUI3QjlBRTU3MjkyNEVGRkVCQjcyMTgzNDFGRjlDMQorOjEwQjc3MDAwMjUyRUI3N0VFN0I1MjM4NzlGMzNFMEY1N0I5NjE1M0RGMQorOjEwQjc4MDAwMDgwQjlEODVERDg4NEUwNkZDNEFCQzFBRTVFQTEwMTRCQworOjEwQjc5MDAwOTIxRDVBQ0I1NTg2MjExQTIxRjg5NDc4OTRGQ0NBOThBOAorOjEwQjdBMDAwNDZFM0I0RjBCNUU0NUJDOUQ3MkQ3QzZCOUNCNzFFOUYxNAorOjEwQjdCMDAwQzZGMkY5NDg3QjgwQzdGQkFBODVFQzg1RDIzQTFFNkY5QQorOjEwQjdDMDAwMDhFRDI4M0VBRTFDRkRGMzU0QkJFNkNEQTRGOEQwQkM3QQorOjEwQjdEMDAwREY5MEFGMzVENEY3MThGMjVFNDM3RENEOTBBRkQwRDU3MgorOjEwQjdFMDAwMkZERDdCQzhDQUY3MEYwMTVEM0Q1QkU1Q0RCNDFGNjk1NgorOjEwQjdGMDAwNkQ2N0Y4RjlCOUQzQUU2RkFEM0VFNDhGMkU0RDU2OTQxOAorOjEwQjgwMDAwOTM5NkE1Q0MxNzA5RUQ5QkY2QTk2NEY3NUM3MDM1NDVCNgorOjEwQjgxMDAwQTFEREIyM0M4Q0RCNzUxNzlDMjIxRkMzRjM0RDFEQUMyMAorOjEwQjgyMDAwMkI1MDRFQ0FFRjRENjFEQzBGNzNDMURCMTQxNTEzQjIwMAorOjEwQjgzMDAwOUY2RkFDNTNBM0QwRkZEQkUwNjcwNTZEQzdBQjU0MTMxQworOjEwQjg0MDAwNUUxQjU4N0JFNURDQkVCQjEwQ0VGRDBEMTdDMkI5QkYzOQorOjEwQjg1MDAwNjFBNEVBNDhBRTQ0M0Y2QzBEOEYwQjlDQkQ2NDcyMTQyQQorOjEwQjg2MDAwQzU1NUQ0QTVERDMyMDVCRUNGNzk1QkU1NjFFMDNFOEZERAorOjEwQjg3MDAwMTlFMzE5NjY3MTUyQjI1M0NDNDdGMTgxQjNFQTc4NUM4RgorOjEwQjg4MDAwQzNFQzU1N0EzQUNGNzU2Q0EyRjhCN0VGRDk2MjRBRTdBNAorOjEwQjg5MDAwQUVEMUM3MjMxNEIzNTVDNDY3NDVFQjBDREZFQjZFQTZERQorOjEwQjhBMDAwNzU1MjZDNTgyNzlBRjAwRjFCRDc4OTIzNURDNDNERTY2QgorOjEwQjhCMDAwQjI1QzVERENBMzkwRTcyM0Q1QUM1QkE2MDAzRDJFMUNGQgorOjEwQjhDMDAwNTE5OTBERjJDRDc1MkE1QkQxOEZDN0I5RTJGOTEzNkU4QworOjEwQjhEMDAwNDg3MEZEMkQ4MEY1OEE3NjkzQzRENzM5NUM0NzNEREJFRgorOjEwQjhFMDAwQjc1RkNFRURGRUYzODA1RjIxREZFQ0Y5MjIwN0NGODU1NQorOjEwQjhGMDAwQ0ZFRDM5OTZGRTNBRTY1RkY5NjNGMjE3QUM3NUZEMTFBQworOjEwQjkwMDAwRkI3RjlDOEU3MkZBQzI3RTFCNDM3RUJGQjBGRkFENjQ4QworOjEwQjkxMDAwRjQ0NzVFNzhDRDQ2RkJFQzBCNEI2RERDQ0ZCRDNGRDJFMAorOjEwQjkyMDAwOEYyQUU2NDI1NzZFMTc1N0VGRkIyMUE3ODFGNEYyMzJCOAorOjEwQjkzMDAwQTJERjM1RTk1NjZFNUZENUZERkQzOEZBRDM5QkVCNjA4QgorOjEwQjk0MDAwNTYyOEY3Rjc0N0QwN0EyQTdGMkQ4Q0ZDQ0MxN0Y2RkRDNgorOjEwQjk1MDAwMzAyMEQ0M0ZGN0RGOUQ4RjNDNEZCRjEwQzlBNkJDODQ3OQorOjEwQjk2MDAwN0MxQ0MzRjcwNUU1QUY1RkZCMkM5RTJGOTdFRDNBNjA3QgorOjEwQjk3MDAwOUQwNUU1MjNGRUVCMUYzOTI4NTcyRkJDQzRFREE5NkZBOQorOjEwQjk4MDAwMkMwRDRGQTM4RjczRjg5NkE4NDcyQzg5RThFNzgzQ0UzOAorOjEwQjk5MDAwM0EzM0Y2QzU5NkIxMTM3QzU5NkRFMTg1RTNFMTAyRTBENworOjEwQjlBMDAwMDFFNzA1NzgyOTQyN0REMDFFM0VBNjIyM0UzQUZDMjdCQgorOjEwQjlCMDAwRTJFM0RCRTk1Q0JFNURDM0YwM0MzQTg4MTdDNUMzQkY3OAorOjEwQjlDMDAwNDdGQUVEMEFDRDlGN0ZERkZGNDMwRUNBOUZDQkNERjcyRAorOjEwQjlEMDAwOUVGRkNGRTZGQkU4N0ZFQzdDMzlCRjc3NEQ3NzExOUM2QgorOjEwQjlFMDAwNDZCRTZGQ0REN0FGRkM4MkYyM0IyMkREMDRFRjE1QUUzMQorOjEwQjlGMDAwRjdEREZGQjFFQkZEN0Y4NkRFMUZGRkM3Q0VGNzcyRjRFOAorOjEwQkEwMDAwN0U1QkQwM0JEMjg5RTc5OTE3RjZGRDIzOTk1REM1QkNEMworOjEwQkExMDAwOUJGRjk3Q0U1QkRBRjFDMzU1Rjc5MTVDQThGRjJFQUI4NQorOjEwQkEyMDAwRkRDNDlENDJENjQ4OUI3NjQ4Qjc2MDlDMUZFRDlGNDY1QgorOjEwQkEzMDAwMzBBRUE3NDdEODRCQzhGRTFDRDFFNTQxQjI5N0FCNTlGMQorOjEwQkE0MDAwMUU5RDVGRjhCQUE4NzRBRTQzNDEyMDgwODdCNzEyNzI3QQorOjEwQkE1MDAwRTk1RTE1MzMwN0JBMkM4MkZDRjBBNDMyOEFGRjMyRUU3RAorOjEwQkE2MDAwMkI0Nzg0OEYyOTQwRkJGNEQwMTI4MDBCRkEzOTE0NjlEQworOjEwQkE3MDAwNzJFMjE5NzU3RTE3N0U0RjA5RDI0NjRDREY0Q0JFOTk5MworOjEwQkE4MDAwRTJGOEYzMURGQUZERDVDRDg2N0REMjhEMkU3RDc5MDFBQworOjEwQkE5MDAwN0IyOTFFQ0ZFRDBBQjIyQzc0NUY2MjE0RDYwRkQ5NTdFMgorOjEwQkFBMDAwRkUyM0RENDk3OEI5OTFENTJDNzMzQUFFMUU0RkI3MDgwNQorOjEwQkFCMDAwM0NCNUM2QzNCRkM2NUIyQjNDODk3REI0NTlENDM3RTJDNQorOjEwQkFDMDAwQ0RFQzc4QTAxRURCOTkxOUVDOEJGOTdDNjkzRjJERjc0MgorOjEwQkFEMDAwQzU5N0MzMjcxM0ZCNkRCMzE4NUFFMkQ3REM4NTlGQ0ZGOAorOjEwQkFFMDAwODZGNDRCNzg5MTc4QkY1QTdDNEIzQTE5RjEyRUYxMkJBMgorOjEwQkFGMDAwRjE2NkE0NDMyQUM2RjhGNTBGRTJCRjhCMzlENzhDRUI2OQorOjEwQkIwMDAwNkU4OEIwRUJGM0NEMzEzQ0RGQTU1RUY1RDI3QUY0NzNFRAorOjEwQkIxMDAwM0VGRkNFNkQ0NkJCN0U5ODIzODZFMjQyOERGNzExNjZDRQorOjEwQkIyMDAwMEU4QzE5QTBDMDdDOTNDQ0NDNjc4MzdEMjg5RUJEOTFFMAorOjEwQkIzMDAwREZGNTdFQjM3RjY5MEE4RUMzRkRCQjVEQ0REQzdGMEQ3MworOjEwQkI0MDAwQUJEQjE3OUU0N0Y1M0Q1NkM4MTczRTMyOEY3OUEwN0U3NgorOjEwQkI1MDAwNjExMjczMkJCQzNFOEI4RUE1RjAzOEE2QzZGMjdCOUI4MAorOjEwQkI2MDAwRDhBRTMwOUFGNzVCRDg4OUY5OTc3MjdBMTI1REQwRUQyQQorOjEwQkI3MDAwODNGRTBERThENzYzOEFFNUVEQTNGMkE4QkRDRkM0REI1MQorOjEwQkI4MDAwN0JDQzkwNzY0QkUzNzEwQTREQ0JCOTVGQkVGMEJFQUU3NQorOjEwQkI5MDAwRTkyODNGNDYwRkQ3RkI5OURGRUFDOUZERDIzMkVEOUI3QQorOjEwQkJBMDAwRTEyMjdDQTkyNjc3MDJERDhGNTg5NjQ5RkIyMzM1RENGQworOjEwQkJCMDAwNUJCNjFCRkRGNDNCNzg5QzRFRTE4QTNCQzZGNDQ3RjgyQworOjEwQkJDMDAwNzZDNEI5MTFCQzMzNjM3NzBFRTBGNUE3REVGRDA3Rjg0NAorOjEwQkJEMDAwQUU2RDBEQTNFRjkzMzNCNEE1M0QzMTFFNDA3MTREREYyMworOjEwQkJFMDAwMEQxRjY2NEUzQTY0NEQ4MDIxQjREQTcxRTdEMTRGMzhBQgorOjEwQkJGMDAwRDZCN0YzN0QzQzlGMUMzQjUxQTVGQTYzMTk4RkY3NjRDMAorOjEwQkMwMDAwQ0I2MDFDMjgxRkUzRkJENjlDMDBGRDhEODE0RDA3OTY2MQorOjEwQkMxMDAwMzc4NjM5OTNFRjA0RjgwQjg1N0ZGODIxNUMyRjA4NkY4NgorOjEwQkMyMDAwMzhEMzVFNzIyMDVDNUREMzUzRTFGQjE4RDY3NkJDRjE0RAorOjEwQkMzMDAwNTE1OTdGQjhCMjBFQ0Y5OUJBOERFMEZFN0I1OTFGRkJFOAorOjEwQkM0MDAwQzE3RTNGRUFDOUZENTE0Rjg4NTRFNjAxQUY1NDdGRjZFQgorOjEwQkM1MDAwNEE1QjYzMUFFRTdGNTY1QTAyM0QyMTc1RjQxQUJFQkU0NgorOjEwQkM2MDAwMjdFMDZGNzQyQTFCQjUxNkYxN0VBRkNBMzYxMkJDNERBMQorOjEwQkM3MDAwODU3NEFFMTA5OUUxNDIzQTY4QzBEMjc0QkU1MjkzRTIyNAorOjEwQkM4MDAwNDJCRjU4RTNCMERBMDA5RTI3MzQzRTkxRTJBRTc2MTEwRgorOjEwQkM5MDAwOTUyOTFFNDhFRUI3MUE4NzA1QkFBMzFGQkYyOTk3OUY5QgorOjEwQkNBMDAwNEIxQzc3MzY0NEUyN0U3MTk2QzNDRUVGNDk4QUI4QTIyOAorOjEwQkNCMDAwMzlFMjVFNENCN0VBODYwN0FGQzE3REU4QTMyQTlERDc3QgorOjEwQkNDMDAwQ0M3OTk0REZGN0ZBOEJDM0VFNTc3MERGQjY0NkRDRDczQQorOjEwQkNEMDAwNUNBNThGMjM2MjRFMzdGOTgxNjZENTBDQjNFMjdFNzM4MworOjEwQkNFMDAwQjZDMzYzQzU3OUZFMzE0MzdCMURFNzI1RUYxN0Y2NDJFNgorOjEwQkNGMDAwMjI0MDk3ODUzNTg1MTRBRkEyNDZDMUJBQzM3NTYyNzZENgorOjEwQkQwMDAwNDVFMTNFRDgxODg3NTQyRUUyOEU2NEZFQTE3MEVEMzBENgorOjEwQkQxMDAwRjJDM0NDNjhENzBFRTQ5NzJGMkJEM0M4M0ZBQTBBQkUzNAorOjEwQkQyMDAwMUI4RDcxOTU3ODlFNjE2RTQ4NDQ3OEVFRUVFOTIyQkVENworOjEwQkQzMDAwMUMxREVCNEM3NzEwM0Y4NzMxQzQ0M0EzQzU5OThFRkM4MworOjEwQkQ0MDAwRERCODNDQ0M4NEU3NzJBMzk3NzJCRTg2NzU2NjM3NDMzNAorOjEwQkQ1MDAwRkJGQkNEMkMxQ0NGMTk3RTI3REE0RjVCNjJGNjZFODA4MQorOjEwQkQ2MDAwN0MxNzNCMzM0N0M2MjI1RkU1MTI1RkRGRDI0QjdCMDI3NQorOjEwQkQ3MDAwRTc3N0VBRDc2QzIwRjJDM0FDNTVBQkU5M0M0NkYyMDU1NQorOjEwQkQ4MDAwMzNEN0U3QzdDMTM4QTczNkE3RTRBMURDNkM5MUQzQkQ5MAorOjEwQkQ5MDAwODY3RjgxRUQ1QUY4NjFBMjQyN0MwMEU5ODEzNEUyODcxNgorOjEwQkRBMDAwRjEwRDM4Q0ZEMUMzMDNERDE3NjZFMTdFQjQ5NDc5NTAyRAorOjEwQkRCMDAwQkYyNzMwMzdEQTA5Q0RBQzg5Q0UyQjlCMUQ1NjE3RkEzOQorOjEwQkRDMDAwQkZBNDNDOTE3MjAzRThFQUMxN0JCNzkyMEZCNjgwQkU3NAorOjEwQkREMDAwMzc1QjE4REI1QTY1QTdGNEY5MkEyNzMzRjc2MDZDN0JDOQorOjEwQkRFMDAwNTUwMkU1Nzc1NEI5MjhBREFEQ0FBMEVGMkY1NUI5Mjk1MgorOjEwQkRGMDAwQkZBQjZBMjBFNUY3NTQ3OTI4QkZCN0FBODBEMkQ3QUE4QgorOjEwQkUwMDAwQkNGNDVEQ0EyNUMwMEJDOTIxMjk1N0E0M0M5QUU1QjBGMgorOjEwQkUxMDAwRDI3RDVGMjk5NzhDN0MzMzFERDAzQjM0OEZEQTkzREM0NQorOjEwQkUyMDAwOTNGMjBFRTc2MUNBMEJDQTIzNDlERjU0QzVFQjRCNDhCNgorOjEwQkUzMDAwNDEzOUQ2MzAxNUU5M0Y1MjNERjdDMjJCQjgyRjJGNzI0QQorOjEwQkU0MDAwQjg2OTlGQ0VCOERDNkIwNjdFNDVCQzI0NUJEOTVFRjQzNgorOjEwQkU1MDAwQ0I1NkRGRTk2OUJDMkYyNTg4RkZEQjhCMTQ2NjBFRTEyQQorOjEwQkU2MDAwQUIzQjJBQzI5ODM5NDQ2RkNDQTg4Q0QxRTVBNzU1N0U0QworOjEwQkU3MDAwRkM0NjI3RThGRjlFMEU1QTdDMDZDMDcxRkMzNzVGQUY3OAorOjEwQkU4MDAwRkYyMzdDN0ZFNjM3Njc3QTIwQkQwMThFQ0Q4RkUzQjgzNAorOjEwQkU5MDAwOEJDMzVCRTA4OEM1RkMzMjBCOUQ3Mzc1MTNGRTkzNkVGQworOjEwQkVBMDAwQzI3RjgyRkY5MDNFRjI3RUYzMzNCRkY5MUJBREYzQzYzMworOjEwQkVCMDAwNEE5QjBCRURFMkNGOTE1RTgwREYzRjA5N0FDREFDQjRCNworOjEwQkVDMDAwMTExRTBCOTc3RkY1QzIyQkI4REUxNzVCNDlERUNENUNFOAorOjEwQkVEMDAwMjZENkEzRTE1RUYzOTc4OThDRkMxMjYwNTVCMzRBQzA2NQorOjEwQkVFMDAwREY5N0JGQjYwNjIyQTBGRjJGMTVCRThFMTUzMDBFQTYxNworOjEwQkVGMDAwNjFGQ0UxQ0FCNzNFNDMzOUEwNTQxRUExRjM3NzBERUZCMAorOjEwQkYwMDAwRTEyMTdDM0VDQjM5REQzREU5Q0EzN0E5MUU2QkU4MTI0MQorOjEwQkYxMDAwODM3RTEzNzlDRjM4QTI5RkM3RUE4MkY5MjM2RjIzRkQ2RQorOjEwQkYyMDAwNjY2NjFDNjQ4OTc4Q0U1MkEzMzhEMTg1Mzg1QjdDOUZDNQorOjEwQkYzMDAwQkQ5MkJGREI4MDcxM0MxM0MxRkUxQjkyQTExMjNEMkI1MQorOjEwQkY0MDAwN0I5QTI5RkQxNEY1MkRGOTkzNkI0ODRGNDlCRTlEQkQ5MQorOjEwQkY1MDAwMEFEQUUxRkFBOEM5QjVDRTBEOTFDNzMzQzVGNzU5MTk2OAorOjEwQkY2MDAwMjY0QUU1RjczMUQ4MkY5RUZGQURDQzlEODI3NjQ1NjdGNgorOjEwQkY3MDAwMkNDRkMyMzQ2RjBBRTJCN0IzNjM5NDU5MDlFMTgzMUIzMworOjEwQkY4MDAwMzJDQzAyMEU0NkVEM0VDNTQ1MDdFOTAzMTlBOUQ2Mzk2NAorOjEwQkY5MDAwNTk3NEJGOEZGNDk4MUM2NzY2NDZERTBBOEMyRjlEQjlEMgorOjEwQkZBMDAwNkExODRBNjE1NjZENzEyN0M0NDMzRDZGNEIzRkRDN0U3MgorOjEwQkZCMDAwNjM3NjFFNDc1RERBOEUxRTkxN0VCNTUzRjhFN0I1MzQ4MQorOjEwQkZDMDAwNkZGMkZCMTZFRkY4RkQ4RUQ3QTBFN0UyMkY2QzQ0REY4RgorOjEwQkZEMDAwRTIzRTIyNkUyQkNCM0Y2MDAyMzkyMEY1RkVFQ0ZDREYwNworOjEwQkZFMDAwRkYzOThBQ0UyOTc2RjFGODRFNDhCOTlGNzU3MTExRjc1RAorOjEwQkZGMDAwQ0JCQTYxN0RCNTcxNUU3NDc4QzcxNzUxNkRGQUIxNzdCMAorOjEwQzAwMDAwQTk1N0U0QzcyRTU3N0U4QTQyM0I0MkNFNjdFNEJFRUY3MworOjEwQzAxMDAwM0IxMjFDQ0EyNTNBMjcyQURGQjdCQzYzNUI3MTVFNDYxOAorOjEwQzAyMDAwM0Y3NjhCQkY1QkY4RjVDQTE3MTdCNEU5RUYzNkZBRUYyNgorOjEwQzAzMDAwOTY2NTE4Q0UwRkNDOENFRThENDlGRjFENTNCM0EyRjEzRgorOjEwQzA0MDAwMUNFMDdCNzE5RkE0QkQ3RDhFRjQ3Rjk3QUY4NTRFRTI4RgorOjEwQzA1MDAwNjBCRDlBNUREMTc4QkU3NUExMURGQkZBNjgwNkQ3RkY1OQorOjEwQzA2MDAwRTc4NUJGRkNDMjc2OTVGNjNEMTdCNjQ3RDJCQTVBQjBGRgorOjEwQzA3MDAwRkQ5MTM3RjFEQzcxQzEyNjg1QzAyODYzRjU4NDNGQzA4RQorOjEwQzA4MDAwMkJCMzg3RUEzNThDNjM4QjZCMEQ3N0IzQkY0NzM0RUFFQworOjEwQzA5MDAwOTU5MkRGNDc1NjIwQkZDREFGNTUzQzlCMDE5RTY2QkJCNgorOjEwQzBBMDAwMkJCQTQzMDgzQzVCOTFERjgwN0Y0QTZDQjUwMzA4REYwNQorOjEwQzBCMDAwMDJGRUE3NTE0RUY2MEZENjlCNUZGNzA4Rjk5N0ExREU1NworOjEwQzBDMDAwMzc2NDE3QkQxODgxQjEwMjg4RjdGNzExQ0VCM0VCRkFDOAorOjEwQzBEMDAwQkFGMUJDNzA3RUVEQ0UwNTY0NTc2QzhGNzBBMjVGRTE0MworOjEwQzBFMDAwOEM4ODVCOTZGREVDMTJGQ0JEMkI4M0RCMzE2N0M1RjlCOAorOjEwQzBGMDAwRDFEOTFERkM1RTNGQzI4OUVCRUM4Q0MyRkREMEIyREQxNAorOjEwQzEwMDAwNkIwMkNFRDczMkY4QkVFNDhFMENCRUNFNjVGREY5QjUxQgorOjEwQzExMDAwOEQ1MUREQTFGRUM5QkQxRjUzN0E1OEQ0OUZFRkE4Q0YyMgorOjEwQzEyMDAwNDE3RDdDNzI1NzA0OUQ3RjlERENGNUQ0QThENzYxQkMwRQorOjEwQzEzMDAwRjNCNUMzRTI3MTVEQzhGRTNGQ0FCMDUwRkRGM0VCRDQ2NgorOjEwQzE0MDAwMDJDNDE3RjNGM0I4OTkzMkM0NkZERjUwMzhFMzM2RjhGRQorOjEwQzE1MDAwNTI0MkQ3MUY4RjFGM0FCQkVCRTUyODUzNTY5MDlFNjU3RQorOjEwQzE2MDAwRjYwQTdCQTIwOUQ3RDE5RDVFRTRFRjY4NjQxRTgwRDdGMgorOjEwQzE3MDAwQkE2QjlDMEY3NTU4Nzk1RDJFNDNCRUE2RjU5NzQ4RjVBRQorOjEwQzE4MDAwNTc5QTQyRUFEOTJDNkU4QTMzQjVFQzJERjQ4ODM3NTQ4RAorOjEwQzE5MDAwRjgzRDI3MTFDNzNGNTJDREEyNzNDNUU5N0Q1QzkzNkY2RgorOjEwQzFBMDAwNDczOUY5QUU4NUU4QjEzMEQzMzUxOUU1RDNDNTdBOTU2RAorOjEwQzFCMDAwMjE5QzBCNTM1ODAwRUQ5MzQ1Rjc0NjZFNDAzRDI2RTExOAorOjEwQzFDMDAwOUVERTk3Q0I4M0QyOTUwQUYzQzBGQzRBRkQyQUQzMjA4QQorOjEwQzFEMDAwRUQwQ0Y0RjcyMTNGMjUzNEY0QzczOEM5QzYxNDZFNTc2NworOjEwQzFFMDAwQzhGOEQxMjc4QjRDMUUyQkU4QzE5RjMyNjJFNUZCMEZBQworOjEwQzFGMDAwNEZDQ0MxRjNCM0YxMTlCNDlGM0I2RTY1M0UxNUZENEFCOAorOjEwQzIwMDAwMkZGMUY4RDJEMjU0MUVEN0ZDQTQ4ODg3MkY4RDBEQTQwRAorOjEwQzIxMDAwQzc0MTdGRTcwNDdENEJDNzA3RDIzMUVFQTJGNEE1NDRBNgorOjEwQzIyMDAwOEFCQjM4NjdFNUU3OUVGODFEQ0Y1OTRCRjNBMEJEODM2NQorOjEwQzIzMDAwREVDREQwNjRGQjk4MTA3RTJBOURFOTc2NjEzRDM1RDYyRgorOjEwQzI0MDAwRURDQTc1MjBCQ0NFNkZDOENFREQxREM5RDBDRTM1QkRDMAorOjEwQzI1MDAwMTJDOUUzQTY5RTBCREI2ODBCQTE5QjMzOTNGMzlGN0M3MworOjEwQzI2MDAwOEY4M0REQzZFMzhDMUVCM0YwQjhENEM3MzYyN0ZBRkQ0MgorOjEwQzI3MDAwMjFGODdBQ0NBMjRENDUzQ0UwM0NEMEJFOUY2RkFENDk0MQorOjEwQzI4MDAwNDdGQjU3QzIzQjNGQUE4NkUwM0MyN0Y4N0Q3RTc4MERFRQorOjEwQzI5MDAwOEZFNzE2Rjc3QkIxM0VFNjFCNDUxQzdBRDMzNjFCQzVFQworOjEwQzJBMDAwMDE5RDQ5QUNERjgzRTM5RkQ5OTY4OTJGRjIwMEZDRkUwNAorOjEwQzJCMDAwQjk3QkE5MUNFQzRCQTA2N0YxRjNCNjAwQ0VFN0Y0MzZDRQorOjEwQzJDMDAwRUU4RjNFNkRFMUY2REFFOTcxMDkyRUE0NkZDMUY4QjU4MworOjEwQzJEMDAwRDNDOTVGQjNDOUE2QTA5RkVGQjRDMkFDMDk1OEJFQjkxOQorOjEwQzJFMDAwMDNDNTlGMTc1NzU1NTJGQzc2MzE4ODBEQkMzRjA0NjkzMgorOjEwQzJGMDAwMDFERTAzM0FCRDM5OTNFMkNENEVFMzNCMEMwQTdENUY4QworOjEwQzMwMDAwODlERjM1NTYzM0ZEOTc4ODhGQUQ3QzdGNzVFNkY5QkZBMQorOjEwQzMxMDAwNjc4NkM2N0JDQkI0Nzg5MzNFQkU0RUYyODkyQ0NGQ0REOAorOjEwQzMyMDAwRTRGMjJENTdFMEI5N0YyNjdGMkZBNDJDQTJGNkIxNTQ1QQorOjEwQzMzMDAwOUEyN0M3M0JEMDg5QkY1QkMzMUEyMjlGRUE4N0YxMTRCMworOjEwQzM0MDAwM0QxNDk0MjM0RkIyNDBGQTUzRTg3N0Q4Q0FGNzVGNjc5OQorOjEwQzM1MDAwQjY1QjI4NkVCREY4OTU0ODBGQzVCMURENzc4RDg5RTJEMworOjEwQzM2MDAwMjk1NDZFQTcxNzlCMDA3RDkwMkFCRkQ5NEFGMTY1RjEyOQorOjEwQzM3MDAwQ0Y4N0U1RDlDODNFNjdCNENGNkREQUFDOEE3MUMwMjZFNQorOjEwQzM4MDAwQzY3OTZGRTE3MUM3QTNEMTk2QTRGMjZDMkEzRjJERjI1MgorOjEwQzM5MDAwQTdGNzY0OTNERDA3RkQ3QkYwN0U1NUYxMkY3RkM1RjE5NAorOjEwQzNBMDAwMzhBMUU4MjhCN0JCRUMyNDZGNEI1QkNFNzkwNjQ3QTNENgorOjEwQzNCMDAwMUUyQ0JCNkY1MDM0REUzRjY0MUZBODBDRUQxNjIzOUU2RAorOjEwQzNDMDAwMkU5QUREOUQ1MENFMkVDQjE0NzI3N0NGN0EzQTlGMkFDQgorOjEwQzNEMDAwMTFGNzA4NEE5RTU3RjgzOTM0QUM0M0JDOUY1OUIyNjJGMgorOjEwQzNFMDAwRDBFM0M0OUZFRjVCNTgwRjk4Q0ZCOURBNDdBMjQyRTk3OAorOjEwQzNGMDAwQjEyMDkzQ0JEMzk2RkE1NjM3RDUyRjgxRkFEODRGQzlBRgorOjEwQzQwMDAwOEE3N0EzMDg5RTJEMTY4QTU3MzFEMkYxOEFEQjNGQUY3NworOjEwQzQxMDAwNUU1MUZCMTZGRUE4RTU3RTk2NTZGMzY3RjVCRkY4MDI1RgorOjEwQzQyMDAwRkFGRjZFN0I5OERCNDc1RjZCRTkxRURDNTk0QkVENUNENgorOjEwQzQzMDAwOUNGRkQ5MTdDMjQ4NkU5RDhERTFGMkUxMjRDODUzNUY3RAorOjEwQzQ0MDAwNEY4NEUzRTY4NzI5QkVFQkEzMDk3NDdGNkY5RTVGREYwRAorOjEwQzQ1MDAwQUYxQzc3NTEyNjk3RTM2NTcxRUU2ODhDMTcyQ0ZCODAzMworOjEwQzQ2MDAwQ0I0MUEwQ0IyREQ0RkUwMzBCQjUzN0NFNjNCQzY4RDczMAorOjEwQzQ3MDAwQjIzRTVGODgyMDdFMzhEQjk5RDNFNUVDOEU5RUE0OUY4OAorOjEwQzQ4MDAwMUE2MzM4OUYwM0JDQzk3OERGRUZFQzBCM0Q3M0U5MUVEQworOjEwQzQ5MDAwMUQxQTNEQzAwRkM1NjJGRjdCMzZBNjM2RDkxOTUyREU4NAorOjEwQzRBMDAwNjgxMUZCQjgwMEQ0NDRCRUMxMzYyMERGOEIyQkI5QkQ2OAorOjEwQzRCMDAwNTU2MjVGNDVGMTI1MThBRjNCMjA4RkQyODAyREI2NzVCMAorOjEwQzRDMDAwREMyREYwMkJFRDJGREZDOTE0N0U0QzFDQUZBMzg4MTM5RAorOjEwQzREMDAwMjczQkE4RDY4QTcyNUIxM0Y2NjJFOTc2NjNEQzJFMkZCRgorOjEwQzRFMDAwREYyNkRCMDNCNEYxMzI0RTE4RjlEMEE3NTA5QzRBQzlCRAorOjEwQzRGMDAwQjIzQkU3NTNGQzdEQzVFQURCNzE5RDQ5Rjg0QkNDQUMwMAorOjEwQzUwMDAwMDBGNzY5OEQ4QTRBNzAzNDg2QjExOUUzRDFBRTBDMURFQgorOjEwQzUxMDAwMjdDNDlFREIxNTFDODdFMUZCNUZBNUY4MDdBQ0Q5QkRERQorOjEwQzUyMDAwOTkyRUZBOEVGOTFBRThBRjc0OTlCMjhBQzY0OTkxRkIyRQorOjEwQzUzMDAwNUQzRTJGODkyNzQwODcxNUUzMDQxQjg3ODlGMjc2RTY0NQorOjEwQzU0MDAwMkRFMTM0Q0VCQkM1RUVDQUU0RkVBNUM2MTREN0MzODMyNQorOjEwQzU1MDAwOTFDRUVGQTk3NDlGRjdFMjRGN0RBMzYzREJCMEQzODI0NgorOjEwQzU2MDAwN0FERTFBOEM5NzA1Rjg4RjY1MzJFQTY3N0QyNkI3RDM5NQorOjEwQzU3MDAwNEIzMDFFMTdFMDRDNUZBNzhGMTdDRkQ4QTRDRkY3REE0OAorOjEwQzU4MDAwQUVDRjY3RUREMkU3NzNFQUY0NzlGNzYxN0RGRTgwMThFQworOjEwQzU5MDAwMTdGN0UxNzg3RjE4RjdFMTk4RTIzRURDNjVFM0ZCNzA3RQorOjEwQzVBMDAwQ0NFMzNFMUM1M0RDODdFMzc3REM4NzYzMUVGN0UxOTgxRQorOjEwQzVCMDAwQzc3RDM4RTYyNUJFNzEzRjhFNzlEQzhGNjM3OTc4MkY5MQorOjEwQzVDMDAwOEVBNzUyMTE2Rjg5NzQ0MDdFNjdBRjg2RTlFRTIzNURCNgorOjEwQzVEMDAwRDhDN0VGOTcwMDFGRjA3NTMzRDU0QUVCRTY0OUFDNDE1OQorOjEwQzVFMDAwRkIxMUVFNzdFQTNDQzFFRUMyRjhFMTU1NzFEQTc3OTlCQQorOjEwQzVGMDAwRkRGMTFFNEFGRDhBNDRBNDlCQjk4MUUyNThDQjVGRTM1QQorOjEwQzYwMDAwNzFBQ0E1Nzk2MTBFRjQ3RjM0MkMzRkI5MDJDMzQzQjVGOAorOjEwQzYxMDAwMzhFRDQ3QUM3RkMxRDJCNDA1RjE1QjU2Nzk4OEVFREZDNworOjEwQzYyMDAwMzcyQzcxN0Q3MDNEQTcxRkY5NjE1ODUxMkNEOTUxODU2OAorOjEwQzYzMDAwQThFNzYyREJBN0EzMzE5RTlDQUREMkM3OEYxQkUzQzlERAorOjEwQzY0MDAwOEQ3MUU0NDYzRTkwRjZERjMzOTZBNjQ0OTRFQjVGNkQyMQorOjEwQzY1MDAwQjNBRjQyRjhCRjBBMTNGNzYxQTZEODBERjEwMDBFOTJFRQorOjEwQzY2MDAwMjcwQjFGNTQzNkEyQkVFRURDOEJEQjUxQ0Q0N0MwNUVEQworOjEwQzY3MDAwNkY0M0NGQ0E3NEQ2QTVCRTY0OTdCN0U0NTcyOTI2OEFGQworOjEwQzY4MDAwNEZENzNDQTQ4NzE2MDk5ODkyOTVBNkM2RkI1MENFQ0RFRAorOjEwQzY5MDAwMzc5MURFQkMwOEY2MUFEOTgzOUZBODY0M0ZFMDNCNTk2NgorOjEwQzZBMDAwQTFGM0MxNzdCMjQyRjkwQkRGQzlEMkRGOTdFOEFDQUI5NworOjEwQzZCMDAwOEZFRjY0RTlFRjRCRjREMkM3RTc0RjVDNzIwMEY3RkRGMAorOjEwQzZDMDAwMTM1NkY1RDVENTlCRUQxRDY0QzBBMzgwNUJEOEIzQjNERAorOjEwQzZEMDAwNDE3Rjc4RDBCRTVDQkMzNjE5RTlCQjY4N0U3M0UzN0REMAorOjEwQzZFMDAwNDBERjQ1QkJDM0RDNTg1RTg0RkYwNzcyQjEwOEZBQzQ2MworOjEwQzZGMDAwN0I5NzQ1QkJDNEZERTU0QUJEMUU5RTI1RjQ1MDkxOTkyQworOjEwQzcwMDAwRjk5Q0IxNDEzRTJDNzIzMjRGMENCNDlGREZBQjNFMDcxNworOjEwQzcxMDAwREZDMzlBRkZGNkM3MDM5Q0E5QjhDRjE4RDYwOUU1NTEyNQorOjEwQzcyMDAwQjJDNTQzNzFCNUE1M0I3QkM0MkM4MTdFN0JGN0QwNkUyRgorOjEwQzczMDAwRUMwNUVCRkE0NENEQTE4N0E2QTEzRURDQzlGNzdGNUZFQgorOjEwQzc0MDAwQUQ3QTM5OEFFMkNCMDRCRjI1NUI5Q0UxNDhGNzBEMzUxMQorOjEwQzc1MDAwM0NCRTBFRkQ2NzZBNkM5MDJGMzZENEM0ODU3Nzc3MDQ5MworOjEwQzc2MDAwRTcxQkU0ODM5Rjg4NEU0MDFGRUVFNzI5M0E0OEU3MjIwMworOjEwQzc3MDAwQ0RCNTYyQkVDMzE0MUZEQUQ5NzI3RUYyMUQyREI2OEMwMAorOjEwQzc4MDAwRjc3Mzk3Qzg5RjEwRkIwRDM5Q0Y3Mzk5MDc3MjVDNzhDOAorOjEwQzc5MDAwQUZBMzZBNkZCMjhBRjJEQ0I0N0QwQkVFNDNGRTY5RDNCRAorOjEwQzdBMDAwNjZGN0VBOEZGMUEwM0RGRTg4RUZBQTE1RkY4MUNGRTc3QgorOjEwQzdCMDAwMkY2QjQ2NDQ1RDhCRjZFNzBCMTZGNzY4QzhERjU3RjMxRgorOjEwQzdDMDAwQUMxNUY3MTVDNTY2QkY5NUUyMzNCNzZEQjA2MkJDRjIyNAorOjEwQzdEMDAwMEQ1QjM3RDBGN0I5NUIwQjI5MUU3MzFFQUJBMEZERThDQworOjEwQzdFMDAwMjlGOUVFODFDMDQ3RDE3MDY1OUQxM0UwN0U0N0M4OEY1RgorOjEwQzdGMDAwQTI3MDdFQkUwN0Y2RDExQkY4RUVDOEM1QUQ0QTJFQzZBNAorOjEwQzgwMDAwRjk0Q0Y0RUVCNDE2QzJGNzVGOEI3QUM2NzVEMjdDNzQxRAorOjEwQzgxMDAwQzJDODBFODQwRjdFMEZFNDBGMEM3NkY3NjlBREQ3QzU0MgorOjEwQzgyMDAwODQ0QjI5QjQyRTI2NUVFQTRERkJCNDQ5ODE0Q0JFMUZEMQorOjEwQzgzMDAwQ0UzMkVDODc4RkFBREM5RjU3QzdENzQxOTEzNTEwM0Y4NgorOjEwQzg0MDAwMDFEN0M5N0UwQkQ5Qjk2NTY2RkU2RTUzMTlGQzdEMURGMworOjEwQzg1MDAwQTRERUMxQUE4RTVGQ0JGMzIzNzRGQzNDODVDNUVBRUU0RgorOjEwQzg2MDAwRDNEQzhBNDEyNTIxRjk4OUEzRDM3NEY1Mjc0RkVDNkREOAorOjEwQzg3MDAwRTBGRkJDNjAzOUM5OTFFQjc0RjdGRUNBMTZGQjVDRjRBQgorOjEwQzg4MDAwQkUyMTFCQUVGRkNFNzg3QzIxQkQwODZBMEZGRDNFM0U2NworOjEwQzg5MDAwNTgwRkY5N0I5M0MyRjczREJCNjIzNkEyMUZCMEM4QzRFNAorOjEwQzhBMDAwRjc0RjUzMzRGRTdEQzE1RUZFOUQ0RDYxQkE3NUQ4MkRBNAorOjEwQzhCMDAwQ0RGRDQ3QUUxNzJENzQ2RTIwRkRFRDUzRjBFRjM2RjAzMQorOjEwQzhDMDAwMEY5QUEyRTUxRTNCREVFMzQ3RkY4NEVFN0VCNzM4MkZDQQorOjEwQzhEMDAwNDRCODkxMEU2NUMyOUY1NDk2QzFGRDQ5NjVCRTdBMkIzRQorOjEwQzhFMDAwQkU5MzAwRjgzN0M3QzU1MjNEN0IxQ0M2NTVENjI4RTQxOQorOjEwQzhGMDAwNkZDNDc0MzFDNTU5RUFFM0I0QjAzRjhDN0Y1QzcwNDRCNworOjEwQzkwMDAwMkRDNDc1NjIyQzJGQzI3Nzg3OTBCRUFGRjFCOEQ0MDVDNQorOjEwQzkxMDAwRTgxNzhBNkFGRERFRDkwMkY0MTNBMTdGQ0JGMEJFOTkzNQorOjEwQzkyMDAwQTNCNzRCRjgxMUZEMkIzQTIzMUU0NzJCQjk3NDZGNzMzNQorOjEwQzkzMDAwRkIwMTJCQzZFNzREOUMxODkzOEJFQkM3Qzg2NzUyQkUxMworOjEwQzk0MDAwQzNCQUE2QjhDMkU2QTM4Nzg4Q0Y5QThCQ0NDNEM3OTdEMAorOjEwQzk1MDAwQzNDNzAyMEZGN0IzMUFGOTZGMkVBQkI3RTJGRDk0Qjk1NAorOjEwQzk2MDAwQkIxNDM3RUU0QkIxMUVFMkE1MzNGMkE1MDEyRjcxQjExNgorOjEwQzk3MDAwQURGMTIxRjFENDgyMzc0M0Y5M0NDNkYxMzU2RkFGRTIxNgorOjEwQzk4MDAwNDdGOUQ4MEE0RjAyN0Y0NkY4REJDMzlGOUNENzVDNEQxRQorOjEwQzk5MDAwMUI4NTcyNDJDRTZGMUVDRTAzQzc4MTc5RTAzOEYyREM3MAorOjEwQzlBMDAwODIwRDM0QUVENzM0RjI1RjJERjBGMjM4NUIyMzdGOENFQQorOjEwQzlCMDAwQkZDNEZEMzJCNzVFMzI1MzNBNzFCNDdFN0Q2MjNCNUNEOAorOjEwQzlDMDAwMjc5MzJFNzVBNEYyQUJFNTlGMDUwMDI3RUE4NUFCRTUxQQorOjEwQzlEMDAwMUIzOTFGMjk4RjgzRUI4NERGNEJCOERDQkI0NTQ2RkYzNworOjEwQzlFMDAwNjQ0MjZGRTE5RkVDQ0ZGQUVCRTI5Qjg1QkMzNUI2MzczMgorOjEwQzlGMDAwQzYzNzRCRkJDMEE4NzcwQTIzNEQxNDZGRDlFQzQ4MjVFNgorOjEwQ0EwMDAwQkI0M0NBNUY0REU4MTU2REY5Rjc1NDRGODM3QTFDMUE4MgorOjEwQ0ExMDAwOEY0RTBGNjlDMjRGQjgzMDMyOTVERTkxNDg1RTEyRDcwMworOjEwQ0EyMDAwMTFFOTU1MThFNkE0QjhGRUMyMjUyQUM1NTExNzQyM0RBMgorOjEwQ0EzMDAwNTc4OEREQjI2MjU5NUEzMkVBOTEyRkVGRUZGOUI0MEZGRAorOjEwQ0E0MDAwRUNGOTJGRUY4REVGMzgxMEM2Rjk2QUI5MjVERUVFMEE0MgorOjEwQ0E1MDAwRDZGQjcyRjlDODY0OENFRkY4NkFCNTZEOEFCRjBEN0M5RAorOjEwQ0E2MDAwMERFRkNERkQwQTY1QkZGOThDRjREQzc5RDNEMUE4Mjk4RgorOjEwQ0E3MDAwRDBCRTc0RjlFRTI4QkMzRTUwQjI5Q0VCRjdGN0JBNkIwRgorOjEwQ0E4MDAwQzM3QUQzQjlFRjg2MkRGNDlFQjE3MzQzMEVGQTg5QkRGNAorOjEwQ0E5MDAwMUNBNzJENzY0NUYxRjI5MTlERDBFRTI4RkRFN0ExQTdDOAorOjEwQ0FBMDAwOUQ3ODJGN0M4OUE1MjNEQUE1QTczRjAxM0RBOTkwOUVGQgorOjEwQ0FCMDAwMjM3QkUyNTQxODc0NDFFNzcwOTFGNDlFRDkyOTg1Nzk1QgorOjEwQ0FDMDAwRjAzQ0VBOUNFOUMwNUZFRkMzRkQ2MjZFNkQ3QTQwQzE0NQorOjEwQ0FEMDAwQzM1M0NEREIxQkY3RjdDQjlGMjU3QkE2Rjg4MTI1RTk1OAorOjEwQ0FFMDAwRjhBRUEwQjZBNDQ3NzQ1QkZFMTQ5OTZFMTFGQTFDRUQ2MworOjEwQ0FGMDAwN0E0Q0QxQUVDN0Y4MUFCNEVCMzE4Rjc2M0RBNjY4RDcyMQorOjEwQ0IwMDAwRTNGN0YyQjU3QUJCNzA2QTRGMkVCN0E0REZCOTVCNzU1NQorOjEwQ0IxMDAwNTMyRTlFRkJGOTg2QjM4QzBBRDJDMzBFN0EwNzc4OTEwNgorOjEwQ0IyMDAwMTJFRTQ2RjlCNDA4NkQyOENDRkYzOTgyRkMwRUVDOTM2NgorOjEwQ0IzMDAwMUI3NTc0OTZFRjA0Q0I3NzgwODczNDgxQUQxNkIyNEVBNworOjEwQ0I0MDAwQUVCRjY0NjdBMUY3NzQ4N0IxMTg1RDdFODQzRDUxNTcwRAorOjEwQ0I1MDAwN0ZBNDMzNDU1NzdFNDM0MkE2QUVGQzQ2NTdBRTJFN0Y5OAorOjEwQ0I2MDAwNzNDNkI1QkFGQTYzRENDMzc0Rjk1QjA2REVBOEFCM0ZFMworOjEwQ0I3MDAwQ0UzMzRFOTc5RjUwMzA1NTU3N0Y5MkI3NTA1NzNFNzlERQorOjEwQ0I4MDAwQ0E3QzVERjk1NEVENEU1REZFRjZBMjdCNzVGNUVGQTgwQgorOjEwQ0I5MDAwNThBMjJCOTdFRjIyRDdFMTdFQ0M4NkVGQkZEODI5OTVGQworOjEwQ0JBMDAwRUYyM0RGQTMzMjdBNUY2REYwMDgxM0Y3MzNEQUI4M0U3NAorOjEwQ0JCMDAwNUFGNDVFMEY0NzI4MUYzQzI5RjhGOTUyOTZFNzUxRTREMgorOjEwQ0JDMDAwNTdGOUJFQTU3Q0I3NzIyQkVBQTNGRTc4OEUxOTUwRjhGMAorOjEwQ0JEMDAwN0VCODNFMTFGOUQ4NThDRjU4M0UzOEUyRTA0NTE3RDAxQworOjEwQ0JFMDAwMzI2NkZCQTk0OTY2OTAxNzgzQUYzOUQ4MzcwREYyNTNFNworOjEwQ0JGMDAwQjdFN0RDNEFGOTQxMDc1RjRFODU3QzYxRDZEREI3OUExRAorOjEwQ0MwMDAwNDE1RTBERUU3M0YwMjI5NjlGRERERTk3OTc0RjYwNjRENAorOjEwQ0MxMDAwOUE5NDY1N0QzMjA5RTM2NTA3NUY5RkJBQ0FDREZEMjgwNgorOjEwQ0MyMDAwNkRERTc3OTcyOUUyMDNFRjg5MjMzRTMwMEQwMDFGNjMwNQorOjEwQ0MzMDAwN0ExMEY4MThEM0MzQzBDN0IzMkQ4Q0JEMDk3QzhDRTkxQQorOjEwQ0M0MDAwMTFEODlGRTJGNzc3NjA3RjhBRTk1MUQ4OUY2MkZBM0U1OAorOjEwQ0M1MDAwRUM0QjMxQUQ4NzdEMjlBNjFGNTU0REExRjQ5MzJBOEQ0QworOjEwQ0M2MDAwREE3RDVBNTU0NEU5Njc1NTE1RjRGREYzQUE0QTRBRkY5RgorOjEwQ0M3MDAwNTRFNUEzRUY4NzdCNEJGRjQzNDBGNzdFNjg3QkVGODQ0RgorOjEwQ0M4MDAwQ0E3MzRFNzlBRTU5NURDMTFBMjI1MDZFMzQ5ODYzQkU5NAorOjEwQ0M5MDAwQjYwN0NGMkJEQkY3MTM5OEQ5RDcyMUY2NUFCNkUyRjlBRQorOjEwQ0NBMDAwQTAzNzhEREZDNTQ5NzFFMkUyRkIxRDI5REEyNzQ4RTc4RAorOjEwQ0NCMDAwM0ZBNDRDRThEMTU3NDUzRDU2RjEwNjg2REFGQ0MxRDQ3NQorOjEwQ0NDMDAwRjY3QjkwNUI3QjczM0JGOUREMkNDRjMxRUM2Rjg4OUQ1RAorOjEwQ0NEMDAwREY0RjFFNjJFN0Y3OEY4Nzk4RUJBQjkxQkZBQTdGNjRBNworOjEwQ0NFMDAwMkU4Q0ZGMzkxMEM5REZGREE4QkVERkVDNDczRkE4NzJDQworOjEwQ0NGMDAwODlBRkYzQTFGMThDRjJENTNGMzZEMDdERTUyMTRFNzc5NworOjEwQ0QwMDAwMDJFQTJCOTk2RjM5RjdDNzdGMjE3MTNFRjIxQzVFQzY4QworOjEwQ0QxMDAwRjdFNDVGQUExRjgxRjZDMjUwODdENTg1NzIyNDM0NkU2RQorOjEwQ0QyMDAwMDBDRkRCMEY0NDdFMkRFMTYxMzg5RTNDREZERkY0MjMzMgorOjEwQ0QzMDAwMEI5ODcyODJFN0Y4NDNFQ0Y1MjlFODM3MTg3QTk3REQwQgorOjEwQ0Q0MDAwMUQxQUI3MjRDRkVCOTU0QjBEMkFGQTU1NjU3QzkyMUMyMgorOjEwQ0Q1MDAwNDdDMjFCNjk4NkZFRjI4MkYxNDc0MzlDQjVCOTc4REU3MworOjEwQ0Q2MDAwNTE1REU2QTBGRTNBQzE3NzZCMUVENUYzQThENEFFMzY2RQorOjEwQ0Q3MDAwMTdGRDcyNDM0QjFEMTQwNzJCRTMwNDNBODk3OTQzM0Q5OQorOjEwQ0Q4MDAwOUE2N0ZFMjU4REUyMjQ4NjhBMzgwOUVDQzdDRUNCN0REMgorOjEwQ0Q5MDAwRDhDRkQwRjg0MDIyQzY4MTBEQURFMEVGOTBBRDU3Rjg2NgorOjEwQ0RBMDAwRkJGMzMyNkUwMUVCNDc4NEFDNUI4NDEzRkJFREZFMzc4MworOjEwQ0RCMDAwODAxN0VEMjg4Rjg3RjAzQjQxRUVFQjVDMjIyRkNGMUREMworOjEwQ0RDMDAwRURDM0M5QkYzNTQyQzg5QThGNTNCNENFNTk3ODZGQzVFOQorOjEwQ0REMDAwRTZGQzczMDRBREVGQjRBRUU4MzcxRDI3RUNGQTdGQzE3MworOjEwQ0RFMDAwMkZEREIwREQ3RjlGNUYzQzlDREVGODgwN0Y0QTZCQkUwRAorOjEwQ0RGMDAwOTE3NDkxNzQ2RThGOEYyNERENDNFMkNDODhDRTJENzFCNworOjEwQ0UwMDAwNjNBMjFGMjM3RkI1Qzc1NzkyOUY4NkQ4MzlERDkxQUVBNQorOjEwQ0UxMDAwMThBNzI2Rjk0OEI5QzRERjc1MUI1QTZBMjc3RDI3Rjk3OAorOjEwQ0UyMDAwQzhDODA3QURGOTg4RjM2NUY1REQ3NkVBQUYzNTFGMDVBQgorOjEwQ0UzMDAwRTk4RkY4RjhGN0Y5QTg0MUM1RjNBQkFCRTU5RjE5NERCOQorOjEwQ0U0MDAwNkM1NDM0MTQzRDk0QUE2RDQ1Mzk1Mjc4QzlGNTI2RTZFMAorOjEwQ0U1MDAwNjdCMTYxQTM5MEE1NjRGOUUzNThERUJGNzVCOUY2NURDQgorOjEwQ0U2MDAwOTMyNTNBODRDRjg2MDgzRURCREY0RTdGQjI5RTdDRjc2NworOjEwQ0U3MDAwNDJGNjdGQkM5REZBRUYwQUJCRTFERDMwMTlBN0UyNzFGMworOjEwQ0U4MDAwRTQwRTA4QzY4RDJFMUFDOUY5QUIyMDQ1MjVCQjYzNDRCNAorOjEwQ0U5MDAwMTY3RkNGOUMzOUI4OURFRDgyRkY1MDFFREZDNEI0QzMwRQorOjEwQ0VBMDAwRDEyOUY4RUVBODk3REUxQjFEMTU2Rjc4NkY1NEQ4RTdDRgorOjEwQ0VCMDAwMDU4NjczRkU5QkIyNkUyMEZCRkNBNkNCQkM1QkJEMkMzMworOjEwQ0VDMDAwNEJEQ0RGNDk2MTI5NTdGOUFFRTg2RkIzNjg3Rjc4QTU3RAorOjEwQ0VEMDAwRUY4QUYyRjc2OEYzQzU3QTRGMTJGQzk0RTY1MkQ5RTA3NAorOjEwQ0VFMDAwNTg3QzlGNUQzM0EzNzIzOThDRUZEMUU2RTBCQkFEM0UzOQorOjEwQ0VGMDAwQ0FERkM4RkM5NERFQ0MwMjY0NDc4QzAxNDU4NEY5NUIzMAorOjEwQ0YwMDAwMThBMzdCRkI4NzIyQzY0RUMzM0I4NzIzRkE4RUU4OEU4RAorOjEwQ0YxMDAwREY0M0RFRDlGMzIzN0MwQjU0RURGRjM4NDNERUQ5M0JFRQorOjEwQ0YyMDAwOThFRkEyRkJBQjA3RUQ2OTY0ODdFMjdBQjU4NEY4NEIxMgorOjEwQ0YzMDAwREYwNkZEREMxREU2NzcwOEY0MzdBNjZGODBGRUVFMEVGNworOjEwQ0Y0MDAwN0FGNDJERDBERjk4QkYyOTYzMDlDMzc2QTM1Q0ZBQjhDMQorOjEwQ0Y1MDAwMjdEOUZFNjZFNzA4RDhBOEI1OEZCRjlCNzM1RUVEODIyMAorOjEwQ0Y2MDAwRjg3RDM3QTY2NzNFRjJDNUJCMzFEN0U0RTM3Q0RGOERBMQorOjEwQ0Y3MDAwRTk2NEUyQTlDRDRBNjlGNjJCREREQkIyOTNFNTdBMDhENAorOjEwQ0Y4MDAwOEUzNzhBQzYzM0UyNTdFMkQzODg0Nzg5REY3RjAzOUYxMworOjEwQ0Y5MDAwRUZCNDg1Q0ZBREI4OEZDMEZCMjFGNjhGQTMxMjUyRjE0RAorOjEwQ0ZBMDAwN0M5M0NCRDlCMjg4NjRGMUJFRTg3QjM5NkEyQUM2RkI5MAorOjEwQ0ZCMDAwMEUyMjM4ODc1NjVFQ0JDQzc4REU2RUU3NzgzQTU5QzVCQworOjEwQ0ZDMDAwN0M4OERGRDMzODA1NzQ3ODFCRkM3QkNDM0NEQzE0MUFERQorOjEwQ0ZEMDAwMDdGRDhBNERGQjEzQzI3MTcyOUQ0QUY3RjVDRkJGMTQ0RQorOjEwQ0ZFMDAwNDY3RUJCNTM3RUVFOTc1QzY4RDIxQUIzRDA2RkFGQkE2MQorOjEwQ0ZGMDAwNTZCOUQxREU3QzU3MjUzRjMwRkJFOTUwRjJGOEM4QUI3QgorOjEwRDAwMDAwRTBENzRERkM5RDgzNTJGQkE4MzZFOTI5Rjc5N0NGQTVDMQorOjEwRDAxMDAwN0E2OEZEMzNDM0VGNEI3NEIxRjFGNzIwRTRCQjk0OTcwQQorOjEwRDAyMDAwRkJERDk2MkUzNjJFQUYyNTdERDc1OTg1MUQwMEZEMENENAorOjEwRDAzMDAwMDAzOTlCRjQ3MDM4RURCN0Y2NzRGNEZDODhGMzgzN0QwNworOjEwRDA0MDAwMENCRDNGRDVEQzI1OTJGNEQzNDExMTE3MzczNEQwOUI2QQorOjEwRDA1MDAwREU1QjJCMTBCRjIzRjA5Njc4OUZGREEwODg5N0ZCN0JBQgorOjEwRDA2MDAwQkE2NkNFMDY3OERGNzIxREVDODJGRTg3RUIxOTNGMDdBOQorOjEwRDA3MDAwQkFEMUMxREZDM0JGREFGREI5MjM1QkVDQ0Y3MzU4Q0VBMQorOjEwRDA4MDAwNTVGREVFNDEwNzk1RUU1MzBDNjVFOTc0MEUzRjAyRTE0NAorOjEwRDA5MDAwNDUzOUY3RjYyQzMzRUFDOTkwREYzREEwNzlGRDZGRkJFNworOjEwRDBBMDAwREQwM0M2OUE1NDlDNTc5MjUzNjE0RkE2NUNGREVGMjA1NgorOjEwRDBCMDAwQTg2MjVGMjU3RjBGQTE4MDE3QjVGQTFEODRBN0EyMEE3OQorOjEwRDBDMDAwNzg1Q0JFNjM2RTlCQkY4MzkwMjRERUE5NjYyRUFFMzc2QworOjEwRDBEMDAwRTRFRjIwOEM0Q0QwRUI5MTExQ0U2MTg3OUQ5NEVBRkQ1QQorOjEwRDBFMDAwM0M0OTk3ODkxRjFCOUQyREY0QzdENUQyQkY4QzExRkREQworOjEwRDBGMDAwNUJFMjRDRTM3OUZDRDM1MEFERDdDM0U4OUYxRjExNkZCRgorOjEwRDEwMDAwNzFGQjVEQURGOUUwM0ZFRDc3NEVEQUEzOTNGMUY3NEY5OAorOjEwRDExMDAwOEM3NDMyRkUxRTRBOTI1QTZBQTY3NzIwMDU5REE2QzBEQworOjEwRDEyMDAwN0Y0OEE3RUJDNUVGNTVFNEUzRUY1NUIwRkY3Nzc0QUI0RAorOjEwRDEzMDAwMzZEMEVEN0JCNkFBM0ZCRTVCN0FBMTkwQ0JGNUY2RjQ3NAorOjEwRDE0MDAwRkUwRDI5OUVGQkIzNDFGRTNDMkFGQzQ3RDIzRjIyRTM2MQorOjEwRDE1MDAwNzI4REJGOTcyNEZEMDAzMjVFRDczNzlDRDNEQjc3M0NCRQorOjEwRDE2MDAwODJDRUFGRUU1MTFCMjI1MUNGMUMzN0YxREY0NzFBRDhDOAorOjEwRDE3MDAwNDE3QjFDRTVEMzhDQUMwQTA1RjE5MUMwQkMzQkU3MDJCNgorOjEwRDE4MDAwRkNEM0ZGQ0I5NjhDRjlFOURERjg3QjkxMkM4QkZGRkU2RAorOjEwRDE5MDAwOEY4NDZGN0ExMjhGRTc3QTI2NUJFMTdFM0YzNzhGREZDRAorOjEwRDFBMDAwREE5OENERjcwMTkxNkUyN0M1OTkxNzY2MzExMTNGQ0JGQgorOjEwRDFCMDAwOTJBNzY3MjM3RjFFMERFQjg5RkNCNzg2RkIwMzFCRjA0QworOjEwRDFDMDAwQkRDQUY4RTA3Qjk1NjhBN0EzNUREQzU1RDhBNUQ1Qzc5NworOjEwRDFEMDAwRUM3NkNFODc0Q0E3RkYzM0ZENzY1RDlDNzNFRkFENEVBQQorOjEwRDFFMDAwNUQzRUJCMzY0MTU3QkZDRjVFOTdBRTNDMzc5MEExMkIxQgorOjEwRDFGMDAwRUY3QkM0QURDQkY3QUYxRkE4QUI3RkNENjcxRTVERkU0NQorOjEwRDIwMDAwREE4NjAyNURGRDQxQTdCQ0JBN0MxMjZCN0EwMkYxN0IyMworOjEwRDIxMDAwMkMzQjk1REY5RjUwODQ5RkM0QzVFOTMxRkQ5RThFNzRFMQorOjEwRDIyMDAwNUY0OUVFM0Y2NERDQkIyNkY4RDlCOEFGRTk2NkU1NzYyNgorOjEwRDIzMDAwN0Q3NTIyRTNGQjU2QkJEODlGMzJGREZFNDYxMzcxRUI5MgorOjEwRDI0MDAwRDJBRTY3M0U3RERDQkE4QzU3NkZEOTA3ODk3RDhFREMwNAorOjEwRDI1MDAwNEY4NEM0QUI3QjEwN0UxOUFGREU0Mjc3RjE3RUE4OTE3QworOjEwRDI2MDAwNUZCRjE2NzQzN0NFQTM5Qjk1REZBRkFCQkVENzRBRjcyRgorOjEwRDI3MDAwODQyNDdDNDZCOEQ0MENDRURGOUJFRDZEQkYwN0Y1NURGMgorOjEwRDI4MDAwMzZCNzEzRjJCQjdCQ0YyMUJGM0UwREUyOEFGMEQ5NkFERAorOjEwRDI5MDAwM0M3NzAzRkU5RTQwRjVBRkFERUVBNUFFQ0I4RjM3QkQxQworOjEwRDJBMDAwMEY5RkNGMzQ3QzM3Mzc4QkRFNUZBNTdCODE3MjVDNzMzOQorOjEwRDJCMDAwMEUxRkY3NUMxRkMxRTc4NkYxQTY0N0YzRjgzODE2NkQxRAorOjEwRDJDMDAwQTU3QjJERUQ4RkM3RjE5QTYwNjVDQkU4REQyQTcxQ0Y4NAorOjEwRDJEMDAwRTM4RTU1QjUwRkEyMEI3NTlBQjVDNkMyMUYxRUYwNUI0MworOjEwRDJFMDAwRDA4RjM2N0EzOEQ4ODlCOUU4NUY3REY4NTEwN0Q4Njk4OAorOjEwRDJGMDAwNEY1NzlBQzkyRjE2OTE2MzlGRUNFQjFFQkNCN0QzMEQwNQorOjEwRDMwMDAwRjY2OUM4MjdBMzkxRkVEMEVGOTIzRTNDM0UzRDBCNkRERgorOjEwRDMxMDAwOUYwRUU0N0Y2RkI5NkY2MUQzQzk3RjQ2RjJCRjBEQkUyOAorOjEwRDMyMDAwMjM3RTk0RjNGODlGQkE3RjIxRjlENzg4MjdCOTJGNjcxNgorOjEwRDMzMDAwNDJBRjc1MTc3MDQ5RkNDOTc1MjFGMTI3RUZCRkI4RUVGMAorOjEwRDM0MDAwQjQ3ODM3M0FFODFFNEQwMUM2RTU0OUZBQURFOUMzRkRBOAorOjEwRDM1MDAwOUNEMzA1M0VCMDFFQ0FBM0Y2RUE4RDU0QjNBMkYxQkMxRAorOjEwRDM2MDAwQTA5OUI5QTI5RDk3RjE5QkZGMEZERDRCMjFGQ0I3NzdFOAorOjEwRDM3MDAwOUZBRTNEMzlEMTRBM0VCNDczQkZBRTNERkVBNDdGNTc0OAorOjEwRDM4MDAwNzFDRjJFNDQ0RUYwNzgyOTQxMEY3Rjc3MTNDNTI1RENFRAorOjEwRDM5MDAwMTdBOTVGQzcwRkU1NzBGQ0U2ODlGNTA0RkFEQjkxQUJDRQorOjEwRDNBMDAwOTcxMzBDQ0YzRkFBOTdBQjQyNEVDQzZERjlGRDEwRkMwMgorOjEwRDNCMDAwM0U2N0I5ODVFQzZFQzZCQzhGNjE5Q0M2NUZENjU4RThFNworOjEwRDNDMDAwOURDN0ExMUU0NkY2Q0RDQzc1OEE3RjgzMTJGQ0REQUVDQgorOjEwRDNEMDAwNDI5RkUxOUQxNkY1MjdCMjBGQkY1RkE1MzhGMUY3MUZGOQorOjEwRDNFMDAwNjZBREQ0OTdDRjczRjBERjFEOTk2MzdDQUY0NjlFQzdCRgorOjEwRDNGMDAwNUQ2NjVGNUY5NTIzRjRCQjlCQjlDOTJFMTM3MTE0NDUxRAorOjEwRDQwMDAwQTI4RUQxMkU2QkY2RjNGMzQ2REM5N0FCREM4RjQ1RjFBMQorOjEwRDQxMDAwNzc1MkVGQkJGMEJDMkJFNDFEMTZDMDZCNzgwNkVBRjEyNworOjEwRDQyMDAwNjVFNjM2RTMyMjVCRjBEQTRFRENDNzM5ODc4OEZCNzBBRAorOjEwRDQzMDAwRjAzODk3RTY1RDYxRkM3QzU4OUVDMzg5RkFFNzdDMTc1QgorOjEwRDQ0MDAwQTkxQ0VCNjM2RkU3NzM3OUZDOEEzQzdGMzM5RUVGMzU1MQorOjEwRDQ1MDAwM0I0Qzc0M0VENUJDMkI5MkUyMUNGMERDMkIxQUY4RTE1RAorOjEwRDQ2MDAwOEM2OTY3Qzc4MTI5NDFGOEI0MDY1NTc3NkU2NDRDQjU1RAorOjEwRDQ3MDAwMjVCQjY5M0ZGOTVFNzc2RDVCMEVDNkU5OUJERDc2MzdBQworOjEwRDQ4MDAwRTRFRjc3MUNBNDc3QkM0NjBCM0Y5ODExREU5NkRGRjFFMgorOjEwRDQ5MDAwMUJDQ0RGRDU2OUY2NzE3QkI3Qjk4MEJGNzcwMkYyOTFGQgorOjEwRDRBMDAwRTE3QTkyRjExQ0UzMTg1ODc3OTAxNjA2QUUyNTc4QUUxMworOjEwRDRCMDAwRjZGQzZCQzJBNTVDN0VGRTdCNjkxMEI1RDc1NjVFNEI1MQorOjEwRDRDMDAwRjk2RUNCMUVCQzEzRUYxOTREQUE5RTY3QzE1MDgwODYyMgorOjEwRDREMDAwMjcxNjhGMEM4N0E2MEQ1REZENEJDMzkxNkVDMzk0MzY0NgorOjEwRDRFMDAwQ0YyRkRFQzlFMTdBQTVDMTcwNkY0MUE2RDdGNUUxN0FFOQorOjEwRDRGMDAwNzUzMkM2RTZGNDBGODlFNzVBQTJEMDdBNThBODMwMTlENworOjEwRDUwMDAwREY0NUYyNUNFNjJGRDY4OEZDNDg5RTVGQjQ5Q0U3MUJBMworOjEwRDUxMDAwQzRFRjJBNkMxMUZFMTY5QzM3QTYzODZGRjQwQjZDMTdGQgorOjEwRDUyMDAwRkUxODlDMzdBNjM4NkZGQzhFRjIwQkYzMjhCRjMwOEZBNQorOjEwRDUzMDAwRjIwQkYzMjhCRjMwNDVGOTg1REY2NzMyNkY3MkFFQ0E1MAorOjEwRDU0MDAwQ0ZFREYyNDNENjA3OUVEQkU1ODdEODQ3Nzg2RTE3OUE3MgorOjEwRDU1MDAwQzc3M0JCRDBGQTc4NkUxNzVBOEVFNzc2QTFFNTc4NkU1RQorOjEwRDU2MDAwMTc5QUM3NzNCQkQwRkE3ODZFMTc5QTY3MDM2RjBDRTZFOQorOjEwRDU3MDAwNTFERTc5QzZFOUYyMTNDMEZFQ0YwRjU5REY3ODZFMTc3RQorOjEwRDU4MDAwREEzRjlFREJFOUZBRDNFRUQ0QjVCRjlENTVFQURBRTM4NAorOjEwRDU5MDAwQjk1RDY4RkQxOTk1OEFFRTVDNkY4Njc4ODc3NkQ2REE3NAorOjEwRDVBMDAwMzhFMjlGN0QyOTVFNUIxRkEwRUZGRjg5RjhFN0REMTY1QgorOjEwRDVCMDAwREMyRkFBNzVGM0Y5QkUyRERDQ0RFOTVDNTNDMEU5NkUxMgorOjEwRDVDMDAwRTJGNzJDOTRBNkE5NDRFN0M1NTY5RTFGQzlFM0JDOEQ3QgorOjEwRDVEMDAwRkM4M0U3NjJGOTE2N0UyRTg2Mjk5RThCNjE4QUU3NjJCQworOjEwRDVFMDAwOThFMkI5NTg3RTBGN0UyRTg2Mjk5RThCRTE3NzNDMTdGNAorOjEwRDVGMDAwQzMxNENGQzUzMEM1NzMzMTRDRjE1QzBDNTMzQzE3QzMxOQorOjEwRDYwMDAwMTRDRkM1QjAxRDlFOEI2MThBRTc2MkY4MURDRkM1MzA2RgorOjEwRDYxMDAwQzU3MzMxRkM3RTFDQ0ZFNzJDNDFCOEQwOUVFRkFFREI0QQorOjEwRDYyMDAwNTcwMjFGRUFGNjk1NEU1RDFFRURGOUQwRkE2OENGODdENgorOjEwRDYzMDAwOTZBMzNEMUY1QThFRjY3QzY4MUVFREY5RDBGQTY4Q0Y4RQorOjEwRDY0MDAwODdFNjQ3RTVCODY4N0RBMTVEMUZEQTBFRURGQUQwN0M2QworOjEwRDY1MDAwNzY4REVGMERGNDlEOEQ1OUY3Q0Q2MTRDMUIyMjk1QTc2QQorOjEwRDY2MDAwMTUxMDE5MDU3REZDOTNGMUZDQjIyMTRDNDk4RTAxQzlCRQorOjEwRDY3MDAwNjk1OUIyNzk3MjNFRTQzNTExNDc5OUMzOUE0Q0Y0RkI2QgorOjEwRDY4MDAwN0JCODc5QzQzODg3MDBBM0I4RDVFQzFGMTNBOTdDQUE0RQorOjEwRDY5MDAwQkM3Rjg3RkY4MEVFQjlCQjE4RkQxRThEM0M1Rjk3RUQwOAorOjEwRDZBMDAwRERDQ0E5NjIyQUVCMDdGMzZERDczMzhFMkZFQjkxRkMwQgorOjEwRDZCMDAwMEM4MTAzNkY1QTYzQkM0RkVFNjI0NzFFQzZDRDZFMTFEQworOjEwRDZDMDAwQkY4RkJCNjUyOThGQjczNkYyRDU2MjYxMkY2RDMxRUQwMworOjEwRDZEMDAwM0M4OEY3Njk5QTBBMTVCQTc3OUQ2RTY2NDcyQzc5ODg1NworOjEwRDZFMDAwQTc4QTNDQjQyMzY2Rjc4OTExN0FBOUUyM0FGQzFEMzE3NgorOjEwRDZGMDAwMDlCN0Y0ODM4MjlDQTBGQjg5ODM5QkVBNDc0NDQzM0Y5QworOjEwRDcwMDAwOUE2RjE4RkQzRUNFNjgyQkI3MUZCMDFERUUyQjdCRkIyQQorOjEwRDcxMDAwMTRDRkM2MTBGRTVFMjBFQzcxQ0RDN0M3N0ZFRTk5QjE2NQorOjEwRDcyMDAwQkM1RDM4NkZGN0RDMzM1MTg0QzdCMUNCMTQ4QTNCMUIyNworOjEwRDczMDAwQkM5RDc5RjAxRUY0M0Q0MjlFRjZERTFFNTA3MUJDQzJDNworOjEwRDc0MDAwNjU3QzNDRDk2RkUxQkE2NEJBMTc1QUM4MUFGMkYxNUUyNworOjEwRDc1MDAwMEJFQkE3MzA5NERCMTI2RjMwQkZDMzM4QkY3NDU4MkE2RAorOjEwRDc2MDAwRThDN0JFRDJGQjU0NDNGQUM1OENDNDc4NDQ1NkM3RTgxOAorOjEwRDc3MDAwNUREMTMxRkQzRUQ0Q0Q5N0M4M0U4MEZBMjVCREQ2RDNDQworOjEwRDc4MDAwQTdEMDNCQ0U2MzdENEI5NjIyNUI4Q0YxRERGOTQ2MDczQgorOjEwRDc5MDAwQUNCRjg5Qjk1MzVDQTQ4QUU4RkVCMTg0QTc5NzY3QTc5OAorOjEwRDdBMDAwMDlENDIyQ0I2MkY1QTYzMDA1RTlDRDBFQzU4NUYwMEY3MAorOjEwRDdCMDAwQUNGQzg5NDhFRjVDQjc4NURFNTUxRTY3NzY1QUU4OUQ1QworOjEwRDdDMDAwOEU3NkUyNzUyRTNBNjRCQzhFQzE1RTMwQzRFNTU0MkY2RAorOjEwRDdEMDAwRkUyQzE5RkRDRDBCMjM0REU0Mzc1OUI4M0I4MkVDMDZFNgorOjEwRDdFMDAwNkRBRDQyNzI0RERBNDE4NTIyREVFRkUyQjIzNzNBNEMzRQorOjEwRDdGMDAwNDZCQ0VGQjQ1MDdGMzI1RUE3MkNDRDlGNkNDMkZCMDlCNAorOjEwRDgwMDAwOUQzN0U0QzRBQTY0MDczQzhGRjJGMEFDRUZFNTVCMDdGOAorOjEwRDgxMDAwNjJCREU1RkM1REQxOEJDQjc2RjNERjE5MTVFNzNCRjJGQQorOjEwRDgyMDAwNzc0QjY3OEJGOEFGQzI2QzZGMzRDNkMzQzhERjQ3OTNDMgorOjEwRDgzMDAwRjc2NEU0RUY5MjRBM0Y0RkUxN0I3RERGNDRGQTE2QUU5NgorOjEwRDg0MDAwMTdFRjdFQUYyQ0E0RkJFRkM2QjhBQjEyNjFGRkNENUYyNAorOjEwRDg1MDAwNjZBMUI4QURGOTA2RkJCMDQ0QzQ2NTVERUVGNzRBMEZBQQorOjEwRDg2MDAwRjUzMUQ4ODdGMjc3NzI0NDFEQTY3NkY5MTRGREMyRjIxRAorOjEwRDg3MDAwREVFNzM0MEI5NzAzRDM3NjMyM0FBRjlBQjY2NDg0MDk2NQorOjEwRDg4MDAwREZBQjY2QkIzOUZGNEM1QkMyRUQ5QzY5QUY3QUU4RkU0QgorOjEwRDg5MDAwQTZCNDFCM0YxMEY2Q0NGODRCNDk4NEZGOEY4NUZEMzJCMAorOjEwRDhBMDAwMDlFMzU1MDFDRkEzMUJDMjQ0MUM1QjIyQTU5MzJGRjFCMgorOjEwRDhCMDAwRjhENUYxMEUyRTBGMUFGNkYxNzczNzlBN0QzNjZFNTc5RQorOjEwRDhDMDAwMUQ2NkZDREQzODAzN0Y4RTMzRkI0RDc4QTFEMTNEMThGQQorOjEwRDhEMDAwRjgxM0YyNjNEMDFFODJGRUE2QTA3RDE0ODdGQzlFMzI1MAorOjEwRDhFMDAwOTJFMjIxMEIxNEJBNDc2NEU0RjdEMTk2OEEzNzMwREUwRQorOjEwRDhGMDAwNzZGNDY2RTZGNkIxNTA3RTA3M0VDNkZFN0MwQUJEQzdFQQorOjEwRDkwMDAwQTA4OTdEQUVFNDYzMjNERjRGOEYxMEZFMjkwN0Y3M0YyOAorOjEwRDkxMDAwQjVGODI5RDA1NkM1NDdENDdEN0Y5QjhDRjFDNEQzRDFBRgorOjEwRDkyMDAwNjdEODk5QTZFMUMxQjhCREM4MkM1RUZFOEYxN0ZGMzYzNworOjEwRDkzMDAwNzkxOTZFN0FEQUYxNUJBOEJGQjQxMjNFMzRGOUVFNDQ3RAorOjEwRDk0MDAwM0I3RTA0RjQxRkEwQkNCQ0UzQUU1Q0VCQ0MxMDc5RjlDOQorOjEwRDk1MDAwN0YwMTgxNjVFNUE5MDA4MDAwMDAwMDAwMUY4QjA4MDBBMQorOjEwRDk2MDAwMDAwMDAwMDAwMDBCRUQ3RDBCNzg1NEQ1QjVGMDNFNzM0MAorOjEwRDk3MDAwNjYyNjkzNjQxMjI2MjE5MDEwNDg5ODA0MjJBOTA2MzgzRQorOjEwRDk4MDAwNzk0MTQwMUU4N0M4MjM1OEI0MDM0OTE0MzAwOUMzM0I2QQorOjEwRDk5MDAwQTg3ODIzNkEwREJEQjQ5OTkwODAwMUMxMUIzNDBBQTJGNgorOjEwRDlBMDAwRTg4MENBQTU5NjZBQjRERTBBNEFCRDgzODg1NUVCMDNBRgorOjEwRDlCMDAwODM1NEVGNkYxQjg2QTdBMEI1NDZCOEQ2RjY3RTVFRkRGMgorOjEwRDlDMDAwRDc1QTdCRUZDQzlDOTM5OTAwNkFGRkZGN0VGNzZCRjhFOAorOjEwRDlEMDAwNzQ2NzlGQjM5RjZCQUZGNzVBRkJFNEFERkNEMjhDRkMyRQorOjEwRDlFMDAwN0UwQzdGMkNBQzNGNjMwQjVDRjQzQjlCQTJFNkE1MDY1MAorOjEwRDlGMDAwRjMxODVCQjEyRTI3OTUzOTE5RkIwNjdGMjZGNjJDMTdGNQorOjEwREEwMDAwRkVGNTRBRTZFRUNCNTg0RDlGRTAxRDhBQzZEODIwOEQyNAorOjEwREExMDAwRTk5M0QzMTg5QjgzODM4Q0E1QTEwMjJDOTdCMUI5QTI1QgorOjEwREEyMDAwM0U1RDFCRjI0MTBCOEM1NzEzQ0ZFQjY5RUQ4RUQ5M0U1NworOjEwREEzMDAwQTgyRjc3MDRBN0FBRjBFODlGRjJFQUNBMDY1ODE4RUJDNQorOjEwREE0MDAwQTNCQTE5ODM3NUM1RDhCQ0ZBQzAyQ0M2NkM3QkYyMDM4NworOjEwREE1MDAwMDNFMTkxOUFFQkEyRTdDQzFBMUNFMDQ5NjBBQzdBNDM0RgorOjEwREE2MDAwRkJDNjYxNkUxQzE3RkU1N0NDNTg5NUJERDVDNjcwMjBGRAorOjEwREE3MDAwRTZCNzc5ODZDM0ZBRjI5OEVFNzc2MjdCRjhBRjg4QjFBMQorOjEwREE4MDAwRTNFQjlFN0Y2QUJEMTI1QUZGNzExQjlCREQxRTYxN0YxNworOjEwREE5MDAwOTMzNDBCQ0RCM0IzODEzMUY3MzBDNjc2MzUzOEE4N0NEQgorOjEwREFBMDAwQjJDMUM1REMzMThDRUQ2RTQ4QTNGQTUzMEQ2RTJBREI5MgorOjEwREFCMDAwMUI3MkU5RjlCMzBEMUFENTlGNkIyOEExRkFBRjFCNzQzRAorOjEwREFDMDAwQUFFRjY5MjhBM0YyODUwNjBGM0RERjNGRDA1QkEwQzExNgorOjEwREFEMDAwN0ExRkIwRThDN0VFODJGREE1QUJBRDhDMEQ4MTM1QjZERgorOjEwREFFMDAwNkU2Njc4MEU4QjcwMEI2RTgyOUZFRTE4QzU5ODk3MUYyRQorOjEwREFGMDAwMEIxQjZDRDdFRDJDODVCMUE2NzU4QTZCMzVGNEYzM0EwOAorOjEwREIwMDAwRURDNzk0NDQyODVCOTQ0MENDMDg2OEUwOUJBMjA3NzM1RgorOjEwREIxMDAwNzlEQjZGQjIxMTVFMUM4RTJDQjdFQkMxMjdBMDVGNEQ3NQorOjEwREIyMDAwODM5REFEODc0NzhGNUVDNjc0MUNFN0QxOUZEOEZEQkUyRAorOjEwREIzMDAwMkM4NERCQTE4MzhFQUMxMDFDM0ZBQ0JGRDcwNjE4ODFCMAorOjEwREI0MDAwQzc5N0UzODY3NjczRUI2MkI1RjVGMEZFQUQ3QzRGMTlBRgorOjEwREI1MDAwQUUzQjNFNEZCMzdCMDE2RTE5Rjk4Q0M2QkZBRTlGRTc1QgorOjEwREI2MDAwODcxQTk0Q0IzN0VDN0ZFNDdEM0NDNzdENTk3NjJGRTA1NAorOjEwREI3MDAwQ0ZGQzNERjk2QkQzRENEOENGRUJDMTdFRjM5RDJFQkI0MAorOjEwREI4MDAwMDdGQURERDI5QzY0NzcyMzFFQTRCMkJBRjYzQzlDQTdBOAorOjEwREI5MDAwMkI3MzU2NDIwOEZFQjU5QTQyRUJDODJBRTBFMzdGODYxMworOjEwREJBMDAwRTc0NEVENUE2RDMzMERFRDJDRDQwRUUwQTYzQkZBODcxOQorOjEwREJCMDAwRTA5NDYxNjUzRTRCMDFDMkNCQ0I3NDg0RDcwMEE2MjFCMworOjEwREJDMDAwQkMwNkMyRjM5ODAyRkUzRTM2MzkwNDNGMzNEQ0VDMDA1QgorOjEwREJEMDAwNzcwQkJDMUYwOEE1QkQyMDA0QzcwQzc4QUZDMjczNUJEMAorOjEwREJFMDAwRUVGMTM5MkMxQkUxQzZFNjc5MjJFMENGODNCODdFODRDMgorOjEwREJGMDAwRkI2QzA3RDFENTYyMDczRjRGQTBBQkE5QTk4MDg3MkI0QgorOjEwREMwMDAwMzYyOTJFNDAwM0I2QzhFOUJFN0UwQ0Q0MTdCRDY2NjMyNAorOjEwREMxMDAwQUJBMTNFMjNEOTZEMUYwMEY1MkUzOERGMUQ1MDVGNzA3QworOjEwREMyMDAwN0JCRUREMERGQkFFQzJCMzgwNzUyQ0RBMzI4NkU4NkRBQgorOjEwREMzMDAwOTExRkNBQzJFODc0NzlDM0E2MDMxOTdCMTE3RjAyQkE4NworOjEwREM0MDAwMURFOTY0OTE0QkI3MjdFNzg1RDE2REFCNDI3NDYxQUU5NgorOjEwREM1MDAwQUZEMzU0NUE3NzE1NjM5MzExN0VENUI3NjdEOTE3Mzg2OAorOjEwREM2MDAwQjFGRTlBNkQ0NTFFRUU4QkMzNDFGNjgzNzYwMTZDMzc4QgorOjEwREM3MDAwMjM5QkJEOEFGNEQ1MDVGQkRBOTFDNUU3MkIwODFCN0ZGMgorOjEwREM4MDAwMDE4RTFGMzYzRkI0OUZFNzgxRkE3RDVBMDI4RDM3REY0MAorOjEwREM5MDAwMDVGQkNFQzJEMjQ1RUIwNDM4MTA5Q0JBMzZDMjc4NkU3MgorOjEwRENBMDAwOUE4N0NFNjM2MUMwNkZEMzcwM0Q1Njk4MTdFQTczNUQ1MworOjEwRENCMDAwN0UxQkNFQjNBMDM5REY4RTdDQ0FCQjgxQ0ZFMzZENDkxQQorOjEwRENDMDAwQjIwRjg3RkE3Q0FCQ0I5RTgxRjA4QjAzNThBNEQwRkFCRAorOjEwRENEMDAwRkMzQkUwNjgxNjAxNUM5MjlEMzgwRjlCMzdDQkQ5MTM1MworOjEwRENFMDAwM0VGM0M1N0ExN0I1MjZEOTE3MUI5RTZGQjJFMTc5MDBBRQorOjEwRENGMDAwN0ZEMzIzRjE4RDgzRTJEQzE3MzQ0RkIyMzNFQzZGRDU0MQorOjEwREQwMDAwRUQxQUFFNDdDMEY3RDRBREIxRUI1OTFGRThERkI2RDk3NQorOjEwREQxMDAwOTYwNUY1N0YxM0Y4N0I1MEMwNzU0Njc2MjA0N0MxN0Q4OAorOjEwREQyMDAwREYxQUFCRTEzQUU3Qjg1QTY5N0ZEREYwQkQxRkUwMDFDOQorOjEwREQzMDAwQ0YxN0JCM0MwNDVGQzAwQjFGMDMzODJDNkEzMzlFNjdCMAorOjEwREQ0MDAwNjgzRDFDQkU4QkRBRTYxM0JEMkRCMTdBRURBRUYwNzVFMQorOjEwREQ1MDAwNkNEOTlGQTMwMDVDRTYwMDdEMkIwMDdGRTZGMjY2MjI3MworOjEwREQ2MDAwQkU5Q0JFRkZGQTRDREEyN0FDMTNFMTlBQTBCOUE3QTY3NQorOjEwREQ3MDAwMTUxMTlFMTAxRTRCN0NBOTI5RTRGNDJCRTdGQkEzNjYyQQorOjEwREQ4MDAwQTVGOUZFMjhGODY3NzRCQUQ0NUY0RDQzQkE4NEYzNURGMQorOjEwREQ5MDAwRUQ4RTRFOTc3NjY0REMzMEFGN0Q5MUUyNkY1MjdBRDI5MQorOjEwRERBMDAwQTlBNDRGNDk5NzkyNEUyNUZEM0U2MkYzMDREMjk0MTBFOAorOjEwRERCMDAwOUZBOUU5QzNFQTlFOEQwMEE3OEM3QzdFMEU3M0M1QjkyRQorOjEwRERDMDAwMDI1QzVGNDFCOENBRjdGNjdDQ0U4RkFBQjI4REY0OEVBMgorOjEwREREMDAwRTNFMUI4RTcwNEJGQUEyQTBERTREQzlBMTc2QTJGRTc0QgorOjEwRERFMDAwQUQ0QUU2RkQxMEVGMTFERkNFODk3M0M3RjYyQkE4QkQ1MworOjEwRERGMDAwRTA2MzgyNUYyQ0VDRTYxN0JCRDdGNDQ3N0VGMThDQTI4MAorOjEwREUwMDAwMjFCRjU4QjFGMTQwQzY5RDAwQjcxNUJGOENENzEwMDY5MQorOjEwREUxMDAwOUZEQ0ZDQzQyRDAzQjI1MUJFRjlFOURDRTRCQTE2RkY2NQorOjEwREUyMDAwMzU5RkY4QzQxMjIxOUYxNzA1MjJGMzhCRUI3M0JENkE0RgorOjEwREUzMDAwN0U3MUE4QkVFOEJFNUY1RUU2RTVGQzI2ODBGQ0U2MEZDQworOjEwREU0MDAwQkY3Q0YxQzg1ODc3NDg5RUNBRkQyQzY4NzlENzM2REY2OQorOjEwREU1MDAwMTkwRTNGQkVERkY1QjlFN0U2RTM3OTJENzREQUREMkE2NgorOjEwREU2MDAwM0M1QUQ4M0M5RkY4MkY0QjYzNUE4RTEyM0E3RjMzNUU1MAorOjEwREU3MDAwQ0M2RjU2NzRFQTU3M0ZDQUFGN0U4RjdDN0FFMTg2OTlBMQorOjEwREU4MDAwMENFNTk0M0MzNzk4OThCMTUxMjFGOTJBRDc3RjU5M0UzNworOjEwREU5MDAwQTdEQjFGRTRGM0ZFNzMwNTdFQ0ZBRDlENjQxRjkwODI2OAorOjEwREVBMDAwRkI5RDVGODg2QUM1MUNGMTdDQ0UyMkUzRjNFRTczNzNBMQorOjEwREVCMDAwNzVGM0Y5QjU0ODJGRTdEQUY5Qjk5RERCNjAyM0ZFNzNGNgorOjEwREVDMDAwNkU3NzgyOUZDMUZFM0U1OUYxRkNEQkQ3NDFCQjhGMUZBRAorOjEwREVEMDAwRDg5RTg5RkE0QUY4QjlCMTQyN0U2RTU4MkU4NTczNjM4RQorOjEwREVFMDAwN0QyMzlFREJEOEYwNzM1QkZBMjgzRkI3ODU0RkJERjVFNQorOjEwREVGMDAwQzcxN0RDQjQ1RkNFRUYzNkM2Rjg5MTFGMkY2ODdGODY1OAorOjEwREYwMDAwQ0U3MTRFQ0IyNjVCMTZCNEJCM0EzRjhCQ0VBQjlCRkY5QworOjEwREYxMDAwRDdFNUJCMThDMDc3NkVDQjc2MUJGMjg5QUIyNTFDNENCRQorOjEwREYyMDAwRjQwMEE1Q0VDMkU4MENFNTkyOTIxQ0QyQzc2NDdCRTQ1MworOjEwREYzMDAwOEZDRkMwM0NCN0RGMUE5QkM4NDY4NkU2QjkyRDlGRjM0QQorOjEwREY0MDAwODU4NTc1NDlDOTM4REZDMkJBRjlGN0IwMTEyMTc5NjAwMgorOjEwREY1MDAwREVFNzg5NTg0RTJGMEI2MDNDQTREQjEzOTNCNENDMTUzRAorOjEwREY2MDAwODQ5Rjk2ODg3MkY3NDY4MTg3MEYwMUI4NjMwMTFGMDY2OAorOjEwREY3MDAwQzZCN0ZGMUNFMTMwRjA5RkUyMzRFNDFGNDM4NzA2RkQ4MworOjEwREY4MDAwMzgyRkUyMzdBRURCMEVGQ0QzMDFFRDg2REUxQ0ZDMUMyNQorOjEwREY5MDAwRDczMTE0MzAwQ0ZCNjE5OTkwNEMyNUVCMEZGNTFEQjA3NworOjEwREZBMDAwRUMxMjI4QjM1NTVFQjZFNjczM0QwOURFMDdGMDNENEIzMworOjEwREZCMDAwMDkxNkUzRkUyNTdFOUJGMUQ3Q0UxRTZGQzk0NjNFOTYxRAorOjEwREZDMDAwQzJCNDI2NzcwODVGRTUzODEyNUYyNTNFNDdEQjVGQ0I5QQorOjEwREZEMDAwNDVFRUVGNDQxNjg3QTczRDBFRjY5NzdDMDlGQjAzNjREOAorOjEwREZFMDAwMkQ0OTBFRUQ0QkFFMEY3NDc4REQ4MkZBRTMzRjBGREY2MworOjEwREZGMDAwOEVGQUYzODk0NjJEQjNDRUQ5REI3RURCQTZGNDhGQjA0MworOjEwRTAwMDAwNUZGMzNFMjVERDJDNzI3MDlBMDZCQUU5ODM3NkM3QjlCNAorOjEwRTAxMDAwRDYyMTdENTBFRTlDNTA0MEJFNDFCRjEzQjdDNjVBNzAwQQorOjEwRTAyMDAwRkQ3MjVGQTg5N0IzMThBRTk3NjM4OTdBMzkxQkM2RjU1RQorOjEwRTAzMDAwNzJBQ0EzNUU4RTI1RUFFNUY0M0MzRjk5Q0IyMzE2NENFNworOjEwRTA0MDAwNDAzRDEzRjQwMUNFMEYwMjlDNEUzQUVCODdEMEJFRTQ2NAorOjEwRTA1MDAwNzNBOTE3NzRCQTgyMDlDOTYxRkNGQjY0OUQ5MDlCMkM1QgorOjEwRTA2MDAwQjgxMUU5OUJENTBGNjE0RkMwNTQ5REFEMjcxMjJDNzk5MworOjEwRTA3MDAwODg5RjdDN0RCMkRGRURCNjJFRTI4NzJDQzFFRTdFMDI1QQorOjEwRTA4MDAwNDgyRUZFRjY3N0E3QTRDMjdDOEJEQkIyRjIxNUU4NTdDOAorOjEwRTA5MDAwNUQ1RkQ4NTkwRkVGQUI5QjUzMzVFNDFCOEI5REVFQjVGRAorOjEwRTBBMDAwMjgxNzE3RkJCMjM0OTQ4QkYxNkRGOUE3QjdDMEZCQzVFNQorOjEwRTBCMDAwQ0Q1NzY4RDhGRTc2ODU3OTkwQkVBNDlEQjA4NDc1RkY1MworOjEwRTBDMDAwOTA5REIwNTRGMEI1QTVDODJGMDE1RTRCRUEwRjBDNzVCQQorOjEwRTBEMDAwNDFGRjI1NUE2QzNFQ0FGN0E1NUJCODlEMzBDM0MyNUFCMgorOjEwRTBFMDAwMTQ5NEMzNEQ5RUE5QzhDN0JBMUU1NDM0RDQzN0Q5QzM5QgorOjEwRTBGMDAwQzA1RjFEMjFGRUZBN0VBRUU3QjdDODY3RDg1NzgwN0ZBNAorOjEwRTEwMDAwMzBGRUU1Mjg4MzU1REM1N0JCOEVGQjYwQTA4RjNDQzFGOQorOjEwRTExMDAwNzBERDFFRDJFQkE3MEFCRUQxRDk3NjJDQzE5REM3RTExNgorOjEwRTEyMDAwOERGQTNBRjNFQTE2RTRCQjJCODQ1QzFCNkNFRjNBNzY2QgorOjEwRTEzMDAwMTdFQTMzMDkxNjZEMDdFNzk3RUZCODcxOUZBRkFCMkM1RAorOjEwRTE0MDAwODZFNDhENjgyRkY4RTlFMDlGOTUzODkwQkZBRDQ4QzgwOAorOjEwRTE1MDAwNEUyNUJENkE4QjRBRkM1MUUyNEZBRDU4RjNFMkVERTUyNgorOjEwRTE2MDAwRkQxMTZGMTZDMzdCOTQ3NzVCRjEyMUIwRDBCNTZENTc2RAorOjEwRTE3MDAwRjU0N0JDNUFCNDY5Q0EwMzNFOTA2Mzk5MDI4RTI3QUQzNQorOjEwRTE4MDAwQzE5OTc4M0U2N0I2QTcyNjM3QTI1RUI4QkNFOTMyMDZDOQorOjEwRTE5MDAwRUYxNzZEQkYyQjEzQ0IzM0RCNjM2NzIzQkY5RkVDOUE2NQorOjEwRTFBMDAwMzkzOTA5RjZCQkU0RTFBNDdDMzU0QzZFRkM0NUQwRTM3QgorOjEwRTFCMDAwOERDQkFGNEE0NTdCRTBFNkFGMEYzQ0UyMDIzQjZFMzFEMAorOjEwRTFDMDAwQzAxQUUxRkU0NTdCQkNERjA3NEQ2RTZFRDg5M0E5MDJGNQorOjEwRTFEMDAwOEQ3RDFERTNGRDFDRTE3OTkzNjVERjc1NjM5MEZGMkI1OQorOjEwRTFFMDAwRkU5RDAzQThCRDNCRDVENThCOUQ3RDFBRUQ1MEMwRTdBNAorOjEwRTFGMDAwRTUzRkZCODBDNkY5RDRGMkU2QjU3M0EwRkZDRENCN0YzNworOjEwRTIwMDAwOTU4OEUzREM3NEZGRTE1MTJFNzhGRUQ2NTBFRjdGQTNCMgorOjEwRTIxMDAwM0RGRkIxQjI3REE3MEIwNUQzOTZFRDIzNTA2RTdGOERFOAorOjEwRTIyMDAwNzY1QTMxRTJCNUU3QkEzOTA4RjdENzU1ODI3QkI0RjlBNworOjEwRTIzMDAwNkFGNzI4MDQ1RjU5QUZGNkY3MjE3REQ2MUI2MDc2MTc4MQorOjEwRTI0MDAwOTYyRTQ2RkFGMjE5OTVENUEzM0UyMEY1MUFGOTNDQTk2NworOjEwRTI1MDAwODBDM0U1NEM5RkQ2NENDNDhCNjUzQjM3NjdBMjVDMzlDNQorOjEwRTI2MDAwOUJDMEVCNTUzQkFGN0YwM0Y5OTRGN0YxMThBRUI3NUI1QQorOjEwRTI3MDAwMTlFOUM5MEI3RDVDRUY2NkI1NDBBRjAzNDJGMzBGMkM4MworOjEwRTI4MDAwODhBN0YxOTY2RDI5MzRDODQzRDA0QkU4Rjk1OTJCMkI1OAorOjEwRTI5MDAwQzM3NTBDNkVFQUNBNDdGREVCNDM2QjYwMzE5RUVCODc5QQorOjEwRTJBMDAwQTBEN0EyN0RGQjE3QzFDNzNFNkM1NUE3RTI3MzFGMTAxNAorOjEwRTJCMDAwMTJFQTIzMUZCNkZFMkE2MUE4MzNBNEM3MjUxNEI1MDdBNgorOjEwRTJDMDAwOTBDRjJEN0YyRUE5NDBFNTI4NDVGODc1NEJCNzVGQzQ0OAorOjEwRTJEMDAwMzk3NTYwMEFFOTYzMkVDNEQzMTU3QjBGNEU2NUJDMEVGOQorOjEwRTJFMDAwODIzMDNBM0M2RjE0N0E1ODc3RkRCOTY3QzhBRUJCNzk3MworOjEwRTJGMDAwMzdENzI3NkU2RTdGRTZENTc0MThFNzk2M0Q0MjlGMTA5QworOjEwRTMwMDAwN0FDQTcyNDFDRkI3M0NDN0UxQjJGQ0I5NjNGNjg1RTE4NgorOjEwRTMxMDAwRjY0ODZFRjJEQTgxQTAwOTRFNzhGNkYyRDlGN0JCRDE1MQorOjEwRTMyMDAwREU1NkM4QUY1MkE5NjVDRTY5MUM4QUE1RjQ5Nzc0OTFEMAorOjEwRTMzMDAwN0VCODNFQjc4M0VDRjJFNUNENjJCQ0RDOEVCNUQ5QjRENQorOjEwRTM0MDAwREY5OTdEQzNGNUExODkwNTM2RUEyN0ZCMDMzQ0E4REZFOQorOjEwRTM1MDAwOTdCMTg5MjM5MEZGMDU5NkM3QjVBMDVDRDc2RjcxNUExNgorOjEwRTM2MDAwQjE2QzVBRUUyNDM5RkY3MDlEMjVENzBBRjBENTk1Mzg0NworOjEwRTM3MDAwMERGNUI4N0EwNzZGN0Y2NzVDRTIwRTJDRjdDNUYxRkFFRQorOjEwRTM4MDAwOTdCMTk5MjRBN0JFQjQ3ODlFNTkwMkVERUU1NDBGQzVGQgorOjEwRTM5MDAwQTJGRjYzMDBFQjNBNjA4MTdBNDkzRkVGNzUwNTMwNkY2OQorOjEwRTNBMDAwMkEwM0VBNTE1MTdFMDQxNDdDRkZEOTZGM0UyQUM0NzVCQQorOjEwRTNCMDAwNEMxODFDM0NDRjYwNjlCNkM2QkMzOTkzMDE0RjZBMEE0MQorOjEwRTNDMDAwQzQzRUYzODI4NTg4RUZGRDVFRTZGQzdBOUI4REI1QTBBNgorOjEwRTNEMDAwQkM2MzU2MEY5QjA1Q0YwM0M4QkZGMEZDRkY2NkYxMjM1QgorOjEwRTNFMDAwM0ZERUE3MDQxRTBCRDdCRkVFMTM3OEVCODk3MUI2Mjg2QQorOjEwRTNGMDAwQjBDRUM3QjNCQzRCNzExRDNGNTI2Q0MzNTE3NTYxNkUzQgorOjEwRTQwMDAwMzUwN0M3RkZDQ0M2REY0QjNEQjY1NDMwRTEwQzYxOEZGQQorOjEwRTQxMDAwRDlEM0QzOUNCOEJGMjYwMTJGNDVENzU5M0RBQzYzNzVERQorOjEwRTQyMDAwREVDQjBCMTE1RkVFRUU3MkIwMTg5OEJGQjQyQjhFRjRGQQorOjEwRTQzMDAwREE4Q0Y0MzI5MjZGNEQwMjJFOEEzQjA1NjUwRTdCMzlFMQorOjEwRTQ0MDAwQ0ZFMjhCODFGNURFQ0QxQzdFNkNDRjFDMjZGREQ3MTI3MgorOjEwRTQ1MDAwQUI2MzNGNjVERjZGRkY4NkZDN0VBMEZBRjk4MTNFRDA5QgorOjEwRTQ2MDAwN0VFMDlEOEFENjA0NkQ2QUNFOURERUY2MEU0M0ZCRDkxMgorOjEwRTQ3MDAwOUY4RkYwQkJCMzlGQjdCMTAwRjZENzc5QUVFQzk4MTc3QQorOjEwRTQ4MDAwQ0VGQjZFNTdCQjQzQ0JFM0UzODVFRjYzREZDQUJGMjUwQgorOjEwRTQ5MDAwMjY1QjQyRUJGQkFDRUJGNDJGOUYyRkMyRDI0MTcyQTg1QworOjEwRTRBMDAwNzQ5RkNBRkQ0REE2RjU3Qzk2RTZCNkQyMzk3NTM5MDI0MQorOjEwRTRCMDAwMTY2Q0VGQjRGODE1MDVEQjFGRjgwMEQ3NTdFQTcwMDZBNQorOjEwRTRDMDAwNTRENEUzMURCNjNGODVDQjE5NzYyODIzRTlGNDE1MjRFRgorOjEwRTREMDAwNUFEODM3QTAyQ0Y0NkZFMkU3MzdBMThGRDFCRURDNTlCMAorOjEwRTRFMDAwQzBFREE0OURFMjlDMjQ3QzI1REM5ODVCNjdFMTcyRTY4QworOjEwRTRGMDAwMjVFN0NFNkFFRUM3RTI3NEZDNEZFMkY5QjlCRjY2OTMzNgorOjEwRTUwMDAwN0U3MTZFMUZFODE5MTFGNDRFNTkxRTQ2M0QwM0Y0ODdDMworOjEwRTUxMDAwMkZCM0Y1QTcxMDZFNTJDRTU2NEFBOTJCRTRCMDJBQzZFNworOjEwRTUyMDAwQUQxNEYwQUE3NDVBMzg3QzJBNENGMDExNzg2M0M2MEJFQgorOjEwRTUzMDAwRjNCOUNCRjM2NDNGMzk3NEIwNEYxNjlERTNGMDdGNjFCQworOjEwRTU0MDAwNzQ3RTdCMTExRjNCRkZGNkU2MUEyMDM3OTZBRUVBQzdCMgorOjEwRTU1MDAwQkM1OUZGMTNDRjJGMTAzQjBDRjU4QUZCMkRBNDU3QTBGRAorOjEwRTU2MDAwREU4NzdBQTJFNDFGNUVFNDAzMjNFOTM5RDcwMzczMTkzNworOjEwRTU3MDAwRjE4RDFBMzU4RUZDOEM2NkJFMjFGOTg1MzcwRUNBMTFENQorOjEwRTU4MDAwQzgzNzVBODkxRkRDQTk3NjFEQjQyODIxM0UzMUI4MkMyMgorOjEwRTU5MDAwMzgxQ0U1NzAyNzk4RkVGODNFNjg2OUE3RTdERjE0NjQyOQorOjEwRTVBMDAwMTM3RjE4QzQwRTBEMjAzRkFCMzU1ODhDN0FBMEVBNzg0MworOjEwRTVCMDAwNkNEQjQ5MTAyOTZERUIzODdEMzREOUZDMEYyRTQxRkUwMAorOjEwRTVDMDAwNTBFOUQ0NTBBRkZCQ0M2RkYxRDk2MDlENkQ0OTlDNkY4MQorOjEwRTVEMDAwQjQyRDRCMjc3OUZFMTkxMzdDNjRCNjlERjhDODk1MTZBNworOjEwRTVFMDAwOEI4RkVDQUQzOUU5NjQ2Rjc1QjdDRjcxOTM3RkY1RDczOQorOjEwRTVGMDAwNUZBQjk3NkRDMUY3MzMxRDI0NzdEQjUwMUU0M0JENkRCNAorOjEwRTYwMDAwRTM3MDdBRkZBMkU0NEJDQjM4NUY2QTlCQTkwRjg4QzMwMworOjEwRTYxMDAwRjczM0ZCNUI3MEJFREQyOURFQkZFMUI5QTdBQkZFOUYyMAorOjEwRTYyMDAwQzdBMjNFNzk1MzFDN0IwMjlFQjc2NUU5MDM1MERFM0VDQworOjEwRTYzMDAwQTA3OEU2MkNDNkZFQzNGOUJBODM3M0UyOUVEQUM5OEZDRQorOjEwRTY0MDAwMjc4MEZFQTRDRUZBODQxREUxN0U2RkU5NDcxRkVDM0JENAorOjEwRTY1MDAwRjYyMEMyQ0I1N0NBNzI1MTlGRUY0NEZDMUMxOTNBMkZDNworOjEwRTY2MDAwQjBDQTU5N0Q3MkU4REM1MjRDRTcyNkYxRDU2NzgzRjNENgorOjEwRTY3MDAwNEJFMUU3Qjc1QTg5N0U3RTI5RTJGQzk0N0FDMDZGRTJDQgorOjEwRTY4MDAwRkZGQzdDRUU1NDM5N0Y2NzJGNjk2RTJDRDVGRURFRDRGQgorOjEwRTY5MDAwNDI1ODVGRDNBRDcwMkUyNDEwODM3NzIwQkNCNkFENENBQQorOjEwRTZBMDAwRDA3MTFGOUQxNjU2REIxRTgxNkVCMzBCODVERjA5QTU0OQorOjEwRTZCMDAwMzFEMEMzM0M0MTBGRjMyNERFQUUzMkUxNkQ3MDUwRDI1NQorOjEwRTZDMDAwRTk3ODgxQjdEMEZGQzU3OENGNTA5Q0Y3NTNFNUYwMjhBMworOjEwRTZEMDAwN0NGOEU2N0ZBQkIzMjNDRDMzQkM5MEZCMEJGNjgzNTZCRgorOjEwRTZFMDAwNUE0OEYyQjVENEEwQUZCRTk5RkY1MTA2Q0EyOUY2RDU1MworOjEwRTZGMDAwODE0MTI4Nzc1RjQ5RjE4QzJDMDRGRTExM0JCNDhCRkNERgorOjEwRTcwMDAwRTY5RDAzQkE2Q0I4Q0ZDRTM5MUY2N0EwNUUzNEFGRkU2QQorOjEwRTcxMDAwQjc0NDVGMTdCQkNFRDVGMTM1MzYxQzI3QTkyMkNCMTZERgorOjEwRTcyMDAwODQzMkI1MjJFQjIwRTJDRjkxRTkzMUVFOTgwODdBQzgyNQorOjEwRTczMDAwRkVFOUMzMzI1MEZGRURBODFDOTY4MTdDQUYwMzBFRjBCQQorOjEwRTc0MDAwMTBBRUNGRUE0RTQwRkVDN0Y2NTQxMzFGQUIxNDdDQUM5QworOjEwRTc1MDAwQTM2MjA4N0YyRUY4NjZEOEYzOEQ0NUE4RDczQTJENUFDNAorOjEwRTc2MDAwQjhCRTYwMkVDRjAyREYwQzAwREZGQzA4RUMzMzJDNEY2QworOjEwRTc3MDAwODE3RDE2MDBGREY1MDREODY3NTgzRjA2RjYxOTk2NDdDNworOjEwRTc4MDAwQzEzRUMzQjJBMzQxQTNGNzREMTU0M0Y2MDRFMTlDQkZCQworOjEwRTc5MDAwNjg1MTY4N0NGNERGNDZEMjhCNkY3QzVDNjUwMTA5MUY5MQorOjEwRTdBMDAwRjhBRkY2RTE3ODE2QzgwREQ1OTdCNEY1MzVENDE3NkRFNgorOjEwRTdCMDAwMTg2OEE4MkY2ODFFNjJBODRCM0REMkJCRUEwQUMzQjhFRQorOjEwRTdDMDAwRTU2NTg1ODY3NkFCRTM0N0Q4RjA1QzkzQ0FGMjM5REMyMQorOjEwRTdEMDAwQ0JGMjA5RUUxREQ3NDQ4MUZCMzVBMzA5RUU4N0E3OEY0NQorOjEwRTdFMDAwQ0U0MDc4MUU0NkI4QTNGRDY2RDUxMkYwMUMyNERDNjcyNworOjEwRTdGMDAwODkzOTBGOTcxNUYyRTcwMkVFQTFFN0U1QkRDQUE5NEZFNworOjEwRTgwMDAwMTBERTMxMDg3NzA3OTUxRjIxQkMwOUVFMUNERTI3MTBBQQorOjEwRTgxMDAwREUzMTA4Rjc1QzJBOEYyMkJDODdFMUI4MDBFRkEyMEIzQgorOjEwRTgyMDAwQzNGQkU2RERBQTAxMEUzNzNFNkU4NDc3RURDMzdENEQ1NgorOjEwRTgzMDAwRjAxRjY4ODBFM0EyMEQ0MzBDNzUwOUVGMDVDRDQ2NzgwMworOjEwRTg0MDAwN0I1NzE1OUFEQTMxQjYwMUUwNTA4RUJGMDAxRDFDMkVBMQorOjEwRTg1MDAwOUU0NjcxMjlBQjgzRjlFMjgxQUYyNDIxQkRDMUZBQUQ5NworOjEwRTg2MDAwMTUwQUQ3OEZFMEE3MTVFODcwMTZGRTAyRjQ2NTc1RjI1OQorOjEwRTg3MDAwRjdDRDczMTQzRkYyMjVENDg5RDBBRTAwQjgwNkUyODFGQgorOjEwRTg4MDAwQ0VDQTVEOTc5RDQyQkU3NDNENzIzMDE1RUQ3QTNGOTVCQworOjEwRTg5MDAwMzdCMDAwRDE2NzM1MEI1MjdEMUVFQkNBQjQ0Mzc5OEI3QworOjEwRThBMDAwMUE1ODhCRkVCQkI3MUNERTI3OTE5RUZGMzJGRERENEU1MgorOjEwRThCMDAwMDU4OTUyOUIzRjBDRTk5QzM5OTNDOURFOEM3NjRFQzA4QQorOjEwRThDMDAwMjkyNTdGNjJDRTUxNjI1RkYwNTM4MUZDMUZGQTc1QzQyNworOjEwRThEMDAwOEZCOEUzMEUzODg3Q0ZFNjA3NDdFMUZDMzczQkJDOEZBNAorOjEwRThFMDAwQTY1ODY4QkUzRDM4REZBNzM2RUZCMEJFRjBGQ0FERTJGQgorOjEwRThGMDAwRDExOTQ4RkZDQ0QzQ0Y2MDI3NDU5QjZGMTM2RTE2RTAyQworOjEwRTkwMDAwMzBCRjBDRTBBNDYwMUM4RUMzRTU2NDI1ODdDQkZFNERCMAorOjEwRTkxMDAwMzE3NkY0Njc5QzVDNjcyMzdGRTVFNkY4Q0M0Q0M0REI3QQorOjEwRTkyMDAwOTM2QkE2NjUyMkRFMzU2RTFBOTY4OUY4M0VBQjY1REFFMgorOjEwRTkzMDAwNTlFNERGNTNENDE5MzUxNDRGNkRFNTc4Q0ZEOEFEQTQyMQorOjEwRTk0MDAwNzdERDIxQ0VFRUI4OUI2OTAxNzg1RjM5M0Q0MUYzQzE5NworOjEwRTk1MDAwN0VCQ0JFQUM0NDVBMkZEMzlERjlEMDZFQTFEOEY3QzI2RAorOjEwRTk2MDAwRDZBNTMzNzAzQ0I5RkYwNTFCNjIwQ0U3RkZBMzEyNjMwOQorOjEwRTk3MDAwQkQ5MkQ5NDM3ODk2ODVFNzZDMEZCREM3RjM1N0FCRkFDNAorOjEwRTk4MDAwNzg3QkIxQTNFQkZGQjBGRDhENTdDMkM2M0I1RTk4OTA3QworOjEwRTk5MDAwODI3QTBCMUJDRDQ2N0ZBMzg2RkE0NzgzRUI5NzBERkU0OQorOjEwRTlBMDAwMzc1RUM5MDlDMTU1RTJEMzZGMEEzRDlGRTBGOUMwNjNFNAorOjEwRTlCMDAwOEFCNzAxMkQ5MTNDQjhBNURCQUZCNTJGMTFFMUI3Mjk3RQorOjEwRTlDMDAwRkVBNTdCQUU0NEI4QkNDN0ZEMUM5QkUzNkI4ODdGN0M3NworOjEwRTlEMDAwODI3QzNCMEJGOUY0RjUxOUMxMzBCRTIwRkIwNzA1M0ZFMworOjEwRTlFMDAwM0RGMkNCRUI4OThGMUNBODRDQTU3ODRDQzc3M0RDQkZEQworOjEwRTlGMDAwN0M1NEQwN0Q0N0M1RjVENTc3MDBGRkVDRDhBRDkyOUUwRAorOjEwRUEwMDAwRDdCMUU3RkM0MUY0RDM3NEI0MkI5QTAwQjkyNTdDREM3MAorOjEwRUExMDAwOEUzREMwQ0Y5MURGN0E2Q0Y0N0VGRkVFNUZEMTNBQkZCRQorOjEwRUEyMDAwMkY3RTVFQjE1N0YwRjMyRDdDRkVDNTU2MEZGMTE3RTYzMQorOjEwRUEzMDAwOUQ2REQ4REZERjhCQUY1Rjg4OUYxRkIxNzEzQ0VEMzhENAorOjEwRUE0MDAwQTI5MkJGOERGOUY0NDNCOUZEQzNGMEIzOENFMzY3NjNDMQorOjEwRUE1MDAwNjUwQ0UzRjI5NUYzOTk1OTE1NDAwN0E4RTczMzc3MzEzMAorOjEwRUE2MDAwREE5NDlGRUMyOUVGNDdGMjcyODNFRDM4RUFEMzJFRjg1RgorOjEwRUE3MDAwODc3MkRCMENDNzRBNjYzRDFFMENDM0RGOUI5RjgzRjY4MworOjEwRUE4MDAwNjFFQjlCODVFRkMzRjBEOThDQUYyNTQ1NDY3Q0ZEODJCOQorOjEwRUE5MDAwN0Q5NTY5Q0ZFNkVGMEZGNTBGRjEzREZDMDlFNzJGOTI2OQorOjEwRUFBMDAwNkY0OUZDMDVCRTU1ODM3QzBERjhDQTU1NDU4MEI3M0ZCQworOjEwRUFCMDAwMkVDOEZBNEQ1MDA5RTMyQjE3QzlDNzM2QzU3RjRENzJEMgorOjEwRUFDMDAwNzA3M0ZDRDc4NEM3ODcyQjA1MUU4MzlFODFDRjNCQUUxNgorOjEwRUFEMDAwRTFGQTA2RjNDRjI2N0E5ODI3RjUwODlCMjcwMUZEQTREMworOjEwRUFFMDAwNDc1NkY1NERDNEY3Qzc5QUNCODlFRTI0M0Q5OUU3M0JDRAorOjEwRUFGMDAwMkFGMDRGQjY5QjY3RURCMjY5MTFFNEExNzc5NTExN0ZCQgorOjEwRUIwMDAwRDhBRUQ5ODRFRjc3OThGMDJDREFGOEU2RjY3MjlFNzlEMQorOjEwRUIxMDAwQTY3OEFGNzk5RURCOEE4NERFRDk1RTdENTFGMzIxMTkxOAorOjEwRUIyMDAwNzZGNzI3RkQzNjJFODQ5NzJBRjI4MTJGMTM4MkE0N0Y1MQorOjEwRUIzMDAwQ0QzNkU4NjU0N0NCNDY5MzVFNzZCOEUyN0M0NEZERUM4MworOjEwRUI0MDAwNjhDNUY5Qjc0NjIzQkQ5NUQ5MDRCREQ3NTJGRjcyRjEwOAorOjEwRUI1MDAwREVCQzhFOEY4NERFNzA0QUYwOEYxMzgyQUVFNTdCNzU0QgorOjEwRUI2MDAwRkI5QUZFNzMxMUVGNTdBOTFBRjJBQjIzMzMwQTA5Q0ZCMAorOjEwRUI3MDAwQ0ZGODJCNjlGRUEzMTUyQUY5OUJFRTJGOUEzMjE3RkRDOQorOjEwRUI4MDAwNEQ3MjNENzJCRUYyNkJDRTI3QTAzRkVEMEI4MDE3RkE5RgorOjEwRUI5MDAwQzdDQTZENUFCRjQ4RkE4NTE5MUVEMUM2OTVGODAzRkEzRgorOjEwRUJBMDAwRUMxMURDRTc2MUU0QTNGOEQ2NkI4NEQzNjFFQzBGRUZFMgorOjEwRUJCMDAwNjc2RDU3MjlERTY2ODZEMzgxRTlDMzg4MkYxREREMjU2MQorOjEwRUJDMDAwRjgyN0MwMTVGNUYwREE4NzhERTdCQUE0MkRERUM0NkZGQgorOjEwRUJEMDAwRkExQURFQ0ZBQUU0N0E5OUU0RDc3MjdEODc1NzBERTk1NQorOjEwRUJFMDAwMTc5RTM3NzVBMUYzOTZFMzVDMkNCRURDMjhGQUEzRDhGOAorOjEwRUJGMDAwRkM4NkU0NkZCMjYxM0NCMDE0NERGMzY1OUJERTVGNkU0MgorOjEwRUMwMDAwN0E1RjYwQUM1RjI0MUUxRjEzRjgyM0U1Q0ZCMTU4QURDNworOjEwRUMxMDAwM0E1MjFDRUZFOEQ1MzFCNUUxRjkwOTlENDVEQzdGRDNDNworOjEwRUMyMDAwNTkyNEUyREU5NzI4QjdGRkEzMjhCMkRDOEVENjVGRjIyNAorOjEwRUMzMDAwQkRBNzBCM0Q0MUU0NzcyQzUwNEVGMUVDOEJFNTczNjFBMQorOjEwRUM0MDAwNzJGRTRDMTFEMjc5NTBCMTYzN0ZBOTU3REQ1OEM2RTVFOQorOjEwRUM1MDAwQzJFNkY4QTcyODRGRTNEMzQ2QUUxN0VENkY4QzIxM0NGMAorOjEwRUM2MDAwRkNGMzM1RkNGRDlGRkZFRDIzRDJBNzBFRUNERDlDMThENQorOjEwRUM3MDAwMkVFNzI1NUU5RUREMzMyRDExRkRDMjI3MkIxRTRCMEM4QQorOjEwRUM4MDAwQjcwM0U0RkI4RjJCMUVCQjY3MkNEMUI3QUFGNTc2MkVGQQorOjEwRUM5MDAwREZENjFFRThBODEwRjY4MEQwMTc2RUIyQjZGRjNGQjFERgorOjEwRUNBMDAwMDdDQzc2QzAxNEY1RTE0NEU0N0Y2NjdCRTBBQzVCNEZCMworOjEwRUNCMDAwNzQxMTdDMDRERDA5Qjk3MkEzODBDRjlGNkQ3QTIyQzVERgorOjEwRUNDMDAwRTk3NjE1NzJCOTYyQzI0RjA5ODdEMzEyMEUxQkNBN0I0RgorOjEwRUNEMDAwQzU5QjUzNDIyRUM4RkE2MjJCMjM3ODc4MUQ4Q0Y0NjVBRAorOjEwRUNFMDAwRDZBNjY4MThGRkMyMzQ5NTEyMzg5NzQzMTVGOThGQTEzQworOjEwRUNGMDAwRkY0QUI2N0ZBNjU4MjVGQzk2RjMxQ0Q5QTZCNEEzN0Y3RAorOjEwRUQwMDAwRTVCN0NERTVENTc3NjBCRUMzOEM3OEUyQUJCMkZEMTIzNgorOjEwRUQxMDAwNUZFRkYyRUJDOEM2QTQ2QjcxMUVFRjE2NTVDMzQ3NUVEQQorOjEwRUQyMDAwREZCMTdFRTFFQjk3N0E5QUI5REYzMjZCRUI0NUQ5RDE0RgorOjEwRUQzMDAwNUVERkY2NDRCNDZGODM2MjlEQzFGREIxNzY3NzQyQ0Y0QQorOjEwRUQ0MDAwN0UxOEFGQzFGRDJGOUJBMTZBOERCMEZFNjUxQkY4QkE3RQorOjEwRUQ1MDAwMkE3REFBOTYwREY1REZCNjNFNzYyREQyQzE4OTdBOUIyMworOjEwRUQ2MDAwODVEQjA3MkUwMzlFQkZEOTVBRjgzNkI2M0Y1OUM2RTU1NAorOjEwRUQ3MDAwQ0FCMThBQUIxMjMxMEZDRUI3QzVBNkU1Qjg3QkNFNTc2NAorOjEwRUQ4MDAwNTNDQ0YzRDJDRUVFODlCMUEwRkZGNDZDQkQ4RDA1Qzg5MworOjEwRUQ5MDAwN0ZFMTIxN0JGOUM4ODYyMTU0OUU0NUY4NzFGQjlBQ0UwQworOjEwRURBMDAwRkZDNjYyRUVFNzNBRDFCQUIwM0ZBNzI3MzdBRDQzRTJEQworOjEwRURCMDAwQ0JCMTVENkE5OTNGMDJCRkJBNTE5Q0RCQTlBRjlFMjZEOQorOjEwRURDMDAwN0M3Qjc1NTczOUM5RTMxMzE1N0M5RTUzQUJCNDQ0ODRERgorOjEwRUREMDAwRTdFRjM2QTg0NEM3Mjc3RDdDRkNGRDdCRUY0QTFDMEI4MAorOjEwRURFMDAwRkIzODVCQzFGNzc1NzZDRjlENkY4RjgxN0QwNjJCQTRCNQorOjEwRURGMDAwM0NFNjcyNEFFNkY3MDQzNzBDQTE3OEVGQTdDRERDRkVCQgorOjEwRUUwMDAwOTZGNDJFRTNFMTU3QUQzQzkyNDhGREE1OUNEQjNEREIzQgorOjEwRUUxMDAwQjBGRThFNUQyN0M4MEUzQkJCMDE2NkUzNzJDRTk5OEZCNAorOjEwRUUyMDAwRjk4NkJDM0I1QjMyQzM3OEJFQjMyQUUyMERGNTc5MkQ3RgorOjEwRUUzMDAwNDY3OUQ2Qjg5N0YzMkJCMzlFQkI3ODAzRThDMUU4OTcyMQorOjEwRUU0MDAwMzJEOTc5MEIxQjBCMTM0QjkwN0U1MTBGQzYzQzkzMjc4NQorOjEwRUU1MDAwQ0EwRkE2RTIzRURBQUJBOTVEODU4ODlCMkQ2QzhCMzE4QgorOjEwRUU2MDAwRjA4M0NBNjZBMzVEQjdDMDY0QzdGNUIwRUI0Q0YyNDg0NworOjEwRUU3MDAwQzI2OTc5MTRGOTI0RjVCOTBFNjFBRjFDQjU3OUFBMjNEQQorOjEwRUU4MDAwRTU1M0I0MTc3M0Y5MzMwRkU4MzcwREUzNDQ0Q0FGQkNDNworOjEwRUU5MDAwNTJDMDdCM0RDMkM3REVGNTQ1MEVFOEQzMURBQTM2MUUyMworOjEwRUVBMDAwRjVFQTFFNzQ2MEQyMDNDQkNCOENGMDY1OUE4Rjk1NDgzRgorOjEwRUVCMDAwN0Y4NDlCRjRGQkQzQThGRkI3RjQxNTcyREIwNzcyMjg5RAorOjEwRUVDMDAwMDFFNTkyRkU2QzMxQ0E5NThCRjUxRjVDQjQ3RTVFMjMyMgorOjEwRUVEMDAwRjRGMzFBODM3RURFODE0REMyRkFFRkFGQkM5RUZDNTQ4MAorOjEwRUVFMDAwNDdBRUI5OUVGNEY1MjNERDdFMkE4RkMxNEYyNUY1QkFEMgorOjEwRUVGMDAwMjMzM0NBMERGQTY3RDhGMzNFQkRFNThCNDdEMzM3OEY2RQorOjEwRUYwMDAwMjEzRjI2M0VDREU1RDI1QTYxNDczNjBCM0JGMkM4MEM3NQorOjEwRUYxMDAwNjE0N0E2MzBBMjIzQUI1NTY3OTFGOEQ5QTVFQTZGMEJEQworOjEwRUYyMDAwOUE4RDcyQzlCQkNBNjgzRjNFM0ZDOTdCMTZDRjI1MjY2MgorOjEwRUYzMDAwRUQ3MkMzNzM5QkFCQzBFODNGMzRFMUU3NDBDNkZERTcyOQorOjEwRUY0MDAwNzdBMTJGMDBFMERFNTRDOUYzNEVGMTM5RTZCRjQ4Qjk4RQorOjEwRUY1MDAwQzRBMDNERjI4QkNBMEQ5N0ZCRDdGM0Y3M0VCNTAwRDNBMworOjEwRUY2MDAwRTUxOEFBNzRENERFQ0FFQkJBQzJFQjNFQTc3OEFGOEEyMgorOjEwRUY3MDAwQkMzNzFCRDQ4RjY1NjlCMzUxRUZDMkJDOUVGODY0RkVFOQorOjEwRUY4MDAwMUU1MTY0MjBFMDc1NjI3MjQ4RkVBMTVGM0Y5Njg3RDZFRAorOjEwRUY5MDAwN0Q4OUQwNkY1MDQ1RDYyQjQ4RDc5OEVGNzM1OTAxREE0OQorOjEwRUZBMDAwOEMzQzJGMkMwRDVERkEwNTM0N0UwMEYzN0E4MjREMTNENAorOjEwRUZCMDAwQzlERjVDRUU0OEU0RjE3OUIwQTM3QkM3QkY0NkFFRDdBQQorOjEwRUZDMDAwOTVGNUE1QzkwNjU5Rjk3QUEyRTJCMzY4NzcyMTdDMEVCNgorOjEwRUZEMDAwRDNDMzA2OEMyMjNGOUE4NUZDMkQ5QkUyNDdEODEwN0YzNQorOjEwRUZFMDAwNjczOTNEMTkwODA3QzA3NzkyQUYxREJGQjExMzFGREUwNworOjEwRUZGMDAwNUZDOUZEQjAxREQzNDc2RkJCMUQ5RThGNzhEQTQ5QkUzOAorOjEwRjAwMDAwRjQ4RUM1RDIwRkRFOTUxMDhFQjc0NzU3OURCMDIwNUZBNgorOjEwRjAxMDAwRkVGRDFFQTY2MTFFRTNEMURENTUwN0RGODA3MTBFQUMzQgorOjEwRjAyMDAwNUFCOEIxMThFOUU4NEQ5NUVDMDZCM0ZGNzZEMkQzRTNCMAorOjEwRjAzMDAwQzhGRUJBRUUxQTk1RjJCQjBGOTdBOTBDRTVEQUUxMERGRQorOjEwRjA0MDAwNzEwNjNCMjRFNEQ3NTUwOTNGQkVEODY3QTVGNzY4RUFBNworOjEwRjA1MDAwRTQ2MkZFMTVGQTM3MzE0RkFCOEM5RkNCMEI4MjlGQjUyNAorOjEwRjA2MDAwOEI3M0ZDQjlEMDYzNzYwQUJBNjkxMzc0NzNBRkEwOUIzMworOjEwRjA3MDAwNzU2NkZGRUVDMzlDNkUwRUVGMDFDMzAxRTRGQTNCMzNFRAorOjEwRjA4MDAwMTY5NjkyREY3QTBCQTMzODc0RDY3NDc1N0QxMUVDRUY2NworOjEwRjA5MDAwOEExOENEODZGMDlCMzQyMzlGQzNCMzQyQjE2MEZDQTY4RgorOjEwRjBBMDAwQkMyQ0RGODZGNDdFNDU1RkI3MERGOTY4NzlEOTRDQUE5MAorOjEwRjBCMDAwNEZBRUM4MjIzQjdGRkYyQTkwOEY2OEVGMjc2ODE5NDgyMAorOjEwRjBDMDAwOTc0MzY3QzQwNDJDODk2ODM3MTYxMjlGQjhGMjhDQzUyMQorOjEwRjBEMDAwNDAyRkY5ODEzODAzREQ1REZFNzhCMkUxRkRCMDJERTkwNgorOjEwRjBFMDAwODY3QTNGNEZCNkExN0RERjMyMjMzREM2MEQyRDMwRjIyQgorOjEwRjBGMDAwNURDNkY1NDIwOUU3MjlFQTM4RjI3MzFEMERDOTUxN0E1OAorOjEwRjEwMDAwMkZGNTExRTlBRjkzRUQwMTVBMDZCRUQ2MjJFNEM4MDhFNworOjEwRjExMDAwQTg2MzNFRERCQThBMjYwN0U2NEQ3Q0QxNkVENUY4RjhBNQorOjEwRjEyMDAwNTVBNDFGMzhCMjlFNzMyMDlENjA2ODE1RjNBQjVBQTQ5NgorOjEwRjEzMDAwRkUyOUZDRjc0QzY3QTY3NTZENjAxODY3M0Q1QUM2MDgzNgorOjEwRjE0MDAwOUY2Mjg3MzIwNUY1QUYzNjcxREVGNzg5Nzk4MUFGNEU2MAorOjEwRjE1MDAwQjI5MTlGOEU5RjYzREYxOTFFNkFDNzNDNDZGQjIwMEQ0QworOjEwRjE2MDAwRTlBQzAwRjE4NEY3RkZCOUU4QkY1M0UwQ0JEMUIyQzdGNworOjEwRjE3MDAwNTZDNzIxM0VDQzY2QTQ2RjRDNTE2RjVFOERGMUM0QTM3RgorOjEwRjE4MDAwMzMxOEQxNDk3QkUwRTUzODVDM0Y4RTgzRjk4MTJGNDQwOQorOjEwRjE5MDAwMUJBN0UyNTcxRkRFODJFQkQ5NjVBNzcxQ0ExRjY3MTM1MQorOjEwRjFBMDAwMTA0RjJFRkZEMUIxOEZERjQ2RjA2RDcxMUQ4ODY1M0Q4OAorOjEwRjFCMDAwRTVGMDg4Qzc3NTBEODE5MzdCODYwNTZDNTQwNjc0RTQ3MQorOjEwRjFDMDAwM0ZCOTY3MEVFOTE4MEZCQ0ZDQ0ZCQjNFN0U4QUUxQkM5RAorOjEwRjFEMDAwNUMyRUI0MDhGQzM2RjNENzVGM0NGMUVCMDUyODlGN0YyQgorOjEwRjFFMDAwQjE3MzZCQzEwNzUwRkU2MEY1ODNFOUY1NTBGRTdDRjUwNQorOjEwRjFGMDAwNEQ1QjZGNzc4N0ZDQTUzQkFGNURCQUEzMERFQUMzN0U3RAorOjEwRjIwMDAwRjhEMzI3OUY0M0JDQkFGNkE3RkZFNzM5NUNFRkI1N0Y3OQorOjEwRjIxMDAwRkJBMzEzRDY3RjU5NTMwMjQzRkE5NkVCMzNDRjkzQzYyMQorOjEwRjIyMDAwNUExNDhDOEIyMjFGMjVCRTZDRjU1MTdEQkVDRjY4RkYxMgorOjEwRjIzMDAwOThFNTNFQjZCNzAyRkNDQUVCN0Y0MUYxRTUzNEQxRkY1OQorOjEwRjI0MDAwRjAzNTc3MjkyQUNDRkJDMTdDQ0U1NzNBMUFCQURBMjY5OAorOjEwRjI1MDAwREJBODdEMDBEQjAzOUZBNDdDQ0Q4MTgzODBBRDYwN0YzNAorOjEwRjI2MDAwQkI0RkMxQjgzODI4NDgxQUM2N0IwN0MwN0JFNEU3Q0MzRgorOjEwRjI3MDAwRUQyNkZEMkE1M0UyQUZFMDJCNzhDRDgxOTEzRkQwNEFCNQorOjEwRjI4MDAwNzg5NjJCRTI5MUM4N0Y5MURGQkYzMTJBOUJGOEYyNDAzQworOjEwRjI5MDAwMjdEM0YxN0NDQjVFRENBMDYwOUVEQUZCNUVCNzQ2N0FCQQorOjEwRjJBMDAwNDEwM0JCN0YzMkQ4Qzk5N0FCM0NFRjIyQjdFQ0ZEQjkyNQorOjEwRjJCMDAwNzgyRUIwNTVBQkI3MjAzNEVFMkVBMUQ3OTVCREU4QTQ3QgorOjEwRjJDMDAwQkNFREY3NzczOUI3OTM5RTdGRTg1QTRCQjg3RTU4RkE3MgorOjEwRjJEMDAwOEIzRjNERkIzQkM0QUZGOUIxODQ1RjY2QkRBNTQzRDAxNgorOjEwRjJFMDAwNDc3N0RERTZERTc2M0JDMEM3RjcxQjA3QjdBQjc0NzcyMQorOjEwRjJGMDAwMDZEOUU5OUEzQjAzRjM3N0JBREJGRDU0QzZEM0I0M0Y5MgorOjEwRjMwMDAwMjIzRjlGNTUxNTRGNzEwNjE5NTc1MkNCM0U1RjgzRjQyQworOjEwRjMxMDAwMzhBRkE0QUUxOEY1Rjc3NDNDODdCRUExMzhGNjA3Q0IxQQorOjEwRjMyMDAwRUM5NDZGRTA1M0UyMjgyRjNENUFCQ0ZBQkY4NDNDNjQ1MgorOjEwRjMzMDAwQUM2RTI0QUQ4M0Q1OERDNkYyRkNFQ0E2NkQ3Njc3NzRFOQorOjEwRjM0MDAwNzlENTJDQ0UzNURBN0I5QjlENzkyM0M1OTVGRjZCMTQzRgorOjEwRjM1MDAwRjcyMzM2RTEzOUQ4QzJDRUMxRjlGQkI5MTgxRjhFNzYzMgorOjEwRjM2MDAwMEVDQ0VBMkZBMDNDNEI4NzYzMjhFNjgxQTQ4QUM3OUI3QQorOjEwRjM3MDAwRTM3RkY2MTZDQUFCQ0UyMzVDNUVBNUQ2N0ZEOTgwRjRCOAorOjEwRjM4MDAwMjdGRDE2MzU2OUFDM0I2RUE2NDMzRjlCRTg5NzJBRTIwMgorOjEwRjM5MDAwMkM0OEMzQTg3RkQ3ODg3ODUxNjczNUEzNzg1MTZBRkQ3OAorOjEwRjNBMDAwNDdGRjhERjBEOTI0QzZBRjc5OEY4RjZGQjcwNkY2MjM0QworOjEwRjNCMDAwQkVENDM4REQyNDc3M0FGQjI1NkE3OEFGODk3REM1RjM2MgorOjEwRjNDMDAwNTNEMjE5Qzc0NzM5M0UxM0UzRTNDQTU5RDhCQTUzRTNCNgorOjEwRjNEMDAwQUFERUExRUIxMDEzNTgyMDFFRjE0NzcxRDBCQ0U5QUI5NworOjEwRjNFMDAwNjIyOEFGNTVFQTU3QTlGNTc3RERBQThFMzA4Q0E3QTAyMQorOjEwRjNGMDAwNUVGRDdFMTVCN0I3RDFFQ0VDMUUzN0NCQTA1NzkxOUVDMgorOjEwRjQwMDAwNjU1RTg3RUNENzY5NjM3QkQwRkUwREQzQjM0ODBGNjM4RAorOjEwRjQxMDAwRTFGMzBDMzFENDg1MUZDRDU4QjdBNUQ5MEQ3Q0UyRkRBMQorOjEwRjQyMDAwQUZDQUZCRDQ3MTM5RTA0RTE5QzVGRDc3MDgwRkE5OEYxQgorOjEwRjQzMDAwNDlCREFEQzdCODgyREVDM0Y0NEIxRkYyMEI5OTQ3RDE2QgorOjEwRjQ0MDAwQUQyN0Q1ODZEOTRERDkzREZCQzk3QzM1NzkwRTEyOUVBNQorOjEwRjQ1MDAwRDFGQTNGM0Y0OTlGMzI5QUY0QUMwMDhERTMxNUMzNTg2RgorOjEwRjQ2MDAwRTI5RDk5MDQ1RjEzQkYwNEI2QzVGM0U5ODUxRTBBNUFFRAorOjEwRjQ3MDAwQTQyMThGNDFFQTk1OTIzRjc3MEFCRTFCQ0MwQTkyREYwNgorOjEwRjQ4MDAwNTBFNjg5MEY4MjNFOTlEMEZGODZEMTQ5REQ3OUY2QThGMgorOjEwRjQ5MDAwMDcxRDZERjg4Q0UyRUYzNUE4ODdDMkZDQzFENTlGMTgxNworOjEwRjRBMDAwRUVBMTE0OTU0RUJBODFENjZCQ0E5NzA4OEJCQkQyN0E1RgorOjEwRjRCMDAwQkQ4MjZGNEU1MTlEOTRCN0QyQzlFMjM0RTQ1RjlEM0U0OAorOjEwRjRDMDAwQTE4RkZEMjE5RUY0MzFDOTJGQ0NGQ0UxMUFDREM4RkZEQworOjEwRjREMDAwN0Y1NDYyRTRGRjMzRjVCRTI2QkJEMDE4QTdBQUY0OTg4OAorOjEwRjRFMDAwRTJFMUVGNEQzN0YwNERDOTdGRUU0NDM3OUY4QUVFMjVCQworOjEwRjRGMDAwMEZDNTc1REUxNEZDRjI2REExMDdEQTU5MUQzRDc3MzA5QQorOjEwRjUwMDAwN0U3RjM0OEVCNTUzRTk2NDg3QTg0QzY0NUQ1NEJBOTgwNQorOjEwRjUxMDAwOEJGMjZCOTI5OTQ2NjUwQUYzNTBEOTlGRDU1MTk5QzZFMworOjEwRjUyMDAwNzgzRTU1M0E2QkE3NzIxMDNCNDQ2NTI2RUJBMkQyQ0RDQworOjEwRjUzMDAwNUMxNjJDQjM5OTQ2RTU1MEU2QTFEMkMzNUMxNDI3N0YzNAorOjEwRjU0MDAwMkYyMTk4NzExOEUwMzdFMzdBMjZFRUZEMUVCQTQxODcyNQorOjEwRjU1MDAwNzNFQUFDNjRBMTdCQzA0ODU3NTM5ODQwQkVCN0Y5RkIyRgorOjEwRjU2MDAwRTlCMkZFQ0UwRDNBQkU5RkM0REI2RjdERkVCRDg3RjBEMworOjEwRjU3MDAwNUUzMEYwMUJGMUJFODNCRkVGQUVCRjdCQzMyNEVDNkZFOAorOjEwRjU4MDAwQjM1MDdEQTc2ODdGQUE0ODdGMDhDRkZGRTlEMThDQ0UxMgorOjEwRjU5MDAwQkJBQzQ4REYzNkJBMzg1NDNGNTNBODNGMUE1RUVGM0Y0MgorOjEwRjVBMDAwNEFERjFFNUUxRjVEQTgzRjE2REU3RjQ5QTFGRTQ0RjhCQworOjEwRjVCMDAwRkI3REM1RkFCRkYyQkE4QkYwRjIzRDlCNEVGQTJFRkNGMgorOjEwRjVDMDAwRUM1MjQ2NzE3Q0MzOUYzRUFBRjc2OUMyQzNERDhBMTUxRgorOjEwRjVEMDAwQ0YzNTQ2RDA5QjFEQ0Y1MTQ1M0FEMjFDMzE1ODdBNzg1MQorOjEwRjVFMDAwREU0RjMwRDYxOThDQjdGNDYyRkY5OEU4Mjg4OEZDMDkwMgorOjEwRjVGMDAwRjA3MEI4RTJERDQ3RjM5OEY4ODlFMjEzRjk4MzI5QzY4MQorOjEwRjYwMDAwQjgwOUUwM0JGOTU1ODNBQkI4OURDRTU4RTRGNzcyREVGQworOjEwRjYxMDAwMEJFMTM5RDNDM0ZDQkNEOUExNzFBM0VEQzM4Q0JGODc2NworOjEwRjYyMDAwODQ5RUQ3MjFGNEJDRjc0NDFDQjk3QkRGNDE2QkQyNjlCRgorOjEwRjYzMDAwNDc4ODhFQTNEQjg3NTY3NjNBOUM1RkY2RDhGNzlGQUE1OQorOjEwRjY0MDAwNkQ0MEQ3QzFGQTE4MTdDQUJCQ0U1OEY2MzZEQTY5QkU3NAorOjEwRjY1MDAwMjMyQTQzM0RFMzUyRDdEQjU2MzhGNTBDRTc4QjgzNUMxNgorOjEwRjY2MDAwQzg2N0JBRTcxNTdDQTYxMzdGMDUzREU3OEEzRUQyQkU4MAorOjEwRjY3MDAwRDQxQzFDREVEQ0VFNDgxMkVCNkE5QTlDN0M3NTJFRjlEOQorOjEwRjY4MDAwRjNCOTVFOUY2NzNCMzQ3MzFBQUMzMzc1MDNGN0FCMjY0RgorOjEwRjY5MDAwMjI3RDYzRThFQ0U5M0ZCODMwOEVENjNBQzVDMjkwNEY4MAorOjEwRjZBMDAwQUQ5MTdFNUU5MzNGNkVEM0U0MTVBRTcwN0ZGMDlBNDRDOQorOjEwRjZCMDAwQkY4MkYxQ0JGNDQwMkNGNzQzQTQzMDdGMkNDQUQxMzI2NworOjEwRjZDMDAwQUQ4Q0YyNjY3Q0FBQUIwQ0VCNTVFQ0RBNUNBODJGNjgyQgorOjEwRjZEMDAwNTNERDY1MzBFRjgxQjY1RkFENDAzRkUwQTIyQTNCQzUwOAorOjEwRjZFMDAwMzE2Q0ZBRDRCM0RDRkZDN0YzMzc5MjA1OUUzN0FGOEI4QQorOjEwRjZGMDAwRDEwMjA4Qzc3RTRFRjJEQkU2QUQyOTI4NDM3QkI3QzlBRAorOjEwRjcwMDAwOTk5QzhDQjg5ODVDQjU4NEZDODY0RDRFRUQzNUJDREY3OQorOjEwRjcxMDAwRTE3MzU5MjgzRjkxQjk3NDQ3MzlFODJCREI2RkI3OTZFRAorOjEwRjcyMDAwMjExRkNGNzhBNjI4NTEwRDVCRjc4OUU2NzNCMTE4MDcyMgorOjEwRjczMDAwNzlENDY1QTFGNzhGQUUyQTc1MkM3MUUyM0Q0NkIwMTdEQQorOjEwRjc0MDAwQTAzQ0UwM0FBRUEzRkVCRTE1REFBMEJGRjE5RURBRTMxQworOjEwRjc1MDAwQUQ5N0Y1NzI4RTg5NjU3NjAzREVDNjZCQzY3QThDQzk2NQorOjEwRjc2MDAwREY2ODMzRTkwNUMzNEExMjUyRTg5QzQ3QjE1MTc4Q0VBRAorOjEwRjc3MDAwMjM5RkZDOEFFQ0RGNzk0RTM3RjlENTRCNUIxNENBOEY5NworOjEwRjc4MDAwMDlFRUQ3MzI1MURGM0NCMTcxMThFNUJCMzRCNzE4RkQzMworOjEwRjc5MDAwRDFDMTBDOTY4OUY3N0RFNkI3MkFBNEFGQUFDRDlGMzdEMQorOjEwRjdBMDAwNjJCRkMxQjlFRTAxMzhDRTYwQUQ2QjgwMkI4Q0ZFMUVGRQorOjEwRjdCMDAwRkRFOThGNjM1MURFMzVFMzg1MzVDMjIzQzZFMzQyQzJERQorOjEwRjdDMDAwNUU5NUY3Q0FFN0JCQ0U1NUEzREVCRkE4RjU1RDBGQzJCNQorOjEwRjdEMDAwM0Y0OUI3MTBDRDFDQjVGOUQzRjBGQ0Q3NEY5QTQ1NzQwQgorOjEwRjdFMDAwODlGN0I0NTA4RkU5QTE4RkZFMTVENjE5NzYzRjYxNEQ4OAorOjEwRjdGMDAwNEE3NjFDQ0UxQkMyNUYzRDExRjc3QkIyQjU5MEY0QTNENQorOjEwRjgwMDAwMUQyREE1NzQxRkMwM0NDRUREMERBQzFERjVENjM1MERFQworOjEwRjgxMDAwOEVGNjQ4RkFFRkREOTk5RTRDQkNCRjdENkFEM0E0QjU0NQorOjEwRjgyMDAwMENDRUZGRDRGRTY1Njk3OERGN0Q3MTZCMEM4Qjc1RjdBQworOjEwRjgzMDAwNkM3RjcyRDM2ODlBNkYzMURFQTNDNjc5NUI2N0RBNTE0OQorOjEwRjg0MDAwNkU0QzZCOUI2NDQ3QjhEREREMzBGQjk5RjA3OTFFMkE2NgorOjEwRjg1MDAwRjU1Njk3MDBGREM1QjczRTQzNzhFMjY0MDExRkMyRjUzNworOjEwRjg2MDAwREZDN0VCOTlBODVGOUNDQzYxMTFGMzM5OTc5NjI4NDRDOAorOjEwRjg3MDAwQjdCRjFCRUZBMUZCMjlBNzMyMjJCN0JCQTk4NEVCRTdENworOjEwRjg4MDAwQzExMjM3QkZCNzZFNjU2RjJGNEQyMTdCRDA4NUY0N0FEQgorOjEwRjg5MDAwQTJBNTkwRTI3NzM2OENCQjBGQzFFRjU2N0NENTgwRjhERAorOjEwRjhBMDAwN0ZCRTZBRTEwNzRCRTFGRDlBRTlENzlEQzE3MkE0QkQxNQorOjEwRjhCMDAwOEVGNDY2RjY3Qjk1RTgwMUY0NDJCQTI3RjY5RjE1MEVBMgorOjEwRjhDMDAwNTc1MzU4MUUyMUVBOEZCQUMxQUZFMTYxNjg3RkQ4NUFGOQorOjEwRjhEMDAwRDQ4MDFERjhCQjZEREY2OUQyQzMxMTVGRjUzMEZDQTU4NAorOjEwRjhFMDAwOUY1MTQyOUYxN0Y5MjE2OUEzRThERTFERkRBQ0I5RkFDQgorOjEwRjhGMDAwM0E3RjAwQ0FFMzJEMEIxRDkxQ0UzMUZBRkM2MUUzQTJFMQorOjEwRjkwMDAwN0UzQjk5RTlCMTYxRjM4MzU0MEM5MDVGREJDQkU3RUI2RAorOjEwRjkxMDAwNkUyN0RFODMxOUFBRDNGQTg0NUU2RTdFREY0RDZGNUI5RAorOjEwRjkyMDAwOENGNEI5NEQ5QzhGRDRDRkEzQURGNzA3N0U2M0JGMTc3RQorOjEwRjkzMDAwMzAzODgxODY0NEZCQjUwNjdBQjk1QzZENUY4MTcxMTVGQworOjEwRjk0MDAwRjYzRUU3RkY2MEQ3MzE0Rjg0Mzg1Nzg4Q0ZDMkRBRkJFNQorOjEwRjk1MDAwMEJGODAxM0NEN0E2Q0MyMkZCMjREQTNBRUNGRTQzN0EyMgorOjEwRjk2MDAwRDY4ODkwRkRGNjgzMzRFM0JBNjRCQjE3QzRCRTYyRkM0QworOjEwRjk3MDAwMkM2MDRCQzQzMjQwRjczOTYyQTAzRkNBRUYyRkFBNkUwOQorOjEwRjk4MDAwNzM1RDFEODEyRTY0NjlFNjVCRjhFMzBFOEJGRjk4RjlDOQorOjEwRjk5MDAwMDRBMkMxNTBBOThGNTg3ODdGM0Q4Q0NGMjVEQ0NGRjVDQworOjEwRjlBMDAwREY5MzVCMTREMjdGRDc2RkUyNzkxNDVGRjhBMTRFQ0E2MAorOjEwRjlCMDAwMDUzRjI3NTQyREJFMTFDQThFMzNFQ0RFRTE5MjE3NUI1MgorOjEwRjlDMDAwRUVCOURDNkQ4MERCQTJGMEVGOTk5Qzc5RjIyNzZGRTM1MgorOjEwRjlEMDAwRkI4RjlFRkE4OTA3OTc3QjU3Q0FBMjQ0Q0VCNzhFMkQxQworOjEwRjlFMDAwQzA3OTRFNUQ2MTI3N0YwQ0ZFMzgyNDdFNDBDM0E1RkVBMgorOjEwRjlGMDAwMTgwMzFFQUVERkZCRTQ5NjA1Mjg3N0Y2M0EzNDRDQzdCMQorOjEwRkEwMDAwNUJCQ0M1RjgzRTI2MkQ2QzVGOENFMzk3Q0YwMEE3NjBFQQorOjEwRkExMDAwRjY0Q0EwQTNBMzNGRkQ1N0JBMUYxRTg3RkMxM0U5NzE0NAorOjEwRkEyMDAwNTUwQ0REMEIzM0MzNzk1QzQ5Rjc3NzQ2MDg2RjE3ODRCMworOjEwRkEzMDAwRTI1MDc0MUY0NEQyRDVGMTBENERBNzU0MTg2N0VEMkEzQQorOjEwRkE0MDAwQkI5QkJFQTc2MEIyQkY4RUJBNjdFQTY5NjFGMTYxRkI3QQorOjEwRkE1MDAwMkE3RTRGOTM4NURCODlEOUExRkRDQjcxOEZGQTE2M0FBNworOjEwRkE2MDAwRENDRTlFRTNGNUMwQkIyOEUzRjUyOUQ1QkY0NkJFOThBMgorOjEwRkE3MDAwNTZFQTYxNjMyODFFQkQ5MEY2NURCRjY3RDVEMTM3QTBGOQorOjEwRkE4MDAwQ0QzRDcxNUVFQjk4N0VCOEZFMjFBMzE0QkMyRjYzNzU0QgorOjEwRkE5MDAwRDNCREMxRTY2NjRCMkNGMkZERDY3NjZCRUM1MDg0Nzc3NQorOjEwRkFBMDAwQjM4NUU0N0M2QjdCNEFEQzUwOTQ0QjRFMEJDNTRGNTFDNQorOjEwRkFCMDAwQUVBODYxRkVGREQxNjMzOEJDNDJGMkMzOTMxOEFFRkYxRAorOjEwRkFDMDAwQzQwOTdDM0M5NTJCRjQ5RkM5NUNGRjUxOUVERTQ3N0FBQworOjEwRkFEMDAwNDdGMzFBMUVBNzkyRkE4NjRCRTA4RkFCOTlDNzIxQTM3MgorOjEwRkFFMDAwRTkzRkM4Nzg3MEREMDlDNThCNUNDOEQ3RDYyNEYyRUYzMgorOjEwRkFGMDAwNkYyQzlBQUNGOUYwM0VFNzU1NEU0NjcyNjMzMDVFQUEyMQorOjEwRkIwMDAwNDAzRENCQzlGQ0QzNjAxRUQ1QzVGNTFCNkYyQjIzN0RCMworOjEwRkIxMDAwMjZEOUU5RDQxMEQ0QTk2RDdFMUZBRDVCRTc3NEU2ODBDOQorOjEwRkIyMDAwN0YwOENGQjg1QzlERTFGODU2OTM1RTYxMzdFOTBEQUE3NgorOjEwRkIzMDAwQTlBRThEMTE3OTJCNDI4RjYwNDJGRjk2RjFFMDg0OEQ0MgorOjEwRkI0MDAwQkRFNzAxNDlCRjZFQUJGMDRGODBGRUU0QTM3QjIzMjVFOAorOjEwRkI1MDAwQ0M4Rjc4Q0I3NEREOUREMjNGNjQwN0E0ODlFRjFFQTVCRQorOjEwRkI2MDAwOTVCMEVENEQ2MUYxMjc0NTdGOTVGQzA2RDIyRjI5RkQxQgorOjEwRkI3MDAwMEZEMkNGMzFBMjA0RUNCNUM0MzA3RkM0NEI2MDVBQUE3NworOjEwRkI4MDAwMTQwRjlCOEU3ODkyMDVFQzgwRUNDOTNDQTZGMEVCMTkyMworOjEwRkI5MDAwREY1MjRGQUZCRkI4QjhDRjQzMkZGM0ZCNDFDRDk2MzhGQworOjEwRkJBMDAwNkQ0NzU2Q0Y3NjM3OERFM0Y4MTY3NzAwRjY4NjdBRURGNworOjEwRkJCMDAwRjUwRUJBODczMzQ1REQ0REY3RUUzNzE3NTk3ODVFMzNDQQorOjEwRkJDMDAwM0JFNDQyN0Q2MEUxMThDRTc3QjM0QTNEMEJDNjUwM0MyMgorOjEwRkJEMDAwRDU5Mzg1NzgwM0YwRjBEOUYwRkU5RUYwREI2NkRDOTFEQQorOjEwRkJFMDAwMUQ4N0ZBRjAwNzAzNEU2RjQyQkREQ0I3QzY0MkZDNDZFNAorOjEwRkJGMDAwQzIzMUFCRDE3MjJGQTI2MTU4N0MyRTYwMkQwOEM1RDlCRAorOjEwRkMwMDAwRDY3QkNFRjlGMEJFRjBCNUUzQjhERjM1NkVFNkM5RkRDMAorOjEwRkMxMDAwRTgwNzVEMzdENDQyN0VGNkJCMTI3NDhBREIwMUZEMzhGQgorOjEwRkMyMDAwNTQxRUFGN0IwREUzNkQyREVFRTQ2NEZDRUVDRTUzNDkyNAorOjEwRkMzMDAwRkNCREZDN0VENTAzMDlGREI3ODdFNzk3OTQ4RUUzRkFGOAorOjEwRkM0MDAwQzgwMzRBNjQ3REE1RUYzODg1RTc1OUVEMDU0MEY2MjFFNAorOjEwRkM1MDAwQkYxNkI3Qzc3RDVGNTRFOUNFQjAzQUQyMUVGNEZGMTc4NgorOjEwRkM2MDAwMUZCN0E3NUJGNjdFNTFFNTFCNEE3NjkyNzg5RjUzNERFRQorOjEwRkM3MDAwRjYzQUZBMThFMUZEODlCRDJGNTVGOUEwRkU0ODU2RTQ4MQorOjEwRkM4MDAwNzk3RjJCRTY3REU0NzVFRjYwRDQ2NzgzN0IwMTdGRkE5MworOjEwRkM5MDAwNDQzQURGMDBCMzk0RDBCODk5MTg5NzBBQUU4Qzk5MURGNgorOjEwRkNBMDAwRTkzQjM2ODNDNkYzN0Q2RTg2NzczMTdENDI3QUVDRTY5QQorOjEwRkNCMDAwMkFCMzlFRUEyNzdFNzVCRUY2Rjg0MTRBRDMwNkZFNTE2NgorOjEwRkNDMDAwMENGNDkwQzQyMkYzQ0IwQkVCQUI1QTFBRUE5RDREMkJFQworOjEwRkNEMDAwOTVCNUM4M0Y5QTQwNUZDNUI4NjBBQUNCNEVGQTZBNzMyMworOjEwRkNFMDAwRDI4RjI3RTFCOTlDQUY2NTJFQkNFRkJBMDNENDNFRTRCNgorOjEwRkNGMDAwNUZFODU3QzU3QkFDRDNFQTM5OUZGMUJBQjg5RjE1RUNFMgorOjEwRkQwMDAwMzhDRjU1ODg4RjAzQUM4NDhGNTI3RkI1NTY3MUZFNzMwMAorOjEwRkQxMDAwNDUwQ0NGNDdFRTRDNzI5MkRGMzRBOTlFRTcxRkM3RkIxQworOjEwRkQyMDAwNDA5RkM1RkQ0REU2RjlDMzNBRkM0MzNFMjRGNTVCNjdCMQorOjEwRkQzMDAwOUVENTkwNDc2QzM3RTUxOTVCNEQ3OUM1RkJDNzE4RUQyQgorOjEwRkQ0MDAwOTk4NEUyQTI1RUY1QUE5N0MwRkVDNTc1RUUwM0ZFODMxNAorOjEwRkQ1MDAwNjUwMEVDNjAyQzVGMDZCQjFEQ0I1N0MwNkVDN0I4QzFGOQorOjEwRkQ2MDAwQUIwREI5NTRCRUQ2QTBEMUYzMzcxQTRBQTg5Qzk4MTk0NgorOjEwRkQ3MDAwQTRCODIyRjk5MUM5N0ZDMzAyMEFGOUYxMjQ3RTdEM0EyMQorOjEwRkQ4MDAwQTgxNEVBNEY0REUyRUZGRkYzODUzQjFGRjUwRDgyRjcxNAorOjEwRkQ5MDAwMjlBMkJERUZFQTZBQzREN0VFM0FBQkFGQzZGNjM1NjkyMQorOjEwRkRBMDAwQkM1RTNERjZDN0Q1RThGRkU5OUFBMjdGODhGMkFEOUYxOQorOjEwRkRCMDAwQzUzMzdGMERCNkZENDk4QzE2QzlCRUFGMUQyQkU0Nzk0NgorOjEwRkRDMDAwMTRGQjlERTEyNzEyOENGRTlDQjM2MzdBRjFFNzNDQTAwMworOjEwRkREMDAwRjA3NUY0RERGN0QyQzM0ODE3N0Q2NjVBM0Q4OEM3OTlBMAorOjEwRkRFMDAwRDk0NjNGRkZENTYzMzk1RDNDMzg5NkYzOUZDQzM3ODBDOQorOjEwRkRGMDAwM0U3QTgxQkJBNDhGNjhFRjlCRjYwMjBBNDRBMDJCNTk4MAorOjEwRkUwMDAwNkU0RTYwMTNFODdFNzZCNTdENzZBNDNDQTdGMzgyN0ZDNAorOjEwRkUxMDAwNDQxRERGQzlEQzMxMjM0M0Y0RDZFNDM0RDM1QjkwRTJFNAorOjEwRkUyMDAwQkJFN0VCNkZEQjhGRjJGMkJCRDMxQjIzRkIzMDU4QUQ4QworOjEwRkUzMDAwOTNCQzBFMDJCRDIxM0Y1NzZCMzlCREE5NTY3RTNGQjMxRgorOjEwRkU0MDAwRTY0REVFMUZEOTgxRjQ4NUY5NzA0ODZGRjBFQjM0MUY1MQorOjEwRkU1MDAwQUZBNzlBRThBREM5NEM2RjRFMjNCRDA1OTFERTYwQkNEQgorOjEwRkU2MDAwMjQxRkQ3MkZFMkFCREFCRjU3N0ExQjM5RjZCQkQxREJBMQorOjEwRkU3MDAwQkY4RjBGNTI1RTQzNjc1NkREMDA4NENGNjZGMTNEQkNGNQorOjEwRkU4MDAwNEJBNUMzMzdDN0RBQjkzQzE4QUU5MzVGQTA1OTdDRkZDNgorOjEwRkU5MDAwMTA1OENDMDZGQ0NFQ0FCNDQxOERENjY0ODBERjhDOTQ1OQorOjEwRkVBMDAwN0NGQTBFQzE2RDYzRkIwQjNBMzlFNDQ0N0Y0REUyMjRDQQorOjEwRkVCMDAwN0REQTU4QTRBRkVCQ0VEMEZEQzY3RTE2NEVCRkI1NjMzQgorOjEwRkVDMDAwQkJBQTkwRkUzMkQ2NzRDQzlDODY3NEI3NTIyNTM5Njk5MQorOjEwRkVEMDAwREVENzhCMTMzOEREMzUyOTdDNUUzOEI5MDFFMTcxQkQ4MQorOjEwRkVFMDAwQjk2MzM5M0VCQTU3MzYyOTBFRDRDN0U3MzMyRDI3OEI2RAorOjEwRkVGMDAwQkUyQjQzREZCQkY5OTdFNkZGNzRFMUI4MkY0RUUwREY3RQorOjEwRkYwMDAwNzM3MTM3QkU5N0U0RTVGRUI1MzRCNERGRTg0QTczNDE1OAorOjEwRkYxMDAwNEY3QTg0OUY3NjVCN0YwMzNEMkZDNDdENDRBM0U3MEIxQworOjEwRkYyMDAwRjE4RkUwMTg0NUMwODU1MTFFQjA1N0RDREY5NDcxOTEwOAorOjEwRkYzMDAwQThGNDZDRjJFMzQ2RjUxRjBFOEZGQzVEQ0FDOUUzRjkyNQorOjEwRkY0MDAwQkM0REMyRkY2QkQ2RjdFNEZFMEY0RkYyRkU2QzJDOEM1QgorOjEwRkY1MDAwQTMzODVGRTU3RUUwN0RDQzhERUI5NDcxQjNFRTNDMjM1RQorOjEwRkY2MDAwQTkxRkZBOThCRjA5RjU2RDJCQTgzMkZEQjlCQTgxRTMzNAorOjEwRkY3MDAwNzVFNzFGMDkzRDcxNTlBOTc3MUQ4RUJCOURCOUY3QTM4MAorOjEwRkY4MDAwN0M3MzZBM0M1RkUxRjk0OUZBN0E4MkU3QjdENDAzNEJBNAorOjEwRkY5MDAwNEFGNTdCNzFEQzY4NzhCNTZDOUFGRTQwNkZFRkQ5NTdGMworOjEwRkZBMDAwMzBDQUE4NTA1QzZCRDI0QzJCRTcwQkY1OEFFMDAzQ0UyRAorOjEwRkZCMDAwQjU3NkE4NkY0RTAyN0VFNjQ2QkQ5REVGREIwNTdDQzM5RAorOjEwRkZDMDAwNEQ3Njg2RDE4RTk4OEFDRTQ4RTQxQkM4NDcwOEI4RkE4OQorOjEwRkZEMDAwMENDQ0FCNEMxNEUzODdFNDc1RjAyMEVBQTU0MTgwRUQyRQorOjEwRkZFMDAwQkRGMDJBRDFDN0U1NzVEMzlCOUNBRkQ4ODFBRjUwNUNEQgorOjEwRkZGMDAwQkE4NERCMDlGMjVFNTA3QzlFNDZGNjk3QUFGNzZFM0YwNAorOjAyMDAwMDAyMzAwMENDCis6MTAwMDAwMDA1ODRERjZGRDlFQjFDMjdFMjg2MDQ1MDhCNzRDOEJGQjZCCis6MTAwMDEwMDBCRTMxRjBCQ0YwQzEyOTg3QzdDMEUzRTI2RDhCRkJBMjAzCis6MTAwMDIwMDAzODFEQkQ3RDREMzk3RUVGNkJEOTEzQTdCNkEzOUY3NEU0Cis6MTAwMDMwMDBDQzdGQzQzMEYxNUQzNUNBMzNGODNCQ0ExOTNBOTdGMzI3Cis6MTAwMDQwMDBGQjU4QjVDRjhBRkMyQTMyMUVBRjE5Q0ZFNTlGOENCMzdGCis6MTAwMDUwMDBGNjgyQzdFRjEzMUU4QjM4RTcyNUUwQjFGMzAyNzg3Q0Y4Cis6MTAwMDYwMDAxQ0YxMzUwMjFFOUZGODhFNzhGQzA5RjZCRjE3MEYwMUIwCis6MTAwMDcwMDBENjFEM0I0REZGQjQzN0JDOUQzQTU1RkZCQzM3N0UxQUE5Cis6MTAwMDgwMDAxNjNGRTBGOTQzQUM5NkVDNjcxOUJGRUMwMTU3OTRBRjBCCis6MTAwMDkwMDAzOUJERjhBNUQ2RUQ4ODQ1N0JCNkE5NzZDN0VCRjhERDY2Cis6MTAwMEEwMDBDN0E2N0E2RTY3NzcyNjY4OEUxMkI0NkZERTU1RTk3QjM1Cis6MTAwMEIwMDA1NkQxRkFBM0RERUQwMzY2Qjk2QTNDQ0Y4RjNFQjAzMjZDCis6MTAwMEMwMDAyNjMwMTFDNjQ5Nzc3Mjc5OUJFRUQ0MTlFNjhCNUI1REI5Cis6MTAwMEQwMDA0MTlCMzcwMUY1MzUwRjQzQkRDRDlFNjI2MUJFMzA3RjM4Cis6MTAwMEUwMDBDQzQ4REIyMTkyQ0I5RDIwQzc5MTNFODAzRTM5QkQyNTc3Cis6MTAwMEYwMDBGMTcxQTQ3QzlFQjhGMjNFOENFNEIwRjE1REMwRkJDMjBECis6MTAwMTAwMDBFOEU0RjVCRDI1RTQ4NzRCMjg3RTZFMDVGNjUzQUJFRDlDCis6MTAwMTEwMDA2RUM0RUY4OTdGMDVCOTE5MzZDRjI0RDA0NEMyRUI1NzlFCis6MTAwMTIwMDAzOTA2MThDNjk5RTJDQTMyQkM5Rjk2RjYwM0MzRkJBQkU4Cis6MTAwMTMwMDAwMTVGRUMxNEM3RTZGNzAyQTU1RTMzREQ5RDZGNjg5NzlCCis6MTAwMTQwMDAyNEUyMUMzRkNDMUQ2MzE4Q0ZBQTdFNzVFRjY4QTQ3RjA0Cis6MTAwMTUwMDBBMTQ3OEM4MzdGRjQ1RDVFOTNCRTYwRDYyN0NDRkFDMzQzCis6MTAwMTYwMDBFODJCOERGNzVENDY1ODQ1MUU5QTk1RTc0NzZDNjYwRTVECis6MTAwMTcwMDBGQTJFMDVGMDQxRkFFRTQxNEQyODRGODBFODY0ODQzREE3Cis6MTAwMTgwMDBCOEUzNkVGNEFCQ0M3MTY4M0U3OEQ2QkNGN0VBQjRGOTRDCis6MTAwMTkwMDA0NTIxRkZEOUU2N0FFRUY3NkJEQUUzRDg4RUY0QjA1NTU1Cis6MTAwMUEwMDBEMEE1QTRBRkJDODRFMzczMThDOTc1M0I0Mzc5NkNBNjkyCis6MTAwMUIwMDA1Nzk5RUYyNEZEMDVEMjlGQTBENDcyM0ZDM0Q5MDk1OUE2Cis6MTAwMUMwMDAzQ0VGNDhGMDlGQ0Q1NURDRkU3RDQ4MDlDNDJBNDMzOEZBCis6MTAwMUQwMDA1REJBOTM0M0RGQTc0QjYzOEE2RjNBQTc2RjNENTk5NDhCCis6MTAwMUUwMDBBQUM4NDc5NTc5QUYzODBFREFEOTY5N0MzRUY2MUFDRjlFCis6MTAwMUYwMDA5QjZDRkM2N0VDRUY2MkJFNDFDMjlGOTE5MTFDRjI1Mzc1Cis6MTAwMjAwMDA2MDdFQzJDREJDOUY2RkJBRTgzNzU4RTQ1QkY2RTFFQjg1Cis6MTAwMjEwMDAwRjRDMTFGMzhEODA1MkFERDM4NTdGREE0QjY1MENDNjQwCis6MTAwMjIwMDBDM0ExQ0M1NkI0MzhGNDdGMEM1MTNEMTQ2ODQ5MTRGMTg1Cis6MTAwMjMwMDBGNTc0MTE0RjhGNTcwMjlDNzk3QzRCM0UzMjEyRDgyOEFGCis6MTAwMjQwMDBFNjI1QjA2NEZFN0Q5MUQyNUYzODk5NEFGNDYxREY4MTgyCis6MTAwMjUwMDBGMkU4QUU2M0RBM0JDNUYwQkMzOUUxQzc2RjREODRFNzI1Cis6MTAwMjYwMDAyREVGQUExQUZBNDlFRkNBRjA3RDgwNzQ2RDA1NjRGMDhCCis6MTAwMjcwMDA5MTVGQ0IzMzFGQ0Y0REFENzBCOEE2NDEzRkQ1QjdCRDExCis6MTAwMjgwMDAxMUUzQkIyM0VERkVGRDc0OUVBQjYzODhERTgzRDAwRkNDCis6MTAwMjkwMDBGMTYxNkIwMkQwMjlFMjJCN0FCQTQ2ODVGMjgxNjQxQ0E3Cis6MTAwMkEwMDAyMzM4NDY3M0EwMUMwRDYyM0JFRTZGMzZGODNGMjNFNDAzCis6MTAwMkIwMDA5QjkwQkZENDJBRUFDRENFMURBNEJGQUY0REIxRTMxN0FBCis6MTAwMkMwMDA1MzMxQkYyN0IzMUVGMUIyNUYxQ0JGN0ZDQjc4REM2MDE4Cis6MTAwMkQwMDAzMEZFMTI5NjZGNkY3NzQ1RjY2QjgyQkU0NjcwMDgzNjE5Cis6MTAwMkUwMDAyRTRERUI0REVGOEExQTQ3NzE1QTAyRjZDNDhCOEZBMzNECis6MTAwMkYwMDBBQ0I5RjEzQTdGMjA2QzlENzJERjZCOUQzQjk0MDVFQ0FECis6MTAwMzAwMDA1MkU2NjdDNjM4NEEyREQzNjM0NzQ0ODhBMzA0RkQwQUUyCis6MTAwMzEwMDBBRTczNzAyRDhGQjMwQzE2RkVGQTZGMUI0N0E5OUNDMEVECis6MTAwMzIwMDBGNUM3NEI4REEzQzhGRDVFMjM3RTlGMDE4ODJERUUxOTc2Cis6MTAwMzMwMDA1MzNDODFDRUNCMTI1QTVGMThGQzFFMjc3RTQ0QjgyMTU1Cis6MTAwMzQwMDA1MDA0RUEzRjEyRjVCNzc2NzdGQ0U5NDlGOEY1Q0Q1RDQwCis6MTAwMzUwMDAyRkVGQzY1MkVBNzEzM0M1RkI2Qjg3N0RCOTBGNzNCN0I4Cis6MTAwMzYwMDA2NkFFNUIyMUUyNThDNkY4QzMzNTYwRDU4NUZCRjlGMTZFCis6MTAwMzcwMDA3QjAxRTFGNTk5QTZGNTk0NUE4RDcxODJDOTRFNjNGQjE0Cis6MTAwMzgwMDBBOTI5QzZGNzY1ODM2MjdBOUMxQkZBRTU2OUJGNEFDRjQzCis6MTAwMzkwMDBGRERFMTU3RjBGRTNERjlCMEEzQjA3RjVDMjc1MDdFNjFECis6MTAwM0EwMDBDRDYxRENDN0REMTM0RkMyRTMwMDlFREY1ODU5NzIxMUU3Cis6MTAwM0IwMDBFMjhCODVGNEQyQURCRUE1Rjc1NzAyRkRBQzA1MzlDQTc0Cis6MTAwM0MwMDA3OUIxREI0MDdGQTFCODQ3OTk4RUY4MjRGREZERDFFOEQzCis6MTAwM0QwMDBFOUI4MzM5QkZDRkY4M0VCRjdCNzRGRUVDQkJBRTMwMEYyCis6MTAwM0UwMDBGN0M0NzkxREUzRjA3QjQxQ0U3MzBBRUEyMTgzRUI1RjBBCis6MTAwM0YwMDBBMUY3RDdDRDI5RUUxNThGNzJFQTBGQjQ0RjBFRkI4RTAxCis6MTAwNDAwMDA2MDhFRDU2MzQxRkIzOUE3RkU1NTdBMUU1NTlGRUZDOTEzCis6MTAwNDEwMDA0NzI4NkYyRDQ3RTA4NUNDMEJEQzhBNzk4MTAwRjc5QzVCCis6MTAwNDIwMDA1QUYxN0RFMEI2REVGM0RGQTQzQzZDMEVDQkVGQTM2NEEzCis6MTAwNDMwMDAwNkI3QzJDMkM3OTc3MkFGODczRjlENzFCRkFGOUNBRjZGCis6MTAwNDQwMDAzQjJGRDAzNDZGQjdGQzczNzFGOUY3RkMyNEFGMzZBRTk1Cis6MTAwNDUwMDAzOEVDNUU4NkI4QzcwMUZCOEU5ODA3M0E1QUY4QjM3QjMyCis6MTAwNDYwMDBDOTYzRTM3NjY3QzU2QjFGRTBGODk3NkM3NzQ2MTk3NzI5Cis6MTAwNDcwMDA2MjY2MzBFMjNEQTlBOUMyNkZENTE5MUJDQzQwQkY0MUNECis6MTAwNDgwMDA2Nzk0QkY5QkYwRDA5NEE5M0YxQ0Q3OEJCRThCNzlCM0U4Cis6MTAwNDkwMDAwOENCNjhFQkZDQjY3OUIzNzUyMkRFMjRFM0FEMzI3RjdFCis6MTAwNEEwMDA1NkU2QzU1RTI4N0ZGNkJCRkFFMTU3MEE3RjQwRTkzODc5Cis6MTAwNEIwMDAxNjMxMEU2MTVFRUY2REMyM0Y5RTU1RUE1OTgxNzgxMThCCis6MTAwNEMwMDAyREZFMjBEQjdGMzBDMDFFRDEyRjdFNjQ0MkU0RUYwRTc0Cis6MTAwNEQwMDBDOEZDNTA1ODZGNEFCODFEMjRGQkM5QkM3Q0YzNzg2MDM3Cis6MTAwNEUwMDAxN0FEMTkxN0U2MEZGNDM2RTY5MEJGMkZDQ0RFOTJGOTYwCis6MTAwNEYwMDBCMDQ0MUY5Qjg1MUZBMjlCMEVDQzdBQTE4ODg3OThGNURDCis6MTAwNTAwMDA0MjE5MUY1MUFBQjg3RjAyRThBMzBERTc0NUJEMEJGM0JFCis6MTAwNTEwMDBEMkE1OUQyN0YzNDk2NURFMjhFNjg1NTIzQ0VBNUJFQUQxCis6MTAwNTIwMDA1NURGQkIzREQ1Mzg4NUYyQkE5QTVDQTVBRjdEMTc3QjA4Cis6MTAwNTMwMDBFQURGMjcxOEVEMjlBRjkzRkIxREJDNjg0RjBERUY2OTZCCis6MTAwNTQwMDA0RjE1OTU3QTVGNDQ3ODk5RURBQUEzM0ZGQjg0RjI2MzM3Cis6MTAwNTUwMDBDMTBFREQzN0VFRkJFMDEzMjZGRkQ0REMzMTFDQkZBNTU2Cis6MTAwNTYwMDA5Qzk2RkVCNEZENDMyRDA2QkZFQjU0NzVENTdFQ0ExNzhECis6MTAwNTcwMDBBRkU1RkU5Njc0QkQ5REVDMzRCQkQzRUU0NjdGOEI3NTI0Cis6MTAwNTgwMDAzMkE3MjM1QjFFRjNFQjNDQ0U0QkZFMTU5OTU3OTZFQzNFCis6MTAwNTkwMDA1QzEyRjFCRUE5QjQxMzgzRDI0RUY0RjFGQkE5OUQ2Rjk2Cis6MTAwNUEwMDBGMkI4NkQzQ0ZBNUJCMDYxMTk5NzZCRDJERjYyNEIxMTA4Cis6MTAwNUIwMDBGRTE2NTMzRTc2QkNDOUJGNjJGNkI3OUMxRTI3RkNCNjNBCis6MTAwNUMwMDBDMkRGRjI4OEUyQkUxQjQ5RkQ1NzVCQTZGQzBFNDFGMTdCCis6MTAwNUQwMDA2RjBGMkY4RTQ3NTNGRjc5RkY5QTFGMEE3RkNCODM0RUYxCis6MTAwNUUwMDA1OERGREUwRjhDRkUxNjczRkMyQjQyREM4QjlDNTc4MzhFCis6MTAwNUYwMDBDNkZGOEVFMjZFMTJCRTkyNkVBNTNGMkJCRDlFN0ZCRkUwCis6MTAwNjAwMDA2OUFBQkE1QjQxRkVCMkQ5QzlFMUFCQTIzRjJCMjVFNDhFCis6MTAwNjEwMDBDRjUyOUVGRTUzQjc1RjhBRUVFM0Y2ODg5M0Q3QkQ4RTI2Cis6MTAwNjIwMDBFQkI0MDJDMzU5MUZDOUJGMjVFMDZBOEU0NzI1RDY4QjlDCis6MTAwNjMwMDA3QkMwREY5MzNGMkI3OUJDMTFCRTA1MEYxNkRFODdERjMxCis6MTAwNjQwMDAzNTJFREE1NjdFMThDQjUxREI2RkVCM0IxN0NBOTIyNzVCCis6MTAwNjUwMDBFRTJCQzdGMjJGQUYwN0IzNTBFRjM0RkJCMTE0MDQ3RTdCCis6MTAwNjYwMDA3MTRGRjg5QUUxMjhGMUQ0NUIyQkYxRDQ2OTI3QkFBRDI4Cis6MTAwNjcwMDBFMjcwMzRDMzI5NTVFNzc4OUEwMzc4MEEyQTQyMzdGRTk0Cis6MTAwNjgwMDA3NTI2NzFGQTRDOUZBQ0JEODZGRUI1QzE3OTU2MTYwOTI4Cis6MTAwNjkwMDA4RkFERjVGQzdCNTkxMjhFNUIwNTFDOTM2Qjk3OTA5Rjc5Cis6MTAwNkEwMDBEMDhDQTc4M0RCMkUwRDNGQzc5QUUwRjdFQzk2QzJCQjM4Cis6MTAwNkIwMDAxMTZFQ0YzRDVDRkUzQjJDN0ZFREJGMkQxRUUxQjZFN0ZBCis6MTAwNkMwMDBGMUZCN0UyOEUwMzc4MEJFQTc2QjgyREYwM0Y4MTFFOURCCis6MTAwNkQwMDA3RTNERTEzNzUxRTNGNkY1RTdBNURFQjJGMTAwREZBQjkxCis6MTAwNkUwMDA4MTQzQTAzRjY0NDc0QjgxQzMxODA3MzJGMkQzRDRFRjU0Cis6MTAwNkYwMDBDOTNGMTVFQ0U2QTdFQ0VEOUM0QkUwQTcxRjlCRkM1MzE0Cis6MTAwNzAwMDBBOTNFNEUzN0E5QkU2MzQ0OUZFOTQwOUZCMUU4QUZBQTE2Cis6MTAwNzEwMDBFNTdBMjQ4ODdEN0ZCQzgyMzYzN0U3QUY1MkFFMjFDQkE1Cis6MTAwNzIwMDBCMTgwRjBEOUVBRTI3MUU3MDg3RUNBMDA3REVGRDdDNDU0Cis6MTAwNzMwMDA4N0QxODExMzhFNzcyMDU3RUIxMDdFNTJERTZEQURFNUE5Cis6MTAwNzQwMDA3MUI0REJBNjc4NTY4Q0VGMTc4QUFCM0QzRjQ5QkY2RDdECis6MTAwNzUwMDAzQ0RENUZGOEQ2RkVDNzdGQzZGRUQyRkYwODc4NEFGQkI1Cis6MTAwNzYwMDA1NzAxREZGMUZCRTY1NzgxM0M0MUZCREY1QTFCQjRBMTg3Cis6MTAwNzcwMDA1Q0E5QTlCRjU1RjE0MkQ5RTc0QTRFM0ZBOTY5NUU4NkY3Cis6MTAwNzgwMDA3MUZFOUVGRUJBNjAwMkVBRUQxMzg3NzZFM0MzN0E5QzlGCis6MTAwNzkwMDA0N0UyQzNDODk1RTdFRjQzM0Y1NzM0N0M0ODhGOTJBRjk5Cis6MTAwN0EwMDA3NDYxN0MyODM1QzhEN0NERERGODUwQjdFRUIyOTQ4Qjk0Cis6MTAwN0IwMDBDNzg3QjgwOUZDRkIxMURERjgyMEU4M0ZCNTM2RjgyMDAzCis6MTAwN0MwMDBEMkFGNTVFMDgzRDUwNTdDMENFMEExMjIxRUU0ODVFMjgyCis6MTAwN0QwMDA5RTkyMUU4MjIyRkZDMDBDOUZBMDZGNDg5NDNDODQxNUZECis6MTAwN0UwMDA0QTQ5MkZFQkJCRThGQzAzMTEwRjZEMTJGMTUwNkYzRDJFCis6MTAwN0YwMDBDRjk3RUQ1QzE5MzNENTk4N0ZBMEQxQkFBNzM5RUI5NDg4Cis6MTAwODAwMDBGMDNDRkUwODc5QjIyRkUzRjlDOTM4QTc4QzZCN0U1RTA1Cis6MTAwODEwMDBFQTc5MDU5RjRGQ0NFNUU3MUM4QzFFNjcwQUUwRkQ1NjgwCis6MTAwODIwMDA0MDNGOTcwOUNGREYyMjNDOTdGNzBGODQxRTc3REIxNEY4Cis6MTAwODMwMDBGRDZEMUM3Nzg0REQ0Rjc5Q0VBMEVGMURDNjc2NUJGNzhBCis6MTAwODQwMDAzRUM5QkZCNzJCRkM5MDMyMkZFRjNCRkJDRDEyRUQ3RUE0Cis6MTAwODUwMDBCQzJGMjlGRDY2OUIxM0VDM0JGMEJDRTdCM0UwMTRGQTE4Cis6MTAwODYwMDBDRTJGQzYyOUQwRUZCNDMxODZGMjFBMTcyQTYwNzgyMzJBCis6MTAwODcwMDA1RkJDQ0FGQkQxNzg4QUVCNzkyODFGRDc1QkUxNzBBMUY2Cis6MTAwODgwMDA5RURGOUMzNDM1MERGOTQ2Q0Q1QTk1RTQ3QTM0RkI0NjBCCis6MTAwODkwMDBEMjVCMERGMDFCQTJCNzdBQ0U2RjUyMDFCRjA4REY3QzhFCis6MTAwOEEwMDAwQUYxOUI3NEUwMzc5Q0ZGRTgwQ0Y1M0EyQkQyOURCMzFDCis6MTAwOEIwMDAyN0JGRDlEQzBCRkMyRjkyRUY3QzgzNzA4RkMwNzc5NDFECis6MTAwOEMwMDAwOUM1MDZCRTYzOTlGMDFERjhDRTRGQzYzMzZFMUY4QTY4Cis6MTAwOEQwMDBGRDYzM0M4MEY2OEZGNDE1QkU3RkIzM0VEQkJENkYyMzE2Cis6MTAwOEUwMDA3RDQ5QkFGQjVGNDA2NzIzMjc0NEE2QjNGQzA5REY4RDJGCis6MTAwOEYwMDBDRUM2NjJGRjA4NzQ3NkU1MDQyMzlERTkxM0ZFNjdEMjM1Cis6MTAwOTAwMDA1OTA1RTFEQjA1RThFQ0EzRjE0Q0Q4QjdENzFBRjQ4QTE2Cis6MTAwOTEwMDBDQkQ1RjY3MzM5MzhGRkZGRTdGQ0VEODM1NzcyM0JGRTBBCis6MTAwOTIwMDA0MkY5REJGODczMzFGRTUzNzMzRUY3M0ZGQ0E5RkY2QkNFCis6MTAwOTMwMDBGREE5Q0Y0RUY4MUVGQ0E5QUU3MTZFQzIzRkIzNUZGNUE0Cis6MTAwOTQwMDA5M0QxRkFCRTA5QkRDNDk1MjU5RkI2NEEzRTBERkMxODQ5Cis6MTAwOTUwMDA3OTZGMERGMDMzRTRDRkE5NTU1RDlGM0VDRkVENEQyRDVFCis6MTAwOTYwMDBERTRERkU4NkQ3NzFCQzc0QzFBRkNEN0MxOUY0Q0UzNzk1Cis6MTAwOTcwMDAyNkZDMURGRDBEN0YyRkJGRTE0QUUxNjdCREQwN0RGQjQ5Cis6MTAwOTgwMDA5NTAyQ0VEMUVFREQzNzA5RkJCRTA5QzZDMDdCN0E1QjhFCis6MTAwOTkwMDA1N0RBRkRDREIwNjA4RkQwQUI0N0Q0NUU3NzM1MTJEOTMyCis6MTAwOUEwMDAzQkNCRUM3MUMxNUVFQzI2Rjk3NzI0NUExQkJDMkY5RTIxCis6MTAwOUIwMDBDQzA5REYxRjhCMjhCN0JBRjc2N0QyOTNDM0VEMjZGN0IwCis6MTAwOUMwMDAyNUQ4NEQzMzI2MUFGNTY0NkIyREI3NzNBRDIwRUYyODZCCis6MTAwOUQwMDBBRUFGOTcwNDkwNUZBN0ZCOTQ3NjRDMERGNkE2RDQyOTkyCis6MTAwOUUwMDAyODA3NTM2QjNEOTQwRjdGQTk3MTdEMzMxRTQ1OEJGMzEwCis6MTAwOUYwMDA3RkRGNzE3RDczREVDMEZGOTQzODdGRDE0NDYxQ0Y5QjcwCis6MTAwQTAwMDBFMkZDRDJGRjZBOEVDQjhGQjBCNzk2OTE3Q0FEQjZFMDk4Cis6MTAwQTEwMDA1RkMwNjBDRDdCM0ZERTcxMzc5RUY3MUMwN0RERDMzMEIyCis6MTAwQTIwMDBFNzAzNDQ4QkRCOEY0OEI2MDdFM0IzQTNDN0VGQTVCRjRCCis6MTAwQTMwMDBFMDExNUJEREVCNjg4NzNGRDI2OEExRjMzNUU3MERFNDk5Cis6MTAwQTQwMDAyNUYwRkNGMUIzMTM3NjZEQTNGQzFGQTkwRjU3MDkzRUU3Cis6MTAwQTUwMDA1M0FGRDhFOUJCOEU1NTdFRTIzMzVFN0Q1NzIzQzY5M0Y0Cis6MTAwQTYwMDA1MzlEQUMxREY1QUNCODg5NkVDMjNGMzU0RDI3M0U2MzMyCis6MTAwQTcwMDBBREYyMTI1RUM5Rjg0NDREMjZCRjM3MTcyQkYwNEIxRDVGCis6MTAwQTgwMDA1QUY3MTY4RTlGNzQ0OEQ1MzBCRUJEMTE5QjAyQ0Y0OEQxCis6MTAwQTkwMDA0MDU5ODk3QUM0MTgwQkU1NDVCNDI5NzVFNEY3Njg1NUJGCis6MTAwQUEwMDBEQ0Y0RjczRjkyRjI1Q0E0MUYzRDk1QTRGRDdFMzZBRUM4Cis6MTAwQUIwMDBCRjFGRkYzQjI1MDdBNjJGNDk0MzNFQjhCNkIxMzEwREY2Cis6MTAwQUMwMDBFRjI3REUzNDkxRjM4NzdCQTc5RkFFQTYzODdBMkVFODE2Cis6MTAwQUQwMDA3RjBBOTU4NkJGNjcyQkNCMURCQTIyRkVERTkyOUZGMjVFCis6MTAwQUUwMDAxMTYxREQ1QkE4REY1MDNCRjlEOTU0RkQ4MURCOTAwRjJDCis6MTAwQUYwMDBBODk3NEQyNUJDNkU1NTVDNzMxNkUwNzlFNUQ4NDk4RkYzCis6MTAwQjAwMDA2OUNFMTkzNTdCMTFFQzZCNUQzRjRGNTkxNjlFNkJEMjQ4Cis6MTAwQjEwMDA1MERBNjc3MzUyRkY0NEQ0NDdENzBEQzhBNkY5NUIxNDY3Cis6MTAwQjIwMDA2RjU5MTZGNjFCNjAyMUJBNTY0NTdDN0U1RENFOTJENzcyCis6MTAwQjMwMDBGMEVGODAzNEE1NUIxOERFM0I2OENCMzlERDgyRUREQTVGCis6MTAwQjQwMDBDNkYwM0Y4MjYzNUVBRkVBMzJERTkzQzIwRjFGMjFGRjIxCis6MTAwQjUwMDA1NkQzNzg1QzVDMTU3MTcxRDUxNDU3MkVENTE1OTlGRjU1Cis6MTAwQjYwMDA0ODcxODc1OEMxQjc2QTcyNTZDRkE2RUYyNzM4RUQyRTY1Cis6MTAwQjcwMDA0NEIyQTY4NDYwMjVFMUM3NEExQkMzMzgxREIzQjYxQTI4Cis6MTAwQjgwMDBGNEI0QkIxQjhDREY3RjcxRTYxOUQ3RDNEMjdEM0YyMTM0Cis6MTAwQjkwMDBDQjhCN0M4NkZFMDYyQ0RENUY0OEYyMjI3RTIwQkZFNUYzCis6MTAwQkEwMDA0OTdGRjFCQzFFMkJFQTAxOUJENzE3RTE3Q0ZFNTFGRTY5Cis6MTAwQkIwMDBBM0ZDNDcxOTJBRkYyRjBEMjI0ODNDMDA4MDAwMDAwMEFCCis6MTAwQkMwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkM1NUIwRDcwMUNGNUJBCis6MTAwQkQwMDA3NTdGN0JCQkI3NzcyNzlENEU3QkQyQzkzRTgxNkM1NjE0Cis6MTAwQkUwMDBCNjQ0NjQxMEYyNUFCNjg0OTREODY4NEZERjMyMkVCREYyCis6MTAwQkYwMDAzODdDODhDNDc2Q0VEOEI4Q0UzNDkzMkE0RTQ5RUM4NDVCCis6MTAwQzAwMDA1NjY3RUI2NEM5NUZCMkE0MTRFNDRDM0FEM0IzNDkzMkRCCis6MTAwQzEwMDA2REYwODA0MjY2MUFGMzM5Njc3MDA4MjFEMDI4ODExMDgwCis6MTAwQzIwMDAzMjkzMDQ2MTg4NUI1MjlBMzEwMTI3QTI0MzRCREY3QkU4Cis6MTAwQzMwMDBGRjVERERFREVBRTRBRkI4MTMzMUNDREZGRkRERkZGRTkxCis6MTAwQzQwMDAzRkRFRTdFRkJERjczRjAwRjBDMDAyMDBEOTBGMDAzQUVBCis6MTAwQzUwMDBDMEE2MjI0RjEyMjIwMEU3QUEyMDBEOTVEOEY3NEU5NzgyCis6MTAwQzYwMDA2OTQxODAwRkU5QUYyNURCMUVFODA3QzhGOEIyRkQ2MEQ3Cis6MTAwQzcwMDBBRDBBNjYwREYwREY4N0EyNzFDRDNCNkU1QUYzQzI5RkJECis6MTAwQzgwMDA3M0RFRTE2QUI1MzcxRDlDM0JBRjNEQUVENTk0MDAxQUNCCis6MTAwQzkwMDBGMkFFMDNEMjI1QUQ3M0U2NjczQThFNEZGRTRDODY2QUZDCis6MTAwQ0EwMDA3REVFN0FFRUVGRURFRjM2MTVBRDJGODZEQUZGQkZGMTcwCis6MTAwQ0IwMDBGM0QxNzVBOUU5MDEyODEzN0Q2OEM0NzM1M0JCNDQ3NDRCCis6MTAwQ0MwMDA3NUE0ODMwMjgyMEUwMzlEOERFOTBDRkU3MzQyNEEwQ0NCCis6MTAwQ0QwMDA1N0QyRjlDMjFFRTM5QjMwOTcwRTc2MkI2QjczRjg5N0IxCis6MTAwQ0UwMDA5RDVGMTZEMzQ3RUNGOTcxMEJGMkNFODAxOTA4RDEyQjFBCis6MTAwQ0YwMDBGQzBFNjlBRkUxQjYzRjQ0OTYyODExMEYzRjA3NkJCRTZCCis6MTAwRDAwMDAyOEMwQjMxRkUyRkU4RTY3RjkwNURBODJFQ0JDRjIwNjVBCis6MTAwRDEwMDA5NUM3MkY1N0ZCNUU2QzU4ODVDRjVFOTE4RDZGRUFEOUQyCis6MTAwRDIwMDA3OTc5M0Y5NUMwMEI4MEZENUQ2NUY2QkQ2MkFERkI5MUE1Cis6MTAwRDMwMDAyMzJBNjRFQ0YxRjhGRjA5MzNDQzc0OUFEODc4M0YyNDY1Cis6MTAwRDQwMDA5MEJFM0ZERkYwODlFMjQ0MUUzOUIwREI2NTY5RTdGNzBBCis6MTAwRDUwMDA2RkUwOUNDMDc0ODNGNDM3RjFERkE5NUY4QzRBQkNGODY0Cis6MTAwRDYwMDAwOUYxM0NCNTQyNEJFRkM3RTdGQkE1RjRGRUVCNjhEQ0FECis6MTAwRDcwMDBERDgyQkUzNjFGMEEyRDNFRTA1RkI0MEFFOUU4QjVGODExCis6MTAwRDgwMDBFNDc1OUYwQkZGOTQwNTRDMjc4QjM4Mzk3QzU4QzI3MzUwCis6MTAwRDkwMDA1NEQxQjkwN0VDRjk3NDIzMDM0OEE3MDNDQkVCNTZFQzA1Cis6MTAwREEwMDBEN0U5RkNBM0ZGRjI2RERDQzc5MUUzN0JERUZBMzZCRTI4Cis6MTAwREIwMDAwRUQ0RDY4RDM0RTE3RTBBMEM4RjIxOTMzQzdGRUFDNDk5Cis6MTAwREMwMDAwOTY0MTcwQ0Q1REUzMzRBRDM2RTFEOTU0QzBEREZGQjNECis6MTAwREQwMDBCNUUwMzE5OUNFRTg5NzRDOUE0RjM5QkM5MENGMTNEREVFCis6MTAwREUwMDBFQTk0ODMwOUM5NTg1MDRFRTcxQjkzODBGODUyNjgzODNCCis6MTAwREYwMDBERkZCRjQ5Q0YzRTBGRjQ3ODhDRjJDOUYzOUNGOTE2RTQ3Cis6MTAwRTAwMDA0OEJEREVDOURBQjk3NDdGQzU5MjY3MDVDNzI3RUQ3OTk5Cis6MTAwRTEwMDA5MTJFRTM1RUZEMTZBMkYzRjgzRTE5OTIzOEU1RjgyRTA2Cis6MTAwRTIwMDA1NDhBQUIwMDdFNkI0RTdFN0EzNzMyRkQ5RTQxMkZGM0EzCis6MTAwRTMwMDA2MTIyQTZBNjI1MUMzRjUxQTRERERFNEJGRDMyOEY3MTM5Cis6MTAwRTQwMDA4Qzg5OEFGRkUzQjk0Njk3NURDQkU3QjJEN0ZCNkM4QjAxCis6MTAwRTUwMDBDRUVCOERDNTE2OTQ5MzNFRTJCOEYyRjgwRDczRTVDRjU0Cis6MTAwRTYwMDBCREZGNEI5NUJGRUQ2Njg5MjVFRkEzNDBGM0MzRTQyRDhECis6MTAwRTcwMDAxRUQyMjdCRjM1RTYzQTc5QjI3RTA5QURGNzczMTk4NEUxCis6MTAwRTgwMDBEQ0Y0NDFCQzY4MkU3RDA2QzkxRTdDMjQyQjI3QUEyNUQ0Cis6MTAwRTkwMDA0NzdCMjNFQjdGNENEM0NGMjdDRjZBN0FDQUFDQUNBMzc2Cis6MTAwRUEwMDA3NUEwOEZFOEJFMkNFQURDOUYzREVFNzMxNkJGN0M2OTBGCis6MTAwRUIwMDBDODc4NDNENDY2NENBOEEzNzZDQTk0QjAzREI3RTEwQjdBCis6MTAwRUMwMDBEQTVBN0RGRTc1N0M5MDMzNkYyNUNEMDc3QzZFMkYyNDFBCis6MTAwRUQwMDA5ODU4QzQ1NzMzODdBRjdCMEFFQkVFMjRCRTBDREVBQ0M4Cis6MTAwRUUwMDAwMkNCOUY5QkNFMTdFOEFCNEFFNkE0MTQyMjc5RjgwODAwCis6MTAwRUYwMDBDQjQ3MTJFNUEzMUFFN0YxNDY5RDcyMTg3RjcyMTU0Qzk1Cis6MTAwRjAwMDAwNzA1OUY5MkZDQkNEQjI0M0UyNTVBQkNCMzc2Qzg5RkU0Cis6MTAwRjEwMDA2MzJGNDFERkZEMUIxOUU3RkI2QUI3QUFFRkM3N0Q3RTkwCis6MTAwRjIwMDAzNUJFRURCRURCNDhDRjVGOTAwRDg5REZFQjZDMEZFRjc4Cis6MTAwRjMwMDBCMUQ2ODBEMTA5OTY4NzYyQ0JFRkVDM0M3MUVGNkJDRkQ1Cis6MTAwRjQwMDAxMzhGQkFENUQ3ODk2RUE0QzdCMzc0MTFGNkQ5RjQzNzA1Cis6MTAwRjUwMDA2NkQ3M0JEQzc0N0E3ODI5RDIyMTM1OUM3RkZFQkI0QTY4Cis6MTAwRjYwMDBGNUNGMTFGRDZDM0FDRjM3RUZBQ0ZEREU3OTcyQjI3RDczCis6MTAwRjcwMDA2NUI2M0Y1MjkwMDhDNEYwOUMyMzQxMDM4RDAwQkQzRkVECis6MTAwRjgwMDBDNUVGNjExNUNBNjVGOUZDRkM0NDhBQjIzQ0JDNDZGRjVBCis6MTAwRjkwMDBDNDcxM0RFREE2MTZDM0JFN0MwMkI3QkUxQ0VENjI5MUM2Cis6MTAwRkEwMDA3RUNCN0E3Q0Q1MTE3OTdEMjNEMTdGNkJEMEEzQzkzOUQzCis6MTAwRkIwMDBGQTM1NzBEMDBCOTkyMDExMDJENzQ1Qjk1QjA3RDMxQkM2Cis6MTAwRkMwMDBEN0UzMzhBOEYyQjI5Q0NCOTExNUZDN0M0QjUxNUNGMTc1Cis6MTAwRkQwMDA2MDdCNkQ2QzA5QUY2NzdGREYwM0ZGQTBFQ0MwRTdDQkUwCis6MTAwRkUwMDBCRERBMkIyNDI3QTk4ODQ0M0JDMkU3NDg0MERDRkE1QUUzCis6MTAwRkYwMDAwNUNDMTBCNjVEN0FDQzRGN0VBREZCMDk1QTA4QTAyNTEyCis6MTAxMDAwMDAzQzFFMjFCRjU0RjdEODkxOEEwNEU5NzVEMjlDQUE0MUFECis6MTAxMDEwMDBGRTg0MkQ3NjVERUY5QjhBQjdFMTdDMDMyRkNBQzYxRTQ2Cis6MTAxMDIwMDBFQzg3ODNEQkQ2MDFDQTkxRjQ3MDkwRURDNDAwREE3OUM1Cis6MTAxMDMwMDAxRkYyNUQwOTc2QkU0NUNGRDc5QzA1NjhDRjkxQTc5Njc0Cis6MTAxMDQwMDAxOTNGQjRFN0Q4QkQxOENFOUNEQjZGRjM5NzNCQzY3NzRBCis6MTAxMDUwMDA2ODk1OEVGNzMyOTg0NjA2RTlENDE1NURFNjE4NTdENEEwCis6MTAxMDYwMDBCMDRBQTNGREY2RTgyQjFDQ0Y2RkFFNjk3NjdDMEZFRDdFCis6MTAxMDcwMDBDQUU5NjlFQ0FGQzZGRjg4RUYzMjg4M0VCRkFGMjQ5QzU3Cis6MTAxMDgwMDA4MEZEOUNFRjE1QzhFOUUzRkJCNUIxQTJDODE5NzI0QTBGCis6MTAxMDkwMDAzN0MyOERBNDQ3Qzg5NzYzMDdDOEZFRjRGQUQ5NkYwRDBECis6MTAxMEEwMDA3OEUxODQ1NDBDQTRGQTQ5QTgyNzYyOUJFQ0VGMjU0QjA1Cis6MTAxMEIwMDA1RTkzQjE0QUU2OTMxNDdDRjY3RDk2QzMyN0E2M0Q4NEUxCis6MTAxMEMwMDBCM0UwMzFBODI3RkJGQThGOUE3RUQyODM0M0FFQTYyOURDCis6MTAxMEQwMDBGMUZCMjgwQUJBOEU3QzQyMTg5NjBDRDRGMzczNzM2OTFDCis6MTAxMEUwMDAwOUY5MzkyOUQ5ODNGRDQ1MzgyRTJBNDQxMTlFQTM3MTY3Cis6MTAxMEYwMDA3RUQ4RkQxNTMxMEUxNkQxMzgwRDkyMTVEOEQ3MEMyODkzCis6MTAxMTAwMDAyMEJFNTZFMDNDOUYyREUxRUY5MjNERDY3N0Q3ODhFRjg5Cis6MTAxMTEwMDA5MkM1MjU2MkZFQkE3QUY2QTM5OTBFNkM4RjgyMDEzRUMzCis6MTAxMTIwMDBCNjNGNzEwNDRENjQ0NUZBQjhCRDg2NzY4NUNGMUYwMDgxCis6MTAxMTMwMDBBMzlFRkFENTMwQ0Q3NjBBRDkyRjUxN0YyMTRDNkFDMkIxCis6MTAxMTQwMDBDODY3ODRERDlFNTZDMjY3RkNDMkVFRTdEMzk3QUNERTZCCis6MTAxMTUwMDAyODcwQzZFNjA3MEVCRUJEQzVGQzEyRTlDREVENzczNjk4Cis6MTAxMTYwMDA5QzE3NzcyODNCOUY3MUU4RUQyMzMxNURGOEMzOUQ1REE3Cis6MTAxMTcwMDBBQzI3Q0FDRTY3RjlGRDRCQjFGODFFOUE4RjQ4RUZBRjg2Cis6MTAxMTgwMDA5RjRCRUYzQTM1MDM2NEJGNTIzMTMwOTIzODQ1RUFEMTc0Cis6MTAxMTkwMDBCNUQxQ0RDOERGRTRBMzdFQTMxQUFFMUMzRjJFOTUwRkI4Cis6MTAxMUEwMDA2OUQwMEE4OEFFNzJERkU1RjIwMUQ4Q0YwNzRGRjg4RjE5Cis6MTAxMUIwMDBFRTY3NjEzNEQ5NEZGRTA5N0NGOUY2RTVGMEM1Q0QwRjM1Cis6MTAxMUMwMDBCOEI3MTRBMEY5QzI3NkY0RUI1MjI2MjAyRDY1N0E5OEIwCis6MTAxMUQwMDBEMUZBMkNGREIxOUY1QzY2RDFBQkM0RTI4NzJDREE4Q0NFCis6MTAxMUUwMDA2QzNENTc0QUU2RTcwQkNENTc1QTkyRTVDRjg1RjgxMjhBCis6MTAxMUYwMDA4REUzRkJGQTJDN0ZFNDNFOTM4OTY3RkI2OTFGOUM2NUI2Cis6MTAxMjAwMDA3Q0JCNDQzMjk4NUY0QkU1Qjg4N0ZBODU1MkM2MDIzREY1Cis6MTAxMjEwMDA2OUY2OUIyMUQwOTgzRjU3NDExRkI3MTFFRkY0NjZDNjdFCis6MTAxMjIwMDBDMzNCNzEyMUMyQjMxRkEwOTdDRDg5Qzc1MkMxNTY3RjVFCis6MTAxMjMwMDAyNUQ5RDcxQUM1RjA2MEJGQjZDODEzNEYyMzFEQUY1NkM2Cis6MTAxMjQwMDAyMDQzRTcyQjU3MjA0OUY2MUM5MTAxQ0Y5RjdBMTRCRDBDCis6MTAxMjUwMDAxNUZBOTkxNEJBNjkwRjdEQjdDQjlGNEU0OUQ5RjVFQkIyCis6MTAxMjYwMDAyQ0JCRkRFM0EyNkY2OUQzQjU1OTNBOUYyNkZCQjU1QzUxCis6MTAxMjcwMDBEMEMzQzNGNjY3MzI0M0RGNDdCQkMxMThEMEU3REEzM0M4Cis6MTAxMjgwMDAxQzk3OTQyRDNCNDVFRDI2N0FEMUNDNzQ0Qjg2QjAyRjFDCis6MTAxMjkwMDAwREZGRTA3REMyMTkzNDlGODJGREVGQzUxMkVGOTIzRjMyCis6MTAxMkEwMDAyNTlDMUUyQzYxQkIzNDVENDhDMDdBMkUyRTMwMDk1NzE4Cis6MTAxMkIwMDA2Q0I2RDZFOUJENDk1RjFDQzc3RDZFMUVGNkJENEVGMzA4Cis6MTAxMkMwMDA0MUNBRTdDNDA1RUVFRjc1MDk3MkJGQjdCRjlCOTUyQjA2Cis6MTAxMkQwMDBGN0Y3OTdBOTA3QjBCM0VDQTI3MDQwRUNFMUQ1QzVEM0ZFCis6MTAxMkUwMDA3OTcwRkIyQ0NFMjQzRDI5Q0RGRDRFRjA0OThEMjQxODdDCis6MTAxMkYwMDA3N0E4QTQyRkE1MTc5RUM3RUJDMjJGRjYzQzVFMTQ1Q0ZGCis6MTAxMzAwMDA5QUM3NkJFMTE3REI0RjZEODNCMzVFNjVBOUI1NEZBNDM4Cis6MTAxMzEwMDBENzE2QjBGRjIyNENDRjREMTZGRDNFNERGRTJBNDRGNEE5Cis6MTAxMzIwMDBDNDQwMDVDRkJEMTVFMjJBQzlFRDVGMjE4NDI2MUNCRjRDCis6MTAxMzMwMDA2NERGRDYxMEUzMDU2OEQ3ODgzRTUyRTY2M0YyODdEN0FDCis6MTAxMzQwMDA1RjAyMUQyRDNBNkRDQUJDRTVENUM5MkVFRDJDODIzNzQyCis6MTAxMzUwMDA3MkUzMzdFQkZEQkIxQjNFMjFFMjc0QkZCRkNBOUYxMzk0Cis6MTAxMzYwMDAxRjE2OUVGOEEwOUY4Q0ZBOUVDMkJGN0ZCMTA1QjczRUE0Cis6MTAxMzcwMDBGODkyNkNDODk1RjQ1RUUwRTYwMDA4RkY1RDQ4N0E4QTUyCis6MTAxMzgwMDBGQjJFN0NFMkNDRkZEMEY4NDIxN0FFQTY5OTIxNjc1RTE3Cis6MTAxMzkwMDA0RkUxNDFDNkIzODUyMTU1Njc5Q0VEOTIzMzFCNDdDMzhFCis6MTAxM0EwMDAwNzAyMDcwNzJERUFFNUNDMkIxMTVFQjZFMzFFOUU1NzE4Cis6MTAxM0IwMDA5QUJCRUUwRDE2M0VDNzU3QjEwRjJGMDJDRkJCNzEzQTQ1Cis6MTAxM0MwMDBDQ0UyNzNGMTNFMTg1NDg1OUU2MDlDOTk3MUM0QzE3QTM5Cis6MTAxM0QwMDA1RTNEQjNGNzZEN0Y1N0E2QzYyQjhEREEzQ0RGNUI3Qzk1Cis6MTAxM0UwMDBBOEE1NDAxQ0VEQzJDMjBBNDhFRkM2RkQwRTBGRUY4ODRCCis6MTAxM0YwMDAxNTYyN0ZBQzBDNzQ4QzMwNjFBOEYzOEIxMkUxOERENjMyCis6MTAxNDAwMDA4ODEwQTU3MDkzQzA4NUI0MDREODcxM0NGRTg1RkY0MzU1Cis6MTAxNDEwMDBERjVGODNFRkI3NTUwNDBEREMxOTJDN0MxQjcxMzJDRUQ2Cis6MTAxNDIwMDA3Mzc3ODVERjMwRjE0MTBBQzRGQjY0OTM0N0M0OTM0OTY1Cis6MTAxNDMwMDA3ODk5RjBFODU2OEIzRkRFMjcwNENFNjRERUEwMUUxRUFFCis6MTAxNDQwMDA2QzE1Rjg2QUVCODlDRkFFMjNGRThFOTREQzZBNjQ3MDZCCis6MTAxNDUwMDBEQzU2QjQ0RkE1ODRDNzQ2QkQ4Q0U3MTBENzM5NzBCRkEyCis6MTAxNDYwMDBBRjI5MDcwN0UyRkY3NzFGRjEzQUZBNUUxNzRFM0NEMDJCCis6MTAxNDcwMDA4QTM4MTBFNURCQzY4MUY3QjcwMkVCMTlFRDhCRkNDOUEyCis6MTAxNDgwMDA5NTVBMDc4MjExQjZBNzM3Mjg1MzlFN0NGOTM3OUIxRkMwCis6MTAxNDkwMDAzNkZFN0VCMjRDRDBEOUZCOUVBMDBCMDZDQzNCRThCOTAxCis6MTAxNEEwMDBFRjNEMTE4RkExMDEwRjM2MkMyMEVGMkZFOEU3NkI0MEE1Cis6MTAxNEIwMDBGQUQwRDNGNzg0M0ZDMDJGNzlERjI2RkU0N0ZCNzZFM0NGCis6MTAxNEMwMDA2MTlGMEIwRkJCRjc2QkYzRTE2MTlCM0U4REQwNDhGNDNFCis6MTAxNEQwMDA0MTdDQ0UzOEMxM0U4RkZCMUM0RjYwN0NERThFNDJGMURBCis6MTAxNEUwMDA1NEJGOUZEQjRDQkZDNkVERDNGRDUxNkU0RkY1RUJEMDIzCis6MTAxNEYwMDA4RTAwRUNEOUZFMUE2RTlGRUIzN0Y4RjlGM0ZENEREQzQ4Cis6MTAxNTAwMDBEQTc0OTg0QjFGOTFEN0JDQzZEQUIzNTIzQjE1MjczRjBDCis6MTAxNTEwMDA3QTU1QkI4NzU1NjFFQzVFMEZEM0VEMUNDQTI3Mjk1RjU2Cis6MTAxNTIwMDBDOEEwREMxQjhFRUZGNkE0MjlBNEI3RTM5Rjg1OTZCQzY4Cis6MTAxNTMwMDA1RUVGM0I3QkQyODdFMzQ3Q0FDMUQ4ODNERjJGNkNEQUVCCis6MTAxNTQwMDBDNjcyQjZFNkFDMjdBQjI3NDA3MTRFODEyMzRGMTA4MzlECis6MTAxNTUwMDA1MjQ3QkZDRDdGQjU2MzdDODdCNkQ0RjFCRTI0MzZDRDZDCis6MTAxNTYwMDA3NkFBMkI3QUJENjM5Q0NERTc3RkEyMzgwQkY3MzdENkRFCis6MTAxNTcwMDA3RTVBMjNCQUY2RTgyQjFERTM5NDdCOTFGRjc1MTRGRjg2Cis6MTAxNTgwMDA3Q0NDMzEyRkM4RUIwQ0IyRDMyNTFCOUM3MjE4NzJGMUE2Cis6MTAxNTkwMDA1NUREN0VGRTM4QzhFNkYzREJBRENFNzg2ODNFRkVCQTk4Cis6MTAxNUEwMDBFNUQ1QTY2QkM5MkM1RDQ1NUM5OUEyQjgxMkU5NUFBMjkzCis6MTAxNUIwMDAwOUJBREFFNzFEQjFDRTZCQUZBQjM0ODlGMzVERTlGODU4Cis6MTAxNUMwMDAzMjQ0RjE2NTY1QkVGOEYyNEQ4QkNFMTc4ODJGQkI5RDc2Cis6MTAxNUQwMDBGMUE1OUJBRTE3OEEyRjE3QjQzOUVEQ0FDNUQyNzNEM0M0Cis6MTAxNUUwMDA2MjkxNzcyQjc5NDFFNkI4NDVFRUVFNjMzRjU4M0EyNTk0Cis6MTAxNUYwMDAxQjVENjQxMjJENUM1NjQ0MzYwMEM3NkQ2QTUwRDM4NDVGCis6MTAxNjAwMDAzM0M3NjAzQTRBRkVGQ0IwODQ1NDQ1NzkyQkFEMzVDQUU1Cis6MTAxNjEwMDBDOUNFM0MxNDM2NUVFOTI1RENEODIzRjI4MENGQzQ2RUY3Cis6MTAxNjIwMDA4RjEyRUUxOERDN0QzNDhBQ0UwQTlBREIzQzZDRUY0NkQyCis6MTAxNjMwMDA2MzY3Mzg3RkExRThDMEY5MEI2Q0NENzQxRTdDNjI4RkE0Cis6MTAxNjQwMDBCN0YzOEQ4NzM3QUE2OTA5QzcxRkI2RjI4RDg3N0I2NjA2Cis6MTAxNjUwMDBGMzhENUNERjk4NjgxMEY5QzY4RkI2RTk1NjlFMjkxOTlDCis6MTAxNjYwMDBBNTc4RTVBQjFCMUJDQkQ5NTkyOUQ4QkY4MTg2MUJBQzBDCis6MTAxNjcwMDAyN0ZCMDM1QTg4RTJFOEQ0NDY4RjQ2RTc5MjU3RERGRkZFCis6MTAxNjgwMDAwNTkyOEY0MzUyREZCRTJBOEFERkNBM0M5Qzc3NEQ4NTg0Cis6MTAxNjkwMDAxQkNCMzdFMzM4NzkxM0MyMThFQTZGNkM3Qzk1NkNGNjc0Cis6MTAxNkEwMDA0NDk5QkVBRjhBQkUwRjU3MzFGRDA2NTdERkVFQTc3NUNFCis6MTAxNkIwMDA0NkMyMEI3QTI4M0YzMkQyRTE2MTFFQzk4NDMzNDIzQ0Q0Cis6MTAxNkMwMDA0RkNERjlFMjFFNzcxRDQwMjY4QjRCRjE1QkM0OTM1MTQxCis6MTAxNkQwMDBDOTVGMTFGRUM4QzlGQkRCRkNERjFGNTYzOTNGQkJBNTQ0Cis6MTAxNkUwMDBFREMxQTNDOTJBN0VDQ0Y2NkJBMTVEOTdEOUQ4Q0E3OTgyCis6MTAxNkYwMDBFNjczODQyN0E0RjlFQjMyN0JBRDdDRTdBQ0RGODkzQTUzCis6MTAxNzAwMDBGNzkzNjcxREM2MDU3NjVEODJGRTc0M0I0RjhCN0ZBOUZDCis6MTAxNzEwMDA1QjNBRDNFNDQ3QzcyMURFNERGNjMzMTkzQzdGMUQ0NEM1Cis6MTAxNzIwMDAwOTlFQkYwRTMyNUZERDYzNTc5QkM4QTM3RTk5RjgyRURBCis6MTAxNzMwMDBFQTMzOEU3QTg5RDI2REQ1NDVBQ0Y4RjUzMEU1QzM0OUU4Cis6MTAxNzQwMDAxRTVDNzUxMjdCMUYwM0Q2N0NBOTU5Mzk3MkQ1NEQ1Njg0Cis6MTAxNzUwMDBBQkQ2N0MwNkU0Q0I1RkZGQTlGNTkzRkJEQjQ0QkRFNjhCCis6MTAxNzYwMDA1MkVCMjZERjZEMDNCMTVGMkJERkVEQjVGODdGOUQzQ0JCCis6MTAxNzcwMDBCOTgzRTRGMUNGOURFRkZFNkVEQjk1Q0Q3N0NGQUQxMzRFCis6MTAxNzgwMDBBNTU5NUZFMEM0RDkzNzU4QUY5NzJEQjBGMENCRjlFQjJFCis6MTAxNzkwMDA0MEZCMDlFODIzRkZDNjU3MjAyRUE1RkE4N0Q1NEZERTY4Cis6MTAxN0EwMDAyMEU2NzVENzg1MDI1NjFFRTU4NzZENEI0NUJDNDVGNjhDCis6MTAxN0IwMDA4NDk4QUIxODhCODlBRTQxRTUzQjQ5MERDRjUxMTAxQzg1Cis6MTAxN0MwMDA4MzMwQjZCRUM4RTYyNEI1MkQ4Qjc1QUUwRjhEMkZGM0QyCis6MTAxN0QwMDBCMEJGMUEyRjRBMUMxREE0RkQyRjBCRTZENThCNTcyRDI5Cis6MTAxN0UwMDBGQjM3NkNENTZGNDg4MDNEQTQ2RjkyQUQxQzkwRjAyMDA0Cis6MTAxN0YwMDA5RjI2NDBGMEY5RURCNjMwOEY1N0I0RDFBNkJCNTA2RTlFCis6MTAxODAwMDBERTI0NzkyOEUzRjNFNEFERkY5QzY5MTNGNTlGOUNGOThFCis6MTAxODEwMDBCRjQxNzI5QUIyMjZBNzc5MzZFMzNDRkY2NUM5MjM5MDhGCis6MTAxODIwMDBFMzU4NDBDMThFNThDRkFGOEYzNjExMkVGODVEOUIyNkZFCis6MTAxODMwMDBERTJCMkIwQ0QyODdGMTcwRkVGNTdFNjc5RDA3MjgxNUY1Cis6MTAxODQwMDBEMzk4QzU0NzBCMzc4ODc5QzAyRkJFM0YyQzlERUQzREZGCis6MTAxODUwMDBCRDhBRjlDQUZBNDRGQkEwRjdFRUZBOTc3QkZFNDA4REU5Cis6MTAxODYwMDAzM0JFNTEyQjlDRTMzRjk4M0Q4NzMzMkUzQTM0NEY3RDU2Cis6MTAxODcwMDA2QzUxQkI5MEQ3OTZDNTQyQ0U0ODNFRjZFNDkxMEZCNzY3Cis6MTAxODgwMDBCRUFCOTRGN0E0NzhBQTNENkNBRDI3RUM0RTUwOTk2QTk0Cis6MTAxODkwMDBBNTc4Mjc1ODBCMDZENzE0OTU5MzdDREVGODkzNTUyNzI3Cis6MTAxOEEwMDBBNjU3OTE5RDBGMTkxNDA3Mjk3RTM0OTVGNUQ5MzhEMTgzCis6MTAxOEIwMDA3REVFMEJDNTc5OEEwMjQ5NkZGRERDNzgwRkU3MzU4QjI5Cis6MTAxOEMwMDBFQjg1OUY0OUU2Q0M3NzREQkI5MDEzMzkzNzFFQUNBNDBFCis6MTAxOEQwMDA3MDQ0QkY4NUVCNzg1NDA3QTRGRTJFNUY2RjNFM0Y1RERBCis6MTAxOEUwMDBERDc2RkVCQUNFOTEzOEM2MTExNEE0M0U3QzcwREYxNkE4Cis6MTAxOEYwMDBFQ0JGQUI3OTM0MUY4RkQxRjNENjc1MzRBQjNGNUJEN0Q4Cis6MTAxOTAwMDA4OTVGNUM1RDY3QjRCREE0QTdFQTUyRUEzQUYzQ0MzQkI5Cis6MTAxOTEwMDBFQjhGRTdENjc1REFEQkYxOUM2MzQxNTE1Rjk5QURFQjU0Cis6MTAxOTIwMDBEQzFBQjlBODdDMEU1ODdFQjlDNEIyQ0I0NTNENTYxQzEyCis6MTAxOTMwMDBCMTUzRTIzOEUyRTk4NjdGM0ZCMDlDRTRBQ0MxQ0I3MkEwCis6MTAxOTQwMDAwMDA3MjcyMDU3NEZENjZERDBCRjU2NEE3RUU2NTUxRjU5Cis6MTAxOTUwMDA1NDBCQkI2NkQyN0M3NjVDNkNEMzRGQjVFNjZGN0RGMEUyCis6MTAxOTYwMDAwNTg1QzY4Rjk3N0IxQTc5M0VDOEY4M0M1Q0VDNEVBQTc5Cis6MTAxOTcwMDA1NjJCNTNCQjVDQ0RDOEM1MzQ2RjA5NTg3NUY0OEM0NEU1Cis6MTAxOTgwMDBDRjYzNDhBQ0RDRjg2MDY0RTZBNzZEQzU5NDI3MDk4Mjk0Cis6MTAxOTkwMDA0MTI2NjgyNEE2RUQyRUE2N0Y1MDE1ODhGMDRFQTU5RTAwCis6MTAxOUEwMDAyNjdCREJFNjJGNzREOEZGOTExRTU1RDhENzZBNzE1RjZFCis6MTAxOUIwMDA2NkZDQTRGRUI1QUQzODdFNjg2NzgwNzFEM0ExMEE4RjNFCis6MTAxOUMwMDBEMEFGQTRDNEY1RTQwRUNEMTlGNzhDNEYyRTExNzhFQ0VFCis6MTAxOUQwMDBBMEQ3QTA3QjIyQzcyN0M1RjgyREIxQzZCNENDQjhEQkYxCis6MTAxOUUwMDAxOTE3RjVFOENFQjg2ODRCNzlGRDJCODQxNzYxRDBDQjc5Cis6MTAxOUYwMDBGOTc4Q0RDMkI1MzdENzM4RTNBNEEyQ0FCRUU3MDhBN0E1Cis6MTAxQTAwMDA2QzFBMTQ3ODc4NkZCNDY0QzExNkI0N0ZCRjZBRDcxRDlFCis6MTAxQTEwMDA3MUUyRTZDMUJCQjk2RTM0QTgwMkQ3NTM0NzM2QUFBQzBGCis6MTAxQTIwMDAxRjIzREVENzhGNkM2MURDNThDMDc0OUNEOEE4OTYyNzIyCis6MTAxQTMwMDA3MkY0QTVCNEMzNjdERDhCMTBGODAzRTE2NTYyMzJDRkExCis6MTAxQTQwMDBGQkQyMEU2MTc3NTBCMEQ5OEZEQkYyRjIxNzlGMTE3NDgxCis6MTAxQTUwMDAwRTU1NDA1QTI3MUNEN0IzMjM0MzcxRTU3ODA1OUUwOURDCis6MTAxQTYwMDBERjBGNDZBQjdBNEVEMkZBMkZDQjQwRTc3NENCNjE2NURECis6MTAxQTcwMDA0NzM1RUJFOUFDM0Y2REYyMzhFOEU0RjVDNUZCNjg3RTJECis6MTAxQTgwMDBCODE5NzRCMjZCRUREREQ4QTczQ0MwMDYxNTI4M0ZFMDRECis6MTAxQTkwMDA4QkZFMkQ5RkI3MDRGQjAxRUNGQkJCNDc5MzBBRjZGREMxCis6MTAxQUEwMDA1NTg5OTU4NDhCOUZEOTc1Qzc3MDJDNDJGRTRFRThCNzM3Cis6MTAxQUIwMDA2RkMzQjZGODI3NjhGQzJBMkYwNDY4N0ZBMDRCNTFEQTYxCis6MTAxQUMwMDA1RjUyREM2NzcwRUJDM0RFRDRGN0RCODk0RjdCMEQ4OTk3Cis6MTAxQUQwMDA1OUI0QTk2N0ZENzZCRUI3MTQyOTYwREMzNEVBOEQ2RjZFCis6MTAxQUUwMDA2NjdCNzQ5QjVGNEJCMjBGOUNFNjM4QzJGQjE1MUY5MDYwCis6MTAxQUYwMDBEQzRERUNGQTREMTlFMUVGMUZCNThCQkE2NjQwNzdDNkE1Cis6MTAxQjAwMDBENzdFMTg2NUJGQkREQTlDREE0MERGQUQ2RTUyQTlFMjIwCis6MTAxQjEwMDAwMTRGMzc5RjYxQkU0RDM0RjgwQzFGRUU2M0EyNTk2MjJFCis6MTAxQjIwMDAzQUZGQTFDMTlCQTY3NTlFNTJBNzY0NUFGN0E5M0ZFMDUwCis6MTAxQjMwMDBEQTk1RjlGNDNCQkY1RUQ5N0FFNDFFM0ZEMkI0REU0RkFBCis6MTAxQjQwMDA3MkIxMTdBNjZFMjVGQTI0Njc0NDlFQ0EzRDJFREUyMTg3Cis6MTAxQjUwMDBGQ0Q1REVENDZEMzUwQUU3QjM1NEFFQjcyQjY3MERCM0IxCis6MTAxQjYwMDAxODY3MEZDRkM0RkY5OTcyQUZDOTc2NDVDNDQ5RTU5RTg3Cis6MTAxQjcwMDBBNDg0RjMwREY1ODg3QjE5NDM0NTg5NjE5MkU3MjE5NDhDCis6MTAxQjgwMDA3QjhFOTMyMkUyM0VEMjc4NzlDNEQ4OUZCM0RFNzhGMzdECis6MTAxQjkwMDBFRDM1NjRDRjVFNkMwODMwQkUxRjM4RjUzNzc3MTFCRTY3Cis6MTAxQkEwMDA2Rjk1REZGRUVFQzMxNDU3NTVBOENDQ0YyMTZGREZBQjg2Cis6MTAxQkIwMDAxNDA3MjUxQjAyQkNERjUzOEI1NEYwOTMzRDg4RENGNUUyCis6MTAxQkMwMDAwMEM1RDk3MDdDMDNFNENBRUI0NEI3RDBEMzg5MEFBMTFECis6MTAxQkQwMDBGN0QyQzMxQjM4MEUxODk3NjRBNkIzNTk3NjRDMjIzQzMzCis6MTAxQkUwMDBFNkVCQjZGMzRFMjJDRjE0QjNDQ0Q5QzQ4NjQ3MzgwRkY4Cis6MTAxQkYwMDA3NTU1OEZDOEEzQzZCQUFEN0M5MzFDNENCMjVDREUxODc5Cis6MTAxQzAwMDA3ODgwRjRERjU0QkM4RUY4NzhDRDU5NjdCQzdDOTUyQjc2Cis6MTAxQzEwMDA1RTc2RTdBM0ZFQjdERENBNDc1ODc5Mjc1QjJFNDNENjI5Cis6MTAxQzIwMDA5ODg5MjZDQjRFQUZGMkE1ODUxQ0Y2OTU2QkI1NzNGNTVBCis6MTAxQzMwMDBGQkRGMkNGQzNDRDVFRkU3N0I2NDNGRUREN0I4MUYzMkQwCis6MTAxQzQwMDBERkQ5NUQ4QUYzQkNEQzFGRTVFNzdGQjlGQUE4OTRGQjE2Cis6MTAxQzUwMDBEREM4QUFEQkZDM0FEQjkzRTkyOENERUJCNjIzNkVCOUVECis6MTAxQzYwMDBEOERGNUVFMEYwMjdGNjNFOEI5QTVCQzVGREJCQjM2QzE4Cis6MTAxQzcwMDA5MTYxNEQ3MEJBOEQ3RDIzNEMwNTczRjE3RUE2NUZEQ0JBCis6MTAxQzgwMDA3MzdCREFEQUU3MjlEQUE3OEZGMjY0NjI3RkNGRjVFQkFDCis6MTAxQzkwMDBEQzNFREY1RkMzRURDNjBFMTBGNTAwREIzRTVDODNGNjc1Cis6MTAxQ0EwMDAwMUU5RDA1RTIxRkE2NDBGODhGRjI1OTFCQjM4NEZFNjI5Cis6MTAxQ0IwMDA4QjJBMUFFOUJCQkY2MjM0MjNFNUQ4ODc4OUEyQkU1RkFECis6MTAxQ0MwMDBEQzRENzZCRjJDQzhGMkU4M0VENzlBMEU0RkRFNzM2RDFFCis6MTAxQ0QwMDA2QURFQzE3NkU3MUNBRTQzRjQ0NzNCQjM5REVEMTBEQUY0Cis6MTAxQ0UwMDAwNTVFNzc4MzdBMjdFRkMzNDRCQkM0NzZBMUVGNkI3Nzk5Cis6MTAxQ0YwMDBCMDVERjAwMkM5QjlEQjBFOTQyNDg1N0UyNzc0OTFCRkQ0Cis6MTAxRDAwMDBCM0VGMDlDRERBMDU1QzI3OERFQjNDOEQ3NjlERkE0MzY4Cis6MTAxRDEwMDA2ODA3Njg5REExRTZEN0ZGOUFENkZEQzNGQjA1N0MyRjE3Cis6MTAxRDIwMDA2QTYyRTMyQjZDMTc1RTNDODczNkZCMEFEQTA1NUIwRkIxCis6MTAxRDMwMDA1RjNCMTUzQjk2MUJDRjY3RjlCQ0ZFOEUxMzgyMUUxQUM0Cis6MTAxRDQwMDAwOEJBRjZDNkYzQzQ4OTk3Q0E2NzMwMkYwRUM3QTQ5NUEwCis6MTAxRDUwMDBFOTNCNDVERDUxNjUzQUNDNUI3NzRDN0EwQzRBMEIwQzdDCis6MTAxRDYwMDA0QzJBREQ1NkREMTFBOEVFNjhENzFGNzNFQThFMDVDRTJBCis6MTAxRDcwMDBCQUEzOUE0RTMxQkU0OTVCNzVDN0RCRDc4QUJBQTM1QTVDCis6MTAxRDgwMDAzMDFEQ0NFRUMzQUUzNzBFRDJBM0YyNkM3REZFQUU4RTBDCis6MTAxRDkwMDBDNEFFOEU4NjZDOUQ1MTk3NDQxREZDQTU5OEY5NjU3QTVBCis6MTAxREEwMDAwRTkxMTJGNkZGRUUzQUE1NUQ4RjQ0NzgyNzI1NzJFQTcwCis6MTAxREIwMDA5Qjc1RjhEQzVGOTJBRDdGQjlFQjk5RjZCRDhDM0E3NUY3Cis6MTAxREMwMDBGQUQ4MDFBNENCQzA5RDdFQzYwRkY2RkUwNjFFRkRFODI0Cis6MTAxREQwMDBBQjg5NDhGNjNFODA1REVGQjRFQjk5NzZERDEzRjczREI1Cis6MTAxREUwMDA5NkJCNkY3ODAyRDhFRUMwNjNGRUEzRTRERkRDRkJGRDk4Cis6MTAxREYwMDA1RTJDNzE3RjQ3NTk5RTdENUY2NDdENzExRDU4RjMyMzcyCis6MTAxRTAwMDBFRTIyN0Q3RUNEQTJBMzNERUU0MTRCMUY5N0FCMjJCRkJDCis6MTAxRTEwMDAwRDIxOTVFMzlERDYwNzgzMjAxM0NFMkU1MjhGOTE1RTIwCis6MTAxRTIwMDA2Qzg2RTkwRUEyRUY0MDU4RTBCQ0Q0MjEyRkRCQzlFMzU5Cis6MTAxRTMwMDAxRDNBRjNBRjRDMzVGOTNFNDREOTk3MDNDNjZFOUMyNjQ0Cis6MTAxRTQwMDA3NTUyMEI1MUZFQTlBN0REM0NERUMxRkIxOEJENzUzREU3Cis6MTAxRTUwMDBFRDAzNzEzQkQ5QkI1RjU3REYxN0UxN0EzRkREN0IyQThBCis6MTAxRTYwMDBBNkY4Q0Y1ODRDNzk5MDE3M0FGMkRGNTc2QTU5N0M3NjJBCis6MTAxRTcwMDAzREFGNUJFNDAxOEFDRjUyMDFFMzM5QkU1N0ZDQTRDMkY3Cis6MTAxRTgwMDBGM0Y1RTAxNDY2M0RERjVGNkE1NzRCNjgxRTcxM0Y3NURFCis6MTAxRTkwMDAyMDc4OUFGOUQ1NTJFRDVCQzE3OUJEQTJGQzcxRTBCMzBGCis6MTAxRUEwMDAxRDIyNkU1RDhCNzNBOTM4Q0Y2NzVBMTNERkE3N0Q1MzUwCis6MTAxRUIwMDBBRTM0Q0E3MjJDRTJCQjE3Qzg0RTBBRkI3NUFGQTczMTBECis6MTAxRUMwMDA5QjA3MkI5NjEzMkZEMDc4MzgyRTI5RTQxRjdEOTZEQ0E0Cis6MTAxRUQwMDBEODcxRTIzQkFERTY4QkM0NzdFNDg3NDlFQkRCRjc4MDUyCis6MTAxRUUwMDBFQ0Y1NUZCMkY4OTBFQzMwN0Y0QUUzNUVCN0Q2QTlEMzQ5Cis6MTAxRUYwMDA5MjMxRDJDM0JBMDRDQTgzQzRGQUUzQUFDMzBCQjk3MDNECis6MTAxRjAwMDBDQkFCMkQ2RkIzNzU3ODRCMEUyNTRERDQ2QjUxQUU1RUI4Cis6MTAxRjEwMDBFN0ZEM0VBNTlGRjQ0ODU0NkY0RjFDM0Q0MERGNUU2NkQxCis6MTAxRjIwMDBCREZCRUEzNkYzMkREQTc3NzE2QkZDM0Y2OURFNUZFRkJDCis6MTAxRjMwMDBCQTgzRUYwNTVGRUMzRDhFOTZDNTdENTFBQUUzMEYwNTkwCis6MTAxRjQwMDAwNDZFN0UyODY2MzhFQ0REQTI0RUMxOUY0NTlEMDIyRkFGCis6MTAxRjUwMDA1RDhGMzIzM0M1Rjc0QjBEQkVGNzBEQjA5RDcxQjQ2RDdCCis6MTAxRjYwMDA5RjQ2RkIxMzhGQkY1OTlERkQzRUQ1MEY5MzU0MEY5QThCCis6MTAxRjcwMDA2RjFGREU3RDNCMzhBRjNCNTBEMUVBMjdGQjgzRjZBREM4Cis6MTAxRjgwMDA5OEZBNDMxNTY2MzQ3NzFGQTkyMjIxRTdDOTQ1MjI2RkM1Cis6MTAxRjkwMDA0MUY5QjQ2NENFN0RGMjkyNEU5OUNGRDM1NjAxMTk5Mjk1Cis6MTAxRkEwMDAxRDVGNTBENEREN0NBOEI4M0FGQTFGOUZEOUM0Rjc4QkM3Cis6MTAxRkIwMDBGMUY5MjRBNTE4QUVFQUQ0NDU1QzFFMzFDMEE0NzhCMzZCCis6MTAxRkMwMDAyMjBFQTRERjNFMkRGQjNERDU1MURCMkFGQUY4QkVFNUZCCis6MTAxRkQwMDA3Q0YzQzg1MUZCRkIwNDdGN0Y1M0E3QzZGM0FBMTE4Rjg0Cis6MTAxRkUwMDAyMzBGNzAyMUJBQjlFOTMyNDg3NEFCOUU5RjZFRUE0NTVGCis6MTAxRkYwMDBEMzRERTg5RDlCNUU4RDE2QkQ5RTA5N0Y5MUNGMDcxRjM3Cis6MTAyMDAwMDBCNEIxOUVGOTM0M0MyN0I2QUIzQjg1N0Q5MTgzMjYyNDQxCis6MTAyMDEwMDA4QUM4NDZDNTExNDE1MjlFQkQwRkE4MEU2REQzNTlENjMwCis6MTAyMDIwMDAwNDlENjVBRDhGQkZGMzU1MTg5MEI4ODFFODkyNjBCQUYyCis6MTAyMDMwMDBCOEU5ODA3NjAyQzg0RUZDRjBEMTIzMTFDMkE3MkREODkyCis6MTAyMDQwMDA4RjBBRkIwMTNFNkNCRkRFMjFGODYyRUJFOTNBRjg0OUVBCis6MTAyMDUwMDA1MEU0QkY5REZFQzI2RDRGRURGNjIxMkJGRkVDN0UyRUFFCis6MTAyMDYwMDA3NTA1ODRGREQwQzE0MUY3MjJFQkY3MEJDNzg2RUIxOTRDCis6MTAyMDcwMDAxRkEwRkY0Q0QyQkQ5OENFRjJFQTAyRUE1RkU5M0FBMjc1Cis6MTAyMDgwMDBCQjdFRThBRTEzQkFFQjgzNTlCOTMxRkRCNENGNzdCNTU3Cis6MTAyMDkwMDBEM0M5OEZFNzkxMTdCQjNENjBFOURCNjBCRjNGQUZERTdGCis6MTAyMEEwMDAxRDQwN0QyN0ZFMEQzNTlCNDlBQTFCRUQwRDRGNDc1OTVECis6MTAyMEIwMDA2RTRFQkVDNUI4NTg3OTQxMzYwODVGMkE4QUUwNzNFNzhDCis6MTAyMEMwMDBBMjY5RTY2MzU3OTMwOTU0NkYzQUQwREZGQjlEREM3OTMwCis6MTAyMEQwMDBCRkRFOUFGODRBMjdDQTQ5QTEzNjY5RDIzQzQxQzgyNEQyCis6MTAyMEUwMDBDOUZGQUMyRDM1RkJGMkUxQTYyMUNCOEVCQ0QzMUFERkE0Cis6MTAyMEYwMDA0RERGRDFCNTc1RTJGRjlCMzE3MzBGRjUyRkQ2NkVDRDU1Cis6MTAyMTAwMDBBNzRGOEE0REJCNEJENkE3RDM0MjlGOUE3NkIwM0U4RDQwCis6MTAyMTEwMDA1NEY0MzFDRTFBRjk4OTRDNDgyQThCMjMyRDdEMUE2OTQzCis6MTAyMTIwMDAzRUMzRkE2RUVCNTVEQUI2M0Y0RDQyMkYyODhGNDBGRTg0Cis6MTAyMTMwMDAzQjU0NjFCMkRERjg5NkE1NEYwQUVBMDlFOTkzQ0ZEMjg0Cis6MTAyMTQwMDBBNzkwOTYxRDRGRjlGMTM2QTIzMzNFNTcyQUE2RjlCQjQ4Cis6MTAyMTUwMDA1MDkzQTU3RkE0NEY0MUJBM0YwQzhDMDM4NjUwRUYyOEMzCis6MTAyMTYwMDAyRkUyRDZBRjk2MkFFMTM3OUY2ODREM0NENDQ5Rjg2MkZBCis6MTAyMTcwMDBEMTdBQ0VDQjBGNTVGQ0JFOTRGMThCMjVGRjU5QkM1QkI5Cis6MTAyMTgwMDBDRkZFRkNEQ0IwQzcyMDdEQTgyMzAwNUQ5RkQ1MDNGQkZDCis6MTAyMTkwMDBEQ0FCNjc2NEM4MjA2QkQ2Q0M0OERDREUzNDUzQzg2RDNBCis6MTAyMUEwMDBDQjRDODA1QjczQTY5NERCRDg0Qzk4REJENjk5QUJCOTRCCis6MTAyMUIwMDA2RDlCMjlFN0I2N0QwNkY1NjAyNUVBQzM0QzI1Qjc5REUyCis6MTAyMUMwMDAzM0Q3NzNEQjM1QjM4Q0RCRUU5OTk1M0NBRTY3NjYwNTkwCis6MTAyMUQwMDBCNzZCNjczRUM2RURDRDMzQ0Q2MjlEMUE3MUFFM0NGQTRBCis6MTAyMUUwMDA0MDY1QjAyQkEwMEY0NjEyOEE0ODBGM0VGMzJBREI3N0RBCis6MTAyMUYwMDA0REU1M0I0QUE5NzAyM0Q3ODk3Q0NBMzRFQkMzQjEyNjhECis6MTAyMjAwMDA2MUVGQkI4MjgyNEY2RTdENzhBNzM1RjFBQjdDRkEzMEVGCis6MTAyMjEwMDA4QjZGMTVEMDg4RkUyQTU4N0YyRUZDODBGOEU3MzdGNEE0Cis6MTAyMjIwMDBCRDhEN0JENUE4Qzk3Mjg2RjhFNDBDRjFGMzcyNzFDMjNBCis6MTAyMjMwMDAyQ0NFNUNBQzMyMUVCNTcxRTZDODIyQzQ5OTk1NTk5QzZGCis6MTAyMjQwMDAzOUQ0MkNFMkIyRDQyMTFGQzc2RjVCMjQ3MUJGRUNFQUYyCis6MTAyMjUwMDBCNkM0N0ZCMzdFODJDODEzMjU2RUY1NkI4NDlCNTNFMUIxCis6MTAyMjYwMDBDRTY4OTBGMjdBN0I2NUEwN0MwMUUyOTAwRjc4OUY0QTVECis6MTAyMjcwMDA1Q0RDNjdCRDQ4N0Q3RTMzMjZFQ0JFM0RCRTBFNEU3QkVBCis6MTAyMjgwMDBGQTJFMDFDN0ZDOUFGRUQ5M0NCRjVEMjhCOTVDM0ZFQjMyCis6MTAyMjkwMDA2RDEzNzY0MTEzNzYyMTU1RDEzN0NDNzU2OTk3NURCMEIyCis6MTAyMkEwMDBGRDJDRDJDMzYxMTc5Njc2NTk3NkMxRDJGMzkyMEFFMTFBCis6MTAyMkIwMDAyRjRCQzgyRTIwN0Q5Njc1RDk3NkMxRTk2NzE1MUI4N0VGCis6MTAyMkMwMDA3NERCMzhDNEIyMEJEREUyM0JDNEVEMEUzRjhCRUNGNkExCis6MTAyMkQwMDA0MzBFMkU0NjM5NUFERTk1MDc4N0IwM0ZDRkYxNzMwMzgwCis6MTAyMkUwMDA1NUQ1MzFGQTJENDFGODJDQzQ0ODNDNDMzM0ZBNUEyM0QyCis6MTAyMkYwMDA4RkRGNDk2OUY1QUMwNzI3OTUzNkM4Q0RBRjVDQjI5RTM0Cis6MTAyMzAwMDA4NTZEQkY2M0IyREY3MThGQjNGNTZERTg2NDhGMzhBNzU5Cis6MTAyMzEwMDBFNTg3NEVFMkY5Q0QxQzdERUJEMjg0M0Y0MkZGNzMzMzVCCis6MTAyMzIwMDA5REQzQUQ2RjJEOEJDRDQ0M0NDRjNFM0ZEOTI1RjBGRUU0Cis6MTAyMzMwMDA4RkQ2NThCODE3NzFBNTExNjQ3QzlGMTczNzdDOTJGODE3Cis6MTAyMzQwMDBENzIwN0VBN0YxMThEQTlGOEVFRTY0NEFEMTU5Q0YzRjhECis6MTAyMzUwMDA0OUVCQUU2RTlGOTIyOTBGNzQ1M0QzRThDQjU0MTI0MUQwCis6MTAyMzYwMDAzREZENTQ1N0MzRTVFQjY5NTNBQjU1RUZEQjU5MkEyRUJFCis6MTAyMzcwMDAzQjVCRUQ4NUU0REZDNjQ1QjYxRUI4QzczRDU0NjlGNjQ0Cis6MTAyMzgwMDBFNkEzQzdCMzE2M0QwNjg2M0QzRDc0RTFDRjk2OEI5MzE5Cis6MTAyMzkwMDBDQTUyQzYzRjc5RUNBRDY5NUMxMTdCN0I3MUY4RTMyNENFCis6MTAyM0EwMDBGQTQxRTJGQjc5RjBDNzgxN0NGQzlGMEY3RjhDNzdDREVGCis6MTAyM0IwMDBFMjhGMzFFMjUzNEJBREMwMUZDRjc2QzE3OUUzOUJDQkE3Cis6MTAyM0MwMDBDNjE1QjFEMzRDQjdDQkM1MTUwRjc2OUQxRjU3N0NBNzRCCis6MTAyM0QwMDA0QkQ4NEQ0NTlCNjZGQjExQkE0QzVDRTFCNjEzODgxRjg4Cis6MTAyM0UwMDBGRTk1RTk2MzA4QkY2QkZGREU4NDJGNTBFNkY4MkZCNDNCCis6MTAyM0YwMDAzMzhGRDMzOEMyMEQ3NDc5RUM1OEIwMzUyOUIxMUVDNDZGCis6MTAyNDAwMDA5RkE0RTdBM0U2MTI5NkEzMkJBNTBGODgxMzdGRDA5NTcwCis6MTAyNDEwMDBEM0JGOTA1RTVDRjRCOEM5OEQ5QzA3QjRFQjk5N0YwQzc4Cis6MTAyNDIwMDA4NEVBMjgzRkIyRDMyRkRBMkYxNTg0OEU1MTNCRDYyRjYyCis6MTAyNDMwMDBGMkQwN0YwQzJDNEU1M0RFNkNDQzBCNUMzRjE4OTQwQTEwCis6MTAyNDQwMDA4QzYzMjIzRkJBOUM3RjVGMDM3RDM3NTI3QkE2Q0JBRTY1Cis6MTAyNDUwMDBDQkZGOURBMzVFMUFENkI2M0RGRTY2NjlCRUZEODhGQjI2Cis6MTAyNDYwMDBCRDk0OEFGRjkwRUY4MTU3Njg5QzNGQjdFODQxNjkyMDhGCis6MTAyNDcwMDBGNkNGRDUwNThDRkYwMDYxNEI1MzhFREQ0Rjc1QUMxMzQ1Cis6MTAyNDgwMDA3MTcyQTU5RkVCNzkzMjI4NjcyODFGM0Y0QzZCRjFGRUQ0Cis6MTAyNDkwMDA3QUI5OEUxOUIwRkMyMTI4NDlGREUzQkM1RjkxMDdCNURDCis6MTAyNEEwMDA3RkY3Qjc2RkY1RkE2MjcxMDk3OTNCOEZCN0U1N0Y1RjA4Cis6MTAyNEIwMDA3MEQ0QUZENTNBRjREREYxQkI2RTc3MkJBRjM4QTVCNTRDCis6MTAyNEMwMDBFMTdFQzc3NDg1RUJBRTA3OEQ0ODgwRUIyNjE1MjI3QjM1Cis6MTAyNEQwMDBFRTVGRTQ4OUE3RjNFOEU5QjVEREIzRjcyMjc4NUY2MTQxCis6MTAyNEUwMDA2QjVGQkUwRTExQUZDREI3REVGRTdFRTczREFCODJEQThECis6MTAyNEYwMDBCODQ5RkVDNDVGRDkxNzI3QkFGOTE3NDUyNENBQUJDRTJECis6MTAyNTAwMDBEMkJCNUJCMkVFNjkxODk5MTZBNEY3QjBBNTg3MDUzNTYyCis6MTAyNTEwMDA5MzE5MEZEMTM5QkM2RDI1RDFENjVGOTM4NjMzMzQ0RkQzCis6MTAyNTIwMDBFRDI0QkM0MUZFQTJEMkRGOUI2RkRGRDc1OUZCMUVGNjI0Cis6MTAyNTMwMDAyNkUzODQ5Mzg2MkIxNUFFNUYwRTU3RTZGNzJGMjVERDM1Cis6MTAyNTQwMDBDMkZFRkExN0VERTBGMUIwNDhFMUZBQjM3QjlDRDIyRDYwCis6MTAyNTUwMDBFNDY4OUZEQUM3NzU4Q0ExNDVGN0YzN0RCNzIxRkEyMUFFCis6MTAyNTYwMDBDRDQ3RDFFRUZENzBFNjgxRERGOEZDNTBGRkY2QzdERjA4Cis6MTAyNTcwMDBGNDkyOUMyNkI4REQ3N0VEN0U4REVFNzExRUFBRjc2ODg5Cis6MTAyNTgwMDA5NDg3MEJGQjMzN0VGQTdENjY3OEI1Qzg3Mzk2QjRFMzA3Cis6MTAyNTkwMDBCOERDNzg1NUFFMDg5MDlEMERBREMyNzk3MkUyRDAzMUFECis6MTAyNUEwMDBEMDAyQjRFRUJFOTA2RDFGQTdGREMyM0UwQTc5MkFCMkRBCis6MTAyNUIwMDBDNjhFQUMxMjc1QTk5MTc1NzZGRTVGRjAyRkZCN0U3Q0ZFCis6MTAyNUMwMDBCQkI4MkZBN0VBQzA3OTY4NTE5N0UyRDQ5RTRFRjc2NzRGCis6MTAyNUQwMDBFQkMzNzRBRTMyNERENEEzMEU1OUYyMzU2OEU1RDlEREE0Cis6MTAyNUUwMDA3NDM5QjQ3ODhBRkRDOUExMzU1M0JERTQzRjQyOUFERkZFCis6MTAyNUYwMDBFODI2QjkzRUVFRENEN0RFRTY2OTA3REUxODY5Mzg2REZECis6MTAyNjAwMDBFRERGQkQzRjIxRjdDQUQzNkYwOTNCNjlFMUZFOTBGMUQxCis6MTAyNjEwMDA3QkM2NTlGNjNEQUVBRUQ1NDIwRjhCQUQ3QkY0QzU5MTZFCis6MTAyNjIwMDBCODQ5RjNFREJFRjZCNzQ5QUExMzFEMkVCN0VGMTY3Q0Q1Cis6MTAyNjMwMDBERTc5MEYwM0E2MTkxNzg3NTY1Qjc1MzlGOTZEQkVGRjUyCis6MTAyNjQwMDAwQkI3OEE3QjEyRjYzRDZGMzVBMjNBRjIwMkE1QUVGQkJDCis6MTAyNjUwMDA1OTIxNTcxRkU0MERFN0JEQ0ZCNkYzOTc0NzlGM0Y5NTJDCis6MTAyNjYwMDBDM0NGQ0Y3NzNCRUY4MzVGRThGQjNGRjZBNzlGM0Y4NTY0Cis6MTAyNjcwMDA3RTZFNkNENUY5RjVDRkU2RDNFMUZFMjY2RTZEMzlCNEVBCis6MTAyNjgwMDBFNTMyNEM0N0FDOUZGRkZCQjE3MDNDNkZCREU1MTE0QjkxCis6MTAyNjkwMDA0RkRDRjJFQTk2RDM2MjVGOUNGREZFRTgxQUU3M0NGNzU2Cis6MTAyNkEwMDA1OTdBN0U5RjM1OEZCQTE4Q0EwOTBGOEQ4Njg1NUU4RTNFCis6MTAyNkIwMDAwNkEwRjc5MTNDRTc3QUFDNUJFNUYxNTlCOTc3RTI4Mjg1Cis6MTAyNkMwMDBBMkNCQzUwNTJCNUFBREI4QTI4NEY1NkQ2QzU1RUI3MzQyCis6MTAyNkQwMDAyNDM3RUY5MTVFRTREODI3NzdERURDQzYwNTRBOEZDMDQ5Cis6MTAyNkUwMDBBNUNGODQ1NTg5RkNCQTE2OUM2NkJDM0NFQkQ3MkQxQzQzCis6MTAyNkYwMDBFMEY2RUI3RTZGQjI5N0Y0Q0Y1RkE5REE3Njg5RUQ0NzBCCis6MTAyNzAwMDA2NTc3RTAxQkM5MjBGQjAzMjlENzBGMUVDQURDQzlGMzdDCis6MTAyNzEwMDA4NjVENzk3Mzg4Mzg3Rjg3QjJCNzFCOTg0RTYxRERCMkNBCis6MTAyNzIwMDAyRkREOEFCODg3MzU2QTQyRUUzRDlBMzFDRkRCMzM2RkIxCis6MTAyNzMwMDBFOEUyREYxRkQ4MzhBMjkyREUxRjlDRTJERkM3QzAzRDZGCis6MTAyNzQwMDA5MEJCRkVERTk2NERGQzdCODgwQkYxRERERTE3RERDQjBBCis6MTAyNzUwMDBDQUQ1OUI0QkQ1OEI5NzZEQkQwODQwODBGNEUyMUNEQzNECis6MTAyNzYwMDBDQjc1NzQxOEVENzZGODIxQUUyODJDNjAxMzIwRkVGMDlFCis6MTAyNzcwMDA5ODRBQTM2NUM3QTRBQ0JFNDA5NzU1REY0RTg4M0EzRDQyCis6MTAyNzgwMDA1MTk4QkUzM0FDQ0ZDQUU5OTYwNEM1RDc5MEUxREYxRDlFCis6MTAyNzkwMDBEQUY2RTUxQ0ZDOTJENzREM0UyRDQ5QjNCOEU5NkEwQzM4Cis6MTAyN0EwMDBERkU5Rjc4QzRCNjkwQjlBODc1QUY3RkU5NzgwQzFDRjA4Cis6MTAyN0IwMDBBQjIwQ0VFREI1RDBDNzZEMEQ4QzcyN0IxRDRDNzI1QjFFCis6MTAyN0MwMDAwQjUzRENENkMxNTk2RTU3ODAyRUQzMjIyQkMxOTQ4MTc2Cis6MTAyN0QwMDBBRjVFMjZCODdGMjMyNEI5NkQ4NkM0RkI3NDI3NzRCMDFFCis6MTAyN0UwMDA2Q0RCMEFCMjU3RUZCQkU4NjREMzM5OEZCRTMzMkVCNDJCCis6MTAyN0YwMDBFOTYxRDNGRDIxMzJEMjBEMTdFNjZCMkEyQ0VDNkY1QjE5Cis6MTAyODAwMDBEMzE0RTNEN0EyQTAxREZGMEEzOUI3RTc5OTBGQzdCQUJGCis6MTAyODEwMDA3MTk3OUY3MEQ3Q0FCOTcyNzAyMURDNjVFM0M0RkYwMzVBCis6MTAyODIwMDAwOEU5NzEwMUIwNDgwMDAwMDAwMDAwMDAwMDAwMDAwMDRECis6MTAyODMwMDAwMDAwMDAxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDQwCis6MTAyODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgwMDAwMDAwMDYwCis6MTAyODUwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDY4Cis6MTAyODYwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDM4Cis6MTAyODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDUwCis6MTAyODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTAyODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTAyOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Cis6MTAyOEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Cis6MTAyOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Cis6MTAyOEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Cis6MTAyOEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU4Cis6MTAyOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Cis6MTAyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM3Cis6MTAyOTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI3Cis6MTAyOTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE3Cis6MTAyOTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Cis6MTAyOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg3Cis6MTAyOTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTAyOTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3Cis6MTAyOTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Cis6MTAyOTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Cis6MTAyOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwMDAwMDEwMDAwMDk3Cis6MTAyOUEwMDAwMDAwMDAwODAwMDA5MDA4MDAxMDAwMDAwMDAwMDAwMjc1Cis6MTAyOUIwMDAwMDAwOTAwMDAwMTAwMDAwMDAwMDAwMTAwMDAwOURBODIyCis6MTAyOUMwMDAwMDAwMDAwMDAwMDAwMDA4ODAwMDAwMDAwMDAwMDAwMDdGCis6MTAyOUQwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTAyOUUwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTFBMDM2Cis6MTAyOUYwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDkzQzAwMDAxMDAwNDc3Cis6MTAyQTAwMDAwMDAwMDAwMTAwMDA5M0M4MDAwMDAwMDAwMDAwMDAwMjY4Cis6MTAyQTEwMDAwMDAwOTNEMDAwMDAwMDAwMDAwMDAwMDgwMDAwOTNENEU0Cis6MTAyQTIwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDk0OTgwMDAwMDAwMDc4Cis6MTAyQTMwMDAwMDAwMDAwODAwMDA5M0Q4MDAwODAwMDAwMDAwMDAwODEzCis6MTAyQTQwMDAwMDAwOUIzODAwNDAwMDAwMDAwMDAwNDAwMDAwOTQxODg3Cis6MTAyQTUwMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDk0NTgwMDA4MDAwMDcyCis6MTAyQTYwMDAwMDAwMDAwODAwMDA5NEE4MDBDODAwMDAwMDAwMDA5OEMyCis6MTAyQTcwMDAwMDAwOTYzODAwOTgwMDAwMDAwMDAwMjgwMDAwOTY3OEJBCis6MTAyQTgwMDAwMDk4MDAwMDAwMDAwMDI4MDAwMEMwMDAwNTQwMDAzMDUxCis6MTAyQTkwMDAwMDAwMDU0MDAwMDBDQjIwMDAwODAwMDAwMDAwMDAwMUZECis6MTAyQUEwMDAwMDAwQ0IyMTAwMDgwMDAwMDAwMDAwMDEwMDAwMjAwODA5Cis6MTAyQUIwMDAwMDEwMDAwMDAwMDAwMDEwMDAwMDIwMDAwMDAwMDAwMEQ2Cis6MTAyQUMwMDAwMDAwMDAwODAwMDA5RDYwMDAwODAwMDAwMDAwMDAwMkY3Cis6MTAyQUQwMDAwMDAwOURBMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMEI4Cis6MTAyQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU2Cis6MTAyQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Cis6MTAyQjAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMEM1Cis6MTAyQjEwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDM1Cis6MTAyQjIwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Cis6MTAyQjMwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDk1Cis6MTAyQjQwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDA1Cis6MTAyQjUwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Cis6MTAyQjYwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDY1Cis6MTAyQjcwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMEQ1Cis6MTAyQjgwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Cis6MTAyQjkwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Cis6MTAyQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Cis6MTAyQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTAyQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTAyQkQwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDc1Cis6MTAyQkUwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Cis6MTAyQkYwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Cis6MTAyQzAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDQ0Cis6MTAyQzEwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Cis6MTAyQzIwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Cis6MTAyQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk0Cis6MTAyQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0Cis6MTAyQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Cis6MTAyQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Cis6MTAyQzcwMDAwMDAwMDAwMDAwMDAxMkM4MDA4MDAwMDAwMDAwMDA4MDdBCis6MTAyQzgwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMEEzCis6MTAyQzkwMDAwNzEwMDAwMDAwMDAwNzEwMDAwMDFFQzgwMDAwMDAwMDIwCis6MTAyQ0EwMDAwMDAwMDAwODAwMDBBRUMwMDAwODAwMDAwMDAwMDAwODlFCis6MTAyQ0IwMDAwMDAwQUU0MDAwMDgwMDAwMDAwMDAwMDgwMDAwQUU4MEU4Cis6MTAyQ0MwMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDIwMDgwMDEwMDAwMEJDCis6MTAyQ0QwMDAwMDAwMDAxMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwOEJDCis6MTAyQ0UwMDAwMDAwQTAxMDA3MTAwMDQwMDAwMDAwNDAwMDAwQUY0MEFFCis6MTAyQ0YwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMEFGNDEwMDA4MDAwMEQzCis6MTAyRDAwMDAwMDAwMDAwMTAwMDAxRUQwMDAwMDAwMDAwMDAwMDAwMUQzCis6MTAyRDEwMDAwMDAwMUVEODAwMDAwMDAwMDAwMDAwMDIwMDAwMUVEQUMzCis6MTAyRDIwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDEyQjAwMDA4MDAwMEQ3Cis6MTAyRDMwMDAwMDAwMDAwODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCCis6MTAyRDQwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDgzCis6MTAyRDUwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMEYzCis6MTAyRDYwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTAyRDcwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDUzCis6MTAyRDgwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMEMzCis6MTAyRDkwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCis6MTAyREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzCis6MTAyREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCis6MTAyREMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCis6MTAyREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDczCis6MTAyREUwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDYzCis6MTAyREYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCis6MTAyRTAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMEMyCis6MTAyRTEwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDMyCis6MTAyRTIwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCis6MTAyRTMwMDAwMDAwQjAwMDAwMTgwMDAwMDAwMDAwMTgwMDAwQjMwMEZGCis6MTAyRTQwMDAwMDQwMDAwMDAwMDAwMDQwMDAwMEIzMDAwMDQwMDAwMjBECis6MTAyRTUwMDAwMDAwMDAwMTAwMDBCMzAxMDA0MDAwMDIwMDAwMDAwMDdCCis6MTAyRTYwMDAwMDAwODAwMDAwNDAwMDAwMDAwMDAwNDA4MDAwMDAwMEUyCis6MTAyRTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDA4MDA0MDhBCis6MTAyRTgwMDAwMDAwMDAwNDAwMDA4MDA0MDAwODAwNDAwMDAwMDAwNDZFCis6MTAyRTkwMDAwMDAwQkIwMDAwMjgwMDAwMDAwMDAwMjgwMDAwQkM0MDJCCis6MTAyRUEwMDAwMDEwMDAwMDAwMDAwMDEwMDAwMDg4MDAwMDgwMDAwMEZBCis6MTAyRUIwMDAwMDAwMDA4MDAwMDA4ODAwMDAwODAwODAwMDAwMDAwMjgwCis6MTAyRUMwMDAwMDAwOEMwMDAwMjAwMDAwMDAwMDAwMjAwMDAwMjAwODBFCis6MTAyRUQwMDAwMDEwMDAwMDAwMDAwMDEwMDAwMDIwMDAwMDAwMDAwMEIyCis6MTAyRUUwMDAwMDAwMDAwODAwMDAxMTA4MDAwODAwMDAwMDAwMDAwOEIxCis6MTAyRUYwMDAwMDAwMTE2ODAwMDgwMDAwMDAwMDAwMDgwMDAwMTFBODkwCis6MTAyRjAwMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDEyNzAwMDA4MDAwMDI3Cis6MTAyRjEwMDAwMDAwMDAwMTAwMDAxMjcxMDAwODAwMDAwMDAwMDAwMTI0Cis6MTAyRjIwMDAwMDAwOEQwMDAwMTAwMDA0MDAwMDAwMDQwMDAwMTMyMEM5Cis6MTAyRjMwMDAwMDMwMDAxODAwMDAwMDEwMDAwMDEzMjgwMDMwMDAxOEI2Cis6MTAyRjQwMDAwMDAwMDAwMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTAyRjUwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTFFOEY4Cis6MTAyRjYwMDAwMDAwMDAwMDAwMDAwMDAxODAwMDAwMDAwMDAwMDAwMEUwCis6MTAyRjcwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTAyRjgwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDQxCis6MTAyRjkwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMEIxCis6MTAyRkEwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCis6MTAyRkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCis6MTAyRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCis6MTAyRkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCis6MTAyRkUwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMEUxCis6MTAyRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTAzMDAwMDAwMDAwMDAwMDAwMDA4MzA4MDA4MDAwMDAwMDAwMDA4MDM1Cis6MTAzMDEwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwODg3Cis6MTAzMDIwMDAwMDEwMDAwMDAwMDAwMDEwMDAwMDIwMDAwMDAwMDAwMDYwCis6MTAzMDMwMDAwMDAwMDAwODAwMDA4RDEwMDAwODAwMDAwMDAwMDAwOERCCis6MTAzMDQwMDAwMDAwOEQ3MDAwMDgwMDAwMDAwMDAwMDgwMDAwODQ1MDlGCis6MTAzMDUwMDAwNDYwMDAyODAwMDAwNDYwMDAwMDhFQTAwMDA4MDAwMDRBCis6MTAzMDYwMDAwMDAwMDAwMTAwMDA4RUExMDAwODAwMDAwMDAwMDAwMTI3Cis6MTAzMDcwMDAwMDAwODQwODAwMDgwMDAwMDAwMDAwMDgwMDAwODQ0OEU4Cis6MTAzMDgwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDhERjQwMDA4MDAwMEI2Cis6MTAzMDkwMDAwMDAwMDAwMjAwMDA4REY2MDAwODAwMDAwMDAwMDAwMkExCis6MTAzMEEwMDAwMDAwOEUwNDAwMTAwMDAwMDAwMDAwMDQ4MDAwMDAwMEZBCis6MTAzMEIwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDkwCis6MTAzMEMwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCis6MTAzMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCis6MTAzMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTAzMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTAzMTAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMEJGCis6MTAzMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTAzMTIwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCis6MTAzMTMwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDhGCis6MTAzMTQwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMEZGCis6MTAzMTUwMDAwMDAwMDAwMDAwMDAzMDAwMDA0MDAwMDAwMDAwMDAwOEY3Cis6MTAzMTYwMDAwMDAwMzAwODAwNDAwMDAwMDAwMDAwMjgwMDAwMzM5MEZDCis6MTAzMTcwMDAwMUMwMDAxMDAwMDAwMDA4MDAwMDMyMDAwMDIwMDAwMDI0Cis6MTAzMTgwMDAwMDAwMDAyMDAwMDAzNzIwMDAwMDAwMDAwMDAwMDAwOEMwCis6MTAzMTkwMDAwMDAwMTAyMDA2MjAwMDM4MDAwMDAwMDgwMDAwQTAwMEY5Cis6MTAzMUEwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDNFQTkwMDAwMDAwMDE4Cis6MTAzMUIwMDAwMDAwMDAwMTAwMDAzRUM4MDAwMDAwMDAwMDAwMDAwMjA2Cis6MTAzMUMwMDAwMDAwMUM0MDAwRTAwMDA4MDAwMDAwMDg4MDAwMDAwMDMzCis6MTAzMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDA4MDAwMEE3Cis6MTAzMUUwMDAwMDAwMDAwMTAwMDA0MDAxMDAwODAwMDAwMDAwMDAwMTk0Cis6MTAzMUYwMDAwMDAwNDA0MDAwMDgwMDA0MDAwMDAwMDIwMDAwNDA2MEExCis6MTAzMjAwMDAwMDA4MDAwNDAwMDAwMDA0MDAwMDQwMDAwMDA4MDAwMDY2Cis6MTAzMjEwMDAwMDAwMDAwNDAwMDA0MDA0MDAwODAwMDAwMDAwMDAwNDVBCis6MTAzMjIwMDAwMDAwNDA0MDAwMDAwMDAwMDAwMDAwMDgwMDAwNDA0ODhFCis6MTAzMjMwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDgwMDAwMDAwMDAwMDA2Cis6MTAzMjQwMDAwMDAwMDAxMDAwMDA1MDQwMDAwMTAwMDQwMDAwMDAwMUQ4Cis6MTAzMjUwMDAwMDAwNTAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwNTAwOEE2Cis6MTAzMjYwMDAwMDEwMDAwMDAwMDAwMDA0MDAwMDUwMEMwMDEwMDAwMERFCis6MTAzMjcwMDAwMDAwMDAwMTAwMDA1MkM3MDAwMDAwMDAwMDAwMDAwMTMzCis6MTAzMjgwMDAwMDAwNTJDNjAwMDAwMDAwMDAwMDAwMDEwMDAwMzAwMEY1Cis6MTAzMjkwMDAwMDMwMDAxODAwMDAwMDA0MDAwMDMwMDQwMDMwMDAxODY2Cis6MTAzMkEwMDAwMDAwMDAwNDAwMDAzMDA4MDAzMDAwMTgwMDAwMDAwMjk4Cis6MTAzMkIwMDAwMDAwMzAwQTAwMzAwMDE4MDAwMDAwMDIwMDAwMzAwQzRFCis6MTAzMkMwMDAwMDMwMDAxODAwMDAwMDAxMDAwMDMwMEQwMDMwMDAxODMwCis6MTAzMkQwMDAwMDAwMDAwMTAwMDAzMDBFMDAzMDAwMTgwMDAwMDAwMTY2Cis6MTAzMkUwMDAwMDAwMzAxMDAwMzAwMDE4MDAwMDAwMDQwMDAwMzAxNDBFCis6MTAzMkYwMDAwMDMwMDAxODAwMDAwMDA0MDAwMDUwMDAwMTAwMDA4MEIxCis6MTAzMzAwMDAwMDA4MDAwNDAwMDA1MDA0MDEwMDAwODAwMDA4MDAwNEQwCis6MTAzMzEwMDAwMDAwMDAwQTAwMDAwMDAwMDAwMDAwMDAwMDAwNTA2OEVCCis6MTAzMzIwMDAwMTAwMDA4MDAwMDAwMDAxMDAwMDUwNjkwMTAwMDA4MEUxCis6MTAzMzMwMDAwMDAwMDAwMTAwMDA1MDZDMDEwMDAwODAwMDAwMDAwMjRECis6MTAzMzQwMDAwMDAwNTA2RTAxMDAwMDgwMDAwMDAwMDIwMDAwNTA3MDdDCis6MTAzMzUwMDAwMTAwMDA4MDAwMDAwMDA0MDAwMDUwNzQwMTAwMDA4MEEzCis6MTAzMzYwMDAwMDAwMDAwNDAwMDA1MDY2MDEwMDAwODAwMDAwMDAwMjIwCis6MTAzMzcwMDAwMDAwNTA2NDAxMDAwMDgwMDAwMDAwMDEwMDAwNTA2MDY3Cis6MTAzMzgwMDAwMTAwMDA4MDAwMDAwMDAyMDAwMDUwNjIwMTAwMDA4MDg3Cis6MTAzMzkwMDAwMDAwMDAwMjAwMDA1MDUwMDEwMDAwODAwMDAwMDAwNDA2Cis6MTAzM0EwMDAwMDAwNTA1NDAxMDAwMDgwMDAwMDAwMDQwMDAwNTA1ODRDCis6MTAzM0IwMDAwMTAwMDA4MDAwMDAwMDA0MDAwMDUwNUMwMTAwMDA4MDVCCis6MTAzM0MwMDAwMDAwMDAwNDAwMDA1MDdDMDEwMDAwODAwMDAwMDAwMUFCCis6MTAzM0QwMDAwMDAwNTA3RDAxMDAwMDgwMDAwMDAwMDEwMDAwNDAxODQ2Cis6MTAzM0UwMDAwMDEwMDAwMDAwMDAwMDA0MDAwMDQwOTAwMDEwMDAwMEU5Cis6MTAzM0YwMDAwMDAwMDAwNDAwMDA0MDk4MDAxMDAwMDAwMDAwMDAwNERECis6MTAzNDAwMDAwMDAwNDExMDAwMDAwMDAwMDAwMDAwMDIwMDAwNDExMjE2Cis6MTAzNDEwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDQxMTQwMDAwMDAwMDU1Cis6MTAzNDIwMDAwMDAwMDAwMjAwMDA0MTE2MDAwMDAwMDAwMDAwMDAwMjQxCis6MTAzNDMwMDAwMDAwNjA0MDAwMDgwMDAwMDAwMDAwMDIwMDAwNjA0MjQwCis6MTAzNDQwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDYwNDQwMDA4MDAwMEM2Cis6MTAzNDUwMDAwMDAwMDAwNDAwMDA2MDgwMDAwODAwMDAwMDAwMDAwODc4Cis6MTAzNDYwMDAwMDAwNjBDMDAwNDAwMDA4MDAwMDAwMDgwMDAwNjAwMDhDCis6MTAzNDcwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDYwMDIwMDA4MDAwMEQ4Cis6MTAzNDgwMDAwMDAwMDAwMTAwMDA2MDA0MDAwODAwMDAwMDAwMDAwMkNECis6MTAzNDkwMDAwMDAwNjM0MDAwMDgwMDAwMDAwMDAwMDgwMDAwNjM4MDk2Cis6MTAzNEEwMDAwMDA4MDAwMDAwMDAwMDA0MDAwMDYzODQwMDA4MDAwMDIxCis6MTAzNEIwMDAwMDAwMDAwMTAwMDA2M0MwMDAwODAwMDAwMDAwMDAwMkRFCis6MTAzNEMwMDAwMDAwNjNDNDAwMDgwMDAwMDAwMDAwMDIwMDAwNjQwMDY3Cis6MTAzNEQwMDAwMDA4MDAwMDAwMDAwMDA0MDAwMDcwMDAwMDEwMDAwMDYwCis6MTAzNEUwMDAwMDAwMDAwNDAwMDA3MDA0MDAxMDAwMDAwMDAwMDAwNDUwCis6MTAzNEYwMDAwMDAwNzAwODAwMTAwMDAwMDAwMDAwMDQwMDAwNzAwMEQwCis6MTAzNTAwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDcwMDIwMDA4MDAwMDM3Cis6MTAzNTEwMDAwMDAwMDAwMTAwMDA3MDA0MDAwODAwMDAwMDAwMDAwMjJDCis6MTAzNTIwMDAwMDAwNzA0MDAwMDgwMDAwMDAwMDAwMDIwMDAwNzA0NDJECis6MTAzNTMwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDcwNDYwMDA4MDAwMEMzCis6MTAzNTQwMDAwMDAwMDAwMjAwMDA3NjQ4MDAwODAwMDAwMDAwMDAwOEFCCis6MTAzNTUwMDAwMDAwNzA4MDAwMDgwMDAwMDAwMDAwMDIwMDAwNzA4NDdECis6MTAzNTYwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDc2ODgwMDA4MDAwMDRCCis6MTAzNTcwMDAwMDAwMDAwODAwMDA4MDQwMDAwODAwMDAwMDAwMDAwMTdBCis6MTAzNTgwMDAwMDAwODA0MTAwMDgwMDAwMDAwMDAwMDEwMDAwODA0MkFGCis6MTAzNTkwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDgwNDMwMDA4MDAwMDU3Cis6MTAzNUEwMDAwMDAwMDAwMTAwMDA4MDAwMDAwODAwMDAwMDAwMDAwMjkwCis6MTAzNUIwMDAwMDAwODAwMjAwMDgwMDAwMDAwMDAwMDEwMDAwODAwNEZDCis6MTAzNUMwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDgwQzAwMDA4MDAwMEE5Cis6MTAzNUQwMDAwMDAwMDAwMjAwMDA4MEMyMDAwODAwMDAwMDAwMDAwMjlECis6MTAzNUUwMDAwMDAwODBDNDAwMDgwMDAwMDAwMDAwMDIwMDAwODA4MDhECis6MTAzNUYwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDgwODEwMDA4MDAwMEI5Cis6MTAzNjAwMDAwMDAwMDAwMTAwMDA4MDgyMDAwODAwMDAwMDAwMDAwMUFFCis6MTAzNjEwMDAwMDAwODA4MzAwMDgwMDAwMDAwMDAwMDEwMDAwODA4NDlBCis6MTAzNjIwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDgwODUwMDA4MDAwMDg0Cis6MTAzNjMwMDAwMDAwMDAwMTAwMDA4MDg2MDAwODAwMDAwMDAwMDAwMTdBCis6MTAzNjQwMDAwMDAwNjAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwNjAwMkFFCis6MTAzNjUwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDYwMDQwMDA4MDAwMEY1Cis6MTAzNjYwMDAwMDAwMDAwMjAwMDA2MDQyMDBDMDAwMTgwMDAwMDAwMkRDCis6MTAzNjcwMDAwMDAwNjA0MDAwQzAwMDE4MDAwMDAwMDIwMDAwNjA0QzI0Cis6MTAzNjgwMDAwMEMwMDAxODAwMDAwMDA4MDAwMDYwNDQwMEMwMDAxOERFCis6MTAzNjkwMDAwMDAwMDAwODAwMDA2MDU3MDBDMDAwMTgwMDAwMDAwMTkyCis6MTAzNkEwMDAwMDAwNjA1NDAwQzAwMDE4MDAwMDAwMDIwMDAwNjA1NkQ2Cis6MTAzNkIwMDAwMEMwMDAxODAwMDAwMDAxMDAwMDY2NDAwMDA4MDAwMDgzCis6MTAzNkMwMDAwMDAwMDAwODAwMDA2NjgwMDAwODAwMDAwMDAwMDAwOEZDCis6MTAzNkQwMDAwMDAwNjZDMDAwMDgwMDAwMDAwMDAwMDgwMDAwRDk0Mjk5Cis6MTAzNkUwMDAwMDE4MDAwMDAwMDAwMDAyMDAwMERFNDAwMDAwMDAwMEEyCis6MTAzNkYwMDAwMDAwMDAwMDAwMDBFMDAwMDAwMDAwMDAwMDAwMDAwNEU2Cis6MTAzNzAwMDAwMDAwREQ0MDAwMDAwMDAwMDAwMDAwMDQwMDAwREQ0NDc3Cis6MTAzNzEwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMERENDgwMDAwMDAwMDgwCis6MTAzNzIwMDAwMDAwMDAwNDAwMDBERDRDMDAwMDAwMDAwMDAwMDAwNDY4Cis6MTAzNzMwMDAwMDAwREQ1MDAwMDAwMDAwMDAwMDAwMDQwMDAwREQ1NDI3Cis6MTAzNzQwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMERENTgwMDAwMDAwMDQwCis6MTAzNzUwMDAwMDAwMDAwNDAwMDBERDQwMDAwMDAwMDAwMDAwMDAyMDI4Cis6MTAzNzYwMDAwMDAwREEwMDAwMDAwMDAwMDAwMDAwMDQwMDAwREEwMEExCis6MTAzNzcwMDAwMDAwMDAwMDAwMDAwMDY4MDAwMEJCNjAwMDAwMDAwMEM2Cis6MTAzNzgwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwNDY1Cis6MTAzNzkwMDAwMDAwQjBDMDAwMDAwMDAwMDAwMDAwMDQwMDAwQjBDNDQxCis6MTAzN0EwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMEIwQzgwMDAwMDAwMDlECis6MTAzN0IwMDAwMDAwMDAwNDAwMDBCMEMwMDAwMDAwMDAwMDAwMDAxMDg1Cis6MTAzN0MwMDAwMDAwRDZCMDAwMDAwMDAwMDAwMDAwMDQwMDAwRDZCNEU1Cis6MTAzN0QwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMEQ2QjgwMDAwMDAwMDU3Cis6MTAzN0UwMDAwMDAwMDAwNDAwMDBENkJDMDAwMDAwMDAwMDAwMDAwNDNGCis6MTAzN0YwMDAwMDAwRDZCMDAwMDAwMDAwMDAwMDAwMTAwMDAwRDM0ODE4Cis6MTAzODAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMEQzNTgwMDAwMDAwMDg1Cis6MTAzODEwMDAwMDAwMDA4MDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDE4Cis6MTAzODIwMDAwMDAwRDM1ODAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDY1Cis6MDgzODMwMDAwNjAyMDkwMDAwMDAwMDAwN0YKKzowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9ibngyeC9ibngyeC1lMi02LjIuNS4wLmZ3LmloZXggYi9maXJtd2FyZS9ibngyeC9ibngyeC1lMi02LjIuNS4wLmZ3LmloZXgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlZjlhYTYuLjAwMDAwMDAKLS0tIGEvZmlybXdhcmUvYm54MngvYm54MngtZTItNi4yLjUuMC5mdy5paGV4CisrKyAvZGV2L251bGwKQEAgLTEsMTU0NTYgKzAsMCBAQAotOjEwMDAwMDAwMDAwMDUzMTAwMDAwMDA2ODAwMDAwNzBDMDAwMDUzODAzRgotOjEwMDAxMDAwMDAwMDMxODAwMDAwNUE5MDAwMDAwMEIwMDAwMDhDMThGMQotOjEwMDAyMDAwMDAwMEMxMzQwMDAwOENEMDAwMDAwMEQ4MDAwMTRFMDg1MAotOjEwMDAzMDAwMDAwMEYxRjAwMDAxNEVFODAwMDAwMDc0MDAwMjQwRTAxMgotOjEwMDA0MDAwMDAwMDUyNUMwMDAyNDE1ODAwMDAwMEI4MDAwMjkzQjg2MgotOjEwMDA1MDAwMDAwMTIxM0MwMDAyOTQ3ODAwMDAwRkZDMDAwM0I1QjhCOQotOjEwMDA2MDAwMDAwMDAwMDQwMDAzQzVCODAyMDQwMDQ4MDAwMDAwMEZBRgotOjEwMDA3MDAwMDIwNDAwNTQwMDAwMDA0NTAyMDQwMDVDMDAwMDAwMDY3OQotOjEwMDA4MDAwMDIwNDAwNzAwMDAwMDAwNDAyMDQwMDc4MDAwMDAwMDA3OAotOjEwMDA5MDAwMDIwNDAwN0MxMjE3MDAwMDAyMDQwMDgwMjIxNzAwMDBGNgotOjEwMDBBMDAwMDIwNDAwODQzMjE3MDAwMDA2MDQwMDg4MDAwMDAwMDVFNgotOjEwMDBCMDAwMDIwNDAwOUMxMjE1MDAwMDAyMDQwMEEwMjIxNTAwMDA5QQotOjEwMDBDMDAwMDIwNDAwQTQzMjE1MDAwMDA2MDQwMEE4MDAwMDAwMDQ4OQotOjEwMDBEMDAwMDIwNDAwQjgwMjEwMDAwMDAyMDQwMEJDMDAxMDAwMDA3RQotOjEwMDBFMDAwMDIwNDAwQzAxMDEwMDAwMDAyMDQwMEM0MjAxMDAwMDAzMAotOjEwMDBGMDAwMDIwNDAwQzgzMDEwMDAwMDAyMDQwMENDNDAxMDAwMDBEMAotOjEwMDEwMDAwMDYwNDAwRDAwMDAwMDAwMzAyMDQwMERDMDAxMDAwMDAyMAotOjEwMDExMDAwMDIwNDAwRTAxMjE0MDAwMDAyMDQwMEU0MjIxNDAwMDBCMwotOjEwMDEyMDAwMDIwNDAwRTgzMjE0MDAwMDAyMDQwMEVDNDIxNDAwMDA1MwotOjEwMDEzMDAwMDYwNDAwRjAwMDAwMDAwMzAxMDQwMTI0MDAwMDAwMDA5OAotOjEwMDE0MDAwMDEwNDAxMjgwMDAwMDAwMDAxMDQwMTJDMDAwMDAwMDA0RgotOjEwMDE1MDAwMDEwNDAxMzAwMDAwMDAwMDAyMDQwMUQwMDAwMDg5MDYwMwotOjEwMDE2MDAwMDIwNDAyNTgwMDAwMDAzNjAyMDQwMjVDMDAwMDAwMzY1RgotOjEwMDE3MDAwMDIwNDAyNjAwODEwMDAwMDAyMDQwMjY0MDgxMDAwMDA3QgotOjEwMDE4MDAwMDIwNDAwMDQwMDAwMDBGRjAyMDQwMDA4MDAwMDAwRkY1OQotOjEwMDE5MDAwMDIwNDAwMEMwMDAwMDBGRjAyMDQwMDEwMDAwMDAwRkYzOQotOjEwMDFBMDAwMDIwNDAwMTQwMDAwMDA3RjAyMDQwMDE4MDAwMDAwRkY5OQotOjEwMDFCMDAwMDIwNDAwMUMwMDAwMDBGRjAyMDQwMDIwMDAwMDAwRkZGOQotOjEwMDFDMDAwMDIwNDAwMjQwMDAwMDAzRTAyMDQwMDI4MDAwMDAwMDA5OQotOjEwMDFEMDAwMDIwNDAwMkMwMDAwMDAzRjAyMDQwMDMwMDAwMDAwM0YzOQotOjEwMDFFMDAwMDIwNDAwMzQwMDAwMDAzRjAyMDQwMDM4MDAwMDAwM0YxOQotOjEwMDFGMDAwMDIwNDAwM0MwMDAwMDAzRjAyMDQwMDQwMDAwMDAwM0ZGOQotOjEwMDIwMDAwMDIwNDAwNDQwMDAwMDAzRjAyMDQwNENDMDAwMDAwMDE4RQotOjEwMDIxMDAwMDIwNDIwMDgwMDAwMDIxMTAyMDQyMDBDMDAwMDAyMDA2OQotOjEwMDIyMDAwMDIwNDIwMTAwMDAwMDIwNDAyMDQyMDE0MDAwMDAyMTkzRAotOjEwMDIzMDAwMDIwNDIwMUMwMDAwRkZGRjAyMDQyMDIwMDAwMEZGRkYzQQotOjEwMDI0MDAwMDIwNDIwMjQwMDAwRkZGRjAyMDQyMDI4MDAwMEZGRkYxQQotOjEwMDI1MDAwMDIwNDIwMzgwMDAwMDAyMDA2MDQyMDNDMDAwMDAwMEZBQgotOjEwMDI2MDAwMDIwNDIwNzgwMDAwMDAyMTA2MDQyMDdDMDAwMDAwMEYxQQotOjEwMDI3MDAwMDIwNDIwQjgwMDAwMDAwMTA2MDQyMEJDMDAwMDAwMEZBQQotOjEwMDI4MDAwMDIwNDIwRjgwMDAwMDAwMTA2MDQyMEZDMDAwMDAwM0ZFQQotOjEwMDI5MDAwMDIwNDIxRjgwMDAwMDAwMTA2MDQyMUZDMDAwMDAwMEYwOAotOjEwMDJBMDAwMDIwNDIyMzgwN0ZGRkZGRjAyMDQyMjNDMDAwMDAwN0YwNwotOjEwMDJCMDAwMDIwNDIyNDAwN0ZGRkZGRjAyMDQyMjQ0MDAwMDAwM0YyNwotOjEwMDJDMDAwMDEwNDIyNDgwMDAwMDAwMDAxMDQyMjRDMDAwMDAwMDA0QwotOjEwMDJEMDAwMDEwNDIyNTAwMDAwMDAwMDAxMDQyMjU0MDAwMDAwMDAyQwotOjEwMDJFMDAwMDEwNDIyNTgwMDAwMDAwMDAxMDQyMjVDMDAwMDAwMDAwQwotOjEwMDJGMDAwMDEwNDIyNjAwMDAwMDAwMDAxMDQyMjY0MDAwMDAwMDBFQwotOjEwMDMwMDAwMDEwNDIyNjgwMDAwMDAwMDAxMDQyMjZDMDAwMDAwMDBDQgotOjEwMDMxMDAwMDEwNDIyNzAwMDAwMDAwMDAxMDQyMjc0MDAwMDAwMDBBQgotOjEwMDMyMDAwMDEwNDIyNzgwMDAwMDAwMDAxMDQyMjdDMDAwMDAwMDA4QgotOjEwMDMzMDAwMDIwNDIyQzAwMDAwRkZGRjAyMDQyMkM0MDAwMEZGRkZFRAotOjEwMDM0MDAwMDIwNDIyQzgwMDAwRkZGRjAyMDQyMkNDMDAwMEZGRkZDRAotOjEwMDM1MDAwMEMwNDIwMDAwMDAwMDNFODBBMDQyMDAwMDAwMDAwMDE1MwotOjEwMDM2MDAwMEIwNDIwMDAwMDAwMDAwMzA2MDU0MDAwMDAwMDBEMDAwMwotOjEwMDM3MDAwMDIwNTAwNDQwMDAwMDAyMDAyMDUwMDQ4MDAwMDAwMzI5MQotOjEwMDM4MDAwMDIwNTAwOTAwMjE1MDAyMDAyMDUwMDk0MDIxNTAwMjBDRAotOjEwMDM5MDAwMDIwNTAwOTgwMDAwMDAzMDAyMDUwMDlDMDgxMDAwMDBEMwotOjEwMDNBMDAwMDIwNTAwQTAwMDAwMDAzNjAyMDUwMEE0MDAwMDAwMzA5NQotOjEwMDNCMDAwMDIwNTAwQTgwMDAwMDAzMTAyMDUwMEIwMDAwMDAwMDRBMgotOjEwMDNDMDAwMDIwNTAwQjQwMDAwMDAwNTAyMDUwMEMwMDAwMDAwMDBBNgotOjEwMDNEMDAwMDIwNTAwQzQwMDAwMDAwNDAyMDUwMEQ0MDAwMDAwMDE3MgotOjEwMDNFMDAwMDIwNTAxMTQwMDAwMDAwMTAyMDUwMTFDMDAwMDAwMDFDQgotOjEwMDNGMDAwMDIwNTAxMjAwMDAwMDAwMjAyMDUwMjA0MDAwMDAwMDFDNQotOjEwMDQwMDAwMDIwNTAyMEMwMDAwMDA0MDAyMDUwMjEwMDAwMDAwNDAzRQotOjEwMDQxMDAwMDIwNTAyMUMwMDAwMDAyMDAyMDUwMjIwMDAwMDAwMUM1MgotOjEwMDQyMDAwMDIwNTAyMjQwMDAwMDAyMDA2MDUwMjQwMDAwMDAwMEEyOAotOjEwMDQzMDAwMDQwNTAyODAwMDIwMDAwMDAyMDUwMDUwMDAwMDAwMDdCMwotOjEwMDQ0MDAwMDIwNTAwNTQwMDAwMDAwNzAyMDUwMDU4MDAwMDAwMDBFQgotOjEwMDQ1MDAwMDIwNTAwNUMwMDAwMDAwODAyMDUwMDYwMDAwMDAwMDFDOQotOjEwMDQ2MDAwMDYwNTAwNjQwMDAwMDAwMzAyMDUwMEQ4MDAwMDAwMDYzNQotOjEwMDQ3MDAwMDIwNTAwMDQwMDAwMDAwMTAyMDUwMDA4MDAwMDAwMDE2MAotOjEwMDQ4MDAwMDIwNTAwMEMwMDAwMDAwMTAyMDUwMDEwMDAwMDAwMDE0MAotOjEwMDQ5MDAwMDIwNTAwMTQwMDAwMDAwMTAyMDUwMDE4MDAwMDAwMDEyMAotOjEwMDRBMDAwMDIwNTAwMUMwMDAwMDAwMTAyMDUwMDIwMDAwMDAwMDEwMAotOjEwMDRCMDAwMDIwNTAwMjQwMDAwMDAwMTAyMDUwMDI4MDAwMDAwMDFFMAotOjEwMDRDMDAwMDIwNTAwMkMwMDAwMDAwMTAyMDUwMDMwMDAwMDAwMDFDMAotOjEwMDREMDAwMDIwNTAwMzQwMDAwMDAwMTAyMDUwMDM4MDAwMDAwMDFBMAotOjEwMDRFMDAwMDIwNTAwM0MwMDAwMDAwMTAyMDUwMDQwMDAwMDAwMDE4MAotOjEwMDRGMDAwMDIwNTAwRTAwMDAwMDAwRDAyMDUwMEU4MDAwMDAwMDAxOQotOjEwMDUwMDAwMDIwNTAwRjAwMDAwMDAwMDAyMDUwMEY4MDAwMDAwMDBGNQotOjEwMDUxMDAwMDIwNTAwRTQwMDAwMDAyRDAyMDUwMEVDMDAwMDAwMjBCMAotOjEwMDUyMDAwMDIwNTAwRjQwMDAwMDAyMDAyMDUwMEZDMDAwMDAwMjA4RAotOjEwMDUzMDAwMDIwNTAwRTAwMDAwMDAxRDAyMDUwMEU4MDAwMDAwMTBCOAotOjEwMDU0MDAwMDIwNTAwRjAwMDAwMDAxMDAyMDUwMEY4MDAwMDAwMTA5NQotOjEwMDU1MDAwMDIwNTAwRTQwMDAwMDAzRDAyMDUwMEVDMDAwMDAwMzA1MAotOjEwMDU2MDAwMDIwNTAwRjQwMDAwMDAzMDAyMDUwMEZDMDAwMDAwMzAyRAotOjEwMDU3MDAwMDIwNTAwRTAwMDAwMDA0RDAyMDUwMEU4MDAwMDAwNDAxOAotOjEwMDU4MDAwMDIwNTAwRjAwMDAwMDA0MDAyMDUwMEY4MDAwMDAwNDBGNQotOjEwMDU5MDAwMDIwNTAwRTQwMDAwMDA2RDAyMDUwMEVDMDAwMDAwNjBCMAotOjEwMDVBMDAwMDIwNTAwRjQwMDAwMDA2MDAyMDUwMEZDMDAwMDAwNjA4RAotOjEwMDVCMDAwMDIwNTAwRTAwMDAwMDA1RDAyMDUwMEU4MDAwMDAwNTBCOAotOjEwMDVDMDAwMDIwNTAwRjAwMDAwMDA1MDAyMDUwMEY4MDAwMDAwNTA5NQotOjEwMDVEMDAwMDIwNTAwRTQwMDAwMDA3RDAyMDUwMEVDMDAwMDAwNzA1MAotOjEwMDVFMDAwMDIwNTAwRjQwMDAwMDA3MDAyMDUwMEZDMDAwMDAwNzAyRAotOjEwMDVGMDAwMDQwNjEwMDAwMjAwMDAyMDAyMDYwMERDMDAwMDAwMDFEQQotOjEwMDYwMDAwMDQwNjAyMDAwMDAzMDIyMDAyMDYwMERDMDAwMDAwMDBENQotOjEwMDYxMDAwMDcxODA0MDAwMEFEMDAwMDA4MTgwN0Q4MDAwNTAyMjNFMQotOjEwMDYyMDAwMDcxQzAwMDAyOTkyMDAwMDA3MUM4MDAwMzEyQTBBNjU3RgotOjEwMDYzMDAwMDcxRDAwMDAzNEEzMTZCMDA3MUQ4MDAwMkU3QTIzRDlCMQotOjEwMDY0MDAwMDcxRTAwMDAwMzUwMkY3ODA4MUUwN0YwM0YwMjAyMjUwNgotOjEwMDY1MDAwMDIxODAwQkMwMDAwMDAzMDAxMTgwMDAwMDAwMDAwMDA3QgotOjEwMDY2MDAwMDExODAwMDQwMDAwMDAwMDAxMTgwMDA4MDAwMDAwMDA0QwotOjEwMDY3MDAwMDExODAwMEMwMDAwMDAwMDAxMTgwMDEwMDAwMDAwMDAyQwotOjEwMDY4MDAwMDExODAwMTQwMDAwMDAwMDAyMTgwMDIwMDAwMDAwMDEwMgotOjEwMDY5MDAwMDIxODAwMjQwMDAwMDAwMjAyMTgwMDI4MDAwMDAwMDNENQotOjEwMDZBMDAwMDIxODAwMkMwMDAwMDAwMDAyMTgwMDMwMDAwMDAwMDRCNgotOjEwMDZCMDAwMDIxODAwMzQwMDAwMDAwMTAyMTgwMDM4MDAwMDAwMDA5OQotOjEwMDZDMDAwMDIxODAwM0MwMDAwMDAwMTAyMTgwMDQwMDAwMDAwMDQ3NQotOjEwMDZEMDAwMDIxODAwNDQwMDAwMDAwMDAyMTgwMDQ4MDAwMDAwMDE1OQotOjEwMDZFMDAwMDIxODAwNEMwMDAwMDAwMzAyMTgwMDUwMDAwMDAwMDAzNwotOjEwMDZGMDAwMDIxODAwNTQwMDAwMDAwMTAyMTgwMDU4MDAwMDAwMDQxNQotOjEwMDcwMDAwMDIxODAwNUMwMDAwMDAwMDAyMTgwMDYwMDAwMDAwMDFGOAotOjEwMDcxMDAwMDIxODAwNjQwMDAwMDAwMzAyMTgwMDY4MDAwMDAwMDBENgotOjEwMDcyMDAwMDIxODAwNkMwMDAwMDAwMTAyMTgwMDcwMDAwMDAwMDRCNAotOjEwMDczMDAwMDIxODAwNzQwMDAwMDAwMDAyMTgwMDc4MDAwMDAwMDQ5NQotOjEwMDc0MDAwMDIxODAwN0MwMDAwMDAwMzA2MTgwMDgwMDAwMDAwMDI3MAotOjEwMDc1MDAwMDIxODAwQTQwMDAwN0ZGRjAyMTgwMEE4MDAwMDAzRkY5OQotOjEwMDc2MDAwMDIxODAyMjQwMDAwMDAwMDAyMTgwMjM0MDAwMDAwMDBGOQotOjEwMDc3MDAwMDIxODAyNEMwMDAwMDAwMDAyMTgwMkU0MDAwMDAwRkYxMgotOjEwMDc4MDAwMDYxODEwMDAwMDAwMDQwMDAyMUI4QkMwMDAwMDAwMDFDRQotOjEwMDc5MDAwMDIxQjgwMDAwMDAwMDAzNDAyMUI4MDQwMDAwMDAwMTg5MwotOjEwMDdBMDAwMDIxQjgwODAwMDAwMDAwQzAyMUI4MEMwMDAwMDAwMjBBMwotOjEwMDdCMDAwMEMxQjgzMDAwMDA4NjQ3MDBBMUI4MzAwMDAwMDAxNTdCMwotOjEwMDdDMDAwMEIxQjgzMDAwMDAwMDU1RjBBMUI4MzQwMDAwMDAwMDAzNAotOjEwMDdEMDAwMEMxQjgzNDAwMDAwMDIyNjBCMUI4MzQwMDAwMDAwMDExRAotOjEwMDdFMDAwMDIxQjgzODAwMDA4NjQ3MDAyMUI4M0MwMDAwMDAyMjY4NQotOjEwMDdGMDAwMDIxQjE0ODAwMDAwMDAwMTBBMUIxNDgwMDAwMDAwMDA4RQotOjEwMDgwMDAwMDIxQjk0NDAwMDAwMDAwMTA2MUI5NDQ4MDAwMDAwMDJGNwotOjEwMDgxMDAwMDYxQTEwMDAwMDAwMDJCMzA0MUExQUNDMDAwMTAyMjdDNQotOjEwMDgyMDAwMDYxQTFBRDAwMDAwMDAwODA2MUEyMDA4MDAwMDAwQzhBNgotOjEwMDgzMDAwMDYxQTIwMDAwMDAwMDAwMjA0MUExQkY4MDA5MDAyMjg4QgotOjEwMDg0MDAwMDYxQTM3MTgwMDAwMDAwNDA2MUEzNzEwMDAwMDAwMDJDQwotOjEwMDg1MDAwMDYxQTUwMDAwMDAwMDAwMjA2MUE1MDA4MDAwMDAwMDRBQQotOjEwMDg2MDAwMDYxQTUwMTgwMDAwMDAwNDA2MUE1MDI4MDAwMDAwMDQ2MAotOjEwMDg3MDAwMDYxQTUwMzgwMDAwMDAwNDA2MUE1MDQ4MDAwMDAwMDQxMAotOjEwMDg4MDAwMDYxQTUwNTgwMDAwMDAwNDA2MUE1MDY4MDAwMDAwMDRDMAotOjEwMDg5MDAwMDYxQTUwNzgwMDAwMDAwMjA0MUE1MkMwMDAwMjAyQjg4MgotOjEwMDhBMDAwMDYxQTQwNTAwMDAwMDAwNjA0MUE0MDY4MDAwMjAyQkEwRQotOjEwMDhCMDAwMDQxQTQwNDAwMDA0MDJCQzA0MUE4MDAwMDAwMTAyQzA3NwotOjEwMDhDMDAwMDYxQTgwMDQwMDAwMDAwMzA0MUE4MDEwMDAwMTAyQzEwRgotOjEwMDhEMDAwMDYxQTgwMTQwMDAwMDAwMzA0MUE4MDIwMDAwMTAyQzJERQotOjEwMDhFMDAwMDYxQTgwMjQwMDAwMDAwMzA0MUE4MDMwMDAwMTAyQzNBRAotOjEwMDhGMDAwMDYxQTgwMzQwMDAwMDAwMzA0MUE4MDQwMDAwMTAyQzQ3QwotOjEwMDkwMDAwMDYxQTgwNDQwMDAwMDAwMzA0MUE4MDUwMDAwMTAyQzU0QQotOjEwMDkxMDAwMDYxQTgwNTQwMDAwMDAwMzA0MUE4MDYwMDAwMTAyQzYxOQotOjEwMDkyMDAwMDYxQTgwNjQwMDAwMDAwMzA0MUE4MDcwMDAwMTAyQzdFOAotOjEwMDkzMDAwMDYxQTgwNzQwMDAwMDAwMzA0MUE4MDgwMDAwMTAyQzhCNwotOjEwMDk0MDAwMDYxQTgwODQwMDAwMDAwMzA0MUE4MDkwMDAwMTAyQzk4NgotOjEwMDk1MDAwMDYxQTgwOTQwMDAwMDAwMzA0MUE4MEEwMDAwMTAyQ0E1NQotOjEwMDk2MDAwMDYxQTgwQTQwMDAwMDAwMzA0MUE4MEIwMDAwMTAyQ0IyNAotOjEwMDk3MDAwMDYxQTgwQjQwMDAwMDAwMzA0MUE4MEMwMDAwMTAyQ0NGMwotOjEwMDk4MDAwMDYxQTgwQzQwMDAwMDAwMzA0MUE4MEQwMDAwMTAyQ0RDMgotOjEwMDk5MDAwMDYxQTgwRDQwMDAwMDAwMzA0MUE4MEUwMDAwMTAyQ0U5MQotOjEwMDlBMDAwMDYxQTgwRTQwMDAwMDAwMzA0MUE4MEYwMDAwMTAyQ0Y2MAotOjEwMDlCMDAwMDYxQTgwRjQwMDAwMDAwMzA0MUE4MTAwMDAwMTAyRDAyRQotOjEwMDlDMDAwMDYxQTgxMDQwMDAwMDAwMzA0MUE4MTEwMDAwMTAyRDFGQwotOjEwMDlEMDAwMDYxQTgxMTQwMDAwMDAwMzA0MUE4MTIwMDAwMTAyRDJDQgotOjEwMDlFMDAwMDYxQTgxMjQwMDAwMDAwMzA0MUE4MTMwMDAwMTAyRDM5QQotOjEwMDlGMDAwMDYxQTgxMzQwMDAwMDAwMzA0MUE4MTQwMDAwMTAyRDQ2OQotOjEwMEEwMDAwMDYxQTgxNDQwMDAwMDAwMzA0MUE4MTUwMDAwMTAyRDUzNwotOjEwMEExMDAwMDYxQTgxNTQwMDAwMDAwMzA0MUE4MTYwMDAwMTAyRDYwNgotOjEwMEEyMDAwMDYxQTgxNjQwMDAwMDAwMzA0MUE4MTcwMDAwMTAyRDdENQotOjEwMEEzMDAwMDYxQTgxNzQwMDAwMDAwMzA0MUE4MTgwMDAwMTAyRDhBNAotOjEwMEE0MDAwMDYxQTgxODQwMDAwMDAwMzA0MUE4MTkwMDAwMTAyRDk3MwotOjEwMEE1MDAwMDYxQTgxOTQwMDAwMDAwMzA0MUE4MUEwMDAwMTAyREE0MgotOjEwMEE2MDAwMDYxQTgxQTQwMDAwMDAwMzA0MUE4MUIwMDAwMTAyREIxMQotOjEwMEE3MDAwMDYxQTgxQjQwMDAwMDAwMzA0MUE4MUMwMDAwMTAyRENFMAotOjEwMEE4MDAwMDYxQTgxQzQwMDAwMDAwMzA0MUE4MUQwMDAwMTAyRERBRgotOjEwMEE5MDAwMDYxQTgxRDQwMDAwMDAwMzA0MUE4MUUwMDAwMTAyREU3RQotOjEwMEFBMDAwMDYxQTgxRTQwMDAwMDAwMzA0MUE4MUYwMDAwMTAyREY0RAotOjEwMEFCMDAwMDYxQTgxRjQwMDAwMDAwMzA0MUE4MjAwMDAwMTAyRTAxQgotOjEwMEFDMDAwMDYxQTgyMDQwMDAwMDAwMzA0MUE4MjEwMDAwMTAyRTFFOQotOjEwMEFEMDAwMDYxQTgyMTQwMDAwMDAwMzA0MUE4MjIwMDAwMTAyRTJCOAotOjEwMEFFMDAwMDYxQTgyMjQwMDAwMDAwMzA0MUE4MjMwMDAwMTAyRTM4NwotOjEwMEFGMDAwMDYxQTgyMzQwMDAwMDAwMzA0MUE4MjQwMDAwMTAyRTQ1NgotOjEwMEIwMDAwMDYxQTgyNDQwMDAwMDAwMzA0MUE4MjUwMDAwMTAyRTUyNAotOjEwMEIxMDAwMDYxQTgyNTQwMDAwMDAwMzA0MUE4MjYwMDAwMTAyRTZGMwotOjEwMEIyMDAwMDYxQTgyNjQwMDAwMDAwMzA0MUE4MjcwMDAwMTAyRTdDMgotOjEwMEIzMDAwMDYxQTgyNzQwMDAwMDAwMzA0MUE4MjgwMDAwMTAyRTg5MQotOjEwMEI0MDAwMDYxQTgyODQwMDAwMDAwMzA0MUE4MjkwMDAwMTAyRTk2MAotOjEwMEI1MDAwMDYxQTgyOTQwMDAwMDAwMzA0MUE4MkEwMDAwMTAyRUEyRgotOjEwMEI2MDAwMDYxQTgyQTQwMDAwMDAwMzA0MUE4MkIwMDAwMTAyRUJGRQotOjEwMEI3MDAwMDYxQTgyQjQwMDAwMDAwMzA0MUE4MkMwMDAwMTAyRUNDRAotOjEwMEI4MDAwMDYxQTgyQzQwMDAwMDAwMzA0MUE4MkQwMDAwMTAyRUQ5QwotOjEwMEI5MDAwMDYxQTgyRDQwMDAwMDAwMzA0MUE4MkUwMDAwMTAyRUU2QgotOjEwMEJBMDAwMDYxQTgyRTQwMDAwMDAwMzA0MUE4MkYwMDAwMTAyRUYzQQotOjEwMEJCMDAwMDYxQTgyRjQwMDAwMDAwMzA0MUE4MzAwMDAwMTAyRjAwOAotOjEwMEJDMDAwMDYxQTgzMDQwMDAwMDAwMzA0MUE4MzEwMDAwMTAyRjFENgotOjEwMEJEMDAwMDYxQTgzMTQwMDAwMDAwMzA0MUE4MzIwMDAwMTAyRjJBNQotOjEwMEJFMDAwMDYxQTgzMjQwMDAwMDAwMzA0MUE4MzMwMDAwMTAyRjM3NAotOjEwMEJGMDAwMDYxQTgzMzQwMDAwMDAwMzA0MUE4MzQwMDAwMTAyRjQ0MwotOjEwMEMwMDAwMDYxQTgzNDQwMDAwMDAwMzA0MUE4MzUwMDAwMTAyRjUxMQotOjEwMEMxMDAwMDYxQTgzNTQwMDAwMDAwMzA0MUE4MzYwMDAwMTAyRjZFMAotOjEwMEMyMDAwMDYxQTgzNjQwMDAwMDAwMzA0MUE4MzcwMDAwMTAyRjdBRgotOjEwMEMzMDAwMDYxQTgzNzQwMDAwMDAwMzA0MUE4MzgwMDAwMTAyRjg3RQotOjEwMEM0MDAwMDYxQTgzODQwMDAwMDAwMzA0MUE4MzkwMDAwMTAyRjk0RAotOjEwMEM1MDAwMDYxQTgzOTQwMDAwMDAwMzA0MUE4M0EwMDAwMTAyRkExQwotOjEwMEM2MDAwMDYxQTgzQTQwMDAwMDAwMzA0MUE4M0IwMDAwMTAyRkJFQgotOjEwMEM3MDAwMDYxQTgzQjQwMDAwMDAwMzA0MUE4M0MwMDAwMTAyRkNCQQotOjEwMEM4MDAwMDYxQTgzQzQwMDAwMDAwMzA0MUE4M0QwMDAwMTAyRkQ4OQotOjEwMEM5MDAwMDYxQTgzRDQwMDAwMDAwMzA0MUE4M0UwMDAwMTAyRkU1OAotOjEwMENBMDAwMDYxQTgzRTQwMDAwMDAwMzA0MUE4M0YwMDAwMTAyRkYyNwotOjEwMENCMDAwMDYxQTgzRjQwMDAwMDAwMzA0MUE4NDAwMDAwMTAzMDBGNAotOjEwMENDMDAwMDYxQTg0MDQwMDAwMDAwMzA0MUE4NDEwMDAwMTAzMDFDMgotOjEwMENEMDAwMDYxQTg0MTQwMDAwMDAwMzA0MUE4NDIwMDAwMTAzMDI5MQotOjEwMENFMDAwMDYxQTg0MjQwMDAwMDAwMzA0MUE4NDMwMDAwMTAzMDM2MAotOjEwMENGMDAwMDYxQTg0MzQwMDAwMDAwMzA0MUE4NDQwMDAwMTAzMDQyRgotOjEwMEQwMDAwMDYxQTg0NDQwMDAwMDAwMzA0MUE4NDUwMDAwMTAzMDVGRAotOjEwMEQxMDAwMDYxQTg0NTQwMDAwMDAwMzA0MUE4NDYwMDAwMTAzMDZDQwotOjEwMEQyMDAwMDYxQTg0NjQwMDAwMDAwMzA0MUE4NDcwMDAwMTAzMDc5QgotOjEwMEQzMDAwMDYxQTg0NzQwMDAwMDAwMzA0MUE4NDgwMDAwMTAzMDg2QQotOjEwMEQ0MDAwMDYxQTg0ODQwMDAwMDAwMzA0MUE4NDkwMDAwMTAzMDkzOQotOjEwMEQ1MDAwMDYxQTg0OTQwMDAwMDAwMzA0MUE4NEEwMDAwMTAzMEEwOAotOjEwMEQ2MDAwMDYxQTg0QTQwMDAwMDAwMzA0MUE4NEIwMDAwMTAzMEJENwotOjEwMEQ3MDAwMDYxQTg0QjQwMDAwMDAwMzA0MUE4NEMwMDAwMTAzMENBNgotOjEwMEQ4MDAwMDYxQTg0QzQwMDAwMDAwMzA0MUE4NEQwMDAwMTAzMEQ3NQotOjEwMEQ5MDAwMDYxQTg0RDQwMDAwMDAwMzA0MUE4NEUwMDAwMTAzMEU0NAotOjEwMERBMDAwMDYxQTg0RTQwMDAwMDAwMzA0MUE4NEYwMDAwMTAzMEYxMwotOjEwMERCMDAwMDYxQTg0RjQwMDAwMDAwMzA0MUE4NTAwMDAwMTAzMTBFMQotOjEwMERDMDAwMDYxQTg1MDQwMDAwMDAwMzA0MUE4NTEwMDAwMTAzMTFBRgotOjEwMEREMDAwMDYxQTg1MTQwMDAwMDAwMzA0MUE4NTIwMDAwMTAzMTI3RQotOjEwMERFMDAwMDYxQTg1MjQwMDAwMDAwMzA0MUE4NTMwMDAwMTAzMTM0RAotOjEwMERGMDAwMDYxQTg1MzQwMDAwMDAwMzA0MUE4NTQwMDAwMTAzMTQxQwotOjEwMEUwMDAwMDYxQTg1NDQwMDAwMDAwMzA0MUE4NTUwMDAwMTAzMTVFQQotOjEwMEUxMDAwMDYxQTg1NTQwMDAwMDAwMzA0MUE4NTYwMDAwMTAzMTZCOQotOjEwMEUyMDAwMDYxQTg1NjQwMDAwMDAwMzA0MUE4NTcwMDAwMTAzMTc4OAotOjEwMEUzMDAwMDYxQTg1NzQwMDAwMDAwMzA0MUE4NTgwMDAwMTAzMTg1NwotOjEwMEU0MDAwMDYxQTg1ODQwMDAwMDAwMzA0MUE4NTkwMDAwMTAzMTkyNgotOjEwMEU1MDAwMDYxQTg1OTQwMDAwMDAwMzA0MUE4NUEwMDAwMTAzMUFGNQotOjEwMEU2MDAwMDYxQTg1QTQwMDAwMDAwMzA0MUE4NUIwMDAwMTAzMUJDNAotOjEwMEU3MDAwMDYxQTg1QjQwMDAwMDAwMzA0MUE4NUMwMDAwMTAzMUM5MwotOjEwMEU4MDAwMDYxQTg1QzQwMDAwMDAwMzA0MUE4NUQwMDAwMTAzMUQ2MgotOjEwMEU5MDAwMDYxQTg1RDQwMDAwMDAwMzA0MUE4NUUwMDAwMTAzMUUzMQotOjEwMEVBMDAwMDYxQTg1RTQwMDAwMDAwMzA0MUE4NUYwMDAwMTAzMUYwMAotOjEwMEVCMDAwMDYxQTg1RjQwMDAwMDAwMzA0MUE4NjAwMDAwMTAzMjBDRQotOjEwMEVDMDAwMDYxQTg2MDQwMDAwMDAwMzA0MUE4NjEwMDAwMTAzMjE5QwotOjEwMEVEMDAwMDYxQTg2MTQwMDAwMDAwMzA0MUE4NjIwMDAwMTAzMjI2QgotOjEwMEVFMDAwMDYxQTg2MjQwMDAwMDAwMzA0MUE4NjMwMDAwMTAzMjMzQQotOjEwMEVGMDAwMDYxQTg2MzQwMDAwMDAwMzA0MUE4NjQwMDAwMTAzMjQwOQotOjEwMEYwMDAwMDYxQTg2NDQwMDAwMDAwMzA0MUE4NjUwMDAwMTAzMjVENwotOjEwMEYxMDAwMDYxQTg2NTQwMDAwMDAwMzA0MUE4NjYwMDAwMTAzMjZBNgotOjEwMEYyMDAwMDYxQTg2NjQwMDAwMDAwMzA0MUE4NjcwMDAwMTAzMjc3NQotOjEwMEYzMDAwMDYxQTg2NzQwMDAwMDAwMzA0MUE4NjgwMDAwMTAzMjg0NAotOjEwMEY0MDAwMDYxQTg2ODQwMDAwMDAwMzA0MUE4NjkwMDAwMTAzMjkxMwotOjEwMEY1MDAwMDYxQTg2OTQwMDAwMDAwMzA0MUE4NkEwMDAwMTAzMkFFMgotOjEwMEY2MDAwMDYxQTg2QTQwMDAwMDAwMzA0MUE4NkIwMDAwMTAzMkJCMQotOjEwMEY3MDAwMDYxQTg2QjQwMDAwMDAwMzA0MUE4NkMwMDAwMTAzMkM4MAotOjEwMEY4MDAwMDYxQTg2QzQwMDAwMDAwMzA0MUE4NkQwMDAwMTAzMkQ0RgotOjEwMEY5MDAwMDYxQTg2RDQwMDAwMDAwMzA0MUE4NkUwMDAwMTAzMkUxRQotOjEwMEZBMDAwMDYxQTg2RTQwMDAwMDAwMzA0MUE4NkYwMDAwMTAzMkZFRAotOjEwMEZCMDAwMDYxQTg2RjQwMDAwMDAwMzA0MUE4NzAwMDAwMTAzMzBCQgotOjEwMEZDMDAwMDYxQTg3MDQwMDAwMDAwMzA0MUE4NzEwMDAwMTAzMzE4OQotOjEwMEZEMDAwMDYxQTg3MTQwMDAwMDAwMzA0MUE4NzIwMDAwMTAzMzI1OAotOjEwMEZFMDAwMDYxQTg3MjQwMDAwMDAwMzA0MUE4NzMwMDAwMTAzMzMyNwotOjEwMEZGMDAwMDYxQTg3MzQwMDAwMDAwMzA0MUE4NzQwMDAwMTAzMzRGNgotOjEwMTAwMDAwMDYxQTg3NDQwMDAwMDAwMzA0MUE4NzUwMDAwMTAzMzVDNAotOjEwMTAxMDAwMDYxQTg3NTQwMDAwMDAwMzA0MUE4NzYwMDAwMTAzMzY5MwotOjEwMTAyMDAwMDYxQTg3NjQwMDAwMDAwMzA0MUE4NzcwMDAwMTAzMzc2MgotOjEwMTAzMDAwMDYxQTg3NzQwMDAwMDAwMzA0MUE4NzgwMDAwMTAzMzgzMQotOjEwMTA0MDAwMDYxQTg3ODQwMDAwMDAwMzA0MUE4NzkwMDAwMTAzMzkwMAotOjEwMTA1MDAwMDYxQTg3OTQwMDAwMDAwMzA0MUE4N0EwMDAwMTAzM0FDRgotOjEwMTA2MDAwMDYxQTg3QTQwMDAwMDAwMzA0MUE4N0IwMDAwMTAzM0I5RQotOjEwMTA3MDAwMDYxQTg3QjQwMDAwMDAwMzA0MUE4N0MwMDAwMTAzM0M2RAotOjEwMTA4MDAwMDYxQTg3QzQwMDAwMDAwMzA0MUE4N0QwMDAwMTAzM0QzQwotOjEwMTA5MDAwMDYxQTg3RDQwMDAwMDAwMzA0MUE4N0UwMDAwMTAzM0UwQgotOjEwMTBBMDAwMDYxQTg3RTQwMDAwMDAwMzA0MUE4N0YwMDAwMTAzM0ZEQQotOjEwMTBCMDAwMDYxQTg3RjQwMDAwMDAwMzA0MUE4ODAwMDAwMTAzNDBBOAotOjEwMTBDMDAwMDYxQTg4MDQwMDAwMDAwMzA0MUE4ODEwMDAwMTAzNDE3NgotOjEwMTBEMDAwMDYxQTg4MTQwMDAwMDAwMzA0MUE4ODIwMDAwMTAzNDI0NQotOjEwMTBFMDAwMDYxQTg4MjQwMDAwMDAwMzA0MUE4ODMwMDAwMTAzNDMxNAotOjEwMTBGMDAwMDYxQTg4MzQwMDAwMDAwMzA0MUE4ODQwMDAwMTAzNDRFMwotOjEwMTEwMDAwMDYxQTg4NDQwMDAwMDAwMzA0MUE4ODUwMDAwMTAzNDVCMQotOjEwMTExMDAwMDYxQTg4NTQwMDAwMDAwMzA0MUE4ODYwMDAwMTAzNDY4MAotOjEwMTEyMDAwMDYxQTg4NjQwMDAwMDAwMzA0MUE4ODcwMDAwMTAzNDc0RgotOjEwMTEzMDAwMDYxQTg4NzQwMDAwMDAwMzA0MUE4ODgwMDAwMTAzNDgxRQotOjEwMTE0MDAwMDYxQTg4ODQwMDAwMDAwMzA0MUE4ODkwMDAwMTAzNDlFRAotOjEwMTE1MDAwMDYxQTg4OTQwMDAwMDAwMzA0MUE4OEEwMDAwMTAzNEFCQwotOjEwMTE2MDAwMDYxQTg4QTQwMDAwMDAwMzA0MUE4OEIwMDAwMTAzNEI4QgotOjEwMTE3MDAwMDYxQTg4QjQwMDAwMDAwMzA0MUE4OEMwMDAwMTAzNEM1QQotOjEwMTE4MDAwMDYxQTg4QzQwMDAwMDAwMzA0MUE4OEQwMDAwMTAzNEQyOQotOjEwMTE5MDAwMDYxQTg4RDQwMDAwMDAwMzA0MUE4OEUwMDAwMTAzNEVGOAotOjEwMTFBMDAwMDYxQTg4RTQwMDAwMDAwMzA0MUE4OEYwMDAwMTAzNEZDNwotOjEwMTFCMDAwMDYxQTg4RjQwMDAwMDAwMzA0MUE4OTAwMDAwMTAzNTA5NQotOjEwMTFDMDAwMDYxQTg5MDQwMDAwMDAwMzA0MUE4OTEwMDAwMTAzNTE2MwotOjEwMTFEMDAwMDYxQTg5MTQwMDAwMDAwMzA0MUE4OTIwMDAwMTAzNTIzMgotOjEwMTFFMDAwMDYxQTg5MjQwMDAwMDAwMzA0MUE4OTMwMDAwMTAzNTMwMQotOjEwMTFGMDAwMDYxQTg5MzQwMDAwMDAwMzA0MUE4OTQwMDAwMTAzNTREMAotOjEwMTIwMDAwMDYxQTg5NDQwMDAwMDAwMzA0MUE4OTUwMDAwMTAzNTU5RQotOjEwMTIxMDAwMDYxQTg5NTQwMDAwMDAwMzA0MUE4OTYwMDAwMTAzNTY2RAotOjEwMTIyMDAwMDYxQTg5NjQwMDAwMDAwMzA0MUE4OTcwMDAwMTAzNTczQwotOjEwMTIzMDAwMDYxQTg5NzQwMDAwMDAwMzA0MUE4OTgwMDAwMTAzNTgwQgotOjEwMTI0MDAwMDYxQTg5ODQwMDAwMDAwMzA0MUE4OTkwMDAwMTAzNTlEQQotOjEwMTI1MDAwMDYxQTg5OTQwMDAwMDAwMzA0MUE4OUEwMDAwMTAzNUFBOQotOjEwMTI2MDAwMDYxQTg5QTQwMDAwMDAwMzA0MUE4OUIwMDAwMTAzNUI3OAotOjEwMTI3MDAwMDYxQTg5QjQwMDAwMDAwMzA0MUE4OUMwMDAwMTAzNUM0NwotOjEwMTI4MDAwMDYxQTg5QzQwMDAwMDAwMzA0MUE4OUQwMDAwMTAzNUQxNgotOjEwMTI5MDAwMDYxQTg5RDQwMDAwMDAwMzA0MUE4OUUwMDAwMTAzNUVFNQotOjEwMTJBMDAwMDYxQTg5RTQwMDAwMDAwMzA0MUE4OUYwMDAwMTAzNUZCNAotOjEwMTJCMDAwMDYxQTg5RjQwMDAwMDAwMzA0MUE4QTAwMDAwMTAzNjA4MgotOjEwMTJDMDAwMDYxQThBMDQwMDAwMDAwMzA0MUE4QTEwMDAwMTAzNjE1MAotOjEwMTJEMDAwMDYxQThBMTQwMDAwMDAwMzA0MUE4QTIwMDAwMTAzNjIxRgotOjEwMTJFMDAwMDYxQThBMjQwMDAwMDAwMzA0MUE4QTMwMDAwMTAzNjNFRQotOjEwMTJGMDAwMDYxQThBMzQwMDAwMDAwMzA0MUE4QTQwMDAwMTAzNjRCRAotOjEwMTMwMDAwMDYxQThBNDQwMDAwMDAwMzA0MUE4QTUwMDAwMTAzNjU4QgotOjEwMTMxMDAwMDYxQThBNTQwMDAwMDAwMzA0MUE4QTYwMDAwMTAzNjY1QQotOjEwMTMyMDAwMDYxQThBNjQwMDAwMDAwMzA0MUE4QTcwMDAwMTAzNjcyOQotOjEwMTMzMDAwMDYxQThBNzQwMDAwMDAwMzA0MUE4QTgwMDAwMTAzNjhGOAotOjEwMTM0MDAwMDYxQThBODQwMDAwMDAwMzA0MUE4QTkwMDAwMTAzNjlDNwotOjEwMTM1MDAwMDYxQThBOTQwMDAwMDAwMzA0MUE4QUEwMDAwMTAzNkE5NgotOjEwMTM2MDAwMDYxQThBQTQwMDAwMDAwMzA0MUE4QUIwMDAwMTAzNkI2NQotOjEwMTM3MDAwMDYxQThBQjQwMDAwMDAwMzA0MUE4QUMwMDAwMTAzNkMzNAotOjEwMTM4MDAwMDYxQThBQzQwMDAwMDAwMzA0MUE4QUQwMDAwMTAzNkQwMwotOjEwMTM5MDAwMDYxQThBRDQwMDAwMDAwMzA0MUE4QUUwMDAwMTAzNkVEMgotOjEwMTNBMDAwMDYxQThBRTQwMDAwMDAwMzA0MUE4QUYwMDAwMTAzNkZBMQotOjEwMTNCMDAwMDYxQThBRjQwMDAwMDAwMzA0MUE4QjAwMDAwMTAzNzA2RgotOjEwMTNDMDAwMDYxQThCMDQwMDAwMDAwMzA0MUE4QjEwMDAwMTAzNzEzRAotOjEwMTNEMDAwMDYxQThCMTQwMDAwMDAwMzA0MUE4QjIwMDAwMTAzNzIwQwotOjEwMTNFMDAwMDYxQThCMjQwMDAwMDAwMzA0MUE4QjMwMDAwMTAzNzNEQgotOjEwMTNGMDAwMDYxQThCMzQwMDAwMDAwMzA0MUE4QjQwMDAwMTAzNzRBQQotOjEwMTQwMDAwMDYxQThCNDQwMDAwMDAwMzA0MUE4QjUwMDAwMTAzNzU3OAotOjEwMTQxMDAwMDYxQThCNTQwMDAwMDAwMzA0MUE4QjYwMDAwMTAzNzY0NwotOjEwMTQyMDAwMDYxQThCNjQwMDAwMDAwMzA0MUE4QjcwMDAwMTAzNzcxNgotOjEwMTQzMDAwMDYxQThCNzQwMDAwMDAwMzA0MUE4QjgwMDAwMTAzNzhFNQotOjEwMTQ0MDAwMDYxQThCODQwMDAwMDAwMzA0MUE4QjkwMDAwMTAzNzlCNAotOjEwMTQ1MDAwMDYxQThCOTQwMDAwMDAwMzA0MUE4QkEwMDAwMTAzN0E4MwotOjEwMTQ2MDAwMDYxQThCQTQwMDAwMDAwMzA0MUE4QkIwMDAwMTAzN0I1MgotOjEwMTQ3MDAwMDYxQThCQjQwMDAwMDAwMzA0MUE4QkMwMDAwMTAzN0MyMQotOjEwMTQ4MDAwMDYxQThCQzQwMDAwMDAwMzA0MUE4QkQwMDAwMTAzN0RGMAotOjEwMTQ5MDAwMDYxQThCRDQwMDAwMDAwMzA0MUE4QkUwMDAwMTAzN0VCRgotOjEwMTRBMDAwMDYxQThCRTQwMDAwMDAwMzA0MUE4QkYwMDAwMTAzN0Y4RQotOjEwMTRCMDAwMDYxQThCRjQwMDAwMDAwMzA0MUE4QzAwMDAwMTAzODA1QwotOjEwMTRDMDAwMDYxQThDMDQwMDAwMDAwMzA0MUE4QzEwMDAwMTAzODEyQQotOjEwMTREMDAwMDYxQThDMTQwMDAwMDAwMzA0MUE4QzIwMDAwMTAzODJGOQotOjEwMTRFMDAwMDYxQThDMjQwMDAwMDAwMzA0MUE4QzMwMDAwMTAzODNDOAotOjEwMTRGMDAwMDYxQThDMzQwMDAwMDAwMzA0MUE4QzQwMDAwMTAzODQ5NwotOjEwMTUwMDAwMDYxQThDNDQwMDAwMDAwMzA0MUE4QzUwMDAwMTAzODU2NQotOjEwMTUxMDAwMDYxQThDNTQwMDAwMDAwMzA0MUE4QzYwMDAwMTAzODYzNAotOjEwMTUyMDAwMDYxQThDNjQwMDAwMDAwMzA0MUE4QzcwMDAwMTAzODcwMwotOjEwMTUzMDAwMDYxQThDNzQwMDAwMDAwMzA0MUE4QzgwMDAwMTAzODhEMgotOjEwMTU0MDAwMDYxQThDODQwMDAwMDAwMzA0MUE4QzkwMDAwMTAzODlBMQotOjEwMTU1MDAwMDYxQThDOTQwMDAwMDAwMzA0MUE4Q0EwMDAwMTAzOEE3MAotOjEwMTU2MDAwMDYxQThDQTQwMDAwMDAwMzA0MUE4Q0IwMDAwMTAzOEIzRgotOjEwMTU3MDAwMDYxQThDQjQwMDAwMDAwMzA0MUE4Q0MwMDAwMTAzOEMwRQotOjEwMTU4MDAwMDYxQThDQzQwMDAwMDAwMzA0MUE4Q0QwMDAwMTAzOERERAotOjEwMTU5MDAwMDYxQThDRDQwMDAwMDAwMzA0MUE4Q0UwMDAwMTAzOEVBQwotOjEwMTVBMDAwMDYxQThDRTQwMDAwMDAwMzA0MUE4Q0YwMDAwMTAzOEY3QgotOjEwMTVCMDAwMDYxQThDRjQwMDAwMDAwMzA0MUE4RDAwMDAwMTAzOTA0OQotOjEwMTVDMDAwMDYxQThEMDQwMDAwMDAwMzA0MUE4RDEwMDAwMTAzOTExNwotOjEwMTVEMDAwMDYxQThEMTQwMDAwMDAwMzA0MUE4RDIwMDAwMTAzOTJFNgotOjEwMTVFMDAwMDYxQThEMjQwMDAwMDAwMzA0MUE4RDMwMDAwMTAzOTNCNQotOjEwMTVGMDAwMDYxQThEMzQwMDAwMDAwMzA0MUE4RDQwMDAwMTAzOTQ4NAotOjEwMTYwMDAwMDYxQThENDQwMDAwMDAwMzA0MUE4RDUwMDAwMTAzOTU1MgotOjEwMTYxMDAwMDYxQThENTQwMDAwMDAwMzA0MUE4RDYwMDAwMTAzOTYyMQotOjEwMTYyMDAwMDYxQThENjQwMDAwMDAwMzA0MUE4RDcwMDAwMTAzOTdGMAotOjEwMTYzMDAwMDYxQThENzQwMDAwMDAwMzA0MUE4RDgwMDAwMTAzOThCRgotOjEwMTY0MDAwMDYxQThEODQwMDAwMDAwMzA0MUE4RDkwMDAwMTAzOTk4RQotOjEwMTY1MDAwMDYxQThEOTQwMDAwMDAwMzA0MUE4REEwMDAwMTAzOUE1RAotOjEwMTY2MDAwMDYxQThEQTQwMDAwMDAwMzA0MUE4REIwMDAwMTAzOUIyQwotOjEwMTY3MDAwMDYxQThEQjQwMDAwMDAwMzA0MUE4REMwMDAwMTAzOUNGQgotOjEwMTY4MDAwMDYxQThEQzQwMDAwMDAwMzA0MUE4REQwMDAwMTAzOURDQQotOjEwMTY5MDAwMDYxQThERDQwMDAwMDAwMzA0MUE4REUwMDAwMTAzOUU5OQotOjEwMTZBMDAwMDYxQThERTQwMDAwMDAwMzA0MUE4REYwMDAwMTAzOUY2OAotOjEwMTZCMDAwMDYxQThERjQwMDAwMDAwMzA0MUE4RTAwMDAwMTAzQTAzNgotOjEwMTZDMDAwMDYxQThFMDQwMDAwMDAwMzA0MUE4RTEwMDAwMTAzQTEwNAotOjEwMTZEMDAwMDYxQThFMTQwMDAwMDAwMzA0MUE4RTIwMDAwMTAzQTJEMwotOjEwMTZFMDAwMDYxQThFMjQwMDAwMDAwMzA0MUE4RTMwMDAwMTAzQTNBMgotOjEwMTZGMDAwMDYxQThFMzQwMDAwMDAwMzA0MUE4RTQwMDAwMTAzQTQ3MQotOjEwMTcwMDAwMDYxQThFNDQwMDAwMDAwMzA0MUE4RTUwMDAwMTAzQTUzRgotOjEwMTcxMDAwMDYxQThFNTQwMDAwMDAwMzA0MUE4RTYwMDAwMTAzQTYwRQotOjEwMTcyMDAwMDYxQThFNjQwMDAwMDAwMzA0MUE4RTcwMDAwMTAzQTdERAotOjEwMTczMDAwMDYxQThFNzQwMDAwMDAwMzA0MUE4RTgwMDAwMTAzQThBQwotOjEwMTc0MDAwMDYxQThFODQwMDAwMDAwMzA0MUE4RTkwMDAwMTAzQTk3QgotOjEwMTc1MDAwMDYxQThFOTQwMDAwMDAwMzA0MUE4RUEwMDAwMTAzQUE0QQotOjEwMTc2MDAwMDYxQThFQTQwMDAwMDAwMzA0MUE4RUIwMDAwMTAzQUIxOQotOjEwMTc3MDAwMDYxQThFQjQwMDAwMDAwMzA0MUE4RUMwMDAwMTAzQUNFOAotOjEwMTc4MDAwMDYxQThFQzQwMDAwMDAwMzA0MUE4RUQwMDAwMTAzQURCNwotOjEwMTc5MDAwMDYxQThFRDQwMDAwMDAwMzA0MUE4RUUwMDAwMTAzQUU4NgotOjEwMTdBMDAwMDYxQThFRTQwMDAwMDAwMzA0MUE4RUYwMDAwMTAzQUY1NQotOjEwMTdCMDAwMDYxQThFRjQwMDAwMDAwMzA0MUE4RjAwMDAwMTAzQjAyMwotOjEwMTdDMDAwMDYxQThGMDQwMDAwMDAwMzA0MUE4RjEwMDAwMTAzQjFGMQotOjEwMTdEMDAwMDYxQThGMTQwMDAwMDAwMzA0MUE4RjIwMDAwMTAzQjJDMAotOjEwMTdFMDAwMDYxQThGMjQwMDAwMDAwMzA0MUE4RjMwMDAwMTAzQjM4RgotOjEwMTdGMDAwMDYxQThGMzQwMDAwMDAwMzA0MUE4RjQwMDAwMTAzQjQ1RQotOjEwMTgwMDAwMDYxQThGNDQwMDAwMDAwMzA0MUE4RjUwMDAwMTAzQjUyQwotOjEwMTgxMDAwMDYxQThGNTQwMDAwMDAwMzA0MUE4RjYwMDAwMTAzQjZGQgotOjEwMTgyMDAwMDYxQThGNjQwMDAwMDAwMzA0MUE4RjcwMDAwMTAzQjdDQQotOjEwMTgzMDAwMDYxQThGNzQwMDAwMDAwMzA0MUE4RjgwMDAwMTAzQjg5OQotOjEwMTg0MDAwMDYxQThGODQwMDAwMDAwMzA0MUE4RjkwMDAwMTAzQjk2OAotOjEwMTg1MDAwMDYxQThGOTQwMDAwMDAwMzA0MUE4RkEwMDAwMTAzQkEzNwotOjEwMTg2MDAwMDYxQThGQTQwMDAwMDAwMzA0MUE4RkIwMDAwMTAzQkIwNgotOjEwMTg3MDAwMDYxQThGQjQwMDAwMDAwMzA0MUE4RkMwMDAwMTAzQkNENQotOjEwMTg4MDAwMDYxQThGQzQwMDAwMDAwMzA0MUE4RkQwMDAwMTAzQkRBNAotOjEwMTg5MDAwMDYxQThGRDQwMDAwMDAwMzA0MUE4RkUwMDAwMTAzQkU3MwotOjEwMThBMDAwMDYxQThGRTQwMDAwMDAwNzA0MUE2MkMwMDAyMDAzQkY3QwotOjEwMThCMDAwMDYxQTFBRjAwMDAwMDA0MjA2MUFBRjAwMDAwMDAwMDhFNQotOjEwMThDMDAwMDYxQUUwMDAwMDAwMDU0MDA2MUFEMDAwMDAwMDAwNzI3MQotOjEwMThEMDAwMDYxQUQyNDgwMDAwMDAxMDA2MUFENkIwMDAwMDAwMjBGOAotOjEwMThFMDAwMDYxQUQ0NzAwMDAwMDA5MDA2MUFENDY4MDAwMDAwMDJBNgotOjEwMThGMDAwMDYxQUEwMDAwMDAwMDFDNDA2MUEzMDAwMDAwMDAwMTAwMwotOjEwMTkwMDAwMDYxQTMwODAwMDAwMDAxMDA2MUEzMTAwMDAwMDAwMTA5NgotOjEwMTkxMDAwMDYxQTMxODAwMDAwMDAxMDA2MUEzMzAwMDAwMDAwMTI4MQotOjEwMTkyMDAwMDYxQTMzOTAwMDAwMDA3MDA2MUFENDU4MDAwMDAwMDIxNgotOjEwMTkzMDAwMDYxQUQzNDgwMDAwMDAwMjA2MUFEMzU4MDAwMDAwMjBGRgotOjEwMTk0MDAwMDYxQUE3MTAwMDAwMDFDNDA2MUEzMDQwMDAwMDAwMTA1QgotOjEwMTk1MDAwMDYxQTMwQzAwMDAwMDAxMDA2MUEzMTQwMDAwMDAwMTBDNgotOjEwMTk2MDAwMDYxQTMxQzAwMDAwMDAxMDA2MUEzMzQ4MDAwMDAwMTJBOQotOjEwMTk3MDAwMDYxQTM1NTAwMDAwMDA3MDA2MUFENDYwMDAwMDAwMDJGQwotOjEwMTk4MDAwMDYxQUQzNTAwMDAwMDAwMjA2MUFEM0Q4MDAwMDAwMjAyNwotOjEwMTk5MDAwMDIxQUFFMjAwMDAwMDAwMDA2MUE1MDAwMDAwMDAwMDJFQgotOjEwMTlBMDAwMDYxQTUwODAwMDAwMDAxMjA0MUE0MDAwMDAwMjAzREZGMwotOjEwMTlCMDAwMDQxQTYzQzAwMDAyMDNFMTA2MUE3MDAwMDAwMDAwMDQ2QwotOjEwMTlDMDAwMDYxQTMyMDAwMDAwMDAwODAyMUFBRTI0MDAwMDAwMDBDRgotOjEwMTlEMDAwMDYxQTUwMTAwMDAwMDAwMjA2MUE1MEM4MDAwMDAwMTIzQgotOjEwMTlFMDAwMDQxQTQwMDgwMDAyMDNFMzA0MUE2M0M4MDAwMjAzRTU3NgotOjEwMTlGMDAwMDYxQTcwMTAwMDAwMDAwNDA2MUEzMjIwMDAwMDAwMDhDOQotOjEwMUEwMDAwMDIxQUFFMjgwMDAwMDAwMDA2MUE1MDIwMDAwMDAwMDI1MgotOjEwMUExMDAwMDYxQTUxMTAwMDAwMDAxMjA0MUE0MDEwMDAwMjAzRTdEOQotOjEwMUEyMDAwMDQxQTYzRDAwMDAyMDNFOTA2MUE3MDIwMDAwMDAwMDRDMwotOjEwMUEzMDAwMDYxQTMyNDAwMDAwMDAwODAyMUFBRTJDMDAwMDAwMDAxNgotOjEwMUE0MDAwMDYxQTUwMzAwMDAwMDAwMjA2MUE1MTU4MDAwMDAwMTIxOQotOjEwMUE1MDAwMDQxQTQwMTgwMDAyMDNFQjA0MUE2M0Q4MDAwMjAzRURENQotOjEwMUE2MDAwMDYxQTcwMzAwMDAwMDAwNDA2MUEzMjYwMDAwMDAwMDhGOAotOjEwMUE3MDAwMDIxQUFFMzAwMDAwMDAwMDA2MUE1MDQwMDAwMDAwMDJCQQotOjEwMUE4MDAwMDYxQTUxQTAwMDAwMDAxMjA0MUE0MDIwMDAwMjAzRUZDMQotOjEwMUE5MDAwMDQxQTYzRTAwMDAyMDNGMTA2MUE3MDQwMDAwMDAwMDQxQgotOjEwMUFBMDAwMDYxQTMyODAwMDAwMDAwODAyMUFBRTM0MDAwMDAwMDA1RQotOjEwMUFCMDAwMDYxQTUwNTAwMDAwMDAwMjA2MUE1MUU4MDAwMDAwMTJGOQotOjEwMUFDMDAwMDQxQTQwMjgwMDAyMDNGMzA0MUE2M0U4MDAwMjAzRjUzNQotOjEwMUFEMDAwMDYxQTcwNTAwMDAwMDAwNDA2MUEzMkEwMDAwMDAwMDgyOAotOjEwMUFFMDAwMDIxQUFFMzgwMDAwMDAwMDA2MUE1MDYwMDAwMDAwMDIyMgotOjEwMUFGMDAwMDYxQTUyMzAwMDAwMDAxMjA0MUE0MDMwMDAwMjAzRjdBOAotOjEwMUIwMDAwMDQxQTYzRjAwMDAyMDNGOTA2MUE3MDYwMDAwMDAwMDQ3MgotOjEwMUIxMDAwMDYxQTMyQzAwMDAwMDAwODAyMUFBRTNDMDAwMDAwMDBBNQotOjEwMUIyMDAwMDYxQTUwNzAwMDAwMDAwMjA2MUE1Mjc4MDAwMDAwMTJENwotOjEwMUIzMDAwMDQxQTQwMzgwMDAyMDNGQjA0MUE2M0Y4MDAwMjAzRkQ5NAotOjEwMUI0MDAwMDYxQTcwNzAwMDAwMDAwNDA2MUEzMkUwMDAwMDAwMDg1NwotOjEwMUI1MDAwMDIwMEEyQTQwMDAwMDIwOTAyMDBBMjcwMDAwMDAwMDAxRQotOjEwMUI2MDAwMDIwMEEyNzQwMDAwMDAwMDAyMDBBMjcwMDAwMDAwMDA0OQotOjEwMUI3MDAwMDIwMEEyNzQwMDAwMDAwMDAyMDBBMjcwMDAwMDAwMDAzOQotOjEwMUI4MDAwMDIwMEEyNzQwMDAwMDAwMDAyMDBBMjcwMDAwMDAwMDAyOQotOjEwMUI5MDAwMDIwMEEyNzQwMDAwMDAwMDAyMDEwMEI0MDAwMDAwMDE3NQotOjEwMUJBMDAwMDIwMTAwQjgwMDAwMDAwMTAyMDEwMENDMDAwMDAwMDFBOQotOjEwMUJCMDAwMDIwMTAwRDAwMDAwMDAwMTAyMDEwMERDMDAwMDAwMDE3MQotOjEwMUJDMDAwMDIwMTAxMDAwMDAwMDAwMTAyMDEwMTA0MDAwMDAwMDEwNwotOjEwMUJEMDAwMDIwMTAwN0MwMDMwMDAwMDAyMDEwMDg0MDAwMDAwMjhBNwotOjEwMUJFMDAwMDIwMTAwOEMwMDAwMDAwMDAyMDEwMTMwMDAwMDAwMDQyRQotOjEwMUJGMDAwMDIwMTAyNUMwMDAwMDAwMTAyMDEwMzI4MDAwMDAwMDA1NQotOjEwMUMwMDAwMDIwMTYwNTgwMDAwRkZGRjAyMDE2MDcwMDAwMDAwMDc0MQotOjEwMUMxMDAwMDIwMTA1NTQwMDAwMDAzMDAyMDEwMEM0MDAwMDAwMDE3MAotOjEwMUMyMDAwMDIwMTAwRjgwMDAwMDAwMTAyMDEwMEYwMDAwMDAwMDFDNAotOjEwMUMzMDAwMDIwMTAwODAwMDMwMDAwMDAyMDEwMDg4MDAwMDAwMjgzRQotOjEwMUM0MDAwMDIwMTAwOTAwMDAwMDAwMDAyMDEwMTM0MDAwMDAwMDRDNQotOjEwMUM1MDAwMDIwMTAyREMwMDAwMDAwMTAyMDEwMzJDMDAwMDAwMDA3MAotOjEwMUM2MDAwMDIwMTYwNUMwMDAwRkZGRjAyMDE2MDc0MDAwMDAwMDdEOQotOjEwMUM3MDAwMDIwMTA1NjQwMDAwMDAzMDAyMDEwMEM4MDAwMDAwMDFGQwotOjEwMUM4MDAwMDIwMTAwRkMwMDAwMDAwMTAyMDEwMEY0MDAwMDAwMDE1QwotOjEwMUM5MDAwMDIwQzEwMDAwMDAwMDAyODAyMEMyMDA4MDAwMDAyMTFCNQotOjEwMUNBMDAwMDIwQzIwMEMwMDAwMDIwMDAyMEMyMDEwMDAwMDAyMDRCNAotOjEwMUNCMDAwMDIwQzIwMUMwMDAwRkZGRjAyMEMyMDIwMDAwMEZGRkY5MAotOjEwMUNDMDAwMDIwQzIwMjQwMDAwRkZGRjAyMEMyMDI4MDAwMEZGRkY3MAotOjEwMUNEMDAwMDIwQzIwMzgwMDAwMDAwMDAyMEMyMDNDMDAwMDAwMzdGRAotOjEwMUNFMDAwMDIwQzIwNDAwMDAwMDAyMTAyMEMyMDQ0MDAwMDAwMjBEMwotOjEwMUNGMDAwMDYwQzIwNDgwMDAwMDAxRDAyMEMyMEJDMDAwMDAwMDE2MgotOjEwMUQwMDAwMDYwQzIwQzAwMDAwMDAzRjAyMEMyMUJDMDAwMDAwMDFCNgotOjEwMUQxMDAwMDIwQzIxQzAwMDAwMDAwMTAyMEMyMUM0MDAwMDAwMDFERgotOjEwMUQyMDAwMDYwQzIxQzgwMDAwMDAxQzAyMEMyMjM4MDdGRkZGRkYzMAotOjEwMUQzMDAwMDIwQzIyM0MwMDAwMDA3RjAyMEMyMjQwMDdGRkZGRkY0NAotOjEwMUQ0MDAwMDIwQzIyNDQwMDAwMDAzRjAxMEMyMjQ4MDAwMDAwMDA2OQotOjEwMUQ1MDAwMDEwQzIyNEMwMDAwMDAwMDAxMEMyMjUwMDAwMDAwMDA4OQotOjEwMUQ2MDAwMDEwQzIyNTQwMDAwMDAwMDAxMEMyMjU4MDAwMDAwMDA2OQotOjEwMUQ3MDAwMDEwQzIyNUMwMDAwMDAwMDAxMEMyMjYwMDAwMDAwMDA0OQotOjEwMUQ4MDAwMDEwQzIyNjQwMDAwMDAwMDAxMEMyMjY4MDAwMDAwMDAyOQotOjEwMUQ5MDAwMDEwQzIyNkMwMDAwMDAwMDAxMEMyMjcwMDAwMDAwMDAwOQotOjEwMURBMDAwMDEwQzIyNzQwMDAwMDAwMDAxMEMyMjc4MDAwMDAwMDBFOQotOjEwMURCMDAwMDEwQzIyN0MwMDAwMDAwMDAyMEMyMkQ4MDAwMEZGRkY3MgotOjEwMURDMDAwMDIwQzIyREMwMDAwRkZGRjAyMEMyMkUwMDAwMEZGRkZGQgotOjEwMUREMDAwMDIwQzIyRTQwMDAwRkZGRjBDMEMyMDAwMDAwMDAzRThDRQotOjEwMURFMDAwMEEwQzIwMDAwMDAwMDAwMTBCMEMyMDAwMDAwMDAwMDM4MgotOjEwMURGMDAwMDIwQzQwMDgwMDAwMTAxMTAyMEM0MDBDMDAwMDEwMDAwMgotOjEwMUUwMDAwMDIwQzQwMTAwMDAwMTAwNDAyMEM0MDE0MDAwMDEwMjFDRAotOjEwMUUxMDAwMDIwQzQwMUMwMDAwRkZGRjAyMEM0MDIwMDAwMEZGRkZFRQotOjEwMUUyMDAwMDIwQzQwMjQwMDAwRkZGRjAyMEM0MDI4MDAwMEZGRkZDRQotOjEwMUUzMDAwMDIwQzQwMzgwMDAwMDA0NjAyMEM0MDNDMDAwMDAwMEM0MAotOjEwMUU0MDAwMDYwQzQwNDAwMDAwMDAwMjAyMEM0MDQ4MDAwMDAwMTg1MAotOjEwMUU1MDAwMDIwQzQwNEMwMDAwMDBGMDA2MEM0MDUwMDAwMDAwMUYzNwotOjEwMUU2MDAwMDIwQzQwQ0MwMDAwMDAwMTA2MEM0MEQwMDAwMDAwM0FGQgotOjEwMUU3MDAwMDIwQzQxQjgwMDAwMDAwMTA2MEM0MUJDMDAwMDAwMDM0OAotOjEwMUU4MDAwMDIwQzQxQzgwMDAwMDAwMTAyMEM0MUNDMDAwMDAwMDExRQotOjEwMUU5MDAwMDYwQzQxRDAwMDAwMDAxQTAyMEM0MjM4MDdGRkZGRkY3OQotOjEwMUVBMDAwMDIwQzQyM0MwMDAwMDA3RjAyMEM0MjQwMDdGRkZGRkY5MwotOjEwMUVCMDAwMDIwQzQyNDQwMDAwMDAzRjAxMEM0MjQ4MDAwMDAwMDBCOAotOjEwMUVDMDAwMDEwQzQyNEMwMDAwMDAwMDAxMEM0MjUwMDAwMDAwMDBEOAotOjEwMUVEMDAwMDEwQzQyNTQwMDAwMDAwMDAxMEM0MjU4MDAwMDAwMDBCOAotOjEwMUVFMDAwMDEwQzQyNUMwMDAwMDAwMDAxMEM0MjYwMDAwMDAwMDA5OAotOjEwMUVGMDAwMDEwQzQyNjQwMDAwMDAwMDAxMEM0MjY4MDAwMDAwMDA3OAotOjEwMUYwMDAwMDEwQzQyNkMwMDAwMDAwMDAxMEM0MjcwMDAwMDAwMDA1NwotOjEwMUYxMDAwMDEwQzQyNzQwMDAwMDAwMDAxMEM0Mjc4MDAwMDAwMDAzNwotOjEwMUYyMDAwMDEwQzQyN0MwMDAwMDAwMDAxMEM0MjgwMDAwMDAwMDAxNwotOjEwMUYzMDAwMDIwQzQyRDgwMDAwRkZGRjAyMEM0MkRDMDAwMEZGRkY1MQotOjEwMUY0MDAwMDIwQzQyRTAwMDAwRkZGRjAyMEM0MkU0MDAwMEZGRkYzMQotOjEwMUY1MDAwMEMwQzQwMDAwMDAwMDNFODBBMEM0MDAwMDAwMDAwMDFFNwotOjEwMUY2MDAwMEIwQzQwMDAwMDAwMDAwMzA2MEQ0MDAwMDAwMDBBMDBCQQotOjEwMUY3MDAwMDIwRDAwNDQwMDAwMDAzMjAyMEQwMDhDMDIxNTAwMjAwQQotOjEwMUY4MDAwMDIwRDAwOTAwMjE1MDAyMDAyMEQwMDk0MDgxMDAwMDBDMAotOjEwMUY5MDAwMDIwRDAwOTgwMDAwMDAzNjAyMEQwMEEwMDAwMDAwMDBCNQotOjEwMUZBMDAwMDIwRDAwQTQwMDAwMDAwNDAyMEQwMEE4MDAwMDAwMDRCRgotOjEwMUZCMDAwMDYwRDAwQUMwMDAwMDAwMjAyMEQwMEI4MDAwMDAwMDI5NwotOjEwMUZDMDAwMDIwRDAwQzAwMDAwMDAwMTAyMEQwMEM4MDAwMDAwMDI2OAotOjEwMUZEMDAwMDIwRDAwQ0MwMDAwMDAwMjAyMEQwMTVDMDAwMDAwMDFCNwotOjEwMUZFMDAwMDIwRDAxNjQwMDAwMDAwMTAyMEQwMTY4MDAwMDAwMDIwMgotOjEwMUZGMDAwMDIwRDAyMDQwMDAwMDAwMTAyMEQwMjBDMDAwMDAwMjA4RQotOjEwMjAwMDAwMDIwRDAyMTAwMDAwMDA0MDAyMEQwMjE0MDAwMDAwNDAwQQotOjEwMjAxMDAwMDIwRDAyMjAwMDAwMDAwMzAyMEQwMjI0MDAwMDAwMTgzRgotOjEwMjAyMDAwMDYwRDAyODAwMDAwMDAxMjA0MEQwMzAwMDAxODAzRkZEQgotOjEwMjAzMDAwMDYwRDAzNjAwMDAwMDAwQzAyMEQwMDRDMDAwMDAwMDFDMgotOjEwMjA0MDAwMDIwRDAwNTAwMDAwMDAwMjAyMEQwMDU0MDAwMDAwMDBDQwotOjEwMjA1MDAwMDIwRDAwNTgwMDAwMDAwODA2MEQwMDVDMDAwMDAwMDQ5RQotOjEwMjA2MDAwMDIwRDAwQzQwMDAwMDAwNDAyMEQwMDA0MDAwMDAwMDE4NQotOjEwMjA3MDAwMDIwRDAwMDgwMDAwMDAwMTAyMEQwMDBDMDAwMDAwMDEyQwotOjEwMjA4MDAwMDIwRDAwMTAwMDAwMDAwMTAyMEQwMDE0MDAwMDAwMDEwQwotOjEwMjA5MDAwMDIwRDAwMTgwMDAwMDAwMTAyMEQwMDFDMDAwMDAwMDFFQwotOjEwMjBBMDAwMDIwRDAwMjAwMDAwMDAwMTAyMEQwMDI0MDAwMDAwMDFDQwotOjEwMjBCMDAwMDIwRDAwMjgwMDAwMDAwMTAyMEQwMDJDMDAwMDAwMDFBQwotOjEwMjBDMDAwMDIwRDAwMzAwMDAwMDAwMTAyMEQwMDM0MDAwMDAwMDE4QwotOjEwMjBEMDAwMDIwRDAwMzgwMDAwMDAwMTAyMEQwMDNDMDAwMDAwMDE2QwotOjEwMjBFMDAwMDIwRDAxMTQwMDAwMDAwOTAyMEQwMTFDMDAwMDAwMEE4RAotOjEwMjBGMDAwMDIwRDAxMjQwMDAwMDAwMDAyMEQwMTJDMDAwMDAwMDA3MAotOjEwMjEwMDAwMDIwRDAxMzQwMDAwMDAwMDAyMEQwMTNDMDAwMDAwMEIzNAotOjEwMjExMDAwMDIwRDAxNDQwMDAwMDAwMDAyMEQwMTE4MDAwMDAwMjkxQQotOjEwMjEyMDAwMDIwRDAxMjAwMDAwMDAyQTAyMEQwMTI4MDAwMDAwMjBGRAotOjEwMjEzMDAwMDIwRDAxMzAwMDAwMDAyMDAyMEQwMTM4MDAwMDAwMjBENwotOjEwMjE0MDAwMDIwRDAxNDAwMDAwMDAyQjAyMEQwMTQ4MDAwMDAwMjA5QwotOjEwMjE1MDAwMDIwRDAxMTQwMDAwMDAxOTAyMEQwMTFDMDAwMDAwMUFGQwotOjEwMjE2MDAwMDIwRDAxMjQwMDAwMDAxMDAyMEQwMTJDMDAwMDAwMTBERgotOjEwMjE3MDAwMDIwRDAxMzQwMDAwMDAxMDAyMEQwMTNDMDAwMDAwMUJBNAotOjEwMjE4MDAwMDIwRDAxNDQwMDAwMDAxMDAyMEQwMTE4MDAwMDAwMzk4QQotOjEwMjE5MDAwMDIwRDAxMjAwMDAwMDAzQTAyMEQwMTI4MDAwMDAwMzA2RAotOjEwMjFBMDAwMDIwRDAxMzAwMDAwMDAzMDAyMEQwMTM4MDAwMDAwMzA0NwotOjEwMjFCMDAwMDIwRDAxNDAwMDAwMDAzQjAyMEQwMTQ4MDAwMDAwMzAwQwotOjEwMjFDMDAwMDIwRDAxMTQwMDAwMDA0OTAyMEQwMTFDMDAwMDAwNEEyQwotOjEwMjFEMDAwMDIwRDAxMjQwMDAwMDA0MDAyMEQwMTJDMDAwMDAwNDAwRgotOjEwMjFFMDAwMDIwRDAxMzQwMDAwMDA0MDAyMEQwMTNDMDAwMDAwNEJENAotOjEwMjFGMDAwMDIwRDAxNDQwMDAwMDA0MDAyMEQwMTE4MDAwMDAwNjlCQQotOjEwMjIwMDAwMDIwRDAxMjAwMDAwMDA2QTAyMEQwMTI4MDAwMDAwNjA5QwotOjEwMjIxMDAwMDIwRDAxMzAwMDAwMDA2MDAyMEQwMTM4MDAwMDAwNjA3NgotOjEwMjIyMDAwMDIwRDAxNDAwMDAwMDA2QjAyMEQwMTQ4MDAwMDAwNjAzQgotOjEwMjIzMDAwMDIwRDAxMTQwMDAwMDA1OTAyMEQwMTFDMDAwMDAwNUE5QgotOjEwMjI0MDAwMDIwRDAxMjQwMDAwMDA1MDAyMEQwMTJDMDAwMDAwNTA3RQotOjEwMjI1MDAwMDIwRDAxMzQwMDAwMDA1MDAyMEQwMTNDMDAwMDAwNUI0MwotOjEwMjI2MDAwMDIwRDAxNDQwMDAwMDA1MDAyMEQwMTE4MDAwMDAwNzkyOQotOjEwMjI3MDAwMDIwRDAxMjAwMDAwMDA3QTAyMEQwMTI4MDAwMDAwNzAwQwotOjEwMjI4MDAwMDIwRDAxMzAwMDAwMDA3MDAyMEQwMTM4MDAwMDAwNzBFNgotOjEwMjI5MDAwMDIwRDAxNDAwMDAwMDA3QjAyMEQwMTQ4MDAwMDAwNzBBQgotOjEwMjJBMDAwMDYwRTIwMDAwMDAwMDgwMDAyMEUwMDRDMDAwMDAwMzI2NAotOjEwMjJCMDAwMDIwRTAwOTQwMjE1MDAyMDAyMEUwMDk4MDIxNTAwMjA2NAotOjEwMjJDMDAwMDIwRTAwOUMwMDAwMDAzMDAyMEUwMEEwMDgxMDAwMDA2QQotOjEwMjJEMDAwMDIwRTAwQTQwMDAwMDAzNjAyMEUwMEE4MDAwMDAwMzAyQwotOjEwMjJFMDAwMDIwRTAwQUMwMDAwMDAzMTAyMEUwMEI0MDAwMDAwMDMzQQotOjEwMjJGMDAwMDIwRTAwQjgwMDAwMDAwMDAyMEUwMEM0MDAwMDAwMDA0MgotOjEwMjMwMDAwMDIwRTAwQ0MwMDAwMDAwNjAyMEUwMEQ4MDAwMDAwMDEwMgotOjEwMjMxMDAwMDIwRTAxNDQwMDAwMDAwMTAyMEUwMTRDMDAwMDAwMDEwOQotOjEwMjMyMDAwMDIwRTAxNTAwMDAwMDAwMjAyMEUwMjA0MDAwMDAwMDEzMwotOjEwMjMzMDAwMDIwRTAyMEMwMDAwMDA0MDAyMEUwMjEwMDAwMDAwNDBERAotOjEwMjM0MDAwMDIwRTAyMUMwMDAwMDAwNDAyMEUwMjIwMDAwMDAwMjAwOQotOjEwMjM1MDAwMDIwRTAyMjQwMDAwMDAwRTAyMEUwMjI4MDAwMDAwMUJFNAotOjEwMjM2MDAwMDYwRTAzMDAwMDAwMDAxMjA0MEUwMjgwMDAxQjA0MTc3QQotOjEwMjM3MDAwMDYwRTAyRUMwMDAwMDAwNTAyMEUwMDU0MDAwMDAwMENFNgotOjEwMjM4MDAwMDIwRTAwNTgwMDAwMDAwQzAyMEUwMDVDMDAwMDAwMDA2RAotOjEwMjM5MDAwMDIwRTAwNjAwMDAwMDAxMDAyMEUwMDY0MDAwMDAwMTAzOQotOjEwMjNBMDAwMDYwRTAwNjgwMDAwMDAwMzAyMEUwMERDMDAwMDAwMDNCRgotOjEwMjNCMDAwMDIwRTAwMDQwMDAwMDAwMTAyMEUwMDA4MDAwMDAwMDFFRgotOjEwMjNDMDAwMDIwRTAwMEMwMDAwMDAwMTAyMEUwMDEwMDAwMDAwMDFDRgotOjEwMjNEMDAwMDIwRTAwMTQwMDAwMDAwMTAyMEUwMDE4MDAwMDAwMDFBRgotOjEwMjNFMDAwMDIwRTAwMUMwMDAwMDAwMTAyMEUwMDIwMDAwMDAwMDE4RgotOjEwMjNGMDAwMDIwRTAwMjQwMDAwMDAwMTAyMEUwMDI4MDAwMDAwMDE2RgotOjEwMjQwMDAwMDIwRTAwMkMwMDAwMDAwMTAyMEUwMDMwMDAwMDAwMDE0RQotOjEwMjQxMDAwMDIwRTAwMzQwMDAwMDAwMTAyMEUwMDM4MDAwMDAwMDEyRQotOjEwMjQyMDAwMDIwRTAwM0MwMDAwMDAwMTAyMEUwMDQwMDAwMDAwMDEwRQotOjEwMjQzMDAwMDIwRTAwNDQwMDAwMDAwMTAyMEUwMTEwMDAwMDAwMEYxNwotOjEwMjQ0MDAwMDIwRTAxMTgwMDAwMDAwMDAyMEUwMTIwMDAwMDAwMDAzMgotOjEwMjQ1MDAwMDIwRTAxMjgwMDAwMDAwMDAyMEUwMTE0MDAwMDAwMkZFRgotOjEwMjQ2MDAwMDIwRTAxMUMwMDAwMDAyMDAyMEUwMTI0MDAwMDAwMjBDQQotOjEwMjQ3MDAwMDIwRTAxMkMwMDAwMDAyMDAyMEUwMTEwMDAwMDAwMUZCRgotOjEwMjQ4MDAwMDIwRTAxMTgwMDAwMDAxMDAyMEUwMTIwMDAwMDAwMTBEMgotOjEwMjQ5MDAwMDIwRTAxMjgwMDAwMDAxMDAyMEUwMTE0MDAwMDAwM0Y4RgotOjEwMjRBMDAwMDIwRTAxMUMwMDAwMDAzMDAyMEUwMTI0MDAwMDAwMzA2QQotOjEwMjRCMDAwMDIwRTAxMkMwMDAwMDAzMDAyMEUwMTEwMDAwMDAwNEYzRgotOjEwMjRDMDAwMDIwRTAxMTgwMDAwMDA0MDAyMEUwMTIwMDAwMDAwNDAzMgotOjEwMjREMDAwMDIwRTAxMjgwMDAwMDA0MDAyMEUwMTE0MDAwMDAwNkZFRgotOjEwMjRFMDAwMDIwRTAxMUMwMDAwMDA2MDAyMEUwMTI0MDAwMDAwNjBDQQotOjEwMjRGMDAwMDIwRTAxMkMwMDAwMDA2MDAyMEUwMTEwMDAwMDAwNUZCRgotOjEwMjUwMDAwMDIwRTAxMTgwMDAwMDA1MDAyMEUwMTIwMDAwMDAwNTBEMQotOjEwMjUxMDAwMDIwRTAxMjgwMDAwMDA1MDAyMEUwMTE0MDAwMDAwN0Y4RQotOjEwMjUyMDAwMDIwRTAxMUMwMDAwMDA3MDAyMEUwMTI0MDAwMDAwNzA2OQotOjEwMjUzMDAwMDIwRTAxMkMwMDAwMDA3MDA3MzAwNDAwMDBENjAwMDBERAotOjEwMjU0MDAwMDgzMDA3RDgwMDA1MDQzMjA3MzQwMDAwMzIyQTAwMDBBMgotOjEwMjU1MDAwMDczNDgwMDAzMTMwMEM4QjA3MzUwMDAwMzhEMDE4RDg5NAotOjEwMjU2MDAwMDczNTgwMDAyRjgyMjcwRDA3MzYwMDAwMjYzNjMyRUUxMQotOjEwMjU3MDAwMDgzNjcxMDAzMUUwMDQzNDAyMzAwMEJDMDAwMDAwMzA0NQotOjEwMjU4MDAwMDEzMDAwMDAwMDAwMDAwMDAxMzAwMDA0MDAwMDAwMDBFNQotOjEwMjU5MDAwMDEzMDAwMDgwMDAwMDAwMDAxMzAwMDBDMDAwMDAwMDBDNQotOjEwMjVBMDAwMDEzMDAwMTAwMDAwMDAwMDAxMzAwMDE0MDAwMDAwMDBBNQotOjEwMjVCMDAwMDIzMDAwMjAwMDAwMDAwMTAyMzAwMDI0MDAwMDAwMDI3MAotOjEwMjVDMDAwMDIzMDAwMjgwMDAwMDAwMzAyMzAwMDJDMDAwMDAwMDA1MAotOjEwMjVEMDAwMDIzMDAwMzAwMDAwMDAwNDAyMzAwMDM0MDAwMDAwMDEyRQotOjEwMjVFMDAwMDIzMDAwMzgwMDAwMDAwMDAyMzAwMDNDMDAwMDAwMDExMgotOjEwMjVGMDAwMDIzMDAwNDAwMDAwMDAwNDAyMzAwMDQ0MDAwMDAwMDBFRgotOjEwMjYwMDAwMDIzMDAwNDgwMDAwMDAwMTAyMzAwMDRDMDAwMDAwMDNDRQotOjEwMjYxMDAwMDIzMDAwNTAwMDAwMDAwMDAyMzAwMDU0MDAwMDAwMDFCMQotOjEwMjYyMDAwMDIzMDAwNTgwMDAwMDAwNDAyMzAwMDVDMDAwMDAwMDA4RQotOjEwMjYzMDAwMDIzMDAwNjAwMDAwMDAwMTAyMzAwMDY0MDAwMDAwMDM2RQotOjEwMjY0MDAwMDIzMDAwNjgwMDAwMDAwMDAyMzAwMDZDMDAwMDAwMDE1MQotOjEwMjY1MDAwMDIzMDAwNzAwMDAwMDAwNDAyMzAwMDc0MDAwMDAwMDAyRQotOjEwMjY2MDAwMDIzMDAwNzgwMDAwMDAwNDAyMzAwMDdDMDAwMDAwMDMwQgotOjEwMjY3MDAwMDYzMDAwODAwMDAwMDAwMjAyMzAwMEE0MDAwMDdGRkY0RQotOjEwMjY4MDAwMDIzMDAwQTgwMDAwMDNGRjAyMzAwMjI0MDAwMDAwMDAxNgotOjEwMjY5MDAwMDIzMDAyMzQwMDAwMDAwMDAyMzAwMjRDMDAwMDAwMDA1MgotOjEwMjZBMDAwMDIzMDAyRTQwMDAwRkZGRjA2MzAyMDAwMDAwMDA4MDBCNgotOjEwMjZCMDAwMDIzMzhCQzAwMDAwMDAwMTAyMzM4MDAwMDAwMDAwMUFDQQotOjEwMjZDMDAwMDIzMzgwNDAwMDAwMDA0RTAyMzM4MDgwMDAwMDAwMTA4MgotOjEwMjZEMDAwMDIzMzgwQzAwMDAwMDAyMDBDMzM4MzAwMDAwODY0NzBDNwotOjEwMjZFMDAwMEEzMzgzMDAwMDAwMDE1NzBCMzM4MzAwMDAwMDA1NUZBRAotOjEwMjZGMDAwMEEzMzgzNDAwMDAwMDAwMDBDMzM4MzQwMDAwMDAyMjZCMAotOjEwMjcwMDAwMEIzMzgzNDAwMDAwMDAwMTAyMzM4MzgwMDAwODY0NzBCMwotOjEwMjcxMDAwMDIzMzgzQzAwMDAwMDIyNjAyMzMxNDgwMDAwMDAwMDE0RgotOjEwMjcyMDAwMEEzMzE0ODAwMDAwMDAwMDA2MzI4MDAwMDAwMDAxMDIxRAotOjEwMjczMDAwMDYzMjIwMDgwMDAwMDBDODA2MzIyMDAwMDAwMDAwMDIxNwotOjEwMjc0MDAwMDQzMjg1MjAwMDhGMDQzNjA2MzI4NzVDMDAwMDAwMDlDMQotOjEwMjc1MDAwMDYzMjNFQjAwMDAwMDAwNjA2MzIzRUQwMDAwMDAwMDIwNQotOjEwMjc2MDAwMDYzMjNFODAwMDAwMDAwQTA0MzIzRUE4MDAwMjA0QzU4MgotOjEwMjc3MDAwMDYzMjNFMDAwMDAwMDAyMDA2MzI1MDAwMDAwMDA5NDBGMgotOjEwMjc4MDAwMDYzMjQwMDAwMDAwMDAwNDA0MzI5NEMwMDAwMjA0Qzc3NgotOjEwMjc5MDAwMDYzMjQxMTAwMDAwMDAwMjA2MzJEMDAwMDAwMDAwNzAzNgotOjEwMjdBMDAwMDYzMkRCMDAwMDAwMDBENDA2MzJERUEwMDAwMDAwMDI4QQotOjEwMjdCMDAwMDYzMkUwMDAwMDAwMDgwMDA2MzMyNDAwMDAwMDAxMTg4MwotOjEwMjdDMDAwMDYzMjEwMDAwMDAwMDE4ODA2MzI1MDAwMDAwMDAwMjA5MAotOjEwMjdEMDAwMDYzMjUxMDAwMDAwMDAyMDA2MzI1MjAwMDAwMDAwMjBBNgotOjEwMjdFMDAwMDYzMjUzMDAwMDAwMDAyMDA2MzI1NDAwMDAwMDAwMjA5MgotOjEwMjdGMDAwMDYzMjU1MDAwMDAwMDAyMDA2MzI1NjAwMDAwMDAwMjA3RQotOjEwMjgwMDAwMDYzMjU3MDAwMDAwMDAyMDA2MzI1ODAwMDAwMDAwMjA2OQotOjEwMjgxMDAwMDYzMjU5MDAwMDAwMDAyMDA2MzI1QTAwMDAwMDAwMjA1NQotOjEwMjgyMDAwMDYzMjVCMDAwMDAwMDAyMDA2MzI1QzAwMDAwMDAwMjA0MQotOjEwMjgzMDAwMDYzMjVEMDAwMDAwMDAyMDA2MzI1RTAwMDAwMDAwMjAyRAotOjEwMjg0MDAwMDYzMjVGMDAwMDAwMDAyMDA2MzI4NEYwMDAwMDAwMDIyMwotOjEwMjg1MDAwMDQzMjg1MDAwMDAyMDRDOTA2MzI4NTA4MDAwMDAwMDIyNwotOjEwMjg2MDAwMDYzMkRFOTAwMDAwMDAwMjA2MzMyODYwMDAwMDAxMThFNgotOjEwMjg3MDAwMDYzMjE2MjAwMDAwMDE4ODA2MzI1MDgwMDAwMDAwMjAzOQotOjEwMjg4MDAwMDYzMjUxODAwMDAwMDAyMDA2MzI1MjgwMDAwMDAwMjBGNQotOjEwMjg5MDAwMDYzMjUzODAwMDAwMDAyMDA2MzI1NDgwMDAwMDAwMjBFMQotOjEwMjhBMDAwMDYzMjU1ODAwMDAwMDAyMDA2MzI1NjgwMDAwMDAwMjBDRAotOjEwMjhCMDAwMDYzMjU3ODAwMDAwMDAyMDA2MzI1ODgwMDAwMDAwMjBCOQotOjEwMjhDMDAwMDYzMjU5ODAwMDAwMDAyMDA2MzI1QTgwMDAwMDAwMjBBNQotOjEwMjhEMDAwMDYzMjVCODAwMDAwMDAyMDA2MzI1QzgwMDAwMDAwMjA5MQotOjEwMjhFMDAwMDYzMjVEODAwMDAwMDAyMDA2MzI1RTgwMDAwMDAwMjA3RAotOjEwMjhGMDAwMDYzMjVGODAwMDAwMDAyMDA2MzI4NEY4MDAwMDAwMDJFQgotOjEwMjkwMDAwMDQzMjg1MTAwMDAyMDRDQjA2MzI4NTE4MDAwMDAwMDI1NAotOjEwMjkxMDAwMDYzMkRFOTgwMDAwMDAwMjAyMzI4NDUwMDAwMDAwMDBGRgotOjEwMjkyMDAwMDYzMjQwMTAwMDAwMDAwMjAyMzI4NDU0MDAwMDAwMDAxMQotOjEwMjkzMDAwMDYzMjQwMjAwMDAwMDAwMjAyMzI4NDU4MDAwMDAwMDBFRAotOjEwMjk0MDAwMDYzMjQwMzAwMDAwMDAwMjAyMzI4NDVDMDAwMDAwMDBDOQotOjEwMjk1MDAwMDYzMjQwNDAwMDAwMDAwMjAyMzI4NDYwMDAwMDAwMDBBNQotOjEwMjk2MDAwMDYzMjQwNTAwMDAwMDAwMjAyMzI4NDY0MDAwMDAwMDA4MQotOjEwMjk3MDAwMDYzMjQwNjAwMDAwMDAwMjAyMzI4NDY4MDAwMDAwMDA1RAotOjEwMjk4MDAwMDYzMjQwNzAwMDAwMDAwMjAyMzI4NDZDMDAwMDAwMDAzOQotOjEwMjk5MDAwMDYzMjQwODAwMDAwMDAwMjA3MjAwNDAwMDA3MzAwMDA5RgotOjEwMjlBMDAwMDgyMDA3ODAwMDEwMDRDRDA3MjQwMDAwMkFGMTAwMDA1MQotOjEwMjlCMDAwMDcyNDgwMDAyNzY3MEFCRDA4MjREMzUwNjNGQzA0Q0Y5NgotOjEwMjlDMDAwMDIyMDAwQkMwMDAwMDAzMDAxMjAwMDAwMDAwMDAwMDBEOAotOjEwMjlEMDAwMDEyMDAwMDQwMDAwMDAwMDAxMjAwMDA4MDAwMDAwMDBBOQotOjEwMjlFMDAwMDEyMDAwMEMwMDAwMDAwMDAxMjAwMDEwMDAwMDAwMDA4OQotOjEwMjlGMDAwMDEyMDAwMTQwMDAwMDAwMDAyMjAwMDIwMDAwMDAwMDE1RgotOjEwMkEwMDAwMDIyMDAwMjQwMDAwMDAwMjAyMjAwMDI4MDAwMDAwMDMzMQotOjEwMkExMDAwMDIyMDAwMkMwMDAwMDAwMDAyMjAwMDMwMDAwMDAwMDQxMgotOjEwMkEyMDAwMDIyMDAwMzQwMDAwMDAwMTAyMjAwMDM4MDAwMDAwMDBGNQotOjEwMkEzMDAwMDIyMDAwM0MwMDAwMDAwMTAyMjAwMDQwMDAwMDAwMDREMQotOjEwMkE0MDAwMDIyMDAwNDQwMDAwMDAwMDAyMjAwMDQ4MDAwMDAwMDFCNQotOjEwMkE1MDAwMDIyMDAwNEMwMDAwMDAwMzAyMjAwMDUwMDAwMDAwMDA5MwotOjEwMkE2MDAwMDIyMDAwNTQwMDAwMDAwMTAyMjAwMDU4MDAwMDAwMDQ3MQotOjEwMkE3MDAwMDIyMDAwNUMwMDAwMDAwMDAyMjAwMDYwMDAwMDAwMDE1NQotOjEwMkE4MDAwMDIyMDAwNjQwMDAwMDAwMzAyMjAwMDY4MDAwMDAwMDAzMwotOjEwMkE5MDAwMDIyMDAwNkMwMDAwMDAwMTAyMjAwMDcwMDAwMDAwMDQxMQotOjEwMkFBMDAwMDIyMDAwNzQwMDAwMDAwMDAyMjAwMDc4MDAwMDAwMDRGMgotOjEwMkFCMDAwMDIyMDAwN0MwMDAwMDAwMzA2MjAwMDgwMDAwMDAwMDJDRAotOjEwMkFDMDAwMDIyMDAwQTQwMDAwN0ZGRjAyMjAwMEE4MDAwMDAzRkZGNgotOjEwMkFEMDAwMDIyMDAyMjQwMDAwMDAwMDAyMjAwMjM0MDAwMDAwMDA1NgotOjEwMkFFMDAwMDIyMDAyNEMwMDAwMDAwMDAyMjAwMkU0MDAwMEZGRkY3MAotOjEwMkFGMDAwMDYyMDIwMDAwMDAwMDgwMDAyMjM4QkMwMDAwMDAwMDExNwotOjEwMkIwMDAwMDIyMzgwMDAwMDAwMDAxMDAyMjM4MDQwMDAwMDAwMTIxOQotOjEwMkIxMDAwMDIyMzgwODAwMDAwMDAzMDAyMjM4MEMwMDAwMDAwMEVFRAotOjEwMkIyMDAwMEMyMzgzMDAwMDA4NjQ3MDBBMjM4MzAwMDAwMDAxNTcwRgotOjEwMkIzMDAwMEIyMzgzMDAwMDAwMDU1RjBBMjM4MzQwMDAwMDAwMDA5MAotOjEwMkI0MDAwMEMyMzgzNDAwMDAwMDIyNjBCMjM4MzQwMDAwMDAwMDE3OQotOjEwMkI1MDAwMDIyMzgzODAwMDA4NjQ3MDAyMjM4M0MwMDAwMDAyMjZFMQotOjEwMkI2MDAwMDIyMzE0ODAwMDAwMDAwMTBBMjMxNDgwMDAwMDAwMDBFQQotOjEwMkI3MDAwMDYyMjEwMDAwMDAwMDA0MjA2MjIyMDA4MDAwMDAwQzhDMwotOjEwMkI4MDAwMDYyMjIwMDAwMDAwMDAwMjA2MjJCMDAwMDAwMDAzMzBGMAotOjEwMkI5MDAwMDYyMkY0MDAwMDAwMDA1MzA0MjJGNTRDMDAwMTA0RDE4OQotOjEwMkJBMDAwMDYyMkY1NTAwMDAwMDAwMzA0MjJGNTVDMDAwMTA0RDI2NwotOjEwMkJCMDAwMDYyMkY1NjAwMDAwMDAwMzA0MjJGNTZDMDAwMTA0RDMzNgotOjEwMkJDMDAwMDYyMkY1NzAwMDAwMDAwMzA0MjJGNTdDMDAwMTA0RDQwNQotOjEwMkJEMDAwMDYyMkY1ODAwMDAwMDAwMzA0MjJGNThDMDAwMTA0RDVENAotOjEwMkJFMDAwMDYyMkY1OTAwMDAwMDAwMzA0MjJGNTlDMDAwMTA0RDZBMwotOjEwMkJGMDAwMDYyMkY1QTAwMDAwMDAwMzA0MjJGNUFDMDAwMTA0RDc3MgotOjEwMkMwMDAwMDYyMkY1QjAwMDAwMDAwMzA0MjJGNUJDMDAwMTA0RDg0MAotOjEwMkMxMDAwMDYyMkY1QzAwMDAwMDA0NjA2MjJFMjAwMDAwMDA0NDA0MwotOjEwMkMyMDAwMDQyMjEyNDAwMDkwMDREOTA2MjIzMDAwMDAwMDAwQzBBNwotOjEwMkMzMDAwMDYyMjY3MDAwMDAwMDEwMDA2MjI5MDAwMDAwMDA0MDA0OAotOjEwMkM0MDAwMDQyMjZCMDgwMDIwMDU2OTA2MjIxMUYwMDAwMDAwMDYyRQotOjEwMkM1MDAwMDQyMjEyMDgwMDA2MDU4OTA2MjIxMjIwMDAwMDAwMDI0NAotOjEwMkM2MDAwMDYyMjQwMDAwMDAwMDVDMDA2MjJDMDAwMDAwMDAwMDY0OQotOjEwMkM3MDAwMDQyMkMwMTgwMDA2MDU4RjA2MjJDMDMwMDAwMDAwMEE5QQotOjEwMkM4MDAwMDQyMkMwNTgwMDA2MDU5NTA2MjJDMDcwMDAwMDAwMEEwNAotOjEwMkM5MDAwMDQyMkMwOTgwMDA2MDU5QjA2MjJDMEIwMDAwMDAwMEE2RQotOjEwMkNBMDAwMDQyMkMwRDgwMDA2MDVBMTA2MjJDMEYwMDAwMDAwMEFEOAotOjEwMkNCMDAwMDQyMkMxMTgwMDA2MDVBNzA2MjJDMTMwMDAwMDAwMEE0MAotOjEwMkNDMDAwMDQyMkMxNTgwMDA2MDVBRDA2MjJDMTcwMDAwMDAwMEFBQQotOjEwMkNEMDAwMDQyMkMxOTgwMDA2MDVCMzA2MjJDMUIwMDAwMDAwMEExNAotOjEwMkNFMDAwMDQyMkMxRDgwMDA2MDVCOTA2MjJDMUYwMDAwMDAwMEE3RQotOjEwMkNGMDAwMDQyMkMyMTgwMDA2MDVCRjA2MjJDMjMwMDAwMDAwMEFFNgotOjEwMkQwMDAwMDQyMkMyNTgwMDA2MDVDNTA2MjJDMjcwMDAwMDAwMEE0RgotOjEwMkQxMDAwMDQyMkMyOTgwMDA2MDVDQjA2MjJDMkIwMDAwMDAwMEFCOQotOjEwMkQyMDAwMDQyMkMyRDgwMDA2MDVEMTA2MjJDMkYwMDAwMDAwMEEyMwotOjEwMkQzMDAwMDQyMkMzMTgwMDA2MDVENzA2MjJDMzMwMDAwMDAwMEE4QgotOjEwMkQ0MDAwMDQyMkMzNTgwMDA2MDVERDA2MjJDMzcwMDAwMDAwMEFGNQotOjEwMkQ1MDAwMDQyMkMzOTgwMDA2MDVFMzA2MjJDM0IwMDAwMDAwMEE1RgotOjEwMkQ2MDAwMDQyMkMzRDgwMDA2MDVFOTA2MjJDM0YwMDAwMDAwMEFDOQotOjEwMkQ3MDAwMDQyMkM0MTgwMDA2MDVFRjA2MjJDNDMwMDAwMDAwMEEzMQotOjEwMkQ4MDAwMDQyMkM0NTgwMDA2MDVGNTA2MjJDNDcwMDAwMDAwMEE5QgotOjEwMkQ5MDAwMDQyMkM0OTgwMDA2MDVGQjA2MjJDNEIwMDAwMDAwMEEwNQotOjEwMkRBMDAwMDQyMkM0RDgwMDA2MDYwMTA2MjJDNEYwMDAwMDAwMEE2RQotOjEwMkRCMDAwMDQyMkM1MTgwMDA2MDYwNzA2MjJDNTMwMDAwMDAwMEFENgotOjEwMkRDMDAwMDQyMkM1NTgwMDA2MDYwRDA2MjJDNTcwMDAwMDAwMEE0MAotOjEwMkREMDAwMDQyMkM1OTgwMDA2MDYxMzA2MjJDNUIwMDAwMDAwMEFBQQotOjEwMkRFMDAwMDQyMkM1RDgwMDA2MDYxOTA2MjJDNUYwMDAwMDAwMEExNAotOjEwMkRGMDAwMDQyMkM2MTgwMDA2MDYxRjA2MjJDNjMwMDAwMDAwMEE3QwotOjEwMkUwMDAwMDQyMkM2NTgwMDA2MDYyNTA2MjJDNjcwMDAwMDAwMEFFNQotOjEwMkUxMDAwMDQyMkM2OTgwMDA2MDYyQjA2MjJDNkIwMDAwMDAwMEE0RgotOjEwMkUyMDAwMDQyMkM2RDgwMDA2MDYzMTA2MjJDNkYwMDAwMDAwMEFCOQotOjEwMkUzMDAwMDQyMkM3MTgwMDA2MDYzNzA2MjJDNzMwMDAwMDAwMEEyMQotOjEwMkU0MDAwMDQyMkM3NTgwMDA2MDYzRDA2MjJDNzcwMDAwMDAwMEE4QgotOjEwMkU1MDAwMDQyMkM3OTgwMDA2MDY0MzA2MjJDN0IwMDAwMDAwMEFGNQotOjEwMkU2MDAwMDQyMkM3RDgwMDA2MDY0OTA2MjJDN0YwMDAwMDAwMEE1RgotOjEwMkU3MDAwMDQyMkM4MTgwMDA2MDY0RjA2MjJDODMwMDAwMDAwMEFDNwotOjEwMkU4MDAwMDQyMkM4NTgwMDA2MDY1NTA2MjJDODcwMDAwMDAwMEEzMQotOjEwMkU5MDAwMDQyMkM4OTgwMDA2MDY1QjA2MjJDOEIwMDAwMDAwMEE5QgotOjEwMkVBMDAwMDQyMkM4RDgwMDA2MDY2MTA2MjJDOEYwMDAwMDAwMEEwNQotOjEwMkVCMDAwMDQyMkM5MTgwMDA2MDY2NzA2MjJDOTMwMDAwMDAwMEE2RAotOjEwMkVDMDAwMDQyMkM5NTgwMDA2MDY2RDA2MjJDOTcwMDAwMDAwMEFENwotOjEwMkVEMDAwMDQyMkM5OTgwMDA2MDY3MzA2MjJDOUIwMDAwMDAwMEE0MQotOjEwMkVFMDAwMDQyMkM5RDgwMDA2MDY3OTA2MjJDOUYwMDAwMDAwMEFBQgotOjEwMkVGMDAwMDQyMkNBMTgwMDA2MDY3RjA2MjJDQTMwMDAwMDAwMEExMwotOjEwMkYwMDAwMDQyMkNBNTgwMDA2MDY4NTA2MjJDQTcwMDAwMDAwMEE3QwotOjEwMkYxMDAwMDQyMkNBOTgwMDA2MDY4QjA2MjJDQUIwMDAwMDAwMEFFNgotOjEwMkYyMDAwMDQyMkNBRDgwMDA2MDY5MTA2MjJDQUYwMDAwMDAwMEE1MAotOjEwMkYzMDAwMDQyMkNCMTgwMDA2MDY5NzA2MjJDQjMwMDAwMDAwMEFCOAotOjEwMkY0MDAwMDQyMkNCNTgwMDA2MDY5RDA2MjJDQjcwMDAwMDAwMEEyMgotOjEwMkY1MDAwMDQyMkNCOTgwMDA2MDZBMzA2MjJDQkIwMDAwMDAwMEE4QwotOjEwMkY2MDAwMDQyMkNCRDgwMDA2MDZBOTA2MjJDQkYwMDAwMDAwMEFGNgotOjEwMkY3MDAwMDQyMkNDMTgwMDA2MDZBRjA2MjJDQzMwMDAwMDAwMEE1RQotOjEwMkY4MDAwMDQyMkNDNTgwMDA2MDZCNTA2MjJDQzcwMDAwMDAwMEFDOAotOjEwMkY5MDAwMDQyMkNDOTgwMDA2MDZCQjA2MjJDQ0IwMDAwMDAwMEEzMgotOjEwMkZBMDAwMDQyMkNDRDgwMDA2MDZDMTA2MjJDQ0YwMDAwMDAwMEE5QwotOjEwMkZCMDAwMDQyMkNEMTgwMDA2MDZDNzA2MjJDRDMwMDAwMDAwMEEwNAotOjEwMkZDMDAwMDQyMkNENTgwMDA2MDZDRDA2MjJDRDcwMDAwMDAwMEE2RQotOjEwMkZEMDAwMDQyMkNEOTgwMDA2MDZEMzA2MjJDREIwMDAwMDAwMEFEOAotOjEwMkZFMDAwMDQyMkNERDgwMDA2MDZEOTA2MjJDREYwMDAwMDAwMEE0MgotOjEwMkZGMDAwMDQyMkNFMTgwMDA2MDZERjA2MjJDRTMwMDAwMDAwMEFBQQotOjEwMzAwMDAwMDQyMkNFNTgwMDA2MDZFNTA2MjJDRTcwMDAwMDAwMEExMwotOjEwMzAxMDAwMDQyMkNFOTgwMDA2MDZFQjA2MjJDRUIwMDAwMDAwMEE3RAotOjEwMzAyMDAwMDQyMkNFRDgwMDA2MDZGMTA2MjJDRUYwMDAwMDAwMEFFNwotOjEwMzAzMDAwMDQyMkNGMTgwMDA2MDZGNzA2MjJDRjMwMDAwMDAwMEE0RgotOjEwMzA0MDAwMDQyMkNGNTgwMDA2MDZGRDA2MjJDRjcwMDAwMDAwMEFCOQotOjEwMzA1MDAwMDQyMkNGOTgwMDA2MDcwMzA2MjJDRkIwMDAwMDAwMEEyMgotOjEwMzA2MDAwMDQyMkNGRDgwMDA2MDcwOTA2MjJDRkYwMDAwMDAwMEE4QwotOjEwMzA3MDAwMDQyMkQwMTgwMDA2MDcwRjA2MjJEMDMwMDAwMDAwMEFGNAotOjEwMzA4MDAwMDQyMkQwNTgwMDA2MDcxNTA2MjJEMDcwMDAwMDAwMEE1RQotOjEwMzA5MDAwMDQyMkQwOTgwMDA2MDcxQjA2MjJEMEIwMDAwMDAwMEFDOAotOjEwMzBBMDAwMDQyMkQwRDgwMDA2MDcyMTA2MjJEMEYwMDAwMDAwMEEzMgotOjEwMzBCMDAwMDQyMkQxMTgwMDA2MDcyNzA2MjJEMTMwMDAwMDAwMEE5QQotOjEwMzBDMDAwMDQyMkQxNTgwMDA2MDcyRDA2MjJEMTcwMDAwMDAwMEEwNAotOjEwMzBEMDAwMDQyMkQxOTgwMDA2MDczMzA2MjJEMUIwMDAwMDAwMEE2RQotOjEwMzBFMDAwMDQyMkQxRDgwMDA2MDczOTA2MjJEMUYwMDAwMDAwMEFEOAotOjEwMzBGMDAwMDQyMkQyMTgwMDA2MDczRjA2MjJEMjMwMDAwMDAwMEE0MAotOjEwMzEwMDAwMDQyMkQyNTgwMDA2MDc0NTA2MjJEMjcwMDAwMDAwMEFBOQotOjEwMzExMDAwMDQyMkQyOTgwMDA2MDc0QjA2MjJEMkIwMDAwMDAwMEExMwotOjEwMzEyMDAwMDQyMkQyRDgwMDA2MDc1MTA2MjJEMkYwMDAwMDAwMEE3RAotOjEwMzEzMDAwMDQyMkQzMTgwMDA2MDc1NzA2MjJEMzMwMDAwMDAwMEFFNQotOjEwMzE0MDAwMDQyMkQzNTgwMDA2MDc1RDA2MjJEMzcwMDAwMDAwMEE0RgotOjEwMzE1MDAwMDQyMkQzOTgwMDA2MDc2MzA2MjJEM0IwMDAwMDAwMEFCOQotOjEwMzE2MDAwMDQyMkQzRDgwMDA2MDc2OTA2MjJEM0YwMDAwMDAwMEEyMwotOjEwMzE3MDAwMDQyMkQ0MTgwMDA2MDc2RjA2MjJENDMwMDAwMDAwMEE4QgotOjEwMzE4MDAwMDQyMkQ0NTgwMDA2MDc3NTA2MjJENDcwMDAwMDAwMEFGNQotOjEwMzE5MDAwMDQyMkQ0OTgwMDA2MDc3QjA2MjJENEIwMDAwMDAwMEE1RgotOjEwMzFBMDAwMDQyMkQ0RDgwMDA2MDc4MTA2MjJENEYwMDAwMDAwMEFDOQotOjEwMzFCMDAwMDQyMkQ1MTgwMDA2MDc4NzA2MjJENTMwMDAwMDAwMEEzMQotOjEwMzFDMDAwMDQyMkQ1NTgwMDA2MDc4RDA2MjJENTcwMDAwMDAwMEE5QgotOjEwMzFEMDAwMDQyMkQ1OTgwMDA2MDc5MzA2MjJENUIwMDAwMDAwMEEwNQotOjEwMzFFMDAwMDQyMkQ1RDgwMDA2MDc5OTA2MjJENUYwMDAwMDAwMEE2RgotOjEwMzFGMDAwMDQyMkQ2MTgwMDA2MDc5RjA2MjJENjMwMDAwMDAwMEFENwotOjEwMzIwMDAwMDQyMkQ2NTgwMDA2MDdBNTA2MjJENjcwMDAwMDAwMEE0MAotOjEwMzIxMDAwMDQyMkQ2OTgwMDA2MDdBQjA2MjJENkIwMDAwMDAwMEFBQQotOjEwMzIyMDAwMDQyMkQ2RDgwMDA2MDdCMTA2MjJENkYwMDAwMDAwMEExNAotOjEwMzIzMDAwMDQyMkQ3MTgwMDA2MDdCNzA2MjJENzMwMDAwMDAwMEE3QwotOjEwMzI0MDAwMDQyMkQ3NTgwMDA2MDdCRDA2MjJENzcwMDAwMDAwMEFFNgotOjEwMzI1MDAwMDQyMkQ3OTgwMDA2MDdDMzA2MjJEN0IwMDAwMDAwMEE1MAotOjEwMzI2MDAwMDQyMkQ3RDgwMDA2MDdDOTA2MjJEN0YwMDAwMDAwMEFCQQotOjEwMzI3MDAwMDQyMkQ4MTgwMDA2MDdDRjA2MjJEODMwMDAwMDAwMEEyMgotOjEwMzI4MDAwMDQyMkQ4NTgwMDA2MDdENTA2MjJEODcwMDAwMDAwMEE4QwotOjEwMzI5MDAwMDQyMkQ4OTgwMDA2MDdEQjA2MjJEOEIwMDAwMDAwMEFGNgotOjEwMzJBMDAwMDQyMkQ4RDgwMDA2MDdFMTA2MjJEOEYwMDAwMDAwMEE2MAotOjEwMzJCMDAwMDQyMkQ5MTgwMDA2MDdFNzA2MjJEOTMwMDAwMDAwMEFDOAotOjEwMzJDMDAwMDQyMkQ5NTgwMDA2MDdFRDA2MjJEOTcwMDAwMDAwMEEzMgotOjEwMzJEMDAwMDQyMkQ5OTgwMDA2MDdGMzA2MjJEOUIwMDAwMDAwMEE5QwotOjEwMzJFMDAwMDQyMkQ5RDgwMDA2MDdGOTA2MjJEOUYwMDAwMDAwMEEwNgotOjEwMzJGMDAwMDQyMkRBMTgwMDA2MDdGRjA2MjJEQTMwMDAwMDAwMEE2RQotOjEwMzMwMDAwMDQyMkRBNTgwMDA2MDgwNTA2MjJEQTcwMDAwMDAwMEFENgotOjEwMzMxMDAwMDQyMkRBOTgwMDA2MDgwQjA2MjJEQUIwMDAwMDAwMEE0MAotOjEwMzMyMDAwMDQyMkRBRDgwMDA2MDgxMTA2MjJEQUYwMDAwMDAwMEFBQQotOjEwMzMzMDAwMDQyMkRCMTgwMDA2MDgxNzA2MjJEQjMwMDAwMDAwMEExMgotOjEwMzM0MDAwMDQyMkRCNTgwMDA2MDgxRDA2MjJEQjcwMDAwMDAwMEE3QwotOjEwMzM1MDAwMDQyMkRCOTgwMDA2MDgyMzA2MjJEQkIwMDAwMDAwMEFFNgotOjEwMzM2MDAwMDQyMkRCRDgwMDA2MDgyOTA2MjJEQkYwMDAwMDAwMEE1MAotOjEwMzM3MDAwMDQyMkRDMTgwMDA2MDgyRjA2MjJEQzMwMDAwMDAwMEFCOAotOjEwMzM4MDAwMDQyMkRDNTgwMDA2MDgzNTA2MjJEQzcwMDAwMDAwMEEyMgotOjEwMzM5MDAwMDQyMkRDOTgwMDA2MDgzQjA2MjJEQ0IwMDAwMDAwMEE4QwotOjEwMzNBMDAwMDQyMkRDRDgwMDA2MDg0MTA2MjJEQ0YwMDAwMDAwMEFGNgotOjEwMzNCMDAwMDQyMkREMTgwMDA2MDg0NzA2MjJERDMwMDAwMDAwMEE1RQotOjEwMzNDMDAwMDQyMkRENTgwMDA2MDg0RDA2MjJERDcwMDAwMDAwMEFDOAotOjEwMzNEMDAwMDQyMkREOTgwMDA2MDg1MzA2MjJEREIwMDAwMDAwMEEzMgotOjEwMzNFMDAwMDQyMkRERDgwMDA2MDg1OTA2MjJEREYwMDAwMDAwMEE5QwotOjEwMzNGMDAwMDQyMkRFMTgwMDA2MDg1RjA2MjJERTMwMDAwMDAwMEEwNAotOjEwMzQwMDAwMDQyMkRFNTgwMDA2MDg2NTA2MjJERTcwMDAwMDAwMEE2RAotOjEwMzQxMDAwMDQyMkRFOTgwMDA2MDg2QjA2MjJERUIwMDAwMDAwMEFENwotOjEwMzQyMDAwMDQyMkRFRDgwMDA2MDg3MTA2MjJERUYwMDAwMDAwMEE0MQotOjEwMzQzMDAwMDQyMkRGMTgwMDA2MDg3NzA2MjJERjMwMDAwMDAwMEFBOQotOjEwMzQ0MDAwMDQyMkRGNTgwMDA2MDg3RDA2MjJERjcwMDAwMDAwMEExMwotOjEwMzQ1MDAwMDQyMkRGOTgwMDA2MDg4MzA2MjJERkIwMDAwMDAwMEE3RAotOjEwMzQ2MDAwMDQyMkRGRDgwMDA2MDg4OTA2MjJERkYwMDAwMDAwMEFFNwotOjEwMzQ3MDAwMDQyMkUwMTgwMDA2MDg4RjA2MjJFMDMwMDAwMDAwMEE0RgotOjEwMzQ4MDAwMDQyMkUwNTgwMDA2MDg5NTA2MjJFMDcwMDAwMDAwMEFCOQotOjEwMzQ5MDAwMDQyMkUwOTgwMDA2MDg5QjA2MjJFMEIwMDAwMDAwMEEyMwotOjEwMzRBMDAwMDQyMkUwRDgwMDA2MDhBMTA2MjJFMEYwMDAwMDAwMEE4RAotOjEwMzRCMDAwMDQyMkUxMTgwMDA2MDhBNzA2MjJFMTMwMDAwMDAwMEFGNQotOjEwMzRDMDAwMDQyMkUxNTgwMDA2MDhBRDA2MjJFMTcwMDAwMDAwMEE1RgotOjEwMzREMDAwMDQyMkUxOTgwMDA2MDhCMzA2MjJFMUIwMDAwMDAwMEFDOQotOjEwMzRFMDAwMDQyMkUxRDgwMDA2MDhCOTA2MjJFMUYwMDAwMDAwMDQzOQotOjEwMzRGMDAwMDYyMjE1MzgwMDAwMDAwMjA2MjIxMUU4MDAwMDAwMDIzMgotOjEwMzUwMDAwMDYyMkYzMDAwMDAwMDAwODAyMjIxMTQ4MDAwMDAwMDAxQgotOjEwMzUxMDAwMDYyMjU5MDAwMDAwMDAwNjA2MjIzMzAwMDAwMDAwMDJDNwotOjEwMzUyMDAwMDYyMjYwNDAwMDAwMDAzMDA2MjJGMzIwMDAwMDAwMDg2MAotOjEwMzUzMDAwMDIyMjExNEMwMDAwMDAwMDA2MjI1OTE4MDAwMDAwMDY2QgotOjEwMzU0MDAwMDYyMjMzMDgwMDAwMDAwMjA2MjI2MTAwMDAwMDAwMzA1RAotOjEwMzU1MDAwMDYyMkYzNDAwMDAwMDAwODAyMjIxMTUwMDAwMDAwMDA4MwotOjEwMzU2MDAwMDYyMjU5MzAwMDAwMDAwNjA2MjIzMzEwMDAwMDAwMDIzNwotOjEwMzU3MDAwMDYyMjYxQzAwMDAwMDAzMDA2MjJGMzYwMDAwMDAwMDg0RgotOjEwMzU4MDAwMDIyMjExNTQwMDAwMDAwMDA2MjI1OTQ4MDAwMDAwMDZFMwotOjEwMzU5MDAwMDYyMjMzMTgwMDAwMDAwMjA2MjI2MjgwMDAwMDAwMzA3QwotOjEwMzVBMDAwMDYyMkYzODAwMDAwMDAwODAyMjIxMTU4MDAwMDAwMDBFQgotOjEwMzVCMDAwMDYyMjU5NjAwMDAwMDAwNjA2MjIzMzIwMDAwMDAwMDJBNwotOjEwMzVDMDAwMDYyMjYzNDAwMDAwMDAzMDA2MjJGM0EwMDAwMDAwMDgzRAotOjEwMzVEMDAwMDIyMjExNUMwMDAwMDAwMDA2MjI1OTc4MDAwMDAwMDY1QgotOjEwMzVFMDAwMDYyMjMzMjgwMDAwMDAwMjA2MjI2NDAwMDAwMDAwMzA5QQotOjEwMzVGMDAwMDYyMkYzQzAwMDAwMDAwODAyMjIxMTYwMDAwMDAwMDA1MwotOjEwMzYwMDAwMDYyMjU5OTAwMDAwMDAwNjA2MjIzMzMwMDAwMDAwMDIxNgotOjEwMzYxMDAwMDYyMjY0QzAwMDAwMDAzMDA2MjJGM0UwMDAwMDAwMDgyQgotOjEwMzYyMDAwMDIyMjExNjQwMDAwMDAwMDA2MjI1OUE4MDAwMDAwMDZEMgotOjEwMzYzMDAwMDYyMjMzMzgwMDAwMDAwMjA2MjI2NTgwMDAwMDAwMzBCOAotOjEwMzY0MDAwMDIxNjEwMDAwMDAwMDAyODAyMTcwMDA4MDAwMDAwMDIwNwotOjEwMzY1MDAwMDIxNzAwMkMwMDAwMDAwMzAyMTcwMDNDMDAwMDAwMDRDOQotOjEwMzY2MDAwMDIxNzAwNDQwMDAwMDAwMDAyMTcwMDQ4MDAwMDAwMDI5QQotOjEwMzY3MDAwMDIxNzAwNEMwMDAwMDA5MDAyMTcwMDUwMDAwMDAwOTA1QwotOjEwMzY4MDAwMDIxNzAwNTQwMDgwMDA5MDAyMTcwMDU4MDgxMDAwMDAzNAotOjEwMzY5MDAwMDIxNzAwNzAwMDAwMDAwNjAyMTcwMDc4MDAwMDA5RkYwMgotOjEwMzZBMDAwMDIxNzAwN0MwMDAwMDc2QzAyMTcwMUM0MDgxMDAwMDAxQwotOjEwMzZCMDAwMDIxNzAzNDQwMDAwMDAwMTAyMTcwNDAwMDAwMDAwOEEwMgotOjEwMzZDMDAwMDIxNzA0MDQwMDAwMDA4MDAyMTcwNDA4MDAwMDAwODFCMwotOjEwMzZEMDAwMDIxNzA0MEMwMDAwMDA4MDAyMTcwNDEwMDAwMDAwOEE4QQotOjEwMzZFMDAwMDIxNzA0MTQwMDAwMDA4MDAyMTcwNDE4MDAwMDAwODE3MwotOjEwMzZGMDAwMDIxNzA0MUMwMDAwMDA4MDAyMTcwNDMwMDAwMDAwOEEzQQotOjEwMzcwMDAwMDIxNzA0MzQwMDAwMDA4MDAyMTcwNDM4MDAwMDAwODExMgotOjEwMzcxMDAwMDIxNzA0M0MwMDAwMDA4MDAyMTcwNDQwMDAwMDAwOEFFOQotOjEwMzcyMDAwMDIxNzA0NDQwMDAwMDA4MDAyMTcwNDQ4MDAwMDAwODFEMgotOjEwMzczMDAwMDIxNzA0NEMwMDAwMDA4MDAyMTcwNDgwMDAwMDAwOEE3OQotOjEwMzc0MDAwMDIxNzA0ODQwMDAwMDA4MDAyMTcwNDg4MDAwMDAwODEzMgotOjEwMzc1MDAwMDIxNzA0OEMwMDAwMDA4MDAyMTcwMDM4MDA3QzEwMDQ1RgotOjEwMzc2MDAwMDIxNzAwMDQwMDAwMDAwRjAyMTcwMUVDMDAwMDAwMDIyNQotOjEwMzc3MDAwMDIxNzAxRjQwMDAwMDAwMjAyMTcwMUVDMDAwMDAwMDIzMQotOjEwMzc4MDAwMDIxNzAxRjQwMDAwMDAwMjAyMTcwMUVDMDAwMDAwMDIyMQotOjEwMzc5MDAwMDIxNzAxRjQwMDAwMDAwMjAyMTcwMUVDMDAwMDAwMDIxMQotOjEwMzdBMDAwMDIxNzAxRjQwMDAwMDAwMjAyMTcwMUVDMDAwMDAwMDIwMQotOjEwMzdCMDAwMDIxNzAxRjQwMDAwMDAwMjAyMTcwMUVDMDAwMDAwMDJGMQotOjEwMzdDMDAwMDIxNzAxRjQwMDAwMDAwMjAyMTcwMUVDMDAwMDAwMDJFMQotOjEwMzdEMDAwMDIxNzAxRjQwMDAwMDAwMjAyMTcwMUVDMDAwMDAwMDJEMQotOjEwMzdFMDAwMDIxNzAxRjQwMDAwMDAwMjA2MTY0MDI0MDAwMDAwMDI0NwotOjEwMzdGMDAwMDIxNjQwNzAwMDAwMDAxQzAyMTY0MjA4MDAwMDAwMDE4MgotOjEwMzgwMDAwMDIxNjQyMTAwMDAwMDAwMTAyMTY0MjIwMDAwMDAwMDFEMgotOjEwMzgxMDAwMDIxNjQyMjgwMDAwMDAwMTAyMTY0MjMwMDAwMDAwMDE5QQotOjEwMzgyMDAwMDIxNjQyMzgwMDAwMDAwMTAyMTY0MjYwMDAwMDAwMDI0OQotOjEwMzgzMDAwMEMxNjQwMUMwMDAzRDA5MDBBMTY0MDFDMDAwMDAwOUM4RgotOjEwMzg0MDAwMEIxNjQwMUMwMDAwMDI3MTAyMTY0MDMwMDAwMDAwMjhEOAotOjEwMzg1MDAwMDIxNjQwMzQwMDAwMDAyQzAyMTY0MDM4MDAwMDAwMzBGMAotOjEwMzg2MDAwMDIxNjQwNDQwMDAwMDAyMDAyMTY0MDAwMDAwMDAwMDE0MwotOjEwMzg3MDAwMDIxNjQwRDgwMDAwMDAwMTAyMTY0MDA4MDAwMDAwMDFCNgotOjEwMzg4MDAwMDIxNjQwMEMwMDAwMDAwMTAyMTY0MDEwMDAwMDAwMDE2QQotOjEwMzg5MDAwMDIxNjQyNDAwMDAwMDAwMDAyMTY0MjQ4MDAwMDAwMDBFQwotOjEwMzhBMDAwMDYxNjQyNzAwMDAwMDAwMjAyMTY0MjUwMDAwMDAwMDA5RQotOjEwMzhCMDAwMDIxNjQyNTgwMDAwMDAwMDA2MTY0MjgwMDAwMDAwMDI3NgotOjEwMzhDMDAwMDIxNjYwMDgwMDAwMTIxNDAyMTY2MDBDMDAwMDEyMDBCQwotOjEwMzhEMDAwMDIxNjYwMTAwMDAwMTIwNDAyMTY2MDFDMDAwMEZGRkZCOAotOjEwMzhFMDAwMDIxNjYwMjAwMDAwRkZGRjAyMTY2MDI0MDAwMEZGRkZBOAotOjEwMzhGMDAwMDIxNjYwMjgwMDAwRkZGRjAyMTY2MDM4MDAwMDAwMjA1QQotOjEwMzkwMDAwMDIxNjYwM0MwMDAwMDAxMDA2MTY2MDQwMDAwMDAwMDIzNQotOjEwMzkxMDAwMDIxNjYwNDgwMDAwMDAyMzAyMTY2MDRDMDAwMDAwMjREQwotOjEwMzkyMDAwMDIxNjYwNTAwMDAwMDAyNTAyMTY2MDU0MDAwMDAwMjZCOAotOjEwMzkzMDAwMDIxNjYwNTgwMDAwMDAyNzAyMTY2MDVDMDAwMDAwMTFBQgotOjEwMzk0MDAwMDIxNjYwNjAwMDAwMDAwMDAyMTY2MDY0MDAwMDAwMkI5OAotOjEwMzk1MDAwMDIxNjYwNjgwMDAwMDAyQzAyMTY2MDZDMDAwMDAwMkQ0QQotOjEwMzk2MDAwMDIxNjYwNzAwMDAwMDBFQzAyMTY2MDc0MDAwMDAwMDA5NwotOjEwMzk3MDAwMDIxNjYwNzgwMDAwMDAyOTAyMTY2MDdDMDAwMDAwMkExMAotOjEwMzk4MDAwMDIxNjYwODAwMDAwMDAyRjA2MTY2MDg0MDAwMDAwMEQwMwotOjEwMzk5MDAwMDIxNjYwQjgwMDAwMDAwMTA2MTY2MEJDMDAwMDAwMDhCNgotOjEwMzlBMDAwMDIxNjYwREMwMDAwMDAwMTA2MTY2MEUwMDAwMDAwMDQ2MgotOjEwMzlCMDAwMDIxNjYwRjAwMDAwMDAwMTA2MTY2MEY0MDAwMDAwMDMyQgotOjEwMzlDMDAwMDIxNjYxMDAwMDAwMDAwMTA2MTY2MTA0MDAwMDAwMkRDRgotOjEwMzlEMDAwMDIxNjYxQjgwMDAwMDAwMTA2MTY2MUJDMDAwMDAwMDg3NAotOjEwMzlFMDAwMDIxNjYxREMwMDAwMDAwMTA2MTY2MUUwMDAwMDAwMDQyMAotOjEwMzlGMDAwMDIxNjYxRjAwMDAwMDAwMTA2MTY2MUY0MDAwMDAwMDNFOQotOjEwM0EwMDAwMDIxNjYyMDAwMDAwMDAwMTA2MTY2MjA0MDAwMDAwMERBQwotOjEwM0ExMDAwMDIxNjYyMzgwN0ZGRkZGRjAyMTY2MjNDMDAwMDAwN0ZCQgotOjEwM0EyMDAwMDIxNjYyNDAwN0ZGRkZGRjAyMTY2MjQ0MDAwMDAwM0ZEQgotOjEwM0EzMDAwMDExNjYyNDgwMDAwMDAwMDAxMTY2MjRDMDAwMDAwMDAwMAotOjEwM0E0MDAwMDExNjYyNTAwMDAwMDAwMDAxMTY2MjU0MDAwMDAwMDBFMAotOjEwM0E1MDAwMDExNjYyNTgwMDAwMDAwMDAxMTY2MjVDMDAwMDAwMDBDMAotOjEwM0E2MDAwMDExNjYyNjAwMDAwMDAwMDAxMTY2MjY0MDAwMDAwMDBBMAotOjEwM0E3MDAwMDExNjYyNjgwMDAwMDAwMDAxMTY2MjZDMDAwMDAwMDA4MAotOjEwM0E4MDAwMDExNjYyNzAwMDAwMDAwMDAxMTY2Mjc0MDAwMDAwMDA2MAotOjEwM0E5MDAwMDExNjYyNzgwMDAwMDAwMDAxMTY2MjdDMDAwMDAwMDA0MAotOjEwM0FBMDAwMDExNjYyRDQwMDAwMDAwMDAyMTY2MkQ4MDAwMEZGRkY3OQotOjEwM0FCMDAwMDIxNjYyREMwMDAwRkZGRjAyMTY2MkUwMDAwMEZGRkY1QQotOjEwM0FDMDAwMDIxNjYyRTQwMDAwRkZGRjBDMTY2MDAwMDAwMDAzRTgyRAotOjEwM0FEMDAwMEExNjYwMDAwMDAwMDAwMTBCMTY2MDAwMDAwMDAwMDNFMQotOjEwM0FFMDAwMDIxNjgwNDAwMDAwMDAwNjAyMTY4MDQ0MDAwMDAwMDUxNwotOjEwM0FGMDAwMDIxNjgwNDgwMDAwMDAwQTAyMTY4MDRDMDAwMDAwMDVGMwotOjEwM0IwMDAwMDIxNjgwNTQwMDAwMDAwMjAyMTY4MENDMDAwMDAwMDQ1RgotOjEwM0IxMDAwMDIxNjgwRDAwMDAwMDAwNDAyMTY4MEQ0MDAwMDAwMDRDOQotOjEwM0IyMDAwMDIxNjgwRDgwMDAwMDAwNDAyMTY4MERDMDAwMDAwMDRBOQotOjEwM0IzMDAwMDIxNjgwRTAwMDAwMDAwNDAyMTY4MEU0MDAwMDAwMDQ4OQotOjEwM0I0MDAwMDIxNjgwRTgwMDAwMDAwNDAyMTY4ODA0MDAwMDAwMDY0NwotOjEwM0I1MDAwMDIxNjgwMzAwMDAwMDA3QzAyMTY4MDM0MDAwMDAwM0QxOAotOjEwM0I2MDAwMDIxNjgwMzgwMDAwMDAzRjAyMTY4MDNDMDAwMDAwOUNENgotOjEwM0I3MDAwMDIxNkU2RTgwMDAwNjAwMDAyMTZFNkVDMDAwMDYwMDBCNQotOjEwM0I4MDAwMDIxNkU2RjAwMDAwNjAwMDAyMTZFNkY0MDAwMDYwMDA5NQotOjEwM0I5MDAwMDIxNjgyMzQwMDAwMjVFNDAyMTY4MjM4MDAwMDgwMDBGQwotOjEwM0JBMDAwMDIxNjgwOTQwMDAwMjVFMzAyMTY4MUY0MDAwMDBDMDg0MAotOjEwM0JCMDAwMDIxNjgxRjgwMDAwMDA0MDAyMTY4MUZDMDAwMDAxMDA5RQotOjEwM0JDMDAwMDIxNjgyMDAwMDAwMDAyMDAyMTY4MjA0MDAwMDAwMTc4NgotOjEwM0JEMDAwMDIxNjgyMDgwMDAwMDA4MDAyMTY4MjBDMDAwMDAyMDAxQgotOjEwM0JFMDAwMDIxNjgyMTAwMDAwMDAwMDAyMTY4MjNDMDAwMDAwMTM0MgotOjEwM0JGMDAwMDIxNjgyMjAwMDhGMDA4RjAyMTY4MjFDMDA4RjAwOEYxOQotOjEwM0MwMDAwMDIxNjgwRjAwMDAwMDAwNzAyMTY4MjE4MDFGRjAxRkY3MwotOjEwM0MxMDAwMDIxNjgyMTQwMUZGMDFGRjA2MTY4MEY0MDAwMDAwMDI2NAotOjEwM0MyMDAwMDIxNjgxMUMwMDAwMDAwNTAyMTY4MTIwMDAwMDAwMDUxQwotOjEwM0MzMDAwMDIxNjgxMjQwMDAwMDAwNTAyMTY4MTI4MDAwMDAwMDhGOQotOjEwM0M0MDAwMDIxNjgxMkMwMDAwMDAwNjAyMTY4MTMwMDAwMDAwMDdEOQotOjEwM0M1MDAwMDYxNjgxMzQwMDAwMDAwNDAyMTY4MEZDMDAwMDAwMDBGQgotOjEwM0M2MDAwMDYxNjgxNDQwMDAwMDAwMjAyMTY4MTRDMDAwMDAwMDQ4OAotOjEwM0M3MDAwMDIxNjgxNTAwMDAwMDAwMTAyMTY4MTU0MDAwMDAwMDI2QgotOjEwM0M4MDAwMDIxNjgxNTgwMDAwMDAwNTAyMTY4MTVDMDAwMDAwMDU0NAotOjEwM0M5MDAwMDIxNjgxNjAwMDAwMDAwNTAyMTY4MTY0MDAwMDAwMDUyNAotOjEwM0NBMDAwMDIxNjgxNjgwMDAwMDAwODAyMTY4MTAwMDAwMDAwMDA3MgotOjEwM0NCMDAwMDIxNjgxNkMwMDAwMDAwNjAyMTY4MTcwMDAwMDAwMDdFOQotOjEwM0NDMDAwMDYxNjgxNzQwMDAwMDAwNjAyMTY4MThDMDAwMDAwMDRCNAotOjEwM0NEMDAwMDIxNjgxOTAwMDAwMDAwMTAyMTY4MTA0MDAwMDAwMDAxRAotOjEwM0NFMDAwMDIxNjgxOTQwMDAwMDAwMjAyMTY4MTk4MDAwMDAwMDU2RgotOjEwM0NGMDAwMDIxNjgxOUMwMDAwMDAwNTAyMTY4MUEwMDAwMDAwMDU0QwotOjEwM0QwMDAwMDIxNjgxQTQwMDAwMDAwNTAyMTY4MUE4MDAwMDAwMDgyOAotOjEwM0QxMDAwMDIxNjgxQUMwMDAwMDAwNjAyMTY4MUIwMDAwMDAwMDcwOAotOjEwM0QyMDAwMDYxNjgxQjQwMDAwMDAwMjAyMTY4MTA4MDAwMDAwMDA5RgotOjEwM0QzMDAwMDYxNjgxQkMwMDAwMDAwNDAyMTY4MUNDMDAwMDAwMDRCRAotOjEwM0Q0MDAwMDIxNjgxRDAwMDAwMDAwMTAyMTY4MUQ0MDAwMDAwMDI5QQotOjEwM0Q1MDAwMDIxNjgxRDgwMDAwMDAwNTAyMTY4MURDMDAwMDAwMDU3MwotOjEwM0Q2MDAwMDIxNjgxRTAwMDAwMDAwNTAyMTY4MTBDMDAwMDAwMDQyQwotOjEwM0Q3MDAwMDIxNjgxRTQwMDAwMDAwNTAyMTY4MUU4MDAwMDAwMDgzOAotOjEwM0Q4MDAwMDIxNjgxRUMwMDAwMDAwNjAyMTY4MUYwMDAwMDAwMDcxOAotOjEwM0Q5MDAwMDIxNjgxMTAwMDAwMDAwMTAyMTY4MTE0MDAwMDAwMDJDQQotOjEwM0RBMDAwMDIxNjgxMTgwMDAwMDAwNTAyMTY4MDlDMDAwMDAwNENERAotOjEwM0RCMDAwMDIxNjgwQTAwMDAwMDA0QzA2MTY4MEM0MDAwMDAwMDIxRAotOjEwM0RDMDAwMDIxNjgwQTQwMDAwMDAwMDAyMTY4MEE4MDAwMDAwMDA3NwotOjEwM0REMDAwMDIxNjgwQUMwMDAwMDA0QzA2MTY4MEIwMDAwMDAwMDUwMgotOjEwM0RFMDAwMDIxNkU2RjgwMDAwMDIwNDAyMTY4MjQwMDAzRjAwM0Y3RgotOjEwM0RGMDAwMDIxNjgyNDQwMDNGMDAzRjA2MTY4MjkwMDAwMDAwMDQzNQotOjEwM0UwMDAwMDIxNjgyNDgwMDgwMDA4MDAyMTY4MjRDMDA4MDAwODBFQQotOjEwM0UxMDAwMDIxNjgyNTAwMTAwMDEwMDAyMTY4MjU0MDEwMDAxMDBDNgotOjEwM0UyMDAwMDYxNjgyNTgwMDAwMDAwMjAyMTY4MjYwMDA0MDAwNDAyMAotOjEwM0UzMDAwMDIxNjgyNjQwMDQwMDA0MDAyMTY4MjY4MUUwMDFFMDBDNgotOjEwM0U0MDAwMDIxNjgyNkMxRTAwMUUwMDAyMTY4MjcwNDAwMDQwMDBBNgotOjEwM0U1MDAwMDIxNjgyNzQ0MDAwNDAwMDAyMTY4Mjc4ODAwMDgwMDBDMgotOjEwM0U2MDAwMDIxNjgyN0M4MDAwODAwMDAyMTY4MjgwMjAwMDIwMDBFMgotOjEwM0U3MDAwMDIxNjgyODQyMDAwMjAwMDA2MTY4Mjg4MDAwMDAwMDJCQwotOjEwM0U4MDAwMDIxNjgwOTAwMDAwMDA0QjAyMTY4MDYwMDAwMDAxNDA4NgotOjEwM0U5MDAwMDIxNjgwNjQwMDAwMDE0MDA2MTY4MDg4MDAwMDAwMDJCRgotOjEwM0VBMDAwMDIxNjgwNjgwMDAwMDAwMDAyMTY4MDZDMDAwMDAwMDAwRQotOjEwM0VCMDAwMDIxNjgwNzAwMDAwMDBDMDA2MTY4MDc0MDAwMDAwMDUyNQotOjEwM0VDMDAwMDIxNjg4MEMwMTAxMDEwMTAyMTY4ODEwMDEwMTIwMDQ2QwotOjEwM0VEMDAwMDIxNjg4MTQyMDA4MTAwMTAyMTY4ODE4MDEwMTAxMjAxQQotOjEwM0VFMDAwMDIxNjg4MUMwMTAxMDEwMTAyMTY4ODIwMDEwMTIwMDQyQwotOjEwM0VGMDAwMDIxNjg4MjQyMDA4MTAwMTAyMTY4ODI4MDEwMTAxMjBEQQotOjEwM0YwMDAwMDIxNjg4MkMyMDA4MTAwMTAyMTY4ODMwMDEwMTAxMjBCOQotOjEwM0YxMDAwMDIxNjg4MzQwMTAxMDEwMTAyMTY4ODM4MDEwMTIwMDRDQgotOjEwM0YyMDAwMDIxNjg4M0MyMDA4MTAwMTAyMTY4ODQwMDEwMTAxMjA3OQotOjEwM0YzMDAwMDIxNjg4NDQwMTAxMDEwMTAyMTY4ODQ4MDEwMTIwMDQ4QgotOjEwM0Y0MDAwMDIxNkU2QkMwMDAwMDAwMDAyMTZFNkMwMDAwMDAwMDJGNwotOjEwM0Y1MDAwMDIxNkU2QzQwMDAwMDAwNDAyMTZFNkM4MDAwMDAwMDZDRgotOjEwM0Y2MDAwMDIxNkU3OTQwMDAwMDAwMTAyMTY4MEVDMDAwMDAwRkYzQQotOjEwM0Y3MDAwMDIxNDAwMDAwMDAwMDAwMTAyMTVDMDI0MDAwMDAwMDAyRgotOjEwM0Y4MDAwMDIxNUMwRUMwMDAwMDAwMTAyMTVDMEYwMDAwMDAwMDFBNQotOjEwM0Y5MDAwMDYxNUMxMDAwMDAwMDAwMjAyMTQwMDA0MDAwMDAwMDEyOAotOjEwM0ZBMDAwMDIxNDAwMDgwMDAwMDAwMTAyMTQwMDBDMDAwMDAwMDFDRgotOjEwM0ZCMDAwMDIxNDAwMzAwMDAwMDAwMTAyMTQwMDM0MDAwMDAwMDE2RgotOjEwM0ZDMDAwMDIxNDAwNDAwMDAwMDAwMTAyMTQwMDQ0MDAwMEZGRkY0MgotOjEwM0ZEMDAwMDYxNDAwMDQwMDAwMDAwMzAyMTQwMDAwMDAwMDAwMDBBQQotOjEwM0ZFMDAwMDYwMjgwMDAwMDAwMjAwMDAyMDIwMDU4MDAwMDAwMzI5QgotOjEwM0ZGMDAwMDIwMjAwQTAwMzE1MDAyMDAyMDIwMEE0MDMxNTAwMjAwNQotOjEwNDAwMDAwMDIwMjAwQTgwMTAwMDAzMDAyMDIwMEFDMDgxMDAwMDAwQgotOjEwNDAxMDAwMDIwMjAwQjAwMDAwMDAzNjAyMDIwMEI0MDAwMDAwMzBDRQotOjEwNDAyMDAwMDIwMjAwQjgwMDAwMDAzMTAyMDIwMEJDMDAwMDAwMDJFMQotOjEwNDAzMDAwMDIwMjAwQzAwMDAwMDAwNTAyMDIwMEM0MDAwMDAwMDJFRAotOjEwNDA0MDAwMDIwMjAwQzgwMDAwMDAwMjAyMDIwMEQwMDAwMDAwMDdDNwotOjEwNDA1MDAwMDIwMjAwREMwMDAwMDAwMDAyMDIwMEUwMDAwMDAwMDU5NwotOjEwNDA2MDAwMDIwMjAwRTQwMDAwMDAwMzAyMDIwMEYwMDAwMDAwMDE3MAotOjEwNDA3MDAwMDIwMjAwRkMwMDAwMDAwNjAyMDIwMTIwMDAwMDAwMDAxNQotOjEwNDA4MDAwMDIwMjAxMzQwMDAwMDAwMjAyMDIwMUIwMDAwMDAwMDEzRgotOjEwNDA5MDAwMDIwMjAyMEMwMDAwMDAwMTAyMDIwMjE0MDAwMDAwMDFGMgotOjEwNDBBMDAwMDIwMjAyMTgwMDAwMDAwMjAyMDIwNDA0MDAwMDAwMDFFMwotOjEwNDBCMDAwMDIwMjA0MEMwMDAwMDA0MDAyMDIwNDEwMDAwMDAwNDA1NAotOjEwNDBDMDAwMDIwMjA0MUMwMDAwMDAwNDAyMDIwNDIwMDAwMDAwMjA4MAotOjEwNDBEMDAwMDIwMjA0MjQwMDAwMDAwMjAyMDIwNDI4MDAwMDAwMjA2MgotOjEwNDBFMDAwMDYwMjA1MDAwMDAwMDAxMjA0MDIwNDgwMDAyMDA4QkY0MAotOjEwNDBGMDAwMDIwMjAwNjAwMDAwMDAwRjAyMDIwMDY0MDAwMDAwMDdERQotOjEwNDEwMDAwMDIwMjAwNjgwMDAwMDAwMDAyMDIwMDZDMDAwMDAwMEVDNQotOjEwNDExMDAwMDIwMjAwNzAwMDAwMDAwRTA2MDIwMDc0MDAwMDAwMDM5RQotOjEwNDEyMDAwMDIwMjAwRjQwMDAwMDAwNDAyMDIwMDA0MDAwMDAwMDE4QQotOjEwNDEzMDAwMDIwMjAwMDgwMDAwMDAwMTAyMDIwMDBDMDAwMDAwMDE2MQotOjEwNDE0MDAwMDIwMjAwMTAwMDAwMDAwMTAyMDIwMDE0MDAwMDAwMDE0MQotOjEwNDE1MDAwMDIwMjAwMTgwMDAwMDAwMTAyMDIwMDFDMDAwMDAwMDEyMQotOjEwNDE2MDAwMDIwMjAwMjAwMDAwMDAwMTAyMDIwMDI0MDAwMDAwMDEwMQotOjEwNDE3MDAwMDIwMjAwMjgwMDAwMDAwMTAyMDIwMDJDMDAwMDAwMDFFMQotOjEwNDE4MDAwMDIwMjAwMzAwMDAwMDAwMTAyMDIwMDM0MDAwMDAwMDFDMQotOjEwNDE5MDAwMDIwMjAwMzgwMDAwMDAwMTAyMDIwMDNDMDAwMDAwMDFBMQotOjEwNDFBMDAwMDIwMjAwNDAwMDAwMDAwMTAyMDIwMDQ0MDAwMDAwMDE4MQotOjEwNDFCMDAwMDIwMjAwNDgwMDAwMDAwMTAyMDIwMDRDMDAwMDAwMDE2MQotOjEwNDFDMDAwMDIwMjAwNTAwMDAwMDAwMTAyMDIwMTA4MDAwMDAwQzhDNQotOjEwNDFEMDAwMDIwMjAxMTgwMDAwMDAwMjAyMDIwMUM0MDAwMDAwMDBGNwotOjEwNDFFMDAwMDIwMjAxQ0MwMDAwMDAwMDAyMDIwMUQ0MDAwMDAwMDIyMwotOjEwNDFGMDAwMDIwMjAxREMwMDAwMDAwMjAyMDIwMUU0MDAwMDAwRkZGNAotOjEwNDIwMDAwMDIwMjAxRUMwMDAwMDBGRjAyMDIwMTAwMDAwMDAwMDBCOQotOjEwNDIxMDAwMDIwMjAxMEMwMDAwMDBDODAyMDIwMTFDMDAwMDAwMDJBMgotOjEwNDIyMDAwMDIwMjAxQzgwMDAwMDAwMDAyMDIwMUQwMDAwMDAwMDBFQwotOjEwNDIzMDAwMDIwMjAxRDgwMDAwMDAwMjAyMDIwMUUwMDAwMDAwMDJCOAotOjEwNDI0MDAwMDIwMjAxRTgwMDAwMDBGRjAyMDIwMUYwMDAwMDAwRkY4RQotOjEwNDI1MDAwMDIwMjAxMDQwMDAwMDAyMDAyMDIwMTA4MDAwMDAwQzg2MAotOjEwNDI2MDAwMDIwMjAxMTgwMDAwMDAwMjAyMDIwMUM0MDAwMDAwMDA2NgotOjEwNDI3MDAwMDIwMjAxQ0MwMDAwMDAwMDAyMDIwMUQ0MDAwMDAwMDI5MgotOjEwNDI4MDAwMDIwMjAxREMwMDAwMDAwMjAyMDIwMUU0MDAwMDAwRkY2MwotOjEwNDI5MDAwMDIwMjAxRUMwMDAwMDBGRjAyMDIwMTAwMDAwMDAwMTAxOQotOjEwNDJBMDAwMDIwMjAxMEMwMDAwMDBDODAyMDIwMTFDMDAwMDAwMDIxMgotOjEwNDJCMDAwMDIwMjAxQzgwMDAwMDAwMDAyMDIwMUQwMDAwMDAwMDA1QwotOjEwNDJDMDAwMDIwMjAxRDgwMDAwMDAwMjAyMDIwMUUwMDAwMDAwMDIyOAotOjEwNDJEMDAwMDIwMjAxRTgwMDAwMDBGRjAyMDIwMUYwMDAwMDAwRkZGRQotOjEwNDJFMDAwMDIwMjAxMDQwMDAwMDAzMDAyMDIwMTA4MDAwMDAwQzhDMAotOjEwNDJGMDAwMDIwMjAxMTgwMDAwMDAwMjAyMDIwMUM0MDAwMDAwMDBENgotOjEwNDMwMDAwMDIwMjAxQ0MwMDAwMDAwMDAyMDIwMUQ0MDAwMDAwMDIwMQotOjEwNDMxMDAwMDIwMjAxREMwMDAwMDAwMjAyMDIwMUU0MDAwMDAwRkZEMgotOjEwNDMyMDAwMDIwMjAxRUMwMDAwMDBGRjAyMDIwMTAwMDAwMDAwNDA1OAotOjEwNDMzMDAwMDIwMjAxMEMwMDAwMDBDODAyMDIwMTFDMDAwMDAwMDI4MQotOjEwNDM0MDAwMDIwMjAxQzgwMDAwMDAwMDAyMDIwMUQwMDAwMDAwMDBDQgotOjEwNDM1MDAwMDIwMjAxRDgwMDAwMDAwMjAyMDIwMUUwMDAwMDAwMDI5NwotOjEwNDM2MDAwMDIwMjAxRTgwMDAwMDBGRjAyMDIwMUYwMDAwMDAwRkY2RAotOjEwNDM3MDAwMDIwMjAxMDQwMDAwMDA2MDAyMDIwMTA4MDAwMDAwQzhGRgotOjEwNDM4MDAwMDIwMjAxMTgwMDAwMDAwMjAyMDIwMUM0MDAwMDAwMDA0NQotOjEwNDM5MDAwMDIwMjAxQ0MwMDAwMDAwMDAyMDIwMUQ0MDAwMDAwMDI3MQotOjEwNDNBMDAwMDIwMjAxREMwMDAwMDAwMjAyMDIwMUU0MDAwMDAwRkY0MgotOjEwNDNCMDAwMDIwMjAxRUMwMDAwMDBGRjAyMDIwMTAwMDAwMDAwNTBCOAotOjEwNDNDMDAwMDIwMjAxMEMwMDAwMDBDODAyMDIwMTFDMDAwMDAwMDJGMQotOjEwNDNEMDAwMDIwMjAxQzgwMDAwMDAwMDAyMDIwMUQwMDAwMDAwMDAzQgotOjEwNDNFMDAwMDIwMjAxRDgwMDAwMDAwMjAyMDIwMUUwMDAwMDAwMDIwNwotOjEwNDNGMDAwMDIwMjAxRTgwMDAwMDBGRjAyMDIwMUYwMDAwMDAwRkZERAotOjEwNDQwMDAwMDIwMjAxMDQwMDAwMDA3MDA3MjgwNDAwMDBCNTAwMDA0QgotOjEwNDQxMDAwMDgyODA3QjgwMDA5MDhERjA3MkMwMDAwMjhFOTAwMDA3OQotOjEwNDQyMDAwMDcyQzgwMDAzNjcwMEEzQjA3MkQwMDAwMzVCRTE3RDhEOAotOjEwNDQzMDAwMDcyRDgwMDAzQjFCMjU0ODA3MkUwMDAwMzVEODM0MEY4MAotOjEwNDQ0MDAwMDcyRTgwMDAxQjIyNDE4NjA4MkVCRkQwMjgwNjA4RTFENwotOjEwNDQ1MDAwMDIyODAwQkMwMDAwMDAzMDAxMjgwMDAwMDAwMDAwMDAxRAotOjEwNDQ2MDAwMDEyODAwMDQwMDAwMDAwMDAxMjgwMDA4MDAwMDAwMDBFRQotOjEwNDQ3MDAwMDEyODAwMEMwMDAwMDAwMDAxMjgwMDEwMDAwMDAwMDBDRQotOjEwNDQ4MDAwMDEyODAwMTQwMDAwMDAwMDAyMjgwMDIwMDAwMDAwMDFBNAotOjEwNDQ5MDAwMDIyODAwMjQwMDAwMDAwMjAyMjgwMDI4MDAwMDAwMDM3NwotOjEwNDRBMDAwMDIyODAwMkMwMDAwMDAwMDAyMjgwMDMwMDAwMDAwMDQ1OAotOjEwNDRCMDAwMDIyODAwMzQwMDAwMDAwMTAyMjgwMDM4MDAwMDAwMDAzQgotOjEwNDRDMDAwMDIyODAwM0MwMDAwMDAwMTAyMjgwMDQwMDAwMDAwMDQxNwotOjEwNDREMDAwMDIyODAwNDQwMDAwMDAwMDAyMjgwMDQ4MDAwMDAwMDFGQgotOjEwNDRFMDAwMDIyODAwNEMwMDAwMDAwMzAyMjgwMDUwMDAwMDAwMDBEOQotOjEwNDRGMDAwMDIyODAwNTQwMDAwMDAwMTAyMjgwMDU4MDAwMDAwMDRCNwotOjEwNDUwMDAwMDIyODAwNUMwMDAwMDAwMDAyMjgwMDYwMDAwMDAwMDE5QQotOjEwNDUxMDAwMDIyODAwNjQwMDAwMDAwMzAyMjgwMDY4MDAwMDAwMDA3OAotOjEwNDUyMDAwMDIyODAwNkMwMDAwMDAwMTAyMjgwMDcwMDAwMDAwMDQ1NgotOjEwNDUzMDAwMDIyODAwNzQwMDAwMDAwMDAyMjgwMDc4MDAwMDAwMDQzNwotOjEwNDU0MDAwMDIyODAwN0MwMDAwMDAwMzA2MjgwMDgwMDAwMDAwMDIxMgotOjEwNDU1MDAwMDIyODAwQTQwMDAwN0ZGRjAyMjgwMEE4MDAwMDAzRkYzQgotOjEwNDU2MDAwMDIyODAyMjQwMDAwMDAwMDAyMjgwMjM0MDAwMDAwMDA5QgotOjEwNDU3MDAwMDIyODAyNEMwMDAwMDAwMDAyMjgwMkU0MDAwMEZGRkZCNQotOjEwNDU4MDAwMDYyODIwMDAwMDAwMDgwMDAyMkI4QkMwMDAwMDAwMDE1QwotOjEwNDU5MDAwMDIyQjgwMDAwMDAwMDAwMDAyMkI4MDQwMDAwMDAwMTg2OQotOjEwNDVBMDAwMDIyQjgwODAwMDAwMDAwQzAyMkI4MEMwMDAwMDAwNjZGRgotOjEwNDVCMDAwMEMyQjgzMDAwMDA4NjQ3MDBBMkI4MzAwMDAwMDAxNTc1NQotOjEwNDVDMDAwMEIyQjgzMDAwMDAwMDU1RjBBMkI4MzQwMDAwMDAwMDBENgotOjEwNDVEMDAwMEMyQjgzNDAwMDAwMDIyNjBCMkI4MzQwMDAwMDAwMDFCRgotOjEwNDVFMDAwMDIyQjgzODAwMDA4NjQ3MDAyMkI4M0MwMDAwMDAyMjYyNwotOjEwNDVGMDAwMDIyQjE0ODAwMDAwMDAwMTBBMkIxNDgwMDAwMDAwMDAzMAotOjEwNDYwMDAwMDIyQjk0NDAwMDAwMDAwMTA2MkI5NDQ4MDAwMDAwMDI5OQotOjEwNDYxMDAwMDYyQTlBNzAwMDAwMDAwNDA0MkE5QTgwMDAwNDA4RTMyNQotOjEwNDYyMDAwMDYyQTlBOTAwMDAwMDAwMjA0MkE5QTk4MDAwMjA4RTdERAotOjEwNDYzMDAwMDYyQTkwMDAwMDAwMDA0ODA2MkEyMDA4MDAwMDAwQzg1MgotOjEwNDY0MDAwMDYyQTIwMDAwMDAwMDAwMjA2MkE5MTI4MDAwMDAwODZBOQotOjEwNDY1MDAwMDYyQUMwMDAwMDAwMDEyMDA2MkE5MzQ4MDAwMDAwMDMzQgotOjEwNDY2MDAwMDQyQTkzNTQwMDAxMDhFOTA2MkE5RkIwMDAwMDAwMDJDMgotOjEwNDY3MDAwMDQyQTk0MTgwMDAyMDhFQTA0MkE5Q0QwMDAwMTA4RUNERAotOjEwNDY4MDAwMDYyQTlDRDQwMDAwMDAxMTA0MkE5RDIwMDA4RjA4RUQwQQotOjEwNDY5MDAwMDYyQTlGNUMwMDAwMDAwNTA0MkEzMDAwMDAwMjA5N0MwNQotOjEwNDZBMDAwMDYyQTMwMDgwMDAwMDEwMDA2MkE0MDQwMDAwMDAwMTBFMQotOjEwNDZCMDAwMDQyQTQwMDAwMDEwMDk3RTA0MkE4NDA4MDAwMjA5OEVBMgotOjEwNDZDMDAwMDQyQUNGNDAwMDA0MDk5MDA0MkFDRjYwMDAwMjA5OTQxNAotOjEwNDZEMDAwMDYyQTlGQTAwMDAwMDAwNDA2MkE2MDAwMDAwMDA1NDA5MgotOjEwNDZFMDAwMDYyQTlEMTgwMDAwMDAwMjA2MkFCMDAwMDAwMDAwNTBCMwotOjEwNDZGMDAwMDYyQUJCNzAwMDAwMDA3MDA2MkFCQjY4MDAwMDAwMDI5QQotOjEwNDcwMDAwMDYyQUI5NDgwMDAwMDAwNDA2MkFEMDAwMDAwMDA4MDA2QwotOjEwNDcxMDAwMDYyQUM0ODAwMDAwMDE1MDA2MkE5NDIwMDAwMDAwMzJCRQotOjEwNDcyMDAwMDYyQTUwMjAwMDAwMDAwMjA2MkE1MDMwMDAwMDAwMDIzNQotOjEwNDczMDAwMDYyQTUwMDAwMDAwMDAwMjA2MkE1MDEwMDAwMDAwMDI2NQotOjEwNDc0MDAwMDIyQTUyMDgwMDAwMDAwMTA0MkE5QUEwMDAwMjA5OTZEOQotOjEwNDc1MDAwMDYyQTk1QjAwMDAwMDAyMjA0MkE5NjM4MDAwMTA5OTgyNAotOjEwNDc2MDAwMDYyQTk2M0MwMDAwMDAwMzA2MkE5NkUwMDAwMDAwMjI3QwotOjEwNDc3MDAwMDQyQTk3NjgwMDAxMDk5OTA2MkE5NzZDMDAwMDAwMDMzMwotOjEwNDc4MDAwMDYyQTk4MTAwMDAwMDAyMjA0MkE5ODk4MDAwMTA5OUEyRAotOjEwNDc5MDAwMDYyQTk4OUMwMDAwMDAwMzA2MkE5OTQwMDAwMDAwMjI4NwotOjEwNDdBMDAwMDQyQTk5QzgwMDAxMDk5QjA2MkE5OUNDMDAwMDAwMDMzRAotOjEwNDdCMDAwMDYyQUJCNTgwMDAwMDAwMjA2MkFDOUMwMDAwMDAxNTBBQQotOjEwNDdDMDAwMDYyQTk0RTgwMDAwMDAzMjA2MkE1MDI4MDAwMDAwMDI2MQotOjEwNDdEMDAwMDYyQTUwMzgwMDAwMDAwMjA2MkE1MDA4MDAwMDAwMDI5NQotOjEwNDdFMDAwMDYyQTUwMTgwMDAwMDAwMjAyMkE1MjBDMDAwMDAwMDFBNAotOjEwNDdGMDAwMDQyQTlBQTgwMDAyMDk5QzA2MkE5NjQ4MDAwMDAwMjI3MgotOjEwNDgwMDAwMDQyQTk2RDAwMDAxMDk5RTA2MkE5NkQ0MDAwMDAwMDNDRgotOjEwNDgxMDAwMDYyQTk3NzgwMDAwMDAyMjA0MkE5ODAwMDAwMTA5OUZDOAotOjEwNDgyMDAwMDYyQTk4MDQwMDAwMDAwMzA2MkE5OEE4MDAwMDAwMjIyNwotOjEwNDgzMDAwMDQyQTk5MzAwMDAxMDlBMDA2MkE5OTM0MDAwMDAwMDNENwotOjEwNDg0MDAwMDYyQTk5RDgwMDAwMDAyMjA0MkE5QTYwMDAwMTA5QTFEMgotOjEwNDg1MDAwMDYyQTlBNjQwMDAwMDAwMzA2MkFCQjYwMDAwMDAwMDJEQQotOjEwNDg2MDAwMDIyQUNGMDAwMDAwMDAwMDA0MkE5QUIwMDAxMDA5QTIxQQotOjEwNDg3MDAwMDYyQTUwNDgwMDAwMDAwRTAyMkFDRjA0MDAwMDAwMDA2MwotOjEwNDg4MDAwMDQyQTlBRjAwMDEwMDlCMjA2MkE1MDgwMDAwMDAwMEU5NwotOjEwNDg5MDAwMDIyQUNGMDgwMDAwMDAwMDA0MkE5QjMwMDAxMDA5QzI0MQotOjEwNDhBMDAwMDYyQTUwQjgwMDAwMDAwRTAyMkFDRjBDMDAwMDAwMDBCQgotOjEwNDhCMDAwMDQyQTlCNzAwMDEwMDlEMjA2MkE1MEYwMDAwMDAwMEU1NgotOjEwNDhDMDAwMDIyQUNGMTAwMDAwMDAwMDA0MkE5QkIwMDAxMDA5RTI2OQotOjEwNDhEMDAwMDYyQTUxMjgwMDAwMDAwRTAyMkFDRjE0MDAwMDAwMDAxMgotOjEwNDhFMDAwMDQyQTlCRjAwMDEwMDlGMjA2MkE1MTYwMDAwMDAwMEUxNQotOjEwNDhGMDAwMDIyQUNGMTgwMDAwMDAwMDA0MkE5QzMwMDAxMDBBMDI4RgotOjEwNDkwMDAwMDYyQTUxOTgwMDAwMDAwRTAyMkFDRjFDMDAwMDAwMDA2OQotOjEwNDkxMDAwMDQyQTlDNzAwMDEwMEExMjA2MkE1MUQwMDAwMDAwMEVEMgotOjEwNDkyMDAwMDIxMDEwMDgwMDAwMDAwMTAyMTAxMDUwMDAwMDAwMDFFOQotOjEwNDkzMDAwMDIxMDEwMDAwMDAzRDAwMDAyMTAxMDA0MDAwMDAwM0QxRgotOjEwNDk0MDAwMDkxMDE4MDAwMjAwMEEyMjA5MTAxMTAwMDAxMDBDMjJBMAotOjEwNDk1MDAwMDYxMDExNDAwMDAwMDAwODA5MTAxMTYwMDAxMDBDMzIxMAotOjEwNDk2MDAwMDYxMDExQTAwMDAwMDAxODA2MTAyNDAwMDAwMDAwRTA0RQotOjEwNDk3MDAwMDIxMDIwMUMwMDAwMDAwMDAyMTAyMDIwMDAwMDAwMDE5NgotOjEwNDk4MDAwMDIxMDIwQzAwMDAwMDAwMjAyMTAyMDA0MDAwMDAwMDFGQwotOjEwNDk5MDAwMDIxMDIwMDgwMDAwMDAwMTAyMTAzMEQ4MDAwMDAwMDFDMQotOjEwNDlBMDAwMDkxMDNDMDAwMDA1MEM0MjA5MTAzODAwMDAwNTBDNDdCNgotOjEwNDlCMDAwMDkxMDM5MjAwMDA1MEM0QzA5MTAzQjAwMDAwNTBDNTE3MgotOjEwNDlDMDAwMDIxMDQwRDQwMDAwMDAzMDAyMTA0MEQ4MDAwMDAwMzAzNwotOjEwNDlEMDAwMDYxMDRDMDAwMDAwMDEwMDAyMTA0MDI4MDAwMDAwMTBFQQotOjEwNDlFMDAwMDIxMDQwNDQwMDAwM0ZGRjAyMTA0MDU4MDAyODAwMDAyMQotOjEwNDlGMDAwMDIxMDQwODQwMDg0OTI0QTAyMTA0MDU4MDAwMDAwMDBENwotOjEwNEEwMDAwMDIxMDQxMzgwMDAwMDAwMTAyMTA0MTM4MDAwMDAwMDE4RQotOjEwNEExMDAwMDIxMDQxMzgwMDAwMDAwMTAyMTA0MTM4MDAwMDAwMDE3RQotOjEwNEEyMDAwMDIxMDQxMzgwMDAwMDAwMTAyMTA0MTM4MDAwMDAwMDE2RQotOjEwNEEzMDAwMDIxMDQxMzgwMDAwMDAwMTAyMTA0MTM4MDAwMDAwMDE1RQotOjEwNEE0MDAwMDIxMjA0OTAwMUY2ODA0MDAyMTIwNTE0MDAwMDNDMTA4RQotOjEwNEE1MDAwMDIxMjA0OTRGRkZGRkZGRjAyMTIwNDk4RkZGRkZGRkYwMgotOjEwNEE2MDAwMDIxMjA0OUNGRkZGRkZGRjAyMTIwNEEwRkZGRkZGRkZFMgotOjEwNEE3MDAwMDIxMjA0QTRGRkZGRkZGRjAyMTIwNEE4RkZGRkZGRkZDMgotOjEwNEE4MDAwMDIxMjA0QUNGRkZGRkZGRjAyMTIwNEIwRkZGRkZGRkZBMgotOjEwNEE5MDAwMDIxMjA0QjhGRkZGRkZGRjAyMTIwNEJDRkZGRkZGRkY3QQotOjEwNEFBMDAwMDIxMjA0QzBGRkZGRkZGRjAyMTIwNEM0RkZGRkZGRkY1QQotOjEwNEFCMDAwMDIxMjA0QzhGRkZGRkZGRjAyMTIwNENDRkZGRkZGRkYzQQotOjEwNEFDMDAwMDIxMjA0RDBGRkZGRkZGRjAyMTIwNEQ4RkZGRkZGRkYxNgotOjEwNEFEMDAwMDIxMjA0RENGRkZGRkZGRjAyMTIwNEUwRkZGRkZGRkZGMgotOjEwNEFFMDAwMDIxMjA0RTRGRkZGRkZGRjAyMTIwNEU4RkZGRkZGRkZEMgotOjEwNEFGMDAwMDIxMjA0RUNGRkZGRkZGRjAyMTIwNEYwRkZGRkZGRkZCMgotOjEwNEIwMDAwMDIxMjA0RjRGRkZGRkZGRjAyMTIwNEY4RkZGRkZGRkY5MQotOjEwNEIxMDAwMDIxMjA0RkNGRkZGRkZGRjAyMTIwNTAwRkZGRkZGRkY3MAotOjEwNEIyMDAwMDIxMjA1MDRGRkZGRkZGRjAyMTIwNTA4RkZGRkZGRkY0RgotOjEwNEIzMDAwMDIxMjA1MENGRkZGRkZGRjAyMTIwNTEwRkZGRkZGRkYyRgotOjEwNEI0MDAwMDIxMjA0RDRGODAwQzAwMDAyMTIwNEI0RjAwMDUwMDBCNQotOjEwNEI1MDAwMDIxMjAzOTAwMDAwMDAwODAyMTIwMzlDMDAwMDAwMDhFQgotOjEwNEI2MDAwMDIxMjAzQTAwMDAwMDAwODAyMTIwM0E0MDAwMDAwMDJDOQotOjEwNEI3MDAwMDIxMjAzQkMwMDAwMDAwNDAyMTIwM0MwMDAwMDAwMDU4MgotOjEwNEI4MDAwMDIxMjAzQzQwMDAwMDAwNDAyMTIwM0QwMDAwMDAwMDA1RgotOjEwNEI5MDAwMDIxMjAzNkMwMDAwMDAwMTAyMTIwMUJDMDAwMDAwNDA4MAotOjEwNEJBMDAwMDIxMjAxQzAwMDAwMTgwODAyMTIwMUM0MDAwMDA4MDMyQwotOjEwNEJCMDAwMDIxMjAxQzgwMDAwMDgwMzAyMTIwMUNDMDAwMDAwNDBFQwotOjEwNEJDMDAwMDIxMjAxRDAwMDAwMDAwMzAyMTIwMUQ0MDAwMDA4MDMwOQotOjEwNEJEMDAwMDIxMjAxRDgwMDAwMDgwMzAyMTIwMURDMDAwMDA4MDNFMQotOjEwNEJFMDAwMDIxMjAxRTAwMDAxMDAwMzAyMTIwMUU0MDAwMDA4MDNDOAotOjEwNEJGMDAwMDIxMjAxRTgwMDAwMDgwMzAyMTIwMUVDMDAwMDAwMDNBOQotOjEwNEMwMDAwMDIxMjAxRjAwMDAwMDAwMzAyMTIwMUY0MDAwMDAwMDM5MAotOjEwNEMxMDAwMDIxMjAxRjgwMDAwMDAwMzAyMTIwMUZDMDAwMDAwMDM3MAotOjEwNEMyMDAwMDIxMjAyMDAwMDAwMDAwMzAyMTIwMjA0MDAwMDAwMDM0RQotOjEwNEMzMDAwMDIxMjAyMDgwMDAwMDAwMzAyMTIwMjBDMDAwMDAwMDMyRQotOjEwNEM0MDAwMDIxMjAyMTAwMDAwMDAwMzAyMTIwMjE0MDAwMDAwMDMwRQotOjEwNEM1MDAwMDIxMjAyMTgwMDAwMDAwMzAyMTIwMjFDMDAwMDAwMDNFRQotOjEwNEM2MDAwMDIxMjAyMjAwMDAwMDAwMzAyMTIwMjI0MDAwMDAwMDNDRQotOjEwNEM3MDAwMDIxMjAyMjgwMDAwMjQwMzAyMTIwMjJDMDAwMDAwMkY1RQotOjEwNEM4MDAwMDIxMjAyMzAwMDAwMDAwOTAyMTIwMjM0MDAwMDAwMTk3MgotOjEwNEM5MDAwMDIxMjAyMzgwMDAwMDE4NDAyMTIwMjNDMDAwMDAxODM2QgotOjEwNENBMDAwMDIxMjAyNDAwMDAwMDMwNjAyMTIwMjQ0MDAwMDAwMTkzMgotOjEwNENCMDAwMDIxMjAyNDgwMDAwMDAwNjAyMTIwMjRDMDAwMDAzMDYyNQotOjEwNENDMDAwMDIxMjAyNTAwMDAwMDMwNjAyMTIwMjU0MDAwMDAzMDYwMgotOjEwNENEMDAwMDIxMjAyNTgwMDAwMEM4NjAyMTIwMjVDMDAwMDAzMDY1OQotOjEwNENFMDAwMDIxMjAyNjAwMDAwMDMwNjAyMTIwMjY0MDAwMDAwMDZDNQotOjEwNENGMDAwMDIxMjAyNjgwMDAwMDAwNjAyMTIwMjZDMDAwMDAwMDZBOAotOjEwNEQwMDAwMDIxMjAyNzAwMDAwMDAwNjAyMTIwMjc0MDAwMDAwMDY4NwotOjEwNEQxMDAwMDIxMjAyNzgwMDAwMDAwNjAyMTIwMjdDMDAwMDAwMDY2NwotOjEwNEQyMDAwMDIxMjAyODAwMDAwMDAwNjAyMTIwMjg0MDAwMDAwMDY0NwotOjEwNEQzMDAwMDIxMjAyODgwMDAwMDAwNjAyMTIwMjhDMDAwMDAwMDYyNwotOjEwNEQ0MDAwMDIxMjAyOTAwMDAwMDAwNjAyMTIwMjk0MDAwMDAwMDYwNwotOjEwNEQ1MDAwMDIxMjAyOTgwMDAwMDAwNjAyMTIwMjlDMDAwMDAwMDZFNwotOjEwNEQ2MDAwMDIxMjAyQTAwMDAwMDMwNjAyMTIwMkE0MDAwMDAwMTNCNwotOjEwNEQ3MDAwMDIxMjAyQTgwMDAwMDAwNjAyMTIwMkIwMDAwMDEwMDQ5NQotOjEwNEQ4MDAwMDIxMjAyQjQwMDAwMTAwNDAyMTIwMzI0MDAxMDY0NDA1NgotOjEwNEQ5MDAwMDIxMjAzMjgwMDEwNjQ0MDAyMTIwNUI0MDAwMDAwMDE1MgotOjEwNERBMDAwMDIxMjA1RjgwMDAwMDA0MDAyMTIwNUZDMDAwMDAwMTk4NAotOjEwNERCMDAwMDIxMjA2MDAwMDAwMDAwMTAyMTIwNjZDMDAwMDAwMDE1MQotOjEwNERDMDAwMDIxMjAxQjAwMDAwMDAwMTAyMTIwN0Q4MDAwMDAwMDMyNwotOjEwNEREMDAwMDIxMjA3RDgwMDAwMDAwMzAyMTIwN0Q4MDAwMDAwMDNFNwotOjEwNERFMDAwMDIxMjA3RDgwMDAwMDAwMzAyMTIwN0Q4MDAwMDAwMDNENwotOjEwNERGMDAwMDIxMjA3RDgwMDAwMDAwMzAyMTIwN0Q4MDAwMDAwMDNDNwotOjEwNEUwMDAwMDIxMjA3RDgwMDAwMDAwMzA2MDBBMDAwMDAwMDAwMENGQQotOjEwNEUxMDAwMDIwMEEwNTAwMDAwMDAwMDAyMDBBMDU0MDAwMDAwMDBBQQotOjEwNEUyMDAwMDIwMEEwRUM1NTU0MDAwMDAyMDBBMEYwNTU1NTU1NTU2NQotOjEwNEUzMDAwMDIwMEEwRjQwMDAwNTU1NTAyMDBBMEY4RjAwMDAwMDBBOAotOjEwNEU0MDAwMDIwMEEwRkM1NTU0MDAwMDAyMDBBMTAwNTU1NTU1NTUyNAotOjEwNEU1MDAwMDIwMEExMDQwMDAwNTU1NTAyMDBBMTA4RjAwMDAwMDA2NgotOjEwNEU2MDAwMDIwMEExOUMwMDAwMDAwMDAyMDBBMUEwMDAwMTAwMDBCRgotOjEwNEU3MDAwMDIwMEExQTQwMDAwNTAxNDAyMDBBMUE4MDAwMDAwMDAzQwotOjEwNEU4MDAwMDIwMEE2QTgwMDAwMDAwMDAyMDBBNkFDMDAwMDAwMDA3RQotOjEwNEU5MDAwMDIwMEE2RDAwMDAwMDAwMDAyMDBBNDVDMDAwMDBDMDA4QwotOjEwNEVBMDAwMDIwMEE2MUMwMDAwMDAwMzAyMDBBMDcwRkZGNTVGRkZENwotOjEwNEVCMDAwMDIwMEEwNzQwMDAwRkZGRjAyMDBBMDc4RjAwMDAzRTBGMQotOjEwNEVDMDAwMDIwMEEwN0MwMDAwMDAwMDAyMDBBMDgwMDAwMEEwMDAwMgotOjEwNEVEMDAwMDYwMEEwODQwMDAwMDAwNTAyMDBBMDk4MEZFMDAwMDA3QQotOjEwNEVFMDAwMDYwMEEwOUMwMDAwMDAwNzAyMDBBMEI4MDAwMDA0MDAxQgotOjEwNEVGMDAwMDYwMEEwQkMwMDAwMDAwMzAyMDBBMEM4MDAwMDEwMDBEMwotOjEwNEYwMDAwMDYwMEEwQ0MwMDAwMDAwMzAyMDBBMEQ4MDAwMDQwMDA3MgotOjEwNEYxMDAwMDYwMEEwREMwMDAwMDAwMzAyMDBBMEU4MDAwMTAwMDA4MQotOjEwNEYyMDAwMDYwMEEyMkMwMDAwMDAwNDAyMDBBNjg4MDAwMDAwRkM3RAotOjEwNEYzMDAwMDYwMEE2OEMwMDAwMDAwNzAyMDBBNkY0MDAwMDAwMDA5NgotOjEwNEY0MDAwMDIwMEExMENGRjVDMDAwMDAyMDBBMTEwRkZGNTVGRkY1MgotOjEwNEY1MDAwMDIwMEExMTQwMDAwRkZGRjAyMDBBMTE4RjAwMDAzRTAwRQotOjEwNEY2MDAwMDIwMEExMUMwMDAwMDAwMDAyMDBBMTIwMDAwMEEwMDAxRgotOjEwNEY3MDAwMDYwMEExMjQwMDAwMDAwNTAyMDBBMTM4MEZFMDAwMDA5NwotOjEwNEY4MDAwMDYwMEExM0MwMDAwMDAwNzAyMDBBMTU4MDAwMDA4MDAzNAotOjEwNEY5MDAwMDYwMEExNUMwMDAwMDAwMzAyMDBBMTY4MDAwMDIwMDBFMAotOjEwNEZBMDAwMDYwMEExNkMwMDAwMDAwMzAyMDBBMTc4MDAwMDgwMDA1MAotOjEwNEZCMDAwMDYwMEExN0MwMDAwMDAwMzAyMDBBMTg4MDAwMjAwMDA5RQotOjEwNEZDMDAwMDYwMEEyM0MwMDAwMDAwNDAyMDBBNkIwMDAwMDAwRkNBNQotOjEwNEZEMDAwMDYwMEE2QjQwMDAwMDAwNzAyMDBBNkY4MDAwMDAwMDBDQQotOjEwNEZFMDAwMDIwMEEwMzAwMDAwMDAwMDAyMDBBMDM0MDAwMDAwMDAxOQotOjEwNEZGMDAwMDIwMEEwMzgwMDAwMDAwMDAyMDBBMDNDMDAwMDAwMDBGOQotOjEwNTAwMDAwMDIwMEEwNDAwMDAwMDAwMDAyMDBBMDQ0MDAwMDAwMDBEOAotOjEwNTAxMDAwMDIwMEEwNDgwMDAwMDAwMDAyMDBBMDRDMDAwMDAwMDBCOAotOjEwNTAyMDAwMDIwMDkwQzQwMDAwRTAwMDAyMDA5MENDMDAwMEYzMDBGOQotOjEwNTAzMDAwMDIwMDkwRDQwMDAwMDAwMzAyMDA5MUEwMDAwMDAwMDFEMwotOjEwNTA0MDAwMDYwMDkxNzAwMDAwMDAwMzAyMDA5MEVDMDAwMDYwMDA3OAotOjEwNTA1MDAwMDIwMDkwRjQwMDAwNzMwMDAyMDA5MEZDMDAwMDAwMDNDNgotOjEwNTA2MDAwMDIwMDkxQTgwMDAwMDAwMTA2MDA5MTg4MDAwMDAwMDNFMgotOjEwNTA3MDAwMDIwMDkxMDAwMDAwNDAwMDAyMDA5MTA4MDAwMDUzMDA2RgotOjEwNTA4MDAwMDIwMDkxMTAwMDAwMDAwNDAyMDA5MUFDMDAwMDAwMDEzOQotOjEwNTA5MDAwMDYwMDkxOTQwMDAwMDAwMjAyMDA5MTlDMDAwMDAwMDFCMwotOjEwNTBBMDAwMDIwMDkwRDgwMDAwNjAwMDAyMDA5MEUwMDAwMDczMDA1MQotOjEwNTBCMDAwMDIwMDkwRTgwMDAwMDAwMzAyMDA5MUE0MDAwMDAwMDEzQgotOjEwNTBDMDAwMDIwMDkxN0MwMDAwMDAwMTAyMDA5MTgwMDAwMDAwMDFCQwotOjEwNTBEMDAwMDIwMDkxODQwMDAwMDAwMDAyMDA5MTI4MDAwMDAzMDBGQgotOjEwNTBFMDAwMDIwMDkxNkMwMDAzRjAwODAyMDA5MTJDMDAwMDAzMDAwNAotOjEwNTBGMDAwMDIwMDkxMzAwMDAwMDMwMDAyMDA5MTM0MDAwMDAzMDAyMAotOjEwNTEwMDAwMDIwMDkxMzgwMDAwMDMwMDAyMDA5MTNDMDAwMDAzMDBGRgotOjEwNTExMDAwMDIwMDkxNDAwMDAwMDMwMDAyMDA5NDJDMDAwMDAwMDFGNgotOjEwNTEyMDAwMDIwMDk0MzAwMDAwMDAwMTAyMDA5NDM0MDAwMDAwMDFFRAotOjEwNTEzMDAwMDIwMDk0MkMwMDAwMDAwMTAyMDA5NDMwMDAwMDAwMDFFNQotOjEwNTE0MDAwMDIwMDk0MzQwMDAwMDAwMTAyMDA5NDJDMDAwMDAwMDFEMQotOjEwNTE1MDAwMDIwMDk0MzAwMDAwMDAwMTAyMDA5NDM0MDAwMDAwMDFCRAotOjEwNTE2MDAwMDIwMDk0MkMwMDAwMDAwMTAyMDA5NDMwMDAwMDAwMDFCNQotOjEwNTE3MDAwMDIwMDk0MzQwMDAwMDAwMTAyMDA5NDJDMDAwMDAwMDFBMQotOjEwNTE4MDAwMDIwMDk0MzAwMDAwMDAwMTAyMDA5NDM0MDAwMDAwMDE4RAotOjEwNTE5MDAwMDIwMDk0MkMwMDAwMDAwMTAyMDA5NDMwMDAwMDAwMDE4NQotOjEwNTFBMDAwMDIwMDk0MzQwMDAwMDAwMTAyMDA5NDJDMDAwMDAwMDE3MQotOjEwNTFCMDAwMDIwMDk0MzAwMDAwMDAwMTAyMDA5NDM0MDAwMDAwMDE1RAotOjEwNTFDMDAwMDIwMDk0MkMwMDAwMDAwMTAyMDA5NDMwMDAwMDAwMDE1NQotOjEwNTFEMDAwMDIwMDk0MzQwMDAwMDAwMTAyMTMwMDc4MDAwMDAwMzA0NwotOjEwNTFFMDAwMDIxMzAwM0MwMDAwNjFBODA2MTMwMTA4MDAwMDAwMDM0MAotOjEwNTFGMDAwMDIxMzAxMDQwMDAwMDAwMDAyMTMwMTM0MDAwMDAwMDA0QgotOjEwNTIwMDAwMDYxMzAxMDgwMDAwMDAwMzAyMTMwMTA0MDAwMDAwMDA1RgotOjEwNTIxMDAwMDIxMzAxMzQwMDAwMDAwMDA2MTMwMTA4MDAwMDAwMDMxRgotOjEwNTIyMDAwMDIxMzAxMDQwMDAwMDAwMDAyMTMwMTM0MDAwMDAwMDAxQQotOjEwNTIzMDAwMDYxMzAxMDgwMDAwMDAwMzAyMTMwMTA0MDAwMDAwMDAyRgotOjEwNTI0MDAwMDIxMzAxMzQwMDAwMDAwMDA2MTMwMTA4MDAwMDAwMDNFRgotOjEwNTI1MDAwMDIxMzAxMDQwMDAwMDAwMDAyMTMwMTM0MDAwMDAwMDBFQQotOjEwNTI2MDAwMDYxMzAxMDgwMDAwMDAwMzAyMTMwMTA0MDAwMDAwMDBGRgotOjEwNTI3MDAwMDIxMzAxMzQwMDAwMDAwMDA2MTMwMTA4MDAwMDAwMDNCRgotOjEwNTI4MDAwMDIxMzAxMDQwMDAwMDAwMDAyMTMwMTM0MDAwMDAwMDBCQQotOjEwNTI5MDAwMDYxMzAxMDgwMDAwMDAwMzAyMTMwMTA0MDAwMDAwMDBDRgotOjEwNTJBMDAwMDIxMzAxMzQwMDAwMDAwMDAyMTEwMEI4MDAwMDAwMDFFOAotOjEwNTJCMDAwMDIxNkU2RTgwMDAwMjAwMDAyMTZFNkVDMDAwMDIwMDBERQotOjEwNTJDMDAwMDIxNkU2RjAwMDAwNjU1NTAyMTZFNkY0MDAwMDY1NTU4QQotOjEwNTJEMDAwMDIxNjgxNTAwMDAwMDAwMDAyMTY4MTc0MDAwMDAwMDFENwotOjEwNTJFMDAwMDIxNjgxNzgwMDAwMDAwMTAyMTY4MTdDMDAwMDAwMDE5NgotOjEwNTJGMDAwMDIxNjgxODAwMDAwMDAwMTAyMTY4MTg0MDAwMDAwMDE3NgotOjEwNTMwMDAwMDIxNjgxODgwMDAwMDAwMTAyMTY4MUI0MDAwMDAwMDEyRAotOjEwNTMxMDAwMDIxNjgxQjgwMDAwMDAwMTAyMTY4MUJDMDAwMDAwMDFFNQotOjEwNTMyMDAwMDIxNjgxQzAwMDAwMDAwMTAyMTY4MUM0MDAwMDAwMDFDNQotOjEwNTMzMDAwMDIxNjgxQzgwMDAwMDAwMTAyMTY4MTEwMDAwMDAwMDA2MgotOjEwNTM0MDAwMDIxNjgyNDAwMEJGMDBCRjA2MTY4MjQ0MDAwMDAwMDIyMQotOjEwNTM1MDAwMDIxNjgyNEMwMEJGMDBCRjAyMTZFNkM0MDAwMDAwMDEyNgotOjEwNTM2MDAwMDIxNkU2QzgwMDAwMDAwMzAyMTZFNzk0MDAwMDAwMDBFMQotOjEwNTM3MDAwMDQyQUNGNDAwMDBBMEM1NjAwMDAwMDAwMDAwMDAwMDA4NAotOjEwNTM4MDAwMDAwMDAwMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOQotOjEwNTM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAotOjEwNTNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNDAwMzU5NAotOjEwNTNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAotOjEwNTNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAotOjEwNTNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUwMDYwMDAwMDAwMDAzOAotOjEwNTNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAotOjEwNTNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAotOjEwNTQwMDAwMDAwMDAwMDAwMDYwMDA5MTAwMDAwMDAwMDAwMDAwMDBBQgotOjEwNTQxMDAwMDA5MTAwOTUwMDk1MDA5OTAwOTkwMDlEMDA5RDAwQTFDNAotOjEwNTQyMDAwMDBBMTAwQTUwMEE1MDBBOTAwQTkwMEFEMDBBRDAwQjEzNAotOjEwNTQzMDAwMDBCMTAwQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgotOjEwNTQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QwotOjEwNTQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNTAzMTE4MwotOjEwNTQ2MDAwMDMxMTAzMUIwMzFCMDMyNTAzMjUwMzJDMDMyQzAzMzMwOAotOjEwNTQ3MDAwMDMzMzAzM0EwMzNBMDM0MTAzNDEwMzQ4MDM0ODAzNEYwQwotOjEwNTQ4MDAwMDM0RjAzNTYwMzU2MDM1RDAwMDAwMDAwMDAwMDAwMDBCOAotOjEwNTQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQwotOjEwNTRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQwotOjEwNTRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQwotOjEwNTRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQwotOjEwNTREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQwotOjEwNTRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQwotOjEwNTRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQwotOjEwNTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QgotOjEwNTUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QgotOjEwNTUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QgotOjEwNTUzMDAwMDAwMDAwMDAwMDAwMDAwMDAzNUQwMzVFMDAwMDAwMDBBQQotOjEwNTU0MDAwMDAwMDAwMDAwMzVFMDM1RjAzNUYwMzYwMDM2MDAzNjEwQwotOjEwNTU1MDAwMDM2MTAzNjIwMzYyMDM2MzAzNjMwMzY0MDM2NDAzNjUxQgotOjEwNTU2MDAwMDM2NTAzNjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QQotOjEwNTU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQgotOjEwNTU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQgotOjEwNTU5MDAwMDM2NjAzNkQwMzZEMDM3OTAzNzkwMzg1MDAwMDAwMDA0MgotOjEwNTVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQgotOjEwNTVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQgotOjEwNTVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQgotOjEwNTVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQgotOjEwNTVFMDAwMDAwMDAwMDAwMDAwMDAwMDAzODUwMzg2MDAwMDAwMDBBQQotOjEwNTVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQgotOjEwNTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QQotOjEwNTYxMDAwMDAwMDAwMDAwMzg2MDNCMTAwMDAwMDAwMDAwMDAwMDA0RAotOjEwNTYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QQotOjEwNTYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QQotOjEwNTY0MDAwMDNCMTAzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMwotOjEwNTY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QQotOjEwNTY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFMDA0MEY0NAotOjEwNTY3MDAwMDAwMDAwMDAwMDAwMDAwMDA0MEYwNDE2MDQxNjA0MURDMgotOjEwNTY4MDAwMDQxRDA0MjQwNDI0MDQyQjA0MkIwNDMyMDQzMjA0MzlBMgotOjEwNTY5MDAwMDQzOTA0NDAwNDQwMDQ0NzA0NDcwNDdBMDAwMDAwMDAzMQotOjEwNTZBMDAwMDAwMDAwMDAwNDdBMDQ3RTA0N0UwNDgyMDQ4MjA0ODZFMgotOjEwNTZCMDAwMDQ4NjA0OEEwNDhBMDQ4RTA0OEUwNDkyMDQ5MjA0OTY1QQotOjEwNTZDMDAwMDQ5NjA0OUEwNDlBMDRFQTA0RUEwNTAwMDUwMDA1MTYwMwotOjEwNTZEMDAwMDUxNjA1MTgwNTE4MDUxQTA1MUEwNTFDMDUxQzA1MUVEMgotOjEwNTZFMDAwMDUxRTA1MjAwNTIwMDUyMjA1MjIwNTI0MDUyNDA1MjY4MgotOjEwNTZGMDAwMDUyNjA2OTMwMDAwMDAwMDAwMDAwMDAwMDY5MzA2OThBRgotOjEwNTcwMDAwMDY5ODA2OUQwNjlEMDZBMjA2QTIwNkE3MDZBNzA2QUM1OQotOjEwNTcxMDAwMDZBQzA2QjEwNkIxMDZCNjA2QjYwNkJCMDZCQjA2QkNBRAotOjEwNTcyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OQotOjEwNTczMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OQotOjEwNTc0MDAwMDAwMDAwMDAwMDAwMDAwMDA2QkMwNkUwMDAwMDAwMDBCMQotOjEwNTc1MDAwMDAwMDAwMDAwNkUwMDZFMjA2RTIwNkU0MDZFNDA2RTZEMwotOjEwNTc2MDAwMDZFNjA2RTgwNkU4MDZFQTA2RUEwNkVDMDZFQzA2RUVCOQotOjEwNTc3MDAwMDZFRTA2RjAwNkYwMDcwNTA3MDUwNzA4MDcwODA3MEIwMQotOjEwNTc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOQotOjEwNTc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQotOjEwNTdBMDAwMDcwQjA3NEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MQotOjEwNTdCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOQotOjEwNTdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0RjA3RTE5QgotOjEwNTdEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOQotOjEwNTdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOQotOjEwNTdGMDAwMDAwMDAwMDAwMDAwMDAwMDA3RTEwN0VGMDAwMDAwMDBDQgotOjEwNTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OAotOjEwNTgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OAotOjEwNTgyMDAwMDAwMDAwMDAwN0VGMDgyQzAwMDAwMDAwMDAwMDAwMDA0RQotOjEwNTgzMDAwMDgyQzA4MzUwODM1MDgzRTA4M0UwODQ3MDg0NzA4NTAzOAotOjEwNTg0MDAwMDg1MDA4NTkwODU5MDg2MjA4NjIwODZCMDg2QjA4NzQwOAotOjEwNTg1MDAwMDg3NDA4RDUwOEQ1MDhFQTA4RUEwOEZGMDhGRjA5MDIxNQotOjEwNTg2MDAwMDkwMjA5MDUwOTA1MDkwODA5MDgwOTBCMDkwQjA5MEVCMAotOjEwNTg3MDAwMDkwRTA5MTEwOTExMDkxNDA5MTQwOTE3MDkxNzA5MjAzQQotOjEwNTg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOAotOjEwNTg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAotOjEwNThBMDAwMDAwMDAwMDAwMDAwMDAwMDA5MjAwOTI2MDAwMDAwMDBBMAotOjEwNThCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOAotOjEwNThDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOAotOjEwNThEMDAwMDAwMDAwMDAwOTI2MDkyQjAwMDAwMDAwMDAwMDAwMDA2NQotOjEwNThFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOAotOjEwNThGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOAotOjEwNTkwMDAwMDkyQjA5MzMwMDAwMDAwMDAwMDAwMDAwMDkzMzA5MzRBRQotOjEwNTkxMDAwMDkzNDA5MzUwOTM1MDkzNjA5MzYwOTM3MDkzNzA5Mzg4RgotOjEwNTkyMDAwMDkzODA5MzkwOTM5MDkzQTA5M0EwOTNCMDAwMDAwMDBFOAotOjEwNTkzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NwotOjEwNTk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NwotOjEwNTk1MDAwMDAwMDAwMDAwMDAwMDAwMDA5M0IwOUFDMDAwMDAwMDA0RQotOjEwNTk2MDAwMDAwMDAwMDAwOUFDMDlBRDA5QUQwOUFFMDlBRTA5QUZGMAotOjEwNTk3MDAwMDlBRjA5QjAwOUIwMDlCMTA5QjEwOUIyMDlCMjA5QjM1NwotOjEwNTk4MDAwMDlCMzA5QjQwOUI0MDlDODA5QzgwOURCMDlEQjA5RUY3RgotOjEwNTk5MDAwMDlFRjA5RjAwOUYwMDlGMTA5RjEwOUYyMDlGMjA5RjMzNwotOjEwNTlBMDAwMDlGMzA5RjQwOUY0MDlGNTA5RjUwOUY2MDlGNjA5RjcwNwotOjEwNTlCMDAwMDlGNzBBMTYwMDAwMDAwMDAwMDAwMDAwMEExNjBBMTk4NAotOjEwNTlDMDAwMEExOTBBMUMwQTFDMEExRjBBMUYwQTIyMEEyMjBBMjU4RgotOjEwNTlEMDAwMEEyNTBBMjgwQTI4MEEyQjBBMkIwQTJFMEEyRTBBMzAyMAotOjEwNTlFMDAwMDAwMDAwMDAwMDAwMDAwMDBBMzAwQTMzMEEzMzBBMzZDMwotOjEwNTlGMDAwMEEzNjBBMzkwQTM5MEEzQzBBM0MwQTNGMEEzRjBBNDI3NwotOjEwNUEwMDAwMEE0MjBBNDUwQTQ1MEE0ODBBNDgwQTQ5MDAwMDAwMDBCNQotOjEwNUExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgotOjEwNUEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgotOjEwNUEzMDAwMDAwMDAwMDAwQTQ5MEE2MTAwMDAwMDAwMDAwMDAwMDBBOAotOjEwNUE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NgotOjEwNUE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NgotOjEwNUE2MDAwMEE2MTBBNjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgotOjEwNUE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgotOjEwNUE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgotOjEwNUE5MDAwMDAwMTAwMDAwMDAyMDcwMDAwMDMwRTAwMDAwNDE1MDBEMgotOjEwNUFBMDAwMDAwNTFDMDAwMDA2MjMwMDAwMDcyQTAwMDAwODMxMDA0MgotOjEwNUFCMDAwMDAwOTM4MDAwMDBBM0YwMDAwMEI0NjAwMDAwQzREMDBCMgotOjEwNUFDMDAwMDAwRDU0MDAwMDBFNUIwMDAwMEY2MjAwMDAxMDY5MDAyMgotOjEwNUFEMDAwMDAxMTcwMDAwMDEyNzcwMDAwMTM3RTAwMDAxNDg1MDA5MgotOjEwNUFFMDAwMDAxNThDMDAwMDE2OTMwMDAwMTc5QTAwMDAxOEExMDAwMgotOjEwNUFGMDAwMDAxOUE4MDAwMDFBQUYwMDAwMUJCNjAwMDAxQ0JEMDA3MgotOjEwNUIwMDAwMDAxREM0MDAwMDFFQ0IwMDAwMUZEMjAwMDAwMEQ5MDAwMQotOjEwNUIxMDAwMDAwMDIwMDAwMDAwNDAwMDAwMDA2MDAwMDAwMDgwMDA0NQotOjEwNUIyMDAwMDAwMEEwMDAwMDAwQzAwMDAwMDBFMDAwMDAwMTAwMDAzNAotOjEwNUIzMDAwMDAwMTIwMDAwMDAxNDAwMDAwMDE2MDAwMDAwMTgwMDAyMQotOjEwNUI0MDAwMDAwMUEwMDAwMDAxQzAwMDAwMDFFMDAwMDAwMjAwMDAxMAotOjEwNUI1MDAwMDAwMjIwMDAwMDAyNDAwMDAwMDI2MDAwMDAwMjgwMDBGRAotOjEwNUI2MDAwMDAwMkEwMDAwMDAyQzAwMDAwMDJFMDAwMDAwMzAwMDBFQwotOjEwNUI3MDAwMDAwMzIwMDAwMDAzNDAwMDAwMDM2MDAwMDAwMzgwMDBEOQotOjEwNUI4MDAwMDAwM0EwMDAwMDAzQzAwMDAwMDNFMDAwMDAwNDAwMDBDOAotOjEwNUI5MDAwMDAwNDIwMDAwMDA0NDAwMDAwMDQ2MDAwMDAwNDgwMDBCNQotOjEwNUJBMDAwMDAwNEEwMDAwMDA0QzAwMDAwMDRFMDAwMDAwNTAwMDBBNAotOjEwNUJCMDAwMDAwNTIwMDAwMDA1NDAwMDAwMDU2MDAwMDAwNTgwMDA5MQotOjEwNUJDMDAwMDAwNUEwMDAwMDA1QzAwMDAwMDVFMDAwMDAwNjAwMDA4MAotOjEwNUJEMDAwMDAwNjIwMDAwMDA2NDAwMDAwMDY2MDAwMDAwNjgwMDA2RAotOjEwNUJFMDAwMDAwNkEwMDAwMDA2QzAwMDAwMDZFMDAwMDAwNzAwMDA1QwotOjEwNUJGMDAwMDAwNzIwMDAwMDA3NDAwMDAwMDc2MDAwMDAwNzgwMDA0OQotOjEwNUMwMDAwMDAwN0EwMDAwMDA3QzAwMDAwMDdFMDAwMDAwODAwMDAzNwotOjEwNUMxMDAwMDAwODIwMDAwMDA4NDAwMDAwMDg2MDAwMDAwODgwMDAyNAotOjEwNUMyMDAwMDAwOEEwMDAwMDA4QzAwMDAwMDhFMDAwMDAwOTAwMDAxMwotOjEwNUMzMDAwMDAwOTIwMDAwMDA5NDAwMDAwMDk2MDAwMDAwOTgwMDAwMAotOjEwNUM0MDAwMDAwOUEwMDAwMDA5QzAwMDAwMDlFMDAwMDAwQTAwMDBFRgotOjEwNUM1MDAwMDAwQTIwMDAwMDBBNDAwMDAwMEE2MDAwMDAwQTgwMDBEQwotOjEwNUM2MDAwMDAwQUEwMDAwMDBBQzAwMDAwMEFFMDAwMDAwQjAwMDBDQgotOjEwNUM3MDAwMDAwQjIwMDAwMDBCNDAwMDAwMEI2MDAwMDAwQjgwMDBCOAotOjEwNUM4MDAwMDAwQkEwMDAwMDBCQzAwMDAwMEJFMDAwMDAwQzAwMDBBNwotOjEwNUM5MDAwMDAwQzIwMDAwMDBDNDAwMDAwMEM2MDAwMDAwQzgwMDA5NAotOjEwNUNBMDAwMDAwQ0EwMDAwMDBDQzAwMDAwMENFMDAwMDAwRDAwMDA4MwotOjEwNUNCMDAwMDAwRDIwMDAwMDBENDAwMDAwMEQ2MDAwMDAwRDgwMDA3MAotOjEwNUNDMDAwMDAwREEwMDAwMDBEQzAwMDAwMERFMDAwMDAwRTAwMDA1RgotOjEwNUNEMDAwMDAwRTIwMDAwMDBFNDAwMDAwMEU2MDAwMDAwRTgwMDA0QwotOjEwNUNFMDAwMDAwRUEwMDAwMDBFQzAwMDAwMEVFMDAwMDAwRjAwMDAzQgotOjEwNUNGMDAwMDAwRjIwMDAwMDBGNDAwMDAwMEY2MDAwMDAwRjgwMDAyOAotOjEwNUQwMDAwMDAwRkEwMDAwMDBGQzAwMDAwMEZFMDAwMDAxMDAwMDAxNgotOjEwNUQxMDAwMDAxMDIwMDAwMDEwNDAwMDAwMTA2MDAwMDAxMDgwMDAwMwotOjEwNUQyMDAwMDAxMEEwMDAwMDEwQzAwMDAwMTBFMDAwMDAxMTAwMDBGMgotOjEwNUQzMDAwMDAxMTIwMDAwMDExNDAwMDAwMTE2MDAwMDAxMTgwMDBERgotOjEwNUQ0MDAwMDAxMUEwMDAwMDExQzAwMDAwMTFFMDAwMDAxMjAwMDBDRQotOjEwNUQ1MDAwMDAxMjIwMDAwMDEyNDAwMDAwMTI2MDAwMDAxMjgwMDBCQgotOjEwNUQ2MDAwMDAxMkEwMDAwMDEyQzAwMDAwMTJFMDAwMDAxMzAwMDBBQQotOjEwNUQ3MDAwMDAxMzIwMDAwMDEzNDAwMDAwMTM2MDAwMDAxMzgwMDA5NwotOjEwNUQ4MDAwMDAxM0EwMDAwMDEzQzAwMDAwMTNFMDAwMDAxNDAwMDA4NgotOjEwNUQ5MDAwMDAxNDIwMDAwMDE0NDAwMDAwMTQ2MDAwMDAxNDgwMDA3MwotOjEwNURBMDAwMDAxNEEwMDAwMDE0QzAwMDAwMTRFMDAwMDAxNTAwMDA2MgotOjEwNURCMDAwMDAxNTIwMDAwMDE1NDAwMDAwMTU2MDAwMDAxNTgwMDA0RgotOjEwNURDMDAwMDAxNUEwMDAwMDE1QzAwMDAwMTVFMDAwMDAxNjAwMDAzRQotOjEwNUREMDAwMDAxNjIwMDAwMDE2NDAwMDAwMTY2MDAwMDAxNjgwMDAyQgotOjEwNURFMDAwMDAxNkEwMDAwMDE2QzAwMDAwMTZFMDAwMDAxNzAwMDAxQQotOjEwNURGMDAwMDAxNzIwMDAwMDE3NDAwMDAwMTc2MDAwMDAxNzgwMDAwNwotOjEwNUUwMDAwMDAxN0EwMDAwMDE3QzAwMDAwMTdFMDAwMDAxODAwMDBGNQotOjEwNUUxMDAwMDAxODIwMDAwMDE4NDAwMDAwMTg2MDAwMDAxODgwMDBFMgotOjEwNUUyMDAwMDAxOEEwMDAwMDE4QzAwMDAwMThFMDAwMDAxOTAwMDBEMQotOjEwNUUzMDAwMDAxOTIwMDAwMDE5NDAwMDAwMTk2MDAwMDAxOTgwMDBCRQotOjEwNUU0MDAwMDAxOUEwMDAwMDE5QzAwMDAwMTlFMDAwMDAxQTAwMDBBRAotOjEwNUU1MDAwMDAxQTIwMDAwMDFBNDAwMDAwMUE2MDAwMDAxQTgwMDA5QQotOjEwNUU2MDAwMDAxQUEwMDAwMDFBQzAwMDAwMUFFMDAwMDAxQjAwMDA4OQotOjEwNUU3MDAwMDAxQjIwMDAwMDFCNDAwMDAwMUI2MDAwMDAxQjgwMDA3NgotOjEwNUU4MDAwMDAxQkEwMDAwMDFCQzAwMDAwMUJFMDAwMDAxQzAwMDA2NQotOjEwNUU5MDAwMDAxQzIwMDAwMDFDNDAwMDAwMUM2MDAwMDAxQzgwMDA1MgotOjEwNUVBMDAwMDAxQ0EwMDAwMDFDQzAwMDAwMUNFMDAwMDAxRDAwMDA0MQotOjEwNUVCMDAwMDAxRDIwMDAwMDFENDAwMDAwMUQ2MDAwMDAxRDgwMDAyRQotOjEwNUVDMDAwMDAxREEwMDAwMDFEQzAwMDAwMURFMDAwMDAxRTAwMDAxRAotOjEwNUVEMDAwMDAxRTIwMDAwMDFFNDAwMDAwMUU2MDAwMDAxRTgwMDAwQQotOjEwNUVFMDAwMDAxRUEwMDAwMDFFQzAwMDAwMUVFMDAwMDAxRjAwMDBGOQotOjEwNUVGMDAwMDAxRjIwMDAwMDFGNDAwMDAwMUY2MDAwMDAxRjgwMDBFNgotOjEwNUYwMDAwMDAxRkEwMDAwMDFGQzAwMDAwMUZFMDAwMDAyMDAwMDBENAotOjEwNUYxMDAwMDAyMDIwMDAwMDIwNDAwMDAwMjA2MDAwMDAyMDgwMDBDMQotOjEwNUYyMDAwMDAyMEEwMDAwMDIwQzAwMDAwMjBFMDAwMDAyMTAwMDBCMAotOjEwNUYzMDAwMDAyMTIwMDAwMDIxNDAwMDAwMjE2MDAwMDAyMTgwMDA5RAotOjEwNUY0MDAwMDAyMUEwMDAwMDIxQzAwMDAwMjFFMDAwMDAyMjAwMDA4QwotOjEwNUY1MDAwMDAyMjIwMDAwMDIyNDAwMDAwMjI2MDAwMDAyMjgwMDA3OQotOjEwNUY2MDAwMDAyMkEwMDAwMDIyQzAwMDAwMjJFMDAwMDAyMzAwMDA2OAotOjEwNUY3MDAwMDAyMzIwMDAwMDIzNDAwMDAwMjM2MDAwMDAyMzgwMDA1NQotOjEwNUY4MDAwMDAyM0EwMDAwMDIzQzAwMDAwMjNFMDAwMDAyNDAwMDA0NAotOjEwNUY5MDAwMDAyNDIwMDAwMDI0NDAwMDAwMjQ2MDAwMDAyNDgwMDAzMQotOjEwNUZBMDAwMDAyNEEwMDAwMDI0QzAwMDAwMjRFMDAwMDAyNTAwMDAyMAotOjEwNUZCMDAwMDAyNTIwMDAwMDI1NDAwMDAwMjU2MDAwMDAyNTgwMDAwRAotOjEwNUZDMDAwMDAyNUEwMDAwMDI1QzAwMDAwMjVFMDAwMDAyNjAwMDBGQwotOjEwNUZEMDAwMDAyNjIwMDAwMDI2NDAwMDAwMjY2MDAwMDAyNjgwMDBFOQotOjEwNUZFMDAwMDAyNkEwMDAwMDI2QzAwMDAwMjZFMDAwMDAyNzAwMDBEOAotOjEwNUZGMDAwMDAyNzIwMDAwMDI3NDAwMDAwMjc2MDAwMDAyNzgwMDBDNQotOjEwNjAwMDAwMDAyN0EwMDAwMDI3QzAwMDAwMjdFMDAwMDAyODAwMDBCMwotOjEwNjAxMDAwMDAyODIwMDAwMDI4NDAwMDAwMjg2MDAwMDAyODgwMDBBMAotOjEwNjAyMDAwMDAyOEEwMDAwMDI4QzAwMDAwMjhFMDAwMDAyOTAwMDA4RgotOjEwNjAzMDAwMDAyOTIwMDAwMDI5NDAwMDAwMjk2MDAwMDAyOTgwMDA3QwotOjEwNjA0MDAwMDAyOUEwMDAwMDI5QzAwMDAwMjlFMDAwMDAyQTAwMDA2QgotOjEwNjA1MDAwMDAyQTIwMDAwMDJBNDAwMDAwMkE2MDAwMDAyQTgwMDA1OAotOjEwNjA2MDAwMDAyQUEwMDAwMDJBQzAwMDAwMkFFMDAwMDAyQjAwMDA0NwotOjEwNjA3MDAwMDAyQjIwMDAwMDJCNDAwMDAwMkI2MDAwMDAyQjgwMDAzNAotOjEwNjA4MDAwMDAyQkEwMDAwMDJCQzAwMDAwMkJFMDAwMDAyQzAwMDAyMwotOjEwNjA5MDAwMDAyQzIwMDAwMDJDNDAwMDAwMkM2MDAwMDAyQzgwMDAxMAotOjEwNjBBMDAwMDAyQ0EwMDAwMDJDQzAwMDAwMkNFMDAwMDAyRDAwMDBGRgotOjEwNjBCMDAwMDAyRDIwMDAwMDJENDAwMDAwMkQ2MDAwMDAyRDgwMDBFQwotOjEwNjBDMDAwMDAyREEwMDAwMDJEQzAwMDAwMkRFMDAwMDAyRTAwMDBEQgotOjEwNjBEMDAwMDAyRTIwMDAwMDJFNDAwMDAwMkU2MDAwMDAyRTgwMDBDOAotOjEwNjBFMDAwMDAyRUEwMDAwMDJFQzAwMDAwMkVFMDAwMDAyRjAwMDBCNwotOjEwNjBGMDAwMDAyRjIwMDAwMDJGNDAwMDAwMkY2MDAwMDAyRjgwMDBBNAotOjEwNjEwMDAwMDAyRkEwMDAwMDJGQzAwMDAwMkZFMDAwMDAzMDAwMDA5MgotOjEwNjExMDAwMDAzMDIwMDAwMDMwNDAwMDAwMzA2MDAwMDAzMDgwMDA3RgotOjEwNjEyMDAwMDAzMEEwMDAwMDMwQzAwMDAwMzBFMDAwMDAzMTAwMDA2RQotOjEwNjEzMDAwMDAzMTIwMDAwMDMxNDAwMDAwMzE2MDAwMDAzMTgwMDA1QgotOjEwNjE0MDAwMDAzMUEwMDAwMDMxQzAwMDAwMzFFMDAwMDAzMjAwMDA0QQotOjEwNjE1MDAwMDAzMjIwMDAwMDMyNDAwMDAwMzI2MDAwMDAzMjgwMDAzNwotOjEwNjE2MDAwMDAzMkEwMDAwMDMyQzAwMDAwMzJFMDAwMDAzMzAwMDAyNgotOjEwNjE3MDAwMDAzMzIwMDAwMDMzNDAwMDAwMzM2MDAwMDAzMzgwMDAxMwotOjEwNjE4MDAwMDAzM0EwMDAwMDMzQzAwMDAwMzNFMDAwMDAzNDAwMDAwMgotOjEwNjE5MDAwMDAzNDIwMDAwMDM0NDAwMDAwMzQ2MDAwMDAzNDgwMDBFRgotOjEwNjFBMDAwMDAzNEEwMDAwMDM0QzAwMDAwMzRFMDAwMDAzNTAwMDBERQotOjEwNjFCMDAwMDAzNTIwMDAwMDM1NDAwMDAwMzU2MDAwMDAzNTgwMDBDQgotOjEwNjFDMDAwMDAzNUEwMDAwMDM1QzAwMDAwMzVFMDAwMDAzNjAwMDBCQQotOjEwNjFEMDAwMDAzNjIwMDAwMDM2NDAwMDAwMzY2MDAwMDAzNjgwMDBBNwotOjEwNjFFMDAwMDAzNkEwMDAwMDM2QzAwMDAwMzZFMDAwMDAzNzAwMDA5NgotOjEwNjFGMDAwMDAzNzIwMDAwMDM3NDAwMDAwMzc2MDAwMDAzNzgwMDA4MwotOjEwNjIwMDAwMDAzN0EwMDAwMDM3QzAwMDAwMzdFMDAwMDAzODAwMDA3MQotOjEwNjIxMDAwMDAzODIwMDAwMDM4NDAwMDAwMzg2MDAwMDAzODgwMDA1RQotOjEwNjIyMDAwMDAzOEEwMDAwMDM4QzAwMDAwMzhFMDAwMDAzOTAwMDA0RAotOjEwNjIzMDAwMDAzOTIwMDAwMDM5NDAwMDAwMzk2MDAwMDAzOTgwMDAzQQotOjEwNjI0MDAwMDAzOUEwMDAwMDM5QzAwMDAwMzlFMDAwMDAzQTAwMDAyOQotOjEwNjI1MDAwMDAzQTIwMDAwMDNBNDAwMDAwM0E2MDAwMDAzQTgwMDAxNgotOjEwNjI2MDAwMDAzQUEwMDAwMDNBQzAwMDAwM0FFMDAwMDAzQjAwMDAwNQotOjEwNjI3MDAwMDAzQjIwMDAwMDNCNDAwMDAwM0I2MDAwMDAzQjgwMDBGMgotOjEwNjI4MDAwMDAzQkEwMDAwMDNCQzAwMDAwM0JFMDAwMDAzQzAwMDBFMQotOjEwNjI5MDAwMDAzQzIwMDAwMDNDNDAwMDAwM0M2MDAwMDAzQzgwMDBDRQotOjEwNjJBMDAwMDAzQ0EwMDAwMDNDQzAwMDAwM0NFMDAwMDAzRDAwMDBCRAotOjEwNjJCMDAwMDAzRDIwMDAwMDNENDAwMDAwM0Q2MDAwMDAzRDgwMDBBQQotOjEwNjJDMDAwMDAzREEwMDAwMDNEQzAwMDAwM0RFMDAwMDAzRTAwMDA5OQotOjEwNjJEMDAwMDAzRTIwMDAwMDNFNDAwMDAwM0U2MDAwMDAzRTgwMDA4NgotOjEwNjJFMDAwMDAzRUEwMDAwMDNFQzAwMDAwM0VFMDAwMDAzRjAwMDA3NQotOjEwNjJGMDAwMDAzRjIwMDAwMDNGNDAwMDAwM0Y2MDAwMDAzRjgwMDA2MgotOjEwNjMwMDAwMDAzRkEwMDAwMDNGQzAwMDAwM0ZFMDAwMDAzRkUwMDE3MAotOjEwNjMxMDAwMDAwMDAwMDAwMDAwMDFGRjAwMDAwMjAwMDAwMDdGRjgwNAotOjEwNjMyMDAwMDAwMDdGRjgwMDAwMEE5MDAwMDAzNTAwMDAwMDAwMDEyNgotOjEwNjMzMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA1RgotOjEwNjM0MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA0RgotOjEwNjM1MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAzRgotOjEwNjM2MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAyRgotOjEwNjM3MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAxRgotOjEwNjM4MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwRgotOjEwNjM5MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBGRgotOjEwNjNBMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBFRgotOjEwNjNCMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBERgotOjEwNjNDMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBDRgotOjEwNjNEMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBCRgotOjEwNjNFMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBBRgotOjEwNjNGMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA5RgotOjEwNjQwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA4RQotOjEwNjQxMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA3RQotOjEwNjQyMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA2RQotOjEwNjQzMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA1RQotOjEwNjQ0MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA0RQotOjEwNjQ1MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAzRQotOjEwNjQ2MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAyRQotOjEwNjQ3MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAxRQotOjEwNjQ4MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwRQotOjEwNjQ5MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBGRQotOjEwNjRBMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBFRQotOjEwNjRCMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBERQotOjEwNjRDMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBDRQotOjEwNjREMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBCRQotOjEwNjRFMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBBRQotOjEwNjRGMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA5RQotOjEwNjUwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA4RAotOjEwNjUxMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA3RAotOjEwNjUyMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA2RAotOjEwNjUzMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA1RAotOjEwNjU0MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA0RAotOjEwNjU1MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAzRAotOjEwNjU2MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAyRAotOjEwNjU3MDAwMDAwMDAwMDAxNDBBRkYwMDAwMDAwMDAxMDAwMDAwMDBGRAotOjEwNjU4MDAwMDAyMDEwMDEwMDAwMDAwMDAxMDA5MDAwMDAwMDAxMDA0OAotOjEwNjU5MDAwMDAwMDkwMDIwMDAwOTAwNDAwMDA5MDA2MDAwMDkwMDhBNwotOjEwNjVBMDAwMDAwMDkwMEEwMDAwOTAwQzAwMDA5MDBFMDAwMDkwMTA3NwotOjEwNjVCMDAwMDAwMDkwMTIwMDAwOTAxNDAwMDA5MDE2MDAwMDkwMTg0NwotOjEwNjVDMDAwMDAwMDkwMUEwMDAwOTAxQzAwMDA5MDFFMDAwMDkwMjAxNwotOjEwNjVEMDAwMDAwMDkwMjIwMDAwOTAyNDAwMDA5MDI2MDAwMDkwMjhFNwotOjEwNjVFMDAwMDAwMDkwMkEwMDAwOTAyQzAwMDA5MDJFMDAwMDkwMzBCNwotOjEwNjVGMDAwMDAwMDkwMzIwMDAwOTAzNDAwMDA5MDM2MDAwMDkwMzg4NwotOjEwNjYwMDAwMDAwMDkwM0EwMDAwOTAzQzAwMDA5MDNFMDAwMDkwNDA1NgotOjEwNjYxMDAwMDAwMDkwNDIwMDAwOTA0NDAwMDA5MDQ2MDAwMDkwNDgyNgotOjEwNjYyMDAwMDAwMDkwNEEwMDAwOTA0QzAwMDA5MDRFMDAwMDkwNTBGNgotOjEwNjYzMDAwMDAwMDkwNTIwMDAwOTA1NDAwMDA5MDU2MDAwMDkwNThDNgotOjEwNjY0MDAwMDAwMDkwNUEwMDAwOTA1QzAwMDA5MDVFMDAwMDkwNjA5NgotOjEwNjY1MDAwMDAwMDkwNjIwMDAwOTA2NDAwMDA5MDY2MDAwMDkwNjg2NgotOjEwNjY2MDAwMDAwMDkwNkEwMDAwOTA2QzAwMDA5MDZFMDAwMDkwNzAzNgotOjEwNjY3MDAwMDAwMDkwNzIwMDAwOTA3NDAwMDA5MDc2MDAwMDkwNzgwNgotOjEwNjY4MDAwMDAwMDkwN0EwMDAwOTA3QzAwMDA5MDdFMDAwMDkwODBENgotOjEwNjY5MDAwMDAwMDkwODIwMDAwOTA4NDAwMDA5MDg2MDAwMDkwODhBNgotOjEwNjZBMDAwMDAwMDkwOEEwMDAwOTA4QzAwMDA5MDhFMDAwMDkwOTA3NgotOjEwNjZCMDAwMDAwMDkwOTIwMDAwOTA5NDAwMDA5MDk2MDAwMDkwOTg0NgotOjEwNjZDMDAwMDAwMDkwOUEwMDAwOTA5QzAwMDA5MDlFMDAwMDkwQTAxNgotOjEwNjZEMDAwMDAwMDkwQTIwMDAwOTBBNDAwMDA5MEE2MDAwMDkwQThFNgotOjEwNjZFMDAwMDAwMDkwQUEwMDAwOTBBQzAwMDA5MEFFMDAwMDkwQjBCNgotOjEwNjZGMDAwMDAwMDkwQjIwMDAwOTBCNDAwMDA5MEI2MDAwMDkwQjg4NgotOjEwNjcwMDAwMDAwMDkwQkEwMDAwOTBCQzAwMDA5MEJFMDAwMDkwQzA1NQotOjEwNjcxMDAwMDAwMDkwQzIwMDAwOTBDNDAwMDA5MEM2MDAwMDkwQzgyNQotOjEwNjcyMDAwMDAwMDkwQ0EwMDAwOTBDQzAwMDA5MENFMDAwMDkwRDBGNQotOjEwNjczMDAwMDAwMDkwRDIwMDAwOTBENDAwMDA5MEQ2MDAwMDkwRDhDNQotOjEwNjc0MDAwMDAwMDkwREEwMDAwOTBEQzAwMDA5MERFMDAwMDkwRTA5NQotOjEwNjc1MDAwMDAwMDkwRTIwMDAwOTBFNDAwMDA5MEU2MDAwMDkwRTg2NQotOjEwNjc2MDAwMDAwMDkwRUEwMDAwOTBFQzAwMDA5MEVFMDAwMDkwRjAzNQotOjEwNjc3MDAwMDAwMDkwRjIwMDAwOTBGNDAwMDA5MEY2MDAwMDkwRjgwNQotOjEwNjc4MDAwMDAwMDkwRkEwMDAwOTBGQzAwMDA5MEZFMDAwMDkxMDBENAotOjEwNjc5MDAwMDAwMDkxMDIwMDAwOTEwNDAwMDA5MTA2MDAwMDkxMDhBMQotOjEwNjdBMDAwMDAwMDkxMEEwMDAwOTEwQzAwMDA5MTBFMDAwMDkxMTA3MQotOjEwNjdCMDAwMDAwMDkxMTIwMDAwOTExNDAwMDA5MTE2MDAwMDkxMTg0MQotOjEwNjdDMDAwMDAwMDkxMUEwMDAwOTExQzAwMDA5MTFFMDAwMDkxMjAxMQotOjEwNjdEMDAwMDAwMDkxMjIwMDAwOTEyNDAwMDA5MTI2MDAwMDkxMjhFMQotOjEwNjdFMDAwMDAwMDkxMkEwMDAwOTEyQzAwMDA5MTJFMDAwMDkxMzBCMQotOjEwNjdGMDAwMDAwMDkxMzIwMDAwOTEzNDAwMDA5MTM2MDAwMDkxMzg4MQotOjEwNjgwMDAwMDAwMDkxM0EwMDAwOTEzQzAwMDA5MTNFMDAwMDkxNDA1MAotOjEwNjgxMDAwMDAwMDkxNDIwMDAwOTE0NDAwMDA5MTQ2MDAwMDkxNDgyMAotOjEwNjgyMDAwMDAwMDkxNEEwMDAwOTE0QzAwMDA5MTRFMDAwMDkxNTBGMAotOjEwNjgzMDAwMDAwMDkxNTIwMDAwOTE1NDAwMDA5MTU2MDAwMDkxNThDMAotOjEwNjg0MDAwMDAwMDkxNUEwMDAwOTE1QzAwMDA5MTVFMDAwMDkxNjA5MAotOjEwNjg1MDAwMDAwMDkxNjIwMDAwOTE2NDAwMDA5MTY2MDAwMDkxNjg2MAotOjEwNjg2MDAwMDAwMDkxNkEwMDAwOTE2QzAwMDA5MTZFMDAwMDkxNzAzMAotOjEwNjg3MDAwMDAwMDkxNzIwMDAwOTE3NDAwMDA5MTc2MDAwMDkxNzgwMAotOjEwNjg4MDAwMDAwMDkxN0EwMDAwOTE3QzAwMDA5MTdFMDAwMDkxODBEMAotOjEwNjg5MDAwMDAwMDkxODIwMDAwOTE4NDAwMDA5MTg2MDAwMDkxODhBMAotOjEwNjhBMDAwMDAwMDkxOEEwMDAwOTE4QzAwMDA5MThFMDAwMDkxOTA3MAotOjEwNjhCMDAwMDAwMDkxOTIwMDAwOTE5NDAwMDA5MTk2MDAwMDkxOTg0MAotOjEwNjhDMDAwMDAwMDkxOUEwMDAwOTE5QzAwMDA5MTlFMDAwMDkxQTAxMAotOjEwNjhEMDAwMDAwMDkxQTIwMDAwOTFBNDAwMDA5MUE2MDAwMDkxQThFMAotOjEwNjhFMDAwMDAwMDkxQUEwMDAwOTFBQzAwMDA5MUFFMDAwMDkxQjBCMAotOjEwNjhGMDAwMDAwMDkxQjIwMDAwOTFCNDAwMDA5MUI2MDAwMDkxQjg4MAotOjEwNjkwMDAwMDAwMDkxQkEwMDAwOTFCQzAwMDA5MUJFMDAwMDkxQzA0RgotOjEwNjkxMDAwMDAwMDkxQzIwMDAwOTFDNDAwMDA5MUM2MDAwMDkxQzgxRgotOjEwNjkyMDAwMDAwMDkxQ0EwMDAwOTFDQzAwMDA5MUNFMDAwMDkxRDBFRgotOjEwNjkzMDAwMDAwMDkxRDIwMDAwOTFENDAwMDA5MUQ2MDAwMDkxRDhCRgotOjEwNjk0MDAwMDAwMDkxREEwMDAwOTFEQzAwMDA5MURFMDAwMDkxRTA4RgotOjEwNjk1MDAwMDAwMDkxRTIwMDAwOTFFNDAwMDA5MUU2MDAwMDkxRTg1RgotOjEwNjk2MDAwMDAwMDkxRUEwMDAwOTFFQzAwMDA5MUVFMDAwMDkxRjAyRgotOjEwNjk3MDAwMDAwMDkxRjIwMDAwOTFGNDAwMDA5MUY2MDAwMDkxRjhGRgotOjEwNjk4MDAwMDAwMDkxRkEwMDAwOTFGQzAwMDA5MUZFRkZGRkZGRkY2NAotOjEwNjk5MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwNwotOjEwNjlBMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNwotOjEwNjlCMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFNwotOjEwNjlDMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZENwotOjEwNjlEMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZDNwotOjEwNjlFMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZCNwotOjEwNjlGMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZBNwotOjEwNkEwMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDAwMDAwMDM4RgotOjEwNkExMDAwMDBCRUJDMjAwMDAwMDAwMDAwMDAwMDA1MDAwMDAwMDNENAotOjEwNkEyMDAwMDBCRUJDMjAwMDAwMDAwMDAwMDAwMDA1MDAwMDAwMDNDNAotOjEwNkEzMDAwMDBCRUJDMjAwMDAwMDAwMDAwMDAwMDA1MDAwMDAwMDNCNAotOjEwNkE0MDAwMDBCRUJDMjAwMDAwMDAwMDAwMDAwMDA1MDAwMDAwMDNBNAotOjEwNkE1MDAwMDBCRUJDMjAwMDAwMDAwMDAwMDAwMDA1MDAwMDAwMDM5NAotOjEwNkE2MDAwMDBCRUJDMjAwMDAwMDAwMDAwMDAwMDA1MDAwMDAwMDM4NAotOjEwNkE3MDAwMDBCRUJDMjAwMDAwMDAwMDAwMDAwMDA1MDAwMDAwMDM3NAotOjEwNkE4MDAwMDBCRUJDMjAwMDAwMDAwMDAwMDAwMDA1MDAwMDIwMDA0NwotOjEwNkE5MDAwMDAwMDQwQzAwMDAwNjE4MDAwMDA4MjQwMDAwMEEzMDBCMAotOjEwNkFBMDAwMDAwMEMzQzAwMDAwRTQ4MDAwMDEwNTQwMDAwMTI2MDA5MgotOjEwNkFCMDAwMDAwMTQ2QzAwMDAxNjc4MDAwMDE4ODQwMDAwMUE5MDA3NAotOjEwNkFDMDAwMDAwMUM5QzAwMDAxRUE4MDAwMDIwQjQwMDAwMjJDMDA1NgotOjEwNkFEMDAwMDAwMjRDQzAwMDAyNkQ4MDAwMDI4RTQwMDAwMkFGMDAzOAotOjEwNkFFMDAwMDAwMkNGQzAwMDAyRjA4MDAwMDAxMTQwMDAwMDgwMDBEMgotOjEwNkFGMDAwMDAwMTAzODAwMDAxODcwMDAwMDIwQTgwMDAwMjhFMDA2RQotOjEwNkIwMDAwMDAwMzExODAwMDAzOTUwMDAwMDQxODgwMDAwNDlDMDAxRAotOjEwNkIxMDAwMDAwNTFGODAwMDA1QTMwMDAwMDYyNjgwMDAwNkFBMDBDRAotOjEwNkIyMDAwMDAwNzJEODAwMDA3QjEwMDAwMDgzNDgwMDAwOEI4MDA3RAotOjEwNkIzMDAwMDAwOTNCODAwMDA5QkYwMDAwMEE0MjgwMDAwQUM2MDAyRAotOjEwNkI0MDAwMDAwQjQ5ODAwMDBCQ0QwMDAwMEM1MDgwMDAwQ0Q0MDBERAotOjEwNkI1MDAwMDAwRDU3ODAwMDAwNUIwMDAwMDA3RkY4MDAwMDdGRjgwOAotOjEwNkI2MDAwMDAwMDAyMkEwMDAwMzUwMDAwMDBGRjAwMDAwMDAwMDBDNQotOjEwNkI3MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAxNwotOjEwNkI4MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwNwotOjEwNkI5MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBGNwotOjEwNkJBMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBFNwotOjEwNkJCMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBENwotOjEwNkJDMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBDNwotOjEwNkJEMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBCNwotOjEwNkJFMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBBNwotOjEwNkJGMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA5NwotOjEwNkMwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA4NgotOjEwNkMxMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA3NgotOjEwNkMyMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA2NgotOjEwNkMzMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA1NgotOjEwNkM0MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA0NgotOjEwNkM1MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAzNgotOjEwNkM2MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAyNgotOjEwNkM3MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAxNgotOjEwNkM4MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwNgotOjEwNkM5MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBGNgotOjEwNkNBMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBFNgotOjEwNkNCMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBENgotOjEwNkNDMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBDNgotOjEwNkNEMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBCNgotOjEwNkNFMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBBNgotOjEwNkNGMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA5NgotOjEwNkQwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA4NQotOjEwNkQxMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA3NQotOjEwNkQyMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA2NQotOjEwNkQzMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA1NQotOjEwNkQ0MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA0NQotOjEwNkQ1MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAzNQotOjEwNkQ2MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAyNQotOjEwNkQ3MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAxNQotOjEwNkQ4MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwNQotOjEwNkQ5MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBGNQotOjEwNkRBMDAwMDAwMEZGMDAwMDAwMTkwMDAwMDAwMDAwMDAwMDAwMDBDQgotOjEwNkRCMDAwRkZGRkZGRkYwMDAwMDAwMDAzOTM4NzAwMDAwMDAwMDBCQQotOjEwNkRDMDAwMDM5Mzg3MDAwMDAwN0ZGODAwMDA3RkY4MDAwMDBCQTMwQQotOjEwNkREMDAwMDAwMDE1MDAwMDAwMDBGRjAwMDAwMEZGMDAwMDAwRkZBMQotOjEwNkRFMDAwMDAwMDAwRkYwMDAwMDBGRjAwMDAwMEZGMDAwMDAwRkZBNwotOjEwNkRGMDAwMDAwMDAwRkYwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA5NgotOjEwNkUwMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA4NAotOjEwNkUxMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA3NAotOjEwNkUyMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA2NAotOjEwNkUzMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA1NAotOjEwNkU0MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA0NAotOjEwNkU1MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAzNAotOjEwNkU2MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAyNAotOjEwNkU3MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAxNAotOjEwNkU4MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwNAotOjEwNkU5MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBGNAotOjEwNkVBMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBFNAotOjEwNkVCMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBENAotOjEwNkVDMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBDNAotOjEwNkVEMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBCNAotOjEwNkVFMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBBNAotOjEwNkVGMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA5NAotOjEwNkYwMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA4MwotOjEwNkYxMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA3MwotOjEwNkYyMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA2MwotOjEwNkYzMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA1MwotOjEwNkY0MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA0MwotOjEwNkY1MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAzMwotOjEwNkY2MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAyMwotOjEwNkY3MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAxMwotOjEwNkY4MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMwotOjEwNkY5MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBGMwotOjEwNkZBMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBFMwotOjEwNkZCMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBEMwotOjEwNkZDMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBDMwotOjEwNkZEMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBCMwotOjEwNkZFMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBBMwotOjEwNkZGMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA5MwotOjEwNzAwMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA4MgotOjEwNzAxMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA3MgotOjEwNzAyMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA2MgotOjEwNzAzMDAwMDAwMDAwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY1QwotOjEwNzA0MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY1MAotOjEwNzA1MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY0MAotOjEwNzA2MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYzMAotOjEwNzA3MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYyMAotOjEwNzA4MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYxMAotOjEwNzA5MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwMAotOjEwNzBBMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMAotOjEwNzBCMDAwRkZGRkZGRkYwMDAwMDAwMDAwMDAyOEFEMDAwMDI5MThCRQotOjEwNzBDMDAwMDAwMDI5MTkwMDAwMDAwNTAwMDAwMDA3MDAwMEZGMDA3MwotOjEwNzBEMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY5QQotOjEwNzBFMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA5NwotOjEwNzBGMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA4NwotOjEwNzEwMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY2OQotOjEwNzExMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA2NgotOjEwNzEyMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA1NgotOjEwNzEzMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYzOQotOjEwNzE0MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAzNgotOjEwNzE1MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAyNgotOjEwNzE2MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwOQotOjEwNzE3MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwNgotOjEwNzE4MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBGNgotOjEwNzE5MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZEOQotOjEwNzFBMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBENgotOjEwNzFCMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBDNgotOjEwNzFDMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZBOQotOjEwNzFEMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBBNgotOjEwNzFFMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA5NgotOjEwNzFGMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY3OQotOjEwNzIwMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA3NQotOjEwNzIxMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA2NQotOjEwNzIyMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY0OAotOjEwNzIzMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA0NQotOjEwNzI0MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAzNQotOjEwNzI1MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYxOAotOjEwNzI2MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAxNQotOjEwNzI3MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAwNQotOjEwNzI4MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZFOAotOjEwNzI5MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBFNQotOjEwNzJBMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBENQotOjEwNzJCMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZCOAotOjEwNzJDMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBCNQotOjEwNzJEMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBBNQotOjEwNzJFMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY4OAotOjEwNzJGMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA4NQotOjEwNzMwMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA3NAotOjEwNzMxMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY1NwotOjEwNzMyMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA1NAotOjEwNzMzMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA0NAotOjEwNzM0MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYyNwotOjEwNzM1MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAyNAotOjEwNzM2MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAxNAotOjEwNzM3MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZGNwotOjEwNzM4MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBGNAotOjEwNzM5MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBFNAotOjEwNzNBMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZDNwotOjEwNzNCMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBDNAotOjEwNzNDMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBCNAotOjEwNzNEMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY5NwotOjEwNzNFMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA5NAotOjEwNzNGMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA4NAotOjEwNzQwMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY2NgotOjEwNzQxMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA2MwotOjEwNzQyMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA1MwotOjEwNzQzMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYzNgotOjEwNzQ0MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAzMwotOjEwNzQ1MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAyMwotOjEwNzQ2MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwNgotOjEwNzQ3MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwMwotOjEwNzQ4MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBGMwotOjEwNzQ5MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZENgotOjEwNzRBMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBEMwotOjEwNzRCMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBDMwotOjEwNzRDMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZBNgotOjEwNzREMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBBMwotOjEwNzRFMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA5MwotOjEwNzRGMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY3NgotOjEwNzUwMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA3MgotOjEwNzUxMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA2MgotOjEwNzUyMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY0NQotOjEwNzUzMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA0MgotOjEwNzU0MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAzMgotOjEwNzU1MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYxNQotOjEwNzU2MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAxMgotOjEwNzU3MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAwMgotOjEwNzU4MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZFNQotOjEwNzU5MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBFMgotOjEwNzVBMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBEMgotOjEwNzVCMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZCNQotOjEwNzVDMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBCMgotOjEwNzVEMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBBMgotOjEwNzVFMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY4NQotOjEwNzVGMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA4MgotOjEwNzYwMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA3MQotOjEwNzYxMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY1NAotOjEwNzYyMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA1MQotOjEwNzYzMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA0MQotOjEwNzY0MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYyNAotOjEwNzY1MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAyMQotOjEwNzY2MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAxMQotOjEwNzY3MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZGNAotOjEwNzY4MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBGMQotOjEwNzY5MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBFMQotOjEwNzZBMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZDNAotOjEwNzZCMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBDMQotOjEwNzZDMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBCMQotOjEwNzZEMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY5NAotOjEwNzZFMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA5MQotOjEwNzZGMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA4MQotOjEwNzcwMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY2MwotOjEwNzcxMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA2MAotOjEwNzcyMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA1MAotOjEwNzczMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYzMwotOjEwNzc0MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAzMAotOjEwNzc1MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAyMAotOjEwNzc2MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMwotOjEwNzc3MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwMAotOjEwNzc4MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBGMAotOjEwNzc5MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZEMwotOjEwNzdBMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBEMAotOjEwNzdCMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBDMAotOjEwNzdDMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZBMwotOjEwNzdEMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBBMAotOjEwNzdFMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA5MAotOjEwNzdGMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY3MwotOjEwNzgwMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA2RgotOjEwNzgxMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA1RgotOjEwNzgyMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY0MgotOjEwNzgzMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAzRgotOjEwNzg0MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAyRgotOjEwNzg1MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYxMgotOjEwNzg2MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRgotOjEwNzg3MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBGRgotOjEwNzg4MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZFMgotOjEwNzg5MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBERgotOjEwNzhBMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBDRgotOjEwNzhCMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZCMgotOjEwNzhDMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBBRgotOjEwNzhEMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA5RgotOjEwNzhFMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY4MgotOjEwNzhGMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA3RgotOjEwNzkwMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA2RQotOjEwNzkxMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY1MQotOjEwNzkyMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA0RQotOjEwNzkzMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAzRQotOjEwNzk0MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYyMQotOjEwNzk1MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAxRQotOjEwNzk2MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAwRQotOjEwNzk3MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZGMQotOjEwNzk4MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBFRQotOjEwNzk5MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBERQotOjEwNzlBMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZDMQotOjEwNzlCMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBCRQotOjEwNzlDMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBBRQotOjEwNzlEMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY5MQotOjEwNzlFMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA4RQotOjEwNzlGMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA3RQotOjEwN0EwMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY2MAotOjEwN0ExMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA1RAotOjEwN0EyMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA0RAotOjEwN0EzMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYzMAotOjEwN0E0MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAyRAotOjEwN0E1MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAxRAotOjEwN0E2MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMAotOjEwN0E3MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBGRAotOjEwN0E4MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBFRAotOjEwN0E5MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZEMAotOjEwN0FBMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBDRAotOjEwN0FCMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBCRAotOjEwN0FDMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZBMAotOjEwN0FEMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA5RAotOjEwN0FFMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA4RAotOjEwN0FGMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY3MAotOjEwN0IwMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA2QwotOjEwN0IxMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA1QwotOjEwN0IyMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYzRgotOjEwN0IzMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAzQwotOjEwN0I0MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAyQwotOjEwN0I1MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwRgotOjEwN0I2MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwQwotOjEwN0I3MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBGQwotOjEwN0I4MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZERgotOjEwN0I5MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBEQwotOjEwN0JBMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBDQwotOjEwN0JCMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZBRgotOjEwN0JDMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBBQwotOjEwN0JEMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA5QwotOjEwN0JFMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY3RgotOjEwN0JGMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA3QwotOjEwN0MwMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA2QgotOjEwN0MxMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY0RQotOjEwN0MyMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA0QgotOjEwN0MzMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAzQgotOjEwN0M0MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYxRQotOjEwN0M1MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAxQgotOjEwN0M2MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAwQgotOjEwN0M3MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZFRQotOjEwN0M4MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBFQgotOjEwN0M5MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBEQgotOjEwN0NBMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZCRQotOjEwN0NCMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBCQgotOjEwN0NDMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBBQgotOjEwN0NEMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY4RQotOjEwN0NFMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA4QgotOjEwN0NGMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA3QgotOjEwN0QwMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY1RAotOjEwN0QxMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA1QQotOjEwN0QyMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA0QQotOjEwN0QzMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYyRAotOjEwN0Q0MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAyQQotOjEwN0Q1MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAxQQotOjEwN0Q2MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZGRAotOjEwN0Q3MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBGQQotOjEwN0Q4MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMDEwMDBEOQotOjEwN0Q5MDAwMDAwMDIwODAwMDAwMzEwMDAwMDA0MTgwMDAwMDUyMDBGRgotOjEwN0RBMDAwMDAwMDYyODAwMDAwNzMwMDAwMDA4MzgwMDAwMDk0MDBFNwotOjEwN0RCMDAwMDAwMEE0ODAwMDAwQjUwMDAwMDBDNTgwMDAwMEQ2MDBDRgotOjEwN0RDMDAwMDAwMEU2ODAwMDAwRjcwMDAwMDEwNzgwMDAwMTE4MDBCNQotOjEwN0REMDAwMDAwMTI4ODAwMDAxMzkwMDAwMDE0OTgwMDAwMTVBMDA5QgotOjEwN0RFMDAwMDAwMTZBODAwMDAxN0IwMDAwMDE4QjgwMDAwMTlDMDA4MwotOjEwN0RGMDAwMDAwMUFDODAwMDAxQkQwMDAwMDFDRDgwMDAwMURFMDA2QgotOjEwN0UwMDAwMDAwMUVFODAwMDAxRkYwMDAwMDAwRjgwMDAwMDdGRjhGRAotOjEwN0UxMDAwMDAwMDdGRjgwMDAwMDVGNjAwMDAzNTAwMTAwMDAwMDBBQgotOjEwN0UyMDAwMDAwMDI4QUQwMDAwMjkxODAwMDAyOTE5MDAwMDAwMDVGNQotOjEwN0UzMDAwMDAwMDAwMDYwMDAxMDAwMTAwMDUwMjA2Q0NDQ0NDQzkwMAotOjEwN0U0MDAwNzA1ODEwM0MwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAyMAotOjEwN0U1MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAyNAotOjEwN0U2MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAxNAotOjEwN0U3MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwNAotOjEwN0U4MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBGNAotOjEwN0U5MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBFNAotOjEwN0VBMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBENAotOjEwN0VCMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBDNAotOjEwN0VDMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBCNAotOjEwN0VEMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBBNAotOjEwN0VFMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA5NAotOjEwN0VGMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA4NAotOjEwN0YwMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA3MwotOjEwN0YxMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA2MwotOjEwN0YyMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA1MwotOjEwN0YzMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA0MwotOjEwN0Y0MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAzMwotOjEwN0Y1MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAyMwotOjEwN0Y2MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAxMwotOjEwN0Y3MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMwotOjEwN0Y4MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBGMwotOjEwN0Y5MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBFMwotOjEwN0ZBMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBEMwotOjEwN0ZCMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBDMwotOjEwN0ZDMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBCMwotOjEwN0ZEMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBBMwotOjEwN0ZFMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA5MwotOjEwN0ZGMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA4MwotOjEwODAwMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA3MgotOjEwODAxMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA2MgotOjEwODAyMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA1MgotOjEwODAzMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA0MgotOjEwODA0MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAzMgotOjEwODA1MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAyMgotOjEwODA2MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAxMgotOjEwODA3MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMgotOjEwODA4MDAwMDAwMDAwMDAwMDAwMDAwMUNDQ0MwMjAxQ0NDQ0NDQ0MyNAotOjEwODA5MDAwQ0NDQzAyMDFDQ0NDQ0NDQ0NDQ0MwMjAxQ0NDQ0NDQ0M0QQotOjEwODBBMDAwQ0NDQzAyMDFDQ0NDQ0NDQ0NDQ0MwMjAxQ0NDQ0NDQ0MzQQotOjEwODBCMDAwQ0NDQzAyMDFDQ0NDQ0NDQ0NDQ0MwMjAxQ0NDQ0NDQ0MyQQotOjEwODBDMDAwQ0NDQzAyMDFDQ0NDQ0NDQzAwMDAwMDAwRkZGRkZGRkZFOQotOjEwODBEMDAwMDMwMzAzMDMxMzQyMDIwMjUwNTA1MDIwNzA2MDgwNTA4QgotOjEwODBFMDAwMDIwMDAyMDAwNjA0MDYwNDAwMEUwMDAwMDExNjAwRDY3RAotOjEwODBGMDAwMDAyNjI1QTAwMDI2MjVBMDAwMjYyNUEwMDAyNjI1QTBENAotOjEwODEwMDAwMDA3MjAwMDAwMTIzMDBGMzAwMjYyNUEwMDAyNjI1QTAxMAotOjEwODExMDAwMDAyNjI1QTAwMDI2MjVBMDAwMDBGRkZGMDAwMDAwMDA4QgotOjEwODEyMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA1MwotOjEwODEzMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA0MwotOjEwODE0MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAzMwotOjEwODE1MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAyMwotOjEwODE2MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAxMwotOjEwODE3MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMwotOjEwODE4MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBGMwotOjEwODE5MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBFMwotOjEwODFBMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBEMwotOjEwODFCMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBDMwotOjEwODFDMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBCMwotOjEwODFEMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBBMwotOjEwODFFMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA5MwotOjEwODFGMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA4MwotOjEwODIwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA3MgotOjEwODIxMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA2MgotOjEwODIyMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA1MgotOjEwODIzMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA0MgotOjEwODI0MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAzMgotOjEwODI1MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAyMgotOjEwODI2MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAxMgotOjEwODI3MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMgotOjEwODI4MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBGMgotOjEwODI5MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBFMgotOjEwODJBMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBEMgotOjEwODJCMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBDMgotOjEwODJDMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBCMgotOjEwODJEMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBBMgotOjEwODJFMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA5MgotOjEwODJGMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA4MgotOjEwODMwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA3MQotOjEwODMxMDAwMDAwMEZGRkYwMDAwMDAwMEZGRkZGRkYzMzE4RkZGRkZCMQotOjEwODMyMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM5MQotOjEwODMzMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxMzBFRkZGRkZGMwotOjEwODM0MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM3MQotOjEwODM1MDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkY1RAotOjEwODM2MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM1MQotOjEwODM3MDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkZFQgotOjEwODM4MDAwMEMzMEMzMDVDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjMyMwotOjEwODM5MDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkYyRQotOjEwODNBMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMxMQotOjEwODNCMDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZBMzAyRkZGRkYyMgotOjEwODNDMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNGMQotOjEwODNEMDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRkY3MzFFRkZGRkYzQwotOjEwODNFMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNEMQotOjEwODNGMDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkY1MzAyRkZGRkZDRgotOjEwODQwMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNCMAotOjEwODQxMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkYzMzE4RkZGRkYyRgotOjEwODQyMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM5MAotOjEwODQzMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxMzEwRkZGRkZEMQotOjEwODQ0MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM3MAotOjEwODQ1MDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkY1QwotOjEwODQ2MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM1MAotOjEwODQ3MDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkZFQQotOjEwODQ4MDAwMEMzMEMzMDVDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjMyMgotOjEwODQ5MDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkYyRAotOjEwODRBMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMxMAotOjEwODRCMDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZBMzAyRkZGRkYyMQotOjEwODRDMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNGMAotOjEwODREMDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRkY3MzBFRkZGRkYzQwotOjEwODRFMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNEMAotOjEwODRGMDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkY1MzA0RkZGRkZBRQotOjEwODUwMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNBRgotOjEwODUxMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZFMwotOjEwODUyMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNDMwotOjEwODUzMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwMwotOjEwODU0MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNBMwotOjEwODU1MDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZFMgotOjEwODU2MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM4MwotOjEwODU3MDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZDMQotOjEwODU4MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM2MwotOjEwODU5MDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY5RgotOjEwODVBMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM0MwotOjEwODVCMDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY3QgotOjEwODVDMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMyMwotOjEwODVEMDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY1MwotOjEwODVFMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMwotOjEwODVGMDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYyMwotOjEwODYwMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNFMgotOjEwODYxMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkYzMzIwRkZGRkZBQwotOjEwODYyMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM4RQotOjEwODYzMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxMzEwRkZGRkZDRgotOjEwODY0MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM2RQotOjEwODY1MDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkY1QQotOjEwODY2MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM0RQotOjEwODY3MDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkZFOAotOjEwODY4MDAwMEMzMEMzMDVDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjMyMAotOjEwODY5MDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkYyQgotOjEwODZBMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwRQotOjEwODZCMDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRjhBMDQyRkZGRkZCQgotOjEwODZDMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NDMDAwRjNDRjNDRjMyMQotOjEwODZEMDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRjk3MDVDRkZGRkZFNQotOjEwODZFMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NDMDAwRjNDRjNDRjMwMQotOjEwODZGMDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkY1MzEwRkZGRkZFQgotOjEwODcwMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNBRAotOjEwODcxMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkYzMzIwRkZGRkZBQgotOjEwODcyMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM4RAotOjEwODczMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxMzAyRkZGRkZBRgotOjEwODc0MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM2RAotOjEwODc1MDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkY1OQotOjEwODc2MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM0RAotOjEwODc3MDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGRjA2MUNCRkZGRkZEQwotOjEwODc4MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NDMDE0RjNDRjNDRjM0QwotOjEwODc5MDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkYyQQotOjEwODdBMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwRAotOjEwODdCMDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZBMzAyRkZGRkYxRQotOjEwODdDMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNFRAotOjEwODdEMDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRkY3MzFDRkZGRkY1OAotOjEwODdFMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNDRAotOjEwODdGMDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYyMQotOjEwODgwMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNFMAotOjEwODgxMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZFMAotOjEwODgyMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNDMAotOjEwODgzMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwMAotOjEwODg0MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNBMAotOjEwODg1MDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZERgotOjEwODg2MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM4MAotOjEwODg3MDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZCRQotOjEwODg4MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM2MAotOjEwODg5MDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY5QwotOjEwODhBMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM0MAotOjEwODhCMDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY3OAotOjEwODhDMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMyMAotOjEwODhEMDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY1MAotOjEwODhFMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMAotOjEwODhGMDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYyMAotOjEwODkwMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNERgotOjEwODkxMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZERgotOjEwODkyMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNCRgotOjEwODkzMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZGRgotOjEwODk0MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM5RgotOjEwODk1MDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZERQotOjEwODk2MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM3RgotOjEwODk3MDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZCRAotOjEwODk4MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM1RgotOjEwODk5MDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY5QgotOjEwODlBMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMzRgotOjEwODlCMDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY3NwotOjEwODlDMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMxRgotOjEwODlEMDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY0RgotOjEwODlFMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNGRgotOjEwODlGMDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYxRgotOjEwOEEwMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNERQotOjEwOEExMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZERQotOjEwOEEyMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNCRQotOjEwOEEzMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZGRQotOjEwOEE0MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM5RQotOjEwOEE1MDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZERAotOjEwOEE2MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM3RQotOjEwOEE3MDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZCQwotOjEwOEE4MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM1RQotOjEwOEE5MDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY5QQotOjEwOEFBMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMzRQotOjEwOEFCMDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY3NgotOjEwOEFDMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMxRQotOjEwOEFEMDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY0RQotOjEwOEFFMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNGRQotOjEwOEFGMDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYxRQotOjEwOEIwMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNERAotOjEwOEIxMDAwMDA0MENGM0NDRENEQ0RDRDAwMEMwMDAwMDAwNzAwQzAwMwotOjEwOEIyMDAwMDAwMjgxMzAwMDBCODE1ODAwMDIwMjEwMDAwMTAyMzA2NwotOjEwOEIzMDAwMDAwRjAyNDAwMDAxMDMzMDAwMEMwMDAwMDAwODAwQzBEQwotOjEwOEI0MDAwMDAwMjgxNDAwMDBCODE2ODAwMDIwMjIwMDAwMTAyNDAwNwotOjEwOEI1MDAwMDAwNzAyNTAwMDAyMDJDMDAwMTAwMDAwMDAwODAxMDBERgotOjEwOEI2MDAwMDAwMjgxODAwMDBCODFBODAwMDIwMjYwMDAwMTgyODA2NwotOjEwOEI3MDAwMDAwRTgyOTgwMDA4MDM4MDAwMTAwMDAwMDAwMTAxMDAzMAotOjEwOEI4MDAwMDAwMjgxMTAwMDA5MDEzODAwMDIwMUM4MDAwMTAxRTg1QgotOjEwOEI5MDAwMDAwRTAxRjgwMDAwMDJEOENDQ0NDQ0NDQ0NDQ0NDQ0M5NAotOjEwOEJBMDAwQ0NDQ0NDQ0NDQ0NDQ0NDQzAwMDAyMDAwQ0NDQ0NDQ0MxNQotOjEwOEJCMDAwQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDMDAwMDIwMDAwNQotOjEwOEJDMDAwQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NFNQotOjEwOEJEMDAwMDQwMDIwMDBDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NFMQotOjEwOEJFMDAwQ0NDQ0NDQ0M0MTAwMjAwMDAzMDMwMzAzMDM0MjAyMDI5RgotOjEwOEJGMDAwNTA1MDUwMjA3MDYwODA1MDEzMTMxMzEzMTM0MjEyMTIwMAotOjEwOEMwMDAwNTA1MDUwMjA3MDYwODA1MDAzMDEwMjAwMDAwMDAwMDBBRQotOjEwOEMxMDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDBBMgotOjEwOEMyMDAwMDAwQkZCNTFDRkMwRjAwMzhBMEYwOTMyMzA2ODhBMjA1NQotOjEwOEMzMDAwRjhDNEUwNUM3NjA2ODY3NTFDMEMwQzVCQjg0OUQzMDc1QgotOjEwOEM0MDAwQzMyQzBDMEMwQ0RBNENFNEU5MDVFMUZCQkMwQzBDQUZCQQotOjEwOEM1MDAwODA5ODg1MEY1NTlDODcxMzQyRkYwMTVBQzBDN0NBQzAzMAotOjEwOEM2MDAwQTBDMTg2NURGRjNBMzUwNDNCNDA4NTgxQTExQzg4RDlBRgotOjEwOEM3MDAwOTQxODE4Q0M1NDExRTJEMkVBMEMwQzMzODBGQzA0QThFRQotOjEwOEM4MDAwRDgxRDIwMURBQjQ2QkU5QjQ3RjFFMEMxMzc4RDUxRjk4MQotOjEwOEM5MDAwNUIwREExNjkwMTJBN0UwQjREN0UxQjU0QkU0QTA3NDIyMwotOjEwOENBMDAwREYzNkM2NkU2RUI1MEU3MUY2OUZCNTQ2RTVBRkI0QzYzQgotOjEwOENCMDAwQUZGRUFFM0QyQUZGMjA5QUZBQUQ1MDNFMDBDNUQ1NUIwRgotOjEwOENDMDAwQTdEODAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgotOjEwOENEMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFRDdEN0Y3QzE0RDU4OQotOjEwOENFMDAwQjVGODk5OUREOUQ5RDlDREVFNjYwODA5NkMyMEUwMjQ1NAotOjEwOENGMDAwODYxQUZCODJERkU1NzdBODQxODc4MDM0QjYzQ0RGOEE5RAotOjEwOEQwMDAwNUFEM0Q2RjZCQjUwNkM1NTE0NTZCRjNFRTFGNTY5MzNDNQotOjEwOEQxMDAwRjk0MTEyMjI2MjA0OUZEQUQ2MUYyQjU1NEJGQjZDODk1NgotOjEwOEQyMDAwOTQyQUFEM0ZERTAyNEFGMUY1Qzc0M0FBRDVEN0EyMkY1OAotOjEwOEQzMDAwRkU4MEFBNDU1RkM0RDJEODdFNTFERTNERTdERUM5Q0VCMwotOjEwOEQ0MDAwNEM3NjkzMEREMDFGN0ZCQ0YwODFFMUNFREMxRkU3OUVGNwotOjEwOEQ1MDAwNzNFRTM5RTc5RTczRUU4REVBRjNDM0M3Q0UwNTM4OEUwNgotOjEwOEQ2MDAwM0ZFQ0Q5MTMwMjgwNTlEOUE3NzFGNUJDQUVCRTk5MDA2QQotOjEwOEQ3MDAwNDcyMUQyRDM1RDBBRDBBNjgwMDlBQzZDMUQ4OEE0MUYwMAotOjEwOEQ4MDAwOTQwMDdGNkExNDU2NUUyRDdGM0NERTVEMDk3MDY3RDFDQQotOjEwOEQ5MDAwRDdFRUMzRkE2QjJDMDUwMkVDRDlERDBDOTAzOTgzN0QzQwotOjEwOERBMDAwMEY0NTM3NDMzMTQwMTFBNEI2RTI3N0Y2OTM3ODkwRjUzQQotOjEwOERCMDAwMzcxMDlDOUM4NjY4NzZGQzMyRjBEMUI4MDAxNUZBQTE3OQotOjEwOERDMDAwMjJBQTA3Qzc2NUY2Q0Y4MUU0N0MxODA3MjA4M0ZEQjM4QwotOjEwOEREMDAwMDY3QTU5M0ZDQUYzNzIxQUM3OTVFNUM1RkE4QjU1RDk3OQotOjEwOERFMDAwN0VCQzRGNTk1NzIxQTM4OUZFRjAxRkY5QjJFMjY0MzhDNwotOjEwOERGMDAwN0ZGRDM1MDcyQUI3M0U1RDkzQUQ3RjA2NDQ0QTBGRkRFMAotOjEwOEUwMDAwMURGQjhGMDIwQUMxMjNBRjA3QzRDM0QxMzBBNEU1Q0EzQQotOjEwOEUxMDAwRkNGRDBDMzQxQjVCOUZGNjIzMUVCRjUwOUM5ODlBQkYzMQotOjEwOEUyMDAwOUU4REE3QUU2NjhEOUUxRENEM0E2NDAyMDAwQzY0QjM4NAotOjEwOEUzMDAwQjc5NjNEQzM2MDZFQUUxRERBNkUwMTQ4ODQyRkNEQjA4QgotOjEwOEU0MDAwMDg5RUY2QjAyRjVENTQ4OTUwMjcwMTE4N0VGRDg4MUZCQgotOjEwOEU1MDAwMDlERjJGRDFDQzFDRURFRDI3OTQzMkZDRDhGMzY1NzhENwotOjEwOEU2MDAwMEMwMkVGMEZEOEZDMUU2NEZEMDU3MUZDMUNGOEJBMDg1QgotOjEwOEU3MDAwQzcyRjYzREZBQjg3OEU2RkNEM0NGMUYxNDM2NzAyRUMwOAotOjEwOEU4MDAwMEIyM0JFNEQ4NDAxN0M3QTBBRTI4MkRFOUY5NDg2RTk0MAotOjEwOEU5MDAwNDdEMDU5MzE3ODNGMjNFMUJEQThDNjk3MUQ5N0ZEMERGNgotOjEwOEVBMDAwMUEyMTE3OUYwNDYyMjU2RUJFRjFGMjI1RTJBOTBDRTk5MgotOjEwOEVCMDAwNjU0OEFGNEZDOUY2QUIyMkRENzJFMEVCNEE4MUFGRkVFOQotOjEwOEVDMDAwRjk4OUE2MDRDM0M3REE2NkIwNUU3M0I0OTM2MzYwQTY3QgotOjEwOEVEMDAwNzNFMDY5QjU2ODY3OEZBNzk0QjI3QTM5RkEwNzY4MTFBOQotOjEwOEVFMDAwRUJDNzcyRDUyRjE0QkU5QjRFMTBCRTlCRkY0MkYwREQyOAotOjEwOEVGMDAwMjZGODlENDkyODdBRjZDRjRGMTI5Q0RFRkU3MkFEMkZFMAotOjEwOEYwMDAwQjY4ODA3Q0IyMTI1NkRGOTkwQkY0QjIxRkUyMDdCRjg1OQotOjEwOEYxMDAwMzVCRUNFRUNFRkRGMDczRkY1QjMwMzI1MEUxQkE3NERBMwotOjEwOEYyMDAwQzBENzNGOUZDQkJGQjVEM0Q0RjQ2Njg5RTQ5MTBCQ0VCNQotOjEwOEYzMDAwODc1MTdFQjE3NjkyMjRGMEExRjUwMkYyNUZEMTA3MEE0MwotOjEwOEY0MDAwQzA1ODg0Q0Y4NDQ0MDQ2MDVENzU4MzM2OUNGQzAxNUQwOQotOjEwOEY1MDAwRjk1MzlGQ0Q3NzU1NDNGOUVFRTM2QzE4ODQyQjE0Q0U2QgotOjEwOEY2MDAwOERBN0VGMEZDQUQxQ0JBQ0Q3NTgzRjVBOTBCRDNGMUQ0QwotOjEwOEY3MDAwRkIyRDhENTVDQzA2OUMxREZERjhDNTc3OTA3Q0YyNzFCQwotOjEwOEY4MDAwNUNCN0M3NThCREQ5NDJDRUNBRDQzRkM5MTFBODAwOTIxOAotOjEwOEY5MDAwRjdCMkE4NEZFM0IwRkEwMTM2MkQ3MzNBN0JFMkZCMUEyMQotOjEwOEZBMDAwMzE4RTM0QjQ1RjZGQkIwMTI4RTFGODExRjBEODcyNURFNwotOjEwOEZCMDAwODYyN0E4OUY0MTc4OTQwNEUxQ0JGQkRFQ0ZERUVCRTE2RQotOjEwOEZDMDAwOTM3RjdGQjI2NUJGOTE2N0JDMUU4OUY4NjlBNEY2QUYzNQotOjEwOEZEMDAwMDg3RTE5QzI5Rjc5RThCQTVGQUMzMzA1N0E0RDM4M0RGNwotOjEwOEZFMDAwQ0I0NzM2N0Y5RDI4MUY5RDM0OUZCMEUxNDk1RkU0RTE2OAotOjEwOEZGMDAwMTMwQjUyQjQ2RTU4MzVBQjdCREFFOEY5MjUwNzlGNjQ0MgotOjEwOTAwMDAwOUNGNTE3NEI2M0Y4M0M5NDM4RjEwQjgzNDcyMUJFRDU5MAotOjEwOTAxMDAwMzkzQzY1RDM0QkE5M0YwOUQ3RjgxOUQ4ODMyODIzMUVCQgotOjEwOTAyMDAwRDg3Qzk3RDlFRDIxNEVFQjM1ODQ3NjhFQTMzRDlCMUNFMQotOjEwOTAzMDAwQzEyQkM5OTI5MEZCQkNERTBENjI5RENGNkJBOEUwRjAwNgotOjEwOTA0MDAwODNFOERGMDMyRkVCNEY3M0Y2Mjc0Mzg1ODdDRjM5RENBNwotOjEwOTA1MDAwMUIyNDJFREY1OEZEMENFMUQzM0JCRTIyMTFCQzMyMjQ3MQotOjEwOTA2MDAwMkMxRjZCQjc1OThDRUY5NTVGRjY3M0JCRTg2RkJEMDQ4RgotOjEwOTA3MDAwNERCRDYxQkU5RTk2MzhGNDYxODMyNEU0ODRDNkQ3OTlDMQotOjEwOTA4MDAwNTczRUY5OTFBRjY2OUMzODVGMTUyQUQ3MTc0QkI5RjU1MwotOjEwOTA5MDAwMEVCMzhBNjIxNzQ2RjJFQjlENjI5RkFEMEYzMjMxNDFFQgotOjEwOTBBMDAwQjc1MUQxRkQ3NEE5QzQ0NUY3NDJFMTVENzY4MkYwNEUxNwotOjEwOTBCMDAwMUMwQTZGNDE3Qzc2QTZFNDFCOTU5RUJDRTEwNEUxMEI4MwotOjEwOTBDMDAwN0FFMDNCNTU3QzNENDNGMDU5QTFGMERCRUI2MEI0RjAxNgotOjEwOTBEMDAwQ0I0M0YxNUJEMDNBOUEzQjRBRjgzNjlGMjA3RUNCN0M1QgotOjEwOTBFMDAwQjY5RDI0RTBDQkIzNkVFNzA5N0E1QkMwRjk0MzYxNzZBNQotOjEwOTBGMDAwMzhFRTczMEE4NUVGRDE5MUUxMDNGODA0RkI2QkJENkE4QQotOjEwOTEwMDAwOTkwQUQ5NkIwMDEzMDA5RTZFNzlENUIyOTQyQzdDMjZGNwotOjEwOTExMDAwNzBCOTNFREFGMUY3OEM0QzNGMzFGRTVCOTY1OTlEMUREQwotOjEwOTEyMDAwRkZGOTk2Qjc1Q0UzMkI4QzdGOTBEOTBBMURGNzg1NDIzNwotOjEwOTEzMDAwRTcwREVGQjlFNkZEQkFGNDlFNkJEQzEzQzVGQkMxODIwNwotOjEwOTE0MDAwQzdGRkEzNkJERUVGNEI3Rjc0Q0YzQkNDRTY3RDdBRTFBQwotOjEwOTE1MDAwRTNGRUZFMDRGOUIxNTJBQzk3MDY0OTc3RTk4MTdDRjY0QgotOjEwOTE2MDAwRkIwQzQxRDdCQkVERkEzNkJDNzlFQTlGMjlFMDZBMkZBOAotOjEwOTE3MDAwQjBGRTQ0RDFGRkU3MEFBQ0RGMkJGQUVGQzVGQTY1MjM1NgotOjEwOTE4MDAwRDczRjVERDQ0RjE1NTg1RkYyRjE3NTk4NEY3RkNFOTc1QQotOjEwOTE5MDAwNkNGQzgxNkJGRkQxQTY3MTNGODhEOUE2NDBGMDlDQTFFMQotOjEwOTFBMDAwN0UxM0FCMjFGNUVEM0U0NjdCQUIzNUEwQjc5NTkyREY0NAotOjEwOTFCMDAwODRGQzIyNkIwMDEyRTgzN0Y5MjYyNEVCN0NBQzFGNjM5OQotOjEwOTFDMDAwQzc0REY3NjFCRDIzOEFBNjc3RUJDMDE3MjRGQjFFM0M3MQotOjEwOTFEMDAwMTBEOURDNUQ5OTFENkZCNTlDNkM5MjkwOTdEQUEyRkE1QwotOjEwOTFFMDAwODNFNDVGNDkzNTQ5RUM1OTY2ODU3NUY0REIwQzU0MjVGOQotOjEwOTFGMDAwNUE5Njk2RTIzQzBDREQ2MkZERkNGQThBOEI3NjYyNzkyNwotOjEwOTIwMDAwOTMyNkU5MzIyQkZGQ0IzOTczNkZGQjBDNkIzNUYwRTEwMgotOjEwOTIxMDAwQ0U5NzRFQzM3QUQzQzY1NUI1OTJCQzM0MjVDNDRGNjk5OAotOjEwOTIyMDAwNUMzNUU1Mjg3QjVFN0M3MTU2MUZFMDNGOEIxRDY1NjZEMwotOjEwOTIzMDAwMDc3Q0I2RTkxMjJFRkZDNUY3Q0YyN0RERTU0QjFBMkZDNQotOjEwOTI0MDAwNzFCNUJGMzRFMUZFOUU5RDBGRjA3REM3QjlEQ0ZGMzBFNAotOjEwOTI1MDAwNTA5NUZBMkYwRUQ3QzcyQTJERUU1RkEwRjlFQTU2NTQ4MwotOjEwOTI2MDAwRUY2NkYzNUNGRkUxQjU1NDVFREY1MkFCQjdCMkYyRTdGNQotOjEwOTI3MDAwQUVGNEI3MkM2NUNGQjAwNEJBQ0M5NjUyNzE1Q0E1RjlBOAotOjEwOTI4MDAwMDI5QkFGNUFDNzc2OEZFNzNDREIzNURCQzhCRkZGMkFBRQotOjEwOTI5MDAwMzYzREYzOEM1RjlDODU5M0NEQjNFOUVBREM3MEFCRkE4NQotOjEwOTJBMDAwRkIxM0RFNjBGNkQyQzBDRUEwODlGMDg0RjdDQUU5QTAzNQotOjEwOTJCMDAwNDQ3NEREMzkwOUU5NjIxNTI3Mzk3RDQwQUE2NkNGMjM1OAotOjEwOTJDMDAwOEQzQUEwN0ZBNEExMzE2OUM4QUNCQzMxQTZDNTAzMDYwNAotOjEwOTJEMDAwREFDOTE5MERGMTFFNDExQUNDNjVFRkUzQkUyMERBNjMzRAotOjEwOTJFMDAwQUFGRTA3RUE1RjE3REY3QkUyNTVFM0QxM0ZGMkUzRTYzMAotOjEwOTJGMDAwMzUxMzE1QjZERTc3MzQ1QkY0N0NCNEI5OEI5RURCOUJGQgotOjEwOTMwMDAwN0IyNjJBQ0M4OERGRDI3QzE3M0RFREY5QTEyNDMxRUNGNQotOjEwOTMxMDAwRjlDOUI4QUYzNjVCOTFERjA2RkNDQzM0NDIzQ0NFRjdERQotOjEwOTMyMDAwRDFGRTc2MDNDQTExM0ZDQUUxNzQ1QjE0REZEN0MxQjQyMgotOjEwOTMzMDAwNkU0MEI5QzRFNUNCQzZGOEI2RERGODdFNjMzRDRDNDM1QwotOjEwOTM0MDAwOTI2RDM0MzdCNzQ1RDkzQ0FFMkI4N0U5RDhGN0NFOTcyNQotOjEwOTM1MDAwMUZFM0RGMkI2MDdBODA5NTc3MzUzNjkwNUNFRDg5RkJEMwotOjEwOTM2MDAwRDI4MTRBODJGRjdDRTRFNzlFNDYxRjMwOTMwNzhBRUI1NgotOjEwOTM3MDAwMTg1QzBFQkMwNjYyRUVGMkFFNDYyNkIwNjYxMjNFRDIxNQotOjEwOTM4MDAwMDEyOTNCN0Y4NTJEMzNDNEM3NDZCMzJBRThEQzU3Q0Y3QwotOjEwOTM5MDAwREFFNzZFN0Y2NkRBNURERTg4RUQ4N0YxNEJDREVENzMzRgotOjEwOTNBMDAwRDc5RkYzOTJCQkNDMjREQjJCODM3Q0MwRjFGOEFGM0U3QwotOjEwOTNCMDAwMjYwRjc2QkYzQ0RFNjdFMUJDNEQzRTRGRjZFNEZFQzJCMQotOjEwOTNDMDAwOTgyRjhEQzZFNzE2ODEzRjFCQkYwMzExMkU1RjM2MzZERgotOjEwOTNEMDAwNzMzRjYwM0U3ODM2N0VFQUFBRDg3MDdFMDNCNUIxMjMyQgotOjEwOTNFMDAwODFGRTU0QjVCMTI3MDE2N0UxMzMyRDlFQkQwOUE3OUZDQQotOjEwOTNGMDAwRDU3RUJFODhDNjhGQzM1RkQyMTFEQjU4QjJCNDM2MEJBMAotOjEwOTQwMDAwOEZCN0ZFNzg1OTI1NzkzNzUwQzZCRjc3QzQ1RUQzOTc5QQotOjEwOTQxMDAwRDYzQUZCOTNCQ0RGQjVDQkMzQ0VFRkRDQUYzMjUwNkU5OAotOjEwOTQyMDAwN0YzRkEyMkQwREU3NjgzRjg5N0RDRjQxOTdBNTMyRkY5MQotOjEwOTQzMDAwRkVGNENCODE4NjNCOTAxRjA1N0U3N0JGRkMxM0FEMUFFRgotOjEwOTQ0MDAwRjFGREJDMENDODY3MUJGNzM1OTBCQzQ1M0U0Mzc5QjFCNAotOjEwOTQ1MDAwOEJGMTQ1NUYyREQyN0ZGRDJCQ0U3NTVCNUNFNzJFMzMwNAotOjEwOTQ2MDAwQkVFMkZDQzVGQUM1QTE3RTg2RjQ2MDFERkVCQkYwQ0I1MgotOjEwOTQ3MDAwRUUxNTdFRDkzRENEMzE3QTNFREQ2Q0QwNzM1NzczMEQzQwotOjEwOTQ4MDAwN0RDRjM0QzdBOUZDNTQ3MzFEOTU5RjY4MzZBOUZDRTNCMgotOjEwOTQ5MDAwRTY0NjJBRUY2ODRFNTBGOUQxRTYyNjdBNkU2RjRFRDIzNAotOjEwOTRBMDAwNzM0QkYzMTVGNDY0RkM0QkZDQkNBMTM5MjVGQ0MwNkI3OQotOjEwOTRCMDAwNUNGQ0YwRjdGMTgwOEJGRjNFNURFMzJFOUY2RjlDOTE4QgotOjEwOTRDMDAwNUREN0VDRUYyNzYzRUVGMjc5RkEyNzVERTUwNTlBQkJFRAotOjEwOTREMDAwM0MxRkJFRTJFQUVGREMwRkJFRUMyQUNGRUJFRjcwRDUwQgotOjEwOTRFMDAwM0ZGQjRENzc3OTZFREY0MzlFRjVFMjJFQ0ZEQUI3QzdBQgotOjEwOTRGMDAwQjMxRURERTVFMkJBNDNBRUZFMDIzMTc3Rjk3RTE0MzJFNwotOjEwOTUwMDAwNUM0RTExN0Y3NEM0NUE0QjcyRjJDRkUwRjc4REExMkZERAotOjEwOTUxMDAwQjlCRUNCRDQ3RTY0RkU1OUQ2NTU4OUZDOTNGNkM1MkREMQotOjEwOTUyMDAwOTQzQjI2RTcyNzVCRUU3OEY5QzRBNkRCNDhGQzY1QzNDRAotOjEwOTUzMDAwRjE5N0U2QUJGRkU1QTdFMUY5QTk2MDdFQTg1NzcyRjJDMwotOjEwOTU0MDAwODM5N0VFNUVGRTE4MjI2NzA0QkZGQzJGMUZGQzZERjBCMAotOjEwOTU1MDAwMDFDQzY0QzQyRUNGQUY1NzczRDg3NzY0OUYwNjEyNDBGNgotOjEwOTU2MDAwRjY5RDFGRUQzNDQ3N0I3NTcyMkE2OUU2RDA5RjU3Rjk0NwotOjEwOTU3MDAwRTY2Rjk1NTkzRjgxNTJFOEMwNzg2ODQwQzlFM0U3OTVBNgotOjEwOTU4MDAwRjkzRTI1QTBGMUVGQzE2QTkzRUNCMjYyMzBBNkNCNjMzRAotOjEwOTU5MDAwMDBBRTc5NkM1RUY5MzJGNkZFRTc0MjFGNzY1QzA4OTYwMwotOjEwOTVBMDAwQzRGQTFCMzc0MTRERTIzRUE2QjhEQUJEREY3QjQ2RTY4MgotOjEwOTVCMDAwRkIxOEZCQjlFOTg3OTEyNkZDMEVBNTMzNDc5ODM3OEYzNgotOjEwOTVDMDAwRDdDODEzNjczN0ZEQzY2MENGMEI2NjZGNTlDQkRFODZGMQotOjEwOTVEMDAwQUE5MzE5RjIwMTk1OTY5MjdEOUEwQzE5RDRBRjU5OTdENgotOjEwOTVFMDAwQjY3Q0E1MTg0NzgzMzhEQTg5NzJEODg0MjQxQjY3QUUwNQotOjEwOTVGMDAwQ0ZGQzA1Q0U5QkQ5NDdGRjIxQ0ZDQURBM0Q5QkM0RjNGMAotOjEwOTYwMDAwNDc2MjFENUVFNDMzN0YyOUVBM0QzRjVDM0Q3QkRDMTExMAotOjEwOTYxMDAwRTkwNTQ5NEJFMkZFQTlGODgzMEM0NDdGNjlEQzY1M0YwQwotOjEwOTYyMDAwRDlGMzUzOTQ4NDk5Qzg2MTZGRkM0RUUwNEJEMkUzNEQ1QgotOjEwOTYzMDAwREMwRkEyMDJDQTg3N0NGNTBGQ0FCNkZGQzk3MkVEMDcxQwotOjEwOTY0MDAwOEJBMTNGMjMyMzFDMzExRTZGODI2MzE3MTkxNzRFMURGOAotOjEwOTY1MDAwMEE4N0FBMjQ5MjM4MEVDNkFCMzdCMzcxREFDNzdDQzYyNAotOjEwOTY2MDAwNDgzQUM2Rjk0OEU2N0UyQTI5NjYxMjNDQUFDRUUxNTE1QwotOjEwOTY3MDAwOTVCODk5QzhDMTQ3MDMwMjFFQkIxRjNCNkUyNkM1RkFBOQotOjEwOTY4MDAwQTEyRjlDODU2RjZEMzBEMTg0RkIyNTZCOEM0QTc4NkE0NQotOjEwOTY5MDAwOEZCOEVEQUYxOTBBRUZBNzVBM0NEQkZEQjlFRDQzODA1NwotOjEwOTZBMDAwNTZCRTFGMUU1N0E3NjFGRjZENzUwRDFBREFENzhDMURBOAotOjEwOTZCMDAwNjhCRkQyMUU1RTUyM0M5Q0JEQkQ1RUQ4QkZERDI4MEY4OAotOjEwOTZDMDAwMDMxODBGRDc4NUJDOEFEMUIzM0RCQ0FEMTFEN0MxRDEyQQotOjEwOTZEMDAwNUE4Njg3Q0FGQ0ZENDRFMkVFQjg2RTUxNERDODEzQzdFNgotOjEwOTZFMDAwNEQxMzlDNDFBM0M0MTNFRjlERTA2QUU3MUZBN0Y4RUM1QwotOjEwOTZGMDAwQjgzNjQ4MjNDM0RGMjFFMEI3RUI3NTJBMjk0RENGODk1RgotOjEwOTcwMDAwMjczRUJFNUQwRUM0RENGMEZFRjlGMEM3REIxN0Y5N0IyNwotOjEwOTcxMDAwRjU1QzcwOUQyQUJDRTU4QkMzREE0Rjc1QUM5QTRBNzMzMQotOjEwOTcyMDAwN0Y0QUNDQjkwRTNFMkJGODRCMURBQkE1NDgzRTY5RjlEQwotOjEwOTczMDAwQkU4Nzc4RkI3MDgyRkM1QjVBMzg2MTQwNTUzNjFFQUJBMQotOjEwOTc0MDAwRTE3QTcwRTBFOTVBRDFFRUQ3OEE0RkFDQ0I1NDBDRkRFOAotOjEwOTc1MDAwNUM5MjkxNkE0MjdFRDIyQUQ4M0E5Mjg2QjZCMzlGNDlFOQotOjEwOTc2MDAwRDFCRUYzQzNGRkY3MTJBRDkzMzI4REQ2ODk2NEIwNzVDNQotOjEwOTc3MDAwOTQ2MzFDNDkzMUFGNTZEOEYzMUREOUJDNDZDMUY4Q0MwRgotOjEwOTc4MDAwNDc3MjMyRDc3QTU5MjFFMEQxMTYyNzBDQUQ4QTQyNzgzOAotOjEwOTc5MDAwM0NERkMzMDNDNzNBODVFQjgzNDMzNkZDNTY4QUZDNTY0RAotOjEwOTdBMDAwODVDMkJGQTY0MEY4RUQ3MTE4RkNFRDAyRkVCNUMzQzEzRAotOjEwOTdCMDAwREYyNkUwMjkwMUEzODU3Qzk5MDY5N0IzMDAxNzFBQ0UwRQotOjEwOTdDMDAwQkM4QjM3QzRGODI1NDI0RTMxNEMxMURERUNFRkZGMjU0MAotOjEwOTdEMDAwRkEyOTc0M0UxQjA1OUMyM0NERTc4RDJDM0RFRUM1NzlGRgotOjEwOTdFMDAwQjBGOURDODdGM0NBMzc5RjdCMDQxQzZGMjg1Q0NGNjgxNQotOjEwOTdGMDAwODk4NDExQUIyMjU1OUY5M0FGOUUxMDcwRjQyQjIyOEU1QgotOjEwOTgwMDAwNjY1RDNCMkFCRUZBRDcwMkU3RjE0NDk2MkU4RjA5QkE2RAotOjEwOTgxMDAwRUMxODZFMUU4RjhBNzlGNEM4MzBGNzBERjQzMzlFMkU0MwotOjEwOTgyMDAwRjQwRTJDNzFEMUU1QThDMDRGNEZDMEE2Q0I3NTJFQkE0RgotOjEwOTgzMDAwRkM0RUNDQUJEMEY5M0M1MzIwOUYxRENERDJFNTM5MzE0NQotOjEwOTg0MDAwOUZGREMzQ0RDNzUxRkY0NTUxRkYyNTUxOUZGQ0U3NDcwMQotOjEwOTg1MDAwOTUyQjVBQUQ1QUZDOUUzOEEwQ0NDQThFQzdFQUJERUNGNwotOjEwOTg2MDAwQUM3NzZERkIyQ0JCREVBQkM4MEY1MjIzRDc4M0FDREVDRAotOjEwOTg3MDAwNkJDRTdBNjA1REQwOEFGNkRCNUE4Qzg5N0UwMkUwODFGRAotOjEwOTg4MDAwRjZBRjM2ODg3NjZGNTJCQkM1ODNGREJGMjVENjA3QjVDOAotOjEwOTg5MDAwNUJENzNFQkZENTBBNTNCRDc3RjA3RENCODI4RkVDN0E4NAotOjEwOThBMDAwRUZCQUUxNUQ2MUMzNzE4NEUwNEQwQ0MyRjFCRUIzREU3RAotOjEwOThCMDAwMTNDQUU3QTlCRjIxNzk0N0IxOTI4MkVDMUY3RjY5OTI1MQotOjEwOThDMDAwRjJGNzRBMjBEMjgzRkVDNTBFMjU0NUZFNjQwQzM2QTA3MQotOjEwOThEMDAwMUY3Mjc1MjA0RUE5MkEyM0Y5QTNDQjJFRTZFRDc0NDVGRAotOjEwOThFMDAwMjM3RjZBMDA1MjcwMTc3QkJGQTE1NEExRjhDODYyMjU3QwotOjEwOThGMDAwMTlGMUEzMUQyMTI1MkQwQUFFODI3RTU5MEJGNjNGRDYwNAotOjEwOTkwMDAwQTBGQzJGMUI5RURCOEFCRUQ4NDVGRDMwNzhCMERGM0IyNAotOjEwOTkxMDAwOEJBMjNCOTFBRjM2NEU1MjBERTRBQjlEOTM2RTIwQkZCMAotOjEwOTkyMDAwRjk2RDJEM0M3RkYwQjZGMzU1REE2NzZEN0EzOTQyRkE1RQotOjEwOTkzMDAwNzdBRDEyRkYyQ0Q2Qjc0Q0Q1NDAzRkZBRUFEMDQ3MkY2RgotOjEwOTk0MDAwMkQ2N0U1QkU5NjYyNUQzQTg3RTY0MTcwNUIzRTQ4QjQ5RQotOjEwOTk1MDAwQ0Q3NEU0MjMzMkI4MDM3MUNBQTcyMzNGREM2RDhEM0M3QwotOjEwOTk2MDAwQUVDMzdFQ0FCMUZERUEwNTQ2QkNEQjQwRjFDNUU0MThEMgotOjEwOTk3MDAwRkJERTU5QTc5MkZEN0E1QjQ1RDU3QzFDNkY1MzlENDY1MwotOjEwOTk4MDAwRjZDNkE2QzU1NTJERTRDN0FCMEI5MUJGQjIyNDZDNDhGMwotOjEwOTk5MDAwRTg2NzhGQ0U1MTk5MDFDRUNBQTU0NjBCREE5QjkxRDlDMwotOjEwOTlBMDAwMjE0MEJGNTM0OTA1MUYyRjcyMDY5MDFGQ0EwRjNEODlFMgotOjEwOTlCMDAwNkFGNjhDNzZBOTkwMTk4QkZEMkRDOTdDMDlFRDk5QkFCMAotOjEwOTlDMDAwMDBGOUUxRDlDNEY2RDc4RUEzOTQzN0ZFMjNGRjBDMTAxQgotOjEwOTlEMDAwMUVGRjQ0MTkxMEVGMzY3REEzM0Q4M0VEODdDRDYzOENDOAotOjEwOTlFMDAwQTYwQkFDOTcyOUFDNUVBNDRCODFDQzhDMDJFQUY1MTQ5MwotOjEwOTlGMDAwNTgyRjVENjBCRDBDQUYxNzgwMEI4N0NERTc4MzM4Q0Y0NAotOjEwOUEwMDAwMjNENEQ4MUY5RUM3RThDODJCQUNFNEY2QkJEMzZFRjFCNQotOjEwOUExMDAwN0JCRThGMzYyRkY0MkFCRkM4MEI5RDAzNzM3ODVFRTg5OAotOjEwOUEyMDAwRjBFREVEN0NEMDkxRTYwQkUwQ0JDMjI5OEY1QzdGNkQzMQotOjEwOUEzMDAwRjNGMDdFNjNGRkI4MUI2Mjk4N0ZEOTU5RjY1NUYxQkNFRAotOjEwOUE0MDAwOTEzRkNCQzVGQkYyMzUzMTk0Nzc5REU1RTI3QkY5OERGMwotOjEwOUE1MDAwNERCOUY2QUY3N0ZBQjkxQ0FFODFDNEIwNzQyODExRjBENQotOjEwOUE2MDAwMUY2MkIwNjM3RTRGOERDMkVBNDdGMkQ3NTc0QjdEQzM2QQotOjEwOUE3MDAwRTY1OTZBOEFENTQwRUI3NkIxOEZENjZEMDA4NTAxQUU4NgotOjEwOUE4MDAwOUIwQUJFOEVGRDkwNEE1NEYzNzg1NUI0RENCMTdFRkMzRgotOjEwOUE5MDAwRjU3QjY4RkRGQ0EyNUMwNkE5OEVFODEzNDczQzdBRjlDOQotOjEwOUFBMDAwQzRDQjE3MDE3MDk0MkI0RjlFNEZCNkZFOTlGOEM0REZCQwotOjEwOUFCMDAwMjUxN0I0N0VGQzNEMDVENjRCMTc1ODJGNTM1ODNEQjU5RQotOjEwOUFDMDAwNEIyQTQ4QUVBODNEMDVENjRCMTc1ODJGQzNFQkFEOUQ4QQotOjEwOUFEMDAwQUI3MjdEMEU3RjY4QzU3OEJGRkYxMzlBQUJCQ0Y2MTNERgotOjEwOUFFMDAwMjFGN0Y3QjNDM0FFNzJDNzJDNzc3Qjc1QjZCQjdEQzdDMgotOjEwOUFGMDAwNkM3NzdCNzUwRTZGMUZFQzgwMDUxOENGMkY3NDlEMUM0MwotOjEwOUIwMDAwM0NDMTc1NTJBMzBENUYzRjUyMzdDMkJBRDJGNDIwQjZBMgotOjEwOUIxMDAwMkY1MTBDQzg5NDkyQkU0QTBCQkQ5NTMzMUU3RTlBQ0EzMwotOjEwOUIyMDAwRDc3Rjk1OUZDN0NGNkY1M0Y0MjBFRTIzRkZENkU3Mjk0OQotOjEwOUIzMDAwQTkzQzlGQzA5RUVGNDhGMERBRjJGN0I3QjJCMEI3RjI5NwotOjEwOUI0MDAwRTQ3RDQzOEM5RjdGRjA0MzI4OEU3NjhFQjE1MDZCNzhGNgotOjEwOUI1MDAwODVFMUQxRkYyQ0NGN0JGN0Y2RkI4QTlBOUNBNjNBRjZEQgotOjEwOUI2MDAwQzVDQzNFODNBNEMzMEY3MzdFOTlDMkYzNkQxODFERDA3QwotOjEwOUI3MDAwMUU1MjIxRDE1OEM5RkE2QkFCRjA5MTNEQTI4NDQ3RDA1NwotOjEwOUI4MDAwMUIxNTBFQjk5NTIzMkYyRkVCOTcwMjEzQ0Y1M0QwMjcxOAotOjEwOUI5MDAwMDM2MEZFOUI3Q0RDNTAxQzA4RUUwOEY0RDE2NkJBMTgwQQotOjEwOUJBMDAwNTNFNTRFMDcxODAzODZDNDkzQkVFMjEyQ0YxM0FDRDcxOQotOjEwOUJCMDAwNTE5RTk1MDY0Rjc1QkY5NzUxQkY5Mjc5MUIxQzJGMUE2NgotOjEwOUJDMDAwNDVCRjRBMUZFNUNCOUNGMjdFNDc4MDM3MDg3NzUzQkZERAotOjEwOUJEMDAwNkM5NzU0N0E3QzZDQjY1RjdGMkM0NTJGMzE0RjU2NzY0QwotOjEwOUJFMDAwRTRDQkUxQjkwOENBMzdGMUM1MzM5NERGMzAyMTRBRkIzMQotOjEwOUJGMDAwQjJCNUE1RDdCOUYyQzFGRjU5QUQ3MkY5ODc1NEJERTMyQgotOjEwOUMwMDAwNUEwOUUzQkExNTU3OUI3REMzRjA3OTMzMTM1N0U0RjcyQwotOjEwOUMxMDAwQUM1ODZFRjZENUU0QUYzNzk4QTc4RkY5OUUzOUQ2NDE4OAotOjEwOUMyMDAwODc5QTRDQTNGRDZFNEQwRUYzRkRCQzkyMjI3RjYzQTc3NQotOjEwOUMzMDAwNTQzMjFERjMyREVDN0E0QTA1OTNCNDBDQUVDODRDRDNDNAotOjEwOUM0MDAwQzJGRDVFRTc1ODVGMUNFRDU0MDVENkVGOTNDRTYyRUQ4MgotOjEwOUM1MDAwRTRDNTcxQTdGRkQyRkI1NDJBOTRCNzlERjNCOTVENjVBMwotOjEwOUM2MDAwN0ExMkUxMTQ3QUIyNkQwNDdFMUZEMUVFNTFFM0M5NUMyMQotOjEwOUM3MDAwN0VEMTZGQUI3QzVGRUIwRkU1RkVERTE3NkE3ODQwOUQwRgotOjEwOUM4MDAwMzUxNDZGOEYyMTdFNzE3RjNCMDZCQUE0RkZDM0Q5ODczRAotOjEwOUM5MDAwRjJBNTJBRjZCQzg0Nzg1ODVCQjYyODM2REM3Q0Q5MDY1NwotOjEwOUNBMDAwRUFGMDIwNUQxODg5N0YxNjMyMUY0MTc5MzAwQzFDM0Y4NQotOjEwOUNCMDAwQ0MwNTA3ODQwQkYzN0ZFQjBCRTNDNDg3ODNGNjUyMjlCMwotOjEwOUNDMDAwODhGRDk4MTk5NTE4REY4NzA0NTdERTMyNzM3MzA2Q0YyNQotOjEwOUNEMDAwNDNGODk3ODY0REE0OUY2QzZFMDFGNDU3REI3NjkzNkMyNgotOjEwOUNFMDAwODY1RUY1MTEzREVCQjlGRDU0QzNFRDIxOTNGREMxNzlCRAotOjEwOUNGMDAwNDRFQjg3QjdBQjY1NEZGOTM5RDU2RDBGQjUzNUVGMDAzQwotOjEwOUQwMDAwNjc5RTlCRjc1Qzg1RkQ0Qzg3MUE1RUNDOEQ4RkMyRjZGMwotOjEwOUQxMDAwQzNCNzMzN0VDMTNDRkI4RENEMUEyMjA1N0E5QTc1MkFEMgotOjEwOUQyMDAwNkY2ODhFNTE3OTdEQjM0MUNGRjZFNjFBN0FERThDNEQ5RAotOjEwOUQzMDAwRTdFMkY5QTc1NDU3MjVDMzVCNTdFQzgxRDhFNUFDQ0FENQotOjEwOUQ0MDAwRUQyODNCMjg4RkVGREUwNTY4MkY3NzBGOTZEOTM2OTBFOAotOjEwOUQ1MDAwQzFERDNEMDk3ODVFOUY3QUVCMDJEQ0U3NzcwNzQxRjhDOQotOjEwOUQ2MDAwMTVEQTE2QTA1RDlEMkRERkQxMzYxRkNCQzJDRjEwRUFDQwotOjEwOUQ3MDAwQkM2RjAxRUVGNzZGMTdGOTBGQTA5OERBMjUwRUJENzdDQgotOjEwOUQ4MDAwNUFDMDRGRkM0NzdCNTc2QTZGQjU2MTdGNDE0NTk0RTFFQwotOjEwOUQ5MDAwOTEwNUVFMzI5ODA4NEY1MEUzRTUwNTgxNkRENDNGODk3NwotOjEwOURBMDAwMDAzNkRFQTcwMzNGRTBFMzREMTFGOTZEQjU0QjQ2QzAyOQotOjEwOURCMDAwMjNGN0VGNUJBQUMxRkQ1REI1MjUxNDNGNTJFMzcxNzQzMwotOjEwOURDMDAwQkZDMkVENjMwNERDMDVGNjAzNEE5MkVCM0I3MThFMkZCNAotOjEwOUREMDAwRkZCQTE5NDFBRjA5Mzg0NkEyM0Y0MzA3RjlEMUVERjM2NQotOjEwOURFMDAwNjlDQTBCQjlGNUY0QTkxRUY3NzZGRkU4RjBBMkQ2RjUxQgotOjEwOURGMDAwNUI3ODg2RUQwOTM1MzkyN0MwREE0N0NDREU0QzI1MkI1OAotOjEwOUUwMDAwNDcxNzY3MkM1QUJFMDU4RTNCMzY2MEU3MzkyNjY5RkQzOQotOjEwOUUxMDAwREI3ODU2NzQ2RTc3QUNGMEQwRDE1RkNBRTM3NTQxNzFEMAotOjEwOUUyMDAwRkVBNDUwNzg5M0FBMTg0N0Y0MDMwRjM3OTQwRjY3QUYzNgotOjEwOUUzMDAwOTUyNTdDNjg4NDBEQ0E4QkIxOEQyMUUxOUNFMUU1MzFDQgotOjEwOUU0MDAwNjY4OUFCNUM1QzM3QzE1NTNGMTJBRjcyN0RGN0VCMUY4MwotOjEwOUU1MDAwNzc3RDNGNTEzQTVERTI5OUM3QTc4NERENjg5N0NGRjVEQQotOjEwOUU2MDAwQ0VCM0MwN0UwRjE2Mjc1NjA1NzBERDM0NDA0RDhBRTExMwotOjEwOUU3MDAwRjVDRTJGM0M0NEY4MEYwREFFRDM4NUVENjYwNUU1ODM5NgotOjEwOUU4MDAwOEI3NTNEOEY5Nzc1RkI3QjVEQkI1OUNGQ0E4NkZEN0Q3QQotOjEwOUU5MDAwMDYyRjlCRjZGNzM4QUY2RkQ5REZBN0YyRUYyOEY3NTlGNwotOjEwOUVBMDAwRjk2QjlENjdCNDVCRjgxRDVBQzk2RjBCMTUyOTU4RTIxMQotOjEwOUVCMDAwQTBDRkQ4RjEwREFEMDhERkY4Q0JEMjMxOEJCREVGRkVDRQotOjEwOUVDMDAwNTBFNkYyMDA3QTYyQ0U3QTc3NkFEQzBGRkRDQzk0M0JFMgotOjEwOUVEMDAwNjJFOEFGNUM3N0U2NDMzMTIwNzkyN0U1OEMwN0ZFM0NFQQotOjEwOUVFMDAwQzBGM0M1Q0E0Mjg5OUUwMEFENzdCM0JGOThGMUUxQTEyNgotOjEwOUVGMDAwODc2NDgzRUIyMUU1MzVENDg3M0U4QkU3RTNBQjEwREY0NgotOjEwOUYwMDAwNjdBMjVENTRDM0ZERDUyMUYxOURFODU4OTlBRDNGNDg0NgotOjEwOUYxMDAwNTc0RkY5RUYzNEFFRDc3Rjg3NDkxQjBDQ0VFRjE1OUIxNwotOjEwOUYyMDAwRjdEMEI4OTA5NjFBRDk3QUFGQjBBMDFGQ0YxRjgxQjBFMgotOjEwOUYzMDAwRkIyNkYyQTY1MDlBNDg5MzlGNkYxMkMzQTdDQ0JFNEY0MAotOjEwOUY0MDAwQkVCOEJGQzVDRjcwNkQ1Q0E2RkI3MDg5NTQyRDhGRkI2QQotOjEwOUY1MDAwNDhDMDBEREE5MTYzQTVFM0VDRjkzREE0MTdDQUUzOUI3MQotOjEwOUY2MDAwNTI4MEZBN0JFRDk5MEYzNTIxNUUwMjk5N0YwMjgzRTFFMQotOjEwOUY3MDAwRUQxRjI3QTVDMDQwRkY2RjgwQzMxNUI4QUMwNzQ4M0U1MgotOjEwOUY4MDAwNTdGNzEwOUVCREY4NUEzNzg4RjdCNDBCRUYzRjA5NzBBQQotOjEwOUY5MDAwN0Y3RTJDQzlEQjBERDY1MzU4QkRBOTQzRUI3NTA3N0JEQgotOjEwOUZBMDAwRTZBQjY4QkY0REUxNzhGNDhFRjM1RTQwMTJFNzc2RERGNAotOjEwOUZCMDAwNzBEOEZEN0FFQkRGMTIxMDcxNkQyRDRERjE4RDY3Q0VFQgotOjEwOUZDMDAwQkMyMTg2N0VFRENFMjk4Q0ZFQjVGOUU5N0Y0QjgwRTc3QQotOjEwOUZEMDAwNUIxOUM3NkUyMkI5REIzRDY5MjNDNTMzRDc1NTZGMjZBMAotOjEwOUZFMDAwN0JGMjI4QjMyM0YwRkM3NDc3NjVFRUY2OURDRDNDM0YwMQotOjEwOUZGMDAwRTY1Q0I4QkJCMThBRDFBN0YzNzk5OUZDQjRERTdBREYwRAotOjEwQTAwMDAwMDk1NEI5RTI4RDVBODU3QjNGQzhGOEFGMEZFNUU4NDg5RgotOjEwQTAxMDAwRkMyNzQ3MUVFMEVCNzI5NDdDODc2NjIxM0ZDRjUwRDYyOQotOjEwQTAyMDAwOEVGNjgwNUY5NEVGMEUxQzZGMTNGQTlGRTQ3RkY5RjJCNwotOjEwQTAzMDAwMUU3MEU2NEJCRTJGRjgyMjEzRTA3MjI2NThDMUY5QTMxQQotOjEwQTA0MDAwREI2RjQ5NEVGQUM1RDhGQkY5OEU3NkY5RTg5NjhGMUY3QgotOjEwQTA1MDAwMUUxN0VCRTE3RDI1REU0NENBNUY0OUU5QjlFNEIzMTI3RQotOjEwQTA2MDAwRkJGNDJGMTczQUNFN0JCNTJCNjk0RDQ3Rjg2QjM2NEE3OAotOjEwQTA3MDAwNEVCQkY2MUI2NjMyQTQzOUY2MjdBMUQ4MDVCRjVDODgxMwotOjEwQTA4MDAwRkIxRjI1OUU3MzlGRkUyOUQzOEM2QTZDRkM5QjlCNjFGMgotOjEwQTA5MDAwNDYzNTlFNEI1MEFDMDBENkJCNTlDOTM0RDJCRUEyREE2RAotOjEwQTBBMDAwNDdGRUYyNzUxNUQ3RURDNTNDMkJBQkQ2MTdDNzZBNkRDOQotOjEwQTBCMDAwMTVCQjFBQUIwQ0U0OTc2RDk0NjdGQUE2QkUyNDg2RkQxNwotOjEwQTBDMDAwMDQ2MkVBOENFQUIxOTRERjlEQzA3OTg3NkI1OUJGMEVCOAotOjEwQTBEMDAwN0FEQkUzREUyREY4RjY1QkJBMzk1OUUzRjJFMDM0RUREMgotOjEwQTBFMDAwMkYyMDBGREU4Nzc4OEMxQjU5MENDRjM5RjY1NzQzRjFBMAotOjEwQTBGMDAwQ0NGMzA0M0EyQjg2RTA3OThFRTZFMEVCMDBFMjc5MDZCOQotOjEwQTEwMDAwQzlGQjlDRkUwQjg2RTdCMzVENzgwNjg2RTdBOTU5M0M0MAotOjEwQTExMDAwNzc1NzcwM0M3N0Q2NkNFRUFBNzJFMkI5NjZEN0RFNEEwMgotOjEwQTEyMDAwMDNDN0U3Nzg3RTQ4RTNFNzczNDM4ODY3MDc5QzVFM0M5NAotOjEwQTEzMDAwODcyNTVCRkY3Q0FDMURGOUQ2Q0JGNzBDRUY3RjhGRjA0QQotOjEwQTE0MDAwRDhFRjNGMEFGQzgyRUNFMUIxRTMxMzE3NkFFNDNGNDkyMAotOjEwQTE1MDAwRDFGRUU5NEUyOUFGNUVCQTQ0MkI0MDJGNzU4QTc1NzQ0MwotOjEwQTE2MDAwQTdDMDNGRUJGRjBCRDQ3RkE5RThERkQ2Qjc0MjFGRkVBNQotOjEwQTE3MDAwODNGNjZGMEI1MDFGQjI3QUNCQTg5RTlFQTI3REYwNjAzMwotOjEwQTE4MDAwM0QwQjg2RDVBM0FDREQ5NUM0NDc2MTRGRkYyNjhDNEFCNQotOjEwQTE5MDAwMUZCMzdFQUVBMzdFMzRDRkY4MDY5Qzk0OUU2N0ZEREU4RgotOjEwQTFBMDAwNDRGRDJBOUU3RTRGQjEzREMxQzZFOTI2RkM4MTA3MEZDMgotOjEwQTFCMDAwN0Y2NjNCMjY5NkY0RjA4M0QyRTM5MjdCMzYzRjk0MkY2MgotOjEwQTFDMDAwNzdEN0NCQUZENzdBQjg1RTFCNkFENzEwREZGRUJDNzNFOAotOjEwQTFEMDAwQ0Y2RURDMjdCREE5OUJERjQ2QkM4RTc2MUREODc2NjA4RQotOjEwQTFFMDAwNTkyOEI5NERFMzc2MjA5RDgzQjBCRTUxOTQ2RTYzNkRCRQotOjEwQTFGMDAwOTVFMzNENTExRTdGNzdFQkEzRjFCNjNENTRDREY1NDA3RAotOjEwQTIwMDAwNzA5NDdBNjk5RkIwRDczQUM2MzAxOTU1Q0M5RUZFNDRGNwotOjEwQTIxMDAwNTMyRTNGQzMzMzlBOURCN0U2QjY5QjdGODM3MzI0M0Y4QgotOjEwQTIyMDAwNTE4MkZDNkJFREIxQ0ZFQ0U4NjNCNDMzMUI3QjIwOTcxQwotOjEwQTIzMDAwOUM0Rjg2OTIzRkM3RjlBOUJBNjU5MjdBMTVGRTkxN0MyOAotOjEwQTI0MDAwRkQ5NjI2QUM5RDdCNjc5MkRDRURDN0JDNDYxMDcyMTg2QwotOjEwQTI1MDAwNEQ2QkY0Qzc0NTE5REUwRTY5RTRDMjg4QTM3RkFERUNFRgotOjEwQTI2MDAwNjI2QjNFQ0FCMTBBQzYyRjU4N0Y1Q0QzM0UyOTk5MkIzOAotOjEwQTI3MDAwM0U2RUVGN0YxMDg4MUNGQjk3NzE5RjlCOURBNDdDQjg1RQotOjEwQTI4MDAwQzUzMzQ3RDhERkI0RDhGNkVCNkY3MTVFODdENDlFMEIyOQotOjEwQTI5MDAwQTYzOEYwNkVEM0U5MEUyOTcxRTE3OTI4NEZFNzcxM0FCQgotOjEwQTJBMDAwMTU4RjkyNEUwMzgyNEVCMDk4RTdBMTlFN0JFQzVDOEQ5OQotOjEwQTJCMDAwRkM4QjExNUYwMkZERjA0MTdGOEY1RUUyRTBBMzcxM0VGNwotOjEwQTJDMDAwNDhGNjhFMDJGRTdBRThERjdEMUNGNzdGNjExRkVENzc4RQotOjEwQTJEMDAwQkJDM0NCQkU4M0Y3RUY1OEJBMUE5RjYyNjRDN0VENjY2MwotOjEwQTJFMDAwRkFCRUM0QTE3RkJDRkVBQUMxN0RGNEUyQzJGMjY1QTc5QQotOjEwQTJGMDAwNTg3MzI4REU5RkJEM0ZDODlEN0ZDMDE4QUIwNkYzODYwQwotOjEwQTMwMDAwNTZDQkRDN0Y3RTY3RDFENzI4MEY2MThEMTVEMDAzQTU5MgotOjEwQTMxMDAwQTRDN0M4RkU1QjI3RjJEOTNBNDUzRURCNUE5MUNGRTY4NwotOjEwQTMyMDAwQjc1NjZGQzVGQTlCMDAxMkU4OTc2Qzk5OTdBMjc4N0Y5MQotOjEwQTMzMDAwNTREMUY0RDYzOEMyOTE5QTgzN0EyMjVBNkFBRkNGMUY4OQotOjEwQTM0MDAwMkZDNEY1Mzk1OEI2QkVEMURFQzBFNjFCOEREOUU1OEREOAotOjEwQTM1MDAwNjRCRkI1Qjc3MDc5RjNEOUUwMEIwQkFEN0E2NEM1M0UzNQotOjEwQTM2MDAwQTJDN0E2QkEyNUM1MzA4QzNGMzI1Q0VCQ0U5RjBCNTVGOQotOjEwQTM3MDAwODc1QzY1QURBMkM0NTU1NjRCMjcwQzFCQjdGODE5RkE3QwotOjEwQTM4MDAwODk2NkUxN0NGQTIwOEU3MEU2QzkxNzlFMTJFNDc2QjZFMwotOjEwQTM5MDAwMkM0RkVCQ0Y2MEJFQzFEOTZBN0NCMzgxRTdBOERENzlEMQotOjEwQTNBMDAwOUNFRDQxNkUwRjNFOEEwRTIxOEFFMzBBQkVBOEUzNzEzRQotOjEwQTNCMDAwRDVBMkI5NTVCRDE4MDc4MjMxOUMyRjMwNEZEMEM5MEY5NwotOjEwQTNDMDAwRjlGOEUyQUY4RDFGNUZEMUUxMThFNjVERENEMjFBMDUyNgotOjEwQTNEMDAwQ0M3M0I5NjVFRUFGRTIxOTAzRTU2QTVGMENGMzMzREFDQgotOjEwQTNFMDAwOTgyNDY5NjVERjM3Q0NGRDk1OTFDQjlGN0M0MDRCMkUzRgotOjEwQTNGMDAwMEYyMkZFQzIwOUIyQkYyMjMzOTNGNEZDNkJDRjZCMjQ1MQotOjEwQTQwMDAwN0FERTE5RTQ3QTZFOEFBMEE3ODJGNDlDOTlBNUU3QkE0RAotOjEwQTQxMDAwM0E0NkNGOTlEOTc1QkU0RUU5RDEwQUExRTdGOTM4N0VGRgotOjEwQTQyMDAwMTlDQUExRkZBNjdEREJDRDc1QkU0Njk0NDMwNkY0NTI0MgotOjEwQTQzMDAwRkVFRDg2NUE5RjBGRkJGRjZCRTFDNTg2MkIzQzk3Qzk0QgotOjEwQTQ0MDAwNDdBMjUzMjY4MTdBNjE0MzVDRjFBMTFDRjk5QkUzQzNDNwotOjEwQTQ1MDAwOEZGQUU4N0QwMTdDRjhDMzVDN0NCODVDRDA0MzJFREFDRgotOjEwQTQ2MDAwRDc5NDJCRUY2RTRBNTA3MkUxNjUzREQyOEJFM0E1OTFGNAotOjEwQTQ3MDAwRTNDNUY3NTdDMUNCQTBCRUQwOTIyQjkxNkZBRTg4QTk5MAotOjEwQTQ4MDAwQjRFRjU2NEFCQTNBMjg1RUM0RjQxRUM2MUI1NkM4QTY5NAotOjEwQTQ5MDAwODFGMTI2Rjg5NjlGREZDNzg0N0FEQkExNUZGRTE4MEM1NgotOjEwQTRBMDAwNzJGQjQ0NUVCRjg4RTIxODZDNkFCODJGNjNFNThGMERCQgotOjEwQTRCMDAwMUIwRjRERkJGQjlERjc5NDc4RjMzMjVFMEJCQUUzMTA1NAotOjEwQTRDMDAwNDcyQTk2MTQyM0JERjJGNUY3NzZGMzVFMURDRkQ1REE1MQotOjEwQTREMDAwRjkxOURFRUYyQjY0NDhFNTNBQjcyODg1MzQ2MTY3RjY1MQotOjEwQTRFMDAwQUE4NDg3MUI5OUFFOUQ4NkY4RjhEODQyM0M5RkQ5NTkxQgotOjEwQTRGMDAwRDEzQThFRUMxODcxQUU2MUM1OTY2Nzc1QzUwMUU3MEE1MQotOjEwQTUwMDAwODVBOUJGRTk0M0U3NjNFMzc3MDVBQUM5MTI0N0ZCRjRDRQotOjEwQTUxMDAwNUU1NzdCNkZCQkMxRkU0NDdCNjZCN0Y5NDMwQzNFNTM2RAotOjEwQTUyMDAwNDlFREM1NzhCMzdEN0U0M0REMzIzRjQzNkEzMzBGRENBRQotOjEwQTUzMDAwOEM4RTI3MDU3N0ExRTczODhFM0NEMEQ2ODFGQjZEQjQ5MQotOjEwQTU0MDAwQkYzRUMxRjhFNEI3OEZDOEYxNTZGNkY1OEFCQkNGNThDNQotOjEwQTU1MDAwODhFNzVBMEYwMUU3MTc5QjNFNkYzREQwMzYyRTE3NUZGNQotOjEwQTU2MDAwRTRBM0NGNzlBMTIwODdFNzE0RjNENzU5MjEwRjdGRjUxMgotOjEwQTU3MDAwNUU1NDlDODE1M0NGNUY4QkYzRjE5N0MwQ0ZFMTVFOEUyOQotOjEwQTU4MDAwMEZCODZCNkM0RTNBRTU5QkNGMjA5REVDNzY4MkNGQkMyQQotOjEwQTU5MDAwRURGM0I1NjM3Qzk1RTA3Qzk1ODk5RTVEMDg1RjA5Nzg1NQotOjEwQTVBMDAwNkRGQTlEMkNCQzIzRjE1NTYwOEQ2Q0UwNzlBRTRBMjU4NwotOjEwQTVCMDAwNDE3MkIzQjNGNDNBNEJEQ0VCNDhGOTlFNzJDRkI0OENFMgotOjEwQTVDMDAwQjhENzRBRTRCNTQzMDZFRDg5NDBBOTQ5NzY3NDQ4REMxQQotOjEwQTVEMDAwQ0ZBMzU1QkJFNUE2MTI3MzlGOUI4ODM1MjUzMjc2QkY2NgotOjEwQTVFMDAwRThCRjBDQUM1MTY5RENDMUY4NzExODMyQzEyODk2NzkwQQotOjEwQTVGMDAwOUMxNEM1MUZFRTJCMDJGMDRERjI3QkIyNzYzOUZEOUUwNgotOjEwQTYwMDAwRjY1MzExRjk2QTk4Q0I0QkY3QjJDMUU3NDdDODZGNzE5RgotOjEwQTYxMDAwOEYxM0JCNzhGOEZDMUE2RjdEMDgyQkM2MjEwN0RFRjM3OQotOjEwQTYyMDAwQjc1M0UwOTA2MzlGQjM0MURDMkI2QUUzREZEQ0IyOTQ2NQotOjEwQTYzMDAwRjJDQTgzRTA4QkQzRkUyMEQ2NjFFMUJFQUY0M0FDRTcyNAotOjEwQTY0MDAwNEU3Q0NFQzU3M0JDRDM3NURBQUY1NUYwNzg4QjI1N0RDMwotOjEwQTY1MDAwOTlGQzBDRjZCOTMzN0IzQ0ZCQkM5OTVENkYyNEZBQUZENwotOjEwQTY2MDAwQzZGNTk0NjM3REVGMEE3MTdEM0FGMEI1RDQ3RkUzM0U4MQotOjEwQTY3MDAwQzRGQTEzMTg3ODBGQzVFM0NEMUY1MDlDRkE5Q0NDNUIyRAotOjEwQTY4MDAwMzJGQUY3OUYwOThEQTM3RUNFRTlFRjkzMTczOEQ2RTUwRQotOjEwQTY5MDAwMzlFMjFDMDc0MEFGOUNFQjlDOTdERjBBRUM0MjdFNzhDNgotOjEwQTZBMDAwRUEzMERGOEYzRDc1RjgwOEQ5RTE0RkZEREU5NzQ2QkVGMQotOjEwQTZCMDAwN0JFQTgzRTFGMzFFMUUxN0ZCMjJCQkRFRTNCRkU3RjY1NgotOjEwQTZDMDAwRDlFMzRBNkY1MTJFRkIyRTNCN0U5QUVGMDcwRkJCRjk2MQotOjEwQTZEMDAwMTU5NDVFMTlGOTY1RTBBNjdEMzJGQTA3MUU2RkQ2QTRCRgotOjEwQTZFMDAwRDc5OUZDOTkyN0U2NzlDRUUxM0UxOUY3NEQyM0NENkIzQQotOjEwQTZGMDAwQUI4N0JFRjYzQ0I3RDY3MzdCNzQ2QkZEOTExMEZBRkY0NwotOjEwQTcwMDAwQjczRUMxRTc3QkI0OUU5RjhGQ0QwN0VGQUU2NjlFREY1RAotOjEwQTcxMDAwQjFGNTg5RENGODY4OThDN0Y3QzcwRDdFQTMzNEE3NUQ0QgotOjEwQTcyMDAwRUIzOTY3QjU0MDkzRERFN0JCNEUzMTdDQkJFQkI5REQ2MAotOjEwQTczMDAwQjU1Qjg5ODc0RjA0OUVCQ0VCQkJBRUE3MTFERDA4NTEwQQotOjEwQTc0MDAwNDgzNkNFOTcwOEJERkI1RDdFOTIwMzVGNkZGOTMyRTYxNwotOjEwQTc1MDAwNkIyQzBEOUIxMkVFNjVBMTJGRjMyNDlCNTc4OUE5MjUyNQotOjEwQTc2MDAwRjBERTk4RTJGQTFFNjkzMkU2NzdDNDc4MUVGOTM3QUY1OAotOjEwQTc3MDAwN0UyREYzMzIyQkRGREM1NDQ0NjU1RDM3OUU1Qjg0RjgxRAotOjEwQTc4MDAwMjhENUM5OUY3MjMzN0E1QzQ4NDA3RjczMkRFNjI3RDA2NQotOjEwQTc5MDAwN0E2NEU1QzBDRDNERTdBMTNGNEIwMTJFMkY5OEM1NkJGNAotOjEwQTdBMDAwMjhFM0U4NUUzRjcyRDJFNDkzMUJFQzQ3M0ExRUM4QjYzQQotOjEwQTdCMDAwQ0IzQjRGNEZERTZEMDA5NjBDMkZDNzk2RjNGQTE2RkI3RQotOjEwQTdDMDAwODM3MkE4QzQ5MzY3QTIyRjc0RTdBNTQ0M0RGRDRGNDU0QgotOjEwQTdEMDAwNUJCNUFDODBCQ0YyOTMxQzY3MEM2Q0QzMENEQzY3RDcwOAotOjEwQTdFMDAwRkFGNDM0RDYwNzYzMENFNjBEODYxQjk5ODFDNEU4Mzk2OAotOjEwQTdGMDAwNDYwNzA5Q0RFNTkxRjBCRTBFQTA5MUZCQkYzM0UwM0NDQQotOjEwQTgwMDAwQTdEMzUwQzRFNUQ1ODRBQjZFOTc3MDlGNzEzNENFQjg5MgotOjEwQTgxMDAwNjIxQTk2REZDQzk5N0ZENTJFRTRDNzYwNTlERjQ1RjJFNgotOjEwQTgyMDAwQjQwMzdBRjc1MjVDMjBFOTIzM0JGQ0U2REFENjMxQ0U1QQotOjEwQTgzMDAwRjY0QjhCMjREQjFGMjhFODBGODYzMjNCNEI3RjM2M0ZERAotOjEwQTg0MDAwMzM3OEQ2NUY4RUZFQjFFNTZFQkM4Rjk2MkVENzE0NzEyRAotOjEwQTg1MDAwNzkzNTEyRkQ0Rjc2MUM5QjZFNDNENzQ3OEJBMERCMDNFNwotOjEwQTg2MDAwMTQxN0VEQUUxOTVFRUUwRkE1REIzNkQyNzdFMURBREMxOAotOjEwQTg3MDAwRjlCQUQ3MTU0OTJFNzk2QzNGMzU0ODQxOUNGMTg5MkM5RQotOjEwQTg4MDAwRUU2Nzk2QzdDRjZFQkE3RjE4RjkyMzNCRUY2Nzg2NkNFOQotOjEwQTg5MDAwM0ZFMzhDMUUxM0UzNTZFM0ExQzdDNDczREY4Q0E3RTMyOQotOjEwQThBMDAwMTk0MEZFMzYwMUVEMjQ2NjFFMTExRkM5OUVGRERDNDZDRgotOjEwQThCMDAwQzE0NzQxNzg5RURBQjM1NTYwRTlBNDU3NTJBMDNCRjJGNAotOjEwQThDMDAwNTRDRTkzQzM3MUY0NUZBQ0QzQzM3NDJGMTJDQTRGOUU5RQotOjEwQThEMDAwQkZDM0YzRkM4QjM5NDgwQ0JGRkQ4MEYyMkQ1NDJFODM4RgotOjEwQThFMDAwODU3RUJGN0EwMUFGQzRGODBFRjNGQjBGQkM3NTAwRjc4RAotOjEwQThGMDAwMkJFMTk5NkUzQTI5MDc4QTI4QUYyREU0M0QyNzcyRTBCMwotOjEwQTkwMDAwOUE2QjY4N0ZFM0ExRTM2OEYzRkVCRjVGMjRFQ0ZGMjI0QwotOjEwQTkxMDAwMDg5M0REMjREQUU3Q0JERkIzRUQ3RTFCQkZDNkIxMDhCOQotOjEwQTkyMDAwRTVFRDc0MUM5MDA4MUY2NTkzMTNGN0UzRkUwQzdFMjU3QwotOjEwQTkzMDAwMDNDRkNCMDQxM0YzRjY1NkZGNzQxNjdEMUYxQTU3NDg0NgotOjEwQTk0MDAwNTQyMjVEREUzQTUwQTRCNzU2MTY5MjJGOTk0OEI2QjBGRAotOjEwQTk1MDAwRkFDNjgxNDBCQ0Q1MjBENUUyRDM5MDhFN0QxMkQxNTE2QwotOjEwQTk2MDAwMUFBNzUxQkVENkVBN0ZGN0RGMUYxODI2NUZDQjhFM0ZBRQotOjEwQTk3MDAwMEU5NjE1OEJFMjlCNURDNjc0Q0QyOTRGQ0E0MkM5NUYwNgotOjEwQTk4MDAwMTYzOUUzRjYyMkFFRUJGNUFGMDdDM0VEQjE2NzYwRjQxRAotOjEwQTk5MDAwRjE4RkQyRjEyMEUyRjI5RjVGODRGNjRCMTdBRTAxOUU1OQotOjEwQTlBMDAwMTc0Nzc5N0E1REU1QkNGQzQ2RDE5NDQ1MThERkU5OEEwMgotOjEwQTlCMDAwRjA3MjcxRjhDODc5MkQyNDY3MTNFNEZGNUJDMzE4MEU5OQotOjEwQTlDMDAwRjEwODdCRkRFMjFFNDk2M0ZDODVDM0M4MEJFRkZDRDc5MQotOjEwQTlEMDAwMkJGQjI4NEZGRTlFRjBGRUYzQ0Y0MEZBQzQ3REU0OEZBMAotOjEwQTlFMDAwQkJFN0ZBNkRBRUZCOTNERUQ0MUJERTJGQTJGNUFBQjc1MAotOjEwQTlGMDAwNjM3QzdBNjJEMkNFRDc3NEM3NDUyNkEwRDY2MEYzOUIxQgotOjEwQUEwMDAwQzQwOEUzNjc3ODM4RUQ2MjY4NDVCNkE5QkNBQ0I3MUNFQQotOjEwQUExMDAwRjdDOTZCNEJCNzhERTFFN0ZEMTdFQTg3Qzg2RTk3MjkzOQotOjEwQUEyMDAwM0U5RDBGNUVBRjlEOUU2RkJFNzZCQ0REREJGRUFFMDgyOQotOjEwQUEzMDAwQkY0N0Q1MUIxN0YzRkE4MzFFNDRGQzk2NTFGRTJDNjBDQQotOjEwQUE0MDAwRkU2Q0E3QkYyRjY3M0NFQThEMjJFRUQ3NkNBRjU4OTRGRgotOjEwQUE1MDAwQjgxQ0U3QTU5ODczMEYzMjdDREM1QjFBQTU3RDkwRkZDQwotOjEwQUE2MDAwQTJEQTRCN0QwRTdCQzNDRTY3NTNDNDdFQ0U1RjlBMjJBMwotOjEwQUE3MDAwQjlBODY4NjZENzE5MTgyRjdBNUVDNjE1MDUxNTNEM0IyQgotOjEwQUE4MDAwMjVCNEU3RURGQjIwMTBBRDE3NEZFNUYzQzU3OTA1ODA0MAotOjEwQUE5MDAwREJDNTc4NUVFMUI4NjNERTEwNzNGOEMxNTA5RTg4RkRCNwotOjEwQUFBMDAwREIyOUEwRjdCNEYwQUNBMUY0OURERkM1RjNEMDYzNTc2OAotOjEwQUFCMDAwRjBGMzREMTM5NURDRjQxRTdGOTlFRUUzRjFBRjUzNEJBOQotOjEwQUFDMDAwRTc3Q0VERjNDNTNERUY4QUE4QjQ3RUE2RThBQkY3RTJEQwotOjEwQUFEMDAwM0Q3NzFENTY3MTEyRTMzMTAzRkU1NDE3Q0FBQjBERkZDQgotOjEwQUFFMDAwRTg4M0NEMzRGRkQxRTkzNzQ1NEZEMDNEN0ExNTI5N0QzNAotOjEwQUFGMDAwM0EyRUVGN0NFREVFNDhFRDBBMTI5RTJEOUVDRkUwRkQ0MgotOjEwQUIwMDAwN0U3OTk4RUI5QjlFOTRFRjM2RkM2RTNFOUREQUU5QzcwQQotOjEwQUIxMDAwN0Q2NzhDRUZBQkVEN0Q3ODMyOTRCQzNDRUNCMENGNzVBQgotOjEwQUIyMDAwRDMyMjNFOUE5MkJDOTRFNEMwNDA1OTYxRjcyRjBDRTJDNAotOjEwQUIzMDAwMkI0RjFFRjMxRDExQUU5N0E3MThBQjc5QkY5Mzg2Rjc2NQotOjEwQUI0MDAwQ0JEQTc4RjlBMDRCMTZCRjE3MjExMzQ0MzhGQzhDOTE0RgotOjEwQUI1MDAwMTNCODJFNkVFNDcyRTJFRTM1QkJFOEJENzI2M0RGN0NBMwotOjEwQUI2MDAwRkVCREJGMDVGNUVBMUQzRUI4MjI5N0RGQTgyREMyRTM2MgotOjEwQUI3MDAwNDE5M0NEQ0MzQUQ0MUI5MzUzM0U0MEZCRjRGNjg4NDEyRAotOjEwQUI4MDAwRUZDNzVGQzZGMUQ0MzUwOUUyMzhFQzY5RDgxRkZCQ0ZCNwotOjEwQUI5MDAwOUU0QTk1RjREMkQ4NTJBMEZCOTJDNkFFMDFEMkRCNjM5NgotOjEwQUJBMDAwNkIyMDZEQjA3MkQ3Q0VCOTNCRDFCRTU1QUIyMThFQUUwNgotOjEwQUJCMDAwRUJERDk1Mzc1ODY4MEY2Q0FBMDAxM0Y1QjhGRjQ2QjY2MQotOjEwQUJDMDAwQzA1ODdERDVGMEE1MzE1MEJDMjlCNThDRUU2OTU5Q0I2NAotOjEwQUJEMDAwRDYyNTUyNjNBREQxNDBGNkMzRDExODJGMDcyQUY4MzlENAotOjEwQUJFMDAwOThBRTMzMTU4MkMzQkU3RjlDRUM0RUE2MUZGQ0I1RkQwQwotOjEwQUJGMDAwMjY1RUZENjVDMDE1RDQ4RjdGMkVBN0FCNzE1NzNEOUQ5NgotOjEwQUMwMDAwNTNFQjFBRjMxMERENEI2MzVEMDMzQ0RFNjlDN0E1MTVGQQotOjEwQUMxMDAwQzY1RjZDOUNGNjJCRjQ5Q0ZFOTUyM0ExRTRCNzlERkNDQgotOjEwQUMyMDAwQzBGODkxRTQ0QzE3RTYxM0U0QzA2NzY3OThFM0YzMEVBRAotOjEwQUMzMDAwMjFFNzA2RkNGMDI5OEE5N0I0RjhFODNFMTc2RkZENjUxNgotOjEwQUM0MDAwMDJGRjc3NUI0QkZFRTEwQzIzQUI2RkVDRUYwNzhCMEM0NQotOjEwQUM1MDAwOTc3RkEzRTIwMzk1RTZCMzQ4QkUxMTc0QTQzQkIzOTM3OAotOjEwQUM2MDAwRThGRTE3QkMxOEY0NzQ1QTk2MTc5NDNCQ0VCM0RDMUI1RAotOjEwQUM3MDAwRUY4NUM5ODg2N0RCMkVBQUU1RjY4QzdERUU5MUUxMjE5MAotOjEwQUM4MDAwNzMwRkZCQUVENzA1RTg3RUQxRjE0REI5RUQyM0I1NDA4QQotOjEwQUM5MDAwRkJBOEFCQzhGQzY5MThGMzBENDQzRUZGRDc5NzJGMjFFMgotOjEwQUNBMDAwN0Q5RkVGREVEQUJCMjM1Q0NFREYyNTU5OTUxRDQ4OUZFMwotOjEwQUNCMDAwNDlGQ0ZFMTk2RkJEODNDMjVFNjRGNjIwRjFDRDI2OEI4MAotOjEwQUNDMDAwREZCQkI1ODk2RDdEMUU0NUJFQkE5RURGRjNDN0RFRjNERgotOjEwQUNEMDAwNzMwRTA2RDA3OUYxRDgwRENCQjQ1Q0VCRDUxQjU3Q0VGMwotOjEwQUNFMDAwQjdFRTgyNkE1RjMyNTdCQ0E1NTZEMEFEMjRBRUNGRjcxRgotOjEwQUNGMDAwRjFFOTgzRTlCMDQ3OEI2QTgxRUVGRkQyMTk3REQwRjY4NgotOjEwQUQwMDAwQUQ4MDVFNEFCQURGRDg1ODUyODk3MUExNUI2RjU0MEQ4RAotOjEwQUQxMDAwN0M3RjVGNjVBRkI1MTBFNzJENDFFRjgzOTgyM0EzRjRFNwotOjEwQUQyMDAwOUE3ODFFQkQyMjNFQ0VFODc2OUNGNzJFQUU3ODk0Q0U2MQotOjEwQUQzMDAwQzNERkZFNTQwMDAyNzU3ODNGQTlFN0Y3RDkzOEU5MjM0RAotOjEwQUQ0MDAwNjdFOTZDRUJBQjdDRjMyQkY0NzkwQkMzOTdGM0Y3ODBEQgotOjEwQUQ1MDAwMzA4ODMzMzg4RjIyMEIwQ0JBMUZEOUU4MjUzQkY0QTg3MgotOjEwQUQ2MDAwMTU0NEREMEE0NjdEMkZENzJCRUQyMTc4MzA4RUY3Q0NBOAotOjEwQUQ3MDAwRjJGMkE2RjA1NEMwRkI2NzM1QTU5N0VDNzU0REFGQTI3MwotOjEwQUQ4MDAwNzI1MTc1QTI5QkVDRjM2OURCRjU1Q0ZBRTE1MzkxNEFEMQotOjEwQUQ5MDAwOTdERjI0RTQ4OTUzNjlDOTFCOUFCODlGNTY4NTI5MzlERQotOjEwQURBMDAwRDZEOUMxMjI4NURCRDNBQzI5QzU3M0FERTFFNUVEQzlBOAotOjEwQURCMDAwRjJDNzlCNDJERkU4RDk3RDMyRjEwN0M5MkU0NjhGNzA3QQotOjEwQURDMDAwQzVBMkI3NjRDNzdEOUM2MUVGRjk2MjJGM0QzREU1OTM1NQotOjEwQUREMDAwQTVFNzNBQTRBNzIzQkVBMEQ1MjczNUE0OUZDMUVDMjQ5QwotOjEwQURFMDAwQjJGQkVCMDE5Q0Y3QTY2RkQyMkM3RTBGODM2MUY4MkM4RgotOjEwQURGMDAwMDc3RUNCODVEREE3N0NBMEQwNzlEQkJCOTY3NkQwRkUyNQotOjEwQUUwMDAwNjMyQ0VCMDNGMzdBRDkzM0U3QkREMzA3OEI3ODVFNzhGNQotOjEwQUUxMDAwNTc1MTYyNDk4NEYyNzI4MUVFMTk1RTI3RTRDNjc5RjJENQotOjEwQUUyMDAwQ0Y4Mjk4ODcxNTA0QTZFNzkwOEYxNkZCRTBDMTFDNzRBQgotOjEwQUUzMDAwMkQ4RjcwM0NBNzQzRTZFNzIyQjNGMkNGRjc3MTI5RjdENQotOjEwQUU0MDAwN0RBMjc2RkI4M0MyMEY1MEI4MUNFNkYzOUQ2MjBFRDA0NAotOjEwQUU1MDAwNzlEMjgxOUIwQUQzREYwMzZDNkVGQkQwMkU1N0UyNUM2NAotOjEwQUU2MDAwNEZGNzE5RDAzRTkzRUU3RjRBQTNERUREMTQ1QjQyNzhBNAotOjEwQUU3MDAwQkYwRkY1MjlEQTU2QjU1QzRGRkE1M0RDNEYwQzg2NDQwOAotOjEwQUU4MDAwRjdDQTg2QzRCRDFCRjdBNThFM0M4Qjc2Q0ZEMTFBMDVCOQotOjEwQUU5MDAwM0QzRTEwQUM0ODVBQTg1RjhCQUJGQjJDMDlGNTZDNjlBMgotOjEwQUVBMDAwOUFFMkM3NEM4RjU5ODg2N0UzQUU0NTA0Qjc1RkU5NkRGNgotOjEwQUVCMDAwNDE3RDk5NTYyMDg0RkE3QzAwOEQ0OTY2QzczRDEyN0VGQgotOjEwQUVDMDAwQTQwM0YzNURGQ0I1Njk1MDY0RENENzAzMzhFRkY3MzdCMgotOjEwQUVEMDAwNjAyRkQ5NTk3RUE2ODdDOTZFNTJGQTVBNTAyRUI1RDcxRgotOjEwQUVFMDAwRUIxNEQ3MzlFREM2M0U3MEVFRUZEOEI4QjdFMkI4MTMyMQotOjEwQUVGMDAwNEFEOTc4NDY1NjdGN0FFRDhEN0M3NjA2RDNCMzIyMkZEOQotOjEwQUYwMDAwNjc0MTA3RUVERjY4MjlCMUYyQzNFMUVEMUQ2ODZGN0U4RQotOjEwQUYxMDAwNEIzN0JGNEVGQzkzNjc5RkMxRjhFMjlFNDhEOUU4RjlEMgotOjEwQUYyMDAwRTJCOUIwOUIyRjA2RkQyN0MyRUZCQUFDNEUwODdBMzBDQgotOjEwQUYzMDAwMkVGRDBEODNGQkNBQkQ3RUMwRjk5RjdCRUNCRTNERjdBNQotOjEwQUY0MDAwMzA3Q0M4QTg0RkM5NzJFOUQ5RjMyNEZCQkUxQ0ZEQjAwMAotOjEwQUY1MDAwQUM3Q0U1ODFBOTJBQ0FCRDVGNEQ5MEYxRUMzMEYyNTk3NQotOjEwQUY2MDAwMTRGOUU3MURGMDkxN0ZFODFERDgxRjlERTE4MDY3NjcwOAotOjEwQUY3MDAwODRBRjEzRThGMkJGRDZFN0YwM0Y1RURFQzNDQkI2RkM4QQotOjEwQUY4MDAwRkJDQTVERUVGMjk3NjFDOTM4QjRCRkJFN0NCQjFGRDI2RAotOjEwQUY5MDAwMTJGRURFMjlGN0JFRjk5MTA4Q0YzN0ZGMEFBNDNBMTA1NgotOjEwQUZBMDAwQ0Y2QkM1RjlBNDZCMUU5QkFBQTJGRDc0RTUwQ0JEMTI2NAotOjEwQUZCMDAwRTM5RjM2MUNDRjBBM0RGRDM2RTM2M0MzMjEwRkFGMEE4MgotOjEwQUZDMDAwQTc1NUNDOTc3QTdERkI4Q0NGOUMwREQ4NEZCQTYzMDJFNgotOjEwQUZEMDAwRkEwRkM3NDA0RTNERkVBNTJFMzc5QzIzQ0RDMzBCQjdCRAotOjEwQUZFMDAwN0RERTI4MUYxQ0NBMTYyOUE3MUZFQ0M1ODhEQjBGNzYzQgotOjEwQUZGMDAwQjJGN0IzMUY0NUZCNzg1NkY2RjdEN0Q5Nzk2NjI3REI0QQotOjEwQjAwMDAwRUY5RkYyRjQ3QjhEODYxNzUxMDNBQzUyN0ExQUE1QUFGMgotOjEwQjAxMDAwNkNEQzJCRThCN0NDODk2OEZGRUQ5ODlGQzFEQzc1NDdFNQotOjEwQjAyMDAwQkRBRTAyRUIzNUZBODZBOTM3RDI3QzU2ODdFRThEQTJFQgotOjEwQjAzMDAwQkZBODRGODI0NEFFRkI3N0NBNDJDOTMxRDE1OTQzRUYxMgotOjEwQjA0MDAwRTEwMUYxRkI4MjBFQkQ2MkRGNjNERkJGMDhGRDdDMDEyMQotOjEwQjA1MDAwNjBGQjdCN0EyQUM0MDdFNEZGOTFEMDVFRURDOTk4OTUyNgotOjEwQjA2MDAwMTgzRjU2NUNGQzUxODRGMTE0NjZGN0FFMTJGNjY1NTEzOAotOjEwQjA3MDAwOERGQkJCRDcxRjc0N0E5NEFGRUI3QUU4MjNGQjNGQUExMgotOjEwQjA4MDAwODUzMzMyOUU2QkFENzNFNzNGREQ1OUY0NDU5MkJCMkJBMAotOjEwQjA5MDAwRjdGOUM5Q0U1QzA5QzZBREY1MzM2OTFEOTIxRkVDRkEwQwotOjEwQjBBMDAwNzVBNzUzOUNGOEZBMzIyMzZFQTE1QzgzQjg0OTZEM0RCNQotOjEwQjBCMDAwN0NCN0VBMDMwOUQyMEUzRkMxMkFBNTVGQzVGNUI2OEE1RgotOjEwQjBDMDAwRTkwRkU3RkJFQjYyQjJGMTQ2OEVERkRGNjQzRkZEQTBFNAotOjEwQjBEMDAwMTlFMTFBQzQ4MzhGOUZBN0Q1NTlEOTMxQ0YyMzNENTI4NwotOjEwQjBFMDAwMjM4RkNCMTlDNTE3MEZCMzdGQkYyRUE2RDIzOENCRDY2RgotOjEwQjBGMDAwNEQyOUU2RkUyMUI3REM3QzU3RThBOTlGM0NGQzJEOTU0NQotOjEwQjEwMDAwRUVBM0ZBRUVBQjE3MjAxRTU2M0MyRTgzQzZDNjdERjc4MwotOjEwQjExMDAwRTEwODY0NDg3RkE1NTVENDVGNTc2RDk3NzNFQTc3Q0NGMwotOjEwQjEyMDAwNzRBMkJDOTRBRERDN0Y3OUQ1QjY0MDdBMzE2QjdGRDUwMwotOjEwQjEzMDAwQTNBRjlGMDUwQ0JFNzc1QkZCRjc0Q0M0NzVGMDVERUVDQgotOjEwQjE0MDAwNTcwNEFCRUZBQzhCRDhGQkFCMTRGOEJGQjlFQ0E5Q0Y2RAotOjEwQjE1MDAwNDdCOUJEN0RGODQ3NDU0REI4QkVBNTJEM0JCRjQ4RkQ1RAotOjEwQjE2MDAwRjY1RUVBMEYzOEUyNzM0QkEyRkM3QzJDQUJDN0ZEQTA2NQotOjEwQjE3MDAwREY5MUQyNTM3MkM0RUY2Q0JGRkJFMUVGNDgxQ0JFMURFMAotOjEwQjE4MDAwRkU3NDEwRTFEQjcyQkY5QTY0NzBBQ0RBRjIxRUM5OTNGMAotOjEwQjE5MDAwMDU1QkJGMTc0NTNDQUNEQUUxOEVEM0FERDhGQTYxMDc0OQotOjEwQjFBMDAwRTZBMUFDOTBBMTdGMzFGMkIzN0M4Q0NBNDc0REFENUY3NAotOjEwQjFCMDAwMjZCOUNGQ0Y1N0FGMjQ5MkIwN0EzRkY4RURBMkRGQjBENwotOjEwQjFDMDAwRUY2RkM3NjQwODMyRDFGQkY2QkU4M0VBRTM1ODRFODZDMAotOjEwQjFEMDAwNTNCOEMzNURCNUMzMkRGNzU2NkQ3OTlERjIyMjc0MUYyOAotOjEwQjFFMDAwRjQ1NzlDOERGOTAxNkVCRUY2RDY2N0VCNDc0NUZCNjlCNwotOjEwQjFGMDAwNTVFRkJBRjdEMEFFNUNCNUZEOUQ1RkEzRkM1OEU1OTE2NQotOjEwQjIwMDAwOUY2RkUzN0ZDQTg3RkFBOURCQTI5RUZCNjlCNjE0OTZGQgotOjEwQjIxMDAwM0ZCMUUyN0I0N0VGQjVEOEI4ODdCN0ZERUU1RUNDQjM2MAotOjEwQjIyMDAwQkZGQUEzRjdFRkZENjdCNDE3OUUwQUVBMjhGRjU3N0QyMAotOjEwQjIzMDAwRjc4NTI4MzhGOEYxMUVCMUZFREU5RDA0NTYzOUFCRjdDQwotOjEwQjI0MDAwRUU3RjA2RDI3OEEwRjVERDI3N0YzQjE5Q0ZDOUJERkI4NQotOjEwQjI1MDAwQzgxRkM3MTlBQ0ZFRjU0RjlFNDdGN0YyNUZGRkMzMDU0NQotOjEwQjI2MDAwRTM4N0IzQUI5MDVGRDMwMTI3NUM2OUEyQUJCMTQzRTI0NAotOjEwQjI3MDAwQzZDQjEzRTJFOUExQzdFMTQ3MDY1NEI0NzdGRjIwNDFFQQotOjEwQjI4MDAwM0ZFQUI5OTVCRDFGQUFCODNGRDk2MzQyM0ZFMjY3RjdDRAotOjEwQjI5MDAwRjZEN0Y3N0M5NTk1REY2MUY0MDlFNEEwMEY5QkZGNDQ5NgotOjEwQjJBMDAwMUZFOTZGMjYyNkQ5NzNFNUY2RDcxNzIxQkNBQkEwOUZGRgotOjEwQjJCMDAwRjRFOTEwN0EzRUNGRTgzOTMzNEI0RkVGRjdBMzcwNENFNwotOjEwQjJDMDAwQzU3REMxQUE4NzE5RkRDRTQyM0EzMkZBOUQzNTk0N0VEQQotOjEwQjJEMDAwRUZFMDdGRTYwRUE1REZFMzUxRjdCRDA5NDdFMUVBRkJBQQotOjEwQjJFMDAwQ0E3MTYzQkE3RDZDQ0UzQzg4NkM5QzYxRjg3QjUwNkNGMwotOjEwQjJGMDAwNzkzMDEyN0VBRjkwMzg1QzVENTFGM0E3MjhFRjBGNkY2NQotOjEwQjMwMDAwMkIxQUE0RUY2MkE0RUZGNzhFNEU0NkUzRUQ0RDdGRkZCQwotOjEwQjMxMDAwMTcxMTBGRkQ0RjA2NzRGQ0ZEMTI1NzNERjkyMkFEQjMxNgotOjEwQjMyMDAwNzc3RkY4OUM2QTUwNUMwN0EyRDI2QzU2ODZDMTlGRkQ1RAotOjEwQjMzMDAwQzBDQTJCQjkwRjFDQUU3OUUwRkYyRkZBMzU2QjdGMEQxOQotOjEwQjM0MDAwRUIwMkY3OTk4QzZFNTRERUMzRDYxREQxMjE3RDYxQTMyQgotOjEwQjM1MDAwODE3QTMzNUQ0NkYzNUU5OUU2RUI2MTY1N0FFN0M1NzhGRAotOjEwQjM2MDAwMUY4NTE3RUZGRTYyRkIzRUQwMkMzREYxQkU4Mzk1REJCRgotOjEwQjM3MDAwNUY1RDg0N0M5NzhGOUVGNkZDNzU5Q0ZGMUNGNkZEMDEzQgotOjEwQjM4MDAwRjc3QUY1RDY1RkM5RDYyN0U5MjkyRjdERDMzQjdGODE5MAotOjEwQjM5MDAwQ0Y3N0VGMEYyODc4M0VFMzVENzFBRkFFOTdFRTU5RkNBMwotOjEwQjNBMDAwOEI3M0YzQTM4QzQzMURGN0YwQzc2MDFDNEFFMDI5M0Y2MQotOjEwQjNCMDAwN0ZGMDc1M0VEMkZDNDY4QkJGNzdBMjg2OEI4RjZDM0NBQwotOjEwQjNDMDAwMUUzRTk2NUJGRTRGMkNFNjcyNjMyNUY0MzRBMkU5RUMzOAotOjEwQjNEMDAwQjU1NzE0NDg1QTEzMkJCM0YwMUU0NkZCODJDMTdCRjhCNQotOjEwQjNFMDAwQkIzMkY5ODUzQTdBNzc5MzFDRjdDQThCOTU5MEZCRjdCNQotOjEwQjNGMDAwNkZENTE2NzM3QjcxRTU4RTlENjdBMTVDM0JCQ0VCNDdGNwotOjEwQjQwMDAwQzQ5RjJCMUY3RTU1QzU3REM3OUUyRDNGNTBGQjZBQjM0MQotOjEwQjQxMDAwRUIwMUY1NDNEQTgxRUZDM0RGREY3OTE2OTcwN0I5RkQ1QQotOjEwQjQyMDAwNUU3M0M1N0M1NjNERTFFRTdGRDVDM0VGQjlGQTVGNjEyRgotOjEwQjQzMDAwRjU5MkJEMzBEMjM4NkYyQkU2QTUzOERGQjdGN0Y5RTlDMgotOjEwQjQ0MDAwMUVDMkI3N0JFNUM2NUM3NkYwRTQ2MkJGQ0IwRUVFNzgzOQotOjEwQjQ1MDAwNkVEMTZGRjAzQ0VDQ0NGRDIxQkE3RjcxN0JBQjM5RkUzNQotOjEwQjQ2MDAwMTZCNERGRjZGQjQ1N0NEMUZDMUREQUE1REI5RjBCOTEwMgotOjEwQjQ3MDAwOUY2N0ZCRkVDRjUwM0U5MEREREY2MzFFN0NDRTc5REUwMgotOjEwQjQ4MDAwNUExMDYxRkRDREU5NEJDQzk0OERBMTcyQTNFRTAwREI4NwotOjEwQjQ5MDAwRUYzOUY4RTBGQUU3MUFDN0EzRENDN0ZEQjE4MUJGNUY1NwotOjEwQjRBMDAwNEU4OUQzMzkyQzM5QkE4OEYyQ0M2NUREQTcwNzczRUEwNwotOjEwQjRCMDAwNkZERTlGM0ZDQ0Y3OTM3RUM2OThDRUZCRENDRjNERjY4OAotOjEwQjRDMDAwMUZCNDdGRUY4OEZCNzJFMkUxM0U4MTdGRkJGNzNGRDkzQgotOjEwQjREMDAwRUZENzRCOUM2RkFDNjc3OTNDMjRERkZBREFEODFDOEIzMgotOjEwQjRFMDAwNTczMzU0REVEQTVDMTdDN0I4Q0ZCNUM1RkNCRTlFQjE4MgotOjEwQjRGMDAwNkYxODEyOUUyRDk5REI2NzRDQzdGOTE3NDMyRkUwNzkxRgotOjEwQjUwMDAwRkZEQjlCRjVCODMzM0U1NDc2RDg2Q0MxN0E2N0JGMDkzMAotOjEwQjUxMDAwNzFBQzg3RTNFMjdFNkRCNEUzNUFDNUZDRENGMzkwNzE1NQotOjEwQjUyMDAwNkI3QjA5MkY4NThDQUI5REMwQjhCNzlFODI3MUMzMjdGQQotOjEwQjUzMDAwODA2NzgwQ0QwNThERUJDREIzRjI4RUFGNEVFMzc5NjM5RQotOjEwQjU0MDAwREVGMTkyQjYzRTEwRjEwNTVBN0FDM0Y4REJGQ0EyOUZGOQotOjEwQjU1MDAwQTVDNTg2RUJGNzk1ODE5MkExN0JBQkIzNzkxNzY5QTk1NQotOjEwQjU2MDAwNzMyNkM2RUYwNkNGMUIyNzM0Qzc3OTYzRjY5RENFMUIyMwotOjEwQjU3MDAwQjc5OTNDMEY5NkI1QTM3NUQwMjVGQzEzMThDRjVDRTZBMAotOjEwQjU4MDAwODBGNzA1MjE5RjAyMTVBOTE4REE1RjlENzlFMjExQUZCNgotOjEwQjU5MDAwMDgzRUVGOEMzNDY4Mzg5OTlERkFGNEUyQkU2MUY0ODY3NwotOjEwQjVBMDAwQjJFNjlCMzM5Q0U3OTIxNTNEMjNCOUUyQzhFNkVCNzQwMwotOjEwQjVCMDAwN0Y1NkJFRjZERUY4QTIwRDdGRTdDRTdGODJBQUE5OTg1RAotOjEwQjVDMDAwMzc5QjgwRDYxQzcwNkUxN0VCMDdFQjU1NjJCRDU4MTI4NwotOjEwQjVEMDAwNUExQ0Y1RDQxODlGQTc1REVFMTQ3RUExNTc2RTdEQTU2OQotOjEwQjVFMDAwOTNFMkY2NzlGMEI0NDNEMEYzMDU3NENDOTdEMUY2NERERAotOjEwQjVGMDAwQzNGODZGNTdDNDQ3NzJCMjJCOThGQjFFRkJGRjJDRjZBMwotOjEwQjYwMDAwQjlFNEE0OEFFNzFGQzkwRkJCOEZGNjhEQzZCMTk3NEQ2OQotOjEwQjYxMDAwQkMxRkU5RDY1QTk1RkM2MDkxRkFGRDU0M0U2QUZBQzhGRgotOjEwQjYyMDAwRkFDRjg3MUZGQjNFODNDMTcyMUVGRjUzQkRDRUU5QkIxRAotOjEwQjYzMDAwREJEQzQ2RjlCMUQ3NEQ1NThERTFGMjJENDI2QkE2QzU0NQotOjEwQjY0MDAwMzE2RjQyNUI3Mzc2MUNDRjZCODc2QUY4RUY2MUQ4MzAzRAotOjEwQjY1MDAwMEZFMjYxMDZERjg2M0NGQ0YxM0Y1OTVBREUyRDAwODA4NwotOjEwQjY2MDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkVEN0RCMwotOjEwQjY3MDAwMEI1QzU0RDc5REYwQjkzMzc3RUUzQzgxM0IzMEMwRjA4MgotOjEwQjY4MDAwQkU4MzEwRDE2MjNBMjhBMjM2M0UyRTBGMEQzRTYyNDY4RQotOjEwQjY5MDAwQzRBODA5RDZEMTNDNEEyMjE4QjQzNkExMUIxQjJFMDJERAotOjEwQjZBMDAwODJGOEMyMjY2QkNEQUU0RDQ3QTIyRDZERDMxNjUzREE2QwotOjEwQjZCMDAwMzU4RkY2MUI0Qzc0RUQ2MzVCNjI2Q0UyRjZEMzA2MTNCOAotOjEwQjZDMDAwMzdBQjU5RDM2NUI3Q0RENkVEOTczNkRGRjlGRkNGQkQ5MAotOjEwQjZEMDAwQ0NCREMzMEM2OERBRjRCN0ZCN0Q0QjdFQzlDOUI5RTdCMgotOjEwQjZFMDAwRjUzRkZGRjM3RjlGQzc3QzRBRTQwODk5NDlDOEVFMkREOAotOjEwQjZGMDAwODQwQzE1MTM0MkY4QjA4REI4MDhEOTU3NjJCMjQzM0E5QQotOjEwQjcwMDAwMjg0RjRGMUFBNkU5ODdGMEI3NjA2QzZBNkRGRURCMTkwNwotOjEwQjcxMDAwNTUzMzIyRjlDRUJDNDQyRTQ4RkJEOTk5RjczODE5QTZFNwotOjEwQjcyMDAwQTlGNTgzMTYxMkEwRURBRDNDOTFGQjY5RUE5NkM5NjBCQwotOjEwQjczMDAwOTI4N0U2RTU1QjdDNTYxRjRENUQyNEMzNTQ0QURCOTUzQQotOjEwQjc0MDAwREZDMkVERjA4REVEN0YzMEU3MTFFRjVCQjQ1REJBNENGOQotOjEwQjc1MDAwMzIyMEVEMkMxNzMyNEMzQTc4N0FCRUQwNDQwMjc0OUNEOQotOjEwQjc2MDAwOEU3MjYxMkRDMDY5MEQ3RjlFNDgwOTkxRjIyNzQ1MTNBNQotOjEwQjc3MDAwMjFBOUY0N0I1RDhGMkNDM0ZDMDhDOTA4MjRDMDNDNDk3NwotOjEwQjc4MDAwNDY4REFFNUUwRjQ3RDZGNDE3OEYxREZGMTBFMDg3QjZDQgotOjEwQjc5MDAwREZBRDk2RUY5QkYzQ0VBMTdCMjlGQ0EyMkM5NTk4Njk5NwotOjEwQjdBMDAwMzdGQjA2QUY5MkZDNjkzNDFGQkUyQTczMzAyRjBGOTkwNgotOjEwQjdCMDAwNkUyNzYzRkI4MTdBM0U1QTJGRDExQjI0MUIwMENFRUNFRgotOjEwQjdDMDAwNjExMkE0RTMyNzE2MEQxMzk4QkY0MzIyOTI0OUMyN0U0QgotOjEwQjdEMDAwMTBGRUE0RDkyMzQ0QTFGNTkyRTYwRTdCOTU2OUJBN0VBQQotOjEwQjdFMDAwRkU2MDhFMDlBNzE5RTY0OUQ3RDFEMTVDRUEyRjQ4MjExRQotOjEwQjdGMDAwQzRENjNDREY1RjQwRDcyNTgxMUYyMjIyRUQyNzQxNjI1RQotOjEwQjgwMDAwRjg4RjZFRjdDRjQ5MEMzRjFBNUU3QUNBNkY0OTBBQzZBNQotOjEwQjgxMDAwRTg3Rjc0N0Q1QkNFQTRGMTE2NURCRUJDNjcwREUwREZGMgotOjEwQjgyMDAwRTIwOTJBMzBGRkM0RDkwQzJGNUE3OUEyMzQ0QzY0M0E2OQotOjEwQjgzMDAwNkUyMjYxRjMyNEE1NDQzRTQ2OTM4NDUyODVDMDM4NzQzOQotOjEwQjg0MDAwNDg1OTNGOUYwNzU0N0E3QzQwOUQwRkZDQzk2OTU4OEYyNwotOjEwQjg1MDAwMTBGQTI5NDE1RTc0RDU3QzJCRTQ3OUYyNTYxMTJCRkY0NgotOjEwQjg2MDAwRDA0NzcwNDFERkIyQTk3OUYzRDg3Q0JDRjk0Qzk0RUU5MwotOjEwQjg3MDAwNkEyMUU0MkRERDdDNkREOTc0RkU1QUJGRjRERjFFMEIwNgotOjEwQjg4MDAwQzkwMEZDN0U1NEJDMDlERTYxQTQwN0VERkIzNjc1RkVFMQotOjEwQjg5MDAwMTZDRjMwRTI2NzBDRkU4QTE5RkU5Q0M1MEM3RkNFMjhCRAotOjEwQjhBMDAwRkNFRDU1REJFRkZEMkY4NkJGNTEzQzcxQTYzNTQwODc3RgotOjEwQjhCMDAwRDE3OEQ0RUE1NzhDQzJBRDIwNUREMjc2ODQ3QzBBRjI2RQotOjEwQjhDMDAwODE2QUUwREYxRTNCQ0IxRjEyRUZBQzA2RkUwMEJFOUE4MgotOjEwQjhEMDAwODA1RjA4QzlBNDREN0FCODJFMjhDRjE1NDVFQ0RGN0FEMQotOjEwQjhFMDAwMUY5NTA3RkE3QzUwOTMwRjZDNUM5N0NGNUY0RDI4M0RGNgotOjEwQjhGMDAwMTM5Rjg5MUNBMzI4RUQ5QUFCNzg2MUJEQkE5MTUzMjI5RQotOjEwQjkwMDAwRkRGRkEzMzgwOUVCNzc0QTgyODlGQjI0NERDRjJDNENFRAotOjEwQjkxMDAwMDdCOUQ5NjZFQkIxQzE3Q0JCMkMzREQ4NEY1QjhFNDlEMgotOjEwQjkyMDAwRUM4RDIxREY0RUFCRjMzNTM3M0I2NzFDOUQxMTFGOEYyQwotOjEwQjkzMDAwNjY4MTA0NjNGMUZEREJBQTdDNkIxQjdDRUE4Qzk5RDJFNwotOjEwQjk0MDAwMDcyRjA5OTI5REMyMEI0Q0ZGQjZCNkJFRjlCNDNERTk3NAotOjEwQjk1MDAwMUZGMkY5NjA5QzQ0MUNDN0E1QzJFNTJBMzQ5MTU2REY0QQotOjEwQjk2MDAwQzQ3MDFFNTdFOThBNkZCNjhGMEIyNzBGNzBDNjkwMzNDRAotOjEwQjk3MDAwMUE5Q0VEMDBBNzI3M0U5Q0NFOUMwQUE0NTNCRUQ5ODVGNQotOjEwQjk4MDAwRTMwQzhBMTI1QjBGNEI5MzZEMjM5RDlGQUIzNTQ5NkE4NQotOjEwQjk5MDAwQTVFOTJFQkVBOUFCMEVEMjIxMEI1MTY4MTUwQjkxQ0Y5NAotOjEwQjlBMDAwNTQ1MEI4Rjk2OUQzMDlBMUZENzQ1QzlBNjU5QjA0QjQzRAotOjEwQjlCMDAwREZEQzQzMDIzQTM5MUY3NDA0MkY4OUI0M0Y1RTBDOTJENgotOjEwQjlDMDAwMjA4NTkzNzcyOTMyODBGMUFDNEEwN0RBQkE5MUEyNjRENAotOjEwQjlEMDAwNDJFNkQwRjE4MkZDMEM5MEE3Q0VBMDgwQTlENjhGNDY3QgotOjEwQjlFMDAwMjc0RThCNENDNDYyRThDNzI0ODc0MERGNDE2NzczMjIyRgotOjEwQjlGMDAwRjVFNkJCMTlERURBRTY4NjAzNTRGNjkxRUUxMjlFRUMwQwotOjEwQkEwMDAwQTA5RkRBOEIyOEJEMjREMUJDNDVFRUFBQTNGOEU4N0UxRQotOjEwQkExMDAwRDU0MjdBNzU3Q0EwOEQ5QkVCNjZGQUM3NEU2QTkzQzJCRAotOjEwQkEyMDAwRDBCN0Y5QjAzNzM4OEUzRUI2MDNERTY4QkJFNjBCQkU0MgotOjEwQkEzMDAwRUZCQ0EyRTExNUZFMTUxMzNDRUYzODkxNzYzMzgwOUZFMQotOjEwQkE0MDAwREYyN0M1QUI0REE2RjhGREZDQUU0NUZBQ0UyQjNBNzkwMwotOjEwQkE1MDAwRDU0Qzk4RkUyMDQ0NEE1RjMxMkQ3RUJCREQyRDY0NDZENwotOjEwQkE2MDAwNDE2MTI0QkY4NzBGMjEzRUJCNURCRDVERjk3NDlFOEE5NQotOjEwQkE3MDAwREZFNDJGQTRFQjQ1QjI0QjBENzg4QTRFMDk2OTY1NzI1RAotOjEwQkE4MDAwNzBDQ0JBQUU5NkMyQjQ3RDc3OTE4OUI3MDJCRDE2OTBEQwotOjEwQkE5MDAwOTAxOUYwOTJFRDQxQkVENEQ2MzVFODYwNzQ2M0YxMzA3MAotOjEwQkFBMDAwMzk2OTc2Qzk5OERBMDA4RjIwRUZDQzdCQkNFM0M5NkI4QgotOjEwQkFCMDAwMUJGMDQ5MEMzQzE2QjkyOTFFM0ZGMURGMEY4RjFFMzdEMgotOjEwQkFDMDAwQzFENDk5NTA5MzA0RjgyMzJGRUYyMkQyMzQwMEMzQzg3NQotOjEwQkFEMDAwN0Y1QTNCOERERUEzRTc1RkZEREY3Q0ZFMUE5REM0QUY3RQotOjEwQkFFMDAwQUY2OEY2MTAzRjQ4QUI2NjA1NDlBODlCQzM3Q0MwOTY3QgotOjEwQkFGMDAwODY0RDI5RTg1NEE1RDhDMkFEQTA5QTcyRUFGQTMzNEUxMQotOjEwQkIwMDAwMTFEMENGRURFMjNCMzYxNDVERkUwRjUzQzZFQjlGMjdGRAotOjEwQkIxMDAwRUY2OEY4MzQ0N0M2RDNFM0M3MDQ3QUU3OEMyNTc0OEMwMgotOjEwQkIyMDAwOEJFMDI5NDFGQ0I0Nzc5MERDMDg5RTlBNkMyMDhGM0ExOAotOjEwQkIzMDAwNUQ1QkNGRjg0QTIzNzhFQUNDN0U0RURDQTBBM0Y3MkJERQotOjEwQkI0MDAwNjI4NUUyQTZGOEQ4MDk3NjZEMEM3OTcyQUZCQkEyMURBQQotOjEwQkI1MDAwQ0EwNTUzNkM3OTdFNDg5NTZCNTQ4MEYzMEJFOTM4MEIxQQotOjEwQkI2MDAwNDY4Qzc4OUFBN0UyNjk3RUZBM0I4RkMxMzRBOTk0RTRBNwotOjEwQkI3MDAwMDkxNUM4MTUwMTdGMTVFMEFENkE0RDAwQzg4MjA4NTk0NgotOjEwQkI4MDAwMUY3QzIyODhGNDUwMjUwMjVFMzg2NUIyRTk0M0U3OERCOAotOjEwQkI5MDAwRTMyRjFFQkU1QzFDMDlDNDgyRkIxOUIxRTY4ODFCRjRBRQotOjEwQkJBMDAwNDkzMUM1OUJDRUZFQTA4NDIxQTI3Q0Q0RDZDNUU1OTk5RgotOjEwQkJCMDAwODBBRUQ4QkFCRDdDMzFEREE0RDBBQTlENUU1MzA4RkMwRQotOjEwQkJDMDAwMTkwQjY5RUEwMkJDOTM3MzY2MDI3NjVBNUEzODAzQ0JBMgotOjEwQkJEMDAwQURERUZDMTBFOEJCQjRCMDlEQzhFODI3ODgyMTNCQURDMgotOjEwQkJFMDAwN0Y3MEVENUQ3RUQ0NDNENzZGMjM2MTRBMzcyOENCNDAwOQotOjEwQkJGMDAwOEU2NUNCNjFCMEE3Nzk1MTJBMzc0QjMwQ0VBMzM2RjA5MgotOjEwQkMwMDAwNkYzQUJEMzU0OTg0RDlEQjI0OTYxRUQ4RTIwRUZFMDA3QQotOjEwQkMxMDAwRDY4REJGM0UxRkZCMzNEOTk4RENCQkQxRjk3QzY5NjU1QgotOjEwQkMyMDAwMjIwMTNCQzA3RTgxMEI4MTJFM0JCMDcyN0VENzcwMjlGMgotOjEwQkMzMDAwQzhDRDg0MUUyQjREREI3ODI1MEM3QTRDQjk2MDk3MDA1QgotOjEwQkM0MDAwREY1QjBCOTVEQjREMzQyREZGOTVCRDg4QTdERkJCMzgzRgotOjEwQkM1MDAwODcxRkYwRDA1NTQ4OTc5Q0Y2RjNCQkE3OUMyMTQyRjM3MQotOjEwQkM2MDAwM0I1NzJFMUY0OTgyN0U4RTlBMjUyODdGRjJDM0E2NEYwRQotOjEwQkM3MDAwODIzRDY1RkI2MDNGRkE4NzM2RDUzRjI0N0NEMzJDNTg0NAotOjEwQkM4MDAwM0ZGQjQ3OTQxM0JCRjkxRUE0RkY1RDA1RDM2RDdBRjkwMgotOjEwQkM5MDAwOUVFQTA4MEUwMzVFQjRCQ0RENEJFNURCMENBNEE3QjczRgotOjEwQkNBMDAwODYyOTNEOTkxNDhFN0M0OEU5RDNFNkRBRTYzRDI1QzEyNAotOjEwQkNCMDAwN0NFOTc3OEQzRTdDOTE3QTExQkUzNUU2M0QxNEQ3NjBFNAotOjEwQkNDMDAwNjcxMjcyNjQzMUQ4OTE5RDIwNkZEMDZFMjUwQTA3RUIwMAotOjEwQkNEMDAwOTZDMUNBREYzRkIwNjIzMUQ4QTE5RDc2QUQ3Q0U1NjJFNgotOjEwQkNFMDAwNTk5RjU3RkU3MDA2RjNBQURERUI0RkY2RUM4MkZBOUVFMQotOjEwQkNGMDAwMkNEMkM0RjAxMzIwQUI3NEY2NEM0MTMyOEZFQkQ2RTc1NAotOjEwQkQwMDAwOTY3RkVGRDZEOUNEMUE1RDc2MTUzMEJBN0NGOTYyNjc4OQotOjEwQkQxMDAwMzVDOENENEU0QTk3NTYwOUU4NzA5N0MxNEZENjUyOEQxNwotOjEwQkQyMDAwMEUzQjBCMTg5REM1QzNCQkU1N0EwOTA5RUJFQzQwOEJCNAotOjEwQkQzMDAwQTcwN0U5RDFFNjA5QTAxRDFENUQ3RjQ1MEFCMzYzMzQ1RAotOjEwQkQ0MDAwRkFCNzc5MDlGMjgzNEQwQTNFNzUzRkYyODdDQjBGRUNDMwotOjEwQkQ1MDAwNjcyRDY4MjIxQ0E1MTM4QkM4RkNFMTg5RTYxMTBGM0VGNAotOjEwQkQ2MDAwOERGRTNCMEJGMjE1QTBEN0Y3NDVFMjI3RTNENEI3NUM3NQotOjEwQkQ3MDAwMkZDNUY5NkM3MUNCOTM5Mjc1NzhGNEU0NTFCQ0M3OThEOAotOjEwQkQ4MDAwQ0Y1NzkyRDk3QzNBMDI3NTgxRkI2OUJGNzJCREE0MjA1RQotOjEwQkQ5MDAwREY3ODg5QkYxQkY0MTIyNTdGQjAzQkE5QkRGOUM5RTQ0OAotOjEwQkRBMDAwNTQzRDlFOTgzREEyRjVBRjcwNEQ4MzE2RTA3MzBGNkQyNAotOjEwQkRCMDAwNDdCRkI2OTM5NzE0NTg3QThCMjc2NEUwRUYyRkE2MDRGOQotOjEwQkRDMDAwNjdFQkZCRTE0NUU2MUYyRTM0QkI0Q0U0MjNFMDY3M0YwNQotOjEwQkREMDAwRjVDQkMyOTNBOTlGRDgyMjYyQkFBN0M1OEI2OTU3OEJBRQotOjEwQkRFMDAwODQ2OTc3OEI0Q0MyNTZFQUZFOTBFQkU3RUYwNTNCREJBQwotOjEwQkRGMDAwRTU0MEY4MjZBMjhCOEUxNjNGQjY2RjZGOTlDREZBRTExQgotOjEwQkUwMDAwMzQzQTlGQkEwQkU4QzI2MUQyRjhDNEJGMEJFODNDQzkxMAotOjEwQkUxMDAwQUM5NTk3NjFCRTg3NjNFNThGMjQyRjU4QUMxNEUzN0MwMwotOjEwQkUyMDAwNTBFRTc1NEQzMEFFMzk1NDg2RUI3N0YzRkRBQkYyNUJENwotOjEwQkUzMDAwQzVERkZFNzk4RjU0RTcwM0ZEQkQ2MTI2RkEzOEM2MThDOQotOjEwQkU0MDAwN0EwOUIzRjE2RUI0RkZBRTZDMTNDQUQzRkRGMzc2OUVEQwotOjEwQkU1MDAwRjFEMUJDRTU3NURBRkY3OEY0RDhDM0ZBOEZEQjlGMDYyMQotOjEwQkU2MDAwRUZFMDJFODRENzRBRDdEQjRFRkJCMzhBNENERUM3RTMyNAotOjEwQkU3MDAwODdFOEY5RDI5NDIwN0Y3ODA4Q0FFOUZEODM2QkM5Q0JBMwotOjEwQkU4MDAwQzA5Rjc0NThCQjA4N0MxQTkwMjFERTI1QjQ1MzFDRkI1QwotOjEwQkU5MDAwNDFERjA2QzJDRjgwQkVCNTcxRTQxOENEMEIyQURGNTA1QQotOjEwQkVBMDAwQjVBRkJDNENGQjExNjQxQkU5QTZFRDA2RTdERDQ1QTA3MAotOjEwQkVCMDAwNURFNzJCMzYwQTEzQTVEMzk0N0NCNDE3RUM4NUI1QTRBMwotOjEwQkVDMDAwOERENkRCNTk2RDI3NjZGQTNENjlGRTFBMDJGREVERkM0MQotOjEwQkVEMDAwOTkxREZCRjc5RDk5ODJGQ0JBNEI2NDdDMzRBMTFDRjIzRQotOjEwQkVFMDAwOUE0ODU4QUZDNzZEOEU0ODNFMUZFNEU1N0QyNDMwMEQ1QgotOjEwQkVGMDAwRjlGQTY5M0Q1RjUzM0REOTBCRkMyNDkwMkE4NTcwQTA2NwotOjEwQkYwMDAwODcxRkYwMzMzQjQ0NTFFNTY5RTA1ODMyREE4MTAxNkMxOAotOjEwQkYxMDAwMUZCMTBCOUI4ODA4RkM3QUNFMUNFQTA2QkZDNERDODBFQwotOjEwQkYyMDAwNDZERjIyRjM2MURCMzBGMkI1QkMzQ0EzOEMxMDE3MDM3MwotOjEwQkYzMDAwODFFQ0YyODc0OTJFRTAyNUMzNEM2RDMxMjA0QjgxODQ4MgotOjEwQkY0MDAwQTlERUU4QTFGRjAwN0NGQzg1QUIxN0M4QUQ4NEE0QUZENwotOjEwQkY1MDAwMTEwQ0YzRTAyRjM4MkY5OTZFMDVGODU4N0Q0RDBGRjEzNQotOjEwQkY2MDAwMTcxQTFCQTEzRTRGNzRGNUQxOUZBOTRCMUFDRjJGOENFNgotOjEwQkY3MDAwQjZFMzA3OTM1NTdGRDA0OTcyNDBFRkI1Qjc5QzIwNkY2OQotOjEwQkY4MDAwNUIyMkZERjA1MTcxMjUyREQ1RUNGOTg3NTM1OERDNjIwOQotOjEwQkY5MDAwOTQ5RTI0NDZERjJGNTAzRjFERThCMUUzMTc2NkQyMUI2NQotOjEwQkZBMDAwODNCRUFGMjdGQjBDRjY2RTQ2RDAxNDk5MUZGREY3OTVBNAotOjEwQkZCMDAwOEJENjhBODMwNkZBMUM3RkZEQjNFQThERUQ3MzlBMUMzQgotOjEwQkZDMDAwMDYzQ0U2MzUyNzFCRjIzRTI1RDM1MDdGNTI1N0JFQTFEMwotOjEwQkZEMDAwQkNCMDY3QUFBMTdDRjJBMUU5ODZGQzk0RDBBNzBDRjVCRAotOjEwQkZFMDAwM0ZEMTU3NjFDODRGRUI1RjYyQThGRkM5MTMzNTg2N0MwQwotOjEwQkZGMDAwNDlGODZFNDNGRDE5NjczNjFBQ0E2NzBFM0Q2NDI4OUZEQgotOjEwQzAwMDAwNzU3RUFCMjEzRjY3RjhBRjBDRjVCRDQxRjFFNDA5RTA2NwotOjEwQzAxMDAwNEY0QThGNjY4QUFGNUQxOUNBMjFEMDlGQzM2REQ0OEVGNwotOjEwQzAyMDAwOUJDRkVDNjNEMEI3MjQ5QkE4RjYzMTU1NEM2OTQwNTdBMQotOjEwQzAzMDAwRUNBRjFERjQwMEM4RjkzRDhGODVCRjgwN0FEMkU0MDdDQwotOjEwQzA0MDAwRkVFNTBCMTZDOTFCQTE1REJCNjgyMjVFOUQxQzkxMTYwNwotOjEwQzA1MDAwMTFGODVFQjFDNzhEREZFNUQyNTZFNDBGODFBQTBEN0JFMgotOjEwQzA2MDAwMjJFODZERTM3QTEwRjM3NkQyMEZGMEJEQzFFMEUzNDUyQwotOjEwQzA3MDAwMjVBNjdDMTJCMjhERjQ2RjI1RjcyNDA1QzZCMUZCMkNFMgotOjEwQzA4MDAwOTJCMUZFQ0REMkJGMkY0NUE1RkYxQzRBRkZFNjg5REI0QQotOjEwQzA5MDAwNkI3NEZGOTA0OTlFOUNDMkZDQzNBQTczMUU4M0RGODMwRQotOjEwQzBBMDAwNzgxREY1N0I2Q0E0MUREOEE5QkM2RTI0RUIxNEFCQUUzNwotOjEwQzBCMDAwRkEzNzU2RDM4NzlGQjg3MUZGMjY5QUJGNjg0QTcxNEVFOAotOjEwQzBDMDAwRDdDOUNCRTRCNTY2REY4RkQ1ODczMzBDRjY1OTc0REE2MAotOjEwQzBEMDAwOTZGODEwQ0EzQjJBMTdDQjUzMEM3MjMxNTAwNUYzMTM1NAotOjEwQzBFMDAwNzgxOUU1QTJGNkRERDczNzE1RTU3Mjk3QzhFQzk0NEVCRQotOjEwQzBGMDAwODlGMkU1MzhGODhBOTZDQjVGNEU5Njk4QkYxODQ3M0U4RQotOjEwQzEwMDAwMEI1NENFODJDMkREQjlGMkQzNUQ4MDM3NzkxQjQxQkRCRAotOjEwQzExMDAwNDQ3NTEwQ0FEOUU4RkVBOTVENzUzN0MyRTk2NUY0QTQ3MwotOjEwQzEyMDAwRjk0MzlBQkY2NUEzRjIwM0ZDMkI5QjQ0MTA1RjU2OEEyOAotOjEwQzEzMDAwMkYyN0RBNDc4RkEyN0Q0OUU3MjE4MTdENjRGNTUwRkJFNwotOjEwQzE0MDAwMTNGNDNEQjUzRjk5QkRGOUU3QjUyRkYzNjFERTdBRkJGNgotOjEwQzE1MDAwNEZENTk3MjE4N0RDOTQ5MjFBQkZGRjE3RTNFQzQ3OUREOAotOjEwQzE2MDAwNDlENkZDRUVGRjlFRjQyN0E3MThGMUExRDFBMTQ2Njc5RQotOjEwQzE3MDAwNTYyMDNBM0FERUZCMTI1Qjc3REEyMjkxRDNGNjJGMjQ2RgotOjEwQzE4MDAwRjg0RjEwRTlFNUQ0RUNCMzRBMjVBQzVCRDAyNTVCQTlBOAotOjEwQzE5MDAwNUVERDM3QkIwNkRCMDk5Mzc4MDI3MjI2NjE3OEMzMzIxNQotOjEwQzFBMDAwRDA5M0E0OTRDOTA5ODVGRTAzRjRFNjI4MzZDQTBENUIzMgotOjEwQzFCMDAwOTQxRTE1NDAxRjI3OEVENUJCOUE3Q0QwRkNGMzg5RTREMgotOjEwQzFDMDAwQ0JCNzUyRDQzOEQ5MkMzMjRCMkY1RkUyRjlFMTlBN0NBRAotOjEwQzFEMDAwRDFGMEIwRTA4MzE2MTFFRDhFMEY2OEI5NjY0RkQwN0VCNgotOjEwQzFFMDAwMkMzOTdDMDBFMkNDODI5RkM4NDc2MkYwREZDQkFBNUU4QwotOjEwQzFGMDAwRUUzQjY5OTc4MTJFNUQ2QjA0RjRCMzMyRkRFMTcyQzhBQQotOjEwQzIwMDAwNjczNjExM0ZFMDY3RjY3MDk4MDQ2OUZGM0ZGNEIwRjVCOAotOjEwQzIxMDAwQzhGNDg3MzhCMENGMzMyRjg3Mzg4MEYzQTA4NUM1ODUyMQotOjEwQzIyMDAwMzJCNzg1Mzg3RERDRTg5QUVBQzdGREVFRTJBMzdFNTg5NgotOjEwQzIzMDAwRjc4QTNDMTdGMkU5NjcxNzEzQTQ4RjIxRUZDNjlFNzJBNQotOjEwQzI0MDAwRDg1Nzk4NEJGQ0MwM0YyRTBGNEYzMjIxN0ZERTFBNDI0OQotOjEwQzI1MDAwNzlFMjFGNTFBOEFGNDM5MkU5NDQ2MTREQUZCNDkwRTkzMAotOjEwQzI2MDAwRjc1MUZGRkRERDE2MUJBNkQ3NUE0NDRDMkJGMzhBMDc2NgotOjEwQzI3MDAwMTdEMDdBNUI3RDBFOEMxNzc0RTQzQjcwOUNDRTVDMDEwQQotOjEwQzI4MDAwQzdGOThGOUM4N0YyQzAyRUY4NzU4QjE3RUI3NzNEREVEMAotOjEwQzI5MDAwNTQwNEYxODRDRTkzRkY4OTcxQ0QwODNENTNBQzc5MDFFQwotOjEwQzJBMDAwOUUzMEVFRjcxMEJFQzkwQkZCQkU0OUYyMENEQzI3RUQ0OQotOjEwQzJCMDAwQjQwNEZGNzEwM0M0MTNENzBBRkU2MzMxRjgzN0U5RTUwQwotOjEwQzJDMDAwMUZBMTlGMENGODAxM0NCNERCMTk1RUFDQ0UyNkJGMUI0RQotOjEwQzJEMDAwRTJGRDkzQzhGQTE1QjFGODU0QzUxM0E1MzBCMzQwRTk4RgotOjEwQzJFMDAwMzc4OTkxMDYxMUU2ODZEQTEyNDFBRkZBNDkzRjA1OUI3QwotOjEwQzJGMDAwNTgzQTQyMUNFQzg3OTAwNzQ1MDlFMjQ1RDlCNkQwMjA1MAotOjEwQzMwMDAwOTQ2N0Q3OEJGRTM2QUM0RjcwNUY0MTVCMjc4QjlEMDRFMwotOjEwQzMxMDAwOEVCQkEwNUU5OERCNDJCRkJGRTgxMUQ5RkEwRDg1NzBENQotOjEwQzMyMDAwREZGRDM3MTc2RTFGQ0MyMUYxRjk3QjRGNEJGNUQ5MkE3MgotOjEwQzMzMDAwNUQzQ0Q2NDU2MkVGMEJGRkNCNkQxNTE2MEZFREY3NzYyMgotOjEwQzM0MDAwODA2RDI2QUNGN0FDNzFGNUUzOERGNjdCQkI4NzUzRTNDQwotOjEwQzM1MDAwMTM5M0QzQzE1RTZFRTY2M0RCOTk2NjkxQUQwRkM0N0YyNAotOjEwQzM2MDAwQzA4RkRFNUEyOEE1QkI1REZBN0UxODNFQ0MyNzlGQzczQQotOjEwQzM3MDAwRjU3MTE2QjNGOUI3N0RFRjhEQ0Q4RjUxM0FGOTc3REFCNAotOjEwQzM4MDAwMTBFMjU1QUY1Q0ZDMENGQThGRUYyNTRCRkJDMUVGNTI2RQotOjEwQzM5MDAwN0U2QzI2QjBDRUVGN0Q3RkQ2Njk1ODk0MzFGMzZFMzkyRQotOjEwQzNBMDAwOTNDQ0VCRTI0OUVGN0RGQkQ1MzIwQkVERkZCREU3NUVCMQotOjEwQzNCMDAwMkRFMzUxMDg4NTEwMUY1QTc5RTM4N0FGOTU0MUZDNEE1OAotOjEwQzNDMDAwNjhGRTRERTY2NTBBQUY1MjQxOEE5QTIwNEYwRDY4RTYzNQotOjEwQzNEMDAwODc2RTU5MUExRTA3NkYwN0QzMUVEODAyRjFDMjUwOUJGMQotOjEwQzNFMDAwNEJFNEE4QkRGNjI1RTcxRjA1QTBDNzY2ODA5RkE2MEZGMgotOjEwQzNGMDAwREI0Njc2NzI3NDg5QjlGNDc3OTc1NEQxRkVCNjcyOEFBNwotOjEwQzQwMDAwRTJFMjAwNkY4QTE1RkMwQTcyQzFFQTA3QkFEOTVBQzg3QgotOjEwQzQxMDAwRjRFNUQ2MDdDNTkwMDI3MjJDRENDNEM4RERGNjVBRTZGNgotOjEwQzQyMDAwNjUyQTg3RUQzRjBEQzExOTAwRDJDRTA1MkExMzIwN0U2MwotOjEwQzQzMDAwMzc4RDIwQkRERjc2QUQyOTBGRjY5NURENDRDODA3M0E2QwotOjEwQzQ0MDAwQjQ5OENDRDhDRkM4NDU2N0E4MTdFNTZGRDMyQzkwNDNENAotOjEwQzQ1MDAwQUQxNzFGOUQwQ0VCRjU3QjU1QkU2ODcxQjczNDUzRDNGOAotOjEwQzQ2MDAwODEzQTFGQzREREZDMTg3N0RCQ0RGNzYzOUMzRURFN0M5MAotOjEwQzQ3MDAwOUQ1RUI2QUZDMDU3MTIzNURFRjVEQkVFNzA3Njg0MUVEQQotOjEwQzQ4MDAwMzRGRThBNkVCN0I3ODVGODYxQkM5NzVBNkM5OEJFRDBGNwotOjEwQzQ5MDAwMjI2MjdBQTJDNThCRTlGNzVCMjQ0QzA3NUE4QTMwRURGOQotOjEwQzRBMDAwNkJGMUZCMEIyQzAwRTc2QzRDM0IyQzY0N0Q0MDQ3NjcyOQotOjEwQzRCMDAwNUZGMEIwRkRDODdCOTJDQUJGMDA3NEZFMjRFREY3MzI3NgotOjEwQzRDMDAwNkRGNzQ1REFGRTMyQUQzRkFGMzY2Qzg2QjhDQ0JDMTFBNQotOjEwQzREMDAwMkEyRjI1MjhFRkMyRUZGQjY5N0Y1MDZGNkNCOUFEMDQ5RQotOjEwQzRFMDAwQ0E0QkFCRkJDMzgwQzdEMjYyRkE5RDQwN0Y3RDU4N0ZBOQotOjEwQzRGMDAwN0ZDQjA5M0YyQjFGQUFCNDUwRkM5NkZFOTY5NTNCRTdENQotOjEwQzUwMDAwRDI3RTY4REVBOUY2NDNDNzJGNjFGNTY3NjM3Rjc0NUM0RQotOjEwQzUxMDAwQ0NDN0U4Qjc4NEMxNzNBMjI0MTYzQ0QxRjVBOTk1NkZBNgotOjEwQzUyMDAwMjY1NDhGODhGMEJGRTBFRjU5MjQwRUY3NTEzODEyM0VBMQotOjEwQzUzMDAwMDZGMkY4ODJCNTFDRjRFNzlFMTI5MjZGQTJGQUNEOTIzMQotOjEwQzU0MDAwNUFDMDQxRkVBOTY2MjI5QTRCQThDQUNCQThEOTU1NEUxQgotOjEwQzU1MDAwQTA5RDhDREY5NTU1N0NFODk4MEZGNTEzRjZBQkU5QTcwNQotOjEwQzU2MDAwRTRFQTMwRUE5RDI0M0ZDOTM3QkI2OUNBRDM4MUE3NTNBNwotOjEwQzU3MDAwNTRERjQ3MjJFNzBENTAzRUIxM0NBRTA3NkQyNzU2OTM3RQotOjEwQzU4MDAwQzg3OTAzMzI3MTdEQUE1RkEyQ0E2M0QzREI0NzREMjEwQwotOjEwQzU5MDAwM0VBNjNGRjc3MTcwMUVCMTgzNUY0QjdERkQ3RTkyNEJDRgotOjEwQzVBMDAwRjNBQTdERjY0NUI1REVGRTc5NjU0OTFCMjFCRkY4ODEwQQotOjEwQzVCMDAwQTcyMDBFRkUxQkUyRTU2MDNGN0VCNDdEOTQzRDc3Qjg3OAotOjEwQzVDMDAwRTU0QzVBNTVBMUFBMTQ0MERFNkYxMzhGRThFRERDNkNFMAotOjEwQzVEMDAwODVEMkFCOEUwRjdBOUFGOEVBNUU4QzJGMDQzMzZBNzQ5OAotOjEwQzVFMDAwRkFBREMzMTJDQ0EwQ0M0QkFFM0ZGMThGOEI0MTNFODA1NQotOjEwQzVGMDAwQkUwNjM5M0Q3Nzg0RTlGNzUxQkRGRTVCMjYxRjM1N0JDQQotOjEwQzYwMDAwNDI1MEQ3NkI5RkJDQjEyRDAxRjdEM0E4M0U5MkMwQUU2QwotOjEwQzYxMDAwMDg5MjBBREEzRUIxN0NFQkNCRjA5RDk0MThCRjI3MDg1NAotOjEwQzYyMDAwOEM4RjMyQkQyMTBFRjI5OTlFQzA0RjNDQjBERjkwN0NDMgotOjEwQzYzMDAwNDg3RTg2Q0VGN0I3MDM1NjA5RThBRkVGRTREQTdBODg4QQotOjEwQzY0MDAwMUIzRTRDMTIyNTNCRUQyN0YzQTU0QjAyQzBEMTYxMUFDRQotOjEwQzY1MDAwMTY4MDA4NDczQ0NENEI3ODZBMDc3NTA4OUE5Q0E0ODZEQgotOjEwQzY2MDAwMEY1REZGOEUzNDU1MkU5MERGNzc1N0QxRkEwNzREQzFGRAotOjEwQzY3MDAwQUI1NDU3OEVENjNGRTgwODZFODEzQ0ZEOTM2RDU0QUZBNgotOjEwQzY4MDAwRUYxRDhEQTM2RkVCOTYyOTRERUM1NUUzRTYyMzlFQ0Y2RQotOjEwQzY5MDAwNzYyQkQ5OTBBN0Y1REQyQ0RGNEVEQkVGNzUwRjc5NERBQQotOjEwQzZBMDAwMzQ5RkM4NkRFOTNFOTMwMzc5QURGRTk2NkU4NUI2QkZBMwotOjEwQzZCMDAwRUE2MUU3MDA4ODJCRTgwM0I5Mzc5QTE3NjkzRTQxOTc4QQotOjEwQzZDMDAwRTc1OTlFRDg1OERBNzdGMjNGMDVEMDQzMUQ2OTIzQTc3MgotOjEwQzZEMDAwQjMwMDlGM0ZFNEZBNDFCRTM2QkVGQ0Y1NDFDODZGQUVFMQotOjEwQzZFMDAwMjcxMkM0RTczMjRGMUNDMTc1RjhBQUI5N0MwNEYwRDZGMgotOjEwQzZGMDAwRDc3MjQ2NDQ0MzFERkVCNDc1QTE3NkVBMTQyRkMxNzg2MwotOjEwQzcwMDAwQjIxMEUyNDJGOTYwQkYxNUY3OThEMDdFREI0RTQ5QjAxNwotOjEwQzcxMDAwMDRGMEREOTUwNkVCNUM5MUM2RkM4MTI5MjFEQThGOEU1MQotOjEwQzcyMDAwN0ZBNjUwQkVCMzRFMDc3NTY1MTkxOUQ2RkI1QkM0NkY2MwotOjEwQzczMDAwMDI3ODExRTVGMDFGRTU3RjJGMDFGREQ0Mzc1QjcxNENDNgotOjEwQzc0MDAwQTVFMzZEREFDMEZCNUIyNUQwM0ZBMTU2MDFENkZGMDRGRgotOjEwQzc1MDAwODc3QUMyNzcyNjYzQzczNzY4RkU1QTdGNEEyRkY4MUI0RAotOjEwQzc2MDAwOTYxRDhDM0UzN0Y5RkFEM0E2RDNCNEMzQ0VFODYyOTNCNAotOjEwQzc3MDAwNUJDREJCOERGOTc2RDU5RUY0QkExNTc3MzJGREJFRjk0NwotOjEwQzc4MDAwQzQ4MTVDMzAwMEFGMUU5Qjg1N0VFNDY2MEQxRTcyMDA4NgotOjEwQzc5MDAwRTFCOTNBMzgyN0U5MzYzQURGQzY5RkIyQjg2NkUzNDBENgotOjEwQzdBMDAwQzkxMjk4N0ZFMzFFMTMwMTNGNkVGMzAwQTUyNzFEN0Y3QQotOjEwQzdCMDAwRUNBMzdDMjg0RkE2RjM5MDdCQTZGMjk0M0UwMjA3MEJENQotOjEwQzdDMDAwOTZEQUU5RkE3RTNENUYxNjAxNUZGNTY5QjdFRUI2NTE3QwotOjEwQzdEMDAwRTdFOEVCODIzODA1RThBMTNFQUQ3NDM3RDBEM0E2MzkzRgotOjEwQzdFMDAwNkYyMTNEMjZBNTk2RkVBNDlBRTJFQkU4RERENTRCNDBFRAotOjEwQzdGMDAwQUNBNTk5MTg1RjUyODI0MzM5Njc3NjZGNDNGQ0ZGNkI5MwotOjEwQzgwMDAwMzkxOUIxQkExMTlEQjhDRjk5MDdGRjQ3RTE5QjJDQ0FERQotOjEwQzgxMDAwMTU1MDVGNUM0NjVEMjJBMDUzMjE3MDEyRUMxMEE1QzIzQQotOjEwQzgyMDAwODY3MUQyMEE3MTE5OTZFN0FFMjFBNjZFMEFDRjExMjkzOAotOjEwQzgzMDAwMzlCOTk1MzZCNTE3QzgyNkIwNTNGMjAzMEU4QzdGOUFENgotOjEwQzg0MDAwMTNBQTc2ODAzRjdBRUMxQ0NCNDdENkU5MTJFMkM1NTE5OQotOjEwQzg1MDAwMTRFQUI3RDE3RTZFNzFGMTIyRjgyMjY5NjZEOTA2RUIyRgotOjEwQzg2MDAwNDY3OTc5RTg1ODI5RjAwQkIzMDM5NDJGMTY2M0JDRTc5NwotOjEwQzg3MDAwNjAyMkE5N0Y4RUI2M0I2QURBRDhGRDIzNUFFRjY4QjJGMAotOjEwQzg4MDAwODc4MDVERDlDMTcxRUI2QkYwN0JDNUQ0QUQ3NDNEOEVGMwotOjEwQzg5MDAwQUFFQjY3NzZGQjQ1NThBRkEzNkU2MzdFMkZCN0YxNDFENQotOjEwQzhBMDAwQzBEQjIzQTkyRjJFODFGOUE1NTlFNTlFMTQwQURGRTdFNQotOjEwQzhCMDAwNTI1RkVDRjY2NjIwOUVGMzZEQjRGQzczN0ZGRDQyQjdDOQotOjEwQzhDMDAwOERFMkZENjhBQjlDMjlFQUYyOTNGRjQwQTUzNkNFRTNFQQotOjEwQzhEMDAwMDVFNDUzREVGREM1ODc4MDhGNjlGOThGNkQ1NEZGN0VCNwotOjEwQzhFMDAwM0Q1OUIzMDc1ODc5NDFCRUM2RDdENEFGOUQ0REUxNjhENQotOjEwQzhGMDAwMURDRDJCQjYyMkQ4Rjc4QUQ0QUZBMjdDRkVENUE3Q0QwQQotOjEwQzkwMDAwNDRFQjFGRUMwOUM3OUM3RTlCQzM4Q0YzMjAwRUIwNjdFMQotOjEwQzkxMDAwQTZGMTY4Q0YzOERDNkM1RDFENTNGMkQxNEUzQTZBNjdFMAotOjEwQzkyMDAwRjgxQUM5MzE2MUY5MjJGM0IzMjJDNDA3QUM1Mzc4MTM2MgotOjEwQzkzMDAwOUVFNTIxNEQwMUQwQ0Y3QzM2NEY1OEJDRjdCMDNDNDUyOQotOjEwQzk0MDAwODJCMDI5REIxRkU0N0E1NkEwN0Y2ODJGRDJFRDA3MTI1MAotOjEwQzk1MDAwRjA2MzhERkI4NzdDNTRCRUQwM0E5QzYxQTI3QUQ4NzM3OQotOjEwQzk2MDAwNjEwNTk3NEJGQkZCNkNBQUVBMkY3QTQ4MDZDNDYzMUY0QwotOjEwQzk3MDAwNEQ2NTcyRTZEMTgwNzJCQjQ1MDIxQTFCNjZFNzU2NDlDNwotOjEwQzk4MDAwNjAzQUE0RTlFQjBBRDJDNzNCQkYzMkY2NUM0MDE4RUQyRgotOjEwQzk5MDAwQjIzRDJFOTM4QUI3NDlCQkMzMDVENDVFNzYzRDI3ODI0QwotOjEwQzlBMDAwMUNBMTZBN0VDNzYxRDA2RjFFMUVFOUE2MTBGODlGRTYyMwotOjEwQzlCMDAwQjdCOTU5MUNERUQ3QjdFNDRCQjNDMTNFN0NCNUQwMDQ0MAotOjEwQzlDMDAwRkNDRjhCN0UxMUNFRDk5NTI3OTQyNjgxRERDNjhGRDJFMAotOjEwQzlEMDAwRTlFQjRCQzI0MDM3ODM3M0VFMDQzRjUwMDBGRUE1OUY0NgotOjEwQzlFMDAwMEZEQkQ5RjlEMDkxMENEMjBGNzE2MURFMkIxM0ZEM0UxNAotOjEwQzlGMDAwQTFDNkJGM0I1QjZDOTg1MjdGRkU1REQwMUY1RkVCMjJGMAotOjEwQ0EwMDAwQjg0RjIwNzgwMzk4OTdEQTA5MDc3Q0YxRjJBN0VFQzZCMQotOjEwQ0ExMDAwNzE5RkUxMDM0OUVCNDBERTlFNjM3NjNEOTAwQkM2Mzk4MgotOjEwQ0EyMDAwQzI0RjcwMTBFNzc4REYxNjQ4ODI3OUVGNzcxQkVEQkZCMQotOjEwQ0EzMDAwQjIzNDY2Qzc3NkE2MzJGOUQ5RDlDMkUyQTBDMkY1NEZBMAotOjEwQ0E0MDAwNjA1Q0E3QzNBMkM5MjNEN0QyRjA1Q0IwRTc4Mzc4OEUxRAotOjEwQ0E1MDAwRDYxQURDMjY4M0JDQjIxMTQ1MTE3NTcxNzI1QkI2MzFGMgotOjEwQ0E2MDAwREUyNTVDQkY5NUM1ODc1MkQ5MzhEMUU3MEQ1QzlDRDZEMQotOjEwQ0E3MDAwN0ZDMUVFRjFGQzAzMkQ4RDNFOUZEMDRDMDIyODhGQzg2NAotOjEwQ0E4MDAwMTAzQkY3QjA2RDU3NjU3QUIyQUU5RjZEOUM5QzJFOEVCMQotOjEwQ0E5MDAwNDMxRjBGNUYzNzkzOTBFRTlDQ0FDM0ZDODgwMEYzNzk2NQotOjEwQ0FBMDAwRjhCQTgwREY4OTc3MzhCMTE1RjY2NTI4QzE3NUMzM0FDMQotOjEwQ0FCMDAwM0VGRjVERDQ0QjBFRDIxMzg2MDM3MzU2ODg1M0U4Q0VFNwotOjEwQ0FDMDAwODUxMjJGM0YzMjRBRkZGOTExRkVDMDdENzUyRTA2N0Y3OQotOjEwQ0FEMDAwNDhDNjdDRjQ3RUZBQTNFMDNCRDM3Rjc3Mzg3RjJEQzAzNQotOjEwQ0FFMDAwM0NERkFCMjQyMzYwODcxMjMyQkMwOEY4QjdCMUQyODE5NwotOjEwQ0FGMDAwNzFFQTg3NDk4RkNEMDYwNjJFREYyM0VBRTNDNThEMDM1MQotOjEwQ0IwMDAwOTcxMjM3OTRFMjNFOTYwNDc2RjBDMzJGOTUxQkUyNTRCOQotOjEwQ0IxMDAwREFGOTMwMkRCRkY5QzQwNjhDMUYzRTdDRjQ5QTMwQjU4QgotOjEwQ0IyMDAwMTRDMTE4QjI1MDdGQUNEMUQ2NzNDNjlBMUZBOTZGQjc4MwotOjEwQ0IzMDAwMDQ5NTJDQTBGRjk3NUFFNTJDRkFFOTVCMDAyNzlDQUJFMwotOjEwQ0I0MDAwNkE5RTM0MEJGQ0JGREY4QUY1MTk4MDI3MjdBRkVBOEY3NgotOjEwQ0I1MDAwMzUzNkQ0MUZFRDc2RUFBRjAxOUQ1RTlDOENGQTk0MTZCMwotOjEwQ0I2MDAwRjNBMDlGQjVGMTU3NzgxODFEOEVBOEZFN0MwMjM1MzNDRgotOjEwQ0I3MDAwMDFCRjFEOEVDMDE1NjZCNDEzOTlBN0Y2NEU0N0IyNDY4NQotOjEwQ0I4MDAwMzdDREREQTBGRjBFMEExMUI5MDg5MzNERTg2MEY5RTQ0NgotOjEwQ0I5MDAwQjRFNkVFNzZBNjg3QjFGRUM4OTNGQzZFQjA4NzNBRUM5OQotOjEwQ0JBMDAwNkFERTQzMzA3RjUwRTg0MTNGNDFGOUJFNTUwMjM4MEZGRAotOjEwQ0JCMDAwM0EwMjdFRjAwNzk1MUQ1MzI0RDAyNzU1RTkyRTlDODcxNQotOjEwQ0JDMDAwRTVFRkFDQkQyMDBGMzMzREMxQUI2MEI3MTAwRkIzOEZBNQotOjEwQ0JEMDAwREU0QkJEOTA0QjVDMzFGQjE5RTE2RUE0MUZBRkIxMUY2MgotOjEwQ0JFMDAwRkI1QzM2RkU3QjlDMzlCMEEzMzQ1MjhGQjYwRkUzQjlBMQotOjEwQ0JGMDAwODA3QjZDMThGRkQxRUExRkI2MThFRDY0MkQ5RDkyQzY5QwotOjEwQ0MwMDAwRTIwQzIwNEY4MEFGQjVFRjQyRjAzRUU0NUYyQjY5NDI2QgotOjEwQ0MxMDAwRkVCNTdBOERGQjQ1MUEzRjBCRDdBNzE4RTI5N0RGNEE3RQotOjEwQ0MyMDAwRjVFMUZBNjg3MjQwQjg1RThDRTU5RDJBOURFRTg0N0Q0MAotOjEwQ0MzMDAwRjQ3MUM3NDk4RTMzQ0UwQzk0MTNGMUM3Mjk1M0U1MDgxQwotOjEwQ0M0MDAwNTFFMzQ5M0M5RTMzRDNGODI0QkVCQzMwQzY3MUEzRTUwMgotOjEwQ0M1MDAwOUY5NjZBRjJFRjg4NEFDN0ZGNjAwRjJFNENBM0ZGRkYzMgotOjEwQ0M2MDAwNTBBODdGOTEwMzVCMDc2Rjg1RjVGOUEzNkFGNzE2RjU2NgotOjEwQ0M3MDAwMUQzODA5RTQ3NzQ1OTQ1QjUzNTNFMTNDOTU3QzFDRDIwNQotOjEwQ0M4MDAwOUJFNTlCRkEzNDM2REU1ODM5QzZFMjBGREIxRTk0NTAyMgotOjEwQ0M5MDAwM0YzRkMzRkIxREZFMTg3MEQ3NUY3NzFBRTQ1NzdFQUE4QgotOjEwQ0NBMDAwODRGREQ1RjMwQUNBQjFGQUVCODk1OEZFRDFGQkI3OTNEQwotOjEwQ0NCMDAwRDA4Q0YxRkE3NzYxRjk2OEZGRkRBQ0ZGOTczRkY1RTM5RgotOjEwQ0NDMDAwODNCM0ExRkZFMzE2OTM1NUU3Q0Y2RDNCQkUzMDFERTI2MgotOjEwQ0NEMDAwOTVEQkVDNTQyRTFCRjk1NjA2QkVFNTdENjRENDBGMDI5RAotOjEwQ0NFMDAwM0VERkFGRjk0NUNBQTJERDU1NzNDMTZFRDVGMUY5NkNDRgotOjEwQ0NGMDAwQjBCRjIyRUQ3OUJBQ0VGQjFENUFGQjNCNzc4MzNEMzRBMgotOjEwQ0QwMDAwQTZCRTMzQUE3RUJFRDZGRjZBRUMzRjFBMUU0RDhFNDBFOQotOjEwQ0QxMDAwMUVFQzJERkUwRjU2MEQzRTk0NDMwNzRDNTFGRDhEQ0E1RgotOjEwQ0QyMDAwQTUyMEY2Qjc2OTBFQjMzMzkyRkVCQUZFMjcwQTBGRjRCOAotOjEwQ0QzMDAwMTcyQUNGMDIzQkVCNDEyMkMxMzlFNzY4QkMyN0E5NzQwRgotOjEwQ0Q0MDAwNTg3RjdEOTI2MTVEMjNGOEJFQzVGMEZEOUY1QkJDMjREQQotOjEwQ0Q1MDAwQTRFM0I3Q0YwNEI3MkQwMjdFNEJEMkQ2ODkyODNCQjFDRQotOjEwQ0Q2MDAwRERFMTJDMTJEMkYxRERGRkMwRjE1MUUxQjgyRDBFMUMzNgotOjEwQ0Q3MDAwRjNGRkMyNzBGODBDN0MxOTgxQTNDMEYwRkRBM0MyNjE1RgotOjEwQ0Q4MDAwQjY1RENGQkNBQ0NCNUI0NDkyQTVDRjk3ODQ2RDU5OTc3MQotOjEwQ0Q5MDAwNzU3NkNCOEMzM0EyMjEzRjczQzg2QkE4M0ZFQkJDNjQ4NAotOjEwQ0RBMDAwMjg5RjMzNUM2NDI4QkZFRDhBREY5MDlGMzczMkRCNTBDOQotOjEwQ0RCMDAwN0ZDMTc1RDk5MDJGMjc4QjBERjUyQjZEMkIwQ0Y5ODUyNQotOjEwQ0RDMDAwRTI1QTQzRkQ2OTZBOUNGQzc2RUYwNjQzQkRDNUQyODNGNwotOjEwQ0REMDAwODY3QTQyNzNDQTc3QzA3RTU5RjBDMTAyMUJGODE3M0JBRQotOjEwQ0RFMDAwNURBNkVBMTBDNUNGNEUzRTY4NEI4RTIxMUZDQkQ0N0U4OAotOjEwQ0RGMDAwNDdGNTlEMzcwRERCMkYxNDlCREE0MTFFMkVBNEFFNzAzNAotOjEwQ0UwMDAwMUJCNUQ3RDJFQjAyRURBMEY3QUI0NTIyOUFEMTZGMEUzRQotOjEwQ0UxMDAwQjFGOEM5MDcyQkFCRTBGQjlEOEI4OUQ4RUQ4RUU0NkY5MQotOjEwQ0UyMDAwRkYyQjQyMjA2RkNEOTZGMTVDOUJCREQ4ODRFNzA2NzY0MAotOjEwQ0UzMDAwMTdENzhDQkJGRkIwNEZCNURGRjc0NEU5RkI1MUZBMzE5MAotOjEwQ0U0MDAwQjNGMzkzRDFERjhCRDMxOTVEMUQ1OEIwOEZDMDNFODFGMgotOjEwQ0U1MDAwQ0QxNUMyN0IzRTgzNTM3NjdBMjFGRkE1MDVERkY2ODI4RQotOjEwQ0U2MDAwOUZEMTM1RTUxMTJGRDA0RjY3Q0U1NzBERTdGMjFDMDU0NgotOjEwQ0U3MDAwNkM3RjI2QkFERkJGNTVGQjJEQjhGRUE4MERGNEU3RUU5OAotOjEwQ0U4MDAwNkM4NkNGRTg3QURBRjlGNEREMzYxNjM3RkZCOEU2QjkwMgotOjEwQ0U5MDAwRjg2MzlBRTdFNTc0NjY2N0VEQjY4NTMwRkVERjVERjQwQQotOjEwQ0VBMDAwRjFDMDdGQUYzQUNFODEwNThGMTMwNkVGRTM3ODBFQjk1QwotOjEwQ0VCMDAwMkI0NzkwRjQ3QTU2NEJFMURFMjhDQ0E3RDNCN0QzMEI5RgotOjEwQ0VDMDAwN0FCN0NCRjc4OEMxRkVCN0MyN0M2MjhDNjNGMzMyM0M4MQotOjEwQ0VEMDAwRUQxNjNGREVGOTNDRkUyN0NGNjc2N0NDN0Q3NzVCOUM4NAotOjEwQ0VFMDAwNzkxNTZCRjNGMkFBRjcyODNFQTY3OTNERjUxNzlFNTcwMAotOjEwQ0VGMDAwNTgxRDJGMzU5REQ5QTdCQjI1QzY0NzQ5RTZDMENGRjM5RQotOjEwQ0YwMDAwN0RGMUY5MkY2OUI2RjE5QzUyODJERkU4MDdFNDE3MDQzRQotOjEwQ0YxMDAwQzYzRDdGNzQ1RUM1NEYzQzdFNUQ2MzUxNTIwMThFRDcyNgotOjEwQ0YyMDAwNUJEODM5REI3MzgwNDc5QTlFMEY0RUFBODBGQjBBQUYwRAotOjEwQ0YzMDAwQzM3OTJEMEVEQUVGNDgxODZGMURENjA2Q0QwNjM4MjdCNwotOjEwQ0Y0MDAwOTIwRjI1RTlGOTg4OEZENTZCOENFRDU2MDU5Q0M2RjNCOQotOjEwQ0Y1MDAwNTJFQTM5MDM4QUE3RkQxMDVGRDZGMDM2NjY5REZGNEM3MgotOjEwQ0Y2MDAwNzg4QTQ3NkYzNzhBQTdFRUEyOUJDM0QzNDRGNDlEOUE3MQotOjEwQ0Y3MDAwMkUyMUJENEM4NDI3OEQ4RUUyRjVGM0ZGMkExRDJEQkU5OAotOjEwQ0Y4MDAwNzFGQzIwRkQ3Q0RDRjhGOUFGNDYzRkY3QTY0QjM3QzRCNwotOjEwQ0Y5MDAwNjdGRkJGRTJFN0YxMUJDNENGRTg3OTZCODFENEM3M0FFMgotOjEwQ0ZBMDAwMDdEMkU5MTU5MDBFMjc3MzRENjcxNzgzOUZCREQ4OEM2NAotOjEwQ0ZCMDAwRjFCM0Q3MEUxNzM0OTI3QzdEM0RBNjA3NUU1QjM2QTk5MAotOjEwQ0ZDMDAwMTFDRjhGNTUzQkYxQUNENjU5NTNFQzdFNUY1M0YxRjE0NQotOjEwQ0ZEMDAwOTBEN0FEOUVBN0YzQTc4MkREN0JCNjdBRTVCOEYzMjJBMgotOjEwQ0ZFMDAwQ0JDQ0M2RjM4QkM0MTE5OTlGOTlGNjRCQTQwQThDOUZBNgotOjEwQ0ZGMDAwNTFCQzFFMUI2N0REQjU3NThCMzdERThEQUVEQkQ5RUEwNAotOjEwRDAwMDAwQjY5QjVBMzc2RDNDOEFBNzk4RURFRUY2RTZERjEwREY0NwotOjEwRDAxMDAwQzMwOTc2ODYzNzc2MUVBMEVGNzE2NkI3RjcwMUJFNjk0MQotOjEwRDAyMDAwQkZCRjg0QTIwQ0IwRkYwOUM2RkQ1NkFGNDkzRjAyRjA1NgotOjEwRDAzMDAwQkVFNjY1RjFGMDAxNDE2QUM0Nzc0MTU2MkVEQjBERTc4QgotOjEwRDA0MDAwNTFDRUFENzI3MzEwRDJEMEUwMzhBNkFFNjc1OTVENkM4OAotOjEwRDA1MDAwQkJGMzM5QjUzQ0QyOUUyMzkzQTVCMUY1OEVBODc2Q0YwQwotOjEwRDA2MDAwQUEzQTBFRUQwN0MyQ0IzOUZBNzczRkZFMjFBQTNDQkFBNQotOjEwRDA3MDAwRkQ0QkRFNDQyQzNGMTdFNzNDRTZCN0Q0RjZBQjZCQzc1RAotOjEwRDA4MDAwNkY0RkVBNTNGMERDMUYyMTUyOEVGRTNFRkEyODVEQTk1NQotOjEwRDA5MDAwN0NCMEMyMUJGQ0JFOTdENjdGOUQwQjdFRjk3MzEwNEZGMAotOjEwRDBBMDAwOURFMkMyRjMzRDg0MjczRUQ4RjcxRkVEODc5N0YxQkM4MAotOjEwRDBCMDAwQzZFNTQ2ODZGN0U4N0U3NUZEODVCREE5RjFGQjhCODc0MQotOjEwRDBDMDAwNUY2RDVFREE3OEE1MjQ4MDdFMURBOTI2RTI3RTM2QkVERAotOjEwRDBEMDAwMTlDRTM5REM1OTQ5OUE3MDdDNUU0Mjc4NTJERUE0RkU0MgotOjEwRDBFMDAwOUMyRjQyMUYxNzRDRDIzQUJDNDhBM0Y2MzNGMEZCQ0EyMAotOjEwRDBGMDAwQTVEMENGQzA1OTkzQjhDMzE3MUZFRTc4RjJFMDlGNTQ2NAotOjEwRDEwMDAwRkFGMTk4ODMzQkUwNUMwMTU5Q0ZDNTNDQjdGNzJCQUZGMAotOjEwRDExMDAwMURFQkVERjc4RUVFRDdFMzM4QjczQzE5QjQ0OEI0REYxQQotOjEwRDEyMDAwQkJENDczNjc4NDA0NzM1NkU4QzZERkFGQ0UzQkJBOURBOQotOjEwRDEzMDAwQzdDQ0Y2QzdDOTFCNjZDNDVGNUZFRjQzMzlCMUY4RTdEOAotOjEwRDE0MDAwMzVENTVFREVFRjJEMzJGOEM3QjU4MTJEMTZCMDZCNkI4RAotOjEwRDE1MDAwOTdBREIwNDgyRTI4OTcxOEREQTk3MEY0MDlDMTlDMTIyQwotOjEwRDE2MDAwNTcwNDRGNzFFNThGOEE5RjgxRjM0MTNDQjdCMUJFOTk1NwotOjEwRDE3MDAwQzM3M0M3QzVEQjE5RkRBRERGM0U2ODZBQTRFOTExOTUyRAotOjEwRDE4MDAwMEY1N0MwM0U5M0FFM0Y3NzA2OUI1RjVGQUYyMzE3RTAxQwotOjEwRDE5MDAwRUZEMzlGQkZBMDcwN0NGQTEwQzFCODlEMkRFM0U5M0Q4RAotOjEwRDFBMDAwMTBCNzFCRTY4ODFBRTczMzJEODdGRDg2NjE3NTVGQUNFMwotOjEwRDFCMDAwOTA5NkI3MDJCQzU1QTlDOEU3RUJCN0FGNDAzRkZGOTZDMgotOjEwRDFDMDAwNkFFNkU3MEYwODA0Q0YwMUJEMzkyRjIxMDRFRjFEMTBENwotOjEwRDFEMDAwOUIzQ0Y4MjhDREJGRjU4NzI0RDJFRDhGRDBDNzEzNDJGMgotOjEwRDFFMDAwNzgxQUQwNDc2QTVCRTA3M0IxRTJEMzUyMDZFM0YzREYwQgotOjEwRDFGMDAwQkFEODNFNUUzQ0JDOUM1NUU1QTk1NkFGODY5NzJDQjE4QgotOjEwRDIwMDAwRUFBRkFDMzZDQTM1MERGRTE0NkJGODNEMTIyMzlFM0VENAotOjEwRDIxMDAwNEE4RkExRjFGNUREMkY1NDM5RkQ1QTk0QkY1NDdCM0U1RQotOjEwRDIyMDAwQjZERjMyMzc0MzNEQTcxQkFBRDg4NEZBNEFCMTRBNzgwMQotOjEwRDIzMDAwQjY1ODg1QzdBM0FDNDY3QzdFQjg5NDg4OTBCRkQzMkFFNQotOjEwRDI0MDAwM0QwREYwREQ1NTZCOEU5MkMzMjFFQzY3RkQzMkE3NjE3OQotOjEwRDI1MDAwNUU0RkY0RkU3ODFBREM0QkNBMkY2MEYyRjdGRDIyMTdGRQotOjEwRDI2MDAwOUUxMzdGODAzNDA5NzBGRUFCOEUyOEYzOTEyRjg5NjQ2MgotOjEwRDI3MDAwMDFGQTNFQTdFMjRGODNFRjFDOTExMzY2ODJCQzY4MzYyOQotOjEwRDI4MDAwQzdFNEFGQkI1NDNBM0ExN0E4NUM4NUU3REZEQkNENzgzQgotOjEwRDI5MDAwMUVFMTUyNkRDQTcyODg3RjJCMDE4QjFGOEUzNzVENkEyQgotOjEwRDJBMDAwNUY5OTcwQkY2RTVEMzVCREE3RDkzNUU3ODM5NUUzRUExOQotOjEwRDJCMDAwQUY1NTAxRTM3QUY1MDkzREI4RkZBNzU0OTBBNjYzOTRGMgotOjEwRDJDMDAwQ0UyNjdGRjlGMkRFNTkzNDdGMzY2NDJBNjFFN0RDRDg1NgotOjEwRDJEMDAwN0NDRjg2QjJCNDczRjE4NDRGQTNFQkFFMTY1RDM1MERFRgotOjEwRDJFMDAwNjM3REU1NkZEOEJDRDZENTg1MTZDMjk2RDgzRDg3N0FDMgotOjEwRDJGMDAwRjZDREEyRjk4NjBDQjdCQUVGMzg3RjFFRjBFQkFGOUFFNQotOjEwRDMwMDAwQzdCNzA3QTJFOUU5OTYyNzFEODY3Q0Q5NzkyMkUwN0I3OQotOjEwRDMxMDAwMTREQjYyRUI4N0Y3QjI5QzZDNUY4N0Y3RTdDMjNBQUMyRAotOjEwRDMyMDAwREIxRUJCOUUzQkRCODVGNUFFRkVEMTVDMUZDQkVGM0UyQgotOjEwRDMzMDAwOTBDNUQ2NjM3RDNEMTc1MzlFMUZDODRBNjBFNTBEQjE2OQotOjEwRDM0MDAwRkI1Rjk1RTk1NEU1OUQ5ODBCRUJCMjNFMEVCQzJCMzI4QQotOjEwRDM1MDAwMTMxMThFQjczQjU2QUY4M0ZERkIyQjUxRjY1NTQ1MjY3NwotOjEwRDM2MDAwODM0M0NBNjRFNzJCQUZGNkJFRDA5MTA2RjRCMDkzMTNBMwotOjEwRDM3MDAwRTExQ0Q5NUI2RUZGMTRBMEJGMERFRDk3RDBDRjRGNTdDNgotOjEwRDM4MDAwRUIzQkQyMDM0RjY2RDBGNEVFRjNDRjlEODJGQTAzNzVFOAotOjEwRDM5MDAwQzRDRjQ5RjFGNUMwRTEwQzREMEY2OEY3QTIzNTdERDgzNwotOjEwRDNBMDAwNjMwNzdEMDRGRjBCRkJBQjE0MDQyNTI5MTlENjVENzlCNwotOjEwRDNCMDAwMDhDRkM1RjQzQTQ0NzYwRkNBM0Y1MzZGNTc3RjQzQTU1MQotOjEwRDNDMDAwRTdBQjQ3NkY2RUJERUZBOTM3REE0NTY3QzFGRUYzNDQ5RgotOjEwRDNEMDAwRUNCRkFCODJCNEI3OTQ4RTdCOTVEMjVCMkI5RDBGRjlEQgotOjEwRDNFMDAwRTA4OTVCRjVGQTQ2RTM4Nzc4RTNERUE4MUQ3OEY1RTg4NwotOjEwRDNGMDAwQ0REOTgxMTNDREYzNjcxOUJFMUJCMjAzREZBRjdFNjJCNwotOjEwRDQwMDAwNUZBOTA0RjNFQ0I5MzU5NkJDRDVFNEYyMkY1NUI5MThGMQotOjEwRDQxMDAwNEQyRjVBRkE0QjU1Q0U1RjA5OEQwRkQ3NjcwRTE5RTE4NAotOjEwRDQyMDAwNTlENzY0ODQ0N0UzOEYyQkExMzYwN0JDQUI0NTQ3OUY5MAotOjEwRDQzMDAwMDZFQkFDRDlBNUE0NkFFNjBEQkQxNzEyMEZDRTVGQUIwMwotOjEwRDQ0MDAwNzRGMkFCNjYzMzhGNzJFRjI4ODdGMUU5NUYzNTNGOTE1NQotOjEwRDQ1MDAwMTgyQjZFMTUzREZGQUIyNjRBMEY0MDFGNEZGMzI4N0Y1OAotOjEwRDQ2MDAwMEFFQjM3OUM0QzkzMjJGNEY4N0Y1NDNDRkNBOTc0QTgzNwotOjEwRDQ3MDAwQzk1NzREOUY0NEI3RkZBRjRBNzc5QTNFOUI4OEVFM0MxMQotOjEwRDQ4MDAwNzFFMjhGMDczMjZDODhCRjBEQkMyOEMwRkVEMTgxMENDMQotOjEwRDQ5MDAwODlFNTg5QjhDODBCRjZFQjZDNzZFRTlENEFBODVDNzhGNgotOjEwRDRBMDAwNTdFMjZBQUYwM0VGODMyOURERDY1MDIxNURDNzJCQkQ1QwotOjEwRDRCMDAwQjc0REQxQUZFM0VDNENCNjFFRUIxQkRDM0I2MUNCRkFCNgotOjEwRDRDMDAwOEFDOUJGMzgxREQ2QUY4NkJERUY3MUVFN0NGMkEyNzQ1QgotOjEwRDREMDAwREFGRTg5MjExM0JDOTA0NUQ2NkREQjYwODZGOUNEQ0M5MAotOjEwRDRFMDAwNjQ3QTY0RkRGNjU3RDFFRUJCNTlCQTVFREY2NEQ0RTdDNwotOjEwRDRGMDAwNUZDRTEwNTUzREMxRUNGMDNCQTk1RDAwRTcwOEUzRTFDQwotOjEwRDUwMDAwQTEzMDkzRTFFMTlFRkFFMzI4NEZFRkREQ0VBMTNDQkRDRgotOjEwRDUxMDAwMjU5M0UxRTM1RTNFODQ3Mjk5QjQzM0ZCOTlEODI4M0VBQgotOjEwRDUyMDAwQTg1Q0JBMDQ5MzAwN0NGQzM1QzdDRTc3RjMwMTQxRkZCOQotOjEwRDUzMDAwRkVDNkZEN0I1NjJGMDQzQjMwOUEzRkJFQTdFMkU5MkI4NwotOjEwRDU0MDAwOTlFQTNCODRFOUMxM0IzM0QxM0YwQzcwRDBERjVCOUY0QwotOjEwRDU1MDAwNjdGMEFFREZCRTA1Q0YyNzVGQ0M1MEVENkI5NTNGMkY1OAotOjEwRDU2MDAwQzIzQUNEOENDQzJGNDU5RERGMDVDN0M4MzZEMDE3OTQ2NQotOjEwRDU3MDAwNkY0Qzc4QkVFNDc1MzNDMjc1RjVBQkRGNkM4MjdBRTIyRQotOjEwRDU4MDAwNTQxN0RFRjc0MjNCOTZFNkZCOTYyNzg0NUE3NUYxM0EyQwotOjEwRDU5MDAwQ0RBRUM5RjczMzdFQThFNTY1ODM1REQ4OTBFOTMzRDg3MQotOjEwRDVBMDAwRTlEMUY2QzZGRkU4MDM5NkY2QTg3OEZBNEJFOTgzQzNGQgotOjEwRDVCMDAwQUE1REYwQTdFQTgzNDc1NEZFOEZENjBCQTM3Q0JDOTNFOQotOjEwRDVDMDAwRjFGMUE1RjNGRkJFMTBGMkQxN0NGQ0FEQ0M4RkE2OTc5NAotOjEwRDVEMDAwQTJGOUY3NEFFRkRENDhEN0NBMTIyMjE2MUFGQ0EzOUMxQgotOjEwRDVFMDAwMTBGOEMxQTNGNDFGRjE5MzM4MzhERkY2NDRFRjRGQTZDQgotOjEwRDVGMDAwNDE5Q0VCRDJERUQ1RUI2MjhERkY0NDE2QjNCMzM2MjZFOQotOjEwRDYwMDAwNEEyNjdDMUZGMjc1NDY2N0QxNzIyMkJBREQyODVGQzRCNAotOjEwRDYxMDAwODkyRkQ2RDZDQzQxRkZGMDVDQ0Q2REI5NzBFRjJEREFGNQotOjEwRDYyMDAwM0YxODUzOUY5MzUzNTc4MTdGRENBQUZBQzdGQkFDRjU5MQotOjEwRDYzMDAwQkQzMUUwRjU2NjMxN0NFNjE3OEM5QzAyN0NCRkRGQzAxMwotOjEwRDY0MDAwRTE3RDYyRjhEM0RCRTk3NzlGRjdGRjYwNTgxQTBCRUZCMwotOjEwRDY1MDAwNjg1RUYzNEZCNkIzRjFBMkM3Nzk1NzVEQjc1MUZGNDQ4NwotOjEwRDY2MDAwQTFGRTA5QzVGMzcwQUQzOTExQ0VCMTZBRkVDOUIwRjJBMQotOjEwRDY3MDAwRTdGNTRGREUyNDIzRkYzMDBCRDZGOTY4NkNCODFDRUFCRgotOjEwRDY4MDAwRkNBRjA4QzE3RDczMjgxQzU3OTc5OEZEMEFGMDhCODk2MQotOjEwRDY5MDAwQjZEM0Y5MjVEMUVERkVBOENFRTdDREVEMzcyOThGQ0U1MwotOjEwRDZBMDAwMUJFM0M5RjFGODZEMTRBRTNGOTFERkZBODQ5MTFDRTBFMQotOjEwRDZCMDAwRkIzNzhGN0M3MEYxNTE5OENGMTEwN0JFM0YxNkREQ0YzRAotOjEwRDZDMDAwRDdCMkNDQUE3RkUwNDAzRUQwRjRFRjgwRDBCM0Y5MDVDQQotOjEwRDZEMDAwREFFRUNEM0IzMkZEM0I4ODhFMkYwOEU1MEJGQUZEQzIxQQotOjEwRDZFMDAwMUYyOTVGRjg1MUJFMjExRkY3RjUzQUVCNjNGOTI5ODMzMwotOjEwRDZGMDAwQUEzRjE0MURCNzExN0JCRkQxMDQ3RUIxNENGQzE2N0QyRgotOjEwRDcwMDAwRENFOTBENzVERDdGQTFDQUE1QTIyQ0E2M0ZFRkFBNURCRAotOjEwRDcxMDAwMjE0MEJDRThGRUQxNzgxMTQxRTc0MjlDOUE3RDA0RkM4RgotOjEwRDcyMDAwQ0JEN0Q0N0IwMkNBQzY4NDk4RjFERTk5MkE1RTI3OEFCOQotOjEwRDczMDAwMUZBQ0E5MzNGQUY1NzdENTFBRTVDNzNCQTFGQzUxM0REQgotOjEwRDc0MDAwNTIzOENFN0U5NDQ2QkZGMUM2QkI1MUZERDExN0JBQjk0RgotOjEwRDc1MDAwRkQ4MDg5RTZGN0Q5QUMxQkQzMUZBQjQ4RDMzQzhDNzM1MwotOjEwRDc2MDAwRDBGNTgxQjQ5NjM0NEQ3QjgxQzJGM0NFQTE5NTA5NjA4QQotOjEwRDc3MDAwNDdGRDgyOTA2QUI0RTMzRkY4RUMzNEJENUQxMjU0RjE4QQotOjEwRDc4MDAwRkM3RUVENjdFRjAwNzI3OTQzNjg5QTE2NEJGRjQ0Qzc0MQotOjEwRDc5MDAwNjk3RTExOEE3RDJFRTMyRTU1QUVCRUExRERBN0I4MkI4MgotOjEwRDdBMDAwNzYzQzdGOEIzQUVFMUI3NUUzRjM0RDc0RENBNjc2OTlERAotOjEwRDdCMDAwNzFERTRBMTZCMzg3REVBODZCNzMwNDk5NUZDREM2RkQ5MAotOjEwRDdDMDAwMUIzNjJFRTgyREJENURBQTY0RkQ3OUY0RTMzMEM0RUY2RAotOjEwRDdEMDAwNjE5Q0VEODQ0MDNDQTU0RjUwQTZFQUNGNURBNTY0MzMyMwotOjEwRDdFMDAwM0NFNDE3OERCRjBGQTVFREE3NjhGNUEyRURBQzlGNjdEMAotOjEwRDdGMDAwNEE4NjdCQjNCNUNCOEM3MEI1NjlGNjJEMTEzMTBFNzJBQwotOjEwRDgwMDAwMTVGNEE1MjdBMjJGRUZCNEZBMUYwNDNBMjAyRTA5Q0I1NgotOjEwRDgxMDAwNEZBODc4QkZCQkZFREYyQzMwN0YyQTNGM0JGMDFFREJEQQotOjEwRDgyMDAwNTk5MzA4RjJCM0VDN0NDOEEyQzdDQjg1MUJGNEFCMkU4RQotOjEwRDgzMDAwQThGNkMyNDQ3MjM0QkY2ODA0RTVEQkZCMjExN0RFOEYxMwotOjEwRDg0MDAwNzhGMzBCQkZCM0M0RUFCN0Y2N0E5NkUxMUNGMUZBNDA1RAotOjEwRDg1MDAwRUNCODhBOTgyNThDOEI2NzMxQ0I4OEJGRjVENzczRjFFQwotOjEwRDg2MDAwNUM3MDNDRkJGRjEwQzhBRjk5NjA4RjFFRTlEMERCRkZGNgotOjEwRDg3MDAwNEY2NTQ5QUFGREFGQ0EzMzlFRDlGREYxRTJBRjQzMkFGNQotOjEwRDg4MDAwOUQ0RDE0N0ZENUY0QjM1NjJGN0FGREI1MzQ1QTVGMEVGMwotOjEwRDg5MDAwQUJGQzFDNURFRjUyRDY4REQxRERBODFEMTM4N0VFRTJFNwotOjEwRDhBMDAwOERBQkY5MUY1QURDMzdCRjk4QjY4RkIxMkYzMzY2MUM4QQotOjEwRDhCMDAwQjU1RUY0Mzg2RjQ2QURDRjE4M0YyMjRFREMyRTI5OUI2MwotOjEwRDhDMDAwRTEzNzE4Mjc2RTk3OTRDREUyNzY2NzA5RDM4QjRBQzg2MwotOjEwRDhEMDAwODk3QUVDQ0FEMTdCRjc4MUI5RjdDMEUyQ0Y5RDA2RjUxMgotOjEwRDhFMDAwRDZBOEM2NkJFQUVBNUYzRDA1N0VBQUU2NTc0NEVDRjE4RQotOjEwRDhGMDAwNjAxQkVDOTM1REREQzFBMUJEMTEzRDRFQjQ1RERFMDg0MgotOjEwRDkwMDAwRUYxNTgyMjA1NUUzMDc0NTY2MTlFM0Q0RTQzMTc2QkU2RQotOjEwRDkxMDAwREZEM0JDMUFFRDRCMkQzRUREMjcwNDc2MjREMEVGQjdDNAotOjEwRDkyMDAwNkNGRkI3NkRBMDVGMzUzRkZFMkQ4QkZGNDExNjY3NjYxQwotOjEwRDkzMDAwRjZFRTg1NUUxN0RFNzNERDNBRUFGRkY5MzFERTM4Q0FBRQotOjEwRDk0MDAwRkY2QUZDNzFBMkY1MTg5NTM3NzFENjYzMjI3OTEzMkZGRgotOjEwRDk1MDAwMkVBMkE1QTNGQjJDODI1NEY4MEE5QzRCRTUxMkZEQkQxOAotOjEwRDk2MDAwMzRBRDExMDgwRjc4QTg1OUNFQTE5RjU5MjNDODRCMzE2NwotOjEwRDk3MDAwREVGQ0FBQzkwNDc5REY3MkRGNkUzODA3QkZCMkRBMjI5MwotOjEwRDk4MDAwREJBNUM4RkU0QkU5NkIwRDg1QUY4MDdGNDEyNzBDN0U4MAotOjEwRDk5MDAwRUNDMDJGQTU3RjgyRkJDMUFGMkZCNjRCQjAzRjcyNzY5NAotOjEwRDlBMDAwOUUzNEU4QTFGOUIzNzc3MDIyRDgzRDU1OEJFRjM3NEZGRAotOjEwRDlCMDAwODNGMTU2NzFGODBFOERCMzk5QThFN0I1NkY1RDVFNTk4NgotOjEwRDlDMDAwNDBDODM3MDA0NEREQkQ4RjFBNkQ5RjQ2NTlCQjBGRUUyRQotOjEwRDlEMDAwQ0Q0RTREMUQzMEI5Mjg0QUJGN0I3OEVEM0UxQjg1QUIzRgotOjEwRDlFMDAwQTMzNUUwODVGQjc4Rjc2NTk3RUM4M0ZCNzg2OTY5RjJFRQotOjEwRDlGMDAwRDAwMjZBNDcxRENDOUVCMTFDRjIwMzdGQTNGNTU3QkEzMwotOjEwREEwMDAwMEZFRURGQkQ2ODBBRkEzODVBRkU4M0VDNjVDQjc5RDg5MQotOjEwREExMDAwOEY5OEE0OERCRjFFQ0JFRjVBRjJFMEIxNkRCNEZGQjc2MwotOjEwREEyMDAwMEY2RjU5MEU2N0Q3Q0JFQUI0RjExRjU5NUVDOTUzRkE4RAotOjEwREEzMDAwOUZBQkU1MUY0Qjg0QkNDNzQ5MjJGQjRDQjMwOUIxNDRFMwotOjEwREE0MDAwRUVGN0UxNzlGNzgxRDFGQjdDMkRDQkUxRkNGOEVCRTUzQQotOjEwREE1MDAwNEQ5NTcwOEZCM0VDQ0IxREZCOEFBNzEwMzI2QjU5Qjk3MwotOjEwREE2MDAwMjhEM0ZDREM5QzJGMkY3N0MyRkUzMUExRjQ0OEYzNzIzRgotOjEwREE3MDAwQ0U1NzEwN0U4RkQ5QTRGNjFGREEyNzY3MDMzQ0NBNTQwRAotOjEwREE4MDAwMjhFNzk0NjdGNjU1QkJFMTNFQzJGMDY5MjBDQjg3OUIzRgotOjEwREE5MDAwN0I2QzY5ODY3QjA5OEEwQ0E2ODk3MEEyM0M5Qzg1RTAxOAotOjEwREFBMDAwQThGQkRBRDlFMTY5RUNCRTlEOUEyRjYyNzE4QUQxQkNEQwotOjEwREFCMDAwOTdFNTA3NzZDNEJFN0ZGMjYxMEU5MzVGMDM4RUQ4RTVDQgotOjEwREFDMDAwM0QyQURGNkJGQkFGNDlFNzg5RkM2QzBDRkVGRjNDQzREMQotOjEwREFEMDAwRkQ2NzQ2RjhFOTE0QzQ0MzNDRjhFNDVDNTMyQkVDQzNGRgotOjEwREFFMDAwREExODlDRjFGNjcxRjdBOUUzMTRCNDI2RTEzQjQ1Q0JCMwotOjEwREFGMDAwOUE5Q0Y4QUVDRTI0M0Y5MzM3OTQ4QkY4OTUyMEZGQ0RCNwotOjEwREIwMDAwMjY4NDMzRDVDQ0UxN0IyNjY5MEUxMjNDNEVEM0Q0MTQ0NwotOjEwREIxMDAwRjZCRUM5MzI4QTZBNzg3NzY0RTFBNEMwNTEzQ0RGOUJDMwotOjEwREIyMDAwOUU1MUQyMDZFN0VCNUE3RkNFODMxREE2QjUxRjBCQTdFOQotOjEwREIzMDAwQjgwNUUwNEMzNUQ3OTQ2QzI5RDZFMUFGOThDMTRERDdFNAotOjEwREI0MDAwNUQ2RDI3N0YxM0RFN0IxOTE4OUE5QTBGNzY3NTY1QjY3RgotOjEwREI1MDAwNjQ4OENCOTQwREQ1NThFMDVDRUFFNTFDNTU0RTQ4QUM4MgotOjEwREI2MDAwN0Q2QTI1OTMyQjIzNUJENEY3MkE2Q0ZFMTI0MzVDNUZGRQotOjEwREI3MDAwOUQ3RjY1RTdCMjJGNDFCRDg2MjEwQjgxNzM4OERCOEVDNwotOjEwREI4MDAwOTdFMzNCRkRGMUY4QkYwMUNFQkJFQkY0NzYwMzFGQzY3NAotOjEwREI5MDAwNzNFNjBENzBERTdEMDZGNEY3NTMwMUNFMzc0MjNGRTBBOQotOjEwREJBMDAwMUZDMEJEMEVCMDlCNTJEQjYyQUZCNzE2NTc2RUI4RUUwQQotOjEwREJCMDAwMjZDQTBDRkQ3Nzg2QUY0OEZGMUUyQzlGNjg1RTkxRkUzQgotOjEwREJDMDAwOENGN0Y4QzZGNkE3REVFN0QzRjBDRUFCNzgxNzYyQzNDMgotOjEwREJEMDAwRjlBQTQ2OTcxNERGMjYxRDNEQUQ1MkU5OEI0QTNGN0NEQQotOjEwREJFMDAwRDdGN0MyRjJFMjVFRkQ3QjA1ODRFQzYwRTczQTc4QkFEMwotOjEwREJGMDAwOEU2MDRGMEUzOUYwN0RFMDMyOUVDOUM3QjJBMTY0NTFFQwotOjEwREMwMDAwRTFDNkQyODVCNkFFMDNDOTRERjgzRUQxQzgwQTJFRTZBQwotOjEwREMxMDAwRUYwRjlDRDdFMDUyRURBN0Y0QkFBMDc5ODMwRTNFOERBQQotOjEwREMyMDAwRkUyM0ZEMEY3RDQxRTM4Rjc1QzhCNzdCMTk3QzYwNkZDNAotOjEwREMzMDAwQzAzQ0ZDRTE2OUZBNzMyMDFBRkNCNzUzRDk4MUU3NDk2QgotOjEwREM0MDAwREI1NEZDREZFMTBBRjU3MjExQkM4REM1N0ZENjA0RUIxNQotOjEwREM1MDAwOTk4QkU1NjU0MzI3MDU5ODY3NDMxQzNFRkQ2NTBFM0JBMAotOjEwREM2MDAwMjc5MjdFM0U5QzA4RTcwMzk2NjYzM0ZEMzVEMDNGQzM3RQotOjEwREM3MDAwN0UxQkYwQzUzMjEzRTEyNDM2NkZCMDMzQ0IzNEY5NEE0MgotOjEwREM4MDAwREVGQjU5MDU5NUFGRTlBMzc5MkE1RjI1NTg4NzUxNzlCRAotOjEwREM5MDAwMUJCNkQ5MjJGNTdGOUFGM0RFRjI3NkFBM0YzQzU2NzY4MAotOjEwRENBMDAwMUY4Q0RBOEYzNkEyQkI4NzY4Q0Q2MUYxREJEOUMxRDg3MgotOjEwRENCMDAwRkJENkMzMzkwOTA2QjlGNTU0NzMyNTc5OUJDRTZGNjUzOAotOjEwRENDMDAwMzZEM0U3QjM4NzE1N0MyNzQ5RTNFQjY4Qjk1NDk4QzM4QgotOjEwRENEMDAwRDZEMTk3QzNFQ0YxOEY1RjJFNzExM0M4QTUxNUFBNUMzRQotOjEwRENFMDAwNjJFNUM0MTM2ODgwRjIzNDkzN0EyRjQxNjRFQkJFRjE4RAotOjEwRENGMDAwNDczMzBBMjEwRUI3RDU2Qjk2RTA5RUMzNEFDRTlGRjNGOQotOjEwREQwMDAwMkQzQTRFQUQ0REVBNDg5MDIyRjQ1MTRCNkM5MjBCRjBGNwotOjEwREQxMDAwNEQ0NzgwN0JBRjM1Q0JFQzk4ODczRkIwM0JGRUJEODc0RQotOjEwREQyMDAwNjNGNDQ3QTRBNERBNzFFQzVBMEQ5RUFENUUwMUM3REIyMwotOjEwREQzMDAwQjhBQjMwMjlBODg3OTMwRjNDOEJGMTNEQTcwQUE3MkREQwotOjEwREQ0MDAwNEE1RkYxQzY3QzVBNUFCOEQxNjRENjk1QkI5OEZFRUFCMAotOjEwREQ1MDAwRjZDQUU1Mzk2MDVGQUFFNzlCQTJFREEyN0JCMjM5ODNFMAotOjEwREQ2MDAwMUNENkVDQTJERjc5MTk5RjUwRkU0NUZGMzE5REZBOEYzQQotOjEwREQ3MDAwMDRFRTdCRjQwN0YwM0MxODNDNjA1NDg4Rjc3NUQ5RkIzRgotOjEwREQ4MDAwQzY2RjFEMjc3M0MxNEZEMkZBQjkyQkE3RDhEMDZGREQ0QwotOjEwREQ5MDAwNkFCQTQ4OUZBNENDNjlBQjk0MkZFQkU0RDkxOUY1N0RGRQotOjEwRERBMDAwN0E0QTBGMzM4MTVGNTdFNzEwNjMzQjczMjAxQkVFOTU3MAotOjEwRERCMDAwOTM3NEFCMUZFNENEMjkyMTcwMThENzU3MjQ2RTU4REYxOAotOjEwRERDMDAwODVFNjJEODc5MTJFQ0NDNEREODZFN0E0OEU2MEZCRUEyNAotOjEwREREMDAwQkE5MTUyQjQ1MzNGMzA4NzQxRUZGQzNDMzcwM0UzMzlFQgotOjEwRERFMDAwQTk0RTQ2QjdBN0VDNEREODhFMjc1MjMyQ0ExMTU1RUUzMAotOjEwRERGMDAwRkQzQzc3MEFCRTdGQTFDOUNGQzg3RDE2QUQxRjU2N0VGOAotOjEwREUwMDAwOEE1QjkxMERFRkM0OUU0QTlENUNEMkM2MTlFRDFEQjA5MAotOjEwREUxMDAwN0YyMkY2RDJGM0ZCNkVBN0ZDMzhBQkJBM0Y0QzYxQTY2QgotOjEwREUyMDAwNTJFNUE1RTU4RkQyRkE1QjcyOThGRTNCRTUwQjBDQzA3QwotOjEwREUzMDAwQjhBN0RDNDQwNEY4NjcwRjA3OUY4NUZDNjJBRjEzREZDNwotOjEwREU0MDAwNzFEM0Q2MjNDREM0N0UxRjI2NERGREZEMTVFMDEzNDhBQQotOjEwREU1MDAwQzU1Q0M2NkY4NzczRDkzQUJFQTNFNkQzMTI2M0ZGOUUzMwotOjEwREU2MDAwQ0M3RkE4RjU3QUUwRkUxRkFERDc1RDFFRkJERUU4MUU3NQotOjEwREU3MDAwOTU4RjFCNkQzREQ1NzA5NTVFNzdDRjEzRUYyREYzODQ5NQotOjEwREU4MDAwREE1NUI0Q0FERTFDRDYwRkQ1Njc4OEFGQ0FDRTNBRkNDNQotOjEwREU5MDAwM0RCMUY3ODc1NkUxQkJBRUEzQkZGMzAxRUY1NEQxNzU5NwotOjEwREVBMDAwMEY5Mzk1RkIwMUVGQzIyRkNDNzg3RUIzQzNDMkU4NTIyQgotOjEwREVCMDAwNzAwNzQ1Qjg4Nzk0RTI4Q0VERUY3RTU3ODUyN0M1Q0M3NwotOjEwREVDMDAwREVFQkQ2RUUyRjU4RDRGQkZDQzc1NDdCMkNEMTVCOEJGQQotOjEwREVEMDAwNzIxRERFNTg5MzdDRjAyRURCMDhERUNGRDVENjMxRkFFQQotOjEwREVFMDAwM0NBRTQ1QkRDNzdGRjNGNjQzNDkxQ0ZCQTFENDYwM0Y2MAotOjEwREVGMDAwNjhFMzQ2REIxMTE3RTEzRDZFNURCQzdCOURGN0RDNDJCQwotOjEwREYwMDAwQTJBQkZGNjkzMkRDMDFGRDdEN0E1Qjk2MjEyRTExQ0YzOQotOjEwREYxMDAwRkVGODkxMkE2RkMxNUU1MDYyQzIyNTE4QkU1RkE0N0VEMgotOjEwREYyMDAwQTBBMjFGRkYwQTFCM0YzMkFFOTMyOEJBNzFGN0U2QzhDMgotOjEwREYzMDAwM0ZDRUMxRjhDRDVDMTFERkIxQjAxMzNDMEY1QkE2QkU4NAotOjEwREY0MDAwNUY0N0Y1MTNCRTU3NDhGNTUyMzVDODZGQ0QyRjAyQkU1NwotOjEwREY1MDAwMTc5MzgwQUZDQkNGRTZBNEVBRjRBNERBMkU1QTFFRERFNQotOjEwREY2MDAwQTFEQTAxNzdBOEZBMjZFOUJDNjYzNzNBMjQ4RThCRTg1NQotOjEwREY3MDAwOURCMTdBOEI1M0VERTg2OEY5MThBRDE3OEM3NjM1QTUwRAotOjEwREY4MDAwNUI0NTZGMDc4Q0UxMTcxNUFGMzc0RjFGOTNFMkQwQzc4MgotOjEwREY5MDAwMkQ3RjExRkJCMjZDNkVEMDNDMERFNDY2MzU0NzYwMUZERgotOjEwREZBMDAwNjQ1Njk1NTFERjNCNzI5OURGRTFDODc1MUFDRUUxRDYxMAotOjEwREZCMDAwRDQxOUVCMjU0MjNERTBBQjVDRTcwREY5Mjk3QTdEQzQyRAotOjEwREZDMDAwOTk0MUVFQjFGRTM2QUJGNEUwN0JGN0FDMDBFRjM3MkVCMwotOjEwREZEMDAwQzk2NUY2NTA0OTlFOUM5QTRCRDMyMzdGQThFQzgzREZGQQotOjEwREZFMDAwQTExODY5RTU0OUFGMDdEQUM5N0RDMzFFOTg5NzREMDRBQQotOjEwREZGMDAwM0ZCNTdDNkQ1NUQxMTE1QTZFRjlBOTA1REY5RDI0MjdENwotOjEwRTAwMDAwNjJGQkY3QUU2NjRFQkU4RkYyNzNCRTJBRTcxQTNDNkMxNwotOjEwRTAxMDAwNUUwRDlFQjA1MDQwRTFDODZDNjBGMDY0RjcwRjcyQkNCQQotOjEwRTAyMDAwNEVFRTY1RDdCMzdBQzVCOTE2ODNGRUYxNDM5RUMyNzcyQgotOjEwRTAzMDAwNkJBRTE2QkYwQ0I1QzJFRkExNjREN0NCM0NFOEJCQ0MyRQotOjEwRTA0MDAwN0U4RUE4RUY2RUUyN0JBOTk5N0VENkJGQ0IxRkUyRUU1MwotOjEwRTA1MDAwMkQ4RUNDQkJDQkI0QTIxOEY0NDU1NzlBRDMwRkZBRTI1RAotOjEwRTA2MDAwNzM3OUMxMzI5ODc3QzM4NTcwMThEMDM2RUJDMjEwMEYyMAotOjEwRTA3MDAwNzZERkZFM0M3OTE2N0NEN0U2Mjc5OUM1NENEODFGNzcwQQotOjEwRTA4MDAwNUU2MEYwRjU0NEQxM0YyMUJCRDU3NUU5NjVGMEI5MDI3QQotOjEwRTA5MDAwMjUwMDRGNUFBMjg0RUYxMEQxQkY3Q0QwQUI2OUM5QUEyQQotOjEwRTBBMDAwREU0ODIzNDE3ODJGODhEODY4M0RCMDgzMUNCNDlFRkU5QgotOjEwRTBCMDAwREUyNjA5OTRDMjNFNDEyODc1REE3NEQwNzMwQjFERkUyQQotOjEwRTBDMDAwOTMzNkQwQUZEMzdERDNFMTVEQTExNzBFQzc4RUE3RDcwRQotOjEwRTBEMDAwQUE3QTg3QzI3RkE3MUVGRTc4RkMzMUZBREVCQTVBQ0YzMQotOjEwRTBFMDAwMTJDNzhGRDZFOERFNTkxRERCNUVBNTlBMDBDQkNCRDdEMQotOjEwRTBGMDAwN0FFRTg2RjkzNEI0MEJGODFCNUQxQURFRjdFNzA1MzZDNQotOjEwRTEwMDAwRTZBNkMyM0ExREUxODA1RjMzRkJDQjkxQUUzMjE1OUU4RAotOjEwRTExMDAwODA1REQxRUVDODBEQzEzQkIyRURDOTlGNEEwN0ZDQzc3NwotOjEwRTEyMDAwODNCQkExRDkyQ0RGQTdFN0U3NzYwMUQ3RTM0OEQ0Rjk3MQotOjEwRTEzMDAwMzVDRENGNzgyQzk3RTlBM0QzNzk4MUFEMzBGRUU2MTNBNgotOjEwRTE0MDAwMDdGMDlDRTA4MzQ3MkYwOUUzQkRFQjczQTM3OEUzRUE3NAotOjEwRTE1MDAwOTlGRkQyQjA4NkJEOTc1MUJFOTY0NzNBRENENDJFRTBFNwotOjEwRTE2MDAwQkJFQTBEQ0YxRTBGRTM3RUYxNzY4MkZCQTAwREZEQzc0QgotOjEwRTE3MDAwNEZDMzNCQUQ1OTBERjI0Q0ZERUYxMjY0MzVCMDc3RTM2MAotOjEwRTE4MDAwRDIxMjQ2N0YxRjU0MDBCRDlERDlCRkEyMDFFOTVBMjQ3NwotOjEwRTE5MDAwMjI0MTNBMEFBMkREOTU2RDYzRjZBODg2REZEMzQyMzhBNAotOjEwRTFBMDAwMTdFMjY3QTc0REM0REY0NkNCQUY1OTk0MjI4OUU2QUY4QgotOjEwRTFCMDAwRjkxQzdFNzg3RkUxRUY4RkJGMjEzRDA2Nzg4NkI4MTg4NQotOjEwRTFDMDAwQkM3QjkwMTdGQzEyRTBBM0JCOTU5RDI3RUY1RTQ4RUQ0QQotOjEwRTFEMDAwMUU1QTZGQTE5MzZDODVGQ0MyMzYxNzAxRkVCODUxM0NFNAotOjEwRTFFMDAwQ0M4QUEyOEI1OURCMTk5RkZDMjgzNzUxRTU1NzgyRUY2NwotOjEwRTFGMDAwMjkxRENGNEQ1MEVEQTg2MDFEREFBRjc0MUU5RDczMTAyMAotOjEwRTIwMDAwMkU5Qzg3OTgyQjdGMTVFOTU2NENDNjcxMzMxQkMyOUNGOAotOjEwRTIxMDAwRkVGRTg5OTY0NkU4NEE3RTM2MzdGNTY2RTBFQ0M3N0QxNQotOjEwRTIyMDAwQzY0REFBOUMyOTVGN0I5NDdCNUI0NzA3MkZFNjlBOTE5QQotOjEwRTIzMDAwNkUzMjlGM0RDMjgxN0Y0OENCNUIxNzdBQjAzRUM2MDdFNgotOjEwRTI0MDAwMzM5RjY1N0VEMzI2NUE3RUJGNDFBRTZDQzBGOTc0MzlDOAotOjEwRTI1MDAwOThGRDQ4RTVDQTQ5ODBFQjk0NjkwQkJFRUY3NzZBM0FBRQotOjEwRTI2MDAwQzE3NzY2RUZCODEwM0U4REUyNTk4NUY3OTRDMEQ2OTMxQQotOjEwRTI3MDAwQTc3ODY4QTVGOTlGRTU0QTM4RkU2OTIxNzgxRkFDRkJBRAotOjEwRTI4MDAwRTk0Qzc2QkZCQkNCQjQwM0RGM0JENUY4M0U5QTRGN0Y1QQotOjEwRTI5MDAwOTZDQkZDQzlDQzM1NDczOTg4Mjc3ODlDQ0M5RUQ0RTBGNgotOjEwRTJBMDAwRDNFQTk1RTQ1NTlDMDVGQ0NFQUExRTQyM0MzNEFFRTE2RgotOjEwRTJCMDAwRDk3RDBEMTU5RTg1NDJBMDAwRkNCNDYxQjVCRjkzQUIxRQotOjEwRTJDMDAwQkY2RDNFNDRFMTZCMkNFNjkwOUU5RkZDQkI1NzkxMkVBOAotOjEwRTJEMDAwMUI3QjM4RjZCQjQxM0RBRjBBQUI3NEZFRDVDMUVGQkQyOQotOjEwRTJFMDAwOEE3QTY1RTkwMDhCMUYzNDBFMUNFN0VGNzU4MUJFMzkxMQotOjEwRTJGMDAwODlGNEQ5NDhFOUNGNUUwQUVCQzZFQ0Q4NkI5NjcwMkU0QwotOjEwRTMwMDAwRThDQjY4RkE3NDU2MzNCOTA4MzFENzQyRjYwRTFDRUVFMgotOjEwRTMxMDAwRkY4NkQ2REFEMEVFRDdFNEFGQThDMjA5RUYwODgyN0MzOAotOjEwRTMyMDAwRkQ4RENBRUY1QUZGMTE3RkQ1RUUwN0ZBRjZCRDNCRkQxMgotOjEwRTMzMDAwMjRCQ0VCRDZFOEU3RkM3MDFFRjkzRjQ2RjUwOTkzRDdGRAotOjEwRTM0MDAwNTIyMkZDNzY2MEE0RkY2OEZDRTVFNjMxRjkxQTQzOEY5RgotOjEwRTM1MDAwN0MxODRCOEY2ODdBRDZGNzc0MDVCRTk3QUNBRDFGQUZBQgotOjEwRTM2MDAwRTI3RDU0QkZFN0IxRkI1Nzg5NzlCQzBBOEZFQzg1Mzg1MQotOjEwRTM3MDAwQjY0NEY5QjlCQjE0REVGNTBCMTQ0QjgwOUY1NEE3MUZBQwotOjEwRTM4MDAwRTIzQjdGRUY3RTVEREFBMEMzRDc2OTgxRjIzQkNEOUY5MAotOjEwRTM5MDAwQ0U3NzIwM0M5NDJGOTJGMjc0RUJENzUwQ0M3RTY3RUE3NAotOjEwRTNBMDAwQzlFRkFFNDBCQzM2QzBEQTUxQkMzNjA0RUZCQjBGRjE0QQotOjEwRTNCMDAwRUMyNUUyMzE5MDJGNDEyNkJGMUFENkRDQzVERTA1RDcwOQotOjEwRTNDMDAwRjRERjczMUNFMkJGNDE3MUUxM0JENzRCRkI1NzIwN0Q2QgotOjEwRTNEMDAwMTI4RkRENUZDOEExNUNDMzc1RDZGODRDQ0NENUY2MUQ5NQotOjEwRTNFMDAwRDhCQjQzRDRBRjZGODU3ODg5RTZENzI3RDYwNTk0MDQ4OAotOjEwRTNGMDAwNjkyQzlGQTZBODdFRkQ0Q0Q1QUZCN0NDQjZGRDU5RkRDNAotOjEwRTQwMDAwRkE0RENEM0Y0MUZGRTcyMUVGOEYzMEQ1Rjg4NEZBOERFQgotOjEwRTQxMDAwMDY3RUJBMkQ4RkQ5MkQ5MjlBNTZFNDMxQkVEQzU0REE5RAotOjEwRTQyMDAwOEZGNEJGRTk3MjEzRjI4RkFCOUFDOTExRDcwNUEzRkMyMQotOjEwRTQzMDAwRDNFMjYwRDQ4MzYzNzRFOEVDNUYwNEZCMTEwQkJGQzJDQQotOjEwRTQ0MDAwODkyMDA3RTJDMUZEMTlBRUU5Njc3MDVFODUxQzY3RTdBOAotOjEwRTQ1MDAwMjgxNjdDRjBGMzQ0RkQzQkE0MzU3OThDQkVBRkY1OTlDQQotOjEwRTQ2MDAwNDkxOEYwQ0QzNzA5RTNEOUJGRjFGQUNCMDk1N0NERjlGNwotOjEwRTQ3MDAwMjdCQTdFRkZEMjk3ODRFNzgyQUUzREJCRjJGMzkwNTc3NgotOjEwRTQ4MDAwOEUyNkUxMzk5MjlDNzAyREQyQzUzNUNGMUMzRkQwODFBQwotOjEwRTQ5MDAwQTc4REUxRTk1QTdGMjVEMkNGQkJFOTkyMDlERTA5NkI0RQotOjEwRTRBMDAwRUQ3RjYyM0VGQzVFNzRCRDBBRDdCQkRGMzUzNzAzMUVDRAotOjEwRTRCMDAwNzY3Q0VEM0JGM0UxNURDOTREMjEyRTA1RUU5QjVERUJENgotOjEwRTRDMDAwRkJDQTFGNDFFRkQ1MUY3RDE4Q0Y3REI1N0RGMzdGQTExRQotOjEwRTREMDAwREQ2RDBBMUQ2MURGRkI5MjQ0QTg3N0Y1OTkwM0YzMDExNgotOjEwRTRFMDAwQkY2REZENkQ1OEZFRUUzMzQ3MzA3RkYyNkJERjMxMUY5RAotOjEwRTRGMDAwMkE4REQwRjFCQkRGM0RGMkMzREY0MzNFOTA4OEY3NzIzNwotOjEwRTUwMDAwMUE4MjRGM0UwRTc5NTI5QkM4RUU1RDA1NUYxMUY0QkYzMwotOjEwRTUxMDAwREY3NUYwRjgyMEYyQTE0NjE3NEJGQjM5RjVERDMwMDEyRAotOjEwRTUyMDAwQ0Y3OTY4RjRGQjU2NDU3MTE5RjAxREE1NTBCRjc5M0VBRgotOjEwRTUzMDAwQ0Q3NzI3RDRDNzhBMjNFRTUxRTdEQjAwQjQwOEUzQUVEQQotOjEwRTU0MDAwRTE0MkMwMDc1RDgyRDI4N0YyNUNFQ0NGMDU3OUVFMkMwOAotOjEwRTU1MDAwMEUwQkYwMkVFOUVBQkFFM0YzRDlDRjEwQjY2MkY5NEEwRQotOjEwRTU2MDAwMUIzQjJGMzY4REYyMEJCQzFGNDU3QjNCRkEyMUM0RjdCQQotOjEwRTU3MDAwQkExRTVDMDdGRDFEMzYxM0QxOUMxMTgxNzdCMzIwQTExMwotOjEwRTU4MDAwN0ZCNEI5ODZGMzUzMEUyMzFDRDk3NjJBMTVGNkM3OUFBMQotOjEwRTU5MDAwODk3QUFFOEJENUVCQTJFRUE1MkQxOUY1MTBCMUQzQjRDNwotOjEwRTVBMDAwNkM1QkVDMzhFODkzNzkyRTk1M0UxOUJGNjYwRUFDQzhDQgotOjEwRTVCMDAwMDZGOTQxM0M1NjdGQTEyRkQyNUZDRUY5QTY2RTc4REVEOAotOjEwRTVDMDAwM0ZCMzdFNjgxMUNDNjM0OUQxODYxOTMwMEYwRkM0RkI2RAotOjEwRTVEMDAwNDBCRjI4MkVFQ0JGMTFFMjkzOTQ5RkJFQUFDQUM3MzQ1NQotOjEwRTVFMDAwMzE4MEVGOENEOEU0NDAyQUZDMjY5QjY0MERFMDM5NkUyNAotOjEwRTVGMDAwNjk3REMwRDIwQTcyODYxRkM5NUQ4NThBRjA5ODYxRkY2NQotOjEwRTYwMDAwRjBBMDI1OTgzMTEzRkFFQjUyRjVEMzUxMDYzRjZEOEZFOAotOjEwRTYxMDAwRkQ0OTk1QjIwN0RBRDNGRUIxM0Y1QjlEQ0NFMzZGQkVGNwotOjEwRTYyMDAwRDlEODNBRkNFQjBGNkUzRjY2OEM5Nzg3QzZGNDVGRUE0OQotOjEwRTYzMDAwMDJGREEyQUNDMTc1OTMwNDlDRUZCQjUwMTVGMUFEREM5QgotOjEwRTY0MDAwQUE4RjYzNDdDNzdCNDA5RUMxN0VFRkU5QkNGMkMxQkM4NQotOjEwRTY1MDAwRDQ0OEFBQzU4MUEyRjFDQzRCQjQ5Q0Y2NTMyMUM5OThFOQotOjEwRTY2MDAwOTJCRTFCQkI3N0E2QzlFRENEN0I1NEJERkJFMjI1OTRDMgotOjEwRTY3MDAwM0I5QjgzM0NEM0JCQzFDQkE4NzdGRkE1NDUyNjZGNTNGQgotOjEwRTY4MDAwQzNGMkUwRjM5NzkwQkVFRjNEQzFGNEVFRTYxMzI1MDIyRQotOjEwRTY5MDAwRDBCM0Y2MUVGMkU2OEE2QkE4N0YxNTMzNDFCQURFMkNBMgotOjEwRTZBMDAwRjQ5RkY2NDJGRkREQzQ0RDJEN0JCMjc5RkVGMDJEMjBBNAotOjEwRTZCMDAwRkY3RUZEQkM3RDBEQjQzRjY1MzIyMUJEOURFQUZEQzRFQQotOjEwRTZDMDAwOTEzNjRFMEYxRkYzMDNCOEZBMTBGMkUzNjZENTJFMjhFOQotOjEwRTZEMDAwNUY3QkRGMDFGMEM3MUFFQkQ5RUYxMTZDMUU1MEY5OEI4RAotOjEwRTZFMDAwRkE2MzgwREZDRDI3NUU0NUZBRDFFQzVFREZEMzM1NDg5MwotOjEwRTZGMDAwNkY2RTRBNkZGOEJCMDk1NTQzMDgxRkZERjMxN0QyRDQ1QwotOjEwRTcwMDAwNURDNURFQzU1RDUyNTQ1MjA2RjQ3NjcyRjUwRjc3ODIxMAotOjEwRTcxMDAwREVERTVDNDU0NEU4RkY2MDhFRkMzQ0JFRkZGQjNDODdEMAotOjEwRTcyMDAwRUY1MTFFQjRGNDU0QzAzREM5ODMwQjI1MTFGODYzNzMzNwotOjEwRTczMDAwQjA3NjU0M0ZFMUY5RUE2MEVEMDBGMjhGNjc5RDFGRUM3RgotOjEwRTc0MDAwODdFRUQ2MjBEQUQ1REQxOTRFQjQwQjBFM0VERjhBRkFGRAotOjEwRTc1MDAwNzNCM0U0RjBDM0VGOTkyQzNEQzE2REM1RjY4QThCMzBERAotOjEwRTc2MDAwRjgzOUI0RjM5Nzg2NkVDMzczNUIxQTNFOTY1NjBERTc3RAotOjEwRTc3MDAwMzI3OUMxRTBGRUI1NjVFOEQzMzBFRjVGN0ZDRjBBNkYzNQotOjEwRTc4MDAwN0U4RkQyREZGRjA1RDY0MEFFNTYwMDgwMDAwMDAwMDAyRAotOjEwRTc5MDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJERDdEMEI3ODU0RDVCNgotOjEwRTdBMDAwQjVGMDNBNzNDRTNDMTIyNjkzOTMyN0UxRTlDOTAzMDhFQQotOjEwRTdCMDAwOTg4NDEzMDhFRjg3MjcwNDEwMkJCNTgzRjJCMjIyMEUzQQotOjEwRTdDMDAwQzgyMzQyNDg0NkM0OEFENzdFMzc4MzAzMzE1MjZGNkZDRAotOjEwRTdEMDAwQUMyRkVBQTU3NkEwNkFEMTJCMTA2REFDNTEwMzBEQTgyMQotOjEwRTdFMDAwMTRBQkI1RDE1MjhBMTZCREEzMjIyRjkxOENFMDgzREVFMwotOjEwRTdGMDAwRDJGMkFGQjVGNjM5QzlDQzY0MDI2MkVERkZGOUZGRTk5OAotOjEwRTgwMDAwNTczN0ZCRUNGN0RBRUJCREQ3REU5MzM2RDlCRkYxOEU4NQotOjEwRTgxMDAwMzI4MDJCRDU2MUJBQUMwM0E0MkI2REJFM0IzMjAxRDI0MgotOjEwRTgyMDAwMDBGNDM1OTg2RkIwN0I5RDNBOTY0N0ZFNDMwQTZEQ0U1MwotOjEwRTgzMDAwQzVFRkQzQzAwODE1MDFFNERGMjMxOTIxMzc0MDhBMjYyQwotOjEwRTg0MDAwMDE2NDUxNkEzMzUzMDdDMDA4QzBCRjA2OTFBQTgxMTIwMAotOjEwRTg1MDAwNkYzMUMwMjdCNTA2N0MzODAwRjg0RkNCMDY1OENFRkY4NQotOjEwRTg2MDAwMDA1OEIxQThENUExNjE3RjU1NEY4OUZFMzI5RDQ2RTk3OAotOjEwRTg3MDAwMkQ5ODlFQTNCRkNCMzA1RjAxMzc3OEIxM0M0Qjk2NkU4RAotOjEwRTg4MDAwOThDMUE5OEQ1M0FCREM0QTg3OTlGM0M4N0Q2NEUxQkQ3QgotOjEwRTg5MDAwNTM3MEZFREZBOTA0M0QwOTg3RTg1RDg4REYzMTBGN0VGNAotOjEwRThBMDAwMDgwREMwRjlGN0FFRjRGNkQ1QTgzQzczQTkyRTYzM0U2NwotOjEwRThCMDAwMkIwM0JFNEZFNTkxMzUwRUQ4MkM3NUVENzcyNEFENkI0QgotOjEwRThDMDAwMDRENUYzOTY0OTU4MkZBQjY3OEExRUE0QTFFNDcyNUI2NgotOjEwRThEMDAwMTJCNTJCOTVGNENEMUFFNUFGN0UxNDA4NEU1OUJENzREMAotOjEwRThFMDAwRUEwNzIwNjRDMkMxNUI2NkMzN0E0N0IzNTNGNEY1RjQwOAotOjEwRThGMDAwM0RGNDA3RTU2QTg0QzcyNDREQjVDQTRCQTk5REU2MDFERQotOjEwRTkwMDAwNTg1RkRBRDk2RTRBQkU5N0ZCOUJEMjMzNDkwRkUyM0M3RgotOjEwRTkxMDAwQTczNzA0NEEyMDRGQzBDMUVCRUU4NDQzNjg0REYyRENCOAotOjEwRTkyMDAwNTAxNDNDQzYxMzFDQjA3RDY4MzBDQzZEMkMyMkY4N0I5MwotOjEwRTkzMDAwQUJBODlGNkM5QjlFQjExRTM3MTVEQzgxOTI2QjUyNjgxMQotOjEwRTk0MDAwOUMyMEMzNkIwMENEMDNEMzI5QjgzRTNGRjU5QkVGNUQwMAotOjEwRTk1MDAwQzVGMEM4NEFEMTEzQzE2M0NGMjUwMjFFQkJFNzZDOTMzMwotOjEwRTk2MDAwMzc2MEJERUEyMjI5RTRDNEY5RERGRkUyOEM1MjVBNjcyMAotOjEwRTk3MDAwRjU0Q0I3MEU5OEFGRjYyOTBCNjk1QzA4QjhFMDMxQ0NCRQotOjEwRTk4MDAwODM2RkQxQkQ1MzMwNUY1REU5RDVENzZCQkNFRTQ1NTQ4NQotOjEwRTk5MDAwREUzNzMzNDk1RjhGRTUwRjNFMkYxOTk0QUYwRUI4NDMzMgotOjEwRTlBMDAwNDk5OEJGQjI1OUUwNDM3NUYzRDNDQThEOThGNjIwQkM5RAotOjEwRTlCMDAwNzM1M0JCNDBDOThDRTJDRUY5MDBBQ0UxRjk1NDRGM0EzNQotOjEwRTlDMDAwRDFGRjY1NkMxRjkwNDE5NzI3NjJERTExMUVBOEUzRkEwNAotOjEwRTlEMDAwQUIyNzg2MDcxMkJDNEUzRTlGMzQ5N0RBQkY2MkIzMDU2MQotOjEwRTlFMDAwNjg5QzU3MzY1RkJBMjkyODc1RURFN0E0REREQjQ0RUI1OAotOjEwRTlGMDAwM0Y4OUVCMEY2MEY5NkY5RkZGNzM4OEU4NjEyREQyODMyOQotOjEwRUEwMDAwOUM4MzdCQjQ0NjJCQTdGMkY1NTM0MEE1N0RCMUY2NkJGMgotOjEwRUExMDAwOEYyMzUwNDg3OEI1MjcyRjk5RjE4M0U2RTk0NTM4MUZCMQotOjEwRUEyMDAwQTc3RkY2MDJCOEY1MTI2RjhEODY3MEFFQjZCNUQ2MjlGRgotOjEwRUEzMDAwRDQ2RTRCMDZDMDE4Q0NCRjcwRjc0MDlGQkIyQjlDQjE2NwotOjEwRUE0MDAwM0RFRjhCNEIwMUM2NUY1N0E4NDcyODE4ODU1NzJFMTdGNwotOjEwRUE1MDAwRDJEQTMwNEUwMzZFNEM3QkFDMTZGMDg5RUZFNzRFQ0QyOAotOjEwRUE2MDAwQ0RGREFDNzA4NUY3RTBDRTQxQ0RFQTA2NTczNkUyOTE5OAotOjEwRUE3MDAwMkY1OUUzRUY0OUY2ODBEMTA3RTdFMzY4MkU2RkVEODM2NgotOjEwRUE4MDAwRTVEOUU5RjgxRkRBQjdDRDNENDJCNDZGRDlEOUUwN0JCQgotOjEwRUE5MDAwMjY0MUJGQUI0QzNDQjNGNkE1MjExRDE4MkZCMzNEQTJCOAotOjEwRUFBMDAwRkVDRjREQkFGOTg5NDk5NzVCQ0MzNDhBMkU2MkYxREVFQwotOjEwRUFCMDAwRURDQjI1M0U5MTlEMENCRUM2MDRFMzU5RUQ3MTdFNUMwNQotOjEwRUFDMDAwNkVDRDBCNUNEODRGMjZCNUQzNkM4Q0RGNzE3NDE3Q0EzMgotOjEwRUFEMDAwMkExRTQ2NzQzNzI1NTlERkVEMjI3QTFBOTYzQjJDMDhGOAotOjEwRUFFMDAwOURFMzIwMjQ3MjY3QTQ3NEM1MDM1QTA3RDEwRkFEOEIzMAotOjEwRUFGMDAwRThBQ0JCN0EwREJCMDQ3RjhBQzdDQjY3NEMzQUE5MjIyRQotOjEwRUIwMDAwNUNDNzc5NkY5MzkwMUUxM0VFQjNFOEE3REU5NjZCN0IxQwotOjEwRUIxMDAwMTBFN0ZCQTNGRDMyRjNEOUY4N0E1NkJBQUIxNkEwNzUwRAotOjEwRUIyMDAwMTA0MERFQzY2QjUzQkRDNURERDdEQjY2RDZGQjcxQURDRAotOjEwRUIzMDAwOEI1M0I3QUVBRDUxQjBGRkExMkQ1QUE5MEMzNDlFMzYwMAotOjEwRUI0MDAwODlDNjBCRTA3OEI0Q0YyOTEzRTE1MzE5RTFFMzE5REQ0RAotOjEwRUI1MDAwNTA3ODY3MkVFMTc5RTM1QzVBRDc1MDI1NkMyQjI1QkU5RgotOjEwRUI2MDAwRUJCNTQxNkJBMUUwREZFN0YwRkYzREU3MjY0M0FCQUI0MAotOjEwRUI3MDAwMzNERkNCOTcxRTkzRUY1M0Q5M0JBNjdFM0Y3RjVFNEM4RQotOjEwRUI4MDAwRjkyNUFCODdDNDk0RTcwNjg2QzVFNEYzRUJDN0M2RDQ4MgotOjEwRUI5MDAwMUZEMDMwMjkyNjNGNjhDMzc3NjJFQTBGMEU1RDFEOTNCMAotOjEwRUJBMDAwQkY3NENCRjc2M0VBMTczNzJFOEMyOTlGRjQ4RkZDRERGNwotOjEwRUJCMDAwM0YyNTNDQTdGNTI3RTA3MzU2MUFEMTcyNzlGRjg2MzZCOAotOjEwRUJDMDAwQzdBRTNGNzU3NEVDRkExNTg4MDBEMUZCQTRFNEJGRUEyOAotOjEwRUJEMDAwODlFOEQ5NEE1MzQxRjkyQzZDQjUyMzNFRTBEMjZDMEYzOQotOjEwRUJFMDAwRTIzQ0NBRkYyQzg3RDYyNzk4ODc4NUNGNTY3RTkyMjI5MwotOjEwRUJGMDAwQzc4QzZCRjE4OTBCRTE1NzlFRUZGQ0Y4RjI2M0MyMTdFQgotOjEwRUMwMDAwRTc3OUU2RkQwRjM5MjE1REFBQjk4MjBGMjhFMEU1RjUyNQotOjEwRUMxMDAwQTc0RTlDN0JERUY1REJFM0Q3MEYxQUUzQkQ4N0Q2OUZCQgotOjEwRUMyMDAwMDBFRkUzRDc5RjNBM0E3NjFGQUNGNUU3RjkwNjM3ODc0RQotOjEwRUMzMDAwQjE5RkNGRTc0QTJDNUZGNjUxRDE5OEFFRkRCRDFCQjcwRgotOjEwRUM0MDAwQ0VEOUFCNTI1OTlGMDFFRjM1MDlFQjc3Q0VFMzRFOUVGQgotOjEwRUM1MDAwQzdGNTRFRjAyNzgyQzM3NDEzMEU5NUI5ODJERTJGNDQ5OAotOjEwRUM2MDAwOUZFRjlCRjNGODFGQTI0RjRDREQ2QjczOTkxRTYxOUZDMgotOjEwRUM3MDAwMUMxQTgwNUQyREFDOTc3NkY1NDRCQzQ4RjdCOTU5MkYyNgotOjEwRUM4MDAwNUJBOEI0NDI2OTk0OUNCRkRGQTRFRjA3NERGQURFNTA0NQotOjEwRUM5MDAwQUI3MjNGMEZEN0U2NzBCQUIxNTZFM0VGOEZENDE2NzI1RQotOjEwRUNBMDAwMUFBQUQ1RjlGQkU2REFEMTlDM0U4QUZBMThBNThGRDdDNQotOjEwRUNCMDAwNEVFMzc0NEJBRDk3RUIzRDU5M0I5N0QzQTc2QTdERkM3MAotOjEwRUNDMDAwREREQTlGRUJDREZEMDE2RjA2Q0JCM0Y4RjVDQzVGOTU5OAotOjEwRUNEMDAwMTgyRjQxMkVFMkY2RjM5MUNFRTRGM0YwQjUyRUVERTVEOAotOjEwRUNFMDAwNzlBOUU3QzNBM0Q1MDc3M0I3QkYxQzg1MDdEN0U1QTZFNgotOjEwRUNGMDAwNjQxRUVFODFGRjE4MDVBM0NFQzkxNzZFRkY2NUFEQjY4MQotOjEwRUQwMDAwRkQ2NUZCODVFOUMyQzIxNzM4RkJFMTgwNDRGNUFFQTc3QgotOjEwRUQxMDAwMzFDNzIyQkZDOUREREMxMDcwNzcwRjlGNEUzQzhBQzMxQwotOjEwRUQyMDAwNTcyRkUyMkI3RTJEMjFEOURFOEJDQUMzQkRBM0M3Rjk5NQotOjEwRUQzMDAwOTNCOUNGNTY3RUU2NEM4MUFGRjFGRERFNkZFMkRGMkM1QQotOjEwRUQ0MDAwQzI0RjJDOUYxRDQ3QUZBNzczODVGQzNDOUQyQkY0RjQ0RAotOjEwRUQ1MDAwRkREREYwOEI3QjcyNkRBNkZDMTRGQjNFNkI5RkUwNEJFMAotOjEwRUQ2MDAwNzdGNjk4M0ZDMTk3NjA1QzI5NEY4QkExQ0ZEOTMzNjM2OQotOjEwRUQ3MDAwRjc3MUJGNURGMEI3RkQ3RjkyNDM2QjEyRUNGRjg1REE1MAotOjEwRUQ4MDAwNUJFQjg5NkZGNzI3NzNCRDlGRkU3RjQ2NkZGQkFGNEQyRgotOjEwRUQ5MDAwNjE3RDdFQkZEREQ3MkYyQjZBN0ZGNjVGREI2MzZFQTJCRQotOjEwRURBMDAwN0RGRkRGNUNCQkQ4QUY0MjE1NDhCRTQzM0ExOEE0MDdDRAotOjEwRURCMDAwRTE5MjAyMEVEMkU1QTA0MDNENEM3NDgyQzYxMEQxNDVDRQotOjEwRURDMDAwRjc3OEE5QzA2MThCOUU2NDgyNjcxMkVCRTM5RkNGNENGQQotOjEwRUREMDAwRTFGRDA3OUY2QTQwNTRGRkEwQThBQzk3NkVGQjJFRUFBNgotOjEwRURFMDAwMEEzNDlFODJFM0ExMUUwQUJBQUQ3M0ZGRjJFOEJGQzlERQotOjEwRURGMDAwOURGQzVBRUU5RURFMkU4NDA3MTYxRjk5NEQ3Q0U0M0M0NgotOjEwRUUwMDAwRjJCQTZCQkI4QkUzMjM4Nzg4OEY1Q0ZBQ0RGMzExOEI0RgotOjEwRUUxMDAwOEVFMUVDOEQwM0JDMjk1RENCNjcxMTFGRTkwREYwRDNBQQotOjEwRUUyMDAwRENCNzk5OEY3QzZEMzg1OTc0NkJFQTEzRjFGQ0E0REI2NQotOjEwRUUzMDAwNzZDRDk5MTc5MDdGMjYzRjU3RkNGNTYxQzQ4QkRCRTRCNAotOjEwRUU0MDAwOTQ4NkY1RDhFNDJFQzVGRjczQ0EwNzAyMEEzQzg2QTk0QQotOjEwRUU1MDAwNzNGNUU5REU4Nzg2NzNCNzg1MEFENzFCQzJGNjlENTMyMwotOjEwRUU2MDAwRjFGRjMyQ0NGNkEwNTNBNTdBMEZGNUY4RjdFRDk0NUZEOQotOjEwRUU3MDAwOEQxQ0QzODlFOTk3NDlGRDQzODBCNjQwNjk5RUUwM0ZFOAotOjEwRUU4MDAwQjJFQjRDRUY0MzUxRjNCM0FCRDAyNzNBNUZEQUVBRUE4NwotOjEwRUU5MDAwNzMyODZBREY4NkVGNTU2M0YyMjNEQTcyNjJFQThGM0FFQgotOjEwRUVBMDAwQTBDNTk0OEYwOTE3QzY5NDhGM0JBQUM3RTQyNzQ0NDY5MAotOjEwRUVCMDAwQzdENEJGRUM4QzExOTMyRjg3MkI2MkVBNTdCODY2QzQ3NgotOjEwRUVDMDAwRTRBN0E4RDdDNkQ0QkYzQzY3NDE0Q0Y5MTVEQTREQjFDOQotOjEwRUVEMDAwRkQxNTc4ODdFN0UxQkExNzNBRENGNTUyMkFEQTY5QjkwNQotOjEwRUVFMDAwNDYxOUU1OTM5M0FCRkQwQkM4NEU1QUUzNTE2MTIyRDUwOQotOjEwRUVGMDAwMEU4NTA4NkU3NTBFOTdCQTFFRjlENDA3OTJEMTFGMTBCMQotOjEwRUYwMDAwNEZFRkIzQTFENTlEOEZGNUU1MzA1MDdBRDBBNjk3NTIzQgotOjEwRUYxMDAwOUE2NzZDRjExMTlENkUyRjRDRDY2ODFGOTIwNzAyQjQ1MAotOjEwRUYyMDAwOTE5QzUyRjQyNDQwN0VFMkU4MTFGOTVEMDFFRENCNkYzMwotOjEwRUYzMDAwNkNGMDE4MjZEQjU1NTRGNEE5N0U3MzY2ODhFQ0RGQUNDMAotOjEwRUY0MDAwNjRERjE1MzQ4RkY1QjYwNkNGMUFEQTY3MUI3ODFGQ0I0RQotOjEwRUY1MDAwNjRCQ0ZBQzk2OENDMUY3RTQxQjExMTlFNkQ2RkIxRERGMgotOjEwRUY2MDAwMzMxNkYzOUY2MUY3MzI5NjM3QjU5REY4Qzk5NTk4MUYxMAotOjEwRUY3MDAwREE2NkQ3QTlGNjUwOTBEOTRFNUNBRUMwM0Q0QTdBRjcxMgotOjEwRUY4MDAwNzhGNkYxMEY4NDNEMTVGRkZENjc3OTgyREY2NzU1MDgzQwotOjEwRUY5MDAwM0IzM0JFRkM4RTNDMjFERjNFNzYyNDJFNUY2RUI2QUY0NwotOjEwRUZBMDAwQjg2QkZBNDNDNEQ3RUM2RDc2MjBCRkM1QUEyQ0EzMjc1MwotOjEwRUZCMDAwOUM0RjVGM0Q5MzBGQTFFMTUxNzlDNTBCQUE5QkJFMEZGQQotOjEwRUZDMDAwRTRFRjE1NzdDRDgzQjA1QkY0NDM3RUFDNTU0OTQ2NEZGMwotOjEwRUZEMDAwRjIzQjdDM0MyOUYxM0M2RTMxRTc2MTNGRDNBMzlCN0U0MQotOjEwRUZFMDAwM0RGQ0ZERTNCQ0YzQUZEMzdFMjYwOTQyMTk4OURBQkJCMQotOjEwRUZGMDAwRjk3QjU2MzA3MUZCN0JDQ0YxM0Y0RTRGNUM1RURGRDEyRAotOjEwRjAwMDAwN0YyRjA4NjQ0NEI3MTM3Q0E3NzM5Q0JFNUM2RTNGOTM0QwotOjEwRjAxMDAwMDY4MTg0RUJDOEU0RUY5MDYzRTQxMERFRUM0MjNBMjcwQgotOjEwRjAyMDAwN0U1MTlFOTZFRDAwMjRGMUY5MTA3OUM1NDBGOENGMjA2RAotOjEwRjAzMDAwOTMwMEYxMTQ1QzdBMjlGMTI5NTBFQzkxQjA0NTE3MjgxRQotOjEwRjA0MDAwM0YxNjgwRjIwMUQ5MEIzNjQ0QzY3MzM4QjUxQjU2REIyOAotOjEwRjA1MDAwM0YwODQ3RDFEMTBDMjMzNjBGNTQzRjRBREU3QzQyN0QxNgotOjEwRjA2MDAwRTM3QTkyODcxNEE2MTJCRTlGMDIyRDU1NEQ4MDVGNTZGQgotOjEwRjA3MDAwM0FDRjI1N0I5NUE4RjUxQ0VDNDY0RjZBMzNFMTc4QjA3MgotOjEwRjA4MDAwNTc2MjM4M0U2RkYyQjE5MUYzMjBBMUJFRDY5NkU3MTFEOAotOjEwRjA5MDAwNzY1OUExREVGMzdDNzI4M0UwRUJDQjg4RUUzNzdFMUZERQotOjEwRjBBMDAwMzJCOUZDQUJDMjE5RjE4MkU1N0FFNEJCRUUxMEZCMjk2MAotOjEwRjBCMDAwQkY3MTc4NUJGOEREMjcwNjJGM0VDOThGOUY3NzdGMkVDMwotOjEwRjBDMDAwMkZFOEVCN0QyQjhGRTU4QTM2OTBFNDYyOTM0OUJGNERBNAotOjEwRjBEMDAwOEFEMTYzOTg5QkY4MTg1NDI2ODI3RjlGN0M1MzRGOEQ2QQotOjEwRjBFMDAwNUI3NzEzMTgzOTBCQzhBRkExRDg3NUUyNjdDOTMyRjgzRQotOjEwRjBGMDAwOUY0RTAwRkZGODc1QTc5QUYzQzZGNjczNUJBOTNENzg5QgotOjEwRjEwMDAwNzRDMUU3QzBFQkNBNDYzRDlGRkU4NTRCMjgwRkJDNjkyMgotOjEwRjExMDAwQTdGRUU3RjkzREZBN0E1NDgxM0VDRjEzRkFGNDAyMDhDQwotOjEwRjEyMDAwREI4OTBGNzc4MTlGM0JEMzRFN0VEQjc4Mzg3QTQxOUIxQQotOjEwRjEzMDAwMkZFNTVGMTg5RUU5MDVDNkU3MDQxRjlCNEJDRERFOEFDRAotOjEwRjE0MDAwRUI5QzFGRjAwMEY5Njk2RTk4MDc5RTYyOUM4RkVGQkJFNQotOjEwRjE1MDAwRTk2RjE4NTg3N0UxNTU0MzRBRDY1MjdBRTlGODNBOTk1NwotOjEwRjE2MDAwNUI0RjY2QkQ0RjBBRjQ5MUNGNURGQUQ1RjVCRTNBOEY3RAotOjEwRjE3MDAwQUY5MEU4RTM5MEE0MkQ2MTM4NDgwODA3OTIzN0JEOEYxRgotOjEwRjE4MDAwMEY1QzEwMDVDNzE1RkRDQTdGOUY5RjQ1RTcwMzYwNjRBQwotOjEwRjE5MDAwOTBCRjc4ODc5M0ZENTZCMDAxNTgwRkFERDkzOTc4MTNEOQotOjEwRjFBMDAwQzk4NTJGRjI3REFGNTFCRDUxOTM0REZGQUQxMTE5NzgzNwotOjEwRjFCMDAwNzVDQUM1QzMwQkZGRUM0NDI3MTc4Mjk3NkNEMkZCNDE3RAotOjEwRjFDMDAwNEY2MkJDMTk5NzJGRjZFQkFCRDI0QjY2QkU4MDQzMDQ1RgotOjEwRjFEMDAwRTFCMEI5RUM5QkE3MTc4NDVGMENGRjc4MkQ1RkYwNUY1RgotOjEwRjFFMDAwMkJCNUUwMzY2QTVBQUM3RkY3MzU3MzFEQUZFNTdCMzgzNwotOjEwRjFGMDAwRkQyMkRGQ0I3MDZFRUZGN0U5RTEyNDkyRkYwRTVDN0YxQQotOjEwRjIwMDAwMDJCQ0Y3NzY0MzM3RERBREJGM0I3QUY5QTZGOEYyQzExMQotOjEwRjIxMDAwRTRDNEYzNUNGQzJEOTlFNzFCMzQ0RkUyRjMyNTg5RTc0NgotOjEwRjIyMDAwRjk2RjE3ODk0RkI4M0Y0QjVDRjlERkZDM0NCRkM4MzcxQgotOjEwRjIzMDAwREVDOEE3NzlBNjI3OUVFNzRGMkYxMjlFQzhFQzk2QjQ4QQotOjEwRjI0MDAwNjJCREQ5QzgwN0E5REUzNzNENUYwODJDOTg0MjcyRTgzNQotOjEwRjI1MDAwMUE5RkYwRkYxNzIzQzcyNTNFODQ1Mzc5RjREQzcwRDI0MAotOjEwRjI2MDAwNkZGNTc1MUI4OEVGQUNGNEU4MDE5NUY5QzgxQkY5ODJCRQotOjEwRjI3MDAwMEY4MjgxRjM5OTM5NEQ2MjdGNTJGQjg4NEY5NzI4ODQyMgotOjEwRjI4MDAwRUZEOUQwOUE0NkZDNkFBNzkzRkREOUYxRUIwRjk5RUIyMQotOjEwRjI5MDAwNDczQTc5OUNFMDA0RDMyMzAzODk5RjFDMUM5ODk4NEYxQwotOjEwRjJBMDAwM0MxRTVGQkYzRUMyRjI2OTdENzk2MkZENzQ5QjQ5QUYyRgotOjEwRjJCMDAwMkI1QzBERDNCMjZERDFFNzJCQjg0MDk5Qjg2Q0MwRTg4OAotOjEwRjJDMDAwNDNGMkI2NEM1RDRCRkNDNDgxNzI4OUUwRUFFODMzQTQ5QQotOjEwRjJEMDAwMjdFRDA3RTZCRDEyRjk4MTczNUUzRjIwNzkxOERFMjcxRQotOjEwRjJFMDAwM0FFMDk3RDczOUNFRjFEQUJENkE4MUJEN0I3RUJFNUM0QwotOjEwRjJGMDAwN0U2NkE0M0ZDMTdBQjY2QUJFNURGOTUxNzZFM0YyMkQwRgotOjEwRjMwMDAwQUZBQTA1RDFGRTcxMDhEQjgwMDU0N0M0RTZFNUYzNDFFRAotOjEwRjMxMDAwRDM2RkQwMTMyRUNBNkY1MDlDMjlFODY1NDUzRjJGQ0I4MQotOjEwRjMyMDAwMDc5MjFCNjQzRkQ3QkQzMEE2OTQzNjE3RjUwRjIwRkIxQwotOjEwRjMzMDAwMjA5MjkyQ0NGMjIyRDg3QjZDQTExNjA1Q0YwRkYzMkQzMAotOjEwRjM0MDAwRkQ1M0VFNDZBRjc0QzQ3QzdGQjdENjg1MjY2NTY3RkU1NQotOjEwRjM1MDAwRkFBM0ZCQTY5MDNFM0YxRkMyRUJBOEZFRkM1NTNERTg3QQotOjEwRjM2MDAwMDhCMjYzOUQxREZEOUQ5MTYyRjREQkNFRkUxNUZFNUUyRAotOjEwRjM3MDAwRUU3MkI3Q0E0MzMxNzVGRjJFRTE3RTZDRDU4Q0EzMDRDMwotOjEwRjM4MDAwQ0ZCNUZEOEM2M0I0Q0U3OEY4MDVFRTFBOUZDNjdFMDQyNwotOjEwRjM5MDAwODJERjY1NURGN0JEQkI3REZFQUI2NjlDQTZGRTVFRThDOQotOjEwRjNBMDAwQTc1QTdFMUQ5RENGRTM5MkFERjM2MTQ1M0RFQ0VBODQwMwotOjEwRjNCMDAwRjc1N0REOTc2NEQzQkY4OEZBQzQzOTlBQjcwMTU1N0VGMQotOjEwRjNDMDAwOUFDRjNDOEJCRUUzRjQxQzI4MTRGRTgwM0E0RkRCQkE4NAotOjEwRjNEMDAwNUQ1MTc0Nzg4MzJEOTIyNUU0NzY3ODFEMzk5OUZFNjcwNgotOjEwRjNFMDAwNDcxMkYzOEZGNjFEQkZFREU3RTNGMzM0NEJFRkU4MjE0RgotOjEwRjNGMDAwOUZFQkYxRDVFNzY3RjkxN0VDQzk4OUY1NjlFQjFDNjM1OQotOjEwRjQwMDAwQjdCREE4ODBGNTEyM0FFNzFEOEQ3OTQ5NUI0NEY2QUE4RAotOjEwRjQxMDAwQTI4MjFFQzRGNTk1NUY4RUQ4ODRGRDREOTJGQkI2ODQwMgotOjEwRjQyMDAwNzExRDlGQzNEOUU0MDk5OEZFMjc4OEY1QUY3QUYzQTMyRAotOjEwRjQzMDAwNzRGMjYzNEU1MkVDQzdBM0Y5NTNCQzFGNjg0MDQxQUM1MQotOjEwRjQ0MDAwM0ZGOTE0Q0M0QjZEMjVCODhDNEY2N0I4NkM2Rjk5OTQwRAotOjEwRjQ1MDAwNEFGRDk0M0MzRkI5MjdBNUJCNkFFQjU1QzVERUU5MEZEMQotOjEwRjQ2MDAwOEE5RjdGNzkzNzc2RTlCMDAyQTE3N0JFOUU2QzBDMkIxQwotOjEwRjQ3MDAwQzBCNEJDOUJGNThGMzJFQjg1OTM4RDUxMDU1OTlERkQzMgotOjEwRjQ4MDAwNTFGRDQ0RjExMDZEODMyQzNGQUU4MEVCMzU4MTA1QUMwRQotOjEwRjQ5MDAwNkZEOTVDQzg1Nzg5N0ZBMkZFMkFBQkU0MjcyQ0IwMzMxMgotOjEwRjRBMDAwQkQxQkEwQTlEOUVDMzcxNEZCOEY3QzVEQzFGQzA0MzNENAotOjEwRjRCMDAwMkZENUJGMURBNDc2MUI2RkYxRjAzOTM4RjgzNDIwRjkzMQotOjEwRjRDMDAwODA4MEUxNzM4MTNBQzlDRjdFMDcxN0M1N0Q2MEJBNUUzRgotOjEwRjREMDAwRDIzNzkwMkUyNkRCMjIxOTgyMkU0MjIyQUUwMTdDMEFFMAotOjEwRjRFMDAwRTU3RjJCODU4MzE0MjdCMEQ2RjVFRjNGMjczRkI4MTE3MgotOjEwRjRGMDAwNTQyMDY5MjJFNjE1NjAzRjYzRTA2MDBBOUZDQkYxQ0M5RgotOjEwRjUwMDAwNzAxRTRFNkI1RTY2M0VDNUNDQjdDRjlBM0E2RDAwQTZCNAotOjEwRjUxMDAwQjcyNTNGRTIyMTNDMEQ0QkM4NDdCMTlGMkY5M0ZGQkQ1QwotOjEwRjUyMDAwOTVFOUM2OUZBQ0RCN0I5MzdGRTkzRENFNEIyQjkzNzU3MgotOjEwRjUzMDAwMjk4N0ZDNEY5RTQyRDI1MzU3NDNCMkVFQzQ3MTBDNzdEOQotOjEwRjU0MDAwNzE4MEM2NzU2OEMwRkVGODY0NjhFNDc1QjhERDlGMDQxNAotOjEwRjU1MDAwMDgyODJBQTgxMkRCNEZDOUJFNjUwNTZDQUYwMDlGOTMyRgotOjEwRjU2MDAwMUY3RTJGNjUzM0FEM0Y0OTNERDU3QTA3N0VDQTAwODNBNAotOjEwRjU3MDAwRUI2NUM0QzlDNzJDRjcyQTg5RTMzN0JDNEE5QzVDRjQwNQotOjEwRjU4MDAwNDkwNEZGOUU3M0UzQkZDN0NBNEIxNzFDNTQ4OTlGNDhBOQotOjEwRjU5MDAwQURERTlDNzNDODlGREEwODZFNjU5RDcwNkI1Mzg0NUQwOQotOjEwRjVBMDAwNjdDMTJEMzBDOUZGNEI4MjZCRTA0RUE3MUFDQ0VDREU1MQotOjEwRjVCMDAwREY4NjAwMUE0NUZBNzg5QkJBNjQyQkQ1NDdDMzA5NkNERAotOjEwRjVDMDAwRDQ1RjhFNTg1RkEwRDIyOUY2NDFGMTZEQTVGNkVGRDgzMQotOjEwRjVEMDAwNzM1NEIyN0IyQzNDN0I2OEEwQzlBRkJCRjE3NzNDNTAyNQotOjEwRjVFMDAwMjBGNEEzRUFGNEMzRDUyNEU3MDAwN0I1RjUwNzM4OTk1QQotOjEwRjVGMDAwNzI3NDI0RjEwRDk0OTdGNTI0MkY5M0VDMDZDM0RCOTJEQgotOjEwRjYwMDAwOUIyQjlBRDYwMEQxNTU3NUYzMDIyMEJFRjI4RUU0MUJENwotOjEwRjYxMDAwRjAzMkRCMjNDMDc2RDk5QzY5ODE1NzZDMUFGOUIyNjY0NwotOjEwRjYyMDAwQUU3MzYzRkE0OTQxMUVFM0Q3RkU1N0E2QkVDMjZDNDhDQgotOjEwRjYzMDAwNzYxNzUzQkJEMkNCQkM1M0IyNzBEQzYwMzFFODc3NjIzMwotOjEwRjY0MDAwQkQ2MDkyNkZFQkIzQjRBRTM3NjVGRDMxOERFMjIxMkExOAotOjEwRjY1MDAwRTBDM0UxMjYzMkUxRjc0REIzMzNEODZGOUE1OTExQTlDRgotOjEwRjY2MDAwQTM3ODgxQzhEREEwNTI3QzRGMTdGQTM4OEJFQjFCMDlCOQotOjEwRjY3MDAwRjAwQjFFMEJGQjU5QTRCNjEyRkVGNDQyN0M5M0Q0Q0VDMQotOjEwRjY4MDAwRjI0N0E5M0M1RkU0MkZDMzdDOEREODUyQzg2RjI5RkY5NQotOjEwRjY5MDAwREUwODgyNDc5QjBDMTQxNjU1RDMyMkQ5NjhGQ0ZDOTlDRQotOjEwRjZBMDAwQzM1OUFGMjlBMEYyQ0NFOEYyQjRFNTRGNjFCRTYwRUVEOQotOjEwRjZCMDAwMDQ5REM4NDlCM0Y5N0U3NjJCOTVCRjAxQkMwRTMwRjk4NQotOjEwRjZDMDAwRjdBODM4RkExREQ3NDkzNzVDNUVEQTkxRjc1N0QwN0MzNgotOjEwRjZEMDAwNUZCOTE5RDg4RUFEMzFFNTZEMENCREQxNjJCMUNDMThEMgotOjEwRjZFMDAwNDlGOEQ3RDEwRjUwM0YxNTY2N0U5Q0EyNzIzRjdERkQzMQotOjEwRjZGMDAwNjBGMjA1RUZDNjA3Rjg5Q0MwQTY5MzdGQjI0RTZBNjAyMQotOjEwRjcwMDAwRjg0MEMwQ0ZGQTFFQzVDRDEwQkRGNDlGQjc2QkI3OURCMgotOjEwRjcxMDAwMDZDQjE0NzRBN0VGMTU3NDU3MDY1RTk5RTAzNTUyQkRGOQotOjEwRjcyMDAwM0I0OEUzQ0Y5OTk3Q0I3QzY2Q0M1MTYwQjgzMEU1NjExQwotOjEwRjczMDAwN0U0MjlBQzRGQjk0M0YyMDlGRjE2NUJDNEJBRjk3MTE2QQotOjEwRjc0MDAwOEY2NEI5MzQzRjA5Qzc5QjNCNEZFMkYzODk1OTczNUQxRQotOjEwRjc1MDAwMjEwOUZGMzkwQkU5ODNFM0ExMTQ1RkVFNkNDNEY3Mzk4QgotOjEwRjc2MDAwM0U0OTlDRkI2MjdFNUU5NDNGMUVCNTYxM0UzNzlCRUQzOQotOjEwRjc3MDAwMDRGRkQzMDlGMDM5N0Y4MEMwNzdBQjdEQ0Q1QTQ3OEMyOQotOjEwRjc4MDAwN0ZFNzkyMDE2RUUxRTcxODMwRjU5MzAyRTZCRjIyQUUwMwotOjEwRjc5MDAwMjUyQkQ5MUIxMTdDQTM4MUY5RDQ2MTFCRUFERkE0RkZCRgotOjEwRjdBMDAwODJDMUZBRjYzNTI2QkQ1QkZDNjI5NjcxMEJEQkMxQjNGNAotOjEwRjdCMDAwQkNCMTdBRjQzQkI0Mjc0NDA3RDc0QUFDRTdDRTk5N0I3NwotOjEwRjdDMDAwN0UzREZCNUM4MTY0QzZEREY0NTU1OTlFOTlERjM1RDBFMgotOjEwRjdEMDAwRDg5RUJFOUFGNDlDMTJGQzM4MERGNTkwMjhGRDdFREU3MgotOjEwRjdFMDAwNkQ2N0QzQjg3RUNGQzc1NzlDQkIwNDUxQTE1MkYwOTcyOQotOjEwRjdGMDAwMUE4NDI3RjFDQkYyNkIxNUE2OTdFQUI1MEU4RUZGQUFGNQotOjEwRjgwMDAwNjk1RTYzQ0YyNjdDRkUyMUU4MDI1RkRGQUZFQjgzRjMwNgotOjEwRjgxMDAwRUM1MzY1OEM5MEI1MjhCRjRENTU0ODIyQkFDRTI2OUUzNAotOjEwRjgyMDAwQzNGMDhGMzhDODJGMzdEQkExNTdEMUJBNjZBNzgzMUEyOAotOjEwRjgzMDAwNDg0M0JDQkNGNjhBOERENEZGNUExN0E4MzJDQURCREUxNwotOjEwRjg0MDAwMkQ2Rjg2MDhBRjkwOTVFQjg0OTM4ODM5MUNEN0Q2NTdENwotOjEwRjg1MDAwRURDMUU3MEJGNUI2NjExQ0I3NTVFRjQ5RDFBM0UzQTRBMQotOjEwRjg2MDAwRDZBRkU5QzQzQjhBRDdEMjlDMzA0QzM1RjczNzkxOUQ0RgotOjEwRjg3MDAwMzQ2NDgwRTA1NzBGNEFDMEYyMjI3MEFEOEJFMTlDOTU1MgotOjEwRjg4MDAwMkZFMjk1QjI1Mjc1NDczMDhERjg4RDY2RDVFMzM4QkJCRgotOjEwRjg5MDAwMDdFREJFNUVDMzMxMERBMTVBMjlGNjQ3QjQ4QkE3RkIxNQotOjEwRjhBMDAwQUMwQ0IzOUYxRTlBMTQ0NDYyOUNEOTUyNUE2NjIzQjg3QQotOjEwRjhCMDAwQjk1Mzc0OEE0RkI0RkFBRDQ4MzZFQ0M0QjcyQTg2NDhCNwotOjEwRjhDMDAwMjM4MjBDQ0Y0RENBMjJEMjRGOTM2MkY5QkVERDJFRjZCMQotOjEwRjhEMDAwMDVERTE1N0MzRjVFMEVBMjFDNjBCRTRGN0VGQjYwMTlFQwotOjEwRjhFMDAwQ0JBRjhBMDE1OTJDMEZCODlGRDU4QTRCNzVFQUQwNDUwQQotOjEwRjhGMDAwOUU2NTdBMjE4NUZDNUNDMzEwNjRBNEFGQjdFNTc4Njc4OAotOjEwRjkwMDAwNTBGQzVFRTA3NTg1RkQ2QTY1NzNGNUVCMTY0N0VERUIxRgotOjEwRjkxMDAwRTYwRTM5MTA5OUNGRjE1MDNGRDRGQjUwM0NENERBRjJDNwotOjEwRjkyMDAwQ0UzQ0M1M0Q1NjQyODM4M0YwQkQzMjRFM0UyRTczQkY2MgotOjEwRjkzMDAwQ0M3QUU0QjI0N0VEOURGODBCMTQyN0FBRTcxM0ZGQTg5MQotOjEwRjk0MDAwN0FBQThCM0Y4OEY5NTQyNzNGOEJCMzJGNDE3RDg5RDYwNAotOjEwRjk1MDAwMzMwMkY5MzFGMTIxQTMyMDQ1NjZGRjMyQ0MxMzcyMTQzMgotOjEwRjk2MDAwMUU5N0M4MkYyNjdCNTZENzkzREM2Qjk3NTIxQUU0QjJBQQotOjEwRjk3MDAwNEUzRTM5QzJEQ0FGQkIxNEVGNEIxNDFGMUI0MDdERTk3OAotOjEwRjk4MDAwMzExNUJBQ0EwMUYwQjNGRTMyMTFFNTI2RTlEMTUyQ0JFNgotOjEwRjk5MDAwMUM5OUM2RERCODE0RkJBNkYzN0MyNTVDNDFGOURCOTYwNwotOjEwRjlBMDAwOEE3MzUyMDhEQ0NDRTc2MEUzMDI0RTk1RThGRkNCRTRCMwotOjEwRjlCMDAwRkU2QkNENzFGRDc2NjRENkM3RDQxRjcyN0Y4MEZCNDI4QgotOjEwRjlDMDAwN0E4QjQ0RkMxMENCN0I0RkMzQTY0ODA3RTM1QThFNzA1QQotOjEwRjlEMDAwN0YxQjMzMDQ1REM0RUIzMTJGREJEQzIxOUI4REY4NkU4NAotOjEwRjlFMDAwODBFNTRFMTI4NDcyMDg3RTQ2ODFFMEIzNjUwNzA0OUY2RAotOjEwRjlGMDAwN0QyRTgwMUFCNDRDQUFBQ0ZGOUFFOUI5QUMwNzcyRjkxMwotOjEwRkEwMDAwRDgwODcwRkNDQzBFRjA1NTlCRkFDRTVEMDM0NjUwQjQ3RQotOjEwRkExMDAwQTg1RkYwNzE1MzVGQjBGNEI4Mjk3MUZCNzhCOUZCN0UzMQotOjEwRkEyMDAwODVGOEQ2RTUzOTVERjY0QkE2RkVBNzgxQzRGQUUyMTU0NgotOjEwRkEzMDAwREFGOUY5OTY2MUYxMjU4OEU1NEJCOTcwOTZGNzBGRUU4MgotOjEwRkE0MDAwREU3MzJCRjkwOTgyNzE3QTUwRjAyMkY1QTA1RUI5QkVGRgotOjEwRkE1MDAwNUZEMEZBRTJGNUExRUVFMjI5OUYxQTcwNzFGMTk0QTg0NQotOjEwRkE2MDAwNDFDQzI3RjkzNUQ2QjJCM0UyRjBBNzdBQ0ZGMUY5Rjc1NgotOjEwRkE3MDAwNDAyN0RFNzVFMDczNjBEMzc1QjQwRTk0RTcyQUQ5N0QxNAotOjEwRkE4MDAwRDI2RjFFNjJCQTVFOEJGNUU0RjEwNENEODNDMUZGQzI3MgotOjEwRkE5MDAwN0NBQjBERkMxNEFGMDAzRUY1MzRFMUE5MjU3NzkxMTM0MgotOjEwRkFBMDAwMzE5RUQ0MkQxNjc4Mzc0QTExRjlCRUE4QzgxMjVFMDZDOQotOjEwRkFCMDAwNDdDN0VCRUJCRTVDRjI0NzFCNjVDNTFDMUY2QkM5RTM3OAotOjEwRkFDMDAwRTEzNjgzRjE2NDA0RTgxOTU0Q0ZDMjkzOTE2MTUxOEVGOQotOjEwRkFEMDAwRjhGMTFBRjE5MzcxRDMxMDVGRjIyOENFNzY1NDFGRDI0OQotOjEwRkFFMDAwQkJDQTQxNjNGQzI4OEY5MzZCMTVFRTk5MEFEMTc5ODVDNwotOjEwRkFGMDAwMkI3RUZGMEQzRTc3OUM2Q0UyQzcxNEY1RUJFMUM3MjUyQQotOjEwRkIwMDAwODQxRjk2REM0MjNERjlBRTM4RkJFMkFFMzhGQkUyMkJCNwotOjEwRkIxMDAwRTBDNzkxOEJDMThGQzg0NUUyNDdCQkZEODdFRjA1Q0E5RgotOjEwRkIyMDAwRDg5RUY1Q0JGREJCRTI4N0Q0NzJEQjkyN0I4OERFODM2NwotOjEwRkIzMDAwMjk0MEZCRkU3NDkyNUFFMUM2NzlENjU0OEFCOEYzRTFBMwotOjEwRkI0MDAwQkYyRjA4NTIzRTdCNDUyRUVCODU0RkE3RTkyRjcxQjk5OQotOjEwRkI1MDAwNUY5NDk3QjUxOTcyMEFFNkYzNTc2MTM5RTY5RkNFRjVCRgotOjEwRkI2MDAwNTY1MEJFNjYzNTk2NjNGRDExRkI3QzQxQ0ExN0ZDNTBBQQotOjEwRkI3MDAwOTQ5N0RFRTk3RjI5ODVFNDdDNDBCNDdGRTE1ODlERUNEMQotOjEwRkI4MDAwQzFGMjUwOUREOUJFQkNBMTgyRjIzNUY1QTJGREM4MDNEOQotOjEwRkI5MDAwQTEyMEU1MDdERjIzQzZCN0Y0Q0VDQjRDRkVGOUI0NzQ0MQotOjEwRkJBMDAwRUFBNURCQTkzRkU0OUY5QjkxN0Y4RTNCNjE5NDZFQzNFNgotOjEwRkJCMDAwRkMyMkQ1NjYyM0JDNUQxQzA5RDgwOTFGMEVEQkFBNDZCMgotOjEwRkJDMDAwMTJGRUMwNDI1RjBFRTE5OTkzRUM1NkI5OTM3RkQ5QzhGQgotOjEwRkJEMDAwQTk4M0VEMjYyQTc2RDZGQjVFOTVGQzBBRDU5QjQ2MjRBMgotOjEwRkJFMDAwNDE3Mjc2QjRFRTIyRkU0RUYxQzg5QjUxREUxNDk5RjJCQQotOjEwRkJGMDAwQzg4QURGQTU3QjA0MzNBMkY2QUI2OEEwOTBGMzU2QkQ5QwotOjEwRkMwMDAwRUM3NDgxMTdGMEIwQzAwQjJCQkVCOEY1MjE5MEM4REZBMwotOjEwRkMxMDAwNDI2QjYzM0Y0NDk3Nzg2MzNGQ0JFRjUwQkZFMjYxODQxMAotOjEwRkMyMDAwQjc5NzUzOUMzMTk2NUYzRTU2QzQxOTk3OUUzQjNEMzUxRQotOjEwRkMzMDAwOTE1RDM0N0NBMEIwRTc4RjlBRjcyMkFDRUY5NUExNUM4MAotOjEwRkM0MDAwMUJEMUNGRDM4NDNDQkQwOTlFREExRjQ5NUY3QTlBQzY4NwotOjEwRkM1MDAwMUFDQjIwMERDMDY4REE0NzkxMkY3RkJDRUY3REY1N0Q3MAotOjEwRkM2MDAwMDE5NkRBRkMwQUUxMTFGNDk3NzQ5QUZGNTU2REZFQzkwQQotOjEwRkM3MDAwQkM5RTJBODBFRkY1NEFCMDBFNTNERTJGMDkzQTM2OEIzMAotOjEwRkM4MDAwMzgxMUMxN0Y2Njk5RkI3NjRDOURGN0NBRUQ2QzNGN0JCRQotOjEwRkM5MDAwNzQzQjhFMzM2OUZDMDBBNkZCOTk3MzI1OEJFRUJGMzM1MgotOjEwRkNBMDAwOTBGNDYwM0FDMTYwN0ZCNjhGRTNERDZGODI5MDgzMDY4NwotOjEwRkNCMDAwQjkyOThFRUU5N0JCM0Y3QjhGRTREMkYyMkRCMTc0QkQ5NAotOjEwRkNDMDAwMDI1QTFEQzJERjFDNzlFNDZERUNCRjcyNDM4QTRBRjIwRQotOjEwRkNEMDAwNjc0NTYzNkNCRENBMERCRjNGMjA5NTc0RTUwMzk1MTY1QgotOjEwRkNFMDAwMUYwOEM1RjIwMTU0MzgwNDFGNzg2ODA4OUY3RkFEQ0MwNwotOjEwRkNGMDAwOTFCNTQzMTlFNEZGRjBCM0JDNEYwMjIxRUZFRjUyRjQ4QQotOjEwRkQwMDAwMzBEMzVGOEI1M0Q4NTFBNjdFN0U5QjJDRjRGMzI0NzBBNgotOjEwRkQxMDAwNjlFRTQyRTJDMzM2MzM1RTU1RTRBREYxMjEyRUNFRTUwNQotOjEwRkQyMDAwNTRDM0NEQ0M2RkFDNzgxODA0MjBDQkZCNTM4MUNCRDUxQQotOjEwRkQzMDAwNjgzRjVCMDc5RjhGQTNGN0QyOTY5RUFENzRERkMwRjIzQQotOjEwRkQ0MDAwQjNBMDdFQzBGNjE1MkM0MjRFMzc4RUY5MTBFRjlCQjQ0RgotOjEwRkQ1MDAwMENGRjNGODZENkU1RTA3NTNERDRBMzNGRjNGN0Q1NDhDOQotOjEwRkQ2MDAwMTBDRTUyQjI4Qjk1RTI1NkVBNzM4OEEwMjcxN0QxMTFCNAotOjEwRkQ3MDAwRjFGNzY5QjFGNjU2MTIwODNEN0U3ODlCRjBFMzhDRTgwNgotOjEwRkQ4MDAwOTRGQjc1QjRCRjRFRDA1RDQyRUUzNzAwRDE1N0I3RjY0NQotOjEwRkQ5MDAwOEE3QjU1NDI3Qjg1MjUxNEY2M0Y3QjlBRTBFQjE3QjJCMAotOjEwRkRBMDAwNTdCQUIzNDczQUY2MzMwOUY1MzY0QzY3RkE5MkI2RDNFOQotOjEwRkRCMDAwQkEyRjNCOUI5QTkyMjg5RTZBNjZCOUVDMjVCQjZDQTYyQgotOjEwRkRDMDAwRERDODRBNEZBMEU3M0Y2MEVBRDkxREY1N0Q2RUVFNEZEMgotOjEwRkREMDAwRjE2NTZDQTdGODI1RUNCNzk1Rjg3RkRCRUI4RTg0NzFBNQotOjEwRkRFMDAwQzk4QUQ5QkY2MjM3RDQ0NEZENUY0NTRFQTkyODdGQkI3RAotOjEwRkRGMDAwRTJDQkU2N0VCRjAxN0RFNTc5REE5Nzc4NzlFNEQ4MUQxQwotOjEwRkUwMDAwNzc0RTA5ODE4MUQxNzEwNTRGMEYxMkZDNkU0MjgxRjE0RAotOjEwRkUxMDAwOUI4MTc0NEU5NEQ0OUZGOTlENTY4QUY2NTQxRkNFNzNERAotOjEwRkUyMDAwN0YwNzZGQkU5Q0UzMjQzRTAzRTM4MjcxMTI2QkEzRkM0OQotOjEwRkUzMDAwRTcwN0QzMTI5RjhCQkM2MUYyRDcxNDhBN0RDM0Y0NzY5NwotOjEwRkU0MDAwQ0RGODAzOEQ3RkQ0MjFDRTVEOEUyNjlCQTk0NzlDNUI4OAotOjEwRkU1MDAwQkREMzUxNUZGMEM3ODhDNTI3NkRBMkZDNjg3QUVDNzlFNQotOjEwRkU2MDAwOEQ1NUVGOTREOUVFNTBBRENCQkIzNkNBRkZBQTNERTQxOQotOjEwRkU3MDAwRjQ5MzlDQ0VDQTM3RUY3MUFDMDJCNjlGREI5RjRGREI4OQotOjEwRkU4MDAwMTRCREFGNjcwNzk2QTcwQ0EyRjhBMjdDQzNEMThCRTA4NAotOjEwRkU5MDAwRjhCQzkwN0ZENTRBRDg0MUZCRkJGMDI1QkVBMzM0RUZEOAotOjEwRkVBMDAwNkEwRDhDNjdBODFGMkRFQ0I4QTY5OEVDMDYxMTFGRDIxRQotOjEwRkVCMDAwNkUxNzc2NjA3QjkyNDhBRDc5OUQxRDM4MjM2NTEwOUQ0NQotOjEwRkVDMDAwQ0JERTFDNjZCRUQ4OTE5RjExNjZCRTc3NzZBMDk3QzcyMQotOjEwRkVEMDAwNkQ5RjY1OTU5QkY5RkYxMDc5MEQ1NDlERTY1QkVFMzJBMQotOjEwRkVFMDAwRUQ4NzQyNzUyREZCNUQ1MUVGMjNCRjRERkNGOTAxQzAzRAotOjEwRkVGMDAwNzhBMTFGOUJGMTlFNDZERkJGRjMzOTVFNzc3RTdFOUIyNAotOjEwRkYwMDAwQUJFRDk1RkZDMkVGRjM0RDdGQjBBRkY5RDM1N0VFRDAxNQotOjEwRkYxMDAwMTg3RjBFRDNCODBCNDI0OUMwNzFERkZGQTQ1RkJGQkQ4RAotOjEwRkYyMDAwNUYxQkFGNjc3RDc5QTRGRkMzNjUxQzJGQzA3RUI1MTUyRAotOjEwRkYzMDAwMkRCRjY1QkVCRUMyQTJGQkE2NThCQUVGNjVDMkYxNDI5NAotOjEwRkY0MDAwRTc2QUYxRTcyRERGMDA5RDBEMUM5NDQwRUZGQjM1QzlGQQotOjEwRkY1MDAwNkJDNEFGMjlGMjc0RTY2QkE3OUEyNEY2ODc2OEQwNTY3MwotOjEwRkY2MDAwNDc3MDVFMjk4OTdENTlGOUVBOEQxNTBFQ0EyRjA2OTVDRAotOjEwRkY3MDAwRjk3QzUzM0MzRkYzMDU0OTRGNTg1RTBGMkNFRjRBMjE2MwotOjEwRkY4MDAwM0Y5NUUwNURCMzU3MjYxRjAyREZCN0QxQTJGODI0REQwRAotOjEwRkY5MDAwQjdEMUEyRUM2MkJBNkYxMzlEQTdGQjM2RDFGNUU5QkVDQgotOjEwRkZBMDAwNEQ3NDM5RERCNzg5MkVBN0ZCMzZEMTc5QkE2RjEzNUQ1MQotOjEwRkZCMDAwOUZFRURCNDRFN0U5QkU0RDc0N0RCQTZGMTM5REE3RkI0RQotOjEwRkZDMDAwMzZEMUY1OEY4MEZGQzFGMTEyQzE3NUUyMDY4MjZCRDM4NQotOjEwRkZEMDAwMUFBNzRBNzBDNUVEN0FBQjI4OUJDNTE5RTMxRkREQ0I4NAotOjEwRkZFMDAwODlFRTY3Qjk2N0FBNjMwNUMyNjE0RjhFMENEMjY4QkEwMQotOjEwRkZGMDAwNzdCMzJDQTZERkU1NzIxNUZCMDk1MEVENjAzOUUyQzczNwotOjAyMDAwMDAyMTAwMEVDCi06MTAwMDAwMDBGRjMxM0NFNTIyQjY5MzNGNkY5NjIwMDNGMTc1RTk4NkY4Ci06MTAwMDEwMDAzOEZEQTFFNURFM0FEMkI3NkYwQUM1N0U1RjBFNTE3RThDCi06MTAwMDIwMDBGN0RDQUVFNzQwNEIwNjk5RjFDMEJEQTEzN0UxRjMxNDEwCi06MTAwMDMwMDBEOUFERDMzRTlGREEyN0VCNEUzMDVEMDBCNENGNUI4NTYwCi06MTAwMDQwMDAzRkIyMTQwNjNEMzQ5RUY3RDEwRTIxOEQ4RTQ3NDRGOTAwCi06MTAwMDUwMDBBOThENzIyODkwREI3OTNFNzQ2QUVGQUYwRUZCQjBERTlCCi06MTAwMDYwMDBEMjVFQjI0QTc0RTdDQzg5RERFRjI0MkQ3NkJGN0IxNEQzCi06MTAwMDcwMDBDNkVFNzc4QTFFQkJERkE5QTM2M0Y3M0IxRUNFNjk0Njk3Ci06MTAwMDgwMDBFQ0ZFODMzQzlERTFCQ0JDMEY5QTc3Mzg3RUM2QjQ1ODI5Ci06MTAwMDkwMDA3Q0IwRTAzQjFBRkYyN0YwNTU2M0Y4MkU0MUY4M0UyQzY4Ci06MTAwMEEwMDBEMUI5REEzRDdCRkE2ODVERTE1Q0REN0NBRjgzRjREN0UyCi06MTAwMEIwMDA4Qjg1RjM3RDcxNzBGRTFDQzY1N0I4MTlCODMwRDMzNUU3Ci06MTAwMEMwMDBCMjUzNUYyQURCRUJFNzIwODE2MzZBREYwQUYzNUVBRjlFCi06MTAwMEQwMDAzOERGMzFFMThBRkEwQkRCMEI1MUU3NTBGNUIyQ0NGQThECi06MTAwMEUwMDBDQzI2QTI2NzIzMzM4NUY5ODBCRUExMDdFRkQ3MzA5N0NFCi06MTAwMEYwMDBFODZGMzFGODk4M0YyRDhFRDM2Qjk2QkFFRjc3OTA1RTBDCi06MTAwMTAwMDAxM0JGNEU5QTBERjk1RDJBNUI4NDVFMTNCRkRFMkVGRThGCi06MTAwMTEwMDBBODQyQjVCNThGRTBEQjhEMEZFQkI0Q0MxNjhCNEZGQjRGCi06MTAwMTIwMDBDODhGOTEwOTZEMEVEMjYzQkFFMzgzMzM3MjhDNUY5M0VCCi06MTAwMTMwMDBEQzQwMkUwNjA0MEY2MTBBRjA1RjQyN0RCMkE2QTM1ODkwCi06MTAwMTQwMDBGOEU3OUQ3RUUxRTc4NzQwMUFDRjYzMTQ4ODc5NzBBM0IyCi06MTAwMTUwMDAyODdGRkYyODI1QzQ3RTA3MzQyOUQ4QkY2NEQ5NjNGMURFCi06MTAwMTYwMDBGMDg0QkVEMkRBQjdCMDVGRjkyNTMwRTFBOENCOTJBRDBBCi06MTAwMTcwMDBEMzdGOEY1NkEwNDFGQUY1QzhDRjg0RkUzNERBRDUxODY0Ci06MTAwMTgwMDA1NEI0QUVGNkY5MjdGOUU2MzlCNzYyQzY3RjVFRTAxQ0QzCi06MTAwMTkwMDA5MkU2NEY3RThFNkJDQ0Y4QkIwOTJEQTM1RUExN0NDNzg3Ci06MTAwMUEwMDBCOUU0Q0U1N0ZCRDA3RThEREZGOUZCMEM0QURGOTJCNDY5Ci06MTAwMUIwMDBDN0VFQzBGMUFGOTYwNDVFQzREQjk1QzExREUzMzREQTJGCi06MTAwMUMwMDBGRkNCMjQyRkZCMkJBNjgyQkZBRkIwNDc0MjNDQUY4OUE5Ci06MTAwMUQwMDAyRTFGRUJCNTM2OTc2MUU3RjMyOEQzN0YwOTEwOUU0QUFGCi06MTAwMUUwMDA3QUZBMzJEREMxRjM1OEFCN0UzMDk1RkMzMUNCQzFGNEU1Ci06MTAwMUYwMDBDNzM0QzdFRTVGMTc3QjI4Q0UwRUFBQzJGREE3N0VFM0U5Ci06MTAwMjAwMDBFRDlFMDQ3ODE0MTcwRjEwMkJFRjE3MTQ1QUY3Q0E0NUY4Ci06MTAwMjEwMDBCQzhBMDZFMkZFNzdBNUU5NDdBQTc0NkRGNDg4NzMzOEI0Ci06MTAwMjIwMDA5NDczN0RBMThCRERBNDEwRTBDN0YwNzk4NUJEOTBFREJFCi06MTAwMjMwMDA2MkI0MDdGOEJDNUY3MzI0OEFENzAzMzU5M0NGRDU2RkI4Ci06MTAwMjQwMDA3NENGNjRCRTdDNjM3RDE3QkYwRUUzRjVFMjg2MEJBQzEyCi06MTAwMjUwMDBDQkQ0MTNDNkQzMzc5Q0ZGRTE0MTlBOTBGQkM5RDNGN0E3Ci06MTAwMjYwMDAxQTU0NUNENkQ2M0Y1QTlGQUQ3MTg4RkJCOUUwQ0Y4ODRGCi06MTAwMjcwMDBCOUI3MzBCODUwOUM3Qjk3OTk3QTUzQTVDQjg0NTM2MTFBCi06MTAwMjgwMDBBMDhFRjRFMzBFQkRBOThCQkRGOEY1RUVDOTU4RjEyRTkyCi06MTAwMjkwMDAwOEFGQTI0MkM2RTMwNkNGOUFDQ0NFRjMxRDZCMUQ5RkRBCi06MTAwMkEwMDA4QzY4N0JCQzE1RTEyNUE3NEM3NjExN0Y1Q0QxQ0YzN0RDCi06MTAwMkIwMDA4Q0VBRjczQjEwM0U0Qzc0MDM2RThERjVGNTkzQ0RDNzc5Ci06MTAwMkMwMDBGNkNCNzk5REVCNDIzQzdCNzAxQ0FEQTM1OTU2QzVCRDY2Ci06MTAwMkQwMDBGOTQwREQzOEVDQjdCRDU0RTA1REY3RjZBRjgwMjdDRUNFCi06MTAwMkUwMDBFQkIyQzJBQ0FFRjNCMkUyRUNBN0M4NDVBOUUxMjhCREJGCi06MTAwMkYwMDAzREMzODQ1RkZCMTBFRjE0NkE1N0Y2QzdCRTFFOUFBRjZBCi06MTAwMzAwMDAzREFGNzE0RjZGRDI4QjZGMTU3QTMxRUUyQkZCNDE2NDhECi06MTAwMzEwMDAzQjQ4QTQ5NzRFOTFDRkRFNDJGOTUzMzlBMDkyRkQ5OTA0Ci06MTAwMzIwMDBEOTIzMjA3QjQ4Q0Y1QjAwRUMyNzAyRERBRjEzQUFDODlFCi06MTAwMzMwMDBGRDhBRDg0RUNFQkUxNUVEMjdFQ0Y3REQ1NTM3QTZEMTk4Ci06MTAwMzQwMDBGREZFRUM5NDQ1NjlGOTZFOEE2RkMyQTkwRUMwQkM2NENCCi06MTAwMzUwMDBGMzhBRkJEOUNGQkNGNzZGNjU1NDNFOEZGREQyRDczQkY0Ci06MTAwMzYwMDBDNTM5NzNFRTBGRkVCNjlDRTkwMEI0NzRFNzE4MUFDRkQ2Ci06MTAwMzcwMDBDN0VGMEI0NEQyNjQ5RTVGRjlCNTlGMEQyN0ZEQUFGNzI2Ci06MTAwMzgwMDA1OUY3MzBEMkNGN0FEMTM5MkY4Mjc0QTg0OTFGOTc1NUE3Ci06MTAwMzkwMDA0NDg2RkJERDlENzBDQUNDNEY2Q0JGNjQ5QkYwMzg5OERGCi06MTAwM0EwMDA3QzcyMzY5RDg3NThGNzMwMUVFQUYxMDY5Rjg3OUYzNDhFCi06MTAwM0IwMDBDRjRGRjI4QzY5QTk4NEU3MDcwNzVBRTc1QUFENTlFNDkxCi06MTAwM0MwMDBCMkFBNEUzMjUyRTdEMDNDREY5NEY5N0VDNTY3QUE5MUJCCi06MTAwM0QwMDA5QTg2RTUyN0MxQ0JGQTYzQTBDRENFRTc0NEFCRUVBRTVCCi06MTAwM0UwMDBFODk5RUVFRTNFNkU3RjREQTFCMDZGQUFFMkUyQTJBQUJFCi06MTAwM0YwMDA5NDU2MDc5RDY3NTVGRDkzNzE1MTRENjg3MTI3M0EwRkNCCi06MTAwNDAwMDBCM0Q2NUY5REE2ODAzMjE0NTMwOUJDRTdBQkY3RTIzRjM5Ci06MTAwNDEwMDBFNDg0NzBEQzYyOTY3Nzc3N0ZFM0U3RTZGQUFDRkIxOTU5Ci06MTAwNDIwMDBENTc0M0YwMzNGQUQ3QUJFQkMyNzlDQzcwRUFEM0UzM0FCCi06MTAwNDMwMDAyRUU2MUUwNEQ5NkJCNEJFRUEzMzEzRjk3QkM1NUQyN0UzCi06MTAwNDQwMDAxQzg0REZENDBGM0Q4NTYwRERDRkU4MEVDRUQ5ODVDMjk4Ci06MTAwNDUwMDBERUE4QTY3QjBEMTlEMURGMDUxRDc3RjY5RkM5RTU0RkY0Ci06MTAwNDYwMDA5QTcwN0I3MkFGNkREQUU2MDRGMzdDQkQ1MEQ4REQ0MzQxCi06MTAwNDcwMDBCMjE0RjYxNzVDREEwQUM2QTYwNEUzNUFGNUFDRjcwRDE3Ci06MTAwNDgwMDBCQTlCNTdEM0E0RjA3QzlBMzdDNTA1MjcxQTZGQTcwOUUyCi06MTAwNDkwMDA0NzZCQkU0REU5RTEyNTVFNzFDRTNBOTBERTJGRThDODhDCi06MTAwNEEwMDBBQjkxRkU1NzQ3RjFEM0IzQTY3RkEwRTkzQkUxRkVGQzM5Ci06MTAwNEIwMDA1RUM2MTVDMjhFRUQ2RTlGRTdGNEYzQTUxMzdGMThBOUYzCi06MTAwNEMwMDBCNERFRkE0QTI2OUI1RDQwN0VCNDlFRjM1QTZEMjQyNzIzCi06MTAwNEQwMDAzQkY4NEYzN0ZCREQwOTY3MzlFNjFFNEM1NzM4M0JCODEwCi06MTAwNEUwMDBCQ0UzRkUxOTE4MUUyOTlCRTQxMEIwM0VGMEQwMUY0QjUwCi06MTAwNEYwMDAxQzBFMUNGRjk4MEQyMkM0NzdBNkM4N0RBN0JFNDA3OUFDCi06MTAwNTAwMDBCNDFGODgyRThGQjFFQ0MwNzQ4M0NDRjc5OThFM0Q5QUJFCi06MTAwNTEwMDBFRjIwQkI2QzQ5Mzk0NDY0RTQ1QkM3REVFQTVGNDc3MTk2Ci06MTAwNTIwMDA5N0RBMDJENDI0QzdBMUJBQjMzNkY2RkNCMTEyOEMzREQ3Ci06MTAwNTMwMDAyOUQ4RUVDNjAzREVENDU2Q0MyRkJBMjc1NjhFMUQ3QkEzCi06MTAwNTQwMDBFQkM3MEVCMjA3QTQ4NTZFM0ZDNTE1RTEzQ0E3QkU4MDgwCi06MTAwNTUwMDBGOUM1Q0QwRUJFOUZCNUU0RkVGOEZFNjJGNUUwNkM1MzIyCi06MTAwNTYwMDBERUM2RUJDMzlGMTc5QUZBRjA0ODE4NDk3MkU2ODVEQTlGCi06MTAwNTcwMDA2NkYxN0U4RTc5MUYxMUY1M0YyMzExOUU1ODdBNzAyOEZGCi06MTAwNTgwMDA3OUQyREY5OUVGNDNBMzRDN0M2OTlDOTJCOEZFOTIyMjBBCi06MTAwNTkwMDBCMTBGMkIxRjNCRURGMDY4REREM0Q5NzFFNDI3MDUzODhGCi06MTAwNUEwMDBGRTg5NUE5NUQzQUNDMTg2NkIzMEY2M0Y2MEIwMkY2NTlCCi06MTAwNUIwMDAzMEI2OTdCNTQ4RkY0RkQ4Q0YyOUNFNDExMURGMzg1RjBECi06MTAwNUMwMDA0M0Y3RDQ0OERFQ0UxNTdBODI1M0JFQjk5MkY1RDEzRUI4Ci06MTAwNUQwMDBBMDA2NTk3RkYxRkJEOTlGNkU0M0ZEMjQ4REUyMzc2RTUzCi06MTAwNUUwMDA5MTNERUM2RjEwRUYwNzhERjk2ODUxMUFBRDM3RjNCRkVECi06MTAwNUYwMDBFNzNDNEQ3MEE1M0IwRTQwRUZCMDk0MUJBNUM0REZENzgwCi06MTAwNjAwMDBDRjcwRjM3OUZGMjY1QjgwRkJBMTQwQURCQjEwOUVBMUFDCi06MTAwNjEwMDAyN0M3RUMyNkY3Nzk0MUUzQkQ5M0M4RUU1MzVCNzZCNTY3Ci06MTAwNjIwMDA5MkJENTI2RkZCNzQwRkM1MjVENDRGMDQzREM4RDAwRTQ4Ci06MTAwNjMwMDBGMTM4MzUyRDMzOUVBNkY2RkQ2N0JBNzVCQTVGQkEzRTFFCi06MTAwNjQwMDBENzI4NTVBM0ZBRDcyMEYyMUVFOTk5MjdBQjZDRUMzN0NGCi06MTAwNjUwMDAzREQ1RkMwQjNFQUY0MkZCMkU0MkNBRjdBOUFBM0NGNkExCi06MTAwNjYwMDA5QjU5NzEzRjdDRjY5N0MwNkY3ODAyRTUxQjQ0RERFNzJDCi06MTAwNjcwMDA1RUQxQjRDOTQ2RkFGOEE1QjQ1MTUxNzE1NUQ2QkNBQTk5Ci06MTAwNjgwMDBFRTZDQ0RCRThFRTRFRTEzMEFDQkQxQ0NERjVDQzFGMUIzCi06MTAwNjkwMDAwM0I5OEEyNjExM0NBRjkzNTRBMThGOUE3QUYyQjU2MEMwCi06MTAwNkEwMDBGRDM1QkM0MkZBRTk0MkQyOTMxMTBGM0Y5NDQyMUNBRjkwCi06MTAwNkIwMDA2OTgzOTY2N0E5RkREQzFDQTEwRjgyRDYzODgyRkNENzFFCi06MTAwNkMwMDBFMTJBRjM3REEyRTVGNjM0RDI2RkFDNzM4MkVFRjBBMTlECi06MTAwNkQwMDAzQjNGMEZGNkI0RTQxRDFDRjdBNDA0RUM2RkFBQjE0NTMwCi06MTAwNkUwMDBGQUQzRkM4RURCMTNDQkQ3Nzk4MzREM0UzMEQwMUY2MjFCCi06MTAwNkYwMDA3OTlFMEVFQTYzMzRBRjAyNUYyRUQxNjVCNTRENUJDOUJBCi06MTAwNzAwMDA3RUFGN0Q1RThFMEY2OTk3RDRGNDk4Nzc1RUQ0ODY1RjU2Ci06MTAwNzEwMDA5M0RFNUQ2MzUzODU3RDczQzAyOEE1RjM5OEY2MTk0NTc0Ci06MTAwNzIwMDBGQ0VFQ0I0OTdCQjgzRkYzMTFFNDdCMTQ5Nzc1RUIxM0Q4Ci06MTAwNzMwMDA0RDMzMTU4NDVCNzU2RkQ0QkIzMEJGRjk4OTVEMzMxNUJDCi06MTAwNzQwMDA3QTg3MjcyRkJDQzQ4NkY5NTcwN0ZGNDU5NDBGMDkxRkU2Ci06MTAwNzUwMDBBNkZDMUY5RkY4NDg5NDBGMEIyRkExRkQzOUY5QzQ2OTFGCi06MTAwNzYwMDA5MTI3MDMwQzExRUM2RjRGRkNFRkNDMDBBRUVCQjhFOTE2Ci06MTAwNzcwMDBGRjA0M0QzQzlGRTY1OUZEQzIyMDVCQjQ3RkYxQzg2MDk5Ci06MTAwNzgwMDBDMTM3OEYyNzg5N0FDNzczRTE4NkFCNDlGRjI4MENGM0ZECi06MTAwNzkwMDA3RDE4QUJERTZCODNDREZCMDQyNkZFREZGNDYyNTIyQkFCCi06MTAwN0EwMDBDNTA5NUJFRDIwMjc3MUZGNDFCM0RENERFNjdCNTk0ODVDCi06MTAwN0IwMDA3RkJGQTI3QTJGRTc2OEU5QkNDRjQ3OTE0NzExNUM5RUMzCi06MTAwN0MwMDAxRkNDRTczRDM3MEQ0RUU3RkEwNDlGRjRBMkFFRTMyREIwCi06MTAwN0QwMDAyMzM5NEY3MkMwMUU3QkZGQURDMURDMkYyODEyRkQ1NzlECi06MTAwN0UwMDBGNzU2RDM2ODNGQjJEMzg1OUQ4MTFCOTI3NjE3QkY2M0JFCi06MTAwN0YwMDBCMEM5RDRBQkM0RkU2NENBNkE2OTUwNjVCOTMzOUNFQzE1Ci06MTAwODAwMDBFNjk3Q0ZGNjJENjVCQkI5QTI5QkZCOUU4Mzg1MUNCQkVCCi06MTAwODEwMDAyOTI4QzY4OUY0RDJENENEN0NFRjFDMEM4QTQ3NzlCOTNCCi06MTAwODIwMDAzOTY5NzNGNDdCMjkyNzRERjgxRTE5OUMyNkUwRDdCMTRFCi06MTAwODMwMDAwRjNEMjUxRTI3NjhDMkE1MkZDMkJCQjgxMzdGQUNGNjlCCi06MTAwODQwMDAxNzVBRjdGNjdGRDFCQUJCRUM1Mzk5OTg5RkI1MUU4MDIzCi06MTAwODUwMDA3QjA1MUM3MDdFNjlBOEU3MUY1RjYzQjYxQjZEQ0Q0M0U3Ci06MTAwODYwMDA2MzdBQjhFOUM1REIzNzA4RkVBN0E1QjNERDBFM0YxMUYzCi06MTAwODcwMDA3MDcwNTlFMzE2RjFGOUU0MEE1MzBGOTYwMzZGMzhDODA0Ci06MTAwODgwMDBERTU4NTFERkM2RUZBRkFENjgxNEVGNkQ3NUQyOURCMTg0Ci06MTAwODkwMDAyQTlBQ0UzMkYzQzUzQTMzNjUyMzMzQzhGNDg4RUI2MzIyCi06MTAwOEEwMDA3QTM0Q0M3ODgzNThGQ0U5ODA3NzNDMUQ3N0U5NEY0QjRDCi06MTAwOEIwMDA4RkVENEZFM0ZFQkFEQjg3QjA4OTE3REZEODNFMDQxMzE0Ci06MTAwOEMwMDBDM0IzODNCRkM0QzFBRjgzMUU3M0NENzY0NTg4Njc2NTRDCi06MTAwOEQwMDA1REU5RjE4RkRERDE3MUVFRDcxQ0NGQkM3N0IyRTI3NjQ2Ci06MTAwOEUwMDAzMzVFNTU4QkM1RTMxNTREQjlCNjg1NDU5REY1RUY2RTY1Ci06MTAwOEYwMDBCQ0Q3MUIxRDRGRUI2QTVBMTAyMEY5NTdEMzUyQ0U3MTRCCi06MTAwOTAwMDBCNTJCOUVEQkZBRUIwMEI2NUZCNkZEMDEwRjA1NTMxRjVBCi06MTAwOTEwMDA1MzFBQjI0OTJGQUU3QTZDOURDN0EwNzMxNjI1RTAyMUY5Ci06MTAwOTIwMDBCRTc5MkMyNDRGNEI3NDdGNzVENDEwMjk0NjFGQUJBNjdCCi06MTAwOTMwMDA3RjYyRkZDNzlGRkM1QkREQkZFMUZDQkY5MDUwQkY0MjAxCi06MTAwOTQwMDA3ODU3MzdGREI1OEVFQ0I3M0Q4NjJCNDI3MkZCQTgxMjY3Ci06MTAwOTUwMDA5RTRBNzJGNEE2MDU2RTNGQkQyRjU4RDMxQ0FCNEYyRDk3Ci06MTAwOTYwMDBGQkU1MDNEOTFBMDc3NzA3RkFEODU4OUY2QUVENDNFRERDCi06MTAwOTcwMDBBQTFGQjVFQjY0QkY1N0VGOTM3NTFDMDY2QTIwNTI0NzU4Ci06MTAwOTgwMDBGMzhCNkY1RkQzRjhBMTgzRTBBQUEyM0VEODc3NUNENzQwCi06MTAwOTkwMDA3MkU0MjQ4Q0Y3MzU0RDNGRkE1NEY2NTA3QUVDMUQyODVBCi06MTAwOUEwMDBBMUZFQTJGQzExMDhGN0NBNkVGNEIyQzIyMUIxRjcwMjhGCi06MTAwOUIwMDAyQ0Y4NDAyODhCRjU5QkUwMTMwRjk1QkM4RkYzM0FGMTkwCi06MTAwOUMwMDBFODZCMUVBOTI4NUE1RURFMjlDRUE5MUE2RkZDRjkwQjI2Ci06MTAwOUQwMDA1QUY3NzJGNTI0RTkwN0NFQUU3QTgwRDYyQzA5MjVCQkVBCi06MTAwOUUwMDA0NUE0NTVGNjU2MEZGOTA1QUEzNkQ5RjUwMDdFQUVEQUJDCi06MTAwOUYwMDBGQThCQzdFOTVDMDVERTc2RUE3NEY0NThCNUY1QjQ4MzgyCi06MTAwQTAwMDBERTNGQUI5MjhDODhDNDdBMTY3OEE0OTE5REZCQjQ3Q0FGCi06MTAwQTEwMDBFQjQ3QzI1RkQ1NEI4NkU5Qjg0RkNCN0VGNUI5QTg2RkRGCi06MTAwQTIwMDA0MDI0MDlFQjJGN0ZGQTdERjY2RjU1RjlEQzdFNTc4MjYzCi06MTAwQTMwMDA3REFBNjhEQ0U1MDhCQjEzRUM1M0UzRkI1MzQ5MEYwQUJFCi06MTAwQTQwMDAzRUYxMjVFRkMzQjE5RDEyRjRDQ0VEREFCRTcyRDM0NzZGCi06MTAwQTUwMDAwRUEyOUIxM0I4MjExOTY5MDI1RTY0OUZENjM0Q0EwQjlCCi06MTAwQTYwMDAxQ0E5ODlGNkFERjUyQUQyRkZCMDlDRkQyMDE3REEzRjBDCi06MTAwQTcwMDBENzEwMTA3NEYxRENENjZENjQwRjU0QkVFM0Q0QTdEMzQ1Ci06MTAwQTgwMDBCOERCNkVGMTAwRUVGRjExQzUyRkYwRkQ2N0VCQjIwRDg0Ci06MTAwQTkwMDAxQ0I3RDIxRUM4NTYzOTE1REYyQjFGQjk5NUYxNzBFOTY2Ci06MTAwQUEwMDA5QkI3NjZCMzVFMDc0NjJGREI2ODVFNkYyRjVBRTdFMjlGCi06MTAwQUIwMDA4REIzNzg5RDRCQzBDNzc4NThGOTMzRTFDRkY4NUM4MThFCi06MTAwQUMwMDA2OTg5RUUxQjZGMUYyMkU0ODcxMzZFMkUyMUZBRjgxQzMyCi06MTAwQUQwMDA3QjIyM0ZDQzExMDc4ODc4REVCN0M0M0I2NDRFQjgzQTFFCi06MTAwQUUwMDAzNUZBOURCOTNCODcwODM5MTA4MEQwN0JGNEZFNjQwRDQwCi06MTAwQUYwMDBEQUM1QzQxN0U0MzczRjlGNEFGREFDQ0E1NUZDNEU5NTkyCi06MTAwQjAwMDBENzFGMzBFMTI1OUQxM0YxMUM5QTYyQzU5REU2RTE3RTU5Ci06MTAwQjEwMDBCRDM5QTUyN0Q5QzE0RTM4RTVCOEJFOENERjY5RDBDODJDCi06MTAwQjIwMDBGRjFCRDU4RUUxNzY2NEIzMzM1OTQyM0JGRjQ4NzZFMjMyCi06MTAwQjMwMDA3Qjg0RUY5OUVCQzBCRkI3MjAwQTlGNkFCNjFDNjE3QzJCCi06MTAwQjQwMDAwMkI0QkI1MjczNDRGRTYxQTI0M0I0OEI1MjExNkU5RjM4Ci06MTAwQjUwMDBFREZCRDBEMTlCRkMxRDk5MzYxODQwRjM2REZCODhGMzVCCi06MTAwQjYwMDBBMDY3Njk1NERGRUFCRkE2RDkxOUYzMkU0OUNEQTMxRkE4Ci06MTAwQjcwMDBDNUQxQjMzM0VFQkQxMzNGQzNCMzA2NTIzNUQyMzc4RjYxCi06MTAwQjgwMDAzODIyNTM1RkE0NzE3MDVDOEFENzVDNzJCRjMzRTZCREI0Ci06MTAwQjkwMDBCMDRFN0M3MTc0N0VDRkVEQTQ0RkNCQkU1QTZBRDI3RjJCCi06MTAwQkEwMDBGQ0ZBRTNGOUMxOTM3MUZDMDAzNjY2N0RBNUY3OUZBQUI0Ci06MTAwQkIwMDBFQ0ExQzcwOTNFNTU0OEFGMDFBNjU3NDE3RkE4QTM0N0ZFCi06MTAwQkMwMDAwNjIwM0Q3Q0ZDRDQ0QkZCQkY0RjdFQkE0NjdCRTY3NENGCi06MTAwQkQwMDAxRTJEOTZDRjU2M0U4M0Y0NEJGRTM0ODQ3NzkyNEU3Qzg2Ci06MTAwQkUwMDBGNjRCMDdFOUJEMzkxNTY4MDdFM0JDM0Y3NkVCNzQyOTdFCi06MTAwQkYwMDBBRDJCRERFMkY3ODQ3NEVCMDYzRUQ3RkFCRkM1NUY5N0Y1Ci06MTAwQzAwMDA3NkMzNUZGN0M1QzFGMzczMjg0QUE1M0IwQ0M3OUY1QzQ5Ci06MTAwQzEwMDA3RTA5RkIxNUUyRTA2QkQ5QkJGMTdDQjM3QTg4QzY3MDI0Ci06MTAwQzIwMDA4RUU3OUJGOEI3MUZBMkUwQjhFQ0JGM0Y2MUJDRkRBMjA2Ci06MTAwQzMwMDA5NzM4MDdBQjdFRjRBRjJDQkYxMEFDMTEyN0UyNkQ3NTZGCi06MTAwQzQwMDBFODUzQ0VBRjIzRjlDNUY5NUQzM0U5QkNCQUVCQkE2MzFCCi06MTAwQzUwMDBFMTE5NUZCRUMxRTQ0NzFERjdEQ0VFODQwMEM1REQ0NTQ4Ci06MTAwQzYwMDA3NkM4RkMwRTQzM0JDRUE1OEVGNEYzQTc3MkY5OUM3MEI4Ci06MTAwQzcwMDA5REE5RUZCN0FCMTEwRkU5RTdFQkQyQUMzQ0RDNDBFRjNECi06MTAwQzgwMDBDMUI0MDc0QUQ0MDBCNTRGMzJFMzBGQkMxMTRGNUE5NDk4Ci06MTAwQzkwMDA5RUY0N0U4QkVDMjFCRDJFMUM4MjY5ODlERjA1MENGMjRGCi06MTAwQ0EwMDAzQ0MyRDA1REY5MUE3MTVGNEIzRUJCMkQ2Q0RBRjU0RTNDCi06MTAwQ0IwMDAxQzJGQkNFNkNCNkQ3NDZFN0U0ODcxRjFCOUU1QTIzNTkwCi06MTAwQ0MwMDA3MzNDN0NGRkFGMjVGRjNGMDkyRjE2QkY4QTcwMjQ3QTQzCi06MTAwQ0QwMDAwQTE4OEU1RTA4RTcxQjA1MDhEMEZDMDhGMDc5QjA5QzY2Ci06MTAwQ0UwMDA1MkI2RTc0NUFDQjcwNDAxNENFNzI0RjFGRTk0NjVFMDQ5Ci06MTAwQ0YwMDA0RDZEQ0RFREVBMzc0MTM5RTgyMEY5QkYxNEU1MTFGQjIwCi06MTAwRDAwMDBCRDM3QzY5NjJGNkJGOTk4RjE2QzU5MUM5RUY5MDhDRjI4Ci06MTAwRDEwMDA3QTc1QzVCM0RDNEI0REZGNEEyOTk0OUFFN0JBNkNDRjdDCi06MTAwRDIwMDBCN0VGOTVGOTNDRkY5NDBCNThERkEwNzM1RURDMzEzOEM4Ci06MTAwRDMwMDBENTIyRjNGRTlDN0E0QTBBNzFCQzYxMjA0QkJDREY4QTQzCi06MTAwRDQwMDBGODRFN0E5Njg1ODdGMUY2N0Q3QzdBRTJEOTc3NDdEMjlDCi06MTAwRDUwMDAzREIxQUE1RkZGQTVFNEJGMzAzREYxRUJCNzA3QkU0ODQ4Ci06MTAwRDYwMDBGOUU3RkVEQ0ZGMkZEMEI1N0VDNUNFQkZCMjFERDNCRUU2Ci06MTAwRDcwMDBEM0M5RkVEMEY2OURCRkVENEY3MkI5RkQwNUE3NEVGODYxCi06MTAwRDgwMDBEQjdFQTc1M0M0MzVFQzRDRTE3N0NDREFGQjA5QkY1REMxCi06MTAwRDkwMDA3MEM3OTcyNTYxOTY1QjZCNzkxRkE3NUZFQUUwRkQzRTAwCi06MTAwREEwMDBENUYyMzc5NjIzQTc1QTlDMUFBREEzNjY2NzBGRjY4RjI0Ci06MTAwREIwMDBENUJDOTAxNDIyRkY0MEZCOEUyRjQ3NDZCRjc3RjVDRjVFCi06MTAwREMwMDBBRUE3REFCQzRGRDM5RTAyNzMyOTZFQTYzRDREQzQ1OTFGCi06MTAwREQwMDBENkJDMzhFNjE3NkJDODFFNjlEQUU1MjBGRjdGQzU2RjAxCi06MTAwREUwMDBGRTVFNDI3Q0E5RkQ5OTVEMEVFMjVCNjg5NzNFMDI4ODNCCi06MTAwREYwMDAxRjczMkVGREU5MDNGNjVFNzQ1RjBDRDhERTNFN0RFOUJECi06MTAwRTAwMDAzQkIzRTg3REFDQUU3MDExNzA2ODQ3MzhEMEJBMTAyRTk1Ci06MTAwRTEwMDA5NUE0OTc3NTA3OEZFQTZGMkQzQzNFNjU3QkEyQUE2NTY2Ci06MTAwRTIwMDAxNEQzNTEyNzVDMjQ0MzdDNEYwOUI5MjQ1QUZGRjMxRTg1Ci06MTAwRTMwMDBGMjFCQjVFN0ExRkNENzY5REQ1Rjk2OTBGRTc0QTE3NTQyCi06MTAwRTQwMDBGRkM3QTVFMjdERUVGRkU3RDc2RDgzOEI1QUY3NTNERjJGCi06MTAwRTUwMDBEQTc1MEJGQzFGNzZBOTI2REVBNzhBQTM4M0FFNzhGRTdGCi06MTAwRTYwMDBEQzBGMzhCRjJENDVFN0Y5N0U0NUZBN0ZGRDVCQkJGRTAxCi06MTAwRTcwMDBBRkJDRUYyNUU0QjdCREQ4N0RGRkY4NUJCQkVFMEJFRDUzCi06MTAwRTgwMDBGQkFCRTZCRUE3QTg3NEJGQUU3REM3REZGQkYzN0FCRjlFCi06MTAwRTkwMDBFMkJBOTM4QkJFQURGQ0VERkNFQkVFRDA4RjY0QUY4QjcyCi06MTAwRUEwMDA5RUQ4QkEwNzVBREIzNDRDRDc3NUEzQTc4QzJBQjJGQzVDCi06MTAwRUIwMDAxMEMyMUU5MTREN0Q2MzFEMEMzMzM2OTE1RDg1N0EwNkZGCi06MTAwRUMwMDBEOTAxRUIzMjQ1QkUxRUY1MDc5OUVGMEY3MkIwMEFENDc3Ci06MTAwRUQwMDBGN0Q1QzVCQkI2OEExRjU0Q0NEQkZGN0MyM0M3QjNBQ0E4Ci06MTAwRUUwMDBDQkZFMEVFNDk1RDE3OTg1RjA2MzA0RDdFOEJFNUREOERBCi06MTAwRUYwMDAzRTk4NjZEMzgyM0EzRDU3QjVEMkI3MDlDQkQ1REVCMjFDCi06MTAwRjAwMDA0QUY2Q0QzQUVENkE1N0Y0M0IxNjhBREIxMTYzQTdCODZGCi06MTAwRjEwMDBFM0VDOERFNDAyNDc4QzVEOTIwNEJCNTVGMkMzMjdFOUY0Ci06MTAwRjIwMDAwQUM3RkYzOTIxQUEzREQ2Q0YyQTEyRUZGNDI3NDMyODVBCi06MTAwRjMwMDBBMEJBMkYxRTRFOEJCRTNFOUM1QzdDQUY1MjM1RTEwNEE2Ci06MTAwRjQwMDA4NjQxRUI3NjZBMEFFQjYxMEFBMEZEMjhENjIxRUM0RUI5Ci06MTAwRjUwMDA4NEEzMTYwNTQ3MzBFRDUwQzUwNEI5QTIwRDYzMzhBMjJECi06MTAwRjYwMDAwMUExNEQxQTRENzBGNTMzMUM4M0JENjQ5NUUxREFEOUFBCi06MTAwRjcwMDAxRkFGM0I3RTFGRDY2OTkzMjBDRkQ0QzcyNUZEOUI4NzJCCi06MTAwRjgwMDBGM0Q4MjIxMTFGMTAwRjY3MkJDREY3OTVBRjIxRkQ3N0Y2Ci06MTAwRjkwMDBENTFBNzFDRUY1Q0NFRkJFQzNGOTI2M0JFQUMzNzRDRkE4Ci06MTAwRkEwMDAzMEQ1QjdBMjg4RkM4RTVFNDMyMjNBNUQzNTQzQkMyRjE0Ci06MTAwRkIwMDA1ODQ2RjdDMDMyQzlENDE3NzFCODk5QUVCRUEwQjBCRkI5Ci06MTAwRkMwMDAxMkVEMENGNjU3QUE0MEY2OUYzQzA5MUFEOTFGRTg1NUI2Ci06MTAwRkQwMDBFMkUyN0E1NThFN0IwQURFMkNFMjlFQTAxMDM0RjE0RUJFCi06MTAwRkUwMDA0QjZDRkM0RjYwMTIxNDUyNUNDMzE0QjlBQTgxRTY3NUI1Ci06MTAwRkYwMDAwQTUyMUEyOEVFRDI2MTZGRURDRkZFRTE3RTAwOEY5MThBCi06MTAxMDAwMDBCRkE1RkM4QjhENTQ5RThCN0EzREQwN0QzMkE1RjUzRERFCi06MTAxMDEwMDA4QTZGQjg0RDRFMDU4RUFCOEFFMEE3MjhCODVENzZDNkJDCi06MTAxMDIwMDAwNTRBMTQ5Q0NCMjEyRDI2N0ZBMkRGRTEyNkIyMTNGMkM0Ci06MTAxMDMwMDAwMjRFOTU4MkM3MkE1Q0JENjJEQTlGRTg3NTg2QzcwQkFGCi06MTAxMDQwMDAzQTVEMkFEOTQ3NTNENERDOThGNkIyNjdFRjdCNjRENzcwCi06MTAxMDUwMDBCQzkxNkU2M0JCRTBGMjlDQzEzMUVEQUZGQUUwQzRDNjU3Ci06MTAxMDYwMDAwNTI2Q0VEMjNBQkVGN0FFQjhBNzhBRjZENjIzQUY2MzJFCi06MTAxMDcwMDBCQjM3RUYwNzIwQkZGMTE1NUE2OTRDQkI2NkQzQkYxMkNGCi06MTAxMDgwMDA5OTYyRTdGNzY2QUUyQzFDMTMzMzZFNzM3ODM3QzNBNUVECi06MTAxMDkwMDAyQTBCMjQzQTBGQUVCMjIxNDk2MEJERUZFQUU1MzFGNUUzCi06MTAxMEEwMDBCRTM3RkE4QTk4N0U2NzE4MzM2MkYyNTVBQkJGMDAyNUM3Ci06MTAxMEIwMDAwMzYwRENFQUIzNDBFRjA3OTZCNjM2QzZCNDFGQkVCNzhFCi06MTAxMEMwMDAzOUE2QkVFNzc1MzQ4NTMwMkREREE3MDUyOTFENzU1MDdECi06MTAxMEQwMDBEQzIzMUQ4RUZCNDFFNzFCQ0RFMTg1M0FDNUVCMTREMzI0Ci06MTAxMEUwMDAwNUQwMzIzQTE2RjA1NjUwMThGMkM4QTNGRTk3MjhCRDI0Ci06MTAxMEYwMDA1MEZDMzI5OEVGQjIyNjlCRTdBRkVCNkRBMUM2MDVCOTY1Ci06MTAxMTAwMDAxNEZGRDNGMEUzNUQxMkM3NDNFRTI2M0MxRDFENjlBODEyCi06MTAxMTEwMDA0OEM1RUE2M0NGMzRCRTQ0Njk1M0RCRjg3QTdBQzdCMzczCi06MTAxMTIwMDAwQUEwOERFNUFGREJDNkU3MDI1M0U0OTYxMjg5RUQ5Rjc2Ci06MTAxMTMwMDAxRUMzOUQ1MUU3MkVEREJERDdGOUEzRDJGMjdENDU0OEYwCi06MTAxMTQwMDA0NzZCNzM4Qzg2NURDNEY3MjdCRDNCNUZDRUVCNUEwRkIwCi06MTAxMTUwMDA1NDI1MTI4REU3M0YyQUY1MUVBNjM4NEQyQjRFMkFCOThECi06MTAxMTYwMDA0MjE2QkY0NzcxQjk4ODkzQTlCM0U5NDkyNkYzNjJGREQ2Ci06MTAxMTcwMDA0MDlENkFFNzM4RkU2NUM1ODJCRjhENkNEQkRDRTgyRURBCi06MTAxMTgwMDAyM0JCRDNBNUQxQkUyNjY3QzRERUYzQkU3MUI0QjhCNzA2Ci06MTAxMTkwMDBGNzQ1OTE3OUJFQTJBODU5RDc5MzFGQkMzODQ1QjQyNzBCCi06MTAxMUEwMDAxRjFGOEQzN0REQzZGQTk0RTc4MEJFQzc4RUY5RkIwQTk0Ci06MTAxMUIwMDBGN0E5QzRDRTlBQTY3RjEwRTBGNzREMEZCNDREOTAzNDM2Ci06MTAxMUMwMDA4MDlFRjc5NERBQzgwRTg3QkQ3NkZFN0Q5OUE2QzJDOUM3Ci06MTAxMUQwMDBBNzBCQTg3Q0ZBNUIxQ0MzQjg2QkMyMkYwQjQ5QkVBRDMyCi06MTAxMUUwMDAxQzNDRTRCQ0VGOEM3QUNFNDhBMDQ1QzU0MTJDMkJENkU0Ci06MTAxMUYwMDA3ODNFMUUyNUNDRUYxMjc5Q0UyODVDRUU5OUE3REJGQTVCCi06MTAxMjAwMDA0NzhEQjc3MjgyRDBGRjU2MEU0RURFNEE3OEVCMzk2MEJBCi06MTAxMjEwMDA4OEI4QTg0MkI3MzY4MEU5MjM5Q0MzN0M0MjA5RTc1Q0MyCi06MTAxMjIwMDA5RjIyRTJBQkI0RjNCQ0YzN0Y3Q0NCODgzNDkyNjMxOThBCi06MTAxMjMwMDBFNTdBMUFGOTQxMzNCNkNBMURGN0NFNjgzRDNGQTZGRkRECi06MTAxMjQwMDBEMEMxM0FBQ0RGM0YxOUU3QjU4NTYyRDc0NDc5MkJGMkJDCi06MTAxMjUwMDAyNDU4RUZCMENBOTEyNTYxM0U0M0IyQ0FEN0NGOUU1Q0Y1Ci06MTAxMjYwMDBDNEVGMzFDNkQ0MUY5QUQ3NTFERjcwRTU3NEY2QUYxNUJECi06MTAxMjcwMDBBRkRGQkZCNjg4RTAzN0NBNDY3MTI1RUI3RjY3RTc3N0Y3Ci06MTAxMjgwMDAwNjcwOURBQzRGQUM0NDdBMDZFOTdDRjBFQzcxMDE3OEI1Ci06MTAxMjkwMDA3QUI4RkM5MEE0QzVCRDlGREI1QTRDRjk4MkJFQkU0MTEyCi06MTAxMkEwMDBDNTU4RkY5MkIzQTlGQzBFQzA2N0Y1NDkyQ0ZGMkUzOTMzCi06MTAxMkIwMDBGQjNEN0VBRkIzQzk2MUY0QkY5REZEMzc0OTFDNkYzNjVFCi06MTAxMkMwMDBFM0U2OEYzN0FDMjZCQUJFRUE3ODIxQzUyODU4RUY1NzM3Ci06MTAxMkQwMDBENkE4NUYzMDNGQjBFMkVDM0FFMTg3Rjg4Qjc4RkY2MzQ1Ci06MTAxMkUwMDA1QjY3OUVGODgzQTcxMzlFMDZCRENGQjUzRTBBQkVGNDhBCi06MTAxMkYwMDA5QjJGMzM0Qzc4RkE4QTM3Q0U1RThCRkQ2QjhCQTZFNTNECi06MTAxMzAwMDAxMDVEOUUwNjM3QzdGNTlENTYxRjlGNERGMzNEQkRDNTI5Ci06MTAxMzEwMDBDRTQxQjQ0RDI2QkYwQzE0OUFFRjExNjQ4NjczRTg1RTdCCi06MTAxMzIwMDA3RUYxOUIzNjhFNDczQTg4Rjg2MDIwM0VFNEI3QkU5OTNFCi06MTAxMzMwMDA1RTRDRUQzMjk1NzQ4QTZGMzgzREZFQ0ZGQzZFQzJFOThCCi06MTAxMzQwMDAxRjAyMDcxNzJGMEIzQjE4NUU0RDk5OEIyQUNBMTlGRkY2Ci06MTAxMzUwMDBCNTc0RjIzRjU4RjA2RDM0RkI3OUI4RDRCOEIyOThGRDRCCi06MTAxMzYwMDA1Q0U2N0QxMTYzRUM0NUJEM0ZCOTZCQzI5NzdDMkVCMDQ2Ci06MTAxMzcwMDAzNjE3RjVGQzM0MEEzOTNFNTM0N0VGNEJBRUNDQjVCM0M0Ci06MTAxMzgwMDA1QzVBOTlGNkM1RDQ0Q0MyRjc3MjU3ODRERTgxQTg1OUNECi06MTAxMzkwMDBGRDE5QzMxN0JCQzk4REJFMDdBNjlDOTE0MThCOEFERjdGCi06MTAxM0EwMDBEMjg2OEFGRDU3MTQ4M0Y3NUYzOUUzRTBGMkFBRDVBNzA2Ci06MTAxM0IwMDA5OTZGNUJFRDRGOThFN0FCRjQyRTIzREQxN0FBRkE4NzAwCi06MTAxM0MwMDBDQ0Y3NDY5MTFGRDY0QkMzMjhEREVENTgxOUM1NEZBMDY5Ci06MTAxM0QwMDBGMUQzMEUzRTNGMTRGN0VBQkVFOTZGMjU5MzlGNzI4NjY0Ci06MTAxM0UwMDBBNENFQTJGOUI1NkMzQjMzOUJFMjA1NjYyNEE5QjMyOEQxCi06MTAxM0YwMDBERUEwNkVEQkZCQjMyOUJFNjA0NjNGNzUxNkM1MTdEQzY5Ci06MTAxNDAwMDA1NzNDNzkwRTk3Rjc1MjFGQjBBMUZDN0FCOTY0QkVDODU5Ci06MTAxNDEwMDBFN0FBN0ZBMkZDNTM1QkVGOThDM0Y1NTNDNEJFREZCNkM3Ci06MTAxNDIwMDA3NUNFOUMwMEYzNjMzN0QzQzFBOUZBMUUyMUU3NzlFODkyCi06MTAxNDMwMDA2MEU5RUExNzIxRkEzRERCMkVFNUU2RUY0OUMxNUNDMTIwCi06MTAxNDQwMDBGNzNFQjlCQjBGQkZEQjA5MDU2RDFDMkZCNkJFNThGOEMwCi06MTAxNDUwMDBGQjNCQ0Y1NzQxQTVGM0Q1Q0M3QzMwQzhERjlDRjk1QzcyCi06MTAxNDYwMDA5MkY4NURBMjQzNkRGRDA5N0U0NzM2REVGMjAzRjJBN0Q2Ci06MTAxNDcwMDBBRTkwODBERkQxQUYwMjZEMjREMUQ1NDI1QkY4M0Q0QUZBCi06MTAxNDgwMDA1RjFDRUVCQkI3OThGNUE5MzY4RTc3NURCQTdBMjdDRjg5Ci06MTAxNDkwMDBFRjUzREQ4QzVCNTYyMzQ1REVBRkY1NEUwNEY2OUZGMDJGCi06MTAxNEEwMDA5RDg4RDgzOEUzMEY2Q0RBNDBFQTU3MzFFMUIyNTA2RUNDCi06MTAxNEIwMDA5QkVGMTBGMzdBOTRFNkI1MjI3RDE3QzczOTJCNkE1QjUwCi06MTAxNEMwMDBCNjRGRTg1MTg1NkMzRkU1MjRGMzdCRDE3NUJEREYyOTJDCi06MTAxNEQwMDA0OUY0M0IwODhEQjUyOEVGOTFFNDlFQTk2REU2NzRGNUJCCi06MTAxNEUwMDA1MDYwN0NFQkE5ODQxRDNBRjY1MzdENDBDODlEOTE2REY4Ci06MTAxNEYwMDAxRjM4QTJFMzE5Nzc5QkYwNEQzNTdGRUYyQTNFMUU3NzA4Ci06MTAxNTAwMDAzN0M5QTVBOEI4ODMxNUJENUJGQjkyN0U2OEVENkJFNzc0Ci06MTAxNTEwMDBCRUI0RjYzNUY3MDU2OEJFOTkxOTJGM0Q0NUVGOUQ1MENECi06MTAxNTIwMDA5Q0VCMEZFOTNDRTNCOUE0NTZGMjVCNzc4RjI3RDYzRURDCi06MTAxNTMwMDA4ODc5MzcyNTBCQkUxMTc5MzY4OUY1QTZGODc1MUMzNEU0Ci06MTAxNTQwMDBFNzZEQUQyNzYyQ0FERkVFRDYxMTMxRTVFQkJGNkExRDRDCi06MTAxNTUwMDAxMTkzQkZDN0FGQzdBMjZGRUJCQjQ1REY1RERCOEJGOTU0Ci06MTAxNTYwMDA1RjNDREU4OTdCNkQxN0MyM0I4QkZGNTQ4M0FGNTBEQzQxCi06MTAxNTcwMDA5NzE2RkNDNjgyQjczNTRGMEI2RTRERERDNEUzMkFBQjIwCi06MTAxNTgwMDA5RjhGNTk4RkQyMzY4OThDMUU0ODJEMTFFRjVGMjk4RDgwCi06MTAxNTkwMDA1NzAwRUQ4N0IyQkE4NUVCNzVCNzFFMzlFNTMzM0VDNzA0Ci06MTAxNUEwMDA1OUE2ODE5RkY0REVGODc1NTU0MTIzQjdFQkJBQUUwODEyCi06MTAxNUIwMDBGM0UzMTU5QUUwQzc1REUzRjgyM0NDOUZBQkQxM0UyMzVDCi06MTAxNUMwMDA3RERDNUE3NzA3OUZDNkY1MTM3RDRGNDA4NkMzN0M5MzE5Ci06MTAxNUQwMDBFRTEyNEE2NDVGRjg2MkY0RTM3MkJBMzExMTdENkVFNThGCi06MTAxNUUwMDBCQTM5MjYzRjQ1QkQzREE2RkVFNTM5NkI2MkNBQUZEMDhDCi06MTAxNUYwMDBFRThFMjlCRkIyRjBERTk4RkM3N0Y1OUZDNkU5Rjc5QjI3Ci06MTAxNjAwMDBFMkY0RkIyNzYyQ0FDNzg3REI1OEZGN0VBMzc2MUFDN0JFCi06MTAxNjEwMDBBNzRGM0MxQTYxM0RCQ0I1NTZFNUZDRUVEQTFDNEU1RkE3Ci06MTAxNjIwMDBBRUQ1OThGRUY3RDQxNjcyQkFCNzU2RTdFRkJGQUIxRDJBCi06MTAxNjMwMDBDREU5RUJCNTA2QTc2REI1NUU0RUUzRjk0NjU5NUJCODRCCi06MTAxNjQwMDA4Q0ZDRkJBMzMzNTNGOTNDNkFFMzUwREZGNTI1MTQwNzA4Ci06MTAxNjUwMDBCOTJGNTI0NEY4MzdGNjQwRTM0QjI0MEFGMjQzOUZCRUI5Ci06MTAxNjYwMDA0N0Y1NEVBQjBFOEU0NzVDQkI2QkNDMUY2RUMxN0NDNjg0Ci06MTAxNjcwMDBFQjMyMjQ2OUU3RDM4QjY0MzBBMkYwQzczMzNEMEM3NDlFCi06MTAxNjgwMDBGRUVEMDFGMTNFNTY3Q0ZEODUyNTQyNEY5RTBCNjFGMTNBCi06MTAxNjkwMDA5RUMwNkEzRTAxODdCOTJFRjUxNTIzOTNDNTQ2ODRFQzlBCi06MTAxNkEwMDBGNkI5RTA2NzNERDRCNjVBQkM1MzMzMTc3NDI4MjM3QjkwCi06MTAxNkIwMDBENjA3RkU3QjM4MUUyOUY2N0QwMUFGMzE2M0REQUZCMDYyCi06MTAxNkMwMDA3QzM2REQzQkM1RjZERjc3MzdGMkJERjI2N0Y2QTY0RjE1Ci06MTAxNkQwMDAyRUM1RUZENzdBMjVGRTlEOEYwMzNCRUZCQUQ1QzVGNjExCi06MTAxNkUwMDBBRjc1RkZGNDFEREJDNUU4MTMwQjRCMDQ3REI1NEI3QURBCi06MTAxNkYwMDAxQkNEMzc5MDI2REUyRjhBNkYzN0NBNUNFNzU1QzEwOEFECi06MTAxNzAwMDBFQjFGMTFENDNGMjhERUNDQTJDQjE5RUEyMTczRkQ5QTNFCi06MTAxNzEwMDAyRDc1MENEMUM3MUFCRURGNTBENUE2RTk0MTg0Rjc5OEM0Ci06MTAxNzIwMDA0MzgyMkU0NjIwNUREMEJFOEQzRDJBRTg2MDI0RDIwMTQyCi06MTAxNzMwMDBDQjQxRDMzRUI0RTgwMEVEQTk5N0E4RkRBOTgzQTAzQjE3Ci06MTAxNzQwMDBCMTdERERDNDFGQzk2NDdGOERGOTJDMTRBNEY0QjJCMzNDCi06MTAxNzUwMDA5MTVERTdCMDdDNUM5QkY4RERBNDBCRDk5Mzk2NUVEQUQzCi06MTAxNzYwMDA1MjNCOTdGMTY4NjdBRDhGRDNENkRBNEExMzNGRkQ5Q0ExCi06MTAxNzcwMDA3RkI5NzYzNUU3RjdENDA2MzhERDVCNUI2RkUyNjcwMzQ4Ci06MTAxNzgwMDA5N0JGNUVCQjgxRjM2RkQ0ODY0QzNDRERDMkRGMzU5MkUwCi06MTAxNzkwMDA2NzA4OUZCQjRCNEMzOUVEMkEzN0VEMEE5MTdBOEQzNTlFCi06MTAxN0EwMDA3NkJFRTc4RjlGODg5RkNDQTVCOTEyN0U1NDRBMjFFMjZFCi06MTAxN0IwMDBERjc1RTkwMTNCRTVFQjkyNjkwRjY4RDYwMUFFN0Y5RENECi06MTAxN0MwMDAxQjVBNDkwRTU0RTVCQzI4RjRCMDM4M0MyOUNGQkM4NkRFCi06MTAxN0QwMDBGMTY0QTYxOUM3N0EyMEJERUU1NjA3RTJDMzg5QzZGQjlECi06MTAxN0UwMDBFQ0IxRUY4RDVFMUM1RTJDNzNBRkU1N0I3REYxN0NGMTdGCi06MTAxN0YwMDAyNjdBOEY0MkVFQ0EwRjAxNzRCREFDNENEQ0VGQTIzOEUyCi06MTAxODAwMDBCREFGQ0FFRjU1NUI5Qjc5NUY0Q0RDN0ZBOUVFRUJFNjgxCi06MTAxODEwMDAzOERCN0Y5RDlDNTE0RDM5MDMwQkE4N0U4N0ZEOUQ3QzU1Ci06MTAxODIwMDA3MDNFQkQ4RkQ3MDUyRTcxRjZGN0UxNDE2MjdGMkRGQjJCCi06MTAxODMwMDAxQkY1NENGNjRCQjU4NzY0QjZCRjJBNzMxQjNDNkM3RjE3Ci06MTAxODQwMDA4RjhFNzg2ODNGNkZEQTIxMDNFQjhCOEEzOEVGNUQ0QTIxCi06MTAxODUwMDAxRDY5MTREN0QzQkE3RjFDQ0I5OTU1N0I4ODJGMkQzM0E0Ci06MTAxODYwMDBDRjdCRTNDRjZEQUJFOUJDNTc0QTA0RUYzMEM3RDUyRjMwCi06MTAxODcwMDAzN0NGN0JFM0Q3NUQzREZFMDg5RkY3NTY1RkUwNUVFOTFCCi06MTAxODgwMDA3QjI1QjFCRkU3MTM3RjdGQjczQjdDQTE3ODgyRThGNzY4Ci06MTAxODkwMDA1QzRGOUVBRDY1M0JFREM4QjYzQjFFMEFGNEZERDdFRDJGCi06MTAxOEEwMDBERkFEQTVERUNGNEE0NDFDMzVERjlCQjNGNkIzQ0VGQ0RCCi06MTAxOEIwMDA1RENFQkE0OTJFQkVDN0QwM0U0MkU1Rjc2RkRBMjVGMUJDCi06MTAxOEMwMDBGRTRFRkI1RjQxNUZBM0QxRkIzQUVBQ0IyNDE3MkVEMzM4Ci06MTAxOEQwMDAxRENDNTc0Nzg3QzU3QjAxRTNFOTVFNjI4MkY3MDIyNjhDCi06MTAxOEUwMDAxQzBBMDU1M0E4RERDMTAwRkJBM0M2RUNGMzA1RTlERTI1Ci06MTAxOEYwMDBFREE4RDcwRDk5QzhBQkY0NjVBRjRDNzg2MEM5Mjc0QkZDCi06MTAxOTAwMDA1RTc1RDI5NTc5NkY4RTYyMzJGMkJGM0FGRDY5OEI0NjcxCi06MTAxOTEwMDBFNzkwN0VENzYxQjdCQUE3RjIzQjQ1QTc1QjgxQTM0OUExCi06MTAxOTIwMDAyREJGRDhGMDgzODY0Q0Y3MTI0NjFDRjIwNTQ5REVENjRGCi06MTAxOTMwMDA5OTc2RTZBODEzMDEzOTE1QkY0RkY4Q0NDRjc2RDAxOEE5Ci06MTAxOTQwMDBCNDUzRTU1MjcxOEZEQTg4ODJBRkU1RDdCMkY4OUNDNUZGCi06MTAxOTUwMDBEN0FDN0I3QkFBQzNCNzg1RkNDRkYwNDIxMkJGRkYxMjg2Ci06MTAxOTYwMDAzRkVGNDE0MzZERDY3QkQ2ODM4NjEyREYzM0VGRTk0RERGCi06MTAxOTcwMDA5MUNGRUUzQTQ3NzY0MTlCODgxN0I4RTQ2Q0ZCRTM2NDVECi06MTAxOTgwMDBGN0FDN0FCNjA3REY1M0JCOTA3RDUwQTM5RTRFQTg5RjVECi06MTAxOTkwMDA1QTY5OEQ0RDlDQTMwQ0FCRDA4NjkzQkQ0OTdBMkJEOTQ3Ci06MTAxOUEwMDBBMTk2NUQxQTVGQkZBQzc0RDJEOEExNTkzNEFGRjE2RDY2Ci06MTAxOUIwMDAwNkUxQjc2QTNCMkY3RUQ3QUNGRUY0QkM3NkExMzU3RTNDCi06MTAxOUMwMDBDRDhFMTFFQUMyMjhCRkQ1RUFBMTkyMTlDN0YyRjVERTgxCi06MTAxOUQwMDBBMTlFMTA5OTFCMjNDN0JFRUQ3QTFGRDI2MTE5RTExNzkyCi06MTAxOUUwMDBEOTg2MjRBN0JFNEYzQjgwRUJCODBFNUE1OTVGQjlERUFCCi06MTAxOUYwMDBGQzFEOEIxQjAwMUNEMUY3NjQ2RjA0ODNGOUMzOUY3NDFCCi06MTAxQTAwMDA1RjBERTFDRDYyODhDQ0E3N0M4RDE0QTk3QTExNDFGOEQ1Ci06MTAxQTEwMDBDOUM0NzE2QUFFRDY1NTVFNUZBQzdDNEUzNkVGQzFDNkE2Ci06MTAxQTIwMDBDM0ZENEUxMzZGMkRGRURGRURGRUM0RjFGRkY2NTI5NUEwCi06MTAxQTMwMDBFRjQxQjczRjNCQ0U0NkU3MzhFREJGOTdGOUZENTRBQ0Q5Ci06MTAxQTQwMDBDODdDMjUzODRDREMzQjFEM0VDRjdDODcwNEY5Q0EwMDlFCi06MTAxQTUwMDBCRDJCNUYzOTNEN0VDRTY0RjYxRkQxQzEwNkM1OUYyQURFCi06MTAxQTYwMDA3QUUxRjU1MUY3Q0Q4MkU2RUZCQTZDQzE5NEUyMjU1M0U1Ci06MTAxQTcwMDBFNzg1OTVFOEYzQjM5RjlBRjMyRkJGNzYzMjkwM0Q3NEQ0Ci06MTAxQTgwMDA5NTJBRUNDRUFCNUM5MDc5ODY3OEUxRDlEMzQ1QjM5MEJBCi06MTAxQTkwMDA0MTVDNDVGQUVDNzA3RTg3RkQ2MTgyNzNDNzNCMjBDNEQwCi06MTAxQUEwMDA4RjJFQzE3RDdCNUY5Q0YzQzE0RDEyRkI0QjlCOUI0NEYyCi06MTAxQUIwMDBCRTc4NzExQUFGRUJBQkVFMjNGNkRDQTMwNEQ3QkZCODQ4Ci06MTAxQUMwMDA0OTE5NDZGNDNEMzQzRDkyNDc3NDU5M0NFNkVENzQwOTlBCi06MTAxQUQwMDBFNzU1NjJERUM3QzI2OUQ3NDNENEVGNUJCRDZCQUVFM0E3Ci06MTAxQUUwMDBGM0ExQzYzNjlBREZEMEY0QjZGNUY3OTE3RUY5QUMwREM2Ci06MTAxQUYwMDBDODZGNzg2NENDRUQ0QjIwNEEyRTdCNEEyN0ZEOEFFQURBCi06MTAxQjAwMDA2RDk3Q0M3N0VBNzY4OERGMzNDMDE2RDlEMUZFQUQzRjJBCi06MTAxQjEwMDBFOTE1Q0Y1M0JENTZEM0NGMDBBQjlFRTc3QkZDMzM1NEMyCi06MTAxQjIwMDBCMTA3MzAzOUNCRkMzREM5NDhGRjQ0QkYyRjY0OUQ2N0U2Ci06MTAxQjMwMDAwRDI1NTgwQUZGMjNCRjJCQjZEREY0NEZCRTM5RjQ4M0MxCi06MTAxQjQwMDAzOUU0NUY4NEQ2NDgxRUNERTM0ODkyQjg0N0VEMjlGNUM1Ci06MTAxQjUwMDBGRDhFRjhDQzUwRjJGM0QyM0E3RTI2RkMwMzQ3RDJGQzNECi06MTAxQjYwMDA3QzhGRTQ2REU0Q0Y3NDdFRkM5NzVBMTdBN0VGQTI3REJCCi06MTAxQjcwMDA0NEU5RkZBMDdENDRFOUZCNjgxRjUxRkEyMURBNDc5NDRDCi06MTAxQjgwMDAyRTNFODM5REUyRkVDREQwOERCNzk5QkY3NkIzOEVFRTBCCi06MTAxQjkwMDBGOTRCQzBENEVGMTNGRjRFRDM1QjI2RkM0QjlBMEVEREZFCi06MTAxQkEwMDBEOTgzRjBBMDU5RTZGOEU4RTI2NzE1RDY0RjRGQjY4QzE2Ci06MTAxQkIwMDA4QUY5NUQ1MkE0RDdDM0I0QkU5MkU2M0ZGRTg0RUU1OUMzCi06MTAxQkMwMDA5NzM0MjlBQUE0RDFCREVDRDNEOTFDN0YxODM3M0Y4MjAyCi06MTAxQkQwMDAwMzlEMzc0NDc2MzhDNEVGMjk5OUYzREQ5RUQ2QjY5RTJGCi06MTAxQkUwMDBEQTZGN0YzNjhGNjY0OEU3MzgwMjBGNzczODEzRkVERUVDCi06MTAxQkYwMDBCMDE1NkZGN0M0NTBBMTdGN0RDRjE5Mjk4QjNFN0Y4QzI0Ci06MTAxQzAwMDA4RjRGNjMzRkYwMThDMkU3ODIzRkQwMzg4MUJEMzIwQzVFCi06MTAxQzEwMDA2MEJDOENGNTZGRjREM0M1M0QwNDJCMkRERUUxRTAzOEJDCi06MTAxQzIwMDBFNUVEM0JGNjVGN0QyNUY2Rjc3RjAwMjIyRjU0QkQwMEUyCi06MTAxQzMwMDA4MDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCQ0Q3RDFECi06MTAxQzQwMDAwQjc4NTRENUI1RjA5QTM5RjM0QTMyOTM0Q0MyMDAwOTU3Ci06MTAxQzUwMDAxMjM4MDlBRjAwMDE4NjY0MTIxMjEyRTAyNDA0OEE4QTQ1Ci06MTAxQzYwMDA3NDgyRDQ4MkEyOEVCNDYyNTQxRTIzRDI5QURFRDIzRkYyCi06MTAxQzcwMDAyNzI0NDAxMjgzMDYwNUNBNTU4NDAxQzFDN0ZERkNBRTY2Ci06MTAxQzgwMDBEMTAyMTc1QkY0NEU1MEE5RjZCNzM0MjJFMkEzNTRDNzMxCi06MTAxQzkwMDA0NzU1MkM0QThBNjJFQkFEMkRGRjVBNkI5RjkzOTkzM0JGCi06MTAxQ0EwMDA0QzAyMjJGQzk3RjBFOUNFM0U3QjlGRkQ1OEVGQzczRUU5Ci06MTAxQ0IwMDAzQkIzMjY1RTVFMjRDOTAwQTdFOTY3MEE4MENCREIxNzI5Ci06MTAxQ0MwMDBBMDA4NjA0Q0U5RDcwRkRDRUZDMUYyNTk5QkRCMDQwMEEwCi06MTAxQ0QwMDBGMzYwREIzNDM3RjZCQkNFRDFGMUEyMUJFQkQ3QkJERjExCi06MTAxQ0UwMDA5Qjk2OEVGNTFCMzM0RDA3QThCQzQ5Q0U5OTlFODEyNTQ2Ci06MTAxQ0YwMDA0MDg4REZGRjUxNUVDNTgxMENBQ0NERjQ1NkRCMDI0RTRGCi06MTAxRDAwMDA4MDBBOTAwMEYyODA3RjRFRTM3RjUzMUQyOTAwOEU2ODg5Ci06MTAxRDEwMDA3RDlBQkI4RkExRkVCRENDQ0IwQ0ZEMkY5Nzg3MThEQTI3Ci06MTAxRDIwMDBBRkNDMUI2RDY4RDdFNzlERTkyRDM0RjQxQjk3RDE5NTk3Ci06MTAxRDMwMDAxQjc0RDIzRUJFQkFBNzFDRjcwMzI2MDgwRkEzN0RFRDg1Ci06MTAxRDQwMDBGRUYyRUREQkIxOUMzNTcxOUU4RkY2N0YwQ0RBQUUxOTk5Ci06MTAxRDUwMDA4RDFCRkRBNEE0NzlFM0ZERjRCMjQ1QjE2NUY1MDNCODhDCi06MTAxRDYwMDA4NTdFQzdGNkUzMTAzRTUyODZFRDkyNkJGOTgxM0JGMTFBCi06MTAxRDcwMDBCRERCMzIyNTkwQkMwMDM1OUJBREVGNDc2MkQ2QjEwNDg4Ci06MTAxRDgwMDBGQzY5NjFFQzc3REIwRUUzNzM4MDg4MkRFQzAzQjgzREQyCi06MTAxRDkwMDBFMDBDQjYyMDAwMTczRDgxRUQwRTQzM0I4RkJCNzhBRkMyCi06MTAxREEwMDBDRDRERUQ0QkMwMTI2RENGMDFBODNEOUFGM0U0MEIzMTQwCi06MTAxREIwMDBFMzhEQ0JFOEJDRUY3RTFDNkZEQzlFMzlFRTA2NUNERjZBCi06MTAxREMwMDA5M0E1NUYwRjkwNzE5RkU1NUU5N0U3MjMwNDBENEM4MDBDCi06MTAxREQwMDAwOUE3MTFFNDIwMzlDRDgwRkQ0RUJEMjQ4NTI0NUNEN0IwCi06MTAxREUwMDAzNEU5OUJENDQ4M0UzRUFGNDIzQzY3RTE3QjI2RjkwRjg1Ci06MTAxREYwMDA2NUQ4QUVCRTJDQzE0RTFDRTc2Rjc1RjI5MzJGNTg2OUEzCi06MTAxRTAwMDA3Q0I4RDE5RjFGQTUwQjgwOTUwQzVGQkQ3Q0FCMEU3RjZFCi06MTAxRTEwMDAxRDAxRjBDNzNBMDc5NzdGQUE3MzczRjk2RTVEMjY5Nzg1Ci06MTAxRTIwMDBFRkQ1Qzk1QzdFNTA5N0M3RTVBQzQzMTA2OEM3RjFGRTlCCi06MTAxRTMwMDBGQ0Y3RjEwMDdENjgxQzE1QTA2RkI0MUM2N0YzOUEwN0NFCi06MTAxRTQwMDBFMDNBQkE3RTJGODVCNkUzN0VCRjI4OUY5MDA2QjRDRUQ3Ci06MTAxRTUwMDA2RjcwRkU2MjBEMEY0ODAyRDU0NDhDQTVGOERGOEZCNzc2Ci06MTAxRTYwMDBCRDk4RTVFM0U3QUEwQkE3NUFGMjc3MDkxNDFDNzdCOUU2Ci06MTAxRTcwMDBENzI0QzY1REQ0RjE2Mjk2MjdEQTBFQ0JERjMzRjQ4NzIwCi06MTAxRTgwMDAxNUE2MDM4NjdBNjM4RUIxREU1QTcxMjBGNjdEMUQwRThCCi06MTAxRTkwMDBGMUU1MkQ5QkVGQjAwNTVDNThBRTM3MjkyMUU3OTlFREIwCi06MTAxRUEwMDBGQTdBQTZFRDRGNTI0QzM4OUU2NTlGM0Q2NEM3RkQyREQyCi06MTAxRUIwMDA3MTJCQTA2MDdGMEI4MEQyOUU3RkU2N0IwMEY1MENFNzQ0Ci06MTAxRUMwMDA3OTEyMDREQjEzOEM1QjQ3RTMxMkJERUY0RjAyRTkzQzUwCi06MTAxRUQwMDBDNjdEMEI2OTgzRDZBM0ZFOTczREI0MTNERjdCMkI0REU0Ci06MTAxRUUwMDAwMTdGQ0MzQzJEREFGODlGQTVCN0ZERTIyQkVDRjdEOUFBCi06MTAxRUYwMDAzMzQwNEZCMDBFNzM2OTNENjM3NzdENkMzNjYzMzkyRTg2Ci06MTAxRjAwMDA1OUQwQzk1ODc3QzQ5QzgxRTU4OTlBN0Y2QzNDRTI2MUJECi06MTAxRjEwMDAzMkY1OUIyNjYzN0I2RUQ3MTEwN0EyRkNCRUY2QUIzNjZCCi06MTAxRjIwMDAzOTEwNkY2RjlCQ0QwMDAzNDAyMEJFMDRGQkUzMTg1NEIzCi06MTAxRjMwMDA3RkQwN0JENURDNDZGQ0ZEQ0FGRDQ5NjFGMzc5RUNFNzM3Ci06MTAxRjQwMDA0MUU0NDVBNkEzNEFDMUVGMzcxMEREODg3OTE0NDA1MTFBCi06MTAxRjUwMDBCMzc0MTVFOEYzMkEyNDFGNjhGRjU0N0ZBRERERkZFNjU0Ci06MTAxRjYwMDA3QUEyMzNFOERBNDhGMkUxMzg0MEI4ODVEN0FGQTRDNkEwCi06MTAxRjcwMDBGMkZGRDI2NzdGQzJGQ0I5MjgwQkY5OUUwNEUwNjZDMTZDCi06MTAxRjgwMDBCRjBFRkM3NzNBOTdGODM1MzRERDg5RUJCRDM1OENGQzE0Ci06MTAxRjkwMDAwRjE3OUZGRjlGRjEzQUEzN0MzRTIyMjE5RjFGQkExMjg5Ci06MTAxRkEwMDBFQjRCOUY5MUJDNzY2QzNFQjk2Rjk4RTAyNzhERUY3NTM3Ci06MTAxRkIwMDAzRUQ3RTFCODc0OTNDNDdDQTlENzNGREYyN0NEMDgyNTZECi06MTAxRkMwMDA4MEY3MzY4RDJFODYyODVEQjM2OUJFNjVDRjVBQTAwNTkxCi06MTAxRkQwMDBEN0I3NkNEMjg4RkVCMUUzQzdCRkI3QjQ0OTAyMzk2NjQwCi06MTAxRkUwMDBGQzI3OUZCM0Q3MTBCRkM4RDBENUFGMUFGOTY3RENCM0IxCi06MTAxRkYwMDBBNzMyMkFGMjQ1NTlDRkY4NjhEM0U0NERENzIwRkYxODBECi06MTAyMDAwMDA5NEQ3MjZGRjlGN0U4RUYzMDFFMjcxMjdDMkE3MzI3MzE5Ci06MTAyMDEwMDA2RTM2Q0QzRkRCMDk0QUNCNzgwNkNCMUMwN0NBODlBQkFECi06MTAyMDIwMDAwNTg4RTBFQTkyRUJCMjAxRTFCOTE5RDEyNTIxRERDREI1Ci06MTAyMDMwMDA1MUFBNUZCRjBFRjFGODAzNzNFMDJBOTJGM0M3QkM0M0M1Ci06MTAyMDQwMDA3OEZDNkI1Q0NCQUQ2MDY2NzJDRDM2RTE3ODczRTdEODE3Ci06MTAyMDUwMDAwQjY5M0ZCMzFBMDQ1REJGOUVERTc1OUM5RUJGM0UyOThGCi06MTAyMDYwMDBDNUQ0ODBFRkJENkU4MjQ2Qzg4OEVFRTM3NUFCM0Y5QjVBCi06MTAyMDcwMDBFODBEMzdFRUZFMDhGMTYzNTI0NjQ5QTc1MzdBOTYxN0VBCi06MTAyMDgwMDA0NEM5MUZFOTc4OTRBMkYyNkY5QUU0NTQ2OTlFOTM2RTUyCi06MTAyMDkwMDAzM0QzQkQyNUFCRDU0NkVCQkExNTQyMDcxNDlDNzc4OURGCi06MTAyMEEwMDAzNzZDMjNGOTc3M0JCODJENTQ2MkQxRDU0RDFGNDQ3RjRGCi06MTAyMEIwMDBFNUZGRTgzODhERUYyRkU5OTQ0MjI2RUNERjVFRDcwRTdFCi06MTAyMEMwMDAxNkM0RUZEMzc1N0JCOTFDRkNDREUwQzZDQjEwMUVDQjdDCi06MTAyMEQwMDBDN0RCQkMyREE0QjczNEZBMzJBQjI2Mzg5RDQwNUY5REQ4Ci06MTAyMEUwMDA0OTlGOTY2ODNCQUVCQkMyRTEwQzRCQTlGNEQ4N0EzQzQxCi06MTAyMEYwMDA3NjFEOEREOTRBQ0E3OERDOEZCQUE2M0M5REU5OTM2OEQzCi06MTAyMTAwMDA2MTcwNzQ5RkUzNkMwMDRFOTJGMzNCNTM1OENFMUY3QjdCCi06MTAyMTEwMDBBRUQ4NEM3ODNBRjYzQjZCQzg0NEY1MkQyM0RFQjhEM0U1Ci06MTAyMTIwMDBDNzc1MjA3OTczMkNDMzZCQjY1MTdCNDY2RTQ4QzVGNkQ0Ci06MTAyMTMwMDA1QkNDQTA5MjVDODZFRDQyNkUzRDNGRTlBRTc3NDg4RTY3Ci06MTAyMTQwMDAyRERGRTkzMkQ5NEQ4MjhFNjUzNDAxQTQ0N0Q3QkVGMzI1Ci06MTAyMTUwMDBFRjM4Q0VBREM4QUM3NjZGNTQ2RjJDOUFGMkU4QzYyNzM0Ci06MTAyMTYwMDA5MDBFMTY5OURCRUUyOUM3NjdBNzIwM0NENjhERjBGQ0IwCi06MTAyMTcwMDA4QkE5N0QzOEU5RUQ4RjFGQjI4N0NERjRERUMzMjNCNzdECi06MTAyMTgwMDA0QjM4RkVDQkE5ODE5MUI0MUZDODU0RkFFN0UwRjM5QTBCCi06MTAyMTkwMDA0MzdEQTEwNURGOUZGQUU4M0YwRjkyREVCQ0Y1QzlCRTgzCi06MTAyMUEwMDBDQzVGM0FERDRGMjMzRUM0RjU5QzQwM0VBNEY1OUNEQzU5Ci06MTAyMUIwMDAzNzg0RjkyRThBN0YwMTg3QzUyODBGQzgyNDZBREVCMUNCCi06MTAyMUMwMDBDRTRGRjgwQzI0Q0JGQ0RDMDJBQTcyMTlFMTdCRUY0RDU4Ci06MTAyMUQwMDA0MDc2NTM4MTY0NTI4OENFQkI5QTExNUVBNjMzRTk0OTlBCi06MTAyMUUwMDAxOTZGRTZGNzE2OTk1MUJGMTIxRDA2RTQ0MjgyQzcwOTFFCi06MTAyMUYwMDA5MzVDQTBGMTA1RDA3QURFN0Y2RUU0RjYxNjdDN0ZBRUFDCi06MTAyMjAwMDBENjNGNEE3NzQ3OTdGQzg2RTg2RUIzREQ2QkM3MjUxQzNGCi06MTAyMjEwMDA0RjMyRUE3REJEOUMzOTNFOURGOUU1MTZDNzk3NjAyOThFCi06MTAyMjIwMDA4QzNFNUY1MkZCQjVCMTlFMEYwQUM5OEQ4MjA2QjlGMDk0Ci06MTAyMjMwMDAwRTJDRUZENEUwN0VDNTQ4RkZGN0M3RTNGQkI3QjVBRjgwCi06MTAyMjQwMDBEQkYzOEE0Q0YzNkVGRUU5REIzNEVGNEI0RTlFMTc1RUY4Ci06MTAyMjUwMDAxMUYwM0I2MTEyRkFBNTVCQkYzQUZFQ0FFM0EzRTRFMUM5Ci06MTAyMjYwMDBGNUVBQ0YzRjdFRTg4REIxMDExQ0ZGRTNEREEzODcwM0Q0Ci06MTAyMjcwMDBEMkREMDJBOUYzQTMwNzExNUY5RkJCM0FERkY5Mzk5NkJDCi06MTAyMjgwMDA0RkJGNzRBODFGQzEyRjdFQkQ4QjZBQkYwMDRCOEMxQzMzCi06MTAyMjkwMDAzQTZFMzJGMTdFMTdEMTNFRjBGOTZGMEFGRDM3MzNCRTQ4Ci06MTAyMkEwMDAyREE4MjcxMDZFMEI1QUM2NkMyNzc5MzA0RENBNEYyM0M0Ci06MTAyMkIwMDBCQkU5QzQzMUUzRkFFMkQ3QTk4RkFGQUY0RjFGNUZFRjlECi06MTAyMkMwMDBCNzhDRTA4RjcwOTgzOENFMkRGNEFCQURGMzczQzJFRkJFCi06MTAyMkQwMDA2NzdCNDY5QjkwMTVBM0NGMzMzQUM3QTZFNzQ3RjFFNDQ3Ci06MTAyMkUwMDA1N0VBQURENEVGMUExMkY1ODg4QUI5MEU4MUQ3QjkzNUZECi06MTAyMkYwMDBBNjUwNDMwRUY3RTNGNkVCRjAzOUUxQkRDMkQzQzBGNUNCCi06MTAyMzAwMDAzOTRFRDQ2N0Q4N0Y1MUU2NkY3ODVEMjRFODFDQThENzkyCi06MTAyMzEwMDA3RTAwRkE0RkY1QUE1RjYxQkYzNzk3QTVCMjVDOTg3QjQ0Ci06MTAyMzIwMDA0QjlCOTVFQ0RDNkU3OUE2QkU2RDNFM0RGQURCQ0IzMzY0Ci06MTAyMzMwMDA4NDlFRUNFRTA3Q0NDM0E0M0YwMTM3NjdDMUZBMjRBREZECi06MTAyMzQwMDA2RTJBRjk2M0MzQUY0ODNFREY5OUVBOTVEMDY0ODQxQUQ4Ci06MTAyMzUwMDAxOUMyQzRENzI3MjE0NEYwNUU2RDBBQjJCREU3MjAzRDAzCi06MTAyMzYwMDA4MDY1OEJDOTlCNjlDMTUyMzI3N0Y1MDE5RTI3QzQ3MDg1Ci06MTAyMzcwMDA5QTA2MDEwQkQ1N0Y2QjhBMzQwMEJFQjdDQTUzOTk0OUMwCi06MTAyMzgwMDBGNEZGMjYzOEZENjQxN0ZEMjA3REY1MTg5MkEzOTVFRTI1Ci06MTAyMzkwMDA5OTczRTlGOTZDMzVENUREODJGQjZEQjRDQTc3RTc5M0EzCi06MTAyM0EwMDBGREYzMDNDOTRCNzZBRjBFMTc1RDdGQ0NCNTc4QUQwNDU2Ci06MTAyM0IwMDBERjdFNDFEOUFCMjJGRDE2QkVBMjM4NEMwQzdGODc0QTg2Ci06MTAyM0MwMDBFM0JFNjEwOUY2QTU3NUJERTU1QzNGQzY2NDI2M0IyREZECi06MTAyM0QwMDBFNDFBODM5QjdERkJEMDdGMTRGRDFFREZGRjIzMjg5MzJGCi06MTAyM0UwMDBDODFFOThGMzVCMDdDQkYxOUI0MDY2N0VGRjExMjgyQzNCCi06MTAyM0YwMDBDNzZGODYwMEQ3NkY4MTg4RjU0QjdDRUZEREQyRkZEOUEwCi06MTAyNDAwMDBCOTFGQTJGQjdBNzdFMjU3QkJDOUFFOUYyQkI1RjdDREI4Ci06MTAyNDEwMDBDMTc2QjUxMkYyNDhDRkZDREFGMTdGQjY0NjcwMUQ0QTlDCi06MTAyNDIwMDA4MzA1OTJEMEJFRkEzNUQxMjlEOUVGNDc1REExOUREODU5Ci06MTAyNDMwMDBFRkFFRTQyREE5MUQ1ODhGOTg4NEZEQTU1NjA2OUZBNEU0Ci06MTAyNDQwMDBGRUFBMTlGQzBENThGNjREMEUzQzRGN0NGOENCMTQzMTBBCi06MTAyNDUwMDA0RUFEQzVFMTI2Rjk0ODA2MTY4REYzRDEzQjJFQTY3NzgxCi06MTAyNDYwMDBEMkJCMzc2MUJEMENCMTQ1RjAzQUQxNTdEMDlCRkE1NzdBCi06MTAyNDcwMDA2MEI5N0JDMkVBRUQ1NDY4REM1M0IyNzcyN0JEM0FENTI4Ci06MTAyNDgwMDBDQ0VGQzM2OTk5RDc1MTE2QTc1RjdDQTNDREZDM0VGQzY2Ci06MTAyNDkwMDA0M0U2RjcyNzc1NTkwQ0ZBQzUzN0NFMUM3QzFBRjczNzc3Ci06MTAyNEEwMDBFNUVGOTY1RUY1Q0VDRDA1ODI3RjdDN0RDQ0MxNDRGNjBFCi06MTAyNEIwMDBFMEZGNjhGQzg1MTA5MjY4M0QwRDdCNERBMTE2MjY0MjE5Ci06MTAyNEMwMDA2MTFGOTRFOUY0MDg5MUQ1NDQ2RkU1MDA0MUEyN0JEOERGCi06MTAyNEQwMDA4QjdBNEM5RjI3OTdGN0ZGQjlFQTIzM0FDNDc2QjYwNzYxCi06MTAyNEUwMDBEQjlGMjczOTY5MEYwQTNFQzFGQTU0REE4RjIzMDg1RTUxCi06MTAyNEYwMDBCMkQ3NTAyMTgzMDVFQjQ5RjhBMjkwQkI2RTIwM0JCNkMyCi06MTAyNTAwMDBBNTAyREFBOTNFMDkyMjEyRTE3QjBBNDE3QTA4RjlDMzQxCi06MTAyNTEwMDAzMkQzRUQ1NDUwQjhBRUQzRjFGNzQwRTVGMjcyMDg3MTAyCi06MTAyNTIwMDA3OTI1ODQ4NUJFMDdCOUYxMjk5Q0ZGQUE0RjQwRUM2NzQ1Ci06MTAyNTMwMDA1NDk4RTkxRDFEMTlGNzQ3Njg2RkMwRTVCNzk4QzlFRUIzCi06MTAyNTQwMDBGMEZEMzBCMUJGMzBBODQwODcwQjIyQzQ3M0VFNzA5OTA0Ci06MTAyNTUwMDAwRTgxNEMzMUJGODA4NzlEOUVGQkEyRjA3MEM0QzEyM0M5Ci06MTAyNTYwMDA4OUUwRTE4REMyMDNFNzEwRjAzODAzQkUwMjNFOTMxNDA4Ci06MTAyNTcwMDA4NDBGQ0FBN0M5RDAyNUQxM0M4QTY2REY1NDgyOTdDQjg1Ci06MTAyNTgwMDAyQUYwNzNEOTBCNUM1RUE4Rjc5QzA5OTc5MjQ4QzAxMjk5Ci06MTAyNTkwMDBDODRGMDA5RkE5ODlFOTY2ODQwNjlGM0YxNjAwQ0IyRjhDCi06MTAyNUEwMDA1REZFNUM1QjIwRjM3MzVEMEUyMTdGNjY5MjNEMUEyRjBBCi06MTAyNUIwMDA5RkY0RTdCRTk0Q0EyRjY0QTQ4N0FBODJBQzc5MTZENDhDCi06MTAyNUMwMDA2N0JFQzJDQTNCODc2MEZERUFBN0YzNDRCREFDRjI1N0MxCi06MTAyNUQwMDBCOTU4RkY0MUMxMjg1MTFGNTc1OTY4NDU3OEQ1OUI0NkM2Ci06MTAyNUUwMDBDRkFCQzJGQTkwODA2OTIzRjFFNUYyN0FCNEFCNzE1RkE4Ci06MTAyNUYwMDA4MUE0N0I4MjQ0QzdBNjBDNzA5QkIwM0Q1MDVGRTQyRDQ0Ci06MTAyNjAwMDBDMDdBMDBFOTEyMTA2RTc2MjlBNzlFRTA2Q0ZGMzk3ODM3Ci06MTAyNjEwMDAxQjcwMTUxOTY5ODFDOTA1QjhERUZDRjk5REFCMDUzRTMzCi06MTAyNjIwMDAyQkZCQ0ZDNUZFQzczQkFENkNCN0FDQjEwNTgzODQyNzkwCi06MTAyNjMwMDA2NDc3Nzc3RDY5NzQ3RkM3OUZGRTc5MEQzRDdGN0EwMDRGCi06MTAyNjQwMDBCODQ5QkY4MDQ3MkVGNEJCQ0U1QzhGRDkwMTVDNUY4QzRDCi06MTAyNjUwMDA3MjgzRTIxRjM4REY0QzlBMkY4MEVBNDlBNjc1M0QyNTI4Ci06MTAyNjYwMDA4NTA4RkVDQkVCQTdCMTNGNzAyNENGRkZGRDgyQkUzMUMyCi06MTAyNjcwMDBFM0UzM0VBNEYxMzRBRkQwNzNFMEM5MjkyNEI4OTU4Q0NDCi06MTAyNjgwMDBGNDVGNEJGRDRFQjg1MEJFQTY1MUJCQzA0MzRGNjU2M0NGCi06MTAyNjkwMDA4MTMyOTdFNjhEN0Y2RTRFRjlFNjg2MjUzOENGNTJBNEJCCi06MTAyNkEwMDAxMTkyRDM4QjBCMDIzN0QyQjg0QkNEOTE0MTg1Rjg2Qzg4Ci06MTAyNkIwMDA2NUNBM0IzNkE2MEIwNUU5OTNFNDAzRjEyQkVEQjcwNjlCCi06MTAyNkMwMDBFOTkxRTg3QUJGRTA1N0U0MDA3N0I3RkQ4QUY4RjVGOEJBCi06MTAyNkQwMDBCQjZFNThFODEzMjI0RUMyRkYxNUNGMEQzRThGNjYzNUY0Ci06MTAyNkUwMDA4RDdGM0JBRDYzQTlENEI1OTBFOEYyRjNGNEQ3NkM3RjRFCi06MTAyNkYwMDA2NkJFMUMyOEU4NEU5MzVCNEI5RkZCOUFGOUU3NTkzMzYzCi06MTAyNzAwMDAwNDI1Q0QzRjg2MThCRTVCRkE1QzkyODVGQ0MzQTU5RjZECi06MTAyNzEwMDA0MjI4MDVERjJGREJGNzc4MDNGOTNCQTVFOEZGOTM5RkZECi06MTAyNzIwMDBCQzc4RDc1M0NDNkZGQjQ4NUYyMkU4OTZGRUY3QjNDRjU3Ci06MTAyNzMwMDAzRjQ4N0M3QTY1MTJDN0ExMjZCRDc2NzQwOEQ5NDE1M0ZCCi06MTAyNzQwMDA4RTQ2MUExMDZENzBFMkQ5MzcyRTEzRjRBRkZCMjU3RjM5Ci06MTAyNzUwMDAzMzlEOEYxRTlGMjZBREI4ODdGMEJEMENGMTZGQzdGOTcyCi06MTAyNzYwMDA5Njk5ODJBMjZFNzVCODU1OTY3QkMyNEZBRUQxRjZGMTlFCi06MTAyNzcwMDAxOTc0NkU5Q0NGNzI0NTNENTA0QUZCQzk5NDgwRTU2MzQ1Ci06MTAyNzgwMDA0OEY4MTMzMkZFMjNGRUJGRkQ2ODY4MzVBRDEzQTQ2RjExCi06MTAyNzkwMDA2QzI0NkY0RUExNUY0Q0ZCQkFGREIxNzhCRkEzRUI0MDM4Ci06MTAyN0EwMDAyOUY5RERFNDE3RTMzRTE3QjcxQkRCOTdDNkVBODcwNDc4Ci06MTAyN0IwMDA3RUYyOTYwMjJEMUU5NjBERDlCNEFGNUZBMzNGRjRDMUYxCi06MTAyN0MwMDAzMDlBNzc3RTFBRDk4NzEzMjlBRTkwNDA1RUVBRkU3MTVGCi06MTAyN0QwMDAyOEI5RjI5MTAyQjY5N0RCMjVFMjg3MzI0QkUyRkUwQjc1Ci06MTAyN0UwMDBGMzg1NUZBQ0RCRkZDQjFFOTJEODhGNUJGNjUwOUY1MTE5Ci06MTAyN0YwMDBFQzI3NkJGQzBBNjEyRkYzRUY5M0E0NTc4OENFMDIyRkNFCi06MTAyODAwMDAwM0QxQzEyRERBOUU2MDczMUZBNkI5NUI5QjRDRUNDNzQ4Ci06MTAyODEwMDBEOEE1M0JCQ0E0RjdDNzNERDJGRkI2N0Y2M0JBNDk3NUM0Ci06MTAyODIwMDA0MzI2RDUyN0NDN0RDQ0MzRjY1NTkwODQzNUZBNTU2QzFDCi06MTAyODMwMDA2NzNFOTlERTk1NEJGMzNGOTkyRTgzOEFGMzM1MjQ3NUQ1Ci06MTAyODQwMDBFNTkyOUM1NTlGNzU3ODQ5RUZDNkFGRkJFRDAyRTEwRjBECi06MTAyODUwMDAwQzA5OEZERjE0RjEwODNDMTM5RkU3QkM1NEJBODlGMEQwCi06MTAyODYwMDA3QzEyRjk5Q0YwQjdDQzM1QkMzRjM4Qzk2RTk4OUMxOUU2Ci06MTAyODcwMDBDMUIyNDFCM0QzNzMxRTFCOTUzNjFCRTFFMkEzRjVDNjZCCi06MTAyODgwMDBEOEQ1MURBRjVFOTM0MkY2RjI2RThCM0ZDNThERkQ0RURGCi06MTAyODkwMDAxRUNFMzVGODQxRjE2NTUxMTg5MTUzRDg0QkZCMUIzM0NGCi06MTAyOEEwMDA4NzA0MTJDMDVEMkY3RDlCMkMwQzJGOUQ2RTdGNURBNzMyCi06MTAyOEIwMDBDMDA3NTZDMjQ3QjlEODg3NkE3N0RCN0Q0NDdGQTFBOTk0Ci06MTAyOEMwMDBFNDRGMkVCQjE5REMyREQ4N0JEOUNCMEYzNzM4QThERUNGCi06MTAyOEQwMDAwQzRDQ0QyN0U5N0ZENEZGMTM3Mzg4RUNGMTVGQTY4Q0Y1Ci06MTAyOEUwMDBCREI3MUNFQkJCOEU1OTg0OUZBMjJBODdGMjYzRUM1OEJDCi06MTAyOEYwMDA3QkE2MTk2NDAzQkQ3NjRBOEI0OTFFMTNERDIzQkQyNkQyCi06MTAyOTAwMDBDOUM5MjBDN0QwNjM0QTVFODZBMUVFRjIwRTMwQkM5RkQzCi06MTAyOTEwMDA1NjkyNkI2ODRGNTc0NjE5REE4QkExMzYxMkMwRjUxNEUwCi06MTAyOTIwMDA2NTRBRUUxMEFFQjhDRjhDMDI0M0JCMURFOTNBNENFQkMyCi06MTAyOTMwMDBGQzUyRDg1MTI1Rjg0RkU4REIyMERCNDM2NTExODAwN0I2Ci06MTAyOTQwMDA5MDBFMjYxRTM3REE1OTI1OTEzNkY2Mzc5MzBFNUIwQzFBCi06MTAyOTUwMDA3MTAwRkI1OUUyNTBDOTg1MUE3RjBEODQ4MUM0NUY0ODFDCi06MTAyOTYwMDBGRjVFOTI2MzI3MEY4QkI4OTNBQ0MxNzM1OUI2RDBDRjdCCi06MTAyOTcwMDBDQjVFOTZEODBFNUM3NkNDQ0M3QUUyMjQ3OEJCRjE0MzYxCi06MTAyOTgwMDBGMjUxRTdCQjc4QjhGN0Y1MUJFMURDN0ZBRTExQUU1OTI5Ci06MTAyOTkwMDAwMTIzNUMyRkFCMzFDMjM1M0I2ODg0RUJFMDVBMjM1Q0VBCi06MTAyOUEwMDA3MzU0MjMxQzg3MzQ0RDM0RjQxRkQ2NTY2OUE4OEZEODJFCi06MTAyOUIwMDA3NDg1QTFGRkM4RDA2QzQzN0RGNDYzRDcxQUZBOEY2OTgwCi06MTAyOUMwMDA1RjYwNjgxRkI3RjczNjQzN0IzQzVEOEQwRjJGMzNCNEQ0Ci06MTAyOUQwMDBEQjUzOEYzMDVEMUQ0MEJBMzJBMTNFMjg3Q0U5REZFMjM3Ci06MTAyOUUwMDBFOEMyQzI3MDJGMUFFOEY0ODY2MkYwQUZFMjNGQzI3RkZECi06MTAyOUYwMDA5OTk2OTc5ODAwNkEwM0YxRTM4NUMyRkYxNTg0RkY5NEM2Ci06MTAyQTAwMDAyOEZFNzVCOURBMTM5RkVBRjgxRDQyRkE5QUU1NjU3OTRFCi06MTAyQTEwMDA4NEYwN0VCMjI0ODVFOUU1RTA0QjI3MEYyQjQwRjg0Rjg4Ci06MTAyQTIwMDA4NTAyRENFRkFDMjkyMjhFMjJDOUMxMjZBMjkzNEU3MDBBCi06MTAyQTMwMDBCNTkxRkRCOUM2MTI2NEZGNDU0NUIzNzAyNzI5RTUzODQ1Ci06MTAyQTQwMDA3RkYzRkIyNUU4NkZDNkFDQjM1QTQ5MDI0QkNDN0VDNzc3Ci06MTAyQTUwMDA4N0RCMERGNUMyOTdGNjFBRkExNzc1ODYwREY1RjE4NzIzCi06MTAyQTYwMDA0MTIyN0Q1NUYwQTZGNzc5MkE4QjNFNTQzOEZDNTVGQzVGCi06MTAyQTcwMDA0OUYwNzkyQTRCQkYwQ0RFNDVGQTM3REVDRkJENUFBRDlGCi06MTAyQTgwMDA5N0QyQzhBRkZGN0JGQkYzNjhENkEwN0YzNjQ4MjVCRjNGCi06MTAyQTkwMDAzNzcyNDdBQUQ3MzQwMEUxOTFGQzRFMDNGOURGODA3NjA0Ci06MTAyQUEwMDBCNDE1OTUxMUI4MEZCMjNFOThFRjEwRUZGRjJENjlGMkYzCi06MTAyQUIwMDAyQUVBNkY0MkZGOUNGMDhFNzBDOTIzN0JBRjE2OTJCRDRECi06MTAyQUMwMDAwNDE3QjI1QkM4MEY4MzJCODQzREJGREFBNEIyM0Q5QUQyCi06MTAyQUQwMDA4NEY2MjhEOTIzMEQxNTdFQjY5N0E3NDM3MDIwM0RCRkY1Ci06MTAyQUUwMDAwNjk0NTVDNDc3OTIxOUVENTc3Q0ZFM0YyMzAyOEQ4NURECi06MTAyQUYwMDA0NTYyQjE0NDNGNzc3RDIxQjNGRjNEODVGQzY5MDZBNjYxCi06MTAyQjAwMDAwMkE0Rjc0RUQwRUZCNDNFNzg2OTFFQzVFMzRGOTAyRTc1Ci06MTAyQjEwMDBDM0Y1QjdCNUJDMzA0RjI1M0JDMzAzRUUwOEFFM0IyMDMxCi06MTAyQjIwMDA0MDA2OUIwQjAzRjdEMEI4RUY5QkRDQUIwQkYxREQ4M0NBCi06MTAyQjMwMDAxM0ZGMzI4OEVDOTE3NTg1QzJFRUIzNEIwODI5QTQ4MTRFCi06MTAyQjQwMDBGRUYzMTVBMEU3OEREOUNBN0Q4NTQ1RDEzODRCNEZGNEVBCi06MTAyQjUwMDBBM0M3MzNGNUY4RTZBRUJBMzA5NzE2Qjc1NzIyQkE4QjRCCi06MTAyQjYwMDA4RjNCNDZDQ0VFQUFGMUE0RkY5Njk5RDhFRkZDMEIyRDMzCi06MTAyQjcwMDBBRTk0RTc0OTY1MzlFRjgwNEU3QjNBMkY5OUZERkZFQjI0Ci06MTAyQjgwMDAzNUJDOTkxRDlEQUI3RThFRUZERDEwMTRGNkQ2MDI5M0Y5Ci06MTAyQjkwMDA5N0ZERjVEQjMzOEY3MzFDQzUyRTk5QzA0N0ZFNTA1QTQ1Ci06MTAyQkEwMDBGRTc2MTE3RkQxRTMyNTk3NDlERkM2Q0UzQURCN0U2RkYzCi06MTAyQkIwMDBDRjNDNjY4ODU3QzExMzdEMTJDNkQ3QTNFM0FCQUNGRkU5Ci06MTAyQkMwMDA2MkY2Qjk2NTkzNDdFODM1RjJGM0RGNkZDRUFFODRENDkxCi06MTAyQkQwMDA0NEYzN0NDRUYxQUJFQjgzQUYxQUY4RTJDNkRBQjcwQzY0Ci06MTAyQkUwMDA3QzcwOTNGQTlFQTEzREUyRTlCMjUyQkMzMkIyMjc2QkVGCi06MTAyQkYwMDAzQUM1RDczRkRCNkQyRjI2M0MyMEZFMEYxNkM2QzRFQjJGCi06MTAyQzAwMDAyMkNEQTNBQjYwRUNCOUVDRjcyRkJDOEVBMzc1OUQ4Q0U1Ci06MTAyQzEwMDA1NzdEQkZFRkQ0QkRDOUY1NDg1RDg0Q0JGOEZERUFGMTFGCi06MTAyQzIwMDAxMUJENDQ3MUQ4NDRGNkNDNUQxMkNBMEJGMjc3NDk1RUVGCi06MTAyQzMwMDA3ODYyRTQwNTQwMUVEOUZGNzc0OUEzQkM0NEVGQjZGRDk2Ci06MTAyQzQwMDBDMTQ3QTlCREFCREVFRURFRUVFM0Y4MDhDNzRENkE5MUUxCi06MTAyQzUwMDAyRUM4NkUwMEE3Nzg3RjgxQ0RDMTc2RTgxRDNFRTEyRjlBCi06MTAyQzYwMDAxRUFERjhFQTA2QjI1RjczMjBENThCMzIxMDdGQzI3RkFCCi06MTAyQzcwMDBBMkI4Qzk3QzUzMUFFQkZGRDU1OTA3QjhGRTYxMzM4ODU3Ci06MTAyQzgwMDBCQzUxNERGODIxRjI1Nzk3QTZBNjBBQkI1OEMxRkU1ODcxCi06MTAyQzkwMDAzRjkxNjFFNkZBQTExMTgxQUY5ODFGRjNDMzlDREY1ODAxCi06MTAyQ0EwMDBEQTVGQzRGM0MwMTMxOTQ0N0NGODMzRDlGRkI1RTA1Nzk5Ci06MTAyQ0IwMDA3NzgwREE2QjMyRDBERjQ2RkFGREM0QUM4RTM1MTE2QjBCCi06MTAyQ0MwMDBFRDFBNzBBRDA1RjFGRTQ5QjJGQTM5NTkzNDYzN0NGRDU1Ci06MTAyQ0QwMDBBRTI1M0ZGMzEzOUJFMERGNDlCQjRFQ0Y1MzExM0UxRkEwCi06MTAyQ0UwMDA5QTI0RjZDRkQ1Njc0QzFDQUYwMTY3QzQ1NjhEN0VEOEE5Ci06MTAyQ0YwMDAwMzgzMDM1NjFGOEVERjY2NDU3QkQyMjk5RUNGMUUxM0FBCi06MTAyRDAwMDA4RENCOUVCMDYyNDk3MUQwMjQ1MTNBN0RDMkVFNzVGOUU3Ci06MTAyRDEwMDA0NDlFNTMyRjQ3MTBDQ0IwOUNFNEQzRTU3Q0VCNzA4QUUzCi06MTAyRDIwMDBCRjlEREM2QzA3OTI1QjM4QkY0MkZFOTZGQUFDODhFMzJECi06MTAyRDMwMDBGN0NCRjAyRjAyODExN0Y3MUE1Q0FGNjc4OEZDMDVGMTFCCi06MTAyRDQwMDA5RjQ3NDJCRjE2RjcyMUZCNzIwQ0YxNjc3MjYwNTNCMUM3Ci06MTAyRDUwMDBGREZEM0RGNjZEODRCRkVFRjUxRTE2RjFCMENGOUE0NzJFCi06MTAyRDYwMDA3M0JDNUJBNzEzRDlBN0M1QkQ3RjBDMjBEQTJGREI0NjQ4Ci06MTAyRDcwMDBFRDhCNUY3RUZGMUQ4QUNGRkRBNjMwMzBENDg3RUQwQjMzCi06MTAyRDgwMDBDQzcyMzFDOUM5QzVBOTFEMUNBNzJCRjZDOTNDMkZBRUYxCi06MTAyRDkwMDA5N0Y3OEI3MkFCMTE3RDcxNThFQzg4NzA1Q0VGNkNGMTFBCi06MTAyREEwMDBGQjlFRjZGRkQ5Q0Q5RDFCRjMzOTVFMkQ4RjI1QjlBMjcxCi06MTAyREIwMDBDRjhCRUIyOEE2NzVFOEZCRDRENzExMURBNzc3RkVEMUUyCi06MTAyREMwMDBFM0QwN0FGREUzODdENjBDRDdGMjA4MzdGQTEzRThFNUFCCi06MTAyREQwMDBBQjc0M0FCNjI2OEVGQkQ3NjhGODhDQzc0RkMxODg2MEIzCi06MTAyREUwMDA4OEUzNzk2RTcwMzc2MEZENUEwRDRFOUZDREMzRkQ3MDNDCi06MTAyREYwMDAzQzQ0MTk0RkY4NUQzQ0RCRTkyNTM4RUJFM0Y3Q0I4MDI5Ci06MTAyRTAwMDBDMDUzQkRDQzczQzU0OEZGMUNBMkJGREI4MjIyNEZBMEJDCi06MTAyRTEwMDBCNzIzRkQ4OTM4Njc3MzBBRDNFQkUyRTdERTdBRTdFNzg5Ci06MTAyRTIwMDAzOENCQUQ4RjhFMjkyNEZEQTFCRjFGMEY2Nzg0RUY3MEIzCi06MTAyRTMwMDA1QUNGMDI0OUU0Q0YxMEJFMzdEMUY4RjFGOTgxRjM4NUJBCi06MTAyRTQwMDBFQjg5RUM0RUQ2MEIyN0I2RkQyQzQ0RUIzQjkxMDU2RTdGCi06MTAyRTUwMDAxM0YyRTNFMjdEQkY3REQzMzQ5NkU4QzQxOTk2QjA4NEMzCi06MTAyRTYwMDA1REM2Rjg1N0JDOUU3MjQzRTAzQTkyMjM3Njk0MjM2NDgxCi06MTAyRTcwMDBERkQ4RjVGNzA2NUEwQ0VGNTU2NzJBNzdGOUQ4MUY1NUIyCi06MTAyRTgwMDBFRTI2Nzk2NDU3ODVCRjM2MjQ1MEMxRjVFNTU2RTFBRjhCCi06MTAyRTkwMDBFREVBMzRDQkM0REZCQjJDMTAyMjNEQkVGQ0Q1MEM5NTMzCi06MTAyRUEwMDBFQ0M3RTU2ODc3QjBBNzkzMTdFNEY1NDIzMkZBNDFFOTM5Ci06MTAyRUIwMDAwOUVDMDY5MzU3RTY3ODVDNUE2MDBEQzE0QkZBRDFENDAxCi06MTAyRUMwMDAwNzlGQzg4OUZBQTNCQUJFMkNEMkY0QkQ5MjdGNjMwM0QwCi06MTAyRUQwMDA4REVGRDNFMjgxNjg2NzcyQkNCMzE0MDI5QTFEQTFDNTVECi06MTAyRUUwMDBFMTlBMEY3MDFDNDI5N0RCMzY5OEVCQTBGOENGOUFCRUEwCi06MTAyRUYwMDAwQjFDRTQxRkNBMzgyQ0M3RDczQ0IzRDNBMDE3M0I3MkI2Ci06MTAyRjAwMDA1NTFENEFEQTExRDFCQUI1MDczRjVFM0YxRkMwNkJFQ0MxCi06MTAyRjEwMDA0N0RCMDUxMkQ2RDA3QUQ1ODE0ODIzRkVEQTNBRUI3NzIzCi06MTAyRjIwMDA1RDJGNjBEOTMyRTY5MUM4NEE2QUZCRTZCNDQ0NzZBNEM0Ci06MTAyRjMwMDA0M0IzMDNCOEU4NDdFQjE0RUZEOTA2QUVCRUMzODRGQTM3Ci06MTAyRjQwMDAzM0Q5NkI4MUY3NjNGNEEwMDMzOUZGRkQzQzZENUVCMkFBCi06MTAyRjUwMDAwNzMyQkJEQkZGNDA3OEVCNjkxRjE3QUIyNEY4QkM2RjZGCi06MTAyRjYwMDBFREE1RERFNkFENDkyNDBGMTJDMjhCQzhDNDMzRkQxOEIwCi06MTAyRjcwMDBEMTYzMzJDNEVDOUJFRDlFOThCQTE0MDcyRjg5Q0FFRTM4Ci06MTAyRjgwMDA3NkU1NzQ4MkZDRTU3N0RERDdBQUJBRjBBQjFGMUFFQ0MwCi06MTAyRjkwMDA4MTEwQUZERjZBRjE4MzE3RTlDOUU2QzE3NkMzMzkwQzQ2Ci06MTAyRkEwMDA1NUNCN0YyMjAxMTdDN0VDRUYxQ0Y2NDU3NkI5NTVEQkYwCi06MTAyRkIwMDA5N0Y1MjJFRjhCQzZGNUY3QkJBNEQ3QTc1RUUyRUIwQjI0Ci06MTAyRkMwMDA1RkUyRjg4NUVBNEIxQjdFNEFGNUE1MEQzRkY1MTI1RkRGCi06MTAyRkQwMDA1RkY4MTJDNzJGQ0NCRUI0RDdBN0NDQkVCNEYxQUI1RTlFCi06MTAyRkUwMDBFMkVCMEI1RkUyRjg4NUFCMkY2REY4Mjk1NzVGREFGMDYzCi06MTAyRkYwMDA1MzJGRjFGNTg1MkY2REZDQUE2QzA3M0FDQjgxQ0ZDRDBECi06MTAzMDAwMDBBNjM3OUE0Mzc0Q0U0NkFBMEE3M0RFMzg1NzA1OEU0NzEwCi06MTAzMDEwMDBBNzM2MDNFNzJCQjY3Qjg1MUZBNUM3RTk0N0QyMTAzMjM5Ci06MTAzMDIwMDBGQTJENTY3NzE2RDlEMURCMUJFRkFCRkMzMThFNzMyQTA0Ci06MTAzMDMwMDAxMzE3NEZGOUZDRUMyMzBBOERCMzZEMUE3MEZFQzJEOTM5Ci06MTAzMDQwMDBGOEQxNTE4QTdGRTU0MEQ4MUJDRUExQjg5QTA0RTExODg3Ci06MTAzMDUwMDBCQkY0RkE2MDBBODQ2M0ZDODk2QUE1OEZBMTVFRDQzOTQ3Ci06MTAzMDYwMDBDMEQwRkY5NjRENDMwQ0VEMzdCNzhEMzZCNEZGQThBOUZECi06MTAzMDcwMDBEMDUwQkY0OTJEMzNGNEI3NDM0RTRCMUVFNTVEMUIyRDk5Ci06MTAzMDgwMDA1RUNBODM1OTY4NkZBNTY3QzIwRDc2RDhGODNEMDVGRjAzCi06MTAzMDkwMDA5MTFGOTM4MzE2N0RGN0I4Qjg4Rjc0RDU2NjE4RDcxOTJBCi06MTAzMEEwMDBENzdFQjY3QzQwN0MzRTYxNEVCMTk2NEZFOEZFN0U0MUI1Ci06MTAzMEIwMDBCQzBGNkU0RkMyQjhBNzlFNEZEMEYxMzlEQzkyQzRGODU2Ci06MTAzMEMwMDA1QUE3OEE3Q0QzOUE2OUMyOEY5QzFBNzI5QjI4NkZBOUNGCi06MTAzMEQwMDBFMzZGQjQ0NjcyRkFCRUI3RDUxOUZEQzlGNDQ2NzcyNTM5Ci06MTAzMEUwMDBGQkEzNERDMEY5RENEQzJBNzM0OEM5QTEzOEMxQzA0QTMyCi06MTAzMEYwMDAwN0UyMzlCNDQzRDA0NzA4MDQ3RDg0MUE4MUYzODVBMURGCi06MTAzMTAwMDBBQURDOTVENDdFMkEwNDdDMEE0NkE3OEZEMTU1MEI2NzhBCi06MTAzMTEwMDA1MkRDQjUzRUJCNUYxNkM1MTk3MkFBMDQzRDJDREQ2QkFGCi06MTAzMTIwMDBBNDAzNEFFN0QyNTZEMzBGNEJCQ0ZFRjRGQThDMDJDQTcyCi06MTAzMTMwMDBFNzlEODE5NzI3MDQ5Q0Y1RjNFN0U5NzE3MENGREI2MTg4Ci06MTAzMTQwMDBDNDRCM0NERUJFMkQ1RUQ2MTRDNzdGNTdGMkVERjA2MjU1Ci06MTAzMTUwMDA5QjIxNzdBNDUxOUM1NDA1OTlFMjMyMkY2NjBGMzczMzk3Ci06MTAzMTYwMDAxQzlBQkM4QzlGMTlEODhERjgzMEE3MDkzOERGMTM0RkYzCi06MTAzMTcwMDA4RkFENzUxMEFFOEFFMURGMUM2RjU4MjFGQzRDOTNGMkM1Ci06MTAzMTgwMDAyQjk5Q0ZGMERERkVDMEE3NDQxOTVGREI5QTQ0RkUxNkYxCi06MTAzMTkwMDBDQjY0MUExRkY2Q0EwMzI4QUUxMDUyNjdGM0JBQjczN0NBCi06MTAzMUEwMDBEQjkyRTkzQ0RGNTdGNTY2QTBGM0YyREI3M0U0MDE5NEIwCi06MTAzMUIwMDAxN0RCRkU4QzY5NkVFQ0Y5MjBBNDBBQkIzOTkzRjc2MTJBCi06MTAzMUMwMDAzNzk3NzA2OTExQTVBMjk1NjAxMUVENjE4OUVBODM1NjYwCi06MTAzMUQwMDA5OEUzRjBBOTRBRDQ5RTNFMjMzOUVFQjk2MkEyRkU1QjgxCi06MTAzMUUwMDA4QTczMTkzRTY5NEE4NjAxNUZENjEyMjNCRjIzMTgwRkRFCi06MTAzMUYwMDBFNUEzN0MxQzRDQkZDQjQ0NTc4MjRFNDJBRjRCQTE5NUZDCi06MTAzMjAwMDAxQzVGRTkzMkQ1MTBERDY4RTcyREQyNTdDRDA2Q0E0N0RECi06MTAzMjEwMDBENTY3RkY3NDJFQ0JBRjdBMUJDMzFENTYwOEJBRDBGMzA3Ci06MTAzMjIwMDA4MkQ2MjY0MTg3RjFGNEUzRjIxQUU5QzcyQTBEMzQ4OUUwCi06MTAzMjMwMDBGQzk2RTAxRjdEMUREQjE0NkRERTJDMDk1NDk2N0JCNkQ5Ci06MTAzMjQwMDAwMUM0NjdENkI4RjFFQzI0M0M0OURFNzgwNDVGM0E2MUVBCi06MTAzMjUwMDAzNkQwN0JDRTEyM0JFN0IxNDEzQUNBRjhCNzRFMDBFODEwCi06MTAzMjYwMDAxMzczNEUyMTdFQkQ2NzVERTc3N0E0RjMwRkJGMjM5REU3Ci06MTAzMjcwMDBFQkYyNjdBRDU3OTMzRjQ1RTI1Q0U0MjlBNDZCOEExRkVDCi06MTAzMjgwMDA0REFERUEwNEZFRkUwQURDMjZBMjQ3QTQ4MzU5NTlDNUM3Ci06MTAzMjkwMDA3Q0Y0ODE3Rjc2OTExQ0IyMTNCQ0FBRDNBOERERDVBOTlBCi06MTAzMkEwMDA0QzI1RkE5RDJFQkRBMkI4NzA5Q0I1ODcwNTlEQTM3RUM2Ci06MTAzMkIwMDA3OTg5RUFBRENEMTZBMDczMjYyODY3NEMzRkEyNzk0QkQ5Ci06MTAzMkMwMDBFREVFOTUyNDc5QTQ4MUUzNjlERDg1M0U5NDNCMTQ0N0I2Ci06MTAzMkQwMDA3Q0M1MjgyRjhBM0E4RDcwQ0I4RDk3RUIzREMwQjEyN0U2Ci06MTAzMkUwMDAzRDExMEY0N0Q3MDQwRDhFQzUwOEM3MjFERjFFOEUzNjRFCi06MTAzMkYwMDBBRkQwQzNFOTI1NDJDRUJFOThGRDUzN0VENTdENTg5QzA0Ci06MTAzMzAwMDBBQjQ5NTc4MEUxRkE4NTJBRjRGMjc0RTk3ODk4RTRDQjY2Ci06MTAzMzEwMDAzQTA1RTUwQkI2Q0ZEMERBREQyNTQyOUVFODcwQ0VENTcyCi06MTAzMzIwMDBFMEFDQ0I5Mzc1RjMyMTgzRjhERTRERjJDNDQ5NzBGRDE4Ci06MTAzMzMwMDA4OEY1NzY1QjkxODAzMzQwODRGMzlGQTk4QUUwOTMzNUNBCi06MTAzMzQwMDA1NkYwNTI5Q0I2QURENEU5QTU3ODYxQUVBMkMxQjc0OTlBCi06MTAzMzUwMDA4Mzk3MDk0QzA0REY3OEJBOTQyMUE2OEVFQjRCOERBQjkyCi06MTAzMzYwMDA3RjVCRjg5NjRFRDBGNDY0M0YyODNFMUZGOEFFNEI0OTgxCi06MTAzMzcwMDAxNUZDMzY1NEMwQzdFQThDRjBCOUU2QTYxQzhCNzcyNTNECi06MTAzMzgwMDBGMjc1NDcwRUMyMUJEQjlCNUUxN0YwRkVBNUQ2N0ZENUZDCi06MTAzMzkwMDAxOEUwN0E1M0RGRDU5OTBDQUY5Qzg1OTk0NENGNERENjcwCi06MTAzM0EwMDAzNjk1RjI1ODREM0FGRDY5RTdDMjVDOUE5Qzk4ODZGQ0M2Ci06MTAzM0IwMDBCRDAwREY1RjhERjI4OUYyOTBBOTI1MDEwNzhERDc5NEJBCi06MTAzM0MwMDA2RjAxODlGN0JGRDk5QjY4RkYwRTlGQ0QyMDA3MkZBQkY4Ci06MTAzM0QwMDAzMUMyMzUyNTBFOEU0OURGOTFGRjdGM0NFMUJCRjFGRjA1Ci06MTAzM0UwMDA3NkZBMTVGQkFEMTkwNkQwQzk3OUM4OTA4M0UwNjQyQjM1Ci06MTAzM0YwMDA5OTk4NEM3NEQ0RDJCQTlERUIzMjg0OUE3MjcxRkYwRkIzCi06MTAzNDAwMDAzQjg1RkRENUQyM0FCQkQ3RjM1MTIxNEQyRTZDQTk3MzI0Ci06MTAzNDEwMDA3MDc5NUY5RDlCQ0JCNkJBNEMyRUVGQTk5M0Q5N0U2OThDCi06MTAzNDIwMDBBRENCRTNCMkE1Q0VDQjY1NTM1RDA5OTdBQkVBMTRFRTA1Ci06MTAzNDMwMDAyN0FEQ0RBODYwMzk1QzA1MUNDRjVFOTlGMjM5RTdERjc2Ci06MTAzNDQwMDBFM0U3Q0I1MThEN0E2QzcwNkRCMjAxRUU3RDY2MThGNUI1Ci06MTAzNDUwMDA1NUJBNjJENDU3NzQ4RTI5QjZEREU1MUQ2NTY4NEZDOTJCCi06MTAzNDYwMDAyQjMwRDQ5M0U0ODk4NkZFNTMyNjA0N0UzOTgxRTQ4MDkwCi06MTAzNDcwMDBBNzMyNEUwRjIyM0Y4RTg5OUVCMzZCNjkxNURGNEJFOTUxCi06MTAzNDgwMDBGMEQzRjU5MzUzRTNGMzM1NTZFRjAwQ0EzQjM5NUIwNUIwCi06MTAzNDkwMDA5RjM2NkI3NjVFMTNDMTExQ0I2NDA1RjhEQzhDRURCMDAyCi06MTAzNEEwMDBFNDBEMDFGMUZGNkFBNkYzODc3MUVFRkU0ODhCMUREOThBCi06MTAzNEIwMDBENzI4NjQyN0I0QzhDMjhFQjc4MjM4Rjc2QkNCRjQ4NzlECi06MTAzNEMwMDA2QkYwNzkxMkVBMkZDQUVCREFFNkE2QjA1Qzc4RDhFM0EzCi06MTAzNEQwMDBGNEQyMzlEQjk2RDY2NTZFNUU4RjU3OUNBNzcxRTNCRjM5Ci06MTAzNEUwMDA0NDc5ODBGOEYzMzU4RUExQzY3MzM5RDZCMzlDNkZGQzRFCi06MTAzNEYwMDA3NTRGRjREQTk0OTE1MDhFOUMyMTY3QkJGMzJGRUY2QkRDCi06MTAzNTAwMDA3NDI5RjIyRkY3NzgwNDNDRUQzREM4QTNENjM4N0JEOTU3Ci06MTAzNTEwMDBBOUU1NUY2MEEwMkY2MUZGQTgzRDI1RjIwQkFENzE3MTk5Ci06MTAzNTIwMDA3QkY0QzMxMkU2NkZERTlBMjA3MUZGM0Y0RjkwODVCRjk4Ci06MTAzNTMwMDA2NjA5MDNDOTZCOTcxN0RGOEZGNTNCMTRGMTdERThCOTc2Ci06MTAzNTQwMDBDRThGM0YzRTRGOEM3QzBBMjQwN0ZFM0MwMTlGMkI0RkMxCi06MTAzNTUwMDAwODNCMjU0OTE2REZBMUQ4NDA1MTU4M0U4MUM4ODdEMDg1Ci06MTAzNTYwMDA1OTFGRDIzN0E5NUFCRUE3NUJDRTkwODg4OEExM0JFN0U2Ci06MTAzNTcwMDAxOUZFQUVDODhCRDA2NzE2NDQzRjk2RThGQjE3QzRCRjUwCi06MTAzNTgwMDBGREI2NjUyM0Y5QzNDMzdBNjlBN0ZDNTAwMkI5RTAyQUU2Ci06MTAzNTkwMDBEMUJGMUY4MzJFNEYzMTgwRUVCQTIzRkM1QzI1ODlFMTE5Ci06MTAzNUEwMDAxNzI2NzgzNTlBRDZDREM4QzVFN0E5NUU4QjE3MzEwMEE2Ci06MTAzNUIwMDAxNTI1RjI1RTNBNUZCMTRBNDk2NUZEQkVBQTQ0NkUyNzAxCi06MTAzNUMwMDBGRUY5NDI3MTdBMDkxRkFERjk1NUFDQUM5Mzg2N0RDOEZFCi06MTAzNUQwMDBBMkI3QjFDNEM2NzZCQThFODcyNDZENUU0NDRGNjc5NTk0Ci06MTAzNUUwMDAwRTY3RUNFRkNDOUIxMUFERTM3RkNENjMzNjcyNUVBRjFGCi06MTAzNUYwMDBFNUFBNDczOERGRDczMkVCM0YzOERGQjczQTZCN0ExRUEwCi06MTAzNjAwMDBDOUJEQTQ5MkU5QzdGODIwOTc4NjFGNjYwREQyMjM3OTE5Ci06MTAzNjEwMDBDNkZDREVFOUQzQTJDRTcwQTBGODg0OTYwNzA0OEYzMUYxCi06MTAzNjIwMDBDRjY3OTFGRDg2RjkyRjM0OUU2MEEwRDA0MzYwNTFGODlBCi06MTAzNjMwMDA3QjgzMzNFOTVCRjBCNURFQUY2NzNFNTBGNUVGNEU1NzY1Ci06MTAzNjQwMDBEMkY5RTAyNjhGOTBBMzRERTA3RDMzNDBGNTU3MjRBRkFCCi06MTAzNjUwMDAyQUQzRjM4MjM3RTlCQ0U5RUE4MTE2QzZDQkVBQ0NEOTkyCi06MTAzNjYwMDA0REMyOEUxNzdFNTM5MzY3MjVFNzZERTNGNTM2OUREN0UwCi06MTAzNjcwMDA4Qzk1REI3NDVFMzM1NkJFMzdDOUIzN0JENUNCNTkwMTBECi06MTAzNjgwMDA3MzlDREUzN0JFOUYxRDM0RUExRkZEQkRBNENDMkI1RkFCCi06MTAzNjkwMDBBQjhBMzkyRkQ1NkNGMTNCNDg1RUFDRjJEQzY3OEFENTNBCi06MTAzNkEwMDA3MzBGMjg4MTA1MjUzMUU3OTNBQzk5QjNGODNEN0JCNkJDCi06MTAzNkIwMDAyRkUxQkFBRTUwOTQ4NTQ0REZCOEZGNUVFRDgxRjU5QUY0Ci06MTAzNkMwMDA1Q0RDQThFOTk3QjNFRDczOTNENkZGMDFBREZGNjZEMjNBCi06MTAzNkQwMDBFQjIzQTJGODE5M0VGNEYyNjQ5NkNGRUI0NDFDODM3OUY1Ci06MTAzNkUwMDAyMDY2NUVBNTI0QjA4MkQ2MTVDNUFCMzkwQTE3QTREM0NGCi06MTAzNkYwMDBFMUY5NTdCMERERDFCMDZFNzYzMkUxNjlFN0ZBREVENzk1Ci06MTAzNzAwMDBBM0U3RDVGNTdFN0ExRTM1M0VCRjZFRjM5ODBERjBERjQ4Ci06MTAzNzEwMDBBM0M5ODUxNzVDMEIyQjFGNDBEMEVDNkMxM0Y0RDRCMEZECi06MTAzNzIwMDA0RUU4OTFFMTRGODg3RDlDNDk4N0M2RjVFRTZDRUJERDU0Ci06MTAzNzMwMDAwRThBRUY0RjkxQzU2RTNBRTE3QTQ2NUM3RDQwNUNGRkEwCi06MTAzNzQwMDBEQ0I4RjY1MTcxRUQwNTcxRjU4OTcxRkQyQkUzRUE1NzhGCi06MTAzNzUwMDBDNEY1OUYxRDU3QkYzNkFFRkY4MkI4RjZEQkUyREE5NzlECi06MTAzNzYwMDBDNUQ1RkZDRDg4NEZERkI1Njk4OUUwMTg4RjNGQkRERjM0Ci06MTAzNzcwMDBCOUUyRUY1RDVGQzU3RUEyQTNFMTMwODNFOTQ1QTdCNzVCCi06MTAzNzgwMDA3M0M1NDNENERFRjUzMzlERDk0QTQ2QjE3Q0RGODFGNjVCCi06MTAzNzkwMDAxNUQ5NDMzQkRCMkFEREUyN0M0NzYwRTU2RThEM0U0ODcwCi06MTAzN0EwMDAzRjU4MzY4ODc5RDBDRTRBRTZGODlDRDM2MzkwMjM2Nzk5Ci06MTAzN0IwMDBDM0I3MDkzMjhDRURCMTc2NjhFRTg1QzdGN0Q5RTkzMzI2Ci06MTAzN0MwMDBBNEQ5MTdCREFGNUJFN0UzMjkxM0ZDMjc0OTBFNDE0ODk1Ci06MTAzN0QwMDBGODk5QkE1REJCNEQxNUZDQjM0RDVENTBCOTlFRTQ2REQzCi06MTAzN0UwMDA5MzU5QzQ5RkI1RkI1MEU4NkUxRDExMjcwRjY4NEEzOEU2Ci06MTAzN0YwMDBDMkYxODQyNkNENEY2OEQzRTRDOTVBNEQ5RURDQURGOUExCi06MTAzODAwMDAwOTQ5NDM4MzlCMjhFRTlCN0M5ODhGRTc0MEIzQUZFMDQ4Ci06MTAzODEwMDBBRjBCMTAzRkY3OTcxNjZGQTNFRkM3RUUxRTUzRjJGOEVBCi06MTAzODIwMDBDMzU4NzdGRDVEODI3MDIxREFFOTYzNUIxNEIyNTlEQTFGCi06MTAzODMwMDA5NDhDMjQzQTRGOTQ2MjcyQjQ5MzlGQjhBQUIwQ0QzRjRGCi06MTAzODQwMDAxNEZCQURERDdGQUNGRDc5QzRCMzlDNjlGM0EyQ0UwNzU4Ci06MTAzODUwMDBEOUQyNjUyMjdBODM3QzJGN0Y5Nzg2RUI1NEM5QzZCMjcyCi06MTAzODYwMDA5Njc3RDUyNTNBNzdCQUY2MEFCNzg5OENCMEY0MTlCMkFCCi06MTAzODcwMDA5OUNFMTFGNzk5MTBFODVCOEFGMDE4REMwNDY2MDVFQjI1Ci06MTAzODgwMDAxOTZBOThDRkUyNUM1MzJBMEJGRkVBMTk2NDI4REU2RkFECi06MTAzODkwMDA1NzE2QzFFQkFCNjZEQjdFQUFGNjhDMEY5MEI0MzhERDExCi06MTAzOEEwMDA3OTk1RkEzODY5ODIzNEU4ODdFMzhFQjI0NUFCQUI4RkZECi06MTAzOEIwMDA2Q0E2RjNEMDRFNDlENEE3M0NGM0Y4RkM5NUY5RDFGQUE1Ci06MTAzOEMwMDA5ODY3MUUxRkI4MTJEQjVCMEIwNzk5NDg5RUE2N0I1MkI4Ci06MTAzOEQwMDAxM0RFMTM3Mzc1QTk5MDlGREI5QjE3MEU0RUU0OEZFOURGCi06MTAzOEUwMDBBNTNDMTMzODMwMjFFNzZCMjVEMUQ0MDQyQzg3NkFBNTc5Ci06MTAzOEYwMDBBQzNEQ0YxNEY1MkIzNUI4QzlCNTVBQkI0Nzk0MTc3QUYwCi06MTAzOTAwMDA5RUY4RjFFNzk0QkE3NTNCN0I4MDlGOEQ2Q0M4NzdGNjgzCi06MTAzOTEwMDAzM0Q4OEI1Nzk3RjY2MjJGQTI3OUNDRjFEQUFENTY3OTZFCi06MTAzOTIwMDAwMDlEMjNEQ0RBNkMwM0JBRkY2MTZCMzY4OEVGOTA1Nzk5Ci06MTAzOTMwMDBEOUY4REMyODU4REMwM0FFNzE0NUQ3MUQ1QUQ1NkYxRTY3Ci06MTAzOTQwMDBEMTREQzgwNDg2Mzg2RUE2MDY1RkZCNDQ5Mzc2OEVGMjhFCi06MTAzOTUwMDA5QjMwN0RDN0I3NTVDQkYzNkM4NTg4REI5RDFGOEJFNzBDCi06MTAzOTYwMDA1RkNEMjdCQ0VBNzhERTU3RkFBRkNENDQ5RjFERDkwQjU3Ci06MTAzOTcwMDAyQjM3RTI3QkVCMUFDRDFDMzc1OUQ3OThDQjc0NEVFMzJCCi06MTAzOTgwMDA5MDdENzQ2QUM1MjEzM0Q5QURGOUQwNkUyNjNCN0YxNDgyCi06MTAzOTkwMDA3RDc5M0Q4NEFFNDAwQTcwRDlBRUM5RTdGRkQ0RkNGODBBCi06MTAzOUEwMDA2MUEwRjBGMzQxRDBDNUMwRjlCNDM4RjAxMzgyQ0IxMDU4Ci06MTAzOUIwMDAxMjZEMTJGMThGREJFNEMwNzk5NkVDNEJBRjQ4QTRCN0RGCi06MTAzOUMwMDBFQjRBRjVFRjdBQTFDNjUyQUNGOTE3MzJDM0I3OEVGOEJECi06MTAzOUQwMDAyODFFQkU3NDQyOUZFMzhFOEFCRjlFREE5RDdCNUYwREQ4Ci06MTAzOUUwMDA1Rjg2RDVERDZGMThFOTkzRjAzNjNCNDZDRjZDRDRFMEE3Ci06MTAzOUYwMDBFN0Y2RkExNUMyRTFCNUM1ODExNjdBN0ZDOUE2QkYxRUUyCi06MTAzQTAwMDAyMDczNTQ1NjU1MzNCREZGMTRFMTFEOUYyRjBDMDdBNzlCCi06MTAzQTEwMDBEMzMwNjNCQ0UxNEFFQTNGQkE3NkRCN0U4QUE3RTUwNThDCi06MTAzQTIwMDBFRkE4RUM4RkVCMUJBRTU0NTc3QTg4ODY5NEMwRkQzNDE4Ci06MTAzQTMwMDBDRUQwQ0U0ODg1MEJFQkNFNERBRjg2QjM3ODNENjM3OUMzCi06MTAzQTQwMDBCQzVDN0QzRDQ4MEZENTRDNDc2RTExQzdEN0YwNEJGODk1Ci06MTAzQTUwMDBBNzczQ0IwQjM3MEJGODYwN0IxNkVGQ0ZFMkNFOEE1REY2Ci06MTAzQTYwMDBGRkI2NjlGREY4QkI4NTc4QkE2OEQ1RTBGNzU4MTQ4RUMzCi06MTAzQTcwMDA2MDM1RkEzNThGMjU4MkEzNEVBNzNBM0M2RTc4QTI2QjRCCi06MTAzQTgwMDAxNUU1M0FFNzg3M0E1RjI0MzlFOERGRTQ5RUM2RjJCMEVECi06MTAzQTkwMDAzOEYwMjRCREVGNkJGMzM3NzAxRTcwNTcyNzVENDdENEE1Ci06MTAzQUEwMDAwRDFGQTdEMjQ5RDdCQjYwM0ZFNTY5QzJGQkQ2MTVFRjEyCi06MTAzQUIwMDA1NzcyQkM3ODJGODhCODU4OUMzRUQ0NEJBQjEyOUY2Nzg2Ci06MTAzQUMwMDAxMEY3RTU4Q0RCNkJCNDkzOTE1RTk1OEQ5RTU4N0EzNTNCCi06MTAzQUQwMDA3M0JFMzNBNEU5OTM1MDEzRDIyRkNEQjc0MkQwNkY0OEIxCi06MTAzQUUwMDA1REU2NEU0NDY3OEY2ODdBNjU4NzQ2QjdGQUYzQTEzRDc1Ci06MTAzQUYwMDA5Q0JCM0M1NERBRUQyNzY2NEE0Njc4MUVFQThERUZEMzJDCi06MTAzQjAwMDBDMENCRkM4MDdDNzA4NEZBNjUxMDFGNjA3REYwMEEzN0EyCi06MTAzQjEwMDBEM0E3Q0UwNzRCRjZGRUY1MDBERDY3RTNGNEM5MDVCMTg4Ci06MTAzQjIwMDBGN0Q3NDUzNDNDMjI3REJFNDNFRjJGRDlENDc1ODA3QzM2Ci06MTAzQjMwMDBDNUMxMkIwNDdEN0U0Qzc3ODcxNTQ1RTkwQ0ZEQzdGNzgxCi06MTAzQjQwMDBBODlGNEUzRkYxRkI3ODU3MUI0RjJFRjY3RjRDNzg1Q0I5Ci06MTAzQjUwMDBCODI5QzhFMzIxRkYxQzJCRTU3MTNBQzM0OUNDNzI0QTRFCi06MTAzQjYwMDAyNUVENjc2QjFCQjg2OTNGRjY1RjE0NzQ5MDVDMzg1NUEwCi06MTAzQjcwMDA2QjYyQjhERTk4MUY1RTY1QzZGMkZBQTE2MEE1RUI4NjlGCi06MTAzQjgwMDBBQTMzOTE2QzcyMjk4RjZCQ0NGRjBENkIzM0UyMEZFOTc2Ci06MTAzQjkwMDBFNzZGMzQ0RjkxMjc2MDEzQzFFQkEwOERFNTY5MEY3NDc3Ci06MTAzQkEwMDAxMUQ1N0JBQTBFRkYxNTcxNzJENzNDQjExNzdBM0VENzlCCi06MTAzQkIwMDA3MUQ3MTYyQjhFODk0NURGNjIxREU3RDg0RjhGMzc5RDUxCi06MTAzQkMwMDAxOTNGMURDNUZFNDM0QkQzNkNGRDlDRjAwQ0JBOEY2N0FCCi06MTAzQkQwMDAzQkM1NEYxMUFFQUI5QTdBQjc1NzJGNThGQ0I0RjlBNDM2Ci06MTAzQkUwMDA4ODlGQUUwMDhFMDNBRDRDMTk2QjRBNDQzNzk3NDBGQzVBCi06MTAzQkYwMDA3NENBQzQ0NEYxRDNDODdCMDYzQjczNTU5MzkwMEIzQTA3Ci06MTAzQzAwMDBGQzg2NTc4RDRDMTY3OTI5NDhBNTdDODkxRTFGRDNGNzUxCi06MTAzQzEwMDA3NUI3NjY0RjM2Njk3MDZCMjFCODMxM0MwNURDREEwODQwCi06MTAzQzIwMDA2RTBDNEYxRDZFMzM4NDNGNDI1Rjg4NTNCQ0Q2NjMxNkMzCi06MTAzQzMwMDA3OUIxOTEwQjM2NTFCRUUwNTRBNkM4OTNENzY3REI0NEU3Ci06MTAzQzQwMDA3QjhFQzgyRjlDNDExRjk5MzFGNjM0RjJDMTlBNjY3MTYwCi06MTAzQzUwMDA5RjA4QkVDRjc5QjUxN0IzMEYzODg2NTA5RTMzRDNDQ0FCCi06MTAzQzYwMDA3MURBRUQ5RUZCNkFCNjczM0Q5OUY5Q0YwQTZBNUIxRTY1Ci06MTAzQzcwMDBDRTNCRkNDM0I5RUEwMjdBNUU2MkU3NzNGMjdBM0VBN0YyCi06MTAzQzgwMDBBNUFGQzhFN0I4RjJCNDdDNEVEQzdDNzZCOEE5QjI4RDlCCi06MTAzQzkwMDBFNkNCMTM3RTRCOEY3NEVDRDNGMjExNUExRTI4MjNERjMwCi06MTAzQ0EwMDA5OEFGNzBDNEU1MkJFMkYzOTU2QjlBMTdFQ0RGMkVFMjI4Ci06MTAzQ0IwMDAyQjJDOUY4N0ZGNzgyNEZCNjNGMUYzQjg2NzFBRkRCN0JECi06MTAzQ0MwMDAzNTIzNzUzRkVBMTE0N0EyRUYxODUyQUI4Q0Y0RDhBMjA2Ci06MTAzQ0QwMDBFMUJCQTFBRkM4NDc5QzZEN0MyODRGMzZGODU1MkQ3OUM0Ci06MTAzQ0UwMDBFNzE2NDdEMEZCOTExRkVBNEVEMDNGREUwRjNEMUZGRjg2Ci06MTAzQ0YwMDBENkNERTMxQkVGMDc0Q0UwREY2RTk5QzhGMTE0NDFERjJFCi06MTAzRDAwMDA2QjlBQzVGRUJCRTM2OTlBNUZBNTlGM0ZEMkM3QjE2QUI0Ci06MTAzRDEwMDA3RTFDRDc3M0EyNzI0QUNGODcwRDc1REI5ODVFODc2QUM3Ci06MTAzRDIwMDBGNzQ1MzVGQzdCNEE2ODY1MEVFNUQ3NjY3NTUxM0U3MkVFCi06MTAzRDMwMDBFODBFODlGM0VFNDM5RDdFQ0U0Mzc0NkM5OENFRjlGMTg0Ci06MTAzRDQwMDBCRUM5ODFBNzI3QzZDNDlGNzZCODdFOUFDOUY5MDIyRDNECi06MTAzRDUwMDBERUNGRjdFNkEwREU1M0Q3MTU3NjJBNjRFRjhFMDRCRUQ5Ci06MTAzRDYwMDA2NzI3MzkyRTFGMTA3RjNGNEU3QzdENEU5OUQwQzM5OTE3Ci06MTAzRDcwMDBENzQxQzI3QjRGM0U5RjI4REFDRkY0REZBRjYwMzhBMTM2Ci06MTAzRDgwMDBCRjlCMkNFNEFEQTJEN0ZGQkZFNEE5NzZCNjFERTJFRjNFCi06MTAzRDkwMDA3RDRFRjk0MDkzQjNGRjA5OTdBMjlDM0Q1MTEyMzg5RTg2Ci06MTAzREEwMDA1MENFNUFCQTU4Q0U4NjI3Mjg5RjkxOUU1QzRFMTc3RERBCi06MTAzREIwMDAxMDFFNkU0QzdDM0Y4RjVDNzZBOUUyRTE2OTgxODc3Q0E2Ci06MTAzREMwMDAxRDBGRjc1QzkyRjk0MkM0NDM3NjU5MjIzQ0EwNUY0NTJGCi06MTAzREQwMDBGMDZBRjMyOTgzQTg1RDI5NTEwNjUzRDk4RDhGMUYyNkQ4Ci06MTAzREUwMDBFNjhCNTk2NUMyRUVCQjU4Rjg1OEE3RTFFMzVFQzIwN0ZGCi06MTAzREYwMDBDNzY5NjQyRDRFOTNDN0NGOUIzNTdDQUMzOTAzMUZFRjQ5Ci06MTAzRTAwMDAwQjdDOTRFOEY4NzhFRUJDRjA5MTUxOTU2MTY4Nzc5NzU3Ci06MTAzRTEwMDAxQkYxOTFFQUNCMzVENDlERjk0NjdDMjQwRjJEMzA4Q0QzCi06MTAzRTIwMDBCN0JDNEMxNkY3MjQwRDlDNjhFODc3MjYzRThDRkVDMDg0Ci06MTAzRTMwMDA5REY0NUUyRkY2RThDMDQwNjcwNTdENEIzNDYwNkU3QkQ1Ci06MTAzRTQwMDAwN0M5RTY0QzdGNUIwNTk1RkEzRTM3QzdGOTczN0FCOTI3Ci06MTAzRTUwMDA1Q0MzNUZFNkQ0QzRGODVEQTBGMTVCQzY0NEU1MjYwMzBECi06MTAzRTYwMDAzRDdDMkYzMTdGRDY2OEZEOTc5NzI4Qjc5NEM1RjJGMzM0Ci06MTAzRTcwMDA5NTg5RkIyRkQxRkFERjM2NDE1OTFDREIxRjdGRDY0QkNBCi06MTAzRTgwMDAzMUY2Nzg0RkZCMEUyNDJCQ0JDQjc4RkQyMjRGQjZBMzE3Ci06MTAzRTkwMDAzRTk1RjM2NjNCOTJFNDc2Q0E1N0FCRjU0RUMzQkQ3NUNCCi06MTAzRUEwMDA4M0U5MzdBQzY3RkVFODlCMEU5NUNFRDlEMTNENDE2OERBCi06MTAzRUIwMDA1OTZEQkJBMzVGRUUxQTZDREE5NjMxN0MyNUMxQjFBOUFFCi06MTAzRUMwMDA2Qzg4QjhCRjc1OTFGRjZEQ0FFRjI4RUEwOUVEMUNEMjY2Ci06MTAzRUQwMDA3Q0JFRUZDODE0RUU2M0EyN0JCMkMwOUQ3MTRFRjkyMzg1Ci06MTAzRUUwMDA5NDY3RTI1RUI3QzEyMEJFMjM4NjIwRUI0MUM5MEZFOThCCi06MTAzRUYwMDBGNEREQjIwNUZDMjI1RjRFRkRDNUY3ODVCQ0Y5MTQwODYwCi06MTAzRjAwMDA3M0REMDUxMUFFQTc2OTdFREUwMzY1MzkzQzZFM0FDOEU0Ci06MTAzRjEwMDAyNjAxMjRBRjg5RTRBOENFQTcwRTRGOTBFOURGNTNFQjJBCi06MTAzRjIwMDAzNkFEMjQ1RkNFMDI1MDQ2N0VBMDczMjA3RkNGMEI5NTI2Ci06MTAzRjMwMDBBMDUyM0VDQjA0MEVCNjMzNERFQjBGN0NDRDc5M0FGRDRCCi06MTAzRjQwMDBGQkMzOTdGQjg4RUYwRkNGNzE3RkU3REFBRjkxRUVFNTA4Ci06MTAzRjUwMDBGMzQ0RUZFNTZCRDRFQzAxRkQ1RTNFQjUzMkM4REY5NzZDCi06MTAzRjYwMDBBQjJCRURFRTA2Q0Y5OURGOTczRjNBMzFCMDhCRjBGREVBCi06MTAzRjcwMDBCN0E0NDEyMTkxNjQwRTRFOThFREJBQTBFMzg3MkZGMkM5Ci06MTAzRjgwMDBGOEFGNUNFNEYxREZFQzZERkNCQkU5RDc1MkNBRUJGOUFBCi06MTAzRjkwMDA4RjEyM0YzN0I4OEFEOUVFRDRDQjc4QkM1REExMjgxMUY3Ci06MTAzRkEwMDBFQTI3Mzk1RTFCRjA2MTlGQTgzREU3M0M2QTYyN0ZBODYzCi06MTAzRkIwMDBDMTI0Q0U5RkE5RUY5OUQ4RUU4MjdDNDEwNzRFMTlGMjE5Ci06MTAzRkMwMDA3MkM2NDVDNzcxN0E4MzgzNDVEQzQ5QzQ1RkVBRkY3NEQyCi06MTAzRkQwMDBENzA4QjJCRjdGOTkzMjJCOTI4NkUzMUQ3QzU1RDg3RkRDCi06MTAzRkUwMDA5NkE5OTFDRDc0QkY3M0ZGMzQ5Qjc3M0JGMkREM0REQTI4Ci06MTAzRkYwMDA3QUVEQTUxM0VFQkQxMzdGQkQ3OThBOTAxNzJFOEJGNzRFCi06MTA0MDAwMDBGMjAyM0VCNzM0MzM0MkY2QTNBQkQ4MjI1M0FFQzAxOTA2Ci06MTA0MDEwMDA5N0Q3NkNCNUI0MjU1M0JDQjI3NUM3N0QxNUEzQjBGQjVCCi06MTA0MDIwMDA2Mzc1MkZCOTFCMTM3Q0VGRTlENEYyOUEyM0E1QzQ3MkYwCi06MTA0MDMwMDBGMDlGOTM5MjQ0RENDQjY3QkM0RkQ4NUFBRTlEMkI0OTdFCi06MTA0MDQwMDA4NTU0QjIyMzJERkY1MkQyMTI5RDA3RDA0QjdERkUyMjA0Ci06MTA0MDUwMDA0RkE0OEFCRUJGOEVEMDI1NkU4OEU3QTI5MkVBQTQ2NEUwCi06MTA0MDYwMDAwRjlGOEJFODI0Rjg1NjdBQzMwRUIyN0YxRjVGMTBCQ0Y3Ci06MTA0MDcwMDAzNUY2RkJEM0Q2MTI3MDkxMURFRjlCMjJDRUMzNkU1MDQ2Ci06MTA0MDgwMDAyNDE3RERBRkYxNjBDNEMyRjc4RTNGQjhFOEU5RTYxNDRCCi06MTA0MDkwMDBBQ0VGM0Q2QTc2MTMzQzVBRkRFRjM5OTNCMUZFMzg4RTkyCi06MTA0MEEwMDA0QkYyRUVFMDBFNzFDRTUyOUQwRkExNjEwOEJGNTZGMkE5Ci06MTA0MEIwMDAyQUIxQkU1QjExRTdCMkQ5MjEyQkQ2QUVFQTQzRjhGRjk1Ci06MTA0MEMwMDA3NTcyNUYwMTZGMDg1NkQzQkQ5REVCNTIyNkYzN0Q5NjQ2Ci06MTA0MEQwMDBEOTczNDQzQzc4QkE3NEI0ODNERTdGQjBDNENFRjgxQjg1Ci06MTA0MEUwMDBBMjlERDMzMUE5RDU3QzlGNjVERkY5QzY3MzNBMEYyRTA3Ci06MTA0MEYwMDBFRjU0MDlCRkVFNTJCQjVCRTVGMzk3NEVENzU4N0NERjE4Ci06MTA0MTAwMDBGNUE4MTkyNDU2NzE1RDNDRjk3NEM5MjlENkU1MTU3RUM4Ci06MTA0MTEwMDBFRUUzNzI1OEE1RkI4RUZCRTI3QkY1NkVCRTM1RDE3MEU3Ci06MTA0MTIwMDAxRTY4RjcyNkUxOUZBNjhENzc3QTkxRDI3MUJENzFFNzVGCi06MTA0MTMwMDA4NUY0NzVCNUUxQkFFOERFNjNENzUwOEU0NzY0Q0MzMUJCCi06MTA0MTQwMDBBRTJGMkRDRTZGNzBDNkQ1QTc5Njc3REZFMzMzOUNGMEU4Ci06MTA0MTUwMDBGRDg1RkZBNzg1QUY3MUFCNTc0RUU0N0ZCNkQ2NDE2N0FCCi06MTA0MTYwMDA1NUNDQjkwNDY3MEY3MUMwOUFDOTgyQUU2RDU5MkYzODBBCi06MTA0MTcwMDBDODRFRjlDMjdGQzQ0MzM4NzhFNTlGMDczRUJDOTdDQTUyCi06MTA0MTgwMDA3RkZENkVENzUyODRDRkVGQkY3RTczQzc5M0I0QkZEQTgzCi06MTA0MTkwMDBCQjBGMTFCREVBRkUxODlGQzFDNEY1QkM1ODZENjNCOEQyCi06MTA0MUEwMDBGOTY3NjhFNzM5N0QxRDJGNTg3RERDQ0VGOUE1QjVGQjkxCi06MTA0MUIwMDA5M0I4N0Q2NDM5ODQ5MkIwN0RBNDQ1QzlCQTk5RThBRUJDCi06MTA0MUMwMDA1M0YyRDZDQjM0ODgzODhGQThFMzdGRUQwRDdFMTM4QzY1Ci06MTA0MUQwMDAyMTNDRkEyNUJBMEY2MzlBNzZCRTc2QzMyMjkwMDlGRjc2Ci06MTA0MUUwMDBCNjQ1RUQ3QzVFRERCNzVDOUM1N0Y3MjlENTQ5N0NERTkyCi06MTA0MUYwMDA3NDhFOTlDRjg3RDQ1NzVGNzNGOTMwQUNFRkJBNUNEQzFCCi06MTA0MjAwMDA0RjM1NjNCOTMyOEZFNzU3MDRCREE0NzUxNjlCOTcxM0RBCi06MTA0MjEwMDA1RDY2ODlGQjlBRjRGM0E2NDVEMEM1REY3RjhDRjRCNkMyCi06MTA0MjIwMDA3N0Q4NDhERUNDNDcwMEQzRkE1QTM1N0M2OTcxODMyMkFGCi06MTA0MjMwMDA1RkE3NEFGNkE0Q0I2QkM0NjM0NjFDREVFMkYxQkE0MjI4Ci06MTA0MjQwMDBDN0UzNDgxODQ5Nzg5NEExMkQ5OUY0RTE0MzAwRUQ3NDJGCi06MTA0MjUwMDBBRkMwODZFNTRGQ0ZBM0YzNkM1RkE4NjkwQ0FGOUVGOEEzCi06MTA0MjYwMDBGOTFEQjQ1Nzk1MTE3NDBGOEI4M0NCNEVCNDU3QTlEQzRECi06MTA0MjcwMDA4NUY2MkE5NUFFNjBDNTc1Q0I3MUREN0JERTM4RjhEMjQ4Ci06MTA0MjgwMDAwRjcxQkE1OTRBRjU5NTc0NDRBQjQ4Q0I3QjgxQkE3NDI3Ci06MTA0MjkwMDA1MDI1QUVGRjA2RTI1RTUxREY0Mjg5QzQ3NzdEOTJBMUQwCi06MTA0MkEwMDBCRUQ2NjM4OUZFM0QwMEZDRDU5NUE1RkY3RDgwRDM1QjFFCi06MTA0MkIwMDA5NEExMDg5NjRDOEI5NjhGMTFGNTU5RTQ4N0M0QjRFRkZFCi06MTA0MkMwMDA5RTY5RUM1RkI2M0Y2NkZDODFCOERFQzUzNjZFMEZFREM5Ci06MTA0MkQwMDA1QkJBNDVCNUM0QjQzRjg3RjU3MjgwNTczNUZCRjFGQTM4Ci06MTA0MkUwMDA5RDY2RkZGNjA0RjJFRERENzI2MTQ3NUFGRTA1MkFDOUFDCi06MTA0MkYwMDBCNTJGRDE0RTIzRkY1RTMyMkIyQ0RGMjFENzIyMjdCQUQ4Ci06MTA0MzAwMDA1NzBGMDBFNTYxQUM1RjJFMUJFNUVCRTUxQTVGNThGQzJCCi06MTA0MzEwMDAxNUEwRTVDN0UwMUIzREZFODAzRjdCRkUzODhCRUY2M0I5Ci06MTA0MzIwMDA1QTM1QzRDMkY3MEZBMTNFRjBGNjk2QUZCMzc4MkM5RjcyCi06MTA0MzMwMDBDNkRFREJGNUFDMkVCRjg3QzEzMDlBRkY0QjI4RkY0M0FBCi06MTA0MzQwMDAwNUYzNDFDQ0JEMERDNEY3NkRDRjVGQjYxNEU3RjExRDg5Ci06MTA0MzUwMDA0REU2MzhBQUU0NUE5RkMyRjczMUQ1MzVCMTNDN0Y0MENCCi06MTA0MzYwMDAwOUZDQjYzQ0U2N0M0OTYzRkFDMjQyOTIyRkZBMzk5OUJECi06MTA0MzcwMDBFOEJENDdENzk4QkZDREJERjcxREQ1MDc4MEY0QzI5N0RDCi06MTA0MzgwMDA0ODVBRjY1RUU4QjBCMTZFRUYxMTVBQzdFQUJBNzYyRTE3Ci06MTA0MzkwMDA5RDZFODU4NThEREQxMkU0QjhDRjE1NEFFMDRGQjQzRUExCi06MTA0M0EwMDA3QjI2QjZDN0YwODlENThERUYxOUZDMEVFMzdEOUNCMjU0Ci06MTA0M0IwMDAzQkUyMjRCODZGMjhGOUMwNDlGM0I3MUUxNjdDQkRFMTczCi06MTA0M0MwMDBGMEVDMjRFMkJCNTZFRkExMjRFMjlCMkZFOEUyQzdFRjFBCi06MTA0M0QwMDBDMDI3M0VFNTU1OTY2MUJCREY0OEJEOUVFODY3NEY0MzY5Ci06MTA0M0UwMDAxQURCMTUwNzk3REY3RjJERjFDRjhEQkZGODAxQzNCQjE3Ci06MTA0M0YwMDA5QjZGRTBFMTQxOTVDRTE4QkU4MTg3OTlBRUJCRjk0NjJGCi06MTA0NDAwMDBBQkY3Q0MzNzdGNjdCRURBRERDRDM3QTJFRUNCMDc0MzAzCi06MTA0NDEwMDBGREUwNEM2M0ZGNkVCRUEwRjE5MTJGMUVBRkIwNzNCQkU5Ci06MTA0NDIwMDA3REQyQzM1QkQ0MThCRTNBNDlGNTU4QkVGOTA5RjI0REE2Ci06MTA0NDMwMDAwMkI5M0Y3RDkyNDZERjE3OTg2RjUyMkUzMkRGMEM5REY2Ci06MTA0NDQwMDBBNEM5Q0ZFRkNFMzc2MzI3NUQxNEJFRDk2MzNBMUZCRTMwCi06MTA0NDUwMDBCOUVDNENCRUE5OUFENEY3REJGMzREQUIzQkNDRTdFOTAyCi06MTA0NDYwMDA1QUU3OTgxM0ZFN0Q5MDBGMzQ3OTM5NzU3RUEwQjI4RDhFCi06MTA0NDcwMDBFQzFBNDVEQ0RGMzc0RDlBOTlFNUYzMTA5RjQ5NzQ4N0I0Ci06MTA0NDgwMDAzNEVBNEZBMUNGMEY1RURGRkQ3RDA2RUI2N0ZERkVGNTQxCi06MTA0NDkwMDBGNTg0NTBCMjkzMTYwQkJBRTlBQzEzNzFERjY5NTJGOTg3Ci06MTA0NEEwMDBCNEM1QTQ3N0U5M0IwMjRBMzU1M0Y2OTRFQzAyRDRGQjM5Ci06MTA0NEIwMDAzMkQ5ODVEMDVFRTFDMTc5MzY1NDk5QTA0REE2MkQwNzM5Ci06MTA0NEMwMDBBQjg3RjFGODYxQjZDRjg2Njg3MTdGQTc5NDJGQkU2NzdFCi06MTA0NEQwMDA5QTI5RkVFRTg1RkU1RDRDQjU2MkJDNUZCNkZGNTlFQ0Q1Ci06MTA0NEUwMDAyNjVDNzcwQUY5MzFFRTEyRjE3NzUwMTY0RDhBRDdCRjY0Ci06MTA0NEYwMDA2ODg3RTBGQTNBMDdEQTk4NEUzNjI4NTdGNzFBMjczQUNCCi06MTA0NTAwMDBFMzVDQjUyRjk4MzAyRkY5RDYyNDkzNzZDRkJFRjIzM0UzCi06MTA0NTEwMDBBMkIzREQ2RjZDNDlBNjczMTI3QjI0RTBGMzM5RjM4M0Y5Ci06MTA0NTIwMDA0RkNEMjNCRTczQTk0MkRFQjRBRUY4MzNBNTIzNjFEN0M1Ci06MTA0NTMwMDBCNDFGMUFGNTM0N0M2QUQ0RDNGMEE5NTE0RjZCRjUxRTIxCi06MTA0NTQwMDBFNThEN0FDMkE4QTdCNTdBQjc5RUQ2RUFERDdBNUFBQkNFCi06MTA0NTUwMDA0N0U1Q0RBNzA2M0RCRDYxRDJBNzA2NzlGMzFFRDVDRkFECi06MTA0NTYwMDA0MTRGMUY5RTc0NzFGNEY0QTg4QjJDNkY5RUJFNzBGMkE1Ci06MTA0NTcwMDA2NkRGQTRCRTE3NDNERTFDMzkyRjc5OTM3REE2QkMzOUI0Ci06MTA0NTgwMDA3NDNFRjJDNkI1Qjk0M0E1RjRDQ0MyMUVGOEEwNTZDMzFBCi06MTA0NTkwMDBGQjVCNjVDQURCMzQzRTk0OUM1QkJDMjY5RUJFM0FBQTlDCi06MTA0NUEwMDAxN0FFQTZCRjJCRjNBNTU3Rjg3RjNEQkRFRkFBRkRENUVCCi06MTA0NUIwMDA5MUM2MTgzRkRDNjVFOTE0REYyM0Q0RUVFMUU3Qjc2QzYwCi06MTA0NUMwMDA3RTk1RTNCMTY3NUQyRjVEMTA1QTc0QTY1RTQ1QkJDODRBCi06MTA0NUQwMDBDMUY0RUIzNTczMkVGQzdDRDdEMTNBNDdGMERCOTVDRjk1Ci06MTA0NUUwMDBERUMxRkM5NDVDNkU5QzRGQjc3RjNCQUE2RDY2OUVBRkFDCi06MTA0NUYwMDA0NEM4RTk5RUVDQTE5RUU2RkRBMDVDMTZGN0ZGQzVDRDgwCi06MTA0NjAwMDAxRjRGQkY0ODlGRTk5MzhCOTgxRTJENzQyRkY4MTc5RDVECi06MTA0NjEwMDBDMDdGQTdFQUJGNEU2RUZDQkY4QTdDNDlFOUM1MTE5M0YzCi06MTA0NjIwMDBDRjgzNEVBNzZCRjg0Q0IwNkZFRkM1RERGNzA1RTNDRjM2Ci06MTA0NjMwMDBFOTkzQ0ZDMzhFM0U0Q0ZCRUU5QjcwREZERjY3Mzg1RUE1Ci06MTA0NjQwMDBCNDdENUYzMEZGRTFFNkYzQzFGN0JCRTVEREZCRTZFRkVDCi06MTA0NjUwMDA1MTMyQjQ3RDZGRjhFNzM1RUY1MTVDNjNDM0JGQUU3RDc3Ci06MTA0NjYwMDA4QUUyMUFGNzdEOURCNzhERTIxQUZBQkQ3MjY5MTBGREQ0Ci06MTA0NjcwMDA5MUY1RUY4RjEwMkUyRUJGRjg5RTI0NjM0RUNDNzc0NTE4Ci06MTA0NjgwMDBDMEZFN0RGNEJCMTNCMjM3N0NEREVERkYyQkY3Q0E5MTgyCi06MTA0NjkwMDA3REQyREJCRDcyQUQzNjYzNUM0RjJGQUYyQTE3RjY0QTcxCi06MTA0NkEwMDBBQjY5MURDNzIzMzZBMDVGNTU4Rjc4RUI5ODIzRTIxMUM1Ci06MTA0NkIwMDBBRDY4QTdCMERDOTk1M0QwQUI3REI0QUI0RUUxQjg1MzM1Ci06MTA0NkMwMDA2QjlEOUZDQjdCRUI2NjcwQjlFQkI1MjU2NTI0Nzc3RDQxCi06MTA0NkQwMDBBRjJENjJCREU3RjNGQUFGN0IxODgxRTRBRUY4RDA0OUE1Ci06MTA0NkUwMDBDRkVGRjVFOEZFOTBCMDVGRDJDODdFQzFGQUMzOTNENzkyCi06MTA0NkYwMDA2RjhEOEQwQjhDRkFFRkUxNUJENDgxRDE3ODU1NUI2NkMxCi06MTA0NzAwMDA4Q0REMjNDN0ZBNTFBMDEyQjk0NEZEMjhBQzFCRUM5QUVBCi06MTA0NzEwMDAxMUVDNDdFRDI2QkIwNkVCRUQ5MzQ3MThFQzFBN0Q5RTk2Ci06MTA0NzIwMDBCNTY2QTgyMUJCNjZFRDBFRjM4QzQ0NzZDREFDRjJDNDIxCi06MTA0NzMwMDA3RTE0RDYzOTBGRTI3MDM5RjhGQjdGNDlGQkZCNUY1MURECi06MTA0NzQwMDA3RUU5RERBRUM5OUQ3MjcxRUQ5QURGNEZCRTMwRjE4NzEzCi06MTA0NzUwMDA2RTNFRDZFQzk5MDcxNEU1MEQ0REFFN0M0N0Y5QjFEMTBDCi06MTA0NzYwMDA0Q0YxRTM2RjJCM0Y0NjkyRkNDODM3Qzg4RkNGQ0U0NzQyCi06MTA0NzcwMDA3RUNDMkE3NzFCRTJBMjA3NjVCNUNGNThCMkQzNzc5OEQzCi06MTA0NzgwMDBBMTVFRDZGNDJGRDYzQkQxQUYzMTIxOUM3RTUyMjFCMTEwCi06MTA0NzkwMDA5RkIzQzEwQkZDRjdGREE2NEJGMzVGMjY3QUQ4QkRDOENCCi06MTA0N0EwMDBDQ0RGQkIzRkE4ODg3MzIyMEZDRDExRTdBOTFFNUU1RTQ4Ci06MTA0N0IwMDAzMDlCM0UyMzVBOTc3MkMzREQ0OTE0RDcyRTE3RjcwNDU2Ci06MTA0N0MwMDA0Qzk3Q0EzOUNFRkRFMDBDNjFFNzY0M0JEQjJGQTdGREI3Ci06MTA0N0QwMDAxRkFDQjAwMEQxRDVEOUUyREMxNDZFRTc3OEI1RTY0NzVFCi06MTA0N0UwMDA4MUI0OTlGRDBFRDcwRjJENkUzQUFGMUExRkJGNzY5NjgyCi06MTA0N0YwMDA3Q0NDREZDRDgzRjQwQTdGREY3REI2RjhGNUI3OEQ1QjI3Ci06MTA0ODAwMDAwRjk4RjI5REUzRDZDQzhGMzVDRjBEQkY0MTc1OUU0OUYxCi06MTA0ODEwMDA5RjQ3MjZDQkUyNUM2MjBGN0EyQzlFOUYzQkFBQTdBN0ZDCi06MTA0ODIwMDA0NTdBMzkxN0U1MjRGQjI5RTYxRTU5RkQ3QkQ2NTlFNTYzCi06MTA0ODMwMDA2MjFFMjdEOTRGODU1MUJBRThBODJFRUVGNTVFREE5NEFDCi06MTA0ODQwMDBEQTY3OEVDNEU2ODU1MjJDRUQzQzVFNEFFRDNFN0VCRUI0Ci06MTA0ODUwMDA5RUNFMkY5MENDQjI3ODU5QUUzRTVFODlGMjM5QzE3OEE3Ci06MTA0ODYwMDBGQkVBODI4NzA5MkVCRkFFQUIzRDRDNzFFQTQ5OTY0RUZBCi06MTA0ODcwMDA4OUZFOUVFQkRFM0E5NUVCN0JFQTlBQjhEQzU1RDdDNjBCCi06MTA0ODgwMDBGREQ2RDc2REUyRjJCRUJBMTAzRkJGQjdFRTMxQUVERjU0Ci06MTA0ODkwMDA1REQ3Q0VGNUM3NzNDNTNDMTMyRDIxMUU2NzUyMTc4RTA5Ci06MTA0OEEwMDAxRkMzMEY2NTlGRTAzQzMxNzgyRThEQTg4NkY2MDk2RkY3Ci06MTA0OEIwMDAzNjE5REE4QjNBREIwQ0Y1QkVGRTREODZGRTdENjY4NDNBCi06MTA0OEMwMDAwQ0VENkY5NTA1MDI1MzhBRTg1Q0MzNjM4NjdFQ0VGQ0NGCi06MTA0OEQwMDA3NjQzRkQ1Q0ZEODUwQkRENkY2NTRBQUFFNTFGQzhBRjE5Ci06MTA0OEUwMDA4MzAyNDg0RjQ4NjdFOUI1QjJDQTc5RjMxQUMxOTdGRDA4Ci06MTA0OEYwMDA2QkJENjFBQTZGNzFEOTk4QkY3NUJBRTQzM0NCMjZCMThECi06MTA0OTAwMDA3RTUzQ0MzREI1MUQyRTcxN0VCMkExQUY4OEE3MzRGQzdECi06MTA0OTEwMDA0Q0Q0Qjc2NDg5RjM5MUMzQUI0NDdFQTQ2MUEwQjg5NzJCCi06MTA0OTIwMDA0NENGQzM2RjcxNjlGNzkzRjhDNDNEMUE4M0YyMjNGQzM3Ci06MTA0OTMwMDBEREVEMjBFREVGQzEzOUNCNDVGRUNDMEQ2RUNFQ0YzNzhFCi06MTA0OTQwMDBENDgxRjY3RDYyODRGMzFEMTk2MEY2OEFGQkQ1MTU5OTMyCi06MTA0OTUwMDBGRjlFOTIwNTQyRjUzODVGNDNCRTVCQkQ4NUU0NEMzMDU3Ci06MTA0OTYwMDBENTZCRjZGMjlGOTYwRDk5Mjk4RjQ4RTI4OTkzMzBFRDI5Ci06MTA0OTcwMDA5QURFRDFGMkYyNDkxRjAwOUYzQkU4ODZDRkU3RTI3QjQ3Ci06MTA0OTgwMDA4NERBMkVCRUI3QTk3RjZEMTdFN0UzQjZGQzQyREM2MzdECi06MTA0OTkwMDAxMzBGRDc4RTVGN0NDNUY3MkE2REZERDk1NzU5QzRENDQ0Ci06MTA0OUEwMDA1QkJCQ0ZFRDc0MjVDNTdFOEZCNkE1MjY5NUVGNUJEODkyCi06MTA0OUIwMDA1QTlCQ0JFNzI4QjZENjg4RUY4RDY1MTBGQkREQjJDOEQxCi06MTA0OUMwMDBDNkU3MzBCNkQ2OUFDRDI0Mjc0RjJEQjIzMDVDRjRGNTI5Ci06MTA0OUQwMDBDN0NGQUI3RkJGQjk0RTNCRDc3M0FGNzZBRTY3QUQ3NjZGCi06MTA0OUUwMDBDRUVBNkVFRDVDNEZCMzc2Q0U2QThENzYzRTc2MTU5RDNGCi06MTA0OUYwMDBFQkIxMTMzQ0M1Qjk5RUFEQjUwQjE0RUQzQ0FCN0UyRkFFCi06MTA0QTAwMDAwM0MzNTc0MkY4RjI3NzJBNTZEODZCMUEwN0Y0ODcwQzdCCi06MTA0QTEwMDAxOTZFRjFERkM3NjY1NDI1Qzc5REU3MzE5RUI3NEFGNTg5Ci06MTA0QTIwMDAwRDMwRDQ5REY5QzZGMzU2Qzk0MzQ3MTlDRkE5MEUzNEFBCi06MTA0QTMwMDA5RUVGQjE3OThDRTc3QTJDQ0U0QUUzRjlEMDU4RkE0NDRDCi06MTA0QTQwMDA2MDlBNTY2Q0FDMjdGQzc3RkY3RDQ3N0FEODhGRkY3RTQzCi06MTA0QTUwMDA1QzM3RkQ4NkY0NzM0MDEyOUQ0MzQ5NjM3QUNEQUMxMkY2Ci06MTA0QTYwMDBGNDk5QTE3RDBGRTM4NjRFMkU1MzkxNUVBODc0NTI5RTU5Ci06MTA0QTcwMDA1REEyNzM5MDJBRDM1MUY0RkIzN0E1NTc3QTNBREZCRjcyCi06MTA0QTgwMDAwNzIwQUQ0Q0ZDRjcwMEY0NzMwODdGRDFFQ0E4QTU1M0M4Ci06MTA0QTkwMDA5NDRGQTcxNDQ1RTdCQjdGOEE3MjNDQjZBRTk3M0RDOUQ5Ci06MTA0QUEwMDA4NUZGQURGMkZGMDFDMThDRTMyQjAwODAwMDAwMDAwMDA4Ci06MTA0QUIwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkI1NTVDRjRCMUI0MUI5Ci06MTA0QUMwMDAxNEZFQjJCQkQxNDRBMzU5MzRCNjg2NUE0ODFBNTIwRENCCi06MTA0QUQwMDBBNEIwNkQzN0EyMjVEMkQ1ODY5MjgzQzgxNjNDNzhFODVCCi06MTA0QUUwMDAyMTg3OUNGQUUzNThFODZENjM1QjkwNEEyNEE5NDIyRjIyCi06MTA0QUYwMDA1MkM4QzExRTBBODIxRUZDMDM2MjFCN0E4RTY4MEI1MkNBCi06MTA0QjAwMDAyOUMxOEFFNzQwNUI3QTExRDIzNzkzQUM4OTlCQzQ3QTdBCi06MTA0QjEwMDBFOTQwRjJGMjY2RTZGREY4QkVGN0U2RTUwRDY4Nzk4MTU4Ci06MTA0QjIwMDA5MEEyREQxMzdENDAyNDVBMkEzODQ4MDY1NDY4QjkzMEQzCi06MTA0QjMwMDAzMDUzMjRFOUEyRkRCNUFBOTQzNTkxMTRDMEE5MDk1Q0FCCi06MTA0QjQwMDA5QUJBMUUyRjQ5MTJEOUM5MTYzQkZERDRDRUNFRUY4RDhECi06MTA0QjUwMDAzMUJCMDEyNjI1MkVBRjFGMzkwMDBGQjAxNUIzRTUxNjY2Ci06MTA0QjYwMDBGREMwQzIwRTlEQUJDMEVGMzE1QjBFN0U5NkRDNDlBNTQ5Ci06MTA0QjcwMDAzMkNBNEQwMTkxN0Q2OUJEREU0QkMwMkNGQjQ5RjE3QUYzCi06MTA0QjgwMDBDNzNEMDMwOUYyOUYzMTgwRkMzMEJCRjNEMENENzQ1NzkxCi06MTA0QjkwMDAzNDNCRTVBMzNDNDI3QjQ1NDhFNDJGNTI4NERDMDc4NjQ2Ci06MTA0QkEwMDBBRkFDODFGNkU3QUZERTE3MjU4QUZCNjEwOUI4NENGQjk1Ci06MTA0QkIwMDAwQkY2NTJFQzExREREQjFBRUY5NDVGMjhDQ0NGQjRGRDdECi06MTA0QkMwMDAyOTlEQ0Y1QzExMjEzMjVEQjcxRjk2Mjg1NUQ4NjBBQjY3Ci06MTA0QkQwMDA1QzIzN0VBMjUyNTVBNzU1QTFDRjAzMzRFODk0RjcwQzZECi06MTA0QkUwMDBEMzQ3RUFCQUZCMjQzMDI5NTM1RUNGMEZGQzFCODU5MUQzCi06MTA0QkYwMDBCQTVEODA1MjYxRkJCN0I1MUVDRjcxMzc2RDg0MTBBQUM0Ci06MTA0QzAwMDA4ODc1MUMxNUI2RUUzNkNCM0Y4NjZGQTM2MDY3MzgyMURBCi06MTA0QzEwMDAzMEJFRDQzRDIxRTdBNzM4QkQ1Rjk2QkIxODNFQjFBODkyCi06MTA0QzIwMDA4QjI1QjI0NzhDNTA4RjEzQ0UzREREOEQ3M0ZDN0Q2Nzk1Ci06MTA0QzMwMDBGQzc1MDIwNzg2ODNDQkEyMjE3M0I5NjUwQzcyNzk2QzZGCi06MTA0QzQwMDBGOEI4M0MzMjQ2QjgzQzM0MTQyRTRCQzYxODk3NDA4QTBDCi06MTA0QzUwMDBEN0IzRDMwNjFFMkY2M0M0Nzc2M0MxRjZGMTY0NUI1OUUzCi06MTA0QzYwMDA2Nzc1Qzc4NDg0RjdBQ0NFNDMyQUI3NkJCQTE3MjUzRjY0Ci06MTA0QzcwMDAwRDdDMTE1REJDMTkwQTNENkYyNzk5RkRCQjI3MDI4RjgyCi06MTA0QzgwMDBCOTFBRERGNEVBRTE2NkZCRDU2NzUzRTdFMjRFMUI3MzIwCi06MTA0QzkwMDBCQkFGRUNFRENGNUQxRDQ4NkNCNkYwRkJCMkQ2Qzc0MEE0Ci06MTA0Q0EwMDA5NkU3MTE4ODBCNThBNDNDQkMwRUM1MjlEM0ZERjRCNjc5Ci06MTA0Q0IwMDA5M0Y3NzU0ODcxRTQ5QzBDREY5QTBCM0Y0QzFDRDQzRjcyCi06MTA0Q0MwMDBDQjY5NkExOTgyOUNENTI0OTk3QUVBRDQ2RjhGNDJGOTBDCi06MTA0Q0QwMDAzNEY0NTU2MEZBRTMyMEFCNjc3QTIyM0ZBODEzOEVENUVGCi06MTA0Q0UwMDA5QjlGRTc4NkM5MkVCNTIzMjI4OEU2QkM1RTZCMzY5RTY1Ci06MTA0Q0YwMDA5Nzg5MkIyMDI5ODJEQzAyN0YzQjVDOEY2QkY2MThGMkIwCi06MTA0RDAwMDBGMEI5NjBFNURGN0FERkFDM0JBREI0MzQ1QTdCQTJCNEQ2Ci06MTA0RDEwMDAxMjVEODk4QzQ2NzVEMkQ2NkQ5QzA3QTcwRkZDN0Q3N0Y2Ci06MTA0RDIwMDA0MENCMzNCQzE3QzgwRkI4NDMzQ0U3MjM4OTk0QUI5RUY0Ci06MTA0RDMwMDA0RkJCM0E5OTc5NzREN0ZBQ0Y5QjJDM0IxMjg0NkZGOTA5Ci06MTA0RDQwMDAxRjdERDg2NzJGM0E1OEJEOTY5MjQyM0NENzIyOEZGNUU3Ci06MTA0RDUwMDBEQTlDNUI1MjZGMzlEOTdCNDRCODc1MUVGRDcxNkI5RjJECi06MTA0RDYwMDA1NkYzNTk5MUM4M0Y5QjRGMkFGOTZGQzFGNzM3QzY3NzYxCi06MTA0RDcwMDBCNTlGRjc0NUFBNkI0NjEzN0NBQzlGRkI4OTFCOEQ0MjAwCi06MTA0RDgwMDBGNTQ3OTA0QjExNkZEOUE4QTBFNEU5RkM5N0RBQTE3MDIwCi06MTA0RDkwMDBGNzk2RjlEMDE0NUY2REU4QTM2QkNENzM2NzVCNzM1NTFECi06MTA0REEwMDBFNzREMTA0MTM2NkY3RTBFQ0RCQUYzMkRFQTZCNEE5Mzc0Ci06MTA0REIwMDA0NzczRUUzNEYzNThBRUUyNEM1NjcxMjJEQ0ZBM0RENzFECi06MTA0REMwMDBFQjM1NUYxQkVBNDg4ODY3RkJFNkVCNzk3REQzOEU3Rjg2Ci06MTA0REQwMDA2QjFGQUMyNDc1Nzc5RUZFMUZGMDY5MUZCRTFCOEM4RjY2Ci06MTA0REUwMDBCM0VGQUYxRDZGNTY5RThFRkYzMzRGRDZGM0EyMzk1N0U4Ci06MTA0REYwMDAyRTg4RjNBMkY3NENGRDJGREJBNzkwQTZGMDA3MDAwMDRBCi06MTA0RTAwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMEYwCi06MTA0RTEwMDAwMDBCRkI1MUNGQzBGMDAzMDk3N0YzQTBGMkJGQTNGMTYxCi06MTA0RTIwMDA1N0YxQTNGMkNCQjg1MUY5OUU2OEZDMjYzNEZERTdEMUM3Ci06MTA0RTMwMDBFNDU5MTgyMEI0MjMzQkFBMzhCMTU4OTg4MzgxNDEwRTE1Ci06MTA0RTQwMDA4ODM1Mzk1MEM1RjNBMUU2RDYwMDJERTgwN0UyMTVBQzQ4Ci06MTA0RTUwMDA4NENEN0EyN0M1QzBGMDVGOTY4MUUxMjg5MEFFMDZFMjQ2Ci06MTA0RTYwMDA0QjQwMzY5MzFDMDMwM0FGMzQwMzgzMDcxMDQ3MDNGMTExCi06MTA0RTcwMDAzQjE5MDY4NkE5NDBGQTI1MTA2RjkwODZFOEUzMDQ4QTVDCi06MTA0RTgwMDA5RDk0MjFDRkZENkQ0MkU0RTkxQkM1RDRDMUI3OTU1MDc3Ci06MTA0RTkwMDBGOTkzQjUxOTE4QUVFOTMwMzBBOEU5NDFGOEU3OTFFNDgzCi06MTA0RUEwMDA5RDgwNjI1M0I0MjFFQzcwNTUwNjg2QkRCQTBDMEM4NzA4Ci06MTA0RUIwMDA5NUIwOUIxQjAxOTRERjA3OTQ4RkQwQzM2RkJGODMxMTA0Ci06MTA0RUMwMDAyQTdGQUIzNTJBRkY4QjIxMkFGRkIyMjcyQUJGRDYxQkE4Ci06MTA0RUQwMDA5NTVGRUEwM0ExMDEzNTcyMENENkQ4MDMwMDAwMDAwMEVCCi06MTA0RUUwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDEwCi06MTA0RUYwMDAwMDBCQ0Q3RDBCN0MxNUU1OTVGODk5Qzc5RDNCRjc5OTg3Ci06MTA0RjAwMDA0OTcyMDMxNzA4MzA4OTQxQTIwNjFDMjA0MDQwQzQ0OTU5Ci06MTA0RjEwMDAwODFBNkM4QTE3QTQ0QTVEQUE1NzZBMkQyMjhGMkI2MjQxCi06MTA0RjIwMDA0RDVENkIyNkVGRjBCMDhERTg1NkZFNkFGNUMyNkE5N0NDCi06MTA0RjMwMDA1QUFERDFEMjk2QjZEQTI2ODAyRUI2MTQyMkE1RDZCNkIwCi06MTA0RjQwMDBFQ0JGNDE1RDZENTk2NUEzNUJENEI1QjRFQzc3Q0UzNzRBCi06MTA0RjUwMDA5M0NDNUM2RTFFRjZGMUIzNzFCQkMzMzdGMzNEQ0U3N0Q1Ci06MTA0RjYwMDBCRTczQ0U3NzVFREY3NzE1RDEwN0ZBMjUwMDY3RjA4RjI1Ci06MTA0RjcwMDAzRENGMTcwMTYwRTZDMDMzNUEwMUE1NzIzOUMwMjYyMTIyCi06MTA0RjgwMDA2ODg0OEJEOEYzNEZEMkYyQ0UzMEZCMDY1NjdDRTk5NDdFCi06MTA0RjkwMDA4MTc2NTc4MzQwRjU5RjJGNkE4REY3QjJFRkVEOTNCRTcwCi06MTA0RkEwMDAxQTg3MzI1NjdGQkM0MEY1OUQ3QUNFRjMwNjkwMDAwQUYwCi06MTA0RkIwMDAwMDRBM0E1NkFBMDlENkNGQTYzMThEMkFENjZGRDdCNzVFCi06MTA0RkMwMDAyRDA3MzZERUE5MTIwNTI0MUNBRjI4N0JGQkQ2N0E4MDdDCi06MTA0RkQwMDBBRUM5MDA5N0MwNTZCNTM4QzZDQTQ3MjU2MzMzNjQxQkFGCi06MTA0RkUwMDBBNzg4QzY3MUNBRkVCODA4NURBNTQwN0Y2N0Q4RkYzNjlFCi06MTA0RkYwMDA3RDI5MDkwOTM2NkVDQkE0QUYyRTQ3Qjg5NUFFOUI0MEVDCi06MTA1MDAwMDA4RjAwREMzNjI2MDkzQTdCM0YwRDQ0OUE5NzUyNjE4MTI2Ci06MTA1MDEwMDBDOUNBQUE2RUM1QUQyOTY3OEZEMzhFNzgyOUMzNUUzQkY2Ci06MTA1MDIwMDBFMjRCMjMwM0VGOTczODc4NjFGOEM4QzAwQkMwNUMwMEVGCi06MTA1MDMwMDAwREE2Nzc1OTU4MEUwMEI1Q0ZFQ0Q3QjRDN0Q3RTIyM0U5Ci06MTA1MDQwMDAxQkZGRUNGOUYzRjFBNzgyNEU3ODAwQjUyMzlFODgwQzg0Ci06MTA1MDUwMDBDMEIzQzlEN0Q3MjUzMTdDNUI0NTYwM0NDNkFBRTRCMDU0Ci06MTA1MDYwMDA3MTJBNURGRDY0OEVENzNGNEZCOUMzQjNGRTUzMTBDRTk2Ci06MTA1MDcwMDAwMjlBODcyMEJCRkFDQjg0Njc5NjVENkYxNjlCMzkzRUY4Ci06MTA1MDgwMDA5RDc5RTVDQ0UzRTMwQ0Q3RkZFNTg4RTIwMkFDREYxMUM0Ci06MTA1MDkwMDBCNzIyMkU3QTk0MkQwRkRFODM3NjdEQ0RGNEQ2MUIwQ0FECi06MTA1MEEwMDAzRjIxQzRDRjRDQzQ4RjE1NDc3QTc0RTg1ODBBRUIwREUyCi06MTA1MEIwMDAzNTZDM0UwNTE2RjQ0OUI5NDQzNjI2OEMwMkM4Qzc3RkM0Ci06MTA1MEMwMDBCMTI2QjJBNjU3MjJCRDhFMzI1OTVERjY3RDc0Q0M2QUU4Ci06MTA1MEQwMDA5MEQ4RkIzMUYzRDI4MkNDOUUxMTc4NDg3QjIzMDQwODEwCi06MTA1MEUwMDA0REM5MTk2QTY0NzFCQUVGOUNEMURFQ0JFOEY2MTQ0NDVECi06MTA1MEYwMDAzQTM2QjM2NzkzQ0NGQTQ1QkMxRDhCQTQxRjYzMjAzNUE5Ci06MTA1MTAwMDA1QzlDN0FBNDk3OTUyMzk2MEM4REU1MzQyRUYxRTFFRDA1Ci06MTA1MTEwMDBEMkY5QzY2NjQ2RDI5QjZERkE2RkFGNTdFOUQ5NUFBRjNFCi06MTA1MTIwMDA0MTk3MUZBMEI5M0U0RUNGRkI0Mzc3RkQxQkY2NUY2NzRCCi06MTA1MTMwMDBGOTM1M0Y3QkNBOURCNzNFODVFNTI2ODAwNDhFMTc4OUU5Ci06MTA1MTQwMDBGMUZFNDE1NkI1QzczNDJDODM4OTc4OEY5NEYwRTc0QjM0Ci06MTA1MTUwMDA4ODE3MDZFNzU3MTkyNjExMkYzRkIwRjFBNDQzMTdGMTFFCi06MTA1MTYwMDA2QjkzQjEzNDA3QjJFMEQzNzk4NjRBQkQ3QzE2RDA4MzA1Ci06MTA1MTcwMDBBQ0U1NDBEOTFGQ0ZGMzk0N0REQTU4NEY3RDgwNDJDMjExCi06MTA1MTgwMDAxQjk1OTlBODU4MjU3MDc5MTQ5MTdCQzA0MDM4MTlCRTk5Ci06MTA1MTkwMDBCMkNBMDU1QkFFNDhEMkI0QkUyRTM2QkZGMDZDQzVEOERECi06MTA1MUEwMDBDOTlBREUyRDc4Rjk2QjhDQzBFOUEzNEM1MEU5MTk4M0JDCi06MTA1MUIwMDBCRTdENjcxMDJGODY5OERFQ0NDNjBBNEUyQkVFRUM4QTk5Ci06MTA1MUMwMDBFMTk4OEEzMTg5QUQ2M0QwOTdENkYyQjJGMDE3OTRDQkNCCi06MTA1MUQwMDA2RkY1M0E3MDE3N0ZGQ0Y4OTFBNEVFNTQyMkNCQjg3RjlDCi06MTA1MUUwMDBCMEQ3RUY5MkQzODc1NUU0N0Y3NTlBOTg0ODk3MjFCQzQyCi06MTA1MUYwMDA1NjgyNEQxRUI2RUFCMjg4RjNGRUY4RTAxRTdBQkQ4RUU2Ci06MTA1MjAwMDBEQkZDREMwQTJBRDU5NzcxQkRDQTA3RDZBQkRENjBFQkEzCi06MTA1MjEwMDA4NUZDNTNDRUQ3QUI1REI2RDQ5MUFDRDdFMzAwMUVCQ0IyCi06MTA1MjIwMDA4NEZBRjFEMkM5RjE1MkY2MzFFM0E1NjlFRkYyNDQ5NjVFCi06MTA1MjMwMDA3OUI0REFFQjI5ODM2MTk0MTIxRTE0MURFMURDREFDMDIzCi06MTA1MjQwMDBFOUQ2NjI3NDlCNERGRTBFODYwNzI5RTc1ODNDNTk3NkQ1Ci06MTA1MjUwMDAzNkRFQUYxMkY4MzgwQjZDM0U3MUYwQjRDOTEwNkJEMjY5Ci06MTA1MjYwMDA2MUM0NTM0NzBEQ0FBREFEMjVBMjg4NzJFOUUzQzI5MzZDCi06MTA1MjcwMDAwM0Q3RTY3RUI4RDIxQ0FFRDI4RjE3MkUyOUQ0QjUzQzA4Ci06MTA1MjgwMDAxQjNGQjY2NkYwRTMxNjg0OUJEMzVEMERBNzNCRjE2MzJECi06MTA1MjkwMDBBNTNCMDdBRTAwRjIwMzVGRTcwNDVGNjdGOTFGNjI5RDVECi06MTA1MkEwMDA1QkZCRDczOUM5RDczOUZFRjFBQ0IzQjM5RjgzNkEyQzA2Ci06MTA1MkIwMDBDNzc1NUJBNTMxM0U2NDcwREMyQzU5Q0FGNUI4QkY4NjUyCi06MTA1MkMwMDAwNDc4Q0M2MDc0ODBGMDhGNjE3QTY2QjhGMTY1NUQwNzEwCi06MTA1MkQwMDBCODRGMDg3MDdENDM1QTkxOTM3NEMxQkI0QTY2M0FDQjZDCi06MTA1MkUwMDA3NDdDQkZGNURDRTQxMEYzODBCNEFGQUZENzgxOTNGMUU5Ci06MTA1MkYwMDA2RkREQjE4NkI2RkQyRTM4QkYyNDQ0NjIwNEU3NkM5ODlBCi06MTA1MzAwMDA4RDcwQkUxQjVFOUFEMzA1ODNGNzc3QTI1RTZEOTA3RDhDCi06MTA1MzEwMDAwMEVGRDc1QjZERkI3RDY3N0ZCRjU5ODI1NDM2RkRGMjhFCi06MTA1MzIwMDA0MTVCMkU4MERBQTlEMEZDRUY2NDNDMzgwREYxNzA2RTQxCi06MTA1MzMwMDAzNTQ0RDk3QTg0MUI0N0UxM0MyMENDM0VDRTYxRkRFQzVDCi06MTA1MzQwMDAwQTM0QzgyRUZDMEUzNjlGN0VCQzNBRUQ5OEJBRTNDRkU1Ci06MTA1MzUwMDAzQkJCRkQ2MEVEM0UxNDkyOEYwODBDQkYyRDMxQjExQTlFCi06MTA1MzYwMDBFMTUyNEIyMDhENkJFMERGQjVBNDZCMkMwQzBFNkY0QjI0Ci06MTA1MzcwMDBFQzZGMDNFRkEwRUI2NkQ3N0IzN0RDRDgwQUFDNUQ5MzBDCi06MTA1MzgwMDBDRjM4QTAzMzNBNjkyRTEwOEQ0NjE4ODBDM0ExMTc2NzE1Ci06MTA1MzkwMDA1RDFDM0M4RTc0NUQ3RURCNEY1RjVCMkYwNUQyMzM0MTFECi06MTA1M0EwMDA5N0E2RkRGNTc0NzUwMEU5RUE4MkJGM0Y1REJERjE4RkY4Ci06MTA1M0IwMDA0QjU3Mjc4NDgyN0Y1Q0JBNTJFQTI0RkQ3NTY2NjcxNEQ2Ci06MTA1M0MwMDBDOTI2OTc5M0RBNEE4QkQ2MUZDNzY2NzI0OUVBOThENkUwCi06MTA1M0QwMDA4NUYyMTJFMkNDM0VFM0MzODBDOENBOEE2NjcyQkQxNzZBCi06MTA1M0UwMDAwQzQwRkQ1NTJERjFDQTQ5NUZBMTU3NEVDNjk3OUI1REY0Ci06MTA1M0YwMDA0RUJGOUI3NTFDNTdBMTcxRDEzQ0MyNzFFNTMwNzQwNTNECi06MTA1NDAwMDBBMjU4NTZBODFGMjRFNzMzRTczMDNDQzE4MzM1QzVCQ0ZBCi06MTA1NDEwMDA5RDgxRUQwNjlCOEY4Q0VERDg3OEE4N0U5QzI5QzI3NjY1Ci06MTA1NDIwMDBGRjk0OTNDODYyRjcwRUNDREYzQjRFN0M1OTIyMjcxMUM0Ci06MTA1NDMwMDAxOTc5N0QwOENCRkExQjJFQkMwRkRFNEU4NjM3MUNCQ0JCCi06MTA1NDQwMDAzMEZBMkY0NTNGNDlDMTAwRkVDRDVEQjc5MEZGMjIwMEU1Ci06MTA1NDUwMDBBMjQxNzY1RDYxQUI4NTVGREJGMEZGQ0RDMTdEOUZGMzNGCi06MTA1NDYwMDA3NTVCRTE3NDBERjUyRDYwRkIwREJFQjc4NDJGMDA5NkMyCi06MTA1NDcwMDAzRjE0NzRFMjVCNjczQzI5OUMwMEEyMUJCQkRFNzBFQjBGCi06MTA1NDgwMDA3RjNCRjI1MzE2RkU1RTIxNzI3REUzRkRCQjUyRkY4RDIyCi06MTA1NDkwMDBGNkEwQjU1OUQwMUY2Mzc4M0Q1NEZGMDFCQ0M2Rjg3MjIxCi06MTA1NEEwMDA2NUQ3NzkwQUZBM0RBRTEzNDc1MUJEOTVGMzhBOTQwNTQ1Ci06MTA1NEIwMDBBRTdFNTYwMkI3MEIwMTdBRTUyNTExRjdCODBENUMwRkU5Ci06MTA1NEMwMDBFRDk0RjZFMkJDNUZBRDkwRDJCOEZGQkQ1QUYxM0ZBNEI3Ci06MTA1NEQwMDA5RkJGNkE0QTY5NDRGMkFCRUQ1N0U2MEMyNTc3MEVENUJCCi06MTA1NEUwMDA3MzdCRDZBOTc3Qzg5NDY4N0YzRjI0Rjc4NkIzRTlGMTI4Ci06MTA1NEYwMDAwM0UzQTc2OUZDMkIyQTI0RUYzRTJERjdDQUI4RkVFRjgxCi06MTA1NTAwMDA3RjA5N0NBODNGMUZBQTU3ODVENzI2MzFFMzE3RTdDOTMzCi06MTA1NTEwMDBFODY4NjU0NTkxODI3RTg3RTFFNkI1QzhGNjgzMzlGODhCCi06MTA1NTIwMDA3NUU2RDkxQzE2Njk5RUNERTEyQUYyNUIzNTZCRUY5MkM4Ci06MTA1NTMwMDBGRDc4OEFCRDQ3NzkzMDE4QkM4RURGQUE1OTVCOUExNTcxCi06MTA1NTQwMDAxRjRBODRFQjVCOEEyRjk5RERERUI0RTdFQjk0MzNGREQxCi06MTA1NTUwMDA1OTBFN0NBRDYxNkUxN0I1ODYzOTVDQUQzMTMxOERGQzZECi06MTA1NTYwMDBERjFBQ0YzRUFFRjM2Q0IyRTE3M0VBMzVDN0I4NUVEQTRDCi06MTA1NTcwMDBDQ0U0Qzk0OEUwOTFDMzVFNzgxOERBOEVBMEJGNjRCQzYxCi06MTA1NTgwMDAyRDZCRjI2QjdCMUEzRThGNzY3NjMyNkM0QTA2QkVFOTQzCi06MTA1NTkwMDAxMTI2QjBGMkI4QjgwNDlCMzUzNjZFNEQ1NTdCMzU2Mzk1Ci06MTA1NUEwMDA4MUJDMTU4OTE3MTkxODMwMUEzQTJBRDEwRjM4RjE0QkQ2Ci06MTA1NUIwMDAxQkJCQkZDNkU2MzU2RThFNUZDMzc2NzkzNUE5RUVFN0I1Ci06MTA1NUMwMDA1OEJCQjE0Q0NDNDlBQ0RERTg2MzZCRDdBMjlDRkQxNzRFCi06MTA1NUQwMDBCNDEzNTExMDVCMzczNkEwMUZBQjE5ODc5ODBCRjBCMDhFCi06MTA1NUUwMDBCOEEyMTJGRDZDMzI3MEI5QzBBNDlFMkU4RjQyRkYwQzdGCi06MTA1NUYwMDA5MDczNjYzMEY5QzBGRTg0MzNGRTgxNzY4M0UxMkQ2MkJDCi06MTA1NjAwMDBDQjJCOUEzN0M5QUJBNTQzQ0JBQjhEQkM3RjhCRkQ4NzJBCi06MTA1NjEwMDBGMjY2RENDMDc4RDQ3RUNDMkFDNTgzQzdEMTE5REZGNzA3Ci06MTA1NjIwMDBEQjc0RTk4NzI1N0ZENzcxQzZDMkQyMDBFQTI3OTE2NTZFCi06MTA1NjMwMDBBMjk2QzZGQUQwOTk4QjdFQTg1MTZCNjRFOEMyRUZFNUJBCi06MTA1NjQwMDAxRDBENEM3QzBDOEI3NzI2Rjc2QUI4REYzODI5MkM3MTNFCi06MTA1NjUwMDBDMUZCMkI5MUZCOTkyNkRDNzE1NDEwRDBFRjZCMzA5NTc4Ci06MTA1NjYwMDA3RTFBOTZFQkE2NjVBM0QzNkQzNjdERjY5NzZCNTYwQTI4Ci06MTA1NjcwMDA0OTFBMkZCMTY4MTJDQUI1NUE5MUVDREU3RjU5MzYzREVFCi06MTA1NjgwMDBEN0RERkUwMzdCOUM4MUY1MDc1RDlFODU2NUJFRkVGMjNFCi06MTA1NjkwMDAzMkQxMEM0Q0ZEQ0JENzVGRkU4OEVCOUZCRjUxRjFFQ0I0Ci06MTA1NkEwMDBBNzFGNzU1RDY0QjQzRDBBODY1RkZGQkY3NjFDNjdERDhBCi06MTA1NkIwMDBDRUU2MEYyRTFGMjdEQzUxMUQ0MEY5Nzc1RjYyNjhCOUQ3Ci06MTA1NkMwMDA3MkY2QkEyREE1NzUxQkI1MENDQzc0MTZCOTEyOTAwNEUwCi06MTA1NkQwMDBDRkJFRUEzQzU1NDg4MUMxRDY1OTNBMkE5MTdDOTM0NkJGCi06MTA1NkUwMDBDRjVBQkUwMzA2MUY1NzhBMjkxOUY2OUJERDlGNjVFRTI4Ci06MTA1NkYwMDAyQjYxRUJGRjQ5NzBGRTdBNjQ5NDQzQjUyODg3NTAyRUU2Ci06MTA1NzAwMDA5NUZCNUU3N0ZCNDcxOEM2MDdDQTBDRjc2RjdGNzFERjAyCi06MTA1NzEwMDA3RTk0NDcxNjkzNDdFODNGQ0RGQzVFOEI2NTE3M0Q1QzUyCi06MTA1NzIwMDAyQUYxRkQ3N0VGNzc3RTc5QUVDMEM2Mzk2Q0Y4NzUzRjA4Ci06MTA1NzMwMDA3Qjc1NTBFODc5ODNGQ0JFOTUxMkVEQzcwODlGM0EwQjQ0Ci06MTA1NzQwMDBEQjAzMjkyNzg3NERDOUFDNjZGNTdCQ0EwNURBNDdGRDFGCi06MTA1NzUwMDBGMEQyQjVGRjRDRUQ0MzE0RUZFODk5RjdEQTk3MkY2MkRBCi06MTA1NzYwMDBFRDNGNzlCMTBGMzk4NzYzMDJEQkM3RDkzRjUxQUYzOUJDCi06MTA1NzcwMDBEREZCRTU4QjU4RkQ4MzE3RTcwRkE5NkZENUUyN0M1RDU0Ci06MTA1NzgwMDA3NDcyQzVCM0RFRjIwQUE0Mzc4NEZGM0ZERUFDN0Q5MEFECi06MTA1NzkwMDA4RDc3MTg3MjEyN0U3QzU2NzBGODBFMjM3QzQ4RjdCRDA4Ci06MTA1N0EwMDBCRjdFMDNGNUMyNDNBNjQwRkVBOEMzMTUzRjhGQTEzREFGCi06MTA1N0IwMDA1RTY5MEFBNDJGMkU5RTI3QTRGRDU5RTZCOTc4REUyRDM2Ci06MTA1N0MwMDAxMzI3QjBGRTEyNDY0ODBCQjBFRjA3MkJERkQ5N0ExMTMyCi06MTA1N0QwMDA4M0Y3OEFFRjRCNzdFM0YzRTQxRUE5MjA1OTM2MzhCQ0YwCi06MTA1N0UwMDBDRUZCMkI0Q0VGRkI3RUJEMTg5MjE2RTIxRDM0MUU5N0FDCi06MTA1N0YwMDBGMEM1OENCODlCNUVGQkY1MTgzOTYxNjZGM0I3QUQ5MUM3Ci06MTA1ODAwMDBCOEZGNTFEMDBDRDJFRkU0QjAwMjM4OEZDMUVBREYzOEQ0Ci06MTA1ODEwMDAwOEZERTY0MDVGOTc4NDcwMzhGQUY3RTkyQjc1QjczQ0NFCi06MTA1ODIwMDA3NEUwNTBFNDQ0MTJDNzkxMzQwNTc2QTI5RTkxN0I5NUIyCi06MTA1ODMwMDBFRTlFN0ZCREM0RTM0MjQyREMyNDc4MTQ4REMzQTNDODJFCi06MTA1ODQwMDA4Njk5Q0RERjU0NjdDM0UzRjQwM0QwNjFCN0VGODNERUZECi06MTA1ODUwMDBGMDAwN0MyRDgxQzQ3MkY0NUI1OEI5REM3RkQ4MUNGMTU4Ci06MTA1ODYwMDBGQTAzNzdEQkZEM0NFNkY0RTc4M0FDNzExNTgwNDZFQThBCi06MTA1ODcwMDBCRjZBNTQ4NThBRkQzNzU1NzAzRDQ5MDc4M0ZDRTNDREU3Ci06MTA1ODgwMDBDQzZFODQyMUY0QkFBREI2QkNEODhDRjEwRDNGQzYzOUNDCi06MTA1ODkwMDAzNDNCQ0UxMUU3RkE1M0Y4MTlGMjkzOUQyQTEzQzlBRTlGCi06MTA1OEEwMDAxOUFDOUY4OEUxRDU0NzQyQTU1RTNCQzZEMTVGMDI3QTFECi06MTA1OEIwMDA1RTg2MUZDOEVCRjdGMThEOTI0NTQ3RUY0MzdBMUQwRUM4Ci06MTA1OEMwMDBGRTdFM0RDRkFFRDcyNkE3NTQyRDJCOUVEMjQzRUE3MzQyCi06MTA1OEQwMDA3RjNGRkNGMUY2MjE1RkE3OTYwREFFQkYxNURFMUNCQTI3Ci06MTA1OEUwMDBDQUVDNUZDOTU3NTI2OThBREIyNUUyMUU3REMwOTY5M0Q4Ci06MTA1OEYwMDA0QUJFOUFDMjdEMDFENEMxQkUwNzc5RkIzMEZCOEVGMTRFCi06MTA1OTAwMDA4QzcwNDI0NzdGOEEwNDNDMkVBNDIyMUZCOEYwRjM4RThECi06MTA1OTEwMDBEREVFMUE1OUI0RjVGOTE0QzU0MTA1M0Q0NTdFM0JCNTk4Ci06MTA1OTIwMDA5MEYxOEY3MDc2M0JFN0Q5NkJCNzZGRkJEM0FEQUYxMEJCCi06MTA1OTMwMDA3RjE0QThDNDFGODJDRUY4MjdDQjM4OEQ5MkY5OTZDNDY1Ci06MTA1OTQwMDA5RUVCMjRGMzZEN0NGQUZFMkMyNUIzRjFDOTdGRDk3MjRFCi06MTA1OTUwMDA0NUFENERFODZBMzFDNTE1QzkxRUM5ODQyMzIwRjM3RUMzCi06MTA1OTYwMDA2Rjc0RTBCNzUyMTRBNzFDMjlGQzFGOEMxMDdFNjcxQ0IzCi06MTA1OTcwMDAwNkJGMkMxNzEwRkMzRTdDMEUwNkJGNjRDMzkzMDc3QTRCCi06MTA1OTgwMDA4MzhDNzI0REU3RjIxNTYwODlFRUQ2NEI2RTkwQjlCQ0YwCi06MTA1OTkwMDBDOEIzRTUxM0MwMkQ3MUI3QkQ3NTlERERDRjQ4RTc5MzQyCi06MTA1OUEwMDAyNzhGNkMzRUNFQjg2QzNFMTM2NEJFMUUxM0U1MjFENjI1Ci06MTA1OUIwMDA2M0JDMERDNzBEMzJERkVGRDRFQTg0MUU2N0VCOTIzQjY4Ci06MTA1OUMwMDAwODVEQ0RCM0UxNDhDOUEyQUQ1N0RDRjI5MUU4RUE4MkE3Ci06MTA1OUQwMDAxMUNFNjNERUMwQkFDQ0I2RDdBNTYyQTg3OUNDQjJFNzQ3Ci06MTA1OUUwMDBEMTIxQzE5Q0Q3NTEyRjNFQzdGMUY3MkNGNUFDQ0I2RDFGCi06MTA1OUYwMDAzNjdFM0FGQ0NFQkE2Q0YwQUNDQkNERjZCQzQ2M0E5RkM0Ci06MTA1QTAwMDA4NTc2N0ZDM0NERTdCNjgxNzU1OTYyQ0Y2N0U5NTBGM0RDCi06MTA1QTEwMDA3MUQ1QkZEQUFFQkZEQ0FFNEY3NkM3NkQ3MjY5MjNEQURGCi06MTA1QTIwMDAxOThENTI2Mjg1NUMzMDMwMUVBQkY3MTk3N0JENzc5QUJECi06MTA1QTMwMDA0RTM1RDhGNUFFQzdGNzQyMERERkZGNThCRDk1RUU3QTZCCi06MTA1QTQwMDA2MDQ1MUJEMTNGRDA4MkI2MDJCMzYzNEE5QUU3NTZEOTZDCi06MTA1QTUwMDBFRDU2NTFCQkRBRkVGRTZGQjJGOTgzREEwNTlBODU0NjQwCi06MTA1QTYwMDAyQjRDRjVENjYyQkQ4NjA1N0Y3NkVBQURGM0MyN0I4MTBECi06MTA1QTcwMDAwM0VGMDY4MkI3QkExRjhFNUJEREY1RTZDOUUzQThCRjY4Ci06MTA1QTgwMDBCM0UyMEUyM0Y0MDdGOTYyQzk3NjhDRjNFNzQxQTQwMzZECi06MTA1QTkwMDBGMzNDNUFFNUQ0MjM5ODA3NjA1OTMyM0M4NkY5MDQ3RURBCi06MTA1QUEwMDA0MzQwMUY1QkI0MjJGNTZGNTgyRkQ3NjJGNjM1QUU1QkNCCi06MTA1QUIwMDA1NUVBMjkyQzVCMjIyNDlBQ0EyOTlGODBGMjA1RUE2NEMwCi06MTA1QUMwMDA1NUYzMUI5ODdGNjFDMDc2NTZENjYyNzIxQUVERjMxNkI1Ci06MTA1QUQwMDAyMTY5RTFCRUY4MzMyOUY5NjU5OUU0QUJCNkEyMDFGQjZGCi06MTA1QUUwMDBDRkQ3Qjk5RTBFQkRCNDZGMzk3MEREMTNCQTk2RjIxRkQxCi06MTA1QUYwMDA3MjE5NUNFODhGNkFDOTgwRUJGRUQwODQ2RURDNkZFRkIwCi06MTA1QjAwMDAyRDUwNDg0RjY2MDY1NjI5Q0E5N0RCQTVBMDgxRkQ3NTIyCi06MTA1QjEwMDAxNzdDODFFMERERDZDMEYzMUJCNjdERjIwQjA0RUY3RDcwCi06MTA1QjIwMDAwMjUwRENGNjNFMUZDRjZGQjhDN0E3NkE4RDFBRjYxNzcyCi06MTA1QjMwMDAxREYzMzlDQTg3QzhEMUZDRTUzNjFDMDhERjI3OEEwOTVFCi06MTA1QjQwMDBCRTdDRDAyQTZGMTA0ODdDNzVBMzdEREI1MkExOTBCRTJECi06MTA1QjUwMDBCQzJEMzZCRDkyRkFBQjUwNDk0RkJEMkYzMUJEODFGNEZCCi06MTA1QjYwMDA4RThBMjBGOUU4RjNDMzA2RDlBREQxRDkwQTU4NTg4RUU4Ci06MTA1QjcwMDAxOTBEQTg2NzQ2NjYwNTMxMDcwNkYyMEIwMTkzMEIyMDQ1Ci06MTA1QjgwMDAzMjE5RDI1OEY2NDE0NzQ3MDk3QjQ2REI5OTVEOTI0RjVGCi06MTA1QjkwMDA3NjEzREM4MDc2NkYwNUMzM0JEQTExOTY3OTA0RUQ5MkJCCi06MTA1QkEwMDAzMEQ4N0ZEMjQxMTNFN0VEMUIyNzAxRkEzRDlDRjU4RERDCi06MTA1QkIwMDA3NkY0QjcxRkQyRUU4QUE2NDc1OEFGNkI2NEY1MjJFRDk0Ci06MTA1QkMwMDBDQ0VFOUYzMTgyN0ExRDIzQUM5NzFFNjFCRDJFNUU2Rjk1Ci06MTA1QkQwMDA1ODdGODdDMUVEM0Q5NUZEODc3NjVCMjBEMzZFMEU3QkE4Ci06MTA1QkUwMDBFRDYxNUZDNkY3Q0M3ODVDRTYzMzMzMUU3MjQyRjZDNkQxCi06MTA1QkYwMDA0Mzg2NkJFRkM0NDE4NjlCMkYzQTI1RkFFMTk0ODZBRjJBCi06MTA1QzAwMDBFRkU4OUI4MzdENTdDNjVFMTUzNzU5RkI5NjMxRDdDNEE1Ci06MTA1QzEwMDA0OUFFOEQ1OUMxOUZFM0VERjdFMzk3REJFNTZCRUNGMkZECi06MTA1QzIwMDA4QUU1NjYxNkY5M0VEQUM3RTU3MDI5RkE0Mzg2RjIzQjQzCi06MTA1QzMwMDAwMEQ3MUZERjYwQjA5RjExMzA3OTY5NjhGRjQ5QTZERTg5Ci06MTA1QzQwMDA5QjI5RUY1NEQ5QUE0MjdFREQ5NkUwN0U0RDNGMzIyMzU4Ci06MTA1QzUwMDBGMjYxMjE5MDFGRDYwN0E5OEUxMjk0MTM2MDQ2MTc4RTA5Ci06MTA1QzYwMDAxQUUwMUY5RkY5ODI4OUZDN0M2ODhDMDQ0MjA1QUQ4Rjg1Ci06MTA1QzcwMDA0MUZFRjQwQzNBQzlBNDBCN0Y4NjNGRTdBRkE1OTMwQjE2Ci06MTA1QzgwMDA3RERFNzhFQ0RGOEE0RTk0NzY2OTQ0RkNBMzc0OENCMDk4Ci06MTA1QzkwMDA1RTdBODRGNUJBNDY1NkNGREYyRThDQUM1RUM3MDhFQjMxCi06MTA1Q0EwMDBBNTQ3NThBRjhCRDc2QjlEQTNGMEZEMUNCRURCNjg5NjU0Ci06MTA1Q0IwMDAzMEI4RTdBQTlFNzJFQkRDQTBGN0ZCNDU2MTRGQjk2REU3Ci06MTA1Q0MwMDBBNjQyRkJCRjUzRjZDRjUyM0RFNTM2MjZFNzNEREY2N0UwCi06MTA1Q0QwMDA4N0E5QkNBOUE1QUI4QTZENjUyM0U2OTNGRkZDMEJGOUU4Ci06MTA1Q0UwMDBBNDU0MURDNjJGNUQyMTY2RDg2RDE5N0NBNUVBMDE2Q0YwCi06MTA1Q0YwMDA5RjJGRUI4MEY5NTNGOTMxQkU0RkIxQTc5OUNFODJERkM4Ci06MTA1RDAwMDA0NzZDRkVERjI5RjNGQ0NENkRCMjFFNDBGQkYxMUY3RDE5Ci06MTA1RDEwMDA5RTBEM0UwRUFGMzNERkUxRTA3NUU0RUY5QjkyQUQ2Rjc5Ci06MTA1RDIwMDAwRDk2Rjc1MUNERjMzMjY1MDg1MjVFNjY0OUI1NTk2NTU3Ci06MTA1RDMwMDAzMkI5MjRCRkM4RTM2MDk5RkQ1RUFCMjQ5RkY2QjlFQzhECi06MTA1RDQwMDA2MTU5NEJGMkY4OUVERERGQTIwMjk5RjQxMjk5QzkzNTMwCi06MTA1RDUwMDBENDdCMTQ0OEQ0MTQ1MTFDNTEyNDdGOUYxQzFFNjZERjMxCi06MTA1RDYwMDAyODc0QzlBREUyMjFFMEI2RjM1OEU5OTMwRTUwRjkzQjJGCi06MTA1RDcwMDAzRTZFRDAwMDkyQUYxMUU4MjU2MzNBMDdCNTlFNzM1MDhFCi06MTA1RDgwMDA0RkQzMDVBMEY2ODZDMEZERTdGMzM0RENGNzYyODFCRjkwCi06MTA1RDkwMDA3NUJGMkJBODVGQzFCQzA3Q0U4NDNFNDJCRjcyMkZGOUVFCi06MTA1REEwMDAzQkZGRTZGRDBFMDM2RjAwRjM3QjJGQTAxMDQyQ0M5RDVFCi06MTA1REIwMDBERkVCOEJBN0U4MjU5QzNFNzM0NjlBMDVCQzA5RkQyNUMxCi06MTA1REMwMDAyOUJFMkU4QjA2Rjk0MzYxNkM5NEVDQjI5NkQ4MDZENUE5Ci06MTA1REQwMDBCREFFN0ZGNDE1N0JGQzI2OEFENjdBOEIxMDY1Q0ZDMkM4Ci06MTA1REUwMDAzNTY2RUYxMDc0N0UwNjgzMzFFODFGMjlCQ0MxRUMxREI3Ci06MTA1REYwMDA2MjNGRUQ4RjY3NjJCQzNFMEIxRkI0MkFDOTM0RUFFRkU1Ci06MTA1RTAwMDBENjg0MzBCN0U3RTUxNEY5MTlEQjg0QkNFOTlCQ0I1RDk4Ci06MTA1RTEwMDBGNDVCQTg3NDIxNUM5MTcyRDM0MjdCQUYyRDVGMzQ1MDQ4Ci06MTA1RTIwMDA0Rjk1NjE2QjhGMzA5NUI1OTM2QThENjQxNjNENjJBMDc2Ci06MTA1RTMwMDBCRDdDQzIzRDlGOThFMkQ1QTc5QTg2QTFGNzk2NjFGNEYyCi06MTA1RTQwMDAxRTlGNjIyNEIzRjk0MzI3MkJEQ0FFRjUwNUIzN0ZCRjU5Ci06MTA1RTUwMDA0M0FDMkE1MTY2OUU4RDM3QTZFNjczRkIzNjE3REE4NTZBCi06MTA1RTYwMDAwQjM5Rjk1MEJFNDNFMTBCQUYyMDFFNUEwQTJFOEQwRjlECi06MTA1RTcwMDAzNTVGRDBCQzc5OTczNzhBRTYzNDY1NjgzODY2NjY4M0MzCi06MTA1RTgwMDA2M0E0RjkyMDVBQjU0MTc0RDhBRjJGQzUzODVEQTM5RURECi06MTA1RTkwMDAyNDhDQzI3QzBGRkU3Nzc3RjlDRTJFQ0MwM0YxNURDRjM4Ci06MTA1RUEwMDBFM0IyOTJCOTBCRDA0RkVERTg0RDkyMTkzQzJFRDI3QTY1Ci06MTA1RUIwMDBDRUUzRkE1MzI5RDc4NzRDRjYxRkNFMjMzQTZGNjhCRDNECi06MTA1RUMwMDA1QUNBMjgyRjUxQkNGQTUwNTNGRDFFQzBGOEJDMDNCRjVDCi06MTA1RUQwMDBFM0M3Q0I5Q0Q3NUNCMUVBRUFFQ0Y4MTg5OTNEN0MxRjhDCi06MTA1RUUwMDBBMzE3OTg4Q0YxMjgxNTkxMDIxREY1MUE5NUJGNUMxRjE4Ci06MTA1RUYwMDBBN0YyRDY3QTlEOUVDREY1QTVGNERDODI0REU3MjA5RkQyCi06MTA1RjAwMDBBN0RBOEIxOERFREFFMzhGQzYzRkM3QUFEQzg3QjI4MzM1Ci06MTA1RjEwMDBGNkZENkIxN0EwOUVCQ0I5QkZDQ0NDNDAwNkY3NjYwQzUzCi06MTA1RjIwMDA3ODMzM0RFMjU2RTU4QTA1NjhCRjZGMEU4MEVENTc1ODFECi06MTA1RjMwMDBCMEMwRjQ5NEFGNkFBQUM0QjJFRDY3RDhEQzdBMURENUJDCi06MTA1RjQwMDBCRjZGM0NEOEU3MjA0Q0Y1NTNBRTdERUYxMUM1NDdGQzQxCi06MTA1RjUwMDA4RDdCMEI2RjZGMzY2MTdGMDFEOTJFQzMyRDBCQkM2NTE2Ci06MTA1RjYwMDAzMDExOUU4MENBQ0JGQjk0MERENDNGODkwMDM2REU0RkEyCi06MTA1RjcwMDA5NTVCRjk3ODkzQjgxRjFGQ0E5NjBFODM0N0VFRDcwNzMzCi06MTA1RjgwMDA0NUU3RjJCMzJDOEZGMjU5MTRDMzQwRjcyQkRDOTc2QjIzCi06MTA1RjkwMDBDMzNERDI3RUU0MjRERkVGOEU2NkRGMkYwN0Y4NjY5OERDCi06MTA1RkEwMDA3RENEODY2M0I4RjU2N0U4QjBGRDEwNDlCMDcwREM1RjYxCi06MTA1RkIwMDBGMDM4RTJERjdCRENGQjdDMUYwRDJGNEE0NTlGODVFNzM1Ci06MTA1RkMwMDA0N0U2MjlDOUVGMjFCRDQ3Q0NDRUFFMjI1NjhFRDY3NjA0Ci06MTA1RkQwMDA1OUM0QkUyMzFDRjc1RTQ1QjNFNzlEMjRGRTc3RjBFQzYxCi06MTA1RkUwMDBFODFERkZFNUYzQUVBMzJGNjY1MjFFNTIyMENDRjk2RkQ5Ci06MTA1RkYwMDBBNEYwRjZBMjdFMzU3M0EwMUY3OEEyNkFDQzUwRkE1QTlDCi06MTA2MDAwMDA0MTQyNDQyNUFDNUY1RUU0RDcwNEQxMThFQjJGRTc5QUY4Ci06MTA2MDEwMDA3OTlFNzI0RUM1NTg0RkZEODg1MUVDRjlFRUQzQ0VGN0ZDCi06MTA2MDIwMDA3Q0ZGNEJEN0U5MTcxOUYzRjg4OUFEMzczQUU1MUY2N0JECi06MTA2MDMwMDBDRTczODRGRDNBRTVFRURFMDU2MjI5NUI4Nzk3NkIyNTFBCi06MTA2MDQwMDBEMkVGNUVBRTdERURCRTE5NTg0RTQ4MTRCRjNEQjVCQ0QzCi06MTA2MDUwMDBDOTg3OEM3NDE0Q0NDODRDRjQ4NzI1MjVEQjlGNkU4RUMxCi06MTA2MDYwMDA0NzdDRkUwMkZGQzlDNjdCMDlGNzNEMjY5RjBFREJFNzkyCi06MTA2MDcwMDA3Rjk4OUMxODhGRTc5RjBFNUYzQzdCM0NBRUVCNjExRkM3Ci06MTA2MDgwMDBFNzZGQjAzQTQ4M0VGRERDMDcxRTc5RjA3MzVCRkUxOEZGCi06MTA2MDkwMDA2RERCOUJEMDBGNzk1NEUwNjVBOTZERkIwMjhCRTI4MzI5Ci06MTA2MEEwMDA1QjVCMkY2MzdBQ0I5NTFDODVCMEI0NTZDODZBMEY0NEVFCi06MTA2MEIwMDBGQzBBRTFFMzQzMjExOUYxQjM3OTlBRDU3QTRCMENGMzQ5Ci06MTA2MEMwMDBERjc0MjA3REQ1MEYwOUQyQ0JFQUMwQUExNDUxREY2MTVECi06MTA2MEQwMDBGNDQ3NzE2RUI5QUYzMDlCREVGMTczN0IzRkY3QzM5NTI4Ci06MTA2MEUwMDBBNEVGMkZBRENERjVBMTMxRUZBRjk5RTY0MzNGRUE5NThGCi06MTA2MEYwMDAzNTk1M0VCMEY1NjVDRDA1OUY5ODEwRThGQ0Q0QjI1QUIxCi06MTA2MTAwMDBGRjRFQzRFQjMyRDlGNDY1OEI2QjVEOTlGMDdCRjZBOTM5Ci06MTA2MTEwMDA2OTBDODcwOEZGNTFGQkRDMDM0MDVGQTEzQkRFMzRDREY3Ci06MTA2MTIwMDBDRkVEOUQ3OEM5RDBGNjgyMDNCNzUzNUU1MjNCRUQ3OTJGCi06MTA2MTMwMDBDNDAzQzMzNjlENDcwMUI1QUZGMERBODhCQkRGOTAxM0M3Ci06MTA2MTQwMDAxNzhFNjBCRjJGMkZGRjJDREY5RjE5NURBMDVGRjFDNTU5Ci06MTA2MTUwMDBFMzlGRjc1MTVDNzY1OUJFODdGRjk2NTY0QjFFRjgxM0E2Ci06MTA2MTYwMDBGMzQyOUVGMjU1QjU1N0U2MENBOTdGMjRGRDE5RjJDQ0Y3Ci06MTA2MTcwMDBCMkNGNjE4QTI0ODczNzFGMTM0ODNFRTQ0Q0U4NEI2MzUzCi06MTA2MTgwMDA5RTI2QkMyQzAxRDdGRjFDRkZFQjVDRjJCRjQ2QzdGNTc3Ci06MTA2MTkwMDBFOUE4MkZDMDZGNDNEQTYzMkVGOUQ5NkNEM0U1NjBFMzI5Ci06MTA2MUEwMDAzRkU3RTc3QUFEOUM1NzQzRjFFREY3OEYwQjNBQ0U1N0I3Ci06MTA2MUIwMDBDOEFCOUI4Q0YzOTUxNUIzMTFDNzZEMkUxMkQzMThGNzhFCi06MTA2MUMwMDBCRUJENzg5QjhBRUJCREE5RTRBM0U5ODFCRTE4OEZGNzE5Ci06MTA2MUQwMDBFQjk2MzYxREQ5N0ZCMDc2Njk5MzlGMjNDODdDQkZDNkU2Ci06MTA2MUUwMDBDRkUzMkQyREQ2NTJBRDA0OTc3MUJGNTY4OUYzMEYxNDBFCi06MTA2MUYwMDA0MkQ2NzNBNjhDRkVEN0Y4RDE2RjFGQjM4MEM3RDcxM0QyCi06MTA2MjAwMDBBNDU3OTdBODJCMjkwRjU3MUUzQjc0QkMzNjEzNkZCMkE3Ci06MTA2MjEwMDAxRDA3Q0NBQ0Y3QTQ0RDhGMjUxNTNCQTlERkY3Q0YxQjhECi06MTA2MjIwMDBCQTVGMDcyRjFGMTgyMkY0RDhGQTA0RDY1NzgxQ0Q4N0ZBCi06MTA2MjMwMDBFMTdGNEIyOUNGQzM2RDJFN0I4NkYwMkM5OTk1QTRDRjlGCi06MTA2MjQwMDBGQUI0OTQ4OUY1QjY5NEFEMjRCQTZDNjE3NUYyRDlEMERDCi06MTA2MjUwMDBCOUQ1OUQ3NDRFNzNDQjlGNzg3Q0UyQzlCNkZENERBODJECi06MTA2MjYwMDAzRjZDRTlCRTA5MzBBRjMyMTg0RjAzQ0E4RjJENTM2RTExCi06MTA2MjcwMDA1NDExMEY1Qjc2MDBGNDIwMURDQjlERTQ5NDBCRDlGRUU2Ci06MTA2MjgwMDBGMDkwMDY2OTY2NDk0MUE4Q0MwNDk0MEI3OTFBM0Y1M0YzCi06MTA2MjkwMDBCOTM3NUUwNUI4NkU1QkNBQzE0MEQ2Q0M0RkE3MUEzMDdECi06MTA2MkEwMDBGNEIzMjVDRUUzREZDMTUyQjNBNjA4RTExRTIzOTIxODUyCi06MTA2MkIwMDBEMDIxRDk4RUU1RTY1QTk5RTZEMUFBNzE3Q0EwREQ3NTg4Ci06MTA2MkMwMDBDNkM5RUZDMjNDOTgxMjZFNzc5NUEwN0Y5RkY1QUY3QzUwCi06MTA2MkQwMDA4OUNGNUJERjVFNDI3RUEyMkRCOTJGOUJBOEVGNUE5RjJDCi06MTA2MkUwMDAwNDYzMTI3MEJEOTZGNDA0OTlEMTExRjY1RkE3NjU1RDQxCi06MTA2MkYwMDBGN0FENjJGMjlCN0U1N0ZDNUVENjc0MDFFOTM0MTMzRjIyCi06MTA2MzAwMDBFRkZCRTA3MjlDNzdGMzM0MTE3NjY2RDEzN0Y2Rjg3OUJCCi06MTA2MzEwMDBCQzJFNkQyQ0JEQTIzOENCMzhDRkY5NzU0RjlFODBGRUI4Ci06MTA2MzIwMDA4MTQyNzAwRjU2N0ZBMDlFNEM3RTdEMzQzQzE2QjE3OTIxCi06MTA2MzMwMDAxNEQ0NzA3RjI5NjQ5QzYzOEQ0MTkyRUNEQkQxNjAzNTZECi06MTA2MzQwMDAyMDNGM0FFNzU3Qzc1NTI3N0U5NTY0NEYyOUIyOENGMjE0Ci06MTA2MzUwMDBFOTA2M0JDRkVBRTQ3OUFFQUNCMDA1MzJFODU3RkY4NkY4Ci06MTA2MzYwMDBDREY3QTYwMzNFNDBCQzVENzJGQTkxMTczMDVGQ0E1NzY1Ci06MTA2MzcwMDBFMUQ3MjhCRjBBM0E1RUMwRkNDRDFCOTgzQTg2RTU5QjYwCi06MTA2MzgwMDA4RTRENTEzMEZGRTdFNUIxMTJFNkM2MjBGRjQ0OTEwRTc1Ci06MTA2MzkwMDBERjA2OTFGMkNGREU4NjIzRDExOTJFM0E3RkNCREU3NzRFCi06MTA2M0EwMDA1MEIyQTIxQzY5Q0FFNUYzOTJDM0FEM0Q1MjE0RDc1RDQ5Ci06MTA2M0IwMDBCNjdBOURGQzNENTI5ODc4NUUzQjg0RDk3Qjk1QjI4RjJFCi06MTA2M0MwMDAxQTQ4RkVCNUYzN0MyMTI3M0ZGMjczMURERUZDQTFDRkY2Ci06MTA2M0QwMDA2RkY3OTY2Rjg0QTVBMzkwNkY2RTY0MEE1RDlBRjU3QjQ0Ci06MTA2M0UwMDA5MzNCRUY4QjhEN0ZENENGRjU4M0NGNDNBQTE1Rjc5RkQ3Ci06MTA2M0YwMDAzNjNCM0Y2NkVERjdBNjI4NDhENzM3Q0REMDhBRjAxQzRDCi06MTA2NDAwMDA4NjMzOEYzRkY4QjkxRDdBODJGMUE5RUVFMkZGRDVCMTRDCi06MTA2NDEwMDAzNEU1Mjc2N0NFRUZFREREMEJCQTkyQUNGQzlBMkVBN0UwCi06MTA2NDIwMDBCODlERUQ5RDY3OUJBRjY3MzFFNjdCNTk3N0ZCNkNCREVGCi06MTA2NDMwMDBDMTlCRTdCODdBNTdBNTg5Rjk2MjBDN0I3QUJFQjczRDU0Ci06MTA2NDQwMDBDMUZGRDk3NkVGN0M4N0MzNDdFNkZDMUQ3RDcwQjBGOUFDCi06MTA2NDUwMDAyOEJCODRBQ0Y5N0UyMUQ1OUIyRkQ1QTRGMjc4QTNEOTkzCi06MTA2NDYwMDAyNDQzNjBGRUQ5RTdBM0FEQUExNDlENkZCNjFBRkQ1QTY2Ci06MTA2NDcwMDA1MzhDRTI5MzE0RkZBQjYzODQ4M0YxQkQ3MjU1QTc3RTA2Ci06MTA2NDgwMDBERTBGNEM0ODAzOUQ0MzQ4Q0Q0NkZERThBRkVENzc4RUM3Ci06MTA2NDkwMDBDQUY5RjA2RkRERUZGQzQxRTA1REFCRjYyQUM4OUZFQjc3Ci06MTA2NEEwMDBFNThFMUFBMTc4RTA3QzQwQzA2Nzk5RTMxOEJFRkQ3QkI5Ci06MTA2NEIwMDA5Njc0OEQwMzRGQkRGNjExRDYzQjgwNDdBMDQ3NTBBRjcxCi06MTA2NEMwMDA0NjFDQTJCRjkzRjZCRUY1RUY0RkZDQUI4MkZCRjdEQjk5Ci06MTA2NEQwMDA4RjFGNUY4QzcyRUVFNjFGNEFBMEIyN0EyNzlGODg0MDFBCi06MTA2NEUwMDAxN0VEM0I2OTA1RTVGMkVBREQxMkFEM0ZDODVEQjNBRURECi06MTA2NEYwMDBGNEU0REIzN0QxRkM2RjdFMkE0MkZCQzNFQTY3RkNFOTk4Ci06MTA2NTAwMDA1QUQ2N0VGNTc3NUY5QjBBOEM2RjRGMzZGNkJEMzAwRUZDCi06MTA2NTEwMDBGMUY3QjhDMEYzMThBQ0RFQTk1N0IyRjdBQjY1QjgyRUU3Ci06MTA2NTIwMDA1QjFFQzJGNTJBRTdBQkI3QkUxRjVBOEVGQkJCQjBBQkYyCi06MTA2NTMwMDBGQjVBRUFCN0YzNkE5RkRGMjU3Rjk3QUJEQzlFNjZGNUNGCi06MTA2NTQwMDA0Q0ZDNkU3RDQzNDg0RjEyMzg3Q0Q5RjJGMkRFRkEwNkRECi06MTA2NTUwMDBGN0EzQUNERUUzNEI2MzlFRTJFQTVEM0I5NDI0QUJCNzZBCi06MTA2NTYwMDA3RUQ3M0I0NERGMEI5RTdBMzI4QTc4NThCRkM3N0IxRUFBCi06MTA2NTcwMDBFMUU2QTdGRUQ0M0FCNzlDQ0UzQkY1RDVBMkZDOTM0RUZDCi06MTA2NTgwMDA1M0Y5OTRBOUY2RjEzQzc4RUU4RjU5NDcxQ0NCRUE3RDdDCi06MTA2NTkwMDBGQkNENEI3RkMzQkU5Rjg4NEIxMDYwMjJFNTQ0Q0Y3RjZECi06MTA2NUEwMDAyQTNGQzQ3MjMyOUM2MkEyOENGNUVGN0JENUNEODdFQjdCCi06MTA2NUIwMDA3N0JENDZFNzhFMzQ5MTI5QjAxN0UxNzk4ODhDRUYxOUMxCi06MTA2NUMwMDBGNTk5OUVBQkEwM0M1Q0RGQjlFOTFEOTQ5N0VCNzdCRkQyCi06MTA2NUQwMDBGRDZCQTRCQkY1MjBCRkVBRTZFNzEzRjg4RjMxNjdDNzcwCi06MTA2NUUwMDBCMzM2QTk1RTNGREQyOTM4Mzg4QjFDMDBCQkYyQjNEQTI1Ci06MTA2NUYwMDA4QjRFM0NDQkUxRUY5QjlGM0NGNTMwRUExMTZGM0RGM0I2Ci06MTA2NjAwMDA1RjBGRTNGRDBDNkJGRUZDM0YwRjYzNUUyQkZDMjhBMENECi06MTA2NjEwMDBBMURDNUFGRkY4MkZBMkUwQzJGRkEzQjY3QzM4Rjk4REE3Ci06MTA2NjIwMDA3RkZCRkEwMzBDMEYyNzdGRTUyN0FDOUQ3Q0VFQ0QwOTlECi06MTA2NjMwMDA3ODRGQzdDOUE3RkY3NzE0RUExRjFCOUY1QjM4MUFFOTc5Ci06MTA2NjQwMDA2Q0UzNzcxNjhDMUVFQTFDMjhEMjZEREFFRjVFREYzNDFECi06MTA2NjUwMDBCRkRGNjA4RjgwOUIyMEMwQjNGNjMzNjM1REUwNjA5RjM3Ci06MTA2NjYwMDA4MjdBRUY3QjAyRjQ2RENFNjVFRjNCRkZBNEEwRkVGMkQxCi06MTA2NjcwMDA4MjA5N0Q4OEE3N0RCQjVGN0JFMTBFNTY3RTlCQUQ5MzMzCi06MTA2NjgwMDAzRkNCM0FCMUY5OEYxMzY5N0Y2M0VDQzM5RUVCNzY1RjIyCi06MTA2NjkwMDA3OUM1QzVFNUY4RjQxOUQ4RkQ3QUU4QTM3REUzQUNGNTMyCi06MTA2NkEwMDAzRENBRDZCNzdDNjA3RDMzQkY5RjgyRDMwQUUyN0ZGREFGCi06MTA2NkIwMDAxMzZDM0RBN0UyQkFCMkY1OUM3QUY2N0FCRThERkY5OENDCi06MTA2NkMwMDA3M0Y2N0FFRTUzQkRGRUI4NTNCMEU2OTEwN0YwRTNFRUYxCi06MTA2NkQwMDBGQ0FDRjZBREIzOUU2QkJGRjNBOTIxRjU3MjQ3M0UwQzNGCi06MTA2NkUwMDA4NzY3M0FERkNCRTBGQThBNkFGRTVDNDVCRTdERTY5QkFGCi06MTA2NkYwMDA1RjdGMjBDNkQ3Qjk5NjIxRTZFNDkzQTcyNkUwNjE4RDk3Ci06MTA2NzAwMDBERkY5RkFBRTQ1M0NGNDNERTdENzUwOEY1QUZEREMyRjU4Ci06MTA2NzEwMDA4OUVGNEU3RUU3MjUzQUQ3QzNGRUEyMDJEQkVGNEU0MjU5Ci06MTA2NzIwMDBGRkRGMTE2MEU1NzUwMjJGQUNENUZCMkVGRDM1RUI3NzUxCi06MTA2NzMwMDAyREVCQzIzMjY4RkQyRUZENzUzOUFFOUZEQTQ3RUI5MTI1Ci06MTA2NzQwMDA1RTUyQTNBM0ZDNEQxN0QwQkNEN0E1Mzk3RkFDNEI3N0M1Ci06MTA2NzUwMDAyRjQzN0Y3NjI2REUyMzAxMjc5RjcwNjA1REQxNUZCQUNECi06MTA2NzYwMDA2RUY3RjE0QjkxRkUwNjVCNEY2N0ZFMUFDRTdGMzZGQjRDCi06MTA2NzcwMDBGRUE4OTc3RjA3RTU1NzdCN0Q0RkVFNzg1RjQxRkRBQTI2Ci06MTA2NzgwMDBFQjg3OEEyNjMyM0JGRkE0QUY0RjE5OEJGQkNERDM5MjA4Ci06MTA2NzkwMDA4NkU3OEQzM0Q3N0QwMEZGOEQ1OUNGMUQ2NzNFMzNFOUU2Ci06MTA2N0EwMDBDMzFGQzgxRUJGNzZGMDM0MUNCRjBGM0ZCRjhGODZCRjBDCi06MTA2N0IwMDA1M0Y2M0U5Qzg5QzdCNzRFNjdERjBGQ0UwOTcwN0I2RURDCi06MTA2N0MwMDAxRDc0RDRBMDhBOTlCOTlGRjkyMDY1OEQyQjFBODBCN0MyCi06MTA2N0QwMDBCNTUzMjIzOUZGRDYyRUVFQTdDOTk0MTdFQjA2QjFDRkQ5Ci06MTA2N0UwMDBBNjM5RTNFQ0U5OUU4QTcyRURBREJEREZCN0U5OTJEMzNECi06MTA2N0YwMDBGREJBMjc4RTJCOTZCRDNGQTQ1REY4NUQzRjg4QkZGQjk5Ci06MTA2ODAwMDAyMkJCQkZGNUNGNjZFRjZGRkQxM0VGNjRFREVGODQ2QzM1Ci06MTA2ODEwMDA1RThERjA5RkU4RjE1MTVFRDI4OTRFMjlBQjlEM0IyOUY4Ci06MTA2ODIwMDBFMEYzRTg1REFEOTE1OUFGRTRCMDc2NTIzNDQ4Nzk1NzYyCi06MTA2ODMwMDA0RDhERTYyRkQxNEY2QTFERjFEOTdFMDBFMzc3OTg2RjE5Ci06MTA2ODQwMDBENTE0MDlEMjM5RjdBNkU4OEQ3NDVGOTJEMzVGNzMwNjI5Ci06MTA2ODUwMDA5RUU0Nzg4MkVDMjczOTk2MjhFNzMxQjBCNEM3OEVGMUYwCi06MTA2ODYwMDAzMTgyNzBDMzBEQjI1NTg4N0FGRkExQTIzNzY1RUNGNzZCCi06MTA2ODcwMDAzMEVBOTEyRUJCRkVCMDBDMkRGOUU1NzgyRTQyMzAxQThECi06MTA2ODgwMDAyMDhCN0YyM0EzRkZDNDNDMDk3NEI3OUZCMDZCOENGOEE3Ci06MTA2ODkwMDAwN0Q2REU3RjU0NEEyMzZBRUIyMEQ1NDVFNzAyMEFBMURBCi06MTA2OEEwMDBGM0IxMkNGRDNENTRBRjkzRkQ1Qzk0Qjg4RUZDM0ZGRURDCi06MTA2OEIwMDA1NENBNDQ3REFENzBBMzU2MkNFQTgzOEYzQjNFRTU4REQwCi06MTA2OEMwMDA1RjhGNjU5NEZGMDcxQ0U3ODA4RkY0NDFEOEY1RjhFM0VDCi06MTA2OEQwMDA4RjhGRTI1QjBBRUFFNTJGRTA5M0M5QkY0QjU2RTk4NTRCCi06MTA2OEUwMDA1ODdFQzg5RTM3RTMwMTNBQzczOERFNEFDODI4RTc4NDk1Ci06MTA2OEYwMDBEODEyMTlGNThCODVBOTg0QkNEMkI1OUUwQjYzQzI1OEZBCi06MTA2OTAwMDBEQzRGRDM4M0RDMDNGNUJEMDBERjNGMUIxQUFFQTIzQzk2Ci06MTA2OTEwMDBGNjA3QkYyNDEyNUQzRjE4QjhBQzEwRjk2QzdGRUVFQzlGCi06MTA2OTIwMDAzMEZBRDdCQUQ3Q0UzQTM4OTlDMTM5MkUyQzAxOUE5QzcxCi06MTA2OTMwMDBGQkMyNDM5RkRCN0NEOEY2MkZFQ0I0RUYxRjdBRDRDRTlBCi06MTA2OTQwMDAyRkZGQkE4REI3NURGNUE1RjQ3Q0JDREVBMEVGNEZENDY4Ci06MTA2OTUwMDA1NzUwQjlCM0JFODY5RUNGRDQyN0U4N0RGNDhFNjAxMjFGCi06MTA2OTYwMDBFOTczNzdGRDcyN0EzRjBFREUxMTcwRkRCRjVCOUZBNDY1Ci06MTA2OTcwMDBGMkEzODE1QzgyN0ZFMjlEMjAyNkQ5RkI4NTg4OEZGMDdGCi06MTA2OTgwMDBDMEJDMUQ3OEQyQjZEREZEQkRDMDhGOUI5MTJGRkFGMTQyCi06MTA2OTkwMDA5ODgxRUY0QkEwNDc1MEQxN0YxNTEzNzQ1Q0Y3QkE4MEY0Ci06MTA2OUEwMDBDRUYzNUMzM0YwM0JDMURGMjc2MDVDQUVFRTRFOUUwRjUyCi06MTA2OUIwMDBGMUIwRTAzREVGNzBCRjJERkZCRjZERjNFOTNCRDFFNEQ3Ci06MTA2OUMwMDA5MzAxRDZDRkJCMzVDQjRBNDkxRjAyQUQwQ0U5RTY2MTM2Ci06MTA2OUQwMDAyMTcxRDgyODIyM0M3QkNFOURBQ0NFNEI3RTNCRTBGMjkxCi06MTA2OUUwMDAwRjRGNjhFNzc2RkRGNjgwMkRERjM2ODI4OEY0MzYzRTVECi06MTA2OUYwMDAwNTNBRDI5QjMzRUZCRDk1N0EyMUNBQzVCRDgyNDBFQkUzCi06MTA2QTAwMDA4REY0NTZFQUEyQjc3RUZBMEREODc5QzlGMUVDRkJGOEZECi06MTA2QTEwMDAwMEZENzJGRThGQ0YyREJEQTcxQUYxQjI0MTI0M0Y0ODcxCi06MTA2QTIwMDAxMzdFNzJCNUZCRDBBNjIzNjZCNzg4MTZEMkYzMkE5MURGCi06MTA2QTMwMDBGQ0I5MTM4RjFEMTcyNjMwRjg3NEVEOUIwMUJDQjcyQkUyCi06MTA2QTQwMDAzRTAxNkM3RjUzNjcwMEU5RUJDMTU1RENCRkY4QjU2M0NECi06MTA2QTUwMDBGQzFDRDNBOThEQzU0QjI2QjNGQThCMTk3RTMwMTg5NTMzCi06MTA2QTYwMDBCN0E4QzRFM0I3NzRDRTJGN0M0RDRERTQ2ODQzRjhCN0E0Ci06MTA2QTcwMDAzMkYzREVFRTlGNzhENzA3Mzk2QzlDNzFDNzQyM0E5RTlECi06MTA2QTgwMDA4N0I5NjdFMjhGQkExNTU2MUVEQjJCOTAzRjY5NkMzOEM5Ci06MTA2QTkwMDAzNTE5RDdCM0YyRkY3RjYzNENBRjZCMUQxRTU4OUI5QTFECi06MTA2QUEwMDA4ODdBNjNFQkM0NkYwOUM4MDc2MzRGRkY1OEMwN0Q2NEUxCi06MTA2QUIwMDBBMjk2N0MzM0MwRDY2MTlDNkM5RjEzOTY1M0IzRDEyRUEzCi06MTA2QUMwMDBCODI2MkZGMTdCNUNCNzQ0NjFGQUQzNDg0RkE3NkEzNkVBCi06MTA2QUQwMDBGRTNCRjZFRkM0MjFFQkVBRjREQ0M5MkVGOTkwNzk5RTc3Ci06MTA2QUUwMDBFMkExRDREMEZFNEM2N0ZFMEZFMUZDODdBOEU3Q0NERjIzCi06MTA2QUYwMDA1OUJGNTMzNUIxMzUyODE3MzNGMTk5RDk2RkRFQTI2NUU3Ci06MTA2QjAwMDA0MzhFRkY5MDdEOEYxODlCQkYzRkU4QTJDRkMyNTRBRjRBCi06MTA2QjEwMDA4Q0VEOUNGNjgzQzU1RDMzRTdEQkVGMjcxQTYxOUNCNkVECi06MTA2QjIwMDBEMzA3Rjk0ODE3NEZGRjcxQzJCNzBGMDM5MjRFNDI0Mjg1Ci06MTA2QjMwMDBGRkQ0REU0MDcyNEM3MDI2REUxRjk3QTIzMjkzOEU5NEYzCi06MTA2QjQwMDBDRjdFNDEyRUU3REYwNzQ2N0Q3RDBDRjE5RDlDMkVBMjc2Ci06MTA2QjUwMDBCQzhGMTE4RUQ3MDI4OTQ0MjVFRTczODY2ODY0REIwN0VCCi06MTA2QjYwMDBBNjA0MzlERENGODMxNEY5NDdDNUQwOUQ0M0M3RjkwQjdGCi06MTA2QjcwMDBCRDcxRkVBRDQwOTMwMEFCNEJCNUUzMUYyMDZCRTgwRjNBCi06MTA2QjgwMDAzQjAwRDNEMTBGOTkxRkU0RkM1RTI5NzNGQjcyQzYwMTUxCi06MTA2QjkwMDA3RDg3QzRGRDU2RDI5Mjg4MEI3RkI2REZDRUM3QkI2NjE5Ci06MTA2QkEwMDA3MERGMDk5QThFRTdCRUE2NzUwQjJFN0U3RDNGOTQ5QzAyCi06MTA2QkIwMDA4RkVCQTZDNEI5M0ZEMjE3NEJEMjc5Q0I4NTUyNTgyNDVDCi06MTA2QkMwMDA3RjZFMDc5N0ZGNzU5MDUwQ0ZFMzcxMTlDMDc5RUIxMDc2Ci06MTA2QkQwMDAxNzcxQkY3RjY4MjMzRkRGQUU2QjIxODJGQkExOTg0RTA4Ci06MTA2QkUwMDBFNTNBNUI0RkY5QjE0RDQ3REZCN0U1RkVGNzZDN0FGOTRGCi06MTA2QkYwMDAwRUNBN0RGNjJDRTkzNUY3RTczMEI4QkU2RENCRkZBNzlFCi06MTA2QzAwMDA2REY5RkY5NDJERkY2NzFFRUQ4NTZGOTQ5MzNDMzYzMDMwCi06MTA2QzEwMDBFRkY5Q0JEQkUyOEQzOENEMjdFQjREQUFCN0IzN0UxNTZDCi06MTA2QzIwMDAzREY3RTU4RTE2RjdCMDdBOEY2RTE0NzcyMjNGM0ZBQUI0Ci06MTA2QzMwMDA4REJFMUNFRkJCNEE5QkEyMjFCMEM2MEY1OURCMTY0NDg4Ci06MTA2QzQwMDAxOUZDM0I1NDgxRTI2NzBGRDdBN0E4REQwRTU1NkY1NDlFCi06MTA2QzUwMDAzMTlFQzJBQzY1MEJDOUEwQUU4N0MyMUU5NUJGRUJEM0Y3Ci06MTA2QzYwMDA2QTU4QkRBRjc1RTQ1RDhFNzFCODdCNkI2NDZBRTdGMEZFCi06MTA2QzcwMDA5MTNFNzMwMzM2ODc2ODlFM0Y4ODZDOTU1N0QwQTU5RURBCi06MTA2QzgwMDA4Mzc2RkE0NjkxRkFGOTRBRTAzM0VBMDJGNjFDM0ZGRUFGCi06MTA2QzkwMDA4ODdBOTk4RThCNzFEQzRDQjFFRjBCMTg5MjcxMUUxNUFFCi06MTA2Q0EwMDBCREJEMTY5NjRCNUUwRjUzQkVGNkFDNTc3QUUxNjk1NkUyCi06MTA2Q0IwMDAyRTVBMTVBMUYyNzhDQkNCMTc1Mzc2Rjc1QTFEMEM4RUFFCi06MTA2Q0MwMDBGMTZGRjFFRkQ1NzlCRkI3M0E1OUZEOUMwRDUxRUFBRjlECi06MTA2Q0QwMDBFQUY1NUUwMUU5RDk1N0VFM0Q3RkI1RERGN0FCN0QxMUYxCi06MTA2Q0UwMDAzNjdFRUM2MDQyNDBCQ0VEMTVCNDA1OTgxMjYyN0Q5QTg4Ci06MTA2Q0YwMDA5RkJGMTk3RDAwQUFGMDdEM0NCQTg4RDY2MTVCQjA4ODQxCi06MTA2RDAwMDBFOEU3NkJDRDQ3RTIzNzIxOUUzNkM2OUFEMUNDRDlCNzlBCi06MTA2RDEwMDA3MTAzOUQ0RkYwNkZEQ0M4RjVBMDE0Rjc3RjhGQkY2RDM2Ci06MTA2RDIwMDBCRkYwNzk5NzdDMjg2Qzk2QjNGQUVEQjYwNUZEM0M0RTIyCi06MTA2RDMwMDBCMjcxNTk2MjMyMDc2RjdGMThGNUJEMTJFRUFGMkM2QTNGCi06MTA2RDQwMDBBOUY2RTQzNTM5RjE5MTBGODVFNEI2MjBEOTREM0M0RUQyCi06MTA2RDUwMDAyMjZCMjk3QTdGQjE4NEJBMjI3QjdEQkJDOEY1QTQ0NDFCCi06MTA2RDYwMDA0RkMwRUQ4N0QxNkZFM0Y3QjM2NUMyQjEzMzI4MTMxQzcxCi06MTA2RDcwMDBDRDU2RjUyQTk0MTc3N0NGNTRFNDAwQzIzMUQ5QkU5RjdGCi06MTA2RDgwMDBDNThFNDNGNkVGNjM0MjcyNjdEMEUzQjdFNzcwOEQ2NzU1Ci06MTA2RDkwMDBBODBDMjFEQzVEM0Q5RkVFNjRGRDdDOTA3MkY2MzEzM0UyCi06MTA2REEwMDA0ODdBRDIzRDIyRjFDN0Q2NzI3RTBFNzA5RkYxNkUxN0RGCi06MTA2REIwMDBERTczRTFGMDUzOEIyMTEyRkY2RTkzODVCNEMwRkFEOUQ0Ci06MTA2REMwMDA1NjVFOUM3QjFFRDI0RjBDNzc2RjlBQUY4QTc4MkU5MUJECi06MTA2REQwMDA3RDNDODcwM0NDQkRFODE3RjdBMzVGOUNBRDc3QzlCMUI1Ci06MTA2REUwMDBEMDcxOTFGQzdGREVGQ0VGMjJDQkJCRkU2MjlERjdEQzE1Ci06MTA2REYwMDBERDc4QTZGNEI4RjM5NTgxMTE0RDNGOUREMUZFNUFCREMzCi06MTA2RTAwMDBGNzNGOTAxRjk2ODc4OENFQzAzMkEzOTVBMzMwN0REMURGCi06MTA2RTEwMDBGRTkzNkFFOUZDNzM0OUM2Mzk4MzA3NkNGQkZENjFGQjhECi06MTA2RTIwMDAxQzIxOUNCRTA1NTA2RTNENjA5RkJGN0U2MDhEMThENEI2Ci06MTA2RTMwMDAxOTVFOUVCNzhFRDBCRTM5QkVBRUFCOTIwMjMzOUFERkRBCi06MTA2RTQwMDA5MzVGRURCRjUzNkJDNEZEQjUyOEU1Q0QxM0FBQ0NDODQ1Ci06MTA2RTUwMDAwQjJBRjkyQkYzQUM4RjA1QkQ3NkVBREUxMzQxMDNFRjY1Ci06MTA2RTYwMDBDMzRCMUY5NTBDRDQ2N0JGN0NDNzBDOTI3RkQ2NkFBRTBDCi06MTA2RTcwMDBCN0E0NTdFNTNEODBFNzVERjIwNTMwRjBCREQzQUY2M0MxCi06MTA2RTgwMDBCRkJFMUJDQzIzQkU0OUNGNjFERjczOTg1Qzg5NzQyRUQzCi06MTA2RTkwMDA1QTg1RUIwNTM5NUE2MzBDQ0Y0M0RGMEVERkMyRkU1NzJDCi06MTA2RUEwMDBGMUY1QUYyQzA0QkE1RkE3MzAwNjc0Q0U5OTNEMzc5RjM5Ci06MTA2RUIwMDA4QkZDQkY1MUM0OTgzODlDNDEzOThGNzI1Q0VENzkxMUJECi06MTA2RUMwMDBERkU3NUUyRUQyRkQzOTQ1Q0RENjc5MzhDRkJENzNDNzA5Ci06MTA2RUQwMDA4RTQ1RkFEODFBRTZFNzVFOUE4NDE0NjgwODZGMDFFN0NGCi06MTA2RUUwMDA4NzFEOTEyRUNBMDdCREJCNDY4NDQ2QTQyODg2NEIwMzQ2Ci06MTA2RUYwMDBGQjU5MTlEQzQ5NzkyQzA4RUY0Q0EyM0JEMkJCMzA0NjM4Ci06MTA2RjAwMDA4MUZDNjg1RDFGRTRGQkNFNjlFQjNDRjQyQjQ3NDNCRDdECi06MTA2RjEwMDA5REZCNTgzRkUxMzZDNUQ4QzlGQUQ5NTFFOUJEQTc2RUU2Ci06MTA2RjIwMDA1Mjg4RUY3NzgxOTBFMEM0RjcwMzIxRjYzNEI3MDJFNTg5Ci06MTA2RjMwMDAyREIyQjkxMDdGMzNCRUIyODBGNjA1OERFQzJBMjdCRTg0Ci06MTA2RjQwMDAxRkREQkI0ODJDOUFDMjlGQzUyRUZFREQ2OUNCRDlCNDhDCi06MTA2RjUwMDA5REI3RjBCMEJEN0YzOEZBQzYwM0I2RERCMEQ1REUzN0Q5Ci06MTA2RjYwMDA4QUNDMkIxQTE1QTREQjU1MzAwREYxNTRCMkE2NTM1ODE4Ci06MTA2RjcwMDA5OUNEQkU2RkY3Q0FENTRDN0U5OTk4QzkyRjI5RUYzOUE0Ci06MTA2RjgwMDBENTcxQUI4QTNEREYyM0M2Rjk5RUVGMTQ4QUMxNzU2N0MwCi06MTA2RjkwMDBGQjM3RTJCOTJENTAyNkExREUzNzAzMTJBNjVCQUUwQ0ZCCi06MTA2RkEwMDBCNkZGRTcwN0NEQTlBMThGQTBGRjQ0NDM4OTE0RUE5RjRDCi06MTA2RkIwMDA5OUZBRjc0NUY2QkE1QzFCNDhDQ0MxRjU4OENFNUQ0RTEwCi06MTA2RkMwMDA3OTNDNkIwMzg5OEJBODdGMzkyREEwM0M5RDg3RUQ2MkFFCi06MTA2RkQwMDA1OUUxQTVFNEFGMTFDMDVCRkQ1MUUwMDVEOUEwRjM1QzE4Ci06MTA2RkUwMDBCNzRCQ0U3REI2REVGMzVDOTA3MTdGNkRFNkZEQjRGM0ZBCi06MTA2RkYwMDBGRjc4MjdERDRGREIyMjMwNDUwRkNCMzlGNkZEQjQ3RTFECi06MTA3MDAwMDA3RTNGNkQ0Qjg0REI1RDJENzYxRUQ1M0ExQjBGRDc4NUY5Ci06MTA3MDEwMDBGODdEQUY2QjZDM0E5RDFGQ0E3RUZGOTFFM0Y3NEFBMUUyCi06MTA3MDIwMDA2Q0MwN0FBM0IzREYzQjg2MUExNUY2Mzc3RjVDRjZFRkE4Ci06MTA3MDMwMDBBOTEwOEYzQkNFOUYzOEY0MzgxQjcwMUNENkNGQUNBMDY0Ci06MTA3MDQwMDBCOTM2RTRGMkFGQ0MwODk5RUJEREU1NUI0Mzc2N0U5MThGCi06MTA3MDUwMDA5QzIwQkREMjk0Rjk3RTU4MTQzNDM3ODY2NkJBRjA2QjAyCi06MTA3MDYwMDAzRkYzMTY5NUQzNzlCRTUzRjY3OTNFRDY2RUJCNDA3ODgyCi06MTA3MDcwMDA5NUI0OTFFMERERDFGRjVCMDRGRDFFOTI4M0JGNjA3QTgxCi06MTA3MDgwMDA1Rjk2RjU3ODNGMThCNUM0OUM4MTc4OTRBMzFGRUQwQUVDCi06MTA3MDkwMDA3MTdCOTJEMURCMjYzRThGMzRFNTQxODc0MUJGMDdFRkZDCi06MTA3MEEwMDA4MTE4ODdGNzcwRUJFODU3MzhGNkYwQkZBMkJDQkRCODdGCi06MTA3MEIwMDBBNzA2RjVBN0I1M0Y5MEU4N0VCQkIzRjBCNTg2RDE5RDk2Ci06MTA3MEMwMDAyQjFGQzU3OTNGRjY4MzcxNjQwNzRGOTQ5MkY3ODc1QzU1Ci06MTA3MEQwMDBGNkM3RDg1NTdEMEFEMjNCQzI1RkNERTFFN0Y5RDM0MjZFCi06MTA3MEUwMDBGQTNDNkUwRjAwQzU3MTVBNkU4QTdCRjIwOTMzRUQ5MTNFCi06MTA3MEYwMDAzQ0JDRTc4MEU0OEE0MjdBNUQyNjVDOEUzREUxOTQzM0I1Ci06MTA3MTAwMDBDRjIzMUNCMkU5MDhGRkY0NTE3ODRGMzg3MDY1NTYzNjJBCi06MTA3MTEwMDAyNUU0QUY5OTkwQTRFNzZDRDBFOUM5RUM5NjRFOUMwN0EyCi06MTA3MTIwMDBFMzNGMURFMTZDMEM0REI4MDhFN0YxNzdDNERCOEY0MkZCCi06MTA3MTMwMDAzM0ZGRjFGMEU2RDA3MTUxRjI5MjdFM0FDRTc2RkZGNTUwCi06MTA3MTQwMDBGREExMjhDOURCQkE2MzExRDJGQkEzN0JCRjQ4NzQyRDE0Ci06MTA3MTUwMDAzMUJBMEVDNDA2RjI2NUVBQzBDRUEzMEY0MzI3RUFCRERBCi06MTA3MTYwMDA0NUM5N0EzQTE3N0E4QUQxMzFGNjJCNjlGQzFDQUIwQ0U3Ci06MTA3MTcwMDA1QTAyRTMzNjUyOENGMzg3NEYyRUQ1NDQwREUzQjI5Njc0Ci06MTA3MTgwMDAxRkYzMEVBQzYyMzA1MEQ2QTIzRkQyMEQ2Rjc5MzhGOUEyCi06MTA3MTkwMDBBNjFCOEZCNzFGQkI4N0U0RURCNTgxRTQwOTVDQ0ZEQjhECi06MTA3MUEwMDA0QjJDM0Y2QTc2MkUzOUZDOTY1QjBFMEIxMEQ2OTFGRjY2Ci06MTA3MUIwMDBFNjlGRTZGQjY1NjU1Mjk3OTExRTE2MzA0RTQ3QkMyRjQxCi06MTA3MUMwMDA4NDI0OTUyRjAzOEI5RThCMjA0RENGNEZFMDk1NDZBNEIyCi06MTA3MUQwMDBDN0Q5RTcxNkJBQUUxNkRERTcxNkZBRjNCOUNCOUQ3QzMwCi06MTA3MUUwMDAwRTFFQTcyQUIwRTkxMDZDM0JGNUY5RTU0QjFCMTZCMjUxCi06MTA3MUYwMDBGMUQ5RTI5QjE4OEZGQUVBNzI5RUNGRTM5RjJERDNGOTYzCi06MTA3MjAwMDBENTgyREVFQjZCMzE0RTA0Q0JCODVFRTZFNDQxRTRENUNCCi06MTA3MjEwMDA3QUY1QjRCM0VFQjczQUY2RkI2M0Q4MkVGMzlDOUNBMzkxCi06MTA3MjIwMDBBRjY1RUU1QkNFMzM1MzVGQ0IwQjY3M0YzRjM5RDhCRUM0Ci06MTA3MjMwMDA5MzE5NTdBOEMzN0Y3MkZCRDVCNkFCMTMzOUVFN0JFMzI2Ci06MTA3MjQwMDAzMzlGODdFQUZCOUFGN0JCRjJDQzBGRTNGRDQ2NTlGNzcxCi06MTA3MjUwMDAwMTFFRUY4REVFRkQ3REVEQjI3MkJBNUZDRUMwOTRDOTE2Ci06MTA3MjYwMDA5RUZBQUVGOUFGNEYxQUIwODMxM0YzNzI5RjQ3N0Y3NDQzCi06MTA3MjcwMDBBMjNBNzdCQUM0RjBCRTM4RkU1RUYzRkU3QzgwMjU2NjgzCi06MTA3MjgwMDBGN0ZDRDc1REYzRUNEMTE4QjQ1OUY0ODRGRUYxNENERjcwCi06MTA3MjkwMDA4N0VFRkRGNzZEODVDQjk3MTY3QkJDODgxRDFGNkIxM0EyCi06MTA3MkEwMDAyRDNGRjFBQkVEN0ZGQjQzMjFCN0QzMURGQjNFREI3Q0Q0Ci06MTA3MkIwMDA5QjA5NUZCRDYxQTQ4N0MxRTZGQkQ5MzBERjRGNDcyRDM1Ci06MTA3MkMwMDAzN0U4QkVGQzI2RkJCRUZDQTZGMTRFRkU5NkExQTEzRTExCi06MTA3MkQwMDA3OTYzMzg5N0RGNTcxMDJFQTFGODZBNTNGNzFDRjIyNzBECi06MTA3MkUwMDAxNzFDRjQ5MTNGN0RENEIyQTQ2MEI5RjZDNTdCRUJCOTBECi06MTA3MkYwMDBGRkY1MkI0Q0JGQzM3QzkwMkQ0Q0FGQzNGMkRFQ0E1OUI3Ci06MTA3MzAwMDAyQURBMEJCNzQ2QTY1M0JDNzY3M0JERTFDOTE3NzE5RTQ2Ci06MTA3MzEwMDA3ODFGNUREMkU1REY2QjRBNTQ2OTE4RUY2REFFOURBRTA0Ci06MTA3MzIwMDBBMkREMjE3REIyOUNDQUYyNzlEMzNCQUExODNGN0Y2NkM5Ci06MTA3MzMwMDBFQkQ0NEIwQjMwMkU1MUM2RUYyM0JCOEU5NTFCNEE5OEQ2Ci06MTA3MzQwMDAxRDFERTZGQkVDMjFFM0Y1MzBFMkE5MkFBQzNCRjQ0MzNBCi06MTA3MzUwMDBFQkU4NUI5NjM0N0QyODE3RTI1QTE1RTZDQTM4RUZDMTkwCi06MTA3MzYwMDBBNjJGRjY5RUY0RUJCNzk1RTQ0RDYxMzZGRjQzRjZCRENDCi06MTA3MzcwMDA1ODZENEFBQTc0NDMxOTlFOEI2NzAyMDdGREM0MkFGNzA5Ci06MTA3MzgwMDAxMzIyMUQzNENGMTg4MDdCODM4RERGQjlGNkI4NEMyMEQzCi06MTA3MzkwMDA4OTRGQkJENjRGODlGM0Y1NkIxMzYxNTVCNkY1QjkzM0Y5Ci06MTA3M0EwMDBDQ0Y1OUI2NkNERDQ4NkE0MjM0REZFRDA3MzdGNjg3OTNGCi06MTA3M0IwMDA4Q0U3RTdDNzE4MURCOUY4Rjk2QzdBRTdGQzU0MUU0RTQ0Ci06MTA3M0MwMDAzNDg3MEI1MDJFNDI2OThBRTYxRjI2Rjk0M0VEQTQ4MUNCCi06MTA3M0QwMDA3QjJDRTM2MUIzMURFQkZEMkNEN0NFODcyRUU0NzlEMDU3Ci06MTA3M0UwMDBFQzdENkIwRTk2RTUxNEM5Nzc0NzFGNkM5M0I5M0UzNzU5Ci06MTA3M0YwMDA1MjdEMzA2RkQxNDZEMjA3REY2NUFDNDVGNkQ5MjczN0NECi06MTA3NDAwMDA5MkRDREVFODUzRTlGRUJGQkRGMzY0OEE2NzQ1Q0Y4MUI1Ci06MTA3NDEwMDBFQkRDNzY4QjE0QjFFRkZGOEY3MEJGM0NGRTRFNDI3QUVGCi06MTA3NDIwMDAzMkQ3N0JGMDlDNDczNDA0NzRDRUE1NkYzQ0NGMkY2REQwCi06MTA3NDMwMDA4MzFEMzVFNzEwN0M5MzM0Rjc3RTU2Mzk5RUZCMTlFRTk5Ci06MTA3NDQwMDBBRTBBQUU3MkZCMUJFNkU0RjI3QzkxRkRCOTk1QkY0NzM0Ci06MTA3NDUwMDAzQTI4MEJBN0FCOTAzNTJGRDBBMDE3RjM2OUEwOEE5RkNECi06MTA3NDYwMDAxRjEzMEFGOTM5MUIxRjE4MkFFN0Q3NkEwREVGMEQxNUVDCi06MTA3NDcwMDAyMDQ5RTdDRjA2NUQzRkYwREUyRkZBQjg5QzZFMEMyMjY0Ci06MTA3NDgwMDBERTYyRENBRjEzRDkyRTUwRDI5RUQ0Njk3NkUxRDk5RDRECi06MTA3NDkwMDBDNkRDQTUzRjA4MTNCRTEzMDZGMjc3RjdBQzIwRDk3QkY0Ci06MTA3NEEwMDBFRjc1MkI2NDdGQkU3NzEzRkMwNkZENDlFRkY5NzJDMEMwCi06MTA3NEIwMDA2MjRCRjUyMzUxRkNDRDUzNkNCRTdEOEM1OTc3NjJGRTM3Ci06MTA3NEMwMDA5N0M2QkY0RkRCMkE5MEJGRTk0NzFGMDZDNzIxQkQxQkU4Ci06MTA3NEQwMDA1MTEwRjFGNzJDMTYzMzdEODIyNzA5NDIwOEUzQjNEMTBFCi06MTA3NEUwMDAwNUQwNzUwOUI2RUYwRTEzRkU3Q0YxOUZDRTdGN0QwNkE5Ci06MTA3NEYwMDBFRDNGMjFCMTAyQ0Y2Qjg5MEZFMkZDOUY4OTQzMUVCNjlECi06MTA3NTAwMDA5RkYxQkY1NTEyRkFBRjFDN0RFODFFMkQ3OTA0RTE5RDU1Ci06MTA3NTEwMDAwREQ2QUE2RUQ2RkU2RTg1RjNEN0RENzk0QTFBRTM5NEFFCi06MTA3NTIwMDBEMzBCNDREMjQzQzAxNzRBNEY2MkRGMTcxRjc4QkQxQUVFCi06MTA3NTMwMDBGMzNCMTc1NzRDQzM5QTM4M0VBREY3NDQyRDc5MENFOTBECi06MTA3NTQwMDBBRjVBNUI1MjlEQ0JFQTk3MUZENTQ5RkU1RTFBQkY2NUM1Ci06MTA3NTUwMDAzRjk2NjcxREUzNjU5RjlGRUJGMUE4QzdCOENGMDcyQzQ3Ci06MTA3NTYwMDBGRTYwMDJDREVCQ0QzMEQ3Njc5QkUzNjY4RjI5MENDOTU3Ci06MTA3NTcwMDA1NzE5RjdGMjdBQ0YxNzM4NzRDMEI2NzUxREYzRDJFOUYwCi06MTA3NTgwMDBERjNBRDE0NUQyMjcwRUY4OUZBMEMyQjBDRjlGMzhGNDgyCi06MTA3NTkwMDA2MDBBMUY4NTFFNzY4N0Y5QkVEMDg2Rjk2NkIxODE3Q0E4Ci06MTA3NUEwMDBCMzM2NUI3RjFCNjlCRTU5MjYzRkU1MkQ5MjY5MURERTEwCi06MTA3NUIwMDA2NUZBMTZERUU3NzEzNjlGREM0MkY3N0Y2NkYyOTMwM0M5Ci06MTA3NUMwMDBFN0U2RjJCQzE4Q0E2MTg3NkZCNEQ5Nzc5MjVDRjY1RkMwCi06MTA3NUQwMDBBRkQwN0RBNjBFMUYzOUZDMzMyQkE3OUY4RkJFODJGMjQyCi06MTA3NUUwMDA2MjU5NTg1RkM4NTMzNDRDNzBGM0M5OTVDM0YwRDU2MkUzCi06MTA3NUYwMDBFOERCMUY2M0U1QzUzMjU4Mzk0QzA0MUQ5QUYzQkI5MjkyCi06MTA3NjAwMDAwOTJFM0VDOUM0RTdFMjc5MDJCQ0VBOTE4M0JDRUNDMjEwCi06MTA3NjEwMDBCN0Q2N0YwRjcwMTYzQjc5QjA3NTM5MjJGMzczMEYwRTEyCi06MTA3NjIwMDA5RkUyRUZCMUUwRjlCMTc2RDEwMERDOEYxQTczNTcxQUZGCi06MTA3NjMwMDAxMTM2NEZCOTM2NzcwREYyQzMxNjIxOTE0MjdFODhDQ0IwCi06MTA3NjQwMDA3RTJCNzQyM0MzRkI3QkEzOTgxNjg5RkU0MzdERTU1M0YxCi06MTA3NjUwMDBDNEVGQUY4NEM4MkVCQjdCRDY2QThBNEJCRDc3NTM3MjBBCi06MTA3NjYwMDAyMkVFMkY5QjE4REU1RkE1RkQzQzNENUFBNDVDREJERUJECi06MTA3NjcwMDBEMTNDNkY0MjhGRjM2NzMyQ0VERjgzRkQzRDZEOTc0RDc2Ci06MTA3NjgwMDBCQjVFMkZENTYzRUJFQjkxOUIwN0EyOUMwRjBFNDRGOUQ5Ci06MTA3NjkwMDAzRUI1NDlFOTUwOTExRUZBOEE1NENEOURBRjdDODk3RDUzCi06MTA3NkEwMDBCRkYwQ0QxMTNCQUU3OEJBNDlDN0Y4QzRDRDExREVFRUJDCi06MTA3NkIwMDBERUZBNEVEMjU3MzZENUVGQTE2NzdFNkQxQTMwM0YyRUQ3Ci06MTA3NkMwMDA1ODZBRTlBODU3QTg3RjVFMjBFMDNFMEJFN0YzNzgzQkI1Ci06MTA3NkQwMDBCRTZGNzBFOTZCOUZCMkU1QjY4QUY3MDBCMTc5QUI4REVBCi06MTA3NkUwMDA5NkVFQkU3NzU2MTU4NUFDRjcwM0ZEMjRDQUZEQkY2QTNBCi06MTA3NkYwMDAyM0QwNzc3NUVGRkZBM0JDODRGQzEyNDNGODFDOTYxQkM0Ci06MTA3NzAwMDAzQkU4Nzc2MzAyNURGQzdEQUNDNDE0NkU3MEY1MUJBQjg3Ci06MTA3NzEwMDBFREY0RUM4RkFBRDgyQjkzM0Q1NDA3OUE4NUM2OUREQ0Q3Ci06MTA3NzIwMDA1QjhEN0VCN0Y2QTVDMTBFQ0M1N0NFQTQyM0ZDN0JENUNFCi06MTA3NzMwMDA0NTBGRUE5RkFGMjRCRDA4OEU3MEJEQjRCQTU4MjVGQTM0Ci06MTA3NzQwMDA2REE5NTM3NkEwNUZFRjBGQjEyQUNBNTM2RkIyRjE5NkJECi06MTA3NzUwMDAzOTFGOENBQjMzNEQ4RkZDNjQ5NjlGQzdEN0FEQzkzQ0E2Ci06MTA3NzYwMDBCRThFNjU4Q0FGRTMxM0UzRUJGOEM0RjgzQTdFQzdGODNFCi06MTA3NzcwMDAzQTk2QkY1NTZGNTIxOUUzRUM1OEM2MzgzQjk2MzFCRTY2Ci06MTA3NzgwMDA4RTY1OENBQkUzNzM0RkZEMkE3QUZFQTAzRTQ1REY5RkVBCi06MTA3NzkwMDBBREFGQTNGMjI1QjZEQzg0NTJGRTNCNUZFRDVGNTQ0Q0U3Ci06MTA3N0EwMDBDQzhCRkFBMUJEM0VGQkNDQTVBQjdFOEU3RTQwODgxQTY5Ci06MTA3N0IwMDBCODVGMDcwRTM2QkVGMjEzQkI0Q0Y3NUZDNzhCRjNEMTMxCi06MTA3N0MwMDAyRjA5MzExMTMwOUVEMDFBREZDNjc0Q0M4MUY5MDVFNDNGCi06MTA3N0QwMDA3QjQxQTc3OEJBQjUwQUYzMTk3NzQ2MEU1RDJBMzNGREM3Ci06MTA3N0UwMDBBMTI0N0U0QjU1MUUyQkVGOEExQzZEQzVGQ0QxNzNGNTcxCi06MTA3N0YwMDA4NkU1M0I1QzY1M0QzMjdERjVEM0RBNDA3OTYyRDkwRTkyCi06MTA3ODAwMDAzOUM4QkUzRjc5RjdDQkFEMjgwNzAyMzFBRUY3N0QyRkRGCi06MTA3ODEwMDBGMkFCNEIxQjE4NDk3NDE1MzNDNTA2RTU1ODkxOTI0NkQ3Ci06MTA3ODIwMDAzQUJFMDFENzY5MTJDRTgzRUIyRDlGODBBNjM4RTZFRkQyCi06MTA3ODMwMDA0REQ0OTVFOUM4N0ZBQzdFMTdBN0ZCOTFENUZGMjEwNkYzCi06MTA3ODQwMDA2MTY2OUVERDZFQTg3QTYyRjk4OEVBRDFGOURCQzFFQTQ5Ci06MTA3ODUwMDBFMTc3NjE4ODdFNUFBMDQ5RUI2MUIwNkZGMUYxRkRENTA3Ci06MTA3ODYwMDAyQUUwRkVERjc2MUZFN0ZCRjYwMDdGNEVDOEUxRjRGNzYzCi06MTA3ODcwMDA0RUI0RUFBRTI4N0JERTE1RTVFQkRCMUVFMEY3MEVGNDM2Ci06MTA3ODgwMDA0RDExRTlGNzc4QTA0RUY4MjdFQ0U3MEI2MzQxQzNCQzM0Ci06MTA3ODkwMDBDN0U5NTM4QUYzNTFGRjNGNjJEM0MzQTQ4OTExQkU2Rjc2Ci06MTA3OEEwMDBGRkIzNEFGQkY2NjUxMzlGNkNDRTYzRTU0OUZGNkExODg4Ci06MTA3OEIwMDBCODBGNkYwMTIzODhGN0I2NUE1QjQ1Q0EyM0ZBNjZGOUY5Ci06MTA3OEMwMDAzOTc5NEI1OEY1MEI2NjdFMjcwRkY1REVFOUI2REM0OUIyCi06MTA3OEQwMDBEQkY2NDk0M0NCOEQxM0QxM0U3OEVGMjUyRUY3OEVEQkI3Ci06MTA3OEUwMDBFM0VDRjBGNUE0NjgzRDY3ODZFOTFDMDU0MDA3RTkyNTRGCi06MTA3OEYwMDAwRDcxOTlGMkJGQzQzMUZDQTlGOEI0NkJFODVFQ0MxNkU3Ci06MTA3OTAwMDA4NUVFNjE1MkZFMzQ1QjI1N0ZFQTA3N0VGQjFFRTIxRTk4Ci06MTA3OTEwMDBEMjU3OTQ0MDUyQ0I2NUVGM0IyQzkxRkMwRjRENUEzMDFGCi06MTA3OTIwMDA4REY3NjE2RDA5NEZBN0RGNjVCMENBNjQ4QTg3NkQyOTNECi06MTA3OTMwMDBFMzcxOUQ1MEU0MkFCQUVGRUEyQkREMDFBQURGMTI1NjZCCi06MTA3OTQwMDAyOTBGMzg1REI2RkI0MDU1MEM5RkEyODZGQjdFREE1Q0EyCi06MTA3OTUwMDA0QUY3NTM1QTlBQTg1MTNFMzFGQjE3N0Q1RjEzMjMzRkQ0Ci06MTA3OTYwMDAwRjlEMkJDNkVGNkI3ODFDQzIzN0ZBMjA5NTlCM0VBNTY2Ci06MTA3OTcwMDA1MUZGNjBFN0VEOTNFQTI1RTJFRjQ0MjRCQUJERjdDRDZECi06MTA3OTgwMDBGNkZERjQ0MkY0ODNBQ0U2RTc1MkE2NkE0QkJCOUY2Mzc0Ci06MTA3OTkwMDBERjlCNEQzNTUxQ0NGOEExNDU3Qjc3NkYwOENCMkI4MDExCi06MTA3OUEwMDBFMkE0QTEyOUFGMzc4NkIwRkUwRDlBQzFGM0IwRjgzOTMxCi06MTA3OUIwMDAwOEIwRUYzNzZFMkU1QkQ2RkQxRkQ4RkZGMjEwNEMzMkE5Ci06MTA3OUMwMDBCMDdFQjU4QUZDMEFDREYwMDJERTQ3NTU2OEVCMzNBMUU0Ci06MTA3OUQwMDBEQ0U5MDJFQTYzMkRCNTc0RUQyNjgzQ0Y3QjdFQTAzOTA2Ci06MTA3OUUwMDBFRjcyMTVFOTQ2NUE5QzQ3RTNCNDgwQTk2MjdEQUI1NjE1Ci06MTA3OUYwMDBBNjdEQjEzMEFDNzZBMURGQTBEMEY2M0IzOEYyMjAzRkI3Ci06MTA3QTAwMDBFNTNBNDdDMEZFMzc3NjhERUMzOTY3MzBGQTA2NkZCOTM0Ci06MTA3QTEwMDAyMEUzN0VERDBCNkRGQUM5QzQ1QkU2M0NGMzYzQ0ZFNDgzCi06MTA3QTIwMDAyMjNDRjk2QkU4NDRDNDU5RjBERjFCOUJCRTA0RTczNUU4Ci06MTA3QTMwMDA0NkRCMkJFQzI4Mjc5MzQ2RDNGMTdFNzE0ODM1QjhGMzBCCi06MTA3QTQwMDAzMEZFNUE3OEE3OTYzNUY3MjAzRDRDRDU2NUQwMTk1RUEzCi06MTA3QTUwMDAyRTg0QkU0NkVDN0Y4QjRERkZFRDQ1REVGREY5ODg2RDMzCi06MTA3QTYwMDBENzMwM0VGRDdDNzQyNkM2MzM0NEIwNUNGRDYzQkNDMzk2Ci06MTA3QTcwMDA3MkMxNzM0RTdCOUVBNzNDQTk2M0FDQTdGRUU0RURDNTIzCi06MTA3QTgwMDA5RUVGRTdBNUNGRjc3Q0JGNjBENzc0NEY3OTRBRTc1Q0RDCi06MTA3QTkwMDA0RkZEMEJGNzU0NzlDQUQzQkEyRUY3RDQ5RjcxNjBBOTYyCi06MTA3QUEwMDBBNzNDQjNFNzFBNEZGREQ5QUZBQ0Y0N0M5RkQzQkJEQTQ4Ci06MTA3QUIwMDBGM0ZEQTJERjZERjA5NDJGRUVCQkMzNTNERkQxRUIzM0E4Ci06MTA3QUMwMDBGN0NERUJBMzdGOTkzRThGQkZGQkUzM0U0RjlDNjkyRjIxCi06MTA3QUQwMDA5Qzc1NkZDRTlGOUI3NDhDRkY0MTk0REY5MzJCRTNGRUNDCi06MTA3QUUwMDBDRUNBMUJCRUM4RUQyRTc1QkVBMUEzQkNCOURBQTZDQjBCCi06MTA3QUYwMDBENTc5RTYzQTk0QUY5NTUxOTVGNjA5MzlDQ0VCQzlFMUMxCi06MTA3QjAwMDA0QjQ5MUY5OUIwOURDOUE5MTk2NDhGRjU3RkM3Mzg3NDc3Ci06MTA3QjEwMDA3QkJEMzVCRkM0RTVBRjBBNjgxRDgwRjk1Rjk1RDExQUZBCi06MTA3QjIwMDBCQTJGRDA2OTJGNkIyNjYwNUVEQ0Q1NTE5RERGNzNDMzAxCi06MTA3QjMwMDBBQzU5QkEwNzQwNjdFRDVERjM2MkY2MUY1RDFERDFDNzEyCi06MTA3QjQwMDBFQzQzRDRFQkZCRUQzRjM5ODdFMkJFQ0NGRTIzRkJEMDA4Ci06MTA3QjUwMDAwODcyN0IxMDRFNEJGNERERjg4QTQwRjdGMzMzRkI4RTRFCi06MTA3QjYwMDBFQ0MzNjdDMkNDM0U5Qzg2RjY1OEVGMTY5NDQzN0QzRjJCCi06MTA3QjcwMDA5MzI5OEVDOEZFQzhGRTJCNjdGNkRGRTY1Q0I3MUZCQ0Y0Ci06MTA3QjgwMDBCNzA4OUY2OUQwQzZFMkIzNUJFOTEyNDcxNzkxM0Q3ODA5Ci06MTA3QjkwMDAxRkQyRjM2NzM2QkVCNDBBRkI5RDUyQ0VFRkQ1NkIxRkUyCi06MTA3QkEwMDA1NTFCNDczREI5QkRBODkzRjhBNEFGNDhFNkZCOTA5QzkwCi06MTA3QkIwMDAyODc1RkJGNzdFNkNBRjc3NDhGRDI2RDlBMTZDMUQ0ODcwCi06MTA3QkMwMDAyRTNCRUJCMDQ1RTg0REUzRkQ4NUQ2MTc4M0U0RUY5RUYxCi06MTA3QkQwMDBGMDVCRkYxMUU0MzdCNTU4MUQ4N0Y5N0ZDNjNFQzVDNDc5Ci06MTA3QkUwMDBGMUVFQjVGMTVDQUM0REFCQzI5Rjc5MkM4OTJGRDk4QkVFCi06MTA3QkYwMDBDRjczNzVBNjhGQjA2NzY5RTkzRDdCRjFGOTc0OTQ5RkU3Ci06MTA3QzAwMDA1RjNEREY3OEJBMEE2NThDM0E5RkZCQURFNUE5NEFCQUI5Ci06MTA3QzEwMDA1MTQwN0YzMzgzMjM4QkRERDFFRjlGODg2RUU3RjdGREUzCi06MTA3QzIwMDA5NEM4NkYyMEZEQTFENjdGODY0REExMzI0RkE1Qjg3MUIzCi06MTA3QzMwMDAwMEU5NDJBMDI3RDE1MzQwMEVEMUZFMTJDMDQzQTg1OEZDCi06MTA3QzQwMDBBRTEwRDIxOEVBNDJGRDE1RjM0MTJCRjNCNjEzMUQzOERFCi06MTA3QzUwMDA3QTJERUFCQjQ5NkUxRkZGMThGMTFBQUJGNUFFN0Y0OENCCi06MTA3QzYwMDBGRDE2RTFBOUQ5M0VFRkRDOUVBQjFGQUM2MkUzQjYxNzZGCi06MTA3QzcwMDAxNEU3QTFDRjE2RkQyOTRCNUNGMjY3OUZCREVGM0U5MjQyCi06MTA3QzgwMDAyMzdBRTRDRjZDQ0M1MTk4MzlBMDE3MzE3RUQ4MkU5RTQwCi06MTA3QzkwMDA4M0YwMjYyOEJFMUUzODI4OTEzRDFGQjhCMzgzN0U1RjJGCi06MTA3Q0EwMDAzNUEwNTkzQTkwRkU2RkU5RDg2Rjc1RjE3MkYyRkZGRDc5Ci06MTA3Q0IwMDA0RjZDM0FFOUMxODFCQTFGNjVDNTVCQTA1NzAyNzNDNjE0Ci06MTA3Q0MwMDBFMEY4OEM5RUZCMDBFOTAzMzAyQUE4RTMzRTVCMTcwQjJCCi06MTA3Q0QwMDA5QTNCQjJEODA3OUY4RDcwRkZEOUE2MDk4RTNGMzM0MURBCi06MTA3Q0UwMDBFNzVENUJEMERGMTZDNkFENEQxNTMxNEZFN0Q2OUYxNTZBCi06MTA3Q0YwMDBFQzc0REYwNzcxNkIwMUY3NEYwRTM2N0U4MEQ5OTk0OTFFCi06MTA3RDAwMDAxNzdDOUI1OEJGMjhDNzVCNEUyRkE5QTFGQjU0NzE5QkMyCi06MTA3RDEwMDAyOUM3RjNBMDY1M0JDODRGNkZEQjRCOUZCNUYxN0E3MzYyCi06MTA3RDIwMDA4NEUzNzE4MjAyMEI3NkEwM0NDOTYzRkExMTQzNjlBNTEyCi06MTA3RDMwMDBFRDU3NzFGQzJGRjExQzFFRDczNzJDOTBCODVGQ0VFN0EyCi06MTA3RDQwMDBFQzVCRTIxOUJDODc0NjA3NUQ5OTY1MUZGMTI3MTU5ODIyCi06MTA3RDUwMDBFRjZCRUNGRkJBRjE1Q0UwMzlFREFFN0QwRTcwM0ZGMEY5Ci06MTA3RDYwMDA5NjI3NkZGNzk2Q0Y0QjdCQ0I0QzhCN0UxOUY1ODA2NUIyCi06MTA3RDcwMDAwMERDQUZCMUNCRkIzRDBDQTYwRkUzMjg2MzlERkJGMzBBCi06MTA3RDgwMDAxM0ZDOUNBMENBMjA0MEZBMkVFQjRDNzc3RjhEQ0QyRkEwCi06MTA3RDkwMDBFMURDNzM5OTcxNUZGRTk0REQ2OUQyNUZBRUIwN0ZDRjk1Ci06MTA3REEwMDAyM0YzMUVGN0IxRjhGQjFFNTM2OTVFOUU3RDc0QkE0RjM0Ci06MTA3REIwMDAyMjdGMDNGQTg5MEM5NzlGNjhBMkE2N0JFQzJBQzdERjczCi06MTA3REMwMDA5MzI5RDc4M0M3RUUwMUY2ODVFQ0Y1QTQxRkVGNDNENUMxCi06MTA3REQwMDBDQUQwQUZEMDVBNzhENzZGOEY5NzBGRjg1NzVBRTVENERCCi06MTA3REUwMDA5QkM3Qzk3RkM5RjRBRjE4Rjc3RkEwNUZGQUQ2OUZEREE0Ci06MTA3REYwMDBGNkRGQzc1RDdFQ0E3N0EyQzlBOUU4Q0ZCODdGMjI2RjM4Ci06MTA3RTAwMDBFRkRDOTdFQTlDRTc3QkI3NDY3RTVFRDAzOTFDNDkxN0NBCi06MTA3RTEwMDAxQ0I3OTc1QTk3NzE3NTI1M0QwNkZENDM4RTdGQzVGMUI2Ci06MTA3RTIwMDAyMzVDOTM2N0RFODU3Q0I3QzUzODkyREFDN0ZBQURGQTcyCi06MTA3RTMwMDA5NTFGQjA5Rjg1RDJDMTAzRjUyOEVGQzZDQjk0MkZBMjIyCi06MTA3RTQwMDBDRDVFRjM0ODEwRkQ5OUY4OUQ5NUFCOEFGNEQxQzQxRjFGCi06MTA3RTUwMDAyRkZBQzg5RkQwNjZGM0JENzMyRUQ1RjFDNzdDQzJCNjhBCi06MTA3RTYwMDAwMzJFQ0I3MUY0MjgyQjY4OUZDNzA4QTI5RTdDQzEyRURECi06MTA3RTcwMDBCNjg2OUVGRDkwRkIwMzFEQkZERjk0NEVFRkY3RjNGMTM2Ci06MTA3RTgwMDA4ODM3RjkzRDc3NTA3RTkzMzE4N0U3Mzc4RDVBOUVERUVDCi06MTA3RTkwMDA4QkVCN0NBMUJEQ0UxOEI3QUE5QzM1MTAzRjFEQkQyMjJGCi06MTA3RUEwMDBCRDE3RjVEMEE5NzY5RTUyRDk4QkNGRDM0RkY5ODI1NDA2Ci06MTA3RUIwMDAyODIxN0Q5RDhGRjk0OUFDOURCMTVGRjY5QzA3MTkwNTdFCi06MTA3RUMwMDAwMkU1Rjk4QzNBMkExOTY5RDZDRkQ0NjdCRERGQ0JDMDU5Ci06MTA3RUQwMDA1NTJFNDJGOEJDRTVDQ0I4MTQ1M0I3REVCOTVFQzBERjBFCi06MTA3RUUwMDA0NTREMDkyOENGQjZBRTYwMzYwMjJCQUZDQUIxRjM4QjMxCi06MTA3RUYwMDBDRTg1NzM5MTZFMTc0QTYxMDNFRkNEREJGMDBCODlGMkVCCi06MTA3RjAwMDA4QkZEQzcyN0ZGMTJFM0EzRjAxMkNGQTdENENFRTFGMTc4Ci06MTA3RjEwMDA1NkVEQTc5MkMxMjQyMDY4MjE5ODM2MkQzQzEwQzdGQTRGCi06MTA3RjIwMDBFQTE5MDNFRkQwRUZGNzhGM0RDRUQ2MURGN0ExMjc5OEMyCi06MTA3RjMwMDBERDVGRTI0MzNCNUVBMzcyMjdCM0ZCQjFGQzBDQjNGQkY2Ci06MTA3RjQwMDBGMUI5OUJEOUZERjhGRUJCQ0NFRUM3RjIxRTY2RjdFMzk0Ci06MTA3RjUwMDBGMzA3Q0NFRUM3RjdDRjMyQkIxRkNCRkI3MzJCQzkxRjg4Ci06MTA3RjYwMDBERjgzRjcxOTREQzZERkI1REQ0REY5OEM2REFBNEY0M0EwCi06MTA3RjcwMDBGQUM5OTQ2Nzk1OTVCN0FBQ0IxODdFMzc4NzE3NTIxQzE0Ci06MTA3RjgwMDBBNTZBMjFDRkE3NkZDRDU5NDhGNjc0QkY5RjJFQzNDRkU2Ci06MTA3RjkwMDAzOUUwQjdFQjE1MUNCRjFEMUU2RDhFREJGNjZDQkZGRjA1Ci06MTA3RkEwMDAzMzY5RDBCRDA1QzNGNzYzM0FGRDkwRkZGNEFDN0U2QzM2Ci06MTA3RkIwMDAzRkVBREI1RkZDRjVENzlCRDhBN0I1MzNCN0I1MDc4Qjk2Ci06MTA3RkMwMDBGMTNDNEY4QTdGQjdGMzBBMzM3RjRGNkJFREVFMDZDQTYxCi06MTA3RkQwMDBGMzUzQzYxQzRERTFCQUVFMkUwRjkzQkU4MUJGQjc4NDlBCi06MTA3RkUwMDA3MjNCRDM0RTc0RUNDMzRDN0REQzc5NjZFRTg3OTk3OTk1Ci06MTA3RkYwMDAzMDExNUIyRjE5MkUyRkUzNkU1RjhBRTJENjU2MDM5MzYyCi06MTA4MDAwMDAyRkI4NUZENEE3RTdCRkVFM0JEQjZGM0I1NkNCQ0IzODM3Ci06MTA4MDEwMDA3RkNDRjNBRUZDMDc3ODNFNUUzQjI0MzVGN0ZDOUQ3M0M2Ci06MTA4MDIwMDAwRjY0RjMxNTczRkZBMURCNkYxQjJDNDlEM0JEMENDMThCCi06MTA4MDMwMDBCMDQ5RkFBMkMwRjQ0OEQyMkJCNTI0QzUwMTVCMDdGOUI4Ci06MTA4MDQwMDBEREVDMzc2RDM5RDEzMEU2MkFEQUVGNUI1RkY0OTFCRUIzCi06MTA4MDUwMDA1NTZERTdCRjM1OEQ1MUE5REMzNDY2NTY5Q0YyMjYyMzU5Ci06MTA4MDYwMDBCM0Q0REUyQ0ZENkM4ODE0MEZCOUJGNEE2Q0ZGRDc4N0UwCi06MTA4MDcwMDBEOEZGMjUzRjNGRUZENUI0Nzc4RThBRTdBMkRBQzMyQjJFCi06MTA4MDgwMDA3QkQwNkU2RjhGQzdDOEZGREYzRDY2OTZFN0RFNzEyOTM0Ci06MTA4MDkwMDA1RTQxRjc1NDQ4NjFBRTY3NEI3MTk1RjQ2QzE5RTc1RjI4Ci06MTA4MEEwMDAzNjUwREZBOUI3MkY4N0VGMjM4Q0NEQzk4RjE5MDg3N0ZBCi06MTA4MEIwMDA1MDNEQkY5QzMwRDFERkUyOEZGMUZDNjJCRkM2RTM4NTRCCi06MTA4MEMwMDBDMTEyMTFENDJDRTczMDlFQ0RFMUU3QUNEQUNCOTIxQTg1Ci06MTA4MEQwMDBGQTc1REFFMzMyOURFNzY4RDdBNzBGMTY2RjI1QkRFODdBCi06MTA4MEUwMDA4RjM5ODI4NzdFOUI2Q0JGNDNEMzJBODVGNEMyNDQ1RDVGCi06MTA4MEYwMDBBRTU2OUQ0RkU3MTFGQTkwQ0ZEQkMzOEQyQUM2NUY5NTMwCi06MTA4MTAwMDAzMUU1NDNGNkFCNjhCQ0RGRkYwMzgzN0UzRDFGMDA4MDkzCi06MTA4MTEwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCQ0Q3RDU4Ci06MTA4MTIwMDAwRDYwMTRENUI1RjA5RDlERDk5RjI0QkJDOTI0QkI5QjgwCi06MTA4MTMwMDBFQ0U2OEYwOTI0MUEzNEUwMjYyNDMxNjhDNDQ5MDgzQzRGCi06MTA4MTQwMDBGNDIxMkUwMjFBNUEyQTFCMTA0NTA1MDk2OEVCNkFCNTVDCi06MTA4MTUwMDBEOTkwODAxMEE0MDY3RjJBNEYyQ0RENThCMEY2QUJENkZDCi06MTA4MTYwMDA2OEU5MkJBRjQ1NUU1MEU0Rjk4MzlBQUE1NUIwQTgwMTlGCi06MTA4MTcwMDBBQ0Q1M0VCNTExQTRBNUVBRkJGOENFMzk3NzI2RDk5OTNFCi06MTA4MTgwMDBDQzI2NDE3REVGN0JEODMyREM5OUZCNzNFRUI5RTdGRjVCCi06MTA4MTkwMDA5RTdCRjdENDI5Rjg3MzIxNjM2RDdCNTI1NDU2MDlDRjI3Ci06MTA4MUEwMDBBNThFNzg0QTExNjNFMTY4Nzk3NkMzMjRDNkJFOTUxNTE5Ci06MTA4MUIwMDBGRTIyQzNDRjk4QzNCMzQ4OEVCOTE5QjMzM0E2NzZDMzkyCi06MTA4MUMwMDBGMzk0RDY0RTdGN0E2NTgxMzFBODI3Q0FCRjk4RjI5RTc0Ci06MTA4MUQwMDA3N0U4NzdGRDI5QTY2RjY2MTE2OENGOEFBNUY3RkI1QzYzCi06MTA4MUUwMDA4Q0Q5MTQyNjlDQjI0MTk5QjlFNUY3Q0Y2NkY0RTc5NDhGCi06MTA4MUYwMDA4ODdGRjcwNkMyOUVFNEZENzg1Q0JGOUNGMkRFQTRBMUY2Ci06MTA4MjAwMDBFRDk2OTdGNTM5NDQ4NUIxRjVEQjNBQzMwQ0NBOUYwQjVGCi06MTA4MjEwMDA1MEE4NDJCODYzNkExRUNDRUI4NjlEMkI1OUE0OENCMTQyCi06MTA4MjIwMDA4RDUyQUY0QjA2MzgzNjdFMjkyQzBDOTcwREVEN0YzMUUxCi06MTA4MjMwMDBDRUE3MEE3Qjk1NjIwODI3RkNCMTlEM0EwN0ZFNTY5OEE3Ci06MTA4MjQwMDBFMkE4NjYyQzBGREY4Q0M1MjdGRjBFQTNFQzM5MDVGREQ1Ci06MTA4MjUwMDA5N0Y3NDBCOTU0ODMwN0ZFM0ZFOTM5NjNCOUFBRDc1ODY1Ci06MTA4MjYwMDAzRUY3ODBCMUNDNThDODFFOUVDMEQ4RUIyREQwRTk5OUZFCi06MTA4MjcwMDA4Q0NEMzlGNEUxMjE5NkNFRDhEQzU4RThEOUE3N0M4Qzk2Ci06MTA4MjgwMDBFNUFBQUU3MDVDNjY2QzFFMEIzREZCMzY5NEYzMUFEMzA4Ci06MTA4MjkwMDA1ODRGMDgwNkI3QjFBNUI4MkUzMENEMzc4QjAxQkU0NjcyCi06MTA4MkEwMDA0NkIwQjJCQ0E1QTk4Q0I5MDZGQjlGMkY2N0QyM0EzNTYwCi06MTA4MkIwMDBGNjM1Q0Q2NDEzMTlGQkUxQUQ2RDhDNDEzRkIxN0EyMUU4Ci06MTA4MkMwMDBCRTFERTA5RkREQjA2REY2Mzg3ODNFNTA2OTJCNzgxODAyCi06MTA4MkQwMDAxQjQ1RUNFRkUxRkM1Q0QwRDkyOTk4NkZBNjZERTU5OEMxCi06MTA4MkUwMDBCMTUwM0YzQzM1NEQ2ODgzN0EzRjNDRUZBQ0Y1QzU1MDBCCi06MTA4MkYwMDBFRTlENUUxMjQyQkMwM0JFREUxQjk4MEZFMDdGNUU5OENGCi06MTA4MzAwMDBCN0Q3Qzc3RkE1RjJEOERDNzFGMERDNTJGOUU0NkM3Q0ZBCi06MTA4MzEwMDBDRTQ5QUMwRkZEQ0RBQUU5NkE3NTQwN0Y5NzJFNTMyQTRFCi06MTA4MzIwMDBCMEJGNzA4M0IxN0Q1RUFEQjEwQzkwRjNGOUMwQkZCQzNFCi06MTA4MzMwMDA1OTQzRTExRDA5MUVGM0Y4N0E3RjBGQjQyODg0N0ZGNkI0Ci06MTA4MzQwMDAyNUQwMDNFMDMzOEM5RkEwN0Q1OEVBOTc0MjgwRTdEQzdDCi06MTA4MzUwMDA1QTQxOEQwM0RERTRBOTgyREE2NUMxMEYxRDFBM0Y5OEU5Ci06MTA4MzYwMDBGMTJGQzYzMjE4RjI1OUZEM0MzMURFMDE1NTcyNUQ3NkFGCi06MTA4MzcwMDBDMjdGRUU0QzIxQUVDMEY4Qjk0QkZCN0I0RTQxRjk3Mjg3Ci06MTA4MzgwMDA5NzNEMkVDMkY3QUNDQzZFMDFCRjNGQjA4Q0IxQ0UyMjcwCi06MTA4MzkwMDAwMjJGQkQyRTYxN0QxRjcwQURCMTE3QzJGNzc5NDE5MURCCi06MTA4M0EwMDBEOTgwMEU1OEVEMzgxQThGRTAxODRCRjgzOEMyRjFFMTM5Ci06MTA4M0IwMDAyMjdDRTQyRDBCM0RGQjYzMThGRjhBMUFBNzJDNDJGRDlCCi06MTA4M0MwMDAyQjFBRjk3NzFEQkU4RDEyRDAxOTdDREYwODc0MTYyMzg1Ci06MTA4M0QwMDAzQTkzOEUyNEUyNjdDRUExRTVDQjkxMUVFNzk4REUxNzkzCi06MTA4M0UwMDA0MzVEOUNFRkM3OTMwRjlDNTEwODcwMkQxNzNBNjdBNDBCCi06MTA4M0YwMDAwMTI4MjlGNjY2QzY3MEExMDE4MzQ4RDczQTNGRUE3ODdBCi06MTA4NDAwMDA1QUJFQTM5NUY4MzE4MUNGRUNBNzkwOUZGMURGRDk4NEI0Ci06MTA4NDEwMDAxQUUyQjNBNzVEQkY5MjUxNkVFQ0NFRUNEQkMyODA4NDUyCi06MTA4NDIwMDBCN0NBMkNENjkwQ0ZEOEJGQTdGNjlGMkQ0MDc5QkI3QzdBCi06MTA4NDMwMDBGOUJBNzUxN0MwRjc5NEZFNUZCMDcyQzY5Q0NFNkZDRkM1Ci06MTA4NDQwMDA5ODkxNTA0RTREQkQ4NkNBM0U2RDFDOTg0MjhDQUZGNzM4Ci06MTA4NDUwMDBDMEI4NDQxRkZGMjk3M0Y4MzZBODZDOTMwODY1QzkyNjc1Ci06MTA4NDYwMDA2RjBBMTUwREI2Q0JDMjc2QzIzMEVEQzI2QzkzNjREMUUzCi06MTA4NDcwMDBDRUFEQjcwMzNDQUQ4NUY1NEJENUU2OTVBQTdEQjc2OTgyCi06MTA4NDgwMDBGMDI0OEUyRjIxREU2NEM1MkRDMDdBNDhEMzI1MTlFOTRBCi06MTA4NDkwMDBFNUVCQzI5MTNERDJCQzIzNkM5MzdERENEMDc2MDA3NkI3Ci06MTA4NEEwMDBBQjBFQkZDRDFBRkUzODdFNEYxQ0RGM0UwQ0ZDREYzNDE2Ci06MTA4NEIwMDAzRTQ2RUFDRkExN0QzRjZERjhBMEZBRUFFQ0U0RjM0NTMxCi06MTA4NEMwMDBCOEVDQThBRjE0QzU2RDRCRThFN0FFM0RGRjc4RjExQ0UyCi06MTA4NEQwMDAyMDVFNjkzRTBCQTU0MDFGOTI1RDk1NDM0MEU3NjVGMjIzCi06MTA4NEUwMDBCRDJFRUM1Q0NBNkM5MDIzQzAwRkVCQTFBQ0MyRkJGNUI3Ci06MTA4NEYwMDBERDlEMkUwNURFOTcxNURGQkQwRTg5QkVBQzI3OTVBMTRCCi06MTA4NTAwMDAzQzk4QzBFNENDNDdBMURGMDlCMkM0N0E3MEQ1MkVEODFDCi06MTA4NTEwMDA2QjRCODMzMkJCODQ4NTRBQTBERjhDM0RBOTI0NEYzMjRDCi06MTA4NTIwMDA4QkNFRkJBOTAwRTM2NjY2QkE1NDZDOUY5NjU5RkQ1MzQ3Ci06MTA4NTMwMDA0NkY0QzExNDI5MDExRjY5NzVBRkQ3QTcyMTVDQjM1OTRGCi06MTA4NTQwMDAwODU5NTExMkUyQUMwRTk5NkMzQ0YwMTA5NDMzQTc2REFGCi06MTA4NTUwMDA2MzBENTBBRUY4RDhBMzg4QzhEMzEyRDc3NzFERDgxRUE0Ci06MTA4NTYwMDBGNTc0M0JEQjg3RkEyNUE4Qzk5Rjc1MEU3OTEzRTk4RjRGCi06MTA4NTcwMDBFQjI0ODZGQTIzNkRDMkJEMDJDMkYzMDA3NDI1MDI1RkFDCi06MTA4NTgwMDA5Njk1NjVDRDZFODA3MkQ5N0U1QjQ4NTE3MDNFOUQ0MjU2Ci06MTA4NTkwMDAyMUNFMjcyMDkyREVEMkYxQTlDQjkxOEE0RjdCMzhEMzBFCi06MTA4NUEwMDA4RjY3RjFFRDAwN0ZCQjNEREU4M0YyMkEzNkY5MEE3OTUxCi06MTA4NUIwMDAzQkMwOTM3QjU1ODJCQ0M2QkZGQTAxMDcwOEVGNEI5N0JGCi06MTA4NUMwMDA2REVGMjg0MkZBOTZERTRCRUMyRkUzRDM3ODBGQ0EzM0Q3Ci06MTA4NUQwMDA1NkQ3MThDNkY2QkU5OTkyNDFGRUE3NkFGMjJDRDVBNENBCi06MTA4NUUwMDAwNzVBQjJFQzI0Q0Y3NDdEQzA1NDQ5OTE2MURFODIzNkMzCi06MTA4NUYwMDA2RkY2ODMzMEU5MDMyNzBCQjkxQzY0QUYyQzIwM0I0NDkyCi06MTA4NjAwMDA2MDdEQzJBOTM0OTgzRjU2NDRCODBCRjgzQzg2QjRBRjlECi06MTA4NjEwMDBFNkVENTkyMEU0NDIzQkM3OTlEQURDOENGNUUxNjM1NjdDCi06MTA4NjIwMDAyQjIwNTdCODJFNTU0NUZEMkMzODk4MkI1ODAxRjNCNjAyCi06MTA4NjMwMDBCMTQ4MzdEMDQ5QUJDMDI0MkMwRjhFRDdDMzcwM0NBN0FDCi06MTA4NjQwMDAyQkFEMURFREFFQTc1RDZEMzZDNDVGREI3M0EwM0Y2MDQzCi06MTA4NjUwMDAxRTc3RDg1OTIzREEwNTZENzJDODk1MDVFREEzOUFGREVBCi06MTA4NjYwMDBCNkFBN0M2QzBFOTYzMzgwQjY3QkQxNkU5MEMyMzJEMkE1Ci06MTA4NjcwMDBFNTJBN0Y3MTBFODNGN0U5REVCRTZGQTM5Q0ZEQTdDQ0QwCi06MTA4NjgwMDA1RkNGNzAxNTgwMUNBRDg3M0FFNzgxRENERkY0RjhCQTY0Ci06MTA4NjkwMDA1ODJEOEM3NzMyOEYyOTA5NzY5RTUzNkE2NjY4NEYzOTM4Ci06MTA4NkEwMDA0RjE2MUFERUY3QjRDMDhDQ0UxQzJDQUI2RTVCMDM4RTVCCi06MTA4NkIwMDA3MzVEQTY0Mjc4QUQ2MzcyM0JCNkFCMDM2NDI4MDlFQkU5Ci06MTA4NkMwMDBFMjNDMTk2NENBMjRBQkZFRjMwREVGN0JDMDRFNTI5QzEyCi06MTA4NkQwMDBBM0U5M0Y4RDI5QTU4OUZEOEY0QkQyRkYxOUE2RkU2NTIxCi06MTA4NkUwMDBDQkZFMDdGQkY1MUFGQTVEMjMzMUIyQTM2MzNFMzdBRDJCCi06MTA4NkYwMDBCQkQ5MkU1ODlENTlCRjIyMTNFRDUxMjc2QkVFQjZCMDUyCi06MTA4NzAwMDAzQjVCMzM2RDA0RjcxRDgxRTY1RTE1REFENzMzNjA3QzgxCi06MTA4NzEwMDBBMDkzMEJCRjNDMjIzMkIyNjc2MEE1ODA1RTU4QkVENEU2Ci06MTA4NzIwMDAzRjQwQzc2M0IxMUVBNzVGNUI0QzYwMjg5NzJFOTRFQzU3Ci06MTA4NzMwMDAwNjNFOTlDMjhDNjVCMzVENTQwMjZCOERFM0RBM0M5NUJECi06MTA4NzQwMDBCRDQ4M0ZBQkZDQTk4QUQzMDI3RUZERDlEQkMyQTYxNDhCCi06MTA4NzUwMDA5N0MwN0M1M0MzNEIxOUYwRjEwMzk5RkI1QzZCMDI1MDNCCi06MTA4NzYwMDA0RUU3NzRGMjQ4RTYxRjY3QTBCRkQwMkI3MEZBNUJFM0I4Ci06MTA4NzcwMDBCMzExNUVDMkY1Mzk1RDYyNDJCRjYxMDcyQjQxQjkxODgyCi06MTA4NzgwMDA0NkZBNzY3Mzc4NzBGQzVFN0ZGRTQzMUQxNkUzODNEODRECi06MTA4NzkwMDAzNUQ4MEZCMzU1NjE0QTcxQzJCQzdBMzUzQjc4NjBCQzlECi06MTA4N0EwMDBBOTc5NURDODA3MDNFMzM5NTkxNThEMjcwMkZFMTNDNzYwCi06MTA4N0IwMDBDQkZFNkFFM0ZEMUVFNzU3MzYzOERFRUNFOUM2RjlDRDlECi06MTA4N0MwMDA3NkM4MzRCRkQ5MUFGRkVBRTNGRDFFRTc1N0Y0MTVDNjkxCi06MTA4N0QwMDBDM0Y5MjU4RUY3NEZDNkY5Q0Q3NkNBMzRCRkQ5MjJBNzgzCi06MTA4N0UwMDBBRjgxRjFCMkJGREE3OEJEMkRBNTY0MDdERkUxMDBGOUYyCi06MTA4N0YwMDAwNDc0OTI1QUJFQzMzNTBFQzZCREMzNjU5NzA1NjVCMEY1Ci06MTA4ODAwMDA1RDVEREQ4REFFQjlBODdCREQ1M0E3RkI2MTlDRkE2OTg4Ci06MTA4ODEwMDA1MDM5MTc3Qjk5M0FCREFFOThCMTREMDJBNzhCRkZEQzVBCi06MTA4ODIwMDBGNEU3NzU0ODE3Qzc2N0FFMkEyNTdEQTJEOUQ3OTc2MkE2Ci06MTA4ODMwMDA1NUQwQzc5NzRBMUNERTU5RjlFRTc4NkIwMjFFMUYwMDBGCi06MTA4ODQwMDAzOUEyMDIxQzBGMDJCRkFCQzA4RjVCODEyRkIxMUM2RjFFCi06MTA4ODUwMDAwOUQwRjMyMUIwRDdGMUI5MERFMEM1RUYwRkI3ODRBODY3Ci06MTA4ODYwMDBGQzQ4NEIwRDNERjU3RTRBNkJCOEREM0VCRUQ2REE2RTU4Ci06MTA4ODcwMDAzRjIzOEJGQjdEOUI4MkYyRkNBQjUwQUZENUE1ODY1MDhFCi06MTA4ODgwMDAyRkIyOUFGMzk5OUE2ODU3QjNFNkE3NTNFMEZCQzZDQjg5Ci06MTA4ODkwMDA1OTM5RUFDNjMzMzY3M0I4N0QwREQ5NjRCN0E3OTZFRjU4Ci06MTA4OEEwMDBFRDZEODFGMjFEOTI1RDQxQkQ3Qzg3QzI2NjU4RjlDREE4Ci06MTA4OEIwMDA0NUE4NjdBQUQwNUVFNUVERDlGOURDMEZGMzg1RkJGNjk0Ci06MTA4OEMwMDBBMkRFOUI4Mzc2M0FFMEQ1M0ZCNzZGMkZGQTdGOTc4MTgwCi06MTA4OEQwMDA1RDRFN0E5OTFEREVGQjM2N0M3RjFERkNCRjBFMkM4QjE2Ci06MTA4OEUwMDA2RTI2NDM3OUQ2MUMzRjhEMEY3RkQyRUJCMkQxN0VFNzQ3Ci06MTA4OEYwMDA3RkVFOTk3OThDRkM4QTcwMEFENzBCM0UzNkZCRDkzRDA2Ci06MTA4OTAwMDAwODZGQzhBMUM0QTkzRjc2NUYxOEY5NDBCNTJCMUQyNDk0Ci06MTA4OTEwMDAwQUMyNzZENEQzN0VENEQzRjBCREVFQjA5M0Q5MTBCRUM0Ci06MTA4OTIwMDA2OTBFOTI2QjczRTcxQUZEODY0RDI5M0QzMkRBM0Y5QjQzCi06MTA4OTMwMDBDQTdEQUMxNUZBQkY2Q0E2RjFCQkQzQzlGOTJENkNGMjk4Ci06MTA4OTQwMDAxQjY2OTlDQTIwMjFCOURGMkQyRUM4NDA3QkZGMEU3QzAzCi06MTA4OTUwMDAzNTc5MjhERUEyODc1QUVGRDg5QjQwQTc3OTU5MUUxRjg4Ci06MTA4OTYwMDBDNTAxQ0U2MDY3QTAzQzNCQzFDQUVFNkFDMDhGRjk1OTExCi06MTA4OTcwMDA2NEFDOThEQkZGQkQyNTc2Qzc1RTQwRkQyQjI4RjdBQUM3Ci06MTA4OTgwMDA5MEJFQjlEQzE4Q0ExRjFDOUVDOTVBQkQwNzVBN0FBN0U3Ci06MTA4OTkwMDBCQzU3MzIwODVGQUUxNDE3NTAwRkU0MkQ4NUY3MDlGMzZBCi06MTA4OUEwMDA5NTdDNzEwMUZEMUQyNjNFNUE4RUZFOEQ3OTFFMEYwOEE1Ci06MTA4OUIwMDA4RjA2OTlDNTc4RkEzMzk3NDlFRjIzNUU3MDI5NTE5RTQ3Ci06MTA4OUMwMDA5QkU3M0I3OUM4N0M2QjVGMjk2NjU2RkNBNDZDNDI3QkI1Ci06MTA4OUQwMDA2RUQ2NzM2MkE4NTUxOUM0ODczRUZGRkY2OUJFM0FBQUQ2Ci06MTA4OUUwMDBFOTE5QTZGQTU4MEZEMENCMkI0MEVGMUREQzhGNjE2ODM4Ci06MTA4OUYwMDBBN0VBRjQwQTE1Qzg3RUJBRjQ1MkY4OEU3NEExQUEwNTQzCi06MTA4QTAwMDA4OENGNTdDNkY2NkZCQjFBREI4MUVDNjg0MzdGNTdCNzM4Ci06MTA4QTEwMDA4MzdBMEVEQUQwMEVGQUFBRkQ1RTdBOUQ4M0VDMkRDNjFCCi06MTA4QTIwMDAxQUU0Rjc0QjA3RkI0QkI2M0VEOEVGRkIwOUZBNzNDMENECi06MTA4QTMwMDA0RUM0M0ZENTlBRTg0MzE4NUI0MzAxQjIwNzZFMDFGQjcxCi06MTA4QTQwMDAxOEZERkQ2OEMzODc1MjNBRkY3RTI0QzE0RUM1M0Y0N0RCCi06MTA4QTUwMDAxMkZBNkJEQkYzNzM0MTAxQjhCQTVBQkFBN0JDNjc0RjdECi06MTA4QTYwMDA5MDE3NEI2NURCMUFCNEU3NUFFMzAyQzUyMTdBQTAxRUMyCi06MTA4QTcwMDBEODAzNjM5NzJBQjY3NkMwRkY1NUQ4MEZEMkE3NDlBRTYwCi06MTA4QTgwMDA4RjZEODc3RTEyRUQ5NERBQjlGMkEzNDAwRkVENjVGNTk0Ci06MTA4QTkwMDA5RDIxNzhBRURGQ0NFMzY1N0FGRDgxQjg5OTJGNDZGRTQzCi06MTA4QUEwMDBCOTlEMzUzMzAxRTA3NEE0RkNFMDI3N0QzMDFGQjU0RDNFCi06MTA4QUIwMDA2MjI5NTNBMDZDRTdGNjBFN0JEQjQzNzI0MTc0MzdGRkVCCi06MTA4QUMwMDAwQ0JGMDc2MjIwQjc3MERFRjVDRDhGNjMzOTY2NjNFMUI2Ci06MTA4QUQwMDAzNjc4REU5RkM2REI0NzI1OTdFQzBDNjE5Q0E0N0QwNkFCCi06MTA4QUUwMDA0RTNGMzMxOEI5MkYwQkYwQjcyNjNCOTVFNEEwRTMxRDlBCi06MTA4QUYwMDBDRjQzMjhBNzFDOTkxNTRCRDFFRTU5MTBGRDdFMThFM0UyCi06MTA4QjAwMDA5MUIyOTcyRDBDNUJEMEQ3MDJDRDdFODg2N0YxQjhDQkEwCi06MTA4QjEwMDAyMTdCNEY0MTI2QzA1RDE3QUM4RjYzQkY0M0VBNDc3RjdGCi06MTA4QjIwMDA0MEZENEQxMUFERURCMDlENUEzRjVCNkNENjcyRTEwOTMxCi06MTA4QjMwMDBFREZCMTVDQjlGRkNGMDYxOTg0RjVBQjEzQjg0RTRCNjM2Ci06MTA4QjQwMDBGRTFDQjY0M0IwMERBREJGQ0IxRkU5NEU4NDIzQTU1ODI0Ci06MTA4QjUwMDA5NjI4MEVDQUJBMjdBMzNEQjdGRThCMDdCQjFGMDc5NDAyCi06MTA4QjYwMDA2NzdERTEyNjM5OUIyNTdBRTI0MjkxQTFGRENFQUNBQTMwCi06MTA4QjcwMDBBMUVENzdGRkUzOEQwMEFFQ0ZFRTE0NDZGQTk1QjExNzY1Ci06MTA4QjgwMDAyRjQyN0Y3MkUzNDA5OUM1MDQ4QzczNjY2QUU1RDgyMzRGCi06MTA4QjkwMDAxN0E5ODZGMkUyOEJFQUIwOENCNDBCNDQzOUY5OUVFRjQ4Ci06MTA4QkEwMDBBRThGNjE3QjgxOTc1OUVDN0JCQ0JFOUREN0NGRDFCRTg4Ci06MTA4QkIwMDA0RkI5RjhBMzlGREU4NUZBQTBEQTQxN0VFODQ2Q0QwRUQ0Ci06MTA4QkMwMDBEMkUxM0JERjJCMTJGRDlDRUYxRDFFOEYwNzM1QjlFMDc0Ci06MTA4QkQwMDAxQTNEMUUwRjVBRTE3MTc3NTA3RDBCREZBN0IwNkUwMTcxCi06MTA4QkUwMDBFOTM4RTUwQkQ3NEREOEZFNUY1QTU4RjgyQTgwN0Q4QkJGCi06MTA4QkYwMDBCMkUzRTc3NzI5RDRGRUIwMTUxRUNGMEFBQTQ3QjBCRDZECi06MTA4QzAwMDA2QkY5OTE5RkRFMDU3MDc4NzQzOENFNjUzNzI1ODFFMzY2Ci06MTA4QzEwMDAyRkMzQURFNzhFNkMyRUU3RTZGOUI4REVDOEQyRUM0RDc3Ci06MTA4QzIwMDA4N0EzMzczMDFCOUU3MkU1OEY2RTk0NDFERUFDMkRFQTMwCi06MTA4QzMwMDA2RUI0OEEzRjlGRjBEQUE4NUQ2NjkyNzg3Qjg2OTdFM0YwCi06MTA4QzQwMDA2RDU3NEVGODczODRBMzVEN0VEMjg1RTNBNzBBMkM4QzAyCi06MTA4QzUwMDBGNTM3RDRGNDMxMjFBMURGQjM3RDdDMUQwMDZFOUIxNzY1Ci06MTA4QzYwMDBEQUE1NEU2NjJBRDI5OTg3NzlFMjBDRThDQzUzQzlFMTlECi06MTA4QzcwMDBERjEwNzg5RDI5RDBDRTUzMEE0RjM3QkVFRjIzRkU0NzMxCi06MTA4QzgwMDA5NzgzMEIzNTEwNzQ1MDc2NjhGNDkxNzE0RkM3NDU0ODNGCi06MTA4QzkwMDAwRjU5QTI0RTZGNzkxRDQ4MkYwRTlCNUUzRkVGNjIyQzNECi06MTA4Q0EwMDA3NzY1RjE3MkI5MkZBRjIzOTYwRjdBQzYwMTZENTAyRUZBCi06MTA4Q0IwMDBFNDNBQzhERTMxQ0YyRjQ3ODNCN0MzQUZGQUJEN0UwQjhFCi06MTA4Q0MwMDA3QzNBRkI2ODlEMzY0RTcwODQ2MkIwQUU1MzZDQkQ4REFECi06MTA4Q0QwMDA4QkYxREJDNTZFQjJEN0UwN0Q2MzNDNjFGRUQzMzUzQUU0Ci06MTA4Q0UwMDA5Q0VFRTVGNkQ2QzY3RkI4MUFFMzE2RUI5MThDNEUyN0JDCi06MTA4Q0YwMDA3QTRGOUI0RTI3N0FBREU5RjQxQ0M0N0YwMjlEN0VDNjU1Ci06MTA4RDAwMDBBQ0U5QjREQUFBM0REMEU5Qjk1NkY4MzA5NzQ1QTY2RTc5Ci06MTA4RDEwMDA2RTAyMDBBNUNGQTczRjcyMTc2QUFCN0ZBRURERkMzOEFECi06MTA4RDIwMDAzQ0E3N0NFMTk2QkM1MDQ3M0M4MzkxOUQ2ODczNzFGOUU4Ci06MTA4RDMwMDAzRTI4RjcyM0QzQjA3RjQ5NkVBNkY3QTIzQjRDRkIzNTA0Ci06MTA4RDQwMDAyRjY1RjFGRTg3RjQ3QjZFRjU2Njk0NUJBM0U4Mzc4Q0E0Ci06MTA4RDUwMDBGMzM2RjczQkM2Q0JFMTlENzJCMTNCMTJCN0MwRkI0OTdFCi06MTA4RDYwMDBBRkM0RkQ1MjFGMUYzRjE5QkY5NEZBQjhERjlDOTQ1RjM4Ci06MTA4RDcwMDA3NEZBQ0YwOTQ3MTA4RTkxRjhFNUMyNDE3RTU5M0EzQTBDCi06MTA4RDgwMDA3RUQ5NDFGQzkyNTZDNkY5MjUyRDA5QkZCMDk4OTNGOEJCCi06MTA4RDkwMDA2MzZEMTEyRkRGNzI4RjhGRjg2MTgwN0Y2MjI1NDZGRTMxCi06MTA4REEwMDA4OTk1MThGODY3REFCRDI1NTRERkRDM0UxREU3NkQ4MTMzCi06MTA4REIwMDA5Nzk4NTc5RjQ3QjgwNUU3QTE5RTJEQjc4QjY0NkZGNDJFCi06MTA4REMwMDAzMTk0NTM1REFDN0Y4RjEzRjlCMDU2MDg2RDg3QjdCM0ZDCi06MTA4REQwMDA2MkJEMEQyRTA1QkZGN0IyRDk2MDdGQUNEM0U4N0UyQjA0Ci06MTA4REUwMDBDMjgzRkU1MEI1MTZDRjkyN0FEOTY1OUVBMTdDRUNBOUJDCi06MTA4REYwMDBFQzI5OEQyNEUwQkY0MEMzRTNFNUJFRjA1RDM4N0UxNzZCCi06MTA4RTAwMDBFQjFCOEY3NjY5QjI3NUJBNTc4M0Y3QTY4MDdBQUYxNUQ4Ci06MTA4RTEwMDA5RDhGQTQ3Nzc2QTJERUYxRTM5M0MzOURGNTg1QUIxOTEwCi06MTA4RTIwMDBFNTgwOTlDRkE3RENGMERCMEYxRjFFQTY5RjVGNkI3MDVDCi06MTA4RTMwMDAzQ0E2M0Q0RjgzRUYxRkYzNUFFOUU5QTBGQTRCMTNERjNECi06MTA4RTQwMDA1NzBBNjMyREY5RkVENzU2RUQ4MUVGRkZENTBBMUY1RjU0Ci06MTA4RTUwMDA4M0NGOUZCNkUyRjMwN0JEQkNGRjkxRjAyQ0Y5Mzg5RTlCCi06MTA4RTYwMDAyNURGRDdDM0YzMTE2RDlEREUzQTdEM0NCRjk1MDRDRjVFCi06MTA4RTcwMDA3RkY0RkE0Nzg1RTcyMzQ5RTRFQjUxMkZDMTYxOEJFMTg5Ci06MTA4RTgwMDBCRTAwRjIzQkZBRUZFQkNFOERGNUUzN0VBODA1MUNGRkFBCi06MTA4RTkwMDA5OUQ4OEY0QkUxRkQ4MDY5RkY5OTAwNzQzRUU1RjM3NTI5Ci06MTA4RUEwMDBBMTg4MDU1RjQyQkI2Mzg5RjBFQkVERUVGNUNBOUExRjFFCi06MTA4RUIwMDBBMUFDNDRCQjdBQ0IzRkJCNjkzRjAxRjRFMERGQkNERjMwCi06MTA4RUMwMDBBQzlDQjdGOTJDRTRGMTE0MUI5NzQzOTdERjczNzgzRDAyCi06MTA4RUQwMDBDNjY5QkU0NkZGRTk1NkZEM0ZBRkQxRDc0OEZBQkYyODY1Ci06MTA4RUUwMDA0MUZGNjMzRjY2NzlEN0M1NzgzQ0E1QzMxRkM5RjcxMTE5Ci06MTA4RUYwMDBCRUZBMkU0MkY5QjRGNUQ2MkMwMUZEQkE3Q0I1NDc0MDM2Ci06MTA4RjAwMDBGQkRGQUZFOTk3OEQ1RUVFQ0ZFOEVEQjY0QTNEODI4NDk4Ci06MTA4RjEwMDBGNTlCNjUyMTI2MThGQTNCNjNCOEZFQ0M3MDAwN0NFMzE0Ci06MTA4RjIwMDAxMUJFQ0I3REVBNTlGOEJDRDczQjYwRUY5RDk2M0Q1NDBFCi06MTA4RjMwMDAxRDUwMkJCMDNEQzhFOTRBMUM1RjNERDMyOEE3RjU3OUU5Ci06MTA4RjQwMDBEOEMyRERBQzBGRjUwQkI4REY3MTBCQkFGMjZCRkExMkI5Ci06MTA4RjUwMDBGQUI5ODBGQUQxRTQ3RDk1NEZBNzJCREVERkU5RUExQjUxCi06MTA4RjYwMDA4MDZGQkEwNkRGMEM3QzlBRTEzM0UzNjUyNDM4NkY0NkU0Ci06MTA4RjcwMDAzODc5N0Y5NzI1QzI5OUFDM0ZEREJGRDZENzg5RjQ2OTkwCi06MTA4RjgwMDA0MjVDNjdFMUEwQkVCRTEyRkI3M0FEQjFDNTk4NkY5MEE1Ci06MTA4RjkwMDA3Rjc1N0QwRDkyMjkxNUZCREZFMkUwNzFENDJEQ0JFRUJDCi06MTA4RkEwMDBBRUMzN0M4M0FFREJFNDcyNDQ0OUVFNTJBRUU3OTQ2NTE3Ci06MTA4RkIwMDA4NTE0NTdCRDU2RUJENzBDRkY0MDdCNDdGN0Y4NDk2NTQyCi06MTA4RkMwMDAzNEVFNzIxQ0Y3QzI1QUQ2ODM3MjIzMDNFRDA0OEEzRjMzCi06MTA4RkQwMDBDODEyQzYxN0IyOUM5RDAxOENDQkFFMTczQTFCMTdBMUM1Ci06MTA4RkUwMDAxRUJEQzg0REZBOTYwNUU2NUFDNkE3RjRBNzFFN0ZEMjQ1Ci06MTA4RkYwMDBFN0NEMDI5NTIzRDQ2RkE1RkE3MjVBNjczM0RBNDlBM0Y1Ci06MTA5MDAwMDBBRUVGRUNCNEI0QUI3RUE4RDk1NTMwQkZGNUMzRTIzNUIyCi06MTA5MDEwMDBFMEEzRjg5NjhFREZBMUUzRjBGNUFCMEIzNzBCODhFRkZBCi06MTA5MDIwMDBENDMyMTgxMjU4MzIzNURDNDk5QkFEQjZFMjM4RUI0M0U2Ci06MTA5MDMwMDBGQkE5MTRFODg1RkE3QkREMzJFRTM3RDhERjVBMURBRTg2Ci06MTA5MDQwMDAwNzkxMUVCRjJFNUM3QUJERTRFM0YxN0FCODdGNDZGMTRBCi06MTA5MDUwMDAwRTM3OTc1QkY0MDFDQUM3OUVGMzVBRUUxRkU4Q0YzQjY5Ci06MTA5MDYwMDA1QTY0NTUwMkZENzM0QzU2MzIzMDVFNzg4N0E2MDcxOTU0Ci06MTA5MDcwMDAwQjA1MkVGM0ZDRjdENzFCOUM0NzlDQzczQjRERjVBMzc0Ci06MTA5MDgwMDA4Q0QzM0QwQkI4QzhCRUMzMzA3QzIyRERCQ0U2RTNGRTBBCi06MTA5MDkwMDA2ODQ3NzZGODM5MkUxRjQzMjFBNDZCMjhCRjgwRjg2N0Y0Ci06MTA5MEEwMDAyRTI4N0JBOEJDOUZDQUYyNDBGOTY1QUExRkUwRjU5OTVCCi06MTA5MEIwMDAyQzhGMEFDRkQwRUUwRkQ0NEUxQUU4RTc0REVBRDczREY5Ci06MTA5MEMwMDAzMEVFNDFGQUVFMUIyOEZGOTFCRUU3RjNGQUEzMUQyNzBECi06MTA5MEQwMDA2MTVERjlGQzdCNDU5QUZGNjc5MjlBODFGQkEzOTc0N0Y0Ci06MTA5MEUwMDAxNzUzOUM2ODdFRjQ1QTdBQUU2QjkxRUIzMDFFRjc3MjgwCi06MTA5MEYwMDA0QjdGN0IzQjNDMkY5RkJGNTg0NkJCN0ZGRTkyN0I2OERDCi06MTA5MTAwMDBGRjVFRUZGRjUyRjQyQjkwREYxNTY5MDZEOTQ1NDVCNjk3Ci06MTA5MTEwMDBGMDM2RjcyMEJGMERDMkQxQUVFNTk5RjUzNTIwMURCOTY3Ci06MTA5MTIwMDA1NEQ2REY1MTBFRUQ2QjNFNkQ2RjM3RTQzOTc1NTJGRTRDCi06MTA5MTMwMDA0QzhBMjI3RDlFMTg1N0Q3RTVFMEM3MEVGNTczREZFOTBDCi06MTA5MTQwMDBEMUIxNjlCRThDRUQ4NUYxM0Y3MzE3Qzc2MzQ0RDdGNTg0Ci06MTA5MTUwMDBCMjE1QkZFOEYzNEVENkJGM0VFRjY0NzI0NkM3OUZGRTFFCi06MTA5MTYwMDA3RTdENzE4NUNDRjM3RkUyMDZCQ0E0OTQzNDUwQkVDRkUzCi06MTA5MTcwMDBBNTgyMDZBN0M3QTVGMTFCQUYzNzBCQzY3OUIyOENFODRECi06MTA5MTgwMDA0MzQxRkE5REE1Rjk3MTY2QkRBMDhGRkJCMTIzNTJFNDVFCi06MTA5MTkwMDBGN0UzN0UwMzYzQjc1NTU4RTA3Nzk0NzgzQkQwQjIzNDU5Ci06MTA5MUEwMDBEQzYwNDc3OURDOUQ0MkZCRjc0Q0E2MzhCRjVFQUYzMUVGCi06MTA5MUIwMDBDOUZDMkZGMDczM0RDMjlDMkFDRDY3QzNFRDE5NzFCNDcxCi06MTA5MUMwMDAzQjM2MzRGRDVBQzZFMDRBREE4NENGQUE2MkY4MTRGQTc0Ci06MTA5MUQwMDA0RjJDNDJGOTcyQkI4N0YyMzExQTlCNEU1NEI1MjZGNERDCi06MTA5MUUwMDBCRkYwOTk3RjczNjFCQ0I3NzFDMjZBM0ZDNjVEMTYzMjJBCi06MTA5MUYwMDBFOUIzQzQ3QzA3RjNCODhERDExQjg4NkU2M0FENDJBMzdECi06MTA5MjAwMDA5NUJGRjU2NjM2RTdFQjg1OTgyMjIzNTI3RjQ3MTJGNzI0Ci06MTA5MjEwMDA5MTlCOTQwQTA3QzYyNzlBNjJDNkZEMUNEMDkwMEVBNEEzCi06MTA5MjIwMDA4RkM1RUJDQ0VGMTNGNjczNDRFQzlGRDFCQzYzQjg5OUI4Ci06MTA5MjMwMDA4NzdBNkY4RDhERTg2RDBCRTAwREZEQzA0MjUwOTdGODc5Ci06MTA5MjQwMDA3QzMzM0I0QkUzQzc1RUMyRTc3RjM3M0M2RjY2Q0I3QzJBCi06MTA5MjUwMDBERkNEQzU2MjY5NTk4Mzc0OTMxM0U5NjRBODlGM0M5NTc3Ci06MTA5MjYwMDAwMkVENkZGQTNDN0E3RTQ0MzdFOUE5N0JERDdBMTlGNDg2Ci06MTA5MjcwMDAxNkUwM0Y1Q0E2RDkzOUM1RkNCQjBEQ0JFOEZGQTRGNUQxCi06MTA5MjgwMDBFRUI1MDExRkFGQjlFRkU5OEIwM0UzQTFCRkIyNDhDMDUwCi06MTA5MjkwMDAyNjUzRjkwNUM5OEZGNjE3MkZCM0Q4RDMyRkVDMjU3QkFBCi06MTA5MkEwMDA1NjNFNEIwODAxRkZCN0VGN0VFMUI5MDJGMkU3MzU3QjhFCi06MTA5MkIwMDA2Q0Y3MEI2NDhGRTk2NUM2N0ExOENDQTcyQjc1QTBBQzQ4Ci06MTA5MkMwMDBCQTAyNTAxRTNCNTA4RTYxNzlBQjY2QzdBRkI5NkZGN0RCCi06MTA5MkQwMDAwQkVENjQ5Rjg0NjNGRTA0M0Q1OUM3Nzg3Q0Y5OUJENkVGCi06MTA5MkUwMDA4RjVEODFBQjNBMzE5RjI4NTY2QzIzN0YyRkQ1QzQ4Rjc5Ci06MTA5MkYwMDA4RkZBMUQ1NEFGMjgyNzcyMzdDMjMzRUJCNjdFMDlFM0NECi06MTA5MzAwMDAwRDhFRTBFQjNFOTQwMzYzOEE4RkE5NjM4MUZFQzdENDgwCi06MTA5MzEwMDBGMjM0MTk1NkNBQzdFRDJBNUU0NTc2NDM5N0I2MkVGMDQ5Ci06MTA5MzIwMDBCRkQ1QThGNzA2RDdBN0Q3QjQzRTdDM0RDMjk1QkRCNDNDCi06MTA5MzMwMDAzRTlFQjI1RTVBMkYxQjk2MjlFRUM3RjdFMzJGQTlFNDkzCi06MTA5MzQwMDBGNjg2RUNFNEZCMEFEQkZEOUMxRjc2RjhCOTdGQkJDMzE1Ci06MTA5MzUwMDBDRkZERDM4Q0UyQkIyOUJFOTMzMkMzNDZGNTMzQjRBNzBECi06MTA5MzYwMDA1OThFRUZGMDRCOUEzQ0U3RjhEODFEOEM3NEZCMTNFQzQ4Ci06MTA5MzcwMDA1Njc4MUYyRUFENDRGOUU2Q0JDMjdERDZCQTYyRTkyNkY3Ci06MTA5MzgwMDBBNEU3OUY2OEZFMjlBQ0QzNURCNDRFNDVCRUQ0MDg1RjA4Ci06MTA5MzkwMDBCN0RGRjhGRDE2RUI1NjNBQkE3NTdCQTMyNTQyRjIyQUUxCi06MTA5M0EwMDBEOUJBNUQzRTVGMEM1QkM1REQ1RUQwRjBGMDQ5RTM5RjRFCi06MTA5M0IwMDA3RTg0RDM1OUVFRUE3N0UwM0VDQ0ZBRTI0RDg2QkM2QTcxCi06MTA5M0MwMDBENzhFRDkzRDk4MEJBREU3NTVBRjRFNEJBRjQ1Qjk2RDM0Ci06MTA5M0QwMDAxRUY3OEQyRkZGQzM4N0Y4OURGOTBGQTdBNTdDRkM1NEJFCi06MTA5M0UwMDA5MzhGQUZCNzM0NTIzQjU4NjA0NUNBMjYzOUMwNzhERUY4Ci06MTA5M0YwMDBDQjQwOUU5ODcwQ0E0OUQzN0IwM0YzRDBBRTI0RDY2Nzg2Ci06MTA5NDAwMDA2QzZFRjgzMEVENTcyRjBBODgwQ0Y3QzcxNzMyNjM1RTgxCi06MTA5NDEwMDAxOThCRUE3OUMxM0MwRkY2MEQwOTVDNTM0MEUxMUIzMTExCi06MTA5NDIwMDAyMTA0OTg2MjRERDI2QzVEQUUxOEYyQzNFNkNEOURCREFECi06MTA5NDMwMDAwRkY3RTExNzZCRkJGMDIwNUYwQ0RGOTc5OEYyQzZBRUQ5Ci06MTA5NDQwMDA2ODZDMEEzNzY4REY4RkQzREY3MUMyRDM1Qzg1REI4RDMwCi06MTA5NDUwMDA3M0RENkVEMkFGRjNDMkYzQzMwRDA5RkI3MTZGRkU5N0RDCi06MTA5NDYwMDA2ODk5ODc3RTQxQjY4RTk3NzBCOEExNjQyODVFMTY4NThDCi06MTA5NDcwMDAwNTg3QUM4QzhDMUYzMzNFRUEyNDhFQUYyNjBENUY2NkM5Ci06MTA5NDgwMDBGQzk4RjFCMDc4RUU2QzVBN0ZGM0ZDREY3MDg1MDkzRkYxCi06MTA5NDkwMDA2RjAwN0UzMDVGRDg4QzBGQzYyMjk3MjBEREJFMzk1RjBCCi06MTA5NEEwMDA2NDY4MUY0RjE3NjdEQTMxNEY2MEYxNkM4MTYxN0VEMUJDCi06MTA5NEIwMDAxMjE2NEFFN0Y5QzFFQUFDNjkwOUYwOUFGMTY4QzZENzExCi06MTA5NEMwMDBFMkE3NThBODA3RkE1RDdDOUY4N0Q2RUY1NTBEM0Y2MjRCCi06MTA5NEQwMDBDRjVGNjk1RTYxOTg1NzA3OUZENzExOUVCRjJBRDNCQ0EzCi06MTA5NEUwMDAyRTUzQ0I5RkY1QzFGNzQ4M0I0ODVCQzU0QThGRjBGOTM3Ci06MTA5NEYwMDAyQzgyRjk3NEM4NDNGNUM5MDk1NkRCOEM3NEIyQzQ5NDQ0Ci06MTA5NTAwMDBCNzYwODZDRjBDRkY0Qzk0ODM5Mzg3RUVFMzU3NjQ2QjcwCi06MTA5NTEwMDBGQkY4MTM1OTQ4REJDN0NGQTA2MzBEMjFGRkIwNzkwQkNGCi06MTA5NTIwMDA4MzdDQ0VFOTZCNjE3NEY2QzA3OEQ4QUZDMDIyMDM2NTQ2Ci06MTA5NTMwMDAxOUYwM0JGMzc5RUZDNjc5RjBFRjU1MDE1MUMxM0NDMTA5Ci06MTA5NTQwMDBEOUYzQzdBREMxRjk4NzU5MzhBM0E3MDhFREZEN0UzQjE0Ci06MTA5NTUwMDBDQTkxQ0IxODk4QjFEMEVFNDI5ODI0RUFEQjcwNDMwQTQ2Ci06MTA5NTYwMDA5NUY1N0U4Rjc1N0U2QTI3M0QxRTYxQ0REQjY5RkY1REI3Ci06MTA5NTcwMDBDOTk4M0IyMUI5N0M1OTE1NzBEMDc4NjYzQjY1NjY3OUVFCi06MTA5NTgwMDA0OTA2Q0EwQjMzM0U3NDNDQ0Q0M0JDQTQxMTVFMjY5RUYzCi06MTA5NTkwMDAwRTVFNUU0NDVEODVGRTJDQzZEMTYwMURGQkFGNjVFQ0EyCi06MTA5NUEwMDBBMUYyQzFGRDYzOTZBRjcyN0IzMjlCRDFGRUZGQjVEOUFDCi06MTA5NUIwMDA5OTlBREREMTRDNzE4NzA1OUE1RTM4NjQ2NzhENEZCOEYyCi06MTA5NUMwMDBGOTNFNzI0NTgyN0NGQzU2QjBFRURBRUMwNDNCNTVERjg2Ci06MTA5NUQwMDA0Nzc2QjMzRUMyREY5NTJFNzc4RjM4OTFFOEVFQTMwMTMwCi06MTA5NUUwMDBGQTIwRjlBNUU3NkI0NjI4NUY1M0NDNThBNjUwNUMyQ0FGCi06MTA5NUYwMDAyRDdEMjJDQjAwQkI5OEYxNzk4MzFGNzM1M0I2MUZERkZCCi06MTA5NjAwMDAxN0M2RDEwODk4RjlGQzRGRDdDRDUzMDZENzZERkQ1NTM1Ci06MTA5NjEwMDBEQjNCNTExRUE3MkNGOTU1OEMzQTU3NzgzRTQ3OUFCNjNBCi06MTA5NjIwMDA2RTc1REFCQTBERDhEMUE1RjAzRTAxQkZDNzNBMzUzQjA5Ci06MTA5NjMwMDBBQzU0OEJFM0UzMUYyODFGMkI1NkUzQzNGOUFGRkEzQTcwCi06MTA5NjQwMDBBNjk0ODJGRjYxQzgyM0VDMjQ3Q0VCRUIwOTRFNDQzRkQ3Ci06MTA5NjUwMDBGMjY1MjQyMDUxQ0VCMDhEQjlDODNGOEVEQ0MyRjMzMTAzCi06MTA5NjYwMDAxNjMyNjUyQkU2MDcyRDhDREE4RjI1RjYxMzA5NEEwNDhFCi06MTA5NjcwMDA0NzY0N0Q4QTE2MzcwOTUxM0Y4QjgyQkMxRjU2Q0FGRDRECi06MTA5NjgwMDBCQzAxQkE4RjQxRkI4NEZDNDc5QjBCNEM0OTZDOUZDOUMyCi06MTA5NjkwMDA0MkU4M0Y0MTdGRDlBOEVGRDlCQTg0NzFDNjBFMUQzNzgxCi06MTA5NkEwMDA1OTdGRTY3NkEyQjY3RjJCM0E0M0ExNTA4MjlDREVBRTZDCi06MTA5NkIwMDBEOUNGQzcwMjk1RERCNkIxQzlGMUI3QzhFNTU1QTU4NEM0Ci06MTA5NkMwMDBCQ0Q4MjM0MTU3QTM1NTVDNENFRjRGRDdERjAzNzYyMjFDCi06MTA5NkQwMDBCQkU2QzU0NDNCRDFFRDY4N0FGMUI5MEIxMkVDNDRENjM4Ci06MTA5NkUwMDBGNDIyRUVGQjdGNTUzQkYxRTVFQ0E2MTdEQjYxN0U3RkI0Ci06MTA5NkYwMDA3RkZCOUYyODdGRkM1ODMzMDg0Q0MwQTMzNzNBOTUxRDQ5Ci06MTA5NzAwMDBGNUEyN0M5MDQ5N0YxNTM2ODI0Nzg1QzlERjkyMzIxRUNCCi06MTA5NzEwMDBFOTNEMjU5QUE3NEEwOUY5QjI2RjY2MkIwNEJGQjc1OEVECi06MTA5NzIwMDBBNUZEMzI2OERBOERBRUI4NTcwQTA5ODhCN0JCQjVCODVGCi06MTA5NzMwMDAxOTEwRUVGOEQ5OUVDNDc2N0NERUZBNzg0RTk3NEM3MEZDCi06MTA5NzQwMDAzOEY0RjE1OEE4OTVGMkVCNjczMkQyMjM3QTFFODhDRTBFCi06MTA5NzUwMDBENzdBM0Y0N0IzOERGMUJBNTFGMEYzRDE2Q0ZGNTA3RTA5Ci06MTA5NzYwMDAxNkM1RTY3NzZGNDczOUYxQTI0ODdFRDg3NzAyQjdEMEExCi06MTA5NzcwMDA3QjczM0NFMEUzNkM2RTFGOEUxMTIzMUZBMzVDRTg2RENFCi06MTA5NzgwMDA3Q0VEM0IzNzQzQkIxNTNCOUMyMTU0QzNDQkJGRjdFMTdBCi06MTA5NzkwMDAwRkFCMTRDNDEzNUZGRkY5NEIxNkRGNTc4NUYzMkE5MTAzCi06MTA5N0EwMDA2NERBREYyOEUwNzExODQ3QUI0MEZFNkI0QTkxMjNCQ0I2Ci06MTA5N0IwMDAwMzlFODc3RDc1QjkzOTA5NzAxREY2MzU1MDc5RUMwQzFCCi06MTA5N0MwMDAwRUQ3MzFFOEIzNDNDMTc2OUIxQUM5NUZGNEYwN0RFRjQxCi06MTA5N0QwMDA2MzhBOTJDMTQ4QUUzMEIyMjc0NDI3N0ZCQTczNzg1QzVGCi06MTA5N0UwMDBEODlEQzNFMzc5NTIwRUM3QjdFQkE0NDA4Qjg0NzREREQ4Ci06MTA5N0YwMDA4Q0ZCMTY1MjhDRjJBMDVEMjcyNTdBRUYxMDA0NEI3QjcwCi06MTA5ODAwMDA0REVGQ0Y3NTEyODQzM0UyMkJDRERDREU0MUVGNzEzRTlDCi06MTA5ODEwMDBEODVFRjQzMjgzN0RFM0NGRTE3NkIyN0YwMDhFMzQwRUUyCi06MTA5ODIwMDA4N0Q3REM0RjNBN0ZBRkYxOUYxOThFMTVEOTUzODM4OEM0Ci06MTA5ODMwMDA5N0MzM0UzNTM3ODdDNzUxQjgxQzc2QkY3MDQwOTgzOEZDCi06MTA5ODQwMDAxQTc5Q0NGM0Y1MkYwOTRBMkU4QUVCREQyRUM0NEI0MDUyCi06MTA5ODUwMDAzRTc1OTQxRTVCNDM3MkFCQzhENThDRTdBNDEyRUMyNzBGCi06MTA5ODYwMDA4MTlGQkJFMUU3MkEwNkVERDNGRTY5NzMyQTMxN0FDREU5Ci06MTA5ODcwMDA5NDA3NDI0M0VEQUQ3NzJCNEZDQzlCODMwNUVERkNDNEExCi06MTA5ODgwMDA5NUJBRUM4RDQxMTlFQ0I5NzdCNDYyOTMzMjc2MkQ4Njk2Ci06MTA5ODkwMDBGQTJGQURFNUY2RDk2MkI0Q0Y0MjI0QjcwQzc2OTdEOTRBCi06MTA5OEEwMDAzRTczODNCRTlGMDM3NEIxMjQyMEM5NDgxNzY2M0JBRDQ1Ci06MTA5OEIwMDBBMzcyMUVEOTM1MUQ2MEQ3NjBCRUY2NTAzQjhEQ0I5QjgxCi06MTA5OEMwMDAzQkEzMzZBNjQyQkQ5NzZCNDVGMjMzNUUyRUVEN0JGRTgxCi06MTA5OEQwMDA0MkQ0MTczNTc2ODVGNDQ1NjlGRjlENzNFOEZCMjQxQTU5Ci06MTA5OEUwMDBDN0FERjk3NzUwOUY5Rjc3MDhBNUM1NEJFMEREMkJCNTM1Ci06MTA5OEYwMDA0N0REOEIxM0Q2RkJFNTlBQTNFM0QxMkZEODlBMjRCRjdCCi06MTA5OTAwMDA0MjhGRDNFQ0JEOTVFNzdGQkQ3QkFGMTA3NzIyREU2RTMzCi06MTA5OTEwMDAxMzZERDhFRkMyNzIwRkU1QUQ0RTEzREQzNENFRTI4RDdDCi06MTA5OTIwMDA2MkRDNDkzODU0RDNBNzY1MEZEQThENENBQ0NEN0UwRDdGCi06MTA5OTMwMDBGMTcwOTc5REUxRjlDMTgyOUJGQTBDNzZFRUMyQThEMTM1Ci06MTA5OTQwMDA5RThCMzQ4M0ZEQTM5Q0JFMUQ2OEI2RkZDQzc2Q0NGMjAzCi06MTA5OTUwMDAxQ0NEN0VBOTYwMTU2OEJGQkNEQ0IyOTMxRDJEMTlCNDY3Ci06MTA5OTYwMDA2MzY2MjVEOUZGRDZFRDk4RjM2Q0Y1REZENUU4OTlGNjU3Ci06MTA5OTcwMDAwRjY2NDlENkZCRkI5NzY4RkUyOTBCNzE3RjcwOUFGODNBCi06MTA5OTgwMDAxMUFERDdCMTkwQTQyMEZFRENCN0JDNDBFNzNBRENGRkI0Ci06MTA5OTkwMDAyNTg2QURDNkJCMzNDN0ExRUZDNzkxQkNERDVBOTE0NjQyCi06MTA5OUEwMDA3OUQ3N0I2RTNEMkJBNzhGRDY0QkI5QkYxNkQ3RkYwNTU2Ci06MTA5OUIwMDAzQkM5QzE2NEZBMkQyNTJBQjI2Mjk4OTgyNzJBRDA1MzUwCi06MTA5OUMwMDA1RkNGMzFEMTE0OTZBODFGQzYyNEM5NTNGODcxMEU5RkRBCi06MTA5OUQwMDA4N0ZGMzY2NjQzM0YzQjMzQzY1NDJCQkY1NEFGMDdGRTY5Ci06MTA5OUUwMDBFODc0OEM1MTQzRkQ5RTRDODBFRjg2NjIxQkM1RkQ3NTZCCi06MTA5OUYwMDBCRjM0QzVDRUNGRkJEQTc3QUQ4Q0ExN0YzQTA2RTA0MzBBCi06MTA5QTAwMDAzODE0ODAwRkU1NzA1MTM0OERDQTYzQTM1RTdBOEU4QjUzCi06MTA5QTEwMDA2NkQyQjMzODlBNDdERjRCQTJFM0U4Nzk0NkI0ODhERUQyCi06MTA5QTIwMDA5RjE5M0Q5QkNBQTVEMTQ5RjQxQzFGMkRBN0U3NTlEMTA5Ci06MTA5QTMwMDBGM0U5NzkzNkU4MkRBQzU3MTZBREEzRTc4NEU4M0ZEM0I4Ci06MTA5QTQwMDBGQjg5RDEzOUY0M0MyNzNBOUI5RUExRThCN0U5N0I3OUExCi06MTA5QTUwMDA3NDMxM0QyQkEyNERGNDdFNTJGNDdBMkE1NzQ2NkZBNEZFCi06MTA5QTYwMDA3MjU1NzQyNTNEQUJBM0RGQTdFN0I5RDEzNjdBRDY0NDRBCi06MTA5QTcwMDA1QkE5REVFNEU4MDYyQTlGMTdCRDg3OUVFNzQ3MzdEMTNBCi06MTA5QTgwMDBCMzM2QkE4NUJFRUJGQzlDQTZEOUQzMkYwNUI2Qzk5NEQ0Ci06MTA5QTkwMDA2RkNGN0FDQTUwM0UyNkUzQzM0MzlBM0NBRUNGNTFGNzBDCi06MTA5QUEwMDAyMkZERTlGNUY2NkJFNzBFQ0NGNTBFRTQwQzlGNzdGMzlCCi06MTA5QUIwMDA5QUI2NUU5Rjg0OEVGQzA4OEZEM0VBRUJCNjNFMzA3QzZDCi06MTA5QUMwMDAxQzgxOTVGOTQ2RDhCN0UyRjM3QjI2NDdFMUY0MkI3NTY0Ci06MTA5QUQwMDA5MkJEQjFCNTk5NTEzRTk4QTdCMjU3NDA3OUQzMTU5MDMwCi06MTA5QUUwMDA2NjU4RDE5MTNCQzBGM0MwOEE3MjIyNDc1MTdGQjg4MzM4Ci06MTA5QUYwMDBFRkVEQzVGREE4NEI2M0JEQkVBOTQ4MkYyMTVGRUE1NDE5Ci06MTA5QjAwMDBFODZGNENCQjhEREM2Qjg1QzkwMjk2OTUwNjI2RjdCMEQ1Ci06MTA5QjEwMDBDMTc4MEVEODU3MDZCRDI2MDU3NEZCQUQ3N0U2MjQ4NEMwCi06MTA5QjIwMDBFN0FDRTIwQUIyNUZCNUZERTRGREI3OEU2NUU4Nzc2QzlECi06MTA5QjMwMDA3NUY0MDgxMkNBQ0I1NThDMjVEQUUxNUJENzJFN0EzODNBCi06MTA5QjQwMDBGMTlDODYxNEUwRkMzOTY2MUQ3QjFBRTM2NDQ1OUQ0QTRFCi06MTA5QjUwMDAzRDlFMjcxQ0I3NTk3RDFBNTMzQzRCRTI5MUZBNTQyODdECi06MTA5QjYwMDA5RkY5NDhFQzY5N0M4RUVGOEVEN0E3QzFGM0VDOUQzRDQxCi06MTA5QjcwMDA0RkEzRjg5OUQwRDM1N0VGODZGMjM5Q0ZCMTY3MzBGQ0I1Ci06MTA5QjgwMDA1NERFQUI0Q0Y1NDA3OUQyMDFGNTE5REMyNkE5RUE4QkZECi06MTA5QjkwMDA0QzRENTcxMDlFNzg1QjNBQzBCM0Y1MUQzMEI0QTA1Q0I1Ci06MTA5QkEwMDBGMzUxQTcwODZFQzlFMEZBODNEREY2NDRDMkJBQTQxNEUzCi06MTA5QkIwMDBGN0FBMjJGQzMzRkYyNkI5MUNFNUVDNTZBOTJGMjVCM0UyCi06MTA5QkMwMDA2Q0U4RkE3NEUxQkM3MTlFQTA1N0I2NkJGQkU4NzJDMkY4Ci06MTA5QkQwMDA3QTg0MDI4MjFFMEZGNDA1MTJFMjgxNURFREFGNTIzQ0UxCi06MTA5QkUwMDBCMDJCNTVBRUMzNTA1N0ZGMzQyNjNGQTQyMDFENzMzRjAyCi06MTA5QkYwMDAyMTc1Q0Q1OEQyNEYzQUREMDE3RTBERjZBNDE0RTA3NEU0Ci06MTA5QzAwMDBCNzc1QzBERUI0QzY2RjA4RjE1QkY1QkYwN0JGRkY5RTM2Ci06MTA5QzEwMDBBM0M5QUYyNEY4N0QwOUU3MTExQzk5OEZFQjAyOUMyRjkzCi06MTA5QzIwMDA4MThGMkYwODU0MjVBRjc3QjU4NjdGMzM5RUI3NEFGMkQwCi06MTA5QzMwMDA1OTg0MkYzN0IzQzVDQTA3RDdBRDQ5QTNFRjkxRjBGQUJFCi06MTA5QzQwMDBFREZGNjU3NDVCMTMxODFFQUZBQ0QyQ0JFM0NDNUE3RTJDCi06MTA5QzUwMDA1QTMyNzlCMzNGQzkzOTkxRTZDMDEwMzlDN0UzQTUzMjBBCi06MTA5QzYwMDBDOEI5NzFDOUU1NUM2RDYwMDRGOTk1MjRERkUxRjY4MDNGCi06MTA5QzcwMDA5RUVGMTBGRTdFNjAxNDcxRkQzQjZENzIxREU2QkJDNDRECi06MTA5QzgwMDAyNjMyRjIxM0MwQkU2Q0M3RkM5RDMxMzFBNTgyQjZCMTNECi06MTA5QzkwMDA1MDI4MjMxRTJCQ0UyNjNGQkQwOEVDMERBOTgyNjFBQUI5Ci06MTA5Q0EwMDA2MzBGM0UyRkE5Q0NCNDJEMkFDM0JDMDY4RERGRTRBNkRBCi06MTA5Q0IwMDA0MDIyQkZFOUZBN0U5MDFGNzVCQUM4RUFBMjczMTY0MDI3Ci06MTA5Q0MwMDBBRjk4NEZCODRCQzNEMzYwM0YzQzFFQjFGNjk2RENBRUE1Ci06MTA5Q0QwMDA4RTA0MzlEODE1Q0FBM0IyNUUzRjE5RkRCRUE1N0QwNzEzCi06MTA5Q0UwMDA3OTQxRkJGRDk3RDQ1QUU3OUJGQzZCNDBENEVDOUM3RUZBCi06MTA5Q0YwMDAxNUU5M0MzNjg1Qzk3NERFQjlGRDA4QzlBNzRDOTA0RkZCCi06MTA5RDAwMDA0MjExMEYwRkUxRjhGOUQxRDQ4NzMxNEVGQkVCNDBCNjg5Ci06MTA5RDEwMDAyNkNGRTVENENCM0RGRkZGRThCOTAzN0M3NUUyQTc1QTE3Ci06MTA5RDIwMDA3OTBGOUVBQjE4MDM3QTQ4NDEzOTU5MEJCMDU3QTI5RTYwCi06MTA5RDMwMDA3M0QwQkEyQjhDQUZBMzUyQ0JFMjNEMDJFMUFEMDdGRDRECi06MTA5RDQwMDBFNjk4OEQ5RkNGRDhFRkU4NTY0OUVGMzgzMjY1Q0MzRjgzCi06MTA5RDUwMDBEOUU1OEZFQzBERjg5M0YzODU5Q0E2OTRFM0EyRkU2MTAwCi06MTA5RDYwMDBGMzc1MzNERDQxQ0NDQjkxNTNCMUZDMkE5NEVGQUNDMUY4Ci06MTA5RDcwMDAzQ0ExM0VBNjk1RUY3NDRGRkVFQUYxODczRjA0QUVEREFECi06MTA5RDgwMDA4RkZCNTRENTAxRjUzNUE0NjdBMEVCM0YyMDVDRUE5OTIxCi06MTA5RDkwMDBCMjQ0RjFFMTUxRUUzRkU5RkMzOUM4NEY3MkI5Q0U0RjAwCi06MTA5REEwMDA0RDY1MjQwRkRGQzVGRUY1RkU5MkQ5MzdGRkEyQzlDRjVFCi06MTA5REIwMDBGRUMwRjBGNjhENEVGN0E3NkRERjY4RjBCRTMzMDJGRkYwCi06MTA5REMwMDBDRjdDRkVCNUNEREJEODYwRkNDRjkzRkI0NkFGQTRBMDIzCi06MTA5REQwMDBCRDNEOTUxRDlEODQ3MUFGNUU0RUY3OENDN0Y5NTQ4Q0M3Ci06MTA5REUwMDBGRjAxMURBNDU0QkE0QzcxNUI2MTg2MTY3NzE5MzY1RTZCCi06MTA5REYwMDBBQkM3OTNGNTc4OUYxRUQ3NEJEN0U4MEEyRjBDNDAzRDkxCi06MTA5RTAwMDA5RTVFMjM0QjhCQThCRjNFNzYxOUY0RTcwOTcyM0NFOUFFCi06MTA5RTEwMDA3QzhENzIwQkY3RTc1RDZCQjJBNEIxNjU4M0ZEODJBNDA0Ci06MTA5RTIwMDAyNDM5RDVENUM4RTQ4RTRDQkVGRjlBMDFGMkE1NzMzNTBFCi06MTA5RTMwMDAyMzNGMkZGNkIyNDhGRDFGNTc2RDFGM0FBMURFRjE0QUFFCi06MTA5RTQwMDA0MDIwQ0EwNTk1Mjk3MkI2NzYwRTgxODg1QzI2N0E3NUZGCi06MTA5RTUwMDAzMkQ2OERGRTM2RkI0MUM4RTVDMDM4RjdFNzAyNTMwMTI0Ci06MTA5RTYwMDBFRUZEOUY4QkY0OTQzMEMyMEQ4RDJFMDk5NTg3QjA3MTU1Ci06MTA5RTcwMDA1RDQ2NkQwOEY3MDNDNUEzNTAwNjM4MUIzMjZBMzNCMDQwCi06MTA5RTgwMDBCQzdGRkZBNDEwQjM4OERGNUQxMTY5MzJDNDk3Q0M3ODIyCi06MTA5RTkwMDAxQUE4Rjc5RDM1OTRBRkIwNjU4NEZEQ0Y5QUEwNDNCNzVCCi06MTA5RUEwMDAzQjJCODI2OEVGNUNENURGRUU1MDA2RjczRkY1N0RCREJBCi06MTA5RUIwMDA2MEYxOTMxN0UxM0QzQkMxNjVEQ0ZFQ0M2NUYxRDY0NDEyCi06MTA5RUMwMDBCQjI5NjE3RkIxMTZGQkQ5MzJCOEJGRDg3QjQ2RTJGRTExCi06MTA5RUQwMDBFMjhBRENEQkYwRThGRUJGMENFQzJGNDZDRUMxRkFBQTJBCi06MTA5RUUwMDBCN0JCMUNFOTUzQ0Y4N0RERUZFMEZCMDA2Q0QyOEIzRUE0Ci06MTA5RUYwMDBDNTgyM0UxNjk0M0ZFQjI3N0FENEZDODkyMURGQjVCOEEyCi06MTA5RjAwMDA5OUQ5MEY5RTE1MzRDNkYxOEY4N0U2NjRGNEUwQzcyNDEzCi06MTA5RjEwMDA3MTdDM0Q5RUE3RkJDMTE4QUY5MzJERjlDRTg4N0Y3RDQ0Ci06MTA5RjIwMDBGQzA1MDJGNzYzOTk1RDIwNzlBN0VCNEQ5MDI3OTFBMDdFCi06MTA5RjMwMDA5RjlBNTEzQzVBNzUwQTk0QUY3NTNDQjQ1ODIxQkYyODdBCi06MTA5RjQwMDA4OTdDMTlEODM3NjAzRDI1NTZGQkFDMEJCNEJDMTNGM0E0Ci06MTA5RjUwMDBGQjVCODI1QzNGMkZCMEYzMzhBNUIwNzI0OTA0Qzc1RDRDCi06MTA5RjYwMDAxMDc0MDlDRTA0M0JFOUVBMjBENzVGRkFGRThCMjNGNzkxCi06MTA5RjcwMDA2NDE1RTJEOUUxODgyODU2RjMzNkVGQTM1QzFENjQwMzJCCi06MTA5RjgwMDBFN0RENDIxNjdBMkYxOTlFMEVEODNCNjk1RkVFQzAxMkFDCi06MTA5RjkwMDA5MUNFRUIxRThGOUM0QkY3M0UyNDkzMEI2RjIxRkQ5NENCCi06MTA5RkEwMDAzMDE2Q0VFNUUzMERBRUEzMzVERUY0M0MxOUYzN0VENUQ1Ci06MTA5RkIwMDBDMEY3QTYxNDNBN0Y2M0NFOTc3OTRDQzNEQjNFMEQyRkQyCi06MTA5RkMwMDBGRkRERjkzMkZCMzRGQ0JEQTRDNTY3RjQ3OEQ2MjU0OTIyCi06MTA5RkQwMDBFNEZENzlCNkZBNDc4ODhFNDY4OENCOUNBMUU3RkI2OEZBCi06MTA5RkUwMDBGODYxQ0Y4Q0E3N0IzOTM2RjREQUUzMjkwMkMyNjNBMzg4Ci06MTA5RkYwMDBGRENCQzYzRjg4MjFCNEJGRjQ3NjZFOTNCQ0QwRjM3NzE3Ci06MTBBMDAwMDBGNDcyREE0OTgxQzUxM0Y2MTFEMkE0NkU4QTkzQTY5RDIzCi06MTBBMDEwMDA5NEU4QkQ5OUZGRUUzMEYxOUZCRTJFQzlENjU5NUYxNzY3Ci06MTBBMDIwMDBGM0ZCMkU2RDVEMEUzNEZENUIwMENGQkI2QzQ4NjE5NjdCCi06MTBBMDMwMDBGOTQ0NUYwNDhERjE3NzczMUU0MEIyN0RFRTgzNUFCQjA1Ci06MTBBMDQwMDBFMzkxQzkzOTI4OTcxQjFEQjE5MkQxRjBCRDhFOUYzNzdFCi06MTBBMDUwMDBCRUZDOEQwQkY5NkNDMzQ5RTcwQ0FCRjU3ODM1QzhGRDM4Ci06MTBBMDYwMDAxNkQwQTdFQjEyRjc0MTNERjM1RjZCQzc1RUQzMjRFMzM1Ci06MTBBMDcwMDAzRUE4QUU0RkY1N0REMEI0NEFGMzNFOUFGNTNFRTgwNkQxCi06MTBBMDgwMDA2NjJEMUY5M0VEODMwRUQ5RkZENEY0RUQ4OTYwOTJGRDA4Ci06MTBBMDkwMDBDRkIyRTFDRkIzRUZENkU4NzlBNEJDOEYyQjFDRkNCQ0M4Ci06MTBBMEEwMDBBQ0Y5RkQ4QjAzRUJCMEJFRTA0N0MwNTczNzM2Mzk2OURBCi06MTBBMEIwMDBGN0E5QTdDOTQ5N0NCOEI4Mjk4NUUyQjI4QkNCNzlCQzhFCi06MTBBMEMwMDA3N0YxN0Q4MkI2NUY2NzhDQzNCRTA0RjI2MjE5OUVBRkUyCi06MTBBMEQwMDBEN0Y0Q0U1MTE2QUU0NjdCNzQ1NkE1NjBEODI3MEZENzVECi06MTBBMEUwMDBBNjE4Q0FGMzk3RENGMzEyREU5QkYwNzI4RDVEQTFGODFGCi06MTBBMEYwMDAzM0Y0MTU0M0JCQTA5NkU3MjkzMkE1RkY0RThDNzNFQkQyCi06MTBBMTAwMDBGMTY3N0RGRDVGQUUzRDRBRjdBMEM1QzBDRTJGMDk2MTY2Ci06MTBBMTEwMDBGQzU5MjRGRTdBRjlGNTQ5RkM1RTNBNjE3MDNGNUMwMTE2Ci06MTBBMTIwMDAzQjYxQzM3OUUzMjhERkUzNjBEOUI3MjhDRUJCMDFFMzA1Ci06MTBBMTMwMDBFMjMwRDMwRDVGRkU2NjA2RDExMTI4RTUxOEYyRUJDNEJDCi06MTBBMTQwMDBBQzM4Q0FDN0M1MTMyQUIyOTEyRTlGOTlGOEI5MDdFMzU0Ci06MTBBMTUwMDBBMkVGREU3NkRDOEZFQkQ0RDdEMjRDNzkwN0U2NzUzN0U5Ci06MTBBMTYwMDBDNzk5Q0RGMUU1RDM4RDI3OUY5QjNCOTAyNzQwRjRGMDE1Ci06MTBBMTcwMDA5MjI5OUVBQ0NCMkJCM0ZDNDg4ODI3NUY5ODNCOEE3ODBBCi06MTBBMTgwMDBCMjJFQjc3NDM5QTFDQkFGODM2NTFENkYzRjA0RkYzQzdFCi06MTBBMTkwMDAxODcxMTI0QzZGNjlGMzFFRTA0QjhEMkUwRkVBN0NGODlDCi06MTBBMUEwMDBBNTkzRUM5MTY3MjZGRTk2RjJBREY0N0EyREMxNENFMkIwCi06MTBBMUIwMDBDMzZGOTVDNUVEQjQzRjhCNzkwQUE1ODNFQjMyM0Y3MjJGCi06MTBBMUMwMDBFRDQwMTlCQkZERjZEMjk1MDZGQTE4OTA1MzIzQ0FCMTlCCi06MTBBMUQwMDBFMUU1OTQ5OENCRTMxM0M5RjIzNTc1M0UxOEFBN0Y0QTlFCi06MTBBMUUwMDBDODRFNERGQkJEM0RFRTJBRkFFQTdBQThCMUU5RDcwQTdFCi06MTBBMUYwMDBCNjgzRTc2NjZBM0ZEMTExODk1QkU4MjczMzNDNjkyNzVDCi06MTBBMjAwMDA0NTE2OUY5NEY4NUVFMUVGMDdGNDgwODNCRUM3RUE5NTk4Ci06MTBBMjEwMDBENUFCN0REQzlFNkUyM0ZFOEMzOTY5RkZEQ0E3QjZFNEVFCi06MTBBMjIwMDA0MjdEOUY1RjhEMjEzRDNDRUM1MzVCNzMxM0U0Njk5QjQyCi06MTBBMjMwMDA5REVGNDc4QTM2MTY3OUMyMDIyRjRGRTU2QTdBOTk4NUQzCi06MTBBMjQwMDAwM0Q4REY5QTNBRTM3OTJFRkRCOTNEOTdFRkVGRURGMUIwCi06MTBBMjUwMDA1NzA3RDBCRTZFM0I1QzFFNDBGRUQ5RUJBOTI2N0IzQjY4Ci06MTBBMjYwMDBEOUJBRERBNUYzMTNDQUFGOTI0MTdGNjJBM0I2REVDMEFGCi06MTBBMjcwMDBBMjJBRUVFM0FFQjE4NzAzODlGMUM2NzVCOTNDOEYyM0ZDCi06MTBBMjgwMDA3REYyOTNCRDY4MzdCN0M5MzZDQTEzNkM5Mzc5RkU3NUYyCi06MTBBMjkwMDBCQjVCOUFCMTRENkJFNzMzQjQ5M0Y0NzM1NDc0NUY4NjMwCi06MTBBMkEwMDBFNDM2RTY1NzNGQTVEOTNCQzlFNkY5NTRBRTREQkI1RjRFCi06MTBBMkIwMDBCNEU3REU1QTYxNTBBRkQ4OEZENEI5RThGRTA3QTZDQTFBCi06MTBBMkMwMDAzQ0JGMjk2NEM4QTdCNjZCRkFBNURFOTRBRjIxQ0E1RjZDCi06MTBBMkQwMDBDRDZGMEJGQTIzQkI3MjJERkNCNjNEM0VGNTI5NUNFRjJBCi06MTBBMkUwMDBBODE0NzMyMjdENDQ1REQ2N0NGRjhDQjZBRTNGRDBFNkM5Ci06MTBBMkYwMDA2QkJFNTc1NTM0RERGQjIwOUFFRTdEODhENTM3RkZBQzE5Ci06MTBBMzAwMDAwRkU5NkRCNTUzNkVGM0QxM0QwRjc0RUY0MzE0QUY1QzlECi06MTBBMzEwMDA4MkU3REY1Mzc4M0UwQkY4N0ZFN0YyRjMwNkExM0U5NDI1Ci06MTBBMzIwMDBBRjJDRTBBMjc4NTQ2N0JFQUFFNjQzNTlGNEQ4MUU1QTZGCi06MTBBMzMwMDAwREZEQjVBOUY1MkExRTVERTk3NERCQkE3MDlGMkYzM0I4Ci06MTBBMzQwMDAxODM5ODhGMzk4RUE5MTQ4RUY3NDVFOUM0QTdBMDhCRUZGCi06MTBBMzUwMDBBNzcwMzlDMjY0QTE5QUZDNDFCQTM0MDU3RDcwM0M1Rjk0Ci06MTBBMzYwMDA2NjBGMzgyODlFRDUxNjYxN0RDRTcxRkNGQzNGRjY1M0YyCi06MTBBMzcwMDBDNzdBRjZENzE2QTFCREVEQUE0NDNDRUQwRjREQ0E4OEE5Ci06MTBBMzgwMDA1OEM4MDlGRDY5REVGRjdGRkJCQjZGMTY1MkJFQUExOEQ1Ci06MTBBMzkwMDBGOTA4RkJFQjZENUNCQzExRjdGNTU3RUMxNDQzQjg4RjczCi06MTBBM0EwMDBGMDlERUYxRDNDODM5RjM3MzJFRTMzREY5RjM2QTUwRkM0Ci06MTBBM0IwMDBGNTU5RDRFREEwN0E3QjNDRDU5RDg4QTczNkMxRDM4OUM5Ci06MTBBM0MwMDBGRTZFREJFMTk1M0Y0MTNDQjZCNUYyMzhCNzE5Q0Y3QjY1Ci06MTBBM0QwMDAzRERGQTNGQjM1OEVDMzcyNjI3REYzRkQxQUFDNzMyNTlFCi06MTBBM0UwMDA1RjI3QTc4QkY2MkQ2MUJFMkNBRjhBQUYyM0M1MDcwRjYxCi06MTBBM0YwMDA3OUU4MUVBOEUzRkI5RjcxMjM3QzVGNjNERTY5Nzk1NUQyCi06MTBBNDAwMDBDM0NEM0I1RjI2RkI0NUEzMUYyNjg1RDdFMUJDNkUxNjU3Ci06MTBBNDEwMDAzRDlEMUQzRUJDMjcwREQ2MUJFMURFNjUyNzdGRkZGRTVGCi06MTBBNDIwMDBCNDc0NUFENzI4QzA4N0VCMkE3QTFBNTQ3NEM5RkVCQTcyCi06MTBBNDMwMDA1M0E0NzU4RTRBQ0QzNDJGMTY5M0Q4NzY3Q0JGRUJDNEM3Ci06MTBBNDQwMDAwRkNGNDczQTUwQjM2ODU3NEIyQzY4MjZCQ0ZDMTVGMDI5Ci06MTBBNDUwMDBCMkRBMDIyRjQwM0Y0NTc5Qjg1RkI0RUI0NkVBQTdEM0EyCi06MTBBNDYwMDBFMTkyRDFCMjY5RjM1NEQzNzlFNUQxREUyRjUyOTZDNzg4Ci06MTBBNDcwMDBGOTI0RTE3RTkxQjJCQzJBOEJGQTlBOUY4NUZFMzY4RTMyCi06MTBBNDgwMDA1QjI3QjNDRkUyNkMxMEVGQzlGMjU3Q0VEN0ZBMUZFOEMzCi06MTBBNDkwMDA2N0U0RkM5NUYzMTNDN0Q3QzdGRDFBRUIzQUZENzRENkYyCi06MTBBNEEwMDBCNUNERjU3RkE3QTM5REE1OEFFOUExOTQ0MjI4RTMzQUZCCi06MTBBNEIwMDAyMUZFNzE5RDcwQkRCNEI4MERBOTIwMDVFOTQwRUVDOTFCCi06MTBBNEMwMDA0MzNBQjgzMTNEODRGNDM5OTJEQzkwMTg1Rjc3QkIwNDhECi06MTBBNEQwMDBGNDBDNzY5RDUzOEUxQ0EwQjM4QjVBQkM0Nzk3Mjc2NjBECi06MTBBNEUwMDAzRTZCNzMxOUU1NTU5QjdFMkZERkExRDFDOTJCQTA5NzM5Ci06MTBBNEYwMDBBQjcxRERDQzcyNkJCNDc0QjIzMjRGMzBERjQzQjMzMjI4Ci06MTBBNTAwMDBDRjlGOUM0RUVDQzFGMDhEODg3N0M0NTM1RTA1QzUyQjYwCi06MTBBNTEwMDBCRThCRjVGN0VGMTc3NzM4QzZFMjc4M0M2RUQ2MUY2NDJFCi06MTBBNTIwMDBGMjQzMDk3OTU5M0EzQ0VEQjhEOUNERTNENDE0RkY5MDAwCi06MTBBNTMwMDAxQTE5QzMzQzM4NkY2OTQ4OTBDQjQ2NDU0N0VEODlGMEZFCi06MTBBNTQwMDA3RDAzNzQ3NEQ3NzA3NEU0NjZCRDc0NUU2M0I5OUU5RkI2Ci06MTBBNTUwMDBCMzYzRjhGQzlDQUZBQjdGNjAzREJCMTA5RTM2Q0ZGNzdBCi06MTBBNTYwMDA4ODNFRDdEQTVEMzJCRjQ3RURGNEQ2RjVEMUExRUJGQURDCi06MTBBNTcwMDBFOEYwRUIxQTc5MUNCRkFCNzlENTc0OEYxMUFCNjkyMjY3Ci06MTBBNTgwMDBCQjY5OTc1RjdEMTNGM0M1OTgxNDMyQzhDNTIxRkNBMzNFCi06MTBBNTkwMDBDOUVEOUJDRjU0Mjg1Rjc1NzdBQjI2RTc1QTlEMzJEQTE5Ci06MTBBNUEwMDBFM0NGRkE2RTdDMUNFQkRGQ0Q5NDMwQzY0M0E3RDg1NkMwCi06MTBBNUIwMDAxMTlFRkUwQUYzN0IyODQ0NzJCNTE0Rjc3REEyMkMzNTU4Ci06MTBBNUMwMDBBNEU5RDFBNzExMEYzMzk0NTYyMTBCREVGQjE2MjgzNkQwCi06MTBBNUQwMDBCQTg2NTREOUM0NkM2NUEzQzdDMzRCNDNFNUUwNEIyMzhCCi06MTBBNUUwMDBDOEMxNUU4RDlFNkY0MjdBRDZDRkRCMjc5MzgzODc0RTlDCi06MTBBNUYwMDA1RjBFMUVGQTg2RTVFMDlGRjM0RTQzQUY3RjAzRjJFNjVGCi06MTBBNjAwMDAzMzg0REYyQzZGREMxQTNGNUYxOTYyMjE4Qzk3OEYzNjAxCi06MTBBNjEwMDA5RjBERUM0RDA1RjlBQjJFREQ0NUY0RDNGNjg0NDBGOUUyCi06MTBBNjIwMDA1MjYwODc0N0E4RUM3MTkxQjBEOUVCNzFGMEZDREYxRDQ3Ci06MTBBNjMwMDBGQ0JCNThDRkYxNkNDNkQzOTc3OTU5M0NFRkE2N0I2NTJDCi06MTBBNjQwMDA1ODMyRTQ0OUM1ODgxRkVFNTI4RkM5QzUyMkU2RjdEN0I0Ci06MTBBNjUwMDAxMjNEN0IzNTdCNDZDRkVCNEZEN0U0RkY4MDlFOUY2OTUxCi06MTBBNjYwMDBBM0YxQkMwNTVDQkU3QkMxREU0MUJCODg0OTdEMENGRDBFCi06MTBBNjcwMDBGODlCRjM3OEZFM0VGMDAzRDEzNzhDMTI0NjdFQzhBOEQzCi06MTBBNjgwMDA5MTRDNzk1QTlDNUZGQzEyQjc3NzMyN0Q0QzIwNUQ4M0U4Ci06MTBBNjkwMDA3OTYyRjBGRTA0RDgxMzc4M0Y0MUE2NkE2Qzc3NzNFQUJBCi06MTBBNkEwMDA5NTAyRUFBREJFMjY3N0IzNDBFN0Y0QzM3QjdFMENFNUE2Ci06MTBBNkIwMDAyQ0NDRjcwMkJFRjFDRTMwRDZGN0IzODRCMjg1N0YxRTI0Ci06MTBBNkMwMDBBQjY3QTU5OEI3NTg5NkFGRjlFOTBFMTYyMEZEQThGOTIzCi06MTBBNkQwMDBFOUZBN0Q4MUUyQzg3OTVGOTVGOUEzODgyRjlFOTdBRjRCCi06MTBBNkUwMDBFNzk5MThGNTcxNzcwQUIzOENBRkZENDczRTk3NUIwRDdDCi06MTBBNkYwMDA3RDc1RjU2ODU3QUZGMjMwQjJBQjU2QTFFRUM0NzJBNkM1Ci06MTBBNzAwMDA4M0VFQjUwOUVEQTk3NDU5REQ1NzkxQTlEQTBDRjdGMzc5Ci06MTBBNzEwMDA3QTY3QTQxQUVFQkRGNTg3QjMwQ0U1OUNDNjVDNDNGREQxCi06MTBBNzIwMDA2MDY0QUNFMTdCREVEMkIzMENERjBCOUEyQjBDRTUzMTFECi06MTBBNzMwMDBEMUYzMENGNThCMDBDMTg5RTU3MUVCMkUzNkQ0MkZFOUVFCi06MTBBNzQwMDBCQ0NDNTAzRTczRjNCNzBDRjVDN0M3MTcxOUJFOUZGREJECi06MTBBNzUwMDBDODc1ODZFRjEzQkE1NzE5Q0FFN0VDQkNENTUwQkY4RDQwCi06MTBBNzYwMDA1OURGREZCOTIxOUZDQjI5RTA3NzkyNjNBREVFRkE0NjNFCi06MTBBNzcwMDBGQTFEMEREOTYxODhGMzJGRDFFQUVEQzlBQzJFQzU3ODQ5Ci06MTBBNzgwMDA0OERCOTFGMjUyRjI4N0QzQ0YxQkQ2MUYzNkNCQzU2NDdDCi06MTBBNzkwMDBGMkQ4RkNCRTVEMUJFRjkzQTdERkFGNUU4Njc0OEU0MkRFCi06MTBBN0EwMDAxRUU0RDIyN0VFQjdENkUyOUNENjk3RjFCQzA0RkQ3NzIzCi06MTBBN0IwMDAzMUNDRjdGMjBGRUM1MzRBMkFDRDY3NDE5NjgzNTk5RDZECi06MTBBN0MwMDAwRjU4OTJBRjU4RUUyRkI0MEIyMTE3RUUxNTI1QzM5QkVGCi06MTBBN0QwMDA0RThGMjNFMUVENEVBRERFRDdDNURCMjFDMTE4MDc0MjE4Ci06MTBBN0UwMDA3REYyODQwNTVDN0JGMzA3RUUzQjc4Mzg5RkVCQUJDQUM4Ci06MTBBN0YwMDA1NEYyMzBGODNEMEVBN0FCNEY3NDM4NDA5RjNDOTE1RjQ4Ci06MTBBODAwMDAzNTM0M0ZGQzkzQzZEN0FFQkU1RkMxRkE1N0YzRkFCNkY0Ci06MTBBODEwMDA1MDI5QUU0QkIyN0RBNUJERjlFNjdEQTVBQUE1MjhFN0Q2Ci06MTBBODIwMDAxNjc4NTI4NUM0RkI5QTdGQTVENUQzRTNEOTZERTk5RkVECi06MTBBODMwMDBEM0JFNTI5QjIzNTQzQTlBN0RBNTVGRTE5RDFCNTU4ODU4Ci06MTBBODQwMDA3Rjg1OEZBN0FGQUI1RDBEQzg5NkZFOUREOThFNjFDRjdBCi06MTBBODUwMDBFMzNEMTgzMUI3NDQ3OUMzNjZGRjJFQUFDOTZEREQ5RjY5Ci06MTBBODYwMDA5M0Y2RDY5MUJGREZFNjFFNEI3OTFGNkRFQTJBRDI5Nzg5Ci06MTBBODcwMDA5RDQ5RkM1Q0QwOTc3RjQ0N0M0RUY1REM2NEYwRTcwNjk0Ci06MTBBODgwMDBFMzAxMkE4RDA3NkRDOTZFNkE0QkYwRkY3MTVERDVGQjQwCi06MTBBODkwMDBGOUJEREFERjgwMUZGQzUxRkU2OUQ4MDkwQUUzN0VGMEJBCi06MTBBOEEwMDA3MUM2RjE3NDVDQjU5MTlENzAxQ0VDMDQ5NEJGNkIyNDZGCi06MTBBOEIwMDA0NkZCREVCMTRBNDFCMUYyOEIzQjU3NkJGNkUxNkE4RTQzCi06MTBBOEMwMDAzN0YzN0VCN0Q5Q0VCODI0QjQ5MkYwQjYwNkU4Qzk1NUFFCi06MTBBOEQwMDA4OUYxMzg2RUZGQUVCMUYzRkIzNzY1NkYzODgwRkFCNjk5Ci06MTBBOEUwMDBERkVGNjAwRjAxQjQ3QkZEM0MzRUE3RTNFNUFCQ0FBM0ZECi06MTBBOEYwMDBDQzgyMjE3NjcyNjZDMTMwNzZGMjM0QjFBQzFCRUY2RDNBCi06MTBBOTAwMDAzRDc2OTJDNzQ1MTQzQzhBRThDMzdCQzhGOUZBQUQ3QTE0Ci06MTBBOTEwMDA3RTRFNkMwNUVBQTkyMkE5MTlGM0Q3NDVBNjY0MjA1RUVDCi06MTBBOTIwMDA1NjNDMjdCMkI4ODA3MkNDOTg5RjZGNjdDRDNGQzI3OEYzCi06MTBBOTMwMDAxQ0YzRjFGNzMxRTY2QTQ1M0IyOUEzQzZBOEM3MzI1NTk3Ci06MTBBOTQwMDBBMzFFRjNDRUM4MzJFOTM1QTMxRUNCNjkzNEVBQjE2MDQ5Ci06MTBBOTUwMDBDNEE4QzdGMjk2NTY5OEY0OUE1MThGOEQ4OUQ2OUJGNDY1Ci06MTBBOTYwMDA5QTUxOEY4RDVCNzc5OTQ5QUYxOUY1RDg5OTlCOEQ3QTVDCi06MTBBOTcwMDA2QzdDRENBOEM3Q0U3RTY0OTU0OUFGMTlGNUQ4MzkzQjBECi06MTBBOTgwMDA1NzFCQkU5N0Y3NzQxOEJFNEY3QUVFNkU0M0I5QUFGN0ZECi06MTBBOTkwMDAwMTQzRkQ3MzBGM0M2NEY4M0VCOUVGRkYxOEJFMDNBMkZDCi06MTBBOUEwMDA1RkM1RjMwQzc4MEYyRDJFRTJGOTFGM0M2OUZDQ0U1NEU1Ci06MTBBOUIwMDAwN0U2RTM1RjhGRTczMzYxMUQyRkU4RkZBREExM0ZENkM4Ci06MTBBOUMwMDBDOUNGMkRDNEUwM0Y1Q0FGM0ZCMzA4REQwMzAwNzI2QzFDCi06MTBBOUQwMDA1RjFFQjRCQjIxMkU4NDdBMThFQUE3MjdERUM3N0Q5QkIxCi06MTBBOUUwMDA2QjAzMjJGOTcxMkIzMEQ4OEFGNEYwQTgyNzhFRjQ3MDBCCi06MTBBOUYwMDBDRDY2RTNGOTg3NkJFM0M2NzIwQ0U4NDdDMUI4MDJEMEI1Ci06MTBBQTAwMDAwRkQyRDdGNUE2REY4RDAwN0I5MEU4RUQ3QTQ1NkE0NjM4Ci06MTBBQTEwMDBCQkQyNEM1RjdGRDZFOTJCQTZCRThBRTczOUY0RjlFQUIwCi06MTBBQTIwMDBGM0IzRUJFNzRGMzVGQTUzMzVGQTYzRTIyRTgyRkJGQUM0Ci06MTBBQTMwMDAzQzkxN0U3RjQ3OUZBRjBBRkZGMUVGMUYzOTcwMUUyN0MxCi06MTBBQTQwMDA3NjBBQ0M4QkZCRkIyQ0I2MkZDRjYyM0UzN0VDRENFNEQ2Ci06MTBBQTUwMDA0MEZFMzRDRkNCM0M4RjIxNzY2QTgxNzE1RjcxOUFFOERBCi06MTBBQTYwMDAwRTExREZCRDJFOTIzRUEyMjkyMDlGM0RDNkNGRUJBRDM5Ci06MTBBQTcwMDA3QTVFQTQ3MzMxQzg4N0U4MkY4OEIxNDZDMkNCMEFDMDdBCi06MTBBQTgwMDAwQkRFMUJBRURCQURDN0I0NzZDNzFFMTRFOTdDRjM0ODAyCi06MTBBQTkwMDBGQ0E4NjhGODcwMDY4Q0ZDOThBMkE0OUFFOEM5ODhERjI0Ci06MTBBQUEwMDBCNDUyMjM3RjVFRkZDRTQ1MEU5NDVGRkIwMERGNDIwRDY0Ci06MTBBQUIwMDA2MzlFOTA5MTVGQUYxNzk3RDEzRTlGOEU2NzA1RkVDMzRGCi06MTBBQUMwMDA3MTI1MzA3NTcxREUzN0MwQkM3Qjk0QTFGODVEQkE2QjFGCi06MTBBQUQwMDBEM0RBM0MwQkJBMTkwOUJGOEYxNjE4RjdFOUY0RkRCOUEwCi06MTBBQUUwMDAzQUMwOEVDMzIyQUY1NEM3REYyRUJGRkEyNENBQzc2NDUwCi06MTBBQUYwMDBGRUYwRUUwMkUzQkVGQTI4RkNFMUREODlGMkY2MUJGMDdGCi06MTBBQjAwMDA4NzlGMkYxODU2Q0ZGNUNGNDI3RkNBQzlEMjQzMUQxNjUzCi06MTBBQjEwMDA3MTNGODlDOTNEMThBRkI1MzdGM0I4REY2MEZDRUUxQjU0Ci06MTBBQjIwMDA4RkYzQkM1QjUwNDVGN0NFOTE5RTRCOTFGNDM4NEZFOEM0Ci06MTBBQjMwMDA0MDA0RUQ5MzhDQjM0Mjk4MTczNURBMzhDNzVGMEE4NjI0Ci06MTBBQjQwMDBDNDM5RkU1MjMwN0M5Q0UzNEQzQzRGQTg2NkU0MzZEOEI1Ci06MTBBQjUwMDA5MDk5QTQ1MDI5RERFRjhDMjBGMDNDQTQ0RjExOEY0MzM1Ci06MTBBQjYwMDBGMjc1OEJCM0I0RkM2MzY1RDhGQ0UzNEJCNEZERERFQTRFCi06MTBBQjcwMDA4MDdBMTJFMTgwRkUzRUM3RTdDMDdENkM5NTdFRUEyN0IxCi06MTBBQjgwMDA3RDg0N0U2MkY1REM1RThCRDkzQzlENkREQzVFQTM3REIxCi06MTBBQjkwMDBBNjZGMjA4RTkxNUU4ODdFQTk5QkUzQkZDREMxRTNCNkYwCi06MTBBQkEwMDBBNzFCNjcwQjE2MEVDMTdCQjA3MDE4QkNGRkZERUQxQzE4Ci06MTBBQkIwMDA3RTZFMzUwNEQ2NDE3OTcyRkFENkNGNjFFQUU1RjU5OTExCi06MTBBQkMwMDA0NjdGNzk2RDA1ODdBQjQ0MUJGRkRCRDlEQzFGOTg1Q0EyCi06MTBBQkQwMDBDOEY5NEZDRkJCQzRCQ0M1OTQwQTI4Q0ZFNEU3OTRGNEFFCi06MTBBQkUwMDA3M0FEN0EzRjkzMEIzRDU0RkZCMzQwRkRFNDQyM0ZFNjIzCi06MTBBQkYwMDBDREYyRkI3N0Q2NjYxQUVGRTFGOUI4QTA2RTMyQ0U2QkQ0Ci06MTBBQzAwMDA5MkQ2RkZFNDQyQzZGMzk5Qzc3MkI4Q0M3OUE3N0ZEMzM2Ci06MTBBQzEwMDBFQUZGQURBMDlFOUU3ODhFMTZGRDEyODcyODVBRTI3MzM5Ci06MTBBQzIwMDA0QTIxOEYxM0U4RjdERTRDRDdDRkNGRERDN0NGRDc5OUI2Ci06MTBBQzMwMDBFRjVEMDAzRTc5MDM3RjFGRUFFODlENzZGMkY3NDAxRjQzCi06MTBBQzQwMDBEMUY5QjkyNTc5RkMxQ0EyRjkzRTg1NDhBOUJDMEZDNUVDCi06MTBBQzUwMDBFQjA5NTY2Njc5MkZDRjkwM0M4NzQzQjc1MEZFRERDQjhBCi06MTBBQzYwMDA5Mzk5MkMwNDQ3Q0U3QkI4QkNEMDc4M0ZDMjU3Mzg0NzY1Ci06MTBBQzcwMDA3NzY1RTEyOEYyMUUxNjZBRTdFOEZBNTJCOTFFRUIwRjczCi06MTBBQzgwMDBCQUUyMEY1OUY4QkI1MTZEOURFRUQ0RkM1QURDOUZDNjU5Ci06MTBBQzkwMDA3RDcyQkNERkRCNkFCRjNDNUFDOEU5NjdCNEU3QUFFRjQ0Ci06MTBBQ0EwMDA3NjQ0MjJDOEI3RTY3M0Q1QzlDRTUzRjczOUZBRDZFNDRECi06MTBBQ0IwMDAyMEJDRTM1OTA4RURGNzlDMDVGMjlFMUNBODk3REFBMDhBCi06MTBBQ0MwMDBEMEY5QzdCNTQ1MkNCRDA2QkY5N0RCNDI3OEFFMjM3M0RDCi06MTBBQ0QwMDBBRUJDRDY4RTdDNUFDQ0IyMDQyOEY3QzVFNkQwRjg3NzQ1Ci06MTBBQ0UwMDAzNjMyNTkwNEI4QkEwQUY5M0VGQUMyREIzRUE1RjFGQzg1Ci06MTBBQ0YwMDBCNTMwMzU4NUNFOUQ0RjQ3RkYyQ0Q2QzhFOERFNDJGM0YwCi06MTBBRDAwMDAzQ0VGRDZGOEM1QjU4NkRGOTM5MzUxNkM5RDg3N0ZCNzJFCi06MTBBRDEwMDA0NjhGMjBCNzM2MjE1RkQ0MTVCMzFERkNGQzJDM0ZBNzBFCi06MTBBRDIwMDA4MEQ3RDI1M0ZFNjYyODk1RjYwNTJGODU3NUUzRkJFNzlECi06MTBBRDMwMDBCREI0N0UzNzA1QTZERThGRUJBOUYzOUI0M0NCNTMzMDIyCi06MTBBRDQwMDA5RjI3RUYyQTNDQkRGM0U0QTkwQkFDRTFGRDlEQjZERUU1Ci06MTBBRDUwMDA0REZFRjBDRjEwREVENEQyNEVGRUZCQTU1RjlFM0EyNTBECi06MTBBRDYwMDA1NjZCM0ZFREE4NjBGQjQ4MDRGNTVGMEFFODNGMDE5RjgyCi06MTBBRDcwMDA4QTRDRTc2ODk5NEJBMEYzQjAyRUE1OTlFODJBQTUyNjNFCi06MTBBRDgwMDBFNEM1REY0NTYzNTdEOTE4REVFMzMyNTU2QkFGMzYzMjgxCi06MTBBRDkwMDAwMTdGNEY4MjcyMDE0OTRFOUI3RTVGNDIwREI1Qjc0MkUzCi06MTBBREEwMDBGQjY5Qjg2RjE2QzJCQ0VGRDA1MkVDQUZDMTlEMkE2M0VECi06MTBBREIwMDA3QzMzQTVCOEI5MEVEN0VCRDk4NUJDOEZCQjkzOUM5N0Q0Ci06MTBBREMwMDBEMENGRDkwRkRFM0ZCNUVDOTVCREI1MDlGNzBBQUNCREM0Ci06MTBBREQwMDBGQTE1RTNGRDUzNTdCRkYyNzVFRTlGM0FCOEY1RUE1N0ZGCi06MTBBREUwMDBGRTI3RUUxNUQwRTUxQkE4MjEzQkRBRjUwNzQ0N0U4RjQwCi06MTBBREYwMDBERTVGOUZCQUMyOEVFQkIwQjY4RTc1MjNERTYzOUYwMzEzCi06MTBBRTAwMDA5RTVEODM3OEI2RDc4NzlGREQ4Mjc2QzlBQUY0MTBGRjRFCi06MTBBRTEwMDAzRDkxRDg3NzEwQ0U3N0QyOTg4Q0VERjU3QzQzODE5NTEzCi06MTBBRTIwMDA5MkJFOUVEQjI4OTBGREMwQTRGRTFCQjAzQzdGNTc5QUNCCi06MTBBRTMwMDA4Q0ZFQzM1RjlGN0FCMzIwMDZGNEY5RjZFREM3M0Q5ODA4Ci06MTBBRTQwMDA5RkZBQUVENEVGNDFCODNFQjhFRDM1MEZFMkVGRUREQjNGCi06MTBBRTUwMDA0NENBNDNBMTczREYwOTc5NjI1RjZBRjRCNTYwNENGOEI0Ci06MTBBRTYwMDAzOEQyRDdDMjk2RkZBQTRFQjRDRjU4RDQ0RkZBRkVEQUUyCi06MTBBRTcwMDAzODQwOUM2OEY3M0U5MjY2Rjg1REQxRTVERDVFNDM1OTQ3Ci06MTBBRTgwMDBEN0YzQ0I5REQ2RTdFNjJCQzc3MEI5NzRFREEzNUQ4RUUzCi06MTBBRTkwMDAzQzA1Qzc4RkQ4QzdDMDNDM0ZEMENFMDE3REIwQzM0MzZGCi06MTBBRUEwMDA3NkJDMEVDRkEyNDdDQjFENjgwRkJGQkJDQkM5N0EyODlCCi06MTBBRUIwMDAyRUQ4NkI2NzZFQUUzRjMwRUYyMkMyODcxRTAyRTdCRTEwCi06MTBBRUMwMDBERDc5MEVFNEIzMjUwMkVCNzcxMjczQjM3RDg4RUYzRjkzCi06MTBBRUQwMDA2OUZFOUY3OTFFNEJERTk2MURCOEJFNEJFQTU4M0Y5RTE5Ci06MTBBRUUwMDAzQjVCNzQ5M0IwRjY2NkE4QkYyOEUyMjZCRkRGM0M0RkY5Ci06MTBBRUYwMDBCM0JFQjkwNkVGQjMxMUFDRUU4MTZCREVGNzNCRThFNzBBCi06MTBBRjAwMDAyQUU4MDdFRENGMjU5REM2RUZDNzlFQkI3MURGMTYxODU3Ci06MTBBRjEwMDA3N0M3NEUwN0Q5OEJENzhDMTBFRjFGM0Y0NkQzNEJENTQxCi06MTBBRjIwMDBFQ0RDNTNFMzQ4RkY2NTRDNTA5MkRCMURCQTNFRkFBMEJGCi06MTBBRjMwMDA4NTUxOTJDQTVGRjBGNzdERTFGOTUxOEI0Q0NGRTM4NUUzCi06MTBBRjQwMDAwQUFEQzdGNTNCRjdFQ0EzREYxNjk2N0FBQjUxREVDRDIxCi06MTBBRjUwMDA3QzdFNzFEQUI3RDg2MDVFNTE3NTU3REIzMzVCODgxNTNDCi06MTBBRjYwMDBGNDdDRDUxRThBRUZENTY4RjdCRjVDQTM5REZGQTgzQTk1Ci06MTBBRjcwMDA2MENFNTdEREYzRUNFRkQwNkU4M0Y5OUZDRUJEM0QwQjc1Ci06MTBBRjgwMDA0Njc5NkZDRkIxRTdBNkE2RDFGOTAwMUQyRkU3MDI1RTgzCi06MTBBRjkwMDBDNEFGOEY5NzY0RUQ5NjI3RjlERDE2OUQ5RjhFNkI3QTZGCi06MTBBRkEwMDBGN0FBNkRCM0Q3RTZDMkY4NkQ0RkZEQjkxMEUzQzczMTBDCi06MTBBRkIwMDBDNkU5QkJFQTQxRkVGQjNGNTVFRTZDQTIzNzE3RDI2N0VDCi06MTBBRkMwMDAxMEYxNkFCQUU3MjFDNkRFNjAwOUY0N0RDREFFMzRBMjg1Ci06MTBBRkQwMDA5MzAwRDg0M0NFMUE3Q0MzRTlCNTBBRUZFRDQ0RkE3RTVDCi06MTBBRkUwMDA5REI3Nzc2OUZFNkQ2NEQ3RURCQ0ZFRUYxQ0IyMzM0MEIwCi06MTBBRkYwMDA3QzE5QjBEMUIzMjc2MEFCQjFCODY3Q0I3Q0JGNThBNzgxCi06MTBCMDAwMDBCMUZDODlCREFGMTBFNUNBMzUyNjNGRjQxM0MxM0EzRjA0Ci06MTBCMDEwMDBFRENBMzE2MzQ5N0U1REE1QThEMzMxMEY2MDA5MEJBRjNFCi06MTBCMDIwMDBFNUYxNUI3RTZGQ0YwNzUyRTdCRUVGMjNCRjZGMTM1ODhBCi06MTBCMDMwMDAwQ0YwQjRGQzM3OEZGRDJCQ0FCMUVCMUVCRjJGMURFNTAyCi06MTBCMDQwMDBEODg3NTI2NzM2OEVCNzZDRkI5QTc0QkM1RkU2MDMyOUNCCi06MTBCMDUwMDA5NjhFRUQzRjhDNzM3OTM2NDQ1RjhFMTFCNDdEMjkzNTIxCi06MTBCMDYwMDA1RDAwOTk3QzAzOTExQUZDRkZBQUZFQjVCN0MyMzg3RjM4Ci06MTBCMDcwMDAwMzNDMjNERkRGQjBFMzFGNTRERUE3QkFGQTU5MDBGQjFECi06MTBCMDgwMDBFRDlCOEU3MDVDREJFNDZFNkUwREExN0Y2OUU0Q0ZFQjBGCi06MTBCMDkwMDA3RTc2NUZCNjQyNzkxRUIxM0MwRDdGNzlEOEVFODY2RDIzCi06MTBCMEEwMDA3NkNBRjM0NTNGMUU4NzU5QzFGQTY5N0VFNkY2MkJCQTg4Ci06MTBCMEIwMDA4RjNBNTA1RUNCMzZENjlGN0ZGRUQwRUY2MDIxMzk5MDFECi06MTBCMEMwMDBERjU2RUNEOEYwQTk5ODhFQ0YwRkRGQzJERjgzNUE2MTJDCi06MTBCMEQwMDBCMjRGOTc2QUYyREI0Q0ZGQkYzMEQxM0RFMDg3RTIwQjA1Ci06MTBCMEUwMDAzMTgwOEJGRjFDMTM5N0UzNkQzRkJGN0ZFMjYxODBFRkUwCi06MTBCMEYwMDBBMzZEMkZBNkUzRUY0REU4RjRBRkRGRjM3Q0FDN0JGMTVCCi06MTBCMTAwMDA0MkM3MzBGNzA4N0RBMkYxQzk4MDdFRDBGNDkzQjIxMzE0Ci06MTBCMTEwMDAwMENCODFFMjJFRkU1QzY2RUY0OTNGMUZFNkJCQUNDQjY1Ci06MTBCMTIwMDAxRTQyOUE1RkY2OThBOEJBRDFBRTNBRTgyNDdCNjREOTU5Ci06MTBCMTMwMDA2M0M3ODk2RTk3MDk2QUJGNDA3QThFQTVBMzFDRDdEN0NCCi06MTBCMTQwMDBFQkZBQzdGRTM0MURFNUY0RjU0MTkxQ0QwNDU2QkNFRTkzCi06MTBCMTUwMDA1NzI3Nzg3REEwRjMxNEE4N0ZGRDEzODdBNzdGMUZDQjA3Ci06MTBCMTYwMDAyMDRGNUMxNkVCMzVCNTdCOEZBM0NGNkRCMTVFREQ4N0NECi06MTBCMTcwMDBBNzYzN0NCRUVERTc3RkE3RjVGODcwQjdDMDcyOEE4NjNCCi06MTBCMTgwMDBCNjVGREFGNTI3OEE4MzdEMDQwQkUzQ0RFNEY4NDI3REQwCi06MTBCMTkwMDBCM0EyNUI2QzcyNjQ1OEFENUZDRkFDREY1NkQyNzdDQTk2Ci06MTBCMUEwMDAwQjFGNjkxRDM3OEM2MTVDM0ZGRUU2QjE1RkZFMTZFMDQ4Ci06MTBCMUIwMDA1OEZBOTYzMzM0MTNDN0ZERTU4REU5MENFOEUwQ0Y1MjE5Ci06MTBCMUMwMDAzM0E3RkIxRkFGQzk0NkZEQkRENDFFQ0I5NkU5QzlERjJGCi06MTBCMUQwMDAyRkRERkE1REEyQzc2QjdFRkZERDZDNkRCRjIxNjgyMzlBCi06MTBCMUUwMDA3OTEwMEJFMjNDOTczQzM4OEZFNjc5MzU4QjEwM0QyRTc5Ci06MTBCMUYwMDBGRDMxQkY2N0YxMDRGOEQ5NTY3RTQyQTVDMkU1OTY5M0FBCi06MTBCMjAwMDBBRDlDNzhBQjBGRTUyNkRFRDkwMjcwMzgxOEJGQUZFQkU2Ci06MTBCMjEwMDA1NTlFRkZFRTY0OTc2NTI0REFCOTBFODVEQjczMzExNjBGCi06MTBCMjIwMDA3RjA3RURDRTE1QTA5NjUxQUU4OUJGM0YzMTFERkJCOTBBCi06MTBCMjMwMDBBOTQ4NkE3NjUyN0NENEZBRkU5QUZGMDc1Qzk2RDEwMzNECi06MTBCMjQwMDAwMDgwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMENDCi06MTBCMjUwMDAwMDBCRTU3RDBCNzQxNDQ1RDY3MEY1RjRCQzQyNUU0M0RCCi06MTBCMjYwMDAxRTEwMDg4NENFM0I0ODg4MDM0OTIwMDFENDgxNDAwQzNECi06MTBCMjcwMDBDQTYzMDI1MTUxMjIwQzAxNDM4MEJDNDQ1NjcwRjVEQjc1Ci06MTBCMjgwMDA3NDA4MjBCMEFDMDY2NTk1MTU3NDA3MDRDNUU3MDYwNDdDCi06MTBCMjkwMDA4MTM1QzI0NDE0ODNFRUMxMjhBQzhCMkY3NjEwMDQ3OTFCCi06MTBCMkEwMDBDOTgwQjA4RUZGQjJGMkRGN0JBQjNCRTk5RTI0MDJCQkNDCi06MTBCMkIwMDA3RUU3RUM3RkZFRUM1OThCREI1NTVENUQ3NURGNzVBQjkyCi06MTBCMkMwMDBFQTRFMTU4M0JGMDRDNkYyM0UxRUQ1REQ5QkNFOTg4NTlGCi06MTBCMkQwMDA1RDMwREY5QkM1RDg0NUM2QTQ2N0VDOEM1NTMxQTNFQzI3Ci06MTBCMkUwMDBCNTMyRkFCQjEyQ0ZEODg5RjU5NjJFQzI4RDUwNzY2MzRGCi06MTBCMkYwMDA2NTBERDBGRTBBRkVEREQyNTY0RTk3MDRDNkIyQTlGOUZFCi06MTBCMzAwMDAyNzZDMTA2Mzk1RjgyRjA5RkFEOTc0MjI3RjBERjRDQkJFCi06MTBCMzEwMDA2MjQ0MTYxRUMzRTE2N0EyMThCMzk1ODQ1NDg3RTdDMDQwCi06MTBCMzIwMDBGNzBFMUUzNUY3ODQ3QTM5Q0FDMDkyNkQ1MERGRjIwREUwCi06MTBCMzMwMDBDMUNDMUUyRDYxN0JCNUZGQUExRDE2RTY1MUM3MDNGRkM4Ci06MTBCMzQwMDBBRkRBRjA4RDk5NjEzRjA2RTZFQjM1QjQ3RDNENjNENTBDCi06MTBCMzUwMDAxOUJGOEVDMjc5ODQ0QkNCQTEzQzYxRjZFNUJGODVERjc2Ci06MTBCMzYwMDA4MUVGNkU4NEVGOTRBRTgyRjY2OTlBRkVCNjlFRkM5Q0U1Ci06MTBCMzcwMDA2NTYwN0I3M0RCRjM3OEZDRUY0MjNFMkZCMTM4REMxNTYwCi06MTBCMzgwMDBDMkQ4NEM5ODI2Q0I2RDNGRkYwNTVGRDYzRUZBQUVBNkRECi06MTBCMzkwMDBCRjBDMjkzNEVBNzgzMEZDNjMzMDFCN0M0NTZDN0I5RjAyCi06MTBCM0EwMDBBRDhENjZBQzQ3RkJGNzdGQTg5MTFGN0RENzg0NkZDQjJGCi06MTBCM0IwMDA4QzQxOTM3MjkzRkIwNUM0NTNGOTY3MTZCQjBDNzgyQzMwCi06MTBCM0MwMDA3RkVEOTJEOTAwMzAxMzk4MkZCOTJCNjNBNzVGRERGMzdGCi06MTBCM0QwMDBFOTNEMzA5RkQzMERBNkE4MzFGNDU1NDc5OEQwQUQwRDY3Ci06MTBCM0UwMDBFRjY1NUJCRUM5NUYwM0VENEQ4MEY3MjBBMDY3RTVENjMyCi06MTBCM0YwMDAxRkNDMDY2ODFGOTNDNzdDMTYxOEZGRTkyODI3NjNGRDNBCi06MTBCNDAwMDAxMTZGQTZBRkJEMUFCQ0U1QzE3MzZGMDg4RDIzRDYxMEFFCi06MTBCNDEwMDA4M0E1Mjc5NjQxNTkxOUM1RUMxRTc4QkZGMkEwNjg5N0ZECi06MTBCNDIwMDAxMDVGQ0NCN0M0MTZEMkZFRkRBQTg2QTMwMTc0RDFENzkzCi06MTBCNDMwMDAzM0U2MzMzQkYxQkI1QjdGN0I1RTBDRDNFMkRERjhCNURCCi06MTBCNDQwMDA1NzgzNzcxNUNGODE3OEJEM0IwMEFGOTc1ODdBMzg3QzBBCi06MTBCNDUwMDA4NjlEN0E3OTRFMUY1NzdBN0JGQ0FBNzhGREFFODYyMUFECi06MTBCNDYwMDA5M0I3M0VCRkQwNDcyMjNDNEIzQkUwNDNEREExQUU1MUZBCi06MTBCNDcwMDAyOTE5RkI5NDY5RjAzOEZCOTVCM0M0QkZGRkU4MjEzMjZBCi06MTBCNDgwMDAxMUY4QTY3MkMzOEY0QjkwQUYwMEFEM0UwQkYwNkZBNUM1Ci06MTBCNDkwMDBGQjNDQzE4QjFENTYxRjIzQjhBOTQ4QzhFODY4REU3QTVCCi06MTBCNEEwMDA3QzA2RDZGNzQyQTQ2NkI3RDFERkI0OTBDOUExRDBBRjZECi06MTBCNEIwMDBFRjZERDFCRDFFODY3NjRFRjI4NTQ1QzBGQzE2MDdCMUY0Ci06MTBCNEMwMDBBOTRFMjhDRkQ5MTRCOEFCMEFCM0E5RDM2MDlDRTdFNDNFCi06MTBCNEQwMDAwQzlCOENFRjA1QjE0OTBENDA5RjczNEU1RjU4RDc5MDgwCi06MTBCNEUwMDBCNjc5MUY2OTE0QzMyNDY4RUY3NUIzODI4NjkwRjY3QzIxCi06MTBCNEYwMDBDODU4MUQ3RERGQ0IzQUFCQUZBNTcxOEUxMjJGQkZFRUMyCi06MTBCNTAwMDA4NUVGNUQ5MDhEQ0MwMkRGRjNENkZFRjBCQTE3Q0E2M0VCCi06MTBCNTEwMDA0NkFCMERGMTM0QTNGNkFFMzA2NjgwRUYzNzI2OEU5RjMyCi06MTBCNTIwMDAwNEVERUVEQjA3RjhBM0U5MzlDQzNEMDBCRkQzRjlENDM1Ci06MTBCNTMwMDBEOUI3NEM3RTZBMThDQzRGMENDRERBRkIxNkJDNUYwQTJCCi06MTBCNTQwMDA4ODE1ODE1RjY3QUNEMEUzNjczNjczODY3QkUyNTE2RTA2Ci06MTBCNTUwMDA0RDZEN0M0MkZGNzU5QjNERjBERTRDNTc0OEY1NzJGODBGCi06MTBCNTYwMDA2RUQ5NUE3REZERUNDNkQzQzQ1RkIzMDNGOENCODVGQzFFCi06MTBCNTcwMDBENUEzM0Q3RjZENTRGOTZCMDAxQjgwRkMzNTRBMEMzMTFGCi06MTBCNTgwMDAyMDNGOUY2QjE2REQxNjc4RTdDMjIyMTM1QjAyRjA4NTIxCi06MTBCNTkwMDA1NzA1Mzc4MzdFMkUzNDQyMjM4NDc3NzA5OEM5RDFDNEVGCi06MTBCNUEwMDBCNzJBOUZBQjc4M0I4M0ZDOTdEQTFFOUZBREY1REJCRUQ1Ci06MTBCNUIwMDAxQUY0MzAzNDI5N0ZGMzhCOEMzNTUwOUU3OUYzQjM5NDkxCi06MTBCNUMwMDBCNzEwREVGRUI3QjgyRjU4RkJGNjc5QkI3RTlDNDJFMzdFCi06MTBCNUQwMDBEQTY1NjEzOEFFNzNCQkRFOEY3QjE4RTEzRjVCRUNDODg4Ci06MTBCNUUwMDBCN0U3MTY1QTFDMENGNUREQUU1MDc3MzJENkY3MDY3RTVCCi06MTBCNUYwMDAwMEJBRDdCREZENDMwNkVBN0JDNjE2MTExRDVCMjQzMzk2Ci06MTBCNjAwMDA5NTE3MUFGRjc5NThDMDc5MzQ1QTI0OUM0N0Q1MkU0MDkzCi06MTBCNjEwMDAwMkJDNUZGNUU3MjAzN0MzRjdERkZFNjE5MDJCRTQ5N0FDCi06MTBCNjIwMDA5QjRGQTU5OUI5ODgzRjQzRDlBNDJEQzhCRjVEOTkwMzA1Ci06MTBCNjMwMDBFNzUzRjU1NkVFRjNCNUYwRkQ4QUFENERFNkU5NTA5RkMwCi06MTBCNjQwMDBCN0ZCNUYxOUE4OEZDRTZENjkzMkEzQkVGQUNFRTQ3RDM5Ci06MTBCNjUwMDA4RTAxN0Y3QzIxNERBRTM3MDE5RUJGMEI4NUNFN0EzMkE1Ci06MTBCNjYwMDAzNjJGN0U4RDUzMEVFOTA4MkYxQzBGRTcwMDBGMzgyRjYxCi06MTBCNjcwMDBDMDRCOTkzQkJENzM3QzVDRjhBRkM1QzdGOTI5RjhGRDk5Ci06MTBCNjgwMDBGMkM2QzE0QzhDRDdFMjQ1NzBGMEU3QTE2RUFCNDBGMzM3Ci06MTBCNjkwMDBFN0NGNzdGRDkwQzE0MkFFM0U1RjVCQkM5OUU0RkRGRjEyCi06MTBCNkEwMDA5N0Y5NjZDNEZGQjdEMjk3RjNGQjlCMTJCNzRCODE3QzI3Ci06MTBCNkIwMDBERjlFQUZCNzNGNDhGMEVCQTE3NjFBRUYzNUNBRkJCODczCi06MTBCNkMwMDBGRkRBRjlGRkVGRDBCQkZDQkY3NkJFNTdBM0Y3M0U4NThDCi06MTBCNkQwMDBERUExMzYwQkVBQURCN0ZGMTVDN0FFNjNERUJGRkQ3RjU3Ci06MTBCNkUwMDA3NERFQURGRThGQzE2RUNEODJGMTdEQ0VEQzc3MEMxNzlFCi06MTBCNkYwMDBDODJCRTlEMDFGRDkxMTJGNTA3QkE2QUMzQkM2Mjk3RUExCi06MTBCNzAwMDA0NTFERkI3QUU0MzRGOEFFMENGRTA0RkFGQjc1MjE1RkFDCi06MTBCNzEwMDAxQjBGMDJEQzAyN0UwMkZBMTcwQzlEMTNDMDQzNEJEMUIzCi06MTBCNzIwMDAwMEY3NzJCNERCQzY2QTY2MDNEOEY0RTk3NDgyMjc5NTIxCi06MTBCNzMwMDBGQzY4Q0M4MkY2Nzc4MDlGODdFREY3RDc3QTY3RDQ0MjkyCi06MTBCNzQwMDBGREZFQUUwNkE5MEVFMEYxOEU4OUM5NUIwMUI2RjUxNEM3Ci06MTBCNzUwMDA2REI4OEVBOTczNjQ1QTI1Q0RGOEM2RTdFOEQ3MjNGN0VDCi06MTBCNzYwMDAwNEFDMkJFRTlBQTRBRkJGOTNBRDhGMzY0MjdGNzc5NjkxCi06MTBCNzcwMDA5OTk4MUJBNjc0NDc0MEZCQTdFMjZEMzRDRkJCNThGNUUwCi06MTBCNzgwMDA2MjVCQzhGNUUzRTk3ODNDNUY5RkQ1QjE4MUNEMTJFMkY5Ci06MTBCNzkwMDBDNTIxREEzN0IyRjY3ODYzODgzN0M0NEI0QzI2NUI2RTI2Ci06MTBCN0EwMDBDN0FGNzg4RDA3MDFCNjI4RkUxNUZDOTEzQ0RFMTE2NTA4Ci06MTBCN0IwMDA3RDAxRjE2NDYxNzNEOTgzRDBERjI1Qzk1ODhERUQyREVBCi06MTBCN0MwMDAwQ0Q2OEQ3Q0RDQzIxNUExM0RERUUwNEYzMjBFMjI1NzM3Ci06MTBCN0QwMDA5QzQ4MzBERUYxMDA0MzNDRTNGMzNFMzFCQUY3NjlERUNBCi06MTBCN0UwMDA4MTc4QkU3RUJDMkU0QzdFMEFGMTVBMTQ2QTc3MjM1RkE0Ci06MTBCN0YwMDAzODlFOEYzNkMyRjdFQTAwQ0Y4MkQwODY0RjE1NEY4MTMwCi06MTBCODAwMDA3ODdGMEI3OTQzRTM5N0FCNjUzQUYzNEQ0MUJGMzM4Q0I3Ci06MTBCODEwMDA4NUQ5OTc0M0ZGNjFENjVFQ0NDOEU3RTFCM0Y0QzBDMkQ3Ci06MTBCODIwMDBDNjcwQkQyNjhFNjAwRENCNjFCREM2NzI4QzY3NUFFN0FGCi06MTBCODMwMDA5NTQwRjU5RTg3RTFCREJBRkJFMTdEQzQ2QjJGMjYzOUFCCi06MTBCODQwMDA4OUZGOEI2REM3RkJFMTMyQ0ZDNUFFMDRCN0Y5OUYxRkVGCi06MTBCODUwMDBFNTgwRkYxOTRGMjVGMUVENDcxQkI4QkY3OTY5RDgxQjZCCi06MTBCODYwMDA0QjA2ODAyODMxOThCMzNDMDhGRDVDRTU0RkY2MTZFM0EzCi06MTBCODcwMDA3QjIyMzNEODcxRkRDQjFDMEVDOTM2MDhGQjY1QjRBRUY0Ci06MTBCODgwMDAwOUNGMzFFOEQ2QkY1RDFENUQ3NDc4OEIyQzg4RDBDMTlGCi06MTBCODkwMDBEMUNFOUVCQUY2REQyNzI1RThFQTdCQjg2RUQwRDVDN0IzCi06MTBCOEEwMDA5NjBERDRDMUJEQUI4N0U4REFGNzU5MzA0MjA3QzdDQjU0Ci06MTBCOEIwMDBCN0U5REEyNzJFOURBMDgzOTNFQkVGRDFCNTRGNUQ1REZECi06MTBCOEMwMDBBMkFCRUZFQjlFQURBQkVGQjc2OUFFMEVFRURGRjA2QjY4Ci06MTBCOEQwMDA1REZCMUI3NzJDRDRENTBGRjAyQ0Q3RDU2NzM2M0ZBMTU1Ci06MTBCOEUwMDA4M0IzNUI5RUQxQjUxRjdDNjhCREFFM0VEN0ZCQjJBRUM1Ci06MTBCOEYwMDA3RUU4Qjc1Qjc0RjA0REJFM0ZFQkRBREZFMjdGNDcwN0NGCi06MTBCOTAwMDAwRjY3MUZFQURBRTc1OTBGRThFMDUxQjYyRjc0RUQ2RkMxCi06MTBCOTEwMDA4RDM5MUExMEVGQjBDOTBGNjRBMTFBMDM3RTAyMzkxQkNBCi06MTBCOTIwMDAyRDlERDZCNTg3MTU1QTMxRjI4RDQ5RTE4N0RCRDNCRUZGCi06MTBCOTMwMDBEN0Q1OEZCNUZGNTNENzlGOTk1NTAzMTE5MEFERUFBOTdECi06MTBCOTQwMDBFQ0MyMUFBODBDNjEyRDU0M0VENERGNzU3QjAyQ0FDMzI5Ci06MTBCOTUwMDA3M0YyMTI2NEFBRkRCOTNGQzRBMTFERjk2OEQ4MDMzMjdECi06MTBCOTYwMDBGMkREQTUxODY2MTMwN0MwNzg5OENGODg3QzZEMDhCRUY1Ci06MTBCOTcwMDBEQ0NCQTU4OTFCODVGOTQ1RTZDOTA0M0VGNDBCNTREQUY2Ci06MTBCOTgwMDBGQ0MxQ0MxMzA5N0NFODBGQTIzMkMyMUY0OUNGMjNGREIyCi06MTBCOTkwMDA1REE5OENGMkM3RDJGMzY4N0YwRjJBQkJGOTEzQTlFQzFCCi06MTBCOUEwMDBFRThGQTczMkM2REY4RkNBMUVGRUJFNTRGNkY0NjdEMkYyCi06MTBCOUIwMDA3QkIxRkUwMTU0RjZGMjBGQTVFN0JERkRCOTU0QzZGOUZGCi06MTBCOUMwMDBGM0U4NzkxRkZGNzAyQTI1RkZFRDU0QzZGQjQ3NTM5OTEyCi06MTBCOUQwMDBFMDlGNDhFRDEyRkQ4NTU0MjZGOTI3RDNGMzY0RkZERDdGCi06MTBCOUUwMDA1NEE2RjhBNzUzOTlFQTlGNDY2NTlBN0YwRTk1N0RGRDY4Ci06MTBCOUYwMDBCM0E4QkNDMUZGMDBCREQ3Q0Y3RjNGOTVFOUZFODdFOTYzCi06MTBCQTAwMDA3OTdGRkY0MzU0NjZGOEVCQThCQ0QxNUY0QkE1RERGRkZGCi06MTBCQTEwMDA1QjZBMzdDMEJGOENDQTgxRkUyN0U5NzlBNjdGMjU5NTZFCi06MTBCQTIwMDA1OUZFMzVGNDNDREJGRjA3MkEwN0Y5OUZBNzcyQjA3RjY4Ci06MTBCQTMwMDAxRDk1MzlGRTU3QThDQ0Y1QkY0NEU1MTBGRjFCRjRERTc5Ci06MTBCQTQwMDA1MEZGNjYyQTg3RjlERkEyRTczN0Y5Nzc1Mjc5QjM3RjhCCi06MTBCQTUwMDAwRjNEQkZDNURGNDRBNUMzRkYyMTNEMUZFRURGNDdFNTE2Ci06MTBCQTYwMDAwOEZGMDE3QTlFRTdGRjk4Q0E5MUZFMkZFOEY5MjhGRkE4Ci06MTBCQTcwMDA2NzU0RTZGQjhGNTI3OUFCRkYwODk1MDVGRUQzNTQ4RUQxCi06MTBCQTgwMDBGNjlGQTRGMjM2RkZGN0Y0REVFREZFRjM1NDhFRjFGRkRECi06MTBCQTkwMDA5MzlFOEZGNUZGNDg2NTZCM0M2MTk4Mjk0MDJGQjZFQTZECi06MTBCQUEwMDAzRkMzMTUyODU5NDg0NDg3RjFCNkQ2RjcxNTdEQkMzMkY3Ci06MTBCQUIwMDBGODM5ODY3MThGNzFENTAyQUREMzlGMEVGRUVFNUREMjNGCi06MTBCQUMwMDA5M0I5MTYwOUUxQzVEOEI0MDdGRjhFQUQxQjYzRjdFMjQxCi06MTBCQUQwMDAzRjI0QzY5QTcyMkRCNDdFREZGRjNGRkNCRDI1QzM4Rjg1Ci06MTBCQUUwMDA3RUY5MDBEQUM3RkIyRDBDRUQ2M0EwRkU1NUJGRkI1MUJDCi06MTBCQUYwMDBDRTlFNjhGNEMzOTYwQ0Y0OTY2M0ZDRTU3N0YxREU2MkEzCi06MTBCQjAwMDAyQ0I3Mjc3MDdGRTRGNTA0NkU2RkI3MjUxOEE4N0NCQ0FFCi06MTBCQjEwMDBCRjhEQ0FFMkZCOTNDMzI5NEUxNTc1NkRGM0JBQTREODQ1Ci06MTBCQjIwMDA3REI1RkQxRjkyMTQzOEM0MTc0N0Y2RTIxQUZCQjlENjRCCi06MTBCQjMwMDA3NjhCQURCRkY5MjNDNjc1MUM3NTQ2MTY3NDMzQzA0NkE3Ci06MTBCQjQwMDA2RUVGRTUyRjQzREQxQjYxNEFGMjg4RUExNzMxQ0UyMzAxCi06MTBCQjUwMDAyRkI0RDhFQUEyMTBDRkJGRjkxM0I2NUZDMDk4RDMwMkIyCi06MTBCQjYwMDBFNTMzMDlBRUZEQTgxNzdFMDg4QTczODM3MTg0QkZFQUE2Ci06MTBCQjcwMDBDMTEzNDI3RkQxRkUzRkZGNUZFRUZGRjhDRkY1RkY3N0E1Ci06MTBCQjgwMDA4NThGNkU0RDc0OUU0QTQwQkZDMEU4Qzg0MDNBOEM1OEJECi06MTBCQjkwMDBEODQzOEM4MkY3QTdBRDEwNkNDODQ3RDMxNzBEQzg0N0EwCi06MTBCQkEwMDBGRTE4QzgxQzE0MjdCRDM3OTI0RDc1NzZFMDk3NDUyNEMyCi06MTBCQkIwMDAxQTE0RkY0MjMyREYwNUUzMzlDQjk4MDdGRDg5MTI4OTU5Ci06MTBCQkMwMDAxMTVGOTYzNDBBNkU5OUUyRDA4RUIwQjE2MEJGQ0IxNDhCCi06MTBCQkQwMDBCRTJENTk1QTZCOUUwRkVEMkE3QUYwNzgxOTczRjM3OEJGCi06MTBCQkUwMDA5OTE1RkU4NzcyMzRBNzdFREQ1RTBBMzc4QTk3MjkzRTUzCi06MTBCQkYwMDA3NjA5RkQ1RTYwOUQzOTlCREFDNzYzRTc2MzlDNzk4N0IwCi06MTBCQzAwMDBEOTg2NzZBM0EyMjEyMDlFMUIxMDM3MEI4Qzk3MDUyNzdGCi06MTBCQzEwMDA4NjQ2QTFCQzMyM0JCM0YzMzg3NzQ4RTlERkYwN0IyQzkyCi06MTBCQzIwMDA0QzEyQTNBRThFMTczNTNFMkIzMUE5M0JFMjcxOTQ5ODhFCi06MTBCQzMwMDAxRThFRUI5ODBCQ0RDOUUxMEM0QjQ5RUE4RUVENUM0MEIyCi06MTBCQzQwMDA4QjE2MjgwNUEzNkIzMDNFMDc3Q0NBNDg1NzVGNkRCMDQyCi06MTBCQzUwMDA3QjNEOENFQjA4RDgxMzI5MTM4NURCMzVEODhDRjFDOEQ0Ci06MTBCQzYwMDBDRjdCQjNFNTAyNTE4REZDQjBBQTBEMjJGOUY1REU4NTNDCi06MTBCQzcwMDBGRjVDODI3MUVDNTlGMTQ2NUEwNzRDQzM5ODNCOEU2RkJBCi06MTBCQzgwMDA2NzU3QjcyQzUwQkY4NDc3REY2QjAyQzU1RDY1MzYzN0M5Ci06MTBCQzkwMDAwNkUzQkE5QUZEMTBGMjZCOUQ4QkEzQzdFNTIwOUQ5NjMzCi06MTBCQ0EwMDA3NjFENjg0MTVBQzk4RTRGOTNCQTY5RThCM0E4OEVGMEUxCi06MTBCQ0IwMDA1QTEyMTNDOUU5QjNDMzQ0N0UyREQwQTcxNkU5MzNDQjdBCi06MTBCQ0MwMDA2RDNBQTZDNUYzMjU3NkQ5OENGQjMxMjU0QkNGMTNCRDM0Ci06MTBCQ0QwMDA2NkI3RDE0QkQ3QUVBMkJFODlFODBBNzREMjNEQUZBQUVGCi06MTBCQ0UwMDAzRUExQzZEMThGRkQxQ0JEODYyNzJBRjE0RDg1NUUxODY5Ci06MTBCQ0YwMDAzRkJGMEIyQjFGODkyNEZENTBCQ0QwOTM1Q0FERTFEMzFCCi06MTBCRDAwMDBDMDdEODlBNDE5NDNDMjlEMjAwRjA1M0QzOTNEOThEMUJFCi06MTBCRDEwMDBERTBERTlGOUZEOEE2Q0EyNTcyMDlEMEE3RTlBNEVGNDQ5Ci06MTBCRDIwMDA2MDlGODdCMjhEMzA5RTdCMTNEOUQ0MDlGMDdDQUExMjE0Ci06MTBCRDMwMDA3RkJEQjc2RTc0MDFDNkNCRUY0RUU0RkFGMjIzNTg3Rjk1Ci06MTBCRDQwMDAzQTYwRkRGOTcxOEQ5NTM5NDAzNTFGQThCMTExRkNEN0M2Ci06MTBCRDUwMDA5QTE4ODJGRjU2MjM1MUY5NTk0RDFBOTVDN0NDQUNBQ0FECi06MTBCRDYwMDA0MTIzNUZDMDAwNjYxQ0RGNTQ0NUFFQTYyNkFBRkI1MkU1Ci06MTBCRDcwMDBGMzYyMzBFRTVFRjBEMzgxNkMwM0FBNTBCOUExNzBENEE3Ci06MTBCRDgwMDA0REI4QkUwMDI0NjhGMDMzQTkyODk4N0M2OTE1RjY5QTRFCi06MTBCRDkwMDA2Q0Y5MzFBODNGOTYwOUY2OEQ0ODU3RTc1MDVEN0I5NkMwCi06MTBCREEwMDA5NkQ5MDZBM0ZEMzI3MjdFMDJCRTU4OEZGQzc3Rjc5OEIzCi06MTBCREIwMDA0ODVERkIzQjk3QzZFQUUwRjk4OTEyOERBRkIwMjA1MTkwCi06MTBCREMwMDBGN0ZDOUVFMjdFM0E3ODlBMUZENkYzRjBBOTI0QTlDMDI4Ci06MTBCREQwMDAyMDQzRkYxN0ZGNjIyMjdFQkU1ODNEQjhGQjdDMEUxMzQ2Ci06MTBCREUwMDBERjA1RTJGRjk4NTlBNjM4ODJCQ0RFNjI0N0ZERjc2RDk5Ci06MTBCREYwMDAxMEU3RUY2RkZGMkFCQUVCNjhERDJCNTNEQ0U1OTJENTM1Ci06MTBCRTAwMDAyNkUxM0FFNUMxRTk3MjFDRDYzRjE4MEMyRUY5MDBDNEIwCi06MTBCRTEwMDA5N0M4MzA3RUMwNUVCNjkwRkU5Q0JFNUE2MDMyQ0E4ODFCCi06MTBCRTIwMDA4RkQxN0E3OURFNEIxNjlBRTc4Q0Q1MjI3MzY1MTI5RkYzCi06MTBCRTMwMDBDNDYxRkI3OUQxMTJGNTc3NkZBMkQ0ODBGQ0VDREI2ODhBCi06MTBCRTQwMDBCMUFGODdEQUU5NUVFNTdENjEyMEVEODM1NENDRkREQjlGCi06MTBCRTUwMDA2MTIzQ0E0MzRBNEIwNkM2Rjc4QkUzM0REMUE4MDdDRkZGCi06MTBCRTYwMDA2QzMwRDFCRTU3ODVCOEFFMzQwNDQ4MzRFNzc3NkY4NDYwCi06MTBCRTcwMDBFNTRBMjQ3RTg0REY1MzFGNDdBRkMzRjlCN0NERDc0REMyCi06MTBCRTgwMDA3MTExNkYxRkU3QjM4OTgwQ0Y1M0E1RUUwQzVBMjczRjdFCi06MTBCRTkwMDBDMkUzRjFFREYxQzI0ODRGQzk4NjMwNjkyM0NFNzdCQUNCCi06MTBCRUEwMDA2QkIwMkQ1RDZCMEZGOUJFREY3NDkzQkQ5QjNEMURCOTZCCi06MTBCRUIwMDAzRkFCMDdFQTgxNjMyQjRDMDUxODc3MDFCRDNGMEVGMUJDCi06MTBCRUMwMDA3NEFDM0VEMkIwOUMxNjU1NUI4OEJGNEE4QzkyNTlGQjJECi06MTBCRUQwMDBERDkyMTVBMjgzREE4MzdFMkY0NDdCQkQ1Mjc0QjFDMUZCCi06MTBCRUUwMDAwOEQ3NTNGRkYyNTJDMTg1RkI0RTQ5MkNBNzNCRjJFRDE4Ci06MTBCRUYwMDAwM0Y3MEZFRThFRjM5OEQyQzkzRUUzNzcyMDMzMkVDREIxCi06MTBCRjAwMDAzRUQ2RUNCNzQ1QTcxQkJGOTdFNTM1MTZGNUQ3OEU5RkY0Ci06MTBCRjEwMDBDNzgxOTI1QzRCN0JDRDQ1M0E2RDBFQjIyRjk3NTBBRkU3Ci06MTBCRjIwMDAyNjg2RTMzQUY1RTQ0MUIwMUJGMDhENTk3NTREMTkxMkEwCi06MTBCRjMwMDBCMDVFRjkwM0RCODkwRTY1RTMxQTUyM0NGMEZDNjNBQjlCCi06MTBCRjQwMDBFQkZENDQ5OEMyQjczRDFBOUUxQThBNzFBMkM2RTdFMzc4Ci06MTBCRjUwMDA2NEI0ODMwQkY4RkVEQUVDOTc2N0Y1RDFGQUYzRURGREU0Ci06MTBCRjYwMDAwOTE2NjNDOEMxQzJEMzREMDBCQ0I4MjQ5NjhGRjg5RDkyCi06MTBCRjcwMDBDQzFBOTRGODg1OUJDNjI3QTFEMjA1N0NEOENBRjlGRUI1Ci06MTBCRjgwMDBEQjc0ODM3RENBODEyQzQ0N0ZBODBERTlBMkY2NzdENEE3Ci06MTBCRjkwMDBDNEUzNUM5RjI3MEEzQTNCMUM5REM0RTU3QkJBODFDQjc2Ci06MTBCRkEwMDAxRERCMjUxMDlGMDJDMTNFNEREMkQ4Q0IyQUI2ODJFQ0I0Ci06MTBCRkIwMDA2NTRDQUNDODcwREZFRTY0NjI4NEEyMTdCOEZEOUI4MzQ5Ci06MTBCRkMwMDBGNjBGRjc4NTZEMDJDOTQ3RjkyNjhCREIwREZDOTU5OEI2Ci06MTBCRkQwMDBDNEU1NzNCNkY5QjVBNzA2NjJGM0Y4NkEzMzdFNjdENjhGCi06MTBCRkUwMDA1NjgxM0QwMzRENEY5OURDQTUyREI4MkY2NTVCQjcyOEQxCi06MTBCRkYwMDA4MkRFMzNEOUREQzhBNzhBN0VCNzgyNDI0MEJEMzAxM0M2Ci06MTBDMDAwMDBGRjA5RjUxNUFCMDRCNzg3RjhDNTQ5NzY2ODA2QzY0RDM0Ci06MTBDMDEwMDA3MEZEOEY3QTVFQTM0N0RBRTlGNzAwQkQ3RTFGRDNEQkEwCi06MTBDMDIwMDAyMzU2QUZCNzJGQ0VFMDUwMkI4RTczRjYyQUVFRDdCNjNECi06MTBDMDMwMDA4RDQ3NjQ1NzAwNTdBNTJFRjdERTcxMzQ1RTgxRTIyMkVBCi06MTBDMDQwMDA4MURGOUY4OUUzQzNGMUMyRjgzQ0Y2RUIxRjRGQTk5RDQ2Ci06MTBDMDUwMDBDQjY5NzlCREUwNzY3NzMwM0UxNUFGRTFDMzk4ODRGNkMxCi06MTBDMDYwMDA3OUNFMDZDMThERkMzODJBRUE3RUMyRUY2Q0MwNkYyNEZGCi06MTBDMDcwMDBFMjU1NzY4NkREMDU3MDI5MzA5MjlCRTIyQjFDRkY1NTM4Ci06MTBDMDgwMDA2QjM5RkU4MUNFOUY2OEVERUUzNzUxM0UzM0UyRjUxQkYyCi06MTBDMDkwMDBCMDlGMzJFRTA3NTZGRjQwNzRERjBCRjQ0NUY5OURCNUIzCi06MTBDMEEwMDBEOTZEQzY4REM4RDNBQzNFMkMwNEY5N0VGNUM3N0I3MTIzCi06MTBDMEIwMDA1OUYwQ0RBQTM3QkFFMUZBQjUzOEMyOTM2QzAwQkQxNTc0Ci06MTBDMEMwMDAyOTQ3M0M1MTcwNTMxQkZGMDVEQUVCNzY3NjM5MDAzRjY4Ci06MTBDMEQwMDAzMjczOTIxRDZBODcyN0VCOEExNkRDRjc2RTQ3M0YyNTdECi06MTBDMEUwMDAyRTc2MUZGRTBCRjA3M0RGMDZEMTExOTRBMTZCQTc5Qzc3Ci06MTBDMEYwMDA0NzkwODlGRkNCNjQxRkY5MDk2NTMwQ0YzQTFCM0U5NTA1Ci06MTBDMTAwMDBGMzExMkZGN0Q5MTlFOURERUIxRDZGRTAzODk5NTg0QzgxCi06MTBDMTEwMDBGQzg5NzEzREY0NDNGRURERjEwNkZBMUY4NTQ5M0ZFRkNFCi06MTBDMTIwMDA3RjA0RUE5MTQwRkZFMzRCOTNDM0IwMTBGREJFOEZGOTRCCi06MTBDMTMwMDBCRUY4NDVBM0E3MzdDQUVGQzVBODA0M0JCNDY4RDNBMzhDCi06MTBDMTQwMDBEMTAzQkJBMzlFNTdGNTY4QTk2MkI3RDQ3RUVGNDM3QkFBCi06MTBDMTUwMDAwNUYwRjFENTZGODQyMURENTVGQUNGNDQzQjkxREU2NkMxCi06MTBDMTYwMDAyNzFFOUMwRUZEQzNGNzFFREMxRTQ0RkQ5RjFEMEI3NjkzCi06MTBDMTcwMDAwQUZBMkM3RUY2RkQzMEE2RDE3RjBCRkJCODJBOTI1MDJFCi06MTBDMTgwMDA5RkE4NzY0RDVDMTc2NzAzRkU1MkY1RTVENUQ2NUQ5REY5Ci06MTBDMTkwMDBDRTJCMjQ2MDVFQTFGQTc5OTVFMEJDMzJEQkZBOUJBRTJGCi06MTBDMUEwMDBDQ0VCRUJBNTdDM0U0NzU3RjBGOUNENjgzNzJGNkVGNzA3Ci06MTBDMUIwMDAxRjdDREU2Mjk3QzkyRkYwNDRBMzFDN0VCQjU5NjQ3NUI3Ci06MTBDMUMwMDA0NDVGRUUzNzVDQjIwMjNGMERDMEY4Q0QwQUIyRUIyN0Y4Ci06MTBDMUQwMDBBMzk5ODQ3MTlENEVFREY3NEEwQkY5MDVCM0I2RjFGREI1Ci06MTBDMUUwMDBENjUzQzJGMEVFQjRGMUZGQUUyN0VDMjE5NEVCMkQyMjMyCi06MTBDMUYwMDA0MzNCRDQzNjlFNTZCQkJEMkEyOTVBNjNCN0FGMTE2RjU1Ci06MTBDMjAwMDAxODY3NDU3QjU2MDlBODQzQkVBRjZDRUNDRUYwOUNDQkJCCi06MTBDMjEwMDA4QUUxQUM0MUE0N0Q3ODJGRTkzMTYwMjE4QTRGODMxRkU4Ci06MTBDMjIwMDBBRThCMzc1ODk4REQ2QTQ1M0E3NTEyN0ZGRDQ3RjJGOUIzCi06MTBDMjMwMDAyOTczMDkxRkJFMTRDNEJGRkFGREFBMkUxRTUzNzdGNDNBCi06MTBDMjQwMDA2QjM2MEJFNEQ3NTRDQzFCMUUzNjlDRTE3Nzc4REM2QzQ0Ci06MTBDMjUwMDA0QjEyQjc1M0RCMTQzRDI3MzhBQTI5MkUwNjNFOERFRDJECi06MTBDMjYwMDA3MTFDRDc1QTFFMUY2NkVGQjAwNkM0MkZDMjE0M0YzNjhBCi06MTBDMjcwMDBGMDc5MDg5MjhEMTUwRkU0NzE3OTJCREFCNTEwMDNEOTk2Ci06MTBDMjgwMDBCNTQwM0M3Q0FEN0NBNzQyMzQ5MEZGNUI2RUU2N0VGMDBGCi06MTBDMjkwMDAzOTgxOUZGRjc4NDdCMThGRUYyNDcxN0ZGOEZEMjQxRTBECi06MTBDMkEwMDA4NzM4ODc3RTIwRjQ3QkVFMjY4QkJCNTY0MEI3RDU0ODc3Ci06MTBDMkIwMDBFQjY0RTMzMDhCMUJGRDE5QTMzNUM0MjM2NjIwN0E4RDE0Ci06MTBDMkMwMDBERkI1Q0EzM0UwNkIwQTZCMzEyMTNEQzdFNURDQkYwOTNFCi06MTBDMkQwMDBFNzczQjgyN0IzODk1REE5REE4OUZCMDg5MzQ5MzMzMDNFCi06MTBDMkUwMDBCNkRGRjRFNTdCMTg4Rjk0QTFBRDA4NkI4NUM5MzkyN0JCCi06MTBDMkYwMDA3QTYzRkJCNTA4QzNGQzBGMDczNUJDODc3MTk2QzNGMUExCi06MTBDMzAwMDA0Njg2RkIwMkYyREIxNkIyRkZBNjExREVERTE0QTdFQ0I2Ci06MTBDMzEwMDBDMjU4REQwMDhDQzdFQzU5OEM3Q0I0MzcyNjMyQ0QwNjcwCi06MTBDMzIwMDBFREE3MUFCQkQ4NDVBRTdGNDY5RUM3RjE5NjA5N0NGRkE0Ci06MTBDMzMwMDA2NjkxMzcxQkU5NzMyMzVCNjQzQjZFQTVBRDg1QUQ1N0YyCi06MTBDMzQwMDAyMjdGOEU3RjhDRUNCOENBMDczMEE2RjIxMUYwOEYyMUM1Ci06MTBDMzUwMDA4QzMzNTYwRUUxNTMwNzAzNUUwOUZFMjE2OURFODQ1NUQ2Ci06MTBDMzYwMDBCRDcwRDM0NEVBOEY3NDJFNEZGMDE5NzEzRkM1MjczMDRBCi06MTBDMzcwMDBERjdBQzBDMzFEMzkzRUEzMDNFOUU1NjAwREUzODE3Rjg5Ci06MTBDMzgwMDAzREZCOTg4MERGNDExMUMwRUZERUU1NDkxODg1Nzg2MEZDCi06MTBDMzkwMDA2OTEyMEI4N0ZBRjE0Njg5RTA1RTA1MkM0MjU0RjYwRENFCi06MTBDM0EwMDAzMDhFNzU2OEE4NDA3NDMwNTgyNTEzQ0VEQjU5MjAwQ0E4Ci06MTBDM0IwMDBDNDdERDFGMjg1RDczNkNFQTA4REJGOTlCMDZBMThDMEEyCi06MTBDM0MwMDAwNjAzNUZDRjNFQzREN0IzOTNFNTIzQTNDODRGMUFDNjc1Ci06MTBDM0QwMDAwNEU0QzNBQTg4MDYxM0FEQTM0MTVFNzBGQzAzQTAxQjRFCi06MTBDM0UwMDAyREZFMjYxQkJEN0M3QzY1MzBCRTVDOTQ4QjI0RTJFMzc1Ci06MTBDM0YwMDA3QkFBMDVGMjI3QUJDQzFEQzczNUEyOTNENTdEMzk5QjBGCi06MTBDNDAwMDA4NEVERTdDMEJGOTBBRkU3MzQ2RTRGQzZFRkFEMTAzODk0Ci06MTBDNDEwMDAxRkNDNTFGOUVDNTVCRDVDMEU0RTY2QzRBNzlERjE3NTVECi06MTBDNDIwMDA5NkQyN0Y1NkIyODE5RkUzNkFGRDVFMDNEOUREMzk4REQ2Ci06MTBDNDMwMDBFRjFGQzI3NTY1NjdGRDU3NTg5ODg3RjBGMkI2ODVFMjIxCi06MTBDNDQwMDAwNzgyQzE5NzQ0NzQ0MTQ0MDIxRDI2QTMzRjA5MkVFMjhFCi06MTBDNDUwMDBDMDY0RUUyN0FBRkM1OThBRkU0NzIyOTYzQzJFNjIwMDUxCi06MTBDNDYwMDBFNTg5RjZCMEFDRkU3OTMzMjIyREYwRkMxMTM4M0U3NDJDCi06MTBDNDcwMDAwRTY4RjY4NkMwRTc5QUI4OEFBOEQzM0IxNEY3MTRDQ0E2Ci06MTBDNDgwMDBCRTE5MzgxRUUxRTYyMDNCRUFFM0M5RTYwNjVBOTcwN0UzCi06MTBDNDkwMDBCNjMzRDU3MzNGQ0JCNDk0RkI1OUI0QUYwNkIwNjUwNTQyCi06MTBDNEEwMDBGNzMzMjdGN0YyRjU2N0E0RTc2Q0Y5NDIzQzZCRjU4QjlECi06MTBDNEIwMDA0QkY5QTdFMTc5QjlDRTJGQjY2MDFDMDFFMzVFQUJCOUE5Ci06MTBDNEMwMDAzRjY4NTRGQ0Q3OTIxNTdBN0Y2MUYyMjI4REJGNDhERDE4Ci06MTBDNEQwMDBGQTJBNzBCQ0E2NDc4MjI5RUU2MjQxN0Y0MkUzMDdGQzNDCi06MTBDNEUwMDBERDUwMjhBMzFFOTYxMzhDNzRGRUQyQzQwMkZEMDkyN0NBCi06MTBDNEYwMDBFM0YxNENGRURDQThGODg5MjM5MzREQkE3RDM3NzkwNDJCCi06MTBDNTAwMDA0QjQzM0MxNEEzMUU0QTQ0NTVFMzVDOEFGMUJDMEIyQ0ZDCi06MTBDNTEwMDBCNDFFRTM2NkEzQzQ0NzI4RkU1NzVDQ0JDRkE1MDVDNjZGCi06MTBDNTIwMDBGRjJFNTRCRkY3MkNCNkM3N0E3QzNFQkZDQjRGNzFCOEY1Ci06MTBDNTMwMDBCRjA5Q0I1MkE3NzAzM0M4Nzc5N0MzOTc1QzI4MUZBMDU5Ci06MTBDNTQwMDBBODRDMjhFRjQxRkJCRjQxNTgzMDg0MzMyMTA3QkZFRjhGCi06MTBDNTUwMDA3OTE2RkI5N0NENTYxQkVBQURBNzgzQzNBODlGMDUwQkExCi06MTBDNTYwMDAwNDhBMEYyRkIyNzE3OUZCRUFDQkQwRjVBOEE3RDQ3ODUzCi06MTBDNTcwMDBFRjkyRTE5OUFCRjFEQ0QyNkY5Mjc3NEZCMEY2NDZGNUNFCi06MTBDNTgwMDBDMEU4REMxMjE4QzY0RjFDMzA5RkEyQ0IyMDM3MDRCRjc2Ci06MTBDNTkwMDAzN0MxMTEwRTdDRkU5RTZGOEExNUYwQjQ2QUUzN0IxM0RGCi06MTBDNUEwMDA4Q0MwOEZFNzdFRUY3QjBFRTExNzM2RUVFN0YwRUY3Qzc1Ci06MTBDNUIwMDA3MTQxMDgyNzFGOTg2MDA0MzkzQTU3QUJGNjc3NjA4MkJCCi06MTBDNUMwMDAwM0Y3RERGRkMwRTEzQUE4OTcwMTJFNDZGRDg2RjMxRTcyCi06MTBDNUQwMDAyMkQwQkE3RjIzREFBNUU4QjY3ODRGQjFFMTFENUU4RThFCi06MTBDNUUwMDA2MDFFQjQ5RjU3NkJGN0E3NjRFNzQ2QjRENzYyRThCMTAzCi06MTBDNUYwMDA1MEY0MkZCNkE2M0EwOERFOTJFODdDMkMxOUZEQTA4M0YxCi06MTBDNjAwMDBFRTZFRDExOEM3MzJCMDE2QTQwQkQ4MzE0NzQ3RkJEMjEzCi06MTBDNjEwMDAxQjkzQjhGQzZFNEVFMUZEQTlGODgyN0U5RTRFOEVCRTQ1Ci06MTBDNjIwMDBGRTdFNkU2OURGOEZGQkRGMTk0Rjk3NTRFODI3NUJEN0RCCi06MTBDNjMwMDBDRjRCRkY0RTNGRTUwMUZEQTg3RTFCMzhDMDEyRUFBOTkzCi06MTBDNjQwMDBEMzY5OEU3NzcxOUU3MzdFRTMxOEIxMTVGNUNGN0U5MTE1Ci06MTBDNjUwMDBGOEY0RkJFQUVEMjk2OEY3QkY3RkQ1MTI4OUY2NkZDRUIzCi06MTBDNjYwMDBFQjNCRTM0QTMxOEVBMEY4NDVBNzlCM0UzMzRCRjA3RTZGCi06MTBDNjcwMDBBNTVGNjQwRUQwRDM1NTdFODFDQUNBQUQ0REU2RkM3NDY5Ci06MTBDNjgwMDAzQzU3REI2NENFRDM4Q0FCNUMxOTI3NzBCQTcxODJDNjgxCi06MTBDNjkwMDA4RkQ5OTdBQ0M2OUY1N0QyNzhFN0JDN0VEMjg4RjQ5Q0RFCi06MTBDNkEwMDA2MzY4Mzg4RUU3OEZEOTEwMUVGNzBBOUNERjE2RTVCRDQ4Ci06MTBDNkIwMDBDMzc4REVBMDgzMzhDMDQ3QzlEQ0VGODhFOUU3RDg4RkFDCi06MTBDNkMwMDBGM0RCOENGQTFDRjlDNUMwQ0Y4NzA0QjZFRjlFQzJGQjIyCi06MTBDNkQwMDAyQkVFQzJGNTdDRjY0MTdCRTkwMTVBRjc2NTE4NDQyODM4Ci06MTBDNkUwMDAwNzFEQUEzNjk3QzBGMzAzODkyMzBFMjU3NzE4ODdGNDEwCi06MTBDNkYwMDBGMTM4NjQyMzhGNDMxNjQ3QjRDQzAzNjNDNjIyNTIyRTBECi06MTBDNzAwMDAzQzgxRjI3NkZCRDNBQTdDODBFODgxN0UyOUIwQTg3MEI4Ci06MTBDNzEwMDBEMEM0OTFDMzc4OUMwQkUxNEIxQjBENEZFMjM5QzJFNkFDCi06MTBDNzIwMDAyRTJEQkYzQTgwRjY2MTU5Mjg1QjBGNzI3NkVGRTBEMDZDCi06MTBDNzMwMDBCODJEMzA4RUU5NzJCODAwQjY5MzBEQjc4NEE2NEM4MzNECi06MTBDNzQwMDA3NjI3MTI4NjQ3QTRGMEYzMjdFNDFGOUU0ODcwOUVDNTAzCi06MTBDNzUwMDBGMTc5RTM4MzBERTA4QzMwOTc5OUM3QjM1QzFGODgxNDlGCi06MTBDNzYwMDBDRjcyNjUwNEJCREMxREUwRUJCNDgyQ0Y4ODE0RUU5RjcyCi06MTBDNzcwMDAzNTFCNjA5QzAzNzExQ0ZDN0MyRkZDQzU2REMxNzhEM0ZDCi06MTBDNzgwMDBDMjNFMDJGMjlERkFGRDVCMTM4Nzc3NERDOTZFRkJGRTM4Ci06MTBDNzkwMDBBRDg5Q0U5RjkyQTNCNUVEQzMxOUI2QkZENjcxRkM1MzM4Ci06MTBDN0EwMDBCMUE3NUQ1MzM4QkQ5Q0MzODBCRjM0N0E3RkMyQzg2MEQ3Ci06MTBDN0IwMDAxRDVDMzQyNjkyMzlCNEYxQ0RBMjU4MUQzQ0E5Mzg1MUU0Ci06MTBDN0MwMDBEN0ZFOUUxOUZENzRGNTYzMkQyRDU5RDVEN0UxRUY4QjVBCi06MTBDN0QwMDA2MTY5RTFCNEZFQ0ZFNkVCOTBBRjFBMkY3RDNBMTlGRDA3Ci06MTBDN0UwMDBEODBEQTI1RDgwNzlDRDdBN0JFM0E3NDNBOTc3ODlFMjUyCi06MTBDN0YwMDA1Q0E3OUE0NUIyNDdFMERFOUFCNUZCMjc2NzU5MEI5REM3Ci06MTBDODAwMDAzQjM2NzY1RDQ0RjY2RjRFMEMzRkRGM0RDQkFEREZGRjMwCi06MTBDODEwMDA1MEUzRjIxREVEOUJBMDNEMkJDNzczMzExREVEOUJCNDgyCi06MTBDODIwMDBDNUUzN0Y3NkZGMjQzMzQ1NTkwRjBGNjQwM0Y5N0FGODg3Ci06MTBDODMwMDBDQzVFOTgyOUNCREJEMTQ0RjRBQURCMjdEQTkxNTVFQjA3Ci06MTBDODQwMDA3QTBCNEM4MDcxREVCQUQ1RTIwRTgyNzE5RkRENzlDNDFECi06MTBDODUwMDAyQzY5RjY0RkFBRkM2MDAwMjJGMUJEMjM2NjNDNEY3NTlGCi06MTBDODYwMDAyMDk5RUJFRENBQzZGMzY2ODY3Q0QxNzgzRkM5NzU0QjNCCi06MTBDODcwMDA5MzJCMkExQUVEMTdGOEFCREJCMjkwQkYxQUIyRDBGRTk5Ci06MTBDODgwMDAzNTFCNkM0RURDMEY5QkIzNzQzNEM1OTlDM0ZEOTNBOTYzCi06MTBDODkwMDAyQ0FGMUY0REZENTZGODI3MTI1Q0U5MEYyNkY4MjNCMTg3Ci06MTBDOEEwMDA2NUVCQzdEOENGRDNFMTM2QjRFNzE1NDZGOTU1QTQ0QkFECi06MTBDOEIwMDA4NTE0OUM4OUZCNTU5NTVCM0ZCRUY4NkJCNEEzMzY3RTBGCi06MTBDOEMwMDBBRjYzQUNGODQ5MTZENjhGRUQ2MzMzRDQ3NUM1RjEwNjY2Ci06MTBDOEQwMDA1MTNGMkQyM0JFQzg0MkJCNTQ4MEVCMDI3ODVFQkUyNTdCCi06MTBDOEUwMDBENzg1NzIzRkJDMkVENDg2NzIyRkUyNzlCMjBFRjg3NENGCi06MTBDOEYwMDA2QTBBRDcyRjI2MkYxRkVGMjg3RjIxRjVEN0JBQkU0RjAwCi06MTBDOTAwMDA0OUEwRjlBQkIwMjk3QTgzMTFGNTg3M0EwRjEzMTg3QzQ3Ci06MTBDOTEwMDAyQzZGRjNGN0EzQjI2QTZCQTExMUNGQzU3RjkwRjY3Q0ExCi06MTBDOTIwMDAxNEUyMDlEQTg3NjA5OTM0NzIyOEU5OTlFRkFCMDc4NzM2Ci06MTBDOTMwMDBCMzBFRjQ5NjVBNUExNDNEM0MxOUY1MzBGNDU3OTRFNjY4Ci06MTBDOTQwMDBGODM1Q0FFNUI4NDdCQzQ2MkJFQUQxMTBBQjBERjczRjI2Ci06MTBDOTUwMDBDNkU1MEM5MDRBMzVGMzExREZCOTFCNTcxMkUwQUJGODZFCi06MTBDOTYwMDA0Q0U4MDc0Qzg2NTJBQkI3QTc3NjYyNUZFNDE0ODNFMkNCCi06MTBDOTcwMDAxN0Q1RjI3MzlEQUE3RTVGRjUwNEMzNzVEODE0N0U1NjUxCi06MTBDOTgwMDBBQjU1QUUyQTk0RjZFQUZCMkQwMkY3MDdFNDZEM0NBRUY4Ci06MTBDOTkwMDA1RjkxRTY3QTEyQzdEQjMyOUM0RERBNDJGQUI0MjVBRURCCi06MTBDOUEwMDAzMEY0OTcxQjdGOThCMTg1RTgxQzY2OTMwQ0I4QUZBMDU0Ci06MTBDOUIwMDBENkFGNkU5RDA3OTdFRkFCQ0Q2M0IxRDJGRTIzOTEyRDFECi06MTBDOUMwMDA0MEJFRjhFODk2NUI1QTFDRDA2RkQzQzM5OTk5QTJDNkIzCi06MTBDOUQwMDA0RUJEOTRDMkNGMzUzMzlCRUYzMkU5OEI1REMxMTJFQTc1Ci06MTBDOUUwMDA4MUIxQjhGNzkwRDVFNkY3RTM3OTQ4OEM2QjU0RURCMjk2Ci06MTBDOUYwMDBBQ0M3RjM2MDU1NjFCMENFODdFRjhGRTlFNzdBMDlGMUY0Ci06MTBDQTAwMDBEMUI0M0JGNzIyREVBMzcxRTBDMjBDRTREQ0QxMzhGOEVDCi06MTBDQTEwMDAyMjlFQjM3NzU4NDFEQkQ4RDEwRjcyQkM0Q0ZBQkY5MzNBCi06MTBDQTIwMDBGMTVFNEQ5RjI1OEQ5QzEzODVGRUM0RjczMDI0QjRCNzZECi06MTBDQTMwMDA2MEY3QjMwRTcyRDg4OUY4NzIyREU1RjJFNzUyRTQ3MDEwCi06MTBDQTQwMDA5QUMyQkYyNThBMUM0RTMzNzIzOTlDQkEyQURDODZGMTAxCi06MTBDQTUwMDBDRTkyNDc4NEZFNzg1RThFNDlBMTc2NTQwMTI2RTRDQkJGCi06MTBDQTYwMDA0Q0U0NEZDRTk3RTVGRUFFOEEzQ0M3MkJGRDcwRkUwRjFGCi06MTBDQTcwMDA5NENGNEE3RjI0QjU1M0U1RjRFNTM0RDcyMTZFRTc1QUM1Ci06MTBDQTgwMDBCMjE2QzBCODZFMDNCOTQ2QkRFNzVBRDgyMzBCRTVBNDY5Ci06MTBDQTkwMDA4RDRGQ0MzNkU0MjdFMDkzOTg1MjBEMUZENDM1RkQ2OEI2Ci06MTBDQUEwMDA0NDNFMzEwRDEzODg0RjJDNTBFNjY5RjhDOEQ5RUE5RkVGCi06MTBDQUIwMDBEOEYyQkJBMTVGQjUyOERFQjA5Q0I1RDU3Rjk1QTJGQUIwCi06MTBDQUMwMDAyOUQ3QzZFRjFGMjhFRDRCNDJDMDhGQTBGODRGMThDM0RGCi06MTBDQUQwMDBGOERBODUyODg5RTJBNDczOTdDMTIwMDEwNTczNEQ5RTc5Ci06MTBDQUUwMDA2NDhDQzNDQ0JEM0Y4OEUyNjBBNTA3QUI5Nzg0NEFFRDU4Ci06MTBDQUYwMDBFOTc1QjczRjgzRjY5NzI3RkE5M0E4M0M5MEU4M0E4REZCCi06MTBDQjAwMDBGODk4RTZCRjUzQzE2M0M2MzVFRENGNjUzQjc4RENDRDAxCi06MTBDQjEwMDBFNEI2RDhEN0M1NjNEQ0NEMjVEMjdFNUM2RjY2N0I5MjQ4Ci06MTBDQjIwMDBFQzk0QkExRkM3RTM2RTE4Q0ZDM0Y4NUVFMEZFMUFDNkQ2Ci06MTBDQjMwMDBFMTcwM0Q2RDg5MzJFOEY2MDlEQkM1RTM4NkVCRjdEMzlBCi06MTBDQjQwMDBDQTlCM0UxOTY0ODBGQTUzRjEwRThBQ0I3OUZCQjg4Q0VDCi06MTBDQjUwMDBBOTMwOEZEOTEzRENBRjlCQjRGQjZDMEExRTFCOEM5RUQzCi06MTBDQjYwMDA2NEI0QTMwREQ1MUMzRjBEMkJDNDAyREE2RjYyMkNCODQwCi06MTBDQjcwMDA1MDczNUVGNzZBN0MzQ0RCOUY0OEY4NTFFRDhCQUFCNzk3Ci06MTBDQjgwMDBCN0Q3RDBBMUNGNTZGRDdEMzVCQjUzQTFGMDdCMDVGMkMxCi06MTBDQjkwMDBCQkJEQkQ5RDUxRjkzNTkwOUY1NUZENkM4QTNFNDg3QUNECi06MTBDQkEwMDBFODM2NzgwNUZEMDc1NTVGMTdFNDBEMUQ4Njc2N0VFOEFCCi06MTBDQkIwMDA0Qjg5NUJGRjBDRjM4RjRDNzM2NUE1MDJGRkRDRjI0QUQ3Ci06MTBDQkMwMDBFRkFDMzUwMERGNjY3NDFCNkQyMUQ3QTIwRjdGMzQ5MTY3Ci06MTBDQkQwMDAzRTdDQTQ5MDkxM0U4NDUyQUIwRjREOURGOEUxQjlBOUUzCi06MTBDQkUwMDBEN0E3Q0Y1Mzk1RjZFMEM3NzJGRjEwRjRCNUI2QkY4QTRBCi06MTBDQkYwMDBCNDExNjM3MEZDODVBOURDNEVGRTUyRTNFRTRDOEYxNzM2Ci06MTBDQzAwMDBBNkFBRjI3OTZEN0FGQzY2QTVGREQ1RjRGODhDNTRBRTJGCi06MTBDQzEwMDBDNzAzRjUzNjY4NjNEMkRCRTdERUVFNEI3MUIyQzMwQ0I3Ci06MTBDQzIwMDBGNDNDREFCM0M2NjA2OTYzQkNFNjlDN0I5NzcwQjc1Njg4Ci06MTBDQzMwMDBBRkM3RjQ5QjNFMDNGOUZEMUFGNEZBN0Q4OEJGN0Y1NzE2Ci06MTBDQzQwMDBBRkU3MTc2RTI2QkYwQUZFOUNFMzZGODZGNUM3NkY2MURDCi06MTBDQzUwMDA3RDg3RjA0N0IwQkU4QjZGMkYwRjgxNzIxMEM4RjdCMDgxCi06MTBDQzYwMDAxRUQ5RkEzMThDQUZGOUE5M0UxNDc3MDAzOTIwQkVBRjM2Ci06MTBDQzcwMDAwMEJFNDczOTUwRTVBNTcyRUI4MDcwREMzNzYwN0YxMTRDCi06MTBDQzgwMDAxOUVBRkY0MDM5MjhDODdCQzU4ODcxMkFENEUzODhBRkU4Ci06MTBDQzkwMDAzRDIwRjNBODY3MDJFRDg0M0ZENUI1MEFFN0FGQ0E4MzBDCi06MTBDQ0EwMDAyQTA3NTdFN0EzOUQyNjVDOTc5QUNBQ0Y3MzNEMEZBNTI1Ci06MTBDQ0IwMDA1NkNGNzdFNkNGRkNFMTNBRjlGRkQxRDQ2QkYzMDM1RUIwCi06MTBDQ0MwMDA0REU1RjcyMDdFNDFGRTc5MzVGNURBRkM4MkQ3NTJGRjNCCi06MTBDQ0QwMDAyM0JGRTAyREUyMUZENDlGQjg3RUJCRkQ0MzdCRjg3Q0QxCi06MTBDQ0UwMDBDRTNGNzQyRTExRjgyMTBCRTNDRUNEODM3QURCMzE0RThCCi06MTBDQ0YwMDA3M0ZCMTVFRUQ3ODM0RTI3QkYzRUQwQUY5RUFDRThCRjg3Ci06MTBDRDAwMDBBOTRBOUNFMDQwOUFCMzI1OTVDQjJCRjlFREMzMTM4MzM4Ci06MTBDRDEwMDAwN0EwQkRCQTU2N0Y2RjcyNTQzNUMzMzhEMzU0MjhCNUI3Ci06MTBDRDIwMDA3QUMyODI3NEVCQzA1RkZGNkJFQUY1RDlFRjNERDc0ODVBCi06MTBDRDMwMDBERkUzQTlGRkIxOUZFN0JCMTY3RDkwRTRCMDRFNDQ3Q0QyCi06MTBDRDQwMDA3RUVGMzEzMkM0RDNENUQ2MDNBNkQ1MUNDRjJBQkNEOEFBCi06MTBDRDUwMDA2MzU0RUQ2NjI0REE0REUwOEZGM0ZGMDk3RjhDQ0Q2QkQxCi06MTBDRDYwMDBCODY4MDVCQTg2QTcxOThCMzAxRTc4Mjc5RUI1QTA3OEJCCi06MTBDRDcwMDA4NjY5OTUyMzA5RjUwRDUzRjcwNTI4REVGMTkxQThDMkMwCi06MTBDRDgwMDBFNjgzMjM2MTFDQjczRkM5REFGNjBEQTA3RUQ0QjBGMDZDCi06MTBDRDkwMDBENkY4ODhDMERBREE4N0E1ODkwNzU3RDBCOEY5NzkxNUE3Ci06MTBDREEwMDBFNkYyMUFGOTNFOTkwMjY3MDExQ0FBODE3MzAyRTBCNTA2Ci06MTBDREIwMDBCQzdEOThEMUNCNkNEQTdFMTRGRDMzQ0VDNkY3MDVEQTk0Ci06MTBDREMwMDBGNkYzN0NGOTVERDFGRkRCMkFEODcwN0ZFMTlFNjFFNzQ1Ci06MTBDREQwMDBDQzE4Q0YxOTlCRTdERDFCMEJFREUyRDM0MjhCNDJDMDkxCi06MTBDREUwMDBDNERGQjM1NUEwRjEwRUQ4MTRCNTRBNEVBMjIzNUIwRTkyCi06MTBDREYwMDAzQzZGNTg5RUMzRjc0RDJDMEQ0REY5OEUwRUY4NzA0MEM4Ci06MTBDRTAwMDA5QURFNEVFMTlGQjExQkM1QzdFOENGRDIyMDMwNzMxNjIyCi06MTBDRTEwMDBFRjI3MjFGRURBREU0N0ZBRDFGQjA5RjRCRUM3MTI3NTBGCi06MTBDRTIwMDBFREVGREYzNThDMzlEQzFERjBEMTJENjk4QTNFQzRCOEI5Ci06MTBDRTMwMDBCMERBM0ZEMDY0NjI4M0UwRTgyODZFNzNBQkQyQkVDNTNGCi06MTBDRTQwMDA2MEE4NjA4MEE3RjE5QkQyNTY2MURDNkIxNEUzN0M1MTMzCi06MTBDRTUwMDBCODI5QjU0OEU2RkNDNzFDMDFGM0ZEQjlGMTY2QTdFOTlFCi06MTBDRTYwMDBENzY3RjgyN0U5REZGN0ZDMUNCRTg2QjZDMzk3NDJGRkY5Ci06MTBDRTcwMDAzMjNEOUY4NDFCOURFRjdFMEZFMzA4OEYxMjZDRThBNzY1Ci06MTBDRTgwMDA1NjNBODM1NkIwNzBBNEJCQzJEN0YyQzAyMkM3MzA5OEJFCi06MTBDRTkwMDA1RjEwRDNDNUYxNUFGOTVBQ0UyQzQyQkVBRTY0NkFGQjdDCi06MTBDRUEwMDBFQzU1NDg3RkE3QTFCNTNERTdGMzQ2QTFGNUZEMzQyMzM2Ci06MTBDRUIwMDBDMzRGRDBGQjczMzY2NUFEQzIzODM5RDA4M0VBMDkzNjJCCi06MTBDRUMwMDBGRTBDOUYzNzA0QzBDMzAyRTQ4MjcxOThFNDEyRjUzMjZECi06MTBDRUQwMDBFMDI3Qjk4M0ZEREJBNTBBN0VDRjBBRkM3QzUzQ0IwODkzCi06MTBDRUUwMDBFRUNGQjUyNEYwRjJDNTM0RUVCRjNEQUVFMEYxNjlBNTVBCi06MTBDRUYwMDA2Q0U5QTJDMTQzQUYzNjNBQzM5RjA3RDcwMzlBNzkxM0FGCi06MTBDRjAwMDA5RUVFOEU1MkU2MkQ0RjJDMUEwM0YzNkE4OTYwRkQwNUMyCi06MTBDRjEwMDBFMDkzNzU5QkM2QUY1QUE0RTE5M0U3Mzc0RDJDNDIzQzkyCi06MTBDRjIwMDBCNEY2MjcxNzFFNDQzQ0RFQURFMEU5QzU0RDEzMEUyMkQyCi06MTBDRjMwMDAxRkUxOTExMzk0Qjc4QTFDQkVGRjZBRDlGQTcxODdGMjc4Ci06MTBDRjQwMDAzNkI3M0RGRkM4OTg1RkExODIxODA5REYxMzFDQTYyQ0Q1Ci06MTBDRjUwMDBERTRGNDIwN0Y4NTlEMEZFN0Q0N0MwRkJDQzE0NzUzRDJCCi06MTBDRjYwMDBFRjJCRjQxOTEzNDBCRjgyMDBGQThEMEM4MDhCRjU3MDAzCi06MTBDRjcwMDA5QjFGMEMzRDgzRkY1NEIyNjNFNUUyNkUxODNGREIyNDM4Ci06MTBDRjgwMDBEMDFEMkJEMENGNjYwMTlFMzdBNkRENUIxNEQyMDNGOUVFCi06MTBDRjkwMDA1NDMyQzU0MjVCNEZEQUQ0ODNENkJFMjA4RkE4QkY0ODM3Ci06MTBDRkEwMDBGRkJBNDg1RjRGNDQzOTI3Nzg1QTkxRTM0NkU0OUJFQTM5Ci06MTBDRkIwMDBDNTMxRDA3RTZGNUFDOTJBQkNGNzdBQ0ZBMjk1MjY0NEQ0Ci06MTBDRkMwMDBGQTA3NjkzMzU2MTlBMURGQkJCM0ZFQjQxN0ZCMzMwQTY2Ci06MTBDRkQwMDBBNTA3QzcwODNGQzNBN0Y1MDFGMzU4MUIwMENCMDFFRDE4Ci06MTBDRkUwMDA1NzVENDU5RjJGMEE3OEZGOTE4MEZBMTUwMUYwRUEwMEZFCi06MTBDRkYwMDA3OEE5RkVGRDY5MzNGOEZFRTUzNEEwMUYyMkVFNkFGMjNGCi06MTBEMDAwMDBFMjRENkI1RDM3QjREQTJGMDFFREQ5ODc3QTdFQkZCRDczCi06MTBEMDEwMDA4RUMzMjczNzNENTBCNDM0NDQwM0E3RkRBQTQ4Q0JCRjg1Ci06MTBEMDIwMDAyNkM1NUU0QzhFNzIzQTNBRTJERjQzOURGMTRGNUFBMDFDCi06MTBEMDMwMDA1RDkzNzVFNzEyMEYzM0E2QjNCRjdCNDQzRERDMjRBQTkyCi06MTBEMDQwMDBGMkI1RjBFMEJDNzRDRDdFQTA1QzVCODRGMTk0Q0VGN0M5Ci06MTBEMDUwMDAyQkU0MjJEQ0FGQjhGRDcxQjU3RDREOTE0MzMzM0ZCNTc0Ci06MTBEMDYwMDA3REZFQkZBRTg4RjhCRDJCNjkzNTQ1MUI2OEZGNEZEOUUzCi06MTBEMDcwMDBCRjhCRTBFNTJEOTdBRjg0MjE1REYyRjFGQzI4RDY3N0Q4Ci06MTBEMDgwMDBGMTI0Q0Y0REQ3Q0M4RjM1QTRFMEZDOUExRUU2RjcwREU2Ci06MTBEMDkwMDBFNTNBQTAwN0M4NzkwOUIzRDNGRTc3NTM3OEY4ODIxNzI5Ci06MTBEMEEwMDBBMEZEOUU4N0M1MDU2OEJGMEUyRjg4QTRGMzQ2RTNGQjRECi06MTBEMEIwMDA3MjdGN0I0Rjc4OUY2RUY3MDFEQzE0M0NENThDNzFENTY1Ci06MTBEMEMwMDBBNjQ3NDc1MUY5OEVFODU4RTIwM0U0RjdFQUZCNTg1MUM2Ci06MTBEMEQwMDA0ODVGQUMwRjI3QkNDNEJDQjRBQ0E4MTZFNDIwQjZBRjA0Ci06MTBEMEUwMDA0NEVGQkIyMjZDREQ3NkEwMUZCQURDQzQ3MEZGODkzMTJGCi06MTBEMEYwMDBGQjczQzQyN0JGQjM5MDlGM0FBREI2MUZFREY3OTRGQzA2Ci06MTBEMTAwMDBCRTMwQkYwN0I0MkI1OTZDQTJGODNGRkNEMTdEMENEN0MxCi06MTBEMTEwMDBGMjUxNjZBQzlGQjE0ODI5RTU1QkE5RENGREQzMUIxRjJBCi06MTBEMTIwMDA2NkQwQkU4RTQ4RTc3Njc2RjkyMzhFODMyNEIzQUZFNUNBCi06MTBEMTMwMDBGRTc0NUZFMUE4OTI1RjY1NkI1RjU3NkE1RjE4QzdENzlGCi06MTBEMTQwMDA2NzkyMjg1RjBBQjM0OTYxMTNEMDZGQkJDMTkxRDYzNzhDCi06MTBEMTUwMDBCQUFERERFRTlGNDREQUFGN0FFQjRDNDkzN0RDREYxQjJBCi06MTBEMTYwMDBEODk3RjNDQjJFN0Y0OUI3MTI4RDVEMkYzRDZCMjQzQ0IyCi06MTBEMTcwMDBFRjM2NEJGMzUwNkZFQ0VFRDI1QjkwNDk2RTFCMjIzMUQxCi06MTBEMTgwMDBDRTNBNDNGMTlCODE0RjE2QkNEMTAxMUZGNkU5MkIxMjE5Ci06MTBEMTkwMDA1RThFNTkxNkUwNTk1OEQ2RjREQkU4NjEzODJFRjVCRDlECi06MTBEMUEwMDBFQzgzQUUzQUNDMTc2M0VBMjUwREQ0RkFDN0I5QzkyMzhDCi06MTBEMUIwMDA2RUM2RjFCNkYxRDcwNkQyRTdFNDFGMDMzQ0JBRUZCQTY4Ci06MTBEMUMwMDA1NTMyRDgwRkI2MDdGQzdBMUM0Nzk0MjMxRkY5NDkzRDA2Ci06MTBEMUQwMDA4RkM3NjIxQTUyQjQ3MTg1MzYzRjc0QTEyMkZGQkNERDNECi06MTBEMUUwMDA1Nzc4MzgxOEJFRkZENUFCNDE3NEVFRUIyQkY5OEI1MDU2Ci06MTBEMUYwMDBBRDdGQUNDQUM3Q0NCMEZGMzlEQzQyRUJFMjcwNDk4OEU2Ci06MTBEMjAwMDAwM0JFMzFENjFDN0YwOERFMkI3REQ2NDQ3QUIzRjREOTE5Ci06MTBEMjEwMDBFODQ3N0M1ODBGRjRDNDJEQzNDMEVGM0VERjk3OUYwNzRCCi06MTBEMjIwMDBFODVDM0VCNjE0OERFQ0E1OTU4RkNENDUzOERGQ0VFNDk1Ci06MTBEMjMwMDA2MzdBREZDRDlEQzg0NzREMzdFNEEzRkM2NzRENzRCRUNDCi06MTBEMjQwMDBCQUI4NEJGNTlEMTg0NzJDMzZEQ0M4RUE2MDdDMjM5RUEzCi06MTBEMjUwMDBGRDU1MzdEQzY3OTlGOUFDODVFOEVBMEQwRDNEQ0VFNzYxCi06MTBEMjYwMDBENTI3MUVFN0Q1NkE3RkZBNzI3REU1QURDRDI1N0IyMUY2Ci06MTBEMjcwMDAxQUMwM0IwM0ZEMkQyRTMxRDE3QTQ0RUM2NjI2QkQyNzIyCi06MTBEMjgwMDA4NkQ5Nzk3RDE3MTZCRjEwRUNGMkUyRDAxQzA5RTlFQkM0Ci06MTBEMjkwMDA1NkU0MDFFQTI1RTRCM0JDRjA0OUI3RTFCOTk2QzMwQjAzCi06MTBEMkEwMDAxMjY5MUZFQzY0MTZERjA3OUJGNUQwRjM2MUU4N0Y3RUZGCi06MTBEMkIwMDAzNThGOUZFRjlFOERGOTc2NzA5REZCNkZFRTdCNTUyOTI0Ci06MTBEMkMwMDBGOTc2RkVCN0Y2QkQ5RUU4QUJEQzFCNkFEREY3RTJFNzU4Ci06MTBEMkQwMDA0MEY3MkNDOENDRTI3ODYxOTIwNUYxMTQzNzgwRjA3MkU3Ci06MTBEMkUwMDBBQjk1NDk0MTgwMTczMTgyQTVBMEZFNTFGN0JEQzQ1RkJGCi06MTBEMkYwMDA3M0ZEMjQxQTA0NUFBNzFGQUI5MTI5N0Y0MTVFOTg5NUFDCi06MTBEMzAwMDAzRkZGMzVCRkI3MjczRTU1Qzg2ODFGMkNBQTlBRjZDMTA0Ci06MTBEMzEwMDA0MjExQUYxOEJGMTU5ODEzRTVFNzY4OTAzREVFRkU3NDEzCi06MTBEMzIwMDBFNEJGMjBBMkU3Q0NFNzY2N0RGQTg3MkNBNERCRDgyOEVGCi06MTBEMzMwMDA1RDNDNDFFMTNGRjVGRDEzQjUzN0QxRjg0RTA4Q0M4NjkxCi06MTBEMzQwMDBGNjNFRUY4RkE5MjM5MTNFNERBMkVCQTlCQjQ5NkYwNjk0Ci06MTBEMzUwMDBEM0ZFMzlCMzc5N0YzNzE4RTA5OUI1QjBDRTY2QzgzN0I4Ci06MTBEMzYwMDAzREUyMTJEMkRCRkE5OUI5RjBFMTE0QTQ3N0RFMUY4MzEzCi06MTBEMzcwMDAzQzc4RkU2NkM2QTJBMEQ1NzgwRUEzQkM5MURGRjM5RUQyCi06MTBEMzgwMDBCNkVDN0IzQThGQ0JFMjhERDUxOEU3RkM3QTUxMTAzRjkzCi06MTBEMzkwMDBBN0JFNzUzMEYxQ0YzNDAzM0ZFN0MyRTJDQzE0NUYyQTU5Ci06MTBEM0EwMDAwRjUxRTA1RTM5MDQ2QkVFMkY5OTkxMUVFQUZEOUJCRDkzCi06MTBEM0IwMDBBODU3RTBGQkM3NTU3Q0EwREY4ODdBNTczRDQ3Q0ZBQTI2Ci06MTBEM0MwMDAyNTk0RkY2MjgzRDBFMTM5QUZCRkY1RTVGRUU5QjQzOEJCCi06MTBEM0QwMDAzQjlEMTdBRDc4Q0M2MjVGMThDRkU5MkMwRUMyRUYzMkJGCi06MTBEM0UwMDA1QTE3NTUxODdDRjlBQkIxNUYwMzkzQjZEOTcwRkREMENECi06MTBEM0YwMDA1MjhBRUI2REI2MzU5NUYyMTA1NDE5OTlEMTFDMDFDRkI0Ci06MTBENDAwMDAyNUFFQ0ZENEYxNTQ0OTg1QjcxMjNGMTlEOTIxNjMwNDExCi06MTBENDEwMDBFMkIxRTVEMzE2RTQ4Rjg1QTExMkM2NDUyQUJBREE1RERBCi06MTBENDIwMDBENDZGQThENUM2RUQ4NEYyNUQxQzdCMjJGMjgxREYxQzhGCi06MTBENDMwMDA4MTdDRjBBOTYwQjBGMEZDMDMwRTAzRDQ5RjYzQkNCRUY2Ci06MTBENDQwMDBGNTNCOEI5NkE1RDNCQ0FEMzZDMzg4MUVDODc3RTdGM0YyCi06MTBENDUwMDA1N0MzN0JCNzMyMjlBMTA3REUxMzVCMTY3OUU3MjRBQ0VCCi06MTBENDYwMDA3RjREMjRCRDA0QzJGNDU4MEVGQTdCQUY4OTk5Qjg0RUEzCi06MTBENDcwMDA5REI2NkMwRkNENkZDRUU2MDE3ODgzODA0RDdCRkQwMEFECi06MTBENDgwMDBEOUE3MzkwQTdGNzk5NTczNkIyNTAwNkY0NjNDMkE3QUI0Ci06MTBENDkwMDBDMTI1QjI2QThBODcyOTc4NkNDNUFGNTI1RkIxQ0M0NDg2Ci06MTBENEEwMDBGNEE4NTg2QzIxM0E1N0Q0RkU4REZBQUQwODZERTk4NjgwCi06MTBENEIwMDBGNEE4RDg2NkEyRkMxREQ2MUJGODNDNEE2QTdCMEYzQjM5Ci06MTBENEMwMDAwNEUzMkUzMTg1REIwNDc4NTQyRThGMzUyMzVDNUUyRkU4Ci06MTBENEQwMDAxMEFDN0VBRjYyRDk1RkJCMTlEMjc5N0Y1ODVBMEM3Q0YxCi06MTBENEUwMDA5RkI1QURERkU4MzhCNDY3QTc1RjhEOEM5QkE2QTFGQjI1Ci06MTBENEYwMDBFOTQ1REJDMzcwREZGOTY4OTAyNzE5Q0ZGOUZBRUUwRjIxCi06MTBENTAwMDBCMkUzQjk0MjM1OUU3NjdBNTEzMkJGMEY2NDZCMDlDNURBCi06MTBENTEwMDBGREVBMTlGMzEyMjNEMENFMURCNjc5Q0M1ODdGQjgyMTdECi06MTBENTIwMDAxRThGQ0MzMTg3Q0QzNjBDNjE4N0YxNDY4MjRGMkJFN0I5Ci06MTBENTMwMDA0OEU4MEZGMzA3MEE5QzZGQ0E1RkRENjM0RTgwRUZGNTgyCi06MTBENTQwMDBCRjgxRTNFN0VDNkI0N0Y3MEU0MTdDMDAxRkQ5NTBGRjJBCi06MTBENTUwMDBDNEI1QTRBMDFEQUUzMEI0QTRDNDIyN0Q1RTE2Qzg1RkJECi06MTBENTYwMDA4MEY1QTkwM0YzOEY1NDIyNUYwRDA0N0RBOEYwNTVFNUUzCi06MTBENTcwMDBENkVERjM1MTNFMkJERTNDOTk4Rjc4M0QzQjk2OTkzMUE5Ci06MTBENTgwMDAzRTU2QTFDQzFGRDY4RkVGMUFBMTdEQzU5Njc1Rjk4QzlBCi06MTBENTkwMDBCRkZGMkVGMjlENkFFRjAxNUU2NDAyQjhEOUNDRTE4QzI4Ci06MTBENUEwMDAxQkI4N0U2RTM2N0IyOUVGNURGMzlEOENEMUZFOTk5MTgxCi06MTBENUIwMDA4REM0NzY0MDc5N0UwRjQwMTQ5NUZCNjlENTMxMTM3ODgwCi06MTBENUMwMDBERTNENTk3QjdFQUUxMkVCRDNEQkVBM0JFMzlCRjEzN0NBCi06MTBENUQwMDAxODE0M0E1QkM4MkU4RDQ3QkMwMEVDNURCNjJEMENGOUQzCi06MTBENUUwMDBFMkVDNkI3QkY2MEU0MUI5RDgyMkQ4OTg1NjFFNTQzOTFFCi06MTBENUYwMDA4Q0YzRjE3QUMwREYxMzg4QkYyREU3RjMzMTBGQzVFQzUwCi06MTBENjAwMDAzM0ExMTJEMjUwQzU5MzJBNkYyQTVFQUExOEM3ODM4QTAzCi06MTBENjEwMDA5NzJBQTM4MjI3QTVERUE5RTBBMTlDRjlBODNGNzZBNkI4Ci06MTBENjIwMDBCRkI0MTFGQjdGRjM0N0RBNkYzQjNCOEQwOUZDOUMzMEE1Ci06MTBENjMwMDBDRjhCQTZDRUNGMTVBMURGREZBRkJEODFGM0ZEMTQ2NTgzCi06MTBENjQwMDA5RUU1MzY2RTE3Q0JBMzk4NTQzQjgwRjhDQzYxNTZGMzE5Ci06MTBENjUwMDA0QjQyOTNCMzlCOEZFOEM2QkY1QTkxODM1NjdBRTMzQzAzCi06MTBENjYwMDA2MDlDNUUwM0JGMjcxOEE4QkZFNjI5N0M3NUE0NzZCMjJDCi06MTBENjcwMDAwN0Y1Q0E2QzE5RkFDOTQyNzlCMDREQzE3RDRFRjZCQUE4Ci06MTBENjgwMDBBOEU4NkZCMDk5OUFFRkU2QkQ3Mjg0RjgxMDc0OTcxNDA5Ci06MTBENjkwMDAwMTZCMTZEMzI2MTgwN0ZBNUY2NzdBNTNCQzMwQUZCQjBECi06MTBENkEwMDA5N0U2QkQ3MThDOEQxOTQwOUYxQzExQkNBMTNCRDAxRTBCCi06MTBENkIwMDAzQzI0OTI5RTUyQzdFOTkwM0YyNDdBMzgxQUI4N0MyMkMzCi06MTBENkMwMDBCRjYwN0NCMDU1MkYwNDhDQjc1NjE5QUZDNTYwRjdFMjI4Ci06MTBENkQwMDBCOTYwQjY1MEEwRkI2QkUyQzJCM0ExODdCOEJEQTM0ODQ2Ci06MTBENkUwMDA2MjVCRkYzN0JEOEJGQjkxOEU4QjYxOTI0MDM1NzYyMzU5Ci06MTBENkYwMDBCNkFCQkMxODk2ODBGNkZCODgxMjc3MzhCMjc4N0I1OEE4Ci06MTBENzAwMDA4OTg2MEU0Rjc1RjY5RDI1ODMyNUE0N0Y1RUM4QTE4NzY3Ci06MTBENzEwMDA1MThFMUU1M0RBMzU5QkVEMjMxN0EwM0VCODE0MjZFMTM3Ci06MTBENzIwMDA3OUE5RTYwODM5MURGREE4NjYwMzVCQ0EyMjM4MUYxQUNECi06MTBENzMwMDBCQkI1RTEwRkU0ODVGMDA3RjVEMjkzQjYzNkI5NTRDNzBGCi06MTBENzQwMDAwRDc0RjMyMEREQTBCRDgzQ0I5MTlERjYzMTJBQTNGOEEzCi06MTBENzUwMDBCRUU4RDVFNTI5RDM0QkZBQTk1NjkwRDY2N0I1QjU1MzlGCi06MTBENzYwMDBFRkU1M0RBQUNDOUI2NEE0NUI5QjNENDBGRTQ0N0I2N0Y4Ci06MTBENzcwMDA1MUYyMTgwNUU2NDFCREI1NTdENzM4QzQ1RjU1ODhENTc1Ci06MTBENzgwMDA4MDRCQjhDMEZBNDBCODZEM0Q1NTZENDQzRjlGMkQ4QTFGCi06MTBENzkwMDBEOUFCQkQ5Nzc2MzQ0OEE2RkI2N0JFMUUyMjVCMEZGNDVCCi06MTBEN0EwMDBBOEJERkY3RDdFOUVCNzkxREZEQjUyRUQzNEZDQUQ2OEY2Ci06MTBEN0IwMDBFNTNGNzhBRjJDRUI3QzNFRUFENzE3NzMyRDc0QUZBOTA5Ci06MTBEN0MwMDA2QkJGMDRGQUNFMjlENjYwMUU4RUY2RkZEQjk2RkMzMEM2Ci06MTBEN0QwMDBBOTZEN0Q3MkQzNDU4RjE4NEVGRTQyQkM2RTdENTA3RTgyCi06MTBEN0UwMDBFNjVEOTJFNzBBRDY0MkY3QjFBNzJEM0IzMDc2MzBEMkZDCi06MTBEN0YwMDBGQjI1MTM5RDFGOTg1MTFGNEY3NkVFRTQ4NkU5OTkzODVCCi06MTBEODAwMDBERjY5OEI5MzA5OUVCNUYxM0UwRTJGRTNGOTBGQTcyRDJCCi06MTBEODEwMDBDRTdFMDFGREFGQTM0MThFN0NFNDY3REY0QUMxODZFQjdCCi06MTBEODIwMDBBQkExMUJCMzFGQjkwN0VBODc4NkY2RTk4QUUzRkU2QTU0Ci06MTBEODMwMDBDM0QxQjE0OEY3QUYxNjg4QTQ5RjFDMUI5RUJDMTNFQjQ1Ci06MTBEODQwMDAxRDNCNDRCQzMxMDZFQjE5REIyMzk4RDc5NDE5QzM2REZCCi06MTBEODUwMDBFODE3QThFNzBCRUI0QzVDREY5RTUxRjRDMjMxNDU0RjUzCi06MTBEODYwMDAxQzUzRjgyRkFGQUUyRTA1RkQyNURGM0FCMDQ3QjhFRkI5Ci06MTBEODcwMDA2REY2OTVEMkY5NkVDMTY2NUYwRkZDRjJBRDIwMTNDQzQ4Ci06MTBEODgwMDA2Q0I2ODREQTVDQkNDRkIyOTZGMkUzOUM0QkI2RDhEMENGCi06MTBEODkwMDA0RkJFRDdDMkVDRThEN0RFQkJCQkY3NDA1QzJBMzg5NDVBCi06MTBEOEEwMDA3NUQ1RDg0OEZFNUQxNTVGRUFGNzRGMkJERjY1RTI4QTM0Ci06MTBEOEIwMDA1MkRBNzc4ODk0MTI1MEJGMzUyQkU3QzY4RjJBRTMzREEyCi06MTBEOEMwMDBCOUU4QTUzQkQxMkYzOEI5MjkzOTgyNjlGMDdFNTJDOTEwCi06MTBEOEQwMDBEMzM0MEJGNEUwOTYwRUQ2N0JGRTFCRDRCODgzOUJCRUVDCi06MTBEOEUwMDA1M0E2QzQwM0Y3OTlFQTdCNjFERUNGQzBGQjVEMjdENjYwCi06MTBEOEYwMDAwNTU5MzEzRjZGRTAzREFGMTMyNjZFM0ZEQURERjdEQUIxCi06MTBEOTAwMDBBMTg3MDNGM0RDMDY4RUE3NzUzRDEzNzhGRkJGNUY0ODQwCi06MTBEOTEwMDA4NzdFQkMyQTY3ODFFRkI3QkI0RjlFNzQ2REU3QUIzMDQzCi06MTBEOTIwMDAyRjE5REVGN0RFNzMwM0EzRjc0NjA2RkZFQjBERDREN0ZFCi06MTBEOTMwMDBBNUY1MTYxQkRFQkYzRjE2MjREMTdBNDhDRTY2RDI0NjI3Ci06MTBEOTQwMDBCNDMzNTYyOTFDRDdGM0M3RjY2NUQyRjlCRkQyMkYxOUM1Ci06MTBEOTUwMDBDOTU1RTk1NkQxOERBOThBREY1RDk5RkFGODMwODBFRjczCi06MTBEOTYwMDBEQjZBQjJFM0ZCMjc1N0FEQkM5MzhCOTkzRUNGNDIwRUU3Ci06MTBEOTcwMDBFM0YyMzkxM0Q2NDkxRTVCREJCQTI4NzBCRDM0N0JGNTYwCi06MTBEOTgwMDA2NkJBNDdGODRCQUQ5N0Q0Mzg1MjIwQkU3M0ZCRTlGMzIzCi06MTBEOTkwMDAyRDA0REU5RkRCMEQ2QzkzMzNCMDNEQkVDRkQ0Qjg2ODUxCi06MTBEOUEwMDA1REY0NUQ0RDE5OTVCOTBERUJGMjYyMjVCQzRGNzFFNDQ0Ci06MTBEOUIwMDBCMUExMjgzN0ExRTExNDBGMzk1MzUzNEQ5Qjc4REZFRDA2Ci06MTBEOUMwMDBDOEJDOENGNzQzREYwQTA5QjdBMUJFRjhBRTY2ODE3MjA2Ci06MTBEOUQwMDBCOTQwRTExMzg1MkY2RkRBREEyNEM2MzI2QURGMzgxNEQyCi06MTBEOUUwMDBEQUVGMEEwOUE3QkIyRTQ5OEU5QzcwQjRGMzJBNUQwM0I3Ci06MTBEOUYwMDBFRjM3QUJGMzNCRjUxMEE3QUIzQURFNTM5QkE2ODdBMUZECi06MTBEQTAwMDBERkQ5QjQyNkIyMzExN0ZBOTM4M0MzNkRFODZGQ0Y1NEQwCi06MTBEQTEwMDBDRUJGMUM1RkNERjVDREI3RDZGMDE3QzZFMEY5OTlCNUVFCi06MTBEQTIwMDAxM0JCRTFCQUVFM0U5M0NGNkM4NzdFRUQ2RjE3ODZFMUI0Ci06MTBEQTMwMDA3QUZGMUJBMzM3MENFRjFCN0YwM0VEM0Q2ODI3OEM2RTJECi06MTBEQTQwMDAxMUY1REM5MDAyNDZGQjc4NDMzQzQ2MjZDNUQzOTYzOTU3Ci06MTBEQTUwMDBGMTQ1RUUxOUEzMUJFOTdBREE3MzcxQ0YxNUU0QTMzMzBDCi06MTBEQTYwMDAwNjhBNzcwMTY2RjY1QzgxRjZGNkQwM0UxNDI3QkM2RjE1Ci06MTBEQTcwMDAyNzVGNkZCMjdGNzVFMUY1MDFGNzE2OUZFOEM3RjVEMjEyCi06MTBEQTgwMDA4OUI1NkY4Q0EzRjVGOTA2OTMwREM3RjlERDg2QkY3NkNFCi06MTBEQTkwMDBDMzczMzhCMzE5M0Y1RkZGRUQyNjgxRTYzMTFCRjgzMUMwCi06MTBEQUEwMDAyODFFRjUwMzhGODNDRTA2QkQ2RjE1REFGMzYxREVBNjVGCi06MTBEQUIwMDA1QUUyQzNEOUMwODcxNkY0RDMxQzNDMUZGMzZDQ0NDNzAxCi06MTBEQUMwMDAyQ0IxNzZGOTNGQkEyQTdDMzcwN0Y4MEVFRkVGRkVEMjc5Ci06MTBEQUQwMDA3OTNGOTZGNzBCM0NCN0NBRjk1MEE1QkI4QTE3OTVGRTVDCi06MTBEQUUwMDA2RDdDQzg3NEY5MDUyMzFBMDYwQzhGNjU2REZBNDBCRDZDCi06MTBEQUYwMDBERkMxOENERTE1Nzg0RjYzQkUxODVBOEZGOUFBRjYxQjZBCi06MTBEQjAwMDBBQkZGNDg3OTVCNjQyM0RCNDhGNjlDQTU2MUJFQkNGOTlBCi06MTBEQjEwMDBFMjBENzY4QzA3RDY5OUFCNUJGM0JBNjA3RDYwNUUxNzM5Ci06MTBEQjIwMDAzMTg0QkY1Rjg4Rjk4OTYxQkUyMUU5RjFGNEJEMDkzNjBFCi06MTBEQjMwMDBGQjI4NDRCNzI5Q0E0QjcxMDEzMUNGRTBBMDdCNzk3NTJFCi06MTBEQjQwMDAxNjVBMzcwN0VBQTE1NzE0RkFERTg2QkUwM0ZBM0RGRERFCi06MTBEQjUwMDBGODc5NkRGNURFOUY1QTgyQTFFOThERkM1RTE4MUM3MTgzCi06MTBEQjYwMDA0OTgyMjYzQjVFRjlGQzBFRENBNzJEMUMxQUYxQUI0NDYyCi06MTBEQjcwMDBGODdFNTNCRjIzNzdFMEJEOERDMkNDODg2RDA5MDBFRkRFCi06MTBEQjgwMDA3OUU1RUZCQ0ZFQzY4ODZDMTNGQTAxQzJENzc3OEM0NEU2Ci06MTBEQjkwMDBCRkIxOUZFM0NEN0U5QUVGQThGREMyRjM5REY4RkNGM0UxCi06MTBEQkEwMDAzOEQ3REJGREY4QkU2OTI5RDJGQjlDMTBDNkYzQkQyNTMyCi06MTBEQkIwMDBGOTI4MEVBQUJFRjdCMUMwMEVCRjI1QjRDMTVFMTM4QjAzCi06MTBEQkMwMDBDM0JDMDZDREZEQjgzRUVEQUM4QzRBNzdFQ0U1REZEN0EzCi06MTBEQkQwMDAzRjQ3MEE3RDhGRUI0QzY1RkZDNzYwOTVDQ0U4RkYzOTY2Ci06MTBEQkUwMDBFRDY2M0JDRkFGQzg5QzU2RjBBQkM2MkJGQzVCNjJCRDZECi06MTBEQkYwMDAzQzkyRUM2RjM1QjM1QjMwODFDOTUyRkQ3REFDQkU2RDlDCi06MTBEQzAwMDBGN0Y2RDY1RUNGQkQzRDI2RjMzQzdDNzU0QTFFQkVDRUYwCi06MTBEQzEwMDBFRTUxMEE4REVGRkY4OEZFNjVFMEZEQTlDQ0JGQjRCQ0Q0Ci06MTBEQzIwMDA4OTdDMzIwRUY4MEFFRDQ1NTYwQjg3QzcyQjdDNTJCMTIyCi06MTBEQzMwMDA3RDJDRTU3QjlFRkJCMUM5OEQ3RUMyMkNDNTFGNEI3MjJFCi06MTBEQzQwMDA3NTYxMTJCNEJCMDRGMjhCN0FFMUNDMzg0RjBBRUE4RkNCCi06MTBEQzUwMDAxMzM1QUMzRTA5MTQ1NjgxRDVFNTQzQkEzNEM3QkY0RkRFCi06MTBEQzYwMDA3OUQxNEVBQ0FEMEI0M0JGRTcyQ0FDMjdDNjQwMTdFNUNFCi06MTBEQzcwMDA4QTdGQ0YyRThCOUU1QkQwMEY4RUVGQkI3RUI5ODZERjY3Ci06MTBEQzgwMDA3RUVDQzdFREZGOTk3ODRGMUNBRTZGRTQ3ODBCQ0ZEN0QxCi06MTBEQzkwMDA3ODc5MEZFNTc5MkU0ODE4OUQ4RDcxQTRGRDM1M0JEODE0Ci06MTBEQ0EwMDBEMUU0QjZGNzNBQkI4RjMyQzQzMDgyQTU2QkY2MjVDN0Y0Ci06MTBEQ0IwMDAxOTNCM0VBN0YxQUQ5QTRGNzMwM0I3REYxNjYzM0RFNUZECi06MTBEQ0MwMDBEMTAyNTI1NkQ3MTJFQ0E0Qjg1MjBDRjIyOEM2ODdBNTNFCi06MTBEQ0QwMDAwNzA4NUUzMjhCRDlFODFFNkJEQjNFMURERDA3NTVFOTc4Ci06MTBEQ0UwMDBFRkIwNUYxOTg5RURDNjAxRkQ1MURGMThBQzNFMjNDMkNDCi06MTBEQ0YwMDBDRTAyN0UzRUE1MkYxMDBFRjU4OTRBRkY1MUUyMjM4RkZBCi06MTBERDAwMDAyMTFERTYyQUY3QjhFNjBBRDUxQzM2NTlFOTlDNkJBMDE2Ci06MTBERDEwMDA3RUM0Qjg2NjMxRTk0RDc5NkYyRUZBNjNBMDI3MjlBRjJBCi06MTBERDIwMDA4MkEyMTcyNUY4MUZFNTQ1Q0E1OTY3QTY2NjU3Q0Y4QjBCCi06MTBERDMwMDBCNDM3RjczRkQwOEYxOUU5RkEzQ0UyMkE5RDU0RkZBQTg1Ci06MTBERDQwMDAzMzNBQTk3QTEyRTgzNUU4N0FFOEE1RTYyOTlCRkIyQzU0Ci06MTBERDUwMDA4Rjc3Q0U3RDc2N0FDQzQwQzIxQjQ4MUNGQTQzMzE3RjQ4Ci06MTBERDYwMDBBMkI4Q0E0QzY1MEU2QzZEMjRGMUIxNjk4NDUzNDI3RDMyCi06MTBERDcwMDAzQjc2NDcyQzkzRTBEMUFDMUQwMjlENkYxREIzMjM5MkRGCi06MTBERDgwMDBFMDMwN0YwRjlFNTc0OUIxRjc2MzVGRUMzRTAyRTM5M0FCCi06MTBERDkwMDAyNzVGRjg2MjFFRTZCRDFGRjM1QjQ2RjE2MzQzNzAwODIwCi06MTBEREEwMDBFNTlCMTA0NzI4NzkxQ0M0OTBGN0YwMUVFQjA1Qzk1ODc1Ci06MTBEREIwMDA4REY2Q0FDOURBRTUwRjMwMTBGRDlCRjkzOTU5NThFNURGCi06MTBEREMwMDBDOTlDNEVGQ0RFREZEQzdERENDRUNGMURDRUY3MDUyRkZGCi06MTBEREQwMDBFMDFCRDBGRTQyOTE0ODc5OUE5RTBFQ0UyMEZGQURFRTE4Ci06MTBEREUwMDAwRTEzREQ4RjYwQjJFMzEzNUM1NzRENTJGOEMxMTIwMzdFCi06MTBEREYwMDAwQjRCMERCRDgyMjQ5MDU3MEQ3RDFFMEQ3QUVDM0QxNzA3Ci06MTBERTAwMDBGNEVGODU3NTk3RDAxM0ZDRDhCNDA4NURCRDUxMEVGQUI4Ci06MTBERTEwMDAwNkYzQzc5QTYyNDQ5QjFCQzYxRjZBRUZBOUVCQ0YyOTgyCi06MTBERTIwMDA5NjlCMzA5RUMyNUNEQzhGNTZGOThCODk2NzhDNzQ2RjMxCi06MTBERTMwMDA3RTE4Q0Y1RjcxQzcyNEZEM0Q0OUQzQjBGMzIzQzlERUZGCi06MTBERTQwMDAwQ0QzRkJERkNFQUJFNDZENUFBMEYyNTM1RkQ2NTdDOUJCCi06MTBERTUwMDA0QjRGRjZGRkMyNDE3RTNGNDQ2MkNFRDVBQUJDQTBGRTI2Ci06MTBERTYwMDAwN0VGRTY2OUM0Q0Y5RENEMjZFNjk2MDg3RkFGNjFGRDNBCi06MTBERTcwMDAwNUQ5NjJDMzc4NDBBQjFGOUUwNEVGNDVBMTkxQjQxMjRGCi06MTBERTgwMDA5RjYzNUU1MEVEM0MzMTJGQTgxNjJGOTgxNzU0MEI2M0ZCCi06MTBERTkwMDA1RTUwNkQ3QkNDMEJBQUFEQzdCQ0EwREE3QUNDMEJBQUM2Ci06MTBERUEwMDA4NTMxMkZBOEI2M0RFNjA1RDVDMjk4MTc1NERCMUVGMzgxCi06MTBERUIwMDA4MjZBNjFDQzBCQUE2RDhGNzk0MUI1RjU5ODE3NTQ1QkQ2Ci06MTBERUMwMDA4Rjc5NDFCNTMwRTYwNUQ1QjZDN0JDQTBEQTdBQ0MwQjYwCi06MTBERUQwMDBBQUFEQzdCQ0EwNUExOEYzODI2QURCNjM1RTUwNkQzREUxCi06MTBERUUwMDBFNjA1RDVENjYzNUU1MDJEOEM3OTQxQjVFRDMxMkZBODZFCi06MTBERUYwMDAxNkM2QkNBMERBRjY5ODE3NTQwQjYzNUU1MDZEN0JDQzQ3Ci06MTBERjAwMDAwQkFBQURDNzNDQTBEQTdBQ0NGQkE5ODUzMUVGQTdCNjQ2Ci06MTBERjEwMDA3RDBCNUI5NDhDNzY2QzY3QkNBQjM5M0QxQUY3OURCRTZDCi06MTBERjIwMDAyNTdFM0U3NDJGRjAzM0NBNjFGMzQ0MUJFNTJGQkNDRTJGCi06MTBERjMwMDA3NTYyNEJCQUIyNkU1MUY4RjcxMjBCOTk4MkU3RDAzQjdCCi06MTBERjQwMDA3QjVGRTVDRjk3RjA5RDZDQjIwNzRCODk3RjU5NjgzREE5Ci06MTBERjUwMDBGQTczOEYxQTFENzQxRjRBNkVFMEY3MTM5OTkxRkIwMTMzCi06MTBERjYwMDBGMzQ1QzVGRjUxRjI0MkNDMTcyNUYyMDMzMDc3QjA1MThCCi06MTBERjcwMDAzMzlFQUUwRTJCMzM2QUYwMTA1OTYwRDNDMUQxQ0UxODQ4Ci06MTBERjgwMDA1REZCRUU5MzI0NUQ3RDBGNTc5QUFFM0VCNkNDQUU4MzFCCi06MTBERjkwMDA3QjU3RTdFOERBRjc1OUUwRDBDMUYxNzI4MUFFN0RFMjU0Ci06MTBERkEwMDA1MkE3MEU0RUFFOUZBNDZCOUZCQURBQTVBQkVGRUIyRTM1Ci06MTBERkIwMDBEM0Q1RjdEQjU0QUQ4M0ZCMzcyQ0QwQjVCRjcxODdBQzFECi06MTBERkMwMDBBQjFGRTA1OUFBQUJDRjZDQUVEN0MxRDkyREFCNzVFRDY1Ci06MTBERkQwMDAwNzFGNzJFQkVBNzNCRDlCNzRGNTQzQkY2REQwQzEzNzY5Ci06MTBERkUwMDBGOTc2RThEQURGRTJGN0U4RTBFMTZDOUZBRTdEOUVGNUQ2Ci06MTBERkYwMDA2MzFEM0NDQUY2OTlBRUZEQUQzMTQ3NzRGNUEzQTU5M0Y4Ci06MTBFMDAwMDBCQUZBRjJEM0RDQkY2Nzc1QjAzRUMwMzg2NTA4Q0ZBRjRGCi06MTBFMDEwMDA1MUU5NjEwREU4NUZEQzlFNzY1RUQ3REUxNDA1RUIwNTA1Ci06MTBFMDIwMDBFMDlGMEFEMDg3RThGN0ZERDAyNThFRjIzMUIzRUEzMEMxCi06MTBFMDMwMDAzQkRFRkI5NjQ3NTRGRjUxN0JDRjdCQUNGRDQ3RERGN0MyCi06MTBFMDQwMDA5RjBFMEVGMzA0RDFGQUMyNEFGNkY2QTZGRUZDQkU1OUE0Ci06MTBFMDUwMDA2QjNFMTFGNTNFM0JGM0IxOTgyODBBMDlGOUQwM0YxMjA3Ci06MTBFMDYwMDBGMDE3OTYwMDBFNzNGMEJDRDBFMDA3OTFGRjY0MDNCRjc5Ci06MTBFMDcwMDAwOEZEQ0RENjc1OTEyMTNFMUVFRDcyNzA5QjVGRENFQkU1Ci06MTBFMDgwMDA4QTI2Q0ZDQkQ1RkNFMkRCRjFEQkQ5OTRBN0Q3RDExRjExCi06MTBFMDkwMDBDQUQ5MEQ5QkYzNzE5RDM1OEJDOTRCNzAzRjUxQ0RCM0UwCi06MTBFMEEwMDBCODNGNDgxRkRGNTJDQkQxNTZDMEFGRTY3QkZCODJFQUI4Ci06MTBFMEIwMDA3QjBERkMxOTc5MUY2RDNENDNFRDVCRkI1NUUyNUYwMjYzCi06MTBFMEMwMDA0Qzc2QUVBNkZGQzc2MEZENjcwNEI5QUVBRjAxRjkwMzk5Ci06MTBFMEQwMDA3RkU4ODkxQTFCQzFBQjZBNjIwODdFQUE0NkEyNzI3NUU0Ci06MTBFMEUwMDA0RDFBOTVDRkQ0RDhBOTdFNkQ0RDBFQzFDRkQ1MzgwODI1Ci06MTBFMEYwMDA3NkQ3MTQ1MEI5QkVDNjQ5Q0YzN0Q0NEMyMkY4ODUxQTBBCi06MTBFMTAwMDAxNzk1OUI2QUNBQTg3Q0I5QTY5QUVBNUZBRDU5NDBGMEY4Ci06MTBFMTEwMDBFQjM1MzI5NTBEMzU0QkU5Rjk5NjlBN0E4MkI3RDZBQzQ0Ci06MTBFMTIwMDAyNkY4Q0QxQTM3OTUzQjZBMzY1MUY5RTc5QTA2QUE2RjU5Ci06MTBFMTMwMDAwNEZGMERFMTVEMzUxRTgyM0QzNUNEMDRCRjUzRDM0MjUyCi06MTBFMTQwMDBGMEJCMzU4NzA4REU1QkUzQTVCMkI5RTY1QjJBM0ZBOEUyCi06MTBFMTUwMDBGMTUxRkQ1RjZBRkMwNDlGNTFGNjIxRTZGNzE3NzRGNzUxCi06MTBFMTYwMDBGMTU0RDhDODhFNzE3RjBGRjM1NjYwMUU4NjFDRDM3NzhBCi06MTBFMTcwMDAzRjk3MUYzNzkwMEVBNzk0RkU0RDIzQzA1REMyMzg3MkEzCi06MTBFMTgwMDBDRjk0RjU3NTlBNzU0NTVEN0YxRUI3QUMzNUYwRkMyREMzCi06MTBFMTkwMDBCNTNEOTlBRDhFRkM3NjA3RTNFN0I0QjhERjNFMTNGRkRCCi06MTBFMUEwMDAyNUMxRDNBODlBQkRCOERFMjhBREU2NzlDQUIzOTExRkMwCi06MTBFMUIwMDBEMzg4MUZGRjcyNURFQjM0NjU1REIwMjVEMUY5MDRGMkExCi06MTBFMUMwMDAyMzBCNzE3RjFBOUZENTc2OEZGRTQwQTJFQkY3RjhGQ0U4Ci06MTBFMUQwMDA0MkY1N0Q3QkIxRjU0QzlCM0QwNTNGMzJENkUyODlDNkM5Ci06MTBFMUUwMDBGQzVGQkU3REEyN0RCREQ0RjlGN0FBOTRGQjBGOURENjNFCi06MTBFMUYwMDBFRjNBRDkwQkVENTVDMTRGMjJDNUY1Rjc5QjQyMjdFMTA4Ci06MTBFMjAwMDAzRUZGOEIwQTNFNUVFQzZGRDA5NTc3MjUzOTVGRTg4RjM1Ci06MTBFMjEwMDBGQkZCQzlENTJGM0MyMEI0RERERjFGOEY0QjdDOTBFRjdCCi06MTBFMjIwMDA0MjI2NTExRTlDODlDQ0YxMUVCQUUwNzc4MDIzODhGMEVCCi06MTBFMjMwMDA1RDRDQTZGMjQ0ODJFQjRGMzg5RkJCNjEwMTgyQjA2QjBDCi06MTBFMjQwMDA4ODI1QUVBM0Y5MDQ4RTY3QTczMjlFOURDQTM4RDQ3MjgyCi06MTBFMjUwMDA2RTkyNzMwN0Y2NzcyQ0Q5QTExQkNGOEI0QTdFQTE3MUUyCi06MTBFMjYwMDBDQ0Y3MUM4RUVCMUY2RjlGM0YyRTI0QjZFMUJCMzU5RTczCi06MTBFMjcwMDBDMkFBMjk0RjQ2MzFFM0YxOTQ0NzMxMkY0NjU0NUI1RUUxCi06MTBFMjgwMDAwQzc1RkQ1MEJDOEZGRkNFMTFGREExRkQ5QzFGNEZFQjA3Ci06MTBFMjkwMDBEQkMwQkMxOTRCODZFRkUxNzkzMDYwM0Q4NkY3N0Y4QkEwCi06MTBFMkEwMDBFRkZGMTVFOTVGRkMzRDI4QkNCNzNCQkZDQjYxQ0EzMzJDCi06MTBFMkIwMDBFMzlEMDVCQzFBNEI3OTM1NzhERTFCMTcyMDMwOTZGMkFBCi06MTBFMkMwMDA2QTUwQkQ3MDAzRkNCRjA3OEVDQjlBNjZBNEYxNzVBMTlFCi06MTBFMkQwMDA3QzI3NEYwN0VGQTdCQzM0MTg1M0IwNzRDNUJDQzdGMUY3Ci06MTBFMkUwMDAzNENGRkRDRUYzRENFRjhFRjJEMUZERDQyRDg5QUVBRjZECi06MTBFMkYwMDBGQUYzMzhGOTUzOTkxODI3NDI3RUMyRUZEOERDNzQ3RUJFCi06MTBFMzAwMDAwREY4QzkyQzAwOEE2NjQ2MDEzRjc1RTA2RkE4N0M1MzYyCi06MTBFMzEwMDBBOURDQzM1MTlGMDMzRjlFNDA3QzdGQjc3MzcwMUFGMjA0Ci06MTBFMzIwMDA0REQ1QUU1QzA5RjE1RDY3RTBGN0U5RTQwRjk0N0Q0MUZFCi06MTBFMzMwMDBFNUY3MTBDNEYwRjQ3NTc0RUYwMDlENzFBNDZGNkUyOEJBCi06MTBFMzQwMDBERDNCNjgxMkQ5ODJDRDFERTg1NzZCMDZBN0YzRkUxODk2Ci06MTBFMzUwMDA5RTRGQjIyRTYwN0Y1MkM4RTA3NDE3OTQ3NjYzREZEOTY3Ci06MTBFMzYwMDA0Nzc5QzgyQTlCNzlCQzlBNjU3OUQzOUQxRDlDQ0JBQTE1Ci06MTBFMzcwMDA1QUYwREJBNzkyMzRGM0E4REE3MTg0OUZFNzYyREU3NDY3Ci06MTBFMzgwMDBFRDM5MkU0OUU5NTdFNTNGRDExQ0VBNUExN0EyMUQ1RjI2Ci06MTBFMzkwMDBBQjFDNTgzMkIyNDkwRThFRTNCREVFNzExNjI5RkMyRTJECi06MTBFM0EwMDA4MTdFMUZFQzNCQ0MyRkUzRkFBMzhEQ0UwM0FBRTcwMkJDCi06MTBFM0IwMDA2NzMwMjc5NTMzQzE3MjIyREYzQkU1OTU3NDdGN0UzNjQ3Ci06MTBFM0MwMDA2QkEwRTc5NTM5RDNFMzEwQUU2MkJFOTEzMUI4M0U1QUU3Ci06MTBFM0QwMDA1QUZCMUU4NjgzMjZENkFGMUNENTAzRTYzNUMxM0RFRDFDCi06MTBFM0UwMDAzRDJDMEIzNzA4Qzc2NTg5RTQyODA2QkZFRjE1QUExNzJGCi06MTBFM0YwMDBGNzg0RUZEREYzRUFGMEM1MThCNzFFMjc3MjNBQjAwRkM1Ci06MTBFNDAwMDAzOTFEOEE4MTlGQzU4OEY2RjMwM0I5RTk5MzExNEQ3MkNFCi06MTBFNDEwMDA0M0UzNTdFNUE2NzgyMTczRTBGOTAzRjU3RTQ4QUIxQzhBCi06MTBFNDIwMDBFNUNDRjk3QjJDRUVFMTgwM0Y4OUZDNUFCNUNCMTI0MTVCCi06MTBFNDMwMDBFQjUzQ0MzMzgzRkE0QTkxOUZDNTQ2RUU1RkNBOThEQTE0Ci06MTBFNDQwMDA5NEY0MjdGNzM3NEMwRTI1OUYxN0UzRkVDODFDOTlBRkFECi06MTBFNDUwMDBDNzRFOTlCOEJDOURGQTJBRDQ4REZDM0RCRkNCRUI3MTU5Ci06MTBFNDYwMDAyNDFGMjY1NTNFN0U5QTQyRTc3QjE4RjgxRjM3QjdGN0UwCi06MTBFNDcwMDAzRjVBRjNDQ0Y0NjJFNDZGQjAzODU3Q0NDMEM0MzY3QjVCCi06MTBFNDgwMDA3RUNBRTAxRTE0QzZGM0YyM0IxMDVGN0I2M0Y4RkE3OTk0Ci06MTBFNDkwMDAwRUU2QTFDMUZBQUU0RTA5RTNBNUE3QTJBRDc0NUYyOEFFCi06MTBFNEEwMDAzMENGMTk2Mzc2OUE5RjQ5OTkxRjhDNkMxMkZBRDMxNjU0Ci06MTBFNEIwMDAyNUFFNTYxNzMwREYxRjgyRTI2OEJFRDI3MEQ2QzBEMEJDCi06MTBFNEMwMDBCMTMwREFFNEU5MjhGNzBGNzAzQjMxQkZDQjZGNUNGODZECi06MTBFNEQwMDA3RDZGMTBCMzA5NDM2OTNFMTQ4Rjk1MERDQzU5QzdFMzg2Ci06MTBFNEUwMDBCMzM0QkYwNTQ2QUIwRENGRTUyQzk5MjY3QTA1QjIxM0EwCi06MTBFNEYwMDAzMDRFOENFNzQ1NTlFRDNDQUZBQTlBN0YzQjcwQkMwRTdECi06MTBFNTAwMDBGREY4QUM3MTBDRTdFNzEwOTkyRjY4MjgxRjJGOEU0RjhDCi06MTBFNTEwMDAwNjdBMTA3RDAwOUVBNjE5MUZGNEVCQTZGQzNGQzE5MjVGCi06MTBFNTIwMDAwREZEQjBFNjdGM0RDMEUzQ0JCNURDN0Y4NEYxNkYyMjBCCi06MTBFNTMwMDBGQUY0ODBGMUM3NUU3REZDMjY2NDUxMThGRkRDMENBRTU2Ci06MTBFNTQwMDBBN0VBNzAwNzUxNDQzQkRCOTVGNEVGODQyMEU3RkRDODUwCi06MTBFNTUwMDA4NzQ5QUVFNUJERTY2MjVDMjNENzYyQzdGODFEQkI1Q0E4Ci06MTBFNTYwMDBENzBCRjU1NDA4OTMyOEFGRDYzODA3Q0ZBQjA1REQyRDcwCi06MTBFNTcwMDA0MjdFMjhDNEJDNzUzNkYyMDNDRTY4RjNCMEIxODBGODkxCi06MTBFNTgwMDAxQTkwODVFMkFCMTMzMEJFQzZFRjEyQkQ4QkYxRDk4OTZDCi06MTBFNTkwMDBDQUY5RTZCRUVDNEIxNTdGMTQ1RjEzNzE3QzE0QUY3NjlECi06MTBFNUEwMDBEMTM4MkQ0ODU5Mjg4MzMwQ0U0Mzc0NzBEMzNDODI5OTlBCi06MTBFNUIwMDA0Nzg5NjdCNzkwN0ZCMDUyRTFDMzIxODcxOEQ5ODkyMTc1Ci06MTBFNUMwMDAyMURDNEVFQzNBQzJEQzc4RUVBQkU5QzczQkYzNDJBMTZBCi06MTBFNUQwMDA3RUQ3NzkyM0U5MjlDMDEzRTUwM0ZDRjM1RkI5NUREOTQwCi06MTBFNUUwMDA3NUYyNzgyQ0VFMDdENEZFQjgzNzE2RkRDNDVEMjY5Nzc5Ci06MTBFNUYwMDA1ODg1RUZFNzVBNkMwQkVENkQ3MThEQzY0MzIxM0NBRTJCCi06MTBFNjAwMDBBM0M0Rjk2RTUyRTZEOUM4NUFFQUFBQTAzRUE3ODdDOEExCi06MTBFNjEwMDAzMDBFOTg3REQwMTM4Q0YyOEMzOTZBM0JEQTZGMUM3NjAxCi06MTBFNjIwMDBEMUFDRkI1RDBCOTM0RDBGRTczMDBEMUM4RjIxQjI4MEY5Ci06MTBFNjMwMDBERkZGQkNDRTc1RUU2QjE5OURGQ0VFRTc5OUE4NkJGQTc3Ci06MTBFNjQwMDBERENGMkM2NTFFOEY2NjM4REZDQzIwQkIzNjQxNTRGMDAxCi06MTBFNjUwMDAyRTIwQkU0MDBGMzQyMUJFOUZBOTMwRDNFRjFBMzQ1NTZGCi06MTBFNjYwMDA5ODdCNzgzNUUzQUI5RkY1MEZDMkVGRUU3RkZEODNFQzJGCi06MTBFNjcwMDBENkVFNkMzNTNGNEU0MzEwM0UzN0NCQTExNDc3N0JFNjg4Ci06MTBFNjgwMDBCMjgxRTI2RTZCQ0FCRUE2RjU0OTdEMEVBM0RGMTFBQjY3Ci06MTBFNjkwMDBCRjVDNDI3RUMwQTUwMjg2OUI0OEFDRjZFNkZGNTM4NjZGCi06MTBFNkEwMDBGMEUzMzc1OUU5N0I4MUUzN0YxQkZDNzkwRjEwRUEyREZBCi06MTBFNkIwMDBGMEU3M0RBOUUwQUY4MDNGOEYzMERFNjdDNTcyMUJGODAxCi06MTBFNkMwMDBGMzU4QkFDMTlGQzdGMjM5RjBFN0IxMURGQUYzNTgzRUNCCi06MTBFNkQwMDAwM0ZFM0M5NkFCQzE5RkM3RjIyOUYwRTdCMUREMkFGMEZCCi06MTBFNkUwMDBFN0IxN0MwMkZDNzk3QzBFRTNDQUEzNzExRDYyNzQ2RkYyCi06MTBFNkYwMDA3RjYxNzBEODMyRjQzMzI0Mzk5NEZDOEQ4RjFDMDNCQkI2Ci06MTBFNzAwMDA3ODM1NzZGNkU2OEIwNjFEOUQ4NzlERDFGRkJFQ0Q5MEIwCi06MTBFNzEwMDA2MzExQkFERjNGQzlGOUIyQTdBRTdFRDBDMTA0NUQ3REY3Ci06MTBFNzIwMDBCQ0FDRkY3RDlCM0UwQjdFRkVGNzZENjJDQjQ2MDRGQ0NFCi06MTBFNzMwMDAzRUNFNkQwMUJGOUZBM0ZGN0Q5QjY4RTczRDAxQkZCRjNDCi06MTBFNzQwMDBBM0ZGN0Q5QkM3OTU3Qzk5MkExRDUzQTRENzgyOTAyRjQ4Ci06MTBFNzUwMDBENjk0NEQwODY3MURGODE3NkFGOTg0NDIwRjE1N0VGMkFBCi06MTBFNzYwMDAyMTcxNTI0NzcxRTRGMDFCQjlCRDdGRTcyQkNCQkUwRDgxCi06MTBFNzcwMDA4MENGREQyQ0RDODk3MUY3REQwRTAzRTlBNTY3NTY4N0I0Ci06MTBFNzgwMDA1MDFDRDZFMjFENzIxMkY5NjdCNzgzNDlDODNGQ0Y1Q0FGCi06MTBFNzkwMDAxRUQxMDVDNzMzMUNDODg4Q0Y2M0NCQjg3REVBNzlBM0U3Ci06MTBFN0EwMDA0NEZDMUM1QkU2MTNGMUJFRTgyRDk3N0Q3NkU0QzcyNzk5Ci06MTBFN0IwMDBDM0Y4RUY2QzQxQkZFRTg1RDBERjNCNjMwN0Y1QzUzODhBCi06MTBFN0MwMDBDRTMzMjFDMENGMjg2RjFFNUY3MDEyQzBFMTU3MEMwQ0YyCi06MTBFN0QwMDBGNTIzRDg0QUNBRjMyRkZGMjE0NDM5OEY3QTg1RUVDMzM3Ci06MTBFN0UwMDA4NUEzNEUwN0JEQjRCQjhDN0YzRkM1N0IzOTU4RUIwRjZCCi06MTBFN0YwMDAzREZFRDNENUYwQzI4OEFGM0FBREJGNkQ3NjAyOEVCNzdECi06MTBFODAwMDAwREVGQTAxQUExNEM2MTY1RUMzMUM0NDczOTk3OUZGQTBFCi06MTBFODEwMDAzMjAzQzlEMzI1OTAyN0M0MEZDQzlBRThDMjVBRjRGMjI4Ci06MTBFODIwMDBGRTA0Q0E4Nzk2MEVFNTA5Q0I3MDlFQ0ZBQzMyRDI2RTNECi06MTBFODMwMDBEOTI4RjFENTdEMzdDMjJCNkIwRThBQjRDRDJFRDk3QzY5Ci06MTBFODQwMDBDMTFERjk3N0VBQjhENzM4RjhGQzIyRUNDQzgwNzYyRUQ3Ci06MTBFODUwMDAwMkYwRTlBNkZENkM3QkFERjZGN0FDRkVBMEM4RTdFRkQxCi06MTBFODYwMDAxNUY5N0M1QUUxMDc1QzZGMjMzQzRBNUMzQjNBMDVDN0NCCi06MTBFODcwMDA5MUMzRjUzNUQwNTNDMEZCNTg5NzY2MzBGQTFERDFERkYwCi06MTBFODgwMDAxNzI1NzRFOTI4Q0ZGNzJBNjUxQ0NGMjlGMzVBOEJGRDg5Ci06MTBFODkwMDA5MjNDNzNCOTFGMjUxNjBGQzc3RUQ2MzgxOUU5RjEzNTlBCi06MTBFOEEwMDA4RUFGNkIzMTZFNzdBOTg4RjdEQkU3MTFBRjgwRjhFRDlCCi06MTBFOEIwMDA1NUVEMTNCMEZGREVGMzNDNTRCQTk1NzFGNjJDNkJBMTA1Ci06MTBFOEMwMDA3QUI1M0ZDOUVFRTZGQzVFRkUzNTZCODZGOUUyMjE1QjY4Ci06MTBFOEQwMDA5MUVDQzUxOUNBOEZCQUM2Njg2NDY4ODc1MTlGMjE3Q0JDCi06MTBFOEUwMDBDOTZBQzQzMzEyQUNFN0FDNjMwQ0VGMzNENzg3MTg2OTNECi06MTBFOEYwMDA5RjYyNERFNTI5ODI1N0RBMzgxQzI2NTdBN0UzRjk4QjJBCi06MTBFOTAwMDA5RENBN0NDMjY0OTk2MDc3QzA3QzUyQTRBOUUxREFERjE5Ci06MTBFOTEwMDA3MzBEMkNCNzJCNzhERUE2RTA2M0E3Qzk2NUI4MDBFM0JBCi06MTBFOTIwMDAxOEZDMzc5MTdFQkZBM0IzRjc1NDNCOUJGM0E1MjE0MDVFCi06MTBFOTMwMDBGRjc0RDFDOTNGRkVDNjlFNjIxNzFFQkExMUQ3Q0ZCMjZGCi06MTBFOTQwMDA5M0VDODJCQTZFREIzNjg2REJENzk1QzE1MzNFQzQ3NTM1Ci06MTBFOTUwMDA3RjkxQzI0NzRGMDc4RjdCMEZFQjBGOENFNkJGODNEM0FFCi06MTBFOTYwMDAzNEZBRDZERTVBM0RCOTQzMTlGNzc2MDVFRkI5QjJFMzZBCi06MTBFOTcwMDBBQjc5RDBCRUQwNjlDMTkxODExOTczRjRGRTE1RjRFNzZCCi06MTBFOTgwMDAxQzIzREEzRDQwQjc4M0Q5QUEzQzM4ODM1MUVFREUxOTA3Ci06MTBFOTkwMDAzMzlEMURDMkZFMEJGOEJFRDNCNjgyODlGNDVDNjJDRUY1Ci06MTBFOUEwMDBEQkZCQzM3QjlGQjQxOEM5OUY4MUU3M0YyQjhGRkIxNTBGCi06MTBFOUIwMDBGQ0ZGNDUxOUM3MDcwQUZFOUIxNTNFREQ4Qjc2MjQxNTIzCi06MTBFOUMwMDBFMzJDNjk1NEJFQTNEODExOEY2MjQ3NzYyOTc2QTQ1MUVGCi06MTBFOUQwMDBCMTIzM0JEMThFQTRFMkJDMjY1MUI5NERCMTIzNTlBMzNBCi06MTBFOUUwMDA5RjI0M0ZFOTEyRTZDNTE1RDA4RTU0QjIyNTMwQ0U3QzY3Ci06MTBFOUYwMDAxOEJGRDg4MTdEMUI5RjIzMDZGQzRFNTZCMDhFNEVCN0E0Ci06MTBFQTAwMDBBNzQ1RUFFMEQxNTI2Q0MwRUY3NDI1MDZGQzhFNTczRjUzCi06MTBFQTEwMDA1RDdEOUUzNTMzRTA3N0MwODZFQURBREZFMjFGMTFGMEQ0Ci06MTBFQTIwMDAzQjYyN0EzQjMyRTREODA0QkQzRkYzRTUzREJBRkE0MTlDCi06MTBFQTMwMDAwNzRCNzRGNTMyRkUwM0U2OUI3RDhDRjFGQ0IyQzFDMzNCCi06MTBFQTQwMDA3RTg3RkM5MjdERENBOEZFM0UzM0VEQTNBOUZFNTZBMDk2Ci06MTBFQTUwMDBGRjkzQ0Q1QUY3RjEwQ0I0OEYyNzMzMDlDRjc1RDI1NkY3Ci06MTBFQTYwMDA2NTgyQUU5RUZDQTc4MzI2NjcyQzlFM0ZBQzJEMDRCRTFDCi06MTBFQTcwMDBDMzczODgwNzRCQzczMERBODcwN0ZFMDU3OUNBNzY5RUNECi06MTBFQTgwMDBGODkyRjI4RDhBQzU5OUU0Mjc1RDM0RUFGNkQzNzIwM0QxCi06MTBFQTkwMDBGNkM1OUMyM0Y1RkI2NkQ5NTdEOTM3RkJGQjhEQ0FCRTVCCi06MTBFQUEwMDA0MzNCN0YyQ0UyOUFGQzMxOTAyNzExQzdGRDc0RjA5NDEwCi06MTBFQUIwMDAzRDg4Qjc5RDlGNzEzQkQ1RjREOTgzQjFGOEZDNUQ2QzVGCi06MTBFQUMwMDAwQUZENkNGRkU2NDFGMkJCQjZCN0NBODcyQjU4RUI2RjY1Ci06MTBFQUQwMDA2REYzNzI3QkYxRTZDMTg0MURCOENFQzg4QTE2NDgwRjZCCi06MTBFQUUwMDA2NjFEOTkzQjk5RjhGMUEwODE3RTlGMzNBNUEwMkExODU1Ci06MTBFQUYwMDBGMUIyRUREMEMyNjBGREZEMjk4RDdFMjA0MjY5RjQ4MzI0Ci06MTBFQjAwMDA4OEFDMUNBMUFGOEZEMkYwNjEwMjI3OEVCNkZERkYwNTQ1Ci06MTBFQjEwMDA2QjkyRTgyQzAwODAwMDAwMDAwMDAwMDAxRjhCMDgwMEIyCi06MTBFQjIwMDAwMDAwMDAwMDAwMEJFRDdEMEI3ODE0RDVCREY4OTk5RDE5Ci06MTBFQjMwMDA3RDI1QkI4MUNEMDNERDQwMTIyNkUxNjE1NDFFOUJGNzhDCi06MTBFQjQwMDAyNjI0NjExMjAyNDYwREIwMTAxRTQxNDI5ODI0M0M1MjA4Ci06MTBFQjUwMDBBQjM2NTVBQkQxOEZERTRDMDg4NDEwNTFBMkI1MTVBQzQ1Ci06MTBFQjYwMDA4Rjk1OEFFREVERTMxNkFEMDQ1NDk0RTVFOTAzODQwNTMxCi06MTBFQjcwMDA4MzQ2NDU1RDEwRDFEQkQyQkYyOEQwREE3RUY0RjM3RjI3Ci06MTBFQjgwMDA3RUJGNzMyNkQ5MTkzNjAxRkFCOEFEQkQzN0Y5NzQ3MjU0Ci06MTBFQjkwMDA2NkNFOUMzOUU3Rjc3RTlEMDMyMUQ3OTA4MDlERTBDRjFDCi06MTBFQkEwMDBENzIyRkMzRkQzRDAyRTIwODFGNEYwNzZBOUExN0Q4MzFCCi06MTBFQkIwMDBBMUZGNEM0M0ZCMjY0M0ZGM0FEREYzQURBMTk5ODMxNTNBCi06MTBFQkMwMDAyN0ZEMUI3RTI2NUU3OEREREM0QzQ4RTBBQUJFN0UzOTQwCi06MTBFQkQwMDA2NjlGRTgxOTczNjFCRkRDNkU1M0RGQjhGNEJGMUQxRjc5Ci06MTBFQkUwMDAyQzMxOUQ0QjIwQTRBQjVCRjREQjUyRTlGNUU4MTJBMjdCCi06MTBFQkYwMDA2NkQzNzFCQTREN0UyMkUwRDU0NEU4RjNBRDNEQUM2REVECi06MTBFQzAwMDAyM0FBNjMxQzdEQkVCOURCRUNFOTkwMDhEOUNFQkYzQkRCCi06MTBFQzEwMDBEQUI3NzBCMDJGODY5MDg5RTZEMzExQkYyQjlGMzdGNUY2Ci06MTBFQzIwMDBBRDhGQzA3ODMzMDc5MzA4RkRCNEVCNEUzRTZFQTBEOThDCi06MTBFQzMwMDA4RUQ3NkRDRDJFMTJCMEY1M0QxNzYzNzJCQTdENzQxRTVFCi06MTBFQzQwMDA1RDIxOTM4N0RFQTZGMzJGOEQyNzc0RERCQjlDOEIxRDgyCi06MTBFQzUwMDAzMDJFOUQyRjIxNDMyOTE2M0M0OTU1MkQyMzA5OTFFODNCCi06MTBFQzYwMDBCQzRENzQxRDlCNDMyNkQyNDFENzk5N0Q4NDdEM0ZEQkVCCi06MTBFQzcwMDAyMkM3QkIyMkMwOTUxMDkzMUVGRTE3OEM0NzdGMDA0RTAzCi06MTBFQzgwMDA0RUQxREY0MUUxQjJGMzgzMzlGMUUzRThGODJGNzQ4QjIxCi06MTBFQzkwMDAwNEU2NjM1NTFBMUNCRUIxQjREREMzRTZBNThEM0JDOUJECi06MTBFQ0EwMDAyRUVBRTA1MDQyMUMzQTdDMTQ5RDhFRDNCNUIzOEZEMTJFCi06MTBFQ0IwMDA3OUQyRjdBREQyRjQ3ODgwRUZDNUU2NDk0OEI0ODE4RUI5Ci06MTBFQ0MwMDBFMjBDRURBMUJBRkVBMzI1OEFCN0IxRkRFM0UxMDU4RTAyCi06MTBFQ0QwMDA4N0NEODAwN0JBQjAxN0EyM0M1NUJFMDhGMERBRkNBMTc4Ci06MTBFQ0UwMDBCNUMxMUY3NkZGM0YzQzE0Mjg0M0UwNkFDMjZCRjYzMTgyCi06MTBFQ0YwMDA5MzI3NDBFMTczQUVEQkU0MDFFMEU1QkIzQUM1QzYwODBCCi06MTBFRDAwMDBFMzE0OUNEMEQzNjc2RTc3QjQwRTVFNDRBQzFFOTAwRkI0Ci06MTBFRDEwMDA5QThFQjZBQ0RBMURENkZGMUU0RjRDQzI0OTA3RkQyM0IyCi06MTBFRDIwMDA4RkU0RTFGQTJGRjJGRTFGOUJENTU1QkIyRDk0OEUyOTVGCi06MTBFRDMwMDBDOTZFQTJGRDg4QUI5MjkwQzRGRUZCMTNCMjlDMzI1QkZECi06MTBFRDQwMDAxRjFDODkyQjlFMkVFRTUyRjBENDg5RUY1RDgwQUY3RTgyCi06MTBFRDUwMDBERUVGMUI0NzY1RjBBNEUwODU3RUFCQzZGOTdFRTg4MTU3Ci06MTBFRDYwMDA3MTQyMzM0NEY4RkU4MzhFREJDNDEwOURGNzIzOEVEQkEzCi06MTBFRDcwMDA3NjAxN0RFRUZGOTM1NTAyQkVERUYxQTdBRTI0QjhCRjRCCi06MTBFRDgwMDAyRjYzNEIxMkQwRkQzRUZBNEUxMEQ2NjdBNjU4QTM2REU2Ci06MTBFRDkwMDBBQkJBQzAwMUY0RjU0NkY3NjFFNDFGODkwNDZGMUM5RjBDCi06MTBFREEwMDAwRDZEOTNBNzgzNzY3QjM5QkQ3MjMwMTkwMDZFQUY3MUZDCi06MTBFREIwMDAzQUQ5Q0JGOTc1MzdFN0Q3OURDRDZFQ0VDNzEyNUU1RkQ2Ci06MTBFREMwMDA2OTRFQzdGQkRCOUEzREQ4N0VCMUQ5OEJFREFEQ0QzMjE0Ci06MTBFREQwMDBCNkJCOUFDQkYxN0FBOEQ5ODdGNzBGMzY1NzYxRkJDRDJFCi06MTBFREUwMDA2Njg1RDE2MUZBMUQ2NTIwOEZDRTI1NTEwMEQwNzUyRDI1Ci06MTBFREYwMDA3NzRDMzM0N0MyRTdGNTkyOUVDRkFFNzNFQkY5NkMzMjk2Ci06MTBFRTAwMDA4NTczNzg3QjkyN0Q5ODgxMkY0N0U4OUU0RkZDRUExQUE0Ci06MTBFRTEwMDBEREYzQTJEMzk5QkFGNjg0Q0YwQTc0RkRGMzQzQTVCQTAxCi06MTBFRTIwMDA3NjVFQ0YwREJBRkUzM0NCMkE3NUNGN0Q4NUYzRjVGMzMxCi06MTBFRTMwMDAxMzlEMjg1RkI2QkIwNDk0Q0JEM0IyRUI3NUNGQjdDMzk5Ci06MTBFRTQwMDAxRjIwODdFRDgyNUY0RDA1Qjg1NDBFMjg0RjAzODAxRkE5Ci06MTBFRTUwMDAxQkMwOTFGMUYxQUIxQzNGN0IwMDNGMzZDMDBCODNGRjIxCi06MTBFRTYwMDBDQjAwN0ZEQTdFMDlFMDREQUYzOTY3OTU1RDgzMjU5MDUxCi06MTBFRTcwMDAwMzBERDhCNkE2MEY3NjdBMjhGQzVGNzY4QTI4RkZCN0VFCi06MTBFRTgwMDAzNDM3RTI3QkZCQ0VENTlEMTU3MUJFMEUwOUYwQjI5REU1Ci06MTBFRTkwMDBDRjY3OUY0NTM5MkIyNjQwNUI5MDk2MEIxN0NFMkJBNzRCCi06MTBFRUEwMDA0N0NGRUZBM0NCMTdBMkRDRENERTdEREMwMUY0RjZDQTkyCi06MTBFRUIwMDA1Nzk3QTZGN0I0N0VBRjkyQ0E0OTQwMUZDNURENTQ1Nzk1Ci06MTBFRUMwMDBBNTVFNUNGRjY5N0FFQjYyRTM2QkZENDBBRjQ2RDIxNzRCCi06MTBFRUQwMDBDNjcxNkZGODRBMTEwOTVEQzdDQjNERUEwRjYyQTAxREVDCi06MTBFRUUwMDBGODk2MjhEMTc2NkU4RjMyMDlGMEI2M0I1RDcwODkwMkI0Ci06MTBFRUYwMDBGNjlCMjRDM0JDQ0YxRkJFMTFFRUJGMTIzMjlCNjBERTU3Ci06MTBFRjAwMDBGQkNGQzcxMTU4Qzc3NkFBNzc2REI0REYxQjY0QzQ5QUNDCi06MTBFRjEwMDBGMTE0REU4MTlFMkZGNzAxNUZBQTRFOEI2NzE0Qjk3MDQyCi06MTBFRjIwMDAxRTI5MTkyMkNBODdDRDYzNkMyNjYxM0NFODNCMzMwOTUwCi06MTBFRjMwMDA4QzAxM0U1NzEwOUU1RDVGQTUzOUUxQkEzOTVERTRGNzVCCi06MTBFRjQwMDA4M0M4RUY1NzY3QjhGMEJEOTdDRjY3MjY0MERCNDQ4MjkwCi06MTBFRjUwMDAyODBGMDI2NzRERTVGRTA4RUJCRDFBQkU0MzY1NDhDRTlCCi06MTBFRjYwMDBGOThGMUMyRURBN0ZFRkQ5M0EwN0M4OTc1NzdBRDhGODZECi06MTBFRjcwMDAzOUNCNDIwRTgwRDNCRUFGMzYzOEUxRkVGNkY0MkMxQ0ZFCi06MTBFRjgwMDA3N0M3RDhBNTY4NUY2QzNGNkI0MkJBREUzRTY2OTUzM0EzCi06MTBFRjkwMDAzMzFCRDdFOTAxRDg2RDNGNUJCNzI2MDNFOEJBQzc4Q0FFCi06MTBFRkEwMDA2RDg5MjgyNDA4RjQ5NkNFRjRFQ0U2QjM3NUU0MzA3RDQwCi06MTBFRkIwMDA3RUNFMjNGQTgxQ0U3MjQ4RTdERTQxNzBGRjhBNTU1NjM1Ci06MTBFRkMwMDA5MkM2RTA2RkJFODI5MDVCRDlDQjY0OTI0QjJGMDc0QTBBCi06MTBFRkQwMDA3QkY0RkFDNDFBQUE5RTM1MDNFQzA4QTA2N0RBOUU2QThECi06MTBFRkUwMDA4RUQ3M0RERkY3RUVGMjg0OTk4MDE3MEE2RkI4RjdDQTIzCi06MTBFRkYwMDBEOURCRjc4RDA1RjlFMzY3RURERjFGN0REQTNBOTg1RTFGCi06MTBGMDAwMDA1QkM2QUUxQTc2MUJGNERCRUNGMEQ4MjQ3OEEyOTAyRjA2Ci06MTBGMDEwMDA2OTNCRUZBQ0Q5MEZGNjQ2OEU1MzNGOEY3RDU3NTcyMjkxCi06MTBGMDIwMDBEQzM3OUY2NUY2RDVCOTc0QjY5RUVEOUU3QUYyMDA3RDA5Ci06MTBGMDMwMDBFRjY1NkU3RjREM0EzNkIyMDJCRUI3OUZEQTRGNjA1NzJBCi06MTBGMDQwMDBCQ0U0Rjk0RDdDMTZDODMzQUZBOEEzMzcwQTFGQTQ5N0I4Ci06MTBGMDUwMDA3M0REMDRDN0ExM0Y4M0E2NTIzODE0QjIyRTk0MEY3REVFCi06MTBGMDYwMDBBRERGQTFDRkY3RTVEQjVDQ0IyOUFBQjc5RkRGQjlFQjFBCi06MTBGMDcwMDA3NkRBQ0U0QjE0ODk0ODU3RjIyREJGN0U3RUY5M0Y3MzY2Ci06MTBGMDgwMDBFOERBQjc3RUE2Qjc0QjZDNDRFMEZBREM4OTcyQTAzRkExCi06MTBGMDkwMDBGRTk5NzBEQUFBN0I2RkFBRDlBNjFCMzc4Rjg0M0Q0N0U5Ci06MTBGMEEwMDA3QzVBRkI5RUE3NUVEQzNFRDlDMkU1OUE2NjlGNkNCMTk2Ci06MTBGMEIwMDAyOEYzN0Q0MEQ3QzE1OTE3RDFBM0NCQjlGRTZENDQ3OTUwCi06MTBGMEMwMDBCMTk1MTA0RjQ3MDY5NUVCNTc4QjMyRjBFMUI5QTM3NjE3Ci06MTBGMEQwMDA4NDYzREUyMzMzMjYxMEQ0RDdDQTA0RTAwNzI0QzYzMDY1Ci06MTBGMEUwMDA3QkMwN0JGNDIyRjY4QTRCMjUwOUI5RkM1MzA0QUVFNkJCCi06MTBGMEYwMDA5MzIxREFCRjlEQUFGOUFGNDE4NzczN0Q2RTFDQjczRjlDCi06MTBGMTAwMDBCREZGQTA2MzEwQ0FGREMyMzJBNjE3MUU3MTFDNDAzRDkwCi06MTBGMTEwMDBERkY1MDFENUYzMDJGQjQ2ODhFMjdEMzZGQzAxN0FGRjdDCi06MTBGMTIwMDAwMzJCRjY3RkU5N0EwMUU1ODg2NjM3NTQxMkQ5NDI1NUY4Ci06MTBGMTMwMDAxQzk5RTYzRDZCQkU5RkUyQ0Y2N0FGMTk3QjJCQkRCRTJFCi06MTBGMTQwMDBGNDZFRDczMEUwREY5N0MwM0U0MEY5RDBFODYwRjY0MTdBCi06MTBGMTUwMDA4QzFBNEZBN0I4QURDNzg2N0NCOEU1QjQ4OUQ4QzE2RjAzCi06MTBGMTYwMDBEODY2NDMzQUE1N0M3QURGNThGQTlENkQ0MTY2MkY3NEM0Ci06MTBGMTcwMDA5REU2RjZERTM2MDdGMkM5OEVERkIzNzk3NDJENzMzMDYzCi06MTBGMTgwMDAzRkUzOTQ1NTA2N0I3Q0NCQjIxODg0RjM2ODI5MjY2MDU0Ci06MTBGMTkwMDA4NkYxOUFEOEY4M0QxQ0FGNkY3M0JDRUVFM0ZBRUE3NUJFCi06MTBGMUEwMDBBRUFGNUUwNTdCMDJGNTE3QjMyNzc2ODEzRDQxQUYzQkRECi06MTBGMUIwMDBCODNEQjExREY0MTlCRDNFN0ZGQUI5Rjc4MTJGQ0Y2RDZGCi06MTBGMUMwMDA4QjQyQkI3MzM0NDlERjA0RjNEQUU2QjRFMjNDOEQ3MDYyCi06MTBGMUQwMDA5RUE3RThGOTYwNkU5NURFNkVBODE4QTNCNzFCNkUxODlGCi06MTBGMUUwMDAzOTRDRDcyRTRGMUFBMTdCN0Y0QUMyQjVCQUU3NjVDRUZDCi06MTBGMUYwMDAyQ0JEM0MzMjRGRDBCNUU1RjM3QUJCNjFCQUY3NDYzRDQyCi06MTBGMjAwMDAzREM5NjE3NjAzQ0EzQkJEREYzODNCREM2RjRDMDUzQzMyCi06MTBGMjEwMDAzMTNGNjc0QkNGRUQ4OEM3MkQ0N0QzMDYyQjYxNzZDMkIwCi06MTBGMjIwMDA1NjBFRTcyRDQ3OTlGRURDMUFGQTMyNDY4OTYwNDc3Qzc0Ci06MTBGMjMwMDBDNkZCRkQ5NkUzRTMxNEM3Qzc3RkE3QzgyNzMyODYwMDQ1Ci06MTBGMjQwMDBCRjdDQzlFNDZGM0Y3NEFDQkRBRkJERjc5OUZGRTM0MTJDCi06MTBGMjUwMDBFMTdBN0RCODI4MjE5MzY4RURERjc3QkQzRjFBOUU1Rjg0Ci06MTBGMjYwMDAyQTVGNTAzQTZEMEY1MTNDREYyREM2NzQ3NkQwNTc1NjQ5Ci06MTBGMjcwMDA5OTFCOUY4NEI2QUE5QUM5QzY2QzA0NDdCQTE5OUY1RkE2Ci06MTBGMjgwMDBFMzAxNzlEQzFBRDNGODUzNzhCRUI5QzVFNkRBOTAwMDA5Ci06MTBGMjkwMDA3Q0Y0MUZCRjg2NzYxMzY1MDUxQkJERkUzMTJBQzU0RjYyCi06MTBGMkEwMDAyOEFCNTkzMzREMzhBRjY3MkNCRTYxMUVEMDlCODI2RjlGCi06MTBGMkIwMDBGRUFEQjRCRkJBREVFQUQ5Mjg1RDM4MUY2N0E2QTAzMTFCCi06MTBGMkMwMDBGQjU2RDA0MzIyRTdGQjNGMEI4QTMzOTNERTk3N0YyOTFGCi06MTBGMkQwMDBBMDlDOEU5MjA4RUEwNTFCRjEwNTgwN0Y0ODgzM0MxRkE1Ci06MTBGMkUwMDBGODgzOTgyOEZGRDBFQkJENTk0QTFDRjQyNzMyOTE1QzczCi06MTBGMkYwMDA3NDFDNjQ2REZBM0QyMUI4Rjc0RjAyOUQ5Nzg1MzRBQUJFCi06MTBGMzAwMDAzMDhFQUQ4MTRBMThDQUNGMEY2NjI4ODlEOERGM0MxM0VBCi06MTBGMzEwMDBDNzdGN0UyQTIxMjBDRkU4NzJCMDlEN0QxNzcxNzVDNDBBCi06MTBGMzIwMDBEMkY5MTFDNUY0MjU2RENGQTdGRTNFN0NERkU0QjgwNTA4Ci06MTBGMzMwMDBGNUQ0RkJGRjZERjI4QjExRUNBNTVFMzhERjYyMzkxNTU5Ci06MTBGMzQwMDBEMkU4MkNFRDQyRkFFOUUyNzRCMTM1RDU4N0YyRDdGODZDCi06MTBGMzUwMDA3RTY2MjZGMzA3Qjc3QzM0NEQwNEZBQ0FCNjBGOTJDMTE1Ci06MTBGMzYwMDBBRUEwMEIxNDY3NTBGOUJFRjVGODBEOEVEQTA4RUY0RDFDCi06MTBGMzcwMDBDRUFFQ0RDQzFDRDJEN0NFMEU2RTEyNkI5REU4Q0Y4QjBECi06MTBGMzgwMDBCMEFFQ0RGNDZGNThENzhCRERBNjAwRTBGNzlDRDM4QUUyCi06MTBGMzkwMDBGMkE0QkY3NUU0ODdGNDcxODgzQ0IwMDdDMkY4OEQ5MDgxCi06MTBGM0EwMDA2QUQ3Qzk2QjAxREU5REMyRDdENzg2RDM5NzdDNUYzOEY5Ci06MTBGM0IwMDA3RDNEN0YyMTdEMjE5Q0VGN0UyQjFERTFEQTJBMzBGQUY1Ci06MTBGM0MwMDA1MjI5N0RDMTczQjVCNDExRTk0QjM1MTE1RjZCMzZEMjRCCi06MTBGM0QwMDAxQkJFREY2NEI2QkI2QzU0NDIyRUNENEM0M0JBRTk4QUU3Ci06MTBGM0UwMDBBOTc4M0YyMEUxRjc0NkNDNDQ3RkFFODZGQjczMzUyOEYxCi06MTBGM0YwMDBFNzVGM0ZDMkU0QkM3MTVEM0I4RUNDMTkxNjAyN0I2MkI1Ci06MTBGNDAwMDBENERDNjFDMEU3NURBMDAwODZDMkY0NzNFNzgxN0REOURBCi06MTBGNDEwMDBEQkE2RTg0MjNCNzAzMjgxOTAxNTdEOUUzRDRGODZGRTEzCi06MTBGNDIwMDBENzZCRUQxQ0Q2QkY4NEY1NUY5MkY5RjA3QTE1OUUyRjRECi06MTBGNDMwMDBFMENGNDkyNUVCQUZCNUQ1QkM3OTI1RDBERjYyQzJGNjY4Ci06MTBGNDQwMDAwN0JDRkY0MzFFNzkyOUQwRTM4MzE5NzIwM0UwMkYwMzIxCi06MTBGNDUwMDA4QzE2N0FGRDY0QkM3QzMzREM1RjlBNDk3MEJENzc4RDc1Ci06MTBGNDYwMDA5NzZGMDk2RkZGNjY5QzdDNUI3ODdCNzNBRjlGREFDOUVGCi06MTBGNDcwMDBGREQ0NUJEMTJFN0RCRDY3MjZEQUIzMTJGMUREMDg3QUFCCi06MTBGNDgwMDBFN0Y1MjA4QjQ3NkQxRTM5QjAxRjc0ODBEQkYzRkJCOUE1Ci06MTBGNDkwMDA5RkZBMDZDOEEzQUI0MDlGMzAzRjc1MEZGNzUzNzc3MUIzCi06MTBGNEEwMDBCREIyODNGQkE5REJCOTVFNzk5OUZCNDkyRjcxM0ZFOUI2Ci06MTBGNEIwMDAwNUYwNTNBRjAyM0JBNDhBQzc0OTk4OUY5QTNENkE1MjEwCi06MTBGNEMwMDAxOURBMTEyRUNENEY0RDg5RThBNzRFRjdFQUY1Q0Q1NDQ0Ci06MTBGNEQwMDA4RjVFREZEQzk4MUU2RkQwMkY3QTdEMzMyNTQxQUY2RkIyCi06MTBGNEUwMDBDQTlDRDcxQUY0NEI5NkFFQkY3QzVFRUZBNzE2OUYyRDMxCi06MTBGNEYwMDBENUY1MkYzQ0E1Rjc1MzBCNEVDQ0Q0RjU1RjlBMjkyMUI3Ci06MTBGNTAwMDAxRUJENDc2RkQyRjVDQkVEQUVEM0Y1RUJDMzlCMEZGMTJDCi06MTBGNTEwMDA2NDU1MUY3NzgyMURCNzc5NjQzREM3MUJCMzE3MzRCQzkwCi06MTBGNTIwMDA3NTVEMDQ2RkFGNzJCQ0VERTE3OERCQzVGMUI2ODNFM0M2Ci06MTBGNTMwMDA2RDNCQjcwNzVFRTY3ODdCODlEQjAzMkY3MEJDNkRFMTFFCi06MTBGNTQwMDA3OERCQ0NFMzBCMDczOERFRjY3M0JDQkRDMUZERERFQzI4Ci06MTBGNTUwMDA1MUJCRDAzRjNCNzc5QTcwQkMzRDIxNDZDMjVCNzk5MjRDCi06MTBGNTYwMDA2OEMwODNDMzgwMDczRERFNEFDREMzMEM3ODQ4MzNFMEQyCi06MTBGNTcwMDBFMTFBNURCQkYwNTRBNjAxMEYwNUJBQjZGNzY4QTkwMTAwCi06MTBGNTgwMDBGRTM3MThFQzg2NEFERDczMEQ2RjUzM0RGMzBERjQ1NUNECi06MTBGNTkwMDBBRkVCNzdDOUZDRTY2NDc2REU1RkNCNkY3QkI5MURCNzU2Ci06MTBGNUEwMDA5QkUzNkQyN0UwMERFMzQ0MUUxRThGRjBGMkI4MkZCM0VFCi06MTBGNUIwMDBFMzVFRTQ3OERCQ0FFMzQyNUQ4MDM3QjBFRjM4REU1QUMxCi06MTBGNUMwMDA0NzlFNDEzQkZFREM3OTBENkYwNzIyRTJFRDcyRjlFREJCCi06MTBGNUQwMDAzQUI3M0UyRTM0RDlBNThGMEI0REIyRUJGOUFEODRFODg2Ci06MTBGNUUwMDBFREJCODk1RkU5RjlBREU4QjRERUJFOUJGMDk5OUVERjIzCi06MTBGNUYwMDBGMjQzMzM3NTZENkEwNzI0NjQwRDAxM0Q3NTkzRUVCRENBCi06MTBGNjAwMDA5QzYwOURBRTFGRjU5Mzk4REZFMkUxN0FERjVGODlGQTk3Ci06MTBGNjEwMDBBODZEMkFEMzhGOTQwRkQxRkU3RUU2N0JENDBFQzhFODY2Ci06MTBGNjIwMDA4M0M3RjMwNkZGRTlGOTdFRjRGN0U4MkM2NkQ3NzRCRENCCi06MTBGNjMwMDA1RjgzNzBDRDAxRkQxREExNUYwNkVGOTc5MUU1QzJBQjIxCi06MTBGNjQwMDBDRDRDRDRFODRDOUNFNkVFQTE3NDNFRTY5MUNDRUUzMTc0Ci06MTBGNjUwMDBDN0FDODEyMDAzRkMwNDREQjk3RDc2OTJFOEY0MTExODAzCi06MTBGNjYwMDA5RkRBNEIxOTU5NjFGNkEwRDlENTQ4QzA2RTEwNkQwRkJECi06MTBGNjcwMDA1NUMzQkE4ODY4RjJBMERFMzVEODQ3QTRDMTI1REYwRThECi06MTBGNjgwMDBGNzZGMUZFNEU5QTBCMDU4OTIxNThCRjM3MDkzNEQxNkY1Ci06MTBGNjkwMDBCMDMzRUVDRDkyMEI2MDVDNzExMjgzQzdFNjY0RUFCQkI3Ci06MTBGNkEwMDA1Mzc4NkM4RTYyNkQ5NUMyNkIyMzZEOEI4M0FCMTE3RTJDCi06MTBGNkIwMDA1RDE0NUU2MjA2OEM5RjQwRUVBMkYzQUFDQ0IyMzIzODkzCi06MTBGNkMwMDBDQzIzNUM5RjZFRDRFQjQzMzAxODY4RkI5OTY4RDY5RUMwCi06MTBGNkQwMDA5REY1Q0MzQzM1QTk0RkZGRDZGQ0E2NkJCRDRBQzcxOTlBCi06MTBGNkUwMDBFRDFDNUE0RkM2RDE3MUQ3QTk3MTYwNjc4RUExRjMwMzgzCi06MTBGNkYwMDBGOTY4NzI2QzRCOEU2NDdGRjc2Nzg3QTlFM0U0NTk0MDIxCi06MTBGNzAwMDAxRjc3NzFGRDNBOUE0MkM0OUNEOUZGRkJDRjQ0RkJCRUUwCi06MTBGNzEwMDAwREY4Q0QwNjc4ODRDNUJEQTY2NjMxRkJBQzEyQzZDOTBFCi06MTBGNzIwMDA0MUZCNTIwRUI3MkY0OUIwMTJEQjZEMTk4Q0JFN0VCMjcxCi06MTBGNzMwMDA2NjI2RDI5QjkzQzI0QjhDODVGOTMzRjhDREJGOTNEMTBCCi06MTBGNzQwMDBEN0U1QUU0MzlCRkYwMDc0RTIwQkI3QTdDM0U4RTRBRTc2Ci06MTBGNzUwMDA0ODc0NDIyQTNDNkVGNEQ3RkJCM0U3NTQzNkRGNTY2RTRBCi06MTBGNzYwMDAzRjZBNzZCMjJENDlCMzlCRkQxQzBFMjQ1MDEwODc1NzdCCi06MTBGNzcwMDAzMjk5QzIzNUNFNDUzMDVFNTNFMzMyRjlGRDE0NjQ1MUZGCi06MTBGNzgwMDBCMTk5MDJDQTlEMzI4MUI4NTI2MTc0OTkzMDNDNTY0ODkxCi06MTBGNzkwMDBFMUYyQzcxODFGRjQxRThEMzZDOEY3Mzg4MzFFMUVBQTYzCi06MTBGN0EwMDA2QjE3OUY0RDMzRjg4OUQ3MENBOEU3Q0I5QzEzMENGQTQ1Ci06MTBGN0IwMDA2OTkyQUU3Rjc5RDI4RDA2M0ZCNkQyRTBFN0VBRjU4NDUyCi06MTBGN0MwMDA5OTk4NTU4RTJGMTNDNjJENTQ0MTMyRTdDMjdEODJGODg5Ci06MTBGN0QwMDAwOTdCOEU3RTY3MkY5QzFGOTNBQjkwNUZCOTVGNjNFNEJDCi06MTBGN0UwMDBENzdCQjMyNDg0QjNFMDYyN0U4REM2MEZEQUZCMUFGQ0FDCi06MTBGN0YwMDBBQzZFODZEN0I1Qjk5QTdFRjJBMERFQjEwNUJFNDUyMEMzCi06MTBGODAwMDBBRTRBNkQ2ODc5NTMxOEJENkQ2OEI2QkY1RjM2OEE5MDkxCi06MTBGODEwMDBBNzlCQzlGQjY1MTQ3OUZFNjYxNzVFOUY2ODc2RTNGNUMyCi06MTBGODIwMDBCMTY2MDlBRjhGMzZBNzYzQkY3NUNEMUU2Q0ZGQThEOTJGCi06MTBGODMwMDA4QkQ3ODc5QjY1QkNGRjUwNzMzOUI2M0I5QjdERDg1RUU5Ci06MTBGODQwMDBEMzVDODVENzhFNjYwNUVGOEYzNDJCQUE5REFFNkI2NDkzCi06MTBGODUwMDAzQkYxQTg3NDI5QTMzQUU5RjdDMkUwMzZBMjlEQ0UyMzcyCi06MTBGODYwMDAwQ0VFQTlBQTRCRDcxRURFRTRENkY1NEY2RTk0NzRDRkVBCi06MTBGODcwMDA4NzM1QTRFQjlFMjcyQTFFNURGQkNBMkFBRkFFRkYxMDc4Ci06MTBGODgwMDA5RkFDNkJDNzk3OTdFQkZBQzdDQTNFNUQzQkM2NTNBNUMzCi06MTBGODkwMDBFQkVGNDg1Nzc0Q0Y3NzE2MTcwQzBFMERDMEM3MEYzNTE2Ci06MTBGOEEwMDAwNzgyMEMyRUMxMjA4M0QzNkI0MTA2OUYxRUJDOUUwMjkzCi06MTBGOEIwMDBGOTRCRjExODY3MEVBMkJDODhDQjc2NTFEMkExRjhCMkYxCi06MTBGOEMwMDBCM0ZDNUFCQ0Q5MjNDNDg2OEQxRjVGNEVDNzRCMEY5RjE0Ci06MTBGOEQwMDAyRjFENEZFNzlGRjk5MTVFNjIzQzQxREQ3RDQ3N0E4Rjk2Ci06MTBGOEUwMDBFRUJEQzlBMkIzMTRGMjExODcwQTQ1OEM3QjFEMkE4Qzg4Ci06MTBGOEYwMDA4RjAxRkJFNTNFOEI2QjZBMzZBNUM3ODM0NzQ0Q0YwNjc1Ci06MTBGOTAwMDA3ODBGNUU4ODIwMkY4RjcxQkRFODE4Njc0N0I5MzA3RDZBCi06MTBGOTEwMDA4NUIwNDE0NEEyNjVFRkQ3NzU4Rjg4MThGNzNDRjg3RDE0Ci06MTBGOTIwMDA1MjA1RUI3MkVDN0M0MTAyQkE5ODVFNTgxQjFGMTVFNjNCCi06MTBGOTMwMDBBRjREMEZGQ0E5Q0MwREY3NTc2NEU0NDZEMUQxQTZCNzYzCi06MTBGOTQwMDBBNzVBRUJDN0Y0QUQ0QkVCNTdCNzQyNkY1RkY2RDFCRDhCCi06MTBGOTUwMDBERjBFRUIxOEFEN0VERjBFRjJBRDIzNjkwM0I2M0JEMkFFCi06MTBGOTYwMDAwN0NFOTNGQzk2REI2MTlGNzEzQkVDMjQ4RkMzOUNFMDM4Ci06MTBGOTcwMDA3NkQ4NzFFRUY3ODRCODFERjYyMUI3QzM4RTcyRkJGOTA1Ci06MTBGOTgwMDAzRDZFODdGNTcwQkZFNzZENkUzRjc3NzNGQkY5MzBCNzVCCi06MTBGOTkwMDBDMzNBRDI5RjlCODJGMkYwOTcwMjExMjNGOEE5REFGNUJECi06MTBGOUEwMDBEQjNGRDNEQjYxREZGMkVCRURCMEE1RUJGNDc2RDhFMjIxCi06MTBGOUIwMDA0RUJEMUQ1NkRGQUVCN0MzNkE1NUJEMURCNkIwNDk2RjBCCi06MTBGOUMwMDA4NzJENjhENENCQzNGOTBEOTM3NEVENzk4QTNFQ0UzNjdBCi06MTBGOUQwMDBCNzRBNkYzRjZCRjg5OUVERDNDQkM1Q0E3MkJERkREQzVBCi06MTBGOUUwMDBERjdBNUYwQTVDOEZGOTFGNDBFMkM3NjE3QUFGMzc5RjA5Ci06MTBGOUYwMDAwQjdBODVEMjQ1RjY3OUFBNTczMDBFRUU2Qjg1RkNDOTk1Ci06MTBGQTAwMDA1NkU4NDJGNTZGOTEyOUY4MTZFNDdEQzhEQjIyODFCOEVCCi06MTBGQTEwMDBEM0NFNzNCOTE1RDMyM0QwNUZBRUFBQTc5QkVBQTNGQUJFCi06MTBGQTIwMDBGOEM2NEQ3N0VBRTEzQUUzMTZCRDVGNjIyREQ3QzM1NUJDCi06MTBGQTMwMDA0RUQyRkIyNTk1NDYzREUzRDNDMzU1MjUwQTAxQkEzNDgyCi06MTBGQTQwMDBFQTFCOTNFMzE2MDlFNEY3RTVFQTFEMkJBMTdBODVCNUQ1Ci06MTBGQTUwMDA3NTdBQzcwQTc3RDI3NENGNTFFRkI0NjdCMzc4NUQyRTQ5Ci06MTBGQTYwMDA5RDA3MTgwQjJENTE3OUZCM0QxNDZFM0JERjM1NjM5RENGCi06MTBGQTcwMDAwODlERTBFMTkxNTRGRjE0QzNERjE0N0UyRjVCMTRCNUExCi06MTBGQTgwMDAxMUYyNkMzQzJGNDJDNDUzQkJCRTQzRkI1Qjg3QjFCQzNECi06MTBGQTkwMDAwOEY5Q0E3QzAyQzY1N0U4MkZFMDJCOTdEMDc2OTg5RUNCCi06MTBGQUEwMDBDQjA5QjJFNzYxRjNENTNERkYzMUUwNkNDMEY5Qzg4N0ZGCi06MTBGQUIwMDA0N0U2RkU0RkNFMjcyNjAxRUMyMTMyOUU4Q0M3N0E4MzgzCi06MTBGQUMwMDA1MERDMjVDNTU3OERGN0IzMDNDQzBFQ0E0RTYyNzY5MDM1Ci06MTBGQUQwMDAzNzc5QTZDOEYzNEYwNDQyMUU1RTEzQjE2MzNDMzM4NUU5Ci06MTBGQUUwMDBGODM3NDI5QzMzN0FCRjYzMUE2REI2QzI5MDg5RTAyNzFCCi06MTBGQUYwMDBFOUY5N0Y1NkM1QzBGOTc5QTMxRjc2QkQzNEMyRTBCN0Q2Ci06MTBGQjAwMDA1RDZCRjBFQkY0RkM2RjIzMDZGQjI1NDQyNEIwMjcxMTVBCi06MTBGQjEwMDAwNzI2REQ3Mzg0RDM2MTRFNDcyREM3REFFNkMzQkE1RThDCi06MTBGQjIwMDA0OEU2RjkxNTRFM0YxMzM4QkUwOEQ5QjRBQjk2M0VGN0Y4Ci06MTBGQjMwMDBCQTQ1MDJGRTg2OERBOEYxRTNBMUJFMjhEODI4NDNERThGCi06MTBGQjQwMDAyMUNGNkI3MzIxREVDNDY1MUVCNDRCNEYzMUZDNzhFOUM1Ci06MTBGQjUwMDAyRkUwQ0Y0QkMyRjAwNUY4M0JBQUM3OUZDREYwRkMyNEE1Ci06MTBGQjYwMDBBN0E3MEJFN0M1RThFODlGMzcyRjAzNUQzOUUzMkVBOTY4Ci06MTBGQjcwMDA4RUM1NzhCRjI0Mjg4QjMxNzQ3RTdCNUMwMkU2NTFGN0ZBCi06MTBGQjgwMDAwNDFCODMyNUI0N0RDNkNERUE4NjU2MjVDRDM0RTM3QzlGCi06MTBGQjkwMDA4OTNDNjgzMkM1QzMxNEJFNUUyRkNGNkI3NTM1MTNCNDc0Ci06MTBGQkEwMDAzQjlFNkZCNkUzOTU5MDQ2MTFFNDUxOUJGQkY2NzhEMEVGCi06MTBGQkIwMDA4RjVEMjlDQTMwQTg0RkVCMUExMkJCMDJGMkYzOUIyREJFCi06MTBGQkMwMDBCMTQ5OTFFQTVBNzY1OEYyNTA5Rjc2RUQ0ODM0NEJGNDk5Ci06MTBGQkQwMDBGRDEyQjNDQjBDRUY5NTI0RDU4OUUwRUY1REQ3NDNEMDcwCi06MTBGQkUwMDAyRTI4NDkyMjk4Q0Y3QUJFMzk3MDg4N0Q0RkMxM0ExQ0ExCi06MTBGQkYwMDBCQThFNDk2MDlGOTZCOTZBMjdDNTI0NDA3Qzk2REEzNjRBCi06MTBGQzAwMDAxMkQ4QjlCMUU4QkZFRTFFNjI0M0JDRDk1QzRCQ0JCRTgzCi06MTBGQzEwMDA0QkQ3NzcyMDUxMjQ4Mjk3RTJDNzQzM0MwMUQwMDM0OTU4Ci06MTBGQzIwMDA0RThGMUY4NjczNUI4RTAzOUMxQkU4RUZENzY5N0Q3QTJFCi06MTBGQzMwMDA4MUYyRjlGMTcwN0NFNDkxQjAzNkU2MTVGNEVEQTEzOTZBCi06MTBGQzQwMDBCQzBFOEFFMzQ3MjIwQUQ2NTlCNEY1QjBGQTMyMTI4QUJBCi06MTBGQzUwMDA5QzY3Rjk4OERCMEQ1QTdDRkYyOEI3MUJERUUzNzFCNzgwCi06MTBGQzYwMDA0M0RDNkU2ODMzQzQ2RkRFRTI3NkMzNkU2RTM3RUNFNTVDCi06MTBGQzcwMDA3NkMzNkJEQzZFNzg4M0RCMERGQkI5REREMEVCMkYxMDI4Ci06MTBGQzgwMDBCNTA1RjI4QUYzODgzRDA0RkVDMjgxNUEwNjY3RjcwQTc5Ci06MTBGQzkwMDBDMTVGMEVGOTcwQTVEMzU3NEFFRkRCNTY1ODUwN0UwRTYwCi06MTBGQ0EwMDA0RjUyNUIyMDNFNkVBQjUyMjdDMzNBRENENTlEMkQ3MDgwCi06MTBGQ0IwMDA2RDI5RUU0ODg0RkJGMzk0OTM0N0MxQ0YwNjdBOTk5QTU1Ci06MTBGQ0MwMDBDQkY5OURFMjYxQUQ5NUMxNzlEREUyMThDRjcyQTA2N0Y1Ci06MTBGQ0QwMDA2NTQ5MDVGNjRCNjI3MEIzRDM1RjgwNzdFMjIyNTUwMDI5Ci06MTBGQ0UwMDAzQTcwMkIxNjFEQkM2QjBERjA5RDA3RUQzMEY5MTEwRDEwCi06MTBGQ0YwMDBGNDQ4RTE3OUJEMDZGNzJDOTJDNUUwQUU0NjAxRENBM0RECi06MTBGRDAwMDA2QTM5RENEMzEzMjJGMkM5M0EwRTc3MEQyRTNCOEE2RjgzCi06MTBGRDEwMDAzNkE5QjRFQjVCNDlBQzZFRTJBREMyOUI0RDA3RThGQzgzCi06MTBGRDIwMDBCQjY1MTFGM0FGREQ0OUJDNEU5MDdGRDczOERFM0JEQ0JECi06MTBGRDMwMDA5RTVENUIzQTcwQkNFRTIwRUZEN0RCNkUyNzkyNkQ3MDU0Ci06MTBGRDQwMDBEODM4QTVGNzU5MjRGQTdFNTU2MDc1MzJGMEM1REE0MUU2Ci06MTBGRDUwMDA1QTlFRDg4M0Y2RjU2NEIxRjBDRDU0M0FDRjIwQUY4M0U0Ci06MTBGRDYwMDBENEU0RTUxQ0MyNjE2M0Y4REU1QjdDOURGRENERTdBREFDCi06MTBGRDcwMDBEMjFCMkQxMjFENzc1NkUwMUUwMkRGQjM5OTFCRERFMTY5Ci06MTBGRDgwMDBGNUE1REQ3QzdFQUI2NkRDNDE4MDJGODMyOUE3MUJEMEU3Ci06MTBGRDkwMDA4RkY3RDkyNEIwQkI4NzI3Nzk1NjAyMURCODkzMTRDQkFGCi06MTBGREEwMDBGN0U4RkQ2OTU0MUU0QTJFOTg1NkU3OEUwNEU4NDdERkFGCi06MTBGREIwMDA3OTk0MDBCRDVDQjMwOUU4RTFBRDY0M0JDQTlERkVFNjAxCi06MTBGREMwMDA3MzgxMUVGMTEzQjQ0N0ZBRDMyMzU0RkVBMDNENjRBQkY0Ci06MTBGREQwMDBGOEY0MjhGOEI1OTVBNEQxMTNBMEVGMDVCMzNENDM4MEZFCi06MTBGREUwMDA4RjQ5OTUwNUY1NzMzQUZEMERDRkFCNjlENzRBODNGRTcwCi06MTBGREYwMDA3Njc4MkQwM0NBRTFFMUU3OUJEQkMxRUY3ODBCRjgwN0NBCi06MTBGRTAwMDBGM0EwMjQwNkVBNzM4MjE1NzdEODAxM0VEMzkzRDM3NjA0Ci06MTBGRTEwMDAwMjdFNDg4OTNEMzQ4QUMyNjE1NUUxQ0EwNTAwQUY1NTZBCi06MTBGRTIwMDAxNTRCNUQwMkQwNTVEMTA4N0MxRTJDQjE5Rjg0OEE5QzU1Ci06MTBGRTMwMDA5RTkyNTVDOTUyMThCQzU3QUQyNkM1MEFDMDNCRjkyRTMzCi06MTBGRTQwMDBGNzEyQkFBRUI0QTQzRjM0MkI5NDZGN0EyQ0NDRUY3OTZFCi06MTBGRTUwMDBBN0Y0Nzc0OUE5NjFGREM3RTY5NEZDMkMwN0Y4REFDRDMxCi06MTBGRTYwMDBFODdDQjQ1NTQ5OEI1NDFGQUNEMTc5NEI3MTM0QzY2NUNECi06MTBGRTcwMDA4RUQ3QjI3QTA1N0E3RjY1MTM3RDU1QTFGQUFBQzNEM0NFCi06MTBGRTgwMDBDN0M3OEIzOTNENDU4RDNBREIwMEZEOTVENTM2MDlGRDU5Ci06MTBGRTkwMDAzM0IxQkFBRDg5QjZBQkMwNUUwMkZCRTk2MTBCRjJBNTI2Ci06MTBGRUEwMDBDNkNGQzk4RDdBQjlBOTE4RjhCNkNBQzBENzFBM0ZFRDFFCi06MTBGRUIwMDBCQzkwOEY2MzAwQUY1MUI1OEM5RkI0RjUxOUQ3MzVFRjY3Ci06MTBGRUMwMDAyQjZBRTdDNDEzNjJGNEVGREU1RDM0MjI5QUU5QjEzMEE1Ci06MTBGRUQwMDBGQjc2M0NDQTI2Qzk0QUQ3Mzc4QkQzRDMyQzRFNEY5NEQ2Ci06MTBGRUUwMDAyNDc3QzA3QzBFREUzMzYyMkFFMDRCNkRBMTdFMDBDQzBECi06MTBGRUYwMDA2RDk5QTVDRkZFNEQ4Mzc1OTI0MTVFQkFGRTU5NEQ2MjU0Ci06MTBGRjAwMDAwNkY4QTdFNDRFNEIxRjNEQTZFOUJFODdGNTAyNzNDMjczCi06MTBGRjEwMDBEQjQwQUZBQUZDMEVEODExMTBDRTg0OEZGRUYxRDhBMTIxCi06MTBGRjIwMDAzREFERjQ3QkRENDNFMzQ5OEIwN0M3M0JDMUU0QTM4NENDCi06MTBGRjMwMDBFMzFEMkMxNDA3NzlFMUY5QkRBMzMyMjA4NTRGQzJFOUY2Ci06MTBGRjQwMDA5NThFMUY1MkQ5RjM5QTdCNDY2NEEyQjlDOURCMUYyRDQ3Ci06MTBGRjUwMDAxQjAyMTU2NEM0NTc2MUU5RUIwRkZGMkIzMzIzRkU2N0M3Ci06MTBGRjYwMDAyRjEzMzY0MEZDNkZCNEY4QzVFOTVEQjRGRkFDNEE5QjczCi06MTBGRjcwMDBBNzk1OEUzRkZCQzEzQTBCRDhGRDk1QUFCMkE3OUVGNjc2Ci06MTBGRjgwMDBBQkE0NzRFMTc3RTEzQTc0N0M3MkQ4NEMyQzMwQ0U2MTJBCi06MTBGRjkwMDA1OTIwOURCNDNENkI5NjlFNkY2QTk2RTlEQjQ2N0JFNEUzCi06MTBGRkEwMDA0ODhDOTI2MkEyRUY3RjJBRDhDODA2N0FEREIxN0VFOTNBCi06MTBGRkIwMDAxMzMwREUyNzBGREFCMEFFOTBDMEI3NzI0MTBGMTAxRUJCCi06MTBGRkMwMDA5Rjk0OUZCODg3M0VBRjVCNjcyMzkwMTc5OUM3RURGRDVECi06MTBGRkQwMDA0MUI5QTkzOEFFQzk1MThERUZENzc2QzRBMDVGN0M3MjA0Ci06MTBGRkUwMDBGRDk1RTMwMEZGRUQ3MThEQjc0MTNERjUyN0IxNEEwRDU5Ci06MTBGRkYwMDBFMEI1NkVENUI1MjY4ODhGQjQ0Nzc3NEU4NkZFOUY5QUJBCi06MDIwMDAwMDIyMDAwREMKLToxMDAwMDAwMDg4NkI0MzA2NkQ0QjBGNTk2MDNFM0RENDNFODA3OEFCMDQKLToxMDAwMTAwMDM2Q0ZEQUY2MzBGQ0MzNzc3MzU5MUM3NzlBODkyODlCNjAKLToxMDAwMjAwMDIyRDgzNTBGRTZGNkQ2MjdBOEI2QjBGOTNGOUMyQkUxQ0IKLToxMDAwMzAwMEZENjk2OTcxNkQzRjgwRUY1MEVDQkIzQzFDMkVCMEVFNEEKLToxMDAwNDAwMEM5MkMyRURBOUVFNEE5MTk0MkRCMjcwNEUyNUE5RTAwNEQKLToxMDAwNTAwMDU3Rjk0M0UwNEZGNTdFMUJEOTg4RTgyN0Q4REYzQTZDODMKLToxMDAwNjAwMEU4NTMxRDYxRkVGRjM4M0VBRjhGNjNEOUYzRTNFRTY4QkUKLToxMDAwNzAwMDNGQUNGM0I4QzREQUFBREJFOTQ3N0EzNjJCRTk3MzYyRkUKLToxMDAwODAwMEQ4N0E4NDJCNjAxNzA0OUJERjkxMThDOTlBODZGODIwRDAKLToxMDAwOTAwMEQyNzM3NDVFNzUwRjNGODJGOERENENFMTAzRkNEOUUzNDcKLToxMDAwQTAwMDkyREE3NkQwNzk5Q0E0Q0E1QTg1RTdFRTQ3MjcwMzNDQkEKLToxMDAwQjAwMEVGQzhBNDg0OUE3ODIxOUNFRUNEOERDM0Y5OUM1Q0Q3QkYKLToxMDAwQzAwMDFBODM3NTI2MkVBMjU4QUZFODgzNDc2REU3OTZCQjg1NDUKLToxMDAwRDAwMDcxQThFNzU1MjYzRjE4RkYwOTI0NENCRTUzRkM0RUNCQjAKLToxMDAwRTAwMEZGQTFBNTBFRDYxQjQ1M0EwMTJGQTZERDJCRUMzMENGODQKLToxMDAwRjAwMDc5QjUxNkNDOEYzOTg5QUYxQ0U0NjlFREMzMDJCNkU5MzYKLToxMDAxMDAwMENGMUFEMDE3NzU5Q0JGREFBNUI4QkQ0MEM3QzdDMTFFQUUKLToxMDAxMTAwMDQ3N0ZFRkIxM0Q1MDFGNTBDQkU1NTdENTIyM0Q5RDJFNzcKLToxMDAxMjAwMDc2OUI3NUZDMzJBMzQ5Q0YzRjc0OURCQUY2RkE1QzU2QjQKLToxMDAxMzAwMEQ3RDlFM0ZEMjQwMUY0NzMzQjVEMzZDMEU1RDMzNkMxNjYKLToxMDAxNDAwMEJGMDFFNUFCMkYyNUJDQkUyRTM1RDdBNEM1RTEyNTRCOUQKLToxMDAxNTAwMDE4RkNFQjI4RkRENTgxREVCMDkzQ0VEMjQ0NThGN0E4MjkKLToxMDAxNjAwMDI5NDBFRkQ2MjNEMTM4NEYyMzdDRkZENUUxRjA3MUIyN0YKLToxMDAxNzAwMDU0MzM4NENFRTc2MzRBQzc1MEZGNzM3QzdEMkJEQTJGNUMKLToxMDAxODAwMEYwMjNFQUY4REFENTA2RjRCRDg0Q0VGMjUxMTdEMkE3RUYKLToxMDAxOTAwMDc1QzZEODNFN0FEMUUwNTNCQjJFNzUyRkY0NzM3RjFFRkYKLToxMDAxQTAwMDIzNTFFNzg5RDRCQTBCOTY4MjNERDk0QjQ3MDZGOEMwNTQKLToxMDAxQjAwMDlBQ0REQTc3NDZGNEQxMTkzRThGNDA2NzkzNjg1RjZFMjcKLToxMDAxQzAwMDFGMjNCRkQ0OTZGNUU2RjU1MjA2QUE1RjQ2N0MxNzAwQkEKLToxMDAxRDAwMDVFQzdDRjg3M0M5NDI2RTdENjE2QkY4MTc0NzBDNjQ1QUMKLToxMDAxRTAwMEZDMjJGMzZCREYwNkI5MUZDM0U3QTYxMjM5NTA5RjAwNEMKLToxMDAxRjAwMENBODRFQTVEMTdERTQzN0YzOTlFQUYzN0I2NDk3OEFGRDAKLToxMDAyMDAwMDJDOEI5MEI4MjZGMUJEMzI3QTMzQjYyQzE4MDAzRDYxQTQKLToxMDAyMTAwMDczNzNCREJCMkRFRkQ3QTNBRjgwREQwRDA0RTMzNDgzMzMKLToxMDAyMjAwMEEyMkIzQzAxNUM4RDJCMTFGNzI5NTg1Qzg5NjBGRjNDQTcKLToxMDAyMzAwMDI4MDg1NTEwQjcxRjQ0RjQ3NjU1QkMwMTFFMjREQjdDRkEKLToxMDAyNDAwMDIyREMyRThGRTZGMjdFRTlFNDExMDJGQTNCRTU3QUZGMkEKLToxMDAyNTAwMEQ0NkNCMDhCN0VERTRCRDc2Q0ZEMTJGQzQ5RTFEODQ2RTYKLToxMDAyNjAwMEZEMzc5MDUzNzE4MUNFNEVBMENGMUE2QUI3RkE3MUZENTcKLToxMDAyNzAwMDFFQ0NFQjU4Q0IwNEYyQThEMDE3QkZGQTY3QzUyRjJFQkYKLToxMDAyODAwMDg4ODNGMUY4NDU3RjcxMzAyRDFFNTBDOTZFNTE3RjQ3MkMKLToxMDAyOTAwMDcxNDNERUFGRDI0REZEOUM0MTYwNjdEREVDNDZCRkM5QzYKLToxMDAyQTAwMDdEMTJFRDUyMkJCNzRCQTM0NjJENzJCMUZDMTlFMzFGMDMKLToxMDAyQjAwMDJEMUU2MEE0MkI2MzVDQzlDODdGNDZCQkY0QjdCOURDQjQKLToxMDAyQzAwMDdFQkE4NjVDNzMzOUYxMDEyRDhFQkYyQTlERjkzREFCNTQKLToxMDAyRDAwMEQyRUI5NjQzRkREQTM5RUVGN0I4NTQxM0UyNzFDRTJDMjcKLToxMDAyRTAwMDAxRjFBOEQ5NkI3M0JDQTc2NzAxRkY2OUY1MDcxN0YzODQKLToxMDAyRjAwMDdCM0EwQzdFNDhCNEY3Mjk1OThFQTAzRkFENzkyQzJFNUQKLToxMDAzMDAwMEU0Mjg2NENGRTdEODg5RDkxRTk2M0ZCMEU1MzEzRDM3NjAKLToxMDAzMTAwMDg3RUE0MTNCNURFMjM0QkU4RjY4M0FEMUU3QTdFMkY4NTUKLToxMDAzMjAwMDM4REE5NUZFMDQzMzczNzVGNTgyNzE3OUVDM0VFNjQzNTUKLToxMDAzMzAwMDZEM0MxRjZBRTdGNTgyMjUxOTY3Nzc3RDBERjc2NTU2RDUKLToxMDAzNDAwMDA3NkM5MzZCMUZGRjFFODU0M0Y0QUMxODhGMDlFOTU3QTgKLToxMDAzNTAwMEQ5Rjg0M0YwOTM2NzM5NTBERTI2QTQ0QjU4Rjc1QTk1RTUKLToxMDAzNjAwMDY0RjcyMEVEQUJGMkRCRTA5N0ExOUQyOUMxOTQ2NTk0ODEKLToxMDAzNzAwMEI3NzMyOUZGMDY1QzAzRjgzQkY2ODFFMzY2NEVDRERGRDkKLToxMDAzODAwMDI5NjQ3NEQ1MUI1RkYyMzFGOTZEQTJCRjQwNEZCM0FCNDYKLToxMDAzOTAwMEY0RjQzMjU3MTk5ODdFMzJGMzc4N0M4OUVGRTMxQTFEMTIKLToxMDAzQTAwMDNBQkZFMzZCQTQwQkM2QkY2QjUzNTgzRUZBNUMwNUVEMzYKLToxMDAzQjAwMDAzRjlEQjdFRUM3MUNEQkY3NTVBQTg1RjQ0RjExMjk0NEUKLToxMDAzQzAwMDc3MjFCRDA3RDM4OTI1MUNERkJFNDI1MTU3REYxMENDRjIKLToxMDAzRDAwMDI3RDEyRUVBRjcwNDJEMjRGOTQxREE2RjkwM0NGNzA2NzUKLToxMDAzRTAwMDE3RjhCRTI1QjY5ODVBRDQxQjdFOUQ3RDdGOTA4RTdCRDQKLToxMDAzRjAwMENDRDlGRjNDOEM3NEJFN0FENDEyOENGRjNGNzAzRDA1ODMKLToxMDA0MDAwMDE5OURGRjZBNDgzODYzRkRERTczRjNDMTZGN0IwMERBMjQKLToxMDA0MTAwMDU4NUZGMDhCRjk1MDZGRjc0MDk0RDZFRUZBQjExQzU2NDYKLToxMDA0MjAwMDZGNzBFNzk2OTc3RkFDMTY1MkJGQzY0RUY1MkQxRENGNjUKLToxMDA0MzAwMDIxMTFDQzUzMTFCMjA5RTVCMzA4RjE0MDkwQ0Y2M0MyNEEKLToxMDA0NDAwMEUwOEI3RTgzMUVERTQ2M0I1RTJDNjQ3MTE0RDFDMEY3QzgKLToxMDA0NTAwMEM2RUZERTlDQTdERjZGRDdERkJBOERFRkQxOUZBQTZCMDcKLToxMDA0NjAwMEY0RjQ3RjdCREUwMEY1QjJDNkY3OUQ1MDNGMTE3M0Y5QkYKLToxMDA0NzAwMDc1MDc1NDkwNjI3RTVBMjQyNjBGRjhDQkE0OTRFMEY3QjcKLToxMDA0ODAwMDA0MTdBMzJCOTAzMEEwMDcyRDhEODMzQzA4MzdEQThFRkMKLToxMDA0OTAwMDAyQkRFMDc3Njg3MTU1OUM3NDE0RTA1Rjg0N0M2MjAwNTMKLToxMDA0QTAwMEY1Mzk5RDRBNDgxODAxRkRCNUZBMDM4NTdDRURCODc0MEQKLToxMDA0QjAwMEI5NDdFNTMxOEUyMzk1QjNGQ0YyQkIzMjA5QzFGNzQ2NEIKLToxMDA0QzAwMDNGQkFDRTk3MEJGRUZBMTFBQTY3MjVEMEUzMzdBQjEwREYKLToxMDA0RDAwMDJGM0JCQjhDNjA3RUMwRTE1MkIwNEQzRjE1NkE3NTQxMjkKLToxMDA0RTAwMERDOEFCNTZCMjg4QzQwMkZEQkRDRkFGQUQ3MURDNThGNzAKLToxMDA0RjAwMDk2NThFOUYzQjYzMjE2NkYzREQ4MUM3ODc3MDVBNUI1NDYKLToxMDA1MDAwMEI2QzIwMjk0OTcyQkEwNjNEODdDODMzQkEzQUMxMDg3MjAKLToxMDA1MTAwMDUxRDRFRkRBQzE2RUZFNjg5OTY4ODU2QjcwNzlBRDBBQzcKLToxMDA1MjAwMDhCN0UzNzUxREQyNDQ4MTA3NzUwMDhGOEY5RDY2NUFEMzkKLToxMDA1MzAwMDkzODFBRkRFQjVBODlFMzgyN0U2NTUzMTRGRENCRTVDMEYKLToxMDA1NDAwMEJEMTVGQzFFNTlBQTI4NEZBNTdDQjRBMUREOENGQjhDREYKLToxMDA1NTAwMDhFOTVGRTJFNDkwQUUzQzM1MzVDOUUxRUQ4MTFGNTAwMEEKLToxMDA1NjAwMEMwNjE5NTYwMEY0NUMxRDVBMjZDNTg5RDAwREZCMzdBN0MKLToxMDA1NzAwMDVBRTgxNERGNkRGOTQxMzI3QzY3RDVFMjU1OUU5REYwNTMKLToxMDA1ODAwMEJDQzUwNjNCNTBDOUFBRjVGNjJBMTg3NzU1RjIxMkY3RjIKLToxMDA1OTAwMDkyQjA3MUVEQzNBQzhENzAzRjM4QjQwREVCNUE5NDcyQ0MKLToxMDA1QTAwMDhGMzUyQTE2RDZGNTQ1MENFNDY3REI5NzY1QzUwMzJEMTQKLToxMDA1QjAwMEI2MjU1QTUzRUFBMURGOTIzRkJFOTkwNzc4OTc0Qzk4MjcKLToxMDA1QzAwMEI3QjVCQTNCMkRCMEVFRTE2RTQ1ODVGQ0Y4NUY3Mjk0OEQKLToxMDA1RDAwMDU3RjNFODNDRTczNTFEOUI4Qzc1NzM2NUIxMkJFMTNBMDkKLToxMDA1RTAwMEZDRkM3N0RBMDFGRUVGRjI3ODRDMjhCMTBFRjNCNTZEMjIKLToxMDA1RjAwMDhCRUFFRDMwREZFOTg5NjlDQkMzRTMzMTZEODU4QkVEQTMKLToxMDA2MDAwMEEzRTk3QjY5NkU1M0VERDI0MTE3RDI0NzFCQzQ1RkM2ODUKLToxMDA2MTAwMEMzQkNFODdBQzY0MkJGM0YzNDJCQjQ1RjI4RDk1QTE1MTEKLToxMDA2MjAwMDY5OUZENkYxM0NFNkVGRDk1Qjk3QTY0MTVDQTQ2REJEMEUKLToxMDA2MzAwMDFERDIzM0E0NEQ1MEQ2NDE3RTQwNEQ3NTQ2QUM2MzFGNEMKLToxMDA2NDAwMEVCNjVFRkQ1MjhBRUM5NTYwOUYxODNGQzc2MkFBRkU3RjIKLToxMDA2NTAwMEM3RUE0OEIwMkIxOUZFRUM2NjYyQjc4NEU5QkZCMTM5MkUKLToxMDA2NjAwMDI1OUZFNjg1RjlEMTE3N0MzN0IxMERGNTQxOUJDMEY4ODAKLToxMDA2NzAwMDc3RUNENkNGN0YwQ0Y1QzJCRkNBRjE3RDBFRUZBRDZBMjUKLToxMDA2ODAwMDU3RDYwMUJDODg2QTI3ODM4QUZCRTc5M0QwNkE5MjQyRDcKLToxMDA2OTAwMEE4M0M2RTZCQjE1NTQ1QUE0MzBCMkQxMkE3MDE5RjUwODQKLToxMDA2QTAwMDBFM0EzNjI4MjU0QzJFMkZBRjRGODNGODQ4QThFNTJBNUUKLToxMDA2QjAwMEU0RUVERUZFRUJFRDFGMDIxRTQyRUJEMzYzNDExRjg2MkMKLToxMDA2QzAwMDkyRUJEMkQyODA2RTM5NUQxQUM3REY5NEM3RUNDOTVGNTYKLToxMDA2RDAwMDY3RjkyQzVFQjAyQkM3QjBCQzY3NDU5RUNGRTY0NUJEMjEKLToxMDA2RTAwMERERTkwNjNCRjcxQjQwQjcyOTMwREY3RjIyRERBMjlFMDQKLToxMDA2RjAwMDNCOUU3NzBBRTk4QUI4MkUyRDFGRTkyMzIxMzNFNjUzNjIKLToxMDA3MDAwMDhCRkY4Q0YxREU4RUIxREFGRTI3MTYxRkQ0RUNERUE4NEIKLToxMDA3MTAwMDUxMjc1NjgwREZFQUNCRDdGMjVEODU3QkMwNUY5RkE2NkQKLToxMDA3MjAwMEU1NTMyQjU4N0NEMDQ1N0YyM0M1MDc3RDg2RjhFMDM0MDAKLToxMDA3MzAwMDQzNUJCMzM3QTc3OEI5N0RDMkVEREIyNEE5RDM1NzBBNTEKLToxMDA3NDAwMDcyNzdCRkU4MDE3RjIyOTkzMEJEMzJBMzQyRjA4MzlEQ0EKLToxMDA3NTAwMERENTIxQzZEQzc3OUU3RjMzODI3RjdCRkU2RjE3OUJGQTMKLToxMDA3NjAwMEQ3NkMyNzkwNEYzMjM5MEE1N0MyRkNBNzE1QjBGOTNCMTYKLToxMDA3NzAwMDFBMzI3MjAyMTJDODc3MTZFNzI2MEQzNjA5RTMyNjgwNzAKLToxMDA3ODAwMEZDNDREMkVCQTdGOTYwMTBCQTlFNzkwRDRCRDFERUVGOTUKLToxMDA3OTAwMDgzNUYwQjhCRjMxMEJEM0ZFMTIzMDZGRjYxMTFCM0M3RUQKLToxMDA3QTAwMDM0N0Y2QkJFQzEzRTMwREFGQkM2Mzg3NTVGNUU2MDkzNDYKLToxMDA3QjAwMDFERThFOUVDOThDQzgzNjkxMjNFNTYwMzVBM0U4MEY2NTgKLToxMDA3QzAwMDVCRThFRDVFMTkwQTkzM0ZERDVDM0YxQzZFOTZERjVCRDQKLToxMDA3RDAwMDQxRDdCRkQyRjcxMzNCRDA2OTg3RDk2RjA3N0REMjUxN0MKLToxMDA3RTAwMDdFNDcwQ0QwNUY0N0I1NTgwRTdDMUY2QzJFQzc3RTA3MjYKLToxMDA3RjAwMDlBN0Q3ODZERjYzMjdEQjEyRjQ3QkVEQjFCMTY3N0FFNDIKLToxMDA4MDAwMDJDMkY3OTZGNDU3OEREODM3Q0ZEN0IyQkMyRTYzRkREQTUKLToxMDA4MTAwMDNCNDNEN0Q2RTg2Q0JBNDgxQTM3NDU5MDJGQkZGMjMyMUYKLToxMDA4MjAwMEZFMzc1M0JEOEY3NTg2RTIyRjNEMDNENURGNTA3RkY1MzAKLToxMDA4MzAwMDZDMzhGQ0Q2NzhGNUY2RUM3RDYzNEEwNzBGNjRCNzY4MzAKLToxMDA4NDAwMEVCRDNFMEEyQUQ1QjdCREVERjNDRUZGQTFCRTdGOUQ0MzQKLToxMDA4NTAwMDY1Q0VEMzM4M0Y2RERFRkRGNTlGMEVDMjhBRjJGRjVEOTcKLToxMDA4NjAwMDVCNEJBQUExMkU3NjVGOEVGMjJDQzhBM0NBMzI2MTI1RkIKLToxMDA4NzAwMEU0NEIwRkYzNzhFMkUxQzIxOERDRTdCRTI3OURGOTdCNzkKLToxMDA4ODAwMEQxMEQ4QzZGQTJDQjY2NjBERUVGNzJGMTdCOTM5N0Q5QUUKLToxMDA4OTAwMDk1QjMwQTA1QkY0Q0ZGOUNDMkY3REJCRjk3Q0VGMkI5RjgKLToxMDA4QTAwMDJEQzUzRjdGMTNGMkQwRUYxNDU5NThCQzk3QzhEM0E2N0IKLToxMDA4QjAwMDg2RTVCMUQ2NUFGRDAxQzgyN0JERDc1QkE3NzFDQkNBNjMKLToxMDA4QzAwMEJCNjgzQjVBOTMyQjU1RkFCQ0MzQUM1OUZBRkNFMTc0OTQKLToxMDA4RDAwMDQzOUUyMURBMjA1NzgyMUFEQzczMjlEQzQ3RjRDMUJEMUMKLToxMDA4RTAwMDNGN0ZBMjNGRkEyMEU2RDNEOUEwODc4Q0YwQjlDRDAwOTQKLToxMDA4RjAwMDFGQTNGRjMyN0Q5QjgxMUYyRUQxOEZEOUQwOUVCRDA3QjQKLToxMDA5MDAwMEYyNkEyQUI1Mjc0NzAxRkVFMDExN0QyRjVBN0UxNkQzRTEKLToxMDA5MTAwMDIwNTFGOThDMUU0Nzg3NEVBRDAxQkREODRENTUwMEU4REEKLToxMDA5MjAwMDk3QjUzM0VGNTgwN0VENzM1NEVGMDM1RUZBRkI4RUU2OEQKLToxMDA5MzAwMEJGRkQyQTQ3M0VFMzhENTAzRkQwMkI0N0MwM0UxODBGRTYKLToxMDA5NDAwMDc5QzFDOEY2NDFGN0EyNDk1MzIzREEwNzMzRUJEMzcyRDIKLToxMDA5NTAwMDYwNUUzM0Y0RjY0MUY3RkFGMkM3QjNFMDNFRDgwN0Y0MkQKLToxMDA5NjAwMEE3M0JCRjVFNjcxRjkwRjJBQzhCQzA4N0M5RERBODUxNjMKLToxMDA5NzAwMEQ5MTFFQkY0N0MzOThBMkIzRjZDM0Q4RUY0NDYxMjVFMjQKLToxMDA5ODAwMENGRjg3OUFFMUM5QjRGREY5RkMxRTMwOERBRjdBOEZERDMKLToxMDA5OTAwMEI1REIxMkExN0U1MUZCNUVBNjk3QzUzRDQ5NzkzQ0QzREMKLToxMDA5QTAwMDBGRkM3QTMxM0M2QTc1RDRGNzU5NjQzQ0VGNDU4QjdCNzgKLToxMDA5QjAwMDY5RkQzQ0Y5NENDRUI2QTdDOTBERjA5QzM4MzMyRjMyRjcKLToxMDA5QzAwMDZFOEIxNkU3NDhDRkI4ODJENzBENEJBNEQ3MUZGQUIzNkEKLToxMDA5RDAwMDIwRTFGMzA4RkUxRTgxQkM2NDc0RDJFOUREMkVEQUU1NjUKLToxMDA5RTAwMDEzQUY5MjAzNzAyODNBRUQ1NzIxMUY2MkFCMTBEMDVFMEYKLToxMDA5RjAwMEIyMjUxMUI0NkIyRUQ1QkZCQUQ0N0VFRDUwMUMwMEZFQ0IKLToxMDBBMDAwMDU2MUQ4Qjk3OTc2NDk4QjExREFEODgxQjQwMkU0QzNDQUEKLToxMDBBMTAwMDNGNTgwMEI5RTE1M0M0QTc2MEJFRDFGMjE3OUZGRDA0NEYKLToxMDBBMjAwMEY0MzVENUZCMTA4N0YxOTE0NkRDNjdFREI0RjgzMDNFMjQKLToxMDBBMzAwMEQxNTE0MTQ3Q0U4MDM4Q0M3MjRCMUFDNkQzNTM5RjhEQ0IKLToxMDBBNDAwMDcxQzNEN0ZDRUQxMDJGQjc3OUQ4N0VBODJBQUZCQTEyQTAKLToxMDBBNTAwMENFQ0Q5ODVFMzQ0QTIwRjRGOTM0MUY4QkRGQ0M4MUY4NzgKLToxMDBBNjAwMDBEOEMzQkVCRjQwRTg4RkZDQ0Y2MzJGOTA1N0UxQkU4Q0IKLToxMDBBNzAwMENEQjlGNTc3OEZGRDkxRjREN0M0NkRGQ0VERjFEOTE4QTAKLToxMDBBODAwMDRGOTIzMDVFNjA4ODBGRDkwQUE3NjA3QzQ4QUI1M0YxNjMKLToxMDBBOTAwMDE1OEFCOEJGOUIyNDM5RjExQzBBNjM3Q0M3MThDRjMxNzMKLToxMDBBQTAwMEM2N0I4Q0YxOURFRkU2QjM3RDFBOUEzREQ1OThBRjhGNEEKLToxMDBBQjAwMDE3REUwRDdCMTA3MkMwNUVBMkEyOTJGMjc1ODc4NTI0QUMKLToxMDBBQzAwMDc3NTJGQTNDNThGMjI5Qjk5M0NFQzNGOTQzMTNENDgwMzQKLToxMDBBRDAwMEQzN0U3QTNCRUM1MkU1NTY5MENBOTU4RjYxMjFCQjVFN0UKLToxMDBBRTAwMEI3ODA3RjVCMkRENzYyN0NDRjQ4RjcwRkU1QjM3OEREMDkKLToxMDBBRjAwMDhBN0NBNzJFMUYxQzZDNkVFMkVGNDdBOTgwRTdFQTkxNjMKLToxMDBCMDAwMDU2N0Y1NDZBREYzODk3Q0ExRjhGRTZDQTBGRTQzM0JGOTcKLToxMDBCMTAwMEEyMTNFODlDNzgxNERDNEY1MDkxRTdEMkQxMkQ2OTFDQzgKLToxMDBCMjAwMDQyM0UwRThCREYxOEJGQUJDRDQ3MUJGRjcyRTc3MTNGMTQKLToxMDBCMzAwMDg3RjdBNUYyQzlEQUUyMDJCQjk1N0VGRjBDQzVCMTg4NDIKLToxMDBCNDAwMEZBOTIxQUQ0NjFGMTY5MkQ3RUFFQkQ1NzAzNzk4MzJDRDgKLToxMDBCNTAwMEIwMjMwNUNDMUY2OEY3QzNFMkQ4NjZBMERCRTgyNDQ1QzQKLToxMDBCNjAwMDhFNzRERUQ0QTFGQ0RFM0MxNUU2MzFCNUVGMTA0MTQxQjgKLToxMDBCNzAwMEI5NTBDRkYzMzVEQTc4NjZFMjZFNDEzRTAwREFENkU2NTgKLToxMDBCODAwMDI1NDY4ODlCMTM4RkRENDY0OUE2NkU4RDQ4MjBGRUUzREYKLToxMDBCOTAwMDI0NzIyN0M0OUZBREVEMTY2QzEzQjU2QTJGRDhFOThCNkMKLToxMDBCQTAwMDM4NUY1ODBCQTdFQzg1Qjg5QUM2MTdDNkJDOEQ1NTRDNTQKLToxMDBCQjAwMDlBMDJDM0Q2NzdFQUYzNTdDNkZDOTREMTlFRDZFMkVCRUQKLToxMDBCQzAwMDY2RkExMTk4RDdGRkQzRjA0MTE1QjU3ODY5RUI3RDBBMjUKLToxMDBCRDAwMEQ3RjMwRDVEQUY0NjU3MTU1OURGNzY0M0ZENDk1Qjk0NUEKLToxMDBCRTAwMEIyQUU5NkNFNEI3RERDOEVGMTBBMDdDQzBENjAxMkEwMjIKLToxMDBCRjAwMEJGMjAyNzFGRjdGRTA0RTRFRjVGRjJEOUY5Mzc2RDAyM0IKLToxMDBDMDAwMEFCNDdEOTlERjg4Nzg0RjBGRDBCN0ZFMUZDRkI3NEJFRjgKLToxMDBDMTAwMEM0RTIyMjY2MTI4MEZENTI2NDRDMDJGMjg1NTY3RjcyNTUKLToxMDBDMjAwMDMwOTFEOTgxRDM4QjE2MDdFRUEwRUQ1RkYwN0FDOTZCQjYKLToxMDBDMzAwMDhCMzY2QUY5RkU0MTI1QjkwNDRCM0YwMDJFNkJBREFDRjMKLToxMDBDNDAwMDJFRURFMEQ1NjZBQzI3MjNFMkZFOUQ3NzI0RjRENUVEQUEKLToxMDBDNTAwMDVFQkI0OUVGNTdERTk4QUVCNzA3OERGNjlGRDVEMDhFQjUKLToxMDBDNjAwMDJCRTA3MkFEQjdGRTQ0QjE2MzFENTkyMkFGMjNFM0YzMEQKLToxMDBDNzAwMDM3RjJDOUNGOUE1OTVFRTNFN0JDRUVGRjk3N0NGRkU1RjgKLToxMDBDODAwMDdGRjFGQUJENEQ3Q0ZGRTU3MzdDREZBQzA2RjdGQjJDRjIKLToxMDBDOTAwMDBBQzZBMzhGNUQ0RjZEQkFEOEJFMzhFMERBRTI3QkREQkQKLToxMDBDQTAwMEMwQzdFMzBCNTg3QzY4QjJFOERDMDk3QUFBNkY5RkM1MUQKLToxMDBDQjAwMEMwRTc4NDU1OTZFQkYzNjZCMzdERkFCQ0Q5REMyQTdEOTgKLToxMDBDQzAwMERFRUMwRjU5QjJBNzYwMDhFQ0MzNjg1ODBFRTcxNENDRUQKLToxMDBDRDAwMDU4MjE2MkJFNzI2RERCMTlENEIzRTcwQUQxREFCRTUwNzcKLToxMDBDRTAwMDNFRjA3RDE4REEzRTBFRUQ3RTY5MDEzQkI3QzhCMTMzQTgKLToxMDBDRjAwMEQxMDJGNUY4MzM1NkM0NEU4MUY4Mzk3MTY1NUU5MkZEMjQKLToxMDBEMDAwMDc2MDNDNERDNjEzRUNCNUQxNjM4MEY2MjQ2MjAxMUUzRUEKLToxMDBEMTAwMEExQjVFRDk3MzdDRUVBNTE1NzYwOUNCQTM3Q0U0RkFFQUEKLToxMDBEMjAwMDU5MDBFRjFGRDJFMkZDNkFGQTAyODhGMzFGRTI3MUZFNUIKLToxMDBEMzAwMEVBODI2QjFGMDdGRkU4RTk3Qzc5MjZDMDYzNTlCRTVDMzUKLToxMDBENDAwMDU5OTAwM0Y3OTk1Q0EwRUREOUUxNkRGQUYzNUFBQ0ZFMjYKLToxMDBENTAwMEZDODk2QTc4QUZCRjc4QkEzODQ5Njg4QzU0MkZCMkI4MkEKLToxMDBENjAwMEEwMzdDRTU1MDdFRjEzN0I2RjlDNkIxMTZCNzdFMjNFN0MKLToxMDBENzAwMEJCMjZGRURERDZGNzQ4MDM4Q0QzRkEyMjY5NzgyRTgyOTMKLToxMDBEODAwMERERkQ5RDAyNDExQkVGMTY5ODJGNzE2QkZBQ0Q3NzVCNEQKLToxMDBEOTAwMEE0RjE0NDVCNkMwQUY4RkRDNzc4N0Q5OTcxQkNBNjAyOEEKLToxMDBEQTAwMEI2MUY5MzhFNzcxN0JFOUZENDNCQkYyNjFDOUY4RkQ3NEQKLToxMDBEQjAwMEI3N0ZDNjE1MDM0Q0VCQTg1MTRDM0Q5NDlFNDg5Qjg4QzkKLToxMDBEQzAwMDc1Mjc4RTJFRDc1NEE4NEIyMjUzNDY2MDFEQ0JBMUIyNTcKLToxMDBERDAwMENBN0Y4OUZEMzQ4N0NBN0VGMzZGQjk5RkU2MzcwNUE5QkMKLToxMDBERTAwMDQ4MDcxN0RCNEZFMzk4NDk5NDQ4NzE4RDk3Mzg1REVFQkIKLToxMDBERjAwMDJDQ0MxQTFDMUEwMDRGRDZBNjdENDFCMDMzN0FEQjY2ODQKLToxMDBFMDAwMDg1NDBERUNGREE3NDAwRUZERjE3RTVBQTg5Njg1RjcwRUUKLToxMDBFMTAwMDNBNkQyQjVCRTQ4Mzk0RDBBQUU0Mjk2MkI4RkRGMkJCNUYKLToxMDBFMjAwMDZDNjU0RjQxODRGRDg5Njc0NjlFREQwNUFBNjk2Njk5MTgKLToxMDBFMzAwMDYwMTYxMkQwREVGNjA4NTQ3RTY2MkY5QjIxQkEyNTQyM0EKLToxMDBFNDAwMEJDOEQwRjRFQkE5MjNFOUY5NTQ0RkRCQkIwNzUxNzM0RDIKLToxMDBFNTAwMDNDQkI4QkIyMkIyOTJDM0JENDlBNDBGQkJEOThBQjFDREUKLToxMDBFNjAwMDgyRjE4QkRERDI2RTY4Q0ZGMjY1NjBEREZCN0RCMTA0NkYKLToxMDBFNzAwMEVEQkM2M0EzQUNGRTBEQTkxN0NFRkIwNDlGMzc5NUNCNDkKLToxMDBFODAwMENCQ0Q5NzIxOTdEQjlBRjVGOUVGNTVDOUEzOTdDM0ZDMTIKLToxMDBFOTAwMDQ3OTc5MjEwNDhEODM0RjdFOTEyQzhGRjhEQ0Q1MTRFQ0MKLToxMDBFQTAwMDAwNUZBNUI5ODk2QzFCODdGNzY1MTI5NkJGMzE4RTFCNTEKLToxMDBFQjAwMDM1ODFFOURCRDFBMUE0RkIyMTlFN0M1MEYzRjc4QjJGNzgKLToxMDBFQzAwMERCREZGRjIyMUNERUM2RUIzMUNEREY1RjE5RDlERjNGNTAKLToxMDBFRDAwMEI2MjgzRTcyM0VBMEFEQkUwRUYyMDFDNzU2RUFGREZEMzkKLToxMDBFRTAwMDYzRUJERDM1QjBDRkVGMThGN0Y3OEY0REE2RkVGRTk4MTgKLToxMDBFRjAwMEZFRjMwMURBM0FBOTFDQjI0RDAwQjlEMzlCMEZFMDc2OUMKLToxMDBGMDAwMDNCOEY2QkZCNzJFNDY4Nzg0RUZENzkwNzVDRUZDRDkyMDYKLToxMDBGMTAwMDlEMTNFMEI5RUE1QTgwRkI5MTQ5RTQ3REIyRTQzMTk3MzAKLToxMDBGMjAwMDBDN0U4RUI2QUYzREQzQUIwQzgxRjdCNUZEQjJBMzQxQkQKLToxMDBGMzAwMEI0QzU0MTVFRDQ3NTVCMjQ3QTk2MjYzMDdFRjlFQkYzMTYKLToxMDBGNDAwMEE0QkQ3OTRDMTNFRUEzQkVDNDM4RkRBNUY2OTNCQzlCOUIKLToxMDBGNTAwMDU4M0Q4RTk5RDUxOTQ2MjU5NkJBMjEzRjc1NkU4QzFENDAKLToxMDBGNjAwMEY1N0IzQkZDMkY0Q0FGQTYxNDI4QjkxMzg2ODQ4RjYzMDYKLToxMDBGNzAwMDM4NUY1NUJBQjRFRjZBNzVGQUEwQUY0MEJGNzQxMzUyMjgKLToxMDBGODAwMDBFRjJFNjgxRDg0NjhDN0I5NDcxQkMxQUFGRDc0RDcwQjcKLToxMDBGOTAwMDcxM0RFQjRBMDA3OEE2MTRGOEE2MjBERTlGREYyNEUxMUQKLToxMDBGQTAwMDM5QjBGQzdFN0ZGNUZEQzY3OTNDNjNGNTdEODBGQkVCQjcKLToxMDBGQjAwMDRCNDU4OUQ1RTUxMUU0OEJBQkQyNURBOEE3MzVGQkFCREEKLToxMDBGQzAwMDZFNDIyQTNCNTc4MTg0NDY1QUU5M0E1QkU1NURDRTJDNTYKLToxMDBGRDAwMERBRUZBM0M3Q0MxOUYwREE0RjYzODgwNUU2RUQ0QkE3MkIKLToxMDBGRTAwMDcyOEVBRUEzRDRBRDBDMUY0ODNFQzI4OTQ0MjYyRjVDM0UKLToxMDBGRjAwMDAzODJDOThERDc3ODc2NTUwNUI4N0YwMTNGM0U3Njc2NTYKLToxMDEwMDAwMDA4RDhFMzNGN0Q5Q0U1QTdBRTdBN0M5MUJEMkU2Q0ZDQjEKLToxMDEwMTAwMDQ3MjY3MEI5OTlDNEU2NUYyMzBCN0UyOTE1RTY3MzFBM0IKLToxMDEwMjAwMEYzNTAzMzI0OTM0NzI2OTAzNzNFNzc2NDJFQzQwOUE5QTIKLToxMDEwMzAwMEZEMzYwQURCNjdCMDFEOTQ0QzU5OTBEN0ZFQzhGREU1MUMKLToxMDEwNDAwMDExRTg3RkQ1RjcxNzVGODFGNENGRTFCMTcwNTlENjMzM0UKLToxMDEwNTAwMDY4RTdFNzI4REYwM0ZDMDcwQkNGQzQ4QzE4ODM3NkZDMTYKLToxMDEwNjAwMDNBQTBGRjg1MDJGMTQ1QjIxM0VFRTc3OEJCNDE2RUJDQjIKLToxMDEwNzAwMDA5RThFQzA2RDk0NjYwREY1QUIwQzQ4NjcwRkY2OTkxNzIKLToxMDEwODAwMDIwODFERjNBMUQ2ODFFRTIzOThGOTkzMURFNENFMTcxMTMKLToxMDEwOTAwMDBCM0NERkVGNzFFMEI5RDFBNUYyQjM2NjY4RkY2MUFDM0MKLToxMDEwQTAwMDQwQUUxQzQwMUY1RjM2NUMwQkNGMEMwMTdFRkMwOEU4OTUKLToxMDEwQjAwMDJGQzJGQ0VCMzhGRjZBRkM0NEUxNUU4QUYzOTI1OUJEMTMKLToxMDEwQzAwMDQ4N0Y3NEY1NzlCRUJDMEVFOEIyM0Q0RDY5QzA3MzExMUUKLToxMDEwRDAwMDVEMzMyRkU5NUNDNEU5M0ZGMzYzRUQ5RUVERTlDNkExMDIKLToxMDEwRTAwMDI0NDJGREQ3NDFDRTI3QzZGQkZGMzk4MUY5MDU0QjM4OTUKLToxMDEwRjAwMDdGNUNGNUY4RDlGREQ3MDM1RjJGQjNCODAwQUY0RkU3OUEKLToxMDExMDAwMEZCN0UwMTc4RUJGNUJCRkVDRTcyNjRCMjU4OERGODBCMTYKLToxMDExMTAwMDU2RDBCOUUzMzkwRTI0MDZEQUQzNDY5QTExN0Y2QTI5RUMKLToxMDExMjAwMDNGRTdFMzJFRTI2QThEQzVCN0IwNkQ1RjI2MjA5RjM5OTkKLToxMDExMzAwMDlDOUQ1NTYwMzQ5QkYzMUI4RkNDODZGNzRBNDREQ0Q3Q0IKLToxMDExNDAwMDFGQjZDRjY1QzAzQUIyMTBERjdGRDYwNkZCQ0ZBODJEMDEKLToxMDExNTAwMDFGNUMyMTZBRTc2RTExODFDQUI2NjA5OTk5REJGNzlGMUYKLToxMDExNjAwMDNFMkVEMzNGOUZFMUY1OTkxRjE0ODk0RjQwN0RFNjExMzQKLToxMDExNzAwMDEzNkIxRjJBMTI1Mzk2RDNFRjg0NTJEODNDM0ExRTE0OTUKLToxMDExODAwMDNDMkQxMjVDOUY1QTA3RjlDQkZBMjZDMTUzNEVEQjM1MzIKLToxMDExOTAwMDgxN0I3QTIwQzRCNUU0NjExQjAxNTdFMTkzMUYyRTlEMkEKLToxMDExQTAwMDAyRUIzOUUzMjY3OEJFRUNEQzQ0QzYzNzRBOTBGODREQjIKLToxMDExQjAwMEE5N0RGRUVEODdDOUM0QUZFNTRCNjExRjlEOTdFQjk5RjMKLToxMDExQzAwMDg3NjAxRjFCOURGNzc1RUE3N0Q1QkIyMTZGNEFGRDVFQ0YKLToxMDExRDAwMDg4QUJDNTc5NTgzRTMzM0E2OEY2RjgwOUY4QkJBQzNFOUYKLToxMDExRTAwMEIyRUQ3RTgxM0MwNEUzODg2QjVBQzEzRkI3RjE3QURERjIKLToxMDExRjAwMDY4QjkxNkZEQzczODRBOUYxMjY4RDA5MDU5Qjc4RkFEQUQKLToxMDEyMDAwMDlFMjg0OEJGRjFFNTk0MzMzMkUwQUFGNzhGQjMyRkIyOUUKLToxMDEyMTAwMDlGNkRFRTgyMjFCMUMwMkZFNzI2RThGNzY1RjQxNzVGRDYKLToxMDEyMjAwMEQ3QUU3MERFMERFMEE3OEJFNzU3Qjc1MkJCMURENkZCREMKLToxMDEyMzAwMDIyQjVEQkUxQkE4RERBRUQ3MDFGQ0VBOTg2MkJFQzY3MDMKLToxMDEyNDAwMDgzRUI0RTZBQjdDMzE1RjZCM0MxMTVGNkIzQzExNUY2RjUKLToxMDEyNTAwMEIzQzE3QkIwOUYwREFFQjA5RjBERjcxRjE2QTk4MUMxMjIKLToxMDEyNjAwMDAwOUY5MjY4MDJGOUExMzYwQkEzMzMzNUQ5OEFGRTQ2NTYKLToxMDEyNzAwMEEwODg2MEZFM0U5ODZDRERCMDFDRTI3NTAyQzM5MzFBMzQKLToxMDEyODAwMENCOUUwNzYzOTQ5QkIxOUQzQTg2RTU3N0NEOUUxNEQ4OUIKLToxMDEyOTAwMDQ3Qjg0MjE4MjM4MUZERDQ2RTU1QjA3RUY5RDg3MjMzMTkKLToxMDEyQTAwMDgxRkFFNUQwNTRFMTAzQzhCQjEwQzFFNDExQTk3REIzQjQKLToxMDEyQjAwMEZERUJEQjEwRkU4QjY1NjI4MkJBRjRFNTcwNkUyOEM4MjgKLToxMDEyQzAwMEUzQ0ZDODA2MTY5RjBCOEE3MEJFNUM2QjBDRTE3NTY0OTkKLToxMDEyRDAwMDM3Rjk2NTRBN0YyNzA1QURCRDU3MDE3Rjc0MjJDNDA0RTUKLToxMDEyRTAwMDkwN0U3NzI5RjA3QzcxOTNDMERCQUZGQUU1OTE1MEQ3RkYKLToxMDEyRjAwMEEwM0Q3RkYzNDk4ODJGQUUzMEI0QkI0REJDQUQwRTdGMEYKLToxMDEzMDAwMDEyQzYzQkEyN0Q0RjFENTYwM0UzMUQ0OUQzOUUyNzJFRDcKLToxMDEzMTAwMDg0RjZDNzUxREFGQjlGMkY4NEY3ODNCREYzMzk4OUUzNDUKLToxMDEzMjAwMDg1OTJCNUZFNTIwREI2N0JGREU3MDUwQUI2ODdCMEZFODUKLToxMDEzMzAwMEVCNzdFRTdCMEFGQ0U1QkZGNzc4QUQ4QThBNzE3Qzc1QTYKLToxMDEzNDAwMDE2MjExQjYzMjNGMEZGNDQ1MTFGMEY5NTA1NUQzQzU0OEMKLToxMDEzNTAwMDhCQkY5QjFDRDU1N0UyRkVCMzA3NkMyODE3M0Y0RTI2NjgKLToxMDEzNjAwMEU4ODdGNDE3MTcwRDhCRDc2MzVDRjRFNzEzRkI4OTdGQ0QKLToxMDEzNzAwMDEyODVDMEI4NTUxMDBGRjRFMDU3OTVGMEZENjk0NDY4MjgKLToxMDEzODAwMDI0NTBBN0VFM0IxNTIzODExRDY5NEQwQThCREY3MTE5OEYKLToxMDEzOTAwMDMwNTBCQ0IwQjU5MUM1MDc4MzhBODVBOEE5N0Q3NUZEN0QKLToxMDEzQTAwMEQ2NDI1RUQ3Q0ZFMzg1NUExRDgzQjVGMDQ3QkFCQzgxREMKLToxMDEzQjAwMDMxNUU0OEM0NUIzMDFGRUQ1QkE0OEYwNzRFNTcyRTJGNjQKLToxMDEzQzAwMDVFNTg0RDAyOTYyQjgxRkU2NUMxMDNGRTdCQjU0QkY5M0QKLToxMDEzRDAwMEYwMEFCNEY3QUY2MUU3MzM0QUFGNjFEQzU0REIzNzA2OUMKLToxMDEzRTAwMDc3RTBEQ0E5MkFCRUU2OEU1QjhGN0Q3MDA1RURFNzVGQjYKLToxMDEzRjAwMDFFMjVDMTY2RkNGOUI3OTRFMEZCRjk3NDg1MTBERkFBREQKLToxMDE0MDAwMDJFNEE0Mzc4RTc3Q0U2Nzk0RDAyNzlFQTM2Nzk5ODk5NTUKLToxMDE0MTAwMEU2RkI3RTIyRDgwQjhCNjIzMTZGQjJFMENFOEMwRjYxN0YKLToxMDE0MjAwMDlDQzVBQTAzREZBMzc2MjVBN0Y3QUUyNzgwOUU0NDA4QjQKLToxMDE0MzAwMDVDODZCNUIzNTMzNEZBOUJGRDA0RDBGRkM0NzhBRDFENzAKLToxMDE0NDAwMEZEQTQ1QzQ4NDg4OTU1N0IzRjA3REJGMzE0Q0U3RjZBRDcKLToxMDE0NTAwMEZBOTNDMDdGNDc0QTM1N0E3REEzMDY5RUNGMUVEMTNCQzMKLToxMDE0NjAwMDFFRDJGNzQ0ODdENkJFNzEyMTNDNkZFRjFEQUYxRUJGNjEKLToxMDE0NzAwMEY3MEU5QzZDODRFRDQ5NEY4MjNFMkE5OUExRTlBQkUzQkIKLToxMDE0ODAwMDRGQzBGODZERDVEQUZCQTNGRDEwOEY5QTZGRDJGODg3QTUKLToxMDE0OTAwMEY4ODE5RjE1RDJEQjk2NDEyRkJFQ0ZGOUZGQzhCNjREMUMKLToxMDE0QTAwMDM1NTBENzc1OTNGNjVDREQ4NEVCQURFNkVENzdCNjI5NjQKLToxMDE0QjAwMDRGMDIzRkZEREJBRkVGN0ZGODdCQzZGNjAyMTI5QzdDNEMKLToxMDE0QzAwMDY1NzYxRjVGMThFNUQ1NkJDNTRDOEU3ODFCOUUwNTcyM0YKLToxMDE0RDAwMDI1RDU4RDRGRTFGOTZFMTAwRjYwRjlBQ0M0NTkzRTkwREYKLToxMDE0RTAwMDE3NzZEMTQzMzk4M0Y4REMyRThDNzMxQUM3NTk1Q0M0NDQKLToxMDE0RjAwMEVDRUI0RjBCRjU3OUIxMzY0MzVFQ0NDN0YzNTNGRDhENjIKLToxMDE1MDAwMEYzMjY5RjRGN0I2OTY0M0Y3NjZDNEVFOTk3ODU1MDNGODkKLToxMDE1MTAwMDQwNEU4QjMwOUU4QjAyMENDRTI3NkJDOTUyQkU4MkZCOTUKLToxMDE1MjAwMDk0NzVGMURDNEQyQUIyM0M3MDlGRkFDNTJBRDg5OUQzNDQKLToxMDE1MzAwMDI4MzgyMTBGREI1MkZDMjhDNkU5NDNGOTE2REQ3OTIwNTMKLToxMDE1NDAwMDVBOUU3M0FENTU0NkY5RjgwOUFGRUI5ODVGMkE0RkJFMjYKLToxMDE1NTAwMDg3QjY2Qjg3OEE2NDAzRDY3OTM4MzFERjYwMUU2NjdENzMKLToxMDE1NjAwMDBBRTUzQUNGN0I2QUU3NzE0Q0JCQzhCRTA4RTNCRTk0N0MKLToxMDE1NzAwMENGRjk3QUNGMTQ3NjU4NDAzRUFCNDQ5RDVDOTY4REYyRkQKLToxMDE1ODAwMDNBMDhGNUM2MjZDNzFBQ0MwM0RCOEEyRDk4NDdEMEYyNTUKLToxMDE1OTAwMENGMEEzRkZGNUJDQkZCNEUzQzNGOThFOUY3NzQyREFFODMKLToxMDE1QTAwMDNCNzBGRTU3NjlEQUUxNDNGQkEwNTMyNDI2RTFDMjdDN0QKLToxMDE1QjAwMEYwNjI5RjlBMENGNTJDRDNDQTYyNzBCRjQwNTVEREVCRTgKLToxMDE1QzAwMDM4RkVBMTE0ODJFNzA0NDdDRjZBQzRGRDQxNjY2QTFGNTIKLToxMDE1RDAwMENBMDAxNzlFMkZENkVBNjM4NjlGRkYwRUVFMUJBREQ3N0IKLToxMDE1RTAwMEVBQ0RDNThBMDM2MEE3REExRUExN0UxNjc0RTBGOTYwMTEKLToxMDE1RjAwMDJENUYzQ0MzMjBFRjE3MTc1NkEyOUUyNUQ0OEUxRjE1RDIKLToxMDE2MDAwMDBCREYxOTc4REZGMzAzMTM1OUZFRjg0NDI3QUJFN0Y3MzQKLToxMDE2MTAwMDE2RTlGM0MwRjc1OTU4OUNBRjNENEQ0RjU3MUIyNzMyODEKLToxMDE2MjAwMDdGRjUwNzVDOUZFRTJDRkU3OTE1REFDRkM0RTQ4MUJDMTAKLToxMDE2MzAwMDE4Nzk4QzlEMEIwNzMxMTZEQzZGNjUzQzhGMzk3RDBFNTgKLToxMDE2NDAwMERBNzU4RjBEQTc0QkE0QjZCNkI5RTk3RDhDMkIwQUVCRTIKLToxMDE2NTAwMEQ4N0I5RjhEMjM4REUwQjc5OENEQUM0RDJGMkFFNEZGMkEKLToxMDE2NjAwMDMzQkRDQUQ0MjJBOEIzNjhGQTEwRkJCN0FBQUNERUJCNUMKLToxMDE2NzAwMEJGRjhDREJDMjI2RDlGMDg4QkRGQ0M3N0VGRUQ4MTdENkQKLToxMDE2ODAwMDY1N0Y3MzFDQzdCMEVGRDUyN0IxRkE5Mjk1ODU5Mjk2MDYKLToxMDE2OTAwMDQ3QzA3MzA5MjlFMTVBQzA1RTRDMjlGMEQ1QzNCQ0M5QzMKLToxMDE2QTAwMDk4NEQxMkNDNDM5MzM3M0I1RUY5NzYwREM4MUIyMjQ3MDkKLToxMDE2QjAwMENFNEI2QjdDREY2NkM4NEJGQkRDRUNGRDM3OEJFRkFFQjMKLToxMDE2QzAwMDgxRjMwREZBQ0I0MzNDNUMyMjY4RjFCNTNCOEE2MDVFNDYKLToxMDE2RDAwMDA5NUFERTQwQkUxM0RBQkQ3QTE0MTZFNEQ1RTlEMTg1ODUKLToxMDE2RTAwMDBERkYwQkY0Njg5RkRERkU3NjBEOENGNzREOUIzRkE1M0IKLToxMDE2RjAwMEFCRkY0MkJDOTZCM0Y4RDkzNzZERkUxMzI2Qzg3QjYwQUEKLToxMDE3MDAwMEZFRkZFOEVGOEM5OUUwN0IwQkJFQjM1QTkwQUI5QzJDQUMKLToxMDE3MTAwMEI5RTcxMUY0NzlCRTc3OEIwNkM4RjM1RDJDRkVGMDdGMzQKLToxMDE3MjAwMEYxODY4MUUzMEQ2MkYxQkY2NkJDQzEwQTdCQTg3MjkwQUQKLToxMDE3MzAwMDhGQUUyQzA2Rjk1Q0M4RjhFOERGNURFRUQxRjVFNkMwQTcKLToxMDE3NDAwMDdBNTcwQjlCRkNEMTIzRkVGRUZFN0U0QTgxMzJBOTE4RkMKLToxMDE3NTAwMEY1QTA2MkRBNDlFOTY3NzU4OTlERDkzMzAxMDZERkRFQjQKLToxMDE3NjAwMDc4MDZDQ0RGQUI4QjY3M0NEOUYwMEY4ODY3RDBGNTU2OTUKLToxMDE3NzAwMDIyN0VDQkY4RjdCRkY5RjhCQjE1RTEyQjMzN0JFMkRGMTQKLToxMDE3ODAwMDkwM0U1N0UzRkEzNkIxRjVGRDEzQkVCRjFFRTlFNTk3NkIKLToxMDE3OTAwMDhDNUU3QUUxQzNFREE0MzBGODJDNkNGOEU3QzBFNzU3MTMKLToxMDE3QTAwMDA4OUZBRDZDN0VERjAwN0NFRTQyNzg3QUQ4N0MyRkU2MTUKLToxMDE3QjAwMDVGMUYyRDE0MzRCOUZDMDZCRTk3Q0RFOEUwNDNCMEFGRUYKLToxMDE3QzAwMDk5REYzREU5NEFBOUNGRUY3RTM0NTczRTUwQ0NFQTYzMUEKLToxMDE3RDAwMDgyQzVCQUZBNEZGOTEwQjQwN0YwOEI4RkMwRjMwODdFQjgKLToxMDE3RTAwMEYxRkJDNURGNDBCRkQ4NTlDNEUwRDY5Nzc3RjFCMzczOUEKLToxMDE3RjAwMDZGNDlENTBENTdEM0VGN0M0OEUxMERGMUI2OEUyNjExMTgKLToxMDE4MDAwMEVEOEI3MzQ5MDRDRjAzRDBFQzhENTAyQ0FCREZCQjcwNTQKLToxMDE4MTAwMDNGNTgxOTgxRkQ4OEI2N0M3NkNFODg3NjNFODA1OUFDREIKLToxMDE4MjAwMDFFMUM5MDJFODRFQjgxNDE4QTE1RUFCQzk2QzgxOTZENjYKLToxMDE4MzAwMEIwQkY3NUQyOUEyRjcwREY5NTU1QjZFMUJGQUIzOURDREEKLToxMDE4NDAwMEVEQjFEQzA5N0UzNEY1NzNBRjgzNzg2QTgzMEJGN0QxOTEKLToxMDE4NTAwMDY5RkJDQUI0RkQxRjRCMDJGM0Y2QzIzRURCMEU0QTBGMTIKLToxMDE4NjAwMDg5RjQzQkQzQ0IyQ0M3QzNENzZGQjQzN0NDODZCNkYxNDIKLToxMDE4NzAwMERGMzU0RDk4QThBRjA3QTRGMDQ3RkJFN0RDM0E1NjFGQzkKLToxMDE4ODAwMEQ3NjEyNjNCQTFGRUEzNUUxNUZEMkRCNEJENzE4RDgwRjEKLToxMDE4OTAwMEU3NzEyRUEyNzAwMjdGN0Y1MjY3MkFENjkzNUI5M0Q4OUUKLToxMDE4QTAwMDc5NjdEQUJGN0I0QUU5QTAzMzFGRUNCRjIzMjJDMTdGRUYKLToxMDE4QjAwMEM3OEVFRjI3RDNDRUY5OEU5QTdBMUFDRkRCRkE5OEFFN0QKLToxMDE4QzAwMDFGQ0VFRkQxQ0U5OTk4QzFFOTQ0ODM2NzU0NEIzQ0MyRjcKLToxMDE4RDAwMEU1MUM4NTBCMDFCOEYwRkQzNkQzOUE1ODNFQjhBRDdBQjkKLToxMDE4RTAwMDcxMTBDOEJCQTZGMDhCMTU5MUVBNTJFNkI4RjVFN0E1RDIKLToxMDE4RjAwMDFCRTMxOUM2RjNDNkNEQzQzNzE4RjZENTREMkYyQzUxQUUKLToxMDE5MDAwMEMxNUVCNUYxN0FDRDY4MjJFM0I5MTYxRkFGRjkwOTNCODQKLToxMDE5MTAwMEQ3QTJDQ0EyM0I0N0M0RjhERDY4MDM5RERBMEM3MTA3NUYKLToxMDE5MjAwMDIzOUQxQUYxNzI5RDAxMkYxQkNERUM5Q0MxQjY2RUQxODcKLToxMDE5MzAwMEEzRDJEQjZEMEYyRjZBODc3REY5RUFDMzI2NTYzNzRGOTYKLToxMDE5NDAwMDY0M0NGN0E5OEQ1QUJDQjhGRjlDNEUxNkUyRjU3MzM5N0EKLToxMDE5NTAwMDNDMzVCQzEwRDI2ODAxN0VBQkQ2RjZBMTlCMUE1N0MyQUIKLToxMDE5NjAwMDdFRDI3OTdDMUZGQTRENjQxM0VFMzM1ODAwMTYwNEZEQzUKLToxMDE5NzAwMEVFNDIwODkxOEI3MEFFOEM2NDY1Q0U4MThCQzAzQ0VBRTAKLToxMDE5ODAwMEFCRDgzOTE5MjY1ODAzRTQwOTFFMzYyMUJGQjZCOTc3RkEKLToxMDE5OTAwMEUyQkZGQjE1MTg2QTg5M0Q5OUNFRkM4OTQ4RjY2QzZGNDkKLToxMDE5QTAwMDVDODE0MkUyNjQ1ODFDRkZGRkUyNTc3RjVCRkMyQUI3NzAKLToxMDE5QjAwMDg4OUQ0N0Q1MTYxNTcwRTVBN0IyRjMyNkEwOUUyOUI3RDYKLToxMDE5QzAwMDQ4NDIzOTE4QjQyODI5QjhERjYxRkRBNzJBRDA4MUI2NkEKLToxMDE5RDAwMERGODFGRTJDQkI0MjdGNkVDMkZBODkwM0Y4N0Y0NTQ1NEEKLToxMDE5RTAwMDA0Qzc2QjRCMEQyNTgzNUNGQkIwOUZCQUNBRURFMDM4OTIKLToxMDE5RjAwMDMwM0RCNDYxMjJFNkRGQTlGRDlCMEQ3MjhGRDlCRjE1ODIKLToxMDFBMDAwMDc5QkVBN0YxM0VERkU3QUNDNTkxM0VGMTJBRkYzOTMxM0YKLToxMDFBMTAwMDA3RjZFNzEwOTRDM0I2MEFDMTBGRkI3N0E2M0I4NTNERDYKLToxMDFBMjAwMDgyRDRGNzdENjJBQzYzRkY1RjlBQjdCQTkzRkI2REMxNTYKLToxMDFBMzAwMDI4ODJFNzIwMDU1MzQ5RDU3MzExRjBGMTgzNTIxNkE3ODgKLToxMDFBNDAwMDBDNjY0NEM2OTdGNjlDREExOUVGNENDQzYxRkVEMDIwQTgKLToxMDFBNTAwMDQ2MTRBN0FDRkFGOEMwMDcwM0QxODc4NkM3RjhDOUYyQzUKLToxMDFBNjAwMDQ3MTM3M0ZBREEwRkU0Mjk5RjQwQkI1NUYxN0QwMDc4RTQKLToxMDFBNzAwMDNEQTk4QTEyRTgxNTEyNTBGMDNDQkY2OUZGMjFCQTAwNTcKLToxMDFBODAwMDhFRkZFODNDRENDQUMyRDQ0QkNBQzM1NTAzOUQwRDUwM0YKLToxMDFBOTAwMDJGNzhCOUQ3RkYwRkY5NjEzRDZCMDA4MDAwMDAwMDAwN0YKLToxMDFBQTAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRUQ3RDBENzg1NEQ1NjEKLToxMDFBQjAwMDk5RjBCOTczRUZGQzI0OTk4NDA5MDQxQzI0QzAwRDAyMjkKLToxMDFBQzAwMDQ2MUJEQzgxODAyNDQwRTBDRTRDMTIxMjQ4NjBGODM1ODEKLToxMDFBRDAwMDAyRTI4NTAwOEQ1REI0NTE3OTE0NThCQUI5MjExMDIwMDUKLToxMDFBRTAwMEEyNjBCRkI0QjVFQUEzNDMxMERDRERGQUQ0RDQ3NUFENkYKLToxMDFBRjAwMDg4QUUyM0EyQTU1REQ0QThBMUM2NTU2OTEwRTRCM0FERjQKLToxMDFCMDAwMEVEODcwQTZCRUJBN0Y1N0JERkY3OUMzQjczRUY2NEMyQjUKLToxMDFCMTAwMDlGQjE0QjlGRkRDMkEzMzdFNzlFQkZGN0JDRTdGRDNGRDgKLToxMDFCMjAwMEVGQjkzOUVBNjQ4QzREODJGRjhDQzI2NTVBMDE2MzJEOEUKLToxMDFCMzAwMDU4QkU5Q0UxOEZDNkEwQkNCOEJGQTU5QzBCNEQzQjc5OUQKLToxMDFCNDAwMEZCRDFEQUZGODkxQTIzMTlEMzk5RTgyRkRBQkYyM0YxRTEKLToxMDFCNTAwMEY2NDc4MzAzQTI4Njk3QjE0NUEyMUVDQTNBOTZDREZFRTgKLToxMDFCNjAwMDhDMjk3OTQxMDVGQUQ3NDk2Njc5OTdBNjU4RTdDQkRBRTcKLToxMDFCNzAwMEE1QzE3QzI3OUNGNkYxOTc4OEYxOEFCNDJGNjlGQzQ4QUYKLToxMDFCODAwMDdDRkUyRkEzMUE5NDhGMjdDMTdGMDNFM0U1NTJFRENGOEMKLToxMDFCOTAwMEQ0N0U2NUJDRkQ5Rjc1NUNFRjQ5QzkyQzhGRDJCMUZGMjcKLToxMDFCQTAwMDExOTdEOUZGOEE2NTM4RkYzRDc5QkM3RTZBNjg1NEQ0QTUKLToxMDFCQjAwMEI4MDRFMUY5QTZDN0JGRDBGNjQ3QTdBODhDMEQwNDdDRUUKLToxMDFCQzAwMEQ0RkQyQzdDMTlGQ0JBQTQ3RTk3QUM0M0JGQTNDRUM4MkQKLToxMDFCRDAwMDdCMkMwN0M4RUM1RTQ5REQwMzdEOEE1OEJCQ0M2NDAyRDAKLToxMDFCRTAwMERCMjU4Rjg3MjEzNDg5QjVDMDVDMkI0MkYwQkYwOTgwOEIKLToxMDFCRjAwMDQ3QUY4M0NGNjMwNEEyMUFEMEQ5RTJBOTI2OURENjQ0NjkKLToxMDFDMDAwMDcxREVERUU4RUU5REUwNzcxRkMyNzUyN0UwRkVFRTUyNDIKLToxMDFDMTAwMDFCRENDNkE4NjVEQTk0MDREQ0UxMTBCNDg3RjExNkRGOUEKLToxMDFDMjAwMDcyOTMxRkUxNUMzQ0MyNUNERjI0OUFBNzM5REJFQ0Q3REUKLToxMDFDMzAwMDdERDY3OTVGN0JBMTk0RjBCRDM4M0U0RjI1QjU1RjlDODIKLToxMDFDNDAwMDZFOEUzNzI3OEFGMzI2RTA1QTQ4RkI5MTgwNkJBODBERTkKLToxMDFDNTAwMDlGODFEMDQyQzI2N0M0MTdERDNDMDhGMDEzRjFCMzgwMDYKLToxMDFDNjAwMDAxRjg1QzU0RDcyOEVCMDUxNjNFMzJDMjJBRjE5MTNGQTkKLToxMDFDNzAwMDVFOEVEQUY5QTg4MEY4QThBRkUxMUEzNjI5QjI0RDgzNTIKLToxMDFDODAwMDdENjJGOUVENkE2NENDMzdCMUVFOThGMzMyNUNCNzIxMkUKLToxMDFDOTAwMEQxQkE0RDNBNUFFMkIzRDBCQjA3RDZBRDlBRTUyQjk3RUQKLToxMDFDQTAwMEQ1NzlGQjYyREU4RTMyOUFGNzIzQzAzNzRCRjAxMzMzQkYKLToxMDFDQjAwMDA2MkZEM0JDMTczRTVFOTM3N0I5MEJFMTVFQTU0OTVBNTgKLToxMDFDQzAwMDE0REE3Rjg1M0ZEMzEyQ0ZBMzUzMjRFMjE3QzBFN0JGQjYKLToxMDFDRDAwMDEyM0U4QjAwOUY5OUY4OUUxMTFGM0M1RTE4RjlCOTA2QzEKLToxMDFDRTAwMEY1NENENTFEMDcwMDJFOTdFNjYxMkQ4MDgzQUE4OTkxQkEKLToxMDFDRjAwMDdERDQ5RUVERjQyM0ZFMDEwMDFBQTdGOTc1QTYyMDlGNUUKLToxMDFEMDAwMDAxNkYwNTFDOTNBMUVDNjQzNUVEMjlFNkZENjFDODQxMjYKLToxMDFEMTAwMEVEOUIxOEFCNjgwN0Y4QzY2RkY0QUQ4QTc4MTNGNUJFNzMKLToxMDFEMjAwMDMyMEU1Nzk2NzgxRUM5RUNCRTYxMjBDQ0RGMEQ1NTFCRDQKLToxMDFEMzAwMDYxRkMyNjAzOTgxNzlFMUZENDQ5NTEwOUQ2RkM0MTZFQjkKLToxMDFENDAwMDY0NTYzMTk0M0JGMjFDODE4RDMwN0RDNzNBRjdEMDM1MTMKLToxMDFENTAwMEQwQkUyQkNGMUI0MEU4QkFCMjc3NjZGQTYwRkMwRjAyMDgKLToxMDFENjAwMEIyQzBENzRERUYyMzVGMUZDOThDRjM5MzgxRkFBNTQzMEYKLToxMDFENzAwMEUwRjdENzVBNzExQkYyRDNEQjJBMkYzRjUwRkFGN0VGNjcKLToxMDFEODAwMDFCMDU0ODZGQ0NDNzA2MDExRUIwMDdGMEFBMjM2MzhBNjMKLToxMDFEOTAwMEM3MERGM0JBQ0E0MTlDNjA1RjFGRDM1RDUwRUZDNjdBOEUKLToxMDFEQTAwMDU4RTI5QzFGRUNGRUMxM0M5NUU0QzZDQjIzQUY2NUFDNkEKLToxMDFEQjAwMDA2REZBQkQ4NUYzMUJBM0QzNEFGRjI5NTQ0NEZFNkJDOTUKLToxMDFEQzAwMDM2MzFBRUFCQjVFOUE1MjY4MDlGRjk2NTE2NDJERUYyNDUKLToxMDFERDAwMEYzRjY3RUQ2RERGODk1MDNDNzg3NzIzRTQzMTI3Q0UxQTkKLToxMDFERTAwMDJCNThCRjI0Q0FGOEYzMTUyQ0QxQ0IyMjE1NzkwODU3RUMKLToxMDFERjAwMDNFMEJCNEMwN0M3Mzc0RTc4OTc4M0Q3RjZDNTdBRTE1OTkKLToxMDFFMDAwMDcwMjIzQ0YyODY4QTYyNzhBNkQ3RDlEQkNEQ0M4N0IyMjUKLToxMDFFMTAwMDI3NTE5RUQxNUExQjQyQkNDRkQwQTBEQjU4QzYwRUI3NkIKLToxMDFFMjAwMEQ2QzY2QTAxQ0VDMzQ1NkU5RjA0OTg3NkU1MkFCNkY2RkIKLToxMDFFMzAwMDMzNTlGQjI2QzQzQjUzMEYxRDk0MDEyRjRCQzU3QzREREEKLToxMDFFNDAwMEJFMzlFRjMxRThCNzJBMUY0QUIwRkUyM0ZGMTBDQzlDMDEKLToxMDFFNTAwMDkwODNGQzI2MDcxQ0EyOERDM0M0MDdBMzc2NEUwNzk3NjgKLToxMDFFNjAwMEQzMDEwOURBMzczRDYzRUVEQkM0MzZFNDAzMzk0M0IyMEMKLToxMDFFNzAwMDk1ODMyRUIzN0U0QzFCRjJFMTkxQjg1QzFEQjkxQ0NCNEYKLToxMDFFODAwMDBCQUUzMEY5MjZCMzBERjk2QTVBODY1OTc2MkQ0NzNFQzYKLToxMDFFOTAwMEVBNTY5QzQyOUUwRDZDNDMzQUQ5NkE4RTY3RUMyMEY5NTMKLToxMDFFQTAwMEYyMTYzM0VCMUQ1NDFGODlDQkJGRjI1RDU4NUVFODEzNjkKLToxMDFFQjAwMEYwMThERjI3NzlEOEE0NzE3RDcyRDUwQkIxNkVFMzIyQkIKLToxMDFFQzAwMERBMDM3RjVFMTk0NDdFOEI3MDc5OTc1QzNGQTkzM0RBMjEKLToxMDFFRDAwMDk0ODU3QzA3RjgxOUE1RjZFNEI3RjU0MTk5RjgyOEEyOEUKLToxMDFFRTAwMDdEMkNFM0ZFOTVENjAzQ0U2MEZGQzIzNTUyRTcwNEE0RjUKLToxMDFFRjAwMDRGODUwRDQ1QkU2RjZFMDA5RDNFMEFDQTJGQTZCOUQ0MTAKLToxMDFGMDAwMDRDOTRFQkJFNzIyRDA1RkZGRTNDQzhGOTc3NTJEMDlCNzYKLToxMDFGMTAwMDczMTI3MTU3QzgwQTkxRUU5QTFCRDY5QUZEMEREQzVGQjkKLToxMDFGMjAwMDdEQTQyQjlBOTZEN0ZCMzhBRjg1MUQyNDY3M0EyNERGMTIKLToxMDFGMzAwMDdDQUU5RjY1ODZGQTM5NzhFRjE1REU2Mjk2NjhGNzU4QjEKLToxMDFGNDAwMDk4RUJFNUM2NDI2RDdBMTBFNjlEMDVFMjk3QzExRTM2MTQKLToxMDFGNTAwMDRFQkQzRjEyODI3OTRFMTQzQjAzNkVFMjMzRUQwREU0MjkKLToxMDFGNjAwMEIzQjk4Mjg2NzZCODM0QjYwRUU1NDZCMURCQjcxMTY1RjMKLToxMDFGNzAwMEI3NUNFMDVDMEI2NTY1MDhGMDJCOTYyQjM4N0RFQkYwQzkKLToxMDFGODAwMEVGQUIxMTM4QUU5MkEwN0Y4MDYzQ0U1QTNCM0YyOENDOTYKLToxMDFGOTAwMDQyREY1MEJGMjg5ODk5NzNGMjVCNTBCODlBNUQ4REVCODEKLToxMDFGQTAwMEJGQ0JFOTVCOEE3MjZDRUIwOERGMkQ1Njc5RjY2ODk4MzcKLToxMDFGQjAwMENCQjFBODU4RUY4MUE5RkY1MjgzRjhGOTk0MzkwMjI4RDAKLToxMDFGQzAwMDNGRjZBNjQ3NDg5RTFEQ0I2MkFDMEQ3NUJFQzY1NERGREEKLToxMDFGRDAwMDIwRTQ2QkJFMEUyOTdGMjFDM0Y2MEYwRTg3MjUwQzA2NjkKLToxMDFGRTAwMDM4RDZCRUQzNTE1QTA4RUZFRkUzRkQzRUJDODZENTMzNTkKLToxMDFGRjAwMDdDQUZGMDMyM0MwQzYzMkNCNjNCNEFFREVFMEM4RUEwNkQKLToxMDIwMDAwMDc5RDk0MzAxOEYwNzY5MUY5QUUzN0U3QjU5QkIxMzlGRTAKLToxMDIwMTAwMDhFOEM2Nzg3RUEyOUY2Qzc3Q0IyRDVDRThGRTI3ODQwRUUKLToxMDIwMjAwMDVFMDI0RDg4RUI5Njk4RUVGODBBRDcyRkU0M0ZEMEU5OTAKLToxMDIwMzAwMDA2REMxRjkwRkFBNDQ3MjY3RDc4Q0E0NjZGRTM4MjJBMDEKLToxMDIwNDAwMEMxOTE0Qzc3RDBBRjg5RkFDRDM3RkIzMUE3NkVCMUQ3QUMKLToxMDIwNTAwMEQ3MDc3RjE0NkQxQzQ5RkE2ODFCQjVGMzgyM0VDQUIxREQKLToxMDIwNjAwMEU5QTNCQjgyMjlGNEQxQzg0QUVENkVGRTlFOTdBMUZGNzkKLToxMDIwNzAwMEJEQkRGNEZGNUZBOUZBNDNGQjFGRDI3QjhGNEVGOEFBQzgKLToxMDIwODAwMDlBQThGRDA4Q0JFMzg3OTlGMjA0MUExNjgxRkMxODYwMjAKLToxMDIwOTAwMENBOEZGNDFCRUJBNjU4RTQ4RjMxRTE2MTk0MzdEN0VCN0MKLToxMDIwQTAwMDkyQThDRjdGOThGNDRFQzhFQ0ZGQUJBNTc2NzlCNEUwNDgKLToxMDIwQjAwMDYxQkIzQzlBNzkyM0Q2MjdFNDRGRUQ0Mzc2RjkxMzdFMzIKLToxMDIwQzAwMDE4RTU0NTcwOEVEMDZCRUNGRDg3NzBGQ0U2MjU2NkZGNDkKLToxMDIwRDAwMEQxRDEyMERBMjUwRTUzMUVCMjI4RjJBMUNFRTI2NTlCQTMKLToxMDIwRTAwMDFENzlFNEQ5RjZBNUE4RTc0Q0JGODkxOUVEMEYyMTNDNkQKLToxMDIwRjAwMEE2OUZGMUQ2QjNGQUMzQTgxNzQxMkVCMkUzMjYxRjhDRDAKLToxMDIxMDAwMEU4QzlFRkE2MUMzMEU5QzdCNDBGNUY3QjMxQUExQkQwMkEKLToxMDIxMTAwMDZFNkU4NTE2QjNFRTRCRENDRUVDRTY3NjRGQzJCRUZDOUYKLToxMDIxMjAwMERGRENGRUVFN0JGQkYxNzU5QUJGODBEM0RCMzczMEZFNDAKLToxMDIxMzAwMDdCRDZGMTREN0IwQURFNzcxM0ZEODlGNzk3OUEzRjA3MkYKLToxMDIxNDAwMEYwOUQyNkY4QzY3M0Y4MkVBMkZGMTdCNEVFMDBENzUzMDEKLToxMDIxNTAwMDdGMDU3OEQzNDMxNjNGRTAxMkM0RTdCMDRCMUNCRTcxMzUKLToxMDIxNjAwMDIxRENFRjJBQkVERjhGNjlDQzk0RTMxMzA4RUUxRTc0RTYKLToxMDIxNzAwMDcwREVGNDVGNDJFMzk2RjI3NTVCQzZENUFDRjNGNUU2MkMKLToxMDIxODAwMEFGNDNCQjMyN0JCQjM4RkY1NDEwNUM2MkRDQjNGNEFGQUYKLToxMDIxOTAwMEI2Qjc4QkY3OEY4NDJDRjREOTA3N0NCRUM4QkFCRkRGRTMKLToxMDIxQTAwMDgwMUM1OTQ1RTM4RkU0RTNDRjRCRTBGMTI2RUJGQkZGQzYKLToxMDIxQjAwMDFGMzczQjI3OURFRjIwN0FBQUU3RjQ3NDFFRjZGNjBGMkYKLToxMDIxQzAwMDEwQkZEQkE0NzYzRDhCRTI0NDg2ODlGN0ZCNzAxQzc4NTgKLToxMDIxRDAwMERGRUQ4MkY3MzFCMTFGOEYxNDQ3MUVDMEY2NThGNDhGMjAKLToxMDIxRTAwMEIzRjgyN0M2REM1RDA4NUZDMjNGODE4MTBBMkNGQTlFRTYKLToxMDIxRjAwMDVEQjcwQkQ3NjNFQUZCMjc0MjhCNzYxOTQwMjc3Mjk4QUQKLToxMDIyMDAwMEI3N0ZGNEMwQ0JDQjcwRkRDOTY1QjA0QkZFOTlGNjNGRUMKLToxMDIyMTAwMDA3RUM5MjMxNjQ5N0ZDMEJDMjc1QUU3MTAxRkU3NkMyNzkKLToxMDIyMjAwMEMzRDM5QzZFNTJENDNGNDlFMzNFQzZFQkI3QkFCODFENDgKLToxMDIyMzAwMEZCRDY5MjRGQzk4RUQzNkU1NTFENjhDNzk5N0FGREY5QUEKLToxMDIyNDAwMDEwQjc2N0MxMUVBOTg4N0E3QkRBOERDRjhCNzgxQThDN0MKLToxMDIyNTAwMEZCM0NDRERCQ0VGMURGMTk5MTMzRDFERTRDRDgyRDMxRjMKLToxMDIyNjAwMEYyODMxMjc2RDUwQUEyQTNCODVEQzVCRTRERTVBOTYyNzgKLToxMDIyNzAwMDlGREYwODdENjc5OTgwRjc1NzFDMEY2MjNERTc2RURGOEYKLToxMDIyODAwMDQxNzBGODc5RkIxNEY1OUQzNDVFMkU4NzkzNzkwRjlEOEMKLToxMDIyOTAwMDQwQkY5NUU4OTVGRjhDNzQ0MDc5OTUyODA0OUQwQjRBQzIKLToxMDIyQTAwMDcyQzA2RTM5RDAyQUE5NDgyNjJCRUYzM0Y3Rjk3NkUyQUYKLToxMDIyQjAwMDhCQjhERDI2RjhGMDdBNDFDNzlGODRENkQzM0U1RTdGODcKLToxMDIyQzAwMERBRTRGRkZERDQ3RTdDREM0RjVENEZGMEJGMkRFMjEzREUKLToxMDIyRDAwMERGMEJBRjM3RTFGQjkwRTA1MzM5N0NERkMwRjhBNzA5OTMKLToxMDIyRTAwMDNGOENFM0E3ODYxOTRFQjRDQkQwQUZEQ0MzN0FFRUVGQjgKLToxMDIyRjAwMDE3MjI4RTAzRkRGRTJGRjVGMzcwQjg2QTc0ODlFQ0Y3OTAKLToxMDIzMDAwMEM4OEE2MzRFQTRGN0E1OUQ0QzRCNDUxRjcyRDg2NUY2NEQKLToxMDIzMTAwMDk3QzM2NDk3MEJGRjM2QzBFMzQyQzlFREQzQzI3MTdBMEQKLToxMDIzMjAwMDRBQTNGNjNFM0VERjg2RTI0ODA2OTZBN0U4QUY4NzA3NTcKLToxMDIzMzAwMEYxQURGMUEwM0QxQTI5OTVBMjJENzlFOERGNzhDQjRBQkQKLToxMDIzNDAwMEExM0NDN0MxQkFDOUVGNjM2QzMzQzY3REREQ0YyQUFDRUYKLToxMDIzNTAwMDI1NDBBRDU1QzUxMkQ3MDEyRUZEMzVGQTkxMEJDNDNFNkYKLToxMDIzNjAwMENGNjFGMUY4OEEwM0UzMzU5NkY4MERGOTgxRUVGMDlEMUYKLToxMDIzNzAwMEY5QUQyQUM1NUQyODZFRTNGMkNCRTQ1NzA0RUY1RTQxNjgKLToxMDIzODAwMEYxOTFGNDIyQjdDRjhERjNDOEI5RTRFN0JBMUUxMEYxOEEKLToxMDIzOTAwMEEyRjlEQ0JGNzRDMDNGQjRBM0QzRDczMkYyREY2NjZEQkQKLToxMDIzQTAwMDk3QTIyQUQ0QkIzNTdCRkNBNTc2QzNBOTI2RjJFRjU2QUIKLToxMDIzQjAwMDMwOUYwNjdFQTI1MjY0QUY3NzI1RjlBRjhEODU3QTAwRjMKLToxMDIzQzAwMEYxNzJGMkJFNUEwN0UyMjM1OEM5RkRCMDkzRjc1REUxRkUKLToxMDIzRDAwMDQ1RkU0QkY2QTM0RkEyMUY0RDUyQUE4NzFGNkRBQ0MzRkIKLToxMDIzRTAwMEY4OUFDNThGNUVEMzg3N0U3NDM4NkNGN0EzODcxNTQ3M0MKLToxMDIzRjAwMENBQzI0OEU3OEE0NkYyRURDMEQ0NDk3M0M5NUZERTJFRUYKLToxMDI0MDAwMDMzMzdCNDNGREUzQUZFRDUyMjI4MUJEQjk1MDA4NjFCMEUKLToxMDI0MTAwMDNFNzA2QTRCQjFERTAwN0Y1QTFFNDZEQkM0MzBCRTM1Q0IKLToxMDI0MjAwMDVCQzA3RkJDRjg1NDI5QzJBRkREM0UyQzgwRjQ3RUZDM0IKLToxMDI0MzAwMDZFMzdFMUY5RjhDQUVDNjgwNjhDOTdCNUZEQjM0RDY5QzMKLToxMDI0NDAwMEQwRkZFNUU4MTAwQ0IyQzVGREVCNjQzRjFDREMyNzAzQjAKLToxMDI0NTAwMEU5RTYzODFCQ0E1QTcwMUYxNDFGQzM3MTk1RkFBQzgwODUKLToxMDI0NjAwMDExNDhGOERCQjNGMzdEMDY4RUE3NDczMzE4RUU3QkVDRkIKLToxMDI0NzAwMDk3NEMzQTk5Q0ZFOEM4MDFFOTc4MEU1MzlENTg5OEM3MTAKLToxMDI0ODAwMDM0MjdFMjdGMDFEM0E5N0MxREYwOUI3NDA1Q0U5NzZGQTIKLToxMDI0OTAwMDEwMUQwMERGNjFGQzZFN0RBMTdFMTNFMUUzNDE0RTFGNDQKLToxMDI0QTAwMEVDMUU2NTE3OUU1NzFDMzdFRUNENDQzRURCOUI2RThGQUUKLToxMDI0QjAwMDM3OThDRjM1MjJERUUwNDEzRjdGNEM5RkZBRjlFQjA4OTkKLToxMDI0QzAwMDFFMjEyN0NFNDNBRTM0RjBGREU0RkM3QTFBRkRERjgxRjUKLToxMDI0RDAwMEE0MjdFQjkwQ0YzQjQ0MUNGODlFNkMxRTNGNjkwRDczMDQKLToxMDI0RTAwMEI5OTJGQzA0ODZDRkMxRkUxN0FBMjc0MDVGRUUwOERCMzUKLToxMDI0RjAwMEZERjg5RDU4M0UwRjdERjk0MzkyMzM0RkYyNzUzNjg3QjQKLToxMDI1MDAwMDk5Mjk3RjdFMUNFNjc2ODA5QTQ1RjExNDEwQzVEN0YyOTIKLToxMDI1MTAwMEZEQzU5RkNGMjVGRDYxMUM1RjdCNENBMkZENEE1MzE5NzEKLToxMDI1MjAwMEM5MjEzNzhCQzQzODMxMTk2MjNENkNDMzIwN0JCRkJERDQKLToxMDI1MzAwMDY3RUI3NzYzOTBDRkZGNDE5MUZFMTM2QzU3NzIwQTI4QzcKLToxMDI1NDAwMDE0REFCOUFCNzgxQzdDQjY1NzdBNDk1MjEzRUQ4RTYwMTkKLToxMDI1NTAwMDFDMkE1NURDNUZDODUxNjgxNjczODBCREIyMjMwQkY2ODgKLToxMDI1NjAwMDAwRTNEQjRBQTAxRkNBRUJCNzFBQjRBMzY4QzMxRDY5MTYKLToxMDI1NzAwMEE4QTA2Nzk3NTI0RkYyQTNFQjNFMzlEQTA4NUQ1RjZENzIKLToxMDI1ODAwMDYwMURBNUEzN0E4RTVCQjMyNDc4RjQ4NDQ1MUVDRDJFRkUKLToxMDI1OTAwMDdCQzQwMzQyOTEzNUU1QjcxRDkyMzA1RUFGQjk1NTM3MjQKLToxMDI1QTAwMEY0RUZDODhDREM4M0YxN0FFMzc1OTlFRDAxNzgxN0NFRUUKLToxMDI1QjAwMEFGM0M3QUMyMjIxRjkyQzc4NUY5OTgwMTJDRkI1Njk4MkUKLToxMDI1QzAwMEM3MzE1RjBDQkE2M0QzMDA5RTE1ODYxNDQ1NzlCMEMyM0IKLToxMDI1RDAwMDM4RTZDNDc4RTVEMkI1Q0I5ODBFRkJFNDJBM0FBNkUwRkIKLToxMDI1RTAwMDdFOTYwNzdEQjRDRUQ5NDUzMjMzMkM3MEREN0ZBREQ2RDMKLToxMDI1RjAwMDExRTZGMTlEMzc2ODdGMDM3MTNCRUE0RDJDMDc5RDVBMjgKLToxMDI2MDAwMDk2QUYyMDExODczNENGMDUxRTBCRUYyNjdCQjQyMzlCOUEKLToxMDI2MTAwMEQxRkMxMTNGOEIzNkEyRkNEMjk2QjlCQUYxOUNDNTFGRjIKLToxMDI2MjAwMEExQjhFOUUxQjA0QUYzQUU2Q0RENDVGMEE0NEZGOTk4RUEKLToxMDI2MzAwMEUwMDFEQjM5RTZFOERGMTNERjI2MUZCQzJFRjBERTJDREQKLToxMDI2NDAwMEYwREUxQjlFM0YwOUYzNzg5RTU5OUU1REE2NjQyMjlFOTQKLToxMDI2NTAwMERGNTA1NDNBRTdFODhEQkZFNzk2REFGN0M3RURBRkIwNDEKLToxMDI2NjAwMDk1OUJCNERCMUQ0ODRGMjc1QkU1MjhFRTEzM0M1RkMxMEIKLToxMDI2NzAwMDdEM0IwREZCQzZGMjEyRTM3NDY0QjIxQUFCN0UzNkY3RjMKLToxMDI2ODAwMDY3NEFBOTRDNzA5OUZCQjM3NDNCREY5RkE1REI4Mzg0MzkKLToxMDI2OTAwMDk3QTVBNTk1QUVDMUZDNUNBRDFENjg5QkU5NDVDQjE4MUYKLToxMDI2QTAwMEUyQzVBNTFENTM1MDhFRjVCNjVGQzA2RkVFNTI4QkZEOEYKLToxMDI2QjAwMDc4MTFGMUYzN0VBNTE2QkJGNjlCOEVFRkMzN0M0MzY5QzAKLToxMDI2QzAwMEJFMjQzQkZCQUY3NUJFNjBEMjUzMjdDQUQ1ODI4NDVDNjMKLToxMDI2RDAwMDJEMkJFNUZBMjBGOTY5Q0E1NThCM0Q0OTcxNEQwQjFDMkMKLToxMDI2RTAwMENCRUIyRTAyMEU5MzRGOTA0RjUxNkU4NDc3NEFDRUVFNzUKLToxMDI2RjAwMDAyREM3RkUwRDczMTY4OUZGRDc2RjM2NTM5QzgzNzhDRkYKLToxMDI3MDAwMEU4QzE1MUNBRjlDNjM1NjU4RTBCRkRBNjk1Rjc3REFDQkIKLToxMDI3MTAwMEEwQkUwMjdDNEUyNzdDMEEzOTNDQjY5NDk5N0E2ODA2QTIKLToxMDI3MjAwMEQxNDUxREE3OEJGRkVFNzMxRDgwNjcwOUMxQjk4NEMzMTYKLToxMDI3MzAwMDc5QTk5RDNCN0RBNzNBNTI1RjRBRTc0MDIwOTdCQzE4OTQKLToxMDI3NDAwMDhGRjc4OUZENjc0Mzc5RENGQkMyQ0UzNzNGNjhCRDlEQkIKLToxMDI3NTAwMEExMUQzOEU3MEY5OTJBREE4MThCOEFGNzY4Nzk2QUNBNEUKLToxMDI3NjAwMEYzNEQ1NUIyOUQ2RkQ2ODYxOEY5MTU4Qzg1MDZCMzczNTcKLToxMDI3NzAwMDlFNkYyNjlGOUZGNjNDRUYzNDVFNkFDQTQ5RDhEREM5M0EKLToxMDI3ODAwMEU3OURDOUU3OUFBQzk3RjNDRjlFRTc5RDJGNTYxNTAzQjcKLToxMDI3OTAwMDlDMzMwMkIyNEY1NTEzRTc5OUFFMjkyN0RGNjVEN0Y0NzIKLToxMDI3QTAwMDNDRUZGQzEyRDYyM0YwOTlDMzJDRUJFRDFBQUFCNkM3NjYKLToxMDI3QjAwMDAwQkU5NkMxOUU0MDFCNkZDRUU0NkIxMzc4MDQzREUwRDMKLToxMDI3QzAwMDcxQzMzQzlCQ0EwMDdFQjQ5N0YzREE3RTMwOEZEOUYwOTgKLToxMDI3RDAwMEU4MjIzQzVDMjAxRUU5N0MxQkYxRDIyQTQ1Mzc2MjdGNEYKLToxMDI3RTAwMEE1REU0MDc5QkU5MkY5RDRGQjAzODlGRDhDOEY5NzdGREIKLToxMDI3RjAwMDg3ODZGMkY5MUY2QUJEQ0MwMUZDQkYzOUU3MzZCNjBDRkIKLToxMDI4MDAwMERBQTcxRjRFNjMzMkI0M0ZBQ0RFNDZGQjdERjhBMzRDMjMKLToxMDI4MTAwMDE1Q0Y3QkREN0VDQjNFMDg1QzJBMjY3QzcyNEYzRkU5REMKLToxMDI4MjAwMEFGQjA4RjFFNjRCOTFFRkJBOEI2OTVBMjlFM0RERkZEMUEKLToxMDI4MzAwMDdCQTQzODcyMDRGOUQ4MDNGQTVBMTk5Nzc4REYzNTk0RDMKLToxMDI4NDAwMEUzQjNGQjJBMTY2RDkzN0FFRTIzRTA1QjIzQkYzMzlGM0QKLToxMDI4NTAwMEVEREE0OEY1RjUwQ0UzMDM5QjI0QzZGMTlENDQxNzhFOTEKLToxMDI4NjAwMDhDMEQwNjlFNkJCQjk2N0JDOThGNkFBQUFGMjc3Q0JGNzcKLToxMDI4NzAwMDBFRjgzNjdDOUNCRkYwOUNFQTJDRkM2NUQyMDU5MzA2RDIKLToxMDI4ODAwMDlEM0Y1RDI0RUZGQkUxRDY1QUI2RjZEMkRFRDc1RUY4NjcKLToxMDI4OTAwMDczNzcyOURBM0RFN0JCQUY1NTkzQjU3RTY1MTNBQ0ZCODMKLToxMDI4QTAwMEFDNjU5NzBEQjRGMkFEMjFGMjUyMENEQTQ3NjMzRTYzOEEKLToxMDI4QjAwMDdCQjI3QkRBNTE5NzhCQkMxNDE4NkYzMEY2MUY1MkM2NkYKLToxMDI4QzAwMDQ0MUM1MDFCODJFNTc5QzM1OTdEQUFCQzE3RTc3NEVFRkUKLToxMDI4RDAwMEM3MkMwMTEzOUNFMjJBNDYzQURCMzMxRUJEQUM5REVGQTgKLToxMDI4RTAwMDBENDJCRkNFQjg0QUM1MzI1MzBGNDU5MUFFNkFGOTEyQjgKLToxMDI4RjAwMEQ4OTExREJCQkFCMDdFMzYyQ0Q2OTE0M0FGNTQ4NzA1MTQKLToxMDI5MDAwMDNGODFCMjNDMUFCNzc4RjVCMTU3NTRBQTBFRDBGODJFRDEKLToxMDI5MTAwMDEwRkVFOEE3MkVDMTk3OTQ0RkMyQTI3QjQ4MEVFODZDMjgKLToxMDI5MjAwMDJFQzhGQjFCRDY0OEVGNjFCQjFBMjM4M0ExNUY5QkM4NEYKLToxMDI5MzAwMEFCNzgzNDI5QUY4Mjk3NjdFNzhBN0FFM0RGREE2Q0U3MEUKLToxMDI5NDAwMDk4QzYwQjQ5RkFFREFEMzZBQjNGQzU4QzYzQTRERjZDN0UKLToxMDI5NTAwMEY2ODU0NTlGMUQ3OUU5RjdDQjBERUIzOUE2RjEzMThENTEKLToxMDI5NjAwMDdGNzQ4OTM5NUZEMTZFRkIzOUU2OTczNEJFMTlBNzY2NEIKLToxMDI5NzAwMEVDMzMyQTJGODk5NzNGMjdGRDZBQzY5MUZGNTQzNkIxNjEKLToxMDI5ODAwMDk2Qzc0REY1QjlCOEZGNzI1OEFBNDdGQjA4MTQ4QzI2QjQKLToxMDI5OTAwMDUxQkNDNkQ3ODZGRTM0RDhGRkYzQjBGRTZGN0Q5RDYwNzQKLToxMDI5QTAwMDg3REM1QzY2MzlGRkY4NUI4M0ZGQjgxOURGMzcwRTJGRDEKLToxMDI5QjAwMEQ3MEEyRTdENzgwMURGMEYxMEJFMkIzOEJFRkYwNkUwNTAKLToxMDI5QzAwMEZENTk1OThBNzM4MDRCMDhCRTk3MDhCRUY4MzlDNDdGRjkKLToxMDI5RDAwMDNCM0M2Rjk1NTlGQ0NGNkY3QUJFQzk5M0I1MTM0ODRGRjYKLToxMDI5RTAwMERGQzAzQTRFOTU1OUYyMEZDRUEzRkQ3RjUxN0I3MTVFNDkKLToxMDI5RjAwMDlBNUM3RjczQjk4RkM3QjFDNDM5RjFEQkYxNzNCQ0FDOUEKLToxMDJBMDAwMDVBMUNBRjNCNzFBRTQ3RTc1RTg5NzNDNEUxNTcwNDQ3NzgKLToxMDJBMTAwMDVBRTExRkJFMUJEQjlCRTc4ODUzQ0JGMzZBMjkyRkJBMTEKLToxMDJBMjAwMDk3NzM0QzBERUIxNTZCN0Y5NUZBQjcyNENERTcxMkY1MzQKLToxMDJBMzAwMEYzQ0JCRjU1NkJEOEYwNzMzNUI1RUY0ODZBNUYyM0Q2M0IKLToxMDJBNDAwMEI3QkM3Q0RDNkVDMzgyMEZGMDM4QTk3RDVDMkVCMTg5RTcKLToxMDJBNTAwMEI1RjY3M0M3MDlCNUQ2NzNDN0Q1RTUxMzc3OUJFN0ZGRkUKLToxMDJBNjAwMEU1ODgxRjcxNEVGQjNGMUQxRkMxNzJFMTZGOEFGMzcyMzMKLToxMDJBNzAwMDkzMEU4NzRERDI0MkU1MTMyRTNENzg2MUZGMTY5NjVCOEIKLToxMDJBODAwMEU4RkZBRjMwREY4QTcyNEJERUM1ODVGNjhGRjNBM0QwNDcKLToxMDJBOTAwMEZCNjZGRTA0RTBGNzE2NUNDN0NERDM1NUMyN0Y3MkJFNUQKLToxMDJBQTAwMDg0RTkyNzQ2QkE1OTE0RkQ5NkM5MkMyQUUzQjk0NDI0NkYKLToxMDJBQjAwMEEwMzM4QzgzQzZGOURBRDA2QTI5NUUxN0JGMUY1MUIxRTMKLToxMDJBQzAwMERCN0UzRkEyNzEzN0RBMTcwOUZERkQ1NEFEM0RDRkExODIKLToxMDJBRDAwMERDMDZGNzhFOTc5RjMyRDdERDU0NkVDOTY3RThFQkYxQkQKLToxMDJBRTAwMDU3NEZCN0UzMjU1RTE2Rjg1OTdDQ0I4Rjg3REFFRjVGMzcKLToxMDJBRjAwMDQ0NzZEMzM5NDZGQ0ZFQzUyMjlBMzc5MURGRjFFRERERUQKLToxMDJCMDAwMEY2RkM4RTM1NTQ0RUVDNTc0M0QyN0U3RENGMDZENzE3NTgKLToxMDJCMTAwMEU1MEQwNDk3NEJFNEJEQjk1NjQ4QkREQ0FGQjg5RUU0NjMKLToxMDJCMjAwMDgyNzlBRTBCNjU5QjVDQTBGMjM3MDBENzQxOTM4RTA0OEYKLToxMDJCMzAwMDlGQzZFMUVDOTE5RkI3NkMzN0M2OTlGQTdBN0U4QjVDQTEKLToxMDJCNDAwMDc4MDlFOUEyRUZGMUNFRUY3Nzk4NzhFRkVEN0VDN0Y1M0YKLToxMDJCNTAwMEFBNTlGRTZFNkQ1REMxRDc5RjE3RjNGRkNBNTNFNjFGREEKLToxMDJCNjAwMDVERUMzQUY4N0QxMTU3RjI3RDExQjZBRUQ2MkU3RkNFRDAKLToxMDJCNzAwMDFCQkVEM0E5RTVDRkY5RjVGRkIyNzdGOUYzMTc5NDNGNjAKLToxMDJCODAwMDRENUUwN0RENDdEMUZEMkNFNTdEOTQ5QkE3RjM3M0E5MkUKLToxMDJCOTAwMDM4N0Y4QUZCMjhGMzc2QTRGNkE3RkY3RTNBOEY1RjlCRTcKLToxMDJCQTAwMEYxRUVBMEVCRDQwQUVCNzlENzAwNTFFRjlCMUVDRjFCQkYKLToxMDJCQjAwMEYwNERDNzcxRDc3MkY4ODZBMTNDQzRGMzFFQTYzMDBENDQKLToxMDJCQzAwMDc4NkFGRUJDQTFCOTA4NUZEMzdGRjJGMTk4MUZGQ0U0REMKLToxMDJCRDAwMENDQzQ3ODkzQzU3OEU2M0MyRkNDQzlBQ0IxRTYzNUU0REIKLToxMDJCRTAwMDlBRjM0Qzk3Q0NGOEY0QjBFOTg4Q0YwRDdDMUQ3MkJGRjYKLToxMDJCRjAwMEQ1NzRDRjJCRUU1NzFCQUQyNEJGOUE5REE2OUZGREUwNDkKLToxMDJDMDAwMDZFOTI2NzcxMzlGNDYzQTI4QjA1NkU5M0ZFQTNCQkFEMjAKLToxMDJDMTAwMDcxRTNCMjVGRUNFNjdBMTU4QTc4OEU5N0U4Nzc1RjJEREMKLToxMDJDMjAwMEY5NzlFN0U4NTc2OEUyNzk5M0Q4MkYyM0JFNUZFMzExN0IKLToxMDJDMzAwMEVFNzNGNUI3RjhEMTMxMjkyN0UxNDczRjVFQTg0RDQxNDIKLToxMDJDNDAwMDNDODMzRjVENzIzRUUzMDA5RUMyQjQyRjZCRUNGRTg4NzYKLToxMDJDNTAwMEE1N0VGQTc0NUI1RUQyQTlENTY3Q0I0QjlBM0JGREVDOUYKLToxMDJDNjAwMDc5NDk3MzEzRjQzMDc3QkFDREFFMEY2NzRFQzAzOEM5QzcKLToxMDJDNzAwMDYwNDdDQTdCMTRCQUQ4RDc0NDdFRDc0RjY5QkY5QTRERjQKLToxMDJDODAwMEJFMTNFNTdCQjI3OUZEMERCRjc4QkM1NkMwN0ZFMzc0RkYKLToxMDJDOTAwMENCRjk4NTc5REVDMjBBMEVDNTMwQ0U2M0M5MkZEMjFDQUUKLToxMDJDQTAwMEQ2Qjg0RkY4OTgxM0M3NUJCQTVENEE5OTNGRDM4MzVGOTQKLToxMDJDQjAwMEI2OEFGMUI3QzdGN0YxRTZFOTNDMUVBRDYzRENGMTdBRkQKLToxMDJDQzAwMDczREM2RjM3RDJCODM1MkJGOEI4Qzk3QzczQTc4ODUzM0IKLToxMDJDRDAwMEREOTlBMEUzM0I2OTFDMkQ5RTZGQjMwRUNCOTgzMkUwQ0IKLToxMDJDRTAwMDFFOTcxOERGQkNERjEzNzQ0NjlFQzM3MzlENjY0MzUyNjQKLToxMDJDRjAwMDUxQkVFQTZCOTdEMUI5MjJBQjYwNkMxNEVDNTM3MEYwMDMKLToxMDJEMDAwMDg4RUQyODNBQ0NGOTg2NTdGMEZEODI1RjRCQjE5RDFGQzQKLToxMDJEMTAwMDI0QTQzMTE4RjNDNDk3RDFCOUYzQjUxQUNGNUI5OTU4RUQKLToxMDJEMjAwMEQ1MjgwRjU0MjlBRkE1MDVGN0FENzhGRUFFMjY1Q0Y2ODEKLToxMDJEMzAwMDc1NEI3RTI2QTdDQTY3RTk4OEU3QjNCMDM3NDYwRTAyMEYKLToxMDJENDAwMEZFMTZGMEUxQkQ5MDM1MzBDRkRCRjE3Qzk2QUFCMjNCQTgKLToxMDJENTAwMEFDRjkyQzkxQUY5N0NGNjJDNkZGMTY4NzAwQUY5NjdENzYKLToxMDJENjAwMENCQUVFMDc4Q0RBRUUwNzg0RDlDMDMzMzNBQkYxRENEQkQKLToxMDJENzAwMDZBNjY1Qzg1RjE2NUJDQjcwNUFGM0JDNDNEQjczM0I5NDYKLToxMDJEODAwMDJDOEFFN0ZGOEQ1M0QzMjk4RUQ3OURDREU4NUMxNTM2NkQKLToxMDJEOTAwMDI0QUJGQTVBQ0MyM0UxM0Y2OUEzNEEyOThFRUI4Njc1MEUKLToxMDJEQTAwMEUxM0FGMDVDMzY3NjI1MEMyRjJGRTkxNzRCNDFDRkFGNzcKLToxMDJEQjAwMDY2RTkyQ0UwQzVCOEJGQjE5OTAxREQ4NEY1N0JFOTdDRkIKLToxMDJEQzAwMDZFRjg4QThGRUI3MERFQTVCQTVCNDUxMkI4QkVDRTU3OUYKLToxMDJERDAwMDQ2Nzk1Q0FCMDNDRTNCMzAwRUU5OTc5OTg2RjFFQzJBM0QKLToxMDJERTAwMEU3RkJGQzlDQzY0Mzc4OUE1RENBQ0IyNjVFREM0Qzc5MzcKLToxMDJERjAwMERGOEExNzI1QTlCQ0Y2RERDNjJEMDcyREVENURCMUI0MjAKLToxMDJFMDAwMDRDM0MxNzdDNjlCQUM4MDcxMkY3OEE5OEVDMjUzQTM4MDcKLToxMDJFMTAwMEUzNzc0NEYxMUNBQTQzNjEwNzE0ODBBMzU2OTdFOUZDQTkKLToxMDJFMjAwMDdEQ0ZGNjVCNUZDMUZCNjM0QkZENEFDMDAxRUIwQ0FGOEUKLToxMDJFMzAwMDk1MjhGRkVCN0ExRkM3RDM2NzBEQzY5NjgzNjBDM0E2OUMKLToxMDJFNDAwMDBEMUU0MUU3MzA2NzdDMUU4QUM2MzcyRkQ5NDM3MTdCNDAKLToxMDJFNTAwMEEwOTcwRTA1RjM3QUQ2QzkwQ0NGQkRDREZDQTczOTgyNTkKLToxMDJFNjAwMDVFNEMzQ0E2MkRGQjk0RjA3MjA2Q0ZDMzExMkY0NUQ5QzIKLToxMDJFNzAwMDk0MDczNTBCRjBBMUZBRTg5QzdGMTNFMjI5OURENUM3OTIKLToxMDJFODAwMDA2QzBCQzBCRkQwRTE2QjNDNEExNjFGREI2M0MzMjE4RTIKLToxMDJFOTAwMDlCRjJDRTE0N0E2M0FCMjdGQ0E0QUYwQkYzN0MzNEI5NUUKLToxMDJFQTAwMDJBODZGQjdBQTY4OEVGMkI5NDAzNDhFRkFDOTREM0E5MkIKLToxMDJFQjAwMDg5RkZGNDI0M0E3NTI3RTU4NzI1RDM2OTMyRkU0RjIzMkQKLToxMDJFQzAwMERFMkRGN0I5RjYyODJDMTA0MzdBRUI5NEM5QkVFODZFRDQKLToxMDJFRDAwMDU1QjIyOEVGQUFENTQxNzk1NzhDNDVFOTFFRDMxRUQ2QTUKLToxMDJFRTAwMDNGRDA4MjcyMzMyNkQxMzlDMTc1MDI2RjI2REUxOUFCMEQKLToxMDJFRjAwMERGQkMxQ0UzRENGNTU5MDE4Q0ZGMzM0N0ZENjZDQzhGNEEKLToxMDJGMDAwMEJBM0U5QTQxRjk3NzhCNTgzQkU1NDFERDgwMUUzMkNDQzEKLToxMDJGMTAwMDdCMjNGM0I5QjBCQzlDMDVFODI5QjEwMkJBNUZCMjUwN0IKLToxMDJGMjAwMDk3ODgyRjc0MTZBQkJFMEFGMDE3QkJEQzk5NkRDREFCM0EKLToxMDJGMzAwMEVBMzVBRjA5NTY3RUQyNzIxRUQxQkY0MkM4NEI4RkVFMjIKLToxMDJGNDAwMEU3Nzk5RUJBQjhGN0EzNTE3RTUwNzY1OUE5NDc0RjIxMjkKLToxMDJGNTAwMDZGQTcxNUVCODMyQjA2MjZDQThBQUY5RUQxRjk3NDcxMzEKLToxMDJGNjAwMDY0NDhDNTg0NDRGRjQ3MEJCNTVDNkMzN0FFNDgxQjhBODgKLToxMDJGNzAwMENGQkQ2OEU3ODEzRTA4MUYxQUY1MDhFQTgzQzY0MjREQjcKLToxMDJGODAwMEM1RjZDOUYyRUE3OEVGRjk3N0IxQjU0MDc3NUQyOEFGQjkKLToxMDJGOTAwMDI4OEZCMDgwRjhCMEFGRjJFRjBBMkI3QUU0REY0REE4QUIKLToxMDJGQTAwMEIwRTRERjFENzVGMjdCNjU5NDhCM0M5OUY1QkM5RkI2NTAKLToxMDJGQjAwMEY2M0FBQTM3RUZBNzI1REY0QjYzMEZGMjMyMkNDODY4MjkKLToxMDJGQzAwMDE5OEJGNzc3RUI2OUREMjZERTkzRjFDM0M0QkRCNEM1NzkKLToxMDJGRDAwMEZFOTdCQkE0NkJGQTIwNkZDRDA3QzZEREUwQjNEMTg3QTcKLToxMDJGRTAwMEMxRUYyRjU3REZEQTk1NDM3OTg0MEFFNTExMzZFN0YxMEYKLToxMDJGRjAwMEZCQ0I5QkIwMDkyNjAyOERFNEY2RTA5NzQyNUY2REM5REEKLToxMDMwMDAwMEFFRjcwN0EwN0U4QjkzRTdDM0IwN0M5RENEMUI5MzE4RDIKLToxMDMwMTAwMEY3Q0IwQUQ5M0MxNzVBOEE3NDAwNzYxRkQ5NEJBNkJENDQKLToxMDMwMjAwMDZBQjZBQjE1N0E2MTk1RDAwQjhGMTc0NjU2MTJGRTEzMTAKLToxMDMwMzAwMEY5RERBQkIwM0ZGM0M2QTIwRUYzREM4RUZGRDAzOTkwQzIKLToxMDMwNDAwMDY5M0YxQzE5NTI0RkY5MzQ2RTJEQjVCRDcwNkI0NTVDNEMKLToxMDMwNTAwMDlGREY0QUUzQjc5QUZBNUNCQjBEQ0JEMzA2RjhFNjIzQjEKLToxMDMwNjAwMDlGQjlDMjMyNkI0MzNEMzZGQjY2OTJCQjRGNjFERTI4OEYKLToxMDMwNzAwMEQ4MzQxM0Y1QzZGMDIwRDhFRjg2MEE3MURFNTQ5NzhENDgKLToxMDMwODAwMEU4NjIxRDFBQ0YyNzhEOTVENEZCNTFERjZEMTk5Q0ZBOEMKLToxMDMwOTAwMERFRjc2MUIxQ0VGMUMzNEVDOTM4RUU5NjY1OEM2RDFDN0EKLToxMDMwQTAwMDhCRjgzMzI4OEZDRDU4MDBCMjA0Q0FFMEVFMUZDNDczRUEKLToxMDMwQjAwMDE5MEZEQTAxQzVBODE3Nzk3QjVGMURCNDgxN0Q2QzE3RTQKLToxMDMwQzAwMEY4MEY4RTA2RkE0MUZCNkI5NDNEMUZDOTdDOUFFRDkyNzYKLToxMDMwRDAwMEYzQUQ0MDk0NjdFMkJBOTNGM0RDQ0M3Q0FCMkVDNUM4NjkKLToxMDMwRTAwMDBDQTQ4MDdGNzZEOTFBMEZFNTZCRTUyRUY3QTA5RTZDQjUKLToxMDMwRjAwMEQ2QzIzNDVFNzJERURCOTY1QzM2MTRFMTRBQ0U2QjMzQTgKLToxMDMxMDAwMEYzQTZDQzdDMjk3M0RDN0ZBQUIwRTdCNUI5RkQ1QzZGNzAKLToxMDMxMTAwMEMxOTNGMjY0N0U1QUExRjJFRjUyNjhGNkZDMzYzM0JGRDcKLToxMDMxMjAwMDA2REI1MzdFNEQyRUUzRjkzNUZFN0E4NkZEREM1MEM2NzQKLToxMDMxMzAwMEY2MTE5MTdGOTY5QzU3MDU3MkU4Njc0NDU3M0RFQzIzNDIKLToxMDMxNDAwMDQ2NzY0NjczQjFDODFCNjBEQUU2NjU2ODFGRTFGOTZEMjMKLToxMDMxNTAwMDIwODU3RDA1MDIwMUY1QTAwQkY0MTNENjJCRjJFQTBBQjcKLToxMDMxNjAwMDRDRTVGOUJBNzZENEI0RTJDOENCNDg5NzJFN0Y1Q0NFNTIKLToxMDMxNzAwMDFFMjI3ODEzNzJGNjk3NTgwRjcyRjY1NzU2Mzk3QkU2NkYKLToxMDMxODAwMDkwRjEwOEU2NkY2RTkxMzgxRDZFMDFCQzNGOTE4MjNFNTIKLToxMDMxOTAwMDhFNTQ0ODgyOEY1M0QzQ0YxRjA0QkQzNjE2NDZERUMyRUQKLToxMDMxQTAwMDc5QjQxQzdFQkZFMzQyRURDQ0U2ODQ5REM5RjFEODQ3REIKLToxMDMxQjAwMDc2MjZFMEUzNzc4NDBGMjFBNzAxMUZCRjQ3Mzg5M0YxRkMKLToxMDMxQzAwMDAwM0Y5QjUwNkU1OEYyNEMzRkM1N0VCREU1OTkyNkY3RjcKLToxMDMxRDAwMEJGRDg3QkMyMTJDODBERkUxRDA5RUQyRjA4NTdENTQ0N0MKLToxMDMxRTAwMDk1RUI1RDIxOEYxM0Y3NkQyRjRFNUU3NzNBNDA4RTAyN0YKLToxMDMxRjAwMDNDNjgxMzU4REJGQjJBQjk5QzJCOThBQ0ZCMkE0OTJGNUYKLToxMDMyMDAwMEYzRkJCRURCODJGQ0JFMkY4QjY5QTRGNzhGNjRFQTM1MkIKLToxMDMyMTAwMEM4QTcyQzdGREMzOUU2NkIxNEY5QjQ3QTVEODRFNEZDMzIKLToxMDMyMjAwMERDNzNCNERGNDhFRDBCMjY4QkY1RTZGNzI3RkRCMTRERDcKLToxMDMyMzAwMEQyRUU0Qjk3MTNFNTczQURDRjUzQTk4REFBNDQ3RjUzQkMKLToxMDMyNDAwMDhGRDBGNzEyQjZFNDNCNTQwMzk2NzZDRjQ0RkQ1QkI4QkIKLToxMDMyNTAwMEFFMkRGOTFCNjlGRjVBODBFMDI0OTA5QkIzMUNBN0VFQUEKLToxMDMyNjAwMDFFMjE1MTNFRjBEMzUyM0Y3ODdBQzA2MzRCNDFENzQ1N0YKLToxMDMyNzAwMDAyM0Y2MEM1NTIzRDdCNTdGMzVCRTMxQ0I1OTVGMUI4NDcKLToxMDMyODAwMDhBODg0QkZDRjMyM0Q2N0I0QzczMkI3RkIyMDJFM0YxOEQKLToxMDMyOTAwMEE2MUVDMzc4QzkxMzI5RTgyMjI0QzY5MUREQjdEQUY0NDMKLToxMDMyQTAwMDY0NzJCQkQyNEE3RTBGNjQ1RUE1MzgxRjEwN0E2RjgxQUMKLToxMDMyQjAwMDlCRkI1MUVDMzBDMDY3RDFBQjA1OTM0MzE1OTU1QzZFMTkKLToxMDMyQzAwMDE5OTI0NTFGOUFGQThGNkEyQ0VGREQ3RTdFRkY4NDc1NzYKLToxMDMyRDAwMERBQzczMUQ3Qjk0MkQwQTkzOTJGRDBFQkZDNEExRUJGOEIKLToxMDMyRTAwMDU4NTA2OUE5NUYyMDMzMUVFRkU4QjBFMzBCRTA1OTQ0NjIKLToxMDMyRjAwMEYwMzA3NkEyMTc3ODFFNDkwOTRGOTcxRDlFMTU3MUJBQjYKLToxMDMzMDAwMEQ1NTZFMDc4QTA5NzU3RTI3MzZCMDhFODJFMDU3RUM3ODQKLToxMDMzMTAwMDRDMDhERDg0RjUwQTMzQjY4RUM4M0JBQkRENUE4RkVCMjMKLToxMDMzMjAwMDMwQ0IxNkJCRjVCNjRBQkIzQ0JEQkQ5MkNCRDMzNTk1NzEKLToxMDMzMzAwMDI0NDc1MkNGREI1MEM5RTU2MjlGN0QzRkUwM0NGOUZENTkKLToxMDMzNDAwMDJFRkMzNTA1REZCNDc0M0Y5OTcxMERCMDlBREI2RERDNEUKLToxMDMzNTAwMDRFRkM1OTMwRUUxQ0ZDQzVGOUY5QzY2MUY1QTRFNzlFOTgKLToxMDMzNjAwMDEzNzZDODczNEVBNjYwN0UwREYwNTgyMDU1REU0RkFDMjQKLToxMDMzNzAwMEQyQjQzQkEyNDMxMDJGQ0ZGNDYyNzdDNERCRjU5MjVGNDcKLToxMDMzODAwMDdGMjVEQjk5NzEzMUY2NDdDQjk0MjMxOTY0N0Y5QzZFQkUKLToxMDMzOTAwMENCNDAzREZGQ0M4OTUwNEFGQkUzQjlEQzlENDM1MkQ5NzkKLToxMDMzQTAwMDFGRkI3QUIxM0Y5RUFFMTRGNkM3MDcyRUIyMjc0QTNFRTYKLToxMDMzQjAwMEU0RjY0N0M5ODczQjY1QjQyM0ZFQkQ1MkE1RjUxNDlGQ0IKLToxMDMzQzAwMEU4OTA3NTgwQkIwNEVEMEYxODY3OUZCMDNGQjAzREQ5MDIKLToxMDMzRDAwMDFGQTc3N0NBMDg1N0YxODcxREQ0QUYwNENBNjg3RjE0QTYKLToxMDMzRTAwMEY3NjI3RjAwMTQzMkUyRTFFOTkyOTYzNzcxRkY5MkQ3REIKLToxMDMzRjAwMDVCMzU1RUZGODU5NTZFOEJCQTNCMjhDRTYzRjY2QkM5NTUKLToxMDM0MDAwMERGOThBMUQzN0VEQkU5Njc1QTMxOTdCQjg5N0U5Q0RFQ0EKLToxMDM0MTAwMDkzREJGNTQ2Njc2NTcyRDVENjZFNThENzM2OTZCOTkzNjUKLToxMDM0MjAwMEYyMzI5NUZBODdCMTZDMTgwQUU1NkJFMTA3MzY5MDZFQjcKLToxMDM0MzAwMEVFOUMwRDMwNjQ2M0JCRkE0N0JCNTFCRjE4NkUxRjdFMTQKLToxMDM0NDAwMERGRTBCM0Y0QTVEQ0RGNTlDMzdDQ0VDOTA5Nzk0NDRCNzYKLToxMDM0NTAwMDA3RDA4QzkwMThDRkU1RjEzNTgxQkRGNEEzOEMyQ0MyMzgKLToxMDM0NjAwMEUzNUE5RjE5RDdEOTU5MzEwMkZBREY3OUU1NDhCQUZGRjMKLToxMDM0NzAwMDEzQkExNzA2ODJGMkU0NEU5OUVBQ0QzOEQwMkI4MzE5OUQKLToxMDM0ODAwMEU1RTkwM0ZGQ0VBQTg2RjEyNzhBRjE0MURGNjlCNzQzNTgKLToxMDM0OTAwMEZCMDVDMjFFMkI5N0JERDRGRUFFN0NERTdFQjI3MUFBQTgKLToxMDM0QTAwMDBFQ0JDNUREMkUxNUVGOTkzMTc5ODM3QzBCQzY2RkQxMUMKLToxMDM0QjAwMDJFODFGNjc3M0QxQjI5RjM0MDdERkExMTgwMDRDNzdCRUUKLToxMDM0QzAwMEQ3NDU3MTBDMERGRTIxRkY0RUU4NkMyNzdDNjY5QzcwODEKLToxMDM0RDAwMEQ5RTIxQkU5MjBFMTYyMTZGQkM1OTU1NDY2RjI5MjdFQTMKLToxMDM0RTAwMEE5RTQ5M0Y5RUMxMTBGOUEyMUUyMTFEN0IwQkZGQjBBQkUKLToxMDM0RjAwMEVDQUQzMzZDQzM1NjVDQTM3QjU0RThDNUREQUM2NzdGOTEKLToxMDM1MDAwMDMzREVGMEZCRjE5QTc3MDZFQ0UzNDhBNzRFRkVDQkJFMjQKLToxMDM1MTAwMDBBQzAzNUVDRDNCRUQ2RDY5OUQ3MjBERTc3MkExNERGODEKLToxMDM1MjAwMDNEQkEzRTgzRjY2OUZGQkRDQTJFOEMyQjFEMDUzRUU1RDQKLToxMDM1MzAwMEYxRjNCNTJCOTE1RUY3Njc5QTY1MTZDM0Y4RENGRUY4RDgKLToxMDM1NDAwMEY3MEEwN0YwN0E1MTU2NjcwNDNFNDBERjc4RkY0MEQxMTIKLToxMDM1NTAwMERFNjhFNUY1NjY5OUREQjUxMkYzMzdGNjBGRTZFNTE5OTUKLToxMDM1NjAwMDMzN0VCQTA3REI2M0M2MzdGOUQ3NkI4RjdCNTNDOUNGN0UKLToxMDM1NzAwMDUxMzM1NURCM0Q4RjU5NDVCNzcyM0EzRTQ3M0Y5MEY3N0YKLToxMDM1ODAwMEQ3Q0MxOEQ4QjM1RjVBMzVGN0IzRjYyRjAxMTBDNzIyM0UKLToxMDM1OTAwMDlFRjRDMjE5MzBGRUJFQUVEQkI2OEU4MUE5QzY0RjU5NkQKLToxMDM1QTAwMERGNDE3Mjc0NDBGNzlBNTQ3MjNGMzQ4M0RCQ0JCMTkyOUYKLToxMDM1QjAwMDI4Rjk1REUwQ0I3M0JGOTcyOTA3MzE4Rjc1MTY1M0M3ODQKLToxMDM1QzAwMEExN0ZCRjYzRUEzM0ZGNzEwRENDRjM2QUYxQTg3MTcyN0EKLToxMDM1RDAwMDBBQkVCRTYxQzY4OEE0NzVCRDJFMkY0N0I5RjREMUZCQzMKLToxMDM1RTAwMEYzNTNDOTgxRTY0QUJEQzJCRTFFN0U0RURBQjQ1MzIxRjIKLToxMDM1RjAwMEZDRDdGREM3Mjc4RjYwRkU0M0FDNjQyN0M1RjFGNkZERkQKLToxMDM2MDAwMEMxQzFEMDZGRDkzNzg2REJGRjc4NTM0RkNFRTkxM0Y4QUQKLToxMDM2MTAwMDVBMjdBNkEwM0I4MDZGNDkyQUY4NDZDRjY0M0M0Rjc0RDYKLToxMDM2MjAwMEJDQjYxNEVCOTNFMTU1MzFERTBERjA4Mjk5MTU0MDM5QUIKLToxMDM2MzAwMDkyRjZEQkVGNzc2MDVDNzM1RkI3ODM4MjJCNjc0RUI0RTMKLToxMDM2NDAwMEM5NDg4MjJENUQyMzRBRDE2QzlENTY3NTRDNDY5MjJBRkQKLToxMDM2NTAwMEYxRERCQjE5OEY4MEY1MERCMjhERkYyNjc2QTVEQkNBOTMKLToxMDM2NjAwMDM3RDQwRkIwOTUxN0Q3MEQ0OUYwMjNDM0ZCNDA1N0Q4NzcKLToxMDM2NzAwMENBNkVGRkQ1QjY3MjkwMTVEQUNBRjNBQjI2REJDNjJCM0QKLToxMDM2ODAwMEYzODU2REU1RTlGRTk5QjZGNjk1RUEzQzVCNzk2NkZFNTEKLToxMDM2OTAwMDYyNUJGQkVBNDBBREFEM0U1MjMwNTZDMUFCN0M0MDk3MTkKLToxMDM2QTAwMENEODhBRjhDNEU4REY4N0M0QkQ3NkQzRUE0OEI1ODQ5OUUKLToxMDM2QjAwMDg0RkNFQTIzOTkxREI5MThCNzdFQTU5N0VGQ0I3NUNDOEEKLToxMDM2QzAwMDkwODU3RTA3RDMwOEU1MjRFOEYzOEREOTg5RjZDMTExRUEKLToxMDM2RDAwMEREQjZCOEZDQ0Y2NzcwN0RGRDg0QTBFRjczREY4N0UzQjQKLToxMDM2RTAwMEZBRjk3Q0VGQzEyNUVCRTFEOTU3REQ0NjcyQTk2NUJFMzkKLToxMDM2RjAwMDFDQzU3QjU1NERGOTZGNzhGMUZFRDgyQkYzNzkzQ0ExQjEKLToxMDM3MDAwMDI1MTdENkU5QTVCQzBDRTJBRjE3MTc1QzM3MTRDRkQ3NDUKLToxMDM3MTAwMEQyRjNGNTAxMjhGRjRERkQxRENFOEZCMkUzNTA5RkVFOTEKLToxMDM3MjAwMDhCQjIyQkYwOUUxOTk0NkJDNTdEQjM3MDAxN0YzRjVBMEQKLToxMDM3MzAwMEJDNUY4NTRGRDBEQkU1MTY3QzI1RUJFM0EwNjdFQzRCNDcKLToxMDM3NDAwMEUwMzZCMEE5N0ZGMkQxNzdGQ0U2MTdGMEI4NEZFOUU5OEYKLToxMDM3NTAwMDY4MjlERUFCOUVBOUJENzA5MDVGOUZFNkYyRTdENTkyMjcKLToxMDM3NjAwMERGRTVGNEEyQjdGRkREQ0UwRkFGMTMzRkVDM0IzMUY3M0YKLToxMDM3NzAwMEFDRjJGRjM3MEQzQ0NFRkU1NDgzODdDNTYwN0RFRjM2M0IKLToxMDM3ODAwMEY4RThGOTlGMEQ3RTdBRkY3QTgzNEFDRkU2ODY3QzdBNDUKLToxMDM3OTAwMEM2MUEwMjU0RkY2NjQzMTEzRDBGMzY2OEY0N0NCOUExODYKLToxMDM3QTAwMDgyOUU4NzFBMjJENEVFNTcwRDM1RjQzQ0RDQTBEM0ZCNjEKLToxMDM3QjAwMEY3Njc3MEJFQkM1NEUwRDFGMkNEQjg0MkU0NDU4NzQ0MEYKLToxMDM3QzAwMDc4OUQ4RjI5QkI5MzNFRDQ2NEFCN0MwN0JDRkU3NkM2NDQKLToxMDM3RDAwMDg0OUU3OEJENTgzRDEyMkI2OTFGMTJFMTdBMkIyNTFGNUMKLToxMDM3RTAwMDM5Njc5QUY3NkVCOTlEM0M0QjI3OTkxRjg3Q0Y4NTcxMzIKLToxMDM3RjAwMEJBOUM0NDlDQ0U4RDI2NEQ3RjgyRjMyRjdEMDlFNzdFQjcKLToxMDM4MDAwMDExQzdEOTlGQ0Q2QTlFRTBGRUQ0MjY4OUY0OEQ2RjJDMTYKLToxMDM4MTAwMDk3RTdGNzQ3NDIyNENGMDc4RTREMkRDRkYzN0FDOEYzQjEKLToxMDM4MjAwMDY1QTRCN0Q4MjE4QzlGNjI3QTExMEFFMzk1Mzg3RkVBQTQKLToxMDM4MzAwMEI4ODhEMTJGRUZBQzc4QTA3MzRCMTMwRjk2RkQxQTNFQ0EKLToxMDM4NDAwMDMzMDUxRjlDMEIwRkM5RUI5RjU2QUM4RDlFMzk4MURGNTIKLToxMDM4NTAwMDQ3NzFGNkVGQTk0NzQ2Nzc3RkExNjE2Q0VBRTkwMjBFNEUKLToxMDM4NjAwMEVGOEVGN0U3RjY0MzdCQzU4RDQxMjlGMkRGQzE3MDJCNjAKLToxMDM4NzAwMEMyRkQ2NjY2NUVDMTlFQkFEQzlFRTNGQ0E2QTQ5REY0MTIKLToxMDM4ODAwMEZBNUQ3MTNCRTcwMUIyNjM5MkRCQzFDRjQxQzIwM0VBNEIKLToxMDM4OTAwMDJEMEIxRTUyQzg4MTY5MzM1M0QwNDE5OUZDNkNGNzQ2RjkKLToxMDM4QTAwMEU4QkZCRjlCNTFEQzRDNDU5QjFBRTA3RjQ2RTFERjZCRDQKLToxMDM4QjAwMEQ4RkZBMTgzRjA3Q0M2MjM5MTdDNzRBRkJCREQ4MzMxM0MKLToxMDM4QzAwMEVFQTdCRkM3REIxOUQ1MTJERDYzQzgzOEIwNEY0NTNCNDMKLToxMDM4RDAwMDM1RDhBRDBGQzBFRjhFMTVDNTJBOURGODlERDBEMDk0NzgKLToxMDM4RTAwMEIxODEzNDBCMUQ4NDE0QkI5RTQ0NEIzNUFFNzcyODI4MjAKLToxMDM4RjAwMEQ2M0ZBOTdDNzlBMkJEOENGQjNGMjI1MUNFQTNGQkQ3M0EKLToxMDM5MDAwMDhCNzA1RDczNEZENTMzQjU0MEM0NTlCRDI5RjFCNDVBOUUKLToxMDM5MTAwMEIyQzRERDE0MTZEODNBMzE4RkVDQ0U4Mzk3RTNGOUNEREIKLToxMDM5MjAwMDI4MTY5NTg5QUUwQ0YyQkY0RDc4NjU2Rjg0RUVFNzk5NDUKLToxMDM5MzAwMDdFRkFFNzkyQjYwQUU3RUIzMTdFOUQ0NkU3NkZDQ0UxNkYKLToxMDM5NDAwMEEwRjNCN0Y1ODVGQTJEMzNFOTlDM0VFOTdDQzZGN0YyODIKLToxMDM5NTAwMDlGMjVEMDY5NUIxRDJDODZGNjg1OTFFNTIyRkMyNUVGMUQKLToxMDM5NjAwMEQ3QjhBMkNBREJCMUJGRkY2QkZCRjUzQjI1RUJGNzAyNzMKLToxMDM5NzAwMDQ2QUJEM0M4OUYzQTAzRkUxNERFNDc2OTUyRjgzRDI5OEYKLToxMDM5ODAwMEUzRERDQ0U4MUUwMjkyRTVBM0RENzZBNzdDNzUwMEY3QTcKLToxMDM5OTAwMEZGNDcxOUZGNDhGRUQxNUE1ODI0RkE1RkRCODUxQ0JFNDkKLToxMDM5QTAwMDA3RTUzMDNDQjczQkI5QkZENURDRThGNkI1RTVBMEJGQ0QKLToxMDM5QjAwMDk1NjUzODQwNzE3RDk2MzYyQ0NBNjA5REFEMzNCOTNFMTEKLToxMDM5QzAwMDc3QjMxQkZBNDVDNjlDMDU3RUUxOUYzOEUzRkI5RUVCNkYKLToxMDM5RDAwMDIzN0Y0Mzk0QkQyRURERjEwOUZBNzU0N0U0MjhDNkRENDcKLToxMDM5RTAwMEI2OEQ3REIwNjYzOUUyNkZBQzg3OUY3RjJBMzE3NTBFNDgKLToxMDM5RjAwMDFBNjgzRTgzRTU1OEVFRjFDQjRDMzk4OTcxREFBRDYwMzcKLToxMDNBMDAwMENDRTAzOUVGRERFMjFFNkU2NkMwNjFCMzc3RkExNUQ5RkUKLToxMDNBMTAwMEVEQjU5RkY0MTFEQzJFOTQ0NEU4QjdFNkI4QTI5ODhGNzgKLToxMDNBMjAwMEEzQTJEQzAyQjhCN0ZBMURDNDVGOUI1NDJFMUYzNjc5REYKLToxMDNBMzAwMDM1OEYyRkM1RkU2RTQxN0NCQjdCOUY1RkNFREJFNEMzMjEKLToxMDNBNDAwMEI4Rjc0RUFGODNGODc3QUJBQTZDQ0I4M0YyNTYyRjM3MUIKLToxMDNBNTAwMDZBOUI1NDQ3NDVBQUZDQUVFRTk5RENCRTgyMjY2OTk0NjcKLToxMDNBNjAwMDBGMTU5QzRCRjY0RTZGRjNCNDg4N0QzN0NCRTkwNUJBNDIKLToxMDNBNzAwMDQ2N0NBNjA2MjJCODlFMjY2RjhFODRGQjYyRDZFRjlGRjgKLToxMDNBODAwMDI5MDk3REM1RTNDQURCODRGRDk0OUVERjFFQzNCODRFQzEKLToxMDNBOTAwMEYzRTA1NTg1ODgyRTBGRDg0MzI3RTFCREE3QTA5REVDMDQKLToxMDNBQTAwMDI3RUZFNTJFM0QxNUJDMjdDNDc4REI5QzgxMEFDNEU3Q0YKLToxMDNBQjAwMEI2NEMwNzMzMDA3RkRCRjI3QTM5REYxMkZBQjI0OTFEQzgKLToxMDNBQzAwMDE3MjFGQTA2N0M4QzkyN0FCNjdCNUVFQ0YzNjZFNzRFQTEKLToxMDNBRDAwMDNGREU1QkRCMzY2QTIxRTU4NTZEMUJDQUU1RjNFQUMzOTEKLToxMDNBRTAwMEJGREVEMzg4RkU4M0ZBNURGNjA5RjI0RDhFNDJGQkE2NTcKLToxMDNBRjAwMEIyODAwN0Y1NUNCMzRGRjE2MTVDNjA3Q0NFMUQ5RUEwODcKLToxMDNCMDAwMDQ1Q0UyNUYzODk3M0YwREMxQUJDNEY3OEE2MjgzRDgwOUEKLToxMDNCMTAwMDQ4MkY5MzBGRDM3NzQ1OUEwMzIwNzdGMzMwNkZBOURFQjAKLToxMDNCMjAwMDY3RkQ1RTAwRDhERDlGMjFGRjlGOEI0RTU1QTY3QjEwNjEKLToxMDNCMzAwMEJGMzAzRUQxNTE2RkZCOTcwQzhGMTcyNUQzQjhCM0I0NkMKLToxMDNCNDAwMENGRDY2QjUyN0RDNzY0NTQxNUM3QUI0OTM3Q0U3M0QwRkYKLToxMDNCNTAwMENEQjlFMEI3RTlDNURDODQ1RTFDNTg3NUQ5MkEzQzdGMzUKLToxMDNCNjAwMEJFOUJGMUZBQ0IwRUZGOEVGQ0Y0RTRGMkQ3RTVDRjI2MzQKLToxMDNCNzAwMDY1MjdDOUVEQTY5MTJFQTJBN0U0RkVEQkYyMzgzQ0VGNDMKLToxMDNCODAwMENDM0MyOUUyMDQzMUUyREY2QzBGOEYzN0RENTNENDNGQTgKLToxMDNCOTAwMDJEOTU1QzJFMUJBRjhGQTlCMkQ4MUJEOUE1RURBNDZGQjQKLToxMDNCQTAwMDVENTU4Q0M3NkJENTg4NkYyNDhDRTNFRDk0ODE0NjAxRkQKLToxMDNCQjAwMERGOEUyRkZFNzQ0Q0JENzgzQzJBM0JFQjU5MDRDNkNCRkMKLToxMDNCQzAwMEVBOTQ4OTNFRjFFNzBCOTA4M0ZEODQxQ0RDMzJGQzhGODQKLToxMDNCRDAwMDBDRjM0Nzc2NUNBMTA0NzhERUNBNDc4MUIzRTk5M0FDNjUKLToxMDNCRTAwMDI5RjY3OEQyODVDNjhCQUFBQTQ0MUU0MzFBNEJFMzc5REMKLToxMDNCRjAwMDQzNTUyMTg1RjI3NTFDNUNDRjZBRjBERjIwMjEyMjI0MTkKLToxMDNDMDAwMEIxRkY4M0M0NTE5NDhBQUY3ODlDMkM2NzA5MjNCOTE5RkEKLToxMDNDMTAwMENGNUZDMUVGQ0ZFMDM4M0EyMzdCMDQyRkQwNjJCQkNCMUMKLToxMDNDMjAwMDU3NzM3QjJCOTc3NTRCNzgxRTM4MUNCMzc4NjRBNDc3MzkKLToxMDNDMzAwMDJFM0ZDRkIwNUMwN0U1RUZDMDM0OTg3RjIyMTkwRUQyM0IKLToxMDNDNDAwMDhCM0YxQzdFNTQwQUMyREI3QjhBNTc4RDQ1N0MyNEFGOTgKLToxMDNDNTAwMDYzNjU5NTg4N0JDNUQ3NzE3NjNDOTg3MEY2MzU5RDlBREIKLToxMDNDNjAwMEZBQkJDOUMzRjVCMTA2OEEzQjBEOERFNUE0Rjg2Nzk5ODcKLToxMDNDNzAwMEJDODFFQjYzQzNFRDQzN0REREE0RDQzRjhFNjVFODFEQkQKLToxMDNDODAwMEExNzg2OTUyRkNGM0IzMzQxRTFGOTVFRTYwM0VBOTk4RUIKLToxMDNDOTAwMEUyOUZGOUI4NEY2QjU5N0EwMEUzOTNGRDE0REQ4M0Y1ODkKLToxMDNDQTAwMDE5MjMxNUZBQkIwQzYwNzc0RkM0RjM5Njg0NUZBRTdBODQKLToxMDNDQjAwMDc5QkVEQzVBQ0EyQjdDMUVGNTFBQjQzQkYwQzVEOUU1OTcKLToxMDNDQzAwMEQxOTNFN0QwNkIyRDlEMjNCRDE0NUZGN0Q0NjZBMDNGNDEKLToxMDNDRDAwMEZFOTQ3RkM0NjFGNDZGQ0U3ODc4QkU5N0Q5RUU0MEQyNUYKLToxMDNDRTAwMEY3NEY5QTg1OUMzQjVDMjVFMkU4Njk5RkM5RDg3RjlBOEIKLToxMDNDRjAwMDVGNTUzMEFGMkVFNDE5NEJGMkJENDk0QTdENUVEMDU5NzUKLToxMDNEMDAwMEM1RjVDMTY4RjUzNTRFNjdBQkNERUY5NkFEMjZGOUZGMjkKLToxMDNEMTAwMDRFQTZBMERGM0E3RDMxQzU5NTg1QkRDNzM0NERGNTVEMTIKLToxMDNEMjAwMDlCQjBGMzRDN0RFOTU3N0NDNkNEMzg4RUM4QjdFQUIxNUQKLToxMDNEMzAwMENFMDMzNzMxRkMxRTBCRjM1QkUyQjMyMzcwRkU3RUYxNDIKLToxMDNENDAwMDNDM0JFMkU3MjRGQkFFMzc3Q0I2MDhGRkI4QzkxRkEyQjQKLToxMDNENTAwMDNDOEQzMzI4QjM1MjlDOUY5ODRGQjA1MzBGQTI5QzlBMkUKLToxMDNENjAwMEQwNjE5NzJGMTlGOTc2RjlCMkQ1NTE0Rjc5NUZDNkQ1NDEKLToxMDNENzAwMENDODc3OTIxQUMyQUUwQjdEQUM5NjBBRkZFQjI4QUNFMkYKLToxMDNEODAwMDc3RUQ3NkU3NERENThDN0Y2NzNCNUI1NTMwNEUxM0Y2NkMKLToxMDNEOTAwMDA0MTk5RTRCMjhCOTNBQzNGRDcwRjkwMzY3REQ4RkI2NEQKLToxMDNEQTAwMDJBQUVGNzlCRjM5NzQ3RDBBRkQ5MzFGNTNCODQ5N0YxMTMKLToxMDNEQjAwMDE1M0MwRkQ1NkMwN0ZBRjI5RDJBOEI3RjYzRTYyOTlDOTAKLToxMDNEQzAwMEY3Rjc5NDdDMEVDQTVGM0NERjM4NTJDQjk0OTVGQzdCQUUKLToxMDNERDAwMDRBRkVFNUY0M0RBNUE3M0NGQzdCNEEwNzMyRjUwQ0I0NEUKLToxMDNERTAwMEJGMkVGNDdCNEFDQkFCMzlCRDg2M0NERjdFNzFEQTA4NEYKLToxMDNERjAwMDBCOUVCQTc0Q0ExRjcxRjk0RkQxRjlDRDM0OTE2RjkyRUQKLToxMDNFMDAwMDFDMkY3MkJCRUJFOUJDMkQ1NjUyQkZEODFBMkYzNkYxQ0UKLToxMDNFMTAwMEQ3MjZGNEY2NkY0QTc0Q0EwQkVBRURFRjQxOThFRDEwMUQKLToxMDNFMjAwMDYzQjgyRUI3ODg4NzZFMjk1OTRGRjg5RjVCOTE0REYxODMKLToxMDNFMzAwMDI4NDVDNEEzNUNBNzc0Q0EwMzhFOEVENzMzQUEyREY4NzUKLToxMDNFNDAwMDc3RTcxQUE0RUYzMkZFOTFGMUZCRUU5RkYzRkJFRTE5MzgKLToxMDNFNTAwMDFCNTkwOEVGQjc4N0JFMTg0N0U3NTRBMTU4MUFGMUQ5ODQKLToxMDNFNjAwMEQ0RDMwMUZBNUU3NTk5RkNEOEQ2MTE1MDdGQTA1M0ExMjYKLToxMDNFNzAwMEVGQzgxRjk4OUE5RTgzN0FFREQzNEU2RURGNjYxQ0I4MEEKLToxMDNFODAwMEVBRjBERjQxQjlBNEIzMTY2MzAyMjA3NzAwOTZGRTNENDUKLToxMDNFOTAwMEQ3MzFGNUI0RTM2QkY5OTkxM0QwQ0ZCNDlDOTc5OEUzN0QKLToxMDNFQTAwMEZFQkNFMTEwRDFDNzkzMEQxREY0RENENzEwQTM2NzRCMDYKLToxMDNFQjAwMDQzMTczRDhCMTQyRDhDRUIyOUVBQTBCMzRCMzZFOTA0NTQKLToxMDNFQzAwMEQ0NUJFMDI4N0ExN0ZBNUJFOEMxMzc1RTFGNUY0REZDRDAKLToxMDNFRDAwMEQ3NjE2Qjk3OTFERjY1NkIwNzdFNkUxMUI2NTNGQzFDNDMKLToxMDNFRTAwMDlGMkVGQ0NFMTg4QzNGQkI4QjZEOTZENEZGNTFGMjZBOEYKLToxMDNFRjAwMDUxNzVERkM4QUIxQkFCMDc5RTRENUVGMUYzRDQ1MDk3RjUKLToxMDNGMDAwMEY4QUU1ODEyM0ZGRTU3OTVDQUJGOEY2NEYyQTUzODU3RDYKLToxMDNGMTAwMDM1RjVGNDU2RkMxNUY0Njk1M0Q2NzdCODdDOEJFNzZGMEEKLToxMDNGMjAwMEYwRkI4QUU2NzdFOUVGNzhFNUU0NUVDQ0VCNjk3RTVCNEYKLToxMDNGMzAwMEQ0MUI5RkVGQzVGM0RDQzRERkNERjhFMzJBQkM3N0YyRDYKLToxMDNGNDAwMDAyM0FCNzYwODdCRUZCQ0FCM0FCRjBGQjQxMEI2QkIyNjIKLToxMDNGNTAwMDE1MERFMDBCRTMwMTZDNzZFMkJFOEM5OUQ3OTg4Q0I3MTcKLToxMDNGNjAwMERGNTQzQkNDRUZEMDUxMUNCRTc5MDRGRkZCMDZDOUVERkEKLToxMDNGNzAwMDVFQUMxNjdFOUI2QUZGQkIxRkU5QkREQzEzN0FBRTlBNkUKLToxMDNGODAwMENCOEI1RjBBQkM2RDc1RjEzQzg1REVFRTgzN0NCRkZBOUUKLToxMDNGOTAwMEVDRjc0MURFMTRGNUU3QkFGRkYxMTNEMUVFMDkzMUVGOEEKLToxMDNGQTAwMEIwNDk5MUZCNTFGRTk4N0Y5N0UzNDlGMTNFRkVGNzM4MDcKLToxMDNGQjAwMEZDMkNFNTM4NkQ0MkVFNUUzRUNCMjdGNjUzQTNFRjlGMTcKLToxMDNGQzAwMEMxNzg4RjEwN0Q4OEJGOUY2MEQ2NEZGQTMwNUVGRjRGNUIKLToxMDNGRDAwMDU0MUZGRjNCMDkzQUM1ODlDQ0ZCNzg2REQ1MUQ3QjFCNkYKLToxMDNGRTAwMDJEREZGRjZBOEU3RjU3OTFFNzM5RkQ1MUUwMkRGOTY5OEEKLToxMDNGRjAwMERFNDc4OTdGM0Y4QTFEREVBQjU5QkUxRkY1NDBGNTlCMkEKLToxMDQwMDAwMDI3QzVGN0FEOUVBNkY1OEE3QjM4REI3MEJEMDNFOUZEQjkKLToxMDQwMTAwMDdFN0E5RkY0M0Q4MUE3NUUzOUI4NTc3QzQ3RjE3OTgyNUIKLToxMDQwMjAwMEJCM0VGOTNCNURFRkVFQjU3RTFGNjE1QkY1M0JBQjQ0RkMKLToxMDQwMzAwMEZCOTc2ODNDRjE1REFGMTQ3NDIxRThGNkU4NUVCQzFGQTUKLToxMDQwNDAwMDdBMUVFM0JENDZFMzg5RUY3MkFEQUJFNjdDRDQxQjNEM0YKLToxMDQwNTAwMDQzRkIyMzA0NkZGQzdCQzVCNTFFRDQyQjg5N0JGRjQ3MzQKLToxMDQwNjAwMDA4M0ZFNzgxQUZBMzM0QUY2RUNFQ0JGMTI1QkIzOUJGOUMKLToxMDQwNzAwMDk4Rjk2NDI2NURCMDU5N0MzRjM2NTZDN0YzNzQ0RjEyRTkKLToxMDQwODAwMDFDMkJGQTBDMEZBNzA4OUVBNDdCNDhFNzVBQzdFMzg1QjAKLToxMDQwOTAwMDkxQ0YwODBFN0YzQzFGRjk0RjM0Q0VENzg0QzdCQzNGNjkKLToxMDQwQTAwMDk2Q0MxRkZENjY0OTY2MUVCNDZCMTZDRTkzMUJGRjZFNDEKLToxMDQwQjAwMEE3N0I1NjFGQ0MwQkUzNjZEMzM4ODlFRjgxRjY5Rjk1MUIKLToxMDQwQzAwMDVBRkU1Q0QwQjg0QzNEQkZGQzEyQjNGQ0ZGMDAxNUM4RDMKLToxMDQwRDAwMDRFQTAwMDcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODEKLToxMDQwRTAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRjMxNzYwNjBGODUxMDAKLToxMDQwRjAwMDhGQzA5QzY4N0M1QUUzQkY0QzBDMENGQUNDMEMwQzk3MUMKLToxMDQxMDAwMEQ4MTgxODlDMzkxOTE4ODRGOEM4MzNFNzIyOUFCRTdCNEUKLToxMDQxMTAwMDQwQjM2NkYwMzAzMDJDNjM2NTYwRDgwOUM0N0E1Q0Q4NEYKLToxMDQxMjAwMEY1RDkwODIyRDg0NzgxN0U1RjAxQzQxN0U5MUMwNkEzOTAKLToxMDQxMzAwMDc4RjBFMDFBMTEwNjg2NDlBMjA4QkU5RTE4QUE3Q0FENDYKLToxMDQxNDAwMDA4ODJBRDIzNDU5OTVENEU0MEZEMDA4ODUwQkVDQjgwNkUKLToxMDQxNTAwMDAzMDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwQUEKLToxMDQxNjAwMDAwMEJENTdEMEQ3ODU0RDVCNUU4M0EzMzY3Q0VGQzI2RTMKLToxMDQxNzAwMDM5NDkwNjk4ODQxMDRGNDJDMEE4NDAwNzA4MEExNjc1QUUKLToxMDQxODAwMDEyQzE0NkU1QjY2M0RBNkE2Q0E5MURBQzUyN0Y2MUI0MTAKLToxMDQxOTAwMDU2Qjk1NkNDNDkwOEM5MjQ4NDEwMTAxNUE5Q0FFMDJGNzUKLToxMDQxQTAwMDVBNkQ1MzQ1NkI5RkU1REUwOTUwOEFCREJFMjc3QUQ1MEYKLToxMDQxQjAwMEFBRDVERTU4MjlBRDU2NkRCQzk2OTJCRTg3NzBGNzVBQzcKLToxMDQxQzAwMDdCOUZDQzM5MjczMzkzQTE0QURCODc1RkJCQjNDRkZFRkMKLToxMDQxRDAwMDVCN0JGREVEQjVENzVFN0I4RkUyNzA0MUY1MDkwMDQ3NTMKLToxMDQxRTAwMEYxREY1OTAwRjdGQjAxNjA1QzNBOURGOUJEMkY1RkZEREYKLToxMDQxRjAwMDc4MURGQkRCRUYwRTNGQzg5Mjk5QkY5ODVGMTE5Qjk2MkQKLToxMDQyMDAwMEFFM0YwNzI0QUFEN0YwOEJDNTdGMDQ1NkVGREZDMUE5QzQKLToxMDQyMTAwMEI5RDlBNzlEMDU0M0ZFMzBDQkVCOTIxM0IwOUQxQkVBQTUKLToxMDQyMjAwMDRCRkYyNUM4Q0E4NzFERTE2RTk2NEYxRDc2MDQ4MEY1QTkKLToxMDQyMzAwMDMzMDM5Q0Q4MDk2OEEwMDZBMkQzRDk3N0Y5Q0I0NTYwOEYKLToxMDQyNDAwMEVBREY5RTlFQjk0OTg2NTQyOUMwQUU5NTIwNDc1OUJERTQKLToxMDQyNTAwMEQ1MDVBNzJEMUUwQzAwQkNEMDkyRkFDQkZFMjkwMDkxRUIKLToxMDQyNjAwMEQ0NDlCMkM2RkFEOUREQjI5N0YyRkZENkIyRUYyRkZCMkUKLToxMDQyNzAwMDVEMDAzMTI4QTY3MTFBRTY3RjI0MkY2MUVENzZCOUEwODIKLToxMDQyODAwMEI5OUZCNTZCODg0OEFFMjVBNkYxNjI2MjNFQkJCQ0EyNjEKLToxMDQyOTAwMDVDQUQ5NzMzOTYxN0IwNzJGNkJEMjE3ODQxQzZGMjE4MUYKLToxMDQyQTAwMDlCMTFENTJCMTZGRDBDMEYzQUIxOUUwNjQzN0U5QUU3NjMKLToxMDQyQjAwMEUxQTY4Q0YzOUMyMERBMTlGOUJBNDEzRURGOUQ2RjFEMEYKLToxMDQyQzAwMDNBMUZFOTkwODJBMkE4MUJEM0MzRDU2RjIyQkUwNzNDMzgKLToxMDQyRDAwMDkyMDY1NTBDQkY4M0U3MTE3RTUzODg1RkQ2QzVBMUI3MDAKLToxMDQyRTAwMDM5QkU3NzdERTIwOEI3MzI3QzM3NzhENDQwOThFNTQxMTMKLToxMDQyRjAwMDY2RjQ2MEU1MEQwMTg4MTA1QzMyNEIxOTFDRTcwQkI4QzEKLToxMDQzMDAwMDJGMTY2OTEzQTY0NDE3OERFODMyRTA2MTc0MDk4QzBERUQKLToxMDQzMTAwMEVGNTk5QjE0ODJENzk4RTcwMENFMzM4Rjc2MDY1REQ5OEMKLToxMDQzMjAwMEQ3NDBCNDgwQjU4M0NDN0MzMDFBM0Y2Q0JDRDlDNzBFNjMKLToxMDQzMzAwMEE3ODFEN0U4RkM4MUJGRUNGNzAwRkQzQkNBRkVCNzUwNzAKLToxMDQzNDAwMDdERUUyRkZCNkJEM0Y5QjM4NkY3NTlGMjhDQTNDMTczQzMKLToxMDQzNTAwMDJBODMxN0ZGRDQzMDk1RkYzQzY4OTQ1N0YxNzIxQzI3Q0QKLToxMDQzNjAwMEQxQTJGREI5ODZGMTVGNUYwQkZDQjk4NkYxNUY2RjhCNUYKLToxMDQzNzAwMDg3RjIzRDJEMkFFNUJCNUI0Mjk0NEZDOEFDMDlBMzYzOEQKLToxMDQzODAwMEEyMDc5MjNBNkI1RjFDNjFGNTRERTMxNUNENjVFRDRDQ0MKLToxMDQzOTAwMEYwMTU4NDU1NEJERTVGMUJCMkQ0Rjc2QTlBQTUzQ0ExOTkKLToxMDQzQTAwMDVERUY0ODMyQkE3NzRENzMyNDlEMTJDMkMxNjRFNDQ0NzQKLToxMDQzQjAwMDg0QzM0MzI5MDNGN0Q1MTA5QjRGMEQ2RjAyNkI1RERBNjEKLToxMDQzQzAwMEFGQUExMTlFMTc5REQwQzZGMjg1NUFDNDcxMjlDQjU3NEEKLToxMDQzRDAwMDg2OUM5MDBDQjNGMTBCODcwMDU4N0Y4OTk1MDAxQjU4ODEKLToxMDQzRTAwMDdGM0QzMzRGNzU1Q0NBRjJEREYzRENBQTUzMDU0OEIyNUEKLToxMDQzRjAwMEZFMTM2RUQ2Q0Y5MTk0QjYwQUZCOTlBRTg0QjExRkU4MzYKLToxMDQ0MDAwMDkzN0Y4Qjc4RjJCMEZGOEU1NjAzNENENjk0QjcxRDg1MDAKLToxMDQ0MTAwMDAwNTUzQUZCNkU5RTlGNUIwRkExNUMxN0NEQjU3RTlGNEEKLToxMDQ0MjAwMEFDMkRCRDE2NThGREM5NjBGQTVFOTVBNkE3MzFBRTkxQjgKLToxMDQ0MzAwMEI3OEY2NzFGRTc4NDE1QjZGRTZERkQ1NjZBODNGNUVBRjAKLToxMDQ0NDAwMEI0NzRCRjI3QzA1MEFCMUFGODY3RUUzN0QyMjAyMTlENTUKLToxMDQ0NTAwMEMyQTAyNTY3MUUzRkI4MDMyQjNFMkVERTNGM0I4REU3RjMKLToxMDQ0NjAwMDFFMTdENzgzNzY3OTFCMDQwN0U5MEY5MEM3NDE4NEMxRDMKLToxMDQ0NzAwMEE1Njk4RTY0MzdFQkE3QkJDQTQxRkNBM0FEODYyNEVBQ0QKLToxMDQ0ODAwMEFEQjU5M0Y2QzUzMURGNURBNTY4NkQyQzVGNTVCQkE3NTMKLToxMDQ0OTAwMDU5OUEwMUIwNjY5MjRBN0NEN0JEQzMwRDZENjEwRTQ3MzMKLToxMDQ0QTAwMDkwRjE2OUE1QzFBNzQ3MDZFQkFCOTEwRjI1MDg2RjYwOTYKLToxMDQ0QjAwMEU1NTVEQTgxNTZBQ0FGQkVFQUQzNUM3MzQ3Q0YwRjU2RjEKLToxMDQ0QzAwMEYwRjk1MzlFQ0Q3RjA4RkY5ODMzQkFERjVGQ0U1MTIyQkIKLToxMDQ0RDAwMDUxRTQ1QjFEOTI2RTA2NEY1NzRENUJBM0NFQzZCOTU3OTQKLToxMDQ0RTAwMDk3MDFFNUE3N0I2NUZGNkI4OEU3QzQxNDBFQUY3RERFRkYKLToxMDQ0RjAwMDk1OUFCMjA0RjkxQUNDRTNCM0YxMkE2QjJFQkMxQUU3RjEKLToxMDQ1MDAwMDY1ODdDM0QwMTdERjZGNTE0OTFFRUY2QUE5QTVGNERFOTYKLToxMDQ1MTAwMDE2QjUxRkY1QzQ1RDlGMzgzM0UyRjc3Qzg5RUJFN0NEMTQKLToxMDQ1MjAwMEFFQTgwM0UxRDNFNzM5OTIwRjkyRkU4OTZEQkU5MkU1MDIKLToxMDQ1MzAwMEVGRjlFRUY4NTlCODBFNUMzRkNGNDFGQUU1Q0YzRDFDREMKLToxMDQ1NDAwMERGRjc0ODdEMTcwM0Q1NTczNEFBNkY5M0ZGN0JFNTQ4MDMKLToxMDQ1NTAwMERCQjc1OEZEN0I0MkE1QTAzMzc5QUU3NEVEM0JGNzQ0NDEKLToxMDQ1NjAwMEVDNkY0NUY1NEM5REY1NzdDRjBEMUJERUM2RjY5NUYzNDgKLToxMDQ1NzAwMEE2NkE0RUQ2N0VGMkRDMDM2RkIyNDUxQ0VFM0EzMjE4QzQKLToxMDQ1ODAwMDhBMDYzMENGRTVCQTcyQzVGOEZFMUFDNjI3MTNCNUJFNDMKLToxMDQ1OTAwMEVCNzBGQ0NBQjk4QTk2QUM0QUYzNjUwNTg0Njk5QzEzMzIKLToxMDQ1QTAwMDlBRkQ5MDUyQzdFNkNGOEE2QjcyRjNFN0YxRDMwMzdGOEYKLToxMDQ1QjAwMDFGQjkyQTQ3QjkyQTREQzNCRDU5RDgyNzc2QkEyRjkyQjkKLToxMDQ1QzAwMDFDQzQyRjIzNzIzNTk3Q0JENTEzQTc3MzNBMUI3Mjc1NzIKLToxMDQ1RDAwMEQ3QTRCRTc3OEI1OEJFRjcxQjlDNEZFRDdDNUUzNUY3OUEKLToxMDQ1RTAwMDQwM0REMkI1ODdDOTRGNDkwOEEwQ0NBRDdEMkNCMTdDRTgKLToxMDQ1RjAwMEVGMTIyMTg3NzMwRjQ4NEI1OUZCM0ZCREUyRDMwMEU1MTMKLToxMDQ2MDAwMDY5NzE2NjdEOUQ4RDlGRDNBOTc1REM3QjZGNzAzNDQ0ODUKLToxMDQ2MTAwMDU5QkQ1RjVFM0VGNThGNkUxQzZGQjFBMkExOUNGNUNBQkQKLToxMDQ2MjAwMEI1MzRCRUY2NUQ0NUQzNERGNEFDNUNDQ0U0ODlGMTU3QUUKLToxMDQ2MzAwMEU1MEQ0MjdFNkM3MjM1RDZGODg5OTYyNEJDQzNFNDY4RDkKLToxMDQ2NDAwMDdENEIwODIyOEM2RUVCNUEzNDkyQUZCNTQyQ0VEMDE2MTkKLToxMDQ2NTAwMDg1MzI5NjE3NzIwNkI1QjMyODlGQ0RGRTA0NjgyNUI5M0EKLToxMDQ2NjAwMEYzNjgyOTg4MzFGQUFDNjc3RDQzMzk3RTRGNDUyMkYzRTAKLToxMDQ2NzAwMDAxNEE1MDU3OUQ0RUUwQTQxQzZDNkQ1RjM3NTIwRTExREQKLToxMDQ2ODAwMEM2RjREMDJCODlCQ0ZFNDczREMyQzY1M0MzM0NGRjZDNjkKLToxMDQ2OTAwMEVCMUZGNTU1NEMwOEQ3N0I3OTdFODc1NDVCQUZDRjM3M0UKLToxMDQ2QTAwMEI3REY0M0ZEMUJGNTU5M0VENTUwNjNFQTBGRkI5RjY2MEMKLToxMDQ2QjAwMDg2Qzc1MThGRjU4REZFNUU2RjJEQUZEN0Q5RjhFQjQ0Q0QKLToxMDQ2QzAwMDVFNjkyQkU2RjlFM0RDN0Y4RkQ0MUY2MjRDMEY2QjZDQzUKLToxMDQ2RDAwMEZERjQ0ODAyNEZGQTdGNDQyMjgxRjQzODc3NEFFRjQ2Q0UKLToxMDQ2RTAwMDc0NEJGOTFGMjI4ODI3QTNGQzA3QURGRkExRUJBQ0ZFOUEKLToxMDQ2RjAwMDQ3MTBCRDRCNjI3NDk4QjUyMDU2MEU4Q0VFRkVDNjE0NjIKLToxMDQ3MDAwMEEwMjlCNURFODZFRkY0RkM1RUE0RjkwNUE2RjFGQzdERDgKLToxMDQ3MTAwMEFEOUY0NDEwREY0NkY5RDM1MjQxMkJFMjFCRjkyNjMwRkUKLToxMDQ3MjAwMDFFMjA0NDQyMDJCMEU5RTczRDU3M0U4RjdGRDc5NjAwRjYKLToxMDQ3MzAwMENDNjNFMzY4N0RBMEIxM0UxQzM1NzEwOUY3MURBMUM1QUUKLToxMDQ3NDAwMEYyMDE4QjNDMDhCRTYzRjAzRDJFQjE3NEQ2RkNEOEQ3ODUKLToxMDQ3NTAwMDcwMjlDQzAwOUY2RTg2Q0YxODdGMkM3ODBEMzhCMkYzNkQKLToxMDQ3NjAwMDI3MUZERkNFNDcwREU3Q0M3RDYxM0U5MzJGRkYzRTU3REQKLToxMDQ3NzAwMEQ4QURFMTNDNTQwOUY1NzgwOTAyQzVGNDVBRjE5MTVERDAKLToxMDQ3ODAwMDQ0Mjc5MEZCNDM2ODQ3REJGQjJENTk1MDBFNDlEMzNDMkYKLToxMDQ3OTAwMDNGNkI3QURFODU3OThFQjc5N0NENzQ2NUY5NTdDRDc4MDIKLToxMDQ3QTAwMDdDMUNFQkNEMTlDRDc3QzZGQ0JDMzgzRjQwM0I5OENEODcKLToxMDQ3QjAwMEFGQ0UzQ0JGMjc5QjcxN0VEOUYwNjY5RkRGM0E2RjVGMUIKLToxMDQ3QzAwMDczMzQ4M0ZFM0REMzIxRjZCQjY3Q0VGRDEyRjZDRkM2MTAKLToxMDQ3RDAwMDAzRDQ1RjVFNkQ4OEY0QUY4QUUzQjFBRDY2RDE5MTVEQkQKLToxMDQ3RTAwMENEQjhCNUNEMzY5RTNBOUY4RDU3N0JGQ0YwMzkxNjFGNUMKLToxMDQ3RjAwMDA3OThGRUQyNTgzRDQ3MzgzNzFGREJFNUQ5OThCNzFGRDkKLToxMDQ4MDAwMEU3MkQyMTFGRjFGRDgwN0RERTAwOEM4RjBBRkVGRjlEQ0MKLToxMDQ4MTAwMEY3QzczMkE3RTcwREFDN0Y5RENGOEJDQkM3M0Y2ODVFNTQKLToxMDQ4MjAwMDFGM0Y1RjRBRjI4QUYwMzgzOTNGODczMkYxRDczQjkyMTcKLToxMDQ4MzAwMDY2RDlFN0RBRjkzQURCQkNGRTUxN0MzQTdBNUVCOUYxMjcKLToxMDQ4NDAwMDdDQkNGNTUwQkVGQUI1RUQ1NTFGRTFCMUY3MzJCRTRGNTUKLToxMDQ4NTAwMEU4RERCQjkwRkMwRUJEQ0Y5RjNEMDFFMTI4NEM5QzAyRTIKLToxMDQ4NjAwMDExNjZGRjRFQzVGRTU5N0ZCRDg2N0RCMUE5NkU4Q0ZFRDcKLToxMDQ4NzAwMEI5N0Q3MTY3MEJGNEI3NEYwMTc4QUE3MDkwRjZDMzBDM0QKLToxMDQ4ODAwMDRFNkFCRjk5RDk5RjQ5QTZFMEVBNUVCQ0MxQkI4NDhENDAKLToxMDQ4OTAwMEI3Rjk4QTBENUVGNDJCRjUwQTdCQjFFRUM1MDdENjlGRkEKLToxMDQ4QTAwMEMzRjAzOUUxRjI5Mjk5NEVDNjBBQkQ1RUUzRkJGNkU3MkEKLToxMDQ4QjAwMEE2QjJFRjlCMkUxM0RGODVGRjhBN0Q3RjExRUI4NzQ0MjUKLToxMDQ4QzAwMEZENkM3MDk1Mjk4M0IxMjhDOTBCODNDQjg0N0ZBM0ZDMzEKLToxMDQ4RDAwMDQ5MDdCNzRCOUY0MDNCRUI0NERDQ0Y3MDNCQUJDQ0Q3OTkKLToxMDQ4RTAwMEI3MDRFOTVCQjg1OUQxRUU5MzQ2RjdGQkJGODUzRUJERUYKLToxMDQ4RjAwMDEzRUQzNDM2REZCQjJFRUYyODQ3QkI2QUU3RDY1Mzc3N0MKLToxMDQ5MDAwMDA1MTBBRUNCODBGNEY5ODlDOTg3MDY1QzFBOEVBRjRCQ0YKLToxMDQ5MTAwMDg4RTcyNzVDNjBEODU5QjRDRTk3NUY2NkQwQjU0OTNBMkUKLToxMDQ5MjAwMEJCODZEQTA5M0I4QkU3QkYzRkIyQUU3RTlERUM5NjhBMzEKLToxMDQ5MzAwMDE4Q0YzRkRERjZEREZBNTVCMkE5NUNGRjc2N0RBNDIyRTMKLToxMDQ5NDAwMDVERkU0MkRCQjVGNUI4RUVDRUYyQzRERTk4Q0Y0ODM3NTcKLToxMDQ5NTAwMDhCRTlCRDU1MEM4RTU5QjJFNjhDMjNCRjZDMEE2NkI0NDgKLToxMDQ5NjAwMDE3QjczREU3Njk0RTMyRkM2RURCM0E3NUYyRTUxOUQ2QjIKLToxMDQ5NzAwMDExNDY0NUEyQjM5MTlGQkRENzJBNjc0RjIwRkVEQzg4MjAKLToxMDQ5ODAwMDQ3NkVCN0Y2MzBGNDYyRkQ1MDRDNUI4NUY4OUNCRDE3NUUKLToxMDQ5OTAwMEMyQjgxRkNEQTZFRkIyRDEzMTc0Qjc1NURGQ0Q5MkFERkQKLToxMDQ5QTAwMEYzM0E1RUYzRjkwODU0QkVERjE2RkRCMzc1RkQyNTA3MzMKLToxMDQ5QjAwMDlGOEYxM0U1NjhCNkNDRTVGRkQzQ0UyNzg1NzhFMjc2RTYKLToxMDQ5QzAwMEM0NkYzMkY1RkZGNzlBRUZBQzAwMUIyN0Y4RDk4RjEzQUQKLToxMDQ5RDAwMEIyOEQ5M0FENUZCQkJFRDIxQjQwOTJEMTFGNUYwRTYxMDMKLToxMDQ5RTAwMDg0QTc3ODQxMUNEMDhGRUYwQ0VDMEJFOUNDREU5M0Q1N0IKLToxMDQ5RjAwMDQxNEE1REMxQTE5MENFRjRBRTEyRDJDQTMwNzU1Nzg0M0YKLToxMDRBMDAwMENCRjAzQkRCMUYwOUY5RTg2QzI1QkQzQTkyRUY2QTQ1MTQKLToxMDRBMTAwMDNEQkEwRUYzMjQ3RjZCQTg3Q0MzNDg3RTJERTU2RjlCQzcKLToxMDRBMjAwMEM0RTVGMzA0RTdFRDAzQTg4N0FCNTFEOTMwQjhENjBFM0YKLToxMDRBMzAwMEJDREU4QzdFODBEMkREODEzMDlBMUFBNTgxMzBBMDFFMkEKLToxMDRBNDAwMDM2Q0E3QjA3REUwRDc5RDA4RURCMUQwMDJGRTNGNzEyMEYKLToxMDRBNTAwMDM1MDJFNkY2RUIwNkZFMUE1MjU5Nzk0MDk0MDc4MjUxNjgKLToxMDRBNjAwMDRCRjk4NjgxOTNDQTQyMEM0NTNFNTFFRTBCQzVBOEZDMUEKLToxMDRBNzAwMEI2ODE3OTY1MUFEQTMxQkIwMzJBN0VGNzU3QzQ2OURDM0YKLToxMDRBODAwMEIzN0Y3MThEODNGQ0IxOEIxQzQ5Qjc0OTVGMjUxNkNENkYKLToxMDRBOTAwMDIyRkRCRTU4OEE5REU0NjRGNEE4RkY0NThGMDdFRDg3ODgKLToxMDRBQTAwMEM0RUU2OTEzRjAzQkQ5M0NFNDRGOTJGRjJGRUU0NzMxM0YKLToxMDRBQjAwMDdCOTRFQ0EwODA3QUUwMTQ0MTJGNjc5QTFFM0Q3ODVFQ0IKLToxMDRBQzAwMDQxN0U2MDdFNEU5MTEwRTcxNDdBNDMyQTg1RTNFQjg1QTAKLToxMDRBRDAwMDlDNEU4Q0EzRDNGRTY3NkFCRjM3RURBRkE2RkMzRTRCNUUKLToxMDRBRTAwMEJFNDA0RDQ2NzAxRjJEMDc5OTdFNjBFREZEMTEzRDgyNDEKLToxMDRBRjAwMDc0NTcyQTc4REUxOTA4QTc1MDdGNkNGQTA2ODQxMTZDNjcKLToxMDRCMDAwMDk5RTExM0VCQUY5QkM3RjIxQUQyM0Y0QUVEQkJFNkYwMzcKLToxMDRCMTAwMEJDMTI4QUU5OTg0RkNDRTQ3OTc3NDUzQzg1RjkzNTI3NzIKLToxMDRCMjAwMEYxRkMyNjgzQ0VGMDg4OTUwRkUwNEY0NEY3QUU5MUJDQTAKLToxMDRCMzAwMEI3MERDQjEzMDZERjgwQkYwRENCRDc5Q0MxRjU2Q0I5ODkKLToxMDRCNDAwMDVDQkYxM0YxQkY2OUEwQUI2QzI5RUJCRjA4Rjk4MUY1MUQKLToxMDRCNTAwMDVGQjQzODRDRjQzMkU4NzJBN0U2QTBGNUQ2QTBDQjlEM0UKLToxMDRCNjAwMERBMkMzQTI3OTg1OUM0MzA0MTEzRDI4ODFFMzM0RkI4RjMKLToxMDRCNzAwMERFQTFFMjc5QzcyOThFRTQ4MzEyOUU0RkY1NzgwNzU5QUEKLToxMDRCODAwMEJENERCNUIzQThCQzUyNzYwQUZGMDBGNzg3M0YyOEZDOUQKLToxMDRCOTAwMDAxRDVDQ0JBNDBCQkUzNDFCMTVFRUZCQzdENkExMUI2MzIKLToxMDRCQTAwMERCQjlGOTdGMTFCRENGNzQxNjUzQkIzNUI1RkNGQ0U2RkMKLToxMDRCQjAwMDE5QjY0RUEzOUZFRUU5MTYwRkE1M0Y2MkZEQzU5OEJFM0MKLToxMDRCQzAwMDdFQkNDNTQzRTkwRjVBNTQ0QTFGNjE3QTFDRDMxRTU2NTYKLToxMDRCRDAwMDlFNDJCRjAzMkI0RkIxN0NGRkEwQTMxMUU1RkZGNjE2NDkKLToxMDRCRTAwMDY2OUFCMUY2QjdCNTc4M0U5NkE3QTBCRjQyQTVGQ0JBQzMKLToxMDRCRjAwMDk2MTBFNUJGRUQ2ODVBRTFFNEZFMTRGRjM0MzZBRkE3MjYKLToxMDRDMDAwMDVFQUEyMUZGNUVGODc1NDczNDg5RjM1NkExNzQ1MTVEQTEKLToxMDRDMTAwMEZBQkI4MTlGNkYzQjFBNTYyMkJGRkU3MDUwQTY3MTQwQUYKLToxMDRDMjAwMDFFRUMzRTI1NzNCRDM2QUMzN0UzNzU5OUY3MTcxQ0RDRDcKLToxMDRDMzAwMDcwN0UzMDYzQkQ0RUFDRjdEODdFMEUzNzc4NTJCRTJDRjYKLToxMDRDNDAwMEZERjUyMEJDRDNERTEyRjA4NTUyMjU1OUZBNUI4RkY1QjUKLToxMDRDNTAwMDFFREQyRkUwMEIyNEJCNEZDRTVDRUYwRTFDRjdFNEI3M0MKLToxMDRDNjAwMDA0N0MxNUM5MERFNzY1MUVGN0ZCRDg5RkE3ODREQjJCRDUKLToxMDRDNzAwMDlGNDM3RjQ2MURBRDAzNUIyNTkzM0M2RjVDQTI0QjBFQUIKLToxMDRDODAwMDQ2Njc0RkU5NjAxQ0VCNERBRjhCNEJENTZDRkNFMDI1QzQKLToxMDRDOTAwMDcxQzkzMTlEREIxOTBFOTZGNzYyM0YyQzNEQTU5Njk1QTMKLToxMDRDQTAwMEIzN0ExQkIxQkNDMDU0OEVFRDU5N0FEMjM0NUUxRUZDNkYKLToxMDRDQjAwMEE2QjU3QzQ0NkYzNzgzNjFBN0E2RDBEOTFBRkE4QTM1ODYKLToxMDRDQzAwMDNGRDVDMUY1RTNCM0NFREZENjIzQkY0RjU1NzhGOTdGOEIKLToxMDRDRDAwMDYzMUVFREFFNDVCNkZBM0U5RUZGQUQ1MUJGOTBCNzc3NkQKLToxMDRDRTAwMEM4M0NFRjI5RTFGMzJFRENFQzQ5QTJEREI1N0U2MTQ3M0IKLToxMDRDRjAwMEU4RDI0MDdBQkVDNUU3MjQ2QTMxNkZDQzZGRkQzOTlCOUMKLToxMDREMDAwMDQzOTc5QUU2NTNGQzg1QkI2QjJGOUQ5NjdENURGMTZBQjgKLToxMDREMTAwMDBFODg5OEQ2RERBOTdERDMyMDUyRkFDRkFGNUZCRTZBNDgKLToxMDREMjAwMDVBMzc3MDVEOTkyMEQ2ODUwOTczRjlCQUMyRjBBNjczMTcKLToxMDREMzAwMDdCOTVFMzZEREQxOTU2QkMxNTlENjlDNURCQkEzM0FEQjYKLToxMDRENDAwMDc4MkIzQTJCMzdERTdFMjlDNkNGODYzRjM2N0VDNDNDOTEKLToxMDRENTAwMEZFODY3M0FERTM5NzlDNjcxRDdGQzM3OUQ2RjE0QkNFN0EKLToxMDRENjAwMEZGRDRFM0E3Q0M3Q0QzNTc2RjFENUY2REIwOEVERkQ3MjgKLToxMDRENzAwMDYwMUQ1RjNERkJEMzhENkZEMEE3NkJFMDJFRUJCQTVFNUQKLToxMDREODAwMDE3MDUzM0ZEMTIwMzVEMjFDQkJBMUVFNkVCQkE1MUJFMDcKLToxMDREOTAwMDY2RTBBNzIxNUNERkJEQjhCRUEzN0ZBNjk2QUZFRjMzNjgKLToxMDREQTAwMERGRjkyODg0N0VGQjc1NjdFQzA5RTEzRTYzMURBQkJCMzAKLToxMDREQjAwMDZGNUE3QURERDg3OUM2OEQ4RTQ3NTlCRkRGMzk4OUFGRjIKLToxMDREQzAwMDMzMDM2NzNDRUQ0MUZEQkZBNjk2QUYzMzA5NzE5RURCMEYKLToxMDRERDAwMEREOTIzQTc4OEQyQjNEQUY4Mjg0OTdGNjdCNDY3RUM0NzgKLToxMDRERTAwMDVFODJERkQ1MjMxRjI2NkExREMyNUUyQTZCOEIzMDVCNzUKLToxMDRERjAwMEQ0NzM5MjZDQzk3NzRERTNFNTM3Qjc5N0I1RTlFODRCQzMKLToxMDRFMDAwMDkxRjUzMjVDODdGQ0I1RjBFNzY5MTlGNjVCQzZGODA2RTgKLToxMDRFMTAwMDNDRDlDN0U3RkJFMkY0Rjg5MzZERTM0RkI2OEM2RkU0M0YKLToxMDRFMjAwMEJERDM3OUI5MkVENzM0MjAzQzlCQzRCRUY5MDZGOTc3OUYKLToxMDRFMzAwMEE0NUY4RTFGN0NEM0RCMjIzNTY2Rjg3ODNFMEQxRkNGMzIKLToxMDRFNDAwMDFCRjBERDJBQ0Y2OEQwNkJGRTlFRjA5RDY2QzNERjY5NDQKLToxMDRFNTAwMDM2RkM5RDY2QzFERjBBNzlFRTMxRTFDRjVFQUZDN0M2OTEKLToxMDRFNjAwMDlGNTc0M0U0MjY3OTFDQ0ExMTkwQkQxOTk3NTU3MTFFQUUKLToxMDRFNzAwMEM0RkJBQjkzODU3Q0UxRjgxOEI3QjM0NDQ5NEVBOUUyNzMKLToxMDRFODAwMEU1NEQ2QzVENUIyQzhCN0Q5OEE4REY2OENCMUJGNjJCMEEKLToxMDRFOTAwMDJFNDc0N0M5MEY5M0Q5N0U1NTgwRUI2RDY2Nzc4NDFGRTcKLToxMDRFQTAwMDI0QkQxRTI2Nzk0QUVGM0JCODFGNDM5NkEzOTE2ODA2OUUKLToxMDRFQjAwMDdENzA4N0NDQ0Y4NzI1MzVEQzhDNzBDQTAxODVGQ0E4MzYKLToxMDRFQzAwMEQ5RUFGN0M5OTJCMEFGNzVDQkY5NEUxMTBDQTU5QzA4ODEKLToxMDRFRDAwMDQ3MDgyODNFMDkwRTdGNTlCQjYwRkE2ODM4MTQzOTFBMTIKLToxMDRFRTAwMEMzNzE5Q0FBMDJGN0IxNzFEQThCMkZENENDNzE0QzhGQUQKLToxMDRFRjAwMDE4RjA4NDIyMDQ4RkEyNzI3ODE0MzkxQ0M5RTQwN0JFMEEKLToxMDRGMDAwMDRGRTY3RTBCQTMxRjA2QTE2ODNGMDQ2ODI3MUFGMEFEODkKLToxMDRGMTAwMEY2NDY5Qjk3QTAzRDVGQUMxMDlFREEwQkFDRTdFNUJGNzEKLToxMDRGMjAwMDExRjM3QTQxQTRFRDU5Q0VGRDAwQTMzMTMwN0U2OUZDMjYKLToxMDRGMzAwMDVDQjI0MzU3Q0Q2REYwMjA1RjZBMTBGNkEwQkZCRTNENTYKLToxMDRGNDAwMDkwMzk5RUM4NDhFRDc2Njc4MkQ5QTU5OEVGNjA3NjI5OUEKLToxMDRGNTAwMEE2RUQ4MTI3MUE3MUREMzk4ODdDOUNFMTVDN0I0NENGMEEKLToxMDRGNjAwMDg1MUQ5MDMyRUQzRkZEQjUzRTQ4NTlGQ0E3NDk4MkQzREYKLToxMDRGNzAwMEFCOTU1OEJFQkI0M0U1OTY3NkFFRjEzMkQ5RjNFRDAxNjEKLToxMDRGODAwMDQ3MTI0MzhEQzY4MkJGNDNDMDZGRDRFQjk0RTMxRTM1RjYKLToxMDRGOTAwMDhGRkRCMjNCNjQ4NUY3RjhFMThGQjdGN0JCRkFENTRDQ0MKLToxMDRGQTAwMDcwN0Q1Njc4MzNGOENBREVCRjUyQUFDNEM5MkU5NkEzQzQKLToxMDRGQjAwMDIxMzNGRjNCNUQ5QzRGOTU1MjRGOUNEQkVCRDlDQTdENjMKLToxMDRGQzAwMEJDN0Q4MDk1QTM1RDFDODg2QTc4RkVDMjQ0OUVFMkM0QzUKLToxMDRGRDAwMDNDMjgwNzI2RkM0QzE0RUREQTVERTIzQzFBRTJFNEFGMTMKLToxMDRGRTAwMDk1QjQ3ODMzRjI5MUE3NDJBMUYzMDE3QjNCMjNGNTg5NzUKLToxMDRGRjAwMEY2OUQ5RjdDRTczNTkyOEY3MTFFOTIwRjQ5NjNGMjkzNjUKLToxMDUwMDAwMDYxOUNDN0U0Qzg3ODE3NEIzN0M5OTEwOTk4QkE4RTM4QTQKLToxMDUwMTAwMDYzOTlFNDY0OUM4QkNCQjEyNzFBRDUzQzNDRDQyNDIzMDAKLToxMDUwMjAwMEZDQjM0NUJGN0QwNkZDN0E5Q0NFQkRGMjg1QkYzQTRGRUUKLToxMDUwMzAwMEY4NjdBN0UxOUZFMTlBNDNGMDdGMEVEMzZDRjA0RjE3MUEKLToxMDUwNDAwMEYwOTQ0Mjc4MDBGN0VEQzhBMEQ4MkZDMDA1OUFGOTVDMUIKLToxMDUwNTAwMEFFNTdGNDVCMkFFMDAzQjg4RUU4NjY5NDc3MDkzQ0U0MjcKLToxMDUwNjAwMDNCOUZGOTc5Q0VBNzM3M0Q5RjQ2MzE5RjczNzNDREU3QkMKLToxMDUwNzAwMDBCNjIzRUJEMkVCRTVFNzkxQUEzNUE4OEYxNTU0OTE2QzEKLToxMDUwODAwMEJBMkMxNUZENkYxRUExQ0I3NUM3QzQ1NzVGQ0Q3MzFFMUIKLToxMDUwOTAwMDRCRDNGMzU4MjJGOEVBRDI1Q0YzODgwOTc4RkE5QzMwQjMKLToxMDUwQTAwMDZGM0ZDNkNGNEMxNkVCMEQzNDU5RThCMkM1RTAyQjM3MzUKLToxMDUwQjAwMDVGMzcwMEFFQjdEMEU1NzZEMTRGQkVGMzU5OUVFNzdDOUYKLToxMDUwQzAwMEI2QTRFN0YzM0Q0MTk3NUI3MkNEQzc1NEJGNTVENDZGOEIKLToxMDUwRDAwMDEzNzI0NTc2Q0IxNkQ3OEUzNkI0M0YxRTkzQTMxREFFMDIKLToxMDUwRTAwMDM5RTlGMTU4QkQ0RTczQkQ4OUFCQkI4RDdBNkJGMEJCMEUKLToxMDUwRjAwMEI0NjhBNDVFOEYxODVGRDg0NUY3RDM3RTZDMzVEQTE4OTQKLToxMDUxMDAwMENDQkVGOUUyRUExNzFBRDAxRTY3RUQzNjUwRkY1MUJFNDkKLToxMDUxMTAwMDZFQjI3NkI3OTlGQjlGQkRGQThFMzY1MUVGNEVBQ0Q3ODMKLToxMDUxMjAwMDdBRjYxMUEzRkY0REU2RkVCN0I4NTIwNjFDNzcxMzFDQTIKLToxMDUxMzAwMDhEMjNGRERENjNBRUI3RDRENURGQzZDRjA5MkJENDAzRjUKLToxMDUxNDAwMDdFOTM1RDEzQ0FFRkRDQzcxNThDMjUwNkQxNUYwOTA1NzgKLToxMDUxNTAwMDdENjg3Nzc0QzhGMTJEODNDODBGQ0NDODdCOTA3REJGNjQKLToxMDUxNjAwMEM5MUQ5MTI0QjY3RUFBOTFGOEMzNThBRjQ0NzdBQjRFQkYKLToxMDUxNzAwMEE0NUI0M0ZDNDc5OEQ3MUQxMEM1QjhDODNCRkRCNzZFNkMKLToxMDUxODAwMEMxRkMwQUQ5QTNCQUMzNjg2RjY5NzQzNEQ0MUI5NDI5Q0IKLToxMDUxOTAwMDlFNjdCNTE0RDM3MTVEM0MyNEM3OUU3MTkxRERDM0JBN0YKLToxMDUxQTAwMDY0RTNEQzU0QUEyNUJCMjVGNERGODJDNEVEMEUwRUQ3RTAKLToxMDUxQjAwMDdBRkYyNTA5ODRDM0NERTBDMkY4RTBENTM2QjhEODc4QTcKLToxMDUxQzAwMEI0MkZFRjFBQzdFMzZENDA4NjVBMTlGQjczRkFDMkQ4QTEKLToxMDUxRDAwMERGQzBCODFCMDlERTQ0QUI1QkM1RjY4OTI5MzcxMkJDQkEKLToxMDUxRTAwMEFDMkM0QUYxNzlBRTM4QzFEQkU5RjJBODE4OEY3N0E3NjkKLToxMDUxRjAwMDdGRDkyNjhDQjc1QkExMTc1MTdEODIwM0U3M0ZCOTlBMEYKLToxMDUyMDAwMEUwRjc0MjNDQjVBNDBBRDU1NzVGQzQ4MUYwMkM1MjI4ODAKLToxMDUyMTAwMDJFMzkxMURDNDBGQkRCRUU0NTZDOTE2M0UzNzZENzZFRjMKLToxMDUyMjAwMEQwQjFEREMxNDUzRThBQUZGMzA2RkEwMEUzQUQ0QUNGMDcKLToxMDUyMzAwMDU3MDBFMzgwQkNDMTNFQjIzMzRCQ0VGM0YxN0MwNUQwQzYKLToxMDUyNDAwMDM4MjU5RkU3RjFCMjJFMTg1NEFCNTk1QTlBRTA3MUM3MkUKLToxMDUyNTAwMEREQjU0REZBMTJCNDYzRTZGMjc4NTREMDIzMkY2MTdDQTkKLToxMDUyNjAwMDVCMzE4ODdGQ0U4QTAxRUNERjM1RDEwOUNFNzA5QUJFRTIKLToxMDUyNzAwMEE1N0QyM0VEOEI2MjE5RTQ2NUE0NUUzMkNGN0FBOUZDOEIKLToxMDUyODAwMEVBOTUyNEU0RkNFQUY1RTU1OTJGOTk2N0JEMTRBRkU3RTgKLToxMDUyOTAwMDg2MEI4QTMyQzU3QjhDRjBGRDAyODVFQzBGMjNCRUFERjgKLToxMDUyQTAwMDkwNTlGRTIzRjY0OTE1QjdEQkNERjY4QTBCOTRCNEJEQjEKLToxMDUyQjAwMDgyN0NFNjVDOUMxMzhFMTU2RkI2MDY3NzlCRUM5QkEwRjgKLToxMDUyQzAwMDUyMTBBNEZEQzY2OTcwMUFDOUU1MThFRDBGQjVFOEMxMDIKLToxMDUyRDAwMEREQUVCMUU3OEIxMjk2MzJGOUM5QzdBQUJGMDZFRDNEMjQKLToxMDUyRTAwMDc3RjY3MkZGOEMwQjQzQTRDRkE2N0Y0REE0OEI3OTNBM0YKLToxMDUyRjAwMDkzN0Q5Rjg2NjlCM0M4N0Y0REU0MTczNzQ3MzI4QzU3M0IKLToxMDUzMDAwMEFGNzAzRDVDMEJEMTlDNzRGMDBBRjgwRkUwOTkzRjZCRDUKLToxMDUzMTAwMDUyMkJCM0ZBMTlDRUM3OEQzNDMwQ0Q2MUIzMUJBREZBMjEKLToxMDUzMjAwMENFMjNFQjBENzRDRTUxQ0JFMzA3REQyODhDMjgzNzYxRkIKLToxMDUzMzAwMDIwRkRFMjgyOTQ1QTRERTc4QjkxQzIyNUUzRDNGMkUzM0MKLToxMDUzNDAwMDBBOEQyN0Y5RjkzRjY1NEU5MEU2MTI3REMyODg0NzNCRUEKLToxMDUzNTAwMDlGRDhGOTIyNjBFMzhCNEZDQjI3MTcxRjI3M0VGMTI3RjkKLToxMDUzNjAwMDlDNzlDOThGQkYyRkNGN0FDOTNDRUJBNUYyQUIxNzQ4MDgKLToxMDUzNzAwMDQ4RjlENUVCQ0JCMzVFMzJDRjdBMjk1RTZGQ0RCRjI4MkIKLToxMDUzODAwMEMyREY3QUZFMkFGNEMzRjhCRkU4QjFFNEQ3N0NEMTY3NjQKLToxMDUzOTAwMDJERkY1MkMwOTJFRjM5RDdEQTNFNzA5RUI1N0RDRjc5OUUKLToxMDUzQTAwMEQ2RjY4MUYzNzlGQjI3M0JCRTdBMzZGQTc5RjI5NTkzRUMKLToxMDUzQjAwMERGRkQ4RDcyNTJFQkM5NURCRjY0RDExODcyRTVEMTY5MTIKLToxMDUzQzAwMDNGRTk5NTM1NDgwNTcxRkQ2MkVCOTQ0NDY5MjQ5OUMxMjQKLToxMDUzRDAwMEJFN0I0RUM4RkZGMzJFRUVDNzQ5QzgzQUVENkJGRkQ5MkUKLToxMDUzRTAwMEU3RjkwMzg1RkI4RDhDRjk4RTA1QUZBMTdGN0ZFRjE0NjQKLToxMDUzRjAwMEY2OTZEREZFMUFGMUVCMUMzRTdBRjQ1NEQ0MjM4MEMxRkMKLToxMDU0MDAwMEQyQTA2QTZDNkFFOEM3MDU1RjE4NDM0NUJDMzU3RDc0NTUKLToxMDU0MTAwMDNFNkRFRkJGMEJDRkVCQjhERjI1RDQ2NDgyRTMzOTM3QTUKLToxMDU0MjAwMEY3QUJGQ0JDQUEyMzQ0RTdCNTUzRUUwOEUxM0VCRDZCRTUKLToxMDU0MzAwMDkyOTREMUNGNzI0NEUxRTc4MkQ1MzEzRkQ5MTk5RDlBMzgKLToxMDU0NDAwMDg3RjQ2MUQ3MjQ3RThGQTlDQkQ1NDdGRUUzQUUyQTZCQzQKLToxMDU0NTAwMDdCOEZCMDFGOEUyODdDQkNBRTk1NzE0MEZCN0ZGNTk0OEUKLToxMDU0NjAwMDNCOUE3MTVDNzdFQTVGNDE2MzcwN0Y3NzUyOUNFMjQ3QjkKLToxMDU0NzAwMDNCREM3QzFGRTA4RUU4ODBFQjgyNDdEM0U5RkNERDBFNEQKLToxMDU0ODAwMDRGQzI4ODFCODJCRTUwOTM2OURFNEQ2RUNFMzczRjY3OTgKLToxMDU0OTAwMEYzQzk2NzVFRUYyODBBRDU1NzIzMUM3RkQ5RjBCNUUzMUYKLToxMDU0QTAwMDE4RjE3NUI5OUJGN0FCODVCQzg0QUY4Mzc1NDBFQjA5RTgKLToxMDU0QjAwMDEyRDJDOUU4NDgyNEQ2RjBGRjA2QzFDQzZGRjZGNTE4MjEKLToxMDU0QzAwMEMwMjdGOEVEMjhFNTM1RjlFMjlDRkNENDI1RkMzMEVCNEIKLToxMDU0RDAwMEQwMEZDMzUyRURFRUFGRTVFNEU3NEVCMTlFQkJFMUVCN0EKLToxMDU0RTAwMEQ0QUY1QjhCNDc1MERGRjk2QUZCRTA1MkMyMkY0NDYwQjgKLToxMDU0RjAwMEJDRTAzQjgyQjczREUyQzBGMzA1ODBGMDY2NjYyN0ZBNjgKLToxMDU1MDAwMEM2NzU4NTUzMzlGQzYyOUU1QUVCN0E3N0FDRUJEOTZDNDEKLToxMDU1MTAwMDM3NUJDRkZDRTlGNUVDMjBGNDkwMTM3NjhEMDNBRUM4MzEKLToxMDU1MjAwMDc0RkZDMzU4Q0ZCNEUwQzUzOUU3RERENUMyRkQ1NjAwREUKLToxMDU1MzAwMEI3NDAzRkNFRTc2NTI3RjFCM0EzMDZGNEY1OEM1RUVFRTYKLToxMDU1NDAwMDVBOTlFMjFDREM5MTNFNUNBNEMxNTMwMzI5NkY2MUY2QjkKLToxMDU1NTAwMDc5QkQyQUY4NEUwQkU1MUU3N0FEQzBGNzFBQTREMzg5QTIKLToxMDU1NjAwMDM5RUMyQzc0MzRCMzdERDlBQjlERjdBRkMyRkQ1QkYxNDAKLToxMDU1NzAwMDAyMkUwNzIzN0MyRkY3NTlGODczNThFMTdFOEQyRUFGNEEKLToxMDU1ODAwMEQ2NEFGMTJDNTVEQzNGNjJFRkI3NUJDMDY5OTdBQjQ0NUMKLToxMDU1OTAwMDk2RkIzNDg2RENGRTU1RDFCODFFRjJGNDkxREZDMTkwNDMKLToxMDU1QTAwMDJGNERGQjU3RDI3MzVEOTNEQTNDODhBNzg0QjY4MUZDRkMKLToxMDU1QjAwMEM0MDc2QjE0QzA3QjMwNzY3RDMwMDI4N0MwRkY1OUQwQTIKLToxMDU1QzAwMEUzQzFGQjRBREQyRjNCRTlGRUFCQkQ5RTE3Mzc2NTI2RTUKLToxMDU1RDAwMEJGOUVCRkQ2QUE3RkM3RDIyNzc3N0U0QTdERjIxMzQzRUMKLToxMDU1RTAwMEVFNDdFQjEzNUE3RjJGRUY2Q0RGODVGNEU5RjI3MkZGODEKLToxMDU1RjAwMDc1NDlBMzBFNEI0Q0YzRUQxMUUzMkY3NjhCNzVBMTgyMDkKLToxMDU2MDAwMEMzRDFFNTUyRUJDRDc0MkE2NkRGRUJDRDdBMzMwQjdENDcKLToxMDU2MTAwMEIyRDFGRDIyMEMwNjlDOTM4NkMzM0VCRjg3RENCQzVFRTQKLToxMDU2MjAwMDA5OEUzRjZENkMzQzhDQTYwM0M3QzMyQTc3NjYzRUY4OTMKLToxMDU2MzAwMEFDRTZEM0U2Q0U4RjhGRUYxNkY1RUUxNjc4MzVFNjM1NkQKLToxMDU2NDAwMDk2OUMxOEZERjcwQjdDMTUyRkIwRTk3RDU5QjdEMERGN0MKLToxMDU2NTAwMDY5RTBBREQxNTZDRjYzQUQ2N0UwNDc3NjczN0JDNTU4M0YKLToxMDU2NjAwMDI3QzZFQUZGMkQ4NUYzODdCREZGNkM3MkY4OUIxMTM5QzEKLToxMDU2NzAwMEQ0QzkyRjZCOENFMzg2MUY0NDQ4RUU5ODVFRUU5RTA5REEKLToxMDU2ODAwMDUwMTAxODI0N0YwMURCRUJGMzc4QTc2MDE0Q0NFNzNBQzUKLToxMDU2OTAwMDc2RkQ2NUU4RkY2Q0ZBQzhCRTZGMTlBQkJFMTI1NDcyOTYKLToxMDU2QTAwMERBNDk4NjVENTMyMkVFNEQ3QTQ0M0NGMDA2MjlGMzM5RkYKLToxMDU2QjAwMENGQjA5MDIzQTZEOEYzOEFFQkMzMzAxMURDQjc0MTE0RTYKLToxMDU2QzAwMEM0RkRCRkM4NDAyQkNCOEYwRjJCNUEzN0ZBM0ZFNDg1NjAKLToxMDU2RDAwMDAzNUI1OTdFRENDRkRDRDAxRDQ2OTdDQjgyODEwMTg2RUYKLToxMDU2RTAwMEFGMzUxMTRGMTRDQjI3NzhBQTQ2RUU2OUY1OUQ4QTdFMTcKLToxMDU2RjAwMDJENkU3NzgxRjM5NkQ3RjAxRUYwRjg4QjY0NDBCQ0JBMUMKLToxMDU3MDAwMDYxMUVDNTY5MUY1Q0MxNzREOENDRDFGMDhDOTcwMTI2OEQKLToxMDU3MTAwMDk2QjA1NEY4MDdFOEZDMTBCNzk0NUZCMUFEOEI4QjRDOTIKLToxMDU3MjAwMDc5RjQwMzdCQUNFQjVFQkVGM0I2QzM5M0FEREQ5OEYwQ0EKLToxMDU3MzAwMEE0RjdBMUZCNzE3QzM3RTQ1RUQ3OEU3NTdFMjM3NjZENkUKLToxMDU3NDAwMDlFRjMzMkVFQTMxOURGQUI4NjlEQTBFMUZERjY2MTg5RTEKLToxMDU3NTAwMEQyMTM4NkZEOTQ1NjBFN0IyOTlEMzQ1QzBBMUEyMzVBNzcKLToxMDU3NjAwMEM1NzAzMUE1MTM4NzI3RDJGN0YyRTEzMjRBQ0I4NjI3REQKLToxMDU3NzAwMDUzMUExQUFFQTJCNDc4RjgxNDRBRDVFMTkzMjg1RDJGRDMKLToxMDU3ODAwMEU0QjA2ODc4MzZFNThERkI2Rjg1QzMzMzI5NUYzMEZDNjQKLToxMDU3OTAwMDc5NEEwM0MzRjM3OEI5Mzg0RjVEQkYzMjA2RThBRjU2OTQKLToxMDU3QTAwMDcwMUQ2MkYyQjE3QUUxNTI1QTk3RUNGMzVBRUZFMUVCRDUKLToxMDU3QjAwMDcwODdCODI3REM2MUQzREJGREEyRkM1MTBGOTdGQkY1QTYKLToxMDU3QzAwMDQyMkU0MDhFODNEOTZGN0U4RkE4QjdCRTNBNDZGNjc3QjkKLToxMDU3RDAwMDg3QjExRTk2MkRCNUFDODdGNkZBMUQ1OUVFMjczRjZEQTEKLToxMDU3RTAwMDk0MEI3OEEwQjY2OTBDRkFGMEYzNTc3NzMwNDZGNzA2QjkKLToxMDU3RjAwMDAwNjJBNDk3NDA4RTU5RjQ2RTg3MDE3RjlFRjcwOEQ3MDgKLToxMDU4MDAwMDJGN0M5QUY4RDhDQjA0MTk0MzBCQkQ1RkI4QkJGOTAxQzQKLToxMDU4MTAwMEQ0M0JFN0RDNzhDNTZFMjY3NzFGQjg2MzM3Nzk3MERDMzgKLToxMDU4MjAwMDJGNUM0NTRDRjdGRDY1Mzc4NzUwQkZBRDVGNzgwN0REQ0UKLToxMDU4MzAwMDZGNDJGMzFCRTM5QTNCQ0ZCOTI1RkUwMDcxMURBM0NCNEEKLToxMDU4NDAwMDc0NkE3N0FCQzc3NDBFREFCNUY0RTZFNjg3NTg3RjVBMDgKLToxMDU4NTAwMEJCMDMzNDEzQkY1NkRFRTIwM0NEQUNCRjBFOTc5NjYxOTcKLToxMDU4NjAwMEZCOEExQjRBMkNERkNCQUYyOUI3QjQzM0VFNDk4NDJFMTkKLToxMDU4NzAwMEFCQjZENDUzMTc5QzZDQTk1NzM4N0Y5NkI1OUQzODI3ODMKLToxMDU4ODAwMDBGRDQ5RDZFNjlFNzBFMTg3OEU1RTc4ODhDRkU5NkY1RDMKLToxMDU4OTAwMEEzNTNDQTRDQzdCODg3RUJDQjZDN0M3M0ExODdBRjZCQTMKLToxMDU4QTAwMEU5RkU3M0QzMkQ1QkZGRjlERTBCNDlGMzQ3RDY3OTkwMDAKLToxMDU4QjAwMEJEMUI0RjJDNUE4MEY2OTQ1QjhERDEzRDk1NjNBRjdGMTUKLToxMDU4QzAwMDdDRTc5MTZGM0RCQkJFMkE0NDdENTU4QUZBNDRBMjM0RTEKLToxMDU4RDAwMDgwRkFBQTE0RjU4ODk3NTJBM0RFQjFERUI3NUQ4QkZBODEKLToxMDU4RTAwMDI2NjBEMjM3NzM5OERDNjdFMDg3ODAzN0I3QkUzOTQ1Q0EKLToxMDU4RjAwMDk0NEZGMTcyN0RCMzU2RjA5NTlENkY0MkEyREU1QUQ0NUIKLToxMDU5MDAwMDM3RDNDNkQ2MzcyMTZGNkU3RDMzNTM4Q0Y3OEZENjM3OUEKLToxMDU5MTAwMDVEQjNFRTg4N0Q4QkU1QkNBN0REREQ3QzNGNEIzQjY3NEYKLToxMDU5MjAwMERFNDg3OUE2MkY2NDJGMkJFRjNDRjU5NkY4RkQyNjNEMzcKLToxMDU5MzAwMDAyODdGRjkzRjNBNUUwODdBMkI5NTZGRDYxRjQ1RjEwREIKLToxMDU5NDAwMEI2RTkxMTQzMUVGRTQ2QjkzRTIyRjgzNTFCN0RGNjdGQUYKLToxMDU5NTAwMDRBQjkzRTcyOUNFNEZBODhBNzdCMDE5RTJGRTYyQkQ3QkEKLToxMDU5NjAwMEEzRUIxRkRGNzlFNDVCNEY2RjgwRDQ1OUI4MkY5OUVBMUUKLToxMDU5NzAwMDRCQUU0MkJGOUJBMzJGQ0NFRkU1QzUyODZFQTdFQjM5RkEKLToxMDU5ODAwMDk3RjBGMzcwRkZERjJDNEZFNDNDRTQ5RjU5OUVFODIyMzAKLToxMDU5OTAwMDJGNkI3RjdEOTUzNjAxRDc2OTk2RkYyMjdFMzdFNUEzNzEKLToxMDU5QTAwMEI2N0M5M0FERkU1NzZDRjkwQjZERjU5QkNERTUwOTREQkIKLToxMDU5QjAwMDlCODBFNzhCODlCRDJFM0ExRjRDNjg4RUM2NENGQzc0QzkKLToxMDU5QzAwMEFFOTdGM0NCNUU0RjM0ODZGRDlEOTgzQzc5MDJEMjg1MkQKLToxMDU5RDAwMEU1MkZBNUZFQkNCQzNGOTZCRkNDOTY1RjRBRTNBN0YzN0MKLToxMDU5RTAwMDU3RDhDQUFGQjI5NTVGNjNDQjJGMzNEN0VGM0EzMkY5QUUKLToxMDU5RjAwMDRFN0E3RkUzOTcyRUMwN0IwOTc2Mzg1RjExN0FBMjczQzcKLToxMDVBMDAwMENBQ0RCMTM2MkU5NzM3NjFGQkNFQTlCN0M0MkYwNUUyQjgKLToxMDVBMTAwMDBCRjJBMzM5MDNCNkZEMUZFMzMzMzNCRkVDMTVGREZDRDYKLToxMDVBMjAwMDdDRDI4REI0NkZFQTY0RkIyNzhBNjM0NDNGNUUwNkZDMzgKLToxMDVBMzAwMEZDREEyQkRFRTFEMkFFQTRGQjBGODlCMkVCQzlDRkQxRTkKLToxMDVBNDAwMDU5RDE0NjcxMEEwNzM1ODVDRTY3MTM1NTk5REIxQjdFMDAKLToxMDVBNTAwMEE2Q0U4QUNDRTcwOEJGQzYyMDVDOTMzRDAyMzVEQ0ZGQUEKLToxMDVBNjAwMDg3NjI3MEQ0ODFFRjA5NzFGREJFQkFBQTgzRjRBQjkyNEMKLToxMDVBNzAwMEJBOTJGQjM3Q0E2MkU0REZCODRGRDA0RjA5QzRDOUFGNEUKLToxMDVBODAwMEUwQUU4ODY3RENENzc3OEVFMEMzRUFEN0RDNjlFMDQzMTUKLToxMDVBOTAwMEVDMjM0REY4MjAzOTZDRUJGQTYwMzdBRUFGMDk2RjY2MzYKLToxMDVBQTAwMDM5RkJCMTk3Q0I5OTJCOTRERkY4QTNFN0NGRDc4NzJEOUMKLToxMDVBQjAwMDc4QTkyNUMzQkUzNkUxRTI3MUYyRkEyNEVFMDc5MEQ5NDcKLToxMDVBQzAwMDM4NjZCRjgyN0RCQzkxNzlEQUY2RDlGNzBBM0MyNUJDRUQKLToxMDVBRDAwMDNDQ0VERUU4Q0YwRUNGQzNBMkRFQzM1RUVFNTczMEU2OEIKLToxMDVBRTAwMDI1QUI3QzlDQjFGQTdGMTYyRjZCQTExRjQwQjVGQjIxMjMKLToxMDVBRjAwMEFDN0FFRTE2NTFERjE1QjRENkNCODY5Rjk1MjNGOEUxMkMKLToxMDVCMDAwMEYxNTgwNkZGOEVDNUVGQzYzODdCMTEyRURBQ0Y2NkRFNjAKLToxMDVCMTAwMDg3NkI4N0U3NTJGQ0M2NDEyOEU4RUJDNjdEQjNBQ0JFNzUKLToxMDVCMjAwMDg2NzExQzM3QjE2RDEyRkE0NTU3QzkzQUM1MjdFODFBNzQKLToxMDVCMzAwMEE4MEZEMkY5MjczRjdGQjhDOTc5NzIxOEY1OUQ0N0M0REQKLToxMDVCNDAwMDU1MDBDNjU1MDQ0RDcxODlDMkNGNzlBN0ZGRDY4N0IxREMKLToxMDVCNTAwMDdDODVFRTU2RjE3RDkzNjFFRjY0MUVCNzdBNzgwNUM1QkEKLToxMDVCNjAwMDUzNzRCMTlEM0E4RTdCQzg1Qjk5QzRGN0FDOUM0NTNEOUMKLToxMDVCNzAwMDY0Q0YzQjlEMzNFMzk5RTI0QzY1MUZFN0RCQjMwRUFGODcKLToxMDVCODAwMDIzM0REQkExRjE3QjM3MUQ3MkNDNTMzMjBENURENTNBM0QKLToxMDVCOTAwMEM5NkI5Nzk2M0I3RUQxMUUwN0U5NTJFREYxODc1NjdDODMKLToxMDVCQTAwMDRERjc3MUZBMjZDNEZBOUJGMDg2OUJDREYxNDkyMTlGRUYKLToxMDVCQjAwMDk3Q0E4N0JENTZGODNBMTFCRTAwQzIxNUE3NzhEMjQ0REQKLToxMDVCQzAwMDg1QzM4MTc4M0I1RUYwMTlFMzJBNTU4RTI4RTIyNTA4Q0IKLToxMDVCRDAwMDMxOEE1N0YxODQ2NDFBRDdFMUU3RjhDRDM2MkU2OEYyOUUKLToxMDVCRTAwMEZCRTZGNzYzOEUxNzNFNDdENkRGMThFNzI3MTk3Q0M0MUMKLToxMDVCRjAwMDRGREEwMjRGQzMzNkNDM0ZFN0E0RjVENDNFQ0U3RTVGRUEKLToxMDVDMDAwMEVDMzQ5RkM5MkYyQ0FCMzE3QTc3QzZFOEVGREM3MTNDQkUKLToxMDVDMTAwMENFNUJBRTAwRjJFMzJCMTA2REFDNjJGMzVGNTVDMURGREIKLToxMDVDMjAwMDU5OTQwMzYzQzQ0NTU0RDhGRDE1RDlDRUU1RjhGOTg4RDUKLToxMDVDMzAwMDcxOUU1M0ZGMDczRUFFNEZDNDBCMTRDMDIwMDU4QjE2NTgKLToxMDVDNDAwMEExNEE5RjhDRjEwMjlBQzRERjgxMDg0QjNDQUU3QzNFOTYKLToxMDVDNTAwMEM1OTEwN0JEOUY3NUJGOEJBOTVGMjlCMjFFOEVGQThGQjQKLToxMDVDNjAwMEExNUY3OTkwRkM1QzlGNzlCRjYzQzBFQjg1QkJBOTVGQTYKLToxMDVDNzAwMDBDNEQzRDVBOUFFRTE3RjUyRjM5OTUwRTFGM0Q4QUU3QzgKLToxMDVDODAwMDY2NEUzMEZFNzEzQjVDNzZGMDdCNTU1MDVFNDg3MTg3MDYKLToxMDVDOTAwMEFCODNENzdCQ0M3NDZERjU1NTVCRDY1NzQ1RURCODRFQ0QKLToxMDVDQTAwMDJBQzQ3QjlGRDc0NDA2NzNGMEU1NkE5NDIzRjQyMzU2RjUKLToxMDVDQjAwMDVDMTYxOUFDQ0Q1RUNGODA1MzY2RDNDRkU0MEZFRDUwQTgKLToxMDVDQzAwMDYyQzk1NkI0MTcyQjAzM0M1RTU1OEVEM0Y5NDhBNzU0Q0UKLToxMDVDRDAwMDMyQUJCQkNFQzRCRjE1NEEwQUUxMkFBODhCRTgxOENGNjUKLToxMDVDRTAwMEQ4NTlFQTA4NjMxQzk2MEMzREZCRTg3RDI3RTdBMjcwQjMKLToxMDVDRjAwMDJFNzk5NTJCRTRGN0NDRjNEOUVDQjNDNjgxQUMxQTgzOUIKLToxMDVEMDAwMERGNTcwQjdEOURBRERDQTU4NDYzOTlGNEYwRTMzRUIxRDQKLToxMDVEMTAwMDhFRjkzMjk3N0ZFQzZGNzhENDk3NjFEREQ5MjFGNDU0RjYKLToxMDVEMjAwMDY3MzE1M0E1OUZFM0VDODM3QzIwNTdFQzc5MERGMUIwRUMKLToxMDVEMzAwMDdBREMzOUI5RjU5MzZBRDU0RkZGRTU4RkZDMDRDN0M5MDIKLToxMDVENDAwMDAxQzdCMzk5RTAwMDdDNEMyMTBGQkI1RjVENDBDMTg4NjcKLToxMDVENTAwMEU5NzhBMDIwRTc2QjhDMDM5MkM2RDM3OTI4RkQ1QjVCQzIKLToxMDVENjAwMDc3NUYwQUVENkVENzkyNDAwNEU5RTc4QzZDMDM1QzQ3REQKLToxMDVENzAwMDhEQjgyMDY3QzRGN0I2ODNFODM5OUZDNzA3RDU3MjNGNEYKLToxMDVEODAwMDZCODRGRDQ3NzE2NEYzNzNDNzhEMzk2REY5NUZEOUU5OTEKLToxMDVEOTAwMERDRjIwQ0JEMTc2MUMwNkZDNEE5REJFN0Y1QTRCRkUxNUQKLToxMDVEQTAwMDJEREY5QzRDRjhDODZGMUZCNDkxRjEwQjMwN0VEOUMwMjkKLToxMDVEQjAwMEQ2Nzc4NjE0RTg2QjUxMjlERkRCMTJBMjdDNEY4QjQ2MjUKLToxMDVEQzAwMDY5N0I0QjJEQTU2QkIwRTkzQzhDRkY4ODI3QUE3MDNGRkYKLToxMDVERDAwMDEyN0EyMDc0MzlBQkIyMTE2OTQyNzEyRDVCMTdFMjNFMjEKLToxMDVERTAwMEIyN0IyNDBGQkFDNEUwRUVDNkZCRjFDQzBFRkRBQjZGNjQKLToxMDVERjAwMEMzNDJCNDQzQkJDNUJCM0JBMDc3MkM0NEJCMkM5REJGNjcKLToxMDVFMDAwMDZCMzVEQTg1REQyMjhFNTY1RDczREY0MkRDM0Y2RTlDOUEKLToxMDVFMTAwMDY0RUM5MzIzOUVBRjlBRUNBRjI5N0UxN0YxMUZFREQ1NkEKLToxMDVFMjAwMEE4RkRBQUQ1RDg5RjU3MTY3OUQ4QkVEMDlBODcwOEMyQTAKLToxMDVFMzAwMEUzRjVGMEZDQjlGRUE3MDgxRTUyMDE2Q0JDMEJGQzRGNDkKLToxMDVFNDAwMDUzN0VFMzE0RTE3Nzk4RDYzNDA2MUVCOTFGQTNDM0E3ODcKLToxMDVFNTAwMDcxM0I2ODVBMDlGOTI5OTQ3MDE4QUYxN0MwQzY2MjAxREUKLToxMDVFNjAwMDc3OUVGREUwRkU4N0Q2QkI5NzMzQUY5NzY5QjkxOTYzN0MKLToxMDVFNzAwMDVEMTM3MDhDNDU3Rjg2MEVCMjJGNTAwRkVCMzhFRTJCRTIKLToxMDVFODAwMEZDRkNGQzc4OEZCQkQxNzU2Qzc4NTFFNjBFRTk3OEY1OTcKLToxMDVFOTAwMDZCQTcyRjc2ODY5RkI1MkY4OEY0QTdBQTU4QkU3MDUxOUUKLToxMDVFQTAwMDRBMjdGMUNENzNEQzMyQkZCODRGQzZFNjhCRjI2RkUwMDQKLToxMDVFQjAwMEQ5QjAzQkFFNDMzQThFNEJGN0U3MEE0NkU4QkNDRDJCNTAKLToxMDVFQzAwMERFMTNDRTE3REVBNTNFRDVEMjBGM0NENjUwOTZFQkRDQzYKLToxMDVFRDAwMDY1NUNENDgxNDE0NjIzRkFBMkI0RDEyNzgyMzU3OEJFQ0QKLToxMDVFRTAwMDM4NTI2MkM5MTdDRDJEQjdENDJGMDg1NzVCQ0E1REVBNjcKLToxMDVFRjAwMEM5OTZGMkJGOTU0RTVGRjdBOTE2QkU4RURBRTZCNUQwMDkKLToxMDVGMDAwMDU2OUU2RkJGREUxNTRFMERERjgzQUM5MjBEN0I3NDAzODIKLToxMDVGMTAwMERENEIzRTg4Mzg0NkZERDgzNzkzRUVFOTQyOEQ3MTBGNTAKLToxMDVGMjAwMDAxMjg1RUM1QUI0NTg4M0Y3RDEwQTY3NTVBQTlCMERBMzkKLToxMDVGMzAwMEE5NzJEMDZBQTc4NjlBRjU5NEQxMkZDNjY3N0I1NzI4OTUKLToxMDVGNDAwMDM0RUVDODNBMTVFMEYxMjBDNjM5MTlFREQ3MjdBM0FBRDcKLToxMDVGNTAwMEZCREVERTJBREUyRTZDQkU3RjZGNEY2NTcxNUU0Njc3RkMKLToxMDVGNjAwMEVGQUJDNjNFNEZCNThGMTNGQTRBRUUzODM1N0I3RDA4NEUKLToxMDVGNzAwMEM4REEwMTkzRkM2NTZGMjdDMzAxRDNCQjFBNUI5MUY2QTYKLToxMDVGODAwMDczRDJGODhGNkM1QjQyN0UwRjM3MzAzQjlBRTE3OTU1QzQKLToxMDVGOTAwMEU4NDI4OEIxNzk3NjYwMTU0NkJGMDRBNjhDQ0YzQjQyQjMKLToxMDVGQTAwMEIzNTQ4QUMzRDczODVEMUQxRTJFMjdERkYxNkI5Njc4NTgKLToxMDVGQjAwMDBFNjc4MENCODk1MTZGMkNGQURGRTQ4NDc4QTZGNUVDNkMKLToxMDVGQzAwMDE1M0ZERjI3MUZCQTM1RkUyN0RDNUZFQTJGMDFCREUzNEYKLToxMDVGRDAwMERBREYzMjRDRUY1Q0Q2QTVDRTc1QTJERkU0MzVGRjc4NzAKLToxMDVGRTAwMDlBNEZEREVFODhGMzZDNTMzRjc1QzBERkZCNjZGRjlDNzQKLToxMDVGRjAwMDY2N0ZBQUUxMUY4NkMzMUU4QTBCREU5RUUyNzFDMURCQUIKLToxMDYwMDAwMDUzRkZCREVCMjhFNkY3M0FFODVERDFFREZCNzJEQjU3QjUKLToxMDYwMTAwMEZEQzJCRTMyRUFGNUVGRTVGQkQ1N0UxOUZDMjVCOUVDRjEKLToxMDYwMjAwMDFDNzFGRjZENjZDQTE2NzcyODgzMTNFOTdGNjhBNUU2QTEKLToxMDYwMzAwMDQ0N0JBN0JGQzUyM0UxQkEzRjRCQ0NCMzJFMTU3MUUyMTkKLToxMDYwNDAwMDdBM0FENkJDNzZEQUU4NkJDQzEzRUYxRkUyM0NEQjAzN0UKLToxMDYwNTAwMEZDM0U2MEJCQ0FFNjRCN0NDRERGQ0JDRTA2RUZDOEJFQjQKLToxMDYwNjAwMDVGQ0Q4QzBGQTU4MEJGN0JBMUI4NjI2QUE2Nzk4Rjc1QzIKLToxMDYwNzAwMDRGRDE4MEFGMDNFMTkzMzBFNTcwNzUwNDM5MUQzQTQyOEEKLToxMDYwODAwMEI5RTlCMDRBQzA2N0Q0NkIwRjcyM0FCNDMzRkIyMDFGMzIKLToxMDYwOTAwMDc4RTQ4MDE1MUU2NkUzNDk2ODE3MDYyMEQ5NDg2RjlBOTAKLToxMDYwQTAwMEU5RjAxMkVFODM0ODU1Njg4ODg3OURBOTdCMTA1RUJDOTUKLToxMDYwQjAwMDc3ODFGNjdDNzE5RDc0MzlERUZCODg3MUZCQjBBMDJFNzAKLToxMDYwQzAwMDk1REExMTI0RjMyNDhBRjczMjRBMDcwNzUyNkZCMUYyQTYKLToxMDYwRDAwMDNEQ0Q3RTdBRUM0OUJEN0M3RjBBRkI5MUQ1MjE5MjlGMTQKLToxMDYwRTAwMDZFMUM4Q0VDQTNDOTFENjhFRkFDQzYzRjk5NEE5RkQwQ0IKLToxMDYwRjAwMDEzM0EwN0VEMEYxOUI4NUU2MDEyQTdDOUUzODU3RDkyQzgKLToxMDYxMDAwMDQxREU0REU3RkJEMjUxNzdCQTVEMzZCQ0Q5RUQ0RTM3NTMKLToxMDYxMTAwMDM0RTVENjU3RTJCQzVGNjdGRkExQkU1MTZERjcyM0VDQjMKLToxMDYxMjAwMDc2QUUzRDBFRkUwQ0Q0RTdFM0YyQjg4N0YxMjlDNzI5MUQKLToxMDYxMzAwMDgyRkIzQ0Y4MUU4MkIzRDZBMUUyM0JDQzRDQTUxN0UzMTAKLToxMDYxNDAwMEZEMUY3RjQ0ODYxNEEzNjc1MTYwOTA5RUNFMUEwQkVGMEIKLToxMDYxNTAwMDRDRkYzNUYyQjhEMTdFMzBERjIzNkQwQTcwM0Y1MEIwNkUKLToxMDYxNjAwMEE5NEU5MkY4M0QwMjBEREZERDBDMzZFRDBENjdFMjUzQ0UKLToxMDYxNzAwMDgzM0Y0N0YyODEyNzQ4M0ZBRTg2NjQwMkUzNEVGNDQ2RjAKLToxMDYxODAwMDA3QUQ2QkREQjVENUM1RTZGREQxNzUwMTQ5RUM0MzBEMTUKLToxMDYxOTAwMEZBODMyNjlGOUFBNjNGOUI1RkM0M0JFM0VGNDdGRjkyOUIKLToxMDYxQTAwMDQ1NTZCQzFGMkI1RDU2MDZCODVFMUE4QkZFOUY3NjFDQUIKLToxMDYxQjAwMDgzNkVBM0U1QTM1NUQwNkQyM0U5QkZBRTlBRkNGNDRBRTQKLToxMDYxQzAwMDlBNkVGNzkxQkNGQTZCMjE5MkNDRDBBRTRERDBDQjdFQkIKLToxMDYxRDAwMDZGREYwMzcxQzBERkEzNzA4QTc4NTRFNzg0NTM5QkI3RTUKLToxMDYxRTAwMDQyMEVCQThDOEFCM0UyRkQzODAzREM5RkI2NTZGMjg1QzQKLToxMDYxRjAwMDcxQThCNTU5RkNDQjM1MDU5MkQwRkY4MzNDOUU2RkRFNkMKLToxMDYyMDAwMDlFMTA5RTFGRjdDQzM5MTBDMjczOEVERTRGMzI5RjQzMTMKLToxMDYyMTAwMDlFNUIyMENFNDUyMkFGRDMzRUEwNzcwRUY3MEJFMjNGMjgKLToxMDYyMjAwMEQ0M0IzN0YxM0ZBMTVBN0Y3NzEzQkU2M0I2RjY0REJGMUIKLToxMDYyMzAwMEM1MUVFQTY4QzlFRDZGNTBDQUFGODhBMTlENzFFODZEQUYKLToxMDYyNDAwMDQ5QzNGNTQ2MkE1RjcxMjJDMjM1MzA2RjI5QkQzQkQyNjIKLToxMDYyNTAwMDUxQjc5M0NFNjE3QUMyQjlFOTYyQzQ5OTc2ODhCOEU4MzkKLToxMDYyNjAwMDkxRjFCMzlDMUIxRTEyRjI1QUFENUY0REY2NjU2RkQ5Q0EKLToxMDYyNzAwMDRCMzRDRURBQkFEQ0UzRTA3QjU5QjlFRTQ1NzkxQzEwMzkKLToxMDYyODAwMDIzN0ZCMUVENUNGNzBEMzFERTFCMDE3MTNFRTE4QTdFQUIKLToxMDYyOTAwMDY5NzIxNUZFMkU4NzRFRkVCMUYxQjVEMTAxMDdDMzVCQzEKLToxMDYyQTAwMDUzNDFFQ0Q1MDBBMzZCRUZCQzFCQ0IxMDBFN0MyN0M2NzMKLToxMDYyQjAwMDRDRjcyMEY2OUYwMUJFRjEwNTBFOEJERDc0QTgzQUZFNjcKLToxMDYyQzAwMDVGMkJFQkYwRjcyOUE2RDJCQkY1NDZCRDlFMkM3MUVDRjcKLToxMDYyRDAwMDI3MUI3NEQ2QkNCNEVGRTlDMEI4N0YwNjVGNEY1OTdFNjgKLToxMDYyRTAwMEY4MzdFODdDMTYzQ0VGOTk4Q0VEQjNDNEY5MUFBOTdEMTgKLToxMDYyRjAwMEJEMUYwQkVGNzYzQ0Y0QkEwNjI5MEVBQTU3Q0EzQzlGODUKLToxMDYzMDAwMDczMEJCOERDRjVBRTRDRjE3M0I1NzkwN0U4NUMyRDkwRjIKLToxMDYzMTAwMDdBOURFMjI3QkUzQjY3MUY5REFCNTUxNjcwN0E2MDFDQzUKLToxMDYzMjAwMDI1REE1MTg1NzNGOTdCODBEOUU0RTg1RTQxM0Y1OUI1QTAKLToxMDYzMzAwMEQ2MDM3OUQwNzJFRUIzMjUyMENFQ0I4MkI5RkIzM0UwMDEKLToxMDYzNDAwMDA0Q0YyMDNGRUYxOTJEOTdCNEZFM0NEOEYzQzAxRTdBM0UKLToxMDYzNTAwMDM3MDU1Mjc0QUVEMEYxOEExM0VGQTY4RUUwNjE5NDVDREIKLToxMDYzNjAwMDI1RjhFRkMyRjRFMkM2RTM3NDFDRTdENjBFRjQ5M0Y0MEEKLToxMDYzNzAwMDFBRTc2QzMzRjlCRTQ5QUU0QkQxMzk5QkE3NDBCM0Q4NkQKLToxMDYzODAwMEVCODFCMEYxMkU2MjdFRjMwQ0UwNUFDNEZEQzMzMkFFNTUKLToxMDYzOTAwMEFCRTg4RjQ3RjhEQTY3NUU0OEZFQjQ2Qzc0RkQ4RTNGNTkKLToxMDYzQTAwMDM2QkI2MDlDRDlBRkNGRjc1REZGNkM3Qzc4MjhBMDU5RDUKLToxMDYzQjAwMEVDNDMzQjNGQkFFMTFCQzdCNEFGQ0JFNjVGM0UyNEU0RkUKLToxMDYzQzAwMDMzODgxNTRERkJBNDZGMTYyODk5RjFGQkQ2NDU2M0UxODAKLToxMDYzRDAwMEY3OUI5OUYxN0JCMTBGRTEzRDc0N0JFNkRGMjczMkQyNjkKLToxMDYzRTAwMEJCNkNGQUVFMkUyMzFFMDU3RjI0QTQ4Q0ZBQUJCQTIwRDgKLToxMDYzRjAwMEMzQkM4RDc1RjU1MDgxRjE3RTRGQ0M4N0VCNDZCNTNFMjEKLToxMDY0MDAwMERGODdFMzNGRDQ3M0E5MEZDNzdENjg1MzZFN0ExQUUzMjEKLToxMDY0MTAwMDZGMTFFNzhCNDlGMUVFODg1MTlFMTQ3Q0I5RDVBNkU3NDAKLToxMDY0MjAwMDVGMTY3MjdEOEY5MEFGODczQzUxMUZGRDVFQzVBRThCQUUKLToxMDY0MzAwMENGM0I4OUUxQUY5QUYxMDVCQTE0QjUyRTI4QzkzNTdFNTQKLToxMDY0NDAwMDk1NkVEQjk3MUNFM0JEOTZERTAyNUI3QzZGOUVGNzM0OTYKLToxMDY0NTAwMDNGMkQ1RUI2MjJGRjlDOEU3OEY4Nzc5MjdCNjdBQTg4RTQKLToxMDY0NjAwMEU0QTlGQTFBQ0UzN0Q1OTcwREE1NzA1RjNCNzlBMzIzMUYKLToxMDY0NzAwMEE5NTExQzRCOENGMDUyNzY4REFDNTE0QzlCQjhGNzdBREQKLToxMDY0ODAwMEEyNThERkMxNzk4QkEzMTJDQkYxREVCODhBNkUxN0Y1NjMKLToxMDY0OTAwMDZCMTQwRjczQjdGNUY3M0YxRUYyNDREQTE0QjQ3RjEzOTEKLToxMDY0QTAwMDE0RTkwOEQ1M0RENkRGQ0I5ODA4QTZERkFCNjBFMzk2QUMKLToxMDY0QjAwMEJERjkyRUZEN0U0QTk5RUQ3NzQxM0UyRERFNzdGQzgzQjYKLToxMDY0QzAwMEYwOUU5NEMxNjdENkM3OUEwNEQxNEM3QUZGM0YwNTVGMEUKLToxMDY0RDAwMDZBQURCQkY5M0IwNkYxMDBCQzYzM0FFNzYwRjQyQjQxQkYKLToxMDY0RTAwMEJCNjA4QkJFQTExRUYxQTkyNzIwM0MyNTgzMUVGQjZEM0UKLToxMDY0RjAwMDgxREZGODFEOUZEREY4Q0U4MkFCODJERjNGNUJCREU0MUMKLToxMDY1MDAwMEMyQzExRDRDNjU2REI5QTVDMTcyMUZDMEE0MTc3RTVCQzkKLToxMDY1MTAwMDQwRUIxM0Q3MEI0OUJEODlBNzg3OURDNDI3NTM3QTIwMjkKLToxMDY1MjAwMDg5QkY4M0IyNjA2MzdDQzA4NUEyN0UwRDdGODdCQTJDNTEKLToxMDY1MzAwMEExNEIwQUNCNTczM0YzOTU3NTBGOTNBRjAwNUU3RjMxQjQKLToxMDY1NDAwMDI0MjNDNDQ3RjA2QTY4N0NGQUY3NEUyQTA3QUYxQkMwQzEKLToxMDY1NTAwMDdERjExRUI2MkZDNkRGNTEzMTdFQUZDNEUwOTc4OTcxNDEKLToxMDY1NjAwMDJCN0Y0QzQ5NThGMzEzNkNGQzYyNkY1RkFEQzE3OTM4RDcKLToxMDY1NzAwMDdFNEQ4RjAzNzA1RjM3QUVEOTU0MUZGQjgzQTE3NzFGMDkKLToxMDY1ODAwMDY2RTM0RkQ5OEQwRjMzQjJCNDJGNzdGRjMyQzQ1Qzg1RTkKLToxMDY1OTAwMDBDOUY0RkREMUFGODY1MkQ5QkUwRkQzRDBEQTU4ODk3RkEKLToxMDY1QTAwMDg3M0M0MDcxMTEwN0EzMUU3QTc3MDFBMjk5Q0Y5MzQ2QzkKLToxMDY1QjAwMEYxQUQ2MUY3NjdBOTlGRDY5N0JDOUVCMUVFNzVCRTI5NzQKLToxMDY1QzAwMEYxNzcyRTJBRDVCN0FCRDBDRkY5MkFGRkREQkFGNEJCQ0QKLToxMDY1RDAwMDE1QTdEM0JCMTUyMTg4NzNGQjExQTI5NEI2MEJGRTU0RUIKLToxMDY1RTAwMENGQUVBODQyN0Y2OEUyMkRCRjhBRjdCM0Q0NTJBQjNGNEIKLToxMDY1RjAwMDREMkU2OUE0RjdDMDQ2RUNFRTEyNjY3N0IzRjI0NEIxQjMKLToxMDY2MDAwMDU1OEZENjE3NzJCQjM1NUNDOEVGODVBQTdFREUwRjc4MzIKLToxMDY2MTAwMEY0MzJCM0RFREY1ODI4NTlDQjAzN0FEOTk3NERFNTBEMTQKLToxMDY2MjAwMEEyN0Q0MkJDNUI3RTU2RTE3OTlENjhDRkE4MTM1OUZEREYKLToxMDY2MzAwMDBDRkNCOTQwOEM2Qjk0NDMzMEJDMEZERkZGRDhGNDhENTkKLToxMDY2NDAwMEE2MzlFNkY1N0M2MzIxM0ZERjUxNEYxMEUzNTY2NDg2OUYKLToxMDY2NTAwMDJCNTFDNUM3QkQ0RDhDQkJCMUQwRkE2RTFDQTgzQzM1QzMKLToxMDY2NjAwMEJFREY1MTcwQTNCNDlGRTFGQjkwMEIxQTMwNUU2NUQ1N0QKLToxMDY2NzAwMDM4NDcxMkRGNERCQjY5QkMxMTE3OTY1QjRGMTg3NDE4NzEKLToxMDY2ODAwMEMxQjdDQUUzOTFDQUFGNTA2NzM5MzNDOEIxOTE2RTZFRDIKLToxMDY2OTAwMEU0N0UyQUZCRjc0QkM0M0NEQUFGNjhFOEFCNjE3MDQ1OTcKLToxMDY2QTAwMDc2NzNCOTczMDcyMUUzMzkxMDkzRUY0QjBBRTc2NDU4MDcKLToxMDY2QjAwMEY3REIxQjY5MUY3N0E4MzhGN0JBNkZERkU3Q0FDMkJGREQKLToxMDY2QzAwMDY4QUZENzJBRThBNEJEMUNBMkE3QjhEQjQzREM5RjY4NEIKLToxMDY2RDAwMEY0N0ZBODhDRkIxNUVERURCQTZDRkQ3QkExMjk4MjcxQ0UKLToxMDY2RTAwMEM2NzhCRThBRTdBQTRBMEQyNEYxQkVBOTJGRDhBNzU2QkMKLToxMDY2RjAwMDY5MTgxRkIwNEZDN0ZEOTEwNjBDOEZFODY3MEIwM0Q5Q0YKLToxMDY3MDAwMDc1RUQyMUJFMUY5NTQzN0RGNTBFOEMyNzgxNDZENTZDMTYKLToxMDY3MTAwMDg3OTU4QkRGNTUzNEYyQUU0MEFDQjU5MEVDQTE4ODQ0NDAKLToxMDY3MjAwMDc4OTFGOTc5RkUyMTU3RjI1Q0M0RTdBQTJBMDc2NDdBQzYKLToxMDY3MzAwMEE3QkZBNzkwREJCOTlCQjVBNjE3QUEzMkQwNkY3REExRTIKLToxMDY3NDAwMDY2QjE5RkNCODdCOUZEOURBRDdFQkExRTg3NkY4NDFGNTIKLToxMDY3NTAwMDQzM0FERDNGMDA4REYzNjM1MzQxRTRGNkMyNENFN0I3QTMKLToxMDY3NjAwMDg2NUUxMTdFQzg0QkU3MEE4NTBCREE0NUJGNjZGM0I4MzMKLToxMDY3NzAwMDcyQUY4QjYyRDNDRjNBQkM2NTBGRUE1RjI3RDNCRkREMjAKLToxMDY3ODAwMEY0M0I3MjdEN0JEMDBGNzkxOURFN0Y2MkY5MkJERjlDQTEKLToxMDY3OTAwMEFFNTRCMkYyNTdDQjlERTJEMUY5NjgyMThFRkIwMTM4OUQKLToxMDY3QTAwMEM4NUZGMjAxQkM1NDM4REI0NEJGMjcwQjE1QkVERTI0QTIKLToxMDY3QjAwMDVDQTQ0NzBEN0ZEQ0U1N0QyRThCNUVGREY2MjY2QjdFQUYKLToxMDY3QzAwMDI5MzQ4RDQ3M0ZDNUQyOEQyRTQ4MzJGQzVFNjlEM0JCM0MKLToxMDY3RDAwMEY3MTdGMjczQTI2RjQzQkMwM0Q3Q0ZENUUyRkNFRkRBMTEKLToxMDY3RTAwMDlGNEM1NzUwNkVBRTlDQUQ1NjM5NERGN0FFOUUyREU0ODIKLToxMDY3RjAwMEY2REQ3QjhDOEYzNDkzOUM1RDE1NDgyQUI4OEY3QjY3QzAKLToxMDY4MDAwMEZCRUMwQjNGMEZEODRGQjJBMzFDRkQ2OUM1OTlFMzAwMDkKLToxMDY4MTAwMEJGOTVCMEMyMzlENjNDRUM3MDFCRTc3OUQ5RTA5MEI3OTAKLToxMDY4MjAwMDQ5MTlGRDQyQ0YxNTRBMTY3RkZDMkEwRjdGMEYyOUIyNjYKLToxMDY4MzAwMDRBMDZFRjk5MTg4NzA3NzRDRjRGN0ZCMzgwREVFRkQ2RjMKLToxMDY4NDAwMDFCRTIxNDU3QTdCN0I5RDU1NTQxOEFCM0EzNzhCQTE1MzcKLToxMDY4NTAwMDhDNjBGOEZFRDAwMUMxN0Y0NjVDMUQzMzI4NEVDMzdEOUQKLToxMDY4NjAwMERBQjU5RTQxMDVGRENBQ0JFNTc4MjNGRTc0OUE3MTJFRjgKLToxMDY4NzAwMEUzNzZDNTIyMTMxOUZDQUU2N0VBNTMxM0MxNTIyRjkxNzgKLToxMDY4ODAwMDY3QkRCRDUyNzU1RUY1MUExRDM5RkFGQjUwRThDOTVGNDgKLToxMDY4OTAwMDNDNzZCRjgyRUJDRjA3OEZCRUZENDU5NEMzQUI5Rjc1OUYKLToxMDY4QTAwMDAyNUVDREZCRjBCMTAyNDhEMUZFMjFBOUEwOUM1RkI1RUMKLToxMDY4QjAwMEREOTlGMTFEMDk4NjMxRUFGRkVBMUYxNTkwNUVCQ0VBRjkKLToxMDY4QzAwMDA5Nzc3MjExNkI3RkQ1RDNFRkNDMDAyNjRGMUZCNjBEMjEKLToxMDY4RDAwMEVEOTk4OEY4N0I1NEUyRTc4NUZBRTAwQzVDOUZBRTkyNzQKLToxMDY4RTAwMEUxOUI5OURFMURGMzE2NzE3OTdGRkZBN0ZFNjZBNDlGRDkKLToxMDY4RjAwMEI0NkRFMDEyRUFCN0ZGMjI5N0Y5NUQ3QzI4RTJFQjBGNTYKLToxMDY5MDAwMEFCQzdFMzI2MUY5MTkyNTMzMkU4MEY2MzNGRjRGRTIzOTcKLToxMDY5MTAwMDNDQUVFNEFBNjc1QzQ5MEMwOUJFNkFEQjU2MjVDNkUwQkEKLToxMDY5MjAwMDU4QkVFRDIzRTI5N0IzN0ZGNDc4MjFFMjYxRjkzMzRFNEMKLToxMDY5MzAwMDhCMUQ3MUY1OEYzRUU5Mzg5REQxRjk2QTI3MEMyRDQyRTgKLToxMDY5NDAwMDM5NzYxRUE2RkNDMTg4NjdDODQ5NzJDREUzNTM5NjkxN0IKLToxMDY5NTAwMDBBNjBGNTlFRkNGRDM5QkY2NkU1RUY4NTlDODAyMUFFOUYKLToxMDY5NjAwMEVGRURGQjlERjIyQ0U2NjMwMTY2Qjk2MUZGNTZCRTVFNUEKLToxMDY5NzAwMEJFRUQxRDg1N0VDN0M4MDE0MzE1OUZDN0YzMEZBQjlEQjQKLToxMDY5ODAwMDY0QUYwRjMwQTRBMDlFNUFERURGRjU5MTkzRjFEQkYyRTUKLToxMDY5OTAwMEVEMUZCQzgxN0NCN0RDMjYxRkVGRTExRjY1QTNFREYzODMKLToxMDY5QTAwMDk5NDUzNkZCN0M1QjY5NUVGNkQxRDU4RjFGQkMxN0ZEMjAKLToxMDY5QjAwMDExRUYzRkYxQzc3QkYxMUVFRDM1NDczRUJFRjc3QjE4NjcKLToxMDY5QzAwMDE3RjY2RjVFMTVFNTdCRjlBM0FGMTQ4MjQ5RkY5RjVGNTEKLToxMDY5RDAwMEM0RDdDRDBGMUY3OUY4QTFDRDZDRkUxRkJFRUUyNjZDN0IKLToxMDY5RTAwMDdEQjhFM0Y3OTVFOEZGRjlGMEM3N0YxRDhGRkVBMDFCODgKLToxMDY5RjAwMDc2MkNBNERGQURCOUUxQTlCMzI3RTQ1QTE3OTE1RjkzRDAKLToxMDZBMDAwMEU2REY1NzE0RTc0NkRBMzMxMjFBOTMwMDNGMTNBOThERDUKLToxMDZBMTAwMDFFRDAzN0E0RTBCQUY2MTcwOTg2QkE4QkQ5RjdGRTRGMTUKLToxMDZBMjAwMDE0QjRDRkY2NDQ2MDA4RjFCMzZCRkIzQjdCNkU2NkY5QTAKLToxMDZBMzAwMDBGMTg3RERDMTlFOEMzRTYzRkQxNDFGQTk5ODkwRDRCNjcKLToxMDZBNDAwMDk3NkRGRkYyOTdDRUE4QzNENDQ1NzZGODcyMTgyMkJEOTEKLToxMDZBNTAwMDM5OEFBRTJGMzNCQUQ2QTVFOTZBMkYzRjA4ODcxNTNDOEQKLToxMDZBNjAwMDM3NThGRTE4QTNFMzBDQTQyN0EzRTM4Q0QxNzRGQzAwRDEKLToxMDZBNzAwMEZGOTgzNzlBOEU1NzE1NTlFMzkyMEVDMjM1NUIzNjYzRUQKLToxMDZBODAwMEUxRjZEMjhDRTdCQ0M2M0VFQkRBQTdCRTlBRDM3RTMyRTMKLToxMDZBOTAwMEY0QzI1ODc4QkU0MkUyNzA5RDVBMTRCOUI5MDhFNUVCQzkKLToxMDZBQTAwMDg5MUYzQ0I0MzlDOEU5QkM4ODIxRTZDM0M3MEY1NjAyMjgKLToxMDZBQjAwMEUzOTMzRkI4ODYyRTQxM0MwQ0VENzBBQkI4QkU1RkI1OUEKLToxMDZBQzAwMEUzNTcyNDZGMUYzRUY1QTJBMjUxN0MwQjE0NEFBN0IyRDQKLToxMDZBRDAwMDNDOENGQzdCMDk1ODdFOTlDNDMzRDczRUYwRkZDRTc5QkQKLToxMDZBRTAwMDgzQjVCRjE2N0YzQTU1MjVGQTUxN0UwRjkzM0ZBMjQ3RDMKLToxMDZBRjAwMEYyODI0NjBERjU2RTcyMUNDRDdCNTk5MkNCQzVCMkU0ODUKLToxMDZCMDAwMEMwNTczMEFFQ0Y4RUY3Mjc4QjFDODZGRTFGQTEyQkM2MzkKLToxMDZCMTAwMDhEMkREQkZFRjYzOUM4N0ZEOUU4NjlDQzVGQzVGOTlGQkEKLToxMDZCMjAwMEM2Q0ExRkIwQ0E2RDU2MzkxNUY0RkQ3MEVCMjEwNUVEQ0MKLToxMDZCMzAwMDgzRDRCMzhBRUE2MEY2RjA4N0FFMjE4NUQ2QzcxRjNCQkYKLToxMDZCNDAwMEQ1MDdDM0EzRTk5RUM2QkY4ODNGM0FDNjdERjgwRkVEQkYKLToxMDZCNTAwMDcyMkVGMDMzOTY5QzhGM0RBRjYzQzNEQkRENDUxQURGQTkKLToxMDZCNjAwMDVGRDlGMEY3RkVFMUNDRkFGRjM5QTEzNzk2NDFCQ0IxMEQKLToxMDZCNzAwMDdDRjJFOEY1NEI4NkE4M0VCMTJBMERFRkZCMTgzRkM2MjQKLToxMDZCODAwMEUwN0RGRjUxMjdFRDBGM0JGQTc3OTExRUI3RUI4QjY1NDgKLToxMDZCOTAwMDU5RUNFODM3OEFCODNEQjBFQzk5ODExOUE4RDdERURGMDcKLToxMDZCQTAwMEY5NTNFMkNCNjU4RkJEQURBMEZGNjZDRkI2Mjc5NUMxODcKLToxMDZCQjAwMDY5NjkzOUMwRjVDMUZDM0IzOEVGRkY3MDYwMDZFQUFGODgKLToxMDZCQzAwMEU1NTlFMjAwN0YyRkU2QjNGQzY3RDZGRTk3M0ZGNjkxQ0EKLToxMDZCRDAwMEE1RkZBQkY1N0U4NUZDNjQ2MzhDRjM5RTFDQjkwOEU3Q0EKLToxMDZCRTAwMEZCREUzRTE3OUU2MEMwN0JGRENFQzY0Qzc2Q0VGMzYyQzgKLToxMDZCRjAwMDdEMzRGMEQ0NTE3MEVBNkI0NTc4RUU1NUMyREY2MTZDOUMKLToxMDZDMDAwMDZGOERGQzhBN0VCRkY3NDU5N0Q4REY0NjVFNDM3QjY2NzMKLToxMDZDMTAwMDU1QjE0MkY3MTFEQTBCMkUyNDdGQkREMTVGOUYwRDlGMzYKLToxMDZDMjAwMDZBNTBBREM3RkQ4MEJBMjA1QTY3REU1NzE5RjAxNzQ3ODIKLToxMDZDMzAwMDFDMTZGODZGMjg2ODlDQTAwNUY4RkU0QzYzRkI4RkZGQkMKLToxMDZDNDAwMDAxQUI4QTFBMzQwMDgwMDAwMDAwMDAwMDFGOEIwODAwOEUKLToxMDZDNTAwMDAwMDAwMDAwMDAwQkQ1N0MwQjdDNTRENUI1RjczQTczQ0YKLToxMDZDNjAwMENFM0NDMjRDMjYyN0FGQzlEMzc4OTJGMDk0ODA0MzEyMTEKLToxMDZDNzAwMERFQjQwRTA0OTEyMjZBNTA1QUE5RjVBQjAzRjI4ODIxQzIKLToxMDZDODAwMEM5QTRGOEUyNUFCRkNCODQ0NEY0MDI5RjhEOTUxNjZBREEKLToxMDZDOTAwMDY5M0I3MEExNTIyMTc2OTBBMEIxMEREQzAxMkMwNjA1NTQKLToxMDZDQTAwMDZGMTA1Rjc4QjE4RDVBMTUyQjI0NjMxNEI0NTc1QkVGQzYKLToxMDZDQjAwMDVBNkI5RkMzQ0M5QzRDODRERUZCRkJCRURGRUYwQkJGNEIKLToxMDZDQzAwMDc2QkJDRkQ5Njc5RkI1RDdGQUFGRDdERUVCMEMyOERFRkUKLToxMDZDRDAwMERDRUE1NDAwRDkzRDZCMzY2NDYxQUI1QUQ0MTQwOUUwNDgKLToxMDZDRTAwMDJCRkFCQjJBRDYwMjg0MDBDNjAzNTg1REQ1RTA3NzYxMzMKLToxMDZDRjAwMEFCNUE0MDczMDBGRjdENDVGRkE3Nzg1QjdCRjBGOTdCQzMKLToxMDZEMDAwMEU1RDRENkI1MzQ4RkI1RjE1N0Q0ODcyNjA1QjY1N0YyRkEKLToxMDZEMTAwMEIwOTE0QTI1RERCRkMyQkJCNjE4NjBBM0YzOUYxRkE3ODEKLToxMDZEMjAwMEZCMkI4Mzc2RDU4RTZENzNFQTNEQkZBNUZFMDYwOUFBQkYKLToxMDZEMzAwMDY1RUFEM0YzMzgzRTY4NzVBOERCNTVCQzlFMEUwQkMyREUKLToxMDZENDAwMDY1MzE3QUYyNTQyNDMyMUJBMDBDRTlBMDE2RkZGQzMwMDYKLToxMDZENTAwMDAxREYyQjQ4ODI2NkE4MDMxQzAxMjk1OUExMjBCNUM2NzIKLToxMDZENjAwMDczMEZBQUZFNjI3NTdDQUMyRkJCQkFDMThGRjM1RTJEODgKLToxMDZENzAwMEJCMkNCNEZFMDc3MzJEMjE3QjMxQjUzN0E2NDFEOTQwMUEKLToxMDZEODAwMDNFMThFRDAzQUJBQTIxMzI2MkYwRkJBREQ5OEU4NTVCRDQKLToxMDZEOTAwMDgwRTkwRTVBNjgxRDkyMjNCNDlEMDhGMTgxQTY3QTgwN0QKLToxMDZEQTAwMDY5MDMwREZGODczQzc0QzREMThEMDM3Q0I0MEU0NUJGQ0QKLToxMDZEQjAwMDZGQzU2NUQxNEQzQjA0Qjk0RDIxMzk2MEVCODQwODQwNjYKLToxMDZEQzAwMDI5RDJBRDk2QjA1QzUyQTE0NzlGMjQwQUQ1NjMwMDZFQ0MKLToxMDZERDAwMDRDRjU3RjkzRDY5OTNCQjQ1MUEyRUIxRUE4RTZCNjEyQjAKLToxMDZERTAwMEZDMTJEREI3MzhFQkYyRkM1RkIzM0U1OEEwOUNFOTE5MEEKLToxMDZERjAwMEE5Q0IxNzVGQjFDMTJBRjhBRjI4QTAwQzI5MjczQTM2RDIKLToxMDZFMDAwMEFCRUY4RkM2NzlFODdFMjY4RDBBQjIxQ0M2NTU3RDY3MkEKLToxMDZFMTAwMDc0MEJDMTgxODg4RkUzRjMyMzMzNjc2NDEyNkU4QzcxMjYKLToxMDZFMjAwMENEOEVBMjkzMTJGMkRCMjdBN0E4Mjk0NUQ4NTc5MDMzMUQKLToxMDZFMzAwMEM0QTc1M0E5Q0NBNzFGNERDMzk5RjFGRThGNEZBNTZFRDAKLToxMDZFNDAwMDk1NTExRThGNDgwMjRGNDFDMjEzRTEwQTFBMUYyNzdDMzkKLToxMDZFNTAwMEI4MTEzRjZCRTlCOTE5OERCRjY1QkM1OEEwQkFCOTUyREEKLToxMDZFNjAwMEU3QTQ4N0Y4MjdGRTEwNkY4Q0E3OTU4QTQzQjU3Qjg5MjYKLToxMDZFNzAwMEI3M0U0REExNzk2QzEwNUEyQjExQkQ3RUU2QTcwMzVBN0YKLToxMDZFODAwMEI5MUQwMjYxNkU1REQwQ0RFRDVEQzRFNzZDOTI4Mzk3NTQKLToxMDZFOTAwMEZCNjlEMEQzM0ExNDlGOUJBMzU2RDdBQTc4RkRDN0IzRkEKLToxMDZFQTAwMDMzMjQ1QTlGMEI1NDlEQkY4NTc5RDQxRjk0QkYzMzkxQ0YKLToxMDZFQjAwMEJGOEUxODdGRURDNDRGRTc0MDdFM0E0MDY1M0VBNDdCMEQKLToxMDZFQzAwMEMxQkI3NjFDQ0YwQjExNUNDNzIzRDMyMTI0MzM4ODU0NUMKLToxMDZFRDAwMDUwMTEyRjM5RkEzQTMzQzEyNzExN0Q4NDFGNUE1RkY2QkEKLToxMDZFRTAwMDAyQjEzRUYzRkI3MkExOTVDN0U1NDM5OERCNDJFOEU2QTkKLToxMDZFRjAwMDM2QzNBMTRBMEFEMzczNEE5N0VGM0JGMDk1MzM0NjhGQzYKLToxMDZGMDAwMEQxREEwOUMxMzhGRkI5NDI5Q0JGOThCOUVEOTYzQ0I0QkIKLToxMDZGMTAwMDdFRTNBRjlBNzFGODg3Q0E4M0JFMkExQ0E3Rjg1RDNFNEMKLToxMDZGMjAwMDNCMkVFNUZGNTRDRTIwMTA4MkY1NzIwNTQ4QUVBRTlFOTIKLToxMDZGMzAwMDg1NzNDMThEQzNCRDM2ODg4Q0E0RDk4MzRDNUZDQTQ4ODQKLToxMDZGNDAwMEQxMzdFQzhCMUQwNTE1MzFFOEM3RTdBQ0E3M0UzQzQ1QjIKLToxMDZGNTAwMENGNTkyMTZFMUNEMTIxREY5QTQ2N0M3Rjk4MkU0QzFFODIKLToxMDZGNjAwMEM4Rjc5NUE3OUFCMjlFOEI5Qjc3QUI5QTlBNDVFQjg0MEMKLToxMDZGNzAwMDg5MzBGMTJCMzlGNjNDNENDQTQwMjMzM0YwRjlDRjU2MTcKLToxMDZGODAwMDA1QjM5RUIzQzZGOEQwRTJGODY3QzZBNTBGMDE5Q0YyMjAKLToxMDZGOTAwMDRERUMxMzhFQjM2MjM4NDY1Q0IyOUQwQkFFQjZBQkNERjIKLToxMDZGQTAwMDU5OEM0M0M2RTk0QTY0OTAxRERCQ0Y1MjhBNDJCQzdFQUQKLToxMDZGQjAwMDY4OUM3ODIzREE2MThCQzMyNzQ5NzhCRDRFNzU4Nzg4MzIKLToxMDZGQzAwMDNGRjVBRUYwMkNCNjEzMjZCQjMxN0RCRTFBQzlDNzcxOTIKLToxMDZGRDAwMDdEOERFMDI1QkU2RURDNzNDMzY5RTI2QjlGMDczNDdCNTkKLToxMDZGRTAwMEJBQzA4NTZGMDJEOTA5QzM4RTgwMjZBMzdDRDc0OEUzMzcKLToxMDZGRjAwMDFDMTJCNkY1RUQxRkJGRjQ3QjFDOUZEMjI5ODM4Q0Y3QzIKLToxMDcwMDAwMEZCNzBDREREQjQ2RUM1OTc0RTQyNzRDMkZBMDRGRDZFQkUKLToxMDcwMTAwMDc2MDhGRDMxRDY2OUQ2RDc3Rjc0OUQyODc5OUU5RkU1ODUKLToxMDcwMjAwMDIwOTNGRDVERkYyRkY0N0MzRkE0QjZEMkY4NEQwQUJFM0QKLToxMDcwMzAwMDlBRTZFRkIyODZCNjIzMUY1NjFDOTExOTZGMkJEQUE0N0QKLToxMDcwNDAwMDEwOTA5QzE1MkQ4REZBRjdCRTI4ODNDMDFGRjBGRDdCOTQKLToxMDcwNTAwMDdGNTVDQTc4OTQ2MUY0OEZBNkUxRjM4MUNENTYyRjVBRkIKLToxMDcwNjAwMDRDNDhGNzI1RkFBQkNDRDk0MzQwOEJDMzAxMDQ3RDJGQTQKLToxMDcwNzAwMEU3MjJCRjE2RUJGQ0RBRTg3Qzc4MEJEMUIzQTk0OUY4MUMKLToxMDcwODAwMEE3RUNFQThDODRGMTlGQTU1QzZGNUI4QUYzNkI3OTQ4NkYKLToxMDcwOTAwMEQ3MTRDMjRERTdGMDM1RDg1RjVFMjBBQjMyOUE4ODlDOUEKLToxMDcwQTAwMDA1Rjk4OUZFQjFENUZBMEVFOTlGODZGRjA4REY4NkZENTYKLToxMDcwQjAwMDVBNEFGNjhCRUM5MDdDM0ZGQkJGNzMyMEZDOUYwMkMyQzgKLToxMDcwQzAwMEZGMzVBMEJEOEFFMDdDQ0IzNjg5RTc4REY5NkEzQTFGOEYKLToxMDcwRDAwMDU5NTM4MEVEMURBMUM0RUJDQjQxODlGNUQ5Q0ZCQTQ3RjcKLToxMDcwRTAwMDkyMUQ1ODA5NDNCQzc2NjkyMEZFMkRFOTg4N0YwMjg5RUMKLToxMDcwRjAwMDBCNUM0MjBFMkUyRkQ5OTdGRTU3NjRBRjVEQjA4MkY1MjAKLToxMDcxMDAwMDk1Rjg0RTc2NDRFRTE5QjE3MTFBQ0UxN0U4QjI0MjQ4OUUKLToxMDcxMTAwMDIzNzk4OUZCRkQ5QkU1NTBCMDM4QTYxRkZENUQ3Qjk4NjgKLToxMDcxMjAwMDFGQ0JGMjkwMUY4ODRGN0I2RTIyRkY1M0I0NDRGRTNCNkYKLToxMDcxMzAwMDQ3NjY3Q0FEM0M1MkJEMjY3RUNBNzM5OUZGQzg2RkEwREUKLToxMDcxNDAwMEY5RDMyNjk1MjQzRUFGRjM3QjI0RkUxM0ZDRjYzMTlENDQKLToxMDcxNTAwMDRCM0IyNDc4NEMyMjNFQUYzRjVDQTAwREU0NkI0M0M3MTEKLToxMDcxNjAwMDIzMzZEMkZGOEJGMUQ1Q0NDN0QxRTlCQTFERDFGOTc4M0UKLToxMDcxNzAwMDBFM0EwRkU4QThBQzc2NzhEODk0RjAzQTE0QjU3NTNBODAKLToxMDcxODAwMEUxQjQxMEY1OTY3MDYyRDY2QjgzN0ZENjJDRDU2N0MzQjkKLToxMDcxOTAwMDcxOTdEMTM4NUM1RkJFMjMyQzk0RDEwQkNBMDlDMkNCNDYKLToxMDcxQTAwMDIyNjE3NzlCNTUxRkZCMjNDM0RFM0EyRkQ4RUQ3N0UxOTEKLToxMDcxQjAwMDJCNkNCM0U2NTUzRTQ0MzhCQTUzNEE2RDk1MkIwN0VBMUIKLToxMDcxQzAwMEVEQkEzMUY3QjBGRDJBNUM4REY2OThGRDZBNjI5QzE2MjcKLToxMDcxRDAwMDVFRTVGMDJFNDY3QTlFNUMwNURFQzVDMzAwOUU1QUE1OEMKLToxMDcxRTAwMDcyNkI4RURGMEM3RERGOENGMTlCNURGODY3OUU1NzQxRTMKLToxMDcxRjAwMEZDQUU1NUM5RkU3ODU1QTJGMzYxMUJCMDlFRjY5NTQxRDEKLToxMDcyMDAwMDY4MkJCRTNGMUNGOUQ0QTM5MUJEMkU4RjVFNUY4REYxMUMKLToxMDcyMTAwMDQ1NjAwOTU0NTM5Q0YxQUYxOTIyQUU3QjQ2NkY2NzY1RjgKLToxMDcyMjAwMEQ4Qjg1RDVCNkQwMTFGQkVBN0I3NTMwRTQ5NDg1RkFGNkQKLToxMDcyMzAwMEVBM0I3MjE1RDk5RDRFQUJDNkYxOTUxQTdERTk3QjdDNzAKLToxMDcyNDAwMEJGNDI1RDhCRkNDQ0IzQjQ4RUEzRjdFMkY4RDkyMTlDOEUKLToxMDcyNTAwMEI3QUZGMzVERjdFRDcxN0VCOUI3RTNEMTUxMTQwN0ZEMTgKLToxMDcyNjAwMENDMDIzNUUxMjRGMUQwRjI3NDBCQzczMUJEMjNERkYxM0MKLToxMDcyNzAwMEUwQjJBMURFMTFCNTAxRTJFOUMxOUVDNjZBOEFBN0VFQkQKLToxMDcyODAwMDc0NkE0Qzk3QUQ3RDdBQTQ4MEYxMzM4RkUzRTNFNzk2N0YKLToxMDcyOTAwMDBFNjFCQ0VEM0QwMzIxRDJCQjU5RjJBREQ3OEVDMUZFQ0MKLToxMDcyQTAwMEU0NTcxNUFGOUQ5NUNBNzdGREMyMDkzQzg0RTVCRUUxNjAKLToxMDcyQjAwMENCOEE0REM0QkYwMEYyNzMzNTVGNkMzRDQxRjI3QUY2NjQKLToxMDcyQzAwMENGMEE5MERFNTUzNjNFRkRBRTFGRDc3OTM4MTdEMTMwNDQKLToxMDcyRDAwMDA5NjA4MjJGNUMxMUMxNTEzMzNCRDNBNzkzN0UwNzRFQzcKLToxMDcyRTAwMDAxRUJFQkY4NkUyNTAxQjcyMEQ3MUQyQTIwQkJGMjg2RjMKLToxMDcyRjAwMDA4MEYyN0JFNjFCQTBGNDE5OUUyRkZDOTNEODlEN0E3QTAKLToxMDczMDAwMDVFMDRFRkZGNjJEODBEMzc3ODA4RUY4RkFERUE4MDc3MjMKLToxMDczMTAwMEM5MkZFQUZFMzMxRjE3OTg4QzlGMDZCRUY3Mzg2NzNDQ0IKLToxMDczMjAwMDkyMkVFMjc2OTk3MEVCNTU5MjhGN0YyNzQzQzRGOTFCMUEKLToxMDczMzAwMEJFOTQyNUMyNjU1RjE0QkNBQjkxNUY3RDhCRjM3OUREOTQKLToxMDczNDAwMDdEOUY1MjQwODZFRDk3RjJFQzcwOTI3OEVCRDdFOTM2NEMKLToxMDczNTAwMDk2REZDRjZDMDJGNzNGNUJFQTBBMzVFMTdBMEUyRUFEN0QKLToxMDczNjAwMEJEQkMwN0RGNzdGRTlGRkM5N0FCNUYxNzA3QTM2OUIxMzIKLToxMDczNzAwMDRDNjI3OUE1MTFERkVGOUNENzIyQjExRTQyNkIxRUYxNDIKLToxMDczODAwMENEM0NERUQwMTM0MzZGMEM3REM5NUIzQUM0MUY0QUYyN0IKLToxMDczOTAwMDlFRTFCNDNFQTQ2RkM2RDI5MTkyOEQ3MEJCNUYwMjkyMDMKLToxMDczQTAwMDYzRUY2QUE0RUI2QkUyQzcyMEFDMkUyMDdBMDIxRDlGMkMKLToxMDczQjAwMEQ4Qzg1RjNCM0EyNTVGMjhDOUY4QzNFOTZFRTY1RkVGOUUKLToxMDczQzAwMEVBNjBEMzU0RTRENzNEOEJGMDU5RDIwQjVCNkI3MUIyQkEKLToxMDczRDAwMEY5ODNCMEExMDA4MzQzNjg0QkQ3MDRFRTFENzAxQkU5MEQKLToxMDczRTAwMDI1MjhBRDc5RTRCNzdCM0JBQUJFNDU3NkZEMzFENDQzNzEKLToxMDczRjAwMDhBMUI3RTY2RjUzMkREQzE3QTgwRURDNDE2MEEzQ0IxODcKLToxMDc0MDAwMDVGNzgzRDZDNTkxQjk3NDc3NkE3NEYzRjk1OEVGMzlENEMKLToxMDc0MTAwMDRBNTc3OURFNENCRjU3MjJCQUJEN0ZGQkNDNERGM0Y3RkMKLToxMDc0MjAwMDdENkU2N0Y5RTU5MzBFQzdDNTZEOUZBNjBCRkVBQ0M5Q0YKLToxMDc0MzAwMEYwQkRDNjc4QTlDOTYyNjNFQUY1QkJCRDhCMkIwMEFFNkYKLToxMDc0NDAwMEVDNDA3RUM3RTEzMjI2QjcyMEFGM0JDMzFGNjQ3QTMyREYKLToxMDc0NTAwMEJBMzE3MUUyRkNDQkE3NTFCQzFDRDA4RDMzNDQyNDUwMEYKLToxMDc0NjAwMDI2QzRFQzczQTVBMzMwNTIyMEYyODc3MDBFRjIzN0EzMjYKLToxMDc0NzAwMEU2Qzc2Q0FGNTNEMDBFNTMyODBFREQ4OTc5MTE1QjY0REIKLToxMDc0ODAwMDdDOUU3NDlGRUM0MkIzMkFFMkFDOTY3NDYxRTc1QTFFNkMKLToxMDc0OTAwMDUxNDJDREY4REVDRDRBNEZDQTMwNkM4QjdEREEwQzQ1QjcKLToxMDc0QTAwMDIzN0I1RkM2RjNFNkRFMDVBQ0RGMTY0NzQ4MjIzQkU0RUMKLToxMDc0QjAwMDJDRkQ0NUZBODVCODZCMkFDMEVFQkZDOUNDN0ZCMzlDQzIKLToxMDc0QzAwMDQ2RUI3QUIxMjZDM0ZGMDVGMTc1NkM1N0Y0MjA4NTZGNDIKLToxMDc0RDAwMERFMTRDODI0QjlDRTkyNURCQ0VFQzk2Nzg1RkQzMURCRjAKLToxMDc0RTAwMDFCMzlGMkFCOUY5MUJERTlEM0YzQTcyNEY2RTY3NkYyMDAKLToxMDc0RjAwMEFGODZCRDAxQjlFQzEwRTE2N0VBOEI3QTlBQTlEQjE5NzYKLToxMDc1MDAwMENDM0U5ODBGMTM4RkZBOUI1RDQ5RUNDQjI0QTg0RTQzRDkKLToxMDc1MTAwMDE2NUZENEJFOThFNTg4QzFGRTg1N0UyMTMyQTNBMjBCRkEKLToxMDc1MjAwMEY1MjhFRTc5QjMzRDJBQzhEMEZEQUY2RThGQ0VDMUI0MzkKLToxMDc1MzAwMDlDQUJCNTE4NUVDQTU3N0EwRkQ5RTNGMDYxRDhBMTE4OTEKLToxMDc1NDAwMDVFNDI4QzMzRjM3QjI0NzA1Q0U4QUJBNTY0M0Y4RUNBNEIKLToxMDc1NTAwMDY5NjQ3N0E2QTNEQzcxRkUyRTVENEZEMjNGMEQ3RDhCNTMKLToxMDc1NjAwMEU0QkZBMUYzOUExNEMyRjU1MzVENTUwRTUyOUIxNUI5QjEKLToxMDc1NzAwMEIyRjY2NzhDOUY5NTAzRjM4M0EwQzM4NUVDOURGMTVFMDMKLToxMDc1ODAwMDJCMzgzNEQ3NDhFMjg3ODVGOTIwQUJEODhGN0I3RjdGQjMKLToxMDc1OTAwMEFCMzQ5QkVDMjIwQTJENkRGRTk4QzFFREMxOEE1QzFCQjkKLToxMDc1QTAwMEJGRTdBOUFFOTIzNEMyOTEwQjMwQkY0NUY5NTU3NjRBNzgKLToxMDc1QjAwMDFDMjc5ODcxNkRDNjcxMzNCRUMwQzI3OTYzMzVDNzEzN0QKLToxMDc1QzAwMEIyMTRENkY3MUQxMkYzRDJFMkUwNjRGNjUzNzc2MTFFQ0YKLToxMDc1RDAwMDRFNzE2QjdGMTdGQTJENkM5RjQyM0Y0RjcxNEFCMzZCMTAKLToxMDc1RTAwMDE2QUZEQjU4QUY0MURGNURBOTMzNzJBMDZDRTBGQThEQjYKLToxMDc1RjAwMDM2RjBCOTBDQTFDQ0I4QkUxMkI1MTE4RTAzOUZEQjEyQzgKLToxMDc2MDAwMEFFMUJGQzFDOEMwRjA2M0ZBNzEwM0ZBNUZGM0UzRkE3RkIKLToxMDc2MTAwMDY2MDhCOTlBRjlGQTNGNUQ3RkUxOEE0OTkwNkM1RkUwQUMKLToxMDc2MjAwMEZGOTdGNTRGMDVGRkVGN0I0NEJFRjU1QUFFMjc2NjRGMzcKLToxMDc2MzAwMDBBNTdDQzk2OTcyMTFGMjY1MDNDRUU4REQ5MDcwN0ZFOUUKLToxMDc2NDAwMDIzN0M4REVENjg2NTdCMzMwOUVEMERDNTk5MDU3NTYxNkEKLToxMDc2NTAwMEI2MkYxMzczNDVCRTY0QjYxQjU3NzZDMjRENjQxRjI3MDEKLToxMDc2NjAwMDQ3MzAyRUJEMDRGQkYxMjlGRDQ3MUVFRkUzRkMzMjAzM0EKLToxMDc2NzAwMEU5MUVGN0ZDODJFNUJCRjBEMjU4MEQzMkU3RTI3QkM2OEIKLToxMDc2ODAwMDc2MkI1RUYyN0JEMDlEOTk3NDVGQzBFQzM3OENCOEQ0QkEKLToxMDc2OTAwMDg4NDdDREUzOEM3OEQ0RjAyNzBEM0ExRkZFM0RDM0ZGMTkKLToxMDc2QTAwMDY0MDY1RDU3RDUyMEU5MUJFQTU1RjgzMTJGQzM1RUEzNjgKLToxMDc2QjAwMDc4QTEzQkJEN0EzN0RGMUYxOTBFNzIxRTUwMDIyQUVERUEKLToxMDc2QzAwMEVCQTBCRTcyMUM1NkU5NzA0NUU0QjEwM0Y1RDM2OUQyNTQKLToxMDc2RDAwMEMzMzBGMjg1RjYwOTgyMkU0QjY4OTgzNDkwMEUwQ0I3QjEKLToxMDc2RTAwMDgzMTRGN0UxMDNGQ0ZFQTVCQUJGMjhDNDMxMkNCNDA2MEQKLToxMDc2RjAwMEUwRjhCRjcwMkNGOEM5RUYxNjk2NjM4QkVCM0NBNkM3NzkKLToxMDc3MDAwMDIzMkY5OTVBQTRGQjc5RTJBQjU1ODFBMEJERkMxRkE3OUEKLToxMDc3MTAwMDk3NDgyQzI4MjdGRUY4RkU0MEVCNzdDQ0Y2MzFGRDA1ODQKLToxMDc3MjAwMDJBNzgyOThFMkY1MEMyOTIxN0RGOUY1MUE3NDkxNzM2MEEKLToxMDc3MzAwMDkxMEMzRjhERjMxNUNDRDVEODVGMTYwQ0M1M0U4REE3QTcKLToxMDc3NDAwMDc4Mjc4OTVDN0EzMkFDQkNDRTdBNDdDRjYxMUJGMjIxQjQKLToxMDc3NTAwMDMwQjc3MUI2REIxMjhCRDNFRDU2QkZBRjgwRjY4RjNBRTAKLToxMDc3NjAwMDQ0QkMwRUI0REYzNzlFRUQ5MjQ0RUI1MTY2MDhGRTA0MzQKLToxMDc3NzAwMDU0OTE1RkI5NDA2NUJCNTlBOUNCQjFEMjMxOTdGNzc3MjYKLToxMDc3ODAwMEM4MjdEQTI3MEY1Q0I3QTRGOTc4NzBGRTdDRDA4MjkzMDMKLToxMDc3OTAwMDYzNzZENUM4N0Y3MDFBQTBGNzk4RUQ2QURGQkVENzJGNDEKLToxMDc3QTAwMDBCQTIzRUJFRjVCRjNGNDkwNUJDRkYyNzI1OUE0QUZDMDgKLToxMDc3QjAwMDM4N0RGRjg5NTQxRkYyRTNBREZCNDVGRUYyN0Q1MzdDMUIKLToxMDc3QzAwMEE0NjQwQUI5MkVDRUFDRkU4MkY4N0FEQkFBQkY0RDg4M0IKLToxMDc3RDAwMEI3MkZCMDMyOUJGNUUyOEU5MDRDQzlGMDA1RkQ1OUJFMzMKLToxMDc3RTAwMEMzQzk3QkNGNDZCRjNFOUM5OUQwMzdGNEEwREUwRThEMzcKLToxMDc3RjAwMEM5RTJFQTY5OTkyMjJGQkE2M0Q3MTYxQkU1RDE4QjMzMDgKLToxMDc4MDAwMEZEQTk5OUQ4M0ZBREM3N0ZBN0RCNTM3OTNGQzBBMDY3REIKLToxMDc4MTAwMEQxQUU3MTM2RTJGNzlGM0FFRDEwNjEwM0Q5NkQxNTcyNjIKLToxMDc4MjAwMEY2NUQyRjREQTBDRDdCRjE2N0E2RjNGMEZFMDIxQkVEQjgKLToxMDc4MzAwMDlGMkY5MTIwMkFGNkI1RTBGMENGQjFGRjVFQUUwQzZCMjIKLToxMDc4NDAwMEJEMDNEN0IxRTQyREQ1NjY0MUY5MkM5OTBFRDEyMEVBQkMKLToxMDc4NTAwMEQ1QTJCQkE0MzVGN0UyRjg0NTdFMTc0NTcwMDNENkI5MkIKLToxMDc4NjAwMDMwOTg5OEU3MkZEM0UzOTVEQjFGQjI5QUYyQTRDNkMzRjIKLToxMDc4NzAwMEI0NUZCNjE4RTdBMTdDNzY0OTZCRTJGREZFQUUzQjBGMjQKLToxMDc4ODAwMEZGOUNGQzQwODc4REZEQzBCMjhCRTQ0RkUzMzJGNTc4NUUKLToxMDc4OTAwMDY1MDI0Q0ZDQUE5NEUyOTVCMjFGOTU2OTgzREIyNTIzMEYKLToxMDc4QTAwMDVFMzlCRDBBMDgzQ0YwOTc1NTBFNkVDRkFDNTJCOUZENUIKLToxMDc4QjAwMDQyQjdEN0NCM0IwRTFDNjY1QzJCREQxM0M4Q0YzRUQ1NDEKLToxMDc4QzAwMEY1QUVGMzE2MkRFNjM3QkVCOUU1OTM0MzNGQzc3RTA1MDcKLToxMDc4RDAwMEFEQjM5OEVDNjVDNDRBNzhCQzRBRjcxQkNCRjQzOEE0MjYKLToxMDc4RTAwMEUyNzNCM0RGMzhGMDg3REY1MzlFOERFQkRGQ0UxOUQ3MUQKLToxMDc4RjAwMEE1QzUyM0I3ODJGMjY5M0MxRjBDM0Y2MkU2NDc3RjU3NUMKLToxMDc5MDAwMEE5OTM3MDMyM0YzMzcxM0ZGNjdGQ0E5N0MxOUVBQjk3MDAKLToxMDc5MTAwMDExRDc0OUVDODdBMTRGNUY2NDA4N0MyRkRFMzY2RjREOEQKLToxMDc5MjAwMDNFQkVCRjc5REYwNzQ1M0RDMjJFQkQwNjlFMTg1RUQxMjMKLToxMDc5MzAwMEQwMzNERTk2MDE0NEQ3MjIzRUZEOURGRjc0OThGODc0NDMKLToxMDc5NDAwMDk4RjAzNjg5RkE5N0YxRkREQzJBQzQyRkVBRURCMkNFMjEKLToxMDc5NTAwMDBGREY4NEIxQUM1RkI5OTY1QzZBMjNCOTk0NUY5QTcxMEEKLToxMDc5NjAwMDY4QzY5RjE5NkZCREQ2OUUyMkIyMEY2NjlDRjU0QTg5RTQKLToxMDc5NzAwMEU3NjQ0NkJCMzQ1MzlDNUYyQ0Q2N0NCMzI4REY0NUI3MDUKLToxMDc5ODAwMEI2NDZFNUY1MDhGQjc3NUE2OTNERkM0M0QyREI2RDEyM0MKLToxMDc5OTAwMEU3ODdGNUNGQjQzRDRERjZBOEY2QjczRjcxOTMzREZBQjIKLToxMDc5QTAwMDUwNjlGNUQwRkJFQUI2M0ZFMEY2OTE1RDUyODI2RTdBRkYKLToxMDc5QjAwMEZFQzM5MEIwNEJFNkY3NzVFQTdDMzRDRTA1MkVGOEE1RjEKLToxMDc5QzAwMDg3QTI2QkVFNDM3RTlDNDc3RDI2RkQ2RDY4RkZFQjlBOTgKLToxMDc5RDAwMEZCMjhDRkYwMzlBMjk0Nzc5RTU2N0E2NjExMUQ3NzJDM0EKLToxMDc5RTAwMDc0MzUzNjc5MjlCRjRENUM3N0VERTMzRkYxNjhCQzdGOTQKLToxMDc5RjAwMDFDMkNEMEY5QzdGOTZBQzMzNkFCMzc4MkYzMzZCQzIyRTgKLToxMDdBMDAwMDdCRTkzNTAxODhGMkZBQ0NDRjA3QzJFRkRBQzg3RUFCNEEKLToxMDdBMTAwMDE2ODgxNjRFMUQ3ODFGQzU2ODIzQkQwOUI0QUZGQjU4RTQKLToxMDdBMjAwMDc2NTMyQkU0MTUyMDNFQzc5RDMzRDRFODc2RDg4Q0UzRkIKLToxMDdBMzAwMDVEOTlGQUJFODg4RTVGRTQwRkVGQTcwNjkxMkVEQTNGQkMKLToxMDdBNDAwMDgyOTBCMEM3Q0RCRkQ5MzhGNjZEQTRFRkNDQjYxN0REQTQKLToxMDdBNTAwMDUyNTlGQ0I5QzI2QTk2NDc3RkY4RjY1RjM5MkM4M0UzMjYKLToxMDdBNjAwMEI3NTdDNzdCMkM2RTA5RjE3MzVBODcyNDBFODMzQTQ1QUEKLToxMDdBNzAwMDVCNjc4REI4Mjk2RkFCREI2MkY1MDZGMTcyNUQ5QjBDMUQKLToxMDdBODAwMDBFRjI1RjI3RUQxQzM3RDRCNTdEQzJGOEFDOTM3QzUxNjQKLToxMDdBOTAwMDY5MUMyRkMzMkRDNUM1MTFDQkRCREU5QjQ1RjY3Njc5NUUKLToxMDdBQTAwMDlFMEM3MzUxQTU2QUY3OUMxM0UzN0QxMDREQzFGMUNCNzkKLToxMDdBQjAwMDc3QkYzREVCODdENDQ3QkMzQjkyQzhBQjJBN0NDMDI2M0UKLToxMDdBQzAwMEY0QzYyNEFGRjBEQkIzMjgxRTZFRkVDRDY3MkM4RjBGRkIKLToxMDdBRDAwMEY3NEI5MDUzM0NGMEY5OUEyREVGRDlDODlGOUM0MUMxQzgKLToxMDdBRTAwMDY0QTYwQjdFOTFERjA4ODRFNTg1QjZCNDY0RjI4QjVDRjYKLToxMDdBRjAwMEZGQkI0QUJFQ0ZGQjdGMTc5M0UzN0EzQTZCMUJDRjc4NkQKLToxMDdCMDAwMDdGRjI3NzQ4NDdDRDlCNzZFRjVDN0FFRjkzNzdCQTAxQTcKLToxMDdCMTAwMDcxRjA4MUQyMjg3MEZGOEIwNzNDRTQ4NzZCQUM0MThGRkEKLToxMDdCMjAwMENBQURCODVFRjNDQkJCMTk4RkNCOEVERkVEMTFGOThERUIKLToxMDdCMzAwMDJGNEZFQzE3MDVGMzY4OUQ0QjM2N0Y5QkQ3QjkxNEZDOEMKLToxMDdCNDAwMDhDQzc5QTVGQzhENUI0NEY3MzRFODFEOUJCOTNFODREQUIKLToxMDdCNTAwMDY1OTY4OEI3RUNGMDgzQjFGNzg5RjMwMEEwRkNGQzAzQ0QKLToxMDdCNjAwMDdEREYzNEY4QjJDQzcxOUIxRDZFNEM5QjE3QjdGRjY0NjAKLToxMDdCNzAwMENGMTJGNjJBMDhBMTNGRDJCOTZBMDBERDJCOUY4MzFDRTEKLToxMDdCODAwMDNGMzc4QkU2QjlBQjU4NjlBNDczMjI1QzdGNTBFNzk3MDcKLToxMDdCOTAwMEY0MTVFRjBCODBBNkM0QzU1OTU1QzdBRkNFQTE3RDMxRjIKLToxMDdCQTAwMDNCRjREQkZFNTcyNUM3RDUxQUM1M0Q3MUNGMzFERjNFMEIKLToxMDdCQjAwMEQ4NkExRjIyNUQ4OUFEMjdGOUJFRTlFRDU5ODZGRUMzNUIKLToxMDdCQzAwMENCMTA4N0E3QzA4RTBGMTg0RjgwRkUzQjJENTdGNDFGOTgKLToxMDdCRDAwMDIzN0Q1Q0U0NkE0QzQzQkU3REZBQ0FCQjM2M0FENzBBQzEKLToxMDdCRTAwMEUyN0E4NjExQkREREVGNzExRkJDRDkxQThEMzdFNjBGMjEKLToxMDdCRjAwMDc0RDg2M0U3ODFBNEQ3REJERTMzRTk3NUUyN0RGNERGNzcKLToxMDdDMDAwMENDQ0YwMEE0Njk5NEI3N0Q2MDhCQ0UyMjdGMUVDNEY3RDEKLToxMDdDMTAwMDUyN0RDMUQyMERGNjg0RjNDNjE4NUU0Q0U3OEJCQTdFNTYKLToxMDdDMjAwMDFBRkI5Q0NCNENGMTk4RDE5QUVEQzI5NTU5ODk3NjAxRkIKLToxMDdDMzAwMDM2NjcyNzNENUYzNEU3MjE3NUQ2RDBBRjg5M0Y3NTI3N0EKLToxMDdDNDAwMEVEOUNCRkQ0QjUwOUZEQzM4MDNBM0EwQ0Y1RTFBMzVEQzQKLToxMDdDNTAwMDg3NUVCQjA1RDdGMTUxRDg5QTM1OTdERjk2Njg2RjZCNzEKLToxMDdDNjAwMDlFNDJGREM1RjEzMkYyM0I4NUVERUQ2NzFDNEYxOUZFREEKLToxMDdDNzAwMEU4MjMxNzVFMUM5MzQ0NkZGMTdBNTJCRDc1MDFEQkIzQTQKLToxMDdDODAwMEZGNTc3Njc2RDkyMDc2RjZCQjU5MDNFMjg0MzQ3QzBEMTMKLToxMDdDOTAwMEZDRTU4OUU1OTc1MzdDNjFFNkFGNjE1RkNENzZGMzkzQjAKLToxMDdDQTAwMDRDMkRBOUREMDRERENGMUI3Q0FDREQ3OTk2NzE3QjNFQ0MKLToxMDdDQjAwMDRGOUMzNzM1NkNGQjJCRkIzMTY0NkJENDhFQjg2RDA4NTEKLToxMDdDQzAwMDdEQ0NGRDA3Qzg4RjcxRkZDMDdDNjk2Q0IyNzUyN0YyNEYKLToxMDdDRDAwMEQzN0NGRjMyOTIyREU3MjNEMUVGMTM5RjY1OEJEQjJCRjMKLToxMDdDRTAwMEY2RTc1NDNFQ0Y2RjI2QkY0OTc2NUE1MzgxRTQwODMzRjYKLToxMDdDRjAwMDIwNEM3MTg3RDRGOUZDNUZFOTdERTZCQzIyMzgwMzQ2NEQKLToxMDdEMDAwMDM2RjJCOTJFQUM4QkFGQ0YwOTJCN0EzRDQ1MzA3OTdENTkKLToxMDdEMTAwMDRFQjMyRDc2OUU0QkY3MDczQkNGN0Q1RkI3NTc1RTk3RUYKLToxMDdEMjAwMENBRTUwOEQ2MkM0RDRFNTY1N0UyQURCMjI0Q0QyMzdFN0YKLToxMDdEMzAwMDkyMjVDRTc3NEFCM0M1QkE4RjY1MDk3OUI0QzhENUZBMEEKLToxMDdENDAwMDQ2QTNDODk3NjgwRjk1RUQ1RkJBOUJDRjgzQUQ3QTdENDgKLToxMDdENTAwMDA2Q0U5Q0NCRTcwNzRFQ0IyN0M4MTJEOEJEQTE3QThFQTIKLToxMDdENjAwMDQyRkJDMzE1OTYzQjRCQjFERkI1RTFGNjM5MEFFMkM3REEKLToxMDdENzAwMDNCRDVCMkE3MDRGQjJGNkM1ODJDRkE1NzVBMkFBQzA4RjMKLToxMDdEODAwMEZEQzc4MzRCRTZDQ0E0N0QwM0NCREIzRkE1RjUyOUFCMzgKLToxMDdEOTAwMDE1QTBGQTkxRDI5NkY3Qjg3Rjk3NTU5QzVGMzUzQ0JCRkEKLToxMDdEQTAwMEI3ODZERURGMjBBMTIwOTBGRjJERUU3MDIzRDczMUU0Q0YKLToxMDdEQjAwMDgyQkE5QTM2OEZCNTNEN0VCQUJGMjYwRkYzNzk5NDQ3QzMKLToxMDdEQzAwMDI0Q0RGRkRCMkNGMjJCOEU4ODVCMkJBMUJDRDJCN0YxMkMKLToxMDdERDAwMDdCNzg1Rjc5RDk0QTM5MjFBRTUzRUM4MzhGREUzMzM1MTYKLToxMDdERTAwMDk3RUNFRUZGODVGN0ZGNUI1NkY2RTBFRjNGRjNENEI1NzcKLToxMDdERjAwMDBCNjhGQzY4MTk1NDE5RTcyQjU3QjQyQUVBREIzMUJGMkEKLToxMDdFMDAwMEE2QkNDRDkwNDNCOTIyRjg1RUU2QjI3MTNFRDc5MkVFQTEKLToxMDdFMTAwMENCMjUzQzFEMjM5QzY2NUY3QURCQUNENzBGQzk0RTgxMTYKLToxMDdFMjAwMDAzMzlDREQyQjgxQkRCNTc3NEY5QkZBQUYzODNGRTY4QzAKLToxMDdFMzAwMDVGQTA2RjVGQ0U1NkFFNUI4MTY4MTFDOTU3OTZCN0I2MkIKLToxMDdFNDAwMDExM0ZBMjREMEE2Q0E1RkRENzdEOEZCNzExM0U1RkI3REMKLToxMDdFNTAwMDM5NzhGRkU4RTZCNEY1RDYyQjkwRTQ3MjQ3RDE5RDA0NUIKLToxMDdFNjAwMEZFMzdBNTVENzc1M0JCMkZEQkRGOTMyNUU2OEREMEJDQjYKLToxMDdFNzAwMEI3N0M1RjE2RjNCQTFBNTNDOTdGODIwRkY1NEFFQ0QzNjkKLToxMDdFODAwMDcwRkMwRTdFRDQyQkEyRjkyMEVBRDUzODMyMDU4OTc1MTQKLToxMDdFOTAwMDRFNjYzQUU0QjQ1RDRDQzdDRDc2NDFDNzgyNTA0OTczMTMKLToxMDdFQTAwMDBGRDIzMUNFMUVCQThDRjIyQjdDN0Y5NEU0NzAwQjg2RkQKLToxMDdFQjAwMDVCODRFNzYwMjE3NDkxREM1RUJGRURDQTJENjI3RDg1MzUKLToxMDdFQzAwMEFDQUZBQ0ZGN0NGRTdFRTY0OTlBMkY4MEYzRDMzOTZBRDMKLToxMDdFRDAwMDQwRUFFMUZFMUVDNUExMDY1NTYxREYxN0M2RURCQjNEQjgKLToxMDdFRTAwMDBCQUQyN0NBQzRGRTdFMzNFNTFENTNGNUJDRDhEODdGNDEKLToxMDdFRjAwMDMzRUEwRDI2NzZGOUFCNUM2NEIwRTU0RTk5RUNDQTM5RUQKLToxMDdGMDAwMDhDRDdDODhFOTlGN0REMjY5QkVDRUZENDhFOEZEODJFQjgKLToxMDdGMTAwMDVGRUMzQ0QwOTlBRERCRTM3Q0M4QTc3NTg0RTkzQzkwNkQKLToxMDdGMjAwMDAyNUVERDRGN0FFOTNDMzA4OUZFQzc5RDA3NjY2NjBCMkQKLToxMDdGMzAwMDM5N0RFRDc5RTA5REJBQkREMUE4NEUwRUQ3RDE4RjEzMTIKLToxMDdGNDAwMDkzRENGQThGMkU4MkYyNEFBRTQ3Njg4NEY0QzFGRDZBNTAKLToxMDdGNTAwMEJCQzlGRTFCMzgxRkYzOEE3QTNCRDlCMzMxQUZDMDZENjIKLToxMDdGNjAwMEI0REVBQkY1RjM5M0ZFRDNDMEY1ODBFMzdBMUM1QzFGNUYKLToxMDdGNzAwMDY4RURCMjg2NDI1MjVDM0RDQTQ5MEJEN0EzRjQ4MzM3MDEKLToxMDdGODAwMEM0RjUyQjQxQkIxQTY0N0IzOTk2RUI0RjVBNEVFQUU3OTYKLToxMDdGOTAwMEJEN0EzRDQzODU2MEQ5M0Y1QzBGNjFBRTdGOThFMjlFMUMKLToxMDdGQTAwMDI0MkZBQ0U0RjMxOTkwMjYwREFDN0Y5ODIyREYyQTkzOUUKLToxMDdGQjAwMDVEODFBMzQyOUUxN0VBMjBFNDMyOTlENjc1MkUwMjQwRDUKLToxMDdGQzAwMDI5REE4NDU3RTJFNDhERkY5Qjk4MTU5NEI5RkNFOTU0QjMKLToxMDdGRDAwMEUyRjUyOTI2NUM5OEU1N0Y2REI2MUVERkU4RjIxRkI0NTYKLToxMDdGRTAwMDhFRTQ0M0IxQUYzNjBFQzY3MjFEODlENTVDNDdGMjg2NkEKLToxMDdGRjAwMDg1MEIzNjYzNzUyNDE1MjFEMkI3MDk0RDYyREZGODYyMEYKLToxMDgwMDAwMDc1M0NFNjNBMUQ3MzFENEU5RTNGOTE0RjA1MzU1NzI0MzIKLToxMDgwMTAwMERDQkZBQ0IxM0NBMTdGRjlDQTI5MDlFMzhCRDFBMUM2NzEKLToxMDgwMjAwMEY3NEIxRjlBOTMzMDdFNThFQjhEMDlGRDExOUI2RTQ5REIKLToxMDgwMzAwMDE4M0YyQUI0MjhFMUZFRTgxREI1NDlFQjVFMEM5QzhDODQKLToxMDgwNDAwMDA5QUY0OEI4QkZEMUY5RTRCQjg0QUY5NjNDNTlBNTc4RDUKLToxMDgwNTAwMEZFQ0E4RUZCNEM3NTMxRDMxODE3NTM4QzdENzg1REZFQUMKLToxMDgwNjAwMDQ2NUQxRDk1ODExMTlGQzdBM0ZDMUYyQkE2QjhFOUZFOTUKLToxMDgwNzAwMDJBNDkxQjg4MDM2RjI0Qzg3RUZDMUZDNUMxN0E5MzFENDMKLToxMDgwODAwMDMwRjRGRjYyRkIzNzNGRDZGRDg0OUM1MjI0NTE5Q0UzQzEKLToxMDgwOTAwMEMzQjgyQTY1MkFENTExOEI3MzdCNzg0QkQ0QUI3Qzk2RjkKLToxMDgwQTAwMEYyNzc4RThCMzRDOUVEODU2RkQyNUI1NTg5RTJBMDdCNjgKLToxMDgwQjAwMEFCMzQ4RTgzRUUxRDUyNzQ4MEY2MEY3QTdFRTBGNjRBNjIKLToxMDgwQzAwMEY5MDNFQjQyQ0Q3NUEwMTkwRURGNjRFMEFEMTE1MTA3NDUKLToxMDgwRDAwMEQ5ODI4NjlFRUM3RjcwODY4M0UzOEM4NzJEOTZEQkFBRkYKLToxMDgwRTAwMEUzRTg3RjIyNUJEODlGMjdCMjQ1QkVGNTczNUI3ODM3MDQKLToxMDgwRjAwMEQ5MDFDNTAxNkE1MzlFNzg5RThBMUY4MDJBN0I1MDJFMjMKLToxMDgxMDAwMEVFNEMxMEY1NjFGMEM2REE5OTg1RTQzRjdCNDY2QUU5RUEKLToxMDgxMTAwMDU0M0Y4QkZENkZFMDY1MjVDNEZFRTQ5NjY2ODVGM0JDOTUKLToxMDgxMjAwMEQ1Q0UyN0Q5OUY5NDJCQzI5RjhDOTM4NURGNDAzRkQyMTkKLToxMDgxMzAwMDQxRjZGMTRERTk3RUFCODhCMzgyNTY5MjRGODEwMzgyQkUKLToxMDgxNDAwMEVFNzJGNkFGN0M0RTlDMEU1OUQyOEEzMkFBNEZCREUwMzkKLToxMDgxNTAwMEI3QjRBRjEwNEM4NzZBQTc1QTg4NEZGRDhCNjUzRTBGQTYKLToxMDgxNjAwMDdFODk0ODQyN0FGQjZCNDY3MTlENzNGRjg1RkEzRjJERUQKLToxMDgxNzAwMDhERjJFQkZFQzU4RjlFQkRCQjMyQTY5NzI3NkRDOUYzNkUKLToxMDgxODAwMEJDOEJFREJCRDU2Qzc5MzQ5NUNFNTE0RThFODQ4NEZBODAKLToxMDgxOTAwMDhDMzdCMzQ1N0VGODY2QjYyQ0VBMEM0MkVGNzk4ODRERjEKLToxMDgxQTAwMDdENEJCRTE4NEU0NDA3QTRFRTM1MkUxQ0YyRTBBNjFGRjAKLToxMDgxQjAwMDU0OTM1QzZDRURGMzgyQjRBRjY5RUNFMzVGQzgwMzNCQUUKLToxMDgxQzAwMEE3NzNGREI2OTEyRkRERkNCQUQ4RDdCQkY5OEJDNDdENjAKLToxMDgxRDAwMEVCOEZCMkM1QjlDMDQ3RjQzRTZDQ0JCQkZDRTM0OTZFMzQKLToxMDgxRTAwMDM3OTA0MkYwQkVCMjdGM0NDNTA3RDUyQTY4RTRGNzE3NDYKLToxMDgxRjAwMEY4MTdERTdEMTRGQkYzRDY0QjFDRUZEMzdEMUE3RjIzREIKLToxMDgyMDAwMENBOTBFRTlGMDBFRkFCN0I5MUJFQ0ZCMzA1M0RGM0ExQ0IKLToxMDgyMTAwMERBNEE3NEJFRjZGREZBNTRDMkQzRUJFOTYyN0M1NDAyMkEKLToxMDgyMjAwMDZENkJEQzdDMzdFOEYzQkRGRUZERTU3QjI5NEZBN0Y3REUKLToxMDgyMzAwMEQxRkI4OTFFN0FGRjNDMTU0QUE4RkYxQUY4Q0ZCRTVBMTcKLToxMDgyNDAwMDNDRjBCRDM3ODFDRkFBRDc3QjU5Qzk0Rjk2NDJBOEVERTQKLToxMDgyNTAwMDY5QjJBQjQ3MkNERUI1QzA2RDI0OTNGRDkyOURGRDUyRjMKLToxMDgyNjAwMDVGNTNGNEM5N0I5MENFM0ZENUZFNzVBRjg0N0NGREUzQjAKLToxMDgyNzAwMEMyRThBRjlGQzZFQkRGREQyNDgzODZCOEY4MzhDMzJGOTIKLToxMDgyODAwMDdCRTJFQUI0NEYyRUZFMjQ5NUY4ODlGMUNBRjY5RjkyNUMKLToxMDgyOTAwMERFRURCNDdCQTlBRUUzQ0REQTlEQzNFM0UzRkE1NENGQzAKLToxMDgyQTAwMDc0MDczRDA3OTMyRUVEM0NBREVBODlDOThDQkYxNURCMDEKLToxMDgyQjAwMDA1RkU1NkZDNjY0NDBFRTE2QzQ1RUEwNURDODlGRUY2RDcKLToxMDgyQzAwMDUyM0UyNzlEMjA0MUQyRkM3ODNGRTI0RDFCQzE3NTM1QkYKLToxMDgyRDAwMEEwMjFDRUY2N0YyRUVBQ0FGNzFDQ0RBODIwRkExNEYwMTIKLToxMDgyRTAwMDVGMTZCRjlFM0QyRkREMzI5QUVCNzlERkM4QkEyNDNBODQKLToxMDgyRjAwMDQ5Njc4MzY4N0Y2RjY2NTM4OUYxODFBRTI3MEIzQTMzRjQKLToxMDgzMDAwMDJCRjQ3ODcyOTQ4N0UyQjlERkZGRTZFQzdGMTA1RkY2MUEKLToxMDgzMTAwMEVERENGRTQzRDY5MTRCRTNDM0MwM0E1QTc1MjdEQjI3MDkKLToxMDgzMjAwMDIzMEZBM0JBNTdDQUQzMEU1OUQ4NEY1RTJEREZDRjc5OEEKLToxMDgzMzAwMDE4RDU2OTcwREUzNUE0ODhDN0EzQzE1MUFEQzJCRTg5MDYKLToxMDgzNDAwMEVGMjQzMDBFNkVGNjcyQkQyN0VCRUI0QTU1QzQyRDQ2NzYKLToxMDgzNTAwMDlFMjQ1QkJDQjk4QUY4QzhFMEM1QTkzQzdGMDlEMEZFNjEKLToxMDgzNjAwMDk4OUIxMjJCQzM1RTYxMUNFMTk2MkRCQUJEMDI5RjAzNDAKLToxMDgzNzAwMEYzRDNEMUJBM0Q5QkU1RjE1RURCMjJDRTZCMTJFMjRGMjcKLToxMDgzODAwMEVDNTdFRDRBMTI3NzU2RTMzRjhFM0IzN0ZCOUI1M0Q4QjEKLToxMDgzOTAwMDJGNkQ5NkNCMjhFRUYwMzkyMkU0QzdDRDcxRTc1NDU4MDMKLToxMDgzQTAwMENGRkIwMDAzRTJDRkU3RkU3MjQ5RjFFN0Y3M0NGRjNENjgKLToxMDgzQjAwMEJGQjNENEEzQjFGRDA5OEYxNDc2MkUxQzE5QzI3OTBFNTgKLToxMDgzQzAwMEZFNTU5MDdFMERBNUJEMDAzQTA3Q0QxM0FENERFQTFEQkIKLToxMDgzRDAwMEU5NDBGREFDRjU5NEFGN0I2ODFBQzI2NUE4RTAwRkY1RTMKLToxMDgzRTAwMDUxQTQ1MEFBN0Q3MkU4MkI4QTAzQkIxNTk2NUZGRjczRDgKLToxMDgzRjAwMDU3N0NFRDc3MjQ5NUE4ODdFNEVDMjM4N0E3NzBCRDczOUQKLToxMDg0MDAwMDVGOTdEMDhGQjYwQ0VEREZBNzUyOUU4MTcxRTY1NjI0QTAKLToxMDg0MTAwMDMxNDVFOUIxQTUyNzU5Q0ZEMzY0N0Y1MTFGQzIxRTkxQzEKLToxMDg0MjAwMDQ3MzkzQUM0QjlBODQzRjMwMUQ5OTcxNDU1MUQ0Nzg5NzAKLToxMDg0MzAwMEI5MzE3RUIxNDdEOERERkFDMzZGMTZEOTUwM0U2NzJERUEKLToxMDg0NDAwMDQ3REQ3NEJFNTJCN0Y3MjkzNzJFMTc5QTMzRkQwRjkwQzgKLToxMDg0NTAwMEZFMkMzRkY5RjIwNDk1RUJEQ0I2MTQ1MUZFMUQ4RUJDRTgKLToxMDg0NjAwMDNDODNFM0IzRDlDOERBNzE4M0FGMjdCMEE5ODIzRTQyMTcKLToxMDg0NzAwMDgwODY0RDk5REM4RUEyN0QxNUJDMTQ4ODg4NzVGNjc2QjEKLToxMDg0ODAwMDM0NjcyNERCMUYwOEZDREI1QjA3NjlCRDNCOEZBNTcwRUQKLToxMDg0OTAwMERDQjIzM0JCOUJGNTIwMzgwRjYwM0JGMkZCODlDRjQ3NDIKLToxMDg0QTAwMEYzN0MwODMwQTZFMzhBNkE0RDIyN0ZGRjBCN0QzRDNCQkIKLToxMDg0QjAwMEY1RkNCMkY3NzM5OUM3MTlGMzhFRTk5ODJFQUI4OEFCMjgKLToxMDg0QzAwMEIyNDhFQjQxQUVFM0VBQjQ2QjI0REY5NDZEMjBGOEQzRkQKLToxMDg0RDAwMDk5QzI3NTYxODFGREQ3ODhCQzMzNUQ5QzQ3QjcwRDg5MTIKLToxMDg0RTAwMEZFOTFERTEzREQ2N0Q3QTg0RTM1NDU2RDg1MEM5Q0JGMjgKLToxMDg0RjAwMENEMjZGQ0VDMjgwNEZFNTNBRUQ4NzVFMzdEMjk5RDFCRTgKLToxMDg1MDAwMEY5MjMwOEM0MDVEN0UzQTUyOEFERjAwRDU3M0NGRjUzNjgKLToxMDg1MTAwMDk5REVGRDFFMTFFRkI0MEQ4OTU4NUNFNDI3MzA1N0RBNUYKLToxMDg1MjAwMENBNzRDNUU4MDQ3RUFGNDFFNzI4OEU4QkRCNkNEMUY3QjcKLToxMDg1MzAwMDY5QkYxREU5NTIwOTE3QTM0MEQwMDk5RDIzMzQ4QTU3MEEKLToxMDg1NDAwMDUyNTQ3MUFFOUVBMjZBREVBMDM0OTBBRUMwNTgwODYxNEIKLToxMDg1NTAwMDcwMDAwRkFGODYwQjdBQ0U3NTg0NDM2MjdEMDdFQTQyQzYKLToxMDg1NjAwMDVCODkxRUM3MDQxN0FGOUIzOTJEQUU0Rjg2NkM1MkVDNEEKLToxMDg1NzAwMEY5MTM5RTY1RUI1QTBBNjk1REMyMEYyQTRBOThDRkM3NjQKLToxMDg1ODAwMEREMEI0MEE1RjNFRjE0QzVDNzc5NTJDQTdDRDA5QTUwRDEKLToxMDg1OTAwMDVFNEU4NzhGRUY3QjcwOEVBNkM5REM4RjEwRkQyQUREQzMKLToxMDg1QTAwMEE3N0Q5QjM0RDUzOTA3RTk0RUZCMzI4RDlGNkJFOEI2MkEKLToxMDg1QjAwMDcyREQ3OUREREY2RjRBMkJDM0Y1OURCMTFDQkM2NzE3RjcKLToxMDg1QzAwMEI2MUYyRDBDMEZBNzczREEwOTY5RkVCN0M4MUUzRjczREIKLToxMDg1RDAwMDZBRDFCQTMxMzhGRTJGNkQ1NkVGNUNCMjRCM0RDMTFGRTgKLToxMDg1RTAwMEQzQjk3REVEMTM1NjhERkNFMjgzNkZGNDQ3QkUyMkY5QkIKLToxMDg1RjAwMDNFMkJCMTVERUNCMzhBRkJEOEQ3OUFGMDdFNDNFNzA3RjgKLToxMDg2MDAwMDM2M0FEN0JBQTZFMzZEMUJFRDdGQUZDQ0YxQkY0RjdBRjgKLToxMDg2MTAwMDMwQTlBM0E5OEFGODM2MTk1QTlCNjk5RjEzRUQyMUQ3NkYKLToxMDg2MjAwMDRCODQ3Mzg1QkRFODdGNjVGOEQ2QTYzODNFQkI3MkY0RUYKLToxMDg2MzAwMDdERUZBOEZGNzJEMjlCNEU1RDNGRjc1MzdDODRFRDVFQzkKLToxMDg2NDAwMDNENEVEQjdCRTBCQkE1NUFEQ0Y5NjkxMDBFRjI3RUUwMDMKLToxMDg2NTAwMDZBNzg4RUVCM0E4REVCN0QyMTY1MzZFMTY4RjQ2QjhFOUUKLToxMDg2NjAwMERCN0M3MTM4QjNFNTA4N0RCN0U5RUZGQjc5OEVGRjRCMTIKLToxMDg2NzAwMEQ2REIwM0VGRDhEQ0I4RkVDMDlGQzM0NUU0QUZDMjE4MTkKLToxMDg2ODAwMENGN0Q1RDFENjlDMEE0MkYxN0VBOEU0RTAzREI5MTlEM0YKLToxMDg2OTAwMEFGNzU3MEZDQkRGMzNFMzU5REY0MUVFOTg3MzRFQ0VGRjkKLToxMDg2QTAwMEM1Rjg4MkY0Njg2RkIxRDBCQkE2NTdDRjhGQTVGREUyQTUKLToxMDg2QjAwMEYzRkI5NjVGNEVGQ0VBRjU1ODBEN0NDRjE4NDI3QUI0NzYKLToxMDg2QzAwMDFCRDg4RTE5N0E1ODQ2N0EyOEQxRjc3QjYyQkZBNzhDQkYKLToxMDg2RDAwMEYwNEQ3QTY3RUI5RUMzN0FCN0Q3MDJBNDc3ODg2RkM2NEUKLToxMDg2RTAwMDNCRTI1QkE1MzhBNDRDNDVCQ0YzRjMyMzU4OEZEQkJBQkYKLToxMDg2RjAwMDVGQkU4MkVCRDk5MUJEQzNDNjUxREZDMkY4NkE4QkNDOTUKLToxMDg3MDAwMDA5NDlGODdDQTUzNTcyOTA5RUFGQzRGNzM3NjkzMUJEMzEKLToxMDg3MTAwMEFDOTQxMkVCN0ExNjdCNDQ5REFDNjExRjdGQTBFQjY3OTMKLToxMDg3MjAwMDc4QTQ5NkU2QzVGMTRFNTk0RUMwN0Y5QzlGMTQ3REREMUUKLToxMDg3MzAwMDhGREVCQkYxMjdFQjM2QTBCRTk0RkEyQTJDMTMyOERFN0QKLToxMDg3NDAwMDM5MjZCMzFGRDhBRkM3QzkyQkZFMzBFNTg2NURFMjNBQTQKLToxMDg3NTAwMEZCQ0Y4ODhFOEI4MzdBRENGQ0RDQUE1Q0VFOTM1RkQwNDcKLToxMDg3NjAwMDUwMkVFM0IxRjU1NTUwQkQ3NzYzMTU2REM1NEQ5QUREQkIKLToxMDg3NzAwMDdBODhEQTI5RDVFMTJBM0EyRTlDQjZBMEZCOTBGOEM2NzEKLToxMDg3ODAwMENEMzc5QUYwRDY3RUYwNUJBM0I5NEVGQUE0MURFODNCMzQKLToxMDg3OTAwMENFRjZGRjhDRkVGMTA5NUNGRjNERkI5MURGOTAzNDJFOUQKLToxMDg3QTAwMDYxQkNBMUM3NjZGQzBEODY5MzNFQTlFN0ZBQTk2ODk3NEMKLToxMDg3QjAwMEFGREJGOEVCNkIxNTc0RTgwRDA0MDQ1Q0ZGOUM4RERCRkMKLToxMDg3QzAwMEQ2MDVEMTA3OUVDOEYxNUQ5NzgzRjhGQjIyRDc3RjVENjAKLToxMDg3RDAwMDBFRjJBREVGRjg3RjdBQzg5RkVDN0RFNTFEMzdGOUUxMjkKLToxMDg3RTAwMDc2OUI2RjM0RTFBQUJEMDRGMzg4MjQ3ODlDOTI2MzY1N0MKLToxMDg3RjAwMEZGNUEzOTQ4QkQ0OTYzOEVDOEI3ODYwNzYxMURFMUE1OTgKLToxMDg4MDAwMEExNUQ1NjQzRTRBNzdERERENzkzREY3ODFGNTk0OUZCNkYKLToxMDg4MTAwMERBNEJBNzA3REQ5NDJGRDVFQzNEQzQ3NUZBNDYzRUJENzMKLToxMDg4MjAwMDA0RjQzRkY5RDY1OUM0RkY3M0I5MjIzRjVFQkFDMTlBMjYKLToxMDg4MzAwMDkwREY4RTgwODg4RENFOTEwMzdFNTc2MzA0NDU1MjYzMEUKLToxMDg4NDAwMDhBM0JFRUU4RDhDMkRGOERENDZFNEI3Q0FFOEVFMjE0NEMKLToxMDg4NTAwMDg0NTBERDQ1RjJFM0M2MUM3RDlGQTQxNDRBMjk0RTQxOTUKLToxMDg4NjAwMERDRjAzRTQ5RjQ1NUQ5QkIxNUI4QkVBQThCRUFBQjc2MEQKLToxMDg4NzAwMDVBMDQ5RjlDMEU2ODQ5Q0I4OEM1MkIyM0YyN0M0QkM4QjkKLToxMDg4ODAwMERFMkQzMUZDODc1RUFGMTQ2RDkzRjg3QjhBNTEzQjQ0M0IKLToxMDg4OTAwMEJFM0NFNUI0QjY4NUJGOTMwQUZBQjg0RUFGODYwODQwMzEKLToxMDg4QTAwMEJBQTcyODQxNUVGRjk0REM1MjA4RTJGQTI3QTE3OTI2OTQKLToxMDg4QjAwMDdENTlEQTI5ODU5ODlGRkE3NzJGMEFGRTEzRkI0NTlCOEQKLToxMDg4QzAwMDY1RkVDRTZGQjMwNDk5QzUzNDZGOTRGOTUzQUJFRjFGQjcKLToxMDg4RDAwMDJFREY5MTc4N0U1MUI3RTlGODYxMEE5NUVBQzNBNkYzRDUKLToxMDg4RTAwMDIwOUQzRkU2RjM5REE3RTgzRjkyOUNFRkZDMjQ0NzhGMzUKLToxMDg4RjAwMEU3OEFBMDI4RTFCQkJDQUU0QkZCMkVFRjIzOEEwNzVDQzYKLToxMDg5MDAwMDc0RjgwODA5NzFGOTFFMUQ0NzBERkFCQUVCNDJCMjU4MDYKLToxMDg5MTAwMDM3OEE4MkVBQTM2RkQ3NjExMjAwMkZGM0E5MUU3MTQyMzIKLToxMDg5MjAwMDM4ODBGNTQyREU0NjNENjMyRDU0REJBODhFQUNCRUJEREIKLToxMDg5MzAwMEU5MzA5REJGMkRENUUzNUEzMzlFOTBBMUNDQUY2NTdBMjcKLToxMDg5NDAwMERENTBDREU2QzRGQkI1M0E1RjZBNEQ3QzY5RjA0QjI2M0QKLToxMDg5NTAwMEZBNDREQzdEQTlGNEExRTVGQTBFRTFBMDc2OTc5NUVCNDcKLToxMDg5NjAwMEI5Q0ZDMUFENUM3RjU1REZCRTg1RTk1OUFBQ0I2RjIwNzkKLToxMDg5NzAwMEJENDE1RUNGMzI1QzBGRTlEM0E1RDI2Qjk2REYzMTAzRTgKLToxMDg5ODAwMEU3NTdDMDE1MDlGMjlCOUQ3OTQ5RjIyQjA1NzUzOUFENjIKLToxMDg5OTAwMEFGQkY0QkU0QjVGRDVEMjVCQzJGNjFFMEM1RkNGQzJDRjEKLToxMDg5QTAwMDNEOEVCRTY2OTM4ODM3Q0Y3NjU0MzkyOTFFRTgzQkFBQTAKLToxMDg5QjAwMDc4MjVDNDdEQzVCMTRGRERGNEZENERGOTNFMTlFODlDMjUKLToxMDg5QzAwMEI0QUZCMzYyNUQxMEVERTU5RUFFQTEzNzY5RTgwN0NBQUEKLToxMDg5RDAwMDhGMjlFQzM3MkE4RTk1ODc1MjhBQTk1RkVFMkNFNTNBQ0IKLToxMDg5RTAwMDEzMkQ5M0YyMDA5Qzg3RkQ3MERGRDFBMTI3Q0EzODRFNkEKLToxMDg5RjAwMDlGNTk0OTI5NkFEM0QxNzIyN0M1MEI3QjQwRUM2RjQ4MzgKLToxMDhBMDAwMEM3MkEzMzdCRTJGQ0NBN0IzOTYyQkY2MTRERUVCQjBGRTQKLToxMDhBMTAwMDkzOURCQTY2Qjc5NUY3ODNBRkIxNDY1RkEyM0M2QzRGQTIKLToxMDhBMjAwMDk3RTI2REMyN0VEREIxNDVBQjUzNDhERUJGOTFCQzE0MDkKLToxMDhBMzAwMDc2MUZFRTVFOTE0NUU3MzVGNTlENTZENUNFRjRERTdEODkKLToxMDhBNDAwMDkwRUUwNzc3NDlERTYxMzgzRUIwRUZFQUQxNkRCNDRGNjIKLToxMDhBNTAwMEI0QTVDMjRCRUMzNURFNTc5RUFFM0Q0QUY1QUU5MEU3NkQKLToxMDhBNjAwMEU0QkNGRDlBQ0JBQ0VDNUZDRkU0M0JGRjc1MkVBRUFCMjQKLToxMDhBNzAwMEQ2Qjc2NTE2RDlFMTMzQkZEQkMzNzUxNTdENkQxMkU0M0EKLToxMDhBODAwMDRBQjQ4RjdDRTg0OUFBRjczOUYzRjQ3MTFCOUQwNzU3NjQKLToxMDhBOTAwMEI1MUZFN0JBOERDMUZDQzFEOTEwRTI4RUYzRjY1NjFCQTMKLToxMDhBQTAwMEU1MzdGNTVCOEM3RTBGN0Y4RjUyQURDNzUxMEREQkRFNTYKLToxMDhBQjAwMEU2N0UyREU1MDE4NEM3Q0Q3MjQ4QzNGRjNDQjRFRjE5QjMKLToxMDhBQzAwMDNFMUY2RUQ4MjVFQTNFMkVEQ0RGMjZGMTdEMDNFRjhCQkMKLToxMDhBRDAwMDc0QkJCNTFDMzRDNkZCNzIwM0VGN0E3RDk0ODFGNzczQzcKLToxMDhBRTAwMDMwOTdFQkI0OTZFRjdBODRGMUJENDRDN0I3Qjk2RTBBRkMKLToxMDhBRjAwMDJEQjBBRDJDNEJFODJCRURCNzk5QkZGRkJCNDNDN0Y3QUIKLToxMDhCMDAwMDFEMTdDMUY3QTg1QzFEREZBMzYwMTRFMUZCRkM3NDUxQzUKLToxMDhCMTAwMDRGNzdGRUY4MTAyN0NEN0ZGRTA4RUZCRTdFMURDRUQ5MjEKLToxMDhCMjAwMEVGMUVENUUzODJGRTg4QzU2N0JCMzIzNkFFQjdFMzEzQ0UKLToxMDhCMzAwMEZFMEUzMTcwQjRERjQ2NzUyN0IzM0EzRjY2NzlDQ0VENEYKLToxMDhCNDAwMDNDMzA5M0Y4N0QxREY4RUI4ODdGRDc3NTNBNTU4QTgzQzIKLToxMDhCNTAwMEU3RjYwODdCMzZBN0QzQ0VFNzEzRDc0MUI4ODVFNERDMjgKLToxMDhCNjAwMEI3RkZGMTk2MENDMkNEQUYwNTZFMEMzQkI3NENFN0VCRUYKLToxMDhCNzAwMEI1NjUzRjk4NDVGOTdCQURFRTBGRkJCQkVFOUNDNTc2MjYKLToxMDhCODAwMDY3MUMxNDUzQkMzNzQ3RkZDRTdCNEU1OEI3NDM5QjEzMkIKLToxMDhCOTAwMEY5NEVFN0Q0MjRCNzg2NEUzQkQ3OUI1QzBCM0QzNkYyQUIKLToxMDhCQTAwMDY3RDdFQUZFRDNFQzI3RkJGMjlDMkNFNzIwRkFBQjYxRjcKLToxMDhCQjAwMDM4QkU2RTk3QTk4RTUyRTk2MTdBRkEzQjZDN0NERUQ1OUQKLToxMDhCQzAwMDYwRjJCRkQzNzJBRDA5RjUxNzgzRTFEMzJDQUZEQjcyMkUKLToxMDhCRDAwMDc1N0ZBMkNCNkI2RTU0RDQzMUNDNzk0NUY2RDJGOTQzNzQKLToxMDhCRTAwMDU3NjQ3NTE5QzUwQjA2REZDQ0YyRUFEMjRBRDNCRUVFNDQKLToxMDhCRjAwMEY3MTI1RUQyRTM3Q0EzN0Y4M0ZFRkQ1QjU4NkQ3NUM1RTMKLToxMDhDMDAwMEU3RURDRkU3NUFGNDczQ0VEMDRGMkI3MDlENzc0OUQwNjQKLToxMDhDMTAwMDREMzhDNEZDRTY4NjcyMjk2OTdFQjMzMjE3QzczRjVGQzAKLToxMDhDMjAwMDc4RkJGQTcxRjFGOThENkZDQjcwOEFGNzFFNDRCQjUyNTUKLToxMDhDMzAwMDUxQzlGNTNCREQ3QzVFQThCNENFQTU3M0IwQzAyRUFCQTgKLToxMDhDNDAwMDk3RjI5QTQwODdDQ0YxNDA2MDk3M0Q2NEMxNzlBRjIxOUIKLToxMDhDNTAwMDFDMjE1REQ1OUREMkQ1ODQyM0NDMUI1QTcyRDEzRUNEMkIKLToxMDhDNjAwMEEzMkQ2NTFDMzdBRjAzRTMxMTdDNkVERUNDOEYxOTdGMUIKLToxMDhDNzAwMDQ3ODY4QTc1RjcyQjVBNEVCMjNDQzJDODFGMUEzRTE3NTgKLToxMDhDODAwMEYxQUE3MUJEMDFFRDAwOEQ2RkQwQkY0QjZCM0ZGOEQ3REUKLToxMDhDOTAwMEEyRTI1NDNBQjdGREFDNjgyMUM1QTlCOTIyN0YzMUUyRkUKLToxMDhDQTAwMEQ1MjhDNkFCMjU3QUJDNDI3NTE3NEI4NUU4NjBFOTczQjkKLToxMDhDQjAwMEY3RDlDODdFMURBNjFGQjZBMEZBNDlENUJGODZGMjYxQjYKLToxMDhDQzAwMEQ1MEY4RDNGQTI0MDQzNkE2MTNENkEyMDlEMjIxQ0VFNzQKLToxMDhDRDAwMDk1QzRGRUNEQjM1NkFBMEQ4MUE2OTc4NzcwNUQ2MEVGNEYKLToxMDhDRTAwMDZCRTIxQ0NBQUNFRkJEOEJCQUQ5NUU5QzVGRTg2QTI0MEMKLToxMDhDRjAwMEJDMkQyRkRCQjIwNjIzMEMxOEJERkY3NUI2MzdBMzdGNDIKLToxMDhEMDAwMDY3NTMyRDZBNkM1RDRERjRERDFERTc2OTJEMDlGMTcyMjUKLToxMDhEMTAwMDZGNDdCMzhERjdBMUUzQkYxQjJFMTkxODFGRDU1RjY0RjIKLToxMDhEMjAwMDFGRUI3OTkzNUQ0MUZBMzlERUVEM0IyMkFCQjQyRjg0MjIKLToxMDhEMzAwMDdDRkM2NTdFM0NCRkY0NzhBOEZENjAwQUZCQUZCRUUzMTcKLToxMDhENDAwMEFFMTBDNUZEN0ZEMUYxNzg0NkRGOTc2RjlBMjQzMzNGOEYKLToxMDhENTAwMDJDOTM0NTNCN0FGRjMzMjUyNDVGOTI4NzFGRURGRENFOTAKLToxMDhENjAwMEZEQ0Y1Q0UxRTM3REY0OTBBODIzREU5MTU4ODc1RDFGODEKLToxMDhENzAwMDRFQUNCMzM2RjgxQUQwRjk4QTc0MERBN0VGOTUwREJBMzgKLToxMDhEODAwMEY2MkEzRDZFNkYxMjNEOTJBNDgzMkMyRjhCOTQ5OEU3QTgKLToxMDhEOTAwMDA2OUU5NUFCRTNFQjQ4NzEzREI3OTFERDNCNjlFODhCRUYKLToxMDhEQTAwMDEyRjU5MDFGN0UyQjU3NjNEQzM0NzUwQUY5NUFGNjg5NDkKLToxMDhEQjAwMDE2REZGRjFEQjE1RjYzRTVGNzBGQjgzRjIzNTg0N0Y3OTQKLToxMDhEQzAwMENGMTczQkI5QkUwMTNFMEZDRUE1RkUzRDI1RTJGNzAzMEUKLToxMDhERDAwMEVFNzlCOTc2NDRGQzNFMUQ0ODIyMUYwRjU4QTM1Q0VGODQKLToxMDhERTAwMDE3Mzg2RTYxRkEwMkM3RkIzRDQzNUQ2NDE3QjdDQ0E0MjgKLToxMDhERjAwMDNBREE2Qjc1N0I3MUI4QzQ1OTQzMzgwRkQyN0I3MzYyMTIKLToxMDhFMDAwMEYzMkNDOTE1RTcxQjQwRUJDRDhEN0Q1RjY5QUM3NzM1NDEKLToxMDhFMTAwMERDQzg3QzU4QURFM0VBM0ZGNEJDMUVGM0E4RjNCOTQ5QzMKLToxMDhFMjAwMEYyQThDMUUyREYwQjc0RUJGMUQzRjlFOURBODlFRjIxQTMKLToxMDhFMzAwMDBFQ0E4RjI4NDFDQUQ3RjdCQzkxMTIyMkZGREZCNDZGNDgKLToxMDhFNDAwMEQ5OUYyODFGMEVCQzY5MDc4QTQzRUVEOUJGNkMwNEQ3OEYKLToxMDhFNTAwMEUxRkJGRDU3OTIzRDM5QkZGRjhFMkJCOThFNTExMkRGREEKLToxMDhFNjAwMDk3MDY4OUJFNUM4QUE3NUVGNTUwOUM1NEJGRUY1NUFFNEQKLToxMDhFNzAwMDczQUNERjNCRkU1MThBOUYzMDVFQkE5NkFFNjMxQ0MzNzMKLToxMDhFODAwMEY4MkIzRjU2QzlGOERCNzNCNDMyQjM5NDA4MDdBRjkzOUQKLToxMDhFOTAwMEU2QUQzRkEyNzBERDYzRkQ5MUNBMTdFNzUyNUM3MzZDQ0IKLToxMDhFQTAwMDA2Qzc0RjQ2QkM1NDQxRjkzOEM1NEY0Nzg2MjZDNDRGQzQKLToxMDhFQjAwMEE5Nzk4MjdGN0QwNzUyNzhGRjQzODIxMjgxMUYxODlBMTkKLToxMDhFQzAwMDgwOUZCQUY2M0Y3MDlDNTE4N0Y2MkUxRTQ3QzY3M0M1MjkKLToxMDhFRDAwMDc5MEFDRjMzMkM0RkM3NEY1OEYyMzEzRTc2OEJCNkFFNUUKLToxMDhFRTAwMDYzMEZBRjZGQjkzNUNDRjI2RURBNjUxNUY3REI0NDZCMDMKLToxMDhFRjAwMEQ0NDkwNzIxMjM0OEZDNzg5MTJFQTExQ0U2RDg0Mjg1NEQKLToxMDhGMDAwMDk0NkZCRTUwMkNGMjBEQjMzQzlFQzgxM0U3ODUyRjlDODYKLToxMDhGMTAwMDE0REYxOUJGMzBERDNGMjJEOUY3QzY0MTk4MjFGMjcwMjYKLToxMDhGMjAwMDQ5RTc3N0JCNzU3NkIyRUY3OTc3RTQ4OUZEMDk3NzI2NTMKLToxMDhGMzAwMDI0OUM0QjFBRURBMzc5NDI1RkU2RDhDNDNFOTVGOUJFNTYKLToxMDhGNDAwMDNGQ0ZGMDNGQjA4RUNFNjM0RUNDQjVBQUM2RUZCN0U0QUMKLToxMDhGNTAwMEExRERCRDFFOEMzRkVGQUJGM0IzRTg5QzRCRTRENTAwMjUKLToxMDhGNjAwMDNEMzNDOTFFN0U5QkY2RjkyOUZFOUEyNEZDQkFCMUNGODcKLToxMDhGNzAwMDNGNkYzMzNDMjBGNkY5NkZCNTkyNUQzMEVBNEJFNkY5NkUKLToxMDhGODAwMENDRjE1N0Y1RDUzNENGOERFOERGNjk5RTlCNjYyN0RFOUYKLToxMDhGOTAwMEZGRjY0NUUyQUUwNTc5QkExRjFGMEVDMzQ1NUVFMTcyQ0EKLToxMDhGQTAwMDkyM0YzOEQ3NjU1NTY1NUU0NzY4NjhCMkVGMEIwREZCOTkKLToxMDhGQjAwMDczNzg5NTM4M0ZFQTQyQkI0ODZERDNBOEQ3NzlERkVBOEEKLToxMDhGQzAwMDg1MDMyNzlGNEM2N0JCOUEwMjI1QzhFMkFCQkVGQzkzODIKLToxMDhGRDAwMDI3RDkzQzREMTdGNDc1N0UwMkZFMEM3OTlEQTUzQ0EwNjcKLToxMDhGRTAwMDZDQTBCQ0VFQ0NCM0U4REYyNTlEQjFGMUY5MjYzNDNFOTAKLToxMDhGRjAwMDY0OTEwN0ZGMkVBOTY5RDQ2NzJEQTQ0RjY3RjVFRjVFMzIKLToxMDkwMDAwMDkwQkUyMjdCOUNERDNGOUJGNzMxREZCRjY3MDY0NDgzMjgKLToxMDkwMTAwMDc4RkZDMDI4M0JGQkJGRkE5OTEyOUYxRkQ0NDc4NDNGQkIKLToxMDkwMjAwMEFDOUYyRkZDRTFGMEY2NzkyQzk3RUZBMDVDN0M1RTM2Q0MKLToxMDkwMzAwMDEzQUY1MTVEQUUyMUVGQUJCRUVDOUI2OUU0OTM3NDhFMzAKLToxMDkwNDAwMEQzNDQzODY3M0I5REM1NkQ3REZCREIyRDdDNUU4OTdFRkYKLToxMDkwNTAwMDk3RTJDMjFCMjYyNUNBNkQwNEY4MUZDOEM2RkIzN0NGOEUKLToxMDkwNjAwMDk2QkNFODQxMDZDOEZERTY1QkU3QjFEQzZGRDJCRjhGNzYKLToxMDkwNzAwMEI5OThEQzdGOUJFN0ZGNjkxRUU5N0Q3N0ZGNzdDNjIwMDMKLToxMDkwODAwMDhCNUUxOEY1NDExMUY5RDc4NjQxNzBCRDU1RTcyRjBDNUQKLToxMDkwOTAwMDhEM0U0REU3NjVERTBCRTdFOTdGN0YzQUZFM0NCREM0QzAKLToxMDkwQTAwMEUzREY5MjQ3NzZENUYyQTVGQjBBQTBGOTdBN0VCOTQyQjIKLToxMDkwQjAwMDIyMzkwMUVCQzU2MDdBQjU0MzlGN0Y0NzlFMkFERTkzMzQKLToxMDkwQzAwMDI1Q0U4NzQ2RTlGRDE3QUNBMTQyRkU5RUEyRUNEMkNFOEEKLToxMDkwRDAwMDAxOUI5RTdEN0UyQ0Q5QjlERTAzNDdDNkRBRTJFNDdBOTUKLToxMDkwRTAwMDY2MDVEQTA3RjIzN0ZCMEVGMUY3ODczMURDNTk3NERDREQKLToxMDkwRjAwMDI5REM0QUQyOERCQTFGNERDNEUxMTlDMjIxRDlFN0RENUUKLToxMDkxMDAwMDg3QUVBN0ZDRjE2Q0ZCNEQ1OTkyMTZFNzY3Rjc5RTcwOEUKLToxMDkxMTAwMDBGOEI5QkY3QUNGRUJCMTg5OEI3MERGRjc2NkEzQzlEOTIKLToxMDkxMjAwMDBGMzA5RDY3QzM2MjNFRDRGRkUxMzc4RDg5QkZERjZDOEUKLToxMDkxMzAwMDdDNjdDNzc4N0U3MDY0MjM5RkQzMUI3ODU2NDBFMEQ5NDQKLToxMDkxNDAwMEY4M0Q4QzBCREY1NURBODBCRjdCMENFRUI3NzM3RDQ1QTUKLToxMDkxNTAwMDlGMzU1QTk0MUVBNzJGMUYxQTcyNDQ5ODE1NjYzMTJCRkIKLToxMDkxNjAwMEI5REU3NTIyNkNBOEUyNzMwMjRDREVENzREQTZDRkVGQjQKLToxMDkxNzAwMEMyQjJBODBGNkRFNEJBQzU2OThERTAyNURDNEFCMDk5OEEKLToxMDkxODAwMEZCMTM2NjhCRjNGMjI5RDAyRDEzNURERjg0MjhCNzNFRTUKLToxMDkxOTAwMDUwMTU2QTY3NTA4NTE5QjY5MzFDNjE5OUMyQURCNkY2MzEKLToxMDkxQTAwMDgzNEVDMjU3QzRBM0E0QkZFRjEwQTVBN0M5RTQxNzVCQTEKLToxMDkxQjAwMEJGMDJFRjFCNzhDNUMxMTgwNDI1RkQ0RTNGMkI1RkQ4QjkKLToxMDkxQzAwMDdGQUY1M0U4NjNGNEFDRjhERDkzNkY0MDBGRDMzRjU1QTYKLToxMDkxRDAwMEU5NjY3QTUzMzUyRDgzQ0U0Qjc2M0ZCNzQyQTZGQTk3OTAKLToxMDkxRTAwMEZEQTA0NTQ5Q0ZCQzk5OERCQ0ZGMTY5RDBFRTFBREU5QjAKLToxMDkxRjAwMEIxRjU0RUEyRjVBQUIxRkU5NDA1NjBBMUY1NEFCMDRCQjcKLToxMDkyMDAwMEFDQkYxMTMyRTg3QzZDMzI0NEY4M0Q1NzExQzFCOERFNzYKLToxMDkyMTAwMEU5QTAyOUQ0QjdFNTE3RUI3QzE2Rjk1Qjk1OUVCRjU5RjkKLToxMDkyMjAwMDFDNDFBRUZCNDlDRDE3Qjg3NjJBMjEzOUFGOTJCN0I2QUIKLToxMDkyMzAwMEMzOEZEMEY5NENBOTU4RTc0NEJDQ0VFNzM4OEQ4MkVFRjUKLToxMDkyNDAwMDBCRkUzQTVGRDhCQjI5MTA2NjM5NDMwREE4MkZGMjhGNjkKLToxMDkyNTAwMDJCQ0M1NDg5NUY1MkM0NjNBMURGMTNCQjU0QkVGNjc5OTMKLToxMDkyNjAwMDgwRTk3N0RGMUVFREZENjE2NUVDRENDQkRCOTlDM0Y1QjIKLToxMDkyNzAwMEQwRUIyNTRCNTQyNkJBMUM4NUEyMUUzQTAyNjFGRTJFNjUKLToxMDkyODAwMDMzOTJGODdCNjdDNUY5Mzc1RTlFNEY3RUNGMkZCRUMzMDIKLToxMDkyOTAwMDM1RDc3NUVFMDg2REU1QkE5QjA1NDE2NDBGQ0Q1MzA4Q0YKLToxMDkyQTAwMDcwREExM0FCMDNCMDk2ODRGOEJFOTVDRUQ5NTVBRTMzQzEKLToxMDkyQjAwMEFEQTA3QzcxNUZCNkZGRjJGQzZDQUUzNzFEQzY5MzI5ODIKLToxMDkyQzAwMEExRjFENUE5MzFCQzIzNjVGQ0ZCM0I0RTQ4NkQyNTdCNDQKLToxMDkyRDAwMEQ0QUNEN0QzMDY1NUI3NUVDRjU0QzRFQkQwRDBDRUYzQzEKLToxMDkyRTAwMDhGNDgyOEEyQUVGQkRFMkE1MTdGN0FFRjkwRkQ1Q0U3MjMKLToxMDkyRjAwMERCMjM4MTJBMTVEMEY5RkY3RUFFMDNBNjFGODZCMzE2QTUKLToxMDkzMDAwMDdDQ0RGOTdGOTZGRUJCMEYyNUZFMzcyNjk2RUE0NjFFREEKLToxMDkzMTAwMDlGNkIzRTk1Q0FGNUFGQ0EwQzlGNDY3NUJDRTY3QUYxQzUKLToxMDkzMjAwMEQyOTZGMTBGRjU3MDVFNkFEMDZCQUExMzU3QkM3Q0ZGMjIKLToxMDkzMzAwMDVFRERCRTM2M0JDNEVGMDA0OUFCRURBQTM0OERCRTdGODcKLToxMDkzNDAwMDVGQzFCRjYzRDU0Q0ExNDEyNTdERjdCRTgyOUZBNzNBN0YKLToxMDkzNTAwMDY2MkEwMkVENERGM0RGNDRGQzMyRkYyRTE1QzJBQkZGNEYKLToxMDkzNjAwMDA1OUEzNzZEMzhFRkY3MjU5M0M3MzQ0MzFFOTY4MTc1RkMKLToxMDkzNzAwMDUyMjg4NzVCNDlCRTQ2RERBRDUxNkY0QjgwQTA3NTNCREYKLToxMDkzODAwMDdERTI3N0YwNTRDNDA5RkZFRTFGNDJDOTRFQjhGNDk5NEMKLToxMDkzOTAwMDdGQ0Y0M0Q0RkZCNkU4RkM0N0JBNzY3MEREQTc0MzdDQTUKLToxMDkzQTAwMEE3NkQ3Q0NGNkJFNjlCODFERkZGMDJCOUQ3N0VBMjUwMTEKLToxMDkzQjAwMDUzMDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwQTgKLToxMDkzQzAwMDAwMEI5QjIyQzNDMEYwQTMxRTgxRjlBNTUxRjlFOEY4NTgKLToxMDkzRDAwMDA0OUEzQzBCMDMwM0MzNEYyMDVFQ0M4MzVGMUYyRTFDRkIKLToxMDkzRTAwMENCODI2MEJCODgzMzMwRTg4QTMyMzBFODAxRjExNDIwNDgKLToxMDkzRjAwMDlFMEFDNDlGODE1ODVCOEM4MTQxMDc4ODczODFFQzNDMzUKLToxMDk0MDAwMDIwNzYwNzYyNkJBMERBMkYxQzBDMENEREMyMEMwQ0QzOEIKLToxMDk0MTAwMDgwNzhBMTMwQUFCOTJGMTgyMUI0MTIxNzAzODMyOTEwMUMKLToxMDk0MjAwMDMzMzI2M0I3N0ZBQTFBMDNDMzAxMUQwNDNGNUQ5NzgxREUKLToxMDk0MzAwMDYxQUIzRTc5N0UxOUM1NDMwRjZGNzM0NEU1MUZCNTQyOUEKLToxMDk0NDAwMEU1N0ZCMDYxNjBCMDc3NDJGMDhGNTk5MTY2N0UzNTUwMEMKLToxMDk0NTAwMDZGOEQxMzZFRjlBMzZFQThGQ0JEMUVBODdDMEIzNEY5QUEKLToxMDk0NjAwMDFENjExMDFBMDBGQjNCN0MyMUI4MDMwMDAwMDAwMDAwQzYKLToxMDk0NzAwMDAwMDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwM0EKLToxMDk0ODAwMDAwMEJFRDdEN0Q3QzFDQzU5NTYwRjVDN0Y0RjQ3Q0FBQ0UKLToxMDk0OTAwMDQ3MUVEOTIzNUIzMjNERDJEODk2NDE4NkI2MkREQjMyQUEKLToxMDk0QTAwMEI2NzE0QjA2NDcyNDI0MTk0Q0UyMDgwMkI5QzEzNkFDMDgKLToxMDk0QjAwMEIzRTFCODA5NzcwQjBFQzFEMUU4RkJDM0IyMTkxOTJGN0MKLToxMDk0QzAwMDMxMUM4MTQxN0NDNDEwMkUyODFGOTc3NTEyNzIxOTAzMUMKLToxMDk0RDAwMEM5Q0Y5QkNCNjUxRDQyMzgyNzA3MzlBMUY4RDg3QzZFRDAKLToxMDk0RTAwMDc0RUMxOUNGNUQwOERFN0FBRkFBQTVFOUQ2N0NEOTg2REYKLToxMDk0RjAwMDRERkUzOEY5NDcyQUQ1RkRBQUVBQkQ1N0FGNUVCREY3NDQKLToxMDk1MDAwMEVBNzU4RDIyQkE0OEVDMjI0MkNFQzJERjY2NDJERTcyOTQKLToxMDk1MTAwMDExNDJENkNDOTZBOTc2MjM0QjVBNjhGOTM0MzE3QUU5QjAKLToxMDk1MjAwMEEzNEJCNDZDQkI0MENCMTVGRTQ5NTFEMDA5QjkyQzlDNjAKLToxMDk1MzAwMDI2NDQyNDI0MzZGMTMwMTEyOURDNTA5RDQyNDZBMjg0NzEKLToxMDk1NDAwMDc4RjQ2RDU1QzQzRkRCQUZCM0VDRUQyMjI0QkJBQ0Y4MkYKLToxMDk1NTAwMDdCRTlGOUUxODgxRUEwRkQzREI1QjZEM0E0RkQwQzdERTUKLToxMDk1NjAwMEE1QjVEMzZDOUU3RDVGMEI4MzUyRkMxQTA4QzVBNjg2RjkKLToxMDk1NzAwMDkwRkVGQUZCODkxODI2NjQ5MDhFQkQ4Q0ZFQTdERTkzQzAKLToxMDk1ODAwMDIwNzFEQTRFQzkwRTEzN0QwNUMwODUxMDVFRkRGQTA5MDMKLToxMDk1OTAwMEYxNjZGQTdDRDA0NTNBMjc2OEE5MUU0RDY1N0QxNEVGMjcKLToxMDk1QTAwMDRCOUZEMzU2NDk5NDFFOEY2QzhBQkZBNTc1NEY0NENDRjAKLToxMDk1QjAwMEE0ODA4RUM4NDFFQ0Y3MzRBNTBCODY3QUFGRTg1OTBEMkMKLToxMDk1QzAwMEY0NTAzQTM2NTY0OENGQzY2MkY0M0M5NzRBMDEzRDk3NkMKLToxMDk1RDAwMDFERDU1N0U2RDNBM0Q2MzE3QUQ0QkExRTlDQTdEMzExOTIKLToxMDk1RTAwMDRBNEZGNDQyRThGOTBDRDIzM0M4RTkxOTc0RDBGMzQxNzgKLToxMDk1RjAwMDRFQ0Y3NjhCOUVEQTAxQTQ2N0EwOUVEMjQzMUZCOUVGQUYKLToxMDk2MDAwMDQ5OTEzODg1NTc4MTlFMDBDMEQ5RTkxOTAwN0E5QTBCOTMKLToxMDk2MTAwMEQwQTNGRTc5RThGOTJCMkU2RjQ5QTA2NzRENzk3QTkyOTUKLToxMDk2MjAwMDQwNEY0RDA1RjRGOEQzNDRBM0NGM0Q0NDMwMjc5QUU3OEIKLToxMDk2MzAwMEUyRTVFMTdDNUNGMUY1NzQyNDQ1RkIxREZFOTM4NEYzQzcKLToxMDk2NDAwMDRDNTc2NDY0REI4QTU5Qjg0OThFRDdGN0EyMDM5MTQ5MTUKLToxMDk2NTAwMDkwQUYyNUY3NDcwOEVENkZCODVFNDA3ODY3QkYwRjEwRjEKLToxMDk2NjAwMDA1RTFCNTNBQjMxQkZBQkZGODg4QkRGRkUxN0E4NkFGRDIKLToxMDk2NzAwMDA1RkY3QjNFOEZCRjI3MTJCNjVCRTA4RjBGNDM3RDc4REYKLToxMDk2ODAwMEM5Mzc0ODAyQzY3MUE1MjMxQUI0OEJCMjc2RkQ0QkQ2RjIKLToxMDk2OTAwMDc2NEVGQTBCQjU2N0Y0MENFRjREQTEzQ0FCRDlDRjIwNTkKLToxMDk2QTAwMEJGRkVBNjNFNEQ3NDVBRjcxQzQ5MTBFMEJGMTI2MUY4ODgKLToxMDk2QjAwMDU4RUQyOTVFODQ1QzBFNjRERjY5OUEwQzNGNDIxNkQyMzUKLToxMDk2QzAwMDc5NEFERDk5NEREMUYxNjJFOURCRDUzOEU1Qzc3MDZEOTYKLToxMDk2RDAwMDhGMEE3NDBGRTkwNzNCNDE2RjlEOEUyOTQ0OEEwMjVFMTEKLToxMDk2RTAwMDg1Rjk2MEM5QzU2NjMyQUEzNkQwRjlFQzdENTkzMjQ2OTMKLToxMDk2RjAwMEM4NUNCODE0MDg1N0NENkM1REY2OEIyNERCNDRGMEVGRTIKLToxMDk3MDAwMDJDMDE3QTEyMzhGRkZENEJFRTQ3QkExNUEwNkIwNUQwM0QKLToxMDk3MTAwMDk1MjQzQTdERkUyRDJFM0ZFRUFGQTcwOEM4OTVBQUE3NDcKLToxMDk3MjAwMDIyQTkxNTczQzcxOTAyRkUzNzQzQUZFOUM4QjYzQ0ZBNDAKLToxMDk3MzAwMDdGNkVDRDJGOUQ1N0M3RkMyMjVGMUUyMDY2MzYwNTdDQUQKLToxMDk3NDAwMEYxRDhFN0NEMkFGRjlFRjNGREIyQkExNEYyQjdEQ0Y4RTgKLToxMDk3NTAwMDczRTk2N0UzRkYxREQxQjExRkEyQTYyM0YxQzAyQzNFMjAKLToxMDk3NjAwMEMzQUVDOTFFOTA2QkJBMjY4RDI3MjhDOEE1NzQ5Q0I2QjcKLToxMDk3NzAwMDNDN0UzQkM3OUJBMTUzNEVEQkU0RjgxQjlDNEZDMzlFMzIKLToxMDk3ODAwMEU5RTdGM0ZCNzNFMkYzNUQwRUY3NURBMjYxNjlEMTc1NjIKLToxMDk3OTAwMEU5NTEzNjRFQjlGRTdGMDIyQ0FFMDE3OEM3QkE5MjUzMUEKLToxMDk3QTAwMDM2QkVERkNERTEyRjdCQ0UwRTU3OEMzRjlGOURFMTRGMjQKLToxMDk3QjAwMDJBMDJGMjY4QUQ0N0Y4MzNFNzEzQzI0NTA2RkZGQzZCOTcKLToxMDk3QzAwMDA5NTkwRUZGODczNkY5QzNDRDkzNzdDMkQyN0EyNTlDMEIKLToxMDk3RDAwMDM4MERFRDZGMjM4OThCQkM4RDc0QkRCODEyNUY4NDcyMTgKLToxMDk3RTAwMEFCNkNCRTg1RkQxMkJGRjZDNjI1NUNFRTI0RDQwMzZDQkYKLToxMDk3RjAwMDNDREEzREExRkQwNzc4N0ZCMkQwNDEwODk1Njc3NzJCMTEKLToxMDk4MDAwMEM5OEM1MEQ0QUU5MjVFQ0QwQTk0OUYwNzA5MzExNjY4NzgKLToxMDk4MTAwMDc5RkJGQTE0REJEN0Q3NkI5OTJEQjA5RjZGOTAyOTIxNzQKLToxMDk4MjAwMDc0QkMyQUEyNzlBMDA0RjgyQzg1MEJBRUYxMUI3NDI0MTkKLToxMDk4MzAwMEUyMjYxRkFGOEExNzkwMUI0RjBCNDk3OUFBRThGOEFEQjMKLToxMDk4NDAwMDhBNkQ1RDc4Q0MwNDAxQkQxMDg4OTBBQzI3NDhGNThERjkKLToxMDk4NTAwMDEwMDgyM0ZFRUJDODNBODZCRjJFNDA3RkQ1QjJERTJEMUUKLToxMDk4NjAwMEQzNzFBNDk4Njg4Q0QzQTc1NTFCQzlGQTFENzk3MkE4MjcKLToxMDk4NzAwMDBCNEM3RUJCNjNBMjA4NzQwRDUwRkRFRkE2NEIzMjU4MTMKLToxMDk4ODAwMDRGRDczQkFDODcwOEI1MzcwQUM4RUQ4QzdFQ0Y0OTI0NEIKLToxMDk4OTAwMDNCOEZGNjlCMTM0ODc2MzVBREZCQzlGQTA0NkQ5Nzc2N0UKLToxMDk4QTAwMDkzRjVBNzcwNUM2MjhDMTc5MEIzRUQwMjlCNTcyMTM2M0QKLToxMDk4QjAwMDdERjYyQ0RBMDUyNEYzM0VCNDBCRDJCODhFOTU1OERBMzcKLToxMDk4QzAwMDg0N0Q0MDM1ODM4NjFCQTZGREVEN0I5OTVFOTM4OTA5RDcKLToxMDk4RDAwMDcyMTI4QUE1QjM1NUYwNUU1RjFBMDU3QzE3QzQ5MkU0MzQKLToxMDk4RTAwMEY1NjY1NjRFRTVFMUFCRkE1MzExQjQ5RkEyNEI4NTlFNDcKLToxMDk4RjAwMEJDN0RFQzE4OTU5RkE5M0M3OTFCREFDQkVDODBGRUU4ODcKLToxMDk5MDAwMDAwRDczMzlGNDRGRDY5QkRGRjA0RTc5MzMyNDk5MTAxQkQKLToxMDk5MTAwMEJBNzQyNUQzMjBDQzk1RUIyMUExQjA5RUQ4QzlFOTg1OTYKLToxMDk5MjAwMEJGMkJEN0RBRTU1NTlFQ0ZFNTk1MEVFMTk2MDlDQUQ3NEMKLToxMDk5MzAwMEUwNTMyNDAzRjg1MjRFM0U3RjMzQUQ1RkYyQTI0QTQ2MTUKLToxMDk5NDAwMEE4N0MzNTkzMTMyMkM4Q0ZBNTY0MUE0QjgzNjgxMjk0NjAKLToxMDk5NTAwMEFCODg4MTY1MEI4OTYzRjk4NzM2MkFGN0I0QkNDREE0M0YKLToxMDk5NjAwMEYyREU4MEYyRkY1MTgxOEVGRkZCRkFDNEIyMjA3REVFNjEKLToxMDk5NzAwMDg5QTUyRTg3RkQ4NUNBRkY3Njc4NEVFNTQ0MDA3OUFBMzEKLToxMDk5ODAwMDM2NDlDMUZEMzIyNEIwRjUzQTI2NkIxRTgwMUIzMzA5REYKLToxMDk5OTAwMEVBQzc0MzQyNkYwQUY2ODkyMTZFMjcwRDc5ODg2RDFENEIKLToxMDk5QTAwMDFGRTA3NDBGRjEzMjE0NEI5MDQ5OTg1RjNBMkZBMEQ3MDMKLToxMDk5QjAwMDhGNDU2RkM1NzVFQzk2NTk3RDgwQ0UwQkNBREQyNkI2RjYKLToxMDk5QzAwMDhGMzlGMTUwNjE1RTU2OUNGRjNDNkNGRkYzQ0ZDMzgwMzIKLToxMDk5RDAwMDUwNTM3MDFFMDY2MTFFQjYwQjRDN0YyQUJGNjJFMzk3ODAKLToxMDk5RTAwMEEwMEZGN0U5OURERDhGMjJGRjk1NTNFNzA2NkZEMUJGRUEKLToxMDk5RjAwMEQ2QTEzN0Q3NzEzREI3ODE0QzJGOTZBOTFFQjlERDlERjEKLToxMDlBMDAwMDU1NjQwMUYxRkUwMkUwRkRENkNGNEU3QzAyRTgyMTkzQzEKLToxMDlBMTAwMDg5NjVCMDRGNTFCQzFGMTY1MDRGMjZDOTA5M0FCRUZDOEMKLToxMDlBMjAwMEIyOTQwMTNGNDVGNDVEQTMyNjRBRjgyOTQ0QTNGQTRDQjkKLToxMDlBMzAwMEU1RkFBQzAxRkVCNzRFN0JDMzM3NTdGRjJFOURGOEFCNUUKLToxMDlBNDAwMDkzNjg2RjEwMzUzMTAyRkE2OTUzNTIwNUI5RThBRERCRkUKLToxMDlBNTAwMEE2ODIxQzBERDZEMTNBQzg0RDQ0NTE4NUNCNjhFOTI3NjIKLToxMDlBNjAwMDFEMjA3Rjk2RkQzMTEwRDkzMTE0MEQ4M0RENjNBQzg1NDcKLToxMDlBNzAwMDZFQURGMUI3NDQxMjQ0QzBFNzg5NzlFRUE4RkRGOTJGMjUKLToxMDlBODAwMDYxRkQ2Qjg5ODg0NEU5NTMzMkVGNTM4MUNFN0U2RDlCMzMKLToxMDlBOTAwMDlBRUY3NzI5RkU0NDQ0QTE3MjM4MDhFM0MxRjhBRUU0OTYKLToxMDlBQTAwMEYxNjgwQkU4NEZCMkJBMDdGNEI5OTYyNEFCNDFCRTIzNzQKLToxMDlBQjAwMEVEODhFNzk2QkFCODBBRUZERDkxNTVDNEFEMDM4QkUzQTQKLToxMDlBQzAwMDY4NTcwRDg0RURGRURDNjBERDFERTQ1Njg0NEY5MjM3NEYKLToxMDlBRDAwMEZDNzNFRDZCQjczRjQ5OTRCQzdEMDJDNjkxRjJFNkQ5QTkKLToxMDlBRTAwMDJEMjdCMzQwOTcxNDI5QUM3N0ZGMDc5NzdGNTE4RkUzNTkKLToxMDlBRjAwMDdFNDNEMjlGMzc1NTJBRjcyRTJFMDNBRTA4Rjk5OTcwNzAKLToxMDlCMDAwMDY5REUzQzg1RjNGNjFEM0E0RjAzMUVBM0IzRDBCQUE0MTkKLToxMDlCMTAwMDNCODhCRDVGNDMyMEVBREFDQUZCOURERDZGRjlCQ0E3MzUKLToxMDlCMjAwMEQ3MEQ0REUyQkMwN0QyMzBFRkJENTRFRkUzQkVGQTZBNjkKLToxMDlCMzAwMDIwRjMwNDI1QTE3QjUzRjIxMTc4RUY0QUM5QTQyNzhDQTYKLToxMDlCNDAwMEREMzRDMTNFNzc5Nzc0QjEwMUYyNzcwMEY4NDYzNzhFNjUKLToxMDlCNTAwMEQxMkUxNUNCOTEyRTBEQ0JBMUFFMDg5NjlGRjc3REVFQTEKLToxMDlCNjAwMDhCOTNCNEREOUU5NDVCNzM4MzFDQTRFRjdBMTZGQUEzRTcKLToxMDlCNzAwMDVFNzc3QzA0RkEwREQzRkVBMTVGNTlENTlFRDBBMENFQUUKLToxMDlCODAwMEY2MUQ1NzhDOTUzNzhBOEM4RjU1QTIxN0YxNkQxMTk5NTgKLToxMDlCOTAwMDFEQUUxMzEzRTUyNUFEOTVGNkQzQUI1QUVENzY2RUMwMjkKLToxMDlCQTAwMEYwQ0VBRTA3RkE5RkFGQTlEQTU2RjdFODBCNkRGMENFMEMKLToxMDlCQjAwMEY1RjI2MzkxRTkwRDk3MUMyNzQ2MzM5NDg1RjVGODU5MjIKLToxMDlCQzAwMDQxNDIzODQ5NUEzOTBERjY4N0JDNDA0MUJCQTA1RkIwQ0QKLToxMDlCRDAwMEVCRUQ4NzQ1QjZERjNEMjZBQTQ4Njc4NDRDQkY3MDk2RkIKLToxMDlCRTAwMEYyQzNBNTg5NjhGNzA0NDMwRDEzNTlFMDRGOEQ2MjJDMjkKLToxMDlCRjAwMEExNDVEMDM1QTk1NTE3MTg4Rjg0RTVERjRERTZBREYzQTMKLToxMDlDMDAwMEE3MDQzMzI2RkUwNUYwNjkwRUZERERFRDM2QjlERTI3MkIKLToxMDlDMTAwMEIyRkRFRTJDNUYyRjkyREJFQzA0M0QxM0ExNjI0ODUwQTUKLToxMDlDMjAwMDNFRjQ0NzgxMEZBMjZGQTNEMTQ0RjlEMDFGNTI3NEYwQzQKLToxMDlDMzAwMDg3RkFCQUM1ODJGQjhFOTMwRjUyRDU4RDExRDA4RjRFMDUKLToxMDlDNDAwMEJFN0Y5N0NCRDEzMzlDRUY5QkRGRkUzMEVBODlGRDlBMzQKLToxMDlDNTAwMEQ4OTFGMTAzREY0RTc0ODA5RUVGNkIxMTQ1OTBGM0JGRjYKLToxMDlDNjAwMDE4RkUzOUU4RDgzM0MzQkYxOTNBOTA2RjdENjE2NjM3NjMKLToxMDlDNzAwMDhGNkE1NDdFNjAzRDg3OTlGQ0U4MjREQjgxRUYwRDRBQjIKLToxMDlDODAwMDk3MzA5NzJFMjdGRkRFNkJGQTJDQkU1Nzg1QzQ3OEE2MzcKLToxMDlDOTAwMDE5RjA5QjhFMjM3RTFCRTU4MkY4RkQ2QkYxRERDMkNCQjQKLToxMDlDQTAwMDNGODM1Nzk2RTE2NUZDNjVFMEY1OTQ5MDE4ODdGNTdENTQKLToxMDlDQjAwMDgwQ0JFQjAxNzk1MjA1QkQxMEIzRTRDNkM3RDZEMTVDQTkKLToxMDlDQzAwMEJEMjREOEU0OURGNkYzMjVFOEU3NUVFODg3QzJERjJCRTQKLToxMDlDRDAwMDRGREJGQUIxRTAwMkMwMDdCNjJFRTI2QzVEQzg3RkQ2NUEKLToxMDlDRTAwMDc1NjFFMTM1QzJGMUQ2NDk4NkM5NzU1MzYxQjk3RUFGNTgKLToxMDlDRjAwMEYxQjJGNkQzMUVERjE1MDRGNDREQzgxRjQ3RkI3QjgxN0MKLToxMDlEMDAwMDNGOUUwNTdFRjVENjI4M0FEODNGRDQ1MUMyRkQxQTlCMTYKLToxMDlEMTAwMEVBNzk3RTUyQ0RGNjA4QzBGNzA3QjZBMzVEREVFRjhBN0EKLToxMDlEMjAwMEEzOUQ3RUJDRTYxQkU2Q0Q5NEFFREVCN0FCODhEQkEwODAKLToxMDlEMzAwMEZFODBFRjhBRTMzQUU4QzVFMzEyRkE2QkJENkYzNzJFNzcKLToxMDlENDAwMDQ4MTY5ODY3MUZDNEM3MjhGRTVFQzAwRkVENkE2NUM2MzcKLToxMDlENTAwMDA4MDc3QzdCRkQ1NEYxRDE3RURFNkMyNjE5RDBBNzJFM0UKLToxMDlENjAwMEJGMTkwMUJCQkI3Nzg1NkFGNDIwNTQ5QzAwN0Y3QjdDQzQKLToxMDlENzAwMDlGNjg0RDM0Q0Y2REVGRjMwRjdDNUFCQTc0NzYxQ0ZBOUUKLToxMDlEODAwMDI3OUMwNURCOTdFRUUxRTBDNzIzN0Q4MkVEN0Q0MTNDMUEKLToxMDlEOTAwMENBRDU1REIzNzUwREZCQTc3NTVEODVBRTA1RjM2Q0UzQTQKLToxMDlEQTAwMDJDREYyOTJENEQzMkVDOUJDNDZCQzBGQ0M3RTIxRDNENUUKLToxMDlEQjAwMDdGMDQzRUZEQkQ4NDdBRDBDOTlGQkY5MzEyNUU2OUNERkEKLToxMDlEQzAwMDZDREQxNTRFRTBCQzU5RkQ1RDVEMjNBMzFFOTVFQjQ4OEYKLToxMDlERDAwMEM2MkRDMEE4RjEwRUIwNkY3QkVCNDQ4Q0FGQzlGRTZERjEKLToxMDlERTAwMDU1MjVFREVFQkFDQUVDNkVDMkUzMUU5NjNDQjRGRDhBNzAKLToxMDlERjAwMDhERUIzNTk4RkUwRTkwNDkwMjcxOTUyQUMyRTIxQTIxMjgKLToxMDlFMDAwMEEyMEIwNERCMUI0MjFDODMyNTFCMzE5RTEyRjZCQ0RCMUMKLToxMDlFMTAwMEZEREU4OEZEMEFFNjE4MzlFQjNCODc3RTY1REE2RkUzRTUKLToxMDlFMjAwMDdCRDA2RjE5N0MzREU0MjFFQzk3QUE4N0YwRDk3OUIzRjgKLToxMDlFMzAwMEZEQkEyMjQ5N0M0OERFM0U3QjU2NUE0QjU4MTNGQzRCRjgKLToxMDlFNDAwMEEwN0NDQkEyODFFQjkzMkMwQzFBNEZEMEEyM0Y3Qzg3MzUKLToxMDlFNTAwMENEOUZGQTg4RDQ2MDhCOUIyQURBQzBBNzg1MjAyREVCOTIKLToxMDlFNjAwMDZFMzMyN0YzRjQ4MzczN0UzQjYxMjBGMDJGRUI3Njk5RkEKLToxMDlFNzAwMDkzMTVFODBEMzBCQjBCQzVBNTA2OTQ0NEE2MUJGNkVGNjEKLToxMDlFODAwMEM1N0U4QzIzMTIzOTg5NzFFMTQxQTE3QTE1RDhDRjE2OEMKLToxMDlFOTAwMDlDNUNBNzY0MDFBRjQwOEI5OTAyN0QzMTM4NEYzNDI0MUMKLToxMDlFQTAwMDAzRkExRDNEMDFGRTAwOTFBRTMxMTIyNUUyNEI3MjlENzkKLToxMDlFQjAwMEZDOUI3QzdBRkVBRDE0MDgyMzlFM0NDRUQ1NUI0NkRFMkYKLToxMDlFQzAwMDA3QkE0QTlGNEYyODhBOTEyOEU0Q0ZBNDI0NjZCRjI4NjYKLToxMDlFRDAwMERFQzJFRkFGNTREQUY3NEE2QkU2RjIyRDBEQkNBM0NGMkEKLToxMDlFRTAwMDA3NDNENEU1QkU4Qzg5MEZDODgxNUNGN0ZEOTNDMDg3MUEKLToxMDlFRjAwMDgxREFBRDkxNTJGNDEyOEREQTM5Nzk3RTkxQTE5ODIzRUQKLToxMDlGMDAwMDUyNjkzQzBFMTRDMjgzRjhBOUYwQUMyRjMxMEU5RjVGNEEKLToxMDlGMTAwMEVENEE4M0M1M0I0MDI5QzI3OTFDQjdDRjI4REU0MTYxOTkKLToxMDlGMjAwMDNFRDNEM0YwQjdCRjY1M0MwQjcxMzREN0NEN0UxM0U2N0IKLToxMDlGMzAwMDRGMzI4RjEwODlDMkZGQTg1NjIyNDIyQkQ0QkRBRjhCNUYKLToxMDlGNDAwMDM4OUYxQjBERDQ1NzREQ0NCRjMzRTkzRkEwMjNCODUxRTgKLToxMDlGNTAwMEIxRUQ1QkEwM0Y2N0Y2QUQyOEM4QkZCREZFQjQ2NDhGMEUKLToxMDlGNjAwMDY3RjY3NjFEMjVCRjVDMzI4QjNGN0Q2NDE2OEExN0NCNjIKLToxMDlGNzAwMDRBRkI0NDYxN0U1NDU3QzQ4RjQzNTQ1RTA4OTU5NzgzQ0YKLToxMDlGODAwMEQ0NkZBNDRDMjE2OUVBMzc0MkZEMDBGNTFCMDlGQTkzMEUKLToxMDlGOTAwMDNBOTY3RDVENEQ1OEVFODNBNkVCRTFGQzJDMzkxNDhEOEQKLToxMDlGQTAwMDQyQkNGNEYxQzgyRDE0RTQxMEU4MEUzQzU3RjFCNjQzNUUKLToxMDlGQjAwMEZDN0NDNEFBRDMyNzAyRDRGOTM5Q0IwRjdCRkZEODA2ODcKLToxMDlGQzAwMEYxOTgxMTBGQUIxMzMyREQ2NkRBRUE1MjBGQzRGQjQ3OEEKLToxMDlGRDAwMDAyQUNGRDJGMjU3RjNCOUM0NzFDRTJFNzQ4NDQzNkQ1NjkKLToxMDlGRTAwMDhGRTZGOUZGMzlDOTg1NzQ4MDBEQzREQUZGQkUxQkZBMEMKLToxMDlGRjAwMEYzQzhCQzlFQUE0NzdDNjZFQTk0OEY4MDhGNDc2NUY1QkMKLToxMEEwMDAwMEJBQkVDNUQ4M0ZBQTAwM0E1RUFDRUYyMjM2REUxMjY2NzEKLToxMEEwMTAwMERGOTNFNjZENjVGOEQ4ODNGMjdGM0QxQ0MyMDFDRENEOUMKLToxMEEwMjAwMEQ1NzBBODRDMTRDMzIwQjBERDFDMEE3MUJDMkJFQzg3ODIKLToxMEEwMzAwMEM4MDlCNkRGRjFCODUyRjE3NTUzNjY1RkUzNzg5NDlCQjcKLToxMEEwNDAwMDdGMDI3RTI5QzQyRkE4MUU0RUMxQjgzRjJEQkM0RkJGMzIKLToxMEEwNTAwMERCRTMxRTcyOUQxQjVGOTRENkU5OTQ0QzU5RkNCNzUyMEEKLToxMEEwNjAwMDQyOTM2OTNENjA0RTY0QTNCNDFFQkMyNjlCQzJFNTVCNkYKLToxMEEwNzAwMEUxQjhCRjkzMzQxRTBGNERFMEZBQjdGODJDNkJDQ0VFNkQKLToxMEEwODAwMEI4RDIzMThGQUVCMDg5RTc5MjFFM0Y1QjdGOTVFMkJCQkQKLToxMEEwOTAwMDFFQzZDOUVCODczQ0QzNUUxQjBGMTQ2RjU3MTMxNzY3OUYKLToxMEEwQTAwMEVEMkRGQURGQkMwRUVGQUNCRDQ2RkYwQjk5RDVCNjdBQUQKLToxMEEwQjAwMDU1RUI0MjFCN0NDMDY4QjBCRDc3NjkxN0RCREU5RkVGQjQKLToxMEEwQzAwMDNDNURFQUEwQTNEMUUyMUZBRjQ3OUM3NDU2MkM3N0IyNDcKLToxMEEwRDAwMENFRjdCOTE0QjMxRjY3RUE3QzNGMkU1NzdGN0I5OUJEM0IKLToxMEEwRTAwMENFRkE3NTkzMUJBQTk4N0RDM0VDOTg3RjQzMzg4QzEzRTYKLToxMEEwRjAwMDBGMjM0RkZGNEEwMEM3RUFCQTI4MTBDQkJFQ0QzNkNEOUEKLToxMEExMDAwMEVEQkY1N0ZEMUNDNkUxQ0M1RTk5NzhBRTk4MUJBNzRCRkUKLToxMEExMTAwMEI1MjczMUNFOTZFQTcxNkJCRDYxOENCQjYxOUM2RDBGMkEKLToxMEExMjAwMDM1RTREREI0QkNDRDk1RDgwREYyN0JDNkIzMzg0MzgyOUYKLToxMEExMzAwMEQwNkY3MjFEQzRBRDdCMURGMTA0QTczQ0M1MUVCQUJFMTUKLToxMEExNDAwMEUwNzk5OTU1MEU3NUIxRjg5RjU1NTdFQjBBRTcwMURDOTgKLToxMEExNTAwMDJEQjNGM0ZBRUZCQjEyNzcwMzFFQTAxQjA5QzY2OTA5RTIKLToxMEExNjAwMEFFMDM5N0NFRjZDNzYzRDFBREU0RDdFOEZGQjNGMzMxQzIKLToxMEExNzAwMDg1QTQ0RTM2NTI3QUQyRDQ1RjFCRDE4MTZFQjY0RTg2RkMKLToxMEExODAwMEEyNUJENTE4N0QzRTE2MTJCOTREMzc4REY2NTNCQTZEQzgKLToxMEExOTAwMDdFMkRBQ0E3MkE3OTFBQ0ZFREFBNjI4NUYxQjk1NzE2QTAKLToxMEExQTAwMEY5QkNERDU0OTIzRUU3N0NEQzA0ODE1NkRBNkVBQzVFOEQKLToxMEExQjAwMDEwOTFGRkY1NjJFNjA5ODg0N0Q1ODlCOEFFRjc5QkNBQ0EKLToxMEExQzAwMEEzNzBENEJFQkZBNUZBN0E4Q0E3OUI4QTI4MjExRDU5RkIKLToxMEExRDAwMEI1RDAzQUVDRTc3NjUzMkY4RjlGMUVBODYzN0VFQkIxODQKLToxMEExRTAwMEI2Mzc1NDM4QUYzOTYwQjQ2MzNFODA5Q0ZFMTFCNjFGNTkKLToxMEExRjAwMEU0RkM0RUFGOUNDMjM4Rjk2MDkxRjM5NzFFOTlGOUY5Q0YKLToxMEEyMDAwMEJEMDE2RjY3QTZFMEZCMjBCRTRGNDdEQjlFN0YwMEU4RTUKLToxMEEyMTAwMEEwRkFGNzA5RjRDRjQ4RUQyRTRBODc2NjZBQUI4MERGRDMKLToxMEEyMjAwMDYzRjVBNkY4NkI5MEFCNEQyMkNBNTkxMEUyNzIxMjlDRUUKLToxMEEyMzAwMDhCREFGREU3QjE0RDIyOUVCM0E2MzVCRjAxRjZGQjY5NkYKLToxMEEyNDAwMEYzNEQ4MjFCOTFBQ0Q1QzJGOTYyRDVBQjFCMzREQzJCMkMKLToxMEEyNTAwMEE5QkQ1MzlCNjdFNzU3NkQ0Q0FFODNGOUIyRTg3MjkzODMKLToxMEEyNjAwMDZCMEJDRTg3QjA3ODRGMDJGODc5RDcyQUEyODMzRkU2RUUKLToxMEEyNzAwMDVFREM5MUZEMDJFREY3Q0M3QUI3MDZBQUUwQ0FDMDk1ODQKLToxMEEyODAwMEQ5RUY4MDNDRDE2RDA1RkM2NDc3RDhDQzgyRERFNEU5NjAKLToxMEEyOTAwMEY0MTE5REJFMEY0NjI2RDA4RTUyMjMxMjMxQzFBRUZBNjQKLToxMEEyQTAwMEJGMTJDRTE3RDUxOTQ4OTc3QzY4RkQ4OUNEQjRCREIyRDEKLToxMEEyQjAwMDQ5NUM4MDc2NTkzM0RCNkYzNEZBMEZGNjFCMzU2NkI3OEQKLToxMEEyQzAwMEFCMjQ1NzE2RkJCQjc3RjI1MTNDNTc1NjFDNzY5NTRDODYKLToxMEEyRDAwMEYyRTBDMUVFREFCNEVEQzM4RDA1RjQ4MTU1NEE5MzQxNDUKLToxMEEyRTAwMDNDRDcyNUQyOEQyNUVENkNGRkFCOUZGQzg3MTdGM0Y4OEIKLToxMEEyRjAwMDNFMjUzQkVDNzQ2RUJGNTlGRDE0QjNERkNFNzRFREZFMEEKLToxMEEzMDAwMDg3MTdBOTJDMjc1QzJDMEUyQTJCRTY2RjYwNUQ0RUYxNzcKLToxMEEzMTAwMEYzQzUzMTQ3REU0REMyQzVENkNCMTlCRThFNjE2NkMxQ0QKLToxMEEzMjAwMERGMDZGRjE4RjhENTc3RDU3NkU2NjcxMUMzRTZDN0QwMDQKLToxMEEzMzAwMEY1N0U0NkNFRjNCM0FERkQyRTZEOTZGNjI3NjZGMzVBNDUKLToxMEEzNDAwMEZDOUU1ODg5QkM5NjZCRTU4NEVDMkE5MUQ3NjJBREQ3MDgKLToxMEEzNTAwMEUxNEQyNjg5RDBGOTFEMEQ5MTRDMEZDQ0VGNjY5M0VDQTEKLToxMEEzNjAwMDA0NzkxNTg4RDFBMzMxRjg2OUVCMUMyNTBBNzI3ODE1OTgKLToxMEEzNzAwMEQ5MDVFQjU3OTcwRDM4ODdFQzZGRkMxMDc1MTQ4QkUzRkMKLToxMEEzODAwMDJCODdFREYyNTE2RTFFRjczOEU2NzE5MUNCNkU4N0JCQ0QKLToxMEEzOTAwMDQ4QkMyQTFCODUzODQ2RTQ3QUMwNjM3RjU4MzE2MDNENEIKLToxMEEzQTAwMEJBQzQxQjc3RUZEMEU3Q0UyMzU5QzdGNDg2MkI5QzI1ODAKLToxMEEzQjAwMDg1QzZCNUY4NzlCQkNCNUNFNjgyMzhCQjYyOUM0QzgwMjUKLToxMEEzQzAwMEZDQjcyQkU4RjczQUUxNkY3MkYxM0M5NjI4OTFDMTNFNTkKLToxMEEzRDAwMDRCQzEzQTgxRjVEQjYxQjJCQzMxNDE0QjNFNjgyMEZBOUEKLToxMEEzRTAwMDcxREJCOTU2RUMyRENDNjc3QjQ4MjJDOTc5MUIwOUI5QzIKLToxMEEzRjAwMENFMTU2NTdBQTY2RDNCQjM3QjNFNDAwNDI5MDRGMDA5NzcKLToxMEE0MDAwMERDQkY2QTRENERBMDdEOTM2MUNCMkVEMzZFOEU1QzlCREQKLToxMEE0MTAwMEE3MjdBRkUzRjIzOUZCM0UxMUY5QThFREJEOEJFMTE5OTcKLToxMEE0MjAwMEUwNzZCM0I2MzM3MkVEOEEwMkVENDM4NUY1RTQwN0I4MDIKLToxMEE0MzAwMDVDNUZFN0UyRjY0NDZBMjdFNjA1RjVFQjM3QzY4MUNGQjUKLToxMEE0NDAwMDdEOUI0RDYzMTc2ODJEOTAxMUM4NDdGMTEzOUI3RDRDODAKLToxMEE0NTAwMEU1RkIzQUUwQTcxNTNGOTJCNTM4OTY5NjNENTA2Q0ZFNjUKLToxMEE0NjAwMDlENzY4MDJCNjJDRjNCQTlGNERDMzY3NkU4RkE5MkUzNDYKLToxMEE0NzAwMDM4Rjc2NzJCQkYwRDM0NUYzRTlGNUM5QzBGQ0Q3Q0JERDIKLToxMEE0ODAwMENDREE0QjY5QkVERTBEQ0MwNzkyMTQzMzAxNzE0OTQ5MTkKLToxMEE0OTAwMDIwMzY3QjZCOENDQjhCRTQ2NUVGOUQ3ODUwRkZGOTRFQkIKLToxMEE0QTAwMDU4QTc1MkQwNDRGRjlBRjg1Qjk4REQyNjFCRkFCNTA1RjEKLToxMEE0QjAwMEYwQjdDRTM5MUZFMzc5QkNCMUY0ODc3MEZGMUIwREI1M0YKLToxMEE0QzAwMEUzQkVEN0E3OTVENjFGRDZCRUJBOTk1Q0EzNDJEQ0FFMzEKLToxMEE0RDAwMEJGQjhGRTE4Q0RENzFGNEE1OEI0QUY2M0VFREY1M0ZBQUEKLToxMEE0RTAwMEY1NDI3Q0I2RjgxNEUxRjFEMkRFQzBGNjQ4QzlCOEEwNTYKLToxMEE0RjAwMEUzN0NDNTUwQ0MwNzkwMkZDNUY5RjY4NUYzRTFEQjI4NDYKLToxMEE1MDAwMENGQUJEQkRCRkZEMkYzM0MwRkMxQUVBRjU3MTZENUQ3RDUKLToxMEE1MTAwMEZGQzlBNjRGQjlCRTdFMEZGOUZGRENCQkMxRkY0QUUzRkUKLToxMEE1MjAwMDMwOUUzRDkyN0U2QTFFNTVGMTcyMEFFOTE5RDYwRkE2MzkKLToxMEE1MzAwMDMwMUUwM0VCMUJFQzgwNzQxQkU2MkI5MDE4NDFCRDA4MEEKLToxMEE1NDAwMDBENDFERjc5NzQxM0Y5RTZFNTcxMjZBNUNFQkVDRjQ4M0IKLToxMEE1NTAwMDYxQUZBRDFFRTk0QzExQzg1NzgzN0U4MTZFQ0YxRTA1RDkKLToxMEE1NjAwMEM3QjVGODRENkQxNkNDMjdCM0VDNEI1ODRFRTA4RjE0QTEKLToxMEE1NzAwMENCNEZCMzRBMkI3RTAzQzczODY3NzE5RkZBRUM3MUUwNkIKLToxMEE1ODAwMEVGNjkzRkMxRkRBMTM4RkRGNjcxMjIxRjg5OTdENjRGQjMKLToxMEE1OTAwMDBFNzhFMjk3RjUzNzBBOUMwQkNFNkQyNzkzMzdGMkY0Q0QKLToxMEE1QTAwMERBRkY3MUU4MTNGM0M4Q0Q5REE4NDc4OTY4NDBGQ0IyNzMKLToxMEE1QjAwMDM3QjI5RDI0MjhERTAzODRFOTkzMjEyOEQ3NDMzRUM5N0UKLToxMEE1QzAwMDJBMERGQ0RGRUZCQjc0RDY1RTY3RkU5REE4RjIzOEJEOTYKLToxMEE1RDAwMDVFOTlCRjc3MTdERDg3MEFEOTNGNEIxNTY2MUY5RkY5MzQKLToxMEE1RTAwMDVDRjIwRjkwOTc5MDFBMTE3NEQ4REY0RTc1RTVEMDdFMEIKLToxMEE1RjAwMERBOTE1REFFNDA1RURBNzI2NTNFQzJFRDM4MTQ1NUI2NTIKLToxMEE2MDAwMEU0QURDRjFEODQ5REZCNTM0NDk0N0MzRDZBQUQzRjI1NTIKLToxMEE2MTAwMEVEN0UxRUU4OUM0QUIzQjhDNjU0RkE5RkYxNUM3RkVBMEYKLToxMEE2MjAwMEIwOTQwMUE2NEUwRDVENTc3MkZEOUNFMjdBREI4MjNCMzEKLToxMEE2MzAwMDc1NTgzMkExQkZENDkwOTA1OTQyREI5RjkyQ0Q2MEMxMzIKLToxMEE2NDAwMDNDMDA5MjYxRTdDMUJDN0U0QjVBQjJDOUU1OTlCRDA5OTUKLToxMEE2NTAwMDA1RjRDQ0E5MkU1NUY4MjU5RDlCNUI4MTRFOEFGRjhFNzMKLToxMEE2NjAwMDc0NTQwMTlGQUMxQzVERjMxNEZCN0M1QTc0RjY0M0JFMUEKLToxMEE2NzAwMDQyNzQzNjdGQTczRkZDMjZEMjdCOUEzRTk3NEFDNDkzMEEKLToxMEE2ODAwMDQ2Qjg5RUU4MEYxN0Q2Mjc1RTdFRkVFQTc1NjUwQUU3OTQKLToxMEE2OTAwMDNEMzhFOEY1MzVEOUQ3QTU4NURGMjBDRkE3MThENDE4RTAKLToxMEE2QTAwMDVFODMxMTExRTc2MUIwQUVCNDFFRUJFM0YzNjBDMUY1NTgKLToxMEE2QjAwMDQ3RDg3OTZCQkYxQzU3MkJDMUM3QTVEOUYxMjkzNjhFNTYKLToxMEE2QzAwMEJBNzFBMjAzQjZGOTJBOTJFODY4OEYyMjdCNUY4MjM4QkEKLToxMEE2RDAwMDAyODYwRTc1RjA5RjlFM0E3NjJCQzQ4MTZGRjY5QjQyRTAKLToxMEE2RTAwMDA0MUU0RTY3QkY0M0VCMEJBOEJGMDNGNkE5NjY2Njg0NDIKLToxMEE2RjAwMEM1MkQ5MEQ3MjkxMTg4MUIzRjk0N0MzM0ZCMUFGOEEzRjIKLToxMEE3MDAwMEQ0RkY4MTdBNDg0Rjg2REUwNzdBMjg5NjEwNjA1REVEODcKLToxMEE3MTAwMDA3RTU4RjlEN0ZCMEI3QUQ5OUFGM0Y1QUZGRDQ0MEZCOUYKLToxMEE3MjAwMDE2ODg0M0NBMjRDRUUzMTlBMjBFRjk3QUI4RjRDNUUyMUEKLToxMEE3MzAwMDdBMDJCNEU3NTlGNzZDQkJBMjc0M0FGQzIyMzdEOTU2QjcKLToxMEE3NDAwMERBRkZERUNERTA1M0Y0MUZFODlEMDUwRTNGMkJENDY5MDAKLToxMEE3NTAwMEI3QkJBQjFDRUZDN0I4QkMxNkYzMkJERkFENzFFNjkzRUMKLToxMEE3NjAwMDk3NTQzODk3NTU1QjQ0MkQwM0YwMjQxOTgyRkQzNjc4QjEKLToxMEE3NzAwMEEzNENDMDhFOUZBRjZCREQxMEUyMkJDN0Y3N0Q4NEU1NDUKLToxMEE3ODAwMEI5QzExNzExRjlFQkVGNDk4NUQ5QjE4QjZFN0Y1QzgwQTgKLToxMEE3OTAwMEZERTkzNDc4RDkyQkExOUUzMzBBQzlBRkQzRUUxQkQyODEKLToxMEE3QTAwMEE3MzA5RTM4NDA0RTc0MzQ4MjNEQkY0QkM0RjNBNEZEQTUKLToxMEE3QjAwMDJEMDc0M0Y5RURCRkM3Qzc5OTlEN0ZBMkNCNkJGMTU0MUQKLToxMEE3QzAwMDE2RkQ3OUE1NDUzNDYxREYzQURGRjk3N0ZBQzlFNUU2ODgKLToxMEE3RDAwMEJGNzZCN0REMkUzRUQ3NzlGOTMxMjBCRUE2RkNGQzVGRUYKLToxMEE3RTAwMEU4MzhENkJDQ0Q1RDFGNEM2RjJFQkFGRDQ1OENFMzhDOEUKLToxMEE3RjAwMDFBQTVGNUNEREM3OTdCMDlFNzJERDg0MkNDNDI3MTlDQjYKLToxMEE4MDAwMDU3RjgzRUU2Q0NFQjUzNDk5MjE4OTA5RkY4MzJEQjdGMjUKLToxMEE4MTAwMEE0QzZCNTkxRjExMkZBNDc4QTM5RkMwRkRFNEZFRTE2NDUKLToxMEE4MjAwMDQyNEVDMDdFMkJFQjY1QkU4NzlCMzgyNEQzN0REM0I3QzkKLToxMEE4MzAwMDY3QzMyMTc5MzVFNDY3OTk5OEU3MzVEQzY1RTJGMzk5RDgKLToxMEE4NDAwMEY5Nzc4QjFDNUY4MTg4NkJCOTVFRDFGMUZDRjM5MDhDM0EKLToxMEE4NTAwMEY2ODY0OENFNDIxQzg0Njg0NEI3RTQ4RTAwNUNDNzIxNkIKLToxMEE4NjAwMDE5RTMzMTNBQ0YyM0EwQTBGM0ExMUQ0MUJEQjQxMjkyNDgKLToxMEE4NzAwMDNENkJGMDlDMUVGQjgxOEU1ODFDQTY5M0Q1Njk0MzlDQjIKLToxMEE4ODAwMDI3OTc2OTIyNUU3MjVBQkQ4M0YyNzM5Rjg3RDc3NTVFRTAKLToxMEE4OTAwMDBGRjFCQUM2RUI1MTVFMjcwN0IxRUU1MzY4MURFMkYyMjUKLToxMEE4QTAwMEFFQjQ4Njc1MkZBRjQ3NzlCRDlBRDc0M0JDREVDMEVCRjcKLToxMEE4QjAwMEMyNDFBQ0VGNTM1ODdGMjM3Mjg2RjVFRkU1NzU5REQ3MDMKLToxMEE4QzAwMEFCNzk1REUzRjUwNjVFMjdFMzZDN0MzN0FCQzM3RTg4MkUKLToxMEE4RDAwMDc1MUZBRjQ3Nzk3RDFFQUY4Nzc4QkQ5MUQ3ODU3MUFDNjUKLToxMEE4RTAwMDE3OUIzRjZGQ0M0NEZFQ0VDRTdGMDdFMzFCMjFEQ0RGRkUKLToxMEE4RjAwMDhDM0JFQTlEQjNGMDc5RkU2ODdGOTcyRUU0OUYxRkJBRTgKLToxMEE5MDAwMDhBQzQ5RjU2Qjk5OTlFOTk2RThCNjM5RTEyRjUxNzUyMTEKLToxMEE5MTAwMDUzRjlFNzhFOTFDMkYyNkVGMjc2MzNFN0U2NjEwQTU3OTkKLToxMEE5MjAwMDMwN0VERDVENzA1RDU0OEFERkQ2RjNDNEVGMjNGRjRBQ0QKLToxMEE5MzAwMEY4RERFMEI2RDYzREYzQ0ZBN0RCMENDNEQzRDk5RkIzODcKLToxMEE5NDAwMDFERDg1QjI0RUY5Q0RFMkI2NzUyMTBBRkExMzYxMkZBQTQKLToxMEE5NTAwMDNCMkVENTlFQ0Y3QTk3OUI5RDczNzZCQjU5M0U2QjJGMkUKLToxMEE5NjAwMEM3NkZCQThEOUQzRkY0MkZGMTY2QzY4NUI5NzFDNkJGMUEKLToxMEE5NzAwMDcxQjM3OEMyMEYyQzNDRDUwOUY0N0I3QzM5QkE2MkQxMTMKLToxMEE5ODAwMDBGNjI3RUQ0NzBBQ0JENENGRUJBRkNGRkYyRkQ2NTY3NzEKLToxMEE5OTAwMDFDRTQ5RkUxMUQxREM3RUIyRkNDQTdCQjY2RjRDRDhEM0EKLToxMEE5QTAwMEE5MjkwQUFCN0FFODczRjA2N0I0NzBBNDJFM0Y2RjlBQjYKLToxMEE5QjAwMEJGMjc4MjI4QTE3RTc5OUJDMjU5RjkyMjEyRjZDRkUyRTUKLToxMEE5QzAwMEM1NzUyQzVFMkM3MTc4MUMyN0NBQkU2MzMwNTdDMTNFRkEKLToxMEE5RDAwMDQzOUYzN0YxNzE4NEI5RkQzQURCNjVEREQ1NkNCRTM4MzQKLToxMEE5RTAwMDNFNTY3RThBNDQ5RUMzN0U2NkYwOTFFM0M4MkZFNzczOEQKLToxMEE5RjAwMEM4NDNENkZDMTdGRUZDNDJFQjJFQkRDODc4Njk3NkZFMzQKLToxMEFBMDAwMDUyQUVGRDE3QjlCQ0NDOTFDRjIyRjNGQTFGREQ5NjlENTMKLToxMEFBMTAwMDMyNjE0MjNFOTAyNTQ3OTY3QzlEQUYxQzVEQjA5Q0MwNDQKLToxMEFBMjAwMDg2RDQ1MjVDNEU1MjI0ODlFQjQ2MDY5NzczRTVCOUNCMjcKLToxMEFBMzAwMDRCMDEzOUM5RTZDM0Q3QTgyMTdFOUU2RkEwQkM1MDdDQ0MKLToxMEFBNDAwMDY0OTQ1QjhERTE1M0IzMkE4Q0ZEMDlCMEM2OTc0MTBGMjYKLToxMEFBNTAwMEJDMEU3Q0EwRjQ1RUEyODYzODFGNTg5Q0MyMEJFNzhDMEIKLToxMEFBNjAwMDc5RUQyOTcxODhBRjIwMDk1Q0VGMzNCOENEMkE1QkU3MTcKLToxMEFBNzAwMDlCREFFQjE4RkU4NEY3RUZDMDk3RjZBN0U2RjcyNzkxNkQKLToxMEFBODAwMDNBODc5QzMzQkMzRkE2QjJGOUE1RjBGODlEREY5Q0YxNTQKLToxMEFBOTAwMDY1MDFGMTk1NDgzQzI1RDI3NjlGRTJGMDRFRkQ2NTk1MjMKLToxMEFBQTAwMDdCMzk3RUMzMjJEOUNEQkU5MzhDOTNGQ0VGMkE3REFBM0QKLToxMEFBQjAwMEM4QkY3QjY0RUJDQ0E5OUY1QzIwNTdBQkNGNUZBRTJBQUQKLToxMEFBQzAwMEQ1RUIzNTZBRTE3RDg3RUFGOTI2ODhGNzE1REI3NzRFMDUKLToxMEFBRDAwMEFBMzNGQjQxMTM5RkI3NzM5QUY3REY4MTFFNUEzMzNCQUEKLToxMEFBRTAwMDlGOTVFMjdCMDkxRkY3NUNGMTNEMzUxN0RGOEFFNEVDQTcKLToxMEFBRjAwMDREQUUyNzJBQzU2RkYzNzlFMkY3OTIwM0JGNzc0QkFFQ0QKLToxMEFCMDAwMERGRTZGQjUxQTVGODdGRUMzQ0U1RTE4NzczRjk1QkQxMEIKLToxMEFCMTAwMDNBMTJENTczRTNFRkE3Q0UxM0JGNUYzOEYxMkJCMjZFQjUKLToxMEFCMjAwMDE1OTVGMTJCNDU5ODdDQzhGQ0ZDQTU1MkZDQkFDQUUzRUMKLToxMEFCMzAwMEM3RjNDNUI2RjY5OTMxQjREN0QwMUZERkFGNkVFRDRCNzIKLToxMEFCNDAwMEM5QjNGODk5ODRFOUY1NzMxREZGREU4QUM3RkY1MDlGRUEKLToxMEFCNTAwMDI5Q0Y4RUZGMDVGNTQzQjZGMTY1RDk0MDYxQUI3NERDQjIKLToxMEFCNjAwMDg3MkIxRDM3RjU1MTFCRERDRjBDN0RENDM2RUVGOUYyNjYKLToxMEFCNzAwMEZEQ0IxNThGN0Y5MzhERUVFNzg2NkVCMkQzRUQzNzMwMjgKLToxMEFCODAwMDlGQjhEMjcxQkY3MzlFRUJGRDM3MUM1RjlGQUFEOUY2QTkKLToxMEFCOTAwMDgxNjJGNkZCREJEQ0FFQkQ0NUQ1NkM3MjVDMENGRTREMTQKLToxMEFCQTAwMDZFQUY3Q0IwNDJGODUzQkNGRjQ2MEI5RjMyRjA5RkUxODIKLToxMEFCQjAwMEY4N0ZBNjQyRjhERjcxN0NENjU3ODhDRjBGRjgzQTJDODEKLToxMEFCQzAwMEI2N0Y3QTM5REY3REEwMjNGM0ZDOUEwQkNENUJEQUU1MDMKLToxMEFCRDAwMDRFMDgxRTM4RTdGQzdBMTc3RTI3RjhBNkFDNkExMEVGRkQKLToxMEFCRTAwMDI0MUQwNEVENzFDRkFCODE3MTk2NTc5MkUyRkU3RjIyNTYKLToxMEFCRjAwMDI1MzAzRDhDRjEyRDU3RDhCMDlEQzc1OTdFOTcyQ0M3NzUKLToxMEFDMDAwMENENDJFNzZEMjEwRkQzN0Y4MjY2NzRCMkY1QUUxMEM4RDYKLToxMEFDMTAwMDQzMkEwNkVGRjMxNDhFQkY1NDkxNjlDQzNGMjExMTdFNzUKLToxMEFDMjAwMDhFRjRGNjc1N0FDMTczMDIzOThFNzkyRDkyQTY5MDcxRTEKLToxMEFDMzAwMDNBNEU1RjY4QkI5RTlGQjcxQ0IzRjA4OTk4ODg4RkEyN0QKLToxMEFDNDAwMDMxN0MxNEQ5MzAwQkU1MjlENzdCRDhCQzVBRkQ1OEZFOEUKLToxMEFDNTAwMEExMTA5OTI2RUMxRTA3ODY1RkJGMjdERTA5NzlFMkE5QkQKLToxMEFDNjAwMDkwODI3Q0VBMEJEOENGQzdBRkU3RkRCQzlGRDNEN0U3NzQKLToxMEFDNzAwMDJBOUQyN0Q2M0VCRjE1RjM5NTdBNUI1OUJFOTI0RTBDOUUKLToxMEFDODAwMENDRUZFQ0YzOTdCRUQ3NjBCNDhCQzVGRjQ3NzhGRUQzMEIKLToxMEFDOTAwMDEwN0MzRjBBREYxM0MzRjdBM0NCQTBGRDU3RjEzQkJDRTkKLToxMEFDQTAwMEQzQ0Q2MkM5RkI3MTAyODYzRENFRUU2QkIyN0ZDRjYzMUUKLToxMEFDQjAwMEM1RTUzREJBRkRCQjFFNzdDNEZFNUQ4RjZCQkU4Qzc5Q0EKLToxMEFDQzAwMDVEN0Q3RTc2M0U1MDBFN0YyQkVGREQ4MjFCOTQ5M0FBMzYKLToxMEFDRDAwMDU2OTA0RjE5REJCOTgwM0I2MkM3RjdCREUzMUY2QkVGOUUKLToxMEFDRTAwMDczNEQ2ODg1RjA3QUI3Rjg1NjJDREUzMDQzNkY5NTkyMzUKLToxMEFDRjAwMENDMzBCRDYxQ0JDRkU4RTJGMkU1QUU1MjkzQTA5N0E5OEMKLToxMEFEMDAwMERFMkRGMkRFQ0JEQUZCRTM5ODFGQTI0NkUyM0FDNkEzQzEKLToxMEFEMTAwMEY5M0VBMEMyN0FDOEUzRDNFN0FENzVFOTE1QUQ3QzYzMEYKLToxMEFEMjAwMENDRUIxMDc0MTNDRjFGNTU1ODQ3QzJEQzc2MzNGMzZBNEYKLToxMEFEMzAwMEM5RkQ5RkI2NDQ3MDlERDRBOEI4NEUwNDdEMUFCRkVCRTAKLToxMEFENDAwMDcyOEVCM0NDNjMxRUY0QzBGOTk4QzdCQzBGNEFENzNCRDAKLToxMEFENTAwMDUyQTJEMDdBMTlGMzMwM0RBQTVFMTNEN0Q1MDY3NDU1QTYKLToxMEFENjAwMEQxRUU3MUUyRjEyQzVGN0Y3RTBCRkY5NDg5RjkxNzk1OEMKLToxMEFENzAwMEUyRkY3MDg1Rjg1QkUzNTBGQzlGMDYzRDRCRjFGRjEyNEMKLToxMEFEODAwMDk0QzVGMDdGOEFFQkEzNkFBMjc3RTM5RUFEMzMzRDRCNzcKLToxMEFEOTAwMEM4QjU3QTdFN0NEREVCNjVGRDU2NzMzRDQ1NDg5QjJEM0QKLToxMEFEQTAwMEFGQzdDNUU5QUE5NDlFQTM5NjVFMkI0MzhGMzUyRUE1MDcKLToxMEFEQjAwMEU3NDUzRTFGREYyQjM1MUYyRjcwN0FCQzVFQjY2RkE5QUIKLToxMEFEQzAwMDg3RTMzQTVEOUE2NDY5OTE3OTk5RTI3OENDRjdGMkI4QjEKLToxMEFERDAwMDUyQUFFRDlDRTRFQUM3MTVEMjMxMzUzQjJGQUZGMTc5ODkKLToxMEFERTAwMEY5NDUyOTNBNUVFNTcyOTU5NkM4RkE1M0IwOUYzNjVBRUUKLToxMEFERjAwMEY5MEJEQjZDRjNCMjg4RjMyN0VEQjZFNkE1REQzNjJGNTEKLToxMEFFMDAwMEExNzM5Qzk3REY1NjQ4Q0ZBMkQ5NzkzOUMzRTcyNTU3NUMKLToxMEFFMTAwMDRBQ0VGMkUwRkZDNEUxREZFMUYwNjgyNzJFRjJGRUIxOTYKLToxMEFFMjAwMDBGQ0VDQjk2NzlFMkEyQjc2Njc2N0ZBMzcwOTI3N0NERUMKLToxMEFFMzAwMDJDRENFNzg3OEY1QjcwNkU4NEVCOTg4MTUzQkQ3OUZEQzYKLToxMEFFNDAwMDkxRDRFQjdENzBGRUREQ0ZCRkZGRjhDMTcwRTAyQURFNEMKLToxMEFFNTAwMDJFODhFREFFNjFGNEQwNzY1NUY5RkQzRjNCRkNCMkQ1QkUKLToxMEFFNjAwMEZGM0M4MEVCREVGMjhFMDUxN0NFODc1QkU0N0RDNzgyNjgKLToxMEFFNzAwMDhCQzA3M0UxRjA0QzdGQjVGOTc4NEM3OUZFQTk4RkU1NzIKLToxMEFFODAwMEVCMzhGMkJEQjRDQUYyMUQ1Q0UxMDRERUU3NTA0RDAyQkUKLToxMEFFOTAwMDY5ODk5NjAzMzJCQjVGMjE0NThERUEyNzIwN0ZENjlEQzUKLToxMEFFQTAwMEM4OTIwQUVDMkU1MTY1RUREQ0Q0REU4MkYzRTM3OTFBMDgKLToxMEFFQjAwMDM5RTZEMUMxMDUzMUM4NjFGQUZFNDA1ODQ2N0ZFMDBFM0YKLToxMEFFQzAwMDRGQTJDNTVCQzNGMEM0M0M4MEQ3OTgzREQ2RUQ2RkUxN0YKLToxMEFFRDAwMDcxMTQ4NkQ3OThFRjEzNDNEMDlGNDZGMTgyRkUzRkVGNUYKLToxMEFFRTAwMDBCMUUwM0Y4ODNGNTBBRTZGMzFFQUJCRjEzRURDNEIxRTYKLToxMEFFRjAwMDZFOTlDMEZCQjFBQjE1QjQxM0VGN0IyRDgwRkI3MEJGMTcKLToxMEFGMDAwMDZDNUM4RkY5MEZBNkEyODNERDc4OTdGNzlEOTM5MEE3Q0QKLToxMEFGMTAwMDNDRDk1REE1MDk1NzIwM0Q4ODdGNEEyNEYxNUVFQzlGMEUKLToxMEFGMjAwMEQ5OUQ3QjI4RkU5MDBGOEM1QjE3RjREQkMxRkMxOEMyMDcKLToxMEFGMzAwMEYzOUNFRkRBQTI2M0RFOEM0RUQ4RkQ0RDgzQUQwQUU2QkEKLToxMEFGNDAwMDI5OERENTM1QjRDMTc4RjdCNUFBNjg3N0RDNzc0RDQzM0MKLToxMEFGNTAwMDM3RTY3M0I3N0EzMUY3QUREQUFGMEI5MERGMTM1Q0E3NDIKLToxMEFGNjAwMDEwRjgxMEE0M0FBQzc3ODNERDE5NThFQjg1M0JCRjQ4NDUKLToxMEFGNzAwMDc1MUQxQjJGQjA4Q0UwM0Q3RjJFOTI4RUM3NjgxOTFDNkIKLToxMEFGODAwMDUyRjAxRUE3RkJBRUQ5OTZERDA5NzY0RDJCQ0I1RkE2RkUKLToxMEFGOTAwMDg0QkQxNDVCNEI4ODlGQjM5MjQ4M0YyNDgwOEY2QjExMTQKLToxMEFGQTAwMDNCQ0ZCN0U2Mzk5ODlFNjk1RkYyMUMzMTk4QTkxMDJFMDUKLToxMEFGQjAwMDVCMTk1QzYwNDhDNkZDRTRCMjcwRTkwQUUxMzIxNUMyNzQKLToxMEFGQzAwMDY1MTk1Q0Q5RjM3QjlFNEZBOUQyN0YxMDg3RjMzOEYzQzQKLToxMEFGRDAwMEIxRkRBNUJGOEIzQkQ3N0NERDMxQUYzREVGQkE1QzdCQ0MKLToxMEFGRTAwMDJCNEZCNzFDQkQ3MDk4Mzk4M0E3NTQxRURFQ0FCMzJCRjQKLToxMEFGRjAwMEY2REUzNUZGQ0UwODdDOTczNjU4NzMzNzJGRUY2MTY1NDQKLToxMEIwMDAwMDJEN0Y1RUJCMjc4MkY3NDVENkYyRjdCNUY3RTBGRDkxQkQKLToxMEIwMTAwMENFN0VGRTBCRDdDNzREMjQ1RTcyMUVBQTM5RkU2RjUwM0UKLToxMEIwMjAwMERDMjE5RUREMjQ5N0M5MDc3MEU2RkIzOUY0OUUyQUE3MzAKLToxMEIwMzAwMERBNzFERDVFQzNGMjhCNjZCRTlGQUNFM0RGOEQ5MDY0OTgKLToxMEIwNDAwMDNDODZGMTJDMzNCODcyRkVFQ0ZBNzE2REZDM0VBRTFGRkIKLToxMEIwNTAwMEVCQkI0OTNBM0ZFQzdCNDk4NzlDMzhFNUMyRURDODRGRDIKLToxMEIwNjAwMEI5NTAzOTc5RTUzRDkyMTNENzkwNTREMUZBNzFBNTJCOTcKLToxMEIwNzAwMDg0Q0I1NDA4OTdBRDBDNEUxOTEyMkFEMjJCNEFCQTQyRUYKLToxMEIwODAwMEI4NEM4NTcwNTkwNkQ3QkY1RUUxRkJGQTcwM0ZDNEI3NzQKLToxMEIwOTAwMDVDOTdBQkI2N0FGRkU1NUVGQkZCMEQ3RTVCN0Q2MDhENUEKLToxMEIwQTAwMEJEQkRCMkQ2REU3RTYwQURCREJEQjI4RUI1Mzc3Qzg3OEMKLToxMEIwQjAwMEFFNEFDNTJBNUYyN0ZGRUIzQ0Q3NDk5MzVBMUEzRUQwQzgKLToxMEIwQzAwMDVBNjY1REE5OUEwN0RBNTdDQjNBODFGQjg1RTg3RTk1RTcKLToxMEIwRDAwMEUxRkI1NkMxRjhDRjU2MUY1QkZGNTc3QjM1REJGRDc0OTQKLToxMEIwRTAwMDdGRTk3NDM2RjkxOEJFMTZCREU1RjBCNUY0RUYzRjRBQjYKLToxMEIwRjAwMERDRUUyQTkyNzcxRjAyOUQ1MzhCOEYxNzQxN0ZDNzhFRkMKLToxMEIxMDAwMEJEQjUxMEVDQ0E2NzVGNUY4N0Y3OUFGNjdFRDBDQTlCMjEKLToxMEIxMTAwMDMxMzAxRjUyM0VFOUZEMzhFOEFENjdFOTdFMEJGOTM4NjIKLToxMEIxMjAwMDEzMjFFM0Y4MjU2MENGMDQ0NDAyRjYzMjc1QTNGMDVFRTQKLToxMEIxMzAwMDhGNjc4RkNBNjg3RkY0M0U1N0RBRUY3RkE2OEJFNTA5RTkKLToxMEIxNDAwMDNEMEQ3RTNGRDVGRjQ3RjhCRDVCNEZGMjdCQjcxRUVGNEQKLToxMEIxNTAwMEQyQjExQ0VGNkFDMkY3OTkyRTAzRUIwRjc3QjU2MkY5RjMKLToxMEIxNjAwMDUwOTc4OUNGMUZFQ0VBQzBGQUUxQUUzOEQ2RUZFRkVBOEMKLToxMEIxNzAwMEM0RjJERUFFMDQ5NkZCQkI3NjYzQjlBRjJCODlFNTcwRjMKLToxMEIxODAwMEQ3MUUyQzA3QkI1MjJDNkZCMzZCODg3RkJGOTZDNkYyQkQKLToxMEIxOTAwMEQyRUY0QzhENUMwMjc2OTI1RkM0RUZDMDhBRTFCRjYyNTEKLToxMEIxQTAwMEMyMUU3N0I4RTQ4ODNERUVCMDNDNjM4RjM3MkMzQjZDMTEKLToxMEIxQjAwMDhGMzcyQzQ5MzdEOERFMzcwRTVENkM3QjFGNERBREIyMTMKLToxMEIxQzAwMEQ1MkZEQTczQjkwREJFM0VEOTZFQUIyRkRBRkQ3RTFCREIKLToxMEIxRDAwMDdDNkQ2MjlCM0QxRkFDRjMwNjFCQkNCNjcxODdFRDdEOTkKLToxMEIxRTAwMEIwRTVBRjZENzU3RkYzMUQzNjc4NkZFQzZFNUIxREVFQ0QKLToxMEIxRjAwMDdEQ0U4N0JGRDZEN0MwRTI4MUUxMTExQjlDRUMzRjY4QjIKLToxMEIyMDAwMDgzREIzNURGN0NDNEI3MDZGMkYxODM2ODVGM0VGQkFBQkYKLToxMEIyMTAwMDgwRjk1REYzMTYxQkFGMDNERkM5MkIxMkNBMTNCOTkyNzUKLToxMEIyMjAwMEU1QzNDRjZCNDg1RTA2Rjc5NDExMzlCOUVFQkE0MEY5MjEKLToxMEIyMzAwMDdCQTRBRDc4OEYxNDZDNEQ4MEJDOUU3OTVERDBDMURFNEYKLToxMEIyNDAwMDE1ODI3Qjk2NEQxNjkwQzdEREE3OTM2NDAyRTI5MjNDNkYKLToxMEIyNTAwMENGQUM3MTIxMzE0RERBQ0U0QkY1MDkxRTJFOTI2NDc2QkEKLToxMEIyNjAwMDJGQzYyRDQ1RkM4RUVBMzEyMTgxRjkyNkQ0NjYzNkZFQTMKLToxMEIyNzAwMEIzMDY3OUY0Q0VGRDc3QzNDRjc3ODdGMTdFMDRCNENCRTQKLToxMEIyODAwMERCMEVCNDRFMEQ1MUY4RjExNTBBREU3NzMzMDc1RkM3QjgKLToxMEIyOTAwMEZENzZCRkY1MzEzRjc4REY1RTE2QUY2QzdDN0U3RDgzMzcKLToxMEIyQTAwMDBBNzY3ODRCNjIxRUI4QUEzMzdBMjNGQjMzRkM0RTI5MDgKLToxMEIyQjAwMEEwMUI2QkUxMEE4MDQwMkM0RDc2MzYwM0RDMDkxM0UyQkIKLToxMEIyQzAwMEI2MTRGRTZCQkVCQ0YxMDI4RjlGNDg3OUU5RjNFNTQ3RTcKLToxMEIyRDAwMDEyOERGMEQ5QzRGODVFMTYyRjFEMUY1RTJBREU0QUM3RjQKLToxMEIyRTAwMDY5QzgyRTE3OTdBMkJGRjMyNEJCRDc3RDQ4MTc2RkE1NTcKLToxMEIyRjAwMDdBQTFFMTUwNUNEQzVBODA2RkUzN0YyQTFDNEY5REY0RjkKLToxMEIzMDAwMDQ5RDg3RUJDM0I4M0Y3Q0I3OUIzREZDNDdCMzhBRDc5QkEKLToxMEIzMTAwMEYxMzVFQjYyMDJGQTNEOUMxMEMxNUUxQkRGQ0JCRUQzNjAKLToxMEIzMjAwMDFCMTdBMjBCMjM5Q0NFNkUwNzlEODAxN0E1OEJEQzBBRjIKLToxMEIzMzAwMEU1NDM0OTcxQUI5RjNENkYwQ0NDRjYwQkVGNzdDMkZCMzkKLToxMEIzNDAwMDRDNEFEQ0UyQUY4ODdGQTYxNzlFM0ZDRUY5NzcyNDIzRDQKLToxMEIzNTAwMDk2RTQ5RjdFQzIwNDdFQUIzMUNBM0ZCRDE0RkZFRTY3MDgKLToxMEIzNjAwMEZDQTM3Q0JCRDUzRjk3NUYzM0YwMjk1RDVDREI5Q0M3QkEKLToxMEIzNzAwMDZGREUxRUY4NzI2QjAxQkVDRUYwODlCNjRGNjBGQkE4N0YKLToxMEIzODAwMEI4OUE4RjBCN0M2OEEwNzRFRjJDRDQ0RTg4RjI3MTMyN0YKLToxMEIzOTAwMEY2NzEyODFGNkZDRDhCQTdDMzlGM0YyRjRGQzQ4Mjg3QTUKLToxMEIzQTAwMEJGOEVCNTNDNEY5MUQyRUQ5QTBDRUQ4NEVGQUZEQjlBOTYKLToxMEIzQjAwMDEzNzgwRjcwQkY1RkM0RkI4NUZBRkQ1RkNERTIzREZERTIKLToxMEIzQzAwMDFBNDFCRDI5Q0I2NkNGNEZDMjJDMEVERDIzMTQ1QUE3REMKLToxMEIzRDAwMDc2M0YwMUJFNENDOUZGOUVBQ0NGNkZFNUUxOTdCMTk3QjgKLToxMEIzRTAwMEY4QkRDMjEyQkY1NzU4OTFFMzFENTFCNjlFOEQ2RTMyMDMKLToxMEIzRjAwMDFCNUY5RDNCRkU0MUE0NUI4QUQ4RjdERkJFNURGNjdERjcKLToxMEI0MDAwMDJGQTZERDgwNzFFQ0RFNzA2NURGMERCOTczQ0NCRTU0MDQKLToxMEI0MTAwMDM4M0VBRTlDOEZERDc3OUNGMzIwOUU2NjZFMUU5NjlCMTkKLToxMEI0MjAwMDczMjEyQ0FGQzgyREMyRjc5QjcyQjU1OERGOTg2QkM0M0YKLToxMEI0MzAwMEZBODY1QzE0Q0JDQjczOTdFMEYzRjVCOUU1NTg2RkNEODIKLToxMEI0NDAwMEFEQzY3MjVENkUyNTNFNUY5QkRCODBGNTM1QjlGNTU4NjQKLToxMEI0NTAwMDZGQzk2REMxNzI3NUFFMERDQjU1QjkwRkUwRkI5NUI5RDMKLToxMEI0NjAwMEFCQjE2RUU0QUVDMzcyNzlFRTVBMkM5QjcyMUZDN0Y3NzQKLToxMEI0NzAwMENCNzJENzYzN0Q2OTZFMjdENjk3RTQ2RUM2N0EyQ0Y3QjgKLToxMEI0ODAwMDI5QUMzN0U2M0U4OTY1NDNFRURGNjMxOUNEN0QxQURGQ0YKLToxMEI0OTAwMEVCQjlDRjYyRkRBMkRDNjdCMEJFMzhENzhCRjVGQTVDQTIKLToxMEI0QTAwMDM3RDZFQjcyRkJCMEJFMjgzNzhDRTVDMkRDN0Q1OEQ2QjAKLToxMEI0QjAwMEU2QzZGMEZEODJEQzAzNThDRUNGM0Q4NkNGNDNCOTQ3QzgKLToxMEI0QzAwMEIxRDQ3MjVGRTJGNzQ1M0Y4NTY1MzBGNzM1MkMwM0I5OUIKLToxMEI0RDAwMEFGRTA3QjdGRUVEQjU4RjdFNUJFODlBNTM3RjcwMjk2MzQKLToxMEI0RTAwMDZBRUUxODk2RTVFNkE5RENGNzRGOUJDOTNDOUI1QzZDQkQKLToxMEI0RjAwMENBMkRCNEQ1Mzc0Q0RCRjdFRkY1QkZCQUQ4NTY1RjM3NTYKLToxMEI1MDAwMEI5Q0E1NjVGNzNGMjcyNUJGRkFCNEZEOEY3RUY5NUM3QkUKLToxMEI1MTAwMERGNkZCNzFGQjJGNkZEN0I1OUU2MDZCQkZENzA3ODg3N0IKLToxMEI1MjAwMEREN0U0OEZGQjVBRDFFMURCQUMzNkUzRkE0RUNGQjc3QjAKLToxMEI1MzAwMEZEMUVGQkZFQkQyODM5NjJCNzFGNzYxRkI0QzEyRjIwNDgKLToxMEI1NDAwMDBGM0FGMkM5Qzc2REYwNTVFNkQzMzZGODQwRUI1NzFERjgKLToxMEI1NTAwMEU3MkIxOUE2RkY4RDZGRDk5RUFCNERDRjE3M0M4Nzg5N0UKLToxMEI1NjAwMDFEQkExQUJGREIzRjVEMjdGMjdCODZGOEJEQURGQzdFQkUKLToxMEI1NzAwMDM0RTc3QzU2NzMzRDMwMkZDN0ZDQTczMDVGNzczNUIwN0EKLToxMEI1ODAwMEVFRjJGMjlFQzBDRTg4RTZEOTE5RjMxQUY0QUZCQzQ4QTkKLToxMEI1OTAwMEVCNjcxNjJCNDYzN0FENUI3Njg2MDU1RkY2NzcyQjE0ODcKLToxMEI1QTAwMDYzMzI0NUYxNzRCREVBQzY3QkU3ODQ2MEE3MDk3MUI1RDMKLToxMEI1QjAwMEJCQTYwNERDRUZBQjE3MTE5RTFGRDFEMUMxRTIxM0M0QUYKLToxMEI1QzAwMEJBNEYwN0VGRjcxOUFDQjdERUVGN0MxRkJFOEZCMkZBQTgKLToxMEI1RDAwMDcxRkZERUFEMTA0NzFENzQ1OUVGQkZGNDNFOEM3Mzc4RDgKLToxMEI1RTAwMDU4RkRCRkZCNzcwREMwRkJFQUFBODkwOEVDQjNGQjhBQzQKLToxMEI1RjAwMDlDNkZGRTRGQkZDMkVDN0RCRkY5MjNGRjlBRDk3QkE2OUIKLToxMEI2MDAwMDVGMDkyNzVFRjJEM0U3QjdBOTg5OEJFMENBNkVCOEU3NzYKLToxMEI2MTAwMDFFRUU3MURFMkE5QjNGMDFCODZCNjVGMzY1M0ZFRTBCQjIKLToxMEI2MjAwMDc2RkZFMTVBQzg3RDVEODNGNzAyRkUwQ0RFNEJDMUEzQjUKLToxMEI2MzAwMDk4REY1RkZEODE3QkYwQkVBQUMxMDBDNUM3NUYxQzlGN0MKLToxMEI2NDAwMEZGRTY5NzY2RjYxQjYyRUQzNzBEMTg0RjQ1N0I3MDIwQkQKLToxMEI2NTAwMDRBRjBERThDQzE1MDNDMDVGN0Y5QTVCRUE3OTIyNzBDMzUKLToxMEI2NjAwMEEwM0JDRDkyOTU3ODdFRTJFMDcyREQ5MjBCREJGRTQ0NEEKLToxMEI2NzAwMDQ4M0MwQjcxN0M1RkMyQUY4M0JERTYyNzI3MzBGRjIyQjkKLToxMEI2ODAwMDQ4QTZCMUQ0ODgyNkQ4RUVEQkI2RThBRjY3RjRDM0ZEOTAKLToxMEI2OTAwMEZGN0UzQzg3Mzc4RjRFNjI5QzM1NDlGOEZERDU2RkMxRTAKLToxMEI2QTAwMDczQ0E5NzMzRkUzNUM1Rjk3Mjk1NzQwRkQxRThGODBGNTgKLToxMEI2QjAwMDUzN0IxMkU4Nzg5ODMwN0NGNzczRkY1NDI2Qzk3ODIzQkYKLToxMEI2QzAwMDhGRjdFNERGMjMyMUJGRkE0RDk0MUIyQkRFMjM0QjFCQTYKLToxMEI2RDAwMDNCRjA3QTE3N0U4RjQzMDdGRDA3RjY2MTREQkM3NEJDQzMKLToxMEI2RTAwMEM3Nzk2RkMzQjlDNjdCQzIwMTY3QkNDNzhGRTdDOUE3NUIKLToxMEI2RjAwMDlCNEI3RjA3NjdDNTdERjYzNzk3QkVCNzMyQzNGREJFNEMKLToxMEI3MDAwMDg3Rjk3OUVGNDNGQ0JDRjc0MUVFRjcxREU2N0VERkZEREMKLToxMEI3MTAwMEUwRjdFMUJENUFDQ0VGM0IwMDdFREYzMjM4MkYzNjZEQ0IKLToxMEI3MjAwMERGOTc4QzE2QjlGRjI1MUExMkI4OUNFRDQxRkJERUM3RDYKLToxMEI3MzAwMEVGMkJBMjlFMkJEQUYzNUU2RUNGRjdGQTdCRTZDM0ZEMEEKLToxMEI3NDAwMDBDQkUxMEM5ODA5RkIwRkJFQTcxRkM3RTk2OTI2MkMwNkQKLToxMEI3NTAwMEZEMDBCN0ZGRkE4REY5RkY4RUQ2NjMxMTYyQkJERkM5MUEKLToxMEI3NjAwMERCRUNCODJGQTFEQzM4NzJDNjg0N0U3REQ0NkY0ODFCMTkKLToxMEI3NzAwMEM1Rjk3M0NFRkRBQTE5RTIzOUFGN0VEOTNEM0ZENkJEREEKLToxMEI3ODAwMDZERDQwMzRGODFGQ0Y5ODA2RTBERTRFQURCMzhDRTY5OUQKLToxMEI3OTAwMDNFMEU5MTM2MUVDN0ZCMEMyRjkzNDkyOTM5OTgzM0NFQTQKLToxMEI3QTAwMDM5Q0FERkFFODBFM0Y3MjkxQ0YyQTdDQkE0MDdFRkE5QzMKLToxMEI3QjAwMEUxREY0M0VBN0VDMzlCMUY1RkIxRTRCMEI3OTlDNTFGQzkKLToxMEI3QzAwMEJBNUZGRjE4RkU2RUMwOEIzNTVCMTdFNkZCN0ZENjc3M0UKLToxMEI3RDAwMDRBQkQyRDBDOEU1QTdEQjhDRUY3Nzc5RkQ0M0ZBOUNGQTYKLToxMEI3RTAwMEMyM0Q2NUMxNjlBNUUzMTk0RjU4NzBBMzBDMkVEMDYyMDQKLToxMEI3RjAwMDg4ODVFRUVGRkIyMkRGNEZCRUVDMzM1MzgxOUFEOTcxN0YKLToxMEI4MDAwMEY1OUU4RTFCNTA0RkFDNTFGMTdDQzZEOUVFQ0JCRUM0MTkKLToxMEI4MTAwMDUwMjAyRjNGQzFFQTNGQkYzREM4NTc4OUY2RTk1MkVEOUUKLToxMEI4MjAwMDE3REZEREYxNzM1MkJBRkRFMUMwOUFFMkVERUJFRUU4MEQKLToxMEI4MzAwMDc4QjAwQ0ZFOTlDMkUzQTcxRUMxNzNBNjA4RkJEREIyNjcKLToxMEI4NDAwMEVFNUFBNTAxRkNFNTdENkJBOEJGNENFN0UxQzUxNTVCOTEKLToxMEI4NTAwMEYxNUVEOUJFRDAyQjdBMjEzOUEyRkQ3RUE5MTQ1RTk0NjcKLToxMEI4NjAwMDJGOUQ2NUU4RkE1QUI5RjY0MjY5QkFCRTVEODZBRjI3RTAKLToxMEI4NzAwMENCRjBFNTg1NTJFRDI5NUYwRjk3QzFGRkJGMTZDNjNGOUMKLToxMEI4ODAwMDc1MTFFMDFEQTg2M0YxQkFFRTdBQ0E1N0YwRDdENkIwQTkKLToxMEI4OTAwMDM4ODRCNTFFMUUxRjJCQ0FENzU3Q0FGMEE1OUNCQ0ZFMDQKLToxMEI4QTAwMEUyMDJFNUY1OEQ1MkUzNTcyMEFGRkY1NDg2QUZFNUU0QTEKLToxMEI4QjAwMEY1QUQ2MkYyOEFFN0E0RTcyRkFGNDJGMEMyRTRENTEzRjgKLToxMEI4QzAwMDJDQ0RENzcyRjIxQTJBRDVCRTAyNzlBRDJEODU3RjA1MEYKLToxMEI4RDAwMEYyMUEyRDM0QkU5QjUwODUwOEY2N0UzMzNCMTdEQkREMTQKLToxMEI4RTAwMEM2RUUyMzczMzVCMTdERDdGN0VBMTdEMTNFRUFBM0ZCNDUKLToxMEI4RjAwMEQzQkM1NkQ4QTdBN0VFQkZCRDY1NzY1Rjc2RUUzQkNFMkMKLToxMEI5MDAwMEZFOUNGQkU2RURGRkZCNDlEQzM3MDM3Q0JGQjNGMEYxQTcKLToxMEI5MTAwMEU4Q0U3RTRBREY2NzcxQUVFMzdBRTE3Nzk4RjI3RURGQTgKLToxMEI5MjAwMEUyRTJDN0VEREZBRDVFRjg3OEY2N0RERERCNDJDN0E3NkEKLToxMEI5MzAwMEVGMDkxRDdGMEI5RTIzM0U4M0U3ODg0QjBGNURFOEI4MjAKLToxMEI5NDAwMEE1RTE5QjFFNzI3QzhGN0I4RTc2QzAyRDQxQkIxRERBREMKLToxMEI5NTAwMEIwRTc2QjhGRTBGRDIzQkM5RjA2RDlDNERGRUQ5M0M5MzAKLToxMEI5NjAwMDk1RUNCRTkzMjE5NjJGMjRFREY5Q0EyM0E3NTZFN0RENjcKLToxMEI5NzAwMDJCNDU3NDMxM0YzRjQ4MUE5QTc4RTQ1NDFFMUQzOTg4OEMKLToxMEI5ODAwMEY3QjBGODMyRTYyREM2QjRDQkQxOUUxODFDMkQ2REM3OEEKLToxMEI5OTAwMDdFOTlFRkUzQ0ZGMEYzOEJBN0I5MUQ3Qjg0RTcyRDNFQjMKLToxMEI5QTAwMDA5NzZFQzMyMzhDNzYwRTcxN0UzNjBDNzYyOUU2MzJCMDUKLToxMEI5QjAwMENGNzMzNDc5OUU2MzA3OTZDRkYxRjM4NzZGNzUxREM2RjkKLToxMEI5QzAwMEY3NDdCQjMyNTg3RUEzRUIwODk2NUZFRjlBQzBGNzVGNEMKLToxMEI5RDAwMEVEM0E4QUY1ODlBRTJDQjM4NzU3REU4OTdBNjY5NjBFRTIKLToxMEI5RTAwMDY3RENBQTM0MUQ5NzFEQjVDNzQxNTY0Q0Q4Q0YzMTJFMDAKLToxMEI5RjAwMDM5NjIzRkM3NTg5RUIxOUY2MzJDM0I2QzhGODMyQzQ5QTMKLToxMEJBMDAwMERCQ0YzMTFBODdFQ0U3MThCRTI2RkIzOTg2NDdCN0M3NkMKLToxMEJBMTAwMDQxREM5MUY3M0JDRTQxQjYzOUNFNDFFQ0U3MThGNTQ5MTAKLToxMEJBMjAwMEZCMzlDNkEyRERGNjM4NDg2REMyN0U4RUIxQTBGMzZFM0EKLToxMEJBMzAwMDFCN0NDOEVDQjE3RjE3REY2QThGODM2QzlBQjY5RjVGNUYKLToxMEJBNDAwMDZDRjhENTgzRjZCOENGQTQzRDBFQjJFRUE0M0QwRUIyOEQKLToxMEJBNTAwMEU2QzQ1NzZERjVENUM3RURGMThGMEZGQjEyMkY4MjNFNkYKLToxMEJBNjAwMDVEOTk3NUM2NDEyNjQ1OThCRjlGRkJEOUY5OUZFNTVGNTMKLToxMEJBNzAwMDUzRjgxRjgwRkVCQzRBRjI2NzM3NTBCOTdGRUMyOEJCRjEKLToxMEJBODAwMERGRkQzMUMyQ0UzMzA5RjkwRkU4MkZDODMzRkU4Mjg5QkEKLToxMEJBOTAwMEZBNDdFMkZBNjdFQ0NBQTk1N0MwOUY5MUY3MzM3RkU3RUMKLToxMEJBQTAwMDc2NjE1RDU2Q0RGNzc3NUNGRjI4RTRBRjZCNDk3M0ZBOUEKLToxMEJBQjAwMDBENjVGQTk3MERGNDczRTQzMkZFQzhEQzdFOTlERTlBQzgKLToxMEJBQzAwMEJEREZCQzI1MDU3OTU0RjI4QzNGRjIwMTg3M0Y1MjM3MjgKLToxMEJBRDAwMDhDQkY2MzM1QUZCNDNGMzI2NzlDNzNENDQzNkYwNThCMjMKLToxMEJBRTAwMEY4QzMxMTExRjk2N0Y5MjNGQjVBQjgzRjQyRDg3NzUyQ0UKLToxMEJBRjAwMDU2N0Y5NjFFMUE4Qjk0NUU4N0Q2M0QyRDYzREM2RjkxMjAKLToxMEJCMDAwMEZEODVDRkIxQUQ3Qzk5QjE5NkNBRjJCQTdGMTA2NEU3REEKLToxMEJCMTAwMDQ5MTQ5QUZCQzNGRjVGM0VERTRERjlCOEJDQUE4OEJGNEIKLToxMEJCMjAwMEZBMUVDQjQ3MzFCODczOTUwRjE5NzQwNkM2MjM2RjE5RTcKLToxMEJCMzAwMDg0RUY5ODVDNTBCRjdDQjZBRUYwN0FGMERFREJCNjQyQTQKLToxMEJCNDAwMDVFQzgxRUMyQ0U3NUM4Q0JFQ0JFRDU3Mjc4QzQzNkRFRDgKLToxMEJCNTAwMDU0MzJGRkMxOEFBRkZFNDk2Mzc5QkJCMUQ2OUIzMDZGQzcKLToxMEJCNjAwMEYyMzQxREEzRDQ3RERBQ0UzQzBCMjk5Qzg0MUZEQjgzRTkKLToxMEJCNzAwMEVGRDgwQjlFRjdGQ0I0OUFFNTkzQzczQTNGNTFEMjZFQ0IKLToxMEJCODAwMDcxRkUxRTU4Q0MyQzdEQkZFRTMwQzdGRjg1RDcxNkEwQTYKLToxMEJCOTAwMEJEQkE2Rjg4RTk2M0I5NzNDNUYzMjA4RjhGODMzQzFBRjAKLToxMEJCQTAwMDE4NEY1MTk3MDM1RDQzMzJERUE3RTZENzA5QzYwNTE3NDQKLToxMEJCQjAwMEZCNDlBNjNCMEE3QzM1NTI3MDhGMTdGREMzNzNFNTE5MEMKLToxMEJCQzAwMEY5MUNCMkRCNTE2NzJDM0VDNTRCRjNCNUVDRUYxOUFDNTkKLToxMEJCRDAwMEQ3MzEyRjRERDY0OTUyMEJFMUZBMjE2Rjg0MTEzRjVDQ0EKLToxMEJCRTAwMEI3ODNBRDA2RkJERDNCOEE4RkE2Q0Q2REVGQzRDQkI5MjUKLToxMEJCRjAwMDNFRTU1RDU3NjAzQ0E5NDFCMEQ2QTdDRjgwM0M5REQzQzAKLToxMEJDMDAwMDdFN0ZDOTdCREVFNkY0N0I4RUVCRjE5OTM5RUJGMTlBMEUKLToxMEJDMTAwMDlFOUZDMkI4QTMyQzdFNDRGNkQwQkZCQzczNEU2NzdGRjQKLToxMEJDMjAwMEQ2N0FCNEVBMkZCQzc2MTc3RUQ3MzIzODdBMDdCQkFGMDQKLToxMEJDMzAwMEI4OEVERjBCMzZDQUY0NjMzMUJDQUM3OEQwMDE2RTFGMEUKLToxMEJDNDAwMDNFNzFBOEJEMDdGOERCNDdENzREQkUzRTVBRjJCNzFGN0QKLToxMEJDNTAwMEYxMjZEOEI5NjIzNTk0NEYxRTY2REY2QjJGN0Q2MDE3RDEKLToxMEJDNjAwMDdGQkUwMzlGMUY2OERERDY4RUZFQ0YyMTYyMDI1OUMxQzEKLToxMEJDNzAwMEY1QTc1NEY2N0U0QTQzRjhGMEY0NzFCODE3NjkyOTk1OTAKLToxMEJDODAwMDM3ODg4NURGQkJCMUM1ODRERkE4QUMwQTg5RUQ1MDRBOEYKLToxMEJDOTAwMEEzOTNBODc3NDkyQjMxOTdFODMwQUU4Q0JGOUZCMzM4NzgKLToxMEJDQTAwMDQ1MUUwNTdDMTY4RjI2NDY0MDNFNDk5QTE4RjBCRTJBNEUKLToxMEJDQjAwMDFDREY3NjM1ODVBRkEyODIwOTU3NTZBNzA4N0JCRjM4QUYKLToxMEJDQzAwMEE5RTFGQ0M1NDYxMzA3QUYwNkY4NjY4MkJGQ0I0NURGODYKLToxMEJDRDAwMDYzQkQ2RUI3ODZGOTNGQkVEMUM5MjFCOEY3OUE4RUMxNTAKLToxMEJDRTAwMERGRDMzQTdEQkYzMEMxREEwNzQ2MjdEMzVCRDAyRjk5MjcKLToxMEJDRjAwMDc5OUZERUQyMDJGNzBFQjJGN0YyMjhBNTA3REU0NzE4QzkKLToxMEJEMDAwMDNFMjkzMjdEMDJERUNGMEZCM0Y3Q0EyOERCMUZFRkRERkQKLToxMEJEMTAwMEI4MDNFRkQzQTNFM0UzN0Q1MzJFRkVGQzMxQ0VGRjU4RUYKLToxMEJEMjAwMEU3M0IyNzYwMUMyQjFGMjM0NUUyQjY3QkE5OUNFQkRFN0IKLToxMEJEMzAwMEZBRkRCRjVFNkVDN0ZCRDQ0NTVGMzg5NTc3MUZDMzNFRTMKLToxMEJENDAwMDdFNUZCNTc3RDRCRTNGRkZCMThBRURCM0M3Qjg5RTI5RjkKLToxMEJENTAwMDc3MkYxQjI0N0E4MzlDRkYwQjU1NTkxOTk2MDA4MDAwN0UKLToxMEJENjAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJDNTNEMTQKLToxMEJENzAwMDBCNzg1NEQ1OTlFN0RFQjlGM0NBNENDMjlEMzAwOTkzQ0MKLToxMEJEODAwMDkwOTlEQzg0MDQyMjA0M0E4MTQwNDE1MTI3MTExMTE1MTUKLToxMEJEOTAwMDZENDREQjA2NkI3NTA4QzhGQjExNTE0QkI0REFEQzkwQkYKLToxMEJEQTAwMDA0OTIxMDYwQjBBRTQ0RTQzMTg5QTJBOEEwODM4MkQyOEMKLToxMEJEQjAwMDk2REEwMUIzMTQ1REJCNERBRDQ1NkFEMTQ2RDBBODA4RjMKLToxMEJEQzAwMDM0NTI1MTc2NTdEN0ZERkZGRkRDNEJFNjRFMjY4OUQ2MUQKLToxMEJERDAwMEVENkVCRTRGMEZFNzlFRjdGRjNFRkZGOUNGMTlDNjE4NzUKLToxMEJERTAwMEZCMkExN0ZFNTc5NUM0QTIwNThDRkUyODVGOTlDQUEyQUMKLToxMEJERjAwMEI2OThGQ0ZDNEM2Mzc5MzBENzk4MkYxRjY5Q0M3QkM2NzIKLToxMEJFMDAwMDFBREJCQjJGMzY5NDdGN0UxRDYzMUQ0RUM4NDg3RTFCRjgKLToxMEJFMTAwMDgzNTQzQTdBQjNBRDZDMzQ2M0I1RUVFNTk0M0Y3RkJCOUYKLToxMEJFMjAwMDVFMUU0OEMyN0M5RTdDRDI4RUU1OEY1NTU1RDg1ODIxMjcKLToxMEJFMzAwMDYzQUIzQzMzMDYwNUUxRkI1N0Y4Nzc3OUVGQjRBMTlBODEKLToxMEJFNDAwMEIxQTg5NUIxMzVENTIxNEE5QkFBNUIyODZEMkU2MjIyRjcKLToxMEJFNTAwMDJCNjY2Q0VENjgzMURDOTZDM0Q4RUFDMjE5RDQ1RkJEOUQKLToxMEJFNjAwMEJCRkZGRURBQjBCRjExOEM4NUFCNkQ5NDZFQUQ5NkE5QTkKLToxMEJFNzAwMEJGQ0RENTFFNEE2QkFCMTU0QTM3NTUxNzUwREE1MkVENzgKLToxMEJFODAwMEE3N0EwRjU1NEZBNDM0NTQxREEwNzQ1REY1MzQyQTdGNTIKLToxMEJFOTAwMEJFQkE4Q0YyQkJBQkNCMjk3REI2M0E0OERGNzc1NUNGMjMKLToxMEJFQTAwMEE3RjRFOUVBNEE0QTlGQUNBRUEyRjQ4OTZBOTVEMkVEQkEKLToxMEJFQjAwMEQ1MEQ5NEFBQjJDODU4MUFBQ0U3NEE3RjY2MTlDQ0ZGRDAKLToxMEJFQzAwMEQxMkI1OTc5QTRCMEY3QkM1NTU5RTBGNTY0ODBFNTc4RDkKLToxMEJFRDAwMEM2OTI1ODI4Q0FEQzg4MkZFODRCNjFDQ0RFMTA2MjM2NDcKLToxMEJFRTAwMDgwNDdFNjYyRjg4NkY5QUExMEIzNDJERTMzODdFN0Q3QzcKLToxMEJFRjAwMEUxMzhEMEFFOEFCMTAwQzI4RDE1QjBGMDc2ODA5QjREOEUKLToxMEJGMDAwMDA5QjE1OTMwNUVDMEFCQjIxQjkyMTk5QkFFOEQ4M0RGNzUKLToxMEJGMTAwMDExOEU2QThFQ0ExMDVGMjcyQzgxRUJFNDM0RUM4NzUxQjYKLToxMEJGMjAwMDc5RkVGRThFODM4OEQ2MzExRDkxNTI0QzBCMEY4NzQ0Q0IKLToxMEJGMzAwMDA5RDI5MTUzMkE1NzlBMjAxRDM0NTkxNUIxRkQyQThGRTEKLToxMEJGNDAwMDU4MkFDMDc4RTdBQUM0QjAwOUJBNTY4QUQ5NDExM0U0N0UKLToxMEJGNTAwMDFGMkIxNEMzNEQzMDdFNzMwOTEzNDVDNDYzMDZFMDUxOTMKLToxMEJGNjAwMEU4NTk2RkQyRjlBRDJDM0EwRUYwNUEzNTYzMTA0QjAwRjgKLToxMEJGNzAwMDBGM0QxRDNBNUZFQ0ExNDdGODJGMjM5OEQ0NDNBRkYwNTMKLToxMEJGODAwMERGRUE1MEZGRURDN0VDMTEwREY1MEI3N0M2QjUyRjg0MzYKLToxMEJGOTAwMEY2RkREMEQzQzhDNzhDRUQwQjM2MjcxOUU2QjNEQUQzM0MKLToxMEJGQTAwMEZGRjhGOUU3QUZBNzc1RjY0NUI3QTcyQzE1M0Y0M0I4REIKLToxMEJGQjAwMEVCRjlGNEYzOTdCMUU4NjBDNkRFNzJDQTg0Q0ZENDZCQjQKLToxMEJGQzAwMEVGRjMwNDBCNjlCODI5MjZBMDA3Mjk4Qjg1OUIwNENDQzUKLToxMEJGRDAwMDA2RDg2QzgwQUIxOUZFRDUyNEYzM0NDMkREMDQ0ODZBNTgKLToxMEJGRTAwMEYyMjNCQjJBMDE5NjgyQTkzRkMwQzY2MDFBQTBGQzIxOTkKLToxMEJGRjAwMDczQjA1OTFFOEZGOTMyRkU1RDBFMTIxRDM0NUYwNDVENjEKLToxMEMwMDAwMDVDOENGRDY0MzcwNDI2NDNGRUZCRjBDRjRDQzZBRTBGQkMKLToxMEMwMTAwMDVEMzQ0RDg1RkNFN0U2QTA1ODA1RTNBRkY1NzI3RTVDMjQKLToxMEMwMjAwMEUxMUI5Qjg0RUI3RUI0Qjk3RjdFQUNENUY4NTFDRjlCRUUKLToxMEMwMzAwMDlDMDEyNjQwM0ZCOTBERjI1OEE0QTNCRURBM0REODIwOUEKLToxMEMwNDAwMDRFMEIyN0U4RjcyOUE0NUY5ODdGN0RDMzBDMzkxRjU3NTMKLToxMEMwNTAwMEREOEUzMjhCMzFBQjkzMTFCREM1RDc4N0Y1M0U4NUYwQjAKLToxMEMwNjAwMDM1QkJGOTNBRDM2RTJBQTMzNDZGRTcyNDVCMTlGMEMzQ0EKLToxMEMwNzAwMEU3QzlGREUzQUYzMTZFRkU3NjE4MzI5MjYwNUUxRjZBNEIKLToxMEMwODAwMEYzQ0E3QkVEMTcyNDFGM0YxRkREM0Y1REU5NzJFRjdDOTQKLToxMEMwOTAwMDU4NjQxRDg4NUZBOThDRTQ2OURBNEQ0MTk2MDdFQjU5MTUKLToxMEMwQTAwMDBERkNFMjQ0QjlGN0U1OEQwRDM5ODA1Nzc1ODM0ODcyNzAKLToxMEMwQjAwMDQwOUY3RkZDQjgyNkE1QjM0NDg0RjJENTA3MTYzMDA1MEYKLToxMEMwQzAwMEM2Mzc3QkNBOTg1QTg4Nzk1RDNFNDcxOEY2RUY3MDc2NzYKLToxMEMwRDAwMDA0NzBCRDBFMTYwQTk4QTA3RjQ3NTU1MEM1RUYxNjhGMDUKLToxMEMwRTAwMENBOTBDRTU2Njc1Q0E4NEZGMjc2NEQ0ODE0MTFCRUFCOEQKLToxMEMwRjAwMEIyQzQzMDEzMjg2NTRFRTRGNzYyNDZGOUU0OENFNzAyRDcKLToxMEMxMDAwMDIyOTJDRDE3MzA5RjA5RDAwRkZFREI4NEYwNTY5OTg4MUMKLToxMEMxMTAwMEVCQzg2NzdFMjdDQ0NCNTZEMDFEMTBBMTdFMUVEQjE3NDcKLToxMEMxMjAwMDQ1Nzk2MDJCNjFGRTI2RTQ5RjhDMjMwMUE0NUJGNTBFMEMKLToxMEMxMzAwMEU2Q0YyNzMyMEY5MjNDNjI1MkQwODZGMjJBQjc2NTBDQzYKLToxMEMxNDAwMEYxODM0RDg5MDhCOEVFMUY1ODgyRUZDNUYyOEJDNUMzNDUKLToxMEMxNTAwMEU1RDhFQTJGNEQwOUU1RUFCRjZBNzIzMUE5MEZCQzM5NkIKLToxMEMxNjAwMDVDQkNGQzczQjM3MjBERTkxQkM4QjcyNUEwMjNCMzhCNkQKLToxMEMxNzAwMENCRjEzNjc5QzZFRjBCOTQxRUJFRDRDQkRGQzI0NThFMTEKLToxMEMxODAwMEVGQzlFNzlFQjdEMEJDRjM2RUZBRjEyMDVDNEY1Rjc0NDUKLToxMEMxOTAwMEIwNEFBM0FGRjU4M0I4RENDRDlCN0M2OTAwRTE3RDBFOEUKLToxMEMxQTAwMEU2REEyNEY0QUVCRjYwOTA0MkY1RjRCQ0U0MzRDQUM3Q0EKLToxMEMxQjAwMEFGM0YzRjg5RTQ1MkRFQTk3QjM4MUY3OEZCQTc1NzdENEMKLToxMEMxQzAwMDlFOUY3QjhERjY4MDk4NjcyMzNENUQxRjEyNDkyRUQ1N0IKLToxMEMxRDAwMEJBNDU5NjAyRjlBRDQ4MUYzOTI4MzAzQkVEMTdDMTdBQjAKLToxMEMxRTAwMDZDNkY5ODE4RTI3QjZCNTVBOUE4NDI3OTcyOEUxNDI2NjEKLToxMEMxRjAwMEZBRjM3NDQ3NTE5Q0Q5MjU3NjAwRTkwM0YwQUJCOEQyMjUKLToxMEMyMDAwMDEwRUYxMzA4N0U1OUM1MTEwMUU5RkE5NEE2MTdFMUFGQTIKLToxMEMyMTAwMENFMDM3NEU2RTM0QjQ2RkUxRUUxODJFRjgxOUQwMjk3NUEKLToxMEMyMjAwMDAzMUUyRTA3Q0NDQ0FGNUE3MTdDRDA4ODExMThDRkYxRTkKLToxMEMyMzAwMDg2ODlCRTMzMTY4OURFMEZGOTI0NTlGNEEzREM1QzVCRDIKLToxMEMyNDAwMEJDMzIxREY5Q0RFMTYyQTRCRkU2NUZERDQ2RjIwOUU0MzAKLToxMEMyNTAwMEFBN0YxM0M4RDFBNTFGNzVBNTJGODM3QzlFODdDQjVEQjAKLToxMEMyNjAwMDFEMUU0OTg1MTY4MzVFMTg3MDFDMjkxQzQwM0RFOTEwNkYKLToxMEMyNzAwMDk4M0ZFNEVGMUJDRURGQjg1RjVCOThEOUZGQTE3RTQxMEEKLToxMEMyODAwMDYxQTQxMzVGNjg3RjNCNTQ5QTFGQUUxQkZBQjVCMjVGN0YKLToxMEMyOTAwMEQxMzhFN0I0NzE5OEU5RDg2MTg0NkZEMjc3MjQ2NjRBQkYKLToxMEMyQTAwMEMwMUY3RDhFNjNCQUE1NUZGRDUwNzU2Q0MxRUZEQjYzNjcKLToxMEMyQjAwMEU4RjczNjU3QjJCQjZCMTRGQ0UzQkJFQ0JCNUZBMTgyNjMKLToxMEMyQzAwMDMwMzk4OUJFQ0U4MTNEODFFMzJBMzY3NjEwRjM3NUNEQjMKLToxMEMyRDAwMDYyMzgxMTdGN0M1RTNERkZGN0VEODBCQ0I1OUE1RUFGQTIKLToxMEMyRTAwMDc5RDc1QTRBRjQzOTVFMEM1QkExN0U3QkRBRDRDQ0NFODYKLToxMEMyRjAwMDE4QkVEMEU1NzA2RDMxRDcwMzQwREQwQ0Y5NjE2RENEMEUKLToxMEMzMDAwMDUxNjU4MUQyNTNFRjQ5QkQ5RURDQkZCRUQ4QUVENzZCMUQKLToxMEMzMTAwMEU2RjU5MjhCRkQ2MjMwNDFGRDI3MzQ3RTdBQzYxMUI4NzYKLToxMEMzMjAwMENGMzVCRTY3NUM2NUU1QjQ5QjQ5MEU4REI3MzE1MzgyNEUKLToxMEMzMzAwMEY1M0RFMzA4RDZCOTYyRjg1OEVGM0ZCNjNERDI2RjNGRkUKLToxMEMzNDAwMEVEOUI1RDY5N0RCN0Y3REQzQkVEMkRENjdGRkIwN0ZCRjAKLToxMEMzNTAwMDZCOUZCNTdDREFBNjAxRTZCRjM5RjFGQ0Q1NkREODJFMEUKLToxMEMzNjAwMEQ5NjM2MTQ4RTczNTE5OTZEQzA2QzhBRjE5NkZGMTVCRjAKLToxMEMzNzAwMDAxMEZFREEzQTc3QTEwNkY3NUFFMjM0QTIyN0E4MjdFNTEKLToxMEMzODAwMDlGRTg2RjVFMDA5N0YyMDFENkY1RUMwMDcwMkQxN0ZBNkEKLToxMEMzOTAwMDVGRDc4QkZEQjUwN0I4MUUxRDAwMkVCRjE5MDBBRTJENEYKLToxMEMzQTAwMDAzQ0NGRkI3ODlEQkFCRDkzOEVGRTQyQzBCRTk5MzFBNDgKLToxMEMzQjAwMDJGQzBENThERkMwMDcwNjUzREZDRjBEODg2M0VFMUZBQkIKLToxMEMzQzAwMEZBNDBGNDM2QzBCQURFMUEwMDJGMDNEMUVCRjEwMUUwRDcKLToxMEMzRDAwMDNBMTBCRDlFRkM5NkY0N0FCNjBGQjg2RUMzNzk3RjBCMDcKLToxMEMzRTAwMDdBRkRGMjVCRDJBQjM5RjVEQkQxNkI3MjZBRkY3MjYwMUEKLToxMEMzRjAwMDIwN0E0REVCQUZGREQ3QTA1NzZGQTJGOTVCOTkyM0EwMzAKLToxMEM0MDAwMEEyRkQ1M0M4RjVGOEZDMTI5MUY0QkFCOTgwRUI1RkM3RUUKLToxMEM0MTAwMEIxMjc0ODhGRDY4MTlFMUEzQzExRjVGNUYxODc5NjE2MDMKLToxMEM0MjAwMEY3RThFNzc4RkQxM0RGNUZCQ0ZFNUNGQUM5RTNDQzhFNkEKLToxMEM0MzAwMDc4RDRGNDlFM0UxRkJCMTJERkNGOEZGQUI1RTNCRUU5N0UKLToxMEM0NDAwMEI4NDkxRTE2QjU4RkU5NjkzRkYyMzE4QkMxOEVGQkY2RjQKLToxMEM0NTAwMEUzMTlGNTdCNTIzMThDOEZGRTA0MThGRjhBODlBODU3QTcKLToxMEM0NjAwMDc3RkE5MTJFODczRkY4NkRDN0VEQkY3RUMxNjY2M0ZGRjcKLToxMEM0NzAwMERGRDQxRTk4OTUwQUY2ODBBM0M3MUVDOEFEN0E3RURCNkUKLToxMEM0ODAwMDdCODM3QkZBQzk5NTAyNEMwNkJBOTFEODE0QjJEQjU4NkIKLToxMEM0OTAwMDAzRjM2RkM3RTJBQUREREJERTFCRDc2MzBGMDA0Nzg4MUIKLToxMEM0QTAwMEI4OUZEMEM3MzEzNTQ0QjZCRDE3QjM4RUYzNzM5OEI2NzUKLToxMEM0QjAwMDBGQUJBNDdENEY5RTdDNzExMkQyRjFFQUU2RkVFREUyNTUKLToxMEM0QzAwMDY3MzQzREJFNTNGMzM3M0Q4NUZFMjY0ODc3QTBCRjA5NEMKLToxMEM0RDAwMEQyQzdEMURGMDRFOTYzRTg2RjFBODFGRTI5RUU2RjZBRTMKLToxMEM0RTAwMDQyN0Y5MzE1RUQwRkVFNkY1QTg1RkUyNjQ4RjdBMzFGODYKLToxMEM0RjAwMDBDRDI1RjZBN0VCMDdERDU2MTRBNUZBOERFNDFFOTlFQkQKLToxMEM1MDAwMEVBMDg5NTNGNTdCRDhGRjI5MUVBMjhFNTlCOEI3RTQyNjIKLToxMEM1MTAwMDcyQTY2NzFEREMzRUNGOTM3NTdGNURGRkVCRjhDRTNFQzQKLToxMEM1MjAwMEUzM0U2Mjc0QzRFODI3MTlCNTIzRDU5MEJGMjg5QzY5RkYKLToxMEM1MzAwMEE4M0ZBMjI1RDc1MDlFMUYxQTY5MjgxRkQ2MzBENjkwMzMKLToxMEM1NDAwMDc3MTQ1QzZDQTg2RjU3NEE4RDc0RTVCOUM2NTAzRjQ3QTUKLToxMEM1NTAwMDlENjFDODY3NTdERDZDQThFRkFEQUMzMDk0MEY5REJGRUYKLToxMEM1NjAwMEQwNTA5RTExNUM2RUM4MEYyOUJGRDc1MERGMTU1ODY5OTcKLToxMEM1NzAwMDI4MUYzNEIxQzk1MDdFNjlGNzAzODZGQzI1MUY2RTMyMkYKLToxMEM1ODAwMEQ0OUZENEQ5NjYyOEZGRUVEMUE3MENFNUUzM0I5RTMzQjgKLToxMEM1OTAwMEU0QzcxREZFQTVBMUZFRjcxQ0MxMjhDQUMzQTJFODQxM0QKLToxMEM1QTAwMDIzQkZCMDRFMTFGMUQ3OUVDMjY4RkY2Mzg3RkQ3QjIwODkKLToxMEM1QjAwMDgxM0RGOTVGODNGODNFRDZDQTQ2OTFCRDdCMEVFNDU5QjIKLToxMEM1QzAwMDUzMTFCNkFGMENFMUZFM0ExN0NBOUExNERDOUE4NzA1RUMKLToxMEM1RDAwMDM2OENBMUFGMjg2QTRGODlFNTg3NkYyNjA3NzBBNzhGMzEKLToxMEM1RTAwMEY1N0RGMDg3N0NGOTVGRkFGRTc1ODc1REJEMENDN0NGREUKLToxMEM1RjAwMEUzRjI1ODk1NTVEMjA3RjFFRDc1QkY1MERFOEU5OTgzNjEKLToxMEM2MDAwMEIwQkM0RTJFOTUxM0M5ODUxMzk2RTA4OTU4M0QxMUJGRDUKLToxMEM2MTAwMERGQ0QwQjI0QjMwMDhFRDdBMEZCQzVCOERDMzNGMTJBRTUKLToxMEM2MjAwMDJDRjdEODU1ODcwNUY0ODM5NThGNDlDNUY1RThGRTlDMEUKLToxMEM2MzAwMEQ1MUFCRkQ2NkI3QzZBNjU5N0E4RThBRjM4QTdFREZCMjMKLToxMEM2NDAwMDk4NjlCMkJGM0YzOTE1MEZBRjZGMkFEN0JFNDg4RERGNEIKLToxMEM2NTAwMEU3NEM4RkJFOEZFMzM3NDhFMTQ0RkE1MjRGNzU3OTk2MjUKLToxMEM2NjAwMEY3QzY2REZERTI0Nzg3QUY4RTQ3OTNEQzExNDBGRDZBNDgKLToxMEM2NzAwMDUzMkE1OTg1QjMzNzlDNEM1OTlDMUVGRUQ5RUIxRTNBNjAKLToxMEM2ODAwMEQ4MjhDRkNGQjFDMkQyNDBFRUQ3NTg2RkY5QURCNDBFOTMKLToxMEM2OTAwMDFEOUZGMUY1RDY1NUYzN0Q1NzMzRTI5NUNFMTE2NENENEMKLToxMEM2QTAwMERGQ0ZGMTJCNEUwQ0FDNDRGOEE2QzAzRTFBRkQwMkEyMUYKLToxMEM2QjAwMDNGQ0EzQTEzQ0M3QkQwNDQyMzdEMjVGQjhENzJEMDUxRTkKLToxMEM2QzAwMDYwOTQ4MzkyRDMyODA3Q0RGRTRBMTY0MTNGMkQ4Q0MzMzgKLToxMEM2RDAwMDg4MUU4MzBDRkRCNkY4MUZGMTlGM0MxMERGNUQxMjEwMjEKLToxMEM2RTAwMDYyRTg3MDIwRkVDMzIxQkUxQTM2MzBCRkZFQTNGQ0REMTcKLToxMEM2RjAwMDNFMjc5REZBQkY0N0UzNkZFMDY4OUVBQUVDNzVBNDlGQjIKLToxMEM3MDAwMDhBODkxQTAxMzFFNTg3N0Y4MTc5MkYzODZDMjYzRkNGREUKLToxMEM3MTAwMEU1NUY2QzNCQjQwNUZERDExM0FEMzJGQUEzMTkwQjFERDcKLToxMEM3MjAwMEZBMzU5NENGMDlEOENBMzBCRkUwRDg2ODhCMEZDQThGQ0EKLToxMEM3MzAwMDY0MDIxMTc4QjBCQzJDMDVFNUMwNjkyNjRFNDMzRkREOEMKLToxMEM3NDAwMDY5RjY3QUNBQjgxODM5Qjc2NEIwODVGQjdGMUFDQ0M3QzYKLToxMEM3NTAwMDNCNkQzOEJDNEFFNzUzQjc4Nzc4NUU1RkQ3QkMxNjYzM0EKLToxMEM3NjAwMDdFMkU5QjkxMkVDMTM4NzMxRjM0QTNFNDYzMEI5ODc0MDMKLToxMEM3NzAwMEJDNTM4NzAzRDBDMThGMDdDQkI0OUU3OUFDNzI5NTBDQTQKLToxMEM3ODAwMEUzRDY5QkY5RjlDQzkyMTc0NzVCMTAwRjBCQzZDOTM5NUEKLToxMEM3OTAwMEE2QTI5RTc5REMzRDk4RkIwMTRGMDJCRDI5RDY5RUVGRjMKLToxMEM3QTAwMDBCOUQ2MTBCQ0FFNTEzN0JDNkZERTAxMjg2RkQ4NDU3MjUKLToxMEM3QjAwMDY1QTI1RkQzMDVGNjg4RDIxQkJFQjMxQjhDRjMxQzY4NDEKLToxMEM3QzAwMDFERjFGMzY2NkMyNUMxQTNBRjc5NDgzQjg0NDAyMkZGN0QKLToxMEM3RDAwMDc5RUQ2MEMxODBDNzVBREJDRkI2NzVDMjNDMDNCNTEyOTQKLToxMEM3RTAwMEIzNUYwNjc5ODk5RjFGQTlDNzkyQzNEQjUxN0U5NzU2MTUKLToxMEM3RjAwMDNFRDEwOTcwNTA1NzVBRTU1QTQ4MzczQTdFRjYyQ0Q2NDIKLToxMEM4MDAwMEFGMDI4NEUxRjlEM0NFQzEwQUY3OUZEQTdENjEzQzVGQzQKLToxMEM4MTAwMDAwN0RGM0REMTlDOURGQkVERkRERkZBNDdFNUZDMDdFRDIKLToxMEM4MjAwMEQzN0FGN0JCQzRENjY5QzE3M0I0NjU1MkU1MzQ0MTQ0QzkKLToxMEM4MzAwMEJGMjJBRjY3MzUwNzAzNDNEMTlGQjhBRjI4M0E1NDMxQzEKLToxMEM4NDAwMEQ0NkJGODlBRjUwRTBCQjk1RkFCREUzNEIxOUZGRUNFMTgKLToxMEM4NTAwMDY4RjJFREI3M0IxRkI1QTBEQzNBRkRENEJCRDdFM0JFMTEKLToxMEM4NjAwMDY4RDFBRjRDQ0MwNkY1Q0VFQzRDNjY1MUIyRkJDMjE2OEIKLToxMEM4NzAwMEI0NUYxN0VFMzEwNUMyOTQ4RjRFQjgzMTM5OTZBRjZCNjUKLToxMEM4ODAwMEE5RkY0NUNGMjZEM0JFNkFFMTczRDZGMDc0NjhCRkYwMjYKLToxMEM4OTAwMDg1MTM2MzE4Qzg4MzMzMkJCQjBGMEQ0NUY4M0QyNTkwRDYKLToxMEM4QTAwMDFEQ0RENENFMzEzN0MyRjc4NTEyQkJBRDJDODFEREYxNjEKLToxMEM4QjAwMDY3OEQxRjRFRkRDMjUxOEVGNDI2RUMzODcwMkJGNTFCOTAKLToxMEM4QzAwMEY5QTFEOTFBQTNDNzNBMDY5QjA5OUY1MDhGRkNEQkVBNEUKLToxMEM4RDAwMDkzNDIzODVGRTBGM0JCNjE3NEVDRkM2QTc4QkQyN0I5MjIKLToxMEM4RTAwMDNGNzdFMTNFNzNEODhFRjNEQkQxNkEwOTQyQkQ2NTNCRTkKLToxMEM4RjAwMDNFMjFGQUJFRTJEOTVEMjkwODg3NjVGQjRDMDZCOUI2MzAKLToxMEM5MDAwMEU4RDkyRjU3NUQwQzc4NUU2NDYyREREMzQ5OEY3RjQxOTMKLToxMEM5MTAwMEY5NzMwMTVCQjc4OUU0NTAyMDQ1MDBCOUI1OTQ0NDE2MUEKLToxMEM5MjAwMEQ0N0JGRTgzQTk3RjgxRjI5MzFFMTNCMzgzMjgzOEQ5NjkKLToxMEM5MzAwMEYxQkVFNTU3OTgwRjNBMkI5OTFGRkIzN0YyRTFCMjFENzQKLToxMEM5NDAwMDI3MkMzODJGNTk2NERENTlDMEU4OTc3RDFBQzM5N0FDNUUKLToxMEM5NTAwMDc3N0RDNkJBMkQyODY3OTc0NTFBM0YzMTAxQkQyRERCN0IKLToxMEM5NjAwMDczRkEyREE0QkI2NTcxRkM3QzEyRkY5MUQxNUI1RjBBNDkKLToxMEM5NzAwMEVFNzg3REY5REEwNDg2RTdGNDNCNjAxMzM0QTk2RjdEMjUKLToxMEM5ODAwMEE5RjNGN0EyNURFN0I2QUEzMEZFQTlFNzNFREVBQTAyNDgKLToxMEM5OTAwMENBMTdGRkY3REZCN0ZFMTRGNzQ5MkZEOTY1OTQ0QkNCQzEKLToxMEM5QTAwMDlFRkE1MzBBOEI4MTdGOTY5QjlGMjc5RDc5RjI4OUM3QjgKLToxMEM5QjAwMDM3MDExQ0NFRkNEOTRBNTAzQkYzRUIwRjdDMEFDMEZEN0IKLToxMEM5QzAwMENDRUVGRjQ4QzdGM0E1QkI3RTdERTUxMEE0QjNCQkY2NTQKLToxMEM5RDAwMDVFMzFBNEJGN0QwNUQyNkREODFBOEJERjMwRjVBRkVDODgKLToxMEM5RTAwMDgzNzE4NjQwNzZCRjk2QzZFMUU1RDRFRUNGMkQ3ODRFQjIKLToxMEM5RjAwMEY0OTlDMEJBNTFGRTJFOEQ3QzY5NDFGQkVDNTA4MDc1RDQKLToxMENBMDAwMDIzOUM1RURFNzNFMkQwQkQ5MDNGMEQ3OEIyMjZDMDEzNEEKLToxMENBMTAwMEFDN0ZBODQ4N0EyNTNBMTRGNUNCRDIzRDM3N0VFRkQyQzkKLToxMENBMjAwMDYyNENDRDdFMDVGMUM0QkE0OURFRjdDMkVGMUI4MERGNTAKLToxMENBMzAwMEUyMUVGQ0M2OTc5RjYzNUY1ODEwRkVDQjc2MDIzRUM3OEUKLToxMENBNDAwMDIwNUUwMTlGNjM3QUUzRjMzNEZFNjM1MjZGN0M1RUQyMTMKLToxMENBNTAwMDBCOUY4QkI3NkRDMkMyM0Q4MzA5RkY3REUxNzNDOURFQjkKLToxMENBNjAwMEVGRjc2QjY3RTlGMjYxMjAzOENGMTdGOEJDQUNFRUMwODYKLToxMENBNzAwMEI1NkVFNEIzRTcxQ0FBODdFMzM5M0MxRENBQ0VFQzNBOTUKLToxMENBODAwMEU3NDM2N0M4ODdFNkVFNUIxMTBFRERCRkI2Q0E3ODZFNzYKLToxMENBOTAwMEJGRjBENzZGMTJERjlERDlGQjA3MEJFMjFGRkU1Mjg0NTgKLToxMENBQTAwMDA5OTA2NzE3RkU1RTY3OTA1RkNBNkQ3MEI2ODQ3NTRGMTgKLToxMENBQjAwMDdEQUIxODUzRDZBREZBMDk3Rjk0M0YwNDdDNDhGODA4NDMKLToxMENBQzAwMERGMzA0RDQxRjkxQjRFQTM3NTJGMEQ3M0ZFNTgxQTNFRjIKLToxMENBRDAwMDcwOTMzMEE2MzdEQ0VCRERBMjc2RkVEMzgzNTc2MTIyNUMKLToxMENBRTAwMEUyRjNEREE5NDg3RjdERTE1MzVGQkY4Q0VCRkYyRTk0MUQKLToxMENBRjAwMDNGNjZFNERGRjhGQTRCODE1RjcxN0ZENDBCQkZFMTAzM0YKLToxMENCMDAwMEZGOEVFOTk5NTZBQjI0ODAyRDc0MDZFRDA0Njc2RkJDNDcKLToxMENCMTAwMEY3QzA5RkVCRTc2RjZBMUY1N0M3RDE4N0RFNUU4N0QzRTkKLToxMENCMjAwMDQwRkMzRUQwRkFCRTI5RkM5NkI4MTUwMzFERTk3MDNDQzYKLToxMENCMzAwMEY1NDU2MjdERjA4ODI2M0Y5NkIyQ0E2OTk5QzM3QUVCQzMKLToxMENCNDAwMDMzMTMyQjUzODcwQTNERjM1RDE1MzE5MTlDM0ZCNUMzRDkKLToxMENCNTAwMDQ0RTczM0YxRjI2MjI5OUVEQjI2MThFNzQ5MzdCNzYzRDEKLToxMENCNjAwMDk2RUUzQjMwMDZFNURBQTk4M0JGRDBFODkyRDNGREQyM0EKLToxMENCNzAwMDlERUY1QTU0NEQzRjg0NjNFNTczMUZFN0MwQ0Y2QkYzQkQKLToxMENCODAwMDVFQjYzRjcxN0ZDQjc2N0U5MkIwQkY5MzUyRTA4NzM4MUUKLToxMENCOTAwMEZGOTMxRDY2QTY0MjE3MjcyM0E2ODQ3MTBCNUJEQzY2RjQKLToxMENCQTAwMDgzRERCNTJBNzlDMkQxNDFCODJGNDg0OTUyNzBEREI1MkQKLToxMENCQjAwMDJCMDM2RkUyQjlBOEZBQkE5OUNFRjk5OUU0RkZEMDBBMkIKLToxMENCQzAwMEU1QjVDOTQ5MEFGQUYzNkE1M0U2MzIyNTQ2OEZEN0M1NTcKLToxMENCRDAwMEMxNDlGMjk0RDFGOTlERTQyRTJCRTY3QkJBQjBFMUJDQjkKLToxMENCRTAwMEQ3MEMwNDExM0I2RkQwQkI1OUE4OTdERTI5RkFDMDhDMzMKLToxMENCRjAwMEVCRkM2QjlDMURGOTU3ODlBRDFBMDJGREZENTUxNUZDMjgKLToxMENDMDAwMDM1NEFBMkZEODFCMUZGRTA3RDI2QTZDNEY0QkZENERBODcKLToxMENDMTAwMEZEMEVDRTg3RkRDNkNFRDAyRTMzQkQ2NDE3NTA5RTJDQTAKLToxMENDMjAwMERCNkFBNkZERDczMkQ4NTYyMURDM0VEODYyMEZBQjkwMjYKLToxMENDMzAwMERGRjg3Q0Y1QURBODk3RkVCNkQ1Q0FGMDVDRTJFNUJEOUQKLToxMENDNDAwMDJCQkFFRTQxQjlGNDg4QzBEMDlGRkVCNzVGNTQ3Rjg2RkYKLToxMENDNTAwMDdBNzlDMTY2NTgxREM4OTM3OThFRUVDN0IxRkRCQzY3NUQKLToxMENDNjAwMDg3QjI1QTY4RkZCMTEwOTk4MDlCRDlBRUI0RTgwNERDNTIKLToxMENDNzAwMDg3NzRFRENBRjBBQkQ0Q0Y4QjRCQjFERjMzQ0YzQUE4N0EKLToxMENDODAwMERGMzNCRjc5OTNDNjM5RjM5QjY0RDI2QkZBRkNDMURFMDQKLToxMENDOTAwMDU2NjJGNTM4RDhEQkNBMDUzRTIwN0IzQjI2MEZFMzJDRDUKLToxMENDQTAwMEMyM0NBRjJGN0NBNUM5M0M5NDdGOEIzMDA1QkE1RkI0RTIKLToxMENDQjAwMDZGNTAwMEZEQkIzMUY1QTg5RjY1RDZFRTlGRjg2OUZGNjgKLToxMENDQzAwMEFENjY4QUI0Nzc4QTY2MjIzRjJFREE2MTFDRkYzRkRDQUMKLToxMENDRDAwMERDQUU1QTY2RTk5RUNCRUI4NzMyMzlERjc2NTAzQjRCQjAKLToxMENDRTAwMDlBNDZBRjVBNzk3QzdCQkRCRTk0OTY2QkE4QTdCNzVGNzYKLToxMENDRjAwMDZBNjU5NTg5RjhDMEE1RjVCQjY4Qzc5NzIzOENGRDcxNTcKLToxMENEMDAwMEJBRUQzRDBFRkY3RUI3QzBDODdGQzI3NkRCMjlFRTZDNjAKLToxMENEMTAwMEIxMjUzQTNDMTVGOEY2MDUwQjlCOEZGQ0JCMzgyNTNBM0MKLToxMENEMjAwMERDMDVFM0ZENEE5MzlCOEI5MzIwMEZERjMzQjU3OTYwREQKLToxMENEMzAwMDdEQ0MzMzVCRTcxOUM0RUI5MjE3RUQ3NEFFQjJFNDg1OUEKLToxMENENDAwMDM3M0Y0MzdDOUU0MjE4MDNDNjRFQTU3NTdDRjY1M0EwMjAKLToxMENENTAwMDgzNTM1QjRDNEMwNTdCNkQ4OTM1RUE3QjA0RjVENDZFQkYKLToxMENENjAwMDJCNkI0M0ZFN0VFOTE1RDI1QkE3OUZCMzhBRkQ5RDUzRDMKLToxMENENzAwMDJGODkwMDM1RDg3QUFGNDMyRDY1MDU5NTRFOENCNzA5QkMKLToxMENEODAwMDg4QURCODZGMzg2QzBBRDdDMEQ4NTU1MjYwRTVCM0I4RDMKLToxMENEOTAwMEJFQzM2NkRBNjc5QzlEQzMwQTcwNUY3OTk2NjVGQTU1RDMKLToxMENEQTAwMEMyQkZGMkE2MDRFNTJCNUUzNTBCODlFMjkwQ0NFNzQxQzkKLToxMENEQjAwMEE4OEYwMzNFMzg3RjJENTMyMDk1Q0UwRkEzNzQ4NUE1RjEKLToxMENEQzAwMDcyMDRDQTVEOTMwQzhCMkIyNDNGMDFEOUVENjZCNzlGOEIKLToxMENERDAwMENEODM3NDQ1MkEwQjIyRkM5OEYzOUEwQkZDRjU3QjQwMUIKLToxMENERTAwMEU5RjI4Nzk1MjFEODZFNTIxQTk3MkI3M0QyMDM1N0E2NzIKLToxMENERjAwMDkxN0M3MUNBRTQ1N0QyRTg1NEREQ0JFN0Y5Qjk5MEU0RUQKLToxMENFMDAwMEFGODE3OUU1OURCRkY3MzY4NEVGRjI3NzA1MjVGNkZDMTMKLToxMENFMTAwMDNDM0VDRUIzNEE1MkRFNTQ4QTY5QkQyNDhGRjJFNDI0RUMKLToxMENFMjAwMDg2NzAzRDJCRjNCOEJFQjM3Mzk0NDFBRTE4QjlCQ0E2NUYKLToxMENFMzAwMDVBMjZGOUQxNThFREExNzQ3NTc1MDE1M0M4QkZFNkE3RkMKLToxMENFNDAwMEJDNDk1QkJGQjU1MEE1MzgzNUU0NjlGQ0IzM0FDQjAyQTkKLToxMENFNTAwMDY4RTdFMTlDRjIxNTNDRUUwRjEyMUQ1OTNEOTVFNDlCRUQKLToxMENFNjAwMEIyMzkxOUVENjM0RDRFOTVDRDgzRDRFQ0U0RjAzMTM5RjAKLToxMENFNzAwMENCMDgzRTE2MkQyRkI1NEMyNzc4NDI3QkZBN0U3OTdBNjcKLToxMENFODAwMDcwMTFDMkMzOTYzNUQyMjA5NzJDRUVCMTg2N0MyRjc4RDQKLToxMENFOTAwMEU5RjhERkY1N0YwNTM3NDY3MDZBQUNCNjUxQkFCQTdBNjEKLToxMENFQTAwMDIyQzFBQkJFM0E0MEY5RkYwN0I4M0RDMEUxNzYzMUM2QkEKLToxMENFQjAwMDVBQzRDMEFERDQ5MEVGMTM2RTBGMDNERkI4NjNGOTA2MDgKLToxMENFQzAwMEUwODg3Q0MzOTJGQ0RCMTNBQzNGM0U3REE4MUExN0M3RjkKLToxMENFRDAwMEQ4MDNENTJEOTRFQURGNTNGQkQwREI5RkE0NzEzQkEwOTAKLToxMENFRTAwMDhBMDU2QkNDNzRCRUM1RkQyRENDQURCMkFDMDkzREZFNDAKLToxMENFRjAwMDRERTY1MTk5ODI3OUU0NTVDNENCRDEyNDgyRERGMkI3NTUKLToxMENGMDAwMEVERTQzNzM2Qzk1MjU3QUM1QzVCN0U5RDMyMDRFNTk3NDEKLToxMENGMTAwMEE5RUE1MTc2NjI3MDhDMUY2RDdBOTk1RDIxQjhGQTA1ODUKLToxMENGMjAwMEY0QTdENjZBN0FCM0ZFMDJGRThDN0NCMEE2NUFBMTc0MkUKLToxMENGMzAwMEFEQzYwRkVCMzU3RUQ4ODA3ODg2N0NBRDlGOUY2RjM2NkYKLToxMENGNDAwMDRGNjNBNDE3RkYwNUYyN0MxRjFGNjVCMTcxMjYyRTdGNkEKLToxMENGNTAwMDI0NkEwNjdDOTM4QzU0Mjg4RDUyOUNFRjUxNkIzODFGQTkKLToxMENGNjAwMEUzQTgwQTE5QzVEMUI5OEVERTQzRkU2M0M2MjIxRUY0QkEKLToxMENGNzAwMEE3QjkzNEI4QjFGREI5QUU5OUM5QjQzQzMzRDczQkNDRUQKLToxMENGODAwMEM0RDM5MDE5RURGMTc4QjhENkZBMEZEQTcwN0ZEREQ3RjcKLToxMENGOTAwMDdDNEFERTU5MjBFMDc4OUZDRjI0MzQzMUY3MkQ5MUEzQ0QKLToxMENGQTAwMDE1QjAwRTY3QjM4M0Y0NkFCQUJGMzIxQkZEN0JFQzk4RjEKLToxMENGQjAwMDk1RThEM0U5MEYwQUYzNjJGMDk3REU4NzVENzc2N0ZBQTkKLToxMENGQzAwMEQ1N0Y0NUZBRUI0NDU5MDY3QUU4ODE5NjYxNzY4NEYzNzkKLToxMENGRDAwMDFBNzNDNDgzRjI2RThEOEJFQjBGQTUxQ0EwRjBERDlFM0YKLToxMENGRTAwMDc2QUY2ODcyMzBBNUQ4QzhFRkJBN0M5NTI3OEYzNUQwNTgKLToxMENGRjAwMEFGMkU1NzUzQTcxOEU5NUM5N0FCQ0ZBNzcxN0ZDNTlDOUQKLToxMEQwMDAwMEY0QjI0RkQyMjAxRDdDN0UzM0YxNjEzQ0RERTdDOTE3QkQKLToxMEQwMTAwMDk3MDdEREE4MDc5OEJGMDlFRDM1QjQxOUQxOEU3QjU3NjYKLToxMEQwMjAwMDA4NzM3QUU3RkVBOUIzOUQzOTZENjhFN0MwQUU4MEU0NjYKLToxMEQwMzAwMDhBOEFGQzQwNzhFQTdFRjkyQjY4Qjc0QjkzMEYyQjZERjgKLToxMEQwNDAwMDMzNkNCOERFMDZBMDIzODZFNzdBNDAzRjA4RTA3NTQwREYKLToxMEQwNTAwMDNGOTg4NjgwN0UzODdGNENBNDU0QTc0RjRGN0E4RTIxMEMKLToxMEQwNjAwMDJFRDA5NDc3NDhFNEYxRjIyMkY5OUUyNUQ4REYzOTYxNzkKLToxMEQwNzAwMDNDRTlDMDI0MUJEQTdCOTJEOTdGMThFNTU0NzdCMjE4QkIKLToxMEQwODAwMDQxQkQ1OUVGOUM2MTBCQTBGRkM2NTU0Qzc4RkYyQ0I5RjAKLToxMEQwOTAwMDIyQkJCRjM4MjdCMDVCQzg2RjJCM0JGREVDMzg4RUMzN0IKLToxMEQwQTAwMDE4Rjk2RDRERjI1ODg2RkJDNDVEQ0U4RTI0RENCNzU4NUUKLToxMEQwQjAwMEQzNDVDM0JDRTZBNDA3QkRFOTMxRjlEMTM4QkE4NjJGMDAKLToxMEQwQzAwMEVDNzY5N0Q2NEZGQzc4MTdBNTZCN0VDQjJDOTUwNTYyMzYKLToxMEQwRDAwMENFMkRBQTc0RkE1NjU0MzYyNTg2QkY1N0U2NEY2NTE4RUEKLToxMEQwRTAwMDdGMTFDRkQ3N0RDQUFERURERjRFNkVENTY2ODcwOTVGNjQKLToxMEQwRjAwMEU2Nzg3OUUxMDYzOUVFQTQ1NDE1NjU5Q0I3NzdDRDhGQjMKLToxMEQxMDAwMDhBODhBRTJFNERDN0ZEQTFCM0VEODIxRDcyNzk2RTAyRTUKLToxMEQxMTAwMEZBM0EzQTcyMDhDNTY3NUVEMDMzQjA2QjJFMjQzREIzM0QKLToxMEQxMjAwMDcxMjJCNzQ3MzQzREMzRjVEM0Q5NjYwN0U5QTdCMzczNzYKLToxMEQxMzAwMDJBMjk5RUVBNkNGMzEwMDVFOUVFQzBCQTRCQzYyMDNDRTIKLToxMEQxNDAwMEU2OUU2RjY0MEFDQzZGREVGOTQ5OTRDRTZGRjkzOUE1N0IKLToxMEQxNTAwMDE1MkRBRDQwRTQ4Q0Q1QUM5REI3NkUyNkI0M0JGMUIwMzcKLToxMEQxNjAwMDg5RTI4M0JBQzJFM0NFNTQ0MUJFQUJEOUNBNEMzMDRFMzkKLToxMEQxNzAwMEQ3RTYzQkIzRDEyRkRFMDVFM0EwN0RENUI1Mzk5RkU4RDcKLToxMEQxODAwMEFCMEJFMDQ2RjkwNjYzN0Q4QzBCMzYwMTVFMkExOEM3QUYKLToxMEQxOTAwMDBCRkMyRjgwRjVFN0JFNjI2QTRENjQyNzU1QUNCNzA2REQKLToxMEQxQTAwMDEyOURFRjVDMjg2RjQ5NkNCN0Q1RTIzRjMzRjA3Rjk1NTUKLToxMEQxQjAwMDIzMTA1RTI1RUZEQzkzOERFQkQ1Rjk3RjQ1MkFDODIzM0MKLToxMEQxQzAwMDg0RDczQjU2OTZDODFGN0Y3OUZBOTU3MzkxMkUyRjRGQkYKLToxMEQxRDAwMDBGMkNFNTc4NDk0REU4NUZFQkExN0YzRUVFMDkxMUVDOUQKLToxMEQxRTAwMDVCQzI0QjMwRTUwNjgzOUY5NUZCMzE0RjY4RjYyRkIzNEEKLToxMEQxRjAwMEY1NTE5RUEyQjU5NzEzOTcyRjY5RkVGOEQwRkQwQ0VGNUQKLToxMEQyMDAwMDI5NTQ5NjIxRDFFQkZCNjkxMzgzRkRCNDgwRkJERjFCMEUKLToxMEQyMTAwMDI4RkU1OTlGMEZEOEE5NDRDNzBDRjA4MUYyNjU4RUU2MEQKLToxMEQyMjAwMEVGMDFCODdGQ0YwMkRGNEZCQzYyMTI5MDNFN0FFODI5NEYKLToxMEQyMzAwMDk4ODI3NjhCQjBFNkJBOTVCQkEwRkNFRjg3RjlGRTZDQkUKLToxMEQyNDAwMEMxRjkwRDI0RUY4NDM1QTMzNzRFODJFRjc3QkU2MjI2RjUKLToxMEQyNTAwMDM5NUZEMzc0QzlGQTVCMDBCRjlGQkU2NkEyRkNGQ0YzQzIKLToxMEQyNjAwMDc2QUFGN0QxRkRGRThEQjc0MEJERUVERjk5QzkwRUZGNUUKLToxMEQyNzAwMEY0RjA5NTE0RkZGODkxRDlFODI3OTgzMDg0RjNGMUYzOEUKLToxMEQyODAwMDFBM0ZDRjNEQkY4NkVDMEZCRDdDNkVDMzZDOEI0Mjc0RTIKLToxMEQyOTAwMEJBOEVCRUNGQzU0MzlCNEM5Q0ZGRjdGRkFENDRDMkYzOTMKLToxMEQyQTAwMDFDNDZGNzE0OUU3RkU4ODY2QjU3OTI1RTFCNEJGNkZFN0EKLToxMEQyQjAwMEJDQjU1NjdGQTI3OEQwRTdEMzE1ODNGQzk5RDdEOTRDNUIKLToxMEQyQzAwMEZEMzJCMDhCRENFOTVBN0YzMTcyNjRERUY5QzFDNDA3RUMKLToxMEQyRDAwMDRDNTYxOUM2MTlDRkQ1RTRDOTg1Rjk2RDM2MUJFNEM5N0EKLToxMEQyRTAwMDQ3RjZDNDdFOTA5N0QzRjkzRTZBRUVGOTRCODhCRjdBMzEKLToxMEQyRjAwMEFGRUYzMkZBM0U1NzFGQjc5M0YzNjNDRjdBMzY0RTRBRjkKLToxMEQzMDAwMEI0OUU5RTc1NENBNkZBMUZCOTEyOEY3RjUyODM2RjU3MzkKLToxMEQzMTAwMEY1N0MxNjAwQjk1NDYxODU3QTRFMUNGRkNFNTUxMzhCRUYKLToxMEQzMjAwMDcxMURBRTU0MjE2NjVERjM1QTE2QjE0MENDQkFFNjZENUMKLToxMEQzMzAwMDlFNjVBOTg4RTlCNzA3MEZDQjBDNzgzODk5QkU5MEYwQTUKLToxMEQzNDAwMDcwNjc3QUQ5MTFFNDlCOEEzNTk3OEU0MTdBOUNEN0QyM0YKLToxMEQzNTAwMDQ4NzAzRTYxRjZGQjUwQkU3RUQwNzI2NzRBQTIzOEQ4NTQKLToxMEQzNjAwMDkzRjFGODY5RDFGMDAzRjY2RTcxMEM3RTc0QkNDNEI3MEEKLToxMEQzNzAwMEVGN0E3QkRFNjcxOEQ3RDRGNTMwMzc2RUZBODI1NzJGRjUKLToxMEQzODAwMEJDRTUyNDg2OUIzNDg0RTNBRDBCRjQ2RDkwRTBBNkJDMzEKLToxMEQzOTAwMDcwMTRFOTdBQURDMzhGNzRERDM3RkM0NkIxNjA3RkYwNUQKLToxMEQzQTAwMEVCQzM3RTA1N0JFNzRCOTQzQjEyRkE2OEYxMUNCMjg1MTgKLToxMEQzQjAwMEQzQzE0MDcwRUIxOTU3QTM4MzkyQzRFQjE5N0I2MTNEMzUKLToxMEQzQzAwMDU1NEMwNTg2M0Q2RTE5ODgwRTdFQ0E1NDVCM0ZFQkI4RkUKLToxMEQzRDAwMDQwMDczRjM3RDBDMUQ4OEQ0REQ3QUU4NDdBMUZBMkJENEMKLToxMEQzRTAwMDMyQTIzN0ZFOEY1QkQ0OTQ4QkYxRENBN0M5NDRFNzRBQTUKLToxMEQzRjAwMEM3OTNENEY0OUI3OUJFMDhFNUYxRjE5NEQwRjU3ODRFNEIKLToxMEQ0MDAwMEEzRTcxNzZDQ0Y0Rjk5MTUzM0VFMDcwRDAwODcwNEYwOTMKLToxMEQ0MTAwMDFCM0I0NDMxRjhBMTJFRDA0RjlFQ0EwQTI3RkNGM0U4RUIKLToxMEQ0MjAwMEU3ODQzOUYxM0RCRUNCRDM0QjI2MEM0MTNCMjU5NEQ4NDQKLToxMEQ0MzAwMDVGQUJBN0JBQkMzNjBENzI1RUQ4NjdBMkZFM0NFRUNDREQKLToxMEQ0NDAwMEZEMkMwQ0E1RjVFOUMxRDIyMUUzMzE3RUY0MjdCN0ExNkIKLToxMEQ0NTAwMDNDMzg3RTVDMjA3RDVCRjNGNjhBMTFBOEQ3RTJFRDA0QjAKLToxMEQ0NjAwMEQ4N0YzNkUwQjlFNzBBNTM3Mjg4RUM1MEE5NzIxQjlENDkKLToxMEQ0NzAwMDgzQUExMkRCNUU4Q0ZCOTRDQTRERUZFNUEzREZCMDhBNzIKLToxMEQ0ODAwMDUyQTZEOUExMkI0QzIzRkQ0REU0OTdBRDdDMDJDRjQ5ODgKLToxMEQ0OTAwMDgxNDg2NEFDMkZCMTRBM0EzNzA1NDE1ODg2Rjk4RDBFNjAKLToxMEQ0QTAwMDdFRUU1QTI1RDk2NDZCNEM1Q0MyNjI0RDlFRDc1Nzk3NkQKLToxMEQ0QjAwMEZERkMzREY0NDNEQjU0MjZBNzYzN0IyRTM3MjVDNkVERTgKLToxMEQ0QzAwMEFGRkZDNDc5QzZFODdCOEIzOTI4RkI3MTFGMkFCMDMyQzUKLToxMEQ0RDAwMEU0MEJCMzE0QTQ3QjRFNjY4RkJCNDg4REMxQzNDMjIxM0QKLToxMEQ0RTAwMERDN0VCNEI3QjczN0U0NDA3QkZCRURCRjkzNTEwRjVBRjYKLToxMEQ0RjAwMDYxMUNGNEIzRDlCMkE0QjNCMUZFNkFCMzNCNDJGNzk4NEUKLToxMEQ1MDAwMDU4NUVDQzc3QjBBQjlDODU5MDM3RjgwMTYwQkVGREQ4RjMKLToxMEQ1MTAwMDg1QkYxMkZDOUVDRjkwMUU2QjM4M0MyNjIyODgyMEZERDIKLToxMEQ1MjAwMEYzOUM2MUFEMjg5NzI3NEE3NTI2OEMzQjlBNzk3QjNFMDAKLToxMEQ1MzAwMEU1MzdDRUZFNkE3ODY3MDI3QTk4Qjk3Rjc1MDdEQTMzRTUKLToxMEQ1NDAwMDMzRjc2N0NDQzZGMzgzOTlDRUUxRUY2MzBBREIwNTVCNjMKLToxMEQ1NTAwMDEyQjQ3RjU5NjA5MTI2NDhBN0Q4MUVBNUI4QzY5NzM1NDIKLToxMEQ1NjAwMEZGNTgzQkU2NjNGNDYyQkI0NjZGNjBFNzRDREIwREU5QjYKLToxMEQ1NzAwMDRDNUJDODdDNDc2MThGM0YyRDdFREMwRDFBREZCNzlCNkIKLToxMEQ1ODAwMDIzNjkyMzkxMEU2MDFDNUNDNzhGRjc4N0JGMEZBQTlGOEEKLToxMEQ1OTAwMEREMTIwOTVGMzcxQUYwNzMyQkVCMzYyMzFDODM0Q0E2ODAKLToxMEQ1QTAwMDczMEZEREFGNUJDMUZDNUE5RUQxRkVGNDJGOEJDRDZEQTYKLToxMEQ1QjAwMDQ4MjdGMUZEREQxMkU1RkRGREI4MURGQTgzRjRENkMzNjEKLToxMEQ1QzAwMERERkY4QTZBMzkxODkxQTczQTU4NEM3RkZCRkM4NzFDMEIKLToxMEQ1RDAwMEFDNzc3RkYxNzBGNjRCMzY5MzFBMDM1NzQwOTExODBCRDYKLToxMEQ1RTAwMEY3NUVGMDFENTQ3RTBEMUJEMzM3OUZGNUMwOUJDRjIzRjQKLToxMEQ1RjAwMDFFMUY5RjYyMTFGMEU5MjM0MzAyQkI5MDZGRUYxRDEyQzMKLToxMEQ2MDAwMDc4MDZEM0M1QjY2RTlGMDQ3NDczQzQxRDdDMEVGMzRCQUQKLToxMEQ2MTAwMDREQzFFQzc0ODBDNzY5NkY3MDQ0MUFDMkE1MjNGMUY5M0IKLToxMEQ2MjAwMDZCM0M3RkU3OTU5RkRFODI3QzczNkI4REM0MTBDRkFCMjQKLToxMEQ2MzAwMEY2N0VCMDA1RjlGMkI0MTlGODA4RjYwMzJGREZGMzQxQ0UKLToxMEQ2NDAwMDMyRDJDRDEyNjBDMDU4NzlGMjRFNTUzRUQ5NEY2N0Y3QUQKLToxMEQ2NTAwMDhDRThGN0JFQzkzQjlBQkZFNDU1OEQ0RkY0NzVERTg2NjIKLToxMEQ2NjAwMDBDMDhFM0REQjZDNzQxRkI5OURCQUE0QzE3RjY1OTQ4MTUKLToxMEQ2NzAwMEVGQjc1NUYxRjgxMDI2NzU4Q0I5Qzk2MDc3RDY2OUU3MTAKLToxMEQ2ODAwMDZDQkRGQkMxN0Q0NDdDM0Y1REQ1QzE2REM0Rjc1MjcwNUMKLToxMEQ2OTAwMDAyREFERDI3QUFFNzZGNDNGOTEyM0Y0RkM1MTM3QzdCRkYKLToxMEQ2QTAwMDA4RTlCNzU5ODZCOERCMzlDRDBCQjZDNUYyQTE1RUJGMjQKLToxMEQ2QjAwMEI2MEZGOUJBN0ZCOEI2NEUxQjFGOEYyOURGMjk3MTRFRkUKLToxMEQ2QzAwMEEwN0I5OUY0Njc4RkRBREUxNTYyRTg2MUEwRjE1OERFN0QKLToxMEQ2RDAwMDk0QzAwNUI5NDBGN0U1NDVFNjRDRUZERDVGN0MzREJEMDQKLToxMEQ2RTAwMDdGNEZENTE1RUNDNDM4NUM1RkUwREM5MEYxMDNDRjlGMzEKLToxMEQ2RjAwMDc5MzQ3OUE2QjVEM0JGREI4MzIxODY3NkExRkQ4QjQxMzIKLToxMEQ3MDAwMDY0MjdFQzFGQ0VGRDBGOUY2QTc2MDE3M0MyN0E5MUMxMjgKLToxMEQ3MTAwMDQyMUIwM0ZGMUZFQjg1ODFFOTVFQTY3REIzMzU2MTVDOEIKLToxMEQ3MjAwMDUxOUE0N0UyNzQxMzM5NTQ2MjRCMzBCRjVFRkQ0NTI1NzAKLToxMEQ3MzAwMEY2NzVFQUVEMUZDRUE4NUY3NDkzOTFCRjZCNzgxMkVEN0EKLToxMEQ3NDAwMDZCMkFBQTZBNjk5RkREMDhGMjAzRjU0MUZDN0M4RTM3REIKLToxMEQ3NTAwMDNEQTJBMDFFQjA1QjQyMEFGQTQ1MUI4N0E3RTdBQzg0MzYKLToxMEQ3NjAwMDc2MjBENUM4RUY2MzRGMEEyOTUyRUM3N0NEMUY2NDVGNEUKLToxMEQ3NzAwMDE5NTI3MDdGREI5ODlGNDlERkY1RkUxQTA1MkU2Nzc1RjkKLToxMEQ3ODAwMEJFNjg4NDdEREY3M0U0MTdGMzdCNjY2MDVDRTkxQkUxQjAKLToxMEQ3OTAwMDY5QzlEMEFFNkQxNThCOUE3QzhDMURGNDY1OEVDMjdERTcKLToxMEQ3QTAwMDZFQThERTQyRTc3QjhEMDU2MkM2MUNDOEE3Nzg2REU0RDMKLToxMEQ3QjAwMDFGNkI3NTQ1NjdFMjNENUE1NTkwNDhCRjg2NUNDQUQ1RDgKLToxMEQ3QzAwMEM5RThERjVEMzlBNDAzRTVERkMxM0IyQ0I0REUzNTkzNDYKLToxMEQ3RDAwMDQ0REE4RjU5MkY3RTJGNzQwNUY2N0YxN0YzQTM1RTZEMDEKLToxMEQ3RTAwMDNCRkY3QzhCMTNFNUYwNTFEOENGQTJERjEwM0IwNTc5Q0UKLToxMEQ3RjAwMEQ0MzZFREFDMURGNzczQTkxODU3MDc3NEIzRDkxQ0ExMjMKLToxMEQ4MDAwMDc5NkRBQUIxNTJCRjlCNUEyREU1ODlGMEY3N0U4NjQ0MDcKLToxMEQ4MTAwMEY1QzM0MjI3QzUwNzBGNjYxMTNCQzJGNTgxNjkzMzM2NTAKLToxMEQ4MjAwMEU2NDFCQjlDM0MyNkUzN0U3RTRERTE1OTZEQkYxOTMwM0QKLToxMEQ4MzAwMEYxRjMyOEREOEZDOEVDREE3OTk2NEQzQkE3QjJDNUM2NjcKLToxMEQ4NDAwMDE3M0UxMkRBNDNGRTQzQzdGNDA4NEZBNzg5RTQ3RjhFRTAKLToxMEQ4NTAwMDlGQzc1MjBGRjdFMzM5MjY3NzRDNDMzREUxMjgxNjk5Q0QKLToxMEQ4NjAwMDgwRkVDRDNDMjZFMEJBRTQ2OTZENzQ4RjM5QTc4MEY1NUYKLToxMEQ4NzAwMEQxOUVBRjVCMEU0MEZCNjJERTFFN0Q0MkYyRDc2QzNGNTUKLToxMEQ4ODAwMEQ3QzNFMzBDRDdBMjFGMEFDQUMzNjZCRjcwMzVDQzIzMjcKLToxMEQ4OTAwMDdDOUQyQ0E4NEE0RkJENkEwRkQ3QUZEQkEwRkYyOEM5REIKLToxMEQ4QTAwMEQxMzBBRENCNTcxMDg5MjJCREY5MTY4Qjg0QTdCNTEzQTMKLToxMEQ4QjAwMDhGRDNCOUMwMDNDNUJBMUZENTRGRjNEODVDNzNFNDAwNEEKLToxMEQ4QzAwMERBNUY5QkVGNjY2NDI3NkQ0NjE5MEFFRDM2NUZDN0MyQzMKLToxMEQ4RDAwMEZDM0M4OTY1QTI3Q0RCQjRDMDcyMkQ5REU3MTcwMkZDN0QKLToxMEQ4RTAwMDA1NEExM0NFRkI0NzE5MzY1QUI3RUZCRTA3QTI3ODRGNDkKLToxMEQ4RjAwMDNGQzlDRkVGREY0MjlBQjA3RTZEODY4OUU2QkZDOTFDNzMKLToxMEQ5MDAwMENFNDBGRjQ4NUY3NDMxNDNDMzg3QUY0QUIzQUI1OEM4QkEKLToxMEQ5MTAwMDgzNzg1REE3QzE4N0REMzQ5NkZCMTdBNDgwMTIxQkM3RUYKLToxMEQ5MjAwMEQ1QTM0RkI4MUYwM0Q2NDc3MUFEODNFQjJDQTQ4RkM0OEEKLToxMEQ5MzAwMEU5RDE5OUI4QUVENDAyMEJCQjJBMDdGOThCQzM0RDFEQjAKLToxMEQ5NDAwMDJERjJCODMzMTY2RTQxRkU2Q0JEMjg5REUyNDk1NzhCMEYKLToxMEQ5NTAwMDYxMEZERDEzMkZCNUQwNzlGMkMxODlFMkNDRjk1MEJFNDkKLToxMEQ5NjAwMEJFQ0U0MjdFMDhDODEzQkY4NDAyQjlBREM4NkY4RUM5NEYKLToxMEQ5NzAwMEE1RTVGMzIxQkY0MUI2QzgwOERGREE0MkQ5OEU3NDVDNTEKLToxMEQ5ODAwMDFCMTA2NTAxRjJFQkNBRjQ3QjEyOENERTMxMjgzMjk5NTAKLToxMEQ5OTAwMEVDMDU1MEJFMkQ0MzQ0MUYyRERCMjYwOEM0RUZGNTgxNTYKLToxMEQ5QTAwMEQyRDAzMEY4NUUyRkJCODU1ODNGQzA1RTBERkY4QkIyRTIKLToxMEQ5QjAwMENCRjY3QTkwNkYwMjBGODQ4NjI5MUM5N0QyMDQyMjMxMEQKLToxMEQ5QzAwMEZBNEI2NkQxRjkxODczRDM1QUZGRjg1MUJBMEY1NTY0NjAKLToxMEQ5RDAwMEEzRkJCM0RFQkI0MkU1NzRERkYxMjI4QjgyNzg2RDNCQTMKLToxMEQ5RTAwMDNGNzgxNEFEQUZDRUEyMjAzRjZGMTBDMjU3MjNERjZGMzgKLToxMEQ5RjAwMEJFRTM5MDhBN0U3NUZCRkI0RThDMUQ2NkNFQ0U0RkFBOTEKLToxMERBMDAwMDMxN0VDQzU5NkM4OTNCQzc2MjIyQ0E3MTdENUNFNzFCQjEKLToxMERBMTAwMDUxQTJBNzRFMjFGOEM3NjRGMkZGMTQzNjE1QjgyOTlFMEIKLToxMERBMjAwMDc5MDJDMjczRERDNTZGMTVDQzRENDAxN0QwREU5OTNFMkIKLToxMERBMzAwMDE2RUQ2NTMxM0E2MTBDQ0EyOUFFQzc5ODI0NjdDNEUyNzUKLToxMERBNDAwMDc3ODMzN0YzQ0ZFODY3REE1QTAyRjNDN0YxQUFCQTZFRTEKLToxMERBNTAwMEExNzkwNThFRkMxNEVEMkFFN0IxOEZCRTRDM0NDRkQ3REYKLToxMERBNjAwMDQ5OEYyNDFGNzM0NEM1MzE5ODJFOTk0RUY2NTk2QzNENDkKLToxMERBNzAwMDkwRkI4REQ5ODFCRjdBMDBCRUJCNkFCOERDNkZCRTlEQkEKLToxMERBODAwMEQxQkIxM0Y4NTcxMDAzREZFNjQyOTBEMkY0MDAwMTQwRjcKLToxMERBOTAwMDFFRUIxNUNBRTQ0NzVGMkQyQTkxMjhDMjczOEM4REU4Q0UKLToxMERBQTAwMDY5MDgwQjkyNUM4QjVGQUZFMzU4RTMxRDE4NzdFNEYwRDUKLToxMERBQjAwMDFCRTc3OTU2QzMyRkZFNDlFOTc0NUU4MTk2MjhCMzY0NEIKLToxMERBQzAwMENDQjFBM0ZDREIzRDU2QzlDMEZERjYwM0FFQzQ3QUZFNjMKLToxMERBRDAwMDRGMTk3QzVGQjQ0QjQ4NkM5RkZGMkRDM0NFRkIwNzU5OTkKLToxMERBRTAwMDE5OUQ0MEE4NjIxNEQ3MDc3OTMxOURDRTZEQzhDOTZEQzQKLToxMERBRjAwMDE1Qjk1QzYwRDczMEQyN0IyOTQ1OUQ3NjdGQ0M3ODRGQjUKLToxMERCMDAwMDZCRTNEMDFGRjQzMzQ4NkJDN0U0RUU2ODBEQUNCRjE1NzAKLToxMERCMTAwMEE4MTZFRkI1QTU3ODM5MUM5RDZBMEYxQ0IxQkVBQ0FEMzcKLToxMERCMjAwMDBCRjhBMDY2NDQzMTAyNTFBNkZBQUNDQzQyRTcyMjIwQTEKLToxMERCMzAwMDBERDVBRkM0MUUzODI0NkJGNTM3NEQ5NDA0MUJDQzJCODgKLToxMERCNDAwMDE3ODAyMTQwN0RENzM0OEJFMTFDNDVBRTNCQTI2MkY5QTIKLToxMERCNTAwMDRGNEQ0QzQ5OUREODMzRkU5NjIyMTY1RTA5RTMwRjBBQkQKLToxMERCNjAwMDE4RTE5RDdDRDcwQjJCRDAyRThGQTcwMzlDQzE4NTdFRkYKLToxMERCNzAwMDMxNTQ3QzhFQjE1REZBMkRCREY4ODBFMDQ5RjMwNEQwQkMKLToxMERCODAwMDM0QkZDMURBMkMwMDk0RTYxRDkyMUUxRjRCRjI3N0JDMDUKLToxMERCOTAwMEE5NDM0NTdGMjgwNjI0RUQ4NUY5OEY3Q0YyOERDMDRFODAKLToxMERCQTAwMEM4MzcwNzM5OUYyNTE3QkNCMDAyRTlEMjkxQzlGMUY0RjMKLToxMERCQjAwMDQ3RjQyRDQzRkEwODkzRkY4RTcxM0I2QTk1QTgyMDNFRTcKLToxMERCQzAwMEI2NDY3MzQ5OEYzNzMyQTkwQ0YxRDQ1ODc5NDQ0NEI5MTkKLToxMERCRDAwMEJFNjYwRkYzMEIwMkQyRkY3RjVCNjNFNzc3NTM0NjBFRkYKLToxMERCRTAwMEM3QkJBNDkwRkM5MzdDRkNGRUU4OUE0MkQxODFGMkY1N0QKLToxMERCRjAwMEUwMUQyRjkwREVEQjcyNDA2NEM4RkZBNUJGM0RGNkIwOEMKLToxMERDMDAwMDAzRTlGQUNGNTZDQTM3QkY1MjQ5NzJFMzI3RDA0RTREQzcKLToxMERDMTAwMEUwM0YxRjQ4MkZDN0Q3Q0Y1QkQyMjZFMEY5NDRGNkZDODAKLToxMERDMjAwMEM4MkJDMzUxM0U4NzI0RkY1NTg4OEZGOTFEMDE4NDkzNkIKLToxMERDMzAwMDUyQ0NDRkQ5OUNEM0EzRjQ0RTg4ODI1QTBENkM1MjI1NzYKLToxMERDNDAwMEE0QTVDREJDOUNERDk0NEFGQkE4RDFENkNFODY2QjYwNDIKLToxMERDNTAwMDdFOEYzQzI5MzFENDk3MjY2QjI0NjMxRUY0NkI3QUQxRDYKLToxMERDNjAwMDg5OUFBMEQ3RkVFODkxRTlEMTBDOTRFMzQ5OTUxNDA2NkUKLToxMERDNzAwMERENkI3RTZGNjc3MDNFRjQ0RDU3NUUxRDBFRkRCQTI2NUMKLToxMERDODAwMDczNThEQTQzNDMwRUEwQkM0NDlCMTlFRjU1Mzg1NEFFODkKLToxMERDOTAwMEU3RDY0OUUxMDBDNjc5QUZCQjJCNjhDMUYxOTlCNjdGRTEKLToxMERDQTAwMDY5NUM1MkYxMzhDMkY5ODRBNkY3NThFNTdDN0FBRkM0QjIKLToxMERDQjAwMEE3RjE4QkEzOEE5NTI0REE2NzNERTA0OUUyRjEyREY3QkQKLToxMERDQzAwMDhCMDc5MDNGN0MwMTQ2RkE0M0FFOEE0NDQ3Njg3QTE5MzUKLToxMERDRDAwMDI3MkVERkY3NUMyM0VBMTdFNzYyOTFENkIxNEVFQUE4NTgKLToxMERDRTAwMEMxNzcyNUQ2RERDNUU0MUFBNTc3N0ZGRjY4RkJFNTE5NjYKLToxMERDRjAwMDU2N0UyRThBMzg0RUVCNTkwN0I5RTQ0MEJFRjlFNjI3MjYKLToxMEREMDAwMDVFNDcwOEM3MURERkIzOEUyNDdEMUQwNTlEOTREN0U3QjAKLToxMEREMTAwMEIxMkQxMEY5NUFGM0Q4QTBBRDYzNEQwNjdGQTdDODUxQjUKLToxMEREMjAwMEQ4NDlFRkIzQzRDQkZCOTU4RTc3RThGRDk4MzBEOEVBOUQKLToxMEREMzAwMDI2QkE4RjE2QjkwNkYzQ0FCMzIyRTNGN0I1OENGQ0REMTkKLToxMERENDAwMDJCQUZEMTU1RkM3Nzg1QzU4QzkzODM3NEM3RjEwQzc0QzgKLToxMERENTAwMEE3RDk0RkMwNzczNjE0MDFBMkYyMTVGOTMxNDJGQzlEQzQKLToxMERENjAwMDlDMzg3QUZDQTdDQkM1RDg3OTQzRkZDOTBENENBMEI4MjUKLToxMERENzAwMEI4QzU0QzI5Q0RFODJEMTc5OTI2MTc2RDRDOERBMkZDRkUKLToxMEREODAwMEZCQkY5NjhCMjAwNzQ5MkUzNkMzNEEwN0MzNEUyNUI5RTEKLToxMEREOTAwMEJERTkwRUQ0RTNCQTNDMUM4RjM4QzE3N0EyNTRGMzc1QTkKLToxMEREQTAwMEE1ODVCNDJGQTI3Q0QxQzNBRjM2RDM3QjQzQTI3NkRFNDgKLToxMEREQjAwMEE1QzEwNURENTAwODk3Q0YzRDhBNDE5RjNFODRGRjgwNzUKLToxMEREQzAwMDc1RUM2RTRGQkRCNjEwQzZEQjU4OUU1Qjg0RkIwQjdCQkIKLToxMERERDAwMEU4NDVCMjBGN0M4NTNDN0VDNTU3QzVDRkNGMUQ3OTczMTIKLToxMERERTAwMDFGOEZCRDE3QjczMEMzNDJGNEI3NTBBN0JGQUE5MDA3MjMKLToxMERERjAwMEM3NTk4N0ZEQTI3Q0NFQjM5MEJFN0M4NDQ1QjgzRUQ0ODMKLToxMERFMDAwMEVDRDMxNjhGMTY0N0FDRDE1NTNDOUZDNENCQTc3MUJGM0UKLToxMERFMTAwMDczOTdBMjdDQ0YxMEFDMzJFRUU3NTAzRjFGNEMzN0VBMkQKLToxMERFMjAwMDZCQTQxNzVENUZCNzc0QUM3NEExM0YyQzQ3RjNGN0U3QTEKLToxMERFMzAwMEQ4OEM3MTBFNDU5OTVDNUY3RkE1RjkwMTU2OEI5NUI0MUUKLToxMERFNDAwMERGNTQ0QjQ1REFDN0U5RjQ3NzQxOEZDN0MxMzExRTdFRjUKLToxMERFNTAwMDQ4QThBQjI2NTA3QzBDRTU1MzRBQkExOUYyRUY1NjIwN0QKLToxMERFNjAwMEQ5MEQ1MDY2Q0I1MDM0RkI0MDI2MzhCN0ZFNTgxQzhCN0EKLToxMERFNzAwMEYyNzI3NzdCODUxREZERUI4MkNGNzYzNUVFMEZENzBCRTcKLToxMERFODAwMDJDOEE3MjczN0RDOUVCMTQ1N0QyNTQwNTNEQzNBMjlDRjIKLToxMERFOTAwMDA1RTIyQ0NCOThERTc4MDYzRUE2RkRBQTQzQjU3NkEwMTcKLToxMERFQTAwMDVGMkIxMjZEQTNCODg1QTZGMEExOTk4Q0RCQjEwQ0UzQjIKLToxMERFQjAwMDUyOUEwQTU2NjYyRTQ0Rjk1RTUwNTY4Q0Y4NkRBREI3RUMKLToxMERFQzAwMDUwREM4QzVDQzAxMkZBMTFERUQ3RjYzMURGNTQ4RjM5OEEKLToxMERFRDAwMEY0RkRFNUUyQzRGQkNBNkIzMkY5RkUzNjIyODFBODgyNkEKLToxMERFRTAwMEY5NjQxNTg4N0VFNEZGQUMzQTRCQzI3OTVDQUFFMTI5NUIKLToxMERFRjAwMDJEOTNERjBGNkJBRDNGOTQ0MUVGNjM4OTk1NjFENjFGODIKLToxMERGMDAwMEJFNjBGQTJCRDM2M0YwMzFBOTBGN0M3ODc0N0M0ODNBNTkKLToxMERGMTAwMDNFNUNCMzg4MEYzQjNCNDQyRTZGNDlBRkFENjNGMkNERkYKLToxMERGMjAwMEE4MUZENTRBMEJEOUIxOEQ2NkJFMkY2RjJCRDRGODQyRUUKLToxMERGMzAwMEI2QjUyMkIxN0Q1M0JBNEU1OTIyRDIzRDFDRUY0NDkxNjEKLToxMERGNDAwMEY2ODk4RUM1Q0Y1MTVDRDMyM0FDRkIxNTk0Nzc4MDYzRTMKLToxMERGNTAwMDFBMkZCRTdENzlBNkE4QzE1MTExRkNCNDlGRTY3ODA0QTIKLToxMERGNjAwMEJDRDI3QzM2RTdBN0I3QzZGMkU5MDM5QTFERkQ4MDg3Q0QKLToxMERGNzAwMEYzRTlFNkZBODc4ODRGQkZFRTNDNzVCOTVEQUJEOUQxQkUKLToxMERGODAwMDBCMDI0MTBCQUEwMzU1Mjg5QjlBODFGQUYzMzFFNjQ3MEQKLToxMERGOTAwMDM4MzE5MzkzRUNGMjBGQjE0OThDNUZGNkNFQUNFMEMyMEUKLToxMERGQTAwMENDOThGMzQ1Mzk1MDQ5RUYxNjVFODlFRjBBNDFGQjBGRDMKLToxMERGQjAwMDIyRkMzRUU4MDc5MUU3NEJFOEREQUQyMDIzNjY1RUMwMUEKLToxMERGQzAwMDNBMDQ2MjcyOTBBMURCMjFFRjkxMjI1NEVFOTkwRjczMTMKLToxMERGRDAwMDcxRDFFRDQ4Q0FEQjZDQTAxNzYxNDJBN0FCRjlGRDhCOEMKLToxMERGRTAwMDJFRURCREM4QzdCNUY3MjIzRkM2RjcyMTIxMUREREIyMTIKLToxMERGRjAwMEJBRjQxMTFDNEY5MTgyMjgzMzRFRTI3QjkxNzhGRjc5NUQKLToxMEUwMDAwMEUyNUIxNDE3N0QwQTY0NkQ5MzBCRTM2MTdFNTU0MkY3NjIKLToxMEUwMTAwMDRGRUU2NUIyMzgwOUYzNkI0QjMxRUVGOUNFOTdBQ0RBQkYKLToxMEUwMjAwMDNEQzk4RTk1NzhFRkU1NTExMUQ2MEQ2REQ2NDhBMEVGMUMKLToxMEUwMzAwMDg3NjE1MTgzNTAxOTQzQzdCQjJFRUQ0OEMxNzNCRUQzQ0UKLToxMEUwNDAwMDkxMUJGQkY1MUZFM0ZENDE3QTJGMzM5M0UzNjk4MzYzNTMKLToxMEUwNTAwMDI5REQyRjlCRUI4Q0ZBQjBGRDgxREQ0RjNDQkUwOUM2NUMKLToxMEUwNjAwMEZCNzhBRjhEREUzNUQ5RTg1OEVBQzNGMjhGMUY3RUQzMzcKLToxMEUwNzAwMDg3RkFFMkY0REUzNzJEODlDRTI3OTc0ODkxQTk3ODhGNjkKLToxMEUwODAwMDZDQjEzQTg4QUQ4NEY5OTc0NDY2NTkyOEZFNjRFNzAxN0IKLToxMEUwOTAwMEJBOUZCNjQ0MEU1QUIwRkZDNTJEQkIyOTNGNjVFNzFGOTYKLToxMEUwQTAwMDdDNThGRTY2MjZENzEzQTczMzgyM0VGNDRCRTRCNTU4NUUKLToxMEUwQjAwMEEzMjJFODlGNURCOUExODUwOUNGRDkzMzQ1NkRERTJGMzUKLToxMEUwQzAwMDUxRkYxQjFEMkYxRDQyQkM5QzdFRDg0QTdFQjcwMzBGRkIKLToxMEUwRDAwMEZGOTZGQTNEQjVGNzQ1OUFFRkM3QkJERUJDMTVFREU5RjMKLToxMEUwRTAwMEM1OENGOTUxOUU5RkI2NkI3RTNENUI0NzRBRUNGRTc2MzAKLToxMEUwRjAwMDlGMDYwRjNEN0YzQTU5REIwNzY3MEQ1MDRGM0I4RjYxRkQKLToxMEUxMDAwMDRFODAzRkREMUZFODQ4QzFGQjg1MUY5QjgzMTY4NEM3RjcKLToxMEUxMTAwMDIyODQwN0E0MjUwMDA3OTRGQjhCMjIwMkNENzM1MTRCNjgKLToxMEUxMjAwMDJCRERCNzVBQjQ4N0ZCMDcxNzAxQkMwODJFMkQwNzY4RjMKLToxMEUxMzAwMEZFNDczMkI5REMzOEI1Rjc4RjNFN0E5RjYyOEY5NUY2OEQKLToxMEUxNDAwMENGRkFCQTE3Mzk4MzNFODQ4RkJFNUU4MDAzNUZGN0FFODUKLToxMEUxNTAwMEFGODdBN0I5M0E5RTVBRkU0MEYzNUFCQzg3Q0Y2QkYxRkUKLToxMEUxNjAwMDRFM0U4RkI5N0IwMDRGNEVDNEQzMkNDMkZGQTlCRDRDOEQKLToxMEUxNzAwMEMxN0IzMDVEQkJERjNDODlGNkNDRTlCRDM2MDVFRDBBREQKLToxMEUxODAwMDdENUU1OTIwNkU1M0M2MjIxRjcxN0RDQ0Y2MDhBNDhGODgKLToxMEUxOTAwMDk5RDQ0MUU3Mzk0QjY0NTlDNkY3MDkyRTk0ODcyRDYxMEMKLToxMEUxQTAwMDJFNEYzQjRBODc0MkY5RDMwRjhBRjQ4RTI1OTMyMzIzQkYKLToxMEUxQjAwMEQxQkZGQTYxQTY3RUZGQTdDMzg3N0VCMTVEOTc4Njg4MkYKLToxMEUxQzAwMDNFM0Y0QUQ2RTAyRDc1RjgzMDdFNjZDM0QwRTA4Nzk5OTEKLToxMEUxRDAwMEIxRjg3OEY3QzU5MUI4RUUxNUE2Q0FERjdBNzE5QzI3MTkKLToxMEUxRTAwMDc4N0NFOEU3Qjk5NTdGQkQ5RkU2M0RDQzcwREUxODlGNEYKLToxMEUxRjAwMDAyREM1MkYwRkNCQjQwNjQ0MUJBOTdCQ0U3RTVBNEQ4MEUKLToxMEUyMDAwMDczRTgyRjMzQjlCRURBRTg3ODg3RUUyMzlFQzZGNzFDOTEKLToxMEUyMTAwMDY5M0UxMThBRDMxQTFFQThGMEUxMzlERjQ3Q0MxOUM0MzAKLToxMEUyMjAwMDczRDk4RjFGN0I5OUUyNkRCQTMyNzRGRjUzMDdENTNCQzgKLToxMEUyMzAwMEI1RTdFNTU0NEMyQkI0Nzg3ODE2QkU5MUU0MThDMEIxMUMKLToxMEUyNDAwMEMxMzYzNjkxN0NENEVFMTc4NUY5QkRCMTMzMDIwODRDNDYKLToxMEUyNTAwMEQ0MTM1Qjc0Mzg1NzVBNjYxOENFNzVCODFDQ0REQTlDNDcKLToxMEUyNjAwMEQzNEVGRTk2NzBFMkZCNjZGMUYyMzdFRkMxNDk3NEFFMTEKLToxMEUyNzAwMDdDOEUyNTNFNTc2NjVBOUNEQzBBNTMxMkM1REY2Qzc0QUYKLToxMEUyODAwMEZDOENFRURGNTZBOTU2MTlFRkFGMUNEN0U0RTI3QkRBMUYKLToxMEUyOTAwMDdCMEI5RjI3QTVBODIyRDBDREYzNDM4M0RFQTE2OUJEQzgKLToxMEUyQTAwMEVGRTE1NkFDNTlFMjQzRjg1NkUwQjkwNzZENkFCNjVENDYKLToxMEUyQjAwMDg3RjE4NDVENjk0QzdCOUY5NDQ1MDk3RTY2QkRGQzVGNTgKLToxMEUyQzAwMDc4Qjk4QkU3OEI4NzNFQjMxNkVEMTM4NDJGQjc1MzFGQjYKLToxMEUyRDAwMEJEMEVFMzFBQkI3Mjc4NzkxOTk2NDM3RTU2NjY1OUUxRjIKLToxMEUyRTAwMDUwRUUzNzExRTgxQzg5OTk1RDVEMzZBRUMyMTNDMUEzQUIKLToxMEUyRjAwMDA3MkUxMkVCRDJFRDZBQTgzQzdCMjgyM0I4NDI3RjEzOEQKLToxMEUzMDAwMDg2RDJCRTFFRkExQkZERURGQjAzQkNBQkI2RDRGRjg1NjcKLToxMEUzMTAwMDdFNkNGRjVCRkQ0NDQ4MkY4OTQxN0NFQjBBQkVGOUI5NTYKLToxMEUzMjAwMEZFN0JCNDk0Qzk0REFFNkZERkZGM0ZEQTdFODUyOTIwQjYKLToxMEUzMzAwMDdFODQ3NDM4NDgyNEJBRDdGOUJBRUJFMTExNDVCOEZGQTYKLToxMEUzNDAwMEI3MzREQzExNDVCNUQ5OTU1QzZBQzk4MEVGRTcxNDdFMTYKLToxMEUzNTAwMDdFNzJGQjgzMUIwQ0VGQThFQTY5RkM3QkI1RkEzOTlFNDEKLToxMEUzNjAwMDY1OThGMTdDNzZENTUwMkU4RjU2MERFREYxMTNFMkI5RkMKLToxMEUzNzAwMDFDMUU1N0QxQzYxOUZFOUFEMzI5MTQ4NkRCRTlBQzUyNkMKLToxMEUzODAwMEM0RjhDMzgyNzYxQkJERDc3QjExMDM0MTAxRjMxRkM1QkYKLToxMEUzOTAwMEEyMjJFQUVGRDFBQzkzRjJERjQxMTA0MEJFODgyOTI2RDkKLToxMEUzQTAwMENDOEY2M0REM0U2OTE4OUUzRjQ3NTdBMTlENzZDNDFEMDMKLToxMEUzQjAwMEFDNDNCQUZERUNFMThFNzcwNDI4RkY0OTY2RjA5NzlERTcKLToxMEUzQzAwMEU4RUYxQ0NBRUQ1NDI3OTg4NTQ4Q0YzMkE2NDA4N0EyQjMKLToxMEUzRDAwMDYzQkEyNzkxRENCRjAwNEY1OTNBMTU3QkRFNzY4MzE0NzAKLToxMEUzRTAwMDU4QzdGOTIyNEJFRTcyRjRDMDU5OTcwNzBCQjVGNzk3NEYKLToxMEUzRjAwMEY0RjYyNzlGN0MyMjk3REUxREVBNzkwN0JDREZGQkMwN0QKLToxMEU0MDAwMDczQUIxNjNDRjhEOEI4N0VDQTM1MzlCQkFCMjY3QzczRTMKLToxMEU0MTAwMEFDQkU2RkQzRTBCQzdEQTg2OEIwMEI2MTU0QjJFMzlFODQKLToxMEU0MjAwMEJBODFEQjRGQkIyRTBEQUM3QzE0RTU2RDhCODlGNkQzMjYKLToxMEU0MzAwMDFGQjVGQzkxQkY4NzUzQzZDOEFFRUI2QkRDOEZFMkYwMTMKLToxMEU0NDAwMEZFRDFGNjI3MzJGOTc5NDdEOEEwREYxNzNDRkU4QjkxMzEKLToxMEU0NTAwMEIxRjE5NjAwNjZDNTNEODFCRkMzNDE3ODNGRTQ1N0FEMzkKLToxMEU0NjAwMDI2QTREMjMyRjJDNzU4NTgyNThGNTNDMUY5MEVDM0Y3RUMKLToxMEU0NzAwMEI4MjI5NDNBNTkwN0E1MjlBQzlCNTI5OUM5RTQ5RjRFRkEKLToxMEU0ODAwMDY1N0U0QUREQUM4Q0QyNzQ1NjI5NzBGQjJFNDQ2OTI2MTkKLToxMEU0OTAwMDhCNTA5QTg1RjYyOUZBN0I1ODM3QTUwQURFRjg4Qzg5QzUKLToxMEU0QTAwMERGQzhDNTEzRDM2MUY4REU2RTE5RkYxRTE3MUYyNDIxQzQKLToxMEU0QjAwMDFFQzcyNTkwRTc3MTcxNDFEMjhFMkE5MkU3MTgxNzk0RjIKLToxMEU0QzAwMEVGRUVGRDlFODIyRUJGMzcwQzJERkQxM0NBQkZFNzg3RUUKLToxMEU0RDAwMDA2OEUyMEZEMUM3RUU2NTU3RUJGNjJBRDQwRjZGNTA5MzYKLToxMEU0RTAwMEZCNzQ4QjAyQTg3QjNBMzU0MEVGODBBODIyMkJEQjBFMTEKLToxMEU0RjAwMEZBN0Q4RUVFRkZDNzNGM0Q0RTE4ODFEOTZDM0UxNTFCNEQKLToxMEU1MDAwMEJGQzM2Q0NFMDIzQzJGOUVBRDU1OURBRDlEODNDQ0Q2MzYKLToxMEU1MTAwMEZDMjBGOENFMTlCRkE3RTdBN0ZCRjZCM0I1RjM4N0Q5NjAKLToxMEU1MjAwMDcxRkUxNzE2QjIxQUZDMjgyQUZFMDNENjMxM0IyNEQwRkUKLToxMEU1MzAwMEI5QzFFQ0E0RTkyRjc1QjJCRUU5MjRBNjNGQkFGNzU3REEKLToxMEU1NDAwMDExRTc4NzFBRDA5RjE1OTc5RjEzREZERTI2MzA1QjNBQkQKLToxMEU1NTAwMDdFRTdGNEY0RjQ2NTBBRDk3NUJBM0YwQjA4NEVBMTc2NEMKLToxMEU1NjAwMDBERDY3N0M5MkYxNEJBMzIxMDBCQTdFNDJDQkU2RkI1QTUKLToxMEU1NzAwMDg3QUU0QTQ5RjRFRTkyOUVDRTAxRkJDQzlDREFCQjNEQkQKLToxMEU1ODAwMEVDMDg1REM4RjdCQTFDRDZFOTNDMDczN0I2Qzg0NzA1QTIKLToxMEU1OTAwMDk2ODRFRkFFRUFFOTFBNERERjM3REQxRjYyMzg2RjdCRjQKLToxMEU1QTAwMEY0MUU3QThGRkE2RUFGNEFCRTVBNUI2MTk4RUUwNzI0NkEKLToxMEU1QjAwMDE1ODQzRDZBODJGOTM1RTEzQkNFQzA1RjREQzlDNjczMTMKLToxMEU1QzAwMDkzQzU1OTlDRkYxNzY3RjFGM0RENDMxN0E1OTdFMjc5Q0YKLToxMEU1RDAwMEY2NkE4NUJGRUJCQTVBRTFCRjQ3QjAzQTZCQTBGN0M4RkQKLToxMEU1RTAwMDZEODY3QkYyQUIwNjZGQTU3NzgwRUM1RjZDNjM2ODRGM0UKLToxMEU1RjAwMERBQTVDNEY3NTI2RUQyRTBCQTQxQUJCRjcxRjA1NkYyNjEKLToxMEU2MDAwMDkzMzRFNEYzRjNGREY4RkEwN0YyMUZBMkY3MUYxQjczMkMKLToxMEU2MTAwMDYwQkY4QkU5RkQyQUY1NUY5RkZGNTAzOUI2Qjc0NTFCRjgKLToxMEU2MjAwMDBERjc3OTdGOTRDNUU1OUE2RDBGQTc0NzUzOUUyNTlDRkEKLToxMEU2MzAwMDhCRjQyMDg1MjhCRTQwQUZEN0Q4Qzc3OUQyQjQyQ0FFOTIKLToxMEU2NDAwMDhGOUFDQzYxQkEyN0QzQTREOTQzOEJCMzFDRUJDODJGQzQKLToxMEU2NTAwMDk3RDU3NjE0RjlGNTVDMUVBM0YzNDY3QkY0NDkzQTQ3NDcKLToxMEU2NjAwMEIwMTU1ODk4NUREMDdFMEYwMEUzM0IwQTIzODQxRjc0RDkKLToxMEU2NzAwMDM2NDUwRDc0MUJGM0VFQkRBOTc3RkY3NTVGODUzQ0I4NzkKLToxMEU2ODAwMEJFQzY5QzEwOEQzRkQwN0EyRkQ1RTBEOUE4RTlENzQ2RDkKLToxMEU2OTAwMEJCRjExQzZEQUU4NkVGMkI3NUI4RUM2NzI0NEZGQTgxODkKLToxMEU2QTAwMDBCRDk3QkQzMzZFNzVFOEZGM0IxRUQxQjEwOEU4NkZBNjQKLToxMEU2QjAwMDM5QUM3QzUwMjI3RTg5OTdGRkNFNDIzMUVFMUQyNTgxRjgKLToxMEU2QzAwMEU2NzU2RThGQTBCREJCQzhERkIxRThCMTAzMjIxNkVDQzIKLToxMEU2RDAwMEY3NUYzNzU3MUNCQzFBRTZCMzMwRTgwQzYwRkNFNDEzNTQKLToxMEU2RTAwMDlCREJFODlFRkVBMjE3Q0QxNDlGMzBCQzczMTY5NzgzNjgKLToxMEU2RjAwMDJERkM3RDQ1RkQ3REEzOEI1QUFDODZGN0E2OTZCMDk4ODAKLToxMEU3MDAwMEY3MTc2MUJDNDVDNzNFM0FDNkU4OUVCMUYxQkJGRTZFNDUKLToxMEU3MTAwMEMwMUFGQzkwMjA0RTJERkVERDgxNzU1OTdEQkMzQjUwMEEKLToxMEU3MjAwMDk4RDg0RjEzRkZFRUMwQ0U4ODQ4N0E2MzM5QzZCMUQyNkQKLToxMEU3MzAwMDNFNjA2QjI5RUU3QkFBOEUwOUU0MzdFOENEODdDQTk2NDYKLToxMEU3NDAwMDNDNzM0QzVFRjAxMzNEQUFDOTQ5ODFFRDA5RjhFOTRGQ0QKLToxMEU3NTAwMDVFNEUwRkJCRjA1MDhERUNGRUZCRDY0NUIzMzBBRDYzODMKLToxMEU3NjAwMDc4REU1NDdCOTcyNEUzQjk3NjZEMzg4OUVFOTdENENBNjYKLToxMEU3NzAwMDYyMThFMzQ2QkNDOUE1MzZGNDNGMzI5NzI4RTMzREI0OUUKLToxMEU3ODAwMEE5QTZDOTc0RUZDOTcyQjczNDhFREU2OTZENUJEODgxRjIKLToxMEU3OTAwMEY3RUE2QTNEMTI0MzNFRjZCQTc4MUMwMUNCMTBFOTdERDgKLToxMEU3QTAwMDlBM0FGOTc1RDc2Q0RDQzczOUY5M0RCRDZDOTk4NTE1NzYKLToxMEU3QjAwMDAxRURCQTAwQzNGMzY1RDhBQzU0NDZDMUY0RjIwQTgxNDYKLToxMEU3QzAwMDI4QkU3N0M1MjY1OUU1RURGQzlEOTlFQjhCMjY5MDFGNTkKLToxMEU3RDAwMDk4RkUwRUI0NEU4REZFMUFDNzA5RDhDQTEwRkY1M0VFMkMKLToxMEU3RTAwMDc2OTMzRDE4RjY5ODE4QzYwMTFFQ0ZDQTIxMzg1QTkyNjIKLToxMEU3RjAwMDRCQTM2RkUzRkM2NjNBQzhCNzFCNTZDNTU0QzRDMzJCODIKLToxMEU4MDAwMEFEQUI2NjVDMDVERkNENjE4OUUyMUQwQUJFQUNCREY5MkEKLToxMEU4MTAwMDJBNjhERkRENkFBMUZCMTYzQTlDOTQzQUM5RjA3RTgzMzAKLToxMEU4MjAwMEVGM0U2M0RFMTJGNzVFODVDNDYyQ0EyMUZGQzcyQ0VEOUUKLToxMEU4MzAwMDdDOTI5NUIzNjg2QzFDQUYzQkMwMEZERDY1MjdCRDVCNTgKLToxMEU4NDAwMEQ3MDlGQzQ5RTcxRjVBRkU0RjVBN0U4NzM5NDQ3OERGQzMKLToxMEU4NTAwMEYxQjY0MEZFRDU4M0FENzNCMzQ5NUUzQTk2NkU3M0UwNzAKLToxMEU4NjAwMEJFRjAyODNGQzdFQzRCM0UzRjlBQTVFOEVGN0NEOEI1RjkKLToxMEU4NzAwMDc3MkFFQ0U4Rjc4QUE3QTdCQTZBRTZDNzM4NDM1QkI4RjUKLToxMEU4ODAwMDNENjkxNEUyRjdCMDk5N0UzRkEwNUU5MzhGOTI5M0NCREYKLToxMEU4OTAwMDcxOUQ2RUUyRDNGQTM4RkFBQjM3RkIwQjQyNTBCRkZFRTQKLToxMEU4QTAwMDRCOTNCNjZGM0M3OTdENzQzMjg2M0QyOEI0QUYzNjY3QTIKLToxMEU4QjAwMDMxM0ZCMjg3RDlERDkxMjlDMzNDNDZCRDY4RjFFM0VGMTIKLToxMEU4QzAwMDMzNEM3REI2NzAxMENBRjk1MTJGQ0YyNEY5ODY3MDQyQUYKLToxMEU4RDAwMDdDNDk1NTE2M0ZEQUM5RDYyQUI3NUYxQTg3RjU5QzQ0OUEKLToxMEU4RTAwMDk3Njc5RDE2QjI4N0E0MkE0Nzg4RUNBRkQ2MDkxRTI1RTQKLToxMEU4RjAwMDc2NUY1MTJERkIyNTMzRkU2RThEOEREMjU1N0RDOEZCODUKLToxMEU5MDAwMDZDOTc1ODg2N0U1NzhCNjYyRkJCQkM1QzlFQkFCQzBFM0MKLToxMEU5MTAwMDdFQkVBOEFENzM5QkE0Q0U0MDdBREUwNjc0ODM3MTM3QTkKLToxMEU5MjAwMDA3RUVFM0Y0QkQzQ0MzNDY3QTczRjkyQkMzODZGNEU3RTQKLToxMEU5MzAwMDFGN0NCQ0RBRTNDRjAzQzA2RUJEQUY4MkZDQjYyNUY3MDcKLToxMEU5NDAwMEJDRDc4ODc0QjczQ0Q5MjYyMzFEOUE1Mjg2NkY5QzhDRkQKLToxMEU5NTAwMDc0RkZBQTk5RUU3OUQ2MjY0RjUwNjZDN0Y0Njc0QTk5OTQKLToxMEU5NjAwMEU4NDE3ODk4NDQzNTEzRTk3OUY4OTY1REQ3NEI5MzkwNTAKLToxMEU5NzAwMDRFRDQ0RDc4OUY3RjhDRjc1RkFFOTc0MEJFRUM0ODU2RTMKLToxMEU5ODAwMDMzRjFCQzZDODJGNzYxOUU0RjUzMzcwOTUwN0U5OTc3MDMKLToxMEU5OTAwMDBCQ0Y3QkQ1NEMxMUYyNTNCREFEM0M5RkFGNkVDMkZDOEIKLToxMEU5QTAwMEY1REVFRDNDM0Y5QUVCQTMxRjc4OUYyNDc5NUU2QkY2NzIKLToxMEU5QjAwMDk3QTM3RkZBMTk5ODdGNjEzRUJFOTNDQUQzNzIwRDJFM0EKLToxMEU5QzAwMDdBRjk3M0Y4REQ4Q0VGQUFGMjM0QkVGQzA1QUREREJFM0EKLToxMEU5RDAwMDNFQ0E3RkE5OTVFRkVGQTNGRjk3QjQ3NkQxM0VEQTFGMjkKLToxMEU5RTAwMEQ0REFCNUY3RDFGRTkwRDZFRTcwMUZFNUFGNkFFNUFGODkKLToxMEU5RjAwMEY1RDFGRkJGNkJFRDNBRkE2OEZGQkFENkVFOEQzRURBN0QKLToxMEVBMDAwMDFGRDFEQTFERURBM0ZDMkRBREZDNTg1Q0ZGRUY2OEY1QkUKLToxMEVBMTAwMDNCQjVFRkJFRTQ4NkI3RDA1RUYzODFCQzQyNzk1MjkwM0QKLToxMEVBMjAwMERDNDBGRUFFQUQ1NUM1NDRGRkI1RTNCOUZFRDdFOUREMjgKLToxMEVBMzAwMEE3REQwQkU4RjBGMkI4RDIwRTJGQjc2Rjk2NkI3NDVFQkQKLToxMEVBNDAwMDcyNEZERUZBQzk0ODg3QkZFM0Y3MTQ0MTdGMUNDNTdCQ0MKLToxMEVBNTAwMEI4RUEzRDIyRjlGNzk2QkZDMkRGOTU1OTdFOEY0NEU3QTkKLToxMEVBNjAwMDFCM0EzREVBRURGNUY5ODdCNTc5RDY2OUU5NDIyRjdGODIKLToxMEVBNzAwMDJGMjM0N0Y1RjhBN0M3RTg0N0IzNkNDQ0RCODA5RjMwNUUKLToxMEVBODAwMEZFQkZDRUNERjU0Q0MxM0RBNTBENzg2RTUyMEI3QTA2N0EKLToxMEVBOTAwMEQ3NTdFRkI0NDREMUZGNTUyRjRCNTQ1RUU3MkUwREUxMEQKLToxMEVBQTAwMDc5QkYyQTRCQTQ4N0VBRERBOTUxN0NBRkI5QUVBRUQ4QjUKLToxMEVBQjAwMEYwREU2NzlEMkNEMUZCMzE5MjZCOEE2REI2MTNFNUM2RjMKLToxMEVBQzAwMDc0MTlFNTY3MUQ5MzUzNEJFODVDMERGNjY5QTg0RkFBQ0UKLToxMEVBRDAwMDRBNjU5NDNCMzkyRTc3MkFDQUU1NUJCM0Y5QkFEQTkzRDMKLToxMEVBRTAwMEJCRUM3ODhGNDJCQTVGQTRCNzAyODZDQjEyRjE3QjVFOTMKLToxMEVBRjAwMDlEMTg1NjYwMUVFREYyNzJGMkJGNkU2RkQ2Q0UxNDE5REQKLToxMEVCMDAwMDNGNEZENEU1RkM4RTlGNEQyNTNENTYwQjdBNEMyMTNENjEKLToxMEVCMTAwMEM2MDYxNUE1RjdEQ0RGOTQ4RThEQjJBMERFOTIzMzREQ0MKLToxMEVCMjAwMENDMEM3MkY5ODAzNzk1QzZEREZFMjBENzVCRjlBMEI3MTMKLToxMEVCMzAwMEYwOURCNTZEQzU4Q0JGRjNFNkIxOTE1RkI3NDI2MjlFQTMKLToxMEVCNDAwMEMxMzE3RUNDMDM1RTZFQzczM0QzNzQzRkVFQjNGM0YxQjUKLToxMEVCNTAwMDNEQzQxOEY4MEUwQjE5RjU1NkNFMDA3QTJCQkIwQUU0MEIKLToxMEVCNjAwMDY1NEM3REFCNDczNkU0OUZGMjZBRUZBREZBOTkxRkVEMzUKLToxMEVCNzAwMDlCQTlDRjZFMjY3RDcyMTZGNTA5NDNGREYyRUY0OUEzREUKLToxMEVCODAwMDUwQkY4MDFFQjFCMkRFNzI1MDk3QzdCQUREQTJDQkU5OEEKLToxMEVCOTAwMDVBNEQ2RkQ0QzZFOThEODFFNUVFREY1RjE5NDFGNDI5NDYKLToxMEVCQTAwMDFBREVBMUU5NEJGRTJFQzczODAxQTA0QjczNTAyMEJERTEKLToxMEVCQjAwMEMyQTQyMERERUYxRjA4NkU2NjczOTk4Q0Y2Rjg0MEYwNTIKLToxMEVCQzAwMDMzQTc3REVBNDIzOTZEMEU0QUZFRjcxMkRDOTMxQTA4MkMKLToxMEVCRDAwMEJFN0EzRDhCNkRFODE2RDQ2QjlGMUU1QjUxODA3RUFGNzUKLToxMEVCRTAwMDU1RTY4RTU5M0I5MTZFODU0MTc0QkY0M0QxRkMwRTVCNTcKLToxMEVCRjAwMEFCRjdCMTEzRjlGOEZCM0Q3RkQ5NUM4N0JGOEZDNTAyMzYKLToxMEVDMDAwMDMyRjk0QjMyNEExNTZDNjc4NzdERkE2MEIyRTNGODdFQzEKLToxMEVDMTAwMDkzQzlDMUQwNDJCNEU3NUZCNDI4NzgyRTcwRjgxOUVEREIKLToxMEVDMjAwMEZEMDZBRjkzRTA3OUU3RUVCQkE4OUQ1OUE4RjRGMEYzOTkKLToxMEVDMzAwMDdFNDZGMDVFOUQ5OTRBNzZCOUIyQzNBNkQ5OEQxRkFGQzQKLToxMEVDNDAwMDBGRTQ0MUJGNjJBNzgwRkFFN0Y3RDk1QkQ3REI1MDFGMUIKLToxMEVDNTAwMDY5RkIwMTk4RDlGNzcwRkYxMzA5NUJCNEZBNzhEMTlENkQKLToxMEVDNjAwMEIxRERGOEUzMzREQ0ZGMUM5MDNDQjE3NkE4RTk3QjUzQkUKLToxMEVDNzAwMEIyRjAzQzU0MUUyNTQxN0ZFRUFEOTZGNTY2MkY5NjhCODMKLToxMEVDODAwMDdBRkIwMDVFMUU0MkYxQTVFNzI1QzBDM0QzRUQ1QUI5NTkKLToxMEVDOTAwMEVBNUUzRjA1RTZCM0RCQTI4RjBGMDZGNTQ0MUM0RkQ0QjYKLToxMEVDQTAwMEU4Mjk3OTNERjZCRkFCNTQ2RjdGN0EzREZFM0UxN0NDMjUKLToxMEVDQjAwMEU3NUExM0VDQzE3MjdEOUVGNUNFOEM5RUY5N0FCMzdEMzYKLToxMEVDQzAwMEVCNkJBMEJGRDM0QTY3MEE2RUUzOTZCNEJFOTc4RTdBMDkKLToxMEVDRDAwMDdCNzUzOUJGM0Y4QzBDODBGRTExRkQxRUYxMDVCQ0VEMkMKLToxMEVDRTAwMEI5NDE0NTU3RUNERjBFRkQ2NzRBMjExNDJEMzM3NTFFREYKLToxMEVDRjAwMDcyMDBEQzk2RUNBQkI0OTk0NTdDQkZBQjRDQzVGN0JCNUUKLToxMEVEMDAwMEY0NzY0QkY2Q0MyMjNCNjdEOUZFMjI0QTEzQjQzQjhDRjcKLToxMEVEMTAwMEY3NjdGRTgxNzYzNkNCRDcxOEVGNzRGNEY1QTUzQjE1NkYKLToxMEVEMjAwMEJDMzc1M0Q5RTAzNDUxN0RDNkZENUY4OUQ3QTdCNzNGQzMKLToxMEVEMzAwMEJERjNGNTFGRTA3ODY3OTRDRUY0NkJBMEY2RUEyOEMwMjcKLToxMEVENDAwMDI1NDEzQkJEQkU3RUJGQkFEODEzMjhGMkMxRjc0RjMxNzMKLToxMEVENTAwMDYwMENFNTk2NTRFOUM3RkExMTVCODhFRUIxRDlDREExRjQKLToxMEVENjAwMDMyRDQyNzAwRkEzMEM2MjlFODY5QjEyRjhGOUZBM0M0OTcKLToxMEVENzAwMDdEOEZFN0FGODg4RDBEOUU4RUYyRjIyRTg5Q0VERDIzM0EKLToxMEVEODAwMDM2RDUzMTA2RjJDREIwNEZBOTgxMjlBRDJDM0EzMjE2RDUKLToxMEVEOTAwMEUzMDU5QUY3M0E0OUFFRDdERUQ1RUUyOTQ0QkVGMjVCRDkKLToxMEVEQTAwMDE4REFCRENEOTc3NjY0RTAzQkY4NzU3NzVCQ0ExRjQzRjAKLToxMEVEQjAwMEZBOEQyRUY3REMxRTYzODc3OUIzNzkxQ0I3RDcxNTJBMzUKLToxMEVEQzAwMDQ3N0VCNDAzM0ZBMjNFNkUzNDA3NkRGODZFOEE5QTIxRTcKLToxMEVERDAwMDUyNUNCNTFEQ0E1RkEzNzJBRjU2RUU5Rjc2MTVFRENCQTAKLToxMEVERTAwMDQ0MTlFNzU1OUYzNzY3NUEyOUVBMzU0RjJBRkYxREMyNTQKLToxMEVERjAwMEZDMjlFNUYzQTAzQzJDNUI2NDI0QUY0NUQ5MTUzNzIzRUYKLToxMEVFMDAwMDlDOUU5NkZDOTVDODdGNEYzQjlEMzJDNjYzODFBQzI0ODcKLToxMEVFMTAwMDdEMjBFNUJCMjkzRUNCQUFERDc3RjIxNjcxM0Q3RjQxMEYKLToxMEVFMjAwMEZGRjlCODFFQUJGM0YxMzhGQ0U2RTQ4RTFCNEFBMDVEOTcKLToxMEVFMzAwMEQyQkRBMkFDNDJGRjhENzczRjU0ODZGMTg5NUJFRTNFOTYKLToxMEVFNDAwMEYyMDc4QzZGNkQ0QTk3RTg5RDgxNUQzNUQxMDBENkVCNTYKLToxMEVFNTAwMDE2NTg0NzFCRkUyRTUyRDU4QzBFREM4RkFFNjU4QTgyNkIKLToxMEVFNjAwMEY2RkEyRTYxNDYwOEY1NzM3NzlBQzREQUEwN0U1MjlFQjAKLToxMEVFNzAwMDMxNUVENTU5Njg4Qzk3Q0E1QTZDQ0MzNzY2MDdFRkY2NjUKLToxMEVFODAwMDUxM0M1MDcxMDk4RTkzMjYyODBBM0UxRDVDRENDMTI4MzYKLToxMEVFOTAwMDNFM0YzRDJGNEZDNkI4RUU5NEUyQjgzOEQ4QzlDNjdFODMKLToxMEVFQTAwMDUyQTcxOENCREREM0UzRTJCNjZFMzI5NjdCNkUzMUU2MjUKLToxMEVFQjAwMDMzRTcxOEYzRUZFQkY0RThFMUU3MEZGQUVGM0Q2Q0I5NTUKLToxMEVFQzAwMEZCNzE4NjdBQkFGMThCNDExNENGOEE3MDQ0QkIzRDY5REQKLToxMEVFRDAwMEI4RTRDNzczMTFBRkE1NjMyNkM2QzFCMTkxNDk2NDJGQzkKLToxMEVFRTAwMDFERjQyNTMxMDVGMkQ2QTU4Q0U0QTkzNTM1NzIwMEY3NUQKLToxMEVFRjAwMEFCNTY1MTJFNTM0OTQzNDUwRUJDRURDNkRGRUIzMkQxMjQKLToxMEVGMDAwMEI5NkMzQ0ZDQkM1RUVFMUY3NDU2RjJERjg1OEI0ODUxMzkKLToxMEVGMTAwMEIyMjNFQ0Y3MEM5MjZCRkNCODc1OENGM0MzMkU4RUM5NDAKLToxMEVGMjAwMEYzNzhFRjJEM0VFRDFDQzVBM0M3QTkxMTVFNjE2NTg4N0UKLToxMEVGMzAwMEI3NDk4QzdFM0ZEMjdCRjc3QjZBMTRFNkIxNTZDOUFCRUEKLToxMEVGNDAwMDQ0M0I2M0I1RDg0OUUzQTgxNUNFMjBFRUJCRDMzMENFMDEKLToxMEVGNTAwMERCODRGMURFMkFBNUYxRjhEOEE5RDE5N0MyRTY4NDEwQTYKLToxMEVGNjAwMDhGOUU1OTIyQzU4RkQ0MUY0QUFBQzNDMzk3N0FFREJEN0QKLToxMEVGNzAwMDA2M0Q4RTREQTdDQkJEM0U2RTdGRUU2RTE3QzUwMEZBRTcKLToxMEVGODAwMEMxNkZDOTZCNDM3Q0VCRjk5NkEwQkI5NUUyRkE4QjJBNjMKLToxMEVGOTAwMDNCOTEyRUQ5NzVEQzBFMDUzRDQwRjdCMkY1MzgzMTNENzkKLToxMEVGQTAwMEFFQjAzMzlCRDNGNzA3RDlBMjIxMEU5Q0UyODg2MkUyNzAKLToxMEVGQjAwMEMwRTlFOENFODQ0NzE3MjExOUNGN0JCQzQ1NjUzMkNBMkEKLToxMEVGQzAwMDk5OUZFQkY3MkYxOEVGMTc5RjJGQTQ3MzgzRTk2MkUwNDcKLToxMEVGRDAwMDIyQ0Q5RjhFNzZERDYwNkRCQ0MxNkUyOTQwRUZCQkMzMzQKLToxMEVGRTAwMDlDNDRBOEZGMjBFM0Y1MDdFN0VENTk4MUY3QUU3NjIzQUYKLToxMEVGRjAwMEUxMjBGRkRDQ0VFMTFDNEZCNzE5RURBMUIyRDEwODJGMDMKLToxMEYwMDAwMDAxRjQ2MTU2NkYzQTE2N0MyRDc0MUU1ODdGMkY0QkI1NTQKLToxMEYwMTAwMDE2RjVBNkVCRjEyNjZFRkY3NDJGNTAyOENFNzIyMDNBMUIKLToxMEYwMjAwMDNGRTE3MzcxM0Y3NkRBMjYxOUVEREJDQ0JDMDc2QkU4NjQKLToxMEYwMzAwMDFFQ0NCRDRDNDY3RDk3RDlERTcxMDNGQUJERTJGOTIxQTUKLToxMEYwNDAwMEVDNDgxOUNCRTNFNEJFOTkxRkRFNjRFMkZDQzE4NjQ4QkMKLToxMEYwNTAwMDg0QjdGOEY4RDJGODc4NTI2RkI2NEIzQjg3MDIzRDkwRjAKLToxMEYwNjAwMDhDRjcwMUU0MkIzMDRFQjBGQjFFNDZFRjA0OTRCRUQ4NjMKLToxMEYwNzAwMDdDRjNCRjQxN0Y5RkU1NUI2NDk0RDdEOTZGMDQ5RjcwOTkKLToxMEYwODAwMEMwQkMzRUZCNDUzMDFCRTVGNDU2QTlEM0VFOEFGMTdCQUMKLToxMEYwOTAwMDRBMjJCRjdGRDY0QjVFNkJGNEExQTBERUYwRkNFM0E5NTEKLToxMEYwQTAwMDE3RTkxQjg4MkI5Mjk3M0U0QTQ2N0ZENUI2NzVCRkI3QTYKLToxMEYwQjAwMEE1RkQxRkRBMkRBQTM5ODQ3NjhCQUY1RENGNjc5MDFEMzEKLToxMEYwQzAwMDk2RkQwNkNGOEZERDlBQjE1RTk1MTA2RThCQzk1Rjc0ODkKLToxMEYwRDAwMEQwM0I5N0ZDNDVEMjVCREM1RjM0REExNDA4NjM5RUZEQkQKLToxMEYwRTAwMEM1NEU3MTc3M0JGNkRFMzIxRkUzRDVFQUQzQUZBMURGMjEKLToxMEYwRjAwMDNEMTk5M0NERjc5RDg1RDkzQTdGMUJENzJGNTkwMjQxRjIKLToxMEYxMDAwMEU0OUJGOEVGQzNCM0Y1RjNDNEIyMEY2NzAxRkU0NjNGQ0IKLToxMEYxMTAwMDZBQTFCOEJCMDJCMUEyMjEwN0Y5QTFEMTQ0RjhBQzMwNzEKLToxMEYxMjAwMDI5NEJEN0M0RUNEM0VBRDM0QjI2NjdBN0QxQkU4MDA1QzEKLToxMEYxMzAwMDYxQzNBMDlDMTc1ODEwOThDREU3M0U1RTgyRjQ5QTBERUIKLToxMEYxNDAwMDZDODZGMjI1NUJFNTA2NjQ3NjU1MTIwQkM2RDBBOTcyNzMKLToxMEYxNTAwMDVFQTJGQUY1RTk4MUM5RDk5QURDQzM3MzFGQjNDNkQyOUUKLToxMEYxNjAwMDRGQTc5NkIxNTlBODk3RTExQkVBNURGM0NFMjQ3RURFNDYKLToxMEYxNzAwMEUzMzZERThGMzQ5OTc4QkNDOEQ1REFCQUNENzhBRTMzQjEKLToxMEYxODAwMDE2REY3QjEzQTNENjMxQkRFQjVGQUZDMTQ5QjIzOUEzMDQKLToxMEYxOTAwMEE2NDFFODI3N0JFRDI4RERCQjhDM0IwN0M2RkQyREM1Q0UKLToxMEYxQTAwMEU1MkM2NkU0MDc0NUI4NTBGRTRFOTlCRkRCNURDNUUzMkMKLToxMEYxQjAwMDAxNkFFRjYzMDI5RTA1RDQ2QUY3NTRENDVCRjlFRjBFM0YKLToxMEYxQzAwMEIzNDA0MEMxRjc1NTY4OEJBOUUwRkZBMkM0QkYxRTFCMjYKLToxMEYxRDAwMDRCQzVGQTE5QUM4M0UyMTg1OTNCNTM3OEJDODRGMURDNzcKLToxMEYxRTAwMDY5NkIxRkVGNDBFOTdFMDBBOUNBNDRGQjk0NTEyRkRCRjUKLToxMEYxRjAwMEY5RUY0MzU1MzE3QTI3OUNERTZDQzJGREVGN0QyQzJDNTQKLToxMEYyMDAwMDA5M0Q3RUI4MEVBRjQyRURGNEYzRDg1RDVGQkU0M0JGNUIKLToxMEYyMTAwMEM3NUMyMEI2MDU1RjIzQkIyMTU5NkU0M0ZEOTg2NEU0QUIKLToxMEYyMjAwMDQzRkRGRURBRkQxQTFGRTJFRjQ5MDc2M0NFOEY3Q0VBNDkKLToxMEYyMzAwMDcxOEFCN0NGNjZERDM1QjhDRkNBQUU0QTM1RTBGOTgyRkMKLToxMEYyNDAwMDVGRjZGQzUwMTYxQzE3REI2Rjk4RjM3NTlFNDRFRjc0NDUKLToxMEYyNTAwMDI5RTc3RDU0QkVCNTVBMTlBMEZGREMzRUZBQ0YyMDdBQ0IKLToxMEYyNjAwMEVBQkJGRjJDMkFERjE2RkRENDc1M0Q4MDYyNkJGNzdCNkQKLToxMEYyNzAwMEFFMzJBNUM3NkU4RDg3QjNFRjNFQTNGQ0ZFQ0VCRUY4QkYKLToxMEYyODAwMDc4NzIwRTE3QkIzOUUwQkUwMUUwNjZCRjVGRjRCNzMyOUIKLToxMEYyOTAwMEZDREQxQjYzQkQ2OTM5RTc1Q0ZDQkM1Q0FGMUY3NURGM0YKLToxMEYyQTAwMDg4RjU2MURGREJBQUUwRUZFODE4RUI5Nzk1QkNFRkUyQTkKLToxMEYyQjAwMEU3RUU3QTdEM0VCRkNCQ0YxQkVCQzVFMzI3N0VCRTMwQUEKLToxMEYyQzAwMEFGQjRFRkM3Q0NFQjBBOUJENTUwNUUzRUFCRDdCQ0QyRjgKLToxMEYyRDAwMDdFMTgzM0FGQUIzQ0M2RkFDMTlBQzRGM0JBQjZDMERBRjMKLToxMEYyRTAwMEVGQkNGNDdBREY5QkY4RjVFQUM1QUZFM0M2NjlENjNFMUEKLToxMEYyRjAwMEUwQ0VFQkZGQjBGQ0VCRjVGQkEzRjlGREQ3QkJBRDJBRUQKLToxMEYzMDAwMDdFMUM5NUU0MDlDOENEMEU5NDRGMTU0QzU5ODVFRjg0QTkKLToxMEYzMTAwMDMzNjc1MkMyQjhFMEM5MUE3RjlDNDIzRjA1OUU5MzBFRTQKLToxMEYzMjAwMDBEQkM4OUYyRjFBNDk3QzdGRDFFN0U2NjYxMDhDRjYxMEUKLToxMEYzMzAwMDk2RUZCNTI4NzhERUUxRDVGQ0Q2MjA3ODE2MjFGRkVFRDEKLToxMEYzNDAwMEI2QzkyRThDMDcxNDdEOEE3NjNGQUEyMzA3RTNGOTc2ODcKLToxMEYzNTAwMEVGMzg3MjMzQzkzRDY2QjQ2NzYwQkY1NjgyRkExQTQ0MEIKLToxMEYzNjAwMDE4RERDQjc4MEREQkE1QzVDNjUxMDRDOEZFQUIxN0ZENzMKLToxMEYzNzAwMDdGQTQ3REQ1MEZGOEJFNEE4RkRGOEZCNUIzRDg4NDFFMkEKLToxMEYzODAwMDNCNEI4RkRGREVBMDhENzMzRTlCRkIwM0MxQ0U1NzA1NDkKLToxMEYzOTAwMEIyRjMyNThBNkZGRUI5QUQ2MzAzREUzRkZBQjlEQkVENDgKLToxMEYzQTAwMEMyRkRDQzQxNkRERUJBRERBOERGNkIxODMyMkJBRkM4RDEKLToxMEYzQjAwMDk0MDA1RTE3RjQ0ODUyQ0Y3RDA5OENBMzc0RTVFNUQxMjMKLToxMEYzQzAwMEJCMTg2OEU3OEQyREM0N0UzOTVDRkYwN0NBODlBNzU2MzQKLToxMEYzRDAwMDAwODAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwRkIKLToxMEYzRTAwMDAwMEJERDdEMEI3QzE0RDVCOUY4OTk5REQ5NTdCMkJCQzQKLToxMEYzRjAwMDk5MEQ0QjFFM0NDMjZFREU4MTAwMTMwODMxQTA5NTI1OEQKLToxMEY0MDAwMDQ0OEM5NkQyMEQzRTBBREFFMjkyRjA5NEJDMDBBREYxNDMKLToxMEY0MTAwMENBQUQxMzEyMTExMDM1NkE0NEEwODAwQjhBNjJBRjY4MUUKLToxMEY0MjAwMEU4NDUwRDA4REUxMDM1QjVCN0Q4ODZCNkI2RDY3QUY5RjgKLToxMEY0MzAwMEFGQzA0NTJBMDg2QjFGRUFGRDE3Q0JGRkZCQkUzMzkzMTUKLToxMEY0NDAwMEVDNEU3NjU1QUFCN0Y3RkVGRUYxODdCMzY3Q0VDQzc5QkUKLToxMEY0NTAwMDdDRTc3QjdGREYzOTczQUY4OTMxNTZDQTk4OUEyRjg1NTUKLToxMEY0NjAwMDc2MDlGMDVCNjY2QzREMTk2MzZFRjhDOUIyMTk3QjQ0N0UKLToxMEY0NzAwMEVFNzM0QjUwRkY4ODQ3OTI1NUE4RUZDOUYyMzIzNjg5OTgKLToxMEY0ODAwMEIxQkRBRjk5NEM3RTBGNjM4RjdEMzc3N0E3RTgxQjI4RkUKLToxMEY0OTAwMDZGMEE3QTc2NjA3OUE0ODkwNTNCMUREODg4QkM4Q0MxMzcKLToxMEY0QTAwMEZEQkQzNkQ5QkRCRTA0OEE1MjlGQUZEQTA5RTVEREJGODYKLToxMEY0QjAwMEI5NDk3MDMxOTYzOThBNTE3QkI1Q0REM0Q5ODk4OThDQjgKLToxMEY0QzAwMEJENjg4OUJDN0ExMUM3QjM1MTA4RUQ4Mjc2NUVFQTI4MUYKLToxMEY0RDAwMDk5MjFDMUZCMEI0RjMzNjY4NzQ3NkJFRkJDRUU5MTkzQ0QKLToxMEY0RTAwMDQzMTg5QjdDNTI5RTg2Rjc2QkI3QkExNTExRUUzN0Y0MjIKLToxMEY0RjAwMDM1Q0RDMDdFNTgxMzUzRjIxNEM2RDJDNTY5QTIxM0RBQjMKLToxMEY1MDAwMDQ5QkZFRkE4RDIwQTQzN0VCNEM3REIxNTg2NzI2NDg3NzEKLToxMEY1MTAwMEEwRUNGNDYyRkRGMjkyRTVDNUYwQkNDM0VGNzVDMDdDQ0YKLToxMEY1MjAwMEU3RTM1MEU5QkU3Qjg2MTlERkJCQ0VBMkI0NDEzQjY3NUYKLToxMEY1MzAwMENENkM0RTI3M0M3NzExRkZBNjBFNUNFNzdGRDc1QkNFRTQKLToxMEY1NDAwMDYwRkNGMzNCRUY5QzRGRkRDQTAwQjI0QzI4REI2NDFBMTEKLToxMEY1NTAwMDg3Q0QyQkE3QjY0MDM5M0Q4OUQ5RUMxMzE4MkI1QjJERUQKLToxMEY1NjAwMEY3REU4NUZEMkY3NUNBM0IwMUM2QUU3MkI5Rjc4NzM4NDUKLToxMEY1NzAwMEFGQTYyQzU5NTRCMEYzMTBDMTQxNkY3RkExM0Y2MDYxMTkKLToxMEY1ODAwMEQwRUY5OEREMTY2ODhDRDFERjQ1RjgzN0I2MzNCNjNDM0UKLToxMEY1OTAwMEJFMkJCNjVDRDIxRDVCOUVGODQ2NkNGOTc5OTgyMzFCOTYKLToxMEY1QTAwMENBRDgxNERCRjA2RDI3MDFERTNEODdBQzBDQzdCQkVDN0QKLToxMEY1QjAwMDRDNTJDODBBRjAzRTYwNjYwQ0U3QUZFRUIxMTIzRTRDMEEKLToxMEY1QzAwMDVGRTZGMDIzN0U5Q0Y5MjA2OTg3MTVDQTg3REY0OUEyOTAKLToxMEY1RDAwMEU3NkZGRDE3M0I3RkRFRDRGOTFDOTZENUU3OTIxOTNFMDUKLToxMEY1RTAwMEJGNkM0ODY3NTkyQThDRkJFNUNGQzQ1QjAyQzU3QzVBQzcKLToxMEY1RjAwMDY2NkNGRkI5QTIxREVCQjE3RTYyNjc5OTBDRjc1RjFDQzgKLToxMEY2MDAwMENENTgxRkQ2NEJBMTcxMzhDRjE3RkYyNjUyQkI5MTY3M0IKLToxMEY2MTAwMEFDQTE5REQwRUU5OUZENEYzRjg3RjAzQUYzQ0NGMDU0NkEKLToxMEY2MjAwMDAxQzY3Q0I5NjlFN0M0RjU1OERGRTJGNEVFODRGQjUzMDgKLToxMEY2MzAwMENFM0M5QjEzOEM1QTk3NjVCQkFEMzFGMzVDRTYxNTY4RTUKLToxMEY2NDAwMDlFQ0Q5MjdGRjUxM0I4M0U0N0NDODQ0RjJCMTc4NjZBMjgKLToxMEY2NTAwMEJCRTFGRDk1NDI5NkEyNjIzQjE2QzBEMzYyMkMyQkU5MUEKLToxMEY2NjAwMDZFQzBENzI5MkU4RUI3MkJFRDUwOEVCM0VFRkFCNTY2NEQKLToxMEY2NzAwMDkzQzg4MjEzMDdDQUM3RDczRDRERTMyOTNDRkQzNkUxNDUKLToxMEY2ODAwMEY1MDFCMzZBNEE0MjM4QUUxMzk0NUQzMEZFMDM3NkQ3NzMKLToxMEY2OTAwMDM4OTY4MkQ3QUMxMEUyQ0QzRjc5NEQzNDNFOThENzBGRTMKLToxMEY2QTAwMDFCMTAyRkRFMTQ5NTlEMkM3MTdGODUxOUJGREY1QTM5RjEKLToxMEY2QjAwMEYxNzNFQUExNUZERjM4QzZDRUZGMjFFOTE2M0Y4Q0EzQzQKLToxMEY2QzAwMDYwNTNFQ0JBMTc4NTYyQ0JBQjExM0U4MDZGMzUyQ0VBRTQKLToxMEY2RDAwMEJFMEZDNzkzQkQyNjgzRTg4NEQxNzgwQTRGQkY3QjkzQzIKLToxMEY2RTAwMDBGQzYzQkNDQ0E5QTEwMkVDNjdFRUZDMzc5NDAzQjNGNzMKLToxMEY2RjAwMEZBMTFCNDUzNDhDRDg4MTc0NURFOUUzNzBERDY0MUEzODUKLToxMEY3MDAwMEFCOTcwNTRFNDdGMDc3REI3MEEwQjc2NTAyRTcyRkZBOUQKLToxMEY3MTAwMEZENjU4NjcxRThFRDk3NkE3MEYyNTg5NDA3QzNCNEZFRjAKLToxMEY3MjAwMDU2MTlEN0ZGODNCQkFCMUUzOTY5MUUzQzlFNTM3N0ZCMkUKLToxMEY3MzAwMEZEOTU1MUY3MTc2RDVBREU5QjA5RUZENUVEMUQzQTQxNDYKLToxMEY3NDAwMDhDODI2RkREMzNBRkE2REQwQ0Y3Q0ZFRTk2MTQ2NDgxQUIKLToxMEY3NTAwMDc1NzM5RjdBNjAwQTNFRjc4Q0Q4ODlFM0M1N0EzRkNDRUYKLToxMEY3NjAwMEY3NkNFN0VCMkU3QzZFRDE1NkY3MDREMTNCRjBGRUUyNEUKLToxMEY3NzAwMDRENTdGOTJCMEIwN0UwNzlBOTc0RkE1MjM5RTc3M0NCOEYKLToxMEY3ODAwMDNBQ0QyMTFCRDI0NUU3NUIzMzg2MjM5RTZFMTI5NDNDMTMKLToxMEY3OTAwMEU4QTc0QzBBOEE0ODc3Q0U1MkJGNTk5RENDRDhENDBCRTMKLToxMEY3QTAwMEZGRDYzQjBDRUExQjBGNEQyQTVCMEZGNUVCNEQ4MUVCQUYKLToxMEY3QjAwMEJFODU3NEI3NUQ1NDc2QzE2QjJGRkM3QTQ1NUEzMDZBQUEKLToxMEY3QzAwMDdEN0EzNEZDNUY3RjYzMURCNUEzMDI2RUU0MDE1M0VGQzUKLToxMEY3RDAwMDI5QUM5OThFRTUyOUM1NENCMDAyM0Y3NjlENjZGRTkwMTYKLToxMEY3RTAwMDAzRkI2MzZGOUI1MjE5M0I3REYwOUU3MTkyODlGOEQxQTgKLToxMEY3RjAwMENENDgyNzY3OTg0QjQxQkEzQkUwNkNGQTE1RjVCN0M3N0YKLToxMEY4MDAwMDRDRkQ0REVENEUxMTkwRkYxRTc4NTI1MEQ2MzM4NDQ3N0IKLToxMEY4MTAwMDJDRkQ5RDNFQkREQTM1OEREM0Y1MkQwMTkyMDMyNkU2RjQKLToxMEY4MjAwMDgxRjY5NjNDMzE5NkY4ODA3RURGQjg3RTRCNDMwNjNBRUYKLToxMEY4MzAwMDM2RTBDNTA5NkQ1RTg4OUFEMUY4NjU3QzZFQzg0Q0Q1RjYKLToxMEY4NDAwMDgyRjQ1OEQ3MENGMjIyOEE2RUVBNEVCNjVCOTg2MzcwNDcKLToxMEY4NTAwMDNGOENGNUUzMkY0M0ZDMDVCQzY0NUU5QUFGOURGODA2MzAKLToxMEY4NjAwMEZDMDkzNkMwREIwRkYwNTcwRTJGMzNFOEZGNTY4MUE2OTgKLToxMEY4NzAwMEM2OTY4REVFQ0M0NzNFMjc0ODcyNDU1QkU2MDA3RjY1MTUKLToxMEY4ODAwMEU1MjFFMkYzNjdFMUU3N0EwNUY5NDJFNzMxQTQ3Nzk0RUQKLToxMEY4OTAwMEE1QkI1MEJFQzhEREU3QjY2MEJEM0FDQThGRkM2ODE4OEMKLToxMEY4QTAwMDIyMjk1Q0Q5RjNDOUM0N0ZDRjdBQzM0RkQxRkJDRjhFNTUKLToxMEY4QjAwMDU1NTRCODdEMUVFOUM1NDFFRkI5NTJBM0Y4NTM0QkU3NDMKLToxMEY4QzAwMEFCQUUzMDk0Q0ZFQzFENTIyMUJBMTA2RjdGRTZDMjc5RjcKLToxMEY4RDAwMDdFRDAzOUE0QzJFMjRBQ0MzNzhDN0MxMzQ2NDZGMDdERjgKLToxMEY4RTAwMDBGN0YwMkRFMjVGOUZDNjYxRkMyQkIwRDg0MkVDQUIzNTIKLToxMEY4RjAwMDIxNEQyNTRENzFENjREN0ZDRjYzNjkyQUYxMjJGRkY4NDYKLToxMEY5MDAwMDlFNDM0MTNFOUU2QUFCN0QxQ0U1MzVGRUY5RTFGRTFGM0MKLToxMEY5MTAwMERGMThCMjEzRDdGRjYxNERBRUNFMTc3ODNGN0EzQjQzNjUKLToxMEY5MjAwMDdEOUM5RkJDNzEzODNGMjUwQ0ZERkM5MTc5NTM1MDVFNDYKLToxMEY5MzAwMEVDQzkwOTY0RjhFMDdFNDY0NTlGNUYwNDc4NjQ1Q0NCQkYKLToxMEY5NDAwMDk0NTY3OEY1ODRBODdDNUY4NkY1NThDMDQwNUVFMkI1OTEKLToxMEY5NTAwMDM0Njg0MUJFQzJEQTg2RDI3ODE5NTM2NjIwM0MxN0NGOEMKLToxMEY5NjAwMDA0Rjg5N0YwMzJDQUI3QTUwMThCQjIxRUU0NzBBREM0OUIKLToxMEY5NzAwMEUxNURCQjVCMDhCNUMyNTgxNjZDODg4NUM3QTIwRUVCNkIKLToxMEY5ODAwMDAwNUVFMEZGQjY0NkQ1NDMzRjRCQTVEMDFBOTQ1QjIzRkIKLToxMEY5OTAwMDQwRjMxODUyMEVGOEYwNjRFQ0YzQ0I1ODM3OERBQkVFMTEKLToxMEY5QTAwMEQ5OEJENjc4NzBGRThCMDZFNzNEMzlGRTA5MzgzRjYxNkEKLToxMEY5QjAwMEI2OERDNkIzNzI4RjQwRjJENTYzRTkyNDdEMjJCMjFDQTYKLToxMEY5QzAwMEY4MzE4Qzk3RkQ5QUFGQzM0RDlBQkVENDc4RTc3Q0ZGOEYKLToxMEY5RDAwMDAyQjg5RTZGQUVGNTJGODAyQTIyMzVFNDIzMUQyOTg0QkMKLToxMEY5RTAwMDNGQ0IyQTNCN0I4OUFGMzBGOUM3Mzc2NzYwN0JDQzJGOTEKLToxMEY5RjAwMDYzNzlBMzkzRUI3QkVDQzk1NzkxQUZGQzg1Qzk5RDg4RDQKLToxMEZBMDAwMDg3NTM5NjA4RjRGRTk0NUY4QjNCMDFDM0Q5NERGREVCMDEKLToxMEZBMTAwMDE3MjAzOEQ2Nzk5OThDNzA3Q0M3MUNBMDc5QUI0Qjk5OEMKLToxMEZBMjAwMEJDMEJGODRBOUQyREEwRUI1RkYyRDUzMDlGNDVBQzg5MDkKLToxMEZBMzAwMEU2NURFRENCQTY3OTJFNjFFRDU0QUU2NzYxMEIxMzcxRDcKLToxMEZBNDAwMDdEQ0I1MjEwNUZGRkM0MTQ1QTVGRDA5Mzk4M0Q3NTMwNDAKLToxMEZBNTAwMDVFMjFGQ0ZENTE3MDVCQjIzNUI2Q0M5RThDMkE2NzIzQ0IKLToxMEZBNjAwMDlDQTExQzA1RkY4NjdEMTdBREZFMzg3MDdGQjQ1RjFFMUMKLToxMEZBNzAwMDg1OEFBQUM3NDZFMzcxMEJFMURGMzE2RDVEMUVCRDYxNkEKLToxMEZBODAwMDUxMjZGMjkxMDc1MTIxMUVBNjM1NTA4RUZDMTc3RTRENEUKLToxMEZBOTAwMEExNzJCNzBEREE0RjlBRDg1RkE2RkFCMkQ1QkNEQ0IwMjYKLToxMEZBQTAwMEUzQzVDMEE2MkIwMERDRTY2MEE2MEM4QjUzMkIwNjdBQzAKLToxMEZBQjAwMDREMDBENzM5QjlDMTE1NDg1N0I1MjY3Rjk2NDRGQ0M0QzcKLToxMEZBQzAwMDlGMUY4MDcxQjA2NkJFQkU4RjRENjgyQTZBOEFBMzdGNzEKLToxMEZBRDAwMEU4RTNERjI4NzQ3NjlCOTA4RkVDRTdGQTg1QjMzNDYyMTUKLToxMEZBRTAwMDhFRTZGRjFCN0M1Q0JFQTdGNDg0NjlGRDIzMkYwODBDMDcKLToxMEZBRjAwMEY1REVDREMyNDM5OUI4OEU5QjMzQkQ0MjJCQ0NBOTc0QTEKLToxMEZCMDAwMDVGQ0IzNEUyMzdDMDhCRjI2MDVERUJGN0JERDczQjFDQjcKLToxMEZCMTAwMENBQTU1NTdEQjg0QzMwRUZDMEYyRDc5MTlFMjcyNTcxMEMKLToxMEZCMjAwMEJEMzlCOTY5ODcwOURBNEJCRkE1NzA0MjJCRTBFNzQzQkQKLToxMEZCMzAwMDNFMkZGNTkzMzRCMUZEMzBCNjEzNTlFRTk1Nzc0MjNCMjUKLToxMEZCNDAwMDE5QUI1NURGOEE2MkVDQkZBOTg1RjBCNzlBRDFGREExNDgKLToxMEZCNTAwMERGNTlENTgyQ0ZERDM3OENBNThBRjgxQzZCMTFGMEI5M0YKLToxMEZCNjAwMDM1NDMwNTVBOEYzNUYzRDk5QzFGQzM1NTYyMzJFOTlENDEKLToxMEZCNzAwMDIzRTZDODQyQ0I2NDJDMzc0RDIzRkNGMkNBRUU5RjY1QzYKLToxMEZCODAwMDYyOTlCNUE1ODA1RUZEQTg4QjkxOUUzOUQ0MjRERTUyODIKLToxMEZCOTAwMDBERDc0NzI3RjA3MkVBMkFDMUJGOTM4OEUxMjE4MjU3MjcKLToxMEZCQTAwMEJBOTU1NTA5QTlGQzdFQTg5ODQ4RDhCRjk3RUE0MzM0NkUKLToxMEZCQjAwMEZFRjRFOTREMjUzODhFRjQxQzdFRjU1ODgyQTY1Q0U4RUIKLToxMEZCQzAwMEZGQzg1MTczNjgzNUNDRjM4ODg2MkZCN0VEQTg0ODhGRUUKLToxMEZCRDAwMEU2QkI0N0NFREEyNDEzRTg3NTQ3MzI3NDdEQjZEQjgxODUKLToxMEZCRTAwMEZBRUM2RDI1RDNEMzkxMThCMzczQUI1MjcwNUQzRDU5QzgKLToxMEZCRjAwMEIxRjVFN0NERkU5NDg5NDgzRjQ3NDU4NkVCRjc2Nzg3MjcKLToxMEZDMDAwMDNGMDVGNUNGQ0IyRDdDRkNDNjc1M0ZBQ0FENjdFM0E3QjgKLToxMEZDMTAwMDAyMEI0NUM5QjNDNjM5MUY5MzlERDBGOEE5MTQ3M0ZGRDEKLToxMEZDMjAwMEVDREQzNjg2MjJBRTVGRUUyREU5OTk4MUNGRDVCM0JFRUQKLToxMEZDMzAwMDM1ODg4N0Y1OURDOTJDMTQ0NTE3OTcyN0M1RUY1N0E3MTkKLToxMEZDNDAwMDg3QzY0RjQ1QTZDNkVERDcxMjdCRkZEMzIxNEMxRDEyQTgKLToxMEZDNTAwMEVGQjlCNEQ4RkIzMDhGOTg3MkQ3MjdGREYzQzBGQkFDNTcKLToxMEZDNjAwMDNDRUMwQTgwOUQzODEzRTUyODk0Q0Y4NzRDQUE3OTNDNTgKLToxMEZDNzAwMEFBRjE1Q0ZFOUQ5M0MzMkVENENGNDE1RTM2RTFCQTlDQkYKLToxMEZDODAwMEYzODY0OTFFOUU2N0FDMEFFQjJGMzc5OTZFQTlDNkY1MUQKLToxMEZDOTAwMDk1MjJBRUQ5Q0U4MTdFRjQ3QTdDM0Y3QTFEQ0ZDREIxNEMKLToxMEZDQTAwMEIwNkU1QTlGMDg4RDAzRTFBNzE2MzBCNkU1RTA0NzE2RkYKLToxMEZDQjAwMDJGRUExMTA3MEYxM0ZDNzQ3Qzg5ODZBMzFBQzU2RkQyMzMKLToxMEZDQzAwMDVBRkJCQTRENDA1NzE3N0M5RkI1MTc4M0MxM0FCNDQ3Q0EKLToxMEZDRDAwMEU3MEIxN0RCRkQyMDI0RDI0NDUzMEM5RjQ4MkVFREU3QTEKLToxMEZDRTAwMDFCQzRBNjFFMzU4OTNBOUY3OUE4NzI0NDRDOTk5RTFGNjEKLToxMEZDRjAwMDc4NUZBOEFFMDRCRTUyNUFDQ0RGQjc2NDlCOEVBRTQ2ODYKLToxMEZEMDAwMDU5QzZEQTY5N0MzMDhGMkM4NDVGN0ZEOTY2MjgzQkEwODYKLToxMEZEMTAwMDNDMzZBQTJDMUJFQTNEODZGQTBDNDM3OTA0N0ZGRUFDRTQKLToxMEZEMjAwMEIzM0IwQkVENTc3N0I2QTU1QTAyM0EzRDlCRDkzRDRGRjEKLToxMEZEMzAwMDgwRjI4NjU2NUI3NTI1OTRFQjRCQjlCQzZFMzgyODI4NEIKLToxMEZENDAwMDI0NkUzNEY4MzUyODVDRUY3NDI4NjE0QjZEMzFDMkExMDQKLToxMEZENTAwMEFGMTdGOTRBNUQ5NzIwMEI0MDBGOEVDRUJEREQ1NEM2MUMKLToxMEZENjAwMEY3QkM1MUVGNzUwQUY0NUU1REU3N0JGNDVFQzJGNjBCRkIKLToxMEZENzAwMDRENDRFN0VCMEI4RkYzRTczQURGMjdCREUwREVCNkU1NTYKLToxMEZEODAwMDAxNjQ2Q0JENjYyRkYxMDVCMEUyRkNDM0UxQzU4NkFFMkYKLToxMEZEOTAwMDZBMTY3NDBDRjBENzczOTlGRTU3ODlCRjFFMTI2NEE0QkIKLToxMEZEQTAwMENGN0UzQ0M1NzYxRDAzNzRBMTNGRkZGQkIxMDdERjQyNDgKLToxMEZEQjAwMEI1MjNGOUI2OEY1QTI0NzhGRTNGRUFERjlGODQ3QUUxQjMKLToxMEZEQzAwMEVGMzUzOUIyNTEwODE1NjFCRjVCNThCMDA4RTVFMEY3NkYKLToxMEZERDAwMEVBRjMwRTlCRTBCOTYzRTZGMDM2RTRCREQ1RDk1OUQ1MTgKLToxMEZERTAwMDEyRjBCNTYzQ0VGMDQ4MDFFNEZDNzVEOTQ1QkMzQzM0NTMKLToxMEZERjAwMEJDMERFMUY5MkZEOUEzMDlCRUM3NDY4NjQ3OUFBMEZDREUKLToxMEZFMDAwMDlEOUQzN0YwNzI1RTc4MUI5NkQ1OUQ3RUZFRkNEOEYwRTYKLToxMEZFMTAwMDQ4MTFERUNGNTFBNzU1NTc0Mjc5OTcxQzlGQUVBRkNFMDAKLToxMEZFMjAwMEU2N0FCNDNFQkVERjRGRjQ1NzY0QTM5RTU3QzdFNUNGRDIKLToxMEZFMzAwMEJDNUJERjk5OEJGQzc2OUU4OUM5MENGOEY0QUVCMzI3QzYKLToxMEZFNDAwMEY2RUMwMjc4RUM2QTRFNjYzQjM5M0EwNjI0RDA4N0QzNEEKLToxMEZFNTAwMDM5RUE4MzlDNjgyN0JFMUVGMTAxOUYyN0U3NTE1RjU4NEUKLToxMEZFNjAwMDgwNzJGMjI0OUI3N0JENkY2MDVERjRGRUQzNDczN0VENUYKLToxMEZFNzAwMEM1RjZEM0U3MTU5MzFDMTE3REZFNjdCMTdGRkRGQTc2QjkKLToxMEZFODAwMDExNUNFMUY5NjdCMzY1Q0VCRjQ1OTM5RjlFQkZDQjE5NjcKLToxMEZFOTAwMEMyRTcxRkI0RjM3OTAxRkREMDNBM0JCNDc1Rjk1RTM2ODEKLToxMEZFQTAwMEU3OTNERkNCRTY3QUE0RTJCQjhBREFCQjQ5RDdDN0Q3QjAKLToxMEZFQjAwMDc2MEUxRDBERTNFQTEwNTgyN0RBMzVFRjk4OTk2QTI3NzgKLToxMEZFQzAwMDNEMjY4OUY0QTEwRTFDM0JENjNGOTQxOTUyQTE5RjlCNUQKLToxMEZFRDAwMDA1MTY0MEZFQTJGMzkzMEVCNzNGMzMzNUNBQUVFOTI4QUMKLToxMEZFRTAwMDgxQjI2M0MwOEVFREE4RjY2NzI2NzlGMDlBNjY0MjFENEUKLToxMEZFRjAwMDVGRTc0RjFEM0VGRTlFMkU5RkQyNUI3OTNGRTkwRjE2QjYKLToxMEZGMDAwMEVEQzRGOTI0NEI4Q0U0RERDMjM5RjkzQjVCNDgzRjk4RTIKLToxMEZGMTAwMDRERjM2NzdFN0ZBNjAwRUQ5RDVDOUE2RDQyMzhFQUVCNUIKLToxMEZGMjAwMDc1NjFBMkJGOTlFNjI1NzJCQjVDNUYzNzFEQkVDRjY2QzcKLToxMEZGMzAwMDczQkJCOTU2MDRGRDAyRjA0RUM5MEQ1MjdCQTA2RjhDMDUKLToxMEZGNDAwMDIzQzFBRUU5MUJDRjIyRDI0NkMxOTk0OUUxNDk3OEZGQ0UKLToxMEZGNTAwMEZGNDM3ODZEQzdGQUFGMEFBRkZBNjZFMDIzQTYyRkMxNTgKLToxMEZGNjAwMDQ3MzQzODZFMTRCQUNERTk5QzhGOTBERDhDRjc1MTFFNjIKLToxMEZGNzAwMERERTEwQkZFMzgzQjhBMUVFNkRENTU0RjdBQTYzRUFFMkMKLToxMEZGODAwMEU0M0I1RUFBRkEwRTQzM0FGQzgwRTg2RURFM0YyNTkzMUUKLToxMEZGOTAwMDlENkJENDAzNzVGQjRBRDc1NzFGNEVFMEFGRUNENkU2RjYKLToxMEZGQTAwMEE3RTg3RTU5NkQxQ0M5QzVFMTNERjcwM0JDNTI5OTUzQzIKLToxMEZGQjAwMDQ2M0U3QUNDMTIxRUFCQzBGQkM3NENDMTI3NUVDMjcxNTUKLToxMEZGQzAwMDBGMTM2NUUwMjE4M0RBNkJDRTExQTkzREJCOEUyNzJDODAKLToxMEZGRDAwMEUyMUFFRDE5QzA5Mzc1ODAyNzM2N0NCRkRBNDJGNjczQkEKLToxMEZGRTAwMDg3M0JCNDc5MTFFMkM5MEQyMzE0RDU0QjcyOThFODU5QjcKLToxMEZGRjAwMDZENEVBNkZBQ0I0REM3MTlGQTk5MjM5MzY1MTlGNTRDQTYKLTowMjAwMDAwMjMwMDBDQwotOjEwMDAwMDAwQzAyQkFBRUY5ODlCMUY1MkI5QkY0MEI1OTNGRjM0Mjk2QwotOjEwMDAxMDAwQjQxM0YxQUUwNDAwODBFRENEMUQ0REY1NjhBRjkzOUY5NAotOjEwMDAyMDAwNjNBRThERjczNzE4QUZCODVENURDMDc4QkQ0RkMzREJFOQotOjEwMDAzMDAwQTVEOTg0Qjc2OUFEOENGQjI5MjRGRkI4RUEyODdENjE3NgotOjEwMDA0MDAwNEMwRUU3MjNDOUE1RTExNzdFOEJGQUU3MDZCQjkyQzdFMgotOjEwMDA1MDAwQjgwOTg4RkUwRkQ2OUU0RUVEMDFCRTdDNDhGOEM3MzgyMQotOjEwMDA2MDAwNUUyRTc4QzBCOTgzRjMzREE1MENFMTdDQUZCMzlEREQ3NgotOjEwMDA3MDAwNDlGRTJCMzM4RDdGQUJCRDlCRjQ3MDkzQ0RFQjQ2M0Y5OAotOjEwMDA4MDAwRjEzQzkxNkRDQ0M3RjY1QUNEMzJFMjg5MTFERTI5MzlBNwotOjEwMDA5MDAwOUNBRjBERjY2Nzg2NkY4RkY2NjdDRUIzQUFENjJDQUNGMQotOjEwMDBBMDAwQkZEQjRFNzY4MUVFRDc5Qzk3QzJFOTRBRjc2QjIyN0Q4MwotOjEwMDBCMDAwQzY5MzBCQkE1RkYzMTYwREFGMDZENUFGRkZBRkJDMUFGMAotOjEwMDBDMDAwNjhFRkZGNjg3OEE2RjQ3QzlBMzdERkMxRTc4REZFOTE3MAotOjEwMDBEMDAwMUFGQzA1RkRENkFDQjJCRjg3N0VEMDFBRDVEQzZENzU5MwotOjEwMDBFMDAwMjExRkI5Q0ExRjhFQjJEM0Q4MjYzRThGRTA5QkU2MTBERgotOjEwMDBGMDAwQzJBOTU5NjIxQjlGQzJGNTUxRjlGQzU3MkUwQzJEOEREOAotOjEwMDEwMDAwOUVENzE2MEI5Rjk3RkE0RkNFOTg3OTZENzFCMTI1NUZFOAotOjEwMDExMDAwQ0ZCQ0ZFMzAyOTc2NUVBNzI3NjlGMzYyQjYzNDc4NEZFQwotOjEwMDEyMDAwOTM3M0I3MzQzQkRGMTNDNkMxMTVFNzA1NTdCNjBBRTYyQwotOjEwMDEzMDAwNTUzODMwQUZBQkQxOTYxQjRBRUJEOTE0OEYwRUFGNEU2QQotOjEwMDE0MDAwQjg4RUZGNEJFNkRCRkU5ODNGREU3QzhERjNEQzkzRTM1RAotOjEwMDE1MDAwQUZDQTk5NDQ3NEQzMkQ5NzBFRTA3NTcwMzNDQ0FCMTRBRAotOjEwMDE2MDAwRDc3NTY4QTg4NUQ2OTVFMzI3NjMyRTA1RjlEOENBODU4MwotOjEwMDE3MDAwMzAyRkJDQjZBNDkzM0Y2QjlFRDVEQjg1N0U1REY2QzM2NgotOjEwMDE4MDAwMTQ2RDlFOENGOEMwQ0FDRDIzODkyRTAxNkYzOUREM0VENwotOjEwMDE5MDAwQzZFMzQxMkJFRERDQ0ZCMDcyQjlBQ0E4MzJDRUZGQzdCRAotOjEwMDFBMDAwNjQwNzQ3ODBCRjkyNUVEMjFDQ0JEN0JGMTgwRUY2QUM1NwotOjEwMDFCMDAwOUFFMjY4MzhEOEIyRTYxN0M3NTk3N0Q1NEFGODlDNjhFQQotOjEwMDFDMDAwRERGRjhGMThCOTVEQzg0OUVDNjc2M0FCNjJGRDE0RThDOQotOjEwMDFEMDAwNkZFQzJGOEI4M0NCNDZCRjA3NjM3RkIzQzYzRUFGMjY0MgotOjEwMDFFMDAwODg2Rjg0QkYxNzhENDdDN0NDMUExRURENjkyN0Y5QTMxNgotOjEwMDFGMDAwRTNEMTMxMjc5RkFGMTE4RjE4NjhEMTQ4QzdGQUJDOEQ2MgotOjEwMDIwMDAwNzA5Qzg3NzA4QzEzODcwMDdDQ0E0MzM4MUVEM0VDMzNGNAotOjEwMDIxMDAwQzBBNzNDODRBMzRFMDdCNzM0NzM3RTYwODREQjMzODk2OAotOjEwMDIyMDAwRjlEQTU3OUI4NzAxOEZCRkVBM0NGNEZBNDRGM0QwRjUyMwotOjEwMDIzMDAwREI0REMyRjJDRDg4OUY5QjMyOTlEQzRBN0E3MDc4MkNENAotOjEwMDI0MDAwREE0OTFFNEJBODA4QzdCNUM1MDJGNDBCRURENjY4RkQwOAotOjEwMDI1MDAwOTMyNzAzRTZGN0E3MjNEQzJGN0E1Q0VCRDczOEFFQUUwMwotOjEwMDI2MDAwMUNERDJGMUFFQjM3NkI3NDQ1QjZBMzFFRDI5OEM0RTU3QwotOjEwMDI3MDAwRTFCOTQzNEVBMjFCOTYxQjlFODdGQUY3RjkwMzU2ODZGNwotOjEwMDI4MDAwRkNCNTQxMDhFN0UzNzNFNzA0RkY3QzdBQUUyNUQ5OEIyMAotOjEwMDI5MDAwNzI1MUY3Mzc5RTc4OTFGQjFCNTUwNkY2MkZGQUY5ODJCQgotOjEwMDJBMDAwREM1RkRBQThGRTZDMERBRUMzQzUxQ0E5MDlFRENGQzY5NAotOjEwMDJCMDAwQUU1OEZGMUFDQ0NGODVGMzNENjc2MjdERjg3QzgzMTg3QQotOjEwMDJDMDAwNUE4QTI2RUI0NjBCRDcwNzM2OUE1ODI3QUVERjgwNUQ1MQotOjEwMDJEMDAwN0UzQzlGRUM4NDRDOTlBMTNGQThDMUY0NUVGRThBMjgyNQotOjEwMDJFMDAwM0JCRTQxQUI2RkM4RTJGRTI5OEM0NzkzOUYxREJCRjIxQQotOjEwMDJGMDAwMEQ4NjRCQzM4NjMzOUY2MTNDQUQ2MTlGOTE1RTYyRTk4MQotOjEwMDMwMDAwQTk2RUEwMkM1QzE0QjBCREE4N0FERjAwM0Q5MTNEOEU5MwotOjEwMDMxMDAwNzg1OEM5NDI3OTAyRkFENTc4MzlCOUFBMkY4NDcxRUQ5MwotOjEwMDMyMDAwNDZDREVGM0FCNDI3M0MwM0Y1MDU2NzY5Mjc0MzNFREEyQgotOjEwMDMzMDAwNzg5QURCMjE1MzBFRUU3ODE1RkQ2REVFQUFCRTkxQThEQQotOjEwMDM0MDAwOTIzNDZBRjEwN0EzRkQzM0Y5RTA0MzIyRkE4Nzc0RkI4NAotOjEwMDM1MDAwMjVDQTFGNTUzNDNCQzYxRkI5OUFERTQzRkYxNkY2MTc1MAotOjEwMDM2MDAwQzY1QkU4RDc5NkI4OUVCQjUxRDM3MzQxMUYyNkJFQjk3MgotOjEwMDM3MDAwQjBCRDgwRjQ2MUQ0NTc1MUVGRDBGRDYzQTg4N0EwM0U5MwotOjEwMDM4MDAwM0EyN0I3QzI5MjBCRjNGQzZCNkU4NTkwM0I4OUY3NDcxNwotOjEwMDM5MDAwNzYzRjNBNUQyNjdGMEVGRkQyRTBBMzNGODc3RUIyQ0Y0NQotOjEwMDNBMDAwOEYwMzcwN0Q2QThBQzFGRkJGRTJBNzQzMDlDRjBGMjQ4NAotOjEwMDNCMDAwRDA1Mzg3RTZGNkZCRkZEM0QxRkZCRjQyRjBBNjIzOUVDMgotOjEwMDNDMDAwOUYxMjgzRTRFNzVGQ0M1NEYyMUYyRjQ1QkYzQUYxQzE3RgotOjEwMDNEMDAwNkVGMjRCREZEQUM0OTRGNTE0NDcwRkFFQzE3MkZEMTIxMgotOjEwMDNFMDAwMjZBRjQ3QkY3NDY1OTBFQUQxMkZGRENEQzkzQzRFRTVERAotOjEwMDNGMDAwOERDMjVGOEMwMzQ1OTdEOTZFMjhDN0YwRTkzRUYyNzMzMgotOjEwMDQwMDAwMzc0MDBCNUIxNEY0MjNDNDNFREZDODQyRDMyNUM0OEJCMgotOjEwMDQxMDAwQUU4QkQ2OTg3NjNBMzg5QzZFRDFGMDY1QjM5REZCQjcxQgotOjEwMDQyMDAwQTdBQ0RBMjFCMjI4M0Y0M0NBMDRCRkVGMUVBNDg3OUZCRQotOjEwMDQzMDAwOUFDOUJGRkE5RkRBRkFFQUYwRDg5MzUzOTE4Q0VCOTVGOAotOjEwMDQ0MDAwODQ3RTFGN0NFRTFFMkJDOUQ5OTMyNkI2MDRGMUU1NDFBQwotOjEwMDQ1MDAwMzdCQjY1MzZGQUIzRUU2NkZFNUMzM0UyODU5QzE1RUQ3QwotOjEwMDQ2MDAwRUZEMkFGRUIwRkQ4OTcyMDlFNERDQkU1NzY4MDdFM0Y0NQotOjEwMDQ3MDAwOTI2M0E2MzJGOUFCNDkzRjREQTZGODNCQjBBNTcxODgwRgotOjEwMDQ4MDAwODc2NUQ5QkE1RUNDQzZBMTlGRkMzRDhEM0YzNURDRThCRgotOjEwMDQ5MDAwMDg2MjdCNjExM0U3NjdCMzcyQjkzRjYxNTZBRTg1RDZEOAotOjEwMDRBMDAwNEYyRkY3RkI4QjM0M0M4MzdFQThCREE0ODkyQzI2RkVGRQotOjEwMDRCMDAwNzc0M0ZGRjMwRjY5NzYyOEEzRjk2RTVDOUFDNEY1RThEOQotOjEwMDRDMDAwN0U3QzM3MTEzRjRCMkUwRTU4ODJDNDRGMkE4ODlGNDVBMQotOjEwMDREMDAwRkVFMEYwMjI1Q0FBQ0VENDJEQzU3OUZDNzE0RTEyQzM4OQotOjEwMDRFMDAwN0M4NTA1NUE3Q0E5MjlENzRERURFQUYxQTQzOEZBRDdDNQotOjEwMDRGMDAwQ0RERDlFMDE3OUEzRTNBNzJFNjcwRTM4RjlCQzJGMzUxOQotOjEwMDUwMDAwMkZDMDc4QUQ1QTVGNDRGQzVCMUZDNzE0ODM1RTkyODg4RQotOjEwMDUxMDAwMkU5QUI1NzUzM0M2QzUwMEFFQzlDODY3MEY5OEI4REQ0OQotOjEwMDUyMDAwNzUwMDEwOEJGQzU2OUQ1QURDMTJFQzY0OTQwMzA3RjZBMAotOjEwMDUzMDAwMTU5MDlFM0Q1RkYzQTc4MjlDMjRGQjJBMDJGMjgyQUZCNgotOjEwMDU0MDAwNzc3MEYzNDI3Q0FFMzM4RkUyQjlFRjk5NDNDRjNDODVBRAotOjEwMDU1MDAwRjJGNjEwQjcyM0Y0RjUzODcwNjA3ODA4RTk3N0NBOTk5NQotOjEwMDU2MDAwMEI1OTA4RkYwM0E3N0YzNDFDRTNFNDA3QjRCODY0OUQ2QwotOjEwMDU3MDAwQTUzQjlGRUM3RDBCRDc1M0VCNUNEREY5MDhCRjk3MzVBRQotOjEwMDU4MDAwQkNBOTRCODIzMkRDMUYzOTM0RjgzMEYyMUYzREFGMDA3QQotOjEwMDU5MDAwREY3M0QzN0NCQzJFRjQzNzlDRDBFQ0M4RTM2MDU3RTIwOQotOjEwMDVBMDAwQjg4MDVBRkEzMDVFMEFFQjlEODlFNUM4QkE3NEFFRUY5RQotOjEwMDVCMDAwQzFCODEwMkY0RTFDMUE0QkYzREI2OEU2NzhBQ0VFMTc2RgotOjEwMDVDMDAwQzgzRjcxREMxQzM5RDUwQ0NGMUZDRjlDQzg1QTY0OTQyRQotOjEwMDVEMDAwNzc5RjNFRDU4QkVENkYxNzk5NTVDNkJDOEQ0RjNFRUU3QwotOjEwMDVFMDAwODJFN0NGODM5RDhCN0VCMzVBNTM2MDQ2MjZGMjhCMTdFQQotOjEwMDVGMDAwQjlCRDZFNUMwNzk0N0ZEMTcxQkM3MzJDOTI0NTdFQkRGMgotOjEwMDYwMDAwMjVEOTlEODgzRkU3MEUxNjUxM0UxMkYzQzg0Qzg1NzJERQotOjEwMDYxMDAwRTM3RTZFREYxOEUzQ0IyN0NEQjFGODZGNkMxN0U3ODU2QgotOjEwMDYyMDAwRkVCNTQ2RkM4REYyM0RGQUZEMzhFRDdENTFGOTlDMzk2MQotOjEwMDYzMDAwOUM3RjI3QzA2M0FBMzdEODkzMUI2NUE3MzZCRTkyNDkxMwotOjEwMDY0MDAwRkNGOEM0RkQ5RkQwN0FCMjc2MUUzNzNENjlGNkNGQzM2MQotOjEwMDY1MDAwRjFCOTJCQkIyRDM1NTFGOEY4M0I4RDNGRDc1QUI5QkNCQQotOjEwMDY2MDAwMDZGRTZCODlFNjM3N0E3RDU5MDU4QjFCREY3RjVCQTMxRQotOjEwMDY3MDAwNzM2NzFGOTc3QjgzRUIzOTlFREZDRTlFMTA5MTVGRkNFMwotOjEwMDY4MDAwMkVENzRCRUQ4REQyRjIxNDZFNjc3RjNBNkM0NUZEQTRFOAotOjEwMDY5MDAwQjM4NEYyMjA0NkFERUEyNjNFMDBFMzI1RkMzQ0I5Mzk5RQotOjEwMDZBMDAwODVGODIzREJDMEYxNzVEMTBGQURDNDNGMTY4MUZDRTBBNgotOjEwMDZCMDAwRjYzNkNGQ0I2MjFCNzhGRUM1QTk3QjdDODRDRjY1QUJCOQotOjEwMDZDMDAwQkJDQjg4MUVEQzRDNDFCREU0QTVCNkY3NTQxMUVBRTc2QwotOjEwMDZEMDAwRUYxNjRBMzBFRjZDN0U5QjhGRUM5NDVCRjdGOTY4N0RFOAotOjEwMDZFMDAwQTc2ODdDQkRENkVBQTczQzMzRjYzODhGQzMyRDc4Nzg0RgotOjEwMDZGMDAwMjlGNTUzOUZDQ0RDMjJFOTdGMjEwQkNBRTUyNUJCMDVGOAotOjEwMDcwMDAwODY3NDM1QTU5M0YzRkYzQUE5RkIzMEVBOTFDNkJDMDk3QwotOjEwMDcxMDAwMTY4QThEMkZBMzNDNjI1MTdBMjZDQTFGNjZCMDBCNjJERgotOjEwMDcyMDAwRDc1REJEMjRGOTZCOTQzN0U2QkNGOEYyMTdFQzNENEI2RQotOjEwMDczMDAwMUU1RjU3MkUyN0Y2MEE5QzZGNjhGMkI3MUVFNTJGRUE1OAotOjEwMDc0MDAwNkE5QURDRDNFNUU2NjI0RDZFOUUxMkI5REM1RTY0N0Q4QQotOjEwMDc1MDAwODhBRUMzRjM3QzM0Q0U1QjMxMUU0Q0YxQ0Y4ODA1RjVGNwotOjEwMDc2MDAwOTM0NDc4MzE1QzFCOTc4RTE3MjMzMDQ5NjZFODAwNUUwRQotOjEwMDc3MDAwRDQ5REVFRUVCNTkyOURBOUJDODg3MUVFQkE1NUFDREI2NgotOjEwMDc4MDAwMDk3NkRBMjJBOTg5RTRDMzMwOTlDOTk0OEYzNzNENDhBNAotOjEwMDc5MDAwRTM0QTVGMDlGQTM5QUNGMzIyOENERDRFQjg3NEJENjBEMAotOjEwMDdBMDAwOTAxRTYwOTBGRkZBQjg3NTNDMzFFQTdGNTM1Njg1NDQzRAotOjEwMDdCMDAwOEEzM0U1MzNCQUFGNUY2NUQ2NTk4MkUzQURCNjcxRkREMgotOjEwMDdDMDAwQkJEQUU2RTgxNkQxREVBQzM0OUY4REI2MzdBQTI1N0ZCQQotOjEwMDdEMDAwNzkxRUM5Q0IxMUVFNTM2Mzg4NDUzMDZDNTdGMUY5QUJFNAotOjEwMDdFMDAwNDY0RjFBRDAyQjkzNEIyMzZCRUU4N0Y2Q0M2QzlDMDlBQgotOjEwMDdGMDAwRjlBNERFQkZFODlCQjZCODE4RTM3QTUyMUZEOTJCMkNCOAotOjEwMDgwMDAwODNDOUJCQTBCRkVCOEIzOTVDOTM2MTFENzYwMDVDQ0RDNwotOjEwMDgxMDAwOTI0QUYwMzNEQjY0Nzc4QjFCRDdCRjhGRTIzMjkxQTExMgotOjEwMDgyMDAwOENGQzc0RkE3QTZENzMzMjE1RjMxQ0FGMkZFNkY0N0RFRAotOjEwMDgzMDAwN0QzMUY3MjdDM0ZCMTRGRjM1MTdDMkZCRDA3RUM1MDFGRQotOjEwMDg0MDAwM0JEMUU1QzdGQjlEMjE5NENGMjA3NzQ2QjlBMTNFRUQ3MgotOjEwMDg1MDAwRjc2MEE3NDBGOURDMDEyN0U5MjlFNzM0NzlFMUQxRkQwOAotOjEwMDg2MDAwQjU2QzBEQjU3NzkzODYzNzJBQUIxODhFRjYwODEzQUVBNAotOjEwMDg3MDAwMUQwRTYzNjdCQTlFNUNFRjRFMTRDN0Q0RUE3RDdEMzdDOAotOjEwMDg4MDAwNzJGQ0I1OTJCRUYwQjEzQkZDN0QyQ0MzNzgyODI3Njc4MwotOjEwMDg5MDAwQjY4NjU3OERGQkE2OTdEQzg1RkMzQkUwNTAzOEQ0ODNBOQotOjEwMDhBMDAwMjVBOEZGNThDNURCNkVCNDAxQjA2Nzg4QUIyMjc3MjI1QwotOjEwMDhCMDAwREU4Rjc0Qzg1Njc4QTU3MkQ0QkJCRjk5MEJFNTNGRUNBOAotOjEwMDhDMDAwMzMzMzJCRTJDRkFFRUI1MkJBRjEzNUM5OUYxMTE4M0I0RgotOjEwMDhEMDAwNzgzQzRCNDNFNkUzRTEyODNBNUVCNjNCQjY1Q0RGMTk3MQotOjEwMDhFMDAwNUI2RTY0RDJGMTcwMTRGRjZGN0U3N0U5MkY1RThCQzI2RQotOjEwMDhGMDAwQjdCQkYyOUM5RTUzQzkwQzdENkZDQTQ1QTBBNzkzNzdFNgotOjEwMDkwMDAwNzdCMTEzMjgwQkM1RUZBNjIwN0Y1QzAwRTQxRjRGQUYyMwotOjEwMDkxMDAwRjhFNEVFMjVCRjc4MEQ5RTkzMkMxNUFEMUM5RkJDMTZGOAotOjEwMDkyMDAwQTRBRjFBRDAxQkUyRDlBMTI1Nzk3QzdEQURENkE2RDM4MAotOjEwMDkzMDAwM0IwMDNFRDY5N0FENEEwQkJDMzUyQjJGQjgwMURGNkY3RAotOjEwMDk0MDAwMzA0NTdBNzE1REFEQTNDRThFNDM3Rjc2QzVBODBCOTRGQQotOjEwMDk1MDAwNEZGMEYxM0YzMzA1RTFGNEIxN0QxQUUxRDNDNzlCRUREMAotOjEwMDk2MDAwNUVCNDUzM0JCMjFDREMwRkZCOEExMDEyQjhERDMyNkI1NQotOjEwMDk3MDAwNTIxQUU2OEJEMDVDODA4RjQ1RDY2QzQ2M0UzREQ5MkExNAotOjEwMDk4MDAwQUY5NjY5QkEzNjEzQUQzNzU4NkY3MEVEQjBBODZCRDAxQgotOjEwMDk5MDAwQUZEQTAxMDY2NDhCODI3NjVFOUYwQjg5RTE5N0I4OEU5MQotOjEwMDlBMDAwODhERkUyQjMxNjFCRkNGNEI1Rjk4QjVBRTBCOTY1ODExOAotOjEwMDlCMDAwMjQ4Njc5N0NEMjY3NTIwMEYxRUM1RTZDMkFDQUVFRDlBQgotOjEwMDlDMDAwOURDN0U1NEZCRDJENkM5OTA2Q0YzNTVFQjhBRDZBQThDMQotOjEwMDlEMDAwNjlDMENGNkYzNTA3RkRDMzYxRENFNkFFOTJFRUUxNzAxMgotOjEwMDlFMDAwNkI3MUYzNzRCMkVGODBERjcyQkU3ODg4RjNDNUM1NzdBMAotOjEwMDlGMDAwNEVBM0ZCQzJFQzJBOUFFRjI5OTgyRkMyRTVENUNENTYxQgotOjEwMEEwMDAwOUFFRkE5OTEwRUIyQjc0RjZEMTNBOEJDNThCNjUwMUVGRAotOjEwMEExMDAwMjBFODI3NDNBNjc5RjBCRTU5QjZCMkMxRjA2OERDNzQ2RAotOjEwMEEyMDAwRUY5QUNENTBGRkYzNEM5MTA5ODBGRkVGNkZGRDA5QzVBMAotOjEwMEEzMDAwMjNERTY3QkM3Rjc1OUY0ODdBQ0ZGQjcyQTRBQzFCRTFCNQotOjEwMEE0MDAwRTk2RDcyNDVEQjkzOEJCNzg5MDFFNDk3OEJCN0RERkVDNwotOjEwMEE1MDAwRjNDOTA4QjdEOTM3OTUyMjNDQTZCQTZGNEJGMzNBMDZDQgotOjEwMEE2MDAwRUE3NTdENEY0QTJEN0YwQUU5NzJFQTY3RDNGQkE2QTI5OQotOjEwMEE3MDAwREVCNTBERTgwNkM2MkQ5OTU4MTBFRDhGRDdCNjVENEQ0MQotOjEwMEE4MDAwRkFGNkUyRUEyNDM3Q0VDRkJCNzVENzBDOTQ2RkVGNTc1NgotOjEwMEE5MDAwMEYzM0QxQkNGNjA4NEM0Njc4Qjg5QkQzRjBGRTYyNDFDOAotOjEwMEFBMDAwMEFDNEMzQUI0NTc5M0M5RTMwNkQ5NDQzNDE3RkMzRTI5OQotOjEwMEFCMDAwQjc0NEMyMTdBMEIzMUIzMThFNTBCRkNENENGQUZDNkJBQwotOjEwMEFDMDAwQjNERkY5Q0Q1Q0NGMDA5RDA5QjMzN0NEOUE4MkNGM0YxQwotOjEwMEFEMDAwNkRBNkU3RkJGNUE5QUQxRkJFOEI3RTAxRkMwM0M5OEU5OQotOjEwMEFFMDAwNzI4OEUwNjdBNDNCRUJBODU1RjkzODJFMjNGRDJENUVGNAotOjEwMEFGMDAwREQ5NENGRTNGQjk3NDY4NzZDMkJEMDIxRjBFM0IzNDAyNgotOjEwMEIwMDAwMjcxNzREN0YxNzFERkVGOTUyRTg5MDhENDg4RDkxREYxNAotOjEwMEIxMDAwODNGOTlFNEFDRkU5RjE1MTlCQzJGQ0JCMUM5NDBGRTNDMQotOjEwMEIyMDAwMTc4MDVGOEZDQzk3ODg0RTQ2RTY1QkU4MzlFOUJGNTY2MQotOjEwMEIzMDAwRUM3RTEzRTBGNDc4NUVEMDkyOEY3QTE3RjM5N0EwN0M2NgotOjEwMEI0MDAwRjY0NkU0MEE3NEM1M0EzNEJEOTE2REU1RjlFMTY4NUY5MwotOjEwMEI1MDAwRTBGQTZGMUNDQTlFNUExRkU1OUZDOUNDRDdFQ0MwQkNGNwotOjEwMEI2MDAwNjAwQUI2NzNFRTc3MTc3QTcxQkQxQUIyQ0U4RTQzQkRBNgotOjEwMEI3MDAwQkFGMUQzM0Y1MzVFODVFMzIwQ0ZDNzcxMjgxMUNBNTMyMgotOjEwMEI4MDAwMzI3QjAyODQ4RjNBREY2RjU0QjgxQzMyQ0VBQjJEOUY3QwotOjEwMEI5MDAwREJBRDhEOUUwOEI1QjNCRjgwRDNCQjFFOEZEQ0QyOUM2RQotOjEwMEJBMDAwNDQ3MUExMkQ5RTkwOURGQjU5NDBERjgzRjY2Nzk2OEE4NAotOjEwMEJCMDAwQzQ2NzZDQTVBRDBDRTUxODJCMTcyOTlFMzNGNUMyMkYyMQotOjEwMEJDMDAwMThDNkJGN0U3RUM1NzQwNUY1NEE0N0U5QUJEMjEwOUNCNgotOjEwMEJEMDAwNjdCOTU5QUI3RjdFNkQzNkQ0RkZFMjhBQUJDODNFNUEwNwotOjEwMEJFMDAwOTEyMTdBNTFBRjlBNTk5QUEzOTJGQ0Y0RjNCQ0REQTlGMgotOjEwMEJGMDAwMTc1Mjg4MEU2NzJEOUQ0NTdBQTUzRURFMDBCMzc5MURGQwotOjEwMEMwMDAwODAyN0IzODE1OEEzRjM5QjY3NUQ2MUY3M0FBMkYwRUJBRAotOjEwMEMxMDAwOEZFRDQyMTVEN0FCQkQyOUQ3OEZFNTdFQTFDRTYyMkVEMQotOjEwMEMyMDAwQ0ZBM0UxQjAyMkMzNDJGREZGMzU3N0RBNjQ4NEVGRDQ2RAotOjEwMEMzMDAwMkJGOTNBN0NCMEM3MUE1QTBERkQ3RTYwOEY2RjQ3NTY2QwotOjEwMEM0MDAwRTU3MzdGNkJCNjc0MERGMUE1REJGNjU4MjkzRTdGNDY0MAotOjEwMEM1MDAwODhGRkZDQUQ2QjQ1Q0EyQjVBQkE1NjYwMjFFOEVGODM3QQotOjEwMEM2MDAwNjc1RUNBNDJCRUZFODc1RDJGNjVENTQ0OEQyN0QxRkJFNgotOjEwMEM3MDAwMEJGMzEzRjk3N0JCMTc0NERCREIzMzJEM0MyRUMwMjY3NwotOjEwMEM4MDAwNTg2M0ZDQkIzMzVENUE3RUZFOTc4Qzc3N0MyQkExOUYwQgotOjEwMEM5MDAwRkZBNzIzNzBCQzZGRjZGQkY5REYxODExMURFRkU4OEY3QgotOjEwMENBMDAwNUIyOURDQ0Y2RjhDNTdFNTk2RkZCQjM2NUU5RTBGREQ3MAotOjEwMENCMDAwMkM2OUUzNTVBQzNDNkVCMTkwQzdDNTU3MUUxQTQyNzhGQgotOjEwMENDMDAwMzdEMzEyNzk4MEUyNTlBRjg4QjIxNkQ3RjBEQkU4RkQ0RQotOjEwMENEMDAwMEM1RTlGNjA1RUNDRUZDRkY1OTQ5MUJGODlDNjIzNzQwNAotOjEwMENFMDAwMDlERDRFRDc1Nzk4MUZFMzcxMENFM0ZDNkEwRThBNzEzOQotOjEwMENGMDAwRTM3MjdGMkQ5MDc5QkNCMzM4NDI3NkQ1RjEzNzlFQzAzMAotOjEwMEQwMDAwQzg3QjNGQkVEQjBGRkE0Q0QxNzlGNEZERkFBQzg2REYyRAotOjEwMEQxMDAwRDcyMTdFQzNGQ0VDNkI3OTM5MTE1RTI3RTI1NzE5RjlCNAotOjEwMEQyMDAwOUM4RTc1RkMzRUJFMzYyNzA1RjFFRDFFNUI0M0I4MTc2MQotOjEwMEQzMDAwRTBFNzE3NTM5ODdEMTg5NEI1RjhCRkZBMkVDRjYzMTVFNgotOjEwMEQ0MDAwQTNFQzFDQTQ4MzZERUYzQUM5Q0U2OTM1MzczRDhFRkIwOQotOjEwMEQ1MDAwN0VENDE2ODlFRDgyRkI5RUE0ODY1MDBCOTRCRDY2MjczNwotOjEwMEQ2MDAwRTU0REREOTEzNDZCMDdEQTc1NjE1MDcwMDUyODdGOTI4RgotOjEwMEQ3MDAwNzQ2QzA3RUEwOUNDOTZDMkNDRDA4RjVBQTFCRDZGQjE3MgotOjEwMEQ4MDAwQzlBREEwNUYzQzk2RUMyMkZFRDJCQzgwOTFGQzRFNjdDMAotOjEwMEQ5MDAwREQ4MjAwMDAzOTk4OUZDREZEQjRDQjVFMTQyOEZGMTg4QQotOjEwMERBMDAwMjgxRUY1M0UyNTI3QkUzRUJBNTdBMzhCNUY2MTAyMEQ3NAotOjEwMERCMDAwQzZFNUE3Qzc3RkVFNjBCRUVFMTc5MzgyRTEyODNCRUY0MgotOjEwMERDMDAwNUU0MUYxMTJERjgxM0ZDQzhGMzRCM0JFQjlDNDk3NDE4RAotOjEwMEREMDAwOEZGRjA1Qzg4M0UxRTI4RkM5M0Y3QkUyRUVFMEUzRjFEQwotOjEwMERFMDAwRjY0OUU4RDcwNUQzRTNEQkU5QUY2QkUzMkI2QzE3NDI5OQotOjEwMERGMDAwNjYxN0QxQUY2OTQ3MENGRDZBNzEzQzY3OUEwMjEyMDYwQgotOjEwMEUwMDAwRTNCNzNDNEU5N0NCRjQ3Q0Y5NERFOEI3MUY1NkNFQzdGRAotOjEwMEUxMDAwRThGMjg3MTlFQTE3MTlFREQ3QjBFMDEwQTRBNzI5RTk3RAotOjEwMEUyMDAwMjhERjU2MkU4Q0Y1QTc2NUQ0QUNDRDI0QkY1RUNERjc1OAotOjEwMEUzMDAwNjdBMUZDREU2NDc2QUMxNTUyRjAxQUVCOEZEQjY0RjAzMAotOjEwMEU0MDAwQzc3RDExNUZDODQ4NDgzNzkzMzNEMEJGQjE2OTIwRkVEMgotOjEwMEU1MDAwNDdGOEQzM0E1RjBFODkwMkNEODI0NUM3QjVEMzVBQkQ1NAotOjEwMEU2MDAwQkQ0MUQ0ODNBNkQ5OTQ5RENBNjBGQTYxRTU0QTA2Q0VGNQotOjEwMEU3MDAwQUJCQzgwQzM0RkE3RTc0NjBEMzU4NTgzMDJEOUE1ODM1OAotOjEwMEU4MDAwRjlBMTA2Q0ZGQTExMDQ0RjdCRkIxRDY0MzcyNTk3NzAzQgotOjEwMEU5MDAwM0Y3NkYyRDI5QTIwRjI5RjY0RTAzRjY4Qzc1OTJDNEQwQQotOjEwMEVBMDAwMDJBREZGMTQ2RUI3QUQxNDc4NzlFNTM0NTk1NkUxNzk4NwotOjEwMEVCMDAwOEI0QkNCOTdCRDk2RTc2N0FGQjQwNzgzRDFGMUI0Q0IyQgotOjEwMEVDMDAwNEQyQkE2NDVFN0U1Q0EwQ0RFNDczRTNDODdGNzM3RDNGNgotOjEwMEVEMDAwQjY4QUU3MDUwNzQxNDdDQTFDODA2Mzg1MDZDN0RDRjI2RQotOjEwMEVFMDAwMjQ5RUE3N0VCQjhERkM1QjVCRURFRDM0NUU5Mzk3REJCMAotOjEwMEVGMDAwRDkzNUVCRURDNEVGODY4Qjg1MTQzN0U5MzE3M0ZDNTA5RgotOjEwMEYwMDAwOUQzNkEyNTdBNUU3NkRDQTBGMUI3RTU5ODY1N0Y0NDUzQgotOjEwMEYxMDAwRTFDRjZEQkM1RUM3MEI2NkM4MkJCMDU4QkNCREU4QkY0NwotOjEwMEYyMDAwODM4MTI4OTg5N0IyNTJGMEY2NTZEMEJDRTQ4OEFBRTBBNAotOjEwMEYzMDAwQkMzNUJFM0MyRTg5Q0IxMTMwMzczMzM4NUM3OTVDQ0M2NAotOjEwMEY0MDAwQjA1RTgwMzdEQ0FGM0VENkMxRkQ0NjJDRTgyNUJEQ0I3OAotOjEwMEY1MDAwMzBERkMxNzhCM0JGMTBGOTZENEYzRkRFNzQxNUM2RTNDMwotOjEwMEY2MDAwQjcwRkJBQkRCRDNCQTNGMTg1NzlEN0EwNUZGNTNFMTM5RQotOjEwMEY3MDAwOEJBQzhGODczRjRBQUM5RDZGQ0M5MzMzREFGQjBEQ0RBMgotOjEwMEY4MDAwRDMwMzlBRkRBMURBNjgzRDJENjQ3RjM0REMzOTJEQzA4RQotOjEwMEY5MDAwRUQ4RkMyMTZGNDNGMzVBRTAyNDkwNUVGNEMzRjI4RDgxRAotOjEwMEZBMDAwQjBCREM2MzkyRUIyQkYxQkJCRjY1MkZDQkNBMThBMjkwQwotOjEwMEZCMDAwMzg4QzFBQ0QzRkFDQ0ZGM0I4OTlDN0YxNDA2Njc1NjI1MwotOjEwMEZDMDAwRkNCRUMzMURERThFRkJGMjNBOTZFQTc5M0MzQ0FGNDU4RgotOjEwMEZEMDAwRUQxMkI0M0MxRTNERUYyQjcyMENGRDlGMUQ4Mjk3RkM2MQotOjEwMEZFMDAwQTBGREZCRkI2MEZENzlGRUNFQTVFNTgxMzk4QjAzM0VCQwotOjEwMEZGMDAwQjRDNDJGQ0Y3QkUyOTc0OTkzMkUyMThGNTYzREQzODFFNgotOjEwMTAwMDAwNzlCMjg5RjM2ODVGQkYwMUVCNkRCODE2NUEzREEyMDE1MgotOjEwMTAxMDAwRThDQjdBRDk2RkY3NjJGRUNFNDBCRDA0NzZBN0FENEIyMAotOjEwMTAyMDAwRTBFRkFCRDdERTcwOTU0NEZCNzJCNEYyQTE0N0QwMUY1RQotOjEwMTAzMDAwRkVBMDlEQzVGNDE3M0QzRUM5RDAzRTlBOTYwRUFGRkU2OAotOjEwMTA0MDAwRkNCNkQ5RDhERUEzMTNCNEIyRkFCNzg3RkQzMEJFMDcxOQotOjEwMTA1MDAwQ0RCMUVEMTFDQTY4RUY2MzQxRUZDRjNCRTY5OThFMEQzQwotOjEwMTA2MDAwMjMwNkY0NzZEMEUzRUYyRTk4MzRBMEJGREZGQkNFQ0M3RQotOjEwMTA3MDAwRjZGMUQwNTdCMkZDMjdEQTA3QTVFQkUxOEQxRTlFNTc5QgotOjEwMTA4MDAwNkJDNEYzRjUxQTFGMDM3Qjc4MDZBQUQ2RjdDRTU5MUU1OAotOjEwMTA5MDAwQzA3NkZCRjNERTBFQ0VGN0EzMURBQ0U3QkQzNUFFMEE3RQotOjEwMTBBMDAwRDA3RTI4RDBGQjFGMjhDMDNDREFERjlEM0Q3NTk4QTE3QgotOjEwMTBCMDAwOURGOTAxRjkwMzFBM0Y5NUI4REYxOUVDMDcwMUYwQzU1NgotOjEwMTBDMDAwNzZGMDIxQzIxRkI2REIxQzQyRDc0RTg3NUI2NTg4OEY0NgotOjEwMTBEMDAwMUQ4Nzg0NDk4ODVGOEMzNTY1REQwMEIwM0Y1NUUwREZCMgotOjEwMTBFMDAwODhGMzM4OTcyMDNFRkU3QzAxQjdEQjFCMEIyQjM2RTdERAotOjEwMTBGMDAwMjNBQzlGMTQxOEVBRTNFQjBCRkY0ODc2NDVDM0ZFQUIyNQotOjEwMTEwMDAwMjY0NUVGREY1QkRBRjUyOERGMDdCNkRCMUM3N0RFQ0Y5RAotOjEwMTExMDAwMTc4ODNDOEY3OEZGMEIxNDNGRjkyMDI0MTBDRDJEOTFCOAotOjEwMTEyMDAwNDJFQkQwREU1Q0IyQzQ4NDk2MTUyQjBEQ0RBNzNDNTlBMgotOjEwMTEzMDAwMzZDN0MyNzBGQzhGMTY3MEI4MzRFRUJFNEVDNUZEODQ0MwotOjEwMTE0MDAwOERGMDBGNDg4MDZEMDkyQzIyN0Q3QkNCMUM5QjAzRTMyNwotOjEwMTE1MDAwRDg4RDg1MzVDQjg5REZDOTQ5N0UzNEU1OENFM0VDQ0Y2QQotOjEwMTE2MDAwN0ZCQjMzODlGMjY4RDY3Nzk5QUJEMDRFMkEwM0JBRjhBMQotOjEwMTE3MDAwNTcwN0YyRDVBM0JFMURDODNGODc0QzEwNUI2NUNDMzMyMwotOjEwMTE4MDAwOENBRjdGQkY1MEM0RjU4NzM2MjFBMDdFQkI5NEUyMjI4RQotOjEwMTE5MDAwMkMzQTlGNzk1NDE3QjdCRjdBMEIyQzMxRkVDOURFMDI2NwotOjEwMTFBMDAwODlERUJCNDJFRDlCOEVCOEY2OEExNDRFNDY3QkI4OTEyMQotOjEwMTFCMDAwRjkzRjQyQkYxNzBCMzhCQzE0MTc2MjlERTQwRkY0RENGMwotOjEwMTFDMDAwRUQyNUJCQzlFNjA5REYzNzFFRUJBRjkwQzg2RUQyRkQzNwotOjEwMTFEMDAwMDhFN0Y2QTc5MzNFMzZBNTMwRjgyQkM0OEIzMjMxRkNENgotOjEwMTFFMDAwQzhCNzExNkVGNzQ5NUE3Qzg5RjM5NUFDRUIxQzEzRDA0NAotOjEwMTFGMDAwQkUzMjdCQjgzRTYzMDc3RDA2Rjc4OTVDQjlFRUU0Q0Y2QgotOjEwMTIwMDAwQTYyMzZGRjUwNDQ4OEY2MDIwRTQ3MEJGRjk3NDlCQzA3QgotOjEwMTIxMDAwRTMyQjA2QkQ5OUM5NEEyNUJFM0Y0M0YzNEJFN0MxNkE5QwotOjEwMTIyMDAwOURCMjExNkFCNjVEMUM4MkZFMEM4RjhBRjA3RTAzMjY4OQotOjEwMTIzMDAwMzAwNEVBQUY2MkZFMzY1Qzk3QkY2QTc2RTQ0NjBCRDdBRAotOjEwMTI0MDAwRDczNzlBNkNBNEFGRUJGQTcwQjJBNzhGRUNDNEZBNEUwMgotOjEwMTI1MDAwODFGQUE5MkZGQzMxRUQxNzU4QTZFNUE1RjdFNzg3NEJEMgotOjEwMTI2MDAwNjFDQTk3M0Y1NzkwQUNFOTZGNkREQzFGQzVGQUM4MUY4NAotOjEwMTI3MDAwQzY5RUU1RUIwMDlBMjdFNUQxRUI3MEQ3RjNDQUY1RjZFOQotOjEwMTI4MDAwMkM1QUJDQjQ1RUYzRTcwMkMwQThGRUJGMEE3NEJENzA1RQotOjEwMTI5MDAwQjUxNjVGRDVGM0ZFNzlCRjRDRjI5NjQ1RkIxRDM3NTY2OAotOjEwMTJBMDAwMzNENjQ3RTNGMkJBNzBCQ0Y3QTQwNTRDODVGMEZFNzE2MwotOjEwMTJCMDAwQzA2M0M0QjNFMzZCOTM0M0I4REY2QkEzRDBFN0M3Qjg5NQotOjEwMTJDMDAwODc1QUMyRTMxOTQ2N0M0QTJGRTRGREE2RjQ0NDY2NTBDRgotOjEwMTJEMDAwREVENUZFMDRGQjhBQkE2MkY3MTUwMTdGNThGRTNBRjRBOAotOjEwMTJFMDAwNTM1QUZBOEU4MkY4RkRBMDVCN0JGRjFBNDZGOUU0QzZEQQotOjEwMTJGMDAwN0Q0NTIzMEFCREZGM0JGNzE1Mjk4MjdGMjc1Q0M3MTY3MgotOjEwMTMwMDAwQkFGOUJFMjE3RDVGOTFDMkQ3NEJDRkUzMzBFRTI3M0FDOQotOjEwMTMxMDAwOTdEOTJERjFGQ0ZGRjBGNjVEMjQyRkFENjQxN0JFRkNDQwotOjEwMTMyMDAwNjE2RjFCRkE5OUNGOTc1ODE0REM0NzkxNzZEMzFCNkRFOAotOjEwMTMzMDAwOTQ0RjIzNDg0RDE4OEYzNEVBMDM0RkY4QTY1RjU2Mzg3MAotOjEwMTM0MDAwMDlGN0E1QkRBODUwQkVCMDQxMUY0OEU0MDdBMDU4NjlFMQotOjEwMTM1MDAwOTQ5RkU4OUFDMkFGRDcwRjYwNkZGRkM0ODVGODc2NDZCNgotOjEwMTM2MDAwODgzQzgwNzlBQ0VBMjEzMTZFMUVFQjkyQzI0NEZFMDBDQgotOjEwMTM3MDAwRkY5QzY4RkRCNDREQ0ZGNzcyMjdDNUU0M0ZCNjI1Qzg4MgotOjEwMTM4MDAwRjc0QUE0Rjc0QjA5RjNCQ0FFMjFGREFEQUQzRkNGQUI5RgotOjEwMTM5MDAwNEFEN0RGNjJGMzU4RTVBNENGQjU5N0Y1RkVBQkMyQkVERQotOjEwMTNBMDAwOThCOEZDM0Y2Qjc0RjJDNUYzRDRFQzk4MDRGMzRCNjQyQgotOjEwMTNCMDAwQjc1RDZBOUU4MTExMEU2RDA5RTRFODNEODVGMUY3REZBNgotOjEwMTNDMDAwMDI1ODY0OENDQkI3NjE1QzFFQUU5MkMwNTRGMjlGRURBNAotOjEwMTNEMDAwRURDRjMzRTgyNjdGRjEwQjA1RTRGN0IyMjZDQzMzRTBGRQotOjEwMTNFMDAwRjk2N0QyQTEwMjJGM0U3N0FGMzlFMDQ3N0I0NkRENkIyQwotOjEwMTNGMDAwRDZFNDQwRTgxOUY0OUJCNDFEQ0EyNDNGMUIyQjBDOEY4NAotOjEwMTQwMDAwNDNGRTI4Qjk2NzY0RTBCOTA2NkQxQTdFRDY3REY5M0NDMwotOjEwMTQxMDAwODNDNzkxQ0YxOUYzMEM3Njg0MjYzQzkwQ0RFREU3QkVCRgotOjEwMTQyMDAwNjREMENCNzYzMDJFQTdENDgzRENBRjA5RTMyNkJGNUUzMQotOjEwMTQzMDAwRTRGRTkxQTRBRjBBQjM2RDM0OEYxM0FGNTg3NzVBNDlDNQotOjEwMTQ0MDAwMEY1NzI4NkZBMDI2NDM5NDUxQkU3NDU0OTc5RDQyRjlCQwotOjEwMTQ1MDAwNzUwMjE0NTdBNEUzREE1QjU3OTFGRDlBNjg3RDZBRDc0OQotOjEwMTQ2MDAwQzZDNjcxRjVGQjVGNzY5RDVFMjlFNEZBQ0U3MUI0RUZENgotOjEwMTQ3MDAwNDlEMEFBRTQyRjVFQjI1NjM4NENGOUJBODYzODcyMzc5MgotOjEwMTQ4MDAwRjIxMDkyMTNCMTc5MDExRkRCQTc1MTNDRjZGQjBGNTcwNQotOjEwMTQ5MDAwNTMxQzU2REZCN0FCRUZENzY1NUFCQ0M1QkI1NjIyMzlENAotOjEwMTRBMDAwRTFERDJEODRCQzNFNEUyNjI2QjJFRDY1MTM5RDFGMDI2NAotOjEwMTRCMDAwRTI2RDBCOEE0NDE1QThFNjMyQjgyRDk4MDRENDUzQkRDQQotOjEwMTRDMDAwNkQ1MDRFODc3OUFEOTNENDBDNzg2RUM3REJDOUU0N0YzRAotOjEwMTREMDAwQkREN0UzRDVGNjUxNzBGQjRCREQyMDkwRkUwN0VEOTJCMgotOjEwMTRFMDAwRkRBQ0I2MDFERTQwM0JFMTQyMUUxN0Y4QjQ5MEZCQTcwRAotOjEwMTRGMDAwMDE0NTQyMzQxRUVEREFBNkU1NTFFOEZEQjUzMDUzMzcxQgotOjEwMTUwMDAwNUU0RDAyQkZERTJCNEI1NUYxRjQzQkJEQkQzNjczOTNGMAotOjEwMTUxMDAwMERFMzJEOTE5MTI2OEE2NzdFNkNGMUNGQTE3ODYwNkFFOAotOjEwMTUyMDAwM0U0MzdCQjFDREQ5QjRCNjhBRDcxMzBGRkREODFFMDk3RgotOjEwMTUzMDAwNTBGRDM3MjQ2RTI4MzA2RjJBOEVGNzM3MUFERDE4RDcwMgotOjEwMTU0MDAwNzU2MTdCNkNEOTE4RUYzNzlFNDM1MENCODIwNTk5Mzk3MgotOjEwMTU1MDAwODNGN0U1RkY0NjkzODcxRkFGRjc2OUVCQTI1MEJDQkM0QQotOjEwMTU2MDAwQ0RFQ0ZEQTUwRkU1RTMzQTg5RTQ3MENCMDgwRTM3RDM0NwotOjEwMTU3MDAwNDg3RUNENzY1N0NFMjEzOUVDMDZGRDk0QzZDQkM3OUY2OQotOjEwMTU4MDAwRkQwRDhGODBGNEQ3RTZFNkY4RjU1NUM3M0RFODFDODFFMAotOjEwMTU5MDAwQTI3QzFBNkYxQjFBMEREMDVGREIzQTIxQzRFMUM1QzdDQwotOjEwMTVBMDAwRkQ2NUZERDU1OTQ1NUZBRjlDM0EyMTI4NEY3NTIzOUVCNwotOjEwMTVCMDAwMzk0MjNGNDRCRjVGNkQ4QjU1NDY3RTc2NDZEMEU4N0YwQgotOjEwMTVDMDAwOUQ0OEZDNkNDQjkyNTQyQTFGNUY5QjQ3N0VBMDdFQkEzRAotOjEwMTVEMDAwM0RCRDY2Mzk5RUFGRjA2NUYzQjY5NDIyOEUxNzNGMzc1NgotOjEwMTVFMDAwRjhFMTZBQ0E4NUEzRDg4RTExRUU4ODUwOTIyRTdGRTA2QQotOjEwMTVGMDAwRDVFOUQ3MTVDRjQwRkVEODYwNjJERTc0RDQwN0Q2MUE3RAotOjEwMTYwMDAwRjI0MzBDRjQzQ0Q1MUJCQ0IyMDhFRDBGNEI1RjJGRTc0NwotOjEwMTYxMDAwNTNFMTdDODlGNDZGQkI4MjcwN0JENDc0NjJFRjRGMTAwRQotOjEwMTYyMDAwNUZGNkRBMjlERkIwNjE1NUU0MjlGNDU3QkFCREMxQUJFMgotOjEwMTYzMDAwRjBCREIzNzdCRTMzNDNGMDUyNzNBNDI3OUQzRjU0NDBBRgotOjEwMTY0MDAwRTc3NUQ0QjQxOUNFNDFEODEwOUI5N0MyRDZBNkYyQkM4OAotOjEwMTY1MDAwOEY4RUQ4RkJCODVGM0ZFNkJENDFGOTJBRUQ5QUJFMUREQgotOjEwMTY2MDAwMkM0MkZCNjJFQTk1M0NDRkVGQzNBNTI2ODY3OEYxQTExOAotOjEwMTY3MDAwOURFMzhGN0FCRjUzOTMzMzRBN0VCNDVFNUJBM0Q5MzcyMQotOjEwMTY4MDAwRkRGODcxQkY5REYwQTM1NkRCRTc2NDVDOEY3QUM0MEY1MQotOjEwMTY5MDAwNThCNzNBMEQzRjNFN0NFMUIyN0NDNDhGQjM3QjJGQ0I3MQotOjEwMTZBMDAwNDdGQ0Q4Njg2RUY3MjM3RENEQzkwRDJFMkE4MjcxOUQyNwotOjEwMTZCMDAwQkMyQUQwNkJFMjdDMjlGRjUyRjBGNjc2RTNCOEZFNDFGQgotOjEwMTZDMDAwRkE1NTQ3NTEyMkJEQzNGQkRERTg3ODRCOEY5OUZCQzkyMgotOjEwMTZEMDAwNTQ3QkVDM0VBMTlFNEJGNEFCMjZGNjhGMTVFNUM2RkE4MwotOjEwMTZFMDAwQzcwQTczRTNFQTU3MzZGQkU3RUE1Nzk3M0UwRjQ2RkIxNAotOjEwMTZGMDAwQzRGNDM4NEM4RjMzRjJDMDUzNTFGMDVBNjlFN0Y5MjhEQgotOjEwMTcwMDAwMkI4QjY0NTkyREMxRjlENUU0RDBCRUIzREZEOTk0OUQ5QwotOjEwMTcxMDAwQzJENzNBQ0YxODNGRTAyQjE3NzJENkI0RTMzOEZDRENCRgotOjEwMTcyMDAwNkZGOThBRTRFREJEMUNGQTdEODU3MUJGQTU3MURFQkYzRQotOjEwMTczMDAwMkRFMEY5MzNCQUREQUREQjgxQzZGRTBGNjhFQkZEQjNGQQotOjEwMTc0MDAwMjJGRjIxQjRBQkE3NUVCODQ4N0U4NEQzNzgyRTBGRjQ3NQotOjEwMTc1MDAwNkIwQkZEMkJEOTczRUNBMDIwRDNCRTM1MkY4RjgzMzZCNgotOjEwMTc2MDAwRUM1RkY4MDRGQTVEOTc4NkI0RjhFNTNFODFFQ0Y1QTVFOAotOjEwMTc3MDAwNEY3RTQ0RjVFN0JBNkFBOURFNzE1MEU4QzYzODY4RTNERgotOjEwMTc4MDAwMDgxM0M5NkQzREZGNDFGN0ZGMzQxRTJDMjFCRjhGRUVCQQotOjEwMTc5MDAwRkY4MTcxRUM0NzNGNERCMjI3NjIyMUJFODVGNjI1QkMyMwotOjEwMTdBMDAwRDcyMEYxRjg2RTgzODcyOTJBQjJEQUFFNThCRjg5OUUxNgotOjEwMTdCMDAwMUZCNTI1NjAyMTdBREY3MjUwMDhBMTNEOUU2NjA5RkFBNwotOjEwMTdDMDAwNDYxMDNDNDdDODk0REZBMkYxOERCNzhCRkMxNzkwNUZBMQotOjEwMTdEMDAwRTlGOTZCN0I3MkZDRUYxNEYxQkNCNzJDQ0E5M0Q3RDYzNgotOjEwMTdFMDAwMjNEODFGMTdFMkZCMkNGRUYyNkJCRUNGMjI5QzgwNUYzQQotOjEwMTdGMDAwRkY2NzkxOUU2NzdCMjNFOUNGN0Y2MTgxOTRGOEY5RTdDQQotOjEwMTgwMDAwMjE5RTdGREU5RkVGQzZGM0NDRUI2NjMyQjZERUNEQ0JGQQotOjEwMTgxMDAwNzhDRTRDM0Q5RTMzQTM3MEY5RDk2RDkwOUZEMTY1Q0NBNQotOjEwMTgyMDAwMkZFQjhFRTI5Qjc1NTIxRkU1QjFFQkU3Q0E2MEJFNTkwNAotOjEwMTgzMDAwRjRGMzBEQjg0RjIzODdFNzlEQzVCNEEzRjFEMzc0NzFCQQotOjEwMTg0MDAwMDVDNTdGRTJDNDVEQkYxQjZEN0YxQ0QxRURBQzEyN0Q3MQotOjEwMTg1MDAwNUY0REM0ODJGRTlEOTUyRDlFMDhDNjExOEUzOEI1RkQ0NAotOjEwMTg2MDAwQkU1QTNFRUQ0QTdCRTQwNEZBM0Y1NjNFOTM0RUZCNDc5OAotOjEwMTg3MDAwRkFGNUZCM0Q1NkNEN0ZDRUYxQkU4RUZGNjQ4RDRCOEVDQgotOjEwMTg4MDAwOTM5RERGODhGQkZBODUwMTdBOUE5OUQwMkVGQjY5MkUwOQotOjEwMTg5MDAwQzY2MzhFRjREQjY1NkZFNEUyRkUxQjlEQ0ZENjI5OUMwOAotOjEwMThBMDAwNUZENDc1MDk3QzFGNTY2N0VDM0U5Q0RDRDE1RkFGQkVGMAotOjEwMThCMDAwQTAzRjk3RThGRDhBRDE4OUVDRDkyRjgyMzNFN0I3NDc1QgotOjEwMThDMDAwMTJFRDVGRDJGOEE0MEU0NzIzM0ZCQTU0RjhFOUY1RkRCNAotOjEwMThEMDAwRjAwM0JBMjY3RTZCODA5RkQxOEZBNkZCQzM1ODlCNEMyQQotOjEwMThFMDAwRkUzMkQwNDkzQTMxOUY1M0Y3ODc3RDU5NzlGODlERDExRgotOjEwMThGMDAwRkYzM0YyRjBGQkEzMTNDOUMzQUZCNjNFODlFNEM0QTUxRQotOjEwMTkwMDAwQUVDQjIwNzk4OEVCMzMyRUIxM0NDQzJERkY3NzZEREM0QwotOjEwMTkxMDAwQzYzQzA0NkREQzg2M0M4NDIzRTZDODJDN0U4RTA1QzA2NAotOjEwMTkyMDAwQzczNzM4MEYyMTIxRkU3RDQxMUVDMkRGMzE0RjQzMUVENAotOjEwMTkzMDAwQzJFN0NGRDM5ODg3RjBGOEExQzc1QzE4QUFDM0ZENkFBNQotOjEwMTk0MDAwRTg3N0U4RDk2NUE2RjhGQjBDRDFFMUU3Rjk2MTIyQ0Y4OQotOjEwMTk1MDAwMjc2NTdFM0E4RkIzRDE2NjI3RkY4MjMxN0YwRTM4RDU1NwotOjEwMTk2MDAwOUEyNkQ0MkZDQjQxRUZDN0ZEM0NEQjVBNDkyRUQ3NjdDRgotOjEwMTk3MDAwOEFFNEFCQzQ3QzQxRDkxQjI3M0Y1M0FBNEVFOUY2MEUzQgotOjEwMTk4MDAwQ0UxM0MzRkM3NzNBMTdFMDEyRjNDNEY2OEVFRUNGRDcyRQotOjEwMTk5MDAwRjRGRDlERjk5QUZCNDc3Rjg5M0MzMTI1OEZGM0E3NTdDQQotOjEwMTlBMDAwMUQ3RjFBMTI3RDVFNjY0NTMxMThFQUM1ODlGM0Y0N0YwMgotOjEwMTlCMDAwQTJEMTREQjI5NkRGNkI5MzU0MTZFRDhGNEFGNERFMkYxMQotOjEwMTlDMDAwNDY3MzdCRTc1NTRCRTRFRDRFRDRBQkEwMTk4QzdCNjY5OAotOjEwMTlEMDAwNThDMDlBMkUxREQ4RUY3RUFBMjA3MDE0RjM5NDQxMUY5MAotOjEwMTlFMDAwQTFGNTNEQjdGRkI3RTRFRjdGM0M5M0M5OTgzN0ZGQjg0NwotOjEwMTlGMDAwNTlBNTc1NTY4NzMyQzI2QjNEOUY0MUVGRTcyRUNERkY0QgotOjEwMUEwMDAwRkQ2NUY5Q0ZGQkZGNjBCOTIwOERGOUVGOTEwQjVGMUJFRQotOjEwMUExMDAwREYxOTk0RjdDNEU5RjFFRkUwMzc0NDdGRkRGQ0M0Q0M1MwotOjEwMUEyMDAwRTM0MUZBNzkxNzVGMjhFN0JFNkUzRTYzQzhENzQ4MzRCMgotOjEwMUEzMDAwQUZCRjE2MzBDMjlGQzIzMTgxRUMzMUU0MTdGMzkzOUZFMAotOjEwMUE0MDAwRjE1MkU1NUY3MjI5RTg0MzA4OEY3RDU2MkY5MjlBNEQzNwotOjEwMUE1MDAwM0JENzgyNkRDOEQ0RkRBMkZDN0NDMTA3NDc5MkRFRjk1QQotOjEwMUE2MDAwQTE5RDhGNTczRkFGNDM5RkNGRTU2MzBDRjhGOTE1RUQ2QwotOjEwMUE3MDAwNTgyNTM3RjA4RDMxMzBCRjkzRDNGQ0I0RUZGNzVFMjc5NAotOjEwMUE4MDAwRDdEQjIyQ0ZGMEJDNzdFM0Y5MTM0MDM3RkMzQzBFRURGNwotOjEwMUE5MDAwREM1RkUzM0VGQTZGMUJDN0Y3MEY5MkRGMERGRkRCRTk1OAotOjEwMUFBMDAwRTgxMkU1RjdBNUNGMjNENjlFM0RFMkU0Nzk4NTAzRjY1QgotOjEwMUFCMDAwRUM3RkRCQkMyRTQ5NUVFQjc5QzY2NTE1N0Q5QUJGNUY3NgotOjEwMUFDMDAwNjBFOEVGRDdGQjY5RUNFM0ZCNzQxRUQyRDY1M0JGRkY4RgotOjEwMUFEMDAwNUJDREJGRjdENjE4RkZDMzg4QUZBNUE1REREQjcxQkYwRgotOjEwMUFFMDAwNEEwMzczMzE4Q0JCMzc3NERFQjFGQjREMEZERjdGNEI4NAotOjEwMUFGMDAwRTU0MjFFQUY2NDAxMDdFRENGN0UzQzJGQjg3NTBDQzlERgotOjEwMUIwMDAwQzFGMDFBQTRDRjUxMUU1Njg2NzE4M0Y1ODVCMzU5QUQyNQotOjEwMUIxMDAwODNGMjEwNDI1ODNGNkE1NTc4RkI5QkE1OTQ4N0Q1ODQ4MQotOjEwMUIyMDAwRjRBQUU3MjE5NzVERkNEMzlBQUE1MjFBMkZGOTdGM0RCOAotOjEwMUIzMDAwRDZEODczM0IwRThGRTFGMjRDQkZCRTMyNDZEMEUyQUUzOAotOjEwMUI0MDAwRkU0QzFDQ0ZEOTI1N0MzRjZBQTNDNzJGQTMxRjU5OEZGQQotOjEwMUI1MDAwN0IyNzdCRkIyODZGQTA2MTFGMzc4QUNBRDA1NkM0RkE0NwotOjEwMUI2MDAwQkI0NjEwN0QzNUVDOUI1NjgyRjE1MEQ2NjkyRkExRjMxMAotOjEwMUI3MDAwN0U3RkNGQ0ZEOTNFN0JFNzMwRjIzNzRFMjkwQ0JFODQzMwotOjEwMUI4MDAwN0NDOTU5MUFCQTA2RURFODUxRDAwRkM2NERDRkVFQkQ0QgotOjEwMUI5MDAwQTYyNDE4ODc2RkE2OEJBOTJBQzY5NUQzNDVENkY5ODg5RgotOjEwMUJBMDAwM0NDMEI3QzA3RTlFNEJGRUUyMzUxMUYyNjMzRDNEODZFMAotOjEwMUJCMDAwREY2RkY0NzBCOURFNzhCMDlBMkQ3NDBDOTQxRDlFRDg0NgotOjEwMUJDMDAwRkQ1NzNGMkJCQUVBNjkxQ0M3RDM2MzI0MkQyRjkzRTczNwotOjEwMUJEMDAwODFGQTQwMEQ0M0JGQTExMTlGN0M1QTFFNjhCNTk2RTc1QwotOjEwMUJFMDAwQ0M1NERCNDA3RTczRjYxN0U3ODFFQUUzRDNDQjdBMUU1MQotOjEwMUJGMDAwNjhGMkE3REM3RUNGOTYyRDk0MzdFMjVDQ0JGOTJBNUJBNgotOjEwMUMwMDAwQzUyODZFNzA0NUE0NkY3QTBBQzAyOUI3QTNGQjBBODQ2MQotOjEwMUMxMDAwNTMwQTgyOURDRTdGMERERjM3MUVFRTdCODY0ODU3QTA4QwotOjEwMUMyMDAwM0Y2NDdCRjM4NDFFRDQ3RkE1NzU3RERGQzAyNUYxQjZBQwotOjEwMUMzMDAwQ0IxNUU4NjI3QzNDMkY3MDgyRTQ4MEQ0NTQ4ODdDQTk2OAotOjEwMUM0MDAwRTIyRDMzREZBN0I0MkU5OUY0Q0E4RUFDM0FEQUE3NzQyQQotOjEwMUM1MDAwRUUxRDZCREM3MzA4RjRBQkNBNTY2NzYwREMyMTdCRURDQwotOjEwMUM2MDAwQUYyODJGQzBCOTRGODhCQjlGQURCMkQ4QTFFRDYzNUE0MgotOjEwMUM3MDAwOUQ4MTcxMENFN0RBM0VCNTFDREFDRkJFNUY2MDlBMTkyMAotOjEwMUM4MDAwOUQyOTY0QTA3RjU4MzJBMTdDQURFREUyRTdEQkQ1QjY5QgotOjEwMUM5MDAwQkIyQjZDMjQ2RkI4QkY4NjVERTEyMTM5MjJBREZCQTY1QQotOjEwMUNBMDAwMDlGOTg0RDQwMjVBMkNDQ0YzRjI2MjFFOUZDRUVCOTAzOQotOjEwMUNCMDAwNEQyOEE3RkVFRDMzMzE2RTFDQzk1NjNDQjBERjA1QzE3RgotOjEwMUNDMDAwNTU2RjhERjQ2NkY4MDZGMjdDRjQ3RDJFQkFCRkE3NUZERgotOjEwMUNEMDAwRkVFQzlCNEZGRTlFNEJDRkVCOEVEQzRDNzk4MzlGQTU5OQotOjEwMUNFMDAwNTE3QzY1QTY4QkRCMjMyMDg4QjRGMzVENjJERjFGNzQxMwotOjEwMUNGMDAwQkU4QkE2QjdFODc2QjE5MTBFOEM3OUQyQjlFNUMzODhEMAotOjEwMUQwMDAwMkU4MDhGNzY2RTkxNjNGODVFREM3Q0U5NjY4OUVCREQ3MAotOjEwMUQxMDAwMzAwRkNCNEExQ0M3QjQwQzA1RkQ3MzVGMzYzRkRENjgzRQotOjEwMUQyMDAwNEZGN0VCMzk5QTVFQTI4RkZCRUZDREU3RDZFQkVCMzBBNgotOjEwMUQzMDAwOEYzQjhFRkY0M0Q3NkJEQUY0N0REMDlGRjFGM0I3NDYyQwotOjEwMUQ0MDAwNjlGNkM0RjFGNTdGMURDN0NGMzlENEYzNDY0Mjc0OTVDNwotOjEwMUQ1MDAwQ0NDMDNGMDk3RkMyNTdBQTg4MDdGQkRDQTY4NjYyOEFFRgotOjEwMUQ2MDAwMkYzNTUwM0JFQkY4RjlGRUEzRDZFNkFDMkUyRkM1QUJEMgotOjEwMUQ3MDAwQ0MwNDgwRjdGMTAzQ0I0NjUxRkMxNkU4MjIyRjBFNUQxMAotOjEwMUQ4MDAwQkMzRkM2Q0NEQjVGOTc0Qzc4MkMzREM0MjgwQjUyNzIwRAotOjEwMUQ5MDAwQTcxMTFFNEI4RjcyN0M3RDZGMENDNzJGM0Q2RjREOEYyRgotOjEwMURBMDAwMDNCRTM1MjYzODE3RjcyOUY2OUZDQkQxOUNDNENGRTU2MwotOjEwMURCMDAwRDBGMkJGOURDREVGRUNDMUYzMkVCNjZCNzFFMDlFNTcxNAotOjEwMURDMDAwQzZDQ0E2RjhEQzNBNDk0MEZCRjA2M0Y3RkM1MUU4QkYwQgotOjEwMUREMDAwNUJBMEUxQjk1M0VBNjNCMjIzOUE1RTdCNjhGRjYwRjZDOQotOjEwMURFMDAwMjFCRUVGNDlEMkYyNTRBNTc1OUUxRDg4OUZBMjJGNDhBRgotOjEwMURGMDAwRkIyNEJGRDFENjJENTIxRTk0N0NGMjkxMkEyRkRBMURERQotOjEwMUUwMDAwMTEwQkU2QUQ3REQwMjI0NTU2QkI0OTdGOEFGMTkzMTk2RgotOjEwMUUxMDAwRkQ1RTRDRUFBNEJDOUNFNkUyN0ZBQzFEQjJCMTM4QTFFOQotOjEwMUUyMDAwRkVGNDk1RjY1RkIwMkZGMDRGN0Q1NUJDNEVFNDlGQkE5RgotOjEwMUUzMDAwRjQ3OTE4Rjc1RDcwRkI4NEJEQzJGMzlCRTJDQzJCQzYyRQotOjEwMUU0MDAwN0ZGOUI1Q0Y0QkY3NUIxQUYzRDUwNkQxMzFGNzdGRThCMQotOjEwMUU1MDAwRjY5MDFFN0Y2MDdFMzUyNjlGQkNDNzJDNzdBM0RFODM1RAotOjEwMUU2MDAwRjlCOTJGMjhBODU3M0Y2RDhGQ0UyN0ZCMzcwREVGRkIxMQotOjEwMUU3MDAwQ0ZGRDYzMjEzQkVFRDczRkFGRUQzNzY2OTJCMjE2RTM1RAotOjEwMUU4MDAwQTA3Nzg4Q0U3NkI0RUY1QTMxQ0YxRkY1NEI4NEFGMTBEMAotOjEwMUU5MDAwQjVERkUxNUQyN0U1M0QzNDRCN0MzRjA0NTNGOTdFOEE5NQotOjEwMUVBMDAwOTUwQjlCOUVDNkY3NTdCNkE0Q0IwODdGQjVBMkU5NzlFMAotOjEwMUVCMDAwREEyRjYxNjI4MTU2Qjg3RUEyN0RFRjQyMUY4RjlFRkZBRQotOjEwMUVDMDAwOUY0ODdFMEVDQUZGRkY4MkZEMEI5OTA5RjYyRkZDODcwMwotOjEwMUVEMDAwODZGNzg1MEIxOEVENUY2MDZCRkQzQjcwNUMxRDJEMTI2NgotOjEwMUVFMDAwQzM3ODZGNkExNTJGOEY5MjZDRjRGRDE1M0JFNjUxMEY4NgotOjEwMUVGMDAwQTFGREE2OTRFRjFDMDE3ODYyREVCNjFERjNBODg3RTA3MQotOjEwMUYwMDAwRkUxMjdFQ0VBMTMwQkI4QUYwMkYxNUUwODM3QTQxQUI2MgotOjEwMUYxMDAwOTk5RjZCQThERUUwMjA3QzlBNUVDNUUzOTdBOTAxMEIzMAotOjEwMUYyMDAwRjE5RkYzNENBMUJDN0IxNUNGM0ZGMzIwOUVBRDI2RkM2NwotOjEwMUYzMDAwOEMzOEQzMjhGRTlBOUFDQkY1NDg3QkMwNjJCMkY5MjgzOAotOjEwMUY0MDAwNEY5QUYwMzUyMkU4NzlEMjlDRUY3NUNDRjc1MkZFN0FBMQotOjEwMUY1MDAwRkYzOTg3MEIxOUFEQ0ZCQUJDMTk5OUY4REQ4MTYxRDc2QwotOjEwMUY2MDAwNTkwNDhDRDdFODcyQTY0MkMzOEY4RTFEREFGQkY1RkNBQwotOjEwMUY3MDAwN0QzQzA3MTFDN0M3NTZGMkY3RkJDRjQxRkMxRUFGNkY4MAotOjEwMUY4MDAwOTZDMjc0OEUxMEU4MzBEQTM5N0NCQzdFRTVEQzM0QTI2RgotOjEwMUY5MDAwMUY1MURCRTdDQTZFRDJGMkY0MDU3RUVFRDRDQUI5QzM5NAotOjEwMUZBMDAwNzhCRDhCRjM0MTc2NkI5MjI2Q0ZCNUY3NkY0RjBENjlGNQotOjEwMUZCMDAwRjEwMjlFNkZCRkQ0QTQ5RDFGRDBDRTYyRTJCOTFBOUREQwotOjEwMUZDMDAwQTU3RUMxN0U4RDg3MDdGMkVFODk5RTVCQUY5MTI5QUYxQQotOjEwMUZEMDAwNTAzRkM3QjFDMjYxRTFGQkI4NkNCMTc0RjU0MjcxMkFFMAotOjEwMUZFMDAwQzdGQjcyQzU4NkZEREVFMkYzRkJDNkM2RjUwRjg3RTZDQQotOjEwMUZGMDAwNDdGMzk1NjEzQTVGQjlENTYyQjBDQkQyMzk1QzVEOTE1OAotOjEwMjAwMDAwRUQ3Q0JGOTdGNTkyRUNCMkM0NzFDNTY3MzI2M0UzOEE4OQotOjEwMjAxMDAwQkIzM0EzRTM4QUZBRkE1NjJDQjExMDVGRTk3MDdCNUZGOQotOjEwMjAyMDAwQzNGQ0EzMkQwMDVBM0MxN0NGMzhFRjJERkRFNzVCODc4QgotOjEwMjAzMDAwRUNBODk3MUFFREMxMjMwOUYyOENFNjhGRTU3NjhGOTIxMgotOjEwMjA0MDAwQzAwRjMxN0Y2QzIyRjk5MjIwNEU1QjYyRkQ2RjhBMzdBMAotOjEwMjA1MDAwNzNGRURCOTM2MDdGNUYzRkJDNzRCREM5NjY4QzdCQTg1OQotOjEwMjA2MDAwOTdFNEY3RTlCMUZEODBGOEEwQkY1NTYyRjYyQkExNkNBQgotOjEwMjA3MDAwRDg4RjA2N0M5MEY4QTJCQURBMkFCNzdBOTA4RkZFODBDMQotOjEwMjA4MDAwRjg2MjMzNThBRUQ2MjhCRTA4RTZFODY1Qzg4RjdCRUUwNgotOjEwMjA5MDAwMkVBNEVGRDlCQzc2Qjc0MkQ3RjM3NkExNTMxQzhGRDdDNQotOjEwMjBBMDAwQzgzQ0Q0OTgxNjNGNzdGODQ2M0NFRkY5QkMzMzkyODU4QwotOjEwMjBCMDAwRTc0M0RGRjNGQzlCREZBMUYyRDBDODMxMkNCNzNEMjcwQgotOjEwMjBDMDAwQ0RBMTcyNUU2NDNCOUUxN0JERTVCOTM1QkMxRTY5NkMzRgotOjEwMjBEMDAwMTg2MzNGMTg3QkQ3Nzc1NDA3N0Q3RjYxNEQxRkVBRjc2MAotOjEwMjBFMDAwQTU4NjNDN0VDM0Y5QjVCOERGMTRFNzkzRUVCMDUwRENBQgotOjEwMjBGMDAwMzc1RERCRTdDQjJBMzVGRjEwNjY3QTIxREQ2NTk2NTAyOAotOjEwMjEwMDAwOUU5RTgzNzlGN0Y1NjFGRDA4MkU3N0ExQkUwNUNGNDcyNgotOjEwMjExMDAwNkRDREYzRjEzODM0RTM3QzgwOEREMEYyMzg1ODU4NDVEQQotOjEwMjEyMDAwN0Y1NEFCQ0Y0REVGRjdFQjc3RkJBQzVBMUUxOEVGRkZBOAotOjEwMjEzMDAwRTgwQkZDNUMxRjdERkYzMjYzRjI0OEI0MUIxRDVFMTY4QQotOjEwMjE0MDAwNTNENkNGODM2NjkyM0MxMkNGNkY2REQ1RjA0MDJGQkYzMAotOjEwMjE1MDAwOTQxRTBDOEQ4REIyMkI4RjVFNzU0NzMxQ0VGM0MzMTc1NQotOjEwMjE2MDAwRUZDQTQ1N0RFQTZBRUQzQjUwNDZCQzZBMUNDRkYxN0I2NQotOjEwMjE3MDAwNzVGMkRGRTYyMTFGN0Y1Qjc0MjlFNDNGNDgwRkZFMDhGQwotOjEwMjE4MDAwRjlDNjQyNEZDQjI0MzdFMDRGQTUzQzhEQkUzNzMzNDVDRgotOjEwMjE5MDAwOUQyQjIwNUY3MTVGQ0ZDN0U3QUUwQzA4MEI4QjA3QkU4RQotOjEwMjFBMDAwNDMzMzM0Mjg5MTlGOUUwNTNCNDRENEI3ODc5RTBDQzg4NwotOjEwMjFCMDAwMDg5RjNBNUIyNDRCODI3NjdFRTMwOUJFODBFM0ZDNzg3RAotOjEwMjFDMDAwRkU3QkRGQTdCQ0JDNjE0NzhGRTFCOTkyNDdDREVERDM2MQotOjEwMjFEMDAwNUQ4ODRGM0VFRDFDNjEyNkQxQkU5QURFRTFBMzc2NkE5MgotOjEwMjFFMDAwREZEM0UxRkI2QkYyMDQyRDBFREI1RDg5NzJFMTVBQzY5MQotOjEwMjFGMDAwRjExNkNCNThGRjRERUQ5Q0I0MTkzMjNGNzc3MzQ2QTlDOQotOjEwMjIwMDAwOEZCRThGMzY4QjQ1MjRDNDg3MTk2RjA3NUMwQ0U5RTNCQQotOjEwMjIxMDAwRkE2MDY5QkM3MzJCRjQyQkNCMzA3QkEzRTlFNzFBNkYxMAotOjEwMjIyMDAwNTQxOUZFN0RCMzMwQjZGQzJEMjVCNkZDRURGMkNGMEE3NQotOjEwMjIzMDAwQTJDQkQ1OTJGRjk3MDhDRjk3MDUyRTdGRDRDOTVDRkUxRAotOjEwMjI0MDAwQzhBQzczMzVDQUM3MUYzNUM5MTMyOEFFRUUxMTU0MkM1QwotOjEwMjI1MDAwOEY3OTY5MThFNTI1QjEwQzlFQ0YzMERBOTUxREUyNzBCMwotOjEwMjI2MDAwQzhEOThBRjM4QTgwOUNERkU5QzFFRjJDRjFGM0FGRDJBMQotOjEwMjI3MDAwREVCNkVDQzBGMzE1OThEN0JCMTVFOUYwNDU3MzIxRTU0MAotOjEwMjI4MDAwNkRBNjM5NkFGRUI1ODVGNDE5MjdDQjIzM0VFNURENEFGNAotOjEwMjI5MDAwNzhFREI0NzlGMUJCMEY4NzlEM0MxRkExRjUyMTEzQzVFMwotOjEwMjJBMDAwOUIwNDk3Q0RFNDg3RTdDNDlEMTI5N0ZGQ0UyNUQzQjE1OQotOjEwMjJCMDAwNUUyQzgzMDUwMTU5RERFM0U2REY2RDZBOURDNENDQUI3RQotOjEwMjJDMDAwNEI3MEREOTRCNzQ5MkY3MkRBMjhERkJGRDI1NUY4NUQyNQotOjEwMjJEMDAwQUMxNzVEMTYzQTBGRTJCMEIzMkNBOEY1QzdCMEZEMjdENgotOjEwMjJFMDAwOUQ0QkU4N0RFNEQxNjYzMEM4N0JFQ0RDQkYyRTgyN0Q1RgotOjEwMjJGMDAwQkM5QUY3NEZERjY3MTM1NzMwQUQ3RjFCQjM2MEI5ODZDOQotOjEwMjMwMDAwNTFGRTdFOEY1QkU2RTNCRERENDRGMTEwQUNCRjkyQzZBQgotOjEwMjMxMDAwNjdBMzdBRkRGQ0MyODFGREIyRDMyNDNBQzc1RDYwNUEzRgotOjEwMjMyMDAwN0NBQzg1Q0E4RjY5N0NCMEQ1MkMxRjQ2M0M1NUZGQzA1QwotOjEwMjMzMDAwMThBRTQ3QTVFQjUzQTIwM0QxRTQ1MkU4QkMxRDNGQ0IzNgotOjEwMjM0MDAwRjVBNDMxRUVCMzgwRTdDNTM0QjkxQkYzRDlDNTE1MkUxQQotOjEwMjM1MDAwQjI5QjUxRjNDMUZBRTFGODkzRTg1QUYyQjMzMkNEMzVBQQotOjEwMjM2MDAwNDNGREY5OEYyMzFFOEYxMjU4MDBENzIzMzg4RUVGQTMxOQotOjEwMjM3MDAwN0RDMjc0NzQxM0U1NTczODAyNTYwNUZBQjFEQ0M0Njg5RgotOjEwMjM4MDAwN0Q5NUU0RjhGQjY0Qzc4RkUzNzQzQTc4RkRDQTMyMzA3OAotOjEwMjM5MDAwOEY0MzcwOTU3QkYxREFFQTJDRjdFMkJFOUYxRUI3OTI2RAotOjEwMjNBMDAwMTE4ODJBQzc1OTk3MTBFMkNEQzBCQUQ4QkE0REUzNzA0OAotOjEwMjNCMDAwM0QxNDJGRUExNzVGREMxRUQ0M0I3MDNFMUE3RjFEQTYyQQotOjEwMjNDMDAwNzhEMTBFQ0Q3NTQxM0JDMEY3OTUyMUYxRTcxMTFDQzdCRgotOjEwMjNEMDAwRkQ4QjlEREFCOTdBQzZGQTk5RTM0QzVGRjczQzBERjhBQwotOjEwMjNFMDAwRjcxNUU3OTkxNjNCQ0ZBRjcxOUM2MUUxNkIxOEE3OTg4MQotOjEwMjNGMDAwMDVFMzczMEM4QzBGN0VEMjM5NUZENzNBNEM4NDVGRDdEQwotOjEwMjQwMDAwRUFFNzJEMTVDNkVFQkIzMEVFQjM2MDZDRDU2NkU0MzM1QgotOjEwMjQxMDAwNTc2QkY5QTMxNUM5RkY0QzdFRkM2QjQwQ0Y0N0I5RDY2QgotOjEwMjQyMDAwOUJGQzgzNUNDQ0RGOUM5MUQyRDJDNjg5QTNFOUVDNDJCMQotOjEwMjQzMDAwRTRDNzM2ODFGOENFMzc1OUY3MUFCQzdGN0U1QUYwNzE1RgotOjEwMjQ0MDAwNzcwRUYxRkREQkM2MERDNUYzNTM4MzA1QTk1MEZFRDAxMQotOjEwMjQ1MDAwREM5RUJCREM0NzdDRjFGNjcxOTM3MDlDMTFBMkJCNkJEOAotOjEwMjQ2MDAwRjE3QjZDNDg3NzMzNDM2RDU4ODYzRTlBRThEQzJEQTBBQgotOjEwMjQ3MDAwNDNBNDVCOUQwRTA3OEYxRkU4MTI5RTFGREVFNEEyRkRBMgotOjEwMjQ4MDAwNTBEQjU4Mzc2RDY4Q0I2MEVEMDJGN0I3MzQ5MURDNjJGMgotOjEwMjQ5MDAwREU5MTAzRjMwNEEyOUQ2MTZCQTI3OUZDQTQ0NTI1RjlBQQotOjEwMjRBMDAwNzBCNUZCMTEwOUNCNEYyQUMxRjUzOEFFMzlFMzNGQTIxNQotOjEwMjRCMDAwRjNGMjU5QzZGQzAyQjQzQjYxQkNGN0UxM0NGRUE3QzY4RgotOjEwMjRDMDAwM0I3ODlGRkFFN0VGQTNGODQ3RDlBM0NGNkI3NEFEREI1NgotOjEwMjREMDAwQTM5RTI0RDAyNzYwOUM1RUMxQTUzMEQwMUZGQkVENTM4NgotOjEwMjRFMDAwQjM4REYyMTIwNkY2RjU0NjZBNjlGRkIwOTAxMjQwNzk5NAotOjEwMjRGMDAwQTZFRkVCMzVGMkREQTk1NzcyQkVGQkUxNzI5N0IyOUFGNwotOjEwMjUwMDAwQ0UzOURDNEQ3NjY5RTNGNTBFN0RERjJGRTk1RjhENEIyQgotOjEwMjUxMDAwNENEQUJFNUY4MUU0NEEwM0IzRDFCOTQzRkRERkFCODMzQwotOjEwMjUyMDAwM0YyMTZERTBCQjFFMDc3MEZGNkZFOUU3RURGRkY1RDJCRAotOjEwMjUzMDAwRkU2Mjc1MTU4RkQzRjdEQjc3RjUzMkI3NUZGNUVGNDNBMgotOjEwMjU0MDAwREM5RUFEOUZFM0NGRjU5NEU1RUM0QkQ5Qjc3MUY2MDU3MgotOjEwMjU1MDAwOTNERUM4NTI0QzlBRkRDQUY1ODU4RUM5NUU1OTY1MTQ0MgotOjEwMjU2MDAwNUZFNTdBRjg1QzBCRDU2RjRDMEFEMUY3NTY2QUM1NzZGMQotOjEwMjU3MDAwNDI5MkUzRTNEQ0JBREZEMzRFREY2NUIyMjhGOUM4MjcyNQotOjEwMjU4MDAwRjQzOEVCOUNEQ0UwN0YyMjVFMkYyQ0Y2NjcwOTMwOTU1NwotOjEwMjU5MDAwNUEwQjhGOUYwMjFENkNFRDgzQjdBQTU4RDM5M0Y4QkREOQotOjEwMjVBMDAwQUU2QjU4RDNBRjREMzk0NDA3NjcxMERGRTc4Q0Y5ODgxRAotOjEwMjVCMDAwN0ZDNzZCODAwRUNFNjIzQjM2QzZGRDAxRDc2QTcxQTIyMwotOjEwMjVDMDAwOTczRjdDQUEwREQ3RkRCQ0MwRjhGRUFFNDJFM0ZFQUUzRAotOjEwMjVEMDAwQzA5RkM3RjE3ODk2RjYzRDlFNThCRTEzMzU4RTkzNjYyMAotOjEwMjVFMDAwM0UwRThGMjhEMjM4MkVDNDFCQzcyMDNBNjQyMUVBMUYyMgotOjEwMjVGMDAwRDZCNzg5RjY5RjFCRjBDODM4MUVFMUUwMURCNDNGNkVDOAotOjEwMjYwMDAwRUJDRDRDMTYyN0EzMUNFRkIzMjMzQzQ3MjA0NkU0RTA1OAotOjEwMjYxMDAwM0M4M0M5RTMyNzkxM0MwRkUyQjk2OEJBNUQzRDY4RENCMQotOjEwMjYyMDAwQTI4M0Q2RjVDNkI5RkQ3OTNBQjMzMkNCMzA0RUM0RkI5RQotOjEwMjYzMDAwN0QyQ0I5RTE1MUY0N0IzNERFNkMyNkZFNUU3RDcwMkM3RQotOjEwMjY0MDAwRTk2OUJEQUE1NUM2MjQ0ODU2QzlGMzZCMTRGODBGQzdFQgotOjEwMjY1MDAwMzU4N0Y5QUY3MjQzM0JEN0M5RDU3NENFREFGNTMzOERFMAotOjEwMjY2MDAwNzkzOUVBM0Q0REYwRkUwRDVBOUVDRjhERDc5QjhGNDdBRAotOjEwMjY3MDAwRUI5QkU3Q0QxQkNDMDgwN0I1RDZEMTI0NEVDMUY2QTQwMQotOjEwMjY4MDAwODFGNzdEODNFMTMyRTg5Q0E3MzZDRTlGMThFODM5RDhFMAotOjEwMjY5MDAwN0U2Qjc5MjdGMUE3NDQ3QzZBRkM3ODdFMkUxNEI0NTVCMgotOjEwMjZBMDAwRjA3N0U2RkI1QzM2RkU0QkU0RkI0Q0QwQ0U4NTdBQ0Q3MgotOjEwMjZCMDAwMUNBMUYzM0I1RjFGQkE3OEVCNzI5ODY3QzEwRjhCRTlERgotOjEwMjZDMDAwRkJBNTU3QTUyRDdERjIyMTI4M0ZCRDY1MzQ5NTVGNEZCMQotOjEwMjZEMDAwQkJGOUI2QTM1OEJGM0Q5RkNBOTVBNjhGRTYyMTNEMTQwRQotOjEwMjZFMDAwOTZDREJEMTZCRkZCRkE5QTlEQjc5MzkxMTRFQ0E4ODZDMAotOjEwMjZGMDAwRTczMkM2NjU0RkMwMDM2MTJBMkQxMTdBRUU5QkUzRUJFQQotOjEwMjcwMDAwMjdBMjNGQTYzMjg5OTc4Rjk0RkM3NjAyOTVCM0I1RjI0MwotOjEwMjcxMDAwODQ5NzQ3NjNGOTM1RTFBMzc5RjFGOEUyOTg0MkExQkJDOAotOjEwMjcyMDAwMDhFNDZENjUyQTdGN0VFNjg0Njc4NkExMUQ1RjU5QzEzNgotOjEwMjczMDAwQ0I2Mzk0NjlFQjcyQjBERUY0Qzc3OUYxRjRBNTA1RTNERAotOjEwMjc0MDAwRjk3Q0E3NUUzOERGMzZDNDgzNjE2MUZFM0REMjk3RkMxOQotOjEwMjc1MDAwRUZEMUY3MzkwMjIwNkY3MUZGN0VBMDlDQzdFMTAyRkUyNgotOjEwMjc2MDAwMTIwOUJGMDc1NUUxRTdFNUU5OEU5NjRDRTQ4M0IzODI5MQotOjEwMjc3MDAwOTY1MjhDQkJDQTBFNUYxQjdFMUYzMUE1N0NEQTI0NUM4RgotOjEwMjc4MDAwRjdFOUEwNkU2MzlDMTNFODZCMDlDMjdGQ0U2NTFGNjVGNQotOjEwMjc5MDAwQjk0ODJGRDVFOTRCMzYxM0JEMjczRUE3QjE5RUFGNUI5NQotOjEwMjdBMDAwMkMzRDQwN0IyQjkwNkVFNjVDMUUyQjNGMDdEMUFCMDE4RQotOjEwMjdCMDAwMEZBRkI1OERFMDc4MDc3MkQxNUEzRTk4NUU4REZDOUJDNQotOjEwMjdDMDAwQURFOTE0QTJFOTc1MUJFMkE1NDg3NEJCMUFDNzY1MzFDRgotOjEwMjdEMDAwRjU3OUYxRkUyODQxMTkyRDdGMEVGRDlFMzdCRkVCQTM0MQotOjEwMjdFMDAwMzgxMERDMTAyRjhGQzMzN0UwNEZEMkY1N0MzRTBBNTlFQQotOjEwMjdGMDAwNEVBM0ZDNjU5RUQ3NzNGMEI3RjQzRTZFMDcxMTMzQTk2NAotOjEwMjgwMDAwRkY4NzcxRkU2QzBEMUZDRjM2M0NCRjQ0NDQ3QjJGRjgxMQotOjEwMjgxMDAwMDRGMjg5ODYwQ0ZFOUQ0OThDRUIyMzlENjZFOEZDQUE5OAotOjEwMjgyMDAwMkI3NkJFQURFNUNBQUQ2RTcxRjA3ODREMzYwRUM3RUJCNgotOjEwMjgzMDAwMzU3REVDQURFNkMwRDAxMjE4RUM4REFDQzk4Q0YzN0RDMwotOjEwMjg0MDAwMkNEOUE1NjIzQ0I3QjE4NjlGNDNGOTJGRTlDMTI3MTE2NgotOjEwMjg1MDAwMUVBMjQ5M0QxNDg2RjI0MkU2RTdERkFGOTRGQ0JCQzZGOAotOjEwMjg2MDAwNDdFOTVGMEREQUJBMzREOERFQTU3QzM2RkNDM0YzNTFGNAotOjEwMjg3MDAwMDZDMUEzQ0JDODQ3NjNFNzNGQjAyRTdEOTk3OENEQzQ4RQotOjEwMjg4MDAwRjM1NzcyNzA5RUNBNUEzMUNFN0M5OEQ0QjQyRURBNEY2OAotOjEwMjg5MDAwRkZEODE3RkFFOTE5RjdCNzI4NTZFRDNDOTVDOEJDNjg3OAotOjEwMjhBMDAwN0Y1Q0FCQjNFOUYxNjgzQjE5Q0MzMjNBMDdFOTQ4NEI5RQotOjEwMjhCMDAwMkU4Qjg3NzdCQTlFNzQ0NEQwRkM1QUEwRjdBMjNFRjBDNAotOjEwMjhDMDAwNDlEMkRGNDgzRjAxOEEwOTk4QjNEMEFGMzU4QkY0MTg1RAotOjEwMjhEMDAwQzE2MjkzMzE3RTlENTE5MzQxRjhCQTA5RjQxMkY0QjM2OQotOjEwMjhFMDAwQUIxNTlEMzlFNDJGREYyRTMyM0NCNzYwMDAwRTMwMTI1RAotOjEwMjhGMDAwREYwMDdFN0UzODNFOUI3RkY3QUIxRjFFMkFGMTUxOEI5NwotOjEwMjkwMDAwNDk4OEFCNUY3RDM4REVBNDlEOUZDQUY3OTczNkQ4QUM2NwotOjEwMjkxMDAwM0NGRjUzRkI5RTg1OUVDN0QyNjAyQjVFRDM0NEYzQjMyRQotOjEwMjkyMDAwNzFGQTMxQUNEM0EwQkMxNjYzOUU5QzJEOURGNDBCNzkzQgotOjEwMjkzMDAwMDI1MzUwMUUwRUNFODMzMURBMDkyQUNERTM1QkZERjEzRQotOjEwMjk0MDAwMDVDNkY1OUYzQjlEQTRGRjdDNEI4QjJGMDhCMzNGQTU4RAotOjEwMjk1MDAwRjU0OTA1RkNCMjdBMzA4RUUwMTVEMDVFNDkyRDNEMkE0RQotOjEwMjk2MDAwQjFCMTAzREY5RkM0RUYzNkExM0ZBQjJCM0JGODdGQzc2QwotOjEwMjk3MDAwNDdDNUUzREY5Q0Y0MzRFNTg1MUMzM0YxMzhBODExM0VFQwotOjEwMjk4MDAwNjY4NUM3ODE2NDE2QTY3Q0Q1MDY4RDVGRkQzRjM3OUNBMgotOjEwMjk5MDAwMjA0QTAwODAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDA5QgotOjEwMjlBMDAwMDAwQkU1N0QwOTc4NTQ0NUI2N0ZEREJFQkQyNUU5MjRFMQotOjEwMjlCMDAwOUQxMDQyNDI1ODNBQUM0MTAyNzYyNzIxODA2QzREODBFRQotOjEwMjlDMDAwODgwQTRDNTg1NDUwODQxQjg4NkM1OTA1OUQ0MUM3MzE2NgotOjEwMjlEMDAwMUQwMjg4MEVDRTg0MjcyQTRGNTExQjA0NDQwNzk4NDZCNwotOjEwMjlFMDAwRDlENEM4QjQ4MDg4Q0YyRDZFMzM2RThGNDk1QzU5MjVGOQotOjEwMjlGMDAwODY0MTcxQzYzN0ZFQ0ZFRkQ0QkRBNDZGMTMwNjdDQ0JFMgotOjEwMkEwMDAwRjc5RkY3M0RGOEI0MzhCN0VBREVBQTNBRTdENEQ5RUEzNwotOjEwMkExMDAwNTRCNUQ4NjMzQkQxOTgyNUY4Q0Y4RkRERjBGRjRFNDlGMAotOjEwMkEyMDAwNUZGNjE1NDIwNTNDMDI3MDQwODhGNjQyRUNFRTUwRTQzOQotOjEwMkEzMDAwRjA1Mjc5NTI2OUM4NDdFNURGN0FCQjg1MTg4MDdBMkQ1NAotOjEwMkE0MDAwQjNBODlGMTA0OUVFQ0M5MTQ5MUUwMjdGRjhGMUM3MUYzMQotOjEwMkE1MDAwRjM4NTk4ODJBQUVFNDI3Q0RBNUQ0QkM0N0JENzhCQTJDOQotOjEwMkE2MDAwMzE1NjQ1ODhFNEIxOUE0RDczMDkzMTQ2QTVGRkU1MDkxMQotOjEwMkE3MDAwRDFCMjQ1MDkzQUU4Rjk2ODdGOEM0NUE0MDg1MTc5Qzg3NAotOjEwMkE4MDAwMTYwQzEyQkNGMDU1RUE4NEUwODU4RkFBNDE0MTcwOEI4OAotOjEwMkE5MDAwRjBBRTY5NDRGQjgwQzMxREEwRjJBMUI4RkVCRjFENEE4MQotOjEwMkFBMDAwRTU2NzhGREFCQzBFRjQxQkYwQkY5MzQ1RkQ5NkEwNUY3RgotOjEwMkFCMDAwODI3QkFGQjEwODhGNTM5RjE3RkRENzI3MTgyQjNDNTk0NgotOjEwMkFDMDAwQUQ3MERGQ0RDOTI2Qjg1RkE4QTNBOUZERTU3QkJBOTk5MwotOjEwMkFEMDAwRUE3REUxQ0I0Q0Y1Qjk4NzcyNENGMDgwODYyQjRDRUQ0QQotOjEwMkFFMDAwMDc3RTUwNjA4MjA3Mzc1RTZENkEzRkU0QzgyNDEzM0M1RQotOjEwMkFGMDAwQUNGOTA2NTNGQjExNjc2Nzk5RUE0QjEzMEEwRjJFQTYzMAotOjEwMkIwMDAwRjkxRTRDNTM4NTMyNDg4ODkxQTJENEQ0QkU1NDJEQjNCQgotOjEwMkIxMDAwMEIwQkZEQTNDRUY2NjkyM0JENTc0NTdGOTk5RUVBNzQ0MgotOjEwMkIyMDAwMkJGMDdDNjY4RjIyREE2NTBBMzE3NzhEQUMzN0RFOUIxRAotOjEwMkIzMDAwNTdCRjZBNzkwNjk1RjM4M0U2RTdBNUMyREEwQUQzN0IyNQotOjEwMkI0MDAwOEIzRjk5RkZENjgxODhGRTdBQTcxNDVCOTJBOEJDREFFNgotOjEwMkI1MDAwMUI5RkYyNjUxQzI2MkMwNkZFQTgzMjVEQkQ2MUQwRTlFNAotOjEwMkI2MDAwM0RENUVCOTBBNDYwM0EyRkRDQUEwNEVGMjUzQUY2MTI4QgotOjEwMkI3MDAwM0QxRjAyREQ4OENFMjJFODAxNUQ2NTdEQ0I1QTM1MTgwOAotOjEwMkI4MDAwQTA3RUJFQUI5RUY3RDYwMTFCQzE4NzcyRDczNDEyRkQ2MwotOjEwMkI5MDAwRTdENjM4REMyQUQ1M0JEMkNDRjQ4Q0YxOThFOTE5OTdFQQotOjEwMkJBMDAwNjVBNjY3QkNENzRDQ0ZDNDQxNjY3QTI2RjlDREY0NkNENAotOjEwMkJCMDAwMzdENjRDQ0ZGNjQ1NjY3QTc2OTg2QUE2NjdCQTY2QTY4NwotOjEwMkJDMDAwNjdDNjNDMzMzRDNCNTc5OUU5RDk3NUIxOTk5RTk5ODFDOAotOjEwMkJEMDAwMDVBNkZBNjhGRUVEQkU2MkExQTlGRUExQjhCRDVGNkFCNgotOjEwMkJFMDAwODQ4Nzk0OEVBQURCNDE0QkFGNjdERDFEQTZFRjA5NzU4NAotOjEwMkJGMDAwOUM3RDE5RTFBQjM0NDMxNUFBQkI5NTBGMDJGNDU3QUU4NwotOjEwMkMwMDAwRUIyQTVFNUY3Mzg4MEYxRTI2M0E5QzExMkIwRjY2NzhBNQotOjEwMkMxMDAwQ0VFNzg3OEEzREFCRUM1ODlGM0Y5NTFGN0UwRDNFRTg3RgotOjEwMkMyMDAwREJDQTA3QzQ3Nzg5RjhDRThGRjgzM0UyRkNEMkEwRjM3MQotOjEwMkMzMDAwNDRBQjdGOTU5N0U0QzgwNkFGQjYxQUU1RDRERURGNzRERgotOjEwMkM0MDAwQjE5MkRDMTA0NUM1QkQ4QkUyODU3MDg5RTYxOUUwQTcxRAotOjEwMkM1MDAwMEE5MUUwQkQxN0E1RjM5MzRDRjAwQkZFMzhEMkU5N0Y0MwotOjEwMkM2MDAwN0VEMUMzNEE3ODUzNzRCQzg5Mjg3OUE2RDRGRjI5MTMyRQotOjEwMkM3MDAwRjM1RTRCQ0NBOEEyRkQ4NDkwMDJGOUQ1NDkzNEE0NDM1RAotOjEwMkM4MDAwM0VBNThCMkEwNTY1OUFGMEFFNTAzMTZFNEZFNzU2Rjk5NgotOjEwMkM5MDAwOTdDMTg0QjE4NEU5RkQwRjRCNkNDQ0JGNEJFMkZBNkY1NgotOjEwMkNBMDAwMDE1RjdFNTAyQkY5RjIzNDlBMEMxNkUyMDYxMUIyRTE2NAotOjEwMkNCMDAwM0IxRkM2M0VEMjE5RkQxNTEwQzI5NUMxQThBQ0JCMDk3OQotOjEwMkNDMDAwRTM5RjhFRjE3Qjg1Qjg0OTM0REFGMEYxOTk0MkQ4NTEwRgotOjEwMkNEMDAwMTYwQjBGOTdCMzg1REY4RUY3NkYxNkUxRTU5OENDMUZDMwotOjEwMkNFMDAwNTNCNDVEQzA0Nzg1QUE3NTREMDUzRTNBMzU3NDgxOUM0NQotOjEwMkNGMDAwMTVBRkI3QzNBMDJGODg1NzQzNUVCRjhCN0Y1MkJCRTM4RQotOjEwMkQwMDAwREVBMkJERjhDRTI4QTdFN0Q2MDcwODNGRkIyQzYyNUVGRgotOjEwMkQxMDAwODhFODIyQzZCNUUzNzEwQjZCNTFCRjQ5RkREQUZBQ0VFNAotOjEwMkQyMDAwMTI5NkVGMkYyODlBMDY3QzA3RDI5RERFOEQ0MDcyNUFBQwotOjEwMkQzMDAwRTgxOTg1RTY3NzU5QjIyN0U3REVBNEQ2RjY2Rjc4MkQzNQotOjEwMkQ0MDAwREM5RTU4MkZBMDUwRkJBNzc3QzQzMkJFRkE3NjU4OTc2NgotOjEwMkQ1MDAwOEM3OUZERDQ3RTNGRjRGQURGQzNCODhERjYxNzlCQUZCNAotOjEwMkQ2MDAwRERFRTVENzAxQkY1REJBQzg4QUFGNTM0ODhGNzc0QkEyQwotOjEwMkQ3MDAwNjQzODg4N0Y2OEJDMTk2QTgyQjcxNjc0OEI5QjcxQjBGRgotOjEwMkQ4MDAwM0RFMUExQTI4M0Y2MjlGNEQyRDRFQkFGNUEwRTU4RDk3MwotOjEwMkQ5MDAwRDdDRUIzOTBDNjc3QUFCODMxMUZFMzI1RkM3Rjg5RkU1MgotOjEwMkRBMDAwQ0I5Qzg0N0Y5QURBQzlDRTVBRUY0NDMwNDU5MUM0M0YxOAotOjEwMkRCMDAwRkRBMzVGNTE5QkUzOTdFMzM5QTBFMzdGNzcwN0VEMTQxMQotOjEwMkRDMDAwRkFEOTY3NjlFOEUyMDUxREFEMERGOTRDNDdCNzlDRDcwNAotOjEwMkREMDAwNDlCQkM0Q0I4NUYwNTAxMEQ3NzkzQUYwNUZFMjcwNzhFOAotOjEwMkRFMDAwNTVDMjY3ODEyMkJGRkI3OUUyQ0MxOTk1MzRFRTlCMkQ0OQotOjEwMkRGMDAwNDVBOTYxRDUzNEVFRkZFMDcxQkI4QUJCQTY2M0RDMzYyMgotOjEwMkUwMDAwN0REQ0NFRjYzQURFM0REOTU4NTcxNzFBNzcyREJFNEZFNgotOjEwMkUxMDAwNzgwQUZDNEEwOTZFQ0NDNEYzRjA1MzgwNzcwQkI3RkJGOQotOjEwMkUyMDAwNUUxRkFEMzk4QkQ0Q0JDRDM1NEE3MDNERDVCRkE1RTMwMAotOjEwMkUzMDAwRjk1MTFCQjVDM0JBNzQ4QUU0MUExQURGQ0Y4NjJENUIyOQotOjEwMkU0MDAwODc3NkJGRDY5QzNDRUU4REMyN0JEOUVBNENEMDQzQjA4RQotOjEwMkU1MDAwQkNDRkI4NUIwOUQ2MTIzQzRCNzg5OUVGNEI0NDUxOTdFNQotOjEwMkU2MDAwMURENDJFQzNBN0E1RkE2ODFDN0Y4RUZCRkI4MDRDMEJEQwotOjEwMkU3MDAwMkZFMzAxRUZEMTc3NzYyREU5RTBCRDE3RDBEMDRCRTNGQQotOjEwMkU4MDAwRkYyQzkyMUNFODdGRDI3OEE5Nzc2RUQ2RjEzNjQ1MTRENAotOjEwMkU5MDAwRjEzQUJENEU1NDcxNDkwQkZFNjQwNUI1OUI0QUZGQzIyMQotOjEwMkVBMDAwRkEyNEI4MUZDNjM3MERCMEFGNzU1RDRGMTcwRDVDQ0U1NQotOjEwMkVCMDAwMTBFRTE3MUJFOTVCRUZENDc0QjhFRDc2NkEzM0M5RDIxNAotOjEwMkVDMDAwRENDNUFFNjI5REQyQkFDRDY0RkNGN0YzMTFGRUJGMUQyNgotOjEwMkVEMDAwRjNGNjYxMDU3OEJGOTNFNDE4RThCREJBRkQyNUYxRjE3QQotOjEwMkVFMDAwNDQ0NUUyOTNENkVEMDBFMDgxRDY2RDlFQ0YxMkIxN0VDRgotOjEwMkVGMDAwNDZCNzk3RkM2Nzc1RjdGQzQ3RUI4NzA0NjM0MjdBQUFFRAotOjEwMkYwMDAwMTA1NzRBNTEyODFFM0E5RDIwNTI2ODlFMEREREQ0QTBDQwotOjEwMkYxMDAwMjMxMzdBRkE0RUVCMEU5QTY3MDNEOTEzMEVDQ0RCNUZCQwotOjEwMkYyMDAwRENGMTE0RDU4RjI1N0Q3QkFGOTRBRkYxMDE4MjI3RjhCQQotOjEwMkYzMDAwNTU3MTJGRjM0MUUzRDJGOUY0RkNGNTQxNTQ0RkVENUZBNQotOjEwMkY0MDAwQTkxMUYxNzkwNEJGRTJCMzc5NkI4OTBGQzc5Q0Q1MEU0MwotOjEwMkY1MDAwMjQ1MjM5ODFFNDdFOTg1QTVGOURCNjZBMzRFQzgzQjE3RAotOjEwMkY2MDAwOUQ0ODhGNDRFODg5QUI3Qjk4NjE1QTA4OUQ0MEE3NkJDOAotOjEwMkY3MDAwNzQ3QzhGQ0IzNkVCOUQwOUQwM0I0NkZCMzZGNDBFQzlGMwotOjEwMkY4MDAwNTcxNUY4QkREMUE3RUI5RkNCQzQ2NUQwM0ZGQkFCRjc3RQotOjEwMkY5MDAwODhDRjQ4QkYxODdBNjgxNENEMzA5NDdENjEzRDY0QjUwMAotOjEwMkZBMDAwMTdDQ0Y2MzFERTNDNzZBQzhGNTk1NjZBMEY3Q0JCQjUzOAotOjEwMkZCMDAwOEUxMzIzRDZDQjRCRjkwQUUzRDc0MzhBQzc0MkYzN0Y1QwotOjEwMkZDMDAwRUI5MDFBMDQ3RUFDRkVGMDEwRTA2RkUxOEIwQUYzRTk5RgotOjEwMkZEMDAwMjMzRUFEMDJERkZCREFENjM4MDc3Q0QzMzAzNDM3NTFERAotOjEwMkZFMDAwNTBGRjlGNTZEMzQwN0FEM0ZBQUQ3NjBBM0ZBRDg1MkY3NgotOjEwMkZGMDAwQUJERDBDMUZBOTRFRTNGMjU4QjU4N0NCMTNENTU5NUM1NgotOjEwMzAwMDAwRkY3NUI1OTdFMUZEQkVBMjVGRTA3QkIzNTY3QzYzRDU0QgotOjEwMzAxMDAwQjJEMTdGMTVEQjQ3OEI2QUFDMDJGNDVBMTRCRjUwQzJBMQotOjEwMzAyMDAwMzZBNzFCNDJGOEVFQ0UwNzJENzEwNERGMUQ1NEJDRDAyRAotOjEwMzAzMDAwOEJGMzc3MDQ5N0MzNEMyQkFERjdEQjVEMDQyRkVBOUMzMQotOjEwMzA0MDAwM0NDQTg1RjYwRjI4Q0NGNTczMEU1NTFEQzQ3NEJGN0U5RgotOjEwMzA1MDAwRUZEM0VCQzY4QkQ2Rjk5NjlGNTU4NDQ2NEIyRTdCODBEQgotOjEwMzA2MDAwN0YzOUZBRkZBQTdBMTA4RkVCNjhCNTlGQzdFNUFGNkY3QgotOjEwMzA3MDAwM0FEODhFQkU3N0JDN0EyQ0MzRkZFRTJCNUEwOUJFRjUyOAotOjEwMzA4MDAwOEI2RkQ4OEUxOEJGQTVDOTBBM0I2MzhDNUZGMTgzQ0VDNgotOjEwMzA5MDAwQzNGRDIyMTgyNDdDQURCMTQ5QkRCMjg2RjQwQUU0QzA1OAotOjEwMzBBMDAwQzg3RTkzMUVCRDU1NDBFRTZCMEZBMjlGNkI5MzY3OEYzQQotOjEwMzBCMDAwODFCRDNBNjE1MDMxREJBRkQ3RkYyMEQ4N0UzNUY4RkZCNAotOjEwMzBDMDAwNjJFQkM4MjMxQUJFQ0VBMEZFNEUwNjI0N0U1QTc2QkMwMgotOjEwMzBEMDAwQ0I3MDhCOTVGMDQzMzNERUJCQTNCNDU0OTA3REQwNzI5QwotOjEwMzBFMDAwRjYxREY5OUNEQUIxOURCQTUzQjY1QjY4OTNFRDE2RUUwNgotOjEwMzBGMDAwRkM3NTMyM0Y1Nzk0NjYxMUExRUY4RTEzMUQwNUUxMjEzNwotOjEwMzEwMDAwQ0U5OUYxRThFNzg0OUZFMzVCN0Y5MUE2NDVGMEQ3RjE4NAotOjEwMzExMDAwRTREMEI3MUY0MTRFRkVCQkM1QkI5RUY5NTRGQkVDNzkxMgotOjEwMzEyMDAwQzhEMUE1NkU5NjMzNUZEQjQyNUYzRTBDMzlEQjk5RjQ2NAotOjEwMzEzMDAwMkFENzU3QzU0RDIyM0VBQkIwMEI4REY5NEU2ODdEMDFBNQotOjEwMzE0MDAwMUY4RjE1MzM4QjVDQjIzRjRGNkZGOTFDRkNEODZCREJDNAotOjEwMzE1MDAwNDNERDdFRTk2OUVENkY3M0U4RTY4RjFFMDYxREI2N0RERgotOjEwMzE2MDAwOUM3MDE5OERCNzhGMkE0MjJBRTYyRkU0MzgwMjFCNjIyMQotOjEwMzE3MDAwQjk5RkIyNjdFRTQ5RjYxM0ZDOTQyMjVBNTRFNkY3MjA0MQotOjEwMzE4MDAwRjNGM0FGNkQ2MjJBRkFDRDUyQUNGNkM1QzlFNDU3REQ1MAotOjEwMzE5MDAwQjczQjAzRjNFRUFEOEEyQTk1RDZFNUVDREYzQzk3RjExOQotOjEwMzFBMDAwMUNCREY3MjRDOTIyOTVDNkZGODJDREZCRjUxRTdDRjcxNgotOjEwMzFCMDAwNTExQTNGRjVGQkU0N0RFNTM5OTA4NzI1RkYzMkZGMzI1OAotOjEwMzFDMDAwRTBFMThGMTA1QTQ0ODdERkVEREVDRUY2MDJGMUE0NzdGRQotOjEwMzFEMDAwMTRDOUI1N0VBQjVGNUE5MjRFRUQyRjVGREI2NEU5NDhCMAotOjEwMzFFMDAwQTU2RjgzNTI4QkIyNzRDQkY2Nzc2QUE4QkY1Q0I3QTU4NAotOjEwMzFGMDAwMEFGNkVCQzczRTBGOEYyQjI3QjQ2RUJEMDIzREYwQzMxRQotOjEwMzIwMDAwMTMxREIxMkVCMzU3N0Y1M0QwNTE1Q0Q4Q0VGODVEOTdDNAotOjEwMzIxMDAwMEY1QThBM0QyQzE3RjhGRDlERjU5M0RGQkQ1MUMwOEVFNgotOjEwMzIyMDAwMjEwQjA2RTMyREI2N0I1OUFGRDFCNDZEQzBDRjhFRUUyNgotOjEwMzIzMDAwRUJGMEZFMkU0QjgwRjU1NTYwOTZCNDczNEUxNjA1RkVFRQotOjEwMzI0MDAwMTVGMzJGQTdGNjAxODJDQjdEMEQ0REI3NTM3RDc5NTIzMwotOjEwMzI1MDAwMzcxMUEwRjkxRjA5MkU5QTg2RkE4MThBNzAwMzNGMTU0QgotOjEwMzI2MDAwM0IxRTI4RUM0OEYwQzlBMUMyQUI1MEZGRjM3NjlFMkU1RQotOjEwMzI3MDAwNjQ3REQ4OTk2Qzc1N0M2RjQ3NkRFQTBERDA4N0Q5MDU1MAotOjEwMzI4MDAwMDM1NEFBMkY1MjQzREM5RkE4OTRGRDU1RDY2Rjc3MDJCMgotOjEwMzI5MDAwMjZENDI3QUJDNDY3NDlGNTIzRjc2Nzc4NUFFOTYzNjlGMQotOjEwMzJBMDAwRkM0REE2OTVCRUQ3OUVGNDI5QzZCQjI2MzM5MDVFRTU5RAotOjEwMzJCMDAwNkFENUJGMTlCRUEyMUY1ODdFQjlFRjJGQzY3N0JFQTAzMAotOjEwMzJDMDAwNzFDMTNFQkI1NDdENjlCNzU0Q0RFN0YxQTQwOTc3NjA2NQotOjEwMzJEMDAwNzBFQjc3M0I1QkMyRjMzMTBGNUExREVFMDA3RDY3QTNBNQotOjEwMzJFMDAwQkI2MTFBQjcyM0Y4QjdEQ0FGRTZDQTE5MDBGQjhBQjA5NgotOjEwMzJGMDAwOUUyMkY1N0IyREZBNzU0RkVFMDI3QTVENkFGRjBGQzVBRgotOjEwMzMwMDAwRkQ5REVEQjQ0QTRCODJENzkxRDc2QUU3NEM2RDU3RkJEMAotOjEwMzMxMDAwNjIyM0QxRUI5MTBFNUExQUZBQjk1OUI3OTM4NUQ1RUJCRQotOjEwMzMyMDAwODFEQ0JGQTM4MzNGM0Q4N0VEMzREMkMzMTZENkJGOUQ1QQotOjEwMzMzMDAwNzMyMkVDRTY3Mzc2OUJGM0QyRjRFRkVGM0FGOEJCRTMzQgotOjEwMzM0MDAwRkQ0QjZERUZEMUUzMTJFN0U0RjA5OTFDOTMxQ0FFOERCOQotOjEwMzM1MDAwQjcwQjFGM0RBRjVERURFMDM4ODYzODYwMjkzQjQ4RkU3NgotOjEwMzM2MDAwQ0EzMDdDQzJEMkZBQkQ0NUYxMzkxREEwMUY2QTg1NjhGQQotOjEwMzM3MDAwMTM1RjdCNjlGRDZCODREQjMwRTkwRDhERTRDMEYwQjMzNgotOjEwMzM4MDAwQ0RBQUM2NzJBMjYxN0Y2MjFFRTRBREYwQzc3QjEwMzc4MgotOjEwMzM5MDAwQjAwODJENDIzRjQ2N0Y4N0U4NTU4MEY5OEQxNDcxNDI3MQotOjEwMzNBMDAwOEJEMEIzN0U5MTY0QzdCQTE1QUVFNDRCOUM3N0Y4MDkxNQotOjEwMzNCMDAwQjNGRUQ5Rjc0NEU0QkM4N0I2N0MxMDA3MTM4Q0YwRDE3OAotOjEwMzNDMDAwMDFFNTg1RTZGNUEyM0VBRjNGNjA1RTU0M0U5RjVGMzQ2NwotOjEwMzNEMDAwMjU4N0JFM0ZFQzJGNkUyQkU2MzdDQzNBQjE4QkFGMUI2NwotOjEwMzNFMDAwOEZGQjA2OEM3QkY4NUYyQ0U2NzFGRjEwNkI4MjJGNzVDQwotOjEwMzNGMDAwRkNCNzI5RTREODgxOEZCRkIxMDdCMUZFRUE2MTJCRDBCOQotOjEwMzQwMDAwM0NFQUU3NjcwN0IxREU3N0Q5NDVDMDA5QkY2NzkyOURGRgotOjEwMzQxMDAwRURFMEZBRjg0MDNDRTQ2QUJERTIwRTIxRkVGNDgyQUQzNAotOjEwMzQyMDAwNjE5QUY0OEI4NDdCQTMwRkZDRkJFNjIzRTBGRjFCNUExRAotOjEwMzQzMDAwRUMwQUUyNTkxRDFERTI0QkQ4NTc0MjREMTQxQjUzMjI5MgotOjEwMzQ0MDAwQkVERkRFQ0Q3MTBFMTU3QTIzOTdFMEMxRkFGMzY5NzZGRgotOjEwMzQ1MDAwN0U1RTZCMTNBQzI3MDNEMzYyNzk1Q0FCOTNBQTVFRUIwMQotOjEwMzQ2MDAwNDdGNUFCNkIzMkJDMzQ3MkYxODEwOEFFRTg4NkZBM0JBQgotOjEwMzQ3MDAwNTU5NkU3NDMyQ0VCMzczRTA4QkY2NzYyMUFFQjk5RDVBOAotOjEwMzQ4MDAwNDlFMThDNEFCNDlGN0Y5OTM3NDBGQ0IwRUJFRjJBRUJCRgotOjEwMzQ5MDAwOEZENTNFN0Y3QUIyMEI3MjkwRTQzQ0QxNzlGNTQ0N0ZCMAotOjEwMzRBMDAwN0E2QzBBQ0E1NDBCRTZEQjkxRTQzQzNGQ0ZBNDc2NTQxNQotOjEwMzRCMDAwN0U2NDkzRUQzRUQ0RTk0Njk4NEU4N0JDN0RCOEE0QTdDMAotOjEwMzRDMDAwODBGQzU5OTc1MzcwM0ZFODg0MEEyN0YxRjNCNTkyMDRDMgotOjEwMzREMDAwNjJEQUNEMEY4OERCRDE0RTUzODM2QTI2RjBGMjlCRkI3NAotOjEwMzRFMDAwN0ExMTdDQzMyQ0Q1OEQzOEREQjVGMzYyOUE5NEZFNTRFNQotOjEwMzRGMDAwNkE2QUQ4OTE0MDJGNEMxOUUzOEZGNEQ3RDdFNUY4RUZEQgotOjEwMzUwMDAwMDc5RENCNDM3REJBN0YxRUMxQzdEMzZFRUVGOTczQzg0QQotOjEwMzUxMDAwODc0RkM5OEY4NkRGQkQyQzU1N0I4NEQ3RTkxRTFGQjcyNwotOjEwMzUyMDAwREI0M0M2Q0Q4RkQwMTM0RTRGN0ZCNkI3NEIwQzNGMzMyNgotOjEwMzUzMDAwM0MxQkY4REREQkVDNjQzQkY2NDJGQzIwODRENzc5MTlCOAotOjEwMzU0MDAwN0RGRjQxOEIwODgxOUZCQkVBN0FCRDE2MDEwMEQwMzkwRgotOjEwMzU1MDAwMTRDMzdDMzA3NjkyRDNDRkYxMkE5NzY1M0RFQ0U4Qzc0RgotOjEwMzU2MDAwODk1RUQwNkY4MTlEMEVBNjE3MDk0QUE2REY4MzdCM0IzQgotOjEwMzU3MDAwQjM1RTlBQTlDQkIxREFBOUIxRkM1RUVENzY1QkQwMDI1RAotOjEwMzU4MDAwM0EyQkMxQTczNkUxQkQxNzYzNTg3Rjk2RDkwNUZCMkJBRgotOjEwMzU5MDAwNjVDRkY3NjUzRUQ4NjVGNzY3MkU0M0JGN0IxRDUyNkYzOQotOjEwMzVBMDAwMjc3ODEyQjlGRURGREEwOUQ0QkZBMEVCRUJCMkQ4NzBFRQotOjEwMzVCMDAwQUYyNEEyNTNFN0Y2NUEzREU4NDE3QzU3QzVDRkVERjI2MAotOjEwMzVDMDAwRjlFMTYwQzEzQUFDNEI0MUY2NEREQzcwODI4NTdGMUQ1QwotOjEwMzVEMDAwRTQ1NTgwRUNBMDhENUU0OTNGOEM0QkFCRURCQzFFRTMwNwotOjEwMzVFMDAwRDU2ODFDQTBCM0I4NDNFNUY5MUNBNkI1OENGOTFEQUU4RgotOjEwMzVGMDAwRUFDQ0UzNTIyNjhENERCRjk5RUEzRjVCMThDNzcxRDdERAotOjEwMzYwMDAwQzM0NTA3Q0ZDMDBFMzg5Q0E2RjJCQTI3MDk3NURGNDAyNAotOjEwMzYxMDAwQUEyNzlEREI3MDJGQzE5NUYzM0Y3RDczMjAzREFEQTg5OAotOjEwMzYyMDAwRkRCMENCMUU0RjJCREVBNzJGMjkxRjI3ODgwRkE2MkZGQgotOjEwMzYzMDAwQjg3MzgyNDhCOEYwN0E5RDVFRTY4MDRGRDlCQUJFODVFRAotOjEwMzY0MDAwMURDRTlEODQ0OUFFMUZDQkYxN0Y4ODc5REI3M0I1NEZDQQotOjEwMzY1MDAwQzAwRjk1RDk2NDZGMTMxRjdENkQ2Rjc4MEM3MTk1Q0Y3NgotOjEwMzY2MDAwM0NEQTlGRjFGQ0Q0NzM1RjZEQzI3MzYxNkRFRUM1RkNGMwotOjEwMzY3MDAwRTE2QzJDNDQ1Q0E2Q0MyMkUzNEEwRkU1NkE1RkUwM0I5OAotOjEwMzY4MDAwOTZDNjA0QTY1RjY1QzhDMUY0OEJDQjZFOTA3MkYxQ0U2RQotOjEwMzY5MDAwNEJEMzA3QzdFQTM3RUU1MkE4OUZEMkQ4RkEwQTJFRDVFNQotOjEwMzZBMDAwNjA3RkU4QUJFMzRBMzg0MUU5Q0VGOEQ1QjBBRTRFQjgxQQotOjEwMzZCMDAwQzMwOUEwOEY2NjkxRjY1RUU5RTZFODc5RDI1MDUzMTEwRQotOjEwMzZDMDAwNzcxMzQyRkFBOTIxRkIxMDFBRDcwMjEyQkQwRkJCRjFFMgotOjEwMzZEMDAwRENERURBM0VCMzk1OEVGNDFEQTZBMzcwN0QzMkUzOTc0RgotOjEwMzZFMDAwNjhGRjU0OUY5QzdCMDlFRkE1NDk3QjdFMzMyNEYzN0NDNAotOjEwMzZGMDAwRkM0NUMzQzY3Q0NFMUY4RkJFNEU4QUMyMDk1ODI3Qzc2MQotOjEwMzcwMDAwMTVCOTRFNEUwODI5QkYwMjlCNjNGNDc4ODExQ0M3RDdCOAotOjEwMzcxMDAwQ0Y3NUUwNzFBNEVBRUJFODZCNDU2RkY3OTQ0M0I2MjNFRAotOjEwMzcyMDAwREU4MzNENTNGQTdCQzk3NzBGREFCQ0FDMzcwM0E0NEY3NQotOjEwMzczMDAwMjAyRjRCREI0OUI4RDQ5MUU2ODZCREQ1NTEwRDU4NjI5OAotOjEwMzc0MDAwQzE5N0Q1ODJENzBCOEQ4REQ3RTVGMTZEMTlGQ0JFMjFDMAotOjEwMzc1MDAwRDc0NDkxMTA5MDZCQTVEQkQyRDc0QkJCNEVGNzlCMzE3MgotOjEwMzc2MDAwMDE2QUJGRTA3N0IyM0ZDMDkwRkZDNzlFQ0VEMEZCOTcwMwotOjEwMzc3MDAwRUIyOTlBQUVEMTc4QzhDRTk1NzFBRURBRjhGQzBFRkY3RgotOjEwMzc4MDAwMjhCRTk5OTVGNkYxNUE4OEEwMDc2RDcyNUQwN0UyQTVFQgotOjEwMzc5MDAwMUUyMUJCMjU2RDYyM0ZFQzRGRDg0RERGRkQzQURFM0U2QQotOjEwMzdBMDAwRDNFRkMyM0U4NUY5QjlGMUJENDFCOUQyRUZFQzFBNDU2QwotOjEwMzdCMDAwRjc4RTZBRjM0QkIwOTdDNDEzODJFNTQ0RjQzODQ2RTBDMQotOjEwMzdDMDAwM0RBMkRCRDM0RjlGQTNCMzJBRTk0RThDNjRGMDk3ODdDOQotOjEwMzdEMDAwRjEyNzZDQTBDRjg3NzY4MzhFQjc2NjkwNUMyRjA1QUVGRAotOjEwMzdFMDAwQkFCNUUyNzE5NzRGQ0I4MDFFRjkxQTMwRTE3QjU3MTJDMAotOjEwMzdGMDAwQzFEOUIwQjdBNEZFMzA2MDgzMUVEMTdDQkFFNEMzMzkwRQotOjEwMzgwMDAwMTk4RDkwNEZCOUQyM0ZBODhENDlFODJGMTI1MTc2MDlGMgotOjEwMzgxMDAwNDIwRUQ0MTA1RTUxNEY3QTcwNjY1MTM2RkNFMUIxRjcxQQotOjEwMzgyMDAwN0Y2RTZCOURDRjk3RDU3RTNGQTlBMDczRjA5QzM1M0VGMAotOjEwMzgzMDAwMjdENkU3RENCNTNFRTdBQzA4N0FENDZFQ0UzREU0MjE2RQotOjEwMzg0MDAwQkM5RkQ4NkM0NTY0NTJENDVBODNCRkI5MjIwNUNGRDVFQQotOjEwMzg1MDAwNTA0MDcwQkQxM0Y4M0VFMURBRjcyNkRBQ0Q1OTlCOTQ1QgotOjEwMzg2MDAwQTM0NkM4QTdCOTZCQzZGODRCMjJFOEQwNzdCMzk5MkUwOAotOjEwMzg3MDAwRkQ0MjY2RjhGMjNENjZGOEU3QTREQjMxQkY5RkZBOUU5MQotOjEwMzg4MDAwMkY2Qzg2NzMwRjk5RTFERDgzOUFENTFGQTE5RjVDOTZGQgotOjEwMzg5MDAwQTA1MzQxRDlBMkZFMDhGOTFFNTQ4M0YwMzNCQURFNTk3MQotOjEwMzhBMDAwMzQ3OTNDQzE0N0Q2Q0VGNjgyQ0M3M0RGNUY5MjBGRkFGMwotOjEwMzhCMDAwOUREQzc5RjdBRTcyN0FFRjQ4QjJDNTBCRkZFQUI4MDgyMwotOjEwMzhDMDAwRkQ3MTNDRDE2MzRFRkQyQUJCRDU4M0Y5OUFGOTdDOTdGMwotOjEwMzhEMDAwNDVFN0RCQTc2NTFDNzA3RUQwNUM3RkJFN0NBOEQxRTM4QQotOjEwMzhFMDAwNEUyMjJCOTJBRkEyRTk0RkZENUVFN0E3ODE5NTJEOUU1OAotOjEwMzhGMDAwN0MzRkVDOUY3OUUzODhFMTY5N0M4MzQzQUJFQ0MyNzU0NAotOjEwMzkwMDAwMjlGRDA0MThBRkQ2MDQxMTRFQTNGMTM1REQxRENGRjEwQQotOjEwMzkxMDAwOTcyQjE2OEYxMjlGRDFGN0NBQURFRUZDNUZEMjNDNjc5MgotOjEwMzkyMDAwMzkxNTc3QzBERDFBNTc2RkRBOUU1RTAxN0RCQUQxNkQwOQotOjEwMzkzMDAwRjE5MjhGMjNEQzgzQUEwRTY2RTRDMTlGMTAyMUI3MTc5MgotOjEwMzk0MDAwNzFGREJCOTZDM0VGOUY1Nzk1QzBGODk5MkY4MjFDOTdDNgotOjEwMzk1MDAwOUZCNUQ0RDEyQTFGRTlCRjkyOTU1MUUzNTkxRDUxNEYwQwotOjEwMzk2MDAwRjM5OEI3RDZEQzdFQzE4NjFGMUQ5MUIwRTE5NzVFNTFGQQotOjEwMzk3MDAwQkY0RUM1N0M2RkQ2QzdBRDA2MjZCMDVFQkU0MjhGNTcyMAotOjEwMzk4MDAwN0M4RUE2QTQ2RkI2NzYyRkRBOUQ4QkY2QUI0N0NBN0FFQgotOjEwMzk5MDAwQUI1M0Q3QjM3RUY2RjNDQTVENzYwRkNCMzNFQkRCQ0JGRAotOjEwMzlBMDAwNzk3Rjg3RDYyMUY0QzNBMUY4MzkzRjg3QkMzQkVEMTQ1QQotOjEwMzlCMDAwNkU4NzBGRUQzNTg2QkY2QzI3RkQ0MkRFQjdBMEY2QTdGOAotOjEwMzlDMDAwRDcyQUFDRDdDQkRCNDlCOEZDMDkyNTg4MTg3MDM5ODJENwotOjEwMzlEMDAwQjY4MDlGOTQ3MURBMzIxRDFGRTAxMzdGQzQ3QzQwQUYyNAotOjEwMzlFMDAwNDg1OEQ0MTlGMUYxMzBGQkJGMTU1NUMyMEIzQjQwMTBCQwotOjEwMzlGMDAwMURGRDA2REU3ODNGMkE2QzNGMDIzRDFCNTA0MjBGRkI0NwotOjEwM0EwMDAwNjBFRjk5QkY1M0I5RTc0NzQ3MjQ3QzJFQkU0Q0E0QUI2NwotOjEwM0ExMDAwRTFFRjA3MTk4RkFBNURGODIxQzdENUJCNjJEOTZFMjdFMAotOjEwM0EyMDAwMDUxMDBCRkQ2RUQzRUQ2QkIxMjJEODFFRkE2QTM1RjQ4QQotOjEwM0EzMDAwMTU5NUNCNzQzQjNDQjA0QUVBQUJENTQ5RkU1RTZFRDREQgotOjEwM0E0MDAwQUY0QUY3MDIwRjM3MjhCQTdGMEJCQjNFMDlGNkY1M0VBNwotOjEwM0E1MDAwRUVCNzU5NzFCQkQ3MjdBMUJEMDhDNEE0QjA3RDJERkQxOQotOjEwM0E2MDAwODRCRkFCQUNFRjlBQzk3RTVGMEY3QkREMTcwQTYzM0M2NgotOjEwM0E3MDAwQUIxRkM4NjQ3QkZEMDU0M0VGREQxNzIzRURGOUYzRURDNAotOjEwM0E4MDAwNkVCNkFGQzRGREQyN0VGQzQ4MDhFOUY3RjZEMEJFMDM5RgotOjEwM0E5MDAwREQ2N0FCNDVCQzE5NTVCMkM0OUY4RUVGOTY0Q0IyNUI0NwotOjEwM0FBMDAwNDAwRjMxRUZEMkY2NDUzNjVBNjVGRkNEMzQ1RkM0RUI5NwotOjEwM0FCMDAwM0Y1NzhBMEU1QTIyRUM2MDY3OUVENDBGRjkwNUZFNERERgotOjEwM0FDMDAwN0EzQjJGREE5NTU4REU2NjNDOTQ1ODg0MUJGRUZDQzY4MAotOjEwM0FEMDAwQjNBQUIwMTJCQ0IxQ0UxMTVDNDJBRjk0NzRGM0Y3NUFFMgotOjEwM0FFMDAwOTg4REY3NjQ3Q0VBQjA0RkNBRkJCODNDRTEwRjUyOTk1RAotOjEwM0FGMDAwOTQyN0Y1NTU1MjlFQzU1NDhBRDEzMkNFRjI3OThDRTQ4MgotOjEwM0IwMDAwQzNFOUEyQTg5MEY3MDczQzUyREU0N0NGQTNCM0ZFOURCRQotOjEwM0IxMDAwMTI3QjgzNzkzQzlGRUM2N0JBOTBDRTczMkYwMTdGOEYyNQotOjEwM0IyMDAwOTY3NkM3RTdCNzI4QUNDRjY5M0VCRERDMDRFN0ZGNEIwQwotOjEwM0IzMDAwMENDNzE3M0ZEN0Y1OTE4MTVGRTI5RjAxODhBMzE5NzJFNwotOjEwM0I0MDAwMkI0OUU3OTdENUY3MDQ5RjhBMjE3Q0FGQjIxMURGODAxQwotOjEwM0I1MDAwNkVDNDM3MUJGMzk4RUU2QzE3QUU5RTk2Q0E3NEJGNDFDNQotOjEwM0I2MDAwQTdBQkI4MkY5RUU5MzZDNDYyOTE3OEJFMkY5REYxNEM2OQotOjEwM0I3MDAwRURDNTVGRjFERTE4OEZCNEU3MkZEMTBGMjNCQTBGQzg2MAotOjEwM0I4MDAwMUI3MEJFM0Y2NkQwNUI1ODgzMDNGRUQxRkU0REY5RUUzRAotOjEwM0I5MDAwQURCQjAyQzRGRjBCN0VGRjQwODJBMDc2NDdBRDc1QTk4NgotOjEwM0JBMDAwNUU3QUJGNkNFM0IyMDQzRjk1NDdBQzgxMDQzN0Y1N0Y4MgotOjEwM0JCMDAwMzRBODhFMERCNjgxRUY0NTNBM0Y2MEZGNDA0OUM1QkUzRgotOjEwM0JDMDAwQUI5NEUzQzc5RUZFREJGMjNCNjg5Q0RGMkFBMjE5RjJBRQotOjEwM0JEMDAwQjE2MkM3RjdDQkVGQTBGOTFERjQzQjlCMjE0RjhGNTg4MwotOjEwM0JFMDAwMUIwQjIxNzdFNzE3QkJBQTZBQkM1OEJGRTYzOEZFODJEOQotOjEwM0JGMDAwMjcxRjQ4RjUzMEJFMDMxOTk2MzQ1RUZGMTk3OEFGNjI2RgotOjEwM0MwMDAwODNDRDBCQkZBRUUyM0RENUVCQzFCQTE3Q0RDQjMxQkVGNAotOjEwM0MxMDAwRThGNzJCNDM5RkQ5ODE3RkI3NDUzNDc3MUFEMjQ2QkQ0OQotOjEwM0MyMDAwNjg2NDM5NUZCOUUzRDdERkE4MDkyODhGN0UwNEZGQTI1MwotOjEwM0MzMDAwMzI2QUZGNjA5RUJFQkYxMkJEOEYzMDNCQ0Y5Q0M3NDAzMwotOjEwM0M0MDAwRjhFMTNDODYwMDhEQUIyN0IzOEI4QzNCRDczRUY1NTAxQgotOjEwM0M1MDAwRkYyNkQ4MEQxQjVFNEI1MEIyNUJGNzBGOEM3RDk3OTZGRAotOjEwM0M2MDAwRDBFQ0M3OUZGNzVDNzg1RDdFQURDNzhENUJFOTI2RTUzQwotOjEwM0M3MDAwOTg2NzBGMERBQzgzNDA4MDgxQ0IzMjVCMzgwMUY2N0VCNAotOjEwM0M4MDAwRDkzQTFCQ0I5MUIyQUQ0RjZDN0ExOEZDRjZBMUMzREJDRAotOjEwM0M5MDAwRDMwM0Y4QjQxREYyQTA0Q0YxMzcyQjJDREY0NTgyOTJGMAotOjEwM0NBMDAwREY0QUFGRDJBRDVGMTQzRTAyRkIzQTVEMTVFMzg4NUU5QQotOjEwM0NCMDAwMEI5RTNEMjNEQkZCNDU3MzBDQjUyRkREREU1NDA4RkY2NwotOjEwM0NDMDAwQTA0QzczNTUzOURCQTBEN0E4RDA0QkY2NDY1NzFCRjQ1MAotOjEwM0NEMDAwMEEzNTE1NzI5Q0VBQTlFRjk4MUU0N0Y3MkFBMjQzRTYxNwotOjEwM0NFMDAwRjlFRkNGNUJGNzg1NUQ0OEZGQTBCOTVEOTJDNDE3RjQ4QgotOjEwM0NGMDAwNUQ2NTQ4MkRCNjI3OUVERjlFQkUzRkUxRjkzQ0FFNzc1RAotOjEwM0QwMDAwQzM1RkI5MTgxRDQ3MDExNzg4MTNFQzhFMTc0OUQwREIyNAotOjEwM0QxMDAwMUYzOTgyRTM0MERGNkQ4QjEyMDRGMUZGNTdENjJBQzlBOQotOjEwM0QyMDAwRjc4RjJFNEI4NTlEMzdDRjE2NDg3NTczMjk5RkNGN0IxNAotOjEwM0QzMDAwRUMzNkU2QzdCOTRBNTVBQTNCOUJGOTNEREQzMjg4RTcyOAotOjEwM0Q0MDAwOUI4RTc5REVCQ0Y2NUE5RUU3MUNBMTMxM0ZDRTdCNTQ5OAotOjEwM0Q1MDAwMkQwQTUyNzlDNjJBQzY2RTZGNjNERDlDRDRFNTk0NDM2MgotOjEwM0Q2MDAwRENEMjFGRUJFNDBDN0QwOTdBRkMyQkREQUYwRkJDMjMwQQotOjEwM0Q3MDAwRkQ2OTg3OTg5NDE4Qjk5RkI0NTc5NzhCMDExMTNDMEMzMwotOjEwM0Q4MDAwM0Q1MEQ5NjBFMzM4ODVGQUY2OTk0MjdDRTdENjRDNkIxMgotOjEwM0Q5MDAwMTVGMjNENjhGRTAxMUQ1RkNBOEZEMjdGRjEyMEVGQTFCMQotOjEwM0RBMDAwMTJGRjIyN0QzQUVBRUQzMTFEMUFCM0YxRkQxNkZCNERFQgotOjEwM0RCMDAwRDRFRjVGRTAyNzdBNERFRjMxREVCRTVBRUY4ODU1MkUwMwotOjEwM0RDMDAwQTczMjU1REFFRkQxRjNFODM0NDAzMUVDQjg3NzQ0MDQ0OAotOjEwM0REMDAwM0Y1NTZFRkU4QUY5NDlBNEE5MjIzMTREQzJEOEJGNzA2MQotOjEwM0RFMDAwQ0Y3MjU1MjUxMkRFRkVGMkRFNjc3NkM0QkYwMzI5MTZCOAotOjEwM0RGMDAwRDExM0UzNkRGODgyNjFFMTZERUY0MTdCRTNGQjk1N0JDRAotOjEwM0UwMDAwMUMyMjFDQjk2RTM3N0MxMUI1QUVDREY1NDI1NDMxM0U0MwotOjEwM0UxMDAwMkI0NUEyMDdGQUZCMkI3QjczRTEwQkU4ODdGQURENDgwMQotOjEwM0UyMDAwRkRDQzIxRkIyQjZDQjJBRjlBMEIxRjgxM0NEOTYzNzc4MQotOjEwM0UzMDAwNzNGQzgxRUNDRjcwMDRERjlDREIxRkQ1RjcwNUU3RUE0QwotOjEwM0U0MDAwRjIyMDFBMEZEMUYyRTFBQjI4Rjk2MEJDMkZENkI2QkQzMwotOjEwM0U1MDAwMUZENTJBMTcwMjJDNEZDQjZDMjIwMDNCQTNFQzQzMDc0MwotOjEwM0U2MDAwRUI4RkIyQUQ3MjNEMEE5MkE3M0Q2OTdEMUNERkIyRkZCOAotOjEwM0U3MDAwOEYzN0MwOUYwREQ5NTJDNjcxQUY2NkY5M0JFRjk5MkZBRQotOjEwM0U4MDAwNzg1RUIzMDlGRjMxNUVDOERGRUZFQ0YwN0ZEMzQ2ODk3RgotOjEwM0U5MDAwNjYwN0Y2OEI1N0ZBRUNFMEZCRjNENjMxM0Q2RjczMURFNgotOjEwM0VBMDAwQUY1NDU4QkVGRDU3RTUyRUUxREIwRTdCRUI2MkVCNzVBMAotOjEwM0VCMDAwRUUwNUU0NkVGMjAwNzNERUQwMTk5MTlEMzgwNDk1RUVBNAotOjEwM0VDMDAwRTJBRUJDN0YxMDg1NUYwM0FGRDE3MkY0RTkzQzRGOUIzQgotOjEwM0VEMDAwNzI5NEZFRkM1MTQ0RTA1MTg4NDZFNkUzNkY0OTJFNjIzRAotOjEwM0VFMDAwMUZBRTYyQzNGN0FDRDcwOEFEQ0QwRUUyRTM4QUUwMzc3MAotOjEwM0VGMDAwMEMyRjgzNUU2M0Y4QTUyOTg4NTc5RTNGNkYzMzNFQTMzRQotOjEwM0YwMDAwRUJERjAzRUZEM0QwOEI5RUIzQjE1RDUwNTYyRkYzMUM4NAotOjEwM0YxMDAwRTkzREY2M0IyQTExQUZFN0Q2NzUwNzMzNTIyMkUxNjAzRgotOjEwM0YyMDAwMTQxQzhBNkFFRjhGODI4QkEyREE2QjUxNzA5NUE5N0Q3RgotOjEwM0YzMDAwRDk5RUZERUM2N0QxQjg0REVEMUM4QkFGNjEzRkU0N0NBMQotOjEwM0Y0MDAwQkIyMkM4NzhBRERDRjE4RDNEMDBGRUU4RDQ2Qzg3NUMwNwotOjEwM0Y1MDAwQjQyRDExODE3ODdBQkZGOTQ1OTVFRERFNTM5RUU2MDRDNAotOjEwM0Y2MDAwRDgyOUNCNjJBNDFENzdDQUFEQzM0OTA2MkM2NjE2RDNFNwotOjEwM0Y3MDAwMzg0RTA1RkFCQjkxNTdEMDFDMjNFMzJEQTc4QTlBMTMxQwotOjEwM0Y4MDAwOTIyMkZDRjZBNjdBMzVDMTQzRUQxQjgzNjI2Q0RCNzk4NQotOjEwM0Y5MDAwMzFCNThDRDc0NjcxQTE3QTY5Q0Y4RDUxN0ZEODI2RjM4MAotOjEwM0ZBMDAwNDVBREMyNDFGRDM1RDY3Q0I3MERGMUE0Q0ZDOTdGODJBNgotOjEwM0ZCMDAwRkQ1MjUyNzM3RDAyRjY1RjRFRDU3N0ZGRDk1NEY4ODFEQQotOjEwM0ZDMDAwQUZBQTlDRjMyNTAyN0UzQkYyMjY2NjRCNTI4QTIzMjIzRgotOjEwM0ZEMDAwRjBFMDUwOUE5RjFBOUY3N0YwMDVGODU3QzQyOEQ4RkY1MQotOjEwM0ZFMDAwMkM1OTE5NjVERjg4QTJDNDMwRkNFOUQ1RDFGOTBENDFGRgotOjEwM0ZGMDAwM0JFQzlCQjlBNDY3MjE4RkU2QUQzNUQ3MkZBODNGQ0UwOAotOjEwNDAwMDAwRUI2NTQxRDQ3QUQxRjRCODcxRjQ3QTU5NkNBQzE3OUY0RQotOjEwNDAxMDAwRjBFOUY5OTY5Q0Q3NzdFQTkwQ0FGQ0Q1QjJENDI2OTZGNwotOjEwNDAyMDAwQTdDOEJDNUFFNEEzQjRENENCN0M5RDk2M0QxMjE2MDExQwotOjEwNDAzMDAwM0QwRjQ4NUZCNzA2REU0RTYwM0RGNUJFQjBERDcyNjJGMwotOjEwNDA0MDAwRTdCRkU3RkYxMkZDQjNFQkUzRkU4RjUwNzk2MkQ3ODczRgotOjEwNDA1MDAwQkQ1RTAwQkNGQjRGNUQzRTE2RTdCNzFGQjVGN0ZCMTkxMQotOjEwNDA2MDAwM0NBRUJEMEU4MTcxOUREQUZCNEExN0Q4MUJBNzlFNzcyNwotOjEwNDA3MDAwNzAzRUMyQTkyNTBFQjZENzAzN0JFMzM5NkU3MUFBQjM5MQotOjEwNDA4MDAwQjQ4NzZCNUZGQ0FFN0YyM0VCRTNBNTRDQzcyNzA2RDg1NAotOjEwNDA5MDAwQTU1RDU1RkYzN0Q2OEYyREY1MEUwRkU2NTFCOTM3OEUzQQotOjEwNDBBMDAwRDc1NUU1RjMzMUJDQUY3NkVBQzVFRkYyMjNFMzcxRkZGNAotOjEwNDBCMDAwRDVGOTE4RkJGMEE3RTJDNUQ0NjdDMEJGQkFGRDVGRjkxOAotOjEwNDBDMDAwQzJFMDI3NkFFMDJGRUY3OEM5M0UxQjc5MjU3RkY4OEY4MQotOjEwNDBEMDAwRkU5MEFGQTc5RTc5ODlFNUVGRDdCNkM2QzcxMERCRENBNwotOjEwNDBFMDAwQjZGM0MwQzNCNjc0QzRGNUU4NjMxRDg1Qjg3Mjk3RjUxRQotOjEwNDBGMDAwNDZBQzlGRjNGMTIyRjE3MDhBRjA4MDc5MTE1RUU2QzEzRgotOjEwNDEwMDAwMkVCRjEwM0U1RUZFQTdDNUM3MzczM0E0OUMxQjI4QjA0OAotOjEwNDExMDAwRUZEMzhBMTdDNTJGOUZDNzczQkM4QUU2MkY5RkVGRkQ4OQotOjEwNDEyMDAwQUUzRkU0RDBDNUU2RkIxOUU2REJGRUZGQ0U3Qzk1RkM5NgotOjEwNDEzMDAwN0ZENkY5NEE3RUJGNjc4MDg3QzcxOUNERjdFN0YzRjVDOQotOjEwNDE0MDAwRUU5RjMzQkMyRERFQ0JFM0JEQzRGNTlFOTlGRjdGOEI4NAotOjEwNDE1MDAwQkY0N0ZDRDNDRUY3NjJGNDdFNTVBNzc3QkMxQkZCQTAwQwotOjEwNDE2MDAwQTc1RUZDOEYyRUUyMjdDQzdCQzZGRjUyM0UzN0VDRjlEMAotOjEwNDE3MDAwMDJENTdCQzg0N0VENUYxM0ExRjdCQzk5NkM5NUI0Njk3NAotOjEwNDE4MDAwOEZGQzNBREY4OEE3NDg3RjZBMTRGRUU1NDFGQjlDQTVCNwotOjEwNDE5MDAwMjFBQzA3QjIyN0UwQzdENEJBNzIwRUJDNERGMDJCNjQzNQotOjEwNDFBMDAwMjdBOEJDMkYyQkUzNDlBRkE0Rjk4MjMyQkU1QjI1MTBCMAotOjEwNDFCMDAwQ0YyQUY4RDM2Qzg2NUZGNzVENzkwMDc5MjU4NUFBOENDNAotOjEwNDFDMDAwQzdFQ0FGRjE2RTY4QTA3OUVDNEZCMjc4NkEwOTFFREREQQotOjEwNDFEMDAwNjlGNkU3REJBOURFREQ1MTc1QzMzRkFCRUQ5NEVCRjQ4NwotOjEwNDFFMDAwNDQ4QzZGQjRDQkVDNjc1RDEzRTUyNzVERTUzMUQ3OEY2OQotOjEwNDFGMDAwMTVDRkE0NjBCRjZFNkNCNjRERTA3QzRFMjFEQTQ3Rjg1NwotOjEwNDIwMDAwOTVGM0YzREQzQ0NGQUI0NERENTJCN0VCQTdFM0U5MzlERgotOjEwNDIxMDAwM0RBRjkyRjBDMkZCMzY4MTRFQUE5RTE3NjdDNjlCMDA0NwotOjEwNDIyMDAwREU1MjgwOTc1Q0I2REYwM0MyN0JFMDZEODJBREJBN0Q2MwotOjEwNDIzMDAwMjVGNEZEQzc0MjY3RkMyNkY4RDEwRTUxMTAwRTEyN0MwMgotOjEwNDI0MDAwQzY2M0FENDI3QkFCMjA3RjU4Q0U5M0ZERTg2OEJDMDlDNgotOjEwNDI1MDAwRERBRkI2RUEyNDE4REQ2OTU0MTg3OEM2RjNBRTY5QTY1NgotOjEwNDI2MDAwRjc3OURFRDE3OEZFRTk3OERERDc2OTExRjA5QTE2RUY5QgotOjEwNDI3MDAwMEQ4MjJGM0EzRDlCODIzODZCMkRFMTU5NTE1QUYxNjlERAotOjEwNDI4MDAwRTAyOTFBRUZCRkExQjE0QTdGNURFMkJCOTNENTY3QzVCNAotOjEwNDI5MDAwM0ExQkE2REJGM0EzQUQ0OTEyRUVENEEwMTZGMUZBMEIzQwotOjEwNDJBMDAwNEFCRUZFOEJENzBBN0I2NEE0MkI4OUYzNDk4NTdFQ0U1OAotOjEwNDJCMDAwNDJENUY3QzM5MTYxQzdFMzIwRkYxNDc5QjkxM0FEREE5MgotOjEwNDJDMDAwQUJGOTlDOEZFRjE2MDVGMDVCMEI0NDA4RjE1QkE1RkU4NAotOjEwNDJEMDAwOTVFRkUxMUZFMTdDNDkxMUVGNkIxRUZDMDA3MDZGQTdBOQotOjEwNDJFMDAwMkIwQzdGNTBBQ0I1OUUzODY3MjcyM0VFMUY3NUJFNjIzRQotOjEwNDJGMDAwQzJBMEVEMjM0MUFGNTk4QkU5MTlFMjU4NkVDRjQxQUMxMgotOjEwNDMwMDAwQzdFMkZCMUQxRUQwQUY5M0I1ODFFQkM5RDc3MkQ3MENBNgotOjEwNDMxMDAwQzY2RTc1ODhFMUQ4MTJCMkY0RDNEMUVFOTU5MURDN0VFOQotOjEwNDMyMDAwOTE3MDJCNDk0OEI3MEIyOTgwNUQ2RTk5QUY0NkNFRUI1MwotOjEwNDMzMDAwQjc4MEVENEJFMzNEQjUzMjZFMjJDMDRGM0Q1MDc2QzNBMgotOjEwNDM0MDAwRjc2NUZCQjREMUY0M0RFNEJCMDk4REVERTVEODFFMUM0NwotOjEwNDM1MDAwMDkxMkREOTQyMkRFN0ZFRkRBNURFNjQ1MzQyRjczQjA3QgotOjEwNDM2MDAwQkY1MzdDNzdFNzVFOTA0QkUzMEFDQzcxRUJBMTAzNjUwQQotOjEwNDM3MDAwM0NDNzI4OUYxQTI4RTU4ODZBRjFBNkUxM0JCMzk2RjY2OAotOjEwNDM4MDAwNjFGRjRCOEQyRDJBREYwOTNDNkU4QjYzM0UyRjVFN0VENQotOjEwNDM5MDAwRDNGODAxRjRGREUyNkRFREJDMThFNkIxMDlEQkYzNjU3RAotOjEwNDNBMDAwRkI2OUI3QkQ0RkNGQjVDRDMxRkNGQ0Y1ODFEQUY3RjkyQwotOjEwNDNCMDAwQzgzMzUwM0MzMzc2RDI4MzU5RDdFRUI3QTc1MTE3NUEzQQotOjEwNDNDMDAwNjhFMjQ5QzQxRDI3MDRCNkJGODk3RENFMDk1MzU0NkVFNwotOjEwNDNEMDAwM0Y0MUNGRkYxNDRCRTM3OERGN0M3Q0UwMUI2QjFBN0QwMQotOjEwNDNFMDAwNkYzQzM5MzVBODZGOEE3MTc3Qjk4NUM2NUZBQ0M3OUJCQQotOjEwNDNGMDAwNkQwM0U1M0E1NDYzODVGNjhDMEJFM0VBRENBQjFCM0RCOQotOjEwNDQwMDAwMUYyRjY0M0U3NEY0QkExREE5QjdFRjNBQ0FFQjQ5MDFGNQotOjEwNDQxMDAwN0U5NDE4RjdGQUJDRDZGNkY4MEVCRTdCQTU4RTBGRjc4MQotOjEwNDQyMDAwNDBCOUVGNkJDMDg0NTc4RThCOTdBQzcwMzQ3NTRGNDA5QQotOjEwNDQzMDAwNjkwQkY3QTZCMjdBNzA0MUNBNDBBQTFGRDc0RDE0QUVENQotOjEwNDQ0MDAwQzE3NzZGNTdDNTdBMUU2RjczMzFDN0Q5RTNCMzNDQTBFQwotOjEwNDQ1MDAwODMyNkVBMzhERjQ4QUNFRUM5RkIzOTREMjMwNUYzNEYxQwotOjEwNDQ2MDAwRDNBQTRDODNERTlDOUY2NEY4NzM0RDIzQkQwNzkxQkY5NAotOjEwNDQ3MDAwRDUzQ0QyRTk1REVGNDU3RTRCMjg4QzM4Q0FFMTM1NzJEOAotOjEwNDQ4MDAwQkZBNjZCNkRCODA3RTQ2Q0IzNEZFRTgzN0NCMTM4RDczMQotOjEwNDQ5MDAwMDMzRUI5Rjk4MUM5MDk5MDlGQjM1N0FCNjEwN0Y4N0QxNQotOjEwNDRBMDAwQTUzOTZGNDlCOEJEOUMzNzNFQkI2RUE0MURGRTZCODkxNAotOjEwNDRCMDAwQ0I2RkM3QkNBRTFBQTQ3OTA3NDJGRUVCRTcyMjJGQzMyRAotOjEwNDRDMDAwOTg3MEVFQTdBRUY4NzVGODdENkEwMkFENjdBQzNGQUJBOQotOjEwNDREMDAwMjcwMTdFNzU3NERFNTNBNTlFREY2NEMwQ0I1MkI1QzE0MwotOjEwNDRFMDAwRjhERUFDNDRDRjM2M0U1RkI5QjgzQkM3NTU2RjFGMjhFNgotOjEwNDRGMDAwRTVBRkIwODY3QjAwM0Y4RkQxNUFDMEZBM0M5MTJGRjlDRgotOjEwNDUwMDAwNkY1Q0IyQkI5NzhCRjkzNzQ2NjA1RTREMzY3NzJGRjAwNAotOjEwNDUxMDAwNzNEM0IyMTgwQkYwMzQ2RTg5RTRFMzdCQUM3MjdEMDU4MwotOjEwNDUyMDAwRkQxRTRCODBERThGRDFGOTc3N0E4REI1NjgxREY1RDNFRQotOjEwNDUzMDAwQzkyOUFDRjFDOUM4NUJEM0RDMThDN0Y4NDBDRDYxRjgxNAotOjEwNDU0MDAwRDdCMzc1N0QzNTdCQTUzQzNGRDY3NTk0QTRBQkIwMzYwQgotOjEwNDU1MDAwOEM2RTQ3Q0Y4RjZDQ0NDQzQxNUVCQ0MxMzdGNTgzMEJFMgotOjEwNDU2MDAwOEEwNjQ2RDA3RjVDODFCRkIwM0Q3RDY3OUNDNUQzMDI4MwotOjEwNDU3MDAwMzk1QzMyNDU3OUE5QkJFNDgzNkIwN0IyM0Y1RkNGRUI2RgotOjEwNDU4MDAwQkM4NUU0ODQyMzA5RTcwNjFCMjQ4QzdDNTVDODhEQkFCRQotOjEwNDU5MDAwODdGQ0NFMDhCRkREMkU3NjcwQkRCRDQ0RTZBMzc2QjVBMAotOjEwNDVBMDAwODc2QjM4RkZFQTE2RTE1RTQyRjAyNkIyMjNBQzM2MjE3MwotOjEwNDVCMDAwMzY1NzNCQjk3Q0JBOUFFNDVENEYyMUI2NTRBNzMxQkM1QgotOjEwNDVDMDAwQUREQUMzNjVBODNBOEI5RjNGNTNFRDY1Nzg0N0Y1MjA3OAotOjEwNDVEMDAwODY3NzU1RkIxOURFNTMzRDk2Q0JFN0FCOEJGODc5QjQ2NAotOjEwNDVFMDAwRkM5OUVEOUFDM0YyQzRERDhCNjgzREY4N0NCRTk5RTE3RAotOjEwNDVGMDAwQTE3MTQxRkUzODg1RkI2RUU0RDMwQTI5RUY5MkIyQTQ4MwotOjEwNDYwMDAwRkMxMUJBM0NFQUQ2NDdGMEY5OUJEQjQxMEZDMkJCNkQwNwotOjEwNDYxMDAwQzU0ODBCOUZGN0I0MzZBNjgzRUZDNkE4MjdCNkVFNDY2QgotOjEwNDYyMDAwQkM2MzlFOEJGM0IyNUE0NDIzQUY5MzE2NjFGMTA2RjIzQQotOjEwNDYzMDAwQTRGQzcxMTBERjc1QkQ2QjZDNjY2NDlFRkE4REYzMTQ3QgotOjEwNDY0MDAwNjE4REUwQUY5QkFBNjI4NDM1NDIzRkNENUM5QzY0ODI2MQotOjEwNDY1MDAwQTcyRjdFRjdFNTBFRjRGRDNFRERCNDdCNDFGRkMzNzc2NwotOjEwNDY2MDAwN0RGOUU4OUZFOEY5RTM3NzFERUIyOUNGRjVGRUIwMkU0MQotOjEwNDY3MDAwMzJFRUQyMjI5QTI1NkM3NUYyN0VGQ0UzNzdBNEE3QjZCRgotOjEwNDY4MDAwRUIyNkJGMDc3QUNEQzIzRjNDQTA0RkYzRDEyN0IxMEUzNgotOjEwNDY5MDAwOTdBOURFMjUwNDdGMDRGQTEwM0UzRkQxRTk1M0JDQUM1NAotOjEwNDZBMDAwRkJGMjVGNjA1REZCOUQ1RTg1QkU3M0Y4OEVCRTg1ODMwOQotOjEwNDZCMDAwQThGREUzRkE3RTk0NTg0MTc4OERENDMzNjk1MjdGN0QwQQotOjEwNDZDMDAwMEFGRDk1MjRGNTU5MDFFNDY4NThFQUFENEY3Rjk1MUEyMwotOjEwNDZEMDAwQjgxQkY1QjcyNDc4NzEwMjQyNUJEMTIxMzA5N0UwOTU4MQotOjEwNDZFMDAwM0VCQjU3NDU1Q0FGNUUyQzQ3REM4NjcwMkNFRDhBODA2NAotOjEwNDZGMDAwQ0RBQ0M3MUEzQjI1MjExRTZDOUM5MzhFQ0IwQjNBRjk4RgotOjEwNDcwMDAwOUMxNjc1ODRGRDk4NTk1OUZCNDQzQUU0NTI5REUyQzZDMwotOjEwNDcxMDAwN0UwRENFNzUzQTkzMjFERjE0REUxRjQ1MUVEMDE0RDJENAotOjEwNDcyMDAwOTdDRjBFNTQ3OTdEOURDQUI3NzI3OTBEOTJFNTA4QUY4NwotOjEwNDczMDAwMzFDMkNCRjE5OTkyOTVENDFFRjJCMUNFNjc5RjEzMjE2RAotOjEwNDc0MDAwN0Y2N0U5Q0Y2NzY3NTlCODM0OUVFRkQzQkZENzcxODVDQwotOjEwNDc1MDAwNkYyQUY4QTMyM0VBQjM1MUU2NENDNUY4M0FCQTBBQUQ3QQotOjEwNDc2MDAwNEFDNEZFNkZGRDQwMkJGNzc3MkE1RkY2N0IwRDg4NEExRgotOjEwNDc3MDAwRUZERjlCRDVDRDdFNzMzNjlGQ0Y2MkJENjVGNDMzMkJDMwotOjEwNDc4MDAwMkI2Nzc5MzdFOEVCOTUyMzgxMUQ1MTZCRjNBNkE1NTA3NAotOjEwNDc5MDAwQkI5NzA3NUFGNTc5RThFN0MyOUQzMjNGQkJFQzAyN0EzNgotOjEwNDdBMDAwQzM4OEQzMURDMTNGRTUzOTQ5OUVFRjgyNkRCRkRCODZDQgotOjEwNDdCMDAwNzMxMjBCM0U3NkIwRkU1QTcwQjlENDRCMjIzQjk4M0YzMQotOjEwNDdDMDAwOTkwMzlBRTZCOEY4RThERjlEM0M3ODM3OERFNzI0Q0U2OAotOjEwNDdEMDAwMzEyMURFQkZFMzMzM0JGMjQzNjlEOTU0MjVBNjAzNTZBQQotOjEwNDdFMDAwOUI5MDY3MUExRDlGM0RCMEVERTM4NDM2RTNFMjNCRDQxNgotOjEwNDdGMDAwNEI4QjhCMkIzRjI0NDAyRjE4RjMxOUYzRTI5OTU0RDg5RAotOjEwNDgwMDAwNTk5NUNBNTlERTY3QUE3QzkxMjQ3NTFCRjM4RThFOEI0RAotOjEwNDgxMDAwOUY4QjlGOEI5NURGQTg4ODMzREY3OUE0Q0RGODc5NzRCRgotOjEwNDgyMDAwMUNGMEZCODFEMUZCMTFBRTAyQzg4OTMzODdENDIwRjY3RQotOjEwNDgzMDAwRDM1QjgyM0QxMzQ1MUJGRDFCRjFGM0NBMzVGNDUyM0I5QwotOjEwNDg0MDAwQUM0QjRGMjJGNkMzNEU1REMwMkUxRjNFNDhGQTJGMjdCOQotOjEwNDg1MDAwRjU3OEZCQTkyRDJBRkI0QkE3QjZDNDA3NjE5RjU2NkNDMAotOjEwNDg2MDAwQjlGRjIwRjYyOTJCMzYyODZDOUU5NzhCMDZDNjE3RTFEOAotOjEwNDg3MDAwNTEzODIzRjUxOEYyREREQUMxQjhGNjI0NDI1RTE5RTNBNwotOjEwNDg4MDAwMkJGRDVEN0MxNUY4NkE3RTQ4RjE2RkE0NzFCNDM4M0Q0QwotOjEwNDg5MDAwODlFRDIzQzZEMTcxOTBFNENGNTI0NzI4OUZGMUFBOEZBQQotOjEwNDhBMDAwREIzRDQ4Q0E0MUEzRERGQ0ZBRkIzOTJFNERFREJFNjY2NwotOjEwNDhCMDAwN0JFN0Y3NzE4MkYzMDQ0NUYzOUIxOERGRjFCNUI5NUUyRQotOjEwNDhDMDAwRUMyQkNFMEY2REFGRTBGQzhFMkQ3MTZFQzQyMThFRTkwNgotOjEwNDhEMDAwNzlDRUM2Nzc3QUU5RkRGNTFBMjRFRDk0RTNGQUZFREQ4OAotOjEwNDhFMDAwRjE2REYyN0MzQUM2ODlGNTc0NEMzMUU3MEI2NkVCRUY1QgotOjEwNDhGMDAwNjVFQkY4N0E0NzVGQzc0NkZCRjlBMUE2ODQxRUQ0RkU5NAotOjEwNDkwMDAwQUIzREVGNzI5OTNGNDhBRTk3RjlBRTg2RkVEMEJCNUZFNAotOjEwNDkxMDAwRUQ4OEUzRkRGOEFGNzYzQzUyODgzOEYzQzlEMEM4MTQ2RgotOjEwNDkyMDAwRjBGRjM5N0Y2RDkwNEREMjYxQUQzQTE2RjgxMjQxOTk4MgotOjEwNDkzMDAwNjc1MzBFQkNFNjQ2OEVCM0REQkE0MDY2RTQzQTkzRjk5RgotOjEwNDk0MDAwNDZDNzc3M0M5QjYwQzk2RUE1NjNCOUIzQ0E4OUYzQTExQQotOjEwNDk1MDAwOTUzQjZFMjkwMjFGMUZCNDQ5N0NEQTc3NEMwQ0UwRDhENgotOjEwNDk2MDAwNzM2NUJENEY4MDdGNzk5REE1NzNGQjE1OTY4ODc2MEU4NAotOjEwNDk3MDAwOUI5N0VENjJEQjlFNjIzRkRBMUI3MUU4ODUzQjZEN0NBNQotOjEwNDk4MDAwQkU3MEM2RTU5RUVCNkZDNDNBN0NDREM2NzQ1OEQ4QzdERQotOjEwNDk5MDAwNzMzREU3MjMzNUE4OUNCRkJDMzA1Mzg0NjE3RjJDQkE5QwotOjEwNDlBMDAwM0Q3RTFERjZDMzhDRjFDRUM4OTVFQkJENkM4NTIyRkMxNwotOjEwNDlCMDAwMzRBRkIyQTAyQTM0MkEzQjEyREQwM0M4NTE0QTZCMUMyMwotOjEwNDlDMDAwODBGQ0M5QTZDQ0UwM0RCRDUyRjhCQzZGNzg3RDRBNkIzNwotOjEwNDlEMDAwOUUyOUFERTM1RTM4MTc1OTNFMjg5OUU3RkRFMEI0NDJDMQotOjEwNDlFMDAwRDY3Nzg3RUQyMjAwQjkxMDc4NDZFNkUxOTQ3NTkzRjkwMQotOjEwNDlGMDAwRDEwRjgzRUZEMTVGNzJCODU3M0I5QUVGMDk5REFFNjUzNwotOjEwNEEwMDAwOTNDMkJEOTA5NzUxRjY0QzNBRTc2NTlDQjBDQkZENTJFRQotOjEwNEExMDAwM0NDNzdFNzE1OTBFQkQ0RkVENTJGNDdDNUVCQzlGMTRCNQotOjEwNEEyMDAwQzE0NzY1QjNCQzFFQjQ1MzkzQkQxRTlGMEJFMzc1N0Y5NgotOjEwNEEzMDAwQ0Q3NkVCQ0U3ODAxQkJENUIyM0I1RUNGQUY4QUUxM0MwMQotOjEwNEE0MDAwNzJFM0JEOUE0MUQyMkU0RUQxRTkyOTZFOTBGOTk4MEZBQQotOjEwNEE1MDAwREE2NEJFRUE4MzFCRDNGOTdFMENBM0ZEODMzNjZEMUE5QwotOjEwNEE2MDAwRUMyN0NDMDNGNkZBN0M3QjVEMkZFQ0JCMThFMzlEOUYxMwotOjEwNEE3MDAwNTBDN0UzM0NBMUYzRjlGQ0Q4M0E5OTE3QUU5RjNCNDZFNwotOjEwNEE4MDAwN0JDMDREN0ExRTdCRjM1MzBFQ0U1RjM5OTZERUYwMkQ0MAotOjEwNEE5MDAwQzY3QkVDQTkzRUM4ODEwMUJFRTdFQ0UxN0FCMjFGODk3MgotOjEwNEFBMDAwOUUwQjlFNzY4NDUxN0ZGNDI5MTlCNzNFNkEwQjdFMEJDQwotOjEwNEFCMDAwMzk3Q0Y0RDE3NjdDM0VFQTY4RkI2MDNFRTcwNzI4NkVERAotOjEwNEFDMDAwMEJFQ0IzQTM4QTBFREJEQzZDNTc3NkI1MTM0Q0VENTNCRAotOjEwNEFEMDAwNjI4NTA1RjkzQjYzMjdBRDk5ODFGQzg2OTYwRDBFQjA4MgotOjEwNEFFMDAwQTczOEI2RTlBMTU0RjY2Qjg0Mjc5MUYzNkMwRUE5MDI5RQotOjEwNEFGMDAwNzQzQkY2RjRERkZBNDREQTJGNDZCOTYwODMzOUVGQUUzRgotOjEwNEIwMDAwMjk1M0RBOTU0NkZEM0E3RDVEQUVEM0Q3RjVDNjQxNTJCRAotOjEwNEIxMDAwNEY5NUM3ODUxRUVDQzZGMzkzRjgyNkZBQjA3RjQ3MEE3NwotOjEwNEIyMDAwM0U5RUYzMjdCNkY2NTQyMDM3MUUxNkMxOUY3RjlDQzdDMgotOjEwNEIzMDAwNUVCNjA3NzlGMzY1Q0YzQ0Y1MjZGNjZCOEY1OTQ0MDNEMwotOjEwNEI0MDAwRUMwRkU1QUVDRDNGQzdGRDFDMjlCRjQ5NjQzRDI0QzQzMQotOjEwNEI1MDAwMDY5RURGNTFCNzNDRDc0QTBCOTZFNzNGQkY4Mzg0MTdDOQotOjEwNEI2MDAwNENERURDMEJGMDQxRDIzOTBBQURBRjA1MTY4NUZCNUY5OAotOjEwNEI3MDAwQjBBQjFGRTdEQjExM0QyQ0JDNEZCNjVERDVDNzQzMzY0QwotOjEwNEI4MDAwMjVGMEI3NDlFNjJCOEY0QjBFNkU4MkJERDdGQzY4NzdCOAotOjEwNEI5MDAwODFGM0VFNjNENEI1RkQ0MUJGRDMxQkUyMkNFMEE3RjI1NQotOjEwNEJBMDAwQkI4NzI0MEUwMURFREU1MjA1RUM4RkQzNTY2Rjg3QzgxQgotOjEwNEJCMDAwMzg0MjM0QkVBMkYzQzBCRkQ1RTU1MzE5QUQzQjlDRkZDQwotOjEwNEJDMDAwMkNEREY1MjhERjJGNTIwQUJFMDQ1RTlFNTY3ODFGQkJFRgotOjEwNEJEMDAwNzRGOTkwODc5ODRGREZCNDg5OUVENEVGODlEMEZEMDk4RQotOjEwNEJFMDAwOTFGNDY5RDRFNUUyQjlFRkQ4QkREQ0JFOTREQUNCRjczNQotOjEwNEJGMDAwNUY0QkUwNzE2RUIyNzE1RTRCMzQ1RDJGRjlGREE3RDU0RQotOjEwNEMwMDAwNEI3QUZGRENGQzQzNjQxN0Y0M0YxRjBGQTc0NUMzQ0Y2QgotOjEwNEMxMDAwM0ZBNkVGRkY2NTRCMENGQjgzRTQwMUYwMzlCNkUzQjYyQQotOjEwNEMyMDAwRDAxQ0NDRkJGOEQ2MTg5NjVGQzc5M0E0OUNGODhBRTRGNgotOjEwNEMzMDAwNjlBMDM3QzY3MUNENkY5OTRGREY5OUNDRTdGREU2MDZDNQotOjEwNEM0MDAwQ0RERjM1RkFGRDAyNzIxQzdDRDdDRTlCMDhCRkIzRkNDQQotOjEwNEM1MDAwMkQyOTBGODk1RTNGRTNGN0RGQjJGMUZCRDFGMzM4QTBENgotOjEwNEM2MDAwQkY3NzZFOUQ2RThENjNCRTM4REU1MUQyRTNGOEI2REUzRgotOjEwNEM3MDAwQUM5RjlBOTJEQzgyRjlFNjI5OUJBQ0I3ODVCQUMwMEU0QwotOjEwNEM4MDAwM0VCRUI1QjdBRjM2RTJCQkM3OTM0MjVEREMxMUNGOUJFQQotOjEwNEM5MDAwNkNDMUU1MDNBNTNDNkQ4NjVGMkNDMjI0NkFGMzkxNUY2RAotOjEwNENBMDAwMjQ1OENFMUJFRjk1M0E1NzM2QzA0RTQxN0U2RjdFMEU4QwotOjEwNENCMDAwOTc2MTQ3RjJGOTc5QkFFMzkyQTUzRjM5NkNCMDhDMEY0RQotOjEwNENDMDAwNzBDRTZBQUE5RTRGQ0U3NjRGQzgwRTM5QUVFOUY2NjExNQotOjEwNENEMDAwRDk5NkU4M0M1RjU5REZDOTc4OUZENjVEOEE5MTU3NkNCOQotOjEwNENFMDAwQzE3ODQzRjYzNDhFMzcwOENGMzMzNERFRDJBNUI3Q0M0MwotOjEwNENGMDAwNDdGRTc4NjlENUFBMUI2MTNGOTU1QUM1NTgzQjhEQUJENQotOjEwNEQwMDAwNDk1MTc5MUM0RDMxNjJFNjI0RDg5MTkxRkQ0NEQ4NkYwOAotOjEwNEQxMDAwQkQwNzlGOEJEMzBBNzcyQURCQUQ2Q0RDRjcxRDJDRjUyMgotOjEwNEQyMDAwMURFMDNBRkE1RUQ5NTI2NTI1QkU2RkM4MTcwRTE0QTY2QgotOjEwNEQzMDAwQjZFMjA5NzlBREM4RUY2OTFBQTlENzVGNjBERTREMzZEMgotOjEwNEQ0MDAwNTkxRjNENkY2MzNDMjMwNjRCMzlENTk0RTlGOUVENTA2QgotOjEwNEQ1MDAwRDBFNTBEOTVDRjc3OURGRTIxMzczMUI5MEQzQkFENTU4RgotOjEwNEQ2MDAwREZEQjVCRjM2QzY5RkNFMzYwNUJEMzc3REM4M0E1QkNDMgotOjEwNEQ3MDAwMkJBNUYxNjE5Q0JERDY5QUYzQ0FCMzM2OThFMUNCQjZBOAotOjEwNEQ4MDAwOThFMUVDMUQ2NkI4N0ZCRDE5RjYxRTMwQzM3OTdBQkY3NQotOjEwNEQ5MDAwRjBCMzcxNkUxOTdFMzY0QUY4RDkxRTg3RjRCMzAxQzM5OQotOjEwNERBMDAwQ0Y0NjA5M0YxQkNGRTE2NzAzODY5RjBEMTg3RTM2NjAxMwotOjEwNERCMDAwMDNERkYwQjcwMUMzREY0NkZEQUY3NDNDMDk3RjM4MTU1MAotOjEwNERDMDAwRjk5QTE1MTY5OUU3NEJGNEYwRjMzOUE2Njk3NkQzQjkzOQotOjEwNEREMDAwOTQ1MzJGQ0E3MzI5QzQwRjUyREVDRjc3RjEzQTc5MTg1MgotOjEwNERFMDAwMkQwNjQzMkZDOUY1OTRGMkJDMjNCODg0REUxQkUxRDExNAotOjEwNERGMDAwRTYwRUM2N0E1REYzQ0QxQ0YwNUQ0NUI3NDZDRTdCNkQwMQotOjEwNEUwMDAwNUFGNjRBQUZGQkE5NURBMzEyMkY2MDU3NTRBQ0Y5NjY1RQotOjEwNEUxMDAwMDZFQ0E4MjQ4RjU2OEVGNjk1QjEwRENCMDc3MkRDM0VCQQotOjEwNEUyMDAwQ0NGMkEzQjFDNkYzRDYwODQ5NDc4RUJGMTRBQkI4Mjk1QwotOjEwNEUzMDAwODNFQUU3MjVCNzk5M0YxNDlENzcyRTU2OUFGM0NDMkYzNgotOjEwNEU0MDAwOTY3NzFFQ0QwNzg2MURGOEI4QUQzOUREQ0Q3RUZBRDAzOAotOjEwNEU1MDAwQzcxMEU3NURBOEM0QkJFMUE3N0YxNjIzOTZFMEZFQTBCQwotOjEwNEU2MDAwQzBBQjMyNEZBREU1OTA0REU2MERBQzU0RDY4QjA4RkI5MAotOjEwNEU3MDAwRTRENzNBQkUwRDc4RjZEOTVDQjZDN0NGQzEyQjE1OEJGNwotOjEwNEU4MDAwQjg1Qzg4MUU1QTczMTNGQ0VCRDNGMzJDNkM3NzlGOUU4RgotOjEwNEU5MDAwNTc1MEQ4MUVGNjFGRjk2NTU4MTNCODlGMkI3MkJDQjgyRgotOjEwNEVBMDAwOUYyQjkyN0Y3MDNGOTdGOURDNDQ0NzUzN0JEQ0NGNjVBMwotOjEwNEVCMDAwM0UzNzcxOTlBOTdFRjJDQTVDNTM3RDQ5RDExMDUzN0Q2QQotOjEwNEVDMDAwMEYyMUM3Qjc2OEJFMUM1RjA5RTkwNzdGM0JDMDRCMzg5RAotOjEwNEVEMDAwNkY3MTExNjg0Nzc2NEExNzI1QjA5Q0U1RjIzQTg1Q0Y4NQotOjEwNEVFMDAwOEQ3QjE2QUYyODA0NUU0RTEwM0IyMzhFNjBGMENENkM5OAotOjEwNEVGMDAwNURCRjA4NkJDMDBFQkUzQjkzMjJFQjhGMkEwRDVGREVCOQotOjEwNEYwMDAwNERFRjlERjRENTZEQzJENTI5MjcyRDZCMUYxQ0VBNDFBRAotOjEwNEYxMDAwN0VGREJBMkU2RTVBODdCNzJBQTE1NDg4OUUzNTc5REE1QgotOjEwNEYyMDAwQUVDMUVEOTE5RkQyMzg5MUY3MTNCN0I3NEZBRTgxREQ4NwotOjEwNEYzMDAwNzk2OEMwOUI4M0QwREYxNjk1RjMyNjBDN0VFOTYyOTNENwotOjEwNEY0MDAwNzFCQTc1ODM4ODY2NjQ0RkFDQUI5M0Y5QkNFQkVBREE0RgotOjEwNEY1MDAwQzVGNjg4RDg3RjMxRTZEOTAyM0EwODk0NEI1MjUzMzhDNwotOjEwNEY2MDAwMkUyNDFBMzAwRkIyREI5N0MwNkUzQjdENDhEQUVEQzZCNwotOjEwNEY3MDAwN0M3QTJDMEQ3NzVBNDRGNUI3NkU4RjYxRkM3Q0FFRkJDMgotOjEwNEY4MDAwMEQyN0ZBQkNENERGODNGMzFCRDU3QkJBQThCMDA3MkM1RQotOjEwNEY5MDAwNUIzNkMxOEY3MEE0Njg2RjgyRUZFN0FERUJGOTI3REM1OQotOjEwNEZBMDAwRUZCNUUwN0Q1NUUwM0NDRDE3QUI0NzI1MENBNkVGMUNENwotOjEwNEZCMDAwREI2QUYzOEUyM0Y4RUVCQTI3RUNGMDkzMTc1ODgzNzY2QQotOjEwNEZDMDAwQ0VDMzdDNkE5RDFENzlDOTU3NkU1RUM3Q0ZFNzZDMkUzNAotOjEwNEZEMDAwRTZCQ0NCQjlBMjhBRkRDODIzRkFCOTJDNjNERUYzMEE3QQotOjEwNEZFMDAwOTRCNTZFRTIyRkVGMTU5MjBGRTdDNUNBRkQzQ0UyRTdEQwotOjEwNEZGMDAwOTczMUFGRDM5QjE1MUZFQ0M3Mjk0NURCRURDNUQwQ0Y0QgotOjEwNTAwMDAwM0FCRjdBQTY0RTFEMDNGRTZCMDlDOUZCMzk1QTVFNTc5QgotOjEwNTAxMDAwRTVCRDYzNTM1NDk5MTc3MzgxRkI3QzI2OUZDRDY0RkVENQotOjEwNTAyMDAwOUU3MkI2MkZGQjU5RDc4NkZCNDgzRjM2NUJDQThGOTZEOAotOjEwNTAzMDAwN0E5NUY3RTM1QTVFREY5RjMyMTlERkFCQjdGMUVFREQwOQotOjEwNTA0MDAwM0M3QjgzM0NGRjZGMTE1NTM4NDdFMDk5REEyMEY5MkEwMQotOjEwNTA1MDAwNTM1NEMxRkU1QkY0QzZCQjA3QjFFRTE2NjUzQTNENTgyQQotOjEwNTA2MDAwMEY0NTQzNTUxMzdGNTY4RThFMzNGMUVGNTQ5MTZDM0FCMgotOjEwNTA3MDAwNDc3MzFEOTI0QTIyRTAyOUUzQkE5QkRBNUYzRkE1NkY4RQotOjEwNTA4MDAwOTQzQ0M4NjlBRDY3Nzk3MDQ1RDQzOUMwMDIxMzVDNEU1MQotOjEwNTA5MDAwRTU5RDkwNEZFMjZBRDM3QkU1NjI1MjZCM0JGOEMzMUIwMAotOjEwNTBBMDAwQTRERDVBQkUyMzY5M0RGNkM1RTc1OUE0M0YzNDU1OTNBNAotOjEwNTBCMDAwQ0YyQkY2QzhFNzQyQzQ5RTNCOTc4RUYzRjg4ODBGOTgzMwotOjEwNTBDMDAwQ0U2REVCRkI3Q0U4OTdFMzgxREQxQjM4QUVEMzlDNEVDNQotOjEwNTBEMDAwRjI5MjMwNUE5RUQ1Njg0NzNDOERDQ0U1NjZDNDQ5Q0JFOAotOjEwNTBFMDAwMDMwNEEzNUZCRjY4QUVDNUY5MTFBQkM0QUZDQkVCRUU1MQotOjEwNTBGMDAwQjYyNEJEOTUyRjJBNzY5OEYzQUQyQTBFQkRDQkVEOEM0NAotOjEwNTEwMDAwN0NDNkU4N0FCMkQzOTc3N0M0QjhDNzI5M0UzRTM3Qjk5MAotOjEwNTExMDAwQTVDOThFNzhEMDE0QUQxM0RGNEIxMTdENUY1QTU5QTgwNQotOjEwNTEyMDAwODlDNzc5RUQ5RTU0MzdGNjZEMkJBMkVFNDk1Qjc4ODVFMQotOjEwNTEzMDAwNDdFQTI3M0RGRThGN0I4NkE0OUREMDYwOTc3MTVCRDdBMQotOjEwNTE0MDAwM0UwQkFGM0Y3OTJGQ0YzOUJFOUM2NzkxRjcwNTQ0RTEwNQotOjEwNTE1MDAwNjU5Q0VGN0RFRUFGNjNCQUNDNDMwMzVFQUMxMTc4ODlGQQotOjEwNTE2MDAwRTYyM0UwQzkxQTgxQTczOTQyRTI2OTBFNDk5MzIwQzFCQQotOjEwNTE3MDAwMURDMTY3OTFGOEY5ODlGODlBOEI3RjUwRkREQzNENEE5MwotOjEwNTE4MDAwMTBGOTZGRDFGODk5QTMzNTMyRkVFNjY4QUVBQUEwRkJGQwotOjEwNTE5MDAwRkNGOTU0RENGOUMxNDFDOEE3NkRFOUYyNUVDMzY4RkNCMwotOjEwNTFBMDAwQ0QxNTBEQ0JFMUY3Q0UyNUJEMTE0RTYyQkVCMDNCRDk3QQotOjEwNTFCMDAwNEY1M0JDRDBEQjlFNDE4RDc2OUI5NDY3MUNFNzZENzk4NQotOjEwNTFDMDAwRkQ1RDVFNzcyRDVFNUFENUUwMEI0MUY1RDRERUU1Rjc0NwotOjEwNTFEMDAwMzQyRjY5MjNDRjc3RDI1OTE5M0ZCOUVFQUM5NUNCMjkzQgotOjEwNTFFMDAwRTNDQ0VCRUVEQUIzQTlGQ0ZDQTdFMkE1MDI3ODA2OUZCQwotOjEwNTFGMDAwMjNBRTk3RDBDNjNEN0I4OEYzMjU5QzNGNUY2MzNGQzRCOQotOjEwNTIwMDAwOTBDM0FENzY5RDM5NkZGOTQyRjY1Rjc0OUNGMEFFMkI3QQotOjEwNTIxMDAwRjQ3Q0MxMDE2MjgwMjk2RkY5MDI3NjQ3NzRERUIyQTE4NQotOjEwNTIyMDAwQzc1QjVDNTI0RjhFNTFCM0RGRjJEMEJDOEI1RjU1RDk1OAotOjEwNTIzMDAwNEZGNzRDMUQ2QkUxRjNFM0FGQ0FGQkYxQjQ2NTY3OUExRQotOjEwNTI0MDAwQzA5RjVBQkM4NUU1RTBDMkY4NkU3Q0FGODVBNkM3RUQ2RAotOjEwNTI1MDAwOEM3RUJBRDRCNDRCNDVGQ0FGMzhDNkNERjlGOEM1MzUxMQotOjEwNTI2MDAwNkExMUY0NTczMUI1RjM0NEI0NUJCRUI0N0IxN0U4ODVEQgotOjEwNTI3MDAwNEZFRkU5RkQ1ODgwRDZDQkE3QjdBN0E0MjJFRUZGRDkwMAotOjEwNTI4MDAwMzI1QjBBNDlDRTczRUQzRTVEMzZBNjBCRjIzMzNFNUJEMAotOjEwNTI5MDAwRTU5ODFBNkMwMzNGOUI3NDdENTE3RUQ3MDdBQ0I3NEVERgotOjEwNTJBMDAwNUE1RTRGOTg0QUVGOTcyRERCOTk4MEI0RkZEMjY1RUY5NQotOjEwNTJCMDAwRTZCQkM5QTRCODIyNEZEQjc4MDVFRkFGQUVEQkU0MDY0RQotOjEwNTJDMDAwQkVEQ0VCRjgzRTgxNUQyNDJFRjE3RUYxQjI2NTRDRjczOQotOjEwNTJEMDAwMDU4QURDQUZCRTU1MDk3RjM5ODJEQTlEODg1OTk1MzA0MQotOjEwNTJFMDAwMzUxM0I3QTEwQUNFRDMzOEIzMjE1RTNGOEY1NkMzNzlBOQotOjEwNTJGMDAwNDMyNzYyQzkxRUEwRjY0NzYyMjQzRThGNkM4RkY3RjJFNwotOjEwNTMwMDAwOUQxOERFNDAxN0Y2REZEQUNCRkQ5RDUyNEJGRDc1MTg3OAotOjEwNTMxMDAwQ0Y1NTI5REFBRTJCMDY2MDFDQzE0RDY5MkFCN0UzNzM1RAotOjEwNTMyMDAwRUI1QTREQ0ZDNEI2RTIxRkU3RTZBOUVCNjlEOERCMjhGQwotOjEwNTMzMDAwNjE2RjIzNUYwNkY2MzY2MEQ4REIyODYxNkZFMzc5RTU5RAotOjEwNTM0MDAwMUFCM0ZERDZBMEVGMTcxQUYxRTBBRUI1Q0QzRUQ4QkIyQgotOjEwNTM1MDAwODEwMjkxNTVDNTdBNzY1Q0MxQkY0MjZGQkQyQUVEODU0OQotOjEwNTM2MDAwNDU4QTc3NDUyM0RCNEJGMTc1RjAzQjZCQUREMkNFMEUxMgotOjEwNTM3MDAwN0MyMkNGNDVEMTlGMkNDOEE3NUZBODk3NzlCMTlGRkYwQQotOjEwNTM4MDAwNTBEQzVEOEZBM0ZENjJFQzBGRTVFMURFNTNCMkJEMjI4MAotOjEwNTM5MDAwRjg3NUM0NTlBNzg4M0M3NzNCOTI4Q0IwNDg3ODk0MzMxMQotOjEwNTNBMDAwRERENDdFOEMzQkQzNTQ3RjY1NUExRjUzRkQ1NTFFOUYyMQotOjEwNTNCMDAwMDlCRTI2NkJCMEE5RkQ3OEVGNDgxM0ZDQjM0MTU3OTk5RAotOjEwNTNDMDAwREE0RkY0NEYzNEMxOTNDNzRFMzNCNUJGQjZBOEQ4NTRBMwotOjEwNTNEMDAwN0ZGREQ0RjlBNkZBNjlEQTJEMjZGOEM2NzlCNzlCREFFQgotOjEwNTNFMDAwREY1NDU1NjNBQTE3QTJFQTQ5RTBDNzFGOTBGN0IwRDU2QQotOjEwNTNGMDAwQzM3RjcyRTBGRTE3Mjc5NzU0RkY3QkU0MzE4RjI0NTE1RgotOjEwNTQwMDAwQ0ZGN0FFQkM3MURCRTM4MEY3MjFBRjk5NTZEQ0QwNTEwQQotOjEwNTQxMDAwOTZBQUI2RTJGOEI2MjEzMkFFQTgwREY1RkY3ODA1RkJFNAotOjEwNTQyMDAwQjkwRDdDOEYyNjYyQjdFMEJCOTQyMTFFRERDRjk2Q0ZFRAotOjEwNTQzMDAwM0I1OThEQjg1NTQzM0FERjk3MTBENUZFNDJFRDg2QzZFRAotOjEwNTQ0MDAwRUQzQkVEMjE5NkJCRjM4NUM3NkVCMjBFNDYxRUM0QkU4MgotOjEwNTQ1MDAwRENFRTA0RUYxREQyNzQ5Mzk1RTRDREQwMjFGQjlFRUREQwotOjEwNTQ2MDAwNDZGMEMxMTdGQUNDNjBGOEYyN0RBNzUxM0ZBNUZFMEJCQwotOjEwNTQ3MDAwNTkzRjU5QjA2OUQyMzBFNERFOUIwMkM0Nzc0MzQ3NzQ4OAotOjEwNTQ4MDAwNUJFOTk1NzE5MTM2Q0ZCNzFCMjVGMDg0NzNFMUMwMTNBQQotOjEwNTQ5MDAwQ0EzMEYxM0RDQTdEQzRGNzI4MEYxMERGOTc5MDVDM0JGRQotOjEwNTRBMDAwNDg3QzhGRjIxMEY5OTk3OEZFNkZFNDY3QTI3QzlERkMyRQotOjEwNTRCMDAwNEM5NDZGOTI3Rjg5QjI4MUZDNEI5NEVGNTQ0RkU1RjI4QwotOjEwNTRDMDAwQkQ2QThEREZGQjYzRjUzQzJFM0ZBOEFFRTJFNzFGNTVCQQotOjEwNTREMDAwMkZFNkYyOTNFQTAwM0ZCRjdDODg4QzIzQjg0OEVGNDA2OAotOjEwNTRFMDAwQkY1NzIwMEYwNkY5MDJEMUY3MkM1N0I5RjlGRTgzNUE5RQotOjEwNTRGMDAwNUQ2Rjg5N0EzREFGNjYxRkY5QUZDMDY3QTMzNUU5NEI5MQotOjEwNTUwMDAwNjdFQkZFRTI4NUZEN0RBQkY4MzJDMjZFOUI2OEY1MEY1RQotOjEwNTUxMDAwMTlDMkY0RURFNEU2RkQyMUZERjkwQjVFQ0QzRjg0RTgxMAotOjEwNTUyMDAwRkI3RUU2RTQ5RUI5MkFGNDVERDVDQjg5NTRGN0JFQTU4RgotOjEwNTUzMDAwRURGQjI3NTM3NDdFRjEwREY1OEZDMTdCQzM5Qzg3NzlGQQotOjEwNTU0MDAwM0ZERDkzNEVENkVBMTA4NjE1RDA1RkM5OTFGMUNCNjE0RAotOjEwNTU1MDAwRDY4NjVBRDRENzdFMkYzQ0YwOUI1RjhBRkYyM0VGODNGOQotOjEwNTU2MDAwRDc5MkI5OENGM0M3Q0E1OUU5QUYwQ0Q3RjdFRjZCQkYyNQotOjEwNTU3MDAwOTdGQkY3QzMzMTc2QUExRkU2OTZGNUI1Mzc5M0E2RjNFNgotOjEwNTU4MDAwQTEzRUM0REYxRjhFRDNDRUYyN0M5QjI5NkY2N0Y0RDk3NgotOjEwNTU5MDAwODY1MTVDRUZCMjdCOTA2RjNBREMxOTk2REY3MzBBMzc2NQotOjEwNTVBMDAwRTJDQjJGQzVFRjkyRkQ4RjkxRkQ2RkY4M0VDQ0RGODdFOAotOjEwNTVCMDAwRjc2OTFCOENGMUI3OEU2NzA5OEZBRjQxREU0Rjk3MkRDRQotOjEwNTVDMDAwREJEN0VBRUQ4NzZCRDQ3RjEyQzY1NzI1Qzc1NzRDRUQ2MgotOjEwNTVEMDAwRTVGODU5Q0UwREM3Mzc5M0UwNkRDQkZBRDgzNDc5M0U1NAotOjEwNTVFMDAwNzlGNDU5QkRERTJCRTdEQkMxMkE2MTlDMjk0MTdENDY1OAotOjEwNTVGMDAwM0I0REY4QTlCRjhDMENFMTQ1RkM2RDc4NEE0MzNBQjdBNgotOjEwNTYwMDAwRDdGMzE5RTJBREYyN0I4OTVFNzkxRjU3OEZCRjZBNzJCQgotOjEwNTYxMDAwM0Y4MDEwODBGMTFCNzk0OUM2QkFFRDlDMUM0RTg3OURENgotOjEwNTYyMDAwRDc3OUExOURCRjk3QTE2RUY3NDE1RUU3RjhCNDAwRTg3NgotOjEwNTYzMDAwNjc3NTVBNzg3RUI1N0U3OTVFRkVFRDE3M0Q5RDcxMUZDOAotOjEwNTY0MDAwRTk0NERENUVGRjA3RjQ1RjI2RTlCRjU3RDIxRjk3QkMzMAotOjEwNTY1MDAwNjVCNEMyQ0ExQ0ZBNkY3MDlCRjQ5N0Y4MjI3RUMxRkMzNQotOjEwNTY2MDAwODlGRTRDMEZEMDUzQTdCRjYyRTA0N0E3RkYzOTdBMkRDMAotOjEwNTY3MDAwODlBQ0Q3RjlFMzdDRkE4NzI0QkQ3NTdFMUFFRTk0Nzk1QwotOjEwNTY4MDAwMTM2ODBGRkEwRkIzNEE3RUE4OEQ5MUY5MUUyRkM1MTcyNAotOjEwNTY5MDAwM0U4QzdCQjIwODM3NDU4OENGMEYzM0Y4QTU0QTlFMUY1MgotOjEwNTZBMDAwRkVERjRBRkYzQ0FCQkM0N0NFNTFFNkU0N0JFQTJFQzZBOAotOjEwNTZCMDAwMEYzMzlCNDUyMUVFRTkzQ0VCRDM1MjIwMjc4QUNGN0E2QQotOjEwNTZDMDAwMEUwMjlFMkQ0NjE2QzIzQzM3RUE5NTlDQjZFQkI1QkYzRQotOjEwNTZEMDAwMzREQjAwMUJDRkIzRDA2RTQwNkJCREQ1Rjk0RTFDRTQ1QwotOjEwNTZFMDAwOUVGMTFEQTNERDk1RTdCNUNCNzE0MjVGMkMxQTEzNUFDRAotOjEwNTZGMDAwMEJGRDM1QjZDNkNBNzE2QkIyNEMxODNFNDRGQTRDRTY4NwotOjEwNTcwMDAwNzNGQTEzN0NBOTkxRjk5RkRFMDMwQkYzNzBCRkE4M0NEOQotOjEwNTcxMDAwQkYyNTVDRDJBRUY2RDA1RkM4RDVDMjFGOEE5NkEyM0YyNQotOjEwNTcyMDAwQTE2RUIxQzJFRjM4ODM3QzVBRkE0RTYxOEFEOTNFMUYwRQotOjEwNTczMDAwMUJCNUJGN0U3NUY2NTc2QzhGNUY3RDkxN0JBRThGMEM2RQotOjEwNTc0MDAwRDFGN0REMzM0NUU2N0ZGMjlFRDFFNjIxQUM2NzJGRUQ0MAotOjEwNTc1MDAwOUVEMTJDNTFDRjdDMzBCQTU4RTY3M0QxRkMyRDM5ODhCQwotOjEwNTc2MDAwREJGODQ1MTVFMDQyNTE2NTA1MUY4QzE1NzU1NkU5NTc2NAotOjEwNTc3MDAwRkE0RjU0RTRCMUQ3Q0VGOEI5NDY4NEY5Rjk3ODUyMjhGMwotOjEwNTc4MDAwNTAyNjNGMjNGNjAxQkMzRjZFQzI3NERDMUYzQzJBNzdEMwotOjEwNTc5MDAwNTQwRjNDOEZCODNGQ0YzNkI0M0RERjlGRjc2Nzc3QzRENwotOjEwNTdBMDAwRkQ3OUZCNDZDQkY1QjZGMDVBMTk2RkRBRTdFQ0RFQTZDOQotOjEwNTdCMDAwMURGQTJBRTlEQjFFM0Q4MTE3QzFFNUNCQTQ4RjdCRDAwMgotOjEwNTdDMDAwQkM1RjIxN0QwQ0Y4RUFBQzFBODFGNzBBM0RFNkJDMjNFOAotOjEwNTdEMDAwRTNGRDZCRENBMzg0QjVERDg1RjVERDM1RkQ5RkVCMDREMgotOjEwNTdFMDAwM0NCRjk2RDQ3QjM0RThGNTVBRDJDMEQxODhDN0JGOTY2NwotOjEwNTdGMDAwRDRDMTIyNEI4NzlEQ0I3RUJCN0JCNDM1M0U2MzdEQjQ0OQotOjEwNTgwMDAwRjY1N0M4RkQxOUY3MDU4RjZFMkZFRjBCOEVDNkVCRDUzNwotOjEwNTgxMDAwMjI2NEMyRUYzODFEQkYzRjAxQUZERUI2RjA5QTgyQzNFQgotOjEwNTgyMDAwOEVFRDgxQ0Y3Nzc3MTk3OTUzODgyN0Y3NThEQUMwRjA1MgotOjEwNTgzMDAwQUQzNkI5MEVDQTc3OEYyRjQwNUVGNEMyRjc2NTdFQzdDQQotOjEwNTg0MDAwNTEwQzA1N0E3N0YxMTAxRUZGRjBDNTgzODUzNTk3Rjc2NwotOjEwNTg1MDAwQTMwMkMwNzc5OTUzRTJGMTY0RTBBNUZFQjhENzNDREMxRgotOjEwNTg2MDAwNEUxQjg5RkVCRjVBQUJGMjc5RkI5M0NGQzQ3MDNDRUU1RQotOjEwNTg3MDAwNDhGMEQ5MDRFMEQzRTBFMzMyRDVCM0QyOEI3NUY4OUE3RgotOjEwNTg4MDAwMkFFRjU5RkE2MTdGMTdEQzQzN0EyMUJFMjY3RUJFN0E2MQotOjEwNTg5MDAwNjg1QkZDRUMyMjdFRUU3NzNFM0Y4QjBERjIxRTgzMzI3RQotOjEwNThBMDAwNjc2MTlCNzQzNkZDQ0VBNDFDM0ZDQjFGQjcwOERGMDI5OAotOjEwNThCMDAwRkVBRjEwRDIzRkFBNzBCRTJFRUZBOTI0MThFNzVFQTM1OAotOjEwNThDMDAwRURBQUZDNTg2QTRGRjU3NkE3Q0MxNzM2RTg5REUxOTAxMwotOjEwNThEMDAwRjc1ODY2QzQwOTM3RTIyMDQyQ0JCRDBDRTNGREI0QkJFOAotOjEwNThFMDAwQkYxODc4MjFCRjc2NEI2NERFREFGMDcwNUZERTc3MUU3QQotOjEwNThGMDAwN0I0OEU1N0NGNzU3NjJFNUJERUY4RDQ0MEY4NUVDRDMxRgotOjEwNTkwMDAwMkJGQjU2QjlCQTExMURFN0U2NkI2NTc4NUZBODNGQTg3NwotOjEwNTkxMDAwRThGN0Y1OUU4QTY4QzdGMUYzNUMxN0ZCRDkzRkQxNUZDMgotOjEwNTkyMDAwQkY3NUE4RUVBRkY3MTdGREZGRTFFRjI5QjQ5N0Y3MEVBQgotOjEwNTkzMDAwMkY3QzM1Mzc4ODcxMkZBQzIxQUQ5NkMyQkY4QkMxRjc1NAotOjEwNTk0MDAwQzRENUMyM0ZDRjZDOTUzQkMzNDUyRkZFQkQ4QzUxMjlCQQotOjEwNTk1MDAwMzZDRTMzRkZERkY2N0IwQTE5NDJFM0Y1Rjc5RkZENUQ5NAotOjEwNTk2MDAwODVCMUYyRDE3OUJGQUI5MDkxQjBFMjgwOTZEMkZBQkIwQgotOjEwNTk3MDAwMUFEMUJGQUI5MEExREY2NzJEM0M1MjdGMThCRkE3MzA3MwotOjEwNTk4MDAwNDJGODM5MkY3RjRDOUE1OUFGOEM3MjhGM0NFMEU2RDJBNwotOjEwNTk5MDAwMUNFRkM5Qjg0ODNFRDdCMzQzNzVCRDcyMzFCQTk3MEJGNwotOjEwNTlBMDAwOURFRUYyNUMyN0Y4NDBGRjdEOTQyMEY4RDNGODdEMTQzQgotOjEwNTlCMDAwODNFRUM2RUZBNEQ0QjY5N0JGOTNGMkNGRjZCQjI4RDEzRgotOjEwNTlDMDAwRjQ4OUZFOUQ5NDY4RkE0NEZGNkVDQTcwMkQ5NkYxMzRGNgotOjEwNTlEMDAwQUFDQ0M1N0M2REQwNjkyQUZENjU3QjAwRTc3Mjk1RkY3NgotOjEwNTlFMDAwN0U3QTFEOERBMkQ3MTlCMTcyMDBFRTI5M0Q1NTJDRTVBNgotOjEwNTlGMDAwRkE4NUY0RkYwNkFGRkYxNEU0QzU4Rjg4MjdFMUJDOEI1RQotOjEwNUEwMDAwNTNDNjQzRkNCNTU2MTEzMzVDRTA3RTQyQ0U5N0ZENDU0QwotOjEwNUExMDAwQURCQzA3QUFENjJBRTMwMTAxQTIyQkVFQzVGQjJFRjZFOAotOjEwNUEyMDAwRUZGMjNFNDdCMjhGNkMxRDExOTdBOUUyRjcwMzc2QTdGQwotOjEwNUEzMDAwQkJENjBCN0EyNzMwOUYyQzVFMkNDRjAzMUZCNkQ0RjEzOAotOjEwNUE0MDAwRUY1RENDQ0NBRTUyQjA3Rjc5MkM1MzUzODZCNTQ3QkNCQQotOjEwNUE1MDAwQjg2OEZCMUM4RUNCNTcwRDg0N0M5RkYxMDc0NzE3RDQ4OQotOjEwNUE2MDAwQ0ZFODJBRUY4RjE0RDk4RDAzMjJFRDkxMTkxOTMyMkYyNwotOjEwNUE3MDAwMkI2Njk4MkVDN0JEMzIwRkNCMzU0Q0ZBMDlGMTVFMzczNQotOjEwNUE4MDAwOUY2QjI4Q0UxNjdBN0VBQkU4MzJBMzFGRjhGODEzQjZDOAotOjEwNUE5MDAwRTM1QjNDRDJBRTZFQjRDOTdCMkMwM0FGQ0E3QzlFQjUyRgotOjEwNUFBMDAwNTVFRkIwRERCRjkxRUM1QTU1REEzNzZCRUVFMzM4NDM3MgotOjEwNUFCMDAwODJDMDNFRUVFMzMxQ0Q0OTE4N0ZFRjM1QzI2NDJGRjQ0QQotOjEwNUFDMDAwMDkzQTRENzlDOTdEMzdCQjRENzBCRjUwOUFBOUZERTVBNAotOjEwNUFEMDAwN0IzQ0E2N0E1RjM4Q0I1NDlGN0JDODZCODIwNzM0MEMyMwotOjEwNUFFMDAwMzJCNTFGRjg4MURGMDQwRjZFMUM2QjZBM0ZFNDQ4OTFFQQotOjEwNUFGMDAwMDkxRTNEQUM5QjhDRkI4MzI3NjkzRTMzMTZCOTgzRjJBQwotOjEwNUIwMDAwMUU3RDE5MjdFOTZBOTdGNjU0RURFREQyOUYzMEYyRDc0MgotOjEwNUIxMDAwMzU3RDFENDRFN0FGNzdCNkNBRkM3NTdCOTVENDZCOUE4QgotOjEwNUIyMDAwNEJGQUI3RUU2NEUxNTZGOTVDNEMwM0MzQjgxQjgyRjM0MQotOjEwNUIzMDAwQzYwM0U2M0NGMzRFNEVFOTVGNTk0NjRCRkZDM0FFRTc2MgotOjEwNUI0MDAwOTlDNzY2Qzk3MzJGNDY1RTM5RjkxNTdFRTBCQjg3NjgzMQotOjEwNUI1MDAwOUNDNkJGNzdBMERGMjcxQUNEQ0Y0NTNBRERBM0M3RERBRQotOjEwNUI2MDAwRDUyRUNGRDNENURFNkVFN0ZENzNDRDY1NkY1MjEyQ0U0NQotOjEwNUI3MDAwMUZDRkVEMDMyNUZGNkY3NEI2N0RFRkQzOEM2MTMyOEU5RQotOjEwNUI4MDAwMTJDQTJEQkE2RTE4QjU3QjhDRDQxNkRCNUZFN0Y1RTcyOQotOjEwNUI5MDAwNkQ4NEJDQUJGRDk1OURGM0M2MkZENkRGOENDQkU1N0MyOQotOjEwNUJBMDAwQTY1QjJDMzMyNzY2QjMzRkM4RTcwMDhEN0UyQkY0N0VCRgotOjEwNUJCMDAwMjc4RDUwREE5Q0RGOENDNDY2QkU3NzREMjREQTNERTAzOQotOjEwNUJDMDAwNUZDREI1OUM2MTc3QUM0ODUyREJDMDdCRUJCOTBDOTlEQgotOjEwNUJEMDAwQTc3RkQzQ0FEMDdEQkQ2OTlDRDNFRDc1MzY3OUUxNDBFRQotOjEwNUJFMDAwRDAwNjdFMTg1NzQwNzZBNDBGRjFENzgyNDc1RDQ0OEZDOAotOjEwNUJGMDAwQzcxNjVCMzkwRTc2REI4QjJGQ0VDMEQ1RjRFMzQ1MzM2OQotOjEwNUMwMDAwRjMwMzEyNTFCMDlGMDhGQjUzQ0Q2OTFERjdCMUUxMzI4OAotOjEwNUMxMDAwRUZGQjQxNUMyQ0NERjZDQzBGM0NBRTE2M0QzRUQyMjJDNAotOjEwNUMyMDAwNDJFN0NFNEYwNERBRTAzN0NENzU5MENGMjFCODE3NEE1RQotOjEwNUMzMDAwN0VFQTFDNzFDRTBBRkVFN0ZGRDQ3OTA5ODExRDUyRUE4MwotOjEwNUM0MDAwQzc1NjI3RTQzOUM3OEJFMENGMzhBN0UyQjlDNTU2QjRBOQotOjEwNUM1MDAwREU4NUYzMjI2MkFDMTI4MTg3RkYxODJFRTNGQzg3ODY3MwotOjEwNUM2MDAwNDk3QUEzMURFNEQxODVEQTkxREQ5Nzg4RkQ4NTE2RTE5NwotOjEwNUM3MDAwNDk3NDVGMjRBRUZFM0YzMUZGMENBQjhDMzM3NDcxQ0FBNAotOjEwNUM4MDAwRjMyMjlEQUQxQUNCMEI3Qjk2N0VDRkRENzlGQ0FFQ0I5QwotOjEwNUM5MDAwMEQzRDRFRDZDOTJBRDc3RDI3QUY1Q0Q3RTdDQjg1MDMwQwotOjEwNUNBMDAwRkM3REJCMjZFRjREOEJDNjJGRkY4OTg4QUIxOEU3NTdDRAotOjEwNUNCMDAwNjI0NzRCMzk2MkM4ODU3M0U3NTA3QTRBM0ZENEE2Q0IxNgotOjEwNUNDMDAwODc2MDBGMEJFNzFEREMxRDZGNUVDN0RGRUJGMjYxQUQ3OAotOjEwNUNEMDAwQTEyRjAyRTRDN0U3OUJFNDg0QzBCRTVFRUQzMjk1RTVFOAotOjEwNUNFMDAwMDRDOUM5ODMxQThEQjMxOEY3QjJCODVCN0YxRkVFRTZGQgotOjEwNUNGMDAwMDdBNDFFMUJFRTJGN0ExMEZCMjZCMzU2REJDNDNBREUzOAotOjEwNUQwMDAwNTc5MEY3QzNDRUQ1RTNFNEM1ODFBOEZCNTk3NDdCRkM1QgotOjEwNUQxMDAwQ0M0QUM1OERERjhEOThCREMyNUMzRkQ3RjVFNTI3RjAzNQotOjEwNUQyMDAwMUY2RjhFQkVBN0M2RDhBRkJCNDgxQ0UwRTgzMERENEU2MwotOjEwNUQzMDAwRjcwQUFGOUU3RkJGMDRFMzNCMTM5NEY3NUU5RjNCQUYzMAotOjEwNUQ0MDAwQTRDNzdGNUE4MkNGNEFGODRFMjEyMjdGNDdDMkIwMEJBOAotOjEwNUQ1MDAwMENEODgzN0RCMjg4N0I1ODA4QkZCMTU5RDBFRjRCQURDQQotOjEwNUQ2MDAwNkRFNjM3MUFGODNEOTdFN0ExRUZEMzUxQjk2NDE5RkJGNwotOjEwNUQ3MDAwMzMzMkJGODFFNDAxRUZDQjlEQTA3QUQ4ODEyNzAyQTdGRgotOjEwNUQ4MDAwQjlGRDg5MUQzMTlDNTc3MkQyRDdEMDFGRkJCN0M2M0VEMwotOjEwNUQ5MDAwNUQwRjRERUU2M0I1RUM4ODk3RjkwRDJFOEI4NDM3Q0JGNAotOjEwNURBMDAwN0JFQzE3RkMzNUQ4MUY3RTZDNjNFMDU5RDMzOTA3QUQwNwotOjEwNURCMDAwRDFCQ0NGMTc1RDZBMzUzQkQ5REZCQzIyNEY0QjFFOEU1RAotOjEwNURDMDAwQkM3NEFCRDdFOTI1RjgxRUQ3M0VCRUE3NkIxQ0Y5OEY3NAotOjEwNUREMDAwOTA2QkM4NEI1OTk2MjJDN0NGRjIyQjcwNUFFMkFGNEE0QwotOjEwNURFMDAwRTJFRjY3NjRFODQxN0VCRTJGNDg3QTIyOEUyOUM4QUI3NQotOjEwNURGMDAwQTVCMjM4M0M5OEZCRkZBOUZCNjA5M0NGRkFFNEZFRUYxNQotOjEwNUUwMDAwRDkyMUZDQkVCNjYyMzBDMzU5QzFFNjkxMUY1MEJGRDczRAotOjEwNUUxMDAwNjkyRTBGRTI0OEQ3RDZGRTYyNEMyQzdEQkFGMTVGNUQ0OQotOjEwNUUyMDAwQ0JCOEVDNkMzRTNGNjA5NEJFRTE1MjhGMzREQURBQUUxMAotOjEwNUUzMDAwNUZBRkNCOUYzRjBDMTdGQTdEMzU5MkRGMTdENjI4QkM5QQotOjEwNUU0MDAwQUZCNjEwM0MwRUY4M0U3OTNGQTcwMTlGQUVEM0UxMzFDQgotOjEwNUU1MDAwMTI1RUI0NENDMjUwNERCMDgzNjdFOUJGOTNCNjQ5OEYxMAotOjEwNUU2MDAwQkY2MEZFMjgzMTdGQzQwNUI2RThGMTE5Q0MxRjI1RTZENgotOjEwNUU3MDAwOEZFNzkwNTc4MDIxQUYwMDQzNUUwMTg2QkM0MjA5NzlDRAotOjEwNUU4MDAwODVFNzVGMjQ4REUyN0Q2REVDREI4RDhFNTg0RkQ4QjdCMgotOjEwNUU5MDAwMUIxREIxM0VCMDZGMTcwOTYzREYyRUIyM0RGNkVEMjIzOAotOjEwNUVBMDAwRUJCMTZGMTc1OThGN0RCQjQ4MThGQjc2OTFFREIxNkY0MQotOjEwNUVCMDAwMTcwOThCNDE1N0I1QzI5MDZCRkU4OTI2NzgzMkY5MDNEQQotOjEwNUVDMDAwQTMyM0Q2MzNGNkVEMjJCRjhGN0QzQkQzRjdCNDVCNENEMwotOjEwNUVEMDAwRUZERjI4MTY5QkRFQzdCRTVENjRGQjk5OEIxNUQzQkUzMgotOjEwNUVFMDAwOUUxMENEQUNENzY3QUY2OUM3N0M5NEUxMkJBQTA0QkZFNQotOjEwNUVGMDAwRkYzOUVFRUZCN0Q5QkFCMTdDRTAzOEM2QzJGMjU4QUY3RAotOjEwNUYwMDAwQTQ3N0RENTg0OTdGOEIzQzFGQTEzNEYzRUYwQjlDQkU3NwotOjEwNUYxMDAwRDMyRUUxMzFFNkZDNkRBM0M0QkVENzY4OUJEQ0Y3NDIwQgotOjEwNUYyMDAwODk3RDJGOTREOEY3NDI4OTdEQUZEMTNERTVCRTE3NEFEMAotOjEwNUYzMDAwRUM3QkUxMzlGNkJENTA2MkRGMEIyNUY2QkQ1MDYyREYyOAotOjEwNUY0MDAwMEIyNUY2QkQ1MDYyREYwQkVGNjFERjBCMjVGNkJERjBEMAotOjEwNUY1MDAwMUNGQjVFMjhCMUVGODVFNzg3NjkxQzI1MTE3MjBDRjZFMgotOjEwNUY2MDAwN0EwRjkzOUY0OTdDNjhGMjMzREQyNjE4RjY3QTY0N0JCQQotOjEwNUY3MDAwRDhFQjkxRjVCMEQ3MjNFQjYxQUY0N0MyQjBENzIzREJBNQotOjEwNUY4MDAwQzM1RThGODQ0M0MzM0NCQ0RFNjBCNzQ3QkUwN0JCM0RFNgotOjEwNUY5MDAwMTJFRTU3MTc3ODE5QjFCNUYxNkJCRjNFODBCMjMxNUU4MgotOjEwNUZBMDAwNzkwQ0U3MEQ0M0MzQTdDQ0M0N0U2NjYzOENEMjI1ODlFOAotOjEwNUZCMDAwNjRCQUFENjZEQUNDRDFCMEMzRjVGQ0M3RkVBMkQ5MDI5MwotOjEwNUZDMDAwRjlBM0MxOTlDQ0UzNzM4NjlDNTdEQUVGRkI3NEFFNkZFQgotOjEwNUZEMDAwMzBDRUM1RTEwRkQxRERCNzQzRjBFRkNFMThGQkVEQzZGMwotOjEwNUZFMDAwRkI1RTUyREJGQzdCNTE3QUZCNTZCOEVENzZEMUZEMUI5NAotOjEwNUZGMDAwRUQzOEI3MkE2MjFDMzhEMThDQkMxOURGOURBRTFDRjg3NQotOjEwNjAwMDAwMjE5QjJDMEFFNzk5NkM1QTIyRjNBMkEzRjlFQTBCNURCMwotOjEwNjAxMDAwM0U2REIyNkNERjg3NzMzMENEQzU4QTE3RTczRTdBRDQwOAotOjEwNjAyMDAwNjk3Q0NFQUNERjc0NjE1MTdEQURGM0U5RkQ3ODAyRTdBOAotOjEwNjAzMDAwRDVCRUExQ0IzRDYzRkM0NjdDOTRFNDA1OUYxRjFDREFEMgotOjEwNjA0MDAwREMzMDJBOTFEQTZCODE5MUZDM0IzOEUzRUNEMjZFMjA5NAotOjEwNjA1MDAwM0ZGNDBBRjg5MzdEMDM4QTdGN0QwNDlGRkY2OUI4RDREQgotOjEwNjA2MDAwNkY1QTQwOEVFM0M5QzcyN0M4Rjc2MkU1N0I0RjNFOUU1MwotOjEwNjA3MDAwQzBGRDRGNThBQTcwOUVEOUQwMkRDMjhGNzNDQThERkExOQotOjEwNjA4MDAwRjhGQjZFMDlBQkU4QUY3OEE5RUNDRkY4NkVGMURBMkUyOQotOjEwNjA5MDAwNzY5Q0U3MzZGMDU1MkMxQTQ3RTMzRTY5OTFBN0UwNEUwRgotOjEwNjBBMDAwNTlEMUNCQUFCMTVEREE2MUJBREIwMjNCRTg1MkNGNDFFQwotOjEwNjBCMDAwMERDQjRCMUE4MzNDNDQ1MTJGRjhERUQwRjE3OTZGOUIwNgotOjEwNjBDMDAwRTZDQkU4Q0FDN0VGQTAwQUY2MERCNUMwMkQxNkY0M0IyMwotOjEwNjBEMDAwODExMEQwMEVGMTY0ODIzMTFGNEQxMzU1OTk4NERGRUI4RQotOjEwNjBFMDAwQTYxNjMzQkVCM0E2MEIwNUY4RUUzMzdEOUQyNTg1REVERgotOjEwNjBGMDAwRUJBQkJENjQ4MUJERDZBRkFFOTE0QjYzMUVERUExNDk1MwotOjEwNjEwMDAwMkFFMDcxMzZGNzE4OEM3RkRDMTg4NUU1NDc3NDFFMEY3RQotOjEwNjExMDAwRUMwMzg2OTdEQTU4OUYxQkY2QzNDMkY4NzM3OTNFN0Y2QgotOjEwNjEyMDAwNDI5RUNGRTk0MzM2Q0VGMzM5QkRGNDBDRDcxN0VGOEMzRQotOjEwNjEzMDAwRTFCQzFFNkQ4REMyNzJDREIwMUI4Q0JDOURCMjVCREUwRQotOjEwNjE0MDAwQ0YwNzdFOEU2NTA2MzcyNTc1NjczRDlGMzgwMkY5MzQ4NwotOjEwNjE1MDAwRERCNjI3RTAwOENFODlBNTNCQUZDM0QxQkREMzRCNzdEMQotOjEwNjE2MDAwQ0FERkFCRDVGNzc3OENERjNEMTVEOTdFQ0UwNzMzRUM5MAotOjEwNjE3MDAwNDBBMUQ2REIyM0Y3NzE4Q0RGNEYyM0Y5QzlFRDRFRUYzOQotOjEwNjE4MDAwQjFCQkY5RjdFQkY0REYzQjM1RTIzRUM1NkZFNDFFMDQyQgotOjEwNjE5MDAwNUU4QjFGOTVCRjdGMzY2QkM1QUFDMkE5MDRDRkYxM0JBQQotOjEwNjFBMDAwQzNGODVEQUNFODdDQUNGOTUxNzZFMEM1N0VFRkI0Q0ZDNgotOjEwNjFCMDAwMDgzREZFRDM2QUZGMzFCRjlDNzk1RERBN0ZDNTZGRUM4NQotOjEwNjFDMDAwQkY1NkRBMkIzNkNFRkI5RjVFMjNFMzc1NjJCQkUwRkI0NgotOjEwNjFEMDAwOEZBNkQ3OENCMkUwMUVFOUU5M0JGRDVFQzVEMzZBMDcwNgotOjEwNjFFMDAwQkVBNURCMkQ5M0NFNjYzMDdFREZENUVEOTQ2QjkxN0YxRgotOjEwNjFGMDAwNEFGODFERDcxOEEzRTdBQkE1NzM3OUZENTk5OThGM0FEMwotOjEwNjIwMDAwQzkyNUQ3N0JFMzczODJFREU5OTY4MDQzRTYxMUQ2MEI2RgotOjEwNjIxMDAwM0RCRkQ1Q0M3NzNFNDFGQzQxRjRCOUNDQUZFQzQ3REE3OQotOjEwNjIyMDAwRjI3OEQ4M0RGNEJEQTlCMDgzREE4MThGOEI5NzIxNUZENgotOjEwNjIzMDAwOTZERTY2QkIzMzlBOEYyNzU5QzM1M0YwRkQ0OTVFMUIyOAotOjEwNjI0MDAwRjNENzNGRTI2M0RDQ0I3MTRFMkU4OUFBOTc3MUNFNUYwNAotOjEwNjI1MDAwNkM5MEJGRTMzMDU1OTNGQ0RENTdFN0VGMTk3MTdBRkM4MgotOjEwNjI2MDAwQzkyNUUzNEJFN0UyMDExODI0NjI2NjgxQUQzMzkxMkYyMwotOjEwNjI3MDAwM0MwM0M5MEIxRDc5NUE3RUU0RUJDNTY3Q0JGQUQ5N0Y4NQotOjEwNjI4MDAwRDgzQTczMjk5Qzk5MEJDNDI1RDQzQkVDN0M3RkI1RTZBNgotOjEwNjI5MDAwNzJGMkVGRDA1QzI4NEU4MEY4MDBFNEUzNERCN0ZBRUNFMAotOjEwNjJBMDAwQjMyMkU0NjNDMUM4ODJENUZFMDExMUU3MURFRjkxNzlFNQotOjEwNjJCMDAwNTAwQkVGRTlEOUExQURGM0I2NDYzOTlCRjA4QkY1MzEyMAotOjEwNjJDMDAwMjNCMUYxMzY5QzM3QUYxOTIxRkNBMzA3QzlERjk5RTQ0QwotOjEwNjJEMDAwNzlFMUM0NEQxNjdFNkY1MkMyNUI0N0JDRkZFNzE1RDkwQQotOjEwNjJFMDAwOEMwRjg2N0YzNUUyODU5OUM4ODcyOTc3MzYxNjgyREQzRgotOjEwNjJGMDAwMkFCM0FCQzYyMkVGQkE1NTBFNjlGRThDNENDODIxNUY5QgotOjEwNjMwMDAwMThCRjFCNzZBMUI4QzNENjExOTIwRUQxRjE4N0Q5RDk4NwotOjEwNjMxMDAwNTIzRTBCRkRCRUYwNEZFRkQ5QkQwREYyREMxOEZGQTdDQQotOjEwNjMyMDAwMTdGODdEOEM4RDIzMkNGRkFERTczQ0EyQ0Y3NzdDRDA3NgotOjEwNjMzMDAwNDc3QjY4MDRFMjFBMTY3RjEzRjJFODNCQUE3NTdBRkVERgotOjEwNjM0MDAwQUNCQ0Q3QzNBMDZGNENERDc3MUNFRjI4RDFFRkMzMjdCRgotOjEwNjM1MDAwNzlDMkZFRTQyQ0JGRDM1QjAzMzk5MjI1OTZFM0JDRDAwRgotOjEwNjM2MDAwMEM1NTM0RjNCRUYxNzk3NDk3Nzg3QzdDREE1RkU3MjNCRgotOjEwNjM3MDAwMUZGN0YxNUZDNUNBRjMzQTNBRkVBNkRCMUI1RTc2NjZFRAotOjEwNjM4MDAwQjZFMkVGRTNDNUZGNjI5M0YyMkJEQzEzRkI3MjM3NTRFNgotOjEwNjM5MDAwQzU3MDdFNUJDMUM4QTIyRDE4NkY1Q0I2OTdFRkMxNTg1RgotOjEwNjNBMDAwRUQ5N0ZDRTRFQzU2RjQ3QkM4QzFGMjk1MkYzRDg2RkJEQgotOjEwNjNCMDAwMTIyQUVCMzNGOTc3NjU4QUY3Rjg5NkUzOUM2M0MxNDhCNAotOjEwNjNDMDAwNkQwN0RFMkI3NkI5RjlERTkwOEFBNTQ5QUM5RjY2NzQxRAotOjEwNjNEMDAwRDBDRkJGOEI2NkRFODczM0YwRkU4NjFFOUZCQTdGQTRDOAotOjEwNjNFMDAwRkNGRTI5RERDRjgwMjA5QzY4NkE3N0ExMzg5RENDQkY1OAotOjEwNjNGMDAwNDE3RTBFRTI4RjlBNkIxN0M3MDlEQzc3Qzg3QjJBRUNDNwotOjEwNjQwMDAwRTIzRDE5N0Y0QzZCM0I2RTkwQTFDNzFCRDNCRDMyM0U2MgotOjEwNjQxMDAwNjRFMEVGREVBQzU5MkNFNzZDNDYzQ0Y3MUNGRUNDRTdBMQotOjEwNjQyMDAwMzE4REQyRUQ5N0Y2QzJBQzVCMTVGNjU3NEI1NkFCN0M2RgotOjEwNjQzMDAwQUU3QzhDM0E4RUVGNzE1OUI4NEFGMUYwRkE3QUEwM0JGMwotOjEwNjQ0MDAwRTc3QjJGQkM4N0FDMzEwRkNFOTc3OTBBM0JFNEUxQkVFNgotOjEwNjQ1MDAwNzVDNTBEQkI2NDNBNjgxMTExREYyOTU5MzM5OEQ3NUJCNAotOjEwNjQ2MDAwNDk5MENBMzZFRTM1MzVDQTFCNTdFREVGRkM5QzA3NjRFMAotOjEwNjQ3MDAwRjRGM0ZFNjU4OURCNkY0RjhFNThFRkIzRUIxNEQzRkQ1OQotOjEwNjQ4MDAwMEEwNjJDRjAyMzE2RUQ3MTdGM0QyOTQ4MUFDN0Y0MUUyOQotOjEwNjQ5MDAwMUUwNUZCOEE2RUJGQzRDMzREQjc2NkRBRjE3QjI0RDNGOQotOjEwNjRBMDAwRTlDQjk2OUMwQkY3RkZGRkJCRkM3RkM0QkZFRjUzMDAwQgotOjEwNjRCMDAwODAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkVEN0QzNQotOjEwNjRDMDAwMEI3ODU0RTVCNUU4QkY2N0NGMkJDOTRDRDg3OTkxMDQ1OAotOjEwNjREMDAwNDhEODA5MDRDMjQzOUMxMDlFRjVDMUNFMEIyNjEwNjAxQgotOjEwNjRFMDAwOTI4MDgyMjc4NDA5MDQwOTFFRjQ0NkQ0MTI2Qzk0MDkxMAotOjEwNjRGMDAwOTlDNDEwNTExMzhEMDYyOUVBODBDMEExNkEyNTU2NEYxMAotOjEwNjUwMDAwODUxNkRCMDE3QzhCOEEyMEQ2QjYzNjE5MUU4QTZEN0RGNgotOjEwNjUxMDAwQTQ3MEE4RjY3QzU0RUY1QUVCREYzQjk5RDk5OTA0RDBDQwotOjEwNjUyMDAwRjZEQ0RFRkJEREY4RTFDRUJGRkZGN0ZBRDc3QkFEN0YwRgotOjEwNjUzMDAwQTcyODlEQkRDQTI2MzFENkREMkE0OERCRDMxOEFCOTRFNwotOjEwNjU0MDAwMTRGMzQ0MUI2M0RGRTJDRjBDQzY5NkI1MDg4QTZGN0M1OAotOjEwNjU1MDAwNkZCOTI4OUQyRDc1NDEzOTUyQjEzMzM2OTlCMTBBNDkyOQotOjEwNjU2MDAwMzYyN0E3RTE1MzMyQzdDMkZCNjVCNzFGMzBCMTc4QzZFMwotOjEwNjU3MDAwOTY4RjY0NENDODgyRjZCMTBFQjMwREM3NUYwNUUzMEI2RQotOjEwNjU4MDAwOENERDIwRjkwQkIwRkU4NkYxMzJBQjhCODFGNkRFMkM3MAotOjEwNjU5MDAwMzM4M0Y5REM5QkY4M0NFRUE2MThGMzE1NTBBRTMwNEE3NQotOjEwNjVBMDAwRTYxNDI4OTc0NTMyODZFRDYxN0QzRUVDNUZFOTU3Q0NENQotOjEwNjVCMDAwQjEzNjFDOTcyRDJEQjFGMUY1QzYwNkFEQUY0MjVENkYxQQotOjEwNjVDMDAwNjU0QjhDNzk0NUM4RkI1NjkzMENFNUM1OEMyOTFENDE1QwotOjEwNjVEMDAwRkJEMzlFMzMxNDgxRjZCM0NDNUI5Q0RBMEVFQkFERjRBNwotOjEwNjVFMDAwRDgyNTlDQjdEMkE4OTgxREI4MkUxQzE3RkEyRDZFNkIxMwotOjEwNjVGMDAwMzdBNTA1RjVCRjQyMzE1MEJGMTk4QTRDQ0ZBMjc0N0YzMQotOjEwNjYwMDAwODY4MEZCQkQzNUMyODFFQjVEMkNCNTk4MTA5RTQ1MUE4NgotOjEwNjYxMDAwOUMxRkU2NzA1ODIxRjkzMzcwRkMxNTU2MEUwNzZEQkNBRgotOjEwNjYyMDAwQ0EzNjNFNEZERkY1NzE3ODU3QjY1NTk4NjVBOEJGRDE4OQotOjEwNjYzMDAwRTg0QTZEODdGRTM3QzIzQTNERjA1Q0JDRjk0MDg2ODA3RgotOjEwNjY0MDAwQ0ZFQTA4ODcwMEU3QzEyNDc3QUFDQkRFREJGRjkzODc3OAotOjEwNjY1MDAwQUY0RkE1RkRDM0ZBMTFERTc2ODczQzMzMDlENkIzQkMzNAotOjEwNjY2MDAwMDUxNjIzRDM5M0U2MkRDRjY2RDUxRDQxNzBCQjVFMzE1MQotOjEwNjY3MDAwMzI5NjgwNEYwMzNENTk0QkJCNjIxRDBDRjA2MEZDNjdBNgotOjEwNjY4MDAwQjhGOTQ4MEVFRUEzN0UwQzYzMUI2MDFGNkVEQkNGNzM2MAotOjEwNjY5MDAwNzA5RkQyOUQ4Qzg5RDM2MUJEOUJERUEzRkFFNTQ5NENFNgotOjEwNjZBMDAwMTJBMERFQ0M1RTEwQjBERTVDMDk3REEwQ0MzQzA1NEFCOQotOjEwNjZCMDAwMjA5MzhGRjU2RDNBNjMyOTM4MzJCNEI3MDFGRTc4OTI5MgotOjEwNjZDMDAwMTk1QjM3NTVBNjc5MTdCM0MwNjIzNjAyQzZEOTU0MEM4OAotOjEwNjZEMDAwNzNDMDNBMTNGOTNBQ0IwN0IxRUE5Rjg1ODE1NzlCQkE0OQotOjEwNjZFMDAwREUxQkQ0RjMyRTMzQjA5NzU5NkM2RkZERERFQTc5OTczQQotOjEwNjZGMDAwMjEzRTA3RjVDN0YxNzBEQ0Q1NUE3REFFM0ZFM0Q2RjFGOAotOjEwNjcwMDAwQkRFREI1NzlDQjYyNzkzRkE0MDdDNEMzRDUyQTFFNjAxRAotOjEwNjcxMDAwRkIzNUQ0OUU5NzBCNDREQjg2MDZEOENGOUFGQjQ0OUY2QgotOjEwNjcyMDAwNDVDMEU3OTMwRDgzQjFGQzlDRTA0MEI4RkY3OUNEOEI2OQotOjEwNjczMDAwRUY1QzA3Q0YzRjNEQjJBRDFDRjdBN0FENjNDNUQ3NTk5RQotOjEwNjc0MDAwNEM4RTgzRjNGREZBMkE3QTU2RkFBNzMzMzlCQkVGM0UxMwotOjEwNjc1MDAwMEY0Rjc1RkY0ODk5MUM4NDNGMEZGRDc0OTQxQkU2RkY5MwotOjEwNjc2MDAwRjNCMzZGNjUyMDlDM0YwMjFDMTAwMUNFRkZGNkQzMjdDOAotOjEwNjc3MDAwNEQyQ0JENzdGRENCOUFERTMzNTVEODgyRTEyNTEwQkM3OAotOjEwNjc4MDAwOUEzMzhGRDJGOTJEQ0ZFNEZEOTY3QkZGNTI4MUU3QzE3QQotOjEwNjc5MDAwNkM2NjM5MjNBREVGRjk1Nzc4OUZFM0VENkIxQ0Q0REVCRgotOjEwNjdBMDAwNkRGQjgwOUZGRjEwMjY4OUM5MTczRjZGRUQ3Q0Y1RTdEMQotOjEwNjdCMDAwRkVCOEM5RTU0RjEyRjA3QzVBNDJFODVGQkZGRkM3RDQ2QwotOjEwNjdDMDAwNzVGQjU0RkFCQjQxQzVFMzFCQUE1QUE5REZCMkE2OEFERQotOjEwNjdEMDAwMjc0NTU4Rjc2MjhEN0UyQjQzREY2QkU3NzM3NjkzODlFRAotOjEwNjdFMDAwQ0VFN0VDQTY4Q0M2MjQyQzc3RjBGM0Y5NzdCMTYzQzIyMAotOjEwNjdGMDAwNUE2OEY3RTdENTNCNkY0OTRFQzc1NUZCNTI1RDU3RjBENgotOjEwNjgwMDAwRjM2MUQ5RkM3Q0YwQjkxMkNFODdDNTg1M0Q5RjNEQzFBRgotOjEwNjgxMDAwRTdCM0YyMDk3RTNFQ0I5RjdERkIwRkJGOTAwOUZGRjhFNwotOjEwNjgyMDAwRkVFRUIzRjg5MEZGMkVFQjc4RUVGODBGRTBGREUyQTY1NwotOjEwNjgzMDAwNTY1MzFBQjRGQkI1OTI0NkZCRDJGQTJGQUZDRTkyNThGQwotOjEwNjg0MDAwMzRFQ0FGNjk5QjA5RjlDMEFGMTUzOTJDOUU2QjcwNjVBQwotOjEwNjg1MDAwNDZDRTY3MUUzN0MxRDlDNjUwM0QxMzYyN0JEQjJGNjYxQgotOjEwNjg2MDAwNEEyMkYyMTFFNjE5QzY3NkM2Rjc1REZGOUY1NDNBMkEwRQotOjEwNjg3MDAwNEE3Nzk4MTM5MTdGMzU0NEIxRUQxMkFFQTNFMjdFMzY4QwotOjEwNjg4MDAwQTE2RjdCRUQ3OTJBODJEM0M1MzI5ODA3RTlGMzU0OEU0NAotOjEwNjg5MDAwMjMxNUU5QTJDQzYwMDhBMTM3RUQ3OTQyQTVBRkExNTEzQgotOjEwNjhBMDAwMUQ4QjcxQkQ0M0UzOTg1NDBGMjBGRTcxQTQ5MjZCODA0MQotOjEwNjhCMDAwNzk3RkZDMDNBQjU0RUZDMEZFNkUxOUVCMkQ1NjI2NzlBMQotOjEwNjhDMDAwMDBFNERCMERGMjQ0QzI0RkM2QUFFRjQ5NDY1ODA2MjY0MwotOjEwNjhEMDAwMjNERjFCQjkzQUYwMTc1QzFGQTI1M0M0NDRGRUI0QzNCNAotOjEwNjhFMDAwQkUyRDM5MUM0RkEwQ0MwNkYzRjc3RTdDQTYxODNCODg0MgotOjEwNjhGMDAwNEY0NUQ2NzBGQzMzQjNGN0E5NkMwNkJFODU3OEFCRjU2RgotOjEwNjkwMDAwMUJDQThFMDhGODNFMTlENjgyRjMzNzY3MkVBM0YzMzNERAotOjEwNjkxMDAwOERFNEY0RDJERkZFQkVCREM0RkQ5RDRBNzNGQjQ4NEUzQwotOjEwNjkyMDAwNDQzMDY5N0IwQ0VENkYwRDk2N0JGNjk3QzkxNDAzRjQyOAotOjEwNjkzMDAwMkZGRkQxMTVEQjlBNjFDODUzNzVDQTQxMzNENDlGNUFEMgotOjEwNjk0MDAwNjdBM0ZFRkZBOEZERUFGN0I5QjhCMjIyNjQ5RjNENzRDMQotOjEwNjk1MDAwRDMwMjdDMkQwRDlGRDlBOUI4Q0VCMzU2OTgwOEVBNEYyMwotOjEwNjk2MDAwREQxQTYxNDBGODlGNEFFM0ZBMDI2MzAxN0IwOTlDQ0I4MAotOjEwNjk3MDAwQUVGNUYwQUI4NUIxRERFQkFERjQ3QzZBM0QyMEQzNjhCQwotOjEwNjk4MDAwQzY5RTU5OUY0NEU1NjdEN0NCRjRFQzU4OUY0OUVGRDM5NwotOjEwNjk5MDAwNzMzOEZFOTU0NTJBRDEyODk3QkJFQkVDRDI3Njg0ODdENQotOjEwNjlBMDAwOUZEMzRENjdDRDA4ODIwM0U4MDk5QzFGQUI3QTQxQTdBRQotOjEwNjlCMDAwMTRCMEM3MDZGMTY5OTAxRkY3QTFCQzYzMzUyM0Q4NEUwOAotOjEwNjlDMDAwOThBMkIzRTU5NEREMzAxRUYxOTJBRjRGNkI3RkJCQTk2NwotOjEwNjlEMDAwODVBREMzNzY4RjBBQkU5RDMwNkVENEVERUYxNTI0QTIyRgotOjEwNjlFMDAwOUM2RTRCQ0IxMkEwREY5MjlBNzNDNDBGOTdEODA2Q0I0NAotOjEwNjlGMDAwMENFNUI4Q0RERDM4MTVFQjM3QTc0OTFCQTA1QjU0NUIyMAotOjEwNkEwMDAwNTY2NzBERjQ1RkUxMURFREMwRjZCNzBCNzIyM0NENUI0OQotOjEwNkExMDAwMjczODcwNUVGODUxQUM1MzgwMEZFMDZGNTA1RTY5N0I5MQotOjEwNkEyMDAwNzVBNENBMkYwREM4MkY5N0RGQkZBRTMxMTlDQTI3MEMyNgotOjEwNkEzMDAwQUM1QjA0RDAxNDE5OEE2NzYyQjk2ODRCOENBMzFFRTU1RAotOjEwNkE0MDAwNkQzRERGMEZEQjBBN0NENERBQ0I0NzBCQTdCOUFFQ0VBNgotOjEwNkE1MDAwODE3MzY2MTcwMERGNjBGQ0IxQjAzNjI2RTI3RTNBMTQxRgotOjEwNkE2MDAwNUMzRjAzQkQ2MzI3QzNGNUJBQ0NEOEZGOTcyQUJGRUNDMAotOjEwNkE3MDAwNkMzQjYxOTdENUYzMjk0NkJBNzE3NzlGQjgwN0NGRDU5QwotOjEwNkE4MDAwNjY3MDM0Q0IyOERGRTU3NzY1ODRGQjFCMjJEQjJFMjM4MQotOjEwNkE5MDAwRkVGMEZBMzU3NjVFMEZDRjBEMEQ1MEJGNjY5QkU4NDNEMgotOjEwNkFBMDAwNzgxNDg4NjU4MzAzQTg3RjZEMTY4OTJGQUVEODU2M0E2RgotOjEwNkFCMDAwMThGNThEMTU1MDQ2RjlCNTA1QTcwMjdDNkE2Q0NCRTMzNQotOjEwNkFDMDAwRUQ1QTBCMUVGMTAwM0Y0RDE1OTgwQkY5RDE2OTYzQTBFQgotOjEwNkFEMDAwMThFMUYxRTlCNkM0RDgzQUQ0Rjc2RUFFMUZDNUEwQkUyRQotOjEwNkFFMDAwNzJEQjNEQTlGOEZDNzQ1QkM0MjJFNEUzRjk1MjcxN0VDOQotOjEwNkFGMDAwMENFQTNGNUI2M0IyNDRCOTk3Q0VBQTcyMzg5RERENzQ0RAotOjEwNkIwMDAwNzM1RTIyQ0FCQkQ1REYxQzdBNUMwMkI5QkEwMjcwNTQyQwotOjEwNkIxMDAwODI3MUNGNzc0NEY5M0NEMDY0RjVGQUJEQTkyMkEwOTZFMgotOjEwNkIyMDAwMjVERUJEM0MwN0YwRUJERjBERkJBRjlCOEU3MjU4RjAwRQotOjEwNkIzMDAwRUQ0QUE2RjY3MkEyMTQ4RThFMzU3RDBBRjA1ODA2M0NGOAotOjEwNkI0MDAwQkRGOUVFMEY2OTlDQ0YwRDg3RTcyRDg2RkVBQjZGN0VGQQotOjEwNkI1MDAwM0UxQUM3RjlGNzg3OEY0RDkxRTBGRDBGMjZCOUZGMTc1MQotOjEwNkI2MDAwOEVGRjI3NjFEQjJFMDk0MEMyMzY2RjlCODBGMkEzM0E2RAotOjEwNkI3MDAwODc3MUJFMUFFQkJBNkUzMTg3QUY2M0JCRENGRjdDNTUwMQotOjEwNkI4MDAwN0IwNTgyQTc1NjVFRTIxQjY0NjZBODk3RkE5OTU5QzJGNAotOjEwNkI5MDAwQTdDNDQ4MEZGRTU0NjQzNTI4REYzNUJENDQ3QjVGQUY4MgotOjEwNkJBMDAwQzJFNUQzNDEyREE5NzhGRUFCNzZCNUE3QTJGQ0Y4QTMyOAotOjEwNkJCMDAwOUQ5N0REM0I1RTVCNzEyN0FDQzNERDY2OTAxOEUwOUQ2MQotOjEwNkJDMDAwREJDODQ4RUY1REVFRTFGQTM0QUIwMjY2OTJEQzNCRkZENgotOjEwNkJEMDAwN0QzOTUxQjRGRTU1OUJCMzQzRTQxRUM4NDc5QUU3OEZGNQotOjEwNkJFMDAwNDZFNkM0NzUwQ0FGRUZDRTQyRkRFOUY3NDZGRjBBM0MxRQotOjEwNkJGMDAwRDdERjgzN0VFQTQ5QzM3M0UyRjhGN0ZCMTY3MTI2QkUzRQotOjEwNkMwMDAwRjdEQzJFQjAwQzAxQ0JDRkRCNDdEQTQ4MEYzMzEwNUYzNwotOjEwNkMxMDAwRkZBNUM5QjcxM0RBREIyNzc1Rjg5MUVGRERGQzQyQ0M4RAotOjEwNkMyMDAwNDQwNDYzODEzODNFMTFGMTY3Q0QzRUQzQ0NBMTVDOUYxMwotOjEwNkMzMDAwOTI3MEY2RDU0NkJGMzlEQ0I5RERBNEVBNTEzREU1MTdCRgotOjEwNkM0MDAwOUUzMzIzREVBRjdFMDZGNDAxQTRDRjE3MDQxRkVBMzc3QwotOjEwNkM1MDAwQUIzQjlFN0I3NTA4OEM3N0NCREU4QTZDOUM0NzZCN0Y0OQotOjEwNkM2MDAwQ0IwQjFDMEUxMTJDNjAyRTBERDJBQjJCMzI2MzFCODc2RAotOjEwNkM3MDAwMDI4RjdDRjZDMDQ3NEIxRjg2MkQ1NUUwMzlGRDgwQjE1MQotOjEwNkM4MDAwN0QzMzNFNzBENzhEQzRBNzQ0RkI2NEM2NkVEMkM3NDEyNgotOjEwNkM5MDAwQkYzMkEzRkNCRkQ5Q0JDN0JCMzlGMzY4NjMzQUVEQUJCNgotOjEwNkNBMDAwMzg4RTA1OURGRjlFMUMxM0Y1RDNGQUMzQkVBOTVGQkRBOAotOjEwNkNCMDAwRjVFRTI3MDJCMDVFQTVERUM4MjJBRTg1QjI5MTdEQjRBNgotOjEwNkNDMDAwMEJFMUM3QTJBNTlEQjgwRjIzM0JGRDJBM0NENzhBODNDMQotOjEwNkNEMDAwNTgzMzNDQjc1NkFGRjkwRjZBNUY2NzkxNDQ3OEQ2REZGNwotOjEwNkNFMDAwNUNCQjI3MDBGM0M5MjI3MzMxRThFRkM5QURBNkYxM0NDNAotOjEwNkNGMDAwNjYyRTdGREFBMzlFN0RGNDQ2MjhENzJDQjAzOTAwQkRERQotOjEwNkQwMDAwQTExQzRERjBEOUZGNDMwM0YxRjk2NEQ2N0RDODAwQ0YzMwotOjEwNkQxMDAwNDQwNjU0MDQwMEZBNTM5QUZCMzBFMjM3RkRDMEI4NkJDNgotOjEwNkQyMDAwNkY5MzdEQzg4RjgxODMwQjg4RTc1RkJFNzQyNjFCRDc2NgotOjEwNkQzMDAwN0RFREYwQzAzOUM0MkI1M0REMTk3NzNFRDBGRkZCMzkxMAotOjEwNkQ0MDAwMTJENzRGQzYwN0IyQjE1REMyNDE5NUFGMTk4RjkwN0M4MwotOjEwNkQ1MDAwMzQyNUM5QjFBOEFGRjg3MTJDNUNERkRGMEM4NDA3RkJDOAotOjEwNkQ2MDAwMDVGRjkzMzhBRjA2QTc4ODVDQUVGRjE5QjJEQzdGNDAwMQotOjEwNkQ3MDAwRkVBNzA4QTYzQkZDRDA3RUJFMTBFREMwRkQxRTg5MTUwNwotOjEwNkQ4MDAwMzMyNjAyM0Q3RjY5RkEyODBEQzdGNTAwREE4QTQzN0I3NgotOjEwNkQ5MDAwRjVEODVDNzVFOUU2MjFEMzM2MjM1QzcyMDBBMEVDNkE3NQotOjEwNkRBMDAwQjA2NUM2QzczMjIzOTRFRjY1ODY2RTBCQUMyM0I3RkI4NAotOjEwNkRCMDAwNzdEQkVBQTAyQzNEMzg4ODg5MjBBQUVBMjM1MjU5MkU5NQotOjEwNkRDMDAwOEMyRjFDODQ4REMyN0UwRThFM0ZCODFDRDc3OTZGQjc3NgotOjEwNkREMDAwOTUyMTlDOTgzNTU0Q0YzNTFCOTJGRDNGNDI3Q0FFOEU1OQotOjEwNkRFMDAwNzZCMDI0OTQ0MzFENTlDODhGRDgyRDM2NDczM0I0NUZFRAotOjEwNkRGMDAwNzIyMTkwRjFCRjUwMkVGREVEMzBFOUU5NjNEMkRENUZFNQotOjEwNkUwMDAwRTE3RTg2ODhDQTA5MzdENERGMkJGOTQ3M0M4MEUzRDc3NwotOjEwNkUxMDAwNDQzOUVBQjgxQzYxQzFFQkRGQkZFRTZGRDE3MUQwRUYyRQotOjEwNkUyMDAwQ0JFRTUxQzYzREQwRUU0QkM1RUEwMDBEOTY3NURFMzk2RQotOjEwNkUzMDAwRUVFNUFCQTA3Q0I1MkE0RkY0RUJGQTMyNDkzNkEyREQ4MQotOjEwNkU0MDAwRjE2NUI3RDU4RjdBQzg5NzM2ODM0RjAwOTBFNkVFM0Y0RAotOjEwNkU1MDAwRjRBMTAwRjIzQkQ3NkFGMzhCRDFEOENGRjQ1OUIwQkM4MAotOjEwNkU2MDAwNjE0NzUyNjIzRTE5NDcyMjg2N0QwQkYwMUNBQ0NBQTVEMQotOjEwNkU3MDAwNkIwNzg1REE4RjQzNzJCOTFEMzQyNDk3RjMxRkEzRUM5NwotOjEwNkU4MDAwMjAzODlGRjUxODU5MzNFMjIxODMzMkNFNkJCNDRBQ0RCNgotOjEwNkU5MDAwQjBCRTVGRDk3NjJEMDFDQTY3NjdCRjRFMUY4NDcyRTMwQgotOjEwNkVBMDAwRUNGRTExODNEOEY4RkVGOUUyMzFENDI3NDA0RjU4M0E2RQotOjEwNkVCMDAwNTE0OUNCOUREQzJCNUYxN0FBNzA4OTY4QjlERTg0RjAzRAotOjEwNkVDMDAwQTgwNzc4MzQwMzNDMTZEQTBDN0UwQkVDOEIyRDA4ODU3MgotOjEwNkVEMDAwMDNBQkU5MkU0N0JDNjE4NjY4MDdEMjBEOUUyRjlFQkY4QgotOjEwNkVFMDAwMkMxOEJBRDk1NTdEQ0Y3QkM2MDVDOUZGMjMyODJGODEyMQotOjEwNkVGMDAwRjM0NEI4OTY5RkZERTQ4QTA3MTg5RERCMTVCOTA5NzQyMQotOjEwNkYwMDAwOEUwRDU3QjJERUYzRkI1NzNCMkY2Njc0MzRFMTM5QUM3QwotOjEwNkYxMDAwMTVFRDJENzgwRUY1NDZBRUVGNzkwMEI3NzZDNjUwQjc3MQotOjEwNkYyMDAwNUQ3ODJFNkJFQjQ3RDIzOTBEQUUwNzNFODE3NjRBOUREOAotOjEwNkYzMDAwOTE2RDhGNDdCRTcyOTREQUVGNTRGNTQxOTY1OTREN0NBRQotOjEwNkY0MDAwQTZCQ0RFMjIyMUZDQkU4QThDQTZGRTBDQ0VENTM0MjQ0MwotOjEwNkY1MDAwMUM5RkUxN0NBNUE2OTIxMTVGNTkzQUJFNUFDMDczNEY5RgotOjEwNkY2MDAwQzIxOTYwM0Y5RDg2ODAxREY3MTk4ODAwMkQxMjlFRUI4NwotOjEwNkY3MDAwNzJEMzg5Q0U4NzIyNDcxOEMxQ0YxOUZCM0ZCNkNFQkU0OAotOjEwNkY4MDAwMURGOThENjgxREZBRDg2OTEwNDVBQ0E5M0I3QTJDQUM2NwotOjEwNkY5MDAwQUI0RDYwMURCNDJGOTNDQTNGNTZEOTQ4OUY2QjhCRjEwMAotOjEwNkZBMDAwMTE3RjZCNUIzOENDODE3QkZEOTJBOUY1NTU5MUM0NUY1NQotOjEwNkZCMDAwQUUzMjE4QThEQ0JENzgzMEQ5NjM2RDMxQzA1QTcxQkNDRgotOjEwNkZDMDAwQzU2MzQ5NkZGOEY5MzcyMkI3RDczMjE4QUZDRjYyQTMzQwotOjEwNkZEMDAwMzY2MzdENzEyNjhERjc0QjhENUZERDY3QTdGMURBOEEwOQotOjEwNkZFMDAwOTVFNDQ4QUExRjZDQzBGRTRCRDNEQ0I3MjE3RTBDMTE4MAotOjEwNkZGMDAwNzkzQjUwM0NBOEREOTYyRDRBMzI5RUU3OTYxMjMzQjU3OAotOjEwNzAwMDAwN0I0NDcwMkQ1RTgxRTM1QzYxMjNCRDMxQjAzOEYyRDlFMQotOjEwNzAxMDAwNURGQzM4RkRFODVGRUFBQ0UxRkJENkU4NjBERDU0Q0UwQwotOjEwNzAyMDAwNEY4NzdCNEUzQzhBRkNDMzkzMEIyNzYyNDM3OUYxQzVBMwotOjEwNzAzMDAwMTJDNDZCNDU4Qzc2MDAwQUY3MzlFN0FGN0FGMDlDNzU3RAotOjEwNzA0MDAwMDM3MDU5N0M2NDI3RDlFQjcyMDY0MzYwQzNGOTQ5MkM1RAotOjEwNzA1MDAwMTdGMUU0MTBDMDEzREE3QjRDNzBDRUYxRkM5QzM3QzRGRQotOjEwNzA2MDAwRTMzOUNGREIxNjdDQ0UzMDlFNjcyREJDMTdENjQ0M0I3MAotOjEwNzA3MDAwODQ2OTc0Q0U5OTM4N0UwRDhCNzRBMDdEREQ3MzdFQkZEQwotOjEwNzA4MDAwRjI2NUUxNTMzNDM4OTIyQzAwOEJCREU5RUU4NzU1RkE1NgotOjEwNzA5MDAwMjVGODNFRjYwN0Q4MUZDMEE1REMxMjk4REM4MkZBQjlBNQotOjEwNzBBMDAwODE1NTc1ODRFMTAzNEZFNDcyRkI0MDYyREQyNjk0QUZBNQotOjEwNzBCMDAwNEIzNUZDQUZENUUxN0Y2MDU4Q0MyNzUxMkFGRTQzQkY0QQotOjEwNzBDMDAwMTcxMzVEREJGMDFDM0UxNzhFNERDMTk3ODdGRjJFMkVFOAotOjEwNzBEMDAwMEEzN0ZFNEY1NEY5RjI2NkJDNkIzN0I2MUY2OTNDMzg2RAotOjEwNzBFMDAwRUMzNkQ0MzdENjU5NDhGRjY1MTcwRTBEQzM3OUQ3QTZBRAotOjEwNzBGMDAwQjk5RUM2RkE4ODkxREQ2NkY0NEY3NTI2Nzc5QjcwN0YzRQotOjEwNzEwMDAwOUQ4QkZGOTQ4MjdBRDZEMjlBRDc4ODNFMkY3NTdEMUJBRAotOjEwNzExMDAwQTIyNjk4NTA2RUM2MzhCMzRDMDFFODlGRThDQzdBMDU5OQotOjEwNzEyMDAwQ0ZFNUU4NUM4QjZDMDlFMzA3MzkzMDc3NkEwQUVBNDNGQwotOjEwNzEzMDAwQzcwQUE3QTYyMEJGM0M5NjAyMjQ0RkYyRDQ2MTQ3M0U1RgotOjEwNzE0MDAwNkFEQTdCODUxREQ3NzlDQzk5NEQ2NTk5Qzk2QUI5NzQ3RQotOjEwNzE1MDAwNDBGRUZBNjdFMEFGN0U1MDA0RkUwOEY2MUEzRUNGODA4QwotOjEwNzE2MDAwQkRFNjA3N0VGQjMxRDg2QkY4M0MwNUY2MUFCRTNGMDE0MQotOjEwNzE3MDAwRjYxQTNFQkJENjNCRThGRDMxRTc4OEJEODgxN0U3NUJEMgotOjEwNzE4MDAwQjgxRjY1QjlEMTExNTYyRjVCRkQ4Q0M4RkMxQTdGODNERgotOjEwNzE5MDAwN0YzN0VEODgwQTI5NTc2RDhEMEIyOURGRDgwNjE4NjREMwotOjEwNzFBMDAwRUQyRDU3NkUxQTExNTJENkY0Q0Y2NURFNzEyMUVGREQ0OQotOjEwNzFCMDAwQjVEOTIxRTVGRjY3RTBEQkM0RTE4QkZFRjI3RjI1Rjg1RQotOjEwNzFDMDAwRTJDRjI2OTA3N0E1RjgwQkUwRjdEQjkzNjcxMTFGM0QyMAotOjEwNzFEMDAwMjZCMEVBMzg3OEM2NDg5Q0ZGMTk1RDAyRjlEREYwQTdCMQotOjEwNzFFMDAwMDVFNDc2MDlGRTAyNzQ2M0I0QzkwRDU4RUY4NUY2MEYwNQotOjEwNzFGMDAwNDI1QkI0N0REMUZFNjBDQzYxQUE4MEY3MEI5RDExMTI3OQotOjEwNzIwMDAwQ0FGM0VCNTgzNUQxRDkyMkQ2NDJDRjFCNTgwNzNEQ0IxNAotOjEwNzIxMDAwRDgxMTdBOTYzMzRFODc1RjU2MDRBNkUwRjM4Mzc4NzdDOQotOjEwNzIyMDAwNUExRUFDN0ZCNUQ1RkQ0NDNDREE2RDI5RUVEMTcxQzg0QwotOjEwNzIzMDAwOEY2Q0IxNjQ5N0Y2Nzc0RUE4NjEzMzU1Q0ZCNTRENTEzOQotOjEwNzI0MDAwRjcwNTNGMEI3MEVERDBFRjY4RDQ4NDNCRUU5MDdCRTcwMQotOjEwNzI1MDAwRDFDNjg3RjlBRUNDNDMzRTYzRTJGM0JDM0Q3OTZBMEFGRQotOjEwNzI2MDAwRjIwN0U2NEEwOEIxQTdGQTlCQUY1NTk1OTMxNTRFMEU2MwotOjEwNzI3MDAwMjdGNEQ5NjJGOUY0NDJDMUI3MDFDQTA3NUEyRDY2RjQ1RQotOjEwNzI4MDAwMkY5Q0RFNjg1MkY1RjVCQkM5Q0UzRDcxOUNGQjY1NEU2NwotOjEwNzI5MDAwMzdDQzRBNDVGQ0FCNkIxRDlEOEE3ODdFREEyNDM3RDQwNwotOjEwNzJBMDAwMDBGQzRGNEYwN0ZFRUQyMDNGOEUwM0U1QzM0OUE3OUQyRAotOjEwNzJCMDAwRkE4M0E0ODhDRTgyNzM1QkFFRUVFRkE0RUMzMEFGODM4QQotOjEwNzJDMDAwRjYwQjkzNDVFNjgxRjY2RTRGNUEzNEFFNUZEQkI3N0UyMAotOjEwNzJEMDAwRERDQjM2NTk0MkYwNjBGRUI0RDBGMjQyNjZFRUM1Qjc1RgotOjEwNzJFMDAwMzQzQzZGNzM2RjNERUE0OTYyRDkyMEY3MDA3Njc3Q0Q2MQotOjEwNzJGMDAwNDdBQkRFN0QzOTA4NUY2RkM4QjNDNzIzREY2NDUzRDk1RQotOjEwNzMwMDAwRDQ2RkM1REVGRUZEQzFGN0FCRjU1NUVGQkU2Q0VBODU2NwotOjEwNzMxMDAwQUY4NjU3OTNGMjVDQ0JGMTlDRTBCNTE5RTkxNkUwNjJCOQotOjEwNzMyMDAwNDA3OTdDNkMyRjg3NjM2QkQ0QjVGNzVEMDU3MDI4Nzk0NQotOjEwNzMzMDAwNUY2NDFDQ0VFNTlFREYyMzNFRUZFMzdFN0RGRDNDMDFENgotOjEwNzM0MDAwQTRFQkQxNDhBRjlDQUUyQkJDRUY5MUZEQjZCNEI2RDg0MAotOjEwNzM1MDAwODRFQjJCQjE3NUE3QTBERkU5QzA1REEzNTNGMDVDOEU3MQotOjEwNzM2MDAwQ0UxRDlEODI3Q0UzNTBFMUU4Qzc2RTg3NzFCQjhBNDRFNQotOjEwNzM3MDAwODcwNUYwRTk0MEQxQjlGQkIwN0NBQzU2OTQ3MERFQUUyNQotOjEwNzM4MDAwQkRFNzU0RkVEMkZERjY1NDU4REYxNzRFMTNDOUExQUUyNwotOjEwNzM5MDAwQkRGRjFDM0U1M0IyMEZGODBDQ0M3RkRFQzdGOUNDNEFDMAotOjEwNzNBMDAwQTM4QjM1QzJCQzJCMDEyRTY4QzdGRkIzRjlDREM1RjgzRQotOjEwNzNCMDAwQ0M1MTkzQUIyMDAxRTE1NTI3MzhEMEZGNTY1NzY4MjFCNwotOjEwNzNDMDAwRkRFMTI4RDA4Nzg1RTM1M0MzRURDODI3QTc4MUZEMkJCNgotOjEwNzNEMDAwMjFCRUI5MjZBMzRENzk2Q0VGODgwNDg0MTdGMzI4NDdBMgotOjEwNzNFMDAwMzNBN0Y0RTJGQkYyREE5NTQ1RTg1RjY3OUI0QzI3NTEzRgotOjEwNzNGMDAwRUY0NjY3MDhDQUU3MTI2NjNDMTkwOEMyNTNGNzBCQTZBNgotOjEwNzQwMDAwREUzMkUxQjVGMTY0MjAwOEFGRjU3OEJBNDc4N0E3RTcyNwotOjEwNzQxMDAwRDk4NTU0NzMzQUFGM0YzMkI4OTdFRkUxNEYzMDdGQjkxNwotOjEwNzQyMDAwNDVGNDM3QjJCNDVFQkNGRDZCRTE3QkU1QTgyNDAwNUY5OAotOjEwNzQzMDAwRjkwNUUyRUIwRjI3QTZCRDE0MTA4MkY4Q0EyNUYyQjFCOAotOjEwNzQ0MDAwRDZBODZGNDhFRUI1NDc3RDQzNzJFRjc4MjE5NzdCMDc0QQotOjEwNzQ1MDAwMEFBRjNGRjgzQkM0RkJCQjM4REUxRjVCMzg5NUYwRjI0OAotOjEwNzQ2MDAwOTgwOUU0MTlDMEVCNjg2RDc2MzQ5NjRGNkQyQTI1M0E3OQotOjEwNzQ3MDAwRDNFODQ3M0Y0Rjk3OEFGRjVBQkJBNUM2NkU5MzIzMENBQwotOjEwNzQ4MDAwN0VCQTZCQzU5MEYzQ0M3ODYxQzkyMEY0MDdGNEI3N0U1RgotOjEwNzQ5MDAwNkQ1Q0FEOUQzNkVFNTI1RDVDNTczRkVFMjc3OTVDNEZEQgotOjEwNzRBMDAwQ0NEODUxMzZFMEY4NjAwMEY2RjY0MzdFQzIyMjdCRjE3QwotOjEwNzRCMDAwNTU0NDNERTA3QUU2MDFGODc0MzkzOTdDQkE4QUFFMjc0MgotOjEwNzRDMDAwN0EzQ0VFRDRFOEQyQ0QzMDFFN0I3NDgxRTg0M0ZEQjUyMgotOjEwNzREMDAwQ0I3OThFRThGNDNDRDAyOThERDFDRkJDOUZBQUY0RjlBQQotOjEwNzRFMDAwODk0QTlGQTc1NUZBRDRFQUM1OUQwRjVGNzcwMzhFNUI0MwotOjEwNzRGMDAwMkIxMjlGM0VCQTIwM0IwMUU3RkJFMzhFMEM5QTE3RDY3NgotOjEwNzUwMDAwMDM0NjA1RTgyMTJGRkZCRDAyNEMzNEU0MEY3NkU0NUYwQgotOjEwNzUxMDAwQzcwMTBFNjgyNzk0MkUyQzI1N0JCQUQ0RTQ0ODA4QTcwRgotOjEwNzUyMDAwMjdFOEY3QUQxRkVGQzA1QzhCODFGMUYxODhERjk1RENCOAotOjEwNzUzMDAwNTVDQTFBOTEyRjAwMUMxMDNGOEY2MzdCQTgyRkQ5QzkwMQotOjEwNzU0MDAwRkRDMDg3QjA3RDdDMzA5QzQ2OTNCRTcyN0NCN0UwNDAyNgotOjEwNzU1MDAwRDE2MURBRkI3NzNCOUVDMzJBNUYyOEJGNThCOTM5MkEyRAotOjEwNzU2MDAwRTREQzU2QjRDNDg1OTQ0QjBBRjkzRThFRDc4RUEwRkQ1OAotOjEwNzU3MDAwNUZFRUY5NjlGRDJGRjVGQzZGNTJGQkUzOUFCRjI1M0RFNQotOjEwNzU4MDAwMjUzNjY0M0MwNDUyRTg3Q0U5QkFGQUIxQkFGQTg5MjE5QQotOjEwNzU5MDAwRTU4QkUxRTMwOTE1MkYzNDM5NzIyMjQyNUUxMjJFQkVDQgotOjEwNzVBMDAwRDQzNUNGNTIxNTlDQTczMTNCOUZGQjVCNjZFNzczRkYzOQotOjEwNzVCMDAwQ0JFNUNBRDU4MkZDRjA3MkI1QkZGRTFBN0YxQTk1RTdGQgotOjEwNzVDMDAwMkFDQTQ3MzlFQTJGMzVFMUJFMkU5NTFGMDVDOUUxMDVDNAotOjEwNzVEMDAwRDQzRjIwOThCMTdGQUIyQTY3QUIzQTM4REVCNTQ3RERBMAotOjEwNzVFMDAwRkYyQUUyRDVFN0FBOUUwRTc4NDlGQ0ZFMEI5NURGN0ZDNQotOjEwNzVGMDAwRjE5RjZBRjlBNzAyRTFFNUExN0Q2QkEzNTE2RjNGQjM0QgotOjEwNzYwMDAwNzc3NDM0REE2MTI3M0JFQUEzOTFFRkNCQ0MxM0ZEMDMwNwotOjEwNzYxMDAwQzBDN0NGNUMyMDNGNjFCQTRGM0IwNjk2OUY3RjU0RjlBRAotOjEwNzYyMDAwQ0UxOTNDMDc5MjlCMTI5REM3Mjk1NTdFOUU0MEY5NDk3MQotOjEwNzYzMDAwRjIzRTkzOUU0NzUxN0U0MkZEODJFNzU0M0Q3REI3NDAyNgotOjEwNzY0MDAwRjRCRkNBRDgxMkRFM0ZCRDIzOTQ1RjU1NkQ4REQyQzlGOQotOjEwNzY1MDAwQzk1MEI5NTlCOTY5Njg0ODc5OTk3NzQ0NDhEOTVEMUJDNwotOjEwNzY2MDAwMkEzNzBCQzQzMkUyRUI2NzdDMUM4RUE1Q0VFQzkwRjY3OQotOjEwNzY3MDAwNjc2NDM5NUEyMkY4NzAzODdDNjE5MkEzMTFDRjRFRkFCMAotOjEwNzY4MDAwRTJBMjgzRTk0NUUzQkY0Nzc1NzAzODhENzA0MEZDRjQ5MgotOjEwNzY5MDAwOTYwRTg4MjdBN0Q0RkU1QTE5RUM0MjEzQ0U1QjZBNzU2MgotOjEwNzZBMDAwQkMxMjhGN0U4NDREODIwM0UzNTQwQzc4Q0UzNDM4QzdFRAotOjEwNzZCMDAwMjMwQkIyOUU2QzBFRDIzM0E0MDI5MUYwRjk4NEY3NTBFMgotOjEwNzZDMDAwNzkzMkYyMUYzMEMwRDBDRkZCNUFFREExNTRGNEFGNTYzRgotOjEwNzZEMDAwM0MxMzQ1N0E5MzdFREVDQUEyNTAzRUYzNTk0MzcxRUVDNQotOjEwNzZFMDAwRUZBMTVGRTlGQkEyQ0Y4QUYwMjg4QTIxRkVCNUUwMzkzRAotOjEwNzZGMDAwRDEyNzQyQjlBQjM2MkYzQTc4MUY2NzU0M0FENEU0Q0UzQgotOjEwNzcwMDAwNEE2Mzc1RDg3M0FDREExQTdBOEVBNTQ1NzUzNENFQjE1MgotOjEwNzcxMDAwODc4NTBFNjExMDNDMEY0QzA3NDlEQUI3NUZBOTkxRUZERQotOjEwNzcyMDAwN0ZFNTMzMjJGOTc3NTc3QUZGRjIzNkM2MTU1NzgyMUU2NgotOjEwNzczMDAwODg2QUMyNkI0REY1RjMxMEFGNEZCODRDMDZFMkE3MUQzNwotOjEwNzc0MDAwNzFGMzEwM0U5RTA1QTIyMzAzREExRjZFMUE0MTc4N0U2NAotOjEwNzc1MDAwQjIyOTZGMzBDRUY3NzJCRTQ4NzQ3NTY2QUZDNTIwNUMzMwotOjEwNzc2MDAwMDk0Rjk3ODlGOUM5NUVGNUQzNzk3RUU2MkQyNUI5NzE2MAotOjEwNzc3MDAwMDZFMTgyN0E5MDUxMjJCQTc4Mzc5RkZCOTE0RUMwMzg0OQotOjEwNzc4MDAwNTg2RjAwM0E0MTdEQjhDQjI3M0E3RDYxRThFM0REN0M1NAotOjEwNzc5MDAwN0UxRUE3MkUzQzQwRjhGM0FBRUY1MDM0RUExNTI3M0E5NAotOjEwNzdBMDAwRjhGOEE3NkFBNTY4OEM0RkJERTVDREI2RDNGQThBNjAxNAotOjEwNzdCMDAwNUNENDdCRjc1RDRGNzJGMjhDOTdFMzIzQUU5M0VDQzNGRQotOjEwNzdDMDAwMjYyRTNGOEU3OTk3REYzRjFERTBGMUY5MjY5MUY0Q0UwQQotOjEwNzdEMDAwQ0Y5QjRBRTc0REM3RjNERTY0QTI3MjVFRjE0MjhBNkYyNwotOjEwNzdFMDAwMUNGMzcxRjk3MkRDNzdBQTFDQ0ZFRjhDMTc0RTFGQ0FGRAotOjEwNzdGMDAwNzVGQkE2QkUzRDI5MUVDRkQ5NDRGODUwRjk0Q0U4QjkxNwotOjEwNzgwMDAwMkNEQzE0NEE1RkYwMTM5RDA1N0E1NzI1RkUyNkUzRkYxMgotOjEwNzgxMDAwOTQ5OTY4MjcyRDRCMDJGOTA5OTQ3QkEyQThENDg0RkU4MQotOjEwNzgyMDAwQzkxMjRGQTgzQ0IyQjA2MjEzRTIxREVBOTdEODZFRDlENAotOjEwNzgzMDAwNjNBNTkzRkQ0ODdGMUU4MUU0RTVEMjE3MDA5RjYwM0Q1QwotOjEwNzg0MDAwQTYxRDU3OTNCQ0FCNjhCMTg0Q0M1QjUyMUI2QTFGMkQzRAotOjEwNzg1MDAwRDNEOTQzN0E3QkU5QjJFNTg1QTlCQTNDOUNCQzE4NTREQwotOjEwNzg2MDAwQTBDQTA1MjZDRDQ0Qjg5RjA0QzNCQTM5MEJFMEY5ODJGQgotOjEwNzg3MDAwQTg2MEY5QkMzNzgyRjg2N0M1RDJCM0Q3QTg3QUU5QjU1MgotOjEwNzg4MDAwODgwN0NDRTE2MUQzMzQzQjNEODhDRTk2Nzk0NTlEOUVGNwotOjEwNzg5MDAwMUUwQTVGRDA5RjNGNDFGREI4Mjk0RTk1QTM5RTUyRjIyQwotOjEwNzhBMDAwRDc4RENBNTM2MjBBNzAxRDk3NkE3RjVGQjI3RTVCQUU0NgotOjEwNzhCMDAwRUFCN0U1QTRERjFFNUIwOEYyMDJGNjczMTQ5QjA0RjUzOQotOjEwNzhDMDAwM0ZCMEYwN0FGMkVCMUM5RjdCM0RFOUI5Qzc3QkZDM0FGNQotOjEwNzhEMDAwMkVENUFGNzMwRDlEREJGMTIyQzA2NzkyMUIwRUFEM0MyMAotOjEwNzhFMDAwQTAxRUExRjE4QjhGRDU3MzM4QTVGMkM5MTMyQTlGRUM4NgotOjEwNzhGMDAwNTJFREFENDY1NTVFNzg1NTc5NzFCQzQ4QjVCN0UyMTk4MQotOjEwNzkwMDAwQzkwQkEzNTE2MTk3QzI2NzZFNkM4QkQyQzk4NzM4OUQzMgotOjEwNzkxMDAwMUQzNTU0NzczRUExRjI2MkI3Q0IzREIzMDBFMDY2NDkxNgotOjEwNzkyMDAwMUExQkYyREUyNDREMEMyOTY3RUNEODRGRkVFM0YzMzIyQwotOjEwNzkzMDAwQ0YyN0JBMDc3MTAyRTMyNTBCNzk3RTE2QjM3NjkwRkY0NQotOjEwNzk0MDAwNzhBMTQzQTZGQUExMTgyNzg0RjY2ODUyNjExRTg5ODY5OQotOjEwNzk1MDAwOUZEQTdCMjk5RUJGRDdDQUIxQjBFQjNBNkM5N0Q2NDE2QwotOjEwNzk2MDAwRTVGQTg1OEM2MTFFQ0M0ODZEMUMwMDQ3MURFODA5NDM3MwotOjEwNzk3MDAwRDE4RjBERjMyNDgxODE4NkVEMzU3QzFGQjZBMDk1REE3OQotOjEwNzk4MDAwRTU1NjMxNDk4MDc2NTUwNTY5ODRFNzQ5NEMyMUZFMzIzOAotOjEwNzk5MDAwNzgzNTUzMzBERjg1Rjk5RUE3NzY0RkRFMERGQjAwQkNBRQotOjEwNzlBMDAwMEZENENGMjBCQkJDRDQxQUNERTNERDIwMUYwN0M2QjM1NAotOjEwNzlCMDAwM0E0RTNGQ0UzOEQyNUI4NjE5Mzk2QUY2OEJCNzZBQkIyRQotOjEwNzlDMDAwOEJFMTZEOTAxRTc0MDdEMTA1MzM5MDNGQTIzNTZBODIxQQotOjEwNzlEMDAwMDlGMUI0QzRFNjIyQkYwMUUwRjU5MjNCRDA1RkY5OTIxMQotOjEwNzlFMDAwOTlGQjA5MTY3MkZGRTREMUMyQTk4RkExQkQzQjYxOEYzQgotOjEwNzlGMDAwOEQ3Q0M5NDc1NzAwM0UxMzdGRUZFNjc2NDI2REE5MDc5RAotOjEwN0EwMDAwRTVERTA3NEUyRUU3QzZFREY5Q0M4MEY5NkU1RDdCOTk3OQotOjEwN0ExMDAwMDNDQjg3NkE5RjNGRkIyNkQyQ0IwMjgxRUM4QzYzQjVGOAotOjEwN0EyMDAwNzk5QzJGMzNFNkMyRkNDRDYzQ0VCQzBENTQ5RTA2ODZGNgotOjEwN0EzMDAwNzExNkQyODNCMkMxODhFQjAwQjgzNjUzRkRGMkZCMjYzMwotOjEwN0E0MDAwQTNCRTczNTgyNEZDNEQ1MkYzOEMyNDNDRDdFNERFNzI2MQotOjEwN0E1MDAwQkNBMjk2RDk1RTJBMjcxNUYxRkNDMDVGQThGQTQxODcxRgotOjEwN0E2MDAwN0E5RTNGNTFFREEwNUQyQUREQjRBOTc0RjNBMDRBMzc5OAotOjEwN0E3MDAwMUJGNUZFRDBBRDlDNkU0NjE5MURGNzQ1NDE3OTk0QzdBNAotOjEwN0E4MDAwNEU3MkU2RERBMjUzQjQ2RUEwN0YwOUUzQjk2OTg1NjI0OAotOjEwN0E5MDAwRjMyNDgwREIzODRCODBGODc0Mjk4OEJEMERCMDlGOUM5RgotOjEwN0FBMDAwQTIzQUNBNUYyQzc1MzM4QTU3OTQyQ0E4QTNGNTA1MzBFNwotOjEwN0FCMDAwQjY3NDE1RUE0RDc1ODJBOEQ2MjM3RjFDMTdFN0E3RjY4MgotOjEwN0FDMDAwMjU1NjI2NjFGRjUyRTc3MzA3MzAwRjc3QTExQjQwMDM0RAotOjEwN0FEMDAwRTVGQzA1NzUwMkMxQTcwMkM2ODNGNjA3NkExRkEyRjE3RAotOjEwN0FFMDAwOEU1N0YxNzUxQ0I1RjNGRUM3MkE5OEU0ODE3MjA2NzNCMAotOjEwN0FGMDAwMUVCQzlEQUZEMzg1RjFEMEUzQjVDRjFGMjA3ODJGRTAxQQotOjEwN0IwMDAwRjBCRUVBNTM0MzA4M0Q2NkY5MjM0M0U4N0FFQzhFRDg4OQotOjEwN0IxMDAwOTBGQUQxOUI4Nzg0OTQxMzVDRTkyMUVERTM5Q0ExRjQ1NgotOjEwN0IyMDAwMUUzOTcyNjI0OEZEMzE2N0E5MDFFNUVDRjkwNTVBN0VGQwotOjEwN0IzMDAwMEZGNzhCNjk3NjVEQ0UxRTlCMDFFMTcxREQ1QzUxRjMyMQotOjEwN0I0MDAwRTMxQUQ4NjBCNEJBMThGOTdEOUI1NDNEOTFCNThDNjBBNgotOjEwN0I1MDAwOThCRkYxRTQ5RDA2Q0EwRkQ4QjhBMERFOEE3OTBGRTc3NgotOjEwN0I2MDAwM0I4Qzc0NUUzMDJFRjE5MUUzRkI4RDM0QUUzNUNEMkIyMgotOjEwN0I3MDAwQTAxRkYzNUU4MEIzMThBNEZGMzU2OUYyNERGNUFCRTNBNwotOjEwN0I4MDAwN0E4QzQxRUI4OTk1MTk2NjhDRjVCNDZGNTNGMUU5MjEzNAotOjEwN0I5MDAwNzUxREMwQjc3MzRDMzhBRjhCRTM0OTVDMTEzMzk4QTBBNwotOjEwN0JBMDAwN0ZDMjAyMkVBN0Y1NzREOUExRjZGRjg5REE3Rjk3OEFFMgotOjEwN0JCMDAwOEY1RENFMjczNzQ0MjI1QzE2MzFEMjQ3MEFDNEQ1MUJDRAotOjEwN0JDMDAwMjI3MDFENDU4Q0U4QjFDMzdGMzAzMjU4N0ZGQzQ1N0Y2MQotOjEwN0JEMDAwRTMyQ0M4MkVBMDcxM0M5QzhGOEU5RDJGRDQ0N0UwQjkxQQotOjEwN0JFMDAwNkUwREZDRTkxRDc4RkVGMkYzQzYwREQxQjBERUE3MDRFMAotOjEwN0JGMDAwRDY4MTE0QTVGMTRGNERGRkJFRUE4QjI2QUExRjNCMTE3QgotOjEwN0MwMDAwNEMzNEE4RkZFNTE3Q0RCQ0ZEMTQyNkEzQkZFQjE3QUE4MwotOjEwN0MxMDAwREM2OTUyRTkyNzYzQzc3OEYyMkY5RURGNkMyNkJCNjdDOQotOjEwN0MyMDAwRDdCQzk1REJEQjYwQkRBM0U3RENGNUQ0MEI4ODJGRjM3NQotOjEwN0MzMDAwRUVGQUREMEI3MkFGOUU1RjNBMkZCOTEzRjNGNzQ3QUQ0MwotOjEwN0M0MDAwQjczM0U0MEZEQUJDMTkzQjNFQ0JBNTc1NEI0Njg2NzhCQgotOjEwN0M1MDAwRkFGNENFOUYyRkMzRjE3RUIyMkJEMkEwQzBGODRGNkZBMwotOjEwN0M2MDAwMzcxMjdGMTk3M0VGNjNEQjM3QjNCRUZFOTg1MjY3QThGNAotOjEwN0M3MDAwOURGRjkzOERFRDRGRURDNUY3MzVDRjNGNzEzQTI4NEZGRQotOjEwN0M4MDAwRTdEOERDN0I1MkQwNkY3QTc0N0Q1NTVCN0U0NkZGRkM3MwotOjEwN0M5MDAwQjNENENDREMxOEJGNzNGRUYyQjM5RkJEMDVGM0ZGQzZBRgotOjEwN0NBMDAwM0Q2NjYyQjAxRDMwNkEyNkY3RkYxQzVENUZEMzk2MEZGQwotOjEwN0NCMDAwNzZFQTU4OTFFNzI5MzBBMzY3MDNDMjYzRUM4QjgzNjVBQQotOjEwN0NDMDAwRDRERjgwMTQ4QzZFODBBNTczNzY4NDQxODFGREZEQzY1RgotOjEwN0NEMDAwNjdEQzQ2N0M2MEY2QzYwQzNDQ0ZEQ0E3OEIwRTdFOEE0OAotOjEwN0NFMDAwRTc3QzVDQzVGNzdFRjQ5MUEzRUEzOUY1OTQ0RDMyQzE4NwotOjEwN0NGMDAwRERGMzkyOTVEQjM3OEE5QzQyRjZCMTQzNEUyOTA5RDJENwotOjEwN0QwMDAwRTc4RURFQTVDNTk3MUM3RjQwM0U1RTUyMTY0NTcxNjUyNQotOjEwN0QxMDAwMkRFRTIyM0FGRkQyODA3QzdFRTlCNEVBQzkxMkFEM0Y1MwotOjEwN0QyMDAwMzQ4RTNGMDRFMTk3OEQ3MTVFMUVBRkY3Nzg4QzhDRjIzNAotOjEwN0QzMDAwODI2MDZCNDgyNzZCQzVCMTk0NkZGMkUxQUExRjUyQkNGOQotOjEwN0Q0MDAwREU1MzY3OTEzMkUyMjk2RUIwMDdDQjM1QzA3NzJDOTNCMgotOjEwN0Q1MDAwMjg4RUVCNDNBMUJENzgyNkY3MjM5QzVCNTRGRjk4NTlFRQotOjEwN0Q2MDAwRUUxRkZFREU4QjlDOEY0OTNEMUZGREZCQzUzM0I5MUUwOAotOjEwN0Q3MDAwNUE4RkU3OTIxMTcyMkUwN0REOTNDMjlDNEJCNDk1RjA5NwotOjEwN0Q4MDAwNEIzQjE3MzFCQTg5Q0U4NTU5NkQ5OTk4Rjc5MUM4NTFGNwotOjEwN0Q5MDAwMEFGN0YzMzZDQUExQ0VFM0RDNUZGNjlCQjJEQkVBRDY4NAotOjEwN0RBMDAwNDJGOUVDODU0MTBDRTk0MjhCQUI5NDI3RjFGQzAzM0E5NAotOjEwN0RCMDAwMTJFMDVCMjZCNTdGQTJBQTc3MjMxRjQzQkRCQjVDOEQ3MwotOjEwN0RDMDAwQkI3NDJFNjExNDc3RDFDNjNCNUYzMzQ4RTJFM0RENDJEQQotOjEwN0REMDAwN0E3Mzc5MzVEMDNGQ0E5MkE4NUY5MTdFRDEzMDgyRTcxRAotOjEwN0RFMDAwNDc5NERCQkE5NzUwQkVBQTYwNzA2MERDM0M1MUE3RDdCRAotOjEwN0RGMDAwN0I1ODM1QUQzN0YxN0Q5MUZDRjk4NkE4NERENDNGMTEwNAotOjEwN0UwMDAwQzAyMzY2NjEyQjMzMDE4MURBQTM2MDA3QTMxNUYzNDkxMAotOjEwN0UxMDAwODZFMDBCMzk0OENGNTJGMzc1MTM2QjVFRTRGQTUxMUVCRQotOjEwN0UyMDAwRjQ0QzBFOTk0RkY4OTZENjVGRkZCMTg4N0NBMEM2MjIxRAotOjEwN0UzMDAwMjNERkMzREMyQ0U0REIwNEJGMzRDNEEzNzZFQTJGRERFQwotOjEwN0U0MDAwQzQyNEJDQzdDMTE0MjZDNzRGRTE3RTMwOUM0RkJGN0VGRgotOjEwN0U1MDAwMTg4RkVCODVBMDlGRTE3RTg1NUEzRUZGRDYzOUZDMUUyOAotOjEwN0U2MDAwMDhEQkNGRTQ2MEJCODUwNUFGNjc0NDQ4NTlGNTkzODVDRgotOjEwN0U3MDAwOTY0RDQ5RTYxMDM5RjU5QjBCQTU4M0FBMDdGMEQ3RTg4NAotOjEwN0U4MDAwRkIxQjY0RDdDMDdFREZBQTIwQkIyQkJEQjdCRDk2MjdFNgotOjEwN0U5MDAwQTZDMTc5NDg4REU1ODQxMEREN0ZCRkREMkVFNUU5OTkyNwotOjEwN0VBMDAwODBDRjM2RTZDQTdEMTNFMEUxN0U1RjI0Nzk2Nzg4M0FBOQotOjEwN0VCMDAwNENGMDA4NDQ3MEY4RjRFOEIzOEJCOEJFMEJEQTc5MURDNwotOjEwN0VDMDAwRTU1QjgzQkNDM0YzQzMzQ0VENTE4MEVGQ0MxMzlBMjczMQotOjEwN0VEMDAwQTBDREFCQzU5NzNBNTU3RTFDNDgwQjJDNzE4NTgxQzc0OAotOjEwN0VFMDAwQzE5OTNDN0ZBMTZCRkQ5NzE0RUYyRTQ3RkQxNjcwMzlBOQotOjEwN0VGMDAwQjBFMUNGMjFGNzNGNDYxNkU3MUM5QzQ5N0VCN0QwM0M0NgotOjEwN0YwMDAwMDQ0RDJGNDUzOTRCRjhFQkUxNzJCNkQzOTM0RDdDRTcyNgotOjEwN0YxMDAwM0NCM0I3OTBGRUFGRTczNzQ2NDY3OTFGNkJDNTQ4NDc3RAotOjEwN0YyMDAwMzNGOUVERUVBNkJDOTExQThGNDVCMkMwNzNBRTIzRDRERgotOjEwN0YzMDAwMUYzMzdGNUFBODNDMjg1NkUyNzRGMjIyRDRERkI1RDAxMgotOjEwN0Y0MDAwMTUxQTI3MUFEOUI2OEVGOEQ3NzlENDlCODhERkYxRjVBMAotOjEwN0Y1MDAwMThENUJDMzIxM0RFMkYxMUQxNUVGN0QwRjNCMENBOUYxMwotOjEwN0Y2MDAwREY1MUY1Q0MwOEU0QUZGMDNFMEExM0NCMDExRkVEMkMzNgotOjEwN0Y3MDAwNDBFNTQxODhGMjIzMzBBNTVEQTY3Q0M3MzhBNjUwMzk3QwotOjEwN0Y4MDAwODFCOUE5QUNFNTQxMjYzMzFGM0RCNUZDOTYxNDE2QTA3NgotOjEwN0Y5MDAwRjI3MEQ0ODc0NDI0Mjk5OTlFMjNEMDBFMTk4MTdBOUVBOQotOjEwN0ZBMDAwQTMyN0RFNDM3OTkzNzk2OTE0MkYyODY2Q0ExRkIwNUQzMQotOjEwN0ZCMDAwNTFGNkU3MjRGNzhBQUU2Nzk0NEYwQTlDNjRCOTgyNzkzOAotOjEwN0ZDMDAwMjUwQkI1MzIyQzE0Q0IwNTRDNDVDRTdBNUU1RkE4OTVCNwotOjEwN0ZEMDAwQkRDQjE1RThERjk5QzNEQjFCNUZEQkY4QTRDNzQ2RkMwQwotOjEwN0ZFMDAwNEJBREJGODdEN0Y3OTQxQjk3RTc2MEQ5NjRBMEIyQTRDNQotOjEwN0ZGMDAwQjYyRkNFNTc0Q0IzMDA5RjkzNjczMUMyODM1RkU3MjlGQQotOjEwODAwMDAwOTZFMEIyM0I0Rjg5MDgyRUFGMjk1MEEyNjYyNUY0OTYyMAotOjEwODAxMDAwOUZDRjU1RUNDMUU1QUU1QzY1NTA3MEZCQTEwNTRBMENFNQotOjEwODAyMDAwMkZGMzNDRDdGNzRENEEwQURBQkJGMEIzNUI5OEMyRjFBNQotOjEwODAzMDAwMTA3RjVFMzVCOTkzNzExQ0U1MTk4MUUwNjUwMUJFRERFNQotOjEwODA0MDAwNEM3Q0RCQzU5MDRFODE2Q0FDOTg0NzA0N0NDNjdDMDdBOQotOjEwODA1MDAwRDRCMzg5NjZDQUY3MzM0NEQ5NTIwN0YyNDdFQUU5MkIwOQotOjEwODA2MDAwNjA2MjdCRDE0RjU3NkM3NDhGQzY3NUU5Rjk5RUUwNzlEOQotOjEwODA3MDAwRUQ2Rjk4QzcwM0Y0OTA4QjdBN0U0MDhEODcwNDZBQjlDMAotOjEwODA4MDAwM0Y0MEEzMTNFREJEN0VCRThCRTEzRDUzODJGQ0JDRTlCNgotOjEwODA5MDAwQkRFM0Y2Qjc3RTNEMUUxRjUxRjVCREEzQUFCRUY3QkVEOAotOjEwODBBMDAwRUE5N0VFRDk2RkMwMThGMzg5QjU5N0JFRkJFNzlGNDZGNAotOjEwODBCMDAwRjY0OTEwRkZFQ0JCREY1MzRCNEM1QzdFNDgyODJGM0E0RgotOjEwODBDMDAwMjNEOEEyNzBGNzJBRkI1QjVGNTRERTRDRDcyQ0NBQTdEQgotOjEwODBEMDAwMTgyNjUxOUM4MTY5N0M5RkYzOUI0RUZDMTVGOEUwQjhGMwotOjEwODBFMDAwNDE5QUZERUFCMDIyMUMzMjU4RDJFQzRDOThCN0Q1Qzk1RgotOjEwODBGMDAwNDg3RkFEQ0YzRjU4ODJGQ0U3N0MxOTQ4MzA1OEQ3QTk1QwotOjEwODEwMDAwREI0RjIzQzUzMTYxMEZCNzI3NUE1MjE4QURENzlFMjZEMgotOjEwODExMDAwNDVBMEJFRDRBMEYyNEQwQjhCMjkxQzg5RUIxRjY2MjQxMQotOjEwODEyMDAwNzlBQjVGNzc0M0I0NEZDMEI4RTIxMDdGMDRGNzZGQzRGOAotOjEwODEzMDAwMzM1RjA0OEMzM0M0RTk3MDUyREU4QTQ3OTQ5QzU4MkUxNgotOjEwODE0MDAwNjNGMzMyQTFCQ0FDNEQ5NDlEMzBDRUExQjY1MjU2MDkxQQotOjEwODE1MDAwRTM1NjRFMDMzRTQ3MTlFOTNDOUYyMjU2QzVFMzcxMTY4QwotOjEwODE2MDAwNDZGOTE2RUQwOTM2OEE1NzdCMzc4RTNFQjAwMkY5NjYxRQotOjEwODE3MDAwQjJDODMyQTBGREY4ODY4OTRFRjQ3QkQ2REI2MjYzMjk1MwotOjEwODE4MDAwRTZBNEFFQTdERUU2NzgxREVGNjE3ODI0MDNCRjQ3MjJBMAotOjEwODE5MDAwMjk1NkNDNDNERjc2QkJEMTg5RkMzQ0U1Qjk0OUQxNjI5NQotOjEwODFBMDAwMTBGQzRGNzlDRjQ2NjA3RUZCMTM5MjgxRUE5RkE4Q0RFOQotOjEwODFCMDAwQjVERTY4QzM3Qjg0N0U4NUYyMENBNDkzOEEwREU2REQ3MAotOjEwODFDMDAwMDI2RDEyNjFCQ0ZCQUI0RUI2OEM2MkZERTM0M0I0RDNDRgotOjEwODFEMDAwMUM4MkE3NTEwRUIzQ0UwRjFBRUFCNzM0RTlGNDgzMDcxNQotOjEwODFFMDAwNjZBOUYxQTQyOTZDMEE5RUYzOTU0RjVEMzBBMTlFQkI1MAotOjEwODFGMDAwRDQyNjkzMUYzREI3NDlBMEZDOTRDMDAxNDcyQTlFRDNDMwotOjEwODIwMDAwQTlGQjQ2OTNERkRDREIyNEFBN0U2QjA3RjlBRDAzMjlDQgotOjEwODIxMDAwMkMxNUVGRDc1NEI0MDhBNDE3OEJERUJGRDQ2MUJGRTE4RgotOjEwODIyMDAwOTk3MjMyOEUzMzdDNTI3NzcyQjBCRkVDODlCQjdFMTg2NAotOjEwODIzMDAwODE3Q0Q0NUI2NjUwRkREQzhDQzY5MTY1QzU5QTA2RkJEQgotOjEwODI0MDAwRkZEODJCRjBGQzA5OTMyNEUwM0Q2NkZCQzM2MjA0QUUyQgotOjEwODI1MDAwQUJDQkM0RkQxNENEQzA0RkYxN0U2RTczNEVDOTgwNzQ5QwotOjEwODI2MDAwNjhGQTFBRDYxOTY0QjczNEM0QTc0N0UyQkNCREY4QUJBNAotOjEwODI3MDAwOTA3RkZENzQ0QjM2QzU0N0I2MzdFNTUyM0U4ODdFOUNFRAotOjEwODI4MDAwN0JEN0IzMEVCNDRGMUFENjVCRTlEOUE3M0VENTk1RUE5MgotOjEwODI5MDAwODBGRTFGQjdFNjM0ODI5MDYyMUYxRjU4OTU4NEY3ODNEMwotOjEwODJBMDAwNTZCNDU4NTg0NDE4M0MzRUREM0E5NUU2NUI4MUY3OTg0MQotOjEwODJCMDAwNzFERTk2NjIzM0YyRkQ1OTZEMzk2Njg0REJCREVCOTU1NAotOjEwODJDMDAwRTc4MkU3NjkyRTc2QkY4MjdDMkZBQUU1MzlDMjEzMUJBRAotOjEwODJEMDAwRjM3QjEwOUVCRkJFNDY0OTQ1RkRFMjc0MDYwQjlCMjcwQgotOjEwODJFMDAwRjlFRTJDQUU2N0JDNzU4RDhCRUU5MzdDOUMxMkJFRERENwotOjEwODJGMDAwQjE1OTVDREY5RjhEQzQzMjE5RjNENkQ4M0IyQjAxQ0UyOAotOjEwODMwMDAwMTU0MDRGNzVGMEVBNTQ1Mzc2MzRFMkFEODlBRDI2MjYxOAotOjEwODMxMDAwRjU5QkIyNTIwRkRBNzNFNzUwNkYwNzdFREU3OEQ3NzVBMAotOjEwODMyMDAwOUIyQkExNURDM0REQTNERTQ1RjY3Q0E1OTlFQkNERUNDRgotOjEwODMzMDAwMDM5MUU4MDJGNEMyMEFBNENGRkY1QTYwOTVFQTgzRjhEOQotOjEwODM0MDAwMkZFQThGNEE0ODdFMUE5NzFCQTYyNkQxNkYwNjdFNkVBQgotOjEwODM1MDAwREFGRkM5REZEMURFNDFCQzU1ODJGMDk4N0VBNkE4NzY0RgotOjEwODM2MDAwODE5QUFGOTEzNDg1QjQ3MUZBNjk5ODdEOURDRkNGMzBGMQotOjEwODM3MDAwRUVCMkRDOEFFN0E5RDdEM0ZCRTA0OTlGNzUwNDhEOEY2NQotOjEwODM4MDAwN0E2RTNFNTMyMjgyRDYwMTJDQzE0RkZFNzIzNzlGQjdDMAotOjEwODM5MDAwQTc5RDVBNkYwNDA2RjM2RDkwRkVBRUFGRDdGNjMxN0EwMwotOjEwODNBMDAwQjM4RTVFOUREQ0FFMDNGODBFMThBRjFCRTMwQkVEOTdBQQotOjEwODNCMDAwRTE2NDc0Q0U2MzQ1RTVFMDI3Mjg2N0RCNDVDQUFCMUU2MAotOjEwODNDMDAwRDdDRUUzRkZFNzg3MzFGMjEzRjUzNzlFQzY3RkYxQzdCQgotOjEwODNEMDAwMzg1ODg1MjNDMEI1MzFCRTg0Q0VCM0JGN0U2NkRGMTE2OQotOjEwODNFMDAwMjU2RDQyQUY3RDM4MjYyOTc0NUQ1QUJCOEM5RTdEREQ5QwotOjEwODNGMDAwQzYyMkI5M0VEODgxRjY5OUM1MDc3QzZGMDIzRThGMjgwOAotOjEwODQwMDAwMjhCRjMzQjdERDJFMERCNDZGM0QzRkMzMUYxOUQ2QkI1OAotOjEwODQxMDAwNDIzRDMyMTk3MDBERjlDM0M3OUIwNTU1MEY2MTQ5MjNDMQotOjEwODQyMDAwQTdEMEQ1NDU5MjNGRDg1RjA5RTI3RkMwNTc3OERFOUUzRQotOjEwODQzMDAwNEYyMEY4MzRCNzlFREE3RTJGRjk2MUVDMEVERThBOUY2QQotOjEwODQ0MDAwRDcwNEE2Qzk0MTlFMDdBNEREMTM2NDE4OUExQURDMUI0MQotOjEwODQ1MDAwOUZEMkUwRjhFOUVFMERDRjNFMDVBRkNFM0NCM0U2MEI4MAotOjEwODQ2MDAwN0M1QTEyOTY0NTIzM0NFRjg5NUY3MDZEMzJCNDlCNjA1NQotOjEwODQ3MDAwRjYyNTIxM0Y1REU5QjNGNEMxM0JBQjg2MkY2OTc4M0YxOAotOjEwODQ4MDAwMkZCNERFOTIxNEI0N0VGOEQ3QkNFRkE5Q0RDQjUwNEVGQQotOjEwODQ5MDAwRURCMzNBMzAzNTFDRjFDQjEzMDI5RjQwN0EzMUQwNTMwMwotOjEwODRBMDAwRDc1REZGNDFGN0YzMjNBNUIzNEIyOEJGQkRENjQyRjdGNQotOjEwODRCMDAwQkFGNEYwN0Q3Mjk2NDFDQkE3QTRGQjFBMUEzRDQ1QjRERAotOjEwODRDMDAwOEM2NkU4NUYzQ0E5REE0RDI3Mzc4MTlEMEFFNUM2NUFEQwotOjEwODREMDAwQjM4Q0RGMzVFODcyMTQyQjQ5NjFDNjMzRDc5QTRGRTA2RAotOjEwODRFMDAwQjlCMjYwM0IzMUJENzc5RkRBRjg1RDFFRUU4NzZDODREMAotOjEwODRGMDAwRjE4NTMwRkVCRThCOERGN0FENEI1OUU5MDRGQ0IyMTYwOQotOjEwODUwMDAwQkI1NkUxRjNENEE2RTVCNERGOUFCREI1NUQ2RjQyOUJERgotOjEwODUxMDAwODZDMUVFOUI5RDA5QjhFRTExNTMwNDc0NDQxQTY1QkFFNgotOjEwODUyMDAwRUZFN0Y1RkU4Q0U0NDlDQjM0NzgwN0Y2N0M0Qjg3MzFENgotOjEwODUzMDAwMDJGNTBGOEZENzQwRjFEQjk2OEVGOEM4OTEyOEE3NkMxMwotOjEwODU0MDAwODZCMDcxRDYyNzlDMUM1RUJERjJDNDE1MURBQzBGMzVEQwotOjEwODU1MDAwRTc3MzdENDhEODUzNzY3RjNBQzBDQjdCOUNFNzI5NkE4NgotOjEwODU2MDAwRkE4N0E0RTJDRDM4OEI0NEZDNTlGMkYyM0NCNzVFN0QyOQotOjEwODU3MDAwODhFQkQ1RTc1MUFGNDY3RDY5NzJBNTE0MkM5RjFBQTJFRQotOjEwODU4MDAwRjk3NzMwMkFGMzFEMUVCQzg3OTk2NzYzMjQzRjg2RTM4MQotOjEwODU5MDAwNjUwNUY0NUJEODk4NkY1NjFBN0UyN0MzQzEzMDNGMzcwNAotOjEwODVBMDAwMTZGNDFGMTkzMDNCQjE4REVCM0I5MTM2OUI0MzQxM0M5OAotOjEwODVCMDAwNTYzODVENTlFMTNGODQ2NzY0QTZDMjcwMUVBMzRFQkY2MgotOjEwODVDMDAwMzBFQkY0MDc1MTU3N0VENDA5RkFDNDM4RDZBMzRGQzgwQwotOjEwODVEMDAwQ0MxMThENzBCNkRGMzc3MDFFODdFNkNGMDVCRDg5RUVGMgotOjEwODVFMDAwOTk3OTE4QzAxRkYxRDRFQUExRjM4OTA2NDM4MkU4NTlBQQotOjEwODVGMDAwNTFFNEY4QzFCRDdBM0ZERTY3RTNGRTE1ODlFMjQ1ODJBQQotOjEwODYwMDAwRDI0ODdFRkJBREQ5RENCRjkxQ0M3OERDNkI4OEMyRUQ2MwotOjEwODYxMDAwRjkwOUQzM0M1NDA2RkI4MUUyNTBFQzU3MkMxMkY5RjJENQotOjEwODYyMDAwNkU5N0ZCMzlDNDhGMzQ2MDAzNjhGRkM1OEU2NzAyOTE3MwotOjEwODYzMDAwRkI3N0Q0Q0I1OUNEQTVDNTk1N0U3QzkwRkJGRkJDODYzRQotOjEwODY0MDAwNDhDN0Y2MzA3OEZGQ0UxQzJFOTcyMzBGQzFERTUwQkZFRgotOjEwODY1MDAwQkRERTRBRjc1QjBBQzQ2NzlBMDg5RjI2MTlDOEFGRURDQQotOjEwODY2MDAwNjU0NzI0OEFFN0FCN0MzNkE2RDhGNUE2OTNFMkIyQUU3RQotOjEwODY3MDAwMzQ4NDdGOTIxMTJDMkE1MDc2Q0RBQTFGMzdFNThFRjREMAotOjEwODY4MDAwNDgxNEY1MUYyNkZGOUNFMEUxMDFEODY1QzBCRjZEMzU5OQotOjEwODY5MDAwRjFCMTk5RjBGRUYxOUEwRDA0NTczOTgxRkJDOUI0N0IxMQotOjEwODZBMDAwRTc3MTEyQkZERkRGRUMzQUVCQzFGQkJEMUQ3M0Y4RkRENAotOjEwODZCMDAwOUZDODYyRTNFQzc0MjgwRkFGMEQwODQ4NzdGN0Q4OTU5MAotOjEwODZDMDAwNDVBODk3MzRDOTNGQTNGMzQ4Q0I5MjBERTgyRjFCNkEwNgotOjEwODZEMDAwNjRBRjVCMjYzMkY2NkMwQ0FGNDc0MTg5RjU4RkQ4MDc0MwotOjEwODZFMDAwNkYwQkNFMjdEOUExRUVGQjExMjFCQ0JFQjI3NjBFRDdGRgotOjEwODZGMDAwNkIzQUY3MDEyMDA3QTE3RENDNTRGQkZCQTk0QUIyQjcyNgotOjEwODcwMDAwN0JDQTAwMzdFOEZGODA4N0RCQ0ZERENFQTcyQTNEMjM3OQotOjEwODcxMDAwQzkyRUUyRjU5RURGRjJGNjE4MkY4NUZBQTIzN0Q2NTQ1RAotOjEwODcyMDAwN0FBMEZERTM2OUUxRTdDRDJDRTJGMDdERkM4REVFQzc5OAotOjEwODczMDAwMzA4RUY1RDczQTFFQzdFQUZGOUNGRENDMDBCQzY1OEI5NgotOjEwODc0MDAwOURBNUIyMkI4MUNGQUQzMjJGMEFGNzFEOTk3NTQ1OUM5RgotOjEwODc1MDAwOEY3NERBM0EwODVFMENFNDc5RjQ1NTc0OEY1RUFGQUYyQgotOjEwODc2MDAwNUE5MThFQ0U0OURCRUJBNkNBOUM4RjRDOUU0MjU3RkI5QQotOjEwODc3MDAwMzlFRUU5QzZCREI4REVFQTQ4NDJGREIzN0U1NTc3MDM1RgotOjEwODc4MDAwRjI4RkZBMDNBQjNFQzQ3QkU5RTU2NTY2RDI1QkNCOEQyNQotOjEwODc5MDAwRDVCRjQ1M0JDODc4OThFN0JGRTAzNzI2MTAwRjg2MDA2NQotOjEwODdBMDAwM0ZDMkZCQTZCM0FBRjhGOTJEOTVCOEJGNTZEOEYzOTFFRQotOjEwODdCMDAwMkIwRkZEQjFDOTQ2QzI0QjREOEYxRDY3NTEzQ0U4OTc0OQotOjEwODdDMDAwRERBMkU2QjczMzcxNTgxRERFRjczMjBFMTVDOUVGMUI3NwotOjEwODdEMDAwNTUwQjdBMkRFRTJGOUZFN0VCMkFGMDFGRjIyMTREQ0Y5QwotOjEwODdFMDAwQjU4RDM3ODZFNEY1OUE3NTc5QkQ0NjVEMUVGMEQ4QzIyMQotOjEwODdGMDAwNTAzRTY0OUYzQzY5NDA3REVBNTc2MDA3RTMzQUY3MDNDNwotOjEwODgwMDAwMUZDMkE3MUZFQzYxN0MxRTA0N0IxRDlGMkY4M0JEOEVBMgotOjEwODgxMDAwN0VGMDU3RDc2N0QyRjNGNUY1MEU3QUZGRTZGQTY5RjRFMgotOjEwODgyMDAwOUM5MTFBMzAyMTNFOTMzRjlBRkMzNkNDMkY5MDVGNEY5QgotOjEwODgzMDAwQzNCMzZEMjM3M0ExRUVEOTFDNUVCRjY4RjZDOEZGRjAwOQotOjEwODg0MDAwNUMwREY1RjE2QTdCQ0YzNzg0ODczRDY1MzY3NjQ1RUU2MgotOjEwODg1MDAwNzhGMjgzNTNGOUQ1QzJDQzE1RTQyNzVBQTBFNDE3MDI2NQotOjEwODg2MDAwOUUyNDE4NUMxNUY4OUQwNzc2QTc4NUUyMTZGQUZEQkNENAotOjEwODg3MDAwNTdBOEU1OTE4NEI3RTMxOTdFQzIyMEQ0OEY1MzUyMzhBQwotOjEwODg4MDAwQjk3RjNGQ0UyMzAyNUZDN0RBQjdENkVDNDBGQTE4NTQ1RgotOjEwODg5MDAwNkM3NDIxMUVBN0E2ODdDNjBGOUUyRkU0NzQyOUNDRTYxMAotOjEwODhBMDAwQ0ZENDM3RERDMzA3QkFBRkFGRDE0NzdGRjVGNUZCMDBCMwotOjEwODhCMDAwMDUwNkY1NUZFRkI1QjM2QkIxQkUzRTI2M0M1RDk1QThFRQotOjEwODhDMDAwNzRENUVGRjgzNjZFNEZCMkQ5NDA2RjQzQjFBQ0I3MEZFNQotOjEwODhEMDAwMDM5NDVGNzJBRTI2Q0Y0RkU0RjZCREU5QUQzQjA1RTlFOAotOjEwODhFMDAwQUQyQkM2NTc4Nzc2NjJENzgxNTU5QkYxM0IyMTIyRDJBQgotOjEwODhGMDAwMUI5MjA1RDIxQkM2M0YzNDdBQUJFMUU3QjExNEU5MERGOAotOjEwODkwMDAwN0U5RDU1RkI5RTJCMEZFOTMxODlEMzk3QjA2N0ZGMUFFNwotOjEwODkxMDAwQ0FDN0I4OEJFN0QxNjhGNDE2QTNFNkNCNDc0OTFENjRGNAotOjEwODkyMDAwMkZEMjg3MzlCMDFGRDBERTE2MDFFRkYxN0NGMjExMjU2RQotOjEwODkzMDAwN0Y4ODQ1MEU3NzM4QkFCQjRDN0FEQkZDM0RFOUVERDczMgotOjEwODk0MDAwRDcwNDI4N0ZBMjMzNEQ0OTQyN0RDNjZCRTI3RUFCQ0I3NAotOjEwODk1MDAwQTVDM0FDRDk2NkZFRkQ4QzJCN0NDOTM4Q0UxNjc1OUNBMAotOjEwODk2MDAwNTlDMzRFOTBGRkFGQzhFQTEwNTE5RTM5NjUwRUQ3ODJBOQotOjEwODk3MDAwNDlEOUY0QkRBMThGMEE3OUJGNkZFNjJCMUQ0NDVGRDc5QgotOjEwODk4MDAwN0Q0QTdFREUwNDAzQTdERkY3REVEODQxNzIyMUE1RTEzMAotOjEwODk5MDAwNjhGMTJDQzQ5Nzc1MjJFOURCRkE3REM1Q0Q1M0UzNjZGNwotOjEwODlBMDAwMDI5RjE3MzRBRkU0RTAzOEUyMjE5NTJFRTU3NUM3MzgxMQotOjEwODlCMDAwOUY4RjYxNTIwNkFDMjdDOTIzOTUzODMxMkU3NEI1ODEzQgotOjEwODlDMDAwQkUyNzMyQThGODY4MENDQTY3NkQzQzM4QjgyNENDMzc4QgotOjEwODlEMDAwNDFENUQ3M0FCMTJGM0RDMjRGODc2OTcwMDgzRDFGMkU1MAotOjEwODlFMDAwMUNDMDJGN0IzMUZFNTFBOEQyMzExRTNERjk3MUQ1N0JDMQotOjEwODlGMDAwOTI5N0VCQjdFREQ3OEY3ODQ1NzhCRkE0NEY5NUFGRjUzOQotOjEwOEEwMDAwMjY5RUZGMDFBRDI1RkMyRUMwQ0IyRUY3OTk0MkYyRkIyRQotOjEwOEExMDAwRUFGNEJGRkQ5MkRGOERGQjU4MTM0RDdFRTUyNDIzRDc4QQotOjEwOEEyMDAwRjc5MjY0OUVCNzMyOTQ3OTA4Q0U1QUZDNEREMzE3NjVGRAotOjEwOEEzMDAwODVFNzE3REQ1MEVDRkUwQkMyNjkxQjkzMEZBMDNDQjMxQQotOjEwOEE0MDAwMzlEODIyOEFBRjgxM0M0M0JDRDhFRDUyQ0VEMkJDREZBQwotOjEwOEE1MDAwNTEwRkNDMkM1NkZFN0IyMDdDMkFCRTRFRjkwNkM3RUY2OAotOjEwOEE2MDAwQUYzRUE3RjhCRjBFN0Q4QkY0NUZDNkZEQTU0QkNCQUEyQQotOjEwOEE3MDAwMjkzNzZCMDhEODQ5QjhERTk5NkE3RTQ2RkQzMDVFQUY2QgotOjEwOEE4MDAwRjk1N0JEMDk1QUZDNTQ5OTg3Rjk5M0QxMkFCQ0M2NTlBNAotOjEwOEE5MDAwNUNBQzAyRkE3N0ExMUNDNkZCN0I4NzAzN0VCQzE3NkMxQgotOjEwOEFBMDAwQzE3QjY0MTJGQTUxMTlGNThGQTkxMTdDMzJGNjE3M0Y3OAotOjEwOEFCMDAwN0IwNUUzNDVBNjNDRkE5QzA4NjNEM0I4M0RBMEREQkYyNwotOjEwOEFDMDAwOTFGMjJGQ0ZERjk4MzI1QkY1Mzc0RTY0OTMxMDNFQTlCOQotOjEwOEFEMDAwMDZGOUExRTlGMDNFRkJEMTgyNjM3ODNDOTMxRjVCMTE1QwotOjEwOEFFMDAwODdFMjcyRUFCNjg2NTJGQ0RFRDZBQTlEMUY2RjQzN0ZFQwotOjEwOEFGMDAwRThGNERGNUExODlFMDdFODhGN0U2M0Q4N0NBRTdGOTgzMwotOjEwOEIwMDAwMUMyMUJBMkEyOUZBQ0Y0QThGMTFGOTUxNzgzQ0VEMkE1MwotOjEwOEIxMDAwNTJGNTRGQzREM0Y4MTAzQ0JEN0E3Njc4M0MyNUZERTc3QQotOjEwOEIyMDAwN0JFMEU5Q0NEOUExNzg1QUE0QzNEMzU5QjMxM0JFMTdCQgotOjEwOEIzMDAwOUVDRUM3NzVGRjM3QzZBOTYwOUNCMzBCOTVFMkQ5MDNEQgotOjEwOEI0MDAwRTA2NUY2NDI2NUUxNDBGNTQxRjEwMUIyRkI0NkIxNjlFRAotOjEwOEI1MDAwRDZFMEVGMUU2QUNGNTY5NDk3MDNFNDI3QzQ2RTNDNDlEMwotOjEwOEI2MDAwRjk3MUY1MzVFNzI4NEZCOUNCNzZGMjZEQjQ4M0ZFQUJEQQotOjEwOEI3MDAwQzYyMjA3RkJCMzQwN0YwRkQxRDc1QjQwQUU3OEMwOUVDMwotOjEwOEI4MDAwRkNBMDg4RTc0MTFGNUE2N0YxQ0Y0MEJEQjY5NkRGNDc4QQotOjEwOEI5MDAwMjhBRkREMjY2MEJFRjc5MEFBNkFDMTBERkMyRDUxMDFGOQotOjEwOEJBMDAwRDMxMUZBQzcyODg2NUVGRjA5RkNCQkQyNzQ4NEY0RDlCRQotOjEwOEJCMDAwNzY5MEM3MUU2MjVGRkM1RTlBMjZGRkM3NTlBQURGNDAwNwotOjEwOEJDMDAwM0JCNUZFRUY0NkM3MDYzQzY3MjYxRDQwN0U1NDA4RjRDMQotOjEwOEJEMDAwODRGMUNENkJCQTQxQkUwNThERjdDNkJFNjlFNDU3OUJFMwotOjEwOEJFMDAwRjEzNUM4QkYyMDNGNEUwRThDMTg1Q0NFQjMyNjg3RjRGQgotOjEwOEJGMDAwMkI5MEQyNDJFQTY3MjU4RDA5QTlEN0U4QkUzMzQ2OEQ2RQotOjEwOEMwMDAwQUI0Q0RFOTE4RkY4MjM1NkYwM0M4NTQyMzkyQkE0N0Q4NgotOjEwOEMxMDAwN0I1OTJFN0QwRkUwQ0FFOUZDRkVERDlDQ0NFOTIxRTMwNwotOjEwOEMyMDAwRUJGNTgyQUJFMTNGQTQ3NzUxQTcwN0U4RjUwNEJENUUwMQotOjEwOEMzMDAwRjBFM0Q5QUE1RUEwREU1N0Q5NjgwQ0U0MTI3RjYyM0M0QgotOjEwOEM0MDAwQUY2RUY4ODU1RjEzMURCNENCMUNDRkJENjU2NzI5MUZDMAotOjEwOEM1MDAwQTMxRUVDN0ZGNDM3MEQwRENBMkY0NUJBOTg2MDBFOTAxNQotOjEwOEM2MDAwN0Y2RUNCNjIyQjlEQzc5NjdENEZEMTc3MjMzNEZGMTc0NAotOjEwOEM3MDAwRDAwREQxRDE4NDVDODlGMjVDQzdEQjFGQTRGRTZDMTVEQQotOjEwOEM4MDAwOTdCMzdBQkExNDZBNUYyNEZENkZFQjdDRDgxQkQ4RUJEQwotOjEwOEM5MDAwQjlGM0QyQjhCQ0REMUYyMDNGMDRCQkQzQ0M1MDZFN0FGMQotOjEwOENBMDAwMjUwM0U1OERGRDU4RjA0NzA4MjM5MDdFMTU5MjRGMkM0MwotOjEwOENCMDAwODk0OTVFQ0E5NzdDOEY3RjRGOTEzMUM3QzY2NDM0RkQ2NgotOjEwOENDMDAwMTVDQTZCMDRCNEVGN0U0M0NEQTM0NUJDOEQ3MDMyQzc4QgotOjEwOENEMDAwMDYyODQ3OERFN0Y0MUQzQjg5OUY4RkNEQzFDQkQyRDVBOAotOjEwOENFMDAwQkNBQ0Q5REIzMTQ5QUMwNUYzNjI4N0UyNzhEMDM2QkU0MwotOjEwOENGMDAwODY0OUY1RTREN0YwNTNGRDMwMjczQjUyNEZGM0YzRkU5RQotOjEwOEQwMDAwODk5NUNDRDUwNDY1QjE1QTUxRkRDRDZFMzVCRURFNEQ4OQotOjEwOEQxMDAwNzFFRjc0QzExMTg5RkU4RDExQTI4QkUyREVEMTRDQTJEQwotOjEwOEQyMDAwQjhGODEwNTY0RENGMjhDMUNGOTlDNzc3RTQyMzU3MDIyMgotOjEwOEQzMDAwMDA1MDVFQjA5QkNDRjRGRDhDRENBNzZEOENCRTZGQjQ5NAotOjEwOEQ0MDAwQ0FCQzlERjJCMjAyMzJGOTExRUYzOUNFRUZFMTZEQjEzQQotOjEwOEQ1MDAwRkY5MEUyMDQ0RDZGRjNGQjA0RjdBNDc4M0VDNDc4RTY3RAotOjEwOEQ2MDAwOTA1QTgxRTEzRDU2QjE4QUM3MTFDNEQ3NDVDNzJDQTg5NgotOjEwOEQ3MDAwMTc2QjVCRTkzQjcwODk1NTA2RjI2QjVENjlBRTNFNDA0RgotOjEwOEQ4MDAwRTc3MEI3ODVCRTFGRDcwNUZERDFDRkQ1NkUzNzMwQTJBRQotOjEwOEQ5MDAwNTc2MDFFM0RGRTU0RjhFOUJBQzY0NTcxOEJBRUJGMEY1MQotOjEwOERBMDAwMjI3OUM3NzQ3RUNFN0EzN0Q3QkZFQkUzQ0QxQ0JGNkM3OAotOjEwOERCMDAwNjdGRjgwN0NCQjMxM0U5MkVFQzcyREJBQjZGQTZERTRGOAotOjEwOERDMDAwMjM1QkRFMTMxRDFCNTRGRjMzRkFGRjg3RTMyRjk4N0ZDRAotOjEwOEREMDAwNjA3NkE1QTFERTY5QUUwQUVGQTczNDMzRDdCQjkzRDE4NQotOjEwOERFMDAwNUY3QUQ3Q0FBNDgxRjRBODdFRTMyMjM2ODNERjFDN0Q5NAotOjEwOERGMDAwRTk3MTkxODY3MjFFMDdEMUQ2QTlFREIzRDFCNjQ2NTg1NgotOjEwOEUwMDAwMjZFMzZGREYzMzJFNTJENjRGNUMyNDUwMkQyMEJGMUYzOAotOjEwOEUxMDAwOEVGNTEzMTAzRURDNkZGRDVERTMyMkNGQ0NFNUYyRjY1QwotOjEwOEUyMDAwNzJFMzIyREFCRUU3QUFCRjE3MDE2MkFCRjkxRDE0MTc3RAotOjEwOEUzMDAwQTA3MzMzRjRBRTJGMDg4RTNCNzA3REU1Rjg5QkNDREYzQQotOjEwOEU0MDAwNjM5QzYxQkU1QTdFRkI5OUEzOUZBMTVGRkZGMEVFODNGNgotOjEwOEU1MDAwQ0ZFMDczQzY4NTI3Q0FENjAwNUUxNDRGQjM5M0JGRjcyMQotOjEwOEU2MDAwREQxRkM1M0NDQzg3MEI4RDFGQ0M3NTU4NDJGQ0Y3RjgzNQotOjEwOEU3MDAwODNGODQ5RUIxMEY4QkRGQ0UwRkE2MkREQkE3MjhEQTEwRgotOjEwOEU4MDAwRjE4MDdDNUI2OEZCOTlGMUExRjVDRTYxQTE2NTMzQUIwNAotOjEwOEU5MDAwMjYzQ0Q1RUY3NzQzRDRERDk0MjdENzc4MUI3M0YwMENBRAotOjEwOEVBMDAwRjFBMEYzMTAyRjVFMzYwRjMzODdERDk3ODY2RkNDOTFEQwotOjEwOEVCMDAwNDY3NERGRkUzRUE3N0JENzRCQjdCRkIxOTZFQzU4MDM5NQotOjEwOEVDMDAwREQ5RjNGQjdBOEUxOUVCNzY0QzQwRjMzRjNEMDM4NEU5RgotOjEwOEVEMDAwMDVGMUU4QUI5RjhFN0Y4NzYyM0E5MkRCNzMyM0I0NUYyNAotOjEwOEVFMDAwOTZDN0JGMTdENTI3OUVBMEZBRjM4N0Q3MUNFOEM4MEZFRgotOjEwOEVGMDAwOEVGNzBFNzZBRjlFMDNGQzdDQjhFREFDODA3QUM4RjA5RQotOjEwOEYwMDAwOUE5N0E5RkVCQUM1OTMwN0M0QTM4QzlBNDMxREY5NDE0OQotOjEwOEYxMDAwREZGNUNCMzBCQTBDRThDN0M4QTg3OTk1REVGN0E3RjcxQwotOjEwOEYyMDAwMTg2NDBGQ0ZERjJCMzNDQjY0NkZBOTc5NkExOTJBREU1RgotOjEwOEYzMDAwNjQ5NDcxN0ZBQjk0Q0VFNUNEMTYxMzk3NkYxRUE4MTY3RgotOjEwOEY0MDAwQUY4MkZGQjVFOUYzREQzODVGM0YzRjhEREZFQjYwQzBGNwotOjEwOEY1MDAwODU5MDVGNjlFM0U5RTU5OTI2MDc2QzBBRDcyMzMzQ0E1MAotOjEwOEY2MDAwMUVFMTcyNDVDQjE3NkNEM0U3QzVCOTFGNDRGODA4NTUwRAotOjEwOEY3MDAwOERENDZFNkI5RURBNkUzRkQ3NEZEOTZDMjZBMTVDODY3RQotOjEwOEY4MDAwN0Q4NkNEMTM3RDc0OEUxQTJGRUEyNzNGOEQ2OUY2RTMxNwotOjEwOEY5MDAwODJENzNGQzRGQ0JDQ0JCNjFGRkIxOTc3NDY2QTIwRUNENgotOjEwOEZBMDAwN0REQjNEODVEQzdFRUM4QzA4QTQyMDFGRUUzNDg1RDc2QwotOjEwOEZCMDAwREYxQjE3Q0NGQ0U5OUMwMUY0NTdDQ0FCNDU5OEY2NkI1MgotOjEwOEZDMDAwMkY3Q0M3QkNEQTBGRDU3ODkxMTYyRkQ1RjI2Qjk5RDFDQgotOjEwOEZEMDAwMzcxMUJGRjM5OTY5RkJFMDA2OEE4M0Y2OTM1NzdCOEZCRAotOjEwOEZFMDAwREQxMUMwN0JFRURFOEEwOEM3NzZGNkRERkRFQjI3OUMzRgotOjEwOEZGMDAwOUM5RkVFOThDM0I4RkY1RTE3NUZEMEFGRkI4MzM5M0RFRgotOjEwOTAwMDAwNzE4NUUzNzNFODVFNThGOEI4NDJDRjNFOTNDM0ZCRTM0MwotOjEwOTAxMDAwQUU5OEE3RERGNzU3RUYyQjM5QjlERUE3OTgxNDE2MkVCNwotOjEwOTAyMDAwMEY1NENCNzdEN0JGMDc3QkU4Q0M5QzIwQkY5RUJCMkVDRAotOjEwOTAzMDAwODNGQzc2RjUyNjhFQjcxRTk5N0Y0RjUwRDMxRjZEQThGRgotOjEwOTA0MDAwM0Y5MjFFRDU0MkY1RDE1NTVDOUZENEY0MkM0OThENkJDRgotOjEwOTA1MDAwRThFOTA5RThFM0FGMzg4RjYwRTM3NEFCRTk4OTNERjRGMAotOjEwOTA2MDAwNzExREQwMDdEMEU1MzBDNkUzNEEwNjM1NkY3NDk4OTU3OAotOjEwOTA3MDAwQTdBMDdGNTczREFBQUZGREY0QjVGRDNCRDk0Rjc1M0I4NwotOjEwOTA4MDAwMjNDODdFQUFEQUZFMDZFQTU1RUQzNURDNEZEODY5QUY3MwotOjEwOTA5MDAwN0UwM0JGN0ZFMDc5NEYyNEJEQTlCRkZFOUExRDk1Mzg5RQotOjEwOTBBMDAwMkZENDhFQzJCODIyRTI2M0EyQ0QyN0M4NTdBMDFEMTVDNwotOjEwOTBCMDAwMzBCOTYxN0RFNTY4NDdEOTMwNkZENTNEQUMyOEExQUZBNwotOjEwOTBDMDAwM0RENTc1Rjc5RjI5REYxNUVDQ0Q5NEEyN0YwNDdGRDBBNQotOjEwOTBEMDAwRjk5NzBFQUE3OTEwMDc0NjlFMjVCRjg5NThDM0VEM0QyMgotOjEwOTBFMDAwQjE4NkM3NDM4RDY1M0M2RTYxNTRCODFGQzUwQ0YyMDg0QwotOjEwOTBGMDAwNUQ4MTlBMUY2NThCMjNENDhGRDI5NUMyRkQyODg5Rjk5MwotOjEwOTEwMDAwRDU3RUQ0MDM0REQzMkM5MjQyRjI5MUZCNTVCNEJDRjZEQwotOjEwOTExMDAwNzExNkRGMUI3ODFGQTMzRUNCQzgzMDBGMUQxNDU1QjI0QwotOjEwOTEyMDAwMDMyRDZBN0M4Mzk1NzE3OUE1Rjk0REY0NzlEMzM2OUQyOQotOjEwOTEzMDAwOUY0NEVGNDdDOTJGMEFGNTlCM0MyRUM4Rjc0RTg3NzkwRAotOjEwOTE0MDAwOUVERjVDRjAxNkEyRUQ3RjZFNUQxMTg1N0U5MzE3N0QyQwotOjEwOTE1MDAwMEQ3MzU0QkZDOUEzQjg5RTdEMUY3MkJGNDlENzNFNkUyMQotOjEwOTE2MDAwMTdCOTUxODFCOTJBMUNGRUY1ODk1MzkxMUY2NERERTFCRAotOjEwOTE3MDAwRjUxNDJGRDNGQzUwODk1NTJBM0NENEI4MEZDMjE3RTFGRgotOjEwOTE4MDAwMjkzQTM5M0M2Mzc0RjBGNDBFRDNFMjQyMkEzQzEzMzg5NgotOjEwOTE5MDAwN0NDQjhCNUNFNDc3OTIxMDlFNTIyRjNDMzUzRjk1Rjc0OQotOjEwOTFBMDAwNzAwNzdENUZEQkIyQ0UyMjdCMDg5RTlGOTFCRDZBNDIzNQotOjEwOTFCMDAwNzgyMkZDQkZBNzFGRUE5NjIyRDUyRTU1RTEzOUYxRDFCRQotOjEwOTFDMDAwRUM4N0YwM0JDMTkzMUUyQjNEODZDRjI5REI2RThCQkIxQQotOjEwOTFEMDAwMDE5RUQzNzYzRTU0OEE0RkY2M0E4RjEzRkM3NTJFRTdFNAotOjEwOTFFMDAwNTc5OEQ5MUQ0QzhGMzcxNUNBMjFERjgzRDdFMEE5RTFFNQotOjEwOTFGMDAwNjFBRkZGOEU5MTNGQjY1Q0UyRkVGQzcyMTUwRjMzMTAzQgotOjEwOTIwMDAwNkVDMUZFM0M0NzI4RENCNkE4Rjk5MkM2RkM2QTBGREFBQwotOjEwOTIxMDAwQkJDMzc1NzBEM0YwQjAxRUUxODZGQzJFQzYyQzdCQzg5NAotOjEwOTIyMDAwN0Y1NzJCQTAzREQ0MUYxRTBFNkZCQjNDM0M3QzU4ODc0NAotOjEwOTIzMDAwODczRkRCOUM3RDJGQzJFQjg1QURBNTZGRTFGM0U3QkVEOQotOjEwOTI0MDAwREJBMjEwNUU3Qjc3M0MzNEE3MUZCODI1ODdGMDc5NzRDQQotOjEwOTI1MDAwNzIyN0Y0ODVEQjg5NjJGNzBFRTQwRjMzMUMzRTIzRjE5RAotOjEwOTI2MDAwNTlDMDM3QjQ3QkI3Mzc0REI0ODZDNjY3MzRGRUU4QjQwRgotOjEwOTI3MDAwODY5MzFGMTdGNzJGQURBMUJDQzJGQUIyMzVDNDFGQkIyRQotOjEwOTI4MDAwN0FGODYzQjcxREYzMTAyRjk1M0ZFNkNERTVGN0ZBQ0JEQgotOjEwOTI5MDAwNkJCRTdBNjUwNkMwMzVBRkU2MDREMTlGMTFFODhGQ0U2QwotOjEwOTJBMDAwQURGNjg0NDFDREM3NjAxMTIwMkYxMkNCOTgxRkUzQzdDNAotOjEwOTJCMDAwNDM5OEQ1MTcyNTUwN0UwMkYxNEQyRkU2MzlFMzA3NEEzMgotOjEwOTJDMDAwRjU3RTBBRTlENUJGMDk0NDFDNEMzMDI0MDExRkM3RENEOAotOjEwOTJEMDAwQTkyQjQ5MEVCRTU5MzRCOTJGOUY2RDJGMzM5MEZGNjdDQwotOjEwOTJFMDAwQkJFQTFGMkM1QkUwM0E4Q0VEQjRGOEQ2NkU5N0YyNzZCMQotOjEwOTJGMDAwRDFGN0YzNkIxRjJGMEFGMjE3NzZDNkIwMUVGRjFBN0U0NgotOjEwOTMwMDAwMUYzQ0FGNjY5QjgwNzkyODQzNkE2RjI1Rjk5MDU4QTY2OQotOjEwOTMxMDAwMzA5NDBGQjdDRUU2NzQ2MkNDOTc2OEJGN0RGRDZERERFQgotOjEwOTMyMDAwNzk2ODI3NzRFMjhERjYyQ0MyODM4RjExMEYzQTZCOUVGOQotOjEwOTMzMDAwMjQzQ0I4NzIxNUY3OEY3NEQ2OUM4QjBCOEYwNzM1MTFCMAotOjEwOTM0MDAwREZDRENGQjgzRDQ0NEU3QTZCRjg3NzRDM0FFRENBRUI5RgotOjEwOTM1MDAwMTk5NzgxMDdDQjU0M0NEMEU0MjRDQTFCQzQyNzYzNTkxNgotOjEwOTM2MDAwRTA1MUY0NjMwRjAxN0M4ODQ4NDM3OUM5RjlCMTA4RjJGMAotOjEwOTM3MDAwMkEwQUY2MjNGNkUzN0ZENEU4QTEwQkQ2NjYxOTg0RjcxMAotOjEwOTM4MDAwODRGNUY5MDBENUI0RUU3MzY1QjlGRUE5MDNBQ0VGOTI4QwotOjEwOTM5MDAwRjMwMEQ0Qjg2NEJEMUE5NzVDNUFDM0YzNTczQkQ3N0QyQQotOjEwOTNBMDAwNTU4MEVCM0Q1NzA2RjYwMUMwNjU3Qjk5ODNFMUY5Q0QwOQotOjEwOTNCMDAwMDJDNTJBNjAwQjlFQTc0RkRFRUFCMEI5MDlCRDcxNDgwRAotOjEwOTNDMDAwMkQ5RTdGQTJEODk1OEFFRjY3MDA0RTI1QzU2MjVFQUZCRAotOjEwOTNEMDAwMUFFRjE5QTY3RTA3NUE4N0ZGODBFN0EzRTY5MjVGNEUzMQotOjEwOTNFMDAwMjJCOUExRjlEMTE5RUE4RDc2QzQ2RjY1MzRENjRGMzAxMAotOjEwOTNGMDAwNTcyNzRCODRERkVFRjE1ODZFREY3NzI3RTUyRkY0RkExRAotOjEwOTQwMDAwMDc3OTNFRENGN0Y2NkY0NTlCMjlCRjUyRjM2Rjc5RUQ4NAotOjEwOTQxMDAwRENCRjU1QzEwMjA1Njg1RjUzMUMwMUY5NzZBQjg1QkUwMAotOjEwOTQyMDAwRDc1MDI5Qzg2NkYyQUY5NUI4OTVCOUE0RjdCODI4MUZFOAotOjEwOTQzMDAwRDZCREMwMkE5MTFGNkNENUFFNjRFNDE3RTU4RDIyQzk1NAotOjEwOTQ0MDAwRUJGRUVDOTJCRTc0NzY5OTdDNDZBNUJCRUZDMDY3QUU4RQotOjEwOTQ1MDAwOUY3QjY5N0M2NjMxRUUyRjg4Q0ZEQzMwRjc3QkYwOTlGQgotOjEwOTQ2MDAwRjc4QjQyRjkwQkVBOUQ3NTMwNEY5RTRBNEYzREZCNTZGNAotOjEwOTQ3MDAwRTNGODE4QkY4QUM4MEFEMjQ3RDVGREVBRTlBODhGNUU4QgotOjEwOTQ4MDAwRkE3RjFGNURERDgzNzAwRDQzNTcxQkYxRkQ2NUQwNTVERAotOjEwOTQ5MDAwRUI0NUU4RUE0MTNDQ0YyMEJBNkFGRjE3QTVBQkE3MkZGRQotOjEwOTRBMDAwODVBRTk0QjkyQzM0NEYzQThFN0ZFNzc5NUM5QzgxRTc4NgotOjEwOTRCMDAwNTlGRTFGQ0U5MzFFQTNEQUQ5RkEzQzY5QzZBQUE5NUM0RAotOjEwOTRDMDAwMDQ2NzQzRTdBMzk2RTc0RDYyMzJDNjk5MkNEQjVFREU2NAotOjEwOTREMDAwMzQ1NkU2RTMwNUZCM0I5OUNFQ0ZDOTc0N0U0REJEN0U4NQotOjEwOTRFMDAwMTdDNjBGMUFFMkY3M0NGQ0Q0RUYwRThGODU1RjlGN0UwNAotOjEwOTRGMDAwRjZCRjQ5QUY3RDdCQTY0MEY3QzlFNzhERkU2QTNGRUExQwotOjEwOTUwMDAwQTBDNTFCOTdBOUYzMENFQ0Y3RkM2N0ZCMzlGMTI3RDgzMgotOjEwOTUxMDAwQUZBQURGNTc2M0Q0RERFQUJEODFDQkYzNzMzMkM3QURBOQotOjEwOTUyMDAwRjQ3REYzRjY2QUU2NDBCODVGQ0NFRkQ5NUVDQkYzQTZFNAotOjEwOTUzMDAwQjVCQzY2RDc0Qjk1MEYyRjlDQzRGM0U5RDBFRkE5RjdDNAotOjEwOTU0MDAwNzc2QUY5Q0FGNUI2NjVBNEU3OUY1NEFDREMxRkFCRjNBNAotOjEwOTU1MDAwNzcyRThCOTM2RkExN0I4QzdERkQ5RDkxRjNGRTAxRkU5OQotOjEwOTU2MDAwQ0VEQkU3QzhEQzRGQTNGMzdCOTZDRTUyRTJFNzBEOTA0QgotOjEwOTU3MDAwQ0ZEMDE5RTM2MEM4RUZGMjZDM0UwMUUzQjVFQzQyMzZBMAotOjEwOTU4MDAwRjk3NTg2RDgwMkY0N0RBREYyOUExQ0QyMDM0NzE2QkI1QQotOjEwOTU5MDAwRDM3MDFDNjM3RUY3RTcyRjRFQTI3QzAzMDcwRUE1RTc2RQotOjEwOTVBMDAwQ0JBMDY3QTZDRkEzM0NCNjdGOEU5RkUwOUZFNUU3RkJFRAotOjEwOTVCMDAwNjhDRUU1REQ5RkZGMDhFMTNENzk4MDdCRjQ3MkUwQjE4NAotOjEwOTVDMDAwMjg3OEZGNzg5RDlEQkVBRkY1RkM2QzU5Q0QzRkU4NEVFNQotOjEwOTVEMDAwNjk4MUZBNzdFRjNBNzMxMEZEMTNCRTM2MDNDM0ZCNkQ1MgotOjEwOTVFMDAwOTdFQTNGNkFCODg4NUU2Q0Q2RDk0NzVCN0FGNDYyREY0NwotOjEwOTVGMDAwMUI1MzgzRjRFMjg2RjVDRTdEQTdDMzhDQTNFOUM1QkJEQwotOjEwOTYwMDAwNzRGRUEzNzIxQkQ3OEJDQjZEREQyNkI0MEZDQUUzQkZFQwotOjEwOTYxMDAwN0UwNUYzNEU4RDU1QUMwM0U1RTIxMEE1OUFGNEUxNDRDNgotOjEwOTYyMDAwODk1MTNFRjFGRjhGQ0JCMzdGNjg1Q0ZFRkU3OUExNzE1QgotOjEwOTYzMDAwRjkwOTZBM0UwQUYyNzhGQ0ZFNEY5N0U2NDc5REM2RjVBNwotOjEwOTY0MDAwODY4RDQ2NkVBRjc4MTU3ODE3MjY4RUFFOEZDQjBGQkZGRQotOjEwOTY1MDAwQjA4N0UyRjJFRDdCQUQ3NDhGNkZDQkJFNjYzRTVFMEVERgotOjEwOTY2MDAwOTMzMENGM0M5OUE5RkE1QTExRjc5N0VBRjU4RkM3NEQ3NQotOjEwOTY3MDAwOEEzNTZEMTJFMkJCODFFRTEzRTIzRDQxRjI4QkVDQjUwRgotOjEwOTY4MDAwNkU0MzdGRDM3ODNCQ0ZFN0NFN0Q2N0YxNEVDQUU3RDZGNgotOjEwOTY5MDAwRjQ0M0QwNDM0OTJGMkUwQkQwNzc5OUNBMjUwNzIzQkUxOAotOjEwOTZBMDAwMTMzRkNENEZGMUYxNUE4MUYwNkJEOTNDNEU2RjRCRjMyNAotOjEwOTZCMDAwN0RBNDFGMEUyOTkzMDQ3RTRGQ0NDM0VERjg1NDFFNzc3MgotOjEwOTZDMDAwOEU0NEZDODJBNjYyMjY4RkZCNEE0NzQ0MDdDNjlERUY2NAotOjEwOTZEMDAwQzNBNkQzRjFGRTJBRTNERkFCOTg2RUEwQkY0M0QxMkUyMQotOjEwOTZFMDAwNzQyNzIxNUY2RTE1OTQ2NDdDODJDRTQ0RjcxRTlGOEQ5MwotOjEwOTZGMDAwNTEwNkUzREY5M0FBNEYzMUQwREY5MzNBNTREMDk4ODREOAotOjEwOTcwMDAwRUI2QkFBNkI0RDQyQkRGMDE1RDUyRkRFNUFGMDA5RTU4MwotOjEwOTcxMDAwM0Y5OEM2ODMzRTk4NDZDRkIwN0Y3N0Y0QzFGOTgyRkE2RQotOjEwOTcyMDAwNzcwNDNCOTJFODdCMDhBQ0U1NDNDMkFCNEMzM0UzN0Y2NAotOjEwOTczMDAwRTdDN0UxNUY4RUY0NzREQTQ2RkFDMjAzODI4RkRGMTM2MwotOjEwOTc0MDAwQjI1QkU5M0U1RUNCMTg3MzcyMjVBQ0E3RDk2RTI2NkQ2RAotOjEwOTc1MDAwQzIzQjY2RTY5MTM0NzhERjlDMjA0NTYzMUNDMDlCOTYzMwotOjEwOTc2MDAwMkVBMUZGQzgxQkQzRjgzQUZBNDE5QUQzRDIxOUU2RkJDRgotOjEwOTc3MDAwMzc5NTREQTFGODc5RDMwNTYwMzBEMEIzN0VFQ0E4Nzc0QQotOjEwOTc4MDAwMjdDM0ZCOEQ0MjgwQkUxQkU0OTk2RTYwOTg0RkQ4MzY4QwotOjEwOTc5MDAwNjY2NjcyRjBCRDRDNTFEMkNCNDkwN0M5MDU1MTM2RDAyRgotOjEwOTdBMDAwM0QzRjUxOEQ2NzhCN0RFMkQ5QTFGMUU5NDlFQUJFNjU2NAotOjEwOTdCMDAwRDZCMjg4RUU4MUM2OUIyNURDNkZGOTk4OTIwRkU5OUVBMAotOjEwOTdDMDAwNUJCQzk5RjI4MkNBNEQ4QzdGRjc2MzBDQTM3M0QxQzM0MwotOjEwOTdEMDAwQUY3RTdENjg1Q0MxNjgwQjVEREY0NjBDNEM1MzFFRjZBNgotOjEwOTdFMDAwOTY5NTg4MUYwRDA4NTNDQUUzQkU3NzI1RjJBNTg2OUU3RAotOjEwOTdGMDAwRkE0NjVFOEVFMEU1QUZFN0Q1QUQ0NDM5MjgzM0ZFRjc5MwotOjEwOTgwMDAwNDkxQTMyNzlERTY1Nzk0MjA5RjFFMTcyNTMyMEVDNzcyOQotOjEwOTgxMDAwN0UyRkI2MUU5OUY5MTQ3NTNDRjYzRjM5REVDNjMxRTY0NwotOjEwOTgyMDAwNDVCRUYxMTcxRkFGRjc1QzQwN0RGRTBFRTM2QUVERjQxNQotOjEwOTgzMDAwRTNFQUZCRkQ0RkI1RUY2RjlGODlGM0I1QkM3QTQ2NzkzQwotOjEwOTg0MDAwMTBBNDIyQUFGN0Q5NTA0RjM2QUFGQ0IwM0U3NzhBQ0Y4RgotOjEwOTg1MDAwMkYyMzNGRjA3MEJBODgzMTg0Q0RCM0VEOUYzRTgyQzY4RQotOjEwOTg2MDAwRTc0OUJEQzQ2RjY5N0NGQ0Y2NEM0REExMUZGOTIzQkVDRQotOjEwOTg3MDAwMkY0OUVBQTU5QjlFRkMwQjc1M0NBODdBMTVFNUMzRDYzQgotOjEwOTg4MDAwRjk0MkNGQkFBNUMxQkRFM0ZFQTYyQ0RCOEY3NjFDRDg2QQotOjEwOTg5MDAwMTk3MjlDMjMwQ0ZEQTk3OTFBRDQzRThERjI2RDI4M0ZENAotOjEwOThBMDAwODY4RDY1QzQ0N0I0RjY0Njc1NUU3RERFQzY2RTE1MkY5RgotOjEwOThCMDAwMkUzNzZGRTMzNEVFNjExMkM5MUFCMjA3QkRCRjZEQTEzNgotOjEwOThDMDAwRkMyNTg2MUZBMzQyRkY1Qzk2NDRGN0UxRUVENURBRDk2QQotOjEwOThEMDAwMTlEOTcxREEzOTQ0QjBERTFGQjREMzkyQjQ4MkNDNDZDMAotOjEwOThFMDAwRTIzREMzOERBMzI3RDBERkE3N0M3NEY3ODMzRkMxRkM4MwotOjEwOThGMDAwOERDRENGNkNGODIzM0UyMzQ3NEVCODdGREEyNEJDNDc4QQotOjEwOTkwMDAwNkY3MEE4QjlENDY0M0Y2OUY5MzRCNjdGREJGQzM1RUFERgotOjEwOTkxMDAwQTlGQTdDOTVDNkYxMkI1QUU4Rjg4MkNGMzExREZGMkVBQgotOjEwOTkyMDAwQjJBMEEwN0ZERjYyQjM2REE3RUZGOTU4MDVCMjFGQzRFNAotOjEwOTkzMDAwODcxMjY5RkQ0OTk1QTFFN0RFMkUyODFGRTA3N0ZGM0NERAotOjEwOTk0MDAwRjcwOUM0NDcyMzFDQTFGOTM3N0E3QkEzQTlFNzVDNDMzNQotOjEwOTk1MDAwRUQ5NDA3ODRGMDcxRUZEN0U2NzMzOTIzRUFFRTg5QjYwOAotOjEwOTk2MDAwOUE2NEZBOEU2REVCNDYxMTIzOTlBQzc1OUQ4NUY4RDlGMgotOjEwOTk3MDAwRUZFNzJGNTk4OURGMTlCRjAzMTkxRUQ0Qjc1RjYzQTYxQwotOjEwOTk4MDAwQkY2QkQ1NkU5N0FFNUI4NDY1NTU5RTY5NzFFNjA3QUU3OQotOjEwOTk5MDAwMThFNTBCRkVGQjQ3QUZBMjlDODVGOTVBQUUzMTkzM0MwQwotOjEwOTlBMDAwNjBDNjZFQ0E2M0Q3REYwRkVGNjM2N0U5RjBFRTYyNzhENwotOjEwOTlCMDAwNzZDM0ZDNTgzNURGQzA0NzcyQTVDN0JFMUY2REUwRjcwMAotOjEwOTlDMDAwQTA0NzFCRkUyNUVFNDFCQkU3ODdCN0VGQkZFRjNENjgyMQotOjEwOTlEMDAwOEFFQjI1RjRBNTVGMkRGRjZGNDM1NEVBNjJEQzdGQzM1OQotOjEwOTlFMDAwMkMzMzdEMkZFRTcyRURERUQ2NzUyQjQ5NUU3ODZFNjVEOQotOjEwOTlGMDAwOEUwQzQ3REZCQzMwRDc0QjIzMDk3RkM0MjY5MUZDNzEwNgotOjEwOUEwMDAwQkRGOEM1RUREQTVGQ0MzM0Y1RkM5RDE2NkIxMDlGRDQyNQotOjEwOUExMDAwRjI4MjFFNTJFRjE1M0ZFNDZBQTRGQzE5QUY5M0RGMkJDQwotOjEwOUEyMDAwOEU2ODU5NDlGNjcyMkJFODYxOTg1N0E1RDlDNzI3QTdDMAotOjEwOUEzMDAwQTU0RjExMjhFRjQ3RjFFMDc3M0Q0RUU2QUE3OTQxNTI1NAotOjEwOUE0MDAwNjg3RTBCNTNGM0ZCQjRGOTVBQTdBNUQzN0M1RUI0Qzc2OQotOjEwOUE1MDAwMDdDMDAzQTM1M0NEREZEMzhERDdDM0FGRDFFRTBFQjI3MgotOjEwOUE2MDAwOTdDMUVFRkVEQjdDRDhERkZEMzYwNzNBRTNBMEZFNjU0QQotOjEwOUE3MDAwQUE2NzkzNjIyRkU5MUU2ODE3RkUwQUVEN0U1MEFBRDBFRQotOjEwOUE4MDAwOUY0OEY5REYwQTU1MUNDRDAwODAwMDAwMDAwMDAwMDA0RgotOjEwOUE5MDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJBRDNCMEQ3MDU0RDU3QgotOjEwOUFBMDAwQjlERkZERDlCQjFCQjI5QkRDMEQ5QkI4QzExMDZGMDJBNwotOjEwOUFCMDAwRDEyMDNGNUUzMDQ5MTNDNTcyRjMwMzI0NEFFRENEMEYyOAotOjEwOUFDMDAwMDlCRTAxREVBMjY4NzFFQ0Q0QURCNUJFRDAzQUNEQzVGOQotOjEwOUFEMDAwNkM0ODg4MDg0QkM0MDY1RjFEOEQ1NEZCREFCMUQ1RDRBMQotOjEwOUFFMDAwRDdENzg3OEVFRDVCOTBFN0Y4NEZEQURBQUEzMzNFMUJDMwotOjEwOUFGMDAwRDFGMkZBM0E5RDM3RTk2QkIxRTk4QzJERUZGQkJFNzNEOQotOjEwOUIwMDAwMkZEOTVEMzY4MDk0MzhFM0UxREM3M0NFNzdDRUY5RkU1MQotOjEwOUIxMDAwN0ZDRUI2NTVENTNBRjkxMTgwRTM1MDA4MEFCNjFGODVCNQotOjEwOUIyMDAwQ0MzNTYxMDA3OERGNjcwNkNDMjUwMEE3RTg2RjE1NDBDQgotOjEwOUIzMDAwN0ZEMjA3MjlFQzgzNkEwMjYwQkIwRTI2Mzc3NUUwN0M3MgotOjEwOUI0MDAwNThFODgzMjdCMTUxMjJDQkY5RkJENjkwQURDQTQxODBBQQotOjEwOUI1MDAwMTJCQjEyQTA3ODY2N0QxQkVDNTdFRkMyRjFBQjdDNjNBMQotOjEwOUI2MDAwMkQ1MDAzOTBEODBBQkE4MzRCQjY4NDkyMkFGNTU3MDMzNgotOjEwOUI3MDAwMzg4MDFCQUYzNTFBMDMxNTA4QjdGNTA1REEwODYwNTVBQwotOjEwOUI4MDAwNzgyNDAyMzJDMEIyRTcwRjk0QzU2ODdGQzdGQTc5NzVBRQotOjEwOUI5MDAwMUREMDU0RkU1QkVDOUZCMDlCNzE3REZGMUI4QTc5MUYyQgotOjEwOUJBMDAwN0ZEMTBGQzc3MEJEMUE1NTYwMTgyMTQ4Q0ZBQzhDNEVCRAotOjEwOUJCMDAwRTI3OUQ0RTA4OUY3QTAwMEUwQkEyOTgwOTY4MDU4N0I0QQotOjEwOUJDMDAwOEFFMDRGMDdBMEE1N0FBNkRGODg5MEQzRkJDRDgxRDI4QgotOjEwOUJEMDAwOENGOUFCRjU4QThDNzEwNTJDMzMyNUUxQjlBMzhCMzI1NgotOjEwOUJFMDAwRTY4NTZBNkI3NDNBNkY5QkIxM0NFM0ZCMERENTBEMTlBQQotOjEwOUJGMDAwRUJBMTQ1M0QzRTg5RkQ5NUY4REZBOTRBODIyN0ZBM0M1NQotOjEwOUMwMDAwNUUwMTEwNUM4MkZEQjRGNTJBQTRGNTcxRkMxQTNCMTRDOAotOjEwOUMxMDAwMzlCMTE4M0I5RjgxQ0Y5QzUyODgyRUU2MDYyMEJBODAyRQotOjEwOUMyMDAwNkMzRTg5NzgyOTc5M0UzMDk5OEZGODAzQ0IzMjIyMjUxMgotOjEwOUMzMDAwODgwRjFBMzIwMEJFNkNFM0UyNUFFQzA3NEZDODg0RkY2QgotOjEwOUM0MDAwNDdGMjcxRUY1MkM0QjMzRTI5MTM5RDQwMUY5N0Y4M0I3MgotOjEwOUM1MDAwQzBGODMwMjIzQkFBNUEzQzBGQTJBMDI3NzBERUE1RTAzNAotOjEwOUM2MDAwNDgzQUY2NDM1MTQ4NTI3RjNFMjQ3OTNFRkUyNTFGNkMwOAotOjEwOUM3MDAwNDBCNjA4ODhGNTA1MUQ2MEVFQzVGMUZDMjU4RTI0NjEwRgotOjEwOUM4MDAwQkZBODE1NEMwNUUxMDVDRDA5ODlDRUE5RTM3QTA1RjlGMAotOjEwOUM5MDAwQTAxNDUyREMyRjZCODU4OTdFODY2RkRENDdFQjRCN0JGMgotOjEwOUNBMDAwNDExRjI4MjVCMDBFOEY4RjZEMDQ4N0NFRjMzODk4RTBDMgotOjEwOUNCMDAwNTcwODFGMzZDMDAyMDAwREUyREM1RTA2NDYxMTIyMTE3NQotOjEwOUNDMDAwQkUwREU2MEFFQTU3QzEyNDIxMTVBOTNBMjY1MUZGMTIxMgotOjEwOUNEMDAwMThEN0E5MEY5MDAyN0IyOTM2OTM2QUY4NDQ4MEE3MDAxMQotOjEwOUNFMDAwRjFBOUM3QUZEOTJERUQ3NEMyQTMwQjRFMUVCRkQxREFCNwotOjEwOUNGMDAwNjYyMzdGNzdERjU0NUIxODBCQ0VCRTRFRUQ3RDcxQkNDMwotOjEwOUQwMDAwRTVFQTk5RkVCNzZEODNFNTQyRUQ1RENCRjJBMkY2QkVDMgotOjEwOUQxMDAwQzRFMzQ3NkRGQjJCMzZEMjYzMTlDMjBGQUNGOEY0RjhERAotOjEwOUQyMDAwNUZBNjA5N0MyNjI0MzAxRDlDOUY3OEVFRkFFODE2MUM1RAotOjEwOUQzMDAwNzc5RTBCOTg1NTQwRjg0NTdDMTI1RkQ0MDdBNjVFNjk2NAotOjEwOUQ0MDAwMTBFQjg5MUUxMUE0MDdFMUJCNjgwOTQ4ODQ4M0Y5NDQxQwotOjEwOUQ1MDAwMDdGQ0FFMjExRDc2MzExRDkzMENCNzNDMEVFNjBFNzc0NQotOjEwOUQ2MDAwNUZFQTk3MjIxRDg4MkU2M0EwQ0YyMUJDMkFGMTRGNDdCRQotOjEwOUQ3MDAwMDdGRTQzMzg5NzFDMEEzQzNFMkMxMTc2OTEyRTBCMkU4MQotOjEwOUQ4MDAwMEE1REJFNzUyMTc0QzlBNjA3REMzQjE3QTBFMTZDRkIxOAotOjEwOUQ5MDAwM0E0Q0M3NkY0OUE5M0M2OTAxOTEwNUU5ODNGNzkxOTA1NQotOjEwOURBMDAwM0U4NENGMjgwODdBNjgwMDI2RTEyOTE3RkVBOTlGNTcyQwotOjEwOURCMDAwMDNDNjdEREMxN0YzODk5RTRFQzMwQ0ZGMTcyMkZGOEI3MQotOjEwOURDMDAwQkU5MEFGMzBEMjQxRjQwNTlEMjIyNDJGRDg4RkRBRTMyNAotOjEwOUREMDAwQkNCRTY4MkJEODBGOTQxMjNEMkM0NjlFMEY2MkRDRkE1NQotOjEwOURFMDAwNjE0QUEyQjY1MjMyOTk1RTBCMTQ1QkE2N0VCRTk0MTJGMwotOjEwOURGMDAwNDg0NjRBOTIzRTI4MDA5REU5MzMwRkUyREM0NjdDNTNGOAotOjEwOUUwMDAwODc0RjkxQkUwRUNBNjM0RTA1QjVDRjM2RDIzRUZERUJFRAotOjEwOUUxMDAwNTBDMzkwQ0EwRjhEMzQzMjVGREUwRTdBMTVGMjVEQjlGMQotOjEwOUUyMDAwNjZCMUZFMkVCRjUyMzUxRDIzMUQ1RkY3MzE3QzMwQUM2RAotOjEwOUUzMDAwMDM2NDZGQ0FFNTEwMENEN0NDRUM5QkYwOTlEMTI0RDIwNwotOjEwOUU0MDAwRUI1OEU4QzQ5MTE4N0U5RjUzQUE4MERGOUNDMUYzNzE0MAotOjEwOUU1MDAwOUZCODFGQzE1NDJFMjU3OTEwRjIxMUFEQzdCMzg0Q0YxRQotOjEwOUU2MDAwRDQ2RjUxNTVGMDZENzAxQkUyMEZGMUIxOTkwNjEwNEY5MAotOjEwOUU3MDAwRDJEMEJGRjNGNzQ3OUE4NUJFRkJBRTFERkI4OEY4ODVBRAotOjEwOUU4MDAwRjQxM0UzQ0YwMjlERjQ5MzZFMDJFQjRERDk3MDdFNDM0MQotOjEwOUU5MDAwNzZGMUU0OTBERjIwM0U4NUU0QTgxNUMwN0RCNkI4RkJERQotOjEwOUVBMDAwNkMxOUYyN0YyMDE1QTRERDMzRTE4Nzk0QTc5RjJCNjlGRAotOjEwOUVCMDAwQkQ1REM4RkM2QzRBMTBBODNCRkY3NTE3Q0FGRkQwNUI5QwotOjEwOUVDMDAwNENDQzc2NEVCRTZEN0M2NjY1RTFFNDkyRDlFNzY5MjRBMAotOjEwOUVEMDAwMUY3M0QzRDcwOTNBNjkxMUU0QTcyMDhEQkZDNEUzRTcwNAotOjEwOUVFMDAwODJFM0VCM0Q5QzIxNjcxRTFDNUZENDY2MzhCRURFQTM3NwotOjEwOUVGMDAwNDJERUM4NkUyMTNENkY0M0JCMzU4Q0Y4RkU0NzRCRDcyMQotOjEwOUYwMDAwMDQ1RjRFRkQyN0Q5RjM5QkUzMDUyNkQ5NzM0NjExQ0U5NgotOjEwOUYxMDAwQkIyNTI5OEQwRDIzM0ZERTBBNzE4REY4NTQ4Mjg1MEVGNQotOjEwOUYyMDAwRDE2RkIzMjM5OUMzMzhBNTcyRDdENjAyRjYxN0EwNDVDRgotOjEwOUYzMDAwMjdGQzQ4QTk2Qjk1NTM4QjNGMDUxRTVEM0M2RDRFRkQ3QwotOjEwOUY0MDAwOEZDRjA4MTE1RTQzRjBBMTM3NUUzOTMzRkVDNzhEMEIwQQotOjEwOUY1MDAwOEVENTFBQTRCNDgzRDU0NERGN0M5N0JFQTg4OTlDRDczQwotOjEwOUY2MDAwRjA5Q0JFNEYwQTYxNTg0N0VFQ0ZGRkM2MUJBQkYwN0M5QQotOjEwOUY3MDAwMDNCRjUwNENBNTgyRTY2OTYwMjFCQzM5MjBFQzc4M0VENQotOjEwOUY4MDAwQzlFOTAyRTI5N0YxRDQxREM0NkZCRDg1M0FEREQ3OUJDNAotOjEwOUY5MDAwMDdFRTNDMDc2MjE2REQzMzFGRjUwMEMxOTVGMzc3MzNGQQotOjEwOUZBMDAwN0ZFNjE3Njg4NkMyQ0M4RjFBMjdGRDFFMDFFNEJCMTIxQwotOjEwOUZCMDAwNDYzNUZGMTU2QkE5MTRDOTU3NzE1M0MwREM5MTA5NUY3MQotOjEwOUZDMDAwM0E0NUVCMTEyNjk0QjhGNzkwQ0VEQzdGMjlGNTAzM0M5NwotOjEwOUZEMDAwRDQ3OENBRERDRjBBQTRFRDk3RDVGNzQ1RDNGQTIwQzZDOQotOjEwOUZFMDAwOURGNEY5QTYwNkE5MzRCQzlFOTYxNzU3Q0VCQzczMDdGQwotOjEwOUZGMDAwODM1QUE2QkM2NEFERjNFOEIxQzQyN0Y4NjM1RTE5OEMzQwotOjEwQTAwMDAwRURDMEYzMEUwRDFENkMyNDdEMzM1QTBDODYxRjg3MDZBMAotOjEwQTAxMDAwMzc3RjQ3MDI5Q0RGNDRCQTk4RUM0RjBCOENGOTI1REE2NgotOjEwQTAyMDAwQzcxOEFFQzZCRUFGMkNDOEZDNzNDOTZGRURENDFEMDhFRgotOjEwQTAzMDAwRTcwQkY1N0VERDQwOUNDQ0ZCQkRBNTM3RTJGODZENjVGNgotOjEwQTA0MDAwMDFEMzQyRkEyNkRDRjk0RTBCRkE1OTYyRkI1RjkxNUZBRAotOjEwQTA1MDAwN0FBQjdCNUVBNjA1Q0FFMUJERURDMkNGNTJDMzVEM0JDNAotOjEwQTA2MDAwNUZDM0Y5RkJFNjI5QTA5MDVFNTMzNjlBNjQ5RjZFNTU1NAotOjEwQTA3MDAwMDFFNjE2NjE3RkJGOEZGRDNFRjRFRkY4M0VGRTk2NEM4MQotOjEwQTA4MDAwQkZFRkI2NDc3QzE5N0Q1Rjk2OUZGOEY1NzZGNDAzODk5QwotOjEwQTA5MDAwNjhBRTFGMzhEMDBFQkMyRjlENjdFRThBQkYxRjNFMDRFRQotOjEwQTBBMDAwMjNBQzNGOTdBQTEzQjI5RUMzQUU3QUY4OTc5RTA5MzJBQgotOjEwQTBCMDAwRkU3RjUyOEM3OEE1NzU2MDVCNzc2MkRGOEY3ODI0N0U5NwotOjEwQTBDMDAwNDU0NTVENTA4Qjc4QjJFODlGMDZGOUM5M0ZCQThCRTZFQgotOjEwQTBEMDAwRkI0RjIyRkZEMjdDMjVEODcyMjdEMUUxNTIxNzRGMjBBNwotOjEwQTBFMDAwQ0U2NUUxN0Y3NEVFNkM3RkQ4OUZFNTBGNjc5RkRCQTNBMQotOjEwQTBGMDAwQzM2MzFFN0VFQUEwOEVGMDgzRkUzOUZCMDdERUJEQjI4RAotOjEwQTEwMDAwRUZGMzQyMUY2QTBFRTRBNTlGRjYwNUI4NERGNUU5RENCMgotOjEwQTExMDAwMUVFOThCNzI3QkI0Q0Y4MDE2NzRBQzVFRUFBQkU2RjZCOAotOjEwQTEyMDAwRTUzRTkzQkZCRkRBNTdDRkFEODc4RkQ5RjQ0REE4NTgxRQotOjEwQTEzMDAwNjY3RjYxREZCREYyMTgwOTkzQkE0NDdGRTUwQUUyREI2RQotOjEwQTE0MDAwQjcxNDU2MUYzQTE4NzlFQTAyQjY0M0EwRTJCQ0NCNUFCQwotOjEwQTE1MDAwRDUzMThCRUVFMkM2M0Y5N0I4N0NCNkQ4M0Y3NUQ4OEYyNQotOjEwQTE2MDAwRUI5MkE1NjBERTQ3MEJEMTZFNkZBRDk5ODk3RkFFOUJGOAotOjEwQTE3MDAwOTI2N0U0MDQyOERFOTkzMzYzNjc4MEUyOURCOTE5RkQ5NAotOjEwQTE4MDAwRTZDMEE1MTlGMzU3RUIwQjMyQzYzREZBM0VENjI4RTREQwotOjEwQTE5MDAwNjY2RDc0NzFDNkZDN0QyRDREQTkyRjkwNUZERkUwRDdGMQotOjEwQTFBMDAwMTU5REUyOUZBQjMzQzY2RkE4QkUzNjAzMUUyOEVCNEM0RAotOjEwQTFCMDAwRDJEMzQ1MUJEM0U4QzZGN0NGQTRBQkI2RURFQzcxOTA3NAotOjEwQTFDMDAwNDdFN0Y3REEzM0UzQTFEOUU4OUJDREI3MUU1RThCNEVBNAotOjEwQTFEMDAwRTM1NUM0OTUwOThBMkIwREJBRjcxMjY5MEI4MkRBNzMxRAotOjEwQTFFMDAwREEyRkIxQzAwRUNERUNBQkQ2NjM3Q0I5RUNFMkM3OTdFOQotOjEwQTFGMDAwMDUxNDVGNTZFNDhBMkYzRkQyODk3RkNGMTk1RkI2NjY3OAotOjEwQTIwMDAwQzY5NzA1NTk3ODNCNTc3Q0E5NzU2NEVBOTVGM0M1RTc2RAotOjEwQTIxMDAwRTZGMkY4MUJCNTE0RUZCREFFQjAxRkE4QjRDNkQ5RkU2OAotOjEwQTIyMDAwQ0Q5RDUwQ0NCNTA4QjdEOEY1Qzc0MjI0RjMzODZGNzMyRAotOjEwQTIzMDAwQURDNkZFRTUzRTk4OEM5MkREREYyQjIxNTY5MUZGRTdGRgotOjEwQTI0MDAwMkUzMTRCNDlERjNDMURCNjRBNkVBMjM4QkY0RDM2MEY0QQotOjEwQTI1MDAwRTI5MjE3MUJCRjE5MjVCRjYzRDc4RUM3QTM2ODk0NjAwRQotOjEwQTI2MDAwNTE4N0NDRkIyNjFCNEY2QzIyQjk1MjBERjRFMzI0NkVCMAotOjEwQTI3MDAwQURCMTFDRkU4OTM3RkZBQjAzM0VCNjAzN0IzNzY5NjM4NAotOjEwQTI4MDAwMTJDRURGMUJEMkJCMzc1MERGREQwNzExQzJGNjc2QjQyQQotOjEwQTI5MDAwRjZGMjMxRjJGRkFFRUMzMDA0QkY4MDEzMjVGQTNGQjg3RQotOjEwQTJBMDAwQTlBRTk0OEQ5NDhBRkRBNTM0REQ2NDNCM0UxQzMyQUQ4RAotOjEwQTJCMDAwNUI4ODdGN0UxMzA0MDczRjNEMjBFOTA1MTJEOThCNEQ1MwotOjEwQTJDMDAwQjJGRTI0REU3M0I0NzVDNUJCNUJCMUJGMkJBODk5MjQ2NQotOjEwQTJEMDAwRjA4OTcwNUQyOUYxOTdCMjE5REQxRUVDOEZCNDhFQkM0OAotOjEwQTJFMDAwNENFQkQ1MkE5OUZCODk0RDk3MUYyM0Y3NzlCNDU4NkYwQQotOjEwQTJGMDAwQUJBNDM4NkY3NTI1NjExQTk0NDM5RkY0NTE1RTIzMTEwNgotOjEwQTMwMDAwM0UxMUE1RjVGREQ3ODhGNUIzRDE0N0QxRDNFQzM5NzAwRgotOjEwQTMxMDAwRkU4MkNGQUIyQzk0NTMxQUMyNTE1RTM4RjE1NzgyQTdGQwotOjEwQTMyMDAwQTREQjcxRDZFMzk5N0VDNTcwNThBMzIwMDFENkZGN0NDQgotOjEwQTMzMDAwRTFGNzFDOTU1NEI5NjUxMTFENDc1MUU2MDk0RjlCMzc0QwotOjEwQTM0MDAwNzUxNDUyM0NCNUQ5Mzc1OTlDQ0I1RTBDQTA3RTRENUQzRgotOjEwQTM1MDAwOTFFNjZGNDYzMkZEODQ2Q0Y4RkM1NzQ3RjhDNTNGNTlDQgotOjEwQTM2MDAwNzQ4RDEyMzc3NEMxQkZDNDhENkJDNjUyODQzNzQ4QjYyMgotOjEwQTM3MDAwNTY1MkRDMUIxNDc2NzkzNjNDQThDMTRDM0M3OEYwMTk1NwotOjEwQTM4MDAwMUVGRTRGRTlDREIzRjJEMkYwODBENzRBOTFCRjczNDc5QQotOjEwQTM5MDAwODdDNEY0RkYyMkYxNDFBRDM4MDZDNTFEREVCOUQ0NTY5RAotOjEwQTNBMDAwOTlENzc5RkEwMUY5NzhDMzM4RjE4NzhCRjcyODlBMEM5NQotOjEwQTNCMDAwOTI0M0VGMUM1Rjc1RTFERDczOUFBRjcwNkE0OURBMzkzOQotOjEwQTNDMDAwNTY2QTJFM0M5M0UzRTJBQjM0MjE1N0YwMkJDNTdDRDI4NgotOjEwQTNEMDAwQzg0MTI3RDc3RkUzRjUxNTMzRTNBQTdCRkUyQjBFNjgzMAotOjEwQTNFMDAwMTlGQTc3ODhGNkM3N0JCQ0JEQjFGM0FDRjFGMkEyQjEyNAotOjEwQTNGMDAwQ0M3NURGRTkwMDNFRUY5NThBNzVFNDA0Rjk1MjU3Qzg0MQotOjEwQTQwMDAwNjM0RjIyQThDNTU3QzgyQ0NGMjdEMUZGMjJCQjM2MUJDQwotOjEwQTQxMDAwM0M4RkZFMkM2MjI1Q0M1RDQwN0VEOUNFNDgwN0YzRjlGNwotOjEwQTQyMDAwNkNFQkI0QjEwOUFCNjIxOUVEMEJGMTcxRTRBRjQ1RDEzRQotOjEwQTQzMDAwQ0M3Mzc5RjNCRTczRkE1RTVGODEzOTc0MUU3NEM4QzkzOAotOjEwQTQ0MDAwMUVGOUM3NTIxNkU5NjkzRkMyOTFCMEFEN0VGQzZFRkRBMAotOjEwQTQ1MDAwNkNGN0Y2NDMxQTdDQzRFNzQ3OTJEMDU3NEUxOEY4QkUwMwotOjEwQTQ2MDAwODk3N0M3NTg3RUUwRDBENDg3MjRERjg5NDUyNUM2MzA1OAotOjEwQTQ3MDAwQ0IwQjQ0MTdENjkxM0YyMkVFRTVDQkEyRDM3MDlFODA0MgotOjEwQTQ4MDAwMzNCMjVDRjhBOTIzNkVERjU5MkFFMDQyQkE5Q0UyRkFBMwotOjEwQTQ5MDAwM0MzN0FGRjI0MkM3MDJDNkJCNDY3QTg2ODhBQzVBRTU2MwotOjEwQTRBMDAwQzQxNzQxRjU4NzhFOEVGQzMwMjdCODBGQzJEOEZBMjMyNwotOjEwQTRCMDAwNUIxQzZBNTc5NTFCN0JFQUYxNUMyMzhCNjRCNjYzMjNCNAotOjEwQTRDMDAwQTFEOEUzMDNBNDg3MTYwNTczQ0FDNzZCQUU1RTFDMjIyRQotOjEwQTREMDAwQkVFNUY4MDkyQzk5RTQ0RUYyODQwNDYyMzJEMjZCOTQwMgotOjEwQTRFMDAwMzkxRkUwRkQ4RUIwQzg2N0U5QzlGQTlCMTE4RjZGQkJCOQotOjEwQTRGMDAwN0M4MUY3RTFGNUQ5RjBERjNEMTNGRTEzQzRBRjA5MTdGNgotOjEwQTUwMDAwMzhDMUQ5ODI3MDdFRURDQTA1OTA0MTI5NzFFMzNFRENFNQotOjEwQTUxMDAwMkY2MDI0RUJDOTVGOThFQ0QwQzVCOEJBRENBNEZCOEZFMAotOjEwQTUyMDAwODQ3M0VGMzdFOUVFNjdDOTcxODlFNjVEQjI1MUFDODc5NAotOjEwQTUzMDAwODA1OEI3NTc5QURBNzA1Q0QwOTNFNTg5RjZBN0YxN0MxQQotOjEwQTU0MDAwMzM1MzNGNjRDM0NEQUJDRUQ0NTc1QTU5RTZGQ0ZGNzVBNQotOjEwQTU1MDAwRjkyRjNCMUU3QTQwQ0E3RENFQzI0RTcxREY1NUU1QzA1MQotOjEwQTU2MDAwRjY4OEY4RTJCRTFDN0M5MTJERUYxQUU1M0YxMUVFREY3NAotOjEwQTU3MDAwODgwRUJDOUZEMDNCNDE3NUEyMjlCRjg2RUMzQjk4RkQ1RAotOjEwQTU4MDAwOENEOEMzN0NERkZCRjI2RkU0Mzg3OUUwMDY5MUU3RDAyQQotOjEwQTU5MDAwNTRBMUI3Q0IzNjIwMThCNEM3RjY0RjVBMUNFQTJCNzcxNAotOjEwQTVBMDAwODNFRTBGOUY4OTg3NEYxQkVGOTFCRDcxRDJENjg3M0JGQQotOjEwQTVCMDAwODFDRkE5QTRDNzgxNzg4RkE0Q0ZCODkxRjY0REVFNTI3MAotOjEwQTVDMDAwODBGQzgwRTQ3NkZGODY1Qzc2QkJCOEMzRTdFOTVEOEVFRAotOjEwQTVEMDAwNkI1NTk3MkZDMEFDMDAxOUQ3MUY3ODRCRTFCQ0MwODFEOQotOjEwQTVFMDAwRkE5RDFDMTcyNzZDQ0Q5MDJBMjg0RkYxMDg2Q0M3RjFGMwotOjEwQTVGMDAwM0Y1QTMyRkJBREJEODdFRUZERjVBQkI4RUM3ODRCNjU0RAotOjEwQTYwMDAwOUQyNEIzMUNDMUFEMzhGRjM4QzZDNUU0Mzc5M0ZDNjU0MwotOjEwQTYxMDAwRTQ2MzEwQjE4MUJBOTlGRDkyMkQ5NUJDNUYwMkY3OTM2NgotOjEwQTYyMDAwQ0VBMkU3NTQxQkUzRDY2NTY3QzIzQjZEOEZCM0YyMjMxRQotOjEwQTYzMDAwMDMyNUIxREE0RUJDREZCRUEwQThCMzI4NUU3RUE0MkJGMgotOjEwQTY0MDAwNzI1RTc5MUQwMzkyQTk1RUQyMkIxQjgxRjExMDZBMUJFOQotOjEwQTY1MDAwODFFRDk0NEY4ODhBMzhFMzQ4QUQ1RkYwRDc3NkM5OEQ5NQotOjEwQTY2MDAwQ0ZBMDA1M0MzRDg1N0ZFQjM2MUEwRkNGMjVGQkYyOEU0MAotOjEwQTY3MDAwMUZBQTcwQkNFOUE5RDc1NUVBOEY5NENBNzUxNDNGNUYyOQotOjEwQTY4MDAwQTU0RERFN0YxNThERDdGOTU4N0YzNDIyMjU1MzE5RkM0RgotOjEwQTY5MDAwOTFGMkNCNTEzRThGRTZCNjhBNjg1MzEyQjVDRDgxRkM1QwotOjEwQTZBMDAwMEM3REJENUFDRjhDM0ZGNjRDMUY1MTBBODkzRjc1MzA0NwotOjEwQTZCMDAwMjVDNEYzOUU0NkQzMkEyNERENjM0RUY2RDNGNzNEQUI4MwotOjEwQTZDMDAwMEQ3M0Q4MjA3RjM4MzM0RUQ5RDNBNjA5N0Q1QTIxRUM5QgotOjEwQTZEMDAwQ0VDODYxRTM2MUYyQUYwNjdCRjNEOEZGN0NBMDRDMTZENQotOjEwQTZFMDAwRjc1RTA4NjNDNDBGNkQ0NjY2NUMzMzMyNUVCOTZCMjE1QQotOjEwQTZGMDAwQzk1OUQyQzdGOUYyRUY4RjhCRjk1Qjc3MkMxRkEzQjgzQQotOjEwQTcwMDAwNTQ3N0ZERDVBREE1NERFQzg3QzI4MDk4Nzc0M0Y1RTIyRgotOjEwQTcxMDAwQUNGQjRGRThDNDE3QzlFRDNFMjBGQzBGOTZERDNDNDQ2RQotOjEwQTcyMDAwRjlEMDBGMTJCRUFCNDk1QzVFRUQzNDMyRTJDMjJEMDNBQwotOjEwQTczMDAwQjc3MjlENjg0MDgzOUJFOEZDN0IzNjY5Q0NGRjdCOEFCRgotOjEwQTc0MDAwM0YzODcwMEJFOUU5RTIzOThDRTdEMTRENUE2OTJDNEQ1RAotOjEwQTc1MDAwMUVGRUQ2RTk2NzM5MThERDI0RkM4QjYyMTk2MkUzMzlFNQotOjEwQTc2MDAwQzZGRkQ2MjlGNEQwRTc2RTA3QkU0RjAxREE2NTAzM0Y3NgotOjEwQTc3MDAwMTk2QTNDRTUyNzdDOTQwMUZDMzM1RDI3RkFEMTQzN0NDMAotOjEwQTc4MDAwRkY1NjE5QUFGMDg4MjM5MThERUNCRjY1RjM1OUIwQUI0MQotOjEwQTc5MDAwOEFFMTlEQjY4RkY1NzIwNjFFN0Q3RTNCQ0U3OUVFMUI1QgotOjEwQTdBMDAwQzAyMDdERDVEMjhBN0Q4QUVGMzc2QTQwRkNFNjhGREVGNQotOjEwQTdCMDAwQ0RGNzJDQzI3RTFFRjYwM0FENDk0N0M1N0U2MDYxRUMyNQotOjEwQTdDMDAwNkFGMjVCNUZEQ0RFMzM0NDc5MTY3RjQ0RDY4OURGRkNCNgotOjEwQTdEMDAwMUI2RkIzM0I2OTdFOEQwRkYyNzA3QzAwMEMyOTRBRTczQQotOjEwQTdFMDAwNzQyNDIwN0Q2RDQwQUM5NUZDRjU5MUE4QUM1M0RFNjZEOQotOjEwQTdGMDAwNUQ2MkZEMzZEQTdGNUQ2NDBFMTA5RDM3QjdDOUJDREY0MAotOjEwQTgwMDAwNDk0QkUzQTQ1NTMxMzkxQTk0RkYyQTA5QjJERDdEREZBMwotOjEwQTgxMDAwMTc3RkI4MDdFN0JGOEZGNDcyNjBFNjVFODczQTJCRjlCRgotOjEwQTgyMDAwOUU3OTQ2NjZGQzFDODAyNERCRTE5NUQ2QzQ0NkRBNjczNwotOjEwQTgzMDAwNjVCRDQ2MTUwRDM4RDI3MEUyMDBGOUVCQTNCNTdFRDNBNQotOjEwQTg0MDAwOEZFNzFBNkQ5MDE4REYxRkQ3RkFDNkYwQThGMDUzNkQ4NgotOjEwQTg1MDAwNDJBMTdEN0ZGQTMxRjI0NjQ1MkVGOTNEQkJEQzY0Q0Y0MwotOjEwQTg2MDAwREY1M0RGMTEyMDdFRDgwOTEzNUQ4NDFGNjc1QTY2RkIxMgotOjEwQTg3MDAwOTUzREFGQTE0QkQwN0YyN0UyODVGMEVDRTA3OUFCMjg4NgotOjEwQTg4MDAwMkU5QTQyQjk0MkU4RTE2OUZCQkJCNzYwRkJBNTRFOTU0MQotOjEwQTg5MDAwRTc3REI1NTQ3NkE4MkUzNEQ4QTZCMTlDMEM4NjYyNDNDOQotOjEwQThBMDAwMTVENDQ3N0VFNzc4MjgxMjYzN0UxRTI5OERCMDFDN0E2NgotOjEwQThCMDAwRkI4QzM0NzQ1NzEzQkZCQzUxOUJDNzdFRkI5NzNCNEYzNwotOjEwQThDMDAwRENFRTJDNDRGREExRkNGRTVGOUZBMUY4QTk0QzYzN0E0RAotOjEwQThEMDAwMEVGQUVDRDRBQkM0RDc2REMyNUYzQzNBRkYxRTk2QkJGOAotOjEwQThFMDAwODE4RDM3MDNFMTBEOUNGODNCNTRCNzFBQTg2OTYwRjhENQotOjEwQThGMDAwNUVCRTYxNjRCRUM4MjcwRDQ0RUU3MjI4QkY5MUFBMTdFMAotOjEwQTkwMDAwRjkwNUFCRjgyMEU3RjNCQ0JDNTJBM0FCQzcxNkZCRTNEOQotOjEwQTkxMDAwQUY1NEQxQkFEQjU1NTExNzU2Q0ExMkE0MEZGQzk0NTc0NQotOjEwQTkyMDAwQTI3NTZBNjZCRUVCQkFBOUNDMzg3ODVFNTYxQzlDOURBRgotOjEwQTkzMDAwNjc4MkMwQzRDMjRFQjRBN0JGRUJDQ0NDMkJEMTE1NTg5NAotOjEwQTk0MDAwOEU2QkZDMUMyRjhFRDY4QjM4MjhFOThCOTdFQTRCQ0U2QQotOjEwQTk1MDAwOTRFMzM3NUQzRjc4QTIyRjgwMUMwMEYwRjMzRTlERkIwRgotOjEwQTk2MDAwMDVENjFGNzZDQzQ1NTA2RkY1NDVGOUZCRTc1NzNFMkVDRgotOjEwQTk3MDAwQTVBRkRCNTNCMzNFNjBCMERFOTg4QzEyREM2QzdEOTFFQQotOjEwQTk4MDAwQ0QwN0JEOUQ3Mzk4QkUxOEE3MDFEMTc3Q0YxNDMwN0UzNwotOjEwQTk5MDAwNDMwRDJCNTJDNEE3MjdGRjA0MUM4NzdFQjY2NTIyMDhFRgotOjEwQTlBMDAwOTU2N0FFNEZEMTM5RkQ5NEZGMTJFNzNDNEFFN0Y0NTM2NwotOjEwQTlCMDAwRkU0QjlDRUZFNTNFODNEQjU3RkJBQUI5NUREMzA1MjIzNgotOjEwQTlDMDAwQ0ZFRkU5ODNDQjUwMUYyMERFNUFDQTQ0OUZFNDlGRUNBRgotOjEwQTlEMDAwNzA1MUU0NjY5QkY4Q0IxRjU1NzU5MkVGNDA1OTMyMjVCNAotOjEwQTlFMDAwQTVFOTgzRDE1MEZDNURCMkNCODNDNTQxRTZCRkVDNzNEMgotOjEwQTlGMDAwNURERTI1QkI3NjJGN0UxM0MxREQ4MzcwMDlFRjJGNkVFMAotOjEwQUEwMDAwRkZFRjg3MTZEMDNFNkYyOUNDNTc0NTFCQkJCN0IxREU5MQotOjEwQUExMDAwNDFCRDkwQzdGRTg2RDA4N0M5RTIyMEU3MUQ0NkI3NTdFMwotOjEwQUEyMDAwNDk1MUVDNkZERTIxMUNERDczQ0EzREVFMzM4NkVCOEU5RgotOjEwQUEzMDAwQTBCRUE2RkUyMENBMzlERDY3QjBFMTgzM0I2ODlGOEZDOAotOjEwQUE0MDAwRkYzMjg3MkE3QzQ4RUY1RkIxRENCRjgxMDFDOERDOEIxNQotOjEwQUE1MDAwMjhGNzlFOUNCREZFOEI0M0RGMjMzOTMzQzBFRTM5MjQ5QgotOjEwQUE2MDAwRUVDRjdBNzAzNDM0OTFBNEZCMEZGRTUyODE1Qzc4QkIzOAotOjEwQUE3MDAwNTBCQTgyNzU3RTdFQzg5ODNBNzVGODU0MjQ0N0RERDA2NgotOjEwQUE4MDAwMTI3NUMzRkVGMTFGNzFERjU5MDc1MDg1RkQ0NzdENTZEMgotOjEwQUE5MDAwODBGOEUwRDExREYyNTlFQjg2OEZFRTM4N0JERDcwNkNDQgotOjEwQUFBMDAwQkYwQzdFN0RFNjFDOTdDMjI0RTc1OTI5ODRBNzNBRTBCMwotOjEwQUFCMDAwMDAwRDYxN0I0MzU3RUM5NjJFRjYyMzQ1NUREMTY4QTBDRgotOjEwQUFDMDAwOUMwM0Y1RjUzOUU0M0YxRkI1QURBRDNDMUUyOTYyQkJEMwotOjEwQUFEMDAwMUY1NUM3NTM2NEQ3QTM1NDJGMzdFOEZEODJDMzc1NEY2MgotOjEwQUFFMDAwQ0FDRkQyRkI4NUVDRkJGN0ZCMjY5QkY4N0UzODg1RUFDNAotOjEwQUFGMDAwOTVEOUY1NDkyOUY4NjM1MURGNUYyMEVBOTA1RTdENzJCMAotOjEwQUIwMDAwOTkzNjc5RjA3RUMyRDM0RDAxQzY0M0ZGNzNEN0JDNDM1QgotOjEwQUIxMDAwRjUyRkFGOEUxRjc1RUJDMEZBMzZEMDc3ODg3QkRDREI2NAotOjEwQUIyMDAwNDU3MUQwMEJBMjFFMEFEN0UwM0Q5NkQzMjY5Mzk1RUQzMgotOjEwQUIzMDAwNEJCOUJFQjk4M0VFNzFBRUYzOUY2RkRENzA5REFCREY5NQotOjEwQUI0MDAwOTBCOUM3NDg5RTdGRURFMkQzOUJGNzREOTJDNzVBRjI2QQotOjEwQUI1MDAwMTM0NURFMUEwQTM0RDZGMzRENEYwNTQxMjE3RjM5QTQzRgotOjEwQUI2MDAwMUQyNDM5RDkwMjkzQUI0OTlFRkFDM0MyNkY0QkVDRjM1MwotOjEwQUI3MDAwQjFERjM2REE2NUYwM0VDNTlBQzVFRjE3OEFCRjk2NjczMgotOjEwQUI4MDAwRUU0MDMwODlDMzdBMDFFNTkxQUVFOUI0NDZCQkY4MUNDQQotOjEwQUI5MDAwQzlBRTBFM0FDNzkwQzJGQUVFRkRBQUQ1RkM4RUE5NERGOQotOjEwQUJBMDAwMkE2NDc5NTQ3NUFCM0M1RDVGMUVFQUNBRkQxRTY5NTU4NwotOjEwQUJCMDAwRjk1NDA3RUYxRjkyODFFMkFENDQ5RUY5QjI0MUY4RkVDRAotOjEwQUJDMDAwODlDQTcwREI0MEJDNTc4MkFEQkEzNDg0RjdFQzBGMUVFMwotOjEwQUJEMDAwNjdGQUFDQUFGMjJGMjdGRDc0QzhCNUFGODk1MEVFQjg1QQotOjEwQUJFMDAwRUU1OTE3MUZGRkQwMUVGQjIxRDFFMTdBOTg2QTI2RkQ4RQotOjEwQUJGMDAwODZBMjZEM0FGQ0FFNDVDNDZCODc0ODVGOEE3OEY3NUVFMwotOjEwQUMwMDAwQjk2RTI2QUZGNTkyMkY3Njg4RUU2QjdENUZGODEzRkU1NgotOjEwQUMxMDAwQThGMEVCMzE1MkUzN0NEMDA3RURENjczMDQ3NzFERjEzOQotOjEwQUMyMDAwNzkwRDJCMkE3ODcyNzkwRTM5NzdDRjcxNDc5N0Y1MUZGNgotOjEwQUMzMDAwMDRFRjk4QkJERjMyRERFMkJBRUIzMjkwQ0RGRTQ4NUEyQQotOjEwQUM0MDAwNURERDM4QkZCQUJBQTRGRjU4RDREM0FGMTU3QzBDMkY0MgotOjEwQUM1MDAwMzg4MjBGOUI0MDI3Nzk0MkZFM0I0NkU3RjNERTk3MkM3NAotOjEwQUM2MDAwN0I3RTVCMDVENzVEMkVCMEJFOURERjYxQkQ0REYwNEU5NgotOjEwQUM3MDAwRDlGNkJCRDRCRUJGQkQwNzE4REU3OUJFRDc1ODU1MUU2NgotOjEwQUM4MDAwOEZEQTQ4QTdDMTNDRTEzNzNGREQ2ODZFQjBEM0YyM0ZCMQotOjEwQUM5MDAwNzNENjBCN0IzMjY3QkQ4OEM3MTcyMzNCNEQ4ODc3NkYxMAotOjEwQUNBMDAwNkNDNzJGODdGQTAwRDEyQjFCRkU0MDFGOEM1MzFENjhFOQotOjEwQUNCMDAwQjZGREI1NUQ3NzA1Mjg0RkRDNUZENjE0QTBGNzY4ODkyRgotOjEwQUNDMDAwNjA1MzIxRjUwN0NCQUMyOEVEM0ZEMEQ3RkFEQzQ3NTVEMAotOjEwQUNEMDAwQzQ0NzgyRUY5REY5MjIxRjkxNDRGREVDQTRFNTQ5NEY0MgotOjEwQUNFMDAwNzUyOTdDQUVFNjMyNDg1MTNFREQxRjE0N0U5MTFGRTM4QwotOjEwQUNGMDAwNDU2MzI5RjlDREY1NkNDRkYxRkIzOEE1MEVGQ0VCMERDMgotOjEwQUQwMDAwMTE2RjVCMjY1ODQxNzI4MzQwMjI3Q0ExOEUzQ0JEOUUxMAotOjEwQUQxMDAwNEM1RTczNTkxQ0U4NUNCM0MxNTE1QTcwM0RDNUEzNjVDNAotOjEwQUQyMDAwM0FGQjIxNTdBRUQ3MTk2RUQ4OTI2N0UyNzgzODdGN0MwQwotOjEwQUQzMDAwRUQzQjA3QkU4QUNFODEyRjZGOUUyNzc3RDk3OEFBNUMxQwotOjEwQUQ0MDAwQUZGMEY5NUUwQ0RGQzNGNzgyNEY5QTU5Q0VGQ0E4RjA0MgotOjEwQUQ1MDAwQTg5RTVGQkQ1RUU4MTkyNTY4NDEyQ0M0RTFCRjQ0Rjg5OAotOjEwQUQ2MDAwNDlEMDAzOUIyNTMzRjg0NTVGOTFGMUFCRTg3MTVFRTc2RAotOjEwQUQ3MDAwMkYzMzIxQjY5NEYwQTE0Qjg0OEZFQ0ZCMkY3QkZFQkJDRAotOjEwQUQ4MDAwMkQ4NEI3NTdCNjA4QkRCQTRBNzVGNTQ3MUNFRjgyRkM0QgotOjEwQUQ5MDAwQjlEM0Q1NkZFMERBQTVCNjNDNjE3N0Q2QzFDRjgyMjJCMAotOjEwQURBMDAwQUYyREY4NzQxOUJBRTM4MUEyMzNGNUFCRDczRUVERTZDNwotOjEwQURCMDAwOTVCM0JGRkY2RTdEOUVGMDg3OEM3MUQ2RUZGREFEMDIxRgotOjEwQURDMDAwN0UyODI0RkNEMDgzNDMyQkQ4N0Y1ODUzNUEzNTI3NURFNwotOjEwQUREMDAwM0Y1RUVDM0E2MTc2NURGMDVDNzVDMDE5QkVCMTAyNzRGRAotOjEwQURFMDAwQ0UzRkVBNzczOUVEQzZFQ0ZDNzEzRkYxOEY4RkU0MjY1OAotOjEwQURGMDAwQzBFRDE5RTNFNTc2RDQyNEI5OUE2RjM5ODA3NERCMTk3NAotOjEwQUUwMDAwOEU0Nzg5N0YwNjBFNkY3Rjg3RUEyNEVBRUI4QTQ5RkUyOAotOjEwQUUxMDAwQTZBQURBNDBGM0Q2MTRDNzU5M0VENjk2NTk0MDc1QTU2RQotOjEwQUUyMDAwRkJGQkFDMUZBNkMzMUQ2RThGNkQ1QjRGRUY4NEY0NzFFRgotOjEwQUUzMDAwOEJFMDA0MjFFNTkwM0RCQTdFQUUxNUI3NzNEMEUxNkU4QwotOjEwQUU0MDAwNTc3RjdDRDA2RTdGNjkzREYyRTEyQUQyOUQyQjAwN0UzOAotOjEwQUU1MDAwNjk1Qjc3NTJGRjdDRjVENTk5RjJENDFBMjBCRDdGRTE2QQotOjEwQUU2MDAwRjJENDExQTBGQjBEOTZEOUZDNEU2QkYwNjcwQTc5NTgwRAotOjEwQUU3MDAwQTdFNzBEQkFGMjM0MzhGRjFFODhBNUM5RDVFRUY1NTlGQgotOjEwQUU4MDAwN0EyN0UyRUE5RDg4QzU3MjMxRTJFQTE5NTVCNzU5M0U0MAotOjEwQUU5MDAwN0MyNDRGNEJEMkY0NENDNEQzMzMxNkNCQTMxQUYxRTQyOQotOjEwQUVBMDAwQzk5NTNGOTJBNzIwQkQwRjlFNkEyNjNGNjUwMEM0M0IwRgotOjEwQUVCMDAwQzY2Q0Y5RkE3RTdCRUM2MUEyQzM1NUM1RkZENzU5NjExOAotOjEwQUVDMDAwQ0NCQ0ZGMzQwQzIxNEY4MzY1MkVCRkNGN0Y5NkY5RkY5QQotOjEwQUVEMDAwMjRGMjNGM0QxNkVFMEY1NjY2RjBCQkQ3QUU5QzU2MjBDRgotOjEwQUVFMDAwODVBNEI4NkU1QUUyRjZCM0QzRjlEQ0FFOUFDRUUzRDZCNwotOjEwQUVGMDAwOUE5RUNCNkRFMzc0OThEQkE2RTk0QkI5NkQ5RTJFRTU2NwotOjEwQUYwMDAwQjY2NTFBRjlGRTZBRTRGRkU5MEE2RUQ3NEMyRkU2NzZCOQotOjEwQUYxMDAwRURGNDIyNkU1QkE3QUZFNjc5NkREM0NCQjlCRDdFRkFCNwotOjEwQUYyMDAwNUE2RTZGOTg2RTEwRkI1MDREQTgyODI3RkY1MzM5RUJDRgotOjEwQUYzMDAwMjJGMEJGRTk1MDdENzRFMEYwRURFRjEwN0U3Q0JBQzZFMAotOjEwQUY0MDAwNzk5NDQ0Qjg4RUVCM0QzRTM1Q0VGQzdGQjA0Q0U4RjdBQgotOjEwQUY1MDAwQjU0MTQxOUY2Q0ZFRkZBMDNERjYzMkYxNkQzNkZGODM5NwotOjEwQUY2MDAwNEZCQ0RCNTJFOURENTYwREZCMzk2RjMyN0Y5RkUxRUZCRAotOjEwQUY3MDAwQkVGNDE3Q0E4M0EyRkY3MThDRTg3N0ExRjZGRkI0NUYxNQotOjEwQUY4MDAwNTk5MkU5NTcwRTE2NjdGQTk1MDNGMzNEQkZEMjNGNDYzMwotOjEwQUY5MDAwNzVCMEFEOTJDMUVGQzRGMjNCNjIxRkYyRkU2MDZGQTFDQgotOjEwQUZBMDAwRjE1ODU3NDAyNzdGMkExMTVFMTMwRDYyN0ZGMzRFMDUzQgotOjEwQUZCMDAwMjhERjg3RkVDNTZGNzgxRUVBMDdCMjFCRTcyQkFGQkZGRAotOjEwQUZDMDAwQjQ4NTFDNzhGMzk3QzE3MTM5RkUyOUZDOTNGN0U5OUY4QQotOjEwQUZEMDAwMEQ2N0NBRkQ2Q0VCM0NCOUJGMUNBQUYzNzJEOUQ5MjIyQwotOjEwQUZFMDAwNUZCMzkwN0I1REM4N0RBMkNDMUVBMjdDNEIyMjRCRUU1MgotOjEwQUZGMDAwM0QzQjhBNzhDODkwRkJGQzZFNTdFRTVEMzkyRThBODhGRgotOjEwQjAwMDAwNzcxRjQ1MjRGN0M4NTdFMTZFQzNBREZGNjREQTUxRDUwOQotOjEwQjAxMDAwOURFRjZCMTVGNUFERTY4OEQwQUI2QUFCRDAxN0FBOUU1NQotOjEwQjAyMDAwNjk0NzkxNkY4QUJCNzNGODEzOEUyQUZDRTNCNkFBN0YzNwotOjEwQjAzMDAwM0I2RENGQzhBRTE2NDVDMjUyMjE2RUFERkY2OUQyQTE5RAotOjEwQjA0MDAwM0NENjYxNzUwMUNCNzdCNjFDMjVGNDE1Q0NFNzg3RDVDNgotOjEwQjA1MDAwNjZDODI1RkZFNzJENDc2MUNGOEU1ODZDNDdCMkU3Nzk2OAotOjEwQjA2MDAwRjIzNDcwQjg4REYxRTJEOTk1QzM3ODZGMkJDRDlFQUNEOAotOjEwQjA3MDAwRDUwNTFFRDA5RUFDRThDRTYxNEY1Njk1NUIzMTNCQzdERgotOjEwQjA4MDAwMzk5QkJBODU1RkZBREE3NUI2RjAxN0QxNEYyNDNGMjVBMAotOjEwQjA5MDAwRTFDQkVEMDczNDc1MEJGRkE3QThENUZEN0Q4NTAxRjE0OAotOjEwQjBBMDAwQjlBODA3NUI1QjUzQ0Q1NEMzNDA3OTZFQTJGREFGQjMyMwotOjEwQjBCMDAwMjZGQjQ5MDZGQjgzMjMxMTNBM0ZDQTY3MzNEMUUxNDI5RAotOjEwQjBDMDAwRTVCM0JBNURGODg1RDAzQjk3RkQxNkFGM0QxN0RGN0I0MgotOjEwQjBEMDAwRkU4RUM3RkZEOUYzOUVBRUIwMzZFNEMyQ0IwRkJBNDVBMQotOjEwQjBFMDAwNUM3MzcwRThEOTBDRkVEOEEzMkVCOERFMzQ3MkVBNTUzMgotOjEwQjBGMDAwQ0JCQzI4N0FGNUZDRkM4QUMzNjhFNzU4QUZDRUVFNTc4NAotOjEwQjEwMDAwN0MyNTE3MUZDQ0U2NTc3Q0FENUJDNDlCRTg1NzZDMjdBQQotOjEwQjExMDAwM0FBRDVBMjJGQzhBMUY3NEMzQzVGNTE3MUFFRTYyN0MzOQotOjEwQjEyMDAwNURBOEJGMzBEMjdENzY3RkUxNDBCN0U3MkZDNDU5NkY2RAotOjEwQjEzMDAwRjg1REJERjE2OUZEODUxQ0ZFQzFBM0NDQkYzMEE1NTBGMwotOjEwQjE0MDAwRkQwRjUxNkQ4QTdDODhEMDIzQTg2NzBFRDIzOEM2RjFENgotOjEwQjE1MDAwRUMyRjFDMEMwQTdFQjE1QzNENzM0Nzk3RkQwNEQxNjM1NAotOjEwQjE2MDAwNEZCREYwMTcyRTk2MUNBMERGRjczNEMxM0Q1Rjc5MzgzNAotOjEwQjE3MDAwREY3OTU1NEZBQzFDOUEyNDNGMDc0MjQ5N0EzN0RENEY5RgotOjEwQjE4MDAwRUY5NTI4N0U3QzJGMjRERTExRTA1MTI4RUZGRjRGQ0E3NwotOjEwQjE5MDAwOTUyNkQ5QjlEMUZDNkYzQzQ2RjM3QjFEMTVFOERERTA1RgotOjEwQjFBMDAwRkUzRTkxN0ZERUVERTZGRkY2RkJFMkZGMzI4OTcwRUVCOAotOjEwQjFCMDAwREZFMUQ3MEZFMkY4OUZFNzE0MzgzMkYyRDQ5RkYzQ0FFOQotOjEwQjFDMDAwQzdFODVERDAzMTU3MEZGOTYxNTM2MTJFQkU5QTM5OUZBMAotOjEwQjFEMDAwNzg5RjRCNEY1NzRFRjFFRjNBQ0E3NENFOTNCQkY4ODkyNAotOjEwQjFFMDAwNjgzNjM4MDg3RkU3N0M5OUVCMjMzQkRCQkY3ODgwRTQ0NwotOjEwQjFGMDAwQzc2OTE3NzkyRTJFQjRFMjc4NjQ1RTU0RTQzQkQwOEQ5MwotOjEwQjIwMDAwQTk0RkNCOEIyOEEwOUVBMDdDRkMxMEJENTE0RkFCQkY5QgotOjEwQjIxMDAwMTZEQjE4NDdBN0M1MTkyMUQzQ0VFODFCMTAwMzA3Rjc4MwotOjEwQjIyMDAwRDkxQjkxMzkzRjNGQjg1MkM0NDU4M0MxNzg0MENGQTE2MwotOjEwQjIzMDAwNUY3NkY1NjVCRTUzQ0E2RTk1NDU0RjI0RTkyREYxODNCRgotOjEwQjI0MDAwNTFENUE0RjRFODcwNzU0RDFCRTUzMTEzQkE3OEI0QTQ1OAotOjEwQjI1MDAwODU2NTNCNTcxRDNCREMyM0I5Rjk3ODkzRURCNkZBQjkwOAotOjEwQjI2MDAwOEVDMjVDNzZDNTZCODdGQTQ0OUVENkVCMDcxNjhFNUI2MgotOjEwQjI3MDAwQzQ5RjVBODU2NUYzRUY3NUMyMTFDOTQ5Q0IyRkZGREUxNAotOjEwQjI4MDAwRDUxMzNCMjUzM0I1MEE5MUI2MzMyNEVDNDRDMDQ4NUE1NAotOjEwQjI5MDAwMzI5RTc3QTBGODM2QUU0NzA2MEMwNzRFRDBGNzg1NDlBOAotOjEwQjJBMDAwRjgxMERCNDg4OTE2Q0I1OTc3RUYxMUYxQ0M0RTVGOEM0MwotOjEwQjJCMDAwRjdEQjU5QUE3MjlENzI2NzQ1RUVCQ0Q3NUY1REJEQUNFNgotOjEwQjJDMDAwODU5QjZDQ0VGRjg3NTVBRTI3NjdDRjlCNzJGOTQ5RDMxQwotOjEwQjJEMDAwQUNBOENFRjFGNzZEMDZERDJCMzExRjM4OTczOUQ1NzM0OQotOjEwQjJFMDAwRTc1MzNCODJDNDlGMzZFNzQ3RjZCQjc5MTI2RERFMzZFMwotOjEwQjJGMDAwQzZGQkVFNzI1NUE3M0NEQzZBNjVERDBFREFFNzQxNTQwOQotOjEwQjMwMDAwQkJFNDlGNjRGMzgxN0Y3RTREMUVENzNGRDdDOUZDNjZBNwotOjEwQjMxMDAwMzM5QjJGRThFRERCMDRGOTY5NkE4QUZEMjUxRkJDQzM2NgotOjEwQjMyMDAwNzk4QkREMzU0N0I4NkZDMDg0REIxN0ZDRTJENTlCMjJGMwotOjEwQjMzMDAwMkUzRjlFNjEyNzVDN0EyNTQ5QUU3MkYwQ0ZGREU1MTM2MgotOjEwQjM0MDAwNkNCRjFGNjg5OEQ4NDA3NTlCNjAyNDYwQjZFMjNERjZEQwotOjEwQjM1MDAwMkRCNzM5QkZCREJCNTY2NkJGMzVERkZEM0RDRTgzRUI5NAotOjEwQjM2MDAwOEFDMjg0OTdEREI1NDc1ODJGNjc5RkM3NzdFNDE1RjZFMwotOjEwQjM3MDAwM0I4MjZBOEFGMzE3QzFCMjhGMzg5RTdEQzgzREM3REExNwotOjEwQjM4MDAwN0EyMTRGMDVBNkQwQzMwNTVENzFEMDcxREZFMkI3OTQ3NQotOjEwQjM5MDAwMzEwM0ZCRDJCQzk3MUQxRkQ1MEY2RTEyNkY4QjM1MkQ1RAotOjEwQjNBMDAwQzU3RTQ2N0VGRDFBODlDRUY3NjZBOTAyMTJDMTUwNUU5RgotOjEwQjNCMDAwRTBGN0JBNjAwQkY5RjZERTY1OTc3NDY5MTlGMTdEMTg0QwotOjEwQjNDMDAwRDJGQTE1RTI3NzA0RTlFRkE4NDBEOTc4RDZGNzY2QkQzRQotOjEwQjNEMDAwRUZERDdFRUM2ODFBQkM5RTFFRjc1REFGNUI2NzNCRDc2NgotOjEwQjNFMDAwRkEzRkY3NkQzQjc2MTQ5NUZGODMzNTY3OTdBQkJEQUU5QgotOjEwQjNGMDAwREVEQkQzNTdDRjc0RjJGOENCRTNCNzA4NUQ3MUM1RUM1MQotOjEwQjQwMDAwRUJGNzg3Qzc3M0ZBMjVBMzNEODJBRkNGQTU4RjBBRkM2MAotOjEwQjQxMDAwRTM2Q0U3Rjc1RTM3OUU5MTg3RkNCQUFCMUZCRURFMjM3NQotOjEwQjQyMDAwRTQ0ODJGOUZFMkJDRTU1RUY3OUREM0RFM0NEOEYwNkM4QwotOjEwQjQzMDAwOEU3QjNERDZBMzA5NzkzQUNEQ0Y5RTFGRjBDRTg1RjlGQwotOjEwQjQ0MDAwMDFGM0JCNDRGQzEwNTk5MTQ3N0UwMEUyRjM2NTdBRTdCMwotOjEwQjQ1MDAwRjZBNzg4NjY0MDlBM0MwRjg0MzJGRDUwQ0YwRkY4NkRGNgotOjEwQjQ2MDAwOEZGMDAzNUUyQ0ZFOThFRDc4NjEzMEM1NzYzQzY4NjZGRgotOjEwQjQ3MDAwRTYwOUIyRURCOEU2OEI3MTVDQTk5NTZBOUU5RUUxN0EwOQotOjEwQjQ4MDAwNTdGMEVENkYzQ0U1OTAzRTQ4RURFMkZBNTEzRUYyNkYyOQotOjEwQjQ5MDAwOUU0ODhEM0JCOUU4MDQ0QjMyREZERDdDQjEwN0Y4M0NCOAotOjEwQjRBMDAwMTEyMzNFRDE0OEY2QTU0QkU1N0FDODdFRjlCRDQzMUY2RQotOjEwQjRCMDAwMTJCQTkyNzFCMDVEQjhDM0NDQjdCQjI3RjhGRDhFQ0I4MgotOjEwQjRDMDAwRjdFN0EyMjdGRDdENTJFN0ZFNkU4NURFNzE1Q0ZCNjYyNQotOjEwQjREMDAwN0RBRUI4QzM2QkU5N0Q1NUU2N0JGODRGMjcxN0NGN0I3MAotOjEwQjRFMDAwNzI5MTA3Nzk0MjJFRDZDOTAzRTQwRkFDOTNGOUREMEFCNQotOjEwQjRGMDAwM0RFRjU1RUJEQzk0MjNENUZERTk2NDc0NkY3QTFGMjQ4RQotOjEwQjUwMDAwQjlGNUE0MDUzM0YyMDI5RjE3RUY1RTRFNkUxM0VGNjg5NAotOjEwQjUxMDAwRjg3Nzg2MEJFODc3QTE5M0ZDRkJDMUNCRTg5NUFCMzJCQgotOjEwQjUyMDAwQTNERjRFNDI5OTRDRjU2MkU3ODgyNDlERjY5MzJFQTU0MQotOjEwQjUzMDAwMjc4RkE2NENFQjE2ODJDRDZERjZCOTJGODczODdGQUZEQgotOjEwQjU0MDAwODYyNEI3NTdDMjM4Qjc0QjYwODJEQjY1MzBDNUFEMDU3RQotOjEwQjU1MDAwNDI2Rjk5NDc0NURENjMwNTk4MEE3REFGMDE5QkRCM0E1MQotOjEwQjU2MDAwODg3MzVCMEY0OTZFQkY3OUVEOTdGRTcwMzMyRUY5QUY4QwotOjEwQjU3MDAwMUVCNzJFN0YxQTJGMDJBRjM5RTQzQjQ1OEZGRUJERkI2RAotOjEwQjU4MDAwN0I3ODdFQjBDNzYwQjkzQjE3QkQwN0MyNDJERjM2OUJGMAotOjEwQjU5MDAwMTNFQ0RGODc4MjM2RUI2MTVGNDRGMEI3MDdDNzM3NEJBOAotOjEwQjVBMDAwQkVGOEVGRjVBM0IyN0Y2N0YyRkYyQjIxMzRDNkQwM0Y4MAotOjEwQjVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4MDAwMDAwMDA3MwotOjEwQjVDMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAzQgotOjEwQjVEMDAwMDAwMDAwMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAzMwotOjEwQjVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAzQgotOjEwQjVGMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAzQgotOjEwQjYwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMgotOjEwQjYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5MDAwMDAwMDBGMQotOjEwQjYyMDAwMDAwMDAwMDAwMDAwMDAzODAwMDAwMDAwMDAwMDAwMDBFMgotOjEwQjYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMgotOjEwQjY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQQotOjEwQjY1MDAwMDAwMDAwMDAwMDAwMDAwQzAwMDAwMDAwMDAwMDAwMDBERQotOjEwQjY2MDAwMDAwMDAwMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRDOAotOjEwQjY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4MDAwMDAwMDBCMgotOjEwQjY4MDAwMDAwMDAwMDAwMDAwMDAxQzAwMDAwMDAwMDAwMDAwMDA5RQotOjEwQjY5MDAwMDAwMDAwMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTM3QgotOjEwQjZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBMDAwMDAwMDA2MAotOjEwQjZCMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDA4OQotOjEwQjZDMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3NwotOjEwQjZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDA1QQotOjEwQjZFMDAwMDAwMDAwMDAwMDAwMDA1MDAwMDAwMDAwMDAwMDAwMDAwQQotOjEwQjZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0NwotOjEwQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCMDAwMDAwMDA4RQotOjEwQjcxMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAyMQotOjEwQjcyMDAwMDAwMEMwMDAwMDEwMDAwMDAwMDAwMDA4MDAwMEMwMDg3OQotOjEwQjczMDAwMDAxMDAwMDAwMDAwMDAwMjAwMDBDMDAwMDAxMDAwMDAyNwotOjEwQjc0MDAwMDAwMDAwMTAwMDAwOUZCMDAwMDAwMDAwMDAwMDAwMDg5MgotOjEwQjc1MDAwMDAwMEMwODAwMDEwMDAwMDAwMDAwMDA0MDAwMEMwODg0RAotOjEwQjc2MDAwMDAxMDAwMDAwMDAwMDAwMjAwMDBDMDgwMDAxMDAwMDA3NwotOjEwQjc3MDAwMDAwMDAwMTAwMDAwOTEyMDAwMDAwMDAwMDAwMDAwMDgwMAotOjEwQjc4MDAwMDAwMDkzNDAwMDAxMDAwNDAwMDAwMDAxMDAwMDkzNDgwNQotOjEwQjc5MDAwMDAwMDAwMDAwMDAwMDAwMjAwMDA5MzUwMDAwMDAwMDBDNAotOjEwQjdBMDAwMDAwMDAwMDgwMDAwOTM1NDAwMDAwMDAwMDAwMDAwMDJBOAotOjEwQjdCMDAwMDAwMDk0MTgwMDAwMDAwMDAwMDAwMDA4MDAwMDkzNThFQQotOjEwQjdDMDAwMDAwODAwMDAwMDAwMDAwODAwMDA5QUIwMDA0MDAwMDBERgotOjEwQjdEMDAwMDAwMDAwNDAwMDAwOTM5ODAwMDgwMDAwMDAwMDAwMDhFRQotOjEwQjdFMDAwMDAwMDkzRDgwMDA4MDAwMDAwMDAwMDA4MDAwMDk0MjAyQQotOjEwQjdGMDAwMDBDODAwMDAwMDAwMDA5ODAwMDA5NUIwMDA5ODAwMDAwQwotOjEwQjgwMDAwMDAwMDAwMjgwMDAwOTVGMDAwOTgwMDAwMDAwMDAwMjhDQgotOjEwQjgxMDAwMDAwMEM0ODAwNTQwMDAzMDAwMDAwNTQwMDAwMDlEMjA2RAotOjEwQjgyMDAwMDAwODAwMDAwMDAwMDAwMTAwMDA5RDIxMDAwODAwMDA0OQotOjEwQjgzMDAwMDAwMDAwMDEwMDAwMjAwODAwMTAwMDAwMDAwMDAwMTBCRgotOjEwQjg0MDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDlDRDg1QwotOjEwQjg1MDAwMDAwODAwMDAwMDAwMDAwMjAwMDA5RDE4MDAwMDAwMDAyOQotOjEwQjg2MDAwMDAwMDAwMDEwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDBENgotOjEwQjg3MDAwMDAwMDAwMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJCRAotOjEwQjg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRjIwMDAwMDAwMDBDOQotOjEwQjg5MDAwMDAwMDAwMjAwMDAwQ0Y0NjAwMDAwMDAwMDAwMDAwMDE3MgotOjEwQjhBMDAwMDAwMDYwMDAwMDIwMDAwMDAwMDAwMDIwMDAwMDczMDA4NQotOjEwQjhCMDAwMDAwODAwMDAwMDAwMDAwODAwMDA5RkEwMDAwMDAwMDAzOQotOjEwQjhDMDAwMDAwMDAwMDEwMDAwOUZBODAwMDAwMDAwMDAwMDAwMDEyRgotOjEwQjhEMDAwMDAwMDlGNjAwMDAwMDAwMDAwMDAwMDEwMDAwMDlGNjM1NwotOjEwQjhFMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDA5RjYxMDAwMDAwMDA1NwotOjEwQjhGMDAwMDAwMDAwMDEwMDAwOUY2NjAwMDAwMDAwMDAwMDAwMDE0MQotOjEwQjkwMDAwMDAwMDlGNjcwMDAwMDAwMDAwMDAwMDAwMDAwMDlGNjgyQQotOjEwQjkxMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDA5RjZDMDAwMDAwMDAxOAotOjEwQjkyMDAwMDAwMDAwMDQwMDAwMDA1MjAwMDAwMDAwMDAwMDAwMDBDMQotOjEwQjkzMDAwMDAwMDAwMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwMQotOjEwQjk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MDAwMDAwMDBGMgotOjEwQjk1MDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDBFNQotOjEwQjk2MDAwMDAwNjAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDlGNzBBMgotOjEwQjk3MDAwMDAwMDAwMDAwMDAwMDAwMTAwMDA5RjkwMDAwMDAwMDA5NwotOjEwQjk4MDAwMDAwMDAwMDgwMDAwMDA1MzAwMDAwMDAwMDAwMDAwMDA1QwotOjEwQjk5MDAwMDAwMDlGOTgwMDAwMDAwMDAwMDAwMDAyMDAwMDlGOUMzMwotOjEwQjlBMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDA5RjlEMDAwMDAwMDA1QQotOjEwQjlCMDAwMDAwMDAwMDEwMDAwMDAwOTAwMDAwMDAwMDAwMDAwMDA3RAotOjEwQjlDMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDQzMgotOjEwQjlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDA2NgotOjEwQjlFMDAwMDAwMDAwMDAwMDAwMDA1MDAwMDAwMDAwMDAwMDAwMDAwNwotOjEwQjlGMDAwMDAwMDAwODkwMDAwMDAwMDAwMDAwMDAwMDAwMDEyQzhFNAotOjEwQkEwMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDAwMDAxMDAwMDAwMDAzNQotOjEwQkExMDAwMDAwMDAwMDAwMDAwQTAwMDA3MTAwMDAwMDAwMDA3MTA1OAotOjEwQkEyMDAwMDAwMDFBQzgwMDAwMDAwMDAwMDAwMDA4MDAwMEFFQzBCRQotOjEwQkEzMDAwMDAwODAwMDAwMDAwMDAwODAwMDBBRTQwMDAwODAwMDAwMAotOjEwQkE0MDAwMDAwMDAwMDgwMDAwQUU4MDAwMDgwMDAwMDAwMDAwMDhCMAotOjEwQkE1MDAwMDAwMDIwMDgwMDEwMDAwMDAwMDAwMDEwMDAwMDIwMDA3RQotOjEwQkE2MDAwMDAwMDAwMDAwMDAwMDAwODAwMDBBMDEwMDcxMDAwNDBDNwotOjEwQkE3MDAwMDAwMDAwNDAwMDAwMUJGODAwMDgwMDAwMDAwMDAwMDE2QQotOjEwQkE4MDAwMDAwMDFCRjkwMDA4MDAwMDAwMDAwMDAxMDAwMDFBRDBBRgotOjEwQkE5MDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAxQUQ4MDAwMDAwMDBCMwotOjEwQkFBMDAwMDAwMDAwMDIwMDAwMUFEQTAwMDAwMDAwMDAwMDAwMDI5RQotOjEwQkFCMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGMDA1NwotOjEwQkFDMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAxQjc4MDAyODAwMDA5QgotOjEwQkFEMDAwMDAwMDAwMDQwMDAwRTAwMDAwMjAwMDAwMDAwMDAwMjA0MgotOjEwQkFFMDAwMDAwMEYzMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDFBRjA0OQotOjEwQkFGMDAwMDAwMDAwMDAwMDAwMDEwODAwMDAxQjM3MDAwMDAwMDBFQgotOjEwQkIwMDAwMDAwMDAwMDEwMDAwMUIwRjAwMDAwMDAwMDAwMDAwMDEwOQotOjEwQkIxMDAwMDAwMDFCNzAwMDAwMDAwMDAwMDAwMDA0MDAwMDFCNzQwNwotOjEwQkIyMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDUwMDAwMDAwMDBDMQotOjEwQkIzMDAwMDAwMDAwMDAwMDAwMDAwMzAwMDAwMDAwMDAwMDAwMDAwMgotOjEwQkI0MDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFQQotOjEwQkI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MDAwMDAwMDBERQotOjEwQkI2MDAwMDAwMDAwMDAwMDAwMUJDODAwMDAwMDAwMDAwMDAwMDFGMQotOjEwQkI3MDAwMDAwMDFCRTgwMDAwMDAwMDAwMDAwMDA4MDAwMDAwNTE2OQotOjEwQkI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQkQwMDAwMDAwMDBDQQotOjEwQkI5MDAwMDAwMDAwMDQwMDAwMUJENDAwMDAwMDAwMDAwMDAwMDRBRQotOjEwQkJBMDAwMDAwMDFCRDgwMDAwMDAwMDAwMDAwMDA0MDAwMDFCRENBNwotOjEwQkJCMDAwMDAwMDAwMDAwMDAwMDAwODAwMDBCMDAwMDAxODAwMDBCNQotOjEwQkJDMDAwMDAwMDAwMTgwMDAwQzAwMDAwNDAwMDAwMDAwMDAwNDAxRAotOjEwQkJEMDAwMDAwMEMwMDAwMDQwMDAwMjAwMDAwMDAxMDAwMEMwMDFBMQotOjEwQkJFMDAwMDA0MDAwMDIwMDAwMDAwMDAwMDBFMjAwMDAyMDAwMDAxMQotOjEwQkJGMDAwMDAwMDAwMjAwMDAwRTIwNDAwMDIwMDA4MDAyMDAwMDIxMwotOjEwQkMwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyMDBEMgotOjEwQkMxMDAwMDAwODAwMjAwMDAwMDAwNDAwMDBGNDAwMDAyODAwMDBEQwotOjEwQkMyMDAwMDAwMDAwMjgwMDAwRjU0MDAwMTAwMDAwMDAwMDAwMTA5NwotOjEwQkMzMDAwMDAwMEY1QzAwMDIwMDAwMDAwMDAwMDIwMDAwMEY1QzA1QQotOjEwQkM0MDAwMDAwMjAwMjAwMDAwMDAwMjAwMDBGMzAwMDAyMDAwMDBCRAotOjEwQkM1MDAwMDAwMDAwMjAwMDAwMjAwODAwMTAwMDAwMDAwMDAwMTA3QwotOjEwQkM2MDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDExMDg5MwotOjEwQkM3MDAwMDAwODAwMDAwMDAwMDAwODAwMDAxMTY4MDAwODAwMDAzMwotOjEwQkM4MDAwMDAwMDAwMDgwMDAwMTFBODAwMDgwMDAwMDAwMDAwMDhFMwotOjEwQkM5MDAwMDAwMDEyNDAwMDA4MDAwMDAwMDAwMDAxMDAwMDEyNDFGNgotOjEwQkNBMDAwMDAwODAwMDAwMDAwMDAwMTAwMDA0MDAwMDAyMDAwMDQyNwotOjEwQkNCMDAwMDAwMDAwMTAwMDAwNTkwMDAwMzAwMDE4MDAwMDAwMTBDMwotOjEwQkNDMDAwMDAwMDU5MDgwMDMwMDAxODAwMDAwMDAyMDAwMDU3MDA3MgotOjEwQkNEMDAwMDAwODAwMDAwMDAwMDAwMTAwMDA1NzAxMDAwODAwMDBGQgotOjEwQkNFMDAwMDAwMDAwMDEwMDAwMTFFODAwMDAwMDAwMDAwMDAwMDE1OQotOjEwQkNGMDAwMDAwMDExRjAwMDAwMDAwMDAwMDAwMDAxMDAwMDExRjgzOQotOjEwQkQwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAxMjQ0MDAwODAwMDBDNQotOjEwQkQxMDAwMDAwMDAwMDQwMDAwNDAwMDAwMjAwMDAwMDAwMDAwMjA5RgotOjEwQkQyMDAwMDAwMDUzMDAwMDEwMDAwMDAwMDAwMDEwMDAwMDE1Mzg1MwotOjEwQkQzMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAzMDAwMDAwMDBGRgotOjEwQkQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMwotOjEwQkQ1MDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRERQotOjEwQkQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNTA4MDAwMDAwMDBCNgotOjEwQkQ3MDAwMDAwMDAwMDEwMDAwMTUyODAwMDAwMDAwMDAwMDAwMDg3RAotOjEwQkQ4MDAwMDAwMDAwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzMDhEOAotOjEwQkQ5MDAwMDA4MDAwMDAwMDAwMDA4MDAwMDAwMDAxMDAwMDAwMDBBMgotOjEwQkRBMDAwMDAwMDAwMDAwMDAwMjAwODAwMTAwMDAwMDAwMDAwMTA0QgotOjEwQkRCMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDg0MTBDNwotOjEwQkRDMDAwMDAwODAwMDAwMDAwMDAwODAwMDA4NDcwMDAwODAwMDA2NwotOjEwQkREMDAwMDAwMDAwMDgwMDA2MDAwMDA0NjAwMDI4MDAwMDA0NjA2NQotOjEwQkRFMDAwMDAwMDg1MjAwMDA4MDAwMDAwMDAwMDAxMDAwMDg1MjFGRgotOjEwQkRGMDAwMDAwODAwMDAwMDAwMDAwMTgwMDAwMDAwMDAwMDAwMDBCQQotOjEwQkUwMDAwMDAwMDAwMDAwMDAwODQwODAwMDAwMDAwMDAwMDAwMDFBNQotOjEwQkUxMDAwMDAwMDg0RjQwMDA4MDAwMDAwMDAwMDAyMDAwMDg0RjYyNgotOjEwQkUyMDAwMDAwODAwMDAwMDAwMDAwMjAwMDA4NTA0MDAxMDAwMDA2RgotOjEwQkUzMDAwMDAwMDAwMDQwMDAwODc2MDAwMDAwMDAwMDAwMDAwMjBGNwotOjEwQkU0MDAwMDAwMDYwMDAwMDIwMDAwMDAwMDAwMDIwMDAwMDczMDBERgotOjEwQkU1MDAwMDAwODAwMDAwMDAwMDAwODAwMDAwMDAzMDAwMDAwMDBDRgotOjEwQkU2MDAwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDAwMDBDRAotOjEwQkU3MDAwMDAwMDAwMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCNQotOjEwQkU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4ODA4MDAwMDAwMDAyMgotOjEwQkU5MDAwMDAwMDAwMDEwMDAwODgyODAwMDAwMDAwMDAwMDAwMDhFOQotOjEwQkVBMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4MTBBQQotOjEwQkVCMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDA4ODE0MDAwMDAwMDBFMgotOjEwQkVDMDAwMDAwMDAwMDQwMDAwODgxODAwMDAwMDAwMDAwMDAwMDRDQQotOjEwQkVEMDAwMDAwMDg4MUMwMDAwMDAwMDAwMDAwMDA4MDAwMDMwMDA4NgotOjEwQkVFMDAwMDA0MDAwMDAwMDAwMDAwODAwMDAzMDA4MDA0MDAwMDA5MgotOjEwQkVGMDAwMDAwMDAwMjgwMDAwMzM5MDAxQzAwMDEwMDAwMDAwMDg3RQotOjEwQkYwMDAwMDAwMDMyMDAwMDIwMDAwMDAwMDAwMDIwMDAwMDM3MjA2OAotOjEwQkYxMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAxMDIwMDYyMDAwMzg4QgotOjEwQkYyMDAwMDAwMDAwMDgwMDAwQTAwMDAwMDAwMDAwMDAwMDIwMDA0OQotOjEwQkYzMDAwMDAwMDNFQTkwMDAwMDAwMDAwMDAwMDAxMDAwMDNFQzgxMwotOjEwQkY0MDAwMDAwMDAwMDAwMDAwMDAwMjgwMDAwMDAwMDAwMDAwMDA2RgotOjEwQkY1MDAwMDAwMDAwMDAwMDAwNjAwMDAwMjAwMDAwMDAwMDAwMDg1OQotOjEwQkY2MDAwMDAwMDQwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDQwMDE0NwotOjEwQkY3MDAwMDAwODAwMDAwMDAwMDAwMTAwMDA0MDQwMDAwODAwMDQyQwotOjEwQkY4MDAwMDAwMDAwMDIwMDAwNDA2MDAwMDgwMDA0MDAwMDAwMDRGRgotOjEwQkY5MDAwMDAwMDQwMDAwMDA4MDAwMDAwMDAwMDA0MDAwMDQwMDQxMQotOjEwQkZBMDAwMDAwODAwMDAwMDAwMDAwNDAwMDA0MDQwMDAwMDAwMDAwNQotOjEwQkZCMDAwMDAwMDAwMDgwMDAwNDA0ODAwMDAwMDAwMDAwMDAwMDhFOQotOjEwQkZDMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDUwNDA1MQotOjEwQkZEMDAwMDAwMTAwMDQwMDAwMDAwMTAwMDA1MDAwMDAwMDAwMDAwQgotOjEwQkZFMDAwMDAwMDAwMjAwMDAwNTAwODAwMTAwMDAwMDAwMDAwMDRDNQotOjEwQkZGMDAwMDAwMDUwMEMwMDEwMDAwMDAwMDAwMDAxMDAwMDUyQzdCQgotOjEwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDA1MkM2MDAwMDAwMDAxNwotOjEwQzAxMDAwMDAwMDAwMDEwMDAwMzAwMDAwMzAwMDE4MDAwMDAwMDRBMwotOjEwQzAyMDAwMDAwMDMwMDQwMDMwMDAxODAwMDAwMDA0MDAwMDMwMDg1OAotOjEwQzAzMDAwMDAzMDAwMTgwMDAwMDAwMjAwMDAzMDBBMDAzMDAwMTgzNAotOjEwQzA0MDAwMDAwMDAwMDIwMDAwMzAwQzAwMzAwMDE4MDAwMDAwMDE2OQotOjEwQzA1MDAwMDAwMDMwMEQwMDMwMDAxODAwMDAwMDAxMDAwMDMwMEUxQwotOjEwQzA2MDAwMDAzMDAwMTgwMDAwMDAwMTAwMDAzMDEwMDAzMDAwMThGRgotOjEwQzA3MDAwMDAwMDAwMDQwMDAwMzAxNDAwMzAwMDE4MDAwMDAwMDQyQwotOjEwQzA4MDAwMDAwMDUwMDAwMTAwMDA4MDAwMDgwMDA0MDAwMDUwMDQ3RgotOjEwQzA5MDAwMDEwMDAwODAwMDA4MDAwNDAwMDAwMDBBMDAwMDAwMDAwOQotOjEwQzBBMDAwMDAwMDAwMDAwMDAwNTA2ODAxMDAwMDgwMDAwMDAwMDE1NgotOjEwQzBCMDAwMDAwMDUwNjkwMTAwMDA4MDAwMDAwMDAxMDAwMDUwNkM4OQotOjEwQzBDMDAwMDEwMDAwODAwMDAwMDAwMjAwMDA1MDZFMDEwMDAwODBBRQotOjEwQzBEMDAwMDAwMDAwMDIwMDAwNTA3MDAxMDAwMDgwMDAwMDAwMDQxOQotOjEwQzBFMDAwMDAwMDUwNzQwMTAwMDA4MDAwMDAwMDA0MDAwMDUwNjY1MQotOjEwQzBGMDAwMDEwMDAwODAwMDAwMDAwMjAwMDA1MDY0MDEwMDAwODA4OAotOjEwQzEwMDAwMDAwMDAwMDEwMDAwNTA2MDAxMDAwMDgwMDAwMDAwMDJGQgotOjEwQzExMDAwMDAwMDUwNjIwMTAwMDA4MDAwMDAwMDAyMDAwMDUwNTA0QQotOjEwQzEyMDAwMDEwMDAwODAwMDAwMDAwNDAwMDA1MDU0MDEwMDAwODA2NQotOjEwQzEzMDAwMDAwMDAwMDQwMDAwNTA1ODAxMDAwMDgwMDAwMDAwMDRDRQotOjEwQzE0MDAwMDAwMDUwNUMwMTAwMDA4MDAwMDAwMDA0MDAwMDUwN0NGMgotOjEwQzE1MDAwMDEwMDAwODAwMDAwMDAwMTAwMDA1MDdEMDEwMDAwODAwRgotOjEwQzE2MDAwMDAwMDAwMDEwMDAwNDAxODAwMTAwMDAwMDAwMDAwMDQ2MgotOjEwQzE3MDAwMDAwMDQwOTAwMDEwMDAwMDAwMDAwMDA0MDAwMDQwOTgwMwotOjEwQzE4MDAwMDAxMDAwMDAwMDAwMDAwNDAwMDA0MTEwMDAwMDAwMDA0QQotOjEwQzE5MDAwMDAwMDAwMDIwMDAwNDExMjAwMDAwMDAwMDAwMDAwMDI0OAotOjEwQzFBMDAwMDAwMDQxMTQwMDAwMDAwMDAwMDAwMDAyMDAwMDQxMTZFMQotOjEwQzFCMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDA2MDQwMDAwODAwMDBENQotOjEwQzFDMDAwMDAwMDAwMDIwMDAwNjA0MjAwMDgwMDAwMDAwMDAwMDJDMQotOjEwQzFEMDAwMDAwMDYwNDQwMDA4MDAwMDAwMDAwMDA0MDAwMDYwODBDRgotOjEwQzFFMDAwMDAwODAwMDAwMDAwMDAwODAwMDA2MEMwMDA0MDAwMDhENwotOjEwQzFGMDAwMDAwMDAwMDgwMDAwNjAwMDAwMDgwMDAwMDAwMDAwMDJDRAotOjEwQzIwMDAwMDAwMDYwMDIwMDA4MDAwMDAwMDAwMDAxMDAwMDYwMDQ1RgotOjEwQzIxMDAwMDAwODAwMDAwMDAwMDAwMjAwMDA2MzQwMDAwODAwMDA2OQotOjEwQzIyMDAwMDAwMDAwMDgwMDAwNjM4MDAwMDgwMDAwMDAwMDAwMDQxNwotOjEwQzIzMDAwMDAwMDYzODQwMDA4MDAwMDAwMDAwMDAxMDAwMDYzQzBFQgotOjEwQzI0MDAwMDAwODAwMDAwMDAwMDAwMjAwMDA2M0M0MDAwODAwMDBCNQotOjEwQzI1MDAwMDAwMDAwMDIwMDAwNjQwMDAwMDgwMDAwMDAwMDAwMDQ2QwotOjEwQzI2MDAwMDAwMDcwMDAwMDEwMDAwMDAwMDAwMDA0MDAwMDcwMDRENgotOjEwQzI3MDAwMDAxMDAwMDAwMDAwMDAwNDAwMDA3MDA4MDAxMDAwMDAyMgotOjEwQzI4MDAwMDAwMDAwMDQwMDAwOTAwMDAwMDgwMDAwMDAwMDAwMDIxMAotOjEwQzI5MDAwMDAwMDkwMDIwMDA4MDAwMDAwMDAwMDAxMDAwMDkwMDQ2RgotOjEwQzJBMDAwMDAwODAwMDAwMDAwMDAwMjAwMDA5MDQwMDAwODAwMDBBQwotOjEwQzJCMDAwMDAwMDAwMDIwMDAwOTA0NDAwMDgwMDAwMDAwMDAwMDI5RQotOjEwQzJDMDAwMDAwMDkwNDYwMDA4MDAwMDAwMDAwMDAyMDAwMDk2NDhCMAotOjEwQzJEMDAwMDAwODAwMDAwMDAwMDAwODAwMDA5MDgwMDAwODAwMDAzNgotOjEwQzJFMDAwMDAwMDAwMDIwMDAwOTA4NDAwMDgwMDAwMDAwMDAwMDIyRQotOjEwQzJGMDAwMDAwMDk2ODgwMDA4MDAwMDAwMDAwMDA4MDAwMDgwNDA1MAotOjEwQzMwMDAwMDAwODAwMDAwMDAwMDAwMTAwMDA4MDQxMDAwODAwMDA1QgotOjEwQzMxMDAwMDAwMDAwMDEwMDAwODA0MjAwMDgwMDAwMDAwMDAwMDE1MQotOjEwQzMyMDAwMDAwMDgwNDMwMDA4MDAwMDAwMDAwMDAxMDAwMDgwMDBDMQotOjEwQzMzMDAwMDAwODAwMDAwMDAwMDAwMjAwMDA4MDAyMDAwODAwMDA2OQotOjEwQzM0MDAwMDAwMDAwMDEwMDAwODAwNDAwMDgwMDAwMDAwMDAwMDI1RQotOjEwQzM1MDAwMDAwMDgwQzAwMDA4MDAwMDAwMDAwMDAyMDAwMDgwQzI1MQotOjEwQzM2MDAwMDAwODAwMDAwMDAwMDAwMjAwMDA4MEM0MDAwODAwMDA3NwotOjEwQzM3MDAwMDAwMDAwMDIwMDAwODA4MDAwMDgwMDAwMDAwMDAwMDFCMgotOjEwQzM4MDAwMDAwMDgwODEwMDA4MDAwMDAwMDAwMDAxMDAwMDgwODJBMQotOjEwQzM5MDAwMDAwODAwMDAwMDAwMDAwMTAwMDA4MDgzMDAwODAwMDA4OQotOjEwQzNBMDAwMDAwMDAwMDEwMDAwODA4NDAwMDgwMDAwMDAwMDAwMDE3RgotOjEwQzNCMDAwMDAwMDgwODUwMDA4MDAwMDAwMDAwMDAxMDAwMDgwODY2OQotOjEwQzNDMDAwMDAwODAwMDAwMDAwMDAwMTAwMDA2MDAwMDAwODAwMDBGQwotOjEwQzNEMDAwMDAwMDAwMDIwMDAwNjAwMjAwMDgwMDAwMDAwMDAwMDFGMAotOjEwQzNFMDAwMDAwMDYwMDQwMDA4MDAwMDAwMDAwMDAyMDAwMDYwNDIzRAotOjEwQzNGMDAwMDBDMDAwMTgwMDAwMDAwMjAwMDA2MDQwMDBDMDAwMThFQgotOjEwQzQwMDAwMDAwMDAwMDIwMDAwNjA0QzAwQzAwMDE4MDAwMDAwMDg5RQotOjEwQzQxMDAwMDAwMDYwNDQwMEMwMDAxODAwMDAwMDA4MDAwMDYwNTdFMQotOjEwQzQyMDAwMDBDMDAwMTgwMDAwMDAwMTAwMDA2MDU0MDBDMDAwMThBNwotOjEwQzQzMDAwMDAwMDAwMDIwMDAwNjA1NjAwQzAwMDE4MDAwMDAwMDE2QgotOjEwQzQ0MDAwMDAwMDY2NDAwMDA4MDAwMDAwMDAwMDA4MDAwMDY2ODA1MAotOjEwQzQ1MDAwMDAwODAwMDAwMDAwMDAwODAwMDA2NkMwMDAwODAwMDA5RQotOjEwQzQ2MDAwMDAwMDAwMDgwMDAwREE0MjAwMTgwMDAwMDAwMDAwMDI4RQotOjEwQzQ3MDAwMDAwMERFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwMDBCRQotOjEwQzQ4MDAwMDAwMDAwMDAwMDAwMDAwNDAwMDBEMEMwMDAwMDAwMDAxOAotOjEwQzQ5MDAwMDAwMDAwMDQwMDAwRDBDNDAwMDAwMDAwMDAwMDAwMDQwMAotOjEwQzRBMDAwMDAwMEQwQzgwMDAwMDAwMDAwMDAwMDA0MDAwMEQwQ0M1NAotOjEwQzRCMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDBEMEQwMDAwMDAwMDBEOAotOjEwQzRDMDAwMDAwMDAwMDQwMDAwRDBENDAwMDAwMDAwMDAwMDAwMDRDMAotOjEwQzREMDAwMDAwMEQwRDgwMDAwMDAwMDAwMDAwMDA0MDAwMEQwQzAyMAotOjEwQzRFMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDBEQjAwMDAwMDAwMDA1MQotOjEwQzRGMDAwMDAwMDAwMDQwMDAwREIwMDAwMDAwMDAwMDAwMDAwNjhGNQotOjEwQzUwMDAwMDAwMEI5NDgwMDAwMDAwMDAwMDAwMDAwMDAwMEQwMDA1QQotOjEwQzUxMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDBCMEMwMDAwMDAwMDBBNwotOjEwQzUyMDAwMDAwMDAwMDQwMDAwQjBDNDAwMDAwMDAwMDAwMDAwMDQ4RgotOjEwQzUzMDAwMDAwMEIwQzgwMDAwMDAwMDAwMDAwMDA0MDAwMEIwQzAwRgotOjEwQzU0MDAwMDAwMDAwMDAwMDAwMDAxMDAwMDBENkIwMDAwMDAwMDA1NQotOjEwQzU1MDAwMDAwMDAwMDQwMDAwRDZCNDAwMDAwMDAwMDAwMDAwMDQ0OQotOjEwQzU2MDAwMDAwMEQ2QjgwMDAwMDAwMDAwMDAwMDA0MDAwMEQ2QkNBNwotOjEwQzU3MDAwMDAwMDAwMDAwMDAwMDAwNDAwMDBENkIwMDAwMDAwMDAzMQotOjEwQzU4MDAwMDAwMDAwMTAwMDAwRDM0ODAwMDAwMDAwMDAwMDAwMDg3OAotOjEwQzU5MDAwMDAwMEQzNTgwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMTBFMAotOjEwQzVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMzU4MDAwMDAwMDA2MAotOjEwQzVCMDAwMDAwMDAwMDgwMDAwMDAwMDA2MDIwNTAwMDAwMDAwMDA2NgotOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2JueDJ4L2JueDJ4LWUyLTYuMi45LjAuZncuaWhleCBiL2Zpcm13YXJlL2JueDJ4L2JueDJ4LWUyLTYuMi45LjAuZncuaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDA1ZTcxCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvYm54MngvYm54MngtZTItNi4yLjkuMC5mdy5paGV4CkBAIC0wLDAgKzEsMTU0NzMgQEAKKzoxMDAwMDAwMDAwMDA1MzEwMDAwMDAwNjgwMDAwMDcwQzAwMDA1MzgwM0YKKzoxMDAwMTAwMDAwMDAzMTgwMDAwMDVBOTAwMDAwMDBCMDAwMDA4QzE4RjEKKzoxMDAwMjAwMDAwMDBDMTM0MDAwMDhDRDAwMDAwMDBEODAwMDE0RTA4NTAKKzoxMDAwMzAwMDAwMDBGMjY0MDAwMTRFRTgwMDAwMDA3NDAwMDI0MTUwMkMKKzoxMDAwNDAwMDAwMDA1MjUwMDAwMjQxQzgwMDAwMDBCNDAwMDI5NDIwOTkKKzoxMDAwNTAwMDAwMDEyMUVDMDAwMjk0RDgwMDAwMEZGQzAwMDNCNkM4OTgKKzoxMDAwNjAwMDAwMDAwMDA0MDAwM0M2QzgwMjA0MDA0ODAwMDAwMDBGOUUKKzoxMDAwNzAwMDAyMDQwMDU0MDAwMDAwNDUwMjA0MDA1QzAwMDAwMDA2NzkKKzoxMDAwODAwMDAyMDQwMDcwMDAwMDAwMDQwMjA0MDA3ODAwMDAwMDAwNzgKKzoxMDAwOTAwMDAyMDQwMDdDMTIxNzAwMDAwMjA0MDA4MDIyMTcwMDAwRjYKKzoxMDAwQTAwMDAyMDQwMDg0MzIxNzAwMDAwNjA0MDA4ODAwMDAwMDA1RTYKKzoxMDAwQjAwMDAyMDQwMDlDMTIxNTAwMDAwMjA0MDBBMDIyMTUwMDAwOUEKKzoxMDAwQzAwMDAyMDQwMEE0MzIxNTAwMDAwNjA0MDBBODAwMDAwMDA0ODkKKzoxMDAwRDAwMDAyMDQwMEI4MDIxMDAwMDAwMjA0MDBCQzAwMTAwMDAwN0UKKzoxMDAwRTAwMDAyMDQwMEMwMTAxMDAwMDAwMjA0MDBDNDIwMTAwMDAwMzAKKzoxMDAwRjAwMDAyMDQwMEM4MzAxMDAwMDAwMjA0MDBDQzQwMTAwMDAwRDAKKzoxMDAxMDAwMDA2MDQwMEQwMDAwMDAwMDMwMjA0MDBEQzAwMTAwMDAwMjAKKzoxMDAxMTAwMDAyMDQwMEUwMTIxNDAwMDAwMjA0MDBFNDIyMTQwMDAwQjMKKzoxMDAxMjAwMDAyMDQwMEU4MzIxNDAwMDAwMjA0MDBFQzQyMTQwMDAwNTMKKzoxMDAxMzAwMDA2MDQwMEYwMDAwMDAwMDMwMTA0MDEyNDAwMDAwMDAwOTgKKzoxMDAxNDAwMDAxMDQwMTI4MDAwMDAwMDAwMTA0MDEyQzAwMDAwMDAwNEYKKzoxMDAxNTAwMDAxMDQwMTMwMDAwMDAwMDAwMjA0MDFEMDAwMDA4OTA2MDMKKzoxMDAxNjAwMDAyMDQwMjU4MDAwMDAwMzYwMjA0MDI1QzAwMDAwMDM2NUYKKzoxMDAxNzAwMDAyMDQwMjYwMDgxMDAwMDAwMjA0MDI2NDA4MTAwMDAwN0IKKzoxMDAxODAwMDAyMDQwMDA0MDAwMDAwRkYwMjA0MDAwODAwMDAwMEZGNTkKKzoxMDAxOTAwMDAyMDQwMDBDMDAwMDAwRkYwMjA0MDAxMDAwMDAwMEZGMzkKKzoxMDAxQTAwMDAyMDQwMDE0MDAwMDAwN0YwMjA0MDAxODAwMDAwMEZGOTkKKzoxMDAxQjAwMDAyMDQwMDFDMDAwMDAwRkYwMjA0MDAyMDAwMDAwMEZGRjkKKzoxMDAxQzAwMDAyMDQwMDI0MDAwMDAwM0UwMjA0MDAyODAwMDAwMDAwOTkKKzoxMDAxRDAwMDAyMDQwMDJDMDAwMDAwM0YwMjA0MDAzMDAwMDAwMDNGMzkKKzoxMDAxRTAwMDAyMDQwMDM0MDAwMDAwM0YwMjA0MDAzODAwMDAwMDNGMTkKKzoxMDAxRjAwMDAyMDQwMDNDMDAwMDAwM0YwMjA0MDA0MDAwMDAwMDNGRjkKKzoxMDAyMDAwMDAyMDQwMDQ0MDAwMDAwM0YwMjA0MDRDQzAwMDAwMDAxOEUKKzoxMDAyMTAwMDAyMDQyMDA4MDAwMDAyMTEwMjA0MjAwQzAwMDAwMjAwNjkKKzoxMDAyMjAwMDAyMDQyMDEwMDAwMDAyMDQwMjA0MjAxNDAwMDAwMjE5M0QKKzoxMDAyMzAwMDAyMDQyMDFDMDAwMEZGRkYwMjA0MjAyMDAwMDBGRkZGM0EKKzoxMDAyNDAwMDAyMDQyMDI0MDAwMEZGRkYwMjA0MjAyODAwMDBGRkZGMUEKKzoxMDAyNTAwMDAyMDQyMDM4MDAwMDAwMjAwNjA0MjAzQzAwMDAwMDBGQUIKKzoxMDAyNjAwMDAyMDQyMDc4MDAwMDAwMjEwNjA0MjA3QzAwMDAwMDBGMUEKKzoxMDAyNzAwMDAyMDQyMEI4MDAwMDAwMDEwNjA0MjBCQzAwMDAwMDBGQUEKKzoxMDAyODAwMDAyMDQyMEY4MDAwMDAwMDEwNjA0MjBGQzAwMDAwMDNGRUEKKzoxMDAyOTAwMDAyMDQyMUY4MDAwMDAwMDEwNjA0MjFGQzAwMDAwMDBGMDgKKzoxMDAyQTAwMDAyMDQyMjM4MDdGRkZGRkYwMjA0MjIzQzAwMDAwMDdGMDcKKzoxMDAyQjAwMDAyMDQyMjQwMDdGRkZGRkYwMjA0MjI0NDAwMDAwMDNGMjcKKzoxMDAyQzAwMDAxMDQyMjQ4MDAwMDAwMDAwMTA0MjI0QzAwMDAwMDAwNEMKKzoxMDAyRDAwMDAxMDQyMjUwMDAwMDAwMDAwMTA0MjI1NDAwMDAwMDAwMkMKKzoxMDAyRTAwMDAxMDQyMjU4MDAwMDAwMDAwMTA0MjI1QzAwMDAwMDAwMEMKKzoxMDAyRjAwMDAxMDQyMjYwMDAwMDAwMDAwMTA0MjI2NDAwMDAwMDAwRUMKKzoxMDAzMDAwMDAxMDQyMjY4MDAwMDAwMDAwMTA0MjI2QzAwMDAwMDAwQ0IKKzoxMDAzMTAwMDAxMDQyMjcwMDAwMDAwMDAwMTA0MjI3NDAwMDAwMDAwQUIKKzoxMDAzMjAwMDAxMDQyMjc4MDAwMDAwMDAwMTA0MjI3QzAwMDAwMDAwOEIKKzoxMDAzMzAwMDAyMDQyMkMwMDAwMEZGRkYwMjA0MjJDNDAwMDBGRkZGRUQKKzoxMDAzNDAwMDAyMDQyMkM4MDAwMEZGRkYwMjA0MjJDQzAwMDBGRkZGQ0QKKzoxMDAzNTAwMDBDMDQyMDAwMDAwMDAzRTgwQTA0MjAwMDAwMDAwMDAxNTMKKzoxMDAzNjAwMDBCMDQyMDAwMDAwMDAwMDMwNjA1NDAwMDAwMDAwRDAwMDMKKzoxMDAzNzAwMDAyMDUwMDQ0MDAwMDAwMjAwMjA1MDA0ODAwMDAwMDMyOTEKKzoxMDAzODAwMDAyMDUwMDkwMDIxNTAwMjAwMjA1MDA5NDAyMTUwMDIwQ0QKKzoxMDAzOTAwMDAyMDUwMDk4MDAwMDAwMzAwMjA1MDA5QzA4MTAwMDAwRDMKKzoxMDAzQTAwMDAyMDUwMEEwMDAwMDAwMzYwMjA1MDBBNDAwMDAwMDMwOTUKKzoxMDAzQjAwMDAyMDUwMEE4MDAwMDAwMzEwMjA1MDBCMDAwMDAwMDA0QTIKKzoxMDAzQzAwMDAyMDUwMEI0MDAwMDAwMDUwMjA1MDBDMDAwMDAwMDAwQTYKKzoxMDAzRDAwMDAyMDUwMEM0MDAwMDAwMDQwMjA1MDBENDAwMDAwMDAxNzIKKzoxMDAzRTAwMDAyMDUwMTE0MDAwMDAwMDEwMjA1MDExQzAwMDAwMDAxQ0IKKzoxMDAzRjAwMDAyMDUwMTIwMDAwMDAwMDIwMjA1MDIwNDAwMDAwMDAxQzUKKzoxMDA0MDAwMDAyMDUwMjBDMDAwMDAwNDAwMjA1MDIxMDAwMDAwMDQwM0UKKzoxMDA0MTAwMDAyMDUwMjFDMDAwMDAwMjAwMjA1MDIyMDAwMDAwMDFDNTIKKzoxMDA0MjAwMDAyMDUwMjI0MDAwMDAwMjAwNjA1MDI0MDAwMDAwMDBBMjgKKzoxMDA0MzAwMDA0MDUwMjgwMDAyMDAwMDAwMjA1MDA1MDAwMDAwMDA3QjMKKzoxMDA0NDAwMDAyMDUwMDU0MDAwMDAwMDcwMjA1MDA1ODAwMDAwMDAwRUIKKzoxMDA0NTAwMDAyMDUwMDVDMDAwMDAwMDgwMjA1MDA2MDAwMDAwMDAxQzkKKzoxMDA0NjAwMDA2MDUwMDY0MDAwMDAwMDMwMjA1MDBEODAwMDAwMDA2MzUKKzoxMDA0NzAwMDAyMDUwMDA0MDAwMDAwMDEwMjA1MDAwODAwMDAwMDAxNjAKKzoxMDA0ODAwMDAyMDUwMDBDMDAwMDAwMDEwMjA1MDAxMDAwMDAwMDAxNDAKKzoxMDA0OTAwMDAyMDUwMDE0MDAwMDAwMDEwMjA1MDAxODAwMDAwMDAxMjAKKzoxMDA0QTAwMDAyMDUwMDFDMDAwMDAwMDEwMjA1MDAyMDAwMDAwMDAxMDAKKzoxMDA0QjAwMDAyMDUwMDI0MDAwMDAwMDEwMjA1MDAyODAwMDAwMDAxRTAKKzoxMDA0QzAwMDAyMDUwMDJDMDAwMDAwMDEwMjA1MDAzMDAwMDAwMDAxQzAKKzoxMDA0RDAwMDAyMDUwMDM0MDAwMDAwMDEwMjA1MDAzODAwMDAwMDAxQTAKKzoxMDA0RTAwMDAyMDUwMDNDMDAwMDAwMDEwMjA1MDA0MDAwMDAwMDAxODAKKzoxMDA0RjAwMDAyMDUwMEUwMDAwMDAwMEQwMjA1MDBFODAwMDAwMDAwMTkKKzoxMDA1MDAwMDAyMDUwMEYwMDAwMDAwMDAwMjA1MDBGODAwMDAwMDAwRjUKKzoxMDA1MTAwMDAyMDUwMEU0MDAwMDAwMkQwMjA1MDBFQzAwMDAwMDIwQjAKKzoxMDA1MjAwMDAyMDUwMEY0MDAwMDAwMjAwMjA1MDBGQzAwMDAwMDIwOEQKKzoxMDA1MzAwMDAyMDUwMEUwMDAwMDAwMUQwMjA1MDBFODAwMDAwMDEwQjgKKzoxMDA1NDAwMDAyMDUwMEYwMDAwMDAwMTAwMjA1MDBGODAwMDAwMDEwOTUKKzoxMDA1NTAwMDAyMDUwMEU0MDAwMDAwM0QwMjA1MDBFQzAwMDAwMDMwNTAKKzoxMDA1NjAwMDAyMDUwMEY0MDAwMDAwMzAwMjA1MDBGQzAwMDAwMDMwMkQKKzoxMDA1NzAwMDAyMDUwMEUwMDAwMDAwNEQwMjA1MDBFODAwMDAwMDQwMTgKKzoxMDA1ODAwMDAyMDUwMEYwMDAwMDAwNDAwMjA1MDBGODAwMDAwMDQwRjUKKzoxMDA1OTAwMDAyMDUwMEU0MDAwMDAwNkQwMjA1MDBFQzAwMDAwMDYwQjAKKzoxMDA1QTAwMDAyMDUwMEY0MDAwMDAwNjAwMjA1MDBGQzAwMDAwMDYwOEQKKzoxMDA1QjAwMDAyMDUwMEUwMDAwMDAwNUQwMjA1MDBFODAwMDAwMDUwQjgKKzoxMDA1QzAwMDAyMDUwMEYwMDAwMDAwNTAwMjA1MDBGODAwMDAwMDUwOTUKKzoxMDA1RDAwMDAyMDUwMEU0MDAwMDAwN0QwMjA1MDBFQzAwMDAwMDcwNTAKKzoxMDA1RTAwMDAyMDUwMEY0MDAwMDAwNzAwMjA1MDBGQzAwMDAwMDcwMkQKKzoxMDA1RjAwMDA0MDYxMDAwMDIwMDAwMjAwMjA2MDBEQzAwMDAwMDAxREEKKzoxMDA2MDAwMDA0MDYwMjAwMDAwMzAyMjAwMjA2MDBEQzAwMDAwMDAwRDUKKzoxMDA2MTAwMDA3MTgwNDAwMDBBRDAwMDAwODE4MDdEODAwMDUwMjIzRTEKKzoxMDA2MjAwMDA3MUMwMDAwMjk5MjAwMDAwNzFDODAwMDMxMkEwQTY1N0YKKzoxMDA2MzAwMDA3MUQwMDAwMzRBMjE2QjAwNzFEODAwMDJFN0EyM0Q5QjIKKzoxMDA2NDAwMDA3MUUwMDAwMDM1MDJGNzgwODFFMDdGMDNGMDIwMjI1MDYKKzoxMDA2NTAwMDAyMTgwMEJDMDAwMDAwMzAwMTE4MDAwMDAwMDAwMDAwN0IKKzoxMDA2NjAwMDAxMTgwMDA0MDAwMDAwMDAwMTE4MDAwODAwMDAwMDAwNEMKKzoxMDA2NzAwMDAxMTgwMDBDMDAwMDAwMDAwMTE4MDAxMDAwMDAwMDAwMkMKKzoxMDA2ODAwMDAxMTgwMDE0MDAwMDAwMDAwMjE4MDAyMDAwMDAwMDAxMDIKKzoxMDA2OTAwMDAyMTgwMDI0MDAwMDAwMDIwMjE4MDAyODAwMDAwMDAzRDUKKzoxMDA2QTAwMDAyMTgwMDJDMDAwMDAwMDAwMjE4MDAzMDAwMDAwMDA0QjYKKzoxMDA2QjAwMDAyMTgwMDM0MDAwMDAwMDEwMjE4MDAzODAwMDAwMDAwOTkKKzoxMDA2QzAwMDAyMTgwMDNDMDAwMDAwMDEwMjE4MDA0MDAwMDAwMDA0NzUKKzoxMDA2RDAwMDAyMTgwMDQ0MDAwMDAwMDAwMjE4MDA0ODAwMDAwMDAxNTkKKzoxMDA2RTAwMDAyMTgwMDRDMDAwMDAwMDMwMjE4MDA1MDAwMDAwMDAwMzcKKzoxMDA2RjAwMDAyMTgwMDU0MDAwMDAwMDEwMjE4MDA1ODAwMDAwMDA0MTUKKzoxMDA3MDAwMDAyMTgwMDVDMDAwMDAwMDAwMjE4MDA2MDAwMDAwMDAxRjgKKzoxMDA3MTAwMDAyMTgwMDY0MDAwMDAwMDMwMjE4MDA2ODAwMDAwMDAwRDYKKzoxMDA3MjAwMDAyMTgwMDZDMDAwMDAwMDEwMjE4MDA3MDAwMDAwMDA0QjQKKzoxMDA3MzAwMDAyMTgwMDc0MDAwMDAwMDAwMjE4MDA3ODAwMDAwMDA0OTUKKzoxMDA3NDAwMDAyMTgwMDdDMDAwMDAwMDMwNjE4MDA4MDAwMDAwMDAyNzAKKzoxMDA3NTAwMDAyMTgwMEE0MDAwMDdGRkYwMjE4MDBBODAwMDAwM0ZGOTkKKzoxMDA3NjAwMDAyMTgwMjI0MDAwMDAwMDAwMjE4MDIzNDAwMDAwMDAwRjkKKzoxMDA3NzAwMDAyMTgwMjRDMDAwMDAwMDAwMjE4MDJFNDAwMDAwMEZGMTIKKzoxMDA3ODAwMDA2MTgxMDAwMDAwMDA0MDAwMjFCOEJDMDAwMDAwMDAxQ0UKKzoxMDA3OTAwMDAyMUI4MDAwMDAwMDAwMzQwMjFCODA0MDAwMDAwMDE4OTMKKzoxMDA3QTAwMDAyMUI4MDgwMDAwMDAwMEMwMjFCODBDMDAwMDAwMDIwQTMKKzoxMDA3QjAwMDBDMUI4MzAwMDAwODY0NzAwQTFCODMwMDAwMDAwMTU3QjMKKzoxMDA3QzAwMDBCMUI4MzAwMDAwMDA1NUYwQTFCODM0MDAwMDAwMDAwMzQKKzoxMDA3RDAwMDBDMUI4MzQwMDAwMDAyMjYwQjFCODM0MDAwMDAwMDAxMUQKKzoxMDA3RTAwMDAyMUI4MzgwMDAwODY0NzAwMjFCODNDMDAwMDAwMjI2ODUKKzoxMDA3RjAwMDAyMUIxNDgwMDAwMDAwMDEwQTFCMTQ4MDAwMDAwMDAwOEUKKzoxMDA4MDAwMDAyMUI5NDQwMDAwMDAwMDEwNjFCOTQ0ODAwMDAwMDAyRjcKKzoxMDA4MTAwMDA2MUExMDAwMDAwMDAyQjMwNDFBMUFDQzAwMDEwMjI3QzUKKzoxMDA4MjAwMDA2MUExQUQwMDAwMDAwMDgwNjFBMjAwODAwMDAwMEM4QTYKKzoxMDA4MzAwMDA2MUEyMDAwMDAwMDAwMDIwNDFBMUJGODAwOTAwMjI4OEIKKzoxMDA4NDAwMDA2MUEzNzE4MDAwMDAwMDQwNjFBMzcxMDAwMDAwMDAyQ0MKKzoxMDA4NTAwMDA2MUE1MDAwMDAwMDAwMDIwNjFBNTAwODAwMDAwMDA0QUEKKzoxMDA4NjAwMDA2MUE1MDE4MDAwMDAwMDQwNjFBNTAyODAwMDAwMDA0NjAKKzoxMDA4NzAwMDA2MUE1MDM4MDAwMDAwMDQwNjFBNTA0ODAwMDAwMDA0MTAKKzoxMDA4ODAwMDA2MUE1MDU4MDAwMDAwMDQwNjFBNTA2ODAwMDAwMDA0QzAKKzoxMDA4OTAwMDA2MUE1MDc4MDAwMDAwMDIwNDFBNTJDMDAwMDIwMkI4ODIKKzoxMDA4QTAwMDA2MUE0MDUwMDAwMDAwMDYwNDFBNDA2ODAwMDIwMkJBMEUKKzoxMDA4QjAwMDA0MUE0MDQwMDAwNDAyQkMwNDFBODAwMDAwMDEwMkMwNzcKKzoxMDA4QzAwMDA2MUE4MDA0MDAwMDAwMDMwNDFBODAxMDAwMDEwMkMxMEYKKzoxMDA4RDAwMDA2MUE4MDE0MDAwMDAwMDMwNDFBODAyMDAwMDEwMkMyREUKKzoxMDA4RTAwMDA2MUE4MDI0MDAwMDAwMDMwNDFBODAzMDAwMDEwMkMzQUQKKzoxMDA4RjAwMDA2MUE4MDM0MDAwMDAwMDMwNDFBODA0MDAwMDEwMkM0N0MKKzoxMDA5MDAwMDA2MUE4MDQ0MDAwMDAwMDMwNDFBODA1MDAwMDEwMkM1NEEKKzoxMDA5MTAwMDA2MUE4MDU0MDAwMDAwMDMwNDFBODA2MDAwMDEwMkM2MTkKKzoxMDA5MjAwMDA2MUE4MDY0MDAwMDAwMDMwNDFBODA3MDAwMDEwMkM3RTgKKzoxMDA5MzAwMDA2MUE4MDc0MDAwMDAwMDMwNDFBODA4MDAwMDEwMkM4QjcKKzoxMDA5NDAwMDA2MUE4MDg0MDAwMDAwMDMwNDFBODA5MDAwMDEwMkM5ODYKKzoxMDA5NTAwMDA2MUE4MDk0MDAwMDAwMDMwNDFBODBBMDAwMDEwMkNBNTUKKzoxMDA5NjAwMDA2MUE4MEE0MDAwMDAwMDMwNDFBODBCMDAwMDEwMkNCMjQKKzoxMDA5NzAwMDA2MUE4MEI0MDAwMDAwMDMwNDFBODBDMDAwMDEwMkNDRjMKKzoxMDA5ODAwMDA2MUE4MEM0MDAwMDAwMDMwNDFBODBEMDAwMDEwMkNEQzIKKzoxMDA5OTAwMDA2MUE4MEQ0MDAwMDAwMDMwNDFBODBFMDAwMDEwMkNFOTEKKzoxMDA5QTAwMDA2MUE4MEU0MDAwMDAwMDMwNDFBODBGMDAwMDEwMkNGNjAKKzoxMDA5QjAwMDA2MUE4MEY0MDAwMDAwMDMwNDFBODEwMDAwMDEwMkQwMkUKKzoxMDA5QzAwMDA2MUE4MTA0MDAwMDAwMDMwNDFBODExMDAwMDEwMkQxRkMKKzoxMDA5RDAwMDA2MUE4MTE0MDAwMDAwMDMwNDFBODEyMDAwMDEwMkQyQ0IKKzoxMDA5RTAwMDA2MUE4MTI0MDAwMDAwMDMwNDFBODEzMDAwMDEwMkQzOUEKKzoxMDA5RjAwMDA2MUE4MTM0MDAwMDAwMDMwNDFBODE0MDAwMDEwMkQ0NjkKKzoxMDBBMDAwMDA2MUE4MTQ0MDAwMDAwMDMwNDFBODE1MDAwMDEwMkQ1MzcKKzoxMDBBMTAwMDA2MUE4MTU0MDAwMDAwMDMwNDFBODE2MDAwMDEwMkQ2MDYKKzoxMDBBMjAwMDA2MUE4MTY0MDAwMDAwMDMwNDFBODE3MDAwMDEwMkQ3RDUKKzoxMDBBMzAwMDA2MUE4MTc0MDAwMDAwMDMwNDFBODE4MDAwMDEwMkQ4QTQKKzoxMDBBNDAwMDA2MUE4MTg0MDAwMDAwMDMwNDFBODE5MDAwMDEwMkQ5NzMKKzoxMDBBNTAwMDA2MUE4MTk0MDAwMDAwMDMwNDFBODFBMDAwMDEwMkRBNDIKKzoxMDBBNjAwMDA2MUE4MUE0MDAwMDAwMDMwNDFBODFCMDAwMDEwMkRCMTEKKzoxMDBBNzAwMDA2MUE4MUI0MDAwMDAwMDMwNDFBODFDMDAwMDEwMkRDRTAKKzoxMDBBODAwMDA2MUE4MUM0MDAwMDAwMDMwNDFBODFEMDAwMDEwMkREQUYKKzoxMDBBOTAwMDA2MUE4MUQ0MDAwMDAwMDMwNDFBODFFMDAwMDEwMkRFN0UKKzoxMDBBQTAwMDA2MUE4MUU0MDAwMDAwMDMwNDFBODFGMDAwMDEwMkRGNEQKKzoxMDBBQjAwMDA2MUE4MUY0MDAwMDAwMDMwNDFBODIwMDAwMDEwMkUwMUIKKzoxMDBBQzAwMDA2MUE4MjA0MDAwMDAwMDMwNDFBODIxMDAwMDEwMkUxRTkKKzoxMDBBRDAwMDA2MUE4MjE0MDAwMDAwMDMwNDFBODIyMDAwMDEwMkUyQjgKKzoxMDBBRTAwMDA2MUE4MjI0MDAwMDAwMDMwNDFBODIzMDAwMDEwMkUzODcKKzoxMDBBRjAwMDA2MUE4MjM0MDAwMDAwMDMwNDFBODI0MDAwMDEwMkU0NTYKKzoxMDBCMDAwMDA2MUE4MjQ0MDAwMDAwMDMwNDFBODI1MDAwMDEwMkU1MjQKKzoxMDBCMTAwMDA2MUE4MjU0MDAwMDAwMDMwNDFBODI2MDAwMDEwMkU2RjMKKzoxMDBCMjAwMDA2MUE4MjY0MDAwMDAwMDMwNDFBODI3MDAwMDEwMkU3QzIKKzoxMDBCMzAwMDA2MUE4Mjc0MDAwMDAwMDMwNDFBODI4MDAwMDEwMkU4OTEKKzoxMDBCNDAwMDA2MUE4Mjg0MDAwMDAwMDMwNDFBODI5MDAwMDEwMkU5NjAKKzoxMDBCNTAwMDA2MUE4Mjk0MDAwMDAwMDMwNDFBODJBMDAwMDEwMkVBMkYKKzoxMDBCNjAwMDA2MUE4MkE0MDAwMDAwMDMwNDFBODJCMDAwMDEwMkVCRkUKKzoxMDBCNzAwMDA2MUE4MkI0MDAwMDAwMDMwNDFBODJDMDAwMDEwMkVDQ0QKKzoxMDBCODAwMDA2MUE4MkM0MDAwMDAwMDMwNDFBODJEMDAwMDEwMkVEOUMKKzoxMDBCOTAwMDA2MUE4MkQ0MDAwMDAwMDMwNDFBODJFMDAwMDEwMkVFNkIKKzoxMDBCQTAwMDA2MUE4MkU0MDAwMDAwMDMwNDFBODJGMDAwMDEwMkVGM0EKKzoxMDBCQjAwMDA2MUE4MkY0MDAwMDAwMDMwNDFBODMwMDAwMDEwMkYwMDgKKzoxMDBCQzAwMDA2MUE4MzA0MDAwMDAwMDMwNDFBODMxMDAwMDEwMkYxRDYKKzoxMDBCRDAwMDA2MUE4MzE0MDAwMDAwMDMwNDFBODMyMDAwMDEwMkYyQTUKKzoxMDBCRTAwMDA2MUE4MzI0MDAwMDAwMDMwNDFBODMzMDAwMDEwMkYzNzQKKzoxMDBCRjAwMDA2MUE4MzM0MDAwMDAwMDMwNDFBODM0MDAwMDEwMkY0NDMKKzoxMDBDMDAwMDA2MUE4MzQ0MDAwMDAwMDMwNDFBODM1MDAwMDEwMkY1MTEKKzoxMDBDMTAwMDA2MUE4MzU0MDAwMDAwMDMwNDFBODM2MDAwMDEwMkY2RTAKKzoxMDBDMjAwMDA2MUE4MzY0MDAwMDAwMDMwNDFBODM3MDAwMDEwMkY3QUYKKzoxMDBDMzAwMDA2MUE4Mzc0MDAwMDAwMDMwNDFBODM4MDAwMDEwMkY4N0UKKzoxMDBDNDAwMDA2MUE4Mzg0MDAwMDAwMDMwNDFBODM5MDAwMDEwMkY5NEQKKzoxMDBDNTAwMDA2MUE4Mzk0MDAwMDAwMDMwNDFBODNBMDAwMDEwMkZBMUMKKzoxMDBDNjAwMDA2MUE4M0E0MDAwMDAwMDMwNDFBODNCMDAwMDEwMkZCRUIKKzoxMDBDNzAwMDA2MUE4M0I0MDAwMDAwMDMwNDFBODNDMDAwMDEwMkZDQkEKKzoxMDBDODAwMDA2MUE4M0M0MDAwMDAwMDMwNDFBODNEMDAwMDEwMkZEODkKKzoxMDBDOTAwMDA2MUE4M0Q0MDAwMDAwMDMwNDFBODNFMDAwMDEwMkZFNTgKKzoxMDBDQTAwMDA2MUE4M0U0MDAwMDAwMDMwNDFBODNGMDAwMDEwMkZGMjcKKzoxMDBDQjAwMDA2MUE4M0Y0MDAwMDAwMDMwNDFBODQwMDAwMDEwMzAwRjQKKzoxMDBDQzAwMDA2MUE4NDA0MDAwMDAwMDMwNDFBODQxMDAwMDEwMzAxQzIKKzoxMDBDRDAwMDA2MUE4NDE0MDAwMDAwMDMwNDFBODQyMDAwMDEwMzAyOTEKKzoxMDBDRTAwMDA2MUE4NDI0MDAwMDAwMDMwNDFBODQzMDAwMDEwMzAzNjAKKzoxMDBDRjAwMDA2MUE4NDM0MDAwMDAwMDMwNDFBODQ0MDAwMDEwMzA0MkYKKzoxMDBEMDAwMDA2MUE4NDQ0MDAwMDAwMDMwNDFBODQ1MDAwMDEwMzA1RkQKKzoxMDBEMTAwMDA2MUE4NDU0MDAwMDAwMDMwNDFBODQ2MDAwMDEwMzA2Q0MKKzoxMDBEMjAwMDA2MUE4NDY0MDAwMDAwMDMwNDFBODQ3MDAwMDEwMzA3OUIKKzoxMDBEMzAwMDA2MUE4NDc0MDAwMDAwMDMwNDFBODQ4MDAwMDEwMzA4NkEKKzoxMDBENDAwMDA2MUE4NDg0MDAwMDAwMDMwNDFBODQ5MDAwMDEwMzA5MzkKKzoxMDBENTAwMDA2MUE4NDk0MDAwMDAwMDMwNDFBODRBMDAwMDEwMzBBMDgKKzoxMDBENjAwMDA2MUE4NEE0MDAwMDAwMDMwNDFBODRCMDAwMDEwMzBCRDcKKzoxMDBENzAwMDA2MUE4NEI0MDAwMDAwMDMwNDFBODRDMDAwMDEwMzBDQTYKKzoxMDBEODAwMDA2MUE4NEM0MDAwMDAwMDMwNDFBODREMDAwMDEwMzBENzUKKzoxMDBEOTAwMDA2MUE4NEQ0MDAwMDAwMDMwNDFBODRFMDAwMDEwMzBFNDQKKzoxMDBEQTAwMDA2MUE4NEU0MDAwMDAwMDMwNDFBODRGMDAwMDEwMzBGMTMKKzoxMDBEQjAwMDA2MUE4NEY0MDAwMDAwMDMwNDFBODUwMDAwMDEwMzEwRTEKKzoxMDBEQzAwMDA2MUE4NTA0MDAwMDAwMDMwNDFBODUxMDAwMDEwMzExQUYKKzoxMDBERDAwMDA2MUE4NTE0MDAwMDAwMDMwNDFBODUyMDAwMDEwMzEyN0UKKzoxMDBERTAwMDA2MUE4NTI0MDAwMDAwMDMwNDFBODUzMDAwMDEwMzEzNEQKKzoxMDBERjAwMDA2MUE4NTM0MDAwMDAwMDMwNDFBODU0MDAwMDEwMzE0MUMKKzoxMDBFMDAwMDA2MUE4NTQ0MDAwMDAwMDMwNDFBODU1MDAwMDEwMzE1RUEKKzoxMDBFMTAwMDA2MUE4NTU0MDAwMDAwMDMwNDFBODU2MDAwMDEwMzE2QjkKKzoxMDBFMjAwMDA2MUE4NTY0MDAwMDAwMDMwNDFBODU3MDAwMDEwMzE3ODgKKzoxMDBFMzAwMDA2MUE4NTc0MDAwMDAwMDMwNDFBODU4MDAwMDEwMzE4NTcKKzoxMDBFNDAwMDA2MUE4NTg0MDAwMDAwMDMwNDFBODU5MDAwMDEwMzE5MjYKKzoxMDBFNTAwMDA2MUE4NTk0MDAwMDAwMDMwNDFBODVBMDAwMDEwMzFBRjUKKzoxMDBFNjAwMDA2MUE4NUE0MDAwMDAwMDMwNDFBODVCMDAwMDEwMzFCQzQKKzoxMDBFNzAwMDA2MUE4NUI0MDAwMDAwMDMwNDFBODVDMDAwMDEwMzFDOTMKKzoxMDBFODAwMDA2MUE4NUM0MDAwMDAwMDMwNDFBODVEMDAwMDEwMzFENjIKKzoxMDBFOTAwMDA2MUE4NUQ0MDAwMDAwMDMwNDFBODVFMDAwMDEwMzFFMzEKKzoxMDBFQTAwMDA2MUE4NUU0MDAwMDAwMDMwNDFBODVGMDAwMDEwMzFGMDAKKzoxMDBFQjAwMDA2MUE4NUY0MDAwMDAwMDMwNDFBODYwMDAwMDEwMzIwQ0UKKzoxMDBFQzAwMDA2MUE4NjA0MDAwMDAwMDMwNDFBODYxMDAwMDEwMzIxOUMKKzoxMDBFRDAwMDA2MUE4NjE0MDAwMDAwMDMwNDFBODYyMDAwMDEwMzIyNkIKKzoxMDBFRTAwMDA2MUE4NjI0MDAwMDAwMDMwNDFBODYzMDAwMDEwMzIzM0EKKzoxMDBFRjAwMDA2MUE4NjM0MDAwMDAwMDMwNDFBODY0MDAwMDEwMzI0MDkKKzoxMDBGMDAwMDA2MUE4NjQ0MDAwMDAwMDMwNDFBODY1MDAwMDEwMzI1RDcKKzoxMDBGMTAwMDA2MUE4NjU0MDAwMDAwMDMwNDFBODY2MDAwMDEwMzI2QTYKKzoxMDBGMjAwMDA2MUE4NjY0MDAwMDAwMDMwNDFBODY3MDAwMDEwMzI3NzUKKzoxMDBGMzAwMDA2MUE4Njc0MDAwMDAwMDMwNDFBODY4MDAwMDEwMzI4NDQKKzoxMDBGNDAwMDA2MUE4Njg0MDAwMDAwMDMwNDFBODY5MDAwMDEwMzI5MTMKKzoxMDBGNTAwMDA2MUE4Njk0MDAwMDAwMDMwNDFBODZBMDAwMDEwMzJBRTIKKzoxMDBGNjAwMDA2MUE4NkE0MDAwMDAwMDMwNDFBODZCMDAwMDEwMzJCQjEKKzoxMDBGNzAwMDA2MUE4NkI0MDAwMDAwMDMwNDFBODZDMDAwMDEwMzJDODAKKzoxMDBGODAwMDA2MUE4NkM0MDAwMDAwMDMwNDFBODZEMDAwMDEwMzJENEYKKzoxMDBGOTAwMDA2MUE4NkQ0MDAwMDAwMDMwNDFBODZFMDAwMDEwMzJFMUUKKzoxMDBGQTAwMDA2MUE4NkU0MDAwMDAwMDMwNDFBODZGMDAwMDEwMzJGRUQKKzoxMDBGQjAwMDA2MUE4NkY0MDAwMDAwMDMwNDFBODcwMDAwMDEwMzMwQkIKKzoxMDBGQzAwMDA2MUE4NzA0MDAwMDAwMDMwNDFBODcxMDAwMDEwMzMxODkKKzoxMDBGRDAwMDA2MUE4NzE0MDAwMDAwMDMwNDFBODcyMDAwMDEwMzMyNTgKKzoxMDBGRTAwMDA2MUE4NzI0MDAwMDAwMDMwNDFBODczMDAwMDEwMzMzMjcKKzoxMDBGRjAwMDA2MUE4NzM0MDAwMDAwMDMwNDFBODc0MDAwMDEwMzM0RjYKKzoxMDEwMDAwMDA2MUE4NzQ0MDAwMDAwMDMwNDFBODc1MDAwMDEwMzM1QzQKKzoxMDEwMTAwMDA2MUE4NzU0MDAwMDAwMDMwNDFBODc2MDAwMDEwMzM2OTMKKzoxMDEwMjAwMDA2MUE4NzY0MDAwMDAwMDMwNDFBODc3MDAwMDEwMzM3NjIKKzoxMDEwMzAwMDA2MUE4Nzc0MDAwMDAwMDMwNDFBODc4MDAwMDEwMzM4MzEKKzoxMDEwNDAwMDA2MUE4Nzg0MDAwMDAwMDMwNDFBODc5MDAwMDEwMzM5MDAKKzoxMDEwNTAwMDA2MUE4Nzk0MDAwMDAwMDMwNDFBODdBMDAwMDEwMzNBQ0YKKzoxMDEwNjAwMDA2MUE4N0E0MDAwMDAwMDMwNDFBODdCMDAwMDEwMzNCOUUKKzoxMDEwNzAwMDA2MUE4N0I0MDAwMDAwMDMwNDFBODdDMDAwMDEwMzNDNkQKKzoxMDEwODAwMDA2MUE4N0M0MDAwMDAwMDMwNDFBODdEMDAwMDEwMzNEM0MKKzoxMDEwOTAwMDA2MUE4N0Q0MDAwMDAwMDMwNDFBODdFMDAwMDEwMzNFMEIKKzoxMDEwQTAwMDA2MUE4N0U0MDAwMDAwMDMwNDFBODdGMDAwMDEwMzNGREEKKzoxMDEwQjAwMDA2MUE4N0Y0MDAwMDAwMDMwNDFBODgwMDAwMDEwMzQwQTgKKzoxMDEwQzAwMDA2MUE4ODA0MDAwMDAwMDMwNDFBODgxMDAwMDEwMzQxNzYKKzoxMDEwRDAwMDA2MUE4ODE0MDAwMDAwMDMwNDFBODgyMDAwMDEwMzQyNDUKKzoxMDEwRTAwMDA2MUE4ODI0MDAwMDAwMDMwNDFBODgzMDAwMDEwMzQzMTQKKzoxMDEwRjAwMDA2MUE4ODM0MDAwMDAwMDMwNDFBODg0MDAwMDEwMzQ0RTMKKzoxMDExMDAwMDA2MUE4ODQ0MDAwMDAwMDMwNDFBODg1MDAwMDEwMzQ1QjEKKzoxMDExMTAwMDA2MUE4ODU0MDAwMDAwMDMwNDFBODg2MDAwMDEwMzQ2ODAKKzoxMDExMjAwMDA2MUE4ODY0MDAwMDAwMDMwNDFBODg3MDAwMDEwMzQ3NEYKKzoxMDExMzAwMDA2MUE4ODc0MDAwMDAwMDMwNDFBODg4MDAwMDEwMzQ4MUUKKzoxMDExNDAwMDA2MUE4ODg0MDAwMDAwMDMwNDFBODg5MDAwMDEwMzQ5RUQKKzoxMDExNTAwMDA2MUE4ODk0MDAwMDAwMDMwNDFBODhBMDAwMDEwMzRBQkMKKzoxMDExNjAwMDA2MUE4OEE0MDAwMDAwMDMwNDFBODhCMDAwMDEwMzRCOEIKKzoxMDExNzAwMDA2MUE4OEI0MDAwMDAwMDMwNDFBODhDMDAwMDEwMzRDNUEKKzoxMDExODAwMDA2MUE4OEM0MDAwMDAwMDMwNDFBODhEMDAwMDEwMzREMjkKKzoxMDExOTAwMDA2MUE4OEQ0MDAwMDAwMDMwNDFBODhFMDAwMDEwMzRFRjgKKzoxMDExQTAwMDA2MUE4OEU0MDAwMDAwMDMwNDFBODhGMDAwMDEwMzRGQzcKKzoxMDExQjAwMDA2MUE4OEY0MDAwMDAwMDMwNDFBODkwMDAwMDEwMzUwOTUKKzoxMDExQzAwMDA2MUE4OTA0MDAwMDAwMDMwNDFBODkxMDAwMDEwMzUxNjMKKzoxMDExRDAwMDA2MUE4OTE0MDAwMDAwMDMwNDFBODkyMDAwMDEwMzUyMzIKKzoxMDExRTAwMDA2MUE4OTI0MDAwMDAwMDMwNDFBODkzMDAwMDEwMzUzMDEKKzoxMDExRjAwMDA2MUE4OTM0MDAwMDAwMDMwNDFBODk0MDAwMDEwMzU0RDAKKzoxMDEyMDAwMDA2MUE4OTQ0MDAwMDAwMDMwNDFBODk1MDAwMDEwMzU1OUUKKzoxMDEyMTAwMDA2MUE4OTU0MDAwMDAwMDMwNDFBODk2MDAwMDEwMzU2NkQKKzoxMDEyMjAwMDA2MUE4OTY0MDAwMDAwMDMwNDFBODk3MDAwMDEwMzU3M0MKKzoxMDEyMzAwMDA2MUE4OTc0MDAwMDAwMDMwNDFBODk4MDAwMDEwMzU4MEIKKzoxMDEyNDAwMDA2MUE4OTg0MDAwMDAwMDMwNDFBODk5MDAwMDEwMzU5REEKKzoxMDEyNTAwMDA2MUE4OTk0MDAwMDAwMDMwNDFBODlBMDAwMDEwMzVBQTkKKzoxMDEyNjAwMDA2MUE4OUE0MDAwMDAwMDMwNDFBODlCMDAwMDEwMzVCNzgKKzoxMDEyNzAwMDA2MUE4OUI0MDAwMDAwMDMwNDFBODlDMDAwMDEwMzVDNDcKKzoxMDEyODAwMDA2MUE4OUM0MDAwMDAwMDMwNDFBODlEMDAwMDEwMzVEMTYKKzoxMDEyOTAwMDA2MUE4OUQ0MDAwMDAwMDMwNDFBODlFMDAwMDEwMzVFRTUKKzoxMDEyQTAwMDA2MUE4OUU0MDAwMDAwMDMwNDFBODlGMDAwMDEwMzVGQjQKKzoxMDEyQjAwMDA2MUE4OUY0MDAwMDAwMDMwNDFBOEEwMDAwMDEwMzYwODIKKzoxMDEyQzAwMDA2MUE4QTA0MDAwMDAwMDMwNDFBOEExMDAwMDEwMzYxNTAKKzoxMDEyRDAwMDA2MUE4QTE0MDAwMDAwMDMwNDFBOEEyMDAwMDEwMzYyMUYKKzoxMDEyRTAwMDA2MUE4QTI0MDAwMDAwMDMwNDFBOEEzMDAwMDEwMzYzRUUKKzoxMDEyRjAwMDA2MUE4QTM0MDAwMDAwMDMwNDFBOEE0MDAwMDEwMzY0QkQKKzoxMDEzMDAwMDA2MUE4QTQ0MDAwMDAwMDMwNDFBOEE1MDAwMDEwMzY1OEIKKzoxMDEzMTAwMDA2MUE4QTU0MDAwMDAwMDMwNDFBOEE2MDAwMDEwMzY2NUEKKzoxMDEzMjAwMDA2MUE4QTY0MDAwMDAwMDMwNDFBOEE3MDAwMDEwMzY3MjkKKzoxMDEzMzAwMDA2MUE4QTc0MDAwMDAwMDMwNDFBOEE4MDAwMDEwMzY4RjgKKzoxMDEzNDAwMDA2MUE4QTg0MDAwMDAwMDMwNDFBOEE5MDAwMDEwMzY5QzcKKzoxMDEzNTAwMDA2MUE4QTk0MDAwMDAwMDMwNDFBOEFBMDAwMDEwMzZBOTYKKzoxMDEzNjAwMDA2MUE4QUE0MDAwMDAwMDMwNDFBOEFCMDAwMDEwMzZCNjUKKzoxMDEzNzAwMDA2MUE4QUI0MDAwMDAwMDMwNDFBOEFDMDAwMDEwMzZDMzQKKzoxMDEzODAwMDA2MUE4QUM0MDAwMDAwMDMwNDFBOEFEMDAwMDEwMzZEMDMKKzoxMDEzOTAwMDA2MUE4QUQ0MDAwMDAwMDMwNDFBOEFFMDAwMDEwMzZFRDIKKzoxMDEzQTAwMDA2MUE4QUU0MDAwMDAwMDMwNDFBOEFGMDAwMDEwMzZGQTEKKzoxMDEzQjAwMDA2MUE4QUY0MDAwMDAwMDMwNDFBOEIwMDAwMDEwMzcwNkYKKzoxMDEzQzAwMDA2MUE4QjA0MDAwMDAwMDMwNDFBOEIxMDAwMDEwMzcxM0QKKzoxMDEzRDAwMDA2MUE4QjE0MDAwMDAwMDMwNDFBOEIyMDAwMDEwMzcyMEMKKzoxMDEzRTAwMDA2MUE4QjI0MDAwMDAwMDMwNDFBOEIzMDAwMDEwMzczREIKKzoxMDEzRjAwMDA2MUE4QjM0MDAwMDAwMDMwNDFBOEI0MDAwMDEwMzc0QUEKKzoxMDE0MDAwMDA2MUE4QjQ0MDAwMDAwMDMwNDFBOEI1MDAwMDEwMzc1NzgKKzoxMDE0MTAwMDA2MUE4QjU0MDAwMDAwMDMwNDFBOEI2MDAwMDEwMzc2NDcKKzoxMDE0MjAwMDA2MUE4QjY0MDAwMDAwMDMwNDFBOEI3MDAwMDEwMzc3MTYKKzoxMDE0MzAwMDA2MUE4Qjc0MDAwMDAwMDMwNDFBOEI4MDAwMDEwMzc4RTUKKzoxMDE0NDAwMDA2MUE4Qjg0MDAwMDAwMDMwNDFBOEI5MDAwMDEwMzc5QjQKKzoxMDE0NTAwMDA2MUE4Qjk0MDAwMDAwMDMwNDFBOEJBMDAwMDEwMzdBODMKKzoxMDE0NjAwMDA2MUE4QkE0MDAwMDAwMDMwNDFBOEJCMDAwMDEwMzdCNTIKKzoxMDE0NzAwMDA2MUE4QkI0MDAwMDAwMDMwNDFBOEJDMDAwMDEwMzdDMjEKKzoxMDE0ODAwMDA2MUE4QkM0MDAwMDAwMDMwNDFBOEJEMDAwMDEwMzdERjAKKzoxMDE0OTAwMDA2MUE4QkQ0MDAwMDAwMDMwNDFBOEJFMDAwMDEwMzdFQkYKKzoxMDE0QTAwMDA2MUE4QkU0MDAwMDAwMDMwNDFBOEJGMDAwMDEwMzdGOEUKKzoxMDE0QjAwMDA2MUE4QkY0MDAwMDAwMDMwNDFBOEMwMDAwMDEwMzgwNUMKKzoxMDE0QzAwMDA2MUE4QzA0MDAwMDAwMDMwNDFBOEMxMDAwMDEwMzgxMkEKKzoxMDE0RDAwMDA2MUE4QzE0MDAwMDAwMDMwNDFBOEMyMDAwMDEwMzgyRjkKKzoxMDE0RTAwMDA2MUE4QzI0MDAwMDAwMDMwNDFBOEMzMDAwMDEwMzgzQzgKKzoxMDE0RjAwMDA2MUE4QzM0MDAwMDAwMDMwNDFBOEM0MDAwMDEwMzg0OTcKKzoxMDE1MDAwMDA2MUE4QzQ0MDAwMDAwMDMwNDFBOEM1MDAwMDEwMzg1NjUKKzoxMDE1MTAwMDA2MUE4QzU0MDAwMDAwMDMwNDFBOEM2MDAwMDEwMzg2MzQKKzoxMDE1MjAwMDA2MUE4QzY0MDAwMDAwMDMwNDFBOEM3MDAwMDEwMzg3MDMKKzoxMDE1MzAwMDA2MUE4Qzc0MDAwMDAwMDMwNDFBOEM4MDAwMDEwMzg4RDIKKzoxMDE1NDAwMDA2MUE4Qzg0MDAwMDAwMDMwNDFBOEM5MDAwMDEwMzg5QTEKKzoxMDE1NTAwMDA2MUE4Qzk0MDAwMDAwMDMwNDFBOENBMDAwMDEwMzhBNzAKKzoxMDE1NjAwMDA2MUE4Q0E0MDAwMDAwMDMwNDFBOENCMDAwMDEwMzhCM0YKKzoxMDE1NzAwMDA2MUE4Q0I0MDAwMDAwMDMwNDFBOENDMDAwMDEwMzhDMEUKKzoxMDE1ODAwMDA2MUE4Q0M0MDAwMDAwMDMwNDFBOENEMDAwMDEwMzhEREQKKzoxMDE1OTAwMDA2MUE4Q0Q0MDAwMDAwMDMwNDFBOENFMDAwMDEwMzhFQUMKKzoxMDE1QTAwMDA2MUE4Q0U0MDAwMDAwMDMwNDFBOENGMDAwMDEwMzhGN0IKKzoxMDE1QjAwMDA2MUE4Q0Y0MDAwMDAwMDMwNDFBOEQwMDAwMDEwMzkwNDkKKzoxMDE1QzAwMDA2MUE4RDA0MDAwMDAwMDMwNDFBOEQxMDAwMDEwMzkxMTcKKzoxMDE1RDAwMDA2MUE4RDE0MDAwMDAwMDMwNDFBOEQyMDAwMDEwMzkyRTYKKzoxMDE1RTAwMDA2MUE4RDI0MDAwMDAwMDMwNDFBOEQzMDAwMDEwMzkzQjUKKzoxMDE1RjAwMDA2MUE4RDM0MDAwMDAwMDMwNDFBOEQ0MDAwMDEwMzk0ODQKKzoxMDE2MDAwMDA2MUE4RDQ0MDAwMDAwMDMwNDFBOEQ1MDAwMDEwMzk1NTIKKzoxMDE2MTAwMDA2MUE4RDU0MDAwMDAwMDMwNDFBOEQ2MDAwMDEwMzk2MjEKKzoxMDE2MjAwMDA2MUE4RDY0MDAwMDAwMDMwNDFBOEQ3MDAwMDEwMzk3RjAKKzoxMDE2MzAwMDA2MUE4RDc0MDAwMDAwMDMwNDFBOEQ4MDAwMDEwMzk4QkYKKzoxMDE2NDAwMDA2MUE4RDg0MDAwMDAwMDMwNDFBOEQ5MDAwMDEwMzk5OEUKKzoxMDE2NTAwMDA2MUE4RDk0MDAwMDAwMDMwNDFBOERBMDAwMDEwMzlBNUQKKzoxMDE2NjAwMDA2MUE4REE0MDAwMDAwMDMwNDFBOERCMDAwMDEwMzlCMkMKKzoxMDE2NzAwMDA2MUE4REI0MDAwMDAwMDMwNDFBOERDMDAwMDEwMzlDRkIKKzoxMDE2ODAwMDA2MUE4REM0MDAwMDAwMDMwNDFBOEREMDAwMDEwMzlEQ0EKKzoxMDE2OTAwMDA2MUE4REQ0MDAwMDAwMDMwNDFBOERFMDAwMDEwMzlFOTkKKzoxMDE2QTAwMDA2MUE4REU0MDAwMDAwMDMwNDFBOERGMDAwMDEwMzlGNjgKKzoxMDE2QjAwMDA2MUE4REY0MDAwMDAwMDMwNDFBOEUwMDAwMDEwM0EwMzYKKzoxMDE2QzAwMDA2MUE4RTA0MDAwMDAwMDMwNDFBOEUxMDAwMDEwM0ExMDQKKzoxMDE2RDAwMDA2MUE4RTE0MDAwMDAwMDMwNDFBOEUyMDAwMDEwM0EyRDMKKzoxMDE2RTAwMDA2MUE4RTI0MDAwMDAwMDMwNDFBOEUzMDAwMDEwM0EzQTIKKzoxMDE2RjAwMDA2MUE4RTM0MDAwMDAwMDMwNDFBOEU0MDAwMDEwM0E0NzEKKzoxMDE3MDAwMDA2MUE4RTQ0MDAwMDAwMDMwNDFBOEU1MDAwMDEwM0E1M0YKKzoxMDE3MTAwMDA2MUE4RTU0MDAwMDAwMDMwNDFBOEU2MDAwMDEwM0E2MEUKKzoxMDE3MjAwMDA2MUE4RTY0MDAwMDAwMDMwNDFBOEU3MDAwMDEwM0E3REQKKzoxMDE3MzAwMDA2MUE4RTc0MDAwMDAwMDMwNDFBOEU4MDAwMDEwM0E4QUMKKzoxMDE3NDAwMDA2MUE4RTg0MDAwMDAwMDMwNDFBOEU5MDAwMDEwM0E5N0IKKzoxMDE3NTAwMDA2MUE4RTk0MDAwMDAwMDMwNDFBOEVBMDAwMDEwM0FBNEEKKzoxMDE3NjAwMDA2MUE4RUE0MDAwMDAwMDMwNDFBOEVCMDAwMDEwM0FCMTkKKzoxMDE3NzAwMDA2MUE4RUI0MDAwMDAwMDMwNDFBOEVDMDAwMDEwM0FDRTgKKzoxMDE3ODAwMDA2MUE4RUM0MDAwMDAwMDMwNDFBOEVEMDAwMDEwM0FEQjcKKzoxMDE3OTAwMDA2MUE4RUQ0MDAwMDAwMDMwNDFBOEVFMDAwMDEwM0FFODYKKzoxMDE3QTAwMDA2MUE4RUU0MDAwMDAwMDMwNDFBOEVGMDAwMDEwM0FGNTUKKzoxMDE3QjAwMDA2MUE4RUY0MDAwMDAwMDMwNDFBOEYwMDAwMDEwM0IwMjMKKzoxMDE3QzAwMDA2MUE4RjA0MDAwMDAwMDMwNDFBOEYxMDAwMDEwM0IxRjEKKzoxMDE3RDAwMDA2MUE4RjE0MDAwMDAwMDMwNDFBOEYyMDAwMDEwM0IyQzAKKzoxMDE3RTAwMDA2MUE4RjI0MDAwMDAwMDMwNDFBOEYzMDAwMDEwM0IzOEYKKzoxMDE3RjAwMDA2MUE4RjM0MDAwMDAwMDMwNDFBOEY0MDAwMDEwM0I0NUUKKzoxMDE4MDAwMDA2MUE4RjQ0MDAwMDAwMDMwNDFBOEY1MDAwMDEwM0I1MkMKKzoxMDE4MTAwMDA2MUE4RjU0MDAwMDAwMDMwNDFBOEY2MDAwMDEwM0I2RkIKKzoxMDE4MjAwMDA2MUE4RjY0MDAwMDAwMDMwNDFBOEY3MDAwMDEwM0I3Q0EKKzoxMDE4MzAwMDA2MUE4Rjc0MDAwMDAwMDMwNDFBOEY4MDAwMDEwM0I4OTkKKzoxMDE4NDAwMDA2MUE4Rjg0MDAwMDAwMDMwNDFBOEY5MDAwMDEwM0I5NjgKKzoxMDE4NTAwMDA2MUE4Rjk0MDAwMDAwMDMwNDFBOEZBMDAwMDEwM0JBMzcKKzoxMDE4NjAwMDA2MUE4RkE0MDAwMDAwMDMwNDFBOEZCMDAwMDEwM0JCMDYKKzoxMDE4NzAwMDA2MUE4RkI0MDAwMDAwMDMwNDFBOEZDMDAwMDEwM0JDRDUKKzoxMDE4ODAwMDA2MUE4RkM0MDAwMDAwMDMwNDFBOEZEMDAwMDEwM0JEQTQKKzoxMDE4OTAwMDA2MUE4RkQ0MDAwMDAwMDMwNDFBOEZFMDAwMDEwM0JFNzMKKzoxMDE4QTAwMDA2MUE4RkU0MDAwMDAwMDcwNDFBNjJDMDAwMjAwM0JGN0MKKzoxMDE4QjAwMDA2MUExQUYwMDAwMDAwNDIwNjFBQUYwMDAwMDAwMDA4RTUKKzoxMDE4QzAwMDA2MUFFMDAwMDAwMDA1NDAwNjFBRDAwMDAwMDAwMDcyNzEKKzoxMDE4RDAwMDA2MUFEMjQ4MDAwMDAwMTAwNjFBRDZCMDAwMDAwMDIwRjgKKzoxMDE4RTAwMDA2MUFENDcwMDAwMDAwOTAwNjFBRDQ2ODAwMDAwMDAyQTYKKzoxMDE4RjAwMDA2MUFBMDAwMDAwMDAxQzQwNjFBMzAwMDAwMDAwMDEwMDMKKzoxMDE5MDAwMDA2MUEzMDgwMDAwMDAwMTAwNjFBMzEwMDAwMDAwMDEwOTYKKzoxMDE5MTAwMDA2MUEzMTgwMDAwMDAwMTAwNjFBMzMwMDAwMDAwMDEyODEKKzoxMDE5MjAwMDA2MUEzMzkwMDAwMDAwNzAwNjFBRDQ1ODAwMDAwMDAyMTYKKzoxMDE5MzAwMDA2MUFEMzQ4MDAwMDAwMDIwNjFBRDM1ODAwMDAwMDIwRkYKKzoxMDE5NDAwMDA2MUFBNzEwMDAwMDAxQzQwNjFBMzA0MDAwMDAwMDEwNUIKKzoxMDE5NTAwMDA2MUEzMEMwMDAwMDAwMTAwNjFBMzE0MDAwMDAwMDEwQzYKKzoxMDE5NjAwMDA2MUEzMUMwMDAwMDAwMTAwNjFBMzM0ODAwMDAwMDEyQTkKKzoxMDE5NzAwMDA2MUEzNTUwMDAwMDAwNzAwNjFBRDQ2MDAwMDAwMDAyRkMKKzoxMDE5ODAwMDA2MUFEMzUwMDAwMDAwMDIwNjFBRDNEODAwMDAwMDIwMjcKKzoxMDE5OTAwMDAyMUFBRTIwMDAwMDAwMDAwNjFBNTAwMDAwMDAwMDAyRUIKKzoxMDE5QTAwMDA2MUE1MDgwMDAwMDAwMTIwNDFBNDAwMDAwMDIwM0RGRjMKKzoxMDE5QjAwMDA0MUE2M0MwMDAwMjAzRTEwNjFBNzAwMDAwMDAwMDA0NkMKKzoxMDE5QzAwMDA2MUEzMjAwMDAwMDAwMDgwMjFBQUUyNDAwMDAwMDAwQ0YKKzoxMDE5RDAwMDA2MUE1MDEwMDAwMDAwMDIwNjFBNTBDODAwMDAwMDEyM0IKKzoxMDE5RTAwMDA0MUE0MDA4MDAwMjAzRTMwNDFBNjNDODAwMDIwM0U1NzYKKzoxMDE5RjAwMDA2MUE3MDEwMDAwMDAwMDQwNjFBMzIyMDAwMDAwMDA4QzkKKzoxMDFBMDAwMDAyMUFBRTI4MDAwMDAwMDAwNjFBNTAyMDAwMDAwMDAyNTIKKzoxMDFBMTAwMDA2MUE1MTEwMDAwMDAwMTIwNDFBNDAxMDAwMDIwM0U3RDkKKzoxMDFBMjAwMDA0MUE2M0QwMDAwMjAzRTkwNjFBNzAyMDAwMDAwMDA0QzMKKzoxMDFBMzAwMDA2MUEzMjQwMDAwMDAwMDgwMjFBQUUyQzAwMDAwMDAwMTYKKzoxMDFBNDAwMDA2MUE1MDMwMDAwMDAwMDIwNjFBNTE1ODAwMDAwMDEyMTkKKzoxMDFBNTAwMDA0MUE0MDE4MDAwMjAzRUIwNDFBNjNEODAwMDIwM0VERDUKKzoxMDFBNjAwMDA2MUE3MDMwMDAwMDAwMDQwNjFBMzI2MDAwMDAwMDA4RjgKKzoxMDFBNzAwMDAyMUFBRTMwMDAwMDAwMDAwNjFBNTA0MDAwMDAwMDAyQkEKKzoxMDFBODAwMDA2MUE1MUEwMDAwMDAwMTIwNDFBNDAyMDAwMDIwM0VGQzEKKzoxMDFBOTAwMDA0MUE2M0UwMDAwMjAzRjEwNjFBNzA0MDAwMDAwMDA0MUIKKzoxMDFBQTAwMDA2MUEzMjgwMDAwMDAwMDgwMjFBQUUzNDAwMDAwMDAwNUUKKzoxMDFBQjAwMDA2MUE1MDUwMDAwMDAwMDIwNjFBNTFFODAwMDAwMDEyRjkKKzoxMDFBQzAwMDA0MUE0MDI4MDAwMjAzRjMwNDFBNjNFODAwMDIwM0Y1MzUKKzoxMDFBRDAwMDA2MUE3MDUwMDAwMDAwMDQwNjFBMzJBMDAwMDAwMDA4MjgKKzoxMDFBRTAwMDAyMUFBRTM4MDAwMDAwMDAwNjFBNTA2MDAwMDAwMDAyMjIKKzoxMDFBRjAwMDA2MUE1MjMwMDAwMDAwMTIwNDFBNDAzMDAwMDIwM0Y3QTgKKzoxMDFCMDAwMDA0MUE2M0YwMDAwMjAzRjkwNjFBNzA2MDAwMDAwMDA0NzIKKzoxMDFCMTAwMDA2MUEzMkMwMDAwMDAwMDgwMjFBQUUzQzAwMDAwMDAwQTUKKzoxMDFCMjAwMDA2MUE1MDcwMDAwMDAwMDIwNjFBNTI3ODAwMDAwMDEyRDcKKzoxMDFCMzAwMDA0MUE0MDM4MDAwMjAzRkIwNDFBNjNGODAwMDIwM0ZEOTQKKzoxMDFCNDAwMDA2MUE3MDcwMDAwMDAwMDQwNjFBMzJFMDAwMDAwMDA4NTcKKzoxMDFCNTAwMDAyMDBBMkE0MDAwMDAyMDkwMjAwQTI3MDAwMDAwMDAwMUUKKzoxMDFCNjAwMDAyMDBBMjc0MDAwMDAwMDAwMjAwQTI3MDAwMDAwMDAwNDkKKzoxMDFCNzAwMDAyMDBBMjc0MDAwMDAwMDAwMjAwQTI3MDAwMDAwMDAwMzkKKzoxMDFCODAwMDAyMDBBMjc0MDAwMDAwMDAwMjAwQTI3MDAwMDAwMDAwMjkKKzoxMDFCOTAwMDAyMDBBMjc0MDAwMDAwMDAwMjAxMDBCNDAwMDAwMDAxNzUKKzoxMDFCQTAwMDAyMDEwMEI4MDAwMDAwMDEwMjAxMDBDQzAwMDAwMDAxQTkKKzoxMDFCQjAwMDAyMDEwMEQwMDAwMDAwMDEwMjAxMDBEQzAwMDAwMDAxNzEKKzoxMDFCQzAwMDAyMDEwMTAwMDAwMDAwMDEwMjAxMDEwNDAwMDAwMDAxMDcKKzoxMDFCRDAwMDAyMDEwMDdDMDAzMDAwMDAwMjAxMDA4NDAwMDAwMDI4QTcKKzoxMDFCRTAwMDAyMDEwMDhDMDAwMDAwMDAwMjAxMDEzMDAwMDAwMDA0MkUKKzoxMDFCRjAwMDAyMDEwMjVDMDAwMDAwMDEwMjAxMDMyODAwMDAwMDAwNTUKKzoxMDFDMDAwMDAyMDE2MDU4MDAwMEZGRkYwMjAxNjA3MDAwMDAwMDA3NDEKKzoxMDFDMTAwMDAyMDEwNTU0MDAwMDAwMzAwMjAxMDBDNDAwMDAwMDAxNzAKKzoxMDFDMjAwMDAyMDEwMEY4MDAwMDAwMDEwMjAxMDBGMDAwMDAwMDAxQzQKKzoxMDFDMzAwMDAyMDEwMDgwMDAzMDAwMDAwMjAxMDA4ODAwMDAwMDI4M0UKKzoxMDFDNDAwMDAyMDEwMDkwMDAwMDAwMDAwMjAxMDEzNDAwMDAwMDA0QzUKKzoxMDFDNTAwMDAyMDEwMkRDMDAwMDAwMDEwMjAxMDMyQzAwMDAwMDAwNzAKKzoxMDFDNjAwMDAyMDE2MDVDMDAwMEZGRkYwMjAxNjA3NDAwMDAwMDA3RDkKKzoxMDFDNzAwMDAyMDEwNTY0MDAwMDAwMzAwMjAxMDBDODAwMDAwMDAxRkMKKzoxMDFDODAwMDAyMDEwMEZDMDAwMDAwMDEwMjAxMDBGNDAwMDAwMDAxNUMKKzoxMDFDOTAwMDAyMEMxMDAwMDAwMDAwMjgwMjBDMjAwODAwMDAwMjExQjUKKzoxMDFDQTAwMDAyMEMyMDBDMDAwMDAyMDAwMjBDMjAxMDAwMDAwMjA0QjQKKzoxMDFDQjAwMDAyMEMyMDFDMDAwMEZGRkYwMjBDMjAyMDAwMDBGRkZGOTAKKzoxMDFDQzAwMDAyMEMyMDI0MDAwMEZGRkYwMjBDMjAyODAwMDBGRkZGNzAKKzoxMDFDRDAwMDAyMEMyMDM4MDAwMDAwMDAwMjBDMjAzQzAwMDAwMDM3RkQKKzoxMDFDRTAwMDAyMEMyMDQwMDAwMDAwMjEwMjBDMjA0NDAwMDAwMDIwRDMKKzoxMDFDRjAwMDA2MEMyMDQ4MDAwMDAwMUQwMjBDMjBCQzAwMDAwMDAxNjIKKzoxMDFEMDAwMDA2MEMyMEMwMDAwMDAwM0YwMjBDMjFCQzAwMDAwMDAxQjYKKzoxMDFEMTAwMDAyMEMyMUMwMDAwMDAwMDEwMjBDMjFDNDAwMDAwMDAxREYKKzoxMDFEMjAwMDA2MEMyMUM4MDAwMDAwMUMwMjBDMjIzODA3RkZGRkZGMzAKKzoxMDFEMzAwMDAyMEMyMjNDMDAwMDAwN0YwMjBDMjI0MDA3RkZGRkZGNDQKKzoxMDFENDAwMDAyMEMyMjQ0MDAwMDAwM0YwMTBDMjI0ODAwMDAwMDAwNjkKKzoxMDFENTAwMDAxMEMyMjRDMDAwMDAwMDAwMTBDMjI1MDAwMDAwMDAwODkKKzoxMDFENjAwMDAxMEMyMjU0MDAwMDAwMDAwMTBDMjI1ODAwMDAwMDAwNjkKKzoxMDFENzAwMDAxMEMyMjVDMDAwMDAwMDAwMTBDMjI2MDAwMDAwMDAwNDkKKzoxMDFEODAwMDAxMEMyMjY0MDAwMDAwMDAwMTBDMjI2ODAwMDAwMDAwMjkKKzoxMDFEOTAwMDAxMEMyMjZDMDAwMDAwMDAwMTBDMjI3MDAwMDAwMDAwMDkKKzoxMDFEQTAwMDAxMEMyMjc0MDAwMDAwMDAwMTBDMjI3ODAwMDAwMDAwRTkKKzoxMDFEQjAwMDAxMEMyMjdDMDAwMDAwMDAwMjBDMjJEODAwMDBGRkZGNzIKKzoxMDFEQzAwMDAyMEMyMkRDMDAwMEZGRkYwMjBDMjJFMDAwMDBGRkZGRkIKKzoxMDFERDAwMDAyMEMyMkU0MDAwMEZGRkYwQzBDMjAwMDAwMDAwM0U4Q0UKKzoxMDFERTAwMDBBMEMyMDAwMDAwMDAwMDEwQjBDMjAwMDAwMDAwMDAzODIKKzoxMDFERjAwMDAyMEM0MDA4MDAwMDEwMTEwMjBDNDAwQzAwMDAxMDAwMDIKKzoxMDFFMDAwMDAyMEM0MDEwMDAwMDEwMDQwMjBDNDAxNDAwMDAxMDIxQ0QKKzoxMDFFMTAwMDAyMEM0MDFDMDAwMEZGRkYwMjBDNDAyMDAwMDBGRkZGRUUKKzoxMDFFMjAwMDAyMEM0MDI0MDAwMEZGRkYwMjBDNDAyODAwMDBGRkZGQ0UKKzoxMDFFMzAwMDAyMEM0MDM4MDAwMDAwNDYwMjBDNDAzQzAwMDAwMDBDNDAKKzoxMDFFNDAwMDA2MEM0MDQwMDAwMDAwMDIwMjBDNDA0ODAwMDAwMDE4NTAKKzoxMDFFNTAwMDAyMEM0MDRDMDAwMDAwRjAwNjBDNDA1MDAwMDAwMDFGMzcKKzoxMDFFNjAwMDAyMEM0MENDMDAwMDAwMDEwNjBDNDBEMDAwMDAwMDNBRkIKKzoxMDFFNzAwMDAyMEM0MUI4MDAwMDAwMDEwNjBDNDFCQzAwMDAwMDAzNDgKKzoxMDFFODAwMDAyMEM0MUM4MDAwMDAwMDEwMjBDNDFDQzAwMDAwMDAxMUUKKzoxMDFFOTAwMDA2MEM0MUQwMDAwMDAwMUEwMjBDNDIzODA3RkZGRkZGNzkKKzoxMDFFQTAwMDAyMEM0MjNDMDAwMDAwN0YwMjBDNDI0MDA3RkZGRkZGOTMKKzoxMDFFQjAwMDAyMEM0MjQ0MDAwMDAwM0YwMTBDNDI0ODAwMDAwMDAwQjgKKzoxMDFFQzAwMDAxMEM0MjRDMDAwMDAwMDAwMTBDNDI1MDAwMDAwMDAwRDgKKzoxMDFFRDAwMDAxMEM0MjU0MDAwMDAwMDAwMTBDNDI1ODAwMDAwMDAwQjgKKzoxMDFFRTAwMDAxMEM0MjVDMDAwMDAwMDAwMTBDNDI2MDAwMDAwMDAwOTgKKzoxMDFFRjAwMDAxMEM0MjY0MDAwMDAwMDAwMTBDNDI2ODAwMDAwMDAwNzgKKzoxMDFGMDAwMDAxMEM0MjZDMDAwMDAwMDAwMTBDNDI3MDAwMDAwMDAwNTcKKzoxMDFGMTAwMDAxMEM0Mjc0MDAwMDAwMDAwMTBDNDI3ODAwMDAwMDAwMzcKKzoxMDFGMjAwMDAxMEM0MjdDMDAwMDAwMDAwMTBDNDI4MDAwMDAwMDAwMTcKKzoxMDFGMzAwMDAyMEM0MkQ4MDAwMEZGRkYwMjBDNDJEQzAwMDBGRkZGNTEKKzoxMDFGNDAwMDAyMEM0MkUwMDAwMEZGRkYwMjBDNDJFNDAwMDBGRkZGMzEKKzoxMDFGNTAwMDBDMEM0MDAwMDAwMDAzRTgwQTBDNDAwMDAwMDAwMDAxRTcKKzoxMDFGNjAwMDBCMEM0MDAwMDAwMDAwMDMwNjBENDAwMDAwMDAwQTAwQkEKKzoxMDFGNzAwMDAyMEQwMDQ0MDAwMDAwMzIwMjBEMDA4QzAyMTUwMDIwMEEKKzoxMDFGODAwMDAyMEQwMDkwMDIxNTAwMjAwMjBEMDA5NDA4MTAwMDAwQzAKKzoxMDFGOTAwMDAyMEQwMDk4MDAwMDAwMzYwMjBEMDBBMDAwMDAwMDAwQjUKKzoxMDFGQTAwMDAyMEQwMEE0MDAwMDAwMDQwMjBEMDBBODAwMDAwMDA0QkYKKzoxMDFGQjAwMDA2MEQwMEFDMDAwMDAwMDIwMjBEMDBCODAwMDAwMDAyOTcKKzoxMDFGQzAwMDAyMEQwMEMwMDAwMDAwMDEwMjBEMDBDODAwMDAwMDAyNjgKKzoxMDFGRDAwMDAyMEQwMENDMDAwMDAwMDIwMjBEMDE1QzAwMDAwMDAxQjcKKzoxMDFGRTAwMDAyMEQwMTY0MDAwMDAwMDEwMjBEMDE2ODAwMDAwMDAyMDIKKzoxMDFGRjAwMDAyMEQwMjA0MDAwMDAwMDEwMjBEMDIwQzAwMDAwMDIwOEUKKzoxMDIwMDAwMDAyMEQwMjEwMDAwMDAwNDAwMjBEMDIxNDAwMDAwMDQwMEEKKzoxMDIwMTAwMDAyMEQwMjIwMDAwMDAwMDMwMjBEMDIyNDAwMDAwMDE4M0YKKzoxMDIwMjAwMDA2MEQwMjgwMDAwMDAwMTIwNDBEMDMwMDAwMTgwM0ZGREIKKzoxMDIwMzAwMDA2MEQwMzYwMDAwMDAwMEMwMjBEMDA0QzAwMDAwMDAxQzIKKzoxMDIwNDAwMDAyMEQwMDUwMDAwMDAwMDIwMjBEMDA1NDAwMDAwMDAwQ0MKKzoxMDIwNTAwMDAyMEQwMDU4MDAwMDAwMDgwNjBEMDA1QzAwMDAwMDA0OUUKKzoxMDIwNjAwMDAyMEQwMEM0MDAwMDAwMDQwMjBEMDAwNDAwMDAwMDAxODUKKzoxMDIwNzAwMDAyMEQwMDA4MDAwMDAwMDEwMjBEMDAwQzAwMDAwMDAxMkMKKzoxMDIwODAwMDAyMEQwMDEwMDAwMDAwMDEwMjBEMDAxNDAwMDAwMDAxMEMKKzoxMDIwOTAwMDAyMEQwMDE4MDAwMDAwMDEwMjBEMDAxQzAwMDAwMDAxRUMKKzoxMDIwQTAwMDAyMEQwMDIwMDAwMDAwMDEwMjBEMDAyNDAwMDAwMDAxQ0MKKzoxMDIwQjAwMDAyMEQwMDI4MDAwMDAwMDEwMjBEMDAyQzAwMDAwMDAxQUMKKzoxMDIwQzAwMDAyMEQwMDMwMDAwMDAwMDEwMjBEMDAzNDAwMDAwMDAxOEMKKzoxMDIwRDAwMDAyMEQwMDM4MDAwMDAwMDEwMjBEMDAzQzAwMDAwMDAxNkMKKzoxMDIwRTAwMDAyMEQwMTE0MDAwMDAwMDkwMjBEMDExQzAwMDAwMDBBOEQKKzoxMDIwRjAwMDAyMEQwMTI0MDAwMDAwMDAwMjBEMDEyQzAwMDAwMDAwNzAKKzoxMDIxMDAwMDAyMEQwMTM0MDAwMDAwMDAwMjBEMDEzQzAwMDAwMDBCMzQKKzoxMDIxMTAwMDAyMEQwMTQ0MDAwMDAwMDAwMjBEMDExODAwMDAwMDI5MUEKKzoxMDIxMjAwMDAyMEQwMTIwMDAwMDAwMkEwMjBEMDEyODAwMDAwMDIwRkQKKzoxMDIxMzAwMDAyMEQwMTMwMDAwMDAwMjAwMjBEMDEzODAwMDAwMDIwRDcKKzoxMDIxNDAwMDAyMEQwMTQwMDAwMDAwMkIwMjBEMDE0ODAwMDAwMDIwOUMKKzoxMDIxNTAwMDAyMEQwMTE0MDAwMDAwMTkwMjBEMDExQzAwMDAwMDFBRkMKKzoxMDIxNjAwMDAyMEQwMTI0MDAwMDAwMTAwMjBEMDEyQzAwMDAwMDEwREYKKzoxMDIxNzAwMDAyMEQwMTM0MDAwMDAwMTAwMjBEMDEzQzAwMDAwMDFCQTQKKzoxMDIxODAwMDAyMEQwMTQ0MDAwMDAwMTAwMjBEMDExODAwMDAwMDM5OEEKKzoxMDIxOTAwMDAyMEQwMTIwMDAwMDAwM0EwMjBEMDEyODAwMDAwMDMwNkQKKzoxMDIxQTAwMDAyMEQwMTMwMDAwMDAwMzAwMjBEMDEzODAwMDAwMDMwNDcKKzoxMDIxQjAwMDAyMEQwMTQwMDAwMDAwM0IwMjBEMDE0ODAwMDAwMDMwMEMKKzoxMDIxQzAwMDAyMEQwMTE0MDAwMDAwNDkwMjBEMDExQzAwMDAwMDRBMkMKKzoxMDIxRDAwMDAyMEQwMTI0MDAwMDAwNDAwMjBEMDEyQzAwMDAwMDQwMEYKKzoxMDIxRTAwMDAyMEQwMTM0MDAwMDAwNDAwMjBEMDEzQzAwMDAwMDRCRDQKKzoxMDIxRjAwMDAyMEQwMTQ0MDAwMDAwNDAwMjBEMDExODAwMDAwMDY5QkEKKzoxMDIyMDAwMDAyMEQwMTIwMDAwMDAwNkEwMjBEMDEyODAwMDAwMDYwOUMKKzoxMDIyMTAwMDAyMEQwMTMwMDAwMDAwNjAwMjBEMDEzODAwMDAwMDYwNzYKKzoxMDIyMjAwMDAyMEQwMTQwMDAwMDAwNkIwMjBEMDE0ODAwMDAwMDYwM0IKKzoxMDIyMzAwMDAyMEQwMTE0MDAwMDAwNTkwMjBEMDExQzAwMDAwMDVBOUIKKzoxMDIyNDAwMDAyMEQwMTI0MDAwMDAwNTAwMjBEMDEyQzAwMDAwMDUwN0UKKzoxMDIyNTAwMDAyMEQwMTM0MDAwMDAwNTAwMjBEMDEzQzAwMDAwMDVCNDMKKzoxMDIyNjAwMDAyMEQwMTQ0MDAwMDAwNTAwMjBEMDExODAwMDAwMDc5MjkKKzoxMDIyNzAwMDAyMEQwMTIwMDAwMDAwN0EwMjBEMDEyODAwMDAwMDcwMEMKKzoxMDIyODAwMDAyMEQwMTMwMDAwMDAwNzAwMjBEMDEzODAwMDAwMDcwRTYKKzoxMDIyOTAwMDAyMEQwMTQwMDAwMDAwN0IwMjBEMDE0ODAwMDAwMDcwQUIKKzoxMDIyQTAwMDA2MEUyMDAwMDAwMDA4MDAwMjBFMDA0QzAwMDAwMDMyNjQKKzoxMDIyQjAwMDAyMEUwMDk0MDIxNTAwMjAwMjBFMDA5ODAyMTUwMDIwNjQKKzoxMDIyQzAwMDAyMEUwMDlDMDAwMDAwMzAwMjBFMDBBMDA4MTAwMDAwNkEKKzoxMDIyRDAwMDAyMEUwMEE0MDAwMDAwMzYwMjBFMDBBODAwMDAwMDMwMkMKKzoxMDIyRTAwMDAyMEUwMEFDMDAwMDAwMzEwMjBFMDBCNDAwMDAwMDAzM0EKKzoxMDIyRjAwMDAyMEUwMEI4MDAwMDAwMDAwMjBFMDBDNDAwMDAwMDAwNDIKKzoxMDIzMDAwMDAyMEUwMENDMDAwMDAwMDYwMjBFMDBEODAwMDAwMDAxMDIKKzoxMDIzMTAwMDAyMEUwMTQ0MDAwMDAwMDEwMjBFMDE0QzAwMDAwMDAxMDkKKzoxMDIzMjAwMDAyMEUwMTUwMDAwMDAwMDIwMjBFMDIwNDAwMDAwMDAxMzMKKzoxMDIzMzAwMDAyMEUwMjBDMDAwMDAwNDAwMjBFMDIxMDAwMDAwMDQwREQKKzoxMDIzNDAwMDAyMEUwMjFDMDAwMDAwMDQwMjBFMDIyMDAwMDAwMDIwMDkKKzoxMDIzNTAwMDAyMEUwMjI0MDAwMDAwMEUwMjBFMDIyODAwMDAwMDFCRTQKKzoxMDIzNjAwMDA2MEUwMzAwMDAwMDAwMTIwNDBFMDI4MDAwMUIwNDE3N0EKKzoxMDIzNzAwMDA2MEUwMkVDMDAwMDAwMDUwMjBFMDA1NDAwMDAwMDBDRTYKKzoxMDIzODAwMDAyMEUwMDU4MDAwMDAwMEMwMjBFMDA1QzAwMDAwMDAwNkQKKzoxMDIzOTAwMDAyMEUwMDYwMDAwMDAwMTAwMjBFMDA2NDAwMDAwMDEwMzkKKzoxMDIzQTAwMDA2MEUwMDY4MDAwMDAwMDMwMjBFMDBEQzAwMDAwMDAzQkYKKzoxMDIzQjAwMDAyMEUwMDA0MDAwMDAwMDEwMjBFMDAwODAwMDAwMDAxRUYKKzoxMDIzQzAwMDAyMEUwMDBDMDAwMDAwMDEwMjBFMDAxMDAwMDAwMDAxQ0YKKzoxMDIzRDAwMDAyMEUwMDE0MDAwMDAwMDEwMjBFMDAxODAwMDAwMDAxQUYKKzoxMDIzRTAwMDAyMEUwMDFDMDAwMDAwMDEwMjBFMDAyMDAwMDAwMDAxOEYKKzoxMDIzRjAwMDAyMEUwMDI0MDAwMDAwMDEwMjBFMDAyODAwMDAwMDAxNkYKKzoxMDI0MDAwMDAyMEUwMDJDMDAwMDAwMDEwMjBFMDAzMDAwMDAwMDAxNEUKKzoxMDI0MTAwMDAyMEUwMDM0MDAwMDAwMDEwMjBFMDAzODAwMDAwMDAxMkUKKzoxMDI0MjAwMDAyMEUwMDNDMDAwMDAwMDEwMjBFMDA0MDAwMDAwMDAxMEUKKzoxMDI0MzAwMDAyMEUwMDQ0MDAwMDAwMDEwMjBFMDExMDAwMDAwMDBGMTcKKzoxMDI0NDAwMDAyMEUwMTE4MDAwMDAwMDAwMjBFMDEyMDAwMDAwMDAwMzIKKzoxMDI0NTAwMDAyMEUwMTI4MDAwMDAwMDAwMjBFMDExNDAwMDAwMDJGRUYKKzoxMDI0NjAwMDAyMEUwMTFDMDAwMDAwMjAwMjBFMDEyNDAwMDAwMDIwQ0EKKzoxMDI0NzAwMDAyMEUwMTJDMDAwMDAwMjAwMjBFMDExMDAwMDAwMDFGQkYKKzoxMDI0ODAwMDAyMEUwMTE4MDAwMDAwMTAwMjBFMDEyMDAwMDAwMDEwRDIKKzoxMDI0OTAwMDAyMEUwMTI4MDAwMDAwMTAwMjBFMDExNDAwMDAwMDNGOEYKKzoxMDI0QTAwMDAyMEUwMTFDMDAwMDAwMzAwMjBFMDEyNDAwMDAwMDMwNkEKKzoxMDI0QjAwMDAyMEUwMTJDMDAwMDAwMzAwMjBFMDExMDAwMDAwMDRGM0YKKzoxMDI0QzAwMDAyMEUwMTE4MDAwMDAwNDAwMjBFMDEyMDAwMDAwMDQwMzIKKzoxMDI0RDAwMDAyMEUwMTI4MDAwMDAwNDAwMjBFMDExNDAwMDAwMDZGRUYKKzoxMDI0RTAwMDAyMEUwMTFDMDAwMDAwNjAwMjBFMDEyNDAwMDAwMDYwQ0EKKzoxMDI0RjAwMDAyMEUwMTJDMDAwMDAwNjAwMjBFMDExMDAwMDAwMDVGQkYKKzoxMDI1MDAwMDAyMEUwMTE4MDAwMDAwNTAwMjBFMDEyMDAwMDAwMDUwRDEKKzoxMDI1MTAwMDAyMEUwMTI4MDAwMDAwNTAwMjBFMDExNDAwMDAwMDdGOEUKKzoxMDI1MjAwMDAyMEUwMTFDMDAwMDAwNzAwMjBFMDEyNDAwMDAwMDcwNjkKKzoxMDI1MzAwMDAyMEUwMTJDMDAwMDAwNzAwNzMwMDQwMDAwRDYwMDAwREQKKzoxMDI1NDAwMDA4MzAwN0Q4MDAwNTA0MzIwNzM0MDAwMDMyMkIwMDAwQTEKKzoxMDI1NTAwMDA3MzQ4MDAwMzE0QjBDOEIwNzM1MDAwMDM4QzUxOERFN0UKKzoxMDI1NjAwMDA3MzU4MDAwMkY5MDI3MTAwNzM2MDAwMDI2OEYzMkY1QTAKKzoxMDI1NzAwMDA4MzY3MTYwMzFENDA0MzQwMjMwMDBCQzAwMDAwMDMwRjEKKzoxMDI1ODAwMDAxMzAwMDAwMDAwMDAwMDAwMTMwMDAwNDAwMDAwMDAwRTUKKzoxMDI1OTAwMDAxMzAwMDA4MDAwMDAwMDAwMTMwMDAwQzAwMDAwMDAwQzUKKzoxMDI1QTAwMDAxMzAwMDEwMDAwMDAwMDAwMTMwMDAxNDAwMDAwMDAwQTUKKzoxMDI1QjAwMDAyMzAwMDIwMDAwMDAwMDEwMjMwMDAyNDAwMDAwMDAyNzAKKzoxMDI1QzAwMDAyMzAwMDI4MDAwMDAwMDMwMjMwMDAyQzAwMDAwMDAwNTAKKzoxMDI1RDAwMDAyMzAwMDMwMDAwMDAwMDQwMjMwMDAzNDAwMDAwMDAxMkUKKzoxMDI1RTAwMDAyMzAwMDM4MDAwMDAwMDAwMjMwMDAzQzAwMDAwMDAxMTIKKzoxMDI1RjAwMDAyMzAwMDQwMDAwMDAwMDQwMjMwMDA0NDAwMDAwMDAwRUYKKzoxMDI2MDAwMDAyMzAwMDQ4MDAwMDAwMDEwMjMwMDA0QzAwMDAwMDAzQ0UKKzoxMDI2MTAwMDAyMzAwMDUwMDAwMDAwMDAwMjMwMDA1NDAwMDAwMDAxQjEKKzoxMDI2MjAwMDAyMzAwMDU4MDAwMDAwMDQwMjMwMDA1QzAwMDAwMDAwOEUKKzoxMDI2MzAwMDAyMzAwMDYwMDAwMDAwMDEwMjMwMDA2NDAwMDAwMDAzNkUKKzoxMDI2NDAwMDAyMzAwMDY4MDAwMDAwMDAwMjMwMDA2QzAwMDAwMDAxNTEKKzoxMDI2NTAwMDAyMzAwMDcwMDAwMDAwMDQwMjMwMDA3NDAwMDAwMDAwMkUKKzoxMDI2NjAwMDAyMzAwMDc4MDAwMDAwMDQwMjMwMDA3QzAwMDAwMDAzMEIKKzoxMDI2NzAwMDA2MzAwMDgwMDAwMDAwMDIwMjMwMDBBNDAwMDA3RkZGNEUKKzoxMDI2ODAwMDAyMzAwMEE4MDAwMDAzRkYwMjMwMDIyNDAwMDAwMDAwMTYKKzoxMDI2OTAwMDAyMzAwMjM0MDAwMDAwMDAwMjMwMDI0QzAwMDAwMDAwNTIKKzoxMDI2QTAwMDAyMzAwMkU0MDAwMEZGRkYwNjMwMjAwMDAwMDAwODAwQjYKKzoxMDI2QjAwMDAyMzM4QkMwMDAwMDAwMDEwMjMzODAwMDAwMDAwMDFBQ0EKKzoxMDI2QzAwMDAyMzM4MDQwMDAwMDAwNEUwMjMzODA4MDAwMDAwMDEwODIKKzoxMDI2RDAwMDAyMzM4MEMwMDAwMDAwMjAwQzMzODMwMDAwMDg2NDcwQzcKKzoxMDI2RTAwMDBBMzM4MzAwMDAwMDAxNTcwQjMzODMwMDAwMDAwNTVGQUQKKzoxMDI2RjAwMDBBMzM4MzQwMDAwMDAwMDAwQzMzODM0MDAwMDAwMjI2QjAKKzoxMDI3MDAwMDBCMzM4MzQwMDAwMDAwMDEwMjMzODM4MDAwMDg2NDcwQjMKKzoxMDI3MTAwMDAyMzM4M0MwMDAwMDAyMjYwMjMzMTQ4MDAwMDAwMDAxNEYKKzoxMDI3MjAwMDBBMzMxNDgwMDAwMDAwMDAwNjMyODAwMDAwMDAwMTAyMUQKKzoxMDI3MzAwMDA2MzIyMDA4MDAwMDAwQzgwNjMyMjAwMDAwMDAwMDAyMTcKKzoxMDI3NDAwMDA0MzI4NTIwMDA4RjA0MzYwNjMyODc1QzAwMDAwMDA5QzEKKzoxMDI3NTAwMDA2MzIzRUIwMDAwMDAwMDYwNjMyM0VEMDAwMDAwMDAyMDUKKzoxMDI3NjAwMDA2MzIzRTgwMDAwMDAwMEEwNDMyM0VBODAwMDIwNEM1ODIKKzoxMDI3NzAwMDA2MzIzRTAwMDAwMDAwMjAwNjMyNTAwMDAwMDAwOTQwRjIKKzoxMDI3ODAwMDA2MzI0MDAwMDAwMDAwMDQwNDMyOTRDMDAwMDIwNEM3NzYKKzoxMDI3OTAwMDA2MzI0MTEwMDAwMDAwMDIwNjMyRDAwMDAwMDAwMDcwMzYKKzoxMDI3QTAwMDA2MzJEQjAwMDAwMDAwRDQwNjMyREVBMDAwMDAwMDAyOEEKKzoxMDI3QjAwMDA2MzJFMDAwMDAwMDA4MDAwNjMzMjQwMDAwMDAwMTE4ODMKKzoxMDI3QzAwMDA2MzIxMDAwMDAwMDAxODgwNjMyNTAwMDAwMDAwMDIwOTAKKzoxMDI3RDAwMDA2MzI1MTAwMDAwMDAwMjAwNjMyNTIwMDAwMDAwMDIwQTYKKzoxMDI3RTAwMDA2MzI1MzAwMDAwMDAwMjAwNjMyNTQwMDAwMDAwMDIwOTIKKzoxMDI3RjAwMDA2MzI1NTAwMDAwMDAwMjAwNjMyNTYwMDAwMDAwMDIwN0UKKzoxMDI4MDAwMDA2MzI1NzAwMDAwMDAwMjAwNjMyNTgwMDAwMDAwMDIwNjkKKzoxMDI4MTAwMDA2MzI1OTAwMDAwMDAwMjAwNjMyNUEwMDAwMDAwMDIwNTUKKzoxMDI4MjAwMDA2MzI1QjAwMDAwMDAwMjAwNjMyNUMwMDAwMDAwMDIwNDEKKzoxMDI4MzAwMDA2MzI1RDAwMDAwMDAwMjAwNjMyNUUwMDAwMDAwMDIwMkQKKzoxMDI4NDAwMDA2MzI1RjAwMDAwMDAwMjAwNjMyODRGMDAwMDAwMDAyMjMKKzoxMDI4NTAwMDA0MzI4NTAwMDAwMjA0QzkwNjMyODUwODAwMDAwMDAyMjcKKzoxMDI4NjAwMDA2MzJERTkwMDAwMDAwMDIwNjMzMjg2MDAwMDAwMTE4RTYKKzoxMDI4NzAwMDA2MzIxNjIwMDAwMDAxODgwNjMyNTA4MDAwMDAwMDIwMzkKKzoxMDI4ODAwMDA2MzI1MTgwMDAwMDAwMjAwNjMyNTI4MDAwMDAwMDIwRjUKKzoxMDI4OTAwMDA2MzI1MzgwMDAwMDAwMjAwNjMyNTQ4MDAwMDAwMDIwRTEKKzoxMDI4QTAwMDA2MzI1NTgwMDAwMDAwMjAwNjMyNTY4MDAwMDAwMDIwQ0QKKzoxMDI4QjAwMDA2MzI1NzgwMDAwMDAwMjAwNjMyNTg4MDAwMDAwMDIwQjkKKzoxMDI4QzAwMDA2MzI1OTgwMDAwMDAwMjAwNjMyNUE4MDAwMDAwMDIwQTUKKzoxMDI4RDAwMDA2MzI1QjgwMDAwMDAwMjAwNjMyNUM4MDAwMDAwMDIwOTEKKzoxMDI4RTAwMDA2MzI1RDgwMDAwMDAwMjAwNjMyNUU4MDAwMDAwMDIwN0QKKzoxMDI4RjAwMDA2MzI1RjgwMDAwMDAwMjAwNjMyODRGODAwMDAwMDAyRUIKKzoxMDI5MDAwMDA0MzI4NTEwMDAwMjA0Q0IwNjMyODUxODAwMDAwMDAyNTQKKzoxMDI5MTAwMDA2MzJERTk4MDAwMDAwMDIwMjMyODQ1MDAwMDAwMDAwRkYKKzoxMDI5MjAwMDA2MzI0MDEwMDAwMDAwMDIwMjMyODQ1NDAwMDAwMDAwMTEKKzoxMDI5MzAwMDA2MzI0MDIwMDAwMDAwMDIwMjMyODQ1ODAwMDAwMDAwRUQKKzoxMDI5NDAwMDA2MzI0MDMwMDAwMDAwMDIwMjMyODQ1QzAwMDAwMDAwQzkKKzoxMDI5NTAwMDA2MzI0MDQwMDAwMDAwMDIwMjMyODQ2MDAwMDAwMDAwQTUKKzoxMDI5NjAwMDA2MzI0MDUwMDAwMDAwMDIwMjMyODQ2NDAwMDAwMDAwODEKKzoxMDI5NzAwMDA2MzI0MDYwMDAwMDAwMDIwMjMyODQ2ODAwMDAwMDAwNUQKKzoxMDI5ODAwMDA2MzI0MDcwMDAwMDAwMDIwMjMyODQ2QzAwMDAwMDAwMzkKKzoxMDI5OTAwMDA2MzI0MDgwMDAwMDAwMDIwNzIwMDQwMDAwNzMwMDAwOUYKKzoxMDI5QTAwMDA4MjAwNzgwMDAxMDA0Q0QwNzI0MDAwMDJBRTQwMDAwNUUKKzoxMDI5QjAwMDA3MjQ4MDAwMjc2NzBBQkEwODI0RDM1MDYzRkMwNENGOTkKKzoxMDI5QzAwMDAyMjAwMEJDMDAwMDAwMzAwMTIwMDAwMDAwMDAwMDAwRDgKKzoxMDI5RDAwMDAxMjAwMDA0MDAwMDAwMDAwMTIwMDAwODAwMDAwMDAwQTkKKzoxMDI5RTAwMDAxMjAwMDBDMDAwMDAwMDAwMTIwMDAxMDAwMDAwMDAwODkKKzoxMDI5RjAwMDAxMjAwMDE0MDAwMDAwMDAwMjIwMDAyMDAwMDAwMDAxNUYKKzoxMDJBMDAwMDAyMjAwMDI0MDAwMDAwMDIwMjIwMDAyODAwMDAwMDAzMzEKKzoxMDJBMTAwMDAyMjAwMDJDMDAwMDAwMDAwMjIwMDAzMDAwMDAwMDA0MTIKKzoxMDJBMjAwMDAyMjAwMDM0MDAwMDAwMDEwMjIwMDAzODAwMDAwMDAwRjUKKzoxMDJBMzAwMDAyMjAwMDNDMDAwMDAwMDEwMjIwMDA0MDAwMDAwMDA0RDEKKzoxMDJBNDAwMDAyMjAwMDQ0MDAwMDAwMDAwMjIwMDA0ODAwMDAwMDAxQjUKKzoxMDJBNTAwMDAyMjAwMDRDMDAwMDAwMDMwMjIwMDA1MDAwMDAwMDAwOTMKKzoxMDJBNjAwMDAyMjAwMDU0MDAwMDAwMDEwMjIwMDA1ODAwMDAwMDA0NzEKKzoxMDJBNzAwMDAyMjAwMDVDMDAwMDAwMDAwMjIwMDA2MDAwMDAwMDAxNTUKKzoxMDJBODAwMDAyMjAwMDY0MDAwMDAwMDMwMjIwMDA2ODAwMDAwMDAwMzMKKzoxMDJBOTAwMDAyMjAwMDZDMDAwMDAwMDEwMjIwMDA3MDAwMDAwMDA0MTEKKzoxMDJBQTAwMDAyMjAwMDc0MDAwMDAwMDAwMjIwMDA3ODAwMDAwMDA0RjIKKzoxMDJBQjAwMDAyMjAwMDdDMDAwMDAwMDMwNjIwMDA4MDAwMDAwMDAyQ0QKKzoxMDJBQzAwMDAyMjAwMEE0MDAwMDdGRkYwMjIwMDBBODAwMDAwM0ZGRjYKKzoxMDJBRDAwMDAyMjAwMjI0MDAwMDAwMDAwMjIwMDIzNDAwMDAwMDAwNTYKKzoxMDJBRTAwMDAyMjAwMjRDMDAwMDAwMDAwMjIwMDJFNDAwMDBGRkZGNzAKKzoxMDJBRjAwMDA2MjAyMDAwMDAwMDA4MDAwMjIzOEJDMDAwMDAwMDAxMTcKKzoxMDJCMDAwMDAyMjM4MDAwMDAwMDAwMTAwMjIzODA0MDAwMDAwMDEyMTkKKzoxMDJCMTAwMDAyMjM4MDgwMDAwMDAwMzAwMjIzODBDMDAwMDAwMDBFRUQKKzoxMDJCMjAwMDBDMjM4MzAwMDAwODY0NzAwQTIzODMwMDAwMDAwMTU3MEYKKzoxMDJCMzAwMDBCMjM4MzAwMDAwMDA1NUYwQTIzODM0MDAwMDAwMDAwOTAKKzoxMDJCNDAwMDBDMjM4MzQwMDAwMDAyMjYwQjIzODM0MDAwMDAwMDAxNzkKKzoxMDJCNTAwMDAyMjM4MzgwMDAwODY0NzAwMjIzODNDMDAwMDAwMjI2RTEKKzoxMDJCNjAwMDAyMjMxNDgwMDAwMDAwMDEwQTIzMTQ4MDAwMDAwMDAwRUEKKzoxMDJCNzAwMDA2MjIxMDAwMDAwMDAwNDIwNjIyMjAwODAwMDAwMEM4QzMKKzoxMDJCODAwMDA2MjIyMDAwMDAwMDAwMDIwNjIyQjAwMDAwMDAwMzMwRjAKKzoxMDJCOTAwMDA2MjJGNDAwMDAwMDAwNTMwNDIyRjU0QzAwMDEwNEQxODkKKzoxMDJCQTAwMDA2MjJGNTUwMDAwMDAwMDMwNDIyRjU1QzAwMDEwNEQyNjcKKzoxMDJCQjAwMDA2MjJGNTYwMDAwMDAwMDMwNDIyRjU2QzAwMDEwNEQzMzYKKzoxMDJCQzAwMDA2MjJGNTcwMDAwMDAwMDMwNDIyRjU3QzAwMDEwNEQ0MDUKKzoxMDJCRDAwMDA2MjJGNTgwMDAwMDAwMDMwNDIyRjU4QzAwMDEwNEQ1RDQKKzoxMDJCRTAwMDA2MjJGNTkwMDAwMDAwMDMwNDIyRjU5QzAwMDEwNEQ2QTMKKzoxMDJCRjAwMDA2MjJGNUEwMDAwMDAwMDMwNDIyRjVBQzAwMDEwNEQ3NzIKKzoxMDJDMDAwMDA2MjJGNUIwMDAwMDAwMDMwNDIyRjVCQzAwMDEwNEQ4NDAKKzoxMDJDMTAwMDA2MjJGNUMwMDAwMDAwNDYwNjIyRTIwMDAwMDAwNDQwNDMKKzoxMDJDMjAwMDA0MjIxMjQwMDA5MDA0RDkwNjIyMzAwMDAwMDAwMEMwQTcKKzoxMDJDMzAwMDA2MjI2NzAwMDAwMDAxMDAwNjIyOTAwMDAwMDAwNDAwNDgKKzoxMDJDNDAwMDA0MjI2QjA4MDAyMDA1NjkwNjIyMTFGMDAwMDAwMDA2MkUKKzoxMDJDNTAwMDA0MjIxMjA4MDAwNjA1ODkwNjIyMTIyMDAwMDAwMDAyNDQKKzoxMDJDNjAwMDA2MjI0MDAwMDAwMDA1QzAwNjIyQzAwMDAwMDAwMDA2NDkKKzoxMDJDNzAwMDA0MjJDMDE4MDAwNjA1OEYwNjIyQzAzMDAwMDAwMDBBOUEKKzoxMDJDODAwMDA0MjJDMDU4MDAwNjA1OTUwNjIyQzA3MDAwMDAwMDBBMDQKKzoxMDJDOTAwMDA0MjJDMDk4MDAwNjA1OUIwNjIyQzBCMDAwMDAwMDBBNkUKKzoxMDJDQTAwMDA0MjJDMEQ4MDAwNjA1QTEwNjIyQzBGMDAwMDAwMDBBRDgKKzoxMDJDQjAwMDA0MjJDMTE4MDAwNjA1QTcwNjIyQzEzMDAwMDAwMDBBNDAKKzoxMDJDQzAwMDA0MjJDMTU4MDAwNjA1QUQwNjIyQzE3MDAwMDAwMDBBQUEKKzoxMDJDRDAwMDA0MjJDMTk4MDAwNjA1QjMwNjIyQzFCMDAwMDAwMDBBMTQKKzoxMDJDRTAwMDA0MjJDMUQ4MDAwNjA1QjkwNjIyQzFGMDAwMDAwMDBBN0UKKzoxMDJDRjAwMDA0MjJDMjE4MDAwNjA1QkYwNjIyQzIzMDAwMDAwMDBBRTYKKzoxMDJEMDAwMDA0MjJDMjU4MDAwNjA1QzUwNjIyQzI3MDAwMDAwMDBBNEYKKzoxMDJEMTAwMDA0MjJDMjk4MDAwNjA1Q0IwNjIyQzJCMDAwMDAwMDBBQjkKKzoxMDJEMjAwMDA0MjJDMkQ4MDAwNjA1RDEwNjIyQzJGMDAwMDAwMDBBMjMKKzoxMDJEMzAwMDA0MjJDMzE4MDAwNjA1RDcwNjIyQzMzMDAwMDAwMDBBOEIKKzoxMDJENDAwMDA0MjJDMzU4MDAwNjA1REQwNjIyQzM3MDAwMDAwMDBBRjUKKzoxMDJENTAwMDA0MjJDMzk4MDAwNjA1RTMwNjIyQzNCMDAwMDAwMDBBNUYKKzoxMDJENjAwMDA0MjJDM0Q4MDAwNjA1RTkwNjIyQzNGMDAwMDAwMDBBQzkKKzoxMDJENzAwMDA0MjJDNDE4MDAwNjA1RUYwNjIyQzQzMDAwMDAwMDBBMzEKKzoxMDJEODAwMDA0MjJDNDU4MDAwNjA1RjUwNjIyQzQ3MDAwMDAwMDBBOUIKKzoxMDJEOTAwMDA0MjJDNDk4MDAwNjA1RkIwNjIyQzRCMDAwMDAwMDBBMDUKKzoxMDJEQTAwMDA0MjJDNEQ4MDAwNjA2MDEwNjIyQzRGMDAwMDAwMDBBNkUKKzoxMDJEQjAwMDA0MjJDNTE4MDAwNjA2MDcwNjIyQzUzMDAwMDAwMDBBRDYKKzoxMDJEQzAwMDA0MjJDNTU4MDAwNjA2MEQwNjIyQzU3MDAwMDAwMDBBNDAKKzoxMDJERDAwMDA0MjJDNTk4MDAwNjA2MTMwNjIyQzVCMDAwMDAwMDBBQUEKKzoxMDJERTAwMDA0MjJDNUQ4MDAwNjA2MTkwNjIyQzVGMDAwMDAwMDBBMTQKKzoxMDJERjAwMDA0MjJDNjE4MDAwNjA2MUYwNjIyQzYzMDAwMDAwMDBBN0MKKzoxMDJFMDAwMDA0MjJDNjU4MDAwNjA2MjUwNjIyQzY3MDAwMDAwMDBBRTUKKzoxMDJFMTAwMDA0MjJDNjk4MDAwNjA2MkIwNjIyQzZCMDAwMDAwMDBBNEYKKzoxMDJFMjAwMDA0MjJDNkQ4MDAwNjA2MzEwNjIyQzZGMDAwMDAwMDBBQjkKKzoxMDJFMzAwMDA0MjJDNzE4MDAwNjA2MzcwNjIyQzczMDAwMDAwMDBBMjEKKzoxMDJFNDAwMDA0MjJDNzU4MDAwNjA2M0QwNjIyQzc3MDAwMDAwMDBBOEIKKzoxMDJFNTAwMDA0MjJDNzk4MDAwNjA2NDMwNjIyQzdCMDAwMDAwMDBBRjUKKzoxMDJFNjAwMDA0MjJDN0Q4MDAwNjA2NDkwNjIyQzdGMDAwMDAwMDBBNUYKKzoxMDJFNzAwMDA0MjJDODE4MDAwNjA2NEYwNjIyQzgzMDAwMDAwMDBBQzcKKzoxMDJFODAwMDA0MjJDODU4MDAwNjA2NTUwNjIyQzg3MDAwMDAwMDBBMzEKKzoxMDJFOTAwMDA0MjJDODk4MDAwNjA2NUIwNjIyQzhCMDAwMDAwMDBBOUIKKzoxMDJFQTAwMDA0MjJDOEQ4MDAwNjA2NjEwNjIyQzhGMDAwMDAwMDBBMDUKKzoxMDJFQjAwMDA0MjJDOTE4MDAwNjA2NjcwNjIyQzkzMDAwMDAwMDBBNkQKKzoxMDJFQzAwMDA0MjJDOTU4MDAwNjA2NkQwNjIyQzk3MDAwMDAwMDBBRDcKKzoxMDJFRDAwMDA0MjJDOTk4MDAwNjA2NzMwNjIyQzlCMDAwMDAwMDBBNDEKKzoxMDJFRTAwMDA0MjJDOUQ4MDAwNjA2NzkwNjIyQzlGMDAwMDAwMDBBQUIKKzoxMDJFRjAwMDA0MjJDQTE4MDAwNjA2N0YwNjIyQ0EzMDAwMDAwMDBBMTMKKzoxMDJGMDAwMDA0MjJDQTU4MDAwNjA2ODUwNjIyQ0E3MDAwMDAwMDBBN0MKKzoxMDJGMTAwMDA0MjJDQTk4MDAwNjA2OEIwNjIyQ0FCMDAwMDAwMDBBRTYKKzoxMDJGMjAwMDA0MjJDQUQ4MDAwNjA2OTEwNjIyQ0FGMDAwMDAwMDBBNTAKKzoxMDJGMzAwMDA0MjJDQjE4MDAwNjA2OTcwNjIyQ0IzMDAwMDAwMDBBQjgKKzoxMDJGNDAwMDA0MjJDQjU4MDAwNjA2OUQwNjIyQ0I3MDAwMDAwMDBBMjIKKzoxMDJGNTAwMDA0MjJDQjk4MDAwNjA2QTMwNjIyQ0JCMDAwMDAwMDBBOEMKKzoxMDJGNjAwMDA0MjJDQkQ4MDAwNjA2QTkwNjIyQ0JGMDAwMDAwMDBBRjYKKzoxMDJGNzAwMDA0MjJDQzE4MDAwNjA2QUYwNjIyQ0MzMDAwMDAwMDBBNUUKKzoxMDJGODAwMDA0MjJDQzU4MDAwNjA2QjUwNjIyQ0M3MDAwMDAwMDBBQzgKKzoxMDJGOTAwMDA0MjJDQzk4MDAwNjA2QkIwNjIyQ0NCMDAwMDAwMDBBMzIKKzoxMDJGQTAwMDA0MjJDQ0Q4MDAwNjA2QzEwNjIyQ0NGMDAwMDAwMDBBOUMKKzoxMDJGQjAwMDA0MjJDRDE4MDAwNjA2QzcwNjIyQ0QzMDAwMDAwMDBBMDQKKzoxMDJGQzAwMDA0MjJDRDU4MDAwNjA2Q0QwNjIyQ0Q3MDAwMDAwMDBBNkUKKzoxMDJGRDAwMDA0MjJDRDk4MDAwNjA2RDMwNjIyQ0RCMDAwMDAwMDBBRDgKKzoxMDJGRTAwMDA0MjJDREQ4MDAwNjA2RDkwNjIyQ0RGMDAwMDAwMDBBNDIKKzoxMDJGRjAwMDA0MjJDRTE4MDAwNjA2REYwNjIyQ0UzMDAwMDAwMDBBQUEKKzoxMDMwMDAwMDA0MjJDRTU4MDAwNjA2RTUwNjIyQ0U3MDAwMDAwMDBBMTMKKzoxMDMwMTAwMDA0MjJDRTk4MDAwNjA2RUIwNjIyQ0VCMDAwMDAwMDBBN0QKKzoxMDMwMjAwMDA0MjJDRUQ4MDAwNjA2RjEwNjIyQ0VGMDAwMDAwMDBBRTcKKzoxMDMwMzAwMDA0MjJDRjE4MDAwNjA2RjcwNjIyQ0YzMDAwMDAwMDBBNEYKKzoxMDMwNDAwMDA0MjJDRjU4MDAwNjA2RkQwNjIyQ0Y3MDAwMDAwMDBBQjkKKzoxMDMwNTAwMDA0MjJDRjk4MDAwNjA3MDMwNjIyQ0ZCMDAwMDAwMDBBMjIKKzoxMDMwNjAwMDA0MjJDRkQ4MDAwNjA3MDkwNjIyQ0ZGMDAwMDAwMDBBOEMKKzoxMDMwNzAwMDA0MjJEMDE4MDAwNjA3MEYwNjIyRDAzMDAwMDAwMDBBRjQKKzoxMDMwODAwMDA0MjJEMDU4MDAwNjA3MTUwNjIyRDA3MDAwMDAwMDBBNUUKKzoxMDMwOTAwMDA0MjJEMDk4MDAwNjA3MUIwNjIyRDBCMDAwMDAwMDBBQzgKKzoxMDMwQTAwMDA0MjJEMEQ4MDAwNjA3MjEwNjIyRDBGMDAwMDAwMDBBMzIKKzoxMDMwQjAwMDA0MjJEMTE4MDAwNjA3MjcwNjIyRDEzMDAwMDAwMDBBOUEKKzoxMDMwQzAwMDA0MjJEMTU4MDAwNjA3MkQwNjIyRDE3MDAwMDAwMDBBMDQKKzoxMDMwRDAwMDA0MjJEMTk4MDAwNjA3MzMwNjIyRDFCMDAwMDAwMDBBNkUKKzoxMDMwRTAwMDA0MjJEMUQ4MDAwNjA3MzkwNjIyRDFGMDAwMDAwMDBBRDgKKzoxMDMwRjAwMDA0MjJEMjE4MDAwNjA3M0YwNjIyRDIzMDAwMDAwMDBBNDAKKzoxMDMxMDAwMDA0MjJEMjU4MDAwNjA3NDUwNjIyRDI3MDAwMDAwMDBBQTkKKzoxMDMxMTAwMDA0MjJEMjk4MDAwNjA3NEIwNjIyRDJCMDAwMDAwMDBBMTMKKzoxMDMxMjAwMDA0MjJEMkQ4MDAwNjA3NTEwNjIyRDJGMDAwMDAwMDBBN0QKKzoxMDMxMzAwMDA0MjJEMzE4MDAwNjA3NTcwNjIyRDMzMDAwMDAwMDBBRTUKKzoxMDMxNDAwMDA0MjJEMzU4MDAwNjA3NUQwNjIyRDM3MDAwMDAwMDBBNEYKKzoxMDMxNTAwMDA0MjJEMzk4MDAwNjA3NjMwNjIyRDNCMDAwMDAwMDBBQjkKKzoxMDMxNjAwMDA0MjJEM0Q4MDAwNjA3NjkwNjIyRDNGMDAwMDAwMDBBMjMKKzoxMDMxNzAwMDA0MjJENDE4MDAwNjA3NkYwNjIyRDQzMDAwMDAwMDBBOEIKKzoxMDMxODAwMDA0MjJENDU4MDAwNjA3NzUwNjIyRDQ3MDAwMDAwMDBBRjUKKzoxMDMxOTAwMDA0MjJENDk4MDAwNjA3N0IwNjIyRDRCMDAwMDAwMDBBNUYKKzoxMDMxQTAwMDA0MjJENEQ4MDAwNjA3ODEwNjIyRDRGMDAwMDAwMDBBQzkKKzoxMDMxQjAwMDA0MjJENTE4MDAwNjA3ODcwNjIyRDUzMDAwMDAwMDBBMzEKKzoxMDMxQzAwMDA0MjJENTU4MDAwNjA3OEQwNjIyRDU3MDAwMDAwMDBBOUIKKzoxMDMxRDAwMDA0MjJENTk4MDAwNjA3OTMwNjIyRDVCMDAwMDAwMDBBMDUKKzoxMDMxRTAwMDA0MjJENUQ4MDAwNjA3OTkwNjIyRDVGMDAwMDAwMDBBNkYKKzoxMDMxRjAwMDA0MjJENjE4MDAwNjA3OUYwNjIyRDYzMDAwMDAwMDBBRDcKKzoxMDMyMDAwMDA0MjJENjU4MDAwNjA3QTUwNjIyRDY3MDAwMDAwMDBBNDAKKzoxMDMyMTAwMDA0MjJENjk4MDAwNjA3QUIwNjIyRDZCMDAwMDAwMDBBQUEKKzoxMDMyMjAwMDA0MjJENkQ4MDAwNjA3QjEwNjIyRDZGMDAwMDAwMDBBMTQKKzoxMDMyMzAwMDA0MjJENzE4MDAwNjA3QjcwNjIyRDczMDAwMDAwMDBBN0MKKzoxMDMyNDAwMDA0MjJENzU4MDAwNjA3QkQwNjIyRDc3MDAwMDAwMDBBRTYKKzoxMDMyNTAwMDA0MjJENzk4MDAwNjA3QzMwNjIyRDdCMDAwMDAwMDBBNTAKKzoxMDMyNjAwMDA0MjJEN0Q4MDAwNjA3QzkwNjIyRDdGMDAwMDAwMDBBQkEKKzoxMDMyNzAwMDA0MjJEODE4MDAwNjA3Q0YwNjIyRDgzMDAwMDAwMDBBMjIKKzoxMDMyODAwMDA0MjJEODU4MDAwNjA3RDUwNjIyRDg3MDAwMDAwMDBBOEMKKzoxMDMyOTAwMDA0MjJEODk4MDAwNjA3REIwNjIyRDhCMDAwMDAwMDBBRjYKKzoxMDMyQTAwMDA0MjJEOEQ4MDAwNjA3RTEwNjIyRDhGMDAwMDAwMDBBNjAKKzoxMDMyQjAwMDA0MjJEOTE4MDAwNjA3RTcwNjIyRDkzMDAwMDAwMDBBQzgKKzoxMDMyQzAwMDA0MjJEOTU4MDAwNjA3RUQwNjIyRDk3MDAwMDAwMDBBMzIKKzoxMDMyRDAwMDA0MjJEOTk4MDAwNjA3RjMwNjIyRDlCMDAwMDAwMDBBOUMKKzoxMDMyRTAwMDA0MjJEOUQ4MDAwNjA3RjkwNjIyRDlGMDAwMDAwMDBBMDYKKzoxMDMyRjAwMDA0MjJEQTE4MDAwNjA3RkYwNjIyREEzMDAwMDAwMDBBNkUKKzoxMDMzMDAwMDA0MjJEQTU4MDAwNjA4MDUwNjIyREE3MDAwMDAwMDBBRDYKKzoxMDMzMTAwMDA0MjJEQTk4MDAwNjA4MEIwNjIyREFCMDAwMDAwMDBBNDAKKzoxMDMzMjAwMDA0MjJEQUQ4MDAwNjA4MTEwNjIyREFGMDAwMDAwMDBBQUEKKzoxMDMzMzAwMDA0MjJEQjE4MDAwNjA4MTcwNjIyREIzMDAwMDAwMDBBMTIKKzoxMDMzNDAwMDA0MjJEQjU4MDAwNjA4MUQwNjIyREI3MDAwMDAwMDBBN0MKKzoxMDMzNTAwMDA0MjJEQjk4MDAwNjA4MjMwNjIyREJCMDAwMDAwMDBBRTYKKzoxMDMzNjAwMDA0MjJEQkQ4MDAwNjA4MjkwNjIyREJGMDAwMDAwMDBBNTAKKzoxMDMzNzAwMDA0MjJEQzE4MDAwNjA4MkYwNjIyREMzMDAwMDAwMDBBQjgKKzoxMDMzODAwMDA0MjJEQzU4MDAwNjA4MzUwNjIyREM3MDAwMDAwMDBBMjIKKzoxMDMzOTAwMDA0MjJEQzk4MDAwNjA4M0IwNjIyRENCMDAwMDAwMDBBOEMKKzoxMDMzQTAwMDA0MjJEQ0Q4MDAwNjA4NDEwNjIyRENGMDAwMDAwMDBBRjYKKzoxMDMzQjAwMDA0MjJERDE4MDAwNjA4NDcwNjIyREQzMDAwMDAwMDBBNUUKKzoxMDMzQzAwMDA0MjJERDU4MDAwNjA4NEQwNjIyREQ3MDAwMDAwMDBBQzgKKzoxMDMzRDAwMDA0MjJERDk4MDAwNjA4NTMwNjIyRERCMDAwMDAwMDBBMzIKKzoxMDMzRTAwMDA0MjJEREQ4MDAwNjA4NTkwNjIyRERGMDAwMDAwMDBBOUMKKzoxMDMzRjAwMDA0MjJERTE4MDAwNjA4NUYwNjIyREUzMDAwMDAwMDBBMDQKKzoxMDM0MDAwMDA0MjJERTU4MDAwNjA4NjUwNjIyREU3MDAwMDAwMDBBNkQKKzoxMDM0MTAwMDA0MjJERTk4MDAwNjA4NkIwNjIyREVCMDAwMDAwMDBBRDcKKzoxMDM0MjAwMDA0MjJERUQ4MDAwNjA4NzEwNjIyREVGMDAwMDAwMDBBNDEKKzoxMDM0MzAwMDA0MjJERjE4MDAwNjA4NzcwNjIyREYzMDAwMDAwMDBBQTkKKzoxMDM0NDAwMDA0MjJERjU4MDAwNjA4N0QwNjIyREY3MDAwMDAwMDBBMTMKKzoxMDM0NTAwMDA0MjJERjk4MDAwNjA4ODMwNjIyREZCMDAwMDAwMDBBN0QKKzoxMDM0NjAwMDA0MjJERkQ4MDAwNjA4ODkwNjIyREZGMDAwMDAwMDBBRTcKKzoxMDM0NzAwMDA0MjJFMDE4MDAwNjA4OEYwNjIyRTAzMDAwMDAwMDBBNEYKKzoxMDM0ODAwMDA0MjJFMDU4MDAwNjA4OTUwNjIyRTA3MDAwMDAwMDBBQjkKKzoxMDM0OTAwMDA0MjJFMDk4MDAwNjA4OUIwNjIyRTBCMDAwMDAwMDBBMjMKKzoxMDM0QTAwMDA0MjJFMEQ4MDAwNjA4QTEwNjIyRTBGMDAwMDAwMDBBOEQKKzoxMDM0QjAwMDA0MjJFMTE4MDAwNjA4QTcwNjIyRTEzMDAwMDAwMDBBRjUKKzoxMDM0QzAwMDA0MjJFMTU4MDAwNjA4QUQwNjIyRTE3MDAwMDAwMDBBNUYKKzoxMDM0RDAwMDA0MjJFMTk4MDAwNjA4QjMwNjIyRTFCMDAwMDAwMDBBQzkKKzoxMDM0RTAwMDA0MjJFMUQ4MDAwNjA4QjkwNjIyRTFGMDAwMDAwMDA0MzkKKzoxMDM0RjAwMDA2MjIxNTM4MDAwMDAwMDIwNjIyMTFFODAwMDAwMDAyMzIKKzoxMDM1MDAwMDA2MjJGMzAwMDAwMDAwMDgwMjIyMTE0ODAwMDAwMDAwMUIKKzoxMDM1MTAwMDA2MjI1OTAwMDAwMDAwMDYwNjIyMzMwMDAwMDAwMDAyQzcKKzoxMDM1MjAwMDA2MjI2MDQwMDAwMDAwMzAwNjIyRjMyMDAwMDAwMDA4NjAKKzoxMDM1MzAwMDAyMjIxMTRDMDAwMDAwMDAwNjIyNTkxODAwMDAwMDA2NkIKKzoxMDM1NDAwMDA2MjIzMzA4MDAwMDAwMDIwNjIyNjEwMDAwMDAwMDMwNUQKKzoxMDM1NTAwMDA2MjJGMzQwMDAwMDAwMDgwMjIyMTE1MDAwMDAwMDAwODMKKzoxMDM1NjAwMDA2MjI1OTMwMDAwMDAwMDYwNjIyMzMxMDAwMDAwMDAyMzcKKzoxMDM1NzAwMDA2MjI2MUMwMDAwMDAwMzAwNjIyRjM2MDAwMDAwMDA4NEYKKzoxMDM1ODAwMDAyMjIxMTU0MDAwMDAwMDAwNjIyNTk0ODAwMDAwMDA2RTMKKzoxMDM1OTAwMDA2MjIzMzE4MDAwMDAwMDIwNjIyNjI4MDAwMDAwMDMwN0MKKzoxMDM1QTAwMDA2MjJGMzgwMDAwMDAwMDgwMjIyMTE1ODAwMDAwMDAwRUIKKzoxMDM1QjAwMDA2MjI1OTYwMDAwMDAwMDYwNjIyMzMyMDAwMDAwMDAyQTcKKzoxMDM1QzAwMDA2MjI2MzQwMDAwMDAwMzAwNjIyRjNBMDAwMDAwMDA4M0QKKzoxMDM1RDAwMDAyMjIxMTVDMDAwMDAwMDAwNjIyNTk3ODAwMDAwMDA2NUIKKzoxMDM1RTAwMDA2MjIzMzI4MDAwMDAwMDIwNjIyNjQwMDAwMDAwMDMwOUEKKzoxMDM1RjAwMDA2MjJGM0MwMDAwMDAwMDgwMjIyMTE2MDAwMDAwMDAwNTMKKzoxMDM2MDAwMDA2MjI1OTkwMDAwMDAwMDYwNjIyMzMzMDAwMDAwMDAyMTYKKzoxMDM2MTAwMDA2MjI2NEMwMDAwMDAwMzAwNjIyRjNFMDAwMDAwMDA4MkIKKzoxMDM2MjAwMDAyMjIxMTY0MDAwMDAwMDAwNjIyNTlBODAwMDAwMDA2RDIKKzoxMDM2MzAwMDA2MjIzMzM4MDAwMDAwMDIwNjIyNjU4MDAwMDAwMDMwQjgKKzoxMDM2NDAwMDAyMTYxMDAwMDAwMDAwMjgwMjE3MDAwODAwMDAwMDAyMDcKKzoxMDM2NTAwMDAyMTcwMDJDMDAwMDAwMDMwMjE3MDAzQzAwMDAwMDA0QzkKKzoxMDM2NjAwMDAyMTcwMDQ0MDAwMDAwMDAwMjE3MDA0ODAwMDAwMDAyOUEKKzoxMDM2NzAwMDAyMTcwMDRDMDAwMDAwOTAwMjE3MDA1MDAwMDAwMDkwNUMKKzoxMDM2ODAwMDAyMTcwMDU0MDA4MDAwOTAwMjE3MDA1ODA4MTAwMDAwMzQKKzoxMDM2OTAwMDAyMTcwMDcwMDAwMDAwMDYwMjE3MDA3ODAwMDAwOUZGMDIKKzoxMDM2QTAwMDAyMTcwMDdDMDAwMDA3NkMwMjE3MDFDNDA4MTAwMDAwMUMKKzoxMDM2QjAwMDAyMTcwMzQ0MDAwMDAwMDEwMjE3MDQwMDAwMDAwMDhBMDIKKzoxMDM2QzAwMDAyMTcwNDA0MDAwMDAwODAwMjE3MDQwODAwMDAwMDgxQjMKKzoxMDM2RDAwMDAyMTcwNDBDMDAwMDAwODAwMjE3MDQxMDAwMDAwMDhBOEEKKzoxMDM2RTAwMDAyMTcwNDE0MDAwMDAwODAwMjE3MDQxODAwMDAwMDgxNzMKKzoxMDM2RjAwMDAyMTcwNDFDMDAwMDAwODAwMjE3MDQzMDAwMDAwMDhBM0EKKzoxMDM3MDAwMDAyMTcwNDM0MDAwMDAwODAwMjE3MDQzODAwMDAwMDgxMTIKKzoxMDM3MTAwMDAyMTcwNDNDMDAwMDAwODAwMjE3MDQ0MDAwMDAwMDhBRTkKKzoxMDM3MjAwMDAyMTcwNDQ0MDAwMDAwODAwMjE3MDQ0ODAwMDAwMDgxRDIKKzoxMDM3MzAwMDAyMTcwNDRDMDAwMDAwODAwMjE3MDQ4MDAwMDAwMDhBNzkKKzoxMDM3NDAwMDAyMTcwNDg0MDAwMDAwODAwMjE3MDQ4ODAwMDAwMDgxMzIKKzoxMDM3NTAwMDAyMTcwNDhDMDAwMDAwODAwMjE3MDAzODAwN0MxMDA0NUYKKzoxMDM3NjAwMDAyMTcwMDA0MDAwMDAwMEYwMjE3MDFFQzAwMDAwMDAyMjUKKzoxMDM3NzAwMDAyMTcwMUY0MDAwMDAwMDIwMjE3MDFFQzAwMDAwMDAyMzEKKzoxMDM3ODAwMDAyMTcwMUY0MDAwMDAwMDIwMjE3MDFFQzAwMDAwMDAyMjEKKzoxMDM3OTAwMDAyMTcwMUY0MDAwMDAwMDIwMjE3MDFFQzAwMDAwMDAyMTEKKzoxMDM3QTAwMDAyMTcwMUY0MDAwMDAwMDIwMjE3MDFFQzAwMDAwMDAyMDEKKzoxMDM3QjAwMDAyMTcwMUY0MDAwMDAwMDIwMjE3MDFFQzAwMDAwMDAyRjEKKzoxMDM3QzAwMDAyMTcwMUY0MDAwMDAwMDIwMjE3MDFFQzAwMDAwMDAyRTEKKzoxMDM3RDAwMDAyMTcwMUY0MDAwMDAwMDIwMjE3MDFFQzAwMDAwMDAyRDEKKzoxMDM3RTAwMDAyMTcwMUY0MDAwMDAwMDIwNjE2NDAyNDAwMDAwMDAyNDcKKzoxMDM3RjAwMDAyMTY0MDcwMDAwMDAwMUMwMjE2NDIwODAwMDAwMDAxODIKKzoxMDM4MDAwMDAyMTY0MjEwMDAwMDAwMDEwMjE2NDIyMDAwMDAwMDAxRDIKKzoxMDM4MTAwMDAyMTY0MjI4MDAwMDAwMDEwMjE2NDIzMDAwMDAwMDAxOUEKKzoxMDM4MjAwMDAyMTY0MjM4MDAwMDAwMDEwMjE2NDI2MDAwMDAwMDAyNDkKKzoxMDM4MzAwMDBDMTY0MDFDMDAwM0QwOTAwQTE2NDAxQzAwMDAwMDlDOEYKKzoxMDM4NDAwMDBCMTY0MDFDMDAwMDAyNzEwMjE2NDAzMDAwMDAwMDI4RDgKKzoxMDM4NTAwMDAyMTY0MDM0MDAwMDAwMkMwMjE2NDAzODAwMDAwMDMwRjAKKzoxMDM4NjAwMDAyMTY0MDQ0MDAwMDAwMjAwMjE2NDAwMDAwMDAwMDAxNDMKKzoxMDM4NzAwMDAyMTY0MEQ4MDAwMDAwMDEwMjE2NDAwODAwMDAwMDAxQjYKKzoxMDM4ODAwMDAyMTY0MDBDMDAwMDAwMDEwMjE2NDAxMDAwMDAwMDAxNkEKKzoxMDM4OTAwMDAyMTY0MjQwMDAwMDAwMDAwMjE2NDI0ODAwMDAwMDAwRUMKKzoxMDM4QTAwMDA2MTY0MjcwMDAwMDAwMDIwMjE2NDI1MDAwMDAwMDAwOUUKKzoxMDM4QjAwMDAyMTY0MjU4MDAwMDAwMDAwNjE2NDI4MDAwMDAwMDAyNzYKKzoxMDM4QzAwMDAyMTY2MDA4MDAwMDEyMTQwMjE2NjAwQzAwMDAxMjAwQkMKKzoxMDM4RDAwMDAyMTY2MDEwMDAwMDEyMDQwMjE2NjAxQzAwMDBGRkZGQjgKKzoxMDM4RTAwMDAyMTY2MDIwMDAwMEZGRkYwMjE2NjAyNDAwMDBGRkZGQTgKKzoxMDM4RjAwMDAyMTY2MDI4MDAwMEZGRkYwMjE2NjAzODAwMDAwMDIwNUEKKzoxMDM5MDAwMDAyMTY2MDNDMDAwMDAwMTAwNjE2NjA0MDAwMDAwMDAyMzUKKzoxMDM5MTAwMDAyMTY2MDQ4MDAwMDAwMjMwMjE2NjA0QzAwMDAwMDI0REMKKzoxMDM5MjAwMDAyMTY2MDUwMDAwMDAwMjUwMjE2NjA1NDAwMDAwMDI2QjgKKzoxMDM5MzAwMDAyMTY2MDU4MDAwMDAwMjcwMjE2NjA1QzAwMDAwMDExQUIKKzoxMDM5NDAwMDAyMTY2MDYwMDAwMDAwMDAwMjE2NjA2NDAwMDAwMDJCOTgKKzoxMDM5NTAwMDAyMTY2MDY4MDAwMDAwMkMwMjE2NjA2QzAwMDAwMDJENEEKKzoxMDM5NjAwMDAyMTY2MDcwMDAwMDAwRUMwMjE2NjA3NDAwMDAwMDAwOTcKKzoxMDM5NzAwMDAyMTY2MDc4MDAwMDAwMjkwMjE2NjA3QzAwMDAwMDJBMTAKKzoxMDM5ODAwMDAyMTY2MDgwMDAwMDAwMkYwNjE2NjA4NDAwMDAwMDBEMDMKKzoxMDM5OTAwMDAyMTY2MEI4MDAwMDAwMDEwNjE2NjBCQzAwMDAwMDA4QjYKKzoxMDM5QTAwMDAyMTY2MERDMDAwMDAwMDEwNjE2NjBFMDAwMDAwMDA0NjIKKzoxMDM5QjAwMDAyMTY2MEYwMDAwMDAwMDEwNjE2NjBGNDAwMDAwMDAzMkIKKzoxMDM5QzAwMDAyMTY2MTAwMDAwMDAwMDEwNjE2NjEwNDAwMDAwMDJEQ0YKKzoxMDM5RDAwMDAyMTY2MUI4MDAwMDAwMDEwNjE2NjFCQzAwMDAwMDA4NzQKKzoxMDM5RTAwMDAyMTY2MURDMDAwMDAwMDEwNjE2NjFFMDAwMDAwMDA0MjAKKzoxMDM5RjAwMDAyMTY2MUYwMDAwMDAwMDEwNjE2NjFGNDAwMDAwMDAzRTkKKzoxMDNBMDAwMDAyMTY2MjAwMDAwMDAwMDEwNjE2NjIwNDAwMDAwMDBEQUMKKzoxMDNBMTAwMDAyMTY2MjM4MDdGRkZGRkYwMjE2NjIzQzAwMDAwMDdGQkIKKzoxMDNBMjAwMDAyMTY2MjQwMDdGRkZGRkYwMjE2NjI0NDAwMDAwMDNGREIKKzoxMDNBMzAwMDAxMTY2MjQ4MDAwMDAwMDAwMTE2NjI0QzAwMDAwMDAwMDAKKzoxMDNBNDAwMDAxMTY2MjUwMDAwMDAwMDAwMTE2NjI1NDAwMDAwMDAwRTAKKzoxMDNBNTAwMDAxMTY2MjU4MDAwMDAwMDAwMTE2NjI1QzAwMDAwMDAwQzAKKzoxMDNBNjAwMDAxMTY2MjYwMDAwMDAwMDAwMTE2NjI2NDAwMDAwMDAwQTAKKzoxMDNBNzAwMDAxMTY2MjY4MDAwMDAwMDAwMTE2NjI2QzAwMDAwMDAwODAKKzoxMDNBODAwMDAxMTY2MjcwMDAwMDAwMDAwMTE2NjI3NDAwMDAwMDAwNjAKKzoxMDNBOTAwMDAxMTY2Mjc4MDAwMDAwMDAwMTE2NjI3QzAwMDAwMDAwNDAKKzoxMDNBQTAwMDAxMTY2MkQ0MDAwMDAwMDAwMjE2NjJEODAwMDBGRkZGNzkKKzoxMDNBQjAwMDAyMTY2MkRDMDAwMEZGRkYwMjE2NjJFMDAwMDBGRkZGNUEKKzoxMDNBQzAwMDAyMTY2MkU0MDAwMEZGRkYwQzE2NjAwMDAwMDAwM0U4MkQKKzoxMDNBRDAwMDBBMTY2MDAwMDAwMDAwMDEwQjE2NjAwMDAwMDAwMDAzRTEKKzoxMDNBRTAwMDAyMTY4MDQwMDAwMDAwMDYwMjE2ODA0NDAwMDAwMDA1MTcKKzoxMDNBRjAwMDAyMTY4MDQ4MDAwMDAwMEEwMjE2ODA0QzAwMDAwMDA1RjMKKzoxMDNCMDAwMDAyMTY4MDU0MDAwMDAwMDIwMjE2ODBDQzAwMDAwMDA0NUYKKzoxMDNCMTAwMDAyMTY4MEQwMDAwMDAwMDQwMjE2ODBENDAwMDAwMDA0QzkKKzoxMDNCMjAwMDAyMTY4MEQ4MDAwMDAwMDQwMjE2ODBEQzAwMDAwMDA0QTkKKzoxMDNCMzAwMDAyMTY4MEUwMDAwMDAwMDQwMjE2ODBFNDAwMDAwMDA0ODkKKzoxMDNCNDAwMDAyMTY4MEU4MDAwMDAwMDQwMjE2ODgwNDAwMDAwMDA2NDcKKzoxMDNCNTAwMDAyMTY4MDMwMDAwMDAwN0MwMjE2ODAzNDAwMDAwMDNEMTgKKzoxMDNCNjAwMDAyMTY4MDM4MDAwMDAwM0YwMjE2ODAzQzAwMDAwMDlDRDYKKzoxMDNCNzAwMDAyMTZFNkU4MDAwMDYwMDAwMjE2RTZFQzAwMDA2MDAwQjUKKzoxMDNCODAwMDAyMTZFNkYwMDAwMDYwMDAwMjE2RTZGNDAwMDA2MDAwOTUKKzoxMDNCOTAwMDAyMTY4MjM0MDAwMDI1RTQwMjE2ODIzODAwMDA4MDAwRkMKKzoxMDNCQTAwMDAyMTY4MDk0MDAwMDI1RTMwMjE2ODFGNDAwMDAwQzA4NDAKKzoxMDNCQjAwMDAyMTY4MUY4MDAwMDAwNDAwMjE2ODFGQzAwMDAwMTAwOUUKKzoxMDNCQzAwMDAyMTY4MjAwMDAwMDAwMjAwMjE2ODIwNDAwMDAwMDE3ODYKKzoxMDNCRDAwMDAyMTY4MjA4MDAwMDAwODAwMjE2ODIwQzAwMDAwMjAwMUIKKzoxMDNCRTAwMDAyMTY4MjEwMDAwMDAwMDAwMjE2ODIzQzAwMDAwMDEzNDIKKzoxMDNCRjAwMDAyMTY4MjIwMDA4RjAwOEYwMjE2ODIxQzAwOEYwMDhGMTkKKzoxMDNDMDAwMDAyMTY4MEYwMDAwMDAwMDcwMjE2ODIxODAxRkYwMUZGNzMKKzoxMDNDMTAwMDAyMTY4MjE0MDFGRjAxRkYwNjE2ODBGNDAwMDAwMDAyNjQKKzoxMDNDMjAwMDAyMTY4MTFDMDAwMDAwMDUwMjE2ODEyMDAwMDAwMDA1MUMKKzoxMDNDMzAwMDAyMTY4MTI0MDAwMDAwMDUwMjE2ODEyODAwMDAwMDA4RjkKKzoxMDNDNDAwMDAyMTY4MTJDMDAwMDAwMDYwMjE2ODEzMDAwMDAwMDA3RDkKKzoxMDNDNTAwMDA2MTY4MTM0MDAwMDAwMDQwMjE2ODBGQzAwMDAwMDAwRkIKKzoxMDNDNjAwMDA2MTY4MTQ0MDAwMDAwMDIwMjE2ODE0QzAwMDAwMDA0ODgKKzoxMDNDNzAwMDAyMTY4MTUwMDAwMDAwMDEwMjE2ODE1NDAwMDAwMDAyNkIKKzoxMDNDODAwMDAyMTY4MTU4MDAwMDAwMDUwMjE2ODE1QzAwMDAwMDA1NDQKKzoxMDNDOTAwMDAyMTY4MTYwMDAwMDAwMDUwMjE2ODE2NDAwMDAwMDA1MjQKKzoxMDNDQTAwMDAyMTY4MTY4MDAwMDAwMDgwMjE2ODEwMDAwMDAwMDAwNzIKKzoxMDNDQjAwMDAyMTY4MTZDMDAwMDAwMDYwMjE2ODE3MDAwMDAwMDA3RTkKKzoxMDNDQzAwMDA2MTY4MTc0MDAwMDAwMDYwMjE2ODE4QzAwMDAwMDA0QjQKKzoxMDNDRDAwMDAyMTY4MTkwMDAwMDAwMDEwMjE2ODEwNDAwMDAwMDAwMUQKKzoxMDNDRTAwMDAyMTY4MTk0MDAwMDAwMDIwMjE2ODE5ODAwMDAwMDA1NkYKKzoxMDNDRjAwMDAyMTY4MTlDMDAwMDAwMDUwMjE2ODFBMDAwMDAwMDA1NEMKKzoxMDNEMDAwMDAyMTY4MUE0MDAwMDAwMDUwMjE2ODFBODAwMDAwMDA4MjgKKzoxMDNEMTAwMDAyMTY4MUFDMDAwMDAwMDYwMjE2ODFCMDAwMDAwMDA3MDgKKzoxMDNEMjAwMDA2MTY4MUI0MDAwMDAwMDIwMjE2ODEwODAwMDAwMDAwOUYKKzoxMDNEMzAwMDA2MTY4MUJDMDAwMDAwMDQwMjE2ODFDQzAwMDAwMDA0QkQKKzoxMDNENDAwMDAyMTY4MUQwMDAwMDAwMDEwMjE2ODFENDAwMDAwMDAyOUEKKzoxMDNENTAwMDAyMTY4MUQ4MDAwMDAwMDUwMjE2ODFEQzAwMDAwMDA1NzMKKzoxMDNENjAwMDAyMTY4MUUwMDAwMDAwMDUwMjE2ODEwQzAwMDAwMDA0MkMKKzoxMDNENzAwMDAyMTY4MUU0MDAwMDAwMDUwMjE2ODFFODAwMDAwMDA4MzgKKzoxMDNEODAwMDAyMTY4MUVDMDAwMDAwMDYwMjE2ODFGMDAwMDAwMDA3MTgKKzoxMDNEOTAwMDAyMTY4MTEwMDAwMDAwMDEwMjE2ODExNDAwMDAwMDAyQ0EKKzoxMDNEQTAwMDAyMTY4MTE4MDAwMDAwMDUwMjE2ODA5QzAwMDAwMDRDREQKKzoxMDNEQjAwMDAyMTY4MEEwMDAwMDAwNEMwNjE2ODBDNDAwMDAwMDAyMUQKKzoxMDNEQzAwMDAyMTY4MEE0MDAwMDAwMDAwMjE2ODBBODAwMDAwMDAwNzcKKzoxMDNERDAwMDAyMTY4MEFDMDAwMDAwNEMwNjE2ODBCMDAwMDAwMDA1MDIKKzoxMDNERTAwMDAyMTZFNkY4MDAwMDAyMDQwMjE2ODI0MDAwM0YwMDNGN0YKKzoxMDNERjAwMDAyMTY4MjQ0MDAzRjAwM0YwNjE2ODI5MDAwMDAwMDA0MzUKKzoxMDNFMDAwMDAyMTY4MjQ4MDA4MDAwODAwMjE2ODI0QzAwODAwMDgwRUEKKzoxMDNFMTAwMDAyMTY4MjUwMDEwMDAxMDAwMjE2ODI1NDAxMDAwMTAwQzYKKzoxMDNFMjAwMDA2MTY4MjU4MDAwMDAwMDIwMjE2ODI2MDAwNDAwMDQwMjAKKzoxMDNFMzAwMDAyMTY4MjY0MDA0MDAwNDAwMjE2ODI2ODFFMDAxRTAwQzYKKzoxMDNFNDAwMDAyMTY4MjZDMUUwMDFFMDAwMjE2ODI3MDQwMDA0MDAwQTYKKzoxMDNFNTAwMDAyMTY4Mjc0NDAwMDQwMDAwMjE2ODI3ODgwMDA4MDAwQzIKKzoxMDNFNjAwMDAyMTY4MjdDODAwMDgwMDAwMjE2ODI4MDIwMDAyMDAwRTIKKzoxMDNFNzAwMDAyMTY4Mjg0MjAwMDIwMDAwNjE2ODI4ODAwMDAwMDAyQkMKKzoxMDNFODAwMDAyMTY4MDkwMDAwMDAwNEIwMjE2ODA2MDAwMDAwMTQwODYKKzoxMDNFOTAwMDAyMTY4MDY0MDAwMDAxNDAwNjE2ODA4ODAwMDAwMDAyQkYKKzoxMDNFQTAwMDAyMTY4MDY4MDAwMDAwMDAwMjE2ODA2QzAwMDAwMDAwMEUKKzoxMDNFQjAwMDAyMTY4MDcwMDAwMDAwQzAwNjE2ODA3NDAwMDAwMDA1MjUKKzoxMDNFQzAwMDAyMTY4ODBDMDEwMTAxMDEwMjE2ODgxMDAxMDEyMDA0NkMKKzoxMDNFRDAwMDAyMTY4ODE0MjAwODEwMDEwMjE2ODgxODAxMDEwMTIwMUEKKzoxMDNFRTAwMDAyMTY4ODFDMDEwMTAxMDEwMjE2ODgyMDAxMDEyMDA0MkMKKzoxMDNFRjAwMDAyMTY4ODI0MjAwODEwMDEwMjE2ODgyODAxMDEwMTIwREEKKzoxMDNGMDAwMDAyMTY4ODJDMjAwODEwMDEwMjE2ODgzMDAxMDEwMTIwQjkKKzoxMDNGMTAwMDAyMTY4ODM0MDEwMTAxMDEwMjE2ODgzODAxMDEyMDA0Q0IKKzoxMDNGMjAwMDAyMTY4ODNDMjAwODEwMDEwMjE2ODg0MDAxMDEwMTIwNzkKKzoxMDNGMzAwMDAyMTY4ODQ0MDEwMTAxMDEwMjE2ODg0ODAxMDEyMDA0OEIKKzoxMDNGNDAwMDAyMTZFNkJDMDAwMDAwMDAwMjE2RTZDMDAwMDAwMDAyRjcKKzoxMDNGNTAwMDAyMTZFNkM0MDAwMDAwMDQwMjE2RTZDODAwMDAwMDA2Q0YKKzoxMDNGNjAwMDAyMTZFNzk0MDAwMDAwMDEwMjE2ODBFQzAwMDAwMEZGM0EKKzoxMDNGNzAwMDAyMTQwMDAwMDAwMDAwMDEwMjE1QzAyNDAwMDAwMDAwMkYKKzoxMDNGODAwMDAyMTVDMEVDMDAwMDAwMDEwMjE1QzBGMDAwMDAwMDAxQTUKKzoxMDNGOTAwMDA2MTVDMTAwMDAwMDAwMDIwMjE0MDAwNDAwMDAwMDAxMjgKKzoxMDNGQTAwMDAyMTQwMDA4MDAwMDAwMDEwMjE0MDAwQzAwMDAwMDAxQ0YKKzoxMDNGQjAwMDAyMTQwMDMwMDAwMDAwMDEwMjE0MDAzNDAwMDAwMDAxNkYKKzoxMDNGQzAwMDAyMTQwMDQwMDAwMDAwMDEwMjE0MDA0NDAwMDBGRkZGNDIKKzoxMDNGRDAwMDA2MTQwMDA0MDAwMDAwMDMwMjE0MDAwMDAwMDAwMDAwQUEKKzoxMDNGRTAwMDA2MDI4MDAwMDAwMDIwMDAwMjAyMDA1ODAwMDAwMDMyOUIKKzoxMDNGRjAwMDAyMDIwMEEwMDMxNTAwMjAwMjAyMDBBNDAzMTUwMDIwMDUKKzoxMDQwMDAwMDAyMDIwMEE4MDEwMDAwMzAwMjAyMDBBQzA4MTAwMDAwMEIKKzoxMDQwMTAwMDAyMDIwMEIwMDAwMDAwMzYwMjAyMDBCNDAwMDAwMDMwQ0UKKzoxMDQwMjAwMDAyMDIwMEI4MDAwMDAwMzEwMjAyMDBCQzAwMDAwMDAyRTEKKzoxMDQwMzAwMDAyMDIwMEMwMDAwMDAwMDUwMjAyMDBDNDAwMDAwMDAyRUQKKzoxMDQwNDAwMDAyMDIwMEM4MDAwMDAwMDIwMjAyMDBEMDAwMDAwMDA3QzcKKzoxMDQwNTAwMDAyMDIwMERDMDAwMDAwMDAwMjAyMDBFMDAwMDAwMDA1OTcKKzoxMDQwNjAwMDAyMDIwMEU0MDAwMDAwMDMwMjAyMDBGMDAwMDAwMDAxNzAKKzoxMDQwNzAwMDAyMDIwMEZDMDAwMDAwMDYwMjAyMDEyMDAwMDAwMDAwMTUKKzoxMDQwODAwMDAyMDIwMTM0MDAwMDAwMDIwMjAyMDFCMDAwMDAwMDAxM0YKKzoxMDQwOTAwMDAyMDIwMjBDMDAwMDAwMDEwMjAyMDIxNDAwMDAwMDAxRjIKKzoxMDQwQTAwMDAyMDIwMjE4MDAwMDAwMDIwMjAyMDQwNDAwMDAwMDAxRTMKKzoxMDQwQjAwMDAyMDIwNDBDMDAwMDAwNDAwMjAyMDQxMDAwMDAwMDQwNTQKKzoxMDQwQzAwMDAyMDIwNDFDMDAwMDAwMDQwMjAyMDQyMDAwMDAwMDIwODAKKzoxMDQwRDAwMDAyMDIwNDI0MDAwMDAwMDIwMjAyMDQyODAwMDAwMDIwNjIKKzoxMDQwRTAwMDA2MDIwNTAwMDAwMDAwMTIwNDAyMDQ4MDAwMjAwOEJGNDAKKzoxMDQwRjAwMDAyMDIwMDYwMDAwMDAwMEYwMjAyMDA2NDAwMDAwMDA3REUKKzoxMDQxMDAwMDAyMDIwMDY4MDAwMDAwMDAwMjAyMDA2QzAwMDAwMDBFQzUKKzoxMDQxMTAwMDAyMDIwMDcwMDAwMDAwMEUwNjAyMDA3NDAwMDAwMDAzOUUKKzoxMDQxMjAwMDAyMDIwMEY0MDAwMDAwMDQwMjAyMDAwNDAwMDAwMDAxOEEKKzoxMDQxMzAwMDAyMDIwMDA4MDAwMDAwMDEwMjAyMDAwQzAwMDAwMDAxNjEKKzoxMDQxNDAwMDAyMDIwMDEwMDAwMDAwMDEwMjAyMDAxNDAwMDAwMDAxNDEKKzoxMDQxNTAwMDAyMDIwMDE4MDAwMDAwMDEwMjAyMDAxQzAwMDAwMDAxMjEKKzoxMDQxNjAwMDAyMDIwMDIwMDAwMDAwMDEwMjAyMDAyNDAwMDAwMDAxMDEKKzoxMDQxNzAwMDAyMDIwMDI4MDAwMDAwMDEwMjAyMDAyQzAwMDAwMDAxRTEKKzoxMDQxODAwMDAyMDIwMDMwMDAwMDAwMDEwMjAyMDAzNDAwMDAwMDAxQzEKKzoxMDQxOTAwMDAyMDIwMDM4MDAwMDAwMDEwMjAyMDAzQzAwMDAwMDAxQTEKKzoxMDQxQTAwMDAyMDIwMDQwMDAwMDAwMDEwMjAyMDA0NDAwMDAwMDAxODEKKzoxMDQxQjAwMDAyMDIwMDQ4MDAwMDAwMDEwMjAyMDA0QzAwMDAwMDAxNjEKKzoxMDQxQzAwMDAyMDIwMDUwMDAwMDAwMDEwMjAyMDEwODAwMDAwMEM4QzUKKzoxMDQxRDAwMDAyMDIwMTE4MDAwMDAwMDIwMjAyMDFDNDAwMDAwMDAwRjcKKzoxMDQxRTAwMDAyMDIwMUNDMDAwMDAwMDAwMjAyMDFENDAwMDAwMDAyMjMKKzoxMDQxRjAwMDAyMDIwMURDMDAwMDAwMDIwMjAyMDFFNDAwMDAwMEZGRjQKKzoxMDQyMDAwMDAyMDIwMUVDMDAwMDAwRkYwMjAyMDEwMDAwMDAwMDAwQjkKKzoxMDQyMTAwMDAyMDIwMTBDMDAwMDAwQzgwMjAyMDExQzAwMDAwMDAyQTIKKzoxMDQyMjAwMDAyMDIwMUM4MDAwMDAwMDAwMjAyMDFEMDAwMDAwMDAwRUMKKzoxMDQyMzAwMDAyMDIwMUQ4MDAwMDAwMDIwMjAyMDFFMDAwMDAwMDAyQjgKKzoxMDQyNDAwMDAyMDIwMUU4MDAwMDAwRkYwMjAyMDFGMDAwMDAwMEZGOEUKKzoxMDQyNTAwMDAyMDIwMTA0MDAwMDAwMjAwMjAyMDEwODAwMDAwMEM4NjAKKzoxMDQyNjAwMDAyMDIwMTE4MDAwMDAwMDIwMjAyMDFDNDAwMDAwMDAwNjYKKzoxMDQyNzAwMDAyMDIwMUNDMDAwMDAwMDAwMjAyMDFENDAwMDAwMDAyOTIKKzoxMDQyODAwMDAyMDIwMURDMDAwMDAwMDIwMjAyMDFFNDAwMDAwMEZGNjMKKzoxMDQyOTAwMDAyMDIwMUVDMDAwMDAwRkYwMjAyMDEwMDAwMDAwMDEwMTkKKzoxMDQyQTAwMDAyMDIwMTBDMDAwMDAwQzgwMjAyMDExQzAwMDAwMDAyMTIKKzoxMDQyQjAwMDAyMDIwMUM4MDAwMDAwMDAwMjAyMDFEMDAwMDAwMDAwNUMKKzoxMDQyQzAwMDAyMDIwMUQ4MDAwMDAwMDIwMjAyMDFFMDAwMDAwMDAyMjgKKzoxMDQyRDAwMDAyMDIwMUU4MDAwMDAwRkYwMjAyMDFGMDAwMDAwMEZGRkUKKzoxMDQyRTAwMDAyMDIwMTA0MDAwMDAwMzAwMjAyMDEwODAwMDAwMEM4QzAKKzoxMDQyRjAwMDAyMDIwMTE4MDAwMDAwMDIwMjAyMDFDNDAwMDAwMDAwRDYKKzoxMDQzMDAwMDAyMDIwMUNDMDAwMDAwMDAwMjAyMDFENDAwMDAwMDAyMDEKKzoxMDQzMTAwMDAyMDIwMURDMDAwMDAwMDIwMjAyMDFFNDAwMDAwMEZGRDIKKzoxMDQzMjAwMDAyMDIwMUVDMDAwMDAwRkYwMjAyMDEwMDAwMDAwMDQwNTgKKzoxMDQzMzAwMDAyMDIwMTBDMDAwMDAwQzgwMjAyMDExQzAwMDAwMDAyODEKKzoxMDQzNDAwMDAyMDIwMUM4MDAwMDAwMDAwMjAyMDFEMDAwMDAwMDAwQ0IKKzoxMDQzNTAwMDAyMDIwMUQ4MDAwMDAwMDIwMjAyMDFFMDAwMDAwMDAyOTcKKzoxMDQzNjAwMDAyMDIwMUU4MDAwMDAwRkYwMjAyMDFGMDAwMDAwMEZGNkQKKzoxMDQzNzAwMDAyMDIwMTA0MDAwMDAwNjAwMjAyMDEwODAwMDAwMEM4RkYKKzoxMDQzODAwMDAyMDIwMTE4MDAwMDAwMDIwMjAyMDFDNDAwMDAwMDAwNDUKKzoxMDQzOTAwMDAyMDIwMUNDMDAwMDAwMDAwMjAyMDFENDAwMDAwMDAyNzEKKzoxMDQzQTAwMDAyMDIwMURDMDAwMDAwMDIwMjAyMDFFNDAwMDAwMEZGNDIKKzoxMDQzQjAwMDAyMDIwMUVDMDAwMDAwRkYwMjAyMDEwMDAwMDAwMDUwQjgKKzoxMDQzQzAwMDAyMDIwMTBDMDAwMDAwQzgwMjAyMDExQzAwMDAwMDAyRjEKKzoxMDQzRDAwMDAyMDIwMUM4MDAwMDAwMDAwMjAyMDFEMDAwMDAwMDAwM0IKKzoxMDQzRTAwMDAyMDIwMUQ4MDAwMDAwMDIwMjAyMDFFMDAwMDAwMDAyMDcKKzoxMDQzRjAwMDAyMDIwMUU4MDAwMDAwRkYwMjAyMDFGMDAwMDAwMEZGREQKKzoxMDQ0MDAwMDAyMDIwMTA0MDAwMDAwNzAwNzI4MDQwMDAwQjMwMDAwNEQKKzoxMDQ0MTAwMDA4MjgwN0I4MDAwOTA4REYwNzJDMDAwMDI4Q0IwMDAwOTcKKzoxMDQ0MjAwMDA3MkM4MDAwMzY1RDBBMzMwNzJEMDAwMDM0NzAxN0NCNEYKKzoxMDQ0MzAwMDA3MkQ4MDAwM0E5NDI0RTgwNzJFMDAwMDM2QzczMzhFRkIKKzoxMDQ0NDAwMDA3MkU4MDAwMUNFOTQxNDAwODJFQzVEMDI3NDYwOEUxMTAKKzoxMDQ0NTAwMDAyMjgwMEJDMDAwMDAwMzAwMTI4MDAwMDAwMDAwMDAwMUQKKzoxMDQ0NjAwMDAxMjgwMDA0MDAwMDAwMDAwMTI4MDAwODAwMDAwMDAwRUUKKzoxMDQ0NzAwMDAxMjgwMDBDMDAwMDAwMDAwMTI4MDAxMDAwMDAwMDAwQ0UKKzoxMDQ0ODAwMDAxMjgwMDE0MDAwMDAwMDAwMjI4MDAyMDAwMDAwMDAxQTQKKzoxMDQ0OTAwMDAyMjgwMDI0MDAwMDAwMDIwMjI4MDAyODAwMDAwMDAzNzcKKzoxMDQ0QTAwMDAyMjgwMDJDMDAwMDAwMDAwMjI4MDAzMDAwMDAwMDA0NTgKKzoxMDQ0QjAwMDAyMjgwMDM0MDAwMDAwMDEwMjI4MDAzODAwMDAwMDAwM0IKKzoxMDQ0QzAwMDAyMjgwMDNDMDAwMDAwMDEwMjI4MDA0MDAwMDAwMDA0MTcKKzoxMDQ0RDAwMDAyMjgwMDQ0MDAwMDAwMDAwMjI4MDA0ODAwMDAwMDAxRkIKKzoxMDQ0RTAwMDAyMjgwMDRDMDAwMDAwMDMwMjI4MDA1MDAwMDAwMDAwRDkKKzoxMDQ0RjAwMDAyMjgwMDU0MDAwMDAwMDEwMjI4MDA1ODAwMDAwMDA0QjcKKzoxMDQ1MDAwMDAyMjgwMDVDMDAwMDAwMDAwMjI4MDA2MDAwMDAwMDAxOUEKKzoxMDQ1MTAwMDAyMjgwMDY0MDAwMDAwMDMwMjI4MDA2ODAwMDAwMDAwNzgKKzoxMDQ1MjAwMDAyMjgwMDZDMDAwMDAwMDEwMjI4MDA3MDAwMDAwMDA0NTYKKzoxMDQ1MzAwMDAyMjgwMDc0MDAwMDAwMDAwMjI4MDA3ODAwMDAwMDA0MzcKKzoxMDQ1NDAwMDAyMjgwMDdDMDAwMDAwMDMwNjI4MDA4MDAwMDAwMDAyMTIKKzoxMDQ1NTAwMDAyMjgwMEE0MDAwMDdGRkYwMjI4MDBBODAwMDAwM0ZGM0IKKzoxMDQ1NjAwMDAyMjgwMjI0MDAwMDAwMDAwMjI4MDIzNDAwMDAwMDAwOUIKKzoxMDQ1NzAwMDAyMjgwMjRDMDAwMDAwMDAwMjI4MDJFNDAwMDBGRkZGQjUKKzoxMDQ1ODAwMDA2MjgyMDAwMDAwMDA4MDAwMjJCOEJDMDAwMDAwMDAxNUMKKzoxMDQ1OTAwMDAyMkI4MDAwMDAwMDAwMDAwMjJCODA0MDAwMDAwMDE4NjkKKzoxMDQ1QTAwMDAyMkI4MDgwMDAwMDAwMEMwMjJCODBDMDAwMDAwMDY2RkYKKzoxMDQ1QjAwMDBDMkI4MzAwMDAwODY0NzAwQTJCODMwMDAwMDAwMTU3NTUKKzoxMDQ1QzAwMDBCMkI4MzAwMDAwMDA1NUYwQTJCODM0MDAwMDAwMDAwRDYKKzoxMDQ1RDAwMDBDMkI4MzQwMDAwMDAyMjYwQjJCODM0MDAwMDAwMDAxQkYKKzoxMDQ1RTAwMDAyMkI4MzgwMDAwODY0NzAwMjJCODNDMDAwMDAwMjI2MjcKKzoxMDQ1RjAwMDAyMkIxNDgwMDAwMDAwMDEwQTJCMTQ4MDAwMDAwMDAwMzAKKzoxMDQ2MDAwMDAyMkI5NDQwMDAwMDAwMDEwNjJCOTQ0ODAwMDAwMDAyOTkKKzoxMDQ2MTAwMDA2MkE5QTcwMDAwMDAwMDQwNDJBOUE4MDAwMDQwOEUzMjUKKzoxMDQ2MjAwMDA2MkE5QTkwMDAwMDAwMDIwNDJBOUE5ODAwMDIwOEU3REQKKzoxMDQ2MzAwMDA2MkE5MDAwMDAwMDAwNDgwNjJBMjAwODAwMDAwMEM4NTIKKzoxMDQ2NDAwMDA2MkEyMDAwMDAwMDAwMDIwNjJBOTEyODAwMDAwMDg2QTkKKzoxMDQ2NTAwMDA2MkFDMDAwMDAwMDAxMjAwNjJBOTM0ODAwMDAwMDAzM0IKKzoxMDQ2NjAwMDA0MkE5MzU0MDAwMTA4RTkwNjJBOUZCMDAwMDAwMDAyQzIKKzoxMDQ2NzAwMDA0MkE5NDE4MDAwMjA4RUEwNDJBOUNEMDAwMDEwOEVDREQKKzoxMDQ2ODAwMDA2MkE5Q0Q0MDAwMDAwMTEwNDJBOUQyMDAwOEYwOEVEMEEKKzoxMDQ2OTAwMDA2MkE5RjVDMDAwMDAwMDUwNDJBMzAwMDAwMDIwOTdDMDUKKzoxMDQ2QTAwMDA2MkEzMDA4MDAwMDAxMDAwNjJBNDA0MDAwMDAwMDEwRTEKKzoxMDQ2QjAwMDA0MkE0MDAwMDAxMDA5N0UwNDJBODQwODAwMDIwOThFQTIKKzoxMDQ2QzAwMDA0MkFDRjQwMDAwNDA5OTAwNDJBQ0Y2MDAwMDIwOTk0MTQKKzoxMDQ2RDAwMDA2MkE5RkEwMDAwMDAwMDQwNjJBNjAwMDAwMDAwNTQwOTIKKzoxMDQ2RTAwMDA2MkE5RDE4MDAwMDAwMDIwNjJBQjAwMDAwMDAwMDUwQjMKKzoxMDQ2RjAwMDA2MkFCQjcwMDAwMDAwNzAwNjJBQkI2ODAwMDAwMDAyOUEKKzoxMDQ3MDAwMDA2MkFCOTQ4MDAwMDAwMDQwNjJBRDAwMDAwMDAwODAwNkMKKzoxMDQ3MTAwMDA2MkFDNDgwMDAwMDAxNTAwNjJBOTQyMDAwMDAwMDMyQkUKKzoxMDQ3MjAwMDA2MkE1MDIwMDAwMDAwMDIwNjJBNTAzMDAwMDAwMDAyMzUKKzoxMDQ3MzAwMDA2MkE1MDAwMDAwMDAwMDIwNjJBNTAxMDAwMDAwMDAyNjUKKzoxMDQ3NDAwMDAyMkE1MjA4MDAwMDAwMDEwNDJBOUFBMDAwMDIwOTk2RDkKKzoxMDQ3NTAwMDA2MkE5NUIwMDAwMDAwMjIwNDJBOTYzODAwMDEwOTk4MjQKKzoxMDQ3NjAwMDA2MkE5NjNDMDAwMDAwMDMwNjJBOTZFMDAwMDAwMDIyN0MKKzoxMDQ3NzAwMDA0MkE5NzY4MDAwMTA5OTkwNjJBOTc2QzAwMDAwMDAzMzMKKzoxMDQ3ODAwMDA2MkE5ODEwMDAwMDAwMjIwNDJBOTg5ODAwMDEwOTlBMkQKKzoxMDQ3OTAwMDA2MkE5ODlDMDAwMDAwMDMwNjJBOTk0MDAwMDAwMDIyODcKKzoxMDQ3QTAwMDA0MkE5OUM4MDAwMTA5OUIwNjJBOTlDQzAwMDAwMDAzM0QKKzoxMDQ3QjAwMDA2MkFCQjU4MDAwMDAwMDIwNjJBQzlDMDAwMDAwMTUwQUEKKzoxMDQ3QzAwMDA2MkE5NEU4MDAwMDAwMzIwNjJBNTAyODAwMDAwMDAyNjEKKzoxMDQ3RDAwMDA2MkE1MDM4MDAwMDAwMDIwNjJBNTAwODAwMDAwMDAyOTUKKzoxMDQ3RTAwMDA2MkE1MDE4MDAwMDAwMDIwMjJBNTIwQzAwMDAwMDAxQTQKKzoxMDQ3RjAwMDA0MkE5QUE4MDAwMjA5OUMwNjJBOTY0ODAwMDAwMDIyNzIKKzoxMDQ4MDAwMDA0MkE5NkQwMDAwMTA5OUUwNjJBOTZENDAwMDAwMDAzQ0YKKzoxMDQ4MTAwMDA2MkE5Nzc4MDAwMDAwMjIwNDJBOTgwMDAwMDEwOTlGQzgKKzoxMDQ4MjAwMDA2MkE5ODA0MDAwMDAwMDMwNjJBOThBODAwMDAwMDIyMjcKKzoxMDQ4MzAwMDA0MkE5OTMwMDAwMTA5QTAwNjJBOTkzNDAwMDAwMDAzRDcKKzoxMDQ4NDAwMDA2MkE5OUQ4MDAwMDAwMjIwNDJBOUE2MDAwMDEwOUExRDIKKzoxMDQ4NTAwMDA2MkE5QTY0MDAwMDAwMDMwNjJBQkI2MDAwMDAwMDAyREEKKzoxMDQ4NjAwMDAyMkFDRjAwMDAwMDAwMDAwNDJBOUFCMDAwMTAwOUEyMUEKKzoxMDQ4NzAwMDA2MkE1MDQ4MDAwMDAwMEUwMjJBQ0YwNDAwMDAwMDAwNjMKKzoxMDQ4ODAwMDA0MkE5QUYwMDAxMDA5QjIwNjJBNTA4MDAwMDAwMDBFOTcKKzoxMDQ4OTAwMDAyMkFDRjA4MDAwMDAwMDAwNDJBOUIzMDAwMTAwOUMyNDEKKzoxMDQ4QTAwMDA2MkE1MEI4MDAwMDAwMEUwMjJBQ0YwQzAwMDAwMDAwQkIKKzoxMDQ4QjAwMDA0MkE5QjcwMDAxMDA5RDIwNjJBNTBGMDAwMDAwMDBFNTYKKzoxMDQ4QzAwMDAyMkFDRjEwMDAwMDAwMDAwNDJBOUJCMDAwMTAwOUUyNjkKKzoxMDQ4RDAwMDA2MkE1MTI4MDAwMDAwMEUwMjJBQ0YxNDAwMDAwMDAwMTIKKzoxMDQ4RTAwMDA0MkE5QkYwMDAxMDA5RjIwNjJBNTE2MDAwMDAwMDBFMTUKKzoxMDQ4RjAwMDAyMkFDRjE4MDAwMDAwMDAwNDJBOUMzMDAwMTAwQTAyOEYKKzoxMDQ5MDAwMDA2MkE1MTk4MDAwMDAwMEUwMjJBQ0YxQzAwMDAwMDAwNjkKKzoxMDQ5MTAwMDA0MkE5QzcwMDAxMDBBMTIwNjJBNTFEMDAwMDAwMDBFRDIKKzoxMDQ5MjAwMDAyMTAxMDA4MDAwMDAwMDEwMjEwMTA1MDAwMDAwMDAxRTkKKzoxMDQ5MzAwMDAyMTAxMDAwMDAwM0QwMDAwMjEwMTAwNDAwMDAwMDNEMUYKKzoxMDQ5NDAwMDA5MTAxODAwMDIwMDBBMjIwOTEwMTEwMDAwMTAwQzIyQTAKKzoxMDQ5NTAwMDA2MTAxMTQwMDAwMDAwMDgwOTEwMTE2MDAwMTAwQzMyMTAKKzoxMDQ5NjAwMDA2MTAxMUEwMDAwMDAwMTgwNjEwMjQwMDAwMDAwMEUwNEUKKzoxMDQ5NzAwMDAyMTAyMDFDMDAwMDAwMDAwMjEwMjAyMDAwMDAwMDAxOTYKKzoxMDQ5ODAwMDAyMTAyMEMwMDAwMDAwMDIwMjEwMjAwNDAwMDAwMDAxRkMKKzoxMDQ5OTAwMDAyMTAyMDA4MDAwMDAwMDEwMjEwMzBEODAwMDAwMDAxQzEKKzoxMDQ5QTAwMDA5MTAzQzAwMDAwNTBDNDIwOTEwMzgwMDAwMDUwQzQ3QjYKKzoxMDQ5QjAwMDA5MTAzOTIwMDAwNTBDNEMwOTEwM0IwMDAwMDUwQzUxNzIKKzoxMDQ5QzAwMDAyMTA0MEQ0MDAwMDAwMzAwMjEwNDBEODAwMDAwMDMwMzcKKzoxMDQ5RDAwMDA2MTA0QzAwMDAwMDAxMDAwMjEwNDAyODAwMDAwMDEwRUEKKzoxMDQ5RTAwMDAyMTA0MDQ0MDAwMDNGRkYwMjEwNDA1ODAwMjgwMDAwMjEKKzoxMDQ5RjAwMDAyMTA0MDg0MDA4NDkyNEEwMjEwNDA1ODAwMDAwMDAwRDcKKzoxMDRBMDAwMDAyMTA0MTM4MDAwMDAwMDEwMjEwNDEzODAwMDAwMDAxOEUKKzoxMDRBMTAwMDAyMTA0MTM4MDAwMDAwMDEwMjEwNDEzODAwMDAwMDAxN0UKKzoxMDRBMjAwMDAyMTA0MTM4MDAwMDAwMDEwMjEwNDEzODAwMDAwMDAxNkUKKzoxMDRBMzAwMDAyMTA0MTM4MDAwMDAwMDEwMjEwNDEzODAwMDAwMDAxNUUKKzoxMDRBNDAwMDAyMTIwNDkwMDFGNjgwNDAwMjEyMDUxNDAwMDAzQzEwOEUKKzoxMDRBNTAwMDAyMTIwNDk0RkZGRkZGRkYwMjEyMDQ5OEZGRkZGRkZGMDIKKzoxMDRBNjAwMDAyMTIwNDlDRkZGRkZGRkYwMjEyMDRBMEZGRkZGRkZGRTIKKzoxMDRBNzAwMDAyMTIwNEE0RkZGRkZGRkYwMjEyMDRBOEZGRkZGRkZGQzIKKzoxMDRBODAwMDAyMTIwNEFDRkZGRkZGRkYwMjEyMDRCMEZGRkZGRkZGQTIKKzoxMDRBOTAwMDAyMTIwNEI4RkZGRkZGRkYwMjEyMDRCQ0ZGRkZGRkZGN0EKKzoxMDRBQTAwMDAyMTIwNEMwRkZGRkZGRkYwMjEyMDRDNEZGRkZGRkZGNUEKKzoxMDRBQjAwMDAyMTIwNEM4RkZGRkZGRkYwMjEyMDRDQ0ZGRkZGRkZGM0EKKzoxMDRBQzAwMDAyMTIwNEQwRkZGRkZGRkYwMjEyMDREOEZGRkZGRkZGMTYKKzoxMDRBRDAwMDAyMTIwNERDRkZGRkZGRkYwMjEyMDRFMEZGRkZGRkZGRjIKKzoxMDRBRTAwMDAyMTIwNEU0RkZGRkZGRkYwMjEyMDRFOEZGRkZGRkZGRDIKKzoxMDRBRjAwMDAyMTIwNEVDRkZGRkZGRkYwMjEyMDRGMEZGRkZGRkZGQjIKKzoxMDRCMDAwMDAyMTIwNEY0RkZGRkZGRkYwMjEyMDRGOEZGRkZGRkZGOTEKKzoxMDRCMTAwMDAyMTIwNEZDRkZGRkZGRkYwMjEyMDUwMEZGRkZGRkZGNzAKKzoxMDRCMjAwMDAyMTIwNTA0RkZGRkZGRkYwMjEyMDUwOEZGRkZGRkZGNEYKKzoxMDRCMzAwMDAyMTIwNTBDRkZGRkZGRkYwMjEyMDUxMEZGRkZGRkZGMkYKKzoxMDRCNDAwMDAyMTIwNEQ0RjgwMEMwMDAwMjEyMDRCNEYwMDA1MDAwQjUKKzoxMDRCNTAwMDAyMTIwMzkwMDAwMDAwMDgwMjEyMDM5QzAwMDAwMDA4RUIKKzoxMDRCNjAwMDAyMTIwM0EwMDAwMDAwMDgwMjEyMDNBNDAwMDAwMDAyQzkKKzoxMDRCNzAwMDAyMTIwM0JDMDAwMDAwMDQwMjEyMDNDMDAwMDAwMDA1ODIKKzoxMDRCODAwMDAyMTIwM0M0MDAwMDAwMDQwMjEyMDNEMDAwMDAwMDAwNUYKKzoxMDRCOTAwMDAyMTIwMzZDMDAwMDAwMDEwMjEyMDFCQzAwMDAwMDQwODAKKzoxMDRCQTAwMDAyMTIwMUMwMDAwMDE4MDgwMjEyMDFDNDAwMDAwODAzMkMKKzoxMDRCQjAwMDAyMTIwMUM4MDAwMDA4MDMwMjEyMDFDQzAwMDAwMDQwRUMKKzoxMDRCQzAwMDAyMTIwMUQwMDAwMDAwMDMwMjEyMDFENDAwMDAwODAzMDkKKzoxMDRCRDAwMDAyMTIwMUQ4MDAwMDA4MDMwMjEyMDFEQzAwMDAwODAzRTEKKzoxMDRCRTAwMDAyMTIwMUUwMDAwMTAwMDMwMjEyMDFFNDAwMDAwODAzQzgKKzoxMDRCRjAwMDAyMTIwMUU4MDAwMDA4MDMwMjEyMDFFQzAwMDAwMDAzQTkKKzoxMDRDMDAwMDAyMTIwMUYwMDAwMDAwMDMwMjEyMDFGNDAwMDAwMDAzOTAKKzoxMDRDMTAwMDAyMTIwMUY4MDAwMDAwMDMwMjEyMDFGQzAwMDAwMDAzNzAKKzoxMDRDMjAwMDAyMTIwMjAwMDAwMDAwMDMwMjEyMDIwNDAwMDAwMDAzNEUKKzoxMDRDMzAwMDAyMTIwMjA4MDAwMDAwMDMwMjEyMDIwQzAwMDAwMDAzMkUKKzoxMDRDNDAwMDAyMTIwMjEwMDAwMDAwMDMwMjEyMDIxNDAwMDAwMDAzMEUKKzoxMDRDNTAwMDAyMTIwMjE4MDAwMDAwMDMwMjEyMDIxQzAwMDAwMDAzRUUKKzoxMDRDNjAwMDAyMTIwMjIwMDAwMDAwMDMwMjEyMDIyNDAwMDAwMDAzQ0UKKzoxMDRDNzAwMDAyMTIwMjI4MDAwMDI0MDMwMjEyMDIyQzAwMDAwMDJGNUUKKzoxMDRDODAwMDAyMTIwMjMwMDAwMDAwMDkwMjEyMDIzNDAwMDAwMDE5NzIKKzoxMDRDOTAwMDAyMTIwMjM4MDAwMDAxODQwMjEyMDIzQzAwMDAwMTgzNkIKKzoxMDRDQTAwMDAyMTIwMjQwMDAwMDAzMDYwMjEyMDI0NDAwMDAwMDE5MzIKKzoxMDRDQjAwMDAyMTIwMjQ4MDAwMDAwMDYwMjEyMDI0QzAwMDAwMzA2MjUKKzoxMDRDQzAwMDAyMTIwMjUwMDAwMDAzMDYwMjEyMDI1NDAwMDAwMzA2MDIKKzoxMDRDRDAwMDAyMTIwMjU4MDAwMDBDODYwMjEyMDI1QzAwMDAwMzA2NTkKKzoxMDRDRTAwMDAyMTIwMjYwMDAwMDAzMDYwMjEyMDI2NDAwMDAwMDA2QzUKKzoxMDRDRjAwMDAyMTIwMjY4MDAwMDAwMDYwMjEyMDI2QzAwMDAwMDA2QTgKKzoxMDREMDAwMDAyMTIwMjcwMDAwMDAwMDYwMjEyMDI3NDAwMDAwMDA2ODcKKzoxMDREMTAwMDAyMTIwMjc4MDAwMDAwMDYwMjEyMDI3QzAwMDAwMDA2NjcKKzoxMDREMjAwMDAyMTIwMjgwMDAwMDAwMDYwMjEyMDI4NDAwMDAwMDA2NDcKKzoxMDREMzAwMDAyMTIwMjg4MDAwMDAwMDYwMjEyMDI4QzAwMDAwMDA2MjcKKzoxMDRENDAwMDAyMTIwMjkwMDAwMDAwMDYwMjEyMDI5NDAwMDAwMDA2MDcKKzoxMDRENTAwMDAyMTIwMjk4MDAwMDAwMDYwMjEyMDI5QzAwMDAwMDA2RTcKKzoxMDRENjAwMDAyMTIwMkEwMDAwMDAzMDYwMjEyMDJBNDAwMDAwMDEzQjcKKzoxMDRENzAwMDAyMTIwMkE4MDAwMDAwMDYwMjEyMDJCMDAwMDAxMDA0OTUKKzoxMDREODAwMDAyMTIwMkI0MDAwMDEwMDQwMjEyMDMyNDAwMTA2NDQwNTYKKzoxMDREOTAwMDAyMTIwMzI4MDAxMDY0NDAwMjEyMDVCNDAwMDAwMDAxNTIKKzoxMDREQTAwMDAyMTIwNUY4MDAwMDAwNDAwMjEyMDVGQzAwMDAwMDE5ODQKKzoxMDREQjAwMDAyMTIwNjAwMDAwMDAwMDEwMjEyMDY2QzAwMDAwMDAxNTEKKzoxMDREQzAwMDAyMTIwMUIwMDAwMDAwMDEwMjEyMDdEODAwMDAwMDAzMjcKKzoxMDRERDAwMDAyMTIwN0Q4MDAwMDAwMDMwMjEyMDdEODAwMDAwMDAzRTcKKzoxMDRERTAwMDAyMTIwN0Q4MDAwMDAwMDMwMjEyMDdEODAwMDAwMDAzRDcKKzoxMDRERjAwMDAyMTIwN0Q4MDAwMDAwMDMwMjEyMDdEODAwMDAwMDAzQzcKKzoxMDRFMDAwMDAyMTIwN0Q4MDAwMDAwMDMwNjAwQTAwMDAwMDAwMDBDRkEKKzoxMDRFMTAwMDAyMDBBMDUwMDAwMDAwMDAwMjAwQTA1NDAwMDAwMDAwQUEKKzoxMDRFMjAwMDAyMDBBMEVDNTU1NDAwMDAwMjAwQTBGMDU1NTU1NTU1NjUKKzoxMDRFMzAwMDAyMDBBMEY0MDAwMDU1NTUwMjAwQTBGOEYwMDAwMDAwQTgKKzoxMDRFNDAwMDAyMDBBMEZDNTU1NDAwMDAwMjAwQTEwMDU1NTU1NTU1MjQKKzoxMDRFNTAwMDAyMDBBMTA0MDAwMDU1NTUwMjAwQTEwOEYwMDAwMDAwNjYKKzoxMDRFNjAwMDAyMDBBMTlDMDAwMDAwMDAwMjAwQTFBMDAwMDEwMDAwQkYKKzoxMDRFNzAwMDAyMDBBMUE0MDAwMDUwMTQwMjAwQTFBODAwMDAwMDAwM0MKKzoxMDRFODAwMDAyMDBBNkE4MDAwMDAwMDAwMjAwQTZBQzAwMDAwMDAwN0UKKzoxMDRFOTAwMDAyMDBBNkQwMDAwMDAwMDAwMjAwQTQ1QzAwMDAwQzAwOEMKKzoxMDRFQTAwMDAyMDBBNjFDMDAwMDAwMDMwMjAwQTA3MEZGRjU1RkZGRDcKKzoxMDRFQjAwMDAyMDBBMDc0MDAwMEZGRkYwMjAwQTA3OEYwMDAwM0UwRjEKKzoxMDRFQzAwMDAyMDBBMDdDMDAwMDAwMDAwMjAwQTA4MDAwMDBBMDAwMDIKKzoxMDRFRDAwMDA2MDBBMDg0MDAwMDAwMDUwMjAwQTA5ODBGRTAwMDAwN0EKKzoxMDRFRTAwMDA2MDBBMDlDMDAwMDAwMDcwMjAwQTBCODAwMDAwNDAwMUIKKzoxMDRFRjAwMDA2MDBBMEJDMDAwMDAwMDMwMjAwQTBDODAwMDAxMDAwRDMKKzoxMDRGMDAwMDA2MDBBMENDMDAwMDAwMDMwMjAwQTBEODAwMDA0MDAwNzIKKzoxMDRGMTAwMDA2MDBBMERDMDAwMDAwMDMwMjAwQTBFODAwMDEwMDAwODEKKzoxMDRGMjAwMDA2MDBBMjJDMDAwMDAwMDQwMjAwQTY4ODAwMDAwMEZDN0QKKzoxMDRGMzAwMDA2MDBBNjhDMDAwMDAwMDcwMjAwQTZGNDAwMDAwMDAwOTYKKzoxMDRGNDAwMDAyMDBBMTBDRkY1QzAwMDAwMjAwQTExMEZGRjU1RkZGNTIKKzoxMDRGNTAwMDAyMDBBMTE0MDAwMEZGRkYwMjAwQTExOEYwMDAwM0UwMEUKKzoxMDRGNjAwMDAyMDBBMTFDMDAwMDAwMDAwMjAwQTEyMDAwMDBBMDAwMUYKKzoxMDRGNzAwMDA2MDBBMTI0MDAwMDAwMDUwMjAwQTEzODBGRTAwMDAwOTcKKzoxMDRGODAwMDA2MDBBMTNDMDAwMDAwMDcwMjAwQTE1ODAwMDAwODAwMzQKKzoxMDRGOTAwMDA2MDBBMTVDMDAwMDAwMDMwMjAwQTE2ODAwMDAyMDAwRTAKKzoxMDRGQTAwMDA2MDBBMTZDMDAwMDAwMDMwMjAwQTE3ODAwMDA4MDAwNTAKKzoxMDRGQjAwMDA2MDBBMTdDMDAwMDAwMDMwMjAwQTE4ODAwMDIwMDAwOUUKKzoxMDRGQzAwMDA2MDBBMjNDMDAwMDAwMDQwMjAwQTZCMDAwMDAwMEZDQTUKKzoxMDRGRDAwMDA2MDBBNkI0MDAwMDAwMDcwMjAwQTZGODAwMDAwMDAwQ0EKKzoxMDRGRTAwMDAyMDBBMDMwMDAwMDAwMDAwMjAwQTAzNDAwMDAwMDAwMTkKKzoxMDRGRjAwMDAyMDBBMDM4MDAwMDAwMDAwMjAwQTAzQzAwMDAwMDAwRjkKKzoxMDUwMDAwMDAyMDBBMDQwMDAwMDAwMDAwMjAwQTA0NDAwMDAwMDAwRDgKKzoxMDUwMTAwMDAyMDBBMDQ4MDAwMDAwMDAwMjAwQTA0QzAwMDAwMDAwQjgKKzoxMDUwMjAwMDAyMDA5MEM0MDAwMEUwMDAwMjAwOTBDQzAwMDBGMzAwRjkKKzoxMDUwMzAwMDAyMDA5MEQ0MDAwMDAwMDMwMjAwOTFBMDAwMDAwMDAxRDMKKzoxMDUwNDAwMDA2MDA5MTcwMDAwMDAwMDMwMjAwOTBFQzAwMDA2MDAwNzgKKzoxMDUwNTAwMDAyMDA5MEY0MDAwMDczMDAwMjAwOTBGQzAwMDAwMDAzQzYKKzoxMDUwNjAwMDAyMDA5MUE4MDAwMDAwMDEwNjAwOTE4ODAwMDAwMDAzRTIKKzoxMDUwNzAwMDAyMDA5MTAwMDAwMDQwMDAwMjAwOTEwODAwMDA1MzAwNkYKKzoxMDUwODAwMDAyMDA5MTEwMDAwMDAwMDQwMjAwOTFBQzAwMDAwMDAxMzkKKzoxMDUwOTAwMDA2MDA5MTk0MDAwMDAwMDIwMjAwOTE5QzAwMDAwMDAxQjMKKzoxMDUwQTAwMDAyMDA5MEQ4MDAwMDYwMDAwMjAwOTBFMDAwMDA3MzAwNTEKKzoxMDUwQjAwMDAyMDA5MEU4MDAwMDAwMDMwMjAwOTFBNDAwMDAwMDAxM0IKKzoxMDUwQzAwMDAyMDA5MTdDMDAwMDAwMDEwMjAwOTE4MDAwMDAwMDAxQkMKKzoxMDUwRDAwMDAyMDA5MTg0MDAwMDAwMDAwMjAwOTEyODAwMDAwMzAwRkIKKzoxMDUwRTAwMDAyMDA5MTZDMDAwM0YwMDgwMjAwOTEyQzAwMDAwMzAwMDQKKzoxMDUwRjAwMDAyMDA5MTMwMDAwMDAzMDAwMjAwOTEzNDAwMDAwMzAwMjAKKzoxMDUxMDAwMDAyMDA5MTM4MDAwMDAzMDAwMjAwOTEzQzAwMDAwMzAwRkYKKzoxMDUxMTAwMDAyMDA5MTQwMDAwMDAzMDAwMjAwOTQyQzAwMDAwMDAxRjYKKzoxMDUxMjAwMDAyMDA5NDMwMDAwMDAwMDEwMjAwOTQzNDAwMDAwMDAxRUQKKzoxMDUxMzAwMDAyMDA5NDJDMDAwMDAwMDEwMjAwOTQzMDAwMDAwMDAxRTUKKzoxMDUxNDAwMDAyMDA5NDM0MDAwMDAwMDEwMjAwOTQyQzAwMDAwMDAxRDEKKzoxMDUxNTAwMDAyMDA5NDMwMDAwMDAwMDEwMjAwOTQzNDAwMDAwMDAxQkQKKzoxMDUxNjAwMDAyMDA5NDJDMDAwMDAwMDEwMjAwOTQzMDAwMDAwMDAxQjUKKzoxMDUxNzAwMDAyMDA5NDM0MDAwMDAwMDEwMjAwOTQyQzAwMDAwMDAxQTEKKzoxMDUxODAwMDAyMDA5NDMwMDAwMDAwMDEwMjAwOTQzNDAwMDAwMDAxOEQKKzoxMDUxOTAwMDAyMDA5NDJDMDAwMDAwMDEwMjAwOTQzMDAwMDAwMDAxODUKKzoxMDUxQTAwMDAyMDA5NDM0MDAwMDAwMDEwMjAwOTQyQzAwMDAwMDAxNzEKKzoxMDUxQjAwMDAyMDA5NDMwMDAwMDAwMDEwMjAwOTQzNDAwMDAwMDAxNUQKKzoxMDUxQzAwMDAyMDA5NDJDMDAwMDAwMDEwMjAwOTQzMDAwMDAwMDAxNTUKKzoxMDUxRDAwMDAyMDA5NDM0MDAwMDAwMDEwMjEzMDA3ODAwMDAwMDMwNDcKKzoxMDUxRTAwMDAyMTMwMDNDMDAwMDYxQTgwNjEzMDEwODAwMDAwMDAzNDAKKzoxMDUxRjAwMDAyMTMwMTA0MDAwMDAwMDAwMjEzMDEzNDAwMDAwMDAwNEIKKzoxMDUyMDAwMDA2MTMwMTA4MDAwMDAwMDMwMjEzMDEwNDAwMDAwMDAwNUYKKzoxMDUyMTAwMDAyMTMwMTM0MDAwMDAwMDAwNjEzMDEwODAwMDAwMDAzMUYKKzoxMDUyMjAwMDAyMTMwMTA0MDAwMDAwMDAwMjEzMDEzNDAwMDAwMDAwMUEKKzoxMDUyMzAwMDA2MTMwMTA4MDAwMDAwMDMwMjEzMDEwNDAwMDAwMDAwMkYKKzoxMDUyNDAwMDAyMTMwMTM0MDAwMDAwMDAwNjEzMDEwODAwMDAwMDAzRUYKKzoxMDUyNTAwMDAyMTMwMTA0MDAwMDAwMDAwMjEzMDEzNDAwMDAwMDAwRUEKKzoxMDUyNjAwMDA2MTMwMTA4MDAwMDAwMDMwMjEzMDEwNDAwMDAwMDAwRkYKKzoxMDUyNzAwMDAyMTMwMTM0MDAwMDAwMDAwNjEzMDEwODAwMDAwMDAzQkYKKzoxMDUyODAwMDAyMTMwMTA0MDAwMDAwMDAwMjEzMDEzNDAwMDAwMDAwQkEKKzoxMDUyOTAwMDA2MTMwMTA4MDAwMDAwMDMwMjEzMDEwNDAwMDAwMDAwQ0YKKzoxMDUyQTAwMDAyMTMwMTM0MDAwMDAwMDAwMjExMDBCODAwMDAwMDAxRTgKKzoxMDUyQjAwMDAyMTZFNkU4MDAwMDIwMDAwMjE2RTZFQzAwMDAyMDAwREUKKzoxMDUyQzAwMDAyMTZFNkYwMDAwMDY1NTUwMjE2RTZGNDAwMDA2NTU1OEEKKzoxMDUyRDAwMDAyMTY4MTUwMDAwMDAwMDAwMjE2ODE3NDAwMDAwMDAxRDcKKzoxMDUyRTAwMDAyMTY4MTc4MDAwMDAwMDEwMjE2ODE3QzAwMDAwMDAxOTYKKzoxMDUyRjAwMDAyMTY4MTgwMDAwMDAwMDEwMjE2ODE4NDAwMDAwMDAxNzYKKzoxMDUzMDAwMDAyMTY4MTg4MDAwMDAwMDEwMjE2ODFCNDAwMDAwMDAxMkQKKzoxMDUzMTAwMDAyMTY4MUI4MDAwMDAwMDEwMjE2ODFCQzAwMDAwMDAxRTUKKzoxMDUzMjAwMDAyMTY4MUMwMDAwMDAwMDEwMjE2ODFDNDAwMDAwMDAxQzUKKzoxMDUzMzAwMDAyMTY4MUM4MDAwMDAwMDEwMjE2ODExMDAwMDAwMDAwNjIKKzoxMDUzNDAwMDAyMTY4MjQwMDBCRjAwQkYwNjE2ODI0NDAwMDAwMDAyMjEKKzoxMDUzNTAwMDAyMTY4MjRDMDBCRjAwQkYwMjE2RTZDNDAwMDAwMDAxMjYKKzoxMDUzNjAwMDAyMTZFNkM4MDAwMDAwMDMwMjE2RTc5NDAwMDAwMDAwRTEKKzoxMDUzNzAwMDA0MkFDRjQwMDAwQTBDNTYwMDAwMDAwMDAwMDAwMDAwODQKKzoxMDUzODAwMDAwMDAwMDM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKKzoxMDUzOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKKzoxMDUzQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQwMDM1OTQKKzoxMDUzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKKzoxMDUzQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKKzoxMDUzRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1MDA2MDAwMDAwMDAwMzgKKzoxMDUzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKKzoxMDUzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKKzoxMDU0MDAwMDAwMDAwMDAwMDA2MDAwOTEwMDAwMDAwMDAwMDAwMDAwQUIKKzoxMDU0MTAwMDAwOTEwMDk1MDA5NTAwOTkwMDk5MDA5RDAwOUQwMEExQzQKKzoxMDU0MjAwMDAwQTEwMEE1MDBBNTAwQTkwMEE5MDBBRDAwQUQwMEIxMzQKKzoxMDU0MzAwMDAwQjEwMEI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKKzoxMDU0NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUMKKzoxMDU0NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUwMzExODMKKzoxMDU0NjAwMDAzMTEwMzFCMDMxQjAzMjUwMzI1MDMyQzAzMkMwMzMzMDgKKzoxMDU0NzAwMDAzMzMwMzNBMDMzQTAzNDEwMzQxMDM0ODAzNDgwMzRGMEMKKzoxMDU0ODAwMDAzNEYwMzU2MDM1NjAzNUQwMDAwMDAwMDAwMDAwMDAwQjgKKzoxMDU0OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMKKzoxMDU0QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkMKKzoxMDU0QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUMKKzoxMDU0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREMKKzoxMDU0RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MKKzoxMDU0RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkMKKzoxMDU0RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUMKKzoxMDU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUIKKzoxMDU1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEIKKzoxMDU1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDU1MzAwMDAwMDAwMDAwMDAwMDAwMDAwMzVEMDM1RTAwMDAwMDAwQUEKKzoxMDU1NDAwMDAwMDAwMDAwMDM1RTAzNUYwMzVGMDM2MDAzNjAwMzYxMEMKKzoxMDU1NTAwMDAzNjEwMzYyMDM2MjAzNjMwMzYzMDM2NDAzNjQwMzY1MUIKKzoxMDU1NjAwMDAzNjUwMzY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDU1NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkIKKzoxMDU1ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUIKKzoxMDU1OTAwMDAzNjYwMzZEMDM2RDAzNzkwMzc5MDM4NTAwMDAwMDAwNDIKKzoxMDU1QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkIKKzoxMDU1QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUIKKzoxMDU1QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREIKKzoxMDU1RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0IKKzoxMDU1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMzg1MDM4NjAwMDAwMDAwQUEKKzoxMDU1RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUIKKzoxMDU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUEKKzoxMDU2MTAwMDAwMDAwMDAwMDM4NjAzQjEwMDAwMDAwMDAwMDAwMDAwNEQKKzoxMDU2MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0EKKzoxMDU2MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDU2NDAwMDAzQjEwM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKKzoxMDU2NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEEKKzoxMDU2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRTAwNDBGNDQKKzoxMDU2NzAwMDAwMDAwMDAwMDAwMDAwMDAwNDBGMDQxNjA0MTYwNDFEQzIKKzoxMDU2ODAwMDA0MUQwNDI0MDQyNDA0MkIwNDJCMDQzMjA0MzIwNDM5QTIKKzoxMDU2OTAwMDA0MzkwNDQwMDQ0MDA0NDcwNDQ3MDQ3QTAwMDAwMDAwMzEKKzoxMDU2QTAwMDAwMDAwMDAwMDQ3QTA0N0UwNDdFMDQ4MjA0ODIwNDg2RTIKKzoxMDU2QjAwMDA0ODYwNDhBMDQ4QTA0OEUwNDhFMDQ5MjA0OTIwNDk2NUEKKzoxMDU2QzAwMDA0OTYwNDlBMDQ5QTA0RUEwNEVBMDUwMDA1MDAwNTE2MDMKKzoxMDU2RDAwMDA1MTYwNTE4MDUxODA1MUEwNTFBMDUxQzA1MUMwNTFFRDIKKzoxMDU2RTAwMDA1MUUwNTIwMDUyMDA1MjIwNTIyMDUyNDA1MjQwNTI2ODIKKzoxMDU2RjAwMDA1MjYwNjkzMDAwMDAwMDAwMDAwMDAwMDA2OTMwNjk4QUYKKzoxMDU3MDAwMDA2OTgwNjlEMDY5RDA2QTIwNkEyMDZBNzA2QTcwNkFDNTkKKzoxMDU3MTAwMDA2QUMwNkIxMDZCMTA2QjYwNkI2MDZCQjA2QkIwNkJDQUQKKzoxMDU3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKKzoxMDU3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKKzoxMDU3NDAwMDAwMDAwMDAwMDAwMDAwMDAwNkJDMDZFMDAwMDAwMDAwQjEKKzoxMDU3NTAwMDAwMDAwMDAwMDZFMDA2RTIwNkUyMDZFNDA2RTQwNkU2RDMKKzoxMDU3NjAwMDA2RTYwNkU4MDZFODA2RUEwNkVBMDZFQzA2RUMwNkVFQjkKKzoxMDU3NzAwMDA2RUUwNkYwMDZGMDA3MDUwNzA1MDcwODA3MDgwNzBCMDEKKzoxMDU3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkKKzoxMDU3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKKzoxMDU3QTAwMDA3MEIwNzRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKKzoxMDU3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKKzoxMDU3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NEYwN0UxOUIKKzoxMDU3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzkKKzoxMDU3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKKzoxMDU3RjAwMDAwMDAwMDAwMDAwMDAwMDAwN0UxMDdFRjAwMDAwMDAwQ0IKKzoxMDU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgKKzoxMDU4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgKKzoxMDU4MjAwMDAwMDAwMDAwMDdFRjA4MkMwMDAwMDAwMDAwMDAwMDAwNEUKKzoxMDU4MzAwMDA4MkMwODM1MDgzNTA4M0UwODNFMDg0NzA4NDcwODUwMzgKKzoxMDU4NDAwMDA4NTAwODU5MDg1OTA4NjIwODYyMDg2QjA4NkIwODc0MDgKKzoxMDU4NTAwMDA4NzQwOEQ1MDhENTA4RUEwOEVBMDhGRjA4RkYwOTAyMTUKKzoxMDU4NjAwMDA5MDIwOTA1MDkwNTA5MDgwOTA4MDkwQjA5MEIwOTBFQjAKKzoxMDU4NzAwMDA5MEUwOTExMDkxMTA5MTQwOTE0MDkxNzA5MTcwOTIwM0EKKzoxMDU4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgKKzoxMDU4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKKzoxMDU4QTAwMDAwMDAwMDAwMDAwMDAwMDAwOTIwMDkyNjAwMDAwMDAwQTAKKzoxMDU4QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTgKKzoxMDU4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDgKKzoxMDU4RDAwMDAwMDAwMDAwMDkyNjA5MkIwMDAwMDAwMDAwMDAwMDAwNjUKKzoxMDU4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKKzoxMDU4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTgKKzoxMDU5MDAwMDA5MkIwOTMzMDAwMDAwMDAwMDAwMDAwMDA5MzMwOTM0QUUKKzoxMDU5MTAwMDA5MzQwOTM1MDkzNTA5MzYwOTM2MDkzNzA5MzcwOTM4OEYKKzoxMDU5MjAwMDA5MzgwOTM5MDkzOTA5M0EwOTNBMDkzQjAwMDAwMDAwRTgKKzoxMDU5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjcKKzoxMDU5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKKzoxMDU5NTAwMDAwMDAwMDAwMDAwMDAwMDAwOTNCMDlBQzAwMDAwMDAwNEUKKzoxMDU5NjAwMDAwMDAwMDAwMDlBQzA5QUQwOUFEMDlBRTA5QUUwOUFGRjAKKzoxMDU5NzAwMDA5QUYwOUIwMDlCMDA5QjEwOUIxMDlCMjA5QjIwOUIzNTcKKzoxMDU5ODAwMDA5QjMwOUI0MDlCNDA5QzgwOUM4MDlEQjA5REIwOUVGN0YKKzoxMDU5OTAwMDA5RUYwOUYwMDlGMDA5RjEwOUYxMDlGMjA5RjIwOUYzMzcKKzoxMDU5QTAwMDA5RjMwOUY0MDlGNDA5RjUwOUY1MDlGNjA5RjYwOUY3MDcKKzoxMDU5QjAwMDA5RjcwQTE2MDAwMDAwMDAwMDAwMDAwMDBBMTYwQTE5ODQKKzoxMDU5QzAwMDBBMTkwQTFDMEExQzBBMUYwQTFGMEEyMjBBMjIwQTI1OEYKKzoxMDU5RDAwMDBBMjUwQTI4MEEyODBBMkIwQTJCMEEyRTBBMkUwQTMwMjAKKzoxMDU5RTAwMDAwMDAwMDAwMDAwMDAwMDAwQTMwMEEzMzBBMzMwQTM2QzMKKzoxMDU5RjAwMDBBMzYwQTM5MEEzOTBBM0MwQTNDMEEzRjBBM0YwQTQyNzcKKzoxMDVBMDAwMDBBNDIwQTQ1MEE0NTBBNDgwQTQ4MEE0OTAwMDAwMDAwQjUKKzoxMDVBMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODYKKzoxMDVBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYKKzoxMDVBMzAwMDAwMDAwMDAwMEE0OTBBNjEwMDAwMDAwMDAwMDAwMDAwQTgKKzoxMDVBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTYKKzoxMDVBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDYKKzoxMDVBNjAwMDBBNjEwQTYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKKzoxMDVBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDVBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDVBOTAwMDAwMDEwMDAwMDAwMjA3MDAwMDAzMEUwMDAwMDQxNTAwRDIKKzoxMDVBQTAwMDAwMDUxQzAwMDAwNjIzMDAwMDA3MkEwMDAwMDgzMTAwNDIKKzoxMDVBQjAwMDAwMDkzODAwMDAwQTNGMDAwMDBCNDYwMDAwMEM0RDAwQjIKKzoxMDVBQzAwMDAwMEQ1NDAwMDAwRTVCMDAwMDBGNjIwMDAwMTA2OTAwMjIKKzoxMDVBRDAwMDAwMTE3MDAwMDAxMjc3MDAwMDEzN0UwMDAwMTQ4NTAwOTIKKzoxMDVBRTAwMDAwMTU4QzAwMDAxNjkzMDAwMDE3OUEwMDAwMThBMTAwMDIKKzoxMDVBRjAwMDAwMTlBODAwMDAxQUFGMDAwMDFCQjYwMDAwMUNCRDAwNzIKKzoxMDVCMDAwMDAwMURDNDAwMDAxRUNCMDAwMDFGRDIwMDAwMDBEOTAwMDEKKzoxMDVCMTAwMDAwMDAyMDAwMDAwMDQwMDAwMDAwNjAwMDAwMDA4MDAwNDUKKzoxMDVCMjAwMDAwMDBBMDAwMDAwMEMwMDAwMDAwRTAwMDAwMDEwMDAwMzQKKzoxMDVCMzAwMDAwMDEyMDAwMDAwMTQwMDAwMDAxNjAwMDAwMDE4MDAwMjEKKzoxMDVCNDAwMDAwMDFBMDAwMDAwMUMwMDAwMDAxRTAwMDAwMDIwMDAwMTAKKzoxMDVCNTAwMDAwMDIyMDAwMDAwMjQwMDAwMDAyNjAwMDAwMDI4MDAwRkQKKzoxMDVCNjAwMDAwMDJBMDAwMDAwMkMwMDAwMDAyRTAwMDAwMDMwMDAwRUMKKzoxMDVCNzAwMDAwMDMyMDAwMDAwMzQwMDAwMDAzNjAwMDAwMDM4MDAwRDkKKzoxMDVCODAwMDAwMDNBMDAwMDAwM0MwMDAwMDAzRTAwMDAwMDQwMDAwQzgKKzoxMDVCOTAwMDAwMDQyMDAwMDAwNDQwMDAwMDA0NjAwMDAwMDQ4MDAwQjUKKzoxMDVCQTAwMDAwMDRBMDAwMDAwNEMwMDAwMDA0RTAwMDAwMDUwMDAwQTQKKzoxMDVCQjAwMDAwMDUyMDAwMDAwNTQwMDAwMDA1NjAwMDAwMDU4MDAwOTEKKzoxMDVCQzAwMDAwMDVBMDAwMDAwNUMwMDAwMDA1RTAwMDAwMDYwMDAwODAKKzoxMDVCRDAwMDAwMDYyMDAwMDAwNjQwMDAwMDA2NjAwMDAwMDY4MDAwNkQKKzoxMDVCRTAwMDAwMDZBMDAwMDAwNkMwMDAwMDA2RTAwMDAwMDcwMDAwNUMKKzoxMDVCRjAwMDAwMDcyMDAwMDAwNzQwMDAwMDA3NjAwMDAwMDc4MDAwNDkKKzoxMDVDMDAwMDAwMDdBMDAwMDAwN0MwMDAwMDA3RTAwMDAwMDgwMDAwMzcKKzoxMDVDMTAwMDAwMDgyMDAwMDAwODQwMDAwMDA4NjAwMDAwMDg4MDAwMjQKKzoxMDVDMjAwMDAwMDhBMDAwMDAwOEMwMDAwMDA4RTAwMDAwMDkwMDAwMTMKKzoxMDVDMzAwMDAwMDkyMDAwMDAwOTQwMDAwMDA5NjAwMDAwMDk4MDAwMDAKKzoxMDVDNDAwMDAwMDlBMDAwMDAwOUMwMDAwMDA5RTAwMDAwMEEwMDAwRUYKKzoxMDVDNTAwMDAwMEEyMDAwMDAwQTQwMDAwMDBBNjAwMDAwMEE4MDAwREMKKzoxMDVDNjAwMDAwMEFBMDAwMDAwQUMwMDAwMDBBRTAwMDAwMEIwMDAwQ0IKKzoxMDVDNzAwMDAwMEIyMDAwMDAwQjQwMDAwMDBCNjAwMDAwMEI4MDAwQjgKKzoxMDVDODAwMDAwMEJBMDAwMDAwQkMwMDAwMDBCRTAwMDAwMEMwMDAwQTcKKzoxMDVDOTAwMDAwMEMyMDAwMDAwQzQwMDAwMDBDNjAwMDAwMEM4MDAwOTQKKzoxMDVDQTAwMDAwMENBMDAwMDAwQ0MwMDAwMDBDRTAwMDAwMEQwMDAwODMKKzoxMDVDQjAwMDAwMEQyMDAwMDAwRDQwMDAwMDBENjAwMDAwMEQ4MDAwNzAKKzoxMDVDQzAwMDAwMERBMDAwMDAwREMwMDAwMDBERTAwMDAwMEUwMDAwNUYKKzoxMDVDRDAwMDAwMEUyMDAwMDAwRTQwMDAwMDBFNjAwMDAwMEU4MDAwNEMKKzoxMDVDRTAwMDAwMEVBMDAwMDAwRUMwMDAwMDBFRTAwMDAwMEYwMDAwM0IKKzoxMDVDRjAwMDAwMEYyMDAwMDAwRjQwMDAwMDBGNjAwMDAwMEY4MDAwMjgKKzoxMDVEMDAwMDAwMEZBMDAwMDAwRkMwMDAwMDBGRTAwMDAwMTAwMDAwMTYKKzoxMDVEMTAwMDAwMTAyMDAwMDAxMDQwMDAwMDEwNjAwMDAwMTA4MDAwMDMKKzoxMDVEMjAwMDAwMTBBMDAwMDAxMEMwMDAwMDEwRTAwMDAwMTEwMDAwRjIKKzoxMDVEMzAwMDAwMTEyMDAwMDAxMTQwMDAwMDExNjAwMDAwMTE4MDAwREYKKzoxMDVENDAwMDAwMTFBMDAwMDAxMUMwMDAwMDExRTAwMDAwMTIwMDAwQ0UKKzoxMDVENTAwMDAwMTIyMDAwMDAxMjQwMDAwMDEyNjAwMDAwMTI4MDAwQkIKKzoxMDVENjAwMDAwMTJBMDAwMDAxMkMwMDAwMDEyRTAwMDAwMTMwMDAwQUEKKzoxMDVENzAwMDAwMTMyMDAwMDAxMzQwMDAwMDEzNjAwMDAwMTM4MDAwOTcKKzoxMDVEODAwMDAwMTNBMDAwMDAxM0MwMDAwMDEzRTAwMDAwMTQwMDAwODYKKzoxMDVEOTAwMDAwMTQyMDAwMDAxNDQwMDAwMDE0NjAwMDAwMTQ4MDAwNzMKKzoxMDVEQTAwMDAwMTRBMDAwMDAxNEMwMDAwMDE0RTAwMDAwMTUwMDAwNjIKKzoxMDVEQjAwMDAwMTUyMDAwMDAxNTQwMDAwMDE1NjAwMDAwMTU4MDAwNEYKKzoxMDVEQzAwMDAwMTVBMDAwMDAxNUMwMDAwMDE1RTAwMDAwMTYwMDAwM0UKKzoxMDVERDAwMDAwMTYyMDAwMDAxNjQwMDAwMDE2NjAwMDAwMTY4MDAwMkIKKzoxMDVERTAwMDAwMTZBMDAwMDAxNkMwMDAwMDE2RTAwMDAwMTcwMDAwMUEKKzoxMDVERjAwMDAwMTcyMDAwMDAxNzQwMDAwMDE3NjAwMDAwMTc4MDAwMDcKKzoxMDVFMDAwMDAwMTdBMDAwMDAxN0MwMDAwMDE3RTAwMDAwMTgwMDAwRjUKKzoxMDVFMTAwMDAwMTgyMDAwMDAxODQwMDAwMDE4NjAwMDAwMTg4MDAwRTIKKzoxMDVFMjAwMDAwMThBMDAwMDAxOEMwMDAwMDE4RTAwMDAwMTkwMDAwRDEKKzoxMDVFMzAwMDAwMTkyMDAwMDAxOTQwMDAwMDE5NjAwMDAwMTk4MDAwQkUKKzoxMDVFNDAwMDAwMTlBMDAwMDAxOUMwMDAwMDE5RTAwMDAwMUEwMDAwQUQKKzoxMDVFNTAwMDAwMUEyMDAwMDAxQTQwMDAwMDFBNjAwMDAwMUE4MDAwOUEKKzoxMDVFNjAwMDAwMUFBMDAwMDAxQUMwMDAwMDFBRTAwMDAwMUIwMDAwODkKKzoxMDVFNzAwMDAwMUIyMDAwMDAxQjQwMDAwMDFCNjAwMDAwMUI4MDAwNzYKKzoxMDVFODAwMDAwMUJBMDAwMDAxQkMwMDAwMDFCRTAwMDAwMUMwMDAwNjUKKzoxMDVFOTAwMDAwMUMyMDAwMDAxQzQwMDAwMDFDNjAwMDAwMUM4MDAwNTIKKzoxMDVFQTAwMDAwMUNBMDAwMDAxQ0MwMDAwMDFDRTAwMDAwMUQwMDAwNDEKKzoxMDVFQjAwMDAwMUQyMDAwMDAxRDQwMDAwMDFENjAwMDAwMUQ4MDAwMkUKKzoxMDVFQzAwMDAwMURBMDAwMDAxREMwMDAwMDFERTAwMDAwMUUwMDAwMUQKKzoxMDVFRDAwMDAwMUUyMDAwMDAxRTQwMDAwMDFFNjAwMDAwMUU4MDAwMEEKKzoxMDVFRTAwMDAwMUVBMDAwMDAxRUMwMDAwMDFFRTAwMDAwMUYwMDAwRjkKKzoxMDVFRjAwMDAwMUYyMDAwMDAxRjQwMDAwMDFGNjAwMDAwMUY4MDAwRTYKKzoxMDVGMDAwMDAwMUZBMDAwMDAxRkMwMDAwMDFGRTAwMDAwMjAwMDAwRDQKKzoxMDVGMTAwMDAwMjAyMDAwMDAyMDQwMDAwMDIwNjAwMDAwMjA4MDAwQzEKKzoxMDVGMjAwMDAwMjBBMDAwMDAyMEMwMDAwMDIwRTAwMDAwMjEwMDAwQjAKKzoxMDVGMzAwMDAwMjEyMDAwMDAyMTQwMDAwMDIxNjAwMDAwMjE4MDAwOUQKKzoxMDVGNDAwMDAwMjFBMDAwMDAyMUMwMDAwMDIxRTAwMDAwMjIwMDAwOEMKKzoxMDVGNTAwMDAwMjIyMDAwMDAyMjQwMDAwMDIyNjAwMDAwMjI4MDAwNzkKKzoxMDVGNjAwMDAwMjJBMDAwMDAyMkMwMDAwMDIyRTAwMDAwMjMwMDAwNjgKKzoxMDVGNzAwMDAwMjMyMDAwMDAyMzQwMDAwMDIzNjAwMDAwMjM4MDAwNTUKKzoxMDVGODAwMDAwMjNBMDAwMDAyM0MwMDAwMDIzRTAwMDAwMjQwMDAwNDQKKzoxMDVGOTAwMDAwMjQyMDAwMDAyNDQwMDAwMDI0NjAwMDAwMjQ4MDAwMzEKKzoxMDVGQTAwMDAwMjRBMDAwMDAyNEMwMDAwMDI0RTAwMDAwMjUwMDAwMjAKKzoxMDVGQjAwMDAwMjUyMDAwMDAyNTQwMDAwMDI1NjAwMDAwMjU4MDAwMEQKKzoxMDVGQzAwMDAwMjVBMDAwMDAyNUMwMDAwMDI1RTAwMDAwMjYwMDAwRkMKKzoxMDVGRDAwMDAwMjYyMDAwMDAyNjQwMDAwMDI2NjAwMDAwMjY4MDAwRTkKKzoxMDVGRTAwMDAwMjZBMDAwMDAyNkMwMDAwMDI2RTAwMDAwMjcwMDAwRDgKKzoxMDVGRjAwMDAwMjcyMDAwMDAyNzQwMDAwMDI3NjAwMDAwMjc4MDAwQzUKKzoxMDYwMDAwMDAwMjdBMDAwMDAyN0MwMDAwMDI3RTAwMDAwMjgwMDAwQjMKKzoxMDYwMTAwMDAwMjgyMDAwMDAyODQwMDAwMDI4NjAwMDAwMjg4MDAwQTAKKzoxMDYwMjAwMDAwMjhBMDAwMDAyOEMwMDAwMDI4RTAwMDAwMjkwMDAwOEYKKzoxMDYwMzAwMDAwMjkyMDAwMDAyOTQwMDAwMDI5NjAwMDAwMjk4MDAwN0MKKzoxMDYwNDAwMDAwMjlBMDAwMDAyOUMwMDAwMDI5RTAwMDAwMkEwMDAwNkIKKzoxMDYwNTAwMDAwMkEyMDAwMDAyQTQwMDAwMDJBNjAwMDAwMkE4MDAwNTgKKzoxMDYwNjAwMDAwMkFBMDAwMDAyQUMwMDAwMDJBRTAwMDAwMkIwMDAwNDcKKzoxMDYwNzAwMDAwMkIyMDAwMDAyQjQwMDAwMDJCNjAwMDAwMkI4MDAwMzQKKzoxMDYwODAwMDAwMkJBMDAwMDAyQkMwMDAwMDJCRTAwMDAwMkMwMDAwMjMKKzoxMDYwOTAwMDAwMkMyMDAwMDAyQzQwMDAwMDJDNjAwMDAwMkM4MDAwMTAKKzoxMDYwQTAwMDAwMkNBMDAwMDAyQ0MwMDAwMDJDRTAwMDAwMkQwMDAwRkYKKzoxMDYwQjAwMDAwMkQyMDAwMDAyRDQwMDAwMDJENjAwMDAwMkQ4MDAwRUMKKzoxMDYwQzAwMDAwMkRBMDAwMDAyREMwMDAwMDJERTAwMDAwMkUwMDAwREIKKzoxMDYwRDAwMDAwMkUyMDAwMDAyRTQwMDAwMDJFNjAwMDAwMkU4MDAwQzgKKzoxMDYwRTAwMDAwMkVBMDAwMDAyRUMwMDAwMDJFRTAwMDAwMkYwMDAwQjcKKzoxMDYwRjAwMDAwMkYyMDAwMDAyRjQwMDAwMDJGNjAwMDAwMkY4MDAwQTQKKzoxMDYxMDAwMDAwMkZBMDAwMDAyRkMwMDAwMDJGRTAwMDAwMzAwMDAwOTIKKzoxMDYxMTAwMDAwMzAyMDAwMDAzMDQwMDAwMDMwNjAwMDAwMzA4MDAwN0YKKzoxMDYxMjAwMDAwMzBBMDAwMDAzMEMwMDAwMDMwRTAwMDAwMzEwMDAwNkUKKzoxMDYxMzAwMDAwMzEyMDAwMDAzMTQwMDAwMDMxNjAwMDAwMzE4MDAwNUIKKzoxMDYxNDAwMDAwMzFBMDAwMDAzMUMwMDAwMDMxRTAwMDAwMzIwMDAwNEEKKzoxMDYxNTAwMDAwMzIyMDAwMDAzMjQwMDAwMDMyNjAwMDAwMzI4MDAwMzcKKzoxMDYxNjAwMDAwMzJBMDAwMDAzMkMwMDAwMDMyRTAwMDAwMzMwMDAwMjYKKzoxMDYxNzAwMDAwMzMyMDAwMDAzMzQwMDAwMDMzNjAwMDAwMzM4MDAwMTMKKzoxMDYxODAwMDAwMzNBMDAwMDAzM0MwMDAwMDMzRTAwMDAwMzQwMDAwMDIKKzoxMDYxOTAwMDAwMzQyMDAwMDAzNDQwMDAwMDM0NjAwMDAwMzQ4MDAwRUYKKzoxMDYxQTAwMDAwMzRBMDAwMDAzNEMwMDAwMDM0RTAwMDAwMzUwMDAwREUKKzoxMDYxQjAwMDAwMzUyMDAwMDAzNTQwMDAwMDM1NjAwMDAwMzU4MDAwQ0IKKzoxMDYxQzAwMDAwMzVBMDAwMDAzNUMwMDAwMDM1RTAwMDAwMzYwMDAwQkEKKzoxMDYxRDAwMDAwMzYyMDAwMDAzNjQwMDAwMDM2NjAwMDAwMzY4MDAwQTcKKzoxMDYxRTAwMDAwMzZBMDAwMDAzNkMwMDAwMDM2RTAwMDAwMzcwMDAwOTYKKzoxMDYxRjAwMDAwMzcyMDAwMDAzNzQwMDAwMDM3NjAwMDAwMzc4MDAwODMKKzoxMDYyMDAwMDAwMzdBMDAwMDAzN0MwMDAwMDM3RTAwMDAwMzgwMDAwNzEKKzoxMDYyMTAwMDAwMzgyMDAwMDAzODQwMDAwMDM4NjAwMDAwMzg4MDAwNUUKKzoxMDYyMjAwMDAwMzhBMDAwMDAzOEMwMDAwMDM4RTAwMDAwMzkwMDAwNEQKKzoxMDYyMzAwMDAwMzkyMDAwMDAzOTQwMDAwMDM5NjAwMDAwMzk4MDAwM0EKKzoxMDYyNDAwMDAwMzlBMDAwMDAzOUMwMDAwMDM5RTAwMDAwM0EwMDAwMjkKKzoxMDYyNTAwMDAwM0EyMDAwMDAzQTQwMDAwMDNBNjAwMDAwM0E4MDAwMTYKKzoxMDYyNjAwMDAwM0FBMDAwMDAzQUMwMDAwMDNBRTAwMDAwM0IwMDAwMDUKKzoxMDYyNzAwMDAwM0IyMDAwMDAzQjQwMDAwMDNCNjAwMDAwM0I4MDAwRjIKKzoxMDYyODAwMDAwM0JBMDAwMDAzQkMwMDAwMDNCRTAwMDAwM0MwMDAwRTEKKzoxMDYyOTAwMDAwM0MyMDAwMDAzQzQwMDAwMDNDNjAwMDAwM0M4MDAwQ0UKKzoxMDYyQTAwMDAwM0NBMDAwMDAzQ0MwMDAwMDNDRTAwMDAwM0QwMDAwQkQKKzoxMDYyQjAwMDAwM0QyMDAwMDAzRDQwMDAwMDNENjAwMDAwM0Q4MDAwQUEKKzoxMDYyQzAwMDAwM0RBMDAwMDAzREMwMDAwMDNERTAwMDAwM0UwMDAwOTkKKzoxMDYyRDAwMDAwM0UyMDAwMDAzRTQwMDAwMDNFNjAwMDAwM0U4MDAwODYKKzoxMDYyRTAwMDAwM0VBMDAwMDAzRUMwMDAwMDNFRTAwMDAwM0YwMDAwNzUKKzoxMDYyRjAwMDAwM0YyMDAwMDAzRjQwMDAwMDNGNjAwMDAwM0Y4MDAwNjIKKzoxMDYzMDAwMDAwM0ZBMDAwMDAzRkMwMDAwMDNGRTAwMDAwM0ZFMDAxNzAKKzoxMDYzMTAwMDAwMDAwMDAwMDAwMDAxRkYwMDAwMDIwMDAwMDA3RkY4MDQKKzoxMDYzMjAwMDAwMDA3RkY4MDAwMDBBOTAwMDAwMzUwMDAwMDAwMDAxMjYKKzoxMDYzMzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNUYKKzoxMDYzNDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNEYKKzoxMDYzNTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwM0YKKzoxMDYzNjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMkYKKzoxMDYzNzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMUYKKzoxMDYzODAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMEYKKzoxMDYzOTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRkYKKzoxMDYzQTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRUYKKzoxMDYzQjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwREYKKzoxMDYzQzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQ0YKKzoxMDYzRDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQkYKKzoxMDYzRTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQUYKKzoxMDYzRjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwOUYKKzoxMDY0MDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwOEUKKzoxMDY0MTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwN0UKKzoxMDY0MjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNkUKKzoxMDY0MzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNUUKKzoxMDY0NDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNEUKKzoxMDY0NTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwM0UKKzoxMDY0NjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMkUKKzoxMDY0NzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMUUKKzoxMDY0ODAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMEUKKzoxMDY0OTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRkUKKzoxMDY0QTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRUUKKzoxMDY0QjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwREUKKzoxMDY0QzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQ0UKKzoxMDY0RDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQkUKKzoxMDY0RTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQUUKKzoxMDY0RjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwOUUKKzoxMDY1MDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwOEQKKzoxMDY1MTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwN0QKKzoxMDY1MjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNkQKKzoxMDY1MzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNUQKKzoxMDY1NDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNEQKKzoxMDY1NTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwM0QKKzoxMDY1NjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMkQKKzoxMDY1NzAwMDAwMDAwMDAwMTQwQUZGMDAwMDAwMDAwMTAwMDAwMDAwRkQKKzoxMDY1ODAwMDAwMjAxMDAxMDAwMDAwMDAwMTAwOTAwMDAwMDAwMTAwNDgKKzoxMDY1OTAwMDAwMDA5MDAyMDAwMDkwMDQwMDAwOTAwNjAwMDA5MDA4QTcKKzoxMDY1QTAwMDAwMDA5MDBBMDAwMDkwMEMwMDAwOTAwRTAwMDA5MDEwNzcKKzoxMDY1QjAwMDAwMDA5MDEyMDAwMDkwMTQwMDAwOTAxNjAwMDA5MDE4NDcKKzoxMDY1QzAwMDAwMDA5MDFBMDAwMDkwMUMwMDAwOTAxRTAwMDA5MDIwMTcKKzoxMDY1RDAwMDAwMDA5MDIyMDAwMDkwMjQwMDAwOTAyNjAwMDA5MDI4RTcKKzoxMDY1RTAwMDAwMDA5MDJBMDAwMDkwMkMwMDAwOTAyRTAwMDA5MDMwQjcKKzoxMDY1RjAwMDAwMDA5MDMyMDAwMDkwMzQwMDAwOTAzNjAwMDA5MDM4ODcKKzoxMDY2MDAwMDAwMDA5MDNBMDAwMDkwM0MwMDAwOTAzRTAwMDA5MDQwNTYKKzoxMDY2MTAwMDAwMDA5MDQyMDAwMDkwNDQwMDAwOTA0NjAwMDA5MDQ4MjYKKzoxMDY2MjAwMDAwMDA5MDRBMDAwMDkwNEMwMDAwOTA0RTAwMDA5MDUwRjYKKzoxMDY2MzAwMDAwMDA5MDUyMDAwMDkwNTQwMDAwOTA1NjAwMDA5MDU4QzYKKzoxMDY2NDAwMDAwMDA5MDVBMDAwMDkwNUMwMDAwOTA1RTAwMDA5MDYwOTYKKzoxMDY2NTAwMDAwMDA5MDYyMDAwMDkwNjQwMDAwOTA2NjAwMDA5MDY4NjYKKzoxMDY2NjAwMDAwMDA5MDZBMDAwMDkwNkMwMDAwOTA2RTAwMDA5MDcwMzYKKzoxMDY2NzAwMDAwMDA5MDcyMDAwMDkwNzQwMDAwOTA3NjAwMDA5MDc4MDYKKzoxMDY2ODAwMDAwMDA5MDdBMDAwMDkwN0MwMDAwOTA3RTAwMDA5MDgwRDYKKzoxMDY2OTAwMDAwMDA5MDgyMDAwMDkwODQwMDAwOTA4NjAwMDA5MDg4QTYKKzoxMDY2QTAwMDAwMDA5MDhBMDAwMDkwOEMwMDAwOTA4RTAwMDA5MDkwNzYKKzoxMDY2QjAwMDAwMDA5MDkyMDAwMDkwOTQwMDAwOTA5NjAwMDA5MDk4NDYKKzoxMDY2QzAwMDAwMDA5MDlBMDAwMDkwOUMwMDAwOTA5RTAwMDA5MEEwMTYKKzoxMDY2RDAwMDAwMDA5MEEyMDAwMDkwQTQwMDAwOTBBNjAwMDA5MEE4RTYKKzoxMDY2RTAwMDAwMDA5MEFBMDAwMDkwQUMwMDAwOTBBRTAwMDA5MEIwQjYKKzoxMDY2RjAwMDAwMDA5MEIyMDAwMDkwQjQwMDAwOTBCNjAwMDA5MEI4ODYKKzoxMDY3MDAwMDAwMDA5MEJBMDAwMDkwQkMwMDAwOTBCRTAwMDA5MEMwNTUKKzoxMDY3MTAwMDAwMDA5MEMyMDAwMDkwQzQwMDAwOTBDNjAwMDA5MEM4MjUKKzoxMDY3MjAwMDAwMDA5MENBMDAwMDkwQ0MwMDAwOTBDRTAwMDA5MEQwRjUKKzoxMDY3MzAwMDAwMDA5MEQyMDAwMDkwRDQwMDAwOTBENjAwMDA5MEQ4QzUKKzoxMDY3NDAwMDAwMDA5MERBMDAwMDkwREMwMDAwOTBERTAwMDA5MEUwOTUKKzoxMDY3NTAwMDAwMDA5MEUyMDAwMDkwRTQwMDAwOTBFNjAwMDA5MEU4NjUKKzoxMDY3NjAwMDAwMDA5MEVBMDAwMDkwRUMwMDAwOTBFRTAwMDA5MEYwMzUKKzoxMDY3NzAwMDAwMDA5MEYyMDAwMDkwRjQwMDAwOTBGNjAwMDA5MEY4MDUKKzoxMDY3ODAwMDAwMDA5MEZBMDAwMDkwRkMwMDAwOTBGRTAwMDA5MTAwRDQKKzoxMDY3OTAwMDAwMDA5MTAyMDAwMDkxMDQwMDAwOTEwNjAwMDA5MTA4QTEKKzoxMDY3QTAwMDAwMDA5MTBBMDAwMDkxMEMwMDAwOTEwRTAwMDA5MTEwNzEKKzoxMDY3QjAwMDAwMDA5MTEyMDAwMDkxMTQwMDAwOTExNjAwMDA5MTE4NDEKKzoxMDY3QzAwMDAwMDA5MTFBMDAwMDkxMUMwMDAwOTExRTAwMDA5MTIwMTEKKzoxMDY3RDAwMDAwMDA5MTIyMDAwMDkxMjQwMDAwOTEyNjAwMDA5MTI4RTEKKzoxMDY3RTAwMDAwMDA5MTJBMDAwMDkxMkMwMDAwOTEyRTAwMDA5MTMwQjEKKzoxMDY3RjAwMDAwMDA5MTMyMDAwMDkxMzQwMDAwOTEzNjAwMDA5MTM4ODEKKzoxMDY4MDAwMDAwMDA5MTNBMDAwMDkxM0MwMDAwOTEzRTAwMDA5MTQwNTAKKzoxMDY4MTAwMDAwMDA5MTQyMDAwMDkxNDQwMDAwOTE0NjAwMDA5MTQ4MjAKKzoxMDY4MjAwMDAwMDA5MTRBMDAwMDkxNEMwMDAwOTE0RTAwMDA5MTUwRjAKKzoxMDY4MzAwMDAwMDA5MTUyMDAwMDkxNTQwMDAwOTE1NjAwMDA5MTU4QzAKKzoxMDY4NDAwMDAwMDA5MTVBMDAwMDkxNUMwMDAwOTE1RTAwMDA5MTYwOTAKKzoxMDY4NTAwMDAwMDA5MTYyMDAwMDkxNjQwMDAwOTE2NjAwMDA5MTY4NjAKKzoxMDY4NjAwMDAwMDA5MTZBMDAwMDkxNkMwMDAwOTE2RTAwMDA5MTcwMzAKKzoxMDY4NzAwMDAwMDA5MTcyMDAwMDkxNzQwMDAwOTE3NjAwMDA5MTc4MDAKKzoxMDY4ODAwMDAwMDA5MTdBMDAwMDkxN0MwMDAwOTE3RTAwMDA5MTgwRDAKKzoxMDY4OTAwMDAwMDA5MTgyMDAwMDkxODQwMDAwOTE4NjAwMDA5MTg4QTAKKzoxMDY4QTAwMDAwMDA5MThBMDAwMDkxOEMwMDAwOTE4RTAwMDA5MTkwNzAKKzoxMDY4QjAwMDAwMDA5MTkyMDAwMDkxOTQwMDAwOTE5NjAwMDA5MTk4NDAKKzoxMDY4QzAwMDAwMDA5MTlBMDAwMDkxOUMwMDAwOTE5RTAwMDA5MUEwMTAKKzoxMDY4RDAwMDAwMDA5MUEyMDAwMDkxQTQwMDAwOTFBNjAwMDA5MUE4RTAKKzoxMDY4RTAwMDAwMDA5MUFBMDAwMDkxQUMwMDAwOTFBRTAwMDA5MUIwQjAKKzoxMDY4RjAwMDAwMDA5MUIyMDAwMDkxQjQwMDAwOTFCNjAwMDA5MUI4ODAKKzoxMDY5MDAwMDAwMDA5MUJBMDAwMDkxQkMwMDAwOTFCRTAwMDA5MUMwNEYKKzoxMDY5MTAwMDAwMDA5MUMyMDAwMDkxQzQwMDAwOTFDNjAwMDA5MUM4MUYKKzoxMDY5MjAwMDAwMDA5MUNBMDAwMDkxQ0MwMDAwOTFDRTAwMDA5MUQwRUYKKzoxMDY5MzAwMDAwMDA5MUQyMDAwMDkxRDQwMDAwOTFENjAwMDA5MUQ4QkYKKzoxMDY5NDAwMDAwMDA5MURBMDAwMDkxREMwMDAwOTFERTAwMDA5MUUwOEYKKzoxMDY5NTAwMDAwMDA5MUUyMDAwMDkxRTQwMDAwOTFFNjAwMDA5MUU4NUYKKzoxMDY5NjAwMDAwMDA5MUVBMDAwMDkxRUMwMDAwOTFFRTAwMDA5MUYwMkYKKzoxMDY5NzAwMDAwMDA5MUYyMDAwMDkxRjQwMDAwOTFGNjAwMDA5MUY4RkYKKzoxMDY5ODAwMDAwMDA5MUZBMDAwMDkxRkMwMDAwOTFGRUZGRkZGRkZGNjQKKzoxMDY5OTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDcKKzoxMDY5QTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjcKKzoxMDY5QjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRTcKKzoxMDY5QzAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRDcKKzoxMDY5RDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQzcKKzoxMDY5RTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQjcKKzoxMDY5RjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQTcKKzoxMDZBMDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAzOEYKKzoxMDZBMTAwMDAwQkVCQzIwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAzRDQKKzoxMDZBMjAwMDAwQkVCQzIwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAzQzQKKzoxMDZBMzAwMDAwQkVCQzIwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAzQjQKKzoxMDZBNDAwMDAwQkVCQzIwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAzQTQKKzoxMDZBNTAwMDAwQkVCQzIwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAzOTQKKzoxMDZBNjAwMDAwQkVCQzIwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAzODQKKzoxMDZBNzAwMDAwQkVCQzIwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAzNzQKKzoxMDZBODAwMDAwQkVCQzIwMDAwMDAwMDAwMDAwMDAwNTAwMDAyMDAwNDcKKzoxMDZBOTAwMDAwMDA0MEMwMDAwMDYxODAwMDAwODI0MDAwMDBBMzAwQjAKKzoxMDZBQTAwMDAwMDBDM0MwMDAwMEU0ODAwMDAxMDU0MDAwMDEyNjAwOTIKKzoxMDZBQjAwMDAwMDE0NkMwMDAwMTY3ODAwMDAxODg0MDAwMDFBOTAwNzQKKzoxMDZBQzAwMDAwMDFDOUMwMDAwMUVBODAwMDAyMEI0MDAwMDIyQzAwNTYKKzoxMDZBRDAwMDAwMDI0Q0MwMDAwMjZEODAwMDAyOEU0MDAwMDJBRjAwMzgKKzoxMDZBRTAwMDAwMDJDRkMwMDAwMkYwODAwMDAwMTE0MDAwMDA4MDAwRDIKKzoxMDZBRjAwMDAwMDEwMzgwMDAwMTg3MDAwMDAyMEE4MDAwMDI4RTAwNkUKKzoxMDZCMDAwMDAwMDMxMTgwMDAwMzk1MDAwMDA0MTg4MDAwMDQ5QzAwMUQKKzoxMDZCMTAwMDAwMDUxRjgwMDAwNUEzMDAwMDA2MjY4MDAwMDZBQTAwQ0QKKzoxMDZCMjAwMDAwMDcyRDgwMDAwN0IxMDAwMDA4MzQ4MDAwMDhCODAwN0QKKzoxMDZCMzAwMDAwMDkzQjgwMDAwOUJGMDAwMDBBNDI4MDAwMEFDNjAwMkQKKzoxMDZCNDAwMDAwMEI0OTgwMDAwQkNEMDAwMDBDNTA4MDAwMENENDAwREQKKzoxMDZCNTAwMDAwMEQ1NzgwMDAwMDVCMDAwMDAwN0ZGODAwMDA3RkY4MDgKKzoxMDZCNjAwMDAwMDAwMjJBMDAwMDM1MDAwMDAwRkYwMDAwMDAwMDAwQzUKKzoxMDZCNzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMTcKKzoxMDZCODAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDcKKzoxMDZCOTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRjcKKzoxMDZCQTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRTcKKzoxMDZCQjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRDcKKzoxMDZCQzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQzcKKzoxMDZCRDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQjcKKzoxMDZCRTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQTcKKzoxMDZCRjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwOTcKKzoxMDZDMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwODYKKzoxMDZDMTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNzYKKzoxMDZDMjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNjYKKzoxMDZDMzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNTYKKzoxMDZDNDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNDYKKzoxMDZDNTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMzYKKzoxMDZDNjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMjYKKzoxMDZDNzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMTYKKzoxMDZDODAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDYKKzoxMDZDOTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRjYKKzoxMDZDQTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRTYKKzoxMDZDQjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRDYKKzoxMDZDQzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQzYKKzoxMDZDRDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQjYKKzoxMDZDRTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQTYKKzoxMDZDRjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwOTYKKzoxMDZEMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwODUKKzoxMDZEMTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNzUKKzoxMDZEMjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNjUKKzoxMDZEMzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNTUKKzoxMDZENDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNDUKKzoxMDZENTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMzUKKzoxMDZENjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMjUKKzoxMDZENzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMTUKKzoxMDZEODAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDUKKzoxMDZEOTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRjUKKzoxMDZEQTAwMDAwMDBGRjAwMDAwMDE5MDAwMDAwMDAwMDAwMDAwMDAwQ0IKKzoxMDZEQjAwMEZGRkZGRkZGMDAwMDAwMDAwMzkzODcwMDAwMDAwMDAwQkEKKzoxMDZEQzAwMDAzOTM4NzAwMDAwMDdGRjgwMDAwN0ZGODAwMDAwQkEzMEEKKzoxMDZERDAwMDAwMDAxNTAwMDAwMDAwRkYwMDAwMDBGRjAwMDAwMEZGQTEKKzoxMDZERTAwMDAwMDAwMEZGMDAwMDAwRkYwMDAwMDBGRjAwMDAwMEZGQTcKKzoxMDZERjAwMDAwMDAwMEZGMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwOTYKKzoxMDZFMDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwODQKKzoxMDZFMTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNzQKKzoxMDZFMjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNjQKKzoxMDZFMzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNTQKKzoxMDZFNDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNDQKKzoxMDZFNTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMzQKKzoxMDZFNjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMjQKKzoxMDZFNzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMTQKKzoxMDZFODAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDQKKzoxMDZFOTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRjQKKzoxMDZFQTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRTQKKzoxMDZFQjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRDQKKzoxMDZFQzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQzQKKzoxMDZFRDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQjQKKzoxMDZFRTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQTQKKzoxMDZFRjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwOTQKKzoxMDZGMDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwODMKKzoxMDZGMTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNzMKKzoxMDZGMjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNjMKKzoxMDZGMzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNTMKKzoxMDZGNDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNDMKKzoxMDZGNTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMzMKKzoxMDZGNjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMjMKKzoxMDZGNzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMTMKKzoxMDZGODAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDMKKzoxMDZGOTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRjMKKzoxMDZGQTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRTMKKzoxMDZGQjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRDMKKzoxMDZGQzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQzMKKzoxMDZGRDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQjMKKzoxMDZGRTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQTMKKzoxMDZGRjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwOTMKKzoxMDcwMDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwODIKKzoxMDcwMTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNzIKKzoxMDcwMjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNjIKKzoxMDcwMzAwMDAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNUMKKzoxMDcwNDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNTAKKzoxMDcwNTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNDAKKzoxMDcwNjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMzAKKzoxMDcwNzAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMjAKKzoxMDcwODAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMTAKKzoxMDcwOTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDAKKzoxMDcwQTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAKKzoxMDcwQjAwMEZGRkZGRkZGMDAwMDAwMDAwMDAwMjhBRDAwMDAyOTE4QkUKKzoxMDcwQzAwMDAwMDAyOTE5MDAwMDAwMDUwMDAwMDAwNzAwMDBGRjAwNzMKKzoxMDcwRDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGOUEKKzoxMDcwRTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwOTcKKzoxMDcwRjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwODcKKzoxMDcxMDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNjkKKzoxMDcxMTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNjYKKzoxMDcxMjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNTYKKzoxMDcxMzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMzkKKzoxMDcxNDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMzYKKzoxMDcxNTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMjYKKzoxMDcxNjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDkKKzoxMDcxNzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMDYKKzoxMDcxODAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwRjYKKzoxMDcxOTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRDkKKzoxMDcxQTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRDYKKzoxMDcxQjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQzYKKzoxMDcxQzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQTkKKzoxMDcxRDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQTYKKzoxMDcxRTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwOTYKKzoxMDcxRjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNzkKKzoxMDcyMDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNzUKKzoxMDcyMTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNjUKKzoxMDcyMjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNDgKKzoxMDcyMzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNDUKKzoxMDcyNDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMzUKKzoxMDcyNTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMTgKKzoxMDcyNjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMTUKKzoxMDcyNzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMDUKKzoxMDcyODAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRTgKKzoxMDcyOTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRTUKKzoxMDcyQTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwRDUKKzoxMDcyQjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQjgKKzoxMDcyQzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQjUKKzoxMDcyRDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQTUKKzoxMDcyRTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGODgKKzoxMDcyRjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwODUKKzoxMDczMDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNzQKKzoxMDczMTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNTcKKzoxMDczMjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNTQKKzoxMDczMzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNDQKKzoxMDczNDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMjcKKzoxMDczNTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMjQKKzoxMDczNjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMTQKKzoxMDczNzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRjcKKzoxMDczODAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRjQKKzoxMDczOTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwRTQKKzoxMDczQTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQzcKKzoxMDczQjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQzQKKzoxMDczQzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQjQKKzoxMDczRDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGOTcKKzoxMDczRTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwOTQKKzoxMDczRjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwODQKKzoxMDc0MDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNjYKKzoxMDc0MTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNjMKKzoxMDc0MjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNTMKKzoxMDc0MzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMzYKKzoxMDc0NDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMzMKKzoxMDc0NTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMjMKKzoxMDc0NjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDYKKzoxMDc0NzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMDMKKzoxMDc0ODAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwRjMKKzoxMDc0OTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRDYKKzoxMDc0QTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRDMKKzoxMDc0QjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQzMKKzoxMDc0QzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQTYKKzoxMDc0RDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQTMKKzoxMDc0RTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwOTMKKzoxMDc0RjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNzYKKzoxMDc1MDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNzIKKzoxMDc1MTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNjIKKzoxMDc1MjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNDUKKzoxMDc1MzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNDIKKzoxMDc1NDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMzIKKzoxMDc1NTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMTUKKzoxMDc1NjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMTIKKzoxMDc1NzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMDIKKzoxMDc1ODAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRTUKKzoxMDc1OTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRTIKKzoxMDc1QTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwRDIKKzoxMDc1QjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQjUKKzoxMDc1QzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQjIKKzoxMDc1RDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQTIKKzoxMDc1RTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGODUKKzoxMDc1RjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwODIKKzoxMDc2MDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNzEKKzoxMDc2MTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNTQKKzoxMDc2MjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNTEKKzoxMDc2MzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNDEKKzoxMDc2NDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMjQKKzoxMDc2NTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMjEKKzoxMDc2NjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMTEKKzoxMDc2NzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRjQKKzoxMDc2ODAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRjEKKzoxMDc2OTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwRTEKKzoxMDc2QTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQzQKKzoxMDc2QjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQzEKKzoxMDc2QzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQjEKKzoxMDc2RDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGOTQKKzoxMDc2RTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwOTEKKzoxMDc2RjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwODEKKzoxMDc3MDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNjMKKzoxMDc3MTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNjAKKzoxMDc3MjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNTAKKzoxMDc3MzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMzMKKzoxMDc3NDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMzAKKzoxMDc3NTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMjAKKzoxMDc3NjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDMKKzoxMDc3NzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMDAKKzoxMDc3ODAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwRjAKKzoxMDc3OTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRDMKKzoxMDc3QTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRDAKKzoxMDc3QjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQzAKKzoxMDc3QzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQTMKKzoxMDc3RDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQTAKKzoxMDc3RTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwOTAKKzoxMDc3RjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNzMKKzoxMDc4MDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNkYKKzoxMDc4MTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNUYKKzoxMDc4MjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNDIKKzoxMDc4MzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwM0YKKzoxMDc4NDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMkYKKzoxMDc4NTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMTIKKzoxMDc4NjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEYKKzoxMDc4NzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwRkYKKzoxMDc4ODAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRTIKKzoxMDc4OTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwREYKKzoxMDc4QTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQ0YKKzoxMDc4QjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQjIKKzoxMDc4QzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQUYKKzoxMDc4RDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwOUYKKzoxMDc4RTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGODIKKzoxMDc4RjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwN0YKKzoxMDc5MDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNkUKKzoxMDc5MTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNTEKKzoxMDc5MjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNEUKKzoxMDc5MzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwM0UKKzoxMDc5NDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMjEKKzoxMDc5NTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMUUKKzoxMDc5NjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMEUKKzoxMDc5NzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRjEKKzoxMDc5ODAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRUUKKzoxMDc5OTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwREUKKzoxMDc5QTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQzEKKzoxMDc5QjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQkUKKzoxMDc5QzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQUUKKzoxMDc5RDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGOTEKKzoxMDc5RTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwOEUKKzoxMDc5RjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwN0UKKzoxMDdBMDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNjAKKzoxMDdBMTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNUQKKzoxMDdBMjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNEQKKzoxMDdBMzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMzAKKzoxMDdBNDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMkQKKzoxMDdBNTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMUQKKzoxMDdBNjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAKKzoxMDdBNzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRkQKKzoxMDdBODAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwRUQKKzoxMDdBOTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRDAKKzoxMDdBQTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQ0QKKzoxMDdBQjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQkQKKzoxMDdBQzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQTAKKzoxMDdBRDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwOUQKKzoxMDdBRTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwOEQKKzoxMDdBRjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNzAKKzoxMDdCMDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNkMKKzoxMDdCMTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNUMKKzoxMDdCMjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGM0YKKzoxMDdCMzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwM0MKKzoxMDdCNDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMkMKKzoxMDdCNTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMEYKKzoxMDdCNjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEMKKzoxMDdCNzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwRkMKKzoxMDdCODAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGREYKKzoxMDdCOTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwREMKKzoxMDdCQTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQ0MKKzoxMDdCQjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQUYKKzoxMDdCQzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQUMKKzoxMDdCRDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwOUMKKzoxMDdCRTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGN0YKKzoxMDdCRjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwN0MKKzoxMDdDMDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNkIKKzoxMDdDMTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNEUKKzoxMDdDMjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNEIKKzoxMDdDMzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwM0IKKzoxMDdDNDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMUUKKzoxMDdDNTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMUIKKzoxMDdDNjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMEIKKzoxMDdDNzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRUUKKzoxMDdDODAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRUIKKzoxMDdDOTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwREIKKzoxMDdDQTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQkUKKzoxMDdDQjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQkIKKzoxMDdDQzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQUIKKzoxMDdDRDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGOEUKKzoxMDdDRTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwOEIKKzoxMDdDRjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwN0IKKzoxMDdEMDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNUQKKzoxMDdEMTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNUEKKzoxMDdEMjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNEEKKzoxMDdEMzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMkQKKzoxMDdENDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMkEKKzoxMDdENTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMUEKKzoxMDdENjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRkQKKzoxMDdENzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRkEKKzoxMDdEODAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDAxMDAwRDkKKzoxMDdEOTAwMDAwMDAyMDgwMDAwMDMxMDAwMDAwNDE4MDAwMDA1MjAwRkYKKzoxMDdEQTAwMDAwMDA2MjgwMDAwMDczMDAwMDAwODM4MDAwMDA5NDAwRTcKKzoxMDdEQjAwMDAwMDBBNDgwMDAwMEI1MDAwMDAwQzU4MDAwMDBENjAwQ0YKKzoxMDdEQzAwMDAwMDBFNjgwMDAwMEY3MDAwMDAxMDc4MDAwMDExODAwQjUKKzoxMDdERDAwMDAwMDEyODgwMDAwMTM5MDAwMDAxNDk4MDAwMDE1QTAwOUIKKzoxMDdERTAwMDAwMDE2QTgwMDAwMTdCMDAwMDAxOEI4MDAwMDE5QzAwODMKKzoxMDdERjAwMDAwMDFBQzgwMDAwMUJEMDAwMDAxQ0Q4MDAwMDFERTAwNkIKKzoxMDdFMDAwMDAwMDFFRTgwMDAwMUZGMDAwMDAwMEY4MDAwMDA3RkY4RkQKKzoxMDdFMTAwMDAwMDA3RkY4MDAwMDA1RjYwMDAwMzUwMDEwMDAwMDAwQUIKKzoxMDdFMjAwMDAwMDAyOEFEMDAwMDI5MTgwMDAwMjkxOTAwMDAwMDA1RjUKKzoxMDdFMzAwMDAwMDAwMDA2MDAwMTAwMDEwMDA5MDIwNkNDQ0NDQ0M5RkMKKzoxMDdFNDAwMDcwNTgxMDNDMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMjAKKzoxMDdFNTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMjQKKzoxMDdFNjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMTQKKzoxMDdFNzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDQKKzoxMDdFODAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRjQKKzoxMDdFOTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRTQKKzoxMDdFQTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRDQKKzoxMDdFQjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQzQKKzoxMDdFQzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQjQKKzoxMDdFRDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQTQKKzoxMDdFRTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwOTQKKzoxMDdFRjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwODQKKzoxMDdGMDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNzMKKzoxMDdGMTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNjMKKzoxMDdGMjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNTMKKzoxMDdGMzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNDMKKzoxMDdGNDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMzMKKzoxMDdGNTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMjMKKzoxMDdGNjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMTMKKzoxMDdGNzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDMKKzoxMDdGODAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRjMKKzoxMDdGOTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRTMKKzoxMDdGQTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRDMKKzoxMDdGQjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQzMKKzoxMDdGQzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQjMKKzoxMDdGRDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQTMKKzoxMDdGRTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwOTMKKzoxMDdGRjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwODMKKzoxMDgwMDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNzIKKzoxMDgwMTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNjIKKzoxMDgwMjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNTIKKzoxMDgwMzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNDIKKzoxMDgwNDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMzIKKzoxMDgwNTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMjIKKzoxMDgwNjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMTIKKzoxMDgwNzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDIKKzoxMDgwODAwMDAwMDAwMDAwMDAwMDAwMDFDQ0NDMDIwMUNDQ0NDQ0NDMjQKKzoxMDgwOTAwMENDQ0MwMjAxQ0NDQ0NDQ0NDQ0NDMDIwMUNDQ0NDQ0NDNEEKKzoxMDgwQTAwMENDQ0MwMjAxQ0NDQ0NDQ0NDQ0NDMDIwMUNDQ0NDQ0NDM0EKKzoxMDgwQjAwMENDQ0MwMjAxQ0NDQ0NDQ0NDQ0NDMDIwMUNDQ0NDQ0NDMkEKKzoxMDgwQzAwMENDQ0MwMjAxQ0NDQ0NDQ0MwMDAwMDAwMEZGRkZGRkZGRTkKKzoxMDgwRDAwMDAzMDMwMzAzMTM0MjAyMDI1MDUwNTAyMDcwNjA4MDUwOEIKKzoxMDgwRTAwMDAyMDAwMjAwMDYwNDA2MDQwMDBFMDAwMDAxMTYwMEQ2N0QKKzoxMDgwRjAwMDAwMjYyNUEwMDAyNjI1QTAwMDI2MjVBMDAwMjYyNUEwRDQKKzoxMDgxMDAwMDAwNzIwMDAwMDEyMzAwRjMwMDI2MjVBMDAwMjYyNUEwMTAKKzoxMDgxMTAwMDAwMjYyNUEwMDAyNjI1QTAwMDAwRkZGRjAwMDAwMDAwOEIKKzoxMDgxMjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwNTMKKzoxMDgxMzAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwNDMKKzoxMDgxNDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMzMKKzoxMDgxNTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMjMKKzoxMDgxNjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMTMKKzoxMDgxNzAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDMKKzoxMDgxODAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwRjMKKzoxMDgxOTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwRTMKKzoxMDgxQTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwRDMKKzoxMDgxQjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwQzMKKzoxMDgxQzAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwQjMKKzoxMDgxRDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwQTMKKzoxMDgxRTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwOTMKKzoxMDgxRjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwODMKKzoxMDgyMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwNzIKKzoxMDgyMTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwNjIKKzoxMDgyMjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwNTIKKzoxMDgyMzAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwNDIKKzoxMDgyNDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMzIKKzoxMDgyNTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMjIKKzoxMDgyNjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMTIKKzoxMDgyNzAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDIKKzoxMDgyODAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwRjIKKzoxMDgyOTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwRTIKKzoxMDgyQTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwRDIKKzoxMDgyQjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwQzIKKzoxMDgyQzAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwQjIKKzoxMDgyRDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwQTIKKzoxMDgyRTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwOTIKKzoxMDgyRjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwODIKKzoxMDgzMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwNzEKKzoxMDgzMTAwMDAwMDBGRkZGMDAwMDAwMDBGRkZGRkZGMzMxOEZGRkZGQjEKKzoxMDgzMjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzOTEKKzoxMDgzMzAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGMTMwRUZGRkZGRjMKKzoxMDgzNDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNzEKKzoxMDgzNTAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGNUQKKzoxMDgzNjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNTEKKzoxMDgzNzAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRjQwNjFDQkZGRkZGRUIKKzoxMDgzODAwMDBDMzBDMzA1QzMwQzMwQzNDRjMwMDAxNEYzQ0YzQ0YzMjMKKzoxMDgzOTAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGMkUKKzoxMDgzQTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMTEKKzoxMDgzQjAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGQTMwMkZGRkZGMjIKKzoxMDgzQzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzRjEKKzoxMDgzRDAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkZGNzMxRUZGRkZGM0MKKzoxMDgzRTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzRDEKKzoxMDgzRjAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGNTMwMkZGRkZGQ0YKKzoxMDg0MDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzQjAKKzoxMDg0MTAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGMzMxOEZGRkZGMkYKKzoxMDg0MjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzOTAKKzoxMDg0MzAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGMTMxMEZGRkZGRDEKKzoxMDg0NDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNzAKKzoxMDg0NTAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGNUMKKzoxMDg0NjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNTAKKzoxMDg0NzAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRjQwNjFDQkZGRkZGRUEKKzoxMDg0ODAwMDBDMzBDMzA1QzMwQzMwQzNDRjMwMDAxNEYzQ0YzQ0YzMjIKKzoxMDg0OTAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGMkQKKzoxMDg0QTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMTAKKzoxMDg0QjAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGQTMwMkZGRkZGMjEKKzoxMDg0QzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzRjAKKzoxMDg0RDAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkZGNzMwRUZGRkZGM0MKKzoxMDg0RTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzRDAKKzoxMDg0RjAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGNTMwNEZGRkZGQUUKKzoxMDg1MDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzQUYKKzoxMDg1MTAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGRTMKKzoxMDg1MjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzQzMKKzoxMDg1MzAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMDMKKzoxMDg1NDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzQTMKKzoxMDg1NTAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGRTIKKzoxMDg1NjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzODMKKzoxMDg1NzAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGQzEKKzoxMDg1ODAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzNjMKKzoxMDg1OTAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGOUYKKzoxMDg1QTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzNDMKKzoxMDg1QjAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGN0IKKzoxMDg1QzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMjMKKzoxMDg1RDAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNTMKKzoxMDg1RTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDMKKzoxMDg1RjAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMjMKKzoxMDg2MDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzRTIKKzoxMDg2MTAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGMzMyMEZGRkZGQUMKKzoxMDg2MjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzOEUKKzoxMDg2MzAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGMTMxMEZGRkZGQ0YKKzoxMDg2NDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNkUKKzoxMDg2NTAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGNUEKKzoxMDg2NjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNEUKKzoxMDg2NzAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRjQwNjFDQkZGRkZGRTgKKzoxMDg2ODAwMDBDMzBDMzA1QzMwQzMwQzNDRjMwMDAxNEYzQ0YzQ0YzMjAKKzoxMDg2OTAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGMkIKKzoxMDg2QTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMEUKKzoxMDg2QjAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkY4QTA0MkZGRkZGQkIKKzoxMDg2QzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDQzAwMEYzQ0YzQ0YzMjEKKzoxMDg2RDAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkY5NzA1Q0ZGRkZGRTUKKzoxMDg2RTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDQzAwMEYzQ0YzQ0YzMDEKKzoxMDg2RjAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGNTMxMEZGRkZGRUIKKzoxMDg3MDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzQUQKKzoxMDg3MTAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGMzMyMEZGRkZGQUIKKzoxMDg3MjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzOEQKKzoxMDg3MzAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGMTMwMkZGRkZGQUYKKzoxMDg3NDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNkQKKzoxMDg3NTAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGNTkKKzoxMDg3NjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNEQKKzoxMDg3NzAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRkYwNjFDQkZGRkZGREMKKzoxMDg3ODAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDQzAxNEYzQ0YzQ0YzNEMKKzoxMDg3OTAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGMkEKKzoxMDg3QTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMEQKKzoxMDg3QjAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGQTMwMkZGRkZGMUUKKzoxMDg3QzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzRUQKKzoxMDg3RDAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkZGNzMxQ0ZGRkZGNTgKKzoxMDg3RTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzQ0QKKzoxMDg3RjAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMjEKKzoxMDg4MDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzRTAKKzoxMDg4MTAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGRTAKKzoxMDg4MjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzQzAKKzoxMDg4MzAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMDAKKzoxMDg4NDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzQTAKKzoxMDg4NTAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGREYKKzoxMDg4NjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzODAKKzoxMDg4NzAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGQkUKKzoxMDg4ODAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzNjAKKzoxMDg4OTAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGOUMKKzoxMDg4QTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzNDAKKzoxMDg4QjAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNzgKKzoxMDg4QzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMjAKKzoxMDg4RDAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNTAKKzoxMDg4RTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAKKzoxMDg4RjAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMjAKKzoxMDg5MDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzREYKKzoxMDg5MTAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGREYKKzoxMDg5MjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzQkYKKzoxMDg5MzAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGRkYKKzoxMDg5NDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzOUYKKzoxMDg5NTAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGREUKKzoxMDg5NjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzN0YKKzoxMDg5NzAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGQkQKKzoxMDg5ODAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzNUYKKzoxMDg5OTAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGOUIKKzoxMDg5QTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzM0YKKzoxMDg5QjAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNzcKKzoxMDg5QzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMUYKKzoxMDg5RDAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNEYKKzoxMDg5RTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzRkYKKzoxMDg5RjAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMUYKKzoxMDhBMDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzREUKKzoxMDhBMTAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGREUKKzoxMDhBMjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzQkUKKzoxMDhBMzAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGRkUKKzoxMDhBNDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzOUUKKzoxMDhBNTAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGREQKKzoxMDhBNjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzN0UKKzoxMDhBNzAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGQkMKKzoxMDhBODAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzNUUKKzoxMDhBOTAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGOUEKKzoxMDhBQTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzM0UKKzoxMDhBQjAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNzYKKzoxMDhBQzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMUUKKzoxMDhBRDAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNEUKKzoxMDhBRTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzRkUKKzoxMDhBRjAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMUUKKzoxMDhCMDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzREQKKzoxMDhCMTAwMDAwNDBDRjNDQ0RDRENEQ0QwMDBDMDAwMDAwMDcwMEMwMDMKKzoxMDhCMjAwMDAwMDI4MTMwMDAwQjgxNTgwMDAyMDIxMDAwMDEwMjMwNjcKKzoxMDhCMzAwMDAwMEYwMjQwMDAwMTAzMzAwMDBDMDAwMDAwMDgwMEMwREMKKzoxMDhCNDAwMDAwMDI4MTQwMDAwQjgxNjgwMDAyMDIyMDAwMDEwMjQwMDcKKzoxMDhCNTAwMDAwMDcwMjUwMDAwMjAyQzAwMDEwMDAwMDAwMDgwMTAwREYKKzoxMDhCNjAwMDAwMDI4MTgwMDAwQjgxQTgwMDAyMDI2MDAwMDE4MjgwNjcKKzoxMDhCNzAwMDAwMEU4Mjk4MDAwODAzODAwMDEwMDAwMDAwMDEwMTAwMzAKKzoxMDhCODAwMDAwMDI4MTEwMDAwOTAxMzgwMDAyMDFDODAwMDEwMUU4NUIKKzoxMDhCOTAwMDAwMEUwMUY4MDAwMDAyRDhDQ0NDQ0NDQ0NDQ0NDQ0NDOTQKKzoxMDhCQTAwMENDQ0NDQ0NDQ0NDQ0NDQ0MwMDAwMjAwMENDQ0NDQ0NDMTUKKzoxMDhCQjAwMENDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQzAwMDAyMDAwMDUKKzoxMDhCQzAwMENDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDRTUKKzoxMDhCRDAwMDA0MDAyMDAwQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDRTEKKzoxMDhCRTAwMENDQ0NDQ0NDNDEwMDIwMDAwMzAzMDMwMzAzNDIwMjAyOUYKKzoxMDhCRjAwMDUwNTA1MDIwNzA2MDgwNTAxMzEzMTMxMzEzNDIxMjEyMDAKKzoxMDhDMDAwMDUwNTA1MDIwNzA2MDgwNTAwMzAxMDIwMDAwMDAwMDAwQUUKKzoxMDhDMTAwMDAwMDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwQTIKKzoxMDhDMjAwMDAwMEJGQjUxQ0ZDMEYwMDM4QTBGMDkzMjMwNjg4QTIwNTUKKzoxMDhDMzAwMEY4QzRFMDVDNzYwNjg2NzUxQzBDMEM1QkI4NDlEMzA3NUIKKzoxMDhDNDAwMEMzMkMwQzBDMENEQTRDRTRFOTA1RTFGQkJDMEMwQ0FGQkEKKzoxMDhDNTAwMDgwOTg4NTBGNTU5Qzg3MTM0MkZGMDE1QUMwQzdDQUMwMzAKKzoxMDhDNjAwMEEwQzE4NjVERkYzQTM1MDQzQjQwODU4MUExMUM4OEQ5QUYKKzoxMDhDNzAwMDk0MTgxOENDNTQxMUUyRDJFQTBDMEMzMzgwRkMwNEE4RUUKKzoxMDhDODAwMEQ4MUQyMDFEQUI0NkJFOUI0N0YxRTBDMTM3OEQ1MUY5ODEKKzoxMDhDOTAwMDVCMERBMTY5MDEyQTdFMEI0RDdFMUI1NEJFNEEwNzQyMjMKKzoxMDhDQTAwMERGMzZDNjZFNkVCNTBFNzFGNjlGQjU0NkU1QUZCNEM2M0IKKzoxMDhDQjAwMEFGRkVBRTNEMkFGRjIwOUFGQUFENTAzRTAwQzVENTVCMEYKKzoxMDhDQzAwMEE3RDgwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIKKzoxMDhDRDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRUQ3RDdGN0MxNEQ1ODkKKzoxMDhDRTAwMEI1Rjg5OTlERDlEOUQ5Q0RFRTY2MDgwOTZDMjBFMDI0NTQKKzoxMDhDRjAwMDg2MUFGQjgyREZFNTc3QTg0MTg3ODAzNEI2M0NERjhBOUQKKzoxMDhEMDAwMDVBRDNENkY2QkI1MDZDNTUxNDU2QkYzRUUxRjU2OTMzQzUKKzoxMDhEMTAwMEY5NDExMjIyNjIwNDlGREFENjFGMkI1NTRCRkI2Qzg5NTYKKzoxMDhEMjAwMDk0MkFBRDNGREUwMjRBRjFGNUM3NDNBQUQ1RDdBMjJGNTgKKzoxMDhEMzAwMEZFODBBQTQ1NUZDNEQyRDg3RTUxREUzREU3REVDOUNFQjMKKzoxMDhENDAwMDRDNzY5MzBERDAxRjdGQkNGMDgxRTFDRURDMUZFNzlFRjcKKzoxMDhENTAwMDczRUUzOUU3OUU3M0VFOERFQTBCQzJDN0NFMDUzODhFRUYKKzoxMDhENjAwMDNGRUNEOTEzMDI4MDU5RDlBNzcxRjVCQ0FFQkU5OTAwNkEKKzoxMDhENzAwMDQ3MjFEMkQzNUQwQUQwQTY4MDA5QUM2QzFEODhBNDFGMDAKKzoxMDhEODAwMDk0MDA3RjZBMTQ1NjVFMkQ3RjNDREU1RDA5NzA2N0QxQ0EKKzoxMDhEOTAwMEQ3RUVDM0ZBNkIyQzA1MDJFQ0Q5REQwQzkwMzk4MzdEM0MKKzoxMDhEQTAwMDBGNDUzNzQzMzE0MDExQTRCNkUyNzdGNjkzNzg5MEY1M0EKKzoxMDhEQjAwMDM3MTA5QzlDODY2ODc2RkMzMkYwRDFCODAwMTVGQUExNzkKKzoxMDhEQzAwMDIyQUEwN0M3NjVGNkNGODFFNDdDMTgwNzIwODNGREIzOEMKKzoxMDhERDAwMDA2N0E1OTNGQ0FGMzcyMUFDNzk1RTVDNUZBOEI1NUQ5NzkKKzoxMDhERTAwMDdFQkM0RjU5NTcyMUEzODlGRUYwMUZGOUIyRTI2NDM4QzcKKzoxMDhERjAwMDdGRkQzNTA3MkFCNzNFNUQ5M0FEN0YwNjQ0NEEwRkZERTAKKzoxMDhFMDAwMDFERkI4RjAyMEFDMTIzQUYwN0M0QzNEMTMwQTRFNUNBM0EKKzoxMDhFMTAwMEZDRkQwQzM0MUI1QjlGRjYyMzFFQkY1MDlDOTg5QUJGMzEKKzoxMDhFMjAwMDlFOERBN0FFNjY4RDlFMURDRDNBNjQwMjAwMEM2NEIzODQKKzoxMDhFMzAwMEI3OTYzREMzNjA2RUFFMUREQTZFMDE0ODg0MkZDREIwOEIKKzoxMDhFNDAwMDA4OUVGNkIwMkY1RDU0ODk1MDI3MDExODdFRkQ4ODFGQkIKKzoxMDhFNTAwMDA5REYyRkQxQ0MxQ0VERUQyNzk0MzJGQ0Q4RjM2NTc4RDcKKzoxMDhFNjAwMDBDMDJFRjBGRDhGQzFFNjRGRDA1NzFGQzFDRjhCQTA4NUIKKzoxMDhFNzAwMEM3MkY2M0RGQUI4NzhFNkZDRDNDRjFGMTQzNjcwMkVDMDgKKzoxMDhFODAwMDBCMjNCRTREODQwMTdDN0EwQUUyODJERTlGOTQ4NkU5NDAKKzoxMDhFOTAwMDQ3RDA1OTMxNzgzRjIzRTFCREE4QzY5NzFEOTdGRDBERjYKKzoxMDhFQTAwMDFBMjExNzlGMDQ2MjI1NkVCRUYxRjIyNUUyQTkwQ0U5OTIKKzoxMDhFQjAwMDY1NDhBRjRGQzlGNkFCMjJERDcyRTBFQjRBODFBRkZFRTkKKzoxMDhFQzAwMEY5ODlBNjA0QzNDN0RBNjZCMDVFNzNCNDkzNjM2MEE2N0IKKzoxMDhFRDAwMDczRTA2OUI1Njg2NzhGQTc5NEIyN0EzOUZBMDc2ODExQTkKKzoxMDhFRTAwMEVCQzc3MkQ1MkYxNEJFOUI0RTEwQkU5QkZGNDJGMEREMjgKKzoxMDhFRjAwMDI2Rjg5RDQ5Mjg3QUY2Q0Y0RjEyOUNERUZFNzJBRDJGRTAKKzoxMDhGMDAwMEI2ODgwN0NCMjEyNTZERjk5MEJGNEIyMUZFMjA3QkY4NTkKKzoxMDhGMTAwMDM1QkVDRUVDRUZERjA3M0ZGNUIzMDMyNTBFMUJBNzREQTMKKzoxMDhGMjAwMEMwRDczRjlGQ0JCRkI1RDNENEY0NjY4OUU0OTEwQkNFQjUKKzoxMDhGMzAwMDg3NTE3RUIxNzY5MjI0RjBBMUY1MDJGMjVGRDEwNzBBNDMKKzoxMDhGNDAwMEMwNTg4NENGODQ0NDA0NjA1RDc1ODMzNjlDRkMwMTVEMDkKKzoxMDhGNTAwMEY5NTM5RkNENzc1NTQzRjlFRUUzNkMxODg0MkIxNENFNkIKKzoxMDhGNjAwMDhEQTdFRjBGQ0FEMUNCQUNENzU4M0Y1QTkwQkQzRjFENEMKKzoxMDhGNzAwMEZCMkQ4RDU1Q0MwNjlDMURGREY4QzU3NzkwN0NGMjcxQkMKKzoxMDhGODAwMDVDQjdDNzU4QkREOTQyQ0VDQUQ0M0ZDOTExQTgwMDkyMTgKKzoxMDhGOTAwMEY3QjJBODRGRTNCMEZBMDEzNjJENzMzQTdCRTJGQjFBMjEKKzoxMDhGQTAwMDMxOEUzNEI0NUY2RkJCMDEyOEUxRjgxMUYwRDg3MjVERTcKKzoxMDhGQjAwMDg2MjdBODlGNDE3ODk0MDRFMUNCRkJERUNGREVFQkUxNkUKKzoxMDhGQzAwMDkzN0Y3RkIyNjVCRjkxNjdCQzFFODlGODY5QTRGNkFGMzUKKzoxMDhGRDAwMDA4N0UxOUMyOUY3OUU4QkE1RkFDMzMwNTdBNEQzODNERjcKKzoxMDhGRTAwMENCNDczNjdGOUQyODFGOUQzNDlGQjBFMTQ5NUZFNEUxNjgKKzoxMDhGRjAwMDEzMEI1MkI0NkU1ODM1QUI3QkRBRThGOTI1MDc5RjY0NDIKKzoxMDkwMDAwMDlDRjUxNzRCNjNGODNDOTQzOEYxMEI4MzQ3MjFCRUQ1OTAKKzoxMDkwMTAwMDM5M0M2NUQzNEJBOTNGMDlEN0Y4MTlEODgzMjgyMzFFQkIKKzoxMDkwMjAwMEQ4N0M5N0Q5RUQyMTRFRUIzNTg0NzY4RUEzM0Q5QjFDRTEKKzoxMDkwMzAwMEMxMkJDOTkyOTBGQkJDREUwRDYyOURDRjZCQThFMEYwMDYKKzoxMDkwNDAwMDgzRThERjAzMkZFQjRGNzNGNjI3NDM4NTg3Q0YzOURDQTcKKzoxMDkwNTAwMDFCMjQyRURGNThGRDBDRTFEMzNCQkUyMjExQkMzMjI0NzEKKzoxMDkwNjAwMDJDMUY2QkI3NTk4Q0VGOTU1RkY2NzNCQkU4NkZCRDA0OEYKKzoxMDkwNzAwMDREQkQ2MUJFOUU5NjM4RjQ2MTgzMjRFNDg0QzZENzk5QzEKKzoxMDkwODAwMDU3M0VGOTkxQUY2NjlDMzg1RjE1MkFENzE3NEJCOUY1NTMKKzoxMDkwOTAwMDBFQjM4QTYyMTc0NkYyRUI5RDYyOUZBRDBGMzIzMTQxRUIKKzoxMDkwQTAwMEI3NTFEMUZENzRBOUM0NDVGNzQyRTE1RDc2ODJGMDRFMTcKKzoxMDkwQjAwMDFDMEE2RjQxN0M3NkE2RTQxQjk1OUVCQ0UxMDRFMTBCODMKKzoxMDkwQzAwMDdBRTAzQjU1N0MzRDQzRjA1OUExRjBEQkVCNjBCNEYwMTYKKzoxMDkwRDAwMENCNDNGMTVCRDAzQTlBM0I0QUY4MzY5RjIwN0VDQjdDNUIKKzoxMDkwRTAwMEI2OUQyNEUwQ0JCMzZFRTcwOTdBNUJDMEY5NDM2MTc2QTUKKzoxMDkwRjAwMDM4RUU3MzBBODVFRkQxOTFFMTAzRjgwNEZCNkJCRDZBOEEKKzoxMDkxMDAwMDk5MEFEOTZCMDAxMzAwOUU2RTc5RDVCMjk0MkM3QzI2RjcKKzoxMDkxMTAwMDcwQjkzRURBRjFGNzhDNEMzRjMxRkU1Qjk2NTk5RDFEREMKKzoxMDkxMjAwMEZGRjk5NkI3NUNFMzJCOEM3RjkwRDkwQTFERjc4NTQyMzcKKzoxMDkxMzAwMEU3MERFRkI5RTZGREJBRjQ5RTZCREMxM0M1RkJDMTgyMDcKKzoxMDkxNDAwMEM3RkZBMzZCREVFRjRCN0Y3NENGM0JDQ0U2N0Q3QUUxQUMKKzoxMDkxNTAwMEUzRkVGRTA0RjlCMTUyQUM5NzA2NDk3N0U5ODE3Q0Y2NEIKKzoxMDkxNjAwMEZCMEM0MUQ3QkJFREZBMzZCQzc5RUE5RjI5RTA2QTJGQTgKKzoxMDkxNzAwMEIwRkU0NEQxRkZFNzBBQUNERjJCRkFFRkM1RkE2NTIzNTYKKzoxMDkxODAwMEQ3M0Y1REQ0NEYxNTU4NUZGMkYxNzU5ODRGN0ZDRTk3NUEKKzoxMDkxOTAwMDZDRkM4MTZCRkZEMUE2NzEzRjg4RDlBNjQwRjA5Q0ExRTEKKzoxMDkxQTAwMDdFMTNBQjIxRjVFRDNFNDY3QkFCMzVBMEI3OTU5MkRGNDQKKzoxMDkxQjAwMDg0RkMyMjZCMDAxMkU4MzdGOTI2MjRFQjdDQUMxRjYzOTkKKzoxMDkxQzAwMEM3NERGNzYxQkQyMzhBQTY3N0VCQzAxNzI0RkIxRTNDNzEKKzoxMDkxRDAwMDEwRDlEQzVEOTkxRDZGQjU5QzZDOTI5MDk3REFBMkZBNUMKKzoxMDkxRTAwMDgzRTQ1RjQ5MzU0OUVDNTk2Njg1NzVGNERCMEM1NDI1RjkKKzoxMDkxRjAwMDVBOTY5NkUyM0MwQ0RENjJGREZDRkE4QThCNzY2Mjc5MjcKKzoxMDkyMDAwMDkzMjZFOTMyMkJGRkNCMzk3MzZGRkIwQzZCMzVGMEUxMDIKKzoxMDkyMTAwMENFOTc0RUMzN0FEM0M2NTVCNTkyQkMzNDI1QzQ0RjY5OTgKKzoxMDkyMjAwMDVDMzVFNTI4N0I1RTdDNzE1NjFGRTAzRjhCMUQ2NTY2RDMKKzoxMDkyMzAwMDA3N0NCNkU5MTIyRUZGQzVGN0NGMjdEREU1NEIxQTJGQzUKKzoxMDkyNDAwMDcxQjVCRjM0RTFGRTlFOUQwRkYwN0RDN0I5RENGRjMwRTQKKzoxMDkyNTAwMDUwOTVGQTJGMEVEN0M3MkEyREVFNUZBMEY5RUE1NjU0ODMKKzoxMDkyNjAwMEVGNjZGMzVDRkZFMUI1NTQ1RURGNTJBQkI3QjJGMkU3RjUKKzoxMDkyNzAwMEFFRjRCNzJDNjVDRkIwMDRCQUNDOTY1MjcxNUNBNUY5QTgKKzoxMDkyODAwMDAyOUJBRjVBQzc3NjhGRTczQ0RCMzVEQkM4QkZGRjJBQUUKKzoxMDkyOTAwMDM2M0RGMzhDNUY5Qzg1OTNDREIzRTlFQURDNzBBQkZBODUKKzoxMDkyQTAwMEZCMTNERTYwRjZEMkMwQ0VBMDg5RjA4NEY3Q0FFOUEwMzUKKzoxMDkyQjAwMDQ0NzRERDM5MDlFOTYyMTUyNzM5N0Q0MEFBNjZDRjIzNTgKKzoxMDkyQzAwMDhEM0FBMDdGQTRBMTMxNjlDOEFDQkMzMUE2QzUwMzA2MDQKKzoxMDkyRDAwMERBQzkxOTBERjExRTQxMUFDQzY1RUZFM0JFMjBEQTYzM0QKKzoxMDkyRTAwMEFBRkUwN0VBNUYxN0RGN0JFMjU1RTNEMTNGRjJFM0U2MzAKKzoxMDkyRjAwMDM1MTMxNUI2REU3NzM0NUJGNDdDQjRCOThCOUVEQjlCRkIKKzoxMDkzMDAwMDdCMjYyQUNDODhERkQyN0MxNzNERURGOUExMjQzMUVDRjUKKzoxMDkzMTAwMEY5QzlCOEFGMzY1QjkxREYwNkZDQ0MzNDQyM0NDRUY3REUKKzoxMDkzMjAwMEQxRkU3NjAzQ0ExMTNGQ0FFMTc0NUIxNERGRDdDMUI0MjIKKzoxMDkzMzAwMDZFNDBCOUM0RTVDQkM2RjhCNkRERjg3RTYzM0Q0QzQzNUMKKzoxMDkzNDAwMDkyNkQzNDM3Qjc0NUQ5M0NBRTJCODdFOUQ4RjdDRTk3MjUKKzoxMDkzNTAwMDFGRTNERjJCNjA3QTgwOTU3NzM1MzY5MDVDRUQ4OUZCRDMKKzoxMDkzNjAwMEQyODE0QTgyRkY3Q0U0RTc5RTQ2MUYzMDkzMDc4QUVCNTYKKzoxMDkzNzAwMDE4NUMwRUJDMDY2MkVFRjJBRTQ2MjZCMDY2MTIzRUQyMTUKKzoxMDkzODAwMDAxMjkzQjdGODUyRDMzQzRDNzQ2QjMyQUU4REM1N0NGN0MKKzoxMDkzOTAwMERBRTc2RTdGNjZEQTVEREU4OEVEODdGMTRCQ0RFRDczM0YKKzoxMDkzQTAwMEQ3OUZGMzkyQkJDQzI0REIyQjgzN0NDMEYxRjhBRjNFN0MKKzoxMDkzQjAwMDI2MEY3NkJGM0NERTY3RTFCQzREM0U0RkY2RTRGRUMyQjEKKzoxMDkzQzAwMDk4MkY4REM2RTcxNjgxM0YxQkJGMDMxMTJFNUYzNjM2REYKKzoxMDkzRDAwMDczM0Y2MDNFNzgzNjdFRUFBQUQ4NzA3RTAzQjVCMTIzMkIKKzoxMDkzRTAwMDgxRkU1NEI1QjEyNzAxNjdFMTMzMkQ5RUJEMDlBNzlGQ0EKKzoxMDkzRjAwMEQ1N0VCRTg4QzY4RkMzNUZEMjExREI1OEIyQjQzNjBCQTAKKzoxMDk0MDAwMDhGQjdGRTc4NTkyNTc5Mzc1MEM2QkY3N0M0NUVEMzk3OUEKKzoxMDk0MTAwMEQ2M0FGQjkzQkNERkI1Q0JDM0NFRUZEQ0FGMzI1MDZFOTgKKzoxMDk0MjAwMDdGM0ZBMjJEMERFNzY4M0Y4OTdEQ0Y0MTk3QTUzMkZGOTEKKzoxMDk0MzAwMEZFRjRDQjgxODYzQjkwMUYwNTdFNzdCRkZDMTNBRDFBRUYKKzoxMDk0NDAwMEYxRkRCQzBDQzg2NzFCRjczNTkwQkM0NTNFNDM3OUIxQjQKKzoxMDk0NTAwMDhCRjE0NTVGMkREMjdGRkQyQkNFNzU1QjVDRTcyRTMzMDQKKzoxMDk0NjAwMEJFRTJGQ0M1RkFDNUExN0U4NkY0NjAxREZFQkJGMENCNTIKKzoxMDk0NzAwMEVFMTU3RUQ5M0RDRDMxN0EzRURENkNEMDczNTc3MzBEM0MKKzoxMDk0ODAwMDdEQ0YzNEM3QTlGQzU0NzMxRDk1OUY2ODM2QTlGQ0UzQjIKKzoxMDk0OTAwMEU2NDYyQUVGNjg0RTUwRjlEMUU2MjY3QTZFNkY0RUQyMzQKKzoxMDk0QTAwMDczNEJGMzE1RjQ2NEZDNEJGQ0JDQTEzOTI1RkNDMDZCNzkKKzoxMDk0QjAwMDVDRkNGMEY3RjE4MDhCRkYzRTVERTMyRTlGNkY5QzkxOEIKKzoxMDk0QzAwMDVERDdFQ0VGMjc2M0VFRjI3OUZBMjc1REU1MDU5QUJCRUQKKzoxMDk0RDAwMDNDMUZCRUUyRUFFRkRDMEZCRUVDMkFDRkVCRUY3MEQ1MEIKKzoxMDk0RTAwMDNGRkI0RDc3Nzk2RURGNDM5RUY1RTIyRUNGREFCN0M3QUIKKzoxMDk0RjAwMEIzMUVEREU1RTJCQTQzQUVGRTAyMzE3N0Y5N0UxNDMyRTcKKzoxMDk1MDAwMDVDNEUxMTdGNzRDNDVBNEI3MkYyQ0ZFMEY3OERBMTJGREQKKzoxMDk1MTAwMEI5QkVDQkQ0N0U2NEZFNTlENjU1ODlGQzkzRjZDNTJERDEKKzoxMDk1MjAwMDk0M0IyNkU3Mjc1QkVFNzhGOUM0QTZEQjQ4RkM2NUMzQ0QKKzoxMDk1MzAwMEYxOTdFNkFCRkZFNUE3RTFGOUE5NjA3RUE4NTc3MkYyQzMKKzoxMDk1NDAwMDgzOTdFRTVFRkUxODIyNjcwNEJGRkMyRjFGRkM2REYwQjAKKzoxMDk1NTAwMDAxQ0M2NEM0MkVDRkFGNTc3M0Q4Nzc2NDlGMDYxMjQwRjYKKzoxMDk1NjAwMEY2OUQxRkVEMzQ0NzdCNzU3MjJBNjlFNkQwOUY1N0Y5NDcKKzoxMDk1NzAwMEU2NkY5NTU5M0Y4MTUyRThDMDc4Njg0MEM5RTNFNzk1QTYKKzoxMDk1ODAwMEY5M0UyNUEwRjFFRkMxNkE5M0VDQjI2MjMwQTZDQjYzM0QKKzoxMDk1OTAwMDAwQUU3OTZDNUVGOTMyRjZGRUU3NDIxRjc2NUMwODk2MDMKKzoxMDk1QTAwMEM0RkExQjM3NDE0REUyM0VBNkI4REFCRERGN0I0NkU2ODIKKzoxMDk1QjAwMEZCMThGQkI5RTk4NzkxMjZGQzBFQTUzMzQ3OTgzNzhGMzYKKzoxMDk1QzAwMEQ3QzgxMzY3MzdGREM2NjBDRjBCNjY2RjU5Q0JERTg2RjEKKzoxMDk1RDAwMEFBOTMxOUYyMDE5NTk2OTI3RDlBMEMxOUQ0QUY1OTk3RDYKKzoxMDk1RTAwMEI2N0NBNTE4NDc4MzM4REE4OTcyRDg4NDI0MUI2N0FFMDUKKzoxMDk1RjAwMENGRkMwNUNFOUJEOTQ3RkYyMUNGQ0FEQTNEOUJDNEYzRjAKKzoxMDk2MDAwMDQ3NjIxRDVFRTQzMzdGMjlFQTNEM0Y1QzNEN0JEQzExMTAKKzoxMDk2MTAwMEU5MDU0OTRCRTJGRUE5Rjg4MzBDNDQ3RjY5REM2NTNGMEMKKzoxMDk2MjAwMEQ5RjM1Mzk0ODQ5OUM4NjE2RkZDNEVFMDRCRDJFMzRENUIKKzoxMDk2MzAwMERDMEZBMjAyQ0E4NzdDRjUwRkNBQjZGRkM5NzJFRDA3MUMKKzoxMDk2NDAwMDhCQTEzRjIzMjMxQzMxMUU2RjgyNjMxNzE5MTc0RTFERjgKKzoxMDk2NTAwMDBBODdBQTI0OTIzODBFQzZBQjM3QjM3MURBQzc3Q0M2MjQKKzoxMDk2NjAwMDQ4M0FDNkY5NDhFNjdFMkEyOTY2MTIzQ0FBQ0VFMTUxNUMKKzoxMDk2NzAwMDk1Qjg5OUM4QzE0NzAzMDIxRUJCMUYzQjZFMjZDNUZBQTkKKzoxMDk2ODAwMEExMkY5Qzg1NkY2RDMwRDE4NEZCMjU2QjhDNEE3ODZBNDUKKzoxMDk2OTAwMDhGQjhFREFGMTkwQUVGQTc1QTNDREJGREI5RUQ0MzgwNTcKKzoxMDk2QTAwMDU2QkUxRjFFNTdBNzYxRkY2RDc1MEQxQURBRDc4QzFEQTgKKzoxMDk2QjAwMDY4QkZEMjFFNUU1MjNDOUNCREJENUVEOEJGREQyODBGODgKKzoxMDk2QzAwMDAzMTgwRkQ3ODVCQzhBRDFCMzNEQkNBRDExRDdDMUQxMkEKKzoxMDk2RDAwMDVBODY4N0NBRkNGRDQ0RTJFRUI4NkU1MTREQzgxM0M3RTYKKzoxMDk2RTAwMDREMTM5QzQxQTNDNDEzRUY5REUwNkFFNzFGQTdGOEVDNUMKKzoxMDk2RjAwMEI4MzY0ODIzQzNERjIxRTBCN0VCNzUyQTI5NERDRjg5NUYKKzoxMDk3MDAwMDI3M0VCRTVEMEVDNERDRjBGRUY5RjBDN0RCMTdGOTdCMjcKKzoxMDk3MTAwMEY1NUM3MDlEMkFCQ0U1OEJDM0RBNEY3NUFDOUE0QTczMzEKKzoxMDk3MjAwMDdGNEFDQ0I5MEUzRTJCRjg0QjFEQUJBNTQ4M0U2OUY5REMKKzoxMDk3MzAwMEJFODc3OEZCNzA4MkZDNUI1QTM4NjE0MDU1MzYxRUFCQTEKKzoxMDk3NDAwMEUxN0E3MEUwRTk1QUQxRUVENzhBNEZBQ0NCNTQwQ0ZERTgKKzoxMDk3NTAwMDVDOTI5MTZBNDI3RUQyMkFEODNBOTI4NkI2QjM5RjQ5RTkKKzoxMDk3NjAwMEQxQkVGM0MzRkZGNzEyQUQ5MzMyOERENjg5NjRCMDc1QzUKKzoxMDk3NzAwMDk0NjMxQzQ5MzFBRjU2RDhGMzFERDlCQzQ2QzFGOENDMEYKKzoxMDk3ODAwMDQ3NzIzMkQ3N0E1OTIxRTBEMTE2MjcwQ0FEOEE0Mjc4MzgKKzoxMDk3OTAwMDNDREZDMzAzQzczQTg1RUI4MzQzMzZGQzU2OEFGQzU2NEQKKzoxMDk3QTAwMDg1QzJCRkE2NDBGOEVENzExOEZDRUQwMkZFQjVDM0MxM0QKKzoxMDk3QjAwMERGMjZFMDI5MDFBMzg1N0M5OTA2OTdCMzAwMTcxQUNFMEUKKzoxMDk3QzAwMEJDOEIzN0M0RjgyNTQyNEUzMTRDMTFEREVDRUZGRjI1NDAKKzoxMDk3RDAwMEZBMjk3NDNFMUIwNTlDMjNDREU3OEQyQzNERUVDNTc5RkYKKzoxMDk3RTAwMEIwRjlEQzg3RjNDQTM3OUY3QjA0MUM2RjI4NUNDRjY4MTUKKzoxMDk3RjAwMDg5ODQxMUFCMjI1NTlGOTNBRjlFMTA3MEY0MkIyMjhFNUIKKzoxMDk4MDAwMDY2NUQzQjJBQkVGQUQ3MDJFN0YxNDQ5NjJFOEYwOUJBNkQKKzoxMDk4MTAwMEVDMTg2RTFFOEY4QTc5RjRDODMwRjcwREY0MzM5RTJFNDMKKzoxMDk4MjAwMEY0MEUyQzcxRDFFNUE4QzA0RjRGQzBBNkNCNzUyRUJBNEYKKzoxMDk4MzAwMEZDNEVDQ0FCRDBGOTNDNTMyMDlGMURDREQyRTUzOTMxNDUKKzoxMDk4NDAwMDlGRkRDM0NEQzc1MUZGNDU1MUZGMjU1MTlGRkNFNzQ3MDEKKzoxMDk4NTAwMDk1MkI1QUFENUFGQzlFMzhBMENDQ0E4RUM3RUFCREVDRjcKKzoxMDk4NjAwMEFDNzc2REZCMkNCQkRFQUJDODBGNTIyM0Q3ODNBQ0RFQ0QKKzoxMDk4NzAwMDZCQ0U3QTYwNUREMDhBRjZEQjVBOEM4OTdFMDJFMDgxRkQKKzoxMDk4ODAwMEY2QUYzNjg4NzY2RjUyQkJDNTgzRkRCRjI1RDYwN0I1QzgKKzoxMDk4OTAwMDVCRDczRUJGRDUwQTUzQkQ3N0YwN0RDQjgyOEZFQzdBODQKKzoxMDk4QTAwMEVGQkFFMTVENjFDMzcxODRFMDREMENDMkYxQkVCM0RFN0QKKzoxMDk4QjAwMDEzQ0FFN0E5QkYyMTc5NDdCMTkyODJFQzFGN0Y2OTkyNTEKKzoxMDk4QzAwMEYyRjc0QTIwRDI4M0ZFQzUwRTI1NDVGRTY0MEMzNkEwNzEKKzoxMDk4RDAwMDFGNzI3NTIwNEVBOTJBMjNGOUEzQ0IyRUU2RUQ3NDQ1RkQKKzoxMDk4RTAwMDIzN0Y2QTAwNTI3MDE3N0JCRkExNTRBMUY4Qzg2MjI1N0MKKzoxMDk4RjAwMDE5RjFBMzFEMjEyNTJEMEFBRTgyN0U1OTBCRjYzRkQ2MDQKKzoxMDk5MDAwMEEwRkMyRjFCOUVEQjhBQkVEODQ1RkQzMDc4QjBERjNCMjQKKzoxMDk5MTAwMDhCQTIzQjkxQUYzNjRFNTIwREU0QUI5RDkzNkUyMEJGQjAKKzoxMDk5MjAwMEY5NkQyRDNDN0ZGMEI2RjM1NURBNjc2RDdBMzk0MkZBNUUKKzoxMDk5MzAwMDc3QUQxMkZGMkNENkI3NENENTQwM0ZGQUVBRDA0NzJGNkYKKzoxMDk5NDAwMDJENjdFNUJFOTY2MjVEM0E4N0U2NDE3MDVCM0U0OEI0OUUKKzoxMDk5NTAwMENENzRFNDIzMzJCODAzNzFDQUE3MjMzRkRDNkQ4RDNDN0MKKzoxMDk5NjAwMEFFQzM3RUNBQjFGREVBMDU0NkJDREI0MEYxQzVFNDE4RDIKKzoxMDk5NzAwMEZCREU1OUE3OTJGRDdBNUI0NUQ1N0MxQzZGNTM5RDQ2NTMKKzoxMDk5ODAwMEY2QzZBNkM1NTUyREU0QzdBQjBCOTFCRkIyMjQ2QzQ4RjMKKzoxMDk5OTAwMEU4Njc4RkNFNTE5OTAxQ0VDQUE1NDYwQkRBOUI5MUQ5QzMKKzoxMDk5QTAwMDIxNDBCRjUzNDkwNTFGMkY3MjA2OTAxRkNBMEYzRDg5RTIKKzoxMDk5QjAwMDZBRjY4Qzc2QTk5MDE5OEJGRDJEQzk3QzA5RUQ5OUJBQjAKKzoxMDk5QzAwMDAwRjlFMUQ5QzRGNkQ3OEVBMzk0MzdGRTIzRkYwQzEwMUIKKzoxMDk5RDAwMDFFRkY0NDE5MTBFRjM2N0RBMzNEODNFRDg3Q0Q2MzhDQzgKKzoxMDk5RTAwMEE2MEJBQzk3MjlBQzVFQTQ0QjgxQ0M4QzAyRUFGNTE0OTMKKzoxMDk5RjAwMDU4MkY1RDYwQkQwQ0FGMTc4MDBCODdDREU3ODMzOENGNDQKKzoxMDlBMDAwMDIzRDREODFGOUVDN0U4QzgyQkFDRTRGNkJCRDM2RUYxQjUKKzoxMDlBMTAwMDdCQkU4RjM2MkZGNDJBQkZDODBCOUQwMzczNzg1RUU4OTgKKzoxMDlBMjAwMEYwRURFRDdDRDA5MUU2MEJFMENCQzIyOThGNUM3RjZEMzEKKzoxMDlBMzAwMEYzRjA3RTYzRkZCODFCNjI5ODdGRDk1OUY2NTVGMUJDRUQKKzoxMDlBNDAwMDkxM0ZDQkM1RkJGMjM1MzE5NDc3OURFNUUyN0JGOThERjMKKzoxMDlBNTAwMDREQjlGNkFGNzdGQUI5MUNBRTgxQzRCMDc0MjgxMUYwRDUKKzoxMDlBNjAwMDFGNjJCMDYzN0U0RjhEQzJFQTQ3RjJENzU3NEI3REMzNkEKKzoxMDlBNzAwMEU2NTk2QThBRDU0MEVCNzZCMThGRDY2RDAwODUwMUFFODYKKzoxMDlBODAwMDlCMEFCRThFRkQ5MDRBNTRGMzc4NTVCNERDQjE3RUZDM0YKKzoxMDlBOTAwMEY1N0I2OEZERkNBMjVDMDZBOThFRTgxMzQ3M0M3QUY5QzkKKzoxMDlBQTAwMEM0Q0IxNzAxNzA5NDJCNEY5RTRGQjZGRTk5RjhDNERGQkMKKzoxMDlBQjAwMDI1MTdCNDdFRkMzRDA1RDY0QjE3NTgyRjUzNTgzREI1OUUKKzoxMDlBQzAwMDRCMkE0OEFFQTgzRDA1RDY0QjE3NTgyRkMzRUJBRDlEOEEKKzoxMDlBRDAwMEFCNzI3RDBFN0Y2OEM1NzhCRkZGMTM5QUFCQkNGNjEzREYKKzoxMDlBRTAwMDIxRjdGN0IzQzNBRTcyQzcyQzc3N0I3NUI2QkI3REM3QzIKKzoxMDlBRjAwMDZDNzc3Qjc1MEU2RjFGRUM4MDA1MThDRjJGNzQ5RDFDNDMKKzoxMDlCMDAwMDNDQzE3NTUyQTMwRDVGM0Y1MjM3QzJCQUQyRjQyMEI2QTIKKzoxMDlCMTAwMDJGNTEwQ0M4OTQ5MkJFNEEwQkJEOTUzMzFFN0U5QUNBMzMKKzoxMDlCMjAwMEQ3N0Y5NTlGQzdDRjZGNTNGNDIwRUUyM0ZGRDZFNzI5NDkKKzoxMDlCMzAwMEE5M0M5RkMwOUVFRjQ4RjBEQUYyRjdCN0IyQjBCN0YyOTcKKzoxMDlCNDAwMEU0N0Q0MzhDOUY3RkYwNDMyODhFNzY4RUIxNTA2Qjc4RjYKKzoxMDlCNTAwMDg1RTFEMUZGMkNDRjdCRjdGNkZCOEE5QTlDQTYzQUY2REIKKzoxMDlCNjAwMEM1Q0MzRTgzQTRDMzBGNzM3RTk5QzJGMzZEMTgxREQwN0MKKzoxMDlCNzAwMDFFNTIyMUQxNThDOUZBNkJBQkYwOTEzREEyODQ0N0QwNTcKKzoxMDlCODAwMDFCMTUwRUI5OTUyMzJGMkZFQjk3MDIxM0NGNTNEMDI3MTgKKzoxMDlCOTAwMDAzNjBGRTlCN0NEQzUwMUMwOEVFMDhGNEQxNjZCQTE4MEEKKzoxMDlCQTAwMDUzRTU0RTA3MTgwMzg2QzQ5M0JFRTIxMkNGMTNBQ0Q3MTkKKzoxMDlCQjAwMDUxOUU5NTA2NEY3NUJGOTc1MUJGOTI3OTFCMUMyRjFBNjYKKzoxMDlCQzAwMDQ1QkY0QTFGRTVDQjlDRjI3RTQ3ODAzNzA4Nzc1M0JGREQKKzoxMDlCRDAwMDZDOTc1NDdBN0M2Q0I2NUY3RjJDNDUyRjMxNEY1Njc2NEMKKzoxMDlCRTAwMEU0Q0JFMUI5MDhDQTM3RjFDNTMzOTRERjMwMjE0QUZCMzEKKzoxMDlCRjAwMEIyQjVBNUQ3QjlGMkMxRkY1OUFENzJGOTg3NTRCREUzMkIKKzoxMDlDMDAwMDVBMDlFM0JBMTU1NzlCN0RDM0YwNzkzMzEzNTdFNEY3MkMKKzoxMDlDMTAwMEFDNTg2RUY2RDVFNEFGMzc5OEE3OEZGOTlFMzlENjQxODgKKzoxMDlDMjAwMDg3OUE0Q0EzRkQ2RTREMEVGM0ZEQkM5MjIyN0Y2M0E3NzUKKzoxMDlDMzAwMDU0MzIxREYzMkRFQzdBNEEwNTkzQjQwQ0FFQzg0Q0QzQzQKKzoxMDlDNDAwMEMyRkQ1RUU3NTg1RjFDRUQ1NDA1RDZFRjkzQ0U2MkVEODIKKzoxMDlDNTAwMEU0QzU3MUE3RkZEMkZCNTQyQTk0Qjc5REYzQjk1RDY1QTMKKzoxMDlDNjAwMDdBMTJFMTE0N0FCMjZEMDQ3RTFGRDFFRTUxRTNDOTVDMjEKKzoxMDlDNzAwMDdFRDE2RkFCN0M1RkVCMEZFNUZFREUxNzZBNzg0MDlEMEYKKzoxMDlDODAwMDM1MTQ2RjhGMjE3RTcxN0YzQjA2QkFBNEZGQzNEOTg3M0QKKzoxMDlDOTAwMEYyQTUyQUY2QkM4NDc4NTg1QkI2MjgzNkRDN0NEOTA2NTcKKzoxMDlDQTAwMEVBRjAyMDVEMTg4OTdGMTYzMjFGNDE3OTMwMEMxQzNGODUKKzoxMDlDQjAwMENDMDUwNzg0MEJGMzdGRUIwQkUzQzQ4NzgzRjY1MjI5QjMKKzoxMDlDQzAwMDg4RkQ5ODE5OTUxOERGODcwNDU3REUzMjczNzMwNkNGMjUKKzoxMDlDRDAwMDQzRjg5Nzg2NERBNDlGNkM2RTAxRjQ1N0RCNzY5MzZDMjYKKzoxMDlDRTAwMDg2NUVGNTExM0RFQkI5RkQ1NEMzRUQyMTkzRkRDMTc5QkQKKzoxMDlDRjAwMDQ0RUI4N0I3QUI2NTRGRjkzOUQ1NkQwRkI1MzVFRjAwM0MKKzoxMDlEMDAwMDY3OUU5QkY3NUM4NUZENEM4NzFBNUVDQzhEOEZDMkY2RjMKKzoxMDlEMTAwMEMzQjczMzdFQzEzQ0ZCOERDRDFBMjIwNTdBOUE3NTJBRDIKKzoxMDlEMjAwMDZGNjg4RTUxNzk3REIzNDFDRkY2RTYxQTdBREU4QzREOUQKKzoxMDlEMzAwMEU3RTJGOUE3NTQ1NzI1QzM1QjU3RUM4MUQ4RTVBQ0NBRDUKKzoxMDlENDAwMEVEMjgzQjI4OEZFRkRFMDU2ODJGNzcwRjk2RDkzNjkwRTgKKzoxMDlENTAwMEMxREQzRDA5Nzg1RTlGN0FFQjAyRENFNzc3MDc0MUY4QzkKKzoxMDlENjAwMDE1REExNkEwNUQ5RDJEREZEMTM2MUZDQkMyQ0YxMEVBQ0MKKzoxMDlENzAwMEJDNkYwMUVFRjc2RjE3RjkwRkEwOThEQTI1MEVCRDc3Q0IKKzoxMDlEODAwMDVBQzA0RkZDNDc3QjU3NkE2RkI1NjE3RjQxNDU5NEUxRUMKKzoxMDlEOTAwMDkxMDVFRTMyOTgwODRGNTBFM0U1MDU4MTZERDQzRjg5NzcKKzoxMDlEQTAwMDAwMzZERUE3MDMzRkUwRTM0RDExRjk2REI1NEI0NkMwMjkKKzoxMDlEQjAwMDIzRjdFRjVCQUFDMUZENURCNTI1MTQzRjUyRTM3MTc0MzMKKzoxMDlEQzAwMEJGQzJFRDYzMDREQzA1RjYwMzRBOTJFQjNCNzE4RTJGQjQKKzoxMDlERDAwMEZGQkExOTQxQUYwOTM4NDZBMjNGNDMwN0Y5RDFFREYzNjUKKzoxMDlERTAwMDY5Q0EwQkI5RjVGNEE5MUVGNzc2RkZFOEYwQTJENkY1MUIKKzoxMDlERjAwMDVCNzg4NkVEMDkzNTM5MjdDMERBNDdDQ0RFNEMyNTJCNTgKKzoxMDlFMDAwMDQ3MTc2NzJDNUFCRTA1OEUzQjM2NjBFNzM5MjY2OUZEMzkKKzoxMDlFMTAwMERCNzg1Njc0NkU3N0FDRjBEMEQxNUZDQUUzNzU0MTcxRDAKKzoxMDlFMjAwMEZFQTQ1MDc4OTNBQTE4NDdGNDAzMEYzNzk0MEY2N0FGMzYKKzoxMDlFMzAwMDk1MjU3QzY4ODQwRENBOEJCMThEMjFFMTlDRTFFNTMxQ0IKKzoxMDlFNDAwMDY2ODlBQjVDNUMzN0MxNTUzRjEyQUY3MjdERjdFQjFGODMKKzoxMDlFNTAwMDc3N0QzRjUxM0E1REUyOTlDN0E3ODRERDY4OTdDRkY1REEKKzoxMDlFNjAwMENFQjNDMDdFMEYxNjI3NTYwNTcwREQzNDQwNEQ4QUUxMTMKKzoxMDlFNzAwMEY1Q0UyRjNDNDRGODBGMERBRUQzODVFRDY2MDVFNTgzOTYKKzoxMDlFODAwMDhCNzUzRDhGOTc3NUZCN0I1REJCNTlDRkNBODZGRDdEN0EKKzoxMDlFOTAwMDA2MkY5QkY2RjczOEFGNkZEOURGQTdGMkVGMjhGNzU5RjcKKzoxMDlFQTAwMEY5NkI5RDY3QjQ1QkY4MUQ1QUM5NkYwQjE1Mjk1OEUyMTEKKzoxMDlFQjAwMEEwQ0ZEOEYxMERBRDA4REZGOENCRDIzMThCQkRFRkZFQ0UKKzoxMDlFQzAwMDUwRTZGMjAwN0E2MkNFN0E3NzZBREMwRkZEQ0M5NDNCRTIKKzoxMDlFRDAwMDYyRThBRjVDNzdFNjQzMzEyMDc5MjdFNThDMDdGRTNDRUEKKzoxMDlFRTAwMEMwRjNDNUNBNDI4OTlFMDBBRDc3QjNCRjk4RjFFMUExMjYKKzoxMDlFRjAwMDg3NjQ4M0VCMjFFNTM1RDQ4NzNFOEJFN0UzQUIxMERGNDYKKzoxMDlGMDAwMDY3QTI1RDU0QzNGREQ1MjFGMTlERTg1ODk5QUQzRjQ4NDYKKzoxMDlGMTAwMDU3NEZGOUVGMzRBRUQ3N0Y4NzQ5MUIwQ0NFRUYxNTlCMTcKKzoxMDlGMjAwMEY3RDBCODkwOTYxQUQ5N0FBRkIwQTAxRkNGMUY4MUIwRTIKKzoxMDlGMzAwMEZCMjZGMkE2NTA5QTQ4OTM5RjZGMTJDM0E3Q0NCRTRGNDAKKzoxMDlGNDAwMEJFQjhCRkM1Q0Y3MDZENUNBNkZCNzA4OTU0MkQ4RkZCNkEKKzoxMDlGNTAwMDQ4QzAwRERBOTE2M0E1RTNFQ0Y5M0RBNDE3Q0FFMzlCNzEKKzoxMDlGNjAwMDUyODBGQTdCRUQ5OTBGMzUyMTVFMDI5OTdGMDI4M0UxRTEKKzoxMDlGNzAwMEVEMUYyN0E1QzA0MEZGNkY4MEMzMTVCOEFDMDc0ODNFNTIKKzoxMDlGODAwMDU3RjcxMDlFQkRGODVBMzc4OEY3QjQwQkVGM0YwOTcwQUEKKzoxMDlGOTAwMDdGN0UyQ0M5REIwREQ2NTM1OEJEQTk0M0VCNzUwNzdCREIKKzoxMDlGQTAwMEU2QUI2OEJGNERFMTc4RjQ4RUYzNUU0MDEyRTc3NkRERjQKKzoxMDlGQjAwMDcwRDhGRDdBRUJERjEyMTA3MTZEMkQ0REYxOEQ2N0NFRUIKKzoxMDlGQzAwMEJDMjE4NjdFRURDRTI5OENGRUI1RjlFOTdGNEI4MEU3N0EKKzoxMDlGRDAwMDVCMTlDNzZFMjJCOURCM0Q2OTIzQzUzM0Q3NTU2RjI2QTAKKzoxMDlGRTAwMDdCRjIyOEIzMjNGMEZDNzQ3NzY1RUVGNjlEQ0QzQzNGMDEKKzoxMDlGRjAwMEU2NUNCOEJCQjE4QUQxQTdGMzc5OTlGQ0I0REU3QURGMEQKKzoxMEEwMDAwMDA5NTRCOUUyOEQ1QTg1N0IzRkM4RjhBRjBGRTVFODQ4OUYKKzoxMEEwMTAwMEZDMjc0NzFFRTBFQjcyOTQ3Qzg3NjYyMTNGQ0Y1MEQ2MjkKKzoxMEEwMjAwMDhFRjY4MDVGOTRFRjBFMUM2RjEzRkE5RkU0N0ZGOUYyQjcKKzoxMEEwMzAwMDFFNzBFNjRCQkUyRkY4MjIxM0UwNzIyNjU4QzFGOUEzMUEKKzoxMEEwNDAwMERCNkY0OTRFRkFDNUQ4RkJGOThFNzZGOUU4OTY4RjFGN0IKKzoxMEEwNTAwMDFFMTdFQkUxN0QyNURFNDRDQTVGNDlFOUI5RTRCMzEyN0UKKzoxMEEwNjAwMEZCRjQyRjE3M0FDRTdCQjUyQjY5NEQ0N0Y4NkIzNjRBNzgKKzoxMEEwNzAwMDRFQkJGNjFCNjYzMkE0MzlGNjI3QTFEODA1QkY1Qzg4MTMKKzoxMEEwODAwMEZCMUYyNTlFNzM5RkZFMjlEMzhDNkE2Q0ZDOUI5QjYxRjIKKzoxMEEwOTAwMDQ2MzU5RTRCNTBBQzAwRDZCQjU5QzkzNEQyQkVBMkRBNkQKKzoxMEEwQTAwMDQ3RkVGMjc1MTVEN0VEQzUzQzJCQUJENjE3Qzc2QTZEQzkKKzoxMEEwQjAwMDE1QkIxQUFCMENFNDk3NkQ5NDY3RkFBNkJFMjQ4NkZEMTcKKzoxMEEwQzAwMDA0NjJFQThDRUFCMTk0REY5REMwNzk4NzZCNTlCRjBFQjgKKzoxMEEwRDAwMDdBREJFM0RFMkRGOEY2NUJCQTM5NTlFM0YyRTAzNEVERDIKKzoxMEEwRTAwMDJGMjAwRkRFODc3ODhDMUI1OTBDQ0YzOUY2NTc0M0YxQTAKKzoxMEEwRjAwMENDRjMwNDNBMkI4NkUwNzk4RUU2RTBFQjAwRTI3OTA2QjkKKzoxMEExMDAwMEM5RkI5Q0ZFMEI4NkU3QjM1RDc4MDY4NkU3QTk1OTNDNDAKKzoxMEExMTAwMDc3NTc3MDNDNzdENjZDRUVBQTcyRTJCOTY2RDdERTRBMDIKKzoxMEExMjAwMDAzQzdFNzc4N0U0OEUzRTc3MzQzODg2NzA3OUM1RTNDOTQKKzoxMEExMzAwMDg3MjU1QkZGN0NBQzFERjlENkNCRjcwQ0VGN0Y4RkYwNEEKKzoxMEExNDAwMEQ4RUYzRjBBRkM4MkVDRTFCMUUzMTMxNzZBRTQzRjQ5MjAKKzoxMEExNTAwMEQxRkVFOTRFMjlBRjVFQkE0NDJCNDAyRjc1OEE3NTc0NDMKKzoxMEExNjAwMEE3QzAzRkVCRkYwQkQ0N0ZBOUU4REZENkI3NDIxRkZFQTUKKzoxMEExNzAwMDgzRjY2RjBCNTAxRkIyN0FDQkE4OUU5RUEyN0RGMDYwMzMKKzoxMEExODAwMDNEMEI4NkQ1QTNBQ0REOTVDNDQ3NjE0RkZGMjY4QzRBQjUKKzoxMEExOTAwMDFGQjM3RUFFQTM3RTM0Q0ZGODA2OUM5NDlFNjdGRERFOEYKKzoxMEExQTAwMDQ0RkQyQTlFN0U0RkIxM0RDMUM2RTkyNkZDODEwNzBGQzIKKzoxMEExQjAwMDdGNjYzQjI2OTZGNEYwODNEMkUzOTI3QjM2M0Y5NDJGNjIKKzoxMEExQzAwMDc3RDdDQkFGRDc3QUI4NUUxQjZBRDcxMERGRkVCQzczRTgKKzoxMEExRDAwMENGNkVEQzI3QkRBOTlCREY0NkJDOEU3NjFERDg3NjYwOEUKKzoxMEExRTAwMDU5MjhCOTRERTM3NjIwOUQ4M0IwQkU1MTk0NkU2MzZEQkUKKzoxMEExRjAwMDk1RTMzRDUxMUU3Rjc3RUJBM0YxQjYzRDU0Q0RGNTQwN0QKKzoxMEEyMDAwMDcwOTQ3QTY5OUZCMEQ3M0FDNjMwMTk1NUNDOUVGRTQ0RjcKKzoxMEEyMTAwMDUzMkUzRkMzMzM5QTlEQjdFNkI2OUI3RjgzNzMyNDNGOEIKKzoxMEEyMjAwMDUxODJGQzZCRURCMUNGRUNFODYzQjQzMzFCN0IyMDk3MUMKKzoxMEEyMzAwMDlDNEY4NjkyM0ZDN0Y5QTlCQTY1OTI3QTE1RkU5MTdDMjgKKzoxMEEyNDAwMEZEOTYyNkFDOUQ3QjY3OTJEQ0VEQzdCQzQ2MTA3MjE4NkMKKzoxMEEyNTAwMDRENkJGNEM3NDUxOURFMEU2OUU0QzI4OEEzN0ZBREVDRUYKKzoxMEEyNjAwMDYyNkIzRUNBQjEwQUM2MkY1ODdGNUNEMzNFMjk5OTJCMzgKKzoxMEEyNzAwMDNFNkVFRjdGMTA4ODFDRkI5NzcxOUY5QjlEQTQ3Q0I4NUUKKzoxMEEyODAwMEM1MzM0N0Q4REZCNEQ4RjZFQjZGNzE1RTg3RDQ5RTBCMjkKKzoxMEEyOTAwMEE2MzhGMDZFRDNFOTBFMjk3MUUxNzkyODRGRTc3MTNBQkIKKzoxMEEyQTAwMDE1OEY5MjRFMDM4MjRFQjA5OEU3QTE5RTdCRUM1QzhEOTkKKzoxMEEyQjAwMEZDOEIxMTVGMDJGREYwNDE3RjhGNUVFMkUwQTM3MTNFRjcKKzoxMEEyQzAwMDQ4RjY4RTAyRkU3QUU4REY3RDFDRjc3RjYxMUZFRDc3OEUKKzoxMEEyRDAwMEJCQzNDQkJFODNGN0VGNThCQTFBOUY2MjY0QzdFRDY2NjMKKzoxMEEyRTAwMEZBQkVDNEExN0ZCQ0ZFQUFDMTdERjRFMkMyRjI2NUE3OUEKKzoxMEEyRjAwMDU4NzMyOERFOUZCRDNGQzg5RDdGQzAxOEFCMDZGMzg2MEMKKzoxMEEzMDAwMDU2Q0JEQzdGN0U2N0QxRDcyODBGNjE4RDE1RDAwM0E1OTIKKzoxMEEzMTAwMEE0QzdDOEZFNUIyN0YyRDkzQTQ1M0VEQjVBOTFDRkU2ODcKKzoxMEEzMjAwMEI3NTY2RkM1RkE5QjAwMTJFODk3NkM5OTk3QTI3ODdGOTEKKzoxMEEzMzAwMDU0RDFGNEQ2MzhDMjkxOUE4MzdBMjI1QTZBQUZDRjFGODkKKzoxMEEzNDAwMDJGQzRGNTM5NThCNkJFRDFERUMwRTYxQjhERDlFNThERDgKKzoxMEEzNTAwMDY0QkZCNUI3NzA3OUYzRDlFMDBCMEJBRDdBNjRDNTNFMzUKKzoxMEEzNjAwMEEyQzdBNkJBMjVDNTMwOEMzRjMyNUNFQkNFOUYwQjU1RjkKKzoxMEEzNzAwMDg3NUM2NUFEQTJDNDU1NTY0QjI3MEMxQkI3RjgxOUZBN0MKKzoxMEEzODAwMDg5NjZFMTdDRkEyMDhFNzBFNkM5MTc5RTEyRTQ3NkI2RTMKKzoxMEEzOTAwMDJDNEZFQkNGNjBCRUMxRDk2QTdDQjM4MUU3QThERDc5RDEKKzoxMEEzQTAwMDlDRUQ0MTZFMEYzRThBMEUyMThBRTMwQUJFQThFMzcxM0UKKzoxMEEzQjAwMEQ1QTJCOTU1QkQxODA3ODIzMTlDMkYzMDRGRDBDOTBGOTcKKzoxMEEzQzAwMEY5RjhFMkFGOEQxRjVGRDFFMTE4RTY1RERDRDIxQTA1MjYKKzoxMEEzRDAwMENDNzNCOTY1RUVBRkUyMTkwM0U1NkE1RjBDRjMzM0RBQ0IKKzoxMEEzRTAwMDk4MjQ2OTY1REYzN0NDRkQ5NTkxQ0I5RjdDNDA0QjJFM0YKKzoxMEEzRjAwMDBGMjJGRUMyMDlCMkJGMjIzMzkzRjRGQzZCQ0Y2QjI0NTEKKzoxMEE0MDAwMDdBREUxOUU0N0E2RThBQTBBNzgyRjQ5Qzk5QTVFN0JBNEQKKzoxMEE0MTAwMDNBNDZDRjk5RDk3NUJFNEVFOUQxMEFBMUU3RjkzODdFRkYKKzoxMEE0MjAwMDE5Q0FBMUZGQTY3RERCQ0Q3NUJFNDY5NDQzMDZGNDUyNDIKKzoxMEE0MzAwMEZFRUQ4NjVBOUYwRkZCRkY2QkUxQzU4NjJCM0M5N0M5NEIKKzoxMEE0NDAwMDQ3QTI1MzI2ODE3QTYxNDM1Q0YxQTExQ0Y5OUJFM0MzQzcKKzoxMEE0NTAwMDhGRkFFODdEMDE3Q0Y4QzM1QzdDQjg1Q0QwNDMyRURBQ0YKKzoxMEE0NjAwMEQ3OTQyQkVGNkU0QTUwNzJFMTY1M0REMjhCRTNBNTkxRjQKKzoxMEE0NzAwMEUzQzVGNzU3QzFDQkEwQkVEMDkyMkI5MTZGQUU4OEE5OTAKKzoxMEE0ODAwMEI0RUY1NjRBQkEzQTI4NUVDNEY0MUVDNjFCNTZDOEE2OTQKKzoxMEE0OTAwMDgxRjEyNkY4OTY5RkRGQzc4NDdBREJBMTVGRkUxODBDNTYKKzoxMEE0QTAwMDcyRkI0NDVFQkY4OEUyMTg2QzZBQjgyRjYzRTU4RjBEQkIKKzoxMEE0QjAwMDFCMEY0REZCRkI5REY3OTQ3OEYzMzI1RTBCQkFFMzEwNTQKKzoxMEE0QzAwMDQ3MkE5NjE0MjNCREYyRjVGNzc2RjM1RTFEQ0ZENURBNTEKKzoxMEE0RDAwMEY5MTlERUVGMkI2NDQ4RTUzQUI3Mjg4NTM0NjE2N0Y2NTEKKzoxMEE0RTAwMEFBODQ4NzFCOTlBRTlEODZGOEY4RDg0MjNDOUZEOTU5MUIKKzoxMEE0RjAwMEQxM0E4RUVDMTg3MUFFNjFDNTk2Njc3NUM1MDFFNzBBNTEKKzoxMEE1MDAwMDg1QTlCRkU5NDNFNzYzRTM3NzA1QUFDOTEyNDdGQkY0Q0UKKzoxMEE1MTAwMDVFNTc3QjZGQkJDMUZFNDQ3QjY2QjdGOTQzMEMzRTUzNkQKKzoxMEE1MjAwMDQ5RURDNTc4QjM3RDdFNDNERDMyM0Y0MzZBMzMwRkRDQUUKKzoxMEE1MzAwMDhDOEUyNzA1NzdBMUU3Mzg4RTNDRDBENjgxRkI2REI0OTEKKzoxMEE1NDAwMEJGM0VDMUY4RTRCNzhGQzhGMTU2RjZGNThBQkJDRjU4QzUKKzoxMEE1NTAwMDg4RTc1QTBGMDFFNzE3OUIzRTZGM0REMDM2MkUxNzVGRjUKKzoxMEE1NjAwMEU0QTNDRjc5QTEyMDg3RTcxNEYzRDc1OTIxMEY3RkY1MTIKKzoxMEE1NzAwMDVFNTQ5QzgxNTNDRjVGOEJGM0YxOTdDMENGRTE1RThFMjkKKzoxMEE1ODAwMDBGQjg2QjZDNEUzQUU1OUJDRjIwOURFQzc2ODJDRkJDMkEKKzoxMEE1OTAwMEVERjNCNTYzN0M5NUUwN0M5NTg5OUU1RDA4NUYwOTc4NTUKKzoxMEE1QTAwMDZERkE5RDJDQkMyM0YxNTU2MDhENkNFMDc5QUU0QTI1ODcKKzoxMEE1QjAwMDQxNzJCM0IzRjQzQTRCRENFQjQ4Rjk5RTcyQ0ZCNDhDRTIKKzoxMEE1QzAwMEI4RDc0QUU0QjU0MzA2RUQ4OTQwQTk0OTc2NzQ0OERDMUEKKzoxMEE1RDAwMENGQTM1NUJCRTVBNjEyNzM5RjlCODgzNTI1MzI3NkJGNjYKKzoxMEE1RTAwMEU4QkYwQ0FDNTE2OURDQzFGODcxMTgzMkMxMjg5Njc5MEEKKzoxMEE1RjAwMDlDMTRDNTFGRUUyQjAyRjA0REYyN0JCMjc2MzlGRDlFMDYKKzoxMEE2MDAwMEY2NTMxMUY5NkE5OENCNEJGN0IyQzFFNzQ3Qzg2RjcxOUYKKzoxMEE2MTAwMDhGMTNCQjc4RjhGQzFBNkY3RDA4MkJDNjIxMDdERUYzNzkKKzoxMEE2MjAwMEI3NTNFMDkwNjM5RkIzNDFEQzJCNkFFM0RGRENCMjk0NjUKKzoxMEE2MzAwMEYyQ0E4M0UwOEJEM0ZFMjBENjYxRTFCRUFGNDNBQ0U3MjQKKzoxMEE2NDAwMDRFN0NDRUM1NzNCQ0QzNzVEQUFGNTVGMDc4OEIyNTdEQzMKKzoxMEE2NTAwMDk5RkMwQ0Y2QjkzMzdCM0NGQkJDOTk1RDZGMjRGQUFGRDcKKzoxMEE2NjAwMEM2RjU5NDYzN0RFRjBBNzE3RDNBRjBCNUQ0N0ZFMzNFODEKKzoxMEE2NzAwMEM0RkExMzE4NzgwRkM1RTNDRDFGNTA5Q0ZBOUNDQzVCMkQKKzoxMEE2ODAwMDMyRkFGNzlGMDk4REEzN0VDRUU5RUY5MzE3MzhENkU1MEUKKzoxMEE2OTAwMDM5RTIxQzA3NDBBRjlDRUI5Qzk3REYwQUVDNDI3RTc4QzYKKzoxMEE2QTAwMEVBMzBERjhGM0Q3NUY4MDhEOUUxNEZGRERFOTc0NkJFRjEKKzoxMEE2QjAwMDdCRUE4M0UxRjMxRTFFMTdGQjIyQkJERUUzQkZFN0Y2NTYKKzoxMEE2QzAwMEQ5RTM0QTZGNTEyRUZCMkUzQjdFOUFFRjA3MEZCQkY5NjEKKzoxMEE2RDAwMDE1OTQ1RTE5Rjk2NUUwQTY3RDMyRkEwNzFFNkZENkE0QkYKKzoxMEE2RTAwMEQ3OTlGQzk5MjdFNjc5Q0VFMTNFMTlGNzREMjNDRDZCM0EKKzoxMEE2RjAwMEFCODdCRUY2M0NCN0Q2NzM3Qjc0NkJGRDkxMTBGQUZGNDcKKzoxMEE3MDAwMEI3M0VDMUU3N0JCNDlFOUY4RkNEMDdFRkFFNjY5RURGNUQKKzoxMEE3MTAwMEIxRjU4OURDRjg2ODk4QzdGN0M3MEQ3RUEzMzRBNzVENEIKKzoxMEE3MjAwMEVCMzk2N0I1NDA5M0RERTdCQjRFMzE3Q0JCRUJCOURENjAKKzoxMEE3MzAwMEI1NUI4OTg3NEYwNDlFQkNFQkJCQUVBNzExREQwODUxMEEKKzoxMEE3NDAwMDQ4MzZDRTk3MDhCREZCNUQ3RTkyMDM1RjZGRjkzMkU2MTcKKzoxMEE3NTAwMDZCMkMwRDlCMTJFRTY1QTEyRkYzMjQ5QjU3ODlBOTI1MjUKKzoxMEE3NjAwMEYwREU5OEUyRkExRTY5MzJFNjc3QzQ3ODFFRjkzN0FGNTgKKzoxMEE3NzAwMDdFMkRGMzMyMkJERkRDNTQ0NDY1NUQzNzlFNUI4NEY4MUQKKzoxMEE3ODAwMDI4RDVDOTlGNzIzMzdBNUM0ODQwN0Y3MzJERTYyN0QwNjUKKzoxMEE3OTAwMDdBNjRFNUMwQ0QzREU3QTEzRjRCMDEyRTJGOThDNTZCRjQKKzoxMEE3QTAwMDI4RTNFODVFM0Y3MkQyRTQ5MzFCRUM0NzNBMUVDOEI2M0EKKzoxMEE3QjAwMENCM0I0RjRGREU2RDAwOTYwQzJGQzc5NkYzRkExNkZCN0UKKzoxMEE3QzAwMDgzNzJBOEM0OTM2N0EyMkY3NEU3QTU0NDNERkQ0RjQ1NEIKKzoxMEE3RDAwMDVCQjVBQzgwQkNGMjkzMUM2NzBDNkNEMzBDREM2N0Q3MDgKKzoxMEE3RTAwMEZBRjQzNEQ2MDc2MzBDRTYwRDg2MUI5OTgxQzRFODM5NjgKKzoxMEE3RjAwMDQ2MDcwOUNERTU5MUYwQkUwRUEwOTFGQkJGMzNFMDNDQ0EKKzoxMEE4MDAwMEE3RDM1MEM0RTVENTg0QUI2RTk3NzA5RjcxMzRDRUI4OTIKKzoxMEE4MTAwMDYyMUE5NkRGQ0M5OTdGRDUyRUU0Qzc2MDU5REY0NUYyRTYKKzoxMEE4MjAwMEI0MDM3QUY3NTI1QzIwRTkyMzNCRkNFNkRBRDYzMUNFNUEKKzoxMEE4MzAwMEY2NEI4QjI0REIxRjI4RTgwRjg2MzIzQjRCN0YzNjNGREQKKzoxMEE4NDAwMDMzNzhENjVGOEVGRUIxRTU2RUJDOEY5NjJFRDcxNDcxMkQKKzoxMEE4NTAwMDc5MzUxMkZENEY3NjFDOUI2RTQzRDc0NzhCQTBEQjAzRTcKKzoxMEE4NjAwMDE0MTdFREFFMTk1RUVFMEZBNURCMzZEMjc3RTFEQURDMTgKKzoxMEE4NzAwMEY5QkFENzE1NDkyRTc5NkMzRjM1NDg0MTlDRjE4OTJDOUUKKzoxMEE4ODAwMEVFNjc5NkM3Q0Y2RUJBN0YxOEY5MjMzQkVGNjc4NjZDRTkKKzoxMEE4OTAwMDNGRTM4QzFFMTNFMzU2RTNBMUM3QzQ3M0RGOENBN0UzMjkKKzoxMEE4QTAwMDE5NDBGRTM2MDFFRDI0NjYxRTExMUZDOTlFRkREQzQ2Q0YKKzoxMEE4QjAwMEMxNDc0MTc4OUVEQUIzNTU2MEU5QTQ1NzUyQTAzQkYyRjQKKzoxMEE4QzAwMDU0Q0U5M0MzNzFGNDVGQUNEM0MzNzQyRjEyQ0E0RjlFOUUKKzoxMEE4RDAwMEJGQzNGM0ZDOEIzOTQ4MENCRkZEODBGMjJENTQyRTgzOEYKKzoxMEE4RTAwMDg1N0VCRjdBMDFBRkM0RjgwRUYzRkIwRkJDNzUwMEY3OEQKKzoxMEE4RjAwMDJCRTE5OTZFM0EyOTA3OEEyOEFGMkRFNDNEMjc3MkUwQjMKKzoxMEE5MDAwMDlBNkI2ODdGRTNBMUUzNjhGM0ZFQkY1RjI0RUNGRjIyNEMKKzoxMEE5MTAwMDA4OTNERDI0REFFN0NCREZCM0VEN0UxQkJGQzZCMTA4QjkKKzoxMEE5MjAwMEU1RUQ3NDFDOTAwODFGNjU5MzEzRjdFM0ZFMEM3RTI1N0MKKzoxMEE5MzAwMDAzQ0ZDQjA0MTNGM0Y2NTZGRjc0MTY3RDFGMUE1NzQ4NDYKKzoxMEE5NDAwMDU0MjI1RERFM0E1MEE0Qjc1NjE2OTIyRjk5NDhCNkIwRkQKKzoxMEE5NTAwMEZBQzY4MTQwQkNENTIwRDVFMkQzOTA4RTdEMTJEMTUxNkMKKzoxMEE5NjAwMDFBQTc1MUJFRDZFQTdGRjdERjFGMTgyNjVGQ0I4RTNGQUUKKzoxMEE5NzAwMDBFOTYxNThCRTI5QjVEQzY3NENEMjk0RkNBNDJDOTVGMDYKKzoxMEE5ODAwMDE2MzlFM0Y2MjJBRUVCRjVBRjA3QzNFREIxNjc2MEY0MUQKKzoxMEE5OTAwMEYxOEZEMkYxMjBFMkYyOUY1Rjg0RjY0QjE3QUUwMTlFNTkKKzoxMEE5QTAwMDE3NDc3OTdBNURFNUJDRkM0NkQxOTQ0NTE4REZFOThBMDIKKzoxMEE5QjAwMEYwNzI3MUY4Qzg3OTJEMjQ2NzEzRTRGRjVCQzMxODBFOTkKKzoxMEE5QzAwMEYxMDg3QkZERTIxRTQ5NjNGQzg1QzNDODBCRUZGQ0Q3OTEKKzoxMEE5RDAwMDJCRkIyODRGRkU5RUYwRkVGM0NGNDBGQUM0N0RFNDhGQTAKKzoxMEE5RTAwMEJCRTdGQTZEQUVGQjkzREVENDFCREUyRkEyRjVBQUI3NTAKKzoxMEE5RjAwMDYzN0M3QTYyRDJDRUQ3NzRDNzQ1MjZBMEQ2NjBGMzlCMUIKKzoxMEFBMDAwMEM0MDhFMzY3NzgzOEVENjI2ODQ1QjZBOUJDQUNCNzFDRUEKKzoxMEFBMTAwMEY3Qzk2QjRCQjc4REUxRTdGRDE3RUE4N0M4NkU5NzI5MzkKKzoxMEFBMjAwMDNFOUQwRjVFQUY5RDlFNkZCRTc2QkNERERCRkVBRTA4MjkKKzoxMEFBMzAwMEJGNDdENTFCMTdGM0ZBODMxRTQ0RkM5NjUxRkUyQzYwQ0EKKzoxMEFBNDAwMEZFNkNBN0JGMkY2NzNDRUE4RDIyRUVENzZDQUY1ODk0RkYKKzoxMEFBNTAwMEI4MUNFN0E1OTg3MzBGMzI3Q0RDNUIxQUE1N0Q5MEZGQ0MKKzoxMEFBNjAwMEEyREE0QjdEMEU3QkMzQ0U2NzUzQzQ3RUNFNUY5QTIyQTMKKzoxMEFBNzAwMEI5QTg2ODY2RDcxOTE4MkY3QTVFQzYxNTA1MTUzRDNCMkIKKzoxMEFBODAwMDI1QjRFN0VERkIyMDEwQUQxNzRGRTVGM0M1NzkwNTgwNDAKKzoxMEFBOTAwMERCQzU3ODVFRTFCODYzREUxMDczRjhDMTUwOUU4OEZEQjcKKzoxMEFBQTAwMERCMjlBMEY3QjRGMEFDQTFGNDlEREZDNUYzRDA2MzU3NjgKKzoxMEFBQjAwMEYwRjM0RDEzOTVEQ0Y0MUU3Rjk5RUVFM0YxQUY1MzRCQTkKKzoxMEFBQzAwMEU3N0NFREYzQzUzREVGOEFBOEI0N0VBNkU4QUJGN0UyREMKKzoxMEFBRDAwMDNENzcxRDU2NzExMkUzMzEwM0ZFNTQxN0NBQUIwREZGQ0IKKzoxMEFBRTAwMEU4ODNDRDM0RkZEMUU5Mzc0NTRGRDAzRDdBMTUyOTdEMzQKKzoxMEFBRjAwMDNBMkVFRjdDRURFRTQ4RUQwQTEyOUUyRDlFQ0ZFMEZENDIKKzoxMEFCMDAwMDdFNzk5OEVCOUI5RTk0RUYzNkZDNkUzRTlEREFFOUM3MEEKKzoxMEFCMTAwMDdENjc4Q0VGQUJFRDdENzgzMjk0QkMzQ0VDQjBDRjc1QUIKKzoxMEFCMjAwMEQzMjIzRTlBOTJCQzk0RTRDMDQwNTk2MUY3MkYwQ0UyQzQKKzoxMEFCMzAwMDJCNEYxRUYzMUQxMUFFOTdBNzE4QUI3OUJGOTM4NkY3NjUKKzoxMEFCNDAwMENCREE3OEY5QTA0QjE2QkYxNzIxMTM0NDM4RkM4QzkxNEYKKzoxMEFCNTAwMDEzQjgyRTZFRTQ3MkUyRUUzNUJCRThCRDcyNjNERjdDQTMKKzoxMEFCNjAwMEZFQkRCRjA1RjVFQTFEM0VCODIyOTdERkE4MkRDMkUzNjIKKzoxMEFCNzAwMDQxOTNDRENDM0FENDFCOTM1MzNFNDBGQkY0RjY4ODQxMkQKKzoxMEFCODAwMEVGQzc1RkM2RjFENDM1MDlFMjM4RUM2OUQ4MUZGQkNGQjcKKzoxMEFCOTAwMDlFNEE5NUY0RDJEODUyQTBGQjkyQzZBRTAxRDJEQjYzOTYKKzoxMEFCQTAwMDZCMjA2REIwNzJEN0NFQjkzQkQxQkU1NUFCMjE4RUFFMDYKKzoxMEFCQjAwMEVCREQ5NTM3NTg2ODBGNkNBQTAwMTNGNUI4RkY0NkI2NjEKKzoxMEFCQzAwMEMwNTg3REQ1RjBBNTMxNTBCQzI5QjU4Q0VFNjk1OUNCNjQKKzoxMEFCRDAwMEQ2MjU1MjYzQUREMTQwRjZDM0QxMTgyRjA3MkFGODM5RDQKKzoxMEFCRTAwMDk4QUUzMzE1ODJDM0JFN0Y5Q0VDNEVBNjFGRkNCNUZEMEMKKzoxMEFCRjAwMDI2NUVGRDY1QzAxNUQ0OEY3RjJFQTdBQjcxNTczRDlEOTYKKzoxMEFDMDAwMDUzRUIxQUYzMTBERDRCNjM1RDAzM0NERTY5QzdBNTE1RkEKKzoxMEFDMTAwMEM2NUY2QzlDRjYyQkY0OUNGRTk1MjNBMUU0Qjc5REZDQ0IKKzoxMEFDMjAwMEMwRjg5MUU0NEMxN0U2MTNFNEMwNjc2Nzk4RTNGMzBFQUQKKzoxMEFDMzAwMDIxRTcwNkZDRjAyOThBOTdCNEY4RTgzRTE3NkZGRDY1MTYKKzoxMEFDNDAwMDAyRkY3NzVCNEJGRUUxMEMyM0FCNkZFQ0VGMDc4QjBDNDUKKzoxMEFDNTAwMDk3N0ZBM0UyMDM5NUU2QjM0OEJFMTE3NEE0M0JCMzkzNzgKKzoxMEFDNjAwMEU4RkUxN0JDMThGNDc0NUE5NjE3OTQzQkNFQjNEQzFCNUQKKzoxMEFDNzAwMEVGODVDOTg4NjdEQjJFQUFFNUY2OEM3REVFOTFFMTIxOTAKKzoxMEFDODAwMDczMEZGQkFFRDcwNUU4N0VEMUYxNERCOUVEMjNCNTQwOEEKKzoxMEFDOTAwMEZCQThBQkM4RkM2OTE4RjMwRDQ0M0VGRkQ3OTcyRjIxRTIKKzoxMEFDQTAwMDdEOUZFRkRFREFCQjIzNUNDRURGMjU1OTk1MUQ0ODlGRTMKKzoxMEFDQjAwMDQ5RkNGRTE5NkZCRDgzQzI1RTY0RjYyMEYxQ0QyNjhCODAKKzoxMEFDQzAwMERGQkJCNTg5NkQ3RDFFNDVCRUJBOUVERkYzQzdERUYzREYKKzoxMEFDRDAwMDczMEUwNkQwNzlGMUQ4MERDQkI0NUNFQkQ1MUI1N0NFRjMKKzoxMEFDRTAwMEI3RUU4MjZBNUYzMjU3QkNBNTU2RDBBRDI0QUVDRkY3MUYKKzoxMEFDRjAwMEYxRTk4M0U5QjA0NzhCNkE4MUVFRkZEMjE5N0REMEY2ODYKKzoxMEFEMDAwMEFEODA1RTRBQkFERkQ4NTg1Mjg5NzFBMTVCNkY1NDBEOEQKKzoxMEFEMTAwMDdDN0Y1RjY1QUZCNTEwRTcyRDQxRUY4Mzk4MjNBM0Y0RTcKKzoxMEFEMjAwMDlBNzgxRUJEMjIzRUNFRTg3NjlDRjcyRUFFNzg5NENFNjEKKzoxMEFEMzAwMEMzREZGRTU0MDAwMjc1NzgzRkE5RTdGN0Q5MzhFOTIzNEQKKzoxMEFENDAwMDY3RTk2Q0VCQUI3Q0YzMkJGNDc5MEJDMzk3RjNGNzgwREIKKzoxMEFENTAwMDMwODgzMzM4OEYyMjBCMENCQTFGRDlFODI1M0JGNEE4NzIKKzoxMEFENjAwMDE1NDRERDBBNDY3RDJGRDcyQkVEMjE3ODMwOEVGN0NDQTgKKzoxMEFENzAwMEYyRjJBNkYwNTRDMEZCNjczNUE1OTdFQzc1NERBRkEyNzMKKzoxMEFEODAwMDcyNTE3NUEyOUJFQ0YzNjlEQkY1NUNGQUUxNTM5MTRBRDEKKzoxMEFEOTAwMDk3REYyNEU0ODk1MzY5QzkxQjlBQjg5RjU2ODUyOTM5REUKKzoxMEFEQTAwMEQ2RDlDMTIyODVEQkQzQUMyOUM1NzNBREUxRTVFREM5QTgKKzoxMEFEQjAwMEYyQzc5QjQyREZFOEQ5N0QzMkYxMDdDOTJFNDY4RjcwN0EKKzoxMEFEQzAwMEM1QTJCNzY0Qzc3RDlDNjFFRkY5NjIyRjNEM0RFNTkzNTUKKzoxMEFERDAwMEE1RTczQUE0QTcyM0JFQTBENTI3MzVBNDlGQzFFQzI0OUMKKzoxMEFERTAwMEIyRkJFQjAxOUNGN0E2NkZEMjJDN0UwRjgzNjFGODJDOEYKKzoxMEFERjAwMDA3N0VDQjg1RERBNzdDQTBEMDc5REJCQjk2NzZEMEZFMjUKKzoxMEFFMDAwMDYzMkNFQjAzRjM3QUQ5MzNFN0JERDMwNzhCNzg1RTc4RjUKKzoxMEFFMTAwMDU3NTE2MjQ5ODRGMjcyODFFRTE5NUUyN0U0QzY3OUYyRDUKKzoxMEFFMjAwMENGODI5ODg3MTUwNEE2RTc5MDhGMTZGQkUwQzExQzc0QUIKKzoxMEFFMzAwMDJEOEY3MDNDQTc0M0U2RTcyMkIzRjJDRkY3NzEyOUY3RDUKKzoxMEFFNDAwMDdEQTI3NkZCODNDMjBGNTBCODFDRTZGMzlENjIwRUQwNDQKKzoxMEFFNTAwMDc5RDI4MTlCMEFEM0RGMDM2QzZFRkJEMDJFNTdFMjVDNjQKKzoxMEFFNjAwMDRGRjcxOUQwM0U5M0VFN0Y0QUEzREVERDE0NUI0Mjc4QTQKKzoxMEFFNzAwMEJGMEZGNTI5REE1NkI1NUM0RkZBNTNEQzRGMEM4NjQ0MDgKKzoxMEFFODAwMEY3Q0E4NkM0QkQxQkY3QTU4RTNDOEI3NkNGRDExQTA1QjkKKzoxMEFFOTAwMDNEM0UxMEFDNDg1QUE4NUY4QkFCRkIyQzA5RjU2QzY5QTIKKzoxMEFFQTAwMDlBRTJDNzRDOEY1OTg4NjdFM0FFNDUwNEI3NUZFOTZERjYKKzoxMEFFQjAwMDQxN0Q5OTU2MjA4NEZBN0MwMDhENDk2NkM3M0QxMjdFRkIKKzoxMEFFQzAwMEE0MDNGMzVERkNCNTY5NTA2NERDRDcwMzM4RUZGNzM3QjIKKzoxMEFFRDAwMDYwMkZEOTU5N0VBNjg3Qzk2RTUyRkE1QTUwMkVCNUQ3MUYKKzoxMEFFRTAwMEVCMTRENzM5RURDNjNFNzBFRUVGRDhCOEI3RTJCODEzMjEKKzoxMEFFRjAwMDRBRDk3ODQ2NTY3RjdBRUQ4RDdDNzYwNkQzQjMyMjJGRDkKKzoxMEFGMDAwMDY3NDEwN0VFREY2ODI5QjFGMkMzRTFFRDFENjg2RjdFOEUKKzoxMEFGMTAwMDRCMzdCRjRFRkM5MzY3OUZDMUY4RTI5RTQ4RDlFOEY5RDIKKzoxMEFGMjAwMEUyQjlCMDlCMkYwNkZEMjdDMkVGQkFBQzRFMDg3QTMwQ0IKKzoxMEFGMzAwMDJFRkQwRDgzRkJDQUJEN0VDMEY5OUY3QkVDQkUzREY3QTUKKzoxMEFGNDAwMDMwN0NDOEE4NEZDOTcyRTlEOUYzMjRGQkJFMUNGREIwMDAKKzoxMEFGNTAwMEFDN0NFNTgxQTkyQUNBQkQ1RjREOTBGMUVDMzBGMjU5NzUKKzoxMEFGNjAwMDE0RjlFNzFERjA5MTdGRTgxREQ4MUY5REUxODA2NzY3MDgKKzoxMEFGNzAwMDg0QUYxM0U4RjJCRkQ2RTdGMDNGNUVERUMzQ0JCNkZDOEEKKzoxMEFGODAwMEZCQ0E1REVFRjI5NzYxQzkzOEI0QkZCRTdDQkIxRkQyNkQKKzoxMEFGOTAwMDEyRkVERTI5RjdCRUY5OTEwOENGMzdGRjBBQTQzQTEwNTYKKzoxMEFGQTAwMENGNkJDNUY5QTQ2QjFFOUJBQUEyRkQ3NEU1MENCRDEyNjQKKzoxMEFGQjAwMEUzOUYzNjFDQ0YwQTNERkQzNkUzNjNDMzIxMEZBRjBBODIKKzoxMEFGQzAwMEE3NTVDQzk3N0E3REZCOENDRjlDMEREODRGQkE2MzAyRTYKKzoxMEFGRDAwMEZBMEZDNzQwNEUzREZFQTUyRTM3OUMyM0NEQzMwQkI3QkQKKzoxMEFGRTAwMDdEREUyODFGMUNDQTE2MjlBNzFGRUNDNTg4REIwRjc2M0IKKzoxMEFGRjAwMEIyRjdCMzFGNDVGQjc4NTZGNkY3RDdEOTc5NjYyN0RCNEEKKzoxMEIwMDAwMEVGOUZGMkY0N0I4RDg2MTc1MTAzQUM1MjdBMUFBNUFBRjIKKzoxMEIwMTAwMDZDREMyQkU4QjdDQzg5NjhGRkVEOTg5RkMxREM3NTQ3RTUKKzoxMEIwMjAwMEJEQUUwMkVCMzVGQTg2QTkzN0QyN0M1Njg3RUU4REEyRUIKKzoxMEIwMzAwMEJGQTg0RjgyNDRBRUZCNzdDQTQyQzkzMUQxNTk0M0VGMTIKKzoxMEIwNDAwMEUxMDFGMUZCODIwRUJENjJERjYzREZCRjA4RkQ3QzAxMjEKKzoxMEIwNTAwMDYwRkI3QjdBMkFDNDA3RTRGRjkxRDA1RUVEQzk5ODk1MjYKKzoxMEIwNjAwMDE4M0Y1NjVDRkM1MTg0RjExNDY2RjdBRTEyRjY2NTUxMzgKKzoxMEIwNzAwMDhERkJCQkQ3MUY3NDdBOTRBRkVCN0FFODIzRkIzRkFBMTIKKzoxMEIwODAwMDg1MzMzMjlFNkJBRDczRTczRkRENTlGNDQ1OTJCQjJCQTAKKzoxMEIwOTAwMEY3RjlDOUNFNUMwOUM2QURGNTMzNjkxRDkyMUZFQ0ZBMEMKKzoxMEIwQTAwMDc1QTc1MzlDRjhGQTMyMjM2RUExNUM4M0I4NDk2RDNEQjUKKzoxMEIwQjAwMDdDQjdFQTAzMDlEMjBFM0ZDMTJBQTU1RkM1RjVCNjhBNUYKKzoxMEIwQzAwMEU5MEZFN0ZCRUI2MkIyRjE0NjhFREZERjY0M0ZGREEwRTQKKzoxMEIwRDAwMDE5RTExQUM0ODM4RjlGQTdENTU5RDkzMUNGMjMzRDUyODcKKzoxMEIwRTAwMDIzOEZDQjE5QzUxNzBGQjM3RkJGMkVBNkQyMzhDQkQ2NkYKKzoxMEIwRjAwMDREMjlFNkZFMjFCN0RDN0M1N0U4QTk5RjNDRkMyRDk1NDUKKzoxMEIxMDAwMEVFQTNGQUVFQUIxNzIwMUU1NjNDMkU4M0M2QzY3REY3ODMKKzoxMEIxMTAwMEUxMDg2NDQ4N0ZBNTU1RDQ1RjU3NkQ5NzczRUE3N0NDRjMKKzoxMEIxMjAwMDc0QTJCQzk0QUREQzdGNzlENUI2NDA3QTMxNkI3RkQ1MDMKKzoxMEIxMzAwMEEzQUY5RjA1MENCRTc3NUJGQkY3NENDNDc1RjA1REVFQ0IKKzoxMEIxNDAwMDU3MDRBQkVGQUM4QkQ4RkJBQjE0RjhCRkI5RUNBOUNGNkQKKzoxMEIxNTAwMDQ3QjlCRDdERjg0NzQ1NERCOEJFQTUyRDNCQkY0OEZENUQKKzoxMEIxNjAwMEY2NUVFQTBGMzhFMjczNEJBMkZDN0MyQ0FCQzdGREEwNjUKKzoxMEIxNzAwMERGOTFEMjUzNzJDNEVGNkNCRkZCRTFFRjQ4MUNCRTFERTAKKzoxMEIxODAwMEZFNzQxMEUxREI3MkJGOUE2NDcwQUNEQUYyMUVDOTkzRjAKKzoxMEIxOTAwMDA1NUJCRjE3NDUzQ0FDREFFMThFRDNBREQ4RkE2MTA3NDkKKzoxMEIxQTAwMEU2QTFBQzkwQTE3RjMxRjJCMzdDOENDQTQ3NERBRDVGNzQKKzoxMEIxQjAwMDI2QjlDRkNGNTdBRjI0OTJCMDdBM0ZGOEVEQTJERkIwRDcKKzoxMEIxQzAwMEVGNkZDNzY0MDgzMkQxRkJGNkJFODNFQUUzNTg0RTg2QzAKKzoxMEIxRDAwMDUzQjhDMzVEQjVDMzJERjc1NjZENzk5REYyMjI3NDFGMjgKKzoxMEIxRTAwMEY0NTc5QzhERjkwMTZFQkVGNkQ2NjdFQjQ3NDVGQjY5QjcKKzoxMEIxRjAwMDU1RUZCQUY3RDBBRTVDQjVGRDlENUZBM0ZDNThFNTkxNjUKKzoxMEIyMDAwMDlGNkZFMzdGQ0E4N0ZBQTlEQkEyOUVGQjY5QjYxNDk2RkIKKzoxMEIyMTAwMDNGQjFFMjdCNDdFRkI1RDhCODg3QjdGREVFNUVDQ0IzNjAKKzoxMEIyMjAwMEJGRkFBM0Y3RUZGRDY3QjQxNzlFMEFFQTI4RkY1NzdEMjAKKzoxMEIyMzAwMEY3ODUyODM4RjhGMTFFQjFGRURFOUQwNDU2MzlBQkY3Q0MKKzoxMEIyNDAwMEVFN0YwNkQyNzhBMEY1REQyNzdGM0IxOUNGQzlCREZCODUKKzoxMEIyNTAwMEM4MUZDNzE5QUNGRUY1NEY5RTQ3RjdGMjVGRkZDMzA1NDUKKzoxMEIyNjAwMEUzODdCM0FCOTA1RkQzMDEyNzVDNjlBMkFCQjE0M0UyNDQKKzoxMEIyNzAwMEM2Q0IxM0UyRTlBMUM3RTE0NzA2NTRCNDc3RkYyMDQxRUEKKzoxMEIyODAwMDNGRUFCOTk1QkQxRkFBQjgzRkQ5NjM0MjNGRTI2N0Y3Q0QKKzoxMEIyOTAwMEY2RDdGNzdDOTU5NURGNjFGNDA5RTRBMDBGOUJGRjQ0OTYKKzoxMEIyQTAwMDFGRTk2RjI2MjZEOTczRTVGNkQ3MTcyMUJDQUJBMDlGRkYKKzoxMEIyQjAwMEY0RTkxMDdBM0VDRkU4MzkzMzRCNEZFRkY3QTM3MDRDRTcKKzoxMEIyQzAwMEM1N0RDMUFBODcxOUZEQ0U0MjNBMzJGQTlEMzU5NDdFREEKKzoxMEIyRDAwMEVGRTA3RkU2MEVBNURGRTM1MUY3QkQwOTQ3RTFFQUZCQUEKKzoxMEIyRTAwMENBNzE2M0JBN0Q2Q0NFM0M4ODZDOUM2MUY4N0I1MDZDRjMKKzoxMEIyRjAwMDc5MzAxMjdFQUY5MDM4NUM1RDUxRjNBNzI4RUYwRjZGNjUKKzoxMEIzMDAwMDJCMUFBNEVGNjJBNEVGRjc4RTRFNDZFM0VENEQ3RkZGQkMKKzoxMEIzMTAwMDE3MTEwRkZENEYwNjc0RkNGRDEyNTczREY5MjJBREIzMTYKKzoxMEIzMjAwMDc3N0ZGODlDNkE1MDVDMDdBMkQyNkM1Njg2QzE5RkZENUQKKzoxMEIzMzAwMEMwQ0EyQkI5MEYxQ0FFNzlFMEZGMkZGQTM1NkI3RjBEMTkKKzoxMEIzNDAwMEVCMDJGNzk5OEM2RTU0REVDM0Q2MUREMTIxN0Q2MUEzMkIKKzoxMEIzNTAwMDgxN0EzMzVENDZGMzVFOTlFNkVCNjE2NTdBRTdDNTc4RkQKKzoxMEIzNjAwMDFGODUxN0VGRkU2MkZCM0VEMDJDM0RGMUJFODM5NURCQkYKKzoxMEIzNzAwMDVGNUQ4NDdDOTc4RjlFRjZGQzc1OUNGRjFDRjZGRDAxM0IKKzoxMEIzODAwMEY3N0FGNUQ2NUZDOUQ2MjdFOTI5MkY3REQzM0I3RjgxOTAKKzoxMEIzOTAwMENGNzdFRjBGMjg3ODNFRTM1RDcxQUZBRTk3RUU1OUZDQTMKKzoxMEIzQTAwMDhCNzNGM0EzOEM0MzFERjdGMEM3NjAxQzRBRTAyOTNGNjEKKzoxMEIzQjAwMDdGRjA3NTNFRDJGQzQ2OEJCRjc3QTI4NjhCOEY2QzNDQUMKKzoxMEIzQzAwMDFFM0U5NjVCRkU0RjJDRTY3MjYzMjVGNDM0QTJFOUVDMzgKKzoxMEIzRDAwMEI1NTcxNDQ4NUExMzJCQjNGMDFFNDZGQjgyQzE3QkY4QjUKKzoxMEIzRTAwMEJCMzJGOTg1M0E3QTc3OTMxQ0Y3Q0E4Qjk1OTBGQkY3QjUKKzoxMEIzRjAwMDZGRDUxNjczN0I3MUU1OEU5RDY3QTE1QzNCQkNFQjQ3RjcKKzoxMEI0MDAwMEM0OUYyQjFGN0U1NUM1N0RDNzlFMkQzRjUwRkI2QUIzNDEKKzoxMEI0MTAwMEVCMDFGNTQzREE4MUVGQzNERkRGNzkxNjk3MDdCOUZENUEKKzoxMEI0MjAwMDVFNzNDNTdDNTYzREUxRUU3RkQ1QzNFRkI5RkE1RjYxMkYKKzoxMEI0MzAwMEY1OTJCRDMwRDIzODZGMkJFNkE1MzhERkI3RjdGOUU5QzIKKzoxMEI0NDAwMDFFQzJCNzdCRTVDNjVDNzZGMEU0NjJCRkNCMEVFRTc4MzkKKzoxMEI0NTAwMDZFRDE2RkYwM0NFQ0NDRkQyMUJBN0Y3MTdCQUIzOUZFMzUKKzoxMEI0NjAwMDE2QjRERkY2RkI0NTdDRDFGQzFEREFBNURCOUYwQjkxMDIKKzoxMEI0NzAwMDlGNjdGQkZFQ0Y1MDNFOTBERERGNjMxRTdDQ0U3OURFMDIKKzoxMEI0ODAwMDVBMTA2MUZEQ0RFOTRCQ0M5NDhEQTE3MkEzRUUwMERCODcKKzoxMEI0OTAwMEVGMzlGOEUwRkFFNzFBQzdBM0RDQzdGREIxODFCRjVGNTcKKzoxMEI0QTAwMDRFODlEMzM5MkMzOUJBODhGMkNDNjVEREE3MDc3M0VBMDcKKzoxMEI0QjAwMDZGREU5RjNGQ0NGNzkzN0VDNjk4Q0VGQkRDQ0YzREY2ODgKKzoxMEI0QzAwMDFGQjQ3RkVGODhGQjcyRTJFMTNFODE3RkZCRjczRkQ5M0IKKzoxMEI0RDAwMEVGRDc0QjlDNkZBQzY3NzkzQzI0REZGQURBRDgxQzhCMzIKKzoxMEI0RTAwMDU3MzM1NERFREE1QzE3QzdCOENGQjVDNUZDQkU5RUIxODIKKzoxMEI0RjAwMDZGMTgxMjlFMkQ5OURCNjc0Q0M3RjkxNzQzMkZFMDc5MUYKKzoxMEI1MDAwMEZGREI5QkY1QjgzMzNFNTQ3NkQ4NkNDMTdBNjdCRjA5MzAKKzoxMEI1MTAwMDcxQUM4N0UzRTI3RTZEQjRFMzVBQzVGQ0RDRjM5MDcxNTUKKzoxMEI1MjAwMDZCN0IwOTJGODU4Q0FCOURDMEI4Qjc5RTgyNzFDMzI3RkEKKzoxMEI1MzAwMDgwNjc4MENEMDU4REVCQ0RCM0YyOEVBRjRFRTM3OTYzOUUKKzoxMEI1NDAwMERFRjE5MkI2M0UxMEYxMDU1QTdBQzNGOERCRkNBMjlGRjkKKzoxMEI1NTAwMEE1QzU4NkVCRjc5NTgxOTJBMTdCQUJCMzc5MTc2OUE5NTUKKzoxMEI1NjAwMDczMjZDNkVGMDZDRjFCMjczNEM3Nzk2M0Y2OURDRTFCMjMKKzoxMEI1NzAwMEI3OTkzQzBGOTZCNUEzNzVEMDI1RkMxMzE4Q0Y1Q0U2QTAKKzoxMEI1ODAwMDgwRjcwNTIxOUYwMjE1QTkxOERBNUY5RDc5RTIxMUFGQjYKKzoxMEI1OTAwMDA4M0VFRjhDMzQ2ODM4OTk5REZBRjRFMkJFNjFGNDg2NzcKKzoxMEI1QTAwMEIyRTY5QjMzOUNFNzkyMTUzRDIzQjlFMkM4RTZFQjc0MDMKKzoxMEI1QjAwMDdGNTZCRUY2REVGOEEyMEQ3RkU3Q0U3RjgyQUFBOTk4NUQKKzoxMEI1QzAwMDM3OUI4MEQ2MUM3MDZFMTdFQjA3RUI1NTYyQkQ1ODEyODcKKzoxMEI1RDAwMDVBMUNGNUQ0MTg5RkE3NURFRTE0N0VBMTU3NkU3REE1NjkKKzoxMEI1RTAwMDkzRTJGNjc5RjBCNDQzRDBGMzA1NzRDQzk3RDFGNjREREQKKzoxMEI1RjAwMEMzRjg2RjU3QzQ0NzcyQjIyQjk4RkIxRUZCRkYyQ0Y2QTMKKzoxMEI2MDAwMEI5RTRBNDhBRTcxRkM5MEZCQjhGRjY4REM2QjE5NzRENjkKKzoxMEI2MTAwMEJDMUZFOUQ2NUE5NUZDNjA5MUZBRkQ1NDNFNkFGQUM4RkYKKzoxMEI2MjAwMEZBQ0Y4NzFGRkIzRTgzQzE3MjFFRkY1M0JEQ0VFOUJCMUQKKzoxMEI2MzAwMERCREM0NkY5QjFENzRENTU4REUxRjIyRDQyNkJBNkM1NDUKKzoxMEI2NDAwMDMxNkY0MjVCNzM3NjFDQ0Y2Qjg3NkFGOEVGNjFEODMwM0QKKzoxMEI2NTAwMDBGRTI2MTA2REY4NjNDRkNGMTNGNTg1MjNDQUIwMDgwQjQKKzoxMEI2NjAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFRDdEQjMKKzoxMEI2NzAwMDBCNUM1NEQ3OURGMEI5MzM3N0VFM0M4MTNCMzBDMEYwODIKKzoxMEI2ODAwMEJFODMxMEQxNjIzQTI4QTIzNjNFMkUwRjBEM0U2MjQ2OEUKKzoxMEI2OTAwMEM0QTgwOUQ2RDEzQzRBMjIxOEI0MzZBMTFCMUIyRTAyREQKKzoxMEI2QTAwMDgyRjhDMjI2NkJDREFFNEQ0N0EyMkQ2REQzMTY1M0RBNkMKKzoxMEI2QjAwMDM1OEZGNjFCNEM3NEVENjM1QjYyNkNFMkY2RDMwNjEzQjgKKzoxMEI2QzAwMDM3QUI1OUQzNjVCN0NERDZFRDk3MzZERkY5RkZDRkJEOTAKKzoxMEI2RDAwMENDQkRDMzBDNjhEQUY0QjdGQjdENEI3RUM5QzlCOUU3QjIKKzoxMEI2RTAwMEY1M0ZGRkYzN0Y5RkM3N0M0QUU0MDg5OTQ5QzhFRTJERDgKKzoxMEI2RjAwMDg0MEMxNTEzNDJGOEIwOERCODA4RDk1NzYyQjI0MzNBOUEKKzoxMEI3MDAwMDI4NEY0RjFBQTZFOTg3RjBCNzYwNkM2QTZERkVEQjE5MDcKKzoxMEI3MTAwMDU1MzMyMkY5Q0VCQzQ0MkU0OEZCRDk5OUY3MzgxOUE2RTcKKzoxMEI3MjAwMEE5RjU4MzE2MTJBMEVEQUQzQzkxRkI2OUVBOTZDOTYwQkMKKzoxMEI3MzAwMDkyODdFNkU1NUI3QzU2MUY0RDVEMjRDMzU0NEFEQjk1M0EKKzoxMEI3NDAwMERGQzJFREYwOERFRDdGMzBFNzExRUY1QkI0NURCQTRDRjkKKzoxMEI3NTAwMDMyMjBFRDJDMTczMjRDM0E3ODdBQkVEMDQ0MDI3NDlDRDkKKzoxMEI3NjAwMDhFNzI2MTJEQzA2OTBEN0Y5RTQ4MDk5MUYyMjc0NTEzQTUKKzoxMEI3NzAwMDIxQTlGNDdCNUQ4RjJDQzNGQzA4QzkwODI0QzAzQzQ5NzcKKzoxMEI3ODAwMDQ2OERBRTVFMEY0N0Q2RjQxNzhGMURGRjEwRTA4N0I2Q0IKKzoxMEI3OTAwMERGQUQ5NkVGOUJGM0NFQTE3QjI5RkNBMjJDOTU5ODY5OTcKKzoxMEI3QTAwMDM3RkIwNkFGOTJGQzY5MzQxRkJFMkE3MzMwMkYwRjk5MDYKKzoxMEI3QjAwMDZFMjc2M0ZCODE3QTNFNUEyRkQxMUIyNDFCMDBDRUVDRUYKKzoxMEI3QzAwMDYxMTJBNEUzMjcxNjBEMTM5OEJGNDMyMjkyNDlDMjdFNEIKKzoxMEI3RDAwMDEwRkVBNEQ5MjM0NEExRjU5MkU2MEU3Qjk1NjlCQTdFQUEKKzoxMEI3RTAwMEZFNjA4RTA5QTcxOUU2NDlEN0QxRDE1Q0VBMkY0ODIxMUUKKzoxMEI3RjAwMEM0RDYzQ0RGNUY0MEQ3MjU4MTFGMjIyMkVEMjc0MTYyNUUKKzoxMEI4MDAwMEY4OEY2RUY3Q0Y0OTBDM0YxQTVFN0FDQTZGNDkwQUM2QTUKKzoxMEI4MTAwMEU4N0Y3NDdENUJDRUE0RjExNjVEQkVCQzY3MERFMERGRjIKKzoxMEI4MjAwMEUyMDkyQTMwRkZDNEQ5MEMyRjVBNzlBMjM0NEM2NDNBNjkKKzoxMEI4MzAwMDZFMjI2MUYzMjRBNTQ0M0U0NjkzODQ1Mjg1QzAzODc0MzkKKzoxMEI4NDAwMDQ4NTkzRjlGMDc1NDdBN0M0MDlEMEZGQ0M5Njk1ODhGMjcKKzoxMEI4NTAwMDEwRkEyOTQxNUU3NEQ1N0MyQkU0NzlGMjU2MTEyQkZGNDYKKzoxMEI4NjAwMEQwNDc3MDQxREZCMkE5NzlGM0Q4N0NCQ0Y5NEM5NEVFOTMKKzoxMEI4NzAwMDZBMjFFNDJEREQ3QzZERDk3NEZFNUFCRkY0REYxRTBCMDYKKzoxMEI4ODAwMEM5MDBGQzdFNTRCQzA5REU2MUE0MDdFREZCMzY3NUZFRTEKKzoxMEI4OTAwMDE2Q0YzMEUyNjcwQ0ZFOEExOUZFOUNDNTBDN0ZDRTI4QkQKKzoxMEI4QTAwMEZDRUQ1NURCRUZGRDJGODZCRjUxM0M3MUE2MzU0MDg3N0YKKzoxMEI4QjAwMEQxNzhENEVBNTc4Q0MyQUQyMDVERDI3Njg0N0MwQUYyNkUKKzoxMEI4QzAwMDgxNkFFMERGMUUzQkNCMUYxMkVGQUMwNkZFMDBCRTlBODIKKzoxMEI4RDAwMDgwNUYwOEM5QTQ0RDdBQjgyRTI4Q0YxNTQ1RUNERjdBRDEKKzoxMEI4RTAwMDFGOTUwN0ZBN0M1MDkzMEY2QzVDOTdDRjVGNEQyODNERjYKKzoxMEI4RjAwMDEzOUY4OTFDQTMyOEVEOUFBQjc4NjFCREJBOTE1MzIyOUUKKzoxMEI5MDAwMEZERkZBMzM4MDlFQjc3NEE4Mjg5RkIyNDREQ0YyQzRDRUQKKzoxMEI5MTAwMDA3QjlEOTY2RUJCMUMxN0NCQjJDM0REODRGNUI4RTQ5RDIKKzoxMEI5MjAwMEVDOEQyMURGNEVBQkYzMzUzNzNCNjcxQzlEMTExRjhGMkMKKzoxMEI5MzAwMDY2ODEwNDYzRjFGRERCQUE3QzZCMUI3Q0VBOEM5OUQyRTcKKzoxMEI5NDAwMDA3MkYwOTkyOURDMjBCNENGRkI2QjZCRUY5QjQzREU5NzQKKzoxMEI5NTAwMDFGRjJGOTYwOUM0NDFDQzdBNUMyRTUyQTM0OTE1NkRGNEEKKzoxMEI5NjAwMEM0NzAxRTU3RTk4QTZGQjY4RjBCMjcwRjcwQzY5MDMzQ0QKKzoxMEI5NzAwMDFBOUNFRDAwQTcyNzNFOUNDRTlDMEFBNDUzQkVEOTg1RjUKKzoxMEI5ODAwMEUzMEM4QTEyNUIwRjRCOTM2RDIzOUQ5RkFCMzU0OTZBODUKKzoxMEI5OTAwMEE1RTkyRUJFQTlBQjBFRDIyMTBCNTE2ODE1MEI5MUNGOTQKKzoxMEI5QTAwMDU0NTBCOEY5NjlEMzA5QTFGRDc0NUM5QTY1OUIwNEI0M0QKKzoxMEI5QjAwMERGREM0MzAyM0EzOTFGNzQwNDJGODlCNDNGNUUwQzkyRDYKKzoxMEI5QzAwMDIwODU5Mzc3MjkzMjgwRjFBQzRBMDdEQUJBOTFBMjY0RDQKKzoxMEI5RDAwMDQyRTZEMEYxODJGQzBDOTBBN0NFQTA4MEE5RDY4RjQ2N0IKKzoxMEI5RTAwMDI3NEU4QjRDQzQ2MkU4QzcyNDg3NDBERjQxNjc3MzIyMkYKKzoxMEI5RjAwMEY1RTZCQjE5REVEQUU2ODYwMzU0RjY5MUVFMTI5RUVDMEMKKzoxMEJBMDAwMEEwOUZEQThCMjhCRDI0RDFCQzQ1RUVBQUEzRjhFODdFMUUKKzoxMEJBMTAwMEQ1NDI3QTc1N0NBMDhEOUJFQjY2RkFDNzRFNkE5M0MyQkQKKzoxMEJBMjAwMEQwQjdGOUIwMzczODhFM0VCNjAzREU2OEJCRTYwQkJFNDIKKzoxMEJBMzAwMEVGQkNBMkUxMTVGRTE1MTMzQ0VGMzg5MTc2MzM4MDlGRTEKKzoxMEJBNDAwMERGMjdDNUFCNERBNkY4RkRGQ0FFNDVGQUNFMkIzQTc5MDMKKzoxMEJBNTAwMEQ1NEM5OEZFMjA0NDRBNUYzMTJEN0VCQkREMkQ2NDQ2RDcKKzoxMEJBNjAwMDQxNjEyNEJGODcwRjIxM0VCQjVEQkQ1REY5NzQ5RThBOTUKKzoxMEJBNzAwMERGRTQyRkE0RUI0NUIyNEIwRDc4OEE0RTA5Njk2NTcyNUQKKzoxMEJBODAwMDcwQ0NCQUFFOTZDMkI0N0Q3NzkxODlCNzAyQkQxNjkwREMKKzoxMEJBOTAwMDkwMTlGMDkyRUQ0MUJFRDRENjM1RTg2MDc0NjNGMTMwNzAKKzoxMEJBQTAwMDM5Njk3NkM5OThEQTAwOEYyMEVGQ0M3QkJDRTNDOTZCOEIKKzoxMEJBQjAwMDFCRjA0OTBDM0MxNkI5MjkxRTNGRjFERjBGOEYxRTM3RDIKKzoxMEJBQzAwMEMxRDQ5OTUwOTMwNEY4MjMyRkVGMjJEMjM0MDBDM0M4NzUKKzoxMEJBRDAwMDdGNUEzQjhEREVBM0U3NUZGRERGN0NGRTFBOURDNEFGN0UKKzoxMEJBRTAwMEFGNjhGNjEwM0Y0OEFCNjYwNTQ5QTg5QkMzN0NDMDk2N0IKKzoxMEJBRjAwMDg2NEQyOUU4NTRBNUQ4QzJBREEwOUE3MkVBRkEzMzRFMTEKKzoxMEJCMDAwMDExRDBDRkVERTIzQjM2MTQ1REZFMEY1M0M2RUI5RjI3RkQKKzoxMEJCMTAwMEVGNjhGODM0NDdDNkQzRTNDNzA0N0FFNzhDMjU3NDhDMDIKKzoxMEJCMjAwMDhCRTAyOTQxRkNCNDc3OTBEQzA4OUU5QTZDMjA4RjNBMTgKKzoxMEJCMzAwMDVENUJDRkY4NEEyMzc4RUFDQzdFNEVEQ0EwQTNGNzJCREUKKzoxMEJCNDAwMDYyODVFMkE2RjhEODA5NzY2RDBDNzk3MkFGQkJBMjFEQUEKKzoxMEJCNTAwMENBMDU1MzZDNzk3RTQ4OTU2QjU0ODBGMzBCRTkzODBCMUEKKzoxMEJCNjAwMDQ2OEM3ODlBQTdFMjY5N0VGQTNCOEZDMTM0QTk5NEU0QTcKKzoxMEJCNzAwMDA5MTVDODE1MDE3RjE1RTBBRDZBNEQwMEM4ODIwODU5NDYKKzoxMEJCODAwMDFGN0MyMjg4RjQ1MDI1MDI1RTM4NjVCMkU5NDNFNzhEQjgKKzoxMEJCOTAwMEUzMkYxRUJFNUMxQzA5QzQ4MkZCMTlCMUU2ODgxQkY0QUUKKzoxMEJCQTAwMDQ5MzFDNTlCQ0VGRUEwODQyMUEyN0NENEQ2QzVFNTk5OUYKKzoxMEJCQjAwMDgwQUVEOEJBQkQ3QzMxRERBNEQwQUE5RDVFNTMwOEZDMEUKKzoxMEJCQzAwMDE5MEI2OUVBMDJCQzkzNzM2NjAyNzY1QTVBMzgwM0NCQTIKKzoxMEJCRDAwMEFEREVGQzEwRThCQkI0QjA5REM4RTgyNzg4MjEzQkFEQzIKKzoxMEJCRTAwMDdGNzBFRDVEN0VENDQzRDc2RjIzNjE0QTM3MjhDQjQwMDkKKzoxMEJCRjAwMDhFNjVDQjYxQjBBNzc5NTEyQTM3NEIzMENFQTMzNkYwOTIKKzoxMEJDMDAwMDZGM0FCRDM1NDk4NEQ5REIyNDk2MUVEOEUyMEVGRTAwN0EKKzoxMEJDMTAwMEQ2OERCRjNFMUZGQjMzRDk5OERDQkJEMUY5N0M2OTY1NUIKKzoxMEJDMjAwMDIyMDEzQkMwN0U4MTBCODEyRTNCQjA3MjdFRDc3MDI5RjIKKzoxMEJDMzAwMEM4Q0Q4NDFFMkI0RERCNzgyNTBDN0E0Q0I5NjA5NzAwNUIKKzoxMEJDNDAwMERGNUIwQjk1REI0RDM0MkRGRjk1QkQ4OEE3REZCQjM4M0YKKzoxMEJDNTAwMDg3MUZGMEQwNTU0ODk3OUNGNkYzQkJBNzlDMjE0MkYzNzEKKzoxMEJDNjAwMDNCNTcyRTFGNDk4MjdFOEU5QTI1Mjg3RkYyQzNBNjRGMEUKKzoxMEJDNzAwMDgyM0Q2NUZCNjAzRkZBODczNkQ1M0YyNDdDRDMyQzU4NDQKKzoxMEJDODAwMDNGRkI0Nzk0MTNCQkY5MUVBNEZGNUQwNUQzNkQ3QUY5MDIKKzoxMEJDOTAwMDlFRUEwODBFMDM1RUI0QkNERDRCRTVEQjBDQTRBN0I3M0YKKzoxMEJDQTAwMDg2MjkzRDk5MTQ4RTdDNDhFOUQzRTZEQUU2M0QyNUMxMjQKKzoxMEJDQjAwMDdDRTk3NzhEM0U3QzkxN0ExMUJFMzVFNjNEMTRENzYwRTQKKzoxMEJDQzAwMDY3MTI3MjY0MzFEODkxOUQyMDZGRDA2RTI1MEEwN0VCMDAKKzoxMEJDRDAwMDk2QzFDQURGM0ZCMDYyMzFEOEExOUQ3NkFEN0NFNTYyRTYKKzoxMEJDRTAwMDU5OUY1N0ZFNzAwNkYzQUFEREVCNEZGNkVDODJGQTlFRTEKKzoxMEJDRjAwMDJDRDJDNEYwMTMyMEFCNzRGNjRDNDEzMjhGRUJENkU3NTQKKzoxMEJEMDAwMDk2N0ZFRkQ2RDlDRDFBNUQ3NjE1MzBCQTdDRjk2MjY3ODkKKzoxMEJEMTAwMDM1QzhDRDRFNEE5NzU2MDlFODcwOTdDMTRGRDY1MjhEMTcKKzoxMEJEMjAwMDBFM0IwQjE4OURDNUMzQkJFNTdBMDkwOUVCRUM0MDhCQjQKKzoxMEJEMzAwMEE3MDdFOUQxRTYwOUEwMUQxRDVEN0Y0NTBBQjM2MzM0NUQKKzoxMEJENDAwMEZBQjc3OTA5RjI4MzREMEEzRTc1M0ZGMjg3Q0IwRkVDQzMKKzoxMEJENTAwMDY3MkQ2ODIyMUNBNTEzOEJDOEZDRTE4OUU2MTEwRjNFRjQKKzoxMEJENjAwMDhERkUzQjBCRjIxNUEwRDdGNzQ1RTIyN0UzRDRCNzVDNzUKKzoxMEJENzAwMDJGQzVGOTZDNzFDQjkzOTI3NTc4RjRFNDUxQkNDNzk4RDgKKzoxMEJEODAwMENGNTc5MkQ5N0MzQTAyNzU4MUZCNjlCRjcyQkRBNDIwNUUKKzoxMEJEOTAwMERGNzg4OUJGMUJGNDEyMjU3RkIwM0JBOUJERjlDOUU0NDgKKzoxMEJEQTAwMDU0M0Q5RTk4M0RBMkY1QUY3MDREODMxNkUwNzMwRjZEMjQKKzoxMEJEQjAwMDQ3QkZCNjkzOTcxNDU4N0E4QjI3NjRFMEVGMkZBNjA0RjkKKzoxMEJEQzAwMDY3RUJGQkUxNDVFNjFGMkUzNEJCNENFNDIzRTA2NzNGMDUKKzoxMEJERDAwMEY1Q0JDMjkzQTk5RkQ4MjI2MkJBQTdDNThCNjk1NzhCQUUKKzoxMEJERTAwMDg0Njk3NzhCNENDMjU2RUFGRTkwRUJFN0VGMDUzQkRCQUMKKzoxMEJERjAwMEU1NDBGODI2QTI4QjhFMTYzRkI2NkY2Rjk5Q0RGQUUxMUIKKzoxMEJFMDAwMDM0M0E5RkJBMEJFOEMyNjFEMkY4QzRCRjBCRTgzQ0M5MTAKKzoxMEJFMTAwMEFDOTU5NzYxQkU4NzYzRTU4RjI0MkY1OEFDMTRFMzdDMDMKKzoxMEJFMjAwMDUwRUU3NTREMzBBRTM5NTQ4NkVCNzdGM0ZEQUJGMjVCRDcKKzoxMEJFMzAwMEM1REZGRTc5OEY1NEU3MDNGREJENjEyNkZBMzhDNjE4QzkKKzoxMEJFNDAwMDdBMDlCM0YxNkVCNEZGQUU2QzEzQ0FEM0ZERjM3NjlFREMKKzoxMEJFNTAwMEYxRDFCQ0U1NzVEQUZGNzhGNEQ4QzNGQThGREI5RjA2MjEKKzoxMEJFNjAwMEVGRTAyRTg0RDc0QUQ3REI0RUZCQjM4QTRDREVDN0UzMjQKKzoxMEJFNzAwMDg3RThGOUQyOTQyMDdGNzgwOENBRTlGRDgzNkJDOUNCQTMKKzoxMEJFODAwMEMwOUY3NDU4QkIwODdDMUE5MDIxREUyNUI0NTMxQ0ZCNUMKKzoxMEJFOTAwMDQxREYwNkMyQ0Y4MEJFQjU3MUU0MThDRDBCMkFERjUwNUEKKzoxMEJFQTAwMEI1QUZCQzRDRkIxMTY0MUJFOUE2RUQwNkU3REQ0NUEwNzAKKzoxMEJFQjAwMDVERTcyQjM2MEExM0E1RDM5NDdDQjQxN0VDODVCNUE0QTMKKzoxMEJFQzAwMDhERDZEQjU5NkQyNzY2RkEzRDY5RkUxQTAyRkRFREZDNDEKKzoxMEJFRDAwMDk5MURGQkY3OUQ5OTgyRkNCQTRCNjQ3QzM0QTExQ0YyM0UKKzoxMEJFRTAwMDlBNDg1OEFGQzc2RDhFNDgzRTFGRTRFNTdEMjQzMDBENUIKKzoxMEJFRjAwMEY5RkE2OTNENUY1MzNERDkwQkZDMjQ5MDJBODU3MEEwNjcKKzoxMEJGMDAwMDg3MUZGMDMzM0I0NDUxRTU2OUUwNTgzMkRBODEwMTZDMTgKKzoxMEJGMTAwMDFGQjEwQjlCODgwOEZDN0FDRTFDRUEwNkJGQzREQzgwRUMKKzoxMEJGMjAwMDQ2REYyMkYzNjFEQjMwRjJCNUJDM0NBMzhDMTAxNzAzNzMKKzoxMEJGMzAwMDgxRUNGMjg3NDkyRUUwMjVDMzRDNkQzMTIwNEI4MTg0ODIKKzoxMEJGNDAwMEE5REVFOEExRkYwMDdDRkM4NUFCMTdDOEFEODRBNEFGRDcKKzoxMEJGNTAwMDExMENGM0UwMkYzODJGOTk2RTA1Rjg1ODdENEQwRkYxMzUKKzoxMEJGNjAwMDE3MUExQkExM0U0Rjc0RjVEMTlGQTk0QjFBQ0YyRjhDRTYKKzoxMEJGNzAwMEI2RTMwNzkzNTU3RkQwNDk3MjQwRUZCNUI3OUMyMDZGNjkKKzoxMEJGODAwMDVCMjJGREYwNTE3MTI1MkRENUVDRjk4NzUzNThEQzYyMDkKKzoxMEJGOTAwMDk0OUUyNDQ2REYyRjUwM0YxREU4QjFFMzE3NjZEMjFCNjUKKzoxMEJGQTAwMDgzQkVBRjI3RkIwQ0Y2NkU0NkQwMTQ5OTFGRkRGNzk1QTQKKzoxMEJGQjAwMDhCRDY4QTgzMDZGQTFDN0ZGREIzRUE4REVENzM5QTFDM0IKKzoxMEJGQzAwMDA2M0NFNjM1MjcxQkYyM0UyNUQzNTA3RjUyNTdCRUExRDMKKzoxMEJGRDAwMEJDQjA2N0FBQTE3Q0YyQTFFOTg2RkM5NEQwQTcwQ0Y1QkQKKzoxMEJGRTAwMDNGRDE1NzYxQzg0RkVCNUY2MkE4RkZDOTEzMzU4NjdDMEMKKzoxMEJGRjAwMDQ5Rjg2RTQzRkQxOTY3MzYxQUNBNjcwRTNENjQyODlGREIKKzoxMEMwMDAwMDc1N0VBQjIxM0Y2N0Y4QUYwQ0Y1QkQ0MUYxRTQwOUUwNjcKKzoxMEMwMTAwMDRGNEE4RjY2OEFBRjVEMTlDQTIxRDA5RkMzNkRENDhFRjcKKzoxMEMwMjAwMDlCQ0ZFQzYzRDBCNzI0OUJBOEY2MzE1NTRDNjk0MDU3QTEKKzoxMEMwMzAwMEVDQUYxREY0MDBDOEY5M0Q4Rjg1QkY4MDdBRDJFNDA3Q0MKKzoxMEMwNDAwMEZFRTUwQjE2QzkxQkExNURCQjY4MjI1RTlEMUM5MTE2MDcKKzoxMEMwNTAwMDExRjg1RUIxQzc4RERGRTVEMjU2RTQwRjgxQUEwRDdCRTIKKzoxMEMwNjAwMDIyRTg2REUzN0ExMEYzNzZEMjBGRjBCREMxRTBFMzQ1MkMKKzoxMEMwNzAwMDI1QTY3QzEyQjI4REY0NkYyNUY3MjQwNUM2QjFGQjJDRTIKKzoxMEMwODAwMDkyQjFGRUNERDJCRjJGNDVBNUZGMUM0QUZGRTY4OURCNEEKKzoxMEMwOTAwMDZCNzRGRjkwNDk5RTlDQzJGQ0MzQUE3MzFFODNERjgzMEUKKzoxMEMwQTAwMDc4MURGNTdCNkNBNDFERDhBOUJDNkUyNEVCMTRBQkFFMzcKKzoxMEMwQjAwMEZBMzc1NkQzODc5RkI4NzFGRjI2OUFCRjY4NEE3MTRFRTgKKzoxMEMwQzAwMEQ3QzlDQkU0QjU2NkRGOEZENTg3MzMwQ0Y2NTk3NERBNjAKKzoxMEMwRDAwMDk2RjgxMENBM0IyQTE3Q0I1MzBDNzIzMTUwMDVGMzEzNTQKKzoxMEMwRTAwMDc4MTlFNUEyRjZEREQ3MzcxNUU1NzI5N0M4RUM5NDRFQkUKKzoxMEMwRjAwMDg5RjJFNTM4Rjg4QTk2Q0I1RjRFOTY5OEJGMTg0NzNFOEUKKzoxMEMxMDAwMDBCNTRDRTgyQzJEREI5RjJEMzVEODAzNzc5MUI0MUJEQkQKKzoxMEMxMTAwMDQ0NzUxMENBRDlFOEZFQTk1RDc1MzdDMkU5NjVGNEE0NzMKKzoxMEMxMjAwMEY5NDM5QUJGNjVBM0YyMDNGQzJCOUI0NDEwNUY1NjhBMjgKKzoxMEMxMzAwMDJGMjdEQTQ3OEZBMjdENDlFNzIxODE3RDY0RjU1MEZCRTcKKzoxMEMxNDAwMDEzRjQzREI1M0Y5OUJERjlFN0I1MkZGMzYxREU3QUZCRjYKKzoxMEMxNTAwMDRGRDU5NzIxODdEQzk0OTIxQUJGRkYxN0UzRUM0NzlERDgKKzoxMEMxNjAwMDQ5RDZGQ0VFRkY5RUY0MjdBNzE4RjFBMUQxQTE0NjY3OUUKKzoxMEMxNzAwMDU2MjAzQTNBREVGQjEyNUI3N0RBMjI5MUQzRjYyRjI0NkYKKzoxMEMxODAwMEY4NEYxMEU5RTVENEVDQjM0QTI1QUM1QkQwMjU1QkE5QTgKKzoxMEMxOTAwMDVFREQzN0JCMDZEQjA5OTM3ODAyNzIyNjYxNzhDMzMyMTUKKzoxMEMxQTAwMEQwOTNBNDk0QzkwOTg1RkUwM0Y0RTYyODM2Q0EwRDVCMzIKKzoxMEMxQjAwMDk0MUUxNTQwMUYyNzhFRDVCQjlBN0NEMEZDRjM4OUU0RDIKKzoxMEMxQzAwMENCQjc1MkQ0MzhEOTJDMzI0QjJGNUZFMkY5RTE5QTdDQUQKKzoxMEMxRDAwMEQxRjBCMEUwODMxNjExRUQ4RTBGNjhCOTY2NEZEMDdFQjYKKzoxMEMxRTAwMDJDMzk3QzAwRTJDQzgyOUZDODQ3NjJGMERGQ0JBQTVFOEMKKzoxMEMxRjAwMEVFM0I2OTk3ODEyRTVENkIwNEY0QjMzMkZERTE3MkM4QUEKKzoxMEMyMDAwMDY3MzYxMTNGRTA2N0Y2NzA5ODA0NjlGRjNGRjRCMEY1QjgKKzoxMEMyMTAwMEM4RjQ4NzM4QjBDRjMzMkY4NzM4ODBGM0EwODVDNTg1MjEKKzoxMEMyMjAwMDMyQjc4NTM4N0REQ0U4OUFFQUM3RkRFRUUyQTM3RTU4OTYKKzoxMEMyMzAwMEY3OEEzQzE3RjJFOTY3MTcxM0E0OEYyMUVGQzY5RTcyQTUKKzoxMEMyNDAwMEQ4NTc5ODRCRkNDMDNGMkUwRjRGMzIyMTdGREUxQTQyNDkKKzoxMEMyNTAwMDc5RTIxRjUxQThBRjQzOTJFOTQ0NjE0REFGQjQ5MEU5MzAKKzoxMEMyNjAwMEY3NTFGRkZEREQxNjFCQTZENzVBNDQ0QzJCRjM4QTA3NjYKKzoxMEMyNzAwMDE3RDA3QTVCN0QwRThDMTc3NEU0M0I3MDlDQ0U1QzAxMEEKKzoxMEMyODAwMEM3Rjk4RjlDODdGMkMwMkVGODc1OEIxN0VCNzczRERFRDAKKzoxMEMyOTAwMDU0MDRGMTg0Q0U5M0ZGODk3MUNEMDgzRDUzQUM3OTAxRUMKKzoxMEMyQTAwMDlFMzBFRUY3MTBCRUM5MEJGQkJFNDlGMjBDREMyN0VENDkKKzoxMEMyQjAwMEI0MDRGRjcxMDNDNDEzRDcwQUZFNjMzMUY4MzdFOUU1MEMKKzoxMEMyQzAwMDFGQTE5RjBDRjgwMTNDQjREQjE5NUVBQ0NFMjZCRjFCNEUKKzoxMEMyRDAwMEUyRkQ5M0M4RkExNUIxRjg1NEM1MTNBNTMwQjM0MEU5OEYKKzoxMEMyRTAwMDM3ODk5MTA2MTFFNjg2REExMjQxQUZGQTQ5M0YwNTlCN0MKKzoxMEMyRjAwMDU4M0E0MjFDRUM4NzkwMDc0NTA5RTI0NUQ5QjZEMDIwNTAKKzoxMEMzMDAwMDk0NjdENzhCRkUzNkFDNEY3MDVGNDE1QjI3OEI5RDA0RTMKKzoxMEMzMTAwMDhFQkJBMDVFOThEQjQyQkZCRkU4MTFEOUZBMEQ4NTcwRDUKKzoxMEMzMjAwMERGRkQzNzE3NkUxRkNDMjFGMUY5N0I0RjRCRjVEOTJBNzIKKzoxMEMzMzAwMDVEM0NENjQ1NjJFRjBCRkZDQjZEMTUxNjBGRURGNzc2MjIKKzoxMEMzNDAwMDgwNkQyNkFDRjdBQzcxRjVFMzhERjY3QkJCODc1M0UzQ0MKKzoxMEMzNTAwMDEzOTNEM0MxNUU2RUU2NjNEQjk5NjY5MUFEMEZDNDdGMjQKKzoxMEMzNjAwMEMwOEZERTVBMjhBNUJCNURGQTdFMTgzRUNDMjc5RkM3M0EKKzoxMEMzNzAwMEY1NzExNkIzRjlCNzdERUY4RENEOEY1MTNBRjk3N0RBQjQKKzoxMEMzODAwMDEwRTI1NUFGNUNGQzBDRkE4RkVGMjU0QkZCQzFFRjUyNkUKKzoxMEMzOTAwMDdFNkMyNkIwQ0VFRjdEN0ZENjY5NTg5NDMxRjM2RTM5MkUKKzoxMEMzQTAwMDkzQ0NFQkUyNDlFRjdERkJENTMyMEJFREZGQkRFNzVFQjEKKzoxMEMzQjAwMDJERTM1MTA4ODUxMDFGNUE3OUUzODdBRjk1NDFGQzRBNTgKKzoxMEMzQzAwMDY4RkU0REU2NjUwQUFGNTI0MThBOUEyMDRGMEQ2OEU2MzUKKzoxMEMzRDAwMDg3NkU1OTFBMUUwNzZGMDdEMzFFRDgwMkYxQzI1MDlCRjEKKzoxMEMzRTAwMDRCRTRBOEJERjYyNUU3MUYwNUEwQzc2NjgwOUZBNjBGRjIKKzoxMEMzRjAwMERCNDY3NjcyNzQ4OUI5RjQ3Nzk3NTREMUZFQjY3MjhBQTcKKzoxMEM0MDAwMEUyRTIwMDZGOEExNUZDMEE3MkMxRUEwN0JBRDk1QUM4N0IKKzoxMEM0MTAwMEY0RTVENjA3QzU5MDAyNzIyQ0RDQzRDOERERjY1QUU2RjYKKzoxMEM0MjAwMDY1MkE4N0VEM0YwREMxMTkwMEQyQ0UwNTJBMTMyMDdFNjMKKzoxMEM0MzAwMDM3OEQyMEJEREY3NkFEMjkwRkY2OTVERDQ0QzgwNzNBNkMKKzoxMEM0NDAwMEI0OThDQ0Q4Q0ZDODQ1NjdBODE3RTU2RkQzMkM5MDQzRDQKKzoxMEM0NTAwMEFEMTcxRjlEMENFQkY1N0I1NUJFNjg3MUI3MzQ1M0QzRjgKKzoxMEM0NjAwMDgxM0ExRkM0RERGQzE4NzdEQkNERjc2MzlDM0VERTdDOTAKKzoxMEM0NzAwMDlENUVCNkFGQzA1NzEyMzVERUY1REJFRTcwNzY4NDFFREEKKzoxMEM0ODAwMDM0RkU4QTZFQjdCNzg1Rjg2MUJDOTc1QTZDOThCRUQwRjcKKzoxMEM0OTAwMDIyNjI3QUEyQzU4QkU5Rjc1QjI0NEMwNzVBOEEzMEVERjkKKzoxMEM0QTAwMDZCRjFGQjBCMkMwMEU3NkM0QzNCMkM2NDdENDA0NzY3MjkKKzoxMEM0QjAwMDVGRjBCMEZEQzg3QjkyQ0FCRjAwNzRGRTI0RURGNzMyNzYKKzoxMEM0QzAwMDZERjc0NURBRkUzMkFEM0ZBRjM2NkM4NkI4Q0NCQzExQTUKKzoxMEM0RDAwMDJBMkYyNTI4RUZDMkVGRkI2OTdGNTA2RjZDQjlBRDA0OUUKKzoxMEM0RTAwMENBNEJBQkZCQzM4MEM3RDI2MkZBOUQ0MDdGN0Q1ODdGQTkKKzoxMEM0RjAwMDdGQ0IwOTNGMkIxRkFBQjQ1MEZDOTZGRTk2OTUzQkU3RDUKKzoxMEM1MDAwMEQyN0U2OERFQTlGNjQzQzcyRjYxRjU2NzYzN0Y3NDVDNEUKKzoxMEM1MTAwMENDQzdFOEI3ODRDMTczQTIyNDE2M0NEMUY1QTk5NTZGQTYKKzoxMEM1MjAwMDI2NTQ4Rjg4RjBCRkUwRUY1OTI0MEVGNzUxMzgxMjNFQTEKKzoxMEM1MzAwMDA2RjJGODgyQjUxQ0Y0RTc5RTEyOTI2RkEyRkFDRDkyMzEKKzoxMEM1NDAwMDVBQzA0MUZFQTk2NjIyOUE0QkE4Q0FDQkE4RDk1NTRFMUIKKzoxMEM1NTAwMEEwOUQ4Q0RGOTU1NTdDRTg5ODBGRjUxM0Y2QUJFOUE3MDUKKzoxMEM1NjAwMEU0RUEzMEVBOUQyNDNGQzkzN0JCNjlDQUQzODFBNzUzQTcKKzoxMEM1NzAwMDU0REY0NzIyRTcwRDUwM0VCMTNDQUUwNzZEMjc1NjkzN0UKKzoxMEM1ODAwMEM4NzkwMzMyNzE3REFBNUZBMkNBNjNEM0RCNDc0RDIxMEMKKzoxMEM1OTAwMDNFQTYzRkY3NzE3MDFFQjE4MzVGNEI3REZEN0U5MjRCQ0YKKzoxMEM1QTAwMEYzQUE3REY2NDVCNURFRkU3OTY1NDkxQjIxQkZGODgxMEEKKzoxMEM1QjAwMEE3MjAwRUZFMUJFMkU1NjAzRjdFQjQ3RDk0M0Q3N0I4NzgKKzoxMEM1QzAwMEU1NEM1QTU1QTFBQTE0NDBERTZGMTM4RkU4RUREQzZDRTAKKzoxMEM1RDAwMDg1RDJBQjhFMEY3QTlBRjhFQTVFOEMyRjA0MzM2QTc0OTgKKzoxMEM1RTAwMEZBQURDMzEyQ0NBMENDNEJBRTNGRjE4RjhCNDEzRTgwNTUKKzoxMEM1RjAwMEJFMDYzOTNENzc4NEU5Rjc1MUJERkU1QjI2MUYzNTdCQ0EKKzoxMEM2MDAwMDQyNTBENzZCOUZCQ0IxMkQwMUY3RDNBODNFOTJDMEFFNkMKKzoxMEM2MTAwMDA4OTIwQURBM0VCMTdDRUJDQkYwOUQ5NDE4QkYyNzA4NTQKKzoxMEM2MjAwMDhDOEYzMkJEMjEwRUYyOTk5RUMwNEYzQ0IwREY5MDdDQzIKKzoxMEM2MzAwMDQ4N0U4NkNFRjdCNzAzNTYwOUU4QUZFRkU0REE3QTg4OEEKKzoxMEM2NDAwMDFCM0U0QzEyMjUzQkVEMjdGM0E1NEIwMkMwRDE2MTFBQ0UKKzoxMEM2NTAwMDE2ODAwODQ3M0NDRDRCNzg2QTA3NzUwODlBOUNBNDg2REIKKzoxMEM2NjAwMDBGNURGRjhFMzQ1NTJFOTBERjc3NTdEMUZBMDc0REMxRkQKKzoxMEM2NzAwMEFCNTQ1NzhFRDYzRkU4MDg2RTgxM0NGRDkzNkQ1NEFGQTYKKzoxMEM2ODAwMEVGMUQ4REEzNkZFQjk2Mjk0REVDNTVFM0U2MjM5RUNGNkUKKzoxMEM2OTAwMDc2MkJEOTkwQTdGNUREMkNERjRFREJFRjc1MEY3OTREQUEKKzoxMEM2QTAwMDM0OUZDODZERTkzRTkzMDM3OUFERkU5NjZFODVCNkJGQTMKKzoxMEM2QjAwMEVBNjFFNzAwODgyQkU4MDNCOTM3OUExNzY5M0U0MTk3OEEKKzoxMEM2QzAwMEU3NTk5RUQ4NThEQTc3RjIzRjA1RDA0MzFENjkyM0E3NzIKKzoxMEM2RDAwMEIzMDA5RjNGRTRGQTQxQkUzNkJFRkNGNTQxQzg2RkFFRTEKKzoxMEM2RTAwMDI3MTJDNEU3MzI0RjFDQzE3NUY4QUFCOTdDMDRGMEQ2RjIKKzoxMEM2RjAwMEQ3NzI0NjQ0NDMxREZFQjQ3NUExNzZFQTE0MkZDMTc4NjMKKzoxMEM3MDAwMEIyMTBFMjQyRjk2MEJGMTVGNzk4RDA3RURCNEU0OUIwMTcKKzoxMEM3MTAwMDA0RjBERDk1MDZFQjVDOTFDNkZDODEyOTIxREE4RjhFNTEKKzoxMEM3MjAwMDdGQTY1MEJFQjM0RTA3NzU2NTE5MTlENkZCNUJDNDZGNjMKKzoxMEM3MzAwMDAyNzgxMUU1RjAxRkU1N0YyRjAxRkRENDM3NUI3MTRDQzYKKzoxMEM3NDAwMEE1RTM2RERBQzBGQjVCMjVEMDNGQTE1NjAxRDZGRjA0RkYKKzoxMEM3NTAwMDg3N0FDMjc3MjY2M0M3Mzc2OEZFNUE3RjRBMkZGODFCNEQKKzoxMEM3NjAwMDk2MUQ4QzNFMzdGOUZBRDNBNkQzQjRDM0NFRTg2MjkzQjQKKzoxMEM3NzAwMDVCQ0RCQjhERjk3NkQ1OUVGNEJBMTU3NzMyRkRCRUY5NDcKKzoxMEM3ODAwMEM0ODE1QzMwMDBBRjFFOUI4NTdFRTQ2NjBEMUU3MjAwODYKKzoxMEM3OTAwMEUxQjkzQTM4MjdFOTM2M0FERkM2OUZCMkI4NjZFMzQwRDYKKzoxMEM3QTAwMEM5MTI5ODdGRTMxRTEzMDEzRjZFRjMwMEE1MjcxRDdGN0EKKzoxMEM3QjAwMEVDQTM3QzI4NEZBNkYzOTA3QkE2RjI5NDNFMDIwNzBCRDUKKzoxMEM3QzAwMDk2REFFOUZBN0UzRDVGMTYwMTVGRjU2OUI3RUVCNjUxN0MKKzoxMEM3RDAwMEU3RThFQjgyMzgwNUU4QTEzRUFENzQzN0QwRDNBNjM5M0YKKzoxMEM3RTAwMDZGMjEzRDI2QTU5NkZFQTQ5QUUyRUJFOERERDU0QjQwRUQKKzoxMEM3RjAwMEFDQTU5OTE4NUY1MjgyNDMzOTY3NzY2RjQzRkNGRjZCOTMKKzoxMEM4MDAwMDM5MTlCMUJBMTE5REI4Q0Y5OTA3RkY0N0UxOUIyQ0NBREUKKzoxMEM4MTAwMDE1NTA1RjVDNDY1RDIyQTA1MzIxNzAxMkVDMTBBNUMyM0EKKzoxMEM4MjAwMDg2NzFEMjBBNzExOTk2RTdBRTIxQTY2RTBBQ0YxMTI5MzgKKzoxMEM4MzAwMDM5Qjk5NTM2QjUxN0M4MjZCMDUzRjIwMzBFOEM3RjlBRDYKKzoxMEM4NDAwMDEzQUE3NjgwM0Y3QUVDMUNDQjQ3RDZFOTEyRTJDNTUxOTkKKzoxMEM4NTAwMDE0RUFCN0QxN0U2RTcxRjEyMkY4MjI2OTY2RDkwNkVCMkYKKzoxMEM4NjAwMDQ2Nzk3OUU4NTgyOUYwMEJCMzAzOTQyRjE2NjNCQ0U3OTcKKzoxMEM4NzAwMDYwMjJBOTdGOEVCNjNCNkFEQUQ4RkQyMzVBRUY2OEIyRjAKKzoxMEM4ODAwMDg3ODA1REQ5QzE3MUVCNkJGMDdCQzVENEFENzQzRDhFRjMKKzoxMEM4OTAwMEFBRUI2Nzc2RkI0NTU4QUZBMzZFNjM3RTJGQjdGMTQxRDUKKzoxMEM4QTAwMEMwREIyM0E5MkYyRTgxRjlBNTU5RTU5RTE0MEFERkU3RTUKKzoxMEM4QjAwMDUyNUZFQ0Y2NjYyMDlFRjM2REI0RkM3MzdGRkQ0MkI3QzkKKzoxMEM4QzAwMDhERTJGRDY4QUI5QzI5RUFGMjkzRkY0MEE1MzZDRUUzRUEKKzoxMEM4RDAwMDA1RTQ1M0RFRkRDNTg3ODA4RjY5Rjk4RjZENTRGRjdFQjcKKzoxMEM4RTAwMDNENTlCMzA3NTg3OTQxQkVDNkQ3RDRBRjlENERFMTY4RDUKKzoxMEM4RjAwMDFEQ0QyQkI2MjJEOEY3OEFENEFGQTI3Q0ZFRDVBN0NEMEEKKzoxMEM5MDAwMDQ0RUIxRkVDMDlDNzlDN0U5QkMzOENGMzIwMEVCMDY3RTEKKzoxMEM5MTAwMEE2RjE2OENGMzhEQzZDNUQxRDUzRjJEMTRFM0E2QTY3RTAKKzoxMEM5MjAwMEY4MUFDOTMxNjFGOTIyRjNCMzIyQzQwN0FDNTM3ODEzNjIKKzoxMEM5MzAwMDlFRTUyMTREMDFEMENGN0MzNjRGNThCQ0Y3QjAzQzQ1MjkKKzoxMEM5NDAwMDgyQjAyOURCMUZFNDdBNTZBMDdGNjgyRkQyRUQwNzEyNTAKKzoxMEM5NTAwMEYwNjM4REZCODc3QzU0QkVEMDNBOUM2MUEyN0FEODczNzkKKzoxMEM5NjAwMDYxMDU5NzRCRkJGQjZDQUFFQTJGN0E0ODA2QzQ2MzFGNEMKKzoxMEM5NzAwMDRENjU3MkU2RDE4MDcyQkI0NTAyMUExQjY2RTc1NjQ5QzcKKzoxMEM5ODAwMDYwM0FBNEU5RUIwQUQyQzczQkJGMzJGNjVDNDAxOEVEMkYKKzoxMEM5OTAwMEIyM0QyRTkzOEFCNzQ5QkJDMzA1RDQ1RTc2M0QyNzgyNEMKKzoxMEM5QTAwMDFDQTE2QTdFQzc2MUQwNkYxRTFFRTlBNjEwRjg5RkU2MjMKKzoxMEM5QjAwMEI3Qjk1OTFDREVEN0I3RTQ0QkIzQzEzRTdDQjVEMDA0NDAKKzoxMEM5QzAwMEZDQ0Y4QjdFMTFDRUQ5OTUyNzk0MjY4MUREQzY4RkQyRTAKKzoxMEM5RDAwMEU5RUI0QkMyNDAzNzgzNzNFRTA0M0Y1MDAwRkVBNTlGNDYKKzoxMEM5RTAwMDBGREJEOUY5RDA5MTBDRDIwRjcxNjFERTJCMTNGRDNFMTQKKzoxMEM5RjAwMEExQzZCRjNCNUI2Qzk4NTI3RkZFNUREMDFGNUZFQjIyRjAKKzoxMENBMDAwMEI4NEYyMDc4MDM5ODk3REEwOTA3N0NGMUYyQTdFRUM2QjEKKzoxMENBMTAwMDcxOUZFMTAzNDlFQjQwREU5RTYzNzYzRDkwMEJDNjM5ODIKKzoxMENBMjAwMEMyNEY3MDEwRTc3OERGMTY0ODgyNzlFRjc3MUJFREJGQjEKKzoxMENBMzAwMEIyMzQ2NkM3NzZBNjMyRjlEOUQ5QzJFMkEwQzJGNTRGQTAKKzoxMENBNDAwMDYwNUNBN0MzQTJDOTIzRDdEMkYwNUNCMEU3ODM3ODhFMUQKKzoxMENBNTAwMEQ2MUFEQzI2ODNCQ0IyMTE0NTExNzU3MTcyNUJCNjMxRjIKKzoxMENBNjAwMERFMjU1Q0JGOTVDNTg3NTJEOTM4RDFFNzBENUM5Q0Q2RDEKKzoxMENBNzAwMDdGQzFFRUYxRkMwMzJEOEQzRTlGRDA0QzAyMjg4RkM4NjQKKzoxMENBODAwMDEwM0JGN0IwNkQ1NzY1N0FCMkFFOUY2RDlDOUMyRThFQjEKKzoxMENBOTAwMDQzMUYwRjVGMzc5MzkwRUU5Q0NBQzNGQzg4MDBGMzc5NjUKKzoxMENBQTAwMEY4QkE4MERGODk3NzM4QjExNUY2NjUyOEMxNzVDMzNBQzEKKzoxMENBQjAwMDNFRkY1REQ0NEIwRUQyMTM4NjAzNzM1Njg4NTNFOENFRTcKKzoxMENBQzAwMDg1MTIyRjNGMzI0QUZGRjkxMUZFQzA3RDc1MkUwNjdGNzkKKzoxMENBRDAwMDQ4QzY3Q0Y0N0VGQUEzRTAzQkQzN0Y3NzM4N0YyREMwMzUKKzoxMENBRTAwMDNDREZBQjI0MjM2MDg3MTIzMkJDMDhGOEI3QjFEMjgxOTcKKzoxMENBRjAwMDcxRUE4NzQ5OEZDRDA2MDYyRURGMjNFQUUzQzU4RDAzNTEKKzoxMENCMDAwMDk3MTIzNzk0RTIzRTk2MDQ3NkYwQzMyRjk1MUJFMjU0QjkKKzoxMENCMTAwMERBRjkzMDJEQkZGOUM0MDY4QzFGM0U3Q0Y0OUEzMEI1OEIKKzoxMENCMjAwMDE0QzExOEIyNTA3RkFDRDFENjczQzY5QTFGQTk2RkI3ODMKKzoxMENCMzAwMDA0OTUyQ0EwRkY5NzVBRTUyQ0ZBRTk1QjAwMjc5Q0FCRTMKKzoxMENCNDAwMDZBOUUzNDBCRkNCRkRGOEFGNTE5ODAyNzI3QUZFQThGNzYKKzoxMENCNTAwMDM1MzZENDFGRUQ3NkVBQUYwMTlENUU5QzhDRkE5NDE2QjMKKzoxMENCNjAwMEYzQTA5RkI1RjE1Nzc4MTgxRDhFQThGRTdDMDIzNTMzQ0YKKzoxMENCNzAwMDAxQkYxRDhFQzAxNTY2QjQxMzk5QTdGNjRFNDdCMjQ2ODUKKzoxMENCODAwMDM3Q0REREEwRkYwRTBBMTFCOTA4OTMzREU4NjBGOUU0NDYKKzoxMENCOTAwMEI0RTZFRTc2QTY4N0IxRkVDODkzRkM2RUIwODczQUVDOTkKKzoxMENCQTAwMDZBREU0MzMwN0Y1MEU4NDEzRjQxRjlCRTU1MDIzODBGRkQKKzoxMENCQjAwMDNBMDI3RUYwMDc5NTFENTMyNEQwMjc1NUU5MkU5Qzg3MTUKKzoxMENCQzAwMEU1RUZBQ0JEMjAwRjMzM0RDMUFCNjBCNzEwMEZCMzhGQTUKKzoxMENCRDAwMERFNEJCRDkwNEI1QzMxRkIxOUUxNkVBNDFGQUZCMTFGNjIKKzoxMENCRTAwMEZCNUMzNkZFN0I5QzM5QjBBMzM0NTI4RkI2MEZFM0I5QTEKKzoxMENCRjAwMDgwN0I2QzE4RkZEMUVBMUZCNjE4RUQ2NDJEOUQ5MkM2OUMKKzoxMENDMDAwMEUyMEMyMDRGODBBRkI1RUY0MkYwM0VFNDVGMkI2OTQyNkIKKzoxMENDMTAwMEZFQjU3QThERkI0NTFBM0YwQkQ3QTcxOEUyOTdERjRBN0UKKzoxMENDMjAwMEY1RTFGQTY4NzI0MEI4NUU4Q0U1OUQyQTlERUU4NDdENDAKKzoxMENDMzAwMEY0NzFDNzQ5OEUzM0NFMEM5NDEzRjFDNzI5NTNFNTA4MUMKKzoxMENDNDAwMDUxRTM0OTNDOUUzM0QzRjgyNEJFQkMzMEM2NzFBM0U1MDIKKzoxMENDNTAwMDlGOTY2QUYyRUY4ODRBQzdGRjYwMEYyRTRDQTNGRkZGMzIKKzoxMENDNjAwMDUwQTg3RjkxMDM1QjA3NkY4NUY1RjlBMzZBRjcxNkY1NjYKKzoxMENDNzAwMDFEMzgwOUU0Nzc0NTk0NUI1MzUzRTEzQzk1N0MxQ0QyMDUKKzoxMENDODAwMDlCRTU5QkZBMzQzNkRFNTgzOUM2RTIwRkRCMUU5NDUwMjIKKzoxMENDOTAwMDNGM0ZDM0ZCMURGRTE4NzBENzVGNzcxQUU0NTc3RUFBOEIKKzoxMENDQTAwMDg0RkRENUYzMEFDQUIxRkFFQjg5NThGRUQxRkJCNzkzREMKKzoxMENDQjAwMEQwOENGMUZBNzc2MUY5NjhGRkZEQUNGRjk3M0ZGNUUzOUYKKzoxMENDQzAwMDgzQjNBMUZGRTMxNjkzNTVFN0NGNkQzQkJFMzAxREUyNjIKKzoxMENDRDAwMDk1REJFQzU0MkUxQkY5NTYwNkJFRTU3RDY0RDQwRjAyOUQKKzoxMENDRTAwMDNFREZBRkY5NDVDQUEyREQ1NTczQzE2RUQ1RjFGOTZDQ0YKKzoxMENDRjAwMEIwQkYyMkVENzlCQUNFRkIxRDVBRkIzQjc3ODMzRDM0QTIKKzoxMENEMDAwMEE2QkUzM0FBN0VCRUQ2RkY2QUVDM0YxQTFFNEQ4RTQwRTkKKzoxMENEMTAwMDFFRUMyREZFMEY1NjBEM0U5NDQzMDc0QzUxRkQ4RENBNUYKKzoxMENEMjAwMEE1MjBGNkI3NjkwRUIzMzM5MkZFQkFGRTI3MEEwRkY0QjgKKzoxMENEMzAwMDE3MkFDRjAyM0JFQjQxMjJDMTM5RTc2OEJDMjdBOTc0MEYKKzoxMENENDAwMDU4N0Y3RDkyNjE1RDIzRjhCRUM1RjBGRDlGNUJCQzI0REEKKzoxMENENTAwMEE0RTNCN0NGMDRCNzJEMDI3RTRCRDJENjg5MjgzQkIxQ0UKKzoxMENENjAwMERERTEyQzEyRDJGMURERkZDMEYxNTFFMUI4MkQwRTFDMzYKKzoxMENENzAwMEYzRkZDMjcwRjgwQzdDMTk4MUEzQzBGMEZEQTNDMjYxNUYKKzoxMENEODAwMEI2NURDRkJDQUNDQjVCNDQ5MkE1Q0Y5Nzg0NkQ1OTk3NzEKKzoxMENEOTAwMDc1NzZDQjhDMzNBMjIxM0Y3M0M4NkJBODNGRUJCQzY0ODQKKzoxMENEQTAwMDI4OUYzMzVDNjQyOEJGRUQ4QURGOTA5RjM3MzJEQjUwQzkKKzoxMENEQjAwMDdGQzE3NUQ5OTAyRjI3OEIwREY1MkI2RDJCMENGOTg1MjUKKzoxMENEQzAwMEUyNUE0M0ZENjk2QTlDRkM3NkVGMDY0M0JEQzVEMjgzRjcKKzoxMENERDAwMDg2N0E0MjczQ0E3N0MwN0U1OUYwQzEwMjFCRjgxNzNCQUUKKzoxMENERTAwMDVEQTZFQTEwQzVDRjRFM0U2ODRCOEUyMTFGQ0JENDdFODgKKzoxMENERjAwMDQ3RjU5RDM3MEREQjJGMTQ5QkRBNDExRTJFQTRBRTcwMzQKKzoxMENFMDAwMDFCQjVEN0QyRUIwMkVEQTBGN0FCNDUyMjlBRDE2RjBFM0UKKzoxMENFMTAwMEIxRjhDOTA3MkJBQkUwRkI5RDhCODlEOEVEOEVFNDZGOTEKKzoxMENFMjAwMEZGMkI0MjIwNkZDRDk2RjE1QzlCQkREODg0RTcwNjc2NDAKKzoxMENFMzAwMDE3RDc4Q0JCRkZCMDRGQjVERkY3NDRFOUZCNTFGQTMxOTAKKzoxMENFNDAwMEIzRjM5M0QxREY4QkQzMTk1RDFENThCMDhGQzAzRTgxRjIKKzoxMENFNTAwMENEMTVDMjdCM0U4MzUzNzY3QTIxRkZBNTA1REZGNjgyOEUKKzoxMENFNjAwMDlGRDEzNUU1MTEyRkQwNEY2N0NFNTcwREU3RjIxQzA1NDYKKzoxMENFNzAwMDZDN0YyNkJBREZCRjU1RkIyREI4RkVBODBERjRFN0VFOTgKKzoxMENFODAwMDZDODZDRkU4N0FEQUY5RjRERDM2MTYzN0ZGQjhFNkI5MDIKKzoxMENFOTAwMEY4NjM5QUU3RTU3NDY2NjdFREI2ODUzMEZFREY1REY0MEEKKzoxMENFQTAwMEYxQzA3RkFGM0FDRTgxMDU4RjEzMDZFRkUzNzgwRUI5NUMKKzoxMENFQjAwMDJCNDc5MEY0N0E1NjRCRTFERTI4Q0NBN0QzQjdEMzBCOUYKKzoxMENFQzAwMDdBQjdDQkY3ODhDMUZFQjdDMjdDNjI4QzYzRjMzMjNDODEKKzoxMENFRDAwMEVEMTYzRkRFRjkzQ0ZFMjdDRjY3NjdDQzdENzc1QjlDODQKKzoxMENFRTAwMDc5MTU2QkYzRjJBQUY3MjgzRUE2NzkzREY1MTc5RTU3MDAKKzoxMENFRjAwMDU4MUQyRjM1OUREOUE3QkIyNUM2NDc0OUU2QzBDRkYzOUUKKzoxMENGMDAwMDdERjFGOTJGNjlCNkYxOUM1MjgyREZFODA3RTQxNzA0M0UKKzoxMENGMTAwMEM2M0Q3Rjc0NUVDNTRGM0M3RTVENjM1MTUyMDE4RUQ3MjYKKzoxMENGMjAwMDVCRDgzOURCNzM4MDQ3OUE5RTBGNEVBQTgwRkIwQUFGMEQKKzoxMENGMzAwMEMzNzkyRDBFREFFRjQ4MTg2RjFERDYwNkNEMDYzODI3QjcKKzoxMENGNDAwMDkyMEYyNUU5Rjk4ODhGRDU2QjhDRUQ1NjA1OUNDNkYzQjkKKzoxMENGNTAwMDUyRUEzOTAzOEFBN0ZEMTA1RkQ2RjAzNjY2OURGRjRDNzIKKzoxMENGNjAwMDc4OEE0NzZGMzc4QUE3RUVBMjlCQzNEMzQ0RjQ5RDlBNzEKKzoxMENGNzAwMDJFMjFCRDRDODQyNzhEOEVFMkY1RjNGRjJBMUQyREJFOTgKKzoxMENGODAwMDcxRkMyMEZEN0NEQ0Y4RjlBRjQ2M0ZGN0E2NEIzN0M0QjcKKzoxMENGOTAwMDY3RkZCRkUyRTdGMTFCQzRDRkU4Nzk2QjgxRDRDNzNBRTIKKzoxMENGQTAwMDA3RDJFOTE1OTAwRTI3NzM0RDY3MTc4MzlGQkREODhDNjQKKzoxMENGQjAwMEYxQjNENzBFMTczNDkyN0M3RDNEQTYwNzVFNUIzNkE5OTAKKzoxMENGQzAwMDExQ0Y4RjU1M0JGMUFDRDY1OTUzRUM3RTVGNTNGMUYxNDUKKzoxMENGRDAwMDkwRDdBRDlFQTdGM0E3ODJERDdCQjY3QUU1QjhGMzIyQTIKKzoxMENGRTAwMENCQ0NDNkYzOEJDNDExOTk5Rjk5RjY0QkE0MEE4QzlGQTYKKzoxMENGRjAwMDUxQkMxRTFCNjdEREI1NzU4QjM3REU4REFFREJEOUVBMDQKKzoxMEQwMDAwMEI2OUI1QTM3NkQzQzhBQTc5OEVERUVGNkU2REYxMERGNDcKKzoxMEQwMTAwMEMzMDk3Njg2Mzc3NjFFQTBFRjcxNjZCN0Y3MDFCRTY5NDEKKzoxMEQwMjAwMEJGQkY4NEEyMENCMEZGMDlDNkZENTZBRjQ5M0YwMkYwNTYKKzoxMEQwMzAwMEJFRTY2NUYxRjAwMTQxNkFDNDc3NDE1NjJFREIwREU3OEIKKzoxMEQwNDAwMDUxQ0VBRDcyNzMxMEQyRDBFMDM4QTZBRTY3NTk1RDZDODgKKzoxMEQwNTAwMEJCRjMzOUI1M0NEMjlFMjM5M0E1QjFGNThFQTg3NkNGMEMKKzoxMEQwNjAwMEFBM0EwRUVEMDdDMkNCMzlGQTc3M0ZGRTIxQUEzQ0JBQTUKKzoxMEQwNzAwMEZENEJERTQ0MkMzRjE3RTczQ0U2QjdENEY2QUI2QkM3NUQKKzoxMEQwODAwMDZGNEZFQTUzRjBEQzFGMjE1MjhFRkUzRUZBMjg1REE5NTUKKzoxMEQwOTAwMDdDQjBDMjFCRkNCRTk3RDY3RjlEMEI3RUY5NzMxMDRGRjAKKzoxMEQwQTAwMDlERTJDMkYzM0Q4NDI3M0VEOEY3MUZFRDg3OTdGMUJDODAKKzoxMEQwQjAwMEM2RTU0Njg2RjdFODdFNzVGRDg1QkRBOUYxRkI4Qjg3NDEKKzoxMEQwQzAwMDVGNkQ1RURBNzhBNTI0ODA3RTFEQTkyNkUyN0UzNkJFREQKKzoxMEQwRDAwMDE5Q0UzOURDNTk0OTlBNzA3QzVFNDI3ODUyREVBNEZFNDIKKzoxMEQwRTAwMDlDMkY0MjFGMTc0Q0QyM0FCQzQ4QTNGNjMzRjBGQkNBMjAKKzoxMEQwRjAwMEE1RDBDRkMwNTk5M0I4QzMxNzFGRUU3OEYyRTA5RjU0NjQKKzoxMEQxMDAwMEZBRjE5ODgzM0JFMDVDMDE1OUNGQzUzQ0I3RjcyQkFGRjAKKzoxMEQxMTAwMDFERUJFREY3OEVFRUQ3RTMzOEI3M0MxOUI0NDhCNERGMUEKKzoxMEQxMjAwMEJCRDQ3MzY3ODQwNDczNTZFOEM2REZBRkNFM0JCQTlEQTkKKzoxMEQxMzAwMEM3Q0NGNkM3QzkxQjY2QzQ1RjVGRUY0MzM5QjFGOEU3RDgKKzoxMEQxNDAwMDM1RDU1RURFRUYyRDMyRjhDN0I1ODEyRDE2QjA2QjZCOEQKKzoxMEQxNTAwMDk3QURCMDQ4MkUyODk3MThEREE5NzBGNDA5QzE5QzEyMkMKKzoxMEQxNjAwMDU3MDQ0RjcxRTU4RjhBOUY4MUYzNDEzQ0I3QjFCRTk5NTcKKzoxMEQxNzAwMEMzNzNDN0M1REIxOUZEQURERjNFNjg2QUE0RTkxMTk1MkQKKzoxMEQxODAwMDBGNTdDMDNFOTNBRTNGNzcwNjlCNUY1RkFGMjMxN0UwMUMKKzoxMEQxOTAwMEVGRDM5RkJGQTA3MDdDRkExMEMxQjg5RDJERTNFOTNEOEQKKzoxMEQxQTAwMDEwQjcxQkU2ODgxQUU3MzMyRDg3RkQ4NjYxNzU1RkFDRTMKKzoxMEQxQjAwMDkwOTZCNzAyQkM1NUE5QzhFN0VCQjdBRjQwM0ZGRjk2QzIKKzoxMEQxQzAwMDZBRTZFNzBGMDgwNENGMDFCRDM5MkYyMTA0RUYxRDEwRDcKKzoxMEQxRDAwMDlCM0NGODI4Q0RCRkY1ODcyNEQyRUQ4RkQwQzcxMzQyRjIKKzoxMEQxRTAwMDc4MUFEMDQ3NkE1QkUwNzNCMUUyRDM1MjA2RTNGM0RGMEIKKzoxMEQxRjAwMEJBRDgzRTVFM0NCQzlDNTVFNUE5NTZBRjg2OTcyQ0IxOEIKKzoxMEQyMDAwMEVBQUZBQzM2Q0EzNTBERkUxNDZCRjgzRDEyMjM5RTNFRDQKKzoxMEQyMTAwMDRBOEZBMUYxRjVERDJGNTQzOUZENUE5NEJGNTQ3QjNFNUUKKzoxMEQyMjAwMEI2REYzMjM3NDMzREE3MUJBQUQ4ODRGQTRBQjE0QTc4MDEKKzoxMEQyMzAwMEI2NTg4NUM3QTNBQzQ2N0M3RUI4OTQ4ODkwQkZEMzJBRTUKKzoxMEQyNDAwMDNEMERGMERENTU2QjhFOTJDMzIxRUM2N0ZEMzJBNzYxNzkKKzoxMEQyNTAwMDVFNEZGNEZFNzgxQURDNEJDQTJGNjBGMkY3RkQyMjE3RkUKKzoxMEQyNjAwMDlFMTM3RjgwMzQwOTcwRkVBQjhFMjhGMzkxMkY4OTY0NjIKKzoxMEQyNzAwMDAxRkEzRUE3RTI0RjgzRUYxQzkxMTM2NjgyQkM2ODM2MjkKKzoxMEQyODAwMEM3RTRBRkJCNTQzQTNBMTdBODVDODVFN0RGREJDRDc4M0IKKzoxMEQyOTAwMDFFRTE1MjZEQ0E3Mjg4N0YyQjAxOEIxRjhFMzc1RDZBMkIKKzoxMEQyQTAwMDVGOTk3MEJGNkU1RDM1QkRBN0Q5MzVFNzgzOTVFM0VBMTkKKzoxMEQyQjAwMEFGNTUwMUUzN0FGNTA5M0RCOEZGQTc1NDkwQTY2Mzk0RjIKKzoxMEQyQzAwMENFMjY3RkY5RjJERTU5MzQ3RjM2NjQyQTYxRTdEQ0Q4NTYKKzoxMEQyRDAwMDdDQ0Y4NkIyQjQ3M0YxODQ0RkEzRUJBRTE2NUQzNTBERUYKKzoxMEQyRTAwMDYzN0RFNTZGRDhCQ0Q2RDU4NTE2QzI5NkQ4M0Q4NzdBQzIKKzoxMEQyRjAwMEY2Q0RBMkY5ODYwQ0I3QkFFRjM4N0YxRUYwRUJBRjlBRTUKKzoxMEQzMDAwMEM3QjcwN0EyRTlFOTk2MjcxRDg2N0NEOTc5MjJFMDdCNzkKKzoxMEQzMTAwMDE0REI2MkVCODdGN0IyOUM2QzVGODdGN0U3QzIzQUFDMkQKKzoxMEQzMjAwMERCMUVCQjlFM0JEQjg1RjVBRUZFRDE1QzFGQ0JFRjNFMkIKKzoxMEQzMzAwMDkwQzVENjYzN0QzRDE3NTM5RTFGQzg0QTYwRTUwREIxNjkKKzoxMEQzNDAwMEZCNUY5NUU5NTRFNTlEOTgwQkVCQjIzRTBFQkMyQjMyOEEKKzoxMEQzNTAwMDEzMTE4RUI3M0I1NkFGODNGREZCMkI1MUY2NTU0NTI2NzcKKzoxMEQzNjAwMDgzNDNDQTY0RTcyQkFGRjZCRUQwOTEwNkY0QjA5MzEzQTMKKzoxMEQzNzAwMEUxMUNEOTVCNkVGRjE0QTBCRjBERUQ5N0QwQ0Y0RjU3QzYKKzoxMEQzODAwMEVCM0JEMjAzNEY2NkQwRjRFRUYzQ0Y5RDgyRkEwMzc1RTgKKzoxMEQzOTAwMEM0Q0Y0OUYxRjVDMEUxMEM0RDBGNjhGN0EyMzU3REQ4MzcKKzoxMEQzQTAwMDYzMDc3RDA0RkYwQkZCQUIxNDA0MjUyOTE5RDY1RDc5QjcKKzoxMEQzQjAwMDA4Q0ZDNUY0M0E0NDc2MEZDQTNGNTM2RjU3N0Y0M0E1NTEKKzoxMEQzQzAwMEU3QUI0NzZGNkVCREVGQTkzN0RBNDU2N0MxRkVGMzQ0OUYKKzoxMEQzRDAwMEVDQkZBQjgyQjRCNzk0OEU3Qjk1RDI1QjJCOUQwRkY5REIKKzoxMEQzRTAwMEUwODk1QkY1RkE0NkUzODc3OEUzREVBODFENzhGNUU4ODcKKzoxMEQzRjAwMENERDk4MTEzQ0RGMzY3MTlCRTFCQjIwM0RGQUY3RTYyQjcKKzoxMEQ0MDAwMDVGQTkwNEYzRUNCOTM1OTZCQ0Q1RTRGMjJGNTVCOTE4RjEKKzoxMEQ0MTAwMDREMkY1QUZBNEI1NUNFNUYwOThEMEZENzY3MEUxOUUxODQKKzoxMEQ0MjAwMDU5RDc2NDg0NDdFMzhGMkJBMTM2MDdCQ0FCNDU0NzlGOTAKKzoxMEQ0MzAwMDA2RUJBQ0Q5QTVBNDZBRTYwREJEMTcxMjBGQ0U1RkFCMDMKKzoxMEQ0NDAwMDc0RjJBQjY2MzM4RjcyRUYyODg3RjFFOTVGMzUzRjkxNTUKKzoxMEQ0NTAwMDE4MkI2RTE1M0RGRkFCMjY0QTBGNDAxRjRGRjMyODdGNTgKKzoxMEQ0NjAwMDBBRUIzNzlDNEM5MzIyRjRGODdGNTQzQ0ZDQTk3NEE4MzcKKzoxMEQ0NzAwMEM5NTc0RDlGNDRCN0ZGQUY0QTc3OUEzRTlCODhFRTNDMTEKKzoxMEQ0ODAwMDcxRTI4RjA3MzI2Qzg4QkYwREJDMjhDMEZFRDE4MTBDQzEKKzoxMEQ0OTAwMDg5RTU4OUI4QzgwQkY2RUI2Qzc2RUU5RDRBQTg1Qzc4RjYKKzoxMEQ0QTAwMDU3RTI2QUFGMDNFRjgzMjlEREQ2NTAyMTVEQzcyQkJENUMKKzoxMEQ0QjAwMEI3NEREMUFGRTNFQzRDQjYxRUVCMUJEQzNCNjFDQkZBQjYKKzoxMEQ0QzAwMDhBQzlCRjM4MURENkFGODZCREVGNzFFRTdDRjJBMjc0NUIKKzoxMEQ0RDAwMERBRkU4OTIxMTNCQzkwNDVENjZEREI2MDg2RjlDRENDOTAKKzoxMEQ0RTAwMDY0N0E2NEZERjY1N0QxRUVCQjU5QkE1RURGNjRENEU3QzcKKzoxMEQ0RjAwMDVGQ0UxMDU1M0RDMUVDRjAzQkE5NUQwMEU3MDhFM0UxQ0MKKzoxMEQ1MDAwMEExMzA5M0UxRTE5RUZBRTMyODRGRUZERENFQTEzQ0JEQ0YKKzoxMEQ1MTAwMDI1OTNFMUUzNUUzRTg0NzI5OUI0MzNGQjk5RDgyODNFQUIKKzoxMEQ1MjAwMEE4NUNCQTA0OTMwMDdDRkMzNUM3Q0U3N0YzMDE0MUZGQjkKKzoxMEQ1MzAwMEZFQzZGRDdCNTYyRjA0M0IzMDlBM0ZCRUE3RTJFOTJCODcKKzoxMEQ1NDAwMDk5RUEzQjg0RTlDMTNCMzNEMTNGMEM3MEQwREY1QjlGNEMKKzoxMEQ1NTAwMDY3RjBBRURGQkUwNUNGMjc1RkNDNTBFRDZCOTUzRjJGNTgKKzoxMEQ1NjAwMEMyM0FDRDhDQ0MyRjQ1OURERjA1QzdDODM2RDAxNzk0NjUKKzoxMEQ1NzAwMDZGNEM3OEJFRTQ3NTMzQzI3NUY1QUJERjZDODI3QUUyMkUKKzoxMEQ1ODAwMDU0MTdERUY3NDIzQjk2RTZGQjk2Mjc4NDVBNzVGMTNBMkMKKzoxMEQ1OTAwMENEQUVDOUY3MzM3RUE4RTU2NTgzNUREODkwRTkzM0Q4NzEKKzoxMEQ1QTAwMEU5RDFGNkM2RkZFODAzOTZGNkE4NzhGQTRCRTk4M0MzRkIKKzoxMEQ1QjAwMEFBNURGMEE3RUE4MzQ3NTRGRThGRDYwQkEzN0NCQzkzRTkKKzoxMEQ1QzAwMEYxRjFBNUYzRkZCRTEwRjJEMTdDRkNBRENDOEZBNjk3OTQKKzoxMEQ1RDAwMEEyRjlGNzRBRUZERDQ4RDdDQTEyMjIxNjFBRkNBMzlDMUIKKzoxMEQ1RTAwMDEwRjhDMUEzRjQxRkYxOTMzODM4REZGNjQ0RUY0RkE2Q0IKKzoxMEQ1RjAwMDQxOUNFQkQyREVENUVCNjI4REZGNDQxNkIzQjMzNjI2RTkKKzoxMEQ2MDAwMDRBMjY3QzFGRjI3NTQ2NjdEMTcyMjJCQUREMjg1RkM0QjQKKzoxMEQ2MTAwMDg5MkZENkQ2Q0M0MUZGRjA1Q0NENkRCOTcwRUYyRERBRjUKKzoxMEQ2MjAwMDNGMTg1MzlGOTM1MzU3ODE3RkRDQUFGQUM3RkJBQ0Y1OTEKKzoxMEQ2MzAwMEJEMzFFMEY1NjYzMTdDRTYxNzhDOUMwMjdDQkZERkMwMTMKKzoxMEQ2NDAwMEUxN0Q2MkY4RDNEQkU5Nzc5RkY3RkY2MDU4MUEwQkVGQjMKKzoxMEQ2NTAwMDY4NUVGMzRGQjZCM0YxQTJDNzc5NTc1REI3NTFGRjQ0ODcKKzoxMEQ2NjAwMEExRkUwOUM1RjM3MEFEMzkxMUNFQjE2QUZFQzlCMEYyQTEKKzoxMEQ2NzAwMEU3RjU0RkRFMjQyM0ZGMzAwQkQ2Rjk2ODZDQjgxQ0VBQkYKKzoxMEQ2ODAwMEZDQUYwOEMxN0Q3MzI4MUM1Nzk3OThGRDBBRjA4Qjg5NjEKKzoxMEQ2OTAwMEI2RDNGOTI1RDFFREZFQThDRUU3Q0RFRDM3Mjk4RkNFNTMKKzoxMEQ2QTAwMDFCRTNDOUYxRjg2RDE0QUUzRjkxREZGQTg0OTExQ0UwRTEKKzoxMEQ2QjAwMEZCMzc4RjdDNzBGMTUxOThDRjExMDdCRTNGMTZERENGM0QKKzoxMEQ2QzAwMEQ3QjJDQ0FBN0ZFMDQwM0VEMEY0RUY4MEQwQjNGOTA1Q0EKKzoxMEQ2RDAwMERBRUVDRDNCMzJGRDNCODg4RTJGMDhFNTBCRkFGREMyMUEKKzoxMEQ2RTAwMDFGMjk1RkY4NTFCRTIxMUZGN0Y1M0FFQjYzRjkyOTgzMzMKKzoxMEQ2RjAwMEFBM0YxNDFEQjcxMTdCQkZEMTA0N0VCMTRDRkMxNjdEMkYKKzoxMEQ3MDAwMERDRTkwRDc1REQ3RkExQ0FBNUEyMkNBNjNGRUZBQTVEQkQKKzoxMEQ3MTAwMDIxNDBCQ0U4RkVEMTc4MTE0MUU3NDI5QzlBN0QwNEZDOEYKKzoxMEQ3MjAwMENCRDdENDdCMDJDQUM2ODQ5OEYxREU5OTJBNUUyNzhBQjkKKzoxMEQ3MzAwMDFGQUNBOTMzRkFGNTc3RDUxQUU1QzczQkExRkM1MTNEREIKKzoxMEQ3NDAwMDUyMzhDRTdFOTQ0NkJGRjFDNkJCNTFGREQxMTdCQUI5NEYKKzoxMEQ3NTAwMEZEODA4OUU2RjdEOUFDMUJEMzFGQUI0OEQzM0M4QzczNTMKKzoxMEQ3NjAwMEQwRjU4MUI0OTYzNDREN0I4MUMyRjNDRUExOTUwOTYwOEEKKzoxMEQ3NzAwMDQ3RkQ4MjkwNkFCNEUzM0ZGOEVDMzRCRDVEMTI1NEYxOEEKKzoxMEQ3ODAwMEZDN0VFRDY3RUYwMDcyNzk0MzY4OUExNjRCRkY0NEM3NDEKKzoxMEQ3OTAwMDY5N0UxMThBN0QyRUUzMkU1NUFFQkVBMUREQTdCODJCODIKKzoxMEQ3QTAwMDc2M0M3RjhCM0FFRTFCNzVFM0YzNEQ3NERDQTY3Njk5REQKKzoxMEQ3QjAwMDcxREU0QTE2QjM4N0RFQTg2QjczMDQ5OTVGQ0RDNkZEOTAKKzoxMEQ3QzAwMDFCMzYyRUU4MkRCRDVEQUE2NEZENzlGNEUzMzBDNEVGNkQKKzoxMEQ3RDAwMDYxOUNFRDg0NDAzQ0E1NEY1MEE2RUFDRjVEQTU2NDMzMjMKKzoxMEQ3RTAwMDNDRTQxNzhEQkYwRkE1RURBNzY4RjVBMkVEQUM5RjY3RDAKKzoxMEQ3RjAwMDRBODY3QkIzQjVDQjhDNzBCNTY5RjYyRDExMzEwRTcyQUMKKzoxMEQ4MDAwMDE1RjRBNTI3QTIyRkVGQjRGQTFGMDQzQTIwMkUwOUNCNTYKKzoxMEQ4MTAwMDRGQTg3OEJGQkJGRURGMkMzMDdGMkEzRjNCRjAxRURCREEKKzoxMEQ4MjAwMDU5OTMwOEYyQjNFQzdDQzhBMkM3Q0I4NTFCRjRBQjJFOEUKKzoxMEQ4MzAwMEE4RjZDMjQ0NzIzNEJGNjgwNEU1REJGQjIxMTdERThGMTMKKzoxMEQ4NDAwMDc4RjMwQkJGQjNDNEVBQjdGNjdBOTZFMTFDRjFGQTQwNUQKKzoxMEQ4NTAwMEVDQjg4QTk4MjU4QzhCNjczMUNCODhCRkY1RDc3M0YxRUMKKzoxMEQ4NjAwMDVDNzAzQ0ZCRkYxMEM4QUY5OTYwOEYxRUU5RDBEQkZGRjYKKzoxMEQ4NzAwMDRGNjU0OUFBRkRBRkNBMzM5RUQ5RkRGMUUyQUY0MzJBRjUKKzoxMEQ4ODAwMDlENEQxNDdGRDVGNEIzNTYyRjdBRkRCNTM0NUE1RjBFRjMKKzoxMEQ4OTAwMEFCRkMxQzVERUY1MkQ2OEREMUREQTgxRDEzODdFRUUyRTcKKzoxMEQ4QTAwMDhEQUJGOTFGNUFEQzM3QkY5OEI2OEZCMTJGMzM2NjFDOEEKKzoxMEQ4QjAwMEI1NUVGNDM4NkY0NkFEQ0YxODNGMjI0RURDMkUyOTlCNjMKKzoxMEQ4QzAwMEUxMzcxODI3NkU5Nzk0Q0RFMjc2NjcwOUQzOEI0QUM4NjMKKzoxMEQ4RDAwMDg5N0FFQ0NBRDE3QkY3ODFCOUY3QzBFMkNGOUQwNkY1MTIKKzoxMEQ4RTAwMEQ2QThDNjZCRUFFQTVGM0QwNTdFQUFFNjU3NDRFQ0YxOEUKKzoxMEQ4RjAwMDYwMUJFQzkzNUREREMxQTFCRDExM0Q0RUI0NURERTA4NDIKKzoxMEQ5MDAwMEVGMTU4MjIwNTVFMzA3NDU2NjE5RTNENEU0MzE3NkJFNkUKKzoxMEQ5MTAwMERGRDNCQzFBRUQ0QjJEM0VERDI3MDQ3NjI0RDBFRkI3QzQKKzoxMEQ5MjAwMDZDRkZCNzZEQTA1RjM1M0ZGRTJEOEJGRjQxMTY2NzY2MUMKKzoxMEQ5MzAwMEY2RUU4NTVFMTdERTczREQzQUVBRkZGOTMxREUzOENBQUUKKzoxMEQ5NDAwMEZGNkFGQzcxQTJGNTE4OTUzNzcxRDY2MzIyNzkxMzJGRkYKKzoxMEQ5NTAwMDJFQTJBNUEzRkIyQzgyNTRGODBBOUM0QkU1MTJGREJEMTgKKzoxMEQ5NjAwMDM0QUQxMTA4MEY3OEE4NTlDRUExOUY1OTIzQzg0QjMxNjcKKzoxMEQ5NzAwMERFRkNBQUM5MDQ3OURGNzJERjZFMzgwN0JGQjJEQTIyOTMKKzoxMEQ5ODAwMERCQTVDOEZFNEJFOTZCMEQ4NUFGODA3RjQxMjcwQzdFODAKKzoxMEQ5OTAwMEVDQzAyRkE1N0Y4MkZCQzFBRjJGQjY0QkIwM0Y3Mjc2OTQKKzoxMEQ5QTAwMDlFMzRFOEExRjlCMzc3NzAyMkQ4M0Q1NThCRUYzNzRGRkQKKzoxMEQ5QjAwMDgzRjE1NjcxRjgwRThEQjM5OUE4RTdCNTZGNUQ1RTU5ODYKKzoxMEQ5QzAwMDQwQzgzNzAwNDREREJEOEYxQTZEOUY0NjU5QkIwRkVFMkUKKzoxMEQ5RDAwMENENEU0RDFEMzBCOTI4NEFCRjdCNzhFRDNFMUI4NUFCM0YKKzoxMEQ5RTAwMEEzMzVFMDg1RkI3OEY3NjU5N0VDODNGQjc4Njk2OUYyRUUKKzoxMEQ5RjAwMEQwMDI2QTQ3MURDQzlFQjExQ0YyMDM3RkEzRjU1N0JBMzMKKzoxMERBMDAwMDBGRUVERkJENjgwQUZBMzg1QUZFODNFQzY1Q0I3OUQ4OTEKKzoxMERBMTAwMDhGOThBNDhEQkYxRUNCRUY1QUYyRTBCMTZEQjRGRkI3NjMKKzoxMERBMjAwMDBGNkY1OTBFNjdEN0NCRUFCNEYxMUY1OTVFQzk1M0ZBOEQKKzoxMERBMzAwMDlGQUJFNTFGNEI4NEJDQzc0OTIyRkI0Q0IzMDlCMTQ0RTMKKzoxMERBNDAwMEVFRjdFMTc5Rjc4MUQxRkI3QzJEQ0JFMUZDRjhFQkU1M0EKKzoxMERBNTAwMDREOTU3MDhGQjNFQ0NCMURGQjhBQTcxMDMyNkI1OUI5NzMKKzoxMERBNjAwMDI4RDNGQ0RDOUMyRjJGNzdDMkZFMzFBMUY0NDhGMzcyM0YKKzoxMERBNzAwMENFNTcxMDdFOEZEOUE0RjYxRkRBMjc2NzAzM0NDQTU0MEQKKzoxMERBODAwMDI4RTc5NDY3RjY1NUJCRTEzRUMyRjA2OTIwQ0I4NzlCM0YKKzoxMERBOTAwMDdCNkM2OTg2N0IwOThBMENBNjg5NzBBMjNDOUM4NUUwMTgKKzoxMERBQTAwMEE4RkJEQUQ5RTE2OUVDQkU5RDlBMkY2MjcxOEFEMUJDREMKKzoxMERBQjAwMDk3RTUwNzc2QzRCRTdGRjI2MTBFOTM1RjAzOEVEOEU1Q0IKKzoxMERBQzAwMDNEMkFERjZCRkJBRjQ5RTc4OUZDNkMwQ0ZFRkYzQ0M0RDEKKzoxMERBRDAwMEZENjc0NkY4RTkxNEM0NDMzQ0Y4RTQ1QzUzMkJFQ0MzRkYKKzoxMERBRTAwMERBMTg5Q0YxRjY3MUY3QTlFMzE0QjQyNkUxM0I0NUNCQjMKKzoxMERBRjAwMDlBOUNGOEFFQ0UyNDNGOTMzNzk0OEJGODk1MjBGRkNEQjcKKzoxMERCMDAwMDI2ODQzM0Q1Q0NFMTdCMjY2OTBFMTIzQzRFRDNENDE0NDcKKzoxMERCMTAwMEY2QkVDOTMyOEE2QTc4Nzc2NEUxQTRDMDUxM0NERjlCQzMKKzoxMERCMjAwMDlFNTFEMjA2RTdFQjVBN0ZDRTgzMURBNkI1MUYwQkE3RTkKKzoxMERCMzAwMEI4MDVFMDRDMzVENzk0NkMyOUQ2RTFBRjk4QzE0REQ3RTQKKzoxMERCNDAwMDVENkQyNzdGMTNERTdCMTkxODlBOUEwRjc2NzU2NUI2N0YKKzoxMERCNTAwMDY0ODhDQjk0MERENTU4RTA1Q0VBRTUxQzU1NEU0OEFDODIKKzoxMERCNjAwMDdENkEyNTkzMkIyMzVCRDRGNzJBNkNGRTEyNDM1QzVGRkUKKzoxMERCNzAwMDlEN0Y2NUU3QjIyRjQxQkQ4NjIxMEI4MTczODhEQjhFQzcKKzoxMERCODAwMDk3RTMzQkZERjFGOEJGMDFDRUJCRUJGNDc2MDMxRkM2NzQKKzoxMERCOTAwMDczRTYwRDcwREU3RDA2RjRGNzUzMDFDRTM3NDIzRkUwQTkKKzoxMERCQTAwMDFGQzBCRDBFQjA5QjUyREI2MkFGQjcxNjU3NkVCOEVFMEEKKzoxMERCQjAwMDI2Q0EwQ0ZENzc4NkFGNDhGRjFFMkM5RjY4NUU5MUZFM0IKKzoxMERCQzAwMDhDRjdGOEM2RjZBN0RFRTdEM0YwQ0VBQjc4MTc2MkMzQzIKKzoxMERCRDAwMEY5QUE0Njk3MTRERjI2MUQzREFENTJFOThCNEEzRjdDREEKKzoxMERCRTAwMEQ3RjdDMkYyRTI1RUZEN0IwNTg0RUM2MEU3M0E3OEJBRDMKKzoxMERCRjAwMDhFNjA0RjBFMzlGMDdERTAzMjlFQzlDN0IyQTE2NDUxRUMKKzoxMERDMDAwMEUxQzZEMjg1QjZBRTAzQzk0REY4M0VEMUM4MEEyRUU2QUMKKzoxMERDMTAwMEVGMEY5Q0Q3RTA1MkVEQTdGNEJBQTA3OTgzMEUzRThEQUEKKzoxMERDMjAwMEZFMjNGRDBGN0Q0MUUzOEY3NUM4Qjc3QjE5N0M2MDZGQzQKKzoxMERDMzAwMEMwM0NGQ0UxNjlGQTczMjAxQUZDQjc1M0Q5ODFFNzQ5NkIKKzoxMERDNDAwMERCNTRGQ0RGRTEwQUY1NzIxMUJDOERDNTdGRDYwNEVCMTUKKzoxMERDNTAwMDk5OEJFNTY1NDMyNzA1OTg2NzQzMUMzRUZENjUwRTNCQTAKKzoxMERDNjAwMDI3OTI3RTNFOUMwOEU3MDM5NjY2MzNGRDM1RDAzRkMzN0UKKzoxMERDNzAwMDdFMUJGMEM1MzIxM0UxMjQzNjZGQjAzM0NCMzRGOTRBNDIKKzoxMERDODAwMERFRkI1OTA1OTVBRkU5QTM3OTJBNUYyNTU4ODc1MTc5QkQKKzoxMERDOTAwMDFCQjZEOTIyRjU3RjlBRjNERUYyNzZBQTNGM0M1Njc2ODAKKzoxMERDQTAwMDFGOENEQThGMzZBMkJCODc2OENENjFGMURCRDlDMUQ4NzIKKzoxMERDQjAwMEZCRDZDMzM5MDkwNkI5RjU1NDczMjU3OTlCQ0U2RjY1MzgKKzoxMERDQzAwMDM2RDNFN0IzODcxNTdDMjc0OUUzRUI2OEI5NTQ5OEMzOEIKKzoxMERDRDAwMEQ2RDE5N0MzRUNGMThGNUYyRTcxMTNDOEE1MTVBQTVDM0UKKzoxMERDRTAwMDYyRTVDNDEzNjg4MEYyMzQ5MzdBMkY0MTY0RUJCRUYxOEQKKzoxMERDRjAwMDQ3MzMwQTIxMEVCN0Q1NkI5NkUwOUVDMzRBQ0U5RkYzRjkKKzoxMEREMDAwMDJEM0E0RUFENERFQTQ4OTAyMkY0NTE0QjZDOTIwQkYwRjcKKzoxMEREMTAwMDRENDc4MDdCQUYzNUNCRUM5ODg3M0ZCMDNCRkVCRDg3NEUKKzoxMEREMjAwMDYzRjQ0N0E0QTREQTcxRUM1QTBEOUVBRDVFMDFDN0RCMjMKKzoxMEREMzAwMEI4QUIzMDI5QTg4NzkzMEYzQzhCRjEzREE3MEFBNzJEREMKKzoxMERENDAwMDRBNUZGMUM2N0M1QTVBQjhEMTY0RDY5NUJCOThGRUVBQjAKKzoxMERENTAwMEY2Q0FFNTM5NjA1RkFBRTc5QkEyRURBMjdCQjIzOTgzRTAKKzoxMERENjAwMDFDRDZFQ0EyREY3OTE5OUY1MEZFNDVGRjMxOURGQThGM0EKKzoxMERENzAwMDA0RUU3QkY0MDdGMDNDMTgzQzYwNTQ4OEY3NzVEOUZCM0YKKzoxMEREODAwMEM2NkYxRDI3NzNDMTRGRDJGQUI5MkJBN0Q4RDA2RkRENEMKKzoxMEREOTAwMDZBQkE0ODlGQTRDQzY5QUI5NDJGRUJFNEQ5MTlGNTdERkUKKzoxMEREQTAwMDdBNEEwRjMzODE1RjU3RTcxMDYzM0I3MzIwMUJFRTk1NzAKKzoxMEREQjAwMDkzNzRBQjFGRTRDRDI5MjE3MDE4RDc1NzI0NkU1OERGMTgKKzoxMEREQzAwMDg1RTYyRDg3OTEyRUNDQzRERDg2RTdBNDhFNjBGQkVBMjQKKzoxMERERDAwMEJBOTE1MkI0NTMzRjMwODc0MUVGRkMzQzM3MDNFMzM5RUIKKzoxMERERTAwMEE5NEU0NkI3QTdFQzRERDg4RTI3NTIzMkNBMTE1NUVFMzAKKzoxMERERjAwMEZEM0M3NzBBQkU3RkExQzlDRkM4N0QxNkFEMUY1NjdFRjgKKzoxMERFMDAwMDhBNUI5MTBERUZDNDlFNEE5RDVDRDJDNjE5RUQxREIwOTAKKzoxMERFMTAwMDdGMjJGNkQyRjNGQjZFQTdGQzM4QUJCQTNGNEM2MUE2NkIKKzoxMERFMjAwMDUyRTVBNUU1OEZEMkZBNUI3Mjk4RkUzQkU1MEIwQ0MwN0MKKzoxMERFMzAwMEI4QTdEQzQ0MDRGODY3MEYwNzlGODVGQzYyQUYxM0RGQzcKKzoxMERFNDAwMDcxRDNENjIzQ0RDNDdFMUYyNjRERkRGRDE1RTAxMzQ4QUEKKzoxMERFNTAwMEM1NUNDNjZGODc3M0Q5M0FCRUEzRTZEMzEyNjNGRjlFMzMKKzoxMERFNjAwMENDN0ZBOEY1N0FFMEZFMUZBREQ3NUQxRUZCREVFODFFNzUKKzoxMERFNzAwMDk1OEYxQjZEM0RENTcwOTU1RTc3Q0YxM0VGMkRGMzg0OTUKKzoxMERFODAwMERBNTVCNENBREUxQ0Q2MEZENTY3ODhBRkNBQ0UzQUZDQzUKKzoxMERFOTAwMDNEQjFGNzg3NTZFMUJCQUVBM0JGRjMwMUVGNTREMTc1OTcKKzoxMERFQTAwMDBGOTM5NUZCMDFFRkMyMkZDQzc4N0VCM0MzQzJFODUyMkIKKzoxMERFQjAwMDcwMDc0NUI4ODc5NEUyOENFREVGN0U1Nzg1MjdDNUNDNzcKKzoxMERFQzAwMERFRUJENkVFMkY1OEQ0RkJGQ0M3NTQ3QjJDRDE1QjhCRkEKKzoxMERFRDAwMDcyMURERTU4OTM3Q0YwMkVEQjA4REVDRkQ1RDYzMUZBRUEKKzoxMERFRTAwMDNDQUU0NUJEQzc3RkYzRjY0MzQ5MUNGQkExRDQ2MDNGNjAKKzoxMERFRjAwMDY4RTM0NkRCMTExN0UxM0Q2RTVEQkM3QjlERjdEQzQyQkMKKzoxMERGMDAwMEEyQUJGRjY5MzJEQzAxRkQ3RDdBNUI5NjIxMkUxMUNGMzkKKzoxMERGMTAwMEZFRjg5MTJBNkZDMTVFNTA2MkMyMjUxOEJFNUZBNDdFRDIKKzoxMERGMjAwMEEwQTIxRkZGMEExQjNGMzJBRTkzMjhCQTcxRjdFNkM4QzIKKzoxMERGMzAwMDNGQ0VDMUY4Q0Q1QzExREZCMUIwMTMzQzBGNUJBNkJFODQKKzoxMERGNDAwMDVGNDdGNTEzQkU1NzQ4RjU1MjM1Qzg2RkNEMkYwMkJFNTcKKzoxMERGNTAwMDE3OTM4MEFGQ0JDRkU2QTRFQUY0QTREQTJFNUExRURERTUKKzoxMERGNjAwMEExREEwMTc3QThGQTI2RTlCQzY2MzczQTI0OEU4QkU4NTUKKzoxMERGNzAwMDlEQjE3QThCNTNFREU4NjhGOTE4QUQxNzhDNzYzNUE1MEQKKzoxMERGODAwMDVCNDU2RjA3OENFMTE3MTVBRjM3NEYxRjkzRTJEMEM3ODIKKzoxMERGOTAwMDJEN0YxMUZCQjI2QzZFRDAzQzBERTQ2NjM1NDc2MDFGREYKKzoxMERGQTAwMDY0NTY5NTUxREYzQjcyOTlERkUxQzg3NTFBQ0VFMUQ2MTAKKzoxMERGQjAwMEQ0MTlFQjI1NDIzREUwQUI1Q0U3MERGOTI5N0E3REM0MkQKKzoxMERGQzAwMDk5NDFFRUIxRkUzNkFCRjRFMDdCRjdBQzAwRUYzNzJFQjMKKzoxMERGRDAwMEM5NjVGNjUwNDk5RTlDOUE0QkQzMjM3RkE4RUM4M0RGRkEKKzoxMERGRTAwMEExMTg2OUU1NDlBRjA3REFDOTdEQzMxRTk4OTc0RDA0QUEKKzoxMERGRjAwMDNGQjU3QzZENTVEMTExNUE2RUY5QTkwNURGOUQyNDI3RDcKKzoxMEUwMDAwMDYyRkJGN0FFNjY0RUJFOEZGMjczQkUyQUU3MUEzQzZDMTcKKzoxMEUwMTAwMDVFMEQ5RUIwNTA0MEUxQzg2QzYwRjA2NEY3MEY3MkJDQkEKKzoxMEUwMjAwMDRFRUU2NUQ3QjM3QUM1QjkxNjgzRkVGMTQzOUVDMjc3MkIKKzoxMEUwMzAwMDZCQUUxNkJGMENCNUMyRUZBMTY0RDdDQjNDRThCQkNDMkUKKzoxMEUwNDAwMDdFOEVBOEVGNkVFMjdCQTk5OTdFRDZCRkNCMUZFMkVFNTMKKzoxMEUwNTAwMDJEOEVDQ0JCQ0JCNEEyMThGNDQ1NTc5QUQzMEZGQUUyNUQKKzoxMEUwNjAwMDczNzlDMTMyOTg3N0MzODU3MDE4RDAzNkVCQzIxMDBGMjAKKzoxMEUwNzAwMDc2REZGRTNDNzkxNjdDRDdFNjI3OTlDNTRDRDgxRjc3MEEKKzoxMEUwODAwMDVFNjBGMEY1NDREMTNGMjFCQkQ1NzVFOTY1RjBCOTAyN0EKKzoxMEUwOTAwMDI1MDA0RjVBQTI4NEVGMTBEMUJGN0NEMEFCNjlDOUFBMkEKKzoxMEUwQTAwMERFNDgyMzQxNzgyRjg4RDg2ODNEQjA4MzFDQjQ5RUZFOUIKKzoxMEUwQjAwMERFMjYwOTk0QzIzRTQxMjg3NURBNzREMDczMEIxREZFMkEKKzoxMEUwQzAwMDkzMzZEMEFGRDM3REQzRTE1REExMTcwRUM3OEVBN0Q3MEUKKzoxMEUwRDAwMEFBN0E4N0MyN0ZBNzFFRkU3OEZDMzFGQURFQkE1QUNGMzEKKzoxMEUwRTAwMDEyQzc4RkQ2RThERTU5MUREQjVFQTU5QTAwQ0JDQkQ3RDEKKzoxMEUwRjAwMDdBRUU4NkY5MzRCNDBCRjgxQjVEMUFERUY3RTcwNTM2QzUKKzoxMEUxMDAwMEU2QTZDMjNBMURFMTgwNUYzM0ZCQ0I5MUFFMzIxNTlFOEQKKzoxMEUxMTAwMDgwNUREMUVFQzgwREMxM0JCMkVEQzk5RjRBMDdGQ0M3NzcKKzoxMEUxMjAwMDgzQkJBMUQ5MkNERkE3RTdFNzc2MDFEN0UzNDhENEY5NzEKKzoxMEUxMzAwMDM1Q0RDRjc4MkM5N0U5QTNEMzc5ODFBRDMwRkVFNjEzQTYKKzoxMEUxNDAwMDA3RjA5Q0UwODM0NzJGMDlFM0JERUI3M0EzNzhFM0VBNzQKKzoxMEUxNTAwMDk5RkZEMkIwODZCRDk3NTFCRTk2NDczQURDRDQyRUUwRTcKKzoxMEUxNjAwMEJCRUEwRENGMUUwRkUzN0VGMTc2ODJGQkEwMERGREM3NEIKKzoxMEUxNzAwMDRGQzMzQkFENTkwREYyNENGREVGMTI2NDM1QjA3N0UzNjAKKzoxMEUxODAwMEQyMTI0NjdGMUY1NDAwQkQ5REQ5QkZBMjAxRTk1QTI0NzcKKzoxMEUxOTAwMDIyNDEzQTBBQTJERDk1NkQ2M0Y2QTg4NkRGRDM0MjM4QTQKKzoxMEUxQTAwMDE3RTI2N0E3NERDNERGNDZDQkFGNTk5NDIyODlFNkFGOEIKKzoxMEUxQjAwMEY5MUM3RTc4N0ZFMUVGOEZCRjIxM0QwNjc4ODZCODE4ODUKKzoxMEUxQzAwMEJDN0I5MDE3RkMxMkUwQTNCQjk1OUQyN0VGNUU0OEVENEEKKzoxMEUxRDAwMDFFNUE2RkExOTM2Qzg1RkNDMjM2MTcwMUZFQjg1MTNDRTQKKzoxMEUxRTAwMENDOEFBMjhCNTlEQjE5OUZGQzI4Mzc1MUU1NTc4MkVGNjcKKzoxMEUxRjAwMDI5MURDRjRENTBFREE4NjAxRERBQUY3NDFFOUQ3MzEwMjAKKzoxMEUyMDAwMDJFOUM4Nzk4MkI3RjE1RTk1NjRDQzY3MTMzMUJDMjlDRjgKKzoxMEUyMTAwMEZFRkU4OTk2NDZFODRBN0UzNjM3RjU2NkUwRUNDNzdEMTUKKzoxMEUyMjAwMEM2NERBQTlDMjk1RjdCOTQ3QjVCNDcwNzJGRTY5QTkxOUEKKzoxMEUyMzAwMDZFMzI5RjNEQzI4MTdGNDhDQjVCMTc3QUIwM0VDNjA3RTYKKzoxMEUyNDAwMDMzOUY2NTdFRDMyNjVBN0VCRjQxQUU2Q0MwRjk3NDM5QzgKKzoxMEUyNTAwMDk4RkQ0OEU1Q0E0OTgwRUI5NDY5MEJCRUVGNzc2QTNBQUUKKzoxMEUyNjAwMEMxNzc2NkVGQjgxMDNFOERFMjU5ODVGNzk0QzBENjkzMUEKKzoxMEUyNzAwMEE3Nzg2OEE1Rjk5RkU1NEEzOEZFNjkyMTc4MUZBQ0ZCQUQKKzoxMEUyODAwMEU5NEM3NkJGQkJDQkI0MDNERjNCRDVGODNFOUE0RjdGNUEKKzoxMEUyOTAwMDk2Q0JGQ0M5Q0MzNTQ3Mzk4ODI3Nzg5Q0NDOUVENEUwRjYKKzoxMEUyQTAwMEQzRUE5NUU0NTU5QzA1RkNDRUFBMUU0MjNDMzRBRUUxNkYKKzoxMEUyQjAwMEQ5N0QwRDE1OUU4NTQyQTAwMEZDQjQ2MUI1QkY5M0FCMUUKKzoxMEUyQzAwMEJGNkQzRTQ0RTE2QjJDRTY5MDlFOUZGQ0JCNTc5MTJFQTgKKzoxMEUyRDAwMDFCN0IzOEY2QkI0MTNEQUYwQUFCNzRGRUQ1QzFFRkJEMjkKKzoxMEUyRTAwMDhBN0E2NUU5MDA4QjFGMzQwRTFDRTdFRjc1ODFCRTM5MTEKKzoxMEUyRjAwMDg5RjREOTQ4RTlDRjVFMEFFQkM2RUNEODZCOTY3MDJFNEMKKzoxMEUzMDAwMEU4Q0I2OEZBNzQ1NjMzQjkwODMxRDc0MkY2MEUxQ0VFRTIKKzoxMEUzMTAwMEZGODZENkRBRDBFRUQ3RTRBRkE4QzIwOUVGMDg4MjdDMzgKKzoxMEUzMjAwMEZEOERDQUVGNUFGRjExN0ZENUVFMDdGQUY2QkQzQkZEMTIKKzoxMEUzMzAwMDI0QkNFQkQ2RThFN0ZDNzAxRUY5M0Y0NkY1MDk5M0Q3RkQKKzoxMEUzNDAwMDUyMjJGQzc2NjBBNEZGNjhGQ0U1RTYzMUY5MUE0MzhGOUYKKzoxMEUzNTAwMDdDMTg0QjhGNjg3QUQ2Rjc3NDA1QkU5N0FDQUQxRkFGQUIKKzoxMEUzNjAwMEUyN0Q1NEJGRTdCMUZCNTc4OTc5QkMwQThGRUM4NTM4NTEKKzoxMEUzNzAwMEI2NDRGOUI5QkIxNERFRjUwQjE0NEI4MDlGNTRBNzFGQUMKKzoxMEUzODAwMEUyM0I3RkVGN0U1RERBQTBDM0Q3Njk4MUYyM0JDRDlGOTAKKzoxMEUzOTAwMENFNzcyMDNDOTQyRjkyRjI3NEVCRDc1MENDN0U2N0VBNzQKKzoxMEUzQTAwMEM5RUZBRTQwQkMzNkMwREE1MUJDMzYwNEVGQkIwRkYxNEEKKzoxMEUzQjAwMEVDMjVFMjMxOTAyRjQxMjZCRjFBRDZEQ0M1REUwNUQ3MDkKKzoxMEUzQzAwMEY0REY3MzFDRTJCRjQxNzFFMTNCRDc0QkZCNTcyMDdENkIKKzoxMEUzRDAwMDEyOEZERDVGQzhBMTVDQzM3NUQ2Rjg0Q0NDRDVGNjFEOTUKKzoxMEUzRTAwMEQ4QkI0M0Q0QUY2Rjg1Nzg4OUU2RDcyN0Q2MDU5NDA0ODgKKzoxMEUzRjAwMDY5MkM5RkE2QTg3RUZENENENUFGQjdDQ0I2RkQ1OUZEQzQKKzoxMEU0MDAwMEZBNERDRDNGNDFGRkU3MjFFRjhGMzBENUY4ODRGQThERUIKKzoxMEU0MTAwMDA2N0VCQTJEOEZEOTJEOTI5QTU2RTQzMUJFREM1NERBOUQKKzoxMEU0MjAwMDhGRjRCRkU5NzIxM0YyOEZBQjlBQzkxMUQ3MDVBM0ZDMjEKKzoxMEU0MzAwMEQzRTI2MEQ0ODM2Mzc0RThFQzVGMDRGQjExMEJCRkMyQ0EKKzoxMEU0NDAwMDg5MjAwN0UyQzFGRDE5QUVFOTY3NzA1RTg1MUM2N0U3QTgKKzoxMEU0NTAwMDI4MTY3Q0YwRjM0NEZEM0JBNDM1Nzk4Q0JFQUZGNTk5Q0EKKzoxMEU0NjAwMDQ5MThGMENEMzcwOUUzRDlCRkYxRkFDQjA5NTdDREY5RjcKKzoxMEU0NzAwMDI3QkE3RUZGRDI5Nzg0RTc4MkFFM0RCQkYyRjM5MDU3NzYKKzoxMEU0ODAwMDhFMjZFMTM5OTI5QzcwMkREMkM1MzVDRjFDM0ZEMDgxQUMKKzoxMEU0OTAwMEE3OERFMUU5NUE3RjI1RDJDRkJCRTk5MjA5REUwOTZCNEUKKzoxMEU0QTAwMEVEN0Y2MjNFRkM1RTc0QkQwQUQ3QkJERjM1MzcwMzFFQ0QKKzoxMEU0QjAwMDc2N0NFRDNCRjNFMTVEQzk0RDIxMkUwNUVFOUI1REVCRDYKKzoxMEU0QzAwMEZCQ0ExRjQxRUZENTFGN0QxOENGN0RCNTdERjM3RkExMUUKKzoxMEU0RDAwMERENkQwQTFENjFERkZCOTI0NEE4NzdGNTk5MDNGMzAxMTYKKzoxMEU0RTAwMEJGNkRGRDZENThGRUVFMzM0NzMwN0ZGMjZCREYzMTFGOUQKKzoxMEU0RjAwMDJBOEREMEYxQkJERjNERjJDM0RGNDMzRTkwODhGNzcyMzcKKzoxMEU1MDAwMDFBODI0RjNFMEU3OTUyOUJDOEVFNUQwNTVGMTFGNEJGMzMKKzoxMEU1MTAwMERGNzVGMEY4MjBGMkExNDYxNzRCRkIzOUY1REQzMDAxMkQKKzoxMEU1MjAwMENGNzk2OEY0RkI1NjQ1NzExOUYwMURBNTUwQkY3OTNFQUYKKzoxMEU1MzAwMENENzcyN0Q0Qzc4QTIzRUU1MUU3REIwMEI0MDhFM0FFREEKKzoxMEU1NDAwMEUxNDJDMDA3NUQ4MkQyODdGMjVDRUNDRjA1NzlFRTJDMDgKKzoxMEU1NTAwMDBFMEJGMDJFRTlFQUJBRTNGM0Q5Q0YxMEI2NjJGOTRBMEUKKzoxMEU1NjAwMDFCM0IyRjM2OERGMjBCQkMxRjQ1N0IzQkZBMjFDNEY3QkEKKzoxMEU1NzAwMEJBMUU1QzA3RkQxRDM2MTNEMTlDMTE4MTc3QjMyMEExMTMKKzoxMEU1ODAwMDdGQjRCOTg2RjM1MzBFMjMxQ0Q5NzYyQTE1RjZDNzlBQTEKKzoxMEU1OTAwMDg5N0FBRThCRDVFQkEyRUVBNTJEMTlGNTEwQjFEM0I0QzcKKzoxMEU1QTAwMDZDNUJFQzM4RTg5Mzc5MkU5NTNFMTlCRjY2MEVBQ0M4Q0IKKzoxMEU1QjAwMDA2Rjk0MTNDNTY3RkExMkZEMjVGQ0VGOUE2NkU3OERFRDgKKzoxMEU1QzAwMDNGQjM3RTY4MTFDQzYzNDlEMTg2MTkzMDBGMEZDNEZCNkQKKzoxMEU1RDAwMDQwQkYyODJFRUNCRjExRTI5Mzk0OUZCRUFBQ0FDNzM0NTUKKzoxMEU1RTAwMDMxODBFRjhDRDhFNDQwMkFGQzI2OUI2NDBERTAzOTZFMjQKKzoxMEU1RjAwMDY5N0RDMEQyMEE3Mjg2MUZDOTVEODU4QUYwOTg2MUZGNjUKKzoxMEU2MDAwMEYwQTAyNTk4MzExM0ZBRUI1MkY1RDM1MTA2M0Y2RDhGRTgKKzoxMEU2MTAwMEZENDk5NUIyMDdEQUQzRkVCMTNGNUI5RENDRTM2RkJFRjcKKzoxMEU2MjAwMEQ5RDgzQUZDRUIwRjZFM0Y2NjhDOTc4N0M2RjQ1RkVBNDkKKzoxMEU2MzAwMDAyRkRBMkFDQzE3NTkzMDQ5Q0VGQkI1MDE1RjFBRERDOUIKKzoxMEU2NDAwMEFBOEY2MzQ3Qzc3QjQwOUVDMTdFRUZFOUJDRjJDMUJDODUKKzoxMEU2NTAwMEQ0NDhBQUM1ODFBMkYxQ0M0QkI0OUNGNjUzMjFDOTk4RTkKKzoxMEU2NjAwMDkyQkUxQkJCNzdBNkM5RURDRDdCNTRCREZCRTIyNTk0QzIKKzoxMEU2NzAwMDNCOUI4MzNDRDNCQkMxQ0JBODc3RkZBNTQ1MjY2RjUzRkIKKzoxMEU2ODAwMEMzRjJFMEYzOTc5MEJFRUYzREMxRjRFRUU2MTMyNTAyMkUKKzoxMEU2OTAwMEQwQjNGNjFFRjJFNjhBNkJBODdGMTUzMzQxQkFERTJDQTIKKzoxMEU2QTAwMEY0OUZGNjQyRkZEREM0NEQyRDdCQjI3OUZFRjAyRDIwQTQKKzoxMEU2QjAwMEZGN0VGREJDN0QwREI0M0Y2NTMyMjFCRDlERUFGREM0RUEKKzoxMEU2QzAwMDkxMzY0RTBGMUZGMzAzQjhGQTEwRjJFMzY2RDUyRTI4RTkKKzoxMEU2RDAwMDVGN0JERjAxRjBDNzFBRUJEOUVGMTE2QzFFNTBGOThCOEQKKzoxMEU2RTAwMEZBNjM4MERGQ0QyNzVFNDVGQUQxRUM1RURGRDMzNTQ4OTMKKzoxMEU2RjAwMDZGNkU0QTZGRjhCQjA5NTU0MzA4MUZGREYzMTdEMkQ0NUMKKzoxMEU3MDAwMDVEQzVERUM1NUQ1MjU0NTIwNkY0NzY3MkY1MEY3NzgyMTAKKzoxMEU3MTAwMERFREU1QzQ1NDRFOEZGNjA4RUZDM0NCRUZGRkIzQzg3RDAKKzoxMEU3MjAwMEVGNTExRUI0RjQ1NEMwM0RDOTgzMEIyNTExRjg2MzczMzcKKzoxMEU3MzAwMEIwNzY1NDNGRTFGOUVBNjBFRDAwRjI4RjY3OUQxRkVDN0YKKzoxMEU3NDAwMDg3RUVENjIwREFENUREMTk0RUI0MEIwRTNFREY4QUZBRkQKKzoxMEU3NTAwMDczQjNFNEYwQzNFRjk5MkMzREMxNkRDNUY2OEE4QjMwREQKKzoxMEU3NjAwMEY4MzlCNEYzOTc4NjZFQzM3MzVCMUEzRTk2NTYwREU3N0QKKzoxMEU3NzAwMDMyNzlDMUUwRkVCNTY1RThEMzMwRUY1RjdGQ0YwQTZGMzUKKzoxMEU3ODAwMDdFOEZEMkRGRkYwNUQ2NDBBRTU2MDA4MDAwMDAwMDAwMkQKKzoxMEU3OTAwMDFGOEIwODAwMDAwMDAwMDAwMDBCREQ3RDBCNzg1NEQ1QjYKKzoxMEU3QTAwMEI1RjAzQTczQ0UzQzEyMjY5MzkzMjdFMUU5QzkwMzA4RUEKKzoxMEU3QjAwMDk4ODQxMzA4RUY4NzI3MDQxMDJCQjU4M0YyQjIyMjBFM0EKKzoxMEU3QzAwMEM4MjM0MjQ4NDZDNDhBRDc3RTM3ODMwMzMxNTI2RjZGQ0QKKzoxMEU3RDAwMEFDMkZFQUE1NzZBMDZBRDEyQjEwNkRBQzUxMDMwREE4MjEKKzoxMEU3RTAwMDE0QUJCNUQxNTI4QTE2QkRBMzIyMkY5MThDRTA4M0RFRTMKKzoxMEU3RjAwMEQyRjJBRkI1RjYzOUM5Q0M2NDAyNjJFREZGRjlGRkU5OTgKKzoxMEU4MDAwMDU3MzdGQkVDRjdEQUVCQkREN0RFOTMzNkQ5QkZGMThFODUKKzoxMEU4MTAwMDMyODAyQkQ1NjFCQUFDMDNBNDJCNkRCRTNCMzIwMUQyNDIKKzoxMEU4MjAwMDAwRjQzNTk4NkZCMDdCOUQzQTk2NDdGRTQzMEE2RENFNTMKKzoxMEU4MzAwMEM1RUZEM0MwMDgxNTAxRTRERjIzMTkyMTM3NDA4QTI2MkMKKzoxMEU4NDAwMDAxNjQ1MTZBMzM1MzA3QzAwOEMwQkYwNjkxQUE4MTEyMDAKKzoxMEU4NTAwMDZGMzFDMDI3QjUwNjdDMzgwMEY4NEZDQjA2NThDRUZGODUKKzoxMEU4NjAwMDAwNThCMUE4RDVBMTYxN0Y1NTRGODlGRTMyOUQ0NkU5NzgKKzoxMEU4NzAwMDJEOTg5RUEzQkZDQjMwNUYwMTM3NzhCMTNDNEI5NjZFOEQKKzoxMEU4ODAwMDk4QzFBOThENTNBQkRDNEE4Nzk5RjNDODdENjRFMUJEN0IKKzoxMEU4OTAwMDUzNzBGRURGQTkwNDNEMDk4N0U4NUQ4OERGMzEwRjdFRjQKKzoxMEU4QTAwMDA4MERDMEY5RjdBRUY0RjZENUE4M0M3M0E5MkU2MzNFNjcKKzoxMEU4QjAwMDJCMDNCRTRGRTU5MTM1MEVEODJDNzVFRDc3MjRBRDZCNEIKKzoxMEU4QzAwMDA0RDVGMzk2NDk1ODJGQUI2NzhBMUVBNEExRTQ3MjVCNjYKKzoxMEU4RDAwMDEyQjUyQjk1RjRDRDFBRTVBRjdFMTQwODRFNTlCRDc0RDAKKzoxMEU4RTAwMEVBMDcyMDY0QzJDMTVCNjZDMzdBNDdCMzUzRjRGNUY0MDgKKzoxMEU4RjAwMDNERjQwN0U1NkE4NEM3MjQ0REI1Q0E0QkE5OURFNjAxREUKKzoxMEU5MDAwMDU4NUZEQUQ5NkU0QUJFOTdGQjlCRDIzMzQ5MEZFMjNDN0YKKzoxMEU5MTAwMEE3MzcwNDRBMjA0RkMwQzFFQkVFODQ0MzY4NERGMkRDQjgKKzoxMEU5MjAwMDUwMTQzQ0M2MTMxQ0IwN0Q2ODMwQ0M2RDJDMjJGODdCOTMKKzoxMEU5MzAwMEFCQTg5RjZDOUI5RUIxMUUzNzE1REM4MTkyNkI1MjY4MTEKKzoxMEU5NDAwMDlDMjBDMzZCMDBDRDAzRDMyOUI4M0UzRkY1OUJFRjVEMDAKKzoxMEU5NTAwMEM1RjBDODRBRDExM0MxNjNDRjI1MDIxRUJCRTc2QzkzMzMKKzoxMEU5NjAwMDM3NjBCREVBMjIyOUU0QzRGOURERkZFMjhDNTI1QTY3MjAKKzoxMEU5NzAwMEY1NENCNzBFOThBRkY2MjkwQjY5NUMwOEI4RTAzMUNDQkUKKzoxMEU5ODAwMDgzNkZEMUJENTMzMDVGNURFOUQ1RDc2QkJDRUU0NTU0ODUKKzoxMEU5OTAwMERFMzczMzQ5NUY4RkU1MEYzRTJGMTk5NEFGMEVCODQzMzIKKzoxMEU5QTAwMDQ5OThCRkIyNTlFMDQzNzVGM0QzQ0E4RDk4RjYyMEJDOUQKKzoxMEU5QjAwMDczNTNCQjQwQzk4Q0UyQ0VGOTAwQUNFMUY5NTQ0RjNBMzUKKzoxMEU5QzAwMEQxRkY2NTZDMUY5MDQxOTcyNzYyREUxMTFFQThFM0ZBMDQKKzoxMEU5RDAwMEFCMjc4NjA3MTJCQzRFM0U5RjM0OTdEQUJGNjJCMzA1NjEKKzoxMEU5RTAwMDY4OUM1NzM2NUZCQTI5Mjg3NUVERTdBNEREREI0NEVCNTgKKzoxMEU5RjAwMDNGODlFQjBGNjBGOTZGOUZGRjczODhFODYxMkREMjgzMjkKKzoxMEVBMDAwMDlDODM3QkI0NDYyQkE3RjJGNTUzNDBBNTdEQjFGNjZCRjIKKzoxMEVBMTAwMDhGMjM1MDQ4NzhCNTI3MkY5OUYxODNFNkU5NDUzODFGQjEKKzoxMEVBMjAwMEE3N0ZGNjAyQjhGNTEyNkY4RDg2NzBBRUI2QjVENjI5RkYKKzoxMEVBMzAwMEQ0NkU0QjA2QzAxOENDQkY3MEY3NDA5RkJCMkI5Q0IxNjcKKzoxMEVBNDAwMDNERUY4QjRCMDFDNjVGNTdBODQ3MjgxODg1NTcyRTE3RjcKKzoxMEVBNTAwMEQyREEzMDRFMDM2RTRDN0JBQzE2RjA4OUVGRTc0RUNEMjgKKzoxMEVBNjAwMENERkRBQzcwODVGN0UwQ0U0MUNERUEwNjU3MzZFMjkxOTgKKzoxMEVBNzAwMDJGNTlFM0VGNDlGNjgwRDEwN0U3RTM2ODJFNkZFRDgzNjYKKzoxMEVBODAwMEU1RDlFOUY4MUZEQUI3Q0QzRDQyQjQ2RkQ5RDlFMDdCQkIKKzoxMEVBOTAwMDI2NDFCRkFCNEMzQ0IzRjZBNTIxMUQxODJGQjMzREEyQjgKKzoxMEVBQTAwMEZFQ0Y0REJBRjk4OTQ5OTc1QkNDMzQ4QTJFNjJGMURFRUMKKzoxMEVBQjAwMEVEQ0IyNTNFOTE5RDBDQkVDNjA0RTM1OUVENzE3RTVDMDUKKzoxMEVBQzAwMDZFQ0QwQjVDRDg0RjI2QjVEMzZDOENERjcxNzQxN0NBMzIKKzoxMEVBRDAwMDJBMUU0Njc0MzcyNTU5REZFRDIyN0ExQTk2M0IyQzA4RjgKKzoxMEVBRTAwMDlERTMyMDI0NzI2N0E0NzRDNTAzNUEwN0QxMEZBRDhCMzAKKzoxMEVBRjAwMEU4QUNCQjdBMERCQjA0N0Y4QUM3Q0I2NzRDM0FBOTIyMkUKKzoxMEVCMDAwMDVDQzc3OTZGOTM5MDFFMTNFRUIzRThBN0RFOTY2QjdCMUMKKzoxMEVCMTAwMDEwRTdGQkEzRkQzMkYzRDlGODdBNTZCQUFCMTZBMDc1MEQKKzoxMEVCMjAwMDEwNDBERUM2NkI1M0JEQzVEREQ3REI2NkQ2RkI3MUFEQ0QKKzoxMEVCMzAwMDhCNTNCN0FFQUQ1MUIwRkZBMTJENUFBOTBDMzQ5RTM2MDAKKzoxMEVCNDAwMDg5QzYwQkUwNzhCNENGMjkxM0UxNTMxOUUxRTMxOURENEQKKzoxMEVCNTAwMDUwNzg2NzJFRTE3OUUzNUM1QUQ3NTAyNTZDMkIyNUJFOUYKKzoxMEVCNjAwMEVCQjU0MTZCQTFFMERGRTdGMEZGM0RFNzI2NDNBQkFCNDAKKzoxMEVCNzAwMDMzREZDQjk3MUU5M0VGNTNEOTNCQTY3RTNGN0Y1RTRDOEUKKzoxMEVCODAwMEY5MjVBQjg3QzQ5NEU3MDY4NkM1RTRGM0VCQzdDNkQ0ODIKKzoxMEVCOTAwMDFGRDAzMDI5MjYzRjY4QzM3NzYyRUEwRjBFNUQxRDkzQjAKKzoxMEVCQTAwMEJGNzRDQkY3NjNFQTE3MzcyRThDMjk5RkY0OEZGQ0RERjcKKzoxMEVCQjAwMDNGMjUzQ0E3RjUyN0UwNzM1NjFBRDE3Mjc5RkY4NjM2QjgKKzoxMEVCQzAwMEM3QUUzRjc1NzRFQ0ZBMTU4ODAwRDFGQkE0RTRCRkVBMjgKKzoxMEVCRDAwMDg5RThEOTRBNTM0MUY5MkM2Q0I1MjMzRUUwRDI2QzBGMzkKKzoxMEVCRTAwMEUyM0NDQUZGMkM4N0Q2Mjc5ODg3ODVDRjU2N0U5MjIyOTMKKzoxMEVCRjAwMEM3OEM2QkYxODkwQkUxNTc5RUVGRkNGOEYyNjNDMjE3RUIKKzoxMEVDMDAwMEU3NzlFNkZEMEYzOTIxNURBQUI5ODIwRjI4RTBFNUY1MjUKKzoxMEVDMTAwMEE3NEU5QzdCREVGNURCRTNENzBGMUFFM0JEODdENjlGQkIKKzoxMEVDMjAwMDAwRUZFM0Q3OUYzQTNBNzYxRkFDRjVFN0Y5MDYzNzg3NEUKKzoxMEVDMzAwMEIxOUZDRkU3NEEyQzVGRjY1MUQxOThBRUZEQkQxQkI3MEYKKzoxMEVDNDAwMENFRDlBQjUyNTk5RjAxRUYzNTA5RUI3N0NFRTM0RTlFRkIKKzoxMEVDNTAwMEM3RjU0RUYwMjc4MkMzNzQxMzBFOTVCOTgyREUyRjQ0OTgKKzoxMEVDNjAwMDlGRUY5QkYzRjgxRkEyNEY0Q0RENkI3Mzk5MUU2MTlGQzIKKzoxMEVDNzAwMDFDMUE4MDVEMkRBQzk3NzZGNTQ0QkM0OEY3Qjk1OTJGMjYKKzoxMEVDODAwMDVCQThCNDQyNjk5NDlDQkZERkE0RUYwNzRERkFERTUwNDUKKzoxMEVDOTAwMEFCNzIzRjBGRDdFNjcwQkFCMTU2RTNFRjhGRDQxNjcyNUUKKzoxMEVDQTAwMDFBQUFENUY5RkJFNkRBRDE5QzNFOEFGQTE4QTU4RkQ3QzUKKzoxMEVDQjAwMDRFRTM3NDRCQUQ5N0VCM0Q1OTNCOTdEM0E3NkE3REZDNzAKKzoxMEVDQzAwMEREREE5RkVCQ0RGRDAxNkYwNkNCQjNGOEY1Q0M1Rjk1OTgKKzoxMEVDRDAwMDE4MkY0MTJFRTJGNkYzOTFDRUU0RjNGMEI1MkVFREU1RDgKKzoxMEVDRTAwMDc5QTlFN0MzQTNENTA3NzNCN0JGMUM4NTA3RDdFNUE2RTYKKzoxMEVDRjAwMDY0MUVFRTgxRkYxODA1QTNDRUM5MTc2RUZGNjVBREI2ODEKKzoxMEVEMDAwMEZENjVGQjg1RTlDMkMyMTczOEZCRTE4MDQ0RjVBRUE3N0IKKzoxMEVEMTAwMDMxQzcyMkJGQzlERERDMTA3MDc3MEY5RjRFM0M4QUMzMUMKKzoxMEVEMjAwMDU3MkZFMjJCN0UyRDIxRDlERThCQ0FDM0JEQTNDN0Y5OTUKKzoxMEVEMzAwMDkzQjlDRjU2N0VFNjRDODFBRkYxRkRERTZGRTJERjJDNUEKKzoxMEVENDAwMEMyNEYyQzlGMUQ0N0FGQTc3Mzg1RkMzQzlEMkJGNEY0NEQKKzoxMEVENTAwMEZERERGMDhCN0I3MjZEQTZGQzE0RkIzRTZCOUZFMDRCRTAKKzoxMEVENjAwMDc3RjY5ODNGQzE5NzYwNUMyOTRGOEJBMUNGRDkzMzYzNjkKKzoxMEVENzAwMEY3NzFCRjVERjBCN0ZEN0Y5MjQzNkIxMkVDRkY4NURBNTAKKzoxMEVEODAwMDVCRUI4OTZGRjcyNzczQkQ5RkZFN0Y0NjZGRkJBRjREMkYKKzoxMEVEOTAwMDYxN0Q3RUJGRERENzJGMkI2QTdGRjY1RkRCNjM2RUEyQkUKKzoxMEVEQTAwMDdERkZERjVDQkJEOEFGNDIxNTQ4QkU0MzNBMThBNDA3Q0QKKzoxMEVEQjAwMEUxOTIwMjBFRDJFNUEwNDAzRDRDNzQ4MkM2MTBEMTQ1Q0UKKzoxMEVEQzAwMEY3NzhBOUMwNjE4QjlFNjQ4MjY3MTJFQkUzOUZDRjRDRkEKKzoxMEVERDAwMEUxRkQwNzlGNkE0MDU0RkZBMEE4QUM5NzZFRkIyRUVBQTYKKzoxMEVERTAwMDBBMzQ5RTgyRTNBMTFFMEFCQUFENzNGRkYyRThCRkM5REUKKzoxMEVERjAwMDlERkM1QUVFOUVERTJFODQwNzE2MUY5OTREN0NFNDNDNDYKKzoxMEVFMDAwMEYyQkE2QkJCOEJFMzIzODc4ODhGNUNGQUNERjMxMThCNEYKKzoxMEVFMTAwMDhFRTFFQzhEMDNCQzI5NURDQjY3MTExRkU5MERGMEQzQUEKKzoxMEVFMjAwMERDQjc5OThGN0M2RDM4NTk3NDZCRUExM0YxRkNBNERCNjUKKzoxMEVFMzAwMDc2Q0Q5OTE3OTA3RjI2M0Y1N0ZDRjU2MUM0OEJEQkU0QjQKKzoxMEVFNDAwMDk0ODZGNUQ4RTQyRUM1RkY3M0NBMDcwMjBBM0M4NkE5NEEKKzoxMEVFNTAwMDczRjVFOURFODc4NjczQjc4NTBBRDcxQkMyRjY5RDUzMjMKKzoxMEVFNjAwMEYxRkYzMkNDRjZBMDUzQTU3QTBGRjVGOEY3RUQ5NDVGRDkKKzoxMEVFNzAwMDhEMUNEMzg5RTk5NzQ5RkQ0MzgwQjY0MDY5OUVFMDNGRTgKKzoxMEVFODAwMEIyRUI0Q0VGNDM1MUYzQjNBQkQwMjczQTVGREFFQUVBODcKKzoxMEVFOTAwMDczMjg2QURGODZFRjU1NjNGMjIzREE3MjYyRUE4RjNBRUIKKzoxMEVFQTAwMEEwQzU5NDhGMDkxN0M2OTQ4RjNCQUFDN0U0Mjc0NDQ2OTAKKzoxMEVFQjAwMEM3RDRCRkVDOEMxMTkzMkY4NzJCNjJFQTU3Qjg2NkM0NzYKKzoxMEVFQzAwMEU0QTdBOEQ3QzZENEJGM0M2NzQxNENGOTE1REE0REIxQzkKKzoxMEVFRDAwMEZEMTU3ODg3RTdFMUJBMTczQURDRjU1MjJBREE2OUI5MDUKKzoxMEVFRTAwMDQ2MTlFNTkzOTNBQkZEMEJDODRFNUFFMzUxNjEyMkQ1MDkKKzoxMEVFRjAwMDBFODUwODZFNzUwRTk3QkExRUY5RDQwNzkyRDExRjEwQjEKKzoxMEVGMDAwMDRGRUZCM0ExRDU5RDhGRjVFNTMwNTA3QUQwQTY5NzUyM0IKKzoxMEVGMTAwMDlBNjc2Q0YxMTE5RDZFMkY0Q0Q2NjgxRjkyMDcwMkI0NTAKKzoxMEVGMjAwMDkxOUM1MkY0MjQ0MDdFRTJFODExRjk1RDAxRURDQjZGMzMKKzoxMEVGMzAwMDZDRjAxODI2REI1NTU0RjRBOTdFNzM2Njg4RUNERkFDQzAKKzoxMEVGNDAwMDY0REYxNTM0OEZGNUI2MDZDRjFBREE2NzFCNzgxRkNCNEUKKzoxMEVGNTAwMDY0QkNGQUM5NjhDQzFGN0U0MUIxMTE5RTZENkZCMURERjIKKzoxMEVGNjAwMDMzMTZGMzlGNjFGNzMyOTYzN0I1OURGOEM5OTU5ODFGMTAKKzoxMEVGNzAwMERBNjZEN0E5RjY1MDkwRDk0RTVDQUVDMDNENEE3QUY3MTIKKzoxMEVGODAwMDc4RjZGMTBGODQzRDE1RkZGRDY3Nzk4MkRGNjc1NTA4M0MKKzoxMEVGOTAwMDNCMzNCRUZDOEUzQzIxREYzRTc2MjQyRTVGNkVCNkFGNDcKKzoxMEVGQTAwMEI4NkJGQTQzQzREN0VDNkQ3NjIwQkZDNUFBMkNBMzI3NTMKKzoxMEVGQjAwMDlDNEY1RjNEOTMwRkExRTE1MTc5QzUwQkFBOUJCRTBGRkEKKzoxMEVGQzAwMEU0RUYxNTc3Q0Q4M0IwNUJGNDQzN0VBQzU1NDk0NjRGRjMKKzoxMEVGRDAwMEYyM0I3QzNDMjlGMTNDNkUzMUU3NjEzRkQzQTM5QjdFNDEKKzoxMEVGRTAwMDNERkNGREUzQkNGM0FGRDM3RTI2MDk0MjE5ODlEQUJCQjEKKzoxMEVGRjAwMEY5N0I1NjMwNzFGQjdCQ0NGMTNGNEU0RjVDNUVERkQxMkQKKzoxMEYwMDAwMDdGMkYwODY0NDRCNzEzN0NBNzczOUNCRTVDNkUzRjkzNEMKKzoxMEYwMTAwMDA2ODE4NEVCQzhFNEVGOTA2M0U0MTBERUVDNDIzQTI3MEIKKzoxMEYwMjAwMDdFNTE5RTk2RUQwMDI0RjFGOTEwNzlDNTQwRjhDRjIwNkQKKzoxMEYwMzAwMDkzMDBGMTE0NUM3QTI5RjEyOTUwRUM5MUIwNDUxNzI4MUUKKzoxMEYwNDAwMDNGMTY4MEYyMDFEOTBCMzY0NEM2NzMzOEI1MUI1NkRCMjgKKzoxMEYwNTAwMDNGMDg0N0QxRDEwQzIzMzYwRjU0M0Y0QURFN0M0MjdEMTYKKzoxMEYwNjAwMEUzN0E5Mjg3MTRBNjEyQkU5RjAyMkQ1NTREODA1RjU2RkIKKzoxMEYwNzAwMDNBQ0YyNTdCOTVBOEY1MUNFQzQ2NEY2QTMzRTE3OEIwNzIKKzoxMEYwODAwMDU3NjIzODNFNkZGMkIxOTFGMzIwQTFCRUQ2OTZFNzExRDgKKzoxMEYwOTAwMDc2NTlBMURFRjM3QzcyODNFMEVCQ0I4OEVFMzc3RTFGREUKKzoxMEYwQTAwMDMyQjlGQ0FCQzIxOUYxODJFNTdBRTRCQkVFMTBGQjI5NjAKKzoxMEYwQjAwMEJGNzE3ODVCRjhERDI3MDYyRjNFQzk4RjlGNzc3RjJFQzMKKzoxMEYwQzAwMDJGRThFQjdEMkI4RkU1OEEzNjkwRTQ2MjkzNDlCRjREQTQKKzoxMEYwRDAwMDhBRDE2Mzk4OUJGODE4NTQyNjgyN0Y5RjdDNTM0RjhENkEKKzoxMEYwRTAwMDVCNzcxMzE4MzkwQkM4QUZBMUQ4NzVFMjY3QzkzMkY4M0UKKzoxMEYwRjAwMDlGNEUwMEZGRjg3NUE3OUFGM0M2RjY3MzVCQTkzRDc4OUIKKzoxMEYxMDAwMDc0QzFFN0MwRUJDQTQ2M0Q5RkZFODU0QjI4MEZCQzY5MjIKKzoxMEYxMTAwMEE3RkVFN0Y5M0RGQTdBNTQ4MTNFQ0YxM0ZBRjQwMjA4Q0MKKzoxMEYxMjAwMERCODkwRjc3ODE5RjNCRDM0RTdFREI3ODM4N0E0MTlCMUEKKzoxMEYxMzAwMDJGRTU1RjE4OUVFOTA1QzZFNzA0MUY5QjRCQ0RERThBQ0QKKzoxMEYxNDAwMEVCOUMxRkYwMDBGOTY5NkU5ODA3OUU2MjlDOEZFRkJCRTUKKzoxMEYxNTAwMEU5NkYxODU4NzdFMTU1NDM0QUQ2NTI3QUU5RjgzQTk5NTcKKzoxMEYxNjAwMDVCNEY2NkJENEYwQUY0OTFDRjVERkFENUY1QkUzQThGN0QKKzoxMEYxNzAwMEFGOTBFOEUzOTBBNDJENjEzODQ4MDgwNzkyMzdCRDhGMUYKKzoxMEYxODAwMDBGNUMxMDA1QzcxNUZEQ0E3RjlGOUY0NUU3MDM2MDY0QUMKKzoxMEYxOTAwMDkwQkY3ODg3OTNGRDU2QjAwMTU4MEZBREQ5Mzk3ODEzRDkKKzoxMEYxQTAwMEM5ODUyRkYyN0RBRjUxQkQ1MTkzNERGRkFEMTExOTc4MzcKKzoxMEYxQjAwMDc1Q0FDNUMzMEJGRkVDNDQyNzE3ODI5NzZDRDJGQjQxN0QKKzoxMEYxQzAwMDRGNjJCQzE5OTcyRkY2RUJBQkQyNEI2NkJFODA0MzA0NUYKKzoxMEYxRDAwMEUxQjBCOUVDOUJBNzE3ODQ1RjBDRkY3ODJENUZGMDVGNUYKKzoxMEYxRTAwMDJCQjVFMDM2NkE1QUFDN0ZGNzM1NzMxREFGRTU3QjM4MzcKKzoxMEYxRjAwMEZEMjJERkNCNzA2RUVGRjdFOUUxMjQ5MkZGMEU1QzdGMUEKKzoxMEYyMDAwMDAyQkNGNzc2NDMzN0REQURCRjNCN0FGOUE2RjhGMkMxMTEKKzoxMEYyMTAwMEU0QzRGMzVDRkMyRDk5RTcxQjM0NEZFMkYzMjU4OUU3NDYKKzoxMEYyMjAwMEY5NkYxNzg5NEZCODNGNEI1Q0Y5REZGQzNDQkZDODM3MUIKKzoxMEYyMzAwMERFQzhBNzc5QTYyNzlFRTc0RjJGMTI5RUM4RUM5NkI0OEEKKzoxMEYyNDAwMDYyQkREOUM4MDdBOURFMzczRDVGMDgyQzk4NDI3MkU4MzUKKzoxMEYyNTAwMDFBOUZGMEZGMTcyM0M3MjUzRTg0NTM3OUY0REM3MEQyNDAKKzoxMEYyNjAwMDZGRjU3NTFCODhFRkFDRjRFODAxOTVGOUM4MUJGOTgyQkUKKzoxMEYyNzAwMDBGODI4MUYzOTkzOTRENjI3RjUyRkI4ODRGOTcyODg0MjIKKzoxMEYyODAwMEVGRDlEMDlBNDZGQzZBQTc5M0ZERDlGMUVCMEY5OUVCMjEKKzoxMEYyOTAwMDQ3M0E3OTlDRTAwNEQzMjMwMzg5OUYxQzFDOTg5ODRGMUMKKzoxMEYyQTAwMDNDMUU1RkJGM0VDMkYyNjk3RDc5NjJGRDc0OUI0OUFGMkYKKzoxMEYyQjAwMDJCNUMwREQzQjI2REQxRTcyQkI4NDA5OUI4NkNDMEU4ODgKKzoxMEYyQzAwMDQzRjJCNjRDNUQ0QkZDQzQ4MTcyODlFMEVBRTgzM0E0OUEKKzoxMEYyRDAwMDI3RUQwN0U2QkQxMkY5ODE3MzVFM0YyMDc5MThERTI3MUUKKzoxMEYyRTAwMDNBRTA5N0Q3MzlDRUYxREFCRDZBODFCRDdCN0VCRTVDNEMKKzoxMEYyRjAwMDdFNjZBNDNGQzE3QUI2NkFCRTVERjk1MTc2RTNGMjJEMEYKKzoxMEYzMDAwMEFGQUEwNUQxRkU3MTA4REI4MDA1NDdDNEU2RTVGMzQxRUQKKzoxMEYzMTAwMEQzNkZEMDEzMkVDQTZGNTA5QzI5RTg2NTQ1M0YyRkNCODEKKzoxMEYzMjAwMDA3OTIxQjY0M0ZEN0JEMzBBNjk0MzYxN0Y1MEYyMEZCMUMKKzoxMEYzMzAwMDIwOTI5MkNDRjIyMkQ4N0I2Q0ExMTYwNUNGMEZGMzJEMzAKKzoxMEYzNDAwMEZENTNFRTQ2QUY3NEM0N0M3RkI3RDY4NTI2NjU2N0ZFNTUKKzoxMEYzNTAwMEZBQTNGQkE2OTAzRTNGMUZDMkVCQThGRUZDNTUzREU4N0EKKzoxMEYzNjAwMDA4QjI2MzlEMURGRDlEOTE2MkY0REJDRUZFMTVGRTVFMkQKKzoxMEYzNzAwMEVFNzJCN0NBNDMzMTc1RkYyRUUxN0U2Q0Q1OENBMzA0QzMKKzoxMEYzODAwMENGQjVGRDhDNjNCNENFNzhGODA1RUUxQTlGQzY3RTA0MjcKKzoxMEYzOTAwMDgyREY2NTVERjdCREJCN0RGRUFCNjY5Q0E2RkU1RUU4QzkKKzoxMEYzQTAwMEE3NUE3RTFEOURDRkUzOTJBREYzNjE0NTNERUNFQTg0MDMKKzoxMEYzQjAwMEY3NTdERDk3NjREM0JGODhGQUM0Mzk5QUI3MDE1NTdFRjEKKzoxMEYzQzAwMDlBQ0YzQzhCQkVFM0Y0MUMyODE0RkU4MDNBNEZEQkJBODQKKzoxMEYzRDAwMDVENTE3NDc4ODMyRDkyMjVFNDc2NzgxRDM5OTlGRTY3MDYKKzoxMEYzRTAwMDQ3MTJGMzhGRjYxREJGRURFN0UzRjMzNDRCRUZFODIxNEYKKzoxMEYzRjAwMDlGRUJGMUQ1RTc2N0Y5MTdFQ0M5ODlGNTY5RUIxQzYzNTkKKzoxMEY0MDAwMEI3QkRBODgwRjUxMjNBRTcxRDhENzk0OTVCNDRGNkFBOEQKKzoxMEY0MTAwMEEyODIxRUM0RjU5NTVGOEVEODg0RkQ0RDkyRkJCNjg0MDIKKzoxMEY0MjAwMDcxMUQ5RkMzRDlFNDA5OThGRTI3ODhGNUFGN0FGM0EzMkQKKzoxMEY0MzAwMDc0RjI2MzRFNTJFQ0M3QTNGOTUzQkMxRjY4NDA0MUFDNTEKKzoxMEY0NDAwMDNGRjkxNENDNEI2RDI1Qjg4QzRGNjdCODZDNkY5OTk0MEQKKzoxMEY0NTAwMDRBRkQ5NDNDM0ZCOTI3QTVCQjZBRUI1NUM1REVFOTBGRDEKKzoxMEY0NjAwMDhBOUY3Rjc5Mzc3NkU5QjAwMkExNzdCRTlFNkMwQzJCMUMKKzoxMEY0NzAwMEMwQjRCQzlCRjU4RjMyRUI4NTkzOEQ1MTA1NTk5REZEMzIKKzoxMEY0ODAwMDUxRkQ0NEYxMTA2RDgzMkMzRkFFODBFQjM1ODEwNUFDMEUKKzoxMEY0OTAwMDZGRDk1Q0M4NTc4OTdGQTJGRTJBQUJFNDI3MkNCMDMzMTIKKzoxMEY0QTAwMEJEMUJBMEE5RDlFQzM3MTRGQjhGN0M1REMxRkMwNDMzRDQKKzoxMEY0QjAwMDJGRDVCRjFEQTQ3NjFCNkZGMUYwMzkzOEY4MzQyMEY5MzEKKzoxMEY0QzAwMDgwODBFMTczODEzQUM5Q0Y3RTA3MTdDNTdENjBCQTVFM0YKKzoxMEY0RDAwMEQyMzc5MDJFMjZEQjIyMTk4MjJFNDIyMkFFMDE3QzBBRTAKKzoxMEY0RTAwMEU1N0YyQjg1ODMxNDI3QjBENkY1RUYzRjI3M0ZCODExNzIKKzoxMEY0RjAwMDU0MjA2OTIyRTYxNTYwM0Y2M0UwNjAwQTlGQ0JGMUNDOUYKKzoxMEY1MDAwMDcwMUU0RTZCNUU2NjNFQzVDQ0I3Q0Y5QTNBNkQwMEE2QjQKKzoxMEY1MTAwMEI3MjUzRkUyMjEzQzBENEJDODQ3QjE5RjJGOTNGRkJENUMKKzoxMEY1MjAwMDk1RTlDNjlGQUNEQjdCOTM3RkU5M0RDRTRCMkI5Mzc1NzIKKzoxMEY1MzAwMDI5ODdGQzRGOUU0MkQyNTM1NzQzQjJFRUM0NzEwQzc3RDkKKzoxMEY1NDAwMDcxODBDNjc1NjhDMEZFRjg2NDY4RTQ3NUI4REQ5RjA0MTQKKzoxMEY1NTAwMDA4MjgyQUE4MTJEQjRGQzlCRTY1MDU2Q0FGMDA5RjkzMkYKKzoxMEY1NjAwMDFGN0UyRjY1MzNBRDNGNDkzREQ1N0EwNzdFQ0EwMDgzQTQKKzoxMEY1NzAwMEVCNjVDNEM5QzcyQ0Y3MkE4OUUzMzdCQzRBOUM1Q0Y0MDUKKzoxMEY1ODAwMDQ5MDRGRjlFNzNFM0JGQzdDQTRCMTcxQzU0ODk5RjQ4QTkKKzoxMEY1OTAwMEFEREU5QzczQzg5RkRBMDg2RTY1OUQ3MDZCNTM4NDVEMDkKKzoxMEY1QTAwMDY3QzEyRDMwQzlGRjRCODI2QkUwNEVBNzFBQ0NFQ0RFNTEKKzoxMEY1QjAwMERGODYwMDFBNDVGQTc4OUJCQTY0MkJENTQ3QzMwOTZDREQKKzoxMEY1QzAwMEQ0NUY4RTU4NUZBMEQyMjlGNjQxRjE2REE1RjZFRkQ4MzEKKzoxMEY1RDAwMDczNTRCMjdCMkMzQzdCNjhBMEM5QUZCQkYxNzczQzUwMjUKKzoxMEY1RTAwMDIwRjRBM0VBRjRDM0Q1MjRFNzAwMDdCNUY1MDczODk5NUEKKzoxMEY1RjAwMDcyNzQyNEYxMEQ5NDk3RjUyNDJGOTNFQzA2QzNEQjkyREIKKzoxMEY2MDAwMDlCMkI5QUQ2MDBEMTU1NzVGMzAyMjBCRUYyOEVFNDFCRDcKKzoxMEY2MTAwMEYwMzJEQjIzQzA3NkQ5OUM2OTgxNTc2QzFBRjlCMjY2NDcKKzoxMEY2MjAwMEFFNzM2M0ZBNDk0MTFFRTNEN0ZFNTdBNkJFQzI2QzQ4Q0IKKzoxMEY2MzAwMDc2MTc1M0JCRDJDQkJDNTNCMjcwREM2MDMxRTg3NzYyMzMKKzoxMEY2NDAwMEJENjA5MjZGRUJCM0I0QUUzNzY1RkQzMThERTIyMTJBMTgKKzoxMEY2NTAwMEUwQzNFMTI2MzJFMUY3NERCMzMzRDg2RjlBNTkxMUE5Q0YKKzoxMEY2NjAwMEEzNzg4MUM4RERBMDUyN0M0RjE3RkEzODhCRUIxQjA5QjkKKzoxMEY2NzAwMEYwMEIxRTBCRkI1OUE0QjYxMkZFRjQ0MjdDOTNENENFQzEKKzoxMEY2ODAwMEYyNDdBOTNDNUZFNDJGQzM3QzhERDg1MkM4NkYyOUZGOTUKKzoxMEY2OTAwMERFMDg4MjQ3OUIwQzE0MTY1NUQzMjJEOTY4RkNGQzk5Q0UKKzoxMEY2QTAwMEMzNTlBRjI5QTBGMkNDRThGMkI0RTU0RjYxQkU2MEVFRDkKKzoxMEY2QjAwMDA0OURDODQ5QjNGOTdFNzYyQjk1QkYwMUJDMEUzMEY5ODUKKzoxMEY2QzAwMEY3QTgzOEZBMURENzQ5Mzc1QzVFREE5MUY3NTdEMDdDMzYKKzoxMEY2RDAwMDVGQjkxOUQ4OEVBRDMxRTU2RDBDQkREMTYyQjFDQzE4RDIKKzoxMEY2RTAwMDQ5RjhEN0QxMEY1MDNGMTU2NjdFOUNBMjcyM0Y3REZEMzEKKzoxMEY2RjAwMDYwRjIwNUVGQzYwN0Y4OUNDMEE2OTM3RkIyNEU2QTYwMjEKKzoxMEY3MDAwMEY4NDBDMENGRkExRUM1Q0QxMEJERjQ5RkI3NkJCNzlEQjIKKzoxMEY3MTAwMDA2Q0IxNDc0QTdFRjE1NzQ1NzA2NUU5OUUwMzU1MkJERjkKKzoxMEY3MjAwMDNCNDhFM0NGOTk5N0NCN0M2NkNDNTE2MEI4MzBFNTYxMUMKKzoxMEY3MzAwMDdFNDI5QUM0RkI5NDNGMjA5RkYxNjVCQzRCQUY5NzExNkEKKzoxMEY3NDAwMDhGNjRCOTM0M0YwOUM3OUIzQjRGRTJGMzg5NTk3MzVEMUUKKzoxMEY3NTAwMDIxMDlGRjM5MEJFOTgzRTNBMTE0NUZFRTZDQzRGNzM5OEIKKzoxMEY3NjAwMDNFNDk5Q0ZCNjI3RTVFOTQzRjFFQjU2MTNFMzc5QkVEMzkKKzoxMEY3NzAwMDA0RkZEMzA5RjAzOTdGODBDMDc3QUI3RENENUE0NzhDMjkKKzoxMEY3ODAwMDdGRTc5MjAxNkVFMUU3MTgzMEY1OTMwMkU2QkYyMkFFMDMKKzoxMEY3OTAwMDI1MkJEOTFCMTE3Q0EzODFGOUQ0NjExQkVBREZBNEZGQkYKKzoxMEY3QTAwMDgyQzFGQUY2MzUyNkJENUJGQzYyOTY3MTBCREJDMUIzRjQKKzoxMEY3QjAwMEJDQjE3QUY0M0JCNDI3NDQwN0Q3NEFBQ0U3Q0U5OTdCNzcKKzoxMEY3QzAwMDdFM0RGQjVDODE2NEM2RERGNDU1NTk5RTk5REYzNUQwRTIKKzoxMEY3RDAwMEQ4OUVCRTlBRjQ5QzEyRkMzODBERjU5MDI4RkQ3RURFNzIKKzoxMEY3RTAwMDZENjdEM0I4N0VDRkM3NTc5Q0JCMDQ1MUExNTJGMDk3MjkKKzoxMEY3RjAwMDFBODQyN0YxQ0JGMjZCMTVBNjk3RUFCNTBFOEVGRkFBRjUKKzoxMEY4MDAwMDY5NUU2M0NGMjY3Q0ZFMjFFODAyNUZERkFGRUI4M0YzMDYKKzoxMEY4MTAwMEVDNTM2NThDOTBCNTI4QkY0RDU1NDgyMkJBQ0UyNjlFMzQKKzoxMEY4MjAwMEMzRjA4RjM4QzgyRjM3REJBMTU3RDFCQTY2QTc4MzFBMjgKKzoxMEY4MzAwMDQ4NDNCQ0JDRjY4QThERDRGRjVBMTdBODMyQ0FEQkRFMTcKKzoxMEY4NDAwMDJENkY4NjA4QUY5MDk1RUI4NDkzODgzOTFDRDdENjU3RDcKKzoxMEY4NTAwMEVEQzFFNzBCRjVCNjYxMUNCNzU1RUY0OUQxQTNFM0E0QTEKKzoxMEY4NjAwMEQ2QUZFOUM0M0I4QUQ3RDI5QzMwNEMzNUY3Mzc5MTlENEYKKzoxMEY4NzAwMDM0NjQ4MEUwNTcwRjRBQzBGMjIyNzBBRDhCRTE5Qzk1NTIKKzoxMEY4ODAwMDJGRTI5NUIyNTI3NTQ3MzA4REY4OEQ2NkQ1RTMzOEJCQkYKKzoxMEY4OTAwMDA3RURCRTVFQzMzMTBEQTE1QTI5RjY0N0I0OEJBN0ZCMTUKKzoxMEY4QTAwMEFDMENCMzlGMUU5QTE0NDQ2MjlDRDk1MjVBNjYyM0I4N0EKKzoxMEY4QjAwMEI5NTM3NDhBNEZCNEZBQUQ0ODM2RUNDNEI3MkE4NjQ4QjcKKzoxMEY4QzAwMDIzODIwQ0NGNERDQTIyRDI0RjkzNjJGOUJFREQyRUY2QjEKKzoxMEY4RDAwMDA1REUxNTdDM0Y1RTBFQTIxQzYwQkU0RjdFRkI2MDE5RUMKKzoxMEY4RTAwMENCQUY4QTAxNTkyQzBGQjg5RkQ1OEE0Qjc1RUFEMDQ1MEEKKzoxMEY4RjAwMDlFNjU3QTIxODVGQzVDQzMxMDY0QTRBRkI3RTU3ODY3ODgKKzoxMEY5MDAwMDUwRkM1RUUwNzU4NUZENkE2NTczRjVFQjE2NDdFREVCMUYKKzoxMEY5MTAwMEU2MEUzOTEwOTlDRkYxNTAzRkQ0RkI1MDNDRDREQUYyQzcKKzoxMEY5MjAwMENFM0NDNTNENTY0MjgzODNGMEJEMzI0RTNFMkU3M0JGNjIKKzoxMEY5MzAwMENDN0FFNEIyNDdFRDlERjgwQjE0MjdBQUU3MTNGRkE4OTEKKzoxMEY5NDAwMDdBQUE4QjNGODhGOTU0MjczRjhCQjMyRjQxN0Q4OUQ2MDQKKzoxMEY5NTAwMDMzMDJGOTMxRjEyMUEzMjA0NTY2RkYzMkNDMTM3MjE0MzIKKzoxMEY5NjAwMDFFOTdDODJGMjY3QjU2RDc5M0RDNkI5NzUyMUFFNEIyQUEKKzoxMEY5NzAwMDRFM0UzOUMyRENBRkJCMTRFRjRCMTQxRjFCNDA3REU5NzgKKzoxMEY5ODAwMDMxMTVCQUNBMDFGMEIzRkUzMjExRTUyNkU5RDE1MkNCRTYKKzoxMEY5OTAwMDFDOTlDNkREQjgxNEZCQTZGMzdDMjU1QzQxRjlEQjk2MDcKKzoxMEY5QTAwMDhBNzM1MjA4RENDQ0U3NjBFMzAyNEU5NUU4RkZDQkU0QjMKKzoxMEY5QjAwMEZFNkJDRDcxRkQ3NjY0RDZDN0Q0MUY3MjdGODBGQjQyOEIKKzoxMEY5QzAwMDdBOEI0NEZDMTBDQjdCNEZDM0E2NDgwN0UzNUE4RTcwNUEKKzoxMEY5RDAwMDdGMUIzMzA0NURDNEVCMzEyRkRCREMyMTlCOERGODZFODQKKzoxMEY5RTAwMDgwRTU0RTEyODQ3MjA4N0U0NjgxRTBCMzY1MDcwNDlGNkQKKzoxMEY5RjAwMDdEMkU4MDFBQjQ0Q0FBQUNGRjlBRTlCOUFDMDc3MkY5MTMKKzoxMEZBMDAwMEQ4MDg3MEZDQ0MwRUYwNTU5QkZBQ0U1RDAzNDY1MEI0N0UKKzoxMEZBMTAwMEE4NUZGMDcxNTM1RkIwRjRCODI5NzFGQjc4QjlGQjdFMzEKKzoxMEZBMjAwMDg1RjhENkU1Mzk1REY2NEJBNkZFQTc4MUM0RkFFMjE1NDYKKzoxMEZBMzAwMERBRjlGOTk2NjFGMTI1ODhFNTRCQjk3MDk2RjcwRkVFODIKKzoxMEZBNDAwMERFNzMyQkY5MDk4MjcxN0E1MEYwMjJGNUEwNUVCOUJFRkYKKzoxMEZBNTAwMDVGRDBGQUUyRjVBMUVFRTIyOTlGMUE3MDcxRjE5NEE4NDUKKzoxMEZBNjAwMDQxQ0MyN0Y5MzVENkIyQjNFMkYwQTc3QUNGRjFGOUY3NTYKKzoxMEZBNzAwMDQwMjdERTc1RTA3MzYwRDM3NUI0MEU5NEU3MkFEOTdEMTQKKzoxMEZBODAwMEQyNkYxRTYyQkE1RThCRjVFNEYxMDRDRDgzQzFGRkMyNzIKKzoxMEZBOTAwMDdDQUIwREZDMTRBRjAwM0VGNTM0RTFBOTI1Nzc5MTEzNDIKKzoxMEZBQTAwMDMxOUVENDJEMTY3ODM3NEExMUY5QkVBOEM4MTI1RTA2QzkKKzoxMEZBQjAwMDQ3QzdFQkVCQkU1Q0YyNDcxQjY1QzUxQzFGNkJDOUUzNzgKKzoxMEZBQzAwMEUxMzY4M0YxNjQwNEU4MTk1NENGQzI5MzkxNjE1MThFRjkKKzoxMEZBRDAwMEY4RjExQUYxOTM3MUQzMTA1RkYyMjhDRTc2NTQxRkQyNDkKKzoxMEZBRTAwMEJCQ0E0MTYzRkMyODhGOTM2QjE1RUU5OTBBRDE3OTg1QzcKKzoxMEZBRjAwMDJCN0VGRjBEM0U3NzlDNkNFMkM3MTRGNUVCRTFDNzI1MkEKKzoxMEZCMDAwMDg0MUY5NkRDNDIzREY5QUUzOEZCRTJBRTM4RkJFMjJCQjcKKzoxMEZCMTAwMEUwQzc5MThCQzE4RkM4NDVFMjQ3QkJGRDg3RUYwNUNBOUYKKzoxMEZCMjAwMEQ4OUVGNUNCRkRCQkUyODdENDcyREI5MjdCODhERTgzNjcKKzoxMEZCMzAwMDI5NDBGQkZFNzQ5MjVBRTFDNjc5RDY1NDhBQjhGM0UxQTMKKzoxMEZCNDAwMEJGMkYwODUyM0U3QjQ1MkVFQjg1NEZBN0U5MkY3MUI5OTkKKzoxMEZCNTAwMDVGOTQ5N0I1MTk3MjBBRTZGMzU3NjEzOUU2OUZDRUY1QkYKKzoxMEZCNjAwMDU2NTBCRTY2MzU5NjYzRkQxMUZCN0M0MUNBMTdGQzUwQUEKKzoxMEZCNzAwMDk0OTdERUU5N0YyOTg1RTQ3QzQwQjQ3RkUxNTg5REVDRDEKKzoxMEZCODAwMEMxRjI1MDlERDlCRUJDQTE4MkYyMzVGNUEyRkRDODAzRDkKKzoxMEZCOTAwMEExMjBFNTA3REYyM0M2QjdGNENFQ0I0Q0ZFRjlCNDc0NDEKKzoxMEZCQTAwMEVBQTVEQkE5M0ZFNDlGOUI5MTdGOEUzQjYxOTQ2RUMzRTYKKzoxMEZCQjAwMEZDMjJENTY2MjNCQzVEMUMwOUQ4MDkxRjBFREJBQTQ2QjIKKzoxMEZCQzAwMDEyRkVDMDQyNUYwRUUxOTk5M0VDNTZCOTkzN0ZEOUM4RkIKKzoxMEZCRDAwMEE5ODNFRDI2MkE3NkQ2RkI1RTk1RkMwQUQ1OUI0NjI0QTIKKzoxMEZCRTAwMDQxNzI3NkI0RUUyMkZFNEVGMUM4OUI1MURFMTQ5OUYyQkEKKzoxMEZCRjAwMEM4OEFERkE1N0IwNDMzQTJGNkFCNjhBMDkwRjM1NkJEOUMKKzoxMEZDMDAwMEVDNzQ4MTE3RjBCMEMwMEIyQkJFQjhGNTIxOTBDOERGQTMKKzoxMEZDMTAwMDQyNkI2MzNGNDQ5Nzc4NjMzRkNCRUY1MEJGRTI2MTg0MTAKKzoxMEZDMjAwMEI3OTc1MzlDMzE5NjVGM0U1NkM0MTk5NzlFM0IzRDM1MUUKKzoxMEZDMzAwMDkxNUQzNDdDQTBCMEU3OEY5QUY3MjJBQ0VGOTVBMTVDODAKKzoxMEZDNDAwMDFCRDFDRkQzODQzQ0JEMDk5RURBMUY0OTVGN0E5QUM2ODcKKzoxMEZDNTAwMDFBQ0IyMDBEQzA2OERBNDc5MTJGN0ZCQ0VGN0RGNTdENzAKKzoxMEZDNjAwMDAxOTZEQUZDMEFFMTExRjQ5Nzc0OUFGRjU1NkRGRUM5MEEKKzoxMEZDNzAwMEJDOUUyQTgwRUZGNTRBQjAwRTUzREUyRjA5M0EzNjhCMzAKKzoxMEZDODAwMDM4MTFDMTdGNjY5OUZCNzY0QzlERjdDQUVENkMzRjdCQkUKKzoxMEZDOTAwMDc0M0I4RTMzNjlGQzAwQTZGQjk5NzMyNThCRUVCRjMzNTIKKzoxMEZDQTAwMDkwRjQ2MDNBQzE2MDdGQjY4RkUzREQ2RjgyOTA4MzA2ODcKKzoxMEZDQjAwMEI5Mjk4RUVFOTdCQjNGN0I4RkU0RDJGMjJEQjE3NEJEOTQKKzoxMEZDQzAwMDAyNUExREMyREYxQzc5RTQ2REVDQkY3MjQzOEE0QUYyMEUKKzoxMEZDRDAwMDY3NDU2MzZDQkRDQTBEQkYzRjIwOTU3NEU1MDM5NTE2NUIKKzoxMEZDRTAwMDFGMDhDNUYyMDE1NDM4MDQxRjc4NjgwODlGN0ZBRENDMDcKKzoxMEZDRjAwMDkxQjU0MzE5RTRGRkYwQjNCQzRGMDIyMUVGRUY1MkY0OEEKKzoxMEZEMDAwMDMwRDM1RjhCNTNEODUxQTY3RTdFOUIyQ0Y0RjMyNDcwQTYKKzoxMEZEMTAwMDY5RUU0MkUyQzMzNjMzNUU1NUU0QURGMTIxMkVDRUU1MDUKKzoxMEZEMjAwMDU0QzNDRENDNkZBQzc4MTgwNDIwQ0JGQjUzODFDQkQ1MUEKKzoxMEZEMzAwMDY4M0Y1QjA3OUY4RkEzRjdEMjk2OUVBRDc0REZDMEYyM0EKKzoxMEZENDAwMEIzQTA3RUMwRjYxNTJDNDI0RTM3OEVGOTEwRUY5QkI0NEYKKzoxMEZENTAwMDBDRkYzRjg2RDZFNUUwNzUzREQ0QTMzRkYzRjdENTQ4QzkKKzoxMEZENjAwMDEwQ0U1MkIyOEI5NUUyNTZFQTczODhBMDI3MTdEMTExQjQKKzoxMEZENzAwMEYxRjc2OUIxRjY1NjEyMDgzRDdFNzg5QkYwRTM4Q0U4MDYKKzoxMEZEODAwMDk0RkI3NUI0QkY0RUQwNUQ0MkVFMzcwMEQxNTdCN0Y2NDUKKzoxMEZEOTAwMDhBN0I1NTQyN0I4NTI1MTRGNjNGN0I5QUUwRUIxN0IyQjAKKzoxMEZEQTAwMDU3QkFCMzQ3M0FGNjMzMDlGNTM2NEM2N0ZBOTJCNkQzRTkKKzoxMEZEQjAwMEJBMkYzQjlCOUE5MjI4OUU2QTY2QjlFQzI1QkI2Q0E2MkIKKzoxMEZEQzAwMEREQzg0QTRGQTBFNzNGNjBFQUQ5MURGNTdENkVFRTRGRDIKKzoxMEZERDAwMEYxNjU2Q0E3RjgyNUVDQjc5NUY4N0ZEQkVCOEU4NDcxQTUKKzoxMEZERTAwMEM5OEFEOUJGNjIzN0Q0NDRGRDVGNDU0RUE5Mjg3RkJCN0QKKzoxMEZERjAwMEUyQ0JFNjdFQkYwMTdERTU3OURBOTc3ODc5RTREODFEMUMKKzoxMEZFMDAwMDc3NEUwOTgxODFEMTcxMDU0RjBGMTJGQzZFNDI4MUYxNEQKKzoxMEZFMTAwMDlCODE3NDRFOTRENDlGRjk5RDU2OEFGNjU0MUZDRTczREQKKzoxMEZFMjAwMDdGMDc2RkJFOUNFMzI0M0UwM0UzODI3MTEyNkJBM0ZDNDkKKzoxMEZFMzAwMEU3MDdEMzEyOUY4QkJDNjFGMkQ3MTQ4QTdEQzNGNDc2OTcKKzoxMEZFNDAwMENERjgwMzhEN0ZENDIxQ0U1RDhFMjY5QkE5NDc5QzVCODgKKzoxMEZFNTAwMEJERDM1MTVGRjBDNzg4QzUyNzZEQTJGQzY4N0FFQzc5RTUKKzoxMEZFNjAwMDhENTVFRjk0RDlFRTUwQURDQkJCMzZDQUZGQUEzREU0MTkKKzoxMEZFNzAwMEY0OTM5Q0NFQ0EzN0VGNzFBQzAyQjY5RkRCOUY0RkRCODkKKzoxMEZFODAwMDE0QkRBRjY3MDc5NkE3MENBMkY4QTI3Q0MzRDE4QkUwODQKKzoxMEZFOTAwMEY4QkM5MDdGRDU0QUQ4NDFGQkZCRjAyNUJFQTMzNEVGRDgKKzoxMEZFQTAwMDZBMEQ4QzY3QTgxRjJERUNCOEE2OThFQzA2MTExRkQyMUUKKzoxMEZFQjAwMDZFMTc3NjYwN0I5MjQ4QUQ3OTlEMUQzODIzNjUxMDlENDUKKzoxMEZFQzAwMENCREUxQzY2QkVEODkxOUYxMTY2QkU3Nzc2QTA5N0M3MjEKKzoxMEZFRDAwMDZEOUY2NTk1OUJGOUZGMTA3OTBENTQ5REU2NUJFRTMyQTEKKzoxMEZFRTAwMEVEODc0Mjc1MkRGQjVENTFFRjIzQkY0REZDRjkwMUMwM0QKKzoxMEZFRjAwMDc4QTExRjlCRjE5RTQ2REZCRkYzMzk1RTc3N0U3RTlCMjQKKzoxMEZGMDAwMEFCRUQ5NUZGQzJFRkYzNEQ3RkIwQUZGOUQzNTdFRUQwMTUKKzoxMEZGMTAwMDE4N0YwRUQzQjgwQjQyNDlDMDcxREZGRkE0NUZCRkJEOEQKKzoxMEZGMjAwMDVGMUJBRjY3N0Q3OUE0RkZDMzY1MUMyRkMwN0VCNTE1MkQKKzoxMEZGMzAwMDJEQkY2NUJFQkVDMkEyRkJBNjU4QkFFRjY1QzJGMTQyOTQKKzoxMEZGNDAwMEU3NkFGMUU3MkRERjAwOUQwRDFDOTQ0MEVGRkIzNUM5RkEKKzoxMEZGNTAwMDZCQzRBRjI5RjI3NEU2NkJBNzlBMjRGNjg3NjhEMDU2NzMKKzoxMEZGNjAwMDQ3NzA1RTI5ODk3RDU5RjlFQThEMTUwRUNBMkYwNjk1Q0QKKzoxMEZGNzAwMEY5N0M1MzNDM0ZGMzA1NDk0RjU4NUUwRjJDRUY0QTIxNjMKKzoxMEZGODAwMDNGOTVFMDVEQjM1NzI2MUYwMkRGQjdEMUEyRjgyNEREMEQKKzoxMEZGOTAwMEI3RDFBMkVDNjJCQTZGMTM5REE3RkIzNkQxRjVFOUJFQ0IKKzoxMEZGQTAwMDRENzQzOUREQjc4OTJFQTdGQjM2RDE3OUJBNkYxMzVENTEKKzoxMEZGQjAwMDlGRUVEQjQ0RTdFOUJFNEQ3NDdEQkE2RjEzOURBN0ZCNEUKKzoxMEZGQzAwMDM2RDFGNThGODBGRkMxRjExMkMxNzVFMjA2ODI2QkQzODUKKzoxMEZGRDAwMDFBQTc0QTcwQzVFRDdBQUIyODlCQzUxOUUzMUZERENCODQKKzoxMEZGRTAwMDg5RUU2N0I5NjdBQTYzMDVDMjYxNEY4RTBDRDI2OEJBMDEKKzoxMEZGRjAwMDc3QjMyQ0E2REZFNTcyMTVGQjA5NTBFRDYwMzlFMkM3MzcKKzowMjAwMDAwMjEwMDBFQworOjEwMDAwMDAwRkYzMTNDRTUyMkI2OTMzRjZGOTYyMDAzRjE3NUU5ODZGOAorOjEwMDAxMDAwMzhGREExRTVERTNBRDJCNzZGMEFDNTdFNUYwRTUxN0U4QworOjEwMDAyMDAwRjdEQ0FFRTc0MDRCMDY5OUYxQzBCREExMzdFMUYzMTQxMAorOjEwMDAzMDAwRDlBREQzM0U5RkRBMjdFQjRFMzA1RDAwQjRDRjVCODU2MAorOjEwMDA0MDAwM0ZCMjE0MDYzRDM0OUVGN0QxMEUyMThEOEU0NzQ0RjkwMAorOjEwMDA1MDAwQTk4RDcyMjg5MERCNzkzRTc0NkFFRkFGMEVGQkIwREU5QgorOjEwMDA2MDAwRDI1RUIyNEE3NEU3Q0M4OURERUYyNDJENzZCRjdCMTREMworOjEwMDA3MDAwQzZFRTc3OEExRUJCREZBOUEzNjNGNzNCMUVDRTY5NDY5NworOjEwMDA4MDAwRUNGRTgzM0M5REUxQkNCQzBGOUE3NzM4N0VDNkI0NTgyOQorOjEwMDA5MDAwN0NCMEUwM0IxQUZGMjdGMDU1NjNGODJFNDFGODNFMkM2OAorOjEwMDBBMDAwRDFCOURBM0Q3QkZBNjg1REUxNUNERDdDQUY4M0Y0RDdFMgorOjEwMDBCMDAwOEI4NUYzN0Q3MTcwRkUxQ0M2NTdCODE5QjgzMEQzMzVFNworOjEwMDBDMDAwQjI1MzVGMkFEQkVCRTcyMDgxNjM2QURGMEFGMzVFQUY5RQorOjEwMDBEMDAwMzhERjMxRTE4QUZBMEJEQjBCNTFFNzUwRjVCMkNDRkE4RAorOjEwMDBFMDAwQ0MyNkEyNjcyMzMzODVGOTgwQkVBMTA3RUZENzMwOTdDRQorOjEwMDBGMDAwRTg2RjMxRjg5ODNGMkQ4RUQzNkI5NkJBRUY3NzkwNUUwQworOjEwMDEwMDAwMTNCRjRFOUEwREY5NUQyQTVCODQ1RTEzQkZERTJFRkU4RgorOjEwMDExMDAwQTg0MkI1QjU4RkUwREI4RDBGRUJCNENDMTY4QjRGRkI0RgorOjEwMDEyMDAwQzg4RjkxMDk2RDBFRDI2M0JBRTM4MzMzNzI4QzVGOTNFQgorOjEwMDEzMDAwREM0MDJFMDYwNDBGNjEwQUYwNUY0MjdEQjJBNkEzNTg5MAorOjEwMDE0MDAwRjhFNzlEN0VFMUU3ODc0MDFBQ0Y2MzE0ODg3OTcwQTNCMgorOjEwMDE1MDAwMjg3RkZGMjgyNUM0N0UwNzM0MjlEOEJGNjREOTYzRjFERQorOjEwMDE2MDAwRjA4NEJFRDJEQUI3QjA1RkY5MjUzMEUxQThDQjkyQUQwQQorOjEwMDE3MDAwRDM3RjhGNTZBMDQxRkFGNUM4Q0Y4NEZFMzREQUQ1MTg2NAorOjEwMDE4MDAwNTRCNEFFRjZGOTI3RjlFNjM5Qjc2MkM2N0Y1RUUwMUNEMworOjEwMDE5MDAwOTJFNjRGN0U4RTZCQ0NGOEJCMDkyREEzNUVBMTdDQzc4NworOjEwMDFBMDAwQjlFNENFNTdGQkQwN0U4RERGRjlGQjBDNEFERjkyQjQ2OQorOjEwMDFCMDAwQzdFRUMwRjFBRjk2MDQ1RUM0REI5NUMxMURFMzM0REEyRgorOjEwMDFDMDAwRkZDQjI0MkZGQjJCQTY4MkJGQUZCMDQ3NDIzQ0FGODlBOQorOjEwMDFEMDAwMkUxRkVCQjUzNjk3NjFFN0YzMjhEMzdGMDkxMDlFNEFBRgorOjEwMDFFMDAwN0FGQTMyRERDMUYzNThBQjdFMzA5NUZDMzFDQkMxRjRFNQorOjEwMDFGMDAwQzczNEM3RUU1RjE3N0IyOENFMEVBQUMyRkRBNzdFRTNFOQorOjEwMDIwMDAwRUQ5RTA0NzgxNDE3MEYxMDJCRUYxNzE0NUFGN0NBNDVGOAorOjEwMDIxMDAwQkM4QTA2RTJGRTc3QTVFOTQ3QUE3NDZERjQ4ODczMzhCNAorOjEwMDIyMDAwOTQ3MzdEQTE4QkREQTQxMEUwQzdGMDc5ODVCRDkwRURCRQorOjEwMDIzMDAwNjJCNDA3RjhCQzVGNzMyNDhBRDcwMzM1OTNDRkQ1NkZCOAorOjEwMDI0MDAwNzRDRjY0QkU3QzYzN0QxN0JGMEVFM0Y1RTI4NjBCQUMxMgorOjEwMDI1MDAwQ0JENDEzQzZEMzM3OUNGRkUxNDE5QTkwRkJDOUQzRjdBNworOjEwMDI2MDAwMUE1NDVDRDZENjNGNUE5RkFENzE4OEZCQjlFMENGODg0RgorOjEwMDI3MDAwQjlCNzMwQjg1MDlDN0I5Nzk5N0E1M0E1Q0I4NDUzNjExQQorOjEwMDI4MDAwQTA4RUY0RTMwRUJEQTk4QkJERjhGNUVFQzk1OEYxMkU5MgorOjEwMDI5MDAwMDhBRkEyNDJDNkUzMDZDRjlBQ0NDRUYzMUQ2QjFEOUZEQQorOjEwMDJBMDAwOEM2ODdCQkMxNUUxMjVBNzRDNzYxMTdGNUNEMUNGMzdEQworOjEwMDJCMDAwOENFQUY3M0IxMDNFNEM3NDAzNkU4REY1RjU5M0NEQzc3OQorOjEwMDJDMDAwRjZDQjc5OURFQjQyM0M3QjcwMUNBREEzNTk1NkM1QkQ2NgorOjEwMDJEMDAwRjk0MEREMzhFQ0I3QkQ1NEUwNURGN0Y2QUY4MDI3Q0VDRQorOjEwMDJFMDAwRUJCMkMyQUNBRUYzQjJFMkVDQTdDODQ1QTlFMTI4QkRCRgorOjEwMDJGMDAwM0RDMzg0NUZGQjEwRUYxNDZBNTdGNkM3QkUxRTlBQUY2QQorOjEwMDMwMDAwM0RBRjcxNEY2RkQyOEI2RjE1N0EzMUVFMkJGQjQxNjQ4RAorOjEwMDMxMDAwM0I0OEE0OTc0RTkxQ0ZERTQyRjk1MzM5QTA5MkZEOTkwNAorOjEwMDMyMDAwRDkyMzIwN0I0OENGNUIwMEVDMjcwMkREQUYxM0FBQzg5RQorOjEwMDMzMDAwRkQ4QUQ4NEVDRUJFMTVFRDI3RUNGN0RENTUzN0E2RDE5OAorOjEwMDM0MDAwRkRGRUVDOTQ0NTY5Rjk2RThBNkZDMkE5MEVDMEJDNjRDQgorOjEwMDM1MDAwRjM4QUZCRDlDRkJDRjc2RjY1NTQzRThGRkREMkQ3M0JGNAorOjEwMDM2MDAwQzUzOTczRUUwRkZFQjY5Q0U5MDBCNDc0RTcxODFBQ0ZENgorOjEwMDM3MDAwQzdFRjBCNDREMjY0OUU1RkY5QjU5RjBEMjdGREFBRjcyNgorOjEwMDM4MDAwNTlGNzMwRDJDRjdBRDEzOTJGODI3NEE4NDkxRjk3NTVBNworOjEwMDM5MDAwNDQ4NkZCREQ5RDcwQ0FDQzRGNkNCRjY0OUJGMDM4OThERgorOjEwMDNBMDAwN0M3MjM2OUQ4NzU4RjczMDFFRUFGMTA2OUY4NzlGMzQ4RQorOjEwMDNCMDAwQ0Y0RkYyOEM2OUE5ODRFNzA3MDc1QUU3NUFBRDU5RTQ5MQorOjEwMDNDMDAwQjJBQTRFMzI1MkU3RDAzQ0RGOTRGOTdFQzU2N0FBOTFCQgorOjEwMDNEMDAwOUE4NkU1MjdDMUNCRkE2M0EwQ0RDRUU3NDRBQkVFQUU1QgorOjEwMDNFMDAwRTg5OUVFRUUzRTZFN0Y0REExQjA2RkFBRTJFMkEyQUFCRQorOjEwMDNGMDAwOTQ1NjA3OUQ2NzU1RkQ5MzcxNTE0RDY4NzEyNzNBMEZDQgorOjEwMDQwMDAwQjNENjVGOURBNjgwMzIxNDUzMDlCQ0U3QUJGN0UyM0YzOQorOjEwMDQxMDAwRTQ4NDcwREM2Mjk2Nzc3NzdGRTNFN0U2RkFBQ0ZCMTk1OQorOjEwMDQyMDAwRDU3NDNGMDMzRkFEN0FCRUJDMjc5Q0M3MEVBRDNFMzNBQgorOjEwMDQzMDAwMkVFNjFFMDREOTZCQjRCRUVBMzMxM0Y5N0JDNTVEMjdFMworOjEwMDQ0MDAwMUM4NERGRDQwRjNEODU2MEREQ0ZFODBFQ0VEOTg1QzI5OAorOjEwMDQ1MDAwREVBOEE2N0IwRDE5RDFERjA1MUQ3N0Y2OUZDOUU1NEZGNAorOjEwMDQ2MDAwOUE3MDdCNzJBRjZEREFFNjA0RjM3Q0JENTBEOERENDM0MQorOjEwMDQ3MDAwQjIxNEY2MTc1Q0RBMEFDNkE2MDRFMzVBRjVBQ0Y3MEQxNworOjEwMDQ4MDAwQkE5QjU3RDNBNEYwN0M5QTM3QzUwNTI3MUE2RkE3MDlFMgorOjEwMDQ5MDAwNDc2QkJFNERFOUUxMjU1RTcxQ0UzQTkwREUyRkU4Qzg4QworOjEwMDRBMDAwQUI5MUZFNTc0N0YxRDNCM0E2N0ZBMEU5M0JFMUZFRkMzOQorOjEwMDRCMDAwNUVDNjE1QzI4RUVENkU5RkU3RjRGM0E1MTM3RjE4QTlGMworOjEwMDRDMDAwQjRERUZBNEEyNjlCNUQ0MDdFQjQ5RUYzNUE2RDI0MjcyMworOjEwMDREMDAwM0JGODRGMzdGQkREMDk2NzM5RTYxRTRDNTczODNCQjgxMAorOjEwMDRFMDAwQkNFM0ZFMTkxODFFMjk5QkU0MTBCMDNFRjBEMDFGNEI1MAorOjEwMDRGMDAwMUMwRTFDRkY5ODBEMjJDNDc3QTZDODdEQTdCRTQwNzlBQworOjEwMDUwMDAwQjQxRjg4MkU4RkIxRUNDMDc0ODNDQ0Y3OTk4RTNEOUFCRQorOjEwMDUxMDAwRUYyMEJCNkM0OTM5NDQ2NEU0NUJDN0RFRUE1RjQ3NzE5NgorOjEwMDUyMDAwOTdEQTAyRDQyNEM3QTFCQUIzMzZGNkZDQjExMjhDM0RENworOjEwMDUzMDAwMjlEOEVFQzYwM0RFRDQ1NkNDMkZCQTI3NTY4RTFEN0JBMworOjEwMDU0MDAwRUJDNzBFQjIwN0E0ODU2RTNGQzUxNUUxM0NBN0JFODA4MAorOjEwMDU1MDAwRjlDNUNEMEVCRTlGQjVFNEZFRjhGRTYyRjVFMDZDNTMyMgorOjEwMDU2MDAwREVDNkVCQzM5RjE3OUFGQUYwNDgxODQ5NzJFNjg1REE5RgorOjEwMDU3MDAwNjZGMTdFOEU3OTFGMTFGNTNGMjMxMTlFNTg3QTcwMjhGRgorOjEwMDU4MDAwNzlEMkRGOTlFRjQzQTM0QzdDNjk5QzkyQjhGRTkyMjIwQQorOjEwMDU5MDAwQjEwRjJCMUYzQkVERjA2OERERDNEOTcxRTQyNzA1Mzg4RgorOjEwMDVBMDAwRkU4OTVBOTVEM0FDQzE4NjZCMzBGNjNGNjBCMDJGNjU5QgorOjEwMDVCMDAwMzBCNjk3QjU0OEZGNEZEOENGMjlDRTQxMTFERjM4NUYwRAorOjEwMDVDMDAwNDNGN0Q0NDhERUNFMTU3QTgyNTNCRUI5OTJGNUQxM0VCOAorOjEwMDVEMDAwQTAwNjU5N0ZGMUZCRDk5RjZFNDNGRDI0OERFMjM3NkU1MworOjEwMDVFMDAwOTEzREVDNkYxMEVGMDc4REY5Njg1MTFBQUQzN0YzQkZFRAorOjEwMDVGMDAwRTczQzRENzBBNTNCMEU0MEVGQjA5NDFCQTVDNERGRDc4MAorOjEwMDYwMDAwQ0Y3MEYzNzlGRjI2NUI4MEZCQTE0MEFEQkIxMDlFQTFBQworOjEwMDYxMDAwMjdDN0VDMjZGNzc5NDFFM0JEOTNDOEVFNTM1Qjc2QjU2NworOjEwMDYyMDAwOTJCRDUyNkZGQjc0MEZDNTI1RDQ0RjA0M0RDOEQwMEU0OAorOjEwMDYzMDAwRjEzODM1MkQzMzlFQTZGNkZENjdCQTc1QkE1RkJBM0UxRQorOjEwMDY0MDAwRDcyODU1QTNGQUQ3MjBGMjFFRTk5OTI3QUI2Q0VDMzdDRgorOjEwMDY1MDAwM0RENUZDMEIzRUFGNDJGQjJFNDJDQUY3QTlBQTNDRjZBMQorOjEwMDY2MDAwOUI1OTcxM0Y3Q0Y2OTdDMDZGNzgwMkU1MUI0NERERTcyQworOjEwMDY3MDAwNUVEMUI0Qzk0NkZBRjhBNUI0NTE1MTcxNTVENkJDQUE5OQorOjEwMDY4MDAwRUU2Q0NEQkU4RUU0RUUxMzBBQ0JEMUNDREY1Q0MxRjFCMworOjEwMDY5MDAwMDNCOThBMjYxMTNDQUY5MzU0QTE4RjlBN0FGMkI1NjBDMAorOjEwMDZBMDAwRkQzNUJDNDJGQUU5NDJEMjkzMTEwRjNGOTQ0MjFDQUY5MAorOjEwMDZCMDAwNjk4Mzk2NjdBOUZEREMxQ0ExMEY4MkQ2Mzg4MkZDRDcxRQorOjEwMDZDMDAwRTEyQUYzN0RBMkU1RjYzNEQyNkZBQzczODJFRUYwQTE5RAorOjEwMDZEMDAwM0IzRjBGRjZCNEU0MUQxQ0Y3QTQwNEVDNkZBQUIxNDUzMAorOjEwMDZFMDAwRkFEM0ZDOEVEQjEzQ0JENzc5ODM0RDNFMzBEMDFGNjIxQgorOjEwMDZGMDAwNzk5RTBFRUE2MzM0QUYwMjVGMkVEMTY1QjU0RDVCQzlCQQorOjEwMDcwMDAwN0VBRjdENUU4RTBGNjk5N0Q0RjQ5ODc3NUVENDg2NUY1NgorOjEwMDcxMDAwOTNERTVENjM1Mzg1N0Q3M0MwMjhBNUYzOThGNjE5NDU3NAorOjEwMDcyMDAwRkNFRUNCNDk3QkI4M0ZGMzExRTQ3QjE0OTc3NUVCMTNEOAorOjEwMDczMDAwNEQzMzE1ODQ1Qjc1NkZENEJCMzBCRkY5ODk1RDMzMTVCQworOjEwMDc0MDAwN0E4NzI3MkZCQ0M0ODZGOTU3MDdGRjQ1OTQwRjA5MUZFNgorOjEwMDc1MDAwQTZGQzFGOUZGODQ4OTQwRjBCMkZBMUZEMzlGOUM0NjkxRgorOjEwMDc2MDAwOTEyNzAzMEMxMUVDNkY0RkZDRUZDQzAwQUVFQkI4RTkxNgorOjEwMDc3MDAwRkYwNDNEM0M5RkU2NTlGREMyMjA1QkI0N0ZGMUM4NjA5OQorOjEwMDc4MDAwQzEzNzhGMjc4OTdBQzc3M0UxODZBQjQ5RkYyODBDRjNGRAorOjEwMDc5MDAwN0QxOEFCREU2QjgzQ0RGQjA0MjZGRURGRjQ2MjUyMkJBQgorOjEwMDdBMDAwQzUwOTVCRUQyMDI3NzFGRjQxQjNERDRERTY3QjU5NDg1QworOjEwMDdCMDAwN0ZCRkEyN0EyRkU3NjhFOUJDQ0Y0NzkxNDcxMTVDOUVDMworOjEwMDdDMDAwMUZDQ0U3M0QzNzBENEVFN0ZBMDQ5RkY0QTJBRUUzMkRCMAorOjEwMDdEMDAwMjMzOTRGNzJDMDFFN0JGRkFEQzFEQzJGMjgxMkZENTc5RAorOjEwMDdFMDAwRjc1NkQzNjgzRkIyRDM4NTlEODExQjkyNzYxN0JGNjNCRQorOjEwMDdGMDAwQjBDOUQ0QUJDNEZFNjRDQTZBNjk1MDY1QjkzMzlDRUMxNQorOjEwMDgwMDAwRTY5N0NGRjYyRDY1QkJCOUEyOUJGQjlFODM4NTFDQkJFQgorOjEwMDgxMDAwMjkyOEM2ODlGNEQyRDRDRDdDRUYxQzBDOEE0Nzc5QjkzQgorOjEwMDgyMDAwMzk2OTczRjQ3QjI5Mjc0REY4MUUxOTlDMjZFMEQ3QjE0RQorOjEwMDgzMDAwMEYzRDI1MUUyNzY4QzJBNTJGQzJCQkI4MTM3RkFDRjY5QgorOjEwMDg0MDAwMTc1QUY3RjY3RkQxQkFCQkVDNTM5OTk4OUZCNTFFODAyMworOjEwMDg1MDAwN0IwNTFDNzA3RTY5QThFNzFGNUY2M0I2MUI2RENENDNFNworOjEwMDg2MDAwNjM3QUI4RTlDNURCMzcwOEZFQTdBNUIzREQwRTNGMTFGMworOjEwMDg3MDAwNzA3MDU5RTMxNkYxRjlFNDBBNTMwRjk2MDM2RjM4QzgwNAorOjEwMDg4MDAwREU1ODUxREZDNkVGQUZBRDY4MTRFRjZENzVEMjlEQjE4NAorOjEwMDg5MDAwMkE5QUNFMzJGM0M1M0EzMzY1MjMzM0M4RjQ4OEVCNjMyMgorOjEwMDhBMDAwN0EzNENDNzg4MzU4RkNFOTgwNzczQzFENzdFOTRGNEI0QworOjEwMDhCMDAwOEZFRDRGRTNGRUJBREI4N0IwODkxN0RGRDgzRTA0MTMxNAorOjEwMDhDMDAwQzNCMzgzQkZDNEMxQUY4MzFFNzNDRDc2NDU4ODY3NjU0QworOjEwMDhEMDAwNURFOUYxOEZEREQxNzFFRUQ3MUNDRkJDNzdCMkUyNzY0NgorOjEwMDhFMDAwMzM1RTU1OEJDNUUzMTU0REI5QjY4NTQ1OURGNUVGNkU2NQorOjEwMDhGMDAwQkNENzFCMUQ0RkVCNkE1QTEwMjBGOTU3RDM1MkNFNzE0QgorOjEwMDkwMDAwQjUyQjlFREJGQUVCMDBCNjVGQjZGRDAxMEYwNTUzMUY1QQorOjEwMDkxMDAwNTMxQUIyNDkyRkFFN0E2QzlEQzdBMDczMTYyNUUwMjFGOQorOjEwMDkyMDAwQkU3OTJDMjQ0RjRCNzQ3Rjc1RDQxMDI5NDYxRkFCQTY3QgorOjEwMDkzMDAwN0Y2MkZGQzc5RkZDNUJEREJGRTFGQ0JGOTA1MEJGNDIwMQorOjEwMDk0MDAwNzg1NzM3RkRCNThFRUNCNzNEODYyQjQyNzJGQkE4MTI2NworOjEwMDk1MDAwOUU0QTcyRjRBNjA1NkUzRkJEMkY1OEQzMUNBQjRGMkQ5NworOjEwMDk2MDAwRkJFNTAzRDkxQTA3NzcwN0ZBRDg1ODlGNkFFRDQzRUREQworOjEwMDk3MDAwQUExRkI1RUI2NEJGNTdFRjkzNzUxQzA2NkEyMDUyNDc1OAorOjEwMDk4MDAwRjM4QjZGNUZEM0Y4QTE4M0UwQUFBMjNFRDg3NzVDRDc0MAorOjEwMDk5MDAwNzJFNDI0OENGNzM1NEQzRkZBNTRGNjUwN0FFQzFEMjg1QQorOjEwMDlBMDAwQTFGRUEyRkMxMTA4RjdDQTZFRjRCMkMyMjFCMUY3MDI4RgorOjEwMDlCMDAwMkNGODQwMjg4QkY1OUJFMDEzMEY5NUJDOEZGMzNBRjE5MAorOjEwMDlDMDAwRTg2QjFFQTkyODVBNUVERTI5Q0VBOTFBNkZGQ0Y5MEIyNgorOjEwMDlEMDAwNUFGNzcyRjUyNEU5MDdDRUFFN0E4MEQ2MkMwOTI1QkJFQQorOjEwMDlFMDAwNDVBNDU1RjY1NjBGRjkwNUFBMzZEOUY1MDA3RUFFREFCQworOjEwMDlGMDAwRkE4QkM3RTk1QzA1REU3NkVBNzRGNDU4QjVGNUI0ODM4MgorOjEwMEEwMDAwREUzRkFCOTI4Qzg4QzQ3QTE2NzhBNDkxOURGQkI0N0NBRgorOjEwMEExMDAwRUI0N0MyNUZENTRCODZFOUI4NEZDQjdFRjVCOUE4NkZERgorOjEwMEEyMDAwNDAyNDA5RUIyRjdGRkE3REY2NkY1NUY5REM3RTU3ODI2MworOjEwMEEzMDAwN0RBQTY4RENFNTA4QkIxM0VDNTNFM0ZCNTM0OTBGMEFCRQorOjEwMEE0MDAwM0VGMTI1RUZDM0IxOUQxMkY0Q0NFRERBQkU3MkQzNDc2RgorOjEwMEE1MDAwMEVBMjlCMTNCODIxMTk2OTAyNUU2NDlGRDYzNENBMEI5QgorOjEwMEE2MDAwMUNBOTg5RjZBREY1MkFEMkZGQjA5Q0ZEMjAxN0RBM0YwQworOjEwMEE3MDAwRDcxMDEwNzRGMURDRDY2RDY0MEY1NEJFRTNENEE3RDM0NQorOjEwMEE4MDAwQjhEQjZFRjEwMEVFRkYxMUM1MkZGMEZENjdFQkIyMEQ4NAorOjEwMEE5MDAwMUNCN0QyMUVDODU2MzkxNURGMkIxRkI5OTVGMTcwRTk2NgorOjEwMEFBMDAwOUJCNzY2QjM1RTA3NDYyRkRCNjg1RTZGMkY1QUU3RTI5RgorOjEwMEFCMDAwOERCMzc4OUQ0QkMwQzc3ODU4RjkzM0UxQ0ZGODVDODE4RQorOjEwMEFDMDAwNjk4OUVFMUI2RjFGMjJFNDg3MTM2RTJFMjFGQUY4MUMzMgorOjEwMEFEMDAwN0IyMjNGQ0MxMTA3ODg3OERFQjdDNDNCNjQ0RUI4M0ExRQorOjEwMEFFMDAwMzVGQTlEQjkzQjg3MDgzOTEwODBEMDdCRjRGRTY0MEQ0MAorOjEwMEFGMDAwREFDNUM0MTdFNDM3M0Y5RjRBRkRBQ0NBNTVGQzRFOTU5MgorOjEwMEIwMDAwRDcxRjMwRTEyNTlEMTNGMTFDOUE2MkM1OURFNkUxN0U1OQorOjEwMEIxMDAwQkQzOUE1MjdEOUMxNEUzOEU1QjhCRThDREY2OUQwQzgyQworOjEwMEIyMDAwRkYxQkQ1OEVFMTc2NjRCMzMzNTk0MjNCRkY0ODc2RTIzMgorOjEwMEIzMDAwN0I4NEVGOTlFQkMwQkZCNzIwMEE5RjZBQjYxQzYxN0MyQgorOjEwMEI0MDAwMDJCNEJCNTI3MzQ0RkU2MUEyNDNCNDhCNTIxMTZFOUYzOAorOjEwMEI1MDAwRURGQkQwRDE5QkZDMUQ5OTM2MTg0MEYzNkRGQjg4RjM1QgorOjEwMEI2MDAwQTA2NzY5NTRERkVBQkZBNkQ5MTlGMzJFNDlDREEzMUZBOAorOjEwMEI3MDAwQzVEMUIzMzNFRUJEMTMzRkMzQjMwNjUyMzVEMjM3OEY2MQorOjEwMEI4MDAwMzgyMjUzNUZBNDcxNzA1QzhBRDc1QzcyQkYzM0U2QkRCNAorOjEwMEI5MDAwQjA0RTdDNzE3NDdFQ0ZFREE0NEZDQkJFNUE2QUQyN0YyQgorOjEwMEJBMDAwRkNGQUUzRjlDMTkzNzFGQzAwMzY2NjdEQTVGNzlGQUFCNAorOjEwMEJCMDAwRUNBMUM3MDkzRTU1NDhBRjAxQTY1NzQxN0ZBOEEzNDdGRQorOjEwMEJDMDAwMDYyMDNEN0NGQ0Q0NEJGQkJGNEY3RUJBNDY3QkU2NzRDRgorOjEwMEJEMDAwMUUyRDk2Q0Y1NjNFODNGNDRCRkUzNDg0Nzc5MjRFN0M4NgorOjEwMEJFMDAwRjY0QjA3RTlCRDM5MTU2ODA3RTNCQzNGNzZFQjc0Mjk3RQorOjEwMEJGMDAwQUQyQkRERTJGNzg0NzRFQjA2M0VEN0ZBQkZDNTVGOTdGNQorOjEwMEMwMDAwNzZDMzVGRjdDNUMxRjM3MzI4NEFBNTNCMENDNzlGNUM0OQorOjEwMEMxMDAwN0UwOUZCMTVFMkUwNkJEOUJCRjE3Q0IzN0E4OEM2NzAyNAorOjEwMEMyMDAwOEVFNzlCRjhCNzFGQTJFMEI4RUNCRjNGNjFCQ0ZEQTIwNgorOjEwMEMzMDAwOTczODA3QUI3RUY0QUYyQ0JGMTBBQzExMjdFMjZENzU2RgorOjEwMEM0MDAwRTg1M0NFQUYyM0Y5QzVGOTVEMzNFOUJDQkFFQkJBNjMxQgorOjEwMEM1MDAwRTExOTVGQkVDMUU0NDcxREY3RENFRTg0MDBDNURENDU0OAorOjEwMEM2MDAwNzZDOEZDMEU0MzNCQ0VBNThFRjRGM0E3NzJGOTlDNzBCOAorOjEwMEM3MDAwOURBOUVGQjdBQjExMEZFOUU3RUJEMkFDM0NEQzQwRUYzRAorOjEwMEM4MDAwQzFCNDA3NEFENDAwQjU0RjMyRTMwRkJDMTE0RjVBOTQ5OAorOjEwMEM5MDAwOUVGNDdFOEJFQzIxQkQyRTFDODI2OTg5REYwNTBDRjI0RgorOjEwMENBMDAwM0NDMkQwNURGOTFBNzE1RjRCM0VCQjJENkNEQUY1NEUzQworOjEwMENCMDAwMUMyRkJDRTZDQjZENzQ2RTdFNDg3MUYxQjlFNUEyMzU5MAorOjEwMENDMDAwNzMzQzdDRkZBRjI1RkYzRjA5MkYxNkJGOEE3MDI0N0E0MworOjEwMENEMDAwMEExODhFNUUwOEU3MUIwNTA4RDBGQzA4RjA3OUIwOUM2NgorOjEwMENFMDAwNTJCNkU3NDVBQ0I3MDQwMTRDRTcyNEYxRkU5NDY1RTA0OQorOjEwMENGMDAwNEQ2RENERURFQTM3NDEzOUU4MjBGOUJGMTRFNTExRkIyMAorOjEwMEQwMDAwQkQzN0M2OTYyRjZCRjk5OEYxNkM1OTFDOUVGOTA4Q0YyOAorOjEwMEQxMDAwN0E3NUM1QjNEQzRCNERGRjRBMjk5NDlBRTdCQTZDQ0Y3QworOjEwMEQyMDAwQjdFRjk1RjkzQ0ZGOTQwQjU4REZBMDczNUVEQzMxMzhDOAorOjEwMEQzMDAwRDUyMkYzRkU5QzdBNEEwQTcxQkM2MTIwNEJCQ0RGOEE0MworOjEwMEQ0MDAwRjg0RTdBOTY4NTg3RjFGNjdEN0M3QUUyRDk3NzQ3RDI5QworOjEwMEQ1MDAwM0RCMUFBNUZGRkE1RTRCRjMwM0RGMUVCQjcwN0JFNDg0OAorOjEwMEQ2MDAwRjlFN0ZFRENGRjJGRDBCNTdFQzVDRUJGQjIxREQzQkVFNgorOjEwMEQ3MDAwRDNDOUZFRDBGNjlEQkZFRDRGNzJCOUZEMDVBNzRFRjg2MQorOjEwMEQ4MDAwREI3RUE3NTNDNDM1RUM0Q0UxNzdDQ0RBRkIwOUJGNURDMQorOjEwMEQ5MDAwNzBDNzk3MjU2MTk2NUI2Qjc5MUZBNzVGRUFFMEZEM0UwMAorOjEwMERBMDAwRDVGMjM3OTYyM0E3NUE5QzFBQURBMzY2NjcwRkY2OEYyNAorOjEwMERCMDAwRDVCQzkwMTQyMkZGNDBGQjhFMkY0NzQ2QkY3N0Y1Q0Y1RQorOjEwMERDMDAwQUVBN0RBQkM0RkQzOUUwMjczMjk2RUE2M0Q0REM0NTkxRgorOjEwMEREMDAwRDZCQzM4RTYxNzZCQzgxRTY5REFFNTIwRkY3RkM1NkYwMQorOjEwMERFMDAwRkU1RTQyN0NBOUZEOTk1RDBFRTI1QjY4OTczRTAyODgzQgorOjEwMERGMDAwMUY3MzJFRkRFOTAzRjY1RTc0NUYwQ0Q4REUzRTdERTlCRAorOjEwMEUwMDAwM0JCM0U4N0RBQ0FFNzAxMTcwNjg0NzM4RDBCQTEwMkU5NQorOjEwMEUxMDAwOTVBNDk3NzUwNzhGRUE2RjJEM0MzRTY1N0JBMkFBNjU2NgorOjEwMEUyMDAwMTREMzUxMjc1QzI0NDM3QzRGMDlCOTI0NUFGRkYzMUU4NQorOjEwMEUzMDAwRjIxQkI1RTdBMUZDRDc2OURENUY5NjkwRkU3NEExNzU0MgorOjEwMEU0MDAwRkZDN0E1RTI3REVFRkZFN0Q3NkQ4MzhCNUFGNzUzREYyRgorOjEwMEU1MDAwREE3NTBCRkMxRjc2QTkyNkRFQTc4QUEzODNBRTc4RkU3RgorOjEwMEU2MDAwREMwRjM4QkYyRDQ1RTdGOTdFNDVGQTdGRkQ1QkJCRkUwMQorOjEwMEU3MDAwQUZCQ0VGMjVFNEI3QkREODdERkZGODVCQkJFRTBCRUQ1MworOjEwMEU4MDAwRkJBQkU2QkVBN0E4NzRCRkFFN0RDN0RGRkJGMzdBQkY5RQorOjEwMEU5MDAwRTJCQTkzOEJCRUFERkNFREZDRUJFRUQwOEY2NEFGOEI3MgorOjEwMEVBMDAwOUVEOEJBMDc1QURCMzQ0Q0Q3NzVBM0E3OEMyQUIyRkM1QworOjEwMEVCMDAwMTBDMjFFOTE0RDdENjMxRDBDMzMzNjkxNUQ4NTdBMDZGRgorOjEwMEVDMDAwRDkwMUVCMzI0NUJFMUVGNTA3OTlFRjBGNzJCMDBBRDQ3NworOjEwMEVEMDAwRjdENUM1QkJCNjhBMUY1NENDREJGRjdDMjNDN0IzQUNBOAorOjEwMEVFMDAwQ0JGRTBFRTQ5NUQxNzk4NUYwNjMwNEQ3RThCRTVERDhEQQorOjEwMEVGMDAwM0U5ODY2RDM4MjNBM0Q1N0I1RDJCNzA5Q0JENURFQjIxQworOjEwMEYwMDAwNEFGNkNEM0FFRDZBNTdGNDNCMTY4QURCMTE2M0E3Qjg2RgorOjEwMEYxMDAwRTNFQzhERTQwMjQ3OEM1RDkyMDRCQjU1RjJDMzI3RTlGNAorOjEwMEYyMDAwMEFDN0ZGMzkyMUFBM0RENkNGMkExMkVGRjQyNzQzMjg1QQorOjEwMEYzMDAwQTBCQTJGMUU0RThCQkUzRTlDNUM3Q0FGNTIzNUUxMDRBNgorOjEwMEY0MDAwODY0MUVCNzY2QTBBRUI2MTBBQTBGRDI4RDYyMUVDNEVCOQorOjEwMEY1MDAwODRBMzE2MDU0NzMwRUQ1MEM1MDRCOUEyMEQ2MzM4QTIyRAorOjEwMEY2MDAwMDFBMTREMUE0RDcwRjUzMzFDODNCRDY0OTVFMURBRDlBQQorOjEwMEY3MDAwMUZBRjNCN0UxRkQ2Njk5MzIwQ0ZENEM3MjVGRDlCODcyQgorOjEwMEY4MDAwRjNEODIyMTExRjEwMEY2NzJCQ0RGNzk1QUYyMUZENzdGNgorOjEwMEY5MDAwRDUxQTcxQ0VGNUNDRUZCRUMzRjkyNjNCRUFDMzc0Q0ZBOAorOjEwMEZBMDAwMzBENUI3QTI4OEZDOEU1RTQzMjIzQTVEMzU0M0JDMkYxNAorOjEwMEZCMDAwNTg0NkY3QzAzMkM5RDQxNzcxQjg5OUFFQkVBMEIwQkZCOQorOjEwMEZDMDAwMTJFRDBDRjY1N0FBNDBGNjlGM0MwOTFBRDkxRkU4NTVCNgorOjEwMEZEMDAwRTJFMjdBNTU4RTdCMEFERTJDRTI5RUEwMTAzNEYxNEVCRQorOjEwMEZFMDAwNEI2Q0ZDNEY2MDEyMTQ1MjVDQzMxNEI5QUE4MUU2NzVCNQorOjEwMEZGMDAwMEE1MjFBMjhFRUQyNjE2RkVEQ0ZGRUUxN0UwMDhGOTE4QQorOjEwMTAwMDAwQkZBNUZDOEI4RDU0OUU4QjdBM0REMDdEMzJBNUY1M0RERQorOjEwMTAxMDAwOEE2RkI4NEQ0RTA1OEVBQjhBRTBBNzI4Qjg1RDc2QzZCQworOjEwMTAyMDAwMDU0QTE0OUNDQjIxMkQyNjdGQTJERkUxMjZCMjEzRjJDNAorOjEwMTAzMDAwMDI0RTk1ODJDNzJBNUNCRDYyREE5RkU4NzU4NkM3MEJBRgorOjEwMTA0MDAwM0E1RDJBRDk0NzUzRDREQzk4RjZCMjY3RUY3QjY0RDc3MAorOjEwMTA1MDAwQkM5MTZFNjNCQkUwRjI5Q0MxMzFFREFGRkFFMEM0QzY1NworOjEwMTA2MDAwMDUyNkNFRDIzQUJFRjdBRUI4QTc4QUY2RDYyM0FGNjMyRQorOjEwMTA3MDAwQkIzN0VGMDcyMEJGRjExNTVBNjk0Q0JCNjZEM0JGMTJDRgorOjEwMTA4MDAwOTk2MkU3Rjc2NkFFMkMxQzEzMzM2RTczNzgzN0MzQTVFRAorOjEwMTA5MDAwMkEwQjI0M0EwRkFFQjIyMTQ5NjBCREVGRUFFNTMxRjVFMworOjEwMTBBMDAwQkUzN0ZBOEE5ODdFNjcxODMzNjJGMjU1QUJCRjAwMjVDNworOjEwMTBCMDAwMDM2MERDRUFCMzQwRUYwNzk2QjYzNkM2QjQxRkJFQjc4RQorOjEwMTBDMDAwMzlBNkJFRTc3NTM0ODUzMDJERERBNzA1MjkxRDc1NTA3RAorOjEwMTBEMDAwREMyMzFEOEVGQjQxRTcxQkNERTE4NTNBQzVFQjE0RDMyNAorOjEwMTBFMDAwMDVEMDMyM0ExNkYwNTY1MDE4RjJDOEEzRkU5NzI4QkQyNAorOjEwMTBGMDAwNTBGQzMyOThFRkIyMjY5QkU3QUZFQjZEQTFDNjA1Qjk2NQorOjEwMTEwMDAwMTRGRkQzRjBFMzVEMTJDNzQzRUUyNjNDMUQxRDY5QTgxMgorOjEwMTExMDAwNDhDNUVBNjNDRjM0QkU0NDY5NTNEQkY4N0E3QUM3QjM3MworOjEwMTEyMDAwMEFBMDhERTVBRkRCQzZFNzAyNTNFNDk2MTI4OUVEOUY3NgorOjEwMTEzMDAwMUVDMzlENTFFNzJFRERCREQ3RjlBM0QyRjI3RDQ1NDhGMAorOjEwMTE0MDAwNDc2QjczOEM4NjVEQzRGNzI3QkQzQjVGQ0VFQjVBMEZCMAorOjEwMTE1MDAwNTQyNTEyOERFNzNGMkFGNTFFQTYzODREMkI0RTJBQjk4RAorOjEwMTE2MDAwNDIxNkJGNDc3MUI5ODg5M0E5QjNFOTQ5MjZGMzYyRkRENgorOjEwMTE3MDAwNDA5RDZBRTczOEZFNjVDNTgyQkY4RDZDREJEQ0U4MkVEQQorOjEwMTE4MDAwMjNCQkQzQTVEMUJFMjY2N0M0REVGM0JFNzFCNEI4QjcwNgorOjEwMTE5MDAwRjc0NTkxNzlCRUEyQTg1OUQ3OTMxRkJDMzg0NUI0MjcwQgorOjEwMTFBMDAwMUYxRjhEMzdEREM2RkE5NEU3ODBCRUM3OEVGOUZCMEE5NAorOjEwMTFCMDAwRjdBOUM0Q0U5QUE2N0YxMEUwRjc0RDBGQjQ0RDkwMzQzNgorOjEwMTFDMDAwODA5RUY3OTREQUM4MEU4N0JENzZGRTdEOTlBNkMyQzlDNworOjEwMTFEMDAwQTcwQkE4N0NGQTVCMUNDM0I4NkJDMjJGMEI0OUJFQUQzMgorOjEwMTFFMDAwMUMzQ0U0QkNFRjhDN0FDRTQ4QTA0NUM1NDEyQzJCRDZFNAorOjEwMTFGMDAwNzgzRTFFMjVDQ0VGMTI3OUNFMjg1Q0VFOTlBN0RCRkE1QgorOjEwMTIwMDAwNDc4REI3NzI4MkQwRkY1NjBFNEVERTRBNzhFQjM5NjBCQQorOjEwMTIxMDAwODhCOEE4NDJCNzM2ODBFOTIzOUNDMzdDNDIwOUU3NUNDMgorOjEwMTIyMDAwOUYyMkUyQUJCNEYzQkNGMzdGN0NDQjg4MzQ5MjYzMTk4QQorOjEwMTIzMDAwRTU3QTFBRjk0MTMzQjZDQTFERjdDRTY4M0QzRkE2RkZERAorOjEwMTI0MDAwRDBDMTNBQUNERjNGMTlFN0I1ODU2MkQ3NDQ3OTJCRjJCQworOjEwMTI1MDAwMjQ1OEVGQjBDQTkxMjU2MTNFNDNCMkNBRDdDRjlFNUNGNQorOjEwMTI2MDAwQzRFRjMxQzZENDFGOUFENzUxREY3MEU1NzRGNkFGMTVCRAorOjEwMTI3MDAwQUZERkJGQjY4OEUwMzdDQTQ2NzEyNUVCN0Y2N0U3NzdGNworOjEwMTI4MDAwMDY3MDlEQUM0RkFDNDQ3QTA2RTk3Q0YwRUM3MTAxNzhCNQorOjEwMTI5MDAwN0FCOEZDOTBBNEM1QkQ5RkRCNUE0Q0Y5ODJCRUJFNDExMgorOjEwMTJBMDAwQzU1OEZGOTJCM0E5RkMwRUMwNjdGNTQ5MkNGRjJFMzkzMworOjEwMTJCMDAwRkIzRDdFQUZCM0M5NjFGNEJGOURGRDM3NDkxQzZGMzY1RQorOjEwMTJDMDAwRTNFNjhGMzdBQzI2QkFCRUVBNzgyMUM1Mjg1OEVGNTczNworOjEwMTJEMDAwRDZBODVGMzAzRkIwRTJFQzNBRTE4N0Y4OEI3OEZGNjM0NQorOjEwMTJFMDAwNUI2NzlFRjg4M0E3MTM5RTA2QkRDRkI1M0UwQUJFRjQ4QQorOjEwMTJGMDAwOUIyRjMzNEM3OEZBOEEzN0NFNUU4QkZENkI4QkE2RTUzRAorOjEwMTMwMDAwMTA1RDlFMDYzN0M3RjU5RDU2MUY5RjRERjMzREJEQzUyOQorOjEwMTMxMDAwQ0U0MUI0NEQyNkJGMEMxNDlBRUYxMTY0ODY3M0U4NUU3QgorOjEwMTMyMDAwN0VGMTlCMzY4RTQ3M0E4OEY4NjAyMDNFRTRCN0JFOTkzRQorOjEwMTMzMDAwNUU0Q0VEMzI5NTc0OEE2RjM4M0RGRUNGRkM2RUMyRTk4QgorOjEwMTM0MDAwMUYwMjA3MTcyRjBCM0IxODVFNEQ5OThCMkFDQTE5RkZGNgorOjEwMTM1MDAwQjU3NEYyM0Y1OEYwNkQzNEZCNzlCOEQ0QjhCMjk4RkQ0QgorOjEwMTM2MDAwNUNFNjdEMTE2M0VDNDVCRDNGQjk2QkMyOTc3QzJFQjA0NgorOjEwMTM3MDAwMzYxN0Y1RkMzNDBBMzkzRTUzNDdFRjRCQUVDQ0I1QjNDNAorOjEwMTM4MDAwNUM1QTk5RjZDNUQ0NENDMkY3NzI1Nzg0REU4MUE4NTlDRAorOjEwMTM5MDAwRkQxOUMzMTdCQkM5OERCRTA3QTY5QzkxNDE4QjhBREY3RgorOjEwMTNBMDAwRDI4NjhBRkQ1NzE0ODNGNzVGMzlFM0UwRjJBQUQ1QTcwNgorOjEwMTNCMDAwOTk2RjVCRUQ0Rjk4RTdBQkY0MkUyM0REMTdBQUZBODcwMAorOjEwMTNDMDAwQ0NGNzQ2OTExRkQ2NEJDMzI4RERFRDU4MTlDNTRGQTA2OQorOjEwMTNEMDAwRjFEMzBFM0UzRjE0RjdFQUJFRTk2RjI1OTM5RjcyODY2NAorOjEwMTNFMDAwQTRDRUEyRjlCNTZDM0IzMzlCRTIwNTY2MjRBOUIzMjhEMQorOjEwMTNGMDAwREVBMDZFREJGQkIzMjlCRTYwNDYzRjc1MTZDNTE3REM2OQorOjEwMTQwMDAwNTczQzc5MEU5N0Y3NTIxRkIwQTFGQzdBQjk2NEJFQzg1OQorOjEwMTQxMDAwRTdBQTdGQTJGQzUzNUJFRjk4QzNGNTUzQzRCRURGQjZDNworOjEwMTQyMDAwNzVDRTlDMDBGMzYzMzdEM0MxQTlGQTFFMjFFNzc5RTg5MgorOjEwMTQzMDAwNjBFOUVBMTcyMUZBM0REQjJFRTVFNkVGNDlDMTVDQzEyMAorOjEwMTQ0MDAwRjczRUI5QkIwRkJGREIwOTA1NkQxQzJGQjZCRTU4RjhDMAorOjEwMTQ1MDAwRkIzQkNGNTc0MUE1RjNENUNDN0MzMEM4REY5Q0Y5NUM3MgorOjEwMTQ2MDAwOTJGODVEQTI0MzZERkQwOTdFNDczNkRFRjIwM0YyQTdENgorOjEwMTQ3MDAwQUU5MDgwREZEMUFGMDI2RDI0RDFENTQyNUJGODNENEFGQQorOjEwMTQ4MDAwNUYxQ0VFQkJCNzk4RjVBOTM2OEU3NzVEQkE3QTI3Q0Y4OQorOjEwMTQ5MDAwRUY1M0REOEM1QjU2MjM0NURFQUZGNTRFMDRGNjlGRjAyRgorOjEwMTRBMDAwOUQ4OEQ4MzhFMzBGNkNEQTQwRUE1NzMxRTFCMjUwNkVDQworOjEwMTRCMDAwOUJFRjEwRjM3QTk0RTZCNTIyN0QxN0M3MzkyQjZBNUI1MAorOjEwMTRDMDAwQjY0RkU4NTE4NTZDM0ZFNTI0RjM3QkQxNzVCRERGMjkyQworOjEwMTREMDAwNDlGNDNCMDg4REI1MjhFRjkxRTQ5RUE5NkRFNjc0RjVCQgorOjEwMTRFMDAwNTA2MDdDRUJBOTg0MUQzQUY2NTM3RDQwQzg5RDkxNkRGOAorOjEwMTRGMDAwMUYzOEEyRTMxOTc3OUJGMDREMzU3RkVGMkEzRTFFNzcwOAorOjEwMTUwMDAwMzdDOUE1QThCODgzMTVCRDVCRkI5MjdFNjhFRDZCRTc3NAorOjEwMTUxMDAwQkVCNEY2MzVGNzA1NjhCRTk5MTkyRjNENDVFRjlENTBDRAorOjEwMTUyMDAwOUNFQjBGRTkzQ0UzQjlBNDU2RjI1Qjc3OEYyN0Q2M0VEQworOjEwMTUzMDAwODg3OTM3MjUwQkJFMTE3OTM2ODlGNUE2Rjg3NTFDMzRFNAorOjEwMTU0MDAwRTc2REFEMjc2MkNBREZFRUQ2MTEzMUU1RUJCRjZBMUQ0QworOjEwMTU1MDAwMTE5M0JGQzdBRkM3QTI2RkVCQkI0NURGNUREQjhCRjk1NAorOjEwMTU2MDAwNUYzQ0RFODk3QjZEMTdDMjNCOEJGRjU0ODNBRjUwREM0MQorOjEwMTU3MDAwOTcxNkZDQzY4MkI3MzU0RjBCNkU0REREQzRFMzJBQUIyMAorOjEwMTU4MDAwOUY4RjU5OEZEMjM2ODk4QzFFNDgyRDExRUY1RjI5OEQ4MAorOjEwMTU5MDAwNTcwMEVEODdCMkJBODVFQjc1QjcxRTM5RTUzMzNFQzcwNAorOjEwMTVBMDAwNTlBNjgxOUZGNERFRjg3NTU1NDEyM0I3RUJCQUFFMDgxMgorOjEwMTVCMDAwRjNFMzE1OUFFMEM3NURFM0Y4MjNDQzlGQUJEMTNFMjM1QworOjEwMTVDMDAwN0REQzVBNzcwNzlGQzZGNTEzN0Q0RjQwODZDMzdDOTMxOQorOjEwMTVEMDAwRUUxMjRBNjQ1RkY4NjJGNEUzNzJCQTMxMTE3RDZFRTU4RgorOjEwMTVFMDAwQkEzOTI2M0Y0NUJEM0RBNkZFRTUzOTZCNjJDQUFGRDA4QworOjEwMTVGMDAwRUU4RTI5QkZCMkYwREU5OEZDNzdGNTlGQzZFOUY3OUIyNworOjEwMTYwMDAwRTJGNEZCMjc2MkNBQzc4N0RCNThGRjdFQTM3NjFBQzdCRQorOjEwMTYxMDAwQTc0RjNDMUE2MTNEQkNCNTU2RTVGQ0VFREExQzRFNUZBNworOjEwMTYyMDAwQUVENTk4RkVGN0Q0MTY3MkJBQjc1NkU3RUZCRkFCMUQyQQorOjEwMTYzMDAwQ0RFOUVCQjUwNkE3NkRCNTVFNEVFM0Y5NDY1OTVCQjg0QgorOjEwMTY0MDAwOENGQ0ZCQTMzMzUzRjkzQzZBRTM1MERGRjUyNTE0MDcwOAorOjEwMTY1MDAwQjkyRjUyNDRGODM3RjY0MEUzNEIyNDBBRjI0MzlGQkVCOQorOjEwMTY2MDAwNDdGNTRFQUIwRThFNDc1Q0JCNkJDQzFGNkVDMTdDQzY4NAorOjEwMTY3MDAwRUIzMjI0NjlFN0QzOEI2NDMwQTJGMEM3MzMzRDBDNzQ5RQorOjEwMTY4MDAwRkVFRDAxRjEzRTU2N0NGRDg1MjU0MjRGOUUwQjYxRjEzQQorOjEwMTY5MDAwOUVDMDZBM0UwMTg3QjkyRUY1MTUyMzkzQzU0Njg0RUM5QQorOjEwMTZBMDAwRjZCOUUwNjczREQ0QjY1QUJDNTMzMzE3NzQyODIzN0I5MAorOjEwMTZCMDAwRDYwN0ZFN0IzODFFMjlGNjdEMDFBRjMxNjNEREFGQjA2MgorOjEwMTZDMDAwN0MzNkREM0JDNUY2REY3NzM3RjJCREYyNjdGNkE2NEYxNQorOjEwMTZEMDAwMkVDNUVGRDc3QTI1RkU5RDhGMDMzQkVGQkFENUM1RjYxMQorOjEwMTZFMDAwQUY3NUZGRjQxRERCQzVFODEzMEI0QjA0N0RCNTRCN0FEQQorOjEwMTZGMDAwMUJDRDM3OTAyNkRFMkY4QTZGMzdDQTVDRTc1NUMxMDhBRAorOjEwMTcwMDAwRUIxRjExRDQzRjI4REVDQ0EyQ0IxOUVBMjE3M0ZEOUEzRQorOjEwMTcxMDAwMkQ3NTBDRDFDNzFBQkVERjUwRDVBNkU5NDE4NEY3OThDNAorOjEwMTcyMDAwNDM4MjJFNDYyMDVERDBCRThEM0QyQUU4NjAyNEQyMDE0MgorOjEwMTczMDAwQ0I0MUQzM0VCNEU4MDBFREE5OTdBOEZEQTk4M0EwM0IxNworOjEwMTc0MDAwQjE3REREQzQxRkM5NjQ3RjhERjkyQzE0QTRGNEIyQjMzQworOjEwMTc1MDAwOTE1REU3QjA3QzVDOUJGOEREQTQwQkQ5OTM5NjVFREFEMworOjEwMTc2MDAwNTIzQjk3RjE2ODY3QUQ4RkQzRDZEQTRBMTMzRkZEOUNBMQorOjEwMTc3MDAwN0ZCOTc2MzVFN0Y3RDQwNjM4REQ1QjVCNkZFMjY3MDM0OAorOjEwMTc4MDAwOTdCRjVFQkI4MUYzNkZENDg2NEMzQ0REQzJERjM1OTJFMAorOjEwMTc5MDAwNjcwODlGQkI0QjRDMzlFRDJBMzdFRDBBOTE3QThEMzU5RQorOjEwMTdBMDAwNzZCRUU3OEY5Rjg4OUZDQ0E1QjkxMjdFNTQ0QTIxRTI2RQorOjEwMTdCMDAwREY3NUU5MDEzQkU1RUI5MjY5MEY2OEQ2MDFBRTdGOURDRAorOjEwMTdDMDAwMUI1QTQ5MEU1NEU1QkMyOEY0QjAzODNDMjlDRkJDODZERQorOjEwMTdEMDAwRjE2NEE2MTlDNzdBMjBCREVFNTYwN0UyQzM4OUM2RkI5RAorOjEwMTdFMDAwRUNCMUVGOEQ1RTFDNUUyQzczQUZFNTdCN0RGMTdDRjE3RgorOjEwMTdGMDAwMjY3QThGNDJFRUNBMEYwMTc0QkRBQzRDRENFRkEyMzhFMgorOjEwMTgwMDAwQkRBRkNBRUY1NTVCOUI3OTVGNENEQzdGQTlFRUVCRTY4MQorOjEwMTgxMDAwMzhEQjdGOUQ5QzUxNEQzOTAzMEJBODdFODdGRDlEN0M1NQorOjEwMTgyMDAwNzAzRUJEOEZENzA1MkU3MUY2RjdFMTQxNjI3RjJERkIyQgorOjEwMTgzMDAwMUJGNTRDRjY0QkI1ODc2NEI2QkYyQTczMUIzQzZDN0YxNworOjEwMTg0MDAwOEY4RTc4NjgzRjZGREEyMTAzRUI4QjhBMzhFRjVENEEyMQorOjEwMTg1MDAwMUQ2OTE0RDdEM0JBN0YxQ0NCOTk1NTdCODgyRjJEMzNBNAorOjEwMTg2MDAwQ0Y3QkUzQ0Y2REFCRTlCQzU3NEEwNEVGMzBDN0Q1MkYzMAorOjEwMTg3MDAwMzdDRjdCRTNENzVEM0RGRTA4OUZGNzU2NUZFMDVFRTkxQgorOjEwMTg4MDAwN0IyNUIxQkZFNzEzN0Y3RkI3M0I3Q0ExNzg4MkU4Rjc2OAorOjEwMTg5MDAwNUM0RjlFQUQ2NTNCRURDOEI2M0IxRTBBRjRGREQ3RUQyRgorOjEwMThBMDAwREZBREE1REVDRjRBNDQxQzM1REY5QkIzRjZCM0NFRkNEQgorOjEwMThCMDAwNURDRUJBNDkyRUJFQzdEMDNFNDJFNUY3NkZEQTI1RjFCQworOjEwMThDMDAwRkU0RUZCNUY0MTVGQTNEMUZCM0FFQUNCMjQxNzJFRDMzOAorOjEwMThEMDAwMURDQzU3NDc4N0M1N0IwMUUzRTk1RTYyODJGNzAyMjY4QworOjEwMThFMDAwMUMwQTA1NTNBOEREQzEwMEZCQTNDNkVDRjMwNUU5REUyNQorOjEwMThGMDAwRURBOEQ3MEQ5OUM4QUJGNDY1QUY0Qzc4NjBDOTI3NEJGQworOjEwMTkwMDAwNUU3NUQyOTU3OTZGOEU2MjMyRjJCRjNBRkQ2OThCNDY3MQorOjEwMTkxMDAwRTc5MDdFRDc2MUI3QkFBN0YyM0I0NUE3NUI4MUEzNDlBMQorOjEwMTkyMDAwMkRCRkQ4RjA4Mzg2NENGNzEyNDYxQ0YyMDU0OURFRDY0RgorOjEwMTkzMDAwOTk3NkU2QTgxMzAxMzkxNUJGNEZGOENDQ0Y3NkQwMThBOQorOjEwMTk0MDAwQjQ1M0U1NTI3MThGREE4ODgyQUZFNUQ3QjJGODlDQzVGRgorOjEwMTk1MDAwRDdBQzdCN0JBQUMzQjc4NUZDQ0ZGMDQyMTJCRkZGMTI4NgorOjEwMTk2MDAwM0ZFRjQxNDM2REQ2N0JENjgzODYxMkRGMzNFRkU5NERERgorOjEwMTk3MDAwOTFDRkVFM0E0Nzc2NDE5Qjg4MTdCOEU0NkNGQkUzNjQ1RAorOjEwMTk4MDAwRjdBQzdBQjYwN0RGNTNCQjkwN0Q1MEEzOUU0RUE4OUY1RAorOjEwMTk5MDAwNUE2OThENEQ5Q0EzMENBQkQwODY5M0JENDk3QTJCRDk0NworOjEwMTlBMDAwQTE5NjVEMUE1RkJGQUM3NEQyRDhBMTU5MzRBRkYxNkQ2NgorOjEwMTlCMDAwMDZFMUI3NkEzQjJGN0VEN0FDRkVGNEJDNzZBMTM1N0UzQworOjEwMTlDMDAwQ0Q4RTExRUFDMjI4QkZENUVBQTE5MjE5QzdGMkY1REU4MQorOjEwMTlEMDAwQTE5RTEwOTkxQjIzQzdCRUVEN0ExRkQyNjExOUUxMTc5MgorOjEwMTlFMDAwRDk4NjI0QTdCRTRGM0I4MEVCQjgwRTVBNTk1RkI5REVBQgorOjEwMTlGMDAwRkMxRDhCMUIwMDFDRDFGNzY0NkYwNDgzRjlDMzlGNzQxQgorOjEwMUEwMDAwNUYwREUxQ0Q2Mjg4Q0NBNzdDOEQxNEE5N0ExMTQxRjhENQorOjEwMUExMDAwQzlDNDcxNkFBRUQ2NTU1RTVGQUM3QzRFMzZFRkMxQzZBNgorOjEwMUEyMDAwQzNGRDRFMTM2RjJERkVERkVERkVDNEYxRkZGNjUyOTVBMAorOjEwMUEzMDAwRUY0MUI3M0YzQkNFNDZFNzM4RURCRjk3RjlGRDU0QUNEOQorOjEwMUE0MDAwQzg3QzI1Mzg0Q0RDM0IxRDNFQ0Y3Qzg3MDRGOUNBMDA5RQorOjEwMUE1MDAwQkQyQjVGMzkzRDdFQ0U2NEY2MUZEMUMxMDZDNTlGMkFERQorOjEwMUE2MDAwN0FFMUY1NTFGN0NEODJFNkVGQkE2Q0MxOTRFMjI1NTNFNQorOjEwMUE3MDAwRTc4NTk1RThGM0IzOUY5QUYzMkZCRjc2MzI5MDNENzRENAorOjEwMUE4MDAwOTUyQUVDQ0UyOTJFQzg0QzIyNUU3OEY2NzREMTJDNjRBRgorOjEwMUE5MDAwMTA1NzkxM0UzQjlDREY2MTdGOThFMERDRjEwRTA4RjEyRQorOjEwMUFBMDAwQTM0QjcwREZERTE3RTc3QzcwOTNDNEZFRDJFNjI2OTE2RAorOjEwMUFCMDAwMkY1RTlDQzZFQkZBQUFGQjg4M0RGNzI4QzFGNTJGNkU3NgorOjEwMUFDMDAwNTI4NjExN0QwRjREOEZFNDExNUQxNjhGNzkzQjVEQzJGQgorOjEwMUFEMDAwNzk5NTk4RjdCMTcwREFGNTEwRjVGQjU2RUY5QUVCRjhCNworOjEwMUFFMDAwN0NBOEIxOERFNjM3MzRCRDZERkQ3REE0NUYzRTZCMDNGMAorOjEwMUFGMDAwRjIxQjFFMTk3M0ZCMTI4ODkyQ0I5RUQyNDlCRkEyN0FBOQorOjEwMUIwMDAwREIyNUYzOURCQTFERTJGNzBDQjA0NTc2QjQ3RkVCNEZCMQorOjEwMUIxMDAwN0FDNUYzNTRBRkQ1RjQzM0MwQUFFN0Y5MUVGRjBDNTVDQworOjEwMUIyMDAwRUMwMTRDQ0UzMjdGNEYzMkQyM0ZEMUVGMEI1OUU3NTkwNworOjEwMUIzMDAwNDMwOTk2QzJGRkM4RUY4QTZEMzdGRDkzNkYwRUZENjBCMworOjEwMUI0MDAwMEVGOTE3QTEzNTkyNDdGMzM4OTIyNEVFNTE3QjRBN0Q2NgorOjEwMUI1MDAwQkYyMzNFMzM5NEZDQkNCNDhFOUYwOUZGQzA5MTM0M0YzOQorOjEwMUI2MDAwREYyMzc5MUJGOTMzOUQxRkZGQTVENkM1RTlCQjY4MUY4RAorOjEwMUI3MDAwNTFGQTNGNjgxRjUxRkEzRURBNDc5NDdFODhGNjExQTU2NAorOjEwMUI4MDAwOEJDRjYwQTdCODdGMzM3NEUzNkRFNkFGRERBQ0EzN0I4QQorOjEwMUI5MDAwRkUxMjMwRjVGQkM0QkZEM0Y0OTYwOUZGOTJBNjQzNzczQgorOjEwMUJBMDAwRjYyMDNDNjg5NjM5M0VCQUY4NTk4NUY1RDM5MzJEQTNCMworOjEwMUJCMDAwNjI3RTk3MTRFOUY1MzBBREFGQTRGOThGM0ZBMTdCRDZEMworOjEwMUJDMDAwMjU0RDhBMkE2OTc0MkZGQjc0MzZDNzFGQzZDRDhGRTA1NgorOjEwMUJEMDAwNDBFNzBEOTExRDBFRjE3QjRBRTY3Q0I3QTdCNUFEQTc5NgorOjEwMUJFMDAwRjZEQjlGQ0RBMzE5RDIzOThFQzBDMzFEQ0U4NEJGMzc3QgorOjEwMUJGMDAwNkNDNURCM0QzMTU0RTg1RkRGNzM0NkNBQTJDRjFGRTNGQgorOjEwMUMwMDAwRTNEM0Q4MEYzQzg2RjBCOUUwMEYzNDRFNjBBRjBDMDMzRAorOjEwMUMxMDAwMTgyRjYzRkQxQkZENzQ3MTBGQzE0QThCNzczODM4NEU0NgorOjEwMUMyMDAwNzlGQjhFRkQ1NzVGODlGREZEMUY4RkI2MUIzMTAwODA0QworOjEwMUMzMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkNEN0Q5RAorOjEwMUM0MDAwMEI3ODU0RDVCNUYwOUEzOUYzNEEzMjkzNENDMjAwMDk1NworOjEwMUM1MDAwMTIzODA5QUYwMDAxODY2NDEyMTIxMkUwMjQwNDhBOEE0NQorOjEwMUM2MDAwNzQ4MkQ0ODJBMjhFQjQ2MjU0MUUyM0QyOUFERUQyM0ZGMgorOjEwMUM3MDAwMjcyNDQwMTI4MzA2MDVDQTU1ODQwMUMxQzdGREZDQUU2NgorOjEwMUM4MDAwRDEwMjE3NUJGNDRFNTBBOUY2QjczNDIyRTJBMzU0QzczMQorOjEwMUM5MDAwNDc1NTJDNEE4QTYyRUJBRDJERkY1QTZCOUY5Mzk5MzNCRgorOjEwMUNBMDAwNEMwMjIyRkM5N0YwRTlDRTNFN0I5RkZENThFRkM3M0VFOQorOjEwMUNCMDAwM0JCMzI2NUU1RTI0QzkwMEE3RTk2NzBBODBDQkRCMTcyOQorOjEwMUNDMDAwQTAwODYwNENFOUQ3MEZEQ0VGQzFGMjU5OUJEQjA0MDBBMAorOjEwMUNEMDAwRjM2MERCMzQzN0Y2QkJDRUQxRjFBMjFCRUJEN0JCREYxMQorOjEwMUNFMDAwOUI5NjhFRjUxQjMzNEQwN0E4QkM0OUNFOTk5RTgxMjU0NgorOjEwMUNGMDAwNDA4OERGRkY1MTVFQzU4MTBDQUNDREY0NTZEQjAyNEU0RgorOjEwMUQwMDAwODAwQTkwMDBGMjgwN0Y0RUUzN0Y1MzFEMjkwMDhFNjg4OQorOjEwMUQxMDAwN0Q5QUJCOEZBMUZFQkRDQ0NCMENGRDJGOTc4NzE4REEyNworOjEwMUQyMDAwQUZDQzFCNkQ2OEQ3RTc5REU5MkQzNEY0MUI5N0QxOTU5NworOjEwMUQzMDAwMUI3NEQyM0VCRUJBQTcxQ0Y3MDMyNjA4MEZBMzdERUQ4NQorOjEwMUQ0MDAwRkVGMkVEREJCMTlDMzU3MTlFOEZGNjdGMENEQUFFMTk5OQorOjEwMUQ1MDAwOEQxQkZEQTRBNDc5RTNGREY0QjI0NUIxNjVGNTAzQjg4QworOjEwMUQ2MDAwODU3RUM3RjZFMzEwM0U1Mjg2RUQ5MjZCRjk4MTNCRjExQQorOjEwMUQ3MDAwQkREQjMyMjU5MEJDMDAzNTlCQURFRjQ3NjJENkIxMDQ4OAorOjEwMUQ4MDAwRkM2OTYxRUM3N0RCMEVFMzczODA4ODJERUMwM0I4M0REMgorOjEwMUQ5MDAwRTAwQ0I2MjAwMDE3M0Q4MUVEMEU0MzNCOEZCQjc4QUZDMgorOjEwMURBMDAwQ0Q0REVENEJDMDEyNkRDRjAxQTgzRDlBRjNFNDBCMzE0MAorOjEwMURCMDAwRTM4RENCRThCQ0VGN0UxQzZGREM5RTM5RUUwNjVDREY2QQorOjEwMURDMDAwOTNBNTVGMEY5MDcxOUZFNTVFOTdFNzIzMDQwRDRDODAwQworOjEwMUREMDAwMDlBNzExRTQyMDM5Q0Q4MEZENEVCRDI0ODUyNDVDRDdCMAorOjEwMURFMDAwMzRFOTlCRDQ0ODNFM0VBRjQyM0M2N0UxN0IyNkY5MEY4NQorOjEwMURGMDAwNjVEOEFFQkUyQ0MxNEUxQ0U3NkY3NUYyOTMyRjU4NjlBMworOjEwMUUwMDAwN0NCOEQxOUYxRkE1MEI4MDk1MEM1RkJEN0NBQjBFN0Y2RQorOjEwMUUxMDAwMUQwMUYwQzczQTA3OTc3RkFBNzM3M0Y5NkU1RDI2OTc4NQorOjEwMUUyMDAwRUZENUM5NUM3RTUwOTdDN0U1QUM0MzEwNjhDN0YxRkU5QgorOjEwMUUzMDAwRkNGN0YxMDA3RDY4MUMxNUEwNkZCNDFDNjdGMzlBMDdDRQorOjEwMUU0MDAwRTAzQUJBN0UyRjg1QjZFMzdFQkYyODlGOTAwNkI0Q0VENworOjEwMUU1MDAwNkY3MEZFNjIwRDBGNDgwMkQ1NDQ4Q0E1RjhERjhGQjc3NgorOjEwMUU2MDAwQkQ5OEU1RTNFN0FBMEJBNzVBRjI3NzA5MTQxQzc3QjlFNgorOjEwMUU3MDAwRDcyNEM2NURENEYxNjI5NjI3REEwRUNCREYzM0Y0ODcyMAorOjEwMUU4MDAwMTVBNjAzODY3QTYzOEVCMURFNUE3MTIwRjY3RDFEMEU4QgorOjEwMUU5MDAwRjFFNTJEOUJFRkIwMDU1QzU4QUUzNzI5MjFFNzk5RURCMAorOjEwMUVBMDAwRkE3QUE2RUQ0RjUyNEMzODlFNjU5RjNENjRDN0ZEMkREMgorOjEwMUVCMDAwNzEyQkEwNjA3RjBCODBEMjlFN0ZFNjdCMDBGNTBDRTc0NAorOjEwMUVDMDAwNzkxMjA0REIxMzhDNUI0N0UzMTJCREVGNEYwMkU5M0M1MAorOjEwMUVEMDAwQzY3RDBCNjk4M0Q2QTNGRTk3M0RCNDEzREY3QjJCNERFNAorOjEwMUVFMDAwMDE3RkNDM0MyRERBRjg5RkE1QjdGREUyMkJFQ0Y3RDlBQQorOjEwMUVGMDAwMzM0MDRGQjAwRTczNjkzRDYzNzc3RDZDMzY2MzM5MkU4NgorOjEwMUYwMDAwNTlEMEM5NTg3N0M0OUM4MUU1ODk5QTdGNkMzQ0UyNjFCRAorOjEwMUYxMDAwMzJGNTlCMjY2MzdCNkVENzExMDdBMkZDQkVGNkFCMzY2QgorOjEwMUYyMDAwMzkxMDZGNkY5QkNEMDAwMzQwMjBCRTA0RkJFMzE4NTRCMworOjEwMUYzMDAwN0ZEMDdCRDVEQzQ2RkNGRENBRkQ0OTYxRjM3OUVDRTczNworOjEwMUY0MDAwNDFFNDQ1QTZBMzRBQzFFRjM3MTBERDg4NzkxNDQwNTExQQorOjEwMUY1MDAwQjM3NDE1RThGMzJBMjQxRjY4RkY1NDdGQUREREZGRTY1NAorOjEwMUY2MDAwN0FBMjMzRThEQTQ4RjJFMTM4NDBCODg1RDdBRkE0QzZBMAorOjEwMUY3MDAwRjJGRkQyNjc3RkMyRkNCOTI4MEJGOTlFMDRFMDY2QzE2QworOjEwMUY4MDAwQkYwRUZDNzczQTk3RjgzNTM0REQ4OUVCQkQzNThDRkMxNAorOjEwMUY5MDAwMEYxNzlGRkY5RkYxM0FBMzdDM0UyMjIxOUYxRkJBMTI4OQorOjEwMUZBMDAwRUI0QjlGOTFCQzc2NkMzRUI5NkY5OEUwMjc4REVGNzUzNworOjEwMUZCMDAwM0VEN0UxQjg3NDkzQzQ3Q0E5RDczRkRGMjdDRDA4MjU2RAorOjEwMUZDMDAwODBGNzM2OEQyRTg2Mjg1REIzNjlCRTY1Q0Y1QUEwMDU5MQorOjEwMUZEMDAwRDdCNzZDRDI4OEZFQjFFM0M3QkZCN0I0NDkwMjM5NjY0MAorOjEwMUZFMDAwRkMyNzlGQjNENzEwQkZDOEQwRDVBRjFBRjk2N0RDQjNCMQorOjEwMUZGMDAwQTczMjJBRjI0NTU5Q0ZGODY4RDNFNDRERDcyMEZGMTgwRAorOjEwMjAwMDAwOTRENzI2RkY5RjdFOEVGMzAxRTI3MTI3QzJBNzMyNzMxOQorOjEwMjAxMDAwNkUzNkNEM0ZEQjA5NEFDQjc4MDZDQjFDMDdDQTg5QUJBRAorOjEwMjAyMDAwMDU4OEUwRUE5MkVCQjIwMUUxQjkxOUQxMjUyMUREQ0RCNQorOjEwMjAzMDAwNTFBQTVGQkYwRUYxRjgwMzczRTAyQTkyRjNDN0JDNDNDNQorOjEwMjA0MDAwNzhGQzZCNUNDQkFENjA2NjcyQ0QzNkUxNzg3M0U3RDgxNworOjEwMjA1MDAwMEI2OTNGQjMxQTA0NURCRjlFREU3NTlDOUVCRjNFMjk4RgorOjEwMjA2MDAwQzVENDgwRUZCRDZFODI0NkM4ODhFRUUzNzVBQjNGOUI1QQorOjEwMjA3MDAwRTgwRDM3RUVGRTA4RjE2MzUyNDY0OUE3NTM3QTk2MTdFQQorOjEwMjA4MDAwNDRDOTFGRTk3ODk0QTJGMjZGOUFFNDU0Njk5RTkzNkU1MgorOjEwMjA5MDAwMzNEM0JEMjVBQkQ1NDZFQkJBMTU0MjA3MTQ5Qzc3ODlERgorOjEwMjBBMDAwMzc2QzIzRjk3NzNCQjgyRDU0NjJEMUQ1NEQxRjQ0N0Y0RgorOjEwMjBCMDAwRTVGRkU4Mzg4REVGMkZFOTk0NDIyNkVDREY1RUQ3MEU3RQorOjEwMjBDMDAwMTZDNEVGRDM3NTdCQjkxQ0ZDQ0RFMEM2Q0IxMDFFQ0I3QworOjEwMjBEMDAwQzdEQkJDMkRBNEI3MzRGQTMyQUIyNjM4OUQ0MDVGOUREOAorOjEwMjBFMDAwNDk5Rjk2NjgzQkFFQkJDMkUxMEM0QkE5RjREODdBM0M0MQorOjEwMjBGMDAwNzYxRDhERDk0QUNBNzhEQzhGQkFBNjNDOURFOTkzNjhEMworOjEwMjEwMDAwNjE3MDc0OUZFMzZDMDA0RTkyRjMzQjUzNThDRTFGN0I3QgorOjEwMjExMDAwQUVEODRDNzgzQUY2M0I2QkM4NDRGNTJEMjNERUI4RDNFNQorOjEwMjEyMDAwQzc3NTIwNzk3MzJDQzM2QkI2NTE3QjQ2NkU0OEM1RjZENAorOjEwMjEzMDAwNUJDQ0EwOTI1Qzg2RUQ0MjZFM0QzRkU5QUU3NzQ4OEU2NworOjEwMjE0MDAwMkRERkU5MzJEOTREODI4RTY1MzQwMUE0NDdEN0JFRjMyNQorOjEwMjE1MDAwRUYzOENFQURDOEFDNzY2RjU0NkYyQzlBRjJFOEM2MjczNAorOjEwMjE2MDAwOTAwRTE2OTlEQkVFMjlDNzY3QTcyMDNDRDY4REYwRkNCMAorOjEwMjE3MDAwOEJBOTdEMzhFOUVEOEYxRkIyODdDREY0REVDMzIzQjc3RAorOjEwMjE4MDAwNEIzOEZFQ0JBOTgxOTFCNDFGQzg1NEZBRTdFMEYzOUEwQgorOjEwMjE5MDAwNDM3REExMDVERjlGRkFFODNGMEY5MkRFQkNGNUM5QkU4MworOjEwMjFBMDAwQ0M1RjNBREQ0RjIzM0VDNEY1OUM0MDNFQTRGNTlDREM1OQorOjEwMjFCMDAwMzc4NEY5MkU4QTdGMDE4N0M1MjgwRkM4MjQ2QURFQjFDQgorOjEwMjFDMDAwQ0U0RkY4MEMyNENCRkNEQzAyQUE3MjE5RTE3QkVGNEQ1OAorOjEwMjFEMDAwNDA3NjUzODE2NDUyODhDRUJCOUExMTVFQTYzM0U5NDk5QQorOjEwMjFFMDAwMTk2RkU2RjcxNjk5NTFCRjEyMUQwNkU0NDI4MkM3MDkxRQorOjEwMjFGMDAwOTM1Q0EwRjEwNUQwN0FERTdGNkVFNEY2MTY3QzdGQUVBQworOjEwMjIwMDAwRDYzRjRBNzc0Nzk3RkM4NkU4NkVCM0RENkJDNzI1MUMzRgorOjEwMjIxMDAwNEYzMkVBN0RCRDlDMzkzRTlERjlFNTE2Qzc5NzYwMjk4RQorOjEwMjIyMDAwOEMzRTVGNTJGQkI1QjE5RTBGMEFDOThEODIwNkI5RjA5NAorOjEwMjIzMDAwMEUyQ0VGRDRFMDdFQzU0OEZGRjdDN0UzRkJCN0I1QUY4MAorOjEwMjI0MDAwREJGMzhBNENGMzZFRkVFOURCMzRFRjRCNEU5RTE3NUVGOAorOjEwMjI1MDAwMTFGMDNCNjExMkZBQTU1QkJGM0FGRUNBRTNBM0U0RTFDOQorOjEwMjI2MDAwRjVFQUNGM0Y3RUU4OERCMTAxMUNGRkUzRERBMzg3MDNENAorOjEwMjI3MDAwRDJERDAyQTlGM0EzMDcxMTVGOUZCQjNBREZGOTM5OTZCQworOjEwMjI4MDAwNEZCRjc0QTgxRkMxMkY3RUJEOEI2QUJGMDA0QjhDMUMzMworOjEwMjI5MDAwM0E2RTMyRjE3RTE3RDEzRUYwRjk2RjBBRkQzNzMzQkU0OAorOjEwMjJBMDAwMkRBODI3MTA2RTBCNUFDNjZDMjc3OTMwNERDQTRGMjNDNAorOjEwMjJCMDAwQkJFOUM0MzFFM0ZBRTJEN0E5OEZBRkFGNEYxRjVGRUY5RAorOjEwMjJDMDAwQjc4Q0UwOEY3MDk4MzhDRTJERjRBQkFERjM3M0MyRUZCRQorOjEwMjJEMDAwNjc3QjQ2OUI5MDE1QTNDRjMzM0FDN0E2RTc0N0YxRTQ0NworOjEwMjJFMDAwNTdFQUFERDRFRjFBMTJGNTg4OEFCOTBFODFEN0I5MzVGRAorOjEwMjJGMDAwQTY1MDQzMEVGN0UzRjZFQkYwMzlFMUJEQzJEM0MwRjVDQgorOjEwMjMwMDAwMzk0RUQ0NjdEODdGNTFFNjZGNzg1RDI0RTgxQ0E4RDc5MgorOjEwMjMxMDAwN0UwMEZBNEZGNUFBNUY2MUJGMzc5N0E1QjI1Qzk4N0I0NAorOjEwMjMyMDAwNEI5Qjk1RUNEQzZFNzlBNkJFNkQzRTNERkFEQkNCMzM2NAorOjEwMjMzMDAwODQ5RUVDRUUwN0NDQzNBNDNGMDEzNzY3QzFGQTI0QURGRAorOjEwMjM0MDAwNkUyQUY5NjNDM0FGNDgzRURGOTlFQTk1RDA2NDg0MUFEOAorOjEwMjM1MDAwMTlDMkM0RDcyNzIxNDRGMDVFNkQwQUIyQkRFNzIwM0QwMworOjEwMjM2MDAwODA2NThCQzk5QjY5QzE1MjMyNzdGNTAxOUUyN0M0NzA4NQorOjEwMjM3MDAwOUEwNjAxMEJENTdGNkI4QTM0MDBCRUI3Q0E1Mzk5NDlDMAorOjEwMjM4MDAwRjRGRjI2MzhGRDY0MTdGRDIwN0RGNTE4OTJBMzk1RUUyNQorOjEwMjM5MDAwOTk3M0U5Rjk2QzM1RDVERDgyRkI2REI0Q0E3N0U3OTNBMworOjEwMjNBMDAwRkRGMzAzQzk0Qjc2QUYwRTE3NUQ3RkNDQjU3OEFEMDQ1NgorOjEwMjNCMDAwREY3RTQxRDlBQjIyRkQxNkJFQTIzODRDMEM3Rjg3NEE4NgorOjEwMjNDMDAwRTNCRTYxMDlGNkE1NzVCREU1NUMzRkM2NjQyNjNCMkRGRAorOjEwMjNEMDAwRTQxQTgzOUI3REZCRDA3RjE0RkQxRURGRkYyMzI4OTMyRgorOjEwMjNFMDAwQzgxRTk4RjM1QjA3Q0JGMTlCNDA2NjdFRkYxMTI4MkMzQgorOjEwMjNGMDAwQzc2Rjg2MDBENzZGODE4OEY1NEI3Q0VGREREMkZGRDlBMAorOjEwMjQwMDAwQjkxRkEyRkI3QTc3RTI1N0JCQzlBRTlGMkJCNUY3Q0RCOAorOjEwMjQxMDAwQzE3NkI1MTJGMjQ4Q0ZGQ0RBRjE3RkI2NDY3MDFENEE5QworOjEwMjQyMDAwODMwNTkyRDBCRUZBMzVEMTI5RDlFRjQ3NURBMTlERDg1OQorOjEwMjQzMDAwRUZBRUU0MkRBOTFENTg4Rjk4ODRGREE1NTYwNjlGQTRFNAorOjEwMjQ0MDAwRkVBQTE5RkMwRDU4RjY0RDBFM0M0RjdDRjhDQjE0MzEwQQorOjEwMjQ1MDAwNEVBREM1RTEyNkY5NDgwNjE2OERGM0QxM0IyRUE2Nzc4MQorOjEwMjQ2MDAwRDJCQjM3NjFCRDBDQjE0NUYwM0FEMTU3RDA5QkZBNTc3QQorOjEwMjQ3MDAwNjBCOTdCQzJFQUVENTQ2OERDNTNCMjc3MjdCRDNBRDUyOAorOjEwMjQ4MDAwQ0NFRkMzNjk5OUQ3NTExNkE3NUY3Q0EzQ0RGQzNFRkM2NgorOjEwMjQ5MDAwNDNFNkY3Mjc3NTU5MENGQUM1MzdDRTFDN0MxQUY3Mzc3NworOjEwMjRBMDAwRTVFRjk2NUVGNUNFQ0QwNTgyN0Y3QzdEQ0NDMTQ0RjYwRQorOjEwMjRCMDAwRTBGRjY4RkM4NTEwOTI2ODNEMEQ3QjREQTExNjI2NDIxOQorOjEwMjRDMDAwNjExRjk0RTlGNDA4OTFENTQ0NkZFNTAwNDFBMjdCRDhERgorOjEwMjREMDAwOEI3QTRDOUYyNzk3RjdGRkI5RUEyMzNBQzQ3NkI2MDc2MQorOjEwMjRFMDAwREI5RjI3Mzk2OTBGMEEzRUMxRkE1NERBOEYyMzA4NUU1MQorOjEwMjRGMDAwQjJENzUwMjE4MzA1RUI0OUY4QTI5MEJCNkUyMDNCQjZDMgorOjEwMjUwMDAwQTUwMkRBQTkzRTA5MjIxMkUxN0IwQTQxN0EwOEY5QzM0MQorOjEwMjUxMDAwMzJEM0VENTQ1MEI4QUVEM0YxRjc0MEU1RjI3MjA4NzEwMgorOjEwMjUyMDAwNzkyNTg0ODVCRTA3QjlGMTI5OUNGRkFBNEY0MEVDNjc0NQorOjEwMjUzMDAwNTQ5OEU5MUQxRDE5Rjc0NzY4NkZDMEU1Qjc5OEM5RUVCMworOjEwMjU0MDAwRjBGRDMwQjFCRjMwQTg0MDg3MEIyMkM0NzNFRTcwOTkwNAorOjEwMjU1MDAwMEU4MTRDMzFCRjgwODc5RDlFRkJBMkYwNzBDNEMxMjNDOQorOjEwMjU2MDAwODlFMEUxOERDMjAzRTcxMEYwMzgwM0JFMDIzRTkzMTQwOAorOjEwMjU3MDAwODQwRkNBQTdDOUQwMjVEMTNDOEE2NkRGNTQ4Mjk3Q0I4NQorOjEwMjU4MDAwMkFGMDczRDkwQjVDNUVBOEY3OUMwOTk3OTI0OEMwMTI5OQorOjEwMjU5MDAwQzg0RjAwOUZBOTg5RTk2Njg0MDY5RjNGMTYwMENCMkY4QworOjEwMjVBMDAwNURGRTVDNUIyMEYzNzM1RDBFMjE3RjY2OTIzRDFBMkYwQQorOjEwMjVCMDAwOUZGNEU3QkU5NENBMkY2NEE0ODdBQTgyQUM3OTE2RDQ4QworOjEwMjVDMDAwNjdCRUMyQ0EzQjg3NjBGREVBQTdGMzQ0QkRBQ0YyNTdDMQorOjEwMjVEMDAwQjk1OEZGNDFDMTI4NTExRjU3NTk2ODQ1NzhENTlCNDZDNgorOjEwMjVFMDAwQ0ZBQkMyRkE5MDgwNjkyM0YxRTVGMjdBQjRBQjcxNUZBOAorOjEwMjVGMDAwODFBNDdCODI0NEM3QTYwQzcwOUJCMDNENTA1RkU0MkQ0NAorOjEwMjYwMDAwQzA3QTAwRTkxMjEwNkU3NjI5QTc5RUUwNkNGRjM5NzgzNworOjEwMjYxMDAwMUI3MDE1MTk2OTgxQzkwNUI4REVGQ0Y5OURBQjA1M0UzMworOjEwMjYyMDAwMkJGQkNGQzVGRUM3M0JBRDZDQjdBQ0IxMDU4Mzg0Mjc5MAorOjEwMjYzMDAwNjQ3Nzc3N0Q2OTc0N0ZDNzlGRkU3OTBEM0Q3RjdBMDA0RgorOjEwMjY0MDAwQjg0OUJGODA0NzJFRjRCQkNFNUM4RkQ5MDE1QzVGOEM0QworOjEwMjY1MDAwNzI4M0UyMUYzOERGNEM5QTJGODBFQTQ5QTY3NTNEMjUyOAorOjEwMjY2MDAwODUwOEZFQ0JFQkE3QjEzRjcwMjRDRkZGRkQ4MkJFMzFDMgorOjEwMjY3MDAwRTNFMzNFQTRGMTM0QUZEMDczRTBDOTI5MjRCODk1OENDQworOjEwMjY4MDAwRjQ1RjRCRkQ0RUI4NTBCRUE2NTFCQkMwNDM0RjY1NjNDRgorOjEwMjY5MDAwODEzMjk3RTY4RDdGNkU0RUY5RTY4NjI1MzhDRjUyQTRCQgorOjEwMjZBMDAwMTE5MkQzOEIwQjAyMzdEMkI4NEJDRDkxNDE4NUY4NkM4OAorOjEwMjZCMDAwNjVDQTNCMzZBNjBCMDVFOTkzRTQwM0YxMkJFREI3MDY5QgorOjEwMjZDMDAwRTk5MUU4N0FCRkUwNTdFNDAwNzdCN0ZEOEFGOEY1RjhCQQorOjEwMjZEMDAwQkI2RTU4RTgxMzIyNEVDMkZGMTVDRjBEM0U4RjY2MzVGNAorOjEwMjZFMDAwOEQ3RjNCQUQ2M0E5RDRCNTkwRThGMkYzRjRENzZDN0Y0RQorOjEwMjZGMDAwNjZCRTFDMjhFODRFOTM1QjRCOUZGQjlBRjlFNzU5MzM2MworOjEwMjcwMDAwMDQyNUNEM0Y4NjE4QkU1QkZBNUM5Mjg1RkNDM0E1OUY2RAorOjEwMjcxMDAwNDIyODA1REYyRkRCRjc3ODAzRjkzQkE1RThGRjkzOUZGRAorOjEwMjcyMDAwQkM3OEQ3NTNDQzZGRkI0ODVGMjJFODk2RkVGN0IzQ0Y1NworOjEwMjczMDAwM0Y0ODdDN0E2NTEyQzdBMTI2QkQ3Njc0MDhEOTQxNTNGQgorOjEwMjc0MDAwOEU0NjFBMTA2RDcwRTJEOTM3MkUxM0Y0QUZGQjI1N0YzOQorOjEwMjc1MDAwMzM5RDhGMUU5RjI2QURCODg3RjBCRDBDRjE2RkM3Rjk3MgorOjEwMjc2MDAwOTY5OTgyQTI2RTc1Qjg1NTk2N0JDMjRGQUVEMUY2RjE5RQorOjEwMjc3MDAwMTk3NDZFOUNDRjcyNDUzRDUwNEFGQkM5OTQ4MEU1NjM0NQorOjEwMjc4MDAwNDhGODEzMzJGRTIzRkVCRkZENjg2ODM1QUQxM0E0NkYxMQorOjEwMjc5MDAwNkMyNDZGNEVBMTVGNENGQkJBRkRCMTc4QkZBM0VCNDAzOAorOjEwMjdBMDAwMjlGOURERTQxN0UzM0UxN0I3MUJEQjk3QzZFQTg3MDQ3OAorOjEwMjdCMDAwN0VGMjk2MDIyRDFFOTYwREQ5QjRBRjVGQTMzRkY0QzFGMQorOjEwMjdDMDAwMzA5QTc3N0UxQUQ5ODcxMzI5QUU5MDQwNUVFQUZFNzE1RgorOjEwMjdEMDAwMjhCOUYyOTEwMkI2OTdEQjI1RTI4NzMyNEJFMkZFMEI3NQorOjEwMjdFMDAwRjM4NTVGQUNEQkZGQ0IxRTkyRDg4RjVCRjY1MDlGNTExOQorOjEwMjdGMDAwRUMyNzZCRkMwQTYxMkZGM0VGOTNBNDU3ODhDRTAyMkZDRQorOjEwMjgwMDAwMDNEMUMxMkREQTlFNjA3MzFGQTZCOTVCOUI0Q0VDQzc0OAorOjEwMjgxMDAwRDhBNTNCQkNBNEY3QzczREQyRkZCNjdGNjNCQTQ5NzVDNAorOjEwMjgyMDAwNDMyNkQ1MjdDQzdEQ0NDM0Y2NTU5MDg0MzVGQTU1NkMxQworOjEwMjgzMDAwNjczRTk5REU5NTRCRjMzRjk5MkU4MzhBRjMzNTI0NzVENQorOjEwMjg0MDAwRTU5MjlDNTU5Rjc1Nzg0OUVGQzZBRkZCRUQwMkUxMEYwRAorOjEwMjg1MDAwMEMwOThGREYxNEYxMDgzQzEzOUZFN0JDNTRCQTg5RjBEMAorOjEwMjg2MDAwN0MxMkY5OUNGMEI3Q0MzNUJDM0YzOEM5NkU5ODlDMTlFNgorOjEwMjg3MDAwQzFCMjQxQjNEMzczMUUxQjk1MzYxQkUxRTJBM0Y1QzY2QgorOjEwMjg4MDAwRDhENTFEQUY1RTkzNDJGNkYyNkU4QjNGQzU4REZENEVERgorOjEwMjg5MDAwMUVDRTM1Rjg0MUYxNjU1MTE4OTE1M0Q4NEJGQjFCMzNDRgorOjEwMjhBMDAwODcwNDEyQzA1RDJGN0Q5QjJDMEMyRjlENkU3RjVEQTczMgorOjEwMjhCMDAwQzAwNzU2QzI0N0I5RDg4NzZBNzdEQjdENDQ3RkExQTk5NAorOjEwMjhDMDAwRTQ0RjJFQkIxOURDMkREODdCRDlDQjBGMzczOEE4REVDRgorOjEwMjhEMDAwMEM0Q0NEMjdFOTdGRDRGRjEzNzM4OEVDRjE1RkE2OENGNQorOjEwMjhFMDAwQkRCNzFDRUJCQjhFNTk4NDlGQTIyQTg3RjI2M0VDNThCQworOjEwMjhGMDAwN0JBNjE5NjQwM0JENzY0QThCNDkxRTEzREQyM0JEMjZEMgorOjEwMjkwMDAwQzlDOTIwQzdEMDYzNEE1RTg2QTFFRUYyMEUzMEJDOUZEMworOjEwMjkxMDAwNTY5MjZCNjg0RjU3NDYxOURBOEJBMTM2MTJDMEY1MTRFMAorOjEwMjkyMDAwNjU0QUVFMTBBRUI4Q0Y4QzAyNDNCQjFERTkzQTRDRUJDMgorOjEwMjkzMDAwRkM1MkQ4NTEyNUY4NEZFOERCMjBEQjQzNjUxMTgwMDdCNgorOjEwMjk0MDAwOTAwRTI2MUUzN0RBNTkyNTkxMzZGNjM3OTMwRTVCMEMxQQorOjEwMjk1MDAwNzEwMEZCNTlFMjUwQzk4NTFBN0YwRDg0ODFDNDVGNDgxQworOjEwMjk2MDAwRkY1RTkyNjMyNzBGOEJCODkzQUNDMTczNTlCNkQwQ0Y3QgorOjEwMjk3MDAwQ0I1RTk2RDgwRTVDNzZDQ0NDN0FFMjI0NzhCQkYxNDM2MQorOjEwMjk4MDAwRjI1MUU3QkI3OEI4RjdGNTFCRTFEQzdGQUUxMUFFNTkyOQorOjEwMjk5MDAwMDEyMzVDMkZBQjMxQzIzNTNCNjg4NEVCRTA1QTIzNUNFQQorOjEwMjlBMDAwNzM1NDIzMUM4NzM0NEQzNEY0MUZENjU2NjlBODhGRDgyRQorOjEwMjlCMDAwNzQ4NUExRkZDOEQwNkM0MzdERjQ2M0Q3MUFGQThGNjk4MAorOjEwMjlDMDAwNUY2MDY4MUZCN0Y3MzY0MzdCM0M1RDhEMEYyRjMzQjRENAorOjEwMjlEMDAwREI1MzhGMzA1RDFENDBCQTMyQTEzRTI4N0NFOURGRTIzNworOjEwMjlFMDAwRThDMkMyNzAyRjFBRThGNDg2NjJGMEFGRTIzRkMyN0ZGRAorOjEwMjlGMDAwOTk5Njk3OTgwMDZBMDNGMUUzODVDMkZGMTU4NEZGOTRDNgorOjEwMkEwMDAwMjhGRTc1QjlEQTEzOUZFQUY4MUQ0MkZBOUFFNTY1Nzk0RQorOjEwMkExMDAwODRGMDdFQjIyNDg1RTlFNUUwNEIyNzBGMkI0MEY4NEY4OAorOjEwMkEyMDAwODUwMkRDRUZBQzI5MjI4RTIyQzlDMTI2QTI5MzRFNzAwQQorOjEwMkEzMDAwQjU5MUZEQjlDNjEyNjRGRjQ1NDVCMzcwMjcyOUU1Mzg0NQorOjEwMkE0MDAwN0ZGM0ZCMjVFODZGQzZBQ0IzNUE0OTAyNEJDQzdFQzc3NworOjEwMkE1MDAwODdEQjBERjVDMjk3RjYxQUZBMTc3NTg2MERGNUYxODcyMworOjEwMkE2MDAwNDEyMjdENTVGMEE2Rjc3OTJBOEIzRTU0MzhGQzU1RkM1RgorOjEwMkE3MDAwNDlGMDc5MkE0QkJGMENERTQ1RkEzN0RFQ0ZCRDVBQUQ5RgorOjEwMkE4MDAwOTdEMkM4QUZGRjdCRkJGMzY4RDZBMDdGMzY0ODI1QkYzRgorOjEwMkE5MDAwMzc3MjQ3QUFENzM0MDBFMTkxRkM0RTAzRjlERjgwNzYwNAorOjEwMkFBMDAwQjQxNTk1MTFCODBGQjIzRTk4RUYxMEVGRkYyRDY5RjJGMworOjEwMkFCMDAwMkFFQTZGNDJGRjlDRjA4RTcwQzkyMzdCQUYxNjkyQkQ0RAorOjEwMkFDMDAwMDQxN0IyNUJDODBGODMyQjg0M0RCRkRBQTRCMjNEOUFEMgorOjEwMkFEMDAwODRGNjI4RDkyMzBEMTU3RUI2OTdBNzQzNzAyMDNEQkZGNQorOjEwMkFFMDAwMDY5NDU1QzQ3NzkyMTlFRDU3N0NGRTNGMjMwMjhEODVERAorOjEwMkFGMDAwNDU2MkIxNDQzRjc3N0QyMUIzRkYzRDg1RkM2OTA2QTY2MQorOjEwMkIwMDAwMDJBNEY3NEVEMEVGQjQzRTc4NjkxRUM1RTM0RjkwMkU3NQorOjEwMkIxMDAwQzNGNUI3QjVCQzMwNEYyNTNCQzMwM0VFMDhBRTNCMjAzMQorOjEwMkIyMDAwNDAwNjlCMEIwM0Y3RDBCOEVGOUJEQ0FCMEJGMUREODNDQQorOjEwMkIzMDAwMTNGRjMyODhFQzkxNzU4NUMyRUVCMzRCMDgyOUE0ODE0RQorOjEwMkI0MDAwRkVGMzE1QTBFNzhERDlDQTdEODU0NUQxMzg0QjRGRjRFQQorOjEwMkI1MDAwQTNDNzMzRjVGOEU2QUVCQTMwOTcxNkI3NTcyMkJBOEI0QgorOjEwMkI2MDAwOEYzQjQ2Q0NFRUFBRjFBNEZGOTY5OUQ4RUZGQzBCMkQzMworOjEwMkI3MDAwQUU5NEU3NDk2NTM5RUY4MDRFN0IzQTJGOTlGREZGRUIyNAorOjEwMkI4MDAwMzVCQzk5MUQ5REFCN0U4RUVGREQxMDE0RjZENjAyOTNGOQorOjEwMkI5MDAwOTdGREY1REIzMzhGNzMxQ0M1MkU5OUMwNDdGRTUwNUE0NQorOjEwMkJBMDAwRkU3NjExN0ZEMUUzMjU5NzQ5REZDNkNFM0FEQjdFNkZGMworOjEwMkJCMDAwQ0YzQzY2ODg1N0MxMTM3RDEyQzZEN0EzRTNBQkFDRkZFOQorOjEwMkJDMDAwNjJGNkI5NjU5MzQ3RTgzNUYyRjNERjZGQ0VBRTg0RDQ5MQorOjEwMkJEMDAwNDRGMzdDQ0VGMUFCRUI4M0FGMUFGOEUyQzZEQUI3MEM2NAorOjEwMkJFMDAwN0M3MDkzRkE5RUExM0RFMkU5QjI1MkJDMzJCMjI3NkJFRgorOjEwMkJGMDAwM0FDNUQ3M0ZEQjZEMkYyNjNDMjBGRTBGMTZDNkM0RUIyRgorOjEwMkMwMDAwMjJDREEzQUI2MEVDQjlFQ0Y3MkZCQzhFQTM3NTlEOENFNQorOjEwMkMxMDAwNTc3REJGRUZENEJEQzlGNTQ4NUQ4NENCRjhGREVBRjExRgorOjEwMkMyMDAwMTFCRDQ0NzFEODQ0RjZDQzVEMTJDQTBCRjI3NzQ5NUVFRgorOjEwMkMzMDAwNzg2MkU0MDU0MDFFRDlGRjc3NDlBM0JDNDRFRkI2RkQ5NgorOjEwMkM0MDAwQzE0N0E5QkRBQkRFRUVERUVFRTNGODA4Qzc0RDZBOTFFMQorOjEwMkM1MDAwMkVDODZFMDBBNzc4N0Y4MUNEQzE3NkU4MUQzRUUxMkY5QQorOjEwMkM2MDAwMUVBREY4RUEwNkIyNUY3MzIwRDU4QjMyMTA3RkMyN0ZBQgorOjEwMkM3MDAwQTJCOEM5N0M1MzFBRUJGRkQ1NTkwN0I4RkU2MTMzODg1NworOjEwMkM4MDAwQkM1MTRERjgyMUYyNTc5N0E2QTYwQUJCNThDMUZFNTg3MQorOjEwMkM5MDAwM0Y5MTYxRTZGQUExMTE4MUFGOTgxRkYzQzM5Q0RGNTgwMQorOjEwMkNBMDAwREE1RkM0RjNDMDEzMTk0NDdDRjgzM0Q5RkZCNUUwNTc5OQorOjEwMkNCMDAwNzc4MERBNkIzMkQwREY0NkZBRkRDNEFDOEUzNTExNkIwQgorOjEwMkNDMDAwRUQxQTcwQUQwNUYxRkU0OUIyRkEzOTU5MzQ2MzdDRkQ1NQorOjEwMkNEMDAwQUUyNTNGRjMxMzlCRTBERjQ5QkI0RUNGNTMxMTNFMUZBMAorOjEwMkNFMDAwOUEyNEY2Q0ZENTY3NEMxQ0FGMDE2N0M0NTY4RDdFRDhBOQorOjEwMkNGMDAwMDM4MzAzNTYxRjhFREY2NjQ1N0JEMjI5OUVDRjFFMTNBQQorOjEwMkQwMDAwOERDQjlFQjA2MjQ5NzFEMDI0NTEzQTdEQzJFRTc1RjlFNworOjEwMkQxMDAwNDQ5RTUzMkY0NzEwQ0NCMDlDRTREM0U1N0NFQjcwOEFFMworOjEwMkQyMDAwQkY5RERDNkMwNzkyNUIzOEJGNDJGRTk2RkFBQzg4RTMyRAorOjEwMkQzMDAwRjdDQkYwMkYwMjgxMTdGNzFBNUNBRjY3ODhGQzA1RjExQgorOjEwMkQ0MDAwOUY0NzQyQkYxNkY3MjFGQjcyMENGMTY3NzI2MDUzQjFDNworOjEwMkQ1MDAwRkRGRDNERjY2RDg0QkZFRUY1MUUxNkYxQjBDRjlBNDcyRQorOjEwMkQ2MDAwNzNCQzVCQTcxM0Q5QTdDNUJEN0YwQzIwREEyRkRCNDY0OAorOjEwMkQ3MDAwRUQ4QjVGN0VGRjFEOEFDRkZEQTYzMDMwRDQ4N0VEMEIzMworOjEwMkQ4MDAwQ0M3MjMxQzlDOUM1QTkxRDFDQTcyQkY2QzkzQzJGQUVGMQorOjEwMkQ5MDAwOTdGNzhCNzJBQjExN0Q3MTU4RUM4ODcwNUNFRjZDRjExQQorOjEwMkRBMDAwRkI5RUY2RkZEOUNEOUQxQkYzMzk1RTJEOEYyNUI5QTI3MQorOjEwMkRCMDAwQ0Y4QkVCMjhBNjc1RThGQkQ0RDcxMTFEQTc3N0ZFRDFFMgorOjEwMkRDMDAwRTNEMDdBRkRFMzg3RDYwQ0Q3RjIwODM3RkExM0U4RTVBQgorOjEwMkREMDAwQUI3NDNBQjYyNjhFRkJENzY4Rjg4Q0M3NEZDMTg4NjBCMworOjEwMkRFMDAwODhFMzc5NkU3MDM3NjBGRDVBMEQ0RTlGQ0RDM0ZENzAzQworOjEwMkRGMDAwM0M0NDE5NEZGODVEM0NEQkU5MjUzOEVCRTNGN0NCODAyOQorOjEwMkUwMDAwQzA1M0JEQ0M3M0M1NDhGRjFDQTJCRkRCODIyMjRGQTBCQworOjEwMkUxMDAwQjcyM0ZEODkzODY3NzMwQUQzRUJFMkU3REU3QUU3RTc4OQorOjEwMkUyMDAwMzhDQkFEOEY4RTI5MjRGREExQkYxRjBGNjc4NEVGNzBCMworOjEwMkUzMDAwNUFDRjAyNDlFNENGMTBCRTM3RDFGOEYxRjk4MUYzODVCQQorOjEwMkU0MDAwRUI4OUVDNEVENjBCMjdCNkZEMkM0NEVCM0I5MTA1NkU3RgorOjEwMkU1MDAwMTNGMkUzRTI3REJGN0REMzM0OTZFOEM0MTk5NkIwODRDMworOjEwMkU2MDAwNURDNkY4NTdCQzlFNzI0M0UwM0E5MjIzNzY5NDIzNjQ4MQorOjEwMkU3MDAwREZEOEY1RjcwNjVBMENFRjU1NjcyQTc3RjlEODFGNTVCMgorOjEwMkU4MDAwRUUyNjc5NjQ1Nzg1QkYzNjI0NTBDMUY1RTU1NkUxQUY4QgorOjEwMkU5MDAwRURFQTM0Q0JDNERGQkIyQzEwMjIzREJFRkNENTBDOTUzMworOjEwMkVBMDAwRUNDN0U1Njg3N0IwQTc5MzE3RTRGNTQyMzJGQTQxRTkzOQorOjEwMkVCMDAwMDlFQzA2OTM1N0U2Nzg1QzVBNjAwREMxNEJGQUQxRDQwMQorOjEwMkVDMDAwMDc5RkM4ODlGQUEzQkFCRTJDRDJGNEJEOTI3RjYzMDNEMAorOjEwMkVEMDAwOERFRkQzRTI4MTY4Njc3MkJDQjMxNDAyOUExREExQzU1RAorOjEwMkVFMDAwRTE5QTBGNzAxQzQyOTdEQjM2OThFQkEwRjhDRjlBQkVBMAorOjEwMkVGMDAwMEIxQ0U0MUZDQTM4MkNDN0Q3M0NCM0QzQTAxNzNCNzJCNgorOjEwMkYwMDAwNTUxRDRBREExMUQxQkFCNTA3M0Y1RTNGMUZDMDZCRUNDMQorOjEwMkYxMDAwNDdEQjA1MTJENkQwN0FENTgxNDgyM0ZFREEzQUVCNzcyMworOjEwMkYyMDAwNUQyRjYwRDkzMkU2OTFDODRBNkFGQkU2QjQ0NDc2QTRDNAorOjEwMkYzMDAwNDNCMzAzQjhFODQ3RUIxNEVGRDkwNkFFQkVDMzg0RkEzNworOjEwMkY0MDAwMzNEOTZCODFGNzYzRjRBMDAzMzlGRkZEM0M2RDVFQjJBQQorOjEwMkY1MDAwMDczMkJCREJGRjQwNzhFQjY5MUYxN0FCMjRGOEJDNkY2RgorOjEwMkY2MDAwRURBNURERTZBRDQ5MjQwRjEyQzI4QkM4QzQzM0ZEMThCMAorOjEwMkY3MDAwRDE2MzMyQzRFQzlCRUQ5RTk4QkExNDA3MkY4OUNBRUUzOAorOjEwMkY4MDAwNzZFNTc0ODJGQ0U1NzdEREQ3QUFCQUYwQUIxRjFBRUNDMAorOjEwMkY5MDAwODExMEFGREY2QUYxODMxN0U5QzlFNkMxNzZDMzM5MEM0NgorOjEwMkZBMDAwNTVDQjdGMjIwMTE3QzdFQ0VGMUNGNjQ1NzZCOTU1REJGMAorOjEwMkZCMDAwOTdGNTIyRUY4QkM2RjVGN0JCQTREN0E3NUVFMkVCMEIyNAorOjEwMkZDMDAwNUZFMkY4ODVFQTRCMUI3RTRBRjVBNTBEM0ZGNTEyNUZERgorOjEwMkZEMDAwNUZGODEyQzcyRkNDQkVCNEQ3QTdDQ0JFQjRGMUFCNUU5RQorOjEwMkZFMDAwRTJFQjBCNUZFMkY4ODVBQjJGNkRGODI5NTc1RkRBRjA2MworOjEwMkZGMDAwNTMyRkYxRjU4NTJGNkRGQ0FBNkMwNzNBQ0I4MUNGQ0QwRAorOjEwMzAwMDAwQTYzNzlBNDM3NENFNDZBQTBBNzNERTM4NTcwNThFNDcxMAorOjEwMzAxMDAwQTczNjAzRTcyQkI2N0I4NTFGQTVDN0U5NDdEMjEwMzIzOQorOjEwMzAyMDAwRkEyRDU2NzcxNkQ5RDFEQjFCRUZBQkZDMzE4RTczMkEwNAorOjEwMzAzMDAwMTMxNzRGRjlGQ0VDMjMwQThEQjM2RDFBNzBGRUMyRDkzOQorOjEwMzA0MDAwRjhEMTUxOEE3RkU1NDBEODFCQ0VBMUI4OUEwNEUxMTg4NworOjEwMzA1MDAwQkJGNEZBNjAwQTg0NjNGQzg5NkFBNThGQTE1RUQ0Mzk0NworOjEwMzA2MDAwQzBEMEZGOTY0RDQzMENFRDM3Qjc4RDM2QjRGRkE4QTlGRAorOjEwMzA3MDAwRDA1MEJGNDkyRDMzRjRCNzQzNEU0QjFFRTU1RDFCMkQ5OQorOjEwMzA4MDAwNUVDQTgzNTk2ODZGQTU2N0MyMEQ3NkQ4RjgzRDA1RkYwMworOjEwMzA5MDAwOTExRjkzODMxNjdERjdCOEI4OEY3NEQ1NjYxOEQ3MTkyQQorOjEwMzBBMDAwRDc3RUI2N0M0MDdDM0U2MTRFQjE5NjRGRThGRTdFNDFCNQorOjEwMzBCMDAwQkMwRjZFNEZDMkI4QTc5RTRGRDBGMTM5REM5MkM0Rjg1NgorOjEwMzBDMDAwNUFBNzhBN0NEMzlBNjlDMjhGOUMxQTcyOUIyODZGQTlDRgorOjEwMzBEMDAwRTM2RkI0NDY3MkZBQkVCN0Q1MTlGREM5RjQ0Njc3MjUzOQorOjEwMzBFMDAwRkJBMzREQzBGOURDREMyQTczNDhDOUExMzhDMUMwNEEzMgorOjEwMzBGMDAwMDdFMjM5QjQ0M0QwNDcwODA0N0Q4NDFBODFGMzg1QTFERgorOjEwMzEwMDAwQUFEQzk1RDQ3RTJBMDQ3QzBBNDZBNzhGRDE1NTBCNjc4QQorOjEwMzExMDAwNTJEQ0I1M0VCQjVGMTZDNTE5NzJBQTA0M0QyQ0RENkJBRgorOjEwMzEyMDAwQTQwMzRBRTdEMjU2RDMwRjRCQkNGRUY0RkE4QzAyQ0E3MgorOjEwMzEzMDAwRTc5RDgxOTcyNzA0OUNGNUYzRTdFOTcxNzBDRkRCNjE4OAorOjEwMzE0MDAwQzQ0QjNDREVCRTJENUVENjE0Qzc3RjU3RjJFREYwNjI1NQorOjEwMzE1MDAwOUIyMTc3QTQ1MTlDNTQwNTk5RTIzMjJGNjYwRjM3MzM5NworOjEwMzE2MDAwMUM5QUJDOEM5RjE5RDg4REY4MzBBNzA5MzhERjEzNEZGMworOjEwMzE3MDAwOEZBRDc1MTBBRThBRTFERjFDNkY1ODIxRkM0QzkzRjJDNQorOjEwMzE4MDAwMkI5OUNGRjBEREZFQzBBNzQ0MTk1RkRCOUE0NEZFMTZGMQorOjEwMzE5MDAwQ0I2NDFBMUZGNkNBMDMyOEFFMTA1MjY3RjNCQUI3MzdDQQorOjEwMzFBMDAwREI5MkU5M0NERjU3RjU2NkEwRjNGMkRCNzNFNDAxOTRCMAorOjEwMzFCMDAwMTdEQkZFOEM2OTZFRUNGOTIwQTQwQUJCMzk5M0Y3NjEyQQorOjEwMzFDMDAwMzc5NzcwNjkxMUE1QTI5NTYwMTFFRDYxODlFQTgzNTY2MAorOjEwMzFEMDAwOThFM0YwQTk0QUQ0OUUzRTIzMzlFRUI5NjJBMkZFNUI4MQorOjEwMzFFMDAwOEE3MzE5M0U2OTRBODYwMTVGRDYxMjIzQkYyMzE4MEZERQorOjEwMzFGMDAwRTVBMzdDMUM0Q0JGQ0I0NDU3ODI0RTQyQUY0QkExOTVGQworOjEwMzIwMDAwMUM1RkU5MzJENTEwREQ2OEU3MkREMjU3Q0QwNkNBNDdERAorOjEwMzIxMDAwRDU2N0ZGNzQyRUNCQUY3QTFCQzMxRDU2MDhCQUQwRjMwNworOjEwMzIyMDAwODJENjI2NDE4N0YxRjRFM0YyMUFFOUM3MkEwRDM0ODlFMAorOjEwMzIzMDAwRkM5NkUwMUY3RDFEREIxNDZEREUyQzA5NTQ5NjdCQjZEOQorOjEwMzI0MDAwMDFDNDY3RDZCOEYxRUMyNDNDNDlERTc4MDQ1RjNBNjFFQQorOjEwMzI1MDAwMzZEMDdCQ0UxMjNCRTdCMTQxM0FDQUY4Qjc0RTAwRTgxMAorOjEwMzI2MDAwMTM3MzRFMjE3RUJENjc1REU3NzdBNEYzMEZCRjIzOURFNworOjEwMzI3MDAwRUJGMjY3QUQ1NzkzM0Y0NUUyNUNFNDI5QTQ2QjhBMUZFQworOjEwMzI4MDAwNERBREVBMDRGRUZFMEFEQzI2QTI0N0E0ODM1OTU5QzVDNworOjEwMzI5MDAwN0NGNDgxN0Y3NjkxMUNCMjEzQkNBQUQzQThEREQ1QTk5QQorOjEwMzJBMDAwNEMyNUZBOUQyRUJEQTJCODcwOUNCNTg3MDU5REEzN0VDNgorOjEwMzJCMDAwNzk4OUVBQURDRDE2QTA3MzI2Mjg2NzRDM0ZBMjc5NEJEOQorOjEwMzJDMDAwRURFRTk1MjQ3OUE0ODFFMzY5REQ4NTNFOTQzQjE0NDdCNgorOjEwMzJEMDAwN0NDNTI4MkY4QTNBOEQ3MENCOEQ5N0VCM0RDMEIxMjdFNgorOjEwMzJFMDAwM0QxMTBGNDdENzA0MEQ4RUM1MDhDNzIxREYxRThFMzY0RQorOjEwMzJGMDAwQUZEMEMzRTkyNTQyQ0VCRTk4RkQ1MzdFRDU3RDU4OUMwNAorOjEwMzMwMDAwQUI0OTU3ODBFMUZBODUyQUY0RjI3NEU5Nzg5OEU0Q0I2NgorOjEwMzMxMDAwM0EwNUU1MEJCNkNGRDBEQUREMjU0MjlFRTg3MENFRDU3MgorOjEwMzMyMDAwRTBBQ0NCOTM3NUYzMjE4M0Y4REU0REYyQzQ0OTcwRkQxOAorOjEwMzMzMDAwODhGNTc2NUI5MTgwMzM0MDg0RjM5RkE5OEFFMDkzMzVDQQorOjEwMzM0MDAwNTZGMDUyOUNCNkFERDRFOUE1Nzg2MUFFQTJDMUI3NDk5QQorOjEwMzM1MDAwODM5NzA5NEMwNERGNzhCQTk0MjFBNjhFRUI0QjhEQUI5MgorOjEwMzM2MDAwN0Y1QkY4OTY0RUQwRjQ2NDNGMjgzRTFGRjhBRTRCNDk4MQorOjEwMzM3MDAwMTVGQzM2NTRDMEM3RUE4Q0YwQjlFNkE2MUM4Qjc3MjUzRAorOjEwMzM4MDAwRjI3NTQ3MEVDMjFCREI5QjVFMTdGMEZFQTVENjdGRDVGQworOjEwMzM5MDAwMThFMDdBNTNERkQ1OTkwQ0FGOUM4NTk5NDRDRjRERDY3MAorOjEwMzNBMDAwMzY5NUYyNTg0RDNBRkQ2OUU3QzI1QzlBOUM5ODg2RkNDNgorOjEwMzNCMDAwQkQwMERGNUY4REYyODlGMjkwQTkyNTAxMDc4REQ3OTRCQQorOjEwMzNDMDAwNkYwMTg5RjdCRkQ5OUI2OEZGMEU5RkNEMjAwNzJGQUJGOAorOjEwMzNEMDAwMzFDMjM1MjUwRThFNDlERjkxRkY3RjNDRTFCQkYxRkYwNQorOjEwMzNFMDAwNzZGQTE1RkJBRDE5MDZEMEM5NzlDODkwODNFMDY0MkIzNQorOjEwMzNGMDAwOTk5ODRDNzRENEQyQkE5REVCMzI4NDlBNzI3MUZGMEZCMworOjEwMzQwMDAwM0I4NUZERDVEMjNBQkJEN0YzNTEyMTREMkU2Q0E5NzMyNAorOjEwMzQxMDAwNzA3OTVGOUQ5QkNCQjZCQTRDMkVFRkE5OTNEOTdFNjk4QworOjEwMzQyMDAwQURDQkUzQjJBNUNFQ0I2NTUzNUQwOTk3QUJFQTE0RUUwNQorOjEwMzQzMDAwMjdBRENEQTg2MDM5NUMwNTFDQ0Y1RTk5RjIzOUU3REY3NgorOjEwMzQ0MDAwRTNFN0NCNTE4RDdBNkM3MDZEQjIwMUVFN0Q2NjE4RjVCNQorOjEwMzQ1MDAwNTVCQTYyRDQ1Nzc0OEUyOUI2RERFNTFENjU2ODRGQzkyQgorOjEwMzQ2MDAwMkIzMEQ0OTNFNDg5ODZGRTUzMjYwNDdFMzk4MUU0ODA5MAorOjEwMzQ3MDAwQTczMjRFMEYyMjNGOEU4OTlFQjM2QjY5MTVERjRCRTk1MQorOjEwMzQ4MDAwRjBEM0Y1OTM1M0UzRjMzNTU2RUYwMENBM0IzOTVCMDVCMAorOjEwMzQ5MDAwOUYzNjZCNzY1RTEzQzExMUNCNjQwNUY4REM4Q0VEQjAwMgorOjEwMzRBMDAwRTQwRDAxRjFGRjZBQTZGMzg3NzFFRUZFNDg4QjFERDk4QQorOjEwMzRCMDAwRDcyODY0MjdCNEM4QzI4RUI3ODIzOEY3NkJDQkY0ODc5RAorOjEwMzRDMDAwNkJGMDc5MTJFQTJGQ0FFQkRBRTZBNkIwNUM3OEQ4RTNBMworOjEwMzREMDAwRjREMjM5REI5NkQ2NjU2RTVFOEY1NzlDQTc3MUUzQkYzOQorOjEwMzRFMDAwNDQ3OTgwRjhGMzM1OEVBMUM2NzMzOUQ2QjM5QzZGRkM0RQorOjEwMzRGMDAwNzU0RkY0REE5NDkxNTA4RTlDMjE2N0JCRjMyRkVGNkJEQworOjEwMzUwMDAwNzQyOUYyMkZGNzc4MDQzQ0VEM0RDOEEzRDYzODdCRDk1NworOjEwMzUxMDAwQTlFNTVGNjBBMDJGNjFGRkE4M0QyNUYyMEJBRDcxNzE5OQorOjEwMzUyMDAwN0JGNEMzMTJFNjZGREU5QTIwNzFGRjNGNEY5MDg1QkY5OAorOjEwMzUzMDAwNjYwOTAzQzk2Qjk3MTdERjhGRjUzQjE0RjE3REU4Qjk3NgorOjEwMzU0MDAwQ0U4RjNGM0U0RjhDN0MwQTI0MDdGRTNDMDE5RjJCNEZDMQorOjEwMzU1MDAwMDgzQjI1NDkxNkRGQTFEODQwNTE1ODNFODFDODg3RDA4NQorOjEwMzU2MDAwNTkxRkQyMzdBOTVBQkVBNzVCQ0U5MDg4ODhBMTNCRTdFNgorOjEwMzU3MDAwMTlGRUFFQzg4QkQwNjcxNjQ0M0Y5NkU4RkIxN0M0QkY1MAorOjEwMzU4MDAwRkRCNjY1MjNGOUMzQzM3QTY5QTdGQzUwMDJCOUUwMkFFNgorOjEwMzU5MDAwRDFCRjFGODMyRTRGMzE4MEVFQkEyM0ZDNUMyNTg5RTExOQorOjEwMzVBMDAwMTcyNjc4MzU5QUQ2Q0RDOEM1RTdBOTVFOEIxNzMxMDBBNgorOjEwMzVCMDAwMTUyNUYyNUUzQTVGQjE0QTQ5NjVGREJFQUE0NDZFMjcwMQorOjEwMzVDMDAwRkVGOTQyNzE3QTA5MUZBREY5NTVBQ0FDOTM4NjdEQzhGRQorOjEwMzVEMDAwQTJCN0IxQzRDNjc2QkE4RTg3MjQ2RDVFNDQ0RjY3OTU5NAorOjEwMzVFMDAwMEU2N0VDRUZDQzlCMTFBREUzN0ZDRDYzMzY3MjVFQUYxRgorOjEwMzVGMDAwRTVBQTQ3MzhERkQ3MzJFQjNGMzhERkI3M0E2QjdBMUVBMAorOjEwMzYwMDAwQzlCREE0OTJFOUM3RjgyMDk3ODYxRjY2MEREMjIzNzkxOQorOjEwMzYxMDAwQzZGQ0RFRTlEM0EyQ0U3MEEwRjg4NDk2MDcwNDhGMzFGMQorOjEwMzYyMDAwQ0Y2NzkxRkQ4NkY5MkYzNDlFNjBBMEQwNDM2MDUxRjg5QQorOjEwMzYzMDAwN0I4MzMzRTk1QkYwQjVERUFGNjczRTUwRjVFRjRFNTc2NQorOjEwMzY0MDAwRDJGOUUwMjY4RjkwQTM0REUwN0QzMzQwRjU1NzI0QUZBQgorOjEwMzY1MDAwMkFEM0YzODIzN0U5QkNFOUVBODExNkM2Q0JFQUNDRDk5MgorOjEwMzY2MDAwNERDMjhFMTc3RTUzOTM2NzI1RTc2REUzRjUzNjlERDdFMAorOjEwMzY3MDAwOEM5NURCNzQ1RTMzNTZCRTM3QzlCMzdCRDVDQjU5MDEwRAorOjEwMzY4MDAwNzM5Q0RFMzdCRTlGMUQzNEVBMUZGREJEQTRDQzJCNUZBQgorOjEwMzY5MDAwQUI4QTM5MkZENTZDRjEzQjQ4NUVBQ0YyREM2NzhBRDUzQQorOjEwMzZBMDAwNzMwRjI4ODEwNTI1MzFFNzkzQUM5OUIzRjgzRDdCQjZCQworOjEwMzZCMDAwMkZFMUJBQUU1MDk0ODU0NERGQjhGRjVFRUQ4MUY1OUFGNAorOjEwMzZDMDAwNUNEQ0E4RTk5N0IzRUQ3MzkzRDZGRjAxQURGRjY2RDIzQQorOjEwMzZEMDAwRUIyM0EyRjgxOTNFRjRGMjY0OTZDRkVCNDQxQzgzNzlGNQorOjEwMzZFMDAwMjA2NjVFQTUyNEIwODJENjE1QzVBQjM5MEExN0E0RDNDRgorOjEwMzZGMDAwRTFGOTU3QjBEREQxQjA2RTc2MzJFMTY5RTdGQURFRDc5NQorOjEwMzcwMDAwQTNFN0Q1RjU3RTdBMUUzNTNFQkY2RUYzOTgwREYwREY0OAorOjEwMzcxMDAwQTNDOTg1MTc1QzBCMkIxRjQwRDBFQzZDMTNGNEQ0QjBGRAorOjEwMzcyMDAwNEVFODkxRTE0Rjg4N0Q5QzQ5ODdDNkY1RUU2Q0VCREQ1NAorOjEwMzczMDAwMEU4QUVGNEY5MUM1NkUzQUUxN0E0NjVDN0Q0MDVDRkZBMAorOjEwMzc0MDAwRENCOEY2NTE3MUVEMDU3MUY1ODk3MUZEMkJFM0VBNTc4RgorOjEwMzc1MDAwQzRGNTlGMUQ1N0JGMzZBRUZGODJCOEY2REJFMkRBOTc5RAorOjEwMzc2MDAwQzVENUZGQ0Q4ODRGREZCNTY5ODlFMDE4OEYzRkJEREYzNAorOjEwMzc3MDAwQjlFMkVGNUQ1RkM1N0VBMkEzRTEzMDgzRTk0NUE3Qjc1QgorOjEwMzc4MDAwNzNDNTQzRDRERUY1MzM5REQ5NEE0NkIxN0NERjgxRjY1QgorOjEwMzc5MDAwMTVEOTQzM0JEQjJBRERFMjdDNDc2MEU1NkU4RDNFNDg3MAorOjEwMzdBMDAwM0Y1ODM2ODg3OUQwQ0U0QUU2Rjg5Q0QzNjM5MDIzNjc5OQorOjEwMzdCMDAwQzNCNzA5MzI4Q0VEQjE3NjY4RUU4NUM3RjdEOUU5MzMyNgorOjEwMzdDMDAwQTREOTE3QkRBRjVCRTdFMzI5MTNGQzI3NDkwRTQxNDg5NQorOjEwMzdEMDAwRjg5OUJBNURCQjREMTVGQ0IzNEQ1RDUwQjk5RUU0NkREMworOjEwMzdFMDAwOTM1OUM0OUZCNUZCNTBFODZFMUQxMTI3MEY2ODRBMzhFNgorOjEwMzdGMDAwQzJGMTg0MjZDRDRGNjhEM0U0Qzk1QTREOUVEQ0FERjlBMQorOjEwMzgwMDAwMDk0OTQzODM5QjI4RUU5QjdDOTg4RkU3NDBCM0FGRTA0OAorOjEwMzgxMDAwQUYwQjEwM0ZGNzk3MTY2RkEzRUZDN0VFMUU1M0YyRjhFQQorOjEwMzgyMDAwQzM1ODc3RkQ1RDgyNzAyMURBRTk2MzVCMTRCMjU5REExRgorOjEwMzgzMDAwOTQ4QzI0M0E0Rjk0NjI3MkI0OTM5RkI4QUFCMENEM0Y0RgorOjEwMzg0MDAwMTRGQkFEREQ3RkFDRkQ3OUM0QjM5QzY5RjNBMkNFMDc1OAorOjEwMzg1MDAwRDlEMjY1MjI3QTgzN0MyRjdGOTc4NkVCNTRDOUM2QjI3MgorOjEwMzg2MDAwOTY3N0Q1MjUzQTc3QkFGNjBBQjc4OThDQjBGNDE5QjJBQgorOjEwMzg3MDAwOTlDRTExRjc5OTEwRTg1QjhBRjAxOERDMDQ2NjA1RUIyNQorOjEwMzg4MDAwMTk2QTk4Q0ZFMjVDNTMyQTBCRkZFQTE5NjQyOERFNkZBRAorOjEwMzg5MDAwNTcxNkMxRUJBQjY2REI3RUFBRjY4QzBGOTBCNDM4REQxMQorOjEwMzhBMDAwNzk5NUZBMzg2OTgyMzRFODg3RTM4RUIyNDVBQkFCOEZGRAorOjEwMzhCMDAwNkNBNkYzRDA0RTQ5RDRBNzNDRjNGOEZDOTVGOUQxRkFBNQorOjEwMzhDMDAwOTg2NzFFMUZCODEyREI1QjBCMDc5OTQ4OUVBNjdCNTJCOAorOjEwMzhEMDAwMTNERTEzNzM3NUE5OTA5RkRCOUIxNzBFNEVFNDhGRTlERgorOjEwMzhFMDAwQTUzQzEzMzgzMDIxRTc2QjI1RDFENDA0MkM4NzZBQTU3OQorOjEwMzhGMDAwQUMzRENGMTRGNTJCMzVCOEM5QjU1QUJCNDc5NDE3N0FGMAorOjEwMzkwMDAwOUVGOEYxRTc5NEJBNzUzQjdCODA5RjhENkNDODc3RjY4MworOjEwMzkxMDAwMzNEODhCNTc5N0Y2NjIyRkEyNzlDQ0YxREFBRDU2Nzk2RQorOjEwMzkyMDAwMDA5RDIzRENEQTZDMDNCQUZGNjE2QjM2ODhFRjkwNTc5OQorOjEwMzkzMDAwRDlGOERDMjg1OERDMDNBRTcxNDVENzFENUFENTZGMUU2NworOjEwMzk0MDAwRDE0REM4MDQ4NjM4NkVBNjA2NUZGQjQ0OTM3NjhFRjI4RQorOjEwMzk1MDAwOUIzMDdEQzdCNzU1Q0JGMzZDODU4OERCOUQxRjhCRTcwQworOjEwMzk2MDAwNUZDRDI3QkNFQTc4REU1N0ZBQUZDRDQ0OUYxREQ5MEI1NworOjEwMzk3MDAwMkIzN0UyN0JFQjFBQ0QxQzM3NTlENzk4Q0I3NDRFRTMyQgorOjEwMzk4MDAwOTA3RDc0NkFDNTIxMzNEOUFERjlEMDZFMjYzQjdGMTQ4MgorOjEwMzk5MDAwN0Q3OTNEODRBRTQwMEE3MEQ5QUVDOUU3RkZENEZDRjgwQQorOjEwMzlBMDAwNjFBMEYwRjM0MUQwQzVDMEY5QjQzOEYwMTM4MkNCMTA1OAorOjEwMzlCMDAwMTI2RDEyRjE4RkRCRTRDMDc5OTZFQzRCQUY0OEE0QjdERgorOjEwMzlDMDAwRUI0QUY1RUY3QUExQzY1MkFDRjkxNzMyQzNCNzhFRjhCRAorOjEwMzlEMDAwMjgxRUJFNzQ0MjlGRTM4RThBQkY5RURBOUQ3QjVGMEREOAorOjEwMzlFMDAwNUY4NkQ1REQ2RjE4RTk5M0YwMzYzQjQ2Q0Y2Q0Q0RTBBNworOjEwMzlGMDAwRTdGNkZBMTVDMkUxQjVDNTgxMTY3QTdGQzlBNkJGMUVFMgorOjEwM0EwMDAwMjA3MzU0NTY1NTMzQkRGRjE0RTExRDlGMkYwQzA3QTc5QgorOjEwM0ExMDAwRDMzMDYzQkNFMTRBRUEzRkJBNzZEQjdFOEFBN0U1MDU4QworOjEwM0EyMDAwRUZBOEVDOEZFQjFCQUU1NDU3N0E4ODg2OTRDMEZEMzQxOAorOjEwM0EzMDAwQ0VEMENFNDg4NTBCRUJDRTREQUY4NkIzNzgzRDYzNzlDMworOjEwM0E0MDAwQkM1QzdEM0Q0ODBGRDU0QzQ3NkUxMUM3RDdGMDRCRjg5NQorOjEwM0E1MDAwQTc3M0NCMEIzNzBCRjg2MDdCMTZFRkNGRTJDRThBNURGNgorOjEwM0E2MDAwRkZCNjY5RkRGOEJCODU3OEJBNjhENUUwRjc1ODE0OEVDMworOjEwM0E3MDAwNjAzNUZBMzU4RjI1ODJBMzRFQTczQTNDNkU3OEEyNkI0QgorOjEwM0E4MDAwMTVFNTNBRTc4NzNBNUYyNDM5RThERkU0OUVDNkYyQjBFRAorOjEwM0E5MDAwMzhGMDI0QkRFRjZCRjMzNzcwMUU3MDU3Mjc1RDQ3RDRBNQorOjEwM0FBMDAwMEQxRkE3RDI0OUQ3QkI2MDNGRTU2OUMyRkJENjE1RUYxMgorOjEwM0FCMDAwNTc3MkJDNzgyRjg4Qjg1ODlDM0VENDRCQUIxMjlGNjc4NgorOjEwM0FDMDAwMTBGN0U1OENEQjZCQjQ5MzkxNUU5NThEOUU1ODdBMzUzQgorOjEwM0FEMDAwNzNCRTMzQTRFOTkzNTAxM0QyMkZDREI3NDJEMDZGNDhCMQorOjEwM0FFMDAwNURFNjRFNDQ2NzhGNjg3QTY1ODc0NkI3RkFGM0ExM0Q3NQorOjEwM0FGMDAwOUNCQjNDNTREQUVEMjc2NjRBNDY3ODFFRUE4REVGRDMyQworOjEwM0IwMDAwQzBDQkZDODA3QzcwODRGQTY1MTAxRjYwN0RGMDBBMzdBMgorOjEwM0IxMDAwRDNBN0NFMDc0QkY2RkVGNTAwREQ2N0UzRjRDOTA1QjE4OAorOjEwM0IyMDAwRjdENzQ1MzQzQzIyN0RCRTQzRUYyRkQ5RDQ3NTgwN0MzNgorOjEwM0IzMDAwQzVDMTJCMDQ3RDdFNEM3Nzg3MTU0NUU5MENGREM3Rjc4MQorOjEwM0I0MDAwQTg5RjRFM0ZGMUZCNzg1NzFCNEYyRUY2N0Y0Qzc4NUNCOQorOjEwM0I1MDAwQjgyOUM4RTMyMUZGMUMyQkU1NzEzQUMzNDlDQzcyNEE0RQorOjEwM0I2MDAwMjVFRDY3NkIxQkI4NjkzRkY2NUYxNDc0OTA1QzM4NTVBMAorOjEwM0I3MDAwNkI2MkI4REU5ODFGNUU2NUM2RjJGQUExNjBBNUVCODY5RgorOjEwM0I4MDAwQUEzMzkxNkM3MjI5OEY2QkNDRkYwRDZCMzNFMjBGRTk3NgorOjEwM0I5MDAwRTc2RjM0NEY5MTI3NjAxM0MxRUJBMDhERTU2OTBGNzQ3NworOjEwM0JBMDAwMTFENTdCQUEwRUZGMTU3MTcyRDczQ0IxMTc3QTNFRDc5QgorOjEwM0JCMDAwNzFENzE2MkI4RTg5NDVERjYyMURFN0Q4NEY4RjM3OUQ1MQorOjEwM0JDMDAwMTkzRjFEQzVGRTQzNEJEMzZDRkQ5Q0YwMENCQThGNjdBQgorOjEwM0JEMDAwM0JDNTRGMTFBRUFCOUE3QUI3NTcyRjU4RkNCNEY5QTQzNgorOjEwM0JFMDAwODg5RkFFMDA4RTAzQUQ0QzE5NkI0QTQ0Mzc5NzQwRkM1QQorOjEwM0JGMDAwNzRDQUM0NDRGMUQzQzg3QjA2M0I3MzU1OTM5MDBCM0EwNworOjEwM0MwMDAwRkM4NjU3OEQ0QzE2NzkyOTQ4QTU3Qzg5MUUxRkQzRjc1MQorOjEwM0MxMDAwNzVCNzY2NEYzNjY5NzA2QjIxQjgzMTNDMDVEQ0RBMDg0MAorOjEwM0MyMDAwNkUwQzRGMUQ2RTMzODQzRjQyNUY4ODUzQkNENjYzMTZDMworOjEwM0MzMDAwNzlCMTkxMEIzNjUxQkVFMDU0QTZDODkzRDc2N0RCNDRFNworOjEwM0M0MDAwN0I4RUM4MkY5QzQxMUY5OTMxRjYzNEYyQzE5QTY2NzE2MAorOjEwM0M1MDAwOUYwOEJFQ0Y3OUI1MTdCMzBGMzg4NjUwOUUzM0QzQ0NBQgorOjEwM0M2MDAwNzFEQUVEOUVGQjZBQjY3MzNEOTlGOUNGMEE2QTVCMUU2NQorOjEwM0M3MDAwQ0UzQkZDQzNCOUVBMDI3QTVFNjJFNzczRjI3QTNFQTdGMgorOjEwM0M4MDAwQTVBRkM4RTdCOEYyQjQ3QzRFREM3Qzc2QjhBOUIyOEQ5QgorOjEwM0M5MDAwRTZDQjEzN0U0QjhGNzRFQ0QzRjIxMTVBMUUyODIzREYzMAorOjEwM0NBMDAwOThBRjcwQzRFNTJCRTJGMzk1NkI5QTE3RUNERjJFRTIyOAorOjEwM0NCMDAwMkIyQzlGODdGRjc4MjRGQjYzRjFGM0I4NjcxQUZEQjdCRAorOjEwM0NDMDAwMzUyMzc1M0ZFQTExNDdBMkVGMTg1MkFCOENGNEQ4QTIwNgorOjEwM0NEMDAwRTFCQkExQUZDODQ3OUM2RDdDMjg0RjM2Rjg1NTJENzlDNAorOjEwM0NFMDAwRTcxNjQ3RDBGQjkxMUZFQTRFRDAzRkRFMEYzRDFGRkY4NgorOjEwM0NGMDAwRDZDREUzMUJFRjA3NENFMERGNkU5OUM4RjExNDQxREYyRQorOjEwM0QwMDAwNkI5QUM1RkVCQkUzNjk5QTVGQTU5RjNGRDJDN0IxNkFCNAorOjEwM0QxMDAwN0UxQ0Q3NzNBMjcyNEFDRjg3MEQ3NURCOTg1RTg3NkFDNworOjEwM0QyMDAwRjc0NTM1RkM3QjRBNjg2NTBFRTVENzY2NzU1MTNFNzJFRQorOjEwM0QzMDAwRTgwRTg5RjNFRTQzOUQ3RUNFNDM3NDZDOThDRUY5RjE4NAorOjEwM0Q0MDAwQkVDOTgxQTcyN0M2QzQ5Rjc2Qjg3RTlBQzlGOTAyMkQzRAorOjEwM0Q1MDAwREVDRkY3RTZBMERFNTNENzE1NzYyQTY0RUY4RTA0QkVEOQorOjEwM0Q2MDAwNjcyNzM5MkUxRjEwN0YzRjRFN0M3RDRFOTlEMEMzOTkxNworOjEwM0Q3MDAwRDc0MUMyN0I0RjNFOUYyOERBQ0ZGNERGQUY2MDM4QTEzNgorOjEwM0Q4MDAwQkY5QjJDRTRBREEyRDdGRkJGRTRBOTc2QjYxREUyRUYzRQorOjEwM0Q5MDAwN0Q0RUY5NDA5M0IzRkYwOTk3QTI5QzNENTExMjM4OUU4NgorOjEwM0RBMDAwNTBDRTVBQkE1OENFODYyNzI4OUY5MTlFNUM0RTE3N0REQQorOjEwM0RCMDAwMTAxRTZFNEM3QzNGOEY1Qzc2QTlFMkUxNjk4MTg3N0NBNgorOjEwM0RDMDAwMUQwRkY3NUM5MkY5NDJDNDQzNzY1OTIyM0NBMDVGNDUyRgorOjEwM0REMDAwRjA2QUYzMjk4M0E4NUQyOTUxMDY1M0Q5OEQ4RjFGMjZEOAorOjEwM0RFMDAwRTY4QjU5NjVDMkVFQkI1OEY4NThBN0UxRTM1RUMyMDdGRgorOjEwM0RGMDAwQzc2OTY0MkQ0RTkzQzdDRjlCMzU3Q0FDMzkwMzFGRUY0OQorOjEwM0UwMDAwMEI3Qzk0RThGODc4RUVCQ0YwOTE1MTk1NjE2ODc3OTc1NworOjEwM0UxMDAwMUJGMTkxRUFDQjM1RDQ5REY5NDY3QzI0MEYyRDMwOENEMworOjEwM0UyMDAwQjdCQzRDMTZGNzI0MEQ5QzY4RTg3NzI2M0U4Q0ZFQzA4NAorOjEwM0UzMDAwOURGNDVFMkZGNkU4QzA0MDY3MDU3RDRCMzQ2MDZFN0JENQorOjEwM0U0MDAwMDdDOUU2NEM3RjVCMDU5NUZBM0UzN0M3Rjk3MzdBQjkyNworOjEwM0U1MDAwNUNDMzVGRTZENEM0Rjg1REEwRjE1QkM2NDRFNTI2MDMwRAorOjEwM0U2MDAwM0Q3QzJGMzE3RkQ2NjhGRDk3OTcyOEI3OTRDNUYyRjMzNAorOjEwM0U3MDAwOTU4OUZCMkZEMUZBREYzNjQxNTkxQ0RCMUY3RkQ2NEJDQQorOjEwM0U4MDAwMzFGNjc4NEZGQjBFMjQyQkNCQ0I3OEZEMjI0RkI2QTMxNworOjEwM0U5MDAwM0U5NUYzNjYzQjkyRTQ3NkNBNTdBQkY1NEVDM0JENzVDQgorOjEwM0VBMDAwODNFOTM3QUM2N0ZFRTg5QjBFOTVDRUQ5RDEzRDQxNjhEQQorOjEwM0VCMDAwNTk2REJCQTM1RkVFMUE2Q0RBOTYzMTdDMjVDMUIxQTlBRQorOjEwM0VDMDAwNkM4OEI4QkY3NTkxRkY2RENBRUYyOEVBMDlFRDFDRDI2NgorOjEwM0VEMDAwN0NCRUVGQzgxNEVFNjNBMjdCQjJDMDlENzE0RUY5MjM4NQorOjEwM0VFMDAwOTQ2N0UyNUVCN0MxMjBCRTIzODYyMEVCNDFDOTBGRTk4QgorOjEwM0VGMDAwRjREREIyMDVGQzIyNUY0RUZEQzVGNzg1QkNGOTE0MDg2MAorOjEwM0YwMDAwNzNERDA1MTFBRUE3Njk3RURFMDM2NTM5M0M2RTNBQzhFNAorOjEwM0YxMDAwMjYwMTI0QUY4OUU0QThDRUE3MEU0RjkwRTlERjUzRUIyQQorOjEwM0YyMDAwMzZBRDI0NUZDRTAyNTA0NjdFQTA3MzIwN0ZDRjBCOTUyNgorOjEwM0YzMDAwQTA1MjNFQ0IwNDBFQjYzMzRERUIwRjdDQ0Q3OTNBRkQ0QgorOjEwM0Y0MDAwRkJDMzk3RkI4OEVGMEZDRjcxN0ZFN0RBQUY5MUVFRTUwOAorOjEwM0Y1MDAwRjM0NEVGRTU2QkQ0RUMwMUZENUUzRUI1MzJDOERGOTc2QworOjEwM0Y2MDAwQUIyQkVERUUwNkNGOTlERjk3M0YzQTMxQjA4QkYwRkRFQQorOjEwM0Y3MDAwQjdBNDQxMjE5MTY0MEU0RTk4RURCQUEwRTM4NzJGRjJDOQorOjEwM0Y4MDAwRjhBRjVDRTRGMURGRUM2REZDQkJFOUQ3NTJDQUVCRjlBQQorOjEwM0Y5MDAwOEYxMjNGMzdCODhBRDlFRUQ0Q0I3OEJDNURBMTI4MTFGNworOjEwM0ZBMDAwRUEyNzM5NUUxQkYwNjE5RkE4M0RFNzNDNkE2MjdGQTg2MworOjEwM0ZCMDAwQzEyNENFOUZBOUVGOTlEOEVFODI3QzQxMDc0RTE5RjIxOQorOjEwM0ZDMDAwNzJDNjQ1Qzc3MTdBODM4MzQ1REM0OUM0NUZFQUZGNzREMgorOjEwM0ZEMDAwRDcwOEIyQkY3Rjk5MzIyQjkyODZFMzFEN0M1NUQ4N0ZEQworOjEwM0ZFMDAwOTZBOTkxQ0Q3NEJGNzNGRjM0OUI3NzNCRjJERDNEREEyOAorOjEwM0ZGMDAwN0FFREE1MTNFRUJEMTM3RkJENzk4QTkwMTcyRThCRjc0RQorOjEwNDAwMDAwRjIwMjNFQjczNDMzNDJGNkEzQUJEODIyNTNBRUMwMTkwNgorOjEwNDAxMDAwOTdENzZDQjVCNDI1NTNCQ0IyNzVDNzdEMTVBM0IwRkI1QgorOjEwNDAyMDAwNjM3NTJGQjkxQjEzN0NFRkU5RDRGMjlBMjNBNUM0NzJGMAorOjEwNDAzMDAwRjA5RjkzOTI0NERDQ0I2N0JDNEZEODVBQUU5RDJCNDk3RQorOjEwNDA0MDAwODU1NEIyMjMyREZGNTJEMjEyOUQwN0QwNEI3REZFMjIwNAorOjEwNDA1MDAwNEZBNDhBQkVCRjhFRDAyNTZFODhFN0EyOTJFQUE0NjRFMAorOjEwNDA2MDAwMEY5RjhCRTgyNEY4NTY3QUMzMEVCMjdGMUY1RjEwQkNGNworOjEwNDA3MDAwMzVGNkZCRDNENjEyNzA5MTFERUY5QjIyQ0VDMzZFNTA0NgorOjEwNDA4MDAwMjQxN0REQUZGMTYwQzRDMkY3OEUzRkI4RThFOUU2MTQ0QgorOjEwNDA5MDAwQUNFRjNENkE3NjEzM0M1QUZERUYzOTkzQjFGRTM4OEU5MgorOjEwNDBBMDAwNEJGMkVFRTAwRTcxQ0U1MjlEMEZBMTYxMDhCRjU2RjJBOQorOjEwNDBCMDAwMkFCMUJFNUIxMUU3QjJEOTIxMkJENkFFRUE0M0Y4RkY5NQorOjEwNDBDMDAwNzU3MjVGMDE2RjA4NTZEM0JEOURFQjUyMjZGMzdEOTY0NgorOjEwNDBEMDAwRDk3MzQ0M0M3OEJBNzRCNDgzREU3RkIwQzRDRUY4MUI4NQorOjEwNDBFMDAwQTI5REQzMzFBOUQ1N0M5RjY1REZGOUM2NzMzQTBGMkUwNworOjEwNDBGMDAwRUY1NDA5QkZFRTUyQkI1QkU1RjM5NzRFRDc1ODdDREYxOAorOjEwNDEwMDAwRjVBODE5MjQ1NjcxNUQzQ0Y5NzRDOTI5RDZFNTE1N0VDOAorOjEwNDExMDAwRUVFMzcyNThBNUZCOEVGQkUyN0JGNTZFQkUzNUQxNzBFNworOjEwNDEyMDAwMUU2OEY3MjZFMTlGQTY4RDc3N0E5MUQyNzFCRDcxRTc1RgorOjEwNDEzMDAwODVGNDc1QjVFMUJBRThERTYzRDc1MDhFNDc2NENDMzFCQgorOjEwNDE0MDAwQUUyRjJEQ0U2RjcwQzZENUE3OTY3N0RGRTMzMzlDRjBFOAorOjEwNDE1MDAwRkQ4NUZGQTc4NUFGNzFBQjU3NEVFNDdGQjZENjQxNjdBQgorOjEwNDE2MDAwNTVDQ0I5MDQ2NzBGNzFDMDlBQzk4MkFFNkQ1OTJGMzgwQQorOjEwNDE3MDAwQzg0RUY5QzI3RkM0NDMzODc4RTU5RjA3M0VCQzk3Q0E1MgorOjEwNDE4MDAwN0ZGRDZFRDc1Mjg0Q0ZFRkJGN0U3M0M3OTNCNEJGREE4MworOjEwNDE5MDAwQkIwRjExQkRFQUZFMTg5RkMxQzRGNUJDNTg2RDYzQjhEMgorOjEwNDFBMDAwRjk2NzY4RTczOTdEMUQyRjU4N0REQ0NFRjlBNUI1RkI5MQorOjEwNDFCMDAwOTNCODdENjQzOTg0OTJCMDdEQTQ0NUM5QkE5OUU4QUVCQworOjEwNDFDMDAwNTNGMkQ2Q0IzNDg4Mzg4RkE4RTM3RkVEMEQ3RTEzOEM2NQorOjEwNDFEMDAwMjEzQ0ZBMjVCQTBGNjM5QTc2QkU3NkMzMjI5MDA5RkY3NgorOjEwNDFFMDAwQjY0NUVEN0M1RUREQjc1QzlDNTdGNzI5RDU0OTdDREU5MgorOjEwNDFGMDAwNzQ4RTk5Q0Y4N0Q0NTc1RjczRjkzMEFDRUZCQTVDREMxQgorOjEwNDIwMDAwNEYzNTYzQjkzMjhGRTc1NzA0QkRBNDc1MTY5Qjk3MTNEQQorOjEwNDIxMDAwNUQ2Njg5RkI5QUY0RjNBNjQ1RDBDNURGN0Y4Q0Y0QjZDMgorOjEwNDIyMDAwNzdEODQ4REVDQzQ3MDBEM0ZBNUEzNTdDNjk3MTgzMjJBRgorOjEwNDIzMDAwNUZBNzRBRjZBNENCNkJDNDYzNDYxQ0RFRTJGMUJBNDIyOAorOjEwNDI0MDAwQzdFMzQ4MTg0OTc4OTRBMTJEOTlGNEUxNDMwMEVENzQyRgorOjEwNDI1MDAwQUZDMDg2RTU0RkNGQTNGMzZDNUZBODY5MENBRjlFRjhBMworOjEwNDI2MDAwRjkxREI0NTc5NTExNzQwRjhCODNDQjRFQjQ1N0E5REM0RAorOjEwNDI3MDAwODVGNjJBOTVBRTYwQzU3NUNCNzFERDdCREUzOEY4RDI0OAorOjEwNDI4MDAwMEY3MUJBNTk0QUY1OTU3NDQ0QUI0OENCN0I4MUJBNzQyNworOjEwNDI5MDAwNTAyNUFFRkYwNkUyNUU1MURGNDI4OUM0Nzc3RDkyQTFEMAorOjEwNDJBMDAwQkVENjYzODlGRTNEMDBGQ0Q1OTVBNUZGN0Q4MEQzNUIxRQorOjEwNDJCMDAwOTRBMTA4OTY0QzhCOTY4RjExRjU1OUU0ODdDNEI0RUZGRQorOjEwNDJDMDAwOUU2OUVDNUZCNjNGNjZGQzgxQjhERUM1MzY2RTBGRURDOQorOjEwNDJEMDAwNUJCQTQ1QjVDNEI0M0Y4N0Y1NzI4MDU3MzVGQkYxRkEzOAorOjEwNDJFMDAwOUQ2NkZGRjYwNEYyRURERDcyNjE0NzVBRkUwNTJBQzlBQworOjEwNDJGMDAwQjUyRkQxNEUyM0ZGNUUzMjJCMkNERjIxRDcyMjI3QkFEOAorOjEwNDMwMDAwNTcwRjAwRTU2MUFDNUYyRTFCRTVFQkU1MUE1RjU4RkMyQgorOjEwNDMxMDAwMTVBMEU1QzdFMDFCM0RGRTgwM0Y3QkZFMzg4QkVGNjNCOQorOjEwNDMyMDAwNUEzNUM0QzJGNzBGQTEzRUYwRjY5NkFGQjM3ODJDOUY3MgorOjEwNDMzMDAwQzZERURCRjVBQzJFQkY4N0MxMzA5QUZGNEIyOEZGNDNBQQorOjEwNDM0MDAwMDVGMzQxQ0NCRDBEQzRGNzZEQ0Y1RkI2MTRFN0YxMUQ4OQorOjEwNDM1MDAwNERFNjM4QUFFNDVBOUZDMkY3MzFENTM1QjEzQzdGNDBDQgorOjEwNDM2MDAwMDlGQ0I2M0NFNjdDNDk2M0ZBQzI0MjkyMkZGQTM5OTlCRAorOjEwNDM3MDAwRThCRDQ3RDc5OEJGQ0RCREY3MURENTA3ODBGNEMyOTdEQworOjEwNDM4MDAwNDg1QUY2NUVFOEIwQjE2RUVGMTE1QUM3RUFCQTc2MkUxNworOjEwNDM5MDAwOUQ2RTg1ODU4REREMTJFNEI4Q0YxNTRBRTA0RkI0M0VBMQorOjEwNDNBMDAwN0IyNkI2QzdGMDg5RDU4REVGMTlGQzBFRTM3RDlDQjI1NAorOjEwNDNCMDAwM0JFMjI0Qjg2RjI4RjlDMDQ5RjNCNzFFMTY3Q0JERTE3MworOjEwNDNDMDAwRjBFQzI0RTJCQjU2RUZBMTI0RTI5QjJGRThFMkM3RUYxQQorOjEwNDNEMDAwQzAyNzNFRTU1NTk2NjFCQkRGNDhCRDlFRTg2NzRGNDM2OQorOjEwNDNFMDAwMUFEQjE1MDc5N0RGN0YyREYxQ0Y4REJGRjgwMUMzQkIxNworOjEwNDNGMDAwOUI2RkUwRTE0MTk1Q0UxOEJFODE4Nzk5QUVCQkY5NDYyRgorOjEwNDQwMDAwQUJGN0NDMzc3RjY3QkVEQUREQ0QzN0EyRUVDQjA3NDMwMworOjEwNDQxMDAwRkRFMDRDNjNGRjZFQkVBMEYxOTEyRjFFQUZCMDczQkJFOQorOjEwNDQyMDAwN0REMkMzNUJENDE4QkUzQTQ5RjU1OEJFRjkwOUYyNERBNgorOjEwNDQzMDAwMDJCOTNGN0Q5MjQ2REYxNzk4NkY1MjJFMzJERjBDOURGNgorOjEwNDQ0MDAwQTRDOUNGRUZDRTM3NjMyNzVEMTRCRUQ5NjMzQTFGQkUzMAorOjEwNDQ1MDAwQjlFQzRDQkVBOTlBRDRGN0RCRjM0REFCM0JDQ0U3RTkwMgorOjEwNDQ2MDAwNUFFNzk4MTNGRTdEOTAwRjM0NzkzOTc1N0VBMEIyOEQ4RQorOjEwNDQ3MDAwRUMxQTQ1RENERjM3NEQ5QTk5RTVGMzEwOUY0OTc0ODdCNAorOjEwNDQ4MDAwMzRFQTRGQTFDRjBGNUVERkZEN0QwNkVCNjdGREZFRjU0MQorOjEwNDQ5MDAwRjU4NDUwQjI5MzE2MEJCQUU5QUMxMzcxREY2OTUyRjk4NworOjEwNDRBMDAwQjRDNUE0NzdFOTNCMDI0QTM1NTNGNjk0RUMwMkQ0RkIzOQorOjEwNDRCMDAwMzJEOTg1RDA1RUUxQzE3OTM2NTQ5OUEwNERBNjJEMDczOQorOjEwNDRDMDAwQUI4N0YxRjg2MUI2Q0Y4NjY4NzE3RkE3OTQyRkJFNjc3RQorOjEwNDREMDAwOUEyOUZFRUU4NUZFNUQ0Q0I1NjJCQzVGQjZGRjU5RUNENQorOjEwNDRFMDAwMjY1Qzc3MEFGOTMxRUUxMkYxNzc1MDE2NEQ4QUQ3QkY2NAorOjEwNDRGMDAwNjg4N0UwRkEzQTA3REE5ODRFMzYyODU3RjcxQTI3M0FDQgorOjEwNDUwMDAwRTM1Q0I1MkY5ODMwMkZGOUQ2MjQ5Mzc2Q0ZCRUYyMzNFMworOjEwNDUxMDAwQTJCM0RENkY2QzQ5QTY3MzEyN0IyNEUwRjMzOUYzODNGOQorOjEwNDUyMDAwNEZDRDIzQkU3M0E5NDJERUI0QUVGODMzQTUyMzYxRDdDNQorOjEwNDUzMDAwQjQxRjFBRjUzNDdDNkFENEQzRjBBOTUxNEY2QkY1MUUyMQorOjEwNDU0MDAwRTU4RDdBQzJBOEE3QjU3QUI3OUVENkVBREQ3QTVBQUJDRQorOjEwNDU1MDAwNDdFNUNEQTcwNjNEQkQ2MUQyQTcwNjc5RjMxRUQ1Q0ZBRAorOjEwNDU2MDAwNDE0RjFGOUU3NDcxRjRGNEE4OEIyQzZGOUVCRTcwRjJBNQorOjEwNDU3MDAwNjZERkE0QkUxNzQzREUxQzM5MkY3OTkzN0RBNkJDMzlCNAorOjEwNDU4MDAwNzQzRUYyQzZCNUI5NDNBNUY0Q0NDMjFFRjhBMDU2QzMxQQorOjEwNDU5MDAwRkI1QjY1Q0FEQjM0M0U5NDlDNUJCQzI2OUVCRTNBQUE5QworOjEwNDVBMDAwMTdBRUE2QkYyQkYzQTU1N0Y4N0YzREJERUZBQUZERDVFQgorOjEwNDVCMDAwOTFDNjE4M0ZEQzY1RTkxNERGMjNENEVFRTFFN0I3NkM2MAorOjEwNDVDMDAwN0U5NUUzQjE2NzVEMkY1RDEwNUE3NEE2NUU0NUJCQzg0QQorOjEwNDVEMDAwQzFGNEVCMzU3MzJFRkM3Q0Q3RDEzQTQ3RjBEQjk1Q0Y5NQorOjEwNDVFMDAwREVDMUZDOTQ1QzZFOUM0RkI3N0YzQkFBNkQ2NjlFQUZBQworOjEwNDVGMDAwNDRDOEU5OUVFQ0ExOUVFNkZEQTA1QzE2RjdGRkM1Q0Q4MAorOjEwNDYwMDAwMUY0RkJGNDg5RkU5OTM4Qjk4MUUyRDc0MkZGODE3OUQ1RAorOjEwNDYxMDAwQzA3RkE3RUFCRjRFNkVGQ0JGOEE3QzQ5RTlDNTExOTNGMworOjEwNDYyMDAwQ0Y4MzRFQTc2QkY4NENCMDZGRUZDNURERjcwNUUzQ0YzNgorOjEwNDYzMDAwRTk5M0NGQzM4RTNFNENGQkVFOUI3MERGREY2NzM4NUVBNQorOjEwNDY0MDAwQjQ3RDVGMzBGRkUxRTZGM0MxRjdCQkU1RERGQkU2RUZFQworOjEwNDY1MDAwNTEzMkI0N0Q2RkY4RTczNUVGNTE1QzYzQzNCRkFFN0Q3NworOjEwNDY2MDAwOEFFMjFBRjc3RDlEQjc4REUyMUFGQUJENzI2OTEwRkRENAorOjEwNDY3MDAwOTFGNUVGOEYxMDJFMkVCRkY4OUUyNDYzNEVDQzc3NDUxOAorOjEwNDY4MDAwQzBGRTdERjRCQjEzQjIzNzdDRERFREZGMkJGN0NBOTE4MgorOjEwNDY5MDAwN0REMkRCQkQ3MkFEMzY2MzVDNEYyRkFGMkExN0Y2NEE3MQorOjEwNDZBMDAwQUI2OTFEQzcyMzM2QTA1RjU1OEY3OEVCOTgyM0UyMTFDNQorOjEwNDZCMDAwQUQ2OEE3QjBEQzk5NTNEMEFCN0RCNEFCNEVFMUI4NTMzNQorOjEwNDZDMDAwNkI5RDlGQ0I3QkVCNjY3MEI5RUJCNTI1NjUyNDc3N0Q0MQorOjEwNDZEMDAwQUYyRDYyQkRFN0YzRkFBRjdCMTg4MUU0QUVGOEQwNDlBNQorOjEwNDZFMDAwQ0ZFRkY1RThGRTkwQjA1RkQyQzg3RUMxRkFDMzkzRDc5MgorOjEwNDZGMDAwNkY4RDhEMEI4Q0ZBRUZFMTVCRDQ4MUQxNzg1NTVCNjZDMQorOjEwNDcwMDAwOENERDIzQzdGQTUxQTAxMkI5NDRGRDI4QUMxQkVDOUFFQQorOjEwNDcxMDAwMTFFQzQ3RUQyNkJCMDZFQkVEOTM0NzE4RUMxQTdEOUU5NgorOjEwNDcyMDAwQjU2NkE4MjFCQjY2RUQwRUYzOEM0NDc2Q0RBQ0YyQzQyMQorOjEwNDczMDAwN0UxNEQ2MzkwRkUyNzAzOUY4RkI3RjQ5RkJGQjVGNTFERAorOjEwNDc0MDAwN0VFOUREQUVDOTlENzI3MUVEOUFERjRGQkUzMEYxODcxMworOjEwNDc1MDAwNkUzRUQ2RUM5OTA3MTRFNTBENERBRTdDNDdGOUIxRDEwQworOjEwNDc2MDAwNENGMUUzNkYyQjNGNDY5MkZDQzgzN0M4OEZDRkNFNDc0MgorOjEwNDc3MDAwN0VDQzJBNzcxQkUyQTIwNzY1QjVDRjU4QjJEMzc3OThEMworOjEwNDc4MDAwQTE1RUQ2RjQyRkQ2M0JEMUFGMzEyMTlDN0U1MjIxQjExMAorOjEwNDc5MDAwOUZCM0MxMEJGQ0Y3RkRBNjRCRjM1RjI2N0FEOEJEQzhDQgorOjEwNDdBMDAwQ0NERkJCM0ZBODg4NzMyMjBGQ0QxMUU3QTkxRTVFNUU0OAorOjEwNDdCMDAwMzA5QjNFMjM1QTk3NzJDM0RENDkxNEQ3MkUxN0Y3MDQ1NgorOjEwNDdDMDAwNEM5N0NBMzlDRUZERTAwQzYxRTc2NDNCREIyRkE3RkRCNworOjEwNDdEMDAwMUZBQ0IwMDBEMUQ1RDlFMkRDMTQ2RUU3NzhCNUU2NDc1RQorOjEwNDdFMDAwODFCNDk5RkQwRUQ3MEYyRDZFM0FBRjFBMUZCRjc2OTY4MgorOjEwNDdGMDAwN0NDQ0RGQ0Q4M0Y0MEE3RkRGN0RCNkY4RjVCNzhENUIyNworOjEwNDgwMDAwMEY5OEYyOURFM0Q2Q0M4RjM1Q0YwREJGNDE3NTlFNDlGMQorOjEwNDgxMDAwOUY0NzI2Q0JFMjVDNjIwRjdBMkM5RTlGM0JBQUE3QTdGQworOjEwNDgyMDAwNDU3QTM5MTdFNTI0RkIyOUU2MUU1OUZEN0JENjU5RTU2MworOjEwNDgzMDAwNjIxRTI3RDk0Rjg1NTFCQUU4QTgyRUVFRjU1RURBOTRBQworOjEwNDg0MDAwREE2NzhFQzRFNjg1NTIyQ0VEM0M1RTRBRUQzRTdFQkVCNAorOjEwNDg1MDAwOUVDRTJGOTBDQ0IyNzg1OUFFM0U1RTg5RjIzOUMxNzhBNworOjEwNDg2MDAwRkJFQTgyODcwOTJFQkZBRUFCM0Q0QzcxRUE0OTk2NEVGQQorOjEwNDg3MDAwODlGRTlFRUJERTNBOTVFQjdCRUE5QUI4REM1NUQ3QzYwQgorOjEwNDg4MDAwRkRENkQ3NkRFMkYyQkVCQTEwM0ZCRkI3RUUzMUFFREY1NAorOjEwNDg5MDAwNUREN0NFRjVDNzczQzUzQzEzMkQyMTFFNjc1MjE3OEUwOQorOjEwNDhBMDAwMUZDMzBGNjU5RkUwM0MzMTc4MkU4REE4ODZGNjA5NkZGNworOjEwNDhCMDAwMzYxOURBOEIzQURCMENGNUJFRkU0RDg2RkU3RDY2ODQzQQorOjEwNDhDMDAwMENFRDZGOTUwNTAyNTM4QUU4NUNDMzYzODY3RUNFRkNDRgorOjEwNDhEMDAwNzY0M0ZENUNGRDg1MEJERDZGNjU0QUFBRTUxRkM4QUYxOQorOjEwNDhFMDAwODMwMjQ4NEY0ODY3RTlCNUIyQ0E3OUYzMUFDMTk3RkQwOAorOjEwNDhGMDAwNkJCRDYxQUE2RjcxRDk5OEJGNzVCQUU0MzNDQjI2QjE4RAorOjEwNDkwMDAwN0U1M0NDM0RCNTFEMkU3MTdFQjJBMUFGODhBNzM0RkM3RAorOjEwNDkxMDAwNENENEI3NjQ4OUYzOTFDM0FCNDQ3RUE0NjFBMEI4OTcyQgorOjEwNDkyMDAwNDRDRkMzNkY3MTY5Rjc5M0Y4QzQzRDFBODNGMjIzRkMzNworOjEwNDkzMDAwRERFRDIwRURFRkMxMzlDQjQ1RkVDQzBENkVDRUNGMzc4RQorOjEwNDk0MDAwRDQ4MUY2N0Q2Mjg0RjMxRDE5NjBGNjhBRkJENTE1OTkzMgorOjEwNDk1MDAwRkY5RTkyMDU0MkY1Mzg1RjQzQkU1QkJEODVFNDRDMzA1NworOjEwNDk2MDAwRDU2QkY2RjI5Rjk2MEQ5OTI5OEY0OEUyODk5MzMwRUQyOQorOjEwNDk3MDAwOUFERUQxRjJGMjQ5MUYwMDlGM0JFODg2Q0ZFN0UyN0I0NworOjEwNDk4MDAwODREQTJFQkVCN0E5N0Y2RDE3RTdFM0I2RkM0MkRDNjM3RAorOjEwNDk5MDAwMTMwRkQ3OEU1RjdDQzVGNzJBNkRGREQ5NTc1OUM0RDQ0NAorOjEwNDlBMDAwNUJCQkNGRUQ3NDI1QzU3RThGQjZBNTI2OTVFRjVCRDg5MgorOjEwNDlCMDAwNUE5QkNCRTcyOEI2RDY4OEVGOEQ2NTEwRkJEREIyQzhEMQorOjEwNDlDMDAwQzZFNzMwQjZENjlBQ0QyNDI3NEYyREIyMzA1Q0Y0RjUyOQorOjEwNDlEMDAwQzdDRkFCN0ZCRkI5NEUzQkQ3NzNBRjc2QUU2N0FENzY2RgorOjEwNDlFMDAwQ0VFQTZFRUQ1QzRGQjM3NkNFNkE4RDc2M0U3NjE1OUQzRgorOjEwNDlGMDAwRUJCMTEzM0NDNUI5OUVBREI1MEIxNEVEM0NBQjdFMkZBRQorOjEwNEEwMDAwMDNDMzU3NDJGOEYyNzcyQTU2RDg2QjFBMDdGNDg3MEM3QgorOjEwNEExMDAwMTk2RUYxREZDNzY2NTQyNUM3OURFNzMxOUVCNzRBRjU4OQorOjEwNEEyMDAwMEQzMEQ0OURGOUM2RjM1NkM5NDM0NzE5Q0ZBOTBFMzRBQQorOjEwNEEzMDAwOUVFRkIxNzk4Q0U3N0EyQ0NFNEFFM0Y5RDA1OEZBNDQ0QworOjEwNEE0MDAwNjA5QTU2NkNBQzI3RkM3N0ZGN0Q0NzdBRDg4RkZGN0U0MworOjEwNEE1MDAwNUMzN0ZEODZGNDczNDAxMjlENDM0OTYzN0FDREFDMTJGNgorOjEwNEE2MDAwRjQ5OUExN0QwRkUzODY0RTJFNTM5MTVFQTg3NDUyOUU1OQorOjEwNEE3MDAwNURBMjczOTAyQUQzNTFGNEZCMzdBNTU3N0EzQURGQkY3MgorOjEwNEE4MDAwMDcyMEFENENGQ0Y3MDBGNDczMDg3RkQxRUNBOEE1NTNDOAorOjEwNEE5MDAwOTQ0RkE3MTQ0NUU3QkI3RjhBNzIzQ0I2QUU5NzNEQzlEOQorOjEwNEFBMDAwODVGRkFERjJGRjAxQzE4Q0UzMkIwMDgwMDAwMDAwMDAwOAorOjEwNEFCMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJCNTU1Q0Y0QjFCNDFCOQorOjEwNEFDMDAwMTRGRUIyQkJEMTQ0QTM1OTM0QjY4NjVBNDgxQTUyMERDQgorOjEwNEFEMDAwQTRCMDZEMzdBMjI1RDJENTg2OTI4M0M4MTYzQzc4RTg1QgorOjEwNEFFMDAwMjE4NzlDRkFFMzU4RTg2RDYzNUI5MDRBMjRBOTQyMkYyMgorOjEwNEFGMDAwNTJDOEMxMUUwQTgyMUVGQzAzNjIxQjdBOEU2ODBCNTJDQQorOjEwNEIwMDAwMjlDMThBRTc0MDVCN0ExMUQyMzc5M0FDODk5QkM0N0E3QQorOjEwNEIxMDAwRTk0MEYyRjI2NkU2RkRGOEJFRjdFNkU1MEQ2ODc5ODE1OAorOjEwNEIyMDAwOTBBMkREMTM3RDQwMjQ1QTJBMzg0ODA2NTQ2OEI5MzBEMworOjEwNEIzMDAwMzA1MzI0RTlBMkZEQjVBQTk0MzU5MTE0QzBBOTA5NUNBQgorOjEwNEI0MDAwOUFCQTFFMkY0OTEyRDlDOTE2M0JGREQ0Q0VDRUVGOEQ4RAorOjEwNEI1MDAwMzFCQjAxMjYyNTJFQUYxRjM5MDAwRkIwMTVCM0U1MTY2NgorOjEwNEI2MDAwRkRDMEMyMEU5REFCQzBFRjMxNUIwRTdFOTZEQzQ5QTU0OQorOjEwNEI3MDAwMzJDQTREMDE5MTdENjlCRERFNEJDMDJDRkI0OUYxN0FGMworOjEwNEI4MDAwQzczRDAzMDlGMjlGMzE4MEZDMzBCQkYzRDBDRDc0NTc5MQorOjEwNEI5MDAwMzQzQkU1QTMzQzQyN0I0NTQ4RTQyRjUyODREQzA3ODY0NgorOjEwNEJBMDAwQUZBQzgxRjZFN0FGREUxNzI1OEFGQjYxMDlCODRDRkI5NQorOjEwNEJCMDAwMEJGNjUyRUMxMUREREIxQUVGOTQ1RjI4Q0NDRkI0RkQ3RAorOjEwNEJDMDAwMjk5RENGNUMxMTIxMzI1REI3MUY5NjI4NTVEODYwQUI2NworOjEwNEJEMDAwNUMyMzdFQTI1MjU1QTc1NUExQ0YwMzM0RTg5NEY3MEM2RAorOjEwNEJFMDAwRDM0N0VBQkFGQjI0MzAyOTUzNUVDRjBGRkMxQjg1OTFEMworOjEwNEJGMDAwQkE1RDgwNTI2MUZCQjdCNTFFQ0Y3MTM3NkQ4NDEwQUFDNAorOjEwNEMwMDAwODg3NTFDMTVCNkVFMzZDQjNGODY2RkEzNjA2NzM4MjFEQQorOjEwNEMxMDAwMzBCRUQ0M0QyMUU3QTczOEJENUY5NkJCMTgzRUIxQTg5MgorOjEwNEMyMDAwOEIyNUIyNDc4QzUwOEYxM0NFM0RERDhENzNGQzdENjc5NQorOjEwNEMzMDAwRkM3NTAyMDc4NjgzQ0JBMjIxNzNCOTY1MEM3Mjc5NkM2RgorOjEwNEM0MDAwRjhCODNDMzI0NkI4M0MzNDE0MkU0QkM2MTg5NzQwOEEwQworOjEwNEM1MDAwRDdCM0QzMDYxRTJGNjNDNDc3NjNDMUY2RjE2NDVCNTlFMworOjEwNEM2MDAwNjc3NUM3ODQ4NEY3QUNDRTQzMkFCNzZCQkExNzI1M0Y2NAorOjEwNEM3MDAwMEQ3QzExNURCQzE5MEEzRDZGMjc5OUZEQkIyNzAyOEY4MgorOjEwNEM4MDAwQjkxQURERjRFQUUxNjZGQkQ1Njc1M0U3RTI0RTFCNzMyMAorOjEwNEM5MDAwQkJBRkVDRURDRjVEMUQ0ODZDQjZGMEZCQjJENkM3NDBBNAorOjEwNENBMDAwOTZFNzExODgwQjU4QTQzQ0JDMEVDNTI5RDNGREY0QjY3OQorOjEwNENCMDAwOTNGNzc1NDg3MUU0OUMwQ0RGOUEwQjNGNEMxQ0Q0M0Y3MgorOjEwNENDMDAwQ0I2OTZBMTk4MjlDRDUyNDk5N0FFQUQ0NkY4RjQyRjkwQworOjEwNENEMDAwMzRGNDU1NjBGQUUzMjBBQjY3N0EyMjNGQTgxMzhFRDVFRgorOjEwNENFMDAwOUI5RkU3ODZDOTJFQjUyMzIyODhFNkJDNUU2QjM2OUU2NQorOjEwNENGMDAwOTc4OTJCMjAyOTgyREMwMjdGM0I1QzhGNkJGNjE4RjJCMAorOjEwNEQwMDAwRjBCOTYwRTVERjdBREZBQzNCQURCNDM0NUE3QkEyQjRENgorOjEwNEQxMDAwMTI1RDg5OEM0Njc1RDJENjZEOUMwN0E3MEZGQzdENzdGNgorOjEwNEQyMDAwNDBDQjMzQkMxN0M4MEZCODQzM0NFNzIzODk5NEFCOUVGNAorOjEwNEQzMDAwNEZCQjNBOTk3OTc0RDdGQUNGOUIyQzNCMTI4NDZGRjkwOQorOjEwNEQ0MDAwMUY3REQ4NjcyRjNBNThCRDk2OTI0MjNDRDcyMjhGRjVFNworOjEwNEQ1MDAwREE5QzVCNTI2RjM5RDk3QjQ0Qjg3NTFFRkQ3MTZCOUYyRAorOjEwNEQ2MDAwNTZGMzU5OTFDODNGOUI0RjJBRjk2RkMxRjczN0M2Nzc2MQorOjEwNEQ3MDAwQjU5RkY3NDVBQTZCNDYxMzdDQUM5RkZCODkxQjhENDIwMAorOjEwNEQ4MDAwRjU0NzkwNEIxMTZGRDlBOEEwRTRFOUZDOTdEQUExNzAyMAorOjEwNEQ5MDAwRjc5NkY5RDAxNDVGNkRFOEEzNkJDRDczNjc1QjczNTUxRAorOjEwNERBMDAwRTc0RDEwNDEzNjZGN0UwRUNEQkFGMzJERUE2QjRBOTM3NAorOjEwNERCMDAwNDc3M0VFMzRGMzU4QUVFMjRDNTY3MTIyRENGQTNERDcxRAorOjEwNERDMDAwRUIzNTVGMUJFQTQ4ODg2N0ZCRTZFQjc5N0REMzhFN0Y4NgorOjEwNEREMDAwNkIxRkFDMjQ3NTc3OUVGRTFGRjA2OTFGQkUxQjhDOEY2NgorOjEwNERFMDAwQjNFRkFGMUQ2RjU2OUU4RUZGMzM0RkQ2RjNBMjM5NTdFOAorOjEwNERGMDAwMkU4OEYzQTJGNzRDRkQyRkRCQTc5MEE2RjAwNzAwMDA0QQorOjEwNEUwMDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDBGMAorOjEwNEUxMDAwMDAwQkZCNTFDRkMwRjAwMzA5NzdGM0EwRjJCRkEzRjE2MQorOjEwNEUyMDAwRDdGM0EzRjJDQkI4NTFGOTlFNjhGQzI2MzRGREU3RDE0NQorOjEwNEUzMDAwRTQ1OTE4MjBCNDIzM0JBQTM4QjE1ODk4ODM4MTQxMEUxNQorOjEwNEU0MDAwODgzNTM5NTBDNUYzQTFFNkQ2MDAyREU4MDdFMjE1QUM0OAorOjEwNEU1MDAwODRDREZBMkMwNTc0OEYxQzAzQzMyOTIwREQwMEM0RDczMAorOjEwNEU2MDAwNjUxOTE4RDg4MTdDMjE2OTA2MDY1RjIwNEUwMEUyQ0ZDMworOjEwNEU3MDAwMzIwQzBDQjM4MEY0M0IyMERFMkEwREQxQzcwNzE0M0I2MworOjEwNEU4MDAwMjc0MzlFRkJCQjg1QzhEMzM3OEFBOTgzMUYyOEExRjI3RAorOjEwNEU5MDAwNjc2ODMzMzBEQ0Q2NjE2MEQwRDY4M0YwQUYyMEM5QkIwMQorOjEwNEVBMDAwMDNDNTY2NkE0M0Q4MzFBQTBDMEM4Nzc0MTkxODRFMjhCQQorOjEwNEVCMDAwNjEzNzM3MTYyODdGMTgyODFGQUI4N0RGN0U1NzIzNTRBQQorOjEwNEVDMDAwRkUyRTZCNTRGRTRGNDM1NEZFMTM0RjU0N0U5RjM3MkFFMQorOjEwNEVEMDAwQkZEMTA3NDIwMzAwQkRFMEQ5OEREODAzMDAwMDAwMDAxOAorOjEwNEVFMDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAxMAorOjEwNEVGMDAwMDAwQkNEN0QwRDdDMTVENTk1Rjg5OThGMzc2RkRFNjc0QQorOjEwNEYwMDAwMjZDOTBCM0MyMEMwMjQwNDg5MUFFODAwMDE4MjIyNEVFNQorOjEwNEYxMDAwNDJCMEMxNERGMTgxNTQ2OTk3RUE5M0I1MzYyMkM4MTM2NgorOjEwNEYyMDAwQjFBNkFFNkQyNkRGRTFBQjhERTg1NjU2QUQzRTU4NkRBRAorOjEwNEYzMDAwQTlENTFBMkQ2RDY5NTdEQjA0RDBDNTJEODU0OEE5QjVCMworOjEwNEY0MDAwMkRGQjZGNTA1NzVCMTZEOUU4MTY3NTVENUFGRUY3OUMxRQorOjEwNEY1MDAwM0I5M0NDM0M1RTNFRUNDN0NGQzZFRDBFNzdFNjdFOUMyNQorOjEwNEY2MDAwN0JFRTM5RTc5RUFGN0I5RjIyMDY0MEJGMUNFMDFDRkUxNAorOjEwNEY3MDAwQjFFNzQ1MjIwMENDMTk3QzQ2MkJBMDU0MkUwN0Q4MjQzQgorOjEwNEY4MDAwMDQ4RDcwMTE3QkZFNDE1QUQ5MTU2NkRGQzA4QTJGOUZCMAorOjEwNEY5MDAwM0VEOEVFNUExMEE4RkVGMzQ1NkRGMTNFRjZCRDYzRUEyOQorOjEwNEZBMDAwNTdFMzUwQzZFQTRGMTRBOEJFNTNDRjc5REUwODEyNDAyQgorOjEwNEZCMDAwMDE0MDQ5RTc2QTM1QzFGQUQ5MzRBRTQ5QzVGQTFERkE0QworOjEwNEZDMDAwRjY5NUMwQzYzQjUzQTI4MDg0RTMxNTY1NkZERkQ2MDAxQgorOjEwNEZEMDAwRDAzRDBERTA3MkQ4QUExNkM3NThGOTk4NjQ2Qzg2NkM1QgorOjEwNEZFMDAwRTMxNEQxMzg0RUQ5MUYxN0ExQkIxNEU4RUYxQ0ZCREYyNworOjEwNEZGMDAwQTYyRjI2MjFDMUM2NkQ5REZBRDU5NTA4QjdEMjdEMzM1RgorOjEwNTAwMDAwRTgxMTgwM0JDNjI1NDE2N0VGNjc4MjQ4RjM1MjJBMkM5RQorOjEwNTAxMDAwMzA1OTU5RDVBREI4MzVGREZDNzEzQTEwMkY2NUQ4NkJCNAorOjEwNTAyMDAwNjc3Qzc5NjRGMEZEMzIwNzJGMEMxRjE5NzgwMUI4MDRGMgorOjEwNTAzMDAwNDA4MzU5REQxNjk2MDM0MEVEMzNGQjM1RURGMUI1RjhBRAorOjEwNTA0MDAwRThDNjNGN0ZGRTdDRkMxOUEwMTMxRTQwRUQ4QzI3MjI5MgorOjEwNTA1MDAwODNGMDZDRjJGNTc3NEIwQ0RGNTYxMTE4OEZCMTJBMzlCQgorOjEwNTA2MDAwNkM5QzRBNTczRjk5RTMwRENDNTNFRUY0QUNGRjc0ODQyQgorOjEwNTA3MDAwQjM4MEU2MjFDOEFFRkUzMkUxOTk2QkQ3OUJDQjY2OEUzQQorOjEwNTA4MDAwNEY2NzVFMzkwQkY4MzgyM0Y1N0YyNUEyQjgwMEVCNzcyMAorOjEwNTA5MDAwQzZBRDg4OEIxRTY1Q0I4M0Y3QTA1RDVGMzNCREY1ODZGQgorOjEwNTBBMDAwQzI0RjA4RjEzMzA3RjE2M0M1OTExRTFEM0E5NkMyN0FDQgorOjEwNTBCMDAwNjMwRDlCNEY4MTA1RkQ1MjJFOTE4RDA5NjMwMEYyRjEyNgorOjEwNTBDMDAwNUZBQzg5QUNFOTk1NDhBRjYzNEM1Njk3N0QxRjFCQjMyNQorOjEwNTBEMDAwMUEyNUY2N0VEQzgyQjQyMEIzNjcwNDFFRDJERTA4MDFGNgorOjEwNTBFMDAwNDI1MzcyOEUxQTU5OUNFRUJCNjY3N0Y0MzFCQTNEMDM3NworOjEwNTBGMDAwOTFDRUNERUNEOTJDQjM3RTExNkZDNzIzRTlDNzE4NDhFOAorOjEwNTEwMDAwOEQ5N0E1MUVFOTYzRTU4ODI1NDM1MzM5OEQ0QjdDNzgzRgorOjEwNTExMDAwQTc3NDkxQjE5OTkxRjQ2NjlCRkUzQjFBNTQ3QUI2MzUwNworOjEwNTEyMDAwNjhEMEVEMDc2ODY5ODhEM0YzRkVEMDk3QkU4MUZERDdCQworOjEwNTEzMDAwNUI3RUNEQ0Y5RTcyRDdFRDRGNjFCOTE5MjA4MUUzNDVEQgorOjEwNTE0MDAwNjJCQzdGOTA1NUVEMzEwRENCNjAyMkRFMjMyNUZDRjk0QQorOjEwNTE1MDAwMTJFMjg1QzFGOTU1ODY0OUM0Q0IwRjZEM0NFOUQwNERBQgorOjEwNTE2MDAwRkNEQTZDMkNDRjgxMkNGODc0OUVBMTUyMkY5RjA1RjQ5MQorOjEwNTE3MDAwMjA2QjM5NThGNkM3RjMzQzY1OUYzNkRFNTMxRkEwOTA2RAorOjEwNTE4MDAwRjA0NjY1MjYyQUVBMDQyRThGMjI3MjJGMTgwODI3QzNCQworOjEwNTE5MDAwNTc1NkI5NjBDQjE1NDk5QUQ5REZDREU2MTc5RUE3MThBNworOjEwNTFBMDAwQkI1OEQzNkQ4Mjk3QkZDNjA5OUMzRUNBMDQ5NTlFMzFGOQorOjEwNTFCMDAwRThERjdGMEVGMTYyODhFOUNENkNBQ0UwQ0NFMkFFRUVDOAorOjEwNTFDMDAwMTg4RUE5MTg1M0Q5M0EwNjdENjkyRDJGMEI3RjQxQjk0NgorOjEwNTFEMDAwN0NBQUNGODFCQkY4QTNDNzhGMjRGNUE0MTI1OUM2RkRDMgorOjEwNTFFMDAwQkRCRDdFOTc5RjNEQTIyMkZGQUIzM0M1NDRCQTBDRTEwMworOjEwNTFGMDAwQjUxMjZDRjJCMDU1OTc0NTlDRjc0NzA3RjdGMEVCNzU4MQorOjEwNTIwMDAwQzJFNkU3MzY1MEE5QkU4Q0VCNTUzRUI4NUUxRDA2NUI4NAorOjEwNTIxMDAwMkZFNDlGNzJCRTVFMURCMkE1OEU2NkJEMUUwN0YwRTAzNAorOjEwNTIyMDAwMjUzNDgwOTcyRThFOTdCMjhGMTgyRkNERkI1NjI2QjIzRAorOjEwNTIzMDAwQ0NBM0NENUU0RjE5MENBMzk0RjBBMEU4MDhFN0Q2NDZBNgorOjEwNTI0MDAwNEVCNzE2QTNEQjZDRjI3NzI4M0M0ODM5QzdFM0M5QjJFNgorOjEwNTI1MDAwRjNGMTdFOERDMEM3NTk2NEYzODk4M0E3NEQ4NjU4OTNCNworOjEwNTI2MDAwMEUyMzlFM0E2QjUwNkU2RDJEMTE0NTk0NEIxRjE1OUU2QgorOjEwNTI3MDAwMUNCODM2MEZDMDk1RTY3MDk1N0VCNDcwNDlBMUVFOTVDNgorOjEwNTI4MDAwRDlGOEIxMkQ4MzFGQjcyMERDOUNFRTZBMzhERDg5MUY2OQorOjEwNTI5MDAwMjlERDM5NzAwNTkwMUZGODNBMjdGODNBQ0I3RjEzRUJEOAorOjEwNTJBMDAwREMzNkIwQ0U0OUJFQ0VGMThGNjY5RDlERkQxQzU0NjNBOQorOjEwNTJCMDAwMjVBRTVCOURDNkY4OTBDMTcxOEI2NDI5MzdFMEZFMUE1QworOjEwNTJDMDAwMTJFMDMxODNEMTAxQzIzRjhFRTk5OUUxQTY5Nzc1MURBNQorOjEwNTJEMDAwRTAzRTIxQzBGNTBENjk1NTRFRDIwNTZGOURDQzc0OTYwOAorOjEwNTJFMDAwNTlGODdFRUIwNUM5NjFFNjAxNjk1RjdGOUYwMzI3RTNGQgorOjEwNTJGMDAwREZGQUUzOERFRDA3NUM3MDdFNTE4OEM0MDhDRTc5MzAwQgorOjEwNTMwMDAwMEZFMTdDMjdCQzNDQTcxQjg2RUVFRjY0ODNEQTI4RkIwOQorOjEwNTMxMDAwMDBERTZCQjBEQTBGRjhDRUZGN0U4QjA0QTk2Q0ZBRTVFNQorOjEwNTMyMDAwODNCNjVDMDBCNTRCQTFGOURGQ0Q3ODcwMjZFMkUxODI0RgorOjEwNTMzMDAwNkE4OEIyRjUwODM3OERDMTc5NDA5ODdEOUNDRkZBRDkzQgorOjEwNTM0MDAwMUQ2ODk0NURGODFENkEzRTAzNzg3NURBMzE3NUM3OUY1NAorOjEwNTM1MDAwNzc3RUZCQTFEQTdEMjAyNDFGMTExODdFNUI2MzYyMzUwNgorOjEwNTM2MDAwQzJBNTk2NDAxQUQ3QzBCRjdCNTlGNzc4MTgxQURFRDY2NworOjEwNTM3MDAwRDg1RjA2REUyMUQ3Q0RBRUY3NEVCOEE5MEQ1OEJCNjY3MworOjEwNTM4MDAwOUY3MTUwNjc3NEQyNTIyMDFBNEQzMDA4ODc0MzJGQ0UzOAorOjEwNTM5MDAwQkEzODc4MUNFREJBRkM2NjgwQkVCNjVFMDFBNDY3ODI5RQorOjEwNTNBMDAwMkVDREZDRjNFOUVBMjBEMkQ1QzU3RjdEQkE3QUUzNkYzMgorOjEwNTNCMDAwOTdBRTRFMEEwNTdGQkI3NEE1RDQ0QkZBRUJDQ0NFMjgzMgorOjEwNTNDMDAwOTI0RDJFMjdCNUQ1MTZBRDNGOEVDREU0OTJENDM5QjM4QworOjEwNTNEMDAwMUJFNTI1QzQ5OTdEQzY4NzAxOTE5NTE1Q0RFNDdBMkZFQgorOjEwNTNFMDAwMTg4MEZBQUI1QUUyOTU5M0JFNDJBRjlDOENBRjM0QkJBNworOjEwNTNGMDAwOUQ3RTM3RUIzOEFFNDJFM0EyNzk4NEUzQ0E2MUU4MEVDMgorOjEwNTQwMDAwNDRCMUFDNTAzRjQ4Q0VFN0E2MzAzQ0MxODMzNUM1QkM2MworOjEwNTQxMDAwOUQ4MUVEODY5QThGOENFREQ4NzhBODdFOUMyQkMyNzZFNAorOjEwNTQyMDAwN0Y5RjkzQzg2MkY3MEVDRURGM0I0RTdDNDUyMjI3MTE0QgorOjEwNTQzMDAwMTk3RDdEMDhDQkZBMUIyRUJDMEZERDRFODYzNzFDQkNCOAorOjEwNTQ0MDAwMzBGQTJGNDUzRjQ5QzEyMEZFQ0REREI3OTFGRjIyMDA0NAorOjEwNTQ1MDAwQTI0MTc2NUQ2MTlCODU1RkRCRjFGRkNEQzc3RDlGRjM0OAorOjEwNTQ2MDAwNzU3QkUxMkMwREY1MkQ2MEZCMERCRUI3ODRDRjAzOTY0NworOjEwNTQ3MDAwM0YxMDc0RTI1QjY3M0MyOTlDMDBBMjFCQkJERTQ4RUIzQgorOjEwNTQ4MDAwN0YyN0YyNTMxNkZFNUUyNTcyN0RFM0JEMkZBNUZFMUIxRQorOjEwNTQ5MDAwRUQ0MTZCQjNBMDNGQzZGMDdBQjhFMTdENzg4REYxRTVDMAorOjEwNTRBMDAwRUFFRTBCMTVGNDdCNUMyRjhFQTE3QUFCMTcxNDI5OEJENworOjEwNTRCMDAwNUNGREFDMDY2RTE3MDJGNEM5Q0IyMkVFNzExQkI5MUU1RgorOjEwNTRDMDAwREEyNUVEQzM3OUJGNUEyMUE1NzFGRjdCQjVFMjdGNDg4QworOjEwNTREMDAwM0Y3RkQ1OTREMjg4RTQ1NzNCQUVDRTE5NEVFRTFDNkU3QQorOjEwNTRFMDAwRTBGNkFDNTNFRkIwMjlEMUZFN0U1OEVFMEI2N0QzRTM2NAorOjEwNTRGMDAwMDdDNzRGRDNGODU3NTU0OERFN0Q1QUVFOTM3MUZEREY0RAorOjEwNTUwMDAwRkIyMkY4NTA3RjNFRENBMDBBQUY0RDY1QzYyRkNFOTMzQworOjEwNTUxMDAwRDFEMUVBOEEyMjA1RkQwRTIzQ0Q2Qjg5RUQwNzczRjAwOAorOjEwNTUyMDAwRUJDQ0IzMjUyQ0QyM0M1QkMyNTVFNEI3NkFEMURFMjE2QgorOjEwNTUzMDAwRkJGMTBDN0I4RkYyNjAyODc4MURCRjU1OEJCNjNDMkI5RQorOjEwNTU0MDAwM0U5NDA4RDdCNzE0NUYzMkJCQkQ2OUNGRDcyOTY3RkEzRAorOjEwNTU1MDAwQjMxQ0Y4REFDMkRDMkU2QTBCNzNCOERBNjI2MjFBRjk4RAorOjEwNTU2MDAwQkYyRDlFN0Q1Q0U3RDk2Q0MzRTdENDZCODk3MUJEQjQ1OAorOjEwNTU3MDAwODVDOTkzRDFDMDIzODdCREYwMzBCNDFENDU3RkM5NDQ5MAorOjEwNTU4MDAwNUJENkU0RDdGNjM2N0UwRUVERUM2NEQ4OTQwQzdDRDM3MworOjEwNTU5MDAwMkI0QzYyRTUwOTcxMDkzNjZCNkNEQzlBQUE4RTZBQzZERgorOjEwNTVBMDAwMDI3OUFCMTIyRjMyMzA2MDJDNzQ1NkEyMUY3MEYyMTdBMgorOjEwNTVCMDAwMzdGNjdDOERDRDZCQzI3Q0JGODZFREYyNkE1MjNEQ0Y1MworOjEwNTVDMDAwQjE3NkUzOTk5ODkzNThCQkIxQzdEN0FENDMzOUZCNEYzOAorOjEwNTVEMDAwNjgyN0EyMjBCNjZFNkE0NDNGNTYwQjBFNzEwOUMwQzNGRAorOjEwNTVFMDAwRTJBQTRBRjRCM0M5QzBFNTAyOTM3QUJBM0MwNkZEMzM5NQorOjEwNTVGMDAwNDBDRTk5QTFFNDAzRkIxM0NFRjkwN0RCMEQ4NUI3ODhGNAorOjEwNTYwMDAwMkRBRjY4REUyNEFGOTYwRjJGQUYzNkYyRkUyREY2MUZCQQorOjEwNTYxMDAwQ0E5QjA5ODNFMzUxRkI3MTc1OEEwNzhGNjMzM0JFMUZGMQorOjEwNTYyMDAwQjBFOUQyMEZDQkZFQUFFMzhDODdFNTAxRDQ0RjIyMkI0MQorOjEwNTYzMDAwNDQyRDhERjVBMTJCMTdGRDUwNjNENkNBRDA4RERGQ0IzRAorOjEwNTY0MDAwM0IxQjk5RjgxODExRUY0Q0VFRDU3MEJGNzE1MjU4RTYxQworOjEwNTY1MDAwODJGNzk3MjJGNzMzNERCQUVCOTgyMEEwREZENzYwMkE2NAorOjEwNTY2MDAwRkQ0QzJDRDdDRkNDNDZBN0RCNkRGQTFDMjhEN0FDMTY0NworOjEwNTY3MDAwOTIzNDVFNjJDOTU0OTQ2QkI1MjJEOUJERkZCNDYyNTZCMAorOjEwNTY4MDAwQUVCQkZERkJGNjM4ODNFQjBGQkEzQzE3Q0I3Q0ZERTVEOAorOjEwNTY5MDAwMTVBMjE5OThGMUE3QUZCRkZDMjFENzNGN0ZBM0UyRDk4QworOjEwNTZBMDAwNEYzRkVDQkFDODY4N0IxNDhDQkNGRTdGRUUzOENFQkE5NAorOjEwNTZCMDAwOURDRjFGNUMzRTRFQkFBQjNBODBGMkVGQkVDNEYwNzI5MworOjEwNTZDMDAwRTVGQzc1NUI0RUVCMzY2NjA1OThFOTJDNzIyNTIwMDlFMgorOjEwNTZEMDAwOUU3REQ1NzlBQTkwMDI4M0FEQjM3NDRDMjJGOTI2OERCNAorOjEwNTZFMDAwOURCQjcyMjcwQzNEQUUxNDUzMzJFQzM3QkIzRkNCREM3NQorOjEwNTZGMDAwNUZDMkQ2RkYxM0UwRkNGNUNBMjg4NzZBNTEwRUExNUM5MQorOjEwNTcwMDAwMkFGN0JERUVGNjhGMzA4QzBGOTYxOUVFREZGQUMyRkU0NworOjEwNTcxMDAwMDMyODhGMkMyNjhGRDA3RjlBRjlCRDE2Q0IyRTdBQjgwRQorOjEwNTcyMDAwNDJFMkZCRUZCRUVGRkVFMjAyODE4RDczQzRGMEVCN0UzRQorOjEwNTczMDAwRjZFQTkwRDBGQjA2Rjk3RDJCMjVEQThGMTEzRTc1MkUwNworOjEwNTc0MDAwQjYwNzUyNEU4RTk4OTI1OUNERUFGNzk2MEJCNDhGRkE1RgorOjEwNTc1MDAwRTFBNUVCRkU5MURBODcyOERFRDFCQkUwQjUyRjVGQ0E2OQorOjEwNTc2MDAwREE3RkUyMzIxRjcyMEVDNzA0QjY4RkIzN0ZBMjVFNzM3OAorOjEwNTc3MDAwQjZFRkNCOTdCMkZBODcyRUNCMUY1NkRGQUFDNUY5QkE4MAorOjEwNTc4MDAwRThFNEFBNjdCREU1NTU0ODZGMDhGRjdGQkM1OUZCMjBEOAorOjEwNTc5MDAwMUJFRjA4RTQyNEZDRjhBQ0UwRjAxRDQxRjg5MEVFRkJCMAorOjEwNTdBMDAwN0VGNTA2RUE4NTg3NEQ4MUZDNTE0NzJBN0UxNjQzN0JBQworOjEwNTdCMDAwQkNEMjE0NDg1RjVDQkE0MDQ4RkJCM0NDNzNFOTgyREJDRgorOjEwNTdDMDAwMjY0RjYyRkQyNThDOTAxNjYwREYwRjU1QkVCREY1NTI0OQorOjEwNTdEMDAwMDZFRjU1M0Y5MEI2RTFGM0Y0NUVBOTIwNTkzNjM0QkM4QworOjEwNTdFMDAwQ0VGQkFCNENFRkZCMDFCRDE4OTIxNkUyMUQzNDFFOTdBOQorOjEwNTdGMDAwRjBDNThDQjg5QjVFMDdGNDE4Mzk2MTY2RjNCN0FEOTVCOAorOjEwNTgwMDAwQjhGRjUxRDAwQ0QyRUZFNEIwMDIzODhGQTFFQURGMzRGOAorOjEwNTgxMDAwMDRGREU2NDA3RkI3ODQ3MDM4RkFGN0Q5QUI3NUI3M0MyMgorOjEwNTgyMDAwNzRFMDUwRTQ0NDEyQzc5MTM0MDU3NkExOUU5MTdCOERCQgorOjEwNTgzMDAwRUU5RTdGODNDNEUzNDI0MkRDMjQ3ODE0OERDM0EzQzg2OAorOjEwNTg0MDAwODY5OUNEREY1NDZGQzNFM0Y0MDNEMDY5QjdFRjg3QkUwOQorOjEwNTg1MDAwRjAyMDdDQUQ4MUM0NEFGNDVCNThCOURDN0ZEODEyRjFFQQorOjEwNTg2MDAwRkEwM0Y3RDhGRDNDRTZGNEU3ODNBQzcxMTU4MDI2RUEyRAorOjEwNTg3MDAwQkY2QTRDODU4QUZEMzc1NzcwM0Q0OTA3ODNGQ0UzMkQ4RAorOjEwNTg4MDAwQ0M2RTg0NjFGNEJBQURCNkJDRDg4Q0YxMEQzRkM2Mzk4QworOjEwNTg5MDAwMzQzQkNFMTFFN0ZBNTNGODE5RjI5MzlEMjkxM0M5QUVBMAorOjEwNThBMDAwMTlBQTlGODhFMUQ1NDc0MkE1NUUzQkM2RDE1RjAyN0ExRgorOjEwNThCMDAwNUU4NjFGQzhFQkY3RjE4RDkxNDU0N0VGNDM3QTFEMDlDRQorOjEwNThDMDAwRkUwMTNEQ0ZBRUQ3MkVBNzU0MkQyQjlFRDJDM0VBNzMzNworOjEwNThEMDAwN0YzREZDRjFGNjIxNUY5Nzk2MERBRUJGMTRERTFDQkEzQQorOjEwNThFMDAwQ0FFQzVGQzk1NzUyNjk4QURCMjVFMjFFN0RDMDk2OTNEOAorOjEwNThGMDAwNEFCRTlBQzI3RDAxRDRBMUJFMDc3OUZCMzBGQjhFRjE2RQorOjEwNTkwMDAwOEM3MDQyNDc3RjhBMDQzQzJFQTQyMjFGQjhGMEYzQjY2NQorOjEwNTkxMDAwRERFRUQzQjI2OEVCRjMyOThBODMwQTdBOEFGQzc2NkFEMQorOjEwNTkyMDAwMjFFMzFGRTFGQzc2Q0VCM0NGNkVERkZFODdEQjVGMjE4NAorOjEwNTkzMDAwRkUyODUwODkzRjA0OURGMTRGOTY3MTlBMjRGMzk0QzQzOAorOjEwNTk0MDAwOUVCNzRBRTY1QkY4RjRGRDUxNEE2NkUzOTNGRkIyRTU4MQorOjEwNTk1MDAwOEE1QTlCRDBENTYyOEEyQjkyM0Q5MjA5NDc0MEU2RkQzOAorOjEwNTk2MDAwREVFNEMwNkZBNTI4NEUzOTVBRjhERjFGMjVGQ0NFMzg3QgorOjEwNTk3MDAwMEM3RTU5MkUyMEY4N0RGODFDMEE3RUM5ODYyNzBGRjQ2QworOjEwNTk4MDAwNDYxOUU1OUFDRUU1MkJDMDMyRERBRDk3REMyODczNzk1OAorOjEwNTk5MDAwOTE2N0NCMjc4MERCRTI2RTdCRUI3QUJCOUZEMUNFMjc3MgorOjEwNTlBMDAwNEYxRUREN0M5QzcxRDk3QzI2Qzk3QzNEMjZDQkMzQUNDNworOjEwNTlCMDAwQzc0NDFCOEUxQjY1QkVERkE5RDUwOTNEQ0VENjI1NzcxMgorOjEwNTlDMDAwMDhCQTVBNjBDMzkxOTI0NTVCQUZCOEVENDNEMUQ1QzVEMworOjEwNTlEMDAwQTM5Q0M3ODJDMTc1OTk2N0FGNEJDNTcwRjM5ODZCQ0YxNQorOjEwNTlFMDAwQTM1MzgyRjlBRkEzNUUzQ0M1RjFGNzJDRjdBQ0NCMURGNgorOjEwNTlGMDAwMzY3RTNBRkRDRUJBNkNGMEFDQ0IyREY2QkM0NjNCOUY2MgorOjEwNUEwMDAwQzU3NjdGMjNDREU3OEVDMTc1NTk2NkNGNjdGOTcwRjNGMAorOjEwNUExMDAwNzFENUJGRDZBRUJGRDJBRTRGNzZDNzFENzI2OTEzREE0RAorOjEwNUEyMDAwMTk0RDUyNjI5NTVDMzAzODFFQUJGNzE5NzdCREI3OUJBNAorOjEwNUEzMDAwQ0YzNERBRjU2RUMwRjc0MjBEREZGRjU4QkRENUVFN0FGMAorOjEwNUE0MDAwNjA0NTlCRDAzRkQwOEFCNjAyQjM2MzRBNUEyRUE5QjJCMgorOjEwNUE1MDAwREJENTUxQkJEQTgxRkU2RkI2Rjk4M0RBMDU1QTg0MjZBRAorOjEwNUE2MDAwMkI0Q0Y1RDY2MUJEQzY0NTdGNzRFQURERUE4NUY3NjI0OQorOjEwNUE3MDAwMDdERTBEMDQ2RkY1MDAxQ0I3QkJFQjJEOTAyNzUwN0ZBMAorOjEwNUE4MDAwRTdDNTFENDZFOTBGRjJDNTkyMUQxOEU3Q0Y4MzQ4MjdFOQorOjEwNUE5MDAwRTY3OUI0QzlBOTQ3MzAwRkMwQjI2NDc4MENGMzA5RkNBOQorOjEwNUFBMDAwODY4MDNFQjY2ODQ1RUExQjU4MkZENzYyRjYzNUFFNUI1NgorOjEwNUFCMDAwNTVFQTI5MkM1QjIyMjQ5QUNCMjk5RjgwRjIwNUVBNjVCRQorOjEwNUFDMDAwNTVGMzFCOTg3RjYxQzAwRTU2RDY2MjcyMUFFREYzNTZERAorOjEwNUFEMDAwMjE2OUUxQkVGODUzMjlGOTY1OTlFNEFCQjZBQTExRkIzNworOjEwNUFFMDAwQ0ZEN0I5OUUwRTdEQjQ2RjM5NzBERDEzQkE4RUYyMUYxOQorOjEwNUFGMDAwNzIxOTVDRTg4RjZBQ0Q4MEVCRkVEMEE0MUVEQzZGRUZEQworOjEwNUIwMDAwMkQ1MDQ4NEY2NjA2NTYyOUNBOTczQkE1QTA4MUZERjU0MgorOjEwNUIxMDAwMTQ3QzlFRTBERERFQzhGMzFCQjY3RkUyRjMwNEVGN0Q2QworOjEwNUIyMDAwMDI1MERDRjYzRTFGQ0Y2RkI4QzdBNzZBNEQxQUY2MTdCMgorOjEwNUIzMDAwMURGNzU5Q0E4N0M4RDFGQ0U1MzYxQzA4REZERjE1MTNFRAorOjEwNUI0MDAwN0NGOUEwNTVERTI4OTBGOEVBNDFGQkI2QjU0MjIxN0RFQworOjEwNUI1MDAwNzk3QjZDNTYyNUY1NTdBMTkyOUU3QTVGNjI1NjIzRTlCMAorOjEwNUI2MDAwMUQxNTQxRjJEMUU3ODcwREIyNUJBM0YzMTRCMEIwMUM1MQorOjEwNUI3MDAwMzMxQTUxQ0Y4Q0NDMEQ2MjBFMENFNDE3MDIyNjE3NDA1RAorOjEwNUI4MDAwNjQxQUE0QjFFQzgzQ0VDRTEyRjY4Qzc2MzBCQjI0OUY3RgorOjEwNUI5MDAwRUMyNkI4MTFFRERFMEE4Njc3QjQyMzJDRjMyOERBMjUzQgorOjEwNUJBMDAwNjFCMEZGQTQ0MzI2Q0VEQjM3NDEwMkY0N0IzOEVCMUIwOAorOjEwNUJCMDAwRUQxQzY4M0ZBQ0REMTU0RDhGQjI1RUY3RThFQTQ1M0E2MworOjEwNUJDMDAwOThERDNGN0IxNEY1M0E0NzU5MkYzRENBN0FEREJDREU5QworOjEwNUJEMDAwODhGRTBFODNEQjdCMkFGQjBGRURCNjQwQTZERDFDRjZBQworOjEwNUJFMDAwREFDM0JFOENFRjk5RjFCOENDNjc2NjNDRTRBNEVDOERDNworOjEwNUJGMDAwODc4Q0Q0REU4OTgzOEMzNDVGNzQ0QTBDQzAyOThENUMxOQorOjEwNUMwMDAwREZEMTM3ODdGQUFFOENCRjI2NkVCMkY2QURFMzNFMUQwQworOjEwNUMxMDAwMjdCOTM2NkUxNTdGNEVCNERGNEY1QzY5OTczRjZEOTc5RAorOjEwNUMyMDAwNTdBRDM0QjNDOEY3QjEzRTJFODc0QkQxMUYzMjlDREYzRQorOjEwNUMzMDAwMDFCOEZFRjgwNjgzRkQ5QzgwQzk0QkMzRkI0RjMyRjVDQgorOjEwNUM0MDAwREU0Qzc5QTdDQTU2MTVGMkVCRjYwNEY3NkJGQTkxMTlGOAorOjEwNUM1MDAwOTEwRjBCODFGQ0IwM0U0ODc1OTZBMDlDMDAzM0JBNzgzQQorOjEwNUM2MDAwQ0MyMEZGRjhDQzE3NENFNEU3QzNFMzI0MTAyQTY4N0Q2RQorOjEwNUM3MDAwMENGMkE3NjdEMDQ5MjY1REY4MzNGQzM5N0YyRTlEN0M1NgorOjEwNUM4MDAwQ0NFNzhEQzdGRUE1RTg0NEU5OTA0NkM1M0Y0QUU3MjgyMgorOjEwNUM5MDAwRUJBNTQ3NTlBRjdCNzRGNUZDMURDMkU4RUE3NThFQjJERgorOjEwNUNBMDAwNUU3QTk0RjVCQTc5QkRCNkY5MEFERkNGRTE3QjRENjYyRAorOjEwNUNCMDAwMDk4M0ZCMTJENTUzNkVCQjI0RThGRDdFNjlEODUzNkU3MQorOjEwNUNDMDAwOUZBM0QwRkVFRjk0RkQ3MzU1NEZCOTlEQzk3OUNGRjdDRgorOjEwNUNEMDAwNzk2MTJBNkY2QUVEQUU2MjVCRDlBOEY5RTQzRkZGNDRBRgorOjEwNUNFMDAwM0UyOTU1NDdGMDRCNTc4ODE5NzY1QjA2NUZBOTdBMDAyNQorOjEwNUNGMDAwREJFN0NCM0E2MEZFNTQ3RThDRUY1M0VDNjlBNkIzRTA1MQorOjEwNUQwMDAwRjcxMTlCRkY3N0M5M0M3RjczQkJBQzA3RDA3RUZDNUI3MAorOjEwNUQxMDAwOUY2N0EzOEZDM0VCQ0M3NzI0NzgxREY5RkJBNjY0RUJCOAorOjEwNUQyMDAwNUI0M0U1N0Q1NEYzQkM0QzE5ODI5NDk3NTk1MjZENTZGMAorOjEwNUQzMDAwOTk0QzJFQzkyRkYyMzg1ODY2QkZENzI5QzlBNzdEMkU5NgorOjEwNUQ0MDAwN0I1OEQ2OTIzQ0JFNjdGN0I3QTQ0MDI2QkQ0NDY2NzIyNgorOjEwNUQ1MDAwMERGNTFFMDUxMjM1NDUxNDQ3MTRDOURGMjc4NzQ3RDhBRQorOjEwNUQ2MDAwMzcwQTVENzJBQjc4MThCOEVEM0M1NkZBQTQwMzU0RkVCRQorOjEwNUQ3MDAwOTY4RjFCMzQ4MEU0NkIwNEZBQzg5OENFNDFBRDY3MEE1NQorOjEwNUQ4MDAwRUE2OUJBMDBENERFMTBCOEZGN0M4MTg2RkI1RTJDRjA5NQorOjEwNUQ5MDAwOTdFRTc3MTVGNTJCOThGN0MwQjlEMDg3RTg1N0VFMjMyMworOjEwNURBMDAwN0ZFNzVGQkNERjExRTAwRDYwN0VFRkM1MTQ0Mjg4Qjk2QworOjEwNURCMDAwRjM3QjdERjExNEJEODRCM0U3Q0U0OTczODEzN0ExQkY3NgorOjEwNURDMDAwMjRDNUQ3NjVEMTIwN0YyODhDOEY5MjVERDYxQURCQTBBMQorOjEwNUREMDAwQkFEN0Y1RkY3Q0M1MUVCRjg5QTJCNUREMjY0NEQ5QjM2RAorOjEwNURFMDAwNzBBREQ5MzcwQzlEOUZDMzYwMENGQTQ3MEE2RjM0RkIyNgorOjEwNURGMDAwODZEOTRGMDdFMjk5MThBRkNGQzIwNzZENEEzMjhERkFBNAorOjEwNUUwMDAwQkIzNTI5Q0NFRDc5Mzk0NTdFQzY3NjIxNkZENkU2NzI1MQorOjEwNUUxMDAwMTdGRDE2MkFERDA4NTdBNERDQjREMERFNkJDRjE3MERCMgorOjEwNUUyMDAwRDQ1MzY1RDhEQTJCQ0M2MEVEQTQ1QTIzOTk0NThGMTg0QQorOjEwNUUzMDAwNkMyRjlGNzRDRjI3QTY3OEY1QTlFNjExRThCRDc1MDRFRAorOjEwNUU0MDAwQkRDN0E3MThDOTZDRkVEMDY5MEFCNzZCN0RDMUVDREY2RQorOjEwNUU1MDAwRUYxMkFCNEE5NDM5RTdFMzhEQTlGOURDQkVDRDg1MEU4QworOjEwNUU2MDAwRTE2MzlDN0MyOERGQTFGMDg1NTcxMDBGQUQwNTU3QzQ3NgorOjEwNUU3MDAwODc5QjJGNjhERUJDQ0I5QjQ0NzNBNjMyM0MxQzczQjI1RAorOjEwNUU4MDAwQzEzMURBN0MxMEFEREEyMDNBMUNEMDk3NjI5Q0FFNTE1OQorOjEwNUU5MDAwNEYxMkM2NjBCRTA3RkZEQjU2QkVBQjFCRjM0MDdDMzcxQworOjEwNUVBMDAwRjBCOEFDNjRFRTA2RjQ1MzNCN0E5MzY0MDY0Rjg4QjRDMgorOjEwNUVCMDAwOUUwQkI4RkU1NENBRjUyMTkzRkQ4N0YzODgyRTE4NUUxOQorOjEwNUVDMDAwQUY5NjMyQ0FDQjE0QUYzRUQ0RENCMDE3MzAzRUVGQzAzMQorOjEwNUVEMDAwRUZGOEYxMzJFNzc1ODk1ODc1NkQ3NjdDOENDRTFFQkU3MQorOjEwNUVFMDAwOEZEMTBCNENDMzc4OTQ4QTQ4ODFDRTA2OERDQTVGNkVFMQorOjEwNUVGMDAwODg1Mzc5NkI4MzRFQ0Y5Njg2NTI3QTZFQzFBNkYzOTEwMgorOjEwNUYwMDAwQ0Y1MzFENDUwQzZGMURGMTQ3RTM5RjY1NTVFRTQzRDlGNworOjEwNUYxMDAwNDFGQkZFNzU4QjUwNEZERTNDNTA2NjY2MjA4MzdCMzMyMQorOjEwNUYyMDAwMDZCQzk5MUU3MUJCNzJENTIyQjRERjM3MDdDMEY2MkJCMQorOjEwNUYzMDAwMkM1QTY0N0FDQUQ3MzQ1NzYyRDlGNjMzNkM2RUJCOUUzQQorOjEwNUY0MDAwRUFERjM3MTFFQzczMTBBNkZBNDlEN0JFRjc4OEUyMjNDRgorOjEwNUY1MDAwRkVDNkJEODVCNzM3OUJCMUJGODA2Qzk3RTFCNjQ1REUwNQorOjEwNUY2MDAwMzI5ODA4NEY0MEU1RTVGRENBMDZFQTlGNDQwMDFCRUY2MgorOjEwNUY3MDAwMjdDQUVEN0NCQ0E5REM4RjBGNjVDQjQ3QzAyM0Y3RUJBQworOjEwNUY4MDAwODNBMjczRjk1OTk2NDdGOTJDOEE2MUEwRkIxNUVFQ0JEMQorOjEwNUY5MDAwQjVFMTFFNkQzRjcyOTJFRjc3QzdCMkVGOTc4MzdDMzMwNgorOjEwNUZBMDAwQzJCRTY2QzMzMUQyRkEzMzc0RDg3RTg4MjQ1ODM4RUUyNAorOjEwNUZCMDAwQ0Y3OTFDRjFBRjNERUU3REJFMEY4NzE3QTVBMkRGQzJFMgorOjEwNUZDMDAwRjMyMzBCOTRFNEY3OTFERTIzNjY1Nzc3MTEyQjQ3NkI4RAorOjEwNUZEMDAwQkIyRDYyREY1MThFN0JBRkEyRDlGMzRFMTJGRjNCNzgwRgorOjEwNUZFMDAwNzZGNDhFRkZGMjc5RDdEMTE3MzMyOTBGMjkxMEU2RkMwQQorOjEwNUZGMDAwMzc1QTc4RkI1MEJGOUEzM0Q4MEYzQzUxMzU2RTM4N0RGNQorOjEwNjAwMDAwQUQyMDIxQTIxMjM2MjAyRkYyNkI4MjY4OEMwRDk0NzM4MgorOjEwNjAxMDAwQ0QzQzRGMzlBNzYyQkNBNzdFQzQyOEY2N0NGNzY5MTczMAorOjEwNjAyMDAwNzlCRUZGQTlFQkY0RjM4Qzc5RkNCQkFEMzczQUU1MUZFMQorOjEwNjAzMDAwNjdDRTczOTRGRDNBRTU5RUJFNDU2MjI5NUI4Nzk3NkJGOAorOjEwNjA0MDAwMjVEMkVGNUVBRTdERURCRUQ5NTg0RTQ4MTRCRjNEQjNBQworOjEwNjA1MDAwQjJEOTg3OEM3NDBDQ0NDODFDRjQ4NzI1MjVEQjlGNkVDNQorOjEwNjA2MDAwNEU0NDdDRkUxQ0ZGQzlDNjdCMDlGNzNEMjY5RjhFRDg5NworOjEwNjA3MDAwRTc3Rjk4OUM5ODg4RTc5RjhFNUMzNjZGMjJBRUVCMTE4NQorOjEwNjA4MDAwMUZFNzZGQjAzQTQ5M0VGRENDMDcxRTc5RjAzMzVCRkU0NworOjEwNjA5MDAwMThFRDNCOUFEMTBGNzk0Q0UwNjVBOTdEQzcyMjhCRTJDMAorOjEwNjBBMDAwODM1QkRCM0VDRUY0OTZBQjM5MEE2MTc5QUQ5MEQ1MUVBOQorOjEwNjBCMDAwODhGODE1QzJDNzA3NDIzMkUyNjdGMzM0QUJGNUQ2MTg0OQorOjEwNjBDMDAwRTZCRkU5NDBGQUFBMUYxMkE0OTdENTgzNTUyOUEyQkVCQworOjEwNjBEMDAwQzNFODhGRTJEQzcyN0Y2MTM2QkRFMzY3RjY3RUVFODc1MAorOjEwNjBFMDAwQUI0OURGNUY1RTlCRUI0MzYzREU1RjMzRDM4NzdFRDREOAorOjEwNjBGMDAwQUI2QjJBN0Q2MEVCQ0I5QTBCM0UzMTIxRDBGOUE5MTUxMQorOjEwNjEwMDAwQjVGRTVEODhENzE1QjJFOUNCMTZEN0JBM0FFMUY3RUMwMAorOjEwNjExMDAwNTMzMzE5MEUxMUZFNjNGNkI5MDc4MEZFNDI3N0JDNjk0RQorOjEwNjEyMDAwQTY5RkRCM0JGMTkyRTFFRDA1MDc2RUE3QkNBQzc2RTZERQorOjEwNjEzMDAwRjM4ODA3ODY2RDNBOEYwMjZBN0ZFMTc1MTE3N0JGMjE3OAorOjEwNjE0MDAwMjcyRTFDQzE3RTVGNUVGOTBGN0M3RjY2NzQ4MTdFQzU0MQorOjEwNjE1MDAwMTc0RjdDQ0U0NzcxRDkxNUY5MUVGRTVCNUUyRDc5RTA5NQorOjEwNjE2MDAwNEYyQzA4NzlDQUQ3RDQ1RTlEMzNBQ0ZFOTFGNDY3QzgzMgorOjEwNjE3MDAwMzNDQjNFODcyOTkyMUNERTdDNUMyMEY5OTAzM0E5M0YwQgorOjEwNjE4MDAwOEQ3OTlBRjBCMjA0NUNGRjczRkNBRjk3OTBGRjM1M0FCQgorOjEwNjE5MDAwQTE1RjQ3N0QwMTdFMTNEMjFFNzNDOUNGMTY5QjJFODc0OAorOjEwNjFBMDAwMUFGRjM5M0ZENzZCRTVCQzFBOEE2RkJGNzc0MkQwNzFBRgorOjEwNjFCMDAwQkU0MjVFRkQzNDlDQUZBQzk4NEQzODZFNEI5MTk4QzY5NAorOjEwNjFDMDAwQjhGNzlEQzVEQjU1NUNFRjREMjUxRjRFMEZGNEM1NzgyNAorOjEwNjFEMDAwQkM1RkI3QjQ1OUM4RkU0M0I1NEI5QkZDMUM0MUU2RkIwMgorOjEwNjFFMDAwQjU3RTFFNkY2OUI1OTY2QjI1Qjg4QzA3QjQ0QTlDN0Y0NworOjEwNjFGMDAwQTAxMEIyOUUzMzY1RjRCRkQ2OEY3RUZCOTgwNTNDQkVERgorOjEwNjIwMDAwOUUyMEJEQkE0NDVENEQ3OUI4RjJGOEUxRTNCNTk5NzhDNgorOjEwNjIxMDAwOTNFRDM4NjA2NkJEMjc2RDdBMkNBOUQ4NDVGREJFNzcxMQorOjEwNjIyMDAwRTFGMEZEM0E3ODc5REYxMEExRDdENjI3QjBCRTBBNkMyRAorOjEwNjIzMDAwM0UwQ0ZGNUI0QTc5MUU2RTRCRDkzMzg0NjdDOUFDMjQ5MAorOjEwNjI0MDAwN0RENkE3QTU0Q0FDQjdBNTZDMzVEMTY1MkJBQjkzQ0Y0QworOjEwNjI1MDAwODZDRUFERUVBMjczOUE1QkZFQzBFMzEzNEZCNjFGNjgwNQorOjEwNjI2MDAwNDZGRDYxNEJDRkNEODA3OTk1QzE3ODFBNTA3RTZDOTlFRgorOjEwNjI3MDAwN0U5MzhBNzhEOEIyMTNBMDE3RTk1OEVFMjJBNzVDQzg5QgorOjEwNjI4MDAwRjY4Nzg3MzQ0ODMzNEIwQTQyNjUyNkEwNUNDOEQzRjhBQQorOjEwNjI5MDAwOTlDQTdERjEyQUMwNzVEQjUyMEUwNkIyNjY3RTNBRDVFOAorOjEwNjJBMDAwODhBMTlGMkQ3MTFFRkYwRTk2OUEzNTQ1MDhGNzM4OTFFQgorOjEwNjJCMDAwQzQ4MDBFQzkwRTJDQjdENENBMzQ4RjM2OERFMzAzRUREQgorOjEwNjJDMDAwQUU3MzRFN0UxN0U2QzE5NDcwQkJBQjA0RkRGQkFDN0Y5MgorOjEwNjJEMDAwRTU4QjdDREVGQThFMTJGMjEzNkRDOTdERDk0NDdERDczMQorOjEwNjJFMDAwRkEwNDE4NTM4MUVCQjVBNDI3Qzg4QzhFQjBGRjdBMkQyMQorOjEwNjJGMDAwRUJCQTZGMTU5M0RGRjJCQkUyRjdCMkE2MEI0OEE3OTk5MgorOjEwNjMwMDAwRjg3OUNGMDc1N0UyQkM1QjY2OEFCMDJCOEJCRUIxRDc1QQorOjEwNjMxMDAwQ0ZFMzc1Njk2M0Y5NTVDNTU5QzY3OUNFQUY3QkYyMDRGMQorOjEwNjMyMDAwRjRGNzE1ODI3QkE4RkE4M0Y1NjRGMkVCQTNFMUIxODQ1QworOjEwNjMzMDAwQ0RBM0EwODZGQjRCMjFFMzFDNkIwQzkyNjRERjhFMDU4MgorOjEwNjM0MDAwQUIxMUY5RDEzOUJGM0FBMTNBRjFDQjI0N0I0QTkxMTU2RgorOjEwNjM1MDAwOTQ0RjM3RDQ3OTU2MjdDRjczNzU4NTJEOTA0MUJGRjY2QQorOjEwNjM2MDAwRDc2Q0JFMzcxRkY0MDFFMkVERjJCMzhGQkM4MEY5NTI1NworOjEwNjM3MDAwQkUwQUJGNDZGOTU1RDBGOTAyRTY2RkRFQzhENDMxMkMwQgorOjEwNjM4MDAwREY3QzdDQkE4MkY5M0YyRjhGOTczMDM3MDZGOTI3OEE1NgorOjEwNjM5MDAwNzRGODE2ODg5NDdGRjYxNjFDOERDRTc2RDFGOTI5N0I3OQorOjEwNjNBMDAwREY0MUM5OEE3MkE0Mzk5N0NGNEIwRUI3RjU0QTUxNUNDOQorOjEwNjNCMDAwNzdEOUVBNzNGMkY3NDg2MUUyNzlFRDEwNjZFRjU1Q0FEMgorOjEwNjNDMDAwM0U2QTI0RjlEN0MxRjM4NTlDRkNDOENGNzY3QUYzODc1RgorOjEwNjNEMDAwM0VCN0MzNUJCRTA5OTY4RjQxQkVCOTg5Mjk3NDY5RDZBMQorOjEwNjNFMDAwRUZDREVFQkMyRjM2RkUzMTNGRDcwRjNFMDdBOTM2REM4RQorOjEwNjNGMDAwN0ZEQUVERkM5ODc1REY5RkFFMjA1RERGM0M1QjJCQzI0MgorOjEwNjQwMDAwNzMxOENFM0M3RUVGRTc3NkU4NDlDNkE3QkE4QkZGRDc3NAorOjEwNjQxMDAwQzREMjk0OUY5QzM5QkZCN0Y2MkNFQTRFQjJGMjZCQkE0NQorOjEwNjQyMDAwOUNFMjc2QjY3NzlFRURCRURFQTU5OEVGNjU2REYzRDk1QQorOjEwNjQzMDAwN0E4MzM3Q0Y3MUNERUU0QTEzRjNDNTE4RjZGNDdDNkYyQgorOjEwNjQ0MDAwN0I4MkZGMUYzQUJDRjMxRDA5MUY5OUYzNzdGNEMxQTFBQQorOjEwNjQ1MDAwRTZBM0VDMTZCMkU2RkI4NTU0NkZCRTU0QjNDQUUzOERENworOjEwNjQ2MDAwNjZCMzBDODE4NUU3OUY4RkI2QUE1Mjc0QkVEOTZBRjJEMworOjEwNjQ3MDAwNkJDRDMxOEE0RjUyRkNBRjlFMTEwRUM2RjdDQTU1OURBNworOjEwNjQ4MDAwRkE3OTJGMzAyOTBENzQwRTIxMzUwRkY1QTMzRkI3REZCMAorOjEwNjQ5MDAwRjkyQUU3QzNCRjc0QkYwQjg3ODA3NzlEREFBNzIwN0ZGNworOjEwNjRBMDAwQUU5NzNCNkI4NEUyQzFGMzAxMDE5RjY1NEU2MEY4RjY0NQorOjEwNjRCMDAwRUY1REQ2M0QwMTNDRjUzQTQ2NTlFRjIwMUU4MTFFNDU2MQorOjEwNjRDMDAwQkQxQTcxOThGRTRFREJGQkQ2QkYzREYxMkYwQUVFREYwMQorOjEwNjREMDAwNkYzRDdFNjIyOUNBQjk1QkZFNTUwMjk1RDUzQkZENDRFRQorOjEwNjRFMDAwMDRCQTY5REY0OTJCMjg5N0Q3RUM5MTY4RkQ0MUVFOUVFRAorOjEwNjRGMDAwN0JCNTI3REZCRTk5RTY3RkNCNTMxMURBMUZENjNDRTM4RAorOjEwNjUwMDAwNEZEN0IyRjY2QkJFRjdEQTBDNjA3QzdCQkFBOUZGODU3OQorOjEwNjUxMDAwMDk4OEJGQzcwNTlFQzc2MEY1Q0RCODlBQkQ1RjIzQzM4NAorOjEwNjUyMDAwRjVEOUYyMTA2RTUwMzk1RjlERkE0MTY4MjVFRUVGQzI0MQorOjEwNjUzMDAwRUU5RUVCQThERkFFNkI3RDdFOTdGQzVEQTk3MjdCOUEyOQorOjEwNjU0MDAwRDUzM0YxQkJGNTREMjEzRDU1RTBGMDY1Q0JDQjNCRjVBNworOjEwNjU1MDAwNERFRTQ3NTlCM0Q3OTdDNjNDQzUzNUJCNzcyQTQ5NTY0OAorOjEwNjU2MDAwNkZGREVFQjc4OUJFMTczREY1NjQxNEYxQjA3RUFGRjc0RAorOjEwNjU3MDAwM0NDMjJENEZGREExRUQ5MjcyM0FFRkQ0NUY4QkYyNEZFQQorOjEwNjU4MDAwM0E0QkU1MzNBNkRBQ0ZGM0UwQjkzRkU2NTZFMjU4NTY4OAorOjEwNjU5MDAwRUYzQjZGNUVGMTZCRjZGRDY0NUM4MjAwMTMyOTI3N0I5NQorOjEwNjVBMDAwRkY1M0Y5NTcyQzI3QzMyOTI2Q0E1OEZGQkU1N0REN0M1NQorOjEwNjVCMDAwQjg3RUY3NkI3NEVFNDgxMzk5MDI3QjI5OUU4N0M4Rjg2MgorOjEwNjVDMDAwOUU1MTlGRTlCOTBBQ0FDM0Y1NUQ5QkRFNDY3OUI5N0U0MworOjEwNjVEMDAwQ0Y1QkJGNDJCQTVCMEZGMkFCNkU3RTNFODlGRjE4Nzc4RQorOjEwNjVFMDAwN0UzQzZCOTNFQUY1RDM5RDgxNDM3M0M5MDFCMDNCM0Y3OQorOjEwNjVGMDAwQUJCREU4QzRCMzFDRkVCRUU1QzkzMzBGQTMxRTcxRUFGMAorOjEwNjYwMDAwOTlGRjdBMThFRjY3NThGQkM3RkY3OTE4RjM1QUUxNDdFQgorOjEwNjYxMDAwMDEwREU1RDZGQUM3N0YxRTA1MTdGRTFGQjVFNUMzRTlENAorOjEwNjYyMDAwNkY3RUUzRUIwRjMwM0M5Q0ZFQTU5RkIwNzZGQUI5Mzc0NgorOjEwNjYzMDAwMjdFMTNEMURBNzlGRkVERjMxQTg3RjZDN0M2RUYxNThERQorOjEwNjY0MDAwQTRCMzhEREY1RDM0NzZCODczQTA0OEI3NjlCRjdCN0Q5NgorOjEwNjY1MDAwRDNGQzdFODNCRDAyNkU4MjAwQ0ZEQUNGOEM3NTgxNDM3RQorOjEwNjY2MDAwRkQwQUVBQkRFRjBBRDBCRjM5OTdCREVGRkE4MzgyRkE3RgorOjEwNjY3MDAwQ0IwQjI2RjQyMzlFRjZFRjc5RUQ4NUJCNThGOTJEQjZBQQorOjEwNjY4MDAwNEVGRTJDRUJDNEU2M0Y0MUE0RkQ4REIxMEY3QkRFQkE3QworOjEwNjY5MDAwRTdFQUFCMkUyQkM3QTdDRkMwRUVENzQzM0ZFRDFCRTdGMgorOjEwNjZBMDAwQURFRjMxQjZCRUU1ODNFQjlCRjlGRDBDOUM1NTEwRkZCOQorOjEwNjZCMDAwRUI5RjYwRUIzOTAzRDc5NUFERTc4Q0YzRDdGMzJERkM1NworOjEwNjZDMDAwQzdGQ0YzRDc3M0JGRUFGNUM3OUQ4MUI1OEYzQzgwMUYyOAorOjEwNjZEMDAwRjdFNDY3QjU2RjlERjU1Q0Y3REQ0RjBFQUI5NzNCRjJDNgorOjEwNjZFMDAwNjEyNDNDRDNGOTVFMDZENzU3NTRGMzY3MkFGMkVEMzNBMQorOjEwNjZGMDAwREZGQUZBMDMzMUJFQ0VCNTBDMzFBNzlGM0MzMzA5MEY0OAorOjEwNjcwMDAwNkJGQ0Q2RDc3RjFERTJBMUZGMzlCRjg2N0FENDlBRTcwQQorOjEwNjcxMDAwN0U0MTdDNzdGQUJCMkZEMUI5MUVGNjE3MTVEODdFNzc0QworOjEwNjcyMDAwMUEwNkZFOEUwMjJCREYyQUYwQzIzQUJERkY4QTVGQjE0NQorOjEwNjczMDAwN0VEN0IxMkUyQzgzRDZFRjhBNUY5NUUzRkFBOUZEQjRGQworOjEwNjc0MDAwMUVFOTY1MzUzQUNBREY3NDAxQ0RGQkQ2MzRFNzhGNUJBRAorOjEwNjc1MDAwRDMzRDJCRDA5RjlEODlGNzQ4QzBDOTI3MUM1QzU3RjRCNworOjEwNjc2MDAwOTdERUJBRTdDNDE1NDg3RjQzQURBNzMzN0YwREU3M0ZGNworOjEwNjc3MDAwOEY3RDdGRDRDQkJGNDNGMkFCQkRCRUE3NzdCRUE3QTBCMgorOjEwNjc4MDAwN0VENUZEQUY4QTI2MzIzQkZGQjRBRjVGMTk4RkZCQ0RCQworOjEwNjc5MDAwRDM5Mjg2RTc4RDMzRDc3RDEwRkY0RDU5Q0YxRDY3M0VDRAorOjEwNjdBMDAwMzNFOUMzMUZDODFFQkY3NkYwMzQxMkJGOEYzQ0JGMEY0MgorOjEwNjdCMDAwODdCRjMzRjYzRTlDODlDNzUzNjdCM0VGMDc1MzAyRENBQworOjEwNjdDMDAwOUVCQjE1M0E2QjUwQzVDQ0RDQ0Y3QzkwQjIyNjE0MEQyNQorOjEwNjdEMDAwQzJEQkQ2MjU5MTlDM0ZCNTlCRkI2OTMyRTVDNUFENDMzNQorOjEwNjdFMDAwRDg2NzMzOUQ3MUY2RjZDQzQwQjk3NjZBREYwRjZDQkE4NAorOjEwNjdGMDAwRTQ3NDdGRUIxMzI3MTRDQkRFMUZEMjJFRkNBRTFGQzIzNgorOjEwNjgwMDAwREY3REE5RERERkZBNjdCM0Y3QjdGRTg5QjdCM0Y2NzdBNworOjEwNjgxMDAwNTIzNkFGNDVGODRGRjZGQTI4MkZFOTY0OTc5NEQ1Q0U1MworOjEwNjgyMDAwOUQxQUYwNzlGNEFFQjZDOERDNTc3MjU4M0IyOTFBQTQwOQorOjEwNjgzMDAwQkNBQkU2MjZGMzE3RTgyN0I1OEVGQTZDM0Y4MEYxNUIxOAorOjEwNjg0MDAwQ0NCNzZBOEUwNEU5OUM3QjczRjQyNkJBMkZDOUU5QUZGMgorOjEwNjg1MDAwMjUwMzRGNzIzQzQxRjY5MzFDNEI5NEYzMTg1OERBNjNBRQorOjEwNjg2MDAwQzdGODE4NDFCOEUxMDZEOTJBNDRCREZGNzBEMTlCMzI2MAorOjEwNjg3MDAwRjY3QjA0RjU0ODk3NUQ3RjQ0ODZENkZDNzIzQzE3MjE3MQorOjEwNjg4MDAwMTg4RDkwQzVCRjkxRDE3RjYyODEwNEJBREI0RkQ4M0Q4RQorOjEwNjg5MDAwNEVGQzNENkJFRjNGMjZBNTExQjVGNTkwRUFBNjczMDFCRQorOjEwNjhBMDAwODVEMEY1NTg5NkZFMUU2QUQwQzk3RTJFNEE1QzRGRkVGMgorOjEwNjhCMDAwMUY3RjJBNjVBMkJFNTZCODUxMkIxNkY1QTFDNzlEOTgxOQorOjEwNjhDMDAwRjJDNkFGQzczM0NBRkYzRDhFNzNEMDQ3RkEyMEVDN0VDNQorOjEwNjhEMDAwRkNGMUM3QzdGMDJEMDVGNUYyMTdGMEM5RTRERkU1NzU0NworOjEwNjhFMDAwN0EyMTk2MUZCMkU3Q0Q3ODgwQ0UzMTRFQjQxMjMyQ0FFQgorOjEwNjhGMDAwMzkyMUI2NEM0NkZENjI3MTJBMjFBRjc2QURFN0UyOThBOAorOjEwNjkwMDAwMzAxRUY3RDNGNDEwRjc0MDdEM0ZDMEY3Q0ZDNkM2NkJGQgorOjEwNjkxMDAwMjg4RkZEQzEyRjhBNDRENzBGMDYzRTVFODg3Qzc2MjBFMworOjEwNjkyMDAwNzc1RTE4RkQ2QjNERUJFNjFFOUFDNkUwOUMxMDk2MDA2NAorOjEwNjkzMDAwNERDRUZERTFFMUNGNkQzRTZDRkIxNzc2RDlGNzBGM0RGMworOjEwNjk0MDAwNkFFNzk3N0ZEREM2REJFRTg2NTI3QTNFREU2MEQwRjdERgorOjEwNjk1MDAwMjcxQTJBQThEQ0Q1NTA0M0NGNjcxQTEyRjQzRTdBNTc3QgorOjEwNjk2MDAwMzA4OUY0QjlBNzYxMjVCRDlGMDA2RjBCQjhGRURGNkJCRQorOjEwNjk3MDAwNDg1MkY5RDE0MDJFQzEzRkY5NkUxMDkzRUNGRDYyQzQyQworOjEwNjk4MDAwNDc3ODcwREUwRTNDNjlEQkVFRkU3RUUwQzcyREM4MTc0RgorOjEwNjk5MDAwMDM3OENDQzBGN0U1RDAyQkE4RThCRjhBMDkzQUFFN0JENAorOjEwNjlBMDAwN0Q0MEU3NzlBRTE5Rjg5REU0RUYxNzMwMkU1NzdGMzcxOQorOjEwNjlCMDAwQ0Y4Nzc4NThGMDlFNzdCOERGOTZGRkRGQjFGOUY0REQyNgorOjEwNjlDMDAwNjhGMkM5MDA3QkJFNTNCM0EyOTRGNDIxRDBDQTkwNkU4MgorOjEwNjlEMDAwMUUxNjEyNDc4QzIyQzJCM0U3RENDOUZBQkNFNDc3MDI2OAorOjEwNjlFMDAwMkVGRkYwQTQwRTZFRDdFRjA4RDhGMjZEMjM4ODQ4NkYwMworOjEwNjlGMDAwMTM1M0EwMjNCRDM5RjNERTU3QTkxN0EyNUNEQzI3MDg4NworOjEwNkEwMDAwQjRERTQ4NkZBNTJFN0ExQkEwREY4MDlEOTcxQ0NGQkVGOQorOjEwNkExMDAwOEYwRkQyMkZFN0ZGRjgyNUE1Rjc1NDIzNUUzNjg4RTRDMQorOjEwNkEyMDAwMDc2OUM2NEZBRTc2MUZEODc0QzRFQzE2RDE0MjdBQUU1MQorOjEwNkEzMDAwMTNDOTlGM0JGOUY4MDk2MTEyODM0RkQ3QkUxNUMwN0I3QworOjEwNkE0MDAwQkJFMjkzQzBGNjM3NzUwNTkwQkUxRUFDRTNGRUM1QUY0MgorOjEwNkE1MDAwMURFN0U3OThDRTZDMkM1RTM2OERENTVGQ0FGMDgzQzFGQQorOjEwNkE2MDAwQThCQzI1MjUxRUJGQTU3MzdFRTE2QjZBMjI0NzFCQzYwNQorOjEwNkE3MDAwQkY5NTk5Rjc3NkZGRTQyRkJEOUZDM0M2OTk3MDNDQTREQworOjEwNkE4MDAwRTM3OTk4N0IyNkZGQTg0NzYxRTVGMTdEMDJGOTkzQzY3QgorOjEwNkE5MDAwODc1M0QzNzAzRDJCRkZERjM3QzdGNUI5RDZFMTgxNzUzQQorOjEwNkFBMDAwQTlDOUE4MzdCNjRERkVCNjgwN0MzMEZFRUM4RjA1REM1OAorOjEwNkFCMDAwNDc0QUI0RTQ5QkI4M0UxMzY0RkI5Q0IwOUM5QTg3NzYyQgorOjEwNkFDMDAwQzFGNTc5ODlERkUxRkI0NDYxRkE1MzQ4NEY2NzZBMzZDMworOjEwNkFEMDAwRkUxQkY2RUZDNDIxRUJFQkY1REM2OTJFRjk5MDc5OUVGNQorOjEwNkFFMDAwRTJBMUQ0RjBGRTRDNjdGRTBGRTFGQzg3QTlFN0NDREYwMgorOjEwNkFGMDAwNTlCRjMzMzVCMUI1MjgxNzMzRjE5OUQ5NkZERTkyMTVFNworOjEwNkIwMDAwQzM4RUZGOTA3RDhGMTg5QkJGM0ZFODkyNkI4NUE5M0U5NworOjEwNkIxMDAwMTlEQjM5RUQ4NzhBQkI2NkNFNzdDMDRGMzRDQTM4NkQzMgorOjEwNkIyMDAwOTcwRkYyOTEyRTlFRkVCRjQ5REYzOTAyNDgzQTA5MDlCQworOjEwNkIzMDAwRkQ1M0ZCMDJDOTcxMDhDRjVDNDg1MTk5NDk0N0NBNjdBOAorOjEwNkI0MDAwMzc3MjM5RkYzRTMwRTZFQkUzODhFRkU0NzQxMUU1N0QwMAorOjEwNkI1MDAwOEM3MkJDNTY0ODI0MkE3MTlGMzM0NDIzREIzRTMwM0Q1RgorOjEwNkI2MDAwQzhFOTdFMDFBNEM4M0YyQTg2RUUxRTNFQ0U1RkU4OERBRQorOjEwNkI3MDAwRjM2RjA1OUEwNDU4RERBQTFERkYwMDU5NDM3RkQ4NDFFMQorOjEwNkI4MDAwOTg4NTdFQzhGQzIwRTdGNzRBOTlEQjk3QjMwRkVBM0I2QworOjEwNkI5MDAwMjVFRUI3OTI5NjQ1NUNGOEIzRkQ3NjNFREUzNTgzRkI3NQorOjEwNkJBMDAwNkVEMDc0M0NGNzM1QjM0NzcwRjFFQjdCQTFFNEMyMjBBMworOjEwNkJCMDAwQUJBRkM0QjkzRkQyMTc0QkQyNzlDQkM1NTI1ODI0N0Y2MworOjEwNkJDMDAwNkUyNzk3RkZGNTkwNTAyRkU0NzExOUMwNzlFQjEwMTdERAorOjEwNkJEMDAwNzFCRjdGNjgyMzNGREZBRTZCMjE4MkZCQTE5ODRFRTUzQQorOjEwNkJFMDAwN0E1QjRGRjlCMTRENDczRkIwRTVGRUY3NkQ3QUY5MkU2QworOjEwNkJGMDAwQ0E3REE0OUIzRUYzNDAwRTgzRUIzQkI2RkM3RkRBOTY0NgorOjEwNkMwMDAwRkY0RkQ5RjI3RkNFQjEzRUY4NjYzOUM5NjMwM0YzOUVEOAorOjEwNkMxMDAwQkZCQzNEREU4NEQzN0NCMkMxQTQ3QUJCMUFFQUU4QjkxQQorOjEwNkMyMDAwM0Y3N0FDQjg5N0Q1N0I3NEEzQjgwQkY5Rjk1MTZERUNFRAorOjEwNkMzMDAwOTU3OERGNTVEQTE0MEQ4MTM1N0VDOERBQkUyOENBRTBCMgorOjEwNkM0MDAwREZBOTBBMTQzRjdCQjgyMTQ1RUQ3NkFBN0E5MzhBRjEzMQorOjEwNkM1MDAwMTQ2NjJENUI0ODA2RjVCRDE0RjZBOEZDNkRCRjU2QzMzRgorOjEwNkM2MDAwRUE3REFEMzNFRjRBOENDM0RENUIyMzUzM0I4NzhGRjQ2MgorOjEwNkM3MDAwMzkxQkIwMzk0NEYzRkM0MTY0QUJCQzgyNkU3NTBBREE0RgorOjEwNkM4MDAwRTkxQjQ1RUFFNzJCODFDRkE4OEJEODczRTJDNEEzRUFCRQorOjEwNkM5MDAwQzc3NTVDOEMxMzY2OEE3RDVGQzQ5MDhDRjNBOEU4RUJBMworOjEwNkNBMDAwQjNCMDVDRjI3QTk4RjJCNUU3QkVEMjA3NEZCMzcyNTEzNworOjEwNkNCMDAwNUQ4NENBMTMyRDJGNUY0Q0RGRDM2Nzc1MzIzODI2OUU1MworOjEwNkNDMDAwRTJERkFCRjM3RTY3NzVCMUZBMzkxQkEyRDQ1RkQ1RUI3NworOjEwNkNEMDAwN0QwMkQyQjNBRkRDN0JGRTZBODdFRjk3RkIyMzZDRkNBRgorOjEwNkNFMDAwRDhBMTg0ODA3OERCMjc2ODhCMzAyNUM0RkExNDNGN0ZENQorOjEwNkNGMDAwMzNGNjIwNTRFMUZCNzg3NDA5QURDM0Y2NjAxMUQxQ0ZBRgorOjEwNkQwMDAwRDc1QThFQzY2RjQ2M0M2RDhDQjVBMDk5QjM3RkUzMDYwQgorOjEwNkQxMDAwM0E5RkUwREZCODkxRUI0MTI5RUVGRjlFNzhDNzAxRTE5MQorOjEwNkQyMDAwNzMyRUY5NTBEODIyNjdGNURCNkQwRkZBNzk5QzY0RTM3NgorOjEwNkQzMDAwOEFDNDM0MEVERTgxMzBFQTdCMjVEQzVGNTlENDVBRURGQgorOjEwNkQ0MDAwQzk2QjcyRTIyMzFGMDhDOUVENDFCMjlCNzg5QzQ0RDZGRgorOjEwNkQ1MDAwNTJGNEZFMzIwOTc1NDVGNkZBNEU5MUVCNDk4OURFODAxMAorOjEwNkQ2MDAwREIwRkEzREZDMUVGNjdDQjg0NjM1NzUwMjYzODVBQUNFMworOjEwNkQ3MDAwRUEzQTk0MTdEQkU2Mjg3MjAwRTE5ODY2REZDRjYyQzczMworOjEwNkQ4MDAwMjEwN0Y2MzEyMUI5Q0IyREQ3NjQ4REMzMzU5MUExMzJCRQorOjEwNkQ5MDAwODQ3MDc3Rjc3RUFBOEJGNUYzN0VDQUQ5QzdDQzIwRTkzOQorOjEwNkRBMDAwNDlGNzg4QzQxRjVCQ0JGOTM5QzBGREM2M0JERDc4Q0ZGRQorOjEwNkRCMDAwODVDMzRGQUQ4NjQ4RkNCQjVEMTZEMjAyRUI2NzdCNzk3RAorOjEwNkRDMDAwNzFFRTg1NDgzRjMxRENCRDY5QkUyQUUyQjk0NEY2RjE3NworOjEwNkREMDAwMUMwRTMwRjdBMTVGREM4RjdFNzFCNkRFMjVDNzQzMjcxRQorOjEwNkRFMDAwNDRGMkZGNzlGM0JGOEIyQ0VGRkE4QkY1REU3Mzc3MTM0OAorOjEwNkRGMDAwOTlEMkUzQ0U1NzA2NDYzNDAzNzQ0NkZCNkJGNUJFRkZDQgorOjEwNkUwMDAwNDA3RTU4MTkyMjNBMDNDQjhDNTY4RUMxRjQ0NUZCNEY3NQorOjEwNkUxMDAwQUFBNUYzQ0YyNTE5RTcwQzFFQjBFREY3ODdFRDczODQxMworOjEwNkUyMDAwNzBGNjM2NDBCOUY1ODA3REZFRkE4MUI1NjI1MDY3NzgxQworOjEwNkUzMDAwNzlERTNBNEFGQkU2QzRGQUVFNEEwQUNDNjg3RTRGN0UxNworOjEwNkU0MDAwQjVGRjZFQUQwOUY3RDdBMjk0Mzc0RkE4MzIyMzJGQTgwQworOjEwNkU1MDAwRTRDRkNDQjMzRTFFRjREQUE5RkI0RTA2MERCQzBGMkZENworOjEwNkU2MDAwN0Q0QzMyNTA5RkZERjI1REIzNDlGRTU5NkJCOERFOTIwNgorOjEwNkU3MDAwQUVDQjdCMDBDRkJCRTQwQjYwRTA3QkE3NUZDNzdFN0QyMgorOjEwNkU4MDAwMjc5ODQ3N0M5MzlFQ0ZCRUU3MzBCOTEyRTk1QTUyODdDNAorOjEwNkU5MDAwRUIwNTM5NUE1MzBDQ0Y0M0RGMDlERkM2RkVFQkY4RkE5NgorOjEwNkVBMDAwNTcxNjAyRERBRjUzMTgwMzNBRTdDQzlFOUIyRjQwRkVFNgorOjEwNkVCMDAwREYyODYyNEMxQ0NFQTE5QzQ3MzlBRUY2QkU4OEVGNzMyQQorOjEwNkVDMDAwQUYxNEU5RkU5Q0EyMTZFQjQyOUNFN0JFNEJDNjhGNDc2RgorOjEwNkVEMDAwRkFEODFBRTZFNzVFOUE4NTE0NjgwODZGMDFFNzg3OUQ3RAorOjEwNkVFMDAwOTE2RUNBMDdERDU2MjM0MjEzNTIxNEMzQTU4MUZEQUMyRgorOjEwNkVGMDAwMEVFRUEyM0MxNjg0NzcwRUQxMURFOTVEMThBMzQwN0VFQworOjEwNkYwMDAwQjQ2RTA4RjI3REU3QUM3NTIxRkE5NUEzQTFCRUFFRkQ4MworOjEwNkYxMDAwQUM5RjcwQkI2MkVDNjJGREVDQUNGNERFNTMzNzM1QzQ2MQorOjEwNkYyMDAwRjdCQjQwNDg3MEUyRkI4MTEwN0I5QTVCODFGMjE2RDk3NworOjEwNkYzMDAwNUM4OEJGMTk1RjU5NDBGQjgyNDY3Njk1MTNERjhGRUU2MAorOjEwNkY0MDAwNUIyMjE2NERFN0NGNjIxN0ZGRUVCMkU1NkNEQUNFNUIzRgorOjEwNkY1MDAwNzhEOERFM0YxQzdERTMwMURCNkVEODZBRUYxQjQ1RTY4NworOjEwNkY2MDAwNTU0RDBBRDI2RDFEQ0M0NDNDOTVBQ0VEMTI1NjY3QjMxRAorOjEwNkY3MDAwRUYzQkJDNzIzNTkzNUYyNjY3RjI0QkNBN0I0RTc1NDI3RQorOjEwNkY4MDAwNURCMUU3N0JDNEI4QzhGMzlENDIzMUI4RUU2Q0ZGNDZGMworOjEwNkY5MDAwM0NCNzA3Q0EyNEQ0RkI2NjQzQzI3NENCOTVBMUY2RkY2NQorOjEwNkZBMDAwRkNBMDM5MjNGNDIxRjQ5RjY4Mjg5MTQyRkQzMzUzRkY1QworOjEwNkZCMDAwQkVENDVFOTdFQjAyODlGOUI4MUVEMTRCNTY1MjFFQ0Y1NAorOjEwNkZDMDAwQkE0MEUyNTJFQTVGNEUwQjI4NEYxNzYwQkI1ODU2NzgyMgorOjEwNkZEMDAwMjlGOTZCMTRGMDU2N0YxODc4NDEzNkU4M0NENzlEOTIxQQorOjEwNkZFMDAwNzM5RkFERjczQzE3NjREQzVGOUI3OTNGRURDMkZGQkIzRAorOjEwNkZGMDAwOUJFRUE3NkQxNTk4QTI4N0U1MUNGQjdFNUEzRkJGOUZBRAorOjEwNzAwMDAwQjYzNUMyRURBRTU2M0I4RkVBNTYxQjBGRDc4N0Y4N0REQgorOjEwNzAxMDAwQUY2QjZEM0E1RDE4Q0E3RUZGOTFFM0Y3NEFBMTZDQzA3MQorOjEwNzAyMDAwN0E2M0IzREYzQjg2MUExNUY2Qjc3MDQyRjZFRkE5MTAwNAorOjEwNzAzMDAwOEYzQjJFOUMzQ0ZDMzgxQjcwMUNENkNGRENBMEI5MkU5RAorOjEwNzA0MDAwRTRGMkFGQ0MwRTk5RUJEREU1REI0Mzc2N0U5MTlDMjAzQworOjEwNzA1MDAwQkREMjk0Rjk3RTU4MTQzNDM3ODZFNkI4RjA2QjNGRjMwRQorOjEwNzA2MDAwOTY5NEQzNzlCRTMzRjY3OTNFRDY2RTg3NDA3ODk1QjQ0MAorOjEwNzA3MDAwRDFFMERERDFGRjVCMDVGRDFFOTI4MzNGNjc3QTVGOTYwRAorOjEwNzA4MDAwRjU3ODJGMThCNUM0OUNDMTc4OTRBMzFGRUQwRTcxN0JDMQorOjEwNzA5MDAwOTJEMURCMjYzRThGMzRFNTQxODc0MUJGMDdFRjgxOThDRgorOjEwNzBBMDAwODBGNzcwRUJFODU3MzhGRUYwQkZBMEJDQkRBQ0I3MDY2OAorOjEwNzBCMDAwRjVBNzc1M0Y5NEU4N0VCQkYzRjBCNTk2RDE5RDJCMUZFNQorOjEwNzBDMDAwQzU3OTNGRkVGRDA5NjQwNzRGOTY5MkY3ODc1Q0Y2RjE5QworOjEwNzBEMDAwRjhCQTdFMDVFOTFERTFBRkU2RjBGM0ZDNjkyMTdEMjFGOAorOjEwNzBFMDAwQjcwNzgwRTIzOEFEMzdDNzNERjk4NDk5RjY0ODFFREUxMAorOjEwNzBGMDAwNzM0MDcyNDUyMUJEMkUxMzJFQzc5RTcwQ0E5OUU3MTFBOQorOjEwNzEwMDAwMEVEQjc0ODQ3RkZBMThCQzI3MUNCODMyMkI5QjEyRjI1QQorOjEwNzExMDAwRDcxQzQ4RDI3MzFFRThGNDY0NzY0QjE3Q0U4M0YxOUZEOAorOjEwNzEyMDAwOEU3MDM2ODUyNjVEOEFGM0Y4MkJFMkVENDdBMTM5N0YxNAorOjEwNzEzMDAwN0I3ODczRThCODI4NzlGOTAwMUQ2N0JCRkZGQUZFNTAyOQorOjEwNzE0MDAwOTRFNDZERkRGMTA4RTlGREQxN0Q1RjIwQkE5NjE4NURFQworOjEwNzE1MDAwMDc2MjgzRjkzMkY1NjBFN0QxODdBMTBCRjVERUEyNjRGRgorOjEwNzE2MDAwMDM5RDBCM0RDM0U4MThGQjk1MzQ3RThFNTUwNjJEODE5QgorOjEwNzE3MDAwNzExQjI5QzZGOUMzMjc5NzZBQTI4NjcxNTlDQjhGNzlFQgorOjEwNzE4MDAwMDc1NjMxMTgyODZCRDExRkU5ODZCNzNDOUM3Q0QzOERGQworOjEwNzE5MDAwQzczQjhGREY0M0YyRjZCQTQwRjIyNEFFRTc5RDI1OTY1NworOjEwNzFBMDAwMUYzNTNCOTcxQzNFRTU5NkMzMDI4NDc1RTRCRjg1Njc5NworOjEwNzFCMDAwRjk3RTU5OTlENDY1QTQ4NzQ1OENEMzExRUY4QjIxNDk2OQorOjEwNzFDMDAwRTU4RjgzNDVDRjI1OTBBNkU3REZFMTk1NDZBNEM3RDk5MworOjEwNzFEMDAwRTcxNkJBQUYxNURERTcxNjA2RjJCOUNCOUQ3QzBFMUU5OQorOjEwNzFFMDAwQTcyQUIwRTkxMDZDM0JGNUY5OTVDQjFCMTdCM0YxRDk4MQorOjEwNzFGMDAwRTI5QjE4OEZGQUVBNEE5RUNGRTM5RjI3RDNGOUQ1ODIwNAorOjEwNzIwMDAwQkUxQjZBMzE0RTA0MkJCODVFRTZFNDQxRTRENTdBRjU0NAorOjEwNzIxMDAwQjRGM0VFQjczQUZFQkJFM0Q4MkVGMzlDOUNBM0FGNjU2NAorOjEwNzIyMDAwRUU1QkNFMzM1MzVGQ0IwQjY3M0YzRjM5RDRCRTkzMTkzMAorOjEwNzIzMDAwNTdBOEM3N0Y3MkZCRDVCNkFCMTMzOUVFN0JFMzMzOUZGQworOjEwNzI0MDAwODcxQkZBNUIwRUI4RjJDQzhGRTBGRDQ2NTlGNzAxMUVBMgorOjEwNzI1MDAwRUY4REVFRkI1REVEOEE3MkJBNUZDRUMwOTRDOURFODYxQgorOjEwNzI2MDAwRUU4NUFGNEYxREI0ODMxMzBCNzI5RjQ3N0Y3NEEyM0ExNAorOjEwNzI3MDAwNzc5NkM0RjBCRTM0RkU2RUNCODE3QzgwNjU2NkNGQzI0QgorOjEwNzI4MDAwRDc1REYzRUNENTE4QjQ1OUY0ODQ4MUYxNENERjA3RUVFNworOjEwNzI5MDAwRkRGNzJEODVDQjk3NTY3QkJDODgxRDFGNkIxNzJEM0ZBNworOjEwNzJBMDAwRjFBQkVEN0ZGQjdEMjFCN0QzMURGQjNFREI3QzVCMDhBMworOjEwNzJCMDAwNUY3RDYxQTQ4N0ExRTZGQjBGNjFCRTlGOEU1OTY5RDBGNworOjEwNzJDMDAwN0RGOUNERjY3REY5Q0QxMzlERkMyRDQzNDM3REYyQTZDRQorOjEwNzJEMDAwNzAyRUJGQUYyMDVDNDJGMUQ1RTY5RUY5RTQ0RjJFMzgwOAorOjEwNzJFMDAwRTQyMzdGRkE5ODE1NDlDMTcyRUQ4QkY3MzY3MEZGRUJGNgorOjEwNzJGMDAwNTc5ODdFODdGOTIwNUI5ODVFODdFNTdEOTU3MzU1QjQzNgorOjEwNzMwMDAwMTc2RThGQ0NBMjc4RURFNjA2QzM5MzJGRTIzQ0YxM0VEOAorOjEwNzMxMDAwQkFBNENCQkZENzlDQThEMjMwREVEQjUyM0I0QjQ1QkJENworOjEwNzMyMDAwNDNGQTQ0Mzk5NUU1MEI2Nzc1NTYzMTdFRkVDQ0Q2MTk4NAorOjEwNzMzMDAwNTcxNDYwNUNBMjhDREY0Nzc2M0QyQjM3OTYzMDNCM0E4MgorOjEwNzM0MDAwQ0NGN0Q5QzNDNkVCNjFDNDUzNTU1ODc3RTg4N0Q2RDE3QgorOjEwNzM1MDAwQjcyMjY5RkE1MDJFQzRCNTJBQ0M5NTcxREU4MzRENUZGMQorOjEwNzM2MDAwRUMzREU5RDc2RjI5Qzk5QkMzNkNGRTg3RUQ3QkIxREE5MQorOjEwNzM3MDAwOTU1NEU5ODYzMjNDMTdDRjA0MEVGQTg5NTVFRTI3NDQxRQorOjEwNzM4MDAwM0E2ODk5M0QwOEY3MDYxQkJGOTdEOEUzMzI4MTI0M0UzRgorOjEwNzM5MDAwRUQ1QTNGMjVDRUQ3QUY1RDg0QkE2Q0VCNzM3Nzk4RUI4RgorOjEwNzNBMDAwMzcyRDlBQTkwRDRCNDc5QUZDODFFN0ZFRDBGMjE4Q0ZGMgorOjEwNzNCMDAwQ0Y4RjMxM0E3MkYxRjNGOUY0Q0VGOUE5M0M5QzY4MDkwOAorOjEwNzNDMDAwMTdBMDVDODREMjE0Q0QzRjRDRjI4N0RBNDk4M0Y3NTg3QQorOjEwNzNEMDAwQzZDMzY2MDdENjNCOUE2QkVCMkY4NTNDMEY5QUJEREY4MQorOjEwNzNFMDAwOTI0M0YzNEI5MTdDNzdGNEMxNzY5OUVCNzNBM0Q1MDc2NQorOjEwNzNGMDAwRjM5NjZDMjQ3REYwMURDNjVBNjQ5RjdENjIyM0M5RUQwRgorOjEwNzQwMDAwOEQzRTk1RUVGRkRCQjc0MEE2Nzg1Njc0MEE1Q0VGQjY2QQorOjEwNzQxMDAwNUJBNDg4N0RGRjdGODRGQkU1RjE3NzEyRDJEM0I4REVEMQorOjEwNzQyMDAwODNFNzNDQTIyMUEwNzMyRUZEMTM3OTdFNjkzQkVDQUM2RgorOjEwNzQzMDAwOTk0MkYwNERENURDRkI1OUU1NDRFRTY3RDg1NjE1QUNDMgorOjEwNzQ0MDAwNzNGQjFCMTZFNkYyNzhEOThCQjk5NUJGQzNGOTk3ODUwNAorOjEwNzQ1MDAwRDM1NUM4OUExNzZCRDA4N0Y5MzQ1MEM1Q0Y4RjA5ODU5QgorOjEwNzQ2MDAwRkM5QzhEMEYwQzk1RjM2QkI1ODZGNzg2MEE5MEE0RjMwMAorOjEwNzQ3MDAwNjc0M0FFMUY3OEVGMTc3RDVDNEUzNzA1MTE2RjMxRUUxNQorOjEwNzQ4MDAwRDc4OUVDMTAyODY5NEZFQTMyQkJGMUVDNEU3QkVFRjI2MworOjEwNzQ5MDAwMUYyMjNEMzJCOTY3MjA3RkY3Q0MwRDkyQkRGNzZFOEY2QQorOjEwNzRBMDAwNDJGNkU3QkIzN0MzQUZEMTlGRjRBRTJGMDcyQ0I2NTREQgorOjEwNzRCMDAwM0YxMkM1NUYzRkM1RTZEQkNGOTg3NTE3RTY3RjY5RkNENQorOjEwNzRDMDAwRkJDQ0FEMDJGOTlCN0VGNDQxNzAwMkQyQkIxMTA1MTFEOQorOjEwNzREMDAwN0ZDRjYyMjlEMzI3Nzg5MjIwODQzMDNFMUI1RDA0REQ2NAorOjEwNzRFMDAwOTc2M0ZCOUUzMEUxQ0YxN0ZGQzlDMkQ3NjdEM0ZFMTM2NgorOjEwNzRGMDAwMTIyQkYwQkM5NkY4MjBDRUZGOTkzOEU0NjFGQkQ5RkYzRgorOjEwNzUwMDAwNUIyNUExRkZDQUQxODdCRUFBMjU4RjIyREVFNjgxNTU2MQorOjEwNzUxMDAwRDdDM0RBNkY1MzM4N0Y2RENCNTNEMjE4QTc5QzU1MjA1MQorOjEwNzUyMDAwOTIxRTAyQkU1MDdBMkFGQkJFRjRFMEVCRDU5OERGQjk3QQorOjEwNzUzMDAwQjQ2MjI2RDZDNEYxNjlCRDRCQjRFNDcxOUM3N0I1QjY4QworOjEwNzU0MDAwQUMzQTk3RDUyRjNGQTY5M0ZDQkQyMjdFREIwMTJDQ0YxMgorOjEwNzU1MDAwM0RDRUNCM0UzRkQ3RTM1MThGNzE5RjBGNThGQUZFMjRBQgorOjEwNzU2MDAwOUFENzlCNjFBRUNGQjZDNENENUU1MzE4OTZBRjMyRUVCQworOjEwNzU3MDAwRTVGNTlFMkY3MEU4ODA2REVCM0FFNkE1RDNCRjc1QTJDNgorOjEwNzU4MDAwOEJBNDRGMUNGNDNGNDE4NTYxOUYzRjcxRThDMTE0M0VCRAorOjEwNzU5MDAwMEMzREVDMDlGMzdEQTExREYzQ0Q2MjgzRjk2NkVEQjZEOAorOjEwNzVBMDAwRkUzNkRBN0NCMzRDN0VDQTVCMjJEMzNBQkNDM0Y0MkRFMAorOjEwNzVCMDAwQkNDRkUzN0MzRUI5OERFRUZGQ0NFNDI3MDdDRUNERTUxMgorOjEwNzVDMDAwNzkzMTk0QzMwRURGNjhGM0VFMjZCOUVDQkY0MUExRkIxRAorOjEwNzVEMDAwNEMxRDNFNzJGOEU3RDI5QzAxM0VCQTBGRTVDNThBQjA1OQorOjEwNzVFMDAwQkU5OEE3Njg5OEUwRTY5M0FCNDdFMEFCQTVEMDdGMjBCNAorOjEwNzVGMDAwQzZDQTRCNjVCMDcyOTgwODNBM0NGRkI3MjU5MzVDN0NDRAorOjEwNzYwMDAwOTI4OUNGQTUwQjA0NzhENTIzMDc3OUQ5ODU2RjZERTBEMgorOjEwNzYxMDAwMUVFMDJDNzZGMjUwRUI3MjU0RTZFNzFFMUMzRUM1REZFRQorOjEwNzYyMDAwNjNDMUYzNjMxREEyMDFCODFGQjVFN0FFMzYyMjZDREQ1RQorOjEwNzYzMDAwRTREQURDQjVDODBGNUI4NDQ0MEFGOTIxMzJFRjU0RTg4MAorOjEwNzY0MDAwMjY4NkY3NzdDNzMwMkQxMkZEODdGQUVBQTc4OERGNUYxNQorOjEwNzY1MDAwMDk5MTVEQjY2REVFMUE4QTRCQkQ3QjczNzIzMkVFMkZDNworOjEwNzY2MDAwOUIxOERFNUZBNUZEM0MzRDU2QTQ1Q0RCQkVCMTNDNkZDNAorOjEwNzY3MDAwNDI4RkYzNjczMkNFREY4M0ZEM0Q2RDk3NERCQjVFMUZCQQorOjEwNzY4MDAwRDU2M0VCRUI5MTlCM0Y4RDcyM0VGODY5OTRFRjUzOUI3MgorOjEwNzY5MDAwOTQ0RTE1RTlBMUJGNDhENUIyRTUyQkE3MjJCQ0ZFRTU2MworOjEwNzZBMDAwN0UyOEM3RkIxOEQ5Njg5NDFGRDBBQTRBMzUzQkM5NTkxMAorOjEwNzZCMDAwQzJFNUM0RTU1MzRBNzdCOUNGNTczOUVERUU2REU4MjJGQworOjEwNzZDMDAwQkQ2NjUzQzM1RTdBRTZEN0E2MDFGM0U4ODJBNTk2OEUxRgorOjEwNzZEMDAwRkE4N0ZBQzc0NTAyRUVDNzcwMTE4RkNCRTNGQjQ2OTdENgorOjEwNzZFMDAwNUVGNzY5NUJCRUFCNzg1RjEwMUI0RjZEQjI3NEY3RkQ0MAorOjEwNzZGMDAwQjRBQTI4NjRCRDQ3RTg0ODk0RkI4OUQ1MjZBMEVGRUFFMAorOjEwNzcwMDAwQkU3RkE2RkM4NUZDMTI0M0Y4MkM5NjlCM0FFOUY3NjVGMAorOjEwNzcxMDAwMDJEREZDN0RBQ0M0MTQ2RTc0RjUxQkFCRURGMkVDQTM4MgorOjEwNzcyMDAwQUFEODI3OTNERDU0MEY5QTg1NDZBMERDNTc4REZFQjk2MQorOjEwNzczMDAwOEVFNUMxNEVDQzZCQ0VBNDM3RkM3QkQ1NDUzN0VBMUYxNgorOjEwNzc0MDAwQUYyNkZEMDk4RTcyRkRCNUJBNTgyNTNBNkZBRDU3NzY1MgorOjEwNzc1MDAwQTJGRkVGRjdCMTJBQ0E2N0VGODgwODlFRkMwMkU3ODkwQgorOjEwNzc2MDAwRjE3N0E2MTE5MjNGQ0RGMkYzMzhCQzM1OERDN0UxQjE2OAorOjEwNzc3MDAwOEM3MTc4N0M2MjFDMUU5RjE4ODdDN0VGMTg4N0M3RjIzMAorOjEwNzc4MDAwQjcxQjRDMkE2MzNDMUVDQjE4OEZDNzMyQzZFMUIxOENBNQorOjEwNzc5MDAwRjE3NzdDRUU2REE4QTNFNzBGMUI1MkY0RkREOTg2N0EzMgorOjEwNzdBMDAwMkE1RjZFQ0I1NzI4RTVCRjA3RDZGMTA1QzVDNEZDQTlGMworOjEwNzdCMDAwNkU3QjdERjY5QkNCRUI3RTg2RkU0Mjg4MUFCOEFGMDdDOAorOjEwNzdDMDAwMEUzNUJERjJFRjc2OTlFRUM5OEUxN0U3QTNGRjEyNjI3MAorOjEwNzdEMDAwMjI2MERDQTEyREJFOURFOUEyODNGMzBCQzhGNzgyNEU4NworOjEwNzdFMDAwNzE3N0FCMEVGMzFFQkZCMUFERjcwQTk5RTkxRjI1RjExMgorOjEwNzdGMDAwREJBQUYyNThGOUM5NkQyRkI3NjE5RUU5MDU3QUUzQ0E5MQorOjEwNzgwMDAwOURBRUIyMUU5OUI1RTY2OTZEQjAzQ0I5NkNBNzFDNjQxQgorOjEwNzgxMDAwREY5Rjg5RkNCMjBERTU0NTIwQzZGNUMzNjdCN0ZEOUEyOQorOjEwNzgyMDAwRjRDM0VFNjJBNjAwQTFCQzJCNTJEMjQ4RUYzN0UyM0E3NQorOjEwNzgzMDAwNERDNTc5RjA3Q0VFQkY4M0U2MzhFNkY5NERENjk1NTkxMworOjEwNzg0MDAwQzhBN0FDN0UzN0U3OEY1MUQ2Qzc2MENEOUNGM0RCMEQ2MAorOjEwNzg1MDAwNTc0RjJDMUY1NTNEM0FBNzNCNjQzREY2NUQxOEE2OUYzOAorOjEwNzg2MDAwNTY2OEQ2N0ExOUVDNUI3QzdDMUZCNjBBQjg5RkI4QzMwMQorOjEwNzg3MDAwQzdFNTQzNDc4MDNGQTdFNDM4RjkwRDU1Q0REMTAyQ0M4OQorOjEwNzg4MDAwRkJFMTdDREMxMUUwRjcxM0Y0NEYxN0U5Nzc3QkEwNUU5NgorOjEwNzg5MDAwRjg3QkVDRTdGM0UzNDFDM0ZDQzg1OUQzOEJGM0QxNEUzQgorOjEwNzhBMDAwRjg4NTREMEY1MzI3NDdGOEZFRkU4RjJBRURFRjFGOUZGNworOjEwNzhCMDAwRkM2NDRCMUUyQjRGRkQxN0MzQzBGRDdBMEIxODQxOTQ3RgorOjEwNzhDMDAwMjdENjU2MkU0RkJFNTUzRTI1NkYxOUFCN0VGMTlDRUY0NQorOjEwNzhEMDAwRTZBMTdFM0NDRjk2NEY2OURCOEU2OTZDQkQ2OTMyREFEQQorOjEwNzhFMDAwMTFFRkJFQzRFNUUzMUJCNjdDRDlFOUVCNEREMTdBQ0VFRQorOjEwNzhGMDAwMDlEMzc5MEI4MDRFRDI1RjFBRTMzMkU1ODk4OUUzRjgyOAorOjEwNzkwMDAwNTNGMTY5OUZBNkZCMzM1QjE1QkFBRjQ5RjlDMzNDOTVBOAorOjEwNzkxMDAwRkNBRUVGRkJFREZCOEE3QjQ5QUY1MTAyNDkyRDk3QkREMQorOjEwNzkyMDAwRUZCNDQ0RjI1MzM0NkJDMTM0REU5QkI1MjUzQzhCN0VGRgorOjEwNzkzMDAwQkZDMTJBOTMyOTZFQjZBNThDQzc3RjQyOTE2QkU4NUVDMgorOjEwNzk0MDAwQUNBRkY0MDRBODdFNkI1OEE1N0NFMTc0RDk5RTgzNTUzNgorOjEwNzk1MDAwMzE3QzhBMUFFQTA3Njk3MzM5REQ2MzY5NjlBMjQ2Nzk1RAorOjEwNzk2MDAwQzdFQzVGRjQ3RDZEOENGQzQxNzRGRTE4QkZBRkU1RjE5MAorOjEwNzk3MDAwMEFERkQ4NDM1NDZFRkVBNDQ2RkQ4MzlEREY0RjJBOUE0QQorOjEwNzk4MDAwODhCRjI3OTFFOEYxREU0QkRCRkY5MzhGQTFCRjY0MEQyOQorOjEwNzk5MDAwM0ZCRjMyNDM1QkRFRjMxQ0ZCREU2MkFBODk2MkM2MEY4NworOjEwNzlBMDAwQUREQTNCRkI0MjU4NUUwNTE0NEYwRDREN0ZCRDI5ODQ3NworOjEwNzlCMDAwRjU2RkQ0MEM5RUFGQzVDRjRCODA3RDBGNzI0QkQ5OEEyQgorOjEwNzlDMDAwOUVGRkMwRkU1Nzg2NjBBQTgxRjVBQjU1RTQ1NzY4ODFEQgorOjEwNzlEMDAwMTdGMERFQUE0MjgyODhCRENGOUQyNUEwREVENjVBNEI4NQorOjEwNzlFMDAwRDc3MzMyRjhCQ0U3MEM1QUYyQUU1NDkxNkVBNEE1Nzk2NQorOjEwNzlGMDAwMzQ0RTJCOTgyQUQ2Qjc2QTY1REEzRjBCQzM2QTM3RkEzQQorOjEwN0EwMDAwMTcwQTZERkY4NDIzMEZGMjUzQUVGMzA2RUM3RkUzRDcyMgorOjEwN0ExMDAwQ0E5RUYzMDg2MzZGRjQ5NjBCMzJFRUUxMkRCN0U5MjdBNworOjEwN0EyMDAwMTM2Rjk5RjNDQzhGM0Q5MzhCRjBFNEFGQTU5MzEzRTdERAorOjEwN0EzMDAwQzE3RjZGNkNENjMyOUNENzM4NkQ5RkIwQjM5QzRDMUYwMgorOjEwN0E0MDAwNERDNzdCQzgyMUQ1RThDRUQ3Rjg3M0UxOUQ1MUQ2RDI3QQorOjEwN0E1MDAwOEJGNDMwNDM5NzQxNjc3OEY5MThGNDM3NjFGRjVCNkMxQQorOjEwN0E2MDAwRkFFRjI4RjJFRUUzQkZCMEVEMUZDNkE3NkJBMzczMzBBOQorOjEwN0E3MDAwRUUyMTgyRTVFQTFGRTMyMjk2MEI5RTI5MUQ3OTlFRjJGNAorOjEwN0E4MDAwRDRDRUYxOUVGQUQzNzYxNDdCQkU1Rjk4QkVDOEYzRkRDOAorOjEwN0E5MDAwRTJEREIzM0NFNUU5NUQ5Nzc4RUE3RjZDNkY5NUE3M0M0MgorOjEwN0FBMDAwQjNGQjRBNEZGREQ5MDc5NzdCQ0E3MzdBM0ZFREE5M0ZENQorOjEwN0FCMDAwRUY5NUQ1OUVFRkYzRkJENjc4QkU1RkZBREIwRDlFRjIxNQorOjEwN0FDMDAwNjVGRDc3NzlFQTNCRkE3RkU2QkU3OTUzOTRDQkEzMEY0NQorOjEwN0FEMDAwQUJGN0UzRUYwM0I5Q0YxRDY3REExNUU3RERBRkYzQzcwNworOjEwN0FFMDAwNjYxREUzODQxMEU1RjdFOUNBQjhCRkIzRjI4NjJGNzBDQworOjEwN0FGMDAwRkI0QzVENjhFODI4NkY1NjQ1Qjk3QzVEOUY2N0RFOEU1QworOjEwN0IwMDAwRjJCNTMyQUFEMjNFMjE4Nzc5M0QzOTdDMDVFOTIzOTMyQgorOjEwN0IxMDAwNzYzMDM5MzU5QkVDQjY4MUVGMThBRkVFNjhCMDE2OTYyQgorOjEwN0IyMDAwQjhGQzVBMDFBRDEzMzA0RkFDMzI1QTQzRjcwQTNBRUQ2NAorOjEwN0IzMDAwNjVDRDA0Q0M5RjVCMTVENUI5MUVDNEFDNUVCQTJGNDA5MQorOjEwN0I0MDAwNjdFRDVERjM2Mjc2MjI1RDMxRDFDRkVDNDhENEZGMDc1QgorOjEwN0I1MDAwRUM0NDM5ODdFMkMzQ0M0RTI0M0JEMjA4NzJCQjExQ0UzMQorOjEwN0I2MDAwNEFGNERERjg4QTQwRjdGODMzM0I5MEVDQzg2N0MyQ0NBMgorOjEwN0I3MDAwOEU5Qzg5NzY1QkRGMTY5NDQzRkQzRjk1MjlERUM4RkUxNworOjEwN0I4MDAwQzg0RTJDNjc3NkUyRTY1Q0I3QkZCQ0FGMDg5RjY5RDBGMQorOjEwN0I5MDAwQzZFM0IzNDdFOTE2QzcxNjkxRERGOENGNDhDRjlGRDlBMgorOjEwN0JBMDAwRjg1MjFERjYzQkJEOUNERkJGRDczMUE2MzY4RUZBNzQ2NgorOjEwN0JCMDAwNDc1MTE3RjE0OTdGOTFDQ0Y3MjEzOTUxRUFGNjAzMUU1RAorOjEwN0JDMDAwQjBGN0FCOTBGQTJEQjI1N0Q5M0E5MDVDNzZENjYxOEI2QworOjEwN0JEMDAwRDA5N0M2N0IwRUFEMkYwNEM5MkYzRUU5MzdGRUEzQzg1MAorOjEwN0JFMDAwNkY2QUIxM0EwMUYzMDQ4REZEOEE4OUUzREQ2QkUzQjk3NQorOjEwN0JGMDAwNTg5QjU5ODUzRjA3NTkxMjVGQjYwRjlGMTdFODRDMUZENgorOjEwN0MwMDAwNjFDRkQyRDI3QkY2RTFGMzdCNTEzMjdBRTEyMkUzRTkxNAorOjEwN0MxMDAwMkE5NDMxRUE0MkVFREY5NjY3MjhFOTI2MDFGREQyMEM2QworOjEwN0MyMDAwOEUyQ0Y2ODlGMzk0QTIzQkY4QkQ0MDI1RjIxQjQ4N0ZDOQorOjEwN0MzMDAwNjgxRDlDNjM1M0E4Q0M1MzI5QkUxQzQwQkExMEU4NDk2OAorOjEwN0M0MDAwRjQxNDkwNDNCNEJGMDRGMEIwMkE5NjJCODQzNDg2QzQ1NQorOjEwN0M1MDAwNTA3RkM1QkNEMUNBQkMxRDQ0MDc4RTVFOEJGQTZFOTJBNAorOjEwN0M2MDAwREJEMTA3OTBERTYyQjVERUY1MEZBOURGMjYzQ0I1RDg4MworOjEwN0M3MDAwRTdBMjNCNzJGNTQzNTU2Q0RDOEU4MkUyM0NGNEVEQTI0OAorOjEwN0M4MDAwREY2NTk5NEJGRTFDQjRGN0RENDc3MzQ0NDc0RjIwRjk3RAorOjEwN0M5MDAwQjMwMDczMTkwQTA2RjUyMkM2MEYzQkM0MjkwODZGODI4OAorOjEwN0NBMDAwRTJGMDgxNDMxMkQ5RkQ4MUJCM0JFOTc3NTgwMzlBQTVFNQorOjEwN0NCMDAwMDNFOUZGOTY4RUZENTYxN0FGMjQzRkUxRkZDNDY2OTE5RQorOjEwN0NDMDAwMUUxQ0E4RkY1MTU2QkMwNUZBMjQzMDY3MEY4RENGRTg2MworOjEwN0NEMDAwMDUwRjkwM0UwMDYzODIzQUVFQjNGNUIxQTBCOTMzOEI0NQorOjEwN0NFMDAwN0Q1MDE3QjFFRDlGNDk4RURGMzM0MUU3NjI1QkQxMkZBNQorOjEwN0NGMDAwMTdDNkFENEQxNTMxOUZFN0Y2OUYxNjc4RUM5QURCMEI1MgorOjEwN0QwMDAwQjgxRjczQThGMTAzQ0MxRTREQkFFMERCQzRGQTQ1MzlBNQorOjEwN0QxMDAwREU3QTc2NTkwREREQkI4QURCNEMzOTlFMUIyRERCNDlBMworOjEwN0QyMDAwRkVGQ0IzQ0QzQUU2N0RENUQ5Nzg0RDYxMzIwRkMzREY4NQorOjEwN0QzMDAwMjQwNTE2RUQ0NDc5OTJDN0Y0MjM4NkQyNEFEQkZGRTI4QworOjEwN0Q0MDAwRjg2OTI2RTZGMEY4QkY2MTgxQzRGRDc3M0U2N0RGMTI2RgorOjEwN0Q1MDAwQ0ZFMTdEMzUzQUU4Q0E1Q0ZCMkEwMDUyODFGOUJFQzYwNAorOjEwN0Q2MDAwRkVBRjA3Q0YwRjRFRTk3MEVENzM4MEZCODFCNzNDNkQxRQorOjEwN0Q3MDAwODdCNzdDNjFEQTVCNjY1QUY0Q0JBODA3QUMwMEUwRkVGQgorOjEwN0Q4MDAwOEZERERFRUY2MTMwN0QxODZGMTlFRkRDQjM5RkUwRTcyOAorOjEwN0Q5MDAwMDk1NTA2MDFEMjc3NTk1N0JBRTc2QjZDN0UwOUU3M0U2MQorOjEwN0RBMDAwQ0M4QzdCRjVBN0VGNDk5M0ZFNzI5NUZEQkIxRjk5RjcyRAorOjEwN0RCMDAwQkQ4RkM3REYwMTk5NDFGM0YyRUNBM0IzN0MxMkY5MjUyMworOjEwN0RDMDAwRDA5RjY0QjhGQzQ5MjU5QUVFQjFBQjFDQkY1MEE2NUNBRAorOjEwN0REMDAwMEYxRUJGMDdEODE3QjJFQjkzN0VCQzM3NTUyQjQzRkY1RQorOjEwN0RFMDAwNDM1QkUxOTc3RTczQTI3Q0QwMEZEMzI2QTdERTNDNDE5NAorOjEwN0RGMDAwN0U0RUE2N0ZDNUI4OUYwNEZERDdCN0ZGRjQ4RUZGM0UyOQorOjEwN0UwMDAwRTFGMjY3QkUxQjREQ0U0NkJGQzdGRDkzNzk3QkU3NUVBRgorOjEwN0UxMDAwNTVFN0RDREYzQjM1RjJGMzgyQ0VFMTQ4QkFFMEI4QjM5OAorOjEwN0UyMDAwRDRGQTM4NTc1N0QyRTNEMDhGRTRGODYxMUM3RkMzRjVGQQorOjEwN0UzMDAwNzkyNkU5RTc1QjhDQTNBOUZEQUNERkFBNUZGQTAxRkIxOQorOjEwN0U0MDAwNTkyQzFEM0FEODgwRjI2RUEyNEM3OTI1REFCQ0I1OEYzOAorOjEwN0U1MDAwMDREMUVGODlERjU5QjlBQTQ4MUY0QkZDRjFBMjhGRkM2RQorOjEwN0U2MDAwMEVFRDM2REYzQkU3NTcxREJGNEQyMjg3RjM0N0FENkQ2MworOjEwN0U3MDAwMEZCMDk5MDZFRDczMUI0MUQ0OTMyRkRFQ0RENkQwQjM0RQorOjEwN0U4MDAwMUY3MkJGQTFFMzFGOUNERUU1RkQ3RTExMUUwNTI3RkZDQgorOjEwN0U5MDAwRTg0RUNBODMzMkU2RjMzQ0E4MzEyQkQzRkI3MDlEM0ZGQQorOjEwN0VBMDAwNjZBRjMzQzZCNzJBRTcwRUM2NTlDN0FFNEFFRjQzM0RBMQorOjEwN0VCMDAwNzQ4NjlEQ0Y1NEY2RTJGM0Y0OTNCRjIwMTU0QTQ4NUZEMQorOjEwN0VDMDAwMTc2MTFFMTM2QjY3MUM5MDNERTc0NkM2ODA0MEY5NDA2MgorOjEwN0VEMDAwNjM4RTQ5NDY5QUY1MzNFMzU5RUZGNzMyNzA5NThCMTA2QworOjEwN0VFMDAwM0U2RjM5MzM3RUM1RDRBREI3NkYxMEYwRjc1MzUzMDJGMAorOjEwN0VGMDAwQ0FCM0FEQUI5ODhEQzBDQUVCNzJFQzNDQTQwQkUwMDJFOAorOjEwN0YwMDAwQTREQkM1NTJEOEMwRkJGNTM2RkM1Q0EyM0M2NEZGODlGQgorOjEwN0YxMDAwNjlCRkMwMzgyQUJDQzRGMzJFQjUyOTNDMkVBQkZENDQ0MgorOjEwN0YyMDAwMzI5ODA0MDQyRDA0MzM2Nzg2MDdFMzVENUYzRDY3RTAwNAorOjEwN0YzMDAwNURGQjAzN0VCNEM3RDlCQUUzM0VGNDA0QjNGQjRCN0NDQworOjEwN0Y0MDAwNjhDNzZCNTRFRTYyNzYzRjk2OUY2MTc2M0YzRUY3MzA4RQorOjEwN0Y1MDAwQkIxRkRGN0Y4RkQ5RkQ1OERFQ0JFQzdFN0NGRTkwRDkzNgorOjEwN0Y2MDAwRkRGOEZFNTk2NkY3NjNGOUM1RENDQTJEMzk3MzMwQkVEQQorOjEwN0Y3MDAwNTU0QUY0MTQ5Q0I5ODdGMjFFREI1NTlGODZGNDkzMjk2OQorOjEwN0Y4MDAwQ0YyQTJCNkY1NzU3MzBGQzZFMEUyRkE2Nzg0QkQ1NjIzOQorOjEwN0Y5MDAwOUU3N0JGMjU2NzMxRDlEMzAzRkVCQzBDN0ZFOEEwN0Y1NQorOjEwN0ZBMDAwQUY0RjcwRkM3Qjc4MDQzQTZFREJCMzAzN0VEMkE0NDEwMgorOjEwN0ZCMDAwRjcxQjhDREM4RkU5RjQ0MzdFRDZGM0ZBQjFGREFENkY4RAorOjEwN0ZDMDAwN0RFMTU3NUY2RjY2OUZENkNERDlERTExMkNDNjczM0YxQQorOjEwN0ZEMDAwMjlGRUREQ0UzRkNDRkNEREFENzU3QjFBMjkxRjUwMTk4MworOjEwN0ZFMDAwNzcyQzg1RUJCQUE3M0M0Q0ZBMDZGRTJFMTNDQUVENEM1MworOjEwN0ZGMDAwM0JEMUIxMEYzM0Y1NzFFNzk5QjkxRjY2RTZDQjQ0NkNGRAorOjEwODAwMDAwQkQ2NEE0RkM4RDZEQkUxNEM1QjdBRDQ2MjY1RjcwQkZDMAorOjEwODAxMDAwNjg0ODJGN0NERDc3QkU3Rjc3QjI5Njk3NzE0RTk5RTdERgorOjEwODAyMDAwNjdGOTBGRjJCQ0JEMEU0ODZBRUVGOTNCRTcyM0M4RTZEQworOjEwODAzMDAwMkJFNjdFNDZCNzdGMzc1ODkyQTZGQjFCODI2MTkzRjRFRQorOjEwODA0MDAwNDU4MUU5OTFBNDU3NkE0OThBMTdCNjBERjFGQkRBQTc3MQorOjEwODA1MDAwNkMzOUQxMzhFRTFBREFFRkRCNUVGNDkxQkU1NTZERTc3QworOjEwODA2MDAwQzkzNThGNTNBOURDM0M2RTZFOUNGMjJCMjM3M0Q1QkVCMQorOjEwODA3MDAwMkNGRDZDODgxNDBGQkJCRjRBNkNGRkQ3ODdEOUZGMjUzNgorOjEwODA4MDAwM0YzRjE3RDZCQzZGQkU4QUU3QTczQUMyQUI3QkQxNkUyMworOjEwODA5MDAwRUY4OEM3Mjg0RUQwMzM2RUFFRTc3RTcyMjk1RTQxRjc3NworOjEwODBBMDAwNTk0ODYxQUU2NzRCNzE5NUY0NkMxOUU3NUYzNjU4REYzQworOjEwODBCMDAwQTk3NzMwODdEMzBGNjM3M0YyNjMwNkMyOUQ1NENGMkYyNQorOjEwODBDMDAwMjc0Q0Y0QjdGODYzM0MwRkQ5QUZGMUI4NjJCMDQ0MDQ2MQorOjEwODBEMDAwMzVDQjc5OEQxRURCMkZERTUxOTZENEQwQUZEMzExOTdERgorOjEwODBFMDAwRTlEQzQ3ODczRTZCQThCODJDQkZFRjQyRjNGQTA3OUI0OQorOjEwODBGMDAwNkRCRjQzNzM5RDQyN0E2MUEyM0U1N0FCQ0VBNzczMEIwRgorOjEwODEwMDAwNjc5MENGM0JDMjREMkFDNjY5RkYzRjgyOTA5QzRGMDBDQgorOjEwODExMDAwODAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkNEN0REOAorOjEwODEyMDAwMEI3QzE0RDVCOUY4OTk5REQ5NTc3NjM3OTk2NDM3QzkxRQorOjEwODEzMDAwRTZDOTA0MDIwNjBEQjg4MTg0ODdDNjM4MDk5MUEyMjJENworOjEwODE0MDAwMkUwMjM1QjRCNDJDMDQxNEU0MTVEMUI2QUJENUIyMjE0QgorOjEwODE1MDAwMDk4RjIwMjU1ODFGMjgyRERENTBCMDJGQkQ4RDk2REVBQworOjEwODE2MDAwNTJBQkZENkYwNEI5QThBOEE5N0ExNUZEQTE0NkI0M0U4QgorOjEwODE3MDAwRUVDRjZBMDRCREM1NDdGRkZDQkZFRjNCMzNDOUNFNjRGOQorOjEwODE4MDAwMzYwNEI1Rjc3RkIxNjUzODMzRTdGMTlERUY3Q0VGRjM0NworOjEwODE5MDAwOURCMzhFQkNDQTYwQ0NDNzU4Q0IzRkM1ODYyRTJGM0M0MgorOjEwODFBMDAwOEIxOEVCODEyNzkzNDIxOUFDOUMzMThGMkMzMDk2Q0RFNAorOjEwODFCMDAwRDg2OUZDNzMzMTdDRUY3NkFCQUMxMjlFQ0IxQzcxNzcyNworOjEwODFDMDAwMDk2M0UxNjg0NTRFRkQ0NEM2MTY2Njg1OTkwQ0Y1MUNBOQorOjEwODFEMDAwQkVDNTcyMENEQURCMTk1M0IxM0ZCRDlERkUwQzYyN0Y0OAorOjEwODFFMDAwNTU4Qzg5RjI2RjZCREVGMjBGRkVBRTNGQzVGNDFEMkM4RAorOjEwODFGMDAwODI3MDk0NEE2RkY3QkExOEIzMjk0QzM4NkQ4MzMyRjMwMgorOjEwODIwMDAwQ0E2RjlGQzdFOENGNjkxMUZGRUUwOTg2N0RBOUZCRjExMAorOjEwODIxMDAwQjlGRUFERTZBRDg5ODNEQkFEMkFFRjc1ODgwQTYzOUJCNQorOjEwODIyMDAwRjc3NDg0MTk5NDNGMTMxNDgyQ0JDRTYyNkEwMUNDNkIyRAorOjEwODIzMDAwRjVGRUVCNTkwNEU2QkY1NUVBNzFDOTAwQzdENjJGODQ5NQorOjEwODI0MDAwODVFMUYyQzFGRDJGRDNGMDAzMDg4QjIxOUNGMEM3NzZBNgorOjEwODI1MDAwRkE3Q0Y4NUI2MThBNjMxMjYzMDVGODY2MjQzRUY5Nzc1RAorOjEwODI2MDAwMThBNUZCMzRGNDVGOTE4MDcyOTkwNjBGRkM3RkUyNjFFMAorOjEwODI3MDAwNjNCOUFBQzc1ODlFN0NENDU4NjYyQzY0MEY4RjYzRUNGMAorOjEwODI4MDAwODU3NUQwRTkzOThDQ0QzOUY2REUzMTk2Q0VEOERDNThGQgorOjEwODI5MDAwRThGMTQ3MDM4Q0U1QUJBRTcwNUM2NjZDMUUwQjNERkVFRgorOjEwODJBMDAwMkE5NDBCMUEzQzJDMTE4MkMxNkQ2QzE5QUUwQjRDRjM0NQorOjEwODJCMDAwQTU1MjgwQUY4MTExQUNBQzYwNTkxQTYzQUU4MUZFQkY4QworOjEwODJDMDAwMkI2NzEyM0UxQTdBMTdDRDY0RTMxOUZCRjFDRDJEOEM4MgorOjEwODJEMDAwNDEzRkIxM0EyMUJFMTdFMDlGNURCRjY3RjYyODc4REVDNworOjEwODJFMDAwNUI2OTJCQkEwRjFCNDVFQzZGRTFGQzVDRDBEOTY5OTgzOAorOjEwODJGMDAwNkZBNkVERkExMTIzQTE3RTc4OUE0NzY4ODE3QTNGQkU3NgorOjEwODMwMDAwRTBEQ0NEQTU1MEVFOTkzRTNBODQ3ODA3N0NCREQ1M0ZBMAorOjEwODMxMDAwMUZDMEZGQkMzMDZGQUY4RkZGNkNFNTg5QjlBM0UwQjkxOAorOjEwODMyMDAwQjNGMkExRDlGODlDOTM1QzFGRkE5QjM1QTVCM0Q5MDE5MAorOjEwODMzMDAwRkQ1REI5NTI5OTgwRkQ4NUVCOERFRDBCQUE4RDY1ODBCMQorOjEwODM0MDAwOUNENjA5RTdFQkNGMUEwQ0VGOTlFMDMxOEZBRkY3NzdBNgorOjEwODM1MDAwRUYzQTg1RjBDRkJFMDA3QTAwN0M4NkYxMTNCNDBGNEI2NAorOjEwODM2MDAwN0Q1MjA4RjA5QzVGMkRBODcxQTA5QjAyNTU1MDNCMkRCQgorOjEwODM3MDAwRjg2MTlCNDYzRjY2RkM4QkIxMEM4NjdDNTYzNzRGOEM3MAorOjEwODM4MDAwQjc0Mzk1N0M5NzlERjA5RjNGNTM4ODJCMzA3RUZFQjI3QworOjEwODM5MDAwQkVDNDY5Mjg3RkQzNjU4RjhCRjAzRDJCQjM0QkMwRUZGNAorOjEwODNBMDAwRjdBRTY0QUNBMzg0QzA0QkFGNEQ1QURGN0I1RDZERjY3NgorOjEwODNCMDAwNjJGODNFMkY0RjY0MzZBMDAzNTYzRDhBQzYyMzM4NDZFNgorOjEwODNDMDAwMTIzRThFNzM3Q0I4MDgxRjA1MkI0MzhGRkYwQ0M2QkY2RgorOjEwODNEMDAwN0E4QTUzMTZBMUZFRDUwREZDQkIwRURGNTYwOUU4MENCOAorOjEwODNFMDAwQkU2RjA1M0E4QjExOUQ0OUM3OTNGMTMzRTdEOEFBNTU2MworOjEwODNGMDAwNDg4RjczNENFRkM3Q0E4Q0U4RUFFRjUzOEY4RTI5MDY3QgorOjEwODQwMDAwQjg1NjA5MUQzMzNDMDA4QURCREVDNDE4MkUzNDYwMTBEOAorOjEwODQxMDAwRTk1QUU3NDcxRDRGQUJGNjM1MTMzRjI2RjE5OUZEMzQ3NgorOjEwODQyMDAwRjIzM0ZFM0I4NzUwNDM3Q0Y2OThFQkY3MzJDQThEQkZBMAorOjEwODQzMDAwNjRGNkVFNjQ0MEMyQkY5MDU5QUNCRTlBQjFGRjkzRDZDOQorOjEwODQ0MDAwNzc5RTAwRTVERjc0MzQ2Q0RBNzQxMTdDNzdGN0ZEOTY2MworOjEwODQ1MDAwNTUzMEU2RENGODlEMTkzMzhBMDZDQTY5RURDQjY3Q0M0NgorOjEwODQ2MDAwQjgwOEZCRTNFM0MwMTQ2MjdDQkRGQkM3MjVGQUU4OTNDMAorOjEwODQ3MDAwMzk3QzVCNTRCNjVEODRCMjY0OTNCNzg3NEEwNkRBNjU4QgorOjEwODQ4MDAwNjEzQjYxODg3NjYxQjY1REIyNjhFN0Q1REIwMTlFMzZGNworOjEwODQ5MDAwQzBGQUE1NjlGMzRBRDNCRURCMzQ3ODkyQzc5NzEwNkY1MAorOjEwODRBMDAwQjJFMjE1NjAzREE0RTk5MjhDRjRGMjU1RTFDODM5RDNFQgorOjEwODRCMDAwQkMyMzZDQkI3REQ0RTA3NjAwNzZCMzBFQkZDRDFBRkUzNAorOjEwODRDMDAwMzg3RTRGMUVERjNFMDRGQzVGMzczRUNFRDQ5RjQzRkIxOQorOjEwODREMDAwN0VENkYwNDFGNUY1MzlBOUU3OEI3MEQ5NTE1RjI5OEEyRAorOjEwODRFMDAwRDc5NkQ0Q0ZCNkVFNEY5RjNBMUY4ODU3OUFDRjQyNkU5OQorOjEwODRGMDAwRTg0M0IyQUI3MjA4RThCQzVDQkVDMzg1OUQ0Qjk5RjVGRQorOjEwODUwMDAwNzIwNEY4NjEzMzk0NTU3OEJGQjlBQkMzQTVDMEZCRjJEMAorOjEwODUxMDAwRDJEQjM3MjFEMTk3MjdEMjE4Q0E4MzcxNENDRUJDMUYyQQorOjEwODUyMDAwRkExRDI3NEIyQzgxQUI3NkQxNDE5QjA3Q0FFQzBBMTY2QQorOjEwODUzMDAwMUEwREZENjY3NEE3OTEzQ0M5MkNCOUUwMTcwMjhDOUJGQgorOjEwODU0MDAwOTlFOTUyQjFCRDI3NzNEMjJGMThEMTA3NTNBNDI0N0NDNworOjEwODU1MDAwNzg2QTVGQThGMzIwNUNCMzU5MDg1OTUxMTJFMkFDMTY0RgorOjEwODU2MDAwOTk2QzJDNjM3QkExOUM3OUM5MUU1NjBGRTUwOTdGRjc5NgorOjEwODU3MDAwMjkyMkYyQjRDNEY1NUQzQkI2NDczREREQ0EwRUExN0VBQgorOjEwODU4MDAwQzlEM0U0Q0YyNjg3QkM5REY0Qzc3NTEyNDNGREUxMTkxQQorOjEwODU5MDAwNzc4NzgwRjBEQzBCNUQ4OUMwOTdFNUU1NTlCM0VCQTFFNworOjEwODVBMDAwNUM3RUM0MTY1MjE0OUM0Rjg3NTA4Q0YzMDk4QUE0Qjc4MgorOjEwODVCMDAwNzQ3Q0VBNzI2NEMyNDcwOUNFRjQ2MzU5N0MyRkMwREYzMQorOjEwODVDMDAwNkE4RjI3NTA1RUM1QTY1RTJERUYwNTc4RjI5NzI0QzkwNQorOjEwODVEMDAwNkJGQ0FCMEY3MDgwRjAzRTdERDVERUY2MTJBNDZGRTkyOAorOjEwODVFMDAwQURFNEZFMzIzRThBMjc1MDlFQjFEQTg2MzBCNjBGQ0MxQgorOjEwODVGMDAwOTQwQ0YyM0Y0RDkzNjc2OTI2M0REMDlBNjUyNzNBRDE5NgorOjEwODYwMDAwRjUwMTUzMjU0NTg2NzkwQkRBQkNEOThGQzJBNDBGOUM5RQorOjEwODYxMDAwMkNFNDcyOTBCREIyODBFQzEwODFGNTBBQTczRDMwN0Y0QQorOjEwODYyMDAwQUM4ODcwMTdGMTc5MEM2QTNGODlCNzY3QzE5MDBCRUQ4MAorOjEwODYzMDAwMUM2NzVBNTMxM0Q2ODc4RjU5Q0Q4MDVDRTFCQTM0MTUyNQorOjEwODY0MDAwRjVCM0UwNjBBRUJDMDkzMDZGMUI4Qjc0MDE5RDM0MEIzOQorOjEwODY1MDAwNENDMkYyQzA3ODA5ODZFMzM5NUQ5RTU2QjRCQjFFNzNFNgorOjEwODY2MDAwQjVEODEwN0YyRDg3NDE3RkMwM0MzNkRBMTlCN0ZGRTRCQgorOjEwODY3MDAwOTAyQjBCREE0NzM1RkI2RDZEQzVDODVDMkM2N0U0RThDMQorOjEwODY4MDAwNzY2MTU4NDZCQTVDOUI1RDlBOEJGNjYxQkFCRkY3REJBMAorOjEwODY5MDAwMjg2NzY3NkVGRkUzMEMxN0NBRDUzQUE4NzMwMUU4OURGNworOjEwODZBMDAwQ0M4NzM2QzU0MEVFM0E0RjE1MzAyNUM5Q0U3MzRBNERCQQorOjEwODZCMDAwMENFRDI5RTdBOTYyQzNGQkM0M0E5OEQxMzkwMzY1RDUwQgorOjEwODZDMDAwNkJBQkM3NzFENjY0MkE4NEQ3NUEyNkI3NjJCQjVBNDBBRgorOjEwODZEMDAwODY5MkI0MkVDRTUzNzk0Qzk5NjhENTdGQTFFMTdEMDI2NAorOjEwODZFMDAwRUMyNEM1Mzk5Q0ZFM0Q0QzI5NEJFRTdGNTQ4QUZFQzdENQorOjEwODZGMDAwOThGQTk3MkRGQjFGRThENzZGRThCNzRENjI2NDQ3QzcxQworOjEwODcwMDAwMDI1RTVBNzdCMzVEQjAzMUIzRUVDNjRDQjQ0NzlEQUM1MAorOjEwODcxMDAwQTlDQkMyRUVEQzkwNjkyM0JBREIxODZDRUE1MUExN0RDQgorOjEwODcyMDAwMUQwM0M2MDczQUI5Rjg4QkUzMjIyMzdCMDY1NjBBRThGNQorOjEwODczMDAwODUxNTRBN0RGRDc0M0MxMkVCNzFGQUI1QzUwNDg2NzI0RAorOjEwODc0MDAwRTk2MkM5NkVFMDkzMUE2NjJDOUJFREEyNzM2MUFEMTFDQworOjEwODc1MDAwNUYzNjVGNjUwRkQyQ0ZEQUVDMzRDNTY5MDFCRkZFRUMzRQorOjEwODc2MDAwNTlDNzZBNEE0N0MzN0NEM0MyQ0IxOEYwRjFDRkI3MUZCMQorOjEwODc3MDAwNzZCNTA1QTE5Q0NFRTlFNDgxRURBRkNFODhDMUZDN0E0NworOjEwODc4MDAwMDQ0RTdGNkQwMTFCRTEyNTVDOTdEQjI5MjZGNTFCNzZFNgorOjEwODc5MDAwQjBEMTI4MTdDMzQ4REY1RTBFMEY4RURGOTM1REI4QkJFNAorOjEwODdBMDAwREQ2MjdDMTBCQjA2RkI2MUI2MkFENDk0MjZDREFCNDdCNAorOjEwODdCMDAwQjM4M0ZCQzc5QjU2RDA4OTdDRDAzRjlFOTM1NUQxNzgxRAorOjEwODdDMDAwMjJFMDNGNzlCQzlDMkYzN0RFNUY3MTdFRTUwM0UzQ0Q2RAorOjEwODdEMDAwOUU2RTlDREY2Qzg3NENGMzlCQURGMUFGM0VERTVGNzEwQworOjEwODdFMDAwN0UyNTVGNjIzQzlDNUZGMjc4REYzMENFNkZCNjUzQTY4OQorOjEwODdGMDAwRjlDRDE2Mzk3REY1OEY5N0YzRTVDNkVCNTk1NzQ2NzZENworOjEwODgwMDAwRjA0NjA3QzgyN0EwOTNCNDhBN0RBRTUxMzBFRTQ2OTc1NAorOjEwODgxMDAwNUQxNjk0ODE3NkI1QjUzN0I4RTZBMkVFRjU0RTlCOUUwRgorOjEwODgyMDAwMERFM0Q0NUQwMjk1RjNCMTk3NjlEMzZCNEIxOURCMkU0MQorOjEwODgzMDAwNzBCQUU4Q0JGQ0FGNERFODQ3OUU5Q0I5QjY4Q0Y0ODk4MgorOjEwODg0MDAwNjY1RjVGODk1NTQxMUY1RjI5NzE3ODY3MTU3QUUzQ0RBRgorOjEwODg1MDAwNDk3OEJDMTdFNDg4MEE3MEZDMTRGODVEMDU3RURDMDVENQorOjEwODg2MDAwN0M4OUU1RjhCQTIwM0Q3NzgzQkQ4RUNGM0QwMDJGN0UxMQorOjEwODg3MDAwQkY2RjVEODhDQUJGNUEzNzg1OUU3QTNGNjU1M0I4RERBMgorOjEwODg4MDAwM0VCNkRBREE2RTNGMkY4QkRCRUREQkYzRTRGOTRCNTBDQgorOjEwODg5MDAwQUZENUE2ODU1MDJGQjIyOTE3MzIzNUQ5QUU2NjREOEY4OAorOjEwODhBMDAwQjlFMUZCRDY2RkIyMEFENDhENjM3NjcwQjgwM0Y1Mzk5RgorOjEwODhCMDAwNjRCN0E3NTUxQ0VDNTkwN0U1OEQ5MjVENDFCREJDNTFDRAorOjEwODhDMDAwNjEzM0FDRkNFNjMxQTg2NzYwM0NBNzkzQjc2NzE3NzJDOQorOjEwODhEMDAwM0YyQzEwRUUzRDg4N0E2RjBFREFFOTgwRDdFQ0I5QkRGNworOjEwODhFMDAwMDdEMUZGQkIwQUVDNzJEMkNCRUM4RDgzQUZDMkY3MTc3NgorOjEwODhGMDAwQzBGRjZCQzdCMkU4NjUzMjk0NjdDREM5QTZGMUUxNEZGRQorOjEwODkwMDAwN0E2RDBFREFFRkZDQ0Y0RjY2OUUyMEJGMjJFQ0U2N0EzRQorOjEwODkxMDAwMjFDMDY2M0ZERThERjA4NjFDNEE5Q0ZBNjM3Nzg2OTEwMworOjEwODkyMDAwMEY1NEJCRDI0RUEyMjA2QzQ3M0Q5RDhEN0ExQUJFRDcwNAorOjEwODkzMDAwQkVFMTY0MzY4NEVGMTIwN0M5QjVCOTczOEQ3RUMzNzY4NAorOjEwODk0MDAwNzc0MjQ2RkI2NzdCNDU4MDM1NDNGRjU3Q0QzNDdFNzdDMgorOjEwODk1MDAwM0EzOUJGODU0RDdFQzMyQzUzMTlBQzJEQUU3N0M1MDU3MgorOjEwODk2MDAwMTk2OEVGNkZDNDU3NTMwN0UzMkQ3QUFDNzlFM0MxMjQzQworOjEwODk3MDAwM0E1NUIyN0M4MUI3M0RCODEwNkMwQ0NBQjM0RjU4Rjk2OAorOjEwODk4MDAwQjY3QUZDNTg5ODQ1QzY4QUI5RkQzRkQ2QzUzNjFFMDQ0RQorOjEwODk5MDAwRDRCRjgwNzIwRkU1QUQ4M0NCOERDMUZDQzFFMUE5RDFGRAorOjEwODlBMDAwRTRFM0JERUI3QTZBREUxQTNEMDA1RkJFMTQxNzUwMEY5OAorOjEwODlCMDAwMTQyQzgzRjc0OUYzOTUwMjcxMDFGRDFEMjZERTVGODFCQQorOjEwODlDMDAwRkU4RDc5MUVGNzBBRjdFNzMxOEJGMUY0NjczRTkzREVFRgorOjEwODlEMDAwNDZCQ0UwNTJBMjNDMzdDRkI3NjZEMDdDQUI5RjJENjUzQQorOjEwODlFMDAwNTZGQ0E0NkM0NzdCNkVENjYxMzFENEFDMENFMDQzOUYzRgorOjEwODlGMDAwRkZGRjM0NUZCREFCRTE5QkE5MDE5NjAwN0E3OTE2RThEMQorOjEwOEEwMDAwQkQ5REZCMzEwQ0VENTQ5RDVFQTEwMkQ5NEY1NzVFMDkwRgorOjEwOEExMDAwREY5MTJFNTRCNTA4RjFGOUVDQzhCRTNERDc2MDNCOTAwQworOjEwOEEyMDAwMUQyREU4RUZFQTc2NTBFMjY1MUJEQTQxNUZCNkRGMkJEOQorOjEwOEEzMDAwQUY3MzkwQkRDNTU4QkRGQzc2RDk0MDdGQTlENjA3RkI2MgorOjEwOEE0MDAwN0QzQjQ5N0ZGNkRCODlGODY3OTIyNkZBMTBDNkU2NTAyRgorOjEwOEE1MDAwOTBFQzgxOUJDMDNFNDY3RjNGNUFGRjlFOTRDRUJGMUY0NQorOjEwOEE2MDAwNEZCMjUzRjFDRkYxQTRGRTVBQkE3RjJEMjgwMDU3RTczOQorOjEwOEE3MDAwQkFBRTlBQjdFQzAzRTM5NjJDOTM2RDZENjhDRjM1QzcwOQorOjEwOEE4MDAwMDU4QTQzMjRBMDFFRDgwMzIzOTcyOUI2NTZDMEZGMTI5NworOjEwOEE5MDAwRUMwN0U5RDMyNEQ3NDdCNjQyM0ZDOTc2NEFGNTVDRjlEQgorOjEwOEFBMDAwN0VBMDg3RDZGMkJBOEUxMDNDMzdFRkUwRjEzMkJEN0U2MQorOjEwOEFCMDAwN0ZEQzJDMTAyM0ZGRENDRTlBOTgwMDcwM0FEQzNGRkE2MgorOjEwOEFDMDAwNzkyRkNDNDc2RDkxOThCQjA2Q0E3NjZFRUZCMDU3N0Q3MworOjEwOEFEMDAwMjQxNzQ0NkZEMzJGRjE3QjMwMDY3MjBCRTc1REQ3RjQ3OAorOjEwOEFFMDAwM0IyQ0M3NkMyQ0RDMDJDRkJCM0RCQzdENTQ3MkM5NEUwNQorOjEwOEFGMDAwNThCRjc2Qjk3NTA2NEUzRjI3MkY3MjZGMTY4Q0Q3OTZFMgorOjEwOEIwMDAwOTM0NjcyRDBGMTlBNkYzN0NBMjk0N0U2ODQ2NTY4RjdCMQorOjEwOEIxMDAwMkM4OEZFMzA4Q0YxNDhEOUNGMTY4NjJERTg2QjgxNjYwMworOjEwOEIyMDAwM0ZFQ0Q1RThFQzk4M0Q1MTk0MDk3MDRGQ0ZBQkRCOUJGRgorOjEwOEIzMDAwNTU2NTUxM0ZGQTIzRUFBRjQ2QjRCNkMzMUVENUZBRDlGQworOjEwOEI0MDAwNjlCMzk2MEJGRjlFQzVFMzlENTdBRjdBRThCREZCNjAwNgorOjEwOEI1MDAwM0U5RTUyNkYwOEM5NkRGM0Y5NkM5RjYwMUI1Q0JGM0I3MgorOjEwOEI2MDAwM0JGMjg3QUNBNDc4QUJCQjU0OTYyODBFQ0FCQUE2QTIzNworOjEwOEI3MDAwM0RCN0Y5RjM5Rjc2RkQwRTUwOUVGNUI5OTdFNDZDOTZEQworOjEwOEI4MDAwRTg4QjBCMjU4NkY2OEYyNkNGNDM2RkZGOTc0RjVGMEM0MAorOjEwOEI5MDAwRTJGQUZDQzVDRDQ4QkZCMkQ4RDM5N0FBMThEN0Q0Q0IzOAorOjEwOEJBMDAwRjA0NkMwNzJBNjVFRkVFREE1RTg2RjBFOTRBRkI5QjRCNAorOjEwOEJCMDAwMTZDQjQ4QkI0MDk0MzVGRUU4NjZENENGNUIwNUE2MTFDMgorOjEwOEJDMDAwRjE0REJDQkU5REQ3MkZENEJFRDc1Q0Y2RkUyRkI2QTEwQgorOjEwOEJEMDAwM0U5OEU0MjAzRjc0QUI2NjA3RTlGMEE5N0U5MUYwQTNDQworOjEwOEJFMDAwRkE4N0M2RTM2QjFBOUU1REMzQzdFMzZCNTY3ODM4OTA2RAorOjEwOEJGMDAwQTdCRThFRjg3NUIzMkUwMUU5RDhGREI5RUI0NjZDN0ZBMAorOjEwOEMwMDAwQ0YzQTE2NUUwMkIwRUY1NEY2RkQ3QTlCNDJFRERGQjYyNgorOjEwOEMxMDAwNUE4N0YzRjNENDc3QjIwODhFRTNCRkQ4MDY3MEY4NzQ5RQorOjEwOEMyMDAwMzgyNkIzMUI1M0MwRjFFMTUwRUJGOUE3MUMyRUU3QkU2OQorOjEwOEMzMDAwMTVFMENGMkNDRERFNzQzODdBODJCM0UxMjk1N0RFNzU4QQorOjEwOEM0MDAwODMwQ0YyNjY0MzQ5NTc4MzU1RkNGOTMzM0ZGNzAzMzJFRgorOjEwOEM1MDAwNTNDNERCMDM3RTRFN0ZEREI5RTFEMzA4NDdBQkZDOTAwNAorOjEwOEM2MDAwMEJDNzRGMTM1ODE4RUI2Rjk5RDJDQjg0QTQ3RTQzMDFFNgorOjEwOEM3MDAwOEU2NzgwREJFOTg3NzY2OTUzOTk4QTc0RTY2M0JFMzgyQworOjEwOEM4MDAwMDMzQUYzNTU3MkY4QjcwNDVGNjAwQUI0RjM5NUMxRDNBMQorOjEwOEM5MDAwOEJFRjdCODlGRkQxRTVFMEY0MDA4MjBFQ0EwRThEM0U5QQorOjEwOENBMDAwMDJGRUFEOTdBMjlEOUYyNUVBRjQ1N0Q0OEVGNEUyQjA2MAorOjEwOENCMDAwNjlGNTYzNDU5NzYxQjkzMzhCOTcyN0RENTFENDFFMkIzNgorOjEwOENDMDAwMDQzREUzODAzNjI4MTdGMjFENjRFRjk4RTc1NzE4RTA1QgorOjEwOENEMDAwRjNEQjk2QURFNkZCQjMyREYwRTlFQ0E1NzVEQTNBQ0UwMQorOjEwOENFMDAwMTE4QUMxQkFENkQ4N0ExQTFBRjFEQjY1NUVCMkQ3RTAxQQorOjEwOENGMDAwN0Q0MzNDNjlGRTk3NkJGOEJBRENDRkVEQURBRDlGQkExMgorOjEwOEQwMDAwMUFFMjE2RUI5MThBNEUyNzZBRURDRjgyNEUyN0ZBMkQ5MgorOjEwOEQxMDAwRTgwM0U4QjQxMkYxOUY0NEE3MUYzMzZCM0FCREQwNkY0QworOjEwOEQyMDAwNDFFNzQwQTdENUY4REU4QzBGNzM1OTY0RUE4RTQ1MDAwMQorOjEwOEQzMDAwQTBGNEQ5RjQ1RjZENDM2RDc1NzlGNThFREZDMUIzRTZBQworOjEwOEQ0MDAwNzNBRkU0ODczQUUyMTg0Njc2QTJDREM1RTVGQjgwREMzNgorOjEwOEQ1MDAwOEY1Qzg2NzA0QjcyMTNCRDE3QkQ2MURBQUY3OTJFMkIxNQorOjEwOEQ2MDAwNDVCRjkzMjdFRDQwQjkzNThDN0VFNzIxRENFNjdFNEI4RAorOjEwOEQ3MDAwRkQ4Q0Q2QTNFNjMyNkYyNDZFODFGNzdGRkEyNTZFMUYzNQorOjEwOEQ4MDAwMDc3OEJENTRGQzMyMkU2MEEzRUYyOUY5NDVBN0ZGREMxQworOjEwOEQ5MDAwRjA1Mjg0RTM0Q0ZDNTIzRkMwMkZBQjg2QzcyRkZCODhCOAorOjEwOERBMDAwNUYzQ0U1OUM1RjNDMjlGODA1MjNEMTI4OUYzNzk0RjA3MAorOjEwOERCMDAwRjI4RkZDQjlDNDBGRkRGQ0MzQ0FFODdCM0ZGRkIwQjIyMQorOjEwOERDMDAwQ0JCMEFDRjNDRjY1ODEzMkFBNkY2RTlGOEVGM0I2QzA4NQorOjEwOEREMDAwNEI5QjVGOUY0N0I4MTVENzU1M0Q0RjZFMTVDOURFRThEMQorOjEwOERFMDAwNjUyOEE3M0E1OTVGQjcxM0Y5QjA1QTA4RUQ4NUI3QjNBQworOjEwOERGMDAwNjIzREY1MkUwNUJGRjdCMEQ5NjA3RjZDRDVFODdFMTdEMAorOjEwOEUwMDAwQzI4M0ZFRDAyNDJEOUUyNUY1QjBBQjdDODNGOUQ4NTdDNAorOjEwOEUxMDAwOTkyODhCMjRFMTdGQTQ4NkM3NkYwN0MyNzdFMEY4OUQ2RAorOjEwOEUyMDAwQUM3NzJDREFBNUE5RDZFOTFFNkRCQzlCODJFQTNENTYyQgorOjEwOEUzMDAwN0M3RjI2QkRGMzI4RUE5RDZDN0NGMjdFQjIzRTc3MzVCRQorOjEwOEU0MDAwQTExQzMwRjM3OUNERUE4N0RGQkI2Rjg4N0UxRUQ2RjA5OAorOjEwOEU1MDAwRjZEMEQ5RjNGRDQzMjlGOEZFRjcyNkJFQUYxNDQ2NUFFMworOjEwOEU2MDAwRjJGREMzMjlGOEZFQ0Y1NjdDRkYxNUY4RkMzRkFDRjhBNQorOjEwOEU3MDAwQkNEMzNGM0MzQ0JCMDM1Q0JGQkJCNUY1RkRCMjc4N0VDOQorOjEwOEU4MDAwNDdDM0VGRUJGRUIzQjYwMzVFQjdDMjEzRTBCOTc3OTgwMgorOjEwOEU5MDAwNzg3RUM3NkE5RDAwQ0ZFRkZBNjlCRDZEMzFEQzE3NDA1RgorOjEwOEVBMDAwN0U0N0ZGN0REM0U0NTgxRkVFODc1QUMwRDE5N0RDOEZGMQorOjEwOEVCMDAwNEJFMUZEODA2OUZGQjEwMDc0NUVGM0Q5QTY1MEM0ODIxNgorOjEwOEVDMDAwMkZBMUREM0Y5MkUxRDdEQkRERTM5N0I1QjhCMzcyM0Q2QgorOjEwOEVEMDAwREFENTNCMkZGN0YyRkQ4NDZDRjU3MzJCN0VGODBBRUJBNQorOjEwOEVFMDAwRUYwQzU4QzhFMzFBMUI5NzQzREZGNkJGNDU3NkRFNTdGMQorOjEwOEVGMDAwRThERjZGRDVGRjMzMUE3RDlENDlGRjhGNDlEMkZGRDgzOAorOjEwOEYwMDAwOEY1OURFNzUzMjFFNEZEOTk2MUQyOTA5MTBCRTdBMkY1MgorOjEwOEYxMDAwNDVGOUI0RUJFNjJDMDFGREJBNDIzNTIxQTBGRDlGQUYyNworOjEwOEYyMDAwOEQ3N0JCNUYyMUZBRDJEQkVEOTIxMjgyODRGNTlCNjREMAorOjEwOEYzMDAwMjEyNjE4RkEzQjZGQThGRUNDNzAwMDdDRTMwMzI0REZFNworOjEwOEY0MDAwRDRGM0YxNzk4RkE2Q0ZDRUQ2MUVCQTMwQTg0RTBFNzBDQworOjEwOEY1MDAwMzkzRDE1Qzc1N0NGMzFDQTY5N0QxRUI2NzAxN0VCNDUyRAorOjEwOEY2MDAwRkQwMkVFNzdEQzgyQUVGMjM1N0QwOUZERDQ1MTNGOUFFOQorOjEwOEY3MDAwQkNCRjIwMjA2QkZFMjlFRkVGNkNGNTBEQzA3NzM5RjZGMgorOjEwOEY4MDAwMDdGRDVFNjEwNTlGMTkyRjY3ODJGMzk2MDEzOEFGMEVDQQorOjEwOEY5MDAwNThFODI1NzM3RkJBN0ZBREFGMTNFOUQzQTRCOENFMTJEQQorOjEwOEZBMDAwOEQ1RTgwQUYxQTExM0U1NzlCMkRDNjAyMDNGQ0FCRUJDMgorOjEwOEZCMDAwNkI5MDRDNjlEOEZGNEUwNzhGQTNFRTVDNzk3QjJERTY1MgorOjEwOEZDMDAwMUI3NERFMjI1NzIwNEFGMjk3NzEzREE3QUMyQ0E2QjgzRAorOjEwOEZEMDAwRUE2QUFENUYzM0ZDRkRFRDFENUQ2MzI3OTZEM0I4NkI4OAorOjEwOEZFMDAwNzFEQzhCQUI1OTAyRTU0NjA2REEwOTE0N0Y5MDI1OENCQgorOjEwOEZGMDAwMkY2NDM5M0I4MjE4OTdERDJDNzQzNDJDNDYzRDdBQTlCNgorOjEwOTAwMDAwOTdGNDJEMEJDRUI1OEM0RkU5NEYzREZFQTRDRjlCMDVCOQorOjEwOTAxMDAwMkJDRjUwQkY5OUVBQ0I5RThFMjZCNDkzODY1RERGRDlDNQorOjEwOTAyMDAwNjE2OTU3RkQ0NEIzQUI2MDdFM0YxRTEyQUZDMTAwQzVGRQorOjEwOTAzMDAwQjc3NEZDMEUxRTg3QUY1RjZEQjg0OTQwN0NBNzk1QzMxRgorOjEwOTA0MDAwOTBDMDkyNjlFMTBFREE2Q0I1OTVDNjU5MkZEQTRGNjU3QQorOjEwOTA1MDAwNDAyRkQ0REYwQjk2NzFCRjgxRkUzNkU4NzA3NTIyRkQ3QworOjEwOTA2MDAwN0M1NUI4RjQ3QUE5QzdFM0Y1NzBGRjhDRTIxRDVFMkUzQgorOjEwOTA3MDAwQjdFODAzOTQ0RjFDRjY1QkVFMUZFOENGOERFQjY0NTUwOQorOjEwOTA4MDAwMDJGRDczNDI1NjMyMzA1RUI4NTFEMzgzRTA5OTA1QUY4QQorOjEwOTA5MDAwRjJGREVCRUIwRENDMjNDRUUzOURBNkZBNTFDNkU5OUU4MworOjEwOTBBMDAwMDU1RDY0REY2MTE4M0U5OTZFOEU2QTc0QjAyRDI3RkNGMQorOjEwOTBCMDAwNzQ4MEU0NDgyODg0NzQwREU1Njc0OTVFQkFBMEVDQTM4NworOjEwOTBDMDAwRjI1RkE5MkNGNzk3OUZBN0ZBNDE1RTlGQzlGMkIwRjAxMworOjEwOTBEMDAwMENFRDVFQTE3NjUyN0YzRkM3QThFQ0VEMUZGNzM1MUE2NQorOjEwOTBFMDAwMjdEMDVGRUVBNUVGODVCQ0ZFNzBDNzQ5NUE1NzNFRkZGQgorOjEwOTBGMDAwMUU5MUU2RkZCMUE0NjZFMEZFRTgzN0EzOEQxNDI3OUExRgorOjEwOTEwMDAwMUY1RDRFQ0Y0REVCRTQ1QThDQzczREIzQUVBRkI1MTVFNgorOjEwOTExMDAwOUVERjlDREYyOEEzREQzRjdGRTk0RjY4RkY1RUVGRkYwNgorOjEwOTEyMDAwNEFGNDJCOTBERjE1NjkwNkQ5NDUyNUI2RjAxRUVGMDBFRAorOjEwOTEzMDAwQkYwREMwRDFBQUU5RkJERTdBQTQyMzk3Q0FGQURBMkJDNQorOjEwOTE0MDAwQTBGRDk0OEY1QTVCMEQ3OTRFMUQ5NDNGRTM1NkE0Q0YzQQorOjEwOTE1MDAwOTJFM0VBQkExQ0ZDQkI0MzNEMUQzODNCM0EzNkNEOTczRgorOjEwOTE2MDAwQjE4MzMwRkVDN0RFRDI3ODhDRThCQTRFQjZFMjE3N0QwNgorOjEwOTE3MDAwREVBOUZBRDdFNzlENEFDRUU4RjhEM0RGNkYyRTlEMjAwRgorOjEwOTE4MDAwRjNGQzlGQjgwMTJGRUVEMUY1OTRFRjczQTVBMEMxRTlEMAorOjEwOTE5MDAwNzM2OUZDQzZFQkNEODI3MTFFMkEyN0ZBNTA5MDdFNjc1OAorOjEwOTFBMDAwNjk3RTlDNTkyRkU4RTNGRUREMTExOTkzOERFREUwQ0QyQQorOjEwOTFCMDAwMkQxMzJDRjAzQjRDQkMxRDVEQjcyQzVDNkY0Nzc5REM0QworOjEwOTFDMDAwRTVBNkZEN0IyNjUzOUM1RkFGRDc5MDYyRkU3NUQ5NUMwOAorOjEwOTFEMDAwOEYzMEE3NEFGM0Q5NzI2QjQ2MUNFRDhFMkQ4QkZFMjA4MworOjEwOTFFMDAwNjM3MEM1MzNFRUUzMkFDQ0Q3RjQwODdEOUYyQzQ2Rjk5MworOjEwOTFGMDAwNzJBQjhGRjIzMTFBMTY3RDUyRDU5Q0Q0RkZDMjAzN0YxOQorOjEwOTIwMDAwNzI2MUJDQjc2MURDRkE2QzhDQkIyQzY0RDJDN0M5Rjk0MworOjEwOTIxMDAwMEVFNjcxMUJBMkFCODk2RTYzQ0Q0MjgzOTVCRjc1MkNBMAorOjEwOTIyMDAwODdGM0Y1NDI0QzkxMTFBOUJGRTNDOUZCQzg4Qjk0MDlBMAorOjEwOTIzMDAwMEU4QzRGMkM4QTE5Rjc3MzQwNDMzQTkwM0UxQTM3OTk5NworOjEwOTI0MDAwREYyN0VERTc4OEQ4M0ZBMzc5Qzc3MDMzMEZGNTVFOUIyMgorOjEwOTI1MDAwOERFODZEMjdFMDBERkRDMDYyNTA5N0Y4M0M5NjkzQTUxMAorOjEwOTI2MDAwRjE0MTBGRTFGMzVGMERDRkIxMUM2RTBGMzk1RDJDRTZCQworOjEwOTI3MDAwQzkxQUEwOUJEQzQ4MDc0M0ZERTRBQjE0Njg3RjMzRTBDOAorOjEwOTI4MDAwRDNGMzIzQkE0ODRGRERFMUQ1Q0JBMEI3MDBGRkUxNzI5RAorOjEwOTI5MDAwQ0RDRTI5RTVERjZENTg0NkZGQzdEMzczRDAwNjdDREMwMQorOjEwOTJBMDAwOUVGREY4NjVDMUIxRDA1Rjc5MjQ2ODkzQTlGQ0E0NDQwMAorOjEwOTJCMDAwRjYyMTJGMzNGNkY4OTMwN0M5OUU5NUNGMTU0MkMwRkZDQworOjEwOTJDMDAwNTJGNzkzODc4QkM4OUZEN0VDQjFFRTI3QzkxRUVCMkZCRgorOjEwOTJEMDAwQjMwNDgzRjk3NEE2RjU5NzU1NTcxMENBMjNGQkNCMzExNQorOjEwOTJFMDAwMkNFRkQyRUNGOEY2RUNFRTI3NUJDOTNFMDlCNzY1MjcwOAorOjEwOTJGMDAwRTlFRjVBQzZFM0NCNUZCNzdFRUMwQzJFRTlDMDdDQTI0NworOjEwOTMwMDAwNThBOThERkNCRDM0MTMzRjNFOThFREEwN0E2MzcyMjNCQgorOjEwOTMxMDAwNzc2N0MzNzNENjJEN0QxMkM2MUIxQzc5MkYwNDUwMEVBMAorOjEwOTMyMDAwOEMyODNEQTE4RTA0RkExRjUxQ0REMzY0NTgxOTFGQjc2NAorOjEwOTMzMDAwQjM3NDJERDkwRDlEREFCQUMwRkZENkEzREUxQjU4OUY5QQorOjEwOTM0MDAwMUVEM0ZBRjBGNTA4NTdGNkQwRkFGOENBN0I2OEJENkM2MAorOjEwOTM1MDAwNThBNkI4MUZERjhGQkZBMjkyREIxQkIyOTNFRjJCRkM4NgorOjEwOTM2MDAwMjY5QkM3NURGRjk0MkQ2QTRGRUU5NzY2OTRERTRFRjEwMworOjEwOTM3MDAwMURGNzBDMUJENUNGRDA5RTY2MzlGRUE3NkNDOUEwNTczMAorOjEwOTM4MDAwMEVFNDQ1RkU5MDlENjRCN0MyRkI3MDU5MjVDQUI3NDBGNAorOjEwOTM5MDAwMTZFRUIzRDY5NjRBMzcyMjNERkY1Q0YzNEY2MTlERUU0MQorOjEwOTNBMDAwQTA3NTJBMDlBNDQ1RjhCQTNENjJCOTZFNjVDMzVCQjdEQQorOjEwOTNCMDAwMTdENzQ1NDg1RUE1NUFCNzZGQ0UxN0MzNTY3MUI3NjcyMgorOjEwOTNDMDAwMzUzQzdDRDBGMEI3QkI5MDJENTdCOUZBMUNCODBGQjMyMQorOjEwOTNEMDAwQjk3NEJCMjFBRkRBQjU2Rjc2MDI3M0ExRjVCQ0VBRjVCQgorOjEwOTNFMDAwOUVGNDZBOTREQkU2NzE1RkZDRTIzRjAyODhERjk5OUY5RQorOjEwOTNGMDAwM0EyREU1RTM3RjZCRjJGMTg1NzUwREQ0MEUxNjU4OTE4OQorOjEwOTQwMDAwNzI0ODBFMzA5RUY3RDI5RjI3MjY5Qzc2RDJGNDVFQzQxNworOjEwOTQxMDAwM0NCNEVGMTJFQjMzMzYzN0ZDMDZFRDU3MkYwRThBMENCNworOjEwOTQyMDAwRjdDNzE3MzI2MzVFMTk4QkVBNzlDMTNDMEZGNjQ1MDkxRAorOjEwOTQzMDAwNUM1MzQwRTE4QjMxMjEwNDk4NjI4QkE0RDlCQTVDMzEzMgorOjEwOTQ0MDAwRTQ4N0NEOUIzQkZCMTBFRUMzMzc2QUZCRjAyMDVGMEMzQgorOjEwOTQ1MDAwREY5NzlBRjJDNkFFNkU1ODE0QUVEN0JFOUZBNEJGRTM5NAorOjEwOTQ2MDAwMzRBRkI5MEFCNzFCRTc3QUJEQTQ1RkU3ODVFNzg3RUI5RQorOjEwOTQ3MDAwOTNGNkUzNUVGQUE3Njg5OTg3NUU5N0EzRTMyNTFDQUU4RgorOjEwOTQ4MDAwMUYzRDE4MkY4QkMzODI0MzU2Q0U4QzFGMzMzRTZBMjU1NworOjEwOTQ5MDAwOEVBRjQ1MUFCRUNDRjgzMUUzQTE3MUVFNkM1QTdGRjM2MgorOjEwOTRBMDAwRkM1Rjc0ODUwOTNGMkYwMjdFMzA1RkQ4OEMwRkM2MjI4NworOjEwOTRCMDAwNTcyMEREQkUzNDVGNjQ2ODFGNEYxNzY3REEzMTRGQTA1NQorOjEwOTRDMDAwNzFCNkMwMzBCRjY4MjkwQkE1RjNGQzYwNzVENjI1NDk3RAorOjEwOTREMDAwRjA5QUYxNjhDNjU3RTNBMzJDOTQ4MDdFMUJFRkY0RDE3OQorOjEwOTRFMDAwRkEzREE3RTE0NzRDN0M0OEYzMEFDM0JDREFGOUJDOEVDRAorOjEwOTRGMDAwRjNGQzU1OTlFNjc1OTU1QUYxNzgwMEJFNDc1QTQxREE2MgorOjEwOTUwMDAwMkE1NjdBODRDRjY3MzFDQ0E3NUQxRUFDNEYzRTYxRDUxOQorOjEwOTUxMDAwNEQ0ODI3NEI0RDc5MEI2NkY4Q0NGMENGNDQzOTM4NzU2MAorOjEwOTUyMDAwRjAzRUZFRTQxQzVGODBDRTJGOEM2NzIxNkQxRjNGODNEMQorOjEwOTUzMDAwOEUzNTg0QjI4N0NDNUIxOEUwNzM0RTVGMEJBM0IzRkIxMAorOjEwOTU0MDAwQzdDMzdFMDUxNkU5MkZDQjgwREY5OTRGRjhCN0NFODNDRQorOjEwOTU1MDAwN0ZBRjBEOEEwQUU2MDlDRTlFM0ZBQTBERTcxRjY2RTE5RQorOjEwOTU2MDAwOEM0NDA5REFGQjdENzY5NDIzNTczMTMwNjNBMUREQzU0NQorOjEwOTU3MDAwMzA0OUQ0QjdFMTdBMzc5NUY1N0U0Rjc0N0M2NDI3M0Q0NgorOjEwOTU4MDAwMUU2MTREN0I2OUZGNURDOTk4M0IyRUI1N0M1OTFCNzRFQworOjEwOTU5MDAwRDA3ODY2M0I2NTY2QzVFODBDOTQxNzY2N0NFODc4RkE3NworOjEwOTVBMDAwNTY4RTk2REYzMDlFOEQzRjFCQkNGNEEwRUM0NTdGMTY5NworOjEwOTVCMDAwRTM2OEIwOEU3RENCMTlEQjVEMzFCMDdGQ0MwQTU1NkU5MAorOjEwOTVDMDAwNEZFNjMwREFGRjVGOUQ5M0E5RDkxRDREMTQ3NzU4QTA1RgorOjEwOTVEMDAwRTk4NTYzNzZENkYwQTA5N0VGMjM0RjQ4OTI4RjBCRjM3RgorOjEwOTVFMDAwNkE1N0U3MjRDNUZCRjQ3RDY0MkZFQjI1RkM3REQ3RTVBNgorOjEwOTVGMDAwNEQ4OEUzODlFRURFRUZBNzBGOTI1RjdBQkU2Njg0RjJCNAorOjEwOTYwMDAwMzVDNThDOTUwQUM1QzUzQ0U5RTM1OTA2RDhDNThDQ0Y0QworOjEwOTYxMDAwMUJGQzk4OUI3MjMwQUVFNzI5OEVBMzExMzBGMzg5NUY1MworOjEwOTYyMDAwNkM5QUE3MENBQ0RCRTYyNTdCM0IxMDVDRjdEMkRGQzc1RQorOjEwOTYzMDAwQTg3Mzg1RTc3Mzc4QjQ3NUFCRDVENkFEREY4RTJFODM2RQorOjEwOTY0MDAwRjc0OUY4M0REMUExRDk2MTY1NUExQzFGRkY0MEY5NDQ4MworOjEwOTY1MDAwQTkxQTFGQ0E3RkQ1RDdEMTVEMDZGRTg3MjE4RkIwODM5NworOjEwOTY2MDAwRjBBN0FGMjczODExN0RDODk3OTFBMDQ0MzlDMzM2RTZEQgorOjEwOTY3MDAwMjJGRjM4NzIxM0NGQzc1OEM4OTQ1RDk4MUZCNDMwNkE2MAorOjEwOTY4MDAwM0Y5MURDNEYyNDRGMjIzODIyOUJERDVBREMyNDQ0RkRERAorOjEwOTY5MDAwMkNDRUUzRkRCMDMyRUVFN0Y1RDM3RDBDREEyN0U1M0ZDMworOjEwOTZBMDAwREE1QzYwNEE2MkZCNEMxNjQyRkYwOUZBQ0I0MTdEQ0Y3RgorOjEwOTZCMDAwMzYyNThEMzM3MkYwQjhBOUZBMzNCNzEzQjVGRDVCRDFGNworOjEwOTZDMDAwMTkwQTg1OTJFNEY0NkY3MkI4OUUzQzExQUNFQ0IyOEQyRAorOjEwOTZEMDAwNEM4REJGQzUyRUJGMkEyNUU1QzUxRUNGNzMzNTU4QzU5NQorOjEwOTZFMDAwQzVGNEZFNzRGRERENkYyN0M2OTYzRjk1NkMyNzdBMzc2QgorOjEwOTZGMDAwMzQzRTc1RjhBMjI0M0IzMUQ2RjgxNEM1MTVGNUYyNTk1RAorOjEwOTcwMDAwREE4OUNGREZENUY4NTQyQkNDRUYxRkFGN0U4M0YyQzdCOQorOjEwOTcxMDAwNEYzNDgxQzAwNDNDRkFBM0QzRDg5QjdFOTQwRjMyRTkyNgorOjEwOTcyMDAwQUZFMjA2RjBBODMwRjk1QjUyQzYyMkJEQkJBMzA1QUE4MgorOjEwOTczMDAwOTQ5NDJGN0IyQzQ3MjFCOEZEQTUyQUVEOTc0MUQzMkU3OQorOjEwOTc0MDAwNzRDNUZENTI0ODQwQkNEREFFQzVDRDgwNzBDN0NFRjZCNQorOjEwOTc1MDAwMjVCN0UzN0U4ODNFOUVEMzI1MTMxQzBFN0QzQzE2NkFGQQorOjEwOTc2MDAwQTZGQ0ZBOTk4Q0Y0ODg5RTA3QTJGM0I1REVDRkJCMzkyQworOjEwOTc3MDAwQzY3OEREMzBGOEY5REQ5Q0FBQzFGQzJDOEE0REFGREYzQworOjEwOTc4MDAwOEE3MkUyMjk5MUZDQjBFRjA0NkZBMkY3RTY3OEMwODlGMworOjEwOTc5MDAwMUM2RTFGOEUxMDIzMjc1MDJFRjQzNDNDRkY5RDFGNDA1QgorOjEwOTdBMDAwQkIzNUZCOUMyMTU0QzNBQkJFRkZERThGQUIxNEM0MTM4RgorOjEwOTdCMDAwNUZGRkY5NEIxQkVGQUNDMjc5OEQ5NjY0REFERjI4RTJDQworOjEwOTdDMDAwNzExODQ3QjM0MEZFQUJCQkM0MTFERTA3Q0ZCNzAzQjU3QQorOjEwOTdEMDAwMjM3MjkzRTA3QTNCNTA0RkU1OTEzMzM4NUMyN0EwQ0Y1QQorOjEwOTdFMDAwNzYwNURCNkQ2RjIwN0ZEMUM3RjdCRDRGMjgwQTlERUY0RgorOjEwOTdGMDAwMTMzRDhDRUMwOUQxQzk5Rjk5QjlEQzJFQ0RDQ0U1NzgwRAorOjEwOTgwMDAwNzY2QjRGRDcyOTgxMTYwOUU5QkEwOUY3MkRBNDE4RTUxNworOjEwOTgxMDAwNDFCQjRFNDlGNERFMjEwODk2RjY5QURFOUZFQjE0MDgxMAorOjEwOTgyMDAwNjdDNDk3QzdEQ0RFNDFFRjcxM0VEODVFRjQzMzgzN0RCOQorOjEwOTgzMDAwOTM4RkVEQUJGMEM5RTlERDc1Q0FDM0UxRjA5QkZCNDkzRAorOjEwOTg0MDAwRTdFRjM1RkUzM0MzNzE2M0NFQjQ2MkM0Q0JEQjAxNzU4MQorOjEwOTg1MDAwNDQyRThGNkY3MzM5RUM3REYyQTgzMDdFMzhGMjk4RTc5MgorOjEwOTg2MDAwRUI1RjkxMjdCOTI4QUU3N0FCMTAxRjBERjJBOUJERUNDNQorOjEwOTg3MDAwNDQxQkM5QUQxMjU3MTM5RTkzNEFCMjlGMDQ3RUVFODZENQorOjEwOTg4MDAwOUZBQjE4QjA0RkZCMkU5OTUzODlEMTZCQTZEQzFCMUFFNgorOjEwOTg5MDAwNkM2RkJENUVGOUM5QkMzOTU4RDBDRTRGN0M1Nzk3QkRBRgorOjEwOThBMDAwMzEyODgzM0RGNzlBNTY1Q0E0OENEQzgwQTFGRTJCQUI1QgorOjEwOThCMDAwQjk3REQ2ODhGNjU5ODhFNDk2QzFFRTMyREI2NzVFRDA3MgorOjEwOThDMDAwRjc3MzgwMkU5NjA2MjUxOUU5QzI2Q0E3QjU1N0NFMjNFQgorOjEwOThEMDAwQkJBNjFERUMxQUNDRDcxRTZDQTc3MTc5NzM1QkQ0QzZERQorOjEwOThFMDAwNTRBOEY3NENCNTQ4N0VDNjMzNjVCRDRGNUM4Q0ZBNjIxMAorOjEwOThGMDAwOEE1RDIxN0Q1MUQ2NzdEQjFDRkEzRTkxQzZGMTZBRkU2NgorOjEwOTkwMDAwMURENEU3RTcxRDQyOUVGODY4NzhGNzZDRjU5QkRFQzYyQworOjEwOTkxMDAwQTRGNTdFNjZDQTlCNjNEMTJGRDg5NTIyQkY0MjhGRDMxMAorOjEwOTkyMDAwMUNCQzk5RTc3RkJEN0U4NzEwNzcyMkRFNkUxMTZERDg1MworOjEwOTkzMDAwRUZDMjBBMUZFNUFENUUyMjdBNjk5Q0M2QUQ2MkRDNDlDMgorOjEwOTk0MDAwMzg1NEQzMkZDOTE5QjAxQjk5NTg5REYzM0NFMjYxOUI0MQorOjEwOTk1MDAwOURFMUY5QzFBMjFCN0IwRDc2RUVDMkE4RDE5RThCMzQ4RQorOjEwOTk2MDAwODFGREEzOUNCRDFENjhCNkZGQ0M3NkNDREE1Q0NEQUU4NAorOjEwOTk3MDAwOUJDMDI2QTBGREYyQ0NCQUZERUNDREQxMDM3NkNDQUNEOQorOjEwOTk4MDAwMTRGQkRGQkExRDczODFBREVFRTY1QzFFMTdBNEZEODNFOAorOjEwOTk5MDAwNTk5MkY1RkVGRTU1OUE3RkNBNDJEQzFGQkM0NDdDOUY1QgorOjEwOTlBMDAwRDZFQjQ0NDg1MjEwN0ZERTlCOUVBNDczMURERTdGOEE1NworOjEwOTlCMDAwNjFBQkYxQjZFNzcyN0Y3Qzk3ODM5MUJDREQzNUMxNDMyMworOjEwOTlDMDAwNzlEN0REMzc5RjlCREI0QkVCQTVEQzVEOERFQkZGQTRFRgorOjEwOTlEMDAwOURFNDYwMkFGREU2OEU4QUFDMTQyNkU2OEIwQUY0RDQ1OAorOjEwOTlFMDAwRDc3MzQ0RDRDRDkyRjVDMzg4MTQ3OTBBQkI3M0I5REMxQworOjEwOTlGMDAwQ0VCRTg1RDlEMENGQ0U4QzMxRDVDQTJGRDVFQjgxM0YwNQorOjEwOUEwMDAwM0ExRDYzRDQ1MDNGOTEwOUYwQUQyRUI1NTFEQzVGRjc5QworOjEwOUExMDAwNEJERDc2N0VERUQ3RkVDOEY1MzFGNDRGNDcwMDdDMDg3QgorOjEwOUEyMDAwODcwMkYwQTExQzJFODk3QUE4M0MzMkVBQTdFN0E4NjgzMQorOjEwOUEzMDAwMjYzRDRCQTMwNUY0N0Q3NDc0MTQzREM3NDQ0QkU4RkRFQgorOjEwOUE0MDAwMzlEMUYzQTg1QzE2OUQ0OENGQjFEMTBBN0E5RTFCQkRDRgorOjEwOUE1MDAwOTA5RUU3ODFERUMyN0FFNUQxNUE3QThFOEI1RTRFRUYxOAorOjEwOUE2MDAwQzc0N0U3RDBGM0ZDRTg2QzdBODZBMkRGQTZFRjE1RDFGMgorOjEwOUE3MDAwNDY3QTRFODgyRUEyRjcxM0EzMkJBODVDMTlCRDgxQ0E4MworOjEwOUE4MDAwNTVEMUVCRTkzOTI5RkE0MzdBNEU4RUI2RDA3MzRBQjRGMAorOjEwOUE5MDAwOTlFQTREOEQ2RUExRjIwNUQxOUZEMEYzQzJFODc2N0E5NgorOjEwOUFBMDAwNTY0Nzc3RDI3NzlEOUYzRDlBM0RGRDc0NzA4RjRDRjk1NAorOjEwOUFCMDAwRjYyQzUxOEVGMjMxMTUxRkJFQTFFOTg1NkZFNEFBNEYzNQorOjEwOUFDMDAwQTAzQ0Q1RUIxREQxQ0UxRDk4RUJCRDlBM0I3NERFQ0RFRAorOjEwOUFEMDAwRDE1QzRFOUYxRjg0OEVERjg1Qzc2OUY1NzVEQjFDMUMyQQorOjEwOUFFMDAwM0E4RUMwQ0EwMzY3RDhCN0UyRjMzQjlDQ0JEQkVGOTI1OAorOjEwOUFGMDAwM0FDOERFRDhENUM0MjgxRkNDNTdEOTIzNTAzRTQzNTA4RQorOjEwOUIwMDAwOUE2MTQ1NDc5OTQxN0VCRTZCNEM2RUU0NUQ5Q0E3MzdEOAorOjEwOUIxMDAwRUZBRDgzQjgxRjc1NjVBQzI3MzAwREU5MjUxNDQ4OUI2MAorOjEwOUIyMDAwMDZGRDhENjhCNTkxN0JBRDMwNTlDMEIyNTJDRkU0MDRDQgorOjEwOUIzMDAwMUI4OEU3ODA3RDY1RDA2QkVFQTA0RDhCRkZGNENDOUMzRAorOjEwOUI0MDAwODhGMDlDNUIzQTgxRUM1NzZEM0ZGOUM4Q0QyMzE5RkEzOAorOjEwOUI1MDAwMURCQjFDMDk0MTQyNzlCOTk2QjE2NDNCN0NENzg2QzVDRgorOjEwOUI2MDAwRjcyNTlGRDM3MDA3MUQ5QzhGMzZCMUM3MzA0RTU2RDI1NAorOjEwOUI3MDAwQTFENEUxNzlDMjUxM0JENEM3MzBDNTczNzQzQzUyOTcyQworOjEwOUI4MDAwMDZFNTczN0UxNTdCMEM5RjYzQkJFMjc1MUU3ODlFQjc1RQorOjEwOUI5MDAwM0ZGMTE4QkE0RkUzMTJCRDc1NUUyODlGN0Y5ODFEQzAzNAorOjEwOUJBMDAwRjA1MzQ1OEYzMkNEMDdFNTg5NDdENTAzQjg0RDUyRDVERgorOjEwOUJCMDAwMUI5OTk2QUUyMDNDRjE5Njc0ODA2N0Q3NkI2MDY4NDEyNAorOjEwOUJDMDAwNzlDQUZCMUQyMkI4MjUwM0VCMEY3NkRCODM0OUVCRTI1NAorOjEwOUJEMDAwMkVFRDUxNDVGODY3RTE4RDcyMDVDQUQ5NUQ1MkFGM0I1NAorOjEwOUJFMDAwQjM3Q0YwRkE3NEUyQkM3MTlFQTA1N0Y2NkFGQkU4NzI4RgorOjEwOUJGMDAwRDI3QTU0MDUwNTNEMUU5ODE3QUMxQTg4MDc3NkI2M0VGMgorOjEwOUMwMDAwNDdGMUMwQ0UzNEI5MTY0MzVEN0Q5NzMwNzlCNzgyNzQ4MQorOjEwOUMxMDAwQ0NGRDg0QjRCNjkxQTQ5Rjc0QkEwM0ZDMUFFQzQ5Qjc4NgorOjEwOUMyMDAwRDZFRkFFN0U3QkQzMUFCRjU1RkZDQkYwN0I1MEEzRTdCOAorOjEwOUMzMDAwNTRGODdEMUFFNzkxNzc2NjNFOUUxRUU0NzYxNUYwNzEyMgorOjEwOUM0MDAwNUQzMDNCNzVCRDE1NDEyRTRGQ0Q3OERFMjVDOUU3MTIzRAorOjEwOUM1MDAwQkVCQ0NDMTZBQjE4NThCNzZCMzRGQTNFMTM1RTIzRkY2QworOjEwOUM2MDAwQ0JGMDdBNTE3MDY4QkNCMjRBM0Y4RjMzNkJGOTY5QTk2NworOjEwOUM3MDAwRTRDRDkxMTRFNzQ0QkVBN0UxMzE0OUNFRjE3OEE5MENCNworOjEwOUM4MDAwNzI2RTU0NkEzOTU3OEI3MDY1MEYyMUJGNTJFNDNCQUMzQQorOjEwOUM5MDAwRDdFOEJCM0IzQjFDMEI2NjlGMzlBRTdGOUI0REFFQzVFNworOjEwOUNBMDAwN0M5N0Q4Nzg0NjdFMDJEODk3QUQ5OEJGMzMyMkE2NENEMQorOjEwOUNCMDAwQTA2RDJDMTRDQTg4QzcwOUU3OTE5RjVFMDJGNjg2MzQwRQorOjEwOUNDMDAwODE2MUFBNjMwMjlGNTc1NDY2REExNjk3NjM1RTgzQzY2MgorOjEwOUNEMDAwNkZGMkEyNjAzMkJGRTlGQTdFODAxRjc1QkFDOEVBQTRBQgorOjEwOUNFMDAwNzMxNjQwQUY5ODRGRDhBREUxNjlBMDFGMUU4RkQ4NzA5MgorOjEwOUNGMDAwNTM3RTY3N0I5MjFDRUMwQzE1NTA1OUFGOUY4QTdFNUY5OAorOjEwOUQwMDAwRDdFOUI3RjUzOURBRUZCRkEyREEzQURGRTRDRjQxNTE0QworOjEwOUQxMDAwQ0IzQkVBNTM5MUNFNjMzNTRDQTZGM0NFQURDNzQ5M0U1QgorOjEwOUQyMDAwNjU4MjdDMTI0QTc4NzgwOEM3MkY4Q0E2REQ4NzcxREFBNQorOjEwOUQzMDAwODc4MzM5OUEzRjJFQTc3REQzRjdGRjhGOUVCNzgxQUZEOAorOjEwOUQ0MDAwNEU3RTY2QjVEQzhERTcyQTQ2ODAxRTUyNTA0RTU2MDM4NQorOjEwOUQ1MDAwRUM5NUE4RTcxQ0I0RUUwQUUzRUJBODU0QjM3ODQyMjBENAorOjEwOUQ2MDAwQkMyNUQwNkY4RUQ5RjhGOThDMjM4RTJFOTVGNDhFMjNENgorOjEwOUQ3MDAwNTNDNkZDOTNFRUVDQzgxM0MxMjFGODQyRjYyODE1Qjg3RgorOjEwOUQ4MDAwQThBRjA0NTdDREY0RTY2MTVFOEU5Qzg2RTU5N0EwN0M3MworOjEwOUQ5MDAwREIxNENDMTNFQTY1NUFGOTM2RUZENDJGMUY3Rjc4NjVCMAorOjEwOURBMDAwQzc4QTIzQjg0Rjc1NjE1MDNEOEFGMDAwNURCRjgyNzQ0OQorOjEwOURCMDAwQUQ5RTIzNEIxNDFGMUVFNkZFOTNDRTlGMDNGQzI0NTczQgorOjEwOURDMDAwRThGQ0I0QTg5Q0U0RTE1QkMxQTRGREFDNTRGNkNEMkU0NAorOjEwOUREMDAwNEQ3RTdFMTIxQ0RBQkVEMUU5RkVBQ0VEMUIwRERFMzdFNgorOjEwOURFMDAwMzVCOTk0OEFGRjY3M0VGMUZDOEUzRDZDMjBGRUU3Q0JDRgorOjEwOURGMDAwN0ZCMTQ3NTJEMERFOUVDNkRFOUM4ODcxQUYxRTRFRjcwMworOjEwOUUwMDAwOENDN0Y5NTQ4Q0ZGMDExREI4MkI1REE2QjhBRDMwNDM0QgorOjEwOUUxMDAwOEJCQjBDMTlBRkQ1RTNDOTdBQkM0RjhGRUJBNTZCNzQyNAorOjEwOUUyMDAwODUxNzA2QTAxRTRGOUYyMjRCOEJBOUJGNUU3NjE1RTZCNQorOjEwOUUzMDAwMzdFNUQ5MEM3QzhENzIwQkY3RTc1RDZENTlEMkM4RjIwRQorOjEwOUU0MDAwODE3RTE5NkIyMjM5RDVEOUMwRTRGNjRDQkVGRjlBMDE0OAorOjEwOUU1MDAwRjJBNTYzM0QyMzNGMkZGNjhDNDhGRDlGNTQ2REVGNjFDMworOjEwOUU2MDAwQ0VGN0M5NEE0MDIwQ0EwNTk1Mjk3MjhFNzYwRTgxODhBMAorOjEwOUU3MDAwNUMyNjdBNzUzMkQ2ODVGRTM2RkI1MUM4RTVDMDM4RjdDOAorOjEwOUU4MDAwNjcwMjUzMDFFRTIzOUY4OUY0OTQzMEMyMEQ4REFFMDgxMgorOjEwOUU5MDAwNTU4NEIwNzE2RDQ2NzUwOEY3MDNDNTM3QTEwQzcwRDZBRgorOjEwOUVBMDAwNjc1NDY3NjBGOUM4OTE4OTIxNjYxMUJGQkIzQUIyQzg4RgorOjEwOUVCMDAwMTA1RjMyRTNBOUJGREU3N0RBMjg1RjYxRTcxOUY2M0Y2QQorOjEwOUVDMDAwMkZDQTczRTg3NkU3RTQzQ0RDRkY1Q0QyRDdFQTUwMDZBMQorOjEwOUVEMDAwRjYzRkY1N0RCREJDRDI4NzJFQzU3Qjc2RjI1NjcyRkI3MAorOjEwOUVFMDAwMzM5RkM1OUI5M0VEQTZBNEZEQzVEQUJDMkFEQzRGRUZEQQorOjEwOUVGMDAwREY1RkVDMTk5M0JDQkZCODI2RkYxNjNDQkE3RjRGRkY1QgorOjEwOUYwMDAwRkU2MkE0MTJFQkFCRkVBRTBBQTQ0RjNEMUZGNjg4ODM5RgorOjEwOUYxMDAwRUYwM0IwODk0RjA1MTQwQkZBNTg1MEYxNzgzNkQxQTNFRQorOjEwOUYyMDAwRTY0RjBDRkFBRUM1Q0RDQzdFRjA5QzNDNjMxQ0ZGNjRDMgorOjEwOUYzMDAwNjg0RTQ2MDIzRkE2ODhFM0VCRjEzQ0REMEZDNjc4OURGNAorOjEwOUY0MDAwNkNDOTc3NDZGQ0VCRTMyRjEwQjgxRkNCRUMwMkM5M0I4MgorOjEwOUY1MDAwNUQ2RjgyM0M1OThBRjg4NjY2MTQ4RjU2OUQwMkU1NkJDOAorOjEwOUY2MDAwOUQwQzM1MkFFNDE3QTU5MDJGRkRGQjA2MkMzMURBNkFFQgorOjEwOUY3MDAwOUY3NTgxOTY3NzYyN0VGRkEzM0NBRTk3MTZEODc5OUMzOQorOjEwOUY4MDAwNTJCODdFNjkwNEM3NUQ5MEU3MTI5QzQ5NzZEMjhBM0MzQworOjEwOUY5MDAwQUVDN0Y1RkQxNzQ3RkVBOTJBQzRCM0MzMTE1MUFDRTZGRAorOjEwOUZBMDAwNkRERTQ3NTk4MUI2NjAxNUM3NTNDODQyRUZBNUMyRDNDRAorOjEwOUZCMDAwNTE3QjA3RURDQjFENUQyQUQyNzlERDkzOTFDOTc0RUZGQQorOjEwOUZDMDAwNDMyQUI5RjAwQUQyQ0Y2OEM2RTZFNTczM0QzNEIwOEVCNQorOjEwOUZEMDAwRDY3OEQzRjM2NENDRkI1NUZEREYxN0I5RTlGQzhEMzk5NgorOjEwOUZFMDAwNUZFNjIxMEQ2RjRGNjk3OEY5NTdFN0NCM0NBNUUxRUZBQworOjEwOUZGMDAwNjkyRDNFQTNDN0IzQUU0ODIxRUYyRkIwRDUzRDkwQzcyMgorOjEwQTAwMDAwRTM4QzQzQzY2NUNFRDNGMzdEMzRGQ0IwMDM2M0U5NUVENQorOjEwQTAxMDAwOEUyRDNERjZCODVCNDA3ODZDQjQ3RkQ5RjA5RjYyMDgxNgorOjEwQTAyMDAwRUQyRkJEOURENzI0MkZGNEZDMURCREVDMzkyNUIwNzg1NAorOjEwQTAzMDAwRDIzRTgyNDdFQUEyMzhBOUU3OTQ0NEVGQ0RGQzc3NUI5MQorOjEwQTA0MDAwNUVGRkZFMjJGMTlGQkUyRUE5RDY1OTVGMTdGM0ZCRkJFMAorOjEwQTA1MDAwQjQ3NTM5QkFFODRGNDEzQ0VGQjJDNUNEMkNGMzg5NThGRAorOjEwQTA2MDAwQkUzMUZFNkVDRTAzNDhCNUNGRkQ5QUQ2RkZDOUM4RDQyNworOjEwQTA3MDAwNUM5NENCMEQ4RUQ4RThFMUYwQkQ4RTlGMTdCRkY4QTM5RQorOjEwQTA4MDAwMEJGOTZDQ0IyOUU3MENBQkY1Nzg0OUQzNEZBMDRGMzdEMAorOjEwQTA5MDAwMjVFRjgzRkFFNjNGREY4QUJEN0EyNEUzM0VBOEFFNEY4MAorOjEwQTBBMDAwRjU3RDUwNEZBNTc5MUZDRDdBMUY3NDBCQjM5NjhGQTlGQworOjEwQTBCMDAwRjY0MTA3RUQ3RjZBRkFGNkIzQkMxNEZCOUZFNTQzOUZCOAorOjEwQTBDMDAwNjczRjkwQzc4Njk1Rjc3MUI1ODM5Rjk3MzVCRkVGRDFFRQorOjEwQTBEMDAwRjhFRTY0NjQ3M0QxNURDMDU3MzcyQzcyNTI5NjUyNjJBOQorOjEwQTBFMDAwOTE5M0Y4QjA3MTkxOUJFMkIyOEQxNTNDREVEQjc4QTdCRAorOjEwQTBGMDAwQTBFREQ3MTlFM0IwNEY4M0JDNTgwOUUzM0ZBQkU5OUQwRQorOjEwQTEwMDAwMzc1OTc4MTJEQUEzQjMyQTA1QzMzRTc5QjhEQTZEMjgzNQorOjEwQTExMDAwQ0Y1RkZBOTNBN0YxREU4NDY3QTZEODE1OEEzRjQzNUYyNQorOjEwQTEyMDAwMzFCNDBCQUE3OTlFMjI1M0ZBNkVDMzM4QjcxRTdGRDY3QworOjEwQTEzMDAwRDdGRjk5RUEzN0U5MUVCNDE4RDhGOUEzNDMxODdGMTY1OAorOjEwQTE0MDAwODlCRjlFNzk2MTIyQkY5NzRFMThEODBGNTdDMDRFRDg0RAorOjEwQTE1MDAwNzJDMTI4Q0FGNzc4QjlGQzVCMTRFN0REODI3MTcxOTg4NworOjEwQTE2MDAwRTk5NjJGRkUzODgzRTgwODk0NzIwQ0Y5NzU3QzU2MUMyQQorOjEwQTE3MDAwRTU2M0UzQjgwOTM5NDg5NzA3QzY3RkU2QzNCOEU4RUI1QgorOjEwQTE4MDAwQjc5Q0NDQzY3NUVBNURENzQ0NzkwN0U2NzUzN0M3OTlBMQorOjEwQTE5MDAwQ0RGMUU1QjM4RDI3NTdFNzFCRTlFMTY5NTMzQzU5OTdBQQorOjEwQTFBMDAwNTc2NkY5OTExNDRGQUVDRjFGNDYzQzU5OTc1QkJBOUM0NgorOjEwQTFCMDAwRDBFNUQ3Q0JFNUVEQUZFRTg2N0ZCRTFDNzExMjRDQUY3QworOjEwQTFDMDAwNjhGM0VFRTc0QjhEMkU1RkQ2RjlGMDBCMjdEOTIzMDcwNgorOjEwQTFEMDAwQzYzRjRDRjk1NjdBQkRENkJDNENBMkFGNkY5NUM3RURDMQorOjEwQTFFMDAwQjQzRjhCNzkwQTY1MDNFQjMyM0ZCMkJDQkY4Q0REN0U5NgorOjEwQTFGMDAwN0JEOUY1MDZGQUU4OTc1MzY3OTQ2MzQzQ0IyOTU3M0UxQQorOjEwQTIwMDAwQjdDMzUyRTU2QkY2QTRENDNGQTNDOTRFRjVGQ0Q1MUVFNworOjEwQTIxMDAwNzc5NTdDNzkzREQ0QjBFODBGMEFCNjgzRTcwRTZBM0ZBNAorOjEwQTIyMDAwREUxMTg5NUJFODI3MzMzQzlFNTMyMjhCNEY0QzdFQUY3NworOjEwQTIzMDAwRjBGN0ZEN0FDMDQxREY2Mzc1Q0FGQUY1MDE2RTRGQjdEQQorOjEwQTI0MDAwMTA3RkM2OUNCOEVFNTJCNkRBOEE3NDkwOTdBREI2RTUyOAorOjEwQTI1MDAwNDNCQkRGMDZENDBERjk0OUYyQjRDNUNFRjcyMzQ1MUI0NQorOjEwQTI2MDAwOEIzQzY4ODE5N0M3RjIzNUJDQjA3MDEwRkI2QkFCMzU4NworOjEwQTI3MDAwOUVFN0QyOUZCRkM5OTdCNEYzMTg5MzgyNjg1RkI3QkNCQgorOjEwQTI4MDAwNTExMTQ0RkUzOUU4OUI0NEY2NzZBQTc1REJBNkYzMTMxOAorOjEwQTI5MDAwQ0FBRkQxMDNGRUM0NTY2REJEODE0NTU1RENDNzZEQjM1MQorOjEwQTJBMDAwODc4M0M5RjFDNkFERjk5Q0FFRDJBNzNFRDQ4Mzc2NzMzRAorOjEwQTJCMDAwOEI2Q0EzM0NDMTE2OTlFNzVGQjc3QUE1MTk3QkI0NzY3RQorOjEwQTJDMDAwMDE0MzNCNDkzRjQ3NDVGNzY1NDg1RTYzN0VGNTYzNjg1OAorOjEwQTJEMDAwRUY1NEE1OUVFNzYzRjlEQzNGQjRCM0M0MURENUMyODAzQgorOjEwQTJFMDAwNUVCMTFGQUY3NUQxRkQwRjRDOTU3OTdFNTNDODkwNEY2RAorOjEwQTJGMDAwNkREN0Y0NEI5RDI5NUY0Mzk0QkY5Q0RGNTY5QzFERTlBRAorOjEwQTMwMDAwQzZGNTM0RkI2RDg3MDJFQTYzRjgzRTJBQzU5QzQ4MUZGOAorOjEwQTMxMDAwNTE5NzM1REYxRkQ2RDZCNTQ1OUJBRkY5NUU1NUQxNzQ0MQorOjEwQTMyMDAwRUY4MzY4QkFGNzIxNTZEN0Y0Q0I1RUE0QjdGNTRFQjlFMAorOjEwQTMzMDAwMjU0MEY3M0NEMEJEMEY1MUJDNzIwOTlFRkY3MEYzN0NFNQorOjEwQTM0MDAwMTZGMEZGMjZGM0YzMDZBMTVFOTRBRjJDRThBMjc4NTQzMgorOjEwQTM1MDAwNDdBMUFBMTY0MjU5RjREOTc2QUY4N0ZFNUFENDNBMTVDNgorOjEwQTM2MDAwOEZBRTc0Nzg2RDlEQjhDRjk3OTMxNzc5MERFNzMxQ0Q4NworOjEwQTM3MDAwMjc5MURFRTlCODJDOERGNDEwN0M3NzczMzlDMjY0NjFDMworOjEwQTM4MDAwMTJGOTgzNzQ2OTBBRkFFMDc4QkVDQzFFNzQ1MDNDQUJCMworOjEwQTM5MDAwMjVDMjdBOURBM0Y4Rjk3RkE0Rjc1QTk2Mzg1MjVEODJCOAorOjEwQTNBMDAwRjZCNkFCMTJGMTc0MjQzNDMxMjM2MjIxMjdGNEE3Nzk3NQorOjEwQTNCMDAwRkZGRkQ1RUZCRDU0NENGOUFBNjJFNEEzN0NEQUY3NkYzNgorOjEwQTNDMDAwREM4QUZCRkE2QkY2OEIyMURDNDdGOENFRjc1RjFFQzMwNQorOjEwQTNEMDAwQ0YxQjE5Rjc5OUVGRjZENEY0QTIzRThCN0ExRDU0QUYzOAorOjEwQTNFMDAwREIzN0E5MDNGMUQ0MjJGODNBRDBERjZENzlFM0ZBOUY4NQorOjEwQTNGMDAwMjMxRTVCOUE3OTlDREI4Q0U3ODNCRUVGRDNGRDFBMjc4MworOjEwQTQwMDAwNjEzOUIxQkVGOTdFMERENjcxM0Q1RjI3QTc4QkY2MkQ2MAorOjEwQTQxMDAwNjFCRUY2ODIyQUJFOEUxNDFGM0NFNkEzN0JBMDRFMUVCMAorOjEwQTQyMDAwMzlFMDQ1RjhCRUMyQkM2NUVDMzdGNUJDMEI2NUQyNTdDOAorOjEwQTQzMDAwMUFGRDMwMjlCQzA5RTdGNTAzRDFEN0QxMUVDMDdCRDI2NAorOjEwQTQ0MDAwNjBCRDExRUU0N0VDRTRFRkRGRUQ0OUE3NzU4RDAyN0NBRQorOjEwQTQ1MDAwQjhBRUEyQUY1RTQ1OTdFQ0MzRkQyMkFENzM1NDZBQTJCRAorOjEwQTQ2MDAwNzlCMTk4QzRGNkUyRkI0NzNFRjlGMTg1NDgwNzZBMTZEMAorOjEwQTQ3MDAwRUQ2QTg5NDU0RDg0OTcwRjAxMkZFQjJERjAwMkY0MzNERgorOjEwQTQ4MDAwQTYwMEZERTU0NzZFQTA3RTNBMUMyRTE5MkQ5QjE2REYxNworOjEwQTQ5MDAwMjQzQUFGM0NEQ0ZCNDUyQTBBODQ3RTdGNEJCQjVGQTQ5OQorOjEwQTRBMDAwMDJGQjFENTQ1RkYzQjNEMERGQzZFRkI1MzJGQjM4Q0VFRAorOjEwQTRCMDAwMDZGMDlFMkE3RjQ1MkQzMERBQ0ZDM0M4NUY1MTBCMkNBMgorOjEwQTRDMDAwRkNCQkFGQjBBRTk3MTcwQzQ5Q0ZDNjc1NkQ3MUZEREYwMQorOjEwQTREMDAwRTk2ODY3QTk2MjdBQzg1RDBDNjU1QzI3QzQzRkFFMTM2MgorOjEwQTRFMDAwQUU5NzE2QjcyMTE1QTQyMDFEQzg4OTAyQTQ4MzFCRDJEQworOjEwQTRGMDAwNDM0ODlGNjc5MjFCMTJFM0VCNkU5NzgwOUVDMUFFNzMzOQorOjEwQTUwMDAwQ0E5MUEzNzQ3NjUxOEJGN0U4RjJDNENDNjcyRDJFQTNDMQorOjEwQTUxMDAwQkM2QUQxRUZFNTNCMzYzQzc5MDVGNEIyMDJGMTYwOTZCNgorOjEwQTUyMDAwNUJDM0E1OTNFRjBGQTY5M0VGMEY0NTI3Njk3OUUxMjg0OQorOjEwQTUzMDAwN0U0NzNDMTU0Q0EwNzhDNUNENTgzRTcyNDREQ0U3MThFOAorOjEwQTU0MDAwODlFM0YxQjg1OTVGMUU5Mzc3MjdFNTY1RTlGMDZDQzY5QQorOjEwQTU1MDAwQ0Q2RUQyQ0IzQzZGNEE2QTYwMENGM0UwRkM2NTIxNDFDMgorOjEwQTU2MDAwMkUxRjE2MUQ2REZFOUFFOUU4OEVBMUU0ODM5N0Y1RDBBMworOjEwQTU3MDAwNzk4RDU1N0E3RUNFQkVBMUYzNzNCRUFBRkU4MUY1QkM1RAorOjEwQTU4MDAwMEZFMTY5RjE3RDlGRTg3MzgzREQyNUYzN0JENENFNkUwNworOjEwQTU5MDAwNUQxRjJDMTBDQ0Y3MEIzRDk4OENCN0MxRUIxQUQ5ODdGNworOjEwQTVBMDAwRUJBODE2NENBMjdCOENEODk0NDU2NDM3NzU2N0FCQzc3MworOjEwQTVCMDAwMzA1RjhDNDkyMTgzNUMxQ0M0M0Y5QURDRkVDMTM5MEFBMAorOjEwQTVDMDAwRTVBQkZFQTU1OTkzNzNDRDRFMTlFREYxQzcwMzM3RkNFQQorOjEwQTVEMDAwMEVFQkRGQ0U5NDMwQzY0MzZCNkM2QjA5NEYxRkMyRkM5MQorOjEwQTVFMDAwNzY4NzQ4QUU5NkUxQkU0Rjk0QTU4NTM0M0RGQTFGMDhBNAorOjEwQTVGMDAwQ0YwQ0E1NTlDODgyRjc4MTA1OEE4REFFMjE1NUI2MzM5NworOjEwQTYwMDAwNUJGOUYwRjFGMERDNjAzQzNDMzcxNDFFNDAwRUZFQTcxNQorOjEwQTYxMDAwNDZDRjM3MjIzREVCRTdFRDUzQzlDMTM3QjRGRUNGNDJGOQorOjEwQTYyMDAwMEVCRTkxQ0M1RjVGMDNGREJFM0ZCNDdFRkJEQUU1Q0Q4RAorOjEwQTYzMDAwQTczODlFNTlERTc4MzU3RUZFNkU4ODg1MzA1RTNFREMxQQorOjEwQTY0MDAwN0MzNkIwMzcxNUU0QUZEQTc0MTdEMTRGQ0I4MzAyRTUwRgorOjEwQTY1MDAwNEI4MTFEMUVBMUIyQ0Y0NUMyRTZBMENGQzFGMzdGRjc0QgorOjEwQTY2MDAwRjFFRjYyMURDN0IzMTk0RjQyMjEzRjlGQjVBQUVCRkEyNAorOjEwQTY3MDAwQjA2NEM4OTM4QUYxRjM5QUVBMDlCOTU0QzRGQ0ZFNkEzQgorOjEwQTY4MDAwQTI2N0JGNjZDRkU4NzlGREU5OUFGQ0VGRDdGMzMzNkQ5NworOjEwQTY5MDAwMzQ5RUJGODhDQjc3M0ZEODNCNjgxNzMxQTk5N0ExMUY1RAorOjEwQTZBMDAwRkY4MzAyOUVCRjBGRkM0MEY0MERBMzg0OTExRjMyQTZDRQorOjEwQTZCMDAwNDhBNjNDMkRDRTJGRDkxMkI3NzczMjAzNEMyMDVEODNBQworOjEwQTZDMDAwNzk2MkYwRkUxM0IwMjdGMDdFODI0Q0Q1RDhFRTA3Njk5MAorOjEwQTZEMDAwREYxNTUwNkZGNTJFRjIzNjA5NzQwRTNFRENGRDMzMjg3RgorOjEwQTZFMDAwNjc2MUJFMTdGMDhEN0Y4NkIxN0UzNjRCMkE1QkY4RTczNworOjEwQTZGMDAwQjEzQTU2ODY3OThCMTU4NTVBQkNDREMxODJBNDFGMzVENworOjEwQTcwMDAwM0Y1REJGMkY1MDNDNzNERUQ3RDRDMjYxRjhFOTE3MTcwNQorOjEwQTcxMDAwRUE3OUMyNDY3RERDRTU2Njk2RjFCNTIzODU1QzFGRDVGNgorOjEwQTcyMDAwRjdENkQ2QTE1REJERDZDN0M4QUU1QThCQkExM0NCOTlBMgorOjEwQTczMDAwMEVCQUQ3MjZENDVERTlCMkJBQUYyMjUzQjUxOUVFRTcwNworOjEwQTc0MDAwRjVDRjQ4MzNEQzdCOUIxRENFMzI5NDczMUJGMjBERjVBNQorOjEwQTc1MDAwRjMyMjIzMERERjBCOTY5RDZCRjg1RUQ0MzRDMTUwMUU5RgorOjEwQTc2MDAwMTFCREMwNTBCRjA0MTA5QzVDMUVCNUU5MzI0M0ZERDE0MQorOjEwQTc3MDAwMUQ1NzE5Q0FFN0VDRjg5NkExRkVEOEY4NjJDM0Y3RjNBMworOjEwQTc4MDAwN0U3NTlERTFGQkI4QUVCNTg2RjJGOUZCNkYzNkQ0NkZFRQorOjEwQTc5MDAwNjFENkY3Nzc3NjY4NzgwNTdFMjczOUQ2RUNBRDZCQTA2MQorOjEwQTdBMDAwREZEMTkwMUQ4NjM4RkY3NTVBQkRFRUNDNDk2NTE4MEY3NAorOjEwQTdCMDAwNjkzOTVFNTE0NkZFNzBGQTA1NDNGQUMzNjZCOTk4NEE5NAorOjEwQTdDMDAwMUU5QkRGNkYyRUU0RjJGMzgzQzdERTlFQjQxMkU5MUNGQQorOjEwQTdEMDAwODUzQ0M4QTUwRkJDQUY2Q0MwMzk2RDJFRTc3OTA5RkE2RQorOjEwQTdFMDAwRUY2Mjk4RUZFNUVGREZBNzk0NTQ5QUNGODIyQzA3QjM3RQorOjEwQTdGMDAwM0ExRjcwNURBMTYyQjlCRkQwMkE4NDVDQjg1Nzk0MEEzMQorOjEwQTgwMDAwNkY0Nzg2ODlCN0VEREEzQ0JFMkFERThFMDlDNjM4MTA1RQorOjEwQTgxMDAwRUE5MzA3MkRFMDdBNDJFMzJCRDA1N0JGNDUzRTA0N0RGMworOjEwQTgyMDAwNTU5OTQ2MUUwNkJGQzdFMTZDRjU4OTBFMDdFODkzN0Y3MAorOjEwQTgzMDAwMkZDQzFFOUMxRkZFNDFDM0YzRDdEQ0FENjBGRDZCNzhBRgorOjEwQTg0MDAwN0Q1QkE4MENENzI1RDVCRUQyMTM4NUU2N0RBNUFBNjU2QworOjEwQTg1MDAwMjhFNzE2RjhEMjg0RTRGQjlBRjc2QkY1RjQ3ODc2NEI4OAorOjEwQTg2MDAwRkE2N0I0QUZENEUyMDg5NTBENjc1RjY5N0YyMUUzRjcxQgorOjEwQTg3MDAwRTBFMkZBNjYyN0FEQUI1RDBEQ0E5NkZFOUREOThFNjEwQQorOjEwQTg4MDAwNEZFMDNEMTgzMUFGNDQ3OUMzNjZGRjJFQUFDOTZEREQ5NAorOjEwQTg5MDAwOUY5MzBFRDY5MkJGREZFMjFENDk3OTFGMkRFQTVBRDI0RgorOjEwQThBMDAwOTcxRDI5RkM1Q0QwOTdCREI4M0VEMzdDMzcxQUZDQjkwNAorOjEwQThCMDAwODE3ODgwNEFFMzQxNUJCMjlCNUE5MkZDN0Y2Q0E3REVCMQorOjEwQThDMDAwQ0RFRkQ1RkUxQUZDRTA4RjBBQ0ZDMkZGNTcxOEY3ODNGMQorOjEwQThEMDAwNEYzMjhFQTc5M0FBOERFQzg0OTM2MDI3QTBGQzZEOTNEMgorOjEwQThFMDAwMThFRDdCQzcyQTA1QzVDQTJGRUU1OEFGRDk4N0VCMzlCQgorOjEwQThGMDAwREVDQ0ZCREQ2NjNCRTM4QUQwRjU4NEI3MzZBMDI3NTc3NAorOjEwQTkwMDAwMjVDRTlGREJCRjZENzY3RUZGQTZFQzBGMDc1MURGRjZFRAorOjEwQTkxMDAwNjUzQkQ4NkU4MEY2NjAzNjhGQ0ZFOTc4RjlCMkYyMjhDMQorOjEwQTkyMDAwQTc2ODkwRkY5MzUzMzQ4NEZGNzM4OTU4REU4NUY3QjY4OAorOjEwQTkzMDAwOUUzOEM1RTMyMjBBMUU0NTBDRTAzREU0N0NGREQ2M0U3MAorOjEwQTk0MDAwMzEyN0I2MDZGNTU0ODlENDg0RjlFQjIyNTMzMjEwMkZGRgorOjEwQTk1MDAwNkIwRThCMkMyRUEwMUMzM0U2RTdEQjU5RDM1RDE4OEZEMgorOjEwQTk2MDAwNjMwMUZFM0VDNjVDQ0Q2ODI3NjU0QzMxRUFCMTRDRDUyQgorOjEwQTk3MDAwQThDN0ZDMzNCMjRDN0FDREE4Qzc3MjFCOEM3QTJDMkY5NworOjEwQTk4MDAwNjJENDYzMDVDQjI2OThGNDlBNTE4RjhEODhENjk5RjRCQQorOjEwQTk5MDAwOUE1MThGOEREQTc0OTU0OUFGMTlGNUQ4MzkzQjhDN0E3NQorOjEwQTlBMDAwNkM2Q0RDQThDN0NFRkJENTVBOTM1RTMzRUFCMUYzRjdFMworOjEwQTlCMDAwQUYzNzdDQUY0OEI0MUJCRTRGM0M3Q0JCQTE1Q0Q1NzNBQQorOjEwQTlDMDAwQUZBMUZFRTRBM0JCMERERkE3RjZGRUM2RjAxRDEwRkQ5MAorOjEwQTlEMDAwMUM5RTY3QzA3QjY4NzExMTJGN0NGNzIxRTM3N0E2M0EzNAorOjEwQTlFMDAwMzAxRjdGMDU5RUNGODQ3NUJDQThFRjYxNDM3RkFDODM4OQorOjEwQTlGMDAwOUY1Qjg4QzE3RkI4NUVFRkIwMDhERDAzMDA3MkVDNTA0QQorOjEwQUEwMDAwMDFCNDVCMUQxNzQyMDk4NkZBRTlDMUI3NzFERjY2NzlBNworOjEwQUExMDAwNTAyNDNGNkUwRDA2NUI5MTFFRUVGN0M1OTExRUFFREQxNAorOjEwQUEyMDAwNjEzQ0ZGQjAzQzZFMkNDNzgwN0UxNDhDMkIwMEZEMjA1NworOjEwQUEzMDAwN0RBRDMwRkQ2RTA0RDg4MzQ0NkYyQjE0QTkwOUVENEExNworOjEwQUE0MDAwMzM3REJEQTNEMzU3NEM3RDBFQ0Y3M0U4RjNENUU3NjdCNQorOjEwQUE1MDAwRDdDRjlGNkFGNEE3NkFGNEM3QzQ0NzA4RUUxNTA1MjI0QQorOjEwQUE2MDAwRkRGRThFM0U1RjE1RkVFM0RGREY3N0UwM0MzRUQ5MkYzMworOjEwQUE3MDAwMzAzRkMwNzEwRDhCMUQyQUIwOThDRkVBRkREQjFEQzg5OQorOjEwQUE4MDAwOUZFNjc5OTlFNzYxQjY1M0RCOEE4Q0ZCNDg5Nzg4REVBRAorOjEwQUE5MDAwMTBGMUREMEIyMkU5MjM5QTAyRjJEOTAzRkNCQ0RFREFDNQorOjEwQUFBMDAwMjc0NDNBMTc4MzdDODhGRTgyMTg2QjIwQkNBQzAxQkMxQgorOjEwQUFCMDAwRTBCREUxQkFERDdBNDI2Qjc3RTJBNzIyOUQ2RjNFMTNEQgorOjEwQUFDMDAwM0YyQTFBM0U5QzQxMjMzRkJBOTUzNDEzM0QxOUYxRUJCRQorOjEwQUFEMDAwMjkzM0YyRTc4QUQ3MkU3NUEwRkMzQTA0RjgxNkE2MzA3RgorOjEwQUFFMDAwRTYwQjE5Rjk3NTg1Qjg5MkY2Rjk3NDNDMkJGMDFGOEVCOAorOjEwQUFGMDAwMkI4MUE5OEJGMzVFMERGMzRFMjg4M0YxQkJFQzkxRUQxNgorOjEwQUIwMDAwMUIwQTJDRThFNjRDRjg3REIwQzhCOERGQUVFRkNGRDUxNQorOjEwQUIxMDAwMDI3NjFDMTY3OUE1M0FGRUJBQjNENTNGQTI3QzRDRTU2NQorOjEwQUIyMDAwMEYxRjI4M0E2QjdGRjg0MEQxRDdFQjBGM0Y1MzM0QTQ2NworOjEwQUIzMDAwM0ZEQzM3MEJGRDI5Mjc0QjBGQjU1QkM0RkQyNDI2MjdDRgorOjEwQUI0MDAwMzA1RTZCNkZFMjcxQkY4MUY4RERENzFFRTc3OTBCRTFGNAorOjEwQUI1MDAwOTQ2NEFFMjdERDkyMUVFNzA5MUQ4REEwN0Q5MjcxNkU3MworOjEwQUI2MDAwMDhGM0EyODYxQkU3Rjg3MEIwMUVGQjcwMjgzRDA2RjZCRQorOjEwQUI3MDAwQzUzMTNDNEZBODY2RTREN0RCOTA5OUE0NTAxOURERUZBRQorOjEwQUI4MDAwOEMyMEYwM0NBNEZGNDZGODA2RTVFQjk2NjY2OUY5QzcxMQorOjEwQUI5MDAwQ0E5MEY5Qzc1NzY4RkJCQjE3MDZENTdGMjIxQ0QwREZDOAorOjEwQUJBMDAwNjlFQ0FGRkYzRUI2Q0E2Q0VBMjdGRDBDRkRDNEVBQjhGQgorOjEwQUJCMDAwQkQxNkIzRjkzQTVBQjhCRDQ2RkI0QzVGNDMxQ0MzNUZBMAorOjEwQUJDMDAwOEM3MTJEMkZDNzdGOEI4M0M3NkRDRjM2Q0U1NjVDM0NFMworOjEwQUJEMDAwMjhCRTU0NUMzQzQ0N0NFOTFGQUZFNkYyNzNBQjIxQjA2NQorOjEwQUJFMDAwMEUyQTUyRDNCNzdFMEU1MzJGNkZDRTM0RkFDQjFCMjZDQworOjEwQUJGMDAwNzBCOENFMkRFNkVCMUVEMUNFRTNENjY4NjUzREVGMTJFMAorOjEwQUMwMDAwRjMxNkREMTNBMDNDOTM5RjUzRDJDRkI1RUFGREQ0MTRDNQorOjEwQUMxMDAwRkJBOEZFQTdDMUJBMUFDNEM3ODYxMjdFRkZDRTg2NEMxNworOjEwQUMyMDAwRTMzRDNDMjc4QTZBNkI3MDVFNTNCNEZFNkI4QTE5M0YyMgorOjEwQUMzMDAwMzczMTUyM0JCNzY5OEExNzdDQUVENUZGQkNBODhFOUVEMAorOjEwQUM0MDAwNzg4RTE2RkQxMjg3Mjg1QUUyNzM1QUIxNERCQkVGODZGMworOjEwQUM1MDAwRDE3M0JBN0U3RUVFNEU3RUJFQ0U3Q0VGMDJGMEM5OEIwMworOjEwQUM2MDAwRjhGQjUwNkZERTY2Mjc3RjBGRjQxMTlEOUY1QjVBQzA4MworOjEwQUM3MDAwQ0YyMTlBRUY1Mzg4OTRDOTg3NTBCQzdFQzJDQTJERUY2QQorOjEwQUM4MDAwRTUxOTk0RTc3MEVDMjZDQUJGN0I2NjJBOTM4NUJDMzMyRQorOjEwQUM5MDAwRTczRDdDQkJCODVGNUY4NUJFRTQzOUJBQzZFMjYxRTREQworOjEwQUNBMDAwNkIyREQxQ0VEMUY1QTY3MTNERDY5N0U3OEFFRkI2RjBFMAorOjEwQUNCMDAwNzc2RkQ1RThGMjM2Q0RBRkM1RkQ2OURDMjdDN0ZCQkRBMAorOjEwQUNDMDAwQURGNkNCNkYyREU2RkJDM0MzM0Q1NzdEQkIyMzEyNDFEMQorOjEwQUNEMDAwQkUzNTlGQUI0RTc1OUVCQUQ3RDFEQjk2OEJGMDhFNjU5NQorOjEwQUNFMDAwMjFCNERGNzMxN0M4RERCOTUwMkZBRDVFQTFGMzhGMUIwMAorOjEwQUNGMDAwNEE1OEZBMTRGQzVFNjEwQkUxQjk4RUNDQjlGMjA2M0JGRQorOjEwQUQwMDAwOTQzMzRCNTk5NjAwRTVERUQ4MUMxQUZGQjYwNjI2OEIwNQorOjEwQUQxMDAwMDBENzdEQzVGQzNFODQ4NUI3N0M0NEUzNjU1N0MzRDQyQQorOjEwQUQyMDAwMTQzQTc3M0UxREZEQjM1ODAzQTM3QjBCQ0RGM0JDNUJGOAorOjEwQUQzMDAwQTM1RjU3MUJCRjI3MjdBM0Q0M0EwRkZGRUU2MkREQkZFNworOjEwQUQ0MDAwMEVERjg1RjQ1QjVCQ0FGNkYxRjNCM0ZDOUMwMjVFNEI0RAorOjEwQUQ1MDAwNEZGOTlCQTEzNERBMTdCQzEyRDY4REVGOUZGN0QwRkFDQQorOjEwQUQ2MDAwREQxNDlDRjY1MzZDQTdGMzlCNDNDQjUzMzA5RjI3QkY1NgorOjEwQUQ3MDAwQUZGOEVDQ0U5M0E3MkRCMDg2MzdBMUFERjczNUQ5RTE2QQorOjEwQUQ4MDAwRkI5MThFRDJDQTNBRjhFRjk3N0U3MUZBQjQzODQ5RkIzQworOjEwQUQ5MDAwNjk0NzA1REI0NzIyQThGRkRDQTBGRjA0N0MyQTMyOUQxRgorOjEwQURBMDAwQTM2NTJFODFDRUMzQkE5NDI2QTIyQkY3OTQ5MDFGN0Y2MQorOjEwQURCMDAwMTc4RDJEQjEzMUJDQzc2NTlBRDY1RTZENjAwMkZFOUVCRgorOjEwQURDMDAwMDRFNTAyOTI5QzM2RkRCRTg0MUE2QTZEODZGNjk3RTAxMQorOjEwQUREMDAwQkU1OTA4RjNCRTQzQ0JCMEJGN0E2RjlBOENGMTRENzc2MgorOjEwQURFMDAwNjk1MzJEQUVEN0UzMEI3OTFGQjdBNzM4MkZBMTlGQjNCNworOjEwQURGMDAwMUZCODdGNkFDREIzODY3QjA1MUNDQjlGMzVEQzJCQzA4QgorOjEwQUUwMDAwOTYzRkZCNTVFRTE1NzhBRDc4RjlCM0ZGMTNGNzBBRThENgorOjEwQUUxMDAwRjIwREQ0OTAxREVERkFBMzIyQkY0N0VGQzM0N0FGQjZBMgorOjEwQUUyMDAwRTMzQTZDQTg2NTVEODhGN0Q4Njc4MDY3RDcwMDlFRUQyOAorOjEwQUUzMDAwNzVFMUM3NzdBMjVEQjIzNjNEQzQ3RjRGMjRGNjFEODQwRAorOjEwQUU0MDAwRjMzNTBGOTNCMUJEOUU2RjI4QjAzMkQyRDc3MzFCMDQ3OAorOjEwQUU1MDAwQjIxRjk4RDRCNzFBQ0JGMzFGRjFDOEU4M0Y3Q0Y4RThDQgorOjEwQUU2MDAwNEI0NTMxQTBDRjU3NkYzREU5QzNGQ0Q0RDdBNTNFMUY1QQorOjEwQUU3MDAwQzJGNUVFMkRDRkZCRjBGRUFFNTc2RjExMjkwRjg1Q0UzOAorOjEwQUU4MDAwN0QyN0U1ODkwOTIzMzg3RDJEMUExMTNFODVGNEI1NzA5QgorOjEwQUU5MDAwREQzRjI3MjVEQjY3MkM5QTRERkE3RTc5MUMyMDRFQjZDNAorOjEwQUVBMDAwN0I3RkU1MzFGQ0FFRThBQTJFQkZBMUFDRUJGOTU1NEU5NQorOjEwQUVCMDAwRUI3M0YzNTM0NzcwM0U1QzdFN0ZBN0EzNDBDMUYxMjM0MQorOjEwQUVDMDAwNjkyM0EwRkVCQkRBMzlBMDc3RjdGOUM4OEVEN0UxNTkxQworOjEwQUVEMDAwN0M3Rjg1MDNFREUxRDcxRjcxQjIwNEM1MDU3QkVDQ0MwNworOjEwQUVFMDAwQ0JGNTA3RTY1RDQ0RjhEMDgzRTAzQ0Y0OTcwMjA3RjIyNworOjEwQUVGMDAwRDk1MjgxRjUzOTg5QjlEOTIxQzRGN0RGMzRGRkNGM0M2NAorOjEwQUYwMDAwOEZBNUFGQ0EwRTVDREZBNUI1QUMwRkNGOUQyREJFNTE4RQorOjEwQUYxMDAwRDhGMDAzQThCRjM4RTIyNUJGREYzQzRGQjNCRUI5MTY1NworOjEwQUYyMDAwRUZCMzExQUNFRTgxNkIzQUY0NjdFODY3MDlGNDgzRjY4RQorOjEwQUYzMDAwRTdEMjBFRTNGNzEzODc2RjM4QjQxM0M2RERCN0RGNDFFRQorOjEwQUY0MDAwRjZFMkI1Njc4OEY3OEYxRkExRTlBNTQ5NkNGMkU5NTFEMAorOjEwQUY1MDAwQTRGRjMyQzYyOUE5RUQwRTVEMUZCREJCOEU1MTkyQ0E1QQorOjEwQUY2MDAwN0ZFMUVGRkJDMkYzRkQ3NTMyM0Q0RjE1MkJCNDFFMkI3NQorOjEwQUY3MDAwRjY3NzFGQTJERjE2OTY3QTI2QTFCQzlCRjk0NEEzRTdCOQorOjEwQUY4MDAwNUI2QzIwQUY2ODUyNjdDQjgxOUQ1NDU1Q0Y1NzRENTBCNQorOjEwQUY5MDAwN0M2RjhBNzZGRkNCQjVEQUY5OEZBQUEzRTY3Q0Q1RUU3MworOjEwQUZBMDAwQzdGRjhDNzYxQkNDRkY2Q0VFRUQ1OTMwQ0M3QjdCNEUxMworOjEwQUZCMDAwMUM5RUU2NDEzQTk5M0Q0MkYzN0YyNjAzNUVDNEFGOEU2NAorOjEwQUZDMDAwOTc1NEVENTZBNUY4REQxNjlEOUY0RTY5N0E2NkM5OUU4OQorOjEwQUZEMDAwRDkxQkYyNjFGQzk2NDdERjI5QzZGODcxOEM3MUZBQUU3NQorOjEwQUZFMDAwRkEyOUZGRkQ5RjJBNkYwRUQxOUIwQkU5MzMwRjlCOTgyNworOjEwQUZGMDAwRUU3OTg4QjExNzU5MTI3RDVGRkI4ODg3RTgyNDA4RjYzRgorOjEwQjAwMDAwOTA3MzBBQkVFMUY0NUE4NUY3NzYyMjdEQkZDMERCQkJBMAorOjEwQjAxMDAwMzRGRjM2RjJDOEFEQkNGRTlGMURCMjMzNDg3QzE5QjQ3NAorOjEwQjAyMDAwRDEzMzExQjQ0REIxQjg2N0NCN0NCRjU4ODdCMUZDODEyNworOjEwQjAzMDAwQkRCNzE4RTVDQUI1MjYzRkY0MDNDMTNBM0ZBRDcxQzRBOAorOjEwQjA0MDAwNDhDMkM3MTI0NTlEOEU3OTAwNEI1OTc4MDM4RkRGRjJCNQorOjEwQjA1MDAwN0I3QkRFOTUzQTBFRkQxMEY5N0Q4RkMwNjI4MEE3NTU4RgorOjEwQjA2MDAwN0Y3Q0UwREY1MThFNURGN0JCM0JEMzUxOEVCRDI3NzVGMgorOjEwQjA3MDAwRTRFMDc4MkJGN0I2QTVBMzFFNzg1NzhBQTU2M0ZCRjcwMworOjEwQjA4MDAwRTI1QzlFMEREMjk3MjMwNDREMEVBQkU5MDJDOEU0RDVENQorOjEwQjA5MDAwNDQ2QUYwRkYyNTdEMUI2RTg2NzFGRTFCRjA4QzdDQkYyMQorOjEwQjBBMDAwN0FERkE3NTQzRUE0QkFGQTU4MTBGQkVEOUQ4RTcwMkM5RgorOjEwQjBCMDAwNUZFNDZENkEwRUExN0Y2OUU0Q0ZFQjdFNzk2NzhFNDIxMworOjEwQjBDMDAwNzkxRUIxMDIwRDdGMDVEODZFRjUxRTNCRTVGOUEyMUY3MgorOjEwQjBEMDAwOEZDM0FDNjE3RDM0M0Y3M0ZCMzU1RDZGM0E1MDVFQ0JGRgorOjEwQjBFMDAwMzZENjU3NzhFMUUwRUY2MDIxMzk5MERGRDZFQ0RCRjIxRAorOjEwQjBGMDAwOTE5ODhFQ0ZGNzVFQzFERjgzNUE2M0IyNEY5NzY5RjJBMgorOjEwQjEwMDAwREI0Q0ZGNUQyNkJBMDdGQzUwN0MyMTA2NzBGMTlGNjM4MworOjEwQjExMDAwRTI3MkJDRTVENzc3OEY3RjAzRTA3QjdGQ0Y1M0U5RjhGRQorOjEwQjEyMDAwN0IxMzNBRkRFQkY3M0M5RkU4NkE1Q0U4MThFMjFFQTE0RQorOjEwQjEzMDAwMEYzNDNFRTlENzBGOUE3RTUyRjYwMzYwQjk1MDdDODRGMworOjEwQjE0MDAwM0Y1N0RBMTNFOTE3QzI3QzU3NzZEQTQzNDhGMzJCMUZDRgorOjEwQjE1MDAwMTA1NTJGREE1NTJGM0JDOTFFNTlGOUMwNDlBMkRCOTU2RQorOjEwQjE2MDAwODJEQTI3OTA5RTYzRTkyOEM3RjVGNTVBRjFDMERGQTY3OQorOjEwQjE3MDAwQTM5QzVFOTEyN0IyOTlDMDhBRDdGREZFMTM1RTFGRTg5QgorOjEwQjE4MDAwREMwREY1NTczQ0Y4QzZGNDFGNjIxOUU0ODlDQjYyQkRBQgorOjEwQjE5MDAwQTY3NTc1M0I3QUJEMTZFQkQ1RjVDNjc0OENDRkI3RkM5QQorOjEwQjFBMDAwRkExRkI0MUVFRkZENDU2MEI5MjU4M0RCMkZFQkZDMUJCNgorOjEwQjFCMDAwQzVDMURFODc4NUYxNjc3MjdDQTFCRTU5RDMyNTJFNzI4OQorOjEwQjFDMDAwNjQ1OEFENUY2MkQ2QzM5NUY0OURGMkMyQ0ZCNDhFMURCNAorOjEwQjFEMDAwMjMxOEQ3OEY3RjdDRTBERjFFMDYzODk2QkRFMjBDQ0RBQQorOjEwQjFFMDAwQzQ3MUZGRUQ4Njc0MDY3NEYwOEVENEM0RTlGRTY3NkRGOQorOjEwQjFGMDAwMzlBOEJGOTdEOTYzMzkzMjNERjlGQjY1QkJCRTQ3RjQyNworOjEwQjIwMDAwNzhFRDVGQkY5N0EzRUQzN0U0RDk0ODFFQzRGMjcwOUU3NgorOjEwQjIxMDAwNEI3RjNBOEZFNjc5MEQ4QjEwM0QyRUZCMTlCRjY3RjFGRQorOjEwQjIyMDAwMTNGMEIzQURGQzg0QTkwQUU3MUIyN0JCN0VGQ0NEMDE1QworOjEwQjIzMDAwOTQ5Qjc4NjcwQkMwRTE2MEZDQkVBRUU3NzhGRUJCOTNFMQorOjEwQjI0MDAwNUQ5NTkxNkNFNzdBMTQ2RUNGQzU1OEZDMzVCNDNCRDc0OQorOjEwQjI1MDAwODA1QTQ2QjlGNkZGMDAzNTAzQjMxRTAwODAwMDAwMDA5NworOjEwQjI2MDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFNUJEMEI3QzU0QzVERgorOjEwQjI3MDAwRjUzODNFNzdFRkJFNDI1RTRCNUU4NDU3Qjg3OTEyMjRCNAorOjEwQjI4MDAwQzQ4NTI0OTA0MEQ0ODU0MDBDMEFCODQwNDQ5NDg4NEIyRgorOjEwQjI5MDAwQzAxMDIwMjEwMUFENjBBNUNEODYwMDAyQzUzNjI4NTUxRAorOjEwQjJBMDAwMTRCNDBCODI0NTQ1MUIzMTA4NkFDMDhEMjg4NkVBMTcwNQorOjEwQjJCMDAwNDM4RDE2NUJBMThCMjAwODA0NTgxMEVBRkEyRENBRUZDMworOjEwQjJDMDAwOUMzM0Y3NjZFRkREMjQzQzVBQkY5RjRGRkY5RjdGRkEwOAorOjEwQjJEMDAwQTlDM0I5MzM3N0VFQ0M3OUNGOTk5OUIzRTI4MTRCRjkxMQorOjEwQjJFMDAwQkY4QzYyRUNFMTc4N0RBNUM5QzI1ODA1RDMzQjNENjZCMQorOjEwQjJGMDAwODY3RkMyMTU4MTRBNDkzRjE4OUZDMzVGMDI2Mzc5MDc2MQorOjEwQjMwMDAwNDY3NUYzQTQzMTY2NjIxNzhDRjc2NzMyNzYxMUVBOUZBRgorOjEwQjMxMDAwQjM2QURFNjM1N0UyMTkzQkIxRDFENDQ1QjgxOUNBMThGNAorOjEwQjMyMDAwNTY1QTA3RURBRkUwREY2REZFQjI1NDgyQ0VBM0E5RjkwNQorOjEwQjMzMDAwNUYxOEY0M0Y5N0JFMDRGRDZDMzk5MUJGMEVGQTY1QjFGQQorOjEwQjM0MDAwMjIwQjhGRTVGMDczMzAzRTRCNzE0ODY1NzgzNjdDQUY0OQorOjEwQjM1MDAwRTVBOEIxMDdENDNCQTM3NDJDMTlDN0RCRkMwREMxQ0MwNQorOjEwQjM2MDAwMUEyRDYxN0JBNUZGOEE5RDI2RTY1NkM2MDNGRkFGRDgzRQorOjEwQjM3MDAwRjQ4RDkxNjEzRjNBRTZFRDM1QUM3RDNENjM5NUU5ODgwQQorOjEwQjM4MDAwODcwQTE2MkVBRDg0RjI4NEQxOUJGRjJFN0UwN0JFQkJBQQorOjEwQjM5MDAwMTlCRTUzQjIwNkRBQTdBQUZBQUIzRkY5Mzc5NjhFRUQ3QgorOjEwQjNBMDAwOERGRUU3RjFGOERGQzU4QzY1NDEyMTE2ODUzQjQyMTgxQgorOjEwQjNCMDAwOUI4OTM4Q0M2OTNGRkY4NTVGNTUzRkZFODFBQUJGMEM1MgorOjEwQjNDMDAwMjkzNEVBNzgzMEZDNjMwODFCNzI0NUY0QkZDRkQ2MDNGQQorOjEwQjNEMDAwOTJCQUI3N0ZGRkZCMkFFN0UzMUYxOEYwNkQyN0UxQjFCMAorOjEwQjNFMDAwQ0NFMDdBMDlGMTU0RjZBNUM5RUEwNDNDOTZCRDc2QzlDOQorOjEwQjNGMDAwQTg4QjQyMkEzMjZGNzI1N0M2NEU2RkRERjNDNTdEMzA3RgorOjEwQjQwMDAwOUZEMzc1ODZBODMxRjQ1NTVCOTgxMEUzQzc3QkU5QjZFNgorOjEwQjQxMDAwNkZGMkQ3NDE3QjAzRTAzRDA4RTgzOUI3RkU3QkEzMEUwRQorOjEwQjQyMDAwREFDN0U2MzFBRjA5QzY3RjNBQ0FDRUQ4MDBDNDlCRTE3RAorOjEwQjQzMDAwNkI4RjBBNkY3OUYwREMxMzQyRTNFOEE5OEJDNUQyREQ4QworOjEwQjQ0MDAwOTM0MTM5Mzc4QTU5RERGMEZFREMxNkQxMkEyMUJFOThBNgorOjEwQjQ1MDAwNzc5OTI1QTRGREZCMTU3NTQ3MDNFOEEyQUQ2N0NDNkI3MgorOjEwQjQ2MDAwQjRFMzc3RUI3RjczNUUwQzUzRTM1REZGQjU0Nzg1NzdGRAorOjEwQjQ3MDAwMDVDRjgxNzg5RDhBNzhFREVGQzdFQjI1OTYxNjBFOUY1NAorOjEwQjQ4MDAwNjFBNzVFOTlEM0M3OTFENjFFQkYwQTVFQ0Y1NjMxNjRCRAorOjEwQjQ5MDAwNzJGRkYzM0UxMkUxNTlEQTA5MUZFQTA2NzUwRDcyQzkwRgorOjEwQjRBMDAwRDgxNzRDODVDN0Q5QUY5RTIxRkVGRDY3Nzc5MTg5QzAxQgorOjEwQjRCMDAwMzc3MzM3RkRCMDBDRjkwQUQwRUEzNTAxRkZDRTc1OUQyMAorOjEwQjRDMDAwMjc3OEE5Q0RFQzY1MDQzNzE2MEFFOTFEQ0Q1QjhCQ0YzMworOjEwQjREMDAwQzBGQTc4NDQ2QUI0OUZGRTg2QzVDQzE5MEFGRDdBNzcxMworOjEwQjRFMDAwODlBRThEMzBCNDczOTIzNzJDMDJFNkI3MzQ4ODNENjA1NAorOjEwQjRGMDAwODdGMjlDNDU4NkJCMkEzMDdCNjAxQThDRjM5QzMzREQzNworOjEwQjUwMDAwRTJDNEY3ODJEOEU0M0FBMENGMzlCQjM3QUM2Qjg4N0Y2RQorOjEwQjUxMDAwREU0NzFBQzQzMDA5REE3QjVDQUNBMDJFQTQzRDFGMzI5MgorOjEwQjUyMDAwNTY0M0RGRjdCMENFRUFBQjQ5MUU0Njg5OTc1RkY3QzBCNgorOjEwQjUzMDAwRjcyRTM4RjVDQzA0REZGMzU0N0ZGRkJBMDdDQTYzN0FERAorOjEwQjU0MDAwQjMwNUYxMzRBM0ZBOUUzMEE2ODNFRjM3MjRERTM1MTkxNAorOjEwQjU1MDAwREEzREI4MEZGMDQ3RDNCMzE5QkIwMzdFQTdGM0E5QjMwNQorOjEwQjU2MDAwNkY5OUYzRTk1Qzk4OUYxODlBQjlGNzVENzhCRjA0MTA1QQorOjEwQjU3MDAwMkIwMkJGQ0U1OEE1QzVDRjZDNjYwRjc3QzdBM0RDMUFDOAorOjEwQjU4MDAwRkM3QzQyRkY3NTE5RERGMERFNEM0NzQ4RTU0QUY4NkU1OQorOjEwQjU5MDAwRTk3QTZERkRFQzg2RDNDNDVGQjMwM0Y4Q0I4MUZDRDVBQgorOjEwQjVBMDAwQkQzRDdGQkRBMkM4RUQ0MDM2MTBGOTZCOTQxOEEyNDM5MworOjEwQjVCMDAwN0UzRUQ3MjRCQTRDRjBDRTg1MjUwNkI2MENFMDBCNUI1OAorOjEwQjVDMDAwMDUxNzgzN0UyRTM0NDAyMzg0Nzc3Mjk4MzlBMzg5NkZDMAorOjEwQjVEMDAwMTUzRTU3RjBENjhBRkNEN0I3M0QzRURCRUFCNzFGMUFCNworOjEwQjVFMDAwRkMxODM0Mjk3QkVCRUZFOUVCQTA2QzdERUJDQjk0Nzc3NworOjEwQjVGMDAwMTFERUYxRDdCOEJGQjNGNkVERjM3NkZGMzA5NUM2QjVERgorOjEwQjYwMDAwREJDNDcwNUNFNzc2N0YxNEY3MThDMkVGOThBQ0M4Qjc1QworOjEwQjYxMDAwRTcxNjlCNkMwQ0Y1RERFRTUwNTczMkQ2RjcwNjdFMDAzMAorOjEwQjYyMDAwQkFEN0VDRkEzRTFERjUzRDYzNEI4ODhFOUY0QjQ2MkFGOAorOjEwQjYzMDAwMkYzNEZDRUJCMDgwRjM2ODMwNDkzODhGOEFERDgwMDQwQQorOjEwQjY0MDAwNzhCRkUyOUQyMDE3QzNGNzc3N0QzRkQ4MTFGMkYzQ0Q4NQorOjEwQjY1MDAwNjdBRTkxMzk4ODNGNDNEOUU0NkRDOEJGNUQ5OTBERTc2NgorOjEwQjY2MDAwNTNGMTZFQ0U4QkQ1RjBGREYyRkE0NkUzNzRBOENGN0I5MgorOjEwQjY3MDAwRUZDNzc0RDQ0N0U3QjYzNTFBNTE1RjlEMzU3ODVFNjBFMQorOjEwQjY4MDAwNTZFNERGRkI2QjBEODBFN0IzQTFEMDU5MEZDNjFFREQ3QQorOjEwQjY5MDAwRjBCQ0REMTlEMjExNUUzODFFQ0UwMTFFNzA1RTgwOTc5RgorOjEwQjZBMDAwNTI1NzVBRTdGOEY4RkVCRjE2MUZFN0E3RTJGN0NCMUE4MgorOjEwQjZCMDAwODYzMDMxNUU4RDE3QzFDNjlGODdCQUNDMDJDRDlGM0ZDMQorOjEwQjZDMDAwREZGRDdEM0EwQkI5RjY3Q0EzRTM4RDI0RUZGRjdGOTk3NAorOjEwQjZEMDAwNkY0NkZDN0YyQjdEMzlCRkJGMkI0OTM0QkU0MEJFNkYwOAorOjEwQjZFMDAwQ0ZENzNCMUUyMUY4RjU1MDJCOERGNzNBRTU3REUyN0Y1MQorOjEwQjZGMDAwRURGQ0ZGNkZFODNERUZCRjc2QkVEN0EyRjczRTk5REVDNworOjEwQjcwMDAwQTExNjEzRUFBRDVEM0ZDNkIxMUI5ODc3RURGRjQ3RTc4MQorOjEwQjcxMDAwRERFNkZGRThBQ0U2NEMxOERGREY5OEVCRUVFMTAyNzlGRQorOjEwQjcyMDAwMjUxREZBMjNCQkUyQjVFQjhFNzFCMjVGNTFDM0JFMUU3RAorOjEwQjczMDAwMzkwREJFRUIwNDdGMDJGREZEOUE5MEFGRjUyRDAwMzc2OQorOjEwQjc0MDAwODM5RjgwRkUwNTQzRTcwNEYwRDA1QzM4RDBCNTEyRUQ0RQorOjEwQjc1MDAwQjZCRTkyNTkwMDM2N0MzMTlERTBDOUM1M0ZFODMzQTFBMQorOjEwQjc2MDAwRkREREUwRTc2MUZCRkRENTlFMTlENTUwQkZCRkFCNEVCNworOjEwQjc3MDAwQUEwMUY4MkVEQkM0RTQ3QTgwMkQzRDQ0MEJBRTYzNkE0NworOjEwQjc4MDAwNkMxOTY2NDkzNUJFQkJCMkI1RUI5MUZCMDJENjE1RjcxNQorOjEwQjc5MDAwNENENkQ2NEY2MjFCQTNGNUQwREZBNDUyMDM3M0MxOTRERAorOjEwQjdBMDAwRUUwRTY4QkYyRURFNDJGOEJBODc1NTJFQjU4NERDMzgxRgorOjEwQjdCMDAwOUU0RUNCNzhBQTYxODM5QTI0QzQ4QjREQjQ2RTY2RURGRAorOjEwQjdDMDAwRjFDNjEwNkY4ODk3RDgwQ0I2RDI4QTVGRjFFODVCMDA5QgorOjEwQjdEMDAwMzZDOUZFMTVGQzkxM0NERTFENjU3RTA5RjE2NDYyRjNGRAorOjEwQjdFMDAwRDkyM0QwREYyNTQ5NUY4OUVENEQwQ0Q2OEQ3Q0RDQjRBMworOjEwQjdGMDAwREUwQ0M0MUI5M0Q3OUYyNjk5MDQ3N0Q5MUU2Mjg4NjdGNQorOjEwQjgwMDAwN0NERTI3NTZGMzNFQ0QzQjEwQ0YzNzhFRDdDNUM5NEZEMAorOjEwQjgxMDAwMjM1RTBCNDNBRDJFRTQwQkRCOEJEMTdBRjg1RTBERTA5QgorOjEwQjgyMDAwNTkxMEZDRjg1NEYwMTQ4ODc3RjQzOTY5RkQyN0UzNUI2QworOjEwQjgzMDAwMjlEMzk4NzcyQUZBOUQ2MTJDQ0NCQTEyRkEwRjMzRjdFNAorOjEwQjg0MDAwNjI3QTNFMEZBRkE5M0IxNjE2ODZFQjM1NzEwNEFCNUJFRgorOjEwQjg1MDAwMDlFQjM1OTZBRDZGNkQ5QjU3MDJENUJCMUY4M0Y3NkExOQorOjEwQjg2MDAwRTZDMUZCODhENzVFNENCMjEzRkYxNzU5NzA3RDIzMzBCOQorOjEwQjg3MDAwMDdCQjEyRUNGNzNGM0ZDRDA2RkYzMzlFNEFFMkRCNEY5QQorOjEwQjg4MDAwMzc3MTdGRjM1MkVFOUJDQjA2ODIyODMxOThCMzczMzAyOQorOjEwQjg5MDAwRkFCOUYyOUZEMzUzODRFRjg5NEM2N0M1RjUyRkIzRDkxQQorOjEwQjhBMDAwMjRDQjYwRUM5N0QxQkEyNjNDNUJBNzU5RkY3NkI1NzVERgorOjEwQjhCMDAwRDFFMDJEQjIyMDQyMDM0N0RCN0I2OERBNzc5QjlDQTA2NgorOjEwQjhDMDAwQTlFRkVFQjg0OTUzREZCMzc0OTAwNkVFNUQzOTU0RDM1NworOjEwQjhEMDAwQkVDRkMyMTExQTM4REU3OTg3QTY3REUyRjIwOTFBMzg4NgorOjEwQjhFMDAwQjlGNjNFNERGQkJFNkI4QjM1RjVGRDVDQjMzNUY1RkQxMgorOjEwQjhGMDAwQjdDQ0Q3QzAwM0VBN0VBOTY5N0ZGM0NFQzU5QUZBODE5NworOjEwQjkwMDAwRUU5NTlBRkE4Q0E2MjczNTcwNTZGMzczOUFGNjQzMEU4NQorOjEwQjkxMDAwNkVENEQ0RTc3ODVFRDFENDBGRkI3NjlCMDZCRUM1RkIxMAorOjEwQjkyMDAwOEVBNkZENkRCRUY3MzVGMDcwRjZCMUE2N0Q5RUY5MzM5QgorOjEwQjkzMDAwMEQzQ0NBRjI3NzRERkJEQjYzOEYwNkM0M0IyQ0NFODdGMAorOjEwQjk0MDAwMzI1MThEMDEzRjgxOUM4RDk2NEU2QkRBODNDNzVDODRBQQorOjEwQjk1MDAwN0M2MzkwRjlFMUNFRDRFRjM0RjU2M0FERkZEMkY0NjdBOAorOjEwQjk2MDAwNjQ5NTQwMDQ2NEFCNUEyQUJCQjAzQTJBNDM1ODMzOTVENQorOjEwQjk3MDAwQkYxRUUwQjAyN0EwNUNCQ0UwNUM4NjRDQjUzRkU3RkI5NworOjEwQjk4MDAwMzhCNDIzOUZFNjNFRTQ0NEJFQkIxNENCMkNFMjQwMThGRgorOjEwQjk5MDAwMEZGM0VBOTFBRjc1QzE5NzdCMzk1NDcxQTMzMDlGQzhGQgorOjEwQjlBMDAwREMxOUMwODczRTgxNEE4QjJGOThCOTIzODEwRjdENDFENgorOjEwQjlCMDAwNTQ0NkY4MjJFOTc5QTRBRjJCOTU1MUJFOUVGNDNDREFBNworOjEwQjlDMDAwRDc5RENBMTg1RjIyOTVERDdDRjE1NEM2RkFGQTUzRDk4NworOjEwQjlEMDAwRERENzhGQ0ExRUJFMEM3QUFGQTc2RjIwOTVCRDdDQzM4MgorOjEwQjlFMDAwRTg3OTZGNUYwRTk1NzFCRTNDN0FERUM3Mzc5QzRBQzkxNQorOjEwQjlGMDAwNzcyNzk1RjFCRUQxNTQyNkY4MjY1MkJCNDRERjc4MkEyQQorOjEwQkEwMDAwOTM3QzUzRTg3OUIyRUY1RTJBNTM3Q0QzQTlFQ0VCOUI4RAorOjEwQkExMDAwNDY2NUFBNkYwRTk1RkQ3Q0IzQThCQ0M5RjcxMEJERDdDQgorOjEwQkEyMDAwREYzNzhGQ0EzNERGNjNGNDdDODBFRjUxMkFEMzdEMzU1MgorOjEwQkEzMDAwNTRERUVDQUJBNkQyRUFGQjBEQjUxQkU4NUI0MUU1MjA3QQorOjEwQkE0MDAwREY1M0Y0M0NDM0I3OUFDQTRDREYzQTdBOUVFNTdCOTY0MworOjEwQkE1MDAwQ0FDMUJFMTdBOTFDRTJEQjQwNjVCNkVGNTUyQTczN0M0QworOjEwQkE2MDAwMkY1MzM5RDRGNzI2QkQzN0NDRjcwNjk1QjlCRTc3RTkwMQorOjEwQkE3MDAwRjkyREJFQjdBOUJDRDVCNzg3OUVERkU2NkJBNEQyRTY4OQorOjEwQkE4MDAwRkI5ODlFMEZGN0VEQTM3Mjg0RUYzMzdBOUVFNzNCNDA1RAorOjEwQkE5MDAwRTU0OERGREZFOUY5MjhERjk3NTRFNkZCOEU1Mjc5QkJGMgorOjEwQkFBMDAwRUYwODk1MDVCRUQzNTQ4RUY2OURBNEYyMEVERjc3RjQxMQorOjEwQkFCMDAwREU5REJFRjM1NDhFRjFGRDhCOUU4RkY1RkQ0MDY1NUJFMAorOjEwQkFDMDAwM0MyMUQ3MTBBMDE3REJGNDlGRUUwQUM2Nzk0MjIyM0EzOAorOjEwQkFEMDAwOENCN0I1QkQyRkVCRTNENUMxMkYzMDhDN0I4Q0FCMTQ2RAorOjEwQkFFMDAwNjg5REZFNENGMEQ5MEY0ODRGRTY5ODI0ODQ5NzYyRDNBNgorOjEwQkFGMDAwRUVGQzNCOTYxOEM2RUVDNzdGNDg4QzM1RTY5ODY4RkQ4RAorOjEwQkIwMDAwQkVGRjU3RkNCRDY1QzM4RjdFRjUxMERBQzc3OTI2ODY2OAorOjEwQkIxMDAwRjYzMTUwRkYyQURGRkQzNDdCNEYzNEZBNjFDQjA2NzlEMgorOjEwQkIyMDAwQ0EzMEZFRjI0NEJDQTcwOENCODYwNDgxRUNDNTlCNzJFOAorOjEwQkIzMDAwRjk0RTgyOEVDQTM1MDNCOEZEMkU5QTk3MUM0RTcxQUExMworOjEwQkI0MDAwQThFQjlCRDdGRkEyREQ4RkY2Qjc3RjIxODlGN0MzNDIxMQorOjEwQkI1MDAwQkM3MTY0MkZBRUIzOUZFQjZEQjdENEZDRUIzRjYwNUM2MAorOjEwQkI2MDAwQzc1NkEzNjc0MUI3MDJBQ0U3RjZERUY5NTVBODZCMzNCOQorOjEwQkI3MDAwNENDOTM5QTJGMjhGMThFNzcxMkUzNjU5NkFBMjEwQ0YzQworOjEwQkI4MDAwQkZGRTEzQjY1RkM4OThERDA0RTUxRjEyMUM5RjI1NDA1OQorOjEwQkI5MDAwM0ZERjA3QzVCOUMwMzhDMjVGRTU5MDA5QTEzRjZCRkYyMQorOjEwQkJBMDAwRkZGODNGRUVGRjM0RUFCNUNFRkFGRjg3Q0M0NzYzMTJDOQorOjEwQkJCMDAwRURFNzcwMUM0QzZGNEI0NzNBOEM1OERDNUQ4QzgyRjc3QworOjEwQkJDMDAwQTdBRDEyMkNDODQ3RDM5NzBDQ0M0N0ZFMThDNDZDMTRGMQorOjEwQkJEMDAwMjdCRDNGOTIzRDYwRUZDMDJGRUI5NkE4OTNGRDBCQzlBOAorOjEwQkJFMDAwNzgwRjhDRTcwQ0I4MUNFODRGMTQ0QjhDRjhCMkI4NDFCNgorOjEwQkJGMDAwNzAzOTI5MEU2RDBCMUIwQkY2QkI1NEU2REJFMkU1RDU2NQorOjEwQkMwMDAwQzYwNUQwQUVCQzNCOEY5NzMxMTc4Rjk3OTlFMTdGMjgzRgorOjEwQkMxMDAwNDc3MzZBMzdFQ0E1NzBBMzc4OTlFMjYzOTdEMEVGMDU3NAorOjEwQkMyMDAwRDY5OUIzQTU3RDNDNzYwMUM2OTk3NzFBMkQ2ODM3Q0E5NworOjEwQkMzMDAwRUIwMkUyQjkwMTcxQjNDMDc4OTkyNTUxOEVDNzVBOTlDOAorOjEwQkM0MDAwOTVDN0I5NDM0QUZFOEFERjYzNjE5MjE4NzU2REJDMjhCNworOjEwQkM1MDAwRjE1OTg5NDlERDEwOEZBM0M0QjQ3MDVDQzc1QzY4NEE5MAorOjEwQkM2MDAwMEU2NzU4NEE1MjM3NkNFNzAwNUEzNDQzMjlFODFENDM5RgorOjEwQkM3MDAwRjAzOUUwRDM4OTc0RjU1NjA3QkIzNkMyQjg4RTgwM0RFMworOjEwQkM4MDAwOTEzMjcwNDA4RTIxNDY4QzQ3RkVBRDM3NUIyOTEwRDUyRQorOjEwQkM5MDAwQzgwRkFCRDgyNDkyNUZFRjU5RkNBRjY1MThDNzlFMTU0QgorOjEwQkNBMDAwQUZBNzc1QzAzNDhDQjlFM0Y4REVFRUVBNzIwQUQ0MkY4MAorOjEwQkNCMDAwRTFEREZCOUE0MDcxNTcyNzlCMUY4QjcxRERDMDdEMTQxRQorOjEwQkNDMDAwRkJEMkU4NzFEOTQ4QTdFNTVEMDc5OTkwNTY0RURCMTc3RQorOjEwQkNEMDAwNDkzMTJBRkEyQ0E5MjFCQzE2Qzc0NjcyRkFFQzM0OTBENQorOjEwQkNFMDAwNUYwQkY0QTk0NkZBQ0M3MjE5OEVBOUYxN0M4OTVEMzZGNgorOjEwQkNGMDAwRTI3RTRDRjFGMkYzNDRBRkQ5N0U3QTY5REE5NUQ3MzYxOQorOjEwQkQwMDAwMTI1RDgxNEU5QUU3MTU5NTI3OTQzOEZBQjFBQkQxMkI4NQorOjEwQkQxMDAwM0Y4MDVFMTgzRkJGMDcyQjE3NDU5MjdFMjg1QUVDNEU5NgorOjEwQkQyMDAwQUU1NEYxNjlFMEJFNDREMjhDQTFFMTc2OTA4NzgyMUVDOAorOjEwQkQzMDAwOUMxRTRDNkY4RDQxN0E3RUI3MkE4QkU4MTU0OEE3ODJFRQorOjEwQkQ0MDAwOUZBNjEzM0REOERGNDJEOTY2MThDRkZEODlFQzgxMDk0MworOjEwQkQ1MDAwRjBGQzAxMzlGRTdBN0ZDREU4MDI4Qzk3NEY0REU0RUI4MQorOjEwQkQ2MDAwOTM0RjYxRkQ2OTgzRjVFNzgxMkEzM0IzODE2QUZFQUNBNQorOjEwQkQ3MDAwQ0E0MkYwRTc1NUIxMDRGRkI1NEFBMkYyQ0JBQTU0MkE1MQorOjEwQkQ4MDAwOEYxOTU5Njk5RDRBQkU4MDAxOEMzOEJFMTkyODU3RDEzOAorOjEwQkQ5MDAwNTgyQUVCQzM4NzYzMzFFRTVFRjBEMzY3NTkzQTUyQTk1NAorOjEwQkRBMDAwNkY4RTFGRDUxQkQ3MTc4MDA0MTU3RTI2MTcwNjkzMkY3RAorOjEwQkRCMDAwQURDMDFFODMyNTNGMTZGNUM3MEFDMUJBMTlFOTZBMUYyRgorOjEwQkRDMDAwQTY2OUNGNTIzM0ZDMzBEQTJGM0RFNzI3RTA4QjhEQzhEMAorOjEwQkREMDAwN0ZGNzhFODlENEI0OUZCNEJDQTcwNjVFOTQyOEQxRjhBRgorOjEwQkRFMDAwQzYxNzI0NkE5RURGNTdENDVGMDM0RkYzQzE3QTFFM0UwNQorOjEwQkRGMDAwOTUyNDE1RTg5Q0QwRkZDNTRGMENDNENGMTcyQjg3NzQzMgorOjEwQkUwMDAwNUJDMDYxRTJCQjQwRkMxRjMzM0EyOThFRTBEQzY4QjJDNAorOjEwQkUxMDAwQTJGRUZCMzY4OEYzRjdCNzlGOEJBRTFBNUFGNzNBMjk4MgorOjEwQkUyMDAwRUU3MkM5NkM5MTcwOURGMkM4NzQ2NzFDRDYzRjEyMENGQgorOjEwQkUzMDAwMkVGOTQwQzQ5N0M4MzA3RUMwNUUzMTkxRkU5Q0JFNTYzQworOjEwQkU0MDAwNjA0RTk0MTEyRkEzRjVGMkMzMkY5QjY4OUUzM0Q2OEFDMAorOjEwQkU1MDAwQ0M5MTQxN0MxMjg3RUQxRjhFOTZBOEJGRkIxM0E1M0FBQgorOjEwQkU2MDAwRTQ2N0VGNjY5Mzc1MjNENDRFRjdDOEVGMEI4MzY4MUYyMgorOjEwQkU3MDAwQTQ3Q0ZFNUYwRkVCNTExRTUyOUFEMzcxQUQ1NTE0RUZBNworOjEwQkU4MDAwOEU0NjNERDhCQUM5NDBGQjVFRTVFMjg2OTIxMDIwRDFDRAorOjEwQkU5MDAwOUMyN0RFMENDQjkxNDhGQzA4QkZBNzBFNDQ2RkMwRjk2RAorOjEwQkVBMDAwRkJFN0VCQTJCOEM4Mzc3REVDMUIxMzQxOUY5RTJBNzFCQworOjEwQkVCMDAwQTVEMzNBNzkxMThGQzdCN0M3MEIyMzNERTVENDg1NDk4MAorOjEwQkVDMDAwOUI3MUJFRDMxRDQzMkM2OTZBN0JDOEY3RkRBNjFCQUNEMgorOjEwQkVEMDAwMzFENjM0RTRGRUNDRUVBODA3OEVBRDMyMTQ2MERDMDUxQQorOjEwQkVFMDAwRjRGRTM4QzREM0IxREE0OERENEE1QTU0NkQyM0ZFMkEzMQorOjEwQkVGMDAwRDY0QjQ2RjU3NzhCNTc4OTM2NkEwRkZBN0QzQ0RBRUJERAorOjEwQkYwMDAwRDVBMjgzMEQ0MUI4OTZGQTc3MkUxNzFDQjhFRjk0QzRDQQorOjEwQkYxMDAwQjJCQjIxREYzRTM0NkY0ODM3OUNDN0Q0NEVGNjE5Q0ZGMQorOjEwQkYyMDAwODJDQzM4NTRGQjU4QjM3Nzg5NzYxNzdFMkZEM0EzMkY1MgorOjEwQkYzMDAwMUNBMDFFM0Y4RjAzMjUzOTk2Rjc5QThGNzQ3QTIzQzg2OQorOjEwQkY0MDAwQkE1MjQyQkQ5QTE4OEVFQkQ0OTMyRDYwMzdFMDFCQjNFMgorOjEwQkY1MDAwNkExQUQzMjU2MEJEQjI4Nzc2MTAxRDRBQzdENUE1QjgyOQorOjEwQkY2MDAwRTFGOTAxQjNFMzEzQzRFM0I3RERFQjlFMUU4NjcxQTJEMgorOjEwQkY3MDAwODYxN0UzOUM2ODA3MTdGMkZEQjVEOUFGQ0NFQUEzRjZBNAorOjEwQkY4MDAwRTdEQkZCMTMyQzU2OTc4RDg1M0I0NjAwQkMzODI0OTY4NworOjEwQkY5MDAwOEZGODlEQzJFQUU0Rjg4NThCQzYyN0ExRDIwNTdDNThBQworOjEwQkZBMDAwQ0FGOEZFREI3NDlENzVFQTY3OTk4OEZFNTAwQkQyNDU4RQorOjEwQkZCMDAwRTlFRkE4ODFDN0I5RkUyMUNCQjM2Mjg3N0IyNDcxM0YyQgorOjEwQkZDMDAwNkJCQThFQ0IxRERCMkQxMDlGMDJDMUJFNDg1MkQ5Q0I2MAorOjEwQkZEMDAwMEFCNjhBRUM2NTZDNEY5MUUxQkVEREQ5QzQwODU5MkZEMQorOjEwQkZFMDAwNzBGQjM3MDdFRDFGRUUwQjVCMDQ5MjhGQjIyRDI2OTc4NworOjEwQkZGMDAwMEJGODJCMzU4OUNCRTc2Q0UzNkI0RjBGQzJFNkYxOTU1RAorOjEwQzAwMDAwNDZGQ0NFQUM3QTgxM0QwNzRENEYxOTVDMjVDREI4MkY0QgorOjEwQzAxMDAwNjVEOUIwMjQ4MkRFMzM1ODVEQzhBN0IyN0UzNzgzNDIyQgorOjEwQzAyMDAwNDBCRDMwMTNGRjA5RjVFNTZCMDQ5NzlCRjhDNTRFNzZDQworOjEwQzAzMDAwNjgwNkM2NEQ3MEZEOEY3QTVFQTU0N0RBRTlGNzAwQkQ0OAorOjEwQzA0MDAwRkUyMDBCRDhEN0FGRDVEQTE3N0I3MEE4MTlDNzM5N0I3QworOjEwQzA1MDAwMERGNzZCRkRFMzExRDkxNUMwNTU4OUMzQjU3NzFDOEQ1QworOjEwQzA2MDAwNTdBMEI4NDhFMEY3NjdFMkY4NzBCQzMwM0VCN0Y1QzZCNQorOjEwQzA3MDAwQzc1MzYyRTU3MjVBNTYyQkI4NUMxRDhDNEZDMTZCNzg2MgorOjEwQzA4MDAwMkU5M0QwM0VDRkQ5MjRCODkwMUY0NzQ1Q0QyM0ZDQ0U2OAorOjEwQzA5MDAwMDZGQzQ2MjI1RTlERjZCMDdCMDAyRTAxNDY3MjUxN0M2NgorOjEwQzBBMDAwODVFM0JGNjIzREM3M0ZEMEY5MkY2QUJCRkI0RDk0RDdGNAorOjEwQzBCMDAwODg3OEZEMDZFQ0E3MTNGNzAzMkJCRjI3QkFFRjA1RkEyNAorOjEwQzBDMDAwQTJGQ0NFN0FDMzY1QzQ4REM4RDNBQzM2MkMwNEY5N0VFRAorOjEwQzBEMDAwRUQ4MUJEQjgyQ0Y4NjZDRDlCMzFCODdFMkQ4QTcwMjdENgorOjEwQzBFMDAwRUI0MDZGNDVCMkU4MjcwQjZFRjFGMzVGQTBCRDZFNjdDMgorOjEwQzBGMDAwOTcwM0YwRTM2NDc2QjI0M0VERjA2NDVFRDU4Q0ZCREUyQgorOjEwQzEwMDAwRURFODI3QzdDNTFFQzQ3RjAxN0UxRURDMjREQTgyRDI3QgorOjEwQzExMDAwMzVFREU0RjMwODRFQzI1QkE5RDM0QjdFNDIyOUNDQjM4NAorOjEwQzEyMDAwQzY4MjRGOURGOTg4OTcwN0FEOENGNEVFOEQ4RTM3NzBERgorOjEwQzEzMDAwOUM0QzJDMjJGRUM0QjgxRUZBMjFGRkVFNzgwM0ZEOEYyMgorOjEwQzE0MDAwNDk0OTU3RjczRjAyRjU0OEEwRkZGMTk1QzFBNjVCOEMxRQorOjEwQzE1MDAwN0VERjAxQkUyRjdFNTFFRkVFOERGMjdCMzEyQUMxMEFDOAorOjEwQzE2MDAwMkRGQzdBMzQ3QTUwMzdENEYzOEExRTJEOTFFRDk2RDI3NQorOjEwQzE3MDAwRUY4MzY4QUYwMDNFQkVGNkNEMzBBNEJCNDJGRjk5NjhBNgorOjEwQzE4MDAwMjdEMkZDNzZFMjkxRTlEMDNGN0NFRjkxMUQ0MUQ0RkZBQworOjEwQzE5MDAwOTlCMTYwQTdBMENGQTJFNzNGMEE2MzJBRkRGNzc4MUZGNQorOjEwQzFBMDAwQzdGQzI0RDQyNzhBNUQxMzM3QzQ1OTgwQkYxNDdENzkxNgorOjEwQzFCMDAwQUQ3NTU3QTdGMzBBMDk5ODU3QTg3NjVFQzUzOEFGMEMzNgorOjEwQzFDMDAwN0Y3RkQzRTU3OTdEQkQ5Q0NGRTdFODJBM0VCRjE5RUQ5RgorOjEwQzFEMDAwRTZDNUVERkUyMzJGOUFBQzRFRjIwQkRDRDEyODg3REZBQgorOjEwQzFFMDAwQkUyMUIyMUFBMjJGRjcxQjJFOTk4MTlGMDY2MkZDNjYxMAorOjEwQzFGMDAwMTVEOUY1OTNEMTRDQzJCODRFQTdGNjdCQjU4OUZDODIxMAorOjEwQzIwMDAwNTlEQkY5N0VFQjI5NjE3ODM3REFGOEZGQzAxREY2Mjg5MworOjEwQzIxMDAwQ0FGNTM2OTFBMTFERjI4RkE3Q0Q2RTNGOUJBNEI2REI2OAorOjEwQzIyMDAwRDc4OTM3OENCM0EyM0Q5QjBCQTg0M0JFOUZEQkQwOEQzMworOjEwQzIzMDAwRTEzOTk3NTVDMzU5OUQ0OEZCRjAxRUQyNjNDMDQyMTRBMworOjEwQzI0MDAwOUYwNjNGNUMxMzZGMzAzMUFCRDk4Qzc0RUEyNEZFRkE0MQorOjEwQzI1MDAwQ0ZFNEYzNTNFNzEzM0VCQzI5ODg3RkU1RkIxNTVEREM5MworOjEwQzI2MDAwODY2RUU4RDdCQzIxOTA1RjUzRkVGMEYwQjBFMTBDQkZDMgorOjEwQzI3MDAwQzNFMzY2M0I5MkI4OUQ3QTA3RjUxQ0NDNEJCMDU1NTI5MAorOjEwQzI4MDAwNUMwQzdDMUFDQkVGNzA1Q0VCNzk3Qzk4QkRDRkVBMTAyQworOjEwQzI5MDAwQkYwODUzRkM1OEM3RTcyMTQ4MTY1NjM0ODhDN0U1Q0Q3OAorOjEwQzJBMDAwNjhENzQyNzQ2NEQ3MDJGMTcwNDJGRTRFQjlBODIzRkZFQQorOjEwQzJCMDAwQjdDQ0M4RkRFMDczMDIzRkZGRjE5MTZDMUYzRjRBRTIyQgorOjEwQzJDMDAwRUJDQzRGOTI3ODNDRTExQ0ZBODFEMEVGQjk1QjRDQUVERAorOjEwQzJEMDAwNkEwMURENTYzREFEOTNGNUI5MjYxN0ZBMzM3QTczODhCNgorOjEwQzJFMDAwNUI0QzQ3RjRFQUNGQjZDOTMzRTA2QjJBNkIzNjIwM0Q4RQorOjEwQzJGMDAwQzc2NUNGREI4MkYzMzlEQzgzNTlDNEFFNTQ2REM3N0Q4QgorOjEwQzMwMDAwODQyOUE0MTkxOERCNkZGOEVBNDM4QzQ3M0FBMUFEMDhEOQorOjEwQzMxMDAwNkI4NTI5RDkyNzdBNjNGQkY1MDhDM0ZDMEYwN0Q1N0QwOAorOjEwQzMyMDAwODg3MTk2QzNGMTdBODZGQjAyQ0U1RDI2QjJGRjg2MTEzNAorOjEwQzMzMDAwOUVERTE0QTdFQ0MyNThDRDQwOENDN0VDNTk4QTdDQjQ2MQorOjEwQzM0MDAwMzczNjMyRDUwMkVEMUZEMDc3QjE4QTVDRkY4QzNDOEYzNworOjEwQzM1MDAwRTMyRDE1RjhGRUNEMTI0RjE2RDJFNzY2QjZDNDcyREM5NworOjEwQzM2MDAwNEM1QjBCRjU1NzIyQUZDNjNGN0E3NjVDRTEwMzE4NTM1RQorOjEwQzM3MDAwRDkwOEY4Qzc1MEM2MTkyQjlCRjBBOTgxMDFBRjA0NUZGQgorOjEwQzM4MDAwREVGNEM4ODQzNUI5Qjg2OTIyMEQ0MDNBOTcyNTc4RjVBRQorOjEwQzM5MDAwQjg5RkUyMTU5ODc3MjNFMEUxRUU2Q0FGREU4NkY0QjI0OQorOjEwQzNBMDAwQjFCQUJCODA3RkRERkI5ODgwREY0MTExQzBFRkRFRTNENworOjEwQzNCMDAwNEUxODg1Nzg2MEE5MTIwQjg3RkFCQkY0MTJDMUJEMEEyQQorOjEwQzNDMDAwNTg4NDI4RUYxQjYwMUNFQkUwMzA4MUU4QTAzMzRCMDY1QgorOjEwQzNEMDAwOUNCN0JENDAxODg0RkJBMjY1OEJBRjZGOUM2MUM5RDUyQgorOjEwQzNFMDAwMzRDRTMyOUQ4RUFGNjcxRkU1RUJEOTI5Q0UyM0EzQzg4QgorOjEwQzNGMDAwNEZDQTY1MDJGMjYxNDU0NDlEODFENkQxMjAyRjM4RkU5NworOjEwQzQwMDAwODFEMDhEMUE3RjUzRjQxRTNFQkU1MjE4NUYwRUNBNDU2RQorOjEwQzQxMDAwMTJGMUYxN0Q5NTAyRjk5MzE1QzY4RUUzMUEzRDkyOTVCRQorOjEwQzQyMDAwNzU5NzQ1QzJGNjczRTA1RkM4RDc3MzFBNzYyNEUzRjdCMQorOjEwQzQzMDAwNTYwOTlDMEZFNjI4N0NCNjU1MkI5N0I5QzlFQ0FBN0MwNworOjEwQzQ0MDAwOUQ5M0NDRjkzQTI3OTlGMzc1NzJEQkY3RUFDOEVFQ0VFMworOjEwQzQ1MDAwNjlGOEU4MjBBRTJCM0JFQkJGRENDNERDODQ5NzVEMjY5QgorOjEwQzQ2MDAwOEExRjA4M0E2RjEyRDEwNTExMDk3NDk4ODJGRTI0QjgwOAorOjEwQzQ3MDAwODg0MzkyMjNCODlGMkVGMzY3MDlGQTFGODk1OEYyQjhCMAorOjEwQzQ4MDAwODgwRTk0MjdEQUMzRDJEQTE3OEQ4OEI0QzBGMzQ3RTA1OAorOjEwQzQ5MDAwRjhEMDM5QTBEOTlCMDI5RkFCRTIyQUEyNDZFRjUwREMyQworOjEwQzRBMDAwNTMzMDdBNjdFMDc4ODQ1QjgzQUNBODhGQTcxOEVCNjg3OQorOjEwQzRCMDAwNUQxRUQ4Q0U1MENCRkQyQ0MzNzJFRTY3RDFCRTFBQzAyNAorOjEwQzRDMDAwQTY1NURDQ0Y5Q0QyQ0IzQjgwOTE5RUIzRTQwQkYxQUM2NAorOjEwQzREMDAwQ0QyRjJFRTE5Rjg2RTc2NTFBQkZEODg0NzEwNDhDN0IyRgorOjEwQzRFMDAwQURFNUZFQTA1RUY2NUY4QjU3NjlGRDg1Mjk0QjU0RkVENgorOjEwQzRGMDAwMjI3NUVCMkRDN0YxMUExNjA1NTNEQ0M1ODRGRTg0Q0FEQworOjEwQzUwMDAwMEZGODg3NkVCQzEzRjVCMDMzNDE0RkU3MkYwRDJDRDBEOQorOjEwQzUxMDAwOUZCMDMzMUVDRkU0Q0ZGNUIyOUYzODNBRDlBMEQ5N0Y3MAorOjEwQzUyMDAwNzM4RTYwQTk4ODg3MjJENDQzODlBODZBRUNDQjMxOUU5OAorOjEwQzUzMDAwNzc4MTg1RDY2MkRDNkM5NEI4ODhFMjdGNDVENUZDNUM1NworOjEwQzU0MDAwNUE2MEZDRUY0MkU1ODdDRjYzN0JBQ0M3RTcwQkJBRkNEMAorOjEwQzU1MDAwMTQ4N0ZCOUJCMDJDQjUwQkI3ODJCRkQxRTVGMDI1MDc0NAorOjEwQzU2MDAwQ0EwNzI4MkFDMzUwOEMwM0VFRkYwNjYxNDExN0NFODQwOAorOjEwQzU3MDAwNkNGQ0JFRkI3OUVDREY2OTM0NUI1MDZGM0QxMzFDNDZFRAorOjEwQzU4MDAwRkQyQzVDMjg1MDdDNzg4OTg1Q0JEQkExQUY0MjM3QTI5QgorOjEwQzU5MDAwOUU1MkUyQkRDQjg2NjdBQ0M1NzM0QjM1OUIxQjI3OTg3QgorOjEwQzVBMDAwN0JBMzdBNjA3NDZFODkzOUY3RkVDNTA2RjMyOUJDMEM0QgorOjEwQzVCMDAwNzI0M0YwNDcxMzZDRTFDMEU3MUY3QUE3OUEwMTRGQ0Y4RgorOjEwQzVDMDAwMjYzNzRERDA4MzlDOUNGQkJERjcwNTg0NUY0RDNFQzA1NAorOjEwQzVEMDAwRTEyN0JDNzE0MTA4NkZGRTlDQzNENTRBN0Y5RjRGQzBDNQorOjEwQzVFMDAwRkVDRTNEQ0JFMUU1NTBFRjg0RUYxN0ExN0VDMzc5MEY3RQorOjEwQzVGMDAwMTU2OERERkY4QUVDN0YyQkYxOUUyMkRERkJCQzFDQzFBMAorOjEwQzYwMDAwREM2ODNGQUZENUFFM0VEOUZFMEFGQTNCNjJFOEIxNTBENgorOjEwQzYxMDAwRjQyRkRFRUU2QjdCMDVFREY3OEU0NEZCNTNDOTQ4QUY3QworOjEwQzYyMDAwMTY1NzRDMzRDNkIxNzRBQzE5RTkwMjc2Q0NENkQxQkVEQgorOjEwQzYzMDAwRjQyQjQ5M0M0RUYzNTY4QTlEREU1N0YwMDVGREFDRkZDNgorOjEwQzY0MDAwNzdGQTE5OTlDMkM3QTVFQTY3RjNCRkQzNEY3OERGNzZBNworOjEwQzY1MDAwRTM3OTNEMzlGQUM2RkI5OTE3RDA4RkUyQjc4MTAzMkNGNQorOjEwQzY2MDAwQTE5RUYyQTZEQUY2RTFGOEU2RkNEQTM2QTIxRUY1Q0ZENAorOjEwQzY3MDAwN0U5MUY4RjRCQkNBMUQyOTY4RjdCRkRCNkE4QTQ0RkJDOAorOjEwQzY4MDAwMzdFN0Y1QjdFMzRBMzA4RTIwRkI0NUE3MUJCRjM0NEE5NgorOjEwQzY5MDAwRjBGRTVDOUZDODZDQTBBNzJCN0MwMjk1NzNFQjFCOERGMgorOjEwQzZBMDAwRjk2OTc4QUVCNkQxOThBNzFBNTc5OTNDNEVFMDc0RkQ1NworOjEwQzZCMDAwMDQ5NTFGQjMzRjU5MjdFQkNERDU1NENFNzlGREE0MUU2OQorOjEwQzZDMDAwRTkzOTQ3NTc3NzFDQ0YxRkIzQTEzQ0VFMTUzOEJGMUQ4MgorOjEwQzZEMDAwQjJERTNEOENFNzBEM0E4ODAzQjRDOEZBQjk3NzdGREI0OAorOjEwQzZFMDAwNjc4OEI3Qjc1MDlGMDMwQ0U2Q0FEMTExQkU3QUE1RjA5MAorOjEwQzZGMDAwNzExNDc1RTE3QTNFQUJDNTVBRjIxOUFERkJEMjc1MjJDMQorOjEwQzcwMDAwOTQ4MzBGNTYxQThCRTFGOUMxQzQxMTg3MTA1RkVERTNEMgorOjEwQzcxMDAwOTA1RTFFODc2Q0UwNzFDOEEyODhFNjg3QzE5OEIxNkVGMgorOjEwQzcyMDAwMkY1RDdDRDIwQ0VCQjgzQjlGOTFFNTAzNDUwRkY0NEI5QQorOjEwQzczMDAwODE0OTkxOTdFMDg5MjM3Mzc5OUMwQkUxRkY0RDM2M0M0OQorOjEwQzc0MDAwODVFNzA4OUJCQTM0RkZFMjMzQjQwRjJCNDJEOTQ2OTBGOQorOjEwQzc1MDAwQjNGQjg3ODRDNjZEODM3MTRDNzc4NjBCNjAzQkQ5NzBDMQorOjEwQzc2MDAwNTM2OENBMzQ2OEQ3OUEzMEJDNUIwQUU5Mjc0NkZFNjEzMQorOjEwQzc3MDAwNkI4MkZEMDJDRUQ3MTMxRkFDMDM2Nzg0Mzk4QzNDOUVCRAorOjEwQzc4MDAwRTVGOEIzNDhGMTJDNDc3QUIwQzNENTAxQkVCQzMyM0VDMAorOjEwQzc5MDAwQkJBNUYwRkQ5RDI2MUQ4QzczMTA4RTgzOUZFRjg1QkY3QQorOjEwQzdBMDAwQjg2RDE4NkY1QURDNDc0MEJFNTNCRTNGMjY3MTc4OEM3NworOjEwQzdCMDAwRkFGQjYzMTJFRDYyNEFCNEJBN0QzOEMzRjZENzNCMEU3QQorOjEwQzdDMDAwOTZDMkM3MTE5M0MyRTk2NUNGMDVGRTUyRTlGRDA5MjM2MAorOjEwQzdEMDAwODMzNTcwRTE5ODQ4NjY1M0FGRUYwQTdCNkFFMEM5NDUzQworOjEwQzdFMDAwODk5QUY2RjdDREU4QUZBOTFGNkI2QUNFQUNCQzAxN0Y4MgorOjEwQzdGMDAwNUYwQzRCMERBN0Y1N0YxNjVGODcxQzZBQjhGNEM1MTQ1NAorOjEwQzgwMDAwRjQ2MzM3ODk1NjAxRTYzNTZCRDdFNjJGODY1MUVGMTI3MAorOjEwQzgxMDAwQzVCOTRFMzU4OTY0OEZDMEJEMzVBQUY3NEZDRUIwNjYxNQorOjEwQzgyMDAwM0E3N0FDRUZCQTg0RUNERjlDNTg3RUJFN0I5NjRCQkI2QworOjEwQzgzMDAwRkZBMUM0RTUzQkRBMzc0MTdCNTY4NkU3NjIzQURBMzczNworOjEwQzg0MDAwRjFDN0UzQUZCQTdGOTI5RDIyQUY4NzA3QjE0MTdDM0QyQworOjEwQzg1MDAwRENCQTE3NjZDQUYyNzYzNjEyQkQ2QUY2ODk1NjY0RDUxNgorOjEwQzg2MDAwOUFERTAyMTM2MDlDQjdENzlCNUM0MTMwRUUzMzZGMUY5QQorOjEwQzg3MDAwMzE0QUFBRkQ5MzBBNUYzNTA2MkRFMEJEMjM0NjNDNEZBMQorOjEwQzg4MDAwNzUzMDU5MjJGQUNENkQzODZGNjRDMDE3QjczN0NDMjM5NQorOjEwQzg5MDAwQjk2RTZFNzQ0NDQ1QTNGRDAyN0Y3NTdCMjZGMjU3NUQyOQorOjEwQzhBMDAwMjZEQUJGMjY5REM1OEVGQjYxNzM5NjhGQTYzODczQjhCNgorOjEwQzhCMDAwNkYwQTk1NjVCNUEzQTlERjcyREY0NDgyRTdGQTgyMDlBMgorOjEwQzhDMDAwRkU1NDZDQUUzRjgwRkQzQzEzNkU0MTdCNUVBRTc3NkVENgorOjEwQzhEMDAwNDVCQTk0NEJDMTE5Qjg1RjM1QjdGRUMwQzU1RkEyMURGQworOjEwQzhFMDAwQjVGMDdCMUQ2M0M1QkY2NDYyRkREODNFMTY1RDRENTczNAorOjEwQzhGMDAwMUM2RjEwRjVEMzNDRTJFRjk5Njg5NzBBNzA1RDAwQ0Y4QQorOjEwQzkwMDAwQ0JCNkU1Mzg1MEVFODdENzg0NUE1MEVFNDUzQzRGRDYyQgorOjEwQzkxMDAwMDE5RkNFNDhFMUZFOUVDMUMzQzczQkNBMzc5RUZBNTM3MgorOjEwQzkyMDAwRUE2N0E3MjQ1MEJEMDIxQkEyMzdFOTUxN0YyOEYzMzBFNAorOjEwQzkzMDAwODBDMUM3RjIwRTVGN0YyQTJCRUFDN0VCRjE1Q0ZDOUYzOAorOjEwQzk0MDAwNTM1RjhDNDIzQzQxRkIxMDJDOTM0NjBFMjMzREYzNUQxQworOjEwQzk1MDAwRTU5MDcwRDY4MURFNTI0QTkzQUM4N0E3QTAxRTg2RkU3MgorOjEwQzk2MDAwRUU0REI1NTVBMTFDOEU1QkU0RDE5QjUxOEY4Njk4MkQ2MQorOjEwQzk3MDAwQjhGRjMxMkU3QkEwNTRBMjlBOEZGOEZFQkRCODkyMDA2QQorOjEwQzk4MDAwNUZDNTZCNDBCQjNEMDU0QUI1REU3RUEwMTNGQkIyMzRFQworOjEwQzk5MDAwNDVEMURCRDU0NDY3QzUwRUIxMkQ0RjMyNUM4NzRERTVERgorOjEwQzlBMDAwNjdCNURBRTQ2QUJFMkNEN0NBRkJDRDAyRjcwNzlDREI3OQorOjEwQzlCMDAwNzk1QzdGN0VBQTYzMkRFQTkxRTZFMTZDRjIzNkQyQTcxQworOjEwQzlDMDAwQ0Q3MUUzNDM3RkJFRjE4N0U5OUI4OUNFNjExNjQ5ODcyQworOjEwQzlEMDAwRkIwQTRBRkRGMzZERjNFMEYyN0RBRDc5QUM5NERCN0ZBOQorOjEwQzlFMDAwMkFCMjg1QzgxNzlGREU3NjVCQjMwREZBNkQ3QzJDMjNDNworOjEwQzlGMDAwNDM1NEQ5QTlENzUzRjhGOTQ3NjZGMTVFMjY3REIxM0I3OAorOjEwQ0EwMDAwNTg0MjNEMzAxNkY3MUUzMkZEN0UzRjlFODdDNEI4NDYyMQorOjEwQ0ExMDAwQzU2RUQzNDYzQzBGNTYxMTA2RUI3Q0Y4RkVGOEZFOEUzMQorOjEwQ0EyMDAwRDc5MTdFOERFRkU1NUNDNDdCMzQzNjVDOTg4MTlDREJDRQorOjEwQ0EzMDAwMUE4NjVDQzQ3M0Y2MzYzMzY4MUIyQkZBNDFCNjNGOTFGNQorOjEwQ0E0MDAwQkVFRDY0QkNEN0QyNjc0OTIzRTc0NEExM0ZGMTFEMEM3QQorOjEwQ0E1MDAwMDlFRDJERDhGRENDMTYwRURCMTE1RjhFRTU1Q0ZFMUNCQQorOjEwQ0E2MDAwQjIxQzRFOTNGOUI3NTg5NkMzNjk3QTJFODcwRkFDMDk1QQorOjEwQ0E3MDAwQjc2MEJDQjM3ODkxMzAwMENGQ0IzMTI5RDQ4QTJBQzBCQgorOjEwQ0E4MDAwODA3Qzk5ODFGQ0M5RjlCMkNDRDc1NTk2RTc3OEI5MUY1QgorOjEwQ0E5MDAwQ0VGRjgxRjIzOUQ3MTc0OUVEMTQzOUZENTNBQUUzMTBCRgorOjEwQ0FBMDAwQjcyQkNEOTkwQjYxNUM3NzgwNUNBM0RFNzMyQ0VFOUU3NworOjEwQ0FCMDAwODk3MkUyRTcxM0EzMDVGOTA5RjgyNEI2NDRDNTA3MzVERQorOjEwQ0FDMDAwOEQzRkU4OTE0RjBDQjkwMkYxODkwOUNBM0MxNTFGRDk3NQorOjEwQ0FEMDAwREJGQzEzNEI3RTBDRkE1NTRCRTI3NTJCOTlCRkZFRUIzQQorOjEwQ0FFMDAwMTQ2NTlGRkNGQUY4RkQ1M0I5N0Q3MTA4RjgxMTE0RkYyNQorOjEwQ0FGMDAwMDk2MzE4NUZCQjEwMjU1MTlDNzRGRTBBMTgyNEEwNjBCRQorOjEwQ0IwMDAwQkVDMTlEOEM3MTk4RjlGMzgyMjgwRTU2RDI1MkI5MkM3MQorOjEwQ0IxMDAwNTQ2QTRGQUY3QjdERTlCNEJGM0NEMTk3NDRFNUMxNDQzMworOjEwQ0IyMDAwODcxN0U1NjU5QTZGOTI4Q0M3RjRFQkRBOUZDQkIyRjE2OQorOjEwQ0IzMDAwQjg5QkMxNjVCMjZFODhDN0I4OUI0M0E0RkRCOERFQ0M3NAorOjEwQ0I0MDAwRjIxNEQ5Mjk2NTNGOEVDN0REMzA5RTg3RjFCREMwRkQ0NworOjEwQ0I1MDAwMzU4Q0MzRTE3QURBMTRBNUQzRUMxM0I2OEJDNzBERDdBNQorOjEwQ0I2MDAwRUVBNzk1MzVGRTY1QjAwRUVBNEZDNURCMjgyRUY3NEREMgorOjEwQ0I3MDAwMUY0NzUwNUY5OEM3RUMwOUFFRDcwREVBN0QzNjE5OEY3NQorOjEwQ0I4MDAwNzU3QTc3MzJEQUQxQkE0QThFOUZCQTU1NjIwMUVEMzc5QgorOjEwQ0I5MDAwMzExNjNDNUU3NTVFRjc1QTdDM0NEQjk3NDhGODUxRUNFOQorOjEwQ0JBMDAwOEJBMkI3Nzc1NEQxQTFDRjM2RkQ3RDJEQkI1MzJFRjM4OQorOjEwQ0JCMDAwN0IzOUYyQkJCNUJEOUQ1MUY4MzU5MDlGMTVGRDZDODg1MgorOjEwQ0JDMDAwNkUyMTNENzQwN0JDODJGRTgzQTJBRjBCRjI4NkU1QTIwNAorOjEwQ0JEMDAwOUQxRkY2NzI2MkZEM0IzMEZGRDg1NDQ3MEVFMkU1QjY2QQorOjEwQ0JFMDAwNTc3QjY3QUUwM0Y4MEVCRDRCNkYwOUI5MUU3REY4ODMwNgorOjEwQ0JGMDAwODFGNEUxQTJGMThDRjQyMTk0NkE3RDY4RThDNDBGQkY0RQorOjEwQ0MwMDAwQjVFRjhERjE3NzlBREMxRUZDNThFRTFGODJCRTU2RjcwOQorOjEwQ0MxMDAwMzczRjc1QzRGOEJFRDA3NDUyNUY2RTI3N0ZBRTcxNzcxMAorOjEwQ0MyMDAwQTZDNzI3RjVCRDMxM0Q5RTI3OEZGRjVBN0E3QzU2NUZGOAorOjEwQ0MzMDAwQUVDNzAzRjUzNjY4NjNEMkRCRTc3NkY1QTMzOEQ5NjE3MgorOjEwQ0M0MDAwMDY3QTFFRUQ1OTQzQjBCNDM5NUU3NUNFQkQ0QkI4NEI3NAorOjEwQ0M1MDAwQURENzdCRjc5RjNFMEJFOTdBMUQ3QTdEMzZCNkZCNzcyMQorOjEwQ0M2MDAwRjU3QUZFRjgzN0M4QUY4MjNGRkI1REI3QzJGQUUzMzcwQgorOjEwQ0M3MDAwQjBCRTQzRjg1MzU4REZDNUI3OTc4NzQwMzkwOEU0N0IwNworOjEwQ0M4MDAwNTg4RkQ0MUY4MEYxMzUzREREODdFMjBFMjAwN0M0RjdCMQorOjEwQ0M5MDAwRTVDMEY3MjgwNzhBQkNDQ0FEMUYxODhFRkIwNkVDMTM0NQorOjEwQ0NBMDAwOTFBMUZFMEY5NDgzODJCQzU3RjUxOEE3NDIzRDhFRjhFMAorOjEwQ0NCMDAwREEwMzMyOEY3QTI2RDA0RUZDRDhEN0YxMkNGMjhGMjJBRAorOjEwQ0NDMDAwMEY4QTFDNUM5QjhGREUzNkUwQkFENDUwNzY5RUVCNzlERgorOjEwQ0NEMDAwMjhENTdBQkUzMzdGRTY4NTFCRTRGRjU1RDdDOTNGNkY2MQorOjEwQ0NFMDAwRkNGQ0ZDRjNDNjc1RjJDRkI2RkY4NDdGOTI0NkJFNEJDOAorOjEwQ0NGMDAwRkM4M0ZBMTNENzZGNzc3RTZDMEQ1RkMwRjk4N0NFMjU2MgorOjEwQ0QwMDAwMDIzRjY0NjJEQ0I5Njk3MDZGMkJDNjY5RUVCQ0MyRkQ3QworOjEwQ0QxMDAwN0FEMEU5RTRENzA3RkFENTUzNjRGREY3ODAxQzI3MzhBOQorOjEwQ0QyMDAwOTg2QUZGQkMyRjk3NTdGMkRCODcyNzA2MEY0NDdCNzU2NQorOjEwQ0QzMDAwQkRGRURFOTRBODRBNjY4M0U3MEY0MEE5RDYxMzI2QTQ1OQorOjEwQ0Q0MDAwNUIwN0ZFRkFERjZFOTBCRTRERDc0OURGRDM3REZGNjNGMAorOjEwQ0Q1MDAwM0ZFRjUyREZFQkYwRjM5MjZDRTY4OTg4Q0ZFRkRDN0E5RAorOjEwQ0Q2MDAwODY3OEJBRDY3QUMwQjA5NkUzQjlDRDVGNzdFQjE1QkJCQgorOjEwQ0Q3MDAwMTk4OTc2MTNGOEUzOUZGRjA5N0Y4Q0NEQUJCQjY4MDY1QQorOjEwQ0Q4MDAwQkE0NjZEMzExNkVBQTFGRDI0M0M2QjQxRjEwQ0QzMUE3MQorOjEwQ0Q5MDAwNUIxMkVBMUJBNkVDMEI1MEJDRTM1MzUxODY5REU2OTY1MgorOjEwQ0RBMDAwOTEzMDhFM0I5RjYyRkU3RDAzQTgxRjk1MUJERTE2MUZGMAorOjEwQ0RCMDAwMTE5OEJGN0RFNDE2NDNDQjJBOEEzRkYwRjMyQUNDRTFEOQorOjEwQ0RDMDAwRDFGMzdEMzIxOUNFMDQzODU0MDU2NzA3QzBFQjc5RkJFNworOjEwQ0REMDAwMzBCRDg3RjE3MzFGRjI3MzU5RkY4Q0IzRjA3RDAxRkZGMworOjEwQ0RFMDAwN0U5RTM3QkYyQkZBN0ZGNTgyMDVGNzE3RUVDQjNENjdBNgorOjEwQ0RGMDAwQzQ3OENFRDgzQ0NGREU5RUQwMkU2NTRCNzg2MTQ4M0ZCQworOjEwQ0UwMDAwNzg1RTJGRDA3ODA3QTc3NjVCRTM0Q0EyMjM1QjM2M0M5NQorOjEwQ0UxMDAwNkY1ODk2Q0RGNzRENEM3NThERjlCNjBFRjg3MDcwQUExNworOjEwQ0UyMDAwRDY0RUUxOUYzRTg2RTI2M0Y0NjdBQTEzOTgzMTkzRjdFQQorOjEwQ0UzMDAwOTMxMDdGN0RFRjIzRkRFOEZEMDQ3QURGNkQ4QUJBRkU1MworOjEwQ0U0MDAwRjdFRkM5NjUzNjU3MDc3QzM0NTI2OTg3NzE2MUE1N0Y1MgorOjEwQ0U1MDAwQTBDOUM0M0FDMUQ2NTFEQzY2NEMyQTk3OTc2NjlEQUVFQworOjEwQ0U2MDAwOUMwMTlFMEE1M0ZCQUZDMUI4RDcyOEM2Rjk2MjUyRUFBQgorOjEwQ0U3MDAwNEQ4NTRFMUU0NzYyQjY4MEY5NUU2REJDNDMzQjk4QUY1MAorOjEwQ0U4MDAwQTQ3RERGN0QzNTdDRDk1MjE1Qjk1N0RFOTdFOTVGQUFCRAorOjEwQ0U5MDAwRTU5MzcwQkRGRDgzRUY2MDFDRTE1MTgyMDVGREQ0QjlCRgorOjEwQ0VBMDAwRjZBMDU1MkMxQ0U5MkVGMzM1Q0IyQUI0RTVDMkZDODI0MgorOjEwQ0VCMDAwOTgyNjhFRDdDNkQ3NkM3MEUxQzgzNEY5REUzRUQ1NjdBOAorOjEwQ0VDMDAwQUY0MUZBREI3NTZERUQzOTlGMzcwODZERUZBN0VBMTlCMQorOjEwQ0VEMDAwN0U4MkRFQUY0QzFEQjIwNkUzN0U0MDBGQUEyNzM4RTkwMgorOjEwQ0VFMDAwMkE3QzVFMTcwMEU3MDZDODA1RTMzMEM5MjVFQTY1QzA1RAorOjEwQ0VGMDAwNEY3MjA3RkJCNzRGQzhGODNEMjNGMEYzNERDRDIzQjg3MQorOjEwQ0YwMDAwM0ZENzlDQzBDQkFEQTlEQzdGNUIyM0UzNzFCRERDQkUwQQorOjEwQ0YxMDAwQjk4QjBBMEZCREZDNzQ4NjNGMzdBRTA3NTRGMzI2M0MyRAorOjEwQ0YyMDAwREQxQkE1Q0M3QjUyRTExODk4NTc3MzA0MUIyMDAwOUY5MgorOjEwQ0YzMDAwQkM5NDNBNjFDRDkyREVGRUY3QjdBNDRFMjIzRUYxRjdFMworOjEwQ0Y0MDAwNTdEODgyNzZGQzVFMTk0RjVCNTNFRjZFQzE3QTNDNzIwNAorOjEwQ0Y1MDAwODJGMjU2OUVDREY3NUY0REY1MDczQTk0QjcwNUVERjk4RAorOjEwQ0Y2MDAwQzc4OUY5MTVDQTg5OTFGMDNEQzE2NkM4RTRGRDI0NzRFQQorOjEwQ0Y3MDAwODA5RjVGQjU3RkRGMTZGMDNFMzM0NEREQzhGQjMyN0QxNgorOjEwQ0Y4MDAwQzYwNEQwQUYyMDgwN0UyMzAzRTAyMjJERUNGNzgzQTFERQorOjEwQ0Y5MDAwNjdGMDlGOEE3N0FFNUUxQTgzRjFCMzJEMDJEREIxMDI4RQorOjEwQ0ZBMDAwRkQ2QzE0RTA3OUUzOTYwNzBBNDM3MDNEMkE0QTg2OUU5OQorOjEwQ0ZCMDAwRDBGNkMzMkREMzVBQ0NBMEJGQzZBM0ZFMjI3RDVDNENCNQorOjEwQ0ZDMDAwRkE3QTIyQ0EzOUMxRDMwQjZEMzcyM0RGNTQyRThEODVFRgorOjEwQ0ZEMDAwRjYxRjZGOTlCMTA2RUZCRERFQjc2NEI1MDE5MUZFRTlBQQorOjEwQ0ZFMDAwOTY5MjM1N0FFOEY3REVDQzNGRURDNUZFRjRENUE1MkQ1NworOjEwQ0ZGMDAwNjM4NEFCRjA2OTZEQzAzQ0Q2MDdDMENFODBGNjZCQUVFMworOjEwRDAwMDAwQTFDRjk3MDRCQ0JGMjhBMDdFNTUwMEJDMzYwMDVFQUUwMQorOjEwRDAxMDAwN0Q3RkRBMENCRTdGMzkwREU4ODc4OEJCOTZCQzdDOTM5OAorOjEwRDAyMDAwREFFNjE3QjREOTJGMDFFREQ5Qzc1QTdFQkZCMzg2QzM0QworOjEwRDAzMDAwNjc1MzFGMjk1QzFFQTI4MkI3MkMyODU0RjNBRjQxQjY1OAorOjEwRDA0MDAwMTc1M0EyRUNCNjhFRjhGNzUwNjdGQzkzMUE2OEQ3OUM3QQorOjEwRDA1MDAwOUE3Mzg5ODcxOUQzRDhERjNEQTIxNjZFMTQ5NUYxMkVFNQorOjEwRDA2MDAwNkQ3OTM4NERCNTFGQzg5NjE0RTIzRTUxRTdGQjE1OEIxQworOjEwRDA3MDAwMEI3MUJGRTJDRURGMjlGNThCMEI2REFBRjkyOUVERjMxOQorOjEwRDA4MDAwN0ZCQzIyRTJGN0Y0MkY1NzE3NkVBMkZEM0Y3OUZGMkVFNworOjEwRDA5MDAwODI5N0I3NURCRTEyODY3NEM5QzdGM0EzNThERkM1OUREQQorOjEwRDBBMDAwM0M1RjZERTc1OTVEMEFDRUFGRjEzMTdFREZEMDU5MDNBOQorOjEwRDBCMDAwRjQwMDM5MkY2NjU2REFGRjZFMEMwRjVGRjgxMkI0REZGQQorOjEwRDBDMDAwRjM5OEI4MTBFREQ3RTE4NTkxNzRERUE4QjAxRkY3QzdDQgorOjEwRDBEMDAwRjY4NEY3ODk3OTEwRTBDNkUwMDc4QzE4NTc2RDdDN0NFMAorOjEwRDBFMDAwMTQ5NUVGOEJCNjY1NUU0MDdFRkNDQkI1NjRDNzFCODNBMQorOjEwRDBGMDAwQzMwOTJGQkRGQkFEMkFDNDJENTlBOTlGNDQ3ODc0NDRBMAorOjEwRDEwMDAwNTg2Mjc2QTIxRkJBRDJDMDcwRkY4OTMxRUIwQkM0MjdEOAorOjEwRDExMDAwNEY5OEM4NEY5RDU2REQ5RkY2N0I4QTdGM0YzRUJGM0JCMQorOjEwRDEyMDAwQjQyQjVFNkFBMEY4M0ZGQ0QxN0QwQ0M3Q0E1MTQ2QUM1NworOjEwRDEzMDAwOUZCMTQ0MkU5REI3NTNGOURFNEY2RjdFOUM0RUZCM0E1NAorOjEwRDE0MDAwMjI5RERCRDlFRDhCMzgwRTkyQ0NCRTc2MEVBMEZCMEE2OQorOjEwRDE1MDAwNDdFNUZDMkE2RkY3NzNBNEY1ODM3OTdDREQ5QTQ0RjlERgorOjEwRDE2MDAwNTI5ODQ1MEE5QjgwN0VEQjREQjYwMUZEQTJGREVEREVBNworOjEwRDE3MDAwRkI0OUE0RkRBQTc3NUI4QjYzOTA2RTQzRkE3MTdFRDk1RAorOjEwRDE4MDAwRUQyQjhFMjk1NkQ5RjU5MjMzN0FDMkYzN0I0NkU5NjFBRAorOjEwRDE5MDAwRDQxQkVGNzVFOTJEMzg0OTZFRUIyMjMxQ0UzQTQzRjZCOAorOjEwRDFBMDAwOUI4MTRGMTZCRUQ5MDExRjI2RjUxM0E5REY2M0E2ODUwMworOjEwRDFCMDAwNzgxNjk2MzVGRTI2M0ExN0M3QTVCQzk3RDVFMkE4QzFDMgorOjEwRDFDMDAwN0MzMTg2NUVEMjIwQjU3RjdDNkJGMjg4M0M5Qzg3OUY0OQorOjEwRDFEMDAwQkZGRTQ4RkE5Q0ZDNjM4MEM3QkRGQ0UyMUEyN0RBQkM5QworOjEwRDFFMDAwM0RFMEQ3RTMzOEEyNkNGOTU4QUY5Q0M3NjNCMTc1MjkwRAorOjEwRDFGMDAwRUFCODgyREYwRjVEMkNDQjNGNkY3NzA4MEYwN0MzRjdDQworOjEwRDIwMDAwMEY2RDBEQTI3MzVGODc5QzdGMEY1NUZCQzc4QTdDQ0M4NworOjEwRDIxMDAwMENGQkQ1RTE2NjVBMTc4NzRCNDIxQ0YwOERCRUVBRjgyRAorOjEwRDIyMDAwQTNGMDVFQzlGMzA2RDI5QjI1Q0Y0NzJGRjI2MjNERDAxMworOjEwRDIzMDAwMTNCNzBDMDNCRkJCQTUxRjNGMEZEMEI5N0NENDA3QzhFMQorOjEwRDI0MDAwNDdGRDU1RTVBM0Y0RTUzNzBCMzc4NTc0MjQxRjU1MzFBOQorOjEwRDI1MDAwQzg0N0Y5Q0YxQkU4N0M3NTUxOTdDQTQ5MTg0NzJDRDJBQgorOjEwRDI2MDAwRERDQzZBNjA3QzIzOUVGRjQ1MENFRUIzQ0M3Q0RFNDRCMworOjEwRDI3MDAwNzRGNTg0ODYxRUU3RjNFQTEzOEZGMzZBQjMzRkZEQjhCMworOjEwRDI4MDAwQkVGMjU0RTc5MEJEMTA3NUUwOUQ4MUZFMTY5NzE5NjhCNworOjEwRDI5MDAwM0QyMkM2MTg0OUVGODk2MTU2NUVERjg1QzUyRjA2QkI2MgorOjEwRDJBMDAwQkMzNDM0NUI0MkZBNkU0Njc5QzhBMjdBMDlGOTJDMkY1NQorOjEwRDJCMDAwN0NGMjFENzhBRUU1RjBDMjQ0REEwNzNCOTlDOUY3QzFBQworOjEwRDJDMDAwNjYzREZBNjIxOEZBOUY4NzFFRTZFN0JCNjc2M0JFMUREQworOjEwRDJEMDAwNUNFN0ZFOUJGQjVFMTU3MkJFOURGRkFCN0RBRjY3RkEwMAorOjEwRDJFMDAwMDVFRTdCRjE3M0EwN0IxNjY2NjQ3MkJDMzBDOTg0Nzg0RQorOjEwRDJGMDAwOEExQjQ4NzhCOUREQ0NBNDIwQzA4QjE4QzE1MjUwRkZERQorOjEwRDMwMDAwMjhGQjVFRTIyRkI5N0UxMjc1MDJBREQzOEY1NTM5MjkwNQorOjEwRDMxMDAwN0Y0MTVFOTg5OTNGRkYyNUJGQjcyNzNFM0Q5RUQxM0U5NgorOjEwRDMyMDAwNTg1NDI1RUQ4MzQ1Qzg3ODlEMjYzMDNCQ0FDRkQxMjA3RgorOjEwRDMzMDAwNkJEQ0JDMzRFNEJGMjBBMkU3Q0MxNzY2N0RGMTZDMjYyMQorOjEwRDM0MDAwRDI2RDZDOTQyNjlFODBGQzE3RUQ3RkZGNDRGNTJEMzQ0MgorOjEwRDM1MDAwQkUxMzAyQjNBMEJEQ0ZGQjQzREY5MTQ4OUY0NkQxRjE3RQorOjEwRDM2MDAwRjRCREE0Mzc4MzY5RkY5QzU5M0M0RjBDMDE3ODY2MzVBNgorOjEwRDM3MDAwQUNCMzE5RjI0REY3Qjg4NDM0N0YzRjMzMTczRjk2ODIzMAorOjEwRDM4MDAwRjRDRUZCNDM5MDFCQ0ZERkNDNTgxMkI0MTZDRjYxOTQ4MAorOjEwRDM5MDAwMzVGMDdCREVEMzU2N0M0N0U3NzE1OUJDQkUxMkUzOUM2NworOjEwRDNBMDAwNUYyRjA5RTJFN0Q0RUI4NzEwRkY0Q0QzRjE3MzJFMkNFQgorOjEwRDNCMDAwQ0U0OEYxQTVCMjEwMTlFRTk1NERCMEVBRkU5MjExRTlGMgorOjEwRDNDMDAwQTFEQ0JGRjkxOEY1MEE3Q0ZGQjQ4MjBGRjQxQjUxRUYwMgorOjEwRDNEMDAwMkFFN0U4NTlBNTg0RjI1RkE0MTMzQTNDRTdGNTU1M0ZFNAorOjEwRDNFMDAwRUU5RjRFOEJCM0QyNzlEMUYyREY5QUFDOEJFMzM5OURBRAorOjEwRDNGMDAwNDU1NTlFQjk3MjlEMzc3RjJERjZBQjYzRDI3NjBCQUU0NQorOjEwRDQwMDAwMUY5QTRCNzBCRENERUFGQjUyMUU4MjBBM0REMzFCMjNFRgorOjEwRDQxMDAwRTBCOUM0RjU5OTMyOUUwQTY5RkNFREM0NEY3QTc2NTBBMgorOjEwRDQyMDAwMUY4MTc4NkNGRUEyMTlGOTYzNzFBODg0NzE5MUYyQUUyNAorOjEwRDQzMDAwNTYwN0Y1MUI2QUI2NzAzQjIxN0YxN0M3OUU4ODdDRTBCNAorOjEwRDQ0MDAwMzM0NjIwMUY3QzIxRTg0QzNDRkY4MDREMDdGNUU3MTg1MAorOjEwRDQ1MDAwQUY2RkZCQ0U5MjE1NjkzNDZGQjM0NTM3QTIzQkYyREQ1NworOjEwRDQ2MDAwRjlGQ0I1RjBERUVENEM0QUU4OEVGN0M0NTY0NDRFOUEwRQorOjEwRDQ3MDAwOENGNUFGODlBNDk3NDA5ODdFOUI4REZFREU2QjYyMDY4QgorOjEwRDQ4MDAwQUU1M0E3QUREODQzRjM5QkYzQzY0MEJDNDFDMEE2QkQ4NQorOjEwRDQ5MDAwRkUxOUQ5QTczOTMyN0Y3OUU0NzM2QkM1MDBCRjAxQTVBNgorOjEwRDRBMDAwRkUyNjZFMjcxQzIyQUJBQzIzNThEMEVDNTcyQUY1RTU5QworOjEwRDRCMDAwMkIwQzQ0OEZGMkE1MjZBMjczNzlGNTVGQTlERkYyRDA3OQorOjEwRDRDMDAwRTYxOEE0NDdGOTc2MDNFNUVGMDhCRDQ5QTJGNkM1RDVFRAorOjEwRDREMDAwQkQ3MzBGQzJCODhCMERFMTE2MDExRTk1MzlDNzFBMTEyNQorOjEwRDRFMDAwMkVBQjE1MDg1NkJFNTdCRUUyRjMxODVEMUFFRjBGNEI3MAorOjEwRDRGMDAwOTM4RUVGQjNGQUZCOEQ4RTQzN0I3NjdBNkI2NERDMzRDQworOjEwRDUwMDAwMTVERDRGMkZEOTExODZGQkNFNDc4M0RDQzk3OENFRDdFNgorOjEwRDUxMDAwM0IyRkM4OEFFNzBBOTU3OERBRTkyNUM5RkMzRTkwQTUzMQorOjEwRDUyMDAwMzkxNEY3QUI2NzNDOUMxODgxNzZFRUIwQzU2REM0RkEzMAorOjEwRDUzMDAwQzM3NUYxNzg2NDhFRDkyQzk2NUM4NDZERkE5QjA5M0U5NAorOjEwRDU0MDAwMkQ5RjIzQTEzRkNDMUYyODcwQkUyOURCQkFDNzk4MDBBRQorOjEwRDU1MDAwREYxQjI0RTNFN0NDNkI0N0Y3MEU0NTdDMDAxRjU5NTBENworOjEwRDU2MDAwRkZDNDM1QTdBMDFEMkVENzM1QTdGNDQ0RkFCQzIyOTBERQorOjEwRDU3MDAwQkYwMEVCNTMxQkU2MUY5OThCN0MzNTA4RjRBMUNDNTdGOQorOjEwRDU4MDAwNzNFQjc3MkM0MEY5MkM3RkVCNjQzRUUyRjVDQzU4NjZDOAorOjEwRDU5MDAwQzRGODU4QjkzQzdGNTgzRjdFQTA4N0Y2RTVEQjM2RTRGNworOjEwRDVBMDAwMzNGRUZFMDdDODc3OEFCRDA3Nzg4OTAxRTAyNjIzODcwNgorOjEwRDVCMDAwMzM2RUUyRkNEMzY0RjQ1MERFQkJBNjQ5OENEMUZFOTlGNQorOjEwRDVDMDAwOUU4REM0NzY0MDc5N0UwRjQwMTRFNUZCNjk5NUIxMTNCQQorOjEwRDVEMDAwNzhERTNEQTdGQUZDREM1Q0FDNEZGM0Q3NzdDNjM3ODUyNQorOjEwRDVFMDAwMzI1RjE0NTc5QkM4MkUxNUNBNzhGMUFDRDgxRTg2N0NDMgorOjEwRDVGMDAwNzFFNkI1M0Q3Qjg3QTI1QzZDMTMyQzRDMkQwRjhBMUMwOQorOjEwRDYwMDAwQzY3OTc5M0RFMEVGNDlDNERGQjZGM0Y5OTg4NzYyNzZEMQorOjEwRDYxMDAwNkJBODg0MzQ1NEYwQTRDODlCODI5NzBBQzZGMUEwRTA5QQorOjEwRDYyMDAwQTU0MjJGRTM0OUFFQkY1QkM2NDMxOUYzNTI3RkFDNzVFOQorOjEwRDYzMDAwODBCNDE5RkI3RkVCMDdEQTZGM0IzMzhEMDlGQzlDMzAxQworOjEwRDY0MDAwQ0Y4QkE2Q0NDRjExQTFERERGNUYyNkNGNkZGQTRERENFQgorOjEwRDY1MDAwNkU5NjU5Qjg1RDJDOEI2MjUyRjU0MEUyMzM5QjUxQzlFRQorOjEwRDY2MDAwMkYwOTREQ0VCQzcxNDQzM0ZFRTc2NTM5NjhBMzM3Q0UzMAorOjEwRDY3MDAwMDNDNkU5RDFGMTdCODI4MUZBRUI1MTE5N0Y0N0FBQTc1MgorOjEwRDY4MDAwQjg1MUFGQ0M3NjQyM0Y5OTI4MEY5NkE5QjhDRkM5NUU2MgorOjEwRDY5MDAwMTc2NUZEMEQzMkE5RkE2RURFQUI0Nzg4MEY0MTc3NDk1OQorOjEwRDZBMDAwMTFCMDY2MzE2QzgxNzFBMEZGRDVEQTlCRTI4NTc5REQxRQorOjEwRDZCMDAwM0MzNEVGQ0Q2MzJDNEMwN0ZBRTQ4OEUwMDlERDg5RjZCMQorOjEwRDZDMDAwRTA1MTkxRjQ5NDMyNEU5QkYzNjNBMjg3QUQ4RUNCMjc0OQorOjEwRDZEMDAwRjIwQkM2MDcxNTM5MEQxQ0VGMzI3OUJDMjY5REQ1ODM5OAorOjEwRDZFMDAwRTc4MkQ5NjI4MUVFQUY4OThCQ0Y4NDFFRTRGNjhFMjI2OQorOjEwRDZGMDAwODlGRUZFNkZGOTAwRjcyMzZEMTdDMzI0ODE2QUFDN0FBNworOjEwRDcwMDAwNkMzN0Y3NjI1ODAyREFFRjIzNzJEQ0UxQzhEMjFENjE5MAorOjEwRDcxMDAwQzUyQTNBQUNFQkVDM0JDQjg2NDg0OEZGQkM5MDgzOEZFNAorOjEwRDcyMDAwQTExQzNENzU5MzIwRjNCRjc1RTQ0MkQ0MDc5N0MyMjQzMgorOjEwRDczMDAwM0MyRkQ1MTRFMTRDNDMzRkFBNDlDNzk2QjMwOENFODc4NgorOjEwRDc0MDAwRkExODNGRkU0MDVFMDg3RjUwMkYzRDY1RjFDQkE1MzJCMQorOjEwRDc1MDAwNkVBMDlCMUJFOTA2RUQ2RDVDOEVBQ0I0OEYzMTM3OEFGMQorOjEwRDc2MDAwRUY4QjVFNUI5RTMyM0NBNDlGQUEwNTY5NjNBNkJGOURCQQorOjEwRDc3MDAwNzIyRkVGNzE3OURFMjQyMzMxN0U3QjgwRkM4OUY2Q0UxNworOjEwRDc4MDAwMjRFNzMxMEFDQzgzN0E3QkFGQUU3MTg4QkY4QTEwQjNBRAorOjEwRDc5MDAwMEU5NzcwODFGNTgxQjA3RjNENTVBOTQ3M0Y5RjJEODkzOAorOjEwRDdBMDAwRERBQkJFOTc3NjM0Qzg0OUY3Q0ZCQ0RENDVCNjExRTg4RQorOjEwRDdCMDAwNTEzREVGMjM3RTlFQjc4MURGREI1MkVDMzRGQ0FENkEzNgorOjEwRDdDMDAwRTMzRjc4QUYzNEYzN0MzRUVBRDczRkU2OThFODVFNTMxOAorOjEwRDdEMDAwNEM3RjdFREVFNTE0QUIzMzBFNDdGQkZGNkQ3MzdFOTgwNgorOjEwRDdFMDAwRTQ1RjlGREM3MkQxMkQ4NjkzQkYxMEFGNTkxRjk0QjVCMworOjEwRDdGMDAwN0U0MEYyNUNDRTlBRTkzRUY2QjQxNTlGOEQxRDgyRjQxMAorOjEwRDgwMDAwN0VEOTQwRTcwNzY2RDRDNjkzOUQzQkI5Njk3QTA2Q0VCOAorOjEwRDgxMDAwNzdEQUQyNjQ4MjY3NkQ3RTkwQzMyQjc4RkVDMzY5NEI0MgorOjEwRDgyMDAwQjM1RTQyRkZFQjY4OTAyRDFGRjlEOUJCNUFCMEUwRkEwNgorOjEwRDgzMDAwNkFEOEU2QUM0NUY3NDFGREIwRDAzRTVENzFEQzg3MzY3NQorOjEwRDg0MDAwMUQxRDhCNzQzRkI0NTAyNEZENjREQkY0RDQyNEFDQjdBRAorOjEwRDg1MDAwRUQxNEYxQzYxOEFDNjcyQzhCMzBBRjI5RDM4NzVCRDBBMQorOjEwRDg2MDAwMkY1MENFMTdENjE4QjhCRTNEMkZFQjg3OTM2RDI1RTcwNgorOjEwRDg3MDAwRDNCQzlBOUExNEY0OTdCQzFCQzAxRUUxQkVCN0QxNUIwRgorOjEwRDg4MDAwNDJFN0JCMDU4Qjc1MjNGMENCQjc4MjkzNjA2NkIxMjQ2QQorOjEwRDg5MDAwNTRFN0UwN0Q5NkY1OTQxRkU3NUNCMkM5ODI3RUYyRkQwNQorOjEwRDhBMDAwMjY2NjQ1QkZGNkZFRjc3QTBGQzJBNTgyNEQ1RTU3OERGQworOjEwRDhCMDAwOERFNERGNTVGMEE1N0NERjJCRjMzRDEzNTc5NUQwQkVFQgorOjEwRDhDMDAwNDNBNDk0ODBGQUFENDkzRTM3N0U1NDFFRUZDOTI1MkZGQworOjEwRDhEMDAwNEY0MkJGRTBFNDk2RTQwOEE2QzJGQjQ5Mzk0RkQzMkM3RgorOjEwRDhFMDAwRDA4M0RCM0E1OEVGRkQ3ODkzMTI3NzcwRDE3NzRBRTUxMQorOjEwRDhGMDAwNzhFMDNFNDM2RDJGQ0NGQjE5NzhCRkVCQzQ4NjIwMzMxNAorOjEwRDkwMDAwRTZFNzBEQkNFNzc1QzJDMEVENDdCQkZCNUUzQkI1NzBGQgorOjEwRDkxMDAwNjA5RURCQzBGMTI4NjVCQkZCRkZGRDQzM0FGNEUzMTVENQorOjEwRDkyMDAwMzkwQjdDQkZERDdERjJBNEVCM0I1Rjg1NzlDOUYwQkU4RQorOjEwRDkzMDAwNzdEMzREOENDNjM5MzJGOEM3Mzc1MTVGOTdENDlBMkNCQworOjEwRDk0MDAwNzhGRkZFNTg5MDQ0RUIyMTY3MTY5MzM2QTM5RDMxNEIyOAorOjEwRDk1MDAwRTFCODlFM0ZCNjJGODNDRUZGOTU3Q0M1NDhBRTRBRUExQworOjEwRDk2MDAwNDUxN0E2MkFGRTYwNzVERkRGRTUwMkZDNjBCREMxOEFBRgorOjEwRDk3MDAwRUY5RjVDQjM3QTEyMTczMzZEOUU4NTZDQzZFNTczMjZGNAorOjEwRDk4MDAwQUM5M0RDMTZGRkJBMjg3MEJEMzQ3QkVEMUI3NDhGRjBBRQorOjEwRDk5MDAwRTc1QTJGMjk3MUE0NDA3Q0RGREE1RkNFNEZEQUM5RkQ0OAorOjEwRDlBMDAwQjlGNzgwNkRCMjA3QjVDNzc3NkI5NTgzRDY0NTY3QUI3RQorOjEwRDlCMDAwNEFBOUNDQTlEQjkwRDc1M0MyRkIxNDQ3N0UzQjBDRTVBOAorOjEwRDlDMDAwMjYzNDlDRTIyMUFENTU5NUI0ODk3Nzc2NjdDNjY1QkM0RgorOjEwRDlEMDAwMUZGQTZFNDhCODA1RjVDNUQ5QUE4NUYyRTUwMjk5NEYzOAorOjEwRDlFMDAwNjRCRUJDQTVCRTUxRUNDOUE4N0RDMzMwNjhCRjNCMjQ1MgorOjEwRDlGMDAwOUNFRUJBMjREOUIyQzNEMUNFMkI3NDBEQkNERkFDQ0MxMworOjEwREEwMDAwRUZENEEzOUNBRUNBNzg0RjZEOTkxRTg2N0U2N0UzQkFBOQorOjEwREExMDAwQzg4NjlDMjgzQzlFMUI2RTQxN0Y3QkE2N0NGRUU1Rjg1OQorOjEwREEyMDAwNUFBRTZGQkUzNTg3QkYzNDA2Q0ZDRkFDOUYxODgzRUI5RAorOjEwREEzMDAwQkEwNzBENUVBMzE1RkFCNUVFMUExRjg2NzFCQzZGRjQxNgorOjEwREE0MDAwOUUzMEJDNkZGQzBEQjQ3N0EzOUREMEJCNDRENDczNDMxMAorOjEwREE1MDAwMEIxOEVERTMwRDc1RUI5OTE0NEY1QkU2QzQxNzM5QUQ2OAorOjEwREE2MDAwN0ExN0QyRjVCNEZCRTI5RTJCQzg0N0FEM0E4QTc3MDEwQworOjEwREE3MDAwNjZGNjVDODFGNkQ2RDAzRTE0Mjc3Q0YwNkRCRURFNjQ3RgorOjEwREE4MDAwM0Y3NkUxRjUwMUY3MTY5RkU5Q0ZGRDk2MTNFQkRGMUMxQQorOjEwREE5MDAwNDdFQkYzNEQwNjBCOEVGM0VDQTZDRjYzRjAxQ0NFNkM3OAorOjEwREFBMDAwQzZDRkQ3N0ZCQjQ1QTA3OUNDMDY3RTBDOEE0N0ZEQzA4OAorOjEwREFCMDAwRTNBMEIzNDFFRjlCODVGNjdDOThCN0E1OUFGODcwMzY0MgorOjEwREFDMDAwRjAyMUU2RjU5RTZERTNGOTk4Njc2MzNFNjY4OUI1Q0I3NAorOjEwREFEMDAwRkZEMTU1RTZCQjM5QzA3Nzc4N0ZGN0U3Q0VGQkYxM0I0NgorOjEwREFFMDAwODUwRjAzRTQ1RUExQkI4MjE3ODVGRTdFM0U2NDlBRkMyRgorOjEwREFGMDAwODIxMTc1MDM4N0Y3NjQ3RTdEQTBEQ0VGNjA3QUNGMkEwMAorOjEwREIwMDAwQkNBN0IxNDAwQ0FEQzU3QzU1RkJGNTk1N0ZBMEJDMkRFNQorOjEwREIxMDAwNEUzRERCNENGNjlDQTU2MkJFQkMwNUUyNEQ1NjhDMDcyMworOjEwREIyMDAwRDYxODJCREJGMkJBNjA3RDYwNUUxNzMxODRCRjNGMUVEMgorOjEwREIzMDAwRjMxM0MzN0NCQkE2QzVEM0Y3MjY1OEFDQTMxMEREODY3MAorOjEwREI0MDAwMjgwRkM1MDVDNDNDOUQ4REVFRTVENTk4NjhERDFDQTg2MQorOjEwREI1MDAwODdFQTY0RkFERTk1QzZGNUQwRkZGNEU3RTdCNTk1N0I3MgorOjEwREI2MDAwN0Y0QTA5OUFCMTM3RjJGQkY4RTA4ODRCMTIzNEQ5RDVENQorOjEwREI3MDAwRkZEMEREQjg0RjNCN0U1OEM0MkYxMkUxRkI3QjVGM0RFOQorOjEwREI4MDAwQ0FFMThDODhFRDA5MDAzN0Y1RkZGQTZFQkNDNzMxRkU5QgorOjEwREI5MDAwRTY4ODJDMDNGQTAxRDVDN0VFMUUwOUYwRjFGRUI2NzczMAorOjEwREJBMDAwRkJBQkJFQTNGNDBCQ0Y3N0UzRjM3RkM0MzlERUVGNEZCQgorOjEwREJCMDAwQ0ZCRDI1NDhFRjczNDIxOENGRjc5NkU0QTUzOEE4RjJGOQorOjEwREJDMDAwREUwMTgxMUQ3RTU3RjBDMzFFMDM4QkMzQkMwNkZGODM5RAorOjEwREJEMDAwQkEzQkJBRjNCMjdCOUFFRDYzRkU3REVENzNBNEQwNzdDNgorOjEwREJFMDAwQjhDRTk0Rjc3Rjc0NjZDOTg4RkU5RkRENkFCNEYyRkNGNAorOjEwREJGMDAwOEFDQzZFMDZCRkVBMkU5OTdGOEJDRDk3NDc5MkZEQURGQQorOjEwREMwMDAwNjQ1NjEzMjYzMDU5QUVCRDhGRDVDRjdGNkY2RkZEOEQxMworOjEwREMxMDAwRENEQjYzNEU5RTg3QUY0NkNFQzNEN0Q5M0Q0QUExRTEzOAorOjEwREMyMDAwQTMxRkQwQkYwQ0JDM0Y5NUYxNDlGMzVCQzgyN0UzODAyRAorOjEwREMzMDAwQUZEMDVFNjQzNjczRjgyRTk5NEZDQTc3OENBNTdDQ0YyRgorOjEwREM0MDAwRjMwRjE4NUNFODI3Q0M5MkZEQjEyNDQ3MTcyNjQxQkI5RgorOjEwREM1MDAwNEIyMEJGQTgxNzVBQzdCOTUzNTA3RjlDQTg2MkI1NDkzQgorOjEwREM2MDAwQTBCMDBBQ0M4RTRCRkQwMTRGNERGMTFGNTE1RUI0MTM5NQorOjEwREM3MDAwRUI2QkMyRDBFRjM5MDNFQjg5MzFEMDQ1OTlFQ0RGQjNDMAorOjEwREM4MDAwQ0JBMkZCMzZGNDgzRTNGQjZENUNBOUUyQjc5RjY0M0U1NQorOjEwREM5MDAwNkI4RDc3QzdFMUZBQzYxOTZGRTJGOTFBMkZFRkExM0MzNQorOjEwRENBMDAwQ0YwNTA5QTNCMzMwOEVCNEJGNkEyNzNCOUFFQzdGQUY5MAorOjEwRENCMDAwQjNGQjI4NDM3NTIzMEM2OUFBN0RDOTcxRkE4RUNGNjkxRAorOjEwRENDMDAwOUM1MUYyNjk2RUUyRjZEQkE0QUZBNTNDNUE0MENBQ0E4OQorOjEwRENEMDAwNkE4MkVEMTQ1NzhBNDUxRUM1RjhCMEY0MTBDMUNCNjZCMAorOjEwRENFMDAwMzEwQkRENjNGNUVGRDNEMTdENTA4NUZFMzZFQjk1OTE5OQorOjEwRENGMDAwRDg2RTFDRDAxRkY1OERDRUVDRDUyMzZDMkZFMEU3NTNFQQorOjEwREQwMDAwRkEwMUUxNTA5RjI4RjQxRjI1MkVGQTJERDI2MUJFN0MyNgorOjEwREQxMDAwOEY2QkJFNTBDOTYxODM5OUNFQjkwNkVBNDc4QzZCMTZFQQorOjEwREQyMDAwOTFERTc0RUVDRDQxN0YwQ0Y0MjRFNTU1OTBGNUEyMDQwQworOjEwREQzMDAwRkZBM0JDNDhEOTFCOENENEVDREE3OTkxRjZFNkZDMDczQQorOjEwREQ0MDAwRkEzMTIzNEQ5QjQ3NUNBMTkzRTI1Rjc1NDYyNzQ1NEYwRgorOjEwREQ1MDAwMDJCRDg2QTU0NTVGM0ZCRDk0M0M2NUYzOUZFN0YxQ0VDQworOjEwREQ2MDAwRjlDRjRGOEYxRDQ0NzgwMzg5NDM3RjI4RUQ0RjQ0QzQ3QQorOjEwREQ3MDAwOTlGMjFDRDhGQTQ4RTI2M0MzMDhCQjg0RkE3NkVDQ0U2OQorOjEwREQ4MDAwOUU0QzgyNDdCMzc2MEE3NEJFNzVDQ0NFNDg4MkMzN0M2MworOjEwREQ5MDAwREQ3OTVFMjVEOURFOEZGRDYzQjcxMTE4OUYzQ0Y5RDI3RQorOjEwRERBMDAwREYxRkM2QkNGNzYzN0VDMzI4N0VBQzBCMEVBMTdDMTNCRAorOjEwRERCMDAwRTIwODM5OEY4MzE4RjIyMURFNjNCRDIwRjFERkExQjBDNAorOjEwRERDMDAwQjM3NkY5MDM3NDQ0RkYyNjdFNEUxNjU2Nzk0RTRFMjdERAorOjEwREREMDAwN0VFRjZGRkUzRTZFRTdFNzBGRTdGQjgyMTdGMDBENjgwMAorOjEwRERFMDAwN0ZBMTUwQTQzQzREQ0YwNEE3OTNGRjU2NzNCNzgxRUU5QgorOjEwRERGMDAwNDczMEE3RUQyRkI4QUU5QTJDRjM4MzI5MTYxNjk2MkEzMgorOjEwREUwMDAwN0EwNTQ5MjBBRjJBRkEzQzFFRjREQjBGMUREMEJGMDc2QworOjEwREUxMDAwRDY1RDQyMEZDNjgyNTMyMzM0RjU3QTY3RDAzNzk4M0ZEOAorOjEwREUyMDAwRDYxMDJCNUE1QzMwRkU1MDZCMEY0RDdGNzZCMUNDODBGNAorOjEwREUzMDAwRjExNEU2RTA3RUI0QzI1RjRDNkNENUQzQkRGOTVDOUVCNAorOjEwREU0MDAwQkZFMkVFQzlEQTdCOTI4NkRDRjMyM0M5REVFNDZBRkQyOQorOjEwREU1MDAwNkZGQjM1RjIzNkZENEFFMUE3N0VBQzlGOUM5NzlFRUNBNgorOjEwREU2MDAwRkY4NTE2N0UzRjQ0NjJGNkI1OEFCQ0EwRkUwN0VGRTY0QQorOjEwREU3MDAwMTlDNENGQTQyNjAzNzM0OTg0QkZEN0IwRkU4MkQzNjRFQworOjEwREU4MDAwQzE3ODQwOUIxRjlFMDRFRjQ1QTE5MTM0MTM5RjYzNUVCMAorOjEwREU5MDAwNTBGNTNDMzEyRkE4MUEyRjk4MTc1NDBENjM1RTUwNzUxQQorOjEwREVBMDAwN0JDQzBCQUFBRUM3QkNBMEVBN0FDQzBCQUE4NjMxMkZEQQorOjEwREVCMDAwQThCQTNERTYwNTU1QzM5ODE3NTRERDFFRjM4MkFBNjE0MgorOjEwREVDMDAwQ0MwQkFBNkU4Rjc5NDFENUY1OTgxNzU0NUQ4Rjc5NDFBNworOjEwREVEMDAwRDUzMEU2MDU1NUI3QzdCQ0EwRUE3QUNDMEJBQUFFQzdDOQorOjEwREVFMDAwQkNBMDZBMThGMzgyQUFEQjYzNUU1MDc1M0RFNjA1NTU1NworOjEwREVGMDAwRDc2MzVFNTAzNThDNzk0MUQ1RUQzMTJGQTgxQUM2QkM1OQorOjEwREYwMDAwQTBFQUY2OTgxNzU0MEQ2MzVFNTA3NTdCQ0MwQkFBQUU1MQorOjEwREYxMDAwQzczQ0EwRUE3QUNDRkJBOTg2MzFFRkE3QkE3RDMzNUI3OAorOjEwREYyMDAwOTI4Qzc2NkM3N0JDRTM3RkQyNjhERkU5NUJFMkU3ODNCMworOjEwREYzMDAwRjcwMzNGQTMxQzM2NERCNDUwRkVDMjFCNUMyNzdFOUVFOAorOjEwREY0MDAwMjZFRkY3QzhGQzdCODk4NTRDQzU3M0U4OURCREFGRjAxMworOjEwREY1MDAwRTdFQkIyQkYwMUY2NjAzOUYxMkYwQkFENDU3RkVFNzFGMworOjEwREY2MDAwQkQ4REVFNDMzOUVCRjhGRDQ0QTZFNzdFQzAwMjUxRjZDNQorOjEwREY3MDAwN0ZFNEJDMTAwQjQ0ODlGQzAwQ0MxREFDNTc4REE3QUJEMworOjEwREY4MDAwQ0RDQ0Y0MkEzQzQ0MTY1ODM0NzBCNDNENTZEM0JFREI5NQorOjEwREY5MDAwNjQ0OTUzREZERDkxQUFBOUVGNTk2QUQ1QzBCRDJCQjNGRgorOjEwREZBMDAwMzVFREZCMkNCNDY5RTA3ODY3ODFBNjdERTI3MkJCMDY5MworOjEwREZCMDAwNEVBRTlEQUM2OURGNzdBRDQzNTNERkNGNTVBQUE5RUZENQorOjEwREZDMDAwQkZBNTUyMDMwRkE4NUJBODY5N0ZGMzRFQTdBNjdFQTA0QQorOjEwREZEMDAwN0JCOUE2M0VBM0E5NTYwMzY3MzVBRkQ1QjQxRjcyRDA0RgorOjEwREZFMDAwQTVBOUNGRjE2Q0QxRDQwRkZCQjY0RTAzREZFMkREQTlCQQorOjEwREZGMDAwNjk3RjlCQ0ZBRDgxODdCMzdEOUFGNjc5RTYwMzFBNzg2NgorOjEwRTAwMDAwOTRFNTRCNERGQkRCNjM4RjY4RUE0NzRCMjczNUY1NjU5RAorOjEwRTAxMDAwQTdCOTdGQ0Y2QTYwN0Q4MDcxQ0ExMDlFNUY2M0FFOUI5NworOjEwRTAyMDAwRDVBMTdGNzE2N0VBNzk0RDdCNDMxNEFDMTc4MDdGQ0ExNQorOjEwRTAzMDAwNDExRkEyREZGNzdEOTczOENBQzdDQzJBQzNBQzc4RUY1RgorOjEwRTA0MDAwREIzOUEyRjIwRkVBN0JERTYzQUQzRjY4QkVGRjRDNzBBNgorOjEwRTA1MDAwOTgzQjg4RDYxNzY2QjJCNzIzMDYyNDkwN0Q2Q0NCMjdGMQorOjEwRTA2MDAwQTJEQzY3Njc1RTE2MUI0NTIxMjEyRkZBNDcwMkZFQzIxQworOjEwRTA3MDAwMTJDMDYxMzY5RTE3MUFGQzIwRjI5RjJDRTAxN0ExQkYzOAorOjEwRTA4MDAwRDlCNjJFRDJDNUM3QTM1RDBFRjZGQkM1QkRBRUE4RjJBQworOjEwRTA5MDAwQkM1Q0NCMkZBNjZGNjc1MTlFREU1MTAzMzAxRTVFRjcyRQorOjEwRTBBMDAwNDYzRUFFQjM2NjMxRTczMkRDNEY1NEYyMkNFRTBGRDI2RgorOjEwRTBCMDAwQzZCNzk0NzJCNDE5RjBBQkZBREVCRUEwREE1RTgzQUVENgorOjEwRTBDMDAwMjJFRkEzQ0RBREQ0QkVBRDVGMzlGRTI1QzA2NEU3QUI3MgorOjEwRTBEMDAwRkFGRjJEQUNGRkY0MjBEN0I1NTUyMDdGRTAwRjNENTk1NgorOjEwRTBFMDAwNjUyMTc4NEQ1NTJDQzE0RjU3NDk1NEFFQUQ0QUE1RjIyNAorOjEwRTBGMDAwQjkyQTJCRDVBRkFGQ0EyNkY4ODUyQTFCQzFBRUFBMDIxMgorOjEwRTEwMDAwMkEzNzU2RDlFOUY5QTZBQUM5MDRCRjU0RTVBMDcyNEIyQgorOjEwRTExMDAwNTUyOTk1QUY1NDU1NTJGREQ2QUE4NTA0QkY1RUU1QTQ5NgorOjEwRTEyMDAwQjJBRTZBMzkzRERGNTY1NTRCNzA3REQ1NUE4MkRGQUFCMworOjEwRTEzMDAwNzI1MUI5QjM2QTBCOTVFRjU0RDU1MTdEMDNGODZGMDg0RQorOjEwRTE0MDAwRUZBRTcyMTNFQ0FFNkEyMkY4RkRBQTY2ODIzRkE4M0FERgorOjEwRTE1MDAwNDhGMERFMkEwRjk1NEQ1NURGNTJGOUU3MkEyRkQ1N0Y3QgorOjEwRTE2MDAwNTJFNTIzQjg1NURFODc1ODM0NDBEMERDQzc1MzYwM0RCNAorOjEwRTE3MDAwM0JDNkZEM0RDQzVCODE3OTE4QjIwRDY3QUY5NjFGMzc2QQorOjEwRTE4MDAwOTAwRUE3RTRGRTBEMjNDMDVEQzIzODcyOEY5NDhEMzVDQQorOjEwRTE5MDAwQUE3NUM1RjIwMURDNUZBQ0Q2RjFGQzJERDUzRDk4QTU4MgorOjEwRTFBMDAwODZGQzc2MUJFM0U3QjRCOERGM0UxM0ZGMjVDMUQzQTg5NgorOjEwRTFCMDAwQUFCREI4REUyOEE5RTQ3OUNBQjM5MDFGNTM4OTFGM0ZDRQorOjEwRTFDMDAwQjlBMTc1OUFCQzJFRDg5MTY4N0Y2NjAwQUU0MzQyNUNCNworOjEwRTFEMDAwNUZDNDY3RkFFRkQxMUY0Qzc0M0M4NzdDN0FBMUYyQzEwRgorOjEwRTFFMDAwQkREODdBQTZDNTlBODIxRjE5NkI3MjQ3NjNGRTJGRUZCRQorOjEwRTFGMDAwM0VEMUJBNTFFQUZDN0IxNUYyRkQ4NzRFRUI3NzlGRUNERQorOjEwRTIwMDAwODVGNkFBRTAyNzkxRTJGQUZCMERBMTkzNzE5RjdGQUJGRgorOjEwRTIxMDAwOEM4RkFEMDM3NDlBQjIyOEM5RkUyQThFRTc0NDcyRTU0QQorOjEwRTIyMDAwNEIwRjA5RkVGQkZCNzdFMTEyMUZFNDdCM0M5MzI4MEZBOQorOjEwRTIzMDAwQ0U0NDY2RkIxMDVERjBCQkMxMTE0NEY4MUVFNkE0QjJFQgorOjEwRTI0MDAwMzVDMTUxOEZFRkRGMEIwQjEwODQxRDQzNEQ3MTFEQ0Q3OAorOjEwRTI1MDAwMjc3MDNDQkJFNUYxRUM5NkM3QTE5NDBCOTJFQ0JCMTA4OAorOjEwRTI2MDAwNkZDNzkyNkQ5QUYxNkM5NUYzMzM4QzYzREUxNzcwNUMxNworOjEwRTI3MDAwRkZEQzc1RkVCODkwRThDNzc3NUIzQzg1NTU1MjlFOENGNQorOjEwRTI4MDAwMjJDNkUzMjk4RjYzNUU4QzI4N0Y1RTBDNjVGRDUwQjQ0NworOjEwRTI5MDAwOEZGRkNFMTFGREExRkQ1QzEwNEZFQkRCQzBCQzE5Q0I5NQorOjEwRTJBMDAwODZFRkUxNzkzMDYwM0Q4NkY3N0Y4QkU2RkQ4MkY0MkZDMworOjEwRTJCMDAwRkUxRTE0REVEQjVERDBFNTMwRTU5OUYxQ0MwMjVFRURBQgorOjEwRTJDMDAwNDk3OTM1NzhERTFCMDcyMEIwMjdFNUQ1QTA3QUUxMjYwRAorOjEwRTJEMDAwRjg3Rjc3MUM5NzM5NTU0RkUzRUI0MkY5NEU5RTA5REVFNAorOjEwRTJFMDAwNEY3OTY5MzBBNjYwRUE4QTc5OEY3OUJDNjZCRkZEM0NCOAorOjEwRTJGMDAwRjdCQkEzQkM3NDNGNzU0N0EyRTNFQjAxM0M0RUZFNzQzMQorOjEwRTMwMDAwMDZDNjg5OTA5RkYwM0IxNjE3OUQ1RjAzN0UzMjBBODBGOAorOjEwRTMxMDAwQTI5OTUxQzA0RjFERjgxQjBBREZDQzk1RUZFMTI4Q0YyMQorOjEwRTMyMDAwODExRjVCMTFERjY3REYxRTkyOEE3QzUzQjEzQjQ3NDIzRQorOjEwRTMzMDAwN0NEN0U4Rjg3RDNBRTc5RkU1N0Q0MUY5RjcxMEM0RjAxNgorOjEwRTM0MDAwQjQwRDc0RUYwMDlENzFBNDZGNEUyOEREM0I2ODE0RDlBNQorOjEwRTM1MDAwQzIzNzNBRDBBRkExRTk1Q0RFRjdDN0YyN0M5MjM1MDE1MworOjEwRTM2MDAwRkI5M0M2NzQ0RTc3NjMzQUU3ODdCMUVGRUZBMzNDNjQ0MworOjEwRTM3MDAwNzM5Qjc4QkM5QTY1N0FEMkVDMUQ5Q0NCQUE1OEY4OUIwQgorOjEwRTM4MDAwQTc5MzU0RjNBOEQ4Nzk4NDlGRTc2MjlFMzRGNTM5QUVGOQorOjEwRTM5MDAwNjRGOUZCMEFGRjg5QzY1MEM3ODYxMEY1Rjg3OEZDMDFCRQorOjEwRTNBMDAwRTQyMDI0M0Q4QkU0RTAzOERFRUIxRTY3OTJDMkVGMTFERgorOjEwRTNCMDAwRThGN0MxQ0U2MjdFMTlDNzFGMkM3NDFFNTAzOTE3Mzg3QQorOjEwRTNDMDAwODNEOUE5OUMwOTk2MTNGOURFRUU1QzRERjdFNzY3QjM5NAorOjEwRTNEMDAwM0E3QTNFMzc3QjdBMUNDMjE1Q0MzQjMyMTZENzQ3Q0JGNAorOjEwRTNFMDAwQUIzRkM0NzBEMEM0REFENUEzQkFDM0JDMjZCOEE2N0RFRgorOjEwRTNGMDAwODhFNUY4NERDMjcxQTc0NDcyRDQzQjFERjdCNzg1Q0FCMgorOjEwRTQwMDAwQTUzREUwN0JGNzZEMURCRTE0RTNENkUzNDQ0RTA3RjY1MQorOjEwRTQxMDAwMzFBNzQzMTFGMEIzMThEMTdFN0UyMDM3NDlFOTVDNkVGNQorOjEwRTQyMDAwNjhGQzhBREMxNDJENjYzNjNDN0ZBMERDMEY2OTkzQTM2MAorOjEwRTQzMDAwRUMzOUZGRTg4OTdCMzhFMDRGMjJCRjU2RUMzNjQ1RDBGNworOjEwRTQ0MDAwRkExNEYzQ0NBMEJFOTJFNTY3QTk5RUZCOTc0RTRDNkRFMworOjEwRTQ1MDAwNEFGQTkzRkIxQjA2OUI5Q0NGOEI3MTdGNjQ4RTkzQUYxNAorOjEwRTQ2MDAwQzc0RTE5QjhCQzlEM0ExNEVBNDJGRTVFRDBFNUY1MzhCNQorOjEwRTQ3MDAwOTIwRjgzMjIxRjNGNERBNUYzM0QwQ0ZDOEY1QkRCRkIwRQorOjEwRTQ4MDAwMUY2RDc5NjY3QTMxRjIzNzU4OUMyMzc2NTBBMkRGOUU1MQorOjEwRTQ5MDAwOUZEMkI5MDY4N0YxQkNGQ0EzMTA1RjdCNjNGOUZBNzlDMAorOjEwRTRBMDAwMEVFNkExQzFGQUFFNzYwOUUzQTVBN0EyQ0Q3NDVGMjg1NgorOjEwRTRCMDAwMzBDRjE5NjM1NjlBOUY0MTlFMUY4QzZDMzJGQUQzMjYzNworOjEwRTRDMDAwMzlBRTU2MTMzMERGRUY4M0UyNjhCRUQyNzA1NkM3RDA0NAorOjEwRTREMDAwQjFEMDVCOUNEMzUxRUUxRkUyNzY2MjQxOTc1RjNCRjA3NworOjEwRTRFMDAwRkI5RTIwNjYxMTg2RDE3QzI4MUVFQkQ0MzE3QjBEOEZEQworOjEwRTRGMDAwQ0ZEMkZDMTZFQUNEMTYzQzk3QjM2QzlBRTgxMUM4NEUwMQorOjEwRTUwMDAwQzAzODMxOUUxNzY1QjZGMkJDQUE0QUZFRURDMEYxREFGQQorOjEwRTUxMDAwQjRFMzMzQzczMTlDOUY0RDY0REVBMDYxN0NCQzM4M0VDMAorOjEwRTUyMDAwMjdEMDgzRTgwM0YwMzRENUY4QTA1RjE3RTVGRjA5OTZGQworOjEwRTUzMDAwMkNFODg3MzVGREY4MTA4RjJGNTc3M0ZGMTFDNkJGODU2NAorOjEwRTU0MDAwRThEMzFEQzZERkYzREFFMzM3MjA4QkMyRjgxN0E0Qzc4MAorOjEwRTU1MDAwMTNERkQ1RTAwRUEyODg3NkI2MkJFOURGMDk0MUY2NDczNgorOjEwRTU2MDAwOTAwRjkzMUMyQjdCQ0RDN0I4NDY4RUM5OEFGMTNCNzZBMgorOjEwRTU3MDAwQjlBNjE3RUFBOTEwMjY1MTVFQUQ3MTM2OUU1NzBCQkE5RgorOjEwRTU4MDAwNUI4MkZDMzAxRUYzRDY1OUM4MEY2ODU1RTc2MTYzMDEwMgorOjEwRTU5MDAwRjEzNTIwMEJDNTU3Mjc2MDdDOERERjI1RkEwMEUzQjNFQQorOjEwRTVBMDAwMTNFNUYzQ0RGREQ4NTcwQUZFMjhCRTI2RTJGODI4NUUxMworOjEwRTVCMDAwRURBMDcxOUE5MEIyNTAwNjYxOUM4N0U4RTBBMjc5MDRDMAorOjEwRTVDMDAwMzNCNzFDQ0Y2RTI2RkY2MEI1Q0M4NzQzMEYzMkIyMTMzMgorOjEwRTVEMDAwNDM0M0I4OUREODdEODRCOUYwREM1N0UzMEY5M0YyNDJGMgorOjEwRTVFMDAwQTE3RUY3NzkzREU5MjlDMDEzRTUwMzdDRTc3MzZFNTdGNworOjEwRTVGMDAwNzY5RjNDREUxM0Y3MDNBQTdGRDhEQjEzRkRDNEREMDY0QworOjEwRTYwMDAwODc1ODgxRUZFNzk4MkM4QkFERkVCODQ2QzNDMTEwMUUyQQorOjEwRTYxMDAwRDc5MUUzN0NCN0M4RjM2QzYwQ0QzNTE1NTA5RkRENURCNQorOjEwRTYyMDAwNjQxODA3Q0M2QTcxMDdBMzNDNjM4RURBOEVGNjFCNzNGRAorOjEwRTYzMDAwMkYxQTM1QkY2QjYxQjA2OEUxNkNBNjgyRTNGMUU4NTEzNworOjEwRTY0MDAwQzBFRjdGREVFMDNBNzc1QkJBRjZGNzI5REI3RUY3QjNGRgorOjEwRTY1MDAwMzVFQUJBN0VGNzMzNTM5RUM3QUE3NEZCQkJFOTY0RDc4OQorOjEwRTY2MDAwMjY4ODMyREUwNUM0MTdFODgxNDZDNEY3NzNFNTQ2RkEwQQorOjEwRTY3MDAwNUQ4M0M2NzI2Mzc3OEY2QTdDQjVCM0ZFNDlGODdERUYyMAorOjEwRTY4MDAwQzc3RjkyREQ3QTJGNEJDOThGNTMxNzg0Q0Y4RENFNTAyMQorOjEwRTY5MDAwOEFCQjNENzc1OTQ3NzFCNzc1QTU1RkQzRkFBNDM2OUJGRQorOjEwRTZBMDAwRDFFRjg4RDU1RTJFMjYzRkUwNTIwMUMzNEQyNDU2N0QyMgorOjEwRTZCMDAwRUJGRjk2MjJGQ0JCNUJDQ0Y0QkRDMEYxRUYwMjdGREUyQQorOjEwRTZDMDAwMEQ4NDdBMTdGQzc5Nzc1RkM2REUwNjdGMUU2MUJDQ0ZBQQorOjEwRTZEMDAwOEFFNTc2RjBFN0IxNzQ4MTNGOEZFNTBCRTBDRjYzM0JDRAorOjEwRTZFMDAwRjRFN0IxN0MwRUZDNzkyQ0Q3ODIzRjhGRTVEM0UwQ0ZFNQorOjEwRTZGMDAwNjNCQjM1RTBDRjYzRjkyNEY4RjNGODFDQzY5NTQ3RTMxNAorOjEwRTcwMDAwM0FDOEU4REVGRUUyRTBCMDE1RTg2NzQ4Q0U1MEYyMzdERQorOjEwRTcxMDAwM0VCNTBERUFFMjUxRDlEOTVCMkZFQTM0NzRDRTZERDVGRQorOjEwRTcyMDAwRkVCRUNERDA2MzExOUFERjNGQzlGRUFBODdBNjdFNzBEOAorOjEwRTczMDAwNEI4MkE2M0VERUE5RkQ3RDlCM0UwQkFGRkVGQjM2M0QyOAorOjEwRTc0MDAwNEI0NzA0RkMzRUNFMUQwMUJGOUZBM0ZEN0Q5QjY4RkI5NAorOjEwRTc1MDAwN0QwMUJGQkZBM0ZEN0Q5QkRGQzlGOTMyMTUzQUE2NDhGNQorOjEwRTc2MDAwQUYwNTIxNUZBQzJCOUQxMENFM0FGMDJGOTRGMjQ5OTk2MgorOjEwRTc3MDAwMUUwQUZDRDRBM0UyRTQ4RUUyQzg1MTM3NzM3QkZGRkU4RAorOjEwRTc4MDAwMjFEM0JFNEQ4MENGRjc1OEI4MURFM0VFRUZEOTc0QTQ2NgorOjEwRTc5MDAwOTc5RTVCMUI0MjcxNTg5MzY3RTg0OUU0OUZGNzZDNEM2NgorOjEwRTdBMDAwNDJGRTc5RUVGMjg4MkUzODlFRTE0MDQ2N0NERUIzOTQzQworOjEwRTdCMDAwREJBNzNFMzc0QkM0Q0YzRDRCQkQyMkRFMTdCREVEQjJDQworOjEwRTdDMDAwRDc4QUZDRjg1NDE4RkY5RDJERThEN0I1MThGQTdCN0YzRgorOjEwRTdEMDAwRUNFMDdFMThDNzc5MkUwNEY4MTlFNUNERUQwRDRFMDI1OAorOjEwRTdFMDAwMzhGQzhBOEVBMTdFMDQ1QjQ5NzlGRTlEQ0Y4NkM4RTdGRQorOjEwRTdGMDAwNTFBRkQwN0RCODcwRDRFOUEwOTdERTJCRTVERjRGRjFBMworOjEwRTgwMDAwNUMwRTU2RkI0M0JGRkJFOTVBNzg2MUM0NTc5REQ2REZDNworOjEwRTgxMDAwMzEzQjAxQzdFQkM3M0JBODQ2Mjg1MzU4MjlGQjJERTJFMworOjEwRTgyMDAwQTM4Q0NCNEY2REE5OEVFNEU5MTJDODEzRTIwNzY2NERBNQorOjEwRTgzMDAwNzQ2MUNENUE3OTdGMTJFNTQzNEQ4N0IyODQxNTM4Q0Y4NAorOjEwRTg0MDAwRTdENkU4NjlCNzZDOTRCODc1REZDREYwQ0FCQTE2OTEwRgorOjEwRTg1MDAwQjZEOTI1OEIzN0I4MjNGRjRFMTlGNzNBMUI5RjVGODQzMworOjEwRTg2MDAwOTVFOUQwQ0U0NTAwM0U1REI0OUY2REFENTZGRjlFRDU3NworOjEwRTg3MDAwQjNCMjdDRkU1RTk2Q0Y2NzY0N0VDMEY1MzZDMkEzQzQ5OQorOjEwRTg4MDAwRjVBMzUzNzAxQ0Q5NUM1RjAzM0QwNUJDOEY3NTY5MDYwOQorOjEwRTg5MDAwQTNERjExRkQ3RDYxNDI5NzhFRjI3Q0FGOTFDN0YxODJCQgorOjEwRThBMDAwM0NBRkY1RDgyRkM5MzM5N0ZCNTE2MkQxNzBFQzY3OUQwRgorOjEwRThCMDAwOUQ5MTFFNUY2N0ZCQkExQUUzNzY5NzBBNzlCRjdEMTZCMgorOjEwRThDMDAwNzkwNEM0NkZBRjRBQUY4MEZERjc3RUQ4NERBNTRCMUVDQgorOjEwRThEMDAwNjc4RkQyNjZBQTU3RkE5M0FDMkVDRUVGNjU1RkIzMjY0OAorOjEwRThFMDAwOTgyRjFFQjIxNUM5NUVCNDUyN0VENDc1N0EzRDQzM0I1MworOjEwRThGMDAwOENGQTBDRTE0QjY2M0Q5RTkxNjAzRDY2MUQ2Mzc4OUZFRQorOjEwRTkwMDAwQjkzNjQ0NEZGQjE0RUJFNjlFMjI3OEI1ODVDMzYxQ0U0MQorOjEwRTkxMDAwQ0EzNDNDN0ZGMUI2M0M5RjMwQTc5MzYwNTdDMDdDNTIwRAorOjEwRTkyMDAwQTQwN0MyRDVCRkU3MUE1OEVFOTBGMUJDNURDNkM3REI5RAorOjEwRTkzMDAwMDY4N0VFMDI4QzYzQzg1RjQ1RkFGRDhFQ0VERTUzRUM4RgorOjEwRTk0MDAwNkNGNjU3QkEwMEZERDM0NTIzRkZGODFCN0JCMjVERjg4OAorOjEwRTk1MDAwRjVDREI4N0U3NkRBQzkyRTI4RUJCNkVENjNCODdENURDRAorOjEwRTk2MDAwMUQzQ0Y1NjM1Q0Y3MTdDQTdDRjQ0Q0YwQjgwRkIxRkVBMAorOjEwRTk3MDAwQjNEMUZDNzc3MDFBNDdERkRFNUJBRDI3NzdDQUUzREVFMQorOjEwRTk4MDAwMjFFMzNEQzc2OTNCRjQzMEI0MUY2RjM3RTFDOEMwOEM0OQorOjEwRTk5MDAwRDk3QUZGMDJGQUIzOEYxMUFENkVBMDVCNEI5NjIyMEZBRQorOjEwRTlBMDAwRjY2MDk0QkJGN0M3NEM2NzA3QjFGRjAyQkVFRkI0QkQ3QQorOjEwRTlCMDAwNjAyMjNEOTc5OEZEQ0UwMUYwREU1RjlBRjVFNENGQzA2RQorOjEwRTlDMDAwRjNBQkNBRTM3RTE5RkY5RkM4RTNGOEIzOENGRjI2OTkyNworOjEwRTlEMDAwNEZGN0EyMURFOThCNzE5NjU0MkFERjk3RUQ4ODVCQjYzRAorOjEwRTlFMDAwMjNCQjY1M0JEMjIwREI5MUI3RDE4RUY0QzU3OTREQTYxMAorOjEwRTlGMDAwNzJCQjZDNDczMjQ3M0Y0NTdFRDIyNUNDOEIyQkEwMUQ4NgorOjEwRUEwMDAwOTlDQjk2QzEzOEYzNjFGQzYyMDdGNkVEQUU2QzMxRTA0QworOjEwRUExMDAwNzdCMjgyMzU3NEJBMzMzNTUyMDM4Rjk2N0EwNkZDNEUzQworOjEwRUEyMDAwNTc2MkMwRUY3OEY1RDdENEU3OTkzMzAyN0UwNzZDOTgyOAorOjEwRUEzMDAwQTZGRDZEQkUxMTAxQkYyM0E2QjUyMzQzOEY0REQwRkFBRAorOjEwRUE0MDAwMzM1RkREQTdBOTFGREM1MkFDQTk3N0UyM0Y2MEJFNTk1NgorOjEwRUE1MDAwQzcxOENGMkYxQjlDRkIwNEYyNEJENjcxQkRGMkZCQ0MyOQorOjEwRUE2MDAwQjQ4RkE2Rjg1QjgxRkU0RjE2NkJEQkM3RDNEMTNFOUVGOQorOjEwRUE3MDAwOTM0OTc4QUU5M0I2OTYxMzM0RjVFNDNGQjUxOEVDM0Q2MAorOjEwRUE4MDAwRjFGQzYxRjU3OEUwM0IzQzg3RDg1MjMyODZEMTNFM0NDMAorOjEwRUE5MDAwRjAyRkM4NTM5NkZEQzQ1Nzk0NkY1NDJDQ0EyMDNGRTlGOQorOjEwRUFBMDAwQTI1RUIzOUY5NjEzQjAyRjY2MUZBOUREMzdDQkJBQzZGRgorOjEwRUFCMDAwQkVEOUIxOUIzQkY5MURGNkQ2ODhFQkYyQzc0MDlFNDQwOAorOjEwRUFDMDAwMUNGNzMzQzE1M0Y3MjBERURFRkU5MkRCQTlDNjJGMUZGMQorOjEwRUFEMDAwRTk4OUNGM0ZDMEE2RDBDRjhFNkYxRTIxQkY2QjQ3OUI2OQorOjEwRUFFMDAwN0MzODgyRDVGRUQ2NzYwRkI3MTc2RkI1MjRFQ0M0NzU4NworOjEwRUFGMDAwNDY2NkI0NDA3QTMwRjNDOEZDMjlDNDhGMkQzQUZBN0RCQgorOjEwRUIwMDAwQ0U5NDgyOEE2MEM0Q0JGNjgzOEI4M0I1RjdBNzU0RkE4MAorOjEwRUIxMDAwODEwOEE1RDIwRjIyQjIzMkZGQkRCRUZGMDdFOUQxMEY5NworOjEwRUIyMDAwMzQwMDgwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDA3RgorOjEwRUIzMDAwMDAwQkVEN0QwQjdDMTRENUI5Rjg5OTlEN0QyNUJCODEyQgorOjEwRUI0MDAwMEQwOUIwODEwNDI2MDk2MEFBM0MzNkVGNEQ0OEMyMjQ2NQorOjEwRUI1MDAwMDQ4QzFBQzg0Mjc4MDRDMTMwNDk3OEE0OEE5QUFBQjVBQworOjEwRUI2MDAwRDg2MjMzMjExMDYyQTQxMjFGNTVCMDhBMkJBRERBRjY5OQorOjEwRUI3MDAwRjZCNjU0MjVBMEEyMkNDRkFBNTA1ODMwNjg0NEQ0MDUyQworOjEwRUI4MDAwMTRBREE1RjdBMjg0RDZGNkNGRkZFNzNEREY3N0NFMjRGQworOjEwRUI5MDAwM0JDMzI2NDBEQjdCNUI3QjZGRjhFOUU0Q0MzOTczRTY1MworOjEwRUJBMDAwOUNFRkZEM0ExMzQyMDhGOTRBQTRGRjhCMUY0RTAyNjlGRAorOjEwRUJCMDAwMDQ3RkJFNEE4MUZGQTdGNEI2QTE5RjVDNEQwMkY2RjAyOAorOjEwRUJDMDAwNzY4NkExOUQ2RjE4NUY2MjY4NUY2RjE4M0ZEM0QwQkVENQorOjEwRUJEMDAwRDEzMEJFNTZEN0JGMkQzNDczQTBFMkE0QkZDM0NGQTQ5QgorOjEwRUJFMDAwOEJBRjVCMUEwOTA5NUNENTNCMkVEQkVDMTMzRDYzMkYyMQorOjEwRUJGMDAwMUU5N0QzNjlFQTlEOTdGRUI3RjNGRDI1QTZGM0YxODQyRQorOjEwRUMwMDAwNzQ3NDhBN0U1QjMyQkQxRTVGNDJENDJDM0E0RkE3QzkxMgorOjEwRUMxMDAwNEYwNEJDOUEwOEVEREZENkM1REEzNkEyM0FDNkQzRkU1OQorOjEwRUMyMDAwMkQ5RDY2NEY5QjQ0QzgwRUZFREUzMUJFODUwMzdEMzFBRgorOjEwRUMzMDAwODQ0QzMyOUY4REY4NUVGOTgyQTk3NzdGMDRFNjlCMzk3OAorOjEwRUM0MDAwOTA0NDE4QTc1RDc3RjE3OTAzOEQ3NkJDNkU2Rjc0OTE0RgorOjEwRUM1MDAwODBBREI3NUY4Q0M5RUVGNEQxNzU3NDg0NEMxRTdBOUI3RAorOjEwRUM2MDAwQUVCRjI0OEVEMDdERUY3NjJFNzZDMEJDNzRCRDg0MENGMgorOjEwRUM3MDAwMjNFNERBQ0QyM0FBOUE0NjExMjJEMTc1OUJFODNFQjY0OQorOjEwRUM4MDAwODQ0Q0E0OERFRTMzRUIyODdCN0Y5NjQ1OEU3MzQ1ODBCNAorOjEwRUM5MDAwMkIyMTI2M0RGQzJGOUE4RkZFMDA5QzlDQTJCRjhEQzI4QgorOjEwRUNBMDAwNjVEN0ZCNzNFMkM2RDNGOTVGRUExNDA5QUNDN0FBRDRFRgorOjEwRUNCMDAwM0I3Q0UzNjhCQjhCQUQ0QjlCNzdCMjVERDRDMUExOTgyNQorOjEwRUNDMDAwMzg3NEY4MjgzQzNCNDhEN0NFM0E0MUQ3NDk5RkI3NEFEOQorOjEwRUNEMDAwMTU3MTAwREY0QkFEOTM5MDY4MDMxRDBEMzJCNDg3RTlDOQorOjEwRUNFMDAwQzY4RjkxMjhERUM2RjU4RDg3OTczODFFQjYwMDFFRThDMAorOjEwRUNGMDAwQzY1RThBRjI1NEY5MjJDMDZCQ0IwN0Q2N0E3RkQ4RkQ2NAorOjEwRUQwMDAwNjYwRjA1NEEzNjVDNEQ3OENEM0E2MUYyMDQyODdDQ0UxOAorOjEwRUQxMDAwNzc5QTNDMDBCQzNDNTdCQkQ4MTA2MTlFRkM4RkY0RjQ0MgorOjEwRUQyMDAwOTlEMzE5QUQ4MzE3MTExN0Y0Q0IwN0NCOEYzN0FERDkxMgorOjEwRUQzMDAwMTMzNkZFRkI5RTk4RjhEM0Q3RDA1RjcyNDkyRUVFRkZCNAorOjEwRUQ0MDAwMTJDRkZGQTk1MTVEQjNDNzQyRTk5ODkyRUM2NjNBOEVBMworOjEwRUQ1MDAwQjgyQTA5NDlFODdCM0MyMTJCNzE3RjFBMUM4OTJCOEUyQworOjEwRUQ2MDAwNkVFRTcyRjBENDhFQ0Y1RDg0QUYzRTlFRUY5RDQ3MjU1MAorOjEwRUQ3MDAwNjQzMDg1MjcwNTJGOEM1QjNCREVGN0I4ODdCNjQ5Njg4MgorOjEwRUQ4MDAwODYwOEVGN0ZEMDcxOUIxOEEyRUI3RUNDNzFEQjZFQTA2MgorOjEwRUQ5MDAwQ0YwMzdGQjY0QUMwRDczQkZGREM5MTA4RjdGN0E3NkZEOAorOjEwRURBMDAwNEQwNEJBREY0RkRGMUQ4NEZEOTkyOUQ2NjhEQkFBREU0QQorOjEwRURCMDAwRTQwMEZBN0FCM0YzMDhGMjhGNDQ4MjM3NENDODgyQjY4MworOjEwRURDMDAwQzlEMzQ2ODdCRDlBNTYzOTkwRjQwM0I3RDczOTlERUMxRAorOjEwRUREMDAwRTNGQ0JBODdGM0VCQUU0NjM3RTc2MzA5QUZBRjM1QTY3RQorOjEwRURFMDAwRTFGREVEOEQxRTZDQkZEQ0U4QzVGNkI2NDYxOURCMURGNgorOjEwRURGMDAwOEQ2NTc4M0REQ0U4QzNGQjg3MUFBQkIwRkREQjQ2ODU0QgorOjEwRUUwMDAwRDE2MURBOURBNTIwOEZDRTI3NTIwMEQwN0RBRDc0NEMwNAorOjEwRUUxMDAwMzc0N0MyRTc3NTkyOUVDRkFFNzVFQkY5NkMwQTg1NzNFMgorOjEwRUUyMDAwNzg3QkIyN0RCODgxMkY1Mzc1RkQ5M0JFQkM1QUQ3NUZGNgorOjEwRUUzMDAwNzgzNjQzRDc5RUY4NjlCRTZFN0M1RUE4NDREN0NFRUQ4NworOjEwRUU0MDAwQkE1RTM3N0U2NjY5QTVBRURGNTczMDVGQkYzRUQxODlCNworOjEwRUU1MDAwRjI2NTg3NEI0MEI5M0MzREFCNEVEN0JGMDM3RTAxMzlDRAorOjEwRUU2MDAwNkMxN0ZDNkEzMkMwQTVCMjVGNzkxQTAwRkNEODAwOEUxQworOjEwRUU3MDAwOEM4RjdGQzNGMUIzMTdGMDYzMDNCQzMwRjhCRjBBRjA4NworOjEwRUU4MDAwQTdFRDU3MDBERUY0OUFEREFERUMxRTI4ODExQ0E4Qzc2MworOjEwRUU5MDAwQjYzNTZEQTBEMzQzRTFGRkFBNTM0NEY5QkZCNUIxMDEyNAorOjEwRUVBMDAwOUZEQjdGQkVCNjVCQzRGNTNBMjRDMENCMEVCRTlFRkQ5MQorOjEwRUVCMDAwMTZBNTVCOEM4N0I2MjBBRDE0MkU1RTU3NzY5NzlFREYyNQorOjEwRUVDMDAwQzc5NDJENDRCOUI5QTNGM0E0MDNFOEVEQjUyRjJGNEY5MAorOjEwRUVEMDAwRUY2OUUzN0U0MzJBMjcwMzdEMTQ3NTUyNUQ5NTdDNjlCMworOjEwRUVFMDAwRkRBN0U5QUQ0QkNEQUY4RDAzQkQxQTQ5NUYxOEU3QkQ1NgorOjEwRUVGMDAwRkU0QjQ1MjQ3NDFGQUY3NkE5MEZDNzQwM0JGMDRENTEyMAorOjEwRUYwMDAwQTJFRDlDMkU2NTMyRTA2RDRGOUFFMDEyMDUxQzM3NTkzOAorOjEwRUYxMDAwODY3NTVGMzg3MjAzREM3RjJENjQzNkMxQkEwRjVDMThDQQorOjEwRUYyMDAwNDQ2MDFGM0JBOERFQjVEMTcxNkY5MkQ0QjUxMzI4QkNFNQorOjEwRUYzMDAwMDM1RDVGRUMwN0JFNTQ5RDE2Q0Y2ODcyRjEzQTUyRDM2MQorOjEwRUY0MDAwNDU5NDJCNUJDNkRBNENDMjA0RDA3NzY2MTIxODBCN0M1MgorOjEwRUY1MDAwQUUyMDNDM0JCRTRDNzFDMjc1NEI5QUM4RUYwNzkxREZBNworOjEwRUY2MDAwQzdBN0JCRjBCOTU3MkY2NEM0NDNEQjQ0ODIyODBGMDIwNAorOjEwRUY3MDAwRERBNjMyN0Y4NEZEOEU4N0Y3NTBCOTkzN0RFMTQzODcwQworOjEwRUY4MDAwOEI4RURGRDc1REVCMDBGOUYyNUExNzlCM0Y3QjQ1QzhBQworOjEwRUY5MDAwMDE3MERBRkZFNTI2MjdEQ0RGOTE5Njg5RjNFRTFDQjdENgorOjEwRUZBMDAwMTRFRDhCMURERDI2QTRFQjFENjNENzM4MzNCMjcwOUZBMworOjEwRUZCMDAwMUU4MEREOEVFRURBQjVFOTQwRDc1RDY2NkM0QjQ0MjFFQworOjEwRUZDMDAwNDFBMEI3MzRBNjY3Qjc3NEQ3OTIyM0I0RkZCQzQ3RjQwNworOjEwRUZEMDAwMDM5RDY1OTNGNjdEMDNFMEZFOTAzNTU2OTJDMkUwNkY4NworOjEwRUZFMDAwMUU0MkM4QURFQzYxMzJEOUE1OTcwMzI1NUQ3QTdENjJEQQorOjEwRUZGMDAwMEQyRDk4MzUwM0VDMDhBMDY3REE5RTY2OEVEM0Y1RUZFOQorOjEwRjAwMDAwN0Y3NzY1RkM0Q0MwMEI4NTM3REM3QkFERkI4RUZERTM2OQorOjEwRjAxMDAwNDBGRUY4NTlGQjBGQzc3RjYyMUQ0OEFGNERFM0Q2MEM4OQorOjEwRjAyMDAwQkYwREM2NkQ3MTc4NkMxMkY0MjhFNDBCREFDRUVEMzZBNAorOjEwRjAzMDAwRkJDMURFQzg3NkVBRDdCMUZGMUI5NTA4RjcyREREQ0MwMgorOjEwRjA0MDAwQkUzQTlGQzZGNkIzQzM1MzQ3MUVBMENGQkRDQUVEQUZBRAorOjEwRjA1MDAwQzkyNzQ2OTVDM0ZCMEU1MEZCMDlFQzhBNTczQzJGQzRDOQorOjEwRjA2MDAwNjU4MjNDRjM4QTNBN0FBM0YwNDE3QTM5REY0OTcwMUUwRgorOjEwRjA3MDAwRkEzMzYwMUE4NTQzMDExQjQyRjlEMEQ3N0MzQkVEREZBMAorOjEwRjA4MDAwOUY2NzczQURBNEE4REU3MTYxRDdFRTNCNjgzQjM3NDE0MworOjEwRjA5MDAwMjQyMkREQzkzN0ZERkFGNUU1RkRENEExNkJERkZBQTkxRAorOjEwRjBBMDAwREUyRUIxMTE4MUVCNzMyN0NBODFCRUY4NjdFMjU5QUIzRQorOjEwRjBCMDAwRUVCOTY5NjY5QjZFREU1QzEyRDY4RkY4QjRGNkY2Mjc2MQorOjEwRjBDMDAwNUZEQTNFRDlDQUU1OUE2NjlGNkNCNTI4RjM3RDQwRDdEMgorOjEwRjBEMDAwQzE1OTk3RDBBMzJCQjlGRTZENDA3OUIxOEQxMDRGNUIwQworOjEwRjBFMDAwM0E5NUVCREYxMDY1RTBDM0YzQzdFRDA4QzdEQ0M3NjZGMAorOjEwRjBGMDAwNEMyNEE4QUY5NTg5QzAwRjQ4OEM2MUY2ODBGN0Y4MjU5RAorOjEwRjEwMDAwRUMxNTk3NEFFMjczRjhBQjA4NUNDREE3NDM3NDdDMkJFRgorOjEwRjExMDAwNTVGMzVGODEwRUU3RkFEQzM4NkY1RjdBRkY0MUM3MDA3NQorOjEwRjEyMDAwOTRGQjA1QTU0QzJGM0NFNjM4ODg3QUJFRTM3REFBRTcyMAorOjEwRjEzMDAwMDVGNjhFMTBDNUZCNkNGODA1RjRGRUZCNTYxQ0ZGQ0FFNQorOjEwRjE0MDAwNzUwMkNBMTFDRDZFQTgyNEIyODVBQTM4MzJERERCNkRGNgorOjEwRjE1MDAwRkUwMUM1OUZDRjVFM0RFRTU2N0E3REU1REQ4RUUxQzBCNgorOjEwRjE2MDAwQkZBRjgwN0Q4MEYyQTFDMUMxRUM4MzE4MzU4RTJFNzFCNgorOjEwRjE3MDAwN0I5NzBERjk3MEVCNTkxM0IxODNERkIwREQ4Njc0NEFDQworOjEwRjE4MDAwRjlGNEZFNzFGNDNEREI4M0NDNUVFODM4Q0JFREJERURFOAorOjEwRjE5MDAwMEVFNDkzOUQ3RjYwRUJFODU4RTE2MDdFQzYxOUFCMENFRQorOjEwRjFBMDAwRjZGOEQ2MTUzMTA4RTczMTUyNENDMDBDRjMyRDY3RjM1MQorOjEwRjFCMDAwNzc3MUJDQkVDREYxQkE5RkVCQUIzN0I4QkVGQTBERDhCNAorOjEwRjFDMDAwMTNBOEJGOTgzREIxMUJFQzA5N0FEREM5RUQ4OTFEQTBEQworOjEwRjFEMDAwQ0ZFOEY1QzVCM0NGQkYwNzdDNzk3RTdCMTREQTlENjM5QQorOjEwRjFFMDAwNDhEQTY2NThENzc2QTcxNUQ3Njk4NEYzM0M0NUNGMDcyOAorOjEwRjFGMDAwNzNBQkY0NzY0M0Y5NThCRERENzBGREE4RTFCQTc2NTlEQQorOjEwRjIwMDAwNjJBQUVFRjlBOUYxRDdFOEZBNEI5RDk5N0E3OTY0OUU0MgorOjEwRjIxMDAwQTg2QkNCMTdGNDc2NDM4NUY3MDYzRDNEQzk2MTc2MDNBRAorOjEwRjIyMDAwQ0EzQkJEREYzODNCREM2RjRDMDYzQzMxM0Y2NzZCRDdEOAorOjEwRjIzMDAwMUQ4OEM3QURDNzUzMDYyQTYxNzZDMjM2MEVFN0FEQzczMworOjEwRjI0MDAwOTlGRURDMTZGQTIyNDY4OTYwNDc3Q0NBQzc3REM2RjE2MgorOjEwRjI1MDAwNzE4NkUzRTMzRjQ2QzhCRjRCMUYwQ0ZDRjIwNTkzQkYyQQorOjEwRjI2MDAwN0REMEIxRjZCQ0Y2RENBN0ZFNTMwM0MyRjVGQTQ4NTFENworOjEwRjI3MDAwNDIyNkQxREE3RkU4Nzg2RjBDRjQ1RjJFNUY1MDNBNkQ0QQorOjEwRjI4MDAwMEQ1MTNDN0Y0NzhDNjk2RkEzOEZBQzMxMzczQzA1NkRDNgorOjEwRjI5MDAwNTUzNTkzNjdCMjEwMUM2OTY2RUNCRkRBMDNGMkI4MzlEMgorOjEwRjJBMDAwQTZFMTM5RThERkQyNjQ3MzZEOEEwNzNFRkFGRUFGQTBBQgorOjEwRjJCMDAwQkQ5Q0IyODI4RDVFRkYxNDM1QzI0RjI4QUIzOTMyNENGMworOjEwRjJDMDAwMzhGRkIzMTZERjcwMEZFODREQzEzN0ZGNTYzQTVFRERFOQorOjEwRjJEMDAwNjBGNTNDMjM1REJDOUVEODBDNDE2M0Y2NkRBMDg3NDQ2RAorOjEwRjJFMDAwQ0VGNzdGMTE5NEQ4MEM3QTVGRkU4NTgwNzIzQTRBMjI1RAorOjEwRjJGMDAwQTgxNzZDQzQxNzAwRkUyMUY1RjI3Q0UwMEY2MkEyRkM5NworOjEwRjMwMDAwNDNBRjhEOTlDQTUwMTg0RjY0MjJCOUU4M0NDOERBRjQ2QgorOjEwRjMxMDAwN0Q0MjcwREY5RjA1QkEyRTBCNjk1MDYxMUU1QjNEOTVFMworOjEwRjMyMDAwMzA5NDlGMUY0RDU3NDZFMDc4RjM0QzlDRkZDNTY5ODQ4RAorOjEwRjMzMDAwODAzQ0EzREJDMTc2RDZEREM0RDUxNjRCMjg2QjJCQTY0QgorOjEwRjM0MDAwMkY2ODdCM0VGNUY3RTFGRDI2QzczMkQ0NTNFRkZEQ0VBMworOjEwRjM1MDAwRTQxNzIzRDg0QjNENzA1RTY2MzkxMzBBOEI4RjE4RTk4QQorOjEwRjM2MDAwQTc4M0QzQzVCNjY0MUZDQTVGRTNGM0I5MDAxNzBBQzcwMgorOjEwRjM3MDAwQUQxRjRFMTc4MUJFQjJFQzAzNjRCMDJCRTgwNkM1MTk3MQorOjEwRjM4MDAwNTRCRTZGM0I3OUJEQTMyNkMyNzNENzY3RDVFNDY2MEMyNAorOjEwRjM5MDAwRUU2RDY3MDUzNzhCMzU0RUY0RTc0NUQ4RDcxNkZBM0I0NworOjEwRjNBMDAwRUNFQkU1NEU1MzAwRjA3QkRFNjk0NTc5RDJENzNFRjJCNworOjEwRjNCMDAwNDJGQTM4NDQyRUQ4MDM2MUZDNDZDODAyMTdGODhCMDI4MworOjEwRjNDMDAwNjkxN0JFQkEyNjlDQkVFNEZCQzNFOUVCQzU4QkU5MEIwQgorOjEwRjNEMDAwRTFGQzlEQjdEMjEwQUVDRDAyQTMyRjk1RDIxN0Y0QUJBRQorOjEwRjNFMDAwMjUwRDQ4NUZBQTg5Rjg5QUIzOTBERUYwRjlFNTY2QkI2RgorOjEwRjNGMDAwQ0I0NjI1RTRCMjhDMTQ3QzRGNDc0Q0Y5N0IwMTA5REZFNgorOjEwRjQwMDAwOTczQTEzRkRCOTZBRUVDRjU1QTM5QzdGRTMyODkzRjM5NworOjEwRjQxMDAwQzY3REVEM0MzQTY3NzgwOEVDODlEMTczODcwMzlGNzcwNgorOjEwRjQyMDAwODAwMjE4MDY4QkNBOUIyN0VCREEyNDgwNzZFMDE0MDI1MAorOjEwRjQzMDAwMjEyQjgwQzAzQ0IwM0YzQkFFRDNEQTVFRDYyRTY2RTNENAorOjEwRjQ0MDAwNkY3OUZFRDEwRDJBQjQ2RkUyRkRFQTZDRDZBRkI1NDlGMworOjEwRjQ1MDAwRkVCQzYyNjg1QjRDRDgzRTA5RTNFOUZCMUVGM0M4Q0JGNworOjEwRjQ2MDAwMDA2RjhGQTZDQkI3MDI1REU2ODBEMTQyQUY5RjREOTA3MworOjEwRjQ3MDAwNkY4N0Y2QjIwQzgyRkJGRERFMDRGOTVCMzA0RTZCNkZEQQorOjEwRjQ4MDAwMUIyRkRGMTlERURFRDJFM0E3QjY3MzNGRjU1NkI0NEI3MAorOjEwRjQ5MDAwREZFODlBODlGNkFDNDQ3QzM3ODBERTc5MjNDOEUyNTFGNAorOjEwRjRBMDAwNUI0NkY1RUYwNzFERTRGNkZDMDFFRUE3QkUwOUYyRThBNgorOjEwRjRCMDAwMkFEMDI3Q0M0RkREQ0JGREQ0REQ1Q0FGRUNFNDdFRUE3NworOjEwRjRDMDAwMEVBRTU3NUVFNTdFRDIyQkRDNEY3QTA5RkNENEFCQzA4MgorOjEwRjREMDAwMEVBOUUyNzExMkU2QTc2NjhEOUU1QzhBNzY4NDRCRjNENAorOjEwRjRFMDAwNTM0NzQ0RjQ1MzJCQkM3QTdEMzNDREEzRDczNzM3QTQ4RAorOjEwRjRGMDAwQzUxOUY0OEI1RURGNEM4REQ3RUI5QjUyRTczNTA2RkRDQgorOjEwRjUwMDAwOTJBOTFCMkY1RkQwRkJBOTQ1REQyNUJBRjEwNTY3RjQ1MQorOjEwRjUxMDAwN0U2QUZFNDczMzc1RTM5NzY1NDg4ODQ3RUZGMTFCNzVCMAorOjEwRjUyMDAwRTM3MjNBNkI3NUUzN0FGMUU2NDMzQzU5RDUyNzlENjA2NworOjEwRjUzMDAwQzc2RDE5NTVDN0YxQzZFQzA1MEQ2RjFEOTdDMERCNkY4MAorOjEwRjU0MDAwMzhERUY2NzJCQ0VERTY3OERCQzlGMUI2ODNEQjAzQUZEQgorOjEwRjU1MDAwNzJCQ0JEQzJFRDgxOTczOERFQjY3MkJDNkRFMUYxODUzQgorOjEwRjU2MDAwODMxQzZGMDczOERFREVFNEZFNkVENkU4RERFODlGOUQ4MworOjEwRjU3MDAwM0Y0QjM4REUzNjhBOTFGMDU2OTYyODFBRjBFMDMwRTA5QworOjEwRjU4MDAwNDE4RkI3MTJGMzcwMDMxRTUyMEM3OEI4NUFENzJFMzgzOQorOjEwRjU5MDAwOTM2MUMwNDNCRUFFRUQzRDVFNjI4MEZGRjUwNkJCQTE0OAorOjEwRjVBMDAwNTJEN0FGRTE2RDlBNjdCRTgxQkVFQTc0RTMyRTlCREY0RQorOjEwRjVCMDAwOUNDQ0NFRkI2QkY5NkQxRkI3RTNGNjcwQkNFRDAyQkNDMworOjEwRjVDMDAwNjE5Q0M4QzNFMzExNUUxRUY3NjU3NkRDQ0IxQzZGREI2NAorOjEwRjVEMDAwNzg1Q0E4MDNGMDA2RjYxREM3NUJGM0E4NzM2OEM3OUZBNQorOjEwRjVFMDAwQkZBMEUxRUQ2MDQ0QkM1RDI5QkY1REVCRDZDNzg1QTYzOQorOjEwRjVGMDAwQjhGNDcxQTFDOTc2M0RCRjE1MTNCRDdEMzdFOTRCM0QwOAorOjEwRjYwMDAwQkYxNTlFRDVEQjc3MTMzRkQ1RjM1QjVFNjhBNkFFNEQ4NQorOjEwRjYxMDAwRUQ4MDg0Q0M2Q0QwNTMzN0VBOUVDQjBFRDZFQUM2NTEyRgorOjEwRjYyMDAwM0Y4OUY5MkQxRUFFRjdGRDk1QTg4RjVBQTYzMUZENDhFQQorOjEwRjYzMDAwRjkxMEVERUY2N0JGNERFRDgwRjQ1RTc4QkM2OEYwOUY4OAorOjEwRjY0MDAwNUVFQzQzN0Y1RjkzQzlGNDc3Qzc3QkQ1MDhENzZDRDA1NgorOjEwRjY1MDAwREY5MUYyMEI3QzVDNEVBNjBCQUYzNjMzNTFBMzMzNzBCNworOjEwRjY2MDAwOTk3Qjg2RDFGNTk4NDczMUJCQzcxQ0IzMTY4MjBDRjA0NQorOjEwRjY3MDAwMTMzNEU1RjREQTQ5QTJEMzQ3NjA3RTZBMkZFNTY0ODY0NQorOjEwRjY4MDAwRTk3REIzQUI4MTgwREQyMERBMUU1QTAwRkIyMkEyQzlERQorOjEwRjY5MDAwODM3QUQ3NjAxRjkxN0E5NzdDMDdEQ0JGNjM4MEE3OEQ0MAorOjEwRjZBMDAwQzJFMjk2Q0M1ODVDODc5QjZDQjY4MDlERDE5ODI5NEY1RQorOjEwRjZCMDAwMDI3ODhBOTMxOTNDQjYyNDUxREY5REMyNjM0QjE0NkJDOAorOjEwRjZDMDAwQUIxNDVFQ0ZEMEI2Mzg3MDAxQzJBRjgzQzI0QjRDODc0QgorOjEwRjZEMDAwRjlFM0M5REQ3NDVENTU5OTU2MDY4Nzc5ODRFOTUzRjVEOAorOjEwRjZFMDAwMzlBNjVGN0JGNDIxMzUxODY4RkJEOTY4RDZCRUYxODU1MQorOjEwRjZGMDAwOUZDRTUzMTM3QkY1NkY1REU2NEJBODRGQzczODg3RDU3OAorOjEwRjcwMDAwOTFGMTc0REVGNUVBMjBCMDMzQzdEMkY1ODE3QzM0Mzk0QgorOjEwRjcxMDAwQjYyNzQ1QjJCRkZCQjJDMzU2OEY5N0U3QzE3RUJFQzdCRgorOjEwRjcyMDAwRjVFQjE4MEExMTczNDZERkNGM0YxQkVEQkIwNUYwOUJDRAorOjEwRjczMDAwMDVGMDA4OEI3QkNEQ0M2NDc2NkIxNUNDMzMxOEVENEI4NAorOjEwRjc0MDAwMzlEQ0JFMjRDMTRBNkNCN0E0MzNGQUZBRjFEQTk5NDgxRAorOjEwRjc1MDAwNkY0RTBBMkYzMTE2RDZDRkUwMzdGRjJFNDY1RjU3QkFDRAorOjEwRjc2MDAwMEY2REZERkREMDg5MkZEQzlFMEVBMzkzRUY0NUEyMTNGNAorOjEwRjc3MDAwNTJFRTcxQTNCRkRFOTczREE3QjJGNTM2NzNGQjUxQjNDRQorOjEwRjc4MDAwOTM2RDg5OUFEREVDQzdGNTU4Mjg3QkU0MEZDMjJCOTk1RAorOjEwRjc5MDAwNDJFMTNBQzg0NTMwNUU1M0VEMzJGOUZEMTQ2NDUxNjBFMAorOjEwRjdBMDAwRjA4M0RDMjkxNTg4MkIxOTY2OTcwOUMzNjNCOTE0MkVEOQorOjEwRjdCMDAwN0Y4Q0YxNDFFRkYxNjg4MzdDMUY2NEQwQzNDMzc0RUQ4QgorOjEwRjdDMDAwQTJFRTE0ODM5Rjc4NzVCRjdBQkVENDM5RDFBMDlGMjY0QworOjEwRjdEMDAwRUJDNjk3MjVERTYwRjA2MzJCMEQ3RUFFNUU0Rjk4ODlGOQorOjEwRjdFMDAwNTlFNUY4MzI2MURDNDIxNTI0NzMwRURDMjc4ODlGQjA5RQorOjEwRjdGMDAwN0VGNDNCN0JFMEZDODQ1Qzg1RkNDQUZEMUEyM0JGMzZBQgorOjEwRjgwMDAwNjY0QTA4NjdDMUM1RkMxQThEMUZCNEU3MzVGODU5REQ5MworOjEwRjgxMDAwMENBRkVCNzIzNEZERTQ0MUJENjMwQjdDOTM0MDVDOTUwRgorOjEwRjgyMDAwREFEMEYyRTYzMDdBREJENDY4N0ZBRjc0MzQyMTNGNjlGNgorOjEwRjgzMDAwMjRFRjk1NTJFNEY5MUI1RDc4REREOEU4QzZFQjEzOEQxMworOjEwRjg0MDAwMTI1RTFGNkY0Q0MzNzFFQjFCM0REODdFQjREMThCRDdCQQorOjEwRjg1MDAwNDcxQTY1QkNGRjUwNjMxOUI2REIxQjdERDg1RURCNThDOQorOjEwRjg2MDAwODVEN0I2NDYwNUVGOEYzMjJCQUE5REVFNkI1NDJCRjE1MAorOjEwRjg3MDAwQTg3NDJCQTNEQkU5RkJDMkUwOTZEQTRBRDcxMTA2Rjc5RQorOjEwRjg4MDAwNjRENUE1NkI4RjVDRUVENjhENEY2QTkwNzRGREMzRUI4QgorOjEwRjg5MDAwRDM3NEZEMDk4QTQ3RDcxRTVBRTVENThEMUZFQzkzNzVBMQorOjEwRjhBMDAwRURCOEIyMzJEREY4NThEOUE3NkJDNzc4QUE3NEUzMUQ1QQorOjEwRjhCMDAwNjk4QUFFN0Y1NzUxRkVDMDUwM0Y3Q0ZDNTA2MzIwQzgyMAorOjEwRjhDMDAwRTAxMjBDMzIzOEJEMUU2NEYwRTlDMkVCRTc1Q0ZFMEVCQworOjEwRjhEMDAwMzIwNzUxNUUwQ0NBNzI1MUQyQTFGOEIyQjNGQzVBOUNFNQorOjEwRjhFMDAwRDkyM0M0ODZDRDFGNTc0NkU3NEIwQjVGMkY5RDRGRTdBQgorOjEwRjhGMDAwOUZGOTkxNUU2MjNDNDFERDdENDc1QTk3RUVCOTI5QTI5RQorOjEwRjkwMDAwQjMwNEYyMTE4NzBCNDQ4QzdCMUQyRTg4OEIwMUZCRTUyMQorOjEwRjkxMDAwN0U4QjZCNUExNkE1Qzc0MzQ3NDVDRjI2NzgwRTFFODhBNworOjEwRjkyMDAwMjAyRjRGNzBCREU4MTg2RjQ3Qjk1MEIxNEFEODI0MjIzNAorOjEwRjkzMDAwRDFCMkU3NkIzQjUzMjNDNjNEMEZERDRCQUE2MDVGOEUxMAorOjEwRjk0MDAwNUQyRjQ5NDAxNzE1MDUzNTcxNTE2MUZFNUE0NUUwQ0ZDRAorOjEwRjk1MDAwQTU2RUI4QkYyQTNEMjc4QUNFNTZEMTlBNkNBRDFCREI2NworOjEwRjk2MDAwQkIyRjZENUNFRDJBQkQ3REQ5NEJGNzdFM0JFQzYzOENFNAorOjEwRjk3MDAwN0FBRjFERTQ1QjVCRTIyNjZDQjdBNUY1OUYyN0Y5OEM5NworOjEwRjk4MDAwREI2MTlGNzIzQkVDMzQ4RkMzN0NDNEVEQjA5M0RDRUY0MgorOjEwRjk5MDAwMDk3MTNCRUMwMzZFODcxREU3RjZGMzMxNkU4Nzc1NzFENQorOjEwRjlBMDAwQkZFNzZENkUzRjc3NzJGQkY5MDhCN0MzREFEMjlFOUY0RgorOjEwRjlCMDAwOEFGMkYwMTcwMjExMjNGOEE5REFGNTk2OUZFQUVEQjA2MgorOjEwRjlDMDAwNkZGQUY1NzZEOEQyRjU3QTNCNkM3MUJCREUwRUFCNkI3NQorOjEwRjlEMDAwRDVEQjYxMzVBQURFMEU1QkI4NUM2Rjg3RERENEEwOTdGRQorOjEwRjlFMDAwODdGM0VCMjdFQkRBRjMxNDdEOUM2RDZFOTVERTdFRDYwNAorOjEwRjlGMDAwRjAzM0RCQTc5NzhCOTU2NTdBRkJCOUFGRkRCRTEyQjhFNAorOjEwRkEwMDAwMEVGMzNGODBDNDUzNjE3QUFGMjc5RjBCN0E4NUQyNDVBRQorOjEwRkExMDAwRDYwNUFBNTczMDBFRUU2Qjg2RkNDOTM2MTg0MkY1NkYzNAorOjEwRkEyMDAwQTEyOUY4MTZFNDdEQzhEQjIyODFCOEQzQUVGMzM5RTUwRAorOjEwRkEzMDAwMTUxMUU4MkY0N0Q1RDNDRDgyRTNGQUY4QzY4RDc3RTlDMworOjEwRkE0MDAwRTEzQTYzOTlERTJGQjE5NkU5RTEyQTI3RUFGRDkyNEE2RAorOjEwRkE1MDAwQTM5RUYxRTlFMUFBMTI4NTAwNUQxQUY1OERDOUIxNENBQQorOjEwRkE2MDAwMDJGOTdEQTU3QUM3NEFBODVFNjE2RDlEREVCMUMyOUQ4RgorOjEwRkE3MDAwMTQ1RDNGRUE5RDFGNjRCMTdBODMxQ0JBMEUzMDE2OUE1QQorOjEwRkE4MDAwQTI3MjBGNzgyOERDNzZCRDZCQzYzQTExQkFDMDIzQTNFOAorOjEwRkE5MDAwQThGRTI5ODJERjI5RkM1RUI1Mjg2QTAzRTREOTc4NUVENgorOjEwRkFBMDAwODQ4ODY3NzZERjRFQzc1Qjg3QjNCQzA4RjlEMkZDMTE0OAorOjEwRkFCMDAwQ0NBRkQwN0Y4MEFGMUM0MkRCNjE3QTJFM0JDOEZBQzM0QgorOjEwRkFDMDAwRDZBQkVCRjcwM0NFMDZGN0I3MUVGOUM4QTg5Q0ZGQzk2MworOjEwRkFEMDAwRjVDNEM0OUYwNkExMzc4MTRDQzA3QTgzRDBBMENCOEFERAorOjEwRkFFMDAwQUYxQUVGNjcwNTk4MUQ5NDk1QzhFQzIwNkZEMjRDOTEyMgorOjEwRkFGMDAwRTc5RjA4ODQzQ0JDMjY2MkM3NzhFNjA4RTI3RjA2RTJGRQorOjEwRkIwMDAwOUNEMTA3MUNEMzY5QjMxOUE2NEMwMDNGNDlDRkZGQjM2MgorOjEwRkIxMDAwQ0FGQkNGQ0YxQkZEQjBFQkE0NTQ4M0RGNzY4REMxQUYwMgorOjEwRkIyMDAwRDNGM0JGOEQxOEVDOTcxMDkxQzA5RTQ0MUM5ODc0RkRDMAorOjEwRkIzMDAwMDhBNzc3MzgxRDM1OUQ2ODk5MEZGQjdBMjk4OUU3NTcwMworOjEwRkI0MDAwMzhGRDRDRTRGODIyNjRGM0VFMUFEQUVGNzU4QjA0RkMwRQorOjEwRkI1MDAwMEQxQjUxRTMyNjQwN0Q1MUIwNDE4NkJDNDNBRUQ3RTYzNAorOjEwRkI2MDAwNDJCQzg5MkIzQzY4OTc5RTYxRjhGMUQyN0Y4MDNGMkY4MQorOjEwRkI3MDAwMDlDMzE3RTBFRkI4MUU3RjM2NDNGRkVGMzkzRDVEQkM4OAorOjEwRkI4MDAwMkU0NjQ3RkZCODc1MTlFOENBMzlFOEIyRUE1ODhDRjcyQgorOjEwRkI5MDAwOEI4M0IyMTg0M0Q3QjdENzI1NjAxRTc1NkZCMDIxNTgzNQorOjEwRkJBMDAwNENEQkU3RENBQzZFNjg0REUyNEMzM0FFOTdDODAzQTY4NQorOjEwRkJCMDAwNTAzQzRDRTVGQkY1RjJCQzU2NDcyMzQxQkJFM0M1NDY0MAorOjEwRkJDMDAwM0I1RTA5NjkxMDQxMUVCNUI4RUY4ODAzRkREODMxNDI4QworOjEwRkJEMDAwMTkwRUY1NjkxRDgzNjM1NzQxN0U3RThCMjUzNjMxNTJBMAorOjEwRkJFMDAwNURDQjRFNEIyRUVBRDM4RTlEMDk2Njg5M0U1RjZDNzZDNworOjEwRkJGMDAwOTlFMUI5RTJDNDVBMTFGQ0JENkJCQjA4REEwNUM1ODlBRAorOjEwRkMwMDAwMDRGMzU5MkYzNjA2MEVCM0Y3Mjk1ODg3NDNGNzMxMTlGNQorOjEwRkMxMDAwRUNEMzUyNTdDREU0OTg3ODg4Q0Y1MkRCNDYwMjNCMzc3RAorOjEwRkMyMDAwMTZGREQ3M0Q4MzZEODgzNzlCNkI2OUU5QjdFOEZFMEVGQgorOjEwRkMzMDAwMjY4ODQ0RjA1MkZDNzg4ODI3MDA3QTIwRDFFOUYxQzM2NQorOjEwRkM0MDAwNzQ2RUNCNDk4MDczM0RGRDA3NzhEMUY0MDJFNUYzOTNFMAorOjEwRkM1MDAwRTFGOEM4MjU2MTZEQ0MyQkU4REIyM0IzRjVGODkxODg3QQorOjEwRkM2MDAwODI3NTE2MkQ1REFDQkU4Qzg0MjJFNzU5M0VFNDc2ODMwNgorOjEwRkM3MDAwMTZERjNGQ0VFRDg2NjMzQ0VFNzY5OERCMEQyRDg2RjhFMQorOjEwRkM4MDAwQ0Q1QkRDNkVEOEMzRUQ4NjdEREM2RTc4OUREQjBENkZDMQorOjEwRkM5MDAwNzJCQkUxMDBCNzFCN0FGQzA1QTIzNjQxNUU3MTFFQjE1MgorOjEwRkNBMDAwODdDMDVGMzg1OEMzRTBFQzVFMjVGOENCMjAxRkFFQjRBOAorOjEwRkNCMDAwRkI0QUU4N0REQjJBMEJDQUNGOTE4OTZBMTNDNEM3NkQ2MgorOjEwRkNDMDAwNTVFQTE0RDg4NzdCNDE3QjEzNUM5QjhBREExMkUwRkVFRAorOjEwRkNEMDAwM0NFNUY0NzFGMEIzODE1RUE2RTU3MDdFQTc3ODU4NjdDNQorOjEwRkNFMDAwNjU3MDVFQkYzOEM2QjMxMkU4NTk1OTUyOEVFMzEyMTlENworOjEwRkNGMDAwRENFQ0Y0MUZDMDNCNjE5MTJBMDAxREI4MTU4QjBFREVCMQorOjEwRkQwMDAwMzUwNkY4Q0U4Mzc2OThGQzg4MDY3QUE0RjA5QzlFQ0RDMgorOjEwRkQxMDAwRUJDRjMyNDkyNjgzQkIxQTA1NzA4RkFBRTE3MDRGOEI1NworOjEwRkQyMDAwOEZDODI3RUIzOURDMzVCOEVDMkNCQUQ5QTREMkExNkYzNworOjEwRkQzMDAwMjVCMkJBODlCNzBBNkUzNjFEQTRFQkVGOTQ0NUNDQkY0NQorOjEwRkQ0MDAwNzYyNkYyM0E0MUZFNUVFMzdDRUY3MDdCNzY1RDQ5RkZGQQorOjEwRkQ1MDAwRjFCQTQzN0M1QzRGQkI5NTQ4QjY4MTYxRjM5NERDNkY4QworOjEwRkQ2MDAwOTFFOEYzNTU4MUZCOTI4MDJGRDYwREQwRjJDNDFFQjREQQorOjEwRkQ3MDAwQUZBNzg4MDVCRjREQTZFQjBDRjIzQTQ4NEQ1RUNFMjFFOQorOjEwRkQ4MDAwMUMzNjg2RjdCREM1RjdEOUQ3N0FERTJBQjlDMTIyRDE4QworOjEwRkQ5MDAwNzk2NzA1RUUyMUYwM0U5QkI5QzExRDVFNUZEQUM5RDdEOAorOjEwRkRBMDAwQjc2NkM2OUQwNEY4MzIzOEUyNkMzREZBRjEzRTlCMDQxQQorOjEwRkRCMDAwNzZGN0M4NDRDRjZBQTAwMzc3QTI2MkY5MzZCRDNGOURBQgorOjEwRkRDMDAwQ0E0M0M5MDVDQjZBREYxOTBGRTNFODMzOEYxM0EwOTc0NQorOjEwRkREMDAwQUIzNzAzM0RCQzk1NjQ0N0I5RDNENzdBMkVEMjIzN0U4NworOjEwRkRFMDAwODJGNjQ4NUY3QTg0Q0ExRkI0ODc2Q0U1OUYxQzA3QkYwMAorOjEwRkRGMDAwQjY5MjM0NzgwMkY0Qjk2MDk2NjczMEYwMzFBOUIyQTBCNworOjEwRkUwMDAwN0U0RUEzRkZDMkYzNkFEQUI1RDJBMEJGMUQ1RTRCQkYyMAorOjEwRkUxMDAwNzI3OEU0ODVDNjU2RjAzQkRFMDJGRUMxM0MyODg5ODEzQgorOjEwRkUyMDAwRkE5QzYwRjk5RDc2ODA0RjQ1NTJDQTJFQzAwRjI5QjZDNAorOjEwRkUzMDAwODc0NjUzMzhBQzI5NTg3RDEzQzA2QjRERjk1Mjk3MDA1MworOjEwRkU0MDAwNzQ1NTk4OEFGREMxNjJGQjY5QThDOEU5MkE1RTkzMjRBQgorOjEwRkU1MDAwODVDMTdCQ0Q3REE0NDgwMTc4MjdEREVENUU0MkY3OTUxNQorOjEwRkU2MDAwOTJGOEM3NDY4NUYyNEQ5Nzg1RjkzREVGOTRGQzNFMzFGNworOjEwRkU3MDAwMzk2QzdDNDY3NkYxQkY2NzQzNUNDN0NERTg3QzhDNTUxNgorOjEwRkU4MDAwNDk4OTU0MUZBQ0QxNzk1MzUxMzRDNjY1NEVENkIwN0FFNgorOjEwRkU5MDAwMDU3QTdGRjU3MkZBQTg0MkY1NTU5QkE3OTc4RjE3NzNERAorOjEwRkVBMDAwN0E4QTFBREQ1RDBGRTM5NUZCNkMxMkZBNjdFMjgyOTY5RgorOjEwRkVCMDAwRTVCNDVEMDVGNjEyRDg0RjhGNTg5MDJGMzU3RTRFNkEwNworOjEwRkVDMDAwRDBDQjREQzVDMEI3NTUwNkJFRDZGOEU5Mzc5QUZDRUM4NQorOjEwRkVEMDAwRTVFMzE4QzA2QjU0MERFMzI3NkQ3RkM2N0RDREZCOTIyMworOjEwRkVFMDAwREEzOTcxODQxOEZEQkI3NzE3QTU0NjMzM0QxNjY2REZGNgorOjEwRkVGMDAwNEU0MEQ5MjQ1OUU5RkU2NjcxN0E5QUM1RTk4OTkyRTQ5RgorOjEwRkYwMDAwNEU1OENGQTE3QjUyQTcwMUJFRDQyNkVBMDdDMERBNTZDRAorOjEwRkYxMDAwNTg3QUVEREYxNEQ4MjcxOUUwQTVGQjlGQjU1QzRDMDc5NAorOjEwRkYyMDAwRkY5NERDNjVFOUE1QzcxNERERkJCMDVFNjA0RTc4MUI2RAorOjEwRkYzMDAwRTg1NTk1REYwMTNCMDJDMjk5RjBEMjNGOUQzOEJDQjcyRQorOjEwRkY0MDAwOTlCRUFGNzM1ODFDNjlGMkUwN0MxRjMxRjkyOEUxN0MzRgorOjEwRkY1MDAwODcwQUM0MDE1RUU4RkZFRUU4NzQ0OEUxOTM3MDdBQTU3MQorOjEwRkY2MDAwRjM4NzU0RDY1RjdENEY2QTA2OUE5QkJDRkRFMThBQzEzOAorOjEwRkY3MDAwNTA0MTQ2N0NFNTk2REVGMUYwQkY1MjMzRTI3RkY2MEE0RgorOjEwRkY4MDAwNjExM0M0RkZDNjg4OUY5RkRENERDN0NGQUFCNDc5OUE3RAorOjEwRkY5MDAwRTlGQ0IzMUZBQ0I1ODBERDVGQTkyQTdCRUJFOEI4NEE2QQorOjEwRkZBMDAwNEExNzdFMTdFRTQzQzcyNzQ3Q0NDNDAyRjMxQzkxMDVCRQorOjEwRkZCMDAwRDI0RURCQjM2NkU5RjlBNjdBODVCRTZEQjQ0NzhFQzYyQworOjEwRkZDMDAwMjgyMzRDRjRGOTRGMDQxQkQ5NDRBRjNCMzcyQ0REMDhGMAorOjEwRkZEMDAwRjM3REZDQTAwREVCMEEwOUJDMkIwN0Y0MDBFMUYxNDkwRAorOjEwRkZFMDAwNzlFMzNEQjRCRjc2QkQ4RDQwNUU2NDFFQjdGN0UzNzIyMgorOjEwRkZGMDAwOTI3MTVFOTM2MzAxM0U1RkQzMTY4MzdFRjFFOTBENDNGOAorOjAyMDAwMDAyMjAwMERDCis6MTAwMDAwMDBDNzAzRkU1QjA3MzVEQzA2RjVENDFGQzcyQUQ1ODBEN0FBCis6MTAwMDEwMDBEQTM1RDc5ODIwM0VEMjFBREQzRTA1QzY3RjYyMjJBRTgxCis6MTAwMDIwMDA0REU5QjQyRDNENjQ4MUY1NzQ1MUZCMDBFMkFEREEzQTNGCis6MTAwMDMwMDA2QjVBQzNGMDBGRkJDQTYxNzFEQ0U5MjZBMjZDOEU2MEJCCis6MTAwMDQwMDBENzNDOUEyMzcwM0Q0QjU0NUJEOEZBMzdFNDQ4Nzg3RjBECis6MTAwMDUwMDA3QUNBQTA5Njg3RTEzRDE0RkIyRTBGODcwQkVDN0IwQTMyCis6MTAwMDYwMDA4QjhCQjYyNjdBQUEwN0QzRjY0NzAyNzFBRDhDODdBQjg1Cis6MTAwMDcwMDBGQzAxRjBBN0ZBMDMxQjc5MDZEMTRGNzBCQzc1RjhCMEVDCis6MTAwMDgwMDBBN0RCQzJGQ0ZGNENGRURFNTNCMUFDRkZBNDNCREEwRjkyCis6MTAwMDkwMDBGQjNDMjlCMUI2RUE3NkZBOTE5RUNENEFEQTlDMThCNkI1Cis6MTAwMEEwMDAxRjYxMDg5QzgyNjBFQjNCMUEyMzU5NTMxMDFGNDQ3QTRFCis6MTAwMEIwMDA5RUFFQUJGNjkxQzcxMEJGNUIyODdDODAzRkJCNUM1MjA1Cis6MTAwMEMwMDBDQjRFQkE4RUQzNTQ1OUFCRDBFRjdFN0MwQUMwRjNDRTYwCis6MTAwMEQwMDAwQzRBQTgwOTE3QzNBOTMxNjcxMEFFRTdGNEZBRTYxODZECis6MTAwMEUwMDBBQzMzNzExMUM1M0FBNDE3MUUzNUVENUJCRjIzOEM0N0E1Cis6MTAwMEYwMDAzREFGMzJGOUMxRjg0RjIwNjFGMjlERTI3NzdBREUwRjExCis6MTAwMTAwMDAyREI1QjBERjI4RDIwRTc4MzFFRDU5NjU4Nzc1Q0VBQkFECis6MTAwMTEwMDBCMTYwN0VDQzQ5N0M2NTIwNEY2QjFFMTFCMDREN0ZENkZGCis6MTAwMTIwMDA4MkJFQThFNUZDRDUyQTBEREEwNzc0N0MxMkVDNzFGNEM2Cis6MTAwMTMwMDBGNzlFRDgwQkY1MDEzNTVDN0U1NTJERDJEM0U5NjJCNzE5Cis6MTAwMTQwMDA1OUM3MkYzMzk2RUJGOTg3RUU1M0Q3REU5OEMzRUEzQUI3Cis6MTAwMTUwMDBCQkJDMUZDNzgzN0U2RUE1REIwNkI4N0NEMjIyRjgzN0Y2Cis6MTAwMTYwMDBBMTdDRjU4RDA4QUZBRjFCOTM2M0QyRTJGMDkyMjUwQzEyCis6MTAwMTcwMDBGRUI1OTRGRTZBNDE2RkQ4NDk3QjA5RDgzNTc5QTNBN0FCCis6MTAwMTgwMDAwMkJENUI4RjQ2RTMzQThERjBGRDY3ODdDM0E5MjRBOUMyCis6MTAwMTkwMDA3QTMwNURDRjI5NEFDNzUwRkY3MzcyNDMzM0RBMkZGMEFDCis6MTAwMUEwMDAyM0VBRjhEQUQ1MDJGNEJEODRBRUYyNzExN0QyQTc3NTRFCis6MTAwMUIwMDBDNkI4NUU3QUQxRTA1M0IzM0U3OTFGOEM3M0ZGNjc4QzZCCis6MTAwMUMwMDA0NDlEMjc1MkUzQ0U1RjBBRjY2NDBGMUQxOUUwMDM3QkJFCis6MTAwMUQwMDAzNjZCRUY0OUVEQTUzM0VDOEY0MDY3NjU3NDJDQzM4QjBDCis6MTAwMUUwMDA4QUZDNTI1M0RBOTNENzFCRDE1RkZEMzJFMjNCOUZFMjg4Cis6MTAwMUYwMDBCNTIzN0QzRUU0QTEzNDM5QjdBRUU4NERBNDgzNzMyRTE4Cis6MTAwMjAwMDBFMjE3OTk1RkZCMzZDOEZEMThCRTM2OTVDODgxQkE3OEVCCis6MTAwMjEwMDA1MDI2NTRFRkJBRjAxRUZBQ0I3MTdDQkZCMUNCODU2Mzg4Cis6MTAwMjIwMDBBNTk5ODQwQzVBMkUxRTJCQTUzNzYzNEI4MzAxRDAxMzNFCis6MTAwMjMwMDAzNjM3RDdCQkRCNzM3RjM1NjYwODlDNkUyMDE4QTcxOTRECis6MTAwMjQwMDAxMDVERUUwOUUwNkU1QzA5Nzg0RUMxRTI0QTAwRkJFNzAyCis6MTAwMjUwMDA0MTQxQTg4MkI4RkQwMEEyQjdBQkUyMENGMDIwNTlFNkZDCis6MTAwMjYwMDA4RkMyRURGMjY4MkVFRjk3NEU0OTE1RDBERjI5RDNGQkYwCis6MTAwMjcwMDBBNzY2ODM1REY0QUIxQzkzRTY1RkUwNTU4MjVGMjkxQ0EzCis6MTAwMjgwMDA1QkE4RkYwNjcyNkE1MEEwQkQxREU4QjM5QURBQUQ3RTg2Cis6MTAwMjkwMDBEQ0JGMDdGMzNBRDY1MjgxM0MyRUY0QzZBRkZFNTFGMUQzCis6MTAwMkEwMDA4QjhCRTI2MDNDN0VEMTU3MUM0QzhCMDc1NEIyNUJENEU1Cis6MTAwMkIwMDBERjUxREM5MEY3QUI3NDUzM0Y2NzAwRDg1OTM3QkJEMTlGCis6MTAwMkMwMDA2RjcyOUY0NkJCRDRDQUVERDJBOEQxOEI1QzJDN0ZDNjdGCis6MTAwMkQwMDBGODQ3OEIwNzE4RTlDQTE4NTczMkYyOUZEMTJFRkRDRjg1Cis6MTAwMkUwMDAxQzZFM0Y1RDREQUVCRTkyRjg4MDE2Qzc1RjkzQzZGQzk0Cis6MTAwMkYwMDA5RTM1NjlCNTJCQTE3RUVEM0NGNzdCNUNBQTA5RjEzOEYwCis6MTAwMzAwMDA2Nzk2ODA3OEQ0RUNCNTM5REVCM0IzODBGRkI0RkE4MzU2Cis6MTAwMzEwMDA0QkY5M0Q2RDA2M0YyNERBRkJCNDJDNDdEMDlGOEU1QzMxCis6MTAwMzIwMDA0NjQ3OEUwMkQ2M0ZDNzRFQ0NGNkIwRkM4MTMzOTdFOUU0Cis6MTAwMzMwMDBERjM5NTQwRkRBRTkxNkE3RjM3MzQ0MTU0NDlGOUYxQTY3Cis6MTAwMzQwMDA5QUNCRTRBQzc2QTUzRkMxOEMxQzVEQkRFMEQwRENCMDlGCis6MTAwMzUwMDA3Q0E4OERFNzQzRURCQzVFQjAzOEJEN0JGNzU3NzA1RjdFCis6MTAwMzYwMDA2Njc1QzAzNkI5RTZDOTZGNTMzODQ0Q0Y4QUYxOTg5MEE0Cis6MTAwMzcwMDA3RTk1Njc3RTA4N0VGMjJDMDdDQURCRjgzNDA5RUI1RUI3Cis6MTAwMzgwMDBBQjEyRUQxRUE0N0Q1NTdFMUJGQzMyQjQzMzI1RDg5MkYyCis6MTAwMzkwMDA4Q0YyNzYyRUU1REY4MEFCMUY3RkM3REU3RkRDQ0NBOTM5Cis6MTAwM0EwMDBGOTNCMDU4Q0FFN0FFMjRCM0UyNkJGNERGNDFGRDBEMzBECis6MTAwM0IwMDBFQzJBM0RCRENDNTVGQUE3OUZEQzVDRkQzOUFFMzFBMURFCis6MTAwM0MwMDAwQjNCQkY0MkJBNjBGQ0JCNkUwNENCNDc5RjJGQTc2M0I5Cis6MTAwM0QwMDAyMDdGREI4NzNEQUVGOUI3NEUwQkY1OEIyODVFODJGMkFFCis6MTAwM0UwMDA2RUE0Rjc2MDFBQjE4NEUzREI1NzIwRUFFQTFCODI3OTM2Cis6MTAwM0YwMDAyNERBNDVGRDlFQTA4NTI0M0Q0OEM3MEQ5MEU3NUVFRkI5Cis6MTAwNDAwMDAwMkRGQjdEODE2NTM4MzdBQzNBRkIzRUYwRkQxNzk0RjVBCis6MTAwNDEwMDAzOEZCNUU4NzkxQ0VFRjFCQkQwNEUzRkYwRjVDNDc0MUM1Cis6MTAwNDIwMDA0NkQ3N0YxRjI0OUNCMTVFNkZDQjdDRjBEQjFFODAzNkVECis6MTAwNDMwMDBENkRGRkRGQkZDNjI2ODQ3NjlFRDZEM0Y5MkMzRUEwREI0Cis6MTAwNDQwMDBFRUM5MERGQzQ4MkRBMDdFOEQ5REVBNUIzQTlGNDMyMkFDCis6MTAwNDUwMDA5OEE3MjI2NDMzQ0E2NzExRTI4MTIwOUZDNzg2QzExNzFCCis6MTAwNDYwMDBGRDA2M0RCQzhENzZCQzU4QzBFMjI4QTI4MUVGOERFRjIxCis6MTAwNDcwMDBCRDNEOTdGMzM5Qzc1MzVGRkIzNjNFNDc3RkFBQUVENkUzCis6MTAwNDgwMDBEM0ZGNzc3MkZCQTk5NzM1M0VFRjg0RkE4OTk4MkJBRjlCCis6MTAwNDkwMDAzQkEwODIxNEYzRDMyMjMxNzlDMDVGMjYyNTA0REYyN0U1Cis6MTAwNEEwMDBCODE4NUQ4MTg0MDEzRDY4NjkxOEUwNDFCOEQxNzYxNEJGCis6MTAwNEIwMDBFODA1QkY0MzhCQUJFMkEyQTMwMEZGMjJFNDEzMDNBODJECis6MTAwNEMwMDBDRkU5NTI0MjQyMkE4Q0Q3RUEwRjE0RjI5NUUzRjJFNUMzCis6MTAwNEQwMDAxRTk1QzczODhGNTRDNkYyQ0JFRkNBMjQwNEVGMUJGMzI2Cis6MTAwNEUwMDBGODdBNUYwRUY4RUI0N0E5OUU5NTQwOEZERkFDNDJCQ0NGCis6MTAwNEYwMDBBQzdCMDVDMUZDODBDM0E1NjA5QkJFMkFENEVDODJCODRFCis6MTAwNTAwMDAxNTZCNTc1MzE4ODE1RUI2QjlGNUY1QUYzQjhCMUUyRkFGCis6MTAwNTEwMDBCNkQyRkU5NjUyMTY2RjNERDQxODc4NzcxNUE1QjU5NkNCCis6MTAwNTIwMDA4MjdDOTQ5N0FCNjA2MEQ4N0E4M0JCQTJBQzEwODc1MTcxCis6MTAwNTMwMDBENDZGRDlDMTZFRkU3MDg1Njg4NTZCNzA2NThEMEE5QjFFCis6MTAwNTQwMDA3RTM3NDFERDJDNDgxMDc3NTAwOEY4RjlENjE1Q0Q1Mzg5Cis6MTAwNTUwMDA4MEFGREVCNUE4OUU0MTRFQ0NBQjYyOUVCODc1QTU3QTQxCis6MTAwNTYwMDAyQkY4M0RCMjU0NUU5NjRDRjk2ODUzQUIxOUNGMTk5REU4Cis6MTAwNTcwMDAyOEY5N0RBMjE0QzY4NzlGRTczMkJGRTFFMENFQTgwNzI1Cis6MTAwNTgwMDAwMDBFNkIwNDdCMjgwQUFFMTY2NUQzN0RGMUYwM0VBQkZFCis6MTAwNTkwMDBBNzg5MkVGMUREQTY4NzkzRTAzRDZCMTZBRkYxRUM4MkMzCis6MTAwNUEwMDBGRTI2MUI5QzQwMjU2QjM2RDhBQjYwREUzNTQ5NEJEQzA0Cis6MTAwNUIwMDA0QkMyRTZCNTBGQjczNkMwRkRFMEIwMTZBQzZCNTFDQTAyCis6MTAwNUMwMDAzQ0Q2QTg1OEQ4RDdFNzMxOTA5RjZENUQ5MTE5MDdCNEY0Cis6MTAwNUQwMDBEODkyNjAxRDUxMDdFMzk2RkNFOUI3Qjk4MDc3Qzk4NENBCis6MTAwNUUwMDA3OTVCQUJCQkREMDJGQjFFRTk1NjU0Qzg4RjlCNzI5NDRFCis6MTAwNUYwMDAwMzQwQUZGMzk2OUY5ODgyNzU3M0E1QjFBQkUxM0FGMkQxCis6MTAwNjAwMDBDMkVEQUQwMEZGNzc3OTNDMjY5NDUwOEJGOURBOTY0NTIwCis6MTAwNjEwMDA3NTc2NTg2RjQ1NDJDQUNBRjA3ODRDNEJDMTYyRkIxOEQ4Cis6MTAwNjIwMDBGQTVDOEFEQjU0QjM3NEMwQzVGNEQxMDJGMTk3MDlCMDA3Cis6MTAwNjMwMDAyRUJBOUY3MTMwRUU4RjhEMEExRDE3NEFCMjU2NDUzQTc5Cis6MTAwNjQwMDBBN0Y1MDlENzQ3RjZFNkE1MjkxMDE3NjlEOTYwODdGNEY5Cis6MTAwNjUwMDAwQzY5MTE5NEY1OTAxRjUwOTM5RDExRUJEODMzQkMwQzhECis6MTAwNjYwMDBFRUQ1OEE2QjhBNTU0MkZDMjBCRjdEQkVGNUQ4OEZENDZCCis6MTAwNjcwMDA1MTYwNTczMkZDRDlDREM0NkUwOUQzN0YxOUQ5QzU2N0YzCis6MTAwNjgwMDA3MkMzRkNFODhCREU5QkQwODJGQUEwNDU2MEZDOUJFMTQ0Cis6MTAwNjkwMDBGREUyNDc1MDJGRkM3Q0I2QUYxQkUwQjdBNjU1NTkwRkMzCis6MTAwNkEwMDBGMDIyQUE5RDBDMjhFQTlCNEY0MkY3OTExMTg0Q0FFM0RECis6MTAwNkIwMDA5NjI2NUI1NUE0M0FCNEQwMjI3MTNBRjAwOUU1QTAxMzBFCis6MTAwNkMwMDAwMzQ2ODRDOUU1OTU3NTI5MTAxRjA5MzU1RDg1RENERDc0Cis6MTAwNkQwMDAzMzdFODNGRDAzQzA0MzY4NDM1QTJDRThDMzUwNTI2REY4Cis6MTAwNkUwMDA0QTBBRDAyREE3NEJFM0ZDNUJCODFERjA2MkE2MkZEQUI3Cis6MTAwNkYwMDAwQjc2RTU1ODk2Rjc5QzkxRUI3MzYyOUJCNEJCQzFDRTI5Cis6MTAwNzAwMDBGRDFBRDA2RDJBQUNGNzFGNDhCN0E4RTczRUQ5RkExRkVCCis6MTAwNzEwMDA0ODU3QzQ3NTc5Rjk0ODFGMDk5OTMxOUY1QUY0MTc4Q0M1Cis6MTAwNzIwMDBGN0I2OEREM0NFM0ZCMUY4QTA2NkY3NDY4REZFNjgxNUJCCis6MTAwNzMwMDBGOEFEQkUzQzJEREY1NUIwMTdGQ0Y1RTk1QTNFQjU5QzJGCis6MTAwNzQwMDBDNTA3NURGNDVGQTRGOEEwQ0YxMDFGOUM2RTY4NkJGNjIwCis6MTAwNzUwMDBFNjBENUVCRDdEOUIyOEI1RkI0QTQwRUUxRTEwM0RFMEQ4Cis6MTAwNzYwMDA0RjI0MTFBNjU3NjY5NDBCN0VCMEIzOUI4QUEyRURCOEI2Cis6MTAwNzcwMDBFRTNDMUVFN0U0RkVENzNDQkVFRTYzOEQ3NjAyRjkyNDI0Cis6MTAwNzgwMDA5M0EzNjAzNUFDN0Y3QTNFNUJCRkEzM0UzRDNCMjA4MUE3Cis6MTAwNzkwMDA3QzY3NzE2RTUyNkY5MzMwNkUwMkM4NEYyMDNEN0U5QTE3Cis6MTAwN0EwMDAwRjI2QTFGQjk5NTdCRjE0RURGRDVFRjgzNUIxRjgxMDg3Cis6MTAwN0IwMDBEMUZCMTMzRTYyRjAxRjE2MzE3QjRDRjNCN0U2MUJFQzA2Cis6MTAwN0MwMDAwM0EzQkQ2RjhDNTNGN0U2MDUzNkRCODE5RUJBQzc2NjdGCis6MTAwN0QwMDAxQzRBOTFCMDVCMEQ2OEY5MDAzQTZFQTFCNzczNzUyODk5Cis6MTAwN0UwMDA0Q0ZFNzQ3MkZENzBBNDUxM0VCNjhBRUU3RkI1RUZDNzIxCis6MTAwN0YwMDA3NkEwRDMzNkIzREYwRUZBQTRBREVDQ0UxOEEwQkZCNjA4Cis6MTAwODAwMDAwNTYyMTlGMDdEQjBCMTBDQzcxRDZDRjRFMTc1OTU5N0M4Cis6MTAwODEwMDBDOUJCNjBCNkJDQzIxQjE2NzdBRTJDMkIzRUI2MkFCQzM5Cis6MTAwODIwMDBFRTQxQkVFRUQ4QUFCMEY1NTc3ODY3RThEQTFBOUQ1NUMyCis6MTAwODMwMDA4OEE0NjE3MzA0RjlGMkJDOTdEOUVENjZBQUY3QjFDRTJBCis6MTAwODQwMDA1MEZDODVBN0JGRkExQkVBQUY3Njg3QzNFRjQxQUZERTQ2Cis6MTAwODUwMDA5RUJEN0Y2Q0M5QzBGRUVDMTY2RDdGMUE1Q0I0N0Q2QkNCCis6MTAwODYwMDBGRDdEQURGMzdCN0ZFMzNBOUZGNUVBRURCOTRCQUREMzY4Cis6MTAwODcwMDBCODNFNkRERDdEOERBRjAwNjEzNTBDRDY1OUJBMDBFQTBBCis6MTAwODgwMDA2MjgzRDk0QTA3QzhBM0NBNTI2MTM1RTQ0QjhGRjA3ODE2Cis6MTAwODkwMDBFMjkxODIxODNDRTdCRTM3OERGOTdCRDFGNThDNkZBMkNGCis6MTAwOEEwMDA0QjY3NjBERUVGNEFGMTdCQTM5N0Q5OTVCMzBBMDRCRjhCCis6MTAwOEIwMDA0QzdGOURDQUNGREIxRjRCNjNGOURDQTZBMjlGRkYxNkJFCis6MTAwOEMwMDBGMkQwRUYxNDVBNThCQzk3QzhEM0E3ODVFNUIxRDY1OUQyCis6MTAwOEQwMDBGRDAxQzgyNzFERUJBOUQzNThCNkZBNkVEQThFRDZFNDBGCis6MTAwOEUwMDA0QTk1M0VFRjMwNkI5NjNFN0Y1ODYxQzgzMzQ0MUJFNDE3Cis6MTAwOEYwMDBDQTUxOEQzRTcyMjhEQzUzN0JFMURFOTczRkQxMTc3REQ0Cis6MTAwOTAwMDAxMEYzRDkyQ0QwNDM0NkY4REM2NjgwOEZEMTdGQTlEODZDCis6MTAwOTEwMDA2RUUwODdDQkY0NjMzNkI1NjZFRDg1QkM5QTRBRURDOUM3Cis6MTAwOTIwMDBEMTgwM0ZFOEEyQ0Y0NUNCQkZDNjM0Qzg4MDNDNDY4RkJDCis6MTAwOTMwMDA2MzQyNjdENjgyNUVFQ0E0MkEwMEY0Q0JCQTk5NzdBRTA0Cis6MTAwOTQwMDA4N0Y2NzlBQUY3MDEyRjdEQkQ0N0YzREY5RUNGOTZCRkNCCis6MTAwOTUwMDBGNDQ2QTgxRkU4OTEyMzYwMUY0QzgwQkM2MDY0RkJBMDk0Cis6MTAwOTYwMDA3M0QxRTQ2OTExRUQ4Mzk5NzUyOUQ5QjBBRTE5N0FGQjc5Cis6MTAwOTcwMDBBMDczNDNEOTkzOTk3MDFGRUMwM0ZBRDM5OTU3QTdCMzg3Cis6MTAwOTgwMDAwRjQ4NTlFNjI1RTBDM0U0NkVENEU4QUM4ODc1N0FCMzI1Cis6MTAwOTkwMDBCMzk1QzE3OTYxRkI3MUE0MzU5MEYwN0FDNkVFMUM3OUVDCis6MTAwOUEwMDAwOEY0Q0ZFMDcxMDRFRDdERDRGRURBNjM4OTUwQkZBODZFCis6MTAwOUIwMDBCRDJGRDdDQkVBRjA0OTU5MUNEMzBGRkM3QTI5M0M2QUVBCis6MTAwOUMwMDA3NUQ0Rjc1QjY0RkNERThCMTZGN0QyQzY2NUU3MzFGQkE2Cis6MTAwOUQwMDBCMDM1NDVBRTg3N0VFMkNDQjhDNEJDNEQ1QTlDMjMyREMxCis6MTAwOUUwMDA3RDA4QUYxQjk2NDg4RjNGRjQxNzQxQzJGRTA4RkUxRURDCis6MTAwOUYwMDA4MUJDNjQ3NEUyRDkzRDJFM0FFNDMzQUY5MjlGOTcwREU3Cis6MTAwQTAwMDBFNzI4RkMyQUU0NDM2Q0U1MDJEQTRCQjY0NDgyNzZDRDUzCis6MTAwQTEwMDBFNUZBNTc5NzNCQUUxNThBMDNDMERGQUE2NUYxRjJFMjBCCis6MTAwQTIwMDA3NDMzQjZBMzE1NzExM0M4ODU0OTE3MDYwQTIwMzc3QzlECis6MTAwQTMwMDA4QUY4MzRBQzM3NUFGRUZDRDMxRjgzQkVBNjdBMUZFMjc1Cis6MTAwQTQwMDAzMDNFRDI4MEU3QUM5RDE2MUZDNjI3REFDQUU5Q0NFOTUyCis6MTAwQTUwMDAxMDg3NTk2OTQ5QzE3ODdBRjJBRjYzRENGMDM2N0YyQjkxCis6MTAwQTYwMDBDNENCNkQxRTc2MUVBQUNBQUJBRTg2RUY2NjU0MTQ4RTNBCis6MTAwQTcwMDAxNjA4RUQ5RkVFNjNGMTlCMzkxMEJGODE3OTY3OURERDBDCis6MTAwQTgwMDAwOUYxOUZEOTVFMjZCRkMwNkYwM0JEMzlCN0VFM0JFM0M2Cis6MTAwQTkwMDAxRTk1RkU5QUI4OERCRjM1MkUwQkUzNDkxMkM2MEIwQzdFCis6MTAwQUEwMDBGMTIxNUJDMTU0OEMwRjY5NzUyQUJFMDIxMUNGNzc5Mzc3Cis6MTAwQUIwMDA0NDI3N0U4N0MyMThERjMxQzY3MzhDRjExRTYzN0NFNzQyCis6MTAwQUMwMDBFRTNDNTYyN0FDRDk1M0RGQ0VEM0RCNTMyQkUwMENDMjIwCis6MTAwQUQwMDA2MEIwOTdBOEE4QTQ3Q0RENjYyMTQ5RUQ5NDNFMEYxNTZGCis6MTAwQUUwMDA3RjQyRUVBMkVCNzBGRUQwMDQzNUUwNzQ5QzIxQ0U3OEZDCis6MTAwQUYwMDA5OTcyMkI0OEU1Q0EyOUQ4QzhFRTM3MkNFMERGMkU5MDMyCis6MTAwQjAwMDA2QjMwQkU2N0E0RkJDN0I4RkNCQTJGQ0ZBOUFCRUIwODBDCis6MTAwQjEwMDAzNjJFRTdDRjQ3QTk4MEU3MDVBM0FDRkVBOEU0REU3OTJGCis6MTAwQjIwMDAyRTk3M0Y5RUNBOTExRkNFNjM3RUM1MEY4MUNFODk0NzA3Cis6MTAwQjMwMDBDMUYzMDQzMzcyNUQzQUJBMjUwRDgzQzlBOUIwRjg4REFCCis6MTAwQjQwMDBGMUJEREE3QUI0RjlBRjc0MUQwRjcxNzg1RjJFOUZBQ0U2Cis6MTAwQjUwMDAyQkNBQjc1QkU5RkJDRjUxMUM4QkE4MkZBOTQxMUQxNkVGCis6MTAwQjYwMDA5RkQ2RTJFN0RBNzNENTkwMzdDODA0M0I1MkMwRkM4MUM4Cis6MTAwQjcwMDA3NjNGMkM4RTZEMDZCQThENEU1NEU0NDhERjlCN0EzQjRGCis6MTAwQjgwMDBBRjI3NkU4QTc5NENFRDNENDQ1MDUwMkVENEYxN0M4REM4Cis6MTAwQjkwMDAzNjlGOTlCODlCOTAwRjgwQjZCNTc1ODkxMUUyRTZDNDZGCis6MTAwQkEwMDA2M0I3NTE5MkE5NUQyQjEyODhGRjM4ODlEQzBFRjE2NzdCCis6MTAwQkIwMDA2QkFCMDVEQjQ0QUREQTA3NzZGQTIyQ0UxN0Q2ODJBOUY1Cis6MTAwQkMwMDBGQjIwQUVBNkYxODUzMTZGNjMxNTEzQTdDMkI0NzVFRDk2Cis6MTAwQkQwMDBGQUZDOTUzMTNGNjVCNEE3QjVGOEJBOTlCRTA0RDY3NTRECis6MTAwQkUwMDAwRUYwQzFGNkVCMTcyRjZGQkY0RkUzN0VCRUE2RkJENTBECis6MTAwQkYwMDBFOEFBM0NGMzE2MzdENDlGQjQ0NDI5RUI2QkU4QkFENDg3Cis6MTAwQzAwMDAyN0VEMThBRjcwQzBEQTAwMjYwMUZBMEZFNEU0OTNERTk2Cis6MTAwQzEwMDAxRkUzNzlGNjdDRjY1RDlBMTY4MUQ1QTNFQzQ5Rjg2MzVCCis6MTAwQzIwMDA3Q0Y4RjkwNTUzM0VBMzlCOUZFNTQ5Mzg4RUVBQ0YwMDM3Cis6MTAwQzMwMDA5Qzk3MjI2M0UzOTEyRkI0RkE5MzQzMDlDQzBFQUMyODFFCis6MTAwQzQwMDA1QzFDQjg5M0I2RkY4REQ3NEI1RTUzRjg4Qzk2RUYxRkE0Cis6MTAwQzUwMDA1MDlDNDNCMEY0MDNFMEIyQ0VDQUVBRDIwRTdEQzM4Q0ZFCis6MTAwQzYwMDBGNTY0NDQzQ0IwRUJDRUY4REVCQURENkIzNkVCRkRDQTgyCis6MTAwQzcwMDAxQkQyRjRGNkEwRDFGRUIzMUFEQTQzRjM4RDc1NjQ4QTYxCis6MTAwQzgwMDAxREVCQzgxMjc4MUQxOTVGQkY5MTRGN0VEQUM4RjIxQUFBCis6MTAwQzkwMDAzRkU3NzVGRkJGRTBFNzJGN0ZDOUVCRjczNkYzRjM5NzI4Cis6MTAwQ0EwMDBDRkYzNzNCMzFBRENFRkI3MjgxODhGM0U3MTFEQjVFOTg3Cis6MTAwQ0IwMDA2MjdCRTM4MEVCOEFCRUVCQzZGM0ZCRjlDQ0NGOUEyMkQyCis6MTAwQ0MwMDAzQTc3ODE5RUVBM0Q2N0QxRkY3N0MyMkFDQkY0NzlCM0E4Cis6MTAwQ0QwMDBEOTNFN0RERTZDNkU5NTNFNkZGNkZGMzJFNUVDRkM2QzI2Cis6MTAwQ0UwMDAzODg3NTFCRjEyQkU1MzMwNjM5NTg4RjlDQTc1MkRFNzE2Cis6MTAwQ0YwMDA1MENGOUUyRjQwNkJGQkEyRjcxQ0U2RTczMEI0NzMxQzZECis6MTAwRDAwMDBEQUZENkJGM0Q5Rjc5MTFDQkIxMjJDNTA4RjNGNjM1NTYyCis6MTAwRDEwMDBFQzU0ODg5RjEzNTdDNjY1RDk2RjE1MTA3Mzg3RkNDRkE1Cis6MTAwRDIwMDA0QTk3MDVCRTA3MzEyMzkwODBGMUQwOUFENjJCOUJFN0Q2Cis6MTAwRDMwMDBCRUQxNDMzMDRFREQxM0U3NTdDN0RFMDRGMkY5QjAxNkRCCis6MTAwRDQwMDBFNzI3RDdEQzA0NzFGRUMzM0NDRTVGRjNGMkI4MjdDMUJFCis6MTAwRDUwMDAzRkZBNTk5RTNDMTdFMEQxOTQyNzU3QzFCNTg2QUY4NzFCCis6MTAwRDYwMDBCNjZGQ0MxRkRDREJBNjNGQUZDN0VBQkYzRjUxOTNERkI2Cis6MTAwRDcwMDA0RjNDNUQ5QzJDMzQ0NEFBMTdCOTM5QkYyN0NFQjUxNDFCCis6MTAwRDgwMDBFNjI3RjY5RTM4RDczNzYxM0U2MjZGQzc3Mzc2RjdFNjdGCis6MTAwRDkwMDAzM0Y5RDQ3QzhDRDRDMzNDQ0QyRjkzRkFFNzIzRDhERDMwCis6MTAwREEwMDA3N0U1MEJEQTdDREZDMkU3REQ5QTdFRjNEREM5RTZEN0IzCis6MTAwREIwMDBDRjI3REE2MjQ3ODBERjdGODJENzk3MTlFN0JCMzdERjFCCis6MTAwREMwMDA4QUUzRTg3Q0RGQzNGOTEyN0JENjc3NkZGOEZBN0FDRjMzCis6MTAwREQwMDBDRkI4NjI4MDY5MURENThBQTk4QkQyMTM2OTExQjFFRTkzCis6MTAwREUwMDBDNEQxRTE5QTA2NzU0OTY0NkEyQUQ2QjExQzJFQURGQ0JECis6MTAwREYwMDBBNzM4NEY3M0I4RjQ4NTdGQzlGMzM0REJGMjkzMkZFQjM4Cis6MTAwRTAwMDAzQzhENjMyNjUxMjJDNTM1MDI5QzJFNzcxNTY0MEUwQzRECis6MTAwRTEwMDBGNTgzMjdFQkYyRkQ0MUIwMzM3QURBNjY4NTQwREVDRjA5Cis6MTAwRTIwMDBCQUZDMjBERUJGM0ZDQTU1MUREMUJFRTBGMkFEQTU3NEFECis6MTAwRTMwMDA5MTBGNTI0MjZCOTJBNjhBRTFGNkNCRDkyQ0U1Q0RGQ0ZDCis6MTAwRTQwMDAwOEU3MTNDRjhERUFERTBEQUE2OTY2QTk2MDE2RTJEMTI0Cis6MTAwRTUwMDBERUY2MDg1NDdFNjZBRDk4MjFCQTI1NDJCQzBEMEY0RUQxCis6MTAwRTYwMDAxRTRBRkI2NzI1NTJGRjJFNkNERkY5RjVCRkRFNEREOTE4Cis6MTAwRTcwMDA5NTE0OTQxRTZFOEVBN0UzNzZFNDI4NkYwM0ZEMTZCOUQxCis6MTAwRTgwMDBBNTNERDA5RUU1NEJDN0JBRjdGQjYzMDlEQTc5Mjc0NjQzCis6MTAwRTkwMDA1QkZEOUI5MjJGNUVGN0VGN0FFNUYyNEFGMzE1QzhFNTBBCis6MTAwRUEwMDA5NjQ2N0RGRTdCNEREMjk4OTVCMEZFMzEyNTI0MDQxMkU2Cis6MTAwRUIwMDAzNkM1N0RCNjE4RjI3RjE5RDlDQUVGNjA1RDI5NkUyMjVBCis6MTAwRUMwMDBEQkM2RTM3RDk5ODRFNTZGOENGMzBFOThDOEYwMzQyNjc5Cis6MTAwRUQwMDA5NEY4MDM4ODI3MUZEMkZDRkRBMjJCRjZGN0ZGMTgwRTBCCis6MTAwRUUwMDA2RkUzRjU4NEU2RUZBRjhFRUNFRjlGNTgxNDE3MzkxRkQwCis6MTAwRUYwMDBEMDUyNTcwQkY5ODAxM0FCRjVGRUZFODkwREVFNkEzODIwCis6MTAwRjAwMDBFNzc3ODJGQkZCMjdBNjUwN0Y3RjZDREZGOTAwNkQ5RkEwCis6MTAwRjEwMDA1NDBFMzkyN0VBRjIwMURDNkVFNzcxRUREOUQ5RjJDMDNGCis6MTAwRjIwMDA4OUQ5RThDRkJCRTBEQTk4MjlDN0UyNzhENTc1MTM5RTU2Cis6MTAwRjMwMDA0NzI2OTFDRkM5OTIyNzVDMzJGODM5REFCOUY2NUNBRjBGCis6MTAwRjQwMDAzMjBDOUVEN0NFQ0I4RTAxRDEzNjA4RjJBMkFFREIyMjc4Cis6MTAwRjUwMDBEMUYzNjhCRUJFQkYzRTRGREE5M0M3MzRFMTM5RUFDQjY2Cis6MTAwRjYwMDA4Q0QzNUZFRTM4QzlCQjk5RDVFMzk4NTk5RDYxNTQ0MjQzCis6MTAwRjcwMDA4OTFCRjI1M0U3QzdEQTUxQkZCN0MyRkZDMkY0NkE2QUVFCis6MTAwRjgwMDBCRTMyNzFFMkUwRjA3OTBDREY1Nzk1MkVFRkJENUE5RDJECis6MTAwRjkwMDAzRUU4MkJEMDJGOUQ4NDk0ODFCQzc5MjBCNjAxRTMxRUJFCis6MTAwRkEwMDBENzcxQjgxOUFGRTUxMzM5NUU4OTJCMUVFMDk5OUFFRjE2Cis6MTAwRkIwMDBCQjAxRjA0MTVFREMyQ0UxNzc2MEY5RkRCRUVBRkI4RDAwCis6MTAwRkMwMDBFQjc4RDZFQTdCMUZDRkQ3OTc4ODEyQUJDQjIzQzgxNzE1Cis6MTAwRkQwMDA1N0E1Qjk1MDRGNkJGNkQ3RDI4OTRDNkVEQTQ4Njg5NDUyCis6MTAwRkUwMDA5NUVFQjM1OURFRURDQ0E0RTMzRTdDQzI5QzBFOEYzRDYyCis6MTAwRkYwMDAxNzQzMkNCMDZFNUYxQTk1NzM3NDFGMjU2RTY1NjQ3RjVFCis6MTAxMDAwMDBGMjExQkU0ODY0RjJDMjM1MjA5OERDNzg4RDYzNTc1NUUyCis6MTAxMDEwMDA4MEZCMTdGMUUzMTNERDgzQzExRTdGRUU0OTk2OUZCQTczCis6MTAxMDIwMDBFQUM5NDVGNkRBQjBGOTlGOThDOEU1NjYyMjVCN0ZCNTU0Cis6MTAxMDMwMDAyQ0Y4QTU2NDU4Q0Y1OUNDNDNDRDkwNEMxRTk5NDBERTc2Cis6MTAxMDQwMDBGOEZDRDFCOTEwMjdBNEY2REI2ODZDOUZDMzc2NTAzMjQ4Cis6MTAxMDUwMDA2NTQyNUVGQjQzRjcxNzQ3NjFGQzU1RjcyRTFFODJGNDhECis6MTAxMDYwMDBDRkUxQjE3MDQ1RTZCMzY4RTdFNzI4REYwNUZDMDcwQjgxCis6MTAxMDcwMDBDRUM1QTQ4RTQ1M0I3RTNERDBGRjQyODFGODIyRDkwOUUyCis6MTAxMDgwMDAwRjcxQkM1RDJGMzdEQzA4NzQ3NkJENkMyMzcwNkUyRDNDCis6MTAxMDkwMDA1ODZDNDNCODNGNTcyODQ4RTBCNzU2MDBDRDQzM0NFNzZCCis6MTAxMEEwMDAwOTMzQzY5QjI5M0M5NjQxRkYwMThGMDNCRjFCNUQyMjdDCis6MTAxMEIwMDBGRkRBMENFRDNGOEUxM0M4RDA3RUY0RjExNUMzQjVFMDE2Cis6MTAxMEMwMDBEQzYwRTBDNzBGODFGRTIyQUM3RjI5NUZCRkM2NEYxNEYyCis6MTAxMEQwMDBFRTI1QjgyRTk5RDU4QkY0NDU1N0RENzlGMjkzNDA5N0RDCis6MTAxMEUwMDBBRDI5NEEzRDdFMTdEMTM1RjNCMkJFOEI1OEYxNTMzRjNGCis6MTAxMEYwMDBENkVFRDk3RUQyMzA4QzQ0QThGRjNBQzRGOUM0NzhGRjJBCis6MTAxMTAwMDA5NzEzOTk3RDc3MEJFNzhGQUI5RUVDM0U3MDFERjBGNTQyCis6MTAxMTEwMDAwQThCMEJGMEZBQjMzQ0RGNjY1ODRGOEZERkY1Nzc5NkZBCis6MTAxMTIwMDAyMzUzQzQwNTg4QkY2MDM5NUQzQjdFQzc4MUM0NDA3QkMzCis6MTAxMTMwMDBGQTI4MzNFMjRGMkRFMURGRjlCODlCQjg5QTYzRjEyOTIxCis6MTAxMTQwMDA2Q0RCNTcwOEM4NjcwRTY3N0IxNTE4Q0RFNkJDODZBMzE1Cis6MTAxMTUwMDBCM0UxQjk2MjExQ0ZGNTg3OUQ3M0U5Qjc4RTJDQzRDRjg3Cis6MTAxMTYwMDA5RkI1QzBGOTMzNkFDQjA3NTc4OURBNzdCNzg4NDA2NUVFCis6MTAxMTcwMDA1QkIwRDRDQ0VERkJDRjlFOTRFOUFGQ0ZGMkZBQ0M5MzI5Cis6MTAxMTgwMDBBRjVBMzY0MjFEQ0I1MTEzNkJCRkZEQUE2NUM0NEFGQTU0Cis6MTAxMTkwMDA5RUQwMDhCNjhFQjYwNzA1NEY5MzA0RDdBN0Q3NDNGRTU3Cis6MTAxMUEwMDBCMjZFQjlFMDI5QTNFREVBQzAzRDVEMTBFMjVBRjI4OEMzCis6MTAxMUIwMDA4RDgwQUJGMEYxMEY5NzRFODVGRDlDNzMxM0ZDQkVFQzU4Cis6MTAxMUMwMDBEQzA0QzYzNzRBOTBGODREQzlCREZFRUQwNzQ5QzRBRkVGCis6MTAxMUQwMDBFNTRCRTExQzlEOTdFQjk5ODdFMDFDMUI1REY3QjVFQTk5Cis6MTAxMUUwMDBCN0Q0RUY0MERFOTRGQUJEMTA1NzFCRTQ2MUY5Q0NFOEE4Cis6MTAxMUYwMDBBMEQ5RTMyN0UwRUZCMkZBQzg5NjFGMDhFNDIxOTg0Nzg4Cis6MTAxMjAwMDA1Q0RCMENGRUI5OEREN0VCNDZDQjM1RTgzRjBFQTJGNDg0Cis6MTAxMjEwMDAyOTgxMDYwRDk5NzVFN0Q4RUE4ODgyRjQxQjU3NDYzOTZCCis6MTAxMjIwMDAyMzFEQUU3QUZGMzhFQjEyRTdEOUU2REUzNDM4MTZGODI0Cis6MTAxMjMwMDBFNTJGMTNGNUU3MzJGQThBQUY2QjU3RjhERTBERTBBNzFBCis6MTAxMjQwMDA4M0U3NTdCNzUxQkIxREY2RkIzMkI1REJFMUJBOUREQTM4Cis6MTAxMjUwMDBFRDcwMUZCRTUzMEQ1NzM4Q0YwNkQ3NURENDZFODcyQjY4Cis6MTAxMjYwMDA5QzY3ODMyQjlDNjc4MzJCOUM2NzgzRTdFMDNDMUI1QzFDCis6MTAxMjcwMDBFMTNDMUI5RTNGMkM1NDAzMDMwMTNFQzVEMTA0RjI0M0M1Cis6MTAxMjgwMDAyRDE2NDY2NzZBOTIxNUZEOEQ0MDIxQzFGQzdEMzBDOTNGCis6MTAxMjkwMDBCQTY5MjVDNEVCMDQ4NjI3MzU5NkY1MDc2Mzk0OUJCMTlDCis6MTAxMkEwMDA5RDNDOTZFNTc3Q0Q5RTExNzA4RTcwOTUzMDU2MDJGQjcxCis6MTAxMkIwMDBBOUQ1QUE2MEZERjI4OTk1NjYwMkY1Q0JBMTY5QzJGQkFBCis6MTAxMkMwMDA5MDc3MjE4MkM5MjM1MkZCNjZDNzU3QjcyMUZDMTdDQjAxCis6MTAxMkQwMDBDNDA0NzVFOTJCRTFCQkExMjA4RjNGMjU5QjU4N0MyRUQwCis6MTAxMkUwMDAyOEMyRjdFNTlBNjMwOEE3QzczQUJGNEM2NUY2Njk0MTdCCis6MTAxMkYwMDA2QjFGNTJDMDlGOUQwNDMxMDFBNERGMDMwQUY0MkY1RUNGCis6MTAxMzAwMDAyRUYwNzZEMDJGOEY4MkJBMDZERUFGMUU3QTBBRkNENzc3Cis6MTAxMzEwMDA1NTg2NzZBNzQ5N0IzRUU1Mjk5OEVGNjhDRkZCNDY1NDcyCis6MTAxMzIwMDBDQjQwRUYyOTVBN0ZFMjQyNjg5RjhBRDI5RUZGN0MyMTAwCis6MTAxMzMwMDA5RUU3RDJENkEzN0U4QUYzODU5MkI0RjFBOUQ1RDAxRkI5Cis6MTAxMzQwMDBFQUE5OTM1QjgyRUIwRDBENjZFM0ZGNkQ1N0U3RDNFMEVGCis6MTAxMzUwMDAyRkZGQkRFNzZCNTY1NDhDRTNBQkIzMDg3OTI2RjY2MkRBCis6MTAxMzYwMDBGQUZBNzg5MkE4OEY4N0NBODIyRTFFQUFDNURGNEQ4RTAwCis6MTAxMzcwMDAwNTQzRjFGQ0Q5MDMzNjk0OEJBNzkyMDhGQTIxN0RDNTY5Cis6MTAxMzgwMDA0NUMzRTJGNTE4MTdGREQ1MjRBRDlFRDkxMEZGMjQwQUY4Cis6MTAxMzkwMDA4MTc5QUIyMDFFRThDMUI3MkFFMUU3RDM4OEQwNDBBMDBECis6MTAxM0EwMDA0RURENzcyNjQ2MDIzQkQyOUExODE2QkZFMzMyQTBCRjI1Cis6MTAxM0IwMDA3ODYxNzMwMzhCMEYwNjE1MEI1MTkzN0JFQkZBQUQwNTI4Cis6MTAxM0MwMDBCQ0FFOUZDNzBCQjUzQTA2NkJDMUEzQkFCQzgxMzE1RUY4Cis6MTAxM0QwMDA0OEM0NjU5ODhGRjYyREQyQzcwMzJCOTQyQjhCMTcyRUZDCis6MTAxM0UwMDAyMDAxQ0I1MEEwN0Y1OUYwODBGRkJFQzBBNTdDMzAwNDA3Cis6MTAxM0YwMDBFREZEQUJEOUY3MTlBNUQ3MzE2RUFBOUQxQjgzM0JGMDQ0Cis6MTAxNDAwMDBEREE5MkFCRUU3QjY1QjRGQkMzRjg0OEVGM0FGOEM5MjVBCis6MTAxNDEwMDBFMDMwRkVGQzY1QzVGODdDMUVERDIxQzRCNzZBMEFGMTI4Cis6MTAxNDIwMDBGMDJEQzlGRUQ0RjNCQTA0RjJENDZERjIzMDMzQ0Q3Nzg3Cis6MTAxNDMwMDA2RjAyRDgwQjhCNjIzMTZGNzJEMzVERTkxRkMwM0M4QjlBCis6MTAxNDQwMDA1NTA3M0U0N0VENEE0RUVGMkY2RDA0N0ExMjIxNzAxOTcxCis6MTAxNDUwMDBENkNFMUFBMUQxNUJENTQ2RTBBRjQ5NzE1QTNCRTYyOUY5Cis6MTAxNDYwMDBFMDg3NjJBQkY2QkMxN0RCRjMxNDhERkZBRTc5MEFGNEFDCis6MTAxNDcwMDBDN0QxMTI4REJFMEY1NEMzRjNCMzUzN0JFNjQzRkE5RTFDCis6MTAxNDgwMDBFNEQwREFEMzE3NDI3RjZCQ0Y3QzRCMzZDMjdDRUZDMEZGCis6MTAxNDkwMDA5NzhEQjAzREY1MjlFMEU3RTIxOTVDNUZBOTFGNkQ4NEU3Cis6MTAxNEEwMDBGOTVCMTY2OEYzNEZGMEMzNzcxRUU3OUJCNEU3QTNGQzI0Cis6MTAxNEIwMDBCMDdFODU2ODZEMkFDRjY4RkIzRENFRkZDNzBBNUVBODY3Cis6MTAxNEMwMDAwNjdFQjlCMUE3RkYwNURDRUYwMkRFM0U1RTUwRjcxNEUxCis6MTAxNEQwMDBGNEZGQ0JFRkVGN0ZGODdEQzZGNjREMjQzODY1Njg1NkY0Cis6MTAxNEUwMDAyRjVGMThFNUQ1NkY4Qjk4MUNGMUQ2RkYxQUM4OTUyQzg1Cis6MTAxNEYwMDA2ODc4MUFCRkVGMDZGMTAwOTZDRjRBOThFNTAzNzk2MTQ0Cis6MTAxNTAwMDAxNzNEOTQzMzg4Q0ZFREMyMzhBNzcxOUU5QjBCNTk1QzcxCis6MTAxNTEwMDBGRDRDODEzRTJGRDY2MkM4OEJGOTc4N0VBQUFGNzk4RUJBCis6MTAxNTIwMDAxNEIxNzk1QTRCMjJGQkIxMTlEOTI1N0YyQTgwRkEwMUNGCis6MTAxNTMwMDA3MjU2ODRGOTVDMTQ2MEYwN0RCMjk2NENFNUZGQzM3RDcxCis6MTAxNTQwMDBDQUJBRjhERDREMkFCMjNDNzA5RkZBQzUyQUQ4OTlEM0ExCis6MTAxNTUwMDAyOTM4MjEwRkRCNTRGNDM4QzZFOTQzNzkxNkRERjc0MDBBCis6MTAxNTYwMDBCNDNDRTczQUFCOENGMkYxNjM1RUQ3MzFCRjQ0OUU3Mjc0Cis6MTAxNTcwMDAwRkYwRkYzMDkxNkNDMjNBMEYyN0U2MUJDQ0MzQUQ0RjgyCis6MTAxNTgwMDBBMzVDRTc3OTRGRUQ3QjFDRDMyRjcxMkVDMjc4MkVBNTdCCis6MTAxNTkwMDA5QkMzRkY1QzQxOUIwNUU0QjM0QUQ0MjlBNTU5MjhBRkZFCis6MTAxNUEwMDA4MzUwNkY2QzcyQUNDNTNDQjBBREM4ODI3OTA0MkRGRjFFCis6MTAxNUIwMDBBQ0YwRUY3RjZCNzlERjQ5MTcwNjMyRkQ5RUE2QzU3NTRCCis6MTAxNUMwMDBGQkNGRkYyQUNCNzdGQUQwM0U2ODE3ODk0OUI4MzgxRjdFCis6MTAxNUQwMDBCQ0Q4QTcyNjQxM0RDQkY0RDIxODNDMkY1MDU1RkIwNjcyCis6MTAxNUUwMDBDRTdGNzgwNEMxRUYwNDQ3Q0Y2QUMwRjM0MTY2NkExRjFCCis6MTAxNUYwMDBDQTAwMTc5RTJGRDZFQTYzNDY1RUI4MURDRjhERDY2OTA2Cis6MTAxNjAwMDBGNUU2NjJGOTQxQjA1MzZEOEY1MTNGMEJEOTk3QzE0NTUzCis6MTAxNjEwMDBDQjE3Q0YzMEM4RkJDNTA1OTVBODY3MDlCNUUzNDdDNzA5Cis6MTAxNjIwMDBDMjdCRkEzRkY3RkNGMEE0NThBNDlCOEZEQTU5M0Q3RkE4Cis6MTAxNjMwMDA2MTIxQ0Y5N0YwM0NGMEZEMTYxNkU3NkI0REQxRDNENTY1Cis6MTAxNjQwMDBDRjI3MzE3RjY1RkQyNDQ2NzdCQjhBN0U1RTg1RjYzM0UyCis6MTAxNjUwMDAzMTc5MjAyRjQ2OUU2MERGODU4MzE4MEI5RUI3MzI3RTNFCis6MTAxNjYwMDA4RjM5NkQwRURBNzU0RjhDQTQ1QkE0QjZCNjc5Rjk3QjExCis6MTAxNjcwMDAxODU3MTRENkIzRTczRTFENEYxQUMwNkYzMTlCNTk5QkM0Cis6MTAxNjgwMDA1RTU0QzhGRkU3N0E5NTk5ODU1MDk3QjVGQzAzMUNERjM3Cis6MTAxNjkwMDBBQ0IyN0FFRkJFRTIzN0Q1ODU5QUJFNjdGMTlCRjlFRTIwCis6MTAxNkEwMDA3RDVENzBBRUVDNkY4RUUzMThDRUJERkEyNDU2NUZEMjJFCis6MTAxNkIwMDA1NjIwNjlGOTQ2RkMyRTIxMjU1QzBCRDg4QkE5RjlCRTcyCis6MTAxNkMwMDBGQTQyOEM2RjZEOTY2MDFEOUFCQ0Q5NTc3NDFCQ0EyNzVECis6MTAxNkQwMDAyMjQ3Q0U0QjZCN0NERjYyQzg0QkZCRENFQ0Y5MjNBRkJGCis6MTAxNkUwMDBERDUzMEQ3RjE3QTJBRjNDQzRCM0M1M0Q3OTgzRTVGODQ4Cis6MTAxNkYwMDBGRTc4MkQ2RjIwREYwM0VENUUzRDRBMzdFNEQ1RTlEMTVBCis6MTAxNzAwMDA4NUY1RkYwQkY0Njg4RkREQUU3NkExMURGQjc1NUIzRkExCis6MTAxNzEwMDBBNUFCMTcxMEFGNjUyQzdFRjY3NTVCQkYzQzUxN0UxM0YxCis6MTAxNzIwMDBGOEY5QkZGQjNERTkxMzdENUQwMEE3RkIwNEI5Q0FDOTA5Cis6MTAxNzMwMDA5MjdCMUU0MTlGRTdGQkEwQjA5RjNDREZBNUUyMEZGRjFECis6MTAxNzQwMDAxNzZGRTgzRkRFNjAyRkQyRTdFMUZGNTlFMjBEMEUzODU4Cis6MTAxNzUwMDA0MzM1MThGOTI4QjEwOEY4QTg4MEYxRDFCRkJBRENBMzQ1Cis6MTAxNzYwMDBGQkNEMkY4MjdDQkFCMEQ5MUY5REZBRjdGN0Y3NTNGMzYwCis6MTAxNzcwMDA5NUIyMjJENDgzOEE2OTE3QTU5RkZCOEFFRENDOUUwOTc2Cis6MTAxNzgwMDAzMEY4RjZDNjMzRThGQUJEQkE3OEM2NTNGNUZGMERGMTY2Cis6MTAxNzkwMDAwQ0JBREYyQUM0NkYyOTdGRkZENzFGN0Y3NzIwN0M2NUIzCis6MTAxN0EwMDA2NjRGRkMwQkQyRTcwM0I4QkZDRDZDN0ZGRjgwRjc2RkFECis6MTAxN0IwMDA0NDdBRjkwNUEzOTc1RUY4MzAzQjI5MEMzRTBCRUJGRjBBCis6MTAxN0MwMDAzMUYwNzkxRUUxQjM4REFERUY2QjgwQ0ZENzExOUUxRTQ2Cis6MTAxN0QwMDBCNkRFNEJGOUQ3MjcwQTA0NEQyRTFGQzI3RDY2MzEzQTdCCis6MTAxN0UwMDAzOEM1RUQ2QkVBNzc0RjFFMkFGNUZBREQ0RkU1Qzg2Rjc1Cis6MTAxN0YwMDAxNTMxM0JGNzY4OTFBRUZFNTM3RTFCRUVGN0UzMTcxRkUyCis6MTAxODAwMDA4M0ZFMDg3RTcxMDhFRTdGRERGQ0UyRDg0Mjk2NDdFQzRECis6MTAxODEwMDBDREJCRjhEOTc3NkY0OUQ1RjVERkEwRUZGOTgwQzIxQkIyCis6MTAxODIwMDBFMjZENkRDQjQ1QjQyRkNFMjcxMkZDMUU4MDY2NkY4NDBGCis6MTAxODMwMDA2MjU5RkRERUM1RTdDMTRBMDk5QzQ3QjRFNUIxRUY4Q0FBCis6MTAxODQwMDA2OERGMDczMDhCMEIwNjA2QTQ4QkUxN0E3MDgwNjI4NTE3Cis6MTAxODUwMDAzQUFGMjU3MjdBMEI5QzZGOURCQ0Y2NzMzQzc3NjU5NTA5Cis6MTAxODYwMDA2REY4NzczNTQ3QkEzRDk2QkJDMDhGQTY3RUVFQjUxMEIyCis6MTAxODcwMDA0RkFENzdFMTM5M0FFRDVDOTk3NkZFNjM0OTYwREUzRTIzCis6MTAxODgwMDAzODY3REI0NkU5MjE4MUJFQTdBMkQ0NzIzMjdDRkY0NkNECis6MTAxODkwMDA3QkMzNkM2ODFCRkZBRTY5QzIyNDdEREU4M0MyMUZFRDczCis6MTAxOEEwMDA5RkYzRUI1OTdENUM5Qjk5RUM4MkZBOEYzQTU1RjQzN0E0Cis6MTAxOEIwMDBEMUY2MzM2QjA1RkMxRUU3MjIwQTI3RjBGNzI3QjcyNzdFCis6MTAxOEMwMDA2MzNEQjkzNTkxN0RFRjRDRkJCQkE3OTQwRURBRjNDMEI1Cis6MTAxOEQwMDBGRTNCMkExMkZDM0I3NkZDM0M5OUY2OURFRkE4Njk2NzFCCis6MTAxOEUwMDBGMTdCNUJBN0U4RkVFMUZCM0REQTc3MjY2NjcwM0FEMTMzCis6MTAxOEYwMDBFMDE5RDUxNDg3NzAzOTRGRTE0MjAwMkVGQ0JDQ0RGNEJECis6MTAxOTAwMDBFNTJDMUZEQ0IyNjA3MTEwQzhCQkJBRTBGMzU1OTFFQTU4Cis6MTAxOTEwMDA1MkU2QjhGNURGNEIzN0M2MzM4Q0RGMUIzNzEzREY0MDk5Cis6MTAxOTIwMDAzODU3NTc1MTUwQUM4MkJENkFFM0Y1OUFEMTQ0QzZFRjlGCis6MTAxOTMwMDA1QTlDNUFGQjYzRjY1RDhCNTI4QkVFM0IyMkM2Rjc0NkYwCis6MTAxOTQwMDAxQkU4RDQ2Njg4M0IxOEU5RDQ4ODk3NzIwMzVFOUUzMTAxCis6MTAxOTUwMDBCM0VGMENCNjc0OEExRTk1REU2RTc5NjQ1MTJCOUNDQjY2Cis6MTAxOTYwMDA1NzFGMzFCMUJBNzkyMkUzNzc5RjVBQThDNThCRTdDRkM5Cis6MTAxOTcwMDBFOTYyMjE1RTNGOTdDMzUzQzMwQjIxMEQxNkUwQjcwNTAzCis6MTAxOTgwMDBEQTM5NzQ1M0MzNkEzODRGM0E4RjlGNDNCRjkxNkNDNjlDCis6MTAxOTkwMDA3MzA2Mzc4MTA1NDFERkJCMTA0MkU0MjI3QzU3NDZCMjEzCis6MTAxOUEwMDAzMkU3QzA0NTYwMUQ3NTU1RUMzQjE5MjZEODAzRTQwOUE0Cis6MTAxOUIwMDAxRTMxMjFCRkI2Qjg3N0UxREZGRDBBMENCM0M0OUU0RURECis6MTAxOUMwMDA2M0ZFNDQyNDdCQjYyN0FFNDAyMTcxM0EyQzhFRkY3RjA0Cis6MTAxOUQwMDBGMUFCQkYyRDdFMzVCMTcwMTBBQjlCODgwQUI4RjI5Mjg3Cis6MTAxOUUwMDBEOUY3MjZBMDlFNjk2MkExQzRDRTI3NTg5NDExNzhERTRCCis6MTAxOUYwMDA2MUMzMjcyQUQwODE3NkRFODFGRUFDMThBMkZGNkVDMkI5Cis6MTAxQTAwMDBDNjQ5RkRGODdGMjU4NTg0RDU0NzI3ODc5MjQwQUU3RDVFCis6MTAxQTEwMDBEMDQ3NURFNUUxRTI5RUJBQ0FFNzI2NjFGRTlEREFCRkU2Cis6MTAxQTIwMDA1OTIwRjc5OEZEM0IyM0Q3RjdCMzQ5NjgxN0IzNzNDRTE2Cis6MTAxQTMwMDA1QTFDRTkzM0FGRjI0QjE4NUYwODdGM0YyNzBCQ0ZFNzAzCis6MTAxQTQwMDBGOEUxRkM0RTg1NTNEODJCNDhCREVGMjdDNjNBRjZGRjg4Cis6MTAxQTUwMDBBNTc5QUI3QkI4REYxNjhDMjJGODFEQTQ2MDMyQTk3QTc5Cis6MTAxQTYwMDAzRTAyM0U5RTI5NjE3NjQ0MzAzRDMyQkVCNDdFNkE2N0I2Cis6MTAxQTcwMDAxQzlGQzRGREExMDE4QzI4Q0U1OEY1RjE4MTkzODA5RjU1Cis6MTAxQTgwMDAzRUZGMEUxREM3RTNFODI5RjI0Nzg4NzdERTdFMzg1NzEwCis6MTAxQTkwMDAyMTMyRDRGNzJBQkVGNzAxQUZBNzU1NTEwMkJENDIwMjQ5Cis6MTAxQUEwMDAwQTdFQ0Y2RkZBRjc0NTU3QTRCRkE3RjhDRjdFRkQyRjY4Cis6MTAxQUIwMDBFODdGQUU4NDAwODAwMDAwMDAwMDAwMDAxRjhCMDgwMDVCCis6MTAxQUMwMDAwMDAwMDAwMDAwMEJFRDdEMEQ3ODU0RDVCNUU4M0U3M0E1Cis6MTAxQUQwMDBDRUZDMjQ5OTg0MDkwNjFDMjRFODQ5MDAxQjZEQzBFMTUyCis6MTAxQUUwMDAyNzkwMDA4MTMzOTM4NDI0OTBDMEYwQTc0MTIyMUUwOEUwCis6MTAxQUYwMDBEMERDNUVCNDQxMTE2MzRCOUIwMzgxMTAyMjIyQkU4QjZDCis6MTAxQjAwMDBBRkJDRkVFODI0MTg1QUVGQjM3REQ0Q0I2NzQ1RDQ4RTIyCis6MTAxQjEwMDAwMTJENUFENEUwODUxQTJCQTU0MTEwQjFDRjdFOEY1RURFCis6MTAxQjIwMDBFNUI1Q0ZFN0ZCN0M2QkFEN0RGNkNDMzk5MzA5MjBDNkRDCis6MTAxQjMwMDA1RUZBREQzQjdFN0U4NzdERjZERkRBNkJBRkZGQkRGNkJBCis6MTAxQjQwMDA0OTJEOEIzQUFGQ0Q2MjhDNjk1MkEwMTMxRUI1M0VGRDc0Cis6MTAxQjUwMDBFNDUwMkNCMzlCNTlFNzQ0NzhBODg3MjNGMjI0QzY1NjU3Cis6MTAxQjYwMDBCMkQ4NEY3NTQwQjk4NkZFQzU1OERCNURBNzdFM0YxNERECis6MTAxQjcwMDBEQTQ1MzZBNkE4NkMzQTYzNEI1NjA3QTk3RjExRjMzMkIzCis6MTAxQjgwMDAxOTlFNkREMzcyMTgxQkMyNThDMUI5QzA2MTE1Q0FCQTZCCis6MTAxQjkwMDBERjExOTA2ODk4RjA3Nzg3NDFCRkYwOEE0Q0I1MERDNjg5Cis6MTAxQkEwMDA1OTU2MENBRjBBMTgzQkU5ODRFNzE0RjhERjk4QjY0Qzk1Cis6MTAxQkIwMDBDQjg3RkU1OEJFOEUzQTY4MENDQTRCMDY1QkNBRDlEMDlBCis6MTAxQkMwMDBGNDE4NkY1RkE4RkQzNTYyOEM4MkYxOTlEOURGNkNGRjQ0Cis6MTAxQkQwMDBBRUM0REI5RjBGNjY0NzBDMkY2M0I3OUJGNTUwRDZCMUExCis6MTAxQkUwMDAyQ0ZBMzM5NjlFMTM1NEEwN0ZCRDI0Q0FFRDlBNjI5REIxCis6MTAxQkYwMDBFRkRBNzY2RDFBNjM2NzlDRjZGMTZCQ0RGMTY2NjlBRTJDCis6MTAxQzAwMDA3NjFDMkYxQzlCREZENUFFNDFGOTc0MDJGQzc3MzA1RTQ5Cis6MTAxQzEwMDBCRTU1NzM1MEZCOTVCMUY2MEU1QUVGNTk0OTk0QzdFQTc5Cis6MTAxQzIwMDA1ODNFRUUxMkZERjM5NzY5QjBERUVEMzlCQzNFMUMxQTRBCis6MTAxQzMwMDAxQjMxQjJBRjNFNzhCRUVBRjFCRjMwM0NEMzU0QTJBQjA5Cis6MTAxQzQwMDBDMkZBNUY5NDVDMEJGRkFDNkQ2ODk3NzUyRkQyNTlGOEEwCis6MTAxQzUwMDBGNzBDRThEMTc4NDQ1MjNCQTE0RjIxREIyQjMzOTlDMERDCis6MTAxQzYwMDA3NkM5NDA5NzUzMzQ4OUI1QzE1Q0VCNDIxMkY1MEY3QkJFCis6MTAxQzcwMDAxRDdDMUVBMzI4QTIwMTlEMkQ5OTJFRTg3NDU5MDRFNzBFCis6MTAxQzgwMDBFRDhGRUVGRUY0RDI5QUM3MENFQjNBOEQzNTRCNkQ3MEFBCis6MTAxQzkwMDAxQjYzNkQ3MDJGRUE4MkY2NTA1RTcyRjczRkY4MTFDRTJCCis6MTAxQ0EwMDAyNUI5NjI3RDI1MTFBNEJGOTY0Q0QxRUZDMzhCQ0U3QkE1Cis6MTAxQ0IwMDBFQUE1NkFBMkY3MjVCMTc5RTY1M0ZCMjVBOTYyQkNEQjQ4Cis6MTAxQ0MwMDBBOTFDQzdFNzlENzY3QzFBMzcyRUMzRjkwNDVDQTFEMDA2Cis6MTAxQ0QwMDA5RDg0Q0ZCMDJGQjIxOUY5M0RFQzY3MDEwM0YwNzk3QkY5Cis6MTAxQ0UwMDBGRDA2NTlDRkI3RjA5MTUxQTUxMjFGRjk2M0U1ODg5RDA0Cis6MTAxQ0YwMDA4RjBBODg4RjA2MUFBRTkxNTNDMjNGRDQ0MENFQjBCQzMzCis6MTAxRDAwMDBCRDZBNzhDQzU3QjE2RTkwOTNCODZFNDNBMjc1MEIzQTBBCis6MTAxRDEwMDBBQUY1NTlFOEREMDNFQjU2NDUzOUIwQUNERTNCMTBGM0NDCis6MTAxRDIwMDA3Njk3RDFCQzFGMDFCRTU5OUM5Rjk4OTE5QkMwM0Y5NzRECis6MTAxRDMwMDAzNzVFQjM3N0I5MEJFMTVFQTU0OTVBMDREQTdGOEVCRkVGCis6MTAxRDQwMDAxOUYxRTdFOTY5OUNERTAxOUYyRjZCRjA2NDg1ODBDRjc0Cis6MTAxRDUwMDA3NDdDQ0Y0ODhFRUY5QjEwN0U5NUYwQUNFQThFMkU4MDdGCis6MTAxRDYwMDBDQkE1Nzk1ODFCRTA2MERFRTRGMDZGQTgzRERCRTE0N0NFCis6MTAxRDcwMDBGQzAzMDBENEJFRTUyODUzOTBDRjgwQjcwMjhFQTk1MDUzCis6MTAxRDgwMDA3NkIyOUFCRDQ5RTZGRDY5Qzg0MUYzMzYzMzU2QjExN0JDCis6MTAxRDkwMDBFMDlCQjhEMUI3MkFFQzhERDdFNzk2NzFCODU0N0NDMkQ2Cis6MTAxREEwMDBCOEM3RDM3QkVGMTgwMkYzRjczMkU2REIwOEUzMzcxQjQzCis6MTAxREIwMDBDMEJDRjA3Q0JGNUU4QTQ4QjBFNkY3QjNDMzczOEFBMEFDCis6MTAxREMwMDBEQzlERTMwODZDODRFOUJCMUY3MDhGNTgwQkVEN0I3MkMwCis6MTAxREQwMDBCQzAxODRBRTI3NzM0N0JBMEZDNjdGM0YyMDlCRjhCQTc5Cis6MTAxREUwMDBFNzNERTRFQkUzRTkzMTdFMzI1MEJGNzQ5QkY4M0RBNzU5Cis6MTAxREYwMDA4NTNBOTA4RkRGNTE3OUY5NjdBNTZCREY0M0ZFNjI3OUYxCis6MTAxRTAwMDBDQ0M3ODYwMjFFQjAwN0YwQUEyMzZEOUFDNzBERjNCQTlECis6MTAxRTEwMDA2NjgyMzhDMUJFM0VBNkJCQTBERThERjVCMEM0Nzk4RjA4Cis6MTAxRTIwMDBFRTdFNzQwMThFNjFENEJDMzJDQUEyNDc1RDRDMzE3QTE5Cis6MTAxRTMwMDAzRDM0QUZGMjM5NTc5MENDMzkyOTNFQUU2QjY3RjNDQkM2Cis6MTAxRTQwMDBDREE4OEZGRDMyMEIyMTZGRjk3OTdCM0ZFQkRERjBCOTI3Cis6MTAxRTUwMDAwM0M3ODc3MjFFNDMxMjdDRTk3MzU4QkY2NDk2RjFGNzdCCis6MTAxRTYwMDAzOTJDRDFDQkMyMTUzOTA4NTcxRTBCQTBCRTlEQTczQkZDCis6MTAxRTcwMDBDRkM0RUFGOTYzOUIzMkM5ODQxM0UxOTFENzU3MTRDMUU3Cis6MTAxRTgwMDAzM0I1REVERTZFNzYxRTk0M0RGMUYyQUM5RDc1MjFDNDU1Cis6MTAxRTkwMDBGQjJDMERCQThENjNFQ0M4Q0VCQTY4MURDMDc5QTREMEY2Cis6MTAxRUEwMDBFRDkzMDBEM0FFNkNDNUQ2N0UzNkRCQkIwOUYxMEU3NjYyCis6MTAxRUIwMDBDNTIxMTlGMEIyRDQ5Q0FGRDkzN0VGRjcwQ0ZBQURDQUVGCis6MTAxRUMwMDA4MzEyQUNGRkY4Nzc4MkU5MDU1OUM4NkY3MkMwNjFCNjFBCis6MTAxRUQwMDA3MTA4N0MzMDZBRTc3NDcwMzkxRDkwQTA3REYzNzM2MkRECis6MTAxRUUwMDBERkI0MEVFNDAzMzk0REIyOTU4MzJFNTEzRkE5MDNGOUI3Cis6MTAxRUYwMDBFMjc4NENBRThFNTk4RUU1NDUyMzA1REYwQ0VENDAzRDcyCis6MTAxRjAwMDAzOTIzNEQ5NDA3MkQ0N0JFRUQ1NTlDQTYzQ0JCQkUwMzFGCis6MTAxRjEwMDBFNTU5QUIxOENGRDg0NTdDRkQzNjEzRjU2OTFENDg0NzA4Cis6MTAxRjIwMDBFMTk4RkM5QkRCOEVFNTVCN0QyNjNDQzYwRjQ5MUUzNkE3Cis6MTAxRjMwMDA2QjVDOUY0QzdERTlENTVFRTMwQURBMDM3RjE2MDU5MTYxCis6MTAxRjQwMDAwRkMzNUNERTI1RDY0RjM5MTY2OUNFMzBFREJBRDE2QUEzCis6MTAxRjUwMDA1RjdFREIxNjk0ODk4RkMyREE5RjY1RENCRkQyMDZDMDM0Cis6MTAxRjYwMDAxOUVDNUY0OThENzRBQzAwRTk1MzYxMjM5MEVGNUI5QUUzCis6MTAxRjcwMDA4MEY3NDc0M0Y5NjA4QTRCNEQ0N0I5RUU5QkE5MjVFMUFECis6MTAxRjgwMDBERjU3ODMwRTFBQUYyQUU4Q0QzQUZCNzU2ODNGODE0REMzCis6MTAxRjkwMDA0MEJBNkI2OTZBMTRGRDBEREM1RjdEOTQyQjkyOTJEMzdECis6MTAxRkEwMDBGRjM4QTc0QUI4MUNFODk2N0MwQkI5N0U5NjE5RUFFNzc5Cis6MTAxRkIwMDBFMDIzMjNCRDQ1MkNERUVFQzUxMjJFMEY1QTI2Njg4QjdBCis6MTAxRkMwMDA4M0YwOUMwM0UyOTdDMTFFNkU5OEZFODM3MDA4RTYzOTg5Cis6MTAxRkQwMDA1M0U0MENCODg5Q0ZCNEI3OTBDRkU2OUIzNEY0QjA0QjQwCis6MTAxRkUwMDA2MzBGQTBEQzI4NzJGQjM2QTJFQzk2RjM5RDhENTA1NjUxCis6MTAxRkYwMDA4NjAzQkY2MkI5ODJEM0I3MEVGRjdEOUU4QkUzMkE3MTQxCis6MTAyMDAwMDBGQTA3MzhFNjM1REFGOTQxNjExNkZBODZGQUQ1QzE3NDZECis6MTAyMDEwMDBCRUZFOUJEOUNEQjhGRTA3OURCRUE1MjhDNzVBNzM3RENECis6MTAyMDIwMDA3NzVCRTVEOUZFMTIyRUM3OUUzNkQ3REIzNUZEOUY2QjU5Cis6MTAyMDMwMDAxMDNGMUYzMzQ3MDBFNUM3OUVENDMwQzlCMzUzMTk4Q0Y2Cis6MTAyMDQwMDA3NUEwQ0VENzk4RUExQjhBN0NDREQ3MjFFNUREQ0FCMDMyCis6MTAyMDUwMDBGRDhGNkU4MDI1MEMwMzM4MUFERkVEMkU5RDAwRUY3NzgzCis6MTAyMDYwMDBGMTdFRTdDNkIyMDY4NkVGMTU1RTg2ODc2MThDQzM3NjgxCis6MTAyMDcwMDAyN0E5RERENjYwMkVDRENGMUUwQjc4M0M0OEZCRDAxQ0E3Cis6MTAyMDgwMDBGN0RCQ0JGNjNBRjFFOTQ4N0I3RTg0OUU2NDdGQzQ5MzBDCis6MTAyMDkwMDBBRDc2N0UxNEMzMDNGMjEyNjg0MjVDQjdDNDc0QzdFNzFFCis6MTAyMEEwMDBCODdFNTNGRTAzOUQ2RTI3M0FBREUxN0E2NENBQjlGMzU4Cis6MTAyMEIwMDAzNjdBMkIwREFBRDQyRTkxRUVBMERGQTNENDZGQTFFODFGCis6MTAyMEMwMDBDNzlDQkFDNTVFREYxNjhDNDQzNjI4QTQ4RjdFNDhFREM3Cis6MTAyMEQwMDBCQ0EwOEZCMjZDRkFFOEM3RjQzRTQxMUY0REFBRDQxRUQzCis6MTAyMEUwMDAwRjE2QzRDQkQwN0YzNzk1RkJGNkVGMEMyNkQxNjdEMDA3Cis6MTAyMEYwMDBGRUE3MzRBRTQ3Mjc3Q0NEOUJBQzNEODlFNTg5RDcwQjQ1Cis6MTAyMTAwMDA3OTAyMEQwQjQxN0U1QzIzQ0FFOTc3RDY0RkIzQ0E5RjkzCis6MTAyMTEwMDBDMkM3NTFERTJDRDYyNUIzRkVFQjhGMjM3RjFGMEYwOURDCis6MTAyMTIwMDA3OTczNjQyOUNBOTM5ODNDNjIzNThGREJFNDExOUI3MzAxCis6MTAyMTMwMDAyN0Q2QzdFNDBGNUJGNTE4OEUxNzkzM0Y2Q0U2RTMyOEFDCis6MTAyMTQwMDAzRjgyRjM4NDVFM0JGMzE4OEVERjUyMkJDNkJGMjUxMjBECis6MTAyMTUwMDA0NEJCQzQyMUZBQTc0NDkwMEY3NTI2Q0E3NjNCRjI3Nzk4Cis6MTAyMTYwMDBEM0ZFNjVBOUQ1NkY2MkVDNUYxRUQzMkM3RUM2ODk2OTRDCis6MTAyMTcwMDA3NThGOTMxRTM0ODZCMEQzODIwRjcyRkJGMkJCOTAwMzJGCis6MTAyMTgwMDA4MjdFODQ3RDc4RUFFMDkzQkEwMUVENTY1NDY4NkY1OUY3Cis6MTAyMTkwMDBGNzI1NjY2N0Y2NzJCQjI3NkU1RjlFRTdGNkY3QzBEQjMyCis6MTAyMUEwMDA4RkE3NjlGRTdDNEU2RjVGQzFGOEZGQ0IzQUJFQjBBNzI4Cis6MTAyMUIwMDBFMEZEQkY1OURGNUY2REZFMUNDMEU3MEEyMUJENEZFNEEzCis6MTAyMUMwMDBGMDVENDFGRjhDMTBBRTJGQzBGNUQ0REYwMERFNkM5QUJECis6MTAyMUQwMDBDRkY0MDNBRTQyN0MwNjQyNDNBRTZBRjg0QTA5QkUyQUY3Cis6MTAyMUUwMDBCRURGMkY2QTMxM0EyRDRGNEUwNzk3NERGRjczNjk1RjVGCis6MTAyMUYwMDA0QUY5QkEyREUzQ0VBN0Y3NTU4MjJGRDRBNEZFM0FCNEZDCis6MTAyMjAwMDBCQkNEREUyRUQ2RkY3NjgyQ0IxQ0Y3MjJGREVGQjRCNzE2Cis6MTAyMjEwMDA4QkY1NUY2RUE1Q0YwMUUwRjNENUQ2RkRGRDBBRTQ0ODRFCis6MTAyMjIwMDAyMzhEM0Y4QThGQkYzMjhFQzdFRjU4REZGRjY3RENFQzBDCis6MTAyMjMwMDA5Mjc0REU0RUZCREVDMEU5RTkzMkVDRUQ5RjYwRkJBRDRGCis6MTAyMjQwMDBEMjVFM0Q4M0UyNDQ4NkMwRkIzRjIzREVFMTdEQUYwQkRGCis6MTAyMjUwMDBERUJGNjVFRUM3OTM0NUUxOUZFMTdCMkNGQUM3NUJGQ0NGCis6MTAyMjYwMDAxMzYzMDlBRDJGRUU5RkMwNDBGOTU2N0RBRkI3NUJGNTA0Cis6MTAyMjcwMDBGREExNTA1RDNCQzIyQjk3RjBGNkZCQkJERTVDODZFQjBECis6MTAyMjgwMDA0RjJDODM1RDcyODBENjkzMDU3NkM5MThCMjRCOUVDN0RBCis6MTAyMjkwMDBGMkE1QzYwNUY4QkJBOERGQjM5QzZFOTJENEJGNDI3NDBBCis6MTAyMkEwMDBGNTE0QUY2Rjc1NzEzQkY2RUREQThGQzk4RUQzRDZBOEYyCis6MTAyMkIwMDAwRUI0RTM4NDVFM0YxQUUyN0UwMEQ4MjMxNTExNkY1RkVGCis6MTAyMkMwMDBCQkYxNjg0ODEyNzgzQjRBRTNFRUU1RjgzRjE2OTZEMzM3Cis6MTAyMkQwMDBEMURFOENEOTJERUM1NUYyODNFMjc2RDU1REVEQjg4RjQ5Cis6MTAyMkUwMDA3MUJCQUE4MUNBRDNDRDdEM0UxM0JBNzc5OTA5RUYwOTk0Cis6MTAyMkYwMDA4RTA3NzMzRDk3NkVGRjFFQzFFMUU3RUQ5M0Q0OUZBNTU2Cis6MTAyMzAwMDBGMUIyMzk5Q0NDN0JGODBDRkFBRDQ0QUZGQzM3Q0EwMTcyCis6MTAyMzEwMDBFNTU1NjYyMUU4NUM1NDlDMDU3NjRCRDc0RTQ5NDUzMjFECis6MTAyMzIwMDA1OUI5NEJFQ0YzRkE3NjlCREY2OEYyRTE2MjkzOEU5NTM0Cis6MTAyMzMwMDA5MkU2NjUxODVGNThGQzg5RTBGRjQzN0NGRDMxM0ZCNUFDCis6MTAyMzQwMDA5OUUwN0ZDNzhDNEYzQzhDRUQzOTdDOUYxMkZDMkE4NzJCCis6MTAyMzUwMDBFRjJCMThERjU1NDI3NjE5Qzc0RjBEMzM5QzY4OTc4OUNDCis6MTAyMzYwMDBGMzgyQzRGRENEMjg3MTg4RkQ0RDJGMjEzQjk5QzM1NUMzCis6MTAyMzcwMDBBMzRCNjRCRjg3NTc5QzcyMjJCRDJGM0RDNkI0NjRGNDQzCis6MTAyMzgwMDAzMUE0QzQyNUUyNEY0M0E4QkZEN0Y0NkYwMzNDMkU5NDc5Cis6MTAyMzkwMDBEODdFNzg0OTJDNUUzNTlDRTBGNEYxRjkzNjE0ODU0N0Y3Cis6MTAyM0EwMDA2MEZGNjlGQUQxOTJBMTdDNkIzQzY4OEY4NjRCQTU0ODhGCis6MTAyM0IwMDA1QjBFRkEzN0RFQjI1MjI4Q0Y3M0IwNUVGMkZCMThEQjQ5Cis6MTAyM0MwMDA4QzcxNUZGN0YzMEE2QjBCNTA2QjU1QjFDNDc1ODA0QjgyCis6MTAyM0QwMDA3RjhCN0VFNDIyNzM5RkU3QjE1ODdDQzU4MUYxMUE0QjU1Cis6MTAyM0UwMDBGQzg2RkM0MDc3QzlGRDc5M0I1NThBQkI1MERDQzZFNUNECis6MTAyM0YwMDA5N0M5QUYwODNFQjQ4MkUyMjNBOTg1NkU5RjFCRTc5MTdGCis6MTAyNDAwMDBCM0M5Q0Y3NUZERDA4QzE3MkRFNEZFQTUwM0ZFNDMzQjY5Cis6MTAyNDEwMDAzQUI1OTE5MUZGMzY2NzlCMTQ1MUExREVBREQ5RTMyRkY4Cis6MTAyNDIwMDA3NUVCQ0YzNzkzN0ZCNzgyRjkzNEYwMTM5NTQyN0JCREJDCis6MTAyNDMwMDAyQkMxN0Y2RDk5QTA4NzEwNEY2Nzc3RDUzOTEwMUZDMUM5Cis6MTAyNDQwMDA0QUVFODc5REREMzVEMjhCRkM5N0U4NDc5RjQ1M0Y5QTQyCis6MTAyNDUwMDBBNDU0MUYzRkRBNzgwMEUzNkIxNjNGN0FFRDAwRkFEMUZGCis6MTAyNDYwMDA4QjRBQzA4RjQ2NTk2NEZBRDEyMzhCQzJCNzExM0QyOERECis6MTAyNDcwMDAxQUM5QjdBRUU5NTNFNjkzQkZCQzRENjY2RTY4N0Y3QTYyCis6MTAyNDgwMDBFN0M0MzcwQUExNkM2QzUzMDIxODZFNzhERkE5MkRDNTFBCis6MTAyNDkwMDA3QTAzRkM2OUY5N0FEQTI2ODZGMUFEQjkyNkZDQTc4QkI2Cis6MTAyNEEwMDBDRTk3MjJGQ0RBQkRENzA3OTBERTRGM0ZFNDI2M0M5RjUzCis6MTAyNEIwMDA1RTk5MTk0OTgzRjEzMkI2RkQ2NTUzMEFGNDdGMjUzMkRFCis6MTAyNEMwMDAxQzgzNkMzMUZGM0FEMTBGNjcyQzYyMjBERDlDNjYyM0EwCis6MTAyNEQwMDA1ODFCRUU4M0UyNjMzOEFFRDI5MDExMzAwMjcxN0Y3QkRECis6MTAyNEUwMDA2RTlFQ0ZDMEYxRjQ0ODFBQzM3RDhGQkVDQUE0QjM3OUUzCis6MTAyNEYwMDA4QzhFMUM5MDhFRTczMUQ1ODk4NTA1NEM3MzIyRkUxNzkyCis6MTAyNTAwMDAzMTlEQ0FCNzAxQkY0OTIzNzFCRTNDODNFODAwRjgwRTc0Cis6MTAyNTEwMDBFMzc3NEQxM0Y0RUYxMEJERkY4OEQzMDdEQkFFQjRFM0QwCis6MTAyNTIwMDA3OUM1NjlFMzkxNzRFNEIzM0RBOUY2Nzg4Mzc4QjY5OEU4Cis6MTAyNTMwMDBGQ0U5NDEzRjdGQ0M4MEZBRjkwRjVBRTVDNDY1Qzg5NUE0Cis6MTAyNTQwMDA0N0Y4N0U3MjdFNzU5NTMwMUEwN0Y0NjQzREYyNzlCN0NDCis6MTAyNTUwMDAxOTA3REU5RUM5RTMyNzdCQ0MzODQ5RTIxMzE4M0UwQkVFCis6MTAyNTYwMDBGQjdGNTEzRDAxRkFCMjlERTA4REZCRjExRDA4Q0Y2NTY3Cis6MTAyNTcwMDBFOENCOUYxMkRDRkJGODNBNzcyMURDNUNGRUZDRjcxMjFCCis6MTAyNTgwMDA2RTA3QTgxOTE0NEYwMTUxM0M4OUVGMkZGRTNFOTVGNEI4Cis6MTAyNTkwMDA1RkUwN0NEQTUzMTJFRDU3OEFDQTQ4MEVCOTU5MzhDQTNGCis6MTAyNUEwMDA4OTg5RTMxMTdFRUI4N0RBRkIzRDdCQjE3RTZCODI3QzEwCis6MTAyNUIwMDBGRTNGMTZFQTJGRTBGQ0M1RTc4MTQyQTE5REJCOEFDNzFBCis6MTAyNUMwMDBDMUU3N0FBNTk3MjUzNURFRUUzOEM2QTE5MkVDRjc3OUZBCis6MTAyNUQwMDA1MzhFNDJCM0E4MDNFQzk1ODczMzYwMEZGMjcxN0YwMkVDCis6MTAyNUUwMDA4MzUwNUVCRkREQTQ5RDQ0MUJFRTc4NTMwNTNEN0I5NDc0Cis6MTAyNUYwMDAwNjkyMUYzREJCRTRDODA2RThGQTQ2MTNFQjJFMURERDJDCis6MTAyNjAwMDA3N0RDOUFEQUUwQzkzMzE2NzkzNEI3RUMwOTBGMDg0NTVDCis6MTAyNjEwMDBENjlDRDc3MTU4QzI3OEJERTY1NkRERDBCRjNCM0RCQ0Q1Cis6MTAyNjIwMDAxREUzRjVDNjUxOTk3NTAyQkNCNzJFQUMzQzc5QzYyMkE0Cis6MTAyNjMwMDAxRjEyQzc4NUY5OTgwMTJDRkI2MTg5NEM3MDFGMENCQUQ5Cis6MTAyNjQwMDBBMzMzMzA4RTYwNDgxMTk0MDcyQjhDNTM0RThDNTcyRTM5Cis6MTAyNjUwMDA2RDVDQzY3NEQ4Mjc1N0UxMjkwNUVEQzI5QUEwOEZEQUMwCis6MTAyNjYwMDBDRjJEOTQ5OTYxODFFQkYxNDlEQTdCODg2N0EwOEIzMzk4Cis6MTAyNjcwMDBCNEJGODE5ODFERjUzRTk2ODM0RTJEQzM5NzFGOEY0MzlGCis6MTAyNjgwMDA4QTczODExNzRCOUUyMkZCQjgzQjkzRDFGQzYxM0Y4QjMxCis6MTAyNjkwMDA2QzgwRjk0QkI0NjVBRTVFM0M2N0YxODcyOTZFN0FCMjA3Cis6MTAyNkEwMDA0NEE1Nzk1N0VFNkMyNzc4NTJBN0ZEOTlFMDAxREIzOUY0Cis6MTAyNkIwMDBFQTE4REMxN0RGODIwRjhFOUE3ODZGMzFGMURFMUY5RUU5Cis6MTAyNkMwMDA5NTUyMUVDRjEzRTVCOTY1NEEzQUUyRjkyRDQ1QTU3MzM3Cis6MTAyNkQwMDA4RUZFRjg3QjdFQTk3RDdGRENGRTBBNUJCOTU5QkJEN0Y1Cis6MTAyNkUwMDA4MUY0NzQ3NkE3MUNDMTdEODJFN0VCQjg2RjlGQzBCRUYyCis6MTAyNkYwMDBCMTlDRjgzOERERTlBQ0M2QUE5RkM1RkVDQzI5QjVFRjgwCis6MTAyNzAwMDBDRkQyNkQ3QzdGOTY2RTBCMTI1RTk2OTY1NkJBODZGMThFCis6MTAyNzEwMDA3M0I1QkQ0MERCNEMyRjVDQzYxMDJGMkVFRDk0ODI3MjNBCis6MTAyNzIwMDBBQ0JGRkQwMjdFMUI1NjhBRkM2QkRBOEY1NzEwM0ZDRjgxCis6MTAyNzMwMDAyOUI1RDhCNTVGNzU3QzFGRTZCQkE1MzQ4OTlERkRCNzZCCis6MTAyNzQwMDAzQTVGMTBGNDc0MENFNTZBN0U1Q0FFREU1NkNBRTU2ODRBCis6MTAyNzUwMDBFMjUzQzg1NThCM0Q0OTcxNEQwQjFDQ0JFQkFGMDAwRUJFCis6MTAyNzYwMDBDMTI3QzhBNzI4Mzc0QTc2NDhDRURFN0NEQzdGRTBENzcxCis6MTAyNzcwMDAzMTY4OUY3REI4MTlGMzUxNTZGOTE5RDE0MzU2QTk0QUNBCis6MTAyNzgwMDA3NEVEOUEzNkNGODVGMjc4RTVBRTNGMkJBOEFGMDA5RjY3Cis6MTAyNzkwMDA4QjRCMkQ3MkI4QTQ5NDA5M0Q1NDRCRUZFQjM5NURGQzgzCis6MTAyN0EwMDA3QjlGRUIwMDNDNzdEM0JFRDc3MjM4QUZCNjczQTc3NTZCCis6MTAyN0IwMDBENUUxOERBNTc0MEUwNDcyQzk4QkYxNzg5RkQwNDMyM0E3Cis6MTAyN0MwMDA3OERDRkI4QjlENkZCRUJGRjM1RTg2NzZFMEJDM0ZBNUQ5Cis6MTAyN0QwMDBBQjY4MDdERTVFRDRBOUU1QTg0OUNGMzc1NUM5NzZCRUY4Cis6MTAyN0UwMDA1OTE3NjJFNDU3MzAxNjFBQzYyRTc5QkU5OTc4N0VEQUU4Cis6MTAyN0YwMDBGN0JDRDM3OEI5MzkyQjZFNzcyNzlFNzcyNjlFNkJCMkJDCis6MTAyODAwMDA3RUNFM0ZGQjlFNzcxRUFDMkEwMjM4NjcwNTY0OUZBQUU2Cis6MTAyODEwMDBDNkNGMzM1REQzQ0U5RTYwNjNGQjlFNzcwRTMyRjUyRTFFCis6MTAyODIwMDA0M0VENkQ1OTZGQ0YwODc1NkYxNEYzQTM4Njc5MDIxREMwCis6MTAyODMwMDBCQzM5OTMyN0M1RjEwODdBQzBFMzg2NzkzNjk1MDFGQzQ3Cis6MTAyODQwMDA2ODJGRTc3NDNDQkE4MEQ5RjBFODIyM0M3QzQxM0NEMjQ2Cis6MTAyODUwMDBGOTM2RTI2NUE3MTREOTg4RkQ5NTA2MDNFNUY5NEFFNjNECis6MTAyODYwMDA1MzdGMTA4OEVGNjc2Q0JDQkM3NTFBQ0FFN0VGRDQ3OTQ4Cis6MTAyODcwMDA5OTAzRjg3RjczRDYzRDZDMTlCNDRGM0Q5MkMyNjQ2OERBCis6MTAyODgwMDA3RjQ0QkQ4N0Y2RkJDODQ3RTkyQTlFRjdCQUZEOTY3RENGCis6MTAyODkwMDAzMDcxQTkwOEY4RTRCRTdFRDJERjYwMUYzREM4NzI3REFBCis6MTAyOEEwMDBGNjUxRUQyODQ1M0Q3QkI5RkJGNzY0NTFGODAzRTQ2MzJECis6MTAyOEIwMDAwRkU4NkI2NTdDRkM3RENGMDg4RUNGREU5QjU4QTQ0MzcwCis6MTAyOEMwMDBFQUJCOEY4MDZGOERGQ0NFM0NENkJFOTFFQTFCMThDNjRBCis6MTAyOEQwMDAwNzM2NDk4Q0UzM0I4MTJFMUM2OUVCMEQzQ0Q3NzYyREU2Cis6MTAyOEUwMDBGNzkyMUZENURDRDA0MEY4M0UwQUY4MzY3QzlDQkZGMDRBCis6MTAyOEYwMDA5Q0VBMjJGQzI1RTg4MjQ5NDMyRjlGMkUxMkY3RkRDODRGCis6MTAyOTAwMDBDRTNBRDY3ODc1RUY2QjNGRkNCOUJCMTRFRDlFQ0JEREFDCis6MTAyOTEwMDBENzc5NTNCNTlDQjIwMkVCM0U2QjIzQ0I4NjU4RjlENkUwCis6MTAyOTIwMDBFMDdFMDkzOEMwRTQ0RjJFNjRBQzMzQjNBRjFEOTU2RjIxCis6MTAyOTMwMDBFNkE1QzA3ODVGQzdGMUM2OTQzMTMzMEVBODhEQzFGMjA5Cis6MTAyOTQwMDA4MjFCNTg0M0IyQkM5NzZCQ0JCOTNGNTYwQjI2MjJDNUFFCis6MTAyOTUwMDA1NThDNTRDQUJCQUNGNUVERjgzREU1NjExQTM3QTlENkU0Cis6MTAyOTYwMDAzQ0NDM0FCRTA0NzZGQ0UxRjYxRUFDOUYwQjhCNzU2NDQyCis6MTAyOTcwMDBEMTJCQ0FDQjE0RjgwOTk1RTVEMEI4NDVBQjRGQkRBRTA1Cis6MTAyOTgwMDA1Mjc1ODBDNjc3ODFGMDQ3M0ZCNTE2NUY1MjNFMDk4QjdFCis6MTAyOTkwMDA3NDkyMUNEMEQ5N0M5MEY3NzdBQzk1Mjg5RkIzQzY0ODI5Cis6MTAyOUEwMDA2M0U4RDdDNkYzMkFGNjI2RTQ1NUYwRjJEQzZDQjNERTEyCis6MTAyOUIwMDA3OEIxQzM3RThFRjlEQTcyREIzOUE2RDE5QkEwREZGRTM3Cis6MTAyOUMwMDA0OEZBQ0Y2NjVGNThGNEQ5MDcyRjdGQjJEQzUwQUNFN0U2Cis6MTAyOUQwMDA5ODlGRDJGODI3NkJDNTdDQzFEREMxN0NFQjM5QTY2QjEzCis6MTAyOUUwMDAzN0MyMjNFMkQ0RjBEQjZEM0RBNzA0QzhBOTJDRTJDOEFFCis6MTAyOUYwMDBBOTMzQjUzQThDODdFRDlCQTBBRkMwRkQ5MTRCQTQwNkRGCis6MTAyQTAwMDBCNDhGNDBDMTY4MTJDNTZCN0MxREU4NEY4M0ZEQkYxMkI3Cis6MTAyQTEwMDBFQkZGREVENzA5NzY0ODUzOTlFNUZDRTNFRjBERkVEM0QzCis6MTAyQTIwMDAyMkJFNkYxQzVGOEVGMDVERURGMDAyQkU3RjQ2RjhBRUY5Cis6MTAyQTMwMDBFMEY4RkUzQjgwRjc2MDU5NTJGRkU0QUE4MUVGNkQ4MjE3Cis6MTAyQTQwMDAyRjc2MEVGMUVGMEVDRjg3NjU5NkYzOEJBRjdBM0U2RDQyCis6MTAyQTUwMDBBQUY2QkY3MUZENUZDMTNBMUMzMzcxMUQ2NkZFQzE2NUU4Cis6MTAyQTYwMDBCNEY3NTA3QkYzQkMzNEIxQkU2OUE2RTkzRjk4RTdDNDI0Cis6MTAyQTcwMDBFRkM0Q0VGMUFFQURDM0YxN0FFM0U3N0E3NEVFMTUzRjYxCis6MTAyQTgwMDA0N0NDMUI4OUU3ODg3MUY4RjM2ODdFNzE4RTE4OUU3OUIwCis6MTAyQTkwMDA3MzFERTU0NUY3NzM4RTM5MUZFQjQ3NTlGQkRGQjQxQkY4Cis6MTAyQUEwMDBGOUFDMkQ2MTNFOTc1OUJGNkFFNjQ0ODIzN0JFREUwOTE0Cis6MTAyQUIwMDAzNDVGNzc0MkZCMUE3MzdENkI2NzRFREQ2RDU4RjAwMTEyCis6MTAyQUMwMDA5REE4N0Q0QzJFMzFBRDBFRTc4QjlGM0I0RUFGQjM5RTQ0Cis6MTAyQUQwMDBERjdFNkZBNkI2NUI5Q0ZGQ0Y0NDNBMzZDRjY5RkZBMzdCCis6MTAyQUUwMDBFMzYzQzE0QzFFREYxMUU3RTU4MjBFNDc0RUQxMTYyMjhCCis6MTAyQUYwMDA5RUFFMzY3ODYxRkZFQUFERjRGRjM3OTg2RkRENEMwQjgwCis6MTAyQjAwMDAzRjdERDFGRTMxN0UzNEY1QkVDODlGMDBGQzFBODhERkMwCis6MTAyQjEwMDBBNjcyMzU2OUJFODRGMDEzQzNCRDJDODI3RUNCNTQxNkQ5Cis6MTAyQjIwMDA5MUYxNUMyMjFDRDAxOUM2NDE2MzdDNkQ1NDEyNUZCQkNECis6MTAyQjMwMDA2MkY3MjNFNkVENDZGOTE3QkYxRkQxQjYxQkVEOEJCODQwCis6MTAyQjQwMDBGRUZFNTU5RDNEQ0Y2MTZFOURGNTdDQkVGRDk1NUY4OTc2Cis6MTAyQjUwMDA3NTNGNkFFNTkzODExRUZGN0JFNTc2QkNDNENBMjY3RTdECis6MTAyQjYwMDA5NkRDRkRERjQ2RDhFRjVGMkNBNjc5REU4OUREQkZBOEI1Cis6MTAyQjcwMDBEQjZEQkZDN0QwQjBEQjlFREZGMTVEM0I1Q0FDRDUwRTNCCis6MTAyQjgwMDAxNzZCQjFFRDU3NDY3OUVCNkUwM0NBMkUzM0VGQ0RCNTE3Cis6MTAyQjkwMDA0MkVBRTc3RUM1NzI5MjBCRTI1QzE3Q0EzNkI5NDBFNTlECis6MTAyQkEwMDBFQzgxODdFQkI3ODI4RTRDM0U4REMxRDkyNzNGRUY5QkRFCis6MTAyQkIwMDBCQkVERjk3OTAzMzNCRjQ1MkVCQzhERkMzMEYwNzhFN0NGCis6MTAyQkMwMDBGNzNCMDRERUZCQkJERkIxNTgxNUU1QzZCQUZBRkMyRkI0Cis6MTAyQkQwMDAzRjJGRTZGRjU5RTVDOTk3NUYwN0JGMkZFMjRBQkMyRjk5Cis6MTAyQkUwMDBDMjM2RDZEOUU1Q0Y2NUMzRTcyQTRGMkE3RjJFQUZGRjdECis6MTAyQkYwMDBBMEYyN0VFNThGMEZDNzZERjYzQUU4M0U4QUVFNjc0OTkwCis6MTAyQzAwMDBFRkEzMzQ5NUYzNzNBOTE4N0Y5QUY3NTExNjNDOUNEQzE3Cis6MTAyQzEwMDA5RkZFQUVFOTRGOEI3ODc3RDA3NTdFODVGNUJDNkI3NERGCis6MTAyQzIwMDAzOThGNkZFNzk2QzdGMjUwNzI2OTdEOEQxQ0JFMDBDQTVFCis6MTAyQzMwMDA0MzNDRUY2MTBBRDM4MEE3MTYyRTE4OTE4REYwMzVGRjIzCis6MTAyQzQwMDA4RThGQzdGQ0UwMjdBN0M3QzdBQjM2RTcxM0YzQkMzNEFBCis6MTAyQzUwMDAyRkJEQzY5QUQ3MzBENjlDMjcxMDlGMkY0MEYzQURFN0UzCis6MTAyQzYwMDBFQjkwMDdBREE2N0I1RTMxQkZEQUY4MzFFMUI1QzUyOTNGCis6MTAyQzcwMDBGQ0VDNEVFMkVGNzhEQ0I4ODNFNENFMjJCN0EwRkYyNzZECis6MTAyQzgwMDA3NzVCRkQ4OURCN0VGRDE0QzkzNzBDNUZFMDM5NUVCQ0U0Cis6MTAyQzkwMDA1RjdCRERFNUY0MkIyQjM3RjVGMTI2NzNCRjhDRDg3RUY3Cis6MTAyQ0EwMDBDRDQ0QjgyRkQ1REZFMjQ3NDdBNUFDQjgxRkJENkY4MjMyCis6MTAyQ0IwMDAzNjA3RkI4MzNGM0RCN0JDRTBEMkUzMDA5RTE2MTE5RTcyCis6MTAyQ0MwMDBENkRBRkQxMTRCRkRFMjcyNUI1RUQyRjlENTE3Q0I0QjI0Cis6MTAyQ0QwMDA1QTYxRUU3QjdGNzk0OTJCQ0E2Mzc5MjQyQkNBMkRFNzkxCis6MTAyQ0UwMDA0QUMxNzkyNUU5MDUxODI3MTlFNjQ4N0E4RkUyMUU3MzRCCis6MTAyQ0YwMDA1RkUzRjk1REJGQTRGNUI0MDhCRTMzQ0JEQjMzNzlGREU4Cis6MTAyRDAwMDBCNzdFRkQ2QzlEQzk1NzZCQ0EyREU3MTdFMkJDODVFNTAwCis6MTAyRDEwMDAxRjhFNjI5Q0M3OTI1RkE0MzlBQzcxOUY5MjUzNEVBNEUwCis6MTAyRDIwMDA4N0E1REJBNEE0RjkzMzdERjhBNUQ1MUM3RjVCNkMxRkI4Cis6MTAyRDMwMDA5QkNBNzk3QzVGQzdCOEUzNjIzMUVFMzczNkQwQjgzNUNECis6MTAyRDQwMDAyQkY4Qjg4OTdDQjNENUM0REZENjM4OUVCNjEyOUVCNEIyCis6MTAyRDUwMDA1OEJFQ0Q4MzU4QzY5NDAxRjdGOEY4RjhFMjdFNEZEMEZDCis6MTAyRDYwMDAxOTdFMDFDRjc1NUEwQzQ5NDVGOUFBMzcyRUEzNzM0NTMwCis6MTAyRDcwMDA1NjAxM0MwOUZCMTQxQzk2QkIwRDQ1ODc5ODZGNUMwNUZBCis6MTAyRDgwMDA5RjBGRkU1OThBRURGQ0MwNDJDNjMwQjA2QjJCOTZEMTI2Cis6MTAyRDkwMDBCOUYzMjQ4REU3QUQ0Q0FFREEyMDBGNTEyOUFGRTU0N0VBCis6MTAyREEwMDBCOEFFQTI4NUVEQ0RCOEJDREI2QTdGMjEyN0NCNjdFOTQxCis6MTAyREIwMDA4RUU1QjNCMEI3NDYwRDA1RkUzNkUxQzM3QjIxNkI2MUVFCis6MTAyREMwMDA5RTc3NjJGOTJDNTU2NUVCQUNGOTJDRTEyRjk3Q0YyMjU5Cis6MTAyREQwMDBFMjdGNEI0MjgwNTdDQkJFOEQzNEQ3MzlCMjgyRTMzNTg4Cis6MTAyREUwMDA3RTBFQ0NFOEZDRjY0NjU2MzNFQjI2OEMyRkUzQkQyRDQ5Cis6MTAyREYwMDA3OERENkRERTczQkI5MENEMjI3OEZFQkY2MTdBMkFDNTg3Cis6MTAyRTAwMDBGMTdBMzMxOTlEQUJDMjg2NjQ1NDRGQzIzQzEyRkU0QjFCCis6MTAyRTEwMDAxOTVENEE3MTVDMzdBQzBCRDc4MUU3QjJEMUFGQzFGMDE1Cis6MTAyRTIwMDA3MkVEQTA2ODEyN0E3RTIzNDM2NzAxMkZDNkZEOERDRDE3Cis6MTAyRTMwMDAwQ0NGRDVGNDQ3RTg3Q0VFODYxNTdGQUVDNzc5OTdFQUNDCis6MTAyRTQwMDA2RTE1NDk2MDcxQkRBRjhDRjJCODU2MDc5Q0VCMzAwRTIxCis6MTAyRTUwMDBFOTk3OTk4NkYxRUMyQUU3N0JGQzlDQzY0Mzc4OUE1QjVDCis6MTAyRTYwMDBDQUNCMDIyRjZFQTZCQzY3QzU4QjkyNTA2RTNDQjE2MTc3Cis6MTAyRTcwMDBDQjIxNEI3QjU3MzQyNTFEQ0YwNURGMkU0RkI3REQyQkU0Cis6MTAyRTgwMDA2MkIyOTdFOEUwODJERjExQzE3M0E4NkU4NTc1MjkwMEYwCis6MTAyRTkwMDA0NzlEMkVEM0Y5N0JFN0I2MzVBRkUzRkRCMUE1N0UyNTdGCis6MTAyRUEwMDBFMDgwNzU5NjM0NEE5NEZGQjVEOEM3RjFGNDk3MjY2MzRECis6MTAyRUIwMDBDQjIxQjA2MTUzODZFNUQyMzlDQzA1OUY4N0EyRjEyRDk1Cis6MTAyRUMwMDBCNTlEMTRCNzA3N0FFOTU2MzBBRkU3MDE5OUUxQjlCNzc0Cis6MTAyRUQwMDBDODdGOUE2N0QyOEJDMDYzQ0FCMjhGMDkyRjE3RjAzQ0E0Cis6MTAyRUUwMDAxQ0YxNTI5ODQ5Nzk1MDczMDAxRkFBOEZDRUY5MzcyMUVGCis6MTAyRUYwMDA5RTUyNTk0M0Y0MUE5OEY3NTZCRjgzNDUyRDcxNjg1ODZFCis6MTAyRjAwMDBCRjJEOEYwQ0M2QTZCQzMzODVERUQ4RUEwOTNGQTkwRkJBCis6MTAyRjEwMDA5NEYwN0MzNEI5MkE4QUZCN0FBMTkwRUYyQjk0MDM0ODcxCis6MTAyRjIwMDBFRkFDOTREM0E5QzA3RjZBMDI5REJBMTNGMkMzMTJFOTMxCis6MTAyRjMwMDBCNDBGRkUyQkVDNzhFRjU0NTgyMDhBRjQ3NjRDMjZGQjI1Cis6MTAyRjQwMDBBMjc3QTc5MjQxNzk1NzNCMUQ5NDc3QzU1ODg0RUUzMUZCCis6MTAyRjUwMDA3NUIyQzE4MTM2OTQ5QjUxODlDRTA5NkUzM0YxMjZGMDRBCis6MTAyRjYwMDBDRTU4QzNFNkU1MThFNzZFQzgwODYwRkM5RjM5MUEzNkVDCis6MTAyRjcwMDA2MzdFRDRFMjQ4MUFFNURGRERDRUY2NTIxRUQ0MURFOEFBCis6MTAyRjgwMDAyMUMzQkM3NzMyOUYwQkNCQ0I1OTgwOUUxMkNCQTdGQkMyCis6MTAyRjkwMDAyNUI3RUExMkYxODVDRUEyRDUzNzAxRkVBMkQ3MzkzMzgzCis6MTAyRkEwMDBBRDc5NTVGREU2MzVDMUNBQ0Y1QUNFMjM0NjU1OThGMkM0Cis6MTAyRkIwMDBEMkEzRkI3OTlFQTc2RURFRkJEMTI4M0YyOEIzQUNENDA5Cis6MTAyRkMwMDBBMzI3OTFCN0E1NDVGQUQ3MkIwQTJDNzkxOEJFMDY0NjM4Cis6MTAyRkQwMDBFN0QzNDVFMTMxMTU0M0UyRkQ5RjlBQTA4REM1RjJFNEE4Cis6MTAyRkUwMDA0MkVEMTY2Q0JGMDdFRDNDRDAwNzhCMEU4RjdEMDJGNUNFCis6MTAyRkYwMDA1OUNCMDQ2RDNDRDYyN0NBQUJEM0ZERTdERjQ1MUI4MTE3Cis6MTAzMDAwMDBFRTdBNTA1RTUxMUU2MTNFRjFFMTQwRTVERjk1NTVGNEU4Cis6MTAzMDEwMDBDOUJGMkJBN0Y1OThGOTc3Mjc5REZDNUUxOUU1MjI0RkNDCis6MTAzMDIwMDA2NTdERUZBNzM1REU0NkY1RTI3RTVBRTJCRDM0RjYyMzM0Cis6MTAzMDMwMDA1RTg2MDUxOTZERTNGMEZFNkUwM0FENUJFMDNEMTEzRjZBCis6MTAzMDQwMDBDQ0JDOTdCNkM0RkY0QThGMzQ3NjAwRjJENjdDNjBEQ0U1Cis6MTAzMDUwMDAwREJCMTg3RDE4RkNGRTcyRjU5QTlFMkNDQTIzNTQyOENECis6MTAzMDYwMDA4RkIwMjU4N0RGNUZERTg0NEQzMDExNjgxNEI3MDcwNzA2Cis6MTAzMDcwMDA1NTcyMzlCRTI1QjNDMTFGODBGQTJENEU5RTBGQzNGMjgzCis6MTAzMDgwMDA3NEI2NjA0QzdDREM0MTk1QjIzODE3NkE0MDNBMDBCQjlDCis6MTAzMDkwMDA4RkVDMjU2MUFGOEE3NkY3OTk3QUExQjE0MjEyRjdDRTBCCis6MTAzMEEwMDBFRUM3RjY5NkZDRUU0NkRBMEY2RjM0RTIxMEU3NzZGQ0Q4Cis6MTAzMEIwMDA0N0U3NDBDMjdFMzgzRUJDODFGMjY5REM1QTcyN0JBMTkwCis6MTAzMEMwMDBCOTIyQTZDRjlCNjlGQzlENDI5RjZCOUI3MEZDMTlEN0QwCis6MTAzMEQwMDBGODE2MjI5RkI5NEE2NEQ2ODE3QTZDRUU1RDI0Nzc5RkY4Cis6MTAzMEUwMDBDMUJDNTFCMDY5MjZFQjFCNEE4NkMyN0UzRjUyNjE5RTJECis6MTAzMEYwMDAzN0Q1NjcyMkJBNThCN0M2RjM0OUEzQzUwRDdFRDQ3NzMyCis6MTAzMTAwMDA1Qjg2MjVCRkY3N0RCMjgyREJDRjEzQUYzRjJGRTNCOERECis6MTAzMTEwMDA1Qjk2ODFBNzMyMEVGMTY3NTAxRTlCQjEwODY0MDk5NDNCCis6MTAzMTIwMDBDMUREM0Y4NEU3MzIxRUI0MDM4QTUwMkZGMkY2QkU3QTI3Cis6MTAzMTMwMDA2ODAzRkJEODY1RTIyQjc4MjNEMDBGREFDRkEzRURGOTMzCis6MTAzMTQwMDA0OEUyMjlEQTI1RTY1QjgxMjg0RkM3NzUyN0U2Qjk4OTY5Cis6MTAzMTUwMDA3Q0FCMUVDNTQ4MEYyNDgxN0Y2RUQ5NUEwRkU1NkI2NTg1Cis6MTAzMTYwMDAyRkY3QTA5RTZDRDE0QTY4QkNDNEJDQjcyREQ5NkMwNEEzCis6MTAzMTcwMDBDMjk1OThENzI2RjJBNjQ0QkU5NDE4RjdCOTBBNEUyN0VFCis6MTAzMTgwMDAyMjZGQ0FFREU3N0EwQjlFOTQyNzEzQUQ1MENERkJCQjlGCis6MTAzMTkwMDBGNkZDMzY5MTVGODNFRDI5QkYyNjlCRjFGQzFBN0YwMzc1Cis6MTAzMUEwMDBDMzdFNkUyODYzRkJCMDk5N0Y5Njk4NTcwNTcyRTgyMDFFCis6MTAzMUIwMDBEMTQxMUZGQjg4OTE5REQxNTI2NEU2MEQzMDZERjMzMkYxCis6MTAzMUMwMDBCNDhGRjBGQzM2OTBDNEJFMDI4MTgwN0FEMDA1RkEwOTMzCis6MTAzMUQwMDBFQjE1Nzk3NTA1QTZGMjdDNTkzQkFBQjQyOERDODNGMDdGCis6MTAzMUUwMDBCOUZDMzEzOUZCM0I4MjM3MkU2N0RGMzVFNUVDMDlBQkEzCis6MTAzMUYwMDA5Qzc1QkZCQUY1MDlCNEJCQjc0ODlDMEVCNzAwREU5RkZCCis6MTAzMjAwMDA0RTQyMUYxRjk4RkNCNjI1MzMzOUZEN0M2RUQyNkJDQjI2Cis6MTAzMjEwMDA4NEYwODczOEJFOTZDNUVGNzc3QzUxM0JCMzI1NkU2NzQ3Cis6MTAzMjIwMDA3MjNDMEU5MDlEMDlGOEY4Q0MyQUE3MDExRkZGMkYxOUI4Cis6MTAzMjMwMDAxRUUwQjcwOUU1ODYyNUNGRDQ1OTU5RDA3RjlFNjk2MjMzCis6MTAzMjQwMDBGRjJCQkQyNzdDMERDODBERTQzRkYwMDc3RDk1RTQwRkYzCis6MTAzMjUwMDA3MjNBMTZGMjM4N0VERkY2Q0FFNEY1MzEwN0M4NTE4MEJCCis6MTAzMjYwMDAwNzZEMDI2QkZCREM0QTJFRTdDNjRERDU3MzJCNDkyRjQ5Cis6MTAzMjcwMDBGM0ZCQkU1QjgzRkNCRTJGOEI2QUE0Rjc4RkE3RUIzNUY1Cis6MTAzMjgwMDBDOEE3MkM2RkZDMjVFNkRCNjBFNkQzRUFGNTYxOTJGMzc0Cis6MTAzMjkwMDBGMzJGRDE3RUEzMzlCRkI5REVCQ0MxQTQzRkI2NEFEQTUxCis6MTAzMkEwMDBBRTU0Mzk1RUJFRDRGQUFFQUJENDI2MjNGQ0NEN0E5OEE4Cis6MTAzMkIwMDBCRTk3QjAyNUNGQTExQUIwQjQ3RjlBQUMxN0UzRkIyRDBGCis6MTAzMkMwMDA3OTFCNjlGRkRBODBFMDI0OTA5QjczMUNFNzFGQ0E5NTg1Cis6MTAzMkQwMDAyODFGRjg1OTY5MTAzQzNERTBCMTI1QTFFQjU5OTU5Qzk4Cis6MTAzMkUwMDBFRUMxOEFBNTdBNzY0MkYzNUJFMzFDNkI0REZEMTZDRkU3Cis6MTAzMkYwMDAwNzc4RkEwOUVCM0RBNjE1OTVGQjU2MTgxNjNEODZGMUExCis6MTAzMzAwMDA5MkE3OTNEMEM1QzI0QUNFM0ZCMjdCOEQ0RDRGMjZCNjExCis6MTAzMzEwMDBCQkI1RDI0NUVENTY1NjlBRjEwODUzRUYyRDcyNzMzRjY3Cis6MTAzMzIwMDA4QTFEMDFGODJDN0E3NURDRDREMEVEQjRBRjA2MzMyNEI1Cis6MTAzMzMwMDA4QjNFMTRGQThGNkEyQ0VGREQ3RTdFRkY4NDFEQjM4RkU3Cis6MTAzMzQwMDAyM0Q2Nzk5RjQ5QTc2MjVFQTBENzU1QzgxRkEwNzdCRjMzCis6MTAzMzUwMDA4MUYzODhGQTQ1MzJFM0YxOEU2RTNCQkUwMDlFRDU5QzI4Cis6MTAzMzYwMDBDRUQ4OEE1ODdFOTYwNTFFQ0RDMUM3OERDMUQxNjM4NzQwCis6MTAzMzcwMDBFMzNFNzMzRkM2NERENUVFQzM3MTQwMUZBRkMzNjc2QkNECis6MTAzMzgwMDAwOEU4MkQwOTVFQzcxNzg0QkU4REY1MEEzMzVBNzM3MzlBCis6MTAzMzkwMDAyRTZBQUY2RUMwNzZBMjZDQjE1NzlCMkJFREY2RUEyNjczCis6MTAzM0EwMDA1QzJGQzhEMUNERjg3RTRGNkFGMjc5Nzc5OEY4MUFCMEMxCis6MTAzM0IwMDBFRjA2NUMyNjlGM0Y4OEZGNENDMjJGNkRCREZCRDJDNjM3Cis6MTAzM0MwMDAwMjhCQjlEREM2QkRDNDk3RjlFMzJGQzE1NzlDOEZFRkJGCis6MTAzM0QwMDBCQ0JFODFGNERCMEJBNkZERjE4MjkzMjk5ODU3MDNCQzk4Cis6MTAzM0UwMDAxNTQ4OTZFRjczQjQ1MkQ4MUI5MUUxODg5N0U3RkFCMTZDCis6MTAzM0YwMDAzNzYyRURGQUM5QUJGRjFBREI5MTc2MjU3NjQ3REJCNDZECis6MTAzNDAwMDBFMzY5NjQ3NzdDRDI5MTg2RkFGREI5MzNBMUE0NzZDN0NCCis6MTAzNDEwMDAwQkQ5M0I4NjI3QjMzQkY2Rjc2Mzc3QkM2QURBQTcwNzdECis6MTAzNDIwMDBERjc3OTExRDUxN0M4RURCMURDNUU3NzZDODY4M0ZCQ0Y4Cis6MTAzNDMwMDA1OUE5RDI3QThBQ0U3NENCM0FDMDVEOEM3NjA3OENCMzA4Cis6MTAzNDQwMDBERkI0M0JCMDNERDkxRDlGRUM5MDExQUVBMjczRERENDJCCis6MTAzNDUwMDBBRjE4Q0E2ODc3MTRGNTYzNzcwMDE0MzJFMkUxRDlFMjU1Cis6MTAzNDYwMDBCNjdGQzVGRDRCNUNFRkJDODk3QThGOTU2RTBCN0JCQjNECis6MTAzNDcwMDAyOUJFMjNGQUI1RTU2RDRDRDM2OUJGRURGNDUzNUFBNEM4Cis6MTAzNDgwMDBEQUYyRTIwQjdCMzlCRDI3QjZFQjhGQ0VDQUU0QUFENkJGCis6MTAzNDkwMDA1RTU4RDc1Njk2QkU4M0YyMzE5NTg2QzdCMTZDMTgwQTJFCis6MTAzNEEwMDBGRjNFMUU3RTVGMDM5RUY3Q0YwNTE4MzJCMTVEQzM0RjBFCis6MTAzNEIwMDA3QTUxQUYxODZFMUY3RUQ3RTAyRkE5NEJCOTlGQjM5NkY0Cis6MTAzNEMwMDBGOTlDNTNFMzcyODg5NjBFQTAxOTIxNzMzQzk3QzdEN0Q1Cis6MTAzNEQwMDAwQzc2RDJGN0QzMzIwODhGOEQzRTExQ0ZEOTUxOTEwQjk0Cis6MTAzNEUwMDBGREVGRkZEQTI4QkFGNzEzN0EwNDA2ODJGMkQ0NjMzMkNBCis6MTAzNEYwMDBENThCRjhDRkVCQzMxOEU1RTcwM0ZGQ0VBOTg2RjEyN0ZDCis6MTAzNTAwMDA5QkUzODM5RUQzRUU4NUY2OEI0QzNCNkNBNkVDQTVGNjM1Cis6MTAzNTEwMDAwRkU2RjFGNjUzOERGM0Y1NTgyRUVBNzVBOTc4QkY4Q0I2Cis6MTAzNTIwMDBDOUVCRTVCQjMxNkU4QkY2MDhCNDdGRjBGOTcwOTkwN0YzCis6MTAzNTMwMDBFQTUzOEYwMzI0MzhERTA5MTdDNTJGNDQ3Q0ExRTBEODU1Cis6MTAzNTQwMDA1RUMyNjdEQTE5OTcyREFFOTEwQTEyMkY2QUIxNUI1Q0UxCis6MTAzNTUwMDAwOTY1MjZENzBFNEEyNjlGQzQzMzMxMEU3MUVEMkNEMzUwCis6MTAzNTYwMDAxRjFEQ0I2RUY5MUNFQ0FDMEI2QzdEMkJBRUQxM0QzQTI0Cis6MTAzNTcwMDA3NDcwMzdFQkRCNUZDNDE5Q0U0RkQ0NDZDQzgyN0QxQzEwCis6MTAzNTgwMDBFNUQ0Qzk2RkQ5NUYwMUI4ODY3RERBQkY3M0U3RUNCMUM2Cis6MTAzNTkwMDA4OEY3MUQwQUM1NzU0RjdFM0I4REY2RTlDMDIzNEEzQjZGCis6MTAzNUEwMDBDNjkzNEUwMjlGRjJGOEFEQjExMkU5RjU0MDNBMTNFNzI3Cis6MTAzNUIwMDA0MDUxOENDQjFEODhERDY3Q0U1RUE5NTlDQUUzNUUyQkQ2Cis6MTAzNUMwMDA3QzFGRjVFMDgxMjFBMkZEOEY3OUJEMjgxQkZGQjQxMjdECis6MTAzNUQwMDBGMzM2MEUwQ0UzRTUyNUFGM0REMzY5MTAxREY3MkFFNDYxCis6MTAzNUUwMDA1NzM3OUVGNjI2OTM5RjkzNjZEQkU5Nzg0RUUxMUE0RTk1Cis6MTAzNUYwMDBDNzk3RTgwN0YyN0VDNkFDMjRGRDUyQUFCOTdGNzVBMDMyCis6MTAzNjAwMDAxNjQwMUE4Nzc4RDI0QjY3MDE1RkVGRUZCOUE3NzUwQ0E4Cis6MTAzNjEwMDA0QzM1NzFEQUI3QkI0OThFNUVEM0JCMzY5OURDNUYzMDZGCis6MTAzNjIwMDA4QkRCNTNEMUUyMDhGOTVCRTBDMzczN0Y5NzI5ODczMEM2Cis6MTAzNjMwMDA3Rjc1MEU1M0M3QTM1RkZGRjBGNEU3N0UzMzE2RTY3OTdDCis6MTAzNjQwMDBBMzY4RjQ3ODM5MDk1RkRGM0QyQjk3QzY4OUMzNzc1NEE3Cis6MTAzNjUwMDA1RThFNzJFOUEzRjcxNjI2OTMwM0RGQUZENDE3REJENzhDCis6MTAzNjYwMDBDM0NGNDc5Qjc3Mjg4NEZGMDc2NkZGREYyNzMwRUYyMTEyCis6MTAzNjcwMDA1QUJDODNFMjc3RkJGRkU0NjBFOEFGRUMxRkMzRUQ3RTRBCis6MTAzNjgwMDBCQ0ExODdERkE1MUMwMEY4NzY0RTRFNDI3NzAwREY1REI3Cis6MTAzNjkwMDBCMzBBRkFDMjM3NzkzNkUzRjlBMTEzQjU2RjYxN0QyMjE3Cis6MTAzNkEwMDBCQzJBQzZCOTAxNUUzMEFGMDIyODQ3NTIzRUZDMkZERDZFCis6MTAzNkIwMDAxOENGRENERkVCQTBBMENBODUzMzFEMzI5MjYwNUI0RkQwCis6MTAzNkMwMDA2RTI5OUFBQjMzQUE0RUM5NDg1MkM1QkU0NzM2RTNEMURDCis6MTAzNkQwMDBBRkJFNUVCNkYxREZFNDlFNTQ1QkY5OEU4NjZCNkNFNTlGCis6MTAzNkUwMDAyNUY1QzNFM0ZDQzhGMDFFRDA0ODVCRDlFREJGRDk1NjIxCis6MTAzNkYwMDAwRUIyMDlCNkYyQzJBQUE5QjZGMUNBN0MyNUI2NzJCOTUxCis6MTAzNzAwMDA3RkI2QUQ3REE1QkFDMDU2OUU5REI3QzRENkJFM0E1MDExCis6MTAzNzEwMDA2N0FCMEZFNzhGNTNGMDBBMUZEMEU1Rjc3MUJGRDM4RTY5Cis6MTAzNzIwMDA2OUM0RTc1QjdBRUVGMTIxNUQ0NDhCQzNFNDRGMUY0RjIwCis6MTAzNzMwMDBFRkNFQzY3OEY1RUJGRDdDNTdFRUQ0MkNBRUNGRUVCQ0M5Cis6MTAzNzQwMDAxRTRDMjM5NDkzQTBDRjM3NjZDNkRCMDc3MzdCNkRGMUM1Cis6MTAzNzUwMDBGOEMzQjNCODdEN0E3MDU2NjIzQ0JFQkY3QjcwNUMzRkU1Cis6MTAzNzYwMDA1RkVFRkRCNzQ0M0QzQ0Y3QTY3QjQ4MkVCNTJEOTQyMzc0Cis6MTAzNzcwMDA3ODlGQUEzOUVGMkQyRkRFMUI3QjdEMjE4RjIzQjQ2NTI3Cis6MTAzNzgwMDBDMzNBQkQ5NDhGNDFGQzc1NzBEMTZEMjNGMDVDMkQzNTJCCis6MTAzNzkwMDA0RkJGMDZFNUJGRDBERjI1NzkxMTc2MUFFQTUzN0QxMUI4Cis6MTAzN0EwMDAzNjEyRUY5NzQxQjlDRUJDNjc1NjkyQ0ZERkRGNjhCRUM1Cis6MTAzN0IwMDA1Rjg1NEZEMERCMzMyREY4NEFENEM3NDFDRkI4OTdDMUNFCis6MTAzN0MwMDA1RDYwRDNGRkVBQTNFRkY3MkRDQ0U3RjE5RUQyNEYyMjQ1Cis6MTAzN0QwMDBBNTc4OUY3QUI2RjZEMjIxN0U2RDlBQ0I5RjM3OEFGRjY1Cis6MTAzN0UwMDA5OEQ1OEZERTdFRDNDRUFGNDc4OTFGRjY5Rjk5N0Y1MTQ0Cis6MTAzN0YwMDBGOUZGODcyNjFFNUY3RkE2QzlDM0EyQjBCRTEzNEQzRTQ4Cis6MTAzODAwMDA3QUZFQUVDOTRGRUY4RjM2QTlGNDZDNjlDQUEzNjdCNENDCis6MTAzODEwMDAyOTQwRjVGRkRBNTQ0OENGNDM0RDFBM0Q1RjY5QUFBMDBECis6MTAzODIwMDBFN0UxQTYzMEI1N0JBREE5ODY5RTQ3OUE3NDdBRkZGMTkxCis6MTAzODMwMDAyQ0NFOTc1NzBCM0M1QTlFODgyNzg0MEYzQTI0QzJFQjE0Cis6MTAzODQwMDA0MjRDRDU5RDcyNEU5M0FERjIxREYwRkE2OTMyQkM1RUNBCis6MTAzODUwMDBBOTFFODkxNkVGMUQxRUU2N0EyQTI5MUYwRDlEMkRFRTQxCis6MTAzODYwMDA4NTcxM0I3OThFNEUzMjNGMDY5RjBCRTM3MzU5RjFGODE5Cis6MTAzODcwMDA5QzFCNEQ5QUMxMDRFN0EwRDkwNTAzMDdFNzAxMzM3RURECis6MTAzODgwMDA3MzIwOTNENTNDQ0RGREJBNEQxMkU5MUJERjM4MkVDRjA2Cis6MTAzODkwMDA3RjEwMEU5MTNDMUYzMjJFQjkzQ0NGRTkyM0NGOTc5MTc4Cis6MTAzOEEwMDBERTYyODczMTZFOEE2OTQ1Mjg4Q0Q3RTFGQ0M5RTMyMTQ1Cis6MTAzOEIwMDBDNkEwOUM4QkUyODFDRTJCMDUxRTJDRkIxNUI4MTIzQ0JBCis6MTAzOEMwMDAyNEFFQkZCNDQ4OUI4Q0UzRTAzRDE0RTdFMEJFN0FFNDRECis6MTAzOEQwMDBDNkRFQ0YzNDhDNDkzRDlCQ0ZFMTdERjhCREY5ODNEMDY2Cis6MTAzOEUwMDA1RTcxNjMzMDhBRUMxNTcwRjAwQTcxQkY5OTY5OEZCNDBDCis6MTAzOEYwMDA3N0Q2NjdGNzFERTcwRkM1N0I0OUFGM0YxOEIzNzM5RUI3Cis6MTAzOTAwMDAyMDNCMjZCMTFERkMwRTExMUU1MDZGNTlGMDkwNDQwRTQ1Cis6MTAzOTEwMDA4NDkzQURCRjRDN0VCRTc3MjNGNDNGRDBDQjI4NUVBNjA4Cis6MTAzOTIwMDBBMjREMERGMDNGQTdGMEVGMzQxQzM4RTcyMDNDNUZGMENDCis6MTAzOTMwMDA0ODI0MUZERDBGRENFQkMxRDhGNkIzREZFNUVEOEM2QTYwCis6MTAzOTQwMDA4OUVFMkZBNDc1RUQ1N0QxNEUwREY2RUFEN0UwRjdDNkY0Cis6MTAzOTUwMDAwQUEzOTU0RUZDM0U2ODY4REFCODQwOEE4NTBFNDI4QTEyCis6MTAzOTYwMDA1RDRGQTJBNTFBRDMzQjE0MEMxQjlDNTBCRTJFREU1RUVECis6MTAzOTcwMDBDNkZEQ0Y4RDk3NzNFOERFRjUzRkNFMDYzQTlEN0ZCRTNDCis6MTAzOTgwMDA4MUE5Rjk2NjdDMzUzOTlFNTY0Qjk2Nzg5QkMyMDJBRDZCCis6MTAzOTkwMDA5MzczQzhFRTNDNzQxRDlFREI4QzY2MTE5OUU4Q0EyMEI3Cis6MTAzOUEwMDBGRjVCQzAyQjdCQzM3NDJGNEZGOEU5OUY0QURBRkRCMzRFCis6MTAzOUIwMDA5M0Q4MEZBQzVFQTM3MzM3RTY3MEQwQjk1QkQzMDRCRDY4Cis6MTAzOUMwMDA2OTM2OURDRjI3OUNDQkY4NUVGOTNGMTJFOEI0NTYwN0M1Cis6MTAzOUQwMDA4QkEyN0Q2MTY0QjgwODdGODlGQjM1QjlCMDcyMTNBRUU0Cis6MTAzOUUwMDBDQkZGQTVGREZBMUQ5MkY1M0IwMTM3QUEzM0M4OUZCQTVDCis6MTAzOUYwMDAwMEZFMTRERTQzNjk1NkY4RkQyOEUzNDQ3QUE0OTM4MDYwCis6MTAzQTAwMDA2NDc5NjhCN0REMkZERjFDQzBGREZGN0VEQUY3QzgzRkExCis6MTAzQTEwMDA2QTA0N0YwQkZEQUY2REE2MUNCRTNGMzVBMzgzODE4Mjc4Cis6MTAzQTIwMDBEQUU2NkNGODFGNThERjIyQjE3MDA3RkE1QjI5RDc0NzM2Cis6MTAzQTMwMDA1ODQ2MUNBRUNFRDk1QzlGQkJEOTFEODM5MENGQkNCRTZGCis6MTAzQTQwMDA5OTI3Q0Y0QzQ4RTZFRjcxRkZDNDE5REJGNzZDMUZGOURCCis6MTAzQTUwMDAxQjY2RDlFQkQyRkQ5OEY3RDgzMjZFRjUyRUJDOEY2NTc4Cis6MTAzQTYwMDAwQ0YxRjBGMzRFMjVBQ0NFMDNGQzNDNjRERUFCNjUzRUJFCis6MTAzQTcwMDA4MzY1NTlFRUVGQ0I0QzM5OEJGMUQ5NTYzMDY2RjA3QzJCCis6MTAzQTgwMDBGNzk3MDlGMDM4QUYxMDFFMTc0QTE4RjQ0N0IzNUMxMUM2Cis6MTAzQTkwMDBDQ0FGNTE1MTFFMDE1Q0FEN0UwN0YxQ0QyNjk1RjNGREYzCis6MTAzQUEwMDAyNkFGRTZGMTI1RDlCNzJEODg0Nzc3RkZGQjI5RTc2Q0NDCis6MTAzQUIwMDBGMjYxMUM3Qjg3RDc0MTdDRDlBQTJBNUI3M0EwRENFQTIwCis6MTAzQUMwMDA1NUY4Rjc1QTU1NDc0NUIyN0NBRDhGNjY3M0JCMDk5QUQ2Cis6MTAzQUQwMDBBNDUwN0U1MzcwM0VEOTMxRkRDREQzNjZFRUE3MjhBNzAyCis6MTAzQUUwMDBFNkVCMUFGMThGMUEwOEUzN0E5QUJENTkxMkM2Mzc0NUU4Cis6MTAzQUYwMDBGREFGQ0RGMTQ1OUM3OEFCNjkxN0E1RTZFRDhENjJCQ0I1Cis6MTAzQjAwMDBBNjY1RDhBQTA5ODgyRTBGRDgzOTY3RTFCRDI3N0YyRjZGCis6MTAzQjEwMDBEOTQ1MkQ0MzNDMzVDOUNFQkZDRUNGRTY3MUI2QURDRTJCCis6MTAzQjIwMDA0MDA1RTI3MzZCQkE4MzE5ODBCRkFEMzlDOUY1NjA4RjY4Cis6MTAzQjMwMDBCOTdGQ0RFQUY4MzBEMTJERTA2M0I0RDRCN0RENkY0QzU2Cis6MTAzQjQwMDA3REI5RDlCOUMzOEZGN0QwQjY4RUJFOTVGMkJDQjY4RTBCCis6MTAzQjUwMDBFMDcyQjdGMUM4ODlDRTBERjlDODBGREY2MkZGODZGQ0FECis6MTAzQjYwMDA5MEE1RDBCRUE5MkNFMDQxRkRENUUyNTM3Q0U4RUY0RkYzCis6MTAzQjcwMDBDQzVBRTcwOTVBRTQ5N0EwRkZFRDY4ODdDMEQzMzk2Q0E3Cis6MTAzQjgwMDA3RTBERDJFMzg1QzJENDAwMjJCRDRDM0U0MkRGMDk2OURFCis6MTAzQjkwMDAwOTgwM0NDREMxM0NBNDA2OUZGNUZFM0ZEOEQzNzIxNUU5Cis6MTAzQkEwMDBDMDk1MUU3MEQ4RUNFRDQxODU3NjdGNDE2NUJBODdFOEY3Cis6MTAzQkIwMDA3MzE4QTdBM0ZFRjYyRjExMUUyRjRBOUNGMTE3Njk5RkI5Cis6MTAzQkMwMDBBOUQ3MjRGQjJFQzlCODJBOEU1NzQxMzdDRTRCRDBDRDZBCis6MTAzQkQwMDBBNUUwQjdFOUJCRUNCOEJFQ0JBOTFBQjEwQUNGMkYxRTNFCis6MTAzQkUwMDA2MkJDN0VFNDkxRjM5REU4QUYyNzk2QkYyQzdGMzYyQjE1Cis6MTAzQkYwMDAzQjQ4MUUzNzhGNzIxMTNEMjVGNkRGOUFDM0UxRjk2MDBECis6MTAzQzAwMDBGNjQ3MzQxRjg2MTU3MERGMzIzRDNDOEVCNEJENzA3MEIwCis6MTAzQzEwMDA0QTMyNzkzQjZCQTI1RTU0NjVCMThCMzI0QkY3OTIxRUYwCis6MTAzQzIwMDAxRDVDQzUwODdGNUUzNUVDMUIwNUUzNzg4RkM5NDBBMzlBCis6MTAzQzMwMDA4MDZGQzc2NzdGM0RBNTVFMzkxRTk1MUQwRDJDQ0NDN0QzCis6MTAzQzQwMDAyMzM5ODNCRkNGNDBCRTY1OThGQTY0Q0IwRDZGMzBDQzZCCis6MTAzQzUwMDA5RkQ5M0U1MjA5Qzg5NDg3NzAyNDcwMzEzQkRBNUI2ODYzCis6MTAzQzYwMDA4RjEzN0REMTM4NTA0RDk1OTk4RjkyQzI1Mjc4MUU1MDQ2Cis6MTAzQzcwMDA1NTQ4QTFGQzFCMDdENzlGMUFGQzNGRDRCQ0MyMkU5OTA0Cis6MTAzQzgwMDBGQjNGRDQzQzVBNTJGMTE1OEY3RjY1RDUzMjVBNEYyQ0U5Cis6MTAzQzkwMDAxRjA1QkYyNzgzRTNFODhDRUMwQ0JDMTA4QkVEQUU1QkZCCis6MTAzQ0EwMDBDREVEQTg2Q0Q2MkJFMUY5REUwRDk4OTUyMzIzQkQ3M0RECis6MTAzQ0IwMDBGOTc5ODE2NTNCMjgxRjA3QTZDMTdDMTJDOTcwOTBCRUE3Cis6MTAzQ0MwMDBGQkFGMzc5Qzk0ODJGMDc2N0JEMUFBNzFCODNGODlFQjI5Cis6MTAzQ0QwMDA1ODUzNjVDNkIzNjJFQkI4MzgxRTA0OUMwMzREQTc0MjI3Cis6MTAzQ0UwMDAyRjM3N0JCODlFRDU0MDIxQTdBMDExOUMxMEQ3MkM5M0NECis6MTAzQ0YwMDBENzUzNUNCM0M1NzBGQjUwMEYzNzJCQTA3N0IzQTg3N0IxCis6MTAzRDAwMDA5OEUyQTAwOTcxQ0RCRkE0RjBCOEE3QjQ4RUY5QTQyMjlGCis6MTAzRDEwMDA4QTZCRTZFMTNFMzVCMkQ0MDBDNjFEMDcyOUJBMDdFQjJGCis6MTAzRDIwMDBEMzQ2Mjk4Q0QzNTVDMzY0M0MzRjg5RkJEQkFBOTdFNzc0Cis6MTAzRDMwMDBCRjM1NTI5RUUwQUY1MEFGNDFCQkFFQ0YyRTJFOEZGNkI3Cis6MTAzRDQwMDA1RDQyQUZCNTFEMUJFNUE1QjhCOUE3MkUwREZERUM2NzBCCis6MTAzRDUwMDBGQ0I5NDdEMDZGQjlFMEUxRjk1QkEyNUQ1N0MyRjc0Q0ZGCis6MTAzRDYwMDA1QTRDMzlENzUzNjVDNkM3NTNGRTIyNjNGRjE5N0U1NTk3Cis6MTAzRDcwMDBDMTNDQjk5MDY3MUNDOUY3NjYyOUY5Mzk0MEFGMjlERjAyCis6MTAzRDgwMDA2RTU0REZFNDc0QjY1QTdDODc2QzM1QzlGRjc3RDM0RDI3Cis6MTAzRDkwMDBGQUFERDc5NzUwQkNEOEI0RTM5OEE2QTlCRTQ5NzFGQjM5Cis6MTAzREEwMDA0REU4NEJCRkUyMzNFRUMyNzFDQ0ZDQTkzRUVCRUNGQTFFCis6MTAzREIwMDAwNzg2REY1NzYxN0U0QkRDMzUxN0U3MUYxNENCOUJDM0FCCis6MTAzREMwMDBGOTEzRURCNkZFRjBEOTY2RkFCRENERkUxMEU1NUQ1Q0U3Cis6MTAzREQwMDA0MDk5OTVFNDVDNDQzQ0MxRkVFQzQ2Mzk1NUQwNkQ5NzYyCis6MTAzREUwMDAyRjY5Nzk3NkY5RDJFQTY4QTAzQzJFRTM2NkU2QzMzQ0Y3Cis6MTAzREYwMDAwRjU2MTVGMDVCRUQ1RkIwNDM4RjU3MTEzM0RCRURDOTA0Cis6MTAzRTAwMDBGQkFBQjlCQ0VCQ0E1NDE1OENCRjk0Nzg4MjBDQ0YxQkFCCis6MTAzRTEwMDA5NDZDOURFMTdFQjhGQzgxOEJFRUM3Q0ZBQkI4REU2RkIyCis6MTAzRTIwMDBDOTVCMUU0NjdGRTVFMUU5REYyNEJDNENBQ0UwNzlBNTI3Cis6MTAzRTMwMDBBMjFERThDQjBGQUEyQzdFOEJDODNCQjhFQ0VGMjNGOTcwCis6MTAzRTQwMDAxQzk0OEY3OEI5RjFBMUI2NjkyQkY5Rjc5MUZDQ0JFOUY1Cis6MTAzRTUwMDBGQjQ4Q0Y3OEY4Rjc5MUJBRDJGNTM0QjRCRkJFRThGNzkzCis6MTAzRTYwMDA5MUVFQUVFNkY0MUFGMjdDRTNFMDhDNUMwQjlFN0E3NDgxCis6MTAzRTcwMDBDQTA3NzFGOUNGRDNCOUNDMEMzMzdGMjQzMTBFRTQ3NjY1Cis6MTAzRTgwMDAzN0QwMzk1QUI0Qjg2MTg5MzUwRTJDRjBGNzczOTNBRTM4Cis6MTAzRTkwMDBGRjUwQUM1MzlFNEY3RjdGREY0MUI0NDM4Q0UxQkFEQ0NGCis6MTAzRUEwMDA2NjlDNzM0QkYxQjcwOUZGRjMyQjMyMjlDRUE0OTg3MUFFCis6MTAzRUIwMDAyNkQ3Nzk5REYyN0EzQjI3RUFENzU2NUJGNDlEM0JEQjA4Cis6MTAzRUMwMDAyMDdEOTdGNjNEQzZFRkFGN0ZDQUVGQUZBNzZENjQyMUE3Cis6MTAzRUQwMDBCQ0FGMUVGQTZDM0M5RDNGODVBMjI5QzQ2N0QzM0YwOTQ1Cis6MTAzRUUwMDBEMEY3QTdDQkU0QTc1QTczQTFCRUVCOTg0MkRGODVFRkNBCis6MTAzRUYwMDA5QTlFOUE4NTdBRURFMzYzRENCRTRERUJCQUU5QzgyRDU0Cis6MTAzRjAwMDA1MDJFM0U1Njg3QkUzRUM4MUQ4MDY1NzBERjc1NENGRjQzCis6MTAzRjEwMDBDNEYxQTVGQ0M3MDJGNDFGMkRFNzIwNjJEQzVGMzYxRDRCCis6MTAzRjIwMDAyNkZBRDhEN0Q0NERDRkZENEQ1MTdBQjYzNUY1RDBCMzVBCis6MTAzRjMwMDA1MEQxNEE3MDNEODVERDc0MjZDOUE2OUM4MTdBMEIxQzQwCis6MTAzRjQwMDA4NTI3QTBCRjg1MUU4NjRDRDRCNTZBRTJCRjZFNUJCQkQ5Cis6MTAzRjUwMDBCNEJDMUU1QjNCRjA1RjRCQUIwQjMwOEY4N0UzRDM4NTZDCis6MTAzRjYwMDBERjBEODNGMUU3RjZCMENEOTJGQTFGNEE1RUFEQUExRUNGCis6MTAzRjcwMDAxODc5RjU4RkQ1MDUxNzkzNTdGQzlDMzRENDYzN0UyN0E5Cis6MTAzRjgwMDAyQzgxMUYxREQ1MkFGOTBEMzFCRTM0Q0Y0Qjg1OUU2RTc1Cis6MTAzRjkwMDBDNTdGODIzRTZEQ0VGODI2OTc2RkIxN0MwQzdFRkY1MEI4Cis6MTAzRkEwMDA3QzY3N0VFM0VCMUZFREExQkNEMjc3Q0M3QTgzRkQ0NDI2Cis6MTAzRkIwMDBCM0Q0MzNGNkM5MkFCQzBGRjIxMjNBQUY2MDg3OUU3QkE2Cis6MTAzRkMwMDBCRDZCMTVERTlCQkVCNTI2NTNEMTAwQkUxMjNDNThDRDRECis6MTAzRkQwMDA4Q0RGN0YxMTc5OEE4OTc4RkI5RkQ1OUNBRjhGRTdGQUI4Cis6MTAzRkUwMDAyOEJFREU5MkNCRkY1RTQxNjJCQjM3QUJCOUJDNDA5QUM0Cis6MTAzRkYwMDBCMEZFMUQ4RkQ0N0VFRUZEQkMyQUM2MzVGMUQ2RUFFMkI2Cis6MTA0MDAwMDBGOTA3RkREREVGNzhBQ0ZBRTJGNzNCRkU2MEQ2NUZFQTM4Cis6MTA0MDEwMDAzRUM3MkZDRDc5NUZDNDc5MEIyODJGNzIwRkQyODVGODU4Cis6MTA0MDIwMDAzQjFCNTFGMzdERUNFRjZCRjg1OUQyNzE3RTZFQ0FERDBDCis6MTA0MDMwMDAxQkU3RjhDQ0ZERDQxNEYzM0JENDdCODkzRUNDQkY4NzdGCis6MTA0MDQwMDAyMEVBQTc5QzhCRDVFRkEzRjk2MjdGRjc0MEE3Rjg4RkYyCis6MTA0MDUwMDBCODVGRjdGM0VBREZFRUQ5NjBGOTlFNTc0QkVDM0I4OTg2Cis6MTA0MDYwMDAzQzZGRTk1MzEzRkVDNEE3Qjg1RjEyRkIxRTE0N0I2QkIxCis6MTA0MDcwMDA4RjY2RjkxRUQ0NEZBQURGMzk2QjdFQUZFQTEwQzE2Nzk1Cis6MTA0MDgwMDBERUFCNzkzNDhFODc1RkQzRkI4NEVGMDM3NEJERkVEQTM5Cis6MTA0MDkwMDAxRUYzM0VDRTZGQThCRTIxRjFCQjVCRUZFREIxREVFRkFDCis6MTA0MEEwMDA3OUI0RkFENDJBQjNGRDUxNUFBN0Y5OURBRTI0NzQ2MUFDCis6MTA0MEIwMDBEMkVEOTkzRDc4OUZGMDMyQzY3Qjk3QzYzM0JGQjNCNTNBCis6MTA0MEMwMDBEOUU0QTNGRUU4MTlEQTlGQTJGNkIxRUYwRkQ3Nzk1MDMxCis6MTA0MEQwMDBBRkM0RUZGMUJGQkJDN0Y2RkRBQ0ZFRjFGNTQ3NUFCNzcxCis6MTA0MEUwMDAyRUU2NjU2NjdFMTNFNzE3OTExRjI2RThDMjNCODdFRjMxCis6MTA0MEYwMDBDNzc2OTMxRkYwRkUxRkY1NUYzMTYwNzhGODhDRDY5NTc4Cis6MTA0MTAwMDA3MEFGRTg1MkVCRDgzNzIxMkNDRjQxMzhGQ0IxRkM2MkJDCis6MTA0MTEwMDA4NUNBNUYxMjFFNzExRjJDOTEzRjg2Q0Y5MTQ0NUVGM0JBCis6MTA0MTIwMDA2MDlBMjczQkY2MURDRTZCMDY2MjVFMTg3NzA0OEQxM0VFCis6MTA0MTMwMDBGRkJFRTdGNTczOTJDQjlGMkYzNDJFNTMyRjJGNkY0NDgyCis6MTA0MTQwMDA5NEZGM0YxOUE5OTlCQTYwNzEwMDAwMDAwMDAwMDAwMEI3Cis6MTA0MTUwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkYzMTc2MDYwRjg1MThGCis6MTA0MTYwMDA4RkMwOUM2ODdDNUFFM0JGNEMwQzBDRkFDQzBDMEM5N0FCCis6MTA0MTcwMDBEODE4MTg5QzM5MTkxODg0RjhDODMzRTcyMjlBQkU3QkRFCis6MTA0MTgwMDA0MEIzNjZGMDMwMzAyQzYzNjU2MEQ4MDlDNDdBNUNEOERGCis6MTA0MTkwMDBGNUQ5MDgyMkQ4NDc4MTdFNUYwMUM0MTdFOTFDMDZBMzIwCis6MTA0MUEwMDA3OEYwRTAxQTExMDY4NjQ5QTIwOEJFOUUxOEFBN0NBREQ2Cis6MTA0MUIwMDAwODgyQUQyMzQ1OTk1RDRFNDBGRDAwODg1MEJFQ0I4MEZFCis6MTA0MUMwMDAwMzAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDNBCis6MTA0MUQwMDAwMDBCRDU3RDBGN0M1NEM1QjVGMERDRERCQjc3RkYyNzI4Cis6MTA0MUUwMDAzN0M5MDI5QjEwRTI0REY4NjNEMDQwMzcxMDMwNThENEU1Cis6MTA0MUYwMDA0RDA0MUE5MEQ3QUU2OUFCQjFBNTc2QTE0QTE1MTE1NkY4Cis6MTA0MjAwMDA2Qjk1NjdENURDRkNERjg0MTAwMkEyMDI0NTU5NTQxMDdGCis6MTA0MjEwMDBBREI2QTlBMkI1OUZFNUJEMEQ1MDhBN0Q3RTlGRTg1MzNFCis6MTA0MjIwMDBBQjU2RkI2MkE1QjQ1QUE1RjE1OTRBRkE3RDA4NkZDRTg4Cis6MTA0MjMwMDA5OUI5RDk3QjZGRUU2RTk2MkE2REJGRjg2Qjg3QjlGMzhCCis6MTA0MjQwMDBFRkNDRjkzNzY3Q0U5Qzk5OTU2QzZFNTI3NjBFMjFBNzBDCis6MTA0MjUwMDBFMUVGMTI0MjFFRjIxMjQyQzZBNEQyQ0FFRjdERjk4NkU1Cis6MTA0MjYwMDAyN0FBRThCRkJEQ0VEMDRFOUE1NEZFNjI2RTcxQjQyMjJBCis6MTA0MjcwMDA1NTdGMTYxMUIwNUVFRDJGOTZGQzkxRDA3QUZGNEVFQzczCis6MTA0MjgwMDA4QTkzN0VEQUU3MUZGNDg2Njg1RTE1RUMwNERBMzk0OTEyCis6MTA0MjkwMDA0REMxQkYwNDY4Rjk5MDJERDQ0NUYzQzk5MzM2MUZBMUQxCis6MTA0MkEwMDBGRDRDMjc3NkU4ODQyODQ0RjY0NUE2RDFFRkUyOTc3M0MzCis6MTA0MkIwMDA4OUFFN0Y3MzdBRjE2NjkxMjQwQjA4RDk3RjI3MTEyMzg5Cis6MTA0MkMwMDBCNDVFOUJGRjgyMjUwMzNFNDI1RTZDNENGRUU1Qzg2NEYzCis6MTA0MkQwMDA0MkMyQzlBOUEyNDJGQjM5RDA3ODA4RjNGRkQ2NzhGOEM4Cis6MTA0MkUwMDAyRjQ3MUM4NDQ0NDkxRThFNTMzQkY3MjM3MTI5NkRCNzE5Cis6MTA0MkYwMDBERjQxMUFGQTY4QkJEQUIwRTA1OEFBMUIyRkNBRTdCMzRECis6MTA0MzAwMDBERkNEQ0JFNTFBRDFCMkRDNEZDQkU5RjdEQUMwRTU5NkM5Cis6MTA0MzEwMDBFNTUxM0EyM0FDOTdDN0ZCMTkxQUIwNDMzRDg1MEM3QTk3Cis6MTA0MzIwMDA3MTlFMjdFQjJERTczOThFQjdEM0YyNTUwMzZDQkVGQjk4Cis6MTA0MzMwMDBERTNFNzExOUQwMjE0OTcyMjM0RTQ4NEY5NkJEMDVGOEQzCis6MTA0MzQwMDBFRTc3MDkwQTI5QTVGODFENTg4NEY4NEQwMjdFNjkxN0YxCis6MTA0MzUwMDAyN0RFNjFGOERFRkY4OTJERDQ0NEYxNURFQjkyN0QyMUVCCis6MTA0MzYwMDA5QTI3MjJBNTA3MkRBRkY1OTEzMEMyMjVEMjk0QzI3MUFDCis6MTA0MzcwMDAxOTg3RkIyQTlFRDY0MzhBNzQ1MTkwMkVGRDJFNEExNzI4Cis6MTA0MzgwMDBERkU4RjA1RUIyNTk0Mjc4QjU3OUY2QzMzQ0IzNjhBNzZFCis6MTA0MzkwMDBEMTk1N0VGNTQ1RkNCNDFEQjFFNjgzOTFGOEExRTNDRDNFCis6MTA0M0EwMDAzQzczMzgzNUJDNDZFNkY2RkZFNTg4OEJFMERGNjlGQUZBCis6MTA0M0IwMDBCRkY5RjJGMzdGMzk1MjlFQ0E1RjMyNzREODkwQTcxQ0JFCis6MTA0M0MwMDA0RDVDQjMyOUJDRjA0RjA1NTJGMUNGMDM1QTc5MjkyQjJDCis6MTA0M0QwMDA4NzcxRTI4RENBOUYyNzUxRkVFQjZEMjQ3RjlFNDRGOUMxCis6MTA0M0UwMDBBRkE3RDE4NUY5RUU0NjE5RjM1RDhENDFDQ0M3NDVEQTBCCis6MTA0M0YwMDA4NEQyMzFERTREMTIyQTZEOUYxN0E2RjU3NUUzRTU1NjdFCis6MTA0NDAwMDBEMzc2M0FGOEZDMjFEOTkwRjc5NjA3MERGNUREOEE2MjRDCis6MTA0NDEwMDAyODhGMkIzN0RCMTI5NEVFOUQxNUI2ODQ1RDAwMzhBOEVCCis6MTA0NDIwMDA4QzlDMEI3MEI4MzBBNUUwQkUxNkE0RjM5OUM0OUE5MDhBCis6MTA0NDMwMDA3NTBFRTU1NzY1MDBDRjRCNzZEMjRDRjMzOTRBRDhCNkE2Cis6MTA0NDQwMDA4Q0U2NEI4Mjc2OTIwOEQxRjE3MzA2MDlBMUZEQzVFRjg3Cis6MTA0NDUwMDAyNDY0MjNFREFGQkI3MkI2NkQxOUNENzdDRDcxQ0E3NkVBCis6MTA0NDYwMDA5OTkwMDRFRDNGRUVBNEZEOUM0QTJBMkREMENGMzQyOTJCCis6MTA0NDcwMDAwNEZEOTA1RUYxQjc4MDI3MTdGREVGNzQxOTIxMTMxNTI1Cis6MTA0NDgwMDBFOTFENUIwRTIxQTUyQUZEQUU5RjlGNTMwRDgyNUNFN0JGCis6MTA0NDkwMDA1NjFCQkY0RjU0OTZERjQ4NjhGRDg5NDRGN0JEMzQ0NTJECis6MTA0NEEwMDA0RjZENUMyRDZGMUVDRjNDQ0UzOTZCNENGRDlCRkEyREIyCis6MTA0NEIwMDA1MTA2NkFFNDhBNTRCRkU3OTBDMTI2RDlGN0NGREM2RjcyCis6MTA0NEMwMDBCODU2MDAzQTg1ODg5MkE4M0M3QjcwRkJENjdDOUM3N0Q2Cis6MTA0NEQwMDA2NDY2MEFDRkREMEVBNjA3Q0RGMjM2NDA2Q0E4M0Y4ODkxCis6MTA0NEUwMDAzODg2ODQyOTVDOEE2MjRCNzREMTdFQkE0QTZEQzgzRjkzCis6MTA0NEYwMDA0QTFCNDk4MERFNUEzN0UxNzAwQ0YyNURBNTkyRDI0QzFFCis6MTA0NTAwMDBGM0E1RTUwNzFCODRFOTg0QUM5RDIwMjNERjc1RUQ3NUQ5Cis6MTA0NTEwMDA5MkU2MTA4MzIzNDBGOUI0NDRFM0QzNTMwMzM1NjVDMEQ2Cis6MTA0NTIwMDA4NzAyMDk2REE0RTVBNUNBRDEyNkE4MkZCRkU2NTExQ0I0Cis6MTA0NTMwMDBENTIzRTc0N0Q2QjBGOTYzOUVDRTdGMTBGRTMxNkI2NDdBCis6MTA0NTQwMDBCRkJGOUMyNTg1MjNDMEI3MkE0OTM4MjkzQzlEOTM5QTMzCis6MTA0NTUwMDBFQjU0M0FDRTAzQUE0ODQwN0VCQUVFRUM3QjFERjAxQzI5Cis6MTA0NTYwMDA5RkNDRTAzNUNGQkI0NDkxOTYwMjVGMTNGREY4NzRCQzNECis6MTA0NTcwMDA5MjQ5NTdEQzAwRjMzMkMzQTFFOThCRUYzN0NBMjg4Rjg5Cis6MTA0NTgwMDA1QjFBQ0IzMTdEQTA1MUVFMDMzREIxRTUxM0JCMjU3RTE3Cis6MTA0NTkwMDAyRjEzOTg3RURFRUE4OEQ4MDAzRTc1OEUyREIxMTNGNTc0Cis6MTA0NUEwMDA0Rjc0RUJGNTM0N0ZGRjc3QzdDRTgwNzVFMEU2MzkzNjgwCis6MTA0NUIwMDBENDJGN0ZFRTY2RjhCRTVGRThCRDhBNjA3RDQ5QzFGQTAwCis6MTA0NUMwMDAyNkY5N0Y0MDBDMzc3RjhCRDZCRjNGNTg0MDU0MkFDRjA3Cis6MTA0NUQwMDAyNThFQzMwQkNGODVGRUQ2OTQ1NUFBQjRCRkZCNkZEOUU5Cis6MTA0NUUwMDBGODBFQjQyRjk5MzM0NUIxRDNGNjEzQUI4RkJFNDUxN0YwCis6MTA0NUYwMDA3MUIyRTVENDQwMzBFMjgzM0M5M0VCOTIzNTYzRkIyNjA1Cis6MTA0NjAwMDA1MTNFMTlBRkY0REUwNEUzOTc1NDRCNEFBMjM0QzU5N0U4Cis6MTA0NjEwMDBDNTI0ODRFMzlDRDNFMDI1NDk3OTc0RkUyQzVFOTk5OUU2Cis6MTA0NjIwMDAzRkNGOUUxRUY4RkJDODU1MTFDODU1NDEwQUVFQUREQ0MwCis6MTA0NjMwMDAzRTMxRDM3REIxNjA0MzdFMTk5NkFCNkEyNjU3NEY1RUZCCis6MTA0NjQwMDBDOEU4QUNDOUQ1OTYwOUJERUZFNUQyN0NDRjM3MTg5RjM1Cis6MTA0NjUwMDA5QUY5QkNCNEZBNjgwREQwQjU5QkNBNEY3RTkwOTA0MkNGCis6MTA0NjYwMDBBN0YyQjE0MEYzM0Q0QkI5MUM1NjFGMTU5NkQzRjY3RjA4Cis6MTA0NjcwMDA3QUQ1QTMxMDkwQTcyNUQ2RkEzQTFEM0ZBNzUyRTNCOEUyCis6MTA0NjgwMDAwRkRDNjJBQjhERDA3QUJGQkM3NkNBMUY5RDMwREUxMkM0Cis6MTA0NjkwMDA0OTAxMzlFQjExQ0I3MTdDRTVCQjkyQTJFQUU4NTlCMjMyCis6MTA0NkEwMDA4NENBMTNFNUFGOTI1QkI4RkM5OEU0NkFCNEYxRTM4RDc5Cis6MTA0NkIwMDAwOUYyMkU5NUEzMEQ4RDQxMTJBNjc0NUJERkE4QTA3Qzk0Cis6MTA0NkMwMDBBREUzNzIwNkI2MjgyOUE0NzkyRTY3QTQ3QzA2RTZEMzRBCis6MTA0NkQwMDBEOTlGODQzNEExRENCOTk0MjQ4OTUyRkE2Q0EwN0Q5M0NCCis6MTA0NkUwMDAyMkY4OUUwQzg3RTcxMjkyMEZCQUVBNDIwNDI3NjlBM0M4Cis6MTA0NkYwMDA2QkZCRkFFMTcyMTJBNjRDNEY3QTA0OUU1N0ZGQTg4NjE0Cis6MTA0NzAwMDBFOTc4NzI4OEU1OUY2QkZBQTNEQTQyODU3MDgzOUJFNUFFCis6MTA0NzEwMDBGNzBBRTUzNUVBNUM3REZCODNEOEJGNTY5RkU2OTNCNTgzCis6MTA0NzIwMDA5Mzc0RkQ0MUZGMTU3QTc4NkMzNTUwNUZFQkVGOERBNkUxCis6MTA0NzMwMDBBMjFBOTU4RUJGOUVFN0E1RTYzQzk2M0ZDQkZENzcwQjcwCis6MTA0NzQwMDA3RDQxQ0FGNDY0QURBOTlGNkU4MUUzNDlGRDhGNzBEOEE1Cis6MTA0NzUwMDA5NzFBRTczRUUxQkRCMDZBMjhGRjQzMThGMEE0OTVGRjIxCis6MTA0NzYwMDBBMEU5M0Y1NDk1RDZGRjg4NDRCNjA4OTQwRTMzRTY0NTM5Cis6MTA0NzcwMDA4QjA4QTVCQkI3MkU0OUMwOTREQTYwQzI3NzZBN0UyRjNBCis6MTA0NzgwMDBFMUZDN0MxNTJDRkY2MEQzMjc2MUMwQjc1NkZFOENFMDlFCis6MTA0NzkwMDA2RjAyN0MwM0RGRjhDNjEyMTI0NDIxMjE2NEYzQ0ZCQjAxCis6MTA0N0EwMDBBRjdGMDFGRTVEOUU0RkM4MUMzQThFRDI0QjE0REE4NzU0Cis6MTA0N0IwMDA2RDUyNEM4MDdENDc3MDg5NzhENDIwMEY5Q0VGMjg3QzA3Cis6MTA0N0MwMDA0RjA4MzQ5RDMxMzdGQTM1NTgwQTJERTA1M0Y1RjA2OTFBCis6MTA0N0QwMDBFMzhGMDZBRjA2NDc3QUZFNjRFMzlCRjlBODc2NDFGNUJFCis6MTA0N0UwMDA4QjczQTk3Qzc5MEYzQjQyNEUwNUU2MjEwQkEwQzdGM0UyCis6MTA0N0YwMDAwMTI4QUFEN0YyNEVFRDQ3M0ExMUIxMkYwODc2QjRCOTg1Cis6MTA0ODAwMDBERkZDNzk0NTI0QTE5QkU3Njc0RENGMkQ5MDY3Nzg3QjJFCis6MTA0ODEwMDA0NTRGNTc5QTdGNEQ4RkM3MjdBMERFQUM5MTdDQTdDRDFGCis6MTA0ODIwMDBDRjBERjMyMzYwMDdEM0Y5NTVFOUU3Rjc1NDAzQ0MyRkY1Cis6MTA0ODMwMDAxRERFQ0NGMzVCRUZFRTZEODg1OEU4REY4QjZEN0NCRjNGCis6MTA0ODQwMDA3QjcxRjU5N0EwN0YzQTFFMDFGREU1NTYwNjUxRkZDQTIwCis6MTA0ODUwMDAzMDFFREQ2QUU2OUVEQURGMDA1QkRCNzRFM0M5NzNFOUQ0Cis6MTA0ODYwMDA3OEU1NjcwRjlGQTNGMUIxOEZFQTJGODVENkIzODUzMjI0Cis6MTA0ODcwMDBGM0IxNTk5RUI1Nzk3QjYxREUwMkYwMTFEQjBGOThFNzQ5Cis6MTA0ODgwMDA0RDA4RTUyM0ZGRkZCRkYzRkU1ODY0RjRCQzg1RjZBRjg3Cis6MTA0ODkwMDBCMjc5MzFGOUY4MDdDREVCRTMxNzBBNTA1RTAxMUUzQjAwCis6MTA0OEEwMDBFM0U3QTAxNTdGQkQyQjI4ODY3REFFOTlBRkQzQ0RFQjc2Cis6MTA0OEIwMDAxRkM1QTcyM0U3OTUxOUNGNjc1QjBGNjVBQjVGOUI1RkFDCis6MTA0OEMwMDBGMzIwMUU3QkFFNjFGQjg0OUU0M0YzRDFFRkQwRjNDMjk1Cis6MTA0OEQwMDBBNUUzMDA4RTlDRjhGOTI0NENFRERGMjlEMDNGRURBRjI1Cis6MTA0OEUwMDA0N0IzMkYzNjU3OEREMjNGQjMyRkVFNkIyNDdEQUQ5MzU4Cis6MTA0OEYwMDAwOTc5M0E2NzAwRjdDMzE0NEU2Q0JGOTVEQTlGMDlBQThECis6MTA0OTAwMDBFMEFBNUVCQUM1QkQ5NDhFQjdGNUJBOEQ2RUYwMkJGNUYwCis6MTA0OTEwMDA3MDdCQjFFQUE1ODczNzJDQTBGODFDNzc2RDdFQTU5RDJBCis6MTA0OTIwMDBCMjQyOEY1QkZCQkVFN0Y5MjlGNEZCRTY2QkY4NzdFRTRBCis6MTA0OTMwMDBCRkEyREY1RjgyRkE0MTVFM0YxRDVDODVEMjQwMzQ4MkI4Cis6MTA0OTQwMDBGMjQyRTFEMkUxNUYyQjdGQ0FDNkVDRDIyN0MxQ0UzQTU4Cis6MTA0OTUwMDAxN0Y2MzNDQ0NFMkFGNEY0MkUwNUZBRTY2Qzk1OTQwN0JDCis6MTA0OTYwMDA4NTkxRkRGRTZGQUU0RkVGMDMzQjhEQ0U3N0NCQjVFRDVFCis6MTA0OTcwMDA0NTYwNTdFRERCMzE3QkJGMEZFMEJBODZBMDNFM0YzNzg1Cis6MTA0OTgwMDBCMUFCREZBMUMwRjhBQTAwNzg3RUQyNDEzNDNCMEJENzhGCis6MTA0OTkwMDBGOUEyNkIzNEJBRDYwQjk3NEVDMjc2RENDRTYyRjlFRjMxCis6MTA0OUEwMDAwRkFGQUI1RjQ3QkJBNTM4Q0FGMkNGMzQ3RkI3QTY0NTgwCis6MTA0OUIwMDBENDk1QUJERkFFMDkxN0E3Q0E1RjZDQkVCMTA2RDZEREQyCis6MTA0OUMwMDAxOUFFRTg5QjczMjlFOTY2NTBCREQ3NDJFMTk4MjEyQUM4Cis6MTA0OUQwMDBGNjE4RjBDQkU2ODBBNUJEQjhGQjc5NTc0MzgyRTI3N0E1Cis6MTA0OUUwMDBGNzhFMjkxM0FGQjU1ODQ3MjgxNTkxQ0U1QTdFRTYyMTg4Cis6MTA0OUYwMDBBMzlDM0QwOUY4NzMwMjFFOTlERERBNEREMTBCRjU4M0I2Cis6MTA0QTAwMDA1MUE1MDVGMDM5RjMxMDA5QzE3RTM0OURCRTRCNDdDNzRGCis6MTA0QTEwMDBFMDM2QTNCRTlCMjExQUU3NzVCNkU2RjMxMTkxRDk3RTY1Cis6MTA0QTIwMDA5QkY3NEZEN0Y1OTc2RDZDM0U3NjkwQTM5OTIyOTNGRjM1Cis6MTA0QTMwMDA0RjNCOUYyNEUwODlEOTExQkZCMUVBRkZFRjM1REYxOTYxCis6MTA0QTQwMDAzRTNBNEVFMEIzMUYyNzY4MUEyNzVEQkY2NjdEQTVENkE0Cis6MTA0QTUwMDAxMjQxMDQ3RjdDMTEwOTAxM0M3OUYzNjIwNEZDRjg3NjcxCis6MTA0QTYwMDBERkUxQTA0QUVEM0Q1MTFFQzBENDExMTgwQ0FBNTRFRjRECis6MTA0QTcwMDA0QTQxQTUxMDUyNjc3MUE4MTBCRUQzRkQxMTk3OEY4RUMxCis6MTA0QTgwMDAyNkQ0QUJDM0Y5Q0UyNkQwQTNFQjIxOEZGMkI3MTZDQjM5Cis6MTA0QTkwMDAzNzBFRTdENzYxRkVFRTA5NEMzRUNGQjFERkQzMEY3QTc4Cis6MTA0QUEwMDBCODBDOTQwRDg1NkI1REZGMUIwREUwMDcyODM4RTAwQkZCCis6MTA0QUIwMDA4MUE5NTFFMDBCMTFEMEMzNUE3OTRGRkY3QjQxMTdEODIwCis6MTA0QUMwMDA3MTA3N0NDNDRERjkzRDVGMEUxMzdERkJGNUZEN0YwRDM1Cis6MTA0QUQwMDBDQUI0RENDN0NCN0Q4MTg4QTE3QzYzRkZENEMyMjA0NUVBCis6MTA0QUUwMDA5MTg3OTc3QjgyNTEyQ0JGQkI3RjRFQTEwMjc2Q0MwMTcwCis6MTA0QUYwMDA5RjBDREZCREM1MzExQ0Y3RDI1RkFDQjRBMTNGNzZCMUNFCis6MTA0QjAwMDAyREUxRDRFOUFCRjhFMjE5QThERjk3MDhEMUE5NzY0QURDCis6MTA0QjEwMDA4RjlBNUY3NEJCQzA3RTg4MUZBODE4MDdERkQxRTY0MTVCCis6MTA0QjIwMDA3RjkyRjg3RjYxM0YwQUQ5RDM2ODA3RjlFNEEzRTc3MzVFCis6MTA0QjMwMDA3QUQ5NTNGNEU4ODZGMzBBRjQwM0IzNzM4QTM4M0ZBN0FCCis6MTA0QjQwMDA1MDZCOTM0OTE4NUZDRDYxNzRBMjFDOURGMjNGNjNGQkNCCis6MTA0QjUwMDA0MzI5N0YzNUU2MEYxQkYyN0UzOTExODY3REI0MThBMEZDCis6MTA0QjYwMDBGQTgxQjZGNzg2RDUzMEQwNUQyQTY2NzlCQjJGOTQwNERBCis6MTA0QjcwMDBGREIxRjkxQjI0MDQ2MDhCMTQ5RjUwN0ZGRDFDOUE1N0Q0Cis6MTA0QjgwMDA4MEZFMTE2Q0RGMzk4QkU1QTU2MDU0ODU3Q0JDOTJFNTE1Cis6MTA0QjkwMDA5REM1QjEyNEU0RDc0RTY1RjlDRDFBOURDOUEzNDYzRTAzCis6MTA0QkEwMDAyMDdGNDJCQTc3MEVFN0REQ0Q1MDFFRDdGODg2Nzg5QjdFCis6MTA0QkIwMDBBMTdDRUQ0NTRDQ0YxNjg5MzVGQjAwRkY5QkZCM0IwQkUxCis6MTA0QkMwMDA5N0QzRkU3MzgxMUY2OEZGQjk0QjQyNDgyRjhEMkVGNzk0Cis6MTA0QkQwMDAyOTM2NUM2RjM1QkFEQ0E3Q0NDMDczODJDQTVDOEEwOUZGCis6MTA0QkUwMDA5QzkwODJGNEE4M0NFNzY2OUIwQ0U3MURFN0RCMTIzQjM4Cis6MTA0QkYwMDAwNTM4OUZFQTc2MEZEMDdBOUJDQjY3NjA3OTg5NjhFN0EyCis6MTA0QzAwMDBGRTAxRTYwRkRGQzlGRDAxNjVENEJBMDBCQjYzMjc1RjczCis6MTA0QzEwMDBBRkY3REQzMzI1MTdEQUVEREJGQUJGOTBERTE3REJGM0Y0Cis6MTA0QzIwMDBCMEREREE3Mjc2N0VGMzJDNURBN0MxNEZGNzRDQTMwQjkzCis6MTA0QzMwMDBEMzFGRDFGRUEyNTQ1RjNGRDFFOEMyRjQwNzhEMzJBNjQ0Cis6MTA0QzQwMDA4RjUyM0QwRTY5MzcyRDRGODJERjgxOTYyNzY5QkU2RkU3Cis6MTA0QzUwMDBDMDU2MDdGMjdGNEYyMzM1Q0Q2OEZCQkIxQjVEMUY4QjEyCis6MTA0QzYwMDA5M0MxNUYyMTYzN0U3RDYzMTBGM0RGQjZENUFGQjEzM0FGCis6MTA0QzcwMDA3RjhBQjc4MkNFRUJFOTk3MjdBMTdGMkZGNDg2MkQ5MjBBCis6MTA0QzgwMDA4MDc5Q0JBNDYwNzE1NUVBQkI4NjlGNkZEQjZBRUYwNDI1Cis6MTA0QzkwMDA3RUZERTE4MDg4RTMxMDcxQTBFQjdDRUI3QUNENTA2RjU0Cis6MTA0Q0EwMDBGQTFCMjJFQjJGMzBCMEYxQjI4MDY1QkQwRUE4RjdGOEU5Cis6MTA0Q0IwMDAxMTA2Mzc3MTI1M0Q2OUZBRUIwNjc4MkJERUU2RjAwNTIzCis6MTA0Q0MwMDA5M0Y5NjlGQURCMDBGNTFFM0JDMkUxRjMyNUJBQ0VCM0Q2Cis6MTA0Q0QwMDBBRTc3MkY4QzdCREVEQjFDQkVFMkM0QzY0NUQ2RTM3RUZFCis6MTA0Q0UwMDAxRkZBNzNFNTMzN0JFNTczRTBDRkE4QzI3NTYwODdBMDM4Cis6MTA0Q0YwMDA5M0U3NEQ0QjU1QzE0NkU5RUMyQTE4ODg0MUJENjk1NUVCCis6MTA0RDAwMDAzMUExOEM4RTFGQjgzQTI2RDhBNjMxM0JDMzQ2RjM2RTJDCis6MTA0RDEwMDBFODg3QTZFNzk3RDM3MjVBNkYxMzk0RkI3NUU1RDA5RTg4Cis6MTA0RDIwMDBBNjUzMkI1ODc5RTA5QkM2RjI2MUJEREQ0MDM0M0IzNTdDCis6MTA0RDMwMDAwOUNFRDZFMDU3OENGOTI5MzZBNjFGOUZCM0ZGQjYwNkQ5Cis6MTA0RDQwMDBGODdEOEFDNENBRkYxQkYyNjA3NzJEMzZENUY3QjBGQzE4Cis6MTA0RDUwMDA2RkI1RkEzOUFDQkQ0RDY0Nzk1NzNFOUI3N0NFNTY1NzQ3Cis6MTA0RDYwMDAwMkVDQUUwREYzREI4M0NCN0NBOUY5RTYyRDg4OTc0M0VCCis6MTA0RDcwMDA1RTlCREY4NjA1NUI4M0NCNzRGM0M5RkJDMkI2RjI2NTJECis6MTA0RDgwMDAxNUU5RDcxNUI3NjIyMzYxRERCQTNCQTVCNzgyODQwQjVECis6MTA0RDkwMDBGRUY5RjVDQjU3NzVFQjA2QUMyQkUzRjhCQTMwQUU5QUJCCis6MTA0REEwMDBBRDJCMTQ2RjJBQjM1NzE5REVENjVGNjRDNDVCRUVDNTEyCis6MTA0REIwMDA0NkJDQURCRkQ4ODhCN0RDNEIzMkUzRUQ5NzdDRkM3NEMyCis6MTA0REMwMDBGOEEzRTM4N0Y1RTM2RjVDNjgxQzNGN0Y5MTcxRkM4RDZFCis6MTA0REQwMDA4QjhDRTNFNzVGRjZBOUM3NEZFQUY5QTZCN0M2MzhCRUUyCis6MTA0REUwMDA1QzZCMUNCRkI3RDYzOEJFN0NFOUE3MUI1RkEzNEY2N0JGCis6MTA0REYwMDBGRjE2RTNCQTVFMTUyMTdBRkFDNUZCM0I4Mzg2NzUzRDQzCis6MTA0RTAwMDBDNEQ2NzVBRDdDNkRGRjRGODNCMEJFQkI2MTdEMDdGRjFGCis6MTA0RTEwMDA0QzM5NUJERjJCREZGRDI4MDg3RUZCRjUxNzFEMENDMjJDCis6MTA0RTIwMDAzRTYzM0RBRDdCQjgyMkI1NkVFQ0JCRTg1NkRCNjNCNEE4Cis6MTA0RTMwMDBERkVGNEM2NUVCNENGRjQ1Q0ZCODQwRkZBRjJENjdFQjg0Cis6MTA0RTQwMDA0QzlDOUZFNzc2MzUyNjhGQUY3NEE0RTZFNThGQkI3MTQ3Cis6MTA0RTUwMDBCRkE3RTU4N0VEMjVGMkJCMUFFMEMzNzhCOThEREI0QjIwCis6MTA0RTYwMDA4NUNENjE2QThCQkFBNjhBODY3QzY3MDUyQkJGQkRCNUU2Cis6MTA0RTcwMDBCMDU5MDU1RjhBQTgxNkMyM0FFNDJEMjc3RkFFQjBEODk0Cis6MTA0RTgwMDA2RjY5RTM2QkYwQTQxRjlGRUQ4QjUzRTM0RjM0OEQzRkFECis6MTA0RTkwMDBEMTMwQkU5Njc3NEY2M0U1QUEzOEE5MTZFMEQ5Q0NGNzkyCis6MTA0RUEwMDBDREI3ODhCRjQzRkQ3MkY2RTA5QkQ2MUM5RUE0ODc4RkNBCis6MTA0RUIwMDBFNTUzRjBCMUJDMDZERjVERTJGNDVBNzVEMkRGMTNCRUY0Cis6MTA0RUMwMDAwQjRDRjhCQkMwODRCRjBCMENGODVCMjM1NjlGMTFGRTQ0Cis6MTA0RUQwMDBDQ0Y1QkE0REZDNzkwMzA5REYyNjhFMDEzOTIyNjg2RkMzCis6MTA0RUUwMDBDNjQ0OTk5RjA3QjFGRUFBNDQyRTVGMzAzRUM0RUQyQzA0Cis6MTA0RUYwMDA5NTEyOTM0QjU5NzkzRDVERDc5Njg4N0MxRkM2RUJEN0E5Cis6MTA0RjAwMDA5OUYyOUFGRDBBQ0JEMTY5RjRDMzU4REJBRjEyNjE3QUVBCis6MTA0RjEwMDA5QkRBMURBMTlEQThENzQzMjg0RkE5N0QwN0YzNjM4ODdECis6MTA0RjIwMDA2MjI0MUNCMUQwMDdGNzhBRUM3QzU4OTA0MzBEMDBBNzhGCis6MTA0RjMwMDBFODkzRDA4RjlBQUU3RUFGMjg3MEZCNUEzNTlDRUZFNDkxCis6MTA0RjQwMDA5MkMxQTQxREUwMDgxMjhDNEYyMjI3QkZBQzVDM0U2REJECis6MTA0RjUwMDAyNDFDOTIxODg5QzIzODc2NTkyMjBGRDI3MTVBRjNBRUE2Cis6MTA0RjYwMDA1MEY0NzE0QzhGNkFGMDA0QzMwODhGMjQzMzc4MjQzMUQ1Cis6MTA0RjcwMDAxNEI2RjIwMzNGMjgzMkJGODVENjBGODU5MEI3MUYyNEExCis6MTA0RjgwMDA2MDI3NkFGMEI1QjkyMzBENEJDMTlFQ0Y5MzEwNEZBRDhBCis6MTA0RjkwMDA3RUUzNzlGOTZGRjhCQzVFRTQ2OTZCOUE3MzNGMDJEMUU2Cis6MTA0RkEwMDAxODEwQkYzNEI2MUFFREQwOTZFQTVBMTdGMEE1NDI0MjRGCis6MTA0RkIwMDAyRUYwRDdCN0ZBQUNFMzg5QjRENDZDNzdDNkE5NUQwQUYyCis6MTA0RkMwMDBGOTc2NkE5NzQyREFFQTdCQjIwRUQ2OURFM0MwQzcxNjNECis6MTA0RkQwMDBFN0RBQzM3QTJFNjQyMzQ5RERGRUQzNUJFRTIxNDk4M0YxCis6MTA0RkUwMDBGRjM0ODE3MEJBOTU3Q0MzNzc2N0IwQzhEMENFMzE1Njk0Cis6MTA0RkYwMDA0NDdCQkVENTY3NEI0MEE4RDE2OEYwQjc3M0Y4QjU3QTRCCis6MTA1MDAwMDAxRDYyQ0MyNTY3QjE1Rjc2MDY4REYwOUUzREZDQjFGNjQyCis6MTA1MDEwMDA1RTQ3OUY2QzA1RDc2Nzg1Mzc4REFGQ0NGRDRCMDU1MjNBCis6MTA1MDIwMDAwQ0VENjIzMTEyRDRGM0JGRERDMUY4NTQyQTcwQzU5ODdCCis6MTA1MDMwMDBCRDlFQUVEQ0MzREFGQjY4MzlEOEM1QkU4ODAyRTcyRjU3Cis6MTA1MDQwMDA1NEU0MzE0RUNDMDU3MkEwQzNDRjc4REVBRUQ1QzFDRkNCCis6MTA1MDUwMDBBMzQ5MENGREI1ODIxMjZCMDAzRTcyMTU0Qjc4M0U2MDgxCis6MTA1MDYwMDA2RUE3QTUxRURFQkVFMzkzRUZCQzhFRjIzMUM2ODVGMkJECis6MTA1MDcwMDAyMTI4NTQ3RTJDQzY3OTVDMEM4Rjc1RDA3NEIzMTgxRTExCis6MTA1MDgwMDAwN0E5RTM5NDNENkEyNTI3NjMxQzRDOEU1RDkxODhFMjU1Cis6MTA1MDkwMDA2MkExMjY5NkYwQ0ZFNEZERjY2QUYwQUIzMTNDRjdDQTg4Cis6MTA1MEEwMDAxNkZFQjIyQ0UxOUY5OTgyN0ZCQTYzMTZDMkZGMzk0ODdGCis6MTA1MEIwMDBEM0MxM0Y4REMzNTM0MDQyRkRCMDZGMDcwNjg1N0UwOUMzCis6MTA1MEMwMDBCOTVDRDE5RkNCRjVGMDdFMEIzODdDODREQzg0NzREMzQzCis6MTA1MEQwMDBDQTNCMzkxRUIyOURDRkRDMkNFN0QzOTM5QTRGMUQ5RjVDCis6MTA1MEUwMDBDRkMyNENGM0Y5MDI5RjRGOEY4M0FENTdBRUJBODgxMkVGCis6MTA1MEYwMDBBNDdDOTU5Rjg2MkVDQjc5RkY1Qjg3RTk3MkQzMTlGMTRCCis6MTA1MTAwMDBENTU3QjM5Q0M3RjJENDNDOTY3MkJFNUE5NjY5MUU1MUNECis6MTA1MTEwMDAwRTRGQUY5RENDMzkwMkYxMzMxM0Y5N0E0M0VBMEQ3NDg3Cis6MTA1MTIwMDBEOUFFRjE5NTkzQUQxQjg0REM2Q0EwQ0IzREJDOUY2Q0RDCis6MTA1MTMwMDBFN0IzM0FDQkY5NkM0RkNERTc3QjlDMkU3NzY0OUE4RjFGCis6MTA1MTQwMDBBRTdFMTNBRkRGQ0NFNTBBRUQ5NkVEOEVCRENENjA3RjcwCis6MTA1MTUwMDAzQzJFNDZEQTFEQjM1MkUzRDE3QTFERkE3QUUzREJCQTZDCis6MTA1MTYwMDBCNDdBNkJFMUJCQjA3OEI4NUUzNzFGOUZEQjQ1MEZFMUM3Cis6MTA1MTcwMDA3RUFDMEQ2QzBDNkFERjdDQjFFREM1NUFCMEM3NjlCQjYzCis6MTA1MTgwMDA4REQ4N0Y4NEFEOUJCNERERERGQUZFNjdCNkREREJDQzY4Cis6MTA1MTkwMDBFQkREMDdGNTlBMkUzREE1RjVCRjU5REZGRjc2NDc1MkE3Cis6MTA1MUEwMDA4MzYzMUJDMjUxMzdEQ0RGRkRGQTdBQ0IxRDdEQ0RFQzZBCis6MTA1MUIwMDA5Q0IwNTgzRUVBRDVEOTM1QzFFQ0NFN0QxQzgxNjg3Q0M3Cis6MTA1MUMwMDAwMEZDOTVDNERGMEI3NjQ3QkIxOERCM0UwMEZDNDA4RDJFCis6MTA1MUQwMDBCQzlERjRGQjZEQ0VCMDIwRDBGNTUzMEVDNzFFODE3QTc2Cis6MTA1MUUwMDBGOUFBNTNCNjAzREQ2QTYzM0Y4MkJDNkEyMzExODg4QjM4Cis6MTA1MUYwMDBCQ0NGN0JENzc2QzhBRjExNURCMjMzMDRGNjk2ODI0NzM5Cis6MTA1MjAwMDA0MzNEMDExMUUzNzlEQTg0QTgwQUVCRTIwOTMxRkFBQ0YzCis6MTA1MjEwMDAwM0VEMUVEQTI1MURFN0I2MDIyNUQxMjU4MEZGOTYwODhECis6MTA1MjIwMDBDQ0VFNjA3MDZERjA1RTFEMDczODlDMTQyRTg4MEY2RUZBCis6MTA1MjMwMDAzM0MxNDVDN0MzN0Q3OUU3MTgxNjZGNDM0NDUyMkU0MkU4Cis6MTA1MjQwMDA3Rjc2NEYwOEZBRUIxRjczMkJDMjFCNkY3MkNBRDAzRURBCis6MTA1MjUwMDAzRUY5NTY4NDk3OTY0NTMwM0VDRjExNDM3ODNCMUMyRTNECis6MTA1MjYwMDAxOUUyRjFFRUYzQUVEQTBDRjE3NjZCRDQ1Q0FDOEY3MDMwCis6MTA1MjcwMDBDMEZDMjc5NjIxRkM2RTEyNEIyRTJEMDVGNUQ1MUJCNkQyCis6MTA1MjgwMDAwMTNDOEIyNThDNEI4RTA3MzZFMkZFQjY2QjMxNURFNDFDCis6MTA1MjkwMDBFOEI4NURFNTFCNTU2ODc3N0NCMTA3RTNFQkRDQkU1RUUzCis6MTA1MkEwMDAwMkYxNTYwNTk3NDkwNEUyODBEQzgxNUVCNDMzRjMxN0JFCis6MTA1MkIwMDA3OTU4QkU5OEUwMzhGOTlGNjdGMUIyMEUzMjIwOTdEMTQ1Cis6MTA1MkMwMDBCNDIwQ0VFMjhFQkJDQUVCRDVBNTYwQzc1NEIzNzg1NEU4Cis6MTA1MkQwMDBBMjg2NUY4NkY4QjYzQ0MyRkZFQ0M1RkREMEJGNjNCQ0JBCis6MTA1MkUwMDA5REQ4NDMyOUZBMTZGNDBFQjdDRjhENUFDOENCNzBCRDlFCis6MTA1MkYwMDA0NDk2RjU5MkQ5RDVDQjhGOEJEOUQ1RUJDREIyNUUyMjIyCis6MTA1MzAwMDBDQjdBNDk1NkNGNDkyRUNGQjU4QUY3MThFNkZCNzkxMkVBCis6MTA1MzEwMDBEQTFGNUE3QzVCMEVCNUZDODdFRDkzNTI2NkI3RUJFRDU2Cis6MTA1MzIwMDAxNTA3OTE1MkY2MEFGMDk5N0Q0OTQ2MzhENkJDRDUxNDM2Cis6MTA1MzMwMDAzOEEwQjM2RjAyOTIzRjgwRkI4RDBCQzgwNTI4OTdBMzVFCis6MTA1MzQwMDBCNDNGRDFBODA2MEUzODQ2OUYyRjQ4NTg1MkU3MjcxRjcyCis6MTA1MzUwMDBBREZFNUFCMEY3OUNFOUNCQkREM0FGMDhBMjNFOUJGNjk5Cis6MTA1MzYwMDAzNTlFMkU2MTY5MjVGRDVFMDE2OTAzQ0Y3RjhERTc5NzJDCis6MTA1MzcwMDAzNDg0MkRDNkFCOTE5ODFFMkUyNzkxOEM3NDcwNzNGOENGCis6MTA1MzgwMDA4RkMyOTkzRjZENTIyRUQyRkExNkU3RTM1QUVBQUJCMEJDCis6MTA1MzkwMDA5OUVDNDZBM0JFNzM4OTZBMkQ5RTczOTRCM0Y4NDEyNzk2Cis6MTA1M0EwMDAwODIzQzg0RDg4QTA3RTcxOTBBNDVDODZFNzhCRTE5Q0ExCis6MTA1M0IwMDBBNTYzNTNGMkUzMDg4RTQ1RjlGOTNGODU3NjIyNTQyMzFECis6MTA1M0MwMDA3RDQyODA0NzMzOUY5OEY5QzI2N0UyOEI0RkNCMjc1N0M2Cis6MTA1M0QwMDA5RDI1M0VGMUM2RUQ1OUM5OEZCNzM3Q0I3QTg5MkNFQkE1Cis6MTA1M0UwMDAyNUIzQUJFNzhCMEJEOUQ1RUJDREIyNUUyMkNCN0E0OTk3Cis6MTA1M0YwMDA1NjZGRURCRjQ4RENERjdBNTkwQkY4NjFCQzVGNzQxOTVBCis6MTA1NDAwMDBGMjZCQkZFODMxOTY3RkM5NjdDODc3MkYzNEI2RjcyREE2Cis6MTA1NDEwMDAzMkI2RUY1RTY0NkNFRkJCOENCNTdGQUFGREFCOTc4MkIyCis6MTA1NDIwMDA5RjI3NUIzOUY5RERERjI4MjdFNUFFQ0NGNUYzMTc4RjMxCis6MTA1NDMwMDAyMjU3MkUxNUY3OTM2RTUxMjFDOTAwQUM1Rjc0OUQxMjRGCis6MTA1NDQwMDAzMDBEMjcyQ0VDQkJFN0I5RkNCRkUwNjA3RTlDQjhBODEwCis6MTA1NDUwMDBFMkJFRjY5RjdEOUUzRjkwOThERjQ4OUJFRjY4RjA2QTIyCis6MTA1NDYwMDBGQUY3Rjc3NjZFNkY5OUVEQUY2MUJGQ0VDOUQzQTc2NzM0Cis6MTA1NDcwMDA4MzFFMjExMDJDNEQ2NDg1NEU4REVBMUIwRkYxODQyMDc0Cis6MTA1NDgwMDA1NEM0NTM5RUMwRjM2OTczRkY1RDcwNUVDN0ZDMkVDMUE4Cis6MTA1NDkwMDA3QTFEMUNDRjNCOTk1RkU1RTdBNUVENDEzQ0FGOURCQTc2Cis6MTA1NEEwMDAyQjA4RkJGNEFFMDk4MkE1OUZFNTk0QzRDRTA1Q0JBMkUwCis6MTA1NEIwMDA1RUI0MzMzQTE0MTdFQUMzQUUwOUVDMUU1Mzk3MjM4MTQ2Cis6MTA1NEMwMDBGRUUzQUU1MjYzN0IxN0I3MUY0RTQ5NkNCQ0FFM0I2MzI1Cis6MTA1NEQwMDAwNEVDRkZCNkE5QkIxQTYwNUM2N0YyNUY4OTQyRTFGRThCCis6MTA1NEUwMDBFRTg0MThDNjhGQjYzQkQ5M0VDMDE5NTYwOUFDMEIyRUI4Cis6MTA1NEYwMDA0NUM1RjM3NzMzM0M3MTJENkU4ODI0ODJGNUJBNzlENzkwCis6MTA1NTAwMDAzQjE5REZGQzlDQ0UyNzlCNzlCRDJCNDk1ODVGMEUzMzlFCis6MTA1NTEwMDBGQ0E1QzNEN0RFMzNDNEQ3QjU0RUQ2QUYxMjc0MjNCRUI1Cis6MTA1NTIwMDA4RTU3MTM1QzRGODA5MEY2RDkwNDhGQzZEOURGMjBEMUY3Cis6MTA1NTMwMDBGMzg3NzkzRDA2MEEzMzdFM0I4RDc5NDVCQzJBMjMzRkFDCis6MTA1NTQwMDA5OUZEMzBDQUI2QUY2NUU0RTcwRUJFOUUzQkM5RDdCMTQwCis6MTA1NTUwMDA1RkE3MTIwQjgzQkVGMzU2MjRDODMyQzQyRjA5OTNCMTQwCis6MTA1NTYwMDA5Q0VGMTRGOEJGNTZENTQ2RTU5NzcyNDE2ODJCNjU3NUQ4Cis6MTA1NTcwMDBFRjk4Q0U1MEQyMjI3RTY5OThGRTE1OTI1MTVFQ0U3MDgxCis6MTA1NTgwMDAzRDlCRTlBNEVCOTkzN0I1OUUxRDI3RERFODg0RURCNjc4Cis6MTA1NTkwMDA5MUVCQUNGMEFFQUQ2NzRBRTBBQThDRjNFRTZBNjQ3RUE0Cis6MTA1NUEwMDAyQjQyRUUyMDdEMzA5RjU3RUM0ODFGNUIzOTUxMzc1MDFFCis6MTA1NUIwMDA3QTM5MkI0NDNDRTc3MDRFNEExMEEwQjNBQjlDMjREREYzCis6MTA1NUMwMDAzOUU5RTdGNTFBRTczQjI1OTg3OURDMUU4RUVGNkU0RTM4Cis6MTA1NUQwMDBBNzc0RjVCQUY5QjlFNzZCMUQwRkI1QzBGRTJENkYxRUE0Cis6MTA1NUUwMDA5MzgzNjFCRTE3MTMwNkZFMUM5Mjk4NUZBM0NCQUQzNDY0Cis6MTA1NUYwMDA2MTNDNEIyOUYzOEY4Qzk4Mzc4N0QzMkM1N0YxMzRGN0M0Cis6MTA1NjAwMDA2OTM0QjlGREFCQTQzMDNERTQ0QUEwREY0MTkzMkY0NTk2Cis6MTA1NjEwMDBGOTU3RDQ3MzVEMTM5QTVEQzBENDcxRTU0MUY0MTMxRjNCCis6MTA1NjIwMDAyRjk3MDhEQzgzMzFFQjAzMkRENUVDQzg0QjQ4QjcwQjIzCis6MTA1NjMwMDBFRTJCQUQ3REM1MUVFQUIyODBENzBENDREMEY5RjVDQzc2Cis6MTA1NjQwMDBGQTdBMzQ3RDcyREZBN0Q0MjczRkQxRTQ3RUE0M0U0MUFECis6MTA1NjUwMDBGQTVDREJEMUJBMUZFOEQzRTU2NkZFRUJGQzNBOTUyQzg5Cis6MTA1NjYwMDBENUNEQjc5QjhGQkZDNEM5RDc4NTYyMDY0Nzk3NDNBRUQ4Cis6MTA1NjcwMDBEMUQzMjk4RjdFQUZEMUVCQ0QzNEY0NDk0N0Y3MkIyMTFECis6MTA1NjgwMDAxODcwNTYwQTBFRjNGQzc2Mzk1OUJEN0MxOEJGNjI3NDQ3Cis6MTA1NjkwMDAzQzhDQTQwM0MzNDM4QkQzOUEwRjNFQUJGOTM0M0JCMzhBCis6MTA1NkEwMDBFM0UzNkRCQ0RFMzY4RTU3NkQ1RUEzQzk4OUQ2N0YxRkRFCis6MTA1NkIwMDBDNzU3REUzQzkzREUxNzU1MDNGREVEMUFERUVBNENGNUM1Cis6MTA1NkMwMDA1Q0M2N0ExQTdFNDQyN0IzNTdCNDc1NjJCNEZFREY5NjdGCis6MTA1NkQwMDAxODdGOThGQjRGMjc4N0JGMTk5NjQzMTVGREIyREEzODFDCis6MTA1NkUwMDA0RUYyMUNGQTBGOEU1M0JEREM1NTQ5RjdBM0JFNDE4QzE4Cis6MTA1NkYwMDAyRkEwN0I3RDhDNkY4MkY4MkZCRERFMzVFQjJGNERGRjA5Cis6MTA1NzAwMDBBN0QzNDdFNjdEQ0I2OEY1QTU4MDk0RDE0RUQyRUM5QTFECis6MTA1NzEwMDA3QzdFNkZEMkM1RTM4MTM3MEFENkU3M0M0MzVDOEVBODE2Cis6MTA1NzIwMDA2MkNGMkFBRTBGQzI0NDAwMUYyNDQyRjhGREJGNzA3RjMzCis6MTA1NzMwMDAxM0NEOEYwRDQ5NEExN0Y4M0ZDNEY5RkQzQjY4N0VDQzY1Cis6MTA1NzQwMDBDRjlDQTQyQjA0MkU5Nzc5RkRGRDk0REZENjg2NUQxMUE2Cis6MTA1NzUwMDAyODFGRTcyQTFEQkVBN0Q1M0IxQkZDNUFDQ0VFMjJGNjFDCis6MTA1NzYwMDAzQjVFODc3QkMwNjNBRjE0MDlFMEQ1NDlFNjYwOUNGNkQ5Cis6MTA1NzcwMDBGMTM1OTQ3Njk1MjNFMTE5MkIxMjMyM0U5RkE2REMzRjNBCis6MTA1NzgwMDA4MEU3ODdCMEE1RkM4QTExOUY2NEIxMkUwRjdFNjA5N0Q5Cis6MTA1NzkwMDA3MUREQ0I3NkRFNjY3OEQyQjUxQjE1OUVENDNFRjQwODVCCis6MTA1N0EwMDA4Q0VGMjQ5OUQ3QjUzMzlEREZCMDVEOUJFNUJDQjRGQjhFCis6MTA1N0IwMDA2OERBRjdEMjIxM0I1MUUwN0VGQjkwODBFOTM5NDM1RTA1Cis6MTA1N0MwMDA0QzRCODZEQzk4NEUxODJBMjAwQTI1NUFGMTUwMUVBNjBBCis6MTA1N0QwMDBFMzg3QzZFM0Y3QTJBMTQyNEMwQjg3MjY2MjFBMUMyQTc0Cis6MTA1N0UwMDBDNTM0NkZFODdDNENFNUExQTk5ODZFRTA3Mjk4M0IzNDEzCis6MTA1N0YwMDAxM0YzREFGREI3OUNBMTRBQ0NGQjg3M0U4RkE5NkY2OEYzCis6MTA1ODAwMDAwRTJCRTdFN0E5MUJFRThDMTJGMDU3NEJCMDBFNTFGOUE3Cis6MTA1ODEwMDA2ODlCQkYxQ0Q3MjVGM0JDMzZCOEQ4M0FEQ0NFRUYwOTVECis6MTA1ODIwMDBCNzlCRjQ3NjFGMkY3RkNDQzVFNDdFMDM5NzBCMjJDNjZGCis6MTA1ODMwMDA4OERFNkY3RTNGQUZCN0ExMkM4QUY2NzdCQkI2MUUxNjA3Cis6MTA1ODQwMDAyRTM3QUM4N0U2RkFFRDY5RUUyNzNGQTM5NTczNzg0OENCCis6MTA1ODUwMDA3OUZEMjhGNDYxRTdBRkNFNDAxNEVGMEQxMDEyNDVCRDdECis6MTA1ODYwMDA0NEM0QTg0MUVGQjY2QkYwNjc3OThGNzBDM0ZDNjc5MEIyCis6MTA1ODcwMDA4RkRENTQ5MDIxQjREMEZEODU2RDBEMEY4M0RFNTk3MEZFCis6MTA1ODgwMDBFQjc1MDdBOERDN0RFODhDREVFNjgyNzFCRkIwMDI5OTdCCis6MTA1ODkwMDBFRUZCQUI2RTBGODJERjc3QzNGQzdCRjE3RTEzOThERkVDCis6MTA1OEEwMDAxMEQ3RENCMUUwOEVEOEMzQzg3NTUxQjRCMzY5QkJCQkE3Cis6MTA1OEIwMDA1Q0JBNzNEMENFRTVCNzM3RUNBMkZEMjlBRDM2QTJFOENECis6MTA1OEMwMDBGOEI1RTQwRTBGNTFGNEZBRUI2NDQxMjFCNDJGQkUyNTc0Cis6MTA1OEQwMDBERkYwQkQ2ODY1OTFBMTlENzY0RjIyNzg0RDk5QTE5RTFDCis6MTA1OEUwMDAzQ0VGM0M0M0JEOUNCOTMzOENFREY4MzlCOUFGRUE0MjhCCis6MTA1OEYwMDA0MzNCQTc0RkMzMkIzQjQ3QTRGNDM3QUMxRjFEODIzNTU2Cis6MTA1OTAwMDAxRDYzMkVBNjJGRDNGMUNEMTUyRUI2QUVBNUZBQ0Y0QzIyCis6MTA1OTEwMDBCNzc0RkQ2NzdCMkYyNEM1MUY2OUU3ODFFNzEwQjFGOEQ1Cis6MTA1OTIwMDBFMjc5NjA0RjM5RTUyOERFNTMzOUYzRkE2Nzc3MUVEOUZCCis6MTA1OTMwMDBENjMzRUJBQjFDRDA1NzA1QTA0RjA0NEM3REEwQUYwQTZCCis6MTA1OTQwMDA0MDhGQjgzMUQ1RUE5REU5N0REQjc1QTA2RjdDM0E3RDRCCis6MTA1OTUwMDAzMzhCQ0FCRDA1M0ZGOERDOTlGNUNERjlCQzdDQjI5QjExCis6MTA1OTYwMDBFOTlCNzU5Q0FGQ0M3QzEzRTRGNUQ2ODFCRUE5MTg1RDhDCis6MTA1OTcwMDBERjA0REQ5OUY1NEQyNTFGRUYxRkFENkYzQTY3REMxQjg2Cis6MTA1OTgwMDBGRDE2Q0RCOTJGRDhENkYwMTA0RDNCMkE2RkM1M0NENUFBCis6MTA1OTkwMDAxN0EyOUI5Njc3Q0NCRTIzRjY5MDRFOEY5MDkzRkZDOUFCCis6MTA1OUEwMDBGODkyRjM0MzZFQjU1MTdGNjhGREZCNDMyNjNEQTJDOUQzCis6MTA1OUIwMDBDM0RGMjhEN0E3MzhCRkE2QTNDRjkxNEYyOUQ3QTdDRTNCCis6MTA1OUMwMDA5MjVDOUY3Mjc1Q0Q4M0YzQzU2Q0U1N0E2NEZEQjMzQjQxCis6MTA1OUQwMDA4RjZDRUJBOUI1MjQ3OTA5RUM0QkE2NzgxMjJERTBCRkFBCis6MTA1OUUwMDBCNEY1ODZEOEJEQkMyOEM2RUQ3NDNFRUZFMDdFMUVFNjU5Cis6MTA1OUYwMDBGRjlCRTEwQTJGMDJGRTk5RTE4QTJDNzZEM0Y2Mzc5N0I2Cis6MTA1QTAwMDAyQUUzNjA5REE2RjkyRkMyNzc1RDNFNjJDQUQ3OUJFQTYyCis6MTA1QTEwMDA3RkM1OTRCRkMyNTRCRjQxNUYxRTU3OTQ3MTcwQkUxOEJBCis6MTA1QTIwMDAzRkU0QzBGM0MxQjg2MkFCQjNFMkE3ODU2RUM2MkY4NzZGCis6MTA1QTMwMDA1QzkxMjhGNDc3NkVFMkJDNzE0MDE3OUE1Rjg2RkRCOURECis6MTA1QTQwMDA1OTdGMzQ3RjhEMjlCRjFDQzc0RkU1QUYzMzk1QUYzMEU5Cis6MTA1QTUwMDA5NUFGMzRFNTU3RTlFQjc3OUU5QTc4MUZCRUJGRjE0QkJGCis6MTA1QTYwMDAwN0Q5NjlFMTRGN0E5NUVCODk4RUM5Qjc0NzlCOTk1QzU1Cis6MTA1QTcwMDBERTA2RUQzQkE2REMxMTVCNDY5MDJGMDhDMDZERjc5OTYyCis6MTA1QTgwMDBGNjdGOTRDRkY0RkM3Mjg4RjdGM0YzMDlCN0UyQkVBOTZFCis6MTA1QTkwMDA4M0VFOUYzMDhFMTFGQzc4MTZGOEY5QjU5QkJGQzNBNTM1Cis6MTA1QUEwMDA1QzhGRjcxRkUyODUzN0EzOUZBM0EzQjgxOUUzMTQ4RTc5Cis6MTA1QUIwMDAyQjEyOUVDRkM2NEJBRERCNzczNjMyM0Y1MzQ3QjFGNTQ1Cis6MTA1QUMwMDAzOUMyQUYyMTA4NTc2NzhGOTA0OUNDRkYwNzYyNzBEQTVGCis6MTA1QUQwMDAwNkVGMDkzMUZEREU1NkRBOEVGQTU1NEE1RUNGRkMxQjIxCis6MTA1QUUwMDA4NTUxRjQ2RjNDQzhFOTI3Rjk2MkU4NTc3MDE2QzcyQzU2Cis6MTA1QUYwMDBGN0Y1MURDM0Y4MzBGQTM1Rjc2OUY4RTBGQjQ4MUQzRUFECis6MTA1QjAwMDA1MDBFOUIzQjNGM0MwMEVCNkJEQzZEMkQ2NzNGNzYzM0NCCis6MTA1QjEwMDAzOTczMDRCMzFCN0ZFNEZDRDlGQUIwMUQyRUI1NThFQ0UxCis6MTA1QjIwMDA2QkUzMEUxNjI3QUY0RTYwN0UwMDkxOEVBM0Y3MkI5ODg1Cis6MTA1QjMwMDBDNzFCOUVBNzY5OUZGRDAwQzc1M0RDQ0RFMkVDQjVGRUY1Cis6MTA1QjQwMDBDQ0YwM0NDMkVCM0RFMjY2N0UwNTZENUVBMkNDQzYxOTkwCis6MTA1QjUwMDBBREZGRTdFMEIyMTZGODAxNjRCMzFGQzJBOEU3RUVFMEJDCis6MTA1QjYwMDBGNTFEMDE2M0JENzRGOEI5NzMxODNGMkMxRTRCRTNERkJDCis6MTA1QjcwMDBEMUY4NUQxQkU3MTBDMDg1RkI1OUVCN0RCODcyQjIxQUY2Cis6MTA1QjgwMDBFMzM3OEUxMzdGNkYxN0VDOUI0NUY5NzU4OEUzQjg4RDZCCis6MTA1QjkwMDA2RTkzQzBDRkRGMjJBQUU4NUY1MDE1MjJFRkM0RjM0RjA3Cis6MTA1QkEwMDA3NkZFNzA5QkZEQkMxMEU4M0IxNzhGQUIyMDEwNTcxMUExCis6MTA1QkIwMDBEMEM1MjU4MjlGRjM1QzhDQjM3ODA0Q0FEN0E4NEUxOTUwCis6MTA1QkMwMDBERTM3MTk3MjRGNjQ3MUFCMjdENzYwM0M0NTI3RERBOURBCis6MTA1QkQwMDBDM0I4MjdEQzI1MDk3OENGQ0E5RURCOERGNkJDREQ1RTE1Cis6MTA1QkUwMDAxOUIzOEEzMzE1M0Q4QzZGMkYzOUI5MUVGNTZDQkJDMkMyCis6MTA1QkYwMDBFRUREQjQ4QjUxNTc3RTA1QjhBQTU1OTRENzRFMjU3MzY4Cis6MTA1QzAwMDBGQ0EyMzkwRUQyMjE5QkUzMEY4REY4OUFFNjYxRjQ4RDQ4Cis6MTA1QzEwMDBGM0Y1MzdFRTBFMzVFOEUzOTM4MjFFMzc5NjBGQjk4RDE0Cis6MTA1QzIwMDBGMDc1MDA3QzNFODAyQjg2RjFBNEYxNjI5QjBERjA3NjJFCis6MTA1QzMwMDBCNkUwRDNDNjk1NEE2RDExQzA0QjgwNDQzMTVFQzUxNUEwCis6MTA1QzQwMDAxNDcxNUM5Qjk3RTEzN0REQjg0NDExM0ZEMEJGMUY3M0RGCis6MTA1QzUwMDBCNkYwMzlCQ0ZFNDYxOTNGODlDNDgzRkNBNENDNzNENTg5Cis6MTA1QzYwMDBFRTg2RkNGM0NDMkY2RjFFRTc4ODI3N0E4MTQ3RTcxNzczCis6MTA1QzcwMDAxNkU1MjhGQUI3QjRGRTE2OEU2MTcxREU2MjMxQzFGQkZCCis6MTA1QzgwMDA4QTEyODlENDk1RDJGOUI3MTRCMzc3MTY0NURGMjg3MUYzCis6MTA1QzkwMDAxMUM1NjY3RjQ1QkE3MzM5NzYzRTgyNDU1NDQ0NkJGRTIyCis6MTA1Q0EwMDBDMEM2RjVGMDc4MDEzRjE5QzA2MEQxNUM1MEU5MTMyMUZFCis6MTA1Q0IwMDA1RTQwMTFEODNCMTAyMTgxQzU5NUNGQzUzOEYyODBGQkRECis6MTA1Q0MwMDBCM0VFNzcwOUY2MkI4NDM3OTBEM0RFMzNFODU3MUM0MEM4Cis6MTA1Q0QwMDAzRkQ3NjdERUVGMjhGMEJBQzkzNkVDMTc0MjUzNEYxN0FCCis6MTA1Q0UwMDBBNEZBMDVGRDhCNEVBNTkzQTc0RkMzQjk5OTlENjg3Rjc0Cis6MTA1Q0YwMDBDQzBFMTc2REVDNUUxNTI5Q0FDMUI4QzNCNkMwQ0QyRTQ3Cis6MTA1RDAwMDAzRDVEOUIzQzY1ODZGNTU1OTJEQjZGMTI3MkUwREVFN0U4Cis6MTA1RDEwMDBDQUYwNDAwNkJFNkMwMzM5MDIzRjYyRjEzNUUxODFGMjAwCis6MTA1RDIwMDBGNEY1MzQzODQ1M0E3RDJCN0Y2OEJCMTQ0RDM0ODFCRDgyCis6MTA1RDMwMDA1OEUyNjNGMUFBNjIwQ0NGNDczQTg0RkMxOTVENTUzQUU4Cis6MTA1RDQwMDBGRTJEOTY5MjAwOTdCRjJBQUM0MjNDNjM0NzgxMkQwNEZBCis6MTA1RDUwMDA3MTU4MjJFOTNFOENFRjNCRDkxNzg3MzJDOUFCNTgyQ0RBCis6MTA1RDYwMDBCRUFGOUZDRjU2OEYzMTBFQTQ2NTE0N0U2RkUzRkEzQTEzCis6MTA1RDcwMDA1REI5NDMwQTQ1QURGNEYwMTMxRUJFOEU3OUFDQ0IzRjNFCis6MTA1RDgwMDBGNkQ2M0VFNkIxNTg3N0Y2NzIzREQ1OTE0NzU1RTlFNzJDCis6MTA1RDkwMDAxOEZCMDAxRjg4QzUwNzVGMDczQ0I0OEQ1OTkwNTkzRjE5Cis6MTA1REEwMDBDOTQ2RkRGNDVGREVGMDRGNjA5QzBDNzAzQzY3MDUwNzUwCis6MTA1REIwMDA4MUM3MTRCMkIwRkJFNTc5MTg4Qzk4OEEwNzBBMzBCRTA3Cis6MTA1REMwMDA4NjM4MjA2MTJDOUNEMkIyQkY3NTU1MEYyNkMxRUU3NjY1Cis6MTA1REQwMDAyQ0Y1ODU4MTdFRjZGMDZFMDJFQkE4MTYxNzY0MEY3QjFBCis6MTA1REUwMDBERUIxMjEzREU3QjJGOEEwNzJFNjY3MEREM0ZGMzA4RTM5Cis6MTA1REYwMDA2QzZFRTZCODMxQkIyOUZGMkIzMzlEMUI5RkM1RjcyMjg0Cis6MTA1RTAwMDAzNEY4QjUzODc1RjNCQzlFRjJENkJFRUQ5OTY1ODU4RjMyCis6MTA1RTEwMDBFQ0Y2NDE5QjI4QkYxMENBMkYxQkU5RkE0RTkxNDI3QTNCCis6MTA1RTIwMDAxQjY1Q0NGNzM0MDYzMURGRERBODYwREFEQTU4OEVFOTdECis6MTA1RTMwMDA1QTY4M0EwN0UyM0Y2MkYxNTJEODhGMDQxRjBFNUU0QjU4Cis6MTA1RTQwMDBBQjZDMDI5QTYwNUNDQjhFRjlCMDhGRUMxQUNFMTM1NTE2Cis6MTA1RTUwMDA4MDczMjVCODFGNEZFREQwQkY3QTM2Q0VFN0U3NkMzQzk0Cis6MTA1RTYwMDA2RUI2N0QzRTlFQTMwREU3QjdCNDgxNUREOEM1RTM2OEVECis6MTA1RTcwMDBFNUI1MEZDRTg3RkRFM0E2MDlEQTNFMzlFQ0ZBQUFDRUU2Cis6MTA1RTgwMDBGRTlBRUM3NUIwNzNBNjUyQUQ3RDRCMUJGNEU3MTY3OTA0Cis6MTA1RTkwMDA5RUVDOTk2RkNDOTMzMEMwRTM3NkIxRkM0MkVGRDMwODBGCis6MTA1RUEwMDAwRkFBMDAzQURFRTVERTY3MzBCRjY5MzJGNzNCNTRENDEzCis6MTA1RUIwMDA4RjgyNDdFNkM3NjhGNzI4Q0MwRUFBQzg0NzNGODUxNEVCCis6MTA1RUMwMDAwQUMxRjUwMkIyMjk4RkMzOUQ2NTNGQjBGRkMxRjVFRTRGCis6MTA1RUQwMDAxNUVCRjUzMjI1MzdBM0FDNkIxQzhFRDFFODRGRDE4MTgxCis6MTA1RUUwMDBGNjA1RTg2MTE1QzY3REQ1OEVGMjcwQjZDN0RERTQzOERCCis6MTA1RUYwMDAzM0JDNDhENTgzMkE1Q0ZEREFFNzg5NUVFNEE1RURGRDc1Cis6MTA1RjAwMDBFMUJFNjQyOUNERTcyQzRFQUEyOEJFNTk4RTVCRThFNTk4Cis6MTA1RjEwMDBGN0M5RTg3QzQxRkUzNTNDNkI3NkM3NEQ0MEM3MzFBOUQ3Cis6MTA1RjIwMDBGRTFDODEzMEJFMjNFMUU2RUYwOTY3MEJFRjcyOEY2QzM4Cis6MTA1RjMwMDBFODg3M0M1RTVCOThFOURDNjU0Q0M0MDY0MTQ2QzNGQUUxCis6MTA1RjQwMDBBMkEwQ0VDMzgzMzU1ODNFMkY5QzZGQzhFNzU2MTcxOUMxCis6MTA1RjUwMDBFQUZCNDM2NTg2NzI4NzdDOUVBMUZDNkZBNUQzRDczRDgzCis6MTA1RjYwMDBCMjgxQUYyM0E2NzlDRDM3OTU2N0RCQUY3QjhENUQ4MTlECis6MTA1RjcwMDBGNzIwNEI0NUNEMUVERDg4Rjc5MjhGMDM4RTQxM0ZGNjBCCis6MTA1RjgwMDA1NkUyM0Q1RDMyNDlCQjg3NDBDMjEwQUZFMjU2QzJDOEZGCis6MTA1RjkwMDA5RjFFMTJDMjc1NUEyQTM2REFBOTYyQzA2OEE3MDYxQjZDCis6MTA1RkEwMDBENEE0RDYyRkM0MjVCOEQ3NDgzOEVFRjAzQUU1NjNGMTJCCis6MTA1RkIwMDAyMERBMzkxOUVFRDcyNzgyQUFGQkRFQTE1MkQ2Q0UzMkRCCis6MTA1RkMwMDA5RTQxNEI0NTdFNUU4Njc3RUY0QjQ3M0Y0RjM1OEYxM0EzCis6MTA1RkQwMDBGQzRBRTYzODM1NzM3REUyMTM5NUEzM0FGOTRCREY0RTYwCis6MTA1RkUwMDAyNDQ3NzVFRjZBRUMwMERBQ0Y0QUUxM0ZCQzdCMjlGQTFGCis6MTA1RkYwMDAzRDlDODREQUQxMTRDRjJEQzEyQjQ4OTRDRUIzMURBQTc5Cis6MTA2MDAwMDA1MEZBQzUyMUE1N0NERTFFOUMyMTYzMUNCRUMyRTg2QTM1Cis6MTA2MDEwMDA3MzMxMzlGOThFNTczMUM0NzNEODdENEM0RUI0N0FBMzlECis6MTA2MDIwMDBEMUZGMzYzQjg5NTlBRDY3QUY3QUQ5M0VGOUM0NURCMTJFCis6MTA2MDMwMDAzRkMxRkU1MjdEOTlFMDNCQUU3RDhENDNGOENFNjU1NTY0Cis6MTA2MDQwMDA3MkExMURGQzI2QUY3QkM3RTI3Q0FBMEU4NEVEOTdFQTA1Cis6MTA2MDUwMDBGQUE5MjJFQ0JENkZGQTY3RDdGQjUzMzVGRjMwMzlFOTU3Cis6MTA2MDYwMDBDMkI4RTAzRDQ5MTYxN0JDMjdGOURGRkI0RjQzRkU5MDRECis6MTA2MDcwMDAwRERGMTVERDczMzhCMzdERDVDN0VEMkJBRDVFREYyMUE4Cis6MTA2MDgwMDBCNjVGRUQxMzg5MzczRjkzOURDM0VGQkY1NTI2NEQ3MTIyCis6MTA2MDkwMDA4NzIyQjEwM0ZENEZEQ0E5RDhDMURFRTk2Qjc0MDlCMERBCis6MTA2MEEwMDBFRUNGRTBGM0FDNEE4NkVEQjA5RThFMzZBRjdEMjZGQTk5Cis6MTA2MEIwMDA2QUYzODRGQjg3MzBDRjU2MUZCQjBGRDgyQUQzRjkyMjRGCis6MTA2MEMwMDA1RkIzRjdCMkQzQzEzQkJDRUY5N0FERjEyMUY5RDlCQkI4Cis6MTA2MEQwMDAxNzkyMjMyQTVCQ0Q3QkI0N0I4QTFBN0NFRDAwOUYwMDRDCis6MTA2MEUwMDAyOTgzQUIzREMwRThEMDFFQ0M0Qzg3MTYwRTlGNTZBRjFGCis6MTA2MEYwMDAzNUMwRThEMDRBRUQ4MzZDRTAxMTdENDY3OEE4OEQyNzQ1Cis6MTA2MTAwMDA4MDVERTgyMzg5M0E3Q0QzNEMyNTJGQzMzRTA4NTU4NTEyCis6MTA2MTEwMDAwMjc4RDg5N0JDMUZFMDg1N0IxNzYwQ0ZFNzU1MDlENzc5Cis6MTA2MTIwMDBDMkJEOEYyOEIzMEZGRDU1QzlFNERFMDA5QTI3MTFCODEwCis6MTA2MTMwMDA5NzUxMzBEMDlGN0M5Qjk2MUY2Q0YwRTI2MzRGRjJCNTc1Cis6MTA2MTQwMDA0NzkyRDA4RjI4MEZBMkZDNzRDMTYwNjgxRjRENkMwNzY2Cis6MTA2MTUwMDA3QkE3MERGRTQ5NTVGQUI4RUVFMDAyQjAzRjQ0QzJGNDA5Cis6MTA2MTYwMDAwMjk1Mzg0NTFDQ0JFRDEzMEI3OUQ3OURFRjBCQTc5REZFCis6MTA2MTcwMDBBOTc2RTlGMDY2QjYzQjlEQTQzRUIzQkVFMkU3RkQyQUYwCis6MTA2MTgwMDBGRDBGRjQ4RDZDQkExRjYxQjY3M0NENzFGMDE3ODEzRUFGCis6MTA2MTkwMDAxRjkzQzUzRDhDNEYzOTRFMkU3OUQwMDVFRjIxRDhDQkJBCis6MTA2MUEwMDA2RDMyQkNDMzRDNTU3QTFFRENGRkYxODY0NTAyNzE4RDAxCis6MTA2MUIwMDBCOUJFMDE3QzNBNkIzNEJDNTNGRDU3QzdFMjQ2RkI4ODNECis6MTA2MUMwMDBGRTFFNjlCRDhGRjk4MTAyRjU1NTgyQzBFRTExMjhGMERGCis6MTA2MUQwMDBFRTY2QTBGRTUwQzg4QTRGMzVGRTFDQ0VGQjlFNDRGREU1Cis6MTA2MUUwMDBEODQ2MTI3MTg4M0I1MUVCNkNCOEFFNzU5NTk3RTVFOUNFCis6MTA2MUYwMDBGNzQ3MzdGOTA0QkUwRkQ1RTg0RjE0NzE3NjhBRkU3NDVECis6MTA2MjAwMDA3RTYxRjdGNEJGMUZGREYzMTcxQkYxN0VBNjc0QjlEM0FGCis6MTA2MjEwMDBDN0Y0RDI2OEY0RkZCNEUzNjg3NDFCMjkxRjREOUM2RTY5Cis6MTA2MjIwMDA5QjUwRkY3NTRFQ0E0RUFGQTRFOEY2MjBDQUFCQjc5QzkwCis6MTA2MjMwMDA4NDEzMTZFRDlBMzlCRENDRjdGNjVEMjQ0NkUwRjcyOEI1Cis6MTA2MjQwMDBFQ0FGMzA3QkRBM0U2RTc2QzMwRTkyODEyRTIzRTJBQzQ5Cis6MTA2MjUwMDA1ODNGNzYxRkYzQTdBRDEzM0MyMTE4NkE1RDFBRkZGMjcxCis6MTA2MjYwMDAyNEJGQzBGNUZGMDA4QkU3OUI3MzMwMDhFN0M3RERCM0ExCis6MTA2MjcwMDA4RTA2RTE5Q0EzRTcxM0VCNzNDODg1N0U3RTJFMTI3RTBCCis6MTA2MjgwMDAwM0Y3MDEzREIzOTg1RjEwRkU0MEVGRENDNkZFNDlDQTNDCis6MTA2MjkwMDBENEY3MzZDMzNCNjZFQkRFRjIxQUVDQTFGNkM2Q0NGRUIxCis6MTA2MkEwMDAwNkE5RThCQTI4RDgxOTI3REUxMTE0NTg2Rjg0QTIzNTM4Cis6MTA2MkIwMDBFNzAyNUNGRDczOTZFM0JCMjNFRDU1RkJGMDFDQTYzQkE4Cis6MTA2MkMwMDA5NDk5MkU1QTlDNkZCQjI5REUzNkREQjlFMTA5MkVBRkI5Cis6MTA2MkQwMDA2NUVBMEQ2ODVGRjYxNEJFOENFM0FDQUJDQTNDMEVCQzNECis6MTA2MkUwMDA5Nzk1Mjk5RUQ3NjUyMzUxRjQxNzlCQ0U3NURGRTRFMzdDCis6MTA2MkYwMDBCREU5RTNFNzEzOEVDODk3MjY5NkMyRUY3MkE4RTgxRkEwCis6MTA2MzAwMDAxQjVCMUVFOUI3NTFCQ0Q1RkJBM0FGRjkyODVEN0JFNjRCCis6MTA2MzEwMDBEQzVBMDg3MEMwM0IzMTdBQkEwN0EwN0YwQkY4QzZGQTg2Cis6MTA2MzIwMDA2RDA2QkJFOTQ0NTlFQ0JGRUVBQzgyREZBNzk4ODJFRjYzCis6MTA2MzMwMDBENjZCRjVCQUQzQzRCMTlGQTdEMTU5NzFFM0JFQTcxRERGCis6MTA2MzQwMDBFMkZFMjk3Q0REODVEOUUxNUZBM0YzMjVFNDA1RDc0NDhFCis6MTA2MzUwMDA2ODBGNzFCRTE5RjhEOUJDREU4Rjg2NzczMzFFN0ExQ0EwCis6MTA2MzYwMDAwMzE4MDdENTIzNThDRjY3QTE5RkM5NURDRjlENDk3NkY0Cis6MTA2MzcwMDBBRTM2RTcyODlFQUJGOTkyNkY2MEZDQzQ3NzY3MURDNjA2Cis6MTA2MzgwMDA3M0I1MTIzRkEzODdERjM3ODA3MUE1MzlENUVDM0RDMEM3Cis6MTA2MzkwMDA3NDcyRjQwMEE3OUYyODFCRUIxMTcxQzA3MEVFQjNERDdGCis6MTA2M0EwMDBDN0NGQ0IwMjk5RkJEM0UwMjRBRTAxNzZERTMzNTIyRTY5Cis6MTA2M0IwMDA3MUZERDlEOUZERjA0MTdDMzc4NTI0RjE1Q0ExRkQ1NUYzCis6MTA2M0MwMDAzQkRDNEQxREM2QzMwOEI5OEFCM0RGODVFOTgxOERDN0EzCis6MTA2M0QwMDA4NTMwQ0U1REVERTAyN0U5RDFDRUQ5MkFEOUJFNDlBQ0QyCis6MTA2M0UwMDA0QUUyMzk5QkNCQUYxOEUzQUY0M0RBQkI4OEQ5Q0REM0IwCis6MTA2M0YwMDAwNzZCMTFGMzBGOEJCMEFFODIzRjFFRTA2QkFEQkMwMjlBCis6MTA2NDAwMDBGRDY5RTlFOEZBMUQ2Rjc0QTY3RjhDREVBRkNGRjY1REZCCis6MTA2NDEwMDBGRjZDN0M3OEMyQTcxOEVDNDMzMzNGM0FDOTM3Q0U2ODhCCis6MTA2NDIwMDA1Rjk3Q0VCRjdDODJDQjY3MDAyQUVBRjY0OURGRjQ0QjQ4Cis6MTA2NDMwMDBENkY4N0RGQkNBRDFGMEZCNEQ2QkZDNUVFNTAxNzg0RkQxCis6MTA2NDQwMDBEQzYzRkRGQjQ0NUFCQUM1QTRFRkI2NjhGMTI4RjAyMzFCCis6MTA2NDUwMDAyMTg1RDg1RkU5RTUxNkYzRDZENkQ1MTM3RUVERkQ5RUVFCis6MTA2NDYwMDBBODA3RDY4RDMyNzVBRTA3QzZERkQ1QkRDQzAzRTNFRUU3Cis6MTA2NDcwMDBEQTlDOTk5RURBRjhEQkY5Rjk2MjgyREY3N0QxQ0ExM0U4Cis6MTA2NDgwMDA5QzJGNzc5OEY0RkMyQjVDQUVFRkU3RjJCNUNCMTVGMUJGCis6MTA2NDkwMDBFMEVGNTVFQ0JGNkFEMTU0OEFCRjMyQ0ExN0UwNTI1NEJDCis6MTA2NEEwMDAzQTQ5N0VBNkYxNEI1NUQzQkVFNDBDRUZCNUY0Rjg0RDU2Cis6MTA2NEIwMDBGMUJENTlERUQzRkNCNDc4RDkwMUZDNzMyMUUwRTFERkYyCis6MTA2NEMwMDA1MUVFRURDOTVDOTRBN0IyOTU4QzZGQ0FBRTE5NENDMjVGCis6MTA2NEQwMDBCRTc2RTIyNjVCNDJDMTM4OTYyOEUyQTU3MEE1QTg2MDg4Cis6MTA2NEUwMDA0QzFCQkZGNzdBMkU1RkRGODlGRDBFNUIwOTk0QzNCRDlECis6MTA2NEYwMDA3MTE5REMyRUYyRDczMDFFNjY5QkYxRjczRjc2QjlDMkQ4Cis6MTA2NTAwMDBDRDEyRDhCRjcxOEM3NDI0NjVEREM2REZDQjE4NEY3NEYzCis6MTA2NTEwMDBCRjU3NDFDNzJEN0NFQjNERkNGRDk0NDJEM0VGODI3Q0ZECis6MTA2NTIwMDA1QUJDRUZGRDA3RTEzRDIxMTI4RjVFMUYyQjAyODk1OEY3Cis6MTA2NTMwMDBFOUZERkZFNDdDQTkzNDFENjBFRjE4QzQ3Q0U0NURERDU3Cis6MTA2NTQwMDAzOTA3QTU1RjNFRDgwNURCRDU4RDM1ODA0RjM1NEU0MkU2Cis6MTA2NTUwMDA5MzJERjREODZGRkQ1RUVENzc3QzBFQzAzQjBCOEU2MjAxCis6MTA2NTYwMDA3NkZGQUM2REU5MTUwMzdCQTlDQURBN0U0NzJEQjEzQUY3Cis6MTA2NTcwMDA1RkExN0FFMUI3N0U1QzlGOTg1RTQ4QThGNTJDM0Q2OUUzCis6MTA2NTgwMDA0NzNFOTlEQzREMTJGMDNCMjhGMzM2QzVGQTFEMjBFQTUwCis6MTA2NTkwMDAyQkQ5M0JENDg1NzE1NTkwNjhCRThDOUFBRkI0N0IzMkIxCis6MTA2NUEwMDBGMTNBQzJFQTJGMjE4OTMwRjIxMTc5MkQzODM2RjU3Qjg0Cis6MTA2NUIwMDAyNzI1MDMzN0Y1QzNCRUY4MjBERDE3QzNFRkE4NjhCRjUyCis6MTA2NUMwMDA1N0EyRjFDQkY4OTg5MTNGMjZDNzhERjk3MTI2N0UzMUZECis6MTA2NUQwMDBCNzJGNTNDODIyMTg3RjUyQjc4REMwQkU2RTRDODNBRTAyCis6MTA2NUUwMDAzRUY0NDcwNkRGN0I4NDhFM0ZGOTAwM0NDQzQ4RDNERTg3Cis6MTA2NUYwMDBDQ0ZEOEIyNEVBQzhBMUY4N0NGQTJFREYyRkNCRTkwNDZFCis6MTA2NjAwMDAxRkVBQUUyRDAwQkNFQzcyMTE3NkVGMjJFMkMyNzcxN0MyCis6MTA2NjEwMDA0OEM0RkEzQzY5MDRERjZBNzY3RjlBRkEyOTdEQzlFQUEwCis6MTA2NjIwMDA2OUVCNUVDNzVCMDI3QkU3QTI0NDdFQTcxNEZDOUNBRkNDCis6MTA2NjMwMDBCMURGQUQ0QkJENUI3MTIxQkU1QjExMjQzMTY2M0Y5MjcyCis6MTA2NjQwMDAwOEE2QUQ5QzNGRTU0QjhCNEJDMTFGMUE3RkRCMkJDM0NDCis6MTA2NjUwMDBGRDJDQjlDMEU4NEYxM0YzRUJGMDNEQjA2MUJCM0I5RjlECis6MTA2NjYwMDBEQUREQjQzQzlFNjdENEEzMzUzOUNDNkUwREU1QjA3QjQyCis6MTA2NjcwMDBBMUIyOTdGNTQzNUM2QUExNUVFRjZGQ0ExMThDRTUzRTRCCis6MTA2NjgwMDBCNUYwQ0JCQUYyNUFERTNFQ0VERjJEQkYyNDY3NTEwN0ZDCis6MTA2NjkwMDBEODMzRjI3ODVBREY4MjNGRTdGMTcxQjU3MjEyMDgxREU0Cis6MTA2NkEwMDA4NkY3M0YzNjdGQTM3RTk2N0UzRERGOTRDM0NFNzdFNEE4Cis6MTA2NkIwMDA3M0Y4QjhDNUQ2NzBDNTRCRDlCODc3RjM3MTM3RTUxOEZDCis6MTA2NkMwMDBERjhEMjMzMjRCQjVFRkY3RkE2RjE1OEU1MDdDOUY3MDNDCis6MTA2NkQwMDA5MDVBODg1NzY5MTk2MzRCQzBCQjY5Qjc4REQ1RTJDMjIwCis6MTA2NkUwMDAzMkVCMDk4RDBFQzNGODk2NTkzQzUyRDE3NUYyMENCQkIyCis6MTA2NkYwMDA4NTFDNkJFOUQ2M0FFNkE3MzI3RkJGOUFDRkEzRjVCQURECis6MTA2NzAwMDBEQURFNDkxNEFFRjAwMTI2NzdDRTAwQjEzQzA3QTJGMkUyCis6MTA2NzEwMDA3RDc1Q0UyQzhCNzVCRkI1MEVGNzcxMjdGMjMyQUZGQkFFCis6MTA2NzIwMDBFNjdEQUVDOEZEOEJFNjdBNEQ5QzRFQ0EyQjQxN0M4QTM1Cis6MTA2NzMwMDBCQjM1QzhGQzg5NUFGRjI3MEE5OTVGRDFEQ0FFRDNENDk4Cis6MTA2NzQwMDBCRjlCRDQ4NzIxQ0UxOENFNTdFMTVDNTU5QTQ0MTI0OTlECis6MTA2NzUwMDBEQThGMjdEMDJCOTcyQTEwMUY3MDU4ODVGRDkxNDIyODc5Cis6MTA2NzYwMDAxRUMxQ0YxNjIyNjhEN0I1MDZEOTdFNTQwQ0Y2RDZEOEVFCis6MTA2NzcwMDAyMDlFODRENEM5N0EzQkFDODhGRkFFQTI5Njc3RjhBMjVCCis6MTA2NzgwMDA0RDM5NjgwRjg1MDVDNDhCQzhDRUYzNEYzODEyMEIwMTA1Cis6MTA2NzkwMDA5RjJEQTUzNjYyRjU0RTdGNzcwRUIzNzNCNzJBRjUyRjdFCis6MTA2N0EwMDA5NjVBRDA2RjQzOEU2MkIwOUY4Qjg2OThGRDlEQUU3RUM5Cis6MTA2N0IwMDBBQTFFODM2Rjk4MUY4MzJBREUzRjIwMEFFM0M3N0E3RkQxCis6MTA2N0MwMDBGODlFMUNBQkYzNUI0REFGNzAzRkU0QjI2QUFFNzA4OUNDCis6MTA2N0QwMDA3MkU1QUZFOTNDQUUzRkU0QzBEOEY0NEI0RTZFM0YwOEUzCis6MTA2N0UwMDBGQUQ3NEVGNTZGMTdGRThFNUNFRjQxRjA0MzVFMDNGNzZDCis6MTA2N0YwMDA5RjY4RkVGQUI3QTY0OTI1QjRGQ0I1MjIzQjdGNzQzRURDCis6MTA2ODAwMDA5MjAzRTM3RTQ4NkNFODJGRjk5MEJDOUMzMzUzNDdCRjVBCis6MTA2ODEwMDBBNzcyMjRCNkRFQzQxREE4NDczNTdGRENCNUJEMEU4MzQ0Cis6MTA2ODIwMDA1RUZERjY2NjYzN0UzOUE5MUYwQjdFOEFFNTlCMUMyNEZDCis6MTA2ODMwMDA0MUYxN0JCRDQ5RUYzRTk0QzNDRTg5QkU0RDYyRURCMEMwCis6MTA2ODQwMDA3RUI2RjFGM0JGMUI3RjMyNEQwMkI5Qjk3RUE2NUM2QUZBCis6MTA2ODUwMDBEN0REQkI3QTJFODdEOTc3RUY1MzNFNTI3NDcyQjZDMjFBCis6MTA2ODYwMDA5NzkwNjAxRkY3RUU5RTk5NTc3QzlFNDAzRjg5RjYyMkQ1Cis6MTA2ODcwMDBGMEE3RTU1OUM3MDE3RTJCNkU4NDczQjQ3OTk4RTFENkYxCis6MTA2ODgwMDBDRUYzRDJDMTIxRUUxNjJDRkQ0MkNGRTcwODA2N0Y3QzY1Cis6MTA2ODkwMDA4QjhCQkQ4NzE0NkUxMTg5RkI2Mjg4QzNBMzAyMEI3MEJBCis6MTA2OEEwMDBCRkU1QzdGN0JCRDVEQTE4QzZENUE5Q0Q0RUI5MjU4MDQ3Cis6MTA2OEIwMDA3MTc2MTg0RkI3ODYxMjBDREUxRjNBQ0FGOTRGOEJBQkIwCis6MTA2OEMwMDBBMzA2QzUwNUIwNEZCQkQxMzUyMDgxNUY3OUI1MThBQkE0Cis6MTA2OEQwMDA4MzlGNEVEM0NFNjU5QzhFNjg3ODNDODVERkYxNkM0REVFCis6MTA2OEUwMDA3MjNDMzFENDhCNjc1OUVGOTA1MDk2NTVCRDNBNUI4NjE4Cis6MTA2OEYwMDBGRThFNzEzREY5OEJDNzFGOTI2MEZERjlGMEIxNzdCRTM2Cis6MTA2OTAwMDAwODcyNzhDMzczNzYwMjU3RjM4RTNERUUyNzQ5REMzRjU5Cis6MTA2OTEwMDAyNDI0OTBGMzE1N0JFQzk2RUY0ODUwOEM2MUZGMzdGQ0Y0Cis6MTA2OTIwMDBDODhGN0E3MUM1OTNDRUM0NjJEQTdFQzUzM0VGNEUyNzI1Cis6MTA2OTMwMDA1NDlFOEUzNTBGMUUxQzBGRjg3QjRDNjBFNzg1RUFDMDE1Cis6MTA2OTQwMDA3NDU4OUY1Njg4RTQ5QjU2RUY4RUI5NzM5OUJDN0ZGMEJDCis6MTA2OTUwMDA1MzZGMDNEMDRGRDhERDdGMzVGNkRCNzdBNTQzRkYyRThECis6MTA2OTYwMDAzRUM5NjVFQjBGQURDN0UyMjYxRjE1MTI5MzJERjQ4N0M0Cis6MTA2OTcwMDBCNjFGRkFFMDUxMTY1N0IyRTI1OTQ3MDI0MjgyNTdFQzZECis6MTA2OTgwMDBERTIxNDUyOTFDQUI3NzdGODRGQzcyRTk4RjlFQzgwMTBDCis6MTA2OTkwMDAzQ0FDN0VENjZFQjAyMzZFRjhEMTI3RUQxNzUyM0FERkFECis6MTA2OUEwMDA2MDI3ODM4QjQxOEVFRDI3MzE3RjNDRUMxQUI0QTM1Q0NBCis6MTA2OUIwMDBCM0Y4OTQ1NUE4MDI2OEJEQTc3RUJGRTBEN0I0RkNGRDJDCis6MTA2OUMwMDBBMDlENDA4OEVCRkI4NzdGMjczRDA3RjlBODhGNUE2RTczCis6MTA2OUQwMDBEMEJGOTFBRjU3RUY3RTU3QzJERjMxQjI5MUMxRTJDRjQ2Cis6MTA2OUUwMDBDM0Y5ODdEMTRFMzJENzI3NjQ1MDAyM0RCNUJBQUZGMzExCis6MTA2OUYwMDAyMzNCRTVCN0Q1N0IzRTdDMTNGODZFQjU0OTNFREU4Nzc5Cis6MTA2QTAwMDA3RjE0OEVCNENGMkI3MzRERjZGOUVFODJBQ0VDQTMxQjQyCis6MTA2QTEwMDA5RTM4RkUwMEY4MjMzRTc4RjI4RjBGQzAzRERBOTVBNzJFCis6MTA2QTIwMDAzRTdFRTA3QjEwMTdGNjZGNkUxOUU0N0JGNTYzQUZFNkYwCis6MTA2QTMwMDAxMDlERkVCRjJDOTdBRDlCQzcxRTdENjRENzU2M0FGRkI1Cis6MTA2QTQwMDA2MzZGMzgxMTVCQzdGNkZFQkUwNEZDM0ZDNzdFRkNENzAwCis6MTA2QTUwMDBCMUUwMEZCQTY1RUY3Q0ZDREQ5QTVCOUVCRTc0NUNBNjZDCis6MTA2QTYwMDA3NTExRjgzNUExRkY3RDQ1N0U2RUE0M0MyQjgwMzE0OTIwCis6MTA2QTcwMDBDOENGNzg2QUEyMDdFOTFEOTQ2MDVERkI4QjQwMDZCQjE2Cis6MTA2QTgwMDBGMkU4RjdCRTRGMjRCMENGMEU4NkM5MjBFMDY3RkY5RTI0Cis6MTA2QTkwMDA3NzBGREU0RUYzMUY1MkZBMzgyREU4NDNFNzNGREU4NkNDCis6MTA2QUEwMDBGQTk5OEEwRDRENTdFREY5RjI5NzJFQUE4MkQ0ODE3Njg0Cis6MTA2QUIwMDBGODZBMzI4ODdBNzMwNDVENUZBMTc0QUQ0QUQxRDU1Q0ZGCis6MTA2QUMwMDA3RTlDOUM5NEUwREM2MEY1RTM5NDhFRDM4MTlFOTQ4RTUyCis6MTA2QUQwMDBEMzQ3RDJGMTQzRjhDNzlDOTE3NDVDOTE2QjhDNEIzQUNECis6MTA2QUUwMDA0RTU2NkVERjBBODU3QjBBMkNDRjc5QjU3REQ2OEQ0RjQ5Cis6MTA2QUYwMDA3RjM1QTNGREE0RTk4NUQxRjA3QzlEQzBFMDlBOUQxQjY0Cis6MTA2QjAwMDBCRTNEMTdFNEVCQzkxRkVDREExQTYwNzQ1RTRDMTE3M0RBCis6MTA2QjEwMDBFQzg5RTMyNTg0RjJDOTFGMUM4MzU3MDMxRTA2RjczQTRDCis6MTA2QjIwMDA2NTU4REY1N0VDRkQxNUNBREJCMUE3NUY5MjE0OEM2Rjc3Cis6MTA2QjMwMDAyMTM5QzI2QzlBMjdDMzdGMkYxMzlBNUYyNUIwQ0M4RDYxCis6MTA2QjQwMDAwRkZGQkYwNTZGRDJGNjM3QzI0MzFFMzJEMjBGRjMwN0Q1Cis6MTA2QjUwMDBBOUZDMjEzRDEyOTdENzI5QTA3NzEzNjM3MERFQUIxMkYxCis6MTA2QjYwMDA0QzJFNTYyNUZBQkYwMjcxN0Q2NkJDM0Y5NTZCRDNGNDVGCis6MTA2QjcwMDBGRjMwNUQyMTZFNkNENTlFNzcxNjAwRkZBNUEzQTczNjZBCis6MTA2QjgwMDA3RjE5RTY3RjAxMkQ3RkQ4MjhCNzY5RTU5NEQzRjdEODIwCis6MTA2QjkwMDA4RTEzMTJEODA3QzlFNzI0RDk0NkVERTE2MzhFNDEwOTY3Cis6MTA2QkEwMDBEN0M3MUZEQkU1OURBMTkxNzQ0RkUxOUZDNzFGOURFMUYyCis6MTA2QkIwMDAzRUZDODc2NjM5RTdGODE5NERDRTQ3OUZENzk5RTE2REJFCis6MTA2QkMwMDA1QkFFQzJGNjU3MjZGQzdENzBEMjVBRkYzRkNGRjVDNkFBCis6MTA2QkQwMDAyQTEyQUIyQjlBMzg3MkZEMTI0OTQ0MUQ1RjlBODJGNzM0Cis6MTA2QkUwMDAwMzg4MUZBM0YwN0VGMDk4MURGNzg3RUQ3REZCNTE4RjgyCis6MTA2QkYwMDA5QkY1QzVBQTM0NzZGNDlCQjlDQzFFNThGNTZDRkY3NDhFCis6MTA2QzAwMDBEMDZCMUZFQ0ZCMjlGMkU1QUFDN0RGOTFDMDdGNzM3MDQwCis6MTA2QzEwMDBGNzUzRDI0MDQ1NEEwRTYwN0REMEZGMEVDRTA3M0ZFQ0MxCis6MTA2QzIwMDA5RjBFRkE2Qjc1OUEzOEMwREZGM0Y5QUNGRTk5QjFGRjhECis6MTA2QzMwMDBENThGN0Y2NEU4RkYwNkI1NEY0MjNGRDkyOEUzQkMyRkNDCis6MTA2QzQwMDA4NkFGODRGOUJFN0ZEODAxMjcxOEU0RkQzRTdCOUQ5NTcxCis6MTA2QzUwMDA5REYzMDI1RjFGMzUzQ0I1RkI2N0JGOUUwQkU3NUVGOUY2Cis6MTA2QzYwMDBFQzFEQzZENkE2RjBBRkYwRjc3QjVGNzJGMEZENkRGOEI1Cis6MTA2QzcwMDA3NUIwNjc1QUYyMjRCQzhGRDBFQUJGMDJGREY1NUE3Rjg3Cis6MTA2QzgwMDBCRDI2N0NDQTAxQjkwNkY2MDNGMkJDNDg5NTdFNUZBNTE1Cis6MTA2QzkwMDBDMTlGMTdCNjE5RTBCRkM1NUYzNzRFRjFCMUZEOTk0MkVDCis6MTA2Q0EwMDBGNzFGRkYwM0I2NEQ0NjZFMDA4MDAwMDAwMDAwMDAwMDk1Cis6MTA2Q0IwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkQ1N0MwQjdDNTRENTE2Cis6MTA2Q0MwMDBCNUY3M0E3M0NFM0NDMjRDMjYyN0FGQzlEMzc4OTJGMEMxCis6MTA2Q0QwMDA5NDgwNDMxMkRFQjQwRTA0OTEyMjZBNTA1QUE5RjVBQjk3Cis6MTA2Q0UwMDAwM0YyODgyMUM5QTRGOEUyNUFCRkNCODQ0NEY0MDI5RjdFCis6MTA2Q0YwMDA4RDk1MTY2QTY5M0I3MEExNTIyMTc2OTBBMEIxMEREQzhBCis6MTA2RDAwMDAwMTJDMDYwNTZGMTA1Rjc4QjE4RDVBMTUyQjI0NjMxNDgyCis6MTA2RDEwMDBCNDU3NUJFRjVBNkI5RkMzQ0M5QzRDODRERUZCRkJCRTJECis6MTA2RDIwMDBERkVGMEJCRjc2QkJDRkQ5Njc5RkI1RDdGQUFGRDdERTAyCis6MTA2RDMwMDBFQjBDMjhERURDRUE1NDAwRDkzRDZCMzY2NDYxQUI1QUJCCis6MTA2RDQwMDBENDE0MDlFMDJCRkFCQjJBRDYwMjg0MDBDNjAzNTg1RDhFCis6MTA2RDUwMDBENUUwNzc2MUFCNUE0MDczMDBGRjdENDVGRkE3Nzg1QkI0Cis6MTA2RDYwMDA3QkYwRjk3QkU1RDRENkI1MzQ4RkI1RjE1N0Q0ODcyNkJGCis6MTA2RDcwMDAwNUI2NTdGMkIwOTE0QTI1RERCRkMyQkJCNjE4NjBBMzc1Cis6MTA2RDgwMDBGMzlGMUZBN0ZCMkI4Mzc2RDU4RTZENzNFQTNEQkZBNUJFCis6MTA2RDkwMDBGRTA2MDlBQTY1RUFEM0YzMzgzRTY4NzVBOERCNTVCQzQwCis6MTA2REEwMDA5RTBFMEJDMjY1MzE3QUYyNTQyNDMyMUJBMDBDRTlBMDZFCis6MTA2REIwMDAxNkZGRkMzMDAxREYyQjQ4ODI2NkE4MDMxQzAxMjk1OTBECis6MTA2REMwMDBBMTIwQjVDNjczMEZBQUZFNjI3NTdDQUMyRkJCQkFDMUY5Cis6MTA2REQwMDA4RkYzNUUyREJCMkNCNEZFMDc3MzJEMjE3QjMxQjUzN0FECis6MTA2REUwMDBBNjQxRDk0MDNFMThFRDAzQUJBQTIxMzI2MkYwRkJBREJCCis6MTA2REYwMDBEOThFODU1QjgwRTkwRTVBNjgxRDkyMjNCNDlEMDhGMUY3Cis6MTA2RTAwMDA4MUE2N0E4MDY5MDMwREZGODczQzc0QzREMThEMDM3QzExCis6MTA2RTEwMDBCNDBFNDVCRjZGQzU2NUQxNEQzQjA0Qjk0RDIxMzk2MEY2Cis6MTA2RTIwMDBFQjg0MDg0MDI5RDJBRDk2QjA1QzUyQTE0NzlGMjQwQTVBCis6MTA2RTMwMDBENTYzMDA2RTRDRjU3RjkzRDY5OTNCQjQ1MUEyRUIxRUZGCis6MTA2RTQwMDBBOEU2QjYxMkZDMTJEREI3MzhFQkYyRkM1RkIzM0U1ODkxCis6MTA2RTUwMDBBMDlDRTkxOUE5Q0IxNzVGQjFDMTJBRjhBRjI4QTAwQ0YzCis6MTA2RTYwMDAyOTI3M0EzNkFCRUY4RkM2NzlFODdFMjY4RDBBQjIxQzA5Cis6MTA2RTcwMDBDNjU1N0Q2Nzc0MEJDMTgxODg4RkUzRjMyMzMzNjc2NDQ0Cis6MTA2RTgwMDAxMjZFOEM3MUNEOEVBMjkzMTJGMkRCMjdBN0E4Mjk0NTMyCis6MTA2RTkwMDBEODU3OTAzM0M0QTc1M0E5Q0NBNzFGNERDMzk5RjFGRTZGCis6MTA2RUEwMDA4RjRGQTU2RTk1NTExRThGNDgwMjRGNDFDMjEzRTEwQUM0Cis6MTA2RUIwMDAxQTFGMjc3Q0I4MTEzRjZCRTlCOTE5OERCRjY1QkM1ODAzCis6MTA2RUMwMDBBMEJBQjk1MkU3QTQ4N0Y4MjdGRTEwNkY4Q0E3OTU4QTVECis6MTA2RUQwMDA0M0I1N0I4OUI3M0U0REExNzk2QzEwNUEyQjExQkQ3RTBECis6MTA2RUUwMDBFNkE3MDM1QUI5MUQwMjYxNkU1REQwQ0RFRDVEQzRFNzIyCis6MTA2RUYwMDA2QzkyODM5N0ZCNjlEMEQzM0ExNDlGOUJBMzU2RDdBQTcxCis6MTA2RjAwMDA3OEZEQzdCMzMzMjQ1QTlGMEI1NDlEQkY4NTc5RDQxRjk2Cis6MTA2RjEwMDA5NEJGMzM5MUJGOEUxODdGRURDNDRGRTc0MDdFM0E0MDU3Cis6MTA2RjIwMDA2NTNFQTQ3QkMxQkI3NjFDQ0YwQjExNUNDNzIzRDMyMTZDCis6MTA2RjMwMDAyNDMzODg1NDUwMTEyRjM5RkEzQTMzQzEyNzExN0Q4NEY0Cis6MTA2RjQwMDAxRjVBNUZGNjAyQjEzRUYzRkI3MkExOTVDN0U1NDM5ODY1Cis6MTA2RjUwMDBEQjQyRThFNjM2QzNBMTRBMEFEMzczNEE5N0VGM0JGMDE3Cis6MTA2RjYwMDA5NTMzNDY4RkQxREEwOUMxMzhGRkI5NDI5Q0JGOThCOTMxCis6MTA2RjcwMDBFRDk2M0NCNDdFRTNBRjlBNzFGODg3Q0E4M0JFMkExQ0IzCis6MTA2RjgwMDBBN0Y4NUQzRTNCMkVFNUZGNTRDRTIwMTA4MkY1NzIwNTNBCis6MTA2RjkwMDA0OEFFQUU5RTg1NzNDMThEQzNCRDM2ODg4Q0E0RDk4MzlGCis6MTA2RkEwMDA0QzVGQ0E0OEQxMzdFQzhCMUQwNTE1MzFFOEM3RTdBQ0ZCCis6MTA2RkIwMDBBNzNFM0M0NUNGNTkyMTZFMUNEMTIxREY5QTQ2N0M3RkVDCis6MTA2RkMwMDA5ODJFNEMxRUM4Rjc5NUE3OUFCMjlFOEI5Qjc3QUI5QUNBCis6MTA2RkQwMDA5QTQ1RUI4NDg5MzBGMTJCMzlGNjNDNENDQTQwMjMzMzc3Cis6MTA2RkUwMDBGMEY5Q0Y1NjA1QjM5RUIzQzZGOEQwRTJGODY3QzZBNTUwCis6MTA2RkYwMDAwRjAxOUNGMjRERUMxMzhFQjM2MjM4NDY1Q0IyOUQwQkQwCis6MTA3MDAwMDBBRUI2QUJDRDU5OEM0M0M2RTk0QTY0OTAxRERCQ0Y1Mjc2Cis6MTA3MDEwMDA4QTQyQkM3RTY4OUM3ODIzREE2MThCQzMyNzQ5NzhCRDlECis6MTA3MDIwMDA0RTc1ODc4ODNGRjVBRUYwMkNCNjEzMjZCQjMxN0RCRTdBCis6MTA3MDMwMDAxQUM5Qzc3MTdEOERFMDI1QkU2RURDNzNDMzY5RTI2QjMyCis6MTA3MDQwMDA5RjA3MzQ3QkJBQzA4NTZGMDJEOTA5QzM4RTgwMjZBM0ZGCis6MTA3MDUwMDA3Q0Q3NDhFMzFDMTJCNkY1RUQxRkJGRjQ3QjFDOUZEMjEyCis6MTA3MDYwMDAyOTgzOENGN0ZCNzBDREREQjQ2RUM1OTc0RTQyNzRDMjk4Cis6MTA3MDcwMDBGQTA0RkQ2RTc2MDhGRDMxRDY2OUQ2RDc3Rjc0OUQyODU3Cis6MTA3MDgwMDA3OTlFOUZFNTIwOTNGRDVERkYyRkY0N0MzRkE0QjZEMjRGCis6MTA3MDkwMDBGODREMEFCRTlBRTZFRkIyODZCNjIzMUY1NjFDOTExOTI4Cis6MTA3MEEwMDA2RjJCREFBNDEwOTA5QzE1MkQ4REZBRjdCRTI4ODNDMEEzCis6MTA3MEIwMDAxRkYwRkQ3QjdGNTVDQTc4OTQ2MUY0OEZBNkUxRjM4MUMwCis6MTA3MEMwMDBDRDU2MkY1QTRDNDhGNzI1RkFBQkNDRDk0MzQwOEJDMzQ5Cis6MTA3MEQwMDAwMTA0N0QyRkU3MjJCRjE2RUJGQ0RBRTg3Qzc4MEJEMUE4Cis6MTA3MEUwMDBCM0E5NDlGOEE3RUNFQThDODRGMTlGQTU1QzZGNUI4QTkxCis6MTA3MEYwMDBGMzZCNzk0OEQ3MTRDMjRERTdGMDM1RDg1RjVFMjBBQjBCCis6MTA3MTAwMDAzMjlBODg5QzA1Rjk4OUZFQjFENUZBMEVFOTlGODZGRjZGCis6MTA3MTEwMDAwOERGODZGRDVBNEFGNjhCRUM5MDdDM0ZGQkJGNzMyMDVDCis6MTA3MTIwMDBGQzlGMDJDMkZGMzVBMEJEOEFFMDdDQ0IzNjg5RTc4RDhCCis6MTA3MTMwMDBGOTZBM0ExRjU5NTM4MEVEMURBMUM0RUJDQjQxODlGNTgzCis6MTA3MTQwMDBEOUNGQkE0NzkyMUQ1ODA5NDNCQzc2NjkyMEZFMkRFOTc0Cis6MTA3MTUwMDA4ODdGMDI4OTBCNUM0MjBFMkUyRkQ5OTdGRTU3NjRBRkIxCis6MTA3MTYwMDA1REIwODJGNTk1Rjg0RTc2NDRFRTE5QjE3MTFBQ0UxN0RFCis6MTA3MTcwMDBFOEIyNDI0ODIzNzk4OUZCRkQ5QkU1NTBCMDM4QTYxRjUxCis6MTA3MTgwMDBGRDVEN0I5ODFGQ0JGMjkwMUY4ODRGN0I2RTIyRkY1M0QzCis6MTA3MTkwMDBCNDQ0RkUzQjQ3NjY3Q0FEM0M1MkJEMjY3RUNBNzM5OTIzCis6MTA3MUEwMDBGRkM4NkZBMEY5RDMyNjk1MjQzRUFGRjM3QjI0RkUxM0NFCis6MTA3MUIwMDBGQ0Y2MzE5RDRCM0IyNDc4NEMyMjNFQUYzRjVDQTAwRDRBCis6MTA3MUMwMDBFNDZCNDNDNzIzMzZEMkZGOEJGMUQ1Q0NDN0QxRTlCQUU0Cis6MTA3MUQwMDAxREQxRjk3ODBFM0EwRkU4QThBQzc2NzhEODk0RjAzQTM5Cis6MTA3MUUwMDAxNEI1NzUzQUUxQjQxMEY1OTY3MDYyRDY2QjgzN0ZENjBDCis6MTA3MUYwMDAyQ0Q1NjdDMzcxOTdEMTM4NUM1RkJFMjMyQzk0RDEwQjFCCis6MTA3MjAwMDBDQTA5QzJDQjIyNjE3NzlCNTUxRkZCMjNDM0RFM0EyRkVECis6MTA3MjEwMDBEOEVENzdFMTJCNkNCM0U2NTUzRTQ0MzhCQTUzNEE2RDRFCis6MTA3MjIwMDA5NTJCMDdFQUVEQkEzMUY3QjBGRDJBNUM4REY2OThGRDkzCis6MTA3MjMwMDA2QTYyOUMxNjVFRTVGMDJFNDY3QTlFNUMwNURFQzVDMzRBCis6MTA3MjQwMDAwMDlFNUFBNTcyNkI4RURGMEM3RERGOENGMTlCNURGODgyCis6MTA3MjUwMDA2NzlFNTc0MUZDQUU1NUM5RkU3ODU1QTJGMzYxMUJCMDNECis6MTA3MjYwMDA5RUY2OTU0MTY4MkJCRTNGMUNGOUQ0QTM5MUJEMkU4RjhECis6MTA3MjcwMDA1RTVGOERGMTQ1NjAwOTU0NTM5Q0YxQUYxOTIyQUU3QkRFCis6MTA3MjgwMDA0NjZGNjc2NUQ4Qjg1RDVCNkQwMTFGQkVBN0I3NTMwRTJCCis6MTA3MjkwMDA0OTQ4NUZBRkVBM0I3MjE1RDk5RDRFQUJDNkYxOTUxQUNFCis6MTA3MkEwMDA3REU5N0I3Q0JGNDI1RDhCRkNDQ0IzQjQ4RUEzRjdFMjVGCis6MTA3MkIwMDBGOEQ5MjE5Q0I3QUZGMzVERjdFRDcxN0VCOUI3RTNEMTkzCis6MTA3MkMwMDA1MTE0MDdGRENDMDIzNUUxMjRGMUQwRjI3NDBCQzczMTIzCis6MTA3MkQwMDBCRDIzREZGMUUwQjJBMURFMTFCNTAxRTJFOUMxOUVDNjM2Cis6MTA3MkUwMDA2QThBQTdFRTc0NkE0Qzk3QUQ3RDdBQTQ4MEYxMzM4RkQ5Cis6MTA3MkYwMDBFM0UzRTc5NjBFNjFCQ0VEM0QwMzIxRDJCQjU5RjJBRDRECis6MTA3MzAwMDBENzhFQzFGRUU0NTcxNUFGOUQ5NUNBNzdGREMyMDkzQ0UzCis6MTA3MzEwMDA4NEU1QkVFMUNCOEE0REM0QkYwMEYyNzMzNTVGNkMzRDlFCis6MTA3MzIwMDA0MUYyN0FGNkNGMEE5MERFNTUzNjNFRkRBRTFGRDc3OTkwCis6MTA3MzMwMDAzODE3RDEzMDA5NjA4MjJGNUMxMUMxNTEzMzNCRDNBNzdDCis6MTA3MzQwMDA5MzdFMDc0RTAxRUJFQkY4NkUyNTAxQjcyMEQ3MUQyQTdGCis6MTA3MzUwMDAyMEJCRjI4NjA4MEYyN0JFNjFCQTBGNDE5OUUyRkZDOTMwCis6MTA3MzYwMDAzRDg5RDdBNzVFMDRFRkZGNjJEODBEMzc3ODA4RUY4RjBECis6MTA3MzcwMDBBREVBODA3N0M5MkZFQUZFMzMxRjE3OTg4QzlGMDZCRUFGCis6MTA3MzgwMDBGNzM4NjczQzkyMkVFMjc2OTk3MEVCNTU5MjhGN0YyNzAzCis6MTA3MzkwMDA0M0M0RjkxQkJFOTQyNUMyNjU1RjE0QkNBQjkxNUY3REVECis6MTA3M0EwMDA4QkYzNzlERDdEOUY1MjQwODZFRDk3RjJFQzcwOTI3OEY5Cis6MTA3M0IwMDBFQkQ3RTkzNjk2REZDRjZDMDJGNzNGNUJFQTBBMzVFMTlGCis6MTA3M0MwMDA3QTBFMkVBREJEQkMwN0RGNzdGRTlGRkM5N0FCNUYxNzMzCis6MTA3M0QwMDAwN0EzNjlCMTRDNjI3OUE1MTFERkVGOUNENzIyQjExRURBCis6MTA3M0UwMDA0MjZCMUVGMUNEM0NERUQwMTM0MzZGMEM3REM5NUIzQTdFCis6MTA3M0YwMDBDNDFGNEFGMjlFRTFCNDNFQTQ2RkM2RDI5MTkyOEQ3MDMyCis6MTA3NDAwMDBCQjVGMDI5MjYzRUY2QUE0RUI2QkUyQzcyMEFDMkUyMDU1Cis6MTA3NDEwMDA3QTAyMUQ5RkQ4Qzg1RjNCM0EyNTVGMjhDOUY4QzNFOUE3Cis6MTA3NDIwMDA2RUU2NUZFRkVBNjBEMzU0RTRENzNEOEJGMDU5RDIwQkEwCis6MTA3NDMwMDA1QjZCNzFCMkY5ODNCMEExMDA4MzQzNjg0QkQ3MDRFRTU0Cis6MTA3NDQwMDAxRDcwMUJFOTI1MjhBRDc5RTRCNzdCM0JBQUJFNDU3NkM0Cis6MTA3NDUwMDBGRDMxRDQ0MzhBMUI3RTY2RjUzMkREQzE3QTgwRURDNEVFCis6MTA3NDYwMDAxNjBBM0NCMTVGNzgzRDZDNTkxQjk3NDc3NkE3NEYzRjkyCis6MTA3NDcwMDA5NThFRjM5RDRBNTc3OURFNENCRjU3MjJCQUJEN0ZGQkVDCis6MTA3NDgwMDBDQzRERjNGNzdENkU2N0Y5RTU5MzBFQzdDNTZEOUZBNkVBCis6MTA3NDkwMDAwQkZFQUNDOUYwQkRDNjc4QTlDOTYyNjNFQUY1QkJCREY1Cis6MTA3NEEwMDA4QjJCMDBBRUVDNDA3RUM3RTEzMjI2QjcyMEFGM0JDMzRBCis6MTA3NEIwMDAxRjY0N0EzMkJBMzE3MUUyRkNDQkE3NTFCQzFDRDA4RDZCCis6MTA3NEMwMDAzMzQ0MjQ1MDI2QzRFQzczQTVBMzMwNTIyMEYyODc3MEI1Cis6MTA3NEQwMDAwRUYyMzdBM0U2Qzc2Q0FGNTNEMDBFNTMyODBFREQ4OUVBCis6MTA3NEUwMDA3OTExNUI2NDdDOUU3NDlGRUM0MkIzMkFFMkFDOTY3NDgzCis6MTA3NEYwMDA2MUU3NUExRTUxNDJDREY4REVDRDRBNEZDQTMwNkM4QjNGCis6MTA3NTAwMDA3RERBMEM0NTIzN0I1RkM2RjNFNkRFMDVBQ0RGMTY0NzZDCis6MTA3NTEwMDA0ODIyM0JFNDJDRkQ0NUZBODVCODZCMkFDMEVFQkZDOTcyCis6MTA3NTIwMDBDQzdGQjM5QzQ2RUI3QUIxMjZDM0ZGMDVGMTc1NkM1NzRGCis6MTA3NTMwMDBGNDIwODU2RkRFMTRDODI0QjlDRTkyNURCQ0VFQzk2NzE1Cis6MTA3NTQwMDA4NUZEMzFEQjFCMzlGMkFCOUY5MUJERTlEM0YzQTcyNDU1Cis6MTA3NTUwMDBGNkU2NzZGMkFGODZCRDAxQjlFQzEwRTE2N0VBOEI3QTA4Cis6MTA3NTYwMDA5QUE5REIxOUNDM0U5ODBGMTM4RkZBOUI1RDQ5RUNDQjlGCis6MTA3NTcwMDAyNEE4NEU0MzE2NUZENEJFOThFNTg4QzFGRTg1N0UyMUJGCis6MTA3NTgwMDAzMkEzQTIwQkY1MjhFRTc5QjMzRDJBQzhEMEZEQUY2RTI5Cis6MTA3NTkwMDA4RkNFQzFCNDlDQUJCNTE4NUVDQTU3N0EwRkQ5RTNGMDUxCis6MTA3NUEwMDA2MUQ4QTExODVFNDI4QzMzRjM3QjI0NzA1Q0U4QUJBNUY0Cis6MTA3NUIwMDA2NDNGOEVDQTY5NjQ3N0E2QTNEQzcxRkUyRTVENEZEMjRDCis6MTA3NUMwMDAzRjBEN0Q4QkU0QkZBMUYzOUExNEMyRjU1MzVENTUwRUI4Cis6MTA3NUQwMDA1MjlCMTVCOUIyRjY2NzhDOUY5NTAzRjM4M0EwQzM4NUMwCis6MTA3NUUwMDBFQzlERjE1RTJCMzgzNEQ3NDhFMjg3ODVGOTIwQUJEODgzCis6MTA3NUYwMDA4RjdCN0Y3RkFCMzQ5QkVDMjIwQTJENkRGRTk4QzFFRDEzCis6MTA3NjAwMDBDMThBNUMxQkJGRTdBOUFFOTIzNEMyOTEwQjMwQkY0NTYzCis6MTA3NjEwMDBGOTU1NzY0QTFDMjc5ODcxNkRDNjcxMzNCRUMwQzI3OTgwCis6MTA3NjIwMDA2MzM1QzcxM0IyMTRENkY3MUQxMkYzRDJFMkUwNjRGNjQ1Cis6MTA3NjMwMDA1Mzc3NjExRTRFNzE2QjdGMTdGQTJENkM5RjQyM0Y0RjNGCis6MTA3NjQwMDA3MTRBQjM2QjE2QUZEQjU4QUY0MURGNURBOTMzNzJBMDRGCis6MTA3NjUwMDA2Q0UwRkE4RDM2RjBCOTBDQTFDQ0I4QkUxMkI1MTE4RTIzCis6MTA3NjYwMDAwMzlGREIxMkFFMUJGQzFDOEMwRjA2M0ZBNzEwM0ZBNTJGCis6MTA3NjcwMDBGRjNFM0ZBNzY2MDhCOTlBRjlGQTNGNUQ3RkUxOEE0OTY0Cis6MTA3NjgwMDA5MDZDNUZFMEZGOTdGNTRGMDVGRkVGN0I0NEJFRjU1QTI2Cis6MTA3NjkwMDBBRTI3NjY0RjBBNTdDQzk2OTcyMTFGMjY1MDNDRUU4RDk5Cis6MTA3NkEwMDBEOTA3MDdGRTIzN0M4REVENjg2NTdCMzMwOUVEMERDNTk5Cis6MTA3NkIwMDA5OTA1NzU2MUI2MkYxMzczNDVCRTY0QjYxQjU3NzZDMjI0Cis6MTA3NkMwMDA0RDY0MUYyNzQ3MzAyRUJEMDRGQkYxMjlGRDQ3MUVFRkY3Cis6MTA3NkQwMDBFM0ZDMzIwM0U5MUVGN0ZDODJFNUJCRjBEMjU4MEQzMjIxCis6MTA3NkUwMDBFN0UyN0JDNjc2MkI1RUYyN0JEMDlEOTk3NDVGQzBFQzlGCis6MTA3NkYwMDAzNzhDQjhENDg4NDdDREUzOEM3OEQ0RjAyNzBEM0ExRjY3Cis6MTA3NzAwMDBGRTNEQzNGRjY0MDY1RDU3RDUyMEU5MUJFQTU1RjgzMUZECis6MTA3NzEwMDAyRkMzNUVBMzc4QTEzQkJEN0EzN0RGMUYxOTBFNzIxRUZGCis6MTA3NzIwMDA1MDAyMkFFREVCQTBCRTcyMUM1NkU5NzA0NUU0QjEwMzhECis6MTA3NzMwMDBGNUQzNjlEMkMzMzBGMjg1RjYwOTgyMkU0QjY4OTgzNEFFCis6MTA3NzQwMDA5MDBFMENCNzgzMTRGN0UxMDNGQ0ZFQTVCQUJGMjhDNDYyCis6MTA3NzUwMDAzMTJDQjQwNkUwRjhCRjcwMkNGOEM5RUYxNjk2NjM4Qjk1Cis6MTA3NzYwMDBFQjNDQTZDNzIzMkY5OTVBQTRGQjc5RTJBQjU1ODFBMDI1Cis6MTA3NzcwMDBCREZDMUZBNzk3NDgyQzI4MjdGRUY4RkU0MEVCNzdDQ0NFCis6MTA3NzgwMDBGNjMxRkQwNTJBNzgyOThFMkY1MEMyOTIxN0RGOUY1MUJFCis6MTA3NzkwMDBBNzQ5MTczNjkxMEMzRjhERjMxNUNDRDVEODVGMTYwQzQxCis6MTA3N0EwMDBDNTNFOERBNzc4Mjc4OTVDN0EzMkFDQkNDRTdBNDdDRkFDCis6MTA3N0IwMDA2MTFCRjIyMTMwQjc3MUI2REIxMjhCRDNFRDU2QkZBRjMwCis6MTA3N0MwMDA4MEY2OEYzQTQ0QkMwRUI0REYzNzlFRUQ5MjQ0RUI1MTA1Cis6MTA3N0QwMDA2NjA4RkUwNDU0OTE1RkI5NDA2NUJCNTlBOUNCQjFEMjhDCis6MTA3N0UwMDAzMTk3Rjc3N0M4MjdEQTI3MEY1Q0I3QTRGOTc4NzBGRUNFCis6MTA3N0YwMDA3Q0QwODI5MzYzNzZENUM4N0Y3MDFBQTBGNzk4RUQ2QTIzCis6MTA3ODAwMDBERkJFRDcyRjBCQTIzRUJFRjVCRjNGNDkwNUJDRkYyNzA5Cis6MTA3ODEwMDAyNTlBNEFGQzM4N0RGRjg5NTQxRkYyRTNBREZCNDVGRUYzCis6MTA3ODIwMDBGMjdENTM3Q0E0NjQwQUI5MkVDRUFDRkU4MkY4N0FEQkRBCis6MTA3ODMwMDBBQUJGNEQ4OEI3MkZCMDMyOUJGNUUyOEU5MDRDQzlGMEFECis6MTA3ODQwMDAwNUZENTlCRUMzQzk3QkNGNDZCRjNFOUM5OUQwMzdGNEQ2Cis6MTA3ODUwMDBBMERFMEU4REM5RTJFQTY5OTkyMjJGQkE2M0Q3MTYxQjAyCis6MTA3ODYwMDBFNUQxOEIzM0ZEQTk5OUQ4M0ZBREM3N0ZBN0RCNTM3OTBECis6MTA3ODcwMDAzRkMwQTA2N0QxQUU3MTM2RTJGNzlGM0FFRDEwNjEwM0M5Cis6MTA3ODgwMDBEOTZEMTU3MkY2NUQyRjREQTBDRDdCRjE2N0E2RjNGMDkzCis6MTA3ODkwMDBGRTAyMUJFRDlGMkY5MTIwMkFGNkI1RTBGMENGQjFGRjNECis6MTA3OEEwMDA1RUFFMEM2QkJEMDNEN0IxRTQyREQ1NjY0MUY5MkM5OUMyCis6MTA3OEIwMDAwRUQxMjBFQUQ1QTJCQkE0MzVGN0UyRjg0NTdFMTc0NUU0Cis6MTA3OEMwMDA3MDAzRDZCOTMwOTg5OEU3MkZEM0UzOTVEQjFGQjI5QUFGCis6MTA3OEQwMDBGMkE0QzZDM0I0NUZCNjE4RTdBMTdDNzY0OTZCRTJGRDlCCis6MTA3OEUwMDBGRUFFM0IwRkZGOUNGQzQwODc4REZEQzBCMjhCRTQ0RjhBCis6MTA3OEYwMDBFMzMyRjU3ODY1MDI0Q0ZDQUE5NEUyOTVCMjFGOTU2OUQzCis6MTA3OTAwMDA4M0RCMjUyMzVFMzlCRDBBMDgzQ0YwOTc1NTBFNkVDRjA4Cis6MTA3OTEwMDBBQzUyQjlGRDQyQjdEN0NCM0IwRTFDNjY1QzJCREQxM0Q2Cis6MTA3OTIwMDBDOENGM0VENUY1QUVGMzE2MkRFNjM3QkVCOUU1OTM0Mzg1Cis6MTA3OTMwMDAzRkM3N0UwNUFEQjM5OEVDNjVDNDRBNzhCQzRBRjcxQkQ3Cis6MTA3OTQwMDBDQkY0MzhBNEUyNzNCM0RGMzhGMDg3REY1MzlFOERFQkJFCis6MTA3OTUwMDBERkNFMTlEN0E1QzUyM0I3ODJGMjY5M0MxRjBDM0Y2MjYxCis6MTA3OTYwMDBFNjQ3N0Y1N0E5OTM3MDMyM0YzMzcxM0ZGNjdGQ0E5NzNFCis6MTA3OTcwMDBDMTlFQUI5NzExRDc0OUVDODdBMTRGNUY2NDA4N0MyRjVDCis6MTA3OTgwMDBERTM2NkY0RDNFQkVCRjc5REYwNzQ1M0RDMjJFQkQwNkQ4Cis6MTA3OTkwMDA5RTE4NUVEMUQwMzNERTk2MDE0NEQ3MjIzRUZEOURGRjc2Cis6MTA3OUEwMDA3NDk4Rjg3NDk4RjAzNjg5RkE5N0YxRkREQzJBQzQyRkEwCis6MTA3OUIwMDBFQUVEQjJDRTBGREY4NEIxQUM1RkI5OTY1QzZBMjNCOTUxCis6MTA3OUMwMDA5NDVGOUE3MTY4QzY5RjE5NkZCREQ2OUUyMkIyMEY2NkVBCis6MTA3OUQwMDA5Q0Y1NEE4OUU3NjQ0NkJCMzQ1MzlDNUYyQ0Q2N0NCMzQ0Cis6MTA3OUUwMDAyOERGNDVCN0I2NDZFNUY1MDhGQjc3NUE2OTNERkM0MzA1Cis6MTA3OUYwMDBEMkRCNkQxMkU3ODdGNUNGQjQzRDRERjZBOEY2QjczRjYxCis6MTA3QTAwMDA3MTkzM0RGQTUwNjlGNUQwRkJFQUI2M0ZFMEY2OTE1RDFGCis6MTA3QTEwMDA1MjgyNkU3QUZFQzM5MEIwNEJFNkY3NzVFQTdDMzRDRUE0Cis6MTA3QTIwMDAwNTJFRjhBNTg3QTI2QkVFNDM3RTlDNDc3RDI2RkQ2RDUzCis6MTA3QTMwMDA2OEZGRUI5QUZCMjhDRkYwMzlBMjk0Nzc5RTU2N0E2NkJFCis6MTA3QTQwMDAxMTFENzcyQzc0MzUzNjc5MjlCRjRENUM3N0VERTMzRkY2Cis6MTA3QTUwMDBGMTY4QkM3RjFDMkNEMEY5QzdGOTZBQzMzNkFCMzc4MkZBCis6MTA3QTYwMDBGMzM2QkMyMjdCRTkzNTAxODhGMkZBQ0NDRjA3QzJFRkFFCis6MTA3QTcwMDBEQUM4N0VBQjE2ODgxNjRFMUQ3ODFGQzU2ODIzQkQwOTZGCis6MTA3QTgwMDBCNEFGRkI1ODc2NTMyQkU0MTUyMDNFQzc5RDMzRDRFOEEyCis6MTA3QTkwMDA3NkQ4OENFMzVEOTlGQUJFODg4RTVGRTQwRkVGQTcwNjc3Cis6MTA3QUEwMDA5MTJFREEzRjgyOTBCMEM3Q0RCRkQ5MzhGNjZEQTRFRkUyCis6MTA3QUIwMDBDQ0I2MTdERDUyNTlGQ0I5QzI2QTk2NDc3RkY4RjY1RjFCCis6MTA3QUMwMDAzOTJDODNFM0I3NTdDNzdCMkM2RTA5RjE3MzVBODcyNDhGCis6MTA3QUQwMDAwRTgzM0E0NTVCNjc4REI4Mjk2RkFCREI2MkY1MDZGMTIzCis6MTA3QUUwMDA3MjVEOUIwQzBFRjI1RjI3RUQxQzM3RDRCNTdEQzJGODlBCis6MTA3QUYwMDBBQzkzN0M1MTY5MUMyRkMzMkRDNUM1MTFDQkRCREU5QjFDCis6MTA3QjAwMDA0NUY2NzY3OTlFMEM3MzUxQTU2QUY3OUMxM0UzN0QxMEI4Cis6MTA3QjEwMDA0REMxRjFDQjc3QkYzREVCODdENDQ3QkMzQjkyQzhBQjlGCis6MTA3QjIwMDAyQTdDQzAyNkY0QzYyNEFGRjBEQkIzMjgxRTZFRkVDRDNGCis6MTA3QjMwMDA2NzJDOEYwRkY3NEI5MDUzM0NGMEY5OUEyREVGRDlDODczCis6MTA3QjQwMDA5RjlDNDFDMTY0QTYwQjdFOTFERjA4ODRFNTg1QjZCNDk1Cis6MTA3QjUwMDA2NEYyOEI1Q0ZGQkI0QUJFQ0ZGQjdGMTc5M0UzN0EzQTlDCis6MTA3QjYwMDA2QjFCQ0Y3ODdGRjI3NzQ4NDdDRDlCNzZFRjVDN0FFRjNGCis6MTA3QjcwMDA5Mzc3QkEwMTcxRjA4MUQyMjg3MEZGOEIwNzNDRTQ4N0JDCis6MTA3QjgwMDA2QkFDNDE4RkNBQURCODVFRjNDQkJCMTk4RkNCOEVERjI4Cis6MTA3QjkwMDBFRDExRjk4RDJGNEZFQzE3MDVGMzY4OUQ0QjM2N0Y5QjQ4Cis6MTA3QkEwMDBEN0I5MTRGQzhDQzc5QTVGQzhENUI0NEY3MzRFODFEOTJFCis6MTA3QkIwMDBCQjkzRTg0RDY1OTY4OEI3RUNGMDgzQjFGNzg5RjMwMDg1Cis6MTA3QkMwMDBBMEZDRkMwMzdEREYzNEY4QjJDQzcxOUIxRDZFNEM5Qjk2Cis6MTA3QkQwMDAxN0I3RkY2NENGMTJGNjJBMDhBMTNGRDJCOTZBMDBEREI5Cis6MTA3QkUwMDAyQjlGODMxQzNGMzc4QkU2QjlBQjU4NjlBNDczMjI1QzhCCis6MTA3QkYwMDA3RjUwRTc5N0Y0MTVFRjBCODBBNkM0QzU1OTU1QzdBRjYyCis6MTA3QzAwMDBDRUExN0QzMTNCRjREQkZFNTcyNUM3RDUxQUM1M0Q3MUFBCis6MTA3QzEwMDBDRjMxREYzRUQ4NkExRjIyNUQ4OUFEMjdGOUJFRTlFRDdECis6MTA3QzIwMDA1OTg2RkVDM0NCMTA4N0E3QzA4RTBGMTg0RjgwRkUzQjJFCis6MTA3QzMwMDAyRDU3RjQxRjIzN0Q1Q0U0NkE0QzQzQkU3REZBQ0FCQjFBCis6MTA3QzQwMDAzNjNBRDcwQUUyN0E4NjExQkREREVGNzExRkJDRDkxQTI4Cis6MTA3QzUwMDA4RDM3RTYwRjc0RDg2M0U3ODFBNEQ3REJERTMzRTk3NThGCis6MTA3QzYwMDBFMjdERjRERkNDQ0YwMEE0Njk5NEI3N0Q2MDhCQ0UyMjk3Cis6MTA3QzcwMDA3RjFFQzRGNzUyN0RDMUQyMERGNjg0RjNDNjE4NUU0QzQ4Cis6MTA3QzgwMDBFNzhCQkE3RTFBRkI5Q0NCNENGMTk4RDE5QUVEQzI5NTRBCis6MTA3QzkwMDA1OTg5NzYwMTM2NjcyNzNENUYzNEU3MjE3NUQ2RDBBRjI1Cis6MTA3Q0EwMDA4OTNGNzUyN0VEOUNCRkQ0QjUwOUZEQzM4MDNBM0EwQ0Q2Cis6MTA3Q0IwMDBGNUUxQTM1RDg3NUVCQjA1RDdGMTUxRDg5QTM1OTdERjEzCis6MTA3Q0MwMDA5NjY4NkY2QjlFNDJGREM1RjEzMkYyM0I4NUVERUQ2NzI0Cis6MTA3Q0QwMDAxQzRGMTlGRUU4MjMxNzVFMUM5MzQ0NkZGMTdBNTJCREM2Cis6MTA3Q0UwMDA3NTAxREJCM0ZGNTc3Njc2RDkyMDc2RjZCQjU5MDNFMkYwCis6MTA3Q0YwMDA4NDM0N0MwREZDRTU4OUU1OTc1MzdDNjFFNkFGNjE1RkQ4Cis6MTA3RDAwMDBDRDc2RjM5MzRDMkRBOUREMDRERENGMUI3Q0FDREQ3OTYyCis6MTA3RDEwMDA5NjcxN0IzRTRGOUMzNzM1NkNGQjJCRkIzMTY0NkJENEVCCis6MTA3RDIwMDA4RUI4NkQwODdEQ0NGRDA3Qzg4RjcxRkZDMDdDNjk2QzczCis6MTA3RDMwMDBCMjc1MjdGMkQzN0NGRjMyOTIyREU3MjNEMUVGMTM5RjQ4Cis6MTA3RDQwMDA2NThCREIyQkY2RTc1NDNFQ0Y2RjI2QkY0OTc2NUE1MzNGCis6MTA3RDUwMDA4MUU0MDgzMzIwNEM3MTg3RDRGOUZDNUZFOTdERTZCQ0VGCis6MTA3RDYwMDAyMjM4MDM0NjM2RjJCOTJFQUM4QkFGQ0YwOTJCN0EzREMxCis6MTA3RDcwMDA0NTMwNzk3RDRFQjMyRDc2OUU0QkY3MDczQkNGN0Q1RjI3Cis6MTA3RDgwMDBCNzU3NUU5N0NBRTUwOEQ2MkM0RDRFNTY1N0UyQURCMkFFCis6MTA3RDkwMDAyNENEMjM3RTkyMjVDRTc3NEFCM0M1QkE4RjY1MDk3OTYzCis6MTA3REEwMDBCNEM4RDVGQTQ2QTNDODk3NjgwRjk1RUQ1RkJBOUJDRkM0Cis6MTA3REIwMDA4M0FEN0E3RDA2Q0U5Q0NCRTcwNzRFQ0IyN0M4MTJEODgxCis6MTA3REMwMDBCREExN0E4RTQyRkJDMzE1OTYzQjRCQjFERkI1RTFGNjAwCis6MTA3REQwMDAzOTBBRTJDNzNCRDVCMkE3MDRGQjJGNkM1ODJDRkE1N0RGCis6MTA3REUwMDA1QTJBQUMwOEZEQzc4MzRCRTZDQ0E0N0QwM0NCREIzRjBFCis6MTA3REYwMDBBNUY1MjlBQjE1QTBGQTkxRDI5NkY3Qjg3Rjk3NTU5Q0I3Cis6MTA3RTAwMDA1RjM1M0NCQkI3ODZERURGMjBBMTIwOTBGRjJERUU3MEYyCis6MTA3RTEwMDAyM0Q3MzFFNDgyQkE5QTM2OEZCNTNEN0VCQUJGMjYwRjlBCis6MTA3RTIwMDBGMzc5OTQ0NzI0Q0RGRkRCMkNGMjJCOEU4ODVCMkJBMUJBCis6MTA3RTMwMDBCQ0QyQjdGMTdCNzg1Rjc5RDk0QTM5MjFBRTUzRUM4MzU0Cis6MTA3RTQwMDA4RkRFMzMzNTk3RUNFRUZGODVGN0ZGNUI1NkY2RTBFRkZDCis6MTA3RTUwMDAzRkYzRDRCNTBCNjhGQzY4MTk1NDE5RTcyQjU3QjQyQUMzCis6MTA3RTYwMDBFQURCMzFCRkE2QkNDRDkwNDNCOTIyRjg1RUU2QjI3MTIxCis6MTA3RTcwMDAzRUQ3OTJFRUNCMjUzQzFEMjM5QzY2NUY3QURCQUNEN0M4Cis6MTA3RTgwMDAwRkM5NEU4MTAzMzlDREQyQjgxQkRCNTc3NEY5QkZBQTk1Cis6MTA3RTkwMDBGMzgzRkU2ODVGQTA2RjVGQ0U1NkFFNUI4MTY4MTFDOTQ5Cis6MTA3RUEwMDA1Nzk2QjdCNjExM0ZBMjREMEE2Q0E1RkRENzdEOEZCNzg3Cis6MTA3RUIwMDAxMTNFNUZCNzM5NzhGRkU4RTZCNEY1RDYyQjkwRTQ3MjRGCis6MTA3RUMwMDA0N0QxOUQwNEZFMzdBNTVENzc1M0JCMkZEQkRGOTMyNTlDCis6MTA3RUQwMDBFNjhERDBCQ0I3N0M1RjE2RjNCQTFBNTNDOTdGODIwRjA4Cis6MTA3RUUwMDBGNTRBRUNEMzcwRkMwRTdFRDQyQkEyRjkyMEVBRDUzOEVCCis6MTA3RUYwMDAzMjA1ODk3NTRFNjYzQUU0QjQ1RDRDQzdDRDc2NDFDNzBDCis6MTA3RjAwMDA4MjUwNDk3MzBGRDIzMUNFMUVCQThDRjIyQjdDN0Y5NEYzCis6MTA3RjEwMDBFNDcwMEI4NjVCODRFNzYwMjE3NDkxREM1RUJGRURDQTgwCis6MTA3RjIwMDAyRDYyN0Q4NUFDQUZBQ0ZGN0NGRTdFRTY0OTlBMkY4MDRBCis6MTA3RjMwMDBGM0QzMzk2QTQwRUFFMUZFMUVDNUExMDY1NTYxREYxNzk5Cis6MTA3RjQwMDBDNkVEQkIzRDBCQUQyN0NBQzRGRTdFMzNFNTFENTNGNTIwCis6MTA3RjUwMDBCQ0Q4RDg3RjMzRUEwRDI2NzZGOUFCNUM2NEIwRTU0RTI5Cis6MTA3RjYwMDA5OUVDQ0EzOThDRDdDODhFOTlGN0REMjY5QkVDRUZENEYzCis6MTA3RjcwMDA4RThGRDgyRTVGRUMzQ0QwOTlBRERCRTM3Q0M4QTc3NTIzCis6MTA3RjgwMDA4NEU5M0M5MDAyNUVERDRGN0FFOTNDMzA4OUZFQzc5RDcyCis6MTA3RjkwMDAwNzY2NjYwQjM5N0RFRDc5RTA5REJBQkREMUE4NEUwRTFFCis6MTA3RkEwMDBEN0QxOEYxMzkzRENGQThGMkU4MkYyNEFBRTQ3Njg4NEMyCis6MTA3RkIwMDBGNEMxRkQ2QUJCQzlGRTFCMzgxRkYzOEE3QTNCRDlCM0YzCis6MTA3RkMwMDAzMUFGQzA2REI0REVBQkY1RjM5M0ZFRDNDMEY1ODBFMzAzCis6MTA3RkQwMDA3QTFDNUMxRjY4RURCMjg2NDI1MjVDM0RDQTQ5MEJEN0UxCis6MTA3RkUwMDBBM0Y0ODMzN0M0RjUyQjQxQkIxQTY0N0IzOTk2RUI0RjVFCis6MTA3RkYwMDA1QTRFRUFFN0JEN0EzRDQzODU2MEQ5M0Y1QzBGNjFBRURBCis6MTA4MDAwMDA3Rjk4RTI5RTI0MkZBQ0U0RjMxOTkwMjYwREFDN0Y5ODY0Cis6MTA4MDEwMDAyMkRGMkE5MzVEODFBMzQyOUUxN0VBMjBFNDMyOTlENjlCCis6MTA4MDIwMDA3NTJFMDI0MDI5REE4NDU3RTJFNDhERkY5Qjk4MTU5NDVGCis6MTA4MDMwMDBCOUZDRTk1NEUyRjUyOTI2NUM5OEU1N0Y2REI2MUVERkIwCis6MTA4MDQwMDBFOEYyMUZCNDhFRTQ0M0IxQUYzNjBFQzY3MjFEODlENTc3Cis6MTA4MDUwMDA1QzQ3RjI4Njg1MEIzNjYzNzUyNDE1MjFEMkI3MDk0RDJFCis6MTA4MDYwMDA2MkRGRjg2Mjc1M0NFNjNBMUQ3MzFENEU5RTNGOTE0RkVDCis6MTA4MDcwMDAwNTM1NTcyNERDQkZBQ0IxM0NBMTdGRjlDQTI5MDlFMzFGCis6MTA4MDgwMDA4QkQxQTFDNkY3NEIxRjlBOTMzMDdFNThFQjhEMDlGRDFCCis6MTA4MDkwMDAxMTlCNkU0OTE4M0YyQUI0MjhFMUZFRTgxREI1NDlFQjUzCis6MTA4MEEwMDA1RTBDOUM4QzA5QUY0OEI4QkZEMUY5RTRCQjg0QUY5Njk1Cis6MTA4MEIwMDAzQzU5QTU3OEZFQ0E4RUZCNEM3NTMxRDMxODE3NTM4Q0VBCis6MTA4MEMwMDA3RDc4NURGRTQ2NUQxRDk1ODExMTlGQzdBM0ZDMUYyQjJBCis6MTA4MEQwMDBBNkI4RTlGRTJBNDkxQjg4MDM2RjI0Qzg3RUZDMUZDNTg5Cis6MTA4MEUwMDBDMTdBOTMxRDMwRjRGRjYyRkIzNzNGRDZGRDg0OUM1MjZBCis6MTA4MEYwMDAyNDUxOUNFM0MzQjgyQTY1MkFENTExOEI3MzdCNzg0QjM2Cis6MTA4MTAwMDBENEFCN0M5NkYyNzc4RThCMzRDOUVEODU2RkQyNUI1NUZDCis6MTA4MTEwMDA4OUUyQTA3QkFCMzQ4RTgzRUUxRDUyNzQ4MEY2MEY3QTE5Cis6MTA4MTIwMDA3RUUwRjY0QUY5MDNFQjQyQ0Q3NUEwMTkwRURGNjRFMDVDCis6MTA4MTMwMDBBRDExNTEwN0Q5ODI4NjlFRUM3RjcwODY4M0UzOEM4N0QwCis6MTA4MTQwMDAyRDk2REJBQUUzRTg3RjIyNUJEODlGMjdCMjQ1QkVGNUQ4Cis6MTA4MTUwMDA3MzVCNzgzN0Q5MDFDNTAxNkE1MzlFNzg5RThBMUY4MDY4Cis6MTA4MTYwMDAyQTdCNTAyRUVFNEMxMEY1NjFGMEM2REE5OTg1RTQzRjdCCis6MTA4MTcwMDA3QjQ2NkFFOTU0M0Y4QkZENkZFMDY1MjVDNEZFRTQ5NkJCCis6MTA4MTgwMDA2Njg1RjNCQ0Q1Q0UyN0Q5OUY5NDJCQzI5RjhDOTM4NTRGCis6MTA4MTkwMDBERjQwM0ZEMjQxRjZGMTRERTk3RUFCODhCMzgyNTY5MjgzCis6MTA4MUEwMDA0RjgxMDM4MkVFNzJGNkFGN0M0RTlDMEU1OUQyOEEzMjFBCis6MTA4MUIwMDBBQTRGQkRFMEI3QjRBRjEwNEM4NzZBQTc1QTg4NEZGREVECis6MTA4MUMwMDA4QjY1M0UwRjdFODk0ODQyN0FGQjZCNDY3MTlENzNGRjNCCis6MTA4MUQwMDA4NUZBM0YyRDhERjJFQkZFQzU4RjlFQkRCQjMyQTY5NzczCis6MTA4MUUwMDAyNzZEQzlGM0JDOEJFREJCRDU2Qzc5MzQ5NUNFNTE0RTYwCis6MTA4MUYwMDA4RTg0ODRGQThDMzdCMzQ1N0VGODY2QjYyQ0VBMEM0MjNFCis6MTA4MjAwMDBFRjc5ODg0RDdENEJCRTE4NEU0NDA3QTRFRTM1MkUxQ0U5Cis6MTA4MjEwMDBGMkUwQTYxRjU0OTM1QzZDRURGMzgyQjRBRjY5RUNFMzFCCis6MTA4MjIwMDA1RkM4MDMzQkE3NzNGREI2OTEyRkRERkNCQUQ4RDdCQjVGCis6MTA4MjMwMDBGOThCQzQ3REVCOEZCMkM1QjlDMDQ3RjQzRTZDQ0JCQkE0Cis6MTA4MjQwMDBGQ0UzNDk2RTM3OTA0MkYwQkVCMjdGM0NDNTA3RDUyQUE5Cis6MTA4MjUwMDA2OEU0RjcxN0Y4MTdERTdEMTRGQkYzRDY0QjFDRUZEMzU5Cis6MTA4MjYwMDA3RDFBN0YyM0NBOTBFRTlGMDBFRkFCN0I5MUJFQ0ZCMzA4Cis6MTA4MjcwMDAwNTNERjNBMURBNEE3NEJFRjZGREZBNTRDMkQzRUJFOTI4Cis6MTA4MjgwMDA2MjdDNTQwMjZENkJEQzdDMzdFOEYzQkRGRUZERTU3QjYwCis6MTA4MjkwMDAyOTRGQTdGN0QxRkI4OTFFN0FGRjNDMTU0QUE4RkYxQTgwCis6MTA4MkEwMDBGOENGQkU1QTNDRjBCRDM3ODFDRkFBRDc3QjU5Qzk0RjEyCis6MTA4MkIwMDA5NjQyQThFRDY5QjJBQjQ3MkNERUI1QzA2RDI0OTNGREE0Cis6MTA4MkMwMDA5MjlERkQ1MjVGNTNGNEM5N0I5MENFM0ZENUZFNzVBRkIyCis6MTA4MkQwMDA4NDdDRkRFM0MyRThBRjlGQzZFQkRGREQyNDgzODZCODc0Cis6MTA4MkUwMDBGODM4QzMyRjdCRTJFQUI0NEYyRUZFMjQ5NUY4ODlGMUNCCis6MTA4MkYwMDBDQUY2OUY5MkRFRURCNDdCQTlBRUUzQ0REQTlEQzNFMzZGCis6MTA4MzAwMDBFM0ZBNTRDRjc0MDczRDA3OTMyRUVEM0NBREVBODlDOURCCis6MTA4MzEwMDA4Q0JGMTVEQjA1RkU1NkZDNjY0NDBFRTE2QzQ1RUEwNTk0Cis6MTA4MzIwMDBEQzg5RkVGNjUyM0UyNzlEMjA0MUQyRkM3ODNGRTI0RDhCCis6MTA4MzMwMDAxQkMxNzUzNUEwMjFDRUY2N0YyRUVBQ0FGNzFDQ0RBODQ5Cis6MTA4MzQwMDAyMEZBMTRGMDVGMTZCRjlFM0QyRkREMzI5QUVCNzlERkU1Cis6MTA4MzUwMDBDOEJBMjQzQTQ5Njc4MzY4N0Y2RjY2NTM4OUYxODFBRTUyCis6MTA4MzYwMDAyNzBCM0EzMzJCRjQ3ODcyOTQ4N0UyQjlERkZGRTZFQ0ZGCis6MTA4MzcwMDA3RjEwNUZGNkVERENGRTQzRDY5MTRCRTNDM0MwM0E1QTYzCis6MTA4MzgwMDA3NTI3REIyNzIzMEZBM0JBNTdDQUQzMEU1OUQ4NEY1RUUwCis6MTA4MzkwMDAyRERGQ0Y3OTE4RDU2OTcwREUzNUE0ODhDN0EzQzE1MTA4Cis6MTA4M0EwMDBBREMyQkU4OUVGMjQzMDBFNkVGNjcyQkQyN0VCRUI0QUVDCis6MTA4M0IwMDA1NUM0MkQ0NjlFMjQ1QkJDQjk4QUY4QzhFMEM1QTkzQ0NCCis6MTA4M0MwMDA3RjA5RDBGRTk4OUIxMjJCQzM1RTYxMUNFMTk2MkRCQUVCCis6MTA4M0QwMDBCRDAyOUYwM0YzRDNEMUJBM0Q5QkU1RjE1RURCMjJDRTE0Cis6MTA4M0UwMDA2QjEyRTI0RkVDNTdFRDRBMTI3NzU2RTMzRjhFM0IzNzY0Cis6MTA4M0YwMDBGQjlCNTNEODJGNkQ5NkNCMjhFRUYwMzkyMkU0QzdDREU2Cis6MTA4NDAwMDA3MUU3NTQ1OENGRkIwMDAzRTJDRkU3RkU3MjQ5RjFFNzcyCis6MTA4NDEwMDBGNzNDRkYzREJGQjNENEEzQjFGRDA5OEYxNDc2MkUxQ0VBCis6MTA4NDIwMDAxOUMyNzkwRUZFNTU5MDdFMERBNUJEMDAzQTA3Q0QxM0Y5Cis6MTA4NDMwMDBBRDRERUExREU5NDBGREFDRjU5NEFGN0I2ODFBQzI2NTBECis6MTA4NDQwMDBBOEUwMEZGNTUxQTQ1MEFBN0Q3MkU4MkI4QTAzQkIxNTUyCis6MTA4NDUwMDA5NjVGRkY3MzU3N0NFRDc3MjQ5NUE4ODdFNEVDMjM4NzFDCis6MTA4NDYwMDBBNzcwQkQ3MzVGOTdEMDhGQjYwQ0VEREZBNzUyOUU4MUNBCis6MTA4NDcwMDA3MUU2NTYyNDMxNDVFOUIxQTUyNzU5Q0ZEMzY0N0Y1MTIwCis6MTA4NDgwMDAxRkMyMUU5MTQ3MzkzQUM0QjlBODQzRjMwMUQ5OTcxNEMyCis6MTA4NDkwMDA1NTFENDc4OUI5MzE3RUIxNDdEOERERkFDMzZGMTZEOTZBCis6MTA4NEEwMDA1MDNFNjcyRDQ3REQ3NEJFNTJCN0Y3MjkzNzJFMTc5QTE1Cis6MTA4NEIwMDAzM0ZEMEY5MEZFMkMzRkY5RjIwNDk1RUJEQ0I2MTQ1MTFFCis6MTA4NEMwMDBGRTFEOEVCQzNDODNFM0IzRDlDOERBNzE4M0FGMjdCMEZECis6MTA4NEQwMDBBOTgyM0U0MjgwODY0RDk5REM4RUEyN0QxNUJDMTQ4ODBGCis6MTA4NEUwMDA4ODc1RjY3NjM0NjcyNERCMUYwOEZDREI1QjA3NjlCRDAzCis6MTA4NEYwMDAzQjhGQTU3MERDQjIzM0JCOUJGNTIwMzgwRjYwM0JGMjlECis6MTA4NTAwMDBGQjg5Q0Y0N0YzN0MwODMwQTZFMzhBNkE0RDIyN0ZGRkMwCis6MTA4NTEwMDAwQjdEM0QzQkY1RkNCMkY3NzM5OUM3MTlGMzhFRTk5OEQzCis6MTA4NTIwMDAyRUFCODhBQkIyNDhFQjQxQUVFM0VBQjQ2QjI0REY5NEU4Cis6MTA4NTMwMDA2RDIwRjhEMzk5QzI3NTYxODFGREQ3ODhCQzMzNUQ5Q0VECis6MTA4NTQwMDA0N0I3MEQ4OUZFOTFERTEzREQ2N0Q3QTg0RTM1NDU2RDFGCis6MTA4NTUwMDA4NTBDOUNCRkNEMjZGQ0VDMjgwNEZFNTNBRUQ4NzVFM0Y5Cis6MTA4NTYwMDA3RDI5OUQxQkY5MjMwOEM0MDVEN0UzQTUyOEFERjAwRDhGCis6MTA4NTcwMDA1NzNDRkY1Mzk5REVGRDFFMTFFRkI0MEQ4OTU4NUNFNEEyCis6MTA4NTgwMDAyNzMwNTdEQUNBNzRDNUU4MDQ3RUFGNDFFNzI4OEU4QkRFCis6MTA4NTkwMDBEQjZDRDFGNzY5QkYxREU5NTIwOTE3QTM0MEQwMDk5REQzCis6MTA4NUEwMDAyMzM0OEE1NzUyNTQ3MUFFOUVBMjZBREVBMDM0OTBBRTM0Cis6MTA4NUIwMDBDMDU4MDg2MTcwMDAwRkFGODYwQjdBQ0U3NTg0NDM2Mjk1Cis6MTA4NUMwMDA3RDA3RUE0MjVCODkxRUM3MDQxN0FGOUIzOTJEQUU0RjZBCis6MTA4NUQwMDA4NjZDNTJFQ0Y5MTM5RTY1RUI1QTBBNjk1REMyMEYyQTRDCis6MTA4NUUwMDA0QTk4Q0ZDN0REMEI0MEE1RjNFRjE0QzVDNzc5NTJDQTJGCis6MTA4NUYwMDA3Q0QwOUE1MDVFNEU4NzhGRUY3QjcwOEVBNkM5REM4RjQxCis6MTA4NjAwMDAxMEZEMkFEREE3N0Q5QjM0RDUzOTA3RTk0RUZCMzI4RDVECis6MTA4NjEwMDA5RjZCRThCNjcyREQ3OUREREY2RjRBMkJDM0Y1OURCMTQ0Cis6MTA4NjIwMDAxQ0JDNjcxN0I2MUYyRDBDMEZBNzczREEwOTY5RkVCN0JDCis6MTA4NjMwMDBDODFFM0Y3MzZBRDFCQTMxMzhGRTJGNkQ1NkVGNUNCMjU3Cis6MTA4NjQwMDA0QjNEQzExRkQzQjk3REVEMTM1NjhERkNFMjgzNkZGNDEyCis6MTA4NjUwMDA0N0JFMjJGOTNFMkJCMTVERUNCMzhBRkJEOEQ3OUFGMDI2Cis6MTA4NjYwMDA3RTQzRTcwNzM2M0FEN0JBQTZFMzZEMUJFRDdGQUZDQzYyCis6MTA4NjcwMDBGMUJGNEY3QTMwQTlBM0E5OEFGODM2MTk1QTlCNjk5RjhFCis6MTA4NjgwMDAxM0VEMjFENzRCODQ3Mzg1QkRFODdGNjVGOEQ2QTYzOEY2Cis6MTA4NjkwMDAzRUJCNzJGNDdERUZBOEZGNzJEMjlCNEU1RDNGRjc1MzU1Cis6MTA4NkEwMDA3Qzg0RUQ1RTNENEVEQjdCRTBCQkE1NUFEQ0Y5NjkxMEI2Cis6MTA4NkIwMDAwRUYyN0VFMDZBNzg4RUVCM0E4REVCN0QyMTY1MzZFMTM1Cis6MTA4NkMwMDA2OEY0NkI4RURCN0M3MTM4QjNFNTA4N0RCN0U5RUZGQkFFCis6MTA4NkQwMDA3OThFRkY0QkQ2REIwM0VGRDhEQ0I4RkVDMDlGQzM0NUQ1Cis6MTA4NkUwMDBFNEFGQzIxOENGN0Q1RDFENjlDMEE0MkYxN0VBOEU0RTdFCis6MTA4NkYwMDAwM0RCOTE5REFGNzU3MEZDQkRGMzNFMzU5REY0MUVFOTIzCis6MTA4NzAwMDA4NzM0RUNFRkM1Rjg4MkY0Njg2RkIxRDBCQkE2NTdDRkMxCis6MTA4NzEwMDA4RkE1RkRFMkYzRkI5NjVGNEVGQ0VBRjU1ODBEN0NDRjhBCis6MTA4NzIwMDAxODQyN0FCNDFCRDg4RTE5N0E1ODQ2N0EyOEQxRjc3QjJBCis6MTA4NzMwMDA2MkJGQTc4Q0YwNEQ3QTY3RUI5RUMzN0FCN0Q3MDJBNENECis6MTA4NzQwMDA3Nzg4NkZDNjNCRTI1QkE1MzhBNDRDNDVCQ0YzRjMyM0E2Cis6MTA4NzUwMDA1ODhGREJCQTVGQkU4MkVCRDk5MUJEQzNDNjUxREZDMjcxCis6MTA4NzYwMDBGODZBOEJDQzA5NDlGODdDQTUzNTcyOTA5RUFGQzRGN0E2Cis6MTA4NzcwMDAzNzY5MzFCREFDOTQxMkVCN0ExNjdCNDQ5REFDNjExRjE2Cis6MTA4NzgwMDA3RkEwRUI2Nzc4QTQ5NkU2QzVGMTRFNTk0RUMwN0Y5QzVBCis6MTA4NzkwMDA5RjE0N0RERDhGREVCQkYxMjdFQjM2QTBCRTk0RkEyQTU1Cis6MTA4N0EwMDAyQzEzMjhERTM5MjZCMzFGRDhBRkM3QzkyQkZFMzBFNUZFCis6MTA4N0IwMDA4NjVERTIzQUZCQ0Y4ODhFOEI4MzdBRENGQ0RDQUE1Qzk4Cis6MTA4N0MwMDBFRTkzNUZEMDUwMkVFM0IxRjU1NTUwQkQ3NzYzMTU2RDM0Cis6MTA4N0QwMDBDNTREOUFERDdBODhEQTI5RDVFMTJBM0EyRTlDQjZBMEQxCis6MTA4N0UwMDBGQjkwRjhDNkNEMzc5QUYwRDY3RUYwNUJBM0I5NEVGQTZGCis6MTA4N0YwMDBBNDFERTgzQkNFRjZGRjhDRkVGMTA5NUNGRjNERkI5MTJBCis6MTA4ODAwMDBERjkwMzQyRTYxQkNBMUM3NjZGQzBEODY5MzNFQTlFN0JDCis6MTA4ODEwMDBGQUE5Njg5N0FGREJGOEVCNkIxNTc0RTgwRDA0MDQ1Q0ZDCis6MTA4ODIwMDBGRjlDOEREQkQ2MDVEMTA3OUVDOEYxNUQ5NzgzRjhGQkQxCis6MTA4ODMwMDAyMkQ3N0Y1RDBFRjJBREVGRjg3RjdBQzg5RkVDN0RFNTIxCis6MTA4ODQwMDAxRDM3RjlFMTc2OUI2RjM0RTFBQUJEMDRGMzg4MjQ3OEUzCis6MTA4ODUwMDA5QzkyNjM2NUZGNUEzOTQ4QkQ0OTYzOEVDOEI3ODYwNzQ1Cis6MTA4ODYwMDA2MTFERTFBNUExNUQ1NjQzRTRBNzdERERENzkzREY3OEM3Cis6MTA4ODcwMDAxRjU5NDlGQkRBNEJBNzA3REQ5NDJGRDVFQzNEQzQ3NTkyCis6MTA4ODgwMDBGQTQ2M0VCRDA0RjQzRkY5RDY1OUM0RkY3M0I5MjIzRkZFCis6MTA4ODkwMDA1RUJBQzE5QTkwREY4RTgwODg4RENFOTEwMzdFNTc2MzM5Cis6MTA4OEEwMDAwNDQ1NTI2MzhBM0JFRUU4RDhDMkRGOERENDZFNEI3QzIwCis6MTA4OEIwMDBBRThFRTIxNDg0NTBERDQ1RjJFM0M2MUM3RDlGQTQxNDA1Cis6MTA4OEMwMDA0QTI5NEU0MURDRjAzRTQ5RjQ1NUQ5QkIxNUI4QkVBQTQxCis6MTA4OEQwMDA4QkVBQUI3NjVBMDQ5RjlDMEU2ODQ5Q0I4OEM1MkIyMzQ0Cis6MTA4OEUwMDBGMjdDNEJDOERFMkQzMUZDODc1RUFGMTQ2RDkzRjg3QkI0Cis6MTA4OEYwMDA4QTUxM0I0NEJFM0NFNUI0QjY4NUJGOTMwQUZBQjg0RUY0Cis6MTA4OTAwMDBBRjg2MDg0MEJBQTcyODQxNUVGRjk0REM1MjA4RTJGQTFECis6MTA4OTEwMDAyN0ExNzkyNjdENTlEQTI5ODU5ODlGRkE3NzJGMEFGRUIzCis6MTA4OTIwMDAxM0ZCNDU5QjY1RkVDRTZGQjMwNDk5QzUzNDZGOTRGOTc0Cis6MTA4OTMwMDA1M0FCRUYxRjJFREY5MTc4N0U1MUI3RTlGODYxMEE5NUFFCis6MTA4OTQwMDBFQUMzQTZGMzIwOUQzRkU2RjM5REE3RTgzRjkyOUNFRjg0Cis6MTA4OTUwMDBGQzI0NDc4RkU3OEFBMDI4RTFCQkJDQUU0QkZCMkVFRjdGCis6MTA4OTYwMDAyMzhBMDc1Qzc0RjgwODA5NzFGOTFFMUQ0NzBERkFCQUNECis6MTA4OTcwMDBFQjQyQjI1ODM3OEE4MkVBQTM2RkQ3NjExMjAwMkZGMzE1Cis6MTA4OTgwMDBBOTFFNzE0MjM4ODBGNTQyREU0NjNENjMyRDU0REJBOEI2Cis6MTA4OTkwMDA4RUFDQkVCREU5MzA5REJGMkRENUUzNUEzMzlFOTBBMTZDCis6MTA4OUEwMDBDQ0FGNjU3QURENTBDREU2QzRGQkI1M0E1RjZBNEQ3QzRECis6MTA4OUIwMDA2OUYwNEIyNkZBNDREQzdEQTlGNEExRTVGQTBFRTFBMEFBCis6MTA4OUMwMDA3Njk3OTVFQkI5Q0ZDMUFENUM3RjU1REZCRTg1RTk1OTkwCis6MTA4OUQwMDBBQUNCNkYyMEJENDE1RUNGMzI1QzBGRTlEM0E1RDI2QjJECis6MTA4OUUwMDA5NkRGMzEwM0U3NTdDMDE1MDlGMjlCOUQ3OTQ5RjIyQkI5Cis6MTA4OUYwMDAwNTc1MzlBREFGQkY0QkU0QjVGRDVEMjVCQzJGNjFFMDFBCis6MTA4QTAwMDBDNUZDRkMyQzNEOEVCRTY2OTM4ODM3Q0Y3NjU0MzkyOTQxCis6MTA4QTEwMDAxRUU4M0JBQTc4MjVDNDdEQzVCMTRGRERGNEZENERGOUI0Cis6MTA4QTIwMDAzRTE5RTg5Q0I0QUZCMzYyNUQxMEVERTU5RUFFQTEzNzkwCis6MTA4QTMwMDA2OUU4MDdDQThGMjlFQzM3MkE4RTk1ODc1MjhBQTk1RjgxCis6MTA4QTQwMDBFRTJDRTUzQTEzMkQ5M0YyMDA5Qzg3RkQ3MERGRDFBMTQ3Cis6MTA4QTUwMDAyN0NBMzg0RTlGNTk0OTI5NkFEM0QxNzIyN0M1MEI3QjQzCis6MTA4QTYwMDA0MEVDNkY0OEM3MkEzMzdCRTJGQ0NBN0IzOTYyQkY2MUE2Cis6MTA4QTcwMDA0REVFQkIwRjkzOURCQTY2Qjc5NUY3ODNBRkIxNDY1RkQ2Cis6MTA4QTgwMDBBMjNDNkM0Rjk3RTI2REMyN0VEREIxNDVBQjUzNDhERTMwCis6MTA4QTkwMDBCRjkxQkMxNDc2MUZFRTVFOTE0NUU3MzVGNTlENTZENTI2Cis6MTA4QUEwMDBDRUY0REU3RDkwRUUwNzc3NDlERTYxMzgzRUIwRUZFQTI2Cis6MTA4QUIwMDBEMTZEQjQ0RkI0QTVDMjRCRUMzNURFNTc5RUFFM0Q0QUU2Cis6MTA4QUMwMDBGNUFFOTBFN0U0QkNGRDlBQ0JBQ0VDNUZDRkU0M0JGRkE2Cis6MTA4QUQwMDA3NTJFQUVBQkQ2Qjc2NTE2RDlFMTMzQkZEQkMzNzUxNUJFCis6MTA4QUUwMDA3RDZEMTJFNDRBQjQ4RjdDRTg0OUFBRjczOUYzRjQ3MTNBCis6MTA4QUYwMDAxQjlEMDc1N0I1MUZFN0JBOERDMUZDQzFEOTEwRTI4RTg3Cis6MTA4QjAwMDBGM0Y2NTYxQkU1MzdGNTVCOEM3RTBGN0Y4RjUyQURDN0IyCis6MTA4QjEwMDA1MTBEREJERUU2N0UyREU1MDE4NEM3Q0Q3MjQ4QzNGRjMzCis6MTA4QjIwMDAzQ0I0RUYxOTNFMUY2RUQ4MjVFQTNFMkVEQ0RGMjZGMTVECis6MTA4QjMwMDA3RDAzRUY4Qjc0QkJCNTFDMzRDNkZCNzIwM0VGN0E3REVCCis6MTA4QjQwMDA5NDgxRjc3MzMwOTdFQkI0OTZFRjdBODRGMUJENDRDNzA0Cis6MTA4QjUwMDBCN0I5NkUwQTJEQjBBRDJDNEJFODJCRURCNzk5QkZGRjFFCis6MTA4QjYwMDBCQjQzQzdGNzFEMTdDMUY3QTg1QzFEREZBMzYwMTRFMTY1Cis6MTA4QjcwMDBGQkZDNzQ1MTRGNzdGRUY4MTAyN0NEN0ZGRTA4RUZCRTQ3Cis6MTA4QjgwMDA3RTFEQ0VEOUVGMUVENUUzODJGRTg4QzU2N0JCMzIzNjg3Cis6MTA4QjkwMDBBRUI3RTMxM0ZFMEUzMTcwQjRERjQ2NzUyN0IzM0EzRjJDCis6MTA4QkEwMDA2Njc5Q0NFRDNDMzA5M0Y4N0QxREY4RUI4ODdGRDc3NTY2Cis6MTA4QkIwMDAzQTU1OEE4M0U3RjYwODdCMzZBN0QzQ0VFNzEzRDc0MTI5Cis6MTA4QkMwMDBCODg1RTREQ0I3RkZGMTk2MENDMkNEQUYwNTZFMEMzQjY3Cis6MTA4QkQwMDBCNzRDRTdFQkI1NjUzRjk4NDVGOTdCQURFRTBGRkJCQkI2Cis6MTA4QkUwMDBFRTlDQzU3NjY3MUMxNDUzQkMzNzQ3RkZDRTdCNEU1OEFFCis6MTA4QkYwMDBCNzQzOUIxM0Y5NEVFN0Q0MjRCNzg2NEUzQkQ3OUI1QzEzCis6MTA4QzAwMDAwQjNEMzZGMjY3RDdFQUZFRDNFQzI3RkJGMjlDMkNFNzRDCis6MTA4QzEwMDAyMEZBQUI2MTM4QkU2RTk3QTk4RTUyRTk2MTdBRkEzQkIxCis6MTA4QzIwMDA2QzdDREVENTYwRjJCRkQzNzJBRDA5RjUxNzgzRTFEMzVBCis6MTA4QzMwMDAyQ0FGREI3Mjc1N0ZBMkNCNkI2RTU0RDQzMUNDNzk0NUVGCis6MTA4QzQwMDBGNkQyRjk0MzU3NjQ3NTE5QzUwQjA2REZDQ0YyRUFEMkE4Cis6MTA4QzUwMDA0QUQzQkVFRUY3MTI1RUQyRTM3Q0EzN0Y4M0ZFRkQ1QkI4Cis6MTA4QzYwMDA1ODZENzVDNUU3RURDRkU3NUFGNDczQ0VEMDRGMkI3MDMyCis6MTA4QzcwMDA5RDc3NDlEMDREMzhDNEZDRTY4NjcyMjk2OTdFQjMzMkFGCis6MTA4QzgwMDAxN0M3M0Y1Rjc4RkJGQTcxRjFGOThENkZDQjcwOEFGN0U4Cis6MTA4QzkwMDAxRTQ0QkI1MjUxQzlGNTNCREQ3QzVFQThCNENFQTU3MzIyCis6MTA4Q0EwMDBCMEMwMkVBQjk3RjI5QTQwODdDQ0YxNDA2MDk3M0Q2NEZDCis6MTA4Q0IwMDBDMTc5QUYyMTFDMjE1REQ1OUREMkQ1ODQyM0NDMUI1QTBGCis6MTA4Q0MwMDA3MkQxM0VDREEzMkQ2NTFDMzdBRjAzRTMxMTdDNkVERTYwCis6MTA4Q0QwMDBDQzhGMTk3RjQ3ODY4QTc1RjcyQjVBNEVCMjNDQzJDODkzCis6MTA4Q0UwMDAxRjFBM0UxN0YxQUE3MUJEMDFFRDAwOEQ2RkQwQkY0QjY5Cis6MTA4Q0YwMDA2QjNGRjhEN0EyRTI1NDNBQjdGREFDNjgyMUM1QTlCOUQ5Cis6MTA4RDAwMDAyMjdGMzFFMkQ1MjhDNkFCMjU3QUJDNDI3NTE3NEI4NTQ4Cis6MTA4RDEwMDBFODYwRTk3M0Y3RDlDODdFMURBNjFGQjZBMEZBNDlENTQ5Cis6MTA4RDIwMDBCRjg2RjI2MUQ1MEY4RDNGQTI0MDQzNkE2MTNENkEyMDQ0Cis6MTA4RDMwMDA5RDIyMUNFRTk1QzRGRUNEQjM1NkFBMEQ4MUE2OTc4NzQxCis6MTA4RDQwMDA3MDVENjBFRjZCRTIxQ0NBQUNFRkJEOEJCQUQ5NUU5QzY0Cis6MTA4RDUwMDA1RkU4NkEyNEJDMkQyRkRCQjIwNjIzMEMxOEJERkY3NTFCCis6MTA4RDYwMDBCNjM3QTM3RjY3NTMyRDZBNkM1RDRERjRERDFERTc2OTRGCis6MTA4RDcwMDAyRDA5RjE3MjZGNDdCMzhERjdBMUUzQkYxQjJFMTkxOEIwCis6MTA4RDgwMDAxRkQ1NUY2NDFGRUI3OTkzNUQ0MUZBMzlERUVEM0IyMjFECis6MTA4RDkwMDBBQkI0MkY4NDdDRkM2NTdFM0NCRkY0NzhBOEZENjAwQUYwCis6MTA4REEwMDBGQkFGQkVFM0FFMTBDNUZEN0ZEMUYxNzg0NkRGOTc2RjE0Cis6MTA4REIwMDA5QTI0MzMzRjJDOTM0NTNCN0FGRjMzMjUyNDVGOTI4N0Q3Cis6MTA4REMwMDAxRkVERkRDRUZEQ0Y1Q0UxRTM3REY0OTBBODIzREU5MUE1Cis6MTA4REQwMDA1ODg3NUQxRjRFQUNCMzM2RjgxQUQwRjk4QTc0MERBN0M4Cis6MTA4REUwMDBFRjk1MERCQUY2MkEzRDZFNkYxMjNEOTJBNDgzMkMyRjlCCis6MTA4REYwMDA4Qjk0OThFNzA2OUU5NUFCRTNFQjQ4NzEzREI3OTFERDA4Cis6MTA4RTAwMDAzQjY5RTg4QjEyRjU5MDFGN0UyQjU3NjNEQzM0NzUwQUEzCis6MTA4RTEwMDBGOTVBRjY4OTE2REZGRjFEQjE1RjYzRTVGNzBGQjgzRjFBCis6MTA4RTIwMDAyMzU4NDdGN0NGMTczQkI5QkUwMTNFMEZDRUE1RkUzREY1Cis6MTA4RTMwMDAyNUUyRjcwM0VFNzlCOTc2NDRGQzNFMUQ0ODIyMUYwRjY4Cis6MTA4RTQwMDA1OEEzNUNFRjE3Mzg2RTYxRkEwMkM3RkIzRDQzNUQ2NEJGCis6MTA4RTUwMDAxN0I3Q0NBNDNBREE2Qjc1N0I3MUI4QzQ1OTQzMzgwRjk1Cis6MTA4RTYwMDBEMjdCNzM2MkYzMkNDOTE1RTcxQjQwRUJDRDhEN0Q1RjgwCis6MTA4RTcwMDA2OUFDNzczNURDQzg3QzU4QURFM0VBM0ZGNEJDMUVGMzNGCis6MTA4RTgwMDBBOEYzQjk0OUYyQThDMUUyREYwQjc0RUJGMUQzRjlFOTE5Cis6MTA4RTkwMDBEQTg5RUYyMTBFQ0E4RjI4NDFDQUQ3RjdCQzkxMTIyMjc2Cis6MTA4RUEwMDBGRkRGQjQ2RkQ5OUYyODFGMEVCQzY5MDc4QTQzRUVEOTM0Cis6MTA4RUIwMDBCRjZDMDREN0UxRkJGRDU3OTIzRDM5QkZGRjhFMkJCOTQ0Cis6MTA4RUMwMDA4RTUxMTJERjk3MDY4OUJFNUM4QUE3NUVGNTUwOUM1NENFCis6MTA4RUQwMDBCRkVGNTVBRTczQUNERjNCRkU1MThBOUYzMDVFQkE5NjUyCis6MTA4RUUwMDBBRTYzMUNDM0Y4MkIzRjU2QzlGOERCNzNCNDMyQjM5NDlFCis6MTA4RUYwMDAwODA3QUY5M0U2QUQzRkEyNzBERDYzRkQ5MUNBMTdFN0E3Cis6MTA4RjAwMDA1MjVDNzM2QzA2Qzc0RjQ2QkM1NDQxRjkzOEM1NEY0Nzk1Cis6MTA4RjEwMDA4NjI2QzQ0RkE5Nzk4MjdGN0QwNzUyNzhGRjQzODIxMjRCCis6MTA4RjIwMDA4MTFGMTg5QTgwOUZCQUY2M0Y3MDlDNTE4N0Y2MkUxRUJCCis6MTA4RjMwMDA0N0M2NzNDNTc5MEFDRjMzMkM0RkM3NEY1OEYyMzEzRTFECis6MTA4RjQwMDA3NjhCQjZBRTYzMEZBRjZGQjkzNUNDRjI2RURBNjUxNUJFCis6MTA4RjUwMDBGN0RCNDQ2QkQ0NDkwNzIxMjM0OEZDNzg5MTJFQTExQ0YwCis6MTA4RjYwMDBFNkQ4NDI4NTk0NkZCRTUwMkNGMjBEQjMzQzlFQzgxM0Q4Cis6MTA4RjcwMDBFNzg1MkY5QzE0REYxOUJGMzBERDNGMjJEOUY3QzY0MUFBCis6MTA4RjgwMDA5ODIxRjI3MDQ5RTc3N0JCNzU3NkIyRUY3OTc3RTQ4OTdCCis6MTA4RjkwMDBGRDA5NzcyNjI0OUM0QjFBRURBMzc5NDI1RkU2RDhDNERECis6MTA4RkEwMDAzRTk1RjlCRTNGQ0ZGMDNGQjA4RUNFNjM0RUNDQjVBQTEyCis6MTA4RkIwMDBDNkVGQjdFNEExRERCRDFFOEMzRkVGQUJGM0IzRTg5Qzc5Cis6MTA4RkMwMDA0QkU0RDUwMDNEMzNDOTFFN0U5QkY2RjkyOUZFOUEyNDU5Cis6MTA4RkQwMDBGQ0JBQjFDRjNGNkYzMzNDMjBGNkY5NkZCNTkyNUQzMEVDCis6MTA4RkUwMDBFQTRCRTZGOUNDRjE1N0Y1RDUzNENGOERFOERGNjk5RTMxCis6MTA4RkYwMDA5QjY2MjdERUZGRjY0NUUyQUUwNTc5QkExRjFGMEVDMzVBCis6MTA5MDAwMDA0NTVFRTE3MjkyM0YzOEQ3NjU1NTY1NUU0NzY4NjhCMjQ0Cis6MTA5MDEwMDBFRjBCMERGQjczNzg5NTM4M0ZFQTQyQkI0ODZERDNBODQwCis6MTA5MDIwMDBENzc5REZFQTg1MDMyNzlGNEM2N0JCOUEwMjI1QzhFMjAwCis6MTA5MDMwMDBBQkJFRkM5MzI3RDkzQzREMTdGNDc1N0UwMkZFMEM3OTJDCis6MTA5MDQwMDA5REE1M0NBMDZDQTBCQ0VFQ0NCM0U4REYyNTlEQjFGMUEyCis6MTA5MDUwMDBGOTI2MzQzRTY0OTEwN0ZGMkVBOTY5RDQ2NzJEQTQ0RkU5Cis6MTA5MDYwMDA2N0Y1RUY1RTkwQkUyMjdCOUNERDNGOUJGNzMxREZCRjUzCis6MTA5MDcwMDA2NzA2NDQ4Mzc4RkZDMDI4M0JGQkJGRkE5OTEyOUYxRjA1Cis6MTA5MDgwMDBENDQ3ODQzRkFDOUYyRkZDRTFGMEY2NzkyQzk3RUZBMEZBCis6MTA5MDkwMDA1QzdDNUUzNjEzQUY1MTVEQUUyMUVGQUJCRUVDOUI2OURECis6MTA5MEEwMDBFNDkzNzQ4RUQzNDQzODY3M0I5REM1NkQ3REZCREIyRDA3Cis6MTA5MEIwMDA3QzVFODk3RTk3RTJDMjFCMjYyNUNBNkQwNEY4MUZDODE0Cis6MTA5MEMwMDBDNkZCMzdDRjk2QkNFODQxMDZDOEZERTY1QkU3QjFEQ0RFCis6MTA5MEQwMDA2RkQyQkY4RkI5OThEQzdGOUJFN0ZGNjkxRUU5N0Q3NzcwCis6MTA5MEUwMDBGRjc3QzYyMDhCNUUxOEY1NDExMUY5RDc4NjQxNzBCRDE4Cis6MTA5MEYwMDA1NUU3MkYwQzhEM0U0REU3NjVERTBCRTdFOTdGN0YzQUE0Cis6MTA5MTAwMDBGRTNDQkRDNEUzREY5MjQ3NzZENUYyQTVGQjBBQTBGOTg5Cis6MTA5MTEwMDA3QTdFQjk0MjIyMzkwMUVCQzU2MDdBQjU0MzlGN0Y0NzE5Cis6MTA5MTIwMDA5RTJBREU5MzI1Q0U4NzQ2RTlGRDE3QUNBMTQyRkU5RTFFCis6MTA5MTMwMDBBMkVDRDJDRTAxOUI5RTdEN0UyQ0Q5QjlERTAzNDdDNjIwCis6MTA5MTQwMDBEQUUyRTQ3QTY2MDVEQTA3RjIzN0ZCMEVGMUY3ODczMUU3Cis6MTA5MTUwMDBEQzU5NzREQzI5REM0QUQyOERCQTFGNERDNEUxMTlDMjM2Cis6MTA5MTYwMDAyMUQ5RTdERDg3QUVBN0ZDRjE2Q0ZCNEQ1OTkyMTZFN0RDCis6MTA5MTcwMDA2N0Y3OUU3MDBGOEI5QkY3QUNGRUJCMTg5OEI3MERGRjdGCis6MTA5MTgwMDA3NjZBM0M5RDBGMzA5RDY3QzM2MjNFRDRGRkUxMzc4RDA4Cis6MTA5MTkwMDA4OUJGREY2QzdDNjdDNzc4N0U3MDY0MjM5RkQzMUI3OEEwCis6MTA5MUEwMDA1NjQwRTBEOUY4M0Q4QzBCREY1NURBODBCRjdCMENFRUUyCis6MTA5MUIwMDBCNzczN0Q0NTlGMzU1QTk0MUVBNzJGMUYxQTcyNDQ5ODg2Cis6MTA5MUMwMDAxNTY2MzEyQkI5REU3NTIyNkNBOEUyNzMwMjRDREVENzJFCis6MTA5MUQwMDA0REE2Q0ZFRkMyQjJBODBGNkRFNEJBQzU2OThERTAyNUU4Cis6MTA5MUUwMDBEQzRBQjA5OUZCMTM2NjhCRjNGMjI5RDAyRDEzNURERkI3Cis6MTA5MUYwMDA4NDI4QjczRTUwMTU2QTY3NTA4NTE5QjY5MzFDNjE5OTRCCis6MTA5MjAwMDBDMkFEQjZGNjgzNEVDMjU3QzRBM0E0QkZFRjEwQTVBNzQ0Cis6MTA5MjEwMDBDOUU0MTc1QkJGMDJFRjFCNzhDNUMxMTgwNDI1RkQ0RURBCis6MTA5MjIwMDAzRjJCNUZEODdGQUY1M0U4NjNGNEFDRjhERDkzNkY0MDFBCis6MTA5MjMwMDAwRkQzM0Y1NUU5NjY3QTUzMzUyRDgzQ0U0Qjc2M0ZCNzMyCis6MTA5MjQwMDA0MkE2RkE5N0ZEQTA0NTQ5Q0ZCQzk5OERCQ0ZGMTY5RDVCCis6MTA5MjUwMDAwRUUxQURFOUIxRjU0RUEyRjVBQUIxRkU5NDA1NjBBMTBCCis6MTA5MjYwMDBGNTRBQjA0QkFDQkYxMTMyRTg3QzZDMzI0NEY4M0Q1NzQ0Cis6MTA5MjcwMDAxMUMxQjhERUU5QTAyOUQ0QjdFNTE3RUI3QzE2Rjk1QjdDCis6MTA5MjgwMDA5NTlFQkY1OTFDNDFBRUZCNDlDRDE3Qjg3NjJBMjEzOUFFCis6MTA5MjkwMDBBRjkyQjdCNkMzOEZEMEY5NENBOTU4RTc0NEJDQ0VFNzFDCis6MTA5MkEwMDAzODhEODJFRTBCRkUzQTVGRDhCQjI5MTA2NjM5NDMwRDJDCis6MTA5MkIwMDBBODJGRjI4RjJCQ0M1NDg5NUY1MkM0NjNBMURGMTNCQjVDCis6MTA5MkMwMDA1NEJFRjY3OTgwRTk3N0RGMUVFREZENjE2NUVDRENDQkZECis6MTA5MkQwMDBEQjk5QzNGNUQwRUIyNTRCNTQyNkJBMUM4NUEyMUUzQTY4Cis6MTA5MkUwMDAwMjYxRkUyRTMzOTJGODdCNjdDNUY5Mzc1RTlFNEY3RTkyCis6MTA5MkYwMDBDRjJGQkVDMzM1RDc3NUVFMDg2REU1QkE5QjA1NDE2NDI3Cis6MTA5MzAwMDAwRkNENTMwODcwREExM0FCMDNCMDk2ODRGOEJFOTVDRTM4Cis6MTA5MzEwMDBEOTU1QUUzM0FEQTA3QzcxNUZCNkZGRjJGQzZDQUUzN0IxCis6MTA5MzIwMDAxREM2OTMyOUExRjFENUE5MzFCQzIzNjVGQ0ZCM0I0RTk5Cis6MTA5MzMwMDA0ODZEMjU3QkQ0QUNEN0QzMDY1NUI3NUVDRjU0QzRFQjZDCis6MTA5MzQwMDBEMEQwQ0VGMzhGNDgyOEEyQUVGQkRFMkE1MTdGN0FFRjMxCis6MTA5MzUwMDA5MEZENUNFN0RCMjM4MTJBMTVEMEY5RkY3RUFFMDNBNkUyCis6MTA5MzYwMDAxRjg2QjMxNjdDQ0RGOTdGOTZGRUJCMEYyNUZFMzcyNkYwCis6MTA5MzcwMDA5NkVBNDYxRTlGNkIzRTk1Q0FGNUFGQ0EwQzlGNDY3NThFCis6MTA5MzgwMDBCQ0U2N0FGMUQyOTZGMTBGRjU3MDVFNkFEMDZCQUExMzQzCis6MTA5MzkwMDA1N0JDN0NGRjVFRERCRTM2M0JDNEVGMDA0OUFCRURBQTk3Cis6MTA5M0EwMDAzNDhEQkU3RjVGQzFCRjYzRDU0Q0ExNDEyNTdERjdCRTIzCis6MTA5M0IwMDA4MjlGQTczQTY2MkEwMkVENERGM0RGNDRGQzMyRkYyRTZFCis6MTA5M0MwMDAxNUMyQUJGRjA1OUEzNzZEMzhFRkY3MjU5M0M3MzQ0M0M1Cis6MTA5M0QwMDAxRTk2ODE3NTUyMjg4NzVCNDlCRTQ2RERBRDUxNkY0QkE1Cis6MTA5M0UwMDA4MEEwNzUzQjdERTI3N0YwNTRDNDA5RkZFRTFGNDJDOUFGCis6MTA5M0YwMDA0RUI4RjQ5OTdGQ0Y0M0Q0RkZCNkU4RkM0N0JBNzY3MEY1Cis6MTA5NDAwMDBEREE3NDM3Q0E3NkQ3Q0NGNkJFNjlCODFERkZGMDJCOUI0Cis6MTA5NDEwMDBENzdFQTI1MDUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCis6MTA5NDIwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQjlCMjVDM0MwRjBBM0E5Cis6MTA5NDMwMDAxRTgxNDVBNTUxRjlFOEY4MUM5QTNDMEIwMzAzQzM0RjY0Cis6MTA5NDQwMDAyMDVFQ0M4MzVGMUYyRTFDQ0I4MjYwN0I4OTMzMzAxODVCCis6MTA5NDUwMDA4QjMyMzA5ODAwRjEyQzIwOUUwREM0M0Y4MUQ4NTA4QzY3Cis6MTA5NDYwMDA4MUMxMDg4ODhCODFFQzEyMjBGNjA1NjI0N0EwREEyRkIzCis6MTA5NDcwMDAxQzBDMEMxMzg1MTkxOEU2MDBGMTcyNjE1NDczNUYzMEVGCis6MTA5NDgwMDA0MjY4MjUyRTA2MDY1MzIwNjY2NEM2NkUzRkE3M0FEMDcyCis6MTA5NDkwMDA1RTVEMDRGRjIzOTA2RDZGNDA5RTVGNDZGMUQwQzM1NTIzCis6MTA5NEEwMDA0RUE4RkM3QzZCNTRGRTJDNUIwNjA2NjY2NzA0QkZDMEFFCis6MTA5NEIwMDA5QTM0RjNFRDgxN0ExRDlDNzFDQjc3QkFBM0YyMUIzREYwCis6MTA5NEMwMDA1MUY5N0ZEQzUwRjkzNUUxMTAxQTAwOEQ1Nzk1MjRCODE5Cis6MTA5NEQwMDAwMzAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMEQ3Cis6MTA5NEUwMDAwMDBCRUQ3RDdEOUMxNEQ1OTVFOEE5QUVFQUVBRUFDRkE0Cis6MTA5NEYwMDBBOTE5N0FBMDQ3MDZBODYxMUExOUUzQTAwNTBDMzAyODFCCis6MTA5NTAwMDA0OENEQTAzODQ2OTMzNDk4OTBEMUQ1QkMxNjg4MjEwOTBGCis6MTA5NTEwMDBDRkQ3RjFFRDJBMUFDOUY0N0NDRkMwODAwREIyMDY3REY5Cis6MTA5NTIwMDA1MTVCMEM4OTI2MjYyMTg5OUIzNTU5QjM2OThEQzkyMzQ2Cis6MTA5NTMwMDBEOTZDMTY4RDlCNDdCMkI4NkYyNDNDMzc5RjlCNzlFRTUwCis6MTA5NTQwMDA0M0ZBQkQ5MEIwRjc5QzdCNkJBNkFCQTZCRjAwRERFNEYxCis6MTA5NTUwMDA4RjM3RkNDQ0NEQTlCQTFGRTc5QzdCRUVCOUU3OUM3QjhCCis6MTA5NTYwMDBFQUI2RUFGMTQzN0MxRUMwNTlGQzVCMDNGMEE2MTcwMDgzCis6MTA5NTcwMDA5NjREOTVFOTRFMzMwNzZEQUNGQzFDOThGREVDRDFBNURBCis6MTA5NTgwMDA3QUFFNTM2MkU1QTJEMEI4NDczMjAwMkU4RjY2MDAzQzE3Cis6MTA5NTkwMDAwMEYxQzM4RjgyODdENTFCNjk1NDYxNjcxMzgwREZEOEMwCis6MTA5NUEwMDA1MDAzQTFBOTdFREQ2NTdGMEY0MDZFNjFFOUY3RjIwQkU0Cis6MTA5NUIwMDBBMzMxMjNDQ0ZBN0I2QTc5QjdDNUZBMTlGOTcyN0JCNzY0Cis6MTA5NUMwMDBENTNBRjVCRTAxMDc2NUY4Q0QwNzg2NEQzREMwRTA5QzU0Cis6MTA5NUQwMDAwN0MxMTMwNTE4NjY2MzJGNjRGRjY5RjcyNTIxQzFEQUY3Cis6MTA5NUUwMDBBOUI5NTEzMDE2NjFCRDVBQUFBRjNENzNENDczMUI3QjI0Cis6MTA5NUYwMDAzRUVDODVFRUMzQUNENDlFNERFNzgyMENFRkNCOUVEMzAwCis6MTA5NjAwMDA5N0M4OEMxRUJGNjI3OTdFQzU2MDdGQ0M5MzREMjMxREE5Cis6MTA5NjEwMDBCMTdERDRFRjI5NDYxNzBFRjU3NkQxQjMxNEU5NjE3NDA0Cis6MTA5NjIwMDBBQ0FBOTI5RTU1QTVFODc5MkU5RDQ2N0EyRTdGRDY1OEYzCis6MTA5NjMwMDA1QzQ4OEZENkM4RTlEMTFBRkI2ODlFNEVDNTE4M0Q0RENGCis6MTA5NjQwMDAxNzQyQ0YzRDQ0Q0ZCMEEwNjdEODQ1Q0ZCQjA0M0QxQkU4Cis6MTA5NjUwMDA2RDdBMUE4Njg4OUVBMTM5OEMxRUY2Qzg3NzVGMUExMjE5Cis6MTA5NjYwMDBBQ0JFODZGNDg0QjE5RTkzOUUyMUE0QTdCNTA4M0REQUQyCis6MTA5NjcwMDAxRjg3OUUwRjA5Nzk0QjIxM0RDQjJBRDM5MzQyN0FFQTZCCis6MTA5NjgwMDBBQkEwMjc5NDAxOUQzREY3ODM2NDFENkU5RDhFOTc1RjZGCis6MTA5NjkwMDBGMDcxRDEzMzk5NTg5QUY1M0JGQTdCOTlFNjk5QURDOEE4Cis6MTA5NkEwMDBEODg2NDU1M0Y1QzYwNTVFREY2OTFBOEE4REEzN0MyREUxCis6MTA5NkIwMDA3ODMwMDZBQ0JGRDEzOTEyRDU3N0Y3RkIxMEE4NTQ3RkFDCis6MTA5NkMwMDA2NkEzRDU4QkZEQkZFMzQ5NjdGRkEzNzMzOEJFNzZGRDY0Cis6MTA5NkQwMDBERjg4NzlGQzBEQzhENDZFNTYyODMxOEFGMEU4ODJBRjU1Cis6MTA5NkUwMDA0MTEyQzdGMTY2NjIzQUI2NkJFMkVEMDYxNzJDRUYxRTI3Cis6MTA5NkYwMDAwRjE1NkJDRkU5MTlERDkxMjY3OUQ2NzJGNzEwQkZGRUYxCis6MTA5NzAwMDA2MjRFMDYwQzA2RkI5RjRDMDJGMjVGOEQ3MTdDRUNGNkZDCis6MTA5NzEwMDAwQzJGODAyQjkwRUNCQjJDOEJFMzA3NzAxMTlCQTdGNEQ0Cis6MTA5NzIwMDA1REI5MzQxQjJGOUVCOTQzNEIzMDdFOEMzNkY0Njk0OEFCCis6MTA5NzMwMDBGNzg4QjFBRjFCRjVENkE5QjgwQTcyMTNFMjU1OUMwRjkyCis6MTA5NzQwMDBCNjVDQUM4MTMxNkQzRTlCQ0ZGRTU3NjQ3MzI3NENBRjQ2Cis6MTA5NzUwMDA5NzQ2RTFBQTlGODI5NTkwMDc3MjJENDA3RjY3MDFFOUE1Cis6MTA5NzYwMDA0OUQyRkMwRjJFNzg5MEU4NTY5MUFFNDU0ODU3MEEwQzI2Cis6MTA5NzcwMDBGNkZDMUI0MjdFN0NDRkE0MDFFNTRBMzNEMkIxRjRBMkIxCis6MTA5NzgwMDBFOUUzOEMyMEZGNUJCMUQ3NEM2QzQzMDFGRDNGQjVFN0FCCis6MTA5NzkwMDA5N0NEQUI2QjdFODkyRjBGODE5NTRCMjM1RkZDQ0U3OUU0Cis6MTA5N0EwMDBCM0NCRUYwOUJFNUZERTk4MjZGRTU2MUE3RjNBRkQ3Q0VBCis6MTA5N0IwMDBGQ0JGMDY4M0ZBMDEyRDEzNEI4NEE3RjAxOUY1OEVGNzMxCis6MTA5N0MwMDBBMTVDQjMzNTY5MUU2MjU1MkU2M0UzNzQxNEYwREIzRDcyCis6MTA5N0QwMDBERTI0OUQ0QUM2MjFDNzVGMTM3QzFBRjU0RkJDNTBEOEMyCis6MTA5N0UwMDA5RjFCOUY2Rjg5N0FERjAyOUQ0QTlCQUVDQjlFRTVFMzZDCis6MTA5N0YwMDA1NEVBRkY0N0M4RTI3QUFDRUY1QTU3NEFEQUMxRjc3QjFFCis6MTA5ODAwMDA0NUZEQ0I5RjczRDYyQkM1OUY4RjRGRjIyNzFENDM3OTA0Cis6MTA5ODEwMDBCNEQ3MjNGRTU5MzMwMTg0QzhEMDVGNjgzOUMwMjVGODE2Cis6MTA5ODIwMDA3RjU4OTNERkRFMzY3RTE3MkVBREUzRDFFNDI5NkNCRjdGCis6MTA5ODMwMDAwRDkyRjMwMkNENkNCRDc4OTM5RkM1NzI5RDYyQkQ0OUI4Cis6MTA5ODQwMDBGRDQyNDg3RkZENTIyMTc3MzJFOTAxM0UxRUVCMUU1ODUyCis6MTA5ODUwMDBGRjYxRDE5RjIyNzUwMTMwNzlGNkI1NDM3NjI3NDNFRDNDCis6MTA5ODYwMDAxQUY5Nzg0RTYyRkNEQzA3NjBDRUQyMEJGNkY1MTM3QzU5Cis6MTA5ODcwMDA1RjVGQTk2N0Q3RTI3RTdFQTVDMjA4NjFFM0Q1ODBFRTZGCis6MTA5ODgwMDBDNzEyRUJFNzU4QkRDOEIyOTBDOTQ2MDIxRkZDNTk0RDNDCis6MTA5ODkwMDBBMjg4RENGOERCMjBFREFGNjFFM0I3QUI4RTc1RTFCN0YyCis6MTA5OEEwMDA5MjgwN0EyMTFDODM5QzNGMDJBMDRCRTEyOEUxQkYwMkY5Cis6MTA5OEIwMDA1NjcwRkMwRDA5RkJBQjUzOEM1RTg1OEQyM0M3M0RFNkNFCis6MTA5OEMwMDA0MUY2QjQ2NjE1QUNEQzU0MjA4Nzg2QzRFNUI3MzdFRUE0Cis6MTA5OEQwMDBGMTIwNUQ0MzRDRkZGQkQ4OTI4Q0NDNjFFQjFERDc0MzRDCis6MTA5OEUwMDA4Q0Q5MUI0NUU0NzY1MkJGRTc2NUM4Q0Q2MEZERTYyNUZGCis6MTA5OEYwMDBDODJENjU3MDA4NTYyNjU5QkI4QzBGNTY5RUE0NzFDMUExCis6MTA5OTAwMDAzQzU4NDRDRTM2NEE3QzVFQTVGOEM0RDlCMzY0MTc0MEFGCis6MTA5OTEwMDBGNjVBQjIwQjMyQjQ4RUQ1NzhDNkMyN0Q0MEIzMjJBNkI5Cis6MTA5OTIwMDAwRkE3RkRDQ0ZENUNBRjI5NjBBMTlDRDRDNjMzQjkxQTRBCis6MTA5OTMwMDA3QzZGNUNEQzg0RjhDRThBQTdFMEI1NTY1RTlFMjhDMEJBCis6MTA5OTQwMDA1NzBCQTU2MzY0M0YzNTVEMkNGNTE1RUM2M0NGMzNGOUY4Cis6MTA5OTUwMDAzOTUxMjA2RjIzM0JCODFEMzBEODM0MjRGNENDODc0OUNCCis6MTA5OTYwMDA3RkRBRUYzRjIwRjhBNDhFMzM2NDkwMkU0M0NEQ0U5NzVDCis6MTA5OTcwMDBBNkNCRjU4ODU0NUM0RjZDMTZGNEUyREZENUNCOURGMjk0Cis6MTA5OTgwMDBBQUNDMTRGMkNBODZGMDI5NDBGMjM1RkMxNDY0MTE1RkE3Cis6MTA5OTkwMDBDNkM5MTc2RTYzRjBBNTJGNkFCMDkzQzk1NzJCMUNGNTgzCis6MTA5OUEwMDBBMEZDNUMwNjEzNTQ5QUEwQ0I1ODJFMDE5M0NBMzY0OEVCCis6MTA5OUIwMDA1MEY5REIwRTI2RjdBQ0RDNjYzMTc5OUY0RkYyRkYzRUEzCis6MTA5OUMwMDA4OThERkY5QjM5Qzk4NTExRjZEQzFGNEY1RjgxRkIwQjI5Cis6MTA5OUQwMDA5M0ZGOERGODlDQzk4OTg0RjI1NDY3NDFEMUZEQjI1NjNBCis6MTA5OUUwMDBFMkVCNzVBRkEyRkJCMURFNUUwQjQ4M0ZFRTk3RkFEMzE4Cis6MTA5OUYwMDBCODRGOEMwODNCNjlDNDBGOEU3NUJDNDdEMDNEMjJDQTU2Cis6MTA5QTAwMDBEQTc4MTJDNjcxN0VEOUJDQTA1RTdGQkVFOTc2NUFDN0VECis6MTA5QTEwMDAzRTg1QzM0MzZDNUU0OEVFNTZGMzdEQ0M4RDg3ODZGMzVFCis6MTA5QTIwMDBCMkU4RkNFNzYxRTMxRjdGMUU4NkE0RkFBMkYzMzA4QzQ0Cis6MTA5QTMwMDBGM0IwNTFFMkZBNTNGRDM5MUZCRjBDN0RCNDRGNkZFRTA2Cis6MTA5QTQwMDA3RDlDRjhBRjlFM0NCN0ZBMzZGRENCNUQ3QTczODVEMDJFCis6MTA5QTUwMDA3MzU3QzJDNDVDODVFOTkxM0I3QzM5NTU5MTA4RUY0NzQ3Cis6MTA5QTYwMDAxMEVGMzc3RjcyRjQwMzQ4MEY4QzI3MTdFMjNFQzVGMEUyCis6MTA5QTcwMDA3RTU0MjIzRDk5ODJBMzZDN0NFNTE1Mzk4QjdFOEEyNzIyCis6MTA5QTgwMDA3ODgzOTYyQ0UzQTc4MENFRjQ5OTI2RjREOTdDRkNERjZBCis6MTA5QTkwMDA0NkZERjVFMDc0RkQ3QkYxRTEwRjFEMjM3QjAzQjRFNDhCCis6MTA5QUEwMDA0RUQ0NEZBQjUzMUFDQTQ1N0ZFMzA2MERFNTY4Qjg5MTEzCis6MTA5QUIwMDBDMTI4MzczMTU1OTMyRTY3NjUwOEJBNTBGRTZDRkI2Mzk5Cis6MTA5QUMwMDAyOEI2NjlBNDI5OEE3NjhGQjkxQ0JCQjVDNzVGMUI0QjIyCis6MTA5QUQwMDA4MjQ0Q0Y5MzMzN0M0RENFRTczRkMzRjVBRjI3NjMzMjRCCis6MTA5QUUwMDBBMzRGQ0Q1RUFCMjE5RDgzRkEwNkFERDBFRjUyNDNDOUEzCis6MTA5QUYwMDA5OENBRTQ3MDE4QzdDM0YxQkRBOTIzNEQ2REE4M0Y2MTkyCis6MTA5QjAwMDA2OTFGRUE3MzNEMDU0QjUxQkU2MzlEODRFN0RBQzY4NDQ1Cis6MTA5QjEwMDA4NkVGN0RCMTI1RTAzMzkwQzUwOUIyQUI4NkEyNEU3RkJBCis6MTA5QjIwMDA2RUI4RjE0RUI4OURFQUE3RTBGNUQwNzRGQkRBMTc0QTlCCis6MTA5QjMwMDA4MTVBQjA0RkUwMzg3MkMxM0NGQjk0NTQwRUU5OTI2M0Y1Cis6MTA5QjQwMDBDNUY1RUUzRjA5RjlGNzE4MDlEQTZGMjBGMzQ5NEI2M0MxCis6MTA5QjUwMDA3MkVGMTUzMkUwOERDMTRGQTRDQjBBRTYyOTVBQjBFRjVGCis6MTA5QjYwMDBCMDc5MUFGMjlCRERDNUQ2MjVEQjQxOUNGRDlBMTI2OEJGCis6MTA5QjcwMDBDQkFCRUY3NzZBQkYxNUYzOUU1OTMxMzI0RUYzMUVDRTUxCis6MTA5QjgwMDBFMEJDRjczM0JENEZGQkVBRjE3MEY2MTAyM0ExNzc3NTA3Cis6MTA5QjkwMDBFQTMxN0NFRjREMkJEMDE3QTU2RTVBNzA5RkJCNUI3RUQwCis6MTA5QkEwMDA4Nzg5RjJCNzA3RjlDNjM2OEVCMTFFOERDQTlEM0QzQTM4Cis6MTA5QkIwMDA5NTIzM0QzMTJBM0YxOUZDQzQ2N0M3NTlCQkVENjk5RjA2Cis6MTA5QkMwMDBFRTQzMzlDOERDRkQyNUVDOEY3OUREODk5REQ4NkY5NDkzCis6MTA5QkQwMDBGNThGRkQyQTlBN0U0ODQ3OThFRjNCREUzODJGNkZGMUNDCis6MTA5QkUwMDA3MDNFRDY3ODAyODQ2RjlCODdEQkUxMDY1ODI0MkYxOURDCis6MTA5QkYwMDBCREJDOUY1RUQzRUVCNDczQzM2NjYwNkEzREIwRkY4MkE2Cis6MTA5QzAwMDAyRDc1MEVEODZGNUNFNEE4RUY1RTJGMkY3OUI4REVGMENCCis6MTA5QzEwMDAyQTA5MzA1QkIxMkNBRUM3Q0Y0QTMyRDU5M0U1QzUxM0M0Cis6MTA5QzIwMDA2ODdGMjhCMzU0QjIwQjA2MjVBN0RFN0VENEMzRjdCQkVBCis6MTA5QzMwMDAyNzNDMUFEMTE5ODM4OTZGOUY2NUZDRjBFQTFFQjI3QjFECis6MTA5QzQwMDAyMkI1RjMwRkU3OTAzRkY1QUFCOTgwMTUxMUVGQjg1RTgyCis6MTA5QzUwMDA1NzY0M0M4ODJBQkYxRTJGNThFNzRGNDk1NkRDRjMyNzJDCis6MTA5QzYwMDBDMEE3NjlGNEY3NzYzQUU0N0E5Nzg3RUY3NzY3QzU3QTAxCis6MTA5QzcwMDA5MTdENTYzN0VBOTkxODEzNDMyMEY5MzAxRTQ3M0U3OEY0Cis6MTA5QzgwMDA4MkFCQ0MxNkM2ODdDMTVBRDU0MDdGNjhBMEQ3NTM3NDIzCis6MTA5QzkwMDBERjcxRjM0MUFFQjkyNTg2RkFEMUNERjc2RjA5Mzk3QTc0Cis6MTA5Q0EwMDA1QUYwN0RDRDk5Rjc5MDlFRDhBRDdCQkFCMjIxRTREQjE2Cis6MTA5Q0IwMDBEMTJFRDRGMzAzNkQxRTBGQ0FGOTlGMENGRjVDNzQ2Qzk4Cis6MTA5Q0MwMDA5RkU0REYyNDFEQzRCNzgxMjhCNzlCQzc3NDI2M0ZCODIzCis6MTA5Q0QwMDA5RUEzNUM3RTBDQzg3NUQxN0I5M0QxMjU0REE3Q0JDREJGCis6MTA5Q0UwMDBCRkI3OUIzRTlCRUYzNUI1OUU0NEI2MTVGMTlCNDgxMDIwCis6MTA5Q0YwMDA3RUFCOTRBMkY4RkQ0N0YxRERDNjJCMzQ4OTU3OEVFMzg1Cis6MTA5RDAwMDA2NUZFNjlFMEY1OTQ5NDNDODhFQjdCOEY5MEQ3M0RDQTYzCis6MTA5RDEwMDBCODg2N0EyMTZFQ0I0RDkwQUZBM0U5N0E0OTcyQzgzQkUxCis6MTA5RDIwMDBFQkU3RjNEOENGRkREODBGQUI3RkJGMzJFMUU4QzdBRThBCis6MTA5RDMwMDAxNzQ2M0VGMDc1OTFFMEVCNDJGOUEzQUUwQjFCQUY5REM5Cis6MTA5RDQwMDAwMjZGMDNCMjVDQUU1QjhBQ0JGNURCOEQ5N0JEOUZGNkVECis6MTA5RDUwMDAwNUFGMDJENDM3QjVBMTA0RDlERkIzNDI4OTFDRjJBQkY5Cis6MTA5RDYwMDBCRjVFMzVEMEZFNjE4RTEyRUREN0Q0RDQyOEYwOTNFQUQxCis6MTA5RDcwMDAzN0M2QjBGRTYwNzgyM0Q5RTU4M0RFMDREOUU5NDdFQTI3Cis6MTA5RDgwMDBCRjY2RERDNkU4RUEzRjUzMDMzRTkzRjkwM0MxQUI4RURECis6MTA5RDkwMDAxOEE4MTc4RkM4RTRBRkY1OUY2OTlFOTUyQTMyQ0Y0MTY2Cis6MTA5REEwMDA4QzhGMzFGQzAzODgxRkQ5RDVFQUE0MTE4RUY4RjY4NzcxCis6MTA5REIwMDA5OEUyNjNGREJDRDEwQTU5RDRBN0RFOTAxNTQzQkJCQjIyCis6MTA5REMwMDA3RjkxNjZGNjUxQUQwNDIwN0ZGQjgyMUY2ODRGQjY0RTJGCis6MTA5REQwMDA2RjFGMEMwRDdENENCRTZDNkExQ0Y2Mjc5RDQ1REI5N0YyCis6MTA5REUwMDBFREUxRThDNzEzN0Q5MkUzN0Q1MTNDMkFDMURFMjk1ODlECis6MTA5REYwMDBBN0ZFMTk2QzY4RDhCNTY0OUQ2RDlFRTIzQkEzQTU0NThFCis6MTA5RTAwMDBDMTdEMTMwMjI2Q0U3RjNDRDFENUY3M0JFNEQzRjc2NDY2Cis6MTA5RTEwMDBEMjgzNkVGRUZDQjU5QzBDQzhDQkE2NjA2RjM0NDlGM0IwCis6MTA5RTIwMDA2NkY3Nzc1REJENDI3QTU0Njk4NEFDNEZDMjUxMTM1REM5Cis6MTA5RTMwMDA2OERGRjYzNzdBMjhCRUE2ODQzNkQ0OTRCNUJCMUJBQjUwCis6MTA5RTQwMDBCM0JCNDFDNDNENkM3OUU4RjgzOTFGMzc2MDcyRkQxRDIyCis6MTA5RTUwMDA4NjcxQzBCODRBMERGMEI4NDYyRDE4MTI1MDdCNTM0QThGCis6MTA5RTYwMDA1MEIwNjQxNUM1NTNBMkZFQjdCQURGNUJBODVGQzlEQTZDCis6MTA5RTcwMDAwQjY3ODNFN0QwQUZDMkZBNkQ3RTFCRkFBRDgwQUYxRkQwCis6MTA5RTgwMDAzRTQ1RkQzMkY1MTAzRDNCNjNBQTVGNkYyQzQ1MEZFMTY3Cis6MTA5RTkwMDBDQ0Q5QjNGMjcyRTA0REU4MkY0OUYyQUQ3ODRDNUE5RjFECis6MTA5RUEwMDA3MDUxQzQzQ0M0OEFDMUU4OUQwRTdGRUFCREYyN0M0Nzc0Cis6MTA5RUIwMDBEQzU0RDU4NzNFMjY0NTU4RDlCOENEMUEyRkQwMEZFRUExCis6MTA5RUMwMDBGOUVEQzY4MUQwQkY2Q0RDNjI4RDU3QTEzN0QwRUMyRTg2Cis6MTA5RUQwMDAxNjk3MUE1MjkzRDk1RURDQkZFNzg2Mjg4RTA4NEE4QTA1Cis6MTA5RUUwMDBFMkMyQzM1MkREMTJCNDlGRUQ3QTRBQTM5QTQzQkNDMkM4Cis6MTA5RUYwMDA2RDU2MUFGNUM1RjAwQzhGMjk5QkQ4RUZEODUxRjQwNzkxCis6MTA5RjAwMDA0MEJFQzE0Qzk2ODkyRjI5OERDQTJGMEJFOUY5Q0Y3MjFCCis6MTA5RjEwMDAzODRBNzg4QTM4NTc3RjA1NzkxRkVBMjk3RjNFQTFBQUY3Cis6MTA5RjIwMDA2NkIyOTgzRjkzOTZCOUZEQTIwNjhBQkZCRjVBRUREQzkwCis6MTA5RjMwMDAyMTJGOUJDRUI3MENGMjhFM0QxRkFFNjUyRUY3RTU1QzUwCis6MTA5RjQwMDA3QzUwMEU5NEM2RUYxRTQzM0UwQzM1QUM4Qjk1QTMxNzg4Cis6MTA5RjUwMDA3NDY2RTcxNEY4NDVBNjZBRUQ5NENCRTNCMUE3MTgxRTIyCis6MTA5RjYwMDAxMDYyQzJCM0IyQ0MzODYyN0VGNUFCNEQxRUVGNDBBNTk1Cis6MTA5RjcwMDA4OEU3NzFDMjNFNjM3ODQ3QTQ5OTVDNEZFM0RGRUVCNjkxCis6MTA5RjgwMDA4MzM5OENBMzc5NkYwQjU5Mzg3RkIyRjUyNEM4QUNGRUE2Cis6MTA5RjkwMDAwRjFCNjQ5MERBMTEwRUJDRTZBMUY5NUM2NTkyQkU2QUYzCis6MTA5RkEwMDBFMUZFOURDNUZFMjExRDkxNTVBQTYzREY0MkZEMzlCOTMxCis6MTA5RkIwMDA2RjM1QTFGQzNCRTFDRkM5Q0U3ODY2N0ZDRkIzRjBCMzVDCis6MTA5RkMwMDAwNTUzRjhCMzQ3NTZCMTc4QjFBMjc2MUUyRUNFOEZCQTlDCis6MTA5RkQwMDBBQUY4QjE5RkM5MEIzMDc5RDlDN0ZDNDZDNjE0QzgzMDVFCis6MTA5RkUwMDBCRjExRTEzRENDNkYwNEYyMjcwRDJBMDc3QTVBQThEQzk1Cis6MTA5RkYwMDA4NTRENTdFMkY5NTk2QUE0QTkwOUUzQTU5RjhFN0Q5MDgyCis6MTBBMDAwMDA1NUQ5OEZCQTgzQ0U1NTAyOUQxODNGREY2OUMzRUM4OUJECis6MTBBMDEwMDA4NEIwMzg2N0Y5NDFGRkVGM0EzMDFFQjNEM0NGNjE4MDg3Cis6MTBBMDIwMDA4OTBFQ0IwMUNCN0QxOEVGREYxOUU2RUQ3RjI2ODczQTRECis6MTBBMDMwMDBGMTNDNjJCRjM4NDcwMkM1RDJERTU3RTBGRkU3NjUyRjJCCis6MTBBMDQwMDBEMTgxMzYxMDZGRkY5QjVFRUNDRkFGMDgzODNEODdGMEIzCis6MTBBMDUwMDA5OTg0MTkxRjExMUZCRkM2RTFDNjgxQjlENDNGQTkwMDU5Cis6MTBBMDYwMDAzNjVFN0M2MDFFMUY2RjAxQjdFRkExNzU0MzA1M0VGNjlCCis6MTBBMDcwMDA5MUZDREY4NDg3NzA0ODczNkIxRDFFMkE4MzZBOUE4MDY3Cis6MTBBMDgwMDBEQkNERkU1QTgxNzc5NUZEODA5MkU0RkI5RDg4MkI5NTcwCis6MTBBMDkwMDA1RTM3MTVGNjM1ODE0N0E1RjkwN0Y0NEIzMTdFQzFGNERCCis6MTBBMEEwMDA3MDFBQzdGREM3RTJGQkY0NUIzREVFN0VFRkI5RjE0NUU4Cis6MTBBMEIwMDA2RDlGNDgyQjhDQzU3RjI5Mjc3NTg1QzE2MUVCNzBBRURDCis6MTBBMEMwMDA4OUMxOTExQjcyNjk1QUJFNTU4RUZCNkI1OTE3RjFEMDJECis6MTBBMEQwMDAyNEFEN0Y5QkNGOEFDRUVEOEVBQjVERjNFODhENUE3NEI1Cis6MTBBMEUwMDAyRUU5MEZGMUY1NTcyREJFMkI3MTlDODI3RUUwRTlDRTUzCis6MTBBMEYwMDA4NjQ0Qjg3NEJCRkE4NDY3Q0FERTYyRkZDREU4MEE0Q0I2Cis6MTBBMTAwMDBEOTZCRUNCRjVBQUJDRTAxRDdCNDVGRTRBODFGMzZFN0RBCis6MTBBMTEwMDAzQkRFN0JGNTc3MzhERTlGRUYzQzVERTZBMkEzRDlFNjE4Cis6MTBBMTIwMDA5RjgwNjM2RTNBQUI5NjNCQzUxMEZCNUM5QURCOEY5M0M2Cis6MTBBMTMwMDBCMEQ4OEYyQkMxNjcxNjNBNjFERUFGMEY2RUFFRTFGNjc1Cis6MTBBMTQwMDAwREI3NjNGRTEzODgzQTZFM0NDQzAyRkQyQjYzM0QwRUM3Cis6MTBBMTUwMDAxQjFFMDk2Q0ZCMzZENzMyQkRGRjdFRUQxMzE0ODdCMzhGCis6MTBBMTYwMDBGQTE1RjA1RjM1M0Q0RTk3RUU0QzUxOUMyRERERTdEMzRGCis6MTBBMTcwMDBGQkEzMTQ3N0EzMzhEQjc2NjZDOEZCNThCOUNEOUJEQzBDCis6MTBBMTgwMDA4QUYyN0JEQTNGMzcwQjExRUMzN0I1MDJFM0Q2RkRBRTJFCis6MTBBMTkwMDA3ODgyNUI5RUUyOUZCQUE5RTg3OTk5NUQ4RUY0RjBGODI3Cis6MTBBMUEwMDA5RjBENkI4REM1RjMwMEVFNTVGODc5RkQ3N0JEQzk3QjJBCis6MTBBMUIwMDAxMTBGRDQ4RDQwNzE1QUEwNzVFMDM1RjhGRUY4N0NEM0FDCis6MTBBMUMwMDAzQUY4MDVGOUZGRkM3QzRDODVGNEIxNjY0NjRGODZGOUY4Cis6MTBBMUQwMDA2QjNCMERBNDlCQUY5MzkxQTY3NTVBOUMzRERGNUJFQjQ3Cis6MTBBMUUwMDAxMTM2REQwNEQ5NEY5OThFOTkwREI4OUU2QTk0MDkzQUJCCis6MTBBMUYwMDBCN0FCODkxN0M3RTc3RUM1MjNFNkVERDZCMkY0QjlFNzVBCis6MTBBMjAwMDBFMzU2MENCNEIyNzY3QkU3NDgxRUUyRkYxQzRGRjYxMDEzCis6MTBBMjEwMDBDNkEzMUEzREI0QUU3NzVCRUFFMzc4RDRCRUJCQURFRTFECis6MTBBMjIwMDAyNjhBQTc1QkFBNDcyNjNBNzI1QUIxNzUzODI4RUNBNjQ3Cis6MTBBMjMwMDA3RTExM0ZEREQzQzhGREQ2RTczQjVFRDdGMEJDNjY4RjBECis6MTBBMjQwMDBEOTQ5RjkwMDRBRTY4N0Q0N0U1OEYwM0JCM0Y4MDRDNUYzCis6MTBBMjUwMDBDOTg3NEI5Q0JGRjQyOURDQ0ZFRjBGMDdCQUIzNDVERkFBCis6MTBBMjYwMDA0N0U4N0RBNkE5RTM4NTg3OTAwRUE2N0YwRjkxN0YwNjFDCis6MTBBMjcwMDAwRDVCMTgxREJBQTUyRjQxN0VFRjlENjM3OTdFODE3MjFCCis6MTBBMjgwMDBCNURBNDM3MjE2QzFCODlDOENFN0EyNEVGRjc5RUY2QTJCCis6MTBBMjkwMDAwRjlEQjM2NkY0OTA4OUY2RkIyOUVCMERBMDhENDhEMTk0Cis6MTBBMkEwMDAxQkYwN0NCMUU2Rjg5NTNBRUQ5NUNDREU2OTI4QjBGMzY5Cis6MTBBMkIwMDA2QjU2QTU1NkUwN0NEOTc0Rjk2MDdERDFGOTkwRTY2RUI1Cis6MTBBMkMwMDA0RjIyM0ZFRjVFMDIwNkZBNjNCRUI5NURCOTQ3NThCRjQxCis6MTBBMkQwMDBBNzU3RkE3NDU0MDU1Nzg3QUZDRTdEMTNFNTg5NkQyQkM4Cis6MTBBMkUwMDBFODI3RkJBMjU2MEVFRDI2N0Y3NzEwMENGNjNFMTIzQkI4Cis6MTBBMkYwMDA0Qzc2OTQxNjkzQzE0MkJCRUFGRkNBMzQ1RjRDNjcxMDk4Cis6MTBBMzAwMDA1RENBRkU5NTQ3RDdCMEY2RUE2QUNGMkNCMkNCNUFGOUIwCis6MTBBMzEwMDA3RUEzQjM3RkI4REY2ODcxQTc1RDI1N0I3M0Q0REZGREIzCis6MTBBMzIwMDBFMzhGRDNCOUIyRUFCMkFCMTQyOEE4OEY3NkQ3RUEwRDdGCis6MTBBMzMwMDBFRjY5MkVBMjBGRUM1MjFFOEZEMEI5MkVDOEI3OTRCNTdDCis6MTBBMzQwMDBCMzQzQzczRkZDMEYyRjE2RjBGRDg0RTJCMkQzODVGRDY3Cis6MTBBMzUwMDA2NkY3NTNDQTdFM0JEREIzRjUxRjVFNjRCMjlDRjRGMjMwCis6MTBBMzYwMDAzOEE4QTI1QUJGQzQ3NTc5NDI5QzJGRUU3NUU1REQyNDRBCis6MTBBMzcwMDBCRDdDQkQ5QzE2RUIxODY3MTZGRDZERjQ4RjkxNUYwM0Q1Cis6MTBBMzgwMDBENzZDRTQ3RTE2OTgwRTNGODZBREY3RDM0QTgxOUY2RDU5Cis6MTBBMzkwMDBFRjc3MTlBQkJDM0YzMTk1RDcxMkYyQzdDQkU0QjVBQzIwCis6MTBBM0EwMDA1NzkyOEFCNzRDNUU4QkJENUU0NzU3NUIxMDYzRjMzQjk5Cis6MTBBM0IwMDA1NjBCRDkzRTlDREYzNTE2NkM0Njc5OTVDMEVDRDM3OUE3Cis6MTBBM0MwMDBGRDA5RkIxQ0E1MDlFNUYwMUFEODgyRUJENzUwNEMzQ0RGCis6MTBBM0QwMDA4NzFDNkM3RTM3NzMxNDRCRTNBQjQ0OURGMjUxNjkxRUFFCis6MTBBM0UwMDBCN0JCRTY3MUI2RDc2OTg3N0IyMTUxOTM2QkMyMzg0NkZDCis6MTBBM0YwMDBFQzI2QzQ2Mzc3NTQzNTcxM0Q3QTNEQjc2Q0RENjQ0QzBGCis6MTBBNDAwMDA5RjQ3NThDMUY1ODYzNzlBODM2MkUzREFGQ0JDQzM2Qjc5Cis6MTBBNDEwMDAyREY0NjI5QzVEMzU4RjI1NTFGRTNCNTVGMjdCRERGNUI5Cis6MTBBNDIwMDA2RkY1OEEzQzk2MjY1MEQwM0U0QkUzM0FDMUY1REI2NThBCis6MTBBNDMwMDBGMUJDMzE0OTRGM0Q2QzEyRkEwOUM3Qjk1NkZDNERDQUZGCis6MTBBNDQwMDA2N0ZCOTQwQ0E5MTlBQjAwNkVGNDM2NzEzREQzQjE5MTQyCis6MTBBNDUwMDBEQjNERDc4MzI0RDc2MkZEMjRFRDVGMEQ5NjJFQjFCRTgwCis6MTBBNDYwMDA2MUQ0QjZDQkY0REI2MkVCMEJGNEU0OEQ0MjNFQTdERUE1Cis6MTBBNDcwMDAyNzYzRUY3M0JDRjc3MjNDQzNDMjZFRDYzN0M3RDYyRkMzCis6MTBBNDgwMDAyQUQyQkVCNkI4OUVCQzVFQzhGNThENUU2MTRGQTQzN0I5Cis6MTBBNDkwMDA1MzVFRDBBMDcxNEIwMkY5M0NCMEM2MzJCN0EwRDY0MjkxCis6MTBBNEEwMDAxOUMxN0M5NDEwMzhFQzYzMjZERjM3MjIzRkVERjg5MTE4Cis6MTBBNEIwMDBBMjI3QThCNEVEODE1MkYzRUZCNjAzQkMzMTY3REU0OUExCis6MTBBNEMwMDBCNUU3QjZGMUZEMzc5NTFEQzdCRDNGREJGOTZEQThGOUJFCis6MTBBNEQwMDAwQUY5RTQxNTdDNjgxNUVCNjVDQTVFQ0E4OEY1NkU1MjA4Cis6MTBBNEUwMDAzRTkwQUM1QTQ5OEM0QkNBMTIzOEVDQURCRDQyNUVFNDhBCis6MTBBNEYwMDAwMDdGRUZDNjgzRjlDRjc3RTEzQTk1MjMxNkY5RDcxMDlECis6MTBBNTAwMDA2QUUzNzY5QjYyMUFFQjhCRTA2RjlGNzMzRTIxRjI3OEQxCis6MTBBNTEwMDBFMzk5NzdEM0ZFMzc1NkRCNDlGQkRFODA1RTVFN0ZEODVBCis6MTBBNTIwMDBGQkVBMUFCODQxQzNCOERENjA2OUZEMzE1NkE4M0ZENEQzCis6MTBBNTMwMDBBOEM3Qjk4RTg1N0ZDRkU4Mzc4QUYxRDlFNjUzNENDNEQ2Cis6MTBBNTQwMDA0QkZCQzMxQjYzNjVFMzgyQUVGMzE1NTNCNTFFMjJCRUZFCis6MTBBNTUwMDA5NEU2REIyM0U3QzNCNzMxOTE1N0I3NjNGMEU1MTc0NEJGCis6MTBBNTYwMDAxRTgyNTM1RjJGMkVBOUFGQkZFMEQwQTc0MjVGQkY4REUxCis6MTBBNTcwMDBGQzdGRUVBREUwN0ZCNTcxMThGRjc2RDkzODM5ODNBOTNECis6MTBBNTgwMDA3ODI1NERGNDhDMUFGQkQyMTQ4RkMxRjU4RDc2NDBBNjM4Cis6MTBBNTkwMDA4M0YyMTUyMDBFQTQxN0IxMjFFQTNCQkY2MTExREYwMjNGCis6MTBBNUEwMDAyMkNFQTQzNjNBRjcxOTM5MUE3MEMwQjFFRTM0NjBCRTIzCis6MTBBNUIwMDAxQUY2OEI3NEZCQjdBQjM0QUVDRDZGNjZCMzUwM0U5OUQxCis6MTBBNUMwMDA2RDVGRTI3MjQyN0ZBNDU0N0U5QTVEREFGMTFCM0NDNjU1Cis6MTBBNUQwMDAzOTRCRkJENEM3OEYyMDdGNEY4NTgwRjY4N0QyRjQzQjYxCis6MTBBNUUwMDBDNzg5QkQzNzUxNUUzRkI5RUE0MzQ4MzE1RTJGNzIyRUFECis6MTBBNUYwMDAzOEJEOUQwMkFGMTdFOEI1RkZFM0QyMjdENjkzQjc3NUY0Cis6MTBBNjAwMDA5MzFFMDU4Rjg5RjFDQkZFRDg0NjQ4MzJCQzg3ODBFQjdDCis6MTBBNjEwMDA5MzExMkM1NzYyM0VDOTEyMURGRERGRUY3QTBEREVERTZECis6MTBBNjIwMDBFMEZFOUQ0NzEzNzE3QUEzM0E3RkVGNkVCNjBGMTVCMzI0Cis6MTBBNjMwMDA3RjJFNTZCOTdEN0NGQTEzQTlERjYyNUU0MjdBQTc2NDQ5Cis6MTBBNjQwMDBFMEZFNzZCMjI3NEZGNkQzQTZEQzI1MkFFNkE1NURBMjZBCis6MTBBNjUwMDBDRUE0N0E5QkY2MzdBOTZCMEJENkU3MjZFMEU3RkUwQzczCis6MTBBNjYwMDAxMUI1NTA4RkRBRUI0RkNERjg1RTQwM0E0RjY0Nzg1QzBECis6MTBBNjcwMDBFMzQ0RTZERkU4NUNGRkM0MDEzOThCNEMzRDMxNzI2MzkzCis6MTBBNjgwMDBEOUY1NzM1MkU4NkRCQkRFQzkwM0IyODVGREE1NDdBNEI5Cis6MTBBNjkwMDBFQzAyRDZGRUE0NjI0NThBRTYwMTQwOTY5RjA3MEJGOEJECis6MTBBNkEwMDA4MzE5RDkyMTk3QTc3NzI0NTVENDMzMjc3QjM0RTk2N0I5Cis6MTBBNkIwMDA2QzZFNkU0NzNBMTlGRTlCMzI0RDJBRkE2NDk1RTg5QTAxCis6MTBBNkMwMDBBMTNBRTdEM0E2NzMxMEYzMTU5QUE2RjI3NzA2QTM2RjAzCis6MTBBNkQwMDAxMEJEQTdEODczQjk0QzNDNjlBN0QwMTM4M0QxRTJGQTU3Cis6MTBBNkUwMDAyNDIwQ0U1RjAzREU2Q0YxQkMwNzE3QkRDMTE2RTdCQUFDCis6MTBBNkYwMDBCNEYxMUIxNkY5MTRDMzNBQzc2QjM4RTZBMTc5MTg2RThBCis6MTBBNzAwMDAyQ0FGQzcwNkM0M0NEOEY1MDY2M0ZDQkM3NTUwNDk2ODNECis6MTBBNzEwMDBENUUwRTNENTlERjg5NDFBNDc1Qjc1QjgwQkI3RjkxQUU1Cis6MTBBNzIwMDA0ODc2NzUzNjExN0I1RkM2MzgwMjg1MEUwREY0OUY5RTA0Cis6MTBBNzMwMDA5MjNFQzRENkNCMEY2RjBCNTk1MjBDMUY0RUU0QkVDOUNDCis6MTBBNzQwMDBFODk4QzVGQzFEQjQ0Rjc1MkIyQkNENkRDM0JDNEUxOUJECis6MTBBNzUwMDAzMDZFRkNDODlGQkY5MTdCMTVGRDUxRTZGRjIwNUM2QkZFCis6MTBBNzYwMDBBNEQ2NUY2QjYwMUU1QzUyQzI3NUI1MUI5NTNGNzVGRTJCCis6MTBBNzcwMDBBRUZFOEU1NkIxRkUxOEZDRDFBMUNFQjUxODg3NTQyMDdFCis6MTBBNzgwMDAyMUUyMTkxRTAzRjNGNTY4RTk3QjRBRUIwOUQ0OUU2N0MxCis6MTBBNzkwMDA3RDUzRUQ0QUQyRTlGMjhCN0NCMEExQkNGRkJEOTVEN0M5Cis6MTBBN0EwMDA0RkIzN0ZBODc3NjZCOUZDQUNEQTZFQTdERDVERTM3QUJDCis6MTBBN0IwMDBCRjU3Qzg2QjI5QkZGMkFEMUE2NzI2QkNBQ0UxQjlBQzc0Cis6MTBBN0MwMDBENkU2RDFCMzU4MUY1MkI1QjhERjQ2NkU1MTAwRURGODRBCis6MTBBN0QwMDA5OTg2REU4QjIxQkU0QTdDREYwNTNDQ0YwREJGODgyOEUxCis6MTBBN0UwMDA1QzdGOUY1MUI5MUREQjc4RTdBNzI1REM5RjRFQTE5N0MxCis6MTBBN0YwMDBCRDE4RTFCQzU5NEM3RURENzZERjg4NzE4MkUyODk0MzY5Cis6MTBBODAwMDA3MEI0QUIxOUVERjkyRDFFM0E0RkRBRERCNkFGQjZCMDI0Cis6MTBBODEwMDBGRDc3QzQzODUzRjMwRjg2QjI5QzRFNjVDOTlGNTdEQjUyCis6MTBBODIwMDAzQzE2RUU1QkU3M0JGRjZFM0ZCOUQyRkMzNzZDNzVEQTQ2Cis6MTBBODMwMDBDNUU3M0EyRjJGMjFFMkNCMkFDRkZGODU4RTYzQ0ZEQkVFCis6MTBBODQwMDBGNEY1QzFGNTY2RTM5RDJGNTIxQzY3Q0MyQ0FGNkZBNkMzCis6MTBBODUwMDBDRkRCQ0IzNDZGOTEzNkIwOEFDNTcxN0UyQ0Y2MzE3NzYxCis6MTBBODYwMDA1RTlGMDYyOTMwMzEzRkYxMTVCRUZGQzhDRENCNjMwNzhGCis6MTBBODcwMDBDQkU4MUYzOUVFRjIzRjQ0M0ZGOTBGMDIxQ0M1RkQ1NkVECis6MTBBODgwMDAzMTJBN0MwRjc3NzhCRkMyRjZDREUwRjYyQkY3MkI0QjQxCis6MTBBODkwMDAzMTNGQ0JBMjNDQUZEMTFFOEI5RTRGQ0VCRkNGMjNGMDFBCis6MTBBOEEwMDA5NUMwQjM1Q0U4MTU4M0NFM0ZGNzJCNjQ2Rjc4RTAyQzNFCis6MTBBOEIwMDBDNjQxNDAwN0MzOTYzQkMwN0E1REZCMTU4QUM3MTgyMjg0Cis6MTBBOEMwMDA4RjgwNTU5RDg5RUQ4MEY0RDI2MjRDRjZBQ0E3NzM3QUU3Cis6MTBBOEQwMDBFQTA3M0JFMjcxOTg2RTBFQjM4NjM0NEY1RUNCMjJCQzIyCis6MTBBOEUwMDA5NDhDNzYyN0UzRTcyRUJGODAwRDAxRDcwQTU4MTc3MEE2Cis6MTBBOEYwMDA5MzgwNjExRkMxNDE5NUMxMTg5N0Y3NjY3NDgyMDMwMjY2Cis6MTBBOTAwMDA2RTEyNzA5RDgwNkIwNTNDNUZDMEQyM0U4Mjc3QTlCQzAxCis6MTBBOTEwMDBCRjlENEE5NkY3MUYxMEIwMjFFMDNBMDFFQjAyOUUyRjJGCis6MTBBOTIwMDA2MDM4QzhDN0Y3NzExOEY3NDM4MjgzMDI2RTEyRjAwQ0MzCis6MTBBOTMwMDAwMUQ3MEFCODU5QzBEMjQxODI0QkNENUYyMDZFMTE3RjNBCis6MTBBOTQwMDBBN0U2QkY4QkYzMEQ0MEY4OUIwOTE3REMzRDU1QkZDMDUwCis6MTBBOTUwMDAxRjFERUMzMUE0QzJGMzQzNkY4OUY4RDMxMjFGRDczMzA0Cis6MTBBOTYwMDAxMzFEMDlDQTUzNjJGRTQyRkE0NEUxQjk2M0FDQjhCQzk0Cis6MTBBOTcwMDA1QkEyRERFNEI5Nzk5NEQ1MkIxQUJGRUUyREJBMkVBQUNECis6MTBBOTgwMDBDNTZGREQ3OUUyRjdERUZGMjBGQzZFRjZEOUVCOUVGQkFBCis6MTBBOTkwMDBFNzEzMUQyNkUxRTlFRUNGREQwRUVEMkQyODM4QTcwRkQ4Cis6MTBBOUEwMDAyOEQ5MzRDNjZCOTg4RDQ0RkU4RTU3NzNFNkIzREVFRDFFCis6MTBBOUIwMDBFM0U3OUNCRDNFOUVDRkRBMkZGMDlCRThFMEU3MEY4M0Y0Cis6MTBBOUMwMDAwQjAyRDk4M0QyRjQzOEUzNUZGODc4M0NFMUZCMzY5RTgyCis6MTBBOUQwMDBEQTYxRjI3QjgyNzlCNjYyQzkwRkUyN0VENDY4QkNCM0Q5Cis6MTBBOUUwMDA0MkZFQkFGMkZGMEFGRDY1NzcxQ0U0REZGMDFEMUIyNzZCCis6MTBBOUYwMDAxMDJBQ0VBN0JCMjdGNUNEMkRFOTEzQUNBRUU2NjdDRjY1Cis6MTBBQTAwMDBEMTlGRDFBM0IxQzZDMkJDNjlGMTFFMjQ4RjRDRkFFNTE3Cis6MTBBQTEwMDAwQ0FCNjdFNzhCQzhENDNGOEYxNzM3RjI3OEIxMkNFQUJECis6MTBBQTIwMDBEMzM4NERGQzNCMDY2QjA5RUUzM0VDNzk4QjE4NDc5QTEzCis6MTBBQTMwMDBERUFGQkI1RENFNTdDN0U3NEJFMDYzRTdBN0M4RjAxQ0FFCis6MTBBQTQwMDBGNTMzODk4RjkyMjA3RUI5OUY2MzFFQjIxRUJBRjBFNzVDCis6MTBBQTUwMDAxNzBBN0I4RDEyRTM2NUY4Rjk0QkE1RjY5RjE1RjIzMkM0Cis6MTBBQTYwMDA0RDNFNEJDQ0VCN0ZGM0Q5NzZDQTYxMEJGMzgxNkMzOTQ5Cis6MTBBQTcwMDBCMkU1RUI3Q0U1RTg4MkU1MDQzN0E0QjZEMjcyOTI4NkIzCis6MTBBQTgwMDAxNEFEMUIwNTVEQ0VDNUU3MkUyRjQ1RTQyNDU3NThCRkY2Cis6MTBBQTkwMDA1RUFCMTVFN0Y5MjZDOTBCQzM0NzIxQjlENTM5M0VGNTk5Cis6MTBBQUEwMDA0QkEyRDQ5Rjg0NkI3QzIxRjYyMDYwRTQwM0EzRjc1MjcxCis6MTBBQUIwMDBBRDU2RjA4MUM3MjkwMjc4Q0U1OEQwOUUxMTQ3Rjg0QThBCis6MTBBQUMwMDBCMjI0RjQzRUFGQjc0NkUzRUI3Qzc1NjcyM0M3MUY0NDVGCis6MTBBQUQwMDBGRjJFN0M1OTdGNUE2MTdGMzIzNEJBRTQ5Q0UzRkQ3RUJECis6MTBBQUUwMDA4RENGMkZBQjRGREZGOTREMUI1RjkxMDg1RjE5MTI2OUI2Cis6MTBBQUYwMDAwRjZCRjc1MTUxREZBREJGRUM3Mjg3QzA2RkQ0MDM1QkIyCis6MTBBQjAwMDBGOTc3OTIwOTI4RkNBRTMyQTg3OUM0Nzc4RjdDOURCOTc5Cis6MTBBQjEwMDBGNTkzMTdFNTZBRTlGOUNCNTVCNTdBQkQ1RTJCQkVFRjIzCis6MTBBQjIwMDAzMDNEREY4MkYxQkU1MkZCQ0UzMTZENzIzRjY4MTFGM0QyCis6MTBBQjMwMDA3NjRFRjNGRTZCRDQ0M0NCQTZFNkIzNUE3QzJGMTVFM0Q3Cis6MTBBQjQwMDA5RTJCQkUyN0E3RTM1Qjk1OUNCRDIxRjQ0NEI1RjhBREQxCis6MTBBQjUwMDAzOTRGRkM1RTc2RTFGNzU2QzlGNTE5QjExRjU1OEJGRkU5Cis6MTBBQjYwMDBGQkNGNTMxRTdFMzA5REJGNTVBRDIzOEY3NjZFRkNGRDBGCis6MTBBQjcwMDBFODc5RTJGN0NGNkVGQzRBQUM1QjU1RTNGQzRBMDM5N0Y5Cis6MTBBQjgwMDAwRjQ1OUNCRjU0OEI1RjRGNjVGQzQ0QkVEOEJBMDEyQjY4Cis6MTBBQjkwMDA0RUY2MUFGOUUzQkJCNTc1MDM2OTY1MEEzRjBCQjg1RTVCCis6MTBBQkEwMDAzRkQ3RjFFRkFGN0FGQzc3MEY1OENBRDRGODhGNjhFRjMwCis6MTBBQkIwMDA3NjhDQUYyODI2MDk1QkI1RTMzRTVBRURCOEU5RjczOTQ0Cis6MTBBQkMwMDBFODdFN0FFNDdEOEU3MUNGOTdFRjVGQUM3QUZDNUIxREY3Cis6MTBBQkQwMDA3NDNGMzc3MkFCOTNFRTkwNDlGOUM0RDU4RUZCQ0RGMzM5Cis6MTBBQkUwMDA1Q0VGQkYxNEY4MDYzNUREQjEwRjk0QjJERkNGMDhCQkMwCis6MTBBQkYwMDBGNjgzOUFFRTkwRTM1MkY1REYxMEY2Q0FCQkFBQUM3RjVCCis6MTBBQzAwMDA1MkY0REY2Q0UzNTNBMUZFM0QwMkZGN0JBQUFDRkY2QjY1Cis6MTBBQzEwMDA4MUNGQ0EyQUYxRjlCRTU4ODdBNUY2Q0Y4MEUwN0IxMDE0Cis6MTBBQzIwMDA3NTY0ODE1RjczQTE3OTRCNUI3QzQ5Qzk4RkU3OUNDRkM5Cis6MTBBQzMwMDBGNEQwNzc4MjZGMjg5QThFRjE0RUU4MDJCMkM3RkRDNzMyCis6MTBBQzQwMDBDMzA3Nzk1RTQ5NUFGOEZGQzlCNEM0RjUzMEM1QjdCQzJCCis6MTBBQzUwMDA1MUQzNzExRTY3RkI1RDhBOTJCMDhBOURCN0Q1RkFCOTUwCis6MTBBQzYwMDBGRTkzNzRCMzlCQUY3NzE1MzAwRkE5NTRGREEwQkY3ODQ2Cis6MTBBQzcwMDBGQ0E1MDYyNjI4RkYwNDYyRTIxQ0U5Q0M4RDQ2RDE3M0IwCis6MTBBQzgwMDAwMjI1NDE3OTJEQjJBRUMyNDEzNkNFNDBFRDQ2QTMzMDA5Cis6MTBBQzkwMDA2RjM5NkVFMzEzQjMwODFGNTVFN0Y4QTg4QTY5MTVDQjFGCis6MTBBQ0EwMDA1MzlFRTNFN0YzNkFGNzYzRkI4NzUyNkMwMkY4M0QwRUFECis6MTBBQ0IwMDAxQ0JGNDE3RkEyMUJGM0M0RDNCNTJBRjE2OTIwRUMzQzMxCis6MTBBQ0MwMDAxRkJGNDlGNEYzNEU0MURGODBCNzdDOUU1OEU3Q0M3NjM2Cis6MTBBQ0QwMDBDQTU3RUE2RkU3Rjk0QTA2OTg5NERGMzkxMDJBN0ZBRjFFCis6MTBBQ0UwMDBDMTU4MEY4RkZGRUYxNEY5NEYyM0Y4RkQyODdFNEY4Q0NBCis6MTBBQ0YwMDBERjhGMkVDNEY2NUZBMUVGRjA0RUI1N0FDQURFOEYxMzU4Cis6MTBBRDAwMDAzNjlENzFGNjYwOEJGMzdCMUUzQjJFRUYzNzlDREZGNTkzCis6MTBBRDEwMDBGODYyQ0VFRjdBQkMzMzE1Q0FFQjFBMDhGMUYzODE0QTE4Cis6MTBBRDIwMDBGOERCNzlFRjc2QkQ2MTI1QTVFOTQ1Rjk5NDc1OUMwQkIzCis6MTBBRDMwMDBGODYyNEU3Q0RGM0VGRUYxRjY0MUVGNjFCRDE4NUU2RkJBCis6MTBBRDQwMDAxNURGNEFDNTFCMjZFOUFENTE1MzU5QUUzNzFDRjkxOTE5Cis6MTBBRDUwMDAzRDQyQkU3QzM1NUEwQUY1MzJEM0JCMjVERTA3NzhGQjZGCis6MTBBRDYwMDA1MDgyRjI0M0I0NThDMkEwNzhCNEQ4MDczNDVDMEYwNUJGCis6MTBBRDcwMDA3Q0ZBQTRCRDJFMDMxRTNCREY5OEYyM0EyNEMzQTJGMzUzCis6MTBBRDgwMDA0NzBERDc5MTM0QkREREU0QkNEQTcyRkZGQkI1MzE1QTEzCis6MTBBRDkwMDAyN0Y1MUFBRDEzQzk5OEEwRUZCQURDRTMyQ0Y0NUJGQkRFCis6MTBBREEwMDBGQzc4M0VFNkI3MUVDMEQyRkIwNzM5NTk2Q0JERUNGNTA2Cis6MTBBREIwMDA3MzNEQUFERDkwMzBCNEY5RTRBQTkyRERFM0M2RTM0QjFCCis6MTBBREMwMDA2MkZEODU2Q0ZDRDMxNkU1NUY1NDhCRkZBMzU1RTI2RkUzCis6MTBBREQwMDA4RkMzRjBGRjFDRUE1OTg2RkZFN0IxMkM4NUZGNTM0MjcxCis6MTBBREUwMDAxRkQ1ODFEMTRCN0JCNkMxRjUyQ0MwN0FBMzMwQkUxRUQ2Cis6MTBBREYwMDAwOEYwN0VFQjg0OUUwMkU4NzBFNEY1NzgwNTVERDVEMjFDCis6MTBBRTAwMDBGM0FDQURENzJBRDA2MzhGQ0JFODc5NTFDQ0M3NzdDQUUyCis6MTBBRTEwMDBDREM3QjcwNTNEODEwMERGQjdCNDAzMDk4MzJENERCODE5Cis6MTBBRTIwMDBCOEM0QkM5QzEwNzhDQzBDODhCODUyQkFFMzlDRTRFQTU1Cis6MTBBRTMwMDBBNTJBRTkzODMxMzUyRkFGOEE3OUY5RTc3Mjc0MUMxN0UyCis6MTBBRTQwMDA3Mjk1OTE2MUU1NDlEQzRGOUJFREZDODUwRDhFNzk5OUZBCis6MTBBRTUwMDAyREY4OTNGMUQ5RjNEMkU5OTg5N0RBNzM5Qzk3NUY1NTVGCis6MTBBRTYwMDA0OUNGRUNBOTc5MzkyREU2MjU1RjRFQ0UwQUVBRkY1RTdGCis6MTBBRTcwMDBENEZGODNBODRGNzZFMkVDQzBFRjA2RjBCQzZDQTEzRjk0Cis6MTBBRTgwMDBFMTA5RDQ0RkVENkZBQzlFMUM1ODM2NTVFRjkzQTM0N0E0Cis6MTBBRTkwMDBFQzdBM0VBQUQ3MzU1OTRGMEIxNEY0MDdFOUQ3MDZGMEUwCis6MTBBRUEwMDBGQzdCNTA3Q0ZGRjFGREQxRjAzNUEyNUQ4NERBRERDMDgyCis6MTBBRUIwMDBFOTYxRUQ2QTBBRkJGRkQyRTgyQjc2RkYzM0IwNUVFRjYzCis6MTBBRUMwMDBEQTNGRDhGNUEyODVGNTY2MDdGRTYwRDc4QkUxNzNFOTE2Cis6MTBBRUQwMDBDMDY0N0YwRDg1Nzg5Q0YwRkZFQjAwQ0ZENzcxRTU3QkQ4Cis6MTBBRUUwMDBFOUQ1RTUzQjc4QTM0OUJBQ0ZBMTBFQzIxOTk5OTU0MzlDCis6MTBBRUYwMDAwQUJGNUYyMUNEOENFQTQzOTgzRkVCNEJFNkEwMEFCQjJCCis6MTBBRjAwMDBDQkEzRjE3NjNFNjY2RkUxRjlGMTBDMUQ5RUY3MUJFOENECis6MTBBRjEwMDA4Mjk4NzA4MEJEREYxMzU1QzgxRkI4RDM5RjZDMEJENEM3Cis6MTBBRjIwMDA3MzNDMjkwRkUwNTU2RThGRjU4NkRBNDQxQzg1RTNCNTM2Cis6MTBBRjMwMDAzN0Y4ODExMUVDNEY2Nzc4NjFGRjlGMEM0NjlFQzdGQTg2Cis6MTBBRjQwMDBGQkU2QTg5NENGRkJGQzlDQkJDODRFRENEQkFCMDBCRTkxCis6MTBBRjUwMDBERjdCOUQ0QTc2RTIwM0FGODY2OTFGMUU1NENDOUIyODk3Cis6MTBBRjYwMDBGRkMxNTIwREI0MUJFRjBFRkNFMTE4RTYyOThGRjdENjk2Cis6MTBBRjcwMDBFOEQyNTU0NDBGRTE5RkY2NDBBMjlGRkFFNzc2RTc3NkM0Cis6MTBBRjgwMDA4NjNGRTYwM0QzRDY4NUZENzY3MTNGMDY0NDlFRjNERDBBCis6MTBBRjkwMDA2QjBEQ0E5QjMxODBERkRGMzREQ0FFNTI5RUQyREVDNjQxCis6MTBBRkEwMDBGOTFEMzhERTAzRUQxQUQ5MUQwRkRDMzBCRjk3RjJCOTU5Cis6MTBBRkIwMDBEQjAzOTRGQjU2MTczMjI0Q0NFRjg5QUM1MDAxM0YwNERECis6MTBBRkMwMDBBOThCMUFCRDY4Nzc4Njk3MDdGMENFMkZBODZCRTRFM0FDCis6MTBBRkQwMDA4NTE3MDJEREYzRTc4NTRDMjJDRUNBQzg4ODRBRjczOEM4Cis6MTBBRkUwMDAzRDcwQzM4NkRDNjZCNDZCREE3OUZFMzIyM0VDRTVGODlCCis6MTBBRkYwMDA3MjgwOTA2MDI1QzgzRjAwQzRDNzNCOUI5RkU3REJGMzhFCis6MTBCMDAwMDAxQ0M5NENCNjJGN0I4RTE4Qzk1NjU5MkY1NzVEQkRGMDAxCis6MTBCMDEwMDA4ODQyRjlDOTE1RUI2NUFBQUM5N0FEQjI1RThFRDdBQjg1Cis6MTBCMDIwMDA3ODdFMkZGMjI5MzVGNjBGRTM3MDdFNzczRTc2QThGQzA2Cis6MTBCMDMwMDA3NzcxRTc5QUFGQkIzN0UwQ0NCQkFFRDRERUNFRDNBREYxCis6MTBCMDQwMDA0NDJGMUU2NjRFRTIyOTU3QUU2RkU3RDk5NTdBRUY5REUxCis6MTBCMDUwMDA3OTU3MENCRjRCMUJBRUJGNTc5NEY3RjFCMjQxM0M2RjExCis6MTBCMDYwMDBEODFFQTNGQjIyMUJDNEZCODZGQkU4RkU0ODc3M0Y3RjZDCis6MTBCMDcwMDAyQkY0NzEwQjI0Q0FDRTQzOURDMEZGNzU4NjNCQzZCMzJCCis6MTBCMDgwMDA1Qjk0MEFGOTAwRUU3QzNGOTdERUQzOTQ3NDI3QUREQjI2Cis6MTBCMDkwMDAxQjc4N0VEMUU0Rjc5MzhERTJCQjExNDgyNUUyMTRDRkYzCis6MTBCMEEwMDBCMjIyOEI2NzRFQUQxRkVGQUFFRkQyRkFCMUJGOUI2NEZECis6MTBCMEIwMDBGM0MzQkY5Nzc0Qzk4OTVCMkU3Q0FFRkM5NDBCOTU5MzQ4Cis6MTBCMEMwMDAxRkJGNEQ3MkUyMUQ5MUFCNUEzRkRFNEM5NUY1QjI1NTU0Cis6MTBCMEQwMDBENkNCNTU1NzRGMUQ5MUFBRDIyQjZBQTZDQTdBRDkyQTI4Cis6MTBCMEUwMDBFQkU1NzhCREMxOTVBQUQ4RDc0NzA3MzFCRUU1QkQ0MjhCCis6MTBCMEYwMDA3M0MwODM1NzA0OUNFRkFGMEMzOUUwQTE2NUNFRjZFQTJDCis6MTBCMTAwMDA3MjY3RkJBMUU1Q0VGNkVBMEFERURFMENFRUJGMjYxRDc1Cis6MTBCMTEwMDBBRjdFOURGQ0FGRjM1QzI3MkQ1QUY5RkFFMUY2MEFFQkZFCis6MTBCMTIwMDA0QUQzRkREOEJFNEUzMTAwRUYxNzYyRkI1NTU2RUM1QjlCCis6MTBCMTMwMDA0NUUzM0ZFQjgyN0NGRDVGMTdEMDFERjdEM0ZEQTlEMzFDCis6MTBCMTQwMDBEOTEyRTRGOERBRjQ1NkMyRDdENkJGRkYyMjBCQkJBQjU0Cis6MTBCMTUwMDA0NERFM0Q3RTU2NDA3OUQ4MzBERTgwRkQzRDdGQ0ZDQzQ5Cis6MTBCMTYwMDAwNkI0RTdGNkJFQjY4MkVFRUZFODdGOTc5RDM3NjM1MkVFCis6MTBCMTcwMDAzRUE0NzJFQzk3NjRCRkVDRERDRUVGOTc3RUI0RDZFQ0M0Cis6MTBCMTgwMDA4QUEzQkQxMkY2MDBEQUNCQ0M4REEyN0IzREY2QzYzQzdECis6MTBCMTkwMDA2NDhGRjQ1RjVERkVGRTkyNEZGNUYwM0NBMTg3RDFFRjI2Cis6MTBCMUEwMDA2N0ZBRkY4MEI4NzdFQjQxNzFFRkQ2RkQzRDA2OTVCQjlFCis6MTBCMUIwMDA3QjVBQThEQ0Q1NjM1MjM5REFEM0NFRjMxOTdCMkNGMTU0Cis6MTBCMUMwMDBERDU5MTc5NTVGRUE0OUQwRjMyRkY0NzQ1M0Y5Rjk5RUNFCis6MTBCMUQwMDAyNDNEN0ZBQTY3MkI5NTlGRUQ0OUQxRjM0MzNEREJBOTIxCis6MTBCMUUwMDA3Q0EyMjc0RENGMUZFRjE5QTFGMkIxOUUwQzNEMUZCQUQzCis6MTBCMUYwMDA3QTAzREQ5MzcxRUEzRTBGN0QxRDUyMEFGRjM5Mjk2N0ZDCis6MTBCMjAwMDBEQzYxRjY1NjY3RENBMTIxRTk4QzM3Q0NFQTc2QzYxQkY3Cis6MTBCMjEwMDBGNDU1RjMxREVGMjM2REVGNzBDMEExRDYyNThFRkE4MTkyCis6MTBCMjIwMDBGODE1MEU1ODZCRUM3NEMwNEFFODlEMEVEODdDNkU4M0ZFCis6MTBCMjMwMDAwM0JFRUM5OTlCMUQ3MEVCRDM5QjFDRjAzQjNFRkQxMUI0Cis6MTBCMjQwMDAwN0RDRjJBOTNCMURGMEM1RkJFRjc1RTAxNzFGRUI3M0EwCis6MTBCMjUwMDBDMEVCODNGM0Y5N0RFMDAzM0IxRENGOERGQkY2MzlFMEI2Cis6MTBCMjYwMDA4RkNDQjQxRTBCNjIzQzM0MTNFMUY2RUM3MTg5RjZDMTRECis6MTBCMjcwMDAxOTczQ0REQkYwM0IyOUY4QjE0Q0YyMDQ1MTlFMEYzRjFFCis6MTBCMjgwMDA2MzdFRUE3MkJDQTcwQzk0RDQ4QTFCQzM5NUVGOTFCNjc3Cis6MTBCMjkwMDBFMzNENzJBNDNEODlGMjdBRkEzNUM5NDA3QjU3OEE2QzQ2Cis6MTBCMkEwMDA1RjU4RThDRkQ5RTVENjUzMjkzODhDNzE0OTkxNjdBNjA0Cis6MTBCMkIwMDA1RjA0OTZDNURBMDU5ODNFQTFDMzQ1NDhFNTc2NTBEQ0EzCis6MTBCMkMwMDBEMjQzREY1MTY1QTQyNEU1OUIzMDlCRDlGQzJCMURGM0IxCis6MTBCMkQwMDBFOERERkI2RjkwRUNGMjUzNTE5RUNGREVEMUE5MzUwRDI2Cis6MTBCMkUwMDBCMEZBQkIxN0E5MjZBNjc4NERDM0Q3NzVCRkREQUY4MkNDCis6MTBCMkYwMDBEQzBGREVCNTgzQzcyQkY1MTdGQzREMUE2QjFGMzI5MzlECis6MTBCMzAwMDAzM0QwNTVCNURCODU3MkRGQTNFRjk0NDI4NkI5MUNGREJGCis6MTBCMzEwMDA5QTUwM0MwMzlCNDM1ODhGN0ZEN0M3RUE3RjM1NTgyMDBDCis6MTBCMzIwMDBCRkExNjRDRTUyNTlGREQ4OTY2NEIzODdENURGMkRGQUZDCis6MTBCMzMwMDBERkJERUNDNzc0OEY2MDM4RjcxM0I4OThGQzlEQ0ZEMDkxCis6MTBCMzQwMDBGOEUxQjZBMzcwN0IxOEY1RDMzOEFDMkJCMjhFNzdGRjNCCis6MTBCMzUwMDBCRUY4Rjc0OEUzNDE5OURBRUZFRUNEODJDOURBMDU3MjFCCis6MTBCMzYwMDA1RkE3N0IzOEVENzkwOUI2MUU4NTI0RjZCQjZBODJCRURECis6MTBCMzcwMDBBMUREQkQ0M0EyN0U3NjRCMkZDNTYyODJDRTVFMTc5REI2Cis6MTBCMzgwMDA4ODE3RDI3NTNCRUIyN0Q0OUQ5NEQ2QjVGMkU3Q0RFMTczCis6MTBCMzkwMDBBOTdFRjFGRDY2N0M3RjRCNEFDMjNDRjc2QUY4QTcyMjgyCis6MTBCM0EwMDA5RjkyOEM3RkI4REVCNjY0QTRCMkZDMzM3MjE2RjI1QjU3Cis6MTBCM0IwMDA4QjU3RTJERjgzOUM3RjhDNkZCN0I3NEVFN0Q3NjRGRDc2Cis6MTBCM0MwMDBGNDUxNThERTVBQzA2RkQxMUVGOTcyN0IxMUJFNEVGMjk1Cis6MTBCM0QwMDA4OUI1NEY1MkZCOTc2MDY5ODhCNzQzM0U4NDE5REQ5QjVFCis6MTBCM0UwMDA4QkI1OTM1RTEyRTM2NDlERTMzMDNFREU0RUNGRDMyMkY1Cis6MTBCM0YwMDBCRUM4RUZGNUI0RjM0NEVDRkFGOEQ3QjU1Q0U0MjkzMkYzCis6MTBCNDAwMDBCQUJERTNCNTlCRjFGQkVCOEVENjI0REQwMzNDMThGMjBECis6MTBCNDEwMDBEMEZENDI4M0ExQUZFNEU4OUU3RTFERThGQjU5NDVCMTEzCis6MTBCNDIwMDBGQTdFMTRFNTcxRTgzRUE5RDgzQTc1RkEwOUY4NjU0QTNBCis6MTBCNDMwMDBFMUY3NjQwMzIxM0IwRkJGODJCRDI0RUUxNTk2QzVCRDI1Cis6MTBCNDQwMDBDMkFBOTJFODZBRTJFQkQ5RUM4NUE5RjhFQUY0RjFGNzJFCis6MTBCNDUwMDAxMURENzJDQ0I5RkYwRTZDNzFFRTdCNzFGRDY2OEE2M0YzCis6MTBCNDYwMDBGNzQ3QUJGQjZFQzg5N0U3RjZBNTJBRjBGMUU2ODNGQzM5Cis6MTBCNDcwMDBCRUUzQkM5RkYwQjRGMjMzQTg1QzkzQUZBNUYyQUFGQzg0Cis6MTBCNDgwMDA2QzdBQkYzQURGNDBGMEFBN0MzM0MxNTdFNjlCQThCQzc4Cis6MTBCNDkwMDAyMjdGMjkzRDVGOTlCRjg0RTBGNkZDNTIyQTU3RTQxN0NBCis6MTBCNEEwMDBEM0YzRTVGOTJCMDk1RTk2NUY0OTcwNUI3RTJEOTU0QkQyCis6MTBCNEIwMDBGMzFENTQyRUM5NUY0RkVGMTdFN0FGMjNEOENDREY0OEY5Cis6MTBCNEMwMDBFNTI1RjlGNTU0QjZFNEZGOENERTJGQ0NERjQ0RjBDNTVBCis6MTBCNEQwMDBGOUNEMDQyRkM4REY0NjcwM0NGRjUxODI5QkYzMUZBNkI1Cis6MTBCNEUwMDA3MjdFRkVCRjUyRDk5NEZGMThCRDM3RjIxRjI3Nzg1RUQ3Cis6MTBCNEYwMDBGRTFFODJFN0U2RkIwOTlFOTNFRjI1QjgzMUJGOEJFMDg1Cis6MTBCNTAwMDBEOUY5NTEyQTJGQ0EzRjQwNjU0MzdFMkZCRDlGOTU3RkIxCis6MTBCNTEwMDA4OENBOTlGOTI3RTg3OTZERkU3MTJBRjVGQ0U3QzU3RDlGCis6MTBCNTIwMDBEMTRGNTExOUM5N0Y5NUNBNzBGRUNCRjQzRTk0RkYxQkQxCis6MTBCNTMwMDA4MjgzRjlBRjUzMTlDODdGOUI0QTJERkYzQzk1OTVFNjRFCis6MTBCNTQwMDBBOUQyRjc0RjZCNjA4NjQzMkU1NkU3MkY3MkMwNTc0RTM1Cis6MTBCNTUwMDAzOEY3RUY5NTNGNzdFRURGMkJDNjk3MzhFMDY1Qzc5QzRECis6MTBCNTYwMDBGQkY3RDJBMzlEOEVGNzhCOEZCQ0QzMDE1RjkyNzNFRTU2Cis6MTBCNTcwMDBERjBCQjNDRUZEN0JDMTgxNEQ4RUZBQ0Q5OThGMzhFMEM0Cis6MTBCNTgwMDBBNjExRTdGRTNEMkZFRERDQkZFNzZDRUY3M0RBMkZBOUM0Cis6MTBCNTkwMDA5RDBFQjg2MUFCNzNERjlFMDUwRkJCRjJDOTBGM0FFQThGCis6MTBCNUEwMDBENzU4OUY3M0Q0MEZCNzdGQzU3NUJFOTJFNUZBREZGQ0ZECis6MTBCNUIwMDA4NkQzOEU2OTc5QTFFODM5NEM3Q0ZGNzVGNERERkVBOTRDCis6MTBCNUMwMDA0NjhGQjg2NzQ4RENEQjJBRUU0NzczQ0Y2NzlERDAwMzEwCis6MTBCNUQwMDAzM0YyREM3RjhBOEE3NTU3OEZFQkFFMjBFRjg5RDkxOTU5Cis6MTBCNUUwMDBBRkExN0VCMEVEOEMxOUYzOEQyRkJGQzhFMEQzNzM1NTlBCis6MTBCNUYwMDBCMzk3QzFCNjlENjFEN0FGRjhCQjE1QUEzOTlFNjY3OERGCis6MTBCNjAwMDA3QThGRkJFOERFMzkyOUQyNkQ2MTVDRURFRTEzMTJERDM1Cis6MTBCNjEwMDA2RjU3MzcxQjQ0OUVDMDc1NUQzQzNFMDFGNjdEM0E3NDAyCis6MTBCNjIwMDBCRkNGRjAxQ0ZCRkRFNjZCMjk4RUQxQzRFMTIzQTExRDI5Cis6MTBCNjMwMDBFQjMwOEUzQUVDQjVERjdGRkU1QTZBRUZFN0YwRkYwODk5Cis6MTBCNjQwMDA2RDE5QzJGNzc1MzU4NzYzNjgxRkVEMkE3MUJFRjkzRjIyCis6MTBCNjUwMDA0MzJBRjFCMzM2NjRGRDMwQjQ2Q0VBOUVFOUUzRDFFNEU5Cis6MTBCNjYwMDBDQjIxRjY3QzlCOTY5Qzg3NTc3NkUzM0RGNzc4OEZGMzRBCis6MTBCNjcwMDAzQUM1RkExMUQ2NUJBRjU4QUY4NDY4NUY3MEZBMEZFRjI2Cis6MTBCNjgwMDBDN0RDRDc2NTc0MkZFMDRGRjBCRDFDNzk5NkY2QTNCQURFCis6MTBCNjkwMDBFQkVGQTNGQkFBODZDMzBDOUY1MDY5N0NGRTNFMjQ0RkIwCis6MTBCNkEwMDBFRTM3NjBFRjM3RjMyOTlFNEFGNkUwNTAxM0QwQkQxOTBDCis6MTBCNkIwMDBDM0I1ODkzNERFRTc5N0ZFOEUwNjg3NENBNDNCQzM5MzVGCis6MTBCNkMwMDA5NTQ0N0VFMkYwMjU4NjJEMTc4RUZEMDkyMDkxQzMzODIyCis6MTBCNkQwMDA3RTMwMTkzMkQwNUUwQkMxNTFDQUJGODhDMDA0OTUzQTgyCis6MTBCNkUwMDBFODkyRTNCRTZEOUJGRTM5OUM3RUJDRkYzRjQ0RTdGMEQxCis6MTBCNkYwMDBENkIzRTMxNDY3NEQ4MUI4QkZGQTREN0NDRUY4NzIzQUU5Cis6MTBCNzAwMDBCNEFDMzQ1RkFFOTFFRjAzOUQ4REZGMjhCMzI3OTE4RUNCCis6MTBCNzEwMDA0NzgxRTMzQjg2RkVBOTg0NzhBNkY0NjZFQUQ3Nzk4RjUxCis6MTBCNzIwMDA4NDcyRkNFQjI0Mzc3NkJDNDc5MTU3NjlDRDQ4OEZCOEJCCis6MTBCNzMwMDBDN0ExOEJGRDQzRkJCMDNFNTEzRURFRTNCRUI3RTE1Q0VCCis6MTBCNzQwMDBFMzNERDFCMDNCREUxM0EyRjNFNDUzQURFNUJGODNCM0Q5Cis6MTBCNzUwMDBFMzNFNjNBREU1Q0Y3QjlGMTU3RURGRDdDNDc5RUYzMzQyCis6MTBCNzYwMDBFMkJDRjcyQkMyRUYzQjJDRkNCRTJGQTJERkM3OUUzRkYzCis6MTBCNzcwMDAyREZDQkVDRkExREZDN0UwMjdEMUVGMkJGOEJFRTRDOTc3Cis6MTBCNzgwMDAxMkY3QkYyQ0FDOTU4NDlDNkQyN0ZCM0UyOEVFMkI2MkY0Cis6MTBCNzkwMDAyMzkwM0QxRjEwRjZGQzk4RDkzNzEzRkQ4RTYwMkQ2NDYxCis6MTBCN0EwMDBEMTRGRDg3QURENDFGQTdFOTY5MTYyRTJGRDAwNzdGQ0I2Cis6MTBCN0IwMDBFMkY1OTlGRjg1QzFGMTE4MzhFRTc3MEFCNEJBRUU0QjdECis6MTBCN0MwMDBBODM0OEU5MkI1QjBERjIwRjMxQjMyNjY2OUZFOUM3M0ZECis6MTBCN0QwMDBCRjVBMTZGQ0U3RDUyRkJGRTdDN0JFQjc4RDcxMzI4REI0Cis6MTBCN0UwMDBGMjE3NDRCQTc1OTRBQkJGQTE3MTRFODk3MTQwRkVDMTg2Cis6MTBCN0YwMDAxMUJBQ0ZGMDcyMDVDQUM5QzFCNDcxQ0U1MUZFQjY4NDc4Cis6MTBCODAwMDA1REJGNEZFMTkyM0ZDMDg0MEQ0NkVGM0NGMUJEQTYxMUY0Cis6MTBCODEwMDA0QTM3RUY2MUVGOUZCODRGNzU3QzlGRUQ5NkM3REVENzMzCis6MTBCODIwMDA3QzE0ODcxRDVDQ0NFRkU1NzlCMTdFREQ0NUU4MEY3RUE5Cis6MTBCODMwMDA3QUVGOUI0RDg4OUZGRERENTJCRkU5OEM1QkNDQkIwRjNGCis6MTBCODQwMDBBNEMyN0M5NjAzNjIzRkU4RDdDQkNCQjk3REFGNzhGRjJCCis6MTBCODUwMDA1OEY5N0EwRjhBN0E1RjBDNUE3RDYxRDIyQjEzNzQxRkM0Cis6MTBCODYwMDA2NEZCODlBRTlCMTFERkM3NzY2ODc0NUVFMzZFRjdDNTMzCis6MTBCODcwMDA2MDcyNjc3OEQ5NzQzQzBCREJBM0JDOTU2OUJGQUY1QzgxCis6MTBCODgwMDBGQkU1M0ZFREZBMjk5NDZGRkY3MEI4QkU3NEZCQjY5N0U1Cis6MTBCODkwMDBCQjFFQUU4MEZGQzFFMkUzQTcxRkMzNzZGMzYyM0NDRUJFCis6MTBCOEEwMDBENERCMzA0NEYzQkI2QjA3Rjc5RjVGNUNCNDhFRUU5OTNCCis6MTBCOEIwMDAxREE4RTVGMzU2QTRERjJGNTRFMDRCNzcwNUJBRkVBQTg2Cis6MTBCOEMwMDA1MjdCQTkzQzVEREYyQ0M3MTdDNkQ3NjMxNUY4RjI5REU0Cis6MTBCOEQwMDAwQTdDM0Q1MDAxRkZCRjJGQzFENzc5ODhGNzNDRkM3RDIyCis6MTBCOEUwMDAzOEQ2QUU3NzBFRTMyQkZBNkZDODU3OThCRTFFOEFGNDhGCis6MTBCOEYwMDA3QkFDMUM1RTU1QzhFQkY4MDVDQUVCQ0YyQkYwQjU5MkJDCis6MTBCOTAwMDBCQzRFNUNBMEJDRTY0QkM5MkJFMjdEMDFGMjJBNDdDQUMzCis6MTBCOTEwMDBGM0I1OTJCQzA2MjMxNzI2QUYzM0NBQjVBRjQyNUU2N0I0Cis6MTBCOTIwMDA5N0MzQkYwQTc5NkQyRTM2QkUwRjgyMTZEQUQ1QTc1QTk1Cis6MTBCOTMwMDBGOTM5RDlENjBFN0UzRjk5Qjc4NUVGQzNDMUUzOUYyNTZDCis6MTBCOTQwMDA3QjY5ODBFRDU3MzNEQTcxREYzRUYxRTAxRDZENTNGQjBCCis6MTBCOTUwMDBCNDdCMUY3MkY3RTdERTQ3RUZGOERGOUZBMTdEMzQyNDQ5Cis6MTBCOTYwMDBGNjdEMUIxRkJGRTFFRUE3RkNGRDE2RTczQTZFMDA3RkQ4Cis6MTBCOTcwMDA5N0E5RTBGNzJFMUE5MjZGRjU3OENFN0QzRTYwRjJGMTJFCis6MTBCOTgwMDA4MThEQkY5NkNFMTU5RkE2NzNDNTlBRjYwQjFEQjc3QzA5Cis6MTBCOTkwMDBGRDU5REQxNzY2MTc3QzI4RTJCNDBCNjY2RkZGRUE2MzdBCis6MTBCOUEwMDA3NDFGODlFODY3QjY2MkQxRUZGODI5NzAzNUJGRkY2NDZDCis6MTBCOUIwMDAxQkNGMUY5MkI3N0ZGOUIxOTM0QjBCRUU5OTgyQzM1MjA1Cis6MTBCOUMwMDA2MUJFOTBCQ0VERjA2MzI3MEJGMENBNjNGQzg3Qzc5Qjk4Cis6MTBCOUQwMDAyOThGMzFBRTVGMTFBMDdCRUJDNkNBOUY2N0ZDNDBFQzlDCis6MTBCOUUwMDBFM0RGMTdFNzE5NDdDNDc5QzY3Nzg1NURGQkEyQjA2QjIzCis6MTBCOUYwMDA1RjEwNzY2RDRFRDhCNTdGMkJFQ0RBRTc4NDVERkIwRERBCis6MTBCQTAwMDA3MTlFRjFBMDM4OEZDOEY0MUMyMDc4NEY0RjU2RkM0RTIxCis6MTBCQTEwMDBDOTkzRTI3NzRBMEU4QjdDQzk2N0Y5Qjk0NTRGOEVEQjMzCis6MTBCQTIwMDBDNzhGN0ZBRDE5RjkzMTQ1ODczQjhFQzVFOUIwRUY0NzI4Cis6MTBCQTMwMDA3N0QzRjEyRUQzNzlERkM2RjUyRDQxQzdCQzVENjczOENBCis6MTBCQTQwMDBFMzIyRDdDNjY2M0JFQTVGQTMzNzNCREVBRkQ1MkU3NTUwCis6MTBCQTUwMDBCQ0VGODBBNUNFMzg0QkZFMEE2NzlDNjVDMjE5MTdCOUFBCis6MTBCQTYwMDBGMkU3Q0U3MzhEOTVFM0NFQjhDODhBNjMzNzNCRTMyQ0ZCCis6MTBCQTcwMDA0NzlERTcxQTRCOEYzOEUzMjI4QjczNzczQUUwQ0I5RkQxCis6MTBCQTgwMDBCREQ3NTE3RkQxNjFFN0I5QzZBNTRGM0FFMzIyQjNCQTFBCis6MTBCQTkwMDBGNzM5RTA1QUVCNjFFNzc3RjVFRENFQjg0OEQ4NzRDNkQwCis6MTBCQUEwMDA0NTgyMkQ1RjcxQzBFRjYxRkIzREVBNEZCRkUxOEM4QjlBCis6MTBCQUIwMDBGODYyQ0VCOEM4NEY0M0ZDMUNEMEY2QjM1OUJCQkY4QjVECis6MTBCQUMwMDA5MEJGMTlDQTVEQzlFNEZEODkyOEJGRTdGRDA5NDg1MjQ2Cis6MTBCQUQwMDA5RTJDQzA5RjkzREZBMDRDRkEwRDE2QUQ3QjU5RTgxRDNDCis6MTBCQUUwMDBCNUUxRTQ4RkQxQUY1MTc2NzNCRkU3MEU2OTQ1NEUyQkI4Cis6MTBCQUYwMDBGNDdCQkNGRjIyMTVDQTg3QUNCQkZEODcwQUZEN0I0RERBCis6MTBCQjAwMDBGMjc3OTQwQTdFQzlGNDdFQjlCRTlBQkFFN0JDMkQ4RDRECis6MTBCQjEwMDBGOTU0Q0FBNDVGNzJCRENCMkZEOTk2QTFERkIzOUE1MTU1Cis6MTBCQjIwMDBERTJGOTkzNkNFMzlFQTlGRDM5MTEyN0U0OUNDNDNGQzYxCis6MTBCQjMwMDAzMzE0RUU5N0VDMzI4NTVGMDJGQzdCMjlCQjNGNUJGRjQxCis6MTBCQjQwMDBBODBERTVGNTg4N0Q1RjhCQkE4OEZCMEQ0QUE4Rjg3OUNBCis6MTBCQjUwMDBCNjdEREZBNEJBQjg3QzdGQjY1RkYzNzcxMTcxNEY1QzE2Cis6MTBCQjYwMDAwRDg4QjhGRUZGOTc4RkI3NTIzRUFFQUMyOTExMzc3OURBCis6MTBCQjcwMDA5QkU1QTM1NEJENzM5NTBGMDU3NTA2RTU4MzdDNzAxODhFCis6MTBCQjgwMDBGMzQxN0MyRTU4MTM3MENERkREQkQ2RTFGNzREREI4MTAwCis6MTBCQjkwMDA5RkVGQzAyQkZDREVENTUyRkREQkY5NURGMTU1Qjc5NjZBCis6MTBCQkEwMDBDRDgzQjBFM0FDNTIyRDNGRkY4Q0I3REY0QUY5OTNBN0FBCis6MTBCQkIwMDBEODE4RTVFRUQ1NzZFNzVCQzhEMTE0RkVFODFFN0VDRjM3Cis6MTBCQkMwMDA1RUY0RENFNzlGRUE3ODVDMjhERUZEODFCMkY2OEFGQjUyCis6MTBCQkQwMDA3N0MxRTI1NkY5N0I3NjQ3MDVGRURGN0U3NTE2RDlBOTU3Cis6MTBCQkUwMDBCQkI2NzE3REFDNzQ3RkYzNzk5NEM3NEZBMzNDOUExNEI0Cis6MTBCQkYwMDA1N0QxMkU0MUJBQjYyOTc0QUY1QUM4MDA4QTBGQ0UwRDVDCis6MTBCQzAwMDA0MUI2QjcwOUY5NkFBNkYxM0UyRkY2NDdFN0NCOTNGMkEyCis6MTBCQzEwMDBCOUNENzlCRkM5RUY3NEJFOUVFMzg5RjI3Q0FERjhCQkE0Cis6MTBCQzIwMDAwNjJCMEY3N0QwNzc0MjA2QTRGNDVBNUEzRkYwN0E5NDQ1Cis6MTBCQzMwMDBGMDIzMzkxRDZFMzdGOUVGREYzMTdDNzQ3RDdBN0IzNzY1Cis6MTBCQzQwMDA1RUVFRjVBOTZDQjk4QUUyNEFCMzI1N0I3RDA2NERDQzQwCis6MTBCQzUwMDBENzM5MTUwQTk1QkRFRjZENUFCRkU3QjgxRUJGMzA2REQ1Cis6MTBCQzYwMDAzRERFRDBGNzhGMzhFRTk4ODgyMzZENjc3RjA1RTc5RDFFCis6MTBCQzcwMDBFRUZFRUNGNTY4QzNERjdFRjU2RUZBQkU2NTc4RUM0RTNECis6MTBCQzgwMDA3RTZGNzFBM0I4MUY2QzhDRUJDNzUyNzgxRDEyNzJCNDEzCis6MTBCQzkwMDA1QkQ4ODU4N0Y2NzdGNjIxN0YwN0Q4QkEyOUQ0NDcwQjdBCis6MTBCQ0EwMDBGRUYyQkQ4MTI0M0Y1RkFDQzNGMjMzMDdGODc3REIxN0E4Cis6MTBCQ0IwMDAzRkI0NDUzQ0RGNDRDRjE3NDRGOUZENDcwQjk4M0M2MTQ2Cis6MTBCQ0MwMDBDQzNCQkNFQzE1OERCRjdGNTlBN0ZBRDFGMTExN0M3RjFECis6MTBCQ0QwMDBCMTc4QkZBN0JEQ0RDMkRGQUE4Q0Q0Q0VFRkM0NTIxRUFGCis6MTBCQ0UwMDAzQjRBN0E5N0NEQjlCNUMwQzA3MTE1RkExRDlEQjkyM0VECis6MTBCQ0YwMDBGMDM4RDIzMTc3MkNCMUUxM0FGNDBGRDJDMDdGQUYyREJBCis6MTBCRDAwMDA5QURDODlGMjFBQzkwMEY1OTcwNjBFMUJEQjc1OUFCRkZCCis6MTBCRDEwMDBGODU4NzIxRkQ1NkZFNUY1RDk3QjgyRTdBNkY4RkJFMEVFCis6MTBCRDIwMDAxOEMzMTdDNzMzRDk3QjAzREY3M0ZDMUJCN0U4MTRBRjA1Cis6MTBCRDMwMDAwQjhEMUQ0REFDMjU3RkM0NkVDRkUxODY1Qjc4N0I2NTk2Cis6MTBCRDQwMDA4Q0QxODNFRDYzNzZGQkYxMENCRTlGMTVFNUVERDUzMTBCCis6MTBCRDUwMDBCRTNGRUU2OURGNDRGN0VBQjFGMUU5REUyOUFGNzhGRUQ0Cis6MTBCRDYwMDA4NEUwN0ZCQ0ZCNUYzMzZCQTM1Mzc5MTk2OTY2RkZBRTM4Cis6MTBCRDcwMDAyRkIyOUVFRDc1NkZGRjBFNjBCRkY4MEU0OUQzNjYzRjgwCis6MTBCRDgwMDA3MkIyRTA1RTA2RkI3NzQzMDM2M0NFRkRGOTRDMEQ1RkI0Cis6MTBCRDkwMDA5N0ZGMURGNUNDQjJDQUY3QjNGRDNCNTk1MEQzRjMwMDYyCis6MTBCREEwMDA4MDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCQzU3RDE0Cis6MTBCREIwMDAwQjc4NTRENUI1RjAzRTY3Q0VCQzMyOTNFNEU0M0Q3OUMwCis6MTBCREMwMDA0RDRFMjA0MDk0NDAwNzA4MTgxMERCNDk1NDQ0NDU4RERGCis6MTBCREQwMDA2OERCRTBCNTNBMDRFNDE5MjAyMjk2QTBEODlDOTAwNEQwCis6MTBCREUwMDBGMjAyMDZFQjJGMTExMTI2MjgxQTJCRTg2MDQxQjE1QUY2Cis6MTBCREYwMDBFRjgwQjkxNDdCNkQ5QjVBMkZBMkEyOERBMDUxMTRCODZECis6MTBCRTAwMDAyOTE1QzlERjVGQUZGRjVBNkI5RjQzRTY0QzI2MDlFQTRECis6MTBCRTEwMDBFREJERjkzRUQ4RDk2N0JGRDc3QkFGQkRGNjBFNkIxMDJECis6MTBCRTIwMDA1OUM4QzZFOEU3OUI2MUYwOUYxQTYzQ0M1NzI1QjI1MDBBCis6MTBCRTMwMDA3RTU4QkUzMkMzOTg5RjNCQ0M1OEZGRjY0QjhENzlEN0M2Cis6MTBCRTQwMDA3ODYzM0U3OThBQTFGREY5MUIxOEVCNzQ0MjQ2RjJEODVCCis6MTBCRTUwMDAxOEE0RDJEMURCNkNBNTYzMThBQjRENUU0RUY5REVCQkU2Cis6MTBCRTYwMDBGNDcyNkYwQ0U2RjNFNDE4OTEyNTMzQjZBRDQwMEMzNDUwCis6MTBCRTcwMDBFNTMyRjY0NEQ1RjJDM0MzMjBCRjM2NTlBNDNFRDdCQTQzCis6MTBCRTgwMDA2NkM2RkJBMERFMzdGOEYzQTNGRTY5NDMzNTYzMjEyQkJBCis6MTBCRTkwMDA2M0RCQUJGRDk0NkVBQjZFQTVCNDNFNzlGMDc2N0JCNUZCCis6MTBCRUEwMDA3NkNGNTdEQjU4NjgxNDYzQzE2QTk5RjJDRjU2QkIyODI2Cis6MTBCRUIwMDBCRkFCNUFBMUY0NTdENUY5RjRCREJEREE0M0Y5MjdBQkFFCis6MTBCRUMwMDA4QjI4N0RBMkRBNEJERkRCQUFBNzUzN0U2Qjc1MjlFNUIxCis6MTBCRUQwMDBCNzU0OTc1MUJFQjVEQTQ3RTlDM0Q1MEIyOEY1NTc1Nzg0Cis6MTBCRUUwMDA1MkJBQTFCQThBRUFCNTU0QUI5NDM2NTUzN0QwRjdDMEU2Cis6MTBCRUYwMDBCODYwNTk2OTQxRkY3OUQ2Q0EwMDg3MTQyOEJGREE5MzIwCis6MTBCRjAwMDA1MTBBRUI3OUZDNkE1NjE2OEM1QTRGQTA3QTFCNjUwMEQxCis6MTBCRjEwMDBEQTQ0QzZEQ0NDQ0YxQzg1RjA3QjJCNjMzQjE1QzZFQzJBCis6MTBCRjIwMDA5RDdFRDUwOTcwQkQ3NDE3N0NDMzdDQzhBRjNBMjA5RjM1Cis6MTBCRjMwMDBGRjA0Q0Y2RkQyQzZBOTYyQ0NDQkIwNUQxNTBCRUMwNDY5Cis6MTBCRjQwMDA3Q0Q4MTQzRjlCMERFMzc5QjM1NTc2NzMyQzYzMzc2OTI2Cis6MTBCRjUwMDBFM0UwNzc4NEFGOUFBQjMyQzRFRjA5OEJCNzU0NEVDMTlDCis6MTBCRjYwMDA3RUY4RjgzMTNFOUYwMENCNjM2OTJCNTg4RDA1RDI4NDUzCis6MTBCRjcwMDA4QTJFNjY4NzcxRTIxRjBBNzk2RDkwMEU2QkU4NjRCRUE3Cis6MTBCRjgwMDAwMkM0QUY1ODYyODI3OTlDRjM4QjAxMTM3NEFENEM2NTg3Cis6MTBCRjkwMDBBMjA4RTMzN0JCMzgzRDQ0QUVEM0REQkI4RDg1MjY0MEQ4Cis6MTBCRkEwMDBCREU0MkUzQjhFQkJBRTZBNjYzQzhCMDIwRjNEMUREREIxCis6MTBCRkIwMDAyRUY2RDEyN0ZDQkIyNDEwQzYwRkYwNkY5RDdGRjBGNjQ0Cis6MTBCRkMwMDA2OTY1QzZGNjA5REU4OEY2MDVEMDFFRTAxMDI4MDZGQzc1Cis6MTBCRkQwMDA0NUExQjdGODIyNjNGQjU4NEY0NDdCRDdFMEUzQzdGNDkxCis6MTBCRkUwMDBERUM4NDI0OTAzRDNGMzI5NEI3OTBEQzI1RENGOEZFQ0Y0Cis6MTBCRkYwMDBGRDIxRDU3RkQ3MjkxMzFFMTJBRjVGRUQ0MjM4QzNDRjg1Cis6MTBDMDAwMDA1NTA4NjcyOThCMDU5QTA0Q0M3QUQ5MDJDODlCRTFCN0Y5Cis6MTBDMDEwMDAyNjk5RTc2RDkwMzc0OTkwRjc0MDNENTVGMUIyQjE5OEI4Cis6MTBDMDIwMDA3QUJDMkMwRTUzMkZFNTBGOTk3RDFCRTU4OTk4MkZFNURGCis6MTBDMDMwMDBERjY1MUZEMTQxRTAxMkU4MjIwM0U1OEREMkUwQ0Q4MjE5Cis6MTBDMDQwMDBGQzhGRTFGNzI5OENERDJDOEY5RUFFNDJGRUJDRDkyN0Y4Cis6MTBDMDUwMDA1NjQxRkZDREQ5NjI2MDA3RTA3NUE1N0I3QzBDQUVGQjM1Cis6MTBDMDYwMDBGMTk2QzFGOUI0MTZGOTc0NTQ1RkRFRTRGNDMyMDFGQUMyCis6MTBDMDcwMDBDOUFDOTBDNzlCRDhDMEVEMUVBQTEwQTcwN0EyRjRCQkZECis6MTBDMDgwMDA1QkEzREZGQThBOTlGMjA4NUM3NTA3Q0EzMEM2QUM0RTJBCis6MTBDMDkwMDAxNjk1REU2MEJEQkI3MUJERTY2NEJFQ0U5NDVCNEIyOUQ4Cis6MTBDMEEwMDBDRERCMzVEOTU2MEFGQzcwM0U3NjcwRkMzNTQ2Q0NERkM4Cis6MTBDMEIwMDAwRTQzMDZBM0UxNTE5QjU3REUxQjJGOTFCQzNDM0Y4NkVDCis6MTBDMEMwMDBEM0Q1NDBGRDM2NkJGMkFCMzcyMEIyNEVDNEFGNTQ0QUU1Cis6MTBDMEQwMDBGMjM1RTU1NjFGQ0I4M0Y1QUM0QjE3MDM0RTU4Q0ZCQTVDCis6MTBDMEUwMDBBRjZGNjlDODA1N0U1MjM3ODkyNDA3RjRGOTQ3OEU2QjE0Cis6MTBDMEYwMDAyQUU4MTI0QzUwQkVFRUMwNDJBNkMwRjg2NjU3Mjk1MzNCCis6MTBDMTAwMDAwQjMwQUZDQkVCMjBDM0ZFMURDRTkwMTc1MzkwOTgwQzk1Cis6MTBDMTEwMDBEN0VGQThGMkE5OThCN0I4NTRFMkU3NzVFOTE3RUFEQkI4Cis6MTBDMTIwMDAxMDJFQ0Q3RTkxRTRGQkRBMkMzMUMwMDQ0QTk5MTNFNjNGCis6MTBDMTMwMDA3MzZFMzVBMzdDNEVGQTgzOEMyNEZENTczMDlGNDlEMDEzCis6MTBDMTQwMDAwRkZFNkU0Mjc4MzM1NUM0NzVFNDMyNUE0NzFFM0JDQzFECis6MTBDMTUwMDA0Q0QwQ0UzNjg2Nzk5QUEwNEE3QzFFM0I4MEVERDZBNTdGCis6MTBDMTYwMDA3Rjc5QzA4QUVCQkI5Nzc5NDYyOEQ4RDg0N0YyMDgwODcwCis6MTBDMTcwMDA5NEExMUM1OTVCMjk1M0ZEQ0NENkIxQzQxN0ZBQkE3RkUwCis6MTBDMTgwMDA2MkYxN0QxQUNFMzcxNjE3OTc2N0VCQkUzNjQ1OTVBRjJECis6MTBDMTkwMDA4NzM1RjkxODMzMDBGRUUyMTM3OEY5Nzk3M0YwNUE5NDcxCis6MTBDMUEwMDA5RkNEOTBERjExODU5RUVDNUFCRDQ3RTU5OTdGQ0E1NzE4Cis6MTBDMUIwMDBGQUY4NTMyRjdGRDdBOTEwREZFQUY5Q0M1RTBCQ0QzQkZECis6MTBDMUMwMDBFRkQ2OUZDNUUzQkEwNkEyODdCNTFBOURGOUUzQjlGQzdECis6MTBDMUQwMDBDRDlCN0E4NTE3RTE3RTBFRTY4QUZDMUU1OTdGNTFCQzA1Cis6MTBDMUUwMDA0MkYzRDBGMzkyRDMyOEE3MkU3RTdFMTJDOUUzQkM1MzJDCis6MTBDMUYwMDBBQjM4M0Y2NDBGNEVCN0ZBM0NDRjY3MUJFRDA0MzE2RjhECis6MTBDMjAwMDA4MThBN0M1REFGMDA3RTE1QjQxN0Q2MzA5MUVDMDJFNkQyCis6MTBDMjEwMDA2MTVDNDVCMTM4QzgzRkIxNUE5MzVGRjk1REY2NEIyMDc4Cis6MTBDMjIwMDA2RjdCQ0JDNDEwQkZEQkFBNEE0NDE1RTA5RTkzMkIwNTVECis6MTBDMjMwMDA0QzAwRjdGODJDQkY5NzgxM0RFMjI4NjAwMkNFMUZGMDNBCis6MTBDMjQwMDAzRDMyMjEwNUU5NjAxMkMxMzM3Qjc1NDgxMEExRDMxRTMwCis6MTBDMjUwMDA5NDdEMjlCNEVDM0FENzI0M0UwRUZFMDc3QzNGMjYwMTlDCis6MTBDMjYwMDBENkU5REQyNTcwRjlFMEUyRjJDMTBDRDNCMTkxRkNBQzY2Cis6MTBDMjcwMDA2MjQxMThDRkYxOTY4OUJFMDMzRjg0MUU4MDdDOEMyQ0NFCis6MTBDMjgwMDA3QTUwOUVCNjc4RDZBNDIyMUYzQTEyMThFOUI1MDVENzdGCis6MTBDMjkwMDBFRTIwQjkwNUYyRDZCMzA1NTZCNEY0NjQ3N0VBMzJDODk1Cis6MTBDMkEwMDBFN0I5Rjg3QTc0RjhDNDE0NTgwQ0ZBNjFDODcxQTQ4MDFDCis6MTBDMkIwMDAxN0ZCNzUwOENDRTNGNzBDQTI0N0JFNkRCRkI2MDBCMzAxCis6MTBDMkMwMDA3RkE3N0U0MTkxQTQxMjlGNjgzRkVEQUE4MEUzRTBCQTY4Cis6MTBDMkQwMDBBMTVGMkI3Qjk5QzYzOUE3OERDMzRDNkYxQzQ2N0U4OTA1Cis6MTBDMkUwMDBGOTgxQzQ0QzUxRjg2NUMwNzE0Q0I3MEZBQTM3QUE4RUJBCis6MTBDMkYwMDAyREZDNTM0NzE4M0RERjk1MTA5QkRDM0QxQTdFQjk4QzExCis6MTBDMzAwMDA1REY2MEQyQTBFMTMxMDNDQ0UwM0VDNEUxM0FEOUZBRDFGCis6MTBDMzEwMDA0MTNDRTdDOERDRUU1MDlDRUFGMDBENTBGRUY4NkEwQjk5Cis6MTBDMzIwMDBDOTBGQkRERkYzRDUwQkZFRDQwMTQ4NkMyOUUwNzJCRjA1Cis6MTBDMzMwMDBFNjQzNkIwOUY2NTMzRjRFMEM1OEExNUQ0N0NBQjQ4Q0Q3Cis6MTBDMzQwMDAyRUY4RkVDNEE2MkY3MzcxN0VCQTdENUFFQjMxRjI0NUVBCis6MTBDMzUwMDBDRTZBNEU5NzdBQkU1NUUzOEI1QTc5NzA3REIyNDFFRjIzCis6MTBDMzYwMDBBRjY1RjA3QTBGNkJGNTlFNzU3ODZCOTE4RTgxRDIwNTczCis6MTBDMzcwMDBFNENGQTJFM0QzNkZDM0Y5NkU3RkMwQzY0QzUxRTRDMkQxCis6MTBDMzgwMDBCMzBFNUY3M0MyQzRGRUYzMEM2RjhGRjQzNjQ4RkI1RkNECis6MTBDMzkwMDAwRUQ2N0VEMkJCRDNERjY1ODNCNzdGMzQyMTY1RTBGNjRFCis6MTBDM0EwMDA4NTZGNEVERjMyQzRGQzFGOEYzRUJFQkExRERCRTVCODgxCis6MTBDM0IwMDAyQzBDRjE1QjkzQkU5NkYwREJGQzgwQzU2MzA1N0VFRjMxCis6MTBDM0MwMDAxODMzQ0Q4NTc4QUI0QkUwNzg4QkQyRUZCMzgzQ0QwQkIwCis6MTBDM0QwMDBFMDUyMzZDNEJBNUUxOEFBQkQzMEY4QkE1RTFEMDJBRThECis6MTBDM0UwMDA0Nzg3ODBDQkExQzFEQTAzNUM1Qjg3OThGRjFGQTNDRjhGCis6MTBDM0YwMDA1RkNEQzE3OUU3NjQ1OTQ4Q0ZENDY0MDM1QzUxOEUyMzgzCis6MTBDNDAwMDA1QzU5N0Y3RTg4RDJFRjNCNDNDMDY1Mjg3QUZERjA3Qjg0Cis6MTBDNDEwMDBEMkVCQzlDMUM2QkYwODdBRkREQkY3QTREN0ZGM0IxMDNBCis6MTBDNDIwMDBCREUyQkNCRjA3QkQ0QTg5REY4RjVFOUQ4OTgzQzM3NUFFCis6MTBDNDMwMDAyODdBNEQxRUFDRkQ0NUQwNkJENjYwRjNCRjA4N0FDRDhGCis6MTBDNDQwMDA4QjM2QkU5NTM5QkMyQURBNDUwNTVDOUYyRjI4MTY0OUU0Cis6MTBDNDUwMDBCRjlCRjNCOTFFNzYxQzdCQ0E4QkVCQUEwMzdEOTU1NDU4Cis6MTBDNDYwMDA4NDdBRkJGOEMzNEIwQkZCRjQ3NEE0MUU4QUVDMkY1MkE2Cis6MTBDNDcwMDA4RjJFRkREQjkzQTQ0NzlEOUFERUQ3RTc2MzU3MjJGQkZGCis6MTBDNDgwMDBGOTk3NDFFREJCNkYzQjZFOEM4Qjg1RUM2M0ZCREFBN0I0Cis6MTBDNDkwMDBGQkZFQkJDNzMzRUFGOTE4MEYxRjlGQzFGODU3MTZBMTVGCis6MTBDNEEwMDA3RURERTU0MUJBOEMyRkZBQkVFMzBFNUUzRkFERUNGQkJDCis6MTBDNEIwMDBEOTA1MEIxMkMxMkU3MEY0RDkwNTk5NTVCRkRFRkU1MTc2Cis6MTBDNEMwMDA1MjVGM0Y5OTkyOTdDOTQwMzcxMkJCOEFFQzM3NTZDMUU5Cis6MTBDNEQwMDAzQzNCQjFCODZBQ0ZGNjhGMjZGNEQ5MDMwMDdGMDFGRDRCCis6MTBDNEUwMDAyM0ZBMzhBNjhBRTBGNjhGQzJFNkQ1M0I5NzY5RkJCNEZCCis6MTBDNEYwMDA0QURBMTdFNUM5NTM2MjkwOEVEN0I1MEM2RTJGQkZBMUVCCis6MTBDNTAwMDBFOUYxREY2QjdFQUFDMzlBOUZFQTEwRkFBOTIwRUQ0MEY5Cis6MTBDNTEwMDAzRjE1QTQwN0QxNEYwNUU1MjFGNDUzNDFGRTU1Q0Q0RkZBCis6MTBDNTIwMDBGNThBRTZBN0ZBOERFNkE3N0E1OEYzOTNGOUQxNEY0NjM0Cis6MTBDNTMwMDBGRUE4ODBFNjhGNkFEN0ZDNTE0MTRBMUJBQUY3NTNCQTdFCis6MTBDNTQwMDBCNjNBNDRGNURBREI1RTE4OEVGMEU4NUIwN0I3REJGMzRBCis6MTBDNTUwMDA2NEREQkZDN0Q3QzE1ODI5OEI4NkFGMUIzQzI2QzNGRUZECis6MTBDNTYwMDBFMkZBN0M4NzAxNkZENzJBNDk4NkZDMzVBRTRDNDNGRDQxCis6MTBDNTcwMDBBQkU1RTE4NkYyMkI2REEzMERFNUM1NkM4MjIxRkZBMzJGCis6MTBDNTgwMDBERTI5ODZGQTU3RjQ5NDE4RjI5NzdGN0E5REExRkVFNDhCCis6MTBDNTkwMDBBRTk5ODZGQzY1NDc2RjMzRDQ5RkQ4NTk2RTI4OUY3MDNCCis6MTBDNUEwMDA3ODkxQTE3QzVDNjhCOTIxRkY4M0ZERjcxOUVBOEYwOUI2Cis6MTBDNUIwMDBBRTMxOTQ4RjZFNkYzMjk0QTc5NTNEMThFMTY3REE2MkMxCis6MTBDNUMwMDBBODFGNUZCNDIzQzI4RkY0MkI0M0I5MjNGRjc5NDNGRTI2Cis6MTBDNUQwMDAyNkQwRjcyOEZGRUNDQTZGMENFREFDQUU4Mzg2RkNCRjBCCis6MTBDNUUwMDBDNTMxREFGRkQ4OUQ0MUFGMzc4QTNERjk1NTNDREZBRjAxCis6MTBDNUYwMDA4MkRENUU0Q0Y2MzJDOEIxQTY3MUQ4QkFEMjhGRkJGMTlCCis6MTBDNjAwMDA0Q0Y4MURFRDYzQzBBRUMwODY0M0VBMzFDQTFENTM4NUE4Cis6MTBDNjEwMDBDNTM4RkUxMEZDOEMxRTAwQUNFRjg2MUZFNEM3QUZGNERCCis6MTBDNjIwMDBGRDZDQkI1REZEMjE4RTlGQzdFNUIwMkFBQkU0N0Y4ODIyCis6MTBDNjMwMDA2Q0FGRkI4QkYyREE2N0M1NjM3OTlENUMyMjQ3OTMwNzg5Cis6MTBDNjQwMDAyNzJDQkU5M0UxRkEyMTcyRkY5QkU3OEQ2NTVFMUNBRjNDCis6MTBDNjUwMDA0MkY3OTc3MTc5NjdFMjU1NThFNkIxNkIwRTBCRThGRjI4Cis6MTBDNjYwMDAyQTdCMzUwMUQ3QTNGQjc5RDY2OTdDNUFBRkY5OTFBRDA2Cis6MTBDNjcwMDBFQzcyRjI2MzlDRDNFNDNGMzM0REY1MEMyNjlGMjJFMTJDCis6MTBDNjgwMDBGNTZERTU5OTk4MTRCOUNGOTkxMUZBMThDN0FGOTAwMkQyCis6MTBDNjkwMDBEMUY0QTQ5RUVBNzIyQ0VGQUQzQjA3QzU4RjBFNUYxRDRGCis6MTBDNkEwMDA4RjI2MzlFODQ1QkQ2QTUzMkE1OUI5QjMzRjlDNEM1OTg2Cis6MTBDNkIwMDA0MDBGNzFGRkZDNzVFNzI2MTlFNUY4MzlGNjRBQjE3N0E2Cis6MTBDNkMwMDBEODQ1QUNCN0VDMEU1QTg3OEVDRkM4N0FGQTdFQUIwNTQ4Cis6MTBDNkQwMDBGMTRBRjI5MUNCREY1QTBEQkY2MjkxNzcwREMyMzcwRTRFCis6MTBDNkUwMDBGNkQxQjhGRjEzM0QyMUQ2RjUxREZDQzA4RUZDNDQ0M0E2Cis6MTBDNkYwMDA1RTcyNjYxOEVBOUIzRDk1MkM4OEZFNUIxODg3MTEzRDlCCis6MTBDNzAwMDBGQTE4RkE3M0YxMUZGQTRCNEMzMjg3RjNDMDdDNzczOTcxCis6MTBDNzEwMDBGOTA5Q0U0NUQ4MjEwM0YxMUYwRUYxQ0RGMEExRjlGNUFECis6MTBDNzIwMDBCQkYyNzdDN0RDNTRFQUZGQkU3OEE2Rjk1RjU0OUVBQTM1Cis6MTBDNzMwMDBFQzREQTQ5RkYyMjI4RDgwOThGMkQzRjc2MERFMEIwRkIwCis6MTBDNzQwMDA5QjQ5Q0VGQ0U4QUJFRDg3MUUwM0JFMzQxNTU5RTUyNkE4Cis6MTBDNzUwMDBGMjBDRjkwRkZEMTZDQUU3N0E2REE1OTg1Rjc4NkM4QzFDCis6MTBDNzYwMDBDNTBERTU0NzMyODAwODVDNTg1RTFBODc3MkUwMzQxM0M1Cis6MTBDNzcwMDBBN0EzREZFRTM0N0IzMzZFNDI5ODlDQkIyN0M5NDJGMkZECis6MTBDNzgwMDA4NTM1OTg4Rjc3RDk3MDc4OTVDRUIxRUVGMkYzQkNCRTJGCis6MTBDNzkwMDBBRUY5QURDNkZDM0MzNjMzNTU4MjcxRTYzRDY0NjYwMUE4Cis6MTBDN0EwMDAwMEQ2NDIyNjFERUZEMkUxMDA3NDMwMjc4OUZCREZFNzc3Cis6MTBDN0IwMDBCM0NBQjUzMjhDNUI2RkU2RTczNjRCNUUxQzYzNDEzQzE3Cis6MTBDN0MwMDAyQzlDMjBFNzlBQzZGNUNERTNGRTI0OTFFQTdGMDZGNDdGCis6MTBDN0QwMDBBNjU4RkJCRTJGNzIwNjJDMjg5NzRGRUM5REYwOTNDQkVBCis6MTBDN0UwMDAxOUY2MTM1ODlCODFGRUNFMDRCMDQzOTRGRUYwOUREM0ZFCis6MTBDN0YwMDA2MDlDRTc1MEVCODg5QzM3QkE0MTA2OUI4N0Q0MkU3ODIzCis6MTBDODAwMDBBM0Y5RDUxQjkzMDQwMzFFNkI2REJGRDhERTA1RjNGNEFCCis6MTBDODEwMDBENjRBQ0NGRTQzQzg0QkZDNUM0OTNEMTYxQkQ4ODlGMjc2Cis6MTBDODIwMDBCQkE0RjJBOTJFODA4M0JBQzYyQUQ3NDJCQUQ5RjE4QjBCCis6MTBDODMwMDBFN0IwN0UxNTIwMENGREI5Q0YyNzI5MzQ4RkYzNzY3NzJBCis6MTBDODQwMDAwMENGMTk0MERGNUMzNjMzRjZGQkY3RkJFMjNGQTlERjkwCis6MTBDODUwMDA1N0IwREY5NEZFRkQyRUIxNzU1OUQwOUZCODRDQUE5Q0ZECis6MTBDODYwMDAyRTg4RTg1N0U0RjVBQzY2OUYzNzEzRkQ4OUZCQzc4NTMyCis6MTBDODcwMDAzMjE1NDNCRDg2OEJBQzc3NTgxODc2NTFGNUE2OEI4MzVECis6MTBDODgwMDBGNDc3NDY5MzZGQkZEQkY1QjgwNUU1RDZFOTVGN0Q3OEIxCis6MTBDODkwMDAyM0VFODcxNkJGNkM2MjM2QTg3NzY2NTcyQzBCOTFCREM2Cis6MTBDOEEwMDAxN0IwQTBEREJBNjhBRkM5MUJBMDdDNjhEMjJEQjFFMTdBCis6MTBDOEIwMDA3QzVENEJGRDJGN0UyRTk2RjY1MzhCOUVCNzA2NjY0MDExCis6MTBDOEMwMDBGQjQ1MkY5QzE4Q0I0MDFFOUM1OUQzNzMyODEzRTFGN0NFCis6MTBDOEQwMDAyQjgxRUM2N0E2NzY4REJEMDVCRTJGOTJEODlERDFDRTVCCis6MTBDOEUwMDAzREZGOUFDNEVEOEU1MzJGMzlDQTkwREU4NEY2MDM3NzRDCis6MTBDOEYwMDA1MEJGQzE5RjlBQUQ2MTdBRUM0ODkyOTlGMDA5RjVDODkyCis6MTBDOTAwMDBERkFEM0UyRDA0NDYwODdDN0UzNzhGMDk5RjVGMERBRjVCCis6MTBDOTEwMDBGNzM0RjdFNzJFREE2RjBFRDg3MTdFRUQ2RDE2MUZENDVGCis6MTBDOTIwMDA1QkQ2RkUzN0EyRUYyQjlGREIxRDg3NzA1OEI2REY2ODAyCis6MTBDOTMwMDBBRjJFN0VFRUVCQjU1MzAwQ0Y4QjREQUM2NzA2RTlGMTIxCis6MTBDOTQwMDBBRjI4N0ZDRTZCRUIzMTkxMUNGMkM2MDkyMEI3OTY5MkNGCis6MTBDOTUwMDBDODgyN0FCRkZFNjREQTdCNTBGRTk5Q0JDNEVDMjAwQTExCis6MTBDOTYwMDAzRUVCRkNEOEYyMzJFNjdEQ0U0QUY0NjgyRkRCNkZFNDcyCis6MTBDOTcwMDBDMzY1RUQyNzJDMzgyRjU5NjQzRDU5QzBFODNGRkMyMjkwCis6MTBDOTgwMDA4QzJGNTlGRkZBQjAwRkI2QTA5QzVEMTY2Q0ZDOUIwOTZBCis6MTBDOTkwMDBFODZERDlERUQzRUYyMkREMkQ4QkUwRTdDRkYwOTdGNDAxCis6MTBDOUEwMDBGRUZBRDI5QTFDQTkyRkRGOTg4NEZFNzJENjBFOUI5RkE2Cis6MTBDOUIwMDBDOTAzRUI0QjlEQkYxN0VGM0VCNzREODVGMTRGM0RGRkQwCis6MTBDOUMwMDBGOTM2MTU1MDVFRjE1RjdGREY3NjNGRUU4RjVFQjVDQkI3Cis6MTBDOUQwMDAyODk3OTZGREVBM0ZFMjU4MThGQzg3MjU3M0Y5NzBFNjIwCis6MTBDOUUwMDBFOUE3OUVEQzAyNzAzOEYzOEU5NUEwNzZFNkI3OUZCODczCis6MTBDOUYwMDAxNTgwRkI5OTNERkYzNzE1Q0Y5RDU2RkNGNkVBMzRBNDEwCis6MTBDQTAwMDBCMzE1RkJBRTRDMUI2QzVGODQ3NDFCQjA4NkUzMzc0MEUwCis6MTBDQTEwMDBGODU1RjZDMzM4Njk5MDdENDU0QjIzRjA3MjZBQ0Y3OTlCCis6MTBDQTIwMDAwQjlFMEI3RDI5QjAxRTk0QkY0QjgzNUY1QkQwM0UzQkJBCis6MTBDQTMwMDBFNDY1M0QwOEE3RDdGNjlFMzg3NDFGRTQ0RjAzOUVBQzBCCis6MTBDQTQwMDA1MUYwMDRFQkNGMTQ0OUFGODQzMjUxQkYyQ0REN0JDQkM2Cis6MTBDQTUwMDA0RDU3MTQ2MjZBRjYyODg4MjdENjQzRjJCRTFGN0VERjQwCis6MTBDQTYwMDAwMkZDMTZGNkUxMzdCMkZDMUNGQkNBODJGMDVGQjYwQjgzCis6MTBDQTcwMDBGMDM5MTZGMTBBRjgxQ0RCMUY5RkE3RjE5N0M5RkRGMUU5Cis6MTBDQTgwMDA1OTlDNkNCNEZCQ0VCMThBRUQ1QkIwNzA2RjEyRTE3RjQ0Cis6MTBDQTkwMDAyMDdDMkVEOUY3RTM0MUVEMkM1RDNFMEMwNUU3MDUwMjI1Cis6MTBDQUEwMDA5RjU3NkNCMkY3RTY2NEU0REJFNzFEQUE4QkUzMzkzMEVECis6MTBDQUIwMDAwM0NBQ0VFQzNFRTc2NjQwMjc5RjlBN0JFRTQwMzhGNEVGCis6MTBDQUMwMDBGQ0Q2MkFFRjgwRUY4QjdFRkIzNkYxREQ5OTdEN0ZCNkI5Cis6MTBDQUQwMDAyMEZFRTEyNzRFOTgwNDc5NzZFMUU3NEQwNkY5QTVEQ0MyCis6MTBDQUUwMDAwNjY3NEI1OENGQjQ3NzBCMzE2NTNEQUE4N0YwNDdGOUZECis6MTBDQUYwMDA0M0MwODc4NDhGQzBDREQzMTU5NEJGODExNDVBRjdEMjE5Cis6MTBDQjAwMDAwMEU3OEZBNTgxMDNCNzBBNjNGQkMzQkQzOTU5RDRGNThDCis6MTBDQjEwMDBENjA1QkMwQTQ1ODhDRjBGQTcyMUZEMEQ4NDRGN0RGREFBCis6MTBDQjIwMDAzMkFFRkYzMjI4N0ZDMkM4QkY5MUY1OTcwMkJGRTJGRTQ2Cis6MTBDQjMwMDBBODFGN0UwMzA3RkU4OEU5OTkzNkFCMjQ4MDJENzQwNjcyCis6MTBDQjQwMDBFRDA0Njc3RkJDRjdDMTlGRUJFNzZGNkIxRkQ3NDdGMDIyCis6MTBDQjUwMDBCQkRFNUU4N0QzNTBGQzNFRDRGQUJFMkRGQ0VFNDk1NkI4Cis6MTBDQjYwMDAwQzc0QTRDM0YxRDQ1N0QxRjU0MTFCQ0E4Rjg5MDhDN0VGCis6MTBDQjcwMDBDQUU5MTlDM0ZCRUIzMzEzMkI1NTMzODVCRUY5QUUwRDUwCis6MTBDQjgwMDA5QTQ4Q0U5RjZBMDdCQjVDRTgyRjJGOTZFMjM5NkU5NEQ1Cis6MTBDQjkwMDA3MTlFRDNFNEQ0RDJGRDA3QzZBMjVDM0I3NUYwMjU4RDBGCis6MTBDQkEwMDAyRTM5REQyRkRERjVBMTQ1RDVGNDQzMjA1QzNFMEY3MDE1Cis6MTBDQkIwMDAyRUZDOTIzNkVGNjVBRjQ0RUY2RkQ5QUVCRjQ1RURFRjc3Cis6MTBDQkMwMDAzM0M5RkI1MzlDRkY2NzlENjZBNjQyMTc5RjA1NEQ1MUQ1Cis6MTBDQkQwMDBFMzE5MUU0RkU2RkFFRkMyQkE2MzI3MUQ4REM3N0Q0MUU4Cis6MTBDQkUwMDA1QzhDODJFQkFFNURFMzdEMUJDRjQ1RDUzN0NENzRGRTBCCis6MTBDQkYwMDBDRjI0Q0ZBNzU2MjhBRjhEOEQ1MUQwOEY1NzFCMzc4RjlECis6MTBDQzAwMDAyOTYxN0FCQzJFMDI0RTkyQUI5NENFRUZBNEU0RDI0MkJDCis6MTBDQzEwMDBCRUE3MEIxOENFN0ZDRDQwMTBFMUYzMDZCRDlCODU3QUYxCis6MTBDQzIwMDBFOTgzNzE5Rjk4NzE5RDdGOERCMDIzRkYyQUIxQjU2OTBCCis6MTBDQzMwMDBEMERGNUY1NUMxNTNBMzQ0REIxRjE4RkJGN0FEMzYzMTdFCis6MTBDQzQwMDAyNUFDRkZBNUQ2OUUwRjcwM0VFQzVGRUQwQ0VEMzJEMzA4Cis6MTBDQzUwMDBBQjc2MDFFNUM5QjI2RDY2REE3RjJEODM2RDE1QzJFRDQ1Cis6MTBDQzYwMDA5M0M3RUMwMTE1RjI5QjdGNUQ3RDA3RUFBNUZGREM2NkFCCis6MTBDQzcwMDA2NTc4MUVGMURBQkU5NUREQUI1MDJFM0QyQTMwRjRBMzY3Cis6MTBDQzgwMDBGRkU3NEJENTVGQTI1RTVFQjgxNTU2MDdGMjY0QkVBMzAwCis6MTBDQzkwMDBFNzQ5NkMzRkZGQjk0QzU2MEJFRDNGMTc4MjkzNzAzMzU5Cis6MTBDQ0EwMDBEQjlEMTI5QTg0RkI5MEVFRERFOTFFOTVGQTc5NzEyOURECis6MTBDQ0IwMDBGNjdCRTYzOTA3RjU3QkU2NUZERkE2NzFDRUZDNkIyQ0QxCis6MTBDQ0MwMDBFOTM1N0RGRTYwNkYyQkUxN0ExQ0VDNkRFNTAyMUY5MDZCCis6MTBDQ0QwMDBCRDFEOTY4NzcxMTY2MzlFRDcxN0JFRDE2NDFFQ0FCRjRECis6MTBDQ0UwMDBDNTk4MDJERDJGREUxRkVGNDVGRjRBNTgzREVBNjc5OUUwCis6MTBDQ0YwMDBCNUU3RTcxRURBN0ZBQjE5MjJFRDlENDIxOUM4OEY4QjhECis6MTBDRDAwMDBEQjhERTM3RkEzQzlCQjY1OTY5RTc5QkNCRTNGODNGM0YxCis6MTBDRDEwMDA2RDI3QjU3M0E2NjhGNEFBOTU0N0I2RDdFQkM3QTQwQ0UwCis6MTBDRDIwMDA4QkU4ODdCNzVGNkE2NTk1RDFGODIwNERFQjc3NzFGQjhCCis6MTBDRDMwMDBEN0EzOENGRDcxQkFFRDNGMEVGRjdFQUZDMEUzNDBEOEE0Cis6MTBDRDQwMDAxRTNCQzVBMzU1NTg0MjIzMTM4MTZGNUZCMEIwMDVDODgxCis6MTBDRDUwMDBCRjE1NzFBMTkxMDkzMERFQ0I5QURDQUM4ODgxM0M3Qzk3Cis6MTBDRDYwMDBDRkQwRTY4MUY1MzFDRjZDNUQ2NzEwQUY0QjVFQjREM0E5Cis6MTBDRDcwMDA3OUNBOTIxN0RFRkUxMkYxNzkwQTYxMEMxODNCOTVEMjNFCis6MTBDRDgwMDBGOUU1RkQ0MDA3QTcxRTMzMzExNUVDQjUyNUQ2OTBGQjFDCis6MTBDRDkwMDA1MUQ0NTM3QkFDNkMwN0YyRjdBQkFGOTNERTNBRkRCQ0RBCis6MTBDREEwMDA1NTFDRUM5QzdBNDkxMEE4QzFENjdGMUQ2QTA5Q0JBRkVGCis6MTBDREIwMDA3NDYyMUM4RTU3NkNDMzdEQzM2MTUzQTAwNkM2QUU5MkNECis6MTBDREMwMDBCQzZCOUVDM0Y1MUQzNkQzM0VFM0VDNUM5NjhGRkJDQTZECis6MTBDREQwMDBCMzJDQzNBMzEyRkU5NUI3MjUyODVGRjk3QkIzMTAyREEyCis6MTBDREUwMDAzRUM5REMwQjQyN0QwMkYwNDFFRkY1NEM4MTU0RUExRDU3Cis6MTBDREYwMDA0RUU5NEE0QkU1Mjg5NEJCMjYxOTE2NTc0MDdFMDJCMkVECis6MTBDRTAwMDBEQkNEQzkxRTM2MUZEMjk1ODlDQzg3RjA2M0NFRUIyRUMxCis6MTBDRTEwMDBGMEQ3OUYwMEE1Q0IxRjUxRDJCMEREOEY1MkNDMzRFRjlECis6MTBDRTIwMDA0NUE5REVFQjUzNDgzRjNBNjVCMjJGMzQzQTU1RjdGMTQ2Cis6MTBDRTMwMDA3OTlFMTc2MjNDMzUxODlGRDM3QkRGOUQwOERGRTUxRjg1Cis6MTBDRTQwMDAwQTRBNzgzQzQzNjQzQzY4OTVBNEJDQUQxNEQyN0E0OTQ0Cis6MTBDRTUwMDAxRUU1QzkzMTBDRTE3QTU2M0I3NzNGM0I1Nzg5NEYwOEI1Cis6MTBDRTYwMDA5M0NCQ0RENTMyQzk4RkM2NkExN0E1RUJBQUYzOTk0MkU5Cis6MTBDRTcwMDBGRTM1MEZFNTREREFGQUFEMDUyQUM1MDcyMTRGRTM4RkUwCis6MTBDRTgwMDBENTU5RUE0NTNCMEZFNzg0NzE0MTI2QTc4RkU4QzhFQUU4Cis6MTBDRTkwMDBBQTI0REY5NENEQzk2ODFGNkI3MkFBNkMzRUE0NjYyN0QyCis6MTBDRUEwMDA4NzhGQzk1OTRBRjBCMTY4NzlBOTc1MDZDMTEzREFEM0Q5Cis6MTBDRUIwMDBGN0FCNTM3RDc3MjMzQzZDNTk5NzFBRTQ5MjI1NzlCQ0U0Cis6MTBDRUMwMDAyMURGMEY1RTNBRkU3N0ZGNEZDMThEMTE5QzFBQUI2RENCCis6MTBDRUQwMDA5NEFFQUIyRTIyNzhENTU3N0IyOUZGQkYwMEI3RDY5NEVFCis6MTBDRUUwMDA4OTA4QjcyOTRDQjE4NUMzQURDNDkwMUYxMDZFOEYwMDVGCis6MTBDRUYwMDBERjI0ODdGMzBEQzAxMUY5ODZDNTc4NzY0NjU5N0Y2NDIzCis6MTBDRjAwMDA4QUYxMTAyOEE4MUZBQzZFQTU1NEZGOUUzODgwREUzRTIzCis6MTBDRjEwMDA5RjIyNjhGMUIwQkUxQTMzOEUyMzczN0YwQjRCNTY1OTk0Cis6MTBDRjIwMDBENkE0M0VGRjI2NzNBOTRDQzEzQ0YyMkFFMkU1NjgwQzY4Cis6MTBDRjMwMDBDMTZFRjlGQjc2RjIxQjlCNjRBOTNCNUNBRTJEQkY0MTMxCis6MTBDRjQwMDA0OTQzRjk2NUFBN0E5QzlEMDg4QjQ3MzNDRDI4QjUyQkI4Cis6MTBDRjUwMDAwNDU3MEY5RDUzRDY2QTdBQjNGRTAyRkU4QzdDRDA1Q0Q4Cis6MTBDRjYwMDBBRDUwQkE1RUUzODc4RDFBM0Y2QzQyM0M2MzFDODk4N0UzCis6MTBDRjcwMDA5RjZCQjY0QzY3QTQxN0ZGMEZFNEY5M0UzRUM0QzJFM0IzCis6MTBDRjgwMDA0NjEyM0NDMTkwMTlGMDREMzI1MkExMzQ0NEYxQkY0N0QyCis6MTBDRjkwMDBBRDgxMTFCOTE0M0ZFNTQ1RkE0ODM4QkE4QUZDQzc4QzBGCis6MTBDRkEwMDAwNTVERTg0RjRCRDBFMEM2NUUxOTk2MzAyQjk2OTY2NzJDCis6MTBDRkIwMDBFNjdBODc5OTc4RUEzN0EzM0QxRTA5RDc1QUNGNDExQkY1Cis6MTBDRkMwMDBFRUFGMDc5QTRGRjEwNzBCMDUxQ0VGRkMyQzQyMTM0QkY5Cis6MTBDRkQwMDBCRTNENzhCNDFDQ0Y0RjVCMUNBNDU3NTMzRDk1MzlFODM4Cis6MTBDRkUwMDBERjYzQzdBQzQ0OUY0RThGNEY5ODFGODZCRkQ0MDFFQ0MwCis6MTBDRkYwMDBCQTU1QTlENzdFOEM3Q0RCOERCMjBDRThGMEMxRDZFMUE2Cis6MTBEMDAwMDA3Njg0NzNCMzM5RTg0Mjc5RDc5Q0MwRjU4NzUyMDY1MENECis6MTBEMDEwMDBCOEFDQUZERDlGMzQzOTE4NTc2OEU0Nzc1REJFQ0E1M0FBCis6MTBEMDIwMDBDNzFCRTg1Nzk3QUI4OTU3MTlFOTVDOTdBQjJGQTU3MEQ5Cis6MTBEMDMwMDA3QjZENTE2QUU5Nzk5QzRGNTJFRjU2RTJDMzQ4QkFDRkYzCis6MTBEMDQwMDA5M0E3OTRGOTkyNTEwRjMwNEYxM0RBNkI2ODMzQTIxREY2Cis6MTBEMDUwMDBGN0ExMTBFMEY0Q0VGRDUzNjdCQjcyNzdBMDlEMDNCQjMwCis6MTBEMDYwMDAwMjkyMkIyQUYyMDNFMUE5RTdCNTZGOTIzMURFOTVDQjRDCis6MTBEMDcwMDA4NzM1QjY5OTM2NUM2RjAzRDAxMTFCODVGRTZDODUwMDMxCis6MTBEMDgwMDBCQzAxRTg4N0QxNzlBMDQ3RTM4RjIyNEE3NUZBNzRBN0RCCis6MTBEMDkwMDBFNjFBRTIwNDRENzk4NzQ0QzQ1NzNERDgxMTE0NEYwQzY5Cis6MTBEMEEwMDBGQjNCMjc4QzI3MUQ5ODZDNDM3QjRGMzI3QjBFQTM5QzQ4Cis6MTBEMEIwMDBFQTg5MTU4M0E4MzdFQjlEMzM2RDVFRjRERjI0MTQxMkUzCis6MTBEMEMwMDBERUJGOEMyRENGMTkyQzZFMDlFQzE2RjJEQkNBNEUwRjg5Cis6MTBEMEQwMDAzQjhFRTMzMDQ2N0U1QjkzM0M5RUUxM0U3MUI3QjMzM0JCCis6MTBEMEUwMDAwNkY3MkRCMUE5QTI2MTVFOEI1MjdEQzM1M0MzRjI2M0QzCis6MTBEMEYwMDA3MDc0MEQ1RkQ4RUQ2RUFEOUZDOEYxN0U5MEFBRjkyRENBCis6MTBEMTAwMDBCMzU0RTYwRDNCQjdBOEQyRTk1QjUxRDk1NTYxRkNCRERDCis6MTBEMTEwMDA2NkM0MzQ4NjcxMTc5MTdDM0RBMERDREFGOUZERTQ1NkQzCis6MTBEMTIwMDA2RDRFODBGMDY1OEU5NDE3QzkyMEM3OUQ5NEFBQTI4QzdECis6MTBEMTMwMDBGMzU2OUFGRjI1ODFFOEVBNEE4NDAzNzNFRUI4NjA4N0M0Cis6MTBEMTQwMDBGQzY4NTgxNEZBM0E3QTY5MUFDNTZCNUVEMDMzQjA2QjMyCis6MTBEMTUwMDAyRTIwM0RCM0I5ODhEQjIzOUE5RUUxRkFFOTZDOEI4M0RDCis6MTBEMTYwMDBGNEQzRDlCOTk1MTQ0Nzc1QjYyNTRENDFCQTNCQjBFMTEyCis6MTBEMTcwMDBGMkIxMDg4Rjc5QkQ4RDRDODFGOUNERUY5RDRDRTk4MkRDCis6MTBEMTgwMDBENjVGNTI1QURFREEwNjQ0Q0U1OENERkFGOTFCNjY0MTE0Cis6MTBEMTkwMDBCQjEzOEY5ODI4MkVBODNCMzBFMTRDMTVFNEJCNUJBQzQ5Cis6MTBEMUEwMDAwQ0UzOEVCQkI3REU5MzgzN0VGMTZFMTgwN0VEQUJFRTFBCis6MTBEMUIwMDBBRDIzODhCRUJBMDE2RTk0NkYzMEQ2Qzc3ODYxMTNFMDk0Cis6MTBEMUMwMDBBNTlDMzEzRDY4RDM4QkY1RTdCRDZFNkE4QjY2Mjc5NUNDCis6MTBEMUQwMDA2RkI0N0FBMzlERUY1QzI4NkY4RDZFQjdENUUyQUZFOThGCis6MTBEMUUwMDBGODVGRTUyODg0NTdGMTA3QUI3MjcwQkQzQUZGQUY0QzhBCis6MTBEMUYwMDAwNDc5ODRGMEZBQzBDQUEyRjlFM0FGNEVCREJBMjI3NTMxCis6MTBEMjAwMDAyMkE2REUxNTk4MzI2NzYyNTRGRjVBMUZGREYzNzE0RjU0Cis6MTBEMjEwMDA4ODYwREYxMjVFN0M3MTM3MUJGQ0FDREM4Rjc5NDJCMzE3Cis6MTBEMjIwMDA3Rjk5NkQ4MEYyMzhBREJEMUNCRDdDNDlDQkU3ODcxRTcwCis6MTBEMjMwMDA2MDc4N0ZBMUIyMTQ4OTVFREY0RjlCMThFQ0E3MDVEQ0Y0Cis6MTBEMjQwMDBGRkRFNENGMUQwRkE3Q0MwNEUyNTNBNjY4MDBGOTQyRjU5Cis6MTBEMjUwMDA3MzM1N0YwRkMwRkQyNjBCN0MzRkYxQkE0OTQwRkFFOEQ5Cis6MTBEMjYwMDBBMzI3NUYxQ0RBMkQ0MkYzMEQ2Qjc2NDNGOURGMEZGMzMyCis6MTBEMjcwMDBGREQ5QzJERTREMjRFRjg0RTYzMTlCMjdDM0Y3N0I1RUU4Cis6MTBEMjgwMDAzNzkzOUNBRjY5QkE3Q0UzRUQ4MERGMkZERTMwNTE3RUFGCis6MTBEMjkwMDA0MUFGOURFQTlEN0NDMEIzRjk3NkE4RDdGMzA3MzNEOTk3Cis6MTBEMkEwMDBFMTVGMUNCRTlBRTIxRTRGOUE4RDdFODJBOTY5OUM4RjE3Cis6MTBEMkIwMDA1RkQyRjg3OTVFNkYzM0Q5MUY3QUY5QkM4NjM5MTY4NTRCCis6MTBEMkMwMDBFODc0MDM3RDlGODc4NzM2Nzg1RjgxOTVGRDdCNzExRUFCCis6MTBEMkQwMDA5RUU3MzBCQUFGRjBEMkMzQjc1RUJGODZGNERBNzhCMjU5Cis6MTBEMkUwMDBGN0U3QUZCNzdBQTJDNTRGQkY5NEFBMThFNENGRkNBRTU4Cis6MTBEMkYwMDAxNkVBOTc4MTVEOTQ5Q0FBRjUxNzI2NDdFNkY3MjYxMTUyCis6MTBEMzAwMDAxRjMwNTk2NTE4NjczQzRGOTMyNzE3RTZCN0Q1NkM5MEM3Cis6MTBEMzEwMDAyNzI3RUREMUZEMjBBRkE3RjI3REQ0QkNERUNCODlCRjlFCis6MTBEMzIwMDBGQUFGRUY4N0Y0N0Q5RTNFNkUxN0U3QzdCRUY1NkM5RUExCis6MTBEMzMwMDAxQzZEM0Q3REVCOTg0QUY1NEYyNjQ0MUZCRjQ3MUJCRjMwCis6MTBEMzQwMDBCQjdBMDFGMzgyNUMyQUI3NDIzRDI3OEU3RkNGREFBMkY3Cis6MTBEMzUwMDA0MjVDNDc0MkEyMTBCNkFFRjlBRDhCOTkzNzZDNURGM0QzCis6MTBEMzYwMDBCN0NFQjY5NDg3RjVEQjg3ODdFNUZGNUUyQ0Y1RTFBMUE0Cis6MTBEMzcwMDAyNzc1MDlFMTYxNTU2QUU5MzFFNDlCRjJFNjJCQzYyMjgzCis6MTBEMzgwMDAzRENFNkY2RDI0Mzg5RjMwN0JEQzI4NUYzRjY5QkQyNzIxCis6MTBEMzkwMDBDRTE3NzU5RThBQzE4RjMwQkY1NUMzMEZEOEJCODU2MTJDCis6MTBEM0EwMDBGOEQxRjExMkQ5QkVGQkZERjk1RjNFODBGMkU3MTE2RUI0Cis6MTBEM0IwMDBEQzBDMDRBRjdFNzhDQjhEMEVCNzE4OEQzRUJCNDFERjAxCis6MTBEM0MwMDBGQTA4NkVDQTBCNDc5MUFFRDczQjNDNDhENzAzQzM2RkYwCis6MTBEM0QwMDAzNEYzMEQwNkJGMDFFQzU3QjA3NzRDNjk3ODVGMDE3RERGCis6MTBEM0UwMDBCNDc4MEVEOUNBRTk2MDI4QjhGNThEQUJEMTQxNzFGNDkzCis6MTBEM0YwMDBGNTE0QTVFOTc0NTBDNTU0NjBEOEUzOTZBMUU4RTA3RTIxCis6MTBENDAwMDBBNkRBMDY1OUM3MDUzQTc4RDg0MDA3NDU5QkQ3MTMxREI5Cis6MTBENDEwMDA3QzhBRjZDQUE4RkVGODNGNkU1MUUzQTZFMEI5NEY5M0E2Cis6MTBENDIwMDA4OUNFOTU4RUM3QThBOUI3RjFGQzM4OTRDN0M3RTNGQzhECis6MTBENDMwMDAzN0UyMzk4RDlFNUZCODczNDREQ0VDQjA3MTNGNjkwMDEwCis6MTBENDQwMDAzODQ0ODE1RjUxREEwMEY0OTNBN0IyODI0OUZGM0NGQTc1Cis6MTBENDUwMDAzOTYxOEU3RUJGRUZFQUQ0RTJBOTY5QTgzRkZDRDFGRDE1Cis6MTBENDYwMDBCNTdBQUFDQjZCNTNCQ0YzQzIzRTEzRjVFNzcxRTdCMEI0Cis6MTBENDcwMDAyRjAzNTBEQTlDRUE5QjhFNzQ1MTk3RjBGMzNCNTExRUI4Cis6MTBENDgwMDAxQzNGMkU5MEJFQUQ3OTdGRTUyOEQ0NkI5MTc2MDJFQ0RGCis6MTBENDkwMDAzRjFCRjBEQzczQTUyOUQ2NEY3NkE4NTRCOTlEQ0U0MTI5Cis6MTBENEEwMDA1NTg5RUQyQ0M0N0Q0QUU1OTY4RjQ2QTBERkIwOEE1MjlGCis6MTBENEIwMDBBNkQ5QTEyQjREOTc3QTlBQzgyRjVCRjkxNDlFOTMwMjk3Cis6MTBENEMwMDA5MUM4NTg1RjYyOTU3NDZFMEE4MkIwMTRGMzlCMURGQzdDCis6MTBENEQwMDBEQ0I1NEFCMkM5RDZCMEI4ODRFNTFBQkZENDU3OTdGRUI2Cis6MTBENEUwMDBGMjIzRjQ0M0RCNTQyNkE3NjI3QjJFMzcyNUM2RURBRjJCCis6MTBENEYwMDA3RkUwM0NDM0Y0QkRDNUVDOTMzREI4MEYxNTU4MjlGMjRECis6MTBENTAwMDA4NTU5RjJEMUZEMjdCMzJCNzk5QzFBODY4N0NBMzQ3RUMwCis6MTBENTEwMDBERTZFRUZFODY4Qzg4NUY2RjZCQkZFMjBBMzFFQjRDMjM3Cis6MTBENTIwMDAzOEU4NjdCMzY1NDk2N0MzRkRENUU2RTQyMERENkY2MjdGCis6MTBENTMwMDA3OTYxREZDMUFFNzIxNjQwREVFMDA3ODBGOTBFNjIxNzM2Cis6MTBENTQwMDBCRTJDNzg1QzVGMjIzREQ2NzA3ODE0MjE4ODIwN0Q2N0UwCis6MTBENTUwMDBFRUYwMzY5NENCNDU1MjlEMDlFMzhFNjZERDM1ODJGMkJFCis6MTBENTYwMDA5QkU3N0MzM0IyMkIwQTNEQ0M3QTY1NUQyN0RBMzNCMzc3Cis6MTBENTcwMDA1RTQ5OUY4M0U3MDdCMzlDMjMzRkM2MTRCNjBCQjYxOERBCis6MTBENTgwMDA2OEZGOUFDMDgyNEQ5MDVFNjU3QjlDRTIxOTVGRDNGQzc4Cis6MTBENTkwMDA2MzFEOTgwRkQzOEIxRDFBQkQ4MTlEMzM3RDBGQTRCM0RFCis6MTBENUEwMDA2QzdFRjNERDA1N0RGRUI0Qzg3MTM3NkI3Q0RGNjEwRUU4Cis6MTBENUIwMDBBNjVDOEE3NDAwRTNFMDNBN0VGNjRBRTBDN0EwRkFEOTk2Cis6MTBENUMwMDBFREMxQzAwRDYzMDAzRjc3QjAxRTMzQzJEMUM3NjQzQUNFCis6MTBENUQwMDBGN0QwRkRCQUU1Q0NBM0U1MTlFRDRGREZBQjMwRUY0MDU2Cis6MTBENUUwMDAzQTg5RUNFRkY2MTBFRkVGNjcxREQwMUZBNDc3MUNFRTIxCis6MTBENUYwMDBGOTM3NTRDQkJFQTAzQ0NEQzFDMkZBREJFRjM5RTQ2MEIxCis6MTBENjAwMDBGREZCOEI4NEIzNDdCMjk5RDQzMEI4MDI4QUM0NzBCODlBCis6MTBENjEwMDBGNzgzNkY3Q0Q5NzU2Q0VDQzA3Q0Q2MDc2RjNFOEY0ODYyCis6MTBENjIwMDA3QzdDODE0NUMwQTc2RDY5REU1RjIzQkZBOTY5REVCRDMzCis6MTBENjMwMDBDOEJGMTVCNjFFQjcwNDc0NzMyQ0Q5QjcxRkJGMkYzNURBCis6MTBENjQwMDBGOTcyNTIwMTFFQTdCMzdEQTM1MjEwMkU5REQxQ0Y1RjU4Cis6MTBENjUwMDAyM0Y5M0JBRkVDRjQ2M0M4Mzc3N0Q0NDgwQ0YxQkM3NkMwCis6MTBENjYwMDBERjI3OEYyMTVGOUUzNjAzMUZDMTdFRTBCNTU1OUZDNDIzCis6MTBENjcwMDAyMkREMkMwMTA2MEM5NzI3MUY1NDhEMjBGQkU5RUNERUUwCis6MTBENjgwMDA1MTgzREUxRkY5NDBGMzk3NzQ2QTdDQTJBRkYzNEU2NEI2Cis6MTBENjkwMDA0MDE4RUZDRUJEMEVEQUNGREM1OTY1QkFCMENGNDI3QTcyCis6MTBENkEwMDBCRkIzOEFDNzg3MzBBOTczRUNBRDA2QkJCMzZFQzA3RTJCCis6MTBENkIwMDA3MDFGMTFEOTRGNzdCNTZGM0JGMUJERTQ5Qjg0NzZGN0FFCis6MTBENkMwMDA4OUVBMDVEQjUxQkU0NENFNzNBNENCNzcyMjhERjREQjBGCis6MTBENkQwMDA2QzQzQkNFRERDOTY4NURCQzNGOTUwQUY1RjNCODA3Q0NGCis6MTBENkUwMDBGNThDRDJDRTAxNkQ3QzNDQTZGQ0EwRDgzOTg5RUU2QkJFCis6MTBENkYwMDBEMjhGM0Q2NEZCNTAwOEEzODdBMUM2NjM3OTU3NzkyRjY5Cis6MTBENzAwMDBDODA1REM3RkY5NDRFNjRDRURERjVGNjQzREJEN0Y1NzIzCis6MTBENzEwMDBENTk1RUNDNDA0NUM5RkY3RkZBNUE1MEMzRDdGOEI4QkQyCis6MTBENzIwMDBDRkRGQUVCNUQzQkZEQjdEN0U4Njc2QTFGREFCNzhCMjExCis6MTBENzMwMDAxMzNDQTNCOEZGRTExRjlBNURDMDlDQjA1RTY0MzBGRjRDCis6MTBENzQwMDA2NkVGRkZDNjdBNjE2MDhBMTdCNjZGQjU0NjhEMkJDQTQxCis6MTBENzUwMDA3NDQ5MUMyRkMxNDNDNUI2MjhGM0VCRDc1RjQ4NjIxNzQ1Cis6MTBENzYwMDA1M0NGMzM4QUFGMUZERDY0RTRFRjFBMTk0M0ZCOUFGMkZCCis6MTBENzcwMDBBQTVBREE2NzM3ODJGQzQwN0QxMDM5OUZFMzREOEYyQTIxCis6MTBENzgwMDBBODA3RUMxNkJGODI3RUQxQzY5MUE5Qjk2QkEwMUQ0ODJGCis6MTBENzkwMDAzNUYyRkJEODYzRkM4QTE0RkU1REYzMDdEOUQ3RjgxNTgwCis6MTBEN0EwMDBEQ0RGMzY4RUM4QTBFRjdBN0Y4RDAyOTdCMzNBNUYzNDA0Cis6MTBEN0IwMDBDMkJFRUY3OUYyOEI3OTVDMzMzMUFFRjRBREMwRjQ1ODcwCis6MTBEN0MwMDA2OEI3NjMyRDBCOTlEQzhDMUQ3NDY3OENDNjdEQUVCRjZBCis6MTBEN0QwMDBERTQyRTc3QjhERjk2MkZBNUNDOEM3NjVEQkM4M0ZENkRECis6MTBEN0UwMDA5NjEwOUE4NUY3NkI1NTQxMjJGREVBNEY1MEFFOEQ0NTU0Cis6MTBEN0YwMDBGRkVFOUFCNDRFOTQ3RjA3RUZCNkQwN0E5QjI3RjNGQkU3Cis6MTBEODAwMDA2QUQ2MjkxRkY5QUZDNEZFNTczMDBGRUFENTFEQkRCRjM4Cis6MTBEODEwMDA2RUM1NzcwMkQ0QTNCMDlGNDVCRjIxNzYwQUYyNjhDN0QwCis6MTBEODIwMDBGNEIzNzZEQ0NGQjkzMEFFMEVGMEIxRDUxQ0E0Nzk2RDZGCis6MTBEODMwMDBBOUIxNTJCRjVCREEyQzY1RDFGMEY3NzlCQTQ0RUIwQTkzCis6MTBEODQwMDAwODVEMTQxRjlDQzQ4Mjc2ODRFQjgzRDM2NzZFQ0U4M0ZECis6MTBEODUwMDA3NkI5Nzk0Q0M2RkQ3QzczQzE1OTZEQkZFOTM1RjFGM0RBCis6MTBEODYwMDAyOEREOEZDOEVDREE3OTk2NEQzQkE3QjI4NUM3MTczRTA1Cis6MTBEODcwMDBFQURGNEJGRTQzQzc4QzIwNEZBNzhCRTQ3RjhFOUNDNzBCCis6MTBEODgwMDAwQTE3QTc3QkM3RDRDRUU5QTgyNzFDODUyMjEzRDBCRkNGCis6MTBEODkwMDA5OUM3MDQ1Qzk3M0M3RDA3NUREMkM4Q0Q2NzAzQjQzNzU4Cis6MTBEOEEwMDA1MTdCRDkwQkVEMEI3OTdCRjQwOUM5MTdEOUJFQzJDNUUxCis6MTBEOEIwMDBFMzBDRDdBMzFGMEFDQTAzNjY4RjcwMkRDQzIzNzA4Mzk1Cis6MTBEOEMwMDAyQ0E4NEE1RkJEN0ExN0Q3QUZEQkExRkYxMEM5RDEwMEUyCis6MTBEOEQwMDBBRENCOUQxRjBDMjFCREI5MkI0NEMyRDNGQUEyRTM3NDdBCis6MTBEOEUwMDAyRUYwNjBBMUVFNDdGNUQwM0NCNkQ2MUMzOTgwRjZEN0I1Cis6MTBEOEYwMDBENjdCMTlEOTQ5NUI1MTg2NDJCQkFEMzdCMDAwM0Y0RjRCCis6MTBEOTAwMDA2MjE5MjhERkI2MkNCNDVDNEZFN0Y5MDUwMDdGODFEMjlECis6MTBEOTEwMDBBOEYzOUU5RDZFMjM3Q0JCNTczRjE4QzJGQkZCMzExRUI0Cis6MTBEOTIwMDAyMEQ0NUM0QUEzRDY2RjRDRTc3MERBNjIwRUE0QTM3RkMyCis6MTBEOTMwMDA2NDIwQkEyODczNzFCRkFBQkI0QUIzQUI5OERGODU3ODVECis6MTBEOTQwMDBEREEwQzE4N0REM0E5RUZCMTcyNEFGMTIxRUM3RDVBNzA1Cis6MTBEOTUwMDA0RkI4MUYwM0Q2NDc3MUFENDk3NTE2RDI0N0UyOENEMDM4Cis6MTBEOTYwMDAyQzVDNTc2MkJFODU1RDkzOEJGQ0M1RTFBNjhFMTE3OTU4Cis6MTBEOTcwMDBEQzE5MEJCNDIyN0ZCNjVEOTI0QUYxQTRFQkM0ODAwQjk0Cis6MTBEOTgwMDBGRENENkE4OTg1Q0U5MzBGMTY4OUIzRjA1RDg0OEQ3NUMwCis6MTBEOTkwMDAxNkYyNDM0MDlFRjhDNUVGMURENjg2RkNFNjk4NUE1MjEzCis6MTBEOUEwMDBCNkEwMTBERkI5QjBDODA4REZEQTAyRDk4RTc0NUNFQjFDCis6MTBEOUIwMDAxNTY1MDFGMjFCNEFGNUZCMTE4Q0RFMzcxODY3MzJEOTY5Cis6MTBEOUMwMDBGM0ExN0M3QkJBODgzRTVBQjY1RDEwODhERkVCQkQyNTlCCis6MTBEOUQwMDBGRUUxRjBCRDVFNEUxNkMyRkQwMDJGQkJCOEREN0I3N0M5Cis6MTBEOUUwMDA0RUU5Q0IyRTQ4MDNERTA3RkRDMzE1OEU0QjY5MTJFM0NCCis6MTBEOUYwMDA1NzJDRTAyNzk2ODUxNjYwQ0M0RDVCRkQ5MzQ3NzFCRDkzCis6MTBEQTAwMDBFQkM3RDlFOEZFNkNGNjBBN0YxOUNFMzdGNjEyOEI4Mjg3Cis6MTBEQTEwMDA3OERERDE5QjM0OUFENjU3Njc1MTkwOUYzNzA5ODE2QjM3Cis6MTBEQTIwMDA5MUVGQjdERTdENDg0NUJGQkFGRDYzMjdDNjBFMzM2NzY5Cis6MTBEQTMwMDBEN0RGQUEzMTdFQ0M1OTY4ODkzOEM3NjIyMkNBNzE3RDg2Cis6MTBEQTQwMDA1Q0U3NUIyMUEyQTcyRUMxRjc5NzU4RjJGRjE0MzRFNURCCis6MTBEQTUwMDAyNzUzM0NGMzI0ODRFNzg2MjlFRkU2Q0Y4QjQyMTdEMDg3Cis6MTBEQTYwMDBERTk5M0ExRUVENjUzMTM0NjkyQ0NBMjlBRUM3OTgyNDc3Cis6MTBEQTcwMDBBNzg3RTM3NzUzNzZDNjNCRTg2N0RBNTYwQ0YzQzdGMTFFCis6MTBEQTgwMDBBQUJBNkZBNzc5Nzk4RkRDOEY3Njk1RjNEOEM5QUZBMzNGCis6MTBEQTkwMDBDRkYzNEREMjIzQjFDNzFDMjE3MTJDQTY0QjY2OTA3RENDCis6MTBEQUEwMDAxNjVFMEZFNEZFQzYxQ0VGQzcyRUEwOUJERDM1NUNFRUI0Cis6MTBEQUIwMDBCN0RDQzVFODNEMEFGQ0M5MEY4MzZGNEIwMTQ4NjlGRTFFCis6MTBEQUMwMDAwNDhENDJGNTBBNjRGMkEzQUYxMzk1NjAwOEUxMzlENkRDCis6MTBEQUQwMDA0NkY0OTRDNjdDMjRENzIyRDdFQjM4RDY3ODM3QzYxREI3Cis6MTBEQUUwMDAzOTNDQzY3OUY2NkFGQzhEM0Y1MjJBOUQ1N0EwMjVDQTVCCis6MTBEQUYwMDAyQ0U5NzNFRDI4RkZGNjhDNTdEMjcxQkZGRDYwNDI3NDlDCis6MTBEQjAwMDAzREZGNUUzQTZGQkY1Qjg4NkU5RjlGNEJCNzczN0QwOTg5Cis6MTBEQjEwMDBCMjMyMzQ4OTUwQzUyOEFFMEZGMjYyMkE5RERCOTA5MzUxCis6MTBEQjIwMDBEQjJBNzJCOUMwQUU2M0E0RjdFMkM2NzVEOTNENjFFM0UyCis6MTBEQjMwMDBFRDQ5RUY5QjI3QzYxRkM0NkJFRDk4REMxM0FBODFGNTU2Cis6MTBEQjQwMDBCNzAxRDVFMjdERUVCODZDMEU0N0E3REEwNzQ3QUMyRkQ4Cis6MTBEQjUwMDA2QkVCMDIzRUE4MTk1NTg4NDA5NEE5M0UyQkI1RDBCOTZECis6MTBEQjYwMDAwODQ4NDNGNTFCQjEwRjBFQjE1QUZEMkQ0NTkyODBFRkM5Cis6MTBEQjcwMDA5MDBDMDM2MDA4NTAzRjYxQkFDNTcwOEUyMkQ3MUQ1MUNBCis6MTBEQjgwMDBCMUZDN0UxMzUzMTI4QkZBQzY3RjZDMUMwQkFDODFGMTc3Cis6MTBEQjkwMDBFM0JENDY3OEM3QUU3ODYxMjVEQUU1OTE3NDgwMzNCODg1Cis6MTBEQkEwMDBEMDJGODY4QUNGMzVCNjRCQkRCRDFGMUYxMDNDNjk5RTU2Cis6MTBEQkIwMDAwMDlBOTZCN0Q4MEUwQjAwQTVBNTVERDJFMzYzNDlGRTg3Cis6MTBEQkMwMDA0RTM0NzVBQUU4MEZDNTgwQTQ3RDMwRkY0QjlGN0VDQkY1Cis6MTBEQkQwMDBCQjBCRjIyRDNFQ0U2N0IxRjkyRkFDNDRCQTRDQzhFMDc2Cis6MTBEQkUwMDA3ODdBMDc3RENCMDBFNzQ3OTlGQzc3OENEQjUxQUI0NDEzCis6MTBEQkYwMDAwNUYxQjEyRDM0OENGNDc4MjM5MzRBMTE0RjhEOTU0NzVDCis6MTBEQzAwMDA0NDk0RUJDRDdCOTk0NzEwOTBGRUZGQ0IxQTNFQkZEQkNGCis6MTBEQzEwMDBEMkY5MzkwRDkzMTQ5MjdGOTI5QkRGMUI2RDJFMTAxRDRDCis6MTBEQzIwMDAyODVGMEZERUZEMDJFOUJEQzcwRTg4MENGOUJGRTQ3NzVGCis6MTBEQzMwMDBDNzFFQzFGNzgxNUFERUIxNTJCRUU1RjU0QTkyMUIzRkJECis6MTBEQzQwMDA4Nzc2NkExNEZGRjk1MDdBMzlCMjdFREU5MjFEMDI5RTAxCis6MTBEQzUwMDA0RkU0MkMwOEJFM0UxMkU1QjM1RkYyNUM4M0Y4NThEMDY3Cis6MTBEQzYwMDA0OUVGODcyODg1RkM5Q0NEMzkyMzQ0RUY4NzI4QThENTI4Cis6MTBEQzcwMDBDMDI2NTVGQzVBREFDMkNCRDlBRDg5QjQ4RjFBNjNFREYwCis6MTBEQzgwMDA2QUI4MEVFNkY3RThEMzEyNDM3RDY5QjIwNkQzRTc0M0RDCis6MTBEQzkwMDBCRkE2MTc5REE4MDlGQUVEOEYxRTlEMTE0QTQ3MzkxRTkwCis6MTBEQ0EwMDA1MzQ5NjFEMEZERTY3NzIyOURDQjU5RjcwQ0U1RjcyMzY4Cis6MTBEQ0IwMDBBMURGODRBOTFDOTY3NjdGREEwMTk0OTc2ODMzRTNCRENGCis6MTBEQ0MwMDAwQTg3Q0FGNURDMDYyOUUwQzUzOEVGMEQyQjdDMTYxQzQ3Cis6MTBEQ0QwMDA5RjY5RkI5N0M2MjVFNTRGMjI5QzRGNkE3QThGNTUyRTg4Cis6MTBEQ0UwMDBBMDc3NENEQzFBQkYzOEFBNTg3MUI0N0Q1NkFCMkI4NjhFCis6MTBEQ0YwMDBDN0I3M0MyMDFFNDBGRTcwN0IxOUU5MEZCOTJBMTgxQURECis6MTBERDAwMDBBNUU5NjU5Q0I4QkNGQUY5NDZENDJGQ0UwQTkxRDZCMUU0Cis6MTBERDEwMDA0MUVBQUNDMTc3MjUzNkFDNjA3MjhERDJCRkJGRUZEQTc1Cis6MTBERDIwMDBCRTJBREQ0QUYzNkY0NTFDQTdGNEFEODM1QzcyMjBERjg5Cis6MTBERDMwMDBEQzBCQTJBRkUzNjExQzc3NjJERjNBNjJGNDc1RTQ3NzMzCis6MTBERDQwMDA1MTVFOUZDNzc2NkZGMEEyRTZCMTU5NUJDN0E2NzQ5OTgyCis6MTBERDUwMDA1MjQ3MDE2ODFBNjc3Rjc5QkZDNkYxMDFCRDJCMTMwMEQ2Cis6MTBERDYwMDA1QkRENDRGN0QxODJENzYxNUU3OTRFNjRGQ0JFOTY5MTRCCis6MTBERDcwMDBCRkZCRTUzNUJBOEFGQ0FFQjBCMDcxNzI5MUVFMzg5RTQ5Cis6MTBERDgwMDA4MUVFMzRGQjA5RjhDRTg2MjI0MDU0QkUyMTNGODY5RkE3Cis6MTBERDkwMDBENjFGNDk4RkZGNzRCOTE4M0U2RkU4M0ZCNjgxMDkxNDRBCis6MTBEREEwMDAxNzU3QzE5NDkyRjRGRTcyOTE2OTcyRDFDNkQ0MTBDQTA5Cis6MTBEREIwMDBCRkZGNjlCOTA4NzI5MEU0NjIwQkFDMzQwOTc2MkFCMUVFCis6MTBEREMwMDAxRDRENzdBMzFFRDdFNUUxNDRDNEM5MTQ2NDVGREIwRDg0Cis6MTBEREQwMDAyNTRFREExNzUxRkVCMjQ3RkVEMDgyRjE5MUVCNDRFREE5Cis6MTBEREUwMDBCQzRCODMwQkJBQTExMDJFNUZCQjE0ODMzRTdEMTg3RjAyCis6MTBEREYwMDA4MTc1RUNFOTQ4QkNCRTAwQzZEQjVDMzY2QzFDRUUyRkJFCis6MTBERTAwMDBFQ0ZFMTdDOTNFNzAxN0YwRjgxNTc3MTUzRjNGNzdFNDIxCis6MTBERTEwMDBDRDdCMzJGQzVFNUM2NTNBQjdEMzJCNzVGQUFCRjJCQkI3Cis6MTBERTIwMDA3MDlDMEREODJGQ0FFNzNDMEJFOUNCNDc1OTkwRUI0M0M4Cis6MTBERTMwMDBDRDNFRERFNkQyRkMyNDFBNUQ0NUYyNDlBNDdDOUFGMDgxCis6MTBERTQwMDA4N0U0MTI5NEVGRTk4MjU1QzZGRDFDRUFFNzgzQTk0NkYwCis6MTBERTUwMDA3RDhERjRBMkVCRUJENkNFMzUwOUU4MEZDQkQ1RkNGRERBCis6MTBERTYwMDBCOTM2NjM5Q0MzNjUxOTVDOUU5OUQzRjkzQ0Q2ODk5NUY0Cis6MTBERTcwMDBCNERGNTQ0QjQ0REFDN0U5RjQ3NzQxOEY0N0MwMzExMjFECis6MTBERTgwMDA3RTQ4QTg2QjI3NTE3QzBDRTVFMzhBN0IxOEYyRUYzNkJECis6MTBERTkwMDAyMDU5N0NFMzJEMkU1REQxRTJBNjY1ODI3M0RCQ0ZDNEQxCis6MTBERUEwMDBGMTI4MkZGNzc0OTREQkQxQkYyRUI4NkREN0UyRkU3MDQ2Cis6MTBERUIwMDBBM0MwNDIyODM3MzcxNkJGNDk3MTI1NEQ1NUQwMzMyQ0EyCis6MTBERUMwMDBDQTk5MkZDRUI2OENFRDhGNjdFMDYzREFBRjNBNTQ2QjA4Cis6MTBERUQwMDAyN0ZBQjU4MkExMUQxNEI3RDAxNDM4MzQ4QjcxM0I5NjQ0Cis6MTBERUUwMDA2MTVDNEE1M0ZFOUE4QzQ1MjhERkYzNEIwQjExQkY2REUyCis6MTBERUYwMDBGNTE2OEE5QjkxRjM1OTU0M0ZDMkU3Qjg4RjIxM0FGOTNFCis6MTBERjAwMDA3NjdBQ0NBMUVGMkYyQkEyRUYyQjRCMzNGOEZFMzYyOERECis6MTBERjEwMDA4MUE4ODJGOTY0RTU4QjFFRTRGRkFDM0E0QkQ0Nzk1Q0FFCis6MTBERjIwMDBBOUUxMjkzMzgzREYwRjZCQUIzRjk0NEVFRjY2ODk5NUYwCis6MTBERjMwMDAwMTM2MThCRTYwRkE2QjUyQzNGMDMxNzkwMDdDQjg3NEI4Cis6MTBERjQwMDA3QzQ4M0EzRTEyNjYxMzFGNzY3NThBNUNERTkyNUVEQjcxCis6MTBERjUwMDBDMEU0REI1MDNGQUE5NTE2QjI2MzFCQ0Q3QzVGQkVBMzI1Cis6MTBERjYwMDA0MEUzMEJEOUQ2ODZDNEY2NkRFOTNBNkU4OTQ4Rjc3MDVFCis6MTBERjcwMDBCMjhCNDREQTI3M0EyQTlFQTdCOEE2NDc1OUNGRUIyODk2Cis6MTBERjgwMDBFRkQ0MDI3RTdGM0VCMkZEMUQxOURDN0YxNTk0MTRDMUQzCis6MTBERjkwMDA0M0ZCNjk4RTQ3QzAyQkNENjdFQjg4RDRCNjcwM0U2RENFCis6MTBERkEwMDBENUVDRTg1NjE3ODdFM0Q2RkE4Nzg5NEYyRjc2OUVCQUM1Cis6MTBERkIwMDBEQ0FFRDVFQ0U4ODU1RTlGMDVENTgxMkE5NDRFNEI0N0IzCis6MTBERkMwMDBGREY5MDQ3Rjg3OEE5OTlDNjQ5NzdGOEE0REMyRkNCMkQxCis6MTBERkQwMDBBQkIyN0M5NTE5NjFFNzQzQjJCNzUyQzQ3QTU3RTNCQjQxCis6MTBERkUwMDA0MkQwRkU5MzIwQkYwRkZBNDlGMEQ3QzVGNDBFOTc4RkE5Cis6MTBERkYwMDAxMTMzMkY2NDlEMDIzMTM5QzhEMDlEOTA3NzQ5NDEyQTUxCis6MTBFMDAwMDA3NzJEODBCOTI0RDBFRDQ4Q0FEQjZDQTAxNzYxNDJBN0Y4Cis6MTBFMDEwMDBBQkY5RkQ4QjZFN0M1RjkyREU5RkU0RUY0QjdFQUVCRDc1Cis6MTBFMDIwMDAyNzM5QTY3NTVEQzlBMzM4OUUyMkY5NTA2NjdDODZFRjE0Cis6MTBFMDMwMDA0QkUyRkRFN0EyNzcyOTJFRkExNEM4REFBNjA0OEM4N0YyCis6MTBFMDQwMDBFMUY3QjdFNUZCOTgyQzRFQzZGQ0ZBMTI4QzdCQkVFN0Q1Cis6MTBFMDUwMDA1NUFCNzY0RkIyNzMwRERFN0I3OTVDODQ3NTQzOUI2NjVFCis6MTBFMDYwMDAwOUY0RkQ3MDJDNkExMDJBQzNFODc4RjcxNTlENzE3OEMxCis6MTBFMDcwMDBDRTc3M0E3OENCQTBGRTYzQkMzRjQ4RjNDREUwNzhEQUE4Cis6MTBFMDgwMDBFNDU4NEFGN0NCRTYzOTQzNkU2QzdGNjBDRjUzNEY2RTRFCis6MTBFMDkwMDA4MUYxM0VERjY3QTNGNzRDMzYzQjk2QkFCMUZDRjM0N0ZDCis6MTBFMEEwMDBERTc2QTNCRTM4QkRFRjZENEJCNEYzQzkyNTUyNzAxQUFFCis6MTBFMEIwMDBERTIzQUI1MEUzRDkxQTk4N0Y3MTcwQjY4NUUyNEY3NkI0Cis6MTBFMEMwMDAxREEwRkI2OTRCNjQ5RjA1RkJBRjY4REQ0M0Y5QUI3NjkwCis6MTBFMEQwMDBGREQ5OERFNUVGNjc3MDNENzEzQURERTc0NkJGNDQ1RURGCis6MTBFMEUwMDBBQjM1MjQ4MkZFRDkzRENDQkYyOEVBMzk3Qjg2QThDRDRBCis6MTBFMEYwMDBGQjU1RUE3RkIzRTNENTQzODg5N0QzOEY1OEM5RUY3NkIyCis6MTBFMTAwMDBFMDkxREY1MUJGQTdGNkJENDhGM0ZEN0NGN0RCNzdBMEI4Cis6MTBFMTEwMDAzRDVEQzE5ODA3RTVGOTY5QkJFNkQ3QjM3NUM2ODVFRkU0Cis6MTBFMTIwMDA2RjVGRDVFMEExRTc0RkM3NkFGQkUwQUMyMUVBNjlFNzgyCis6MTBFMTMwMDAzMUNDMDlGMEE3RkIwMzlENzE3OEJGRjA3M0IzQ0Y4Mjk4Cis6MTBFMTQwMDBGMDU4OENGMDgwQjQxOEUwODA3MjdGNzE1MEEwNzkyRTY2Cis6MTBFMTUwMDA2RTZEQTNGQjU2OEJGNzcyRkZFMDYyODAxN0MxQTVGNUM5Cis6MTBFMTYwMDAwMENERkY1ODA2OTcxQkE3RjZGREM1NERFRjUyRUNCNTQ1Cis6MTBFMTcwMDBEMkZFNTk1RkY3NjJBN0NGOERGMEQxRDcwQjcwRTBFQkRECis6MTBFMTgwMDBERTdENzE3ODlBQTdFM0E5RjVDRjM0QUY4QUJEN0M1RUI2Cis6MTBFMTkwMDAxNUJCRjgzQ0U2RUQwNTNDMzkxMTRGQjMwOUZGQTdGNjc2Cis6MTBFMUEwMDAzMTA1RUZDMTc0RUY3OUZCMzNCNDY3NEVFRkIzMjk2OEUzCis6MTBFMUIwMDA1N0U4RjNDQTAyNzExQjM3MUVGOTg4RUI2M0I2NTcyMDg0Cis6MTBFMUMwMDA3RENDQTQ0RTNBQ0Y1OTIyQ0IzMkJFNEY3MEExM0M2MEQ5Cis6MTBFMUQwMDAwOTcwNzlEQTU5OTIwOUU1Q0YzQzI0RDJGQjk2NEMwRUFFCis6MTBFMUUwMDA1RThBRkVENTMzMTlGQUY5NDZBNzFCRkQ2MkJCQUZGMDc0Cis6MTBFMUYwMDAxMzdEOUU4Q0Q1RTAyRDc1QkEzMTdFNjY3M0E2RUY0Q0VCCis6MTBFMjAwMDAzOEJGOUZGRUYwQzU0QjcxREQyQjREOTVCRkNCQzY3MTVFCis6MTBFMjEwMDA5RUUyRjFBMUU3ODc1NUZFRjUwMTlBRjc3MEMzNzk2Mzk1Cis6MTBFMjIwMDA2NDBBNzA4QkMzRjNFRjdDOTFGOUU4NUVGMkRFRDc2MjhCCis6MTBFMjMwMDBDMkNGQTE0RDk5RENFRkI2RDlGMTAxREQ0NzNDOERFRjlFCis6MTBFMjQwMDAzQ0QyN0M4MjE0QTczNUQyNUJFRUM2NzNCRTkzQ0NFOTc4Cis6MTBFMjUwMDBDMzczRDlDRjlGNzg4REUyNkRCQUQzNzVGRjUzMjdENTlECis6MTBFMjYwMDAzQkI1RjdCNTQ0NENDQkI1Nzg3ODE2Qjg4NUU0MThDMDAzCis6MTBFMjcwMDBCMUMxMzYzRTlBN0NENEVFMTcwNUY4QkRCMTMzMDIwODIxCis6MTBFMjgwMDA0Q0Q0MTM4RkU5NzBBRUI0Q0MzNDlDRUI3MDM5OUFCNTkyCis6MTBFMjkwMDAzNUI3ODNGQzJEODFFOEY3Q0QyMkU1NkZERTQzOTNFOUE2Cis6MTBFMkEwMDA1Q0Y5MUM4QjdFQUVDQ0I0MzhCOTk1QTYxODhBQkZEOTYwCis6MTBFMkIwMDBFQ0Y4MDVEREJGQUQ1MkFEMzJERTVGMzlBRUM5QzU4RkJBCis6MTBFMkMwMDBCNEY3MTZDRUM3QzRBOTIyRDBDRDRCOTlCRUUxOTkxMzlECis6MTBFMkQwMDBGQkRGQzMyRDZGNUVFMjQ2Rjg5NkUzQjkwNzZENkE3NjAxCis6MTBFMkUwMDBEQzgwNzE4OTE0MEYzQTg1QjQ2RDg4RTA2N0Q2Q0I1QjBBCis6MTBFMkYwMDA3OTc5MDJDRjRGQzlEQ0IzMUVERkMzNDRGODcyM0JGNTE2Cis6MTBFMzAwMDA0OTVFOUVDQkNCN0ZBMjk1Q0ZDRjI4MUQ5RjQ5RkE4NTMyCis6MTBFMzEwMDBEMTNCNDU2MDkxMjU3NERCQjgwQThGMDY4RjNFQjg0ODIzCis6MTBFMzIwMDBBQzVCQjdBQkExRjJDMjRDQzZFMzM2MzI0QUE3RTI3QTg1Cis6MTBFMzMwMDBBMDU4RTA3Q0ZGRkRGQTAzQkNBQkI2QzRGRjg2N0U2QzQwCis6MTBFMzQwMDBGRjVERkQwNDQ5MkY4OTNFN0NFMzBBQkU3OUI4RkU3QjYwCis6MTBFMzUwMDBCQzg0Qzk0RDA5REZCRkZGRUZEQTdFQTVDOTJCOUU0NEZGCis6MTBFMzYwMDAzQThDMTc4OUVFNzVCRUVFN0U2NEQ0MzhEQ0ZGNUIxQUZBCis6MTBFMzcwMDBFRTBFQTFEQUVDOEUyREIxQTRDM0Y3NzMwQTNGM0ZCOUJDCis6MTBFMzgwMDBFQkExNEQ4NkY3NTVGNTM0RjIxRDVCRkQxQ0NGMzJEQzU5Cis6MTBFMzkwMDA3ODNFREI5MkM5RTU1MTRCNjY5RkZGMERDRkU1NDZFMjIzCis6MTBFM0EwMDAyRjBBQ0ZCN0E0NTIyODBDQjdEMzU5QTU4OEYxODdGOTAzCis6MTBFM0IwMDAxRDM2N0FDN0Y3MTIwNjgyMDJFNjNGOUE4NTQ0RDRERkZCCis6MTBFM0MwMDA2MzU4MTdFNTdGODAyMDgwRkMzOEE2OTgzMDNGODFGNUEwCis6MTBFM0QwMDBCOEE1RTE3OEZFMUM1QThCNzZEQUIxNjQ1RjEzRDJEOTA2Cis6MTBFM0UwMDA5NzhGNzQ3RTIwNDBGOUNGMzM3Q0JGRTk4MkVGRUIzMzA3Cis6MTBFM0YwMDBGOTNFQzgwOTY2MjFEMkIzOEMyOUQwQTFFODk4RTE4QUY4Cis6MTBFNDAwMDAyNkY3MkZDMDUzOTY0RTg1OUZCN0REMkM3OTFGMjIzQUYxCis6MTBFNDEwMDA2NjU5NzJCN0EzMEZDRUJBM0M1OEE0QkRCQkE0QjdGRkQwCis6MTBFNDIwMDBFQ0U5QTc4NkQxN0I0MzdERUY4NTBGN0ExRjc4NUVENTE3Cis6MTBFNDMwMDBDMjg3OUU5ODMwNDhCOTI2Njc3N0Q3MDQ2RTBCRDdGNzA2Cis6MTBFNDQwMDBFRDFBOUM5RkM5RDRGNTgwNUZENzA3NjRDN0ZERUE2NkMzCis6MTBFNDUwMDA2RTNGRURCRUMyQkJFNjcxOTRCN0FEMjZEQTRGOUY2QzNFCis6MTBFNDYwMDBGRDBCQkRGQjc4QUU5NDkxNUQzN0QwQjgyNzIzRjA3RUNECis6MTBFNDcwMDA3MkU3NTMxOUZDQkMyMzYwRDBFRjBCOUY3Q0U5RDJGMDBDCis6MTBFNDgwMDA3ODRCMDBCMzkyM0M4OUJGQzM0MTc4M0ZFNDUxQUQyNjNECis6MTBFNDkwMDBBNEQyNTJGMkM3NTg1ODI1OEY1M0MxRjkwRUM3NzdCODg2Cis6MTBFNEEwMDA4Mjk0M0E1OTI3QTU3MUFDODc1Mjk5QzlFNDlGNEU2NDZBCis6MTBFNEIwMDAxRTRBOTM1OTI5QTVBOUFDNTJFMEY2OUQ5RkQyMEMxNjhECis6MTBFNEMwMDBBNDM0MEJFRDUzRjRGN0IwMUU0QTE1QkNGMTE5MTZCRjc2Cis6MTBFNEQwMDAzMTBDNEY0Qzg3RTM3QkJDQTVGQzdCNDQ3QzkwODQ3ODVCCis6MTBFNEUwMDA5QzEwNDU5RTQ3QzQwNTQ5RUQ1NTI0Q0YzMTJFNjg0NDA0Cis6MTBFNEYwMDA3MkZGRjcxNDc0RjlCRDM5QjNFNDNEOTRBNzJGNjU3QTIwCis6MTBFNTAwMDA4RjYxN0FGOEQ5REZGM0ZCMTVFQjA1QjJBRjRGRDg2NzBGCis6MTBFNTEwMDA1ODE0NDBERDMzODk1RTdBMDc0NDE1NTlFOTRFRDBFRjJGCis6MTBFNTIwMDA3Mzc1RkYzRkZFRTg3MUMyMDhDQzE2RjNBOUYwRjgxRDIxCis6MTBFNTMwMDA2NjczRTZFMzc5RjExQ0FERUExQ0VEMUM2NDhFRTYwNzE4Cis6MTBFNTQwMDBDMUY3Q0RGODNEM0QwRkREQjc5RkEzOUQzRkNDODlGMENFCis6MTBFNTUwMDBCRjMwQkZENUUwNDc1MUYxMTc1OEM3MUNCRjQwRTcwNjkxCis6MTBFNTYwMDA3MzYyNjZCQ0RBQzUwNkE2OTNCMEZFRThERTVGNzk4NDA2Cis6MTBFNTcwMDAxRjZBNDg3RjU2NDQ3RTZFNjQ3QjlCQzA2Q0E5Rjg5REUxCis6MTBFNTgwMDBEM0QzMzMzRjU0QzhBRUQzRkQ1OTQwNzAwQUI1NkJCMEY2Cis6MTBFNTkwMDA3RTQ4N0UyMUZGRDVERTcwMzgyNTY1RjE3REFCREQ3RkJECis6MTBFNUEwMDA0RDVDQjQ3Nzk3RjQ3NDJFRDg2N0U2QzRGRUVENjE0N0VFCis6MTBFNUIwMDA5ODgwN0NBRkNCNjE5RENFNzM3MTYzOEI3Qzk0NkYwOTI3Cis6MTBFNUMwMDAwQzE2OTdBQUJGNzdEREY0ODA5RkUxQkNFREExNTVGNDRFCis6MTBFNUQwMDA0RUY1QkREOTJBRjk2QTZEMDUwMUJBMUYxMDkzMUY3MDU3Cis6MTBFNUUwMDBBOTUxRTZENzg0RUYzQTAzN0YzNUM1MUFDRjREOTY2NzE4Cis6MTBFNUYwMDA3MUZFNUY5RUM1Q0ZCNTBGNUQ5MjVBODJFN0Q5RUIxNENECis6MTBFNjAwMDA5MUVFMERBRjUzRjhERjJENTg5NzM1RDQzQkU1MzZDMzY3Cis6MTBFNjEwMDAzREY5QjU0OURCRTgxRDIwRkI1N0RCMTlEQTkzNzYyOTc0Cis6MTBFNjIwMDBGQUJEOTREQkI0RjEzNzY5RjUzNzI3NkQyMzNGNDlDMzUxCis6MTBFNjMwMDAwODdFQkUxRjU5RkZDMDg4ODdFOUREQzdDNjVDRDhFRkRBCis6MTBFNjQwMDA2MkZBODA0QUZERDc4Rjc4QjgwQ0RCREI0MjhEODZGQkZGCis6MTBFNjUwMDBCQ0IzQjNGOEJFREFCNjk3RDNBMzI5Q0YxMjE4ODZGNEE5Cis6MTBFNjYwMDAyMEY5MjlCRTQwQUZENzM4QzA3OUQyOEQ1OTVDMkUzNkZCCis6MTBFNjcwMDA5OTAzNzQ0RkE2NDlCMzg3OTY2N0M1NkQ0MDdCNjc1RDY0Cis6MTBFNjgwMDBENjhFQTNDOEFGRTdGMjE4OUQzN0RBNDM0RkQzMzk4MjRECis6MTBFNjkwMDAyRERGQzJFQzgyRjY3NzAyMzBCRUEzMjA0OEY4NDE2NzM2Cis6MTBFNkEwMDA1M0M4NDBCNzMxN0RFRjZDOThGQUY3NUZGNzhEREY4NTdGCis6MTBFNkIwMDBFQjZCQ0NGNUQzRjg0M0FERjc0QThENEUxQjM1RkREQTQ1Cis6MTBFNkMwMDA2ODM3OUVBMzU1NjhGMEJFNUU1Qjk3RUQxNTQ2RjI2NDExCis6MTBFNkQwMDAxMEI4OTBCRDc3RTNENjExMzdBMjdGQ0FCNjdGNDgzODBECis6MTBFNkUwMDAxQUVBRTdCMkIyRjg2OEZDMTIyOUZGOUQwNTYyQzQzQjQyCis6MTBFNkYwMDA0QTAyQ0RFQkRDNUU0MTdCNkY5MUJGNjNEMTY3MDcwNEJCCis6MTBFNzAwMDAyREQ4RUZCRjZEMkQzRjc4MkRDQzY3OTFDRkU5QzVGODlGCis6MTBFNzEwMDBDOUE3QjZFRUEwN0JGQThCNUYzNDUzN0NDMkM4QUVEOUQyCis6MTBFNzIwMDA1QzBFQjZGMjc3MTJGNUY3OEQyRTY5QjUxQURFOUI1QTlDCis6MTBFNzMwMDBDMkMyREU1MTg0RjExNjFGM0I3OThDRDEzRDYzRTM3NzcxCis6MTBFNzQwMDBGREREODA2NkZDMTAyNTRFMkRGMkREODE4N0IyMjJERkQzCis6MTBFNzUwMDAyM0QzREUxRDI4ODhFRUE3ODk3Qzc3NjA1NzUwMjRCRDFGCis6MTBFNzYwMDBCMTFDRTM1ODY5MUZCMEFEMDRGNzNENTVDNzA0RjIxQjU3Cis6MTBFNzcwMDBGNEU3NDNFNUIxM0M3MzU4NUVGMDEwM0RBQUIxMzFERUQ5Cis6MTBFNzgwMDA5RDUxRjhFOUJENkM0RTJGQkJGMTUwOERFQ0ZFRUEwREFBCis6MTBFNzkwMDBBMTJDNENFQjE4OUUzN0Q1QUU5MDY0M0NEN0FFMERDNDdGCis6MTBFN0EwMDBEMEZEOTI1QTU5MEM2MERDNDg3NjZDODkwREZEOEYyQzk3Cis6MTBFN0IwMDA0MTk0RjExRURBMzREMzU0QkFGNzY0Qjk1NzlBNDBFRjUyCis6MTBFN0MwMDBCM0VFNThENDg5RjdFQTZBNUQxMjQzM0VDRTRFRTA3MTRCCis6MTBFN0QwMDAwNDJDNURBNEY3NjlFQUU0MzcxM0U2RTAzRUNFQzlFRjA2Cis6MTBFN0UwMDBFOUU1QzgyQ0EwMDg2OEQ3NzkxOTlFMkZDMzY2QTUzMjIxCis6MTBFN0YwMDAwNEE2NTdCNkUwMERFMTdCNTc2Q0IyNTVERUM5REY5OTMwCis6MTBFODAwMDBCOTcxREMyNEYyMDNEM0NGODFCNjY5QTFERkUyMzg1RUFGCis6MTBFODEwMDA1QjI5RTJGRkFBN0I5M0M5MUUwQ0I4NEMwQ0UzMDAzRkI2Cis6MTBFODIwMDBDREUyRTc4Mjk2RDg5MkQwRkIzOEJGNTkwRUYyRUQwNkMyCis6MTBFODMwMDA1NDMxMTFGMUYwN0FEQkRBOTlEN0MwNzc3MzQwQTI3OEJFCis6MTBFODQwMDA4N0ZDQUY2QjZGQkIwNkRBRjdCNDU5RThCRTg1MEUyN0JECis6MTBFODUwMDBBNTRFMzJCQ0RGRTA1RTZEQ0M1QjIyREVBQjkwNTg1ODNCCis6MTBFODYwMDAzOUU0REZDMTc5OTA1RDU1QzY0MkUxNzFCQ0M5NUU3RTc1Cis6MTBFODcwMDBFODJFM0I4OTRFQkE4MTNGRTlGQzQzQ0JCRjg3NzlBMEE0Cis6MTBFODgwMDBENzc2QjM5RkYwREVGRUJFNDBGRUQ1ODM2REYzNzI0OEFGCis6MTBFODkwMDA1RTNBOTY2RUM3QkY2MzUyNzU5NDlGNjMwRTI0OUY5RjI2Cis6MTBFOEEwMDBDRTUyRjQ3NzEyRUNEQTNCMTU3NkY0N0I0NUQyNTM1RDA5Cis6MTBFOEIwMDAzNUYzNjA5Q0ExMkREMDExMzMxQUYxN0JEOEVDQzFCMDk3Cis6MTBFOEMwMDBFNjdBNEQzRTRBNEUyRUM3NzVCQTg5NENFQjIzRThBRjI3Cis6MTBFOEQwMDBERUVDQzlGNzQzRkRGQUFGNEREQUJFRjFGNDhENDg1RkM3Cis6MTBFOEUwMDA5MkFDRDBCRURBOUNDNTNDNjgwRTlCOTMzQjMzNjQ5OEQ3Cis6MTBFOEYwMDBDN0U4MTcyRDFFRkM3QjA3RDM5RTJCODg0NzM5M0ZGQUFDCis6MTBFOTAwMDBCNTU5MjRERjEwNEU4ODJGQTlDQUUyNDEzQkQ5NUE5NTQ4Cis6MTBFOTEwMDBFQzkxMjY2MDNEMjdEMUU1NTlBNzg1RUMyMUE5Q0FFMUY0Cis6MTBFOTIwMDAyN0ZCQUI2RDkyNEIwOTkzN0I2QkFCNjU4RjY0QzZCRkM2Cis6MTBFOTMwMDA4RjYzQTM3NEVEMDBGMjNFMjc0MTJDNDVCRkFCNDVCMzc2Cis6MTBFOTQwMDA5N0QzQjQ3NUE1NjUzQjI4NERDREU2RjI3M0JCQTRDRTM1Cis6MTBFOTUwMDBBNEY3N0I4MTZFMzBFRUU2QzA2QTRFREZDQkQzNkRBNEE4Cis6MTBFOTYwMDAzNzk3QkYzRTNDNkQzMEZGRTA5M0Q1MkU0RjFFMDA3NkFCCis6MTBFOTcwMDBEQkVBNzJGMkRCMTZBRkZBQTgxMUU5NkU3OUFDNEQ0NjBDCis6MTBFOTgwMDAzQTM0QzU4RERDM0MxNUU5RkVGNzY2QkFFNzU5MUIzQjA2Cis6MTBFOTkwMDA0OTk5MTNENjlGMjlBRUM4ODVGMDMwODk2QTA2RDI3MzhCCis6MTBFOUEwMDBDMTYzQzExQkE1Qzk0ODI3RUExNkJDQ0Y1Rjk4REQ3QUIxCis6MTBFOUIwMDBBMzA0RjJBNTNENTZDREMwRjNCMkE5RDk1Qjc5M0U0NTdCCis6MTBFOUMwMDBERDIyMjA5RjY0MDc3ODNFNUJDRDEwMjEzRjIzRkIwOUE5Cis6MTBFOUQwMDA5RTFGQTE2RUMxRkNBREQ5RUQzQzNGODZFQkEzREJCMzFFCis6MTBFOUUwMDA3N0REODhGQUE4RDZFQzI5NDNGRkY0QjMzMEZGODIxMTEzCis6MTBFOUYwMDBGODc3ODM3ODdBODcwNjE3QkRGQzc5RkM2RUM2QkYzMzNCCis6MTBFQTAwMDBDNEQzQzhGMjE3QjQ3NkZCMDcyOEZGOEQ1NkZFQ0EwMEEwCis6MTBFQTEwMDBGREJGQUFCNTBCMEREMEZFQTBENkFFNjM4MEY2ODdCNEJECis6MTBFQTIwMDA3Njg3MDcyOEZGQkQ1NkZFQzYwMEZERkY1MTZCRDczOTFDCis6MTBFQTMwMDA0MEZCMzdCNTc2NkYwREQwRkU4OEQ2RUVFODAwRTVFRkU3Cis6MTBFQTQwMDA2QUU1QzcyMkZBRkY0MEFCREZBNTdENzdDNzM2QkM4QkVFCis6MTBFQTUwMDBGNjlBMUJFNDE1Q0E5M0ZDRDgwNkYyNzc2REFCMkEyNDBDCis6MTBFQTYwMDBGQUFGOURDOEY1QkY0RUVGNkVFRDVFQzA5MTZDN0U2RTQ1Cis6MTBFQTcwMDA3MzI0OUJEQjAxNTUxQTlEMTdBRkNBREIzODE1RTlGMEVCCis6MTBFQTgwMDAwRkZDOUUyMkU4OEZBMzc4MEY1NzVEMjU5MjdGNkZGOUM4Cis6MTBFQTkwMDBFQkZDNUQ5OUU1QUIyNDNBREZCOEEwRjdCNEY2RkFGQ0RECis6MTBFQUEwMDAwM0RBM0NFQkI0QjQzMjlCQkY5NzkxQUJCQTNDMzNDMkIwCis6MTBFQUIwMDBGNEEzNTkzNkU2NkRDMDRGMThGRjVGOTdDQ0Y1NENGRUI2Cis6MTBFQUMwMDBBQTkyMDYzQzM3QTkwNTNEODNFQkFCNzc1QTQyRThGRjkzCis6MTBFQUQwMDBBQTk3MjUyQUFGNEIyRUYxRTM3OUJGMkE0QkE0ODdFQUU4Cis6MTBFQUUwMDA5MzEzNDNGODRFNzM1RDVEQTFFMUJEQ0YzQTU5QTJGNzkwCis6MTBFQUYwMDA2M0E0ODRBQjZDNzM5QzI4Mzc2NkM4MjgzRkVCOTg5QzUyCis6MTBFQjAwMDA1ODRDRTc2QUIwNEY0MzdENTI1NTIyQTNEQ0M5NEQ0OEFCCis6MTBFQjEwMDA0RTQ0QjkzQzM3ODdBRkFCMjNCNkRCOEVGNzI4QTQwNzRBCis6MTBFQjIwMDA0NDdBMkI2MEE0MkMxMUJGRTdENTg5MDEwNUU2RDEyMUQ5Cis6MTBFQjMwMDAyRjI3RkZFQkNFMTZFRDRDOTFGMUYzNDQ1RENFQjdGRkRFCis6MTBFQjQwMDA2MjFBRTlCMTVBRDA2MzBBRTkzMTE2M0YyRUI1RUZGRUQ5Cis6MTBFQjUwMDBBNjc0NkNCNDA1RjU5NjlDNjE2MjY2OTBDQkJGQ0I0RUYzCis6MTBFQjYwMDBBNDcxNzczRUM0RjVENjA4RDA1QkY4Q0VEQUY2NDJDNjdCCis6MTBFQjcwMDBERjc5NzNEOUM4QUY1QjJFMzE1NzUyOTgxRkYzNzdEOTFECis6MTBFQjgwMDBEQzhFNjdBNjE5MUVEQzY3OEZDMEY3MTBDM0UwM0JEQzg0Cis6MTBFQjkwMDA2RkQ0NUJCOTQzRThBRDlDMkE5MDk3NjFGNUFEMkVEOTRGCis6MTBFQkEwMDA5MDBGNjY2QkVGMkE3OTk4MDdFRDlCNjlDRjZEMjU3REY1Cis6MTBFQkIwMDA3MjE2RjUwOTQzRkRGMkM3OThEMUE4NUY0MDhGNTg1OUU2Cis6MTBFQkMwMDA3RjM5QThDQjYzREQ2RUQxRTU3NEFEQTYzNzZBMjNGNDM3Cis6MTBFQkQwMDBDNkQwNzJGN0VGQUY4RjIyRkExNDBERUZEMDBDMjQ3RjVFCis6MTBFQkUwMDBBQjMwNEUwMEU4REZFQzEzNDhBRjMwQzk0N0Y3RkI4Nzg2Cis6MTBFQkYwMDA4MjlCRDk1QzJBQ0JDRUExRTE2NzRFRjkyMjAxRTVCNDE0Cis6MTBFQzAwMDBEOTI3NzkzRThBNzI0RjZBMjhGOEVBRjUyQ0I2Q0NDNzI0Cis6MTBFQzEwMDA1MEFGN0Q3MTZDNjUzRUZBQkRENjlBM0I2N0VGNDJCQTQ0Cis6MTBFQzIwMDAxNUUyRTk3RTg3QTJGOTFEQjY1NUVGNjcyNzQ2NjAzQ0RECis6MTBFQzMwMDBGQzdCNUJFQjI2RTBGRDcxQUY0Q0ZFOTJGNDEyMDVEQjMyCis6MTBFQzQwMDBEOTYxOUY5RTQ0NzYxQ0RGNkYzMkQ5RTc1Rjg0RjZGQzYyCis6MTBFQzUwMDA4QjE2MDVDRjA1MEUzRkFCQkRERjkwRUQyNDc4REVCM0ZDCis6MTBFQzYwMDA2NzA1QjUzMzBCOTUyRTdFREVDRjA4REVFQjMyMTJGOTQ5Cis6MTBFQzcwMDBERjA5NjlCNzY5NzZFMzk5OERERTNDRTg1N0VDMTI1MEZECis6MTBFQzgwMDBGRkZDNDc0RURCNDYxQkVBMEY2RDNGQzA1OERCNERCODFCCis6MTBFQzkwMDBGRjA5MDYyQzVBN0RCQ0U4Q0VEODFFNTFEMEZEQ0Y1RUIwCis6MTBFQ0EwMDBDOTE1NkU4NzVBNkVCQTJBMEJDRjQzRTVEMTEyRjQ5Nzc1Cis6MTBFQ0IwMDBCMUNEQkVEMTdDMDU5NjhCN0E3QjJGNUUxRTQyRjFBNTJECis6MTBFQ0MwMDBFNzI1QzBDMzMzMUQ1QUI5OUFCNkYxMkE5OENGMUU4QkQ3Cis6MTBFQ0QwMDAzRTNFMThENDQ1Mzg5RUE4RDE5M0JDMTFGQkRGNURBMkZGCis6MTBFQ0UwMDBCN0VGRDlFODlENEFGM0I5REUwNDdCQjA3Qzc3RTY0NkZFCis6MTBFQ0YwMDA2NzdBREY3Qzg3RTdFNDZFQUM4MUI1OUY1NkJBRTI3MDM1Cis6MTBFRDAwMDAxQkI3QTRFREEzNTRENERCRUJDQUY4RkQ2MTY0MDBGNDk3Cis6MTBFRDEwMDA4RkU4Rjc4ODJGRTA2REVGQ0QyQUJBNjJGRkYzRDAzRjdFCis6MTBFRDIwMDBFMjBBQTA2ODk5QTlFQjkwMDNFMEI2NjQ3RkE1Q0QyQzE4Cis6MTBFRDMwMDBFMkZCNURBNTJBQkVERkE1Qjc1QkIyNzczNkQ5MzlDQjNBCis6MTBFRDQwMDA1RTE5NDc2OTk0NzY4N0YxRkVDQzc3Njg2N0IzNUNDNDM3Cis6MTBFRDUwMDA3OEE3NDM2RjJFRERBNUUwQkQ5OUNBMDZBNzg5RUEzM0RGCis6MTBFRDYwMDBFRUZGOEFCRTNFQkRGREU5NUQ2RkZFMDRDNzNCQTM3NEE2Cis6MTBFRDcwMDBBNTVFMDdCNUQ3ODUwMDJFNTFEQUU5RjVGNUZCRDU1MzI5Cis6MTBFRDgwMDA1Q0RFQ0JEQ0MwN0ZGRjcwNzMzRTY0NTJBNTA3RUIwN0VGCis6MTBFRDkwMDA2RDdFQkFDNzY2MzdGQjRCNTE5RjAwMkEwMzE4QTdBMEE4Cis6MTBFREEwMDBBNzUzREM3OUZDNURFQzg4RUY5MUZDMTVCNEIxQTQxOTk0Cis6MTBFREIwMDAyODJGNTc0ODc0RUUxRUI0QTk4RUIxOTA2RjgxN0Q0QUZBCis6MTBFREMwMDAwRDRDNjlDREI4MjNFMzMxNUVBMDY1OUY5M0U0N0FFREU1Cis6MTBFREQwMDA4QTBFNTcwMUYyOTVDN0MyRDBFRTZEQjlBMjMzMURERjdFCis6MTBFREUwMDBCRkFGQkJENzUyRjYwNEQyNkY2OEI5RUJBRTMwM0I2QzA1Cis6MTBFREYwMDA3ODBFOEZBQkNGNEVGMDk3MjEzRkRBODExRjUxMUYzNzJFCis6MTBFRTAwMDA5QTdEMzY3QzM3NDU0RDE3MjlBRURBMEVFNTZGNTA3OTdECis6MTBFRTEwMDBCNjU2RUU5OTdFMERFRENCNDQxOUU3NTU5RjM3Nzc3QUJDCis6MTBFRTIwMDAwOUVBMzU1NzIyRkZGQjg0MjNBRTJBOUIwRkU1MDFEOTVGCis6MTBFRTMwMDAyMjIzNzlERDlENTNFRTQzMzgzRDIzNzkyQTkxRkY5RUFECis6MTBFRTQwMDA3MTNBNjU4Q0M3MDI1OTQ5RkE0MDFBOTE0Q0YxNTk1NkVBCis6MTBFRTUwMDBFREJFNTNGNjM4QUVFN0Y1NzkzNkI5QjlGREQwRTRCNjc0Cis6MTBFRTYwMDAxMDFFNUE2MjNCNkYyRTg2NzYzMUY3ODlCMjBBRkQzNzQzCis6MTBFRTcwMDBERUZCNzAyOUM2MjczRTc2RUY5MTNGNjM3QzZCNTNBQTc5Cis6MTBFRTgwMDA0NEVGMENFQ0FFMDk3OUIxNUU4RkMwM0E3NzgwMURCOUMyCis6MTBFRTkwMDBCRTZBNjYyN0VFNDdENzMzNDU0MTdCN0RCNzMwRDM4RkI3Cis6MTBFRUEwMDBGQUI5Mjc0NTYyM0JBMDdFNEM5RTMxNUVENTU5NjA4Q0Y1Cis6MTBFRUIwMDA5N0NBQUEzMEU2MzdFNkY4RUVDNzc1NERGODQzNjEzMUQ4Cis6MTBFRUMwMDA4RTkzMjIyODBBM0UxRDVDRDhDOTI4M0UzRjM1MkY0RjFECis6MTBFRUQwMDBDNkI4RUVCOEMyODgzOEQ4QTlDNjdFMTJBRjMyOTYyNzE3Cis6MTBFRUUwMDBDRjg4ODhEQkJBRDU1OEVFQkFERDk4Q0Y5ODZCQ0M3RjQ3Cis6MTBFRUYwMDBBRUQzQTM4QjlGM0ZFODdGRTdFMUIxN0I5RjY0QThBN0Q4Cis6MTBFRjAwMDAxQkJGOEFBNzc4NTY4NDIzREFFRDMxMjMyNTBGOUU4QjA5Cis6MTBFRjEwMDA2NDVCM0E2NzYxMUMxQ0JCMzQ4NkVDQTU4M0VFMThBNkMzCis6MTBFRjIwMDA0MERFQkE5NDkxM0NCNTI2MDYwRkUwN0VENTJBQ0FBNUVDCis6MTBFRjMwMDAyQTY5QThFMDgxRjdBMURDMDFGQjU1OTRCRjkxRjBDQkQxCis6MTBFRjQwMDBDRUU2RkU0MTY3MjVGRjdCNzE0MTI5NDQ3Njg0N0Q1NURECis6MTBFRjUwMDBCQzVDRTNDMUFENjM4NDFGQjYyMjJDQ0ZFM0JEMUY3NzM5Cis6MTBFRjYwMDBGM0YzMzhCQTc3NEY0NzcyODQ1NzU4MTlFMjZEMzIwQjcyCis6MTBFRjcwMDBFMDNCOTREOUY3N0VBNDg2NjAxRUVCOTVCQzRBQjQzMzdGCis6MTBFRjgwMDBENjg5NUQzNDhFNUFFRUY0RTFCRTNCMDVFM0JDNEQxOEU0Cis6MTBFRjkwMDBFRkFENTIxQTg5OEZFN0REREM0RTUyRDg1QzNGRTJEMUVCCis6MTBFRkEwMDAzNTVCQTRGODkxRkE0MzMxNzU3OEY4NTJBRkJERDdBMDFDCis6MTBFRkIwMDBDN0IxRTk3NEY5QjI5QkZCRTdGNjc0ODhBMjE3RkRFMENDCis6MTBFRkMwMDBCN0U3RUQ0MDdDRUJGOTU2NUY3MjFCQzVGNThGQUJFQ0Y0Cis6MTBFRkQwMDA0MkJBNjQzNzcwM0IxNEY0MDBERENCRDZFM0M0RjRCODE2Cis6MTBFRkUwMDBDMkVFMUMxRUJGNzYzQTQ3QkM4MEJGOTAxRTQ3MTQxNjY3Cis6MTBFRkYwMDAwNzRFNDc3NzI2M0NCQUYwQ0I3OERFOTMzREFFNTQ0NkI5Cis6MTBGMDAwMDAzOUYzNEJGREZFMDVFM0ZERTJGMzg1NzQ2RTMwNDNGNDA2Cis6MTBGMDEwMDA1RUEyRjlEM0QxQUU0QkQyQzY0QjRBOTZCQ0Y0QkUzQkVFCis6MTBGMDIwMDBDQzQ5ODRGQTBGMzE1RTNGMjk2RkVGNEFCQzc3QjUwN0IwCis6MTBGMDMwMDAwOTA3RjlFNzJFMEVFNzQ4QkE0REVGRjA5NzhFNDE3OEIxCis6MTBGMDQwMDAwOUEwMEZCM0ZBRDNCMUUwNkVBNUYzQzBGQUZCNThBMjQyCis6MTBGMDUwMDA3NTVDN0ZCQTlFNjhFMkY2NEZDRjQyODVFMjJDODdBMkFDCis6MTBGMDYwMDBGMzkzRUUwNEVFQzc0RUQ5MjJBMzdEOUI5MUY3NTAwRDhBCis6MTBGMDcwMDBERDgzQjk4RkM5QThFRjMyM0EzQTZGNDZCRjU3MjQzRkI0Cis6MTBGMDgwMDAwNDFDNzFFMzc5OUNEQ0I3RjNDMzlCNEM5QzNGNTg5QUZBCis6MTBGMDkwMDA0NDc4OEI4QzJGOEQ4QzI3MUQ5RTkzQTBGOTI5NDAwRkNGCis6MTBGMEEwMDBDNEUyN0QwMEY5NEE4QzEzRUM1OUM1RTg5RDgwOTIxN0EzCis6MTBGMEIwMDA1QjZFRkI3N0U4RUZDQjExMTYxOUU1NzVDRTVCQkVBNzRCCis6MTBGMEMwMDAxQzMwQUYyRjVGRjJFNUEwOUNERTI2NzVEOTEzQzJGQzgxCis6MTBGMEQwMDA5RTkyQzhFRjlGNDVDQUVCRTEzOUEyNDZBRkEwMzc1Q0NDCis6MTBGMEUwMDBERjNEQ0Q0NkZBMDZFMjBBRTZBNThFOTY4MTA4ODc2RkQ3Cis6MTBGMEYwMDBERkY0Mjc1QkNBRkZBMEREQTJEQUZDRjhGNzQ2REQxRENFCis6MTBGMTAwMDA3QTNFOEJFQ0IwOUNCNzc4QkU2ODVCRDY0NjU1NDJCODY5Cis6MTBGMTEwMDA1NTkwQkZFODYwRjYzQ0YyMTc0OUVGNzI3RkQxMTg5MzIzCis6MTBGMTIwMDAzNzgwNzlGNjlFOURFMkVFREFGN0REQkUwMEUzRDVFQUEwCis6MTBGMTMwMDA1M0FGNTM1MDNGMTc2QUZCOUZGMTM5NDI1NDc4NDkxNjM5Cis6MTBGMTQwMDBBRjBGRjkyNkYyN0I4MTA2NUZDNjRBM0Y5RDBERjgxQjgzCis6MTBGMTUwMDBGM0I4ODVFMkVFRjJDNUYyODY1Q0U0ODc0NjEzRTFCM0NDCis6MTBGMTYwMDBEQ0E0MkM2RDBFREJBNzM1QTcxNjk3RTQ0Q0E0N0QwMTFCCis6MTBGMTcwMDBGM0MxODY0MUU5MTU5ODBGREY2MTRBM0U1RThDRjQ5QTJGCis6MTBGMTgwMDAwMzZDODZGMjI1NDdFNTA2NjQ0RTU1MENGMzg1RDFBOTNDCis6MTBGMTkwMDBEMjJCNTFGREU2NTQ2RjQ5OEUyNkY3RjBEQ0M3QUNCMTk3Cis6MTBGMUEwMDBGNDMzODlBNTZDMzZFQTY1Rjg4NjdBRDdCQzJCODY5RjNFCis6MTBGMUIwMDBGNzI0MUJFRjQ3OUE0QzNDNUVFNDI2NkRERDY2M0NENzk2Cis6MTBGMUMwMDAxOThGRUZCRDg5MjFFQkQ4RkVGNTZGRDVFQTQ5MzY2Nzc3Cis6MTBGMUQwMDBDODE0OEY3RUIyMzc4RUQyQkRDQjg4NzM2MERDREY1MjBECis6MTBGMUUwMDA1QzRFMDUyMzNGMjhDMjg1RjJGN0M4RkNEREVFMkExRURGCis6MTBGMUYwMDAwRjUwQkI5QTA5NzgxNjUwQUJERDUzNTFFRkUwN0Y4RjZCCis6MTBGMjAwMDA5ODc5QkQwQUJFQUY0MjVCNEMwNUZGMEIxMUZGQkE2QzhCCis6MTBGMjEwMDAyQzExRUJBN0IzNEU4QTYzNjQxRDRDRTFGMTEyQzY3MzQ3Cis6MTBGMjIwMDBBNzZEMDNCQzAzQTVGQjAxQTQyQTEzRUQ1MzQ2QkY2NkRCCis6MTBGMjMwMDBFNzdGMTdBQThBRDEzQkUxRjQ2NjEzRUU3RjU3QjM4MENDCis6MTBGMjQwMDAyNEY0RjlFMThFNjQyQkQ0NEUzRjhGRERGREY1MDcxOUQwCis6MTBGMjUwMDAyODk3RjNDNTFEQkUzN0M4NkU4ODk1NzdBMDdFOEMzMTgwCis6MTBGMjYwMDBGMkExN0U3RkFENTZBMzkzNkRENTMyRTE1QjJGNzdBQkQ0Cis6MTBGMjcwMDBDNzI5REUzRTg3RjVENEUwM0UyQkE3MkFEMTgwRTcwQkQ1Cis6MTBGMjgwMDA3RUQ5REU0Q0U2OUIxMERFNkY4MEJGQUI5QjI3RDEzQjY3Cis6MTBGMjkwMDA1RDRBQUY5QkNBQjc1NTJCNDNGNDNGNkM4MEZFRDM4OUMwCis6MTBGMkEwMDA5RTA2RUUzRjhCQ0FCNzg3QkU0OEI4MTE0MEIxQURFN0E2Cis6MTBGMkIwMDBBMzg0NTJBNUNGNkU4RDg0QjM3QkI1NTE3RUZGNjA3RjUyCis6MTBGMkMwMDA2NDNDMzk4NzhCRERFQzREQkUxOUUwNjY3RjQwRjRCNEI5Cis6MTBGMkQwMDAzMUZDN0IzQ0M2N0FEMzczQ0YyNUYwRjM3MkJEN0UyODE4Cis6MTBGMkUwMDBGOTE2QUMwRkZCREUzNjA1RkZCRThGQjE3RTY5RjFDN0E0Cis6MTBGMkYwMDAwOUZDREM1REFGQ0ZFN0Y3QTM1RTYzQkQ0OEZDNDRDRUZECis6MTBGMzAwMDAxN0U2OTVGMkUzQjA3OTVENjlCMzFBQ0FDQjY2Rjc5QjRECis6MTBGMzEwMDA1N0NBNEZDM0U2NzU4RENCNThERjU3MTM3RDVFRDdFN0NECis6MTBGMzIwMDA1QjA3OUQ5NzVFRUZBNkEyOEJBQjE3Qjk4RTVCQTY1QkMyCis6MTBGMzMwMDAwNzgwM0JBRkZGRDNCMjhCRUJGNzVGMTYwQzVFRUZDRUNGCis6MTBGMzQwMDBBQUM4NzE1NDJFMjcyQ0RFMjMyOEU3Q0E5OUIyMTZERkVCCis6MTBGMzUwMDAwOTY3Q0U5OEE4NzFDMTI1OUExRDczMTZGRDE0MTgwRjYwCis6MTBGMzYwMDA5N0U5N0QxRkU1NUE0RjM2OEY0QjM5RkNFQzIyM0Y5RUMzCis6MTBGMzcwMDBDMzJDREY2NzUxRjBCQzIzNUJGMzVCODNFMDU5OENGQzRCCis6MTBGMzgwMDBCQkM3MjYyNzYwM0NBMENEQUQ2OEZCQUJDRTVDOENFNzRECis6MTBGMzkwMDBEQkQzN0VFNDM2OTI3QkNDNjhDRkMwN0VBRDE4RjUzNUVBCis6MTBGM0EwMDA4ODMwQkE5N0YxMjZCNjRCMDk4RkEzRjA5MkZENTcyRkZDCis6MTBGM0IwMDA3QUZFNDJGQkFBOUZGMDdEOTUxRUJGMUY2RTY3QjE0OTgyCis6MTBGM0MwMDA3RDc2OTYxRUJGQkQ0OTFCRTdCRjcyODZEMTdDQzBDRTNECis6MTBGM0QwMDBBN0JGN0I5QjlBMjc1MTdDRjMyRjZEOUQ5QkYwRkVEMTlECis6MTBGM0UwMDAyRjkzOTMxMzcwM0Y3MzU4OUJCNzZFMzdFQUY3MUFEMjc3Cis6MTBGM0YwMDA2NkU3OEQzMzQ1ODFEN0ZGMDc5MUIxOTI1QTAwODAwMEFGCis6MTBGNDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCREQ3REU1Cis6MTBGNDEwMDAwQjdDNTRENTk5RjhCOTczRUZCQzkyOTlDOTlENjRGMkVECis6MTBGNDIwMDBFMjExRUVFNEM1MDQ0Mjk4NjA4ODAxQUQ0QzEyQTBBODM4Cis6MTBGNDMwMDAyQzNCQzE0NzQxMkQwRTg5M0MyMjc5MjFBOEExQjJGNTcwCis6MTBGNDQwMDA4NjQ0ODRGODIwNjg0MEEwQTA0MzE0OEE1NkVENjAxMUQ5Cis6MTBGNDUwMDAwMUMxMURBMkE2NzY0QjZERUNGNjYxQTk0QjQ3NjAyOTUwCis6MTBGNDYwMDAwMkMyQThCQjQ4N0Y3RjJEN0JCRUVGREM5Qjk5Qjk5OTc4Cis6MTBGNDcwMDA1MTUwQjZERERGOUZGRUVDQ0RCOUU3OUVENzc3QkVGN0UyCis6MTBGNDgwMDBGNzlEMzMxNzJGRDI3RjkzMDg3OTI4ODkyQzBDMTQxM0ZBCis6MTBGNDkwMDBGQ0M3OTUxMTYyQ0ZDRkVGRTk3NDEyMzJCQ0Q0MkI4RTJBCis6MTBGNEEwMDBBM0VGREZDOUQxMTEzMjlFOTA4N0U5ODNEMDdBQjk1MDlBCis6MTBGNEIwMDBGMDZGRTNFOERGMjIyMTJCQ0JFOUY3RDAzMDk3OTAyN0RDCis6MTBGNEMwMDBDNTdFQkI0MEVCOUY3NDA4QTJDQzQxM0IwOURCRUQ3Q0MxCis6MTBGNEQwMDA0QkE3RjMzODA4NzlFQThFRkMxRURFMTkyOTZGRjAzOTQ0Cis6MTBGNEUwMDBCNjQyNzlCODhFRjgwMjE2RTg0NDVDNDRFOEZCOUQyNkUzCis6MTBGNEYwMDBEMURFNTk0QThCNDJCRkIzQzY0QUNCM0I3RTdGMUI2N0U2Cis6MTBGNTAwMDAyMzY0QzQwODgyRkRENUI1NTY5MzYzNTcxMUIyREIxMDRFCis6MTBGNTEwMDA3RUYzMjJDQzY3M0RFN0RGNDZGQjc5QURCQjc0QUE0MEEyCis6MTBGNTIwMDBEQkNGM0I0OTg4OTk3RTVBQjdFQ0E2Mjc4RkE3MTEzMkNCCis6MTBGNTMwMDBFMUI4NTgwOUVGRUIzNkRCREQzQzdEREZENERGMzIxNTc3Cis6MTBGNTQwMDBDNjIxMkRDNDVERTAyNjI0OTNBRkU0QURCNDlGQ0M0NzIzCis6MTBGNTUwMDBERTczQjdEMzI5QUZFQjk1RjY4NDY4MzlCQzk1NzNGN0EyCis6MTBGNTYwMDA0ODUwQkZCODc0MzFDMEM3RTI5MTJDNzRCRDczNjFBQTEyCis6MTBGNTcwMDBGOERFM0U1NTBGRUQ2RTMyQjgzQjY4M0Y2N0Y0NjQxNjE3Cis6MTBGNTgwMDBDMEYxQTIwMjU3RjUzOUY3MEVBOTgyRDBGOUNGMEQyQ0EwCis6MTBGNTkwMDA5QjhCRTM4QTE0NjREOUI0NkMxMjcxMUUyNjQ5NEM2RDlFCis6MTBGNUEwMDBBM0U1Q0MyNDYyMzI4RjIzQTQ3Qzg1RDhGNzAwOEM1RjNFCis6MTBGNUIwMDA2RjE1N0IyODhDNkQxNTYyREY4RjYwNUQyRDM5MjJFRjEyCis6MTBGNUMwMDA4NkMxRkQwODA3QjVGRjc5MUVBRjgxRDA3MTQ3RUYzMEM2Cis6MTBGNUQwMDBEMENFRDgzRTVFQTRGRjhEMDlDNDk2QzdFRTg5MkQ5Nzg0Cis6MTBGNUUwMDAwNjYzQ0I1N0JEMTM1QjdFNTU2MkYwOUU2ODFBQkFFNTgxCis6MTBGNUYwMDAzODg1NzdFRjAxMjM4MUY5MkUzQTlERTQzNzUyNzhFRjcxCis6MTBGNjAwMDBEMzEzMDJFQjk3NUYzMjIyM0U1NDJGQjI3ODAwM0Y0RTY1Cis6MTBGNjEwMDA5RjRBREE2QUE0RTU4Mzg3OTNGMEZCQkI3RjYyNjZERkNCCis6MTBGNjIwMDBFQjAyMkY0MzU5N0UzOTk5QzBGNzhCRDIwMkU1QTk3NEJBCis6MTBGNjMwMDBERUFGN0ZDOURGRTkyRDY2Q0JEMjQzRkYyRjE3NkRFRDFCCis6MTBGNjQwMDA4NEZBQUIwMkU1MjI3REJGN0IxNDIxRkQ1MDJGRjg0QkRECis6MTBGNjUwMDA2MDlEQkJGRkM2NjNCRkUxRTc4REZFMUVEQUVGRTlCRDJCCis6MTBGNjYwMDAzRjdFMTlFMDc1RkFGOUExQTkxQzlERjMzNUJBOUVBQjRFCis6MTBGNjcwMDAzQUExQkVDRDJBRjVEMEY3MTM0RkJGOThFNzhCREE5N0EyCis6MTBGNjgwMDA0NTNCOEMzMUVCNUMyQzcxQjhDRTU2QzFCM0UyNTlEOEY2Cis6MTBGNjkwMDA5RjQzN0FDNEE3MjVGM0ZDNzU0MURBN0UwOTk3RTM5NjY4Cis6MTBGNkEwMDBBMTFGMDNDNUQzNjIyOEJCMzNFRDE0NUYyN0RBMThERTMwCis6MTBGNkIwMDAyRTMxRDM3MjlDN0Q1NzlGQjUxQjc4RTJCQjJBNTIzRUY4Cis6MTBGNkMwMDBCQUZBQzczODFGRDdDOUY3MTFBRkY3RTk2NTVEMTJDMDlECis6MTBGNkQwMDA3MTM1RTdERTQ2RTdCRkNGNkMyQjIxMjlGMENDRjEwMzczCis6MTBGNkUwMDBERUM4MTIyNUJDNzQ1Q0Q3OEY5QTAwMkY3RUM1QkI3QjA5Cis6MTBGNkYwMDA0OEUyRjE1QzU5N0ZEQTNDRjlBQUFGQThBN0UzM0E0QjlDCis6MTBGNzAwMDAwODM5Rjc1MUQyOUQxRTNBOEY5MTFCNjJGN0JEQzgxRjcxCis6MTBGNzEwMDA1QjVFQTVDMEE3OTY0NEJENzdDMjdDNzI1NzY2MjE5REVCCis6MTBGNzIwMDAxMDlDOEZFQkU0MDdCNzM5RTk3Qzg3MTg0OTBCQzA0NTdCCis6MTBGNzMwMDAzQkVFNUE2NTFEMkZCQzQwRkI3MTYxMzdGQzQ1OUVGNUMxCis6MTBGNzQwMDAyNzY1RDA3RDUxRThFQTc1OEVEMTExRkRCNzc0MjhBNUUzCis6MTBGNzUwMDBCNzQ1MUNFMzJGRUFGQjQ1OUE3OUE4RkQ0Rjk0MTg5RjAzCis6MTBGNzYwMDA3MjE4REM2QjQyQjhGRjQ2MTFGNkZGRDQ4M0QzOUUzQzdGCis6MTBGNzcwMDBBRTFGM0M5RjEzMEY3QTNDOTNBM0RFQ0ZERkIwQjgyRkIwCis6MTBGNzgwMDA5QkI2NkJEODk5M0U4RThGODI2RkMzRjM2RjY2REM0RTRCCis6MTBGNzkwMDBERjlGRDkyMUI4ODEwNTM2Q0NERUZFRjg0NEY4RUU3OTNBCis6MTBGN0EwMDAzRTAwRjM4NTdBMEY1REVGOTlDMERCMzZGODZFRkU2NjlBCis6MTBGN0IwMDBGQjM4NUU4QUI0NUZCMDYxOEE2N0IyMkIwMkNGQ0JBNUZCCis6MTBGN0MwMDBEM0Q3MkExODlGNUIxNEQwRkI0RDQwMTc4MURGNEQxRDA2Cis6MTBGN0QwMDAwQTc4QkE4MTczMTdEMDcxQ0EwNTFGMEY3NDY3MkRGM0E5Cis6MTBGN0UwMDBFOEU1MDk4NDRDRkFFMjVGRkI4NkQwRkFFNjAzRTNDQjU2Cis6MTBGN0YwMDAzQjY5N0RBN0NFN0JEMzNGMDFERDNEQ0RCQkI3MDE1RDJFCis6MTBGODAwMDBGRkY2OUUwQzVGRDRGRUJDMDNGQjRCRjdBNUYzRDYwNkI4Cis6MTBGODEwMDBFQzQ3QTZCODUxNDA5OTdBQUZBQkI2MUFDQTEzOEIwOTE4Cis6MTBGODIwMDA2N0E0RkNEODc2OTI3OEZDMTYxODhGQkNBRjRCMjVFNDAxCis6MTBGODMwMDBFNEZFODc0QTA0MURGMkEzREI4MTRFNEUxMzlCMUJFOEI2Cis6MTBGODQwMDA2RTlGQjVFNURGNzFCQzk3RjQzOERFQTQ2MDBBMDdGQzUzCis6MTBGODUwMDA3N0RGNzM5Q0JCOTMwMDNDNjJFOUVGRTRDOTE1QjY0QUJECis6MTBGODYwMDA0NkQ3Nzc3QTUxMEVFODg4ODNGNkI3RjBEOTMxQzgwN0MyCis6MTBGODcwMDBENEY3REFGREFCRjdDN0Y2QTNDNThCOEY5NDc1MDE2QTkxCis6MTBGODgwMDA0NkUzOTdGNkJCQjRFOUIyMDFFOEIxQTE5NUNBOEIyODZCCis6MTBGODkwMDBCQTY5MzhERTY1MjA5NkMxRTMxMDMyODBCRjA0RjA5NzY0Cis6MTBGOEEwMDBFMjI1OTE3MEJENjZFNDFCRjQxRjY3QTI3ODdCMEFGRTE3Cis6MTBGOEIwMDBDQTYzNjU0MkM3QkY5QkMzQTU5MTQ1QTMwMjg1QzBFNzQ0Cis6MTBGOEMwMDAzODQxQUNFQUM4OEVGMDU3NTJFMTQ3M0U3Rjg2RkVEOUY4Cis6MTBGOEQwMDBFOTA2QkUxMDM4MDJGNDBFQjI3NDFCQzgxNzMxNzg3NkYwCis6MTBGOEUwMDAxM0Q0Q0IyMzNDQzA4Rjg2MDA5MkQyMjdGOTY5MzJGMjIxCis6MTBGOEYwMDBERjMzNTI2ODNCQjY3RjcxOEM1QkE2QUZDRjAxQkQ1ODNBCis6MTBGOTAwMDBCMDlEMkQzNThBM0ZCNTA1REVCNDg1NjhGOUY0Q0VCNEQ3Cis6MTBGOTEwMDAyQURFMDY3OEZCNEIxQkFDRjM1NDIwQURDQTYwNEJDQ0ZGCis6MTBGOTIwMDAzN0I0N0M5M0NFMENFMUZCMjFGQzQ5RjE0RTc0N0E5MjAyCis6MTBGOTMwMDA5RDAwRUYwRTJBNzQ0MTlFQTVCNTk0QjZDNEQ5MzdCNTgzCis6MTBGOTQwMDA5REMzRDA1MjJBMDFGRkY4QkVDNUREQzNFMDQ2M0NCNERBCis6MTBGOTUwMDBGQ0U5M0I2OTNEQjBFRkQ3RTg3NDI4MTdFNjcyQUM3RjRECis6MTBGOTYwMDBCNTdEOTEzMzExQkY5NjY2MDcxRDExN0VGRDg0MjI4RkYwCis6MTBGOTcwMDA1NTdFRkQ4NDk1QzFFMzcyRjlCNUY2MzlBREIzMjgwNTFFCis6MTBGOTgwMDBFMEY3Mjk5MTUyNDAzRUE1OUFFQTlFMDEzRDQzQUQ3RkEyCis6MTBGOTkwMDAyMjgxMUU1MEVBNjRGQ0U5OUQ4Mzg1MjkyMTRCQTRGRDQ4Cis6MTBGOUEwMDA5RkYzQkM2NTAwQjdBQ0FBN0UwRjRGRTc5Rjc1MDM3MTRDCis6MTBGOUIwMDBCN0QzNjUxREUzRERGNzg5MTQ3RkVFMjI1NEJFQzNCM0QwCis6MTBGOUMwMDBDQzY3MDAzRTQ4M0FEMjExQkU4NEI4QTdDMkZFMkY5ODM5Cis6MTBGOUQwMDA0RUYxQTU5NDk1NDExRUQ3N0IwREVFNEVBQTM3RDQwOTYyCis6MTBGOUUwMDAwQzNGRUE3NjcwRkU3NjBBQjJCQjFFOEREREJGRjlEREY0Cis6MTBGOUYwMDBDNjA4MUVDM0ZGNkQ4RUFBQTdFM0Q0MEJGRTk1MjA2NzMxCis6MTBGQTAwMDA4NzUxNEQyOUFEODJFMkVGNzNCMURGMkYyMjQxOUM1NzIwCis6MTBGQTEwMDBDMzhCMTc4REYxRjBFMkJGMTVCQ0Y4NzM5RTY3MDZBQzdGCis6MTBGQTIwMDA4RjlCNjlDMkY5MkM3OTg5NDM3REMwNjEwOEEwRkUxM0MwCis6MTBGQTMwMDA1RTRDRTUwNzlEMkZGOTJEQzM5QkZGRTRCREI4RUVFNkI0Cis6MTBGQTQwMDA2NTczM0Q3N0QxN0QzOEQ3NUFFN0I5OEI1NjIxNkI4MEU2Cis6MTBGQTUwMDBGRDBFMzA3RDZGRDFFNDQwMUZGMjQxMjJCRTcyN0IxNjU1Cis6MTBGQTYwMDBGNEU3NDU3ODUwMTg4OURCMTAxRTAyOEVGN0RGQkY2NTdBCis6MTBGQTcwMDBGODc0OUJBMjM3NUVBMzlCODlFQjBBRDcxM0IxODdGMjc4Cis6MTBGQTgwMDBCOTg5MkYxRUM0MzJGREQ3NzJGQjQ0NzhCMDdFRTZCNzI5Cis6MTBGQTkwMDAxMDExRTBCQTgwQzgwNjQyNjlFRDAxQTcxM0Y3QUY5RUM2Cis6MTBGQUEwMDBGNDFCMTg1REZCREIzMzY4QkIyNkFBNkYwMjVGOEJBM0Q4Cis6MTBGQUIwMDAzRjdDM0YxQTFGMEY2QkYwRjFGMDE1QzNDNzA5ODg0RjQ5Cis6MTBGQUMwMDA5RjExMzdFMkQzNkQxQTdDM0M5QzAwMUZEQjA3RjBCMTFECis6MTBGQUQwMDAxQ0YxNTk2RDRGRjU1MDYyNEUxREZDM0RFMDhCMjc2QUJECis6MTBGQUUwMDA5RjE3NkU4RTJEOTNFN0EyQ0FCOTgwMTdCNDFDODUyRjdECis6MTBGQUYwMDA0REJCMkUxQTNENzFGMDY0REQ4MEJDRjcxN0Q1OEM4OUEzCis6MTBGQjAwMDBFNjEzNkQzOEJGMjMwQTFFQURCQjY1N0UzNkYwRTkzNUJFCis6MTBGQjEwMDA2MDcwMEM1MTNBQTgwMEY5NDZGRkMyN0QyMzQxMTNFREY1Cis6MTBGQjIwMDAzRkU5QUE4MTMyRDY5N0FGNjA2NUZGRDY1RjdCMzc1QzJECis6MTBGQjMwMDA0QkM4N0FCRDJGNUJBNEYwQUFFM0JEN0QzQTkwMkZGOUE0Cis6MTBGQjQwMDBCRUU3OUM2MDU3RTgzQzM5MDJFRUFCQTdEMDNCMDYzNkQ3Cis6MTBGQjUwMDA5NEUxRTM1M0UzNUE4QTVBRTJDMDRGOURGRjdBMkUxMDk0Cis6MTBGQjYwMDBENDAxOUZERUNCRjQzNzZCNTk1ODFGMkQ1RkRGNzAzMjA1Cis6MTBGQjcwMDAzOTk0RDIxQjQyN0MwREJGQ0ExMUIwMkIzNjcyNkJCM0M1Cis6MTBGQjgwMDAwMUNGMzY2NjRCNUMzQjVENTNEOUFFQjY0QUM0NUZDQTAzCis6MTBGQjkwMDBFQjBCMjhERTM1RUVGQUIwNkYyODJEOTc0REVCMDdGNDBFCis6MTBGQkEwMDBBM0VCRjYyRTdFMUJGOEU1RjgyNDY2OTcyNEI3NkNENUY4Cis6MTBGQkIwMDBEMUZFMzJFRjc0OEQ2QkE3RjhGNkE2NTNDMjcxOTJBRUU4Cis6MTBGQkMwMDBFQTNBMDhGRDg0MTc0QjYyMEZFRDI3NkI4NUVDQkNBNzYyCis6MTBGQkQwMDAxOEM2NkY2OTQzQkNBRjIxRjgzRUZEN0JDQkRCRTBCQkIxCis6MTBGQkUwMDA0Nzg2OTA1NDFFQkUyMzZEMUM3Q0I3MzI5REMzRkQ1OEMyCis6MTBGQkYwMDAzOTk3Q0M3QUE1MThBODQ4NDRCRDdFRDgyQzkxNkI5QjI4Cis6MTBGQzAwMDAwMEU1OTY0QUE0MTc0OUI0RkYzMjFCQTlBQzIzODVEQTU0Cis6MTBGQzEwMDAyREVCNkMwNEY5NzVCQThFQkZCMzg2M0VENzhENjNFNUM0Cis6MTBGQzIwMDBENEU1OUNBNzA3ODk3NzJEQ0UyRkQzNDhBNjcxQTlFQ0UwCis6MTBGQzMwMDBCREJGMTg1OThFNjcyN0Q2RkI3MUJGMzNBQjVCNEE2MUQ2Cis6MTBGQzQwMDAxRTk5NzlFQ0U5MzBGODc0Rjk3NEZDNDNFRkU5RkQyQjY3Cis6MTBGQzUwMDBFODNBMEYyOUY4QjI3NDZCNTU2NkI0NUMzQjc0QzYyNDVECis6MTBGQzYwMDBFOEE4REU3QzI4NEJCNTE3ODIxNkIwMTc5Njk2NTY2NzIzCis6MTBGQzcwMDAwMkYzQzhDRDlGOTYwMkZCRUFDODg5QUQzRkE3RjdBNDVGCis6MTBGQzgwMDA1QzA1RjJGQjNEOUVDMEZFRkQ5N0M1OTMwMkY0Nzk4REE1Cis6MTBGQzkwMDA4MUNENUZCQkVGOUYyOUZCRDk3QzgxMjNGRTI4QkE2QzA1Cis6MTBGQ0EwMDA5RTc1MUVFREIwRTYwQjQyQ0NGQjMzMEY5QTA4QTgxMEYwCis6MTBGQ0IwMDAwMzdBQzVDMkRFQTlGMDVEMjNFOTVGMDk3OEQ4MTg0ODQ4Cis6MTBGQ0MwMDAyNkZFMjhCQUI4MjYyOUZFQjgyQTNEMzQ1RkUwODkxQ0YyCis6MTBGQ0QwMDA3NzVDNDNFQ0ZCMEI2OTQ0NEU4QkY3NUQ0NkVDN0JCQURCCis6MTBGQ0UwMDA4RTk4RjI5RUNGMDdENjAxRUY0OTQ1QzhFNkE1NzZGODczCis6MTBGQ0YwMDA3NEQwNTM2OEY5OUM1RjI3RUJDNzAyOUI2M0ZDRUJBQ0E1Cis6MTBGRDAwMDAxOEIyMDFGRkEyRkE0ODBCRUNDQjU5Mjk4NEZBQzYzOTg0Cis6MTBGRDEwMDBDQTlBQTAxRUU0NzgwREVDQUYxMEI2Q0RCNDQ2QzY1MTE5Cis6MTBGRDIwMDBFQkExN0RGNDNFOUU5RDY1MjA0MURDOUYzMENFMDNFMDNCCis6MTBGRDMwMDAyNzhGMjQ2NEQzRkU0RjBDMTJFODY5RkIwRjIyRkM1NDdBCis6MTBGRDQwMDA3Qzg5ODZBMzFDQzU2RjMyREFGQjgzM0E0QTU3MjVCOUYyCis6MTBGRDUwMDAxOTZCOEI4QkU4OTZGNUFBN0MyMTZCQUQ4N0YyODEwQzMxCis6MTBGRDYwMDA1RTE3QzMyNzkyQ0IwNkY4MDZCMkE5NzUzQTVFRTEzMzU3Cis6MTBGRDcwMDBEOTZCMjc1RjFCNUQ2NkRGNDdEQTBGQTk4MUZBQjI2Mjk0Cis6MTBGRDgwMDBENkJFMjI3N0U4N0IyQjQwRjY5MjJFOUMxRjVENDcwRTU1Cis6MTBGRDkwMDBDMDZGQTA2Q0QyOTQyREI0M0MyNkFBMkM2QUVBMUQ5QTlFCis6MTBGREEwMDBGQTJDNEQ3OTE4RkJGRThDMzU5ODAzRkU4MUVBREMxMUE0Cis6MTBGREIwMDAzNTAyQTVEMzMzRDlDMTM5MUMyRDNGREFFRUFDOTk0Q0FECis6MTBGREMwMDBFOUI0QjE4Q0U5MTc0REZCMzkzNzQ3MjJGMDZCNzIzMzM4Cis6MTBGREQwMDBCRERFRTIwRTE5RUE4QTAxMEVGRDdEQzA1NzFBRjY3MEVCCis6MTBGREUwMDAyMjQ3RTlDMTEyRDgxOUM0MzJCNDkzQTJEQTA1Mzg2QzlCCis6MTBGREYwMDBENzEwRjgxMERCMjVFQ0RGQTU0MzNBRUY3NDFENjVERjYzCis6MTBGRTAwMDAwNUZFODI3QUNDQzMxRDhCQkRDMEQ4RkFGNDhDNkY1MTJECis6MTBGRTEwMDAyOUU3MTk0QTFCMzZFREE5MjEzRTRCODRCRjlFQ0RGNjNBCis6MTBGRTIwMDBCQzg5RkNGNTAwMjcwMjdEMEVFMDI5RjQ2Qjg5RDA4NUEyCis6MTBGRTMwMDBGQUZEOUZDNkVDRkYxREE4NDlDOTRCM0Y2OTEzRThGN0JGCis6MTBGRTQwMDBGRkQxRjg5N0YxQTA3N0ZGNDk5MTIzRUIzOTdGMTE4QzBGCis6MTBGRTUwMDBCQjg5Rjg4QTQwOEU3RkJGQjFFMEEwOEU3RTc3NDQxRkI5Cis6MTBGRTYwMDBEQTAyQkNCNzNERjc2QTg0REYxMTZCNjgzODQ3RjU5MjU4Cis6MTBGRTcwMDA4NzcyQUI2QTA0MEFCRjIzRTlBMTJEMDBDRkZGQzhBRDhBCis6MTBGRTgwMDA2NkU1RTFBMUUxM0E1QTVFREREM0M0Q0EwNUExMkQ1MDcxCis6MTBGRTkwMDA3RUE1NjczNjJCOEYwOTBERTc2OUZCM0NGOTM2ODRGRjk5Cis6MTBGRUEwMDAzNjMxM0U1RDJGQ0I2NUZBQUMzQUJGODdDQTNDNEI3MzA3Cis6MTBGRUIwMDA0MThGNkU2MEYyNjdDRUREODc2NzAzQkY5REEzMjMyMjZCCis6MTBGRUMwMDBBMTdDN0FEQjk5NjMyRjZEQTNGMEQ4RDY5QTRDN0ExODZGCis6MTBGRUQwMDAzQTdBMDU2QTZGNjQzMkQ0QTc3MkEyMEJGOTdBRDhDOTRDCis6MTBGRUUwMDBGNDFCQ0FFRDQyRTBENzRCMUU2RjkyM0E5RDkxN0Q1MUIzCis6MTBGRUYwMDBDN0NGMUNENUIyMTNGQUNGOUM1MzhDNzJDNEVDRjQxQzQwCis6MTBGRjAwMDA4MUYxRDVFN0Y0NTFFQzc5MjQ1NzY0RkM5QkQ3NzlGMDYzCis6MTBGRjEwMDBGQjA3QUM3RUY4N0U4RDk5QUQ4QkQyMEZFRUIzNDVEOTQxCis6MTBGRjIwMDA5NzM1Q0FCQUQ2RTQzMjNENjNCQTczQ0E5MURDRjFBMDAwCis6MTBGRjMwMDA5RjI4RjZDRUFBNDBGQTI4M0FBRjZFOEUwNEMwNkVBNDZGCis6MTBGRjQwMDA3QThBNkMwNjNFNUM5Rjg0RjY0QzM3Q0MxREVBRDc2NkY1Cis6MTBGRjUwMDBGQjY1M0FDRUVEMUNGMTAyN0Y1MUY5NDlCN0REOTM5RDY3Cis6MTBGRjYwMDAxQTY1Mzc3Njk3RDJCMjI1RTIyN0U4QUVGMTY0MjczOUQxCis6MTBGRjcwMDBFMDk5QTEwMzFCNEFFNTRGREQ0RUQ2NEU5NTRGOTlFRDEyCis6MTBGRjgwMDA2QzlDQ0MzNTQ1M0RCMDlFNjQ4MUEwQkM5QjM3QUJCMDJBCis6MTBGRjkwMDBBNzBERjU4Mzk5Mzg2RkUyRjE2NDczQjRCRkUzRjVCOTQ3Cis6MTBGRkEwMDAzQTgwQTNCQTVGREJDQjNDMkZFMEJBNzhFNkY3NTBGNzk0Cis6MTBGRkIwMDA0RDg1RUY5MTVDRTZGN0E4RTNBOTdFNDFGMUVFRjE3Qzc3Cis6MTBGRkMwMDAxRkY2NDdGNThEMTIxNEVDOEFCRTcxMDQ5MDc2N0MwNEZFCis6MTBGRkQwMDBDRTQ0MDg4RDg3RjdGRjFGQzJBQjFGRjBFOURCQzJBQjMxCis6MTBGRkUwMDBCMTk1RjIxMUREMjVGMDExMDU4RUVCQjlBMDNFOTNGMTJDCis6MTBGRkYwMDAxMUY0NEJDMDdCOTA0N0NGM0I3REM3NzNBM0U4NjFDRTI0Cis6MDIwMDAwMDIzMDAwQ0MKKzoxMDAwMDAwMDAzOERBODY3QUFGMzRBQkVGRkI1NjlERjIzNDA4N0E3MUYKKzoxMDAwMTAwMDkwRUVFNkZDMjAxOUZEMDg1QTNENTBCNTAzNTU3RDM1OUMKKzoxMDAwMjAwMDkxMURGOEE5NDIwRjZFRDVFRkFEQ0MyM0I5MzhGNEQyQUIKKzoxMDAwMzAwMDYzMTQ1RUE5QzQyQTAyMUYzRDYyMDg4RDcxRDNGNjQ3N0UKKzoxMDAwNDAwMDc0QkU2NzVGODM3OTBGRTE0NUNBNDMwNkY1Rjc0MjFFMjgKKzoxMDAwNTAwMDhGRTM5QjU1M0MyMTYxREIyODQ3MDQ0RjU2NTMzQzMxQ0QKKzoxMDAwNjAwMDQxRkIxQTAzREEyNURENzZGRkM2Rjk4MDI3QjcwQzczNEEKKzoxMDAwNzAwMENCMTJDQTYxQTQ2N0I5MzUxOUVCQUZEMTFEMjVFMEM3MTIKKzoxMDAwODAwMDBGNEYxMDQ1RDAzMzI5NUU2MTdERjdFQzQyQkZDQ0ZDQTkKKzoxMDAwOTAwMDMxQjIxOUZERDM0OUZFMUVDMEJCNTIwQTAwRTg2RkY2MEIKKzoxMDAwQTAwMDI4QUMwNzdGMDhGQTkxNjY5QkQ4Nzg4M0YxOEFGOTJERUUKKzoxMDAwQjAwMDQ2MTI1NkVGNTRGMEI2M0UxN0YxMzZBMzlEMzAzRjkwRUUKKzoxMDAwQzAwMEUwMjlBOTg5RDIxN0JFOUZDN0YwMjJCOTJDRjRFQTFGRjQKKzoxMDAwRDAwMDQwRkY3Q0Q0RUMyRTIwQ0M2NDA1RkYxMkU5Q0FDNEZFOUMKKzoxMDAwRTAwMDI4QkU4Q0M4MUJDRkU0MzhGNDdCRDdFM0Q2QUQ4Q0VGQTkKKzoxMDAwRjAwMEI5Q0IwMUNFMEY1QkJCQzgzMkY0MEZFQTcxRkU5QkNEQ0EKKzoxMDAxMDAwMDQxRDRDMzc1MjZDOTBFN0VGODM5M0M1OTVGMDhGREI1NDgKKzoxMDAxMTAwMEVCNDVDMDEzMkRCQzJCRjMxMkY5MUY0MkY3NDZGQjhCQTYKKzoxMDAxMjAwMEU3MTg2NTYzMEVENDNGNjg0NkJCNDBCNUZCRTZBNDMwRDQKKzoxMDAxMzAwMEJBNTJFRDNFRDVDRkExMUQ0N0I1RkJFRUQ0RDg3MzAzMUYKKzoxMDAxNDAwMEY1OUQ3RjJEQThBNUZERkQ1OUMxMzM3N0VGODU4MkI5QjcKKzoxMDAxNTAwMDE2QjY2RUYwM0ZENUMyNUY3NERDREFFNUU2MEZDMUNGQUMKKzoxMDAxNjAwMDVDMkJFQjgzNDYxQkYwOTEyOTlFNTA5NDlENDYzNkIwNDQKKzoxMDAxNzAwMDc1Rjg3RUE1RjcwMzlDNUEwNUIyN0UzQkVDOEZDQ0Q2NzIKKzoxMDAxODAwMDRGRUREOEZBRTg3NTZEMzJCMDc1QzkzRkIwQzZBQzZCQUIKKzoxMDAxOTAwMDkzOERDNTkxQkVGREJBM0UxQTFGQkJBRTkzRTM5NTc1MTQKKzoxMDAxQTAwMDExNTMwNjZEQTdDOEI5M0I1QkFEMUY3MjI1RjQwOUVCNkYKKzoxMDAxQjAwMEEyNEZCMjlDQUVDQjE1NTlEN0IyM0NDNjRGRTcyODdDQjQKKzoxMDAxQzAwMDZDOTBEQ0NENjM3QTdDMUNCQkZERkZDNjdBQkI5RUYyRDMKKzoxMDAxRDAwMEM0NUJBRjc2OUQ3RkNFRjNGQzIwMkYxREU5MjYyODk2QzkKKzoxMDAxRTAwMDQ1RjBEQUI3OTFBRUFCMENGNjM1RERERjg2RkJDQUYwMzEKKzoxMDAxRjAwMDkzMTA5QjFCRjhEODkyNzk3NDVERjA2Q0NCNDQ3RkUxMkYKKzoxMDAyMDAwMDFDQTNCNDA3RkNFNkU0NDcyOUNBM0EwOUYyODEyNTFCN0UKKzoxMDAyMTAwMDg3MjM1RDUyQkM2NTc0RkIxNEYzQkYyQzMxN0JEMTdGMDcKKzoxMDAyMjAwMEIzNjRCMUU4OTY0NTU4RkYyQjY4MDc4NzI5N0Y0NUJEMjEKKzoxMDAyMzAwMEE0MzU5NkFGN0YzRDFDQ0MzOUI1QzVEMTcwMzBFNUNDMjcKKzoxMDAyNDAwMDJEOEVCM0VGQjIxMUYxMzlEMUJFRkY5OTBGREZDQkU1OUYKKzoxMDAyNTAwMDI1RjY5NzkwRTVCMTdFMEFGMEU3MEU5NEY5QzE2NUFERjkKKzoxMDAyNjAwMERGODM5MEJGMTk2M0JGOTcxM0UwNTFFOEZCRDE3ODc0MjcKKzoxMDAyNzAwMDQ0QUZFMEQxMzIzM0NBMUYxNThGOEU1ODE1QkY5MDA2OTgKKzoxMDAyODAwMDhGMDhENUEyODE4RUQ1NzU2QkUxMzgwN0UwMThDNzJGOEUKKzoxMDAyOTAwMDQ0RjFBOTAwRTA3ODQ0QjFDRjI4M0UxNTAwMUM1NTNBM0UKKzoxMDAyQTAwMEI4QjM5NUYxMDMyRERDRkU5NDk4QUY3REJCNzU2OEYwNzMKKzoxMDAyQjAwMEY4REJBRTQzQUQ0RkI0MEU1NUJGRERDMDJEREUwOEY4MDAKKzoxMDAyQzAwMEI5MjE5Qjg4RURBODA3ODdDNjgwOURFNDMwRjg4QjYwMzQKKzoxMDAyRDAwMDVFOUIwQzk0N0U5MUFGMzAzRkUxNjc4NzYyRkRDRURBODIKKzoxMDAyRTAwMEY5NUNCODY0N0VDMUZBNERDNDI3MTJFMUU1RTVGQUY5N0MKKzoxMDAyRjAwMDZBMzU3MDNCQUFDMDY5MTBCRUU3MzNCOUE5RjVGMzM1N0EKKzoxMDAzMDAwMERCQzI0RjgzREVENDlDQzRFNEY3RDkwMzU2QTQ3MzkyQjYKKzoxMDAzMTAwMDFGOUEwM0Y2QzJCOTdENDYwMkYyQTA4OTBCMTVDMjc3NzcKKzoxMDAzMjAwMDY3MzlDRjVDRkNBRTJENTkwMjM5QUVGQTczOEZFRDY2OUEKKzoxMDAzMzAwMEZFNUM5OTUwN0I5RDk2MUI3Q0NDMUZERDJDRkY3MjI1QUIKKzoxMDAzNDAwMEMwRTU2MjlFRDAwMkY2NzJGMzlFNTg3RjIwREQwRjFCM0YKKzoxMDAzNTAwMEVDQ0Y1OTFERTk4N0VGOUI3ODdGM0Q5OEQ4RUIwRDRDOEEKKzoxMDAzNjAwMDdGNTlBRjIzMDE4MDY3QzQ4RjcwQjQxMEVEOUE2QzkxRjAKKzoxMDAzNzAwMDgwRkZBQTQ5Rjc2MUUxM0Q1MTdFODcyNkE1QkUyOTg3MDYKKzoxMDAzODAwMEY5RDMyMDNGMDFFMzJFMzA5NDczMzA1QzlBMUUzREZEN0IKKzoxMDAzOTAwMDI1QzQ1NzlCNzY2OUU5M0I5NkZFMUIyMjY1RUUyMjA3MzIKKzoxMDAzQTAwMEZENDVENTNCMjNGNDhGRkUwM0MwOEJDOUM0NUZDMDgxREMKKzoxMDAzQjAwMDFGOTA5NTkzQTdGNUZCMjFDRkExNTlGMTNGQTdGNzg2OTEKKzoxMDAzQzAwMEE2ODI3RTYzMkQwQjEwRTBGQkNEMjc5OUREMzQ3MUZGRjMKKzoxMDAzRDAwMEQ2MzdDMTNGNjg5RkQ2M0YxQzU0QTg2NjI1MUVBNUI1RDkKKzoxMDAzRTAwMEQ3MjZFQzVGQ0I4MzNGNEJCNUI3QTJGQzY3NDUzMzYzQTEKKzoxMDAzRjAwMEZDQTcyQkIwMURGOEUzNjBCQzEwQkM4MkI4ODFDMEY0MzAKKzoxMDA0MDAwMEYyRjU4QTVFNEVGNTc3RTRGM0YzQkE0NkEyRkUwRUZBRjEKKzoxMDA0MTAwMDM1RTg0OUFBM0YwRkY0MjZEMDlGNzdFNzU3Q0RDOEE3MDQKKzoxMDA0MjAwMEVCOUM1RDUwNzU3REZFNzgzNjFFRkEyOUMwNDkzNDIxNUIKKzoxMDA0MzAwMDMxREVBQUYwNTFCRjAzQkZERTU3Qzc4NTE0RkQ4RkIwNzAKKzoxMDA0NDAwMDc4RDAzREJGNDhGRjRBQkE1Qzk0OUYzMDdFN0Y3QkI0MzIKKzoxMDA0NTAwMEZGN0Q5RkM2RkZCRUVGQ0FDNTgzMzI4MUFFRUVFMUE0MjkKKzoxMDA0NjAwMDRDQTBBQjg5MUFGOUI2MkY4MTFEQjAyNDdGMjAxRTk0QjEKKzoxMDA0NzAwMDA5NzRBREI2M0ZDMUZCMzBGRUExQzYxREVBMjFDRTgyOTQKKzoxMDA0ODAwMDcyMjY4ODcxODlCQjVCODhCQjEzRjM0MDdDMkJBMURDOEYKKzoxMDA0OTAwMEI4OTA4ODlEMTRERjFCMjZGQjU4RkNBMzg1ODgzNzRFMzcKKzoxMDA0QTAwMDYwNzE1NjI5OEFERTIwOEUxOTVEMjYzQjY4Mzk0NjBFMUEKKzoxMDA0QjAwMEY2NjMxQ0E0ODlGNkIwQzkwRDdFOUFEOEVGOUI4OUJGNUMKKzoxMDA0QzAwMDVBMDAzQ0RFNzNEMTE4RDM0RjM3REJENzNCMTVGQ0RFMjcKKzoxMDA0RDAwMDY4NjZGMTgzODlDQkI3RjIyNENBOEY5MzMyQ0VFMzdDNkUKKzoxMDA0RTAwMDA4RThGNzE3N0FGNDVGRkZBNzgyOEYyQTNDRkU5QzU3MzMKKzoxMDA0RjAwMDc1MTNFMDU1MTJGOEQ1RTBCQjg3OENBOEM3MUNENzkxQkYKKzoxMDA1MDAwMDg1ODBERjZCRUNFNENFOTlGNDc5RjY0MUUyQzlENzAzM0MKKzoxMDA1MTAwMDFFOEIzOUQxRkU0NEY1RDlCOUNGQkMxMEU4RTIxOTg1NUMKKzoxMDA1MjAwMEVGQTlFRjJCQTA1MUJBMTIwRjQwRkQzRjE5RjM0NzI4NTYKKzoxMDA1MzAwMEZCMkYwMUJBMjlDRjU1RUQwRTUyMDI3MTg4MEYxNTdFOUYKKzoxMDA1NDAwMERBNzRBQkM1MDdGRDg1NzQ4Q0FGQkY5OENGRTRDMDhCNjAKKzoxMDA1NTAwMEY5MDZEQzNGQjUzQ0UwOEY1M0U4ODI4RTgzRkQyNTVERDQKKzoxMDA1NjAwMDQ1NjJFMkQ3M0Y1M0YwNTVGNTg3MTMyNTRFQjdCRTNFOUYKKzoxMDA1NzAwMDg5RDkyOTAzRjRBOTQzRkU5QjVDRUMzNUY4OTBGRjU1MUIKKzoxMDA1ODAwMDIxRkYwRDdGNjQ5MTAwMkVEMzRFMzdENEMzM0EzRTlEOTgKKzoxMDA1OTAwMDk1NDQyMERGRTYyRTI1NEVGQTZFQkUxREZCNTVFMzhCRkIKKzoxMDA1QTAwMEZGNDBCQTg4ODk5MzVFMkE1REZDM0U0MjE3MzE3MTUyNDIKKzoxMDA1QjAwMDBBRDc2NDkwMEJGQjc0Q0NBRURENDcxMTBCRkQ4MjAxQjIKKzoxMDA1QzAwMDI1RUUyRTEwMEZDOEFEN0RCQjQ2QTIxRDMzNTdGMTU3NDcKKzoxMDA1RDAwMDUzQkU4MUY2NkI5OENBMzdCNkRGQkU4REYzRTBCQjQwRTEKKzoxMDA1RTAwMDAxRTYyMzdDQThGNzNGQkYxREY0OTkwM0NDNEU1M0Y3RDcKKzoxMDA1RjAwMDYzREZCRUExN0VFMDNCMTM0RjdGOTEwM0YwREY3N0YyMTQKKzoxMDA2MDAwMDg1QTE5MEU3QjE0Rjg5QUIzNzE4ODI4NUU4NEYzMTMwMkIKKzoxMDA2MTAwMEY5REU2MDBCMTYwMkZDNUU1N0YwQTYyMTg5OTZFOUZCMTUKKzoxMDA2MjAwMEJDNzQ1RjE4RjA1QUNEOEI4MTc2NzY1QzhGNjQwMzdGNDMKKzoxMDA2MzAwMENFMzFDNTRFM0Y0QUVENzY5ODE3QTU5NjdFODhGN0QzMDIKKzoxMDA2NDAwMEZEQ0U4NjcyNzg3NTI2RDNBN0U5QkMwMDJGOEUxRDE4QzMKKzoxMDA2NTAwMDgzRUI1QkFGNjc3ODJDRUZFNUQwRkY3MzU0MUYzRUQxN0YKKzoxMDA2NjAwMDRBQkYzRjlBN0QxNTY5MTM0MTNFNUZEOERFMDdGRDNGQzMKKzoxMDA2NzAwMENEMTNBMzA4Nzk0NzlGOUZERjQzQkYzRjM3ODQxN0MxM0UKKzoxMDA2ODAwMDJGNTlBN0YzNEVDRDA2N0VCMTlCRjk0M0I0RkIwMEYyODAKKzoxMDA2OTAwMDNBM0FBRTdCOTY4NDczRDA2RkJBMzAzNzAwRjg3Mzc2RUYKKzoxMDA2QTAwMDdGMTFFNkQzMTE4NzQ4NjQ1QTZFREVDQkVDNDc2RDdFMkUKKzoxMDA2QjAwMEM0NzE3RDJDRkU2QkZCODU3NTgxRkZCMjE5RkUwNjdEMzIKKzoxMDA2QzAwMDI0QkE3RDlDRkVCRUFFN0M1NjFGMkE1QzQ2RTEzMTQ1QjUKKzoxMDA2RDAwMEYyNDkwNTUxN0U4MEU2MzdCMjUxOEUxQzdCRUM3M0RDMEIKKzoxMDA2RTAwMDRGRDJDNUUyRThDN0Y1OUUzOTMwM0ZGQkU0QTBBMTM2MDIKKzoxMDA2RjAwMDBBMUZBRjJFNTBGQzUwNDZBNjVGNTBGRTZCODhFNjM3QUYKKzoxMDA3MDAwMDZBN0Q3OTE1ODk5QjlGNTI1RUMwRThEQ0RBQ0ZFNEY0RkMKKzoxMDA3MTAwMEUwN0E4NkU3Rjc5MjY3NzlFMDE3NTc0MzMyMEZFRDZGN0IKKzoxMDA3MjAwMDg0OTI2NzczMkZGOUVDQTAxMUY0QTk0MDI5RTZGMThDQUIKKzoxMDA3MzAwMDU4MUU0NDNFNDBFNzhCRjg3OTdDNjMwQUYyNDdGMjI4NjIKKzoxMDA3NDAwMEMzRDdGOTNGMzIyMkZGOTg0RkU1MDdGMzY3QjBCQzQyQTkKKzoxMDA3NTAwMEYyMjhDQjFGM0FGMTkwMTNGMUI5N0M0NUIwMUNFOUMxRTYKKzoxMDA3NjAwMDRFRENBMDQ3QkRENkYxQTFDQ0QzRkFCOTNCQjg1MkM4RjQKKzoxMDA3NzAwMDlCOUNEQkUxNDQzQkYwRUU1RDRFRENERjg5MEE1RkFGMjIKKzoxMDA3ODAwMDMzN0EzMDRGOTIzQ0MzRTI5Qzc3M0Q1MThGRTMzNDI2NUQKKzoxMDA3OTAwMDEzM0I4RkZBQjVERjAwN0FDNEMyMUQxQ0M2QzMyNzA2RkYKKzoxMDA3QTAwMDE4RkY2RjEwODIwNzQxNEZEN0U2RkQxMDdGNkNCRTAxMjYKKzoxMDA3QjAwMEM4MjMxMkE1Qzc4M0ZDMjExQUJCMkI3NkRGRTU0QkQyRDkKKzoxMDA3QzAwMDE3QjQ3MjY2NzE0MTQyN0RFMUVGQTRDNzdGMzM3RDYxNEEKKzoxMDA3RDAwMDU5ODFBQUM3QzdFQTBCNjBGRjE3MzAzQzY0NzI2RDI3QzYKKzoxMDA3RTAwMEM3Rjg5Q0EyMkYzNDgyQkUwMEJBQjAyMkE3NTUzOUJGRTkKKzoxMDA3RjAwMDQwOTFGMzI3NzhBNjY3Q0MzN0FFQzVFNzlBMDI5NkU3MTMKKzoxMDA4MDAwMDcwMzcwOTI5NzkwRTYxMDNFODdGODlGMDc4OEQzMjJGREUKKzoxMDA4MTAwMDE1OEZCQjAwOEZDNzQ3RjBCOEUxNjRCMENGODg3RTA3NjMKKzoxMDA4MjAwMEY3NkVDOEQzNjg1ODRFODI1NjZBQjdDRjE3NUE1MDlFOTMKKzoxMDA4MzAwMDBEMTE4OTg4RjlBRkQ1M0U5QzU3RTYxMjZBQUY1MUJDQkQKKzoxMDA4NDAwMDlDMEZCMUZDNzE5N0FGQzcwQ0QyNUIzNEZBOEEzQTZGMzgKKzoxMDA4NTAwMDE1QUZCNUZBRjVDNEU1N0UxRUUyOEJCRTkxMDRERkFCQTEKKzoxMDA4NjAwMDRGOTEwNDRBNjFCRTM1MjY2NkRGRDQ5ODJDNDExRUZDQTgKKzoxMDA4NzAwMDBGOTNGNTY3QTJFRENGMUFDMUYzMjJFMzNCQzNFQzI3MzgKKzoxMDA4ODAwMDQ2MjM0QjIzRDBFRjc0QTdFNzM3QTNEMjIzN0E3QjcyOUEKKzoxMDA4OTAwMDU5NzhFNTYzQjQzRjNEMjlEMTAxNUY1N0M3MzczQjJCRkEKKzoxMDA4QTAwMDNGMjk4NjM4QUZEMDhGRjYyQkM5NjJGOTJDNDc4QTE5QjkKKzoxMDA4QjAwMDVDOTNFOTNFNkNBNTcwRDUwQjMyQzI0RjZGMTJFRDZEQTMKKzoxMDA4QzAwMDc2RDhGRjdFOENEMzg1RDMwOUZBNkRENUZEREE2MjI1MDMKKzoxMDA4RDAwMDMyRTQxNTFGMjk2Njc4N0ZBNDU4QzQyNzZEOEZGOTAwNkMKKzoxMDA4RTAwMDdBMTc2RDRGRkJBRkRBNjc0NjNFNzI3RUFGRDUwRkZBQ0YKKzoxMDA4RjAwMDA0OTU5MzIzRUNCNDNFRTM0RkQ0MEVBNEU1QjNGQkFDRDQKKzoxMDA5MDAwMEE4NTc5RDU1RTQ5QjQzRjVERjkzOTVCOEZGRUYyQTc4RjAKKzoxMDA5MTAwMDIzOTNBQUExNjBFRjExRUU4NkExNzRFRTQ0QjU0MzFBQTkKKzoxMDA5MjAwMEVEODlFMkRBNEFCREIzRkY1Njg2QkY0NkQ0NkZDRURCMEYKKzoxMDA5MzAwMDQzRjc0MTk5Q0UwNzczRTBGQTE0QkM2QURFNTU1REZBQkQKKzoxMDA5NDAwMDAwQzgxQkFGQzVDREEwRUUyQjA1N0RDREM4MkZCREQ1RjIKKzoxMDA5NTAwMDQ0ODEzRDk1NUYxRTVFMDY3ODNGREMyMjFBNjk5M0M5OEIKKzoxMDA5NjAwMDIzM0VGOEZENkM1QUZFNjg5NzlFMTgwMTdGQjZERDk0MTEKKzoxMDA5NzAwMDEyODQ2NjgyMjdDQjNCNjZGMDdDRUFGREZBQTNBMTI4QUQKKzoxMDA5ODAwMEJFQjM2ODQ3NkNCOTMxMTA1QjZFMjZDMkQxNTA5NEJDQkYKKzoxMDA5OTAwMDZBRkRBMEZFRDc2RjQ1RTFEQkI5MDJBQjAzRjA4MDQ4RUEKKzoxMDA5QTAwMEM0N0Q5MUQyRDNGMTA3Rjc5MDYzMjBCQkY5M0I1MjgwMEQKKzoxMDA5QjAwMDlGREY0NUQ5NTYzQzdBRkZGQ0MxODVCRjdFOEI3RTI3RTEKKzoxMDA5QzAwMDE4QUEzRTJGNDBGRDUyMzIwMDdERDU1MjNEMjc5RTlERjQKKzoxMDA5RDAwMEJGNERFMTZCNDY2M0NCQzlBRDE0M0VDNkQ3OERFRTM2MzUKKzoxMDA5RTAwMERBQUFCN0MwNDcwQUQzQzEzRTBFRjdDMUJFMUE0NzlDNjgKKzoxMDA5RjAwMDI5ODFGODQ2RDU4ODJGMzBCRkU0RkNCRjEwMzdDMEU5MDUKKzoxMDBBMDAwMEJDQjkxMkYxRTlGQzQ2QjMwNDdFODBFRTFDMEJGM0NCQkIKKzoxMDBBMTAwMEJGQzFGOTM5NjYxN0NFMTg0RkVERTk4NTM4MTVFMEJCMkYKKzoxMDBBMjAwMEUxOTUxQjQxQUU0QzMwOEEyQjQ0NUNBRTQ5ODdGQjREQUYKKzoxMDBBMzAwMEFENjNGQUVDMzZDODJCQzFDRkRFNEQwREY0MzYzN0Q4OTYKKzoxMDBBNDAwMEQxRkQzNjIwODZBOTg1MTJDQjlGRTA1RjM0OThFODlGQzAKKzoxMDBBNTAwMENFMEU0RjUxMUJGRDZFOTEzNzg5NDBERUFDRjBBNUUwMDQKKzoxMDBBNjAwMDA1M0M3QjE4QkE4QUIyMkI4NzE1MzIzRUQzNjgwQTE5MjcKKzoxMDBBNzAwMDJBRTk3N0NENUYyQzlEOTZBRThCQzQ3RDhDN0E5RjY3REIKKzoxMDBBODAwMDI4OURCNzdFNEY2OTcwMjg3REI1QTBCNTFBRUQ2NzJBRkQKKzoxMDBBOTAwMDFGMTg1RjNDQzBGOEUyODI2NTk1Rjg5RTlCMzkwREQ3MjAKKzoxMDBBQTAwMDdCODJBRTE3RTBGMkU2NDYyM0FFRjdDNDcwMEJGQTMzNTIKKzoxMDBBQjAwMDRFNkNFMUIwQkM0MDM0NjBERTJERDVBN0QyMkExREYwQ0IKKzoxMDBBQzAwMDVFMkYxQUM5NjA3ODM0NkY3ODc4RTU0NjVBRkY2RTM2MjMKKzoxMDBBRDAwMDRGMzg4QUZGN0ZEOUZDNzM4QzRGRkQ4NUIwRjFFNTVERkYKKzoxMDBBRTAwMDNDRUE2OTdGMTFDM0U1NDE4MEE3RDQ2MjhCQjZENzE3NzIKKzoxMDBBRjAwMDZDRTFCREMwMkYxNzZDQjlGN0REMDkwMEI3OTlCNzk1NDgKKzoxMDBCMDAwMDAxM0MyNkQ5OTc2NjQ4OTY0OEJEQUE5RjBBQTkxNURCREQKKzoxMDBCMTAwMDgxMkUyNzdENTlERDNGMDlGNEM0MkQ5NDZFRThCQzA1NzQKKzoxMDBCMjAwMDFERjE4MUJERjRENjk2RUZBMjdEQjBBMDI2QzkwRUVCRDMKKzoxMDBCMzAwMDkzMzY2RjlCMEFGMkY4MkYzNTQzNzRCOEFFOTczODIyN0MKKzoxMDBCNDAwMDAyM0NFQ0FEMTlGMDdFMDEyNzc4RTNFMUQ1RTEwMjFFMEQKKzoxMDBCNTAwMEYxQUE3Mjg0QzUwREYyNzFDMUVGNzhDNDE3NEE2N0I3NjQKKzoxMDBCNjAwMDQyNUNBOTcxOEIxRUVEOEZCNzY2MUVGRUZENkM0Nzg0M0IKKzoxMDBCNzAwMENFQjg5OTFCNjY0Qzg0RUY3RkFDQzdFRjA3RjRCRkNEQUUKKzoxMDBCODAwMDFGN0YwMDdFMTdGODQ3MzUxMTkwNDMwODNGMkRERDE5NzAKKzoxMDBCOTAwMDQ3MkMyRjg0Nzk2OUU5NkZDMThBOTY0Mjk2RUY3MTc5NjMKKzoxMDBCQTAwMDc0NDgzNjMzM0FGNDE1NzJDOEE3QkYwMTFEMkUyQ0JDMDkKKzoxMDBCQjAwMDBDM0EyNEMzNTI2M0Y0OEVDMTdDNEY0NkJDNTVFM0U1MjYKKzoxMDBCQzAwMDI2MzdGMTZDQjM2MDdFOTQ4N0EzRkM3QTZEQTE4MEY1MjMKKzoxMDBCRDAwMDZCMEI5OTlEMjlGQ0Y1OUUxREJGQTI3MDRBMkJGNEZENUQKKzoxMDBCRTAwMEEwMTBFNDJCRjE5NDgyN0M5NkMyNjIxNUI4RTYyRDhBOUYKKzoxMDBCRjAwMDlFNEIzNkIzRjMxODYwMEZDMUZFQUY0RjI3REIzQkEzMEMKKzoxMDBDMDAwMEZDNUY4RjQxN0ZFOUM4MTdEQUExOUZCMzdGRkNBMjBGNzkKKzoxMDBDMTAwMEY2QUIyOUU3NEMwOUQ4MDFDRDE3RkUwQkYzNkMyQ0ZCODIKKzoxMDBDMjAwMDU5N0U5NkM1MURDNkJDMzVCREMzOEJGOEE4RjJGRDY2QkUKKzoxMDBDMzAwMDM3OTM0M0RBNzU1RDI4RDQzMzNFRUQwODYzM0Y2MzVDMzgKKzoxMDBDNDAwMDhDM0VENUY4RjRBNkQ2MjQ4QzEzNkU3MkY4Q0RDQzhGREEKKzoxMDBDNTAwMDQ1RjU1M0RBRkZGNDMyMUVGOThDQTlBQzlEODAxQzIzQjQKKzoxMDBDNjAwMDE1M0NDNkY3MjY3REYxNkIwMkYxRDA3N0FGQUQ3NjgzRTgKKzoxMDBDNzAwMDFFNkMyOTdCNTM0ODgzNzU1NkU4OTVGQTlGQUVDQUE1MkEKKzoxMDBDODAwMEY1QkZCRTc2MEFEQTczRjc2NEYxMTJFODUzRDNDQkYyRkMKKzoxMDBDOTAwMDY0OTQ5RjFFOTYyNzNGRTk4QjE0QTRDMzE5RjUzMzUwMjMKKzoxMDBDQTAwMDBGNTZFN0VCMjUyNkM5NDJGMTY0MjYyNUQ2RThGMzA0NjIKKzoxMDBDQjAwMDMzQUUzNTRCOTYyOEZDRkFCNDhCOUJDNkVDMDAyOUU1ODUKKzoxMDBDQzAwMEU2MzFDQ0VGMTYyODY2RjIzQzFBMEVGNzY0MTk3MEZDNzgKKzoxMDBDRDAwMEQ5MDU5NTJGMDFCRTRDQkE4RUVEQzNBOTk3OENGRTE1OTAKKzoxMDBDRTAwMDc0REM1M0U2RjhGQURERkU0MkU2NDdDODE1QUU0N0JFQUYKKzoxMDBDRjAwMEI0RjQyNTIzRTY2QjlDRTZFMjdGN0ZGNzJBMUVGM0NDNTMKKzoxMDBEMDAwMEVBNTc3MUM0NEZDNzNCRjVGQzZCMzlDMEQ3M0ZEQUY2RTEKKzoxMDBEMTAwMDVBNEU2REQ0N0MxMkI1RkY2MzYxMjI3Rjc2RjBBRTY4QzcKKzoxMDBEMjAwMEZGQzA3NDAzOEIxMzkxNzFDNjE4N0ZGRjc0OUI3MjFFRjIKKzoxMDBEMzAwMEU2MTJFMzVGRkY5NDMwRUVGMzhCNjEzMERGNUYwREM0QUEKKzoxMDBENDAwMDdEREUxOTE2MURGRjFBODg2M0JBNTlEQzQ3MUJCRkNDMUMKKzoxMDBENTAwMEFGRjgzNzY1QkVFQ0ZDNDFBQkEwQ0NENzZENjQ3MUFDOEQKKzoxMDBENjAwMDc5MkM0RjYyQzk4MTM0QzRCQkU5ODZGMEUzMThERjdDN0IKKzoxMDBENzAwMDgzMTc5NTM4OTdDNzg0RURCMzU4N0Q4Mjc1MTE4RjI3RjcKKzoxMDBEODAwMERGNTE4RUZFMzE5QzBGQjc4NzBCNUE2RERGNjI3RDg0NzkKKzoxMDBEOTAwMEM1QjVCNEVCQUJERENGQzc4REQzMzZCQjU4NUU0ODcyNUIKKzoxMDBEQTAwMDcxMThFREMwQTNFRjNDMEI5OTE4MDNGODZFREVFRkQ0NzkKKzoxMDBEQjAwMDQ1OUY1QjE5RDA2NzE1RkNCRTA5RjA5QkFFQ0ZCQzhBN0UKKzoxMDBEQzAwMDk1MTNFMTc1MjI3RUY1QTgyMkI3NTVGQzNFQkEyQTJGNkQKKzoxMDBERDAwMDA1RjBFRDIxNTM1M0E4OEZDMkNGQzNBNzEwRjMxMDVBQ0IKKzoxMDBERTAwMDU2RjI0MUU0MEZBQ0M4ODc3ODA1MkU0NDkxODM1QjNFRjAKKzoxMDBERjAwMEIwQTI3REQ2QUU2Rjc5MDZDRUQ5Qzk2RDAyRDk0NkRGRDUKKzoxMDBFMDAwMDNCOTI5QUZDNkRCNDJDRTlBRDk4NDc3NzdGRDI4Q0FEQkMKKzoxMDBFMTAwMDYwODc4NkE4ODJDQkQxRjJFNzQ5NDdCNjgyOUU0MDRDRDQKKzoxMDBFMjAwMDI5NDQ0RkM3OTFBQjk0RjYwNjkzRDg0RUY1OEJBNzkyMDEKKzoxMDBFMzAwMDZEQzg1RjVBRUYyMjI4QkYzMzQ5OTBFMzI4NDBEQzIzNzYKKzoxMDBFNDAwMDczOTkxRjdDRDE2RTBFRjNFNzI5QzU4M0RFRTdDRThCNDUKKzoxMDBFNTAwMEFGOEYxNjhDNjRGQ0ZCOEY5MDUwNDVEN0VCQUU4RUZGQTYKKzoxMDBFNjAwMDlEN0JBNEVBRjcxMzdDQTEyOEJCRjQ2MUNFMkQyOUY5NjAKKzoxMDBFNzAwMEU0MDRGMjY1RjVBNDdGMzZGMjY1QUFDN0ZGOUFDQTgzMzcKKzoxMDBFODAwMEExRkMyQkU4RkYzRUY2QTBFRjk5NzhFNzkyRDRFNzVENEUKKzoxMDBFOTAwMEQ1RjFGRDBBMTM5NDcxNUQ1RDlDNUY2RjQzRkFENTZEQ0EKKzoxMDBFQTAwMDhEQTE1RjI1QUU2QkNENzA1MzA5MDNGMTdDMTZCN0NERDQKKzoxMDBFQjAwMDI3RUFGOTk0MEQxMDE3MTk1MkMxRTY2OEYzODQwOEU4N0YKKzoxMDBFQzAwMDE3NTk1REQ3MTM1RjFBRDBEM0M0NEM5MDZGNEJFNkM1NEEKKzoxMDBFRDAwMERBQjk1OUI1QUJCMkQxMEY1OTdCREYwQzkwREYxQkY0RjcKKzoxMDBFRTAwMDk2NTU1QzBBM0M2M0ZEODcxQjM0RkVDM0FGRTMwQjU5ODgKKzoxMDBFRjAwMDA5RTk2NjQyMTZGODYzMzY0NEUyQzE4ODNGRUQ3MzQ1NUUKKzoxMDBGMDAwMDNGQ0ZFMTJBNDg3NDlFNDM0NkJCRDRFNzAzM0RBOEQyQjUKKzoxMDBGMTAwMEU0RUU3MTBGQTYxRjUyRTFDRTgyNzVCREE4RUU5QjQyOTIKKzoxMDBGMjAwMENGQ0QwQTZBNzJGQjM5QjQ0QjA3RjM0MzA1OUU4REMzREMKKzoxMDBGMzAwMDEwOUVFNkFFRkJEMTZFNEEyRTY1N0VGN0U0RkE1QTFGOEMKKzoxMDBGNDAwMEYwOUY2NENBN0ZDMDhFMzMxODVBMzhEQ0ZGODlDQzZFOUMKKzoxMDBGNTAwMDVCQzJCMUYyOTI0QTUxOTRFOUY3MDY5QjkyM0Y3RDAzM0UKKzoxMDBGNjAwMEFEQjcwMzlDN0NCRTY4QkZDMzM1QkE3QjJBQTNGM0I0N0MKKzoxMDBGNzAwMDQ1NDJEQjAzMUY5RUM1QzY5QjZFNUFDRUYyQzQ3RDU0MEMKKzoxMDBGODAwMDQ3Q0E4RUMwQjE0QTgxNjM3RTQ1MTIzQjY3NzFBRjA5ODMKKzoxMDBGOTAwMEZENzE5QkNENUQzODVGOURDNEVDRUNEQTRFMzNGMkJCNDYKKzoxMDBGQTAwMEExQkMwQkUzNTJCRDdBODYxRkIyRDU4NEY0RUFFRTdENzQKKzoxMDBGQjAwMDFGRjMwNTg3NUU5RDI1RjFDRTI4RkM1OUNBRUE1NUJDNzIKKzoxMDBGQzAwMDIwOUEzQzEzODM0MUVBMDM3RjIzOUQ4ODFCRjI5NDk2NjkKKzoxMDBGRDAwMDcwNTI1RjE1QUU0QjBDQ0I2RTU4QjdDMjk3NEI5Mjk4QzAKKzoxMDBGRTAwMDFDQTFFNjY2MTY4MzJCOEIzQjZBRjY4QkUyMEQ4QjAzMDYKKzoxMDBGRjAwMDhDQjEzMDNGMTdGMTQ5QTg3NzY5RDYzQjE4NkZGNkJBMjQKKzoxMDEwMDAwMDgwREZGNjBFRTBDRDFFNTczQzdFQkJDNjJFRjVGNTQ0QzQKKzoxMDEwMTAwMEUzMEI5MTU2ODIxRkY4MTExRDA5NzdDNkMzMUY3N0FDRTkKKzoxMDEwMjAwMDlEQUZDRDlCRDREQUZCNERBREQ1NUVDNUZFOTA0REI4REUKKzoxMDEwMzAwMDlGMDZCNDNGOUE5NjU1N0E5OUZERTE2QTAzN0Y1OUYzNkEKKzoxMDEwNDAwMDcyMkFBOTY4OUJFQUZEOUMwOUZBNkI5RTY1NDNGQkJCNkIKKzoxMDEwNTAwMDc5Q0Y0RUNDQTc2ODlBNDZEQzMwOEQ1QUM1OUZBREFFOEQKKzoxMDEwNjAwMEYzQTg5RUM1NDlBOUNDMEE0MDNFNDdCNzNERjQzNDlDM0QKKzoxMDEwNzAwMDgzRURBRTU3RjNCQTU4OUU5M0JDODc1M0YyQkFENDNDNzMKKzoxMDEwODAwMEMwRjAxMUYwRDc3NjczMTJGQTZEMDdDRUQzRDJGRDY3OTgKKzoxMDEwOTAwMEY5NUM5Nzk3MTc2ODJERjYzQUMxMTJGRjY5QzE3RkZDN0EKKzoxMDEwQTAwMDI2MjlGRDMyRjJBQUU1ODI3NTVGOUQ1NzlENzQyQkQ0RTcKKzoxMDEwQjAwMDlCNjAyRjk0N0E0MDAzQUEyRkFCNjU4RjU5ODI3Q0FFMzgKKzoxMDEwQzAwMDQ4QkQ0MEVENEVEMzFFOEVCNTk3RDdEQzMyNDVDMDczNzgKKzoxMDEwRDAwMDcwNEFGOUYzMjdFMUJDRUIxQTMzODkxOTJGN0E3RTgyMjMKKzoxMDEwRTAwMEE2N0YzMDJEMkQ5MkZBRkQxRjY2NEVDOUM3M0M0ODY1N0MKKzoxMDEwRjAwMEZFMTU0RjdBODZEMUZFRjRCMUZEMjFDQTI4RURBMUEwREMKKzoxMDExMDAwMDhFRjdDMkU4NjNERDhGMEU4QkU4RUQ1NDhGRkY2Q0U0NDEKKzoxMDExMTAwMEY4ODhGRUZFRjBFMUU5NUQ2M0U5NThDOUUyNjc3OEVFMjAKKzoxMDExMjAwMDUwRDVDMzlCMUQyQ0NGNUE4QkU3N0Y1M0U0MTRCNTg3NTIKKzoxMDExMzAwMEE3ODI2QUZERjBBQ0M1NUVFODc3MjAwRjcyRkY1QzBGRjYKKzoxMDExNDAwMEQ4QzE2QTFFNjRGMzcyMkY5RTNGQTQ3QUJGQ0UwNTc5ODAKKzoxMDExNTAwMEQ1N0YzQzczRTIyMDAxM0JGMzE0RkEwMzlBMkYwOENDQUQKKzoxMDExNjAwMDRGNEVFRDA3OEVFMjhCNjlGRjVBQzQxRkIyNDNFRjA3NjMKKzoxMDExNzAwMEQ3NEVCNzVEMjY4MDhGREQwN0I4RjE4MDVGODRCNEU0NzkKKzoxMDExODAwMERDNDI2MTdGOUJDQjkzODRGRDI1QzgzRkM4NzMzMTNGMTAKKzoxMDExOTAwMDc3QjNBQjZBNjMyMUMwRkEzOThFODAzRURFRTlGQTE0NzgKKzoxMDExQTAwMEVEOEFBNkJENTNDNjQ3OUY5N0FEREZCMzhFOURCQkRDQ0UKKzoxMDExQjAwMEExOEZCQkVFM0MxN0NCNzc2Q0RBRkIyQUM2N0I0RUY5Q0UKKzoxMDExQzAwMDM5QTRCOTg1ODI3RjM1RDg5QjBCMTdFQUMwQjIyMjY1NTYKKzoxMDExRDAwMEZFQjk5ODM3NEQ2NjE5MDhDQ0RGQUNEODIxQ0QzQjZFRUYKKzoxMDExRTAwMDkyRTFGQzZFMzNGRDhGOTIwMEQ5RTQ5RDhGRkFGNkE2NTIKKzoxMDExRjAwMDU5MjYwQkU0MDkzNEJCNkExNzIzQkYxMzkzM0M2MENBMUEKKzoxMDEyMDAwMDY5RTczOTkwMEZCOTJDMDlGM0FBM0FGN0U4QTc4MTlENEQKKzoxMDEyMTAwMDU0NEVFOUUyNjcxNkUwQUJFRjM5QjcwMkZGNEMxQkM3NEIKKzoxMDEyMjAwMEI3OEI5MDc3MUE1RkZGMkUxQUM1RTQ1MDA3RTc5NUZGM0EKKzoxMDEyMzAwMEI5MENFMzM4MjQzQUJGN0RDNDFFNjY3RjRENzQxOTYyMzEKKzoxMDEyNDAwMEZEOTMyRTY2MTc1RTJCRjc1NzAzQUVCRDIxODQ5MkMxMjYKKzoxMDEyNTAwMDFFNkUyNjlFNEZDMEVGNDVCQzE2MDlFMzU4MjQ4MEZFNDMKKzoxMDEyNjAwMDQwQzc4MzEyREE0RDI2NDdFODkxQjE1MDdGQUQ4MDc2QjIKKzoxMDEyNzAwMDkzRUE0NzM4QkIzNzEzRjVCMTk3NURCRUVGQzIzRTk2OTAKKzoxMDEyODAwMEYzQTEyN0ZGMTlFMEY2ODhBMEM0QzMxODVGQzlCOUM5NDQKKzoxMDEyOTAwMDMyMEVFQzJCQkQ4M0U5MzM2NkFBQ0ZDMEI5QTFFQjU2NjEKKzoxMDEyQTAwMDFGRkY2NTM1RjA1Njg3MTdGNTA4NDI4NTFDRENFRjUwQTcKKzoxMDEyQjAwMDZERTI1ODNDNDhBMzM3MTNEMTNEMTlEQTRGNTVGQ0QyQTMKKzoxMDEyQzAwMDA1NzRCNzRFOTgxMDM1M0IyRUE2ODEzRkMzMjEwM0JDNTEKKzoxMDEyRDAwMERGQTEwQjQ4QTNGNTUzODhBNzgzRUQwQkRCQkZGNTA2MTEKKzoxMDEyRTAwMEE2QUZBRkQ3OTk1MDVGNTdGNUUxNjQ0NzNGREE4OThERDQKKzoxMDEyRjAwMDAxMEVDNzY5NzRCRDgyRTc0NzE2MjlFNzE0MDZDRTBCQjUKKzoxMDEzMDAwMDA4MjEzQzNGNTFFQjRBNTZFMkIwMUQwQzNGNDkzRkZBRTEKKzoxMDEzMTAwMEMzQzg4QjZDMUZBOEU2ODlFNzJBNTRCOEFCRTcwQ0Q0ODYKKzoxMDEzMjAwMEZFMEM0QTdDQjc1MUYxRTc1MjgwMzE3QTc0QTlGMUREQTUKKzoxMDEzMzAwMDE1Q0E1MzNEMDdDMkM2MjU4MjU0MUVFRDc3NUM1RjQzMzQKKzoxMDEzNDAwMDQ4M0ZDRTRCQjJDMTdDMUZDOUYwREVFN0EyREYxRkE1MkMKKzoxMDEzNTAwMDc4MEM3ODc2NzQ1NUIyOUY3MDgwNDdGRDFFODhEM0M4OEMKKzoxMDEzNjAwMEE1MkNGRUEyQzVBNzQ3NUM5QzcyQ0UyQzNDMTVGM0YwQzEKKzoxMDEzNzAwMEY2MjYzODY3QjYyN0Y2OUMxOUU1MEY4QkRGQTZFMzk0QUYKKzoxMDEzODAwMDk1MUQ3NjAzN0VBRkIxMkJFREFGMjc3OEJFNDA3QkNFQTcKKzoxMDEzOTAwMEFDNEJEOTg3RkY3M0U3Q0NEQzlDQTc4NzNFQjdCQUVDOTAKKzoxMDEzQTAwMEIxRTdDQ0RDNkNCRkQ0M0MxOUVERjlCMkIzRDk0MTgxQzMKKzoxMDEzQjAwMDlEMDcwOTNEQkQwREU1QTUxMUVEQzJENzNGRUVFQjAwNDAKKzoxMDEzQzAwMDNGRjNCOTUyODMxQkNFRDU2NERDRjY0RTA3RTYyQjcxOTIKKzoxMDEzRDAwMDQyMEJDNDRGQjVGQUMwRUY5Q0Q1M0YwMUZBNTk3N0NCMDkKKzoxMDEzRTAwMDZFMzdFNjhGNkJGNDgxNDQ3RTAwOENFRDQ2Rjk4OTBFRjIKKzoxMDEzRjAwMEI4QUVBQzFGQzBEQ0Y1QjkwREYwRUQzNDE3N0UxQ0YyQjEKKzoxMDE0MDAwMDlBRTUwMzdDRENCQ0U2MEY1Qzg5RTI2MjlFNTlEMUZBNjYKKzoxMDE0MTAwMDY5ODc5QUZGNjc0RjhBQzk4N0VENDg5MEZGOTc0OEVGMjEKKzoxMDE0MjAwMDE3MTJFNkZENUQ4RkZBNUJDNzQwREVERjM0NTU3RjhCMTgKKzoxMDE0MzAwMENENkIxNjkzQkVEMjVFNTZDNzlGMTY3MkM2RTQxMTdDNjIKKzoxMDE0NDAwMDcyQzlFQjU0RUM5ODA0RUI0QjY0Qjc1RDZFNUU4NDE2ODYKKzoxMDE0NTAwMDBFMUQwOUU0RTg1RjVEMDNGMTNGNEQ1RTg0NDc4NDNDNjcKKzoxMDE0NjAwMDgyMEVDODIzQTA0RjgxMjMzMkZBQ0Y3NjBFRTQ0NTA0QzIKKzoxMDE0NzAwMEQxNUZGQ0VBNDhGNDdCMTkxM0U2NDVCMEZDM0VFMUMwQkQKKzoxMDE0ODAwMDQ4MDlCRTdCNThFRkY1ODAzRDIzRUZENDJCNzJDMEZGOTcKKzoxMDE0OTAwMDNDRjg0RDNBMEU2NEEzOUY4REI4NDIyNUMwMUYwNUZCNTIKKzoxMDE0QTAwMEQ0MkNEMEFCM0ExNEZDNkNCOEY0QkM4OEI0QTIzODc5MTQKKzoxMDE0QjAwMDExNUJGREUzMUVDRjY1RjY3MzdGMzJENUNCQjYxMjI2RTYKKzoxMDE0QzAwMEE3RTRGRENDQUY0OUU3OEQ3RUJERjA2M0MzNTE1RkU1NzYKKzoxMDE0RDAwMDY2OUE3MDFEQzdERTMwRjYxODUxMEY3NzYzOUU0MzZEMTQKKzoxMDE0RTAwMDE2MkY4MjdDRTlBRTI5M0YwMUYyRUIxODU1NUM4MThFMDQKKzoxMDE0RjAwMEVCRUU1RThFRjY2QkEyRkRBOTVCMTUxQjc3NTZERjVGRTgKKzoxMDE1MDAwMEVBM0U4RDJCNjJGQjc0MTRFQzdCMTRCNDMyRkE4QjE3MTkKKzoxMDE1MTAwMEFFRTIwRTYyRkVCNjI2RUU1RDU2NDQxNDM5MTE5QkM3NEMKKzoxMDE1MjAwMDcwREU1Qzg5RjFEOEZCOUVBOEMxMzhFQzdDRDI4MkNGRkEKKzoxMDE1MzAwMDg1QTQ0Qjg5Q0JCMjc4OEJCNDRBNDAzOTIxRURFMEZDQ0QKKzoxMDE1NDAwMDkyOTM5MTg5MEU2RDdCNTE4N0Y3RjU1MEYxQjYwOTQ0NUUKKzoxMDE1NTAwMEEyNENBOUU2NkFGQTlBRDM3MUEwQTc0QTFEQjQ5QzQ5ODUKKzoxMDE1NjAwMEQ3QjU1QTkwQjNFODc3NUJERjRGNDZGRkVCQzMwRTQ5MjAKKzoxMDE1NzAwMDM5NTdDM0VDMkZGOTUxMEVGNTNGREEyRkRBQ0Y3MjA3NDYKKzoxMDE1ODAwMEM1MUJEQUNGQ0Q0NTJDMkVEMDUwQzRGQ0M5MTQ0NUZDNjgKKzoxMDE1OTAwMDM4MUZFNUQ5QTFFNDdEQThFM0I1MTE1RDEwOUUzQThFMTAKKzoxMDE1QTAwMDNEMUYxNjg1NjlGMUY0M0JCNUJGMEU3RDhCMDlFMjJEMTkKKzoxMDE1QjAwMEUxRTEzQThDNjc5RTM3Nzg2NjYxM0MzMEI1OTA4MEJEM0EKKzoxMDE1QzAwMEQ4NjE2RDU5MzU4REQ1MjMwRjNENkYwRTdCQjFGRTNCMzQKKzoxMDE1RDAwMDAyMzMxNDg4OTQwQUYzQkQ0MUQ5MEZFREJFQ0VFQjhBRDUKKzoxMDE1RTAwMDJENkJGMzEzQjRGNzdFRDQxMURGQzhFQ0JDQzFGNzYwRTgKKzoxMDE1RjAwMERDNTBDNEU0RTFGOTRFQTdCMjJGNkU4Qzk3NzdFOEE1RDIKKzoxMDE2MDAwMERGMzg0MTNFQUUxNjUwMEVCNzBENjM3MEQzMEQ2N0NGNzUKKzoxMDE2MTAwMDVDRkJFNDU5Mjg4N0VENTQzRkM1RjlCMkY5RTc3RUM3NzIKKzoxMDE2MjAwMEMxMDFGRDc1RDgxOTdFN0REQjc5NkJFN0JCQjRBODEwQ0QKKzoxMDE2MzAwMEY3QUQwMzhDMDYzQTVFQzc2QUNFQ0ZFMEM1RTY3REE5NUEKKzoxMDE2NDAwMEZFRUEyNzhBQUVBQzlDM0FDNkI5QjcwNzAxQ0YyQ0ZFOUEKKzoxMDE2NTAwMDFGODFERkFGQUVDRDI4MDIzRjNCQ0QyOUY0QkY5QTQ3QjMKKzoxMDE2NjAwMDdFQjY2OTYxMkE5NjhGQUUyQTQwM0ZEMDAwREQ5RTVDMkYKKzoxMDE2NzAwMEI5MThFRTMzQjlENDdDOEFFNzE0QkM3ODU3RTM4N0FCNEEKKzoxMDE2ODAwMEFERTBERTgzN0VCNDcwMDc4NDEyNTRGOTQzOUI1NkRGQ0QKKzoxMDE2OTAwMDU0M0MxNUY4NjM5MzhFNDg5OUEwMEZBQ0QyRTRCMzY4MUMKKzoxMDE2QTAwMEU4Nzk4QUU0N0JBNTA4RUMwRjQzN0YxRkUzNTNBMTQyNEUKKzoxMDE2QjAwMDAxRjU2RkIzMUJFMEI2NEU3NzZDRTdDRjAxNUY3NjlBMEEKKzoxMDE2QzAwMDMxM0ZCMjY5Nzk3ODNCRjgyQjMzMjVERjVFNjg3NzY2NjYKKzoxMDE2RDAwMEQ5RTFBOTlDODREREExOUU3NEVFQzA0OEJDMUZBN0I2QzkKKzoxMDE2RTAwMDQzNzM4RkM3QTNCMTc5MzQ2NDU1MkFDQkZCRTg4RTdENTEKKzoxMDE2RjAwMDBGRjczN0M0QjQxQjk0NUZDM0Y0RDZGNTA2NUYxMUQ4NTcKKzoxMDE3MDAwMDE3OTNBRTYzNzk4OTFGRDdFQjA4RTBDNUM3NjY4NjNGOUMKKzoxMDE3MTAwMEYyNjM1NjQ1Q0VCODBCQTNGNURBREY2QkYxRTMzMTMzNTQKKzoxMDE3MjAwMEUyNDc5RDcyRUU0REJCMUY4RDgwMUY3NERGMUExNEZDQzMKKzoxMDE3MzAwMEY4RjhENUFCMEIwMTNGQ0VFQ0JDQkExMEYwNjNCREJFRTAKKzoxMDE3NDAwMENCMDNGNEI1M0JERjc3MThFMDcxN0M4QUI3NEZDN0Y4NUQKKzoxMDE3NTAwMDUyRTFFNUUwRUQ0NzU3MTg2RjJGNTVCRjMyOEQ0QTE0MUYKKzoxMDE3NjAwMDZGOTFFRTg4OEVCN0Y0RUE5OTlGNEMzNkM3OUUxQkVCQkIKKzoxMDE3NzAwMEJENENCRjZBNjJGRjU4NTE3RUFDN0ZDQzk1MUY1N0JGRUUKKzoxMDE3ODAwMDMyOTlCRjUyQkZCQUZDNzUxMDNDMzdBOEM2NjE3QUFEMUEKKzoxMDE3OTAwMEUxQzdCNzQ3QzE2Qjg5OTlFNUEzMkMyOTEyNDVCOTE0NTQKKzoxMDE3QTAwMEQ2NTc5Qjg3RTcxMEZGNjg3MkY3NzA1Nzc0OUQzMTdFOUMKKzoxMDE3QjAwMEMwMzdCRUM4NUJEOTA1RjNGMDMwQkZFNTFCODJENDc3RDQKKzoxMDE3QzAwMDBEMURGNzBEQzJGQzk2REE3NURGQThDNDYxNTRCQjVCMzIKKzoxMDE3RDAwMEI1MDNCNUUzOTc4QzYyN0FFNkE0NTE5RTUyQjAwQjI2MEUKKzoxMDE3RTAwMDdENzExMUZEMDgyN0UxMUUyQzNBQUVDOUZGMzNCNEU3MjUKKzoxMDE3RjAwMEM4N0U0RUM0NzM4QzEyOEI4MzM2RUQ5REY3MkNGODVEM0EKKzoxMDE4MDAwMEVCRkQ0QUZDNzIxNzg3RjY3QUZENzM5RjYwRkREOTNEQTgKKzoxMDE4MTAwMDc1NTg2RkQ5Q0YwNTIxMEVEQTNDNEM4NzcyNUJDRDdGQUUKKzoxMDE4MjAwMDUwRkQzRkNERkI0QkQxRUZBM0ZBN0ZFODNDQzY4MDVENzYKKzoxMDE4MzAwMDk5RUMwODFCOTA2RjgxN0Q0OURCMzUwOTJDQkVEQkU0RjgKKzoxMDE4NDAwMDIwNkUxOTU4RUQ5RTU4QkY4OTlBMUZCNUM5NkI0MDdBMTIKKzoxMDE4NTAwMERGQjQ5RkYzODMzRDlFNjFGMDM5ODcyMTNDODc4OTI3NjAKKzoxMDE4NjAwMDkyMjM3QzYzRkEyOENGNEFDODczNTJGM0VFRTBGRTlGQkUKKzoxMDE4NzAwMDUxRTNEMTBGOUE4M0U3MTBGNEVBN0QyRkIxRjdGMzI0RjcKKzoxMDE4ODAwMEMyRTcwNTA5RTk4NkNDODlDNkI3OTAyNjBFMTFCQTYyNkYKKzoxMDE4OTAwMDc5Q0NCMzUxREZGRTZGRTI0NTdEREJBN0MxQjc1MDAyQzMKKzoxMDE4QTAwMEY5RDIzQzRBQ0Q2M0JFMTVGNTdEQjVGREUwRkM3RTNGMjcKKzoxMDE4QjAwMENCRUYxRkM4Q0Y2Mzc5RkMwREQzMDlFOUI0QjMzMkRDOTkKKzoxMDE4QzAwMEVCRDQwOEY3M0FCOTk5QkMwRjZBRTQ3RDc0MTlGMkUxRDgKKzoxMDE4RDAwMDgyNTE3Q0JFNDFFOEM3NzMwMkVBM0Q0RTkwMUYxN0ZENUUKKzoxMDE4RTAwMDdEMTM5Q0RCQzk2Mzc5NzIzMUZEMjhGQzNGOTNCRjA3RjAKKzoxMDE4RjAwMEUzNTU3MUUyQzQ3NzQ0REI0Qjg3NTRCQkIwNTQzRDE3Q0EKKzoxMDE5MDAwMDE2MzY4MDNGNkE0OTlCMjMwQzcxOEY0MzU2RTVCQ0JBNUIKKzoxMDE5MTAwMDkyQUZCQ0M0MUMzRTA2RkU5QTI1Q0Y2N0UyNzlBMjAxQjUKKzoxMDE5MjAwMDdCRTQyNUEzRTJFRjY3NzREQUMwRkUyNENEMEI4RkEyMUYKKzoxMDE5MzAwMDVGQTIxOUVFQTVFMDIyRkIzNjNEQTExREY5OEI3Qzg4NDQKKzoxMDE5NDAwMDFGMUQxQUIwMjNERkM5ODdGMzYzQUE1QzY4NzAzM0ZFREEKKzoxMDE5NTAwMEQ2QjA4NzYzRTcwODAzQjFFN0M4NUUxRTc1NjVFNTg0MDYKKzoxMDE5NjAwMEZBNURBMkY2ODc0NjI1QjI0QkJGMEVDRTBDREYwRjI1REYKKzoxMDE5NzAwMDNBN0ZBN0YwNzUxNThFNUFCQ0JGNUNGOEE5RjUwM0YwNDUKKzoxMDE5ODAwMEEzN0MwOEU1ODMwNjdFNUFCRjlGRUFCRjIzMUQyMkZBODcKKzoxMDE5OTAwMEY3QTgwRTE1ODBGQzUzRDU3Rjc3QTlGMkZCNDMwNTRFQkYKKzoxMDE5QTAwMDdGNkZGOTRENDYyN0UyNDNERjZFN0YxMkYxQTNDQkRENTcKKzoxMDE5QjAwMDk3NDFGMjFCRjZBNzI0QjFGQ0NFQUZGODM3NjVERURBMEIKKzoxMDE5QzAwMEJDMDk2NURFOUFCQzg5NDNGQUYwMEM3NjBGMEI4NThGNTMKKzoxMDE5RDAwMDczNzBERTQ0NDJGQ0ZCOUFCQzg5NkZCMDRFNERERUM0OEUKKzoxMDE5RTAwMDU3QUY1MzlCMzdGMUNDODFBNzZDMTA1QTg0RjM4QkUwMkYKKzoxMDE5RjAwMDI3RTlEREE2Qzc3QzgxQTlCQ0M1QzNGMkQ5Nzg5NkZGQ0IKKzoxMDFBMDAwMDRBM0M3ODVGNkZCM0M5OENGRTEwNkRCRTFGRTU1NDJCNDYKKzoxMDFBMTAwMDVCNDAxRkFFQTA3NjBBOUM5N0RBRDI4RTdBNDQ2MzM2N0EKKzoxMDFBMjAwMDhGQkU1NUM4NkYxNEE1MzhGOUE0NDI0RDRBNTAxQTlDNzAKKzoxMDFBMzAwMEQ3MDZFNzBCRjA1RThCQ0JDQzZCQkI2NkI0RDU4MUYyREYKKzoxMDFBNDAwMDU3MjJDRTZGOTg1RjVBM0QxQUZEMEY1RjlERDdGNjVDMDcKKzoxMDFBNTAwMDAxQzNGRjM3MkQ5RkE1NDVERkE3NUI1NTJDMTM4ODUzODYKKzoxMDFBNjAwMDI1M0EwNzUxMzM5QTFCQzg1QkM2RjM4QTgyNENBMkU1MUMKKzoxMDFBNzAwMDcxQTI3NkIzNDczM0ZCRUM0RDQzRjhGRDAwRTg4MUI0MjcKKzoxMDFBODAwMDFCODhEMzY2MTlBOEY1NUYxNkI5QUZFMTM2OTdGN0Y2NEMKKzoxMDFBOTAwMEQxRTlBODNGRTFGRTlFRERGQjA3OEM0RjNDOTM0RDQ0MEUKKzoxMDFBQTAwMDM4OTdGMDhDNUVDNjdEOTZEMzA5RTJCNTlBN0ZBMThFRjkKKzoxMDFBQjAwMDczNEU4OUEzNUQyQUZGNTkzQ0ZBRUYyQjE3MUVGRkJGMTcKKzoxMDFBQzAwMENFNzcwNkU1NjkzMTdBRkMwNkZDMDZFOTZGODA5RkU4NkYKKzoxMDFBRDAwMDU5RkM0QUJEQUZFNTZCRTVEQzk1RTYzMzlBRkM5MjQ0RDAKKzoxMDFBRTAwMEVCNkEwNjVBQTRGOEYzQ0E2OEVGOEI4QzhFM0NFODE3QjEKKzoxMDFBRjAwMEJENUNGOTk3NUM0NkY1MjE4MEM3MkVBMzA0QTQ2NjUyMEQKKzoxMDFCMDAwMEVFNjUyMThGNjZBQjdFNUM3NjlGRTc5QUUxQTgyRjdGMUEKKzoxMDFCMTAwMDZDNjZGMzU1RUY5QjUxRDdGM0I2MTYzRkJGQTVEREZEQkQKKzoxMDFCMjAwMDc4QkVGN0U3NDA1RkM3MkIzRDc4MEVGQzYxMkJEM0RCMTcKKzoxMDFCMzAwMEMyQ0ZCMzNDN0RFREZEMjk5NDZFRDg3RDMyQ0FCREUwQTUKKzoxMDFCNDAwMERBN0IyMEZFMzhGQTFGMjNCRjJGOENGRURGRDFBRkZFRDkKKzoxMDFCNTAwMDUxRjJGQkYyRDcxMTZCN0YxRkIyQjIzQ0M4ODhGREZEN0EKKzoxMDFCNjAwMEJGQjZBRUNCOTJENzZBNUU3NDc5NTVCRjEyOUZFMDA4QkMKKzoxMDFCNzAwMEM0MjdENDcxOUFGQkQ5QjlBMkExQ0E3OTE2RjVGRDhERjMKKzoxMDFCODAwMDhBNUU3ODY3QjE2NzE4OUM5RjI5MkIwQjNFMERFNzZCMjcKKzoxMDFCOTAwMDlBODgwRDdGRDdBMDI5NzBGRjhFNUYzOUQ4Rjk2NjJDRkYKKzoxMDFCQTAwMEJCNTg3Qzk1NzgyRDc4NUUzRkFERDA1NzU4OENGNDFCOTAKKzoxMDFCQjAwMDVBMDlGNDM5QzI0MUNBMjFDRUQxRTk5QTQ5RUEyQzk4OEUKKzoxMDFCQzAwMDM3MzEwQUVBNDcyQzBGM0RGREFCMzJDQzFCNkIwMTdBNTMKKzoxMDFCRDAwMDU1RjNBNkNCMkY3RUI2NzI1QTE5Q0UxN0ZERDUwRTYzREMKKzoxMDFCRTAwMEVDQkQzMzM3MTYzMzdCNTA3RDRFNTNFNjRGQjczRDFCNkMKKzoxMDFCRjAwMEU2NzM2NjIxM0JFRkRCRUNGMDg4RTBGNzU2RTNGNEM5Q0YKKzoxMDFDMDAwMDUyM0ZFNjM5MzRFRDYyNDY1MTM5RDg4QTUwRkZDMDMwMzAKKzoxMDFDMTAwMEE0QUZBNjVEOTVBNTEwQkYyNTAxNzMyOURFMDdGRTI3OTkKKzoxMDFDMjAwMDc2MEZGRjk5NjU0M0QwM0ZGQUIyQ0I1NzA5RjNCNjk2Q0EKKzoxMDFDMzAwMEY5QUYwN0JCN0YwNDFEMDdFMkJDNjc3NjVFNUZFQThCRTYKKzoxMDFDNDAwMEMzMzczM0Y5NTQxOUUyRTA5OTNDMDkzQzI5NDZGODE2QTgKKzoxMDFDNTAwMEI1Rjc2N0EzN0Y3QjY1MThGRDZFQTVDNUVDN0RCMzgzRTMKKzoxMDFDNjAwMEM5RjVFNkZEMzU2NDlFMjU1MkI2Mzg2MkNGOEI0RDFBMTQKKzoxMDFDNzAwMDM1QTUxNEU2NTE1QTJDMjg3OUE0MkM2RkQ1NDlENTMwQjYKKzoxMDFDODAwMEYwNzM2QUYxQzlBOUU0QURENjI4NzlEOTQ0MzY0NUYyOTIKKzoxMDFDOTAwMEIxNzNCRjNFNkY1NTlEOUY1QTU2RjM1NjkzMkYzMEJGNzkKKzoxMDFDQTAwMDQzQUU2OEMwM0MxN0VCMkFDNjU3Qzk3MjgyNzE4RTZCNkYKKzoxMDFDQjAwMEMzRkRENTI5MTQ0RUY5RERDMTZCMDE0RTI5MDA3NkJDNTgKKzoxMDFDQzAwMDZGMzlGNEM4NThGQURFOTEyNjVDMEJGRTlCQTc1QkM3MDAKKzoxMDFDRDAwMEY1ODJGRTJCQUNFRUZGMEU2Qzg5RDQyNTU2ODE0QjM0NzkKKzoxMDFDRTAwMEFERDBEQjg4NzgyNEI0Qjg4MDJGNTVGRDRFQ0ZDRTU1Q0IKKzoxMDFDRjAwMEFENEU0NkJEQjIzQkE3MDFDRjU1OUQzRDZDOEM3QjJGQjEKKzoxMDFEMDAwMDg1RkE5NEM5OEEyQzg4OTNFNEFFRkE3N0NDNjNCMEVFNTYKKzoxMDFEMTAwMEUyRTI5RUJGN0JCN0Q4QTI5Q0JCNUE5MTA1NzExN0VCM0MKKzoxMDFEMjAwMEFBN0VCOTgyRjY5RkZCMTg0NzE0MzMzQTlCQ0IwMjdGRjkKKzoxMDFEMzAwMEI2QTAwM0Y5NUFCNzg3RERDRjU4RDc2NUFGMzJBMUJDM0IKKzoxMDFENDAwMDYxRkUyNTcyQUQwM0U1ODhCMEZBNDYxREYwMDlBMThENEMKKzoxMDFENTAwMDZBQjE3NDlENkYxN0IzNzg3QTQxQjdBODAzMzlGNUFGQUMKKzoxMDFENjAwMDVGRjI3MUUzNUU0RjE0NDdDRUU3MDBCODFBOERFMUJFMTMKKzoxMDFENzAwMDJDNjcyNDJGNDkzRDk3QTNGQUE3MDZFNENGQUVCOUU4MTQKKzoxMDFEODAwMDlGQkFGQzNDRjRGMEVEOThFN0Y4NjUwNkM2ODNBNkRCNDUKKzoxMDFEOTAwMDk4M0Q0MjA1OTE3MjNGNTE2Q0ZCNDFGNzEzMjk3QThCQjQKKzoxMDFEQTAwMDZBMTc2QkU5NDA5QkQ3OUQ1RjMxMDRFOTgyRjJEMUMwOEQKKzoxMDFEQjAwMDI2MzE4NkVGQzVDREVGNkUxNTk4REU0REQ3NjE1ODAyRkUKKzoxMDFEQzAwMEYzQThDQzcyODMzRkYxNTJGM0U5QjVGNkY0ODA5RUEzRjkKKzoxMDFERDAwMEU4MjVFQUJDQkY2OUZFQjk1QURGMDA3OUU3NzFGQzFGNEMKKzoxMDFERTAwMEFBNUVEM0ExOUUzM0ZGOTJERDFGMzc0MkIxMjc4RTc2QzQKKzoxMDFERjAwMEZFQkYxMjc2NEZBNzlBRTdFMjY3RTc1NEY0OTQ3RjIyN0EKKzoxMDFFMDAwMEZFODRBRTkzMDEwRjc2RDk3NTREQzUxODBGNkJDMjdFNTcKKzoxMDFFMTAwMDU2QjNERkZGMThCMTJBNkY0NTQ1MTkzQzQ1QzI1MTc4Q0EKKzoxMDFFMjAwMDFGRERCNzY4MDRDNjlCMjk1RDE0QzRBMThCQzVDNUVDMzIKKzoxMDFFMzAwMEZFMDY2MTc1MzJFMkIxQjA5NjYwRDZBNjYwQ0Y0MDNDMzYKKzoxMDFFNDAwMDE2RDYzMTdDNURBNEQwQkQ5QTY3QTdDNjJERUYyQ0Y2QkYKKzoxMDFFNTAwMDFEMkI0RThGQkFBN0E1MzU4OURERDNBMkU0QUI1QjVCMDIKKzoxMDFFNjAwMDBGQkYwNEY3OUYzQ0FEQzRBRDdCREYxODNEMTNFMzg5ODIKKzoxMDFFNzAwMEFCMDUwRUVDQzNGM0Y2QjkyM0MwN0Y3NzU2RTFERjU2MEUKKzoxMDFFODAwMEExOUY4ODk2Njg3QUVEQzVGMzhFQjkwN0Q4MzkyRDQxQTAKKzoxMDFFOTAwMEM5QUIxNTU2M0JCNjAyN0U5QTlEM0UzQ0Q3Rjk5RDhFNDYKKzoxMDFFQTAwMDIwOEY3OTVCRTJGMTI3QTc0OTYwNzc4NDBEOTA2Nzc3RUYKKzoxMDFFQjAwMEFBNEQwOEFGQjBBM0ZFMTRFMzI3RDNGQUJEODgxMEMwMjMKKzoxMDFFQzAwMDNDMjJERDk4MkJBQjQ3QTlERjI1NkEyRjhENDlBODNGMUYKKzoxMDFFRDAwMDdEQUJGMzIyRTQ2QkZDNTNERjE2QUYxM0Y5QTcyRTdGMjMKKzoxMDFFRTAwMDFEREE3MzIyQ0MzRTIxNkZCMDdDQUMzOEVCOEFGMTVGRjcKKzoxMDFFRjAwMDVFRjE3NUE5N0U0QjZEN0VERDIwM0E2NkZFMEZENTFFMjQKKzoxMDFGMDAwMDUyRTMyNUM0MjNDN0U0QkZGN0VBQzUyMEU4M0Q5MDRGNUMKKzoxMDFGMTAwMEZDQUExQkY0RUExRjlCQTNGM0RGQUUxRkEzOEJCREI3ODQKKzoxMDFGMjAwMDkyRjhDRDcwMUY0MjlENzIzRTlBMDhFRTU1MTBCN0JERDMKKzoxMDFGMzAwMDlGQjc3NjgxN0RENzBFRTcxMjQwQkYwNEY4NzI1MUU3NTQKKzoxMDFGNDAwMDMzM0VCMDYyOUU0NkFCQzBDRTZGMTA5OTlERkY1ODMyQjMKKzoxMDFGNTAwMEFGRTVDN0QwN0U0OTVCQTYwOEYwOTdBQjVBN0U4QUU3MEIKKzoxMDFGNjAwMDNCNzRDNERCNEU5RjlGMkJCRjg3QTNDRTQ3M0RBRjkwRjIKKzoxMDFGNzAwMDQ4N0UwRTNBQUZGMDM1RTcyREIyMTM5Q0I3NThBMEUwN0IKKzoxMDFGODAwMEJERUIyRTgyRTcyREM4MkFDRjU2OTg1Nzc3OUI0MDIwNkQKKzoxMDFGOTAwMDNFOUQzQThEOTU0NzA4MjZGQzdEMjYzM0U0N0RBN0UxREEKKzoxMDFGQTAwMEY5NThDQ0NGMEU1Mzc4NDI5RUI5MTlGMkJFRDNFMDNDMUIKKzoxMDFGQjAwMDBDQkJBNzkzOUIzOTBERjEyRjk1QzIwN0Y0ODI3NjNEOTgKKzoxMDFGQzAwMEJCOTc1M0JFQzU4MkY4NTQzRDhEQzU1QjUzQkQwNkU0MzcKKzoxMDFGRDAwMDNGRTc4ODFCQ0YwOUM4NzA3RjlGMDNGMDZDMDVFMjY3NUQKKzoxMDFGRTAwMEQ4OUE4MUYxRTJENDdDQTY0NzlBQkQwNjlEQzk4OTc5MjkKKzoxMDFGRjAwMEREODhBRjYxNEVDREVCNjY3Q0FGN0JBRTg0RjlGNjAzMzYKKzoxMDIwMDAwMEY3NzRDRTIzQjgzRkFCMEJBNjY2QzNFRjkyMENCOUM5RTkKKzoxMDIwMTAwMEMwNDE3QzQ5OTUzMzU1MEE3RTc0NkY1NURBMzdCMkY2NjQKKzoxMDIwMjAwMDcwOEYyN0NDOEYyQzYxRUQwN0VFRjFGQzNFQUI2RjE1NjYKKzoxMDIwMzAwMDQyNzhBRjE0RDU2MTk0N0IyNDU5RkQ5MkQ5MTk0ODNGNTkKKzoxMDIwNDAwMEJDNzIyRTk3RENBNjlDMkJFMEQ4M0Q2NDRCNjYwRjYxREEKKzoxMDIwNTAwMEY1MzZDNjA3QzlERDQ5OEEzQzU3REFERjlCRUE1N0UyMDUKKzoxMDIwNjAwMDA1RUM3QzQwQkQ0RUI5RUZBMDhCNDRDNzlGNTUzQUQzRDkKKzoxMDIwNzAwMEZFM0U0Nzg0Q0VEOEY5OTIyNzIyRTcwNDkwOUVEQkFGM0MKKzoxMDIwODAwMDE3MzEwRjUyQkQ4N0I0Q0E2MjYwRTdDRTRDQjE3NDM1QzgKKzoxMDIwOTAwMDY5NEMyQUMzRkIwQUI3MDlDNjVERUJGNEZDNjQ0QzVDQ0YKKzoxMDIwQTAwMDNGOEQ3RjZFMzQ1RjE5QTJGMjk1QkIwRDFBQkIyQzkzNDYKKzoxMDIwQjAwMEMxRDUxNjdFOUE5RDRGMzM1RTk2NUQ5NjM4MEVGQTdDOUEKKzoxMDIwQzAwMDc2NkMxQzc0NDc3Njc0MUM1NEREREZBQTg1MDZFNDJCRkQKKzoxMDIwRDAwMERENzZFOTJEQzg5N0RBNDQ0MTBCRjczQTZBRDdCRDY5MzYKKzoxMDIwRTAwMEUwN0U3NkJGMTlGNDUyQUQzRDc4Mjg0MTVFRDRFOTMxRTcKKzoxMDIwRjAwMDRDM0Y3NDI3RjA0MzlDMUU5M0M4Q0Y5NTIwQUU1QzZBN0EKKzoxMDIxMDAwMEZDNUY4QThGMzNGRURCOUJFMDNDRTIwMEJDNTRCREM5MjAKKzoxMDIxMTAwMEE0OEQ3QkM4OTdFNUY3RTkzNUZEMTBGOUEwQTc1RDIwRjAKKzoxMDIxMjAwMEU2RUI2ODU5NzM3RThFRjI0MUU0OEJGMjBBQTNEOEVFOTcKKzoxMDIxMzAwMDAwM0VGQTQzRTQ4QkFERDQ3MjM1NDZGMTQ1NkE4RTVFQkIKKzoxMDIxNDAwMDBERkNCOEY3NDExN0ZFREVENTVCMEZCQUYxNzlDRUNDQTYKKzoxMDIxNTAwMDA1RjhCMUYwMENDRjAxOERFOTkzOTcwRERGODNGQkNEMkUKKzoxMDIxNjAwMENGNTlDMzM5NzBCRjc5NEEyMDc1MTZEQzU3N0UyRTNEOTIKKzoxMDIxNzAwMDdDMDRDQUI2OUZERUMxQ0EwNUUxQTdFMUJFRjNGQzlGOUQKKzoxMDIxODAwMEZFRjI3QjU4MDYxQTFCNDI5NzVCMTJGQzlFNUMwQ0Y3MTIKKzoxMDIxOTAwMEVFODc1NkY2ODM3RTVGQTYzOTc3QTBCOTdGMTlDRUM3NDIKKzoxMDIxQTAwMEMyN0EzMjJEMDY4QzUzNjcyQUU3OTJDOTY0QzUzRjA0NzAKKzoxMDIxQjAwMDk5Njk0MDc3RDlBNTk4NTc2ODIxRDJBRTdFQTgxRkM2RTUKKzoxMDIxQzAwMEU0MkVBRDZGODNGQjdEREIwQjlDMkM2RTRFMTgxRjIwMjUKKzoxMDIxRDAwMEMzOTRCQzEzMTI5MkMxMUZENUVFQjQ2M0ZCMDFGRDZFMTQKKzoxMDIxRTAwMDk3NTFDOTVCNjNFM0JGRjcyQUJCMzc0OTNENkY0RDg4MDEKKzoxMDIxRjAwMDM4MUNFQzQ2OEI0NDYyQ0FFQTdERTY0NDEwODdDM0ZENzYKKzoxMDIyMDAwMEMzRUQ2QUJDNUEyOTFGQzhGNDhEMkE4OUIyNUZERTlCRDAKKzoxMDIyMTAwMDcyN0YzMUFDRjNFM0REMEZFNDgzM0VGNTVERTU3N0UyRjkKKzoxMDIyMjAwMEI0NzhGNUQ3QjE0QzhFQUM0OEZFREIxQ0UwRTNFRkYzOUQKKzoxMDIyMzAwMDM2MzdGODBGOTY2NkZBQ0FBMEJGNzk4RUI2RjE3NjhBNUQKKzoxMDIyNDAwMDNGOTNDNTRBRkMzREFBODlGMjZDMEVGODhBRkQ2NjM2QkEKKzoxMDIyNTAwMDNGRkI2NDJGMzdBRjM4RjIzQjU1RTkzRTAxRkRGNEM0MzQKKzoxMDIyNjAwMEQ3Q0Q4M0JFOUQ3RURDMkIwMjdDMUE0Q0UxMUM4MUY2MEYKKzoxMDIyNzAwMEYzODFDMzM3MDlGQTNEM0ZGN0MzRkIzMDhGNzBDODdCNEEKKzoxMDIyODAwMDQ3RTA1RUQ0RjdGNDVERDUzNkMwMjdBNzcyMEYzNjExNEMKKzoxMDIyOTAwMEYwMUM1MERGRDAxMTNEQ0FFRjZEQjFGMzQwMDU5QzEyMjgKKzoxMDIyQTAwMDg3MEQ0RTA2Qjk3MDAzNjE3ODBCNjVBOEJGNTFCOTg3RDkKKzoxMDIyQjAwMDZFQUFDOEVFOEQ5RDVBRTZDNERGNEY5QzQxQzIwMkUwNzMKKzoxMDIyQzAwMEMzRDRGN0JEMzYwMkY0NzFCM0FGMkNERTNEMUJFQTkzRTUKKzoxMDIyRDAwMDY0RTlBNTY4RkFCOTVFOEEyQTEzQzhCNzg4MkRGRjkzMDYKKzoxMDIyRTAwMDNCQjZGQ0NGMTU1RjhFOEMyRUQ3MDg5RTNCNjBEREFGRDIKKzoxMDIyRjAwMDczNENGRUM4MTM5OEZDMTE0OTYwMDVDOEM3MTc1QUM0MkYKKzoxMDIzMDAwMDcxMTg1Nzc3NzAzMjk0NDdCRjM2MDRGM0E4NDgxNkNCM0MKKzoxMDIzMTAwMEJGMTg2NUNCRjUzMzM4RTQ2RDg2NzU4NUE5OUNFRjcxRTAKKzoxMDIzMjAwMEMwRUZCMEIxRkJDNTMyREUzNzZDODVGQjIwODgyNDZENzEKKzoxMDIzMzAwMDA2M0FEQ0FENzc2MTlFNjk4NkE1RjY2NzZEQThDRjU4MzEKKzoxMDIzNDAwMDQ5MDFGMjI5NjkzM0UyQjVENTI0QzFFRjk2MUNCNEIyMzQKKzoxMDIzNTAwMEZDODlGNkI1M0E4QzM3NzEzNjkzQ0U0M0JGRTM3QjA0RTQKKzoxMDIzNjAwMDI2RkZBRDBCQUJBMTlFMkZBNzFCNDI2NTc1QUY5REZENTAKKzoxMDIzNzAwMEFFNUJGQjc4QTI1RjUxMEFGQkU2N0UxRkY1MjJBQjA5M0MKKzoxMDIzODAwMENGMjc0Q0I2QjlFRTgwN0FERTY2QzBGQjJCMEU1QUNCNTcKKzoxMDIzOTAwMDdEQ0E3ODA0RkE3RkNFQkExMERCMDM4RkQ2NTNGQUVERUMKKzoxMDIzQTAwMDM1MzNGRjNBNEZFREUzMTU2QzdDRkNGRDQ2RkUxRUEyNzMKKzoxMDIzQjAwMDhDNkYyMjA2MjhENzEyM0M2RkQwNkIxN0Q5N0NFRkQ1RDMKKzoxMDIzQzAwMDYxM0MwNEVBQUZDM0Y5OTlCMDVFQkRDRjMyNzJCRUI3Q0IKKzoxMDIzRDAwMDUyQzBERjIxRTA4ODEyMUY2QkMzRjI1MzBBMUY2Q0Q3NzMKKzoxMDIzRTAwMDhCMDcwMTRGRTU4RjA4ODFGRDk4NkNCQjgwNzRDMEVCQjMKKzoxMDIzRjAwMDZDNkVCQzFGQzg0M0YyMUQxOTg0RjkyQ0U4Rjc3Qzg2NkIKKzoxMDI0MDAwMDE4ODRGQzdCRkUxRTFCREFDREEwRjk0MEZENTBGODEzQUEKKzoxMDI0MTAwMEU5NUFGMDkwNzJDNTM1ODNFMzc5OEUwMjFFOEZFMDg4MDkKKzoxMDI0MjAwMDE3RjZFMzU0NDkyRUYyQTM2Nzc1RUY2REMwRkMwQThCRDMKKzoxMDI0MzAwMEQ3RThBNkUzMTg2RTIzQjhCRkVFRTRGOEU3N0FGNzk2N0MKKzoxMDI0NDAwMDMwM0ExREJDN0ZFNTU5OTBDN0MxRDkyQTI0NzhCNjVCQzQKKzoxMDI0NTAwMDJCMjQzOEE3RDQ2Qjc3Njc3OUEzQ0E3MUY2QzUwRjc4OTgKKzoxMDI0NjAwMDEzRDkxNzUzNTA1NzAyRkJFMTk2NDBCRkY4RkFGRTY4QTQKKzoxMDI0NzAwMEJEMDVENjIzRTFCQ0Y4MjE2RTA5RUNEMDdDMUJFRDg3QUQKKzoxMDI0ODAwMEYyN0Q3NzVBRkM3NTlDNTJENjExNTBFRTJERDRENkZGQjIKKzoxMDI0OTAwMEJFNDQ3N0E1RDdBOUMxQkY2RkI5Q0U4Q0Q4NzU1RUMxMzAKKzoxMDI0QTAwMDc5ODZCODJCMzA0RjNFODdDRUNGMTI5OTFGRkQxM0VGQTAKKzoxMDI0QjAwMDUxQkJDMUEyNDNGQ0JBNDFCRDFGQ0ExNTdCNEU0NDdCMzAKKzoxMDI0QzAwMDJFODQ5MEU1MUI4MUNGN0M1N0M5NzdBRDRBRkUxN0Y0NjcKKzoxMDI0RDAwMEUzNUY0RkY1N0M5MDZCN0RDOTNGQ0M4NzdDRDNBOTI5MDYKKzoxMDI0RTAwMDZEMUQ4QzM4NUFDRUNDMDM3RTZDRTI5MEVGREM0ODgyQjYKKzoxMDI0RjAwMDJCRTFGREI5NEFERjMzRjYzQ0U0RkI3RjJCMTkwRkY3RTQKKzoxMDI1MDAwMEU5RkE0NkE2RDJGMkM3RkFBRUZDQzU0RUU0OEIxNzgxQjMKKzoxMDI1MTAwMDJGNUE0ODE4RTlFRTA2RjhCRDQ2QTBCQkU5RkUwRTI4ODIKKzoxMDI1MjAwMEQzMzE1QUYwOUUzMDRBODc0MEI3MkExRDBFOUUzRkE1RjAKKzoxMDI1MzAwMDRCRkFGREQwMTYxQjlFREZEQTQyODI3ODAwMkY4Qjc0OTcKKzoxMDI1NDAwMDcxQ0NERkQyODI3MjhCNDhDMzIzRUJBNDQ0M0JENUQ0MzkKKzoxMDI1NTAwMDgyRUJGODc5OUI4Q0YyRTFCQkY2MjcwNTI4REY1Q0VBNzkKKzoxMDI1NjAwMDczOENBNUYzOUEzNUY2MTNGQ0JEMDc5MjM1NzcyNEQ4MDIKKzoxMDI1NzAwMDlENzRCRUU5NjNGRjgxRjMxRDdDQUVGRUFCRjNDOEZFMjQKKzoxMDI1ODAwMDVFRjZFODg0QjFCMUY2QTgyM0U5NkY5ODA3Mjc3MTM2QTMKKzoxMDI1OTAwMDM3QTFGQUUzODA3REFBMzc2MTVFNDJFNDFDNzJCODBFNkYKKzoxMDI1QTAwMENGM0I3MzI5NUU5MDY3RUEzOTY0MkRERjlENzQxREUzOEMKKzoxMDI1QjAwMEJCMUYyRkI2Qjk1N0UwM0Q5MjNCRDAyRTZEQkVEOUEyQkUKKzoxMDI1QzAwMDlFNTM0NkZEQUI3OUExNEUzOUE3Q0NBMTVDNjkyMjI2NkEKKzoxMDI1RDAwMEJDMjc2OUUwRjcyQ0U5M0YyRTIzRjJCQjM0RkJFMEJDQkIKKzoxMDI1RTAwMDcyRDk1NzlENTc5NkYwM0NCNEJDOUNDNUU5MDdFQ0JCMkIKKzoxMDI1RjAwMDQ2OTFEOUFGRUFFRjlCREM5QkFCRkUwRTA1RDM1MzE2OTkKKzoxMDI2MDAwMDkzNEJCMjZGRTM5QzYzNDZCRDkxQTRFODE0RkI5NUU5M0MKKzoxMDI2MTAwMDBCREQxMzI0NTEyNjE4NUY2NTdBRjg2QzAzRDZBRjRGOTMKKzoxMDI2MjAwMEYyRTNFRjA1RDVGMTVEODgyNDBENjNFRENBRkQwRjdFNjEKKzoxMDI2MzAwMDMzRkVBRTk4QzE1RDA4N0M0MjhEQjNFRUNFRjczNThGODgKKzoxMDI2NDAwMEE1RkIzNEFGRDg5M0MzRDFBNUQ0MTk1OEZDOTREMkMxRkIKKzoxMDI2NTAwMEU2N0VEQTZBMUE2OTc5MEU3RTZGRUU3QUQyRjI1QjVERjcKKzoxMDI2NjAwMDFFRDJDMUJERjBGREFDRDE5RkIwREZBMThCRDBDMTdEMkEKKzoxMDI2NzAwMDQwMDcyNkMyRkMwMTM3Mjg3MUEyRDczRkRFREUwMUZCRUUKKzoxMDI2ODAwMDdFOEUyM0VDM0M5QTRCN0IxRUNERkJDM0IxMkM5RUE1Q0EKKzoxMDI2OTAwMEZDOUU1NDJDREY4OTlBQzc3MTNEOUI4NzgzRTc3MTFFOEUKKzoxMDI2QTAwMDJCRTNDRDYzMTAxRDEyM0Y4RTRGRjdCNzA1Q0ZDQjZCRDkKKzoxMDI2QjAwMEYwNDgzQjFGNkVGRkZENzg5RTZGRjNFRDQ0RTQyNzgwRUEKKzoxMDI2QzAwMDFDRUYzNzAzM0M4NzAxNDZFNEMxM0E3REVCNjA5REQ5OUUKKzoxMDI2RDAwMDkwNjIwOTkzNTRFQ0VBNDFGM0U2MkRCOEFGQjdDRTFFRjEKKzoxMDI2RTAwMEM4RDM5OTkxNUQwRTcxMjIzNkVFNTNDOTRERUJDMEVGMDAKKzoxMDI2RjAwMEQxN0NCQjFFRjk3QkNERkUzMUE4QTdGNUM5NDYxMTkyNEUKKzoxMDI3MDAwMDIwQzk2NDk2NUZFM0E2RkY4Mzc5Q0QyMjlFMjk3NkRBRkQKKzoxMDI3MTAwMENGNEQ2MjBEREUwQjc3RjM3NDZENUU4RUZDNTAwQjZENEEKKzoxMDI3MjAwMDdGOEI5MkU3NzNFQkNERkFBM0QxRkFFNjM5RkRBMzdBNUEKKzoxMDI3MzAwMDgwODM1QzY3NjlFMTI3NDI3RjQyQTRCRDczMzA1QzA2RjkKKzoxMDI3NDAwMERENEJENUMxRjgxM0ExN0EwRUY0REY1RTExNDBGRTk0ODMKKzoxMDI3NTAwMDg4NEZFRDFEM0I3MDlGRENDODZGOThFRjczNzAyQ0UyQzMKKzoxMDI3NjAwMEVENTdFN0ZCNkM1N0VFQjE3QTRCMUZDNkZCNTFERjRFQkUKKzoxMDI3NzAwMDVGQjA3OTMxNURFN0M4MUYxNUUzRUYxQjRGQzlBODdGMzQKKzoxMDI3ODAwMDZFMkQyREZGNzhEMzI4MkNCRjlENzFGQkQyRjdBMEZFQjQKKzoxMDI3OTAwMEU5NDIyQzRGRDY3RDMyMDdFOEMxNTUzRUZCMDZGODVENzUKKzoxMDI3QTAwMEU4QjdDQ0FDOUZBQzI0NUY3NzBERkQyRUFCMjQ3NzFDMzMKKzoxMDI3QjAwMDVDNjAzM0Q5MTBDNkVGNkUxQ0RCNzgxNUY4NjMyNjI3RjIKKzoxMDI3QzAwMEIxRjJBMUQyM0Y4Q0MzNzJBRTUyMUVGN0ZBMjgyOEJGRDUKKzoxMDI3RDAwMEM1N0QzMjI3MUU1RjFDRURFMjgyNDU1NERFNEU0RTY1RkMKKzoxMDI3RTAwMERGNEYxRkY3RkMxMEIwRTMyNzU3QjFGMjY4NzdFNUVBMzcKKzoxMDI3RjAwMDNDQThENzdEM0EyNzlFQkU3NDU2RTFBQjkzQkUzOEQ3MkUKKzoxMDI4MDAwMDkxRTY4MEIwMzBGQkJERTJENzNDMUZFMkVGQ0I3OEE5NjgKKzoxMDI4MTAwMEJDODVGQjA2QkMxNTJDMEVFN0Y1OTQwQUYwN0I2NjU1Q0IKKzoxMDI4MjAwMDFFNTZBRUI2QjQ2NTAzMUY5Q0UxMzM5NDQxREM1NUI0MkIKKzoxMDI4MzAwMDM4M0I0NERBMkVBNUEyNzIzQ0VDN0IzNTU1QjcyMUNFNEQKKzoxMDI4NDAwMDQ5RTlFQjUzQTRBRkFCM0ZDOUIxQTE1RUFBRDI5N0E4QTcKKzoxMDI4NTAwMDQ3N0E0RjdDQUZFNEU3NkNERjYyRTk4MUY2RjcwNUNBOUYKKzoxMDI4NjAwMENGNkI2MkU1RTcyMDdBRDVFMEUxRkYwMDhCN0Y0MkM1QzAKKzoxMDI4NzAwMDAwODAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMjYKKzoxMDI4ODAwMDAwMEJFRDdEMEI3ODU0NDVEMjc2OUYzOTczQ0I3RDQyOUEKKzoxMDI4OTAwMDQyNDgwODg0MDlGNzRCQzAxOTEyMjA1QzFEMDI2NDU5OTQKKzoxMDI4QTAwMDA1MEMxNzE1MTRFMTA0MTAwMkI5OERFMEVFQTJFQjlBQTUKKzoxMDI4QjAwMDA5MDE0NDE3NzdFMzhBQ0EyQUU4ODA4MEEwQzgwRTBBNzMKKzoxMDI4QzAwMEM4NkE2NDQ3NjQyMzdFQkExQUFGRUJFRDYzMTM0NUU1MkIKKzoxMDI4RDAwMDRFMENBMkI4OUZGRkZBRDc1QjdEMEU5OTMzODQwNUJGREIKKzoxMDI4RTAwMENCRjNFQ0Y3RkMzRjNFM0U5RDNBRERFNzc0NzU1NTc1NDIKKzoxMDI4RjAwMDU1NzU3NTc1Q0Y1NUNFNEVFMTVGRTYwOTIxRkM4OTFFRjEKKzoxMDI5MDAwMDQ3M0U5NUJENkQyNzFBN0IwQkZFRjc0MzU3NTkyQTY5NDEKKzoxMDI5MTAwMDQyNzQxMEZBQkY5NTIxNDU3NDEzQTI5MzA4NzBCOTVFRjIKKzoxMDI5MjAwMEQ0MkE0MjE1NjJCMjU1OEJGNzBDMTJDMjZFNjk3MEUzNUQKKzoxMDI5MzAwMDc5MTdDNUQzRDc0NUNGNDVCRUM3NTlENDFGMkY3NjRBN0YKKzoxMDI5NDAwMEZFQTI5RjQwNTNGMUMzOTU0MjlDQjY3RDkyMkQ1Mjg1QzUKKzoxMDI5NTAwMDA4RDAwMzc1MzgzREY0ODlFRUE5RDQ4RjgyQTY2RUQ5Q0MKKzoxMDI5NjAwMDk1OTVFMDRDQTM1RkExQjg1QzY5RTg1N0Q2MkI3NTdGQkQKKzoxMDI5NzAwMEU1RjdENzM5RThGRDBDRUVCRjkzQTczREYwOTNGOEFDMkYKKzoxMDI5ODAwMDU3RkM1Q0JBODRGNkI4QTBGMTU1QTQwQkQ3M0Q1RUJDRTkKKzoxMDI5OTAwMERDQjgzMjRDRUZBNUQzODhFRkYxMTBCOEQ3M0NERTlBMDMKKzoxMDI5QTAwMDdDQ0ZBMjY0RjU0MjdDMkRDRUU2NTk2MUZBQ0UzNDkxRkIKKzoxMDI5QjAwMEU4NTFFOUZERjc5NjE2QjVGNzEyQjJENzA5QkYwREUzNTYKKzoxMDI5QzAwMDdEMjgyRTMxOTA0Q0NGMkJFNzI0MDQxREY0N0M2NzA3MjMKKzoxMDI5RDAwMDZEMDBFOEExNUEwMjJGMzYxMjdDQjNGMEQ5RDE2RUIyNDUKKzoxMDI5RTAwMEQ1NzcwNTlFQzcwQkY5QkQwQUZBREUzRDI4OUQ0NDhGQjkKKzoxMDI5RjAwMDNDODk4NzIzQTMwRDdBNDRFMTE5M0RGRTU2QkUzNDY0MTkKKzoxMDJBMDAwMEEwQ0MxMDdFODZEMzg1Njc5NURBQzY3ODg0RDU3Rjc3OEIKKzoxMDJBMTAwMDIzQkRGRjBCMzVBMUY2MUUyQTFGQjJGQTJDMUJBOEZGRkYKKzoxMDJBMjAwMEMwRUJCNkUwNjY4NUM3MjM4MENGRDI0RjEyMzYzQUIyRUMKKzoxMDJBMzAwMEE5QjQwQTg2ODVDN0MxRjU0QjZFMjZGQ0U5QkQyNTRBQjcKKzoxMDJBNDAwMDk2Mjc0MENGNkIxMkZDOEZFMTdCQ0RENTU2QjEzMTE1NjcKKzoxMDJBNTAwMERGRjc2RDAwRkM3QTc1Nzc4MUYxNDU4RjI3QkRGNkE3MEEKKzoxMDJBNjAwMDQyNEJBMTdBQzVGRjA0REEwNUFBMURBRUNERDRFRURCMzgKKzoxMDJBNzAwMEQ4N0ZDQ0REQzg3NDQ4MkFCMjY1MTExQzMzNjk0MzIzNjIKKzoxMDJBODAwMEMxOEFEREU5NTI4ODY5RTk3M0QyNTk1RUQ3REU0MjdDOUEKKzoxMDJBOTAwMDIwRkUwNTBBNDJEREU2MDNFRjQ3NTU1MUUzOEFBNDAzMTEKKzoxMDJBQTAwMDYxOTJERDJBOUZFQjNENDRCNEY2OTA2MzgzMUUwMTA1REQKKzoxMDJBQjAwMDcyNjlCNzI4QjM4QkUyODkyNkY4Nzc2NTZCQjlERTYzNTQKKzoxMDJBQzAwMDExODJGOEQ0M0RCRkEzMEZFMzVFRTIxNTFFQzgwRkQxRkIKKzoxMDJBRDAwMDQxMDFEREM1NUU0NUE3MDNDOTEzRUExNTk3M0ZFMEJBN0EKKzoxMDJBRTAwMDkwNEY0QjFCQjM2RjQ1RkQ3RTBCRTE0QjY1MDFGMTJCMDYKKzoxMDJBRjAwMDA1RUZDN0E5RjI3REM1RDMyMTk5RkEyRjQ4MTJGRTEwMjAKKzoxMDJCMDAwMDk1NEI2MkRDQjc0NkQyNzVCOEM1MzJCQjI4NDc3RUNGM0QKKzoxMDJCMTAwMDQ5RjQ5QkFEQ0YwNjAzQ0YzOTZCNTVBMUU1MEEzMUM2MDkKKzoxMDJCMjAwMDM5RjdCMUMzQjlDMDc3NTg4N0EyODQ4OEZBN0JGQUU0MzEKKzoxMDJCMzAwMENDQTFGNzVGQjY4OUU5RjhCRTY3N0ZFRjlDRTIxQzFFNjcKKzoxMDJCNDAwMDg3MkY5NEMzN0M1QzExMDJGRUEzRDMzRDAxMEZGMDZCNzEKKzoxMDJCNTAwMDVFRTEwMTdFQUE2OERFRUMwMTFFMDE0NzE2RjA4OUM5MUMKKzoxMDJCNjAwMEY0MDQwNEYwQUMxNUI3RTU0NUUwMUY0M0Y4MDNCRjNCQTAKKzoxMDJCNzAwMEM2RjkyMkM3NkRFMDdEMzEzQ0EzRTk3RDMxM0MyMTM5QTYKKzoxMDJCODAwMENFQzE1NEFGQ0JDRDFDNjc1QzkzMzIwMEE1MUE3NjkwQjIKKzoxMDJCOTAwMDg4OEE1NUQ0QUYzMzUyNUY0NUM5QjkwODMwREYyNzJFMzQKKzoxMDJCQTAwMDFENTM3NDk4RTQyREQ1NEU4RjIwQTdCNzI1MDQzNzEyRjYKKzoxMDJCQjAwMEZFMTM2RjFCQ0RDRjk1MjlFNzU4OUVEQkQxN0M3NDUwNTcKKzoxMDJCQzAwMDM5NjZCQzVCNjkyNDNDREFFNUJENjUxNUZEMjFBNzg0NDcKKzoxMDJCRDAwMDE3RjBCMTM2MEU5QTRDRjQzREQ2NTU3QjEyRkFDNkMwQUEKKzoxMDJCRTAwMEZGMkY4MzlFRjA2QTU0N0ZDODIyNEE0MjM5MTc4RTZGQTYKKzoxMDJCRjAwMEI3MkU0RjJFRDE2ODg3REM1NTM4RTNDM0VBODAwQkU1NEEKKzoxMDJDMDAwMEU1NjJGOEJGRDhBMUU4MzlFODhEOTM0QUMzNjA1NDU2MEQKKzoxMDJDMTAwMEY2NzZGMTczMjFCNDZDN0MyRkQ5OTUzRDNBMTk3QUUyOUUKKzoxMDJDMjAwMDdCRUE2RjMwRjQxNEZEQTM3OUQwQjdCQkY2MjdCQzc3RUQKKzoxMDJDMzAwMEJEMjgxQTY3QTVGMUI2MUJBRkQ5MzQxQUQ3MzgzNTlFMEYKKzoxMDJDNDAwMEU3NzNDQjc2ODVGNUQ1NTg1RjhDMDU3NEE5M0M2ODBCODYKKzoxMDJDNTAwMDA2MDk1RUZDQUFDQTc0NUFCQzVFMEQ2MkQyQjYwOENGRTEKKzoxMDJDNjAwMDVBQ0NDMzk2ODBDMzA1Qjk3QzI4NkVDMDZGNDc1MEY5MTMKKzoxMDJDNzAwMEQ5N0E5QkM3ODE3RTAzQkVCNzdCNTNCRkYzNzQzRUY1MDEKKzoxMDJDODAwMDVBNkIxMTZFODMyRkY0N0Y5RjYwQUM3MEY3NkU4NUZCREIKKzoxMDJDOTAwMDZENkQ2NzgyRkI4NzNBOUFEQTVGQjFCN0FCQTlERTFCMkQKKzoxMDJDQTAwMEVFNkJBQUNGM0QzOEQwMDQwRjZBMTg2NjZBM0ZFNDgzMDIKKzoxMDJDQjAwMDAyMTMzQ0I0RjEyQTUzRkJFMTQ3QTY5OEUwOTFDRDM3Q0IKKzoxMDJDQzAwMDk4REE1Rjc5NkU4RUE5QkUzNEIxQjA3RTI5OERCNzNFOTkKKzoxMDJDRDAwMDVEMTUwQUQ5QzlEMUEyRDRENEJFNTQyREIzMEI2MkIxQUIKKzoxMDJDRTAwMEE4QjU3RDBBNzlGNEQzN0ZDQzRGNzVBNjE1NzQzRUJCODkKKzoxMDJDRjAwMDU3MTEyOUE0OEYxNkFDOTVGNUM2N0IyNTc1RjdBRDg0QzEKKzoxMDJEMDAwMDhENUIxODM0M0YyRjE1RDY1NjE4RkFGNzkzODU2RjFFMzIKKzoxMDJEMTAwMDg4RThBRjU3NkFCMTI1OTlDQUJGN0IxMjUyMjEyRjYyNEEKKzoxMDJEMjAwMDg4MThGMjgzQ0E3Q0Y1NDBERkI0QkNBQjdBMUM0MjM3MEEKKzoxMDJEMzAwMEE1MDQyRjdFNUEwOURFNDM3Q0VDMjk3QTNDMDRCRTExOUYKKzoxMDJENDAwMDlGNDVEMDBEQkVDQUZBOTY3NTZBMzA0MEZEN0M1QjU1MzIKKzoxMDJENTAwMEYyRTYwMTFCQzEwNzczRDc0MjJGMkYyMEJEMENCREU1NDIKKzoxMDJENjAwMDQ4MzdGMzMzQzY2REU2Njc1QzZGMzMzRjEzM0M2NjdFQ0UKKzoxMDJENzAwMDI2RTU5QkY5OTlFQzMzRjMzMzY1QkM5OTlGRUQ4QkNDMzkKKzoxMDJEODAwMEZDRUMzMEREQ0NDRjBDQ0RDQ0NGQ0MxMjMzM0YzQkZCQjkKKzoxMDJEOTAwMENERkNFQ0IyRDRDQ0NGRUNDMDIyNTM3REI0RkM3NjVCM0UKKzoxMDJEQTAwMEI1RDg1NEZGNTBEQ0JFMkYzNEEyNDM2QTQ3RDVFNUEwMDYKKzoxMDJEQjAwMEE5RDdBM0Y2NzZEM0Y3ODQzQUMxQkU4MkU4NTU5QUE5N0IKKzoxMDJEQzAwMDBBRDVENTJBMDcwMUZBNEZDRTZCM0ZDRkFGRjkyNDA3QkEKKzoxMDJERDAwMDBGMTMxRkNFOEFENUY1OTlFRTBCRTVBMTYyRUY3RDc2MzQKKzoxMDJERTAwMENDQ0YxRjJCMEZDM0JENjYzOTIwQjk0QkQyREFCMDZCRTUKKzoxMDJERjAwMDQ2NjlGMDk5RkM5MUQxNUVEMjBGRDNCQ0RBNTgyRkU5MjUKKzoxMDJFMDAwMDkzRTlCREJFQ0FCMjkyREUxMDQ1QzVCRDYwNDcyRUM3NkMKKzoxMDJFMTAwMDRGQjEwRUZFMTE3RUNBQTQxMERCRTM4QkZBMjlFRUNFNzEKKzoxMDJFMjAwMEFERkE4RjlEQkY4MDA1N0FGOUMzNzkzNjk2REY2NTcxNUIKKzoxMDJFMzAwMDAzQjY0MzJFM0ZBODkxNzI3OTA2NEQ4NjBBNzE4MzA4MjYKKzoxMDJFNDAwMEIxMUZGNjYxRUMyMzlERDE1RjAxMTE1QzE5OEFDQURBQ0EKKzoxMDJFNTAwMDlCODBGRjRDRTA0RkY2RUMyNkQxNjhDM0M3Qzk4RURBRTEKKzoxMDJFNjAwMDUxMTYwQjM3OTc3Mzc1RkZFQzY2MTE1RTg5QzE3QzkyMjIKKzoxMDJFNzAwMEFBQ0QwNzVEMkE1NEFENEIxQUU4RDFBOTIxOEJGREQ4MDQKKzoxMDJFODAwMEQ3NTM4MEY0NDVFOTZBRThFQjc3RjAyN0I1N0JDNDVCNUMKKzoxMDJFOTAwMDU0ODFFRjhDNzFCQTZGN0RDMDBEM0Y4MEVDMDNGMTQ1MUEKKzoxMDJFQTAwMDRDNDg2MUJDODVCNUE4RkY5NEZFNkQ3RDY3MTlEQjhCMkUKKzoxMDJFQjAwMDE3MTQ0RDAzQkQwMzE5NEUwRkVDQUQ0ODBGM0RBM0QwQzEKKzoxMDJFQzAwMEY4RkFCNjczMEZCQzI3QjlCNUZEQUZCQzg2N0QyMUM3MzQKKzoxMDJFRDAwMDg2REEzRkI5MkI5NkU5RDVBRkMzODY3NjE4RDc4RkVENDIKKzoxMDJFRTAwMEY3NkVBRjZGMzlGMDM2REE1RjZBQkM3NkJCNjdEMUNGNjkKKzoxMDJFRjAwMEE4REY2NjQ1RjgzNzEyMTJFRkVBN0NDOTc0NDgzRjMxMDMKKzoxMDJGMDAwMDUzNERGNEQ0ODA2RjcxQjNFQURCMTMxRDZFRURBMEZENTkKKzoxMDJGMTAwMDBFREY5RjdFRkQ0RjU3MDI1NkY2QTdCODE3MTM3RUE3MDgKKzoxMDJGMjAwMDhCMUIwNzAzNUZBMkZGODNBODJGNzMxMkZENjk2ODI3MUQKKzoxMDJGMzAwMDNCNkJCRDkyMjAxNDQ1OTJGRUY0NDdGRkEyMzZGMTk3RjkKKzoxMDJGNDAwMEY4MUNEMEU5RkY2MjA3RUQzMUM4RjU3RTRCNDM5NjA3QzgKKzoxMDJGNTAwMDdDQjQzNjBDNjYzRUJBRTRCODRFREEyNTVEMkU0Njg3NjAKKzoxMDJGNjAwMDgyQjhDRTMzNDFGRjc5MEU4NzQ3MjU3QTE2MjhGMkJCMDcKKzoxMDJGNzAwMDg3OTM2NkNGQUEyNEJDNkZCNjE0QTU4NTU1MTNERTRGODAKKzoxMDJGODAwMEEzQkZCMkY4RTIyRTE5QzBEQkE2RTNFRDZDQUZEM0REMzAKKzoxMDJGOTAwMDlEMTNFOTlGNDVFMzVEODNFRkMzMUZGRTE1Rjk5N0Q5QTQKKzoxMDJGQTAwMDc4MUVERTA2RjgzOUUxRTJGNThCQzMyMkVENzI3M0I1QzcKKzoxMDJGQjAwMDEyREM0OEY1NkZFQTc0NUU2RkEzNzY5ODk3NEVEMUFFMzcKKzoxMDJGQzAwMDlBRjBCQjY2RTQ4QTBENjhGNzZCQ0RDOTc4NkYxNjlFRTAKKzoxMDJGRDAwMEJFNkJCMkMxMEZDMUZBM0VGMzJFMjU1ODkzMERCRkNBODYKKzoxMDJGRTAwMEMzNzIzRjRGMTQ2NUVEQTI3NkFGNzlCNTdBRTBGRkI3QjMKKzoxMDJGRjAwMEI4N0YwQ0NBQjZGMDM0MUVGNDJFN0Q2N0NGQjIwRTlFOTkKKzoxMDMwMDAwMDdCMDA4REI4M0NGOUVGNEQ5QTAzRkQ0Rjk5MjhFRENFMkEKKzoxMDMwMTAwMENEM0FEREE2ODkyMjlFQTdDNkJBODkyNkZDQzkwQTZBQ0UKKzoxMDMwMjAwMDM3OURGRUUyRjU5ODcwRjcwNzdFMzMwMDdCNUJFN0Y1OEUKKzoxMDMwMzAwMDRDRDFDMEU1MkNFMUUyRjVENERCRDUxRDdFNzYxQkI1ODUKKzoxMDMwNDAwMDk5NjI2OUNFQjJBQjk4QTczNDZGQjM5OUZFRkYwRUI5RkYKKzoxMDMwNTAwMEY5NjZEQzVCODcxNEQwRkQwRUQyNjNFMEY3OUFGNjk3MzEKKzoxMDMwNjAwMDI1Qzc5MzE1NDk0RjlBQjc5RkVCRjMzNjBGNTNFQkZDRTcKKzoxMDMwNzAwMEZDMTlEQjVFQ0E5RkQ1RDVFMzlGQ0QxRjUyOEM4OTE5MDEKKzoxMDMwODAwMEU0QUZGRjQ0QUE0MkYxRDA5OTQ0OTE0QUUzNkNFOEFBMjQKKzoxMDMwOTAwMDA2QjE5RTFBQTdERTYxREQ0NUUzNkMyMDdGQzI4MTcxMTcKKzoxMDMwQTAwMEZCOEEzQjlFQTZGQUYxNjQ2RkVGOTFGQTM1MjE0MEYwNUUKKzoxMDMwQjAwMDI0OUYyQUVFNjEzOTY4NUNCRTkwOUVCRjlFNEZGNUQ0NzYKKzoxMDMwQzAwMEZFOTU2QTkxOTA0N0YwMkI1RTlCQTc4NkU0NzBEQzM5RjEKKzoxMDMwRDAwMEVENDAxMjk1OTM0OEVGODdBOUY1NTVFOUY3OEQ4NTdGNjcKKzoxMDMwRTAwMDMwQkUxM0Q5OTEwODNCNzE1NTc3MzM0QzEzQTExM0Y4QjcKKzoxMDMwRjAwMDc0QjU0RUVGMDkzOTY2QkIzMzA5NzZDNzY4REY4NkRERTQKKzoxMDMxMDAwMDIxRkRBQTgyQkU3MTAzNzVGQkQzNTdGNDg1RkQ3OUI5MDEKKzoxMDMxMTAwMDZBQUZGODhDRUM4QjYxODdDNjA4QjlERUI4OTgxREIyMkYKKzoxMDMxMjAwMERBMEI1MjA2QjIzRkVCQjY2MzdFQ0NDMUZBMDRGNDc2RkEKKzoxMDMxMzAwMDY5MUQyNzQ3Q0M5N0QyMjEwQUYzQzk0RDg2Qzc0MkUzQzAKKzoxMDMxNDAwMDdGRjNBMDFBMDQ3REFDQkVGMDcwRDA2RkYxOEIwQUNCNzgKKzoxMDMxNTAwMEU5RDUwM0I1QUM4MUM0ODc1M0I2QzZGOTkwOUI4NjExRjcKKzoxMDMxNjAwMEI5NDk4MkZBRkZCNDhBMTBFOTQ1RjNCN0NBMjk3QzM0MTkKKzoxMDMxNzAwMDE3QkVBODcyMzE3Q0E0MkE5RENCNjM1NTZFMkU0RjU0ODYKKzoxMDMxODAwMEY1RTZGQTUzNTUxRTg2Q0IwNzE2RjUwMjdFNzM1NjdEN0IKKzoxMDMxOTAwMDY1ODU5RkVGMTY3RUY2OEY5NkQwN0ExN0ZDNUE5MkIwMEYKKzoxMDMxQTAwMDU4QzIzNkE3MEI0QUY4QUVDRUY1OTYzODgyRUYwQTJBRjcKKzoxMDMxQjAwMDFFRDhDNTg1QkI4MjJCRTMwOEFGRDIzQTlGM0Q5RUUwNjcKKzoxMDMxQzAwMDI1OUREQjhEODk0N0ZCMDcxNDk2RkFGOTA3RkRGNTE4NTUKKzoxMDMxRDAwMEVFQTk3NzNGQkQ2RUEyNjgxRDZGRjkzOTg1RDdDOUVGOUIKKzoxMDMxRTAwMDBGRjIwRDQ2RkY1RjU2RTUzMzVFNDdBQjdDOEM5N0FGMjEKKzoxMDMxRjAwMEFFQTkzRTg1QkU3N0JDNkEzQ0MzNzcwRDJDMUE4MTcxOUYKKzoxMDMyMDAwMEZCQzQ1N0VDNDc0Q0RDREU2NDg1OUYzMUNFQTdGOEMwODkKKzoxMDMyMTAwMEU3NTEzRTExMEMxMkJERDZEQUE0NUQ1OTRCNzYwNTdBMDIKKzoxMDMyMjAwMDYwNzRGRjI5RUI2RjE1RDBGQjVBMjFERUJGQjZERERDRTEKKzoxMDMyMzAwMDcxRjA1NzI3RTUxN0IzRkY3QUZERjc4MkZENTc0M0ZFN0MKKzoxMDMyNDAwMDJGMzU4RkRDQTJFMTU0MjZGNTc3MzIyMEU5RDNCMkVCOUIKKzoxMDMyNTAwMDFEODY1QkFDNDQxRjFBRjFCRTVEQTVBNTgyRkM4Mzk2NUEKKzoxMDMyNjAwMDczNkZDQkU3RDQ4RUZERDREREIyREQ2MjlCNkNCNzc4OTMKKzoxMDMyNzAwMEY3QUZEQkY5MDAyQkEyNTk0NEFDQjc4RTEzMUY4NTIzOUYKKzoxMDMyODAwMDAyN0VGQTE3RTk1QTg0N0MxRDZGMTdGQUU2MjNFOEM5MTMKKzoxMDMyOTAwMDdGQjc3ODM2QjI5QzZBOUYzRDBGM0RCQURDQzU3QUU2QUYKKzoxMDMyQTAwMDk0MkRGNEM1QzNEMEIzOURDOUFFNzJCRDNGNkUwQUM5OUIKKzoxMDMyQjAwMDU5ODU1RDY4MkM3NzQyRUIwN0Y4NzhBQ0UwRjgwMEZBQTYKKzoxMDMyQzAwMDczRjc5MkNGMjE4RjNENzczQ0Q0RjU5N0VFRDZGRUI2QkIKKzoxMDMyRDAwMDNDRkRGQjk2RTdEREE4MEZGMkZDREZCNjYzN0RDNzQ3MzgKKzoxMDMyRTAwMDA4MkFEQkI5MjIxNjc4N0Q3NkVGNzM5OTE4NUYyRjU1N0YKKzoxMDMyRjAwMEY4NTU5QTY3NzM3RkYzQzdDQzNGNTJGRjRGOTA2RTQxRUEKKzoxMDMzMDAwMDFDRTMwNTlCRTdENDVFRTBCMzlFRjBBMUVGM0M3MTZGMzgKKzoxMDMzMTAwMEY5NDBFOEI3NzlCRjVCRDgxN0VGMDcwNjVBOThBRTRGNjgKKzoxMDMzMjAwMDNEQjc5M0VEM0ZDOTk4NjcwQ0U5QTlGRTZCNUU1QTk2Q0QKKzoxMDMzMzAwMDQxRURBRjU4RDc2NEU5NDhBNTc3OTM1MjgzQjI3NEZCNDcKKzoxMDMzNDAwMENFQjdBQkE5QkY1Qzk3QzUwRjdGNzRDNTQwMzdCRjNGRjEKKzoxMDMzNTAwMDMwQjQ2MUEzMDJCREZFRkRFMzFEMzFDRjcyRDY3QzU1QjIKKzoxMDMzNjAwMEQwNTE1Q0RDNkY3ODJBRUI4Mzk2NjIxRTU3MkQ4RjZCRjEKKzoxMDMzNzAwMDc3RERENDc3NkUxNEYwNEJDODIzMDFCRUM1NzYwRkRCMjIKKzoxMDMzODAwMDI5MUFCNjBERkNERUQ1NkQwM0RFREY2MzA5QjBGRDA5MzkKKzoxMDMzOTAwMENDOTE3RUNCQzlBMkMwRUYzMUZFNzI2QTFGMjBCOERDOEYKKzoxMDMzQTAwMERCRDA3NDFCRDU5NzI3NzcxNTg4M0IxQzA5MkU5OTgxOTQKKzoxMDMzQjAwMDdBOUFERTJFRDBBNzYyRDcwMzg1MUQwOTNFMzk0Mjc4NUUKKzoxMDMzQzAwMDE0RUFCRjY0Rjc5OTQyQjY2RjlEQzlGN0M2Rjc3NkQ1ODAKKzoxMDMzRDAwMEE0REQwMEZCOTY1MzMwNDhBNUZBMjIzNUM0RkQ4OTRBODYKKzoxMDMzRTAwMEQ5NUY2NURENEVBN0UwRjVCQzY4QTc5MjIyNENBRTFCMDUKKzoxMDMzRjAwMEZENzI2NjA0N0YyQzhEQkZDOUI2RDJGN0RBOTM3RDA0QzcKKzoxMDM0MDAwMEJFNkJCMzAzMTlGRUY4NTY3QkZBOUFCNzY4MEJFQjIzMzEKKzoxMDM0MTAwMEQ3RkRDNUY4Q0VFNzg0MTdGQ0FEQ0JCNTdGNzY4QjdGQTMKKzoxMDM0MjAwMDIxRTM5MzJFNUM4MUExQURERkVENkMwOTJGQzQzODQ4RjgKKzoxMDM0MzAwMERBNUQwMUZBQ0U2NjU3QzMwQzZFNDdGMDZGQjk1RjZENjcKKzoxMDM0NDAwMDBGRTY1RkE2NEE1NDRGOTVGNkJBMDZGREJBQTY2NjgxMDYKKzoxMDM0NTAwMDVGOTdEQkZGNDM3MUZGNjBCRkFCRDI5MkU4NzFFNEI1QzkKKzoxMDM0NjAwMEZBMkREMzUzNkE1RTZDMjQ3RTZERThBMEVEQzdGODhDMEMKKzoxMDM0NzAwMEI4QTRCMDdBRENEMEUzODEwRUJFOTdGMUJDQ0M0OTc2MUIKKzoxMDM0ODAwMEQ1QzJGNkY0MTVDMDg2MUY3Q0RFMEY3MzVFOUUzRERENEYKKzoxMDM0OTAwMEQ5QzFGNzE3QTZFMzY1QjY3N0VCNzE4NkYzN0FGNUVDMzkKKzoxMDM0QTAwMDQwOTM1RUFENDlCMDBCMkYzREFGNTlFM0UwQjg4NDM4OEYKKzoxMDM0QjAwMDYwMjlBQkE3RjVDNzQ4N0NDMkQyRkFCRDI1MDkwMzNCRkEKKzoxMDM0QzAwMDQwREZENzA4RDEyNkJERjZEMTdDRDY4OEI2NjFCMjAzREQKKzoxMDM0RDAwMDFBQ0RFQjUxRTc5QTU1OERFNzdEQzNDQjQ5NzlEMDlGNDMKKzoxMDM0RTAwMEMyOTdFMDQ2MUNDMDIyQjQwODdCMTdGRDFERTJENzA5MzUKKzoxMDM0RjAwMEYwNkJCNDg4MTM1QTg0RERGNDg5NjQzQkU2QUQ4ODZGQzEKKzoxMDM1MDAwMDc3OTlFMzBFM0Y2RUI2MjdGQjFGOEYxQ0Y3ODg5NjBGNDcKKzoxMDM1MTAwMEUyRTA1MjExM0QzQUEwQkNEOEI4NUVENEM3RjUyNzhDODIKKzoxMDM1MjAwMDhCQ0E3OTQzOEFGRTAxRkM0NjdFRURCMjYyN0MyM0FERjQKKzoxMDM1MzAwMDkzQjNCQzVEMTk2RjZCMkVGNTNCRUE2QjhCMTlFRkVGMDQKKzoxMDM1NDAwMDYzNERGMEU1RTJGRjMzODUxNjZBOTBFM0FGRUMxQzE3OUMKKzoxMDM1NTAwMEFDODNFREE3NzFENDJEQ0MwOTYyQkVFRkIxOEI4MDEzODMKKzoxMDM1NjAwMEVCOTgyOTc2RjY2QkVCMTIwMjA5N0Q1MUFGQjg0Mjg4RDEKKzoxMDM1NzAwMDI3QkQ2MDZCOTgyMUQ3MzlDMkI1RDkwQkY5N0RFMzExMEUKKzoxMDM1ODAwMEM4RkYwRDJENzYwNUYxQTk4RTBFRjEwNUZDMjVBMTI2QUIKKzoxMDM1OTAwMDg5Q0RBOTExREY2RkVGRTJCODg1RUFDQzVDOEZCODYyMDQKKzoxMDM1QTAwMERENTBGREY5MEMzQjNGQUZCMTA5QjY3QjgxMTlCMThDMDEKKzoxMDM1QjAwMEQ3OUE2NEZGNkJGREE5N0U0REI1OEM2NzdFMjA4MkFCRTgKKzoxMDM1QzAwMEJBQTJGRTBFOTVFREMwNzBDQkM2Q0QwRjYyMUQzMzM5ODkKKzoxMDM1RDAwMDlERURDNjlBRTQ3MDY2MjVEQTJGRUNFQjA5OTAzQ0VDODEKKzoxMDM1RTAwMEY5ODdDQUY2NjA4REQ3OTdEMTJFMUU3QTUwQzYwNUQ3QjcKKzoxMDM1RjAwMDRDRjY2NUM0QTZBMjRDQjM2MEJDMUQ0OUNGRjNGMzZDNzYKKzoxMDM2MDAwMDZBNDdFNTQ3MzZEOUVFNDM5RDZGNDRFOTBDRThEQjg3MEUKKzoxMDM2MTAwMEU3RjUxMEQwM0Y1N0U3MTY4Q0NDNjVGRjQ3QzYzQkFGQTgKKzoxMDM2MjAwMDk1MkMxMDMzNkU3RTgwRTNBRDBGNkI2QTUwQ0QwNjVEMzYKKzoxMDM2MzAwMDdFNzM2RjRGODI2Rjk4QTNCQTEwNzdCQkI2MjQ4NkUzNzAKKzoxMDM2NDAwMEExRDc2QTdBM0M3NDlBMzkwRTdCNzVBRTZGNjQyRUYxRkQKKzoxMDM2NTAwMEJGM0NENEE3REJFMTA4Mzk5RTcxNzM4RjlGNDMzRjdDNDkKKzoxMDM2NjAwMDJBNjQ1Q0ZBRDc2OURBMzhCNDEzN0JCRERDNkUyRjM5NzMKKzoxMDM2NzAwMDJCM0ZDMDRFMzhERDAzRDg3RjlFNjdBQzFCQzM3MzQxMjAKKzoxMDM2ODAwMERGN0RDRDRFRjY0QjJGMjYwRjQyNzg5QzdERTlGQjBGNTgKKzoxMDM2OTAwMDVBNDQwOEYyREMwNUZDNDk2MUI5MERDMDZGMEI4NDYyMjUKKzoxMDM2QTAwMDU4MEVDNjRGNzE3MjdDQkQyNURFQzJGQjBDOEYxMUJGNTgKKzoxMDM2QjAwMDYwREYwMkJCRTUzRTAzMjk0QUU2REY4M0ZCM0FCMzVERTgKKzoxMDM2QzAwMDlBQURFQkIxOUFFOUIxRkM1RUNENEU1QkQwMDIzRTJCRDgKKzoxMDM2RDAwMEMxNkQ1QkYwREU4QjMxNkMzRkNCRjQzODZGRDlGM0ZERkQKKzoxMDM2RTAwMDU4MEVGNkQ4N0REOTJCRDBFRjNFMDdGM0I5MkNEMTlEREIKKzoxMDM2RjAwMEM0RjVGRjk2MjI1MEZGODIxRTc3MkU4QjBERjc0NDNDQjcKKzoxMDM3MDAwMEJCNUI3QjZEM0VFODQxNzJDNzcxRjkzMkJCN0M3RTI4QTIKKzoxMDM3MTAwMDU4QzBGQjFBODJGQzk1Qjg1MTA0MEIxRkVGNEYwNEM4MjgKKzoxMDM3MjAwMEFGRDlFQzkxRkMwMzVFNUE0REU3OERDMDU3MjMzQ0MwRTYKKzoxMDM3MzAwMDY3NzFCQjhDOTcxRkEyQjk4Q0YxMURGMjc3NjZCQzk0QTAKKzoxMDM3NDAwMDI5RTMzMzZFQTZGQUNGMTZDNzcxMUNGNTUwNTFGRDU5MDcKKzoxMDM3NTAwMEY4MDE4N0QyNTU5RUY3QTRBMUVFMUQ0MkY1NjQ3MzFCQjQKKzoxMDM3NjAwMEVFMjFCODcyRTFBNzZGMENBMUE3MTUzNTFGNjZFRDc1QTQKKzoxMDM3NzAwMEI3RDI3REU2QjJGMjA5ODJFNDYwRTZBMjNCMjY4OUM0QjQKKzoxMDM3ODAwMDhCQ0ZENzk5NjUwRUFDMTE1QkU3QjdCMDYzQjEyNjYxRkIKKzoxMDM3OTAwMEQyRUI2QjcyN0QzNTkwQzM1MEFFQjYxMkUzQUZDQzIxNDUKKzoxMDM3QTAwMEZGOTlFNEU4OTRCREUxNTFDNDQ5OEVCQUI1QkI1MTdGOUQKKzoxMDM3QjAwMEZBOEY1RjZFQzE3MzYxNkRFRUM5RjJFMTZDMkM0NDlDQUYKKzoxMDM3QzAwMEE1Q0MyMkUzNDRBM0YzQjRERkU2QjI5RDRENjRGRTU1REQKKzoxMDM3RDAwMDg2MUNDQ0JGQjg5QzA2QTkxN0VGQjgzQzdCNzBBQzZFQkEKKzoxMDM3RTAwMEYzMUU4NUZBMjk4REFEQUJFMDUyMEQwRTgwQkQzQUFFQzkKKzoxMDM3RjAwMDg0MTM5NTZFNEM1RjBERjNFQTg0MkI5QzA4RkU2ODE2Q0IKKzoxMDM4MDAwMEU5QkY5NTZFOEQxRUE3REM0RjJDQzUxRkJDRUUwQ0Q5RjEKKzoxMDM4MTAwMDg3MTM1RThCNDhGNTNFRUNDMjczN0I2QkZCRUM1NjNFMjgKKzoxMDM4MjAwMEQyNzc5ODhGMjJGRTkzNTlCRjQ0RkI2RDdEMDZERTQzMEQKKzoxMDM4MzAwMDc0MkY0RERFRkI5QkUxRDkxN0QyMkYxQTM2QzY3MzIxQTgKKzoxMDM4NDAwMDNFRkEzQzI5MEEyNzYyOUUxQzU3RTQzQzM5MjFBNEZFMUIKKzoxMDM4NTAwMDBBNkM4REQxRDdGRjEyOEY1MzdGRUNDMDc4QTRFOUYzQTcKKzoxMDM4NjAwMEU4OTRBMkI3REJFNjkwRUQ0OEY2RTBDRjk0RkU0MUNBQkIKKzoxMDM4NzAwMEREODMzNkNGNUFCOUFGNjY2NTdENTk5QTIyRTE1MjQ3NEEKKzoxMDM4ODAwMEJBMEJGRTU2NDczNTYwODk4NTVDNTYwOTlFMkY4NDFCMEUKKzoxMDM4OTAwMENGQ0JFMzNCMzJGOTdENDNBRjg5MjIyMUEwRDc0QTc3RDIKKzoxMDM4QTAwMDY0NkM5NDdFOURCRTBFQzYwMEE4RkRBMkE3NjQ3RjgwQjYKKzoxMDM4QjAwMEExRkY4RjNEOTlBOUY3MkZFNzUzMzQ1RkEzRTlGMDdFNkQKKzoxMDM4QzAwMEFFOEM1QkQ1MjQwQ0VFRjBDRkUyOTVCREQzM0Y1RTA3MDYKKzoxMDM4RDAwMDE1RjRBMDREQ0VFQjQwODJCNDIzRTRCN0E0NEZFRThGOTUKKzoxMDM4RTAwMEZEMDZCQkU5QkJBNzEyRUNCMzdERjFEODc3MzAzRjM3QkIKKzoxMDM4RjAwMEJFRjc2OUFFNUM0Nzc2ODlFMjdCNDdCNUY5MjVGODRCQTAKKzoxMDM5MDAwMEUyNzFDMTdBMjIxQThGQTM3ODhGRjA3REYyQzlGMzdDMUQKKzoxMDM5MTAwMDU2MjVERjQ5OTAwQ0Y5NzIzM0ZEODQwREZDRjlEMDZFMDkKKzoxMDM5MjAwMEYwRjFENjRDRDJFQkE1QTA1NUQ3NTYzQUVFRjE2QTk5RjQKKzoxMDM5MzAwMEIwMjNBN0Y0N0RBMzNEQzkwNEU3QzBERjkyRjZDMzgwOUUKKzoxMDM5NDAwMDBEN0U0NENCRTlCMjBGRTc2NzYyOUYyQTJENEZBRTBGODEKKzoxMDM5NTAwMDZBNjIxMjA3ODgyNDk0NTk0MUU4ODE2QUEyMkJFQUM5NTUKKzoxMDM5NjAwMDBFRjI3RURDQjFBQUYxRjcxRkI2QjU4RUU3OEIyQTlGNjcKKzoxMDM5NzAwMDhGNENEMDc5NzhGRTVBQUYxM0YzNzNDMTNBQUY3MzRFQzAKKzoxMDM5ODAwMDA0M0Y2QUI2RTYxRTc0MTNERDRGNkNCNTYyMjc0QkQ0NTQKKzoxMDM5OTAwMDU4ODNCRjE5OTY4QUU3NkEyODIwQjhERTA5N0E5Rjg4N0IKKzoxMDM5QTAwMERGRkYwNkRBQ0Q1Rjk3M0M1MDhERDA0RjBCRDY4RUYzRkMKKzoxMDM5QjAwMENEOEJFMDQzQkZBRDY2QkVGNDBGOTlFMTJCRjY5QTYxNjMKKzoxMDM5QzAwMDM3NzgzMkU4QzdCRkU3MEQ5QkUxREM4MzY2RjhCOUZDQzYKKzoxMDM5RDAwMDY2RjUwN0Q4QTc3ODRCRDBBOUEwNkM1MTdGODA3RTBGRTEKKzoxMDM5RTAwMEFBNDFBQzMzQkFEQzUxMzQ3NTIyQzE0N0Q2Q0RGNTgwM0IKKzoxMDM5RjAwMENEMEJERTVCMzYxOEZDM0JCOUZCQUUzREU1RjRERTkxNEEKKzoxMDNBMDAwMDc2MTYwRkQ2NTdDNzQ1RThGRDg5QzQ4RkY5NzVGN0Q5RTMKKzoxMDNBMTAwMEFENkU4Q0Q3MkNFNzdCMkNCQURDM0UyOUUzN0EwQjgzODYKKzoxMDNBMjAwMEU2RkEwQkY1NDNCNTFFNDcxMkJEMjNFNTJBOUFGRkQ0RUIKKzoxMDNBMzAwMEVGNzUzRTQyQUM2Q0U5RDRGQkUxRkY5NDRDMjA4MTI3NEEKKzoxMDNBNDAwMEZDODY4NkVFQjM4QkY4Q0JFOTI3QzA3MjYzNEQxNEUxOTgKKzoxMDNBNTAwMDc0QzJBRkU5QUUwNDhFQTcwQzVCM0E0NjdDNDZERjJCRkUKKzoxMDNBNjAwMEI3QkEwNjYzQkY3RDhFNTM3MTYxN0ZEQjg4OTMzN0VERjQKKzoxMDNBNzAwMENDQTg4MDNERERFQ0IyNzg5MDRDRTFDQUY3RDc2N0U2ODAKKzoxMDNBODAwMDYxM0QyMTQyMkUwRkUyRjQ3N0FFQzQzQUJFQzQ5RkM4MTYKKzoxMDNBOTAwMEY0NTkyODgyMUM2NzlGQjNEQ0QxQUExRkU5RkY3OUFCRDgKKzoxMDNBQTAwMEEzRjA1OTEzNTE0RkUzMjg1OTY3NkVCRjY4RDMwRjhFQTcKKzoxMDNBQjAwMDQ4RDg1ODk3MEVBQkRCQTA2MkJDMzdFQjc4QUIwMTk5QzYKKzoxMDNBQzAwMDM3MzA0QzhGM0YxQzQ2NTNCMjM3N0ZFQjU2NTQ5Qzg3QTAKKzoxMDNBRDAwMEY2NkI0NkNCN0FBQjUzQjdCMzNFNUVFNzk1QzdEQkRERkIKKzoxMDNBRTAwMEFDQ0ZBQzZGQURFNEZEMUE5QTg3QjAwRjA3MTNFNkZGQjkKKzoxMDNBRjAwMDFDRkFFRThDNTNCODFDOUM0N0EyMzFGQzQ1OEE1QzE3MUIKKzoxMDNCMDAwMEYyM0UwNEI1M0ZCMzRFNjFCQjVFOUUyMkUxRjJDNzk1MjMKKzoxMDNCMTAwMDIwNjJCQUU1MDhDMjAyN0U0MkM2NURDQjc0N0E0MDRFOEUKKzoxMDNCMjAwMDdDMTFFMzAxQkYyMjYxNTE2QkM0QkJDM0JDRkVBREYwOEQKKzoxMDNCMzAwMDBCMEZGQzAwNDE3Q0Y0OTlGNkJEQzNGNjIzQjBCMzAxMzIKKzoxMDNCNDAwMDI1RjRCMDE3RkU5RUY5M0I5NTdCN0Y3MDQ0QzJFN0UzRjYKKzoxMDNCNTAwMEM1QzRCQTZBRkU3RTkwRTlBOERBODUwRjdBNUNCRDMzRTcKKzoxMDNCNjAwMDk2RkQ3NjMyMDBCMUIwRUYzNkREQkYxNkFCODJFRDYxNjcKKzoxMDNCNzAwMEFGRDZDMDVFNTFCOTQyRjdDMzAzRjc0OTdCQjUyNkQ5MkEKKzoxMDNCODAwMEQ3RDM4NUZBRkIzMjNDQTBDMzBEOEFCRUJFODU1RjlGQUEKKzoxMDNCOTAwMDBDRkY3QTNGRjdEQkFDQjg1QzFCOTNEMTVFMDQ2MjUyM0EKKzoxMDNCQTAwMEQ5QkY5NkVCODQ3RkE4NkNFRjlBQzk3RkM3RkVGQzFBMzkKKzoxMDNCQjAwMDZGMjgwQzdDRDYzQzkwQ0RGRUZBMEI4NkREQkIzNzQ2RDkKKzoxMDNCQzAwMEZBRjMxN0ZBRERFQzVGODlGQkE1RkZGODkxRTBCRUM1QkIKKzoxMDNCRDAwMDlFRUVEQTg2M0M5MkYzQjk2QTExNkYyRUNENUJFNkNCOEUKKzoxMDNCRTAwMEMwNzdFNzREQjE1QkMwMEY1MTcyNzlGQjFDOUJGNTNDNzAKKzoxMDNCRjAwMDk4NjYxQTJGRTJFRjg3OTVBMjdBNEI4NDFGRkM0QzlFQTEKKzoxMDNDMDAwMEI0MEY4MzBCN0M1QkY0NzYxRUI0OUI2Nzc5OEJFOTMwMzEKKzoxMDNDMTAwMENGMjI1QzU4Q0Y2RjNFQTcwQTJCQzE5QjZCMURDMTY1OUQKKzoxMDNDMjAwMEY0Q0FCQ0FFQkU5RThCNzNGMDlFOEMzNzFERjI0QTdERUIKKzoxMDNDMzAwMDFGOTcyNzdDNDFFODdGRkRCQjJGRTQ1OTRDQTUxODJCMkIKKzoxMDNDNDAwMEUzMkM4NzYzQTQxQ0NFMTQ0NTg1MUNFRjc3MEI1M0ZFMzEKKzoxMDNDNTAwMDg1NTFCRTkyMjdFRERFM0M3QjgzMTk5RjRGNUU2NkJFODkKKzoxMDNDNjAwMDkwQ0Q3MzJEODM3QzhGOTU3RUM3RTE1QjE0QjZFNzM0Q0UKKzoxMDNDNzAwMDlFOUUyRTgyMDdGRjJFODZFMzg1ODc3NTdCNjREMDk3RjQKKzoxMDNDODAwMEU0ODdGMzIyMENCRDk1QUNDQkNCOUFCQjgzREI2Mjg4NzcKKzoxMDNDOTAwMERFRjdEOTQ4NkVDMDM3OTIxQkU0RjkxMERGRDkyRjVDRUMKKzoxMDNDQTAwMDMzMjM4REY5N0U4M0NFNTc3MTZGMDJGMzZEQjhDNTIyMzEKKzoxMDNDQjAwMEU5N0M2RjA2RDM5OURBOEJCRkUzQkQ3MTZFRTlDRjVGMDQKKzoxMDNDQzAwMEU2M0E4Q0Y4RkUzN0YwM0Q3QTNENjZGMDVCNTg4MzgzMjgKKzoxMDNDRDAwMEZFRDk3RTRDRjk3MzRGRUYwOTkwRkMyRkZBQzMwMzg5OEMKKzoxMDNDRTAwMDgyREExREI1RDZBNjc5RThGREIyQ0QyQjEyN0Q1NDFFMjEKKzoxMDNDRjAwMEIxMDYxMjVERDRGRkQxQTAzQTNFRDgwNkJEM0IwRjUyQUIKKzoxMDNEMDAwMEY0RjU5MDJGMTE3OTc0MTVCQTFFM0ZGNkU0N0ZBQ0JDMjAKKzoxMDNEMTAwMDlERjBGQzQ2MTFDREQwOEYxNUJCQkU1Qjc5M0I4REFGQkUKKzoxMDNEMjAwMERFRTc2Qzg2M0UzRDYyNkQyQzg0REU1RDU4MUNFRkFGOTUKKzoxMDNEMzAwMEY2NjBGRTlBRTNGMjhCOUU3ODIwQ0RDREY0MEU2NDVBQTUKKzoxMDNENDAwMEQyNzlGRTY3RTJCRDhBNEQzNjBGRDY3NTE1RUZBQTFFRjEKKzoxMDNENTAwMDM3RTZCRDY4NUUwOUZDQTJERkFGMEM3RDY2MDdGRDVEM0UKKzoxMDNENjAwMDE2RDFEQzY5NzgxQkY1QTI5MUY1N0NFNUFFNUY3RkE1RTUKKzoxMDNENzAwMDI2QTIzQ0ZBMTFENjE3OTU1MUZCMDEyNUZBN0U0OUY0OEIKKzoxMDNEODAwMEJFNDBDMkEwODRENDJGMTBGMEQ2RjdBMzg5M0U5Qzk3RTIKKzoxMDNEOTAwMDEwMjBCQzdBQjBCOEM4Mzg3MkNEQjY4NzA2MzRDMTZGNkYKKzoxMDNEQTAwMEQ4RjQ1QUEyOTJEM0JBMUY2MEVDQTNCNDg0RTYzRTg2M0MKKzoxMDNEQjAwMEI4RUFDNUU2RTVBOUE4MzhCMEExQzdEQzdCMTU5OUI0NzcKKzoxMDNEQzAwMDU4MjdDQjMyNUIzODExRkU3RUQ5MDYxQkVCOTFCMkE3ODgKKzoxMDNERDAwMDFGREZGMjMwRTRFRDQzODdBNzg3MUJGMDE5M0JGNDQxNjYKKzoxMDNERTAwMDk5RTI2QjU2NThCRjhCNDQ2NTcwMkJCRjRBOUZGRUJDNEYKKzoxMDNERjAwMEYwMTFGOEQ3MTlBQTk4NDBGQzVBRjRFQzU5RDlERTI3RUIKKzoxMDNFMDAwMDlBNjNBODdERTlDRUE2NDJBQzBGQ0FCNDc4QkZCMzBEQzEKKzoxMDNFMTAwMDdFOEQwOUJENjQ2RjhDNkY4MzVGQTFBNjQyOEU1MzZENEEKKzoxMDNFMjAwMEZCOTZGOTcxNzQ5RjIyM0E2NDVGRjg3RUM5ODZDRkVERTQKKzoxMDNFMzAwMDQyQUUwRjlBNTM5MjI1QkQ2MEVGMkE0MzZBQjEzREU5MjUKKzoxMDNFNDAwMEMyRjZGNEZENDlDRkU3NzFCRDBCRUI5NTRCRjFGMTI0QzAKKzoxMDNFNTAwMDY4QzFGMjlFMjA5MEM3NThGMjkxMjMzODAxRkNEREIxNzEKKzoxMDNFNjAwMDI0MTFGOTRGNUY1QUZENTJFRUQ3QUY0ODgzOUY1NzYyMzYKKzoxMDNFNzAwMDBCQTRCOUI4OTRDRjRCMUVGRDE5Q0JFMzAyQzU5RkU2NDYKKzoxMDNFODAwMEUyQkMyREQyQUZGOTNDREUwQzhDRjNFNjc1RDdGMjM4RUMKKzoxMDNFOTAwMEU3MEI4REU1QjE2NEJENUExNEE0RjJBQzU1OENERkQ5QTMKKzoxMDNFQTAwMEM2QkM3OTY4OTBENDc3MEU3MUNCMDBDQzkzQjNGNDI1NUYKKzoxMDNFQjAwMEQ4RjEyRkY1NzU3REUwNkRCOTlFNzY4ODI5NDk5MUZCODMKKzoxMDNFQzAwMDQzMjU4M0E0NUUwQzg4RTAyMUQ4ODFDQTA2MUJDNzI5M0MKKzoxMDNFRDAwMEQ0QjdDRTE2RTIzQkI3NjY1QkZEQzhERkEwRjEwNzc0MkUKKzoxMDNFRTAwMDdBMjkzRkM4RjU4QjFCNzkwQzk1Rjg4QkVDRTk5OEI3Q0MKKzoxMDNFRjAwMEM2NzU2OENDQzFGNzVCRUMzNzUxQkY1RjYzOURFODMxOTUKKzoxMDNGMDAwMEJEQzc3NEZCNzJBMzIzNTZCOTgyQ0FCNEI2RjNCRUVBMjYKKzoxMDNGMTAwMENGQ0Y3RkYxQjY4ODkwQTdDQUFENUZCMjNDODk3NDU1MDgKKzoxMDNGMjAwMDI0QTU0QjE4RkIxMUFFMzlGMUZFMjRBMkRCRDdFRjdFOUUKKzoxMDNGMzAwMDY2NDdGQzNCOTA2QTExM0Q4MDZGQzNFNzBDMEI0RjdCREIKKzoxMDNGNDAwMDM3REExQkRGQUZEQ0VCMTBFMUM4NzlCQkU5RjNBODc5MDYKKzoxMDNGNTAwMDZEQUUxN0MyQ0ZGNEFDMTQ0OTZFRDhFRjJGRURDRDg1RkUKKzoxMDNGNjAwMDJGQTAxRkVBNzczM0Y1MzM5RkZDQUZCMEM5QkY2QTJFOEQKKzoxMDNGNzAwMDdDMDRGQTY0QUZEREM1RjEwN0YyM0ZDMzExNzI3MzdFQjIKKzoxMDNGODAwMEJGNTNERkU3NUJBMEVCODM2ODNBNDRFQjg3RkJBMkY0MDcKKzoxMDNGOTAwMDgzRjFCRTU4RDdGNkZFNTJBQjVFMDgzMDNEQ0I2QzIyQTMKKzoxMDNGQTAwMDAwM0ZBM0VDNDMwN0RCOEZCMkE3RTU3QzE0QTQ0RjdCNTMKKzoxMDNGQjAwMEQwRkMzOEJFRkRFNUY3NkZDMDdBMzY2NDRCOURDMEJEQkUKKzoxMDNGQzAwMDlBRjU2RkM5MzM5RkYzQjhFNjEyRkQ2MzNDRDBCRkRGQUIKKzoxMDNGRDAwMERBQjFGRTREMUYyMzlBMUQ4NEZGRjFENTVFM0JFNEZFNEUKKzoxMDNGRTAwMDgyNzk0Q0NGREI5Q0M3QUIxNUQ2NkZGRjU1QkQ0QkY0MjgKKzoxMDNGRjAwMEU2RkNDMDRCQ0RENzA1MTdEMUJCNzU1MTc0M0QyQjcyNzQKKzoxMDQwMDAwMDkyOTA1RTJENUNDNTVENzhGRjIwOEFCRTA2NURBM0Y1QUIKKzoxMDQwMTAwMEU4QjQ0MUVFMzZGNTI4RkQ3QjVGNDREMDUxODg0Njk2RTIKKzoxMDQwMjAwMEUzNkY0ODJGNjI1RkFENjJEMzc3NkNENzg4QUNDREM4QTEKKzoxMDQwMzAwMDI3QUYwODdFQzVGMDBBRDgzNTg2NUY5QTg2NzhFNTg1NzEKKzoxMDQwNDAwMEUzMzZEMzMzQkFGRTRFQzgxOEZENUZGNDQ3MUJGQjA1QjkKKzoxMDQwNTAwMDY1NzUzMjZGOTFERUUzNzU0NzI1RTJGNURDQkFCNjNFNTEKKzoxMDQwNjAwMDMzMzUxMjBFNDZDMUExQThGNkJFMjhCODI4QUFCRDE2M0YKKzoxMDQwNzAwMDA1RkI0REVEQ0JGNkJFQ0NFQjJDQzJEQkQ0Q0VCMUY0QzAKKzoxMDQwODAwMDZBNUU4NzVDRTg1NzA0NzkxQzk1QkJCRUIyMDcyMDFGQTcKKzoxMDQwOTAwMDlEOUFFREQwOEJCNjY1MjI5MDQwRUYzN0JGQThCMkRGNzYKKzoxMDQwQTAwMDdCREFERDlDMDgzRjY1NDU4Q0Y0RTM0RUJCNzQzOEQ5NjAKKzoxMDQwQjAwMDgwQzVFQzYyQzJFMzc0NjA4MDBCNzkwMkNEMzEzMkRFRTAKKzoxMDQwQzAwMDcyQkFBODM5MzEzOTYyRERERTU0QTcyNkJBQTk3RDYzRjgKKzoxMDQwRDAwMDUwOEM2RjNCQ0ZBNTg2RTc1M0EzQjg1OEJERjRFN0M2MTUKKzoxMDQwRTAwMEE5REZFRjkwRjk5RjU2ODFGQ0Q4QzZFQTZGNzcyMDlFMzIKKzoxMDQwRjAwMDc0OThENjRGRjA1RkU2NTU1RjlGODhGRDk3RDM3NUREQzYKKzoxMDQxMDAwMEFFOTk4RTc1RTBBQkFBOTA2OUQ2M0UzQkYyMjBFNjRBQTYKKzoxMDQxMTAwMDU2OEEyMzIyRjBFMDA4MUE5RjlBOTA1N0ZGMDJENjU3M0EKKzoxMDQxMjAwMDI0MjhEOEZGOUNCNzNBQ0FCRjExNDU0OTYxQUNBN0Q3MkMKKzoxMDQxMzAwMDQ0RTcyQjA0RURGMDZGMTY5MDlEODUzRTJBNTk2N0FFM0IKKzoxMDQxNDAwMDVGNTQ3NzlDRTdDQkEyQThGOUEyRTk3MUUzRThGOUQyMjIKKzoxMDQxNTAwMDc1QjA5RUI3RTAxNTVFM0Q3RjkyRjNGNDRFMUY1NDU5NDMKKzoxMDQxNjAwMEJFNUE5NkRCQzRDQTU0OTkyNzhCRkM5Mjk2M0E5OTdGMjMKKzoxMDQxNzAwMEQzQjI1N0MyMjJBMEU3RjVFOEYzRDZBMERCMDlDQ0E3NUIKKzoxMDQxODAwMDVFMTdGNzVCNEVFQ0ZFRjdDMUJGODRGQ0VDRjk3ODAwREMKKzoxMDQxOTAwMEY2ODk0RkVDRjlCMEU3MEI4MDlGRkI2QkQ2QzdFMkMyMDQKKzoxMDQxQTAwMEY2NjNGNjdEMzc4QkYxREFFNzEwQzBFQkY0QkU1N0IyNTkKKzoxMDQxQjAwMEUwNkY5QzdFREVDMUY5MDVBNzk3MzlEODVGMEZFQzRCMDUKKzoxMDQxQzAwMEUwQjhDNUU5Q0VEMjFGQUU3OUYxREIwMThENkM4Rjk3RDcKKzoxMDQxRDAwMDMzMUYyNzBFQjY0QkJGQUFFRTNGRDgzRUI2RDQzOURDMEMKKzoxMDQxRTAwMDE4NDdFNUJFMzg5RTU3OTVDRkM3RjBCRURBRTkxN0JGMkUKKzoxMDQxRjAwMDFEMUMxOThGRkJBRjhFQzdEODU3M0Y5RDIwQTYzRjAzQ0MKKzoxMDQyMDAwMEY5RDVGREZGQ0ExNzg2M0U1RThERjVGMkFFOTdFQzczQzkKKzoxMDQyMTAwMDkxMjdGMkE3RkYzMzAwRkFGNUY0MzMyRkIxRkUzRDY1ODUKKzoxMDQyMjAwMDZCN0MxNEIxQ0RFOTdCMzIxRUIxMEQ0NTVDOEYzRUQ2NUYKKzoxMDQyMzAwMDUxODhBRkY2Q0NCODExRjNFNzQyQkE0ODNBOUMyNjNBMTcKKzoxMDQyNDAwMDYwNUM0NDk3MTJGOEU1MTdBMzQ3RTVCRjJDM0RCRTlBODIKKzoxMDQyNTAwMDI1RjVEQzEwODE3RDlGNTZCQTI4M0VGOTNDODFFMzU1NTcKKzoxMDQyNjAwMDM0N0VGOTdDREZCNzAzQTA4NzJFMzVERTdCRkYxRjFCNzIKKzoxMDQyNzAwMEVGNTMxODZGRkI3RkM1RjE0QTc5Q0YxREVDNjZGQ0EyQTYKKzoxMDQyODAwMEU1RkU0MkI5N0VFRUU3MENFRjQ4RjAzMEJFOTczOURGMkQKKzoxMDQyOTAwMDVGRkI5NzFERkZGRjBDQkY4RkZFQ0I4RUY3NTJGQzdFOUUKKzoxMDQyQTAwMDU1RTc3NzgyMEJGQkEwQTc1RkZDM0Y1OUUyNDc4Q0RCMDkKKzoxMDQyQjAwMDM5RTQ1Rjc1NUVGRkYzNzExQkZFN0M4MUVBMzlFOEE1ODYKKzoxMDQyQzAwMEY2QUY4OUQwQkI5RTZDRjY0QURBRjQ0NzA2MEQ1MThDRTYKKzoxMDQyRDAwMEI4MzhBRkE3QzZFMDJGMzdEQTBGNUM4RTczNEMwMUYyMDcKKzoxMDQyRTAwMDI3QjA4RUE5ODkxRjc4RTAyRDgyNUYyMTNGNDFFNTdEQUYKKzoxMDQyRjAwMDU5MTk0RjdBMjVERDFCOTRGMTVEQkY0MDNDQUJFMEFGMEYKKzoxMDQzMDAwMDczMTk3RURERkI5MzAzQzgyQjI5NTQ2NTNDRTZFNTZBRUYKKzoxMDQzMTAwMENGQTYwNjFBQzdDQkM5MTYzN0NFOTU4REVEMzRGN0YwNjgKKzoxMDQzMjAwMDRFQUE3Nzc1NTQ1RDU4OUZENTc0Q0E3NUJBMjNGMDFCOTEKKzoxMDQzMzAwMDFCNkY1RTY3NUQxREI1NEVGQUE5REI1QzNGNUUzQzkzNkIKKzoxMDQzNDAwMDhBRkRCQUYxMzkzNjgxRjMzNjg1NjgxRkIxQUU0QzE5NTIKKzoxMDQzNTAwMDIyQ0ZGN0ZDNTRENDJFNzdDNUZGNzgzQUNERDVFOTQ0NjcKKzoxMDQzNjAwMDc0RTE3RDlCNDAyNzU1Q0Y3MzMzRDM0RDgwNkVBOUEwNTgKKzoxMDQzNzAwMDRCMkVGQkVGMDFFMTM5RjAxNkMxNTZEREJGMTJGQUZFRkMKKzoxMDQzODAwMDYzQTEzMzYxMEJENkQxMEU1MTEwMEUxMjdDRDY2REU1QjAKKzoxMDQzOTAwMEYzOTM1NjQxRUI2MTM5NEU1RTQ3NDdEMzRERThFQjZBRTQKKzoxMDQzQTAwMEFCQ0U4MkIxOURDNjg0NDE2NzNDRUY5MjZFN0E5RkM3QzcKKzoxMDQzQjAwMDFENERFNzFGNEZEN0ZEOUQ5NjgwQUVFOTA5OUUyMEU0NzUKKzoxMDQzQzAwMEEyRDNCM0E5ODhCM0Q2MTA5RDE1QTU5NTlFMDY5REEyMkMKKzoxMDQzRDAwMEU5OUU4RkNERjU0MUFERjRFRTY0RjU1QTMxQ0Y0NkVBNTIKKzoxMDQzRTAwMEZFRkM1ODZCQjI4NDNCMzVBOEYyNUM1RTkwREI4RkY5MjMKKzoxMDQzRjAwMERBNjM4NTNGMzIzQTNFOTlGMzQzODU3RTZFNDJENUY3QzQKKzoxMDQ0MDAwMEMzOTE2MUM3NzhEMEZBMTQ3OUI2OTNBRERBOTIyMTlDNDIKKzoxMDQ0MTAwMDVGRUYxMjA1NThCNzE2ODgxMEUyQjc0QUREMkJERjYxNEYKKzoxMDQ0MjAwMDdEODRGMzIyNDVCQ0FGNTlGRjAxRTA1RTM4MkY4NkZDNDYKKzoxMDQ0MzAwMDhFNzVENjEzQTZGMzZFNTFFNzI1MjZFNUVGMUMwRDdFOEIKKzoxMDQ0NDAwMENENTk0QUNGMTBDNzcyQjlFQjMxMUY4QkVGNzdCOEMxODYKKzoxMDQ0NTAwMEJGNEVENjA2QUVBN0I1OTZBQjdBMjg3NkFCNDMwQ0M3NEYKKzoxMDQ0NjAwMENFMjM0RjNGMDNFRDVFMTlDREVEOTcwODk3OTI4Qzc0RTQKKzoxMDQ0NzAwMEJCMTA5Rjc3OEM3N0M5N0MzNTVBQkM3RTAzRDhCRTNDNzUKKzoxMDQ0ODAwMEMxNUQyM0UzMjYwMkYyRDQxRDY1NTc3QzVGQjY0RjFGNDIKKzoxMDQ0OTAwMDRCREY0M0JFOUJEMEQ4NUY4RUVEQ0U5MTIwRDE1NTI5MDYKKzoxMDQ0QTAwMEUyRkRGNzJFREQ2NDVFNDRGMzBBMDdBRjc3OEFFRkVBOTgKKzoxMDQ0QjAwMERDMTM3QTY5NDI4MTM5NkVGREM1MTBCOUFGNjk5NDUzMzYKKzoxMDQ0QzAwMEYzREQ3MjlGQzJFMjQ5Qzc3N0U2MkNFRkMzRUIyRjM1Q0QKKzoxMDQ0RDAwMEI2QTg3QzM3RThCODIzOEVFNUJDNzhFNTREMTMwN0QxNDQKKzoxMDQ0RTAwMEY3OEI3N0E0Nzg4MEU2QjE0OTNCMDdDQkY2MzM3RUY2QUQKKzoxMDQ0RjAwMDFFM0REN0I2QzZGMEYzOUZFNzZCOEYwRjQxOUU4MUUyNUEKKzoxMDQ1MDAwMDlFQjU5QjFFQ0NCOUY2NjU3QjNBNzVBMTg1MjY5RjQ0NjYKKzoxMDQ1MTAwMERDNzE1MjYwRTcxQkQ4RTc5QzM0NERFNUY2OTM4NENDMDAKKzoxMDQ1MjAwMDJCMTVDQkUzNzhERjdDNjJFMDJCNkIzQTdENkYyMjJEN0QKKzoxMDQ1MzAwMDZBNTBERjE0RTNDQUJBODVGMDJGRDZFM0NEN0ZEMEU3MDcKKzoxMDQ1NDAwMEExMUEyQkI0NjdFMjgxNTdFNzlFNURFOUY5NDQyMUYzOTQKKzoxMDQ1NTAwMDlCQTNFN0VENzFCRDdEOTczMTFFNzcyQUU4QTNDNEI4MTAKKzoxMDQ1NjAwMDcwMUVENjY4OEZFRkUwQkI1RkU5RjQ3ODVFMkYwRDk4ODAKKzoxMDQ1NzAwMEU4Q0E3MUYxNzlBQjFDNERERDEyNTFEQUMyQkRBOEVDNkQKKzoxMDQ1ODAwMDMzQUM2MDFGRTQ2RDQyNTc1MUI4MTZERkJENEQxNTFCQUIKKzoxMDQ1OTAwMDE5REZFNjYyOEVCMzI3RjQ3NjgzMEY5QUQwQ0Y3N0FFMTkKKzoxMDQ1QTAwMEU5QzFGQjM5NERBMzA1Q0I0RkQzN0REOTA2QkYzOTNGQjgKKzoxMDQ1QjAwMEM5NThDRjM1OERGNkQ0MjM3RkFCNzlCNEQzQjNEMTgzMkIKKzoxMDQ1QzAwMEZDOTY1MDE4NzE5NDQzNkJFNTdFNEQ5NzlBNzA3N0U4OEUKKzoxMDQ1RDAwMEQ5NjZBRkRDMDdGOTdDNjlBRTFCNzI3MkYzMDM1MzEzMjMKKzoxMDQ1RTAwMEExM0ZFN0FFNTFDMzBFQzhGQjZBNzNERTkyNzA3OTM4MDMKKzoxMDQ1RjAwMDBGN0M2RUVENjgzQkQ2QUZGM0UyN0Q3NjhDRUI0Q0JFNjQKKzoxMDQ2MDAwMEY2MTFGODY1OUM3M0VDMEI5QzcwOEVBN0I2Rjg3NUFDMzAKKzoxMDQ2MTAwMEZCRDQ0NDlBQ0Y5ODdGNTY3NzIyRDZENUQxNzk0Rjk1M0YKKzoxMDQ2MjAwMDdBN0U5MzAxRkYzQTRERkIwQ0RGOUI5M0U0REUwMUY5QTgKKzoxMDQ2MzAwMEY4NzQ2OTM3OEVBQjc2Q0JEN0NGNTc1QUMzREQ0MTlGMUQKKzoxMDQ2NDAwMDQ3NjkyRTYwN0UzRTM4NDRDQURGODQ3NkFFOUVGMTJDRTgKKzoxMDQ2NTAwMEJGMzEwMkUzNkFCMkI5N0E0MjlFOUI1NkM0NTg0MEE3NjIKKzoxMDQ2NjAwMDA5Q0JBNDFDREY2RDk1RjMyQkU4NzM1QjAyRjRGRUIzNUEKKzoxMDQ2NzAwMDc4OUZCRTNCQjNEQTVBQjQ4MUZBRTlFNDE0RDY4NDc2NjMKKzoxMDQ2ODAwMEI0Q0UxREE2M0QwRkZFNEMwQzU0MUZDMkZBN0FBRTZFN0UKKzoxMDQ2OTAwMEFGRTZBRTk2RTdDMUJBOEM5MTdDMTVENjg2QjEyOUY0MDcKKzoxMDQ2QTAwMEZDQzhFNkVDODFDODczMzdFNDY2RkVCMDgyQkYwRjg5QjAKKzoxMDQ2QjAwMEUwRkY4NDAyNUY2MTdCRkFDRTA0OEJCQjA1N0E3OERFNzMKKzoxMDQ2QzAwMDM0RTVBNTZFNTIwRTdFMThDMkVCRjkzQTlFRTcyREE0OTIKKzoxMDQ2RDAwMDI3MUNDOTM4MDdEODIwNjFFNEFCNDI2RkQ0M0VFNDczOEQKKzoxMDQ2RTAwMDQ2QUNEQkVENjIxN0Q3REJFN0M5N0NENDJFRjY3MDM1MUMKKzoxMDQ2RjAwMEU3NUZERDIyNUNDQjA4REU0MjdFODRENTI2QzRENjJBNjUKKzoxMDQ3MDAwMDI3OTc0RjU2OTFCRUVCMjFDNEY2QUE3NDg2Nzc1NEI5MDkKKzoxMDQ3MTAwMEI5MEM1NUY1RTZFN0NGNTQ3OTE4REU1NTk1Q0ZGMDlFRTQKKzoxMDQ3MjAwMDJBMUZDMzdCQUJDNjczRjk3QzU1MTEzRjhGRDYzRjczRUQKKzoxMDQ3MzAwMEUzRTdCMzNFNzFGNTI0NUUwRkJENTA2RTY2QjkwOTJGRjUKKzoxMDQ3NDAwMEU4MUZBNzcwREQ4NUYzNDc0MkVBQkJFNERFNTJGRjA4QUQKKzoxMDQ3NTAwMDVEMUY3NUVEMjNFRjAzRTg5NjJGRjk2MTVCMzVEQUMyMzMKKzoxMDQ3NjAwMEU3MzdBRDhEMTk5MEJCNzFFQTg5QTc5RjQzQkNBMzI0OUQKKzoxMDQ3NzAwMDlFRjNCMjVBNDQyM0NGOTMxNjYxRTE3M0Q5RDAzRjBFMTIKKzoxMDQ3ODAwMDkyQkIyRTc3OEVDRjhFQ0MzQkJGQjE0NDExRDYwOEY5QTkKKzoxMDQ3OTAwMEJBQzkxRjIzQUMxMUY2NjlGNkQyNjQxMzNDNzNFOTNCMjYKKzoxMDQ3QTAwMDdGRUU0MERGQkZCMUFCOTY5NzRGNzgxQ0JBRjM4QkY1MjUKKzoxMDQ3QjAwMDdGQTVFNzhGREQ3OUFDODczQ0E3RkJGRDg2QzhCODRCQUEKKzoxMDQ3QzAwMDhCNjg5NkIwRDVDOUZCRjE4RkREOUU5MTk2QTJERkQzQTEKKzoxMDQ3RDAwMDAwN0UxOUU3QTRCQkQ4OUI4RjNFODE3OUI4NDJGNTJDQTcKKzoxMDQ3RTAwMDIzRjgyM0YwODdFOEY5ODlDRTlGRTIxNURENTZGRTAyMTMKKzoxMDQ3RjAwMEYzREFFN0Y0MjhGNDlENDNCN0Y3MkJDQ0E3RjY4RkU5NUIKKzoxMDQ4MDAwMEZCNTExNzlDQUI0RTk3RjZFQjUzRDhBRjY0NjlDRjBBQjgKKzoxMDQ4MTAwMEEwNDdDM0QyNkU3REZBQUJCNEMwNURBOEJGMjVEMTgzREIKKzoxMDQ4MjAwMDEzMEREQUFBMEU4MTA1MDRBRkY2REEzRDJBRTI3QTc1OTUKKzoxMDQ4MzAwMDgyRUY1RDIwMUE0QkJGMjI2MDMzREJCMUM2NEVDOTg4QzAKKzoxMDQ4NDAwMDVCMUFFNzlFRTNGMjgyNEUzRTc3NDUxRDYxM0Y2NjRFNUUKKzoxMDQ4NTAwMEVGRkQyMjAzN0FBOTU2NzE2MUJGMDZFNzM0OURFREEwRjIKKzoxMDQ4NjAwMERGMTRERTFGNDUxRUQwMzRCMjk3MzdFNUFCM0MzRjdGRTcKKzoxMDQ4NzAwMDNGQzRDQUU1NTlEODczQTI2QjhDRjA3MDdDNjZERTZBQkYKKzoxMDQ4ODAwMDZBMEZGRDU4RUJCNUNGOEZEMEJGNzNGNEU3NzM3QjVCMzYKKzoxMDQ4OTAwMEI4MzQ5RTk3RTE3QkQ4M0Y1Q0U1OUQwRUY5RTg4OEZBMzUKKzoxMDQ4QTAwMDFDOTQwM0E3MDNCRjhFRjE4NTU2MjU2MkZGNzc3RUJFNTkKKzoxMDQ4QjAwMDU1RUY1RkY2N0IxNjkzOTJFMDdCN0E3N0I1REY5Q0MzNkEKKzoxMDQ4QzAwMEU3QUREODZFMTlGRENDRTkzRDcwNjU1N0Q4RUJENUEzOUYKKzoxMDQ4RDAwMDQxMUQ1MTYzRjNBNEE3NTJCQkNBRjNERjcxNDk3RkM0RTIKKzoxMDQ4RTAwMDI5RjNCM0NCMkU2MjM3OEMzOEREMTFGQzI5Q0YzREYyOTIKKzoxMDQ4RjAwMDc4MTdFRDc4NkEwN0NFM0QyQ0ZBRDhDMUY2NkJEMTE1NDIKKzoxMDQ5MDAwMEQyMkU4OTlDRTBFMEE5MUNEMDM0QzdDNUM3M0U3NUIyNDEKKzoxMDQ5MTAwMEZFMkVDMkU3MjRDRTI1MjFERUJGRUIzMzNCRjI0MzY5RjYKKzoxMDQ5MjAwMERBRjg5MzMyMDBBQjREQzgzMzhEOEVDRjFFRDhGMTcxQkIKKzoxMDQ5MzAwMDYyOUI3MUYxNURFQUU1QzVDNTk1RUYxMzYxMTc4Q0YxRDYKKzoxMDQ5NDAwMDhDN0JGMTZDMUFGQ0FDNEFFNTFDRUYzMzU1QkVCODIyRTcKKzoxMDQ5NTAwMEFEQURGQ0IwRThCOEY4RjlGOEI5NThGRDE1Q0VENzU3QTkKKzoxMDQ5NjAwMERFNzFBNENERjg3OTc0MUNGMEYxRkNFOEZEODhGODAyNDIKKzoxMDQ5NzAwMEU4ODlCMzA3RDUyMEY2RDM1QjgyM0Q5MjQ0MUJGRDFCMkIKKzoxMDQ5ODAwMEYxRjNDQUI1RjQ1MjBBRTZBNTNCMDlGQjYxQTcyRkUyOTEKKzoxMDQ5OTAwMDk3MUZDOTk3RjZGREE0MUU2RjNGQkQ1REU1RjVEMkU5RUYKKzoxMDQ5QTAwMEVEMDk0MUY4QTcxNURCRUZBRkM3M0U2NUM1MjY4NURERUMKKzoxMDQ5QjAwMEYzNzJEMUMwRjQyMjNBMEE2N0E0MUQ0M0JFNUIwQTlDN0QKKzoxMDQ5QzAwMDZCNzcxMkY0OTU4MTVGRTk1MzA5N0VDOEQ1QzI5MEUyRjYKKzoxMDQ5RDAwMERCNEM3OEI0MzhERDQ5RUQyM0YwMzgwMEI5NkE4RjNDMDAKKzoxMDQ5RTAwMEMwRDA2MEE2QUI4RUY3RjNCQTFFMzREQTJEQUNCQjlGRjUKKzoxMDQ5RjAwMEUzRDJENEVFMTRGQjNCN0Y4ODEzOUMyNzI4OUFERjAwNzgKKzoxMDRBMDAwMDdFQzdEN0U1N0FCMEFGQjgzMEI0QjM4MkYzM0JCNkM3NTAKKzoxMDRBMTAwMEI5MTA4NzM4QTZFNzM5MUJERjY5RDBGQjZCQzg5N0ZFNTIKKzoxMDRBMjAwMEM5NzE3REZGRUVGODBFNzlERTFDNzg2MjNFMUQ1M0NDMTUKKzoxMDRBMzAwMEY5ODJFRkVCRUZCRDlGMkZGN0NGRUVDMDVFRTJBMEQ2N0QKKzoxMDRBNDAwMEY2MEI0MzREODlEREE5RkQ5NzdCREZFMUIyNTE2RkJGQzYKKzoxMDRBNTAwMDMwQkU2MTAwRUNFRTk3QkJFMjc4M0ZGRUNCNUQ4RjE0NzkKKzoxMDRBNjAwMDIyQ0U3QzMyMzQzQTE1RjI2RjdDRkY1NEJFOEREQjlGMzAKKzoxMDRBNzAwMDVDQTc4RTA3QkQ0NDUwRTZEOTk0ODNBRUI5OTE3OEE2NjEKKzoxMDRBODAwMDZDMDg2NDQ3Q0UzMzk5NkY3NDdDRDdCMzg5OTY5QzU2NzMKKzoxMDRBOTAwMDNFOTYzQkZENEU5Q0Y3QUNEQzc1NEIxMUU0QjhERTI2MzAKKzoxMDRBQTAwMEU5NjlERjM1Mzk4MDYzQ0M5NTc1NUUwMUY5RTU3OTk2NjIKKzoxMDRBQjAwMEMxRUQ1NzU5MjJEQTM5NkMxRUY2OEI2RDdCOEI3RDY4MDAKKzoxMDRBQzAwMDZGQzRBMTE3RUZCNkYxNzlDMTU5NTdCOEFGQkYxMUYzNTEKKzoxMDRBRDAwMEYwMzUxQkYzNjE3MTFGRjdGNTlDOEZENEEwNzJGRUYyQzUKKzoxMDRBRTAwMEUyNkMxMTg2RkZCMUU0QjY4NDBERDgwRjMzRjA5RDk1Q0EKKzoxMDRBRjAwMDJCRTc3QkQ5MkE0NUY4Njg1QzY1NDE3OTBGNDc0N0UyODcKKzoxMDRCMDAwMDdCMDAzOTRBRTk4RDgzOTAzRkQ5OTQxREJDQkI2NzJBNEQKKzoxMDRCMTAwMDlGREYwREUzRkUxNjIzQ0Y5NEU2NzE0RjlDNzNFQzMwQkMKKzoxMDRCMjAwMEI0MUQ4RkZCQzExOTg1NkNFRjBFRDk0NTAwN0EyMUYwQjkKKzoxMDRCMzAwMDhDQ0NDMzI5RUIyQUYzQTMxRjg2RENBM0JGNzZFMTlFQUUKKzoxMDRCNDAwMDI5MzRERTEzM0E1RkNCQTY4NDdCMjIyRkEzRUM5OTBDODkKKzoxMDRCNTAwMENFQ0IzODYxOTdGQkE1Nzg4RUZERTJCMjgxRjQ3RTNDMjYKKzoxMDRCNjAwMERGQ0ZBMTE5RUYyNzQ3Qzg1MUQ5MUM4RjFCRURENDc2OTEKKzoxMDRCNzAwMDFFQjczNzFFRjhCQTRFQjFERkJBM0I0MUMwNkZCNTNDMjUKKzoxMDRCODAwMDk3QTBFNzU3QzU3MDFFQjlGMTVFQkZBMTUyRUU4QzdCQUUKKzoxMDRCOTAwMDNGQzQwRDMyMUZGMzQxOUJDQzU3N0Q3MDczMDZERjc3MDYKKzoxMDRCQTAwMDYxQjQ3RkQwQTZDRDgwRkY4NDcxQzA1RjVGNjhBRkVEMzgKKzoxMDRCQjAwMDg5N0QxNzAzREY4NTg5QjU4Q0U3MDk1RENFMTdDNkQ2RDkKKzoxMDRCQzAwMENBQkM3MEZEMUMzMURBMDM2RUQyRjNEODlCQjczOTM4RkEKKzoxMDRCRDAwMDdGRTU1ODQ2QzMzN0MwRjdEOEI2M0VDODgxMDFCREU3NjgKKzoxMDRCRTAwMEVGRTU3QUYyMUY4OTlGOEI5RTc0ODQ1MTdGNzQ5QjhDQjIKKzoxMDRCRjAwMDVCMUZCNTA1QkY4MTFFM0VCQTNFODVDRjQ3MUQ2RDFGQTkKKzoxMDRDMDAwMDFDQ0NGOTAxOEFDQjAyRkZFQ0E4QTJDMzM2MTdGQjk1OTYKKzoxMDRDMTAwMDVERUMwNDUzRkJENDU4NjE0MUZFQ0VGODI5NkI2NzIxNEIKKzoxMDRDMjAwMEJGQTE2NTkzMDNFMjI5OEU2RDc5Mjg4REQ3MzVDMjlEOEEKKzoxMDRDMzAwMEM0NzkzNjA3NTUwMUJFMUQ3QkYyM0ZGQTQ0RkEyRjQ2NzAKKzoxMDRDNDAwMEI5Njg5MzM5RUZBRTI5NUI5OEVFQzlCOTdBQTg5Qzk3RjkKKzoxMDRDNTAwMDU3RUJGNEJENjZBOEI0NTNFNTcxQTEwN0JCRjJGODI0ODUKKzoxMDRDNjAwMEJEODkzRkJDQkVBMzE5OUFDMEY5MTM0RkY3NTBBMDM3QjYKKzoxMDRDNzAwMDFFMTZDMTlGN0Y5Q0M3QUI2QzM3RjJFNkNCOUVEOUY2NjAKKzoxMDRDODAwMDA2RjY2QjhGNTk0NDAzRkMwRkU1Q0VBRDNGQzc3RDFCODUKKzoxMDRDOTAwMEE5QkY0OTYyM0IyNEM0MjYxRURGNTE5NzNDQTc0QTEzOTMKKzoxMDRDQTAwMDk2QzdCRkIwODM4NDE3NERERERBMTM3MDNERDkxQzg1REMKKzoxMDRDQjAwMEU2RDcyMjhCQzJGRDJGREFEMzlGRjNFRDg4MUYxNkRFRDUKKzoxMDRDQzAwMDI3REJBOUVBRjg5MDRGMDlGQTZEOTFGOUNBMTNEQTA1QzIKKzoxMDRDRDAwMEI3QzBERjZCNUVERjRERTBGQ0ZBMzg3NUREMDBGMEVGNEEKKzoxMDRDRTAwMENDQTYzODBCRTRBOUZDQUVFMTQ5QzM0MUI3Mzc1NTAxNjYKKzoxMDRDRjAwMEZGRTM4Q0Q1RDMyMTMyOEUxMDREQUZFODNDRjBFMDUwNkQKKzoxMDREMDAwMEE5OUZDQTcwMEYwRUNEQUJEMjNERUJGOUJFOTA1MkM4MzEKKzoxMDREMTAwMDI1RThGMkE0QzJGQkQ4QTUyQjg3M0ZDNDcyRkE4NjREQzIKKzoxMDREMjAwMEY0QTA3RTRGODRFRTRGOENFNENGM0Q0M0E1NUY3MEZFMzAKKzoxMDREMzAwMDNCNzYwRkI3MkZBNUY2RjJGREQ3MTIxOUNGMkQzNkNFNDEKKzoxMDRENDAwMDZCODlFNkVCNjVCRkZGQTQ3QTU5RUY5RjFGN0Y4OEZDNTQKKzoxMDRENTAwMDgyMDExN0QyRTE4QzY4RjhGOUM3RjRGREFGQjdDN0YwNEMKKzoxMDRENjAwMDdBOTA1NjAwN0M4RUVEQjgyRDM0MUZFMzNFRkU3NDBDMTUKKzoxMDRENzAwMEVCQUZFM0M5NTI0RjdDNDlGQTM0RDAwQjc4NUNGRDVCNTIKKzoxMDREODAwMDk2RDNCN0E3RjI3OUJGMDU0MUYzNzc4RDdFN0YzQjU0NjkKKzoxMDREOTAwMEVBRjFGMjE0NEYxMkQ2OURFNTZGNEE3RDQ4RkNCQTg2QkYKKzoxMDREQTAwMERGN0ZEM0M2RUY0NzhGQTM0MjdGRUZGQzNDN0QzQThFNzcKKzoxMDREQjAwMEU1RTI3ODQ3Qzk4RkUzM0I3QUIxN0Q2QTRBNzYwOTk2ODYKKzoxMDREQzAwMDlCNkQzNjU5NkYwQjY1QzEwRjNFRkU3NDJGNkY0REM0M0UKKzoxMDRERDAwMDc3OEYyNzg3QjI1QzExQ0Y5QjZDQzE5NTQzQTQzRTZENDIKKzoxMDRERTAwMEM2QkE1ODg0NDlENTBFNDY3RTkxNjAzRDZGQkM1N0VBREQKKzoxMDRERjAwMDVDREQwMDNGMDVGOUJEODMwNzcyMTk3NkI0QkIzMDRGMDcKKzoxMDRFMDAwMDc3NDIzQkI5OUVGQzUyOUY3NzlDQjM5QUE2RTc5M0IzMzcKKzoxMDRFMTAwMERGMTNCMjQzOEY2QkJBN0Y1OEI2M0QzQUNGNTdENkQ3MjAKKzoxMDRFMjAwMDFCRUZEM0JDNEIzNUYyOEEyREMwMzc2NDRGRTc3ODgzMzQKKzoxMDRFMzAwMDcwM0Y0M0Y4OTYyRUJGNjUyMUYyQzc0QkZERjdERDA4QTIKKzoxMDRFNDAwMEZGQTlENDJBQzZEQjA5QUYyNjQ1NjUzQzlBNjJDNEVDQUIKKzoxMDRFNTAwMDI5RjAyMzIzRkI4OUYwREZERTZBRUQ0N0UwREVCNjMyN0UKKzoxMDRFNjAwMEZDNDFGM0UwQkRBMTZFMjkzRkIwQTRGNEJEQjJFNUNBOTgKKzoxMDRFNzAwMDZBN0NERkQwMkYxQzI4NEM2QkE1MTNGMjVBOTFERkQzMkMKKzoxMDRFODAwMDM0NUFBRkJGQzhCODlCNkNCMjNFN0FEQzA2M0U0Nzg3NDcKKzoxMDRFOTAwMENBQkNBMEE2NkNGNzZGNDc4MDJGN0Y1MUY5N0NENzk5QzkKKzoxMDRFQTAwMEVGNzM5M0RBQjVFMUE3QjVEQTdCN0I2QjlFMkRFMUZGNUIKKzoxMDRFQjAwMDBEN0M2QkZBQ0VGM0JBQkUyQjI1RkM4MDY3Q0Y3NUU2NkUKKzoxMDRFQzAwMEJDRjJERTlCQ0M3MERGRUQ2NjM4Njc5NzE5MUU1MDY3MjkKKzoxMDRFRDAwMDg2M0QwN0NDRjAyMUJENUZBQ0IzNzEwRTE5RUI2Qzk0MkQKKzoxMDRFRTAwMDU4NjdCQjFENzI5RDBEMThFQjZDOTQ1ODY3RTMzOUQ2NUIKKzoxMDRFRjAwMEQ5ODBCMUNFMDY4Qzc1MzY2MDgzREU1ODZGMDNDNjdBRDIKKzoxMDRGMDAwMDFCRjVCRDg2NDk3RDJFN0NFMTM0RTQ2QjU2NTg2NDlFQ0EKKzoxMDRGMTAwMDJGRjFDM0M3RTc5ODY2RDg0REU3NTI0RUJGMjhDRkE1RkIKKzoxMDRGMjAwMDkwM0M0ODdEQkYzMDlFRTdDOUMzNjgzMTE0NzY0OUNFQjYKKzoxMDRGMzAwMEE3RDRFNzFEQzE2NUY0REUzOEI3OTYzQzBDNzY2MkVENjgKKzoxMDRGNDAwMDU3RjMyMTc3MTU1RDFCMzlFRkI1NjlDNTJCM0RFRkE3RTkKKzoxMDRGNTAwMDc2OEQ0QTgyODA1RjUxQjFGNkFCNTlGMEEzM0FCOEI1NkQKKzoxMDRGNjAwMDBFQzMwODlGQ0FEODg2OTU0MzM4NkUxRjY2RkREMTU4NzgKKzoxMDRGNzAwMEVEN0VGMzRBQzk0NzhFQkYxNEFCQjhGOTgyRUE0QkRBMkIKKzoxMDRGODAwMEI1OTkzRjE0OUQ3NzJFNTY5QkYzQ0MyRjk1NzcxRTJEMDgKKzoxMDRGOTAwMDA3ODYxRkY4OThBRDM5QzNDNUVCRjQxMThGMjJDRUJCM0QKKzoxMDRGQTAwMDU4NDk3MDYxOURGRTU5OEM1ODg2RkI4MDAyQUZDQTNDRkYKKzoxMDRGQjAwMEI1OTY4MzM2OTkzN0IwNUFEOTI4MjJGQzkzNDEzQUJEMjkKKzoxMDRGQzAwMDBENzhFRUI5NUNGNkM3Q0ZDM0FCMTU4QkI4NDI4OEVFNEYKKzoxMDRGRDAwMDVBNzMxM0Q2RDc2NzRBMkNFQzc3OUYyOTI5Mjg2QzBGNzAKKzoxMDRGRTAwMEZGOEZENjY1OTgxM0I4NkYyQjEyNUZEQ0I3MTUyOTNGN0EKKzoxMDRGRjAwMEI4NkZDQjdDNkVBMkEzQTkzREVFREIzMjlGOUJFODZCMjIKKzoxMDUwMDAwMEFBOUZCQTNBRDc1NDNGQUY2OEI4QTlCRUJCOTBGODJENTMKKzoxMDUwMTAwMDU5MjhGMTlCNDdGNkMxOTcwMjc4MTlFNzJEMkUwMUVGMjkKKzoxMDUwMjAwMEM4NEZDOTUyMDIyQjU5MkY2RjUwRjhEQ0I4N0JFOUFBNDAKKzoxMDUwMzAwMDQyRDBFNTA0ODkzM0UyMDg4NkRDQ0NENUVEOEJCMDA2OUUKKzoxMDUwNDAwMEVDOTBCQkIzQTlCMkZFQThEMkYwQzU1REY0REU0OTZGMDcKKzoxMDUwNTAwMEVEMTY1Qzg1NzJEMkIyRUVDMTExNkVFNEQ3NkZDODcyRTQKKzoxMDUwNjAwMEQxM0NCQzU1MDlBNTQxRjUxNDBDRDIzNEM4RDk2MTZCQUIKKzoxMDUwNzAwMEUzNjRERTRGRENEOUJFNUQzNUZDQ0U4MzgzREVDODQ3RkEKKzoxMDUwODAwMDdGREI1NUNFOUIzMEU0MjVDQjI2RTM3NDFCNjg5RDAxNjYKKzoxMDUwOTAwMEZGNkE0M0FEQ0NFN0RENTA5QjEyREIzRDYyRkZDNTE4RDQKKzoxMDUwQTAwMDY3MEJGODIwNTAyRTRCNEJFNUI4OTA2OEMwMzhDODZGOUUKKzoxMDUwQjAwMDVGMDZCRkVEQ0M0MUU5QjcxQkUzRTlCRTNDREM2OTA5MDMKKzoxMDUwQzAwMEQ1REZCQTMzODZFOTczNTg1RjM3OUNFOEYzRDIwMDM3RUYKKzoxMDUwRDAwMENFNkY1NEVEQ0Q1MkUxMEY1OEI2NkZDMTNBMjIyMTU1MzMKKzoxMDUwRTAwMDVCMEFCOTJGRDlEMEUzQUZCOEFGNkJEMTdCQUFDMDc5MzcKKzoxMDUwRjAwMDlBQ0ZENzhDNDkxQzRBREYzOUY2QjRDRDMzODFFMEJCNTcKKzoxMDUxMDAwMDZBMUZCNzYzOURCQ0M4MUFCNDczMUVFNkI2MEQ3NkU0NzkKKzoxMDUxMTAwMDI1RkY2NEVCMDY3RTNFN0Y2QjMxRTc1RDJFMTA3RTVFRTEKKzoxMDUxMjAwMDQ3MUVEMUNGNjUxOUUzMkUyOTUwRDZCOTQ4QkUzRTFBODUKKzoxMDUxMzAwMDI2RjU2MzQ5QUNEQ0NGMjM3OUZFMzNDNjc1NjZBQkUyNTYKKzoxMDUxNDAwMDg1RkYzOEFENjhBN0JEOTg5RURGQTdCNzczNEY5RjNFMTgKKzoxMDUxNTAwMDBFRjJENzEyOTJGNzZEQjRCQ0FFQ0E3QkM0QTZBOTMyQzgKKzoxMDUxNjAwMDJGRTYyMkY3RjM0QzNEOTdDREYyM0RFRDVDM0Y1RTY3QjUKKzoxMDUxNzAwMDVEMUJFRTIzRDdCMTM5NTI3RkI0RDRBOUJDMUZEN0YyM0YKKzoxMDUxODAwMEZBQ0JBOTUzRjFCRDNBMUJFRkRFOTVEODFCRTRGOTdGQUEKKzoxMDUxOTAwMDhCRjBFMzFDODE3QjdBODM5NEFCNkNFMTg3RkZCN0U0RUYKKzoxMDUxQTAwMDJGRUZENDYzREUyREM5NzZCQTMxMUY4QTQ2QTgyNkY5QkYKKzoxMDUxQjAwMEFDMUMxQjY3OTJERkU5QTI5REU5MUNDRDc1NDgyQTg5Q0EKKzoxMDUxQzAwMDgwQTc0REU4NjY2QTdGRkRCNDdFNTFGQTYwNjA2QjNENTIKKzoxMDUxRDAwMEVCODM2MTUxRTcwMDBCNEM3MDM5OTU3NzQwM0Y4OUFCMDkKKzoxMDUxRTAwMDRDRUY5NThCMjlBREVEQjAxRURFMjRGREQ2RjI1REM5RTYKKzoxMDUxRjAwMDFCQjEyRjVFNjI5MUVCQTFFOTlBN0M1RUIxNTczRTE3MUQKKzoxMDUyMDAwMDIyRjZGQ0I5NzQ5Q0M3NDc3Q0MwNzQ2RTVCREZFNzQzMzEKKzoxMDUyMTAwMEJGMUMwRkVDRDZDMDcxOURFNjBDRDI5NzQ0RDFGMkRFRDQKKzoxMDUyMjAwMDhENzZDNEQzQzg1RDZFNDY5Q0I0M0M0MDMwRkFGNTg5OTcKKzoxMDUyMzAwMEU2MUE5QzFGQjE0QUZBQzY3QjVDNUQ5NzY1QjRDQTQ1MDUKKzoxMDUyNDAwMEM1MkU3M0JFNTVDNUMxNzdCODlEOTFDRjE4NUQ0RjlFRDEKKzoxMDUyNTAwMEVGQ0E4RUMwN0I4MkUyRTU3MzkzREI5QkVDODgwNzREM0YKKzoxMDUyNjAwMEQzM0FGMUJEMTREMUY3OUY5NTg1OUExOENGNkJGN0E2NjUKKzoxMDUyNzAwMEI5QjA2RjVCMTE3NUVGNTlBN0UxNkU2OTlGRjRGODNGMDQKKzoxMDUyODAwMEVFMEQ5MjdFNDI4MzVEQzY2REUzRjc1Qjc4RkVDOTdCQ0YKKzoxMDUyOTAwMDc2Q0VDQjY1ODk0NURFMTcxMDQ1OTcwOURFRjdCOEJGOTYKKzoxMDUyQTAwMDhFMTkzMjBGMEQ3NEIxNDZEMDI1NUE4RTQwMjc2QjA0RUIKKzoxMDUyQjAwMDlERTYwQjQ5QTdGOUE0NEQ4MjA0Nzc4NDlDNDVEMkU3NkIKKzoxMDUyQzAwMDQ3RDI2QjAxRkVBMEZBMDU3Qjk1MjBGMkRGQTJFOTMzRkQKKzoxMDUyRDAwMDVGNkI2NEZBQ0REN0UyRkQ0MUQ3ODVFM0E5QjhFMzgzREMKKzoxMDUyRTAwMDdBRThBNzFEMTlGMjlFQzI2OEZBMkQxMDBEMkJCMUVFQjcKKzoxMDUyRjAwMDVENDA3NjIzOUNDQzcyNjE3N0YyM0E0REYxQzA2RUJCNzMKKzoxMDUzMDAwMEYzMUJFRDM2QTlDRjM4Q0VEQkYyRkEzQjNDRUY1QTNDMkIKKzoxMDUzMTAwMDM0QUIyMTE3ODJFQUE5N0RCQ0NGRERCQ0FDOEQzQ0RGNkMKKzoxMDUzMjAwMDI5RTc2NEZDRTRCQTczNTYyRUE3NEQzMENGQkI2QkNGOTAKKzoxMDUzMzAwMEE1RjFGMzFGNEI5NzBBRDAxOTcyOEVCODVFNjIxQkY3NjYKKzoxMDUzNDAwMEU2MjFDRTk3NzhFMTc4OERGRDEwNDMwRkI3RkE3NUU2MjgKKzoxMDUzNTAwMEJDRTU4QkY5N0ZEMTcxQzJERUMzRjUzOEUxMjAzMUM4REQKKzoxMDUzNjAwMDk0Qjc3QzExQkYyMzNBNkZEOUIwRTMyREYxRDI0RThFQTIKKzoxMDUzNzAwMDUzNzNERUM0RDlDNkUyNTc1NTVFQTdCQkE3OEZCN0YwRkIKKzoxMDUzODAwMEY5RjE1N0U1N0Q3N0RBOEFCMzREOTA0RjJEQzFDMjdBOTYKKzoxMDUzOTAwMDcwNzE0MjU3QkVENzQyRDNFMzc2NDYzRjU5RDUyOTY5NEIKKzoxMDUzQTAwMDg4RkYxNUM3QjgzODFGQkZCODVBMkQ4MkZEMkFBNjc2QzgKKzoxMDUzQjAwMEVFODg3NjJCOTc3N0NCODI1REY4RjRFRTVFOEYwNjY4RTkKKzoxMDUzQzAwMEJFN0M3QTVCNkExQUUyRkU5RkFEQjBBNTkyRTYzQ0RGMzYKKzoxMDUzRDAwMEVFRDMxNUUzQjI5MDlGRjFEOTdEOEVFOUMxMzZFODUzNDMKKzoxMDUzRTAwMDM0NUNEQTgxRjIzQjNGNjBCQjc1RDJGMjdBRTI3NDdBQzgKKzoxMDUzRjAwMEJGNkNDNUVFNDQ4NEVBNEE1N0JDMzNEODQ1MkVDNUUxOUMKKzoxMDU0MDAwMDNDRUQ5QUUxQkNCRkJBNjEwQkRGMDdFRERBQzBGNzA5RUEKKzoxMDU0MTAwMDY4NDg0QTZFOEY3RDg4MTVDQ0Y3NDU4QURDQUZCRTU1NEIKKzoxMDU0MjAwMDA5N0Y3MTI1QjUzQjExNzM1RkUyRjQ2Q0RDNkUyQTM4OUQKKzoxMDU0MzAwMDRGRTNFQ0E2MDRGRDNDNUEzNUU3MEQ5RDg4MjU3RjgwOUYKKzoxMDU0NDAwMERBMUY4OTkxRjQzQ0IyMzNDMUMzNzc2Mjc4MDI1OUJDNDgKKzoxMDU0NTAwMDdFNkIyRkY3Nzc0QTJENzVENzAxOUY2QjUyMzU2REY4MEMKKzoxMDU0NjAwMDIwRTAxMURDOTJBRTcyM0IzRUI3QUU1NUY3NDg2QTJCOTYKKzoxMDU0NzAwMEZFNjE5NDVCNzQzQjBEN0YxQjI1RkM2REU0Q0JDMERGQUMKKzoxMDU0ODAwMDA2MEM3RjFCMjVGQzZEM0NBRjVDNkJGNkRGNkVEN0Y3MUYKKzoxMDU0OTAwMEZCOEM3ODcwOTc5QTY2MkZGQ0RENDA4MUU4RUQ2NzNCQzYKKzoxMDU0QTAwMDNCQTFFMEY3QjA1QkFGNEE3RjYxODlFMjU5RDVDOEZFMDYKKzoxMDU0QjAwMDUyNDIyREQ2OUQzNTU2RTk2NzA3M0U5MUU3QTIyMDgyREMKKzoxMDU0QzAwMEQwNEZCRjUwRkI3QUIwOUZGRjUwREM5RDhGQTFGRDUyQTMKKzoxMDU0RDAwMEVDMEZFNUUxMUU1M0YyQkQyMkU0RjVDQTczNEUxMTc5REIKKzoxMDU0RTAwMEVFNzYzNDM5NjE5MUYwMTg2Nzg2QTlGRDM4NTdCNkE5NzAKKzoxMDU0RjAwMEZFMjdFOTdENENGNTNGNzU3QjRERjBENUJEODc5QURBRTcKKzoxMDU1MDAwMDRGRjQ4QzM2QzFEN0U0RkZENEQ0N0VCMjZGQjIwOTlFN0IKKzoxMDU1MTAwMDNBN0U4NkE5RkRCNTQ1QzVBNkZBRUJBNzJGMzRENUNGQUYKKzoxMDU1MjAwMEQwNkUzMUMxMzc5NkRDNjY2QTdGOTNCRkRBNTQyRjg0MjAKKzoxMDU1MzAwMEZGMDlEMEM3MTc5MEY3QUFENTYxRkRFNEMwRkQyRjRFMzMKKzoxMDU1NDAwMDJFQTlGRTBGQzg2MzFFNEQyMkNERjdBRUZDRTU2NzdDODkKKzoxMDU1NTAwMDhGRjU3RUU0MzVEMzhDMUIzMUM2RTI2RjJCOEVGRjA3QUYKKzoxMDU1NjAwMDVERkU2MzQ3RkFCNjBERTc3NTZFMDNERjhCODlEODJEQjQKKzoxMDU1NzAwMEU0NkUxRkVDRDRBMEQ2RTc5REFDNDZEQ0FBMjE0M0RFNDYKKzoxMDU1ODAwMDg3NkU2RTdGQjE3NjIzRTJGNjlGNzE5M0M4RjVBQzNCRDAKKzoxMDU1OTAwMDczOTM5NUY0RDc4ODIxRkI3M0JCMjFFRjc5QzRFMDU5NEQKKzoxMDU1QTAwMDU2RDIzNzIzODZFRjdGQjYyQkMxRkVCQTNCNjc3MUZEMUIKKzoxMDU1QjAwMDE1RkJDRkEwRkUxRjc1QzMyNDNDNTVCMDZCNzJGQjg4NTIKKzoxMDU1QzAwMEJGREQ4NEZDOTQxMTU3NzY1REVEOTE3MTkxMzZDRkI3QjQKKzoxMDU1RDAwMDFCMjVFODg0NzNFMUEwMTNDQTMwQzkzRENBRkQyNEY3MzYKKzoxMDU1RTAwMDI4MEY5MERDQ0YyM0JENTY0RjcyOEZGMjIwQUQzM0YxRTAKKzoxMDU1RjAwMEZDREY2ODlEODlGMjc1NUE2N0EyN0M4M0Q2OTcyODFCQzkKKzoxMDU2MDAwMDY4N0Q4OUYyRURBQUU5NUNCRTVCQTVGMTdCRUY1Nzk1NTkKKzoxMDU2MTAwMDcwRjk0MTk1OUY5RjdGNTRCNTk0Q0I0RkFBMDJGQ0ZDMzMKKzoxMDU2MjAwMEMzRTEzMjhFMTA4RjdCOTMxM0ZFQzlCREM5N0UxN0RGOTUKKzoxMDU2MzAwMDdGNTBBM0RCMkQ1MUE3RTdENUVDQTdGNTJCRThEOTY4NjAKKzoxMDU2NDAwMDRERkVDMkQ5QkFCRjc4RjFGNUJFNTU3QzExRTFCNzREMTgKKzoxMDU2NTAwMEI2RkEzRTk3RkNFREU0NjJCREFGM0YyRkY1NkFDN0EwRjYKKzoxMDU2NjAwMDRGREVDQjlFREEyMzU3ODVCREYzRkYzOTg5RUFERUIzREYKKzoxMDU2NzAwMEI0N0Q5RkU0M0U1RDVFM0UxRUUxM0I4REVGOEQ3NDFFNkEKKzoxMDU2ODAwMEUyRkQ3NDc3MDY3OUFCQzMxOTU2QzA3RjY1QTA4QzVGQzUKKzoxMDU2OTAwMDhFQjQzNkQ0QTBCRUU2M0JFMUM2QkFGOUE1ODRGNzc5NEMKKzoxMDU2QTAwMDFGQkM4NkRDNjU5QzNGNTZDRUM5RjVDQTI4N0RGRkJFNkYKKzoxMDU2QjAwMEU2M0JCOTdGM0YwQUI4NTNGRDQ4OTdBQ0FGQjk5OTJDODgKKzoxMDU2QzAwMDlEMTdGNTIxRkVGRTI4OUM3Njk2RTdEQjRDNzkzQjYzMUYKKzoxMDU2RDAwMENGMzU4Q0UxRkE3OEJCMUJGOUE2QTM5QzYxRjkzREE3RjUKKzoxMDU2RTAwMDcwMjFCRUZDNTJDMjFFRDlGRjM4RDlGRkE2RUZDMkZDMDIKKzoxMDU2RjAwMDdEQUMzRTkxOTczREQyRDk4QUNGMzJDNkFGNDFERTM3REQKKzoxMDU3MDAwMDk3MjNEQkQ3RThFRDQ3NjlENDdGMzJGMEYzNEJGQzhBNkYKKzoxMDU3MTAwMEE5QkRDNDlGRjVEQzI4N0MzMzE5QUI2RDU5MUY5QjJFQTYKKzoxMDU3MjAwMENGMjc4RjNEQTdENzdCRTQ3ODNCNTgyNThDMzMyNUE4MUUKKzoxMDU3MzAwMENGNENEMTg0OEZGQUNCQ0MxNDFFQzRERjQ2QTUzNjY0N0YKKzoxMDU3NDAwMDcwN0IzRDlGMjFDMTJBQkY5N0U0OTFGNzcxNzVGRkJCMjQKKzoxMDU3NTAwMDI2RjcwMzg4MDBDMERGQzg0QjMyRTY2REU3NzZFMTBDMjAKKzoxMDU3NjAwMEY4Nzk5RDE3REJGOTdCOTlFQTRFMkZGNEY1QTc1RUFEMkEKKzoxMDU3NzAwMEVGMDhBQUI3M0EyRDNDQkUxQTlGM0MyRkZGRDY4QkVFRkUKKzoxMDU3ODAwMENFQjg1Rjc0QjJFRUFGRkYxM0ZFNUY4MUY3NDczQUY3MTIKKzoxMDU3OTAwMDQ5RkVFMzkyQjdDQzU2NTg5OTRGRkYwRjZEOTNGRjkyOTUKKzoxMDU3QTAwMDVFMjQyRjE4M0ZGMTlGRjkwMTdFRUFGQzU3MENGQUU4QkUKKzoxMDU3QjAwMEZDM0ZDRkFGNjU5MUY1QkE3QzVDQzhGRjkwRTRCNzJFOTMKKzoxMDU3QzAwMDRGQTM5QzMyNkYwMkVEQzFGRjkxNTYyOTBGMzUzMTMyNDQKKzoxMDU3RDAwMERGRTNBNTg0QzI4NzcxNEYxNkQxQTYwOEYxRjk5MTg2M0YKKzoxMDU3RTAwMEJDRjhFNUY5RTFGRkFERkNDRkIzQ0E3QkU0MUM2NTRFMjQKKzoxMDU3RjAwMEJFQTdFRTUyRjIzMEJCNTkxNEUyREVDRDhEMDNCNTdENkIKKzoxMDU4MDAwMDk4RDdDNUU3RENGNTgwRTc4QUQxODU3MENGOERGQUE3RjgKKzoxMDU4MTAwMDJFNTJBRjdEREQ2QzAzNkMzQzdGMUJFRDA2QjVENjVCNzUKKzoxMDU4MjAwMDlENkZDNzQxRUYxOURGMzFEQTdEQTU3RkFGQjVERDQwNTAKKzoxMDU4MzAwMEZFOUQ4RDI1RTM0MkVCNjBCRkM2NTc1QjM5NkU0RDlFRTIKKzoxMDU4NDAwMDA5QzMwN0M5OUVDOTdDNEU1RkEyMzcyRDMyRkZEMzczQUYKKzoxMDU4NTAwMDYwNzExRUVFMEI5NUU3Qjc0NEJDRjRBQkRERjQxRkY0QUEKKzoxMDU4NjAwMDZBRTFGNzQ1Q0JEMTlGNTBCNzVCQjFFRTM4OEI3QzVBREMKKzoxMDU4NzAwMEZBNEU2MUFBRDkzRjFGMUZCNUJGN0U1NUNFOTdFQzhGNTgKKzoxMDU4ODAwMDVGNzU4OTdCQUI3RjM3NDJGN0E3QjM0NUY2N0ZGMkRFQzIKKzoxMDU4OTAwMEQwODc0N0IwN0VCRUJDN0I0MzdCOEIzQTk2ODNCMUM1MzUKKzoxMDU4QTAwMDMyOUY4QkM2NkYxOTg4Qjg4RDRGRjgwMTE3MEFCRjE1NDQKKzoxMDU4QjAwMDcyMzA1RUQ0NUFFNUJBRDI3N0EyMjI4RjU3RUQ0QzlGNTAKKzoxMDU4QzAwMEFCNDU5ODlGNEYyNDgzMDI2MzcyMEQ4OTBGRTA5N0UzRTUKKzoxMDU4RDAwMDI2Q0RDNDdEQzA2MzcyQzc3NEM3RjM4OEZCRjNGRTAwOTYKKzoxMDU4RTAwMEZDMkE1NEVENkZBRTg4RkJGM0Y2OEY5NUYzNkRGMUI1OUUKKzoxMDU4RjAwMDMyREVCNERGRDlBRDREM0ZGNDU1QjJCN0REN0I4MDJFM0IKKzoxMDU5MDAwMDgyQ0IzRjkzM0RFRTRFRTM3RTg1RUMzMUUwQUI3QTU3QTAKKzoxMDU5MTAwMDBCQkM1N0U4MzZFNzFEMTlFRjVGRUQxQTIzQUMyOTE3Q0EKKzoxMDU5MjAwMEI3Nzc1NzBGRjg2MzI3RDBGOUI1RTQ1RTYzQzFBRkQ3RjcKKzoxMDU5MzAwMDkyODc4QzQ1M0NGRUI1RTQwRTE2NTkzQUVDNUNGNjdGMzYKKzoxMDU5NDAwMEFFN0I1QkY4MTlGM0EzQjVCRjQyRUVDRkI4RkY3NzZDMUYKKzoxMDU5NTAwMDdCNzlGRjZGMzQ1REFGMTIyMTEzN0QyN0U4RjRGRDExRDEKKzoxMDU5NjAwMDc0RkQwODdBMzQ5QUFFRkJGNDc1QzU3RUU3M0I3QjhDRjgKKzoxMDU5NzAwMEJDMjlDNDkzQkIyRjZGNjBGODU2OUI5QzA3RTVDRjREQTUKKzoxMDU5ODAwMDJDNDA1RUY0RTJGNzY0N0VDNzUxQTAwMkJCQkI3NDM4QzIKKzoxMDU5OTAwMEUzM0Y2QUU5NTA2MUNERTVGREE4MDBFODVERTY5NDc0NTcKKzoxMDU5QTAwMDNDMTk3ODY5MDBFRTI5QUY0RkQxOEU4M0FGNUZBRTUzQkIKKzoxMDU5QjAwMEY5QkNGREM5Njc2MjM4MUU3NzI0Rjg2QzIyRTg2OUM4MTMKKzoxMDU5QzAwMDcxOTlFQTVFQ0RCRkE3RjE5QTJBRUY1OUZBRkVFNTJDNEMKKzoxMDU5RDAwMERDMkI3QTMxQjkyNjc5RkU3QUM0QTAzNkU0Mzk5RUU0MEMKKzoxMDU5RTAwMEI5RkY4NUYyMkMzNkM5N0IwQ0NBOUM4NTZERjJEOTU4NUIKKzoxMDU5RjAwMDc3QkUzMEQwQzdGQUMyMjVDMkI3NDBGRTJCODQ1QzFGRTkKKzoxMDVBMDAwMDU1Mzg1Rjk3Rjc1NDEyOEM3M0FGRDE3RUQ1RTA1ODZBNDIKKzoxMDVBMTAwMDRGRjU3NkE3Q0MxNzM2Rjg5REU5OTBGNzU4NjZDNjA5N0EKKzoxMDVBMjAwMDE3RTIyMDQyQ0JFRDBCN0NGQjc2RjdDNThERTRGQ0MyODAKKzoxMDVBMzAwMDlDRUQ5MTc5NkJBM0MyRkQ3OERGNzlGQzQxOTVGM0REOTQKKzoxMDVBNDAwMDVGODk5NUY3QjgzNzEyM0YxNEYyNEY3RkQyQ0YxRkRGMkYKKzoxMDVBNTAwMDk1Rjg5ODNDNDQ0QjFCODk3MUE5REZBQkU4RjdGNTFFMUMKKzoxMDVBNjAwMDhBNDhFMUY4Nzk2RTNDQUZCMzdGRTQ3QTNENkJBNEFFMkYKKzoxMDVBNzAwMDVGMDY4ODAxRkZGNEY3MTFEQUNCN0I4NDE3QkY5QTFCMEUKKzoxMDVBODAwMDA0REU4QkFCQzlBQUE1RjJFRjVDRjAzRDcxMzU1ODlGREYKKzoxMDVBOTAwMDY3QjdFQTlENTFBMjI3RkZGRUM1OTg1NDFCRTc5OUZGRkYKKzoxMDVBQTAwMDZGRkI3RDg0NENBMUYxRkNGQkNGRkU0RUMyNzhGOUU4ODAKKzoxMDVBQjAwMDgyREY0OUM4NEM1Qzc1NDA0QjZERkQ5RDhDRThERjQ5MjkKKzoxMDVBQzAwMEM4RDRFRkE3MTY2RTY5M0Y4Q0RGNDdCODUyRjgzODJGNUQKKzoxMDVBRDAwMDdGNUNCQUQ5QUU4QzcxOEQzRUUwRTJEMjFDRUZDOUJDQkUKKzoxMDVBRTAwMDQ0M0VENzREMjNGNTczOUQ5N0UyN0JCOUQwRjkyRUNGNzUKKzoxMDVBRjAwMDc1NDIwRUY0REYzQjA5NDIzRThEREYzQjMxRjg2RUZDMTAKKzoxMDVCMDAwMEVFNDk0RDdCRjlCQjI3RkY2QUJGNzMxMkNEOUZFOERGREIKKzoxMDVCMTAwMDNEODlFNjRGRjRFRkEwOENEMjYyOTk0RTYzQ0FFMjU5RjgKKzoxMDVCMjAwMEFFMEQzRTREQTdGRkQ4MUZDMEI5NUNFNUJGOUY1RkY3MjQKKzoxMDVCMzAwMDQ3Q0REM0IzNjJGNTIwREM1MzdBQkE1OEVBRjU4QkQ5NTYKKzoxMDVCNDAwMEZGNjk1RURGRUZBMTZGQjZFOTdBQkZDNjI5RTMyMUJFMjgKKzoxMDVCNTAwMDFBQUI4ODE5MjU3MDNGMjFFN0NCRkVBMjQ2REUwMzU1MUMKKzoxMDVCNjAwMDYzOTVGMTgwMDBGMTE1RjdFMjdEMUJGQjBGNzk5RjIzMTAKKzoxMDVCNzAwMEY5NDdCNjhFODhDQkY4RjlGRDgwRERFOUFBRjE0NEZDM0YKKzoxMDVCODAwMDBFRDY1Mjc5MUVGODkwNDVGRTlFRDRFQzFDQkY4MkZEQzUKKzoxMDVCOTAwMENCNEU1REI1QTdBMEFGRDI0NUQxQ0VGOTFDOTdGNzBGN0MKKzoxMDVCQTAwMDgxN0U5RkY1Mjc0NzE2RUE2Nzc1OTFGNzQ3OEExQ0Y5QUEKKzoxMDVCQjAwMEJCNDEwNkZFQjMzMjY1NUVENkIzMjM3NTNERUU5MTc5RTcKKzoxMDVCQzAwMDU4N0I0NkNBRkRDMDA0OEY4QkNGMzUxNEU3MDgzREJGMTQKKzoxMDVCRDAwMDU1NjRDREVBMEYzOUZFODRGREY4MTZCN0Y0QUIxQjZEQTIKKzoxMDVCRTAwMEYyMUVDQkMwQUIzMjlGNjc5REZGNkRGNkZCMzc5MzVGMTQKKzoxMDVCRjAwMEFCNEFGRjY2RURCRDFDNjc0ODE0RDhDNzdEMkNBNjM5OUIKKzoxMDVDMDAwMDE5RjhGNzVBMkI0Q0ZFNDI5RkEwRDM5NDk3REM2RkFCNDgKKzoxMDVDMTAwMENCMDRGNzBGQTU5QkRBNUZCMUQ3NkRBQUY3ODY3QjlCMDQKKzoxMDVDMjAwMEVBNzMwRjdBNENGMEEwODY3QzUzRkIyMTFGRjg0Q0YwRUUKKzoxMDVDMzAwMEQwQzZGMUE2RjZDMzhGMTQ5OUUwNTMyM0JCNEEzQTQxNkMKKzoxMDVDNDAwMDI2NjkzQ0IzOTZCODgyRjI1RTdDMTkyN0U5NjI5N0ZFMUEKKzoxMDVDNTAwMDU0Q0Q2RDcyM0Q2MUU0QUY2QkZBM0M4OENFNUZFRjZDNjIKKzoxMDVDNjAwMDk1RjlFQjc2QkZCNDZCNUFCQzVDREZCQURBMDk5N0NBMTgKKzoxMDVDNzAwMEU3NjIxQTE4QzZERDEwOUMzNzFFMzBFNzk5Nzc3MkNBQTIKKzoxMDVDODAwMEY1OTU2NUFDNUM3RkQ4RjUzQ0YzRDhERUYyREM4QjkxMDIKKzoxMDVDOTAwMDU3NEVFQjBBMUZFOERENUQzNENFRTBERjJGRDBFRjEzNjcKKzoxMDVDQTAwMDhEOTZFN0JGOEZENEVGNzM4QUMyQkI4QjVEOUVBN0FCODcKKzoxMDVDQjAwMEI5Q0RDRUZCRTc1QUJDQkQ0OTQ5QkMxMDlGNkU3QTdFNzgKKzoxMDVDQzAwMEU0NjY2N0RCRjczRTM5NDc0OTM5QkIyMUFGNDg4Q0EyMTAKKzoxMDVDRDAwMDc2OEY5MkQ5NjJGRkVCODJGRTNDOEREMDc3MzVCRkIyRDIKKzoxMDVDRTAwMDczREVGOEE1RkE5Qjc1ODUxQ0NGNEM4QjY1RjZFNDFDMUEKKzoxMDVDRjAwMDVFMEZGMjM5NDBBM0RGNzRGNDRCRURGQUY4NzQzOThGN0MKKzoxMDVEMDAwMEVBNkY1NjUyMzNERkJCMjY5MkVDNkVDOEFGMTZCRjkyRDUKKzoxMDVEMTAwMDYxNTdBQzQ4NTZEQkEwN0JFQkI5MEM5OUE3N0ZEM0VBNUYKKzoxMDVEMjAwMEQwQkRCRDA4Q0Y5OUY2NUE5QkJDNzAyMDY4ODMzQzRDMEYKKzoxMDVEMzAwMDI4MjAzRkQyOEJGOEVCNDNFQkUzODkxRjhGRTIwN0VDN0YKKzoxMDVENDAwMEM4Q0ZFOEIyQUZEREVDNDA3N0Y4OTlDRDJDMEY0ODQ0Q0UKKzoxMDVENTAwMEMxN0UyMkZDNEY3NTYwMkJERTZCQUU5NDc5REZCRTUxQTUKKzoxMDVENjAwMEMyQjhGRjgwRjE2QUQxRTMyMzJEMjI3NEZFRkM0NEEwNjcKKzoxMDVENzAwMDBENzlEM0UyRUJGOTFDODI2QkIxOTRBN0NFMTFFN0FDOUQKKzoxMDVEODAwMEIwRkVGQzlGM0EyRjIxQjA0MzRBRkREODZBODUzQ0U3MUMKKzoxMDVEOTAwMDc4MDlGQTE5RTc1NERDQjdEODhBMzZDNkUzQkM4ODE4MDQKKzoxMDVEQTAwMEFGNDREMEUxODkyQkE1NUMyRTA2MUREQUNCNzZEMDQ3MTcKKzoxMDVEQjAwMDE3NkI0NzdFNUYxMkY2MTc1QTg0M0JDOTc1ODlCOEZBOEMKKzoxMDVEQzAwMEZGQzRGODMzQUQzMkNFOTBFNTk0RTc0NTNBNUIzNUQ2NjMKKzoxMDVERDAwMDE3RjZERUZBM0Q3NzE3QzhCQkFFMzdGNDM4NTkyN0FCNTQKKzoxMDVERTAwMDlDRjc5RDNDNzI1RTVGQTgxNzBFRjBGN0VEOUFCQzM3RUEKKzoxMDVERjAwMDJEOUFCRUZDMkYyMkFFNjI5QzVGODkxRDJCRjU4OEExRDcKKzoxMDVFMDAwMDE3Q0U5RjQzRTkyMUQ3QTEzNjVEM0YwNEJCNUIzOEVGMzYKKzoxMDVFMTAwMEUwQUUwNEYzM0M3RTdDOTRBNDZGQTEzRThGQzlDRTI3RjQKKzoxMDVFMjAwMDdBMDc5QkY0ODRDMEJFNUVDRDBBOTVGNTA0RTlDOTdBNzEKKzoxMDVFMzAwMDhERjAyQ0M2QkQyQ0FFRDZERjdCQkJGOTAxNjlDNzQ2MDEKKzoxMDVFNDAwMEY5OEExRUM0QkVDOTlDMzUzNkIxODFGNzE1RTRGREIwOTAKKzoxMDVFNTAwMDBCRjQzODc5NzEyMEVBN0UxNkREMUYzRkJCNUE3MUUxRTEKKzoxMDVFNjAwMDc3MjBFNkFFMzJENzJGODhGRkUyMTNBQzFGNkY4RUJFQ0QKKzoxMDVFNzAwMEE3QzZEOEFGQkI0NDFDRTBGRTUxQkFGREY3MDg4RjlFMDEKKzoxMDVFODAwMDdGQkYwQ0Y4OUQwRENBN0JBRkNGOUY1N0QyRTMzRjJENEMKKzoxMDVFOTAwMEMxNjcyNTdDODdFMDc4NTFCNDVGNjBDMDZFRUM5MzQ1QTQKKzoxMDVFQTAwMERDQzM0MkY0OERFRDBERkJCRURDREE2NjdFQTM0MURGODAKKzoxMDVFQjAwMEYzNzkxRUZBM0UxRDk1Q0I1NkYwN0E0NkU2Mzc5MDNFQjIKKzoxMDVFQzAwMEUwN0RCOTEzNTQwRjNGRjA0NEUwMENCNzNGQjEyQjg2OEYKKzoxMDVFRDAwMEYzNEE0RTdBMUIwNjYwRkZENkQ4QTdFQkFFQzk3REFDNUQKKzoxMDVFRTAwMDk2NUQwOTMyQkYyMURFMjJFMUFERjIxRUZCNDU3RjBGMzgKKzoxMDVFRjAwMDBFQzAzQUI2MzFGMEFDRTk5QzgzRDY2OERFRTc4QjJFNTMKKzoxMDVGMDAwMEI1RUFEREJDREUzQzlDQTdENThENDI3RUJERDVFM0Y0NzEKKzoxMDVGMTAwMDEwN0M3N0ZDN0VCRUE3NkIwMkFEMUZBMUQ3OTA5N0IyMTUKKzoxMDVGMjAwMDIyNTVFMkNGRkEyQjcwNDZEMkNGMkZFOTc3MEQzOTdBN0UKKzoxMDVGMzAwMDlDOUYyNzQ4N0IyMjhFMjk2ODU1NEI2NTcxNzgyOEY3RUUKKzoxMDVGNDAwMEZGNjNGN0MxQTY5RUYzQ0FGRERGNzNDM0Y5N0Q2REQ1NkMKKzoxMDVGNTAwMDUwODY3QjA3OUI0NzdGNDBGRDVFQTdDNUJCMTE0N0JBQjQKKzoxMDVGNjAwMEI2RTYxN0UzNjJFOUQzOERCRjhGNUZDMTY1NjdGM0Y5Q0EKKzoxMDVGNzAwMDAxQTNGQzU4QjcyMzhEQjZCNkVCMjdFOEZBNjdFMTk1ODUKKzoxMDVGODAwMDg2QkU5NkYyQkVCODVBRTE3REI1QzU5MDcxQzBGN0NBMUIKKzoxMDVGOTAwMEZCMzkwREY4NENBRDBFOEY5M0YwOTIxNTEyODY2OTgyODUKKzoxMDVGQTAwMDFGM0M0N0ZGRERCMzJEN0FGQzA1RTM0Nzg5RjEyMzJFMjMKKzoxMDVGQjAwMEIwNUQ4RkNGNjBGQzI4MzE3RTNDODdCRTAyMEM3RDA1MzIKKzoxMDVGQzAwMDE4RkEwQTMwRjQxNTRBRTgyQjNDRkYzQzc5MENFRjZCQzkKKzoxMDVGRDAwMDYzREY2RTZDQzQ3Q0MyQkVEREQ4ODhGOTgxN0RCQjQ4QUUKKzoxMDVGRTAwMDE4RkI3NjkxRURCMTZGMTc1OThGN0RCQkM4N0FFQ0RCNEEKKzoxMDVGRjAwMDQ1QzJEOEI3OEI2QzhGN0RCQjQ4NThFNEZGQjQxNTg2N0IKKzoxMDYwMDAwMDVFRjM0RDM2QzE1MzY5M0QzMDM2NjIzRTYzREYyRUYyOUEKKzoxMDYwMTAwMEZCRDhCNzMzN0Q0RkJCQzVGNEZFOEQ2MkE5RTk3REVDOUIKKzoxMDYwMjAwMERCNDVCNjlGQkQ1NDMxRURFQjA5RDFDQzc2N0RFRURBODAKKzoxMDYwMzAwMDE0OTZBM0Q3QkM0NTE5NTdCNkU3REZBOUZBOTlBRDJCM0IKKzoxMDYwNDAwMEVCMDc4RTYzMkMyRThGRjU0ODdFRDc4RTk3RkNCN0M4NTIKKzoxMDYwNTAwMEYzMTE0QTMzRkZCRUMwOTkzQkVDMTIxRTY3Q0VERjM2MDgKKzoxMDYwNjAwMDRBRUM3QjhEQjVDOTdEMkY5NEQ4Rjc0Mjg5N0QyRjk0NUEKKzoxMDYwNzAwMEQ4RjcxQURCNDNFRTdCQTFDNEJFMTc5RTYzREYwQjI1NjYKKzoxMDYwODAwMEY2QkQ1MDYyREYwQjI1RjZCRDUwNjJERjBCMjVGNkJENzUKKzoxMDYwOTAwMEYwMUVGNkJENTA2MkRGMEJDRkIxRUY4NTEyRkI1RTc4Q0MKKzoxMDYwQTAwMDdFODhGMDk4MTdBMUM3RTBBRjc3MzdBRDMzNDkwRTREMjIKKzoxMDYwQjAwMEVCNEM5NzA5ODZCRjFFRDkxRUZFN0E2NDNERkNGNUM4REQKKzoxMDYwQzAwMDdBRjhFQjkxMzBGQ0Y1QzhGNkYwRDcyM0UxMUI0NkI5MUUKKzoxMDYwRDAwMDc5OUVDMTZGOEY3QzBGN0U3QjI0RENCRjM2RjA2N0M0NTYKKzoxMDYwRTAwMEQ2MjZBRTNCNzUwMDY1NjM4MkYyMjhDRTFCREU3MEU1RDYKKzoxMDYwRjAwMEI2RDlEOEJGNkM4QzUxQjI5MjQ5QTdEQkFBNzdDQzFFMTcKKzoxMDYxMDAwMDBCN0JBQkU3M0YwRTEwQ0QxNkU4MUYwRDhCQzkzQzNFNTUKKzoxMDYxMTAwMDY3Qzg3OUE1RkRCRkNCRTBGQURCRjVGQjExRjgxRkYxRUQKKzoxMDYxMjAwMEREQkI0QkYwRUZDRTE4RkJFREM2RkIxRTMyREIyODhEM0UKKzoxMDYxMzAwMEY2QUQ3MERCRURBMkZCMzdEQTcxNkU1NTA0MUUzOEQxNzcKKzoxMDYxNDAwMDhDQkMxOUVGMURGMTAzQjEwRUQ5QTJGRjhFRjA5NjY1M0MKKzoxMDYxNTAwMDMyMkYzQTVBQUU3RUFCRUJBNzJEOTY5REZCNzEwRUE2NjEKKzoxMDYxNjAwMEI5NThGMUUwREM0N0Y3NUE4RENGOTlGNTlGMjkyQ0FBNTEKKzoxMDYxNzAwMEI3NzUzQ0JEMUU0QkU0QkNEQTVGNUMyOUVEOTE4MUJGNzUKKzoxMDYxODAwMDExMUYyNTdEQzFFNzA3NDczNDM3OEM0OUEyRjY1QTYwQjUKKzoxMDYxOTAwMDM0RkYwRUNFMDRCQkQwN0YyRkQ4M0YwQ0VCQzk3RTAxNUQKKzoxMDYxQTAwMEM1QjczMTQyQ0VBQkY1RUY2OTAxODlDNzEzOEY0RDkyNjgKKzoxMDYxQjAwMEVGQzVDQUY3OUU3ODJDOTFGQjlGQjQ1Q0UxM0NCMzExMEMKKzoxMDYxQzAwMERCODUwRkU3OTRFRkQxRjFFRkI3M0RBQ0EyQkZFMkU1N0QKKzoxMDYxRDAwMEIyM0ZFM0JCQzVFQkIyRUMzOENGNkREMEFCNTgzNDhFRDkKKzoxMDYxRTAwMEM1N0REMjIyNEZDMTlEQjJBMkE3NTU2M0JGQjRDMzRDOTcKKzoxMDYxRjAwMDk3MDU3RUQwRTU5RTgzMUE5OTk3M0MwRTc5ODhBMjRFMkEKKzoxMDYyMDAwMEYwQkRBMTEzRjNERTMyOEQ5N0M5MzUxOEJGNkIyQTc4MjQKKzoxMDYyMTAwMDZEQTgwNTZFQjFBMERGNDk0NDgwMTRDNDkzMDlDNjc4MDcKKzoxMDYyMjAwMDM0NERGOEIzODlCRUQ3NEQyRjY2N0FGNzlFMjkxNEQwMjYKKzoxMDYyMzAwMEJCQ0ZDQzBEOTY1NDdBQUY5RkY2OTIwNUZFNUFGRkRBOEIKKzoxMDYyNDAwMDQ2MkU4RDcxNzg0NjI0QUI4MDI3RDg1Q0UzODBGRjg0OEUKKzoxMDYyNTAwMDcxMEFFQjhGRTgzQzFFRjgwNzBDMkZCN0IxM0QzN0ZDRjUKKzoxMDYyNjAwMDg3QzUwOUU3RjM3Q0ZFOEEzQzlGMzMwNzZEOUNFNzczODMKKzoxMDYyNzAwMDY2Rjk1OUFFMkZERTFEQzM3OTNEREE1QTg1RjU5QUUxRUMKKzoxMDYyODAwMDM3MTg3OTNCNjVCN0JDMzcxOEY0Mzk5NjFEREM5MkRDQkEKKzoxMDYyOTAwMDhERURGQzFGQUY0NDFFNEJENzlEODkzODFBNzc2MkY5RUMKKzoxMDYyQTAwMEVFRUJFMDUyOUU1OUJFNUJGRUZFQUNCRUJGNjNGQzhFQzEKKzoxMDYyQjAwMEE5QzhGMTcxM0U5OEUxMDcwQUI1Q0UxRUI5OEY2M0ZDRkIKKzoxMDYyQzAwMDFFMUFFOTRGNkU3NzY2QUZEREM1QkY0N0E3RkY3RUE5RUYKKzoxMDYyRDAwMDExRjcyOUZFNEI2RTNERTg1QUJDNUVGRTlFRDk5QzU1RDcKKzoxMDYyRTAwMEY3MTU0RTI3NzhCRUNGMTlDNkVGQTE0N0U3NjMyRDhDNkYKKzoxMDYyRjAwMEYyMDMyRkY1RkJBNUMyNjdGNkZGMkVFNkVGRkNGRkYyRDcKKzoxMDYzMDAwMEJGQjdGQ0JGNzNBNTcwMzcwMDgwMDAwMDAwMDAwMDAwMUQKKzoxMDYzMTAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRUQ3RDBCNTg1NTY1MzkKKzoxMDYzMjAwMEJBRjBCN0Y2REEzNzYwNkY1QzA4MEFBOEUwMDI0NTREQUMKKzoxMDYzMzAwMEM5MzYyMjVFQkEyRUI5MjgyQUUyMDZDNEI0NDFEQzIwNEUKKzoxMDYzNDAwMDI2NzZBQzIxQjM5MTFBQ0E4RDdCNDM0OEQ2QzA0NDY5RTYKKzoxMDYzNTAwMDhFRDVENkQ0MzM1MzRERDE2NTRBMjdFQjZDQjU5QTJFRTIKKzoxMDYzNjAwMDlBMjYzOTc1QTY4MkVEMjVCNTNCRTlGMUQ0OUNDNzk5RUIKKzoxMDYzNzAwMENFRkJCRURGNUFCMkQ3NzY4MzY2MzNFNzNGRkZGRkZDMjIKKzoxMDYzODAwMDdCOUU2NkYxQURFRkZFN0VFRkZEN0RCRjI1MTM2RDA2QjIKKzoxMDYzOTAwMDM2OUVCMTMzN0I0NTlGOThDMjU4QzVCRTNEQTUyQzhFMTUKKzoxMDYzQTAwMEIxNTMzNTI2QzZBMDVDNTYyRjMyMkNCMzY3OTkyRjREQkEKKzoxMDYzQjAwMEMwNzI4RTIxMDJDQTY1N0Y1MDFDODJDQ0Q4NzdBQkFBRUUKKzoxMDYzQzAwMEY3QkYwNjRERjdBRjgyMzYxNkM2OEFCRjFGQ0M1ODI2RDgKKzoxMDYzRDAwMDYzMURBQjY0MkE5NzdFM0Y4NkIxNThDNjBBMDIxMUY0NEEKKzoxMDYzRTAwMDdFRUVGNzg5RjRCQ0ZFRkJDQkU4N0RCMTBERkFDMUZDNzMKKzoxMDYzRjAwMDgxMURDQ0I3MUFFNjNCRTVCNjUwRjlENDRFRTZDM0Y5OTkKKzoxMDY0MDAwMEYxMTczNzgxQjExMUY4MDcwQzk5QzFBNDNDMzY4Q0IxNTIKKzoxMDY0MTAwMEQxOEFCMDA3QkFCMzU5REY1RjQ1RTNDREZCM0U4M0M2RUYKKzoxMDY0MjAwMEJCNjY3QzQ1QzMwMEU4MEZCRDFENjlEMDdFRDZGOEY3N0EKKzoxMDY0MzAwMDcyRkFDMTdBNURFRTI5NTkyMjk0OEI4REZFMzkzODdFMkQKKzoxMDY0NDAwMEIxQzNDNERDMjlGOEZFNTY0MzAyRDQxNzMyNTYxM0VCMEQKKzoxMDY0NTAwMDgwRjY1MEM2RkRCQTVDQUM0Njg4NjFFQ0NFODlEMDY5NDYKKzoxMDY0NjAwMDAwOTQ1OUNERUIwMzEwMEU1Qjk4NjMyQkJDOUFFN0FBRkUKKzoxMDY0NzAwMEM4QzY3NjYzQ0E5ODIwQzJENEU1NTFBQ0E2MURGNzYyOUYKKzoxMDY0ODAwMDBCNjQxNTVEQ0VEODBGRjhCQjBFREVFMzIyQUZDNEM1OUEKKzoxMDY0OTAwMDI3QkExNEE4MkZFRjA3N0YwRUEyNkQyOUNDQ0E5ODNEMEEKKzoxMDY0QTAwMDlERDc1RkE5MjRCQUJDQzNFMUVGOTY3NThBNzUyMENFNEIKKzoxMDY0QjAwMEM3N0Y0M0NERDAwRUU2MTFFRjM0RkI1NjAzRkM1RDM2QUIKKzoxMDY0QzAwMEVCNjE2MTJDNTRCOEYzOTRDMDI4REVFNjg3NTRDNjg2OEQKKzoxMDY0RDAwMDREODIzRkIyRTA1QzBDODY4NTRFOTg2N0MxOEEwQzczOTIKKzoxMDY0RTAwMDY1N0FDRjNBQ0NEOUQ5RjNBNkMwM0VGMkYwQkM2MUJDRjQKKzoxMDY0RjAwMEU1NkI0QzNFNEIwQTNFRDNFMjk5QURBNzVERTg3MzExQzQKKzoxMDY1MDAwMEMwNTc4RUM1NzUwNzZFMTcwMDNFRjMxNEE2RTRDMjVDMzMKKzoxMDY1MTAwMEYzOTlCNjJGRTY2N0IwOEUxQkQ0QjJEN0FGMDQ5QTZDNEUKKzoxMDY1MjAwMDA0MEYyQUNGRjE4RjcwQjk2MTFEMzc1QjAzNTMwMTkzQkMKKzoxMDY1MzAwMEQ4Q0ZEMzZCRjIxMzBEOENCRDYxRTI3MEI1OTg1Q0NBRjUKKzoxMDY1NDAwMDYwNTg4NzY5N0I4NjdGQjA4Q0ZCOTBFODNEMzMwNjEyRUMKKzoxMDY1NTAwMDlENzZEOEM3REFGNkZCNDZDMjdCQUYyMkYzRkQ5OTVCODYKKzoxMDY1NjAwMDRDMEMwNzYyM0U5MzEzRTBCQzI4OUQyOTNFODRCQjkxRUUKKzoxMDY1NzAwMEUzRDE5MTM1MkYzREREMkNGNEFDRkY4ODg5Q0Q2QjBGMzUKKzoxMDY1ODAwMEIzQkYzQUM1NDBGMzZDMDNCQzk1NDczMkY2REI1NTU2QjIKKzoxMDY1OTAwMDdBM0VCMTRBNjIzMkEwRTA1M0FCMTJBOEZDMzRFMDMxM0IKKzoxMDY1QTAwMDNFREI1NzhEQTJGN0NGQUQ3MjUwRjk4NTU1OTNBOEZDMEQKKzoxMDY1QjAwMEUyMkE4NUNBREI1N0U1RDNGMzhGQUI5Q0Y0QkU2MEI0MDcKKzoxMDY1QzAwMEVCMTYwNUQ2RkI5MDQxMzk3QzBGRUM2RjkwRDhDMjEwQ0EKKzoxMDY1RDAwMDZGRjFEQ0FEMTM3QUNFMzdBMkU1QkIwQTNDOEYyQTlCNjQKKzoxMDY1RTAwMDU5QzY3NTU3MDE2ODVDQjA4RjRBQzVFQUE4MDc1MDAwQzQKKzoxMDY1RjAwMDZDMUIxM0EwNUMyRUIyRUU2NjQ3Qjg3M0U3NzA3QzZDMjAKKzoxMDY2MDAwMEZFN0YyRDM1NDBCQkM3RUU4QTI0QkFENUUwNTc2NjNFRTMKKzoxMDY2MTAwMEYwQkEzNUE1MDc3RTFGRDVGRURBQzQwQzc0NkM2OTMyNUEKKzoxMDY2MjAwMENDN0I0MzREODRBMzM5MDVGMUMzRTlDMUY1NDZBNTNCQjUKKzoxMDY2MzAwMENDMkU4MEQ3QkMyOThDQzZCRDMyRDVEOTg4RUY2RjVFRjEKKzoxMDY2NDAwMEJCRUJEMTBGRjBGQzc2QTY5ODVENzA5RTE1REIzMzFBN0MKKzoxMDY2NTAwMDEzNjRFQ0U3QkE1NzgxNzYxNTM2Qzk4Qzc4Nzc4QjM3OTcKKzoxMDY2NjAwMEM2MkNFM0Y5QzcwMzNEMjA2RUIzRUVFNDYyN0IwRkRDN0EKKzoxMDY2NzAwMEI3MjgwMjhEN0I3RDM2MUZGRjFCM0MxRjZBRDc2MjJBMUQKKzoxMDY2ODAwMEQyQjVFM0U3NzMzRTNEMUM5ODgyRjBGMjAwRkI1ODFENDMKKzoxMDY2OTAwMDgzRjRGMEUyMTQzQzc3RTk0RUEwOTFDOUIwMUVGNjNFQjcKKzoxMDY2QTAwMEQ1OUIxMzk4RTQ4OTM5MUY1RTgzRDkwMTAxRUIxMzAxNEYKKzoxMDY2QjAwMDk2RUVDOTNERjA2QjFFNTU0OTdDQ0UwNDM0MjhDNjA0QzUKKzoxMDY2QzAwMEMzOEYxMTNEODVFMkNGRkJCODBGODA0QkU1MEE2MTc1QTIKKzoxMDY2RDAwMDAzQ0M1RkQ1MjZGQTA0MDFFOUFCRTAwREEyQUY1NjQxMjkKKzoxMDY2RTAwMDI2RkE3QTcwOTgzOTkxRTg0RDkwOTA3RjE1RjQ5N0E3MjMKKzoxMDY2RjAwMEM2NDNGQkVFRkIwNDY5QjM4Q0Y0MEE3MzhERUIxOUI3NDgKKzoxMDY3MDAwMDZBRkQ2NEEyQjcyQTFGM0MzMzdCQTdDQjlGQjVFRTQ5MzUKKzoxMDY3MTAwMERBMjFFMzMxMkE2NjVDNjc5NUE0OThGQjA3RDFGQkEyRDYKKzoxMDY3MjAwMDE2ODFFODIyQjRGQzlBMjI3MjNBNjI2RjlBMTA2RTY1NjIKKzoxMDY3MzAwMEMzNjVDMTkzODFGQkUxRjhCMTYwNDU4QUI5RDI4NkY1QTIKKzoxMDY3NDAwMENDNkY4MDc1MTVBNEIyMzdCMDVENzcyQkFDMzc4NUNGOTEKKzoxMDY3NTAwMDMzMkU2OERDNEExQzM3Njg1RTY4QkZEMDA5RTU3NzE1QzAKKzoxMDY3NjAwMDNCQzFCNTQyOTJDRDg5Mjg1NzI0ODlENjU3Qjk2Mjk3NDMKKzoxMDY3NzAwMDA5RTFCMzA4RTAyQzY0MjAzQzFDNjYxQjhFQkYxNEM2RTQKKzoxMDY3ODAwMDA3RjhERDIwRjlGM0IwRkU4Njc0OTlENUMzMzk1NDdBNDEKKzoxMDY3OTAwMDMzQ0NDODlGNUM2QkY5M0NBRUE2MThGM0U1NTBBRTMwMjUKKzoxMDY3QTAwMDRBRTYyNDI4OTc0NTMyM0EzNzU4OUYwRkZCNTcwMTNDNTkKKzoxMDY3QjAwMEZBREI3MDVDQjYxMDY1NEIyODVDMkFENEY1NTZCNUM0N0MKKzoxMDY3QzAwMDk4MTdFQkRFQjc5QUU0NzRFMjZCNEEzODdFMjE0RUUxMEIKKzoxMDY3RDAwMDc4NUJFOTJENEE1RTg3RTdFREI2NEI0NEI3NDZDNUVDREEKKzoxMDY3RTAwMEMwNzVBOUYwOURERkI2Q0U5NDEyRDRGRjVCMTU4RkM1OUUKKzoxMDY3RjAwMDI5MUNDRjBBNTJGRDY5MDJFRUY3RDYwODA3QUU3N0JFMTQKKzoxMDY4MDAwMEQ0NjI0Mjc4OUU4M0YzODMxQzBFOEIyNTdGMUE4RUJGNDEKKzoxMDY4MTAwMEQ4Q0FFMTcwMEUzRkRBRjRFN0RBQjMzRTBFRUZBQUI2NUIKKzoxMDY4MjAwMDBBQTJCRjFCOERDRUU0NzVEMEZGNDY1OEE3MUI5RUYzNkUKKzoxMDY4MzAwMEQ3RUY0QTEzRjAwOUY0MkUyMDdGOTA1Q0M5Q0UyMDdBNUUKKzoxMDY4NDAwMDNCRkVFMEY1QzlCNDdGNTgzRkMyREJFRTkwQTcyMkRGRTQKKzoxMDY4NTAwMDAxQkMyMUI5QUJFMTRGNzkyNkE3NkJBRERGRTAyOTQ2M0EKKzoxMDY4NjAwMDlBNzdGMDk0NEJBM0Q3QUFCNUVGNTFGRDIyQTA1Nzk0ODUKKzoxMDY4NzAwMEI3NjZGNjgyODBGNTY2NjA4NEUxRTgzNzA5NDc4NkY2RjgKKzoxMDY4ODAwMDM2QzAxRjc3NjIwRkZEQ0U2NzgxRjlDODVGMTdBRDJENDcKKzoxMDY4OTAwMDYyQUUyMEZFMDNGMkI2RTZCOTMwRjA5QTg3RUJDRDIyNjUKKzoxMDY4QTAwMEI5NDVFNzBENzRGODFBRUJERjUzOUZBRDlFNzc1OUFBRUYKKzoxMDY4QjAwMDlFRkU3MTNDMUNEN0ExRDU2N0ZCRDM2RTRERUY2OUFGMkYKKzoxMDY4QzAwMENENUJENjlGRjc0MzdBNDAzQzc0QThGMEMxRjZDQkE5QzQKKzoxMDY4RDAwMDNEMkY4MzNDNUVERDgwRkNFMTNFRDE2NzExRjBGOTc4MEQKKzoxMDY4RTAwMEMzNDAyQzNGMEJEMjE2QjZGNkM1RjI5N0RFOUQwQkNGRjgKKzoxMDY4RjAwMENGMUZEQTU0OEVGQkQzRDZCMTE4RjQxREU0MTMzN0FBOTgKKzoxMDY5MDAwMEYyQjlDQTFGOUU1RkZDNjI5MkVCQkEyOTU5NDFGOEYzQjMKKzoxMDY5MTAwMEMwRUY0NzIwRkZGRUUyRTk3N0QyMTBDRTFGREIzOUJGODAKKzoxMDY5MjAwMEZCRDlFRjFGMzdCMUQ0OUVGNTU3MzZCRDY3QUFCMDA1MjYKKzoxMDY5MzAwMEMzOEJGM0JCRTY1MTA3RTlGQzE2OERFMkZEMTY3OUJGNjgKKzoxMDY5NDAwMDI1RjlDNTQwN0VBNUE1OUM3RkZFMTVERTY3NzlGQjVBMUIKKzoxMDY5NTAwMDA3QjU3N0Q5RkVDQ0NGN0YxMDkzQzRDNDBCOUZCNzc2MTEKKzoxMDY5NjAwMEJFQTFFN0ZFQThDOUU5NEY0MDdEMzRCNTQ1NDdGRkExNjgKKzoxMDY5NzAwMEZCQUY1MEQ3NUQzNTg1RjNCNzFCNTQzQ0JFQTFCQTk1MkMKKzoxMDY5ODAwMEZBNTUzNjU1M0M4RTdBRUY3QzhEN0VBQkY0RUZCNUYzM0QKKzoxMDY5OTAwMDM5QjVENjQ0RTc3MzZBNkQ1QTIzRUE4QkE3REFGOUY5NTkKKzoxMDY5QTAwMEZDOEJEODNFNzYyNUI0RkI2MkQ5RDY1QjEyNTM0OTJGQjcKKzoxMDY5QjAwMDQ5NDZCRDA0Q0YwN0Y1RDIxQjU1RkQ3NDA5OUMwRkVBNkIKKzoxMDY5QzAwMEE3NjFDRUU3MzZENENCQjRGMjkyQzdGOEY5MkM3QTdBMjUKKzoxMDY5RDAwMERGMjc3Rjk0MDlGRkY4RkVFRUIzRjg5MEZGNTZCNjNGMkQKKzoxMDY5RTAwMDdCRTg0QTc4M0ZCRkE5RDU5NDAyRUQzQzUzNTIwODNFNUMKKzoxMDY5RjAwMEU3Rjg3QzREODZDNEEyNjE3RjREOUI0Q0M4MDczQ0RBMEEKKzoxMDZBMDAwMEJFNDNGMDVDODMyQjMzNzIzRUYzMjhFOEYwQ0QzMTVDNUIKKzoxMDZBMTAwMDFFMDlGRDdCREFDRjY3NEEzQ0YyMTFFNjFFQzJCNkM2RkMKKzoxMDZBMjAwMDlEQkZGRUE3NTUzQTJBNDg3NTk4NDlBRTM1NDRCMUNENjkKKzoxMDZBMzAwMDEyQUVBM0UyN0UzNkI2NzdGOTc1MzQ4MkQzMDU0ODVEOEYKKzoxMDZBNDAwMDA1RTlGM0U4MTQ0NzMyRDI4NUE2QkY4NkI2REZBQUQyOUQKKzoxMDZBNTAwMEQ3RTBBOEY2RjlCOERFQzFCMTIwREYwMUM0QkY4OTU0ODAKKzoxMDZBNjAwMEIyNTFFRkY5Q0Q5NTU2QzlFM0MwRkUyRTE5RUIyRDU2NjQKKzoxMDZBNzAwMDI2QTE3Q0RGNkM5MEM3MTE3RTgyN0U3RjRGMjJDMjMyQkUKKzoxMDZBODAwMDkwODU3QzZGRjhCMkMwQjdCODNFNDRBNzg4NzFGQzY5QTYKKzoxMDZBOTAwMDg3N0RCRkEzQzIwQjU1RjE4MUZDQkQxRjlGNDlDNjc2MDAKKzoxMDZBQTAwMEUyNTM5MUI1MUNGRjQyRjUwQ0FENUZBODdFMTFBQTU3QzkKKzoxMDZBQjAwMEY0QjZCRjNEMTdCOUJGQTMyOTJFMUZDOTg5MDgyNjZEOUIKKzoxMDZBQzAwMDhFQTFGRDJEQzdGMkI5RkQ4RDYyOEEwMUZBOTdGRkYyMDIKKzoxMDZBRDAwMEYyNERBODRGMUVBRDU3NzY5QkExRkVFODFEMzZFQUZGOEEKKzoxMDZBRTAwMDhGREE2RkU4M0VFNzU3NTVFOEY2Nzk4RTZFNUE0NEIyNzIKKzoxMDZBRjAwMDMzNEVCNTY0MjY5MzVEMDczNjBGODNGQUEzQjc0NjE4NjUKKzoxMDZCMDAwMDEwRkU0NzUzQjhCRTAwMTZBMDFERjVDNDZEQUExRDg5MUUKKzoxMDZCMTAwMEZBMzgzRTUxMUY2NzIzQjkzRThFRTVBNzU1QkIxMkY1RTMKKzoxMDZCMjAwMDcxN0M3RjVDQzVCRkIyNDgyNTFBRTU3Mjc3QkQ1RERBMUUKKzoxMDZCMzAwMDhDRjBGMDczQkFFOUFDMUQ0NjcwMDAzRDgxRjM2MzU1RUIKKzoxMDZCNDAwMDJGRTg5NDAyRjZGRTQxN0MxQUU0Qzc3RDI4RUY1OEVENDkKKzoxMDZCNTAwMDMwODZGNjVENjdDQjUxQkIyMTFERjE5MkFGNEY2QkJGMDUKKzoxMDZCNjAwMEMyRDRDMkVFQzA3NjBGMEJCRUFEMzA2RUQ0OEFGN0YyM0YKKzoxMDZCNzAwMEUyNTE0RUI3QTU2NDA4RDA2RjQxRUQ2OUUyODcwQjZDMTYKKzoxMDZCODAwMDAzNjU4NjcyRENFNjZBOUM4OEY1RUI1M0E0RDVEMDJEQUMKKzoxMDZCOTAwMEFBMkRBM0IzMTZGQTJGRjY4RTI0RkI3OTg1MjA5MzdFQjcKKzoxMDZCQTAwMENGRUEwNUIyMkI5OTZBMUYyQ0MxQkZBMEJDQzRGNkM2QTAKKzoxMDZCQjAwMDcwOTU1RjFBOTA1RjJFQkFGRjhFQzY0NDI4MUYzNkIwQkMKKzoxMDZCQzAwMDZFMTE0MDUzNjAyODlBOEFFNTgyMEQzMTBFMEZDQTVCMjAKKzoxMDZCRDAwMDBGREYwRkRCMDg3Q0Q0REFDMzQ3NEY0RjcyQjI2Q0E0Q0YKKzoxMDZCRTAwMEY3QjM4MDZGMzBGRTY4NTgxQkRBNTEyQjRDRUQwQUFFQkMKKzoxMDZCRjAwMDlGODFERUIxOTVFMTdBOURBNEM3QUY1MkYxQTJCM0VEQkEKKzoxMDZDMDAwMEIwNUQ1NkNGMDdGNUYzRTFBRUVFQzNGN0UwQjlEQTBDQUQKKzoxMDZDMTAwMDhFNjYxOUU1QkJCQzVGNDZCOEJGMjUzMkQ0Njc4NzMzQTMKKzoxMDZDMjAwMDVFQkZEQ0NFRUJFMTQ5RkFGMUYyNERBMjhGOTE3RTVDQzIKKzoxMDZDMzAwMDM2MzA4MEZBRDc3QTkxRjhFMkUyNEQyNTAzNTFERjU4RDkKKzoxMDZDNDAwMDBDNjU5NDVGMUI3MDJBQzBBN0M2QjYxQ0RFQUUzNUVGN0MKKzoxMDZDNTAwMDIxMzdGMEQzNjQ4MTM5OTExRjFEMzMwNjhBMTAxRTI3MTYKKzoxMDZDNjAwMDM3QzVGN0FGNDc3REVGNjZDRjA4MDZGNTU1OUJFRTQ5NzAKKzoxMDZDNzAwMEM2RTdDOTREMTFGMzkwOEZFNzRBNDVCOTMxQThGRjZDQkIKKzoxMDZDODAwMDhDQzk0MEJCNUZBM0IzRjQ2QzJFMEY2RUJBMzkyNzFFQkMKKzoxMDZDOTAwMEU1RERCMkJGRUY3OTU0MDJCOUJBMTg3MDU0NDIzRjQ4RUIKKzoxMDZDQTAwMDdCOTRDRjBENEQ5NkFEREE5RTJDMDI2QUQ5RTM1QzIzMUUKKzoxMDZDQjAwMDExNkVGRjYyRDgzOTc3MzJDQTYxQzFCNzJEOTFEQUNCMzQKKzoxMDZDQzAwMEYxNTIxRjc2RjM3MUI0MkIwMTRGNkZCRUZCNDMxQUU3RUQKKzoxMDZDRDAwMDJCQzNERUMyRjlEMDdGRDlDRENGNDdFMzM4RkZGMjYwQjYKKzoxMDZDRTAwMEM3MDQwOURFMUYxQkVGQ0FDNEYxM0YxNzM2NkQ5M0QwRUUKKzoxMDZDRjAwMEFFNURCRjY5MkNDQThGRjFBQTdENTREMERGMzk3NzNFRDMKKzoxMDZEMDAwMDg3QUY2M0IzRENGQjdDRDVEQjA1ODJBNzU2NUVFMEVCODcKKzoxMDZEMTAwMDY3NjZBODk3RkE5OTU5QzJBN0M0NDgwRjNFMjlCMjVBODQKKzoxMDZEMjAwMDk0RUY5QTVFQTJCRDlGOTZDREY5Q0ZDOTdFMkRDOTc4MEEKKzoxMDZEMzAwMEZFNEJCN0FENEI0NkY5RjE5OTlEOTc1RDVCRkVCNEY4RkMKKzoxMDZENDAwMDRFNTg4N0FCQ0QyMDMxQzAzQjk3OTE5MURFQkJDOENENkIKKzoxMDZENTAwMEY1Njk1NjBEQ0MyNEIxNjdGRUEyRUMyODgyRjNEMkY1N0EKKzoxMDZENjAwMDk5M0FCOTg3OEUxOTdDRkY5OTkxRTVFMzNBODY3QUJBMDgKKzoxMDZENzAwMDMzNTA3RkZBQzhFODVGOENFN0ZBMTFFOEE3RTg5NzQ5MzMKKzoxMDZEODAwMENGRTZGOEY3NTE4QjM4MTVERkJCNTcwODBDRkQ0RjFGQzYKKzoxMDZEOTAwMEI1M0M2RjFGQ0VGRDI4RTRDNzYwMkY5QjdDNUJBMUJENzcKKzoxMDZEQTAwMDdEN0NCQjFGRjlERUNEMkZDNDhDNDMzMEU2ODlFOUYxMzEKKzoxMDZEQjAwMDg4M0ZDQjc3OThBNjBFRTZGQTE0NUFEMzZDOTlEMTZGMTgKKzoxMDZEQzAwMDBFNzc2RTM3QTk3QUQ0QjlGMjBCQ0Y5QTExRUY5NzNEQUYKKzoxMDZERDAwMEQ1NEE3RTA1NTA1MzdDQThERjJDNkI3RkY2OEQ0MTMwNjEKKzoxMDZERTAwMERFMkREQjJCMzI3MTFFQURGRDJEMkY3MDM4NDRCMDgwQUYKKzoxMDZERjAwMEI5MjQ0OEFGQUUxOEQ1QkY3MTMwRjBDOEU1RDlGOUFFQTcKKzoxMDZFMDAwMDA3NTExRkMyNzNCQTEyRDQyNDY1NTI0NUJEMTE5RjEyOTcKKzoxMDZFMTAwMEVEOTMxOUJCNDkxRjA3RkQ4QUVDRUI5QkJEN0NCQzlCMjYKKzoxMDZFMjAwMDQ3MUQ2QzRDQTU3RDE1QzVCMkEwRjNCRjJEREI0NEU3MTMKKzoxMDZFMzAwMEE1RjU4NzdENTMzRjhGRjVFRUM3MDJCMDVFQzU2MzY0NEQKKzoxMDZFNDAwMDExRDc0MkQ5QzgzRURFODZGMDYzRDFEMjU2REM4NzkxOTUKKzoxMDZFNTAwMDFEN0IwMzlFMkJDNTdFQUMxOTlFMUI2Qjk2RkYyQkI1MkQKKzoxMDZFNjAwMEFGQjc0ODIyM0MzRDM3RDczRDEzODBGOTY0OTEzOTE5QkIKKzoxMDZFNzAwMEY0Nzc2N0Q3RDA3ODZFMzM5NzNGRUJBMjlFN0VGODQ2QzMKKzoxMDZFODAwMDI4RDdDRUIxMzkwMEJEQTExQzRERjBEOUY5MEIwM0YxQzMKKzoxMDZFOTAwMEY5NDRENkJEQzcwMENGNzgwNjU0MDQwMDFBOTJFQTZBQjYKKzoxMDZFQTAwMDIxQkVDMzM4M0Y1RTc5OUJFQzQzN0UwQzFDNUM0MDNDQUEKKzoxMDZFQjAwMEZGRTY5NTEzOTlCOEVFNkI4NzA2NEUyMzVFOTlFQUE3MTUKKzoxMDZFQzAwMDU3RTQwMkZEQUZDRjU2RTE5MjFFQzhDNDc2MDM3NkFCRkQKKzoxMDZFRDAwMDdDQ0Q3ODgwRTRBMzI5NDFFRThGRkE4QTFGQzdDMkY1RTIKKzoxMDZFRTAwMEZERDU0MDc4QjA1M0YwM0Y4RUYzNkE3MERBQTdEMkZCM0QKKzoxMDZFRjAwMDczMTlBRTRERDlGMDU0MDREM0VEN0U2ODNGNUI4ODc2QUMKKzoxMDZGMDAwMEUwN0UwRkY0MTdEM0M2MEQ0MzNGQzRDNzI5MzhBRTFCMkMKKzoxMDZGMTAwMEQwNTYxQ0RDQTNDNzY2QUI0QjM3MEY5QUI0MUVFMTMyQzgKKzoxMDZGMjAwMDA1MDBDQUFFMDY1QjI2QkQzRjMzNDJGOTVFNjZFOEI2OTEKKzoxMDZGMzAwMEMwM0FCMkJCRkZCMkE5MUVDQUQyQUZGQjMxMTE0NDk1MTEKKzoxMDZGNDAwMDI3MjI5OTY1QzNGOEMyNkVEODI4RUM2Nzc3RkFFRTQ1MTgKKzoxMDZGNTAwMEI4Q0U3QkJCQUQwQ0UxQzRBQzdBM0RENzZDNDhGNEZGMzYKKzoxMDZGNjAwMDEyRjFCOTI2REFDMTEyNTAwRUI1NjcyMDNGNjJCN0Q4QzgKKzoxMDZGNzAwMEM4M0ZCM0UwNkMyMEVERTcyODk3RkVCQTk3RjRGNDlGODIKKzoxMDZGODAwMEE1QkE1RTQ2QjgwRTEyOTVDMzJFQThCRjU3RjIwRkZCRTYKKzoxMDZGOTAwMDE1OEU1RjFCRTVBOEU3NzI4NDA1QUY3RkU3MUQ3RjhEMjcKKzoxMDZGQTAwMDhFODU3RURGNzQ4RjMwM0UwM0VEQkU1MUFDMEVGNEU3NkMKKzoxMDZGQjAwMDc1REUzOUU2QjVBQkEwN0NCNTJBNEY0MkQ3RjU0RDgyRDgKKzoxMDZGQzAwMDZDNDRCQkUzOUI2RUFCMUZGNTkwNkY2QzA2RjI3MzY0NzEKKzoxMDZGRDAwMEVGRENGMzIxRkEyMUIzQUQzNkJGMTg4REZENEM1RjA2MEYKKzoxMDZGRTAwMENCMUI3NjIwMjlFNkY4MTgxMjMxRUMwNzgwRTc0MDU1RDQKKzoxMDZGRjAwMDJFNUREQjRGNkYzRjc2NjY3MzNCQTg1M0U1M0Y0NkQ5NjYKKzoxMDcwMDAwMDQxNzAzRUU1MzZCMjY2QzQ0MzA2NjU5Q0Q3Njg5NTlBRTIKKzoxMDcwMTAwMDYxN0RBRkRBQjYyRDQwRkZENUE5RUY1M0ZCQTFEQzM4NzcKKzoxMDcwMjAwMEI1NzM1ODNGOTZERTNCNUZFQzQwN0QwMkY0ODQ4ODRDOUMKKzoxMDcwMzAwMEU1NTMzQzdGNERCRTk2QUE3MDg5NjhCOURFODRGMEYwQjYKKzoxMDcwNDAwMDAwM0NEMEJGNTY2QTMzRjgyREU4NUY5REEzODcwM0FCQTEKKzoxMDcwNTAwMEVEMkU0N0JDNjE4NjY4MDdEMjBEOUUyRjlFQkYyQzE4NkYKKzoxMDcwNjAwMEJBRDk1NUU3OUZGNzc1NjcyNUZGMkZBMUJDMDBDRTEzNEUKKzoxMDcwNzAwMEUxNUE3RUVBRjhFNUJGNjI3NDZFREZFMjNBRTAxQzFCN0IKKzoxMDcwODAwMEFFNjAzREU3RjdCRkVEQkM5OEQxRDE4NEU3QjA1MkI0MTQKKzoxMDcwOTAwMEI3RTAzOTc4OEM1Q0RGNzMwMzZFNkQ4REExNkVEQkYwMjkKKzoxMDcwQTAwMDVDNTY3QTg2RDMzOTBERjQwMDlGNDAzQjA1OThEQUU2QUEKKzoxMDcwQjAwMDM4RTQyQjA3QTlGRDU2Q0Q5RjM2QUE4NkY4NENCOUM3RjAKKzoxMDcwQzAwMDIyMjFGQ0JFOEI4Q0E2RkUwQ0NFRDUzNDI4MUM5RkUxNjEKKzoxMDcwRDAwMDdDQTVCNjhBMTE1RjU5OTg1RTIzRTBCOTI3RTAwQ0IwMTEKKzoxMDcwRTAwMDlGNEU0M0MwOEVGQjBDNDQ4MDE2MDlDRjZCNzI1MjU1RTUKKzoxMDcwRjAwMEZEMUIzODgyRUE2N0M1RkU4RkRDNjFERjhDRkM0NkI0N0QKKzoxMDcxMDAwMDBFN0VFNDE4ODgyMkQ2RDQxRDNEMUFENkQ1MjZCMDc2MzgKKzoxMDcxMTAwMERBOTc0OUU1MUY0QjZEQTRDRkI1QzVGODg4QkZCNTk1ODMKKzoxMDcxMjAwMDBFNzFFMDVFQkY2MTZBN0Q3NTI0RjE5N0FCMEMwNjJBOTMKKzoxMDcxMzAwMDc3Q0YxRjQ4RjY1ODVCMENCMDU2MUM2RkZFNjhEMjFCMDkKKzoxMDcxNDAwMDVFRkMzQjhGOTc3NEE3MzE1RTlGQzE0NkFDQzdGQUEyMjUKKzoxMDcxNTAwMDUxMzRERUNCMUFCRkJBQ0Y0RUUzQjUxNTI5ODk5MTU0MEQKKzoxMDcxNjAwMDNGRDA4MEZENUI1MzVDMTM3Mzg4QUU3OTNCNTAzQ0E4RTUKKzoxMDcxNzAwMEREODYwRDRBMjI5RUU3ODY2MjMzQjU3QjQ4NzBDRTVGN0UKKzoxMDcxODAwMDhDRTM1QzZFMjNCRDMxMzAzRkYyRTk2REZDMzhGREU4RTUKKzoxMDcxOTAwMDVGRUFBQ0U1RkJENkU4NDBGM0FCMEY3NTFGN0UxOEY5NEMKKzoxMDcxQTAwMDg3M0IxQjRFMDRFRDQzRUJENzBCMTBBRjE1MzFEQTAxRDMKKzoxMDcxQjAwMDI4N0NERTM5N0Y3NzBFQ0Y1OTM3MDA5N0M1NDU3NjkyMDgKKzoxMDcxQzAwMEJEMkVBNzMxMDQzNjlDOUZDNEIyMTE0RkY2MDAzQ0ExREUKKzoxMDcxRDAwMEJEREIwNEU3MUNDN0NGNzk3NTFDOUU3M0UxQTZFMDczODUKKzoxMDcxRTAwMDg2RjFEQzJCRTFCREIwM0NEQTIxNENBMjczMUU4NUUzQjUKKzoxMDcxRjAwMEQ3QjI0ODA3REFEN0U3Q0VFRjU1NUYwNjNFNDU4MzIzN0YKKzoxMDcyMDAwMEMxMDJCMEY4M0NENTM1M0YyN0FCNDc4RTNDRjIwOUVDQzQKKzoxMDcyMTAwMDBGRTA1MjZFMDk2NEI1QTA3RTZFNjBENUVENjFGOEMwRDYKKzoxMDcyMjAwMEEyMUM2RTFGNDhBQ0RCODRGMjc1QTE4NkZGNzUyMUY4QTUKKzoxMDcyMzAwMDFGMTgxMjczM0M0QUM1N0ZFOEY3NEFCQzczMzE5RUMzREUKKzoxMDcyNDAwMDU3NDJDNzA0N0NCOUY3NkZFMkJDNzBFM0RGOUNDM0Y5MTcKKzoxMDcyNTAwMEQ2ODEzOEU3MzI1Q0RGNzBFM0VFMjFCN0ExQkU3MTg3REIKKzoxMDcyNjAwMDg1RjQ1Rjc2NzZDRjEwOUNGNzc3MjlDRTlGRTM3ODExNkYKKzoxMDcyNzAwMEMzQkJDOUJGREU5OUQ4NkRDMkZENzVDRUZGM0MwOUY1MTEKKzoxMDcyODAwMEFDODVCNTdGMjJGQUJDRDhGNUFEOEUxQTZCNDJCOTE5MjAKKzoxMDcyOTAwMDkzOUY2MTBBNDBGRkY4RkM4Q0Q3RjE1QzBFQ0VCMkM4MTgKKzoxMDcyQTAwMDk2MzA3RTkwNURCMzI2MjZBMTNFRDQzMTdENjIxMkYyRTcKKzoxMDcyQjAwMENCOEUyNDU4MzNDOTUzODcxREY5QTg2OUZCRTU3NjVDNEEKKzoxMDcyQzAwMDY3NDc3RTI2OTU2NTI2QUJFNTkyM0VGOUVCMTdDMDVGRDIKKzoxMDcyRDAwMEZEQTAwODdDMDZGNjFBM0U0RjgwQkRFNjA3N0VGQjI5MUUKKzoxMDcyRTAwMEQ4NkJGODNDMEFGNjFBQkUzRjBDRjYxQTNFQkI1NjM5NkMKKzoxMDcyRjAwMEU4N0Q0N0ZFQjBFRDg4MTc2NzVBQjgxRjY1OTFEMTExMzgKKzoxMDczMDAwMDU2MkY1QkY2OTRDOEZDMUE3RjgzRkY2RURBMTJBNTJCMEEKKzoxMDczMTAwMDU3NkY4Q0Q1OTU2RjZDMDMwQ0IyRjY5NEFCRDYwRUQzMjkKKzoxMDczMjAwMDk1MzVGREIzRDIzQjQ2RjdERTU1OTdBOTJCRkYzRjAzQkEKKzoxMDczMzAwMERGMjYwRTVGRjQ5N0ZGNkY4MjJGRkVENjgyQkMyQkMxMzMKKzoxMDczNDAwMDNGMDBCRkY3NjU0RDIzM0VEQTIxQjA5QTU4NzhDNjQ4MTIKKzoxMDczNTAwMDlDRkYxOTlEMDJGOURERjBENzAyNzJCQjE4RkYwMEJBM0QKKzoxMDczNjAwMDMxREFFNDA2QUNGNzQyRkI1RjQzNUJCNDdERDFGRTYwRUIKKzoxMDczNzAwMENDNjFBQTgwRjdBNUY5MTExMkNBRjNCOUFDODZFODZDMDIKKzoxMDczODAwMDFFNkJBMUU3MERBQzlEOUU2NUVDMDAzRENCMTlBN0MzMUMKKzoxMDczOTAwMDZGMkEwMjEzRjBGOTcxOUNFQjUzQTREMzY1NTZENzYzOUYKKzoxMDczQTAwMDcxNjhCNzI1Qjk0NkM2MjIzRkIyRjUyN0JCQjRCNzczOUIKKzoxMDczQjAwMDQyMEQ5QkE5N0FBRTZEODJCQTJGRjhDREMxQjU0M0JGRkQKKzoxMDczQzAwMDgzNTE2MzZGQkY1REVFOTk0NzFCMUZFNjNCOEQ3Q0UzRTYKKzoxMDczRDAwMDJCMTM5RjY3NUZENkM0MjRFNDBGQ0MzOTQwNjc0RkY1NjkKKzoxMDczRTAwMDM2NUZBQjJBMjcyQkYyMzk5Q0QwNjc4QkU1NjNBNTAyNjkKKzoxMDczRjAwMEM1OEI3N0I1NUFDQ0U4NUYzOEI2QzZBNEVBRUI3NzkzNkQKKzoxMDc0MDAwMDlEN0JGODEwRjdDQjFDNkI5ODk2OENGODU3REYzQTMyQkYKKzoxMDc0MTAwMDE5RjFGQzk4NDk2RUE4MDVGODFGOUIwQ0ZDREI0MTdFMTYKKzoxMDc0MjAwMDFDMDdDQTg3MjNGOTc2RUEwRjkyMjIzQTAzQ0U2RDkxQTAKKzoxMDc0MzAwMEJBQkYyM0IyQzM3QzA3QjQyRjREMTQ5OURCODFGMUY0OUEKKzoxMDc0NDAwMDk0Njg1Q0JGQjZFRkQwNzU1N0FFQjVFOEYwNjBGNjI0MkYKKzoxMDc0NTAwMDdEQjk5NDk5N0JGMDJEMDVDRkRCREM1MzhGN0E5MjU4NjAKKzoxMDc0NjAwMEQ2Q0ZENTg3REQ1REZCRjFEMkZEQUYwNUUxNkI3MkFFMDYKKzoxMDc0NzAwMDNEMEVGNTFBMzY5MTRERkM0MUVDRTlERjFCN0NCNTdDRTUKKzoxMDc0ODAwMDA2MERCRTFBNUU3RDlGRTMxQzk5OUI0NUFGMjlERTg2RTMKKzoxMDc0OTAwMDcxNzQ5NEM3MUREQjM5MUM1QkEzQUVCREVGMkE4MDQzMUEKKzoxMDc0QTAwMEYxRkIyMkUzNzAyRTc3N0Y4NEY4QkM4M0ZCRjU0M0U3ODIKKzoxMDc0QjAwMDA5MjA1RDhGNDQ3QUU1NzQ1REUxN0Q4RkVDQjc4NTc1QjkKKzoxMDc0QzAwMDQ1MjY1QzVGQjFBRDNCMDlGRDRFQkJFRTFBOTk4NEU3RTIKKzoxMDc0RDAwMDcyNzBENkM4MjRFNDFCN0JBNjhGN0M2NDA1OENEQjU1QjgKKzoxMDc0RTAwMDIwM0EyQzgwNEZCQjBBNEVERjg3RTU4RTNBNTFDMjc5OTUKKzoxMDc0RjAwMEJCQjY5RjU2Rjk0QkY3QkU4OUIwQkVBRkYzNEQyNDg3OUMKKzoxMDc1MDAwMEJBQjZGRjczRjg0Q0YxMEVFMDMzMzBGRjE5MUZFNzMzQzIKKzoxMDc1MTAwMDRCOEM0RUQ2MDhGMzJFMDFCOEEwMURGRkNGRTYzNzE3Q0YKKzoxMDc1MjAwMEUyMzMwNzREQ0UzQ0NDREJFOEFBMTcxQ0U4N0ZBQjlGQ0IKKzoxMDc1MzAwMDZFMjFGREUxMjBEMDg3ODVFMzUzQzMwQUU0OTM5M0MwMTUKKzoxMDc1NDAwMEZFOTUxMERGOUM1OTY4NTM3NjZDMUYzNjAwRTFDNURDNTAKKzoxMDc1NTAwMENBQzE1MTEzN0FGMDdENTFERDkyMDJGNEFGQjNCNUE2RTIKKzoxMDc1NjAwMDIzQTg3N0EzMzMwNEU1NzMzMTMzMUUwOTA0RTFBOUVCQTMKKzoxMDc1NzAwMDA1NTM0Rjk5RjBEQTc4MjQxMDg0RDdBMTc4N0ExQkUyNkEKKzoxMDc1ODAwMDY5NTQwRjlFOUU2MTY3OTNDREE5QkNGRUMwQzAxRUJFMEMKKzoxMDc1OTAwMDg3QkY2MEZFNzI4QkU4NkZDNDc4QkY4NkI3RkYzOUZEODYKKzoxMDc1QTAwMEJENzI1NDEyODBBRkRDOUQwQkY4RkI4QjcxMjlBRjA0QzgKKzoxMDc1QjAwMDg0MjBCRTcyOTE3Q0FDMzVFQUVGMjRGN0Q2NDVGRDlENjAKKzoxMDc1QzAwMEU0REVBMUU5NUNFRUVEOUE3RUZERUVCRjIwREVERkM1RDQKKzoxMDc1RDAwMEYxQkVBMzc0MjJFMTY1ODcwOUU0MTlDMEVCNjA1RDY2MjIKKzoxMDc1RTAwMDM0OTY4RkFFMkQyMTNBRDNFODI3NzQ5RTJFMTVGRkI1MjEKKzoxMDc1RjAwMDc2MEI4REREMjY0NzE4RkM3NEQ1ODlCQUYzNEM3QjYxNzgKKzoxMDc2MDAwMDQxM0ZFN0U1QkRBRjVGMUI1NzZCQTc4REJCMzAyNEFFOTUKKzoxMDc2MTAwMDFCM0FFRTEzQjlEQzBFNEREQjUyRDZFN0Y4NjAwMEY2RUMKKzoxMDc2MjAwMEY0QTMzQzk0QzgxRTdDMTU1MTBGQjg5RUI5MDEzRTVENzEKKzoxMDc2MzAwMEY5MUMzRTVEMDVENzEzM0QxRUNBRDdFOEQyQzUzMDFFRTIKKzoxMDc2NDAwMDdCNzA4RUU4NDNGREI1MkJGRjM0RDFFOTE5QTA1MzFBQTYKKzoxMDc2NTAwMEEzOTc3OTRGQUFGNDc5NUNBNUNGNjMyQTdENkFGNUUyRjYKKzoxMDc2NjAwMEQ2MDdFN0RFODBFM0Q2ODlDNEE3MEZDRUM5MUM4MEYzMTYKKzoxMDc2NzAwMDdEQjYyNThERTY4NUY1NTBERUQxNUJBRjJEQUNBQzFGMTgKKzoxMDc2ODAwMDRFRkNDMThFRkNFQjEwQzAwMUVEODQ5MkQyMTJCMkE3NjkKKzoxMDc2OTAwMDRCNEM4RTAxRTFGNDg0RDA3RDg3OEVCNzZCOTY4NUYyREEKKzoxMDc2QTAwMEM4NjAzQ0UyNzdDNTc3OTVCMDQ2RTQwQjAwMDdDNENGQ0QKKzoxMDc2QjAwMDQzRDgxRUVBOEJCNzcyM0ZGMDFFNkMxRjE3MENBNzkxQzAKKzoxMDc2QzAwMEE0QUYxQ0ZBQURFMDQwRDE2MURBRkUzNzNCOUVDMzUyNTUKKzoxMDc2RDAwMDlGOUU1RjJDNTkxRkE1M0JCN0M1MkRCMUJBNzJGMTc0OUYKKzoxMDc2RTAwMEJFOEY0Mzc1QzMwNjg0Q0I2QkJBRDBGOTY5RkQyRkY2MDQKKzoxMDc2RjAwMEZDNkY1MkZCRTM5QTdGMjAzREE1QkY2RTNDMDQ5MjdFNTcKKzoxMDc3MDAwMEJFRDQ5MEZBRDEyMUY1RTM3NEU1MEJFMUUzNjExNTJGQzYKKzoxMDc3MTAwMDM0Mzk3MjM4NDI1RTEwMkVCRUQ0NTU2OEE5MEVDRUQzQ0QKKzoxMDc3MjAwMDg4Q0VFMzc2NEI3NDlFMUFCN0ZGOTE3MjM1MjI0RkNGMDUKKzoxMDc3MzAwMEFGMkVENDVGRTM0RjlGRTczOEE1M0M5NEEzRkUxMkNBNTcKKzoxMDc3NDAwMERGQkE1ODdFMTQyNDg3MTNGMjcwQkQwMUMxOENGRDVCMzMKKzoxMDc3NTAwMDU1Mzk1QkREQ0VGMTZFNURENEZEOTQ3RkYzOTVBQUE3MUMKKzoxMDc3NjAwMDAzNUUxMkJGRkY1QUU1Rjc1RkZGNDEyREZGNUUyMEJDQUQKKzoxMDc3NzAwMERDQjM2MzY1MzRFQUVEMjdCNjhGOEM0NjNCRUM0OEJCM0YKKzoxMDc3ODAwMDI3MUFGOUJFQ0NEQ0QxNTcwMjNFN0VFOTA0RjkwOUQzQjEKKzoxMDc3OTAwMDlENkNFRjVCN0U3RUE2RjI5RDEzNzgwRTI0MzcyNTNBMTIKKzoxMDc3QTAwMDhGQTNBQUZDM0M4Q0YyOTNFNEZEMjg3QTFFNDRGOTA5Q0QKKzoxMDc3QjAwMEY1NzM5RTU1RjVGNERGMEE0NEZGNEI4RDJERTFGREQzQTMKKzoxMDc3QzAwMDVCRjRGQ0FBN0E2MzU0ODg5Q0Q0Q0JDREFBQjU4Mzc1QUMKKzoxMDc3RDAwMEU1NEFFRjMwNUREOTU1QTc5NzlCNzk2MjE5RjFGNTEzMEEKKzoxMDc3RTAwMDNFMEVDNzkyRkM0QzVERkIxM0IyMUMyRDExN0MzODFDNjUKKzoxMDc3RjAwMEJFMzZDOUQxODg2NzQ3N0NCMUQxQzFGNEEyRjFERjgzMUQKKzoxMDc4MDAwMDIxNzAzODg2NzA0MEZDRjQ5NkY0ODkyNzQ3RDVGRTVBREIKKzoxMDc4MTAwMDE5RUM0MjEzQ0U1QjYyNzVCQzFFODc3RTg0QjU4MjAzNzEKKzoxMDc4MjAwMEUzNTQ5OEVGMzcwOUNFRjFDMDlDOENDNzlCODNGNDhDNEUKKzoxMDc4MzAwMEY3RjM0NEMyOTdDM0RFM0RFNTk4Nzc3NTA2MEMzMEY0NDQKKzoxMDc4NDAwMEYzRkVBOTZFNEYzMkZBNTcyQjlFOEEyMkJEMjk3NERFQjEKKzoxMDc4NTAwMEFBMDIzRDlGRjlCMkExMjhGQjIzRTg1N0YyQkVFOEIzODQKKzoxMDc4NjAwMDIyM0MwQTYyODg3RkNENzk1NkY0ODk1MEVFQUFDQjg5RjIKKzoxMDc4NzAwMDBFREVDNzA5OTUwRTM1QjlCM0M0NTgxM0Y2MUNBQjM3RTUKKzoxMDc4ODAwMEVBQ0ZCMUE0QTA5RUM2RTk3ODUwNjgxN0ZBQzE3M0Q3QjEKKzoxMDc4OTAwMDY0OTBBNEU3RjcyQjMxRjJGRDJGNzk0QTI0RkZFRTEyMTIKKzoxMDc4QTAwMEVGQjdGQjMwQUVCODA0RjQ0MDU0MTNGRUQ0RTQyOTQ0REYKKzoxMDc4QjAwMEJDM0VFQzM0MTk4ODlGQjZDNzE2MjI3Q0RDNzM0NENBRTAKKzoxMDc4QzAwMDgzREREQjM0OENGMEZDNDg1M0NFNDA5Q0FGNDk4NUQzM0MKKzoxMDc4RDAwMDg5RUQxNjgzNzAwNTNDOUQyNkU2Mjc3QkQ1NEZFN0Y5OTkKKzoxMDc4RTAwMEE1Qjc4NEU0QzYwOTg0MEJFQTQxNDY4OUU4RTI4MTNDRjUKKzoxMDc4RjAwMEVFOTczRjBDRTM2MEJEMDFFODA0RjVFMTJFOUY5OEVGQTEKKzoxMDc5MDAwMDBCNDMxRjBGQThGMzFDM0RGQjJCQzI5RjM3N0M3QkEyQjAKKzoxMDc5MTAwMDUxQUYzOERDQ0VDNzNGNUEyNzQ1NjM3Q0VBMUQ2RkE2QkUKKzoxMDc5MjAwMDlERDY1NzAwRTNBMkRFQkJFMzdBOTI5MzI3QkMxQzFGQ0YKKzoxMDc5MzAwMDcxOUQ2NDFGMzY3MUY5RDFFMTVENzRGRjY0ODBDNzU3OTIKKzoxMDc5NDAwMDZCNDVEMjNCQkY2QTJBMjk5QzhDRTdCREQ2NDRFNTlDOTcKKzoxMDc5NTAwMEEyNTI4QTZGNzRGOEI4N0MzOUU0M0I1QThFRTc3N0MyM0EKKzoxMDc5NjAwMDBCQTcwRkU1RkExRDEzRjc4RDhGQzM3MzM2MTEzRTU0MjUKKzoxMDc5NzAwMDNEQTUzRjk3RDJCNTdBRkE4MjVGNzRDNjA0Q0FDRkE0RjgKKzoxMDc5ODAwMEI4MkNBODEzNTNEMTRFQUE0QzAwRjkwOTk0N0JCOEEwODcKKzoxMDc5OTAwMDg0RjIyQThCREQ3QTc5NjQ2MTQ1MjZDNDNCRDQyRkIxMDkKKzoxMDc5QTAwMDVERTUyMzI1NTk3RUE0M0ZCNzQwRjI3MkUxMEIzQ0VGMjEKKzoxMDc5QjAwMERBQjRFNTZBOTI3NzE1MkQxNkREQkNDNTc1N0FGQkE4OTkKKzoxMDc5QzAwMDMyQzQxRTBBQjU5NzdFQjRCQzMwRDU5NDg3OTMxNzFENzgKKzoxMDc5RDAwMDlBNUM2MEQyNTQ4NEZCMTEzMEFDOUIzM0UwRkQwQjIyRTcKKzoxMDc5RTAwMEU1MjM5RkYxNDYxMEZGQUM1ODc4RUExQTU1MkZCRDE2RDMKKzoxMDc5RjAwMEYxODAzOURDNkM5MjY2QTcwN0QxNTlBNTU3MENEMUQzMTkKKzoxMDdBMDAwMEY1RjAwNUZERjkzOEVBQzc0REIxQUExQzc1OTc5MEJGOEUKKzoxMDdBMTAwMEVFRjMxQ0U1MTBGMUZCOEJCNUJGMkY1QUJGMkQ1N0Y1QzgKKzoxMDdBMjAwMERCNzJEMjZGM0I0QTJEOTRBRjc5MTA5QjA0RjVERjU1ODIKKzoxMDdBMzAwMDdBM0RGOTc1MEVDREJBOUVGNERDNDNFN0ZDM0E0RUQ1OUIKKzoxMDdBNDAwMEFGNzMwRDlEREJBMTAyQzA2NzkyMUIwRUFERENBNzFFQkMKKzoxMDdBNTAwMEExRjE4QjRGRDU3MzM4QUFGMkM5QzMyQTlGRUM1MkVEMUUKKzoxMDdBNjAwMEFENDY1NTVFNzg1NTc5NzFBODQwQjVCN0UyMThDOTBCOTcKKzoxMDdBNzAwMEEzNTE2MTE3QzM2NzZFNkM4QjBBOTEwRkIxMjE3NkQ0NDUKKzoxMDdBODAwMEUwOTBGM0QxQ0I4QjY1NDVBRUM4QTk0MEY3OTY4NEQxODEKKzoxMDdBOTAwMEJBRjcyNjY5OUNBRTlDQjY2NTI3Rjk4RkNGQzgzQzlGODQKKzoxMDdBQTAwMEU4MUVDNDA5OEM5Nzk0RjJGQzJDNjY2RDI3RkY3MUE5MUYKKzoxMDdBQjAwMDQzQTZGQUMxMTgyNzg0RjY2ODUyNjExRTg5ODY5RkRBQTgKKzoxMDdBQzAwMDdCMjk4RUJGRDdDQUZENjFEN0Y1RDgyRUE1OURDQTlFNEEKKzoxMDdBRDAwMDUyQzYzMDBGNjZCODM2MEU4MEEzMUVGNDg0QzFFOEM3QzQKKzoxMDdBRTAwMDg2NzkxMkMwNDBDM0Y2MUFCRTBGOTlEMzRBRURCMkFCRTUKKzoxMDdBRjAwMDk5MjQ0MEJCRjRBOTI5QzRDRjEyOTg0MkZDNjVFMDMyMTYKKzoxMDdCMDAwMEE2NjBCRTBCRjMzRDRGRUQxRUJGMUJGNjAxNzgxRkYwQzQKKzoxMDdCMTAwMDVDNDc3Njc5ODkzNTlBQzdCQjQxM0VGNjhENjdGNTNDNUYKKzoxMDdCMjAwMDdFOTkxRjRCN0FDQjEwMjM0N0NENUVGMTU2NkQ3NzIxOUUKKzoxMDdCMzAwMEJDMEREMjgzMjY0RjI1RkEzNDkwM0ZBMjM1NkFBQzA5OUEKKzoxMDdCNDAwMEYxQjREOEU2MjRCRjAxRTBGNTgyREJEMTVGRjk4QTk5NzAKKzoxMDdCNTAwMEZCMDk0QUI5N0ZGMkUwRjQ4OThGQTBCRDNCRjYxOTFCRkYKKzoxMDdCNjAwMEY5OTIwRjJFMDY3QzI2RkVERUNERUQ4NEJBMTIzN0NBQkUKKzoxMDdCNzAwMEJEM0ZFNzczMzkzN0U2OTkyRkU5N0U0NEQ3NzZFNkMwRjMKKzoxMDdCODAwMEYyOUVCQUU3NEZCRDhERjQzMjQ3MjAzQkEzQTMyRTg3NjgKKzoxMDdCOTAwMEYzNjVDNjlDOThCRkQ5OTE5RkIzOUFDQTkzQzAzMENFNjMKKzoxMDdCQTAwMDQwN0E1MDU2MUI3MTFEMDBENzY2QUE1Rjc0NUZENjc4NjUKKzoxMDdCQjAwMEJBNkY0MkY4OUJBMEU2MTk0OTc4QUU4OTNERTUzODQ1OTEKKzoxMDdCQzAwMDJEQjNFRDU0NEUyOEUwRjk4MTdGNTRGNTgzNzZGNTNDRDIKKzoxMDdCRDAwMDdGQTdEQTQxREI1NEJBNjk1M0U5RTZENzJBRERBQzA5NUQKKzoxMDdCRTAwMEY1ODc2RUU0NzQzM0MyRThCODJGMEFDQTIzREM3NjkyQjQKKzoxMDdCRjAwMDMzRkIwQjhFRDJCQTgxRkUyNThDRTdBNjRDMTc5QkM3QjAKKzoxMDdDMDAwMDAzRENDNjU4MDJDNEE3NEI0MEVDQUQ4NkZENEMyOUE4NDYKKzoxMDdDMTAwMEE3RkNDNTEyMTdBMzc4NDVGMTlDN0E1QTVGMDA2MzRCMDUKKzoxMDdDMjAwMDU3QTFERTU0MkY4ODZBM0RGMkM3MzFCMTdFNkE1RjZDN0UKKzoxMDdDMzAwMDY1MTJGNjJGQzk3Rjc2MTdFNkUxOTZCQTAwMzQ1MENFNkEKKzoxMDdDNDAwMDlENTMyRjEwN0MyQTYwM0M2OEJGQUJFRTAxMUFFRjUwQTkKKzoxMDdDNTAwMDM1NUZDNzQxM0JFRkRGNTFDMTI0Mzc5NEQzNThGRUVFNjcKKzoxMDdDNjAwMDE1N0M5RDRFOEM4NzFFQUE3QjdFMTdDMTdCMEU4N0Y3RTUKKzoxMDdDNzAwMDU1MjcwRDNBN0FDQ0YwNDdFQUU4N0FGNDk2RkVCQUZBM0MKKzoxMDdDODAwMDkxRUIwN0U5Q0EwMzlDQTlCQUY2QjFGOTdBN0E4RjFDN0QKKzoxMDdDOTAwMDNFNEU1N0RGOTE1RjYyNDAzOTdCNjY4RTk2REZDM0ZEQjMKKzoxMDdDQTAwMDYyOUE1RDM3RTUxOTlCMDFFMTMxNzc5NkE4Rjk3MTBENkMKKzoxMDdDQjAwMDZDMjA1QTVEOENGQ0JFNERBQTlFQzg1QTg2MzFDQ0RGMjIKKzoxMDdDQzAwMDc4RkM0RTAzRTUwN0FDOTlFM0IxNjJERUMzOTk3NjIzRjUKKzoxMDdDRDAwMDlEMTc4QzRCN0NFNEQwNEUyMzhENkI0REYxMEFFOEM3ODkKKzoxMDdDRTAwMEJDMTdFMDJDMDZFOTdGNEQ5QTdDNTNGREVBQjgxRTYzNzEKKzoxMDdDRjAwMEQwN0FGQUNCMEMzM0M2Q0VCNTZGNTNGMUU5MDE3NTFEQkUKKzoxMDdEMDAwMEMwQjdBNzk4NzA1RTI3Qzc5M0Q4MDI2NjMwNDFGRjAxQkQKKzoxMDdEMTAwMDczQjg5QzBFQTVDQjc2QjVGRkVGRDRGRURCNTQ3Q0VDOUMKKzoxMDdEMjAwMENBN0Y3Qzc1MjRDMjY1MUUyMzdEMjQ0RjVDQjYzQTAyNEYKKzoxMDdEMzAwMEQ3NTFDMDg4MUVEQkZEQkIyMzgzRjVDNzNGRjYzNkNFODcKKzoxMDdENDAwMDlDQ0MzQzFBQzdDREY5RThFOEQ5ODIyNzAyQ0Y3NTYzRUQKKzoxMDdENTAwMEUwRjM3N0UxRjlGMjU3OERBQkEzNjFCRDRGMDhBQzFEOUQKKzoxMDdENjAwMDI5NEFFMzlGOUFGRTdERDVENzRENTQzRjdBMUM5ODY4RTcKKzoxMDdENzAwMDUwRkZGMkQ3Q0RCQ0ZEMDQyNkEzQkZFQjhGQUFEQzY5NzAKKzoxMDdEODAwMDUyRTkyNzZENEIzQUY5MTdDRkFDMzc5M0REQjNBRDcwOUQKKzoxMDdEOTAwMEM5RTYzNjU4RUZDODk5NzczREYxMDJFMjRCRTE1RDdGQzUKKzoxMDdEQTAwMDc5NDFFRUQxRjM0QjBBMTMzQjMxN0Y3RkM0MkEzQjQzMjkKKzoxMDdEQjAwMEZFQTBDRDlCQjZFNUNCNkM1QUI3NjQ2NDg4QTc0RjZFMjYKKzoxMDdEQzAwMDdEQjExMkM3RkJEREI2NDg4MzAyRTMzRkI5RDk0OEZDNTkKKzoxMDdERDAwMEU1QjI3QjFGRDlCQzlFOURFRjhGMjlDOUQ3REJGOUJGQzgKKzoxMDdERTAwMDVCQjNFRTg5RURGOEJFRjZGOUM3OEUwNUU1RTk3NENDMTQKKzoxMDdERjAwMEJBMjcwOUZEQTYwNzU3NTVCN0U1QTZGNUNFM0Y0QkNDRTgKKzoxMDdFMDAwMENDODVGMUJCRkM5N0JGN0NFRTFEOThGRjAzRDc2NUUzRTMKKzoxMDdFMTAwMDgyRUQ4MENGQTc3MjdERTdFMEFBREFCNjVDQjA1MzQ3NjcKKzoxMDdFMjAwMDhCRUFGRDE1QTM3QjM1QzI2M0Y0NEIwMzY1RDRERjgwNzkKKzoxMDdFMzAwMDE0OEMyRTgwNjVGRThDMDg4MzAyRkJGQkMwNjdEQzQ0M0IKKzoxMDdFNDAwMDdDNjBDNjlBMzQzQ0NGRUMyNzBCNzY5RkM0NzMzRUE0NkIKKzoxMDdFNTAwMEUyN0IyRkZBQzg0MUY1OUNDRTk1NEQzMkMxRERGRDhBRkIKKzoxMDdFNjAwMDk1REIzNzhBOUM0NEY2QjE0MzRFMkEwRUQyRTcwRURFRUMKKzoxMDdFNzAwMEE1QzU5NzFDOUYyMDFGMkYyRThCQTJCOEIyMTY3NzExNzUKKzoxMDdFODAwMEYzQkY2RDQwM0VCRjcwNTI0RDk2NDRFQkQ3QzdGMTA3MkMKKzoxMDdFOTAwMDIxRkMzMjMxQ0VDQkUzRjU2RUI3OTE1MTVFMTA2QzBEMDMKKzoxMDdFQTAwMEU5NjRBNTM4OUFGMjREM0U1Q0ZBMEI4QUQ3QkJFQjJERkMKKzoxMDdFQjAwMDUyNUExQ0M1MEQ5RUMxNzIyREYwMURDQjc4OEFFM0ZBNzMKKzoxMDdFQzAwMDUwNjgyNzRERTM3RTg0RDNGMzNDOEY5OEU1REVFMUVGRTUKKzoxMDdFRDAwMEJEQzBGOTk4RDRGMzA5N0Q5RjM0OEQ5RjhCMDdDRjI1QzIKKzoxMDdFRTAwMDRENzcyRUJCRjE5RUQ0NzlFNzEyNkQyNUZDRDJDRTQ1OUQKKzoxMDdFRjAwMDhDNkVBMjczNjE1NkRCMjhDQ0ZCODhFNzI4ODVGQkQ5MDIKKzoxMDdGMDAwMDg3NzJBOEYzMTBGNzk3N0Q1MDc2NUJGRDRBMjg5RjNBNTkKKzoxMDdGMTAwMERCOEYyMTVENjg3MTk1RjIwNDlFN0Y0MDQ3MDI3Q0NCMjgKKzoxMDdGMjAwMEE0RjY4RjU3RjU2RUU0NjNBODc3OTdBQjcxOTdDRTA1RUIKKzoxMDdGMzAwMDhDRTIyRURBNzg2NzZBRkI0OTdDQkM1QjQ4NkYyRUFGMTcKKzoxMDdGNDAwMDAxRkE0NzU5MTJGNTJBRTkxNzBEQzM3ODdFNDRCOUFERjUKKzoxMDdGNTAwMDdCMDFFNUFCMEEwNjA3QzZDREUzNDNGNDdBMzdBQkExNTQKKzoxMDdGNjAwMEY1QzZCRjJGOTIzRkRGMTBCNTk2RkFDNzAzNzhGMEZFMzMKKzoxMDdGNzAwMDIxNjZFOEIyNjBCRjEyMThBRDk4NEY0MjU3MERFNTIwNTgKKzoxMDdGODAwMDNENEJDREQ3OERBRjdEODlFQjQ3MzlEMDMzNTEzNzlGRUUKKzoxMDdGOTAwMEYwMDNBRERGRjNBOTg4N0NBMEQ2MjIyM0RGQzNEQzJDNUQKKzoxMDdGQTAwMEU0REIwNEJGMTRDNEEzNzVENDVGQkE4OTQ5Nzg4RjgzMTYKKzoxMDdGQjAwMDI5NENDNjdCOUE4MjNBNUZFOEZBNjEzQ0FFMTc4MjdFMTIKKzoxMDdGQzAwMDg2RkIxNUVBRjhGQzFCNjdGMjdCMjA2QzI3OTM4M0VEOTgKKzoxMDdGRDAwMDE2MTZCQzlFNjFCQUIyRUEyN0QzOTc0RDA5NjY5RDlDREUKKzoxMDdGRTAwMEZBRTA2QzQ5QkY5QTNFRkMzNUExRkQwREIyQjM2RkJGRkMKKzoxMDdGRjAwMDZGNzU5MEREOTVEQUQzNUVDQjEzRDNFMDNDQThENjcyRDMKKzoxMDgwMDAwMDU4ODhFRUJEREZCMjIyRTVFN0QzODA0RTZEQ0M5OUZERjYKKzoxMDgwMTAwMDM2QzBDM0Y1QkU0OEYyQ0UxMEI1OTdFMDExODhFMEYwNDcKKzoxMDgwMjAwMDM5QTdDRkNFRTNGQTJFNjhFN0Y1OTQ2RjBERjIwRUNGQTUKKzoxMDgwMzAwMDBGRjNCNDQ3MDBCRTMzQjczRTRGNDA5QjU3OEIyRjc1QUQKKzoxMDgwNDAwMEFBRkMzODkwMTI1OEUwMEMwMzhGNDZBNERGMkNFNEU3MUEKKzoxMDgwNTAwMERGNTBCQ0JCMUNGNTVCQzBFNUMwRUEyRjc0RjczRjRFOTgKKzoxMDgwNjAwMDE2NEQ2OUM0NzU4N0U2MjE2ODdBQTk3NkFGQjREM0NENzkKKzoxMDgwNzAwMEU1NkNBNzNCOTNGOENFMTk2NjZGMjFGRDNGOTRERjE4OUUKKzoxMDgwODAwMDE5RTU3REFDMTQyMzFEQ0RFNEI3QkI5QkYyNDY2QUREMzgKKzoxMDgwOTAwMDE2QzkwMkNGNTkwRUJEM0Y2NkY2MjRCRDNDMjg1MjYyNzgKKzoxMDgwQTAwMDQzRTQ4NURFREY1NUVBRDRDNzg5ODZCN0RENDFGQ0VCQzIKKzoxMDgwQjAwMDBDRUE0REM0RUZGODdBOEM2QTVFOTkwOUVGOTc4ODY4RUMKKzoxMDgwQzAwMEFGQkJFOUI5NTdFNUNGRUZBQTdBNjYwNEYyNTc3ODFGM0MKKzoxMDgwRDAwMDg1ODlFNTgwOEY3NjE2QTA3MjNGNDRGOTYxOThEMjJFOEIKKzoxMDgwRTAwMDUzQkU2MzJDNTNBODNDODBCOUE4QUNFNTQxMjYzMjFGOEYKKzoxMDgwRjAwMDNEQjVGQzk2MjQxNkEwRjI1MEQ0ODc0NDI0Mjk5OTlFQkQKKzoxMDgxMDAwMEMzRDAwRTE5ODY3QTlFRTM1Q0JDODdGMjI2NzM1MjI4OTAKKzoxMDgxMTAwMDVFNTBDNDk0NEZCMDVENDFFNjU3MjRGNzBBQUU2N0VBNUIKKzoxMDgxMjAwMDNEREMxMzhCMTQyODc3OTZCMjlFN0JCOTk4Njc5MkM3NzMKKzoxMDgxMzAwMDU0RTRGQzc0MTFERTNGRUU5Q0FFOTU4RkYzRjIxNERFMzYKKzoxMDgxNDAwMEZFQ0QzRjdERjEzOERFRDMwNUZFQTVENjdGQzZFQkNGNTEKKzoxMDgxNTAwMDk1NEYyRTlBODI2NTkzODFDQUVGNjM3QjI4MEZDODUzOEYKKzoxMDgxNjAwMERFOUEwNkU3RkZDOTM0NDY3OEU0Qzk1NURFMDkyRTBGQ0EKKzoxMDgxNzAwMENGNTVGNjIxREU2OEU1MDk1Mzk1RkRDMUU1OTUzOUNBNkQKKzoxMDgxODAwMDdCQzFFNUM3NzM5NDhFRTBGRTVENzlDQTIxNUVDRkYzQjMKKzoxMDgxOTAwMDk3REUzNzI5NDk2OEVGQzJFRkI3QzIwNDhFODdGODdCQjQKKzoxMDgxQTAwMEMzRTRGQTA0REIyOTRGMDkwNDJGMEJGMEVENjZFMkRCOTAKKzoxMDgxQjAwMDRFODY3NDBBNjQ2M0M1M0MyMkUwMzNFNkRCQTE5RThERTMKKzoxMDgxQzAwMDMzNTNCRTlGMjFDQTk2REM5NzNGMzI5NEJFMDIyNkI2MzcKKzoxMDgxRDAwMDFERkQ3NDQ1NDZENzE3NDQwRjIxN0M0RjcwRkZFOUFGNTIKKzoxMDgxRTAwMDk4QzcwM0Y0OTA4RDdBN0U0MDhEODcwNEVBQjgzRjQwQUIKKzoxMDgxRjAwMEEzMTNFRDdERTg3QzE3QzI3QkE2MDRGOTc5NTM3QkM2RjcKKzoxMDgyMDAwMEVENkRGREExNzg3QzQwRDVGNzBFQUFGQURFRkJBQTVGRTIKKzoxMDgyMTAwMEZBREM3RTAzQzY5OEUzRDYxRUZBRUU5RDdGMUFEOUYxRUEKKzoxMDgyMjAwMDIwRkU3OUZFN0U4RjJFMzA3MUY5MjFBMUJDRTg4QzA4RUEKKzoxMDgyMzAwMDdGMEZCQkI3RjVFRENGOTkxQTk3NEZGOTVFNDMyNDhBQUMKKzoxMDgyNDAwMDMzMzA4REVGNzM3RUQzODk3RjAyMUYxQ0QzNEZCMzVGMTIKKzoxMDgyNTAwMDFENTY4NDQzMUE0Qjk4MzEwQUU2NkRDRDY3QTRCRjdBNDgKKzoxMDgyNjAwMDcyNzcxN0QzRjcwRENBNDA4MkMxQkE4RUFFMzg4NjE0MjIKKzoxMDgyNzAwMEM3ODQ2N0I4M0REMTkyQzQ2OEJERjYxNDI5MDJGNUE1M0MKKzoxMDgyODAwMDA2OTU2RjVBNThDQ0Y0RTFCOEZFMjE0NjkyQjdBMUVCOUYKKzoxMDgyOTAwMDZFODhGNjA5MTg1NzFDRTQ4RkUwRkU4RDM4RTY4QjgwNTcKKzoxMDgyQTAwMDcxMDZFNTNCRjIyOTZGQzUyRDRBRjk1ODJFNjM4NUEzNjcKKzoxMDgyQjAwMEEwNUNEOTI2Q0FGOTMwQ0U5RUI2MTI1NjA1RTM1NjREQkIKKzoxMDgyQzAwMDAyM0U0NzE5RTkzQzlGQTJCRjhBQzc2MzJDOENGMjJENUUKKzoxMDgyRDAwMEQ2MERCMDUxQkNEQUJCNjZFNEFFQzVDODM3MTM0NTk2QkYKKzoxMDgyRTAwMDA2RUREMzFCQzZFNUEzREZEMzYzRUJERjlGNjI0RUVBNDcKKzoxMDgyRjAwMDdBM0MzNkM3OUI3ODBGQzMyRDE5RjgzRDEyNDlCMTYyRkQKKzoxMDgzMDAwMDFFRkFBNjE1QzY3Q0U0RTc0OUNGOEU4RjE2ODNFMDdGNjAKKzoxMDgzMTAwMEQ0N0IyQTAyRjNEQjFGOTMwQzU0RkY1ODVEQjZGNTQ2NUQKKzoxMDgzMjAwMDFCREUyM0Y0MkI5NDY3MjAxRDUxNkMzMEVGMDY2ODEzN0QKKzoxMDgzMzAwMDBGRTNERDVGN0RBNDY1MDRFQjFEMUZBMkYzQ0QzQTNDODYKKzoxMDgzNDAwMDhENzI5ODQzRkNBMDdBQkZBNTI5NDQzRjI4Qzk1N0YzRjIKKzoxMDgzNTAwMDM0MjZCMDA5NzhDRTU3M0M3MUQ2ODQ3QUVFNDI5QjRDRDUKKzoxMDgzNjAwMDdFRjRFQzI2ODFGMjUzMDJCQjFDQzk3ODRFNDdFRjFCMEEKKzoxMDgzNzAwMDQ5N0U3MzZGOTNBOEZBQUQxREU0QjcwRTI0QjE2NEJDQjcKKzoxMDgzODAwMDVGNTNEMTIyOTA1RTJDN0FCRkFEQzc3RTQzNDdDOTg5MjcKKzoxMDgzOTAwMDM4Q0VEMEYxREQ4OUMxRkVCMkM3RUVGQTQ1MDRGMjUxMDQKKzoxMDgzQTAwMDZGOTk0MUY1NzMzMzFBNDc5NjE1NkIwQUVDRkY1M0FGN0IKKzoxMDgzQjAwMEMwRjMyNzRDOTI4MEY3OThFRDBGOEExMUI4QUUyRTEzQjgKKzoxMDgzQzAwMEY3NTMzNDAzM0ZDNUZCQjlDRDUzOEFGQkE0NDNEM0Y3MUUKKzoxMDgzRDAwMEIwQ0UyMEJCQTUyMTJFMzUxMkU3RURDMTVGODVGQ0VCQTkKKzoxMDgzRTAwMEM3NUEzMjI5M0VCMkI5Mjk5QkYyNDE0MkM3Qjk3NzE1MjMKKzoxMDgzRjAwMDZCNDdGQkE0NjE5NTk1OUVFN0Q1MjczQjkzMUREMEZGNjYKKzoxMDg0MDAwMEQzRDYyOThEMjBBNEQ4QTdCQjk2MjZFMEZEQTBDNTJERTQKKzoxMDg0MTAwMDE2MTYxMTA2OEY4RkI1NEVBNEY5MTZFMzNENjY5Q0I3NkMKKzoxMDg0MjAwMEE1Qzg4QzcyNjQ1QURCMTQzM0MyRURERTU1Q0FCM0MxRTEKKzoxMDg0MzAwMEYzMTQxNkJCRDYyMDVENDZCNTNDNEI3ODYyNjM3RTM3OUQKKzoxMDg0NDAwMEMyRjNERkFFNTE5MjUxQkYzODk2QzZDMkU2NDkzRTkwQTQKKzoxMDg0NTAwMENGRUQ4NDc3QUU3MUQyN0Q5MjRGOTNDMkI3NUI5N0NGNDkKKzoxMDg0NjAwMEYzMzVBM0E3Q0JGQ0ZFQjg5MUJEQkIwNEUwNUMwMUY0REYKKzoxMDg0NzAwMDU0MEZBRjhFMzY2NTQ2MjNERTlBRDgzMjYyNTIxRjk0NkYKKzoxMDg0ODAwMDk1QjhEMTlFM0I4RDdBM0JGMEYzQzZCQkU2QUVBRjgyOEEKKzoxMDg0OTAwMDc2MEQ3NzhGRDg4RkVDRTMwQTMzRDc5QkQ5OUY0NUEyMEYKKzoxMDg0QTAwMDBCRDAwQjJCOTAzRUZGNjM4RTU1RjIwNEYxNUZENDFGNkYKKzoxMDg0QjAwMDE1NUQ3RTFBOTcxQkE2MjZEMTZGMDY3RTZFREE3OUZDQjMKKzoxMDg0QzAwMDZGNjhFRjIwREUyQTQxNzg0Q0JGMDlBQTVEQTBFNjZCRjkKKzoxMDg0RDAwMDI0NEMyMDZEOUM3RTBEMzNFNkZBRkMwQ0UzMkU4QkFDMTUKKzoxMDg0RTAwMDc4OUVBMTdBRkE3OTc4NzJERTNBODJDNjQ3M0QzNzk3NEMKKzoxMDg0RjAwMDI5MTE0MUVCMDA5NkUwMjc3RkI5OEJDRjdCQUU5RDVBQzcKKzoxMDg1MDAwMDZGMDQwNkYzNDM5MEZFMUU1QUFGRUQ2M0U0N0EzREJENUYKKzoxMDg1MTAwMEJFOTNDRkY1NDI4MDZGOUZGMUJBQ0I3Q0ZBN0U5RkU1ODgKKzoxMDg1MjAwMDMzM0FCN0QxQTJCMkZCMzhDQUQ5NzUyMkU1NTU4RjU5NzMKKzoxMDg1MzAwMEM3RTNGRjY3ODYzMEYyMTNGNTM2OUVDNjdGRjE2NzFDRUUKKzoxMDg1NDAwMEE4QzIxMUUwREExODU3NENFN0Q5NUIzRkIzRUY4MDkyMkQKKzoxMDg1NTAwMDMyQjZDNzNFQkMyQzQxQkYyRUFEREQ2N0U3RjY3NTFCQkEKKzoxMDg1NjAwMDhCRTRGQTYwM0JEQTY3MTYxRkYwQkRCMUY4M0NBMEEwQkYKKzoxMDg1NzAwMEZDMUVCNTY5ODVENEQ3QkU0M0Y5MTlGRTY0NThFRjYyNzUKKzoxMDg1ODAwMEY1Qzg2NEMwMzVFNDBGOUZBRTE3NTQzRDg0MjUwQzlGOTkKKzoxMDg1OTAwMDQwNTcxNzQ5RkU2MDdGMjU4OEZGMDE1RkUxNzk3QjNFRTgKKzoxMDg1QTAwMDgxRTBEM0RDN0E3NEYzQkRFNDg3QjEzQjc4MkI3RTVFNDcKKzoxMDg1QjAwMDYzOTkyNjA3NzkxRTkwNzY0RjkwNjE2ODZBNjA0RjdDQjgKKzoxMDg1QzAwMDRBODNFM0M5REZBRTdFRkEwOTc4NzVFMkE5RTU1RkUzODUKKzoxMDg1RDAwMEQzMzJBMDMyMUFFMTc5NEZEQzlDNkIxM0ExREQ1OEIzODIKKzoxMDg1RTAwMDJGMDFGOUU5MTI5RkU1M0NCQ0IzNkFGODkyODJGN0YzRDgKKzoxMDg1RjAwMEY0RjU5Njg0QTBGNUMzN0ZDRDNCOUU1ODVGODk3MjZBREYKKzoxMDg2MDAwMDg3RDU4MUE5RTE4ODVGNkUxRDdDMDJBOUY4NUQ5Q0FFQ0IKKzoxMDg2MTAwMEJCRkU5NUVFRTc0NzRBQTcxNjUwN0U3QjlEODVFRTc1MUIKKzoxMDg2MjAwMDg1QzI3Nzg5Q0EwNzk4N0E1RjQzQTNBNzg4OTY5MTBDNzkKKzoxMDg2MzAwMEZEOEI0NzU0QkJFOUM4NUFCMDUzQTFEQzU4Njc5NkYxOEIKKzoxMDg2NDAwMEJCMDY1RDhFMjIyNTIxQ0M3OEU2M0EzM0ZGNkU0RUIwMTQKKzoxMDg2NTAwMDlEOThEQUIzNEY2REZDMkUzN0Y3NDMzNkMyRjg0MjE4QjcKKzoxMDg2NjAwMDdGREY4NUM2REI1M0E0OEM5OTBFRjhCRkI3Qzg3OUY5QjQKKzoxMDg2NzAwMEY0MkNDQzZGNUE0NEZCQURERDVFRDdGNTM2QjRCOTc3MzgKKzoxMDg2ODAwMEEwMkIwM0VCOEZBQzFEMzY0MTQwNDdBNDUxQTZGQjdFQzcKKzoxMDg2OTAwMDVFRUY3MzI0NEY1QUYwM0IzRTYwQ0ZCN0I0MUIyMzUwQkMKKzoxMDg2QTAwMEZGNzA3QjBEMTRCRjZENjk4RjhCMUM4RTcyQ0E2NjA4QkMKKzoxMDg2QjAwMDFCNjc1RDM0OURDM0FCNDc5RTM4QTM4M0Y1QTFFNjVDODEKKzoxMDg2QzAwMEFFMEYwOUNGOTRERDlGMEFGMEYyMUVFMjc5OEE5QUZFN0UKKzoxMDg2RDAwMDIxQTk3ODMzQzYyMjExN0Y5NkJDM0NDRkFENDcxRkUyNUIKKzoxMDg2RTAwMDdBRjUxOUQ0QUI1MTVGQ0FBQTkyODJFNTUzNDMzNEZGOUQKKzoxMDg2RjAwMDBFNDY1NUFFQzM4REY3MzA3MzZDOENFNEM3NTBCQ0FDREUKKzoxMDg3MDAwMDgwN0UwQjFCRjM0RDRCQzFFRjY0MzgxOEU2RTdGNjA3OEMKKzoxMDg3MTAwMEZENDcwNkNDOEU2RkUzRkE0RUE0Q0RFNjUwMTA4RjE1QzAKKzoxMDg3MjAwMDRFNTc1NkY4MUZDMjMzNzI5NEMyNzAxRTYzODg3RTYxMjIKKzoxMDg3MzAwMDBFRDExRkM0OTBGMjgyRTk3QTdENDI2NjhFNjg4NEIzQkUKKzoxMDg3NDAwMEZEQkVCRUYzMzgzNDdGMkVFODRENzRDRkNDQ0QwMEZFOTUKKzoxMDg3NTAwMDg4QTc1NjM3OUQ0RjM0MTgxMjQ0Q0Y4QTIyQzcwREVDOTQKKzoxMDg3NjAwMEQxRkJGMTNFMUJGN0FGNDgxNDJGMTI5NDQ2RjJEQjZGOUEKKzoxMDg3NzAwMENDRTRGRThENDRDNkUzNUU4MzE0NkVDRjhGOURFNEE2RTkKKzoxMDg3ODAwMDMyRDgwRjE0ODc2MkFGQjI0OEU0Q0JDQjhBNUNCNzIzRjAKKzoxMDg3OTAwMDdFQTQwMDFCNDBGQkFGN0YzQTEzODhEQzJGNTEyRjY3NkMKKzoxMDg3QTAwMEI1MTcxNzU3RkFDRDZFRUVGRkYzMUEyMjFEOUJDM0UwRTMKKzoxMDg3QjAwMEZEQUYwQkI4MUYyRTcyMEZFQzBERjVEQkVCQUQ3NEJGRTgKKzoxMDg3QzAwMDI1NEY3Q0FBODlGMDY5QkM4MUZDREE1RTc2NDA0MjdFNDYKKzoxMDg3RDAwMEYyQUJFOTVDREUxRjJBNzJERTNGOURFMkIyQ0UxNDg0NkEKKzoxMDg3RTAwMDdGODIxMTJDMkE1MDc2Q0RBQTFGMzdFOUY2RDQ0OEQ0QkYKKzoxMDg3RjAwMDhCM0Y0QzdDOTFFMEUxMDZEOEE1QzE3RjlCNkFFM0ZBRjAKKzoxMDg4MDAwMDhGODJGNzhGRDZBRTI2QjhDQTAzQjg5RjRDQkI3NzFFQUYKKzoxMDg4MTAwMDJCRjFGQkZEQ0RDRTUzNkVCQ0RGQkJBMjIwOTVBRkFGREQKKzoxMDg4MjAwMEM4MzgyMzE1Q0E0M0VCMDIwMkQyREQzRDc2NjUxRUVBNDUKKzoxMDg4MzAwMDI1NERGMjczNzQxRTI5MTlCMjAxRkQ2NTgzOERFQzREMkYKKzoxMDg4NDAwMENCMzhDNjlFOEVFMUY1REFGN0EzMUVCMjBGREMxNDlDN0UKKzoxMDg4NTAwMDRGNTJBREVFRkIyMTIxQkNCRTcyNTUwMURGNjdFNzBFMjIKKzoxMDg4NjAwMDAwNjQzRkI0OEY5OTZBN0ZEQjE2OTMzRDdFQUUwQzcwMzcKKzoxMDg4NzAwMDQzQjhCOEI5RkRGQ0MyNzREQjYyRjc3MEIyOEI3OEJENDcKKzoxMDg4ODAwMEZCMkFERTFFRTNBNTUwMkZCREZEN0UxNURBRTM4RkE2ODEKKzoxMDg4OTAwMDg0OUZGNzRCNzVERTQ3REZFQTdFMDRFMzU4RkY1OUNGMkMKKzoxMDg4QTAwMEUzNThCRDlGQjM5RjE5ODBCNzZDQjBCMzY0NzYwNUYwRjEKKzoxMDg4QjAwMEI5QTVFNjc5RTFCRTIzNzNDRDJDQ0U0NzNBNkRFRDA0MjAKKzoxMDg4QzAwMDJGMDZGMjNDRkEyQUJBNDcxRkFBQUY1QTkxOEU0RTRCOTYKKzoxMDg4RDAwMDlCRUIyN0NBOUM4RjY0NERBMEFCRkQxQ0Y3NDJDNkJEMjUKKzoxMDg4RTAwMEIwREVFQTQ4NDBGREQzQjNCNEJCMDFGOTg3NjdEN0QyMDUKKzoxMDg4RjAwMDBGRjE1RTdBNzk5OTk5RjRENjcyNjNDREJGQTMxRDY0QTYKKzoxMDg5MDAwMERDQ0JGMzVGRjAxQjEzODgwNzgzODAxRkUxN0REMzY5MDUKKzoxMDg5MTAwMEQ1RkNGQzE2NEFEQzVGMkIzQ0YzQjEzMzA3RkRCMTg5NzMKKzoxMDg5MjAwMDQ2QzI0QjREOEYxRDYzNTFEQ0U4OTdEREEwRTZCNzMzOUYKKzoxMDg5MzAwMDcxNDgzRERFRjczMjBFMTZDOUVGMUI1NTA3N0EyREVFNTIKKzoxMDg5NDAwMDJGOTdFN0VCMkFGMDNGRTQ0MzlBOUU2QjRCMzdFQUYyMEUKKzoxMDg5NTAwMDdBQ0QyMTc5QkRDNjkwM0NFMEFGQTdBQjc5NzIyQTFGRDIKKzoxMDg5NjAwMEIyNjc4REVGNTM5RjdBMTVFQzYwNUNFNzRFRTA0M0Y4RjkKKzoxMDg5NzAwMEY0ODMzRDhDQ0ZERDYwQUZFM0YzMzVCMEQ3RDEwRkZFOEMKKzoxMDg5ODAwMEM2QUE1MUY0N0M3Mzk1ODNERUJGQkQ2QTEyM0RBRjRCMUUKKzoxMDg5OTAwMDBFOTgxMDlGQzkxRkNEQkYzM0U3MTdDOEFGQTdFMTk5NDUKKzoxMDg5QTAwMDk4OTY2REMzRUY3NkYwRkEyMTMzMUJGRkQ1N0QzNUQ0NTEKKzoxMDg5QjAwMEM3QTlFREREQUVDNUY0OUQzQUFEQ0NENjJFQ0U0RTI3N0YKKzoxMDg5QzAwMDNGMzg5NTlCNjczNDJGNDZCRkNGRTY1MkM1M0EwM0YwMzgKKzoxMDg5RDAwMDY0ODBDMTU5ODFERjc5NjA3NzVBMjg2RTExQkE5RjA3ODgKKzoxMDg5RTAwMDY3Njg3MjNDQkMxRENGRjAxMzA2N0EzRkNFQzAxOTdEN0MKKzoxMDg5RjAwMEY4NzExRTEyRjgzQUFFREFGQkZFMTZBNDhGN0U0NTQ2RDkKKzoxMDhBMDAwMDI3RTI3MTcyQUEzRTdFQjA3MjA2RDdGMzVFNTc5RkM5MDUKKzoxMDhBMTAwMDZGQkI4NkY2NzU1RjVGQTM4RkRFRUEzRDNCMDAwNUZBMEMKKzoxMDhBMjAwMEY1NUVFRkI1QjM2QkIxREUxMzEzOUVBRTA2QUE3NEQ1MzcKKzoxMDhBMzAwMEVCRjgzNjZFNEZCMjE5NDA2RjgzQjExQzZBMUYwNjI4REYKKzoxMDhBNDAwMEJGRTQ3NDZEOEU5RkM4RUQyN0QzNUI3NzEyRDI1QjU3NUUKKzoxMDhBNTAwMDhDQUYxRUVEQzRBRTVENEJEN0UzNzc0MjQ0QTQzNzI0MDAKKzoxMDhBNjAwMDBCQTQzNzhDN0Y2OEY0NTZDQkNGNjMyMUQyMUJGQzM5MjMKKzoxMDhBNzAwMEFERUUzRDY3MEVEMjYzMDJBNzJGRTE5OTlEQ0IyOTFGNzIKKzoxMDhBODAwMEUzMkU5RTQ3QTNEMTVCOEM5QTJGMUYyNUI1OTNCRDQ4M0IKKzoxMDhBOTAwMDFGRTZDMDdFNDA3QjFCMDRCQ0M3NzNGQzYzNEFGRTEwMEMKKzoxMDhBQTAwMDBCMUNBRTcwNzRGNzIzRTlBRDZDQzY0RkEzQjc3RkJCNDgKKzoxMDhBQjAwMDI2NDBGOTEzOUQyOTRBMDJFQTMzNUVGNUZCODEzRjk2NzEKKzoxMDhBQzAwMDBFQ0ZDQzMwNzNCOTcwQjkyRjExQzdEOUEwOEUzMzZEQ0EKKzoxMDhBRDAwMEM4NjFGMkZGMTU1ODFEMjJDQUIzN0M5OUMzMzU2RjdDNUIKKzoxMDhBRTAwMDI2N0Q2RkM4QTdGNkRCRUQ1NDU2Q0M4MEU3ODBCOTI3MEEKKzoxMDhBRjAwMEM5Q0YzQkMwQzBFOUY3QzFCN0NEOEIxMUVGOTMxQTBFQjgKKzoxMDhCMDAwMDE2NEQ0MzdDQjk0MzI0N0QzQjc0NUYxRjE0QUE3MTMzMTcKKzoxMDhCMTAwMDgxQ0YwQjlBNTc2MjcwMUNGMTFFOTUyRUU1M0IzQTM4QjcKKzoxMDhCMjAwMDlGOEY2MTUyMUFBQzI3QzEyRDE1RTc2MzVDRTg2QTAzNzkKKzoxMDhCMzAwMDdENEZBNDVGRDFDMTE4OTRDRkRBNzg3MDcwMDk5ODZGMTcKKzoxMDhCNDAwMDgyQUFBRjc1RENGOUY0MDhCRjc2RDM0MDFEM0RCN0UwQ0IKKzoxMDhCNTAwMDNFN0FBM0U3MEJGMTBGRkIwQzQxRTMxMzk0RUZFQjUyQ0EKKzoxMDhCNjAwMEVGNDlGRTU4QkY2REFGN0VDNENCQzNGQjI1QUI2NjcxMkEKKzoxMDhCNzAwMEJFRTEzMUYxRkMwRjY4MkRFMTc3MDE5QThBNUM0RkUyOEEKKzoxMDhCODAwMDdFQ0VEM0ZGNzY0QTdFMTdFRTYzNzkzNEY5OTUxMzhDNDcKKzoxMDhCOTAwMDVDREZDMzZGMjRGMkVGRTVCODA5Q0U1QUZDNEREMzE3NjIKKzoxMDhCQTAwMDY1ODVFNzE3MjUxN0JCRkU4MEUzNkU2MkYyMkU5NDY3OUEKKzoxMDhCQjAwMDM2MDc5QjQ3RjEzNTkwNjc4ODE3Q0I4QTk0MTc2NzUwMjMKKzoxMDhCQzAwMEZDRTVEMkY0QzAyRjhCOTQ1Nzg5NUZGNzgyNEYwM0FFMzgKKzoxMDhCRDAwMDU3NzZGNzg1NkY1MzhBRkU2M0NGMEY0OEZGNjVEQzVGREEKKzoxMDhCRTAwMEJBQjBBQzg2NzJCMzA2ODE5RDg0RUI5REFBRTY2Nzc4MjUKKzoxMDhCRjAwMDg2RjA3QUNEQkZFQTFEQTBDNTRGOTU0MkNDOUY4QzU2MUEKKzoxMDhDMDAwMEUxMzVDNkUyNjQxNUQwQkYwQkU1MzBERURGREIxQkYwREIKKzoxMDhDMTAwMEUzQkQ2MDBCREUyMzkzRDA4RkNBQTg3RjRDQURFMDkzRjkKKzoxMDhDMjAwMEIxQkZGOEU1RUIxODJGMzJFNUQwRTc0NDE4OUJDNEVENEYKKzoxMDhDMzAwMDAxRURGRThEOTRGQkUzRkM4RDg3MzUzRTMxOEU4RDQ3MzMKKzoxMDhDNDAwMEY4MjQxQkU0MDcyNkMzRkJDQzg3RjMzQUYwNzhCMjFFNjYKKzoxMDhDNTAwMDU5MUM4QkUyNzJFMkE2ODYxMkZDREVENkQyQUQ5RjZFNjQKKzoxMDhDNjAwMDQyN0ZFOEU0N0ZCNzMwM0MwRkQwMUZGREM2QjBGOTVDMEYKKzoxMDhDNzAwMEZGMzAzOTQyNzQzNTcwNTYzQ0Q3MTM1M0MyRTNFOUUzRjEKKzoxMDhDODAwMEIzNTRGRDEzRjEzNDRFODdBNzZDNjY3ODNDMjVGREU3OUQKKzoxMDhDOTAwMDI3RTA2OUU0NEMzRDlFMTY4NEUwNjkxNENEN0JFOTc4QjkKKzoxMDhDQTAwMDFBM0IxM0YwRjQ1NTkwODNCOEFGMTdFNzJBMDM2NkY2MjIKKzoxMDhDQjAwMDgxOTdERjk1MkE4OTdERDUwN0M1MDdDOEVFMUJDMTI2OTgKKzoxMDhDQzAwMDU5ODNCRjdCQTgzRDVCNTE1RUY2OTE5RkQwN0ZDRDExNEMKKzoxMDhDRDAwMENBOEZGM0Q0OUVBNjNDRTUyRURCOTE3RDY4MDdGRDQ3NDUKKzoxMDhDRTAwMEFENDUwRUY2Njc4MUZFQUVEM0Q3NUI0MEFFQjhDMTlFRjAKKzoxMDhDRjAwMERDMzA0QjI0N0VCMkU3MEU4QkZGM0FENDZCRUJGODdENzEKKzoxMDhEMDAwMDg0RjJCQTREMDJFNjdCMEZBQUFFMTE1Q0MwREZFMjE1MTkKKzoxMDhEMTAwMDMwMURBMTdGOEM2MkU4RjE5RkMwN0Y1Nzk4MEU5MDNFNzYKKzoxMDhEMjAwMEJCMEVFNEIxOUJEODE3QkY5N0E2QzlGRjMxOTY5QUI3N0YKKzoxMDhEMzAwMEQwNEVGNUZDQ0RFODU4OERFN0NDQTQ1REM4OEZBNjAzRDYKKzoxMDhENDAwMDNENjE3Q0YzOUE2RTkwNkY0MUUzQkRCNTYzMTJGOUQ1MzYKKzoxMDhENTAwMEFFRkIxRUU0NUY5MDFGNjcwQThDMTg1Q0NFQjEyNkVBNUEKKzoxMDhENjAwMEZBRTU0OTI5QkFGQTY5MDk5N0U5RUEzNUJBRUY4QzUxNjcKKzoxMDhENzAwMEUzMkE1OTVCNzIxMTdGQzQwQTlFQTczMDVEQ0VEMEI1M0QKKzoxMDhEODAwMDVGNTc5NjREREYwM0I4NjIzMkJGN0YzNzczRDQ2NEREMUYKKzoxMDhEOTAwMEY4QTE3QUMxRDVGMDNGQTQ3NzMxNDQwRjA4RDUxMzQyMkEKKzoxMDhEQTAwMEY1ODI4NTMzRjVGNzQwRDcxODAzRDlDNDlGMThDRkFCQTgKKzoxMDhEQjAwMDFCN0FGNkRGODgwRUQ2QzkxQ0NGQkQ2NUE3MjgxRkMzNTYKKzoxMDhEQzAwMDAzRjYzRkZBOUIwNjA3RTU5NzIyNUQ4QzM1MDdDODNGRkYKKzoxMDhERDAwMEI3NjFCRTk1Q0U2M0MzOEUyN0U4QkIxMTlBRkYwQkU4M0YKKzoxMDhERTAwMDg2RTg2ODZDQjY0NDc5QUVFOUY2NUY1MzdGQjY5NENCRkIKKzoxMDhERjAwMEQ5NTBCQTE0RUE1RTIyRkQ2RkUzNkNEODFCN0U2RjZEMEEKKzoxMDhFMDAwMDc2MEE5NzdCM0IwM0U0ODc2MDc3OUExOUNBNERBRjY0NzMKKzoxMDhFMTAwMEEwQkNCMURGMDhGRTA4NjExOEQyQUY0MkYyODkyNTMwNEMKKzoxMDhFMjAwMEM5NEJGOTkyRUZGMUVGMjkzMkU2NTg5Mzg4QTZCRjQyNzkKKzoxMDhFMzAwMDc5OEQ4MEY2REQ2RkE5NzlCNDg4QjcxMUY5Q0NCMTdBNTQKKzoxMDhFNDAwMDMyN0VFRjk3RDM3N0ZGRjFGQzdDNkMwRTVFOTZBRUU2MzgKKzoxMDhFNTAwMDY1Q0RERThFNDk2MDJEOTgxNzNCMThDNzgzQjY3MUI1NzYKKzoxMDhFNjAwMDRDRjI5MDVGQzM0RkY1NDNGMkQ5MDEwRkNEQ0ZGQkM3NTIKKzoxMDhFNzAwMDU3MzE2NzEzOTRDNTFBNDVGNTM3QkJENEY4N0EzN0M1MEYKKzoxMDhFODAwMEJENTMwNTQ3MjRGQTM3ODY4OTRFOEE3QjQ3MzM4OUUyRUEKKzoxMDhFOTAwMEUyODM1ODBEM0RBMzA0M0Y2NzFFOTdDODQ3QUUwMDAwMEMKKzoxMDhFQTAwMEEwQkM2MDM3OTlFOUZCMTlEOTRGREExODdEREY2OEE5QjIKKzoxMDhFQjAwMDc5MzNFNTY1MDU2NEYyMjNERTczODhERkMzREI2MEZGODkKKzoxMDhFQzAwMDA1QzUwOTlBRjZGMUZCMDRGNzI0QjkzRkM0NzhFNkEwN0EKKzoxMDhFRDAwMDNBODFCRTEzMkU1NkYzMzg4MkY4QTZFODk4MDZGNTYyNUEKKzoxMDhFRTAwMDVEMkI3RDA3MkVCRURBNDA3RUFEMkJDQzM1QkJFODFDNUEKKzoxMDhFRjAwMEVFQjZEMEY3RTNCQUEwM0ZGQUI5RDZEOTBEOENFODE1OTMKKzoxMDhGMDAwMDk4QzczOTdGMkFGQ0JBQUU3MTUyRENBMkVCNkZGRDQ4REMKKzoxMDhGMTAwMERFQjExMDNGQTdDN0M1RjU2RjRGOUM5OUUzOTdFREQ0MUQKKzoxMDhGMjAwMDI3QzhCNzFCRTMyMkU5N0VEQ0JDNkI2QkY2MjExRkQ5OTcKKzoxMDhGMzAwMEYwOUVFODU4QURGQTlGRDFGRjNGMTRGRkMwRkMwM0IzODkKKzoxMDhGNDAwMDMzMDVGNTRFNzM3NTc4M0ZBNTk5MzlGNzY3QTFCRkY0REUKKzoxMDhGNTAwMEFFMjUwOTdERTk1MUJEQzY0NTZDMDZCRjM5RkFFMkUzOEQKKzoxMDhGNjAwMDIyMERFNTNDMEVBMkFENTNEQjY3QTM2REI5NTAyOUUzOUEKKzoxMDhGNzAwMDVGM0YzMTJFNTJENjRCNUMyNDUwMjMyMEJGMUY4QUY1MTEKKzoxMDhGODAwMDYzMTEzRURDNkY3REE5NzE5MTlBQzI0QjhCOEI2OEZCOUMKKzoxMDhGOTAwMDlFQTVGRTVEMDA4OEFERTY3NzUwNUM4MENFQ0REMEIzNTcKKzoxMDhGQTAwMEJFMjAzODZFQzFGNTk1RTM1RjMyN0Y4RjcxODZEOTZBMzYKKzoxMDhGQjAwMDc5REY1MzA3QkY0NEJGRkVERURGRUU3RTBBOUZENzlERjkKKzoxMDhGQzAwMDdEQUM2QzM5RTA0NUQxMjQzQkY5N0JGN0ZGMzJFNjQxQkIKKzoxMDhGRDAwMDNFOUMzRTdFMzBDQjYxRDFGOUVGRjE4N0Y4NDlFQjEwMzIKKzoxMDhGRTAwMEY4QkRGQ0UwRkFBMjkwNzU2NTFCRjVGMTgwNUM5QkJFQjQKKzoxMDhGRjAwMEZERDQzODdEN0RGRTEwN0REOUNDNkEwODRGNDNGN0JCODgKKzoxMDkwMDAwMDNBRUE2RUNBOTM2QkJDOEQzOTc4ODY3OEQwNzk4ODE3MjYKKzoxMDkwMTAwMDJFOUI4Nzk4QzNFRTRCQzMzN0U2NDgyMUJBNUZGNzNFRDUKKzoxMDkwMjAwMEE3N0JFNzJCMkJERTVBNDk3NkFDODFFRUNGOUY5RUQ3RUMKKzoxMDkwMzAwMDcwQ0YzQjMyRTI4Nzk5Qjk2OTlDN0MwNUYxRThCQkRGRDAKKzoxMDkwNDAwMEE3QkY0QjMxMURDOUU1QkUxMURBNTdFNkYwRUY0NTlEQ0MKKzoxMDkwNTAwMDE3NEY1MEZERjk0MzZCNzdCNUU3MDZDNTdCRUYxREU4NjkKKzoxMDkwNjAwMDcyMTQwMERFMENCNTlEMTI1MDBGMTk1QUZCMUFENUNGQTEKKzoxMDkwNzAwMDlEOUZENTI3MUVBNUQ1RUU2OUNGMERGQUFFNUY5QUQxN0IKKzoxMDkwODAwMDY5NDAzRjQ2NUFFRDFCRjRCRTM3QkRDNzIwQkI3OUZFOTEKKzoxMDkwOTAwMDVFOTk1OTI2N0I0QkNENTM0QjUzRjEyNkFEOENGQjVCMzAKKzoxMDkwQTAwMEE1NTQyRTZGMzY5OEI4N0M3MzQzQjU3ODE1RkM1RjVCN0EKKzoxMDkwQjAwMDY4QkUxQkU3RUI2NzI2RjE3QjFEMENCODEwRjIyQjZEMjkKKzoxMDkwQzAwMEJDNTA3OUE2QzkwMTlCQzJGNUM4QjRCMjg3Qjg1Q0QxQkYKKzoxMDkwRDAwMEYyMDVEQjQyRjNFMjVDNzMxMTNFNDI3NTIzQjVEQjk4ODcKKzoxMDkwRTAwMEEzQjZEQkM5RjU1MzM2ODM0OTI4OTc2MTlGNjFGMzQ0RTIKKzoxMDkwRjAwMDE3QTg3RURBREVGMkQzOTg2NjNGQ0U3OUYzNDNDQ0NGNjEKKzoxMDkxMDAwMEZCRDFGNjYzMkZFMzVFOTcxQzA4N0JERkY2MzZENTZFNDYKKzoxMDkxMTAwMEVEOEMwODI0MzlCODFGMzhBQ0ZFM0VBMzc0RUFBRDA1QzcKKzoxMDkxMjAwMDdERThBRjk4NTc4QjMwRURENTVFQjhDNEJDREE4RDZBNTgKKzoxMDkxMzAwMEJDNDg4Qjk3NkFGOUI1Q0NFODFCODdERkY5MUM2NUZCNDcKKzoxMDkxNDAwMEYzMEQxNDA3RUQyNUFGRjYxRUJCMjM4MEY3RENCRDE1MkMKKzoxMDkxNTAwMDExOEVDREVDRDJGREVCNUJBNzczN0U1QTVEQzBFODE5OTIKKzoxMDkxNjAwMDFBNUYwODVERjc4NjAyREVGRTUwOTFGM0UxODIzRUUyNkYKKzoxMDkxNzAwMDBBNUFGQjBGMTNDM0ZCRTNCRTJERTRGQjNGNzc1RjI5QzUKKzoxMDkxODAwMDlGRUI3RDhBNDk2MUUxRjI0MEI1N0NGN0QwRjc2MDBGMzMKKzoxMDkxOTAwMDNEODlFQkQwQ0FBRUZBMzRGMkRCNzk0QzFDNkZERDMyN0MKKzoxMDkxQTAwMEZGOUVBMEE2M0ZEQTUwN0YyNDNEQUE4NUVBQTNBQkI5NzMKKzoxMDkxQjAwMDNFQTlFOTU5OTIxQUQ3MDhBNTI3QTA4RjNGRTIzQzgyMjEKKzoxMDkxQzAwMDhERDNBREE2Mjc5RUEzOEZCOTQwMUY0MDk3NDMxODhGMUMKKzoxMDkxRDAwMDJCMTlENEJDRDEyMTU2OUU4MjdFQTk3QUQ0RjlGNkQzMUMKKzoxMDkxRTAwMEY3RjY0QkIyOUZFQUI3NDY5MEZENTRCREY5MkRENEFCQ0MKKzoxMDkxRjAwMEQ2RDU3MjNGNjFBN0JERTYyREZDRkU4MUZCM0Q5MUY0MDMKKzoxMDkyMDAwMEE2REVGQTZCNzZENDQ3ODU3QTNCMEFFMzhBODg4RkYxMkIKKzoxMDkyMTAwMDM2OUYyMDVGOEU3NjU0QzBFNDgyRjU5NUEzMUQ2NUMzMEEKKzoxMDkyMjAwMEJDNTU1NzAwRTExNjZBNEY3NURERkQwNUU1QkI4MkJERjMKKzoxMDkyMzAwMDc5QjgyMEVCMUZDMDFGNDJGQzRCOEREMzM5M0VFRjFBOEIKKzoxMDkyNDAwMDdFOEFGQzI2NjIyREI3RjdDNDVBMUUwRjM1OTZGMUI4RjgKKzoxMDkyNTAwMDg1NTFFMTdFMTQzM0M4MjM3NDA1NkE3RTk0MEQwRUJEREEKKzoxMDkyNjAwMDFGQTUyQjg5RkI1MUUyNzM2QkZDQTgwNzlBMjY1OTI0OTIKKzoxMDkyNzAwMDg1RTQyM0Y3QUI2ODc5RUQ2MzJDQkVCN0YwM0U4NjI3MTMKKzoxMDkyODAwMEMzQzgzMDBGMUQxNDU1QjIwMzJENkE3QzAzRkY0MTBCNzgKKzoxMDkyOTAwMDk0NTc5QURGMjQzNDZGREExNkUyMjcwOUY1QTM1ODY3NEEKKzoxMDkyQTAwMEU5RkQyNjhGMEFGMkJEOTM2MTlFRTdEN0U3QkQ4MzY4OEIKKzoxMDkyQjAwMEZCODc4RDhCQTNEMDZGRjI5MkFGNjFBNkVBMzc3OTE4NDYKKzoxMDkyQzAwMEQ3QjNFMzQzRUUzN0U5REFDMUVEMjIxNzJBMzA1Nzg1RTkKKzoxMDkyRDAwMEMzQkZGM0UyNTRFNDA3Qjk2NkRGRTEyQUY0ODM2ODdFOTIKKzoxMDkyRTAwMEE4Rjg2QTE1MUU2QURDMDdFMThCRjAxNEYzMzkzQzYzQjkKKzoxMDkyRjAwMDQyRTBFOTFEQTJDNTg1NTQ3ODBFRTBGMDJEMkY3MDkyNTIKKzoxMDkzMDAwMERGNDk0Mjc4NEEzREYwRDRGQzU0REVCREVERjQ3RDZEN0EKKzoxMDkzMTAwMENCMUQxNkQ5NERGMEZDOTJFQzU1MTNDMjEzRTFGRjEzOEYKKzoxMDkzMjAwMEZENTBFMzQyRTAzOUVFRTFDQzA3RjAzQkMxRTMxRjI5RjkKKzoxMDkzMzAwMEU5QzBFNzg0NERCN0M1REUwMENGNDk1QjFGMjhDMTI3RDAKKzoxMDkzNDAwMDdCOTNDNzA5RkU3MzE2RTc1Nzk4RDkxRDRDOEY2MzY3NDcKKzoxMDkzNTAwMEM4QkEzODgzMDY0RjBEMEY3QkZDNzc4Q0ZDQjFFNTEyNDEKKzoxMDkzNjAwMEY3RTc5N0FCNzg5ODg2NzAwQkY2RTczOUY0NzBEQkEwRDcKKzoxMDkzNzAwMEU2NEIxQTczNkJEQzY4RUYwRTBEODE5Qjg2ODcxRTg0QUIKKzoxMDkzODAwMDFCRjJCQjE4QjNFQzI2RkY1RDlEODBGNjUwNkY3ODM4NUEKKzoxMDkzOTAwMEI0RURDN0UxRTFGQzU5QUEzREFGQzJFREI5RjU5OUY3Q0IKKzoxMDkzQTAwMDIyQkM1RUQ4NThGMjBFM0U1RkY0REQxNjg1RjBEQUJFQzAKKzoxMDkzQjAwMEU1ODE5OUJEQzAyRDMxOThDRkVGOTkxRTFFNkU1QjhCNTQKKzoxMDkzQzAwMDVERDVCM0UwRkQ3NTBFOUY5MUY4MkNFMDFCREFCRDlCRDcKKzoxMDkzRDAwMDlCQzY1OUY1RjExOThEM0ZFNjVCQzNDOThGMEJGQjk3MEYKKzoxMDkzRTAwMDk2NTM1RUExQTc2QzM5RjFDN0FFNzNGQ0IxREI4RTc5RTEKKzoxMDkzRjAwMDg4MTdDQjFGMkQ4NUZDQkU3RDc5RUQ3N0FGNUYwNzcwOTkKKzoxMDk0MDAwMENEQTkzRDRDRjQ2NzA0RkFBMzczQUIzQjZDNTBGMzMxMjgKKzoxMDk0MTAwMDU4MDRDODhCRjgzMkU2QzdGOEYxMjA2NkY1NDUwOTk0ODAKKzoxMDk0MjAwMDlGNDA3Q0QzOEI3OUNFRjg4MUQyNTAzRjg1RjRDNjVGQzQKKzoxMDk0MzAwMDA1MjIwRTI2MTgxMjgwOEY2M0VFRDQxNTI0MDdFRjlGQTUKKzoxMDk0NDAwMDE1ODZDRkFFMkIzMzkwRkY2N0IzRUExRjk0NEI5RDJENEIKKzoxMDk0NTAwMEQ4NEU4QjZGMkQyQjUyNUE2N0ZEMzQ3RkUxQzNEODVGRjYKKzoxMDk0NjAwMEYzMTc3NkM2QjA3M0ZFMzVGQzNFNzg0RUVEMjYwMUYzNTkKKzoxMDk0NzAwMDUwMDZENURENEFGMjIxQkU0QzYxMjgxRkIyNjZDQUZDRjcKKzoxMDk0ODAwMDdCQjNCOTEyRURGNzdDN0Y1Qjc3MEVEQTA5OUQ3OEEzODkKKzoxMDk0OTAwMDNEODNGMEUwNzczODRGNjdFREUzODQwNzU3MkNFNUZFMTYKKzoxMDk0QTAwMDkxQ0VEQUQzQjFFMUYxQTAzNkUyRDJGQzhDOUI3NTcyOTkKKzoxMDk0QjAwMEQyNUJDQkJGNjNEMjY5NTdERTRDRkIxMTc4MzA0MkM1MUIKKzoxMDk0QzAwMDAzNEQ0RUEyQkM0MTdDMzI5NjA1MUU0NjNGRjYyMEMwOUQKKzoxMDk0RDAwMDg3ODgxNDk0OTc5QzFGOEJBMEZGNDRDMTdFQzQ1RUZDQjgKKzoxMDk0RTAwMDhGMUEzRDc0QzFEQTJDRkRGMDlFNzA2ODNFNDAwREFEQzAKKzoxMDk0RjAwMEZCNzQ1OUI2N0Y2MjFGRUJCQkU4M0MwMDM1MkVFOTUxODcKKzoxMDk1MDAwMEUzOTIwQjZCNzlGRTZBRTcxRERGRTVFMTdBNEY5NzgxMDUKKzoxMDk1MTAwMDdEMDA3MEQ5NUNFNjYwNzg3RUQzNDBCMTBBRDg4MkU3REUKKzoxMDk1MjAwMDM5MkY2RjM1ODA3NEFDQzUyMUI1NzhGRUQ2NjJFNzExNEUKKzoxMDk1MzAwMDNDRDdFQjAwQTcxMkZBNjM1RUFGMUFFRjE5QTI3RTA3QzEKKzoxMDk1NDAwMDNBMDRGRjAxQ0YzRkM3NzEzMERFODM3MjQwRjNBMzMzOEIKKzoxMDk1NTAwMEQ0MUJFRDg4REZDQTE3NTgzRkQ2NUM5MzI4MTE3RUJCMTkKKzoxMDk1NjAwMEJBNzFGQzc1M0JFRUE0RkM4NTFFRkYyMENGODdGQkM5QkEKKzoxMDk1NzAwMEZFQUQ2ODMzRTU1NzZBRkUyREFGOURGQkI3MkE1ODgwRDQKKzoxMDk1ODAwMEZFOUQzQzhBMjMyMERGNkVCNUQwRjcxQUFBMDREOThDNDEKKzoxMDk1OTAwMEVGRjcxN0JCOEM4NUE0RjczODI5MUZENjM1QzcyQTkxNUEKKzoxMDk1QTAwMDFGNkNFOUI2NDRFNDE3RTU4RDIyQzlFQkRFRUM5MkYzQkIKKzoxMDk1QjAwMEU5RUM0N0YyMTk5NUVFMkU4MUNGMEMyRUJDMzgzRTkzODQKKzoxMDk1QzAwMDU0QThFNzMzQzk4NTNGMjE3RUI2N0U5NjlFQkZBMERFQjQKKzoxMDk1RDAwMDU5MEZGM0U0QThGNDc0NkVERjZBMUMxRkUzNTcxMTE5RTYKKzoxMDk1RTAwMDQxRkFBOEJBREY1MDNBM0E0RjJGRkRCRjhGQUU2NjIyM0MKKzoxMDk1RjAwMDlDQzNEMEQ1QUNDMjFGNDc1N0E1ODUwM0ZBQTRBQkI5MEQKKzoxMDk2MDAwMDg1N0FCQUZBMTk5NkZGMTdEMkQ1Q0Y2OTFGMTdBMDJCMDIKKzoxMDk2MTAwMDYzMjFEM0U3NDlDN0YyRUYzQzhGODkzNUYwM0NDQkZGOUMKKzoxMDk2MjAwMEMzNzlEMjVGQ0RFNEZFOEJEMDNDNjlDNjZBQTg1QzAwRUEKKzoxMDk2MzAwMDY3NDNFN0EzOTYwQkM3MzMxOUUzNEM5NjREQUZBRDFEQjcKKzoxMDk2NDAwMDJERjNGMTgyRkQ5RDJDQzRDRkM5NDJGQzlBQTFGQTVEOTUKKzoxMDk2NTAwMDE4M0ZBOENFRUZCOUY3ODlCRkVDMUQwRDdGM0VGOUY0OTYKKzoxMDk2NjAwMDdGOTE1RUJCNkZBQTQwRjdDOTBCNDc3RUI3MTM3NUQwRDkKKzoxMDk2NzAwMEEyMzU5NUVBM0M3REZCM0RGRkQ5N0U0RUZDMDVGQjU1QUUKKzoxMDk2ODAwMDQzRjdENTE4NzVCNzdBNkZFMEM3RjkzOTk5RTM1NkZBRjkKKzoxMDk2OTAwMEJFRjlCQTFBRTY0MEI4NUZDOEVGQjlBRThFRTc0RDZCQjcKKzoxMDk2QTAwMDc5Q0RDRTU3QUExRTJDMURDRkYzRTlEMEVGMTlFQUVGRTIKKzoxMDk2QjAwMEQ0RjI5NTNEQjY0QUQyRjM4RjI4NTZFRThGMERGMTc3NEUKKzoxMDk2QzAwMDU2QzZDQUI3RDAzREM2RjNGRDlERUYxNkZFMDNGQzlERkUKKzoxMDk2RDAwMDkzMEE2NEZFNURDNjEwQkY2NzdDQkVGMjYxNjExRjdFQTcKKzoxMDk2RTAwMEIzQ0UxODA3NDM3RTk3NjNGMzA5MThBRjY1NjczM0M5OTQKKzoxMDk2RjAwMEFGMzNDODE2QTBFRjZCOTVENzRFMjEzREYwNjQ5MUVCQzgKKzoxMDk3MDAwMDUzNUNBNzMxQjdGQkFCOTdDNjUzQkU4MTAzODcwQUU1MEQKKzoxMDk3MTAwMENCQTA2NzFFMkZGQzI3RkEwOUZFNTk3RTNFNUYwMUY3OUEKKzoxMDk3MjAwMDczNURFQ0ZENzkxRkMyM0JBQjhGN0JGNDcyRTA5MTI4MzcKKzoxMDk3MzAwMDc4RkY2OEJEOURCRUFGQjU1MkQ1QTMzQjREREQ0OTJEMjkKKzoxMDk3NDAwMDUwQkZGRkFFMTNCQkQxM0ZFMTZCMzMzMEJDREY3NkIxMEUKKzoxMDk3NTAwMEZFQTM4NjBCRThDNUU2MTBGQjY4QzMzOUJERDhGN0Q2NzMKKzoxMDk3NjAwMEM0MjBCREI4NjE1NUZFOEU2MzYxQzZEMUY0RTI5QjY2MkMKKzoxMDk3NzAwMEVCRjVFMjcyMUJENzhCQ0I2REREMjZCNDBGQ0FFM0JFQ0YKKzoxMDk3ODAwMDdGMURGMzRFOERENUFDMURFNUUyMjBBNTg2RjRFMTc4NzIKKzoxMDk3OTAwMDg5NTEzRUYxRkY4RkNCQjM3RjY4NUNCRTc4QjYzRTJFMTkKKzoxMDk3QTAwMDNGNTZDRDQ3NDExRThGREZGRkU5RDJGQ0E4OTNCOERFQkMKKzoxMDk3QjAwMEIwQzZDOEVEMTVBRjAyRUZDMkM0RDE0M0UzRjI0M0NGNDgKKzoxMDk3QzAwMDNFNDM3MUY5NzVEQkFENzQ4RjZGQzM4RTY2M0VERTE0NTgKKzoxMDk3RDAwMDI2NjE5RTc5MjI1M0Y1QjUwMkVFMkYwREQ1M0YxRTM1MzkKKzoxMDk3RTAwMDI5RDY5NEYxODhFRjA2QkE0Rjg4RjcwNEM5MkZCMkRENjUKKzoxMDk3RjAwMEJBMDlGRDRERTk3NjlFQ0Y2RERFRkZGMjU2QjczMTQ4Q0UKKzoxMDk4MDAwMDNGMDQzRDk0RjRFMkIyMDA3RDk3QTk1QzcyMzBFMjNCRTQKKzoxMDk4MTAwMDcxOTNGQzE0MUZBRjEzMDhCRjQ2Q0NFNkY0QjMzMEQ3RTYKKzoxMDk4MjAwMDQ3RkFFMUEwMzI0OUUwRjdDNERDREM4RTRGRTY3MUU3OEQKKzoxMDk4MzAwMDQ4QzQyRjY4MkE4RUUyNzE1RkU5ODBFOEMwQjhGMzdERTIKKzoxMDk4NDAwMEQ4NzQzMkRFNUY2NUZDN0IxNTkzMERGNEVGNTBBQzEzREEKKzoxMDk4NTAwMEJBMTM5MDJGQjcwQTRBMjIzRTQxNjdBMjdCOEY0RkM3QTcKKzoxMDk4NjAwMDI4MDNGMURGOTNGMjI0MTlFOERGOTNEQTkzRDc5ODgwODUKKzoxMDk4NzAwMEVCNkJBQTZGNEQ0MEJENzBDRDZDMUU0NzY5Q0QzQjRFNjIKKzoxMDk4ODAwMEY5MEZBNjc0RDAwNzUzRTgxOUY2REYxRDlERUIxNEQ0MjkKKzoxMDk4OTAwMEJDQzBGNjA0RkExRTAyNkJGOTkwRjA2QTk0OTlGMTdGNEQKKzoxMDk4QTAwMEU3QzdFMTVGODRGNDc0Q0M0NkZBQzJBRjA0MUZCRjI3NTgKKzoxMDk4QjAwMDY0QjdEMjdEQkM5NkNCQ0M4OTU1QjA5RTY2QkI5OUI0QkIKKzoxMDk4QzAwMDA5RUY2NTUzMEZBNEMwRkJFNjAxNTIzNEM2MDFCQzI5NjEKKzoxMDk4RDAwMEE5MTJGQThGQkMzMThENkZBMjFGQTQzOTI1OTU2MUJFRTQKKzoxMDk4RTAwMDdGNTNEOTA0OEE5RjM3OUQwNTA2MDMzRDNEQTM0N0VDNkUKKzoxMDk4RjAwMENGODJGNzZCODQwMDdEMzdDODNERDlDMDMwOUZCMEVENzMKKzoxMDk5MDAwMEIyQTk4OUMxRjczMjQ1Mjk1NDRFM0E0ODJFODhCMjgxMEUKKzoxMDk5MTAwMEVFRjk4OTZBM0M1QjNDMkY5RUFEOEY0RjdGM0Y5QkVGRkEKKzoxMDk5MjAwMDVCNjYyREYzRTgxRTY4OUM1OUMyRkQ5NjVGNTZGQzIxQ0MKKzoxMDk5MzAwMERENzM4QjMzNTM1RTUwQjk4OUYxRUY3RTVDQzZFODVDMTIKKzoxMDk5NDAwMDQyRTFFNzU5QTU4RjJCMTg2REZBRjVBREMxQzAzNEU1OUEKKzoxMDk5NTAwMDYxOUY1RDgyRjhEMTgwMzBBNTNDRUVBRjk2MjA1RjZBQjIKKzoxMDk5NjAwMDM4NTc3RjkyRDc0N0YwRjJDRUQ5NDc5N0EwMUM5NDE5NjkKKzoxMDk5NzAwMEZGRjc0OTFBNDZGMUJDQ0JGMjAxQzVDNDg3Q0I0RDgxMzQKKzoxMDk5ODAwMEIwREZGOUJERDA3QTY0RTY1M0Q0RjFEOEZGRTQ3ODZCNDgKKzoxMDk5OTAwMDJFMzNDRkYzQTU1Rjc4QkM5RTczMDFGNUY5MTJDNkQ1QkYKKzoxMDk5QTAwMERBODU4RTFCREFFRjdGQUE3RDZGRkJGQzY4RjZCOUZCQzgKKzoxMDk5QjAwMDcxOTQwNzQxMkFBMjdBOUYwREY1NjRBM0NBMEYzREQ5N0QKKzoxMDk5QzAwMDEzN0M3RTE5Rjk4MTlCRDM0NThDNDE5NzY3RkJERkE2RjkKKzoxMDk5RDAwMEYyRDZCODAwODAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwRDUKKzoxMDk5RTAwMDAwMEJDRDNCMEQ1NDVDRDU5OURGOUJGN0U2Q0QxMDY2OUYKKzoxMDk5RjAwMEUwMEQwQ0M5MTAwOTNFMDgyODMxMDQ1RjEyODhBMDQ5MDcKKzoxMDlBMDAwMDc5MDQ2MjQwQTk0RUY4MDlCODI1RTk0NEEzNDZEQkIzQkUKKzoxMDlBMTAwMDlEQkFENjkyM0REOTMyMDk0MzIwOTg5MDA5QTkyNTZFNjYKKzoxMDlBMjAwMDZEOEJBOUQ5QjVCNTQ3QTlEQkVEQUE0N0JCOTM5OEY1Q0UKKzoxMDlBMzAwMEY4MUZEQTVBQUI3QjNDMTY1MzlCRERGNkI4M0RGNDI3OTIKKzoxMDlBNDAwMDk2OUVEMzM2RkI3RERGN0QwRjY2MjY0MzIwNjlGNjlDMEMKKzoxMDlBNTAwMDlEMUM3MkU3QkU3N0VGNzdFRkZERkU3RkVFOUMzQjg3QTQKKzoxMDlBNjAwMDlGNUE4MDczNTYyQjZCMkE5ODY1QzA5RjczNjA3REQ2NzIKKzoxMDlBNzAwMEUwNzM2QUY5M0ZEMEZEMEIwMTE0RkFFNkMwNDdERDRERjMKKzoxMDlBODAwMEYxQTI0QUYxQkMyNTQwNDM3MEJFMUI0MDAzODg5RjkzNUUKKzoxMDlBOTAwMEYwQTkwNTBGNUZCRDc0QUUxODIwMTRDNDg3NzkwMkFDMUQKKzoxMDlBQTAwMEI2NzAwNkVFNEZCQjU2QzdFRkY0MDM5QzQ1MzhCOUM2RjcKKzoxMDlBQjAwMDBDMUNERTQ3MTEzMDQwQjBDNzYzRkY1QTM1RkNFRTlERTkKKzoxMDlBQzAwMEI0RUUzNTYwMUNEMzY3QzYyQkQ2QkE1NzFGNTEyMTZFMzIKKzoxMDlBRDAwMENGQzdCRkNGNUFFQkZFQjRBQjM1M0JFNDk5Mzk2RjZBQzEKKzoxMDlBRTAwMEJCNkMzNDc5REU4Nzc0MDY1QzI3RTI4M0QxNjNGODNENzIKKzoxMDlBRjAwMEZBNkU0Q0UyNEQzQzgzN0ZCOERGRTg0QTZENzQxMDlGRUMKKzoxMDlCMDAwMDNGNjg4RkYzRTJCODIyMzE1RkM3RkQ2NkMwQ0M0NzU5OEEKKzoxMDlCMTAwMEM4NzhCMDVFNDI4OTAzRTdFRkJCQkFFMjUxOUFGRkYwMjIKKzoxMDlCMjAwMEUzQzNERkZBMzYzRTNFRjI5RDNEQkZBNDc2NDE0OUM1MTAKKzoxMDlCMzAwMDUwMzVDMkNCMzQxQzg2NDAzQjA0NEE5MDBFNEVGQTg2MDgKKzoxMDlCNDAwMDc4RjQ3Q0VBQzgxNEEyMUZGQkM5NzhEQTVCN0U2NzhDQzQKKzoxMDlCNTAwMEM5OTc0ODQ3MUM3RkM3N0VDOUQ0NzAzRDk3Qzc3MzU0QzcKKzoxMDlCNjAwMEE2RkRCOTI1OTNGNjJCMUY1RUM0RkIwRjZDNEZBNkZCMTkKKzoxMDlCNzAwMDg4NjRCRTFEQzBGMTkxMDMxMjFDQzM3RTg2OTFCMDBFOTUKKzoxMDlCODAwMEZFQTkwNUM5RTM5QjA5QkY1NUQ0NEIxODg3MUIzRjI4ODUKKzoxMDlCOTAwMDQxRTc1ODFBN0MzRjE4NzQzMDNEODg2RTkxODRGRDFGNTAKKzoxMDlCQTAwMDcyRUFCNzEwNUUwRkVEOTMyMTgyMjAwRkVENzQwMTJDNDUKKzoxMDlCQjAwMDA2Rjg0NkYwREZFRkRFNUQwMkYwODUzRTI3RTM3RDY0QzgKKzoxMDlCQzAwMDlEM0EyQUUxRkIxMUFGQjZCOTkzRkE0QjFDQzY1MTFENjEKKzoxMDlCRDAwMDA0NjNFMkI5MEVBRUI4OEFDRjY1QUYzNzc4QUJDRUVCOEYKKzoxMDlCRTAwMEM1RDZBOUY5RTBBMTcxOTM4MUEwOTdGOUU4OEQyQUUyODEKKzoxMDlCRjAwMEEzQjc2NUU2QTNENEZEQTdGMkRENUM3QzU2MThDQ0IxMTMKKzoxMDlDMDAwMEYwMzAwQUMxMTVDODlFQjI3OUUyMENFRTBGQUU3NjMwODQKKzoxMDlDMTAwMEZGMkNCRkRBQzFGQjNCNUI4MDAzQTREOUY5QjBBRjA3Q0YKKzoxMDlDMjAwMDE3Qjg3QTg2NkY1NDhCRUU3QkZEMkRBNzA4RkM2Q0YzN0EKKzoxMDlDMzAwMEQ0RDE3MUIzQTg4MkQ2ODVGMDU4MzlGMjczMjA3OTdGRDgKKzoxMDlDNDAwMEY2Qjg5MjY5NzlGODNCNTg1MEM5NzIzNzI2RTM1OTVERTYKKzoxMDlDNTAwMEEzNzExMzJBQTgxRDM3MjU2Q0NCMUVCRDVGQkI5MEJDMUEKKzoxMDlDNjAwMEI4MjAwMTdFMTFDMTA1M0U3RkFBRkMzQTIxQzQ0OERDMjAKKzoxMDlDNzAwMDkzNTk3ODFCOURCRjZGQTMwQUIyOTQwNkRGNzNGNDBGNEMKKzoxMDlDODAwMEVEQkNEQjI0RkE0NzNFMEY0NjI5RUEwOTY3MjA5OTJGRUQKKzoxMDlDOTAwMDgzMkY5NDMwRkZDODAzMzJCOEE0NDRGRTZBMzQ4OTVFMkYKKzoxMDlDQTAwMDVGQkFENTM5QUQ3RkRDQjYxRTIzQkExQjQ1RTBDMDdENTcKKzoxMDlDQjAwMDFEN0U0QjY2QkUzOTFDRENGQjBCOTlFNEJCNTFENTI1RTAKKzoxMDlDQzAwMERDN0Y0NkVDRUU4N0RBRjFGREExRDc2NTYzMTA4Nzc3N0MKKzoxMDlDRDAwMDNGQjNFQjY3QUY2MjdCQkFCQTc4OEQ1NDRDNDQzMjIzMDIKKzoxMDlDRTAwMERCNzFGQ0U5RjU2RTYzRDAxMEYyMzc4RDk3NjI2RTRDMzQKKzoxMDlDRjAwMEY3OUE5OUY1MEU1NTE3RjM3QTUxNUM0RkJBMDAxRjI4NjEKKzoxMDlEMDAwMDhERUEwNzQ0ODc1NDc4RDNGQUJBRkJGODU4QzNFQTA0QkIKKzoxMDlEMTAwMEI5NUExODdBMjE4OEU3MUJGMkUwMjYzQ0Y0RkUyNEJGRUEKKzoxMDlEMjAwMDg3NEFFNENCRkNEOUQ3NDE4QzMyNUU3RTQ2NUY3MURDM0EKKzoxMDlEMzAwMDVGNUFDRDkzMDRBN0E5QjQyQTkyNDlFNzgyNkMyMDdDOEMKKzoxMDlENDAwMDdDRTgzNTZFRjRFMTkwRjc5RDg2REIyODlGOTlERjFCNTgKKzoxMDlENTAwMDczNDJCQzlDRjA4MEVCNjJEQjBDMTM1QjVBODhFRjRCQzgKKzoxMDlENjAwMDlDQUMzRjY0RkY0QTdFQkVERDFCNTQxQ0I4QUZGRjBDQTkKKzoxMDlENzAwMDE2RjM3QUY2RkMyNkY4QjI3MjFGQkVCRkQ2MzlEQTQwNjcKKzoxMDlEODAwMEZDMTFERDBFNUEwNEE3NkNGM0M2MTRFQTZGQTAwREUyQjUKKzoxMDlEOTAwMEMyMUJGNTNBNzcxMUMyNkQ3QzlFMTYwMkE4RjUwREZCMjkKKzoxMDlEQTAwMEM5MEU1NTNDNzdBNDIwNDRFQjQ3Q0MxRjk1MjE5RTdEREUKKzoxMDlEQjAwMDAyNTVCMERDMzUxRUFDQzdGOUJENkZDOEM2MUU3RUEyMDkKKzoxMDlEQzAwMDFEMEZFMTdDMjUyMDAzRDE0OTdBNkE2RDYwMDJGN0EzNUIKKzoxMDlERDAwMDc4Q0VCQzA3NTkwMEVCMjYwMTFBMTJGOEE5NzZDQTBERjUKKzoxMDlERTAwMDBEMDk3QUFFMEUyMTI3RjZFQkRERjk0OUUzMzc2ODQ1MTgKKzoxMDlERjAwMDQ5RUY2NTMwOEQzOEQyNzc2MzYwNTlEMjM4NkY1NUE1RjkKKzoxMDlFMDAwMDQ2RkI2REQyNTcyNjNEQkZCOUFDMjY2OTNFMzQyOEE3MjQKKzoxMDlFMTAwMDI3QjBCRjE2RkYxMURENjUxMDdENUJBRTNDRTVEODRGNjYKKzoxMDlFMjAwMDk4QUY0MDQyMUZERkZGMjVFOEY1OUZDOUM0Q0U3NTcwOEIKKzoxMDlFMzAwMDFEQzk0RjMzMTg5RDI0MUY2OEJDOEQ2Mzg4OTc4NUNGM0IKKzoxMDlFNDAwMEI5MjczMkM5OTA5ODI2REI3NUM5RTJDRkFBNEQ0NTRDOTcKKzoxMDlFNTAwMDFGQzk3M0M2NDFGODdGMDQ2MUM4QzgxNzE1REE4NDgzMjcKKzoxMDlFNjAwMEU4MDREQTk4QzRDRjUxNkYwQzIyQjIwMzhBQzlFM0QwNTgKKzoxMDlFNzAwMEMwNjk1MTFDNzcwNTZBNkYwREZCREUwMEM0QThCRjA0RTIKKzoxMDlFODAwMDYyM0MxRTNGQjFDMzM1QzgxNjZFMzEzRkFCMDU4QzgzQjMKKzoxMDlFOTAwMEY4M0VCMzNDMjI0OUQ4Q0Y2OTA0NDM0Njc4MUU2MzVDNDAKKzoxMDlFQTAwMEEyN0Q2QTM4NUY1RTQ5MkMxOUU3N0U0MTIzOENGNzMyMjgKKzoxMDlFQjAwMDdDNzMwRkNEQ0ZFRjA2QUQyRjlGRjk5N0RGOEY3NjQxRTMKKzoxMDlFQzAwMDg0RjZGMzI4MThFMDkyMDkxRkE4OTA5NjkyMTYwOTczNTkKKzoxMDlFRDAwMDdCMjVFODM5QTQ4N0JFMDlDNjJBRUE5N0MyMDRFQjI1ODgKKzoxMDlFRTAwMDM0RUYxMkY1MTdDMTk4MjY5NDdEOUNGNTM3NEMyOEJFQTcKKzoxMDlFRjAwMDMzNkVBMUZGRDNDOUNEOENGQzI4NzBDNkE2MEIwRUJFNTUKKzoxMDlGMDAwMEZGNTZCMzdDMTNFQUMxQ0RCNzU1NUREMERGNTBCQTVGQzEKKzoxMDlGMTAwMDRDOTJERkJCMzdFOThDNzdBNTdCMjNDQjhCRDJGRDEyMkMKKzoxMDlGMjAwMEJGMUZEODE0QkM2RTEzM0UyNzU1RTA1RTc1RjFGOEFGMjUKKzoxMDlGMzAwMDUwMDUzRUEzMTIxOEU4Q0I0MEY0RDk5QjAyREJDODVGNjIKKzoxMDlGNDAwMDc5RDY2RDk0QjJDODIzM0U4OTJGQUFERDkzQUZENDg4MDkKKzoxMDlGNTAwMEY5NDQwRjNGRDI4M0YwOUQ1MzBFMTJFMTYwMDlEMTAxMDUKKzoxMDlGNjAwMDlGQUI0ODg3N0Q0Q0M3MThDMzJEMEM4M0IxREI1QTk3MzQKKzoxMDlGNzAwMEZBRjk0ODA3QTJDQjI4NjgwQjA4QUY3MkY4RTJFOEMwRUMKKzoxMDlGODAwMDFGODRCM0U4MTkzN0ZCNDcwQUQxNjVFOTY1QTFDQkE3NjAKKzoxMDlGOTAwMDA5OEYxNzRCOTc1NDdBQzBBRTVDODA5QUI5RjVFOTU3OTAKKzoxMDlGQTAwMEE1Nzg4NkI0OTRDODgyRjRDMUYzNDg0ODFGQzI2NzAwRkMKKzoxMDlGQjAwMDA0M0REMEFFMUI4NEE3NzRGOEE3N0U0NjI1RTg3QkI4ODUKKzoxMDlGQzAwMDJGQzYxMzNEMjMzNTMzRkM5RjhERkMyRkZBNDJCRTdDRjgKKzoxMDlGRDAwMDQ4MDdEMTE3NzRGMjkzQkM2MDNGMTAxQ0UzRjkzOURCREEKKzoxMDlGRTAwMDIxNzgyMDlGRTg2MTMyRjI2Q0JCRUM4MjQ5RjY2QjhCRTIKKzoxMDlGRjAwMDI1ODNFOUI1NTQ0NjA3MERGQjk5NTJEQzcyN0U0NkQ5OUMKKzoxMEEwMDAwMEFFNjc4MUM2RjQ1OTBDNjE2RUZEQ0VDOUUzRTc0ODVGQzcKKzoxMEEwMTAwMDdCMUNBMzkxMjI2QTlGQUVBMzc1N0E5QjUxQzM5MENBMDEKKzoxMEEwMjAwMEY3MEVENzMxNUZERTAzNUEyOUYyNURBMTZBQjJGRTJFMjgKKzoxMEEwMzAwMEJDNDYzMTIyN0EyMkJFRjYwOEJGNDkzNzhGOTBCRDI5MkYKKzoxMEEwNDAwMDc0Nzg2MUIwNzI2NkREQThEMzA4QzQ5MDVFQTdCQzY3NUYKKzoxMEEwNTAwMDRFODRGMEY5ODI3Q0I0RUZDNjBDOUU0RjNCQzVGOTA4RTQKKzoxMEEwNjAwMEE2N0MwNUM5ODM5MDhGNDAzNUVFQzU3N0JFN0UwQjI4NTAKKzoxMEEwNzAwMDgyNkYzRDNCMTA3Rjg4OEZBREY0MDJGMTI0MERGQzFCRjUKKzoxMEEwODAwMDNGN0ZBNDVFRThCQkNGNkUwQTNENEVGQzQyRkE4OUYxRTkKKzoxMEEwOTAwMDY3ODI0NkZBNDkzMzgwRjVBNjQzOEZCMDlGNzA3NkMwMzkKKzoxMEEwQTAwMEE1MTM5RjQyNkNDNDI0QkY2MjlCQjVDRUI2MDFENzA3RUYKKzoxMEEwQjAwMDUyNTZDMjM5QTNBRTI0M0JFRUQwODNEOUNDQ0Y4NjA0MEUKKzoxMEEwQzAwMEU0MUZDQzc3REVBNUYyM0Y3NEU3Q0RDQjBGQTg3QjZBMDcKKzoxMEEwRDAwMDZERjY0NEY5RUNFMzU0OTI4RkRDQzQ3OTgyNEVBQTNGQ0EKKzoxMEEwRTAwMEM0N0U4NzRBNzI5MjNCMzcxQzY3OEFGRjYyQzM3MTA2M0YKKzoxMEEwRjAwMDgyMENDNzY5RkIyRjY0Qjc5MDlFNzdBMUREMUE0NDdDNjAKKzoxMEExMDAwMDdGREE0NDg3ODhGOTcyRjIzRkM4OUVERjFFQ0U2MkJGQjUKKzoxMEExMTAwMDhCNTE4NEUzRUU4ODQ5QTM4M0M4OEY3NzQyNTgyNTNFNEMKKzoxMEExMjAwMDk1QTAyNDQyRjREQjFBOTFEODdGMkJERUI3M0Q4QkZEM0UKKzoxMEExMzAwMDA1NjhEMDA4M0Y1MkZDMDZGOURDRjI4QkMwQTM4NUE3NjYKKzoxMEExNDAwMEFERjE1RjNBNzUyRkUxRDUwQjNGNEY4OEI3RUNGN0JGMDQKKzoxMEExNTAwMEVCNUE3QUFBNEEyN0E1RUQyOTIzRkE2NjVBRjQ0NUI1OUYKKzoxMEExNjAwMDFENzkwREY3RTlGQzUzMzYwQzZBRTQxNzdGRTk4RDVBMjcKKzoxMEExNzAwMERDNUZERjhGNjU4M0UyQjM0QzEwRjFENTAyMTA3NjNDRDMKKzoxMEExODAwMDkzRTQ3NDI5RjFDQjU4RkMzM0M0NkZEREQ5MUE5REQ3MDEKKzoxMEExOTAwMDFFMDdENkI4MDg4NEQ4M0ZDRTQ0M0Q0MDcwMUQ5OUZCQjkKKzoxMEExQTAwMDk5M0YzM0IzNTREREY2QjcyMUYxMUM2RTg5RkQ2MDhGMDIKKzoxMEExQjAwMEE1NzJGM0Q0Nzg5Q0U0MkIwRkZERDhEREM5RjAyNTExRUUKKzoxMEExQzAwMENGMDNDNzQzN0MwRUU5RkNGNTU3NThGRTNBQkVBQTNCQzUKKzoxMEExRDAwMDM3MEZGRjNFRDU3Rjg3QzQ3ODkwQzY2M0RDMTk0RkMwMjgKKzoxMEExRTAwMEVCQjRCQzU4NzI2NkVGREJFMzUxOTNFNTI1NjU5RTRERjkKKzoxMEExRjAwMDhGNzJBN0UwOEZDNTE4N0ZFREM2RkQwRTBDMUNBRDIzMzYKKzoxMEEyMDAwMDdEMzM5MjA3M0E0NjlBRDBCRkY1OUYyNDhBQjNENjkzRkUKKzoxMEEyMTAwMDJFMjZGQkQzMDBBMzE0NDc3ODQwMUYyQ0MzQkVCM0MwMjcKKzoxMEEyMjAwMEMzRkNCM0U4QkY4M0YxQ0YyMDlDQkJBQjVEOUE4RTM4RjMKKzoxMEEyMzAwMDU5RkM5MUE5RDVFMUZCQkIwQURDODY4OUY0OEQ1QUUzNzAKKzoxMEEyNDAwMDIzMERFODY3ODlFNURGMjZCRkY0NEU2QkJGNEMwQjk0MDYKKzoxMEEyNTAwMDQzQjNBNTg4Rjk1REYxQjVFRDdEOERFMkRFQzUzMkM4NjkKKzoxMEEyNjAwMEE0RDdFNDJFODNFQ0QzOUQxODMwRTRBMkVCMEU1Rjc2RTYKKzoxMEEyNzAwMEIyREY4N0ZFMUQ5RkM3RDU5MEVDRjdEREY1ODgzM0E5QzcKKzoxMEEyODAwMEVGNENGMTEzNkI1QjkyRkRDMEE2MTZFMDc1NjkzRkI5MDgKKzoxMEEyOTAwMEFCRkU3QUY4RTBGMUIzRkU1Q0ExOEMzQkI0MzQ3NkQ1MkEKKzoxMEEyQTAwMEM2QkZGNDk0ODdGMUZGNDIxRUUyOTVGMzI0NDFGMzczOTUKKzoxMEEyQjAwMEQ4NzcyMTFFODk1RjExMjM1OTU1ODgyNzkzQkVFQUU0NzgKKzoxMEEyQzAwMDI3N0ZFRjNFMUFFRjNBOEJGQzRCRTM2NTRGQzNFNzg4REQKKzoxMEEyRDAwMDBFNTc1ODc4MDJCMTJGMTNGRkQxQkU1M0ZENjE1NzhBMzQKKzoxMEEyRTAwMDNGOUNCQTZGOUIwRTc3RDhGODU5MDM2QjA4M0ZFODlGRTUKKzoxMEEyRjAwMEIzN0Y2MDlGMkJGNTNDQ0Y2MzdDREU4MEJDRjQ4MzFFNzQKKzoxMEEzMDAwMDM3QjdGMTFFOEREQjEzM0QwMTZFNEZGNkU4RDA4MDhFMUUKKzoxMEEzMTAwMEQ1NEIzRDY1RENCRURDNjNGMEYzNTc3QkFBQjlCNUYxRTQKKzoxMEEzMjAwMDMxOUJCRUYxRTYzOUQ4NUYzOEI0Q0JDMTc5MDJBNTVDNjgKKzoxMEEzMzAwMDdCRTU2QUUyREJCNzY0NTYxRjFBRTgxOUNBNTJCNjQzRDYKKzoxMEEzNDAwMEEwRTBCODJCMUI5NTUxOTNDRTYyQzUzRjhCMkMzRTVCOTIKKzoxMEEzNTAwMEVFOUEzQ0VFQzI3OUIxN0MzMEY2RDA0NEI0REJEQjJCMTQKKzoxMEEzNjAwMDY3RTI5Rjc1OTM4RTE5MzkwMThBNzcxNjI0RTUwQkVBMDcKKzoxMEEzNzAwMDIwMzdBOTVGRUZCRTIyNjlGQzA2NkQ2OUQyN0I5QkJFQzgKKzoxMEEzODAwMERGQTgxMzcyQjMzMUIwM0M2OUZDQTE4NkY1RjFCQkM5RkIKKzoxMEEzOTAwMEFGQUY3MTY5OTQ2RjY4RDI1NzI3QkRCRkI5RUM4NjI0RkYKKzoxMEEzQTAwMDc4MjAzNzFCQTRBNzczQkExMkU4QzZFNzRGQTZBQkJBNEEKKzoxMEEzQjAwMEUzQzI3MTkwNERFN0QxMTQzOTk4OERCRUE5N0M2QkUzNEYKKzoxMEEzQzAwMDM1NjcxQUFGMjJBRThDNTI1Q0E5RDNCOUNCQTU2RDA4MDQKKzoxMEEzRDAwMDZBNjhEQTJGMzE4MUYyNEJGNkJBNEEzNUM2OTcxNTk3N0IKKzoxMEEzRTAwMDNGQkVDQ0EyRjhCMjI4NUQ3Q0Y5MjFFNzZERTY4QzJGNDgKKzoxMEEzRjAwMDFCOTNFM0NCQUMxNEJDQ0QxNTVGQkU3QTg5RjhEQzVBNTUKKzoxMEE0MDAwMDI4RjI2RTM5QUZDQkVDMDdDQThENjFCNjdGQjlFM0IyRTMKKzoxMEE0MTAwMEIxOTE0MjRGQ0IxRkYzOTJDQ0UzQjhBRDU1MkFGQjk3RDUKKzoxMEE0MjAwMDg3NjAyMjAwMjJBRjk4NEZGNjMwQjdEQ0M4Mjc3REYzNTMKKzoxMEE0MzAwMEE0Q0Y1Qzc4MUJDNUY5NEQwRUUzMjg0RTc5QjFFRTJCMDUKKzoxMEE0NDAwMDAxRjIzQkY2RUQ3RTM0ODA0NjA5RkVBN0M1QzFGQTJFMjcKKzoxMEE0NTAwMDU2Nzc2NjBCQzk5NUEyQTMxRjI3NzE2QjhFQTZGMTRGODUKKzoxMEE0NjAwMEVDRjE3NkJFRjFFMDE2OTE2RjNDNjhFNTFCMEY1QUVCRkMKKzoxMEE0NzAwMDIwNDJEOERFOEU1NDg5N0NFM0FGNUI3NDJCRkYxN0UxNUEKKzoxMEE0ODAwMEZDRTJFMTJENkJBQzdDMjNGNjU3RDA3MDgzRURGOEEwOTUKKzoxMEE0OTAwMEQ3MzBFRjIwRkVGOTg1MDcyMkY4RTg4MEE0NjU0OTY0RUIKKzoxMEE0QTAwMDJGQjYzODM0Q0ExRjhGMzRBRTdBOTdGMjQ5RkIzQ0FBRDQKKzoxMEE0QjAwMDQxMDIxRkY1QURDOTI3RkU5MkI3QTJEQjgzRkRFMUM2QkQKKzoxMEE0QzAwMEUxOTc2OUJFNTJFQUUwN0U3NENCNTU5QzE3MUNDOUQzNTQKKzoxMEE0RDAwMDlBOEEyOUNFREI1MDRDOTgwNkY5OTkzRkY1NTA1RTIzQjUKKzoxMEE0RTAwMEVBM0IxM0EwRjlCREQ3OEJGOUIzRDEyNzM1RkYyRjkzRTIKKzoxMEE0RjAwMDI2QTZGOEFEQzQxMTU3MTE4RUZDRkM5OTNGMTNCQ0YzOEUKKzoxMEE1MDAwMEYyRjMyOTdFQzVBMDRGRTVCQzZERkU4RkY3N0UyQjUyN0UKKzoxMEE1MTAwMDQyQUFEQ0U0N0NGMzA4Q0EzQ0UxNjlFQjk2OTY2QzhBQkIKKzoxMEE1MjAwMEE3QjYzQTI3RjJEMkQ5MEIzQkZGMzlFRDZGRkE5M0ZENkMKKzoxMEE1MzAwMDg0NTRGOEZDQjFGMzZCMEVEMUQ1RURCQzJEN0VBMkI3REYKKzoxMEE1NDAwMERDMzgxQTI3QkM0MUFDQjE5OEUyNUU4RkIwQ0JCM0UxRTYKKzoxMEE1NTAwMDQxRjE1Q0I4MEUyMjc3Njc5ODE5MDk3OEIwRUIxREQ3RTYKKzoxMEE1NjAwMEI2OEEzQ0I4RDFBQURCNzlDNkE0N0E4OUQyRThFMDc5NjgKKzoxMEE1NzAwMEI2N0VCMEYzRTNBOTc1MTI3QjFGMzVBRDIyNEY3QkZEOEMKKzoxMEE1ODAwMDBDQkNBNEJBODlCQzU2QjVFMDE5MUMxN0E3RTZCM0U3MDIKKzoxMEE1OTAwMEFBQTNDQzk1Q0Y2RUI2Q0U3M0IxNzU5MzdCNUI4MUU3RTIKKzoxMEE1QTAwMEZEN0ZDRDdGREZEQkZBN0Y5M0ZGM0VCRjVFMzRDQUYyRDMKKzoxMEE1QjAwMDAzQ0Y0Q0ZFOUNFNDNCQkE2Q0ExM0UyOEVBNDM0OUY1MkMKKzoxMEE1QzAwMDlDRDQzQUNFNjA4NjgwMzNCQzUyRjhBOUMzNTYzRkIyQzEKKzoxMEE1RDAwMDQyQzA0REFERUY2NDU4Nzk5NTQ4RUI1MjExODc4MTIxMDcKKzoxMEE1RTAwMDg4QUM5ODg1QzQxNzFFRTVCQjExMERGOTYxODFFNzEwOTEKKzoxMEE1RjAwMEY4QjA3NUY5Qjc0NUE4QUQyREQ0ODdBQTcxNUZDM0NCNjQKKzoxMEE2MDAwMDFDNkNDNzg2QkRBMTQ3RkI0ODBGMkRGM0E0OTU4RjgzMTMKKzoxMEE2MTAwMEFENDIyRjBFMTBERjcyRkMwNEE2ODNFNDRFQjI4NTA0MTcKKzoxMEE2MjAwMDQyMEVBNEQ3MDg3MzNFQzBEMTU2OUZDODY3NjlCMUVBRUQKKzoxMEE2MzAwMERCMTE4RjVGMjVCRUM4RTNGM0YwRkM1NEY4NUYzQjFGQ0UKKzoxMEE2NDAwMEZFNjNDNEFGNTEwQjM4QzFEOTg2NzBCRUQ5M0E1RDQ3OUQKKzoxMEE2NTAwMDhDRDA3QkI3QjU5RTVCOEY1NTkzQkZGMDU4QUIyNkY0N0IKKzoxMEE2NjAwMEIwQjJEMkEwRjMwRkZCRDJBRkY3OThCNTlFRTkwODRCN0EKKzoxMEE2NzAwMDM0NkU1MTk3OTgwRjZFMzFFRkEwMzREOTc5NUFEMDkzMzgKKzoxMEE2ODAwMEU1ODlENkE3Rjc5OTQ2QjI3RTQ4ODU5QjUxNzZFMTdBNEYKKzoxMEE2OTAwMEQ5RDNEM0ZCNEY4RTg3MEU0OEU5RjdGOTYzNEIwRTZCODYKKzoxMEE2QTAwMDBCODFFRDExRjFDNTlFMzQ3QzkxMkFFRjJBRTUzRjExMTMKKzoxMEE2QjAwMEVFMDk4QjBFQjZERUYxMjhFM0VCMzMyQkM5QkU4M0QxNTYKKzoxMEE2QzAwMENCODgzRENFRTdERDkzNzkwQkM3Qzk3RDM3OEIzQzg3QkYKKzoxMEE2RDAwMEFBMDhCRDVERDA4OTYwNkFBOEJFRDIxMEUxQkFFMUZEQ0EKKzoxMEE2RTAwMEEwQjk3Q0U3RTNFMTYyRTMzREIyMzc5MTg0RjkzRkIxODEKKzoxMEE2RjAwMEY4MjNCNTJFMThBM0JBMjBGOUIxNTQxN0E0RkU0RTU3NkIKKzoxMEE3MDAwMDY3M0FCQkZENkU4QkQzQjJCRkU5RUIzQjQ3QThCRTgzNzQKKzoxMEE3MTAwMEYzOEY1NDVCRjU5REEwQThFRkQ0M0RGNTA4RUNDNEY3OEEKKzoxMEE3MjAwMEJGMzMxREVDQjc0RUQ3NzcxQThBRDc0ODBFOTYyM0EwQjEKKzoxMEE3MzAwMEZBRjQ3Q0VCM0JCMTg2NzlENjc3ODIxNzVEREZGOTYzNUIKKzoxMEE3NDAwMDJCRTJFNzkwNDdENDU5QTZFQjNCNkRGRTc5RTU3NTc0OTMKKzoxMEE3NTAwMDg4QzVCQjQ5QUY3NDAxRTNDMURCMzQwQzNCMjk5RjEwQjIKKzoxMEE3NjAwMDEwNzFDNjg5MkE5N0UwQUY5RDkyMTU5RjQxMDNEODdBNTAKKzoxMEE3NzAwMDBBM0ZDRDVERkFDM0I5NjQ1RkRFNzE0MTI5QkU1RkZGNTgKKzoxMEE3ODAwMEM0RUIwQUY1ODdGMzFENkIyODdFQkU1NjlENzhGMDVBMDAKKzoxMEE3OTAwMDdBQkZDNkM5RkFBMzBFMjkxOTRGRTI4RkI4Q0JDMTQ1QkIKKzoxMEE3QTAwMEYwODg2QUI1QjI2OEUzMTJCNUY1RUVDQzI0N0RCRDQxMDAKKzoxMEE3QjAwMDRCOEUzRjg2QTY0RUM4RDlDNDlGMUExODEyRTI3OUE4QkMKKzoxMEE3QzAwMENFMzBCMzQ5RjcxODEzQkRGNDdDNjg4MzZFMENFQUU0MEQKKzoxMEE3RDAwMDBGMjdDNzI5NDM0REFBRDBBNzQ1QzJFRTBDMUZENzFGOEMKKzoxMEE3RTAwMDI2RkZBQUJGM0I4M0ZEQ0YwMzA1MEU3MUVFMTIxODI1OEQKKzoxMEE3RjAwMDdFNjhEMjkzRTM5QUUxQjFFMjdEMjUyNDY3MzEyN0U3QjEKKzoxMEE4MDAwMENCQkYzMzI2QzY2RkRGQkQ3Mjk0RTI1MkNERjI1N0I3OEQKKzoxMEE4MTAwMEU3QUY2NzNGMTRGQUM0Qjg5QkNCOTZBNzlDN0Y1QzIzMzUKKzoxMEE4MjAwMEJFODhFRDc0MDJFMUJGQkZFMEY2MDFDQTg3N0UxMDc1RjUKKzoxMEE4MzAwMEFFMjY3MTE5NkFEMzk5N0Y2REJBNkRFQkJCOTNFQjQ0NjkKKzoxMEE4NDAwMDdEMkE3MERENzQ2ODhCQ0FGQzNGOTRGN0MxOTEzQjQ4NDgKKzoxMEE4NTAwMDRGRTcyRDYwM0M4RjZDNTFGMzQzMDlGMjcwQTJDREM1RDgKKzoxMEE4NjAwMEY0MUVEOTIyRkM4QjNDMDc4NEM2RDJCQzNGRDEyNkY0MEYKKzoxMEE4NzAwMEQwMjdFRjAxM0U0RjE2REE2NTFEMUZFOTRBMzhFRTIyNTgKKzoxMEE4ODAwMDdDMTQwMEZDMjMxRDI3RjBFMTQzN0NGRTQ2MDc5NEUyODQKKzoxMEE4OTAwMDE2ODdGRDVERUNCRkE1RjJEOTc4NUI2OTUyNUNFQkFBMjcKKzoxMEE4QTAwMDc2MjRFMUQxRTkwQTg2MzlDRjdEMzNFOEE0QUYxQTFBQkMKKzoxMEE4QjAwMEIxNEZGMTdEOTcwQUM0NkZBRUMwRkQ3Q0NFMUNFQzY3MzIKKzoxMEE4QzAwMDYwREZERDE4OEIyOEQ4Nzc5Nzg0NTY5M0RGRkFFMkNFQzUKKzoxMEE4RDAwMDhFMDFDQUIzQjhGQzBFOERGOENERDU3NTU3QjA5NUM2QUMKKzoxMEE4RTAwMDU3M0EyMTAzREZGNzgxMkUwNTY4OUYxMTA5NDg1RkVCNzYKKzoxMEE4RjAwMDEwNkEyNDdGN0QzOEUwRDAyODZGRDMxQzZEREY0MUVCRDgKKzoxMEE5MDAwMDM3RkIxNzAwRDE3OTZCOTM4M0Q3M0I2QkFBOUNCNENBRjIKKzoxMEE5MTAwMDIzNDc4M0YyNUYwQjNENkM3N0RGNzc4NjFGRUVDMEYxMzQKKzoxMEE5MjAwMEVGMjNCRDIyMzA3M0FFNUQ2REM1NENBNzBDM0QzOTdFNjMKKzoxMEE5MzAwMDc2NDM4Q0VERjA1QTczQkM4QkQ2NTk1QkFENTI0NTAzMTAKKzoxMEE5NDAwMDRFRDQ5QzM5NDJGRUZBNDg5NUNCNzBFMUJFNDY2QTI0NEIKKzoxMEE5NTAwMEM2RjdDNzU1Q0U1MUJBRTdGMDAzNzU1Q0E2NzU3RkYwMTAKKzoxMEE5NjAwMDMxRjI0NjUxM0FGOUJEQjBEQ0E0OEUxRkFBNkU3MTEzQzQKKzoxMEE5NzAwMDNGRUM0NThBMTA3RTIyNTMwRUI2NUZBOUUzRkU2Q0QxRjAKKzoxMEE5ODAwMDdGMkZFMjg1RjAxQ0MxRkQ5NjUyNUMzNDg5NzI4NUQwMjAKKzoxMEE5OTAwMDdENTNDMUM3RUZDMDc2NTU5QkMyRTNCRTkwRUY4ODUwOTAKKzoxMEE5QTAwMDVEQThCRjQ5NjUzOUU5Rjc4NjA2RThGRTRGM0ZGMjNCRUYKKzoxMEE5QjAwMEM3NDNGRTEwRjNGMzcwQkU5RkU1RDA1RTY3Qjg2NjczQzEKKzoxMEE5QzAwMDE5RjFDQjFCNTUxOUVDQjc1N0I1MzVERTRCN0VGQjdBMjkKKzoxMEE5RDAwMEY5QTM3Rjc5OEFFMkE3MDI5NUU5RDlFRjBDQzY1RjI1MzIKKzoxMEE5RTAwMEJFNkUxMkZFRTJDOTI1MEZCMERDRjU3NUREMEU4NDM3QjAKKzoxMEE5RjAwMDg4ODRERkExQkE1NTVGNjUwREMzQjdGMzBEQzM0QjQ0MUYKKzoxMEFBMDAwMDNFQTlDRjdGNUY4NEYyMUJGMTZBOTE1RjMwRjM4RTcyQjMKKzoxMEFBMTAwMDNFQ0ZDRTJCRDU1OTdBNkNCOTJCRkM0QTI5Q0RCQjQ3RkEKKzoxMEFBMjAwMDExNzU2MUI5MjA0QUZBQzA0NTc5MjU5QUE3MjRFN0JCNzgKKzoxMEFBMzAwMEQ2NEQyNkM3QzE4QjUzRTJFMEQ0M0MxM0I4Qzc0QjVBNUUKKzoxMEFBNDAwMEQxOUUzRUQ5ODZGMUYxNzI5OENFMkJEMTExNTg4RTJCMjIKKzoxMEFBNTAwMDVEMUMyRjhFNTQ4QjM4MjhFNjBDRTc2QkU1RTdDQkYxQjUKKzoxMEFBNjAwMDlCOTYxRjNDREVFMzQ2MEUwMEY4NTE4RkM2RkQyQ0YzOEIKKzoxMEFBNzAwMDM3QkI3MzExRDQ1QjNEMDE3RTdFRUJEQTQ3QTVDNDc5MDkKKzoxMEFBODAwMDQzOTVFRDZFOURGNUM2NDQ4MEUwQTZFQThCNTQzRTU4OTIKKzoxMEFBOTAwMERCQjZDMEIyMEYyNjEwN0Q4NzI2ODFGMUVCQUQ1OTE1Q0MKKzoxMEFBQTAwMDI3M0UzREZCN0JFMDM4RjQxMzBERTMxRTI4M0U3RjdFRkUKKzoxMEFBQjAwMDlDRjZFOUEyRkM5N0Q4RTc0OURBQTc4QkYyNUY2MjdGQTAKKzoxMEFBQzAwMDJGRjdFOERDQkVEQTUzQzZFRDgyNzYxMDc5N0U1QjFGODUKKzoxMEFBRDAwMDVDODlGQTAwRjFENjUwMjBGQTI0RkY2NDg3NzNGQ0I3MzIKKzoxMEFBRTAwMDA3ODlCRjVDMDE0NTIzRjk3NjE3QzRFMjUyODIzRTE4RkMKKzoxMEFBRjAwMEYxODZERjI1QkJEQzlGRTc2MUZFNEJEREQ3QUZEQTFDQkIKKzoxMEFCMDAwMEQ2QjlDMkI3MTFEQzIxODQ0Qjc4N0Y3MUU3N0YzREI0QTEKKzoxMEFCMTAwMDk0RDY3OTRCNjZCRUNBRTlEQUJDODNGNTBFRUE4NTBDOTkKKzoxMEFCMjAwMEY2Mzc4NDNFOENFNTc5MzhFRjMwQjJCMzU0QTJGQjUwNEYKKzoxMEFCMzAwMDVCNzcwQjQ3Nzc0RUI5Qzc3NTQ2NzFERTA5RDREN0Q0MUEKKzoxMEFCNDAwMEVGNDczOUE3RjNGNEQ3N0NGMDE5NUFFN0UzM0YyRUUwM0IKKzoxMEFCNTAwMEZCNEQyMzVCREU2NkI5N0YwMzAzOTBEQ0NCMjhGN0I2QTEKKzoxMEFCNjAwMDlDQzVERTVBRkM2RDExN0YwNzNCOUUxMUU3NjczRDM4OUYKKzoxMEFCNzAwMEUyMUQ4RkQxRjlGQjdGMjI0MzNBQkM1RDJBNURDMTlDNjcKKzoxMEFCODAwMDlGMUYzMkFBNEMxRTNGRTc0RjUzMzczNDQ1RERCMDc3NDUKKzoxMEFCOTAwMEVDN0JEQzhGMzQwMzk0NjJGRkVCNEVEMzREN0NGMEY1RkQKKzoxMEFCQTAwMEREOEUwQkQ2MERCRkJFRkJDMjc1QzNEMTJGM0JDMEE1M0EKKzoxMEFCQjAwMENERUNFMzBBOThFMDNDMkI4NUYwNTQwN0VDQTM1N0Q4ODIKKzoxMEFCQzAwMDY2Qjc4N0FFNkU2NzNGNTJENDE1RjUxQUNBMzk1MDVGMjMKKzoxMEFCRDAwMDVCNDBGRUYzQzAyNkIzOENERkZCNzNEOEVFMDc5NEIxNjUKKzoxMEFCRTAwMDM4RDlGNTAwRDVDQjc1QkFCRjEwRTFCQTI3RTU2N0U5Q0EKKzoxMEFCRjAwMEZFNDJFQUY5N0I5RDEzRUJGOTdDMzg4NEVBOTVBOUY1Q0UKKzoxMEFDMDAwMDQ5QzlGMzdENTFERjVGMkFFQTkwNzY3REIyNDI5RDM4RDMKKzoxMEFDMTAwMEZBMjBFMUU5MzYzN0UzQTFGN0Q5RUJERkExRkE5NzVEMzYKKzoxMEFDMjAwMEM3MEY1ODc1NjA2RDA3NjhCQkM1MzlDQzc2RjJGQjlGQkUKKzoxMEFDMzAwMDE3RjU1MEI4MUVDRkIxOTIxNjk5MjhERUI0ODJFQjlCNUYKKzoxMEFDNDAwMDFCRTgxQzczRUQ3RkJFNzVDMzY2NEJCRjIxNzNGMzNEREMKKzoxMEFDNTAwMEM4OUY1OUY4QjRDN0ZENERCQjkwQzc2QjU1OTFCNzg2RDcKKzoxMEFDNjAwMDJDOTVGNUZDRkEyNzNDMjA5M0JGRUM1NThGOTI5QzZDRjkKKzoxMEFDNzAwMDgzODkwRDI0NEZCRDNFRTFCNzQ1MEYzOUQ5NkZGQjU0OTEKKzoxMEFDODAwMEJCQ0U3NENENTM0REJFQkY5MEY3RjcxOUM2NkUwNDEzRkIKKzoxMEFDOTAwMDNEQUU2NTUxMUVFOTJGQURFNkE3REE3OTFGQjFCNjE2QjQKKzoxMEFDQTAwMERBQzc4MENDRkFFRUZERDIwRDdDOEZBOTQ5Q0E2Njc5NEQKKzoxMEFDQjAwMDU0MzRCMzMwNTE1RkVFNkE0RjdGMUZBOUI2NzBCMjg1MkUKKzoxMEFDQzAwMEQ3RjczQTgwRTJBRDY4ODZGMUIyNEVGODdFNDE2MUI4QkUKKzoxMEFDRDAwMDREMjBFRTJCQzE3NjREMUFDMDczRjY3QTRFMzM3RDZBNDUKKzoxMEFDRTAwMDRCNUQyQjQ5M0ZFRDZBMTc3MTVCRDQ5QjNFQUU3QkEwNTkKKzoxMEFDRjAwMDVEQzQ5Rjg1MkRBMTJGMTAxRDZFODJDOTdBRDI2RjI4NDkKKzoxMEFEMDAwMERBNDY4NEVGQjU4ODc4NkQxN0U5NEIxMUVGRUU3MkFDMzcKKzoxMEFEMTAwMDk5Qzk2QkJERTQwQ0VEQTJGMzlBREYxMUZFODQyQjIwRTAKKzoxMEFEMjAwMEZDN0E4Q0Q0MzgxRjc0QUNDNUZDMDc4MkRCNEM3QzVFOEIKKzoxMEFEMzAwMEM5OEEwQThFQUQzQzdGMUY1MTlCMkVFRDY2MkZDMTNCMDkKKzoxMEFENDAwMDZDRTlFNzBBQ0RFNEJBNkIwNTM4OEM1RTdGNDI1RDVENDUKKzoxMEFENTAwMDlGNUY1RDVERDJCRTJGRUFFOTM3MDgzRTg2RTcyMzgyMUEKKzoxMEFENjAwMDBGRDc4MzQ2RjI4NEZDNzc5OEQ2QjNFRjk3NTQzQ0I3NUQKKzoxMEFENzAwMEEzODhFQjJFOTc1OERGM0VENTYyN0U5NUUwQkRCODI5QkIKKzoxMEFEODAwMEY4MzUzQUY3RkIzQjNCODBFMUNERjNCRTQ2NkQ2MTM4QzkKKzoxMEFEOTAwMDEwNDQzQUY1NjcwOEJGRjlDOTNBQTMzMzk4OTBGRjc5OTAKKzoxMEFEQTAwMEQzQTJENzlCMTY1RDk3MjMzQjhEOEI3QjZGNkNDN0FGNzAKKzoxMEFEQjAwMDgyNkEzN0QxMkIxNTdFNUYwRjhDNTExRDY4QjZGNUQ1OTEKKzoxMEFEQzAwMDdERjdCOTI5NEZEQzVCQjBERTRERjdEMUEyOUVGNUQ5RjYKKzoxMEFERDAwMEQ0RUYyRjMwMDNCNDdFNUY0RkUzQjMxRjk2MTIxRjA5RTkKKzoxMEFERTAwMEJFOEYyQzExRjk4ODE4RUFFNzQ4NDI5RUY0QzU3Njk5N0YKKzoxMEFERjAwMEY3NTU1RjAwNzFDQUE3QkIzQ0MyMkY3MjYxQkNBOEFGRjgKKzoxMEFFMDAwMDIwQkZCOTlBRUQzOTNFMUZBM0Q0QzE2Qjk2M0NDOUE2QTkKKzoxMEFFMTAwMDAxMjZERDE3MkMwMDg5RjA4NTNBNzI3QTNFOTlCQ0ZBM0EKKzoxMEFFMjAwMDgyMzBEMEJFNjY4MzIzMzdFMDdDOEE0NzBCMzRGNjQzRkEKKzoxMEFFMzAwMDdFRERBRTMxM0U3REE2NjMyNjhFODdGOUUzRUJEMDFDMjYKKzoxMEFFNDAwMEY4Q0E5OTAzNUZEMzdDNkRDOTVEMkE5RUNFMTA5RTg4OTcKKzoxMEFFNTAwMDRGN0MwRkYwQjlFMDRGRjUyQzY3MkU1NDc4NTRDRkZGOUMKKzoxMEFFNjAwMEM4QzY4QkM3ODQ5MDk3QzM3Rjg5RjAxM0E1MEIzNkU1QkUKKzoxMEFFNzAwMDMzRjg0NTVGOTFGMTJCNkI2MTlFRTcyQTMwMjBCNDgyNTUKKzoxMEFFODAwMEYwQTE0OTg0OEZENEYzNTczQ0Y3NzgwM0UxRUQ5NTZEMzkKKzoxMEFFOTAwMDQyQUZENjJBOTZGRTA4RTM1OTkwM0Y2RkIyRDYwNUNCNTMKKzoxMEFFQTAwMDJFMzU2NTA4QkJEMzBDM0ZGNDg4QkNCNkUwRDMwQTc0REEKKzoxMEFFQjAwMEM3REQzOUU3RUI1N0JCN0Q3Mjk2N0JENzRGNkVDRTEwNUYKKzoxMEFFQzAwMEZFOTAzRUM2RkFCREI3NTFDMEY3N0E4NTFGN0E3NDYwMEUKKzoxMEFFRDAwMDE1RkIwRjM3RTY5NzJFNDhENDhGOTdCQjRFOTg1QTE3MUQKKzoxMEFFRTAwMDlDQUIwRTM4QzMzN0E2OUJGNkY5M0JFREJFMDg1RDk1Q0IKKzoxMEFFRjAwMDlCOEQzRjFFMjRGRTcxOTJEQ0I4QjkzREVGN0Q2MTMwMjEKKzoxMEFGMDAwMDYwOTA1QzJEMzEyMzgwNzREQkVCMEIwNzg4N0ZGQThFMTkKKzoxMEFGMTAwMEVGN0M4N0VBMjRDQUVCQjI0MUZFQTZBMjA0ODFDNkREMUIKKzoxMEFGMjAwMDk4MTc2NkY5RDg1ODYwMDJENTk1MUVFQzMxQkY5QjA4N0EKKzoxMEFGMzAwMEY3OTY5NjUwRjk2NkE0NUJBNjM2NjYxMjFDMEZDNDIzREEKKzoxMEFGNDAwMDY0OEY2RUNBMzVDM0MxMzQ3NEE4REUyQ0Y0QzdCMTk2QzEKKzoxMEFGNTAwMEUwMkE5QTU3NEJCQTczMTVDMEMzOUJDQ0Q1RDQ5RkFGODgKKzoxMEFGNjAwMEJFM0E1RjlFMUFEREE0RjcyRjVEOUU1QURDNzRCRUZFQ0EKKzoxMEFGNzAwMDgyMjBERkQzRUFGRkExNEMxRUQ2RjRCODdFNEI5RUZBQTYKKzoxMEFGODAwMDk3M0MwMEExMDRCOTBBNkU0RUQxM0I3RTRCRUZGODREQzEKKzoxMEFGOTAwMDk2OEJDRDlCNzUyQjBGMUM2NEY5NzA5MjNDOTUyN0U4MUUKKzoxMEFGQTAwMDE5QkZBRDY3NEM5NjQ3QzU2RkNCOTMyNTdGMjQ0RjFFQzUKKzoxMEFGQjAwMEJBMUYzQzU5NEY3RTRBMUY4ODdCOENBOUYyMTU2RTA5MzcKKzoxMEFGQzAwMDZERDk0Qzc2MkNFRkI3QUQ0NUZBQ0NGRDRGNUQxN0YyM0QKKzoxMEFGRDAwMEQ0NUY2MEYxRkI5MkE3OTlGRkNGMjJGRkQzNjVFMTVFQkEKKzoxMEFGRTAwMDRGNzExMkJGREJFRERBMjkxOUUyNDg4QTc1NTMxMkI3QTcKKzoxMEFGRjAwMDlGOThDQUU0QjY3NjJBODM1QjczMkE5N0RCQkEyOTFGMjcKKzoxMEIwMDAwMEI3RUJBN0FFRTBCNjdFMkE5RkRCODYyOUU0RkJENUM4NjYKKzoxMEIwMTAwMEZGNTM0NURDREUzOEI1OUNEQjhENTNDQkI4NkQ5QzVBQjUKKzoxMEIwMjAwMENERTM5QUE2NTY3MjdCRDNENDBERENERTNDNTUyM0Q2RjUKKzoxMEIwMzAwMEExOUE1MDRFNUFGRUE3NzJENjY1RTA3RjIzNDJGNUQxMDEKKzoxMEIwNDAwMEJFRTNGN0JDNDNGODcxNkEyQUU3NTFBMkJFMzU1Q0VGNTQKKzoxMEIwNTAwMDcxMkE2MUU2RkZBMzA1NDJCRjZGRjQwOEZBQTRGMkZGNkMKKzoxMEIwNjAwMEIxOTZEMEZFNzRGQzBGNEU3MTZGNEJBMTdCNUI5NUVDREIKKzoxMEIwNzAwMEU3MEMzMzdGOUZFN0VGQkVGNDQ3Q0E4M0EyRkY3MTk4QzYKKzoxMEIwODAwMERGNUZBMkZEOUZGNjJCMTcyNkZCOTVGRDc5Qzk3RTY1MzQKKzoxMEIwOTAwMERGMTJEQkFGNzQ4RDUyMUQ2Q0JCQTRGMzNEQjE1MzJEOTkKKzoxMEIwQTAwMEExN0ZFNkY1MjFCODhEREU4N0RBREMxQUY5NTM1MURGOEUKKzoxMEIwQjAwMDhEMDEwRkY2QjdFRTk1ODFGMjdERTg1RjdDOEJGODBDODEKKzoxMEIwQzAwMDUwM0Y5MEREOThBRkJDM0VCQ0M5RDJFRkQ2RjgwQTM4RUQKKzoxMEIwRDAwMEVEMDg1Rjg0N0ZGMjNFN0RBRDM5NUZFRTY3OUI2N0NCMDUKKzoxMEIwRTAwMEZENTU1MDk2OTFDRUNFRTYzOEVCODVEQzZCNDJFRUEzNTMKKzoxMEIwRjAwMDA1QzEwMUNBQjc0NDUzRTRERUI2QTM4ODg3MjRCOTNGMkIKKzoxMEIxMDAwMDY1Q0JCRDI1QzczOTdFNzFFRjIzODdFNDFFRjlFQTI3OTkKKzoxMEIxMTAwMDlCQzU3OUQxREY0RUIyQTM4QTM1REVEOTI4RUE1QkY1MkIKKzoxMEIxMjAwMDdFQTE1Nzk1NDZBMTJGMTQyREQ5OEUyMkRGQkM0Qjc0REEKKzoxMEIxMzAwMDQ5OTVGNzg4MjJGQ0UzQTZEMjdGOURCNjY3NjQ1NzczRDIKKzoxMEIxNDAwMEZDM0UyOTFCOTdENjdFM0YxMUExM0NENjcxNjUyOUNCQzkKKzoxMEIxNTAwMDc3QUExQzQ1QjU1NUNDRTdDNzk1N0E0ODI3RkZGMzk2RTMKKzoxMEIxNjAwMDIzOUY2RDQ3NENCNjIzQTlFMzZDNzlFQTNCREVDNDc4OTQKKzoxMEIxNzAwMEIxRURDQTcxM0NCNzk5NjA0RjM2NkEwMjBGNjg0RjNFMTUKKzoxMEIxODAwMDI2RkU0QTk1QTdEQTQyMzMxNDRDQjM0RkI1NDNGOEE1Q0YKKzoxMEIxOTAwMEFGQUQwQjBBN0YxMUZENDRGMjUzQTJDRUY0N0U4MERBRUMKKzoxMEIxQTAwMDIxRkM5RjlDNDZFQkY3MTUzQTg0NzM1MTBGMzYzNkM2NDcKKzoxMEIxQjAwMEVCQTk4NjgxRjJBQzc2MjBCQzc1RTY0NDJGQzk2MEFGNUUKKzoxMEIxQzAwMDY3RDg0RkZCNDdGOTc0NzVGQzE1RjJGOUQxMjZFMTE3RTIKKzoxMEIxRDAwMDQyNzcyRUZCMkQ3NjNCMTdERkRCRkU4RUNERkZBOUUzRkEKKzoxMEIxRTAwMDlFMkMzMjNCRDNFMUU1RjMxNjVFOEUwRTNDOURDNDFGRDAKKzoxMEIxRjAwMDQzQ0FEMjlCMEMzREFENUUzNThEQ0JBMjU3RTdFNzU3RDYKKzoxMEIyMDAwMDFDNDczQkM3N0E3NTc2QkZFMkJBOEUzNDdDMzA5QjVGQjEKKzoxMEIyMTAwMEYxODkwRTkxQ0Y0NUJGNjIxRENEQUIyRDE3N0VDNUU3REQKKzoxMEIyMjAwMDNCRTBGMkZBMEIzNUY3MzFCRTJFRDU1RkQ4NkNGMURGN0IKKzoxMEIyMzAwMDZDRkU0MjU3ODdBRDM3QzJBQzM3NUM5NkRFQjg1ODdGOUMKKzoxMEIyNDAwMDIxOEQ3RjcwM0JGMzJGNENDQTU0RkY0MzU0MUIyMjFGQTgKKzoxMEIyNTAwMDIyRjQwOEVBOTlCQkU4M0RDNkYxRUMyRjFDRjUwODdFMDQKKzoxMEIyNjAwMDMxMkQzRDczNkQ3QjcwMDdFMTc1QTg1QUY4MEI5NzRCMzQKKzoxMEIyNzAwMDBFRDBFRkJCQUYyMzZGRkVGMjMwREY3MUE1OEZBRDFEOTcKKzoxMEIyODAwMDk4MjAzRjA3QkMzMUJBMzdERDRCRjc5NTI4N0U3Q0NGM0QKKzoxMEIyOTAwMDJCRUUxMTAwOTQ1MURFRkY4QkYyMzUwNkQ5Qjk5MUNDMUIKKzoxMEIyQTAwMDJGN0Q4M0M2Nzc0NzE0QTA3QjgzNDMzRDIyRkZGN0M1REMKKzoxMEIyQjAwMDA1NTk0NzAxNzk2N0M4MTk3RTZBQzJDRkJGNzcwRDFFNEQKKzoxMEIyQzAwMEM1RjYwRjE5ODVBMzkwNzBFRkY2QjAyNTZGMkVEOEMyODIKKzoxMEIyRDAwMEY3NzRCM0I0NUI5RUZEMzAzN0RERkVDNEZENUNCQUJBRDMKKzoxMEIyRTAwMDcyOEU3RkQ3NTFBMEYxM0QzMjBCM0Y1OTZBMTAyMjdFRkEKKzoxMEIyRjAwMDkyMjMwN0Q3NDdEMERCODNFQTg0QkM0NzVGNEQ1NzI3QUIKKzoxMEIzMDAwMEM3QzFGOTIyRUYyNTgzNzI4NkYyRUYwM0I0OTYzODE3OEUKKzoxMEIzMTAwMDlGQjM3RkIxRkI1MTNBOTcwRTIxODY3N0QwRUZFMEJDMDcKKzoxMEIzMjAwMDdCRkY1QTExRUZGNDdCQzI2RTJEOERERUQ4RDc5MzdDNTQKKzoxMEIzMzAwMEZGMjhCNTk1OTczRDE2QTMzQkMyODcwMzhBNDE2OUNGODUKKzoxMEIzNDAwMEMxQjJDQTI2Q0E0RjQ2MzVBRTAwODNFQTczMDREM0Q1Q0MKKzoxMEIzNTAwMEE3QzcyREY5RDRDMTYwN0JBQzdDQjIyNTNCOURCREIwQTUKKzoxMEIzNjAwMERCMDEwQkZGNzZERjVEMzI2NjEyREZBOTQ1NjY5MDdGNTkKKzoxMEIzNzAwMDg3RTNGMzRCOTE4NEJDRjExMzE2RkNCRDkyMTFBRjQ1RUEKKzoxMEIzODAwMDY0RURGNTBBRkRFRkQ2NjMyNkZEREVCODJGRUYyRUFFOTUKKzoxMEIzOTAwMDMzQkFGNTA4OUNBMUU3MjUzMUY4MzlFOUE3N0M3N0U3QUUKKzoxMEIzQTAwMDY4OUE3REJDRDUyMUUyOTRCRENFMTBBRkI3Mzc1RkUxN0UKKzoxMEIzQjAwMEZBRTNERUEyRjRGOUFDRTczQjQ0MUU0OUY1QUQwRjcyQTcKKzoxMEIzQzAwMDVFREZBNzcwOUQzODc1REM1MzE2OUZGNEFCNjY0MEUzRDMKKzoxMEIzRDAwMEI4RkE4MTMyM0E1Nzc0MDk3MDhFNzJFQzlEMzc5RkQ4NTMKKzoxMEIzRTAwMDhERkRGRDNENDFDRTdCMEM1MUZFMDM4NUI1QkZGMDVFNkEKKzoxMEIzRjAwMEM2RkJGRTZCMUMxQTlENjM4M0ZDMTFERjQ3Mzg1QzBEOTYKKzoxMEI0MDAwMDA2RTk4RkVDNkExQzk3MTA0NzFFODZEMTAxQkEwRjc3QTgKKzoxMEI0MTAwMDc4MkQ3MEJFRDQ2QjA0OTNERUY3MjMwMzhFOTNGRkE1QzMKKzoxMEI0MjAwMDRDQjAzRTczNDIzN0Q3MDEwRUY4NTVCRUE3MzM1NDc5NUUKKzoxMEI0MzAwMDlBRkQyMzFEQzYzOTRGMzE1NDI5RTg2NUQ3OTNGQzE2NzAKKzoxMEI0NDAwMDNGRkFGRDc3MzUyN0NBQzEwMThCNkUwRjUyREU5Q0VGQTQKKzoxMEI0NTAwMDMxOEQ0MUEyRkY3NUEwNzA5Q0VERjM4MTc1RTM5RDU0ODEKKzoxMEI0NjAwMDE3Q0NGMkJCMEQwQTQ1RjZENzA0ODFFNDc0QThDQTkxNDMKKzoxMEI0NzAwMEY2N0VENDUwRDU2OURFNjdFQTdFOUMyNzdFQzlGQTJGMTYKKzoxMEI0ODAwMDRCOTlFMEZDNDQ1NkQ5NkZEOUFFM0M2NEVENjNFMzVBNjYKKzoxMEI0OTAwMEUwQ0Q2NjU3MEIzRDlCREQxNjA2RkE3RDU4REU1QkYyNkMKKzoxMEI0QTAwMEE4OEVGREREODVCRjhBMzg0OTNFNkUwMzU4QTREMzdFNDEKKzoxMEI0QjAwMDI3NzhCRjg3OUI5RjhFRjNGRUFDRkJCQTIwM0ZDRkY3NjgKKzoxMEI0QzAwMDcxMjEyOEU0RDdCRTc3QkRCMDRENEQ4QURGQjM1MkVFNkYKKzoxMEI0RDAwMDQ1NjVBNkY0NDFFRUJBRTA3REIyRUVGN0VFMzk3NTMyN0QKKzoxMEI0RTAwMDAxREVBMkNFRTRGQkQ5NzNDREZGNDNDRjhFNTMyNzkxNkIKKzoxMEI0RjAwMDVGMEU1NzVFNThCRTBFNTk3NThENTg0RjM1RDNDOUU2NEQKKzoxMEI1MDAwMDMzOUJFRkIyRTg4ODM5QjNDRjFGRjI4RDc1QTZCM0MzNzIKKzoxMEI1MTAwMDFEOUQ0MjBFNTJGOTMxOTVGRjM0RDcxOERCRjE0M0VCRjQKKzoxMEI1MjAwMDkyRTFEQ0QwMjlFNEY4MDYwQjRFNEVBMTlFNEZFRkVERTAKKzoxMEI1MzAwMDdCNEM3NDdGRUFFOTM0RUI3RUJBNTNFNUYxMzM3QzZERTIKKzoxMEI1NDAwMERCRjk3NzJFQ0RDRTJGNkIxMTc2REVCRjJBODNFQzNDNTQKKzoxMEI1NTAwMEUyRjM2NUJBQzdGNjdCOTQwRjQ4OTBFQjNFNkZCMjlGNUIKKzoxMEI1NjAwMDY5REJGOUM3M0I0NTdDRjA2MkRFNTUxMkQ5RTkxQ0NGOTcKKzoxMEI1NzAwMDA0RkJCRjU5RDVDOTc5ODA1NDNCQUQzQTQzMUMzN0FBNjcKKzoxMEI1ODAwMEY5QUFBRDZGQjg5RUY1NUFDN0ZCNEY0NDEwQ0VGRUY4MkUKKzoxMEI1OTAwMDNFQUUwRjY1MjJGRjY2NDg0Q0E3NDgzQTNBNDE3OUYyMjEKKzoxMEI1QTAwMEJEOUFGMjRFMTBCRjYzRDM4NTVFQzg1QUFCNzBCRDYzQkYKKzoxMEI1QjAwMEM4RjE1RUY1ODdEODJBQjEzMDA0MkRCODgzQ0NCN0ZCMkIKKzoxMEI1QzAwMEM3Rjk3RThFQzVGNzczRDE5MzNFN0Y1QTYzRkQyRTg1RjIKKzoxMEI1RDAwMEVBODhGNTZGNTZBNzhCMkJFQzk2RUU0RjI1REY3N0JGRTkKKzoxMEI1RTAwMDM4QjlGOEZCNEVBQkJFOUMwMTE5NDIyRTlBMUQ3RDY0MDIKKzoxMEI1RjAwMEVGOUIxRDdDMkY4NUFFRUYyQTZCQUNEMjAxRDVGNTY5OTAKKzoxMEI2MDAwMDY3RjhERTRGRjc3RjI0QUI1RUI0NzQ0NjVFRTA1NjcxOTgKKzoxMEI2MTAwMEFGRTVFQzBFNzE0Rjg2N0Y0N0I4OTQ3RUY3MzlDMUJGMTYKKzoxMEI2MjAwMDBGQkM5MjZFQjFDQUVDMDdCM0RDOUM4NTAyMDdENTgzRDAKKzoxMEI2MzAwMDIzMjcyNDY5REEwRkJBODJBRTM0MUEwRTlBNTcwMjQxRDAKKzoxMEI2NDAwMDZFNTNGNzdEMTU4NEY5NzkxOUM0QjhCRDA2QzZCODJEQjcKKzoxMEI2NTAwMDg3NzE2RTJCNjA5MjVCOTMyNkUwN0U4RDkzQTJBRUIxRDQKKzoxMEI2NjAwMDBBMEM5OTlFNTc0MjkwREIzNTEwRTZCNjFBNjJEQzdFRDIKKzoxMEI2NzAwMEE1RkU2RjdGNzMzQjRFRjlEQTc5NzgxMTc4NEQyM0RGQTEKKzoxMEI2ODAwMDcxMDQzQTdEN0UxQkNGQUQ5RDNBRjNDOTVDRjRFRUYzQjUKKzoxMEI2OTAwMDREQjAxRjVGNUYzRENFN0VBOEQ3MTM2NEZFNzZGQTA1REUKKzoxMEI2QTAwMDdGREI3MDlDQjNFNDgzNkQzRjQ5MjUzRjY5NzUxQUZFQ0IKKzoxMEI2QjAwMDlEQzM0RjRBRkQxREM5RkYwMjI5RjdEMEIzRDA0NTAwRjUKKzoxMEI2QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxODAwMDAwMDAwNjIKKzoxMEI2RDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMkEKKzoxMEI2RTAwMDAwMDAwMDI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMjIKKzoxMEI2RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwMkEKKzoxMEI3MDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMjkKKzoxMEI3MTAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEKKzoxMEI3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOTAwMDAwMDAwRTAKKzoxMEI3MzAwMDAwMDAwMDAwMDAwMDAwMzgwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMEI3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RjEKKzoxMEI3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKKzoxMEI3NjAwMDAwMDAwMDAwMDAwMDAwMEMwMDAwMDAwMDAwMDAwMDAwQ0QKKzoxMEI3NzAwMDAwMDAwMDBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QjcKKzoxMEI3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxODAwMDAwMDAwQTEKKzoxMEI3OTAwMDAwMDAwMDAwMDAwMDAwMUMwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMEI3QTAwMDAwMDAwMDFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzNkEKKzoxMEI3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQTAwMDAwMDAwNEYKKzoxMEI3QzAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwNzgKKzoxMEI3RDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNjYKKzoxMEI3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwNDkKKzoxMEI3RjAwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDAwMDAwRjkKKzoxMEI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMzUKKzoxMEI4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQjAwMDAwMDAwN0QKKzoxMEI4MjAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMTAKKzoxMEI4MzAwMDAwMDBDMDAwMDAxMDAwMDAwMDAwMDAwODAwMDBDMDA4NjgKKzoxMEI4NDAwMDAwMTAwMDAwMDAwMDAwMDIwMDAwQzAwMDAwMTAwMDAwMTYKKzoxMEI4NTAwMDAwMDAwMDEwMDAwMDlGQjAwMDAwMDAwMDAwMDAwMDA4ODEKKzoxMEI4NjAwMDAwMDBDMDgwMDAxMDAwMDAwMDAwMDAwNDAwMDBDMDg4M0MKKzoxMEI4NzAwMDAwMTAwMDAwMDAwMDAwMDIwMDAwQzA4MDAwMTAwMDAwNjYKKzoxMEI4ODAwMDAwMDAwMDEwMDAwMDkxMjAwMDAwMDAwMDAwMDAwMDA4RUYKKzoxMEI4OTAwMDAwMDA5MzQwMDAwMTAwMDQwMDAwMDAwMTAwMDA5MzQ4RjQKKzoxMEI4QTAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwOTM1MDAwMDAwMDAwQjMKKzoxMEI4QjAwMDAwMDAwMDA4MDAwMDkzNTQwMDAwMDAwMDAwMDAwMDAyOTcKKzoxMEI4QzAwMDAwMDA5NDE4MDAwMDAwMDAwMDAwMDAwODAwMDA5MzU4RDkKKzoxMEI4RDAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwOUFCMDAwNDAwMDAwQ0UKKzoxMEI4RTAwMDAwMDAwMDQwMDAwMDkzOTgwMDA4MDAwMDAwMDAwMDA4REQKKzoxMEI4RjAwMDAwMDA5M0Q4MDAwODAwMDAwMDAwMDAwODAwMDA5NDIwMTkKKzoxMEI5MDAwMDAwQzgwMDAwMDAwMDAwOTgwMDAwOTVCMDAwOTgwMDAwRkEKKzoxMEI5MTAwMDAwMDAwMDI4MDAwMDk1RjAwMDk4MDAwMDAwMDAwMDI4QkEKKzoxMEI5MjAwMDAwMDBDNDgwMDU0MDAwMzAwMDAwMDU0MDAwMDA5RDIwNUMKKzoxMEI5MzAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwOUQyMTAwMDgwMDAwMzgKKzoxMEI5NDAwMDAwMDAwMDAxMDAwMDIwMDgwMDEwMDAwMDAwMDAwMDEwQUUKKzoxMEI5NTAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwODAwMDA5Q0Q4NEIKKzoxMEI5NjAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwOUQxODAwMDAwMDAwMTgKKzoxMEI5NzAwMDAwMDAwMDAxMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwQzUKKzoxMEI5ODAwMDAwMDAwMDA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQUMKKzoxMEI5OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YyMDAwMDAwMDAwQjgKKzoxMEI5QTAwMDAwMDAwMDIwMDAwMENGNDYwMDAwMDAwMDAwMDAwMDAxNjEKKzoxMEI5QjAwMDAwMDA2MDAwMDAyMDAwMDAwMDAwMDAyMDAwMDA3MzAwNzQKKzoxMEI5QzAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwOUZBMDAwMDAwMDAwMjgKKzoxMEI5RDAwMDAwMDAwMDAxMDAwMDlGQTgwMDAwMDAwMDAwMDAwMDAxMUUKKzoxMEI5RTAwMDAwMDA5RjYwMDAwMDAwMDAwMDAwMDAxMDAwMDA5RjYzNDYKKzoxMEI5RjAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwOUY2MTAwMDAwMDAwNDYKKzoxMEJBMDAwMDAwMDAwMDAxMDAwMDlGNjYwMDAwMDAwMDAwMDAwMDAxMkYKKzoxMEJBMTAwMDAwMDA5RjY3MDAwMDAwMDAwMDAwMDAwMDAwMDA5RjY4MTkKKzoxMEJBMjAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwOUY2QzAwMDAwMDAwMDcKKzoxMEJBMzAwMDAwMDAwMDA0MDAwMDAwNTIwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMEJBNDAwMDAwMDAwMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRjAKKzoxMEJBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAwRTEKKzoxMEJBNjAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwRDQKKzoxMEJBNzAwMDAwMDYwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDA5RjcwOTEKKzoxMEJBODAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwOUY5MDAwMDAwMDAwODYKKzoxMEJBOTAwMDAwMDAwMDA4MDAwMDAwNTMwMDAwMDAwMDAwMDAwMDAwNEIKKzoxMEJBQTAwMDAwMDA5Rjk4MDAwMDAwMDAwMDAwMDAwMjAwMDA5RjlDMjIKKzoxMEJBQjAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwOUY5RDAwMDAwMDAwNDkKKzoxMEJBQzAwMDAwMDAwMDAxMDAwMDAwMDkwMDAwMDAwMDAwMDAwMDAwNkMKKzoxMEJBRDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0MjEKKzoxMEJBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwNTUKKzoxMEJBRjAwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDAwMDAwRjYKKzoxMEJCMDAwMDAwMDAwMDg5MDAwMDAwMDAwMDAwMDAwMDAwMDAxMkM4RDIKKzoxMEJCMTAwMDAwODAwMDAwMDAwMDAwODAwMDAwMDAwMTAwMDAwMDAwMjQKKzoxMEJCMjAwMDAwMDAwMDAwMDAwMEEwMDAwNzEwMDAwMDAwMDAwNzEwNDcKKzoxMEJCMzAwMDAwMDAxQUM4MDAwMDAwMDAwMDAwMDAwODAwMDBBRUMwQUQKKzoxMEJCNDAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwQUU0MDAwMDgwMDAwRUYKKzoxMEJCNTAwMDAwMDAwMDA4MDAwMEFFODAwMDA4MDAwMDAwMDAwMDA4OUYKKzoxMEJCNjAwMDAwMDAyMDA4MDAxMDAwMDAwMDAwMDAxMDAwMDAyMDAwNkQKKzoxMEJCNzAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwQTAxMDA3MTAwMDQwQjYKKzoxMEJCODAwMDAwMDAwMDQwMDAwMDFCRjgwMDA4MDAwMDAwMDAwMDAxNTkKKzoxMEJCOTAwMDAwMDAxQkY5MDAwODAwMDAwMDAwMDAwMTAwMDAxQUQwOUUKKzoxMEJCQTAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMUFEODAwMDAwMDAwQTIKKzoxMEJCQjAwMDAwMDAwMDAyMDAwMDFBREEwMDAwMDAwMDAwMDAwMDAyOEQKKzoxMEJCQzAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRjAwNDYKKzoxMEJCRDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMUI3ODAwMjgwMDAwOEEKKzoxMEJCRTAwMDAwMDAwMDA0MDAwMEUwMDAwMDIwMDAwMDAwMDAwMDIwMzEKKzoxMEJCRjAwMDAwMDBGMzAwMDAwODAwMDAwMDAwMDAwODAwMDAxQUYwMzgKKzoxMEJDMDAwMDAwMDAwMDAwMDAwMDAxMDgwMDAwMUIzNzAwMDAwMDAwRDkKKzoxMEJDMTAwMDAwMDAwMDAxMDAwMDFCMEYwMDAwMDAwMDAwMDAwMDAxRjgKKzoxMEJDMjAwMDAwMDAxQjcwMDAwMDAwMDAwMDAwMDAwNDAwMDAxQjc0RjYKKzoxMEJDMzAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDA1MDAwMDAwMDAwQjAKKzoxMEJDNDAwMDAwMDAwMDAwMDAwMDAwMDMwMDAwMDAwMDAwMDAwMDAwRjEKKzoxMEJDNTAwMDAwMDAwMDA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RDkKKzoxMEJDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAwMDAwMDAwQ0QKKzoxMEJDNzAwMDAwMDAwMDAwMDAwMDFCQzgwMDAwMDAwMDAwMDAwMDAxRTAKKzoxMEJDODAwMDAwMDAxQkU4MDAwMDAwMDAwMDAwMDAwODAwMDAwMDUxNTgKKzoxMEJDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUJEMDAwMDAwMDAwQjkKKzoxMEJDQTAwMDAwMDAwMDA0MDAwMDFCRDQwMDAwMDAwMDAwMDAwMDA0OUQKKzoxMEJDQjAwMDAwMDAxQkQ4MDAwMDAwMDAwMDAwMDAwNDAwMDAxQkRDOTYKKzoxMEJDQzAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwQjAwMDAwMTgwMDAwQTQKKzoxMEJDRDAwMDAwMDAwMDE4MDAwMEMwMDAwMDQwMDAwMDAwMDAwMDQwMEMKKzoxMEJDRTAwMDAwMDBDMDAwMDA0MDAwMDIwMDAwMDAwMTAwMDBDMDAxOTAKKzoxMEJDRjAwMDAwNDAwMDAyMDAwMDAwMDAwMDAwRTIwMDAwMjAwMDAwMDAKKzoxMEJEMDAwMDAwMDAwMDIwMDAwMEUyMDQwMDAyMDAwODAwMjAwMDAyMDEKKzoxMEJEMTAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMjAwQzEKKzoxMEJEMjAwMDAwMDgwMDIwMDAwMDAwMDQwMDAwRjQwMDAwMjgwMDAwQ0IKKzoxMEJEMzAwMDAwMDAwMDI4MDAwMEY1NDAwMDEwMDAwMDAwMDAwMDEwODYKKzoxMEJENDAwMDAwMDBGNUMwMDAyMDAwMDAwMDAwMDAyMDAwMDBGNUMwNDkKKzoxMEJENTAwMDAwMDIwMDIwMDAwMDAwMDIwMDAwRjMwMDAwMjAwMDAwQUMKKzoxMEJENjAwMDAwMDAwMDIwMDAwMDIwMDgwMDEwMDAwMDAwMDAwMDEwNkIKKzoxMEJENzAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAxMTA4ODIKKzoxMEJEODAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwMTE2ODAwMDgwMDAwMjIKKzoxMEJEOTAwMDAwMDAwMDA4MDAwMDExQTgwMDA4MDAwMDAwMDAwMDA4RDIKKzoxMEJEQTAwMDAwMDAxMjQwMDAwODAwMDAwMDAwMDAwMTAwMDAxMjQxRTUKKzoxMEJEQjAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwNDAwMDAwMjAwMDA0MTYKKzoxMEJEQzAwMDAwMDAwMDEwMDAwMDU5MDAwMDMwMDAxODAwMDAwMDEwQjIKKzoxMEJERDAwMDAwMDA1OTA4MDAzMDAwMTgwMDAwMDAwMjAwMDA1NzAwNjEKKzoxMEJERTAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwNTcwMTAwMDgwMDAwRUEKKzoxMEJERjAwMDAwMDAwMDAxMDAwMDExRTgwMDAwMDAwMDAwMDAwMDAxNDgKKzoxMEJFMDAwMDAwMDAxMUYwMDAwMDAwMDAwMDAwMDAwMTAwMDAxMUY4MjcKKzoxMEJFMTAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMTI0NDAwMDgwMDAwQjQKKzoxMEJFMjAwMDAwMDAwMDA0MDAwMDQwMDAwMDIwMDAwMDAwMDAwMDIwOEUKKzoxMEJFMzAwMDAwMDA1MzAwMDAxMDAwMDAwMDAwMDAxMDAwMDAxNTM4NDIKKzoxMEJFNDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMzAwMDAwMDAwRUUKKzoxMEJFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMEJFNjAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Q0QKKzoxMEJFNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUwODAwMDAwMDAwQTUKKzoxMEJFODAwMDAwMDAwMDAxMDAwMDE1MjgwMDAwMDAwMDAwMDAwMDA4NkMKKzoxMEJFOTAwMDAwMDAwMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MzA4QzcKKzoxMEJFQTAwMDAwODAwMDAwMDAwMDAwODAwMDAwMDAwMTAwMDAwMDAwOTEKKzoxMEJFQjAwMDAwMDAwMDAwMDAwMDIwMDgwMDEwMDAwMDAwMDAwMDEwM0EKKzoxMEJFQzAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwODAwMDA4NDEwQjYKKzoxMEJFRDAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwODQ3MDAwMDgwMDAwNTYKKzoxMEJFRTAwMDAwMDAwMDA4MDAwNjAwMDAwNDYwMDAyODAwMDAwNDYwNTQKKzoxMEJFRjAwMDAwMDA4NTIwMDAwODAwMDAwMDAwMDAwMTAwMDA4NTIxRUUKKzoxMEJGMDAwMDAwMDgwMDAwMDAwMDAwMDE4MDAwMDAwMDAwMDAwMDAwQTgKKzoxMEJGMTAwMDAwMDAwMDAwMDAwMDg0MDgwMDAwMDAwMDAwMDAwMDAxOTQKKzoxMEJGMjAwMDAwMDA4NEY0MDAwODAwMDAwMDAwMDAwMjAwMDA4NEY2MTUKKzoxMEJGMzAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwODUwNDAwMTAwMDAwNUUKKzoxMEJGNDAwMDAwMDAwMDA0MDAwMDg3NjAwMDAwMDAwMDAwMDAwMDIwRTYKKzoxMEJGNTAwMDAwMDA2MDAwMDAyMDAwMDAwMDAwMDAyMDAwMDA3MzAwQ0UKKzoxMEJGNjAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwMDAwMzAwMDAwMDAwQkUKKzoxMEJGNzAwMDAwMDAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAwMDAwQkMKKzoxMEJGODAwMDAwMDAwMDA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QTQKKzoxMEJGOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgwODAwMDAwMDAwMTEKKzoxMEJGQTAwMDAwMDAwMDAxMDAwMDg4MjgwMDAwMDAwMDAwMDAwMDA4RDgKKzoxMEJGQjAwMDAwMDAwMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDA4ODEwOTkKKzoxMEJGQzAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwODgxNDAwMDAwMDAwRDEKKzoxMEJGRDAwMDAwMDAwMDA0MDAwMDg4MTgwMDAwMDAwMDAwMDAwMDA0QjkKKzoxMEJGRTAwMDAwMDA4ODFDMDAwMDAwMDAwMDAwMDAwODAwMDAzMDAwNzUKKzoxMEJGRjAwMDAwNDAwMDAwMDAwMDAwMDgwMDAwMzAwODAwNDAwMDAwODEKKzoxMEMwMDAwMDAwMDAwMDI4MDAwMDMzOTAwMUMwMDAxMDAwMDAwMDA4NkMKKzoxMEMwMTAwMDAwMDAzMjAwMDAyMDAwMDAwMDAwMDAyMDAwMDAzNzIwNTcKKzoxMEMwMjAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMTAyMDA2MjAwMDM4N0EKKzoxMEMwMzAwMDAwMDAwMDA4MDAwMEEwMDAwMDAwMDAwMDAwMDAyMDAwMzgKKzoxMEMwNDAwMDAwMDAzRUE5MDAwMDAwMDAwMDAwMDAwMTAwMDAzRUM4MDIKKzoxMEMwNTAwMDAwMDAwMDAwMDAwMDAwMDI4MDAwMDAwMDAwMDAwMDAwNUUKKzoxMEMwNjAwMDAwMDAwMDAwMDAwMDYwMDAwMDIwMDAwMDAwMDAwMDA4NDgKKzoxMEMwNzAwMDAwMDA0MDAwMDAwODAwMDAwMDAwMDAwMTAwMDA0MDAxMzYKKzoxMEMwODAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwNDA0MDAwMDgwMDA0MUIKKzoxMEMwOTAwMDAwMDAwMDAyMDAwMDQwNjAwMDA4MDAwNDAwMDAwMDA0RUUKKzoxMEMwQTAwMDAwMDA0MDAwMDAwODAwMDAwMDAwMDAwNDAwMDA0MDA0MDAKKzoxMEMwQjAwMDAwMDgwMDAwMDAwMDAwMDQwMDAwNDA0MDAwMDAwMDAwRjQKKzoxMEMwQzAwMDAwMDAwMDA4MDAwMDQwNDgwMDAwMDAwMDAwMDAwMDA4RDgKKzoxMEMwRDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAxMDAwMDA1MDQwNDAKKzoxMEMwRTAwMDAwMDEwMDA0MDAwMDAwMDEwMDAwNTAwMDAwMDAwMDAwRkEKKzoxMEMwRjAwMDAwMDAwMDIwMDAwMDUwMDgwMDEwMDAwMDAwMDAwMDA0QjQKKzoxMEMxMDAwMDAwMDA1MDBDMDAxMDAwMDAwMDAwMDAwMTAwMDA1MkM3QTkKKzoxMEMxMTAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwNTJDNjAwMDAwMDAwMDYKKzoxMEMxMjAwMDAwMDAwMDAxMDAwMDMwMDAwMDMwMDAxODAwMDAwMDA0OTIKKzoxMEMxMzAwMDAwMDAzMDA0MDAzMDAwMTgwMDAwMDAwNDAwMDAzMDA4NDcKKzoxMEMxNDAwMDAwMzAwMDE4MDAwMDAwMDIwMDAwMzAwQTAwMzAwMDE4MjMKKzoxMEMxNTAwMDAwMDAwMDAyMDAwMDMwMEMwMDMwMDAxODAwMDAwMDAxNTgKKzoxMEMxNjAwMDAwMDAzMDBEMDAzMDAwMTgwMDAwMDAwMTAwMDAzMDBFMEIKKzoxMEMxNzAwMDAwMzAwMDE4MDAwMDAwMDEwMDAwMzAxMDAwMzAwMDE4RUUKKzoxMEMxODAwMDAwMDAwMDA0MDAwMDMwMTQwMDMwMDAxODAwMDAwMDA0MUIKKzoxMEMxOTAwMDAwMDA1MDAwMDEwMDAwODAwMDA4MDAwNDAwMDA1MDA0NkUKKzoxMEMxQTAwMDAxMDAwMDgwMDAwODAwMDQwMDAwMDAwQTAwMDAwMDAwRjgKKzoxMEMxQjAwMDAwMDAwMDAwMDAwMDUwNjgwMTAwMDA4MDAwMDAwMDAxNDUKKzoxMEMxQzAwMDAwMDA1MDY5MDEwMDAwODAwMDAwMDAwMTAwMDA1MDZDNzgKKzoxMEMxRDAwMDAxMDAwMDgwMDAwMDAwMDIwMDAwNTA2RTAxMDAwMDgwOUQKKzoxMEMxRTAwMDAwMDAwMDAyMDAwMDUwNzAwMTAwMDA4MDAwMDAwMDA0MDgKKzoxMEMxRjAwMDAwMDA1MDc0MDEwMDAwODAwMDAwMDAwNDAwMDA1MDY2NDAKKzoxMEMyMDAwMDAxMDAwMDgwMDAwMDAwMDIwMDAwNTA2NDAxMDAwMDgwNzYKKzoxMEMyMTAwMDAwMDAwMDAxMDAwMDUwNjAwMTAwMDA4MDAwMDAwMDAyRUEKKzoxMEMyMjAwMDAwMDA1MDYyMDEwMDAwODAwMDAwMDAwMjAwMDA1MDUwMzkKKzoxMEMyMzAwMDAxMDAwMDgwMDAwMDAwMDQwMDAwNTA1NDAxMDAwMDgwNTQKKzoxMEMyNDAwMDAwMDAwMDA0MDAwMDUwNTgwMTAwMDA4MDAwMDAwMDA0QkQKKzoxMEMyNTAwMDAwMDA1MDVDMDEwMDAwODAwMDAwMDAwNDAwMDA1MDdDRTEKKzoxMEMyNjAwMDAxMDAwMDgwMDAwMDAwMDEwMDAwNTA3RDAxMDAwMDgwRkUKKzoxMEMyNzAwMDAwMDAwMDAxMDAwMDQwMTgwMDEwMDAwMDAwMDAwMDA0NTEKKzoxMEMyODAwMDAwMDA0MDkwMDAxMDAwMDAwMDAwMDAwNDAwMDA0MDk4RjIKKzoxMEMyOTAwMDAwMTAwMDAwMDAwMDAwMDQwMDAwNDExMDAwMDAwMDAwMzkKKzoxMEMyQTAwMDAwMDAwMDAyMDAwMDQxMTIwMDAwMDAwMDAwMDAwMDAyMzcKKzoxMEMyQjAwMDAwMDA0MTE0MDAwMDAwMDAwMDAwMDAwMjAwMDA0MTE2RDAKKzoxMEMyQzAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwNjA0MDAwMDgwMDAwQzQKKzoxMEMyRDAwMDAwMDAwMDAyMDAwMDYwNDIwMDA4MDAwMDAwMDAwMDAyQjAKKzoxMEMyRTAwMDAwMDA2MDQ0MDAwODAwMDAwMDAwMDAwNDAwMDA2MDgwQkUKKzoxMEMyRjAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwNjBDMDAwNDAwMDA4QzYKKzoxMEMzMDAwMDAwMDAwMDA4MDAwMDYwMDAwMDA4MDAwMDAwMDAwMDAyQkIKKzoxMEMzMTAwMDAwMDA2MDAyMDAwODAwMDAwMDAwMDAwMTAwMDA2MDA0NEUKKzoxMEMzMjAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwNjM0MDAwMDgwMDAwNTgKKzoxMEMzMzAwMDAwMDAwMDA4MDAwMDYzODAwMDA4MDAwMDAwMDAwMDA0MDYKKzoxMEMzNDAwMDAwMDA2Mzg0MDAwODAwMDAwMDAwMDAwMTAwMDA2M0MwREEKKzoxMEMzNTAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwNjNDNDAwMDgwMDAwQTQKKzoxMEMzNjAwMDAwMDAwMDAyMDAwMDY0MDAwMDA4MDAwMDAwMDAwMDA0NUIKKzoxMEMzNzAwMDAwMDA3MDAwMDAxMDAwMDAwMDAwMDAwNDAwMDA3MDA0QzUKKzoxMEMzODAwMDAwMTAwMDAwMDAwMDAwMDQwMDAwNzAwODAwMTAwMDAwMTEKKzoxMEMzOTAwMDAwMDAwMDA0MDAwMDkwMDAwMDA4MDAwMDAwMDAwMDAyRkYKKzoxMEMzQTAwMDAwMDA5MDAyMDAwODAwMDAwMDAwMDAwMTAwMDA5MDA0NUUKKzoxMEMzQjAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwOTA0MDAwMDgwMDAwOUIKKzoxMEMzQzAwMDAwMDAwMDAyMDAwMDkwNDQwMDA4MDAwMDAwMDAwMDAyOEQKKzoxMEMzRDAwMDAwMDA5MDQ2MDAwODAwMDAwMDAwMDAwMjAwMDA5NjQ4OUYKKzoxMEMzRTAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwOTA4MDAwMDgwMDAwMjUKKzoxMEMzRjAwMDAwMDAwMDAyMDAwMDkwODQwMDA4MDAwMDAwMDAwMDAyMUQKKzoxMEM0MDAwMDAwMDA5Njg4MDAwODAwMDAwMDAwMDAwODAwMDA4MDQwM0UKKzoxMEM0MTAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwODA0MTAwMDgwMDAwNEEKKzoxMEM0MjAwMDAwMDAwMDAxMDAwMDgwNDIwMDA4MDAwMDAwMDAwMDAxNDAKKzoxMEM0MzAwMDAwMDA4MDQzMDAwODAwMDAwMDAwMDAwMTAwMDA4MDAwQjAKKzoxMEM0NDAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwODAwMjAwMDgwMDAwNTgKKzoxMEM0NTAwMDAwMDAwMDAxMDAwMDgwMDQwMDA4MDAwMDAwMDAwMDAyNEQKKzoxMEM0NjAwMDAwMDA4MEMwMDAwODAwMDAwMDAwMDAwMjAwMDA4MEMyNDAKKzoxMEM0NzAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwODBDNDAwMDgwMDAwNjYKKzoxMEM0ODAwMDAwMDAwMDAyMDAwMDgwODAwMDA4MDAwMDAwMDAwMDAxQTEKKzoxMEM0OTAwMDAwMDA4MDgxMDAwODAwMDAwMDAwMDAwMTAwMDA4MDgyOTAKKzoxMEM0QTAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwODA4MzAwMDgwMDAwNzgKKzoxMEM0QjAwMDAwMDAwMDAxMDAwMDgwODQwMDA4MDAwMDAwMDAwMDAxNkUKKzoxMEM0QzAwMDAwMDA4MDg1MDAwODAwMDAwMDAwMDAwMTAwMDA4MDg2NTgKKzoxMEM0RDAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwNjAwMDAwMDgwMDAwRUIKKzoxMEM0RTAwMDAwMDAwMDAyMDAwMDYwMDIwMDA4MDAwMDAwMDAwMDAxREYKKzoxMEM0RjAwMDAwMDA2MDA0MDAwODAwMDAwMDAwMDAwMjAwMDA2MDQyMkMKKzoxMEM1MDAwMDAwQzAwMDE4MDAwMDAwMDIwMDAwNjA0MDAwQzAwMDE4RDkKKzoxMEM1MTAwMDAwMDAwMDAyMDAwMDYwNEMwMEMwMDAxODAwMDAwMDA4OEQKKzoxMEM1MjAwMDAwMDA2MDQ0MDBDMDAwMTgwMDAwMDAwODAwMDA2MDU3RDAKKzoxMEM1MzAwMDAwQzAwMDE4MDAwMDAwMDEwMDAwNjA1NDAwQzAwMDE4OTYKKzoxMEM1NDAwMDAwMDAwMDAyMDAwMDYwNTYwMEMwMDAxODAwMDAwMDAxNUEKKzoxMEM1NTAwMDAwMDA2NjQwMDAwODAwMDAwMDAwMDAwODAwMDA2NjgwM0YKKzoxMEM1NjAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwNjZDMDAwMDgwMDAwOEQKKzoxMEM1NzAwMDAwMDAwMDA4MDAwMERBNDIwMDE4MDAwMDAwMDAwMDAyN0QKKzoxMEM1ODAwMDAwMDBERTQwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMDAwQUQKKzoxMEM1OTAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwRDBDMDAwMDAwMDAwMDcKKzoxMEM1QTAwMDAwMDAwMDA0MDAwMEQwQzQwMDAwMDAwMDAwMDAwMDA0RUYKKzoxMEM1QjAwMDAwMDBEMEM4MDAwMDAwMDAwMDAwMDAwNDAwMDBEMENDNDMKKzoxMEM1QzAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwRDBEMDAwMDAwMDAwQzcKKzoxMEM1RDAwMDAwMDAwMDA0MDAwMEQwRDQwMDAwMDAwMDAwMDAwMDA0QUYKKzoxMEM1RTAwMDAwMDBEMEQ4MDAwMDAwMDAwMDAwMDAwNDAwMDBEMEMwMEYKKzoxMEM1RjAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwREIwMDAwMDAwMDAwNDAKKzoxMEM2MDAwMDAwMDAwMDA0MDAwMERCMDAwMDAwMDAwMDAwMDAwMDY4RTMKKzoxMEM2MTAwMDAwMDBCOTQ4MDAwMDAwMDAwMDAwMDAwMDAwMDBEMDAwNDkKKzoxMEM2MjAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwQjBDMDAwMDAwMDAwOTYKKzoxMEM2MzAwMDAwMDAwMDA0MDAwMEIwQzQwMDAwMDAwMDAwMDAwMDA0N0UKKzoxMEM2NDAwMDAwMDBCMEM4MDAwMDAwMDAwMDAwMDAwNDAwMDBCMEMwRkUKKzoxMEM2NTAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwRDZCMDAwMDAwMDAwNDQKKzoxMEM2NjAwMDAwMDAwMDA0MDAwMEQ2QjQwMDAwMDAwMDAwMDAwMDA0MzgKKzoxMEM2NzAwMDAwMDBENkI4MDAwMDAwMDAwMDAwMDAwNDAwMDBENkJDOTYKKzoxMEM2ODAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwRDZCMDAwMDAwMDAwMjAKKzoxMEM2OTAwMDAwMDAwMDEwMDAwMEQzNDgwMDAwMDAwMDAwMDAwMDA4NjcKKzoxMEM2QTAwMDAwMDBEMzU4MDAwMDAwMDAwMDAwMDA4MDAwMDAwMDEwQ0YKKzoxMEM2QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDM1ODAwMDAwMDAwNEYKKzoxMEM2QzAwMDAwMDAwMDA4MDAwMDAwMDAwNjAyMDkwMDAwMDAwMDAwNTEKKzowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9mcy9ibG9ja19kZXYuYyBiL2ZzL2Jsb2NrX2Rldi5jCmluZGV4IDI1N2IwMGUuLmJmOWM3YTcgMTAwNjQ0Ci0tLSBhL2ZzL2Jsb2NrX2Rldi5jCisrKyBiL2ZzL2Jsb2NrX2Rldi5jCkBAIC0xMTIwLDYgKzExMjAsMTUgQEAKIAkJCQkJZ290byByZXN0YXJ0OwogCQkJCX0KIAkJCX0KKworCQkJaWYgKCFyZXQgJiYgIWJkZXYtPmJkX29wZW5lcnMpIHsKKwkJCQliZF9zZXRfc2l6ZShiZGV2LChsb2ZmX3QpZ2V0X2NhcGFjaXR5KGRpc2spPDw5KTsKKwkJCQliZGkgPSBibGtfZ2V0X2JhY2tpbmdfZGV2X2luZm8oYmRldik7CisJCQkJaWYgKGJkaSA9PSBOVUxMKQorCQkJCQliZGkgPSAmZGVmYXVsdF9iYWNraW5nX2Rldl9pbmZvOworCQkJCWJkZXZfaW5vZGVfc3dpdGNoX2JkaShiZGV2LT5iZF9pbm9kZSwgYmRpKTsKKwkJCX0KKwogCQkJLyoKIAkJCSAqIElmIHRoZSBkZXZpY2UgaXMgaW52YWxpZGF0ZWQsIHJlc2NhbiBwYXJ0aXRpb24KIAkJCSAqIGlmIG9wZW4gc3VjY2VlZGVkIG9yIGZhaWxlZCB3aXRoIC1FTk9NRURJVU0uCkBAIC0xMTMwLDE0ICsxMTM5LDYgQEAKIAkJCQlyZXNjYW5fcGFydGl0aW9ucyhkaXNrLCBiZGV2KTsKIAkJCWlmIChyZXQpCiAJCQkJZ290byBvdXRfY2xlYXI7Ci0KLQkJCWlmICghYmRldi0+YmRfb3BlbmVycykgewotCQkJCWJkX3NldF9zaXplKGJkZXYsKGxvZmZfdClnZXRfY2FwYWNpdHkoZGlzayk8PDkpOwotCQkJCWJkaSA9IGJsa19nZXRfYmFja2luZ19kZXZfaW5mbyhiZGV2KTsKLQkJCQlpZiAoYmRpID09IE5VTEwpCi0JCQkJCWJkaSA9ICZkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm87Ci0JCQkJYmRldl9pbm9kZV9zd2l0Y2hfYmRpKGJkZXYtPmJkX2lub2RlLCBiZGkpOwotCQkJfQogCQl9IGVsc2UgewogCQkJc3RydWN0IGJsb2NrX2RldmljZSAqd2hvbGU7CiAJCQl3aG9sZSA9IGJkZ2V0X2Rpc2soZGlzaywgMCk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnRfaW8uYyBiL2ZzL2J0cmZzL2V4dGVudF9pby5jCmluZGV4IGJhNDFkYTUuLjk2ZmNmYTUgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2V4dGVudF9pby5jCisrKyBiL2ZzL2J0cmZzL2V4dGVudF9pby5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2V2ZWMuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2luY2x1ZGUgImV4dGVudF9pby5oIgogI2luY2x1ZGUgImV4dGVudF9tYXAuaCIKICNpbmNsdWRlICJjb21wYXQuaCIKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3JlbG9jYXRpb24uYyBiL2ZzL2J0cmZzL3JlbG9jYXRpb24uYwppbmRleCAxOTlhODAxLi5mMzQwZjdjIDEwMDY0NAotLS0gYS9mcy9idHJmcy9yZWxvY2F0aW9uLmMKKysrIGIvZnMvYnRyZnMvcmVsb2NhdGlvbi5jCkBAIC03MDksNyArNzA5LDcgQEAKIAlXQVJOX09OKGN1ci0+Y2hlY2tlZCk7CiAJaWYgKCFsaXN0X2VtcHR5KCZjdXItPnVwcGVyKSkgewogCQkvKgotCQkgKiB0aGUgYmFja3JlZiB3YXMgYWRkZWQgcHJldmlvdXNseSB3aGVuIHByb2Nlc3NzaW5nCisJCSAqIHRoZSBiYWNrcmVmIHdhcyBhZGRlZCBwcmV2aW91c2x5IHdoZW4gcHJvY2Vzc2luZwogCQkgKiBiYWNrcmVmIG9mIHR5cGUgQlRSRlNfVFJFRV9CTE9DS19SRUZfS0VZCiAJCSAqLwogCQlCVUdfT04oIWxpc3RfaXNfc2luZ3VsYXIoJmN1ci0+dXBwZXIpKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvS2NvbmZpZyBiL2ZzL2NpZnMvS2NvbmZpZwppbmRleCA3Y2IwZjdmLi43NWM0N2NkIDEwMDY0NAotLS0gYS9mcy9jaWZzL0tjb25maWcKKysrIGIvZnMvY2lmcy9LY29uZmlnCkBAIC03LDYgKzcsNyBAQAogCXNlbGVjdCBDUllQVE9fTUQ1CiAJc2VsZWN0IENSWVBUT19ITUFDCiAJc2VsZWN0IENSWVBUT19BUkM0CisJc2VsZWN0IENSWVBUT19ERVMKIAloZWxwCiAJICBUaGlzIGlzIHRoZSBjbGllbnQgVkZTIG1vZHVsZSBmb3IgdGhlIENvbW1vbiBJbnRlcm5ldCBGaWxlIFN5c3RlbQogCSAgKENJRlMpIHByb3RvY29sIHdoaWNoIGlzIHRoZSBzdWNjZXNzb3IgdG8gdGhlIFNlcnZlciBNZXNzYWdlIEJsb2NrCkBAIC0xNTIsMTYgKzE1MywyOCBAQAogCSAgICBBbGxvd3MgdG8gZmV0Y2ggQ0lGUy9OVEZTIEFDTCBmcm9tIHRoZSBzZXJ2ZXIuICBUaGUgREFDTCBibG9iCiAJICAgIGlzIGhhbmRlZCBvdmVyIHRvIHRoZSBhcHBsaWNhdGlvbi9jYWxsZXIuCiAKLWNvbmZpZyBDSUZTX0VYUEVSSU1FTlRBTAotCSAgYm9vbCAiQ0lGUyBFeHBlcmltZW50YWwgRmVhdHVyZXMgKEVYUEVSSU1FTlRBTCkiCitjb25maWcgQ0lGU19TTUIyCisJYm9vbCAiU01CMiBuZXR3b3JrIGZpbGUgc3lzdGVtIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgSU5FVCAmJiBCUk9LRU4KKwlzZWxlY3QgTkxTCisJc2VsZWN0IEtFWVMKKwlzZWxlY3QgRlNDQUNIRQorCXNlbGVjdCBETlNfUkVTT0xWRVIKKworCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBleHBlcmltZW50YWwgc3VwcG9ydCBmb3IgdGhlIFNNQjIgKFNlcnZlciBNZXNzYWdlIEJsb2NrCisJICB2ZXJzaW9uIDIpIHByb3RvY29sLiBUaGUgU01CMiBwcm90b2NvbCBpcyB0aGUgc3VjY2Vzc29yIHRvIHRoZQorCSAgcG9wdWxhciBDSUZTIGFuZCBTTUIgbmV0d29yayBmaWxlIHNoYXJpbmcgcHJvdG9jb2xzLiBTTUIyIGlzIHRoZQorCSAgbmF0aXZlIGZpbGUgc2hhcmluZyBtZWNoYW5pc20gZm9yIHJlY2VudCB2ZXJzaW9ucyBvZiBXaW5kb3dzCisJICBvcGVyYXRpbmcgc3lzdGVtcyAoc2luY2UgVmlzdGEpLiAgU01CMiBlbmFibGVtZW50IHdpbGwgZXZlbnR1YWxseQorCSAgYWxsb3cgdXNlcnMgYmV0dGVyIHBlcmZvcm1hbmNlLCBzZWN1cml0eSBhbmQgZmVhdHVyZXMsIHRoYW4gd291bGQgYmUKKwkgIHBvc3NpYmxlIHdpdGggY2lmcy4gTm90ZSB0aGF0IHNtYjIgbW91bnQgb3B0aW9ucyBhbHNvIGFyZSBzaW1wbGVyCisJICAoY29tcGFyZWQgdG8gY2lmcykgZHVlIHRvIHByb3RvY29sIGltcHJvdmVtZW50cy4KKworCSAgVW5sZXNzIHlvdSBhcmUgYSBkZXZlbG9wZXIgb3IgdGVzdGVyLCBzYXkgTi4KKworY29uZmlnIENJRlNfTkZTRF9FWFBPUlQKKwkgIGJvb2wgIkFsbG93IG5mc2QgdG8gZXhwb3J0IENJRlMgZmlsZSBzeXN0ZW0gKEVYUEVSSU1FTlRBTCkiCiAJICBkZXBlbmRzIG9uIENJRlMgJiYgRVhQRVJJTUVOVEFMCiAJICBoZWxwCi0JICAgIEVuYWJsZXMgY2lmcyBmZWF0dXJlcyB1bmRlciB0ZXN0aW5nLiBUaGVzZSBmZWF0dXJlcyBhcmUKLQkgICAgZXhwZXJpbWVudGFsIGFuZCBjdXJyZW50bHkgaW5jbHVkZSBERlMgc3VwcG9ydCBhbmQgZGlyZWN0b3J5Ci0JICAgIGNoYW5nZSBub3RpZmljYXRpb24gaWUgZmNudGwoRl9ETk9USUZZKSwgYXMgd2VsbCBhcyB0aGUgdXBjYWxsCi0JICAgIG1lY2hhbmlzbSB3aGljaCB3aWxsIGJlIHVzZWQgZm9yIEtlcmJlcm9zIHNlc3Npb24gbmVnb3RpYXRpb24KLQkgICAgYW5kIHVpZCByZW1hcHBpbmcuICBTb21lIG9mIHRoZXNlIGZlYXR1cmVzIGFsc28gbWF5IGRlcGVuZCBvbgotCSAgICBzZXR0aW5nIGEgdmFsdWUgb2YgMSB0byB0aGUgcHNldWRvLWZpbGUgL3Byb2MvZnMvY2lmcy9FeHBlcmltZW50YWwKLQkgICAgKHdoaWNoIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQpLiBTZWUgdGhlIGZpbGUgZnMvY2lmcy9SRUFETUUKLQkgICAgZm9yIG1vcmUgZGV0YWlscy4gIElmIHVuc3VyZSwgc2F5IE4uCi0KKwkgICBBbGxvd3MgTkZTIHNlcnZlciB0byBleHBvcnQgYSBDSUZTIG1vdW50ZWQgc2hhcmUgKG5mc2Qgb3ZlciBjaWZzKQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9NYWtlZmlsZSBiL2ZzL2NpZnMvTWFrZWZpbGUKaW5kZXggZDg3NTU4NC4uMDA1ZDUyNCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9NYWtlZmlsZQorKysgYi9mcy9jaWZzL01ha2VmaWxlCkBAIC00LDcgKzQsNyBAQAogb2JqLSQoQ09ORklHX0NJRlMpICs9IGNpZnMubwogCiBjaWZzLXkgOj0gY2lmc2ZzLm8gY2lmc3NtYi5vIGNpZnNfZGVidWcubyBjb25uZWN0Lm8gZGlyLm8gZmlsZS5vIGlub2RlLm8gXAotCSAgbGluay5vIG1pc2MubyBuZXRtaXNjLm8gc21iZGVzLm8gc21iZW5jcnlwdC5vIHRyYW5zcG9ydC5vIGFzbjEubyBcCisJICBsaW5rLm8gbWlzYy5vIG5ldG1pc2MubyBzbWJlbmNyeXB0Lm8gdHJhbnNwb3J0Lm8gYXNuMS5vIFwKIAkgIGNpZnNfdW5pY29kZS5vIG50ZXJyLm8geGF0dHIubyBjaWZzZW5jcnlwdC5vIFwKIAkgIHJlYWRkaXIubyBpb2N0bC5vIHNlc3MubyBleHBvcnQubwogCmRpZmYgLS1naXQgYS9mcy9jaWZzL1JFQURNRSBiL2ZzL2NpZnMvUkVBRE1FCmluZGV4IDc0YWIxNjVmLi40YTNjYTBlIDEwMDY0NAotLS0gYS9mcy9jaWZzL1JFQURNRQorKysgYi9mcy9jaWZzL1JFQURNRQpAQCAtNzA0LDE4ICs3MDQsNiBAQAogCiAJZWNobyAxID4gL3Byb2MvZnMvY2lmcy90cmFjZVNNQgogCi1Ud28gb3RoZXIgZXhwZXJpbWVudGFsIGZlYXR1cmVzIGFyZSB1bmRlciBkZXZlbG9wbWVudC4gVG8gdGVzdCB0aGVzZQotcmVxdWlyZXMgZW5hYmxpbmcgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMCi0KLQljaWZzYWNsIHN1cHBvcnQgbmVlZGVkIHRvIHJldHJpZXZlIGFwcHJveGltYXRlZCBtb2RlIGJpdHMgYmFzZWQgb24KLQkJdGhlIGNvbnRlbnRzIG9uIHRoZSBDSUZTIEFDTC4KLQotCWxlYXNlIHN1cHBvcnQ6IGNpZnMgd2lsbCBjaGVjayB0aGUgb3Bsb2NrIHN0YXRlIGJlZm9yZSBjYWxsaW5nIGludG8KLQl0aGUgdmZzIHRvIHNlZSBpZiB3ZSBjYW4gZ3JhbnQgYSBsZWFzZSBvbiBhIGZpbGUuCi0KLQlETk9USUZZIGZjbnRsOiBuZWVkZWQgZm9yIHN1cHBvcnQgb2YgZGlyZWN0b3J5IGNoYW5nZSAKLQkJCSAgICBub3RpZmljYXRpb24gYW5kIHBlcmhhcHMgbGF0ZXIgZm9yIGZpbGUgbGVhc2VzKQotCiBQZXIgc2hhcmUgKHBlciBjbGllbnQgbW91bnQpIHN0YXRpc3RpY3MgYXJlIGF2YWlsYWJsZSBpbiAvcHJvYy9mcy9jaWZzL1N0YXRzCiBpZiB0aGUga2VybmVsIHdhcyBjb25maWd1cmVkIHdpdGggY2lmcyBzdGF0aXN0aWNzIGVuYWJsZWQuICBUaGUgc3RhdGlzdGljcwogcmVwcmVzZW50IHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bCAoaWUgbm9uLXplcm8gcmV0dXJuIGNvZGUgZnJvbSB0aGUgc2VydmVyKSAKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc19kZWJ1Zy5jIGIvZnMvY2lmcy9jaWZzX2RlYnVnLmMKaW5kZXggMzBkMDFiYy4uMThmNDI3MiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzX2RlYnVnLmMKKysrIGIvZnMvY2lmcy9jaWZzX2RlYnVnLmMKQEAgLTYzLDcgKzYzLDcgQEAKIAljRVJST1IoMSwgIkNtZDogJWQgRXJyOiAweCV4IEZsYWdzOiAweCV4IEZsZ3MyOiAweCV4IE1pZDogJWQgUGlkOiAlZCIsCiAJCSAgc21iLT5Db21tYW5kLCBzbWItPlN0YXR1cy5DaWZzRXJyb3IsCiAJCSAgc21iLT5GbGFncywgc21iLT5GbGFnczIsIHNtYi0+TWlkLCBzbWItPlBpZCk7Ci0JY0VSUk9SKDEsICJzbWIgYnVmICVwIGxlbiAlZCIsIHNtYiwgc21iQ2FsY1NpemVfTEUoc21iKSk7CisJY0VSUk9SKDEsICJzbWIgYnVmICVwIGxlbiAlZCIsIHNtYiwgc21iQ2FsY1NpemUoc21iKSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzX2ZzX3NiLmggYi9mcy9jaWZzL2NpZnNfZnNfc2IuaAppbmRleCBhYzUxY2QyLi5hOWQ1NjkyIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNfZnNfc2IuaAorKysgYi9mcy9jaWZzL2NpZnNfZnNfc2IuaApAQCAtNTgsOSArNTgsNyBAQAogCXVuc2lnbmVkIGludCBtbnRfY2lmc19mbGFnczsKIAlpbnQJcHJlcGF0aGxlbjsKIAljaGFyICAgKnByZXBhdGg7IC8qIHJlbGF0aXZlIHBhdGggdW5kZXIgdGhlIHNoYXJlIHRvIG1vdW50IHRvICovCi0jaWZkZWYgQ09ORklHX0NJRlNfREZTX1VQQ0FMTAotCWNoYXIgICAqbW91bnRkYXRhOyAvKiBtb3VudCBvcHRpb25zIHJlY2VpdmVkIGF0IG1vdW50IHRpbWUgKi8KLSNlbmRpZgorCWNoYXIgICAqbW91bnRkYXRhOyAvKiBvcHRpb25zIHJlY2VpdmVkIGF0IG1vdW50IHRpbWUgb3IgdmlhIERGUyByZWZzICovCiAJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gYmRpOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgcHJ1bmVfdGxpbmtzOwogfTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc191bmljb2RlLmggYi9mcy9jaWZzL2NpZnNfdW5pY29kZS5oCmluZGV4IDY0NGRkODgyLi42ZDAyZmQ1IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNfdW5pY29kZS5oCisrKyBiL2ZzL2NpZnMvY2lmc191bmljb2RlLmgKQEAgLTgyLDYgKzgyLDkgQEAKIGNoYXIgKmNpZnNfc3RybmR1cF9mcm9tX3Vjcyhjb25zdCBjaGFyICpzcmMsIGNvbnN0IGludCBtYXhsZW4sCiAJCQkgICAgY29uc3QgYm9vbCBpc191bmljb2RlLAogCQkJICAgIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKmNvZGVwYWdlKTsKK2V4dGVybiBpbnQgY2lmc0NvbnZlcnRUb1VDUyhfX2xlMTYgKnRhcmdldCwgY29uc3QgY2hhciAqc291cmNlLCBpbnQgbWF4bGVuLAorCQkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqY3AsIGludCBtYXBDaGFycyk7CisKICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzYWNsLmMgYi9mcy9jaWZzL2NpZnNhY2wuYwppbmRleCBiZWVlYmYxLi5mM2M2ZmI5IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNhY2wuYworKysgYi9mcy9jaWZzL2NpZnNhY2wuYwpAQCAtMjMsMjQgKzIzLDE2IEBACiAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXljdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXktdHlwZS5oPgorI2luY2x1ZGUgPGtleXMvdXNlci10eXBlLmg+CiAjaW5jbHVkZSAiY2lmc3BkdS5oIgogI2luY2x1ZGUgImNpZnNnbG9iLmgiCiAjaW5jbHVkZSAiY2lmc2FjbC5oIgogI2luY2x1ZGUgImNpZnNwcm90by5oIgogI2luY2x1ZGUgImNpZnNfZGVidWcuaCIKIAotCi1zdGF0aWMgc3RydWN0IGNpZnNfd2tzaWQgd2tzaWRhcnJbTlVNX1dLX1NJRFNdID0gewotCXt7MSwgMCwgezAsIDAsIDAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMCwgMH0gfSwgIm51bGwgdXNlciJ9LAotCXt7MSwgMSwgezAsIDAsIDAsIDAsIDAsIDF9LCB7MCwgMCwgMCwgMCwgMH0gfSwgIm5vYm9keSJ9LAotCXt7MSwgMSwgezAsIDAsIDAsIDAsIDAsIDV9LCB7X19jb25zdGFudF9jcHVfdG9fbGUzMigxMSksIDAsIDAsIDAsIDB9IH0sICJuZXQtdXNlcnMifSwKLQl7ezEsIDEsIHswLCAwLCAwLCAwLCAwLCA1fSwge19fY29uc3RhbnRfY3B1X3RvX2xlMzIoMTgpLCAwLCAwLCAwLCAwfSB9LCAic3lzIn0sCi0Je3sxLCAyLCB7MCwgMCwgMCwgMCwgMCwgNX0sIHtfX2NvbnN0YW50X2NwdV90b19sZTMyKDMyKSwgX19jb25zdGFudF9jcHVfdG9fbGUzMig1NDQpLCAwLCAwLCAwfSB9LCAicm9vdCJ9LAotCXt7MSwgMiwgezAsIDAsIDAsIDAsIDAsIDV9LCB7X19jb25zdGFudF9jcHVfdG9fbGUzMigzMiksIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoNTQ1KSwgMCwgMCwgMH0gfSwgInVzZXJzIn0sCi0Je3sxLCAyLCB7MCwgMCwgMCwgMCwgMCwgNX0sIHtfX2NvbnN0YW50X2NwdV90b19sZTMyKDMyKSwgX19jb25zdGFudF9jcHVfdG9fbGUzMig1NDYpLCAwLCAwLCAwfSB9LCAiZ3Vlc3QifSB9Ci07Ci0KLQogLyogc2VjdXJpdHkgaWQgZm9yIGV2ZXJ5b25lL3dvcmxkIHN5c3RlbSBncm91cCAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBjaWZzX3NpZCBzaWRfZXZlcnlvbmUgPSB7CiAJMSwgMSwgezAsIDAsIDAsIDAsIDAsIDF9LCB7MH0gfTsKQEAgLTUwLDUwICs0MiwzODUgQEAKIC8qIGdyb3VwIHVzZXJzICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNpZnNfc2lkIHNpZF91c2VyID0gezEsIDIgLCB7MCwgMCwgMCwgMCwgMCwgNX0sIHt9IH07CiAKK2NvbnN0IHN0cnVjdCBjcmVkICpyb290X2NyZWQ7CiAKLWludCBtYXRjaF9zaWQoc3RydWN0IGNpZnNfc2lkICpjdHNpZCkKK3N0YXRpYyB2b2lkCitzaHJpbmtfaWRtYXBfdHJlZShzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwgaW50IG5yX3RvX3NjYW4sIGludCAqbnJfcmVtLAorCQkJaW50ICpucl9kZWwpCiB7Ci0JaW50IGksIGo7Ci0JaW50IG51bV9zdWJhdXRoLCBudW1fc2F0LCBudW1fc2F3OwotCXN0cnVjdCBjaWZzX3NpZCAqY3dzaWQ7CisJc3RydWN0IHJiX25vZGUgKm5vZGU7CisJc3RydWN0IHJiX25vZGUgKnRtcDsKKwlzdHJ1Y3QgY2lmc19zaWRfaWQgKnBzaWRpZDsKIAotCWlmICghY3RzaWQpCi0JCXJldHVybiAtMTsKLQotCWZvciAoaSA9IDA7IGkgPCBOVU1fV0tfU0lEUzsgKytpKSB7Ci0JCWN3c2lkID0gJih3a3NpZGFycltpXS5jaWZzc2lkKTsKLQotCQkvKiBjb21wYXJlIHRoZSByZXZpc2lvbiAqLwotCQlpZiAoY3RzaWQtPnJldmlzaW9uICE9IGN3c2lkLT5yZXZpc2lvbikKLQkJCWNvbnRpbnVlOwotCi0JCS8qIGNvbXBhcmUgYWxsIG9mIHRoZSBzaXggYXV0aCB2YWx1ZXMgKi8KLQkJZm9yIChqID0gMDsgaiA8IDY7ICsraikgewotCQkJaWYgKGN0c2lkLT5hdXRob3JpdHlbal0gIT0gY3dzaWQtPmF1dGhvcml0eVtqXSkKLQkJCQlicmVhazsKKwlub2RlID0gcmJfZmlyc3Qocm9vdCk7CisJd2hpbGUgKG5vZGUpIHsKKwkJdG1wID0gbm9kZTsKKwkJbm9kZSA9IHJiX25leHQodG1wKTsKKwkJcHNpZGlkID0gcmJfZW50cnkodG1wLCBzdHJ1Y3QgY2lmc19zaWRfaWQsIHJibm9kZSk7CisJCWlmIChucl90b19zY2FuID09IDAgfHwgKm5yX2RlbCA9PSBucl90b19zY2FuKQorCQkJKysoKm5yX3JlbSk7CisJCWVsc2UgeworCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgcHNpZGlkLT50aW1lICsgU0lEX01BUF9FWFBJUkUpCisJCQkJCQkmJiBwc2lkaWQtPnJlZmNvdW50ID09IDApIHsKKwkJCQlyYl9lcmFzZSh0bXAsIHJvb3QpOworCQkJCSsrKCpucl9kZWwpOworCQkJfSBlbHNlCisJCQkJKysoKm5yX3JlbSk7CiAJCX0KLQkJaWYgKGogPCA2KQotCQkJY29udGludWU7IC8qIGFsbCBvZiB0aGUgYXV0aCB2YWx1ZXMgZGlkIG5vdCBtYXRjaCAqLworCX0KK30KIAotCQkvKiBjb21wYXJlIGFsbCBvZiB0aGUgc3ViYXV0aCB2YWx1ZXMgaWYgYW55ICovCi0JCW51bV9zYXQgPSBjdHNpZC0+bnVtX3N1YmF1dGg7Ci0JCW51bV9zYXcgPSBjd3NpZC0+bnVtX3N1YmF1dGg7Ci0JCW51bV9zdWJhdXRoID0gbnVtX3NhdCA8IG51bV9zYXcgPyBudW1fc2F0IDogbnVtX3NhdzsKLQkJaWYgKG51bV9zdWJhdXRoKSB7Ci0JCQlmb3IgKGogPSAwOyBqIDwgbnVtX3N1YmF1dGg7ICsraikgewotCQkJCWlmIChjdHNpZC0+c3ViX2F1dGhbal0gIT0gY3dzaWQtPnN1Yl9hdXRoW2pdKQotCQkJCQlicmVhazsKLQkJCX0KLQkJCWlmIChqIDwgbnVtX3N1YmF1dGgpCi0JCQkJY29udGludWU7IC8qIGFsbCBzdWJfYXV0aCB2YWx1ZXMgZG8gbm90IG1hdGNoICovCisvKgorICogUnVuIGlkbWFwIGNhY2hlIHNocmlua2VyLgorICovCitzdGF0aWMgaW50CitjaWZzX2lkbWFwX3Nocmlua2VyKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLCBpbnQgbnJfdG9fc2NhbiwgZ2ZwX3QgZ2ZwX21hc2spCit7CisJaW50IG5yX2RlbCA9IDA7CisJaW50IG5yX3JlbSA9IDA7CisJc3RydWN0IHJiX3Jvb3QgKnJvb3Q7CisKKwlyb290ID0gJnVpZHRyZWU7CisJc3Bpbl9sb2NrKCZzaWR1aWRsb2NrKTsKKwlzaHJpbmtfaWRtYXBfdHJlZShyb290LCBucl90b19zY2FuLCAmbnJfcmVtLCAmbnJfZGVsKTsKKwlzcGluX3VubG9jaygmc2lkdWlkbG9jayk7CisKKwlyb290ID0gJmdpZHRyZWU7CisJc3Bpbl9sb2NrKCZzaWRnaWRsb2NrKTsKKwlzaHJpbmtfaWRtYXBfdHJlZShyb290LCBucl90b19zY2FuLCAmbnJfcmVtLCAmbnJfZGVsKTsKKwlzcGluX3VubG9jaygmc2lkZ2lkbG9jayk7CisKKwlyZXR1cm4gbnJfcmVtOworfQorCitzdGF0aWMgc3RydWN0IHNocmlua2VyIGNpZnNfc2hyaW5rZXIgPSB7CisJLnNocmluayA9IGNpZnNfaWRtYXBfc2hyaW5rZXIsCisJLnNlZWtzID0gREVGQVVMVF9TRUVLUywKK307CisKK3N0YXRpYyBpbnQKK2NpZnNfaWRtYXBfa2V5X2luc3RhbnRpYXRlKHN0cnVjdCBrZXkgKmtleSwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFsZW4pCit7CisJY2hhciAqcGF5bG9hZDsKKworCXBheWxvYWQgPSBrbWFsbG9jKGRhdGFsZW4sIEdGUF9LRVJORUwpOworCWlmICghcGF5bG9hZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1jcHkocGF5bG9hZCwgZGF0YSwgZGF0YWxlbik7CisJa2V5LT5wYXlsb2FkLmRhdGEgPSBwYXlsb2FkOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2NpZnNfaWRtYXBfa2V5X2Rlc3Ryb3koc3RydWN0IGtleSAqa2V5KQoreworCWtmcmVlKGtleS0+cGF5bG9hZC5kYXRhKTsKK30KKworc3RydWN0IGtleV90eXBlIGNpZnNfaWRtYXBfa2V5X3R5cGUgPSB7CisJLm5hbWUgICAgICAgID0gImNpZnMuaWRtYXAiLAorCS5pbnN0YW50aWF0ZSA9IGNpZnNfaWRtYXBfa2V5X2luc3RhbnRpYXRlLAorCS5kZXN0cm95ICAgICA9IGNpZnNfaWRtYXBfa2V5X2Rlc3Ryb3ksCisJLmRlc2NyaWJlICAgID0gdXNlcl9kZXNjcmliZSwKKwkubWF0Y2ggICAgICAgPSB1c2VyX21hdGNoLAorfTsKKworc3RhdGljIHZvaWQKK3NpZF90b19zdHIoc3RydWN0IGNpZnNfc2lkICpzaWRwdHIsIGNoYXIgKnNpZHN0cikKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIHNhdmFsOworCWNoYXIgKnN0cnB0cjsKKworCXN0cnB0ciA9IHNpZHN0cjsKKworCXNwcmludGYoc3RycHRyLCAiJXMiLCAiUyIpOworCXN0cnB0ciA9IHNpZHN0ciArIHN0cmxlbihzaWRzdHIpOworCisJc3ByaW50ZihzdHJwdHIsICItJWQiLCBzaWRwdHItPnJldmlzaW9uKTsKKwlzdHJwdHIgPSBzaWRzdHIgKyBzdHJsZW4oc2lkc3RyKTsKKworCWZvciAoaSA9IDA7IGkgPCA2OyArK2kpIHsKKwkJaWYgKHNpZHB0ci0+YXV0aG9yaXR5W2ldKSB7CisJCQlzcHJpbnRmKHN0cnB0ciwgIi0lZCIsIHNpZHB0ci0+YXV0aG9yaXR5W2ldKTsKKwkJCXN0cnB0ciA9IHNpZHN0ciArIHN0cmxlbihzaWRzdHIpOwogCQl9Ci0KLQkJY0ZZSSgxLCAibWF0Y2hpbmcgc2lkOiAlc1xuIiwgd2tzaWRhcnJbaV0uc2lkbmFtZSk7Ci0JCXJldHVybiAwOyAvKiBzaWRzIGNvbXBhcmUvbWF0Y2ggKi8KIAl9CiAKLQljRllJKDEsICJObyBtYXRjaGluZyBzaWQiKTsKLQlyZXR1cm4gLTE7CisJZm9yIChpID0gMDsgaSA8IHNpZHB0ci0+bnVtX3N1YmF1dGg7ICsraSkgeworCQlzYXZhbCA9IGxlMzJfdG9fY3B1KHNpZHB0ci0+c3ViX2F1dGhbaV0pOworCQlzcHJpbnRmKHN0cnB0ciwgIi0lbGQiLCBzYXZhbCk7CisJCXN0cnB0ciA9IHNpZHN0ciArIHN0cmxlbihzaWRzdHIpOworCX0KK30KKworc3RhdGljIHZvaWQKK2lkX3JiX2luc2VydChzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwgc3RydWN0IGNpZnNfc2lkICpzaWRwdHIsCisJCXN0cnVjdCBjaWZzX3NpZF9pZCAqKnBzaWRpZCwgY2hhciAqdHlwZXN0cikKK3sKKwlpbnQgcmM7CisJY2hhciAqc3RycHRyOworCXN0cnVjdCByYl9ub2RlICpub2RlID0gcm9vdC0+cmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgcmJfbm9kZSAqKmxpbmt0byA9ICYocm9vdC0+cmJfbm9kZSk7CisJc3RydWN0IGNpZnNfc2lkX2lkICpsc2lkaWQ7CisKKwl3aGlsZSAobm9kZSkgeworCQlsc2lkaWQgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgY2lmc19zaWRfaWQsIHJibm9kZSk7CisJCXBhcmVudCA9IG5vZGU7CisJCXJjID0gY29tcGFyZV9zaWRzKHNpZHB0ciwgJigobHNpZGlkKS0+c2lkKSk7CisJCWlmIChyYyA+IDApIHsKKwkJCWxpbmt0byA9ICYobm9kZS0+cmJfbGVmdCk7CisJCQlub2RlID0gbm9kZS0+cmJfbGVmdDsKKwkJfSBlbHNlIGlmIChyYyA8IDApIHsKKwkJCWxpbmt0byA9ICYobm9kZS0+cmJfcmlnaHQpOworCQkJbm9kZSA9IG5vZGUtPnJiX3JpZ2h0OworCQl9CisJfQorCisJbWVtY3B5KCYoKnBzaWRpZCktPnNpZCwgc2lkcHRyLCBzaXplb2Yoc3RydWN0IGNpZnNfc2lkKSk7CisJKCpwc2lkaWQpLT50aW1lID0gamlmZmllcyAtIChTSURfTUFQX1JFVFJZICsgMSk7CisJKCpwc2lkaWQpLT5yZWZjb3VudCA9IDA7CisKKwlzcHJpbnRmKCgqcHNpZGlkKS0+c2lkc3RyLCAiJXMiLCB0eXBlc3RyKTsKKwlzdHJwdHIgPSAoKnBzaWRpZCktPnNpZHN0ciArIHN0cmxlbigoKnBzaWRpZCktPnNpZHN0cik7CisJc2lkX3RvX3N0cigmKCpwc2lkaWQpLT5zaWQsIHN0cnB0cik7CisKKwljbGVhcl9iaXQoU0lEX0lEX1BFTkRJTkcsICYoKnBzaWRpZCktPnN0YXRlKTsKKwljbGVhcl9iaXQoU0lEX0lEX01BUFBFRCwgJigqcHNpZGlkKS0+c3RhdGUpOworCisJcmJfbGlua19ub2RlKCYoKnBzaWRpZCktPnJibm9kZSwgcGFyZW50LCBsaW5rdG8pOworCXJiX2luc2VydF9jb2xvcigmKCpwc2lkaWQpLT5yYm5vZGUsIHJvb3QpOworfQorCitzdGF0aWMgc3RydWN0IGNpZnNfc2lkX2lkICoKK2lkX3JiX3NlYXJjaChzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwgc3RydWN0IGNpZnNfc2lkICpzaWRwdHIpCit7CisJaW50IHJjOworCXN0cnVjdCByYl9ub2RlICpub2RlID0gcm9vdC0+cmJfbm9kZTsKKwlzdHJ1Y3QgY2lmc19zaWRfaWQgKmxzaWRpZDsKKworCXdoaWxlIChub2RlKSB7CisJCWxzaWRpZCA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBjaWZzX3NpZF9pZCwgcmJub2RlKTsKKwkJcmMgPSBjb21wYXJlX3NpZHMoc2lkcHRyLCAmKChsc2lkaWQpLT5zaWQpKTsKKwkJaWYgKHJjID4gMCkgeworCQkJbm9kZSA9IG5vZGUtPnJiX2xlZnQ7CisJCX0gZWxzZSBpZiAocmMgPCAwKSB7CisJCQlub2RlID0gbm9kZS0+cmJfcmlnaHQ7CisJCX0gZWxzZSAvKiBub2RlIGZvdW5kICovCisJCQlyZXR1cm4gbHNpZGlkOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50CitzaWRpZF9wZW5kaW5nX3dhaXQodm9pZCAqdW51c2VkKQoreworCXNjaGVkdWxlKCk7CisJcmV0dXJuIHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpID8gLUVSRVNUQVJUU1lTIDogMDsKK30KKworc3RhdGljIGludAorc2lkX3RvX2lkKHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IsIHN0cnVjdCBjaWZzX3NpZCAqcHNpZCwKKwkJc3RydWN0IGNpZnNfZmF0dHIgKmZhdHRyLCB1aW50IHNpZHR5cGUpCit7CisJaW50IHJjOworCXVuc2lnbmVkIGxvbmcgY2lkOworCXN0cnVjdCBrZXkgKmlka2V5OworCWNvbnN0IHN0cnVjdCBjcmVkICpzYXZlZF9jcmVkOworCXN0cnVjdCBjaWZzX3NpZF9pZCAqcHNpZGlkLCAqbnBzaWRpZDsKKwlzdHJ1Y3QgcmJfcm9vdCAqY2lkdHJlZTsKKwlzcGlubG9ja190ICpjaWRsb2NrOworCisJaWYgKHNpZHR5cGUgPT0gU0lET1dORVIpIHsKKwkJY2lkID0gY2lmc19zYi0+bW50X3VpZDsgLyogZGVmYXVsdCB1aWQsIGluIGNhc2UgdXBjYWxsIGZhaWxzICovCisJCWNpZGxvY2sgPSAmc2lkdWlkbG9jazsKKwkJY2lkdHJlZSA9ICZ1aWR0cmVlOworCX0gZWxzZSBpZiAoc2lkdHlwZSA9PSBTSURHUk9VUCkgeworCQljaWQgPSBjaWZzX3NiLT5tbnRfZ2lkOyAvKiBkZWZhdWx0IGdpZCwgaW4gY2FzZSB1cGNhbGwgZmFpbHMgKi8KKwkJY2lkbG9jayA9ICZzaWRnaWRsb2NrOworCQljaWR0cmVlID0gJmdpZHRyZWU7CisJfSBlbHNlCisJCXJldHVybiAtRU5PRU5UOworCisJc3Bpbl9sb2NrKGNpZGxvY2spOworCXBzaWRpZCA9IGlkX3JiX3NlYXJjaChjaWR0cmVlLCBwc2lkKTsKKworCWlmICghcHNpZGlkKSB7IC8qIG5vZGUgZG9lcyBub3QgZXhpc3QsIGFsbG9jYXRlIG9uZSAmIGF0dGVtcHQgYWRkaW5nICovCisJCXNwaW5fdW5sb2NrKGNpZGxvY2spOworCQlucHNpZGlkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNpZnNfc2lkX2lkKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghbnBzaWRpZCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCW5wc2lkaWQtPnNpZHN0ciA9IGttYWxsb2MoU0lETEVOLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFucHNpZGlkLT5zaWRzdHIpIHsKKwkJCWtmcmVlKG5wc2lkaWQpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQlzcGluX2xvY2soY2lkbG9jayk7CisJCXBzaWRpZCA9IGlkX3JiX3NlYXJjaChjaWR0cmVlLCBwc2lkKTsKKwkJaWYgKHBzaWRpZCkgeyAvKiBub2RlIGhhcHBlbmVkIHRvIGdldCBpbnNlcnRlZCBtZWFud2hpbGUgKi8KKwkJCSsrcHNpZGlkLT5yZWZjb3VudDsKKwkJCXNwaW5fdW5sb2NrKGNpZGxvY2spOworCQkJa2ZyZWUobnBzaWRpZC0+c2lkc3RyKTsKKwkJCWtmcmVlKG5wc2lkaWQpOworCQl9IGVsc2UgeworCQkJcHNpZGlkID0gbnBzaWRpZDsKKwkJCWlkX3JiX2luc2VydChjaWR0cmVlLCBwc2lkLCAmcHNpZGlkLAorCQkJCQlzaWR0eXBlID09IFNJRE9XTkVSID8gIm9zOiIgOiAiZ3M6Iik7CisJCQkrK3BzaWRpZC0+cmVmY291bnQ7CisJCQlzcGluX3VubG9jayhjaWRsb2NrKTsKKwkJfQorCX0gZWxzZSB7CisJCSsrcHNpZGlkLT5yZWZjb3VudDsKKwkJc3Bpbl91bmxvY2soY2lkbG9jayk7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBhcmUgaGVyZSwgaXQgaXMgc2FmZSB0byBhY2Nlc3MgcHNpZGlkIGFuZCBpdHMgZmllbGRzCisJICogc2luY2UgYSByZWZlcmVuY2Ugd2FzIHRha2VuIGVhcmxpZXIgd2hpbGUgaG9sZGluZyB0aGUgc3BpbmxvY2suCisJICogQSByZWZlcmVuY2Ugb24gdGhlIG5vZGUgaXMgcHV0IHdpdGhvdXQgaG9sZGluZyB0aGUgc3BpbmxvY2sKKwkgKiBhbmQgaXQgaXMgT0sgdG8gZG8gc28gaW4gdGhpcyBjYXNlLCBzaHJpbmtlciB3aWxsIG5vdCBlcmFzZQorCSAqIHRoaXMgbm9kZSB1bnRpbCBhbGwgcmVmZXJlbmNlcyBhcmUgcHV0IGFuZCB3ZSBkbyBub3QgYWNjZXNzCisJICogYW55IGZpZWxkcyBvZiB0aGUgbm9kZSBhZnRlciBhIHJlZmVyZW5jZSBpcyBwdXQgLgorCSAqLworCWlmICh0ZXN0X2JpdChTSURfSURfTUFQUEVELCAmcHNpZGlkLT5zdGF0ZSkpIHsKKwkJY2lkID0gcHNpZGlkLT5pZDsKKwkJcHNpZGlkLT50aW1lID0gamlmZmllczsgLyogdXBkYXRlIHRzIGZvciBhY2Nlc3NpbmcgKi8KKwkJZ290byBzaWRfdG9faWRfb3V0OworCX0KKworCWlmICh0aW1lX2FmdGVyKHBzaWRpZC0+dGltZSArIFNJRF9NQVBfUkVUUlksIGppZmZpZXMpKQorCQlnb3RvIHNpZF90b19pZF9vdXQ7CisKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoU0lEX0lEX1BFTkRJTkcsICZwc2lkaWQtPnN0YXRlKSkgeworCQlzYXZlZF9jcmVkID0gb3ZlcnJpZGVfY3JlZHMocm9vdF9jcmVkKTsKKwkJaWRrZXkgPSByZXF1ZXN0X2tleSgmY2lmc19pZG1hcF9rZXlfdHlwZSwgcHNpZGlkLT5zaWRzdHIsICIiKTsKKwkJaWYgKElTX0VSUihpZGtleSkpCisJCQljRllJKDEsICIlczogQ2FuJ3QgbWFwIFNJRCB0byBhbiBpZCIsIF9fZnVuY19fKTsKKwkJZWxzZSB7CisJCQljaWQgPSAqKHVuc2lnbmVkIGxvbmcgKilpZGtleS0+cGF5bG9hZC52YWx1ZTsKKwkJCXBzaWRpZC0+aWQgPSBjaWQ7CisJCQlzZXRfYml0KFNJRF9JRF9NQVBQRUQsICZwc2lkaWQtPnN0YXRlKTsKKwkJCWtleV9wdXQoaWRrZXkpOworCQkJa2ZyZWUocHNpZGlkLT5zaWRzdHIpOworCQl9CisJCXJldmVydF9jcmVkcyhzYXZlZF9jcmVkKTsKKwkJcHNpZGlkLT50aW1lID0gamlmZmllczsgLyogdXBkYXRlIHRzIGZvciBhY2Nlc3NpbmcgKi8KKwkJY2xlYXJfYml0KFNJRF9JRF9QRU5ESU5HLCAmcHNpZGlkLT5zdGF0ZSk7CisJCXdha2VfdXBfYml0KCZwc2lkaWQtPnN0YXRlLCBTSURfSURfUEVORElORyk7CisJfSBlbHNlIHsKKwkJcmMgPSB3YWl0X29uX2JpdCgmcHNpZGlkLT5zdGF0ZSwgU0lEX0lEX1BFTkRJTkcsCisJCQkJc2lkaWRfcGVuZGluZ193YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOworCQlpZiAocmMpIHsKKwkJCWNGWUkoMSwgIiVzOiBzaWRpZF9wZW5kaW5nX3dhaXQgaW50ZXJydXB0ZWQgJWQiLAorCQkJCQlfX2Z1bmNfXywgcmMpOworCQkJLS1wc2lkaWQtPnJlZmNvdW50OyAvKiBkZWNyZW1lbnRlZCB3aXRob3V0IHNwaW5sb2NrICovCisJCQlyZXR1cm4gcmM7CisJCX0KKwkJaWYgKHRlc3RfYml0KFNJRF9JRF9NQVBQRUQsICZwc2lkaWQtPnN0YXRlKSkKKwkJCWNpZCA9IHBzaWRpZC0+aWQ7CisJfQorCitzaWRfdG9faWRfb3V0OgorCS0tcHNpZGlkLT5yZWZjb3VudDsgLyogZGVjcmVtZW50ZWQgd2l0aG91dCBzcGlubG9jayAqLworCWlmIChzaWR0eXBlID09IFNJRE9XTkVSKQorCQlmYXR0ci0+Y2ZfdWlkID0gY2lkOworCWVsc2UKKwkJZmF0dHItPmNmX2dpZCA9IGNpZDsKKworCXJldHVybiAwOworfQorCitpbnQKK2luaXRfY2lmc19pZG1hcCh2b2lkKQoreworCXN0cnVjdCBjcmVkICpjcmVkOworCXN0cnVjdCBrZXkgKmtleXJpbmc7CisJaW50IHJldDsKKworCWNGWUkoMSwgIlJlZ2lzdGVyaW5nIHRoZSAlcyBrZXkgdHlwZVxuIiwgY2lmc19pZG1hcF9rZXlfdHlwZS5uYW1lKTsKKworCS8qIGNyZWF0ZSBhbiBvdmVycmlkZSBjcmVkZW50aWFsIHNldCB3aXRoIGEgc3BlY2lhbCB0aHJlYWQga2V5cmluZyBpbgorCSAqIHdoaWNoIHJlcXVlc3RzIGFyZSBjYWNoZWQKKwkgKgorCSAqIHRoaXMgaXMgdXNlZCB0byBwcmV2ZW50IG1hbGljaW91cyByZWRpcmVjdGlvbnMgZnJvbSBiZWluZyBpbnN0YWxsZWQKKwkgKiB3aXRoIGFkZF9rZXkoKS4KKwkgKi8KKwljcmVkID0gcHJlcGFyZV9rZXJuZWxfY3JlZChOVUxMKTsKKwlpZiAoIWNyZWQpCisJCXJldHVybiAtRU5PTUVNOworCisJa2V5cmluZyA9IGtleV9hbGxvYygma2V5X3R5cGVfa2V5cmluZywgIi5jaWZzX2lkbWFwIiwgMCwgMCwgY3JlZCwKKwkJCSAgICAoS0VZX1BPU19BTEwgJiB+S0VZX1BPU19TRVRBVFRSKSB8CisJCQkgICAgS0VZX1VTUl9WSUVXIHwgS0VZX1VTUl9SRUFELAorCQkJICAgIEtFWV9BTExPQ19OT1RfSU5fUVVPVEEpOworCWlmIChJU19FUlIoa2V5cmluZykpIHsKKwkJcmV0ID0gUFRSX0VSUihrZXlyaW5nKTsKKwkJZ290byBmYWlsZWRfcHV0X2NyZWQ7CisJfQorCisJcmV0ID0ga2V5X2luc3RhbnRpYXRlX2FuZF9saW5rKGtleXJpbmcsIE5VTEwsIDAsIE5VTEwsIE5VTEwpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZF9wdXRfa2V5OworCisJcmV0ID0gcmVnaXN0ZXJfa2V5X3R5cGUoJmNpZnNfaWRtYXBfa2V5X3R5cGUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZF9wdXRfa2V5OworCisJLyogaW5zdHJ1Y3QgcmVxdWVzdF9rZXkoKSB0byB1c2UgdGhpcyBzcGVjaWFsIGtleXJpbmcgYXMgYSBjYWNoZSBmb3IKKwkgKiB0aGUgcmVzdWx0cyBpdCBsb29rcyB1cCAqLworCWNyZWQtPnRocmVhZF9rZXlyaW5nID0ga2V5cmluZzsKKwljcmVkLT5qaXRfa2V5cmluZyA9IEtFWV9SRVFLRVlfREVGTF9USFJFQURfS0VZUklORzsKKwlyb290X2NyZWQgPSBjcmVkOworCisJc3Bpbl9sb2NrX2luaXQoJnNpZHVpZGxvY2spOworCXVpZHRyZWUgPSBSQl9ST09UOworCXNwaW5fbG9ja19pbml0KCZzaWRnaWRsb2NrKTsKKwlnaWR0cmVlID0gUkJfUk9PVDsKKworCXJlZ2lzdGVyX3Nocmlua2VyKCZjaWZzX3Nocmlua2VyKTsKKworCWNGWUkoMSwgImNpZnMgaWRtYXAga2V5cmluZzogJWRcbiIsIGtleV9zZXJpYWwoa2V5cmluZykpOworCXJldHVybiAwOworCitmYWlsZWRfcHV0X2tleToKKwlrZXlfcHV0KGtleXJpbmcpOworZmFpbGVkX3B1dF9jcmVkOgorCXB1dF9jcmVkKGNyZWQpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQKK2V4aXRfY2lmc19pZG1hcCh2b2lkKQoreworCWtleV9yZXZva2Uocm9vdF9jcmVkLT50aHJlYWRfa2V5cmluZyk7CisJdW5yZWdpc3Rlcl9rZXlfdHlwZSgmY2lmc19pZG1hcF9rZXlfdHlwZSk7CisJcHV0X2NyZWQocm9vdF9jcmVkKTsKKwl1bnJlZ2lzdGVyX3Nocmlua2VyKCZjaWZzX3Nocmlua2VyKTsKKwljRllJKDEsICJVbnJlZ2lzdGVyZWQgJXMga2V5IHR5cGVcbiIsIGNpZnNfaWRtYXBfa2V5X3R5cGUubmFtZSk7Cit9CisKK3ZvaWQKK2NpZnNfZGVzdHJveV9pZG1hcHRyZWVzKHZvaWQpCit7CisJc3RydWN0IHJiX3Jvb3QgKnJvb3Q7CisJc3RydWN0IHJiX25vZGUgKm5vZGU7CisKKwlyb290ID0gJnVpZHRyZWU7CisJc3Bpbl9sb2NrKCZzaWR1aWRsb2NrKTsKKwl3aGlsZSAoKG5vZGUgPSByYl9maXJzdChyb290KSkpCisJCXJiX2VyYXNlKG5vZGUsIHJvb3QpOworCXNwaW5fdW5sb2NrKCZzaWR1aWRsb2NrKTsKKworCXJvb3QgPSAmZ2lkdHJlZTsKKwlzcGluX2xvY2soJnNpZGdpZGxvY2spOworCXdoaWxlICgobm9kZSA9IHJiX2ZpcnN0KHJvb3QpKSkKKwkJcmJfZXJhc2Uobm9kZSwgcm9vdCk7CisJc3Bpbl91bmxvY2soJnNpZGdpZGxvY2spOwogfQogCiAvKiBpZiB0aGUgdHdvIFNJRHMgKHJvdWdobHkgZXF1aXZhbGVudCB0byBhIFVVSUQgZm9yIGEgdXNlciBvciBncm91cCkgYXJlCkBAIC0xMDQsMTYgKzQzMSwyNCBAQAogCWludCBudW1fc3ViYXV0aCwgbnVtX3NhdCwgbnVtX3NhdzsKIAogCWlmICgoIWN0c2lkKSB8fCAoIWN3c2lkKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiAxOwogCiAJLyogY29tcGFyZSB0aGUgcmV2aXNpb24gKi8KLQlpZiAoY3RzaWQtPnJldmlzaW9uICE9IGN3c2lkLT5yZXZpc2lvbikKLQkJcmV0dXJuIDA7CisJaWYgKGN0c2lkLT5yZXZpc2lvbiAhPSBjd3NpZC0+cmV2aXNpb24pIHsKKwkJaWYgKGN0c2lkLT5yZXZpc2lvbiA+IGN3c2lkLT5yZXZpc2lvbikKKwkJCXJldHVybiAxOworCQllbHNlCisJCQlyZXR1cm4gLTE7CisJfQogCiAJLyogY29tcGFyZSBhbGwgb2YgdGhlIHNpeCBhdXRoIHZhbHVlcyAqLwogCWZvciAoaSA9IDA7IGkgPCA2OyArK2kpIHsKLQkJaWYgKGN0c2lkLT5hdXRob3JpdHlbaV0gIT0gY3dzaWQtPmF1dGhvcml0eVtpXSkKLQkJCXJldHVybiAwOworCQlpZiAoY3RzaWQtPmF1dGhvcml0eVtpXSAhPSBjd3NpZC0+YXV0aG9yaXR5W2ldKSB7CisJCQlpZiAoY3RzaWQtPmF1dGhvcml0eVtpXSA+IGN3c2lkLT5hdXRob3JpdHlbaV0pCisJCQkJcmV0dXJuIDE7CisJCQllbHNlCisJCQkJcmV0dXJuIC0xOworCQl9CiAJfQogCiAJLyogY29tcGFyZSBhbGwgb2YgdGhlIHN1YmF1dGggdmFsdWVzIGlmIGFueSAqLwpAQCAtMTIyLDEyICs0NTcsMTYgQEAKIAludW1fc3ViYXV0aCA9IG51bV9zYXQgPCBudW1fc2F3ID8gbnVtX3NhdCA6IG51bV9zYXc7CiAJaWYgKG51bV9zdWJhdXRoKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBudW1fc3ViYXV0aDsgKytpKSB7Ci0JCQlpZiAoY3RzaWQtPnN1Yl9hdXRoW2ldICE9IGN3c2lkLT5zdWJfYXV0aFtpXSkKLQkJCQlyZXR1cm4gMDsKKwkJCWlmIChjdHNpZC0+c3ViX2F1dGhbaV0gIT0gY3dzaWQtPnN1Yl9hdXRoW2ldKSB7CisJCQkJaWYgKGN0c2lkLT5zdWJfYXV0aFtpXSA+IGN3c2lkLT5zdWJfYXV0aFtpXSkKKwkJCQkJcmV0dXJuIDE7CisJCQkJZWxzZQorCQkJCQlyZXR1cm4gLTE7CisJCQl9CiAJCX0KIAl9CiAKLQlyZXR1cm4gMTsgLyogc2lkcyBjb21wYXJlL21hdGNoICovCisJcmV0dXJuIDA7IC8qIHNpZHMgY29tcGFyZS9tYXRjaCAqLwogfQogCiAKQEAgLTM4MiwyMiArNzIxLDIyIEBACiAjaWZkZWYgQ09ORklHX0NJRlNfREVCVUcyCiAJCQlkdW1wX2FjZShwcGFjZVtpXSwgZW5kX29mX2FjbCk7CiAjZW5kaWYKLQkJCWlmIChjb21wYXJlX3NpZHMoJihwcGFjZVtpXS0+c2lkKSwgcG93bmVyc2lkKSkKKwkJCWlmIChjb21wYXJlX3NpZHMoJihwcGFjZVtpXS0+c2lkKSwgcG93bmVyc2lkKSA9PSAwKQogCQkJCWFjY2Vzc19mbGFnc190b19tb2RlKHBwYWNlW2ldLT5hY2Nlc3NfcmVxLAogCQkJCQkJICAgICBwcGFjZVtpXS0+dHlwZSwKIAkJCQkJCSAgICAgJmZhdHRyLT5jZl9tb2RlLAogCQkJCQkJICAgICAmdXNlcl9tYXNrKTsKLQkJCWlmIChjb21wYXJlX3NpZHMoJihwcGFjZVtpXS0+c2lkKSwgcGdycHNpZCkpCisJCQlpZiAoY29tcGFyZV9zaWRzKCYocHBhY2VbaV0tPnNpZCksIHBncnBzaWQpID09IDApCiAJCQkJYWNjZXNzX2ZsYWdzX3RvX21vZGUocHBhY2VbaV0tPmFjY2Vzc19yZXEsCiAJCQkJCQkgICAgIHBwYWNlW2ldLT50eXBlLAogCQkJCQkJICAgICAmZmF0dHItPmNmX21vZGUsCiAJCQkJCQkgICAgICZncm91cF9tYXNrKTsKLQkJCWlmIChjb21wYXJlX3NpZHMoJihwcGFjZVtpXS0+c2lkKSwgJnNpZF9ldmVyeW9uZSkpCisJCQlpZiAoY29tcGFyZV9zaWRzKCYocHBhY2VbaV0tPnNpZCksICZzaWRfZXZlcnlvbmUpID09IDApCiAJCQkJYWNjZXNzX2ZsYWdzX3RvX21vZGUocHBhY2VbaV0tPmFjY2Vzc19yZXEsCiAJCQkJCQkgICAgIHBwYWNlW2ldLT50eXBlLAogCQkJCQkJICAgICAmZmF0dHItPmNmX21vZGUsCiAJCQkJCQkgICAgICZvdGhlcl9tYXNrKTsKLQkJCWlmIChjb21wYXJlX3NpZHMoJihwcGFjZVtpXS0+c2lkKSwgJnNpZF9hdXRodXNlcnMpKQorCQkJaWYgKGNvbXBhcmVfc2lkcygmKHBwYWNlW2ldLT5zaWQpLCAmc2lkX2F1dGh1c2VycykgPT0gMCkKIAkJCQlhY2Nlc3NfZmxhZ3NfdG9fbW9kZShwcGFjZVtpXS0+YWNjZXNzX3JlcSwKIAkJCQkJCSAgICAgcHBhY2VbaV0tPnR5cGUsCiAJCQkJCQkgICAgICZmYXR0ci0+Y2ZfbW9kZSwKQEAgLTQ3NSwxMCArODE0LDEwIEBACiAKIAogLyogQ29udmVydCBDSUZTIEFDTCB0byBQT1NJWCBmb3JtICovCi1zdGF0aWMgaW50IHBhcnNlX3NlY19kZXNjKHN0cnVjdCBjaWZzX250c2QgKnBudHNkLCBpbnQgYWNsX2xlbiwKLQkJCSAgc3RydWN0IGNpZnNfZmF0dHIgKmZhdHRyKQorc3RhdGljIGludCBwYXJzZV9zZWNfZGVzYyhzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiLAorCQlzdHJ1Y3QgY2lmc19udHNkICpwbnRzZCwgaW50IGFjbF9sZW4sIHN0cnVjdCBjaWZzX2ZhdHRyICpmYXR0cikKIHsKLQlpbnQgcmM7CisJaW50IHJjID0gMDsKIAlzdHJ1Y3QgY2lmc19zaWQgKm93bmVyX3NpZF9wdHIsICpncm91cF9zaWRfcHRyOwogCXN0cnVjdCBjaWZzX2FjbCAqZGFjbF9wdHI7IC8qIG5vIG5lZWQgZm9yIFNBQ0wgcHRyICovCiAJY2hhciAqZW5kX29mX2FjbCA9ICgoY2hhciAqKXBudHNkKSArIGFjbF9sZW47CkBAIC01MDAsMTIgKzgzOSwyNiBAQAogCQkgbGUzMl90b19jcHUocG50c2QtPnNhY2xvZmZzZXQpLCBkYWNsb2Zmc2V0KTsKIC8qCWNpZnNfZHVtcF9tZW0oIm93bmVyX3NpZDogIiwgb3duZXJfc2lkX3B0ciwgNjQpOyAqLwogCXJjID0gcGFyc2Vfc2lkKG93bmVyX3NpZF9wdHIsIGVuZF9vZl9hY2wpOwotCWlmIChyYykKKwlpZiAocmMpIHsKKwkJY0ZZSSgxLCAiJXM6IEVycm9yICVkIHBhcnNpbmcgT3duZXIgU0lEIiwgX19mdW5jX18sIHJjKTsKIAkJcmV0dXJuIHJjOworCX0KKwlyYyA9IHNpZF90b19pZChjaWZzX3NiLCBvd25lcl9zaWRfcHRyLCBmYXR0ciwgU0lET1dORVIpOworCWlmIChyYykgeworCQljRllJKDEsICIlczogRXJyb3IgJWQgbWFwcGluZyBPd25lciBTSUQgdG8gdWlkIiwgX19mdW5jX18sIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KIAogCXJjID0gcGFyc2Vfc2lkKGdyb3VwX3NpZF9wdHIsIGVuZF9vZl9hY2wpOwotCWlmIChyYykKKwlpZiAocmMpIHsKKwkJY0ZZSSgxLCAiJXM6IEVycm9yICVkIG1hcHBpbmcgT3duZXIgU0lEIHRvIGdpZCIsIF9fZnVuY19fLCByYyk7CiAJCXJldHVybiByYzsKKwl9CisJcmMgPSBzaWRfdG9faWQoY2lmc19zYiwgZ3JvdXBfc2lkX3B0ciwgZmF0dHIsIFNJREdST1VQKTsKKwlpZiAocmMpIHsKKwkJY0ZZSSgxLCAiJXM6IEVycm9yICVkIG1hcHBpbmcgR3JvdXAgU0lEIHRvIGdpZCIsIF9fZnVuY19fLCByYyk7CisJCXJldHVybiByYzsKKwl9CiAKIAlpZiAoZGFjbG9mZnNldCkKIAkJcGFyc2VfZGFjbChkYWNsX3B0ciwgZW5kX29mX2FjbCwgb3duZXJfc2lkX3B0ciwKQEAgLTUyMCw3ICs4NzMsNyBAQAogCW1lbWNweSgodm9pZCAqKSgmKGNpZnNjcmVkLT5nc2lkKSksICh2b2lkICopZ3JvdXBfc2lkX3B0ciwKIAkJCXNpemVvZihzdHJ1Y3QgY2lmc19zaWQpKTsgKi8KIAotCXJldHVybiAwOworCXJldHVybiByYzsKIH0KIAogCkBAIC02ODgsNyArMTA0MSw3IEBACiB9CiAKIC8qIFNldCBhbiBBQ0wgb24gdGhlIHNlcnZlciAqLwotc3RhdGljIGludCBzZXRfY2lmc19hY2woc3RydWN0IGNpZnNfbnRzZCAqcG5udHNkLCBfX3UzMiBhY2xsZW4sCitpbnQgc2V0X2NpZnNfYWNsKHN0cnVjdCBjaWZzX250c2QgKnBubnRzZCwgX191MzIgYWNsbGVuLAogCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKnBhdGgpCiB7CiAJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiA9IENJRlNfU0IoaW5vZGUtPmlfc2IpOwpAQCAtNzI3LDcgKzEwODAsNyBAQAogCQlyYyA9IFBUUl9FUlIocG50c2QpOwogCQljRVJST1IoMSwgIiVzOiBlcnJvciAlZCBnZXR0aW5nIHNlYyBkZXNjIiwgX19mdW5jX18sIHJjKTsKIAl9IGVsc2UgewotCQlyYyA9IHBhcnNlX3NlY19kZXNjKHBudHNkLCBhY2xsZW4sIGZhdHRyKTsKKwkJcmMgPSBwYXJzZV9zZWNfZGVzYyhjaWZzX3NiLCBwbnRzZCwgYWNsbGVuLCBmYXR0cik7CiAJCWtmcmVlKHBudHNkKTsKIAkJaWYgKHJjKQogCQkJY0VSUk9SKDEsICJwYXJzZSBzZWMgZGVzYyBmYWlsZWQgcmMgPSAlZCIsIHJjKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2FjbC5oIGIvZnMvY2lmcy9jaWZzYWNsLmgKaW5kZXggYzRhZTdkMC4uNWM5MDJjNyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzYWNsLmgKKysrIGIvZnMvY2lmcy9jaWZzYWNsLmgKQEAgLTM5LDYgKzM5LDE1IEBACiAjZGVmaW5lIEFDQ0VTU19BTExPV0VECTAKICNkZWZpbmUgQUNDRVNTX0RFTklFRAkxCiAKKyNkZWZpbmUgU0lET1dORVIgMQorI2RlZmluZSBTSURHUk9VUCAyCisjZGVmaW5lIFNJRExFTiAxNTAgLyogUy0gMSByZXZpc2lvbi0gNiBhdXRob3JpdGllcy0gbWF4IDUgc3ViIGF1dGhvcml0aWVzICovCisKKyNkZWZpbmUgU0lEX0lEX01BUFBFRCAwCisjZGVmaW5lIFNJRF9JRF9QRU5ESU5HIDEKKyNkZWZpbmUgU0lEX01BUF9FWFBJUkUgKDM2MDAgKiBIWikgLyogbWFwIGVudHJ5IGV4cGlyZXMgYWZ0ZXIgb25lIGhvdXIgKi8KKyNkZWZpbmUgU0lEX01BUF9SRVRSWSAoMzAwICogSFopICAgLyogd2FpdCA1IG1pbnV0ZXMgZm9yIG5leHQgYXR0ZW1wdCB0byBtYXAgKi8KKwogc3RydWN0IGNpZnNfbnRzZCB7CiAJX19sZTE2IHJldmlzaW9uOyAvKiByZXZpc2lvbiBsZXZlbCAqLwogCV9fbGUxNiB0eXBlOwpAQCAtNzQsNyArODMsMjEgQEAKIAljaGFyIHNpZG5hbWVbU0lETkFNRUxFTkdUSF07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCi1leHRlcm4gaW50IG1hdGNoX3NpZChzdHJ1Y3QgY2lmc19zaWQgKik7CitzdHJ1Y3QgY2lmc19zaWRfaWQgeworCXVuc2lnbmVkIGludCByZWZjb3VudDsgLyogaW5jcmVtZW50IHdpdGggc3BpbmxvY2ssIGRlY3JlbWVudCB3aXRob3V0ICovCisJdW5zaWduZWQgbG9uZyBpZDsKKwl1bnNpZ25lZCBsb25nIHRpbWU7CisJdW5zaWduZWQgbG9uZyBzdGF0ZTsKKwljaGFyICpzaWRzdHI7CisJc3RydWN0IHJiX25vZGUgcmJub2RlOworCXN0cnVjdCBjaWZzX3NpZCBzaWQ7Cit9OworCisjaWZkZWYgX19LRVJORUxfXworZXh0ZXJuIHN0cnVjdCBrZXlfdHlwZSBjaWZzX2lkbWFwX2tleV90eXBlOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjcmVkICpyb290X2NyZWQ7CisjZW5kaWYgLyogS0VSTkVMICovCisKIGV4dGVybiBpbnQgY29tcGFyZV9zaWRzKGNvbnN0IHN0cnVjdCBjaWZzX3NpZCAqLCBjb25zdCBzdHJ1Y3QgY2lmc19zaWQgKik7CiAKICNlbmRpZiAvKiBfQ0lGU0FDTF9IICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNlbmNyeXB0LmMgYi9mcy9jaWZzL2NpZnNlbmNyeXB0LmMKaW5kZXggZDFhMDE2Yi4uNDVjM2Y3OCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZW5jcnlwdC5jCisrKyBiL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYwpAQCAtNjAsNyArNjAsNyBAQAogCQlzZXJ2ZXItPnNlc3Npb25fa2V5LnJlc3BvbnNlLCBzZXJ2ZXItPnNlc3Npb25fa2V5Lmxlbik7CiAKIAljcnlwdG9fc2hhc2hfdXBkYXRlKCZzZXJ2ZXItPnNlY21lY2guc2Rlc2NtZDUtPnNoYXNoLAotCQljaWZzX3BkdS0+UHJvdG9jb2wsIGNpZnNfcGR1LT5zbWJfYnVmX2xlbmd0aCk7CisJCWNpZnNfcGR1LT5Qcm90b2NvbCwgYmUzMl90b19jcHUoY2lmc19wZHUtPnNtYl9idWZfbGVuZ3RoKSk7CiAKIAlyYyA9IGNyeXB0b19zaGFzaF9maW5hbCgmc2VydmVyLT5zZWNtZWNoLnNkZXNjbWQ1LT5zaGFzaCwgc2lnbmF0dXJlKTsKIApAQCAtMjY4LDEwICsyNjgsMTEgQEAKIH0KIAogI2lmZGVmIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSAotdm9pZCBjYWxjX2xhbm1hbl9oYXNoKGNvbnN0IGNoYXIgKnBhc3N3b3JkLCBjb25zdCBjaGFyICpjcnlwdGtleSwgYm9vbCBlbmNyeXB0LAoraW50IGNhbGNfbGFubWFuX2hhc2goY29uc3QgY2hhciAqcGFzc3dvcmQsIGNvbnN0IGNoYXIgKmNyeXB0a2V5LCBib29sIGVuY3J5cHQsCiAJCQljaGFyICpsbm1fc2Vzc2lvbl9rZXkpCiB7CiAJaW50IGk7CisJaW50IHJjOwogCWNoYXIgcGFzc3dvcmRfd2l0aF9wYWRbQ0lGU19FTkNQV0RfU0laRV07CiAKIAltZW1zZXQocGFzc3dvcmRfd2l0aF9wYWQsIDAsIENJRlNfRU5DUFdEX1NJWkUpOwpAQCAtMjgyLDcgKzI4Myw3IEBACiAJCW1lbXNldChsbm1fc2Vzc2lvbl9rZXksIDAsIENJRlNfU0VTU19LRVlfU0laRSk7CiAJCW1lbWNweShsbm1fc2Vzc2lvbl9rZXksIHBhc3N3b3JkX3dpdGhfcGFkLAogCQkJQ0lGU19FTkNQV0RfU0laRSk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAJfQogCiAJLyogY2FsY3VsYXRlIG9sZCBzdHlsZSBzZXNzaW9uIGtleSAqLwpAQCAtMjk5LDEwICszMDAsOSBAQAogCWZvciAoaSA9IDA7IGkgPCBDSUZTX0VOQ1BXRF9TSVpFOyBpKyspCiAJCXBhc3N3b3JkX3dpdGhfcGFkW2ldID0gdG91cHBlcihwYXNzd29yZF93aXRoX3BhZFtpXSk7CiAKLQlTTUJlbmNyeXB0KHBhc3N3b3JkX3dpdGhfcGFkLCBjcnlwdGtleSwgbG5tX3Nlc3Npb25fa2V5KTsKKwlyYyA9IFNNQmVuY3J5cHQocGFzc3dvcmRfd2l0aF9wYWQsIGNyeXB0a2V5LCBsbm1fc2Vzc2lvbl9rZXkpOwogCi0JLyogY2xlYXIgcGFzc3dvcmQgYmVmb3JlIHdlIHJldHVybi9mcmVlIG1lbW9yeSAqLwotCW1lbXNldChwYXNzd29yZF93aXRoX3BhZCwgMCwgQ0lGU19FTkNQV0RfU0laRSk7CisJcmV0dXJuIHJjOwogfQogI2VuZGlmIC8qIENJRlNfV0VBS19QV19IQVNIICovCiAKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2ZzLmMgYi9mcy9jaWZzL2NpZnNmcy5jCmluZGV4IDVjNDEyYjMuLjQ5M2I3NGMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2ZzLmMKKysrIGIvZnMvY2lmcy9jaWZzZnMuYwpAQCAtMTI4LDI5ICsxMjgsMjIgQEAKIAl9CiAJY2lmc19zYi0+YmRpLnJhX3BhZ2VzID0gZGVmYXVsdF9iYWNraW5nX2Rldl9pbmZvLnJhX3BhZ2VzOwogCi0jaWZkZWYgQ09ORklHX0NJRlNfREZTX1VQQ0FMTAotCS8qIGNvcHkgbW91bnQgcGFyYW1zIHRvIHNiIGZvciB1c2UgaW4gc3VibW91bnRzICovCi0JLyogQkI6IHNob3VsZCB3ZSBtb3ZlIHRoaXMgYWZ0ZXIgdGhlIG1vdW50IHNvIHdlCi0JICogZG8gbm90IGhhdmUgdG8gZG8gdGhlIGNvcHkgb24gZmFpbGVkIG1vdW50cz8KLQkgKiBCQjogTWF5IGJlIGl0IGlzIGJldHRlciB0byBkbyBzaW1wbGUgY29weSBiZWZvcmUKLQkgKiBjb21wbGV4IG9wZXJhdGlvbiAobW91bnQpLCBhbmQgaW4gY2FzZSBvZiBmYWlsCi0JICoganVzdCBleGl0IGluc3RlYWQgb2YgZG9pbmcgbW91bnQgYW5kIGF0dGVtcHRpbmcKLQkgKiB1bmRvIGl0IGlmIHRoaXMgY29weSBmYWlscz8qLworCS8qCisJICogQ29weSBtb3VudCBwYXJhbXMgdG8gc2IgZm9yIHVzZSBpbiBzdWJtb3VudHMuIEJldHRlciB0byBkbworCSAqIHRoZSBjb3B5IGhlcmUgYW5kIGRlYWwgd2l0aCB0aGUgZXJyb3IgYmVmb3JlIGNsZWFudXAgZ2V0cworCSAqIGNvbXBsaWNhdGVkIHBvc3QtbW91bnQuCisJICovCiAJaWYgKGRhdGEpIHsKLQkJaW50IGxlbiA9IHN0cmxlbihkYXRhKTsKLQkJY2lmc19zYi0+bW91bnRkYXRhID0ga3phbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTsKKwkJY2lmc19zYi0+bW91bnRkYXRhID0ga3N0cm5kdXAoZGF0YSwgUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKIAkJaWYgKGNpZnNfc2ItPm1vdW50ZGF0YSA9PSBOVUxMKSB7CiAJCQliZGlfZGVzdHJveSgmY2lmc19zYi0+YmRpKTsKIAkJCWtmcmVlKHNiLT5zX2ZzX2luZm8pOwogCQkJc2ItPnNfZnNfaW5mbyA9IE5VTEw7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQotCQlzdHJuY3B5KGNpZnNfc2ItPm1vdW50ZGF0YSwgZGF0YSwgbGVuICsgMSk7Ci0JCWNpZnNfc2ItPm1vdW50ZGF0YVtsZW5dID0gJ1wwJzsKIAl9Ci0jZW5kaWYKIAotCXJjID0gY2lmc19tb3VudChzYiwgY2lmc19zYiwgZGF0YSwgZGV2bmFtZSk7CisJcmMgPSBjaWZzX21vdW50KHNiLCBjaWZzX3NiLCBkZXZuYW1lKTsKIAogCWlmIChyYykgewogCQlpZiAoIXNpbGVudCkKQEAgLTE2Myw3ICsxNTYsNyBAQAogCXNiLT5zX2JkaSA9ICZjaWZzX3NiLT5iZGk7CiAJc2ItPnNfYmxvY2tzaXplID0gQ0lGU19NQVhfTVNHU0laRTsKIAlzYi0+c19ibG9ja3NpemVfYml0cyA9IDE0OwkvKiBkZWZhdWx0IDIqKjE0ID0gQ0lGU19NQVhfTVNHU0laRSAqLwotCWlub2RlID0gY2lmc19yb290X2lnZXQoc2IsIFJPT1RfSSk7CisJaW5vZGUgPSBjaWZzX3Jvb3RfaWdldChzYik7CiAKIAlpZiAoSVNfRVJSKGlub2RlKSkgewogCQlyYyA9IFBUUl9FUlIoaW5vZGUpOwpAQCAtMTg0LDEyICsxNzcsMTIgQEAKIAllbHNlCiAJCXNiLT5zX2Rfb3AgPSAmY2lmc19kZW50cnlfb3BzOwogCi0jaWZkZWYgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMCisjaWZkZWYgQ0lGU19ORlNEX0VYUE9SVAogCWlmIChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfU0VSVkVSX0lOVU0pIHsKIAkJY0ZZSSgxLCAiZXhwb3J0IG9wcyBzdXBwb3J0ZWQiKTsKIAkJc2ItPnNfZXhwb3J0X29wID0gJmNpZnNfZXhwb3J0X29wczsKIAl9Ci0jZW5kaWYgLyogRVhQRVJJTUVOVEFMICovCisjZW5kaWYgLyogQ0lGU19ORlNEX0VYUE9SVCAqLwogCiAJcmV0dXJuIDA7CiAKQEAgLTIwMiwxMiArMTk1LDEwIEBACiAKIG91dF9tb3VudF9mYWlsZWQ6CiAJaWYgKGNpZnNfc2IpIHsKLSNpZmRlZiBDT05GSUdfQ0lGU19ERlNfVVBDQUxMCiAJCWlmIChjaWZzX3NiLT5tb3VudGRhdGEpIHsKIAkJCWtmcmVlKGNpZnNfc2ItPm1vdW50ZGF0YSk7CiAJCQljaWZzX3NiLT5tb3VudGRhdGEgPSBOVUxMOwogCQl9Ci0jZW5kaWYKIAkJdW5sb2FkX25scyhjaWZzX3NiLT5sb2NhbF9ubHMpOwogCQliZGlfZGVzdHJveSgmY2lmc19zYi0+YmRpKTsKIAkJa2ZyZWUoY2lmc19zYik7CkBAIC0yMzEsMTIgKzIyMiwxMCBAQAogCXJjID0gY2lmc191bW91bnQoc2IsIGNpZnNfc2IpOwogCWlmIChyYykKIAkJY0VSUk9SKDEsICJjaWZzX3Vtb3VudCBmYWlsZWQgd2l0aCByZXR1cm4gY29kZSAlZCIsIHJjKTsKLSNpZmRlZiBDT05GSUdfQ0lGU19ERlNfVVBDQUxMCiAJaWYgKGNpZnNfc2ItPm1vdW50ZGF0YSkgewogCQlrZnJlZShjaWZzX3NiLT5tb3VudGRhdGEpOwogCQljaWZzX3NiLT5tb3VudGRhdGEgPSBOVUxMOwogCX0KLSNlbmRpZgogCiAJdW5sb2FkX25scyhjaWZzX3NiLT5sb2NhbF9ubHMpOwogCWJkaV9kZXN0cm95KCZjaWZzX3NiLT5iZGkpOwpAQCAtNjE4LDE2ICs2MDcsMzEgQEAKIHsKIAkvKiBvcmlnaW4gPT0gU0VFS19FTkQgPT4gd2UgbXVzdCByZXZhbGlkYXRlIHRoZSBjYWNoZWQgZmlsZSBsZW5ndGggKi8KIAlpZiAob3JpZ2luID09IFNFRUtfRU5EKSB7Ci0JCWludCByZXR2YWw7CisJCWludCByYzsKKwkJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAKLQkJLyogc29tZSBhcHBsaWNhdGlvbnMgcG9sbCBmb3IgdGhlIGZpbGUgbGVuZ3RoIGluIHRoaXMgc3RyYW5nZQotCQkgICB3YXkgc28gd2UgbXVzdCBzZWVrIHRvIGVuZCBvbiBub24tb3Bsb2NrZWQgZmlsZXMgYnkKLQkJICAgc2V0dGluZyB0aGUgcmV2YWxpZGF0ZSB0aW1lIHRvIHplcm8gKi8KLQkJQ0lGU19JKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpLT50aW1lID0gMDsKKwkJLyoKKwkJICogV2UgbmVlZCB0byBiZSBzdXJlIHRoYXQgYWxsIGRpcnR5IHBhZ2VzIGFyZSB3cml0dGVuIGFuZCB0aGUKKwkJICogc2VydmVyIGhhcyB0aGUgbmV3ZXN0IGZpbGUgbGVuZ3RoLgorCQkgKi8KKwkJaWYgKCFDSUZTX0koaW5vZGUpLT5jbGllbnRDYW5DYWNoZVJlYWQgJiYgaW5vZGUtPmlfbWFwcGluZyAmJgorCQkgICAgaW5vZGUtPmlfbWFwcGluZy0+bnJwYWdlcyAhPSAwKSB7CisJCQlyYyA9IGZpbGVtYXBfZmRhdGF3YWl0KGlub2RlLT5pX21hcHBpbmcpOworCQkJaWYgKHJjKSB7CisJCQkJbWFwcGluZ19zZXRfZXJyb3IoaW5vZGUtPmlfbWFwcGluZywgcmMpOworCQkJCXJldHVybiByYzsKKwkJCX0KKwkJfQorCQkvKgorCQkgKiBTb21lIGFwcGxpY2F0aW9ucyBwb2xsIGZvciB0aGUgZmlsZSBsZW5ndGggaW4gdGhpcyBzdHJhbmdlCisJCSAqIHdheSBzbyB3ZSBtdXN0IHNlZWsgdG8gZW5kIG9uIG5vbi1vcGxvY2tlZCBmaWxlcyBieQorCQkgKiBzZXR0aW5nIHRoZSByZXZhbGlkYXRlIHRpbWUgdG8gemVyby4KKwkJICovCisJCUNJRlNfSShpbm9kZSktPnRpbWUgPSAwOwogCi0JCXJldHZhbCA9IGNpZnNfcmV2YWxpZGF0ZV9maWxlKGZpbGUpOwotCQlpZiAocmV0dmFsIDwgMCkKLQkJCXJldHVybiAobG9mZl90KXJldHZhbDsKKwkJcmMgPSBjaWZzX3JldmFsaWRhdGVfZmlsZV9hdHRyKGZpbGUpOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIChsb2ZmX3QpcmM7CiAJfQogCXJldHVybiBnZW5lcmljX2ZpbGVfbGxzZWVrX3VubG9ja2VkKGZpbGUsIG9mZnNldCwgb3JpZ2luKTsKIH0KQEAgLTc2MCwxMCArNzY0LDExIEBACiB9OwogCiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNpZnNfZmlsZV9kaXJlY3Rfb3BzID0gewotCS8qIG5vIGFpbywgbm8gcmVhZHYgLQotCSAgIEJCIHJlZXZhbHVhdGUgd2hldGhlciB0aGV5IGNhbiBiZSBkb25lIHdpdGggZGlyZWN0aW8sIG5vIGNhY2hlICovCi0JLnJlYWQgPSBjaWZzX3VzZXJfcmVhZCwKLQkud3JpdGUgPSBjaWZzX3VzZXJfd3JpdGUsCisJLyogQkIgcmVldmFsdWF0ZSB3aGV0aGVyIHRoZXkgY2FuIGJlIGRvbmUgd2l0aCBkaXJlY3Rpbywgbm8gY2FjaGUgKi8KKwkucmVhZCA9IGRvX3N5bmNfcmVhZCwKKwkud3JpdGUgPSBkb19zeW5jX3dyaXRlLAorCS5haW9fcmVhZCA9IGNpZnNfdXNlcl9yZWFkdiwKKwkuYWlvX3dyaXRlID0gY2lmc191c2VyX3dyaXRldiwKIAkub3BlbiA9IGNpZnNfb3BlbiwKIAkucmVsZWFzZSA9IGNpZnNfY2xvc2UsCiAJLmxvY2sgPSBjaWZzX2xvY2ssCkBAIC04MTUsMTAgKzgyMCwxMSBAQAogfTsKIAogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjaWZzX2ZpbGVfZGlyZWN0X25vYnJsX29wcyA9IHsKLQkvKiBubyBtbWFwLCBubyBhaW8sIG5vIHJlYWR2IC0KLQkgICBCQiByZWV2YWx1YXRlIHdoZXRoZXIgdGhleSBjYW4gYmUgZG9uZSB3aXRoIGRpcmVjdGlvLCBubyBjYWNoZSAqLwotCS5yZWFkID0gY2lmc191c2VyX3JlYWQsCi0JLndyaXRlID0gY2lmc191c2VyX3dyaXRlLAorCS8qIEJCIHJlZXZhbHVhdGUgd2hldGhlciB0aGV5IGNhbiBiZSBkb25lIHdpdGggZGlyZWN0aW8sIG5vIGNhY2hlICovCisJLnJlYWQgPSBkb19zeW5jX3JlYWQsCisJLndyaXRlID0gZG9fc3luY193cml0ZSwKKwkuYWlvX3JlYWQgPSBjaWZzX3VzZXJfcmVhZHYsCisJLmFpb193cml0ZSA9IGNpZnNfdXNlcl93cml0ZXYsCiAJLm9wZW4gPSBjaWZzX29wZW4sCiAJLnJlbGVhc2UgPSBjaWZzX2Nsb3NlLAogCS5mc3luYyA9IGNpZnNfZnN5bmMsCkBAIC05ODEsMTAgKzk4NywxMCBAQAogCWludCByYyA9IDA7CiAJY2lmc19wcm9jX2luaXQoKTsKIAlJTklUX0xJU1RfSEVBRCgmY2lmc190Y3Bfc2VzX2xpc3QpOwotI2lmZGVmIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTAorI2lmZGVmIENPTkZJR19DSUZTX0ROT1RJRllfRVhQRVJJTUVOVEFMIC8qIHVudXNlZCB0ZW1wb3JhcmlseSAqLwogCUlOSVRfTElTVF9IRUFEKCZHbG9iYWxEbm90aWZ5UmVxTGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJkdsb2JhbERub3RpZnlSc3BfUSk7Ci0jZW5kaWYKKyNlbmRpZiAvKiB3YXMgbmVlZGVkIGZvciBkbm90aWZ5LCBhbmQgd2lsbCBiZSBuZWVkZWQgZm9yIGlub3RpZnkgd2hlbiBWRlMgZml4ICovCiAvKgogICogIEluaXRpYWxpemUgR2xvYmFsIGNvdW50ZXJzCiAgKi8KQEAgLTEwMzMsMjIgKzEwMzksMzMgQEAKIAlpZiAocmMpCiAJCWdvdG8gb3V0X2Rlc3Ryb3lfbWlkczsKIAotCXJjID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmY2lmc19mc190eXBlKTsKLQlpZiAocmMpCi0JCWdvdG8gb3V0X2Rlc3Ryb3lfcmVxdWVzdF9idWZzOwogI2lmZGVmIENPTkZJR19DSUZTX1VQQ0FMTAogCXJjID0gcmVnaXN0ZXJfa2V5X3R5cGUoJmNpZnNfc3BuZWdvX2tleV90eXBlKTsKIAlpZiAocmMpCi0JCWdvdG8gb3V0X3VucmVnaXN0ZXJfZmlsZXN5c3RlbTsKLSNlbmRpZgorCQlnb3RvIG91dF9kZXN0cm95X3JlcXVlc3RfYnVmczsKKyNlbmRpZiAvKiBDT05GSUdfQ0lGU19VUENBTEwgKi8KKworI2lmZGVmIENPTkZJR19DSUZTX0FDTAorCXJjID0gaW5pdF9jaWZzX2lkbWFwKCk7CisJaWYgKHJjKQorCQlnb3RvIG91dF9yZWdpc3Rlcl9rZXlfdHlwZTsKKyNlbmRpZiAvKiBDT05GSUdfQ0lGU19BQ0wgKi8KKworCXJjID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmY2lmc19mc190eXBlKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0X2luaXRfY2lmc19pZG1hcDsKIAogCXJldHVybiAwOwogCi0jaWZkZWYgQ09ORklHX0NJRlNfVVBDQUxMCi1vdXRfdW5yZWdpc3Rlcl9maWxlc3lzdGVtOgotCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmY2lmc19mc190eXBlKTsKK291dF9pbml0X2NpZnNfaWRtYXA6CisjaWZkZWYgQ09ORklHX0NJRlNfQUNMCisJZXhpdF9jaWZzX2lkbWFwKCk7CitvdXRfcmVnaXN0ZXJfa2V5X3R5cGU6CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQ0lGU19VUENBTEwKKwl1bnJlZ2lzdGVyX2tleV90eXBlKCZjaWZzX3NwbmVnb19rZXlfdHlwZSk7CiBvdXRfZGVzdHJveV9yZXF1ZXN0X2J1ZnM6CisjZW5kaWYKIAljaWZzX2Rlc3Ryb3lfcmVxdWVzdF9idWZzKCk7CiBvdXRfZGVzdHJveV9taWRzOgogCWNpZnNfZGVzdHJveV9taWRzKCk7CkBAIC0xMDcwLDYgKzEwODcsMTAgQEAKICNpZmRlZiBDT05GSUdfQ0lGU19ERlNfVVBDQUxMCiAJY2lmc19kZnNfcmVsZWFzZV9hdXRvbW91bnRfdGltZXIoKTsKICNlbmRpZgorI2lmZGVmIENPTkZJR19DSUZTX0FDTAorCWNpZnNfZGVzdHJveV9pZG1hcHRyZWVzKCk7CisJZXhpdF9jaWZzX2lkbWFwKCk7CisjZW5kaWYKICNpZmRlZiBDT05GSUdfQ0lGU19VUENBTEwKIAl1bnJlZ2lzdGVyX2tleV90eXBlKCZjaWZzX3NwbmVnb19rZXlfdHlwZSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2ZzLmggYi9mcy9jaWZzL2NpZnNmcy5oCmluZGV4IGE5MzcxYjYuLjY0MzEzZjcgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2ZzLmgKKysrIGIvZnMvY2lmcy9jaWZzZnMuaApAQCAtNDcsNyArNDcsNyBAQAogCiAvKiBGdW5jdGlvbnMgcmVsYXRlZCB0byBpbm9kZXMgKi8KIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBjaWZzX2Rpcl9pbm9kZV9vcHM7Ci1leHRlcm4gc3RydWN0IGlub2RlICpjaWZzX3Jvb3RfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gc3RydWN0IGlub2RlICpjaWZzX3Jvb3RfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CiBleHRlcm4gaW50IGNpZnNfY3JlYXRlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIGludCwKIAkJICAgICAgIHN0cnVjdCBuYW1laWRhdGEgKik7CiBleHRlcm4gc3RydWN0IGRlbnRyeSAqY2lmc19sb29rdXAoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwKQEAgLTU5LDkgKzU5LDExIEBACiBleHRlcm4gaW50IGNpZnNfcm1kaXIoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKik7CiBleHRlcm4gaW50IGNpZnNfcmVuYW1lKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpbm9kZSAqLAogCQkgICAgICAgc3RydWN0IGRlbnRyeSAqKTsKK2V4dGVybiBpbnQgY2lmc19yZXZhbGlkYXRlX2ZpbGVfYXR0cihzdHJ1Y3QgZmlsZSAqZmlscCk7CitleHRlcm4gaW50IGNpZnNfcmV2YWxpZGF0ZV9kZW50cnlfYXR0cihzdHJ1Y3QgZGVudHJ5ICopOwogZXh0ZXJuIGludCBjaWZzX3JldmFsaWRhdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlscCk7CiBleHRlcm4gaW50IGNpZnNfcmV2YWxpZGF0ZV9kZW50cnkoc3RydWN0IGRlbnRyeSAqKTsKLWV4dGVybiB2b2lkIGNpZnNfaW52YWxpZGF0ZV9tYXBwaW5nKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworZXh0ZXJuIGludCBjaWZzX2ludmFsaWRhdGVfbWFwcGluZyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGV4dGVybiBpbnQgY2lmc19nZXRhdHRyKHN0cnVjdCB2ZnNtb3VudCAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBrc3RhdCAqKTsKIGV4dGVybiBpbnQgY2lmc19zZXRhdHRyKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlhdHRyICopOwogCkBAIC04MCwxMiArODIsMTIgQEAKIGV4dGVybiBpbnQgY2lmc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKIGV4dGVybiBpbnQgY2lmc19jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBleHRlcm4gaW50IGNpZnNfY2xvc2VkaXIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwotZXh0ZXJuIHNzaXplX3QgY2lmc191c2VyX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpyZWFkX2RhdGEsCi0JCQkgICAgICBzaXplX3QgcmVhZF9zaXplLCBsb2ZmX3QgKnBvZmZzZXQpOworZXh0ZXJuIHNzaXplX3QgY2lmc191c2VyX3JlYWR2KHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKTsKIGV4dGVybiBzc2l6ZV90IGNpZnNfc3RyaWN0X3JlYWR2KHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCiAJCQkJIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcyk7Ci1leHRlcm4gc3NpemVfdCBjaWZzX3VzZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp3cml0ZV9kYXRhLAotCQkJICAgICAgIHNpemVfdCB3cml0ZV9zaXplLCBsb2ZmX3QgKnBvZmZzZXQpOworZXh0ZXJuIHNzaXplX3QgY2lmc191c2VyX3dyaXRldihzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQkJCXVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcyk7CiBleHRlcm4gc3NpemVfdCBjaWZzX3N0cmljdF93cml0ZXYoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcyk7CiBleHRlcm4gaW50IGNpZnNfbG9jayhzdHJ1Y3QgZmlsZSAqLCBpbnQsIHN0cnVjdCBmaWxlX2xvY2sgKik7CkBAIC0xMjMsOSArMTI1LDkgQEAKIGV4dGVybiBzc2l6ZV90CWNpZnNfbGlzdHhhdHRyKHN0cnVjdCBkZW50cnkgKiwgY2hhciAqLCBzaXplX3QpOwogZXh0ZXJuIGxvbmcgY2lmc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIAotI2lmZGVmIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTAorI2lmZGVmIENJRlNfTkZTRF9FWFBPUlQKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgY2lmc19leHBvcnRfb3BzOwotI2VuZGlmIC8qIEVYUEVSSU1FTlRBTCAqLworI2VuZGlmIC8qIENJRlNfTkZTRF9FWFBPUlQgKi8KIAotI2RlZmluZSBDSUZTX1ZFUlNJT04gICAiMS43MSIKKyNkZWZpbmUgQ0lGU19WRVJTSU9OICAgIjEuNzIiCiAjZW5kaWYJCQkJLyogX0NJRlNGU19IICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNnbG9iLmggYi9mcy9jaWZzL2NpZnNnbG9iLmgKaW5kZXggYTVkMTEwNi4uNzZiNDUxNyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZ2xvYi5oCisrKyBiL2ZzL2NpZnMvY2lmc2dsb2IuaApAQCAtMjc0LDcgKzI3NCw4IEBACiAJaW50IGNhcGFiaWxpdGllczsKIAljaGFyIHNlcnZlck5hbWVbU0VSVkVSX05BTUVfTEVOX1dJVEhfTlVMTCAqIDJdOwkvKiBCQiBtYWtlIGJpZ2dlciBmb3IKIAkJCQlUQ1AgbmFtZXMgLSB3aWxsIGlwdjYgYW5kIHNjdHAgYWRkcmVzc2VzIGZpdD8gKi8KLQljaGFyICp1c2VyX25hbWU7CisJY2hhciAqdXNlcl9uYW1lOwkvKiBtdXN0IG5vdCBiZSBudWxsIGV4Y2VwdCBkdXJpbmcgaW5pdCBvZiBzZXNzCisJCQkJICAgYW5kIGFmdGVyIG1vdW50IG9wdGlvbiBwYXJzaW5nIHdlIGZpbGwgaXQgKi8KIAljaGFyICpkb21haW5OYW1lOwogCWNoYXIgKnBhc3N3b3JkOwogCXN0cnVjdCBzZXNzaW9uX2tleSBhdXRoX2tleTsKQEAgLTc4MCwxMCArNzgxLDEyIEBACiAgKi8KIEdMT0JBTF9FWFRFUk4gc3BpbmxvY2tfdAljaWZzX2ZpbGVfbGlzdF9sb2NrOwogCisjaWZkZWYgQ09ORklHX0NJRlNfRE5PVElGWV9FWFBFUklNRU5UQUwgLyogdW51c2VkIHRlbXBvcmFyaWx5ICovCiAvKiBPdXRzdGFuZGluZyBkaXIgbm90aWZ5IHJlcXVlc3RzICovCiBHTE9CQUxfRVhURVJOIHN0cnVjdCBsaXN0X2hlYWQgR2xvYmFsRG5vdGlmeVJlcUxpc3Q7CiAvKiBEaXJOb3RpZnkgcmVzcG9uc2UgcXVldWUgKi8KIEdMT0JBTF9FWFRFUk4gc3RydWN0IGxpc3RfaGVhZCBHbG9iYWxEbm90aWZ5UnNwX1E7CisjZW5kaWYgLyogd2FzIG5lZWRlZCBmb3IgZG5vdGlmeSwgYW5kIHdpbGwgYmUgbmVlZGVkIGZvciBpbm90aWZ5IHdoZW4gVkZTIGZpeCAqLwogCiAvKgogICogR2xvYmFsIHRyYW5zYWN0aW9uIGlkIChYSUQpIGluZm9ybWF0aW9uCkBAIC04MzAsNiArODMzLDExIEBACiAvKiByZWNvbm5lY3QgYWZ0ZXIgdGhpcyBtYW55IGZhaWxlZCBlY2hvIGF0dGVtcHRzICovCiBHTE9CQUxfRVhURVJOIHVuc2lnbmVkIHNob3J0IGVjaG9fcmV0cmllczsKIAorR0xPQkFMX0VYVEVSTiBzdHJ1Y3QgcmJfcm9vdCB1aWR0cmVlOworR0xPQkFMX0VYVEVSTiBzdHJ1Y3QgcmJfcm9vdCBnaWR0cmVlOworR0xPQkFMX0VYVEVSTiBzcGlubG9ja190IHNpZHVpZGxvY2s7CitHTE9CQUxfRVhURVJOIHNwaW5sb2NrX3Qgc2lkZ2lkbG9jazsKKwogdm9pZCBjaWZzX29wbG9ja19icmVhayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogdm9pZCBjaWZzX29wbG9ja19icmVha19nZXQoc3RydWN0IGNpZnNGaWxlSW5mbyAqY2ZpbGUpOwogdm9pZCBjaWZzX29wbG9ja19icmVha19wdXQoc3RydWN0IGNpZnNGaWxlSW5mbyAqY2ZpbGUpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzcGR1LmggYi9mcy9jaWZzL2NpZnNwZHUuaAppbmRleCBiNWM4Y2M1Li5kZTNhYTI4IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNwZHUuaAorKysgYi9mcy9jaWZzL2NpZnNwZHUuaApAQCAtMzk3LDkgKzM5Nyw5IEBACiAjZGVmaW5lIEdFVFUzMih2YXIpICAoKigoX191MzIgKil2YXIpKQkvKiBCQiBjaGVjayBmb3IgZW5kaWFuIGlzc3VlcyAqLwogCiBzdHJ1Y3Qgc21iX2hkciB7Ci0JX191MzIgc21iX2J1Zl9sZW5ndGg7CS8qIGJpZyBlbmRpYW4gb24gd2lyZSAqLy8qIEJCIGxlbmd0aCBpcyBvbmx5IHR3bwotCQlvciB0aHJlZSBieXRlcyAtIHdpdGggb25lIG9yIHR3byBieXRlIHR5cGUgcHJlY2VkaW5nIGl0IHRoYXQgYXJlCi0JCXplcm8gLSB3ZSBjb3VsZCBtYXNrIHRoZSB0eXBlIGJ5dGUgb2ZmIGp1c3QgaW4gY2FzZSBCQiAqLworCV9fYmUzMiBzbWJfYnVmX2xlbmd0aDsJLyogQkIgbGVuZ3RoIGlzIG9ubHkgdHdvIChyYXJlbHkgdGhyZWUpIGJ5dGVzLAorCQl3aXRoIG9uZSBvciB0d28gYnl0ZSAidHlwZSIgcHJlY2VkaW5nIGl0IHRoYXQgd2lsbCBiZQorCQl6ZXJvIC0gd2UgY291bGQgbWFzayB0aGUgdHlwZSBieXRlIG9mZiAqLwogCV9fdTggUHJvdG9jb2xbNF07CiAJX191OCBDb21tYW5kOwogCXVuaW9uIHsKQEAgLTQyOCw0MyArNDI4LDI4IEBACiAJX191OCBXb3JkQ291bnQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCi0vKiBnaXZlbiBhIHBvaW50ZXIgdG8gYW4gc21iX2hkciByZXRyaWV2ZSBhIGNoYXIgcG9pbnRlciB0byB0aGUgYnl0ZSBjb3VudCAqLwotI2RlZmluZSBCQ0Moc21iX3ZhcikgKCh1bnNpZ25lZCBjaGFyICopKHNtYl92YXIpICsgc2l6ZW9mKHN0cnVjdCBzbWJfaGRyKSArIFwKLQkJCSAoMiAqIChzbWJfdmFyKS0+V29yZENvdW50KSkKKy8qIGdpdmVuIGEgcG9pbnRlciB0byBhbiBzbWJfaGRyLCByZXRyaWV2ZSBhIHZvaWQgcG9pbnRlciB0byB0aGUgQnl0ZUNvdW50ICovCitzdGF0aWMgaW5saW5lIHZvaWQgKgorQkNDKHN0cnVjdCBzbWJfaGRyICpzbWIpCit7CisJcmV0dXJuICh2b2lkICopc21iICsgc2l6ZW9mKCpzbWIpICsgMiAqIHNtYi0+V29yZENvdW50OworfQogCiAvKiBnaXZlbiBhIHBvaW50ZXIgdG8gYW4gc21iX2hkciByZXRyaWV2ZSB0aGUgcG9pbnRlciB0byB0aGUgYnl0ZSBhcmVhICovCiAjZGVmaW5lIHBCeXRlQXJlYShzbWJfdmFyKSAoQkNDKHNtYl92YXIpICsgMikKIAotLyogZ2V0IHRoZSBjb252ZXJ0ZWQgQnl0ZUNvdW50IGZvciBhIFNNQiBwYWNrZXQgYW5kIHJldHVybiBpdCAqLwotc3RhdGljIGlubGluZSBfX3UxNgotZ2V0X2JjYyhzdHJ1Y3Qgc21iX2hkciAqaGRyKQotewotCV9fdTE2ICpiY19wdHIgPSAoX191MTYgKilCQ0MoaGRyKTsKLQotCXJldHVybiBnZXRfdW5hbGlnbmVkKGJjX3B0cik7Ci19Ci0KIC8qIGdldCB0aGUgdW5jb252ZXJ0ZWQgQnl0ZUNvdW50IGZvciBhIFNNQiBwYWNrZXQgYW5kIHJldHVybiBpdCAqLwogc3RhdGljIGlubGluZSBfX3UxNgotZ2V0X2JjY19sZShzdHJ1Y3Qgc21iX2hkciAqaGRyKQorZ2V0X2JjYyhzdHJ1Y3Qgc21iX2hkciAqaGRyKQogewogCV9fbGUxNiAqYmNfcHRyID0gKF9fbGUxNiAqKUJDQyhoZHIpOwogCiAJcmV0dXJuIGdldF91bmFsaWduZWRfbGUxNihiY19wdHIpOwogfQogCi0vKiBzZXQgdGhlIEJ5dGVDb3VudCBmb3IgYSBTTUIgcGFja2V0IGluIGhvc3QtYnl0ZSBvcmRlciAqLwotc3RhdGljIGlubGluZSB2b2lkCi1wdXRfYmNjKF9fdTE2IGNvdW50LCBzdHJ1Y3Qgc21iX2hkciAqaGRyKQotewotCV9fdTE2ICpiY19wdHIgPSAoX191MTYgKilCQ0MoaGRyKTsKLQotCXB1dF91bmFsaWduZWQoY291bnQsIGJjX3B0cik7Ci19Ci0KIC8qIHNldCB0aGUgQnl0ZUNvdW50IGZvciBhIFNNQiBwYWNrZXQgaW4gbGl0dGxlLWVuZGlhbiAqLwogc3RhdGljIGlubGluZSB2b2lkCi1wdXRfYmNjX2xlKF9fdTE2IGNvdW50LCBzdHJ1Y3Qgc21iX2hkciAqaGRyKQorcHV0X2JjYyhfX3UxNiBjb3VudCwgc3RydWN0IHNtYl9oZHIgKmhkcikKIHsKIAlfX2xlMTYgKmJjX3B0ciA9IChfX2xlMTYgKilCQ0MoaGRyKTsKIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzcHJvdG8uaCBiL2ZzL2NpZnMvY2lmc3Byb3RvLmgKaW5kZXggODA5NmYyNy4uNmU2OWUwNiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzcHJvdG8uaAorKysgYi9mcy9jaWZzL2NpZnNwcm90by5oCkBAIC01Myw2ICs1Myw5IEBACiAJY0ZZSSgxLCAiQ0lGUyBWRlM6IGxlYXZpbmcgJXMgKHhpZCA9ICVkKSByYyA9ICVkIiwJXAogCSAgICAgX19mdW5jX18sIGN1cnJfeGlkLCAoaW50KXJjKTsJCQlcCiB9IHdoaWxlICgwKQorZXh0ZXJuIGludCBpbml0X2NpZnNfaWRtYXAodm9pZCk7CitleHRlcm4gdm9pZCBleGl0X2NpZnNfaWRtYXAodm9pZCk7CitleHRlcm4gdm9pZCBjaWZzX2Rlc3Ryb3lfaWRtYXB0cmVlcyh2b2lkKTsKIGV4dGVybiBjaGFyICpidWlsZF9wYXRoX2Zyb21fZGVudHJ5KHN0cnVjdCBkZW50cnkgKik7CiBleHRlcm4gY2hhciAqY2lmc19idWlsZF9wYXRoX3RvX3Jvb3Qoc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiwKIAkJCQkJc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbik7CkBAIC05MCw3ICs5Myw2IEBACiBleHRlcm4gc3RydWN0IGNpZnNGaWxlSW5mbyAqZmluZF93cml0YWJsZV9maWxlKHN0cnVjdCBjaWZzSW5vZGVJbmZvICosIGJvb2wpOwogZXh0ZXJuIHN0cnVjdCBjaWZzRmlsZUluZm8gKmZpbmRfcmVhZGFibGVfZmlsZShzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqLCBib29sKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgc21iQ2FsY1NpemUoc3RydWN0IHNtYl9oZHIgKnB0cik7Ci1leHRlcm4gdW5zaWduZWQgaW50IHNtYkNhbGNTaXplX0xFKHN0cnVjdCBzbWJfaGRyICpwdHIpOwogZXh0ZXJuIGludCBkZWNvZGVfbmVnVG9rZW5Jbml0KHVuc2lnbmVkIGNoYXIgKnNlY3VyaXR5X2Jsb2IsIGludCBsZW5ndGgsCiAJCQlzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIpOwogZXh0ZXJuIGludCBjaWZzX2NvbnZlcnRfYWRkcmVzcyhzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBpbnQgbGVuKTsKQEAgLTE0Myw4ICsxNDUsMTAgQEAKIGV4dGVybiBpbnQgbW9kZV90b19jaWZzX2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpwYXRoLCBfX3U2NCk7CiBleHRlcm4gc3RydWN0IGNpZnNfbnRzZCAqZ2V0X2NpZnNfYWNsKHN0cnVjdCBjaWZzX3NiX2luZm8gKiwgc3RydWN0IGlub2RlICosCiAJCQkJCWNvbnN0IGNoYXIgKiwgdTMyICopOworZXh0ZXJuIGludCBzZXRfY2lmc19hY2woc3RydWN0IGNpZnNfbnRzZCAqLCBfX3UzMiwgc3RydWN0IGlub2RlICosCisJCQkJY29uc3QgY2hhciAqKTsKIAotZXh0ZXJuIGludCBjaWZzX21vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgY2lmc19zYl9pbmZvICosIGNoYXIgKiwKK2V4dGVybiBpbnQgY2lmc19tb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGNpZnNfc2JfaW5mbyAqLAogCQkJY29uc3QgY2hhciAqKTsKIGV4dGVybiBpbnQgY2lmc191bW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBjaWZzX3NiX2luZm8gKik7CiBleHRlcm4gdm9pZCBjaWZzX2Rmc19yZWxlYXNlX2F1dG9tb3VudF90aW1lcih2b2lkKTsKQEAgLTMwNCwxMiArMzA4LDEzIEBACiAJCQlzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAogCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2VhcmNoTmFtZSwgY2hhciAqKnN5bWluZm8sCiAJCQljb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UpOworI2lmZGVmIENPTkZJR19DSUZTX1NZTUxJTktfRVhQRVJJTUVOVEFMCiBleHRlcm4gaW50IENJRlNTTUJRdWVyeVJlcGFyc2VMaW5rSW5mbyhjb25zdCBpbnQgeGlkLAogCQkJc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKIAkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlYXJjaE5hbWUsCiAJCQljaGFyICpzeW1saW5raW5mbywgY29uc3QgaW50IGJ1ZmxlbiwgX191MTYgZmlkLAogCQkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlKTsKLQorI2VuZGlmIC8qIHRlbXBvcmFyaWx5IHVudXNlZCB1bnRpbCBjaWZzX3N5bWxpbmsgZml4ZWQgKi8KIGV4dGVybiBpbnQgQ0lGU1NNQk9wZW4oY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKIAkJCWNvbnN0IGNoYXIgKmZpbGVOYW1lLCBjb25zdCBpbnQgZGlzcG9zaXRpb24sCiAJCQljb25zdCBpbnQgYWNjZXNzX2ZsYWdzLCBjb25zdCBpbnQgb21vZGUsCkBAIC0zNDgsOCArMzUzLDYgQEAKIAkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlYXJjaE5hbWUsIF9fdTY0ICppbm9kZV9udW1iZXIsCiAJCQljb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UsCiAJCQlpbnQgcmVtYXBfc3BlY2lhbF9jaGFycyk7Ci1leHRlcm4gaW50IGNpZnNDb252ZXJ0VG9VQ1MoX19sZTE2ICp0YXJnZXQsIGNvbnN0IGNoYXIgKnNvdXJjZSwgaW50IG1heGxlbiwKLQkJCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKmNwLCBpbnQgbWFwQ2hhcnMpOwogCiBleHRlcm4gaW50IENJRlNTTUJMb2NrKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCiAJCQljb25zdCBfX3UxNiBuZXRmaWQsIGNvbnN0IF9fdTY0IGxlbiwKQEAgLTM4Myw5ICszODYsMTUgQEAKIGV4dGVybiBpbnQgY2FsY19zZWNrZXkoc3RydWN0IGNpZnNTZXNJbmZvICopOwogCiAjaWZkZWYgQ09ORklHX0NJRlNfV0VBS19QV19IQVNICi1leHRlcm4gdm9pZCBjYWxjX2xhbm1hbl9oYXNoKGNvbnN0IGNoYXIgKnBhc3N3b3JkLCBjb25zdCBjaGFyICpjcnlwdGtleSwKK2V4dGVybiBpbnQgY2FsY19sYW5tYW5faGFzaChjb25zdCBjaGFyICpwYXNzd29yZCwgY29uc3QgY2hhciAqY3J5cHRrZXksCiAJCQkJYm9vbCBlbmNyeXB0LCBjaGFyICpsbm1fc2Vzc2lvbl9rZXkpOwogI2VuZGlmIC8qIENJRlNfV0VBS19QV19IQVNIICovCisjaWZkZWYgQ09ORklHX0NJRlNfRE5PVElGWV9FWFBFUklNRU5UQUwgLyogdW51c2VkIHRlbXBvcmFyaWx5ICovCitleHRlcm4gaW50IENJRlNTTUJOb3RpZnkoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKKwkJCWNvbnN0IGludCBub3RpZnlfc3ViZGlycywgY29uc3QgX191MTYgbmV0ZmlkLAorCQkJX191MzIgZmlsdGVyLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG11bHRpc2hvdCwKKwkJCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSk7CisjZW5kaWYgLyogd2FzIG5lZWRlZCBmb3IgZG5vdGlmeSwgYW5kIHdpbGwgYmUgbmVlZGVkIGZvciBpbm90aWZ5IHdoZW4gVkZTIGZpeCAqLwogZXh0ZXJuIGludCBDSUZTU01CQ29weShpbnQgeGlkLAogCQkJc3RydWN0IGNpZnNUY29uSW5mbyAqc291cmNlX3Rjb24sCiAJCQljb25zdCBjaGFyICpmcm9tTmFtZSwKQEAgLTM5MywxMCArNDAyLDYgQEAKIAkJCWNvbnN0IGNoYXIgKnRvTmFtZSwgY29uc3QgaW50IGZsYWdzLAogCQkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlLAogCQkJaW50IHJlbWFwX3NwZWNpYWxfY2hhcnMpOwotZXh0ZXJuIGludCBDSUZTU01CTm90aWZ5KGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCi0JCQljb25zdCBpbnQgbm90aWZ5X3N1YmRpcnMsIGNvbnN0IF9fdTE2IG5ldGZpZCwKLQkJCV9fdTMyIGZpbHRlciwgc3RydWN0IGZpbGUgKmZpbGUsIGludCBtdWx0aXNob3QsCi0JCQljb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UpOwogZXh0ZXJuIHNzaXplX3QgQ0lGU1NNQlFBbGxFQXMoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKIAkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlYXJjaE5hbWUsCiAJCQljb25zdCB1bnNpZ25lZCBjaGFyICplYV9uYW1lLCBjaGFyICpFQURhdGEsCkBAIC00MjcsOSArNDMyLDYgQEAKIAkJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiwgaW50IHhpZCk7CiBleHRlcm4gaW50IG1kZm91cih1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiwgaW50KTsKIGV4dGVybiBpbnQgRV9tZDRoYXNoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBhc3N3ZCwgdW5zaWduZWQgY2hhciAqcDE2KTsKLWV4dGVybiB2b2lkIFNNQmVuY3J5cHQodW5zaWduZWQgY2hhciAqcGFzc3dkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjOCwKLQkJCXVuc2lnbmVkIGNoYXIgKnAyNCk7Ci1leHRlcm4gdm9pZCBFX1AxNih1bnNpZ25lZCBjaGFyICpwMTQsIHVuc2lnbmVkIGNoYXIgKnAxNik7Ci1leHRlcm4gdm9pZCBFX1AyNCh1bnNpZ25lZCBjaGFyICpwMjEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmM4LAorZXh0ZXJuIGludCBTTUJlbmNyeXB0KHVuc2lnbmVkIGNoYXIgKnBhc3N3ZCwgY29uc3QgdW5zaWduZWQgY2hhciAqYzgsCiAJCQl1bnNpZ25lZCBjaGFyICpwMjQpOwogI2VuZGlmCQkJLyogX0NJRlNQUk9UT19IICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNzbWIuYyBiL2ZzL2NpZnMvY2lmc3NtYi5jCmluZGV4IGRmOTU5YmEuLjgzZGY5MzcgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc3NtYi5jCisrKyBiL2ZzL2NpZnMvY2lmc3NtYi5jCkBAIC0zMzksMTIgKzMzOSwxMyBAQAogCSAgICBnZXRfdW5hbGlnbmVkX2xlMTYoJnBTTUItPnQyX3JzcC5EYXRhT2Zmc2V0KSA+IDEwMjQpCiAJCWdvdG8gdnQyX2VycjsKIAotCS8qIGNoZWNrIHRoYXQgYmNjIGlzIGF0IGxlYXN0IGFzIGJpZyBhcyBwYXJtcyArIGRhdGEgKi8KLQkvKiBjaGVjayB0aGF0IGJjYyBpcyBsZXNzIHRoYW4gbmVnb3RpYXRlZCBzbWIgYnVmZmVyICovCiAJdG90YWxfc2l6ZSA9IGdldF91bmFsaWduZWRfbGUxNigmcFNNQi0+dDJfcnNwLlBhcmFtZXRlckNvdW50KTsKIAlpZiAodG90YWxfc2l6ZSA+PSA1MTIpCiAJCWdvdG8gdnQyX2VycjsKIAorCS8qIGNoZWNrIHRoYXQgYmNjIGlzIGF0IGxlYXN0IGFzIGJpZyBhcyBwYXJtcyArIGRhdGEsIGFuZCB0aGF0IGl0IGlzCisJICogbGVzcyB0aGFuIG5lZ290aWF0ZWQgc21iIGJ1ZmZlcgorCSAqLwogCXRvdGFsX3NpemUgKz0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZwU01CLT50Ml9yc3AuRGF0YUNvdW50KTsKIAlpZiAodG90YWxfc2l6ZSA+IGdldF9iY2MoJnBTTUItPmhkcikgfHwKIAkgICAgdG90YWxfc2l6ZSA+PSBDSUZTTWF4QnVmU2l6ZSArIE1BWF9DSUZTX0hEUl9TSVpFKQpAQCAtMzU3LDYgKzM1OCwxMyBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgaW5jX3JmYzEwMDFfbGVuKHZvaWQgKnBTTUIsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc21iX2hkciAqaGRyID0gKHN0cnVjdCBzbWJfaGRyICopcFNNQjsKKworCWJlMzJfYWRkX2NwdSgmaGRyLT5zbWJfYnVmX2xlbmd0aCwgY291bnQpOworfQorCiBpbnQKIENJRlNTTUJOZWdvdGlhdGUodW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNTZXNJbmZvICpzZXMpCiB7CkBAIC00MDksNyArNDE3LDcgQEAKIAkJY291bnQgKz0gc3RybGVuKHByb3RvY29sc1tpXS5uYW1lKSArIDE7CiAJCS8qIG51bGwgYXQgZW5kIG9mIHNvdXJjZSBhbmQgdGFyZ2V0IGJ1ZmZlcnMgYW55d2F5ICovCiAJfQotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBjb3VudDsKKwlpbmNfcmZjMTAwMV9sZW4ocFNNQiwgY291bnQpOwogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KGNvdW50KTsKIAogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCBzZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLApAQCAtNTQxLDEwICs1NDksNiBAQAogCQlzZXJ2ZXItPnNlY1R5cGUgPSBSYXdOVExNU1NQOwogCWVsc2UgaWYgKHNlY0ZsYWdzICYgQ0lGU1NFQ19NQVlfTEFOTUFOKQogCQlzZXJ2ZXItPnNlY1R5cGUgPSBMQU5NQU47Ci0vKiAjaWZkZWYgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMCi0JZWxzZSBpZiAoc2VjRmxhZ3MgJiBDSUZTU0VDX01BWV9QTE5UWFQpCi0JCXNlcnZlci0+c2VjVHlwZSA9ID8/Ci0jZW5kaWYgKi8KIAllbHNlIHsKIAkJcmMgPSAtRU9QTk9UU1VQUDsKIAkJY0VSUk9SKDEsICJJbnZhbGlkIHNlY3VyaXR5IHR5cGUiKTsKQEAgLTU3OCw3ICs1ODIsNyBAQAogCiAJaWYgKChwU01Cci0+aGRyLkZsYWdzMiAmIFNNQkZMRzJfRVhUX1NFQykgJiYKIAkJKHNlcnZlci0+Y2FwYWJpbGl0aWVzICYgQ0FQX0VYVEVOREVEX1NFQ1VSSVRZKSkgewotCQljb3VudCA9IHBTTUJyLT5CeXRlQ291bnQ7CisJCWNvdW50ID0gZ2V0X2JjYygmcFNNQnItPmhkcik7CiAJCWlmIChjb3VudCA8IDE2KSB7CiAJCQlyYyA9IC1FSU87CiAJCQlnb3RvIG5lZ19lcnJfZXhpdDsKQEAgLTczMiw5ICs3MzYsOSBAQAogCXNtYi0+aGRyLlRpZCA9IDB4ZmZmZjsKIAlzbWItPmhkci5Xb3JkQ291bnQgPSAxOwogCXB1dF91bmFsaWduZWRfbGUxNigxLCAmc21iLT5FY2hvQ291bnQpOwotCXB1dF9iY2NfbGUoMSwgJnNtYi0+aGRyKTsKKwlwdXRfYmNjKDEsICZzbWItPmhkcik7CiAJc21iLT5EYXRhWzBdID0gJ2EnOwotCXNtYi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IDM7CisJaW5jX3JmYzEwMDFfbGVuKHNtYiwgMyk7CiAKIAlyYyA9IGNpZnNfY2FsbF9hc3luYyhzZXJ2ZXIsIChzdHJ1Y3Qgc21iX2hkciAqKXNtYiwKIAkJCQljaWZzX2VjaG9fY2FsbGJhY2ssIHNlcnZlcik7CkBAIC04NTIsNyArODU2LDcgQEAKIAlwU01CLT5Ub3RhbFBhcmFtZXRlckNvdW50ID0gcFNNQi0+UGFyYW1ldGVyQ291bnQ7CiAJcFNNQi0+SW5mb3JtYXRpb25MZXZlbCA9IGNwdV90b19sZTE2KFNNQl9QT1NJWF9VTkxJTkspOwogCXBTTUItPlJlc2VydmVkNCA9IDA7Ci0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGJ5dGVfY291bnQ7CisJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIGJ5dGVfY291bnQpOwogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KGJ5dGVfY291bnQpOwogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLAogCQkJIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CciwgJmJ5dGVzX3JldHVybmVkLCAwKTsKQEAgLTg5OCw3ICs5MDIsNyBAQAogCXBTTUItPlNlYXJjaEF0dHJpYnV0ZXMgPQogCSAgICBjcHVfdG9fbGUxNihBVFRSX1JFQURPTkxZIHwgQVRUUl9ISURERU4gfCBBVFRSX1NZU1RFTSk7CiAJcFNNQi0+QnVmZmVyRm9ybWF0ID0gMHgwNDsKLQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gbmFtZV9sZW4gKyAxOworCWluY19yZmMxMDAxX2xlbihwU01CLCBuYW1lX2xlbiArIDEpOwogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KG5hbWVfbGVuICsgMSk7CiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCiAJCQkgKHN0cnVjdCBzbWJfaGRyICopIHBTTUJyLCAmYnl0ZXNfcmV0dXJuZWQsIDApOwpAQCAtOTQyLDcgKzk0Niw3IEBACiAJfQogCiAJcFNNQi0+QnVmZmVyRm9ybWF0ID0gMHgwNDsKLQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gbmFtZV9sZW4gKyAxOworCWluY19yZmMxMDAxX2xlbihwU01CLCBuYW1lX2xlbiArIDEpOwogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KG5hbWVfbGVuICsgMSk7CiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCiAJCQkgKHN0cnVjdCBzbWJfaGRyICopIHBTTUJyLCAmYnl0ZXNfcmV0dXJuZWQsIDApOwpAQCAtOTg1LDcgKzk4OSw3IEBACiAJfQogCiAJcFNNQi0+QnVmZmVyRm9ybWF0ID0gMHgwNDsKLQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gbmFtZV9sZW4gKyAxOworCWluY19yZmMxMDAxX2xlbihwU01CLCBuYW1lX2xlbiArIDEpOwogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KG5hbWVfbGVuICsgMSk7CiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCiAJCQkgKHN0cnVjdCBzbWJfaGRyICopIHBTTUJyLCAmYnl0ZXNfcmV0dXJuZWQsIDApOwpAQCAtMTA2Myw3ICsxMDY3LDcgQEAKIAlwU01CLT5Ub3RhbFBhcmFtZXRlckNvdW50ID0gcFNNQi0+UGFyYW1ldGVyQ291bnQ7CiAJcFNNQi0+SW5mb3JtYXRpb25MZXZlbCA9IGNwdV90b19sZTE2KFNNQl9QT1NJWF9PUEVOKTsKIAlwU01CLT5SZXNlcnZlZDQgPSAwOwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBieXRlX2NvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBieXRlX2NvdW50KTsKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihieXRlX2NvdW50KTsKIAlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwKIAkJCSAoc3RydWN0IHNtYl9oZHIgKikgcFNNQnIsICZieXRlc19yZXR1cm5lZCwgMCk7CkBAIC0xMDc1LDcgKzEwNzksNyBAQAogCWNGWUkoMSwgImNvcHlpbmcgaW5vZGUgaW5mbyIpOwogCXJjID0gdmFsaWRhdGVfdDIoKHN0cnVjdCBzbWJfdDJfcnNwICopcFNNQnIpOwogCi0JaWYgKHJjIHx8IChwU01Cci0+Qnl0ZUNvdW50IDwgc2l6ZW9mKE9QRU5fUFNYX1JTUCkpKSB7CisJaWYgKHJjIHx8IGdldF9iY2MoJnBTTUJyLT5oZHIpIDwgc2l6ZW9mKE9QRU5fUFNYX1JTUCkpIHsKIAkJcmMgPSAtRUlPOwkvKiBiYWQgc21iICovCiAJCWdvdG8gcHN4X2NyZWF0ZV9lcnI7CiAJfQpAQCAtMTA5Niw3ICsxMTAwLDcgQEAKIAkJcFJldERhdGEtPlR5cGUgPSBjcHVfdG9fbGUzMigtMSk7IC8qIHVua25vd24gKi8KIAkJY0ZZSShEQkcyLCAidW5rbm93biB0eXBlIik7CiAJfSBlbHNlIHsKLQkJaWYgKHBTTUJyLT5CeXRlQ291bnQgPCBzaXplb2YoT1BFTl9QU1hfUlNQKQorCQlpZiAoZ2V0X2JjYygmcFNNQnItPmhkcikgPCBzaXplb2YoT1BFTl9QU1hfUlNQKQogCQkJCQkrIHNpemVvZihGSUxFX1VOSVhfQkFTSUNfSU5GTykpIHsKIAkJCWNFUlJPUigxLCAiT3BlbiByZXNwb25zZSBkYXRhIHRvbyBzbWFsbCIpOwogCQkJcFJldERhdGEtPlR5cGUgPSBjcHVfdG9fbGUzMigtMSk7CkBAIC0xMjI4LDcgKzEyMzIsNyBAQAogCXBTTUItPlNhdHRyID0gY3B1X3RvX2xlMTYoQVRUUl9ISURERU4gfCBBVFRSX1NZU1RFTSB8IEFUVFJfRElSRUNUT1JZKTsKIAlwU01CLT5PcGVuRnVuY3Rpb24gPSBjcHVfdG9fbGUxNihjb252ZXJ0X2Rpc3Bvc2l0aW9uKG9wZW5EaXNwb3NpdGlvbikpOwogCWNvdW50ICs9IG5hbWVfbGVuOwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBjb3VudDsKKwlpbmNfcmZjMTAwMV9sZW4ocFNNQiwgY291bnQpOwogCiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoY291bnQpOwogCS8qIGxvbmdfb3Agc2V0IHRvIDEgdG8gYWxsb3cgZm9yIG9wbG9jayBicmVhayB0aW1lb3V0cyAqLwpAQCAtMTM0MSw3ICsxMzQ1LDcgQEAKIAkgICAgU0VDVVJJVFlfQ09OVEVYVF9UUkFDS0lORyB8IFNFQ1VSSVRZX0VGRkVDVElWRV9PTkxZOwogCiAJY291bnQgKz0gbmFtZV9sZW47Ci0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGNvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBjb3VudCk7CiAKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihjb3VudCk7CiAJLyogbG9uZ19vcCBzZXQgdG8gMSB0byBhbGxvdyBmb3Igb3Bsb2NrIGJyZWFrIHRpbWVvdXRzICovCkBAIC0xNDI2LDcgKzE0MzAsNyBAQAogCX0KIAogCWlvdlswXS5pb3ZfYmFzZSA9IChjaGFyICopcFNNQjsKLQlpb3ZbMF0uaW92X2xlbiA9IHBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArIDQ7CisJaW92WzBdLmlvdl9sZW4gPSBiZTMyX3RvX2NwdShwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGgpICsgNDsKIAlyYyA9IFNlbmRSZWNlaXZlMih4aWQsIHRjb24tPnNlcywgaW92LCAxIC8qIG51bSBpb3ZlY3MgKi8sCiAJCQkgJnJlc3BfYnVmX3R5cGUsIENJRlNfTE9HX0VSUk9SKTsKIAljaWZzX3N0YXRzX2luYygmdGNvbi0+bnVtX3JlYWRzKTsKQEAgLTE1NjAsNyArMTU2NCw3IEBACiAKIAlwU01CLT5EYXRhTGVuZ3RoTG93ID0gY3B1X3RvX2xlMTYoYnl0ZXNfc2VudCAmIDB4RkZGRik7CiAJcFNNQi0+RGF0YUxlbmd0aEhpZ2ggPSBjcHVfdG9fbGUxNihieXRlc19zZW50ID4+IDE2KTsKLQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gYnl0ZV9jb3VudDsKKwlpbmNfcmZjMTAwMV9sZW4ocFNNQiwgYnl0ZV9jb3VudCk7CiAKIAlpZiAod2N0ID09IDE0KQogCQlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihieXRlX2NvdW50KTsKQEAgLTE2NDQsMTEgKzE2NDgsMTIgQEAKIAogCXBTTUItPkRhdGFMZW5ndGhMb3cgPSBjcHVfdG9fbGUxNihjb3VudCAmIDB4RkZGRik7CiAJcFNNQi0+RGF0YUxlbmd0aEhpZ2ggPSBjcHVfdG9fbGUxNihjb3VudCA+PiAxNik7Ci0Jc21iX2hkcl9sZW4gPSBwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKyAxOyAvKiBoZHIgKyAxIGJ5dGUgcGFkICovCisJLyogaGVhZGVyICsgMSBieXRlIHBhZCAqLworCXNtYl9oZHJfbGVuID0gYmUzMl90b19jcHUocFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoKSArIDE7CiAJaWYgKHdjdCA9PSAxNCkKLQkJcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGNvdW50KzE7CisJCWluY19yZmMxMDAxX2xlbihwU01CLCBjb3VudCArIDEpOwogCWVsc2UgLyogd2N0ID09IDEyICovCi0JCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBjb3VudCs1OyAvKiBzbWIgZGF0YSBzdGFydHMgbGF0ZXIgKi8KKwkJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIGNvdW50ICsgNSk7IC8qIHNtYiBkYXRhIHN0YXJ0cyBsYXRlciAqLwogCWlmICh3Y3QgPT0gMTQpCiAJCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KGNvdW50ICsgMSk7CiAJZWxzZSAvKiB3Y3QgPT0gMTIgKi8gLyogYmlnZ2VyIHBhZCwgc21hbGxlciBzbWIgaGRyLCBrZWVwIG9mZnNldCBvayAqLyB7CkBAIC0xNzQ4LDcgKzE3NTMsNyBAQAogCQkvKiBvcGxvY2sgYnJlYWsgKi8KIAkJY291bnQgPSAwOwogCX0KLQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gY291bnQ7CisJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIGNvdW50KTsKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihjb3VudCk7CiAKIAlpZiAod2FpdEZsYWcpIHsKQEAgLTE4MzksMTQgKzE4NDQsMTQgQEAKIAlwU01CLT5GaWQgPSBzbWJfZmlsZV9pZDsKIAlwU01CLT5JbmZvcm1hdGlvbkxldmVsID0gY3B1X3RvX2xlMTYoU01CX1NFVF9QT1NJWF9MT0NLKTsKIAlwU01CLT5SZXNlcnZlZDQgPSAwOwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBieXRlX2NvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBieXRlX2NvdW50KTsKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihieXRlX2NvdW50KTsKIAlpZiAod2FpdEZsYWcpIHsKIAkJcmMgPSBTZW5kUmVjZWl2ZUJsb2NraW5nTG9jayh4aWQsIHRjb24sIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLAogCQkJKHN0cnVjdCBzbWJfaGRyICopIHBTTUJyLCAmYnl0ZXNfcmV0dXJuZWQpOwogCX0gZWxzZSB7CiAJCWlvdlswXS5pb3ZfYmFzZSA9IChjaGFyICopcFNNQjsKLQkJaW92WzBdLmlvdl9sZW4gPSBwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKyA0OworCQlpb3ZbMF0uaW92X2xlbiA9IGJlMzJfdG9fY3B1KHBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCkgKyA0OwogCQlyYyA9IFNlbmRSZWNlaXZlMih4aWQsIHRjb24tPnNlcywgaW92LCAxIC8qIG51bSBpb3ZlY3MgKi8sCiAJCQkJJnJlc3BfYnVmX3R5cGUsIHRpbWVvdXQpOwogCQlwU01CID0gTlVMTDsgLyogcmVxdWVzdCBidWYgYWxyZWFkeSBmcmVlZCBieSBTZW5kUmVjZWl2ZTIuIERvCkBAIC0xODYyLDcgKzE4NjcsNyBAQAogCQlfX3UxNiBkYXRhX2NvdW50OwogCQlyYyA9IHZhbGlkYXRlX3QyKChzdHJ1Y3Qgc21iX3QyX3JzcCAqKXBTTUJyKTsKIAotCQlpZiAocmMgfHwgKHBTTUJyLT5CeXRlQ291bnQgPCBzaXplb2Yoc3RydWN0IGNpZnNfcG9zaXhfbG9jaykpKSB7CisJCWlmIChyYyB8fCBnZXRfYmNjKCZwU01Cci0+aGRyKSA8IHNpemVvZigqcGFybV9kYXRhKSkgewogCQkJcmMgPSAtRUlPOyAgICAgIC8qIGJhZCBzbWIgKi8KIAkJCWdvdG8gcGxrX2Vycl9leGl0OwogCQl9CkBAIC0yMDEyLDcgKzIwMTcsNyBAQAogCX0KIAogCWNvdW50ID0gMSAvKiAxc3Qgc2lnbmF0dXJlIGJ5dGUgKi8gICsgbmFtZV9sZW4gKyBuYW1lX2xlbjI7Ci0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGNvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBjb3VudCk7CiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoY291bnQpOwogCiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCkBAIC0yMDkyLDcgKzIwOTcsNyBAQAogCXBTTUItPkluZm9ybWF0aW9uTGV2ZWwgPQogCQljcHVfdG9fbGUxNihTTUJfU0VUX0ZJTEVfUkVOQU1FX0lORk9STUFUSU9OKTsKIAlwU01CLT5SZXNlcnZlZDQgPSAwOwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBieXRlX2NvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBieXRlX2NvdW50KTsKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihieXRlX2NvdW50KTsKIAlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgcFRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCiAJCQkgKHN0cnVjdCBzbWJfaGRyICopIHBTTUJyLCAmYnl0ZXNfcmV0dXJuZWQsIDApOwpAQCAtMjE1OSw3ICsyMTY0LDcgQEAKIAl9CiAKIAljb3VudCA9IDEgLyogMXN0IHNpZ25hdHVyZSBieXRlICovICArIG5hbWVfbGVuICsgbmFtZV9sZW4yOwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBjb3VudDsKKwlpbmNfcmZjMTAwMV9sZW4ocFNNQiwgY291bnQpOwogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KGNvdW50KTsKIAogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLApAQCAtMjI0OSw3ICsyMjU0LDcgQEAKIAlwU01CLT5EYXRhT2Zmc2V0ID0gY3B1X3RvX2xlMTYob2Zmc2V0KTsKIAlwU01CLT5JbmZvcm1hdGlvbkxldmVsID0gY3B1X3RvX2xlMTYoU01CX1NFVF9GSUxFX1VOSVhfTElOSyk7CiAJcFNNQi0+UmVzZXJ2ZWQ0ID0gMDsKLQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gYnl0ZV9jb3VudDsKKwlpbmNfcmZjMTAwMV9sZW4ocFNNQiwgYnl0ZV9jb3VudCk7CiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoYnl0ZV9jb3VudCk7CiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCiAJCQkgKHN0cnVjdCBzbWJfaGRyICopIHBTTUJyLCAmYnl0ZXNfcmV0dXJuZWQsIDApOwpAQCAtMjMzNSw3ICsyMzQwLDcgQEAKIAlwU01CLT5EYXRhT2Zmc2V0ID0gY3B1X3RvX2xlMTYob2Zmc2V0KTsKIAlwU01CLT5JbmZvcm1hdGlvbkxldmVsID0gY3B1X3RvX2xlMTYoU01CX1NFVF9GSUxFX1VOSVhfSExJTkspOwogCXBTTUItPlJlc2VydmVkNCA9IDA7Ci0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGJ5dGVfY291bnQ7CisJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIGJ5dGVfY291bnQpOwogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KGJ5dGVfY291bnQpOwogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLAogCQkJIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CciwgJmJ5dGVzX3JldHVybmVkLCAwKTsKQEAgLTI0MDYsNyArMjQxMSw3IEBACiAJfQogCiAJY291bnQgPSAxIC8qIHN0cmluZyB0eXBlIGJ5dGUgKi8gICsgbmFtZV9sZW4gKyBuYW1lX2xlbjI7Ci0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGNvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBjb3VudCk7CiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoY291bnQpOwogCiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCkBAIC0yNDc3LDcgKzI0ODIsNyBAQAogCXBTTUItPlBhcmFtZXRlckNvdW50ID0gcFNNQi0+VG90YWxQYXJhbWV0ZXJDb3VudDsKIAlwU01CLT5JbmZvcm1hdGlvbkxldmVsID0gY3B1X3RvX2xlMTYoU01CX1FVRVJZX0ZJTEVfVU5JWF9MSU5LKTsKIAlwU01CLT5SZXNlcnZlZDQgPSAwOwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBieXRlX2NvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBieXRlX2NvdW50KTsKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihieXRlX2NvdW50KTsKIAogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLApAQCAtMjQ4OSw3ICsyNDk0LDcgQEAKIAogCQlyYyA9IHZhbGlkYXRlX3QyKChzdHJ1Y3Qgc21iX3QyX3JzcCAqKXBTTUJyKTsKIAkJLyogQkIgYWxzbyBjaGVjayBlbm91Z2ggdG90YWwgYnl0ZXMgcmV0dXJuZWQgKi8KLQkJaWYgKHJjIHx8IChwU01Cci0+Qnl0ZUNvdW50IDwgMikpCisJCWlmIChyYyB8fCBnZXRfYmNjKCZwU01Cci0+aGRyKSA8IDIpCiAJCQlyYyA9IC1FSU87CiAJCWVsc2UgewogCQkJYm9vbCBpc191bmljb2RlOwpAQCAtMjUxNiw3ICsyNTIxLDE3IEBACiAJcmV0dXJuIHJjOwogfQogCi0jaWZkZWYgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMCisjaWZkZWYgQ09ORklHX0NJRlNfU1lNTElOS19FWFBFUklNRU5UQUwKKy8qCisgKglSZWNlbnQgV2luZG93cyB2ZXJzaW9ucyBub3cgY3JlYXRlIHN5bWxpbmtzIG1vcmUgZnJlcXVlbnRseQorICoJYW5kIHRoZXkgdXNlIHRoZSAicmVwYXJzZSBwb2ludCIgbWVjaGFuaXNtIGJlbG93LiAgV2UgY2FuIG9mIGNvdXJzZQorICoJZG8gc3ltbGlua3MgbmljZWx5IHRvIFNhbWJhIGFuZCBvdGhlciBzZXJ2ZXJzIHdoaWNoIHN1cHBvcnQgdGhlCisgKglDSUZTIFVuaXggRXh0ZW5zaW9ucyBhbmQgd2UgY2FuIGFsc28gZG8gU0ZVIHN5bWxpbmtzIGFuZCAiY2xpZW50IG9ubHkiCisgKgkiTUYiIHN5bWxpbmtzIG9wdGlvbmFsbHksIGJ1dCBmb3IgcmVjZW50IFdpbmRvd3Mgd2UgcmVhbGx5IG5lZWQgdG8KKyAqCXJlZW5hYmxlIHRoZSBjb2RlIGJlbG93IGFuZCBmaXggdGhlIGNpZnNfc3ltbGluayBjYWxsZXJzIHRvIGhhbmRsZSB0aGlzLgorICoJSW4gdGhlIGludGVyaW0gdGhpcyBjb2RlIGhhcyBiZWVuIG1vdmVkIHRvIGl0cyBvd24gY29uZmlnIG9wdGlvbiBzbworICoJaXQgaXMgbm90IGNvbXBpbGVkIGluIGJ5IGRlZmF1bHQgdW50aWwgY2FsbGVycyBmaXhlZCB1cCBhbmQgbW9yZSB0ZXN0ZWQuCisgKi8KIGludAogQ0lGU1NNQlF1ZXJ5UmVwYXJzZUxpbmtJbmZvKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCiAJCQljb25zdCB1bnNpZ25lZCBjaGFyICpzZWFyY2hOYW1lLApAQCAtMjU2MSwxNCArMjU3NiwxNCBAQAogCX0gZWxzZSB7CQkvKiBkZWNvZGUgcmVzcG9uc2UgKi8KIAkJX191MzIgZGF0YV9vZmZzZXQgPSBsZTMyX3RvX2NwdShwU01Cci0+RGF0YU9mZnNldCk7CiAJCV9fdTMyIGRhdGFfY291bnQgPSBsZTMyX3RvX2NwdShwU01Cci0+RGF0YUNvdW50KTsKLQkJaWYgKChwU01Cci0+Qnl0ZUNvdW50IDwgMikgfHwgKGRhdGFfb2Zmc2V0ID4gNTEyKSkgewotCQkvKiBCQiBhbHNvIGNoZWNrIGVub3VnaCB0b3RhbCBieXRlcyByZXR1cm5lZCAqLworCQlpZiAoZ2V0X2JjYygmcFNNQnItPmhkcikgPCAyIHx8IGRhdGFfb2Zmc2V0ID4gNTEyKSB7CisJCQkvKiBCQiBhbHNvIGNoZWNrIGVub3VnaCB0b3RhbCBieXRlcyByZXR1cm5lZCAqLwogCQkJcmMgPSAtRUlPOwkvKiBiYWQgc21iICovCiAJCQlnb3RvIHFyZXBhcnNlX291dDsKIAkJfQogCQlpZiAoZGF0YV9jb3VudCAmJiAoZGF0YV9jb3VudCA8IDIwNDgpKSB7CiAJCQljaGFyICplbmRfb2Zfc21iID0gMiAvKiBzaXplb2YgYnl0ZSBjb3VudCAqLyArCi0JCQkJcFNNQnItPkJ5dGVDb3VudCArIChjaGFyICopJnBTTUJyLT5CeXRlQ291bnQ7CisJCQkgICAgICAgZ2V0X2JjYygmcFNNQnItPmhkcikgKyAoY2hhciAqKSZwU01Cci0+Qnl0ZUNvdW50OwogCiAJCQlzdHJ1Y3QgcmVwYXJzZV9kYXRhICpyZXBhcnNlX2J1ZiA9CiAJCQkJCQkoc3RydWN0IHJlcGFyc2VfZGF0YSAqKQpAQCAtMjYxOCw3ICsyNjMzLDcgQEAKIAogCXJldHVybiByYzsKIH0KLSNlbmRpZiAvKiBDSUZTX0VYUEVSSU1FTlRBTCAqLworI2VuZGlmIC8qIENJRlNfU1lNTElOS19FWFBFUklNRU5UQUwgKi8gLyogQkIgdGVtcG9yYXJpbHkgdW51c2VkICovCiAKICNpZmRlZiBDT05GSUdfQ0lGU19QT1NJWAogCkBAIC0yODE0LDcgKzI4MjksNyBAQAogCXBTTUItPlBhcmFtZXRlckNvdW50ID0gcFNNQi0+VG90YWxQYXJhbWV0ZXJDb3VudDsKIAlwU01CLT5JbmZvcm1hdGlvbkxldmVsID0gY3B1X3RvX2xlMTYoU01CX1FVRVJZX1BPU0lYX0FDTCk7CiAJcFNNQi0+UmVzZXJ2ZWQ0ID0gMDsKLQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gYnl0ZV9jb3VudDsKKwlpbmNfcmZjMTAwMV9sZW4ocFNNQiwgYnl0ZV9jb3VudCk7CiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoYnl0ZV9jb3VudCk7CiAKIAlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwKQEAgLTI4MjYsOCArMjg0MSw4IEBACiAJCS8qIGRlY29kZSByZXNwb25zZSAqLwogCiAJCXJjID0gdmFsaWRhdGVfdDIoKHN0cnVjdCBzbWJfdDJfcnNwICopcFNNQnIpOwotCQlpZiAocmMgfHwgKHBTTUJyLT5CeXRlQ291bnQgPCAyKSkKIAkJLyogQkIgYWxzbyBjaGVjayBlbm91Z2ggdG90YWwgYnl0ZXMgcmV0dXJuZWQgKi8KKwkJaWYgKHJjIHx8IGdldF9iY2MoJnBTTUJyLT5oZHIpIDwgMikKIAkJCXJjID0gLUVJTzsgICAgICAvKiBiYWQgc21iICovCiAJCWVsc2UgewogCQkJX191MTYgZGF0YV9vZmZzZXQgPSBsZTE2X3RvX2NwdShwU01Cci0+dDIuRGF0YU9mZnNldCk7CkBAIC0yOTA4LDcgKzI5MjMsNyBAQAogCXBTTUItPlBhcmFtZXRlckNvdW50ID0gY3B1X3RvX2xlMTYocGFyYW1zKTsKIAlwU01CLT5Ub3RhbFBhcmFtZXRlckNvdW50ID0gcFNNQi0+UGFyYW1ldGVyQ291bnQ7CiAJcFNNQi0+UmVzZXJ2ZWQ0ID0gMDsKLQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gYnl0ZV9jb3VudDsKKwlpbmNfcmZjMTAwMV9sZW4ocFNNQiwgYnl0ZV9jb3VudCk7CiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoYnl0ZV9jb3VudCk7CiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCiAJCQkgKHN0cnVjdCBzbWJfaGRyICopIHBTTUJyLCAmYnl0ZXNfcmV0dXJuZWQsIDApOwpAQCAtMjk2Niw3ICsyOTgxLDcgQEAKIAlwU01CLT5JbmZvcm1hdGlvbkxldmVsID0gY3B1X3RvX2xlMTYoU01CX1FVRVJZX0FUVFJfRkxBR1MpOwogCXBTTUItPlBhZCA9IDA7CiAJcFNNQi0+RmlkID0gbmV0ZmlkOwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBieXRlX2NvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBieXRlX2NvdW50KTsKIAlwU01CLT50Mi5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihieXRlX2NvdW50KTsKIAogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLApAQCAtMjk3Niw4ICsyOTkxLDggQEAKIAl9IGVsc2UgewogCQkvKiBkZWNvZGUgcmVzcG9uc2UgKi8KIAkJcmMgPSB2YWxpZGF0ZV90Migoc3RydWN0IHNtYl90Ml9yc3AgKilwU01Ccik7Ci0JCWlmIChyYyB8fCAocFNNQnItPkJ5dGVDb3VudCA8IDIpKQogCQkvKiBCQiBhbHNvIGNoZWNrIGVub3VnaCB0b3RhbCBieXRlcyByZXR1cm5lZCAqLworCQlpZiAocmMgfHwgZ2V0X2JjYygmcFNNQnItPmhkcikgPCAyKQogCQkJLyogSWYgcmMgc2hvdWxkIHdlIGNoZWNrIGZvciBFT1BOT1NVUFAgYW5kCiAJCQkgICBkaXNhYmxlIHRoZSBzcnZpbm8gZmxhZz8gb3IgaW4gY2FsbGVyPyAqLwogCQkJcmMgPSAtRUlPOyAgICAgIC8qIGJhZCBzbWIgKi8KQEAgLTMwNTIsNiArMzA2Nyw3IEBACiAJY2hhciAqZW5kX29mX3NtYjsKIAlfX3UzMiBkYXRhX2NvdW50LCBkYXRhX29mZnNldCwgcGFybV9jb3VudCwgcGFybV9vZmZzZXQ7CiAJc3RydWN0IHNtYl9jb21fbnRyYW5zYWN0X3JzcCAqcFNNQnI7CisJdTE2IGJjYzsKIAogCSpwZGF0YWxlbiA9IDA7CiAJKnBwYXJtbGVuID0gMDsKQEAgLTMwNjEsOCArMzA3Nyw4IEBACiAKIAlwU01CciA9IChzdHJ1Y3Qgc21iX2NvbV9udHJhbnNhY3RfcnNwICopYnVmOwogCi0JLyogQnl0ZUNvdW50IHdhcyBjb252ZXJ0ZWQgZnJvbSBsaXR0bGUgZW5kaWFuIGluIFNlbmRSZWNlaXZlICovCi0JZW5kX29mX3NtYiA9IDIgLyogc2l6ZW9mIGJ5dGUgY291bnQgKi8gKyBwU01Cci0+Qnl0ZUNvdW50ICsKKwliY2MgPSBnZXRfYmNjKCZwU01Cci0+aGRyKTsKKwllbmRfb2Zfc21iID0gMiAvKiBzaXplb2YgYnl0ZSBjb3VudCAqLyArIGJjYyArCiAJCQkoY2hhciAqKSZwU01Cci0+Qnl0ZUNvdW50OwogCiAJZGF0YV9vZmZzZXQgPSBsZTMyX3RvX2NwdShwU01Cci0+RGF0YU9mZnNldCk7CkBAIC0zMDg4LDcgKzMxMDQsNyBAQAogCQkJKnBwZGF0YSwgZGF0YV9jb3VudCwgKGRhdGFfY291bnQgKyAqcHBkYXRhKSwKIAkJCWVuZF9vZl9zbWIsIHBTTUJyKTsKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfSBlbHNlIGlmIChwYXJtX2NvdW50ICsgZGF0YV9jb3VudCA+IHBTTUJyLT5CeXRlQ291bnQpIHsKKwl9IGVsc2UgaWYgKHBhcm1fY291bnQgKyBkYXRhX2NvdW50ID4gYmNjKSB7CiAJCWNGWUkoMSwgInBhcm0gY291bnQgYW5kIGRhdGEgY291bnQgbGFyZ2VyIHRoYW4gU01CIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTMxMjQsOSArMzE0MCw5IEBACiAJcFNNQi0+QWNsRmxhZ3MgPSBjcHVfdG9fbGUzMihDSUZTX0FDTF9PV05FUiB8IENJRlNfQUNMX0dST1VQIHwKIAkJCQkgICAgIENJRlNfQUNMX0RBQ0wpOwogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KDExKTsgLyogMyBieXRlcyBwYWQgKyA4IGJ5dGVzIHBhcm0gKi8KLQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gMTE7CisJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIDExKTsKIAlpb3ZbMF0uaW92X2Jhc2UgPSAoY2hhciAqKXBTTUI7Ci0JaW92WzBdLmlvdl9sZW4gPSBwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKyA0OworCWlvdlswXS5pb3ZfbGVuID0gYmUzMl90b19jcHUocFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoKSArIDQ7CiAKIAlyYyA9IFNlbmRSZWNlaXZlMih4aWQsIHRjb24tPnNlcywgaW92LCAxIC8qIG51bSBpb3ZlYyAqLywgJmJ1Zl90eXBlLAogCQkJIDApOwpAQCAtMzIzNSwxMCArMzI1MSw5IEBACiAJCW1lbWNweSgoY2hhciAqKSAmcFNNQnItPmhkci5Qcm90b2NvbCArIGRhdGFfb2Zmc2V0LAogCQkJKGNoYXIgKikgcG50c2QsCiAJCQlhY2xsZW4pOwotCQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gKGJ5dGVfY291bnQgKyBkYXRhX2NvdW50KTsKLQorCQlpbmNfcmZjMTAwMV9sZW4ocFNNQiwgYnl0ZV9jb3VudCArIGRhdGFfY291bnQpOwogCX0gZWxzZQotCQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gYnl0ZV9jb3VudDsKKwkJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIGJ5dGVfY291bnQpOwogCiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCiAJCShzdHJ1Y3Qgc21iX2hkciAqKSBwU01CciwgJmJ5dGVzX3JldHVybmVkLCAwKTsKQEAgLTMyODksNyArMzMwNCw3IEBACiAJfQogCXBTTUItPkJ1ZmZlckZvcm1hdCA9IDB4MDQ7CiAJbmFtZV9sZW4rKzsgLyogYWNjb3VudCBmb3IgYnVmZmVyIHR5cGUgYnl0ZSAqLwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSAoX191MTYpIG5hbWVfbGVuOworCWluY19yZmMxMDAxX2xlbihwU01CLCAoX191MTYpbmFtZV9sZW4pOwogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KG5hbWVfbGVuKTsKIAogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLApAQCAtMzM2NCw3ICszMzc5LDcgQEAKIAlwU01CLT5JbmZvcm1hdGlvbkxldmVsID0gY3B1X3RvX2xlMTYoU01CX1FVRVJZX0ZJTEVfQUxMX0lORk8pOwogCXBTTUItPlBhZCA9IDA7CiAJcFNNQi0+RmlkID0gbmV0ZmlkOwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBieXRlX2NvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBieXRlX2NvdW50KTsKIAogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLAogCQkJIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CciwgJmJ5dGVzX3JldHVybmVkLCAwKTsKQEAgLTMzNzUsNyArMzM5MCw3IEBACiAKIAkJaWYgKHJjKSAvKiBCQiBhZGQgYXV0byByZXRyeSBvbiBFT1BOT1RTVVBQPyAqLwogCQkJcmMgPSAtRUlPOwotCQllbHNlIGlmIChwU01Cci0+Qnl0ZUNvdW50IDwgNDApCisJCWVsc2UgaWYgKGdldF9iY2MoJnBTTUJyLT5oZHIpIDwgNDApCiAJCQlyYyA9IC1FSU87CS8qIGJhZCBzbWIgKi8KIAkJZWxzZSBpZiAocEZpbmREYXRhKSB7CiAJCQlfX3UxNiBkYXRhX29mZnNldCA9IGxlMTZfdG9fY3B1KHBTTUJyLT50Mi5EYXRhT2Zmc2V0KTsKQEAgLTM0NTEsNyArMzQ2Niw3IEBACiAJZWxzZQogCQlwU01CLT5JbmZvcm1hdGlvbkxldmVsID0gY3B1X3RvX2xlMTYoU01CX1FVRVJZX0ZJTEVfQUxMX0lORk8pOwogCXBTTUItPlJlc2VydmVkNCA9IDA7Ci0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGJ5dGVfY291bnQ7CisJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIGJ5dGVfY291bnQpOwogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KGJ5dGVfY291bnQpOwogCiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCkBAIC0zNDYzLDkgKzM0NzgsOSBAQAogCiAJCWlmIChyYykgLyogQkIgYWRkIGF1dG8gcmV0cnkgb24gRU9QTk9UU1VQUD8gKi8KIAkJCXJjID0gLUVJTzsKLQkJZWxzZSBpZiAoIWxlZ2FjeSAmJiAocFNNQnItPkJ5dGVDb3VudCA8IDQwKSkKKwkJZWxzZSBpZiAoIWxlZ2FjeSAmJiBnZXRfYmNjKCZwU01Cci0+aGRyKSA8IDQwKQogCQkJcmMgPSAtRUlPOwkvKiBiYWQgc21iICovCi0JCWVsc2UgaWYgKGxlZ2FjeSAmJiAocFNNQnItPkJ5dGVDb3VudCA8IDI0KSkKKwkJZWxzZSBpZiAobGVnYWN5ICYmIGdldF9iY2MoJnBTTUJyLT5oZHIpIDwgMjQpCiAJCQlyYyA9IC1FSU87ICAvKiAyNCBvciAyNiBleHBlY3RlZCBidXQgd2UgZG8gbm90IHJlYWQKIAkJCQkJbGFzdCBmaWVsZCAqLwogCQllbHNlIGlmIChwRmluZERhdGEpIHsKQEAgLTM1MzIsNyArMzU0Nyw3IEBACiAJcFNNQi0+SW5mb3JtYXRpb25MZXZlbCA9IGNwdV90b19sZTE2KFNNQl9RVUVSWV9GSUxFX1VOSVhfQkFTSUMpOwogCXBTTUItPlBhZCA9IDA7CiAJcFNNQi0+RmlkID0gbmV0ZmlkOwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBieXRlX2NvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBieXRlX2NvdW50KTsKIAogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLAogCQkJIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CciwgJmJ5dGVzX3JldHVybmVkLCAwKTsKQEAgLTM1NDEsNyArMzU1Niw3IEBACiAJfSBlbHNlIHsJCS8qIGRlY29kZSByZXNwb25zZSAqLwogCQlyYyA9IHZhbGlkYXRlX3QyKChzdHJ1Y3Qgc21iX3QyX3JzcCAqKXBTTUJyKTsKIAotCQlpZiAocmMgfHwgKHBTTUJyLT5CeXRlQ291bnQgPCBzaXplb2YoRklMRV9VTklYX0JBU0lDX0lORk8pKSkgeworCQlpZiAocmMgfHwgZ2V0X2JjYygmcFNNQnItPmhkcikgPCBzaXplb2YoRklMRV9VTklYX0JBU0lDX0lORk8pKSB7CiAJCQljRVJST1IoMSwgIk1hbGZvcm1lZCBGSUxFX1VOSVhfQkFTSUNfSU5GTyByZXNwb25zZS5cbiIKIAkJCQkgICAiVW5peCBFeHRlbnNpb25zIGNhbiBiZSBkaXNhYmxlZCBvbiBtb3VudCAiCiAJCQkJICAgImJ5IHNwZWNpZnlpbmcgdGhlIG5vc2Z1IG1vdW50IG9wdGlvbi4iKTsKQEAgLTM2MTcsNyArMzYzMiw3IEBACiAJcFNNQi0+UGFyYW1ldGVyQ291bnQgPSBwU01CLT5Ub3RhbFBhcmFtZXRlckNvdW50OwogCXBTTUItPkluZm9ybWF0aW9uTGV2ZWwgPSBjcHVfdG9fbGUxNihTTUJfUVVFUllfRklMRV9VTklYX0JBU0lDKTsKIAlwU01CLT5SZXNlcnZlZDQgPSAwOwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBieXRlX2NvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBieXRlX2NvdW50KTsKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihieXRlX2NvdW50KTsKIAogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLApAQCAtMzYyNyw3ICszNjQyLDcgQEAKIAl9IGVsc2UgewkJLyogZGVjb2RlIHJlc3BvbnNlICovCiAJCXJjID0gdmFsaWRhdGVfdDIoKHN0cnVjdCBzbWJfdDJfcnNwICopcFNNQnIpOwogCi0JCWlmIChyYyB8fCAocFNNQnItPkJ5dGVDb3VudCA8IHNpemVvZihGSUxFX1VOSVhfQkFTSUNfSU5GTykpKSB7CisJCWlmIChyYyB8fCBnZXRfYmNjKCZwU01Cci0+aGRyKSA8IHNpemVvZihGSUxFX1VOSVhfQkFTSUNfSU5GTykpIHsKIAkJCWNFUlJPUigxLCAiTWFsZm9ybWVkIEZJTEVfVU5JWF9CQVNJQ19JTkZPIHJlc3BvbnNlLlxuIgogCQkJCSAgICJVbml4IEV4dGVuc2lvbnMgY2FuIGJlIGRpc2FibGVkIG9uIG1vdW50ICIKIAkJCQkgICAiYnkgc3BlY2lmeWluZyB0aGUgbm9zZnUgbW91bnQgb3B0aW9uLiIpOwpAQCAtMzczMSw3ICszNzQ2LDcgQEAKIAogCS8qIEJCIHdoYXQgc2hvdWxkIHdlIHNldCBTdG9yYWdlVHlwZSB0bz8gRG9lcyBpdCBtYXR0ZXI/IEJCICovCiAJcFNNQi0+U2VhcmNoU3RvcmFnZVR5cGUgPSAwOwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBieXRlX2NvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBieXRlX2NvdW50KTsKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihieXRlX2NvdW50KTsKIAogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLApAQCAtMzg2MCw3ICszODc1LDcgQEAKIAlieXRlX2NvdW50ID0gcGFyYW1zICsgMSAvKiBwYWQgKi8gOwogCXBTTUItPlRvdGFsUGFyYW1ldGVyQ291bnQgPSBjcHVfdG9fbGUxNihwYXJhbXMpOwogCXBTTUItPlBhcmFtZXRlckNvdW50ID0gcFNNQi0+VG90YWxQYXJhbWV0ZXJDb3VudDsKLQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gYnl0ZV9jb3VudDsKKwlpbmNfcmZjMTAwMV9sZW4ocFNNQiwgYnl0ZV9jb3VudCk7CiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoYnl0ZV9jb3VudCk7CiAKIAlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwKQEAgLTQwMjIsNyArNDAzNyw3IEBACiAJcFNNQi0+UGFyYW1ldGVyQ291bnQgPSBwU01CLT5Ub3RhbFBhcmFtZXRlckNvdW50OwogCXBTTUItPkluZm9ybWF0aW9uTGV2ZWwgPSBjcHVfdG9fbGUxNihTTUJfUVVFUllfRklMRV9JTlRFUk5BTF9JTkZPKTsKIAlwU01CLT5SZXNlcnZlZDQgPSAwOwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBieXRlX2NvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBieXRlX2NvdW50KTsKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihieXRlX2NvdW50KTsKIAogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLApAQCAtNDAzMiw4ICs0MDQ3LDggQEAKIAl9IGVsc2UgewogCQkvKiBkZWNvZGUgcmVzcG9uc2UgKi8KIAkJcmMgPSB2YWxpZGF0ZV90Migoc3RydWN0IHNtYl90Ml9yc3AgKilwU01Ccik7Ci0JCWlmIChyYyB8fCAocFNNQnItPkJ5dGVDb3VudCA8IDIpKQogCQkvKiBCQiBhbHNvIGNoZWNrIGVub3VnaCB0b3RhbCBieXRlcyByZXR1cm5lZCAqLworCQlpZiAocmMgfHwgZ2V0X2JjYygmcFNNQnItPmhkcikgPCAyKQogCQkJLyogSWYgcmMgc2hvdWxkIHdlIGNoZWNrIGZvciBFT1BOT1NVUFAgYW5kCiAJCQlkaXNhYmxlIHRoZSBzcnZpbm8gZmxhZz8gb3IgaW4gY2FsbGVyPyAqLwogCQkJcmMgPSAtRUlPOyAgICAgIC8qIGJhZCBzbWIgKi8KQEAgLTQyNDYsNyArNDI2MSw3IEBACiAJcFNNQi0+UGFyYW1ldGVyQ291bnQgPSBjcHVfdG9fbGUxNihwYXJhbXMpOwogCXBTTUItPlRvdGFsUGFyYW1ldGVyQ291bnQgPSBwU01CLT5QYXJhbWV0ZXJDb3VudDsKIAlwU01CLT5NYXhSZWZlcnJhbExldmVsID0gY3B1X3RvX2xlMTYoMyk7Ci0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGJ5dGVfY291bnQ7CisJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIGJ5dGVfY291bnQpOwogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KGJ5dGVfY291bnQpOwogCiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCkBAIC00MjU4LDEzICs0MjczLDEzIEBACiAJcmMgPSB2YWxpZGF0ZV90Migoc3RydWN0IHNtYl90Ml9yc3AgKilwU01Ccik7CiAKIAkvKiBCQiBBbHNvIGNoZWNrIGlmIGVub3VnaCB0b3RhbCBieXRlcyByZXR1cm5lZD8gKi8KLQlpZiAocmMgfHwgKHBTTUJyLT5CeXRlQ291bnQgPCAxNykpIHsKKwlpZiAocmMgfHwgZ2V0X2JjYygmcFNNQnItPmhkcikgPCAxNykgewogCQlyYyA9IC1FSU87ICAgICAgLyogYmFkIHNtYiAqLwogCQlnb3RvIEdldERGU1JlZkV4aXQ7CiAJfQogCiAJY0ZZSSgxLCAiRGVjb2RpbmcgR2V0REZTUmVmZXIgcmVzcG9uc2UgQkNDOiAlZCAgT2Zmc2V0ICVkIiwKLQkJCQlwU01Cci0+Qnl0ZUNvdW50LAorCQkJCWdldF9iY2MoJnBTTUJyLT5oZHIpLAogCQkJCWxlMTZfdG9fY3B1KHBTTUJyLT50Mi5EYXRhT2Zmc2V0KSk7CiAKIAkvKiBwYXJzZSByZXR1cm5lZCByZXN1bHQgaW50byBtb3JlIHVzYWJsZSBmb3JtICovCkBAIC00MzIwLDcgKzQzMzUsNyBAQAogCXBTTUItPlJlc2VydmVkMyA9IDA7CiAJcFNNQi0+U3ViQ29tbWFuZCA9IGNwdV90b19sZTE2KFRSQU5TMl9RVUVSWV9GU19JTkZPUk1BVElPTik7CiAJcFNNQi0+SW5mb3JtYXRpb25MZXZlbCA9IGNwdV90b19sZTE2KFNNQl9JTkZPX0FMTE9DQVRJT04pOwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBieXRlX2NvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBieXRlX2NvdW50KTsKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihieXRlX2NvdW50KTsKIAogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLApAQCAtNDMzMCwxMiArNDM0NSwxMiBAQAogCX0gZWxzZSB7ICAgICAgICAgICAgICAgIC8qIGRlY29kZSByZXNwb25zZSAqLwogCQlyYyA9IHZhbGlkYXRlX3QyKChzdHJ1Y3Qgc21iX3QyX3JzcCAqKXBTTUJyKTsKIAotCQlpZiAocmMgfHwgKHBTTUJyLT5CeXRlQ291bnQgPCAxOCkpCisJCWlmIChyYyB8fCBnZXRfYmNjKCZwU01Cci0+aGRyKSA8IDE4KQogCQkJcmMgPSAtRUlPOyAgICAgIC8qIGJhZCBzbWIgKi8KIAkJZWxzZSB7CiAJCQlfX3UxNiBkYXRhX29mZnNldCA9IGxlMTZfdG9fY3B1KHBTTUJyLT50Mi5EYXRhT2Zmc2V0KTsKIAkJCWNGWUkoMSwgInFmc2luZiByZXNwIEJDQzogJWQgIE9mZnNldCAlZCIsCi0JCQkJIHBTTUJyLT5CeXRlQ291bnQsIGRhdGFfb2Zmc2V0KTsKKwkJCQkgZ2V0X2JjYygmcFNNQnItPmhkciksIGRhdGFfb2Zmc2V0KTsKIAogCQkJcmVzcG9uc2VfZGF0YSA9IChGSUxFX1NZU1RFTV9BTExPQ19JTkZPICopCiAJCQkJKCgoY2hhciAqKSAmcFNNQnItPmhkci5Qcm90b2NvbCkgKyBkYXRhX29mZnNldCk7CkBAIC00Mzk5LDcgKzQ0MTQsNyBAQAogCXBTTUItPlJlc2VydmVkMyA9IDA7CiAJcFNNQi0+U3ViQ29tbWFuZCA9IGNwdV90b19sZTE2KFRSQU5TMl9RVUVSWV9GU19JTkZPUk1BVElPTik7CiAJcFNNQi0+SW5mb3JtYXRpb25MZXZlbCA9IGNwdV90b19sZTE2KFNNQl9RVUVSWV9GU19TSVpFX0lORk8pOwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBieXRlX2NvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBieXRlX2NvdW50KTsKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihieXRlX2NvdW50KTsKIAogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLApAQCAtNDQwOSw3ICs0NDI0LDcgQEAKIAl9IGVsc2UgewkJLyogZGVjb2RlIHJlc3BvbnNlICovCiAJCXJjID0gdmFsaWRhdGVfdDIoKHN0cnVjdCBzbWJfdDJfcnNwICopcFNNQnIpOwogCi0JCWlmIChyYyB8fCAocFNNQnItPkJ5dGVDb3VudCA8IDI0KSkKKwkJaWYgKHJjIHx8IGdldF9iY2MoJnBTTUJyLT5oZHIpIDwgMjQpCiAJCQlyYyA9IC1FSU87CS8qIGJhZCBzbWIgKi8KIAkJZWxzZSB7CiAJCQlfX3UxNiBkYXRhX29mZnNldCA9IGxlMTZfdG9fY3B1KHBTTUJyLT50Mi5EYXRhT2Zmc2V0KTsKQEAgLTQ0NzksNyArNDQ5NCw3IEBACiAJcFNNQi0+UmVzZXJ2ZWQzID0gMDsKIAlwU01CLT5TdWJDb21tYW5kID0gY3B1X3RvX2xlMTYoVFJBTlMyX1FVRVJZX0ZTX0lORk9STUFUSU9OKTsKIAlwU01CLT5JbmZvcm1hdGlvbkxldmVsID0gY3B1X3RvX2xlMTYoU01CX1FVRVJZX0ZTX0FUVFJJQlVURV9JTkZPKTsKLQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gYnl0ZV9jb3VudDsKKwlpbmNfcmZjMTAwMV9sZW4ocFNNQiwgYnl0ZV9jb3VudCk7CiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoYnl0ZV9jb3VudCk7CiAKIAlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwKQEAgLTQ0ODksNyArNDUwNCw3IEBACiAJfSBlbHNlIHsJCS8qIGRlY29kZSByZXNwb25zZSAqLwogCQlyYyA9IHZhbGlkYXRlX3QyKChzdHJ1Y3Qgc21iX3QyX3JzcCAqKXBTTUJyKTsKIAotCQlpZiAocmMgfHwgKHBTTUJyLT5CeXRlQ291bnQgPCAxMykpIHsKKwkJaWYgKHJjIHx8IGdldF9iY2MoJnBTTUJyLT5oZHIpIDwgMTMpIHsKIAkJCS8qIEJCIGFsc28gY2hlY2sgaWYgZW5vdWdoIGJ5dGVzIHJldHVybmVkICovCiAJCQlyYyA9IC1FSU87CS8qIGJhZCBzbWIgKi8KIAkJfSBlbHNlIHsKQEAgLTQ1NTAsNyArNDU2NSw3IEBACiAJcFNNQi0+UmVzZXJ2ZWQzID0gMDsKIAlwU01CLT5TdWJDb21tYW5kID0gY3B1X3RvX2xlMTYoVFJBTlMyX1FVRVJZX0ZTX0lORk9STUFUSU9OKTsKIAlwU01CLT5JbmZvcm1hdGlvbkxldmVsID0gY3B1X3RvX2xlMTYoU01CX1FVRVJZX0ZTX0RFVklDRV9JTkZPKTsKLQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gYnl0ZV9jb3VudDsKKwlpbmNfcmZjMTAwMV9sZW4ocFNNQiwgYnl0ZV9jb3VudCk7CiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoYnl0ZV9jb3VudCk7CiAKIAlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwKQEAgLTQ1NjAsNyArNDU3NSw4IEBACiAJfSBlbHNlIHsJCS8qIGRlY29kZSByZXNwb25zZSAqLwogCQlyYyA9IHZhbGlkYXRlX3QyKChzdHJ1Y3Qgc21iX3QyX3JzcCAqKXBTTUJyKTsKIAotCQlpZiAocmMgfHwgKHBTTUJyLT5CeXRlQ291bnQgPCBzaXplb2YoRklMRV9TWVNURU1fREVWSUNFX0lORk8pKSkKKwkJaWYgKHJjIHx8IGdldF9iY2MoJnBTTUJyLT5oZHIpIDwKKwkJCSAgc2l6ZW9mKEZJTEVfU1lTVEVNX0RFVklDRV9JTkZPKSkKIAkJCXJjID0gLUVJTzsJLyogYmFkIHNtYiAqLwogCQllbHNlIHsKIAkJCV9fdTE2IGRhdGFfb2Zmc2V0ID0gbGUxNl90b19jcHUocFNNQnItPnQyLkRhdGFPZmZzZXQpOwpAQCAtNDYxOSw3ICs0NjM1LDcgQEAKIAlwU01CLT5SZXNlcnZlZDMgPSAwOwogCXBTTUItPlN1YkNvbW1hbmQgPSBjcHVfdG9fbGUxNihUUkFOUzJfUVVFUllfRlNfSU5GT1JNQVRJT04pOwogCXBTTUItPkluZm9ybWF0aW9uTGV2ZWwgPSBjcHVfdG9fbGUxNihTTUJfUVVFUllfQ0lGU19VTklYX0lORk8pOwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBieXRlX2NvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBieXRlX2NvdW50KTsKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihieXRlX2NvdW50KTsKIAogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLApAQCAtNDYyOSw3ICs0NjQ1LDcgQEAKIAl9IGVsc2UgewkJLyogZGVjb2RlIHJlc3BvbnNlICovCiAJCXJjID0gdmFsaWRhdGVfdDIoKHN0cnVjdCBzbWJfdDJfcnNwICopcFNNQnIpOwogCi0JCWlmIChyYyB8fCAocFNNQnItPkJ5dGVDb3VudCA8IDEzKSkgeworCQlpZiAocmMgfHwgZ2V0X2JjYygmcFNNQnItPmhkcikgPCAxMykgewogCQkJcmMgPSAtRUlPOwkvKiBiYWQgc21iICovCiAJCX0gZWxzZSB7CiAJCQlfX3UxNiBkYXRhX29mZnNldCA9IGxlMTZfdG9fY3B1KHBTTUJyLT50Mi5EYXRhT2Zmc2V0KTsKQEAgLTQ3MDIsNyArNDcxOCw3IEBACiAJcFNNQi0+Q2xpZW50VW5peE1pbm9yID0gY3B1X3RvX2xlMTYoQ0lGU19VTklYX01JTk9SX1ZFUlNJT04pOwogCXBTTUItPkNsaWVudFVuaXhDYXAgPSBjcHVfdG9fbGU2NChjYXApOwogCi0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGJ5dGVfY291bnQ7CisJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIGJ5dGVfY291bnQpOwogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KGJ5dGVfY291bnQpOwogCiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCkBAIC00NzY0LDcgKzQ3ODAsNyBAQAogCXBTTUItPlJlc2VydmVkMyA9IDA7CiAJcFNNQi0+U3ViQ29tbWFuZCA9IGNwdV90b19sZTE2KFRSQU5TMl9RVUVSWV9GU19JTkZPUk1BVElPTik7CiAJcFNNQi0+SW5mb3JtYXRpb25MZXZlbCA9IGNwdV90b19sZTE2KFNNQl9RVUVSWV9QT1NJWF9GU19JTkZPKTsKLQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gYnl0ZV9jb3VudDsKKwlpbmNfcmZjMTAwMV9sZW4ocFNNQiwgYnl0ZV9jb3VudCk7CiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoYnl0ZV9jb3VudCk7CiAKIAlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwKQEAgLTQ3NzQsNyArNDc5MCw3IEBACiAJfSBlbHNlIHsJCS8qIGRlY29kZSByZXNwb25zZSAqLwogCQlyYyA9IHZhbGlkYXRlX3QyKChzdHJ1Y3Qgc21iX3QyX3JzcCAqKXBTTUJyKTsKIAotCQlpZiAocmMgfHwgKHBTTUJyLT5CeXRlQ291bnQgPCAxMykpIHsKKwkJaWYgKHJjIHx8IGdldF9iY2MoJnBTTUJyLT5oZHIpIDwgMTMpIHsKIAkJCXJjID0gLUVJTzsJLyogYmFkIHNtYiAqLwogCQl9IGVsc2UgewogCQkJX191MTYgZGF0YV9vZmZzZXQgPSBsZTE2X3RvX2NwdShwU01Cci0+dDIuRGF0YU9mZnNldCk7CkBAIC00ODkwLDcgKzQ5MDYsNyBAQAogCXBTTUItPlBhcmFtZXRlckNvdW50ID0gY3B1X3RvX2xlMTYocGFyYW1zKTsKIAlwU01CLT5Ub3RhbFBhcmFtZXRlckNvdW50ID0gcFNNQi0+UGFyYW1ldGVyQ291bnQ7CiAJcFNNQi0+UmVzZXJ2ZWQ0ID0gMDsKLQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gYnl0ZV9jb3VudDsKKwlpbmNfcmZjMTAwMV9sZW4ocFNNQiwgYnl0ZV9jb3VudCk7CiAJcGFybV9kYXRhLT5GaWxlU2l6ZSA9IGNwdV90b19sZTY0KHNpemUpOwogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KGJ5dGVfY291bnQpOwogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLApAQCAtNDk2OSw3ICs0OTg1LDcgQEAKIAkJCQljcHVfdG9fbGUxNihTTUJfU0VUX0ZJTEVfRU5EX09GX0ZJTEVfSU5GTyk7CiAJfQogCXBTTUItPlJlc2VydmVkNCA9IDA7Ci0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGJ5dGVfY291bnQ7CisJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIGJ5dGVfY291bnQpOwogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KGJ5dGVfY291bnQpOwogCXJjID0gU2VuZFJlY2VpdmVOb1JzcCh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsIDApOwogCWlmIChyYykgewpAQCAtNTAzNyw3ICs1MDUzLDcgQEAKIAllbHNlCiAJCXBTTUItPkluZm9ybWF0aW9uTGV2ZWwgPSBjcHVfdG9fbGUxNihTTUJfU0VUX0ZJTEVfQkFTSUNfSU5GTyk7CiAJcFNNQi0+UmVzZXJ2ZWQ0ID0gMDsKLQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gYnl0ZV9jb3VudDsKKwlpbmNfcmZjMTAwMV9sZW4ocFNNQiwgYnl0ZV9jb3VudCk7CiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoYnl0ZV9jb3VudCk7CiAJbWVtY3B5KGRhdGFfb2Zmc2V0LCBkYXRhLCBzaXplb2YoRklMRV9CQVNJQ19JTkZPKSk7CiAJcmMgPSBTZW5kUmVjZWl2ZU5vUnNwKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwgMCk7CkBAIC01MDk2LDcgKzUxMTIsNyBAQAogCXBTTUItPkZpZCA9IGZpZDsKIAlwU01CLT5JbmZvcm1hdGlvbkxldmVsID0gY3B1X3RvX2xlMTYoU01CX1NFVF9GSUxFX0RJU1BPU0lUSU9OX0lORk8pOwogCXBTTUItPlJlc2VydmVkNCA9IDA7Ci0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGJ5dGVfY291bnQ7CisJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIGJ5dGVfY291bnQpOwogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KGJ5dGVfY291bnQpOwogCSpkYXRhX29mZnNldCA9IGRlbGV0ZV9maWxlID8gMSA6IDA7CiAJcmMgPSBTZW5kUmVjZWl2ZU5vUnNwKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwgMCk7CkBAIC01MTY5LDcgKzUxODUsNyBAQAogCWVsc2UKIAkJcFNNQi0+SW5mb3JtYXRpb25MZXZlbCA9IGNwdV90b19sZTE2KFNNQl9TRVRfRklMRV9CQVNJQ19JTkZPKTsKIAlwU01CLT5SZXNlcnZlZDQgPSAwOwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBieXRlX2NvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBieXRlX2NvdW50KTsKIAltZW1jcHkoZGF0YV9vZmZzZXQsIGRhdGEsIHNpemVvZihGSUxFX0JBU0lDX0lORk8pKTsKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihieXRlX2NvdW50KTsKIAlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwKQEAgLTUyMjEsNyArNTIzNyw3IEBACiAJfQogCXBTTUItPmF0dHIgPSBjcHVfdG9fbGUxNihkb3NfYXR0cnMpOwogCXBTTUItPkJ1ZmZlckZvcm1hdCA9IDB4MDQ7Ci0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IG5hbWVfbGVuICsgMTsKKwlpbmNfcmZjMTAwMV9sZW4ocFNNQiwgbmFtZV9sZW4gKyAxKTsKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihuYW1lX2xlbiArIDEpOwogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLAogCQkJIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CciwgJmJ5dGVzX3JldHVybmVkLCAwKTsKQEAgLTUzMjYsNyArNTM0Miw3IEBACiAJcFNNQi0+RmlkID0gZmlkOwogCXBTTUItPkluZm9ybWF0aW9uTGV2ZWwgPSBjcHVfdG9fbGUxNihTTUJfU0VUX0ZJTEVfVU5JWF9CQVNJQyk7CiAJcFNNQi0+UmVzZXJ2ZWQ0ID0gMDsKLQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gYnl0ZV9jb3VudDsKKwlpbmNfcmZjMTAwMV9sZW4ocFNNQiwgYnl0ZV9jb3VudCk7CiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoYnl0ZV9jb3VudCk7CiAKIAljaWZzX2ZpbGxfdW5peF9zZXRfaW5mbyhkYXRhX29mZnNldCwgYXJncyk7CkBAIC01NDAyLDcgKzU0MTgsNyBAQAogCXBTTUItPlRvdGFsRGF0YUNvdW50ID0gcFNNQi0+RGF0YUNvdW50OwogCXBTTUItPkluZm9ybWF0aW9uTGV2ZWwgPSBjcHVfdG9fbGUxNihTTUJfU0VUX0ZJTEVfVU5JWF9CQVNJQyk7CiAJcFNNQi0+UmVzZXJ2ZWQ0ID0gMDsKLQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gYnl0ZV9jb3VudDsKKwlpbmNfcmZjMTAwMV9sZW4ocFNNQiwgYnl0ZV9jb3VudCk7CiAKIAljaWZzX2ZpbGxfdW5peF9zZXRfaW5mbyhkYXRhX29mZnNldCwgYXJncyk7CiAKQEAgLTU0MTgsNzkgKzU0MzQsNiBAQAogCXJldHVybiByYzsKIH0KIAotaW50IENJRlNTTUJOb3RpZnkoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKLQkJICBjb25zdCBpbnQgbm90aWZ5X3N1YmRpcnMsIGNvbnN0IF9fdTE2IG5ldGZpZCwKLQkJICBfX3UzMiBmaWx0ZXIsIHN0cnVjdCBmaWxlICpwZmlsZSwgaW50IG11bHRpc2hvdCwKLQkJICBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3Qgc21iX2NvbV90cmFuc2FjdGlvbl9jaGFuZ2Vfbm90aWZ5X3JlcSAqcFNNQiA9IE5VTEw7Ci0Jc3RydWN0IHNtYl9jb21fbnRyYW5zYWN0aW9uX2NoYW5nZV9ub3RpZnlfcnNwICpwU01CciA9IE5VTEw7Ci0Jc3RydWN0IGRpcl9ub3RpZnlfcmVxICpkbm90aWZ5X3JlcTsKLQlpbnQgYnl0ZXNfcmV0dXJuZWQ7Ci0KLQljRllJKDEsICJJbiBDSUZTU01CTm90aWZ5IGZvciBmaWxlIGhhbmRsZSAlZCIsIChpbnQpbmV0ZmlkKTsKLQlyYyA9IHNtYl9pbml0KFNNQl9DT01fTlRfVFJBTlNBQ1QsIDIzLCB0Y29uLCAodm9pZCAqKikgJnBTTUIsCi0JCSAgICAgICh2b2lkICoqKSAmcFNNQnIpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCi0JcFNNQi0+VG90YWxQYXJhbWV0ZXJDb3VudCA9IDAgOwotCXBTTUItPlRvdGFsRGF0YUNvdW50ID0gMDsKLQlwU01CLT5NYXhQYXJhbWV0ZXJDb3VudCA9IGNwdV90b19sZTMyKDIpOwotCS8qIEJCIGZpbmQgZXhhY3QgZGF0YSBjb3VudCBtYXggZnJvbSBzZXNzIHN0cnVjdHVyZSBCQiAqLwotCXBTTUItPk1heERhdGFDb3VudCA9IDA7IC8qIHNhbWUgaW4gbGl0dGxlIGVuZGlhbiBvciBiZSAqLwotLyogQkIgVkVSSUZZIHZlcmlmeSB3aGljaCBpcyBjb3JyZWN0IGZvciBhYm92ZSBCQiAqLwotCXBTTUItPk1heERhdGFDb3VudCA9IGNwdV90b19sZTMyKCh0Y29uLT5zZXMtPnNlcnZlci0+bWF4QnVmIC0KLQkJCQkJICAgICBNQVhfQ0lGU19IRFJfU0laRSkgJiAweEZGRkZGRjAwKTsKLQotCXBTTUItPk1heFNldHVwQ291bnQgPSA0OwotCXBTTUItPlJlc2VydmVkID0gMDsKLQlwU01CLT5QYXJhbWV0ZXJPZmZzZXQgPSAwOwotCXBTTUItPkRhdGFDb3VudCA9IDA7Ci0JcFNNQi0+RGF0YU9mZnNldCA9IDA7Ci0JcFNNQi0+U2V0dXBDb3VudCA9IDQ7IC8qIHNpbmdsZSBieXRlIGRvZXMgbm90IG5lZWQgbGUgY29udmVyc2lvbiAqLwotCXBTTUItPlN1YkNvbW1hbmQgPSBjcHVfdG9fbGUxNihOVF9UUkFOU0FDVF9OT1RJRllfQ0hBTkdFKTsKLQlwU01CLT5QYXJhbWV0ZXJDb3VudCA9IHBTTUItPlRvdGFsUGFyYW1ldGVyQ291bnQ7Ci0JaWYgKG5vdGlmeV9zdWJkaXJzKQotCQlwU01CLT5XYXRjaFRyZWUgPSAxOyAvKiBvbmUgYnl0ZSAtIG5vIGxlIGNvbnZlcnNpb24gbmVlZGVkICovCi0JcFNNQi0+UmVzZXJ2ZWQyID0gMDsKLQlwU01CLT5Db21wbGV0aW9uRmlsdGVyID0gY3B1X3RvX2xlMzIoZmlsdGVyKTsKLQlwU01CLT5GaWQgPSBuZXRmaWQ7IC8qIGZpbGUgaGFuZGxlIGFsd2F5cyBsZSAqLwotCXBTTUItPkJ5dGVDb3VudCA9IDA7Ci0KLQlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwKLQkJCSAoc3RydWN0IHNtYl9oZHIgKilwU01CciwgJmJ5dGVzX3JldHVybmVkLAotCQkJIENJRlNfQVNZTkNfT1ApOwotCWlmIChyYykgewotCQljRllJKDEsICJFcnJvciBpbiBOb3RpZnkgPSAlZCIsIHJjKTsKLQl9IGVsc2UgewotCQkvKiBBZGQgZmlsZSB0byBvdXRzdGFuZGluZyByZXF1ZXN0cyAqLwotCQkvKiBCQiBjaGFuZ2UgdG8ga21lbSBjYWNoZSBhbGxvYyAqLwotCQlkbm90aWZ5X3JlcSA9IGttYWxsb2MoCi0JCQkJCQlzaXplb2Yoc3RydWN0IGRpcl9ub3RpZnlfcmVxKSwKLQkJCQkJCSBHRlBfS0VSTkVMKTsKLQkJaWYgKGRub3RpZnlfcmVxKSB7Ci0JCQlkbm90aWZ5X3JlcS0+UGlkID0gcFNNQi0+aGRyLlBpZDsKLQkJCWRub3RpZnlfcmVxLT5QaWRIaWdoID0gcFNNQi0+aGRyLlBpZEhpZ2g7Ci0JCQlkbm90aWZ5X3JlcS0+TWlkID0gcFNNQi0+aGRyLk1pZDsKLQkJCWRub3RpZnlfcmVxLT5UaWQgPSBwU01CLT5oZHIuVGlkOwotCQkJZG5vdGlmeV9yZXEtPlVpZCA9IHBTTUItPmhkci5VaWQ7Ci0JCQlkbm90aWZ5X3JlcS0+bmV0ZmlkID0gbmV0ZmlkOwotCQkJZG5vdGlmeV9yZXEtPnBmaWxlID0gcGZpbGU7Ci0JCQlkbm90aWZ5X3JlcS0+ZmlsdGVyID0gZmlsdGVyOwotCQkJZG5vdGlmeV9yZXEtPm11bHRpc2hvdCA9IG11bHRpc2hvdDsKLQkJCXNwaW5fbG9jaygmR2xvYmFsTWlkX0xvY2spOwotCQkJbGlzdF9hZGRfdGFpbCgmZG5vdGlmeV9yZXEtPmxoZWFkLAotCQkJCQkmR2xvYmFsRG5vdGlmeVJlcUxpc3QpOwotCQkJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKLQkJfSBlbHNlCi0JCQlyYyA9IC1FTk9NRU07Ci0JfQotCWNpZnNfYnVmX3JlbGVhc2UocFNNQik7Ci0JcmV0dXJuIHJjOwotfQotCiAjaWZkZWYgQ09ORklHX0NJRlNfWEFUVFIKIC8qCiAgKiBEbyBhIHBhdGgtYmFzZWQgUVVFUllfQUxMX0VBUyBjYWxsIGFuZCBwYXJzZSB0aGUgcmVzdWx0LiBUaGlzIGlzIGEgY29tbW9uCkBAIC01NTYwLDcgKzU1MDMsNyBAQAogCXBTTUItPlBhcmFtZXRlckNvdW50ID0gcFNNQi0+VG90YWxQYXJhbWV0ZXJDb3VudDsKIAlwU01CLT5JbmZvcm1hdGlvbkxldmVsID0gY3B1X3RvX2xlMTYoU01CX0lORk9fUVVFUllfQUxMX0VBUyk7CiAJcFNNQi0+UmVzZXJ2ZWQ0ID0gMDsKLQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gYnl0ZV9jb3VudDsKKwlpbmNfcmZjMTAwMV9sZW4ocFNNQiwgYnl0ZV9jb3VudCk7CiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoYnl0ZV9jb3VudCk7CiAKIAlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwKQEAgLTU1NzYsNyArNTUxOSw3IEBACiAJb2YgdGhlc2UgdHJhbnMyIHJlc3BvbnNlcyAqLwogCiAJcmMgPSB2YWxpZGF0ZV90Migoc3RydWN0IHNtYl90Ml9yc3AgKilwU01Ccik7Ci0JaWYgKHJjIHx8IChwU01Cci0+Qnl0ZUNvdW50IDwgNCkpIHsKKwlpZiAocmMgfHwgZ2V0X2JjYygmcFNNQnItPmhkcikgPCA0KSB7CiAJCXJjID0gLUVJTzsJLyogYmFkIHNtYiAqLwogCQlnb3RvIFFBbGxFQXNPdXQ7CiAJfQpAQCAtNTc3Myw3ICs1NzE2LDcgQEAKIAlwU01CLT5QYXJhbWV0ZXJDb3VudCA9IGNwdV90b19sZTE2KHBhcmFtcyk7CiAJcFNNQi0+VG90YWxQYXJhbWV0ZXJDb3VudCA9IHBTTUItPlBhcmFtZXRlckNvdW50OwogCXBTTUItPlJlc2VydmVkNCA9IDA7Ci0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGJ5dGVfY291bnQ7CisJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIGJ5dGVfY291bnQpOwogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KGJ5dGVfY291bnQpOwogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLAogCQkJIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CciwgJmJ5dGVzX3JldHVybmVkLCAwKTsKQEAgLTU3ODcsNSArNTczMCw5OSBAQAogCiAJcmV0dXJuIHJjOwogfQotCiAjZW5kaWYKKworI2lmZGVmIENPTkZJR19DSUZTX0ROT1RJRllfRVhQRVJJTUVOVEFMIC8qIEJCIHVudXNlZCB0ZW1wb3JhcmlseSAqLworLyoKKyAqCVllYXJzIGFnbyB0aGUga2VybmVsIGFkZGVkIGEgImRub3RpZnkiIGZ1bmN0aW9uIGZvciBTYW1iYSBzZXJ2ZXIsCisgKgl0byBhbGxvdyBuZXR3b3JrIGNsaWVudHMgKHN1Y2ggYXMgV2luZG93cykgdG8gZGlzcGxheSB1cGRhdGVkCisgKglsaXN0cyBvZiBmaWxlcyBpbiBkaXJlY3RvcnkgbGlzdGluZ3MgYXV0b21hdGljYWxseSB3aGVuCisgKglmaWxlcyBhcmUgYWRkZWQgYnkgb25lIHVzZXIgd2hlbiBhbm90aGVyIHVzZXIgaGFzIHRoZQorICoJc2FtZSBkaXJlY3Rvcnkgb3BlbiBvbiB0aGVpciBkZXNrdG9wLiAgVGhlIExpbnV4IGNpZnMga2VybmVsCisgKgljbGllbnQgaG9va2VkIGludG8gdGhlIGtlcm5lbCBzaWRlIG9mIHRoaXMgaW50ZXJmYWNlIGZvcgorICoJdGhlIHNhbWUgcmVhc29uLCBidXQgaXJvbmljYWxseSB3aGVuIHRoZSBWRlMgbW92ZWQgZnJvbQorICoJImRub3RpZnkiIHRvICJpbm90aWZ5IiBpdCBiZWNhbWUgaGFyZGVyIHRvIHBsdWcgaW4gTGludXgKKyAqCW5ldHdvcmsgZmlsZSBzeXN0ZW0gY2xpZW50cyAodGhlIG1vc3Qgb2J2aW91cyB1c2UgY2FzZQorICoJZm9yIG5vdGlmeSBpbnRlcmZhY2VzIGlzIHdoZW4gbXVsdGlwbGUgdXNlcnMgY2FuIHVwZGF0ZQorICoJdGhlIGNvbnRlbnRzIG9mIHRoZSBzYW1lIGRpcmVjdG9yeSAtIGV4YWN0bHkgd2hhdCBuZXR3b3JrCisgKglmaWxlIHN5c3RlbXMgY2FuIGRvKSBhbHRob3VnaCB0aGUgc2VydmVyIChTYW1iYSkgY291bGQKKyAqCXN0aWxsIHVzZSBpdC4gIEZvciB0aGUgc2hvcnQgdGVybSB3ZSBsZWF2ZSB0aGUgd29ya2VyCisgKglmdW5jdGlvbiBpZmRlZmZlZCBvdXQgKGJlbG93KSB1bnRpbCBpbm90aWZ5IGlzIGZpeGVkCisgKglpbiB0aGUgVkZTIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHBsdWcgaW4gbmV0d29yayBmaWxlCisgKglzeXN0ZW0gY2xpZW50cy4gIElmIGlub3RpZnkgdHVybnMgb3V0IHRvIGJlIHBlcm1hbmVudGx5CisgKglpbmNvbXBhdGlibGUgZm9yIG5ldHdvcmsgZnMgY2xpZW50cywgd2UgY291bGQgaW5zdGVhZCBzaW1wbHkKKyAqCWV4cG9zZSB0aGlzIGNvbmZpZyBmbGFnIGJ5IGFkZGluZyBhIGZ1dHVyZSBjaWZzIChhbmQgc21iMikgbm90aWZ5IGlvY3RsLgorICovCitpbnQgQ0lGU1NNQk5vdGlmeShjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAorCQkgIGNvbnN0IGludCBub3RpZnlfc3ViZGlycywgY29uc3QgX191MTYgbmV0ZmlkLAorCQkgIF9fdTMyIGZpbHRlciwgc3RydWN0IGZpbGUgKnBmaWxlLCBpbnQgbXVsdGlzaG90LAorCQkgIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSkKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBzbWJfY29tX3RyYW5zYWN0aW9uX2NoYW5nZV9ub3RpZnlfcmVxICpwU01CID0gTlVMTDsKKwlzdHJ1Y3Qgc21iX2NvbV9udHJhbnNhY3Rpb25fY2hhbmdlX25vdGlmeV9yc3AgKnBTTUJyID0gTlVMTDsKKwlzdHJ1Y3QgZGlyX25vdGlmeV9yZXEgKmRub3RpZnlfcmVxOworCWludCBieXRlc19yZXR1cm5lZDsKKworCWNGWUkoMSwgIkluIENJRlNTTUJOb3RpZnkgZm9yIGZpbGUgaGFuZGxlICVkIiwgKGludCluZXRmaWQpOworCXJjID0gc21iX2luaXQoU01CX0NPTV9OVF9UUkFOU0FDVCwgMjMsIHRjb24sICh2b2lkICoqKSAmcFNNQiwKKwkJICAgICAgKHZvaWQgKiopICZwU01Ccik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlwU01CLT5Ub3RhbFBhcmFtZXRlckNvdW50ID0gMCA7CisJcFNNQi0+VG90YWxEYXRhQ291bnQgPSAwOworCXBTTUItPk1heFBhcmFtZXRlckNvdW50ID0gY3B1X3RvX2xlMzIoMik7CisJLyogQkIgZmluZCBleGFjdCBkYXRhIGNvdW50IG1heCBmcm9tIHNlc3Mgc3RydWN0dXJlIEJCICovCisJcFNNQi0+TWF4RGF0YUNvdW50ID0gMDsgLyogc2FtZSBpbiBsaXR0bGUgZW5kaWFuIG9yIGJlICovCisvKiBCQiBWRVJJRlkgdmVyaWZ5IHdoaWNoIGlzIGNvcnJlY3QgZm9yIGFib3ZlIEJCICovCisJcFNNQi0+TWF4RGF0YUNvdW50ID0gY3B1X3RvX2xlMzIoKHRjb24tPnNlcy0+c2VydmVyLT5tYXhCdWYgLQorCQkJCQkgICAgIE1BWF9DSUZTX0hEUl9TSVpFKSAmIDB4RkZGRkZGMDApOworCisJcFNNQi0+TWF4U2V0dXBDb3VudCA9IDQ7CisJcFNNQi0+UmVzZXJ2ZWQgPSAwOworCXBTTUItPlBhcmFtZXRlck9mZnNldCA9IDA7CisJcFNNQi0+RGF0YUNvdW50ID0gMDsKKwlwU01CLT5EYXRhT2Zmc2V0ID0gMDsKKwlwU01CLT5TZXR1cENvdW50ID0gNDsgLyogc2luZ2xlIGJ5dGUgZG9lcyBub3QgbmVlZCBsZSBjb252ZXJzaW9uICovCisJcFNNQi0+U3ViQ29tbWFuZCA9IGNwdV90b19sZTE2KE5UX1RSQU5TQUNUX05PVElGWV9DSEFOR0UpOworCXBTTUItPlBhcmFtZXRlckNvdW50ID0gcFNNQi0+VG90YWxQYXJhbWV0ZXJDb3VudDsKKwlpZiAobm90aWZ5X3N1YmRpcnMpCisJCXBTTUItPldhdGNoVHJlZSA9IDE7IC8qIG9uZSBieXRlIC0gbm8gbGUgY29udmVyc2lvbiBuZWVkZWQgKi8KKwlwU01CLT5SZXNlcnZlZDIgPSAwOworCXBTTUItPkNvbXBsZXRpb25GaWx0ZXIgPSBjcHVfdG9fbGUzMihmaWx0ZXIpOworCXBTTUItPkZpZCA9IG5ldGZpZDsgLyogZmlsZSBoYW5kbGUgYWx3YXlzIGxlICovCisJcFNNQi0+Qnl0ZUNvdW50ID0gMDsKKworCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLAorCQkJIChzdHJ1Y3Qgc21iX2hkciAqKXBTTUJyLCAmYnl0ZXNfcmV0dXJuZWQsCisJCQkgQ0lGU19BU1lOQ19PUCk7CisJaWYgKHJjKSB7CisJCWNGWUkoMSwgIkVycm9yIGluIE5vdGlmeSA9ICVkIiwgcmMpOworCX0gZWxzZSB7CisJCS8qIEFkZCBmaWxlIHRvIG91dHN0YW5kaW5nIHJlcXVlc3RzICovCisJCS8qIEJCIGNoYW5nZSB0byBrbWVtIGNhY2hlIGFsbG9jICovCisJCWRub3RpZnlfcmVxID0ga21hbGxvYygKKwkJCQkJCXNpemVvZihzdHJ1Y3QgZGlyX25vdGlmeV9yZXEpLAorCQkJCQkJIEdGUF9LRVJORUwpOworCQlpZiAoZG5vdGlmeV9yZXEpIHsKKwkJCWRub3RpZnlfcmVxLT5QaWQgPSBwU01CLT5oZHIuUGlkOworCQkJZG5vdGlmeV9yZXEtPlBpZEhpZ2ggPSBwU01CLT5oZHIuUGlkSGlnaDsKKwkJCWRub3RpZnlfcmVxLT5NaWQgPSBwU01CLT5oZHIuTWlkOworCQkJZG5vdGlmeV9yZXEtPlRpZCA9IHBTTUItPmhkci5UaWQ7CisJCQlkbm90aWZ5X3JlcS0+VWlkID0gcFNNQi0+aGRyLlVpZDsKKwkJCWRub3RpZnlfcmVxLT5uZXRmaWQgPSBuZXRmaWQ7CisJCQlkbm90aWZ5X3JlcS0+cGZpbGUgPSBwZmlsZTsKKwkJCWRub3RpZnlfcmVxLT5maWx0ZXIgPSBmaWx0ZXI7CisJCQlkbm90aWZ5X3JlcS0+bXVsdGlzaG90ID0gbXVsdGlzaG90OworCQkJc3Bpbl9sb2NrKCZHbG9iYWxNaWRfTG9jayk7CisJCQlsaXN0X2FkZF90YWlsKCZkbm90aWZ5X3JlcS0+bGhlYWQsCisJCQkJCSZHbG9iYWxEbm90aWZ5UmVxTGlzdCk7CisJCQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOworCQl9IGVsc2UKKwkJCXJjID0gLUVOT01FTTsKKwl9CisJY2lmc19idWZfcmVsZWFzZShwU01CKTsKKwlyZXR1cm4gcmM7Cit9CisjZW5kaWYgLyogd2FzIG5lZWRlZCBmb3IgZG5vdGlmeSwgYW5kIHdpbGwgYmUgbmVlZGVkIGZvciBpbm90aWZ5IHdoZW4gVkZTIGZpeCAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jb25uZWN0LmMgYi9mcy9jaWZzL2Nvbm5lY3QuYwppbmRleCAyNzcyNjJhLi5kYTI4NGUzIDEwMDY0NAotLS0gYS9mcy9jaWZzL2Nvbm5lY3QuYworKysgYi9mcy9jaWZzL2Nvbm5lY3QuYwpAQCAtMTAyLDYgKzEwMiw3IEBACiAJYm9vbCBmc2M6MTsJLyogZW5hYmxlIGZzY2FjaGUgKi8KIAlib29sIG1mc3ltbGlua3M6MTsgLyogdXNlIE1pbnNoYWxsK0ZyZW5jaCBTeW1saW5rcyAqLwogCWJvb2wgbXVsdGl1c2VyOjE7CisJYm9vbCB1c2Vfc21iMjoxOyAvKiBmb3JjZSBzbWIyIHVzZSBvbiBtb3VudCBpbnN0ZWFkIG9mIGNpZnMgKi8KIAl1bnNpZ25lZCBpbnQgcnNpemU7CiAJdW5zaWduZWQgaW50IHdzaXplOwogCWJvb2wgc29ja29wdF90Y3Bfbm9kZWxheToxOwpAQCAtMzE2LDE5ICszMTcsMTkgQEAKIAlwdXRfdW5hbGlnbmVkX2xlMTYodG90YWxfaW5fYnVmLCAmcFNNQnQtPnQyX3JzcC5EYXRhQ291bnQpOwogCiAJLyogZml4IHVwIHRoZSBCQ0MgKi8KLQlieXRlX2NvdW50ID0gZ2V0X2JjY19sZShwVGFyZ2V0U01CKTsKKwlieXRlX2NvdW50ID0gZ2V0X2JjYyhwVGFyZ2V0U01CKTsKIAlieXRlX2NvdW50ICs9IHRvdGFsX2luX2J1ZjI7CiAJLyogaXMgdGhlIHJlc3VsdCB0b28gYmlnIGZvciB0aGUgZmllbGQ/ICovCiAJaWYgKGJ5dGVfY291bnQgPiBVU0hSVF9NQVgpCiAJCXJldHVybiAtRVBST1RPOwotCXB1dF9iY2NfbGUoYnl0ZV9jb3VudCwgcFRhcmdldFNNQik7CisJcHV0X2JjYyhieXRlX2NvdW50LCBwVGFyZ2V0U01CKTsKIAotCWJ5dGVfY291bnQgPSBwVGFyZ2V0U01CLT5zbWJfYnVmX2xlbmd0aDsKKwlieXRlX2NvdW50ID0gYmUzMl90b19jcHUocFRhcmdldFNNQi0+c21iX2J1Zl9sZW5ndGgpOwogCWJ5dGVfY291bnQgKz0gdG90YWxfaW5fYnVmMjsKIAkvKiBkb24ndCBhbGxvdyBidWZmZXIgdG8gb3ZlcmZsb3cgKi8KIAlpZiAoYnl0ZV9jb3VudCA+IENJRlNNYXhCdWZTaXplKQogCQlyZXR1cm4gLUVOT0JVRlM7Ci0JcFRhcmdldFNNQi0+c21iX2J1Zl9sZW5ndGggPSBieXRlX2NvdW50OworCXBUYXJnZXRTTUItPnNtYl9idWZfbGVuZ3RoID0gY3B1X3RvX2JlMzIoYnl0ZV9jb3VudCk7CiAKIAltZW1jcHkoZGF0YV9hcmVhX29mX3RhcmdldCwgZGF0YV9hcmVhX29mX2J1ZjIsIHRvdGFsX2luX2J1ZjIpOwogCkBAIC00OTUsOCArNDk2LDcgQEAKIAkJLyogTm90ZSB0aGF0IEZDIDEwMDEgbGVuZ3RoIGlzIGJpZyBlbmRpYW4gb24gdGhlIHdpcmUsCiAJCWJ1dCB3ZSBjb252ZXJ0IGl0IGhlcmUgc28gaXQgaXMgYWx3YXlzIG1hbmlwdWxhdGVkCiAJCWFzIGhvc3QgYnl0ZSBvcmRlciAqLwotCQlwZHVfbGVuZ3RoID0gYmUzMl90b19jcHUoKF9fZm9yY2UgX19iZTMyKXNtYl9idWZmZXItPnNtYl9idWZfbGVuZ3RoKTsKLQkJc21iX2J1ZmZlci0+c21iX2J1Zl9sZW5ndGggPSBwZHVfbGVuZ3RoOworCQlwZHVfbGVuZ3RoID0gYmUzMl90b19jcHUoc21iX2J1ZmZlci0+c21iX2J1Zl9sZW5ndGgpOwogCiAJCWNGWUkoMSwgInJmYzEwMDIgbGVuZ3RoIDB4JXgiLCBwZHVfbGVuZ3RoKzQpOwogCkBAIC03MzUsNyArNzM1LDcgQEAKIAkJc29ja19yZWxlYXNlKGNzb2NrZXQpOwogCQlzZXJ2ZXItPnNzb2NrZXQgPSBOVUxMOwogCX0KLQkvKiBidWZmZXIgdXN1YWxsbHkgZnJlZWQgaW4gZnJlZV9taWQgLSBuZWVkIHRvIGZyZWUgaXQgaGVyZSBvbiBleGl0ICovCisJLyogYnVmZmVyIHVzdWFsbHkgZnJlZWQgaW4gZnJlZV9taWQgLSBuZWVkIHRvIGZyZWUgaXQgaGVyZSBvbiBleGl0ICovCiAJY2lmc19idWZfcmVsZWFzZShiaWdidWYpOwogCWlmIChzbWFsbGJ1ZikgLyogbm8gc2Vuc2UgbG9nZ2luZyBhIGRlYnVnIG1lc3NhZ2UgaWYgTlVMTCAqLwogCQljaWZzX3NtYWxsX2J1Zl9yZWxlYXNlKHNtYWxsYnVmKTsKQEAgLTgxOCwxMCArODE4LDExIEBACiB9CiAKIHN0YXRpYyBpbnQKLWNpZnNfcGFyc2VfbW91bnRfb3B0aW9ucyhjaGFyICpvcHRpb25zLCBjb25zdCBjaGFyICpkZXZuYW1lLAorY2lmc19wYXJzZV9tb3VudF9vcHRpb25zKGNvbnN0IGNoYXIgKm1vdW50ZGF0YSwgY29uc3QgY2hhciAqZGV2bmFtZSwKIAkJCSBzdHJ1Y3Qgc21iX3ZvbCAqdm9sKQogewogCWNoYXIgKnZhbHVlLCAqZGF0YSwgKmVuZDsKKwljaGFyICptb3VudGRhdGFfY29weSwgKm9wdGlvbnM7CiAJdW5zaWduZWQgaW50ICB0ZW1wX2xlbiwgaSwgajsKIAljaGFyIHNlcGFyYXRvclsyXTsKIAlzaG9ydCBpbnQgb3ZlcnJpZGVfdWlkID0gLTE7CkBAIC04NjEsOSArODYyLDE0IEBACiAKIAl2b2wtPmFjdGltZW8gPSBDSUZTX0RFRl9BQ1RJTUVPOwogCi0JaWYgKCFvcHRpb25zKQotCQlyZXR1cm4gMTsKKwlpZiAoIW1vdW50ZGF0YSkKKwkJZ290byBjaWZzX3BhcnNlX21vdW50X2VycjsKIAorCW1vdW50ZGF0YV9jb3B5ID0ga3N0cm5kdXAobW91bnRkYXRhLCBQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghbW91bnRkYXRhX2NvcHkpCisJCWdvdG8gY2lmc19wYXJzZV9tb3VudF9lcnI7CisKKwlvcHRpb25zID0gbW91bnRkYXRhX2NvcHk7CiAJZW5kID0gb3B0aW9ucyArIHN0cmxlbihvcHRpb25zKTsKIAlpZiAoc3RybmNtcChvcHRpb25zLCAic2VwPSIsIDQpID09IDApIHsKIAkJaWYgKG9wdGlvbnNbNF0gIT0gMCkgewpAQCAtODg5LDE3ICs4OTUsMjIgQEAKIAkJCWlmICghdmFsdWUpIHsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkJICAgICAgICJDSUZTOiBpbnZhbGlkIG9yIG1pc3NpbmcgdXNlcm5hbWVcbiIpOwotCQkJCXJldHVybiAxOwkvKiBuZWVkc19hcmc7ICovCisJCQkJZ290byBjaWZzX3BhcnNlX21vdW50X2VycjsKIAkJCX0gZWxzZSBpZiAoISp2YWx1ZSkgewogCQkJCS8qIG51bGwgdXNlciwgaWUgYW5vbnltb3VzLCBhdXRoZW50aWNhdGlvbiAqLwogCQkJCXZvbC0+bnVsbGF1dGggPSAxOwogCQkJfQogCQkJaWYgKHN0cm5sZW4odmFsdWUsIE1BWF9VU0VSTkFNRV9TSVpFKSA8CiAJCQkJCQlNQVhfVVNFUk5BTUVfU0laRSkgewotCQkJCXZvbC0+dXNlcm5hbWUgPSB2YWx1ZTsKKwkJCQl2b2wtPnVzZXJuYW1lID0ga3N0cmR1cCh2YWx1ZSwgR0ZQX0tFUk5FTCk7CisJCQkJaWYgKCF2b2wtPnVzZXJuYW1lKSB7CisJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNJRlM6IG5vIG1lbW9yeSAiCisJCQkJCQkJICAgICJmb3IgdXNlcm5hbWVcbiIpOworCQkJCQlnb3RvIGNpZnNfcGFyc2VfbW91bnRfZXJyOworCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ0lGUzogdXNlcm5hbWUgdG9vIGxvbmdcbiIpOwotCQkJCXJldHVybiAxOworCQkJCWdvdG8gY2lmc19wYXJzZV9tb3VudF9lcnI7CiAJCQl9CiAJCX0gZWxzZSBpZiAoc3RybmljbXAoZGF0YSwgInBhc3MiLCA0KSA9PSAwKSB7CiAJCQlpZiAoIXZhbHVlKSB7CkBAIC05NjMsNyArOTc0LDcgQEAKIAkJCQlpZiAodm9sLT5wYXNzd29yZCA9PSBOVUxMKSB7CiAJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNJRlM6IG5vIG1lbW9yeSAiCiAJCQkJCQkJICAgICJmb3IgcGFzc3dvcmRcbiIpOwotCQkJCQlyZXR1cm4gMTsKKwkJCQkJZ290byBjaWZzX3BhcnNlX21vdW50X2VycjsKIAkJCQl9CiAJCQkJZm9yIChpID0gMCwgaiA9IDA7IGkgPCB0ZW1wX2xlbjsgaSsrLCBqKyspIHsKIAkJCQkJdm9sLT5wYXNzd29yZFtqXSA9IHZhbHVlW2ldOwpAQCAtOTc5LDcgKzk5MCw3IEBACiAJCQkJaWYgKHZvbC0+cGFzc3dvcmQgPT0gTlVMTCkgewogCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDSUZTOiBubyBtZW1vcnkgIgogCQkJCQkJCSAgICAiZm9yIHBhc3N3b3JkXG4iKTsKLQkJCQkJcmV0dXJuIDE7CisJCQkJCWdvdG8gY2lmc19wYXJzZV9tb3VudF9lcnI7CiAJCQkJfQogCQkJCXN0cmNweSh2b2wtPnBhc3N3b3JkLCB2YWx1ZSk7CiAJCQl9CkBAIC05ODksMTEgKzEwMDAsMTYgQEAKIAkJCQl2b2wtPlVOQ2lwID0gTlVMTDsKIAkJCX0gZWxzZSBpZiAoc3Rybmxlbih2YWx1ZSwgSU5FVDZfQUREUlNUUkxFTikgPAogCQkJCQkJCUlORVQ2X0FERFJTVFJMRU4pIHsKLQkJCQl2b2wtPlVOQ2lwID0gdmFsdWU7CisJCQkJdm9sLT5VTkNpcCA9IGtzdHJkdXAodmFsdWUsIEdGUF9LRVJORUwpOworCQkJCWlmICghdm9sLT5VTkNpcCkgeworCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDSUZTOiBubyBtZW1vcnkgIgorCQkJCQkJCSAgICAiZm9yIFVOQyBJUFxuIik7CisJCQkJCWdvdG8gY2lmc19wYXJzZV9tb3VudF9lcnI7CisJCQkJfQogCQkJfSBlbHNlIHsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDSUZTOiBpcCBhZGRyZXNzICIKIAkJCQkJCSAgICAidG9vIGxvbmdcbiIpOwotCQkJCXJldHVybiAxOworCQkJCWdvdG8gY2lmc19wYXJzZV9tb3VudF9lcnI7CiAJCQl9CiAJCX0gZWxzZSBpZiAoc3RybmljbXAoZGF0YSwgInNlYyIsIDMpID09IDApIHsKIAkJCWlmICghdmFsdWUgfHwgISp2YWx1ZSkgewpAQCAtMTAwNiw3ICsxMDIyLDcgQEAKIAkJCQkvKiB2b2wtPnNlY0ZsZyB8PSBDSUZTU0VDX01VU1RfU0VBTCB8CiAJCQkJCUNJRlNTRUNfTUFZX0tSQjU7ICovCiAJCQkJY0VSUk9SKDEsICJLcmI1IGNpZnMgcHJpdmFjeSBub3Qgc3VwcG9ydGVkIik7Ci0JCQkJcmV0dXJuIDE7CisJCQkJZ290byBjaWZzX3BhcnNlX21vdW50X2VycjsKIAkJCX0gZWxzZSBpZiAoc3RybmljbXAodmFsdWUsICJrcmI1IiwgNCkgPT0gMCkgewogCQkJCXZvbC0+c2VjRmxnIHw9IENJRlNTRUNfTUFZX0tSQjU7CiAJCQl9IGVsc2UgaWYgKHN0cm5pY21wKHZhbHVlLCAibnRsbXNzcGkiLCA4KSA9PSAwKSB7CkBAIC0xMDM2LDcgKzEwNTIsMjMgQEAKIAkJCQl2b2wtPm51bGxhdXRoID0gMTsKIAkJCX0gZWxzZSB7CiAJCQkJY0VSUk9SKDEsICJiYWQgc2VjdXJpdHkgb3B0aW9uOiAlcyIsIHZhbHVlKTsKLQkJCQlyZXR1cm4gMTsKKwkJCQlnb3RvIGNpZnNfcGFyc2VfbW91bnRfZXJyOworCQkJfQorCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJ2ZXJzIiwgMykgPT0gMCkgeworCQkJaWYgKCF2YWx1ZSB8fCAhKnZhbHVlKSB7CisJCQkJY0VSUk9SKDEsICJubyBwcm90b2NvbCB2ZXJzaW9uIHNwZWNpZmllZCIKKwkJCQkJICAiIGFmdGVyIHZlcnM9IG1vdW50IG9wdGlvbiIpOworCQkJfSBlbHNlIGlmICgoc3RybmljbXAodmFsdWUsICJjaWZzIiwgNCkgPT0gMCkgfHwKKwkJCQkgICAoc3RybmljbXAodmFsdWUsICIxIiwgMSkgPT0gMCkpIHsKKwkJCQkvKiB0aGlzIGlzIHRoZSBkZWZhdWx0ICovCisJCQkJY29udGludWU7CisJCQl9IGVsc2UgaWYgKChzdHJuaWNtcCh2YWx1ZSwgInNtYjIiLCA0KSA9PSAwKSB8fAorCQkJCSAgIChzdHJuaWNtcCh2YWx1ZSwgIjIiLCAxKSA9PSAwKSkgeworI2lmZGVmIENPTkZJR19DSUZTX1NNQjIKKwkJCQl2b2wtPnVzZV9zbWIyID0gdHJ1ZTsKKyNlbHNlCisJCQkJY0VSUk9SKDEsICJzbWIyIHN1cHBvcnQgbm90IGVuYWJsZWQiKTsKKyNlbmRpZiAvKiBDT05GSUdfQ0lGU19TTUIyICovCiAJCQl9CiAJCX0gZWxzZSBpZiAoKHN0cm5pY21wKGRhdGEsICJ1bmMiLCAzKSA9PSAwKQogCQkJICAgfHwgKHN0cm5pY21wKGRhdGEsICJ0YXJnZXQiLCA2KSA9PSAwKQpAQCAtMTA0NCwxMiArMTA3NiwxMiBAQAogCQkJaWYgKCF2YWx1ZSB8fCAhKnZhbHVlKSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ0lGUzogaW52YWxpZCBwYXRoIHRvICIKIAkJCQkJCSAgICAibmV0d29yayByZXNvdXJjZVxuIik7Ci0JCQkJcmV0dXJuIDE7CS8qIG5lZWRzX2FyZzsgKi8KKwkJCQlnb3RvIGNpZnNfcGFyc2VfbW91bnRfZXJyOwogCQkJfQogCQkJaWYgKCh0ZW1wX2xlbiA9IHN0cm5sZW4odmFsdWUsIDMwMCkpIDwgMzAwKSB7CiAJCQkJdm9sLT5VTkMgPSBrbWFsbG9jKHRlbXBfbGVuKzEsIEdGUF9LRVJORUwpOwogCQkJCWlmICh2b2wtPlVOQyA9PSBOVUxMKQotCQkJCQlyZXR1cm4gMTsKKwkJCQkJZ290byBjaWZzX3BhcnNlX21vdW50X2VycjsKIAkJCQlzdHJjcHkodm9sLT5VTkMsIHZhbHVlKTsKIAkJCQlpZiAoc3RybmNtcCh2b2wtPlVOQywgIi8vIiwgMikgPT0gMCkgewogCQkJCQl2b2wtPlVOQ1swXSA9ICdcXCc7CkBAIC0xMDU4LDI3ICsxMDkwLDMyIEBACiAJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCQkJICAgICAgICJDSUZTOiBVTkMgUGF0aCBkb2VzIG5vdCBiZWdpbiAiCiAJCQkJCSAgICAgICAid2l0aCAvLyBvciBcXFxcIFxuIik7Ci0JCQkJCXJldHVybiAxOworCQkJCQlnb3RvIGNpZnNfcGFyc2VfbW91bnRfZXJyOwogCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ0lGUzogVU5DIG5hbWUgdG9vIGxvbmdcbiIpOwotCQkJCXJldHVybiAxOworCQkJCWdvdG8gY2lmc19wYXJzZV9tb3VudF9lcnI7CiAJCQl9CiAJCX0gZWxzZSBpZiAoKHN0cm5pY21wKGRhdGEsICJkb21haW4iLCAzKSA9PSAwKQogCQkJICAgfHwgKHN0cm5pY21wKGRhdGEsICJ3b3JrZ3JvdXAiLCA1KSA9PSAwKSkgewogCQkJaWYgKCF2YWx1ZSB8fCAhKnZhbHVlKSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ0lGUzogaW52YWxpZCBkb21haW4gbmFtZVxuIik7Ci0JCQkJcmV0dXJuIDE7CS8qIG5lZWRzX2FyZzsgKi8KKwkJCQlnb3RvIGNpZnNfcGFyc2VfbW91bnRfZXJyOwogCQkJfQogCQkJLyogQkIgYXJlIHRoZXJlIGNhc2VzIGluIHdoaWNoIGEgY29tbWEgY2FuIGJlIHZhbGlkIGluCiAJCQlhIGRvbWFpbiBuYW1lIGFuZCBuZWVkIHNwZWNpYWwgaGFuZGxpbmc/ICovCiAJCQlpZiAoc3Rybmxlbih2YWx1ZSwgMjU2KSA8IDI1NikgewotCQkJCXZvbC0+ZG9tYWlubmFtZSA9IHZhbHVlOworCQkJCXZvbC0+ZG9tYWlubmFtZSA9IGtzdHJkdXAodmFsdWUsIEdGUF9LRVJORUwpOworCQkJCWlmICghdm9sLT5kb21haW5uYW1lKSB7CisJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNJRlM6IG5vIG1lbW9yeSAiCisJCQkJCQkJICAgICJmb3IgZG9tYWlubmFtZVxuIik7CisJCQkJCWdvdG8gY2lmc19wYXJzZV9tb3VudF9lcnI7CisJCQkJfQogCQkJCWNGWUkoMSwgIkRvbWFpbiBuYW1lIHNldCIpOwogCQkJfSBlbHNlIHsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDSUZTOiBkb21haW4gbmFtZSB0b28gIgogCQkJCQkJICAgICJsb25nXG4iKTsKLQkJCQlyZXR1cm4gMTsKKwkJCQlnb3RvIGNpZnNfcGFyc2VfbW91bnRfZXJyOwogCQkJfQogCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJzcmNhZGRyIiwgNykgPT0gMCkgewogCQkJdm9sLT5zcmNhZGRyLnNzX2ZhbWlseSA9IEFGX1VOU1BFQzsKQEAgLTEwODYsNyArMTEyMyw3IEBACiAJCQlpZiAoIXZhbHVlIHx8ICEqdmFsdWUpIHsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDSUZTOiBzcmNhZGRyIHZhbHVlIgogCQkJCSAgICAgICAiIG5vdCBzcGVjaWZpZWQuXG4iKTsKLQkJCQlyZXR1cm4gMTsJLyogbmVlZHNfYXJnOyAqLworCQkJCWdvdG8gY2lmc19wYXJzZV9tb3VudF9lcnI7CiAJCQl9CiAJCQlpID0gY2lmc19jb252ZXJ0X2FkZHJlc3MoKHN0cnVjdCBzb2NrYWRkciAqKSZ2b2wtPnNyY2FkZHIsCiAJCQkJCQkgdmFsdWUsIHN0cmxlbih2YWx1ZSkpOwpAQCAtMTA5NCwyMCArMTEzMSwyMCBAQAogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNJRlM6ICBDb3VsZCBub3QgcGFyc2UiCiAJCQkJICAgICAgICIgc3JjYWRkcjogJXNcbiIsCiAJCQkJICAgICAgIHZhbHVlKTsKLQkJCQlyZXR1cm4gMTsKKwkJCQlnb3RvIGNpZnNfcGFyc2VfbW91bnRfZXJyOwogCQkJfQogCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJwcmVmaXhwYXRoIiwgMTApID09IDApIHsKIAkJCWlmICghdmFsdWUgfHwgISp2YWx1ZSkgewogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCQkJIkNJRlM6IGludmFsaWQgcGF0aCBwcmVmaXhcbiIpOwotCQkJCXJldHVybiAxOyAgICAgICAvKiBuZWVkc19hcmd1bWVudCAqLworCQkJCWdvdG8gY2lmc19wYXJzZV9tb3VudF9lcnI7CiAJCQl9CiAJCQlpZiAoKHRlbXBfbGVuID0gc3Rybmxlbih2YWx1ZSwgMTAyNCkpIDwgMTAyNCkgewogCQkJCWlmICh2YWx1ZVswXSAhPSAnLycpCiAJCQkJCXRlbXBfbGVuKys7ICAvKiBtaXNzaW5nIGxlYWRpbmcgc2xhc2ggKi8KIAkJCQl2b2wtPnByZXBhdGggPSBrbWFsbG9jKHRlbXBfbGVuKzEsIEdGUF9LRVJORUwpOwogCQkJCWlmICh2b2wtPnByZXBhdGggPT0gTlVMTCkKLQkJCQkJcmV0dXJuIDE7CisJCQkJCWdvdG8gY2lmc19wYXJzZV9tb3VudF9lcnI7CiAJCQkJaWYgKHZhbHVlWzBdICE9ICcvJykgewogCQkJCQl2b2wtPnByZXBhdGhbMF0gPSAnLyc7CiAJCQkJCXN0cmNweSh2b2wtPnByZXBhdGgrMSwgdmFsdWUpOwpAQCAtMTExNiwyNCArMTE1MywzMyBAQAogCQkJCWNGWUkoMSwgInByZWZpeCBwYXRoICVzIiwgdm9sLT5wcmVwYXRoKTsKIAkJCX0gZWxzZSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ0lGUzogcHJlZml4IHRvbyBsb25nXG4iKTsKLQkJCQlyZXR1cm4gMTsKKwkJCQlnb3RvIGNpZnNfcGFyc2VfbW91bnRfZXJyOwogCQkJfQogCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJpb2NoYXJzZXQiLCA5KSA9PSAwKSB7CiAJCQlpZiAoIXZhbHVlIHx8ICEqdmFsdWUpIHsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDSUZTOiBpbnZhbGlkIGlvY2hhcnNldCAiCiAJCQkJCQkgICAgInNwZWNpZmllZFxuIik7Ci0JCQkJcmV0dXJuIDE7CS8qIG5lZWRzX2FyZzsgKi8KKwkJCQlnb3RvIGNpZnNfcGFyc2VfbW91bnRfZXJyOwogCQkJfQogCQkJaWYgKHN0cm5sZW4odmFsdWUsIDY1KSA8IDY1KSB7Ci0JCQkJaWYgKHN0cm5pY21wKHZhbHVlLCAiZGVmYXVsdCIsIDcpKQotCQkJCQl2b2wtPmlvY2hhcnNldCA9IHZhbHVlOworCQkJCWlmIChzdHJuaWNtcCh2YWx1ZSwgImRlZmF1bHQiLCA3KSkgeworCQkJCQl2b2wtPmlvY2hhcnNldCA9IGtzdHJkdXAodmFsdWUsCisJCQkJCQkJCSBHRlBfS0VSTkVMKTsKKworCQkJCQlpZiAoIXZvbC0+aW9jaGFyc2V0KSB7CisJCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDSUZTOiBubyAiCisJCQkJCQkJCSAgICJtZW1vcnkgZm9yIgorCQkJCQkJCQkgICAiY2hhcnNldFxuIik7CisJCQkJCQlnb3RvIGNpZnNfcGFyc2VfbW91bnRfZXJyOworCQkJCQl9CisJCQkJfQogCQkJCS8qIGlmIGlvY2hhcnNldCBub3Qgc2V0IHRoZW4gbG9hZF9ubHNfZGVmYXVsdAogCQkJCSAgIGlzIHVzZWQgYnkgY2FsbGVyICovCiAJCQkJY0ZZSSgxLCAiaW9jaGFyc2V0IHNldCB0byAlcyIsIHZhbHVlKTsKIAkJCX0gZWxzZSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ0lGUzogaW9jaGFyc2V0IG5hbWUgIgogCQkJCQkJICAgICJ0b28gbG9uZy5cbiIpOwotCQkJCXJldHVybiAxOworCQkJCWdvdG8gY2lmc19wYXJzZV9tb3VudF9lcnI7CiAJCQl9CiAJCX0gZWxzZSBpZiAoIXN0cm5pY21wKGRhdGEsICJ1aWQiLCAzKSAmJiB2YWx1ZSAmJiAqdmFsdWUpIHsKIAkJCXZvbC0+bGludXhfdWlkID0gc2ltcGxlX3N0cnRvdWwodmFsdWUsICZ2YWx1ZSwgMCk7CkBAIC0xMjQ2LDcgKzEyOTIsNyBAQAogCQkJCWlmICh2b2wtPmFjdGltZW8gPiBDSUZTX01BWF9BQ1RJTUVPKSB7CiAJCQkJCWNFUlJPUigxLCAiQ0lGUzogYXR0cmlidXRlIGNhY2hlIgogCQkJCQkJCSJ0aW1lb3V0IHRvbyBsYXJnZSIpOwotCQkJCQlyZXR1cm4gMTsKKwkJCQkJZ290byBjaWZzX3BhcnNlX21vdW50X2VycjsKIAkJCQl9CiAJCQl9CiAJCX0gZWxzZSBpZiAoc3RybmljbXAoZGF0YSwgImNyZWRlbnRpYWxzIiwgNCkgPT0gMCkgewpAQCAtMTM5MCw3ICsxNDM2LDcgQEAKICNpZm5kZWYgQ09ORklHX0NJRlNfRlNDQUNIRQogCQkJY0VSUk9SKDEsICJGUy1DYWNoZSBzdXBwb3J0IG5lZWRzIENPTkZJR19DSUZTX0ZTQ0FDSEUiCiAJCQkJICAia2VybmVsIGNvbmZpZyBvcHRpb24gc2V0Iik7Ci0JCQlyZXR1cm4gMTsKKwkJCWdvdG8gY2lmc19wYXJzZV9tb3VudF9lcnI7CiAjZW5kaWYKIAkJCXZvbC0+ZnNjID0gdHJ1ZTsKIAkJfSBlbHNlIGlmIChzdHJuaWNtcChkYXRhLCAibWZzeW1saW5rcyIsIDEwKSA9PSAwKSB7CkBAIC0xNDA1LDEyICsxNDUxLDEyIEBACiAJCWlmIChkZXZuYW1lID09IE5VTEwpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNJRlM6IE1pc3NpbmcgVU5DIG5hbWUgZm9yIG1vdW50ICIKIAkJCQkJCSJ0YXJnZXRcbiIpOwotCQkJcmV0dXJuIDE7CisJCQlnb3RvIGNpZnNfcGFyc2VfbW91bnRfZXJyOwogCQl9CiAJCWlmICgodGVtcF9sZW4gPSBzdHJubGVuKGRldm5hbWUsIDMwMCkpIDwgMzAwKSB7CiAJCQl2b2wtPlVOQyA9IGttYWxsb2ModGVtcF9sZW4rMSwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAodm9sLT5VTkMgPT0gTlVMTCkKLQkJCQlyZXR1cm4gMTsKKwkJCQlnb3RvIGNpZnNfcGFyc2VfbW91bnRfZXJyOwogCQkJc3RyY3B5KHZvbC0+VU5DLCBkZXZuYW1lKTsKIAkJCWlmIChzdHJuY21wKHZvbC0+VU5DLCAiLy8iLCAyKSA9PSAwKSB7CiAJCQkJdm9sLT5VTkNbMF0gPSAnXFwnOwpAQCAtMTQxOCwyMSArMTQ2NCwyMSBAQAogCQkJfSBlbHNlIGlmIChzdHJuY21wKHZvbC0+VU5DLCAiXFxcXCIsIDIpICE9IDApIHsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDSUZTOiBVTkMgUGF0aCBkb2VzIG5vdCAiCiAJCQkJCQkgICAgImJlZ2luIHdpdGggLy8gb3IgXFxcXCBcbiIpOwotCQkJCXJldHVybiAxOworCQkJCWdvdG8gY2lmc19wYXJzZV9tb3VudF9lcnI7CiAJCQl9CiAJCQl2YWx1ZSA9IHN0cnBicmsodm9sLT5VTkMrMiwgIi9cXCIpOwogCQkJaWYgKHZhbHVlKQogCQkJCSp2YWx1ZSA9ICdcXCc7CiAJCX0gZWxzZSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDSUZTOiBVTkMgbmFtZSB0b28gbG9uZ1xuIik7Ci0JCQlyZXR1cm4gMTsKKwkJCWdvdG8gY2lmc19wYXJzZV9tb3VudF9lcnI7CiAJCX0KIAl9CiAKIAlpZiAodm9sLT5tdWx0aXVzZXIgJiYgISh2b2wtPnNlY0ZsZyAmIENJRlNTRUNfTUFZX0tSQjUpKSB7CiAJCWNFUlJPUigxLCAiTXVsdGl1c2VyIG1vdW50cyBjdXJyZW50bHkgcmVxdWlyZSBrcmI1ICIKIAkJCSAgImF1dGhlbnRpY2F0aW9uISIpOwotCQlyZXR1cm4gMTsKKwkJZ290byBjaWZzX3BhcnNlX21vdW50X2VycjsKIAl9CiAKIAlpZiAodm9sLT5VTkNpcCA9PSBOVUxMKQpAQCAtMTQ1MCw3ICsxNDk2LDEyIEBACiAJCXByaW50ayhLRVJOX05PVElDRSAiQ0lGUzogaWdub3JpbmcgZm9yY2VnaWQgbW91bnQgb3B0aW9uICIKIAkJCQkgICAic3BlY2lmaWVkIHdpdGggbm8gZ2lkPSBvcHRpb24uXG4iKTsKIAorCWtmcmVlKG1vdW50ZGF0YV9jb3B5KTsKIAlyZXR1cm4gMDsKKworY2lmc19wYXJzZV9tb3VudF9lcnI6CisJa2ZyZWUobW91bnRkYXRhX2NvcHkpOworCXJldHVybiAxOwogfQogCiAvKiogUmV0dXJucyB0cnVlIGlmIHNyY2FkZHIgaXNuJ3Qgc3BlY2lmaWVkIGFuZCByaHMgaXNuJ3QKQEAgLTIyODAsNyArMjMzMSw3IEBACiAJCXNtYl9idWYgPSAoc3RydWN0IHNtYl9oZHIgKilzZXNfaW5pdF9idWY7CiAKIAkJLyogc2l6ZW9mIFJGQzEwMDJfU0VTU0lPTl9SRVFVRVNUIHdpdGggbm8gc2NvcGUgKi8KLQkJc21iX2J1Zi0+c21iX2J1Zl9sZW5ndGggPSAweDgxMDAwMDQ0OworCQlzbWJfYnVmLT5zbWJfYnVmX2xlbmd0aCA9IGNwdV90b19iZTMyKDB4ODEwMDAwNDQpOwogCQlyYyA9IHNtYl9zZW5kKHNlcnZlciwgc21iX2J1ZiwgMHg0NCk7CiAJCWtmcmVlKHNlc19pbml0X2J1Zik7CiAJCS8qCkBAIC0yNjkxLDggKzI3NDIsMTIgQEAKIAkJcmV0dXJuOwogCiAJdm9sdW1lX2luZm8gPSAqcHZvbHVtZV9pbmZvOworCWtmcmVlKHZvbHVtZV9pbmZvLT51c2VybmFtZSk7CiAJa3pmcmVlKHZvbHVtZV9pbmZvLT5wYXNzd29yZCk7CiAJa2ZyZWUodm9sdW1lX2luZm8tPlVOQyk7CisJa2ZyZWUodm9sdW1lX2luZm8tPlVOQ2lwKTsKKwlrZnJlZSh2b2x1bWVfaW5mby0+ZG9tYWlubmFtZSk7CisJa2ZyZWUodm9sdW1lX2luZm8tPmlvY2hhcnNldCk7CiAJa2ZyZWUodm9sdW1lX2luZm8tPnByZXBhdGgpOwogCWtmcmVlKHZvbHVtZV9pbmZvKTsKIAkqcHZvbHVtZV9pbmZvID0gTlVMTDsKQEAgLTI3MjksMTEgKzI3ODQsNjUgQEAKIAlmdWxsX3BhdGhbdW5jX2xlbiArIGNpZnNfc2ItPnByZXBhdGhsZW5dID0gMDsgLyogYWRkIHRyYWlsaW5nIG51bGwgKi8KIAlyZXR1cm4gZnVsbF9wYXRoOwogfQorCisvKgorICogUGVyZm9ybSBhIGRmcyByZWZlcnJhbCBxdWVyeSBmb3IgYSBzaGFyZSBhbmQgKG9wdGlvbmFsbHkpIHByZWZpeAorICoKKyAqIElmIGEgcmVmZXJyYWwgaXMgZm91bmQsIGNpZnNfc2ItPm1vdW50ZGF0YSB3aWxsIGJlIChyZS0pYWxsb2NhdGVkCisgKiB0byBhIHN0cmluZyBjb250YWluaW5nIHVwZGF0ZWQgb3B0aW9ucyBmb3IgdGhlIHN1Ym1vdW50LiAgT3RoZXJ3aXNlIGl0CisgKiB3aWxsIGJlIGxlZnQgdW50b3VjaGVkLgorICoKKyAqIFJldHVybnMgdGhlIHJjIGZyb20gZ2V0X2Rmc19wYXRoIHRvIHRoZSBjYWxsZXIsIHdoaWNoIGNhbiBiZSB1c2VkIHRvCisgKiBkZXRlcm1pbmUgd2hldGhlciB0aGVyZSB3ZXJlIHJlZmVycmFscy4KKyAqLworc3RhdGljIGludAorZXhwYW5kX2Rmc19yZWZlcnJhbChpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Nlc0luZm8gKnBTZXNJbmZvLAorCQkgICAgc3RydWN0IHNtYl92b2wgKnZvbHVtZV9pbmZvLCBzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiLAorCQkgICAgaW50IGNoZWNrX3ByZWZpeCkKK3sKKwlpbnQgcmM7CisJdW5zaWduZWQgaW50IG51bV9yZWZlcnJhbHMgPSAwOworCXN0cnVjdCBkZnNfaW5mbzNfcGFyYW0gKnJlZmVycmFscyA9IE5VTEw7CisJY2hhciAqZnVsbF9wYXRoID0gTlVMTCwgKnJlZl9wYXRoID0gTlVMTCwgKm1kYXRhID0gTlVMTDsKKworCWZ1bGxfcGF0aCA9IGJ1aWxkX3VuY19wYXRoX3RvX3Jvb3Qodm9sdW1lX2luZm8sIGNpZnNfc2IpOworCWlmIChJU19FUlIoZnVsbF9wYXRoKSkKKwkJcmV0dXJuIFBUUl9FUlIoZnVsbF9wYXRoKTsKKworCS8qIEZvciBERlMgcGF0aHMsIHNraXAgdGhlIGZpcnN0ICdcJyBvZiB0aGUgVU5DICovCisJcmVmX3BhdGggPSBjaGVja19wcmVmaXggPyBmdWxsX3BhdGggKyAxIDogdm9sdW1lX2luZm8tPlVOQyArIDE7CisKKwlyYyA9IGdldF9kZnNfcGF0aCh4aWQsIHBTZXNJbmZvICwgcmVmX3BhdGgsIGNpZnNfc2ItPmxvY2FsX25scywKKwkJCSAgJm51bV9yZWZlcnJhbHMsICZyZWZlcnJhbHMsCisJCQkgIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOworCisJaWYgKCFyYyAmJiBudW1fcmVmZXJyYWxzID4gMCkgeworCQljaGFyICpmYWtlX2Rldm5hbWUgPSBOVUxMOworCisJCW1kYXRhID0gY2lmc19jb21wb3NlX21vdW50X29wdGlvbnMoY2lmc19zYi0+bW91bnRkYXRhLAorCQkJCQkJICAgZnVsbF9wYXRoICsgMSwgcmVmZXJyYWxzLAorCQkJCQkJICAgJmZha2VfZGV2bmFtZSk7CisKKwkJZnJlZV9kZnNfaW5mb19hcnJheShyZWZlcnJhbHMsIG51bV9yZWZlcnJhbHMpOworCQlrZnJlZShmYWtlX2Rldm5hbWUpOworCisJCWlmIChjaWZzX3NiLT5tb3VudGRhdGEgIT0gTlVMTCkKKwkJCWtmcmVlKGNpZnNfc2ItPm1vdW50ZGF0YSk7CisKKwkJaWYgKElTX0VSUihtZGF0YSkpIHsKKwkJCXJjID0gUFRSX0VSUihtZGF0YSk7CisJCQltZGF0YSA9IE5VTEw7CisJCX0KKwkJY2lmc19zYi0+bW91bnRkYXRhID0gbWRhdGE7CisJfQorCWtmcmVlKGZ1bGxfcGF0aCk7CisJcmV0dXJuIHJjOworfQogI2VuZGlmCiAKIGludAogY2lmc19tb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiLAotCQljaGFyICptb3VudF9kYXRhX2dsb2JhbCwgY29uc3QgY2hhciAqZGV2bmFtZSkKKwkJY29uc3QgY2hhciAqZGV2bmFtZSkKIHsKIAlpbnQgcmM7CiAJaW50IHhpZDsKQEAgLTI3NDIsMTMgKzI4NTEsMjAgQEAKIAlzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uOwogCXN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNydlRjcDsKIAljaGFyICAgKmZ1bGxfcGF0aDsKLQljaGFyICptb3VudF9kYXRhID0gbW91bnRfZGF0YV9nbG9iYWw7CiAJc3RydWN0IHRjb25fbGluayAqdGxpbms7CiAjaWZkZWYgQ09ORklHX0NJRlNfREZTX1VQQ0FMTAotCXN0cnVjdCBkZnNfaW5mbzNfcGFyYW0gKnJlZmVycmFscyA9IE5VTEw7Ci0JdW5zaWduZWQgaW50IG51bV9yZWZlcnJhbHMgPSAwOwogCWludCByZWZlcnJhbF93YWxrc19jb3VudCA9IDA7CiB0cnlfbW91bnRfYWdhaW46CisJLyogY2xlYW51cCBhY3Rpdml0aWVzIGlmIHdlJ3JlIGNoYXNpbmcgYSByZWZlcnJhbCAqLworCWlmIChyZWZlcnJhbF93YWxrc19jb3VudCkgeworCQlpZiAodGNvbikKKwkJCWNpZnNfcHV0X3Rjb24odGNvbik7CisJCWVsc2UgaWYgKHBTZXNJbmZvKQorCQkJY2lmc19wdXRfc21iX3NlcyhwU2VzSW5mbyk7CisKKwkJY2xlYW51cF92b2x1bWVfaW5mbygmdm9sdW1lX2luZm8pOworCQlGcmVlWGlkKHhpZCk7CisJfQogI2VuZGlmCiAJcmMgPSAwOwogCXRjb24gPSBOVUxMOwpAQCAtMjc2NSw3ICsyODgxLDggQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKGNpZnNfcGFyc2VfbW91bnRfb3B0aW9ucyhtb3VudF9kYXRhLCBkZXZuYW1lLCB2b2x1bWVfaW5mbykpIHsKKwlpZiAoY2lmc19wYXJzZV9tb3VudF9vcHRpb25zKGNpZnNfc2ItPm1vdW50ZGF0YSwgZGV2bmFtZSwKKwkJCQkgICAgIHZvbHVtZV9pbmZvKSkgewogCQlyYyA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTI4NjEsNiArMjk3OCwyNCBAQAogCQkJICAgICAgICh0Y29uLT5zZXMtPnNlcnZlci0+bWF4QnVmIC0gTUFYX0NJRlNfSERSX1NJWkUpKTsKIAogcmVtb3RlX3BhdGhfY2hlY2s6CisjaWZkZWYgQ09ORklHX0NJRlNfREZTX1VQQ0FMTAorCS8qCisJICogUGVyZm9ybSBhbiB1bmNvbmRpdGlvbmFsIGNoZWNrIGZvciB3aGV0aGVyIHRoZXJlIGFyZSBERlMKKwkgKiByZWZlcnJhbHMgZm9yIHRoaXMgcGF0aCB3aXRob3V0IHByZWZpeCwgdG8gcHJvdmlkZSBzdXBwb3J0CisJICogZm9yIERGUyByZWZlcnJhbHMgZnJvbSB3Mms4IHNlcnZlcnMgd2hpY2ggZG9uJ3Qgc2VlbSB0byByZXNwb25kCisJICogd2l0aCBQQVRIX05PVF9DT1ZFUkVEIHRvIHJlcXVlc3RzIHRoYXQgaW5jbHVkZSB0aGUgcHJlZml4LgorCSAqIENoYXNlIHRoZSByZWZlcnJhbCBpZiBmb3VuZCwgb3RoZXJ3aXNlIGNvbnRpbnVlIG5vcm1hbGx5LgorCSAqLworCWlmIChyZWZlcnJhbF93YWxrc19jb3VudCA9PSAwKSB7CisJCWludCByZWZyYyA9IGV4cGFuZF9kZnNfcmVmZXJyYWwoeGlkLCBwU2VzSW5mbywgdm9sdW1lX2luZm8sCisJCQkJCQljaWZzX3NiLCBmYWxzZSk7CisJCWlmICghcmVmcmMpIHsKKwkJCXJlZmVycmFsX3dhbGtzX2NvdW50Kys7CisJCQlnb3RvIHRyeV9tb3VudF9hZ2FpbjsKKwkJfQorCX0KKyNlbmRpZgorCiAJLyogY2hlY2sgaWYgYSB3aG9sZSBwYXRoIChpbmNsdWRpbmcgcHJlcGF0aCkgaXMgbm90IHJlbW90ZSAqLwogCWlmICghcmMgJiYgdGNvbikgewogCQkvKiBidWlsZF9wYXRoX3RvX3Jvb3Qgd29ya3Mgb25seSB3aGVuIHdlIGhhdmUgYSB2YWxpZCB0Y29uICovCkBAIC0yODk0LDQ2ICszMDI5LDE1IEBACiAJCWlmICgoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX1BPU0lYX1BBVEhTKSA9PSAwKQogCQkJY29udmVydF9kZWxpbWl0ZXIoY2lmc19zYi0+cHJlcGF0aCwKIAkJCQkJQ0lGU19ESVJfU0VQKGNpZnNfc2IpKTsKLQkJZnVsbF9wYXRoID0gYnVpbGRfdW5jX3BhdGhfdG9fcm9vdCh2b2x1bWVfaW5mbywgY2lmc19zYik7Ci0JCWlmIChJU19FUlIoZnVsbF9wYXRoKSkgewotCQkJcmMgPSBQVFJfRVJSKGZ1bGxfcGF0aCk7Ci0JCQlnb3RvIG1vdW50X2ZhaWxfY2hlY2s7Ci0JCX0KIAotCQljRllJKDEsICJHZXR0aW5nIHJlZmVycmFsIGZvcjogJXMiLCBmdWxsX3BhdGgpOwotCQlyYyA9IGdldF9kZnNfcGF0aCh4aWQsIHBTZXNJbmZvICwgZnVsbF9wYXRoICsgMSwKLQkJCWNpZnNfc2ItPmxvY2FsX25scywgJm51bV9yZWZlcnJhbHMsICZyZWZlcnJhbHMsCi0JCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKLQkJaWYgKCFyYyAmJiBudW1fcmVmZXJyYWxzID4gMCkgewotCQkJY2hhciAqZmFrZV9kZXZuYW1lID0gTlVMTDsKKwkJcmMgPSBleHBhbmRfZGZzX3JlZmVycmFsKHhpZCwgcFNlc0luZm8sIHZvbHVtZV9pbmZvLCBjaWZzX3NiLAorCQkJCQkgdHJ1ZSk7CiAKLQkJCWlmIChtb3VudF9kYXRhICE9IG1vdW50X2RhdGFfZ2xvYmFsKQotCQkJCWtmcmVlKG1vdW50X2RhdGEpOwotCi0JCQltb3VudF9kYXRhID0gY2lmc19jb21wb3NlX21vdW50X29wdGlvbnMoCi0JCQkJCWNpZnNfc2ItPm1vdW50ZGF0YSwgZnVsbF9wYXRoICsgMSwKLQkJCQkJcmVmZXJyYWxzLCAmZmFrZV9kZXZuYW1lKTsKLQotCQkJZnJlZV9kZnNfaW5mb19hcnJheShyZWZlcnJhbHMsIG51bV9yZWZlcnJhbHMpOwotCQkJa2ZyZWUoZmFrZV9kZXZuYW1lKTsKLQkJCWtmcmVlKGZ1bGxfcGF0aCk7Ci0KLQkJCWlmIChJU19FUlIobW91bnRfZGF0YSkpIHsKLQkJCQlyYyA9IFBUUl9FUlIobW91bnRfZGF0YSk7Ci0JCQkJbW91bnRfZGF0YSA9IE5VTEw7Ci0JCQkJZ290byBtb3VudF9mYWlsX2NoZWNrOwotCQkJfQotCi0JCQlpZiAodGNvbikKLQkJCQljaWZzX3B1dF90Y29uKHRjb24pOwotCQkJZWxzZSBpZiAocFNlc0luZm8pCi0JCQkJY2lmc19wdXRfc21iX3NlcyhwU2VzSW5mbyk7Ci0KLQkJCWNsZWFudXBfdm9sdW1lX2luZm8oJnZvbHVtZV9pbmZvKTsKKwkJaWYgKCFyYykgewogCQkJcmVmZXJyYWxfd2Fsa3NfY291bnQrKzsKLQkJCUZyZWVYaWQoeGlkKTsKIAkJCWdvdG8gdHJ5X21vdW50X2FnYWluOwogCQl9CisJCWdvdG8gbW91bnRfZmFpbF9jaGVjazsKICNlbHNlIC8qIE5vIERGUyBzdXBwb3J0LCByZXR1cm4gZXJyb3Igb24gbW91bnQgKi8KIAkJcmMgPSAtRU9QTk9UU1VQUDsKICNlbmRpZgpAQCAtMjk2Niw4ICszMDcwLDYgQEAKIG1vdW50X2ZhaWxfY2hlY2s6CiAJLyogb24gZXJyb3IgZnJlZSBzZXNpbmZvIGFuZCB0Y29uIHN0cnVjdCBpZiBuZWVkZWQgKi8KIAlpZiAocmMpIHsKLQkJaWYgKG1vdW50X2RhdGEgIT0gbW91bnRfZGF0YV9nbG9iYWwpCi0JCQlrZnJlZShtb3VudF9kYXRhKTsKIAkJLyogSWYgZmluZF91bmMgc3VjY2VlZGVkIHRoZW4gcmMgPT0gMCBzbyB3ZSBjYW4gbm90IGVuZCAqLwogCQkvKiB1cCBhY2NpZGVudGFsbHkgZnJlZWluZyBzb21lb25lIGVsc2VzIHRjb24gc3RydWN0ICovCiAJCWlmICh0Y29uKQpAQCAtMzA4Myw3ICszMTg1LDggQEAKIAliY2NfcHRyICs9IHN0cmxlbigiPz8/Pz8iKTsKIAliY2NfcHRyICs9IDE7CiAJY291bnQgPSBiY2NfcHRyIC0gJnBTTUItPlBhc3N3b3JkWzBdOwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBjb3VudDsKKwlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggPSBjcHVfdG9fYmUzMihiZTMyX3RvX2NwdSgKKwkJCQkJcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoKSArIGNvdW50KTsKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihjb3VudCk7CiAKIAlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgc2VzLCBzbWJfYnVmZmVyLCBzbWJfYnVmZmVyX3Jlc3BvbnNlLCAmbGVuZ3RoLApAQCAtMzI1OCw3ICszMzYxLDkgQEAKIAlzdHJ1Y3QgY2lmc1Nlc0luZm8gKnNlczsKIAlzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uID0gTlVMTDsKIAlzdHJ1Y3Qgc21iX3ZvbCAqdm9sX2luZm87Ci0JY2hhciB1c2VybmFtZVtNQVhfVVNFUk5BTUVfU0laRSArIDFdOworCWNoYXIgdXNlcm5hbWVbMjhdOyAvKiBiaWcgZW5vdWdoIGZvciAia3JiNTB4IiArIGhleCBvZiBVTE9OR19NQVggNisxNiAqLworCQkJICAgLyogV2UgdXNlZCB0byBoYXZlIHRoaXMgYXMgTUFYX1VTRVJOQU1FIHdoaWNoIGlzICAgKi8KKwkJCSAgIC8qIHdheSB0b28gYmlnIG5vdyAoMjU2IGluc3RlYWQgb2YgMzIpICovCiAKIAl2b2xfaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCp2b2xfaW5mbyksIEdGUF9LRVJORUwpOwogCWlmICh2b2xfaW5mbyA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2V4cG9ydC5jIGIvZnMvY2lmcy9leHBvcnQuYwppbmRleCA5OTNmODIwLi41NWQ4N2FjIDEwMDY0NAotLS0gYS9mcy9jaWZzL2V4cG9ydC5jCisrKyBiL2ZzL2NpZnMvZXhwb3J0LmMKQEAgLTQ1LDcgKzQ1LDcgQEAKICNpbmNsdWRlICJjaWZzX2RlYnVnLmgiCiAjaW5jbHVkZSAiY2lmc2ZzLmgiCiAKLSNpZmRlZiBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwKKyNpZmRlZiBDSUZTX05GU0RfRVhQT1JUCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqY2lmc19nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKIAkvKiBCQiBuZWVkIHRvIGFkZCBjb2RlIGhlcmUgZXZlbnR1YWxseSB0byBlbmFibGUgZXhwb3J0IHZpYSBORlNEICovCkBAIC02Myw1ICs2Myw1IEBACiAJLmVuY29kZV9mcyA9ICAqLwogfTsKIAotI2VuZGlmIC8qIEVYUEVSSU1FTlRBTCAqLworI2VuZGlmIC8qIENJRlNfTkZTRF9FWFBPUlQgKi8KIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9maWxlLmMgYi9mcy9jaWZzL2ZpbGUuYwppbmRleCBmYWY1OTUyLi5jNjcyYWZlIDEwMDY0NAotLS0gYS9mcy9jaWZzL2ZpbGUuYworKysgYi9mcy9jaWZzL2ZpbGUuYwpAQCAtODU3LDk1ICs4NTcsNiBAQAogCQljaWZzaS0+c2VydmVyX2VvZiA9IGVuZF9vZl93cml0ZTsKIH0KIAotc3NpemVfdCBjaWZzX3VzZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp3cml0ZV9kYXRhLAotCXNpemVfdCB3cml0ZV9zaXplLCBsb2ZmX3QgKnBvZmZzZXQpCi17Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7Ci0JaW50IHJjID0gMDsKLQl1bnNpZ25lZCBpbnQgYnl0ZXNfd3JpdHRlbiA9IDA7Ci0JdW5zaWduZWQgaW50IHRvdGFsX3dyaXR0ZW47Ci0Jc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYjsKLQlzdHJ1Y3QgY2lmc1Rjb25JbmZvICpwVGNvbjsKLQlpbnQgeGlkOwotCXN0cnVjdCBjaWZzRmlsZUluZm8gKm9wZW5fZmlsZTsKLQlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqY2lmc2kgPSBDSUZTX0koaW5vZGUpOwotCi0JY2lmc19zYiA9IENJRlNfU0IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9zYik7Ci0KLQkvKiBjRllJKDEsICIgd3JpdGUgJWQgYnl0ZXMgdG8gb2Zmc2V0ICVsbGQgb2YgJXMiLCB3cml0ZV9zaXplLAotCSAgICpwb2Zmc2V0LCBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX25hbWUubmFtZSk7ICovCi0KLQlpZiAoZmlsZS0+cHJpdmF0ZV9kYXRhID09IE5VTEwpCi0JCXJldHVybiAtRUJBREY7Ci0KLQlvcGVuX2ZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JcFRjb24gPSB0bGlua190Y29uKG9wZW5fZmlsZS0+dGxpbmspOwotCi0JcmMgPSBnZW5lcmljX3dyaXRlX2NoZWNrcyhmaWxlLCBwb2Zmc2V0LCAmd3JpdGVfc2l6ZSwgMCk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLQl4aWQgPSBHZXRYaWQoKTsKLQotCWZvciAodG90YWxfd3JpdHRlbiA9IDA7IHdyaXRlX3NpemUgPiB0b3RhbF93cml0dGVuOwotCSAgICAgdG90YWxfd3JpdHRlbiArPSBieXRlc193cml0dGVuKSB7Ci0JCXJjID0gLUVBR0FJTjsKLQkJd2hpbGUgKHJjID09IC1FQUdBSU4pIHsKLQkJCWlmIChmaWxlLT5wcml2YXRlX2RhdGEgPT0gTlVMTCkgewotCQkJCS8qIGZpbGUgaGFzIGJlZW4gY2xvc2VkIG9uIHVzICovCi0JCQkJRnJlZVhpZCh4aWQpOwotCQkJLyogaWYgd2UgaGF2ZSBnb3R0ZW4gaGVyZSB3ZSBoYXZlIHdyaXR0ZW4gc29tZSBkYXRhCi0JCQkgICBhbmQgYmxvY2tlZCwgYW5kIHRoZSBmaWxlIGhhcyBiZWVuIGZyZWVkIG9uIHVzIHdoaWxlCi0JCQkgICB3ZSBibG9ja2VkIHNvIHJldHVybiB3aGF0IHdlIG1hbmFnZWQgdG8gd3JpdGUgKi8KLQkJCQlyZXR1cm4gdG90YWxfd3JpdHRlbjsKLQkJCX0KLQkJCWlmIChvcGVuX2ZpbGUtPmludmFsaWRIYW5kbGUpIHsKLQkJCQkvKiB3ZSBjb3VsZCBkZWFkbG9jayBpZiB3ZSBjYWxsZWQKLQkJCQkgICBmaWxlbWFwX2ZkYXRhd2FpdCBmcm9tIGhlcmUgc28gdGVsbAotCQkJCSAgIHJlb3Blbl9maWxlIG5vdCB0byBmbHVzaCBkYXRhIHRvIHNlcnZlcgotCQkJCSAgIG5vdyAqLwotCQkJCXJjID0gY2lmc19yZW9wZW5fZmlsZShvcGVuX2ZpbGUsIGZhbHNlKTsKLQkJCQlpZiAocmMgIT0gMCkKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCXJjID0gQ0lGU1NNQldyaXRlKHhpZCwgcFRjb24sCi0JCQkJb3Blbl9maWxlLT5uZXRmaWQsCi0JCQkJbWluX3QoY29uc3QgaW50LCBjaWZzX3NiLT53c2l6ZSwKLQkJCQkgICAgICB3cml0ZV9zaXplIC0gdG90YWxfd3JpdHRlbiksCi0JCQkJKnBvZmZzZXQsICZieXRlc193cml0dGVuLAotCQkJCU5VTEwsIHdyaXRlX2RhdGEgKyB0b3RhbF93cml0dGVuLCAwKTsKLQkJfQotCQlpZiAocmMgfHwgKGJ5dGVzX3dyaXR0ZW4gPT0gMCkpIHsKLQkJCWlmICh0b3RhbF93cml0dGVuKQotCQkJCWJyZWFrOwotCQkJZWxzZSB7Ci0JCQkJRnJlZVhpZCh4aWQpOwotCQkJCXJldHVybiByYzsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWNpZnNfdXBkYXRlX2VvZihjaWZzaSwgKnBvZmZzZXQsIGJ5dGVzX3dyaXR0ZW4pOwotCQkJKnBvZmZzZXQgKz0gYnl0ZXNfd3JpdHRlbjsKLQkJfQotCX0KLQotCWNpZnNfc3RhdHNfYnl0ZXNfd3JpdHRlbihwVGNvbiwgdG90YWxfd3JpdHRlbik7Ci0KLS8qIERvIG5vdCB1cGRhdGUgbG9jYWwgbXRpbWUgLSBzZXJ2ZXIgd2lsbCBzZXQgaXRzIGFjdHVhbCB2YWx1ZSBvbiB3cml0ZQotICoJaW5vZGUtPmlfY3RpbWUgPSBpbm9kZS0+aV9tdGltZSA9Ci0gKiAJCWN1cnJlbnRfZnNfdGltZShpbm9kZS0+aV9zYik7Ki8KLQlpZiAodG90YWxfd3JpdHRlbiA+IDApIHsKLQkJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQkJaWYgKCpwb2Zmc2V0ID4gaW5vZGUtPmlfc2l6ZSkKLQkJCWlfc2l6ZV93cml0ZShpbm9kZSwgKnBvZmZzZXQpOwotCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7Ci0JfQotCW1hcmtfaW5vZGVfZGlydHlfc3luYyhpbm9kZSk7Ci0KLQlGcmVlWGlkKHhpZCk7Ci0JcmV0dXJuIHRvdGFsX3dyaXR0ZW47Ci19Ci0KIHN0YXRpYyBzc2l6ZV90IGNpZnNfd3JpdGUoc3RydWN0IGNpZnNGaWxlSW5mbyAqb3Blbl9maWxlLAogCQkJICBjb25zdCBjaGFyICp3cml0ZV9kYXRhLCBzaXplX3Qgd3JpdGVfc2l6ZSwKIAkJCSAgbG9mZl90ICpwb2Zmc2V0KQpAQCAtMTQyMCw5ICsxMzMxLDEwIEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IGNpZnNfd3JpdGVwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKK3N0YXRpYyBpbnQKK2NpZnNfd3JpdGVwYWdlX2xvY2tlZChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiB7Ci0JaW50IHJjID0gLUVGQVVMVDsKKwlpbnQgcmM7CiAJaW50IHhpZDsKIAogCXhpZCA9IEdldFhpZCgpOwpAQCAtMTQ0MiwxNSArMTM1NCwyOSBAQAogCSAqIHRvIGZhaWwgdG8gdXBkYXRlIHdpdGggdGhlIHN0YXRlIG9mIHRoZSBwYWdlIGNvcnJlY3RseS4KIAkgKi8KIAlzZXRfcGFnZV93cml0ZWJhY2socGFnZSk7CityZXRyeV93cml0ZToKIAlyYyA9IGNpZnNfcGFydGlhbHBhZ2V3cml0ZShwYWdlLCAwLCBQQUdFX0NBQ0hFX1NJWkUpOwotCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsgLyogQkIgYWRkIGNoZWNrIGZvciBlcnJvciBhbmQgQ2xlYXJ1cHRvZGF0ZT8gKi8KLQl1bmxvY2tfcGFnZShwYWdlKTsKKwlpZiAocmMgPT0gLUVBR0FJTiAmJiB3YmMtPnN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCkKKwkJZ290byByZXRyeV93cml0ZTsKKwllbHNlIGlmIChyYyA9PSAtRUFHQUlOKQorCQlyZWRpcnR5X3BhZ2VfZm9yX3dyaXRlcGFnZSh3YmMsIHBhZ2UpOworCWVsc2UgaWYgKHJjICE9IDApCisJCVNldFBhZ2VFcnJvcihwYWdlKTsKKwllbHNlCisJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKIAllbmRfcGFnZV93cml0ZWJhY2socGFnZSk7CiAJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCUZyZWVYaWQoeGlkKTsKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBpbnQgY2lmc193cml0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQoreworCWludCByYyA9IGNpZnNfd3JpdGVwYWdlX2xvY2tlZChwYWdlLCB3YmMpOworCXVubG9ja19wYWdlKHBhZ2UpOworCXJldHVybiByYzsKK30KKwogc3RhdGljIGludCBjaWZzX3dyaXRlX2VuZChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQlsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sIHVuc2lnbmVkIGNvcGllZCwKIAkJCXN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpmc2RhdGEpCkBAIC0xNTE5LDggKzE0NDUsMTMgQEAKIAljRllJKDEsICJTeW5jIGZpbGUgLSBuYW1lOiAlcyBkYXRhc3luYzogMHgleCIsCiAJCWZpbGUtPmZfcGF0aC5kZW50cnktPmRfbmFtZS5uYW1lLCBkYXRhc3luYyk7CiAKLQlpZiAoIUNJRlNfSShpbm9kZSktPmNsaWVudENhbkNhY2hlUmVhZCkKLQkJY2lmc19pbnZhbGlkYXRlX21hcHBpbmcoaW5vZGUpOworCWlmICghQ0lGU19JKGlub2RlKS0+Y2xpZW50Q2FuQ2FjaGVSZWFkKSB7CisJCXJjID0gY2lmc19pbnZhbGlkYXRlX21hcHBpbmcoaW5vZGUpOworCQlpZiAocmMpIHsKKwkJCWNGWUkoMSwgInJjOiAlZCBkdXJpbmcgaW52YWxpZGF0ZSBwaGFzZSIsIHJjKTsKKwkJCXJjID0gMDsgLyogZG9uJ3QgY2FyZSBhYm91dCBpdCBpbiBmc3luYyAqLworCQl9CisJfQogCiAJdGNvbiA9IHRsaW5rX3Rjb24oc21iZmlsZS0+dGxpbmspOwogCWlmICghKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9OT1NTWU5DKSkKQEAgLTE3MjYsNyArMTY1Nyw3IEBACiAJcmV0dXJuIHRvdGFsX3dyaXR0ZW47CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGNpZnNfdXNlcl93cml0ZXYoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKK3NzaXplX3QgY2lmc191c2VyX3dyaXRldihzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAogCQkJCXVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcykKIHsKIAlzc2l6ZV90IHdyaXR0ZW47CkBAIC0xODQ5LDE3ICsxNzgwLDcgQEAKIAlyZXR1cm4gdG90YWxfcmVhZDsKIH0KIAotc3NpemVfdCBjaWZzX3VzZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnJlYWRfZGF0YSwKLQkJICAgICAgIHNpemVfdCByZWFkX3NpemUsIGxvZmZfdCAqcG9mZnNldCkKLXsKLQlzdHJ1Y3QgaW92ZWMgaW92OwotCWlvdi5pb3ZfYmFzZSA9IHJlYWRfZGF0YTsKLQlpb3YuaW92X2xlbiA9IHJlYWRfc2l6ZTsKLQotCXJldHVybiBjaWZzX2lvdmVjX3JlYWQoZmlsZSwgJmlvdiwgMSwgcG9mZnNldCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGNpZnNfdXNlcl9yZWFkdihzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorc3NpemVfdCBjaWZzX3VzZXJfcmVhZHYoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpCiB7CiAJc3NpemVfdCByZWFkOwpAQCAtMTk4Nyw4ICsxOTA4LDExIEBACiAKIAl4aWQgPSBHZXRYaWQoKTsKIAotCWlmICghQ0lGU19JKGlub2RlKS0+Y2xpZW50Q2FuQ2FjaGVSZWFkKQotCQljaWZzX2ludmFsaWRhdGVfbWFwcGluZyhpbm9kZSk7CisJaWYgKCFDSUZTX0koaW5vZGUpLT5jbGllbnRDYW5DYWNoZVJlYWQpIHsKKwkJcmMgPSBjaWZzX2ludmFsaWRhdGVfbWFwcGluZyhpbm9kZSk7CisJCWlmIChyYykKKwkJCXJldHVybiByYzsKKwl9CiAKIAlyYyA9IGdlbmVyaWNfZmlsZV9tbWFwKGZpbGUsIHZtYSk7CiAJaWYgKHJjID09IDApCkBAIC0yNDE1LDYgKzIzMzksMjcgQEAKIAkJY2lmc19mc2NhY2hlX2ludmFsaWRhdGVfcGFnZShwYWdlLCAmY2lmc2ktPnZmc19pbm9kZSk7CiB9CiAKK3N0YXRpYyBpbnQgY2lmc19sYXVuZGVyX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJaW50IHJjID0gMDsKKwlsb2ZmX3QgcmFuZ2Vfc3RhcnQgPSBwYWdlX29mZnNldChwYWdlKTsKKwlsb2ZmX3QgcmFuZ2VfZW5kID0gcmFuZ2Vfc3RhcnQgKyAobG9mZl90KShQQUdFX0NBQ0hFX1NJWkUgLSAxKTsKKwlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjID0geworCQkuc3luY19tb2RlID0gV0JfU1lOQ19BTEwsCisJCS5ucl90b193cml0ZSA9IDAsCisJCS5yYW5nZV9zdGFydCA9IHJhbmdlX3N0YXJ0LAorCQkucmFuZ2VfZW5kID0gcmFuZ2VfZW5kLAorCX07CisKKwljRllJKDEsICJMYXVuZGVyIHBhZ2U6ICVwIiwgcGFnZSk7CisKKwlpZiAoY2xlYXJfcGFnZV9kaXJ0eV9mb3JfaW8ocGFnZSkpCisJCXJjID0gY2lmc193cml0ZXBhZ2VfbG9ja2VkKHBhZ2UsICZ3YmMpOworCisJY2lmc19mc2NhY2hlX2ludmFsaWRhdGVfcGFnZShwYWdlLCBwYWdlLT5tYXBwaW5nLT5ob3N0KTsKKwlyZXR1cm4gcmM7Cit9CisKIHZvaWQgY2lmc19vcGxvY2tfYnJlYWsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBjaWZzRmlsZUluZm8gKmNmaWxlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjaWZzRmlsZUluZm8sCkBAIC0yNDg2LDcgKzI0MzEsNyBAQAogCS5zZXRfcGFnZV9kaXJ0eSA9IF9fc2V0X3BhZ2VfZGlydHlfbm9idWZmZXJzLAogCS5yZWxlYXNlcGFnZSA9IGNpZnNfcmVsZWFzZV9wYWdlLAogCS5pbnZhbGlkYXRlcGFnZSA9IGNpZnNfaW52YWxpZGF0ZV9wYWdlLAotCS8qIC5kaXJlY3RfSU8gPSAqLworCS5sYXVuZGVyX3BhZ2UgPSBjaWZzX2xhdW5kZXJfcGFnZSwKIH07CiAKIC8qCkBAIC0yNTAzLDUgKzI0NDgsNSBAQAogCS5zZXRfcGFnZV9kaXJ0eSA9IF9fc2V0X3BhZ2VfZGlydHlfbm9idWZmZXJzLAogCS5yZWxlYXNlcGFnZSA9IGNpZnNfcmVsZWFzZV9wYWdlLAogCS5pbnZhbGlkYXRlcGFnZSA9IGNpZnNfaW52YWxpZGF0ZV9wYWdlLAotCS8qIC5kaXJlY3RfSU8gPSAqLworCS5sYXVuZGVyX3BhZ2UgPSBjaWZzX2xhdW5kZXJfcGFnZSwKIH07CmRpZmYgLS1naXQgYS9mcy9jaWZzL2lub2RlLmMgYi9mcy9jaWZzL2lub2RlLmMKaW5kZXggODg1MjQ3MC4uZGUwMmVkNSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9pbm9kZS5jCisrKyBiL2ZzL2NpZnMvaW5vZGUuYwpAQCAtODc4LDcgKzg3OCw3IEBACiB9CiAKIC8qIGdldHMgcm9vdCBpbm9kZSAqLwotc3RydWN0IGlub2RlICpjaWZzX3Jvb3RfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubykKK3N0cnVjdCBpbm9kZSAqY2lmc19yb290X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlpbnQgeGlkOwogCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IgPSBDSUZTX1NCKHNiKTsKQEAgLTE2ODMsNzEgKzE2ODMsNzAgQEAKIC8qCiAgKiBaYXAgdGhlIGNhY2hlLiBDYWxsZWQgd2hlbiBpbnZhbGlkX21hcHBpbmcgZmxhZyBpcyBzZXQuCiAgKi8KLXZvaWQKK2ludAogY2lmc19pbnZhbGlkYXRlX21hcHBpbmcoc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlpbnQgcmM7CisJaW50IHJjID0gMDsKIAlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqY2lmc19pID0gQ0lGU19JKGlub2RlKTsKIAogCWNpZnNfaS0+aW52YWxpZF9tYXBwaW5nID0gZmFsc2U7CiAKLQkvKiB3cml0ZSBiYWNrIGFueSBjYWNoZWQgZGF0YSAqLwogCWlmIChpbm9kZS0+aV9tYXBwaW5nICYmIGlub2RlLT5pX21hcHBpbmctPm5ycGFnZXMgIT0gMCkgewotCQlyYyA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoaW5vZGUtPmlfbWFwcGluZyk7Ci0JCW1hcHBpbmdfc2V0X2Vycm9yKGlub2RlLT5pX21hcHBpbmcsIHJjKTsKKwkJcmMgPSBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMihpbm9kZS0+aV9tYXBwaW5nKTsKKwkJaWYgKHJjKSB7CisJCQljRVJST1IoMSwgIiVzOiBjb3VsZCBub3QgaW52YWxpZGF0ZSBpbm9kZSAlcCIsIF9fZnVuY19fLAorCQkJICAgICAgIGlub2RlKTsKKwkJCWNpZnNfaS0+aW52YWxpZF9tYXBwaW5nID0gdHJ1ZTsKKwkJfQogCX0KLQlpbnZhbGlkYXRlX3JlbW90ZV9pbm9kZShpbm9kZSk7CisKIAljaWZzX2ZzY2FjaGVfcmVzZXRfaW5vZGVfY29va2llKGlub2RlKTsKKwlyZXR1cm4gcmM7CiB9CiAKLWludCBjaWZzX3JldmFsaWRhdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlscCkKK2ludCBjaWZzX3JldmFsaWRhdGVfZmlsZV9hdHRyKHN0cnVjdCBmaWxlICpmaWxwKQogewogCWludCByYyA9IDA7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGNpZnNGaWxlSW5mbyAqY2ZpbGUgPSAoc3RydWN0IGNpZnNGaWxlSW5mbyAqKSBmaWxwLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAoIWNpZnNfaW5vZGVfbmVlZHNfcmV2YWwoaW5vZGUpKQotCQlnb3RvIGNoZWNrX2ludmFsOworCQlyZXR1cm4gcmM7CiAKIAlpZiAodGxpbmtfdGNvbihjZmlsZS0+dGxpbmspLT51bml4X2V4dCkKIAkJcmMgPSBjaWZzX2dldF9maWxlX2luZm9fdW5peChmaWxwKTsKIAllbHNlCiAJCXJjID0gY2lmc19nZXRfZmlsZV9pbmZvKGZpbHApOwogCi1jaGVja19pbnZhbDoKLQlpZiAoQ0lGU19JKGlub2RlKS0+aW52YWxpZF9tYXBwaW5nKQotCQljaWZzX2ludmFsaWRhdGVfbWFwcGluZyhpbm9kZSk7Ci0KIAlyZXR1cm4gcmM7CiB9CiAKLS8qIHJldmFsaWRhdGUgYSBkZW50cnkncyBpbm9kZSBhdHRyaWJ1dGVzICovCi1pbnQgY2lmc19yZXZhbGlkYXRlX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCitpbnQgY2lmc19yZXZhbGlkYXRlX2RlbnRyeV9hdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKIAlpbnQgeGlkOwogCWludCByYyA9IDA7Ci0JY2hhciAqZnVsbF9wYXRoID0gTlVMTDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkZW50cnktPmRfc2I7CisJY2hhciAqZnVsbF9wYXRoID0gTlVMTDsKIAogCWlmIChpbm9kZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCXhpZCA9IEdldFhpZCgpOwotCiAJaWYgKCFjaWZzX2lub2RlX25lZWRzX3JldmFsKGlub2RlKSkKLQkJZ290byBjaGVja19pbnZhbDsKKwkJcmV0dXJuIHJjOworCisJeGlkID0gR2V0WGlkKCk7CiAKIAkvKiBjYW4gbm90IHNhZmVseSBncmFiIHRoZSByZW5hbWUgc2VtIGhlcmUgaWYgcmVuYW1lIGNhbGxzIHJldmFsaWRhdGUKIAkgICBzaW5jZSB0aGF0IHdvdWxkIGRlYWRsb2NrICovCiAJZnVsbF9wYXRoID0gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShkZW50cnkpOwogCWlmIChmdWxsX3BhdGggPT0gTlVMTCkgewogCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gY2hlY2tfaW52YWw7CisJCWdvdG8gb3V0OwogCX0KIAotCWNGWUkoMSwgIlJldmFsaWRhdGU6ICVzIGlub2RlIDB4JXAgY291bnQgJWQgZGVudHJ5OiAweCVwIGRfdGltZSAlbGQgIgotCQkgImppZmZpZXMgJWxkIiwgZnVsbF9wYXRoLCBpbm9kZSwgaW5vZGUtPmlfY291bnQuY291bnRlciwKKwljRllJKDEsICJVcGRhdGUgYXR0cmlidXRlczogJXMgaW5vZGUgMHglcCBjb3VudCAlZCBkZW50cnk6IDB4JXAgZF90aW1lICIKKwkJICIlbGQgamlmZmllcyAlbGQiLCBmdWxsX3BhdGgsIGlub2RlLCBpbm9kZS0+aV9jb3VudC5jb3VudGVyLAogCQkgZGVudHJ5LCBkZW50cnktPmRfdGltZSwgamlmZmllcyk7CiAKIAlpZiAoY2lmc19zYl9tYXN0ZXJfdGNvbihDSUZTX1NCKHNiKSktPnVuaXhfZXh0KQpAQCAtMTc1Niw0MSArMTc1NSw4MyBAQAogCQlyYyA9IGNpZnNfZ2V0X2lub2RlX2luZm8oJmlub2RlLCBmdWxsX3BhdGgsIE5VTEwsIHNiLAogCQkJCQkgeGlkLCBOVUxMKTsKIAotY2hlY2tfaW52YWw6Ci0JaWYgKENJRlNfSShpbm9kZSktPmludmFsaWRfbWFwcGluZykKLQkJY2lmc19pbnZhbGlkYXRlX21hcHBpbmcoaW5vZGUpOwotCitvdXQ6CiAJa2ZyZWUoZnVsbF9wYXRoKTsKIAlGcmVlWGlkKHhpZCk7CiAJcmV0dXJuIHJjOwogfQogCitpbnQgY2lmc19yZXZhbGlkYXRlX2ZpbGUoc3RydWN0IGZpbGUgKmZpbHApCit7CisJaW50IHJjOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCisJcmMgPSBjaWZzX3JldmFsaWRhdGVfZmlsZV9hdHRyKGZpbHApOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJaWYgKENJRlNfSShpbm9kZSktPmludmFsaWRfbWFwcGluZykKKwkJcmMgPSBjaWZzX2ludmFsaWRhdGVfbWFwcGluZyhpbm9kZSk7CisJcmV0dXJuIHJjOworfQorCisvKiByZXZhbGlkYXRlIGEgZGVudHJ5J3MgaW5vZGUgYXR0cmlidXRlcyAqLworaW50IGNpZnNfcmV2YWxpZGF0ZV9kZW50cnkoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCWludCByYzsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCisJcmMgPSBjaWZzX3JldmFsaWRhdGVfZGVudHJ5X2F0dHIoZGVudHJ5KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCWlmIChDSUZTX0koaW5vZGUpLT5pbnZhbGlkX21hcHBpbmcpCisJCXJjID0gY2lmc19pbnZhbGlkYXRlX21hcHBpbmcoaW5vZGUpOworCXJldHVybiByYzsKK30KKwogaW50IGNpZnNfZ2V0YXR0cihzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQkgc3RydWN0IGtzdGF0ICpzdGF0KQogewogCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IgPSBDSUZTX1NCKGRlbnRyeS0+ZF9zYik7CiAJc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiA9IGNpZnNfc2JfbWFzdGVyX3Rjb24oY2lmc19zYik7Ci0JaW50IGVyciA9IGNpZnNfcmV2YWxpZGF0ZV9kZW50cnkoZGVudHJ5KTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCWludCByYzsKIAotCWlmICghZXJyKSB7Ci0JCWdlbmVyaWNfZmlsbGF0dHIoZGVudHJ5LT5kX2lub2RlLCBzdGF0KTsKLQkJc3RhdC0+Ymxrc2l6ZSA9IENJRlNfTUFYX01TR1NJWkU7Ci0JCXN0YXQtPmlubyA9IENJRlNfSShkZW50cnktPmRfaW5vZGUpLT51bmlxdWVpZDsKLQotCQkvKgotCQkgKiBJZiBvbiBhIG11bHRpdXNlciBtb3VudCB3aXRob3V0IHVuaXggZXh0ZW5zaW9ucywgYW5kIHRoZQotCQkgKiBhZG1pbiBoYXNuJ3Qgb3ZlcnJpZGRlbiB0aGVtLCBzZXQgdGhlIG93bmVyc2hpcCB0byB0aGUKLQkJICogZnN1aWQvZnNnaWQgb2YgdGhlIGN1cnJlbnQgcHJvY2Vzcy4KLQkJICovCi0JCWlmICgoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX01VTFRJVVNFUikgJiYKLQkJICAgICF0Y29uLT51bml4X2V4dCkgewotCQkJaWYgKCEoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX09WRVJSX1VJRCkpCi0JCQkJc3RhdC0+dWlkID0gY3VycmVudF9mc3VpZCgpOwotCQkJaWYgKCEoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX09WRVJSX0dJRCkpCi0JCQkJc3RhdC0+Z2lkID0gY3VycmVudF9mc2dpZCgpOworCS8qCisJICogV2UgbmVlZCB0byBiZSBzdXJlIHRoYXQgYWxsIGRpcnR5IHBhZ2VzIGFyZSB3cml0dGVuIGFuZCB0aGUgc2VydmVyCisJICogaGFzIGFjdHVhbCBjdGltZSwgbXRpbWUgYW5kIGZpbGUgbGVuZ3RoLgorCSAqLworCWlmICghQ0lGU19JKGlub2RlKS0+Y2xpZW50Q2FuQ2FjaGVSZWFkICYmIGlub2RlLT5pX21hcHBpbmcgJiYKKwkgICAgaW5vZGUtPmlfbWFwcGluZy0+bnJwYWdlcyAhPSAwKSB7CisJCXJjID0gZmlsZW1hcF9mZGF0YXdhaXQoaW5vZGUtPmlfbWFwcGluZyk7CisJCWlmIChyYykgeworCQkJbWFwcGluZ19zZXRfZXJyb3IoaW5vZGUtPmlfbWFwcGluZywgcmMpOworCQkJcmV0dXJuIHJjOwogCQl9CiAJfQotCXJldHVybiBlcnI7CisKKwlyYyA9IGNpZnNfcmV2YWxpZGF0ZV9kZW50cnlfYXR0cihkZW50cnkpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJZ2VuZXJpY19maWxsYXR0cihpbm9kZSwgc3RhdCk7CisJc3RhdC0+Ymxrc2l6ZSA9IENJRlNfTUFYX01TR1NJWkU7CisJc3RhdC0+aW5vID0gQ0lGU19JKGlub2RlKS0+dW5pcXVlaWQ7CisKKwkvKgorCSAqIElmIG9uIGEgbXVsdGl1c2VyIG1vdW50IHdpdGhvdXQgdW5peCBleHRlbnNpb25zLCBhbmQgdGhlIGFkbWluIGhhc24ndAorCSAqIG92ZXJyaWRkZW4gdGhlbSwgc2V0IHRoZSBvd25lcnNoaXAgdG8gdGhlIGZzdWlkL2ZzZ2lkIG9mIHRoZSBjdXJyZW50CisJICogcHJvY2Vzcy4KKwkgKi8KKwlpZiAoKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9NVUxUSVVTRVIpICYmCisJICAgICF0Y29uLT51bml4X2V4dCkgeworCQlpZiAoIShjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfT1ZFUlJfVUlEKSkKKwkJCXN0YXQtPnVpZCA9IGN1cnJlbnRfZnN1aWQoKTsKKwkJaWYgKCEoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX09WRVJSX0dJRCkpCisJCQlzdGF0LT5naWQgPSBjdXJyZW50X2ZzZ2lkKCk7CisJfQorCXJldHVybiByYzsKIH0KIAogc3RhdGljIGludCBjaWZzX3RydW5jYXRlX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCBmcm9tKQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9taXNjLmMgYi9mcy9jaWZzL21pc2MuYwppbmRleCAwYzY4NGFlLi45MDc1MzFhIDEwMDY0NAotLS0gYS9mcy9jaWZzL21pc2MuYworKysgYi9mcy9jaWZzL21pc2MuYwpAQCAtMzA0LDEyICszMDQsMTAgQEAKIAogCW1lbXNldCh0ZW1wLCAwLCAyNTYpOyAvKiBiaWdnZXIgdGhhbiBNQVhfQ0lGU19IRFJfU0laRSAqLwogCi0JYnVmZmVyLT5zbWJfYnVmX2xlbmd0aCA9CisJYnVmZmVyLT5zbWJfYnVmX2xlbmd0aCA9IGNwdV90b19iZTMyKAogCSAgICAoMiAqIHdvcmRfY291bnQpICsgc2l6ZW9mKHN0cnVjdCBzbWJfaGRyKSAtCiAJICAgIDQgLyogIFJGQyAxMDAxIGxlbmd0aCBmaWVsZCBkb2VzIG5vdCBjb3VudCAqLyAgKwotCSAgICAyIC8qIGZvciBiY2MgZmllbGQgaXRzZWxmICovIDsKLQkvKiBOb3RlIHRoYXQgdGhpcyBpcyB0aGUgb25seSBuZXR3b3JrIGZpZWxkIHRoYXQgaGFzIHRvIGJlIGNvbnZlcnRlZAotCSAgIHRvIGJpZyBlbmRpYW4gYW5kIGl0IGlzIGRvbmUganVzdCBiZWZvcmUgd2Ugc2VuZCBpdCAqLworCSAgICAyIC8qIGZvciBiY2MgZmllbGQgaXRzZWxmICovKSA7CiAKIAlidWZmZXItPlByb3RvY29sWzBdID0gMHhGRjsKIAlidWZmZXItPlByb3RvY29sWzFdID0gJ1MnOwpAQCAtNDI0LDcgKzQyMiw3IEBACiBpbnQKIGNoZWNrU01CKHN0cnVjdCBzbWJfaGRyICpzbWIsIF9fdTE2IG1pZCwgdW5zaWduZWQgaW50IGxlbmd0aCkKIHsKLQlfX3UzMiBsZW4gPSBzbWItPnNtYl9idWZfbGVuZ3RoOworCV9fdTMyIGxlbiA9IGJlMzJfdG9fY3B1KHNtYi0+c21iX2J1Zl9sZW5ndGgpOwogCV9fdTMyIGNsY19sZW47ICAvKiBjYWxjdWxhdGVkIGxlbmd0aCAqLwogCWNGWUkoMCwgImNoZWNrU01CIExlbmd0aDogMHgleCwgc21iX2J1Zl9sZW5ndGg6IDB4JXgiLCBsZW5ndGgsIGxlbik7CiAKQEAgLTQ2NCw3ICs0NjIsNyBAQAogCiAJaWYgKGNoZWNrX3NtYl9oZHIoc21iLCBtaWQpKQogCQlyZXR1cm4gMTsKLQljbGNfbGVuID0gc21iQ2FsY1NpemVfTEUoc21iKTsKKwljbGNfbGVuID0gc21iQ2FsY1NpemUoc21iKTsKIAogCWlmICg0ICsgbGVuICE9IGxlbmd0aCkgewogCQljRVJST1IoMSwgIkxlbmd0aCByZWFkIGRvZXMgbm90IG1hdGNoIFJGQzEwMDEgbGVuZ3RoICVkIiwKQEAgLTUyMSw3ICs1MTksNyBAQAogCQkJKHN0cnVjdCBzbWJfY29tX3RyYW5zYWN0aW9uX2NoYW5nZV9ub3RpZnlfcnNwICopYnVmOwogCQlzdHJ1Y3QgZmlsZV9ub3RpZnlfaW5mb3JtYXRpb24gKnBub3RpZnk7CiAJCV9fdTMyIGRhdGFfb2Zmc2V0ID0gMDsKLQkJaWYgKGdldF9iY2NfbGUoYnVmKSA+IHNpemVvZihzdHJ1Y3QgZmlsZV9ub3RpZnlfaW5mb3JtYXRpb24pKSB7CisJCWlmIChnZXRfYmNjKGJ1ZikgPiBzaXplb2Yoc3RydWN0IGZpbGVfbm90aWZ5X2luZm9ybWF0aW9uKSkgewogCQkJZGF0YV9vZmZzZXQgPSBsZTMyX3RvX2NwdShwU01Cci0+RGF0YU9mZnNldCk7CiAKIAkJCXBub3RpZnkgPSAoc3RydWN0IGZpbGVfbm90aWZ5X2luZm9ybWF0aW9uICopCmRpZmYgLS1naXQgYS9mcy9jaWZzL25ldG1pc2MuYyBiL2ZzL2NpZnMvbmV0bWlzYy5jCmluZGV4IDc5ZjY0MWUuLjc5YjcxYzIgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvbmV0bWlzYy5jCisrKyBiL2ZzL2NpZnMvbmV0bWlzYy5jCkBAIC05MTksMTMgKzkxOSw2IEBACiAJCTIgLyogc2l6ZSBvZiB0aGUgYmNjIGZpZWxkICovICsgZ2V0X2JjYyhwdHIpKTsKIH0KIAotdW5zaWduZWQgaW50Ci1zbWJDYWxjU2l6ZV9MRShzdHJ1Y3Qgc21iX2hkciAqcHRyKQotewotCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBzbWJfaGRyKSArICgyICogcHRyLT5Xb3JkQ291bnQpICsKLQkJMiAvKiBzaXplIG9mIHRoZSBiY2MgZmllbGQgKi8gKyBnZXRfYmNjX2xlKHB0cikpOwotfQotCiAvKiBUaGUgZm9sbG93aW5nIGFyZSB0YWtlbiBmcm9tIGZzL250ZnMvdXRpbC5jICovCiAKICNkZWZpbmUgTlRGU19USU1FX09GRlNFVCAoKHU2NCkoMzY5KjM2NSArIDg5KSAqIDI0ICogMzYwMCAqIDEwMDAwMDAwKQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9zZXNzLmMgYi9mcy9jaWZzL3Nlc3MuYwppbmRleCA2NDUxMTRhLi43ZGQ0NjIxIDEwMDY0NAotLS0gYS9mcy9jaWZzL3Nlc3MuYworKysgYi9mcy9jaWZzL3Nlc3MuYwpAQCAtNjIxLDcgKzYyMSw3IEBACiAJYW5kIHJlc3Qgb2YgYmNjIGFyZWEuIFRoaXMgYWxsb3dzIHVzIHRvIGF2b2lkCiAJYSBsYXJnZSBidWZmZXIgMTdLIGFsbG9jYXRpb24gKi8KIAlpb3ZbMF0uaW92X2Jhc2UgPSAoY2hhciAqKXBTTUI7Ci0JaW92WzBdLmlvdl9sZW4gPSBzbWJfYnVmLT5zbWJfYnVmX2xlbmd0aCArIDQ7CisJaW92WzBdLmlvdl9sZW4gPSBiZTMyX3RvX2NwdShzbWJfYnVmLT5zbWJfYnVmX2xlbmd0aCkgKyA0OwogCiAJLyogc2V0dGluZyB0aGlzIGhlcmUgYWxsb3dzIHRoZSBjb2RlIGF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uCiAJICAgdG8gZnJlZSB0aGUgcmVxdWVzdCBidWZmZXIgaWYgdGhlcmUncyBhbiBlcnJvciAqLwpAQCAtNjU2LDcgKzY1Niw3IEBACiAJCSAqIHRvIHVzZSBjaGFsbGVuZ2UvcmVzcG9uc2UgbWV0aG9kIChpLmUuIFBhc3N3b3JkIGJpdCBpcyAxKS4KIAkJICovCiAKLQkJY2FsY19sYW5tYW5faGFzaChzZXMtPnBhc3N3b3JkLCBzZXMtPnNlcnZlci0+Y3J5cHRrZXksCisJCXJjID0gY2FsY19sYW5tYW5faGFzaChzZXMtPnBhc3N3b3JkLCBzZXMtPnNlcnZlci0+Y3J5cHRrZXksCiAJCQkJIHNlcy0+c2VydmVyLT5zZWNNb2RlICYgU0VDTU9ERV9QV19FTkNSWVBUID8KIAkJCQkJdHJ1ZSA6IGZhbHNlLCBsbm1fc2Vzc2lvbl9rZXkpOwogCkBAIC04NTksOSArODU5LDEwIEBACiAJaW92WzJdLmlvdl9sZW4gPSAobG9uZykgYmNjX3B0ciAtIChsb25nKSBzdHJfYXJlYTsKIAogCWNvdW50ID0gaW92WzFdLmlvdl9sZW4gKyBpb3ZbMl0uaW92X2xlbjsKLQlzbWJfYnVmLT5zbWJfYnVmX2xlbmd0aCArPSBjb3VudDsKKwlzbWJfYnVmLT5zbWJfYnVmX2xlbmd0aCA9CisJCWNwdV90b19iZTMyKGJlMzJfdG9fY3B1KHNtYl9idWYtPnNtYl9idWZfbGVuZ3RoKSArIGNvdW50KTsKIAotCXB1dF9iY2NfbGUoY291bnQsIHNtYl9idWYpOworCXB1dF9iY2MoY291bnQsIHNtYl9idWYpOwogCiAJcmMgPSBTZW5kUmVjZWl2ZTIoeGlkLCBzZXMsIGlvdiwgMyAvKiBudW1faW92ZWNzICovLCAmcmVzcF9idWZfdHlwZSwKIAkJCSAgQ0lGU19MT0dfRVJST1IpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9zbWJkZXMuYyBiL2ZzL2NpZnMvc21iZGVzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0NzIxNDguLjAwMDAwMDAKLS0tIGEvZnMvY2lmcy9zbWJkZXMuYworKysgL2Rldi9udWxsCkBAIC0xLDQxOCArMCwwIEBACi0vKgotICAgVW5peCBTTUIvTmV0YmlvcyBpbXBsZW1lbnRhdGlvbi4KLSAgIFZlcnNpb24gMS45LgotCi0gICBhIHBhcnRpYWwgaW1wbGVtZW50YXRpb24gb2YgREVTIGRlc2lnbmVkIGZvciB1c2UgaW4gdGhlCi0gICBTTUIgYXV0aGVudGljYXRpb24gcHJvdG9jb2wKLQotICAgQ29weXJpZ2h0IChDKSBBbmRyZXcgVHJpZGdlbGwgMTk5OAotICAgTW9kaWZpZWQgYnkgU3RldmUgRnJlbmNoIChzZnJlbmNoQHVzLmlibS5jb20pIDIwMDIsMjAwNAotCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotKi8KLQotLyogTk9URVM6Ci0KLSAgIFRoaXMgY29kZSBtYWtlcyBubyBhdHRlbXB0IHRvIGJlIGZhc3QhIEluIGZhY3QsIGl0IGlzIGEgdmVyeQotICAgc2xvdyBpbXBsZW1lbnRhdGlvbgotCi0gICBUaGlzIGNvZGUgaXMgTk9UIGEgY29tcGxldGUgREVTIGltcGxlbWVudGF0aW9uLiBJdCBpbXBsZW1lbnRzIG9ubHkKLSAgIHRoZSBtaW5pbXVtIG5lY2Vzc2FyeSBmb3IgU01CIGF1dGhlbnRpY2F0aW9uLCBhcyB1c2VkIGJ5IGFsbCBTTUIKLSAgIHByb2R1Y3RzIChpbmNsdWRpbmcgZXZlcnkgY29weSBvZiBNaWNyb3NvZnQgV2luZG93czk1IGV2ZXIgc29sZCkKLQotICAgSW4gcGFydGljdWxhciwgaXQgY2FuIG9ubHkgZG8gYSB1bmNoYWluZWQgZm9yd2FyZCBERVMgcGFzcy4gVGhpcwotICAgbWVhbnMgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHVzZSB0aGlzIGNvZGUgZm9yIGVuY3J5cHRpb24vZGVjcnlwdGlvbgotICAgb2YgZGF0YSwgaW5zdGVhZCBpdCBpcyBvbmx5IHVzZWZ1bCBhcyBhICJoYXNoIiBhbGdvcml0aG0uCi0KLSAgIFRoZXJlIGlzIG5vIGVudHJ5IHBvaW50IGludG8gdGhpcyBjb2RlIHRoYXQgYWxsb3dzIG5vcm1hbCBERVMgb3BlcmF0aW9uLgotCi0gICBJIGJlbGlldmUgdGhpcyBtZWFucyB0aGF0IHRoaXMgY29kZSBkb2VzIG5vdCBjb21lIHVuZGVyIElUQVIKLSAgIHJlZ3VsYXRpb25zIGJ1dCB0aGlzIGlzIE5PVCBhIGxlZ2FsIG9waW5pb24uIElmIHlvdSBhcmUgY29uY2VybmVkCi0gICBhYm91dCB0aGUgYXBwbGljYWJpbGl0eSBvZiBJVEFSIHJlZ3VsYXRpb25zIHRvIHRoaXMgY29kZSB0aGVuIHlvdQotICAgc2hvdWxkIGNvbmZpcm0gaXQgZm9yIHlvdXJzZWxmIChhbmQgbWF5YmUgbGV0IG1lIGtub3cgaWYgeW91IGNvbWUKLSAgIHVwIHdpdGggYSBkaWZmZXJlbnQgYW5zd2VyIHRvIHRoZSBvbmUgYWJvdmUpCi0qLwotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNkZWZpbmUgdWNoYXIgdW5zaWduZWQgY2hhcgotCi1zdGF0aWMgdWNoYXIgcGVybTFbNTZdID0geyA1NywgNDksIDQxLCAzMywgMjUsIDE3LCA5LAotCTEsIDU4LCA1MCwgNDIsIDM0LCAyNiwgMTgsCi0JMTAsIDIsIDU5LCA1MSwgNDMsIDM1LCAyNywKLQkxOSwgMTEsIDMsIDYwLCA1MiwgNDQsIDM2LAotCTYzLCA1NSwgNDcsIDM5LCAzMSwgMjMsIDE1LAotCTcsIDYyLCA1NCwgNDYsIDM4LCAzMCwgMjIsCi0JMTQsIDYsIDYxLCA1MywgNDUsIDM3LCAyOSwKLQkyMSwgMTMsIDUsIDI4LCAyMCwgMTIsIDQKLX07Ci0KLXN0YXRpYyB1Y2hhciBwZXJtMls0OF0gPSB7IDE0LCAxNywgMTEsIDI0LCAxLCA1LAotCTMsIDI4LCAxNSwgNiwgMjEsIDEwLAotCTIzLCAxOSwgMTIsIDQsIDI2LCA4LAotCTE2LCA3LCAyNywgMjAsIDEzLCAyLAotCTQxLCA1MiwgMzEsIDM3LCA0NywgNTUsCi0JMzAsIDQwLCA1MSwgNDUsIDMzLCA0OCwKLQk0NCwgNDksIDM5LCA1NiwgMzQsIDUzLAotCTQ2LCA0MiwgNTAsIDM2LCAyOSwgMzIKLX07Ci0KLXN0YXRpYyB1Y2hhciBwZXJtM1s2NF0gPSB7IDU4LCA1MCwgNDIsIDM0LCAyNiwgMTgsIDEwLCAyLAotCTYwLCA1MiwgNDQsIDM2LCAyOCwgMjAsIDEyLCA0LAotCTYyLCA1NCwgNDYsIDM4LCAzMCwgMjIsIDE0LCA2LAotCTY0LCA1NiwgNDgsIDQwLCAzMiwgMjQsIDE2LCA4LAotCTU3LCA0OSwgNDEsIDMzLCAyNSwgMTcsIDksIDEsCi0JNTksIDUxLCA0MywgMzUsIDI3LCAxOSwgMTEsIDMsCi0JNjEsIDUzLCA0NSwgMzcsIDI5LCAyMSwgMTMsIDUsCi0JNjMsIDU1LCA0NywgMzksIDMxLCAyMywgMTUsIDcKLX07Ci0KLXN0YXRpYyB1Y2hhciBwZXJtNFs0OF0gPSB7IDMyLCAxLCAyLCAzLCA0LCA1LAotCTQsIDUsIDYsIDcsIDgsIDksCi0JOCwgOSwgMTAsIDExLCAxMiwgMTMsCi0JMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywKLQkxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLAotCTIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsCi0JMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwKLQkyOCwgMjksIDMwLCAzMSwgMzIsIDEKLX07Ci0KLXN0YXRpYyB1Y2hhciBwZXJtNVszMl0gPSB7IDE2LCA3LCAyMCwgMjEsCi0JMjksIDEyLCAyOCwgMTcsCi0JMSwgMTUsIDIzLCAyNiwKLQk1LCAxOCwgMzEsIDEwLAotCTIsIDgsIDI0LCAxNCwKLQkzMiwgMjcsIDMsIDksCi0JMTksIDEzLCAzMCwgNiwKLQkyMiwgMTEsIDQsIDI1Ci19OwotCi1zdGF0aWMgdWNoYXIgcGVybTZbNjRdID0geyA0MCwgOCwgNDgsIDE2LCA1NiwgMjQsIDY0LCAzMiwKLQkzOSwgNywgNDcsIDE1LCA1NSwgMjMsIDYzLCAzMSwKLQkzOCwgNiwgNDYsIDE0LCA1NCwgMjIsIDYyLCAzMCwKLQkzNywgNSwgNDUsIDEzLCA1MywgMjEsIDYxLCAyOSwKLQkzNiwgNCwgNDQsIDEyLCA1MiwgMjAsIDYwLCAyOCwKLQkzNSwgMywgNDMsIDExLCA1MSwgMTksIDU5LCAyNywKLQkzNCwgMiwgNDIsIDEwLCA1MCwgMTgsIDU4LCAyNiwKLQkzMywgMSwgNDEsIDksIDQ5LCAxNywgNTcsIDI1Ci19OwotCi1zdGF0aWMgdWNoYXIgc2NbMTZdID0geyAxLCAxLCAyLCAyLCAyLCAyLCAyLCAyLCAxLCAyLCAyLCAyLCAyLCAyLCAyLCAxIH07Ci0KLXN0YXRpYyB1Y2hhciBzYm94WzhdWzRdWzE2XSA9IHsKLQl7ezE0LCA0LCAxMywgMSwgMiwgMTUsIDExLCA4LCAzLCAxMCwgNiwgMTIsIDUsIDksIDAsIDd9LAotCSB7MCwgMTUsIDcsIDQsIDE0LCAyLCAxMywgMSwgMTAsIDYsIDEyLCAxMSwgOSwgNSwgMywgOH0sCi0JIHs0LCAxLCAxNCwgOCwgMTMsIDYsIDIsIDExLCAxNSwgMTIsIDksIDcsIDMsIDEwLCA1LCAwfSwKLQkgezE1LCAxMiwgOCwgMiwgNCwgOSwgMSwgNywgNSwgMTEsIDMsIDE0LCAxMCwgMCwgNiwgMTN9IH0sCi0KLQl7ezE1LCAxLCA4LCAxNCwgNiwgMTEsIDMsIDQsIDksIDcsIDIsIDEzLCAxMiwgMCwgNSwgMTB9LAotCSB7MywgMTMsIDQsIDcsIDE1LCAyLCA4LCAxNCwgMTIsIDAsIDEsIDEwLCA2LCA5LCAxMSwgNX0sCi0JIHswLCAxNCwgNywgMTEsIDEwLCA0LCAxMywgMSwgNSwgOCwgMTIsIDYsIDksIDMsIDIsIDE1fSwKLQkgezEzLCA4LCAxMCwgMSwgMywgMTUsIDQsIDIsIDExLCA2LCA3LCAxMiwgMCwgNSwgMTQsIDl9IH0sCi0KLQl7ezEwLCAwLCA5LCAxNCwgNiwgMywgMTUsIDUsIDEsIDEzLCAxMiwgNywgMTEsIDQsIDIsIDh9LAotCSB7MTMsIDcsIDAsIDksIDMsIDQsIDYsIDEwLCAyLCA4LCA1LCAxNCwgMTIsIDExLCAxNSwgMX0sCi0JIHsxMywgNiwgNCwgOSwgOCwgMTUsIDMsIDAsIDExLCAxLCAyLCAxMiwgNSwgMTAsIDE0LCA3fSwKLQkgezEsIDEwLCAxMywgMCwgNiwgOSwgOCwgNywgNCwgMTUsIDE0LCAzLCAxMSwgNSwgMiwgMTJ9IH0sCi0KLQl7ezcsIDEzLCAxNCwgMywgMCwgNiwgOSwgMTAsIDEsIDIsIDgsIDUsIDExLCAxMiwgNCwgMTV9LAotCSB7MTMsIDgsIDExLCA1LCA2LCAxNSwgMCwgMywgNCwgNywgMiwgMTIsIDEsIDEwLCAxNCwgOX0sCi0JIHsxMCwgNiwgOSwgMCwgMTIsIDExLCA3LCAxMywgMTUsIDEsIDMsIDE0LCA1LCAyLCA4LCA0fSwKLQkgezMsIDE1LCAwLCA2LCAxMCwgMSwgMTMsIDgsIDksIDQsIDUsIDExLCAxMiwgNywgMiwgMTR9IH0sCi0KLQl7ezIsIDEyLCA0LCAxLCA3LCAxMCwgMTEsIDYsIDgsIDUsIDMsIDE1LCAxMywgMCwgMTQsIDl9LAotCSB7MTQsIDExLCAyLCAxMiwgNCwgNywgMTMsIDEsIDUsIDAsIDE1LCAxMCwgMywgOSwgOCwgNn0sCi0JIHs0LCAyLCAxLCAxMSwgMTAsIDEzLCA3LCA4LCAxNSwgOSwgMTIsIDUsIDYsIDMsIDAsIDE0fSwKLQkgezExLCA4LCAxMiwgNywgMSwgMTQsIDIsIDEzLCA2LCAxNSwgMCwgOSwgMTAsIDQsIDUsIDN9IH0sCi0KLQl7ezEyLCAxLCAxMCwgMTUsIDksIDIsIDYsIDgsIDAsIDEzLCAzLCA0LCAxNCwgNywgNSwgMTF9LAotCSB7MTAsIDE1LCA0LCAyLCA3LCAxMiwgOSwgNSwgNiwgMSwgMTMsIDE0LCAwLCAxMSwgMywgOH0sCi0JIHs5LCAxNCwgMTUsIDUsIDIsIDgsIDEyLCAzLCA3LCAwLCA0LCAxMCwgMSwgMTMsIDExLCA2fSwKLQkgezQsIDMsIDIsIDEyLCA5LCA1LCAxNSwgMTAsIDExLCAxNCwgMSwgNywgNiwgMCwgOCwgMTN9IH0sCi0KLQl7ezQsIDExLCAyLCAxNCwgMTUsIDAsIDgsIDEzLCAzLCAxMiwgOSwgNywgNSwgMTAsIDYsIDF9LAotCSB7MTMsIDAsIDExLCA3LCA0LCA5LCAxLCAxMCwgMTQsIDMsIDUsIDEyLCAyLCAxNSwgOCwgNn0sCi0JIHsxLCA0LCAxMSwgMTMsIDEyLCAzLCA3LCAxNCwgMTAsIDE1LCA2LCA4LCAwLCA1LCA5LCAyfSwKLQkgezYsIDExLCAxMywgOCwgMSwgNCwgMTAsIDcsIDksIDUsIDAsIDE1LCAxNCwgMiwgMywgMTJ9IH0sCi0KLQl7ezEzLCAyLCA4LCA0LCA2LCAxNSwgMTEsIDEsIDEwLCA5LCAzLCAxNCwgNSwgMCwgMTIsIDd9LAotCSB7MSwgMTUsIDEzLCA4LCAxMCwgMywgNywgNCwgMTIsIDUsIDYsIDExLCAwLCAxNCwgOSwgMn0sCi0JIHs3LCAxMSwgNCwgMSwgOSwgMTIsIDE0LCAyLCAwLCA2LCAxMCwgMTMsIDE1LCAzLCA1LCA4fSwKLQkgezIsIDEsIDE0LCA3LCA0LCAxMCwgOCwgMTMsIDE1LCAxMiwgOSwgMCwgMywgNSwgNiwgMTF9IH0KLX07Ci0KLXN0YXRpYyB2b2lkCi1wZXJtdXRlKGNoYXIgKm91dCwgY2hhciAqaW4sIHVjaGFyICpwLCBpbnQgbikKLXsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQotCQlvdXRbaV0gPSBpbltwW2ldIC0gMV07Ci19Ci0KLXN0YXRpYyB2b2lkCi1sc2hpZnQoY2hhciAqZCwgaW50IGNvdW50LCBpbnQgbikKLXsKLQljaGFyIG91dFs2NF07Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IG47IGkrKykKLQkJb3V0W2ldID0gZFsoaSArIGNvdW50KSAlIG5dOwotCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCi0JCWRbaV0gPSBvdXRbaV07Ci19Ci0KLXN0YXRpYyB2b2lkCi1jb25jYXQoY2hhciAqb3V0LCBjaGFyICppbjEsIGNoYXIgKmluMiwgaW50IGwxLCBpbnQgbDIpCi17Ci0Jd2hpbGUgKGwxLS0pCi0JCSpvdXQrKyA9ICppbjErKzsKLQl3aGlsZSAobDItLSkKLQkJKm91dCsrID0gKmluMisrOwotfQotCi1zdGF0aWMgdm9pZAoteG9yKGNoYXIgKm91dCwgY2hhciAqaW4xLCBjaGFyICppbjIsIGludCBuKQotewotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCi0JCW91dFtpXSA9IGluMVtpXSBeIGluMltpXTsKLX0KLQotc3RhdGljIHZvaWQKLWRvaGFzaChjaGFyICpvdXQsIGNoYXIgKmluLCBjaGFyICprZXksIGludCBmb3J3KQotewotCWludCBpLCBqLCBrOwotCWNoYXIgKnBrMTsKLQljaGFyIGNbMjhdOwotCWNoYXIgZFsyOF07Ci0JY2hhciAqY2Q7Ci0JY2hhciAoKmtpKVs0OF07Ci0JY2hhciAqcGQxOwotCWNoYXIgbFszMl0sIHJbMzJdOwotCWNoYXIgKnJsOwotCi0JLyogSGF2ZSB0byByZWR1Y2Ugc3RhY2sgdXNhZ2UgKi8KLQlwazEgPSBrbWFsbG9jKDU2KzU2KzY0KzY0LCBHRlBfS0VSTkVMKTsKLQlpZiAocGsxID09IE5VTEwpCi0JCXJldHVybjsKLQotCWtpID0ga21hbGxvYygxNio0OCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGtpID09IE5VTEwpIHsKLQkJa2ZyZWUocGsxKTsKLQkJcmV0dXJuOwotCX0KLQotCWNkID0gcGsxICsgNTY7Ci0JcGQxID0gY2QgICsgNTY7Ci0JcmwgPSBwZDEgKyA2NDsKLQotCXBlcm11dGUocGsxLCBrZXksIHBlcm0xLCA1Nik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMjg7IGkrKykKLQkJY1tpXSA9IHBrMVtpXTsKLQlmb3IgKGkgPSAwOyBpIDwgMjg7IGkrKykKLQkJZFtpXSA9IHBrMVtpICsgMjhdOwotCi0JZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKLQkJbHNoaWZ0KGMsIHNjW2ldLCAyOCk7Ci0JCWxzaGlmdChkLCBzY1tpXSwgMjgpOwotCi0JCWNvbmNhdChjZCwgYywgZCwgMjgsIDI4KTsKLQkJcGVybXV0ZShraVtpXSwgY2QsIHBlcm0yLCA0OCk7Ci0JfQotCi0JcGVybXV0ZShwZDEsIGluLCBwZXJtMywgNjQpOwotCi0JZm9yIChqID0gMDsgaiA8IDMyOyBqKyspIHsKLQkJbFtqXSA9IHBkMVtqXTsKLQkJcltqXSA9IHBkMVtqICsgMzJdOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCWNoYXIgKmVyOyAgLyogZXJbNDhdICAqLwotCQljaGFyICplcms7IC8qIGVya1s0OF0gKi8KLQkJY2hhciBiWzhdWzZdOwotCQljaGFyICpjYjsgIC8qIGNiWzMyXSAgKi8KLQkJY2hhciAqcGNiOyAvKiBwY2JbMzJdICovCi0JCWNoYXIgKnIyOyAgLyogcjJbMzJdICAqLwotCi0JCWVyID0ga21hbGxvYyg0OCs0OCszMiszMiszMiwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChlciA9PSBOVUxMKSB7Ci0JCQlrZnJlZShwazEpOwotCQkJa2ZyZWUoa2kpOwotCQkJcmV0dXJuOwotCQl9Ci0JCWVyayA9IGVyKzQ4OwotCQljYiAgPSBlcmsrNDg7Ci0JCXBjYiA9IGNiKzMyOwotCQlyMiAgPSBwY2IrMzI7Ci0KLQkJcGVybXV0ZShlciwgciwgcGVybTQsIDQ4KTsKLQotCQl4b3IoZXJrLCBlciwga2lbZm9ydyA/IGkgOiAxNSAtIGldLCA0OCk7Ci0KLQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykKLQkJCWZvciAoayA9IDA7IGsgPCA2OyBrKyspCi0JCQkJYltqXVtrXSA9IGVya1tqICogNiArIGtdOwotCi0JCWZvciAoaiA9IDA7IGogPCA4OyBqKyspIHsKLQkJCWludCBtLCBuOwotCQkJbSA9IChiW2pdWzBdIDw8IDEpIHwgYltqXVs1XTsKLQotCQkJbiA9IChiW2pdWzFdIDw8IDMpIHwgKGJbal1bMl0gPDwgMikgfCAoYltqXVszXSA8PAotCQkJCQkJCSAgICAgICAxKSB8IGJbal1bNF07Ci0KLQkJCWZvciAoayA9IDA7IGsgPCA0OyBrKyspCi0JCQkJYltqXVtrXSA9Ci0JCQkJICAgIChzYm94W2pdW21dW25dICYgKDEgPDwgKDMgLSBrKSkpID8gMSA6IDA7Ci0JCX0KLQotCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKQotCQkJZm9yIChrID0gMDsgayA8IDQ7IGsrKykKLQkJCQljYltqICogNCArIGtdID0gYltqXVtrXTsKLQkJcGVybXV0ZShwY2IsIGNiLCBwZXJtNSwgMzIpOwotCi0JCXhvcihyMiwgbCwgcGNiLCAzMik7Ci0KLQkJZm9yIChqID0gMDsgaiA8IDMyOyBqKyspCi0JCQlsW2pdID0gcltqXTsKLQotCQlmb3IgKGogPSAwOyBqIDwgMzI7IGorKykKLQkJCXJbal0gPSByMltqXTsKLQotCQlrZnJlZShlcik7Ci0JfQotCi0JY29uY2F0KHJsLCByLCBsLCAzMiwgMzIpOwotCi0JcGVybXV0ZShvdXQsIHJsLCBwZXJtNiwgNjQpOwotCWtmcmVlKHBrMSk7Ci0Ja2ZyZWUoa2kpOwotfQotCi1zdGF0aWMgdm9pZAotc3RyX3RvX2tleSh1bnNpZ25lZCBjaGFyICpzdHIsIHVuc2lnbmVkIGNoYXIgKmtleSkKLXsKLQlpbnQgaTsKLQotCWtleVswXSA9IHN0clswXSA+PiAxOwotCWtleVsxXSA9ICgoc3RyWzBdICYgMHgwMSkgPDwgNikgfCAoc3RyWzFdID4+IDIpOwotCWtleVsyXSA9ICgoc3RyWzFdICYgMHgwMykgPDwgNSkgfCAoc3RyWzJdID4+IDMpOwotCWtleVszXSA9ICgoc3RyWzJdICYgMHgwNykgPDwgNCkgfCAoc3RyWzNdID4+IDQpOwotCWtleVs0XSA9ICgoc3RyWzNdICYgMHgwRikgPDwgMykgfCAoc3RyWzRdID4+IDUpOwotCWtleVs1XSA9ICgoc3RyWzRdICYgMHgxRikgPDwgMikgfCAoc3RyWzVdID4+IDYpOwotCWtleVs2XSA9ICgoc3RyWzVdICYgMHgzRikgPDwgMSkgfCAoc3RyWzZdID4+IDcpOwotCWtleVs3XSA9IHN0cls2XSAmIDB4N0Y7Ci0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJa2V5W2ldID0gKGtleVtpXSA8PCAxKTsKLX0KLQotc3RhdGljIHZvaWQKLXNtYmhhc2godW5zaWduZWQgY2hhciAqb3V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqa2V5LAotCWludCBmb3J3KQotewotCWludCBpOwotCWNoYXIgKm91dGI7IC8qIG91dGJbNjRdICovCi0JY2hhciAqaW5iOyAgLyogaW5iWzY0XSAgKi8KLQljaGFyICprZXliOyAvKiBrZXliWzY0XSAqLwotCXVuc2lnbmVkIGNoYXIga2V5Mls4XTsKLQotCW91dGIgPSBrbWFsbG9jKDY0ICogMywgR0ZQX0tFUk5FTCk7Ci0JaWYgKG91dGIgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JaW5iICA9IG91dGIgKyA2NDsKLQlrZXliID0gaW5iICsgIDY0OwotCi0Jc3RyX3RvX2tleShrZXksIGtleTIpOwotCi0JZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHsKLQkJaW5iW2ldID0gKGluW2kgLyA4XSAmICgxIDw8ICg3IC0gKGkgJSA4KSkpKSA/IDEgOiAwOwotCQlrZXliW2ldID0gKGtleTJbaSAvIDhdICYgKDEgPDwgKDcgLSAoaSAlIDgpKSkpID8gMSA6IDA7Ci0JCW91dGJbaV0gPSAwOwotCX0KLQotCWRvaGFzaChvdXRiLCBpbmIsIGtleWIsIGZvcncpOwotCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJb3V0W2ldID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7Ci0JCWlmIChvdXRiW2ldKQotCQkJb3V0W2kgLyA4XSB8PSAoMSA8PCAoNyAtIChpICUgOCkpKTsKLQl9Ci0Ja2ZyZWUob3V0Yik7Ci19Ci0KLXZvaWQKLUVfUDE2KHVuc2lnbmVkIGNoYXIgKnAxNCwgdW5zaWduZWQgY2hhciAqcDE2KQotewotCXVuc2lnbmVkIGNoYXIgc3A4WzhdID0KLQkgICAgeyAweDRiLCAweDQ3LCAweDUzLCAweDIxLCAweDQwLCAweDIzLCAweDI0LCAweDI1IH07Ci0Jc21iaGFzaChwMTYsIHNwOCwgcDE0LCAxKTsKLQlzbWJoYXNoKHAxNiArIDgsIHNwOCwgcDE0ICsgNywgMSk7Ci19Ci0KLXZvaWQKLUVfUDI0KHVuc2lnbmVkIGNoYXIgKnAyMSwgY29uc3QgdW5zaWduZWQgY2hhciAqYzgsIHVuc2lnbmVkIGNoYXIgKnAyNCkKLXsKLQlzbWJoYXNoKHAyNCwgYzgsIHAyMSwgMSk7Ci0Jc21iaGFzaChwMjQgKyA4LCBjOCwgcDIxICsgNywgMSk7Ci0Jc21iaGFzaChwMjQgKyAxNiwgYzgsIHAyMSArIDE0LCAxKTsKLX0KLQotI2lmIDAgLyogY3VycmVudGx5IHVudXNlZCAqLwotc3RhdGljIHZvaWQKLURfUDE2KHVuc2lnbmVkIGNoYXIgKnAxNCwgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCkKLXsKLQlzbWJoYXNoKG91dCwgaW4sIHAxNCwgMCk7Ci0Jc21iaGFzaChvdXQgKyA4LCBpbiArIDgsIHAxNCArIDcsIDApOwotfQotCi1zdGF0aWMgdm9pZAotRV9vbGRfcHdfaGFzaCh1bnNpZ25lZCBjaGFyICpwMTQsIHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQpCi17Ci0Jc21iaGFzaChvdXQsIGluLCBwMTQsIDEpOwotCXNtYmhhc2gob3V0ICsgOCwgaW4gKyA4LCBwMTQgKyA3LCAxKTsKLX0KLS8qIHRoZXNlIHJvdXRpbmVzIGFyZSBjdXJyZW50bHkgdW5uZWVkZWQsIGJ1dCBtYXkgYmUKLQluZWVkZWQgbGF0ZXIgKi8KLXZvaWQKLWNyZWRfaGFzaDEodW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqa2V5KQotewotCXVuc2lnbmVkIGNoYXIgYnVmWzhdOwotCi0Jc21iaGFzaChidWYsIGluLCBrZXksIDEpOwotCXNtYmhhc2gob3V0LCBidWYsIGtleSArIDksIDEpOwotfQotCi12b2lkCi1jcmVkX2hhc2gyKHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKmtleSkKLXsKLQl1bnNpZ25lZCBjaGFyIGJ1Zls4XTsKLQlzdGF0aWMgdW5zaWduZWQgY2hhciBrZXkyWzhdOwotCi0Jc21iaGFzaChidWYsIGluLCBrZXksIDEpOwotCWtleTJbMF0gPSBrZXlbN107Ci0Jc21iaGFzaChvdXQsIGJ1Ziwga2V5MiwgMSk7Ci19Ci0KLXZvaWQKLWNyZWRfaGFzaDModW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQgZm9ydykKLXsKLQlzdGF0aWMgdW5zaWduZWQgY2hhciBrZXkyWzhdOwotCi0Jc21iaGFzaChvdXQsIGluLCBrZXksIGZvcncpOwotCWtleTJbMF0gPSBrZXlbN107Ci0Jc21iaGFzaChvdXQgKyA4LCBpbiArIDgsIGtleTIsIGZvcncpOwotfQotI2VuZGlmIC8qIHVubmVlZGVkIHJvdXRpbmVzICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL3NtYmVuY3J5cHQuYyBiL2ZzL2NpZnMvc21iZW5jcnlwdC5jCmluZGV4IGI1MDQxYzguLjE1MjVkNWUgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvc21iZW5jcnlwdC5jCisrKyBiL2ZzL2NpZnMvc21iZW5jcnlwdC5jCkBAIC00Nyw2ICs0Nyw4OCBAQAogI2RlZmluZSBTU1ZBTFgoYnVmLHBvcyx2YWwpIChDVkFMKGJ1Zixwb3MpPSh2YWwpJjB4RkYsQ1ZBTChidWYscG9zKzEpPSh2YWwpPj44KQogI2RlZmluZSBTU1ZBTChidWYscG9zLHZhbCkgU1NWQUxYKChidWYpLChwb3MpLCgoX191MTYpKHZhbCkpKQogCitzdGF0aWMgdm9pZAorc3RyX3RvX2tleSh1bnNpZ25lZCBjaGFyICpzdHIsIHVuc2lnbmVkIGNoYXIgKmtleSkKK3sKKwlpbnQgaTsKKworCWtleVswXSA9IHN0clswXSA+PiAxOworCWtleVsxXSA9ICgoc3RyWzBdICYgMHgwMSkgPDwgNikgfCAoc3RyWzFdID4+IDIpOworCWtleVsyXSA9ICgoc3RyWzFdICYgMHgwMykgPDwgNSkgfCAoc3RyWzJdID4+IDMpOworCWtleVszXSA9ICgoc3RyWzJdICYgMHgwNykgPDwgNCkgfCAoc3RyWzNdID4+IDQpOworCWtleVs0XSA9ICgoc3RyWzNdICYgMHgwRikgPDwgMykgfCAoc3RyWzRdID4+IDUpOworCWtleVs1XSA9ICgoc3RyWzRdICYgMHgxRikgPDwgMikgfCAoc3RyWzVdID4+IDYpOworCWtleVs2XSA9ICgoc3RyWzVdICYgMHgzRikgPDwgMSkgfCAoc3RyWzZdID4+IDcpOworCWtleVs3XSA9IHN0cls2XSAmIDB4N0Y7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJa2V5W2ldID0gKGtleVtpXSA8PCAxKTsKK30KKworc3RhdGljIGludAorc21iaGFzaCh1bnNpZ25lZCBjaGFyICpvdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICprZXkpCit7CisJaW50IHJjOworCXVuc2lnbmVkIGNoYXIga2V5Mls4XTsKKwlzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtX2RlczsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dpbiwgc2dvdXQ7CisJc3RydWN0IGJsa2NpcGhlcl9kZXNjIGRlc2M7CisKKwlzdHJfdG9fa2V5KGtleSwga2V5Mik7CisKKwl0Zm1fZGVzID0gY3J5cHRvX2FsbG9jX2Jsa2NpcGhlcigiZWNiKGRlcykiLCAwLCBDUllQVE9fQUxHX0FTWU5DKTsKKwlpZiAoSVNfRVJSKHRmbV9kZXMpKSB7CisJCXJjID0gUFRSX0VSUih0Zm1fZGVzKTsKKwkJY0VSUk9SKDEsICJjb3VsZCBub3QgYWxsb2NhdGUgZGVzIGNyeXB0byBBUElcbiIpOworCQlnb3RvIHNtYmhhc2hfZXJyOworCX0KKworCWRlc2MudGZtID0gdGZtX2RlczsKKworCWNyeXB0b19ibGtjaXBoZXJfc2V0a2V5KHRmbV9kZXMsIGtleTIsIDgpOworCisJc2dfaW5pdF9vbmUoJnNnaW4sIGluLCA4KTsKKwlzZ19pbml0X29uZSgmc2dvdXQsIG91dCwgOCk7CisKKwlyYyA9IGNyeXB0b19ibGtjaXBoZXJfZW5jcnlwdCgmZGVzYywgJnNnb3V0LCAmc2dpbiwgOCk7CisJaWYgKHJjKSB7CisJCWNFUlJPUigxLCAiY291bGQgbm90IGVuY3J5cHQgY3J5cHQga2V5IHJjOiAlZFxuIiwgcmMpOworCQljcnlwdG9fZnJlZV9ibGtjaXBoZXIodGZtX2Rlcyk7CisJCWdvdG8gc21iaGFzaF9lcnI7CisJfQorCitzbWJoYXNoX2VycjoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQKK0VfUDE2KHVuc2lnbmVkIGNoYXIgKnAxNCwgdW5zaWduZWQgY2hhciAqcDE2KQoreworCWludCByYzsKKwl1bnNpZ25lZCBjaGFyIHNwOFs4XSA9CisJICAgIHsgMHg0YiwgMHg0NywgMHg1MywgMHgyMSwgMHg0MCwgMHgyMywgMHgyNCwgMHgyNSB9OworCisJcmMgPSBzbWJoYXNoKHAxNiwgc3A4LCBwMTQpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCXJjID0gc21iaGFzaChwMTYgKyA4LCBzcDgsIHAxNCArIDcpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludAorRV9QMjQodW5zaWduZWQgY2hhciAqcDIxLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjOCwgdW5zaWduZWQgY2hhciAqcDI0KQoreworCWludCByYzsKKworCXJjID0gc21iaGFzaChwMjQsIGM4LCBwMjEpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCXJjID0gc21iaGFzaChwMjQgKyA4LCBjOCwgcDIxICsgNyk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisJcmMgPSBzbWJoYXNoKHAyNCArIDE2LCBjOCwgcDIxICsgMTQpOworCXJldHVybiByYzsKK30KKwogLyogcHJvZHVjZSBhIG1kNCBtZXNzYWdlIGRpZ2VzdCBmcm9tIGRhdGEgb2YgbGVuZ3RoIG4gYnl0ZXMgKi8KIGludAogbWRmb3VyKHVuc2lnbmVkIGNoYXIgKm1kNF9oYXNoLCB1bnNpZ25lZCBjaGFyICpsaW5rX3N0ciwgaW50IGxpbmtfbGVuKQpAQCAtODcsNDAgKzE2OSwzMCBAQAogCXJldHVybiByYzsKIH0KIAotLyogRG9lcyB0aGUgZGVzIGVuY3J5cHRpb24gZnJvbSB0aGUgTlQgb3IgTE0gTUQ0IGhhc2guICovCi1zdGF0aWMgdm9pZAotU01CT1dGZW5jcnlwdCh1bnNpZ25lZCBjaGFyIHBhc3N3ZFsxNl0sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmM4LAotCSAgICAgIHVuc2lnbmVkIGNoYXIgcDI0WzI0XSkKLXsKLQl1bnNpZ25lZCBjaGFyIHAyMVsyMV07Ci0KLQltZW1zZXQocDIxLCAnXDAnLCAyMSk7Ci0KLQltZW1jcHkocDIxLCBwYXNzd2QsIDE2KTsKLQlFX1AyNChwMjEsIGM4LCBwMjQpOwotfQotCiAvKgogICAgVGhpcyBpbXBsZW1lbnRzIHRoZSBYL09wZW4gU01CIHBhc3N3b3JkIGVuY3J5cHRpb24KICAgIEl0IHRha2VzIGEgcGFzc3dvcmQsIGEgOCBieXRlICJjcnlwdCBrZXkiIGFuZCBwdXRzIDI0IGJ5dGVzIG9mCiAgICBlbmNyeXB0ZWQgcGFzc3dvcmQgaW50byBwMjQgKi8KIC8qIE5vdGUgdGhhdCBwYXNzd29yZCBtdXN0IGJlIHVwcGVyY2FzZWQgYW5kIG51bGwgdGVybWluYXRlZCAqLwotdm9pZAoraW50CiBTTUJlbmNyeXB0KHVuc2lnbmVkIGNoYXIgKnBhc3N3ZCwgY29uc3QgdW5zaWduZWQgY2hhciAqYzgsIHVuc2lnbmVkIGNoYXIgKnAyNCkKIHsKLQl1bnNpZ25lZCBjaGFyIHAxNFsxNV0sIHAyMVsyMV07CisJaW50IHJjOworCXVuc2lnbmVkIGNoYXIgcDE0WzE0XSwgcDE2WzE2XSwgcDIxWzIxXTsKIAotCW1lbXNldChwMjEsICdcMCcsIDIxKTsKIAltZW1zZXQocDE0LCAnXDAnLCAxNCk7Ci0Jc3RybmNweSgoY2hhciAqKSBwMTQsIChjaGFyICopIHBhc3N3ZCwgMTQpOworCW1lbXNldChwMTYsICdcMCcsIDE2KTsKKwltZW1zZXQocDIxLCAnXDAnLCAyMSk7CiAKLS8qCXN0cnVwcGVyKChjaGFyICopcDE0KTsgKi8vKiBCQiBhdCBsZWFzdCB1cHBlcmNhc2UgdGhlIGVhc3kgcmFuZ2UgKi8KLQlFX1AxNihwMTQsIHAyMSk7CisJbWVtY3B5KHAxNCwgcGFzc3dkLCAxNCk7CisJcmMgPSBFX1AxNihwMTQsIHAxNik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CiAKLQlTTUJPV0ZlbmNyeXB0KHAyMSwgYzgsIHAyNCk7CisJbWVtY3B5KHAyMSwgcDE2LCAxNik7CisJcmMgPSBFX1AyNChwMjEsIGM4LCBwMjQpOwogCi0JbWVtc2V0KHAxNCwgMCwgMTUpOwotCW1lbXNldChwMjEsIDAsIDIxKTsKKwlyZXR1cm4gcmM7CiB9CiAKIC8qIFJvdXRpbmVzIGZvciBXaW5kb3dzIE5UIE1ENCBIYXNoIGZ1bmN0aW9ucy4gKi8KQEAgLTI3OSwxNiArMzUxLDE4IEBACiBTTUJOVGVuY3J5cHQodW5zaWduZWQgY2hhciAqcGFzc3dkLCB1bnNpZ25lZCBjaGFyICpjOCwgdW5zaWduZWQgY2hhciAqcDI0KQogewogCWludCByYzsKLQl1bnNpZ25lZCBjaGFyIHAyMVsyMV07CisJdW5zaWduZWQgY2hhciBwMTZbMTZdLCBwMjFbMjFdOwogCisJbWVtc2V0KHAxNiwgJ1wwJywgMTYpOwogCW1lbXNldChwMjEsICdcMCcsIDIxKTsKIAotCXJjID0gRV9tZDRoYXNoKHBhc3N3ZCwgcDIxKTsKKwlyYyA9IEVfbWQ0aGFzaChwYXNzd2QsIHAxNik7CiAJaWYgKHJjKSB7CiAJCWNGWUkoMSwgIiVzIENhbid0IGdlbmVyYXRlIE5UIGhhc2gsIGVycm9yOiAlZCIsIF9fZnVuY19fLCByYyk7CiAJCXJldHVybiByYzsKIAl9Ci0JU01CT1dGZW5jcnlwdChwMjEsIGM4LCBwMjQpOworCW1lbWNweShwMjEsIHAxNiwgMTYpOworCXJjID0gRV9QMjQocDIxLCBjOCwgcDI0KTsKIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvdHJhbnNwb3J0LmMgYi9mcy9jaWZzL3RyYW5zcG9ydC5jCmluZGV4IDQ2ZDg3NTZmLi5mMjUxM2ZiIDEwMDY0NAotLS0gYS9mcy9jaWZzL3RyYW5zcG9ydC5jCisrKyBiL2ZzL2NpZnMvdHJhbnNwb3J0LmMKQEAgLTEyOSw3ICsxMjksNyBAQAogCXVuc2lnbmVkIGludCBsZW4gPSBpb3ZbMF0uaW92X2xlbjsKIAl1bnNpZ25lZCBpbnQgdG90YWxfbGVuOwogCWludCBmaXJzdF92ZWMgPSAwOwotCXVuc2lnbmVkIGludCBzbWJfYnVmX2xlbmd0aCA9IHNtYl9idWZmZXItPnNtYl9idWZfbGVuZ3RoOworCXVuc2lnbmVkIGludCBzbWJfYnVmX2xlbmd0aCA9IGJlMzJfdG9fY3B1KHNtYl9idWZmZXItPnNtYl9idWZfbGVuZ3RoKTsKIAlzdHJ1Y3Qgc29ja2V0ICpzc29ja2V0ID0gc2VydmVyLT5zc29ja2V0OwogCiAJaWYgKHNzb2NrZXQgPT0gTlVMTCkKQEAgLTE0NCwxNyArMTQ0LDEwIEBACiAJZWxzZQogCQlzbWJfbXNnLm1zZ19mbGFncyA9IE1TR19OT1NJR05BTDsKIAotCS8qIHNtYiBoZWFkZXIgaXMgY29udmVydGVkIGluIGhlYWRlcl9hc3NlbWJsZS4gYmNjIGFuZCByZXN0IG9mIFNNQiB3b3JkCi0JICAgYXJlYSwgYW5kIGJ5dGUgYXJlYSBpZiBuZWNlc3NhcnksIGlzIGNvbnZlcnRlZCB0byBsaXR0bGVlbmRpYW4gaW4KLQkgICBjaWZzc21iLmMgYW5kIFJGQzEwMDEgbGVuIGlzIGNvbnZlcnRlZCB0byBiaWdlbmRpYW4gaW4gc21iX3NlbmQKLQkgICBGbGFnczIgaXMgY29udmVydGVkIGluIFNlbmRSZWNlaXZlICovCi0KLQogCXRvdGFsX2xlbiA9IDA7CiAJZm9yIChpID0gMDsgaSA8IG5fdmVjOyBpKyspCiAJCXRvdGFsX2xlbiArPSBpb3ZbaV0uaW92X2xlbjsKIAotCXNtYl9idWZmZXItPnNtYl9idWZfbGVuZ3RoID0gY3B1X3RvX2JlMzIoc21iX2J1ZmZlci0+c21iX2J1Zl9sZW5ndGgpOwogCWNGWUkoMSwgIlNlbmRpbmcgc21iOiAgdG90YWxfbGVuICVkIiwgdG90YWxfbGVuKTsKIAlkdW1wX3NtYihzbWJfYnVmZmVyLCBsZW4pOwogCkBAIC0yNDMsNyArMjM2LDcgQEAKIAogCS8qIERvbid0IHdhbnQgdG8gbW9kaWZ5IHRoZSBidWZmZXIgYXMgYQogCSAgIHNpZGUgZWZmZWN0IG9mIHRoaXMgY2FsbC4gKi8KLQlzbWJfYnVmZmVyLT5zbWJfYnVmX2xlbmd0aCA9IHNtYl9idWZfbGVuZ3RoOworCXNtYl9idWZmZXItPnNtYl9idWZfbGVuZ3RoID0gY3B1X3RvX2JlMzIoc21iX2J1Zl9sZW5ndGgpOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtMzg3LDcgKzM4MCw3IEBACiAjaWZkZWYgQ09ORklHX0NJRlNfU1RBVFMyCiAJYXRvbWljX2luYygmc2VydmVyLT5pblNlbmQpOwogI2VuZGlmCi0JcmMgPSBzbWJfc2VuZChzZXJ2ZXIsIGluX2J1ZiwgaW5fYnVmLT5zbWJfYnVmX2xlbmd0aCk7CisJcmMgPSBzbWJfc2VuZChzZXJ2ZXIsIGluX2J1ZiwgYmUzMl90b19jcHUoaW5fYnVmLT5zbWJfYnVmX2xlbmd0aCkpOwogI2lmZGVmIENPTkZJR19DSUZTX1NUQVRTMgogCWF0b21pY19kZWMoJnNlcnZlci0+aW5TZW5kKTsKIAltaWQtPndoZW5fc2VudCA9IGppZmZpZXM7CkBAIC00MjIsNyArNDE1LDcgQEAKIAlpbnQgcmVzcF9idWZfdHlwZTsKIAogCWlvdlswXS5pb3ZfYmFzZSA9IChjaGFyICopaW5fYnVmOwotCWlvdlswXS5pb3ZfbGVuID0gaW5fYnVmLT5zbWJfYnVmX2xlbmd0aCArIDQ7CisJaW92WzBdLmlvdl9sZW4gPSBiZTMyX3RvX2NwdShpbl9idWYtPnNtYl9idWZfbGVuZ3RoKSArIDQ7CiAJZmxhZ3MgfD0gQ0lGU19OT19SRVNQOwogCXJjID0gU2VuZFJlY2VpdmUyKHhpZCwgc2VzLCBpb3YsIDEsICZyZXNwX2J1Zl90eXBlLCBmbGFncyk7CiAJY0ZZSShEQkcyLCAiU2VuZFJjdk5vUnNwIGZsYWdzICVkIHJjICVkIiwgZmxhZ3MsIHJjKTsKQEAgLTQ4OCwxMCArNDgxLDEwIEBACiAJaW50IHJjID0gMDsKIAogCS8qIC00IGZvciBSRkMxMDAxIGxlbmd0aCBhbmQgKzIgZm9yIEJDQyBmaWVsZCAqLwotCWluX2J1Zi0+c21iX2J1Zl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNtYl9oZHIpIC0gNCAgKyAyOworCWluX2J1Zi0+c21iX2J1Zl9sZW5ndGggPSBjcHVfdG9fYmUzMihzaXplb2Yoc3RydWN0IHNtYl9oZHIpIC0gNCAgKyAyKTsKIAlpbl9idWYtPkNvbW1hbmQgPSBTTUJfQ09NX05UX0NBTkNFTDsKIAlpbl9idWYtPldvcmRDb3VudCA9IDA7Ci0JcHV0X2JjY19sZSgwLCBpbl9idWYpOworCXB1dF9iY2MoMCwgaW5fYnVmKTsKIAogCW11dGV4X2xvY2soJnNlcnZlci0+c3J2X211dGV4KTsKIAlyYyA9IGNpZnNfc2lnbl9zbWIoaW5fYnVmLCBzZXJ2ZXIsICZtaWQtPnNlcXVlbmNlX251bWJlcik7CkBAIC00OTksNyArNDkyLDcgQEAKIAkJbXV0ZXhfdW5sb2NrKCZzZXJ2ZXItPnNydl9tdXRleCk7CiAJCXJldHVybiByYzsKIAl9Ci0JcmMgPSBzbWJfc2VuZChzZXJ2ZXIsIGluX2J1ZiwgaW5fYnVmLT5zbWJfYnVmX2xlbmd0aCk7CisJcmMgPSBzbWJfc2VuZChzZXJ2ZXIsIGluX2J1ZiwgYmUzMl90b19jcHUoaW5fYnVmLT5zbWJfYnVmX2xlbmd0aCkpOwogCW11dGV4X3VubG9jaygmc2VydmVyLT5zcnZfbXV0ZXgpOwogCiAJY0ZZSSgxLCAiaXNzdWVkIE5UX0NBTkNFTCBmb3IgbWlkICV1LCByYyA9ICVkIiwKQEAgLTYxMiw3ICs2MDUsNyBAQAogCQlyZXR1cm4gcmM7CiAJfQogCi0JcmVjZWl2ZV9sZW4gPSBtaWRRLT5yZXNwX2J1Zi0+c21iX2J1Zl9sZW5ndGg7CisJcmVjZWl2ZV9sZW4gPSBiZTMyX3RvX2NwdShtaWRRLT5yZXNwX2J1Zi0+c21iX2J1Zl9sZW5ndGgpOwogCiAJaWYgKHJlY2VpdmVfbGVuID4gQ0lGU01heEJ1ZlNpemUgKyBNQVhfQ0lGU19IRFJfU0laRSkgewogCQljRVJST1IoMSwgIkZyYW1lIHRvbyBsYXJnZSByZWNlaXZlZC4gIExlbmd0aDogJWQgIFhpZDogJWQiLApAQCAtNjUxLDExICs2NDQsNiBAQAogCQlyYyA9IG1hcF9zbWJfdG9fbGludXhfZXJyb3IobWlkUS0+cmVzcF9idWYsCiAJCQkJCSAgICBmbGFncyAmIENJRlNfTE9HX0VSUk9SKTsKIAotCQkvKiBjb252ZXJ0IEJ5dGVDb3VudCBpZiBuZWNlc3NhcnkgKi8KLQkJaWYgKHJlY2VpdmVfbGVuID49IHNpemVvZihzdHJ1Y3Qgc21iX2hkcikgLSA0Ci0JCSAgICAvKiBkbyBub3QgY291bnQgUkZDMTAwMSBoZWFkZXIgKi8gICsKLQkJICAgICgyICogbWlkUS0+cmVzcF9idWYtPldvcmRDb3VudCkgKyAyIC8qIGJjYyAqLyApCi0JCQlwdXRfYmNjKGdldF9iY2NfbGUobWlkUS0+cmVzcF9idWYpLCBtaWRRLT5yZXNwX2J1Zik7CiAJCWlmICgoZmxhZ3MgJiBDSUZTX05PX1JFU1ApID09IDApCiAJCQltaWRRLT5yZXNwX2J1ZiA9IE5VTEw7ICAvKiBtYXJrIGl0IHNvIGJ1ZiB3aWxsCiAJCQkJCQkgICBub3QgYmUgZnJlZWQgYnkKQEAgLTY5OCw5ICs2ODYsMTAgQEAKIAkgICB0byB0aGUgc2FtZSBzZXJ2ZXIuIFdlIG1heSBtYWtlIHRoaXMgY29uZmlndXJhYmxlIGxhdGVyIG9yCiAJICAgdXNlIHNlcy0+bWF4UmVxICovCiAKLQlpZiAoaW5fYnVmLT5zbWJfYnVmX2xlbmd0aCA+IENJRlNNYXhCdWZTaXplICsgTUFYX0NJRlNfSERSX1NJWkUgLSA0KSB7CisJaWYgKGJlMzJfdG9fY3B1KGluX2J1Zi0+c21iX2J1Zl9sZW5ndGgpID4gQ0lGU01heEJ1ZlNpemUgKworCQkJTUFYX0NJRlNfSERSX1NJWkUgLSA0KSB7CiAJCWNFUlJPUigxLCAiSWxsZWdhbCBsZW5ndGgsIGdyZWF0ZXIgdGhhbiBtYXhpbXVtIGZyYW1lLCAlZCIsCi0JCQkgICBpbl9idWYtPnNtYl9idWZfbGVuZ3RoKTsKKwkJCSAgIGJlMzJfdG9fY3B1KGluX2J1Zi0+c21iX2J1Zl9sZW5ndGgpKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC03MzMsNyArNzIyLDcgQEAKICNpZmRlZiBDT05GSUdfQ0lGU19TVEFUUzIKIAlhdG9taWNfaW5jKCZzZXMtPnNlcnZlci0+aW5TZW5kKTsKICNlbmRpZgotCXJjID0gc21iX3NlbmQoc2VzLT5zZXJ2ZXIsIGluX2J1ZiwgaW5fYnVmLT5zbWJfYnVmX2xlbmd0aCk7CisJcmMgPSBzbWJfc2VuZChzZXMtPnNlcnZlciwgaW5fYnVmLCBiZTMyX3RvX2NwdShpbl9idWYtPnNtYl9idWZfbGVuZ3RoKSk7CiAjaWZkZWYgQ09ORklHX0NJRlNfU1RBVFMyCiAJYXRvbWljX2RlYygmc2VzLT5zZXJ2ZXItPmluU2VuZCk7CiAJbWlkUS0+d2hlbl9zZW50ID0gamlmZmllczsKQEAgLTc2OCw3ICs3NTcsNyBAQAogCQlyZXR1cm4gcmM7CiAJfQogCi0JcmVjZWl2ZV9sZW4gPSBtaWRRLT5yZXNwX2J1Zi0+c21iX2J1Zl9sZW5ndGg7CisJcmVjZWl2ZV9sZW4gPSBiZTMyX3RvX2NwdShtaWRRLT5yZXNwX2J1Zi0+c21iX2J1Zl9sZW5ndGgpOwogCiAJaWYgKHJlY2VpdmVfbGVuID4gQ0lGU01heEJ1ZlNpemUgKyBNQVhfQ0lGU19IRFJfU0laRSkgewogCQljRVJST1IoMSwgIkZyYW1lIHRvbyBsYXJnZSByZWNlaXZlZC4gIExlbmd0aDogJWQgIFhpZDogJWQiLApAQCAtNzgxLDcgKzc3MCw3IEBACiAKIAlpZiAobWlkUS0+cmVzcF9idWYgJiYgb3V0X2J1ZgogCSAgICAmJiAobWlkUS0+bWlkU3RhdGUgPT0gTUlEX1JFU1BPTlNFX1JFQ0VJVkVEKSkgewotCQlvdXRfYnVmLT5zbWJfYnVmX2xlbmd0aCA9IHJlY2VpdmVfbGVuOworCQlvdXRfYnVmLT5zbWJfYnVmX2xlbmd0aCA9IGNwdV90b19iZTMyKHJlY2VpdmVfbGVuKTsKIAkJbWVtY3B5KChjaGFyICopb3V0X2J1ZiArIDQsCiAJCSAgICAgICAoY2hhciAqKW1pZFEtPnJlc3BfYnVmICsgNCwKIAkJICAgICAgIHJlY2VpdmVfbGVuKTsKQEAgLTgwMCwxNiArNzg5LDEwIEBACiAJCQl9CiAJCX0KIAotCQkqcGJ5dGVzX3JldHVybmVkID0gb3V0X2J1Zi0+c21iX2J1Zl9sZW5ndGg7CisJCSpwYnl0ZXNfcmV0dXJuZWQgPSBiZTMyX3RvX2NwdShvdXRfYnVmLT5zbWJfYnVmX2xlbmd0aCk7CiAKIAkJLyogQkIgc3BlY2lhbCBjYXNlIHJlY29ubmVjdCB0aWQgYW5kIHVpZCBoZXJlPyAqLwogCQlyYyA9IG1hcF9zbWJfdG9fbGludXhfZXJyb3Iob3V0X2J1ZiwgMCAvKiBubyBsb2cgKi8gKTsKLQotCQkvKiBjb252ZXJ0IEJ5dGVDb3VudCBpZiBuZWNlc3NhcnkgKi8KLQkJaWYgKHJlY2VpdmVfbGVuID49IHNpemVvZihzdHJ1Y3Qgc21iX2hkcikgLSA0Ci0JCSAgICAvKiBkbyBub3QgY291bnQgUkZDMTAwMSBoZWFkZXIgKi8gICsKLQkJICAgICgyICogb3V0X2J1Zi0+V29yZENvdW50KSArIDIgLyogYmNjICovICkKLQkJCXB1dF9iY2MoZ2V0X2JjY19sZShtaWRRLT5yZXNwX2J1ZiksIG1pZFEtPnJlc3BfYnVmKTsKIAl9IGVsc2UgewogCQlyYyA9IC1FSU87CiAJCWNFUlJPUigxLCAiQmFkIE1JRCBzdGF0ZT8iKTsKQEAgLTg3Nyw5ICs4NjAsMTAgQEAKIAkgICB0byB0aGUgc2FtZSBzZXJ2ZXIuIFdlIG1heSBtYWtlIHRoaXMgY29uZmlndXJhYmxlIGxhdGVyIG9yCiAJICAgdXNlIHNlcy0+bWF4UmVxICovCiAKLQlpZiAoaW5fYnVmLT5zbWJfYnVmX2xlbmd0aCA+IENJRlNNYXhCdWZTaXplICsgTUFYX0NJRlNfSERSX1NJWkUgLSA0KSB7CisJaWYgKGJlMzJfdG9fY3B1KGluX2J1Zi0+c21iX2J1Zl9sZW5ndGgpID4gQ0lGU01heEJ1ZlNpemUgKworCQkJTUFYX0NJRlNfSERSX1NJWkUgLSA0KSB7CiAJCWNFUlJPUigxLCAiSWxsZWdhbCBsZW5ndGgsIGdyZWF0ZXIgdGhhbiBtYXhpbXVtIGZyYW1lLCAlZCIsCi0JCQkgICBpbl9idWYtPnNtYl9idWZfbGVuZ3RoKTsKKwkJCSAgIGJlMzJfdG9fY3B1KGluX2J1Zi0+c21iX2J1Zl9sZW5ndGgpKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC05MTAsNyArODk0LDcgQEAKICNpZmRlZiBDT05GSUdfQ0lGU19TVEFUUzIKIAlhdG9taWNfaW5jKCZzZXMtPnNlcnZlci0+aW5TZW5kKTsKICNlbmRpZgotCXJjID0gc21iX3NlbmQoc2VzLT5zZXJ2ZXIsIGluX2J1ZiwgaW5fYnVmLT5zbWJfYnVmX2xlbmd0aCk7CisJcmMgPSBzbWJfc2VuZChzZXMtPnNlcnZlciwgaW5fYnVmLCBiZTMyX3RvX2NwdShpbl9idWYtPnNtYl9idWZfbGVuZ3RoKSk7CiAjaWZkZWYgQ09ORklHX0NJRlNfU1RBVFMyCiAJYXRvbWljX2RlYygmc2VzLT5zZXJ2ZXItPmluU2VuZCk7CiAJbWlkUS0+d2hlbl9zZW50ID0gamlmZmllczsKQEAgLTk3Nyw3ICs5NjEsNyBAQAogCWlmIChyYyAhPSAwKQogCQlyZXR1cm4gcmM7CiAKLQlyZWNlaXZlX2xlbiA9IG1pZFEtPnJlc3BfYnVmLT5zbWJfYnVmX2xlbmd0aDsKKwlyZWNlaXZlX2xlbiA9IGJlMzJfdG9fY3B1KG1pZFEtPnJlc3BfYnVmLT5zbWJfYnVmX2xlbmd0aCk7CiAJaWYgKHJlY2VpdmVfbGVuID4gQ0lGU01heEJ1ZlNpemUgKyBNQVhfQ0lGU19IRFJfU0laRSkgewogCQljRVJST1IoMSwgIkZyYW1lIHRvbyBsYXJnZSByZWNlaXZlZC4gIExlbmd0aDogJWQgIFhpZDogJWQiLAogCQkJcmVjZWl2ZV9sZW4sIHhpZCk7CkBAIC05OTMsNyArOTc3LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0Jb3V0X2J1Zi0+c21iX2J1Zl9sZW5ndGggPSByZWNlaXZlX2xlbjsKKwlvdXRfYnVmLT5zbWJfYnVmX2xlbmd0aCA9IGNwdV90b19iZTMyKHJlY2VpdmVfbGVuKTsKIAltZW1jcHkoKGNoYXIgKilvdXRfYnVmICsgNCwKIAkgICAgICAgKGNoYXIgKiltaWRRLT5yZXNwX2J1ZiArIDQsCiAJICAgICAgIHJlY2VpdmVfbGVuKTsKQEAgLTEwMTIsMTcgKzk5NiwxMSBAQAogCQl9CiAJfQogCi0JKnBieXRlc19yZXR1cm5lZCA9IG91dF9idWYtPnNtYl9idWZfbGVuZ3RoOworCSpwYnl0ZXNfcmV0dXJuZWQgPSBiZTMyX3RvX2NwdShvdXRfYnVmLT5zbWJfYnVmX2xlbmd0aCk7CiAKIAkvKiBCQiBzcGVjaWFsIGNhc2UgcmVjb25uZWN0IHRpZCBhbmQgdWlkIGhlcmU/ICovCiAJcmMgPSBtYXBfc21iX3RvX2xpbnV4X2Vycm9yKG91dF9idWYsIDAgLyogbm8gbG9nICovICk7CiAKLQkvKiBjb252ZXJ0IEJ5dGVDb3VudCBpZiBuZWNlc3NhcnkgKi8KLQlpZiAocmVjZWl2ZV9sZW4gPj0gc2l6ZW9mKHN0cnVjdCBzbWJfaGRyKSAtIDQKLQkgICAgLyogZG8gbm90IGNvdW50IFJGQzEwMDEgaGVhZGVyICovICArCi0JICAgICgyICogb3V0X2J1Zi0+V29yZENvdW50KSArIDIgLyogYmNjICovICkKLQkJcHV0X2JjYyhnZXRfYmNjX2xlKG91dF9idWYpLCBvdXRfYnVmKTsKLQogb3V0OgogCWRlbGV0ZV9taWQobWlkUSk7CiAJaWYgKHJzdGFydCAmJiByYyA9PSAtRUFDQ0VTKQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy94YXR0ci5jIGIvZnMvY2lmcy94YXR0ci5jCmluZGV4IGVhZTJhMTQuLjkxMjk5NWUgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMveGF0dHIuYworKysgYi9mcy9jaWZzL3hhdHRyLmMKQEAgLTExMiw2ICsxMTIsNyBAQAogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnBUY29uOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CiAJY2hhciAqZnVsbF9wYXRoOworCXN0cnVjdCBjaWZzX250c2QgKnBhY2w7CiAKIAlpZiAoZGlyZW50cnkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU87CkBAIC0xNjYsNiArMTY3LDI1IEBACiAJCXJjID0gQ0lGU1NNQlNldEVBKHhpZCwgcFRjb24sIGZ1bGxfcGF0aCwgZWFfbmFtZSwgZWFfdmFsdWUsCiAJCQkoX191MTYpdmFsdWVfc2l6ZSwgY2lmc19zYi0+bG9jYWxfbmxzLAogCQkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CisJfSBlbHNlIGlmIChzdHJuY21wKGVhX25hbWUsIENJRlNfWEFUVFJfQ0lGU19BQ0wsCisJCQlzdHJsZW4oQ0lGU19YQVRUUl9DSUZTX0FDTCkpID09IDApIHsKKwkJcGFjbCA9IGttYWxsb2ModmFsdWVfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcGFjbCkgeworCQkJY0ZZSSgxLCAiJXM6IENhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgQUNMIiwKKwkJCQkJX19mdW5jX18pOworCQkJcmMgPSAtRU5PTUVNOworCQl9IGVsc2UgeworI2lmZGVmIENPTkZJR19DSUZTX0FDTAorCQkJbWVtY3B5KHBhY2wsIGVhX3ZhbHVlLCB2YWx1ZV9zaXplKTsKKwkJCXJjID0gc2V0X2NpZnNfYWNsKHBhY2wsIHZhbHVlX3NpemUsCisJCQkJZGlyZW50cnktPmRfaW5vZGUsIGZ1bGxfcGF0aCk7CisJCQlpZiAocmMgPT0gMCkgLyogZm9yY2UgcmV2YWxpZGF0ZSBvZiB0aGUgaW5vZGUgKi8KKwkJCQlDSUZTX0koZGlyZW50cnktPmRfaW5vZGUpLT50aW1lID0gMDsKKwkJCWtmcmVlKHBhY2wpOworI2Vsc2UKKwkJCWNGWUkoMSwgIlNldCBDSUZTIEFDTCBub3Qgc3VwcG9ydGVkIHlldCIpOworI2VuZGlmIC8qIENPTkZJR19DSUZTX0FDTCAqLworCQl9CiAJfSBlbHNlIHsKIAkJaW50IHRlbXA7CiAJCXRlbXAgPSBzdHJuY21wKGVhX25hbWUsIFBPU0lYX0FDTF9YQVRUUl9BQ0NFU1MsCmRpZmYgLS1naXQgYS9mcy9jb21wYXQuYyBiL2ZzL2NvbXBhdC5jCmluZGV4IDcyZmU2Y2QuLjBlYTAwODMyIDEwMDY0NAotLS0gYS9mcy9jb21wYXQuYworKysgYi9mcy9jb21wYXQuYwpAQCAtMTMwNiwyNDEgKzEzMDYsNiBAQAogCXJldHVybiBkb19zeXNfb3BlbihkZmQsIGZpbGVuYW1lLCBmbGFncywgbW9kZSk7CiB9CiAKLS8qCi0gKiBjb21wYXRfY291bnQoKSBjb3VudHMgdGhlIG51bWJlciBvZiBhcmd1bWVudHMvZW52ZWxvcGVzLiBJdCBpcyBiYXNpY2FsbHkKLSAqIGEgY29weSBvZiBjb3VudCgpIGZyb20gZnMvZXhlYy5jLCBleGNlcHQgdGhhdCBpdCB3b3JrcyB3aXRoIDMyIGJpdCBhcmd2Ci0gKiBhbmQgZW52cCBwb2ludGVycy4KLSAqLwotc3RhdGljIGludCBjb21wYXRfY291bnQoY29tcGF0X3VwdHJfdCBfX3VzZXIgKmFyZ3YsIGludCBtYXgpCi17Ci0JaW50IGkgPSAwOwotCi0JaWYgKGFyZ3YgIT0gTlVMTCkgewotCQlmb3IgKDs7KSB7Ci0JCQljb21wYXRfdXB0cl90IHA7Ci0KLQkJCWlmIChnZXRfdXNlcihwLCBhcmd2KSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCWlmICghcCkKLQkJCQlicmVhazsKLQkJCWFyZ3YrKzsKLQkJCWlmIChpKysgPj0gbWF4KQotCQkJCXJldHVybiAtRTJCSUc7Ci0KLQkJCWlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJCQlyZXR1cm4gLUVSRVNUQVJUTk9IQU5EOwotCQkJY29uZF9yZXNjaGVkKCk7Ci0JCX0KLQl9Ci0JcmV0dXJuIGk7Ci19Ci0KLS8qCi0gKiBjb21wYXRfY29weV9zdHJpbmdzKCkgaXMgYmFzaWNhbGx5IGEgY29weSBvZiBjb3B5X3N0cmluZ3MoKSBmcm9tIGZzL2V4ZWMuYwotICogZXhjZXB0IHRoYXQgaXQgd29ya3Mgd2l0aCAzMiBiaXQgYXJndiBhbmQgZW52cCBwb2ludGVycy4KLSAqLwotc3RhdGljIGludCBjb21wYXRfY29weV9zdHJpbmdzKGludCBhcmdjLCBjb21wYXRfdXB0cl90IF9fdXNlciAqYXJndiwKLQkJCQlzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQotewotCXN0cnVjdCBwYWdlICprbWFwcGVkX3BhZ2UgPSBOVUxMOwotCWNoYXIgKmthZGRyID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIGtwb3MgPSAwOwotCWludCByZXQ7Ci0KLQl3aGlsZSAoYXJnYy0tID4gMCkgewotCQljb21wYXRfdXB0cl90IHN0cjsKLQkJaW50IGxlbjsKLQkJdW5zaWduZWQgbG9uZyBwb3M7Ci0KLQkJaWYgKGdldF91c2VyKHN0ciwgYXJndithcmdjKSB8fAotCQkgICAgIShsZW4gPSBzdHJubGVuX3VzZXIoY29tcGF0X3B0cihzdHIpLCBNQVhfQVJHX1NUUkxFTikpKSB7Ci0JCQlyZXQgPSAtRUZBVUxUOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQlpZiAobGVuID4gTUFYX0FSR19TVFJMRU4pIHsKLQkJCXJldCA9IC1FMkJJRzsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJLyogV2UncmUgZ29pbmcgdG8gd29yayBvdXIgd2F5IGJhY2t3b3Jkcy4gKi8KLQkJcG9zID0gYnBybS0+cDsKLQkJc3RyICs9IGxlbjsKLQkJYnBybS0+cCAtPSBsZW47Ci0KLQkJd2hpbGUgKGxlbiA+IDApIHsKLQkJCWludCBvZmZzZXQsIGJ5dGVzX3RvX2NvcHk7Ci0KLQkJCWlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJCXJldCA9IC1FUkVTVEFSVE5PSEFORDsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCWNvbmRfcmVzY2hlZCgpOwotCi0JCQlvZmZzZXQgPSBwb3MgJSBQQUdFX1NJWkU7Ci0JCQlpZiAob2Zmc2V0ID09IDApCi0JCQkJb2Zmc2V0ID0gUEFHRV9TSVpFOwotCi0JCQlieXRlc190b19jb3B5ID0gb2Zmc2V0OwotCQkJaWYgKGJ5dGVzX3RvX2NvcHkgPiBsZW4pCi0JCQkJYnl0ZXNfdG9fY29weSA9IGxlbjsKLQotCQkJb2Zmc2V0IC09IGJ5dGVzX3RvX2NvcHk7Ci0JCQlwb3MgLT0gYnl0ZXNfdG9fY29weTsKLQkJCXN0ciAtPSBieXRlc190b19jb3B5OwotCQkJbGVuIC09IGJ5dGVzX3RvX2NvcHk7Ci0KLQkJCWlmICgha21hcHBlZF9wYWdlIHx8IGtwb3MgIT0gKHBvcyAmIFBBR0VfTUFTSykpIHsKLQkJCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQotCQkJCXBhZ2UgPSBnZXRfYXJnX3BhZ2UoYnBybSwgcG9zLCAxKTsKLQkJCQlpZiAoIXBhZ2UpIHsKLQkJCQkJcmV0ID0gLUUyQklHOwotCQkJCQlnb3RvIG91dDsKLQkJCQl9Ci0KLQkJCQlpZiAoa21hcHBlZF9wYWdlKSB7Ci0JCQkJCWZsdXNoX2tlcm5lbF9kY2FjaGVfcGFnZShrbWFwcGVkX3BhZ2UpOwotCQkJCQlrdW5tYXAoa21hcHBlZF9wYWdlKTsKLQkJCQkJcHV0X3BhZ2Uoa21hcHBlZF9wYWdlKTsKLQkJCQl9Ci0JCQkJa21hcHBlZF9wYWdlID0gcGFnZTsKLQkJCQlrYWRkciA9IGttYXAoa21hcHBlZF9wYWdlKTsKLQkJCQlrcG9zID0gcG9zICYgUEFHRV9NQVNLOwotCQkJCWZsdXNoX2NhY2hlX3BhZ2UoYnBybS0+dm1hLCBrcG9zLAotCQkJCQkJIHBhZ2VfdG9fcGZuKGttYXBwZWRfcGFnZSkpOwotCQkJfQotCQkJaWYgKGNvcHlfZnJvbV91c2VyKGthZGRyK29mZnNldCwgY29tcGF0X3B0cihzdHIpLAotCQkJCQkJYnl0ZXNfdG9fY29weSkpIHsKLQkJCQlyZXQgPSAtRUZBVUxUOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQl9Ci0JfQotCXJldCA9IDA7Ci1vdXQ6Ci0JaWYgKGttYXBwZWRfcGFnZSkgewotCQlmbHVzaF9rZXJuZWxfZGNhY2hlX3BhZ2Uoa21hcHBlZF9wYWdlKTsKLQkJa3VubWFwKGttYXBwZWRfcGFnZSk7Ci0JCXB1dF9wYWdlKGttYXBwZWRfcGFnZSk7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBjb21wYXRfZG9fZXhlY3ZlKCkgaXMgbW9zdGx5IGEgY29weSBvZiBkb19leGVjdmUoKSwgd2l0aCB0aGUgZXhjZXB0aW9uCi0gKiB0aGF0IGl0IHByb2Nlc3NlcyAzMiBiaXQgYXJndiBhbmQgZW52cCBwb2ludGVycy4KLSAqLwotaW50IGNvbXBhdF9kb19leGVjdmUoY2hhciAqIGZpbGVuYW1lLAotCWNvbXBhdF91cHRyX3QgX191c2VyICphcmd2LAotCWNvbXBhdF91cHRyX3QgX191c2VyICplbnZwLAotCXN0cnVjdCBwdF9yZWdzICogcmVncykKLXsKLQlzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtOwotCXN0cnVjdCBmaWxlICpmaWxlOwotCXN0cnVjdCBmaWxlc19zdHJ1Y3QgKmRpc3BsYWNlZDsKLQlib29sIGNsZWFyX2luX2V4ZWM7Ci0JaW50IHJldHZhbDsKLQotCXJldHZhbCA9IHVuc2hhcmVfZmlsZXMoJmRpc3BsYWNlZCk7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBvdXRfcmV0OwotCi0JcmV0dmFsID0gLUVOT01FTTsKLQlicHJtID0ga3phbGxvYyhzaXplb2YoKmJwcm0pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJwcm0pCi0JCWdvdG8gb3V0X2ZpbGVzOwotCi0JcmV0dmFsID0gcHJlcGFyZV9icHJtX2NyZWRzKGJwcm0pOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gb3V0X2ZyZWU7Ci0KLQlyZXR2YWwgPSBjaGVja191bnNhZmVfZXhlYyhicHJtKTsKLQlpZiAocmV0dmFsIDwgMCkKLQkJZ290byBvdXRfZnJlZTsKLQljbGVhcl9pbl9leGVjID0gcmV0dmFsOwotCWN1cnJlbnQtPmluX2V4ZWN2ZSA9IDE7Ci0KLQlmaWxlID0gb3Blbl9leGVjKGZpbGVuYW1lKTsKLQlyZXR2YWwgPSBQVFJfRVJSKGZpbGUpOwotCWlmIChJU19FUlIoZmlsZSkpCi0JCWdvdG8gb3V0X3VubWFyazsKLQotCXNjaGVkX2V4ZWMoKTsKLQotCWJwcm0tPmZpbGUgPSBmaWxlOwotCWJwcm0tPmZpbGVuYW1lID0gZmlsZW5hbWU7Ci0JYnBybS0+aW50ZXJwID0gZmlsZW5hbWU7Ci0KLQlyZXR2YWwgPSBicHJtX21tX2luaXQoYnBybSk7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBvdXRfZmlsZTsKLQotCWJwcm0tPmFyZ2MgPSBjb21wYXRfY291bnQoYXJndiwgTUFYX0FSR19TVFJJTkdTKTsKLQlpZiAoKHJldHZhbCA9IGJwcm0tPmFyZ2MpIDwgMCkKLQkJZ290byBvdXQ7Ci0KLQlicHJtLT5lbnZjID0gY29tcGF0X2NvdW50KGVudnAsIE1BWF9BUkdfU1RSSU5HUyk7Ci0JaWYgKChyZXR2YWwgPSBicHJtLT5lbnZjKSA8IDApCi0JCWdvdG8gb3V0OwotCi0JcmV0dmFsID0gcHJlcGFyZV9iaW5wcm0oYnBybSk7Ci0JaWYgKHJldHZhbCA8IDApCi0JCWdvdG8gb3V0OwotCi0JcmV0dmFsID0gY29weV9zdHJpbmdzX2tlcm5lbCgxLCAmYnBybS0+ZmlsZW5hbWUsIGJwcm0pOwotCWlmIChyZXR2YWwgPCAwKQotCQlnb3RvIG91dDsKLQotCWJwcm0tPmV4ZWMgPSBicHJtLT5wOwotCXJldHZhbCA9IGNvbXBhdF9jb3B5X3N0cmluZ3MoYnBybS0+ZW52YywgZW52cCwgYnBybSk7Ci0JaWYgKHJldHZhbCA8IDApCi0JCWdvdG8gb3V0OwotCi0JcmV0dmFsID0gY29tcGF0X2NvcHlfc3RyaW5ncyhicHJtLT5hcmdjLCBhcmd2LCBicHJtKTsKLQlpZiAocmV0dmFsIDwgMCkKLQkJZ290byBvdXQ7Ci0KLQlyZXR2YWwgPSBzZWFyY2hfYmluYXJ5X2hhbmRsZXIoYnBybSwgcmVncyk7Ci0JaWYgKHJldHZhbCA8IDApCi0JCWdvdG8gb3V0OwotCi0JLyogZXhlY3ZlIHN1Y2NlZWRlZCAqLwotCWN1cnJlbnQtPmZzLT5pbl9leGVjID0gMDsKLQljdXJyZW50LT5pbl9leGVjdmUgPSAwOwotCWFjY3RfdXBkYXRlX2ludGVncmFscyhjdXJyZW50KTsKLQlmcmVlX2Jwcm0oYnBybSk7Ci0JaWYgKGRpc3BsYWNlZCkKLQkJcHV0X2ZpbGVzX3N0cnVjdChkaXNwbGFjZWQpOwotCXJldHVybiByZXR2YWw7Ci0KLW91dDoKLQlpZiAoYnBybS0+bW0pIHsKLQkJYWNjdF9hcmdfc2l6ZShicHJtLCAwKTsKLQkJbW1wdXQoYnBybS0+bW0pOwotCX0KLQotb3V0X2ZpbGU6Ci0JaWYgKGJwcm0tPmZpbGUpIHsKLQkJYWxsb3dfd3JpdGVfYWNjZXNzKGJwcm0tPmZpbGUpOwotCQlmcHV0KGJwcm0tPmZpbGUpOwotCX0KLQotb3V0X3VubWFyazoKLQlpZiAoY2xlYXJfaW5fZXhlYykKLQkJY3VycmVudC0+ZnMtPmluX2V4ZWMgPSAwOwotCWN1cnJlbnQtPmluX2V4ZWN2ZSA9IDA7Ci0KLW91dF9mcmVlOgotCWZyZWVfYnBybShicHJtKTsKLQotb3V0X2ZpbGVzOgotCWlmIChkaXNwbGFjZWQpCi0JCXJlc2V0X2ZpbGVzX3N0cnVjdChkaXNwbGFjZWQpOwotb3V0X3JldDoKLQlyZXR1cm4gcmV0dmFsOwotfQotCiAjZGVmaW5lIF9fQ09NUEFUX05GREJJVFMgICAgICAgKDggKiBzaXplb2YoY29tcGF0X3Vsb25nX3QpKQogCiBzdGF0aWMgaW50IHBvbGxfc2VsZWN0X2NvcHlfcmVtYWluaW5nKHN0cnVjdCB0aW1lc3BlYyAqZW5kX3RpbWUsIHZvaWQgX191c2VyICpwLApkaWZmIC0tZ2l0IGEvZnMvZGNhY2hlLmMgYi9mcy9kY2FjaGUuYwppbmRleCAyMmEwZWY0Li4xOGIyYTFmIDEwMDY0NAotLS0gYS9mcy9kY2FjaGUuYworKysgYi9mcy9kY2FjaGUuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRfc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9yY3VsaXN0X2JsLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IDVlNjJkMjYuLmMxY2YzNzIgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYworKysgYi9mcy9leGVjLmMKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mc19zdHJ1Y3QuaD4KICNpbmNsdWRlIDxsaW51eC9waXBlX2ZzX2kuaD4KICNpbmNsdWRlIDxsaW51eC9vb20uaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CkBAIC0xNjYsOCArMTY3LDEzIEBACiB9CiAKICNpZmRlZiBDT05GSUdfTU1VCi0KLXZvaWQgYWNjdF9hcmdfc2l6ZShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCB1bnNpZ25lZCBsb25nIHBhZ2VzKQorLyoKKyAqIFRoZSBuYXNjZW50IGJwcm0tPm1tIGlzIG5vdCB2aXNpYmxlIHVudGlsIGV4ZWNfbW1hcCgpIGJ1dCBpdCBjYW4KKyAqIHVzZSBhIGxvdCBvZiBtZW1vcnksIGFjY291bnQgdGhlc2UgcGFnZXMgaW4gY3VycmVudC0+bW0gdGVtcG9yYXJ5CisgKiBmb3Igb29tX2JhZG5lc3MoKS0+Z2V0X21tX3JzcygpLiBPbmNlIGV4ZWMgc3VjY2VlZHMgb3IgZmFpbHMsIHdlCisgKiBjaGFuZ2UgdGhlIGNvdW50ZXIgYmFjayB2aWEgYWNjdF9hcmdfc2l6ZSgwKS4KKyAqLworc3RhdGljIHZvaWQgYWNjdF9hcmdfc2l6ZShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCB1bnNpZ25lZCBsb25nIHBhZ2VzKQogewogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CiAJbG9uZyBkaWZmID0gKGxvbmcpKHBhZ2VzIC0gYnBybS0+dm1hX3BhZ2VzKTsKQEAgLTE4Niw3ICsxOTIsNyBAQAogI2VuZGlmCiB9CiAKLXN0cnVjdCBwYWdlICpnZXRfYXJnX3BhZ2Uoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgdW5zaWduZWQgbG9uZyBwb3MsCitzdGF0aWMgc3RydWN0IHBhZ2UgKmdldF9hcmdfcGFnZShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCB1bnNpZ25lZCBsb25nIHBvcywKIAkJaW50IHdyaXRlKQogewogCXN0cnVjdCBwYWdlICpwYWdlOwpAQCAtMzA1LDExICszMTEsMTEgQEAKIAogI2Vsc2UKIAotdm9pZCBhY2N0X2FyZ19zaXplKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sIHVuc2lnbmVkIGxvbmcgcGFnZXMpCitzdGF0aWMgaW5saW5lIHZvaWQgYWNjdF9hcmdfc2l6ZShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCB1bnNpZ25lZCBsb25nIHBhZ2VzKQogewogfQogCi1zdHJ1Y3QgcGFnZSAqZ2V0X2FyZ19wYWdlKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sIHVuc2lnbmVkIGxvbmcgcG9zLAorc3RhdGljIHN0cnVjdCBwYWdlICpnZXRfYXJnX3BhZ2Uoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgdW5zaWduZWQgbG9uZyBwb3MsCiAJCWludCB3cml0ZSkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKQEAgLTM5OCwyMiArNDA0LDU2IEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RydWN0IHVzZXJfYXJnX3B0ciB7CisjaWZkZWYgQ09ORklHX0NPTVBBVAorCWJvb2wgaXNfY29tcGF0OworI2VuZGlmCisJdW5pb24geworCQljb25zdCBjaGFyIF9fdXNlciAqY29uc3QgX191c2VyICpuYXRpdmU7CisjaWZkZWYgQ09ORklHX0NPTVBBVAorCQljb21wYXRfdXB0cl90IF9fdXNlciAqY29tcGF0OworI2VuZGlmCisJfSBwdHI7Cit9OworCitzdGF0aWMgY29uc3QgY2hhciBfX3VzZXIgKmdldF91c2VyX2FyZ19wdHIoc3RydWN0IHVzZXJfYXJnX3B0ciBhcmd2LCBpbnQgbnIpCit7CisJY29uc3QgY2hhciBfX3VzZXIgKm5hdGl2ZTsKKworI2lmZGVmIENPTkZJR19DT01QQVQKKwlpZiAodW5saWtlbHkoYXJndi5pc19jb21wYXQpKSB7CisJCWNvbXBhdF91cHRyX3QgY29tcGF0OworCisJCWlmIChnZXRfdXNlcihjb21wYXQsIGFyZ3YucHRyLmNvbXBhdCArIG5yKSkKKwkJCXJldHVybiBFUlJfUFRSKC1FRkFVTFQpOworCisJCXJldHVybiBjb21wYXRfcHRyKGNvbXBhdCk7CisJfQorI2VuZGlmCisKKwlpZiAoZ2V0X3VzZXIobmF0aXZlLCBhcmd2LnB0ci5uYXRpdmUgKyBucikpCisJCXJldHVybiBFUlJfUFRSKC1FRkFVTFQpOworCisJcmV0dXJuIG5hdGl2ZTsKK30KKwogLyoKICAqIGNvdW50KCkgY291bnRzIHRoZSBudW1iZXIgb2Ygc3RyaW5ncyBpbiBhcnJheSBBUkdWLgogICovCi1zdGF0aWMgaW50IGNvdW50KGNvbnN0IGNoYXIgX191c2VyICogY29uc3QgX191c2VyICogYXJndiwgaW50IG1heCkKK3N0YXRpYyBpbnQgY291bnQoc3RydWN0IHVzZXJfYXJnX3B0ciBhcmd2LCBpbnQgbWF4KQogewogCWludCBpID0gMDsKIAotCWlmIChhcmd2ICE9IE5VTEwpIHsKKwlpZiAoYXJndi5wdHIubmF0aXZlICE9IE5VTEwpIHsKIAkJZm9yICg7OykgewotCQkJY29uc3QgY2hhciBfX3VzZXIgKiBwOworCQkJY29uc3QgY2hhciBfX3VzZXIgKnAgPSBnZXRfdXNlcl9hcmdfcHRyKGFyZ3YsIGkpOwogCi0JCQlpZiAoZ2V0X3VzZXIocCwgYXJndikpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQlpZiAoIXApCiAJCQkJYnJlYWs7Ci0JCQlhcmd2Kys7CisKKwkJCWlmIChJU19FUlIocCkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisKIAkJCWlmIChpKysgPj0gbWF4KQogCQkJCXJldHVybiAtRTJCSUc7CiAKQEAgLTQzMCw3ICs0NzAsNyBAQAogICogcHJvY2Vzc2VzJ3MgbWVtb3J5IHRvIHRoZSBuZXcgcHJvY2VzcydzIHN0YWNrLiAgVGhlIGNhbGwgdG8gZ2V0X3VzZXJfcGFnZXMoKQogICogZW5zdXJlcyB0aGUgZGVzdGluYXRpb24gcGFnZSBpcyBjcmVhdGVkIGFuZCBub3Qgc3dhcHBlZCBvdXQuCiAgKi8KLXN0YXRpYyBpbnQgY29weV9zdHJpbmdzKGludCBhcmdjLCBjb25zdCBjaGFyIF9fdXNlciAqY29uc3QgX191c2VyICphcmd2LAorc3RhdGljIGludCBjb3B5X3N0cmluZ3MoaW50IGFyZ2MsIHN0cnVjdCB1c2VyX2FyZ19wdHIgYXJndiwKIAkJCXN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiB7CiAJc3RydWN0IHBhZ2UgKmttYXBwZWRfcGFnZSA9IE5VTEw7CkBAIC00NDMsMTYgKzQ4MywxOCBAQAogCQlpbnQgbGVuOwogCQl1bnNpZ25lZCBsb25nIHBvczsKIAotCQlpZiAoZ2V0X3VzZXIoc3RyLCBhcmd2K2FyZ2MpIHx8Ci0JCQkJIShsZW4gPSBzdHJubGVuX3VzZXIoc3RyLCBNQVhfQVJHX1NUUkxFTikpKSB7Ci0JCQlyZXQgPSAtRUZBVUxUOworCQlyZXQgPSAtRUZBVUxUOworCQlzdHIgPSBnZXRfdXNlcl9hcmdfcHRyKGFyZ3YsIGFyZ2MpOworCQlpZiAoSVNfRVJSKHN0cikpCiAJCQlnb3RvIG91dDsKLQkJfQogCi0JCWlmICghdmFsaWRfYXJnX2xlbihicHJtLCBsZW4pKSB7Ci0JCQlyZXQgPSAtRTJCSUc7CisJCWxlbiA9IHN0cm5sZW5fdXNlcihzdHIsIE1BWF9BUkdfU1RSTEVOKTsKKwkJaWYgKCFsZW4pCiAJCQlnb3RvIG91dDsKLQkJfQorCisJCXJldCA9IC1FMkJJRzsKKwkJaWYgKCF2YWxpZF9hcmdfbGVuKGJwcm0sIGxlbikpCisJCQlnb3RvIG91dDsKIAogCQkvKiBXZSdyZSBnb2luZyB0byB3b3JrIG91ciB3YXkgYmFja3dvcmRzLiAqLwogCQlwb3MgPSBicHJtLT5wOwpAQCAtNTE5LDE0ICs1NjEsMTkgQEAKIC8qCiAgKiBMaWtlIGNvcHlfc3RyaW5ncywgYnV0IGdldCBhcmd2IGFuZCBpdHMgdmFsdWVzIGZyb20ga2VybmVsIG1lbW9yeS4KICAqLwotaW50IGNvcHlfc3RyaW5nc19rZXJuZWwoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmNvbnN0ICphcmd2LAoraW50IGNvcHlfc3RyaW5nc19rZXJuZWwoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmNvbnN0ICpfX2FyZ3YsCiAJCQlzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQogewogCWludCByOwogCW1tX3NlZ21lbnRfdCBvbGRmcyA9IGdldF9mcygpOworCXN0cnVjdCB1c2VyX2FyZ19wdHIgYXJndiA9IHsKKwkJLnB0ci5uYXRpdmUgPSAoY29uc3QgY2hhciBfX3VzZXIgKmNvbnN0ICBfX3VzZXIgKilfX2FyZ3YsCisJfTsKKwogCXNldF9mcyhLRVJORUxfRFMpOwotCXIgPSBjb3B5X3N0cmluZ3MoYXJnYywgKGNvbnN0IGNoYXIgX191c2VyICpjb25zdCAgX191c2VyICopYXJndiwgYnBybSk7CisJciA9IGNvcHlfc3RyaW5ncyhhcmdjLCBhcmd2LCBicHJtKTsKIAlzZXRfZnMob2xkZnMpOworCiAJcmV0dXJuIHI7CiB9CiBFWFBPUlRfU1lNQk9MKGNvcHlfc3RyaW5nc19rZXJuZWwpOwpAQCAtMTAwNCw2ICsxMDUxLDcgQEAKIAl0YXNrX3VubG9jayh0c2spOwogCXJldHVybiBidWY7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChnZXRfdGFza19jb21tKTsKIAogdm9pZCBzZXRfdGFza19jb21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBjaGFyICpidWYpCiB7CkBAIC0xMzc5LDEwICsxNDI3LDEwIEBACiAvKgogICogc3lzX2V4ZWN2ZSgpIGV4ZWN1dGVzIGEgbmV3IHByb2dyYW0uCiAgKi8KLWludCBkb19leGVjdmUoY29uc3QgY2hhciAqIGZpbGVuYW1lLAotCWNvbnN0IGNoYXIgX191c2VyICpjb25zdCBfX3VzZXIgKmFyZ3YsCi0JY29uc3QgY2hhciBfX3VzZXIgKmNvbnN0IF9fdXNlciAqZW52cCwKLQlzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCitzdGF0aWMgaW50IGRvX2V4ZWN2ZV9jb21tb24oY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkJc3RydWN0IHVzZXJfYXJnX3B0ciBhcmd2LAorCQkJCXN0cnVjdCB1c2VyX2FyZ19wdHIgZW52cCwKKwkJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtOwogCXN0cnVjdCBmaWxlICpmaWxlOwpAQCAtMTQ4OSw2ICsxNTM3LDM0IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAoraW50IGRvX2V4ZWN2ZShjb25zdCBjaGFyICpmaWxlbmFtZSwKKwljb25zdCBjaGFyIF9fdXNlciAqY29uc3QgX191c2VyICpfX2FyZ3YsCisJY29uc3QgY2hhciBfX3VzZXIgKmNvbnN0IF9fdXNlciAqX19lbnZwLAorCXN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2VyX2FyZ19wdHIgYXJndiA9IHsgLnB0ci5uYXRpdmUgPSBfX2FyZ3YgfTsKKwlzdHJ1Y3QgdXNlcl9hcmdfcHRyIGVudnAgPSB7IC5wdHIubmF0aXZlID0gX19lbnZwIH07CisJcmV0dXJuIGRvX2V4ZWN2ZV9jb21tb24oZmlsZW5hbWUsIGFyZ3YsIGVudnAsIHJlZ3MpOworfQorCisjaWZkZWYgQ09ORklHX0NPTVBBVAoraW50IGNvbXBhdF9kb19leGVjdmUoY2hhciAqZmlsZW5hbWUsCisJY29tcGF0X3VwdHJfdCBfX3VzZXIgKl9fYXJndiwKKwljb21wYXRfdXB0cl90IF9fdXNlciAqX19lbnZwLAorCXN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2VyX2FyZ19wdHIgYXJndiA9IHsKKwkJLmlzX2NvbXBhdCA9IHRydWUsCisJCS5wdHIuY29tcGF0ID0gX19hcmd2LAorCX07CisJc3RydWN0IHVzZXJfYXJnX3B0ciBlbnZwID0geworCQkuaXNfY29tcGF0ID0gdHJ1ZSwKKwkJLnB0ci5jb21wYXQgPSBfX2VudnAsCisJfTsKKwlyZXR1cm4gZG9fZXhlY3ZlX2NvbW1vbihmaWxlbmFtZSwgYXJndiwgZW52cCwgcmVncyk7Cit9CisjZW5kaWYKKwogdm9pZCBzZXRfYmluZm10KHN0cnVjdCBsaW51eF9iaW5mbXQgKm5ldykKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOwpAQCAtMTY1OSw2ICsxNzM1LDcgQEAKIAogCXQgPSBzdGFydDsKIAlkbyB7CisJCXRhc2tfY2xlYXJfZ3JvdXBfc3RvcF9wZW5kaW5nKHQpOwogCQlpZiAodCAhPSBjdXJyZW50ICYmIHQtPm1tKSB7CiAJCQlzaWdhZGRzZXQoJnQtPnBlbmRpbmcuc2lnbmFsLCBTSUdLSUxMKTsKIAkJCXNpZ25hbF93YWtlX3VwKHQsIDEpOwpkaWZmIC0tZ2l0IGEvZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jIGIvZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jCmluZGV4IDJiYTY3MTkuLjFhNDMxMTQgMTAwNjQ0Ci0tLSBhL2ZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYworKysgYi9mcy9mcmVldnhmcy92eGZzX2lub2RlLmMKQEAgLTI3Miw3ICsyNzIsNyBAQAogICogKmlwOgkJCVZGUyBpbm9kZQogICoKICAqIERlc2NyaXB0aW9uOgotICogIHZ4ZnNfcHV0X2Zha2VfaW5vZGUgZnJlZXMgYWxsIGRhdGEgYXNzc29jaWF0ZWQgd2l0aCBAaXAuCisgKiAgdnhmc19wdXRfZmFrZV9pbm9kZSBmcmVlcyBhbGwgZGF0YSBhc3NvY2lhdGVkIHdpdGggQGlwLgogICovCiB2b2lkCiB2eGZzX3B1dF9mYWtlX2lub2RlKHN0cnVjdCBpbm9kZSAqaXApCmRpZmYgLS1naXQgYS9mcy9nZnMyL01ha2VmaWxlIGIvZnMvZ2ZzMi9NYWtlZmlsZQppbmRleCBmM2QyM2VmLi44NjEyODIwIDEwMDY0NAotLS0gYS9mcy9nZnMyL01ha2VmaWxlCisrKyBiL2ZzL2dmczIvTWFrZWZpbGUKQEAgLTEsOSArMSw5IEBACiBjY2ZsYWdzLXkgOj0gLUkkKHNyYykKIG9iai0kKENPTkZJR19HRlMyX0ZTKSArPSBnZnMyLm8KIGdmczIteSA6PSBhY2wubyBibWFwLm8gZGlyLm8geGF0dHIubyBnbG9jay5vIFwKLQlnbG9wcy5vIGlub2RlLm8gbG9nLm8gbG9wcy5vIG1haW4ubyBtZXRhX2lvLm8gXAorCWdsb3BzLm8gbG9nLm8gbG9wcy5vIG1haW4ubyBtZXRhX2lvLm8gXAogCWFvcHMubyBkZW50cnkubyBleHBvcnQubyBmaWxlLm8gXAotCW9wc19mc3R5cGUubyBvcHNfaW5vZGUubyBxdW90YS5vIFwKKwlvcHNfZnN0eXBlLm8gaW5vZGUubyBxdW90YS5vIFwKIAlyZWNvdmVyeS5vIHJncnAubyBzdXBlci5vIHN5cy5vIHRyYW5zLm8gdXRpbC5vCiAKIGdmczItJChDT05GSUdfR0ZTMl9GU19MT0NLSU5HX0RMTSkgKz0gbG9ja19kbG0ubwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9hb3BzLmMgYi9mcy9nZnMyL2FvcHMuYwppbmRleCAwZjVjNGY5Li44MDJhYzVlIDEwMDY0NAotLS0gYS9mcy9nZnMyL2FvcHMuYworKysgYi9mcy9nZnMyL2FvcHMuYwpAQCAtMTA3Niw4ICsxMDc2LDggQEAKIAkJYmQgPSBiaC0+Yl9wcml2YXRlOwogCQlpZiAoYmQgJiYgYmQtPmJkX2FpbCkKIAkJCWdvdG8gY2Fubm90X3JlbGVhc2U7Ci0JCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCAhYnVmZmVyX3Bpbm5lZChiaCkpOwotCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgIWJ1ZmZlcl9kaXJ0eShiaCkpOworCQlpZiAoYnVmZmVyX3Bpbm5lZChiaCkgfHwgYnVmZmVyX2RpcnR5KGJoKSkKKwkJCWdvdG8gbm90X3Bvc3NpYmxlOwogCQliaCA9IGJoLT5iX3RoaXNfcGFnZTsKIAl9IHdoaWxlKGJoICE9IGhlYWQpOwogCWdmczJfbG9nX3VubG9jayhzZHApOwpAQCAtMTEwNyw2ICsxMTA3LDEwIEBACiAJfSB3aGlsZSAoYmggIT0gaGVhZCk7CiAKIAlyZXR1cm4gdHJ5X3RvX2ZyZWVfYnVmZmVycyhwYWdlKTsKKworbm90X3Bvc3NpYmxlOiAvKiBTaG91bGQgbmV2ZXIgaGFwcGVuICovCisJV0FSTl9PTihidWZmZXJfZGlydHkoYmgpKTsKKwlXQVJOX09OKGJ1ZmZlcl9waW5uZWQoYmgpKTsKIGNhbm5vdF9yZWxlYXNlOgogCWdmczJfbG9nX3VubG9jayhzZHApOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9ibWFwLmMgYi9mcy9nZnMyL2JtYXAuYwppbmRleCA3NGFkZDJkLi5lNjU0OTNhIDEwMDY0NAotLS0gYS9mcy9nZnMyL2JtYXAuYworKysgYi9mcy9nZnMyL2JtYXAuYwpAQCAtNzgwLDYgKzc4MCw4IEBACiAJbWV0YWRhdGEgPSAoaGVpZ2h0ICE9IGlwLT5pX2hlaWdodCAtIDEpOwogCWlmIChtZXRhZGF0YSkKIAkJcmV2b2tlcyA9IChoZWlnaHQpID8gc2RwLT5zZF9pbnB0cnMgOiBzZHAtPnNkX2RpcHRyczsKKwllbHNlIGlmIChpcC0+aV9kZXB0aCkKKwkJcmV2b2tlcyA9IHNkcC0+c2RfaW5wdHJzOwogCiAJaWYgKGlwICE9IEdGUzJfSShzZHAtPnNkX3JpbmRleCkpCiAJCWVycm9yID0gZ2ZzMl9yaW5kZXhfaG9sZChzZHAsICZpcC0+aV9hbGxvYy0+YWxfcmlfZ2gpOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9kaXIuYyBiL2ZzL2dmczIvZGlyLmMKaW5kZXggZjc4OWM1Ny4uMDkxZWU0NyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9kaXIuYworKysgYi9mcy9nZnMyL2Rpci5jCkBAIC04MiwxMiArODIsOSBAQAogc3RydWN0IHFzdHIgZ2ZzMl9xZG90IF9fcmVhZF9tb3N0bHk7CiBzdHJ1Y3QgcXN0ciBnZnMyX3Fkb3Rkb3QgX19yZWFkX21vc3RseTsKIAotdHlwZWRlZiBpbnQgKCpsZWFmX2NhbGxfdCkgKHN0cnVjdCBnZnMyX2lub2RlICpkaXAsIHUzMiBpbmRleCwgdTMyIGxlbiwKLQkJCSAgICB1NjQgbGVhZl9ubywgdm9pZCAqZGF0YSk7CiB0eXBlZGVmIGludCAoKmdmczJfZHNjYW5fdCkoY29uc3Qgc3RydWN0IGdmczJfZGlyZW50ICpkZW50LAogCQkJICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLCB2b2lkICpvcGFxdWUpOwogCi0KIGludCBnZnMyX2Rpcl9nZXRfbmV3X2J1ZmZlcihzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHU2NCBibG9jaywKIAkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHApCiB7CkBAIC0xNjAwLDcgKzE1OTcsNyBAQAogICovCiAKIGludCBnZnMyX2Rpcl9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCi0JCSBjb25zdCBzdHJ1Y3QgZ2ZzMl9pbm9kZSAqbmlwLCB1bnNpZ25lZCB0eXBlKQorCQkgY29uc3Qgc3RydWN0IGdmczJfaW5vZGUgKm5pcCkKIHsKIAlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koaW5vZGUpOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CkBAIC0xNjE2LDcgKzE2MTMsNyBAQAogCQkJCXJldHVybiBQVFJfRVJSKGRlbnQpOwogCQkJZGVudCA9IGdmczJfaW5pdF9kaXJlbnQoaW5vZGUsIGRlbnQsIG5hbWUsIGJoKTsKIAkJCWdmczJfaW51bV9vdXQobmlwLCBkZW50KTsKLQkJCWRlbnQtPmRlX3R5cGUgPSBjcHVfdG9fYmUxNih0eXBlKTsKKwkJCWRlbnQtPmRlX3R5cGUgPSBjcHVfdG9fYmUxNihJRjJEVChuaXAtPmlfaW5vZGUuaV9tb2RlKSk7CiAJCQlpZiAoaXAtPmlfZGlza2ZsYWdzICYgR0ZTMl9ESUZfRVhIQVNIKSB7CiAJCQkJbGVhZiA9IChzdHJ1Y3QgZ2ZzMl9sZWFmICopYmgtPmJfZGF0YTsKIAkJCQliZTE2X2FkZF9jcHUoJmxlYWYtPmxmX2VudHJpZXMsIDEpOwpAQCAtMTYyOCw2ICsxNjI1LDggQEAKIAkJCWdmczJfdHJhbnNfYWRkX2JoKGlwLT5pX2dsLCBiaCwgMSk7CiAJCQlpcC0+aV9lbnRyaWVzKys7CiAJCQlpcC0+aV9pbm9kZS5pX210aW1lID0gaXAtPmlfaW5vZGUuaV9jdGltZSA9IENVUlJFTlRfVElNRTsKKwkJCWlmIChTX0lTRElSKG5pcC0+aV9pbm9kZS5pX21vZGUpKQorCQkJCWluY19ubGluaygmaXAtPmlfaW5vZGUpOwogCQkJZ2ZzMl9kaW5vZGVfb3V0KGlwLCBiaC0+Yl9kYXRhKTsKIAkJCWJyZWxzZShiaCk7CiAJCQllcnJvciA9IDA7CkBAIC0xNjcyLDggKzE2NzEsOSBAQAogICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG9uIGZhaWx1cmUKICAqLwogCi1pbnQgZ2ZzMl9kaXJfZGVsKHN0cnVjdCBnZnMyX2lub2RlICpkaXAsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKQoraW50IGdmczJfZGlyX2RlbChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqZGlwLCBjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CisJY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUgPSAmZGVudHJ5LT5kX25hbWU7CiAJc3RydWN0IGdmczJfZGlyZW50ICpkZW50LCAqcHJldiA9IE5VTEw7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAlpbnQgZXJyb3I7CkBAIC0xNzE0LDYgKzE3MTQsOCBAQAogCWdmczJfdHJhbnNfYWRkX2JoKGRpcC0+aV9nbCwgYmgsIDEpOwogCWRpcC0+aV9lbnRyaWVzLS07CiAJZGlwLT5pX2lub2RlLmlfbXRpbWUgPSBkaXAtPmlfaW5vZGUuaV9jdGltZSA9IENVUlJFTlRfVElNRTsKKwlpZiAoU19JU0RJUihkZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpCisJCWRyb3BfbmxpbmsoJmRpcC0+aV9pbm9kZSk7CiAJZ2ZzMl9kaW5vZGVfb3V0KGRpcCwgYmgtPmJfZGF0YSk7CiAJYnJlbHNlKGJoKTsKIAltYXJrX2lub2RlX2RpcnR5KCZkaXAtPmlfaW5vZGUpOwpAQCAtMTc2OCwyNSArMTc3MCwxNTkgQEAKIH0KIAogLyoqCi0gKiBmb3JlYWNoX2xlYWYgLSBjYWxsIGEgZnVuY3Rpb24gZm9yIGVhY2ggbGVhZiBpbiBhIGRpcmVjdG9yeQorICogbGVhZl9kZWFsbG9jIC0gRGVhbGxvY2F0ZSBhIGRpcmVjdG9yeSBsZWFmCiAgKiBAZGlwOiB0aGUgZGlyZWN0b3J5Ci0gKiBAbGM6IHRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGVhY2gKLSAqIEBkYXRhOiBwcml2YXRlIGRhdGEgdG8gcGFzcyB0byBpdAorICogQGluZGV4OiB0aGUgaGFzaCB0YWJsZSBvZmZzZXQgaW4gdGhlIGRpcmVjdG9yeQorICogQGxlbjogdGhlIG51bWJlciBvZiBwb2ludGVycyB0byB0aGlzIGxlYWYKKyAqIEBsZWFmX25vOiB0aGUgbGVhZiBudW1iZXIKKyAqIEBsZWFmX2JoOiBidWZmZXJfaGVhZCBmb3IgdGhlIHN0YXJ0aW5nIGxlYWYKKyAqIGxhc3RfZGVhbGxvYzogMSBpZiB0aGlzIGlzIHRoZSBmaW5hbCBkZWFsbG9jIGZvciB0aGUgbGVhZiwgZWxzZSAwCiAgKgogICogUmV0dXJuczogZXJybm8KICAqLwogCi1zdGF0aWMgaW50IGZvcmVhY2hfbGVhZihzdHJ1Y3QgZ2ZzMl9pbm9kZSAqZGlwLCBsZWFmX2NhbGxfdCBsYywgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgbGVhZl9kZWFsbG9jKHN0cnVjdCBnZnMyX2lub2RlICpkaXAsIHUzMiBpbmRleCwgdTMyIGxlbiwKKwkJCXU2NCBsZWFmX25vLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmxlYWZfYmgsCisJCQlpbnQgbGFzdF9kZWFsbG9jKQoreworCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQigmZGlwLT5pX2lub2RlKTsKKwlzdHJ1Y3QgZ2ZzMl9sZWFmICp0bXBfbGVhZjsKKwlzdHJ1Y3QgZ2ZzMl9yZ3JwX2xpc3Qgcmxpc3Q7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgKmRpYmg7CisJdTY0IGJsaywgbmJsazsKKwl1bnNpZ25lZCBpbnQgcmdfYmxvY2tzID0gMCwgbF9ibG9ja3MgPSAwOworCWNoYXIgKmh0OworCXVuc2lnbmVkIGludCB4LCBzaXplID0gbGVuICogc2l6ZW9mKHU2NCk7CisJaW50IGVycm9yOworCisJbWVtc2V0KCZybGlzdCwgMCwgc2l6ZW9mKHN0cnVjdCBnZnMyX3JncnBfbGlzdCkpOworCisJaHQgPSBremFsbG9jKHNpemUsIEdGUF9OT0ZTKTsKKwlpZiAoIWh0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmICghZ2ZzMl9hbGxvY19nZXQoZGlwKSkgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWVycm9yID0gZ2ZzMl9xdW90YV9ob2xkKGRpcCwgTk9fUVVPVEFfQ0hBTkdFLCBOT19RVU9UQV9DSEFOR0UpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfcHV0OworCisJZXJyb3IgPSBnZnMyX3JpbmRleF9ob2xkKHNkcCwgJmRpcC0+aV9hbGxvYy0+YWxfcmlfZ2gpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfcXM7CisKKwkvKiAgQ291bnQgdGhlIG51bWJlciBvZiBsZWF2ZXMgICovCisJYmggPSBsZWFmX2JoOworCisJZm9yIChibGsgPSBsZWFmX25vOyBibGs7IGJsayA9IG5ibGspIHsKKwkJaWYgKGJsayAhPSBsZWFmX25vKSB7CisJCQllcnJvciA9IGdldF9sZWFmKGRpcCwgYmxrLCAmYmgpOworCQkJaWYgKGVycm9yKQorCQkJCWdvdG8gb3V0X3JsaXN0OworCQl9CisJCXRtcF9sZWFmID0gKHN0cnVjdCBnZnMyX2xlYWYgKiliaC0+Yl9kYXRhOworCQluYmxrID0gYmU2NF90b19jcHUodG1wX2xlYWYtPmxmX25leHQpOworCQlpZiAoYmxrICE9IGxlYWZfbm8pCisJCQlicmVsc2UoYmgpOworCisJCWdmczJfcmxpc3RfYWRkKHNkcCwgJnJsaXN0LCBibGspOworCQlsX2Jsb2NrcysrOworCX0KKworCWdmczJfcmxpc3RfYWxsb2MoJnJsaXN0LCBMTV9TVF9FWENMVVNJVkUpOworCisJZm9yICh4ID0gMDsgeCA8IHJsaXN0LnJsX3JncnBzOyB4KyspIHsKKwkJc3RydWN0IGdmczJfcmdycGQgKnJnZDsKKwkJcmdkID0gcmxpc3QucmxfZ2hzW3hdLmdoX2dsLT5nbF9vYmplY3Q7CisJCXJnX2Jsb2NrcyArPSByZ2QtPnJkX2xlbmd0aDsKKwl9CisKKwllcnJvciA9IGdmczJfZ2xvY2tfbnFfbShybGlzdC5ybF9yZ3Jwcywgcmxpc3QucmxfZ2hzKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X3JsaXN0OworCisJZXJyb3IgPSBnZnMyX3RyYW5zX2JlZ2luKHNkcCwKKwkJCXJnX2Jsb2NrcyArIChESVZfUk9VTkRfVVAoc2l6ZSwgc2RwLT5zZF9qYnNpemUpICsgMSkgKworCQkJUkVTX0RJTk9ERSArIFJFU19TVEFURlMgKyBSRVNfUVVPVEEsIGxfYmxvY2tzKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X3JnX2d1bmxvY2s7CisKKwliaCA9IGxlYWZfYmg7CisKKwlmb3IgKGJsayA9IGxlYWZfbm87IGJsazsgYmxrID0gbmJsaykgeworCQlpZiAoYmxrICE9IGxlYWZfbm8pIHsKKwkJCWVycm9yID0gZ2V0X2xlYWYoZGlwLCBibGssICZiaCk7CisJCQlpZiAoZXJyb3IpCisJCQkJZ290byBvdXRfZW5kX3RyYW5zOworCQl9CisJCXRtcF9sZWFmID0gKHN0cnVjdCBnZnMyX2xlYWYgKiliaC0+Yl9kYXRhOworCQluYmxrID0gYmU2NF90b19jcHUodG1wX2xlYWYtPmxmX25leHQpOworCQlpZiAoYmxrICE9IGxlYWZfbm8pCisJCQlicmVsc2UoYmgpOworCisJCWdmczJfZnJlZV9tZXRhKGRpcCwgYmxrLCAxKTsKKwkJZ2ZzMl9hZGRfaW5vZGVfYmxvY2tzKCZkaXAtPmlfaW5vZGUsIC0xKTsKKwl9CisKKwllcnJvciA9IGdmczJfZGlyX3dyaXRlX2RhdGEoZGlwLCBodCwgaW5kZXggKiBzaXplb2YodTY0KSwgc2l6ZSk7CisJaWYgKGVycm9yICE9IHNpemUpIHsKKwkJaWYgKGVycm9yID49IDApCisJCQllcnJvciA9IC1FSU87CisJCWdvdG8gb3V0X2VuZF90cmFuczsKKwl9CisKKwllcnJvciA9IGdmczJfbWV0YV9pbm9kZV9idWZmZXIoZGlwLCAmZGliaCk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9lbmRfdHJhbnM7CisKKwlnZnMyX3RyYW5zX2FkZF9iaChkaXAtPmlfZ2wsIGRpYmgsIDEpOworCS8qIE9uIHRoZSBsYXN0IGRlYWxsb2MsIG1ha2UgdGhpcyBhIHJlZ3VsYXIgZmlsZSBpbiBjYXNlIHdlIGNyYXNoLgorCSAgIChXZSBkb24ndCB3YW50IHRvIGZyZWUgdGhlc2UgYmxvY2tzIGEgc2Vjb25kIHRpbWUuKSAgKi8KKwlpZiAobGFzdF9kZWFsbG9jKQorCQlkaXAtPmlfaW5vZGUuaV9tb2RlID0gU19JRlJFRzsKKwlnZnMyX2Rpbm9kZV9vdXQoZGlwLCBkaWJoLT5iX2RhdGEpOworCWJyZWxzZShkaWJoKTsKKworb3V0X2VuZF90cmFuczoKKwlnZnMyX3RyYW5zX2VuZChzZHApOworb3V0X3JnX2d1bmxvY2s6CisJZ2ZzMl9nbG9ja19kcV9tKHJsaXN0LnJsX3JncnBzLCBybGlzdC5ybF9naHMpOworb3V0X3JsaXN0OgorCWdmczJfcmxpc3RfZnJlZSgmcmxpc3QpOworCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZkaXAtPmlfYWxsb2MtPmFsX3JpX2doKTsKK291dF9xczoKKwlnZnMyX3F1b3RhX3VuaG9sZChkaXApOworb3V0X3B1dDoKKwlnZnMyX2FsbG9jX3B1dChkaXApOworb3V0OgorCWtmcmVlKGh0KTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogZ2ZzMl9kaXJfZXhoYXNoX2RlYWxsb2MgLSBmcmVlIGFsbCB0aGUgbGVhZiBibG9ja3MgaW4gYSBkaXJlY3RvcnkKKyAqIEBkaXA6IHRoZSBkaXJlY3RvcnkKKyAqCisgKiBEZWFsbG9jIGFsbCBvbi1kaXNrIGRpcmVjdG9yeSBsZWF2ZXMgdG8gRlJFRU1FVEEgc3RhdGUKKyAqIENoYW5nZSBvbi1kaXNrIGlub2RlIHR5cGUgdG8gInJlZ3VsYXIgZmlsZSIKKyAqCisgKiBSZXR1cm5zOiBlcnJubworICovCisKK2ludCBnZnMyX2Rpcl9leGhhc2hfZGVhbGxvYyhzdHJ1Y3QgZ2ZzMl9pbm9kZSAqZGlwKQogewogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQigmZGlwLT5pX2lub2RlKTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCXN0cnVjdCBnZnMyX2xlYWYgKmxlYWY7CiAJdTMyIGhzaXplLCBsZW47CiAJdTMyIGh0X29mZnNldCwgbHBfb2Zmc2V0LCBodF9vZmZzZXRfY3VyID0gLTE7Ci0JdTMyIGluZGV4ID0gMDsKKwl1MzIgaW5kZXggPSAwLCBuZXh0X2luZGV4OwogCV9fYmU2NCAqbHA7CiAJdTY0IGxlYWZfbm87Ci0JaW50IGVycm9yID0gMDsKKwlpbnQgZXJyb3IgPSAwLCBsYXN0OwogCiAJaHNpemUgPSAxIDw8IGRpcC0+aV9kZXB0aDsKIAlpZiAoaHNpemUgKiBzaXplb2YodTY0KSAhPSBpX3NpemVfcmVhZCgmZGlwLT5pX2lub2RlKSkgewpAQCAtMTgyMSwxMyArMTk1NywxNSBAQAogCQkJCWdvdG8gb3V0OwogCQkJbGVhZiA9IChzdHJ1Y3QgZ2ZzMl9sZWFmICopYmgtPmJfZGF0YTsKIAkJCWxlbiA9IDEgPDwgKGRpcC0+aV9kZXB0aCAtIGJlMTZfdG9fY3B1KGxlYWYtPmxmX2RlcHRoKSk7Ci0JCQlicmVsc2UoYmgpOwogCi0JCQllcnJvciA9IGxjKGRpcCwgaW5kZXgsIGxlbiwgbGVhZl9ubywgZGF0YSk7CisJCQluZXh0X2luZGV4ID0gKGluZGV4ICYgfihsZW4gLSAxKSkgKyBsZW47CisJCQlsYXN0ID0gKChuZXh0X2luZGV4ID49IGhzaXplKSA/IDEgOiAwKTsKKwkJCWVycm9yID0gbGVhZl9kZWFsbG9jKGRpcCwgaW5kZXgsIGxlbiwgbGVhZl9ubywgYmgsCisJCQkJCSAgICAgbGFzdCk7CisJCQlicmVsc2UoYmgpOwogCQkJaWYgKGVycm9yKQogCQkJCWdvdG8gb3V0OwotCi0JCQlpbmRleCA9IChpbmRleCAmIH4obGVuIC0gMSkpICsgbGVuOworCQkJaW5kZXggPSBuZXh0X2luZGV4OwogCQl9IGVsc2UKIAkJCWluZGV4Kys7CiAJfQpAQCAtMTg0NCwxNjUgKzE5ODIsNiBAQAogfQogCiAvKioKLSAqIGxlYWZfZGVhbGxvYyAtIERlYWxsb2NhdGUgYSBkaXJlY3RvcnkgbGVhZgotICogQGRpcDogdGhlIGRpcmVjdG9yeQotICogQGluZGV4OiB0aGUgaGFzaCB0YWJsZSBvZmZzZXQgaW4gdGhlIGRpcmVjdG9yeQotICogQGxlbjogdGhlIG51bWJlciBvZiBwb2ludGVycyB0byB0aGlzIGxlYWYKLSAqIEBsZWFmX25vOiB0aGUgbGVhZiBudW1iZXIKLSAqIEBkYXRhOiBub3QgdXNlZAotICoKLSAqIFJldHVybnM6IGVycm5vCi0gKi8KLQotc3RhdGljIGludCBsZWFmX2RlYWxsb2Moc3RydWN0IGdmczJfaW5vZGUgKmRpcCwgdTMyIGluZGV4LCB1MzIgbGVuLAotCQkJdTY0IGxlYWZfbm8sIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKCZkaXAtPmlfaW5vZGUpOwotCXN0cnVjdCBnZnMyX2xlYWYgKnRtcF9sZWFmOwotCXN0cnVjdCBnZnMyX3JncnBfbGlzdCBybGlzdDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCAqZGliaDsKLQl1NjQgYmxrLCBuYmxrOwotCXVuc2lnbmVkIGludCByZ19ibG9ja3MgPSAwLCBsX2Jsb2NrcyA9IDA7Ci0JY2hhciAqaHQ7Ci0JdW5zaWduZWQgaW50IHgsIHNpemUgPSBsZW4gKiBzaXplb2YodTY0KTsKLQlpbnQgZXJyb3I7Ci0KLQltZW1zZXQoJnJsaXN0LCAwLCBzaXplb2Yoc3RydWN0IGdmczJfcmdycF9saXN0KSk7Ci0KLQlodCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX05PRlMpOwotCWlmICghaHQpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaWYgKCFnZnMyX2FsbG9jX2dldChkaXApKSB7Ci0JCWVycm9yID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZXJyb3IgPSBnZnMyX3F1b3RhX2hvbGQoZGlwLCBOT19RVU9UQV9DSEFOR0UsIE5PX1FVT1RBX0NIQU5HRSk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9wdXQ7Ci0KLQllcnJvciA9IGdmczJfcmluZGV4X2hvbGQoc2RwLCAmZGlwLT5pX2FsbG9jLT5hbF9yaV9naCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9xczsKLQotCS8qICBDb3VudCB0aGUgbnVtYmVyIG9mIGxlYXZlcyAgKi8KLQotCWZvciAoYmxrID0gbGVhZl9ubzsgYmxrOyBibGsgPSBuYmxrKSB7Ci0JCWVycm9yID0gZ2V0X2xlYWYoZGlwLCBibGssICZiaCk7Ci0JCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0X3JsaXN0OwotCQl0bXBfbGVhZiA9IChzdHJ1Y3QgZ2ZzMl9sZWFmICopYmgtPmJfZGF0YTsKLQkJbmJsayA9IGJlNjRfdG9fY3B1KHRtcF9sZWFmLT5sZl9uZXh0KTsKLQkJYnJlbHNlKGJoKTsKLQotCQlnZnMyX3JsaXN0X2FkZChzZHAsICZybGlzdCwgYmxrKTsKLQkJbF9ibG9ja3MrKzsKLQl9Ci0KLQlnZnMyX3JsaXN0X2FsbG9jKCZybGlzdCwgTE1fU1RfRVhDTFVTSVZFKTsKLQotCWZvciAoeCA9IDA7IHggPCBybGlzdC5ybF9yZ3JwczsgeCsrKSB7Ci0JCXN0cnVjdCBnZnMyX3JncnBkICpyZ2Q7Ci0JCXJnZCA9IHJsaXN0LnJsX2doc1t4XS5naF9nbC0+Z2xfb2JqZWN0OwotCQlyZ19ibG9ja3MgKz0gcmdkLT5yZF9sZW5ndGg7Ci0JfQotCi0JZXJyb3IgPSBnZnMyX2dsb2NrX25xX20ocmxpc3QucmxfcmdycHMsIHJsaXN0LnJsX2docyk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9ybGlzdDsKLQotCWVycm9yID0gZ2ZzMl90cmFuc19iZWdpbihzZHAsCi0JCQlyZ19ibG9ja3MgKyAoRElWX1JPVU5EX1VQKHNpemUsIHNkcC0+c2RfamJzaXplKSArIDEpICsKLQkJCVJFU19ESU5PREUgKyBSRVNfU1RBVEZTICsgUkVTX1FVT1RBLCBsX2Jsb2Nrcyk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9yZ19ndW5sb2NrOwotCi0JZm9yIChibGsgPSBsZWFmX25vOyBibGs7IGJsayA9IG5ibGspIHsKLQkJZXJyb3IgPSBnZXRfbGVhZihkaXAsIGJsaywgJmJoKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBvdXRfZW5kX3RyYW5zOwotCQl0bXBfbGVhZiA9IChzdHJ1Y3QgZ2ZzMl9sZWFmICopYmgtPmJfZGF0YTsKLQkJbmJsayA9IGJlNjRfdG9fY3B1KHRtcF9sZWFmLT5sZl9uZXh0KTsKLQkJYnJlbHNlKGJoKTsKLQotCQlnZnMyX2ZyZWVfbWV0YShkaXAsIGJsaywgMSk7Ci0JCWdmczJfYWRkX2lub2RlX2Jsb2NrcygmZGlwLT5pX2lub2RlLCAtMSk7Ci0JfQotCi0JZXJyb3IgPSBnZnMyX2Rpcl93cml0ZV9kYXRhKGRpcCwgaHQsIGluZGV4ICogc2l6ZW9mKHU2NCksIHNpemUpOwotCWlmIChlcnJvciAhPSBzaXplKSB7Ci0JCWlmIChlcnJvciA+PSAwKQotCQkJZXJyb3IgPSAtRUlPOwotCQlnb3RvIG91dF9lbmRfdHJhbnM7Ci0JfQotCi0JZXJyb3IgPSBnZnMyX21ldGFfaW5vZGVfYnVmZmVyKGRpcCwgJmRpYmgpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfZW5kX3RyYW5zOwotCi0JZ2ZzMl90cmFuc19hZGRfYmgoZGlwLT5pX2dsLCBkaWJoLCAxKTsKLQlnZnMyX2Rpbm9kZV9vdXQoZGlwLCBkaWJoLT5iX2RhdGEpOwotCWJyZWxzZShkaWJoKTsKLQotb3V0X2VuZF90cmFuczoKLQlnZnMyX3RyYW5zX2VuZChzZHApOwotb3V0X3JnX2d1bmxvY2s6Ci0JZ2ZzMl9nbG9ja19kcV9tKHJsaXN0LnJsX3JncnBzLCBybGlzdC5ybF9naHMpOwotb3V0X3JsaXN0OgotCWdmczJfcmxpc3RfZnJlZSgmcmxpc3QpOwotCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZkaXAtPmlfYWxsb2MtPmFsX3JpX2doKTsKLW91dF9xczoKLQlnZnMyX3F1b3RhX3VuaG9sZChkaXApOwotb3V0X3B1dDoKLQlnZnMyX2FsbG9jX3B1dChkaXApOwotb3V0OgotCWtmcmVlKGh0KTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qKgotICogZ2ZzMl9kaXJfZXhoYXNoX2RlYWxsb2MgLSBmcmVlIGFsbCB0aGUgbGVhZiBibG9ja3MgaW4gYSBkaXJlY3RvcnkKLSAqIEBkaXA6IHRoZSBkaXJlY3RvcnkKLSAqCi0gKiBEZWFsbG9jIGFsbCBvbi1kaXNrIGRpcmVjdG9yeSBsZWF2ZXMgdG8gRlJFRU1FVEEgc3RhdGUKLSAqIENoYW5nZSBvbi1kaXNrIGlub2RlIHR5cGUgdG8gInJlZ3VsYXIgZmlsZSIKLSAqCi0gKiBSZXR1cm5zOiBlcnJubwotICovCi0KLWludCBnZnMyX2Rpcl9leGhhc2hfZGVhbGxvYyhzdHJ1Y3QgZ2ZzMl9pbm9kZSAqZGlwKQotewotCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQigmZGlwLT5pX2lub2RlKTsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwotCWludCBlcnJvcjsKLQotCS8qIERlYWxsb2Mgb24tZGlzayBsZWF2ZXMgdG8gRlJFRU1FVEEgc3RhdGUgKi8KLQllcnJvciA9IGZvcmVhY2hfbGVhZihkaXAsIGxlYWZfZGVhbGxvYywgTlVMTCk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQkvKiBNYWtlIHRoaXMgYSByZWd1bGFyIGZpbGUgaW4gY2FzZSB3ZSBjcmFzaC4KLQkgICAoV2UgZG9uJ3Qgd2FudCB0byBmcmVlIHRoZXNlIGJsb2NrcyBhIHNlY29uZCB0aW1lLikgICovCi0KLQllcnJvciA9IGdmczJfdHJhbnNfYmVnaW4oc2RwLCBSRVNfRElOT0RFLCAwKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCWVycm9yID0gZ2ZzMl9tZXRhX2lub2RlX2J1ZmZlcihkaXAsICZiaCk7Ci0JaWYgKCFlcnJvcikgewotCQlnZnMyX3RyYW5zX2FkZF9iaChkaXAtPmlfZ2wsIGJoLCAxKTsKLQkJKChzdHJ1Y3QgZ2ZzMl9kaW5vZGUgKiliaC0+Yl9kYXRhKS0+ZGlfbW9kZSA9Ci0JCQkJCQljcHVfdG9fYmUzMihTX0lGUkVHKTsKLQkJYnJlbHNlKGJoKTsKLQl9Ci0KLQlnZnMyX3RyYW5zX2VuZChzZHApOwotCi0JcmV0dXJuIGVycm9yOwotfQotCi0vKioKICAqIGdmczJfZGlyYWRkX2FsbG9jX3JlcXVpcmVkIC0gZmluZCBpZiBhZGRpbmcgZW50cnkgd2lsbCByZXF1aXJlIGFuIGFsbG9jYXRpb24KICAqIEBpcDogdGhlIGZpbGUgYmVpbmcgd3JpdHRlbiB0bwogICogQGZpbG5hbWU6IHRoZSBmaWxlbmFtZSB0aGF0J3MgZ29pbmcgdG8gYmUgYWRkZWQKZGlmZiAtLWdpdCBhL2ZzL2dmczIvZGlyLmggYi9mcy9nZnMyL2Rpci5oCmluZGV4IGE5OGY2NDQuLmU2ODZhZjEgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZGlyLmgKKysrIGIvZnMvZ2ZzMi9kaXIuaApAQCAtMjIsOCArMjIsOCBAQAogZXh0ZXJuIGludCBnZnMyX2Rpcl9jaGVjayhzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKmZpbGVuYW1lLAogCQkJICBjb25zdCBzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXApOwogZXh0ZXJuIGludCBnZnMyX2Rpcl9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgc3RydWN0IHFzdHIgKmZpbGVuYW1lLAotCQkJY29uc3Qgc3RydWN0IGdmczJfaW5vZGUgKmlwLCB1bnNpZ25lZCBpbnQgdHlwZSk7Ci1leHRlcm4gaW50IGdmczJfZGlyX2RlbChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqZGlwLCBjb25zdCBzdHJ1Y3QgcXN0ciAqZmlsZW5hbWUpOworCQkJY29uc3Qgc3RydWN0IGdmczJfaW5vZGUgKmlwKTsKK2V4dGVybiBpbnQgZ2ZzMl9kaXJfZGVsKHN0cnVjdCBnZnMyX2lub2RlICpkaXAsIGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiBleHRlcm4gaW50IGdmczJfZGlyX3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdTY0ICpvZmZzZXQsIHZvaWQgKm9wYXF1ZSwKIAkJCSBmaWxsZGlyX3QgZmlsbGRpcik7CiBleHRlcm4gaW50IGdmczJfZGlyX212aW5vKHN0cnVjdCBnZnMyX2lub2RlICpkaXAsIGNvbnN0IHN0cnVjdCBxc3RyICpmaWxlbmFtZSwKZGlmZiAtLWdpdCBhL2ZzL2dmczIvZXhwb3J0LmMgYi9mcy9nZnMyL2V4cG9ydC5jCmluZGV4IGI1YTVlNjAuLmZlOTk0NWYgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZXhwb3J0LmMKKysrIGIvZnMvZ2ZzMi9leHBvcnQuYwpAQCAtMTM5LDcgKzEzOSw3IEBACiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBzYi0+c19mc19pbmZvOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAKLQlpbm9kZSA9IGdmczJfaWxvb2t1cChzYiwgaW51bS0+bm9fYWRkcik7CisJaW5vZGUgPSBnZnMyX2lsb29rdXAoc2IsIGludW0tPm5vX2FkZHIsIDApOwogCWlmIChpbm9kZSkgewogCQlpZiAoR0ZTMl9JKGlub2RlKS0+aV9ub19mb3JtYWxfaW5vICE9IGludW0tPm5vX2Zvcm1hbF9pbm8pIHsKIAkJCWlwdXQoaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9maWxlLmMgYi9mcy9nZnMyL2ZpbGUuYwppbmRleCBlNDgzMTA4Li5hOWY1Y2JlIDEwMDY0NAotLS0gYS9mcy9nZnMyL2ZpbGUuYworKysgYi9mcy9nZnMyL2ZpbGUuYwpAQCAtNTQ1LDE4ICs1NDUsMTAgQEAKIC8qKgogICogZ2ZzMl9mc3luYyAtIHN5bmMgdGhlIGRpcnR5IGRhdGEgZm9yIGEgZmlsZSAoYWNyb3NzIHRoZSBjbHVzdGVyKQogICogQGZpbGU6IHRoZSBmaWxlIHRoYXQgcG9pbnRzIHRvIHRoZSBkZW50cnkgKHdlIGlnbm9yZSB0aGlzKQotICogQGRlbnRyeTogdGhlIGRlbnRyeSB0aGF0IHBvaW50cyB0byB0aGUgaW5vZGUgdG8gc3luYworICogQGRhdGFzeW5jOiBzZXQgaWYgd2UgY2FuIGlnbm9yZSB0aW1lc3RhbXAgY2hhbmdlcwogICoKLSAqIFRoZSBWRlMgd2lsbCBmbHVzaCAibm9ybWFsIiBkYXRhIGZvciB1cy4gV2Ugb25seSBuZWVkIHRvIHdvcnJ5Ci0gKiBhYm91dCBtZXRhZGF0YSBoZXJlLiBGb3Igam91cm5hbGVkIGRhdGEsIHdlIGp1c3QgZG8gYSBsb2cgZmx1c2gKLSAqIGFzIHdlIGNhbid0IGF2b2lkIGl0LiBPdGhlcndpc2Ugd2UgY2FuIGp1c3QgYmFsZSBvdXQgaWYgZGF0YXN5bmMKLSAqIGlzIHNldC4gRm9yIHN0dWZmZWQgaW5vZGVzIHdlIG11c3QgZmx1c2ggdGhlIGxvZyBpbiBvcmRlciB0bwotICogZW5zdXJlIHRoYXQgYWxsIGRhdGEgaXMgb24gZGlzay4KLSAqCi0gKiBUaGUgY2FsbCB0byB3cml0ZV9pbm9kZV9ub3coKSBpcyB0aGVyZSB0byB3cml0ZSBiYWNrIG1ldGFkYXRhIGFuZAotICogdGhlIGlub2RlIGl0c2VsZi4gSXQgZG9lcyBhbHNvIHRyeSBhbmQgd3JpdGUgdGhlIGRhdGEsIGJ1dCB0aGF0cwotICogKGhvcGVmdWxseSkgYSBuby1vcCBkdWUgdG8gdGhlIFZGUyBoYXZpbmcgYWxyZWFkeSBjYWxsZWQgZmlsZW1hcF9mZGF0YXdyaXRlKCkKLSAqIGZvciB1cy4KKyAqIFRoZSBWRlMgd2lsbCBmbHVzaCBkYXRhIGZvciB1cy4gV2Ugb25seSBuZWVkIHRvIHdvcnJ5CisgKiBhYm91dCBtZXRhZGF0YSBoZXJlLgogICoKICAqIFJldHVybnM6IGVycm5vCiAgKi8KQEAgLTU2NSwyMiArNTU3LDIwIEBACiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfbWFwcGluZy0+aG9zdDsKIAlpbnQgc3luY19zdGF0ZSA9IGlub2RlLT5pX3N0YXRlICYgKElfRElSVFlfU1lOQ3xJX0RJUlRZX0RBVEFTWU5DKTsKLQlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koaW5vZGUpOworCWludCByZXQ7CiAKLQlpZiAoZ2ZzMl9pc19qZGF0YShHRlMyX0koaW5vZGUpKSkgewotCQlnZnMyX2xvZ19mbHVzaChHRlMyX1NCKGlub2RlKSwgR0ZTMl9JKGlub2RlKS0+aV9nbCk7Ci0JCXJldHVybiAwOworCWlmIChkYXRhc3luYykKKwkJc3luY19zdGF0ZSAmPSB+SV9ESVJUWV9TWU5DOworCisJaWYgKHN5bmNfc3RhdGUpIHsKKwkJcmV0ID0gc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlnZnMyX2FpbF9mbHVzaChpcC0+aV9nbCk7CiAJfQogCi0JaWYgKHN5bmNfc3RhdGUgIT0gMCkgewotCQlpZiAoIWRhdGFzeW5jKQotCQkJcmV0ID0gd3JpdGVfaW5vZGVfbm93KGlub2RlLCAwKTsKLQotCQlpZiAoZ2ZzMl9pc19zdHVmZmVkKEdGUzJfSShpbm9kZSkpKQotCQkJZ2ZzMl9sb2dfZmx1c2goR0ZTMl9TQihpbm9kZSksIEdGUzJfSShpbm9kZSktPmlfZ2wpOwotCX0KLQotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtODI2LDYgKzgxNiw3IEBACiAJbG9mZl90IGJ5dGVzLCBtYXhfYnl0ZXM7CiAJc3RydWN0IGdmczJfYWxsb2MgKmFsOwogCWludCBlcnJvcjsKKwlsb2ZmX3QgYnNpemVfbWFzayA9IH4oKGxvZmZfdClzZHAtPnNkX3NiLnNiX2JzaXplIC0gMSk7CiAJbG9mZl90IG5leHQgPSAob2Zmc2V0ICsgbGVuIC0gMSkgPj4gc2RwLT5zZF9zYi5zYl9ic2l6ZV9zaGlmdDsKIAluZXh0ID0gKG5leHQgKyAxKSA8PCBzZHAtPnNkX3NiLnNiX2JzaXplX3NoaWZ0OwogCkBAIC04MzMsMTMgKzgyNCwxNSBAQAogCWlmIChtb2RlICYgfkZBTExPQ19GTF9LRUVQX1NJWkUpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCW9mZnNldCA9IChvZmZzZXQgPj4gc2RwLT5zZF9zYi5zYl9ic2l6ZV9zaGlmdCkgPDwKLQkJIHNkcC0+c2Rfc2Iuc2JfYnNpemVfc2hpZnQ7CisJb2Zmc2V0ICY9IGJzaXplX21hc2s7CiAKIAlsZW4gPSBuZXh0IC0gb2Zmc2V0OwogCWJ5dGVzID0gc2RwLT5zZF9tYXhfcmdfZGF0YSAqIHNkcC0+c2Rfc2Iuc2JfYnNpemUgLyAyOwogCWlmICghYnl0ZXMpCiAJCWJ5dGVzID0gVUlOVF9NQVg7CisJYnl0ZXMgJj0gYnNpemVfbWFzazsKKwlpZiAoYnl0ZXMgPT0gMCkKKwkJYnl0ZXMgPSBzZHAtPnNkX3NiLnNiX2JzaXplOwogCiAJZ2ZzMl9ob2xkZXJfaW5pdChpcC0+aV9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLCAmaXAtPmlfZ2gpOwogCWVycm9yID0gZ2ZzMl9nbG9ja19ucSgmaXAtPmlfZ2gpOwpAQCAtODcwLDYgKzg2Myw5IEBACiAJCWlmIChlcnJvcikgewogCQkJaWYgKGVycm9yID09IC1FTk9TUEMgJiYgYnl0ZXMgPiBzZHAtPnNkX3NiLnNiX2JzaXplKSB7CiAJCQkJYnl0ZXMgPj49IDE7CisJCQkJYnl0ZXMgJj0gYnNpemVfbWFzazsKKwkJCQlpZiAoYnl0ZXMgPT0gMCkKKwkJCQkJYnl0ZXMgPSBzZHAtPnNkX3NiLnNiX2JzaXplOwogCQkJCWdvdG8gcmV0cnk7CiAJCQl9CiAJCQlnb3RvIG91dF9xdW5sb2NrOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9nbG9jay5jIGIvZnMvZ2ZzMi9nbG9jay5jCmluZGV4IDdhNGZiNjMuLmEyYTZhYmIgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZ2xvY2suYworKysgYi9mcy9nZnMyL2dsb2NrLmMKQEAgLTE0MywxNCArMTQzLDkgQEAKIHsKIAljb25zdCBzdHJ1Y3QgZ2ZzMl9nbG9ja19vcGVyYXRpb25zICpnbG9wcyA9IGdsLT5nbF9vcHM7CiAKLQkvKiBhc3NlcnRfc3Bpbl9sb2NrZWQoJmdsLT5nbF9zcGluKTsgKi8KLQogCWlmIChnbC0+Z2xfc3RhdGUgPT0gTE1fU1RfVU5MT0NLRUQpCiAJCXJldHVybiAwOwotCWlmICh0ZXN0X2JpdChHTEZfTEZMVVNILCAmZ2wtPmdsX2ZsYWdzKSkKLQkJcmV0dXJuIDA7Ci0JaWYgKChnbC0+Z2xfbmFtZS5sbl90eXBlICE9IExNX1RZUEVfSU5PREUpICYmCi0JICAgICFsaXN0X2VtcHR5KCZnbC0+Z2xfaG9sZGVycykpCisJaWYgKCFsaXN0X2VtcHR5KCZnbC0+Z2xfaG9sZGVycykpCiAJCXJldHVybiAwOwogCWlmIChnbG9wcy0+Z29fZGVtb3RlX29rKQogCQlyZXR1cm4gZ2xvcHMtPmdvX2RlbW90ZV9vayhnbCk7CkBAIC0xNTgsNiArMTUzLDMxIEBACiB9CiAKIAordm9pZCBnZnMyX2dsb2NrX2FkZF90b19scnUoc3RydWN0IGdmczJfZ2xvY2sgKmdsKQoreworCXNwaW5fbG9jaygmbHJ1X2xvY2spOworCisJaWYgKCFsaXN0X2VtcHR5KCZnbC0+Z2xfbHJ1KSkKKwkJbGlzdF9kZWxfaW5pdCgmZ2wtPmdsX2xydSk7CisJZWxzZQorCQlhdG9taWNfaW5jKCZscnVfY291bnQpOworCisJbGlzdF9hZGRfdGFpbCgmZ2wtPmdsX2xydSwgJmxydV9saXN0KTsKKwlzZXRfYml0KEdMRl9MUlUsICZnbC0+Z2xfZmxhZ3MpOworCXNwaW5fdW5sb2NrKCZscnVfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGdmczJfZ2xvY2tfcmVtb3ZlX2Zyb21fbHJ1KHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKK3sKKwlzcGluX2xvY2soJmxydV9sb2NrKTsKKwlpZiAoIWxpc3RfZW1wdHkoJmdsLT5nbF9scnUpKSB7CisJCWxpc3RfZGVsX2luaXQoJmdsLT5nbF9scnUpOworCQlhdG9taWNfZGVjKCZscnVfY291bnQpOworCQljbGVhcl9iaXQoR0xGX0xSVSwgJmdsLT5nbF9mbGFncyk7CisJfQorCXNwaW5fdW5sb2NrKCZscnVfbG9jayk7Cit9CisKIC8qKgogICogX19nZnMyX2dsb2NrX3NjaGVkdWxlX2Zvcl9yZWNsYWltIC0gQWRkIGEgZ2xvY2sgdG8gdGhlIHJlY2xhaW0gbGlzdAogICogQGdsOiB0aGUgZ2xvY2sKQEAgLTE2OCwyNCArMTg4LDggQEAKIAogc3RhdGljIHZvaWQgX19nZnMyX2dsb2NrX3NjaGVkdWxlX2Zvcl9yZWNsYWltKHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKIHsKLQlpZiAoZGVtb3RlX29rKGdsKSkgewotCQlzcGluX2xvY2soJmxydV9sb2NrKTsKLQotCQlpZiAoIWxpc3RfZW1wdHkoJmdsLT5nbF9scnUpKQotCQkJbGlzdF9kZWxfaW5pdCgmZ2wtPmdsX2xydSk7Ci0JCWVsc2UKLQkJCWF0b21pY19pbmMoJmxydV9jb3VudCk7Ci0KLQkJbGlzdF9hZGRfdGFpbCgmZ2wtPmdsX2xydSwgJmxydV9saXN0KTsKLQkJc3Bpbl91bmxvY2soJmxydV9sb2NrKTsKLQl9Ci19Ci0KLXZvaWQgZ2ZzMl9nbG9ja19zY2hlZHVsZV9mb3JfcmVjbGFpbShzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCi17Ci0Jc3Bpbl9sb2NrKCZnbC0+Z2xfc3Bpbik7Ci0JX19nZnMyX2dsb2NrX3NjaGVkdWxlX2Zvcl9yZWNsYWltKGdsKTsKLQlzcGluX3VubG9jaygmZ2wtPmdsX3NwaW4pOworCWlmIChkZW1vdGVfb2soZ2wpKQorCQlnZnMyX2dsb2NrX2FkZF90b19scnUoZ2wpOwogfQogCiAvKioKQEAgLTIxNywxMiArMjIxLDcgQEAKIAkJc3Bpbl9sb2NrX2J1Y2tldChnbC0+Z2xfaGFzaCk7CiAJCWhsaXN0X2JsX2RlbF9yY3UoJmdsLT5nbF9saXN0KTsKIAkJc3Bpbl91bmxvY2tfYnVja2V0KGdsLT5nbF9oYXNoKTsKLQkJc3Bpbl9sb2NrKCZscnVfbG9jayk7Ci0JCWlmICghbGlzdF9lbXB0eSgmZ2wtPmdsX2xydSkpIHsKLQkJCWxpc3RfZGVsX2luaXQoJmdsLT5nbF9scnUpOwotCQkJYXRvbWljX2RlYygmbHJ1X2NvdW50KTsKLQkJfQotCQlzcGluX3VubG9jaygmbHJ1X2xvY2spOworCQlnZnMyX2dsb2NrX3JlbW92ZV9mcm9tX2xydShnbCk7CiAJCUdMT0NLX0JVR19PTihnbCwgIWxpc3RfZW1wdHkoJmdsLT5nbF9ob2xkZXJzKSk7CiAJCUdMT0NLX0JVR19PTihnbCwgbWFwcGluZyAmJiBtYXBwaW5nLT5ucnBhZ2VzKTsKIAkJdHJhY2VfZ2ZzMl9nbG9ja19wdXQoZ2wpOwpAQCAtNTQyLDExICs1NDEsNiBAQAogCWNsZWFyX2JpdChHTEZfSU5WQUxJREFURV9JTl9QUk9HUkVTUywgJmdsLT5nbF9mbGFncyk7CiAKIAlnZnMyX2dsb2NrX2hvbGQoZ2wpOwotCWlmICh0YXJnZXQgIT0gTE1fU1RfVU5MT0NLRUQgJiYgKGdsLT5nbF9zdGF0ZSA9PSBMTV9TVF9TSEFSRUQgfHwKLQkgICAgZ2wtPmdsX3N0YXRlID09IExNX1NUX0RFRkVSUkVEKSAmJgotCSAgICAhKGxja19mbGFncyAmIChMTV9GTEFHX1RSWSB8IExNX0ZMQUdfVFJZXzFDQikpKQotCQlsY2tfZmxhZ3MgfD0gTE1fRkxBR19UUllfMUNCOwotCiAJaWYgKHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX2xvY2spCXsKIAkJLyogbG9ja19kbG0gKi8KIAkJcmV0ID0gc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fbG9jayhnbCwgdGFyZ2V0LCBsY2tfZmxhZ3MpOwpAQCAtNjQ4LDcgKzY0Miw3IEBACiAJLyogTm90ZTogVW5zYWZlIHRvIGRlcmVmZXJlbmNlIGlwIGFzIHdlIGRvbid0IGhvbGQgcmlnaHQgcmVmcy9sb2NrcyAqLwogCiAJaWYgKGlwKQotCQlpbm9kZSA9IGdmczJfaWxvb2t1cChzZHAtPnNkX3Zmcywgbm9fYWRkcik7CisJCWlub2RlID0gZ2ZzMl9pbG9va3VwKHNkcC0+c2RfdmZzLCBub19hZGRyLCAxKTsKIAllbHNlCiAJCWlub2RlID0gZ2ZzMl9sb29rdXBfYnlfaW51bShzZHAsIG5vX2FkZHIsIE5VTEwsIEdGUzJfQkxLU1RfVU5MSU5LRUQpOwogCWlmIChpbm9kZSAmJiAhSVNfRVJSKGlub2RlKSkgewpAQCAtMTAyNSw2ICsxMDE5LDkgQEAKIAlpZiAodW5saWtlbHkodGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpKQogCQlyZXR1cm4gLUVJTzsKIAorCWlmICh0ZXN0X2JpdChHTEZfTFJVLCAmZ2wtPmdsX2ZsYWdzKSkKKwkJZ2ZzMl9nbG9ja19yZW1vdmVfZnJvbV9scnUoZ2wpOworCiAJc3Bpbl9sb2NrKCZnbC0+Z2xfc3Bpbik7CiAJYWRkX3RvX3F1ZXVlKGdoKTsKIAlpZiAoKExNX0ZMQUdfTk9FWFAgJiBnaC0+Z2hfZmxhZ3MpICYmCkBAIC0xMDgyLDcgKzEwNzksOCBAQAogCQkgICAgIXRlc3RfYml0KEdMRl9ERU1PVEUsICZnbC0+Z2xfZmxhZ3MpKQogCQkJZmFzdF9wYXRoID0gMTsKIAl9Ci0JX19nZnMyX2dsb2NrX3NjaGVkdWxlX2Zvcl9yZWNsYWltKGdsKTsKKwlpZiAoIXRlc3RfYml0KEdMRl9MRkxVU0gsICZnbC0+Z2xfZmxhZ3MpKQorCQlfX2dmczJfZ2xvY2tfc2NoZWR1bGVfZm9yX3JlY2xhaW0oZ2wpOwogCXRyYWNlX2dmczJfZ2xvY2tfcXVldWUoZ2gsIDApOwogCXNwaW5fdW5sb2NrKCZnbC0+Z2xfc3Bpbik7CiAJaWYgKGxpa2VseShmYXN0X3BhdGgpKQpAQCAtMTM2NSw2ICsxMzYzLDcgQEAKIAl3aGlsZShuciAmJiAhbGlzdF9lbXB0eSgmbHJ1X2xpc3QpKSB7CiAJCWdsID0gbGlzdF9lbnRyeShscnVfbGlzdC5uZXh0LCBzdHJ1Y3QgZ2ZzMl9nbG9jaywgZ2xfbHJ1KTsKIAkJbGlzdF9kZWxfaW5pdCgmZ2wtPmdsX2xydSk7CisJCWNsZWFyX2JpdChHTEZfTFJVLCAmZ2wtPmdsX2ZsYWdzKTsKIAkJYXRvbWljX2RlYygmbHJ1X2NvdW50KTsKIAogCQkvKiBUZXN0IGZvciBiZWluZyBkZW1vdGFibGUgKi8KQEAgLTEzODcsNiArMTM4Niw3IEBACiAJCX0KIAkJbnJfc2tpcHBlZCsrOwogCQlsaXN0X2FkZCgmZ2wtPmdsX2xydSwgJnNraXBwZWQpOworCQlzZXRfYml0KEdMRl9MUlUsICZnbC0+Z2xfZmxhZ3MpOwogCX0KIAlsaXN0X3NwbGljZSgmc2tpcHBlZCwgJmxydV9saXN0KTsKIAlhdG9taWNfYWRkKG5yX3NraXBwZWQsICZscnVfY291bnQpOwpAQCAtMTQ1OSwxMiArMTQ1OSw3IEBACiAKIHN0YXRpYyB2b2lkIGNsZWFyX2dsb2NrKHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKIHsKLQlzcGluX2xvY2soJmxydV9sb2NrKTsKLQlpZiAoIWxpc3RfZW1wdHkoJmdsLT5nbF9scnUpKSB7Ci0JCWxpc3RfZGVsX2luaXQoJmdsLT5nbF9scnUpOwotCQlhdG9taWNfZGVjKCZscnVfY291bnQpOwotCX0KLQlzcGluX3VubG9jaygmbHJ1X2xvY2spOworCWdmczJfZ2xvY2tfcmVtb3ZlX2Zyb21fbHJ1KGdsKTsKIAogCXNwaW5fbG9jaygmZ2wtPmdsX3NwaW4pOwogCWlmIChnbC0+Z2xfc3RhdGUgIT0gTE1fU1RfVU5MT0NLRUQpCkBAIC0xNTk5LDkgKzE1OTQsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKmdmbGFnczJzdHIoY2hhciAqYnVmLCBjb25zdCB1bnNpZ25lZCBsb25nICpnZmxhZ3MpCitzdGF0aWMgY29uc3QgY2hhciAqZ2ZsYWdzMnN0cihjaGFyICpidWYsIGNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKIHsKKwljb25zdCB1bnNpZ25lZCBsb25nICpnZmxhZ3MgPSAmZ2wtPmdsX2ZsYWdzOwogCWNoYXIgKnAgPSBidWY7CisKIAlpZiAodGVzdF9iaXQoR0xGX0xPQ0ssIGdmbGFncykpCiAJCSpwKysgPSAnbCc7CiAJaWYgKHRlc3RfYml0KEdMRl9ERU1PVEUsIGdmbGFncykpCkBAIC0xNjI0LDYgKzE2MjEsMTAgQEAKIAkJKnArKyA9ICdGJzsKIAlpZiAodGVzdF9iaXQoR0xGX1FVRVVFRCwgZ2ZsYWdzKSkKIAkJKnArKyA9ICdxJzsKKwlpZiAodGVzdF9iaXQoR0xGX0xSVSwgZ2ZsYWdzKSkKKwkJKnArKyA9ICdMJzsKKwlpZiAoZ2wtPmdsX29iamVjdCkKKwkJKnArKyA9ICdvJzsKIAkqcCA9IDA7CiAJcmV0dXJuIGJ1ZjsKIH0KQEAgLTE2NTgsMTQgKzE2NTksMTUgQEAKIAlkdGltZSAqPSAxMDAwMDAwL0haOyAvKiBkZW1vdGUgdGltZSBpbiB1U2VjICovCiAJaWYgKCF0ZXN0X2JpdChHTEZfREVNT1RFLCAmZ2wtPmdsX2ZsYWdzKSkKIAkJZHRpbWUgPSAwOwotCWdmczJfcHJpbnRfZGJnKHNlcSwgIkc6ICBzOiVzIG46JXUvJWxseCBmOiVzIHQ6JXMgZDolcy8lbGx1IGE6JWQgcjolZFxuIiwKKwlnZnMyX3ByaW50X2RiZyhzZXEsICJHOiAgczolcyBuOiV1LyVsbHggZjolcyB0OiVzIGQ6JXMvJWxsdSBhOiVkIHY6JWQgcjolZFxuIiwKIAkJICBzdGF0ZTJzdHIoZ2wtPmdsX3N0YXRlKSwKIAkJICBnbC0+Z2xfbmFtZS5sbl90eXBlLAogCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpZ2wtPmdsX25hbWUubG5fbnVtYmVyLAotCQkgIGdmbGFnczJzdHIoZ2ZsYWdzX2J1ZiwgJmdsLT5nbF9mbGFncyksCisJCSAgZ2ZsYWdzMnN0cihnZmxhZ3NfYnVmLCBnbCksCiAJCSAgc3RhdGUyc3RyKGdsLT5nbF90YXJnZXQpLAogCQkgIHN0YXRlMnN0cihnbC0+Z2xfZGVtb3RlX3N0YXRlKSwgZHRpbWUsCiAJCSAgYXRvbWljX3JlYWQoJmdsLT5nbF9haWxfY291bnQpLAorCQkgIGF0b21pY19yZWFkKCZnbC0+Z2xfcmV2b2tlcyksCiAJCSAgYXRvbWljX3JlYWQoJmdsLT5nbF9yZWYpKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZ2gsICZnbC0+Z2xfaG9sZGVycywgZ2hfbGlzdCkgewpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9nbG9jay5oIGIvZnMvZ2ZzMi9nbG9jay5oCmluZGV4IGFlYTE2MDYuLjZiMmY3NTcgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZ2xvY2suaAorKysgYi9mcy9nZnMyL2dsb2NrLmgKQEAgLTIyNSwxMSArMjI1LDEwIEBACiAKIGV4dGVybiB2b2lkIGdmczJfZ2xvY2tfY2Ioc3RydWN0IGdmczJfZ2xvY2sgKmdsLCB1bnNpZ25lZCBpbnQgc3RhdGUpOwogZXh0ZXJuIHZvaWQgZ2ZzMl9nbG9ja19jb21wbGV0ZShzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIGludCByZXQpOwotZXh0ZXJuIHZvaWQgZ2ZzMl9yZWNsYWltX2dsb2NrKHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKIGV4dGVybiB2b2lkIGdmczJfZ2xfaGFzaF9jbGVhcihzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CiBleHRlcm4gdm9pZCBnZnMyX2dsb2NrX2ZpbmlzaF90cnVuY2F0ZShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXApOwogZXh0ZXJuIHZvaWQgZ2ZzMl9nbG9ja190aGF3KHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKLWV4dGVybiB2b2lkIGdmczJfZ2xvY2tfc2NoZWR1bGVfZm9yX3JlY2xhaW0oc3RydWN0IGdmczJfZ2xvY2sgKmdsKTsKK2V4dGVybiB2b2lkIGdmczJfZ2xvY2tfYWRkX3RvX2xydShzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpOwogZXh0ZXJuIHZvaWQgZ2ZzMl9nbG9ja19mcmVlKHN0cnVjdCBnZnMyX2dsb2NrICpnbCk7CiAKIGV4dGVybiBpbnQgX19pbml0IGdmczJfZ2xvY2tfaW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvZ2xvcHMuYyBiL2ZzL2dmczIvZ2xvcHMuYwppbmRleCAyNWVlYjJiLi44ZWY3MGY0IDEwMDY0NAotLS0gYS9mcy9nZnMyL2dsb3BzLmMKKysrIGIvZnMvZ2ZzMi9nbG9wcy5jCkBAIC0yOCwzMyArMjgsMTggQEAKICNpbmNsdWRlICJ0cmFucy5oIgogCiAvKioKLSAqIGFpbF9lbXB0eV9nbCAtIHJlbW92ZSBhbGwgYnVmZmVycyBmb3IgYSBnaXZlbiBsb2NrIGZyb20gdGhlIEFJTAorICogX19nZnMyX2FpbF9mbHVzaCAtIHJlbW92ZSBhbGwgYnVmZmVycyBmb3IgYSBnaXZlbiBsb2NrIGZyb20gdGhlIEFJTAogICogQGdsOiB0aGUgZ2xvY2sKICAqCiAgKiBOb25lIG9mIHRoZSBidWZmZXJzIHNob3VsZCBiZSBkaXJ0eSwgbG9ja2VkLCBvciBwaW5uZWQuCiAgKi8KIAotc3RhdGljIHZvaWQgZ2ZzMl9haWxfZW1wdHlfZ2woc3RydWN0IGdmczJfZ2xvY2sgKmdsKQorc3RhdGljIHZvaWQgX19nZnMyX2FpbF9mbHVzaChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCiB7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBnbC0+Z2xfc2JkOwogCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSAmZ2wtPmdsX2FpbF9saXN0OwogCXN0cnVjdCBnZnMyX2J1ZmRhdGEgKmJkOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci0Jc3RydWN0IGdmczJfdHJhbnMgdHI7Ci0KLQltZW1zZXQoJnRyLCAwLCBzaXplb2YodHIpKTsKLQl0ci50cl9yZXZva2VzID0gYXRvbWljX3JlYWQoJmdsLT5nbF9haWxfY291bnQpOwotCi0JaWYgKCF0ci50cl9yZXZva2VzKQotCQlyZXR1cm47Ci0KLQkvKiBBIHNob3J0ZW5lZCwgaW5saW5lIHZlcnNpb24gb2YgZ2ZzMl90cmFuc19iZWdpbigpICovCi0JdHIudHJfcmVzZXJ2ZWQgPSAxICsgZ2ZzMl9zdHJ1Y3QyYmxrKHNkcCwgdHIudHJfcmV2b2tlcywgc2l6ZW9mKHU2NCkpOwotCXRyLnRyX2lwID0gKHVuc2lnbmVkIGxvbmcpX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApOwotCUlOSVRfTElTVF9IRUFEKCZ0ci50cl9saXN0X2J1Zik7Ci0JZ2ZzMl9sb2dfcmVzZXJ2ZShzZHAsIHRyLnRyX3Jlc2VydmVkKTsKLQlCVUdfT04oY3VycmVudC0+am91cm5hbF9pbmZvKTsKLQljdXJyZW50LT5qb3VybmFsX2luZm8gPSAmdHI7CiAKIAlzcGluX2xvY2soJnNkcC0+c2RfYWlsX2xvY2spOwogCXdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkgewpAQCAtNzYsNyArNjEsNDcgQEAKIAl9CiAJZ2ZzMl9hc3NlcnRfd2l0aGRyYXcoc2RwLCAhYXRvbWljX3JlYWQoJmdsLT5nbF9haWxfY291bnQpKTsKIAlzcGluX3VubG9jaygmc2RwLT5zZF9haWxfbG9jayk7Cit9CiAKKworc3RhdGljIHZvaWQgZ2ZzMl9haWxfZW1wdHlfZ2woc3RydWN0IGdmczJfZ2xvY2sgKmdsKQoreworCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gZ2wtPmdsX3NiZDsKKwlzdHJ1Y3QgZ2ZzMl90cmFucyB0cjsKKworCW1lbXNldCgmdHIsIDAsIHNpemVvZih0cikpOworCXRyLnRyX3Jldm9rZXMgPSBhdG9taWNfcmVhZCgmZ2wtPmdsX2FpbF9jb3VudCk7CisKKwlpZiAoIXRyLnRyX3Jldm9rZXMpCisJCXJldHVybjsKKworCS8qIEEgc2hvcnRlbmVkLCBpbmxpbmUgdmVyc2lvbiBvZiBnZnMyX3RyYW5zX2JlZ2luKCkgKi8KKwl0ci50cl9yZXNlcnZlZCA9IDEgKyBnZnMyX3N0cnVjdDJibGsoc2RwLCB0ci50cl9yZXZva2VzLCBzaXplb2YodTY0KSk7CisJdHIudHJfaXAgPSAodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCk7CisJSU5JVF9MSVNUX0hFQUQoJnRyLnRyX2xpc3RfYnVmKTsKKwlnZnMyX2xvZ19yZXNlcnZlKHNkcCwgdHIudHJfcmVzZXJ2ZWQpOworCUJVR19PTihjdXJyZW50LT5qb3VybmFsX2luZm8pOworCWN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9ICZ0cjsKKworCV9fZ2ZzMl9haWxfZmx1c2goZ2wpOworCisJZ2ZzMl90cmFuc19lbmQoc2RwKTsKKwlnZnMyX2xvZ19mbHVzaChzZHAsIE5VTEwpOworfQorCit2b2lkIGdmczJfYWlsX2ZsdXNoKHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKK3sKKwlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IGdsLT5nbF9zYmQ7CisJdW5zaWduZWQgaW50IHJldm9rZXMgPSBhdG9taWNfcmVhZCgmZ2wtPmdsX2FpbF9jb3VudCk7CisJaW50IHJldDsKKworCWlmICghcmV2b2tlcykKKwkJcmV0dXJuOworCisJcmV0ID0gZ2ZzMl90cmFuc19iZWdpbihzZHAsIDAsIHJldm9rZXMpOworCWlmIChyZXQpCisJCXJldHVybjsKKwlfX2dmczJfYWlsX2ZsdXNoKGdsKTsKIAlnZnMyX3RyYW5zX2VuZChzZHApOwogCWdmczJfbG9nX2ZsdXNoKHNkcCwgTlVMTCk7CiB9CkBAIC0yMjcsNiArMjUyLDExOSBAQAogfQogCiAvKioKKyAqIGdmczJfc2V0X25saW5rIC0gU2V0IHRoZSBpbm9kZSdzIGxpbmsgY291bnQgYmFzZWQgb24gb24tZGlzayBpbmZvCisgKiBAaW5vZGU6IFRoZSBpbm9kZSBpbiBxdWVzdGlvbgorICogQG5saW5rOiBUaGUgbGluayBjb3VudAorICoKKyAqIElmIHRoZSBsaW5rIGNvdW50IGhhcyBoaXQgemVybywgaXQgbXVzdCBuZXZlciBiZSByYWlzZWQsIHdoYXRldmVyIHRoZQorICogb24tZGlzayBpbm9kZSBtaWdodCBzYXkuIFdoZW4gbmV3IHN0cnVjdCBpbm9kZXMgYXJlIGNyZWF0ZWQgdGhlIGxpbmsKKyAqIGNvdW50IGlzIHNldCB0byAxLCBzbyB0aGF0IHdlIGNhbiBzYWZlbHkgdXNlIHRoaXMgdGVzdCBldmVuIHdoZW4gcmVhZGluZworICogaW4gb24gZGlzayBpbmZvcm1hdGlvbiBmb3IgdGhlIGZpcnN0IHRpbWUuCisgKi8KKworc3RhdGljIHZvaWQgZ2ZzMl9zZXRfbmxpbmsoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIG5saW5rKQoreworCS8qCisJICogV2Ugd2lsbCBuZWVkIHRvIHJldmlldyBzZXR0aW5nIHRoZSBubGluayBjb3VudCBoZXJlIGluIHRoZQorCSAqIGxpZ2h0IG9mIHRoZSBmb3J0aGNvbWluZyBybyBiaW5kIG1vdW50IHdvcmsuIFRoaXMgaXMgYSByZW1pbmRlcgorCSAqIHRvIGRvIHRoYXQuCisJICovCisJaWYgKChpbm9kZS0+aV9ubGluayAhPSBubGluaykgJiYgKGlub2RlLT5pX25saW5rICE9IDApKSB7CisJCWlmIChubGluayA9PSAwKQorCQkJY2xlYXJfbmxpbmsoaW5vZGUpOworCQllbHNlCisJCQlpbm9kZS0+aV9ubGluayA9IG5saW5rOworCX0KK30KKworc3RhdGljIGludCBnZnMyX2Rpbm9kZV9pbihzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIGNvbnN0IHZvaWQgKmJ1ZikKK3sKKwljb25zdCBzdHJ1Y3QgZ2ZzMl9kaW5vZGUgKnN0ciA9IGJ1ZjsKKwlzdHJ1Y3QgdGltZXNwZWMgYXRpbWU7CisJdTE2IGhlaWdodCwgZGVwdGg7CisKKwlpZiAodW5saWtlbHkoaXAtPmlfbm9fYWRkciAhPSBiZTY0X3RvX2NwdShzdHItPmRpX251bS5ub19hZGRyKSkpCisJCWdvdG8gY29ycnVwdDsKKwlpcC0+aV9ub19mb3JtYWxfaW5vID0gYmU2NF90b19jcHUoc3RyLT5kaV9udW0ubm9fZm9ybWFsX2lubyk7CisJaXAtPmlfaW5vZGUuaV9tb2RlID0gYmUzMl90b19jcHUoc3RyLT5kaV9tb2RlKTsKKwlpcC0+aV9pbm9kZS5pX3JkZXYgPSAwOworCXN3aXRjaCAoaXAtPmlfaW5vZGUuaV9tb2RlICYgU19JRk1UKSB7CisJY2FzZSBTX0lGQkxLOgorCWNhc2UgU19JRkNIUjoKKwkJaXAtPmlfaW5vZGUuaV9yZGV2ID0gTUtERVYoYmUzMl90b19jcHUoc3RyLT5kaV9tYWpvciksCisJCQkJCSAgIGJlMzJfdG9fY3B1KHN0ci0+ZGlfbWlub3IpKTsKKwkJYnJlYWs7CisJfTsKKworCWlwLT5pX2lub2RlLmlfdWlkID0gYmUzMl90b19jcHUoc3RyLT5kaV91aWQpOworCWlwLT5pX2lub2RlLmlfZ2lkID0gYmUzMl90b19jcHUoc3RyLT5kaV9naWQpOworCWdmczJfc2V0X25saW5rKCZpcC0+aV9pbm9kZSwgYmUzMl90b19jcHUoc3RyLT5kaV9ubGluaykpOworCWlfc2l6ZV93cml0ZSgmaXAtPmlfaW5vZGUsIGJlNjRfdG9fY3B1KHN0ci0+ZGlfc2l6ZSkpOworCWdmczJfc2V0X2lub2RlX2Jsb2NrcygmaXAtPmlfaW5vZGUsIGJlNjRfdG9fY3B1KHN0ci0+ZGlfYmxvY2tzKSk7CisJYXRpbWUudHZfc2VjID0gYmU2NF90b19jcHUoc3RyLT5kaV9hdGltZSk7CisJYXRpbWUudHZfbnNlYyA9IGJlMzJfdG9fY3B1KHN0ci0+ZGlfYXRpbWVfbnNlYyk7CisJaWYgKHRpbWVzcGVjX2NvbXBhcmUoJmlwLT5pX2lub2RlLmlfYXRpbWUsICZhdGltZSkgPCAwKQorCQlpcC0+aV9pbm9kZS5pX2F0aW1lID0gYXRpbWU7CisJaXAtPmlfaW5vZGUuaV9tdGltZS50dl9zZWMgPSBiZTY0X3RvX2NwdShzdHItPmRpX210aW1lKTsKKwlpcC0+aV9pbm9kZS5pX210aW1lLnR2X25zZWMgPSBiZTMyX3RvX2NwdShzdHItPmRpX210aW1lX25zZWMpOworCWlwLT5pX2lub2RlLmlfY3RpbWUudHZfc2VjID0gYmU2NF90b19jcHUoc3RyLT5kaV9jdGltZSk7CisJaXAtPmlfaW5vZGUuaV9jdGltZS50dl9uc2VjID0gYmUzMl90b19jcHUoc3RyLT5kaV9jdGltZV9uc2VjKTsKKworCWlwLT5pX2dvYWwgPSBiZTY0X3RvX2NwdShzdHItPmRpX2dvYWxfbWV0YSk7CisJaXAtPmlfZ2VuZXJhdGlvbiA9IGJlNjRfdG9fY3B1KHN0ci0+ZGlfZ2VuZXJhdGlvbik7CisKKwlpcC0+aV9kaXNrZmxhZ3MgPSBiZTMyX3RvX2NwdShzdHItPmRpX2ZsYWdzKTsKKwlnZnMyX3NldF9pbm9kZV9mbGFncygmaXAtPmlfaW5vZGUpOworCWhlaWdodCA9IGJlMTZfdG9fY3B1KHN0ci0+ZGlfaGVpZ2h0KTsKKwlpZiAodW5saWtlbHkoaGVpZ2h0ID4gR0ZTMl9NQVhfTUVUQV9IRUlHSFQpKQorCQlnb3RvIGNvcnJ1cHQ7CisJaXAtPmlfaGVpZ2h0ID0gKHU4KWhlaWdodDsKKworCWRlcHRoID0gYmUxNl90b19jcHUoc3RyLT5kaV9kZXB0aCk7CisJaWYgKHVubGlrZWx5KGRlcHRoID4gR0ZTMl9ESVJfTUFYX0RFUFRIKSkKKwkJZ290byBjb3JydXB0OworCWlwLT5pX2RlcHRoID0gKHU4KWRlcHRoOworCWlwLT5pX2VudHJpZXMgPSBiZTMyX3RvX2NwdShzdHItPmRpX2VudHJpZXMpOworCisJaXAtPmlfZWF0dHIgPSBiZTY0X3RvX2NwdShzdHItPmRpX2VhdHRyKTsKKwlpZiAoU19JU1JFRyhpcC0+aV9pbm9kZS5pX21vZGUpKQorCQlnZnMyX3NldF9hb3BzKCZpcC0+aV9pbm9kZSk7CisKKwlyZXR1cm4gMDsKK2NvcnJ1cHQ6CisJZ2ZzMl9jb25zaXN0X2lub2RlKGlwKTsKKwlyZXR1cm4gLUVJTzsKK30KKworLyoqCisgKiBnZnMyX2lub2RlX3JlZnJlc2ggLSBSZWZyZXNoIHRoZSBpbmNvcmUgY29weSBvZiB0aGUgZGlub2RlCisgKiBAaXA6IFRoZSBHRlMyIGlub2RlCisgKgorICogUmV0dXJuczogZXJybm8KKyAqLworCitpbnQgZ2ZzMl9pbm9kZV9yZWZyZXNoKHN0cnVjdCBnZnMyX2lub2RlICppcCkKK3sKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpYmg7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBnZnMyX21ldGFfaW5vZGVfYnVmZmVyKGlwLCAmZGliaCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwlpZiAoZ2ZzMl9tZXRhdHlwZV9jaGVjayhHRlMyX1NCKCZpcC0+aV9pbm9kZSksIGRpYmgsIEdGUzJfTUVUQVRZUEVfREkpKSB7CisJCWJyZWxzZShkaWJoKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZXJyb3IgPSBnZnMyX2Rpbm9kZV9pbihpcCwgZGliaC0+Yl9kYXRhKTsKKwlicmVsc2UoZGliaCk7CisJY2xlYXJfYml0KEdJRl9JTlZBTElELCAmaXAtPmlfZmxhZ3MpOworCisJcmV0dXJuIGVycm9yOworfQorCisvKioKICAqIGlub2RlX2dvX2xvY2sgLSBvcGVyYXRpb24gZG9uZSBhZnRlciBhbiBpbm9kZSBsb2NrIGlzIGxvY2tlZCBieSBhIHByb2Nlc3MKICAqIEBnbDogdGhlIGdsb2NrCiAgKiBAZmxhZ3M6CmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb3BzLmggYi9mcy9nZnMyL2dsb3BzLmgKaW5kZXggYjNhYTJlMy4uNmZjZTQwOSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9wcy5oCisrKyBiL2ZzL2dmczIvZ2xvcHMuaApAQCAtMjMsNCArMjMsNiBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgZ2ZzMl9qb3VybmFsX2dsb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgKmdmczJfZ2xvcHNfbGlzdFtdOwogCitleHRlcm4gdm9pZCBnZnMyX2FpbF9mbHVzaChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpOworCiAjZW5kaWYgLyogX19HTE9QU19ET1RfSF9fICovCmRpZmYgLS1naXQgYS9mcy9nZnMyL2luY29yZS5oIGIvZnMvZ2ZzMi9pbmNvcmUuaAppbmRleCA4NzBhODlkLi4wYTA2NGU5IDEwMDY0NAotLS0gYS9mcy9nZnMyL2luY29yZS5oCisrKyBiL2ZzL2dmczIvaW5jb3JlLmgKQEAgLTIwLDcgKzIwLDYgQEAKIAogI2RlZmluZSBESU9fV0FJVAkweDAwMDAwMDEwCiAjZGVmaW5lIERJT19NRVRBREFUQQkweDAwMDAwMDIwCi0jZGVmaW5lIERJT19BTEwJCTB4MDAwMDAxMDAKIAogc3RydWN0IGdmczJfbG9nX29wZXJhdGlvbnM7CiBzdHJ1Y3QgZ2ZzMl9sb2dfZWxlbWVudDsKQEAgLTIwMCw2ICsxOTksOCBAQAogCUdMRl9JTklUSUFMCQkJPSAxMCwKIAlHTEZfRlJPWkVOCQkJPSAxMSwKIAlHTEZfUVVFVUVECQkJPSAxMiwKKwlHTEZfTFJVCQkJCT0gMTMsCisJR0xGX09CSkVDVAkJCT0gMTQsIC8qIFVzZWQgb25seSBmb3IgdHJhY2luZyAqLwogfTsKIAogc3RydWN0IGdmczJfZ2xvY2sgewpAQCAtMjM0LDYgKzIzNSw3IEBACiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGdsX2FpbF9saXN0OwogCWF0b21pY190IGdsX2FpbF9jb3VudDsKKwlhdG9taWNfdCBnbF9yZXZva2VzOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgZ2xfd29yazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZ2xfZGVsZXRlOwogCXN0cnVjdCByY3VfaGVhZCBnbF9yY3U7CkBAIC0zNzQsOCArMzc2LDYgQEAKIAl1bnNpZ25lZCBpbnQgYWlfZmlyc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCBhaV9haWwxX2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCBhaV9haWwyX2xpc3Q7Ci0KLQl1NjQgYWlfc3luY19nZW47CiB9OwogCiBzdHJ1Y3QgZ2ZzMl9qb3VybmFsX2V4dGVudCB7CkBAIC00ODgsNyArNDg4LDYgQEAKIAogCWNoYXIgc2JfbG9ja3Byb3RvW0dGUzJfTE9DS05BTUVfTEVOXTsKIAljaGFyIHNiX2xvY2t0YWJsZVtHRlMyX0xPQ0tOQU1FX0xFTl07Ci0JdTggc2JfdXVpZFsxNl07CiB9OwogCiAvKgpAQCAtNjU0LDcgKzY1Myw2IEBACiAJc3BpbmxvY2tfdCBzZF9haWxfbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHNkX2FpbDFfbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHNkX2FpbDJfbGlzdDsKLQl1NjQgc2RfYWlsX3N5bmNfZ2VuOwogCiAJLyogUmVwbGF5IHN0dWZmICovCiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvaW5vZGUuYyBiL2ZzL2dmczIvaW5vZGUuYwppbmRleCA5MTM0ZGNiLi4wM2UwYzUyIDEwMDY0NAotLS0gYS9mcy9nZnMyL2lub2RlLmMKKysrIGIvZnMvZ2ZzMi9pbm9kZS5jCkBAIC0xLDIzICsxLDI1IEBACiAvKgogICogQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA4IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMSBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAogICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKICAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CisjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3hhdHRyLmg+CiAjaW5jbHVkZSA8bGludXgvcG9zaXhfYWNsLmg+Ci0jaW5jbHVkZSA8bGludXgvc29ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxsaW51eC9maWVtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpAQCAtMjYsMTkgKzI4LDE0IEBACiAjaW5jbHVkZSAiZGlyLmgiCiAjaW5jbHVkZSAieGF0dHIuaCIKICNpbmNsdWRlICJnbG9jay5oIgotI2luY2x1ZGUgImdsb3BzLmgiCiAjaW5jbHVkZSAiaW5vZGUuaCIKLSNpbmNsdWRlICJsb2cuaCIKICNpbmNsdWRlICJtZXRhX2lvLmgiCiAjaW5jbHVkZSAicXVvdGEuaCIKICNpbmNsdWRlICJyZ3JwLmgiCiAjaW5jbHVkZSAidHJhbnMuaCIKICNpbmNsdWRlICJ1dGlsLmgiCi0KLXN0cnVjdCBnZnMyX2ludW1fcmFuZ2VfaG9zdCB7Ci0JdTY0IGlyX3N0YXJ0OwotCXU2NCBpcl9sZW5ndGg7Ci19OworI2luY2x1ZGUgInN1cGVyLmgiCisjaW5jbHVkZSAiZ2xvcHMuaCIKIAogc3RydWN0IGdmczJfc2tpcF9kYXRhIHsKIAl1NjQgbm9fYWRkcjsKQEAgLTc0LDE0ICs3MSwxNCBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgaW5vZGUgKmdmczJfaWxvb2t1cChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgbm9fYWRkcikKK3N0cnVjdCBpbm9kZSAqZ2ZzMl9pbG9va3VwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCBub19hZGRyLCBpbnQgbm9uX2Jsb2NrKQogewogCXVuc2lnbmVkIGxvbmcgaGFzaCA9ICh1bnNpZ25lZCBsb25nKW5vX2FkZHI7CiAJc3RydWN0IGdmczJfc2tpcF9kYXRhIGRhdGE7CiAKIAlkYXRhLm5vX2FkZHIgPSBub19hZGRyOwogCWRhdGEuc2tpcHBlZCA9IDA7Ci0JZGF0YS5ub25fYmxvY2sgPSAwOworCWRhdGEubm9uX2Jsb2NrID0gbm9uX2Jsb2NrOwogCXJldHVybiBpbG9va3VwNShzYiwgaGFzaCwgaWdldF90ZXN0LCAmZGF0YSk7CiB9CiAKQEAgLTI0OCwyMDMgKzI0NSw2IEBACiAJZ290byBmYWlsOwogfQogCi1zdGF0aWMgaW50IGdmczJfZGlub2RlX2luKHN0cnVjdCBnZnMyX2lub2RlICppcCwgY29uc3Qgdm9pZCAqYnVmKQotewotCWNvbnN0IHN0cnVjdCBnZnMyX2Rpbm9kZSAqc3RyID0gYnVmOwotCXN0cnVjdCB0aW1lc3BlYyBhdGltZTsKLQl1MTYgaGVpZ2h0LCBkZXB0aDsKLQotCWlmICh1bmxpa2VseShpcC0+aV9ub19hZGRyICE9IGJlNjRfdG9fY3B1KHN0ci0+ZGlfbnVtLm5vX2FkZHIpKSkKLQkJZ290byBjb3JydXB0OwotCWlwLT5pX25vX2Zvcm1hbF9pbm8gPSBiZTY0X3RvX2NwdShzdHItPmRpX251bS5ub19mb3JtYWxfaW5vKTsKLQlpcC0+aV9pbm9kZS5pX21vZGUgPSBiZTMyX3RvX2NwdShzdHItPmRpX21vZGUpOwotCWlwLT5pX2lub2RlLmlfcmRldiA9IDA7Ci0Jc3dpdGNoIChpcC0+aV9pbm9kZS5pX21vZGUgJiBTX0lGTVQpIHsKLQljYXNlIFNfSUZCTEs6Ci0JY2FzZSBTX0lGQ0hSOgotCQlpcC0+aV9pbm9kZS5pX3JkZXYgPSBNS0RFVihiZTMyX3RvX2NwdShzdHItPmRpX21ham9yKSwKLQkJCQkJICAgYmUzMl90b19jcHUoc3RyLT5kaV9taW5vcikpOwotCQlicmVhazsKLQl9OwotCi0JaXAtPmlfaW5vZGUuaV91aWQgPSBiZTMyX3RvX2NwdShzdHItPmRpX3VpZCk7Ci0JaXAtPmlfaW5vZGUuaV9naWQgPSBiZTMyX3RvX2NwdShzdHItPmRpX2dpZCk7Ci0JLyoKLQkgKiBXZSB3aWxsIG5lZWQgdG8gcmV2aWV3IHNldHRpbmcgdGhlIG5saW5rIGNvdW50IGhlcmUgaW4gdGhlCi0JICogbGlnaHQgb2YgdGhlIGZvcnRoY29taW5nIHJvIGJpbmQgbW91bnQgd29yay4gVGhpcyBpcyBhIHJlbWluZGVyCi0JICogdG8gZG8gdGhhdC4KLQkgKi8KLQlpcC0+aV9pbm9kZS5pX25saW5rID0gYmUzMl90b19jcHUoc3RyLT5kaV9ubGluayk7Ci0JaV9zaXplX3dyaXRlKCZpcC0+aV9pbm9kZSwgYmU2NF90b19jcHUoc3RyLT5kaV9zaXplKSk7Ci0JZ2ZzMl9zZXRfaW5vZGVfYmxvY2tzKCZpcC0+aV9pbm9kZSwgYmU2NF90b19jcHUoc3RyLT5kaV9ibG9ja3MpKTsKLQlhdGltZS50dl9zZWMgPSBiZTY0X3RvX2NwdShzdHItPmRpX2F0aW1lKTsKLQlhdGltZS50dl9uc2VjID0gYmUzMl90b19jcHUoc3RyLT5kaV9hdGltZV9uc2VjKTsKLQlpZiAodGltZXNwZWNfY29tcGFyZSgmaXAtPmlfaW5vZGUuaV9hdGltZSwgJmF0aW1lKSA8IDApCi0JCWlwLT5pX2lub2RlLmlfYXRpbWUgPSBhdGltZTsKLQlpcC0+aV9pbm9kZS5pX210aW1lLnR2X3NlYyA9IGJlNjRfdG9fY3B1KHN0ci0+ZGlfbXRpbWUpOwotCWlwLT5pX2lub2RlLmlfbXRpbWUudHZfbnNlYyA9IGJlMzJfdG9fY3B1KHN0ci0+ZGlfbXRpbWVfbnNlYyk7Ci0JaXAtPmlfaW5vZGUuaV9jdGltZS50dl9zZWMgPSBiZTY0X3RvX2NwdShzdHItPmRpX2N0aW1lKTsKLQlpcC0+aV9pbm9kZS5pX2N0aW1lLnR2X25zZWMgPSBiZTMyX3RvX2NwdShzdHItPmRpX2N0aW1lX25zZWMpOwotCi0JaXAtPmlfZ29hbCA9IGJlNjRfdG9fY3B1KHN0ci0+ZGlfZ29hbF9tZXRhKTsKLQlpcC0+aV9nZW5lcmF0aW9uID0gYmU2NF90b19jcHUoc3RyLT5kaV9nZW5lcmF0aW9uKTsKLQotCWlwLT5pX2Rpc2tmbGFncyA9IGJlMzJfdG9fY3B1KHN0ci0+ZGlfZmxhZ3MpOwotCWdmczJfc2V0X2lub2RlX2ZsYWdzKCZpcC0+aV9pbm9kZSk7Ci0JaGVpZ2h0ID0gYmUxNl90b19jcHUoc3RyLT5kaV9oZWlnaHQpOwotCWlmICh1bmxpa2VseShoZWlnaHQgPiBHRlMyX01BWF9NRVRBX0hFSUdIVCkpCi0JCWdvdG8gY29ycnVwdDsKLQlpcC0+aV9oZWlnaHQgPSAodTgpaGVpZ2h0OwotCi0JZGVwdGggPSBiZTE2X3RvX2NwdShzdHItPmRpX2RlcHRoKTsKLQlpZiAodW5saWtlbHkoZGVwdGggPiBHRlMyX0RJUl9NQVhfREVQVEgpKQotCQlnb3RvIGNvcnJ1cHQ7Ci0JaXAtPmlfZGVwdGggPSAodTgpZGVwdGg7Ci0JaXAtPmlfZW50cmllcyA9IGJlMzJfdG9fY3B1KHN0ci0+ZGlfZW50cmllcyk7Ci0KLQlpcC0+aV9lYXR0ciA9IGJlNjRfdG9fY3B1KHN0ci0+ZGlfZWF0dHIpOwotCWlmIChTX0lTUkVHKGlwLT5pX2lub2RlLmlfbW9kZSkpCi0JCWdmczJfc2V0X2FvcHMoJmlwLT5pX2lub2RlKTsKLQotCXJldHVybiAwOwotY29ycnVwdDoKLQlpZiAoZ2ZzMl9jb25zaXN0X2lub2RlKGlwKSkKLQkJZ2ZzMl9kaW5vZGVfcHJpbnQoaXApOwotCXJldHVybiAtRUlPOwotfQotCi0vKioKLSAqIGdmczJfaW5vZGVfcmVmcmVzaCAtIFJlZnJlc2ggdGhlIGluY29yZSBjb3B5IG9mIHRoZSBkaW5vZGUKLSAqIEBpcDogVGhlIEdGUzIgaW5vZGUKLSAqCi0gKiBSZXR1cm5zOiBlcnJubwotICovCi0KLWludCBnZnMyX2lub2RlX3JlZnJlc2goc3RydWN0IGdmczJfaW5vZGUgKmlwKQotewotCXN0cnVjdCBidWZmZXJfaGVhZCAqZGliaDsKLQlpbnQgZXJyb3I7Ci0KLQllcnJvciA9IGdmczJfbWV0YV9pbm9kZV9idWZmZXIoaXAsICZkaWJoKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCWlmIChnZnMyX21ldGF0eXBlX2NoZWNrKEdGUzJfU0IoJmlwLT5pX2lub2RlKSwgZGliaCwgR0ZTMl9NRVRBVFlQRV9ESSkpIHsKLQkJYnJlbHNlKGRpYmgpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQllcnJvciA9IGdmczJfZGlub2RlX2luKGlwLCBkaWJoLT5iX2RhdGEpOwotCWJyZWxzZShkaWJoKTsKLQljbGVhcl9iaXQoR0lGX0lOVkFMSUQsICZpcC0+aV9mbGFncyk7Ci0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLWludCBnZnMyX2Rpbm9kZV9kZWFsbG9jKHN0cnVjdCBnZnMyX2lub2RlICppcCkKLXsKLQlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoJmlwLT5pX2lub2RlKTsKLQlzdHJ1Y3QgZ2ZzMl9hbGxvYyAqYWw7Ci0Jc3RydWN0IGdmczJfcmdycGQgKnJnZDsKLQlpbnQgZXJyb3I7Ci0KLQlpZiAoZ2ZzMl9nZXRfaW5vZGVfYmxvY2tzKCZpcC0+aV9pbm9kZSkgIT0gMSkgewotCQlpZiAoZ2ZzMl9jb25zaXN0X2lub2RlKGlwKSkKLQkJCWdmczJfZGlub2RlX3ByaW50KGlwKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JYWwgPSBnZnMyX2FsbG9jX2dldChpcCk7Ci0JaWYgKCFhbCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQllcnJvciA9IGdmczJfcXVvdGFfaG9sZChpcCwgTk9fUVVPVEFfQ0hBTkdFLCBOT19RVU9UQV9DSEFOR0UpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXQ7Ci0KLQllcnJvciA9IGdmczJfcmluZGV4X2hvbGQoc2RwLCAmYWwtPmFsX3JpX2doKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X3FzOwotCi0JcmdkID0gZ2ZzMl9ibGsycmdycGQoc2RwLCBpcC0+aV9ub19hZGRyKTsKLQlpZiAoIXJnZCkgewotCQlnZnMyX2NvbnNpc3RfaW5vZGUoaXApOwotCQllcnJvciA9IC1FSU87Ci0JCWdvdG8gb3V0X3JpbmRleF9yZWxzZTsKLQl9Ci0KLQllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChyZ2QtPnJkX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsCi0JCQkJICAgJmFsLT5hbF9yZ2RfZ2gpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfcmluZGV4X3JlbHNlOwotCi0JZXJyb3IgPSBnZnMyX3RyYW5zX2JlZ2luKHNkcCwgUkVTX1JHX0JJVCArIFJFU19TVEFURlMgKyBSRVNfUVVPVEEsIDEpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfcmdfZ3VubG9jazsKLQotCXNldF9iaXQoR0xGX0RJUlRZLCAmaXAtPmlfZ2wtPmdsX2ZsYWdzKTsKLQlzZXRfYml0KEdMRl9MRkxVU0gsICZpcC0+aV9nbC0+Z2xfZmxhZ3MpOwotCi0JZ2ZzMl9mcmVlX2RpKHJnZCwgaXApOwotCi0JZ2ZzMl90cmFuc19lbmQoc2RwKTsKLQotb3V0X3JnX2d1bmxvY2s6Ci0JZ2ZzMl9nbG9ja19kcV91bmluaXQoJmFsLT5hbF9yZ2RfZ2gpOwotb3V0X3JpbmRleF9yZWxzZToKLQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmYWwtPmFsX3JpX2doKTsKLW91dF9xczoKLQlnZnMyX3F1b3RhX3VuaG9sZChpcCk7Ci1vdXQ6Ci0JZ2ZzMl9hbGxvY19wdXQoaXApOwotCXJldHVybiBlcnJvcjsKLX0KLQotLyoqCi0gKiBnZnMyX2NoYW5nZV9ubGluayAtIENoYW5nZSBubGluayBjb3VudCBvbiBpbm9kZQotICogQGlwOiBUaGUgR0ZTMiBpbm9kZQotICogQGRpZmY6IFRoZSBjaGFuZ2UgaW4gdGhlIG5saW5rIGNvdW50IHJlcXVpcmVkCi0gKgotICogUmV0dXJuczogZXJybm8KLSAqLwotaW50IGdmczJfY2hhbmdlX25saW5rKHN0cnVjdCBnZnMyX2lub2RlICppcCwgaW50IGRpZmYpCi17Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpkaWJoOwotCXUzMiBubGluazsKLQlpbnQgZXJyb3I7Ci0KLQlCVUdfT04oZGlmZiAhPSAxICYmIGRpZmYgIT0gLTEpOwotCW5saW5rID0gaXAtPmlfaW5vZGUuaV9ubGluayArIGRpZmY7Ci0KLQkvKiBJZiB3ZSBhcmUgcmVkdWNpbmcgdGhlIG5saW5rIGNvdW50LCBidXQgdGhlIG5ldyB2YWx1ZSBlbmRzIHVwIGJlaW5nCi0JICAgYmlnZ2VyIHRoYW4gdGhlIG9sZCBvbmUsIHdlIG11c3QgaGF2ZSB1bmRlcmZsb3dlZC4gKi8KLQlpZiAoZGlmZiA8IDAgJiYgbmxpbmsgPiBpcC0+aV9pbm9kZS5pX25saW5rKSB7Ci0JCWlmIChnZnMyX2NvbnNpc3RfaW5vZGUoaXApKQotCQkJZ2ZzMl9kaW5vZGVfcHJpbnQoaXApOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQllcnJvciA9IGdmczJfbWV0YV9pbm9kZV9idWZmZXIoaXAsICZkaWJoKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCWlmIChkaWZmID4gMCkKLQkJaW5jX25saW5rKCZpcC0+aV9pbm9kZSk7Ci0JZWxzZQotCQlkcm9wX25saW5rKCZpcC0+aV9pbm9kZSk7Ci0KLQlpcC0+aV9pbm9kZS5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwotCi0JZ2ZzMl90cmFuc19hZGRfYmgoaXAtPmlfZ2wsIGRpYmgsIDEpOwotCWdmczJfZGlub2RlX291dChpcCwgZGliaC0+Yl9kYXRhKTsKLQlicmVsc2UoZGliaCk7Ci0JbWFya19pbm9kZV9kaXJ0eSgmaXAtPmlfaW5vZGUpOwotCi0JaWYgKGlwLT5pX2lub2RlLmlfbmxpbmsgPT0gMCkKLQkJZ2ZzMl91bmxpbmtfZGkoJmlwLT5pX2lub2RlKTsgLyogbWFyayBpbm9kZSB1bmxpbmtlZCAqLwotCi0JcmV0dXJuIGVycm9yOwotfQogCiBzdHJ1Y3QgaW5vZGUgKmdmczJfbG9va3VwX3NpbXBsZShzdHJ1Y3QgaW5vZGUgKmRpcCwgY29uc3QgY2hhciAqbmFtZSkKIHsKQEAgLTU0Myw3ICszNDMsNyBAQAogCiAJLyogIERvbid0IGNyZWF0ZSBlbnRyaWVzIGluIGFuIHVubGlua2VkIGRpcmVjdG9yeSAgKi8KIAlpZiAoIWRpcC0+aV9pbm9kZS5pX25saW5rKQotCQlyZXR1cm4gLUVQRVJNOworCQlyZXR1cm4gLUVOT0VOVDsKIAogCWVycm9yID0gZ2ZzMl9kaXJfY2hlY2soJmRpcC0+aV9pbm9kZSwgbmFtZSwgTlVMTCk7CiAJc3dpdGNoIChlcnJvcikgewpAQCAtNjEzLDIxICs0MTMsNDQgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKK3N0YXRpYyB2b2lkIGdmczJfaW5pdF9kaXIoc3RydWN0IGJ1ZmZlcl9oZWFkICpkaWJoLAorCQkJICBjb25zdCBzdHJ1Y3QgZ2ZzMl9pbm9kZSAqcGFyZW50KQoreworCXN0cnVjdCBnZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IGdmczJfZGlub2RlICopZGliaC0+Yl9kYXRhOworCXN0cnVjdCBnZnMyX2RpcmVudCAqZGVudCA9IChzdHJ1Y3QgZ2ZzMl9kaXJlbnQgKikoZGkrMSk7CisKKwlnZnMyX3FzdHIyZGlyZW50KCZnZnMyX3Fkb3QsIEdGUzJfRElSRU5UX1NJWkUoZ2ZzMl9xZG90LmxlbiksIGRlbnQpOworCWRlbnQtPmRlX2ludW0gPSBkaS0+ZGlfbnVtOyAvKiBhbHJlYWR5IEdGUzIgZW5kaWFuICovCisJZGVudC0+ZGVfdHlwZSA9IGNwdV90b19iZTE2KERUX0RJUik7CisKKwlkZW50ID0gKHN0cnVjdCBnZnMyX2RpcmVudCAqKSgoY2hhciopZGVudCArIEdGUzJfRElSRU5UX1NJWkUoMSkpOworCWdmczJfcXN0cjJkaXJlbnQoJmdmczJfcWRvdGRvdCwgZGliaC0+Yl9zaXplIC0gR0ZTMl9ESVJFTlRfU0laRSgxKSAtIHNpemVvZihzdHJ1Y3QgZ2ZzMl9kaW5vZGUpLCBkZW50KTsKKwlnZnMyX2ludW1fb3V0KHBhcmVudCwgZGVudCk7CisJZGVudC0+ZGVfdHlwZSA9IGNwdV90b19iZTE2KERUX0RJUik7CisJCit9CisKIC8qKgogICogaW5pdF9kaW5vZGUgLSBGaWxsIGluIGEgbmV3IGRpbm9kZSBzdHJ1Y3R1cmUKLSAqIEBkaXA6IHRoZSBkaXJlY3RvcnkgdGhpcyBpbm9kZSBpcyBiZWluZyBjcmVhdGVkIGluCisgKiBAZGlwOiBUaGUgZGlyZWN0b3J5IHRoaXMgaW5vZGUgaXMgYmVpbmcgY3JlYXRlZCBpbgogICogQGdsOiBUaGUgZ2xvY2sgY292ZXJpbmcgdGhlIG5ldyBpbm9kZQotICogQGludW06IHRoZSBpbm9kZSBudW1iZXIKLSAqIEBtb2RlOiB0aGUgZmlsZSBwZXJtaXNzaW9ucwotICogQHVpZDoKLSAqIEBnaWQ6CisgKiBAaW51bTogVGhlIGlub2RlIG51bWJlcgorICogQG1vZGU6IFRoZSBmaWxlIHBlcm1pc3Npb25zCisgKiBAdWlkOiBUaGUgdWlkIG9mIHRoZSBuZXcgaW5vZGUKKyAqIEBnaWQ6IFRoZSBnaWQgb2YgdGhlIG5ldyBpbm9kZQorICogQGdlbmVyYXRpb246IFRoZSBnZW5lcmF0aW9uIG51bWJlciBvZiB0aGUgbmV3IGlub2RlCisgKiBAZGV2OiBUaGUgZGV2aWNlIG51bWJlciAoaWYgYSBkZXZpY2Ugbm9kZSkKKyAqIEBzeW1uYW1lOiBUaGUgc3ltbGluayBkZXN0aW5hdGlvbiAoaWYgYSBzeW1saW5rKQorICogQHNpemU6IFRoZSBpbm9kZSBzaXplIChpZ25vcmVkIGZvciBkaXJlY3RvcmllcykKKyAqIEBiaHA6IFRoZSBidWZmZXIgaGVhZCAocmV0dXJuZWQgdG8gY2FsbGVyKQogICoKICAqLwogCiBzdGF0aWMgdm9pZCBpbml0X2Rpbm9kZShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqZGlwLCBzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsCiAJCQljb25zdCBzdHJ1Y3QgZ2ZzMl9pbnVtX2hvc3QgKmludW0sIHVuc2lnbmVkIGludCBtb2RlLAogCQkJdW5zaWduZWQgaW50IHVpZCwgdW5zaWduZWQgaW50IGdpZCwKLQkJCWNvbnN0IHU2NCAqZ2VuZXJhdGlvbiwgZGV2X3QgZGV2LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHApCisJCQljb25zdCB1NjQgKmdlbmVyYXRpb24sIGRldl90IGRldiwgY29uc3QgY2hhciAqc3ltbmFtZSwKKwkJCXVuc2lnbmVkIHNpemUsIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocCkKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoJmRpcC0+aV9pbm9kZSk7CiAJc3RydWN0IGdmczJfZGlub2RlICpkaTsKQEAgLTY0Niw3ICs0NjksNyBAQAogCWRpLT5kaV91aWQgPSBjcHVfdG9fYmUzMih1aWQpOwogCWRpLT5kaV9naWQgPSBjcHVfdG9fYmUzMihnaWQpOwogCWRpLT5kaV9ubGluayA9IDA7Ci0JZGktPmRpX3NpemUgPSAwOworCWRpLT5kaV9zaXplID0gY3B1X3RvX2JlNjQoc2l6ZSk7CiAJZGktPmRpX2Jsb2NrcyA9IGNwdV90b19iZTY0KDEpOwogCWRpLT5kaV9hdGltZSA9IGRpLT5kaV9tdGltZSA9IGRpLT5kaV9jdGltZSA9IGNwdV90b19iZTY0KHR2LnR2X3NlYyk7CiAJZGktPmRpX21ham9yID0gY3B1X3RvX2JlMzIoTUFKT1IoZGV2KSk7CkBAIC02NTQsMTYgKzQ3Nyw2IEBACiAJZGktPmRpX2dvYWxfbWV0YSA9IGRpLT5kaV9nb2FsX2RhdGEgPSBjcHVfdG9fYmU2NChpbnVtLT5ub19hZGRyKTsKIAlkaS0+ZGlfZ2VuZXJhdGlvbiA9IGNwdV90b19iZTY0KCpnZW5lcmF0aW9uKTsKIAlkaS0+ZGlfZmxhZ3MgPSAwOwotCi0JaWYgKFNfSVNSRUcobW9kZSkpIHsKLQkJaWYgKChkaXAtPmlfZGlza2ZsYWdzICYgR0ZTMl9ESUZfSU5IRVJJVF9KREFUQSkgfHwKLQkJICAgIGdmczJfdHVuZV9nZXQoc2RwLCBndF9uZXdfZmlsZXNfamRhdGEpKQotCQkJZGktPmRpX2ZsYWdzIHw9IGNwdV90b19iZTMyKEdGUzJfRElGX0pEQVRBKTsKLQl9IGVsc2UgaWYgKFNfSVNESVIobW9kZSkpIHsKLQkJZGktPmRpX2ZsYWdzIHw9IGNwdV90b19iZTMyKGRpcC0+aV9kaXNrZmxhZ3MgJgotCQkJCQkgICAgR0ZTMl9ESUZfSU5IRVJJVF9KREFUQSk7Ci0JfQotCiAJZGktPl9fcGFkMSA9IDA7CiAJZGktPmRpX3BheWxvYWRfZm9ybWF0ID0gY3B1X3RvX2JlMzIoU19JU0RJUihtb2RlKSA/IEdGUzJfRk9STUFUX0RFIDogMCk7CiAJZGktPmRpX2hlaWdodCA9IDA7CkBAIC02NzcsNyArNDkwLDI2IEBACiAJZGktPmRpX210aW1lX25zZWMgPSBjcHVfdG9fYmUzMih0di50dl9uc2VjKTsKIAlkaS0+ZGlfY3RpbWVfbnNlYyA9IGNwdV90b19iZTMyKHR2LnR2X25zZWMpOwogCW1lbXNldCgmZGktPmRpX3Jlc2VydmVkLCAwLCBzaXplb2YoZGktPmRpX3Jlc2VydmVkKSk7Ci0JCisKKwlzd2l0Y2gobW9kZSAmIFNfSUZNVCkgewkKKwljYXNlIFNfSUZSRUc6CisJCWlmICgoZGlwLT5pX2Rpc2tmbGFncyAmIEdGUzJfRElGX0lOSEVSSVRfSkRBVEEpIHx8CisJCSAgICBnZnMyX3R1bmVfZ2V0KHNkcCwgZ3RfbmV3X2ZpbGVzX2pkYXRhKSkKKwkJCWRpLT5kaV9mbGFncyB8PSBjcHVfdG9fYmUzMihHRlMyX0RJRl9KREFUQSk7CisJCWJyZWFrOworCWNhc2UgU19JRkRJUjoKKwkJZGktPmRpX2ZsYWdzIHw9IGNwdV90b19iZTMyKGRpcC0+aV9kaXNrZmxhZ3MgJgorCQkJCQkgICAgR0ZTMl9ESUZfSU5IRVJJVF9KREFUQSk7CisJCWRpLT5kaV9mbGFncyB8PSBjcHVfdG9fYmUzMihHRlMyX0RJRl9KREFUQSk7CisJCWRpLT5kaV9zaXplID0gY3B1X3RvX2JlNjQoc2RwLT5zZF9zYi5zYl9ic2l6ZSAtIHNpemVvZihzdHJ1Y3QgZ2ZzMl9kaW5vZGUpKTsKKwkJZGktPmRpX2VudHJpZXMgPSBjcHVfdG9fYmUzMigyKTsKKwkJZ2ZzMl9pbml0X2RpcihkaWJoLCBkaXApOworCQlicmVhazsKKwljYXNlIFNfSUZMTks6CisJCW1lbWNweShkaWJoLT5iX2RhdGEgKyBzaXplb2Yoc3RydWN0IGdmczJfZGlub2RlKSwgc3ltbmFtZSwgc2l6ZSk7CisJCWJyZWFrOworCX0KKwogCXNldF9idWZmZXJfdXB0b2RhdGUoZGliaCk7CiAKIAkqYmhwID0gZGliaDsKQEAgLTY4NSw3ICs1MTcsOCBAQAogCiBzdGF0aWMgaW50IG1ha2VfZGlub2RlKHN0cnVjdCBnZnMyX2lub2RlICpkaXAsIHN0cnVjdCBnZnMyX2dsb2NrICpnbCwKIAkJICAgICAgIHVuc2lnbmVkIGludCBtb2RlLCBjb25zdCBzdHJ1Y3QgZ2ZzMl9pbnVtX2hvc3QgKmludW0sCi0JCSAgICAgICBjb25zdCB1NjQgKmdlbmVyYXRpb24sIGRldl90IGRldiwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmhwKQorCQkgICAgICAgY29uc3QgdTY0ICpnZW5lcmF0aW9uLCBkZXZfdCBkZXYsIGNvbnN0IGNoYXIgKnN5bW5hbWUsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmhwKQogewogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQigmZGlwLT5pX2lub2RlKTsKIAl1bnNpZ25lZCBpbnQgdWlkLCBnaWQ7CkBAIC03MDcsNyArNTQwLDcgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X3F1b3RhOwogCi0JaW5pdF9kaW5vZGUoZGlwLCBnbCwgaW51bSwgbW9kZSwgdWlkLCBnaWQsIGdlbmVyYXRpb24sIGRldiwgYmhwKTsKKwlpbml0X2Rpbm9kZShkaXAsIGdsLCBpbnVtLCBtb2RlLCB1aWQsIGdpZCwgZ2VuZXJhdGlvbiwgZGV2LCBzeW1uYW1lLCBzaXplLCBiaHApOwogCWdmczJfcXVvdGFfY2hhbmdlKGRpcCwgKzEsIHVpZCwgZ2lkKTsKIAlnZnMyX3RyYW5zX2VuZChzZHApOwogCkBAIC03NjEsMTQgKzU5NCwxNiBAQAogCQkJZ290byBmYWlsX3F1b3RhX2xvY2tzOwogCX0KIAotCWVycm9yID0gZ2ZzMl9kaXJfYWRkKCZkaXAtPmlfaW5vZGUsIG5hbWUsIGlwLCBJRjJEVChpcC0+aV9pbm9kZS5pX21vZGUpKTsKKwllcnJvciA9IGdmczJfZGlyX2FkZCgmZGlwLT5pX2lub2RlLCBuYW1lLCBpcCk7CiAJaWYgKGVycm9yKQogCQlnb3RvIGZhaWxfZW5kX3RyYW5zOwogCiAJZXJyb3IgPSBnZnMyX21ldGFfaW5vZGVfYnVmZmVyKGlwLCAmZGliaCk7CiAJaWYgKGVycm9yKQogCQlnb3RvIGZhaWxfZW5kX3RyYW5zOwotCWlwLT5pX2lub2RlLmlfbmxpbmsgPSAxOworCWluY19ubGluaygmaXAtPmlfaW5vZGUpOworCWlmIChTX0lTRElSKGlwLT5pX2lub2RlLmlfbW9kZSkpCisJCWluY19ubGluaygmaXAtPmlfaW5vZGUpOwogCWdmczJfdHJhbnNfYWRkX2JoKGlwLT5pX2dsLCBkaWJoLCAxKTsKIAlnZnMyX2Rpbm9kZV9vdXQoaXAsIGRpYmgtPmJfZGF0YSk7CiAJYnJlbHNlKGRpYmgpOwpAQCAtODE1LDI3ICs2NTAsMjUgQEAKIH0KIAogLyoqCi0gKiBnZnMyX2NyZWF0ZWkgLSBDcmVhdGUgYSBuZXcgaW5vZGUKLSAqIEBnaHM6IEFuIGFycmF5IG9mIHR3byBob2xkZXJzCi0gKiBAbmFtZTogVGhlIG5hbWUgb2YgdGhlIG5ldyBmaWxlCi0gKiBAbW9kZTogdGhlIHBlcm1pc3Npb25zIG9uIHRoZSBuZXcgaW5vZGUKKyAqIGdmczJfY3JlYXRlX2lub2RlIC0gQ3JlYXRlIGEgbmV3IGlub2RlCisgKiBAZGlyOiBUaGUgcGFyZW50IGRpcmVjdG9yeQorICogQGRlbnRyeTogVGhlIG5ldyBkZW50cnkKKyAqIEBtb2RlOiBUaGUgcGVybWlzc2lvbnMgb24gdGhlIG5ldyBpbm9kZQorICogQGRldjogRm9yIGRldmljZSBub2RlcywgdGhpcyBpcyB0aGUgZGV2aWNlIG51bWJlcgorICogQHN5bW5hbWU6IEZvciBzeW1saW5rcywgdGhpcyBpcyB0aGUgbGluayBkZXN0aW5hdGlvbgorICogQHNpemU6IFRoZSBpbml0aWFsIHNpemUgb2YgdGhlIGlub2RlIChpZ25vcmVkIGZvciBkaXJlY3RvcmllcykKICAqCi0gKiBAZ2hzWzBdIGlzIGFuIGluaXRpYWxpemVkIGhvbGRlciBmb3IgdGhlIGRpcmVjdG9yeQotICogQGdoc1sxXSBpcyB0aGUgaG9sZGVyIGZvciB0aGUgaW5vZGUgbG9jawotICoKLSAqIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgbm90IE5VTEwsIHRoZSBnbG9ja3Mgb24gYm90aCB0aGUgZGlyZWN0b3J5IGFuZCB0aGUgbmV3Ci0gKiBmaWxlIGFyZSBoZWxkLiAgQSB0cmFuc2FjdGlvbiBoYXMgYmVlbiBzdGFydGVkIGFuZCBhbiBpbnBsYWNlIHJlc2VydmF0aW9uCi0gKiBpcyBoZWxkLCBhcyB3ZWxsLgotICoKLSAqIFJldHVybnM6IEFuIGlub2RlCisgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIG9yIGVycm9yIGNvZGUKICAqLwogCi1zdHJ1Y3QgaW5vZGUgKmdmczJfY3JlYXRlaShzdHJ1Y3QgZ2ZzMl9ob2xkZXIgKmdocywgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCi0JCQkgICB1bnNpZ25lZCBpbnQgbW9kZSwgZGV2X3QgZGV2KQorc3RhdGljIGludCBnZnMyX2NyZWF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJICAgICB1bnNpZ25lZCBpbnQgbW9kZSwgZGV2X3QgZGV2LCBjb25zdCBjaGFyICpzeW1uYW1lLAorCQkJICAgICB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKKwljb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSA9ICZkZW50cnktPmRfbmFtZTsKKwlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZ2hzWzJdOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOwotCXN0cnVjdCBnZnMyX2lub2RlICpkaXAgPSBnaHMtPmdoX2dsLT5nbF9vYmplY3Q7Ci0Jc3RydWN0IGlub2RlICpkaXIgPSAmZGlwLT5pX2lub2RlOworCXN0cnVjdCBnZnMyX2lub2RlICpkaXAgPSBHRlMyX0koZGlyKTsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoJmRpcC0+aV9pbm9kZSk7CiAJc3RydWN0IGdmczJfaW51bV9ob3N0IGludW0gPSB7IC5ub19hZGRyID0gMCwgLm5vX2Zvcm1hbF9pbm8gPSAwIH07CiAJaW50IGVycm9yOwpAQCAtODQzLDEwICs2NzYsOSBAQAogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOwogCiAJaWYgKCFuYW1lLT5sZW4gfHwgbmFtZS0+bGVuID4gR0ZTMl9GTkFNRVNJWkUpCi0JCXJldHVybiBFUlJfUFRSKC1FTkFNRVRPT0xPTkcpOworCQlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKIAotCWdmczJfaG9sZGVyX3JlaW5pdChMTV9TVF9FWENMVVNJVkUsIDAsIGdocyk7Ci0JZXJyb3IgPSBnZnMyX2dsb2NrX25xKGdocyk7CisJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoZGlwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsIGdocyk7CiAJaWYgKGVycm9yKQogCQlnb3RvIGZhaWw7CiAKQEAgLTg2NCw3ICs2OTYsNyBAQAogCWlmIChlcnJvcikKIAkJZ290byBmYWlsX2d1bmxvY2s7CiAKLQllcnJvciA9IG1ha2VfZGlub2RlKGRpcCwgZ2hzWzFdLmdoX2dsLCBtb2RlLCAmaW51bSwgJmdlbmVyYXRpb24sIGRldiwgJmJoKTsKKwllcnJvciA9IG1ha2VfZGlub2RlKGRpcCwgZ2hzWzFdLmdoX2dsLCBtb2RlLCAmaW51bSwgJmdlbmVyYXRpb24sIGRldiwgc3ltbmFtZSwgc2l6ZSwgJmJoKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZmFpbF9ndW5sb2NrMjsKIApAQCAtODkxLDE4ICs3MjMsODUyIEBACiAKIAlpZiAoYmgpCiAJCWJyZWxzZShiaCk7Ci0JcmV0dXJuIGlub2RlOworCisJZ2ZzMl90cmFuc19lbmQoc2RwKTsKKwlpZiAoZGlwLT5pX2FsbG9jLT5hbF9yZ2QpCisJCWdmczJfaW5wbGFjZV9yZWxlYXNlKGRpcCk7CisJZ2ZzMl9xdW90YV91bmxvY2soZGlwKTsKKwlnZnMyX2FsbG9jX3B1dChkaXApOworCWdmczJfZ2xvY2tfZHFfdW5pbml0X20oMiwgZ2hzKTsKKwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOworCXJldHVybiAwOwogCiBmYWlsX2d1bmxvY2syOgogCWdmczJfZ2xvY2tfZHFfdW5pbml0KGdocyArIDEpOwogCWlmIChpbm9kZSAmJiAhSVNfRVJSKGlub2RlKSkKIAkJaXB1dChpbm9kZSk7CiBmYWlsX2d1bmxvY2s6Ci0JZ2ZzMl9nbG9ja19kcShnaHMpOworCWdmczJfZ2xvY2tfZHFfdW5pbml0KGdocyk7CiBmYWlsOgogCWlmIChiaCkKIAkJYnJlbHNlKGJoKTsKLQlyZXR1cm4gRVJSX1BUUihlcnJvcik7CisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIGdmczJfY3JlYXRlIC0gQ3JlYXRlIGEgZmlsZQorICogQGRpcjogVGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0byBjcmVhdGUgdGhlIGZpbGUKKyAqIEBkZW50cnk6IFRoZSBkZW50cnkgb2YgdGhlIG5ldyBmaWxlCisgKiBAbW9kZTogVGhlIG1vZGUgb2YgdGhlIG5ldyBmaWxlCisgKgorICogUmV0dXJuczogZXJybm8KKyAqLworCitzdGF0aWMgaW50IGdmczJfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCSAgICAgICBpbnQgbW9kZSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCit7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlpbnQgcmV0OworCisJZm9yICg7OykgeworCQlyZXQgPSBnZnMyX2NyZWF0ZV9pbm9kZShkaXIsIGRlbnRyeSwgU19JRlJFRyB8IG1vZGUsIDAsIE5VTEwsIDApOworCQlpZiAocmV0ICE9IC1FRVhJU1QgfHwgKG5kICYmIChuZC0+ZmxhZ3MgJiBMT09LVVBfRVhDTCkpKQorCQkJcmV0dXJuIHJldDsKKworCQlpbm9kZSA9IGdmczJfbG9va3VwaShkaXIsICZkZW50cnktPmRfbmFtZSwgMCk7CisJCWlmIChpbm9kZSkgeworCQkJaWYgKCFJU19FUlIoaW5vZGUpKQorCQkJCWJyZWFrOworCQkJcmV0dXJuIFBUUl9FUlIoaW5vZGUpOworCQl9CisJfQorCisJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBnZnMyX2xvb2t1cCAtIExvb2sgdXAgYSBmaWxlbmFtZSBpbiBhIGRpcmVjdG9yeSBhbmQgcmV0dXJuIGl0cyBpbm9kZQorICogQGRpcjogVGhlIGRpcmVjdG9yeSBpbm9kZQorICogQGRlbnRyeTogVGhlIGRlbnRyeSBvZiB0aGUgbmV3IGlub2RlCisgKiBAbmQ6IHBhc3NlZCBmcm9tIExpbnV4IFZGUywgaWdub3JlZCBieSB1cworICoKKyAqIENhbGxlZCBieSB0aGUgVkZTIGxheWVyLiBMb2NrIGRpciBhbmQgY2FsbCBnZnMyX2xvb2t1cGkoKQorICoKKyAqIFJldHVybnM6IGVycm5vCisgKi8KKworc3RhdGljIHN0cnVjdCBkZW50cnkgKmdmczJfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkJICBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDsKKworCWlub2RlID0gZ2ZzMl9sb29rdXBpKGRpciwgJmRlbnRyeS0+ZF9uYW1lLCAwKTsKKwlpZiAoaW5vZGUgJiYgSVNfRVJSKGlub2RlKSkKKwkJcmV0dXJuIEVSUl9DQVNUKGlub2RlKTsKKworCWlmIChpbm9kZSkgeworCQlzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wgPSBHRlMyX0koaW5vZGUpLT5pX2dsOworCQlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZ2g7CisJCWludCBlcnJvcjsKKwkJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoZ2wsIExNX1NUX1NIQVJFRCwgTE1fRkxBR19BTlksICZnaCk7CisJCWlmIChlcnJvcikgeworCQkJaXB1dChpbm9kZSk7CisJCQlyZXR1cm4gRVJSX1BUUihlcnJvcik7CisJCX0KKwkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmdoKTsKKwkJcmV0dXJuIGRfc3BsaWNlX2FsaWFzKGlub2RlLCBkZW50cnkpOworCX0KKwlkX2FkZChkZW50cnksIGlub2RlKTsKKworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIGdmczJfbGluayAtIExpbmsgdG8gYSBmaWxlCisgKiBAb2xkX2RlbnRyeTogVGhlIGlub2RlIHRvIGxpbmsKKyAqIEBkaXI6IEFkZCBsaW5rIHRvIHRoaXMgZGlyZWN0b3J5CisgKiBAZGVudHJ5OiBUaGUgbmFtZSBvZiB0aGUgbGluaworICoKKyAqIExpbmsgdGhlIGlub2RlIGluICJvbGRfZGVudHJ5IiBpbnRvIHRoZSBkaXJlY3RvcnkgImRpciIgd2l0aCB0aGUKKyAqIG5hbWUgaW4gImRlbnRyeSIuCisgKgorICogUmV0dXJuczogZXJybm8KKyAqLworCitzdGF0aWMgaW50IGdmczJfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJc3RydWN0IGdmczJfaW5vZGUgKmRpcCA9IEdGUzJfSShkaXIpOworCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQihkaXIpOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBvbGRfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7CisJc3RydWN0IGdmczJfaG9sZGVyIGdoc1syXTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpYmg7CisJaW50IGFsbG9jX3JlcXVpcmVkOworCWludCBlcnJvcjsKKworCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQorCQlyZXR1cm4gLUVQRVJNOworCisJZ2ZzMl9ob2xkZXJfaW5pdChkaXAtPmlfZ2wsIExNX1NUX0VYQ0xVU0lWRSwgMCwgZ2hzKTsKKwlnZnMyX2hvbGRlcl9pbml0KGlwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsIGdocyArIDEpOworCisJZXJyb3IgPSBnZnMyX2dsb2NrX25xKGdocyk7IC8qIHBhcmVudCAqLworCWlmIChlcnJvcikKKwkJZ290byBvdXRfcGFyZW50OworCisJZXJyb3IgPSBnZnMyX2dsb2NrX25xKGdocyArIDEpOyAvKiBjaGlsZCAqLworCWlmIChlcnJvcikKKwkJZ290byBvdXRfY2hpbGQ7CisKKwllcnJvciA9IC1FTk9FTlQ7CisJaWYgKGlub2RlLT5pX25saW5rID09IDApCisJCWdvdG8gb3V0X2d1bmxvY2s7CisKKwllcnJvciA9IGdmczJfcGVybWlzc2lvbihkaXIsIE1BWV9XUklURSB8IE1BWV9FWEVDLCAwKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X2d1bmxvY2s7CisKKwllcnJvciA9IGdmczJfZGlyX2NoZWNrKGRpciwgJmRlbnRyeS0+ZF9uYW1lLCBOVUxMKTsKKwlzd2l0Y2ggKGVycm9yKSB7CisJY2FzZSAtRU5PRU5UOgorCQlicmVhazsKKwljYXNlIDA6CisJCWVycm9yID0gLUVFWElTVDsKKwlkZWZhdWx0OgorCQlnb3RvIG91dF9ndW5sb2NrOworCX0KKworCWVycm9yID0gLUVJTlZBTDsKKwlpZiAoIWRpcC0+aV9pbm9kZS5pX25saW5rKQorCQlnb3RvIG91dF9ndW5sb2NrOworCWVycm9yID0gLUVGQklHOworCWlmIChkaXAtPmlfZW50cmllcyA9PSAodTMyKS0xKQorCQlnb3RvIG91dF9ndW5sb2NrOworCWVycm9yID0gLUVQRVJNOworCWlmIChJU19JTU1VVEFCTEUoaW5vZGUpIHx8IElTX0FQUEVORChpbm9kZSkpCisJCWdvdG8gb3V0X2d1bmxvY2s7CisJZXJyb3IgPSAtRUlOVkFMOworCWlmICghaXAtPmlfaW5vZGUuaV9ubGluaykKKwkJZ290byBvdXRfZ3VubG9jazsKKwllcnJvciA9IC1FTUxJTks7CisJaWYgKGlwLT5pX2lub2RlLmlfbmxpbmsgPT0gKHUzMiktMSkKKwkJZ290byBvdXRfZ3VubG9jazsKKworCWFsbG9jX3JlcXVpcmVkID0gZXJyb3IgPSBnZnMyX2RpcmFkZF9hbGxvY19yZXF1aXJlZChkaXIsICZkZW50cnktPmRfbmFtZSk7CisJaWYgKGVycm9yIDwgMCkKKwkJZ290byBvdXRfZ3VubG9jazsKKwllcnJvciA9IDA7CisKKwlpZiAoYWxsb2NfcmVxdWlyZWQpIHsKKwkJc3RydWN0IGdmczJfYWxsb2MgKmFsID0gZ2ZzMl9hbGxvY19nZXQoZGlwKTsKKwkJaWYgKCFhbCkgeworCQkJZXJyb3IgPSAtRU5PTUVNOworCQkJZ290byBvdXRfZ3VubG9jazsKKwkJfQorCisJCWVycm9yID0gZ2ZzMl9xdW90YV9sb2NrX2NoZWNrKGRpcCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gb3V0X2FsbG9jOworCisJCWFsLT5hbF9yZXF1ZXN0ZWQgPSBzZHAtPnNkX21heF9kaXJyZXM7CisKKwkJZXJyb3IgPSBnZnMyX2lucGxhY2VfcmVzZXJ2ZShkaXApOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIG91dF9ndW5sb2NrX3E7CisKKwkJZXJyb3IgPSBnZnMyX3RyYW5zX2JlZ2luKHNkcCwgc2RwLT5zZF9tYXhfZGlycmVzICsKKwkJCQkJIGdmczJfcmdfYmxvY2tzKGFsKSArCisJCQkJCSAyICogUkVTX0RJTk9ERSArIFJFU19TVEFURlMgKworCQkJCQkgUkVTX1FVT1RBLCAwKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXRfaXByZXM7CisJfSBlbHNlIHsKKwkJZXJyb3IgPSBnZnMyX3RyYW5zX2JlZ2luKHNkcCwgMiAqIFJFU19ESU5PREUgKyBSRVNfTEVBRiwgMCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gb3V0X2lwcmVzOworCX0KKworCWVycm9yID0gZ2ZzMl9tZXRhX2lub2RlX2J1ZmZlcihpcCwgJmRpYmgpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfZW5kX3RyYW5zOworCisJZXJyb3IgPSBnZnMyX2Rpcl9hZGQoZGlyLCAmZGVudHJ5LT5kX25hbWUsIGlwKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X2JyZWxzZTsKKworCWdmczJfdHJhbnNfYWRkX2JoKGlwLT5pX2dsLCBkaWJoLCAxKTsKKwlpbmNfbmxpbmsoJmlwLT5pX2lub2RlKTsKKwlpcC0+aV9pbm9kZS5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOworCWdmczJfZGlub2RlX291dChpcCwgZGliaC0+Yl9kYXRhKTsKKwltYXJrX2lub2RlX2RpcnR5KCZpcC0+aV9pbm9kZSk7CisKK291dF9icmVsc2U6CisJYnJlbHNlKGRpYmgpOworb3V0X2VuZF90cmFuczoKKwlnZnMyX3RyYW5zX2VuZChzZHApOworb3V0X2lwcmVzOgorCWlmIChhbGxvY19yZXF1aXJlZCkKKwkJZ2ZzMl9pbnBsYWNlX3JlbGVhc2UoZGlwKTsKK291dF9ndW5sb2NrX3E6CisJaWYgKGFsbG9jX3JlcXVpcmVkKQorCQlnZnMyX3F1b3RhX3VubG9jayhkaXApOworb3V0X2FsbG9jOgorCWlmIChhbGxvY19yZXF1aXJlZCkKKwkJZ2ZzMl9hbGxvY19wdXQoZGlwKTsKK291dF9ndW5sb2NrOgorCWdmczJfZ2xvY2tfZHEoZ2hzICsgMSk7CitvdXRfY2hpbGQ6CisJZ2ZzMl9nbG9ja19kcShnaHMpOworb3V0X3BhcmVudDoKKwlnZnMyX2hvbGRlcl91bmluaXQoZ2hzKTsKKwlnZnMyX2hvbGRlcl91bmluaXQoZ2hzICsgMSk7CisJaWYgKCFlcnJvcikgeworCQlpaG9sZChpbm9kZSk7CisJCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CisJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCX0KKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qCisgKiBnZnMyX3VubGlua19vayAtIGNoZWNrIHRvIHNlZSB0aGF0IGEgaW5vZGUgaXMgc3RpbGwgaW4gYSBkaXJlY3RvcnkKKyAqIEBkaXA6IHRoZSBkaXJlY3RvcnkKKyAqIEBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgZmlsZQorICogQGlwOiB0aGUgaW5vZGUKKyAqCisgKiBBc3N1bWVzIHRoYXQgdGhlIGxvY2sgb24gKGF0IGxlYXN0KSBAZGlwIGlzIGhlbGQuCisgKgorICogUmV0dXJuczogMCBpZiB0aGUgcGFyZW50L2NoaWxkIHJlbGF0aW9uc2hpcCBpcyBjb3JyZWN0LCBlcnJubyBpZiBpdCBpc24ndAorICovCisKK3N0YXRpYyBpbnQgZ2ZzMl91bmxpbmtfb2soc3RydWN0IGdmczJfaW5vZGUgKmRpcCwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCisJCQkgIGNvbnN0IHN0cnVjdCBnZnMyX2lub2RlICppcCkKK3sKKwlpbnQgZXJyb3I7CisKKwlpZiAoSVNfSU1NVVRBQkxFKCZpcC0+aV9pbm9kZSkgfHwgSVNfQVBQRU5EKCZpcC0+aV9pbm9kZSkpCisJCXJldHVybiAtRVBFUk07CisKKwlpZiAoKGRpcC0+aV9pbm9kZS5pX21vZGUgJiBTX0lTVlRYKSAmJgorCSAgICBkaXAtPmlfaW5vZGUuaV91aWQgIT0gY3VycmVudF9mc3VpZCgpICYmCisJICAgIGlwLT5pX2lub2RlLmlfdWlkICE9IGN1cnJlbnRfZnN1aWQoKSAmJiAhY2FwYWJsZShDQVBfRk9XTkVSKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCWlmIChJU19BUFBFTkQoJmRpcC0+aV9pbm9kZSkpCisJCXJldHVybiAtRVBFUk07CisKKwllcnJvciA9IGdmczJfcGVybWlzc2lvbigmZGlwLT5pX2lub2RlLCBNQVlfV1JJVEUgfCBNQVlfRVhFQywgMCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwllcnJvciA9IGdmczJfZGlyX2NoZWNrKCZkaXAtPmlfaW5vZGUsIG5hbWUsIGlwKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGdmczJfdW5saW5rX2lub2RlIC0gUmVtb3ZlcyBhbiBpbm9kZSBmcm9tIGl0cyBwYXJlbnQgZGlyIGFuZCB1bmxpbmtzIGl0CisgKiBAZGlwOiBUaGUgcGFyZW50IGRpcmVjdG9yeQorICogQG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBlbnRyeSBpbiB0aGUgcGFyZW50IGRpcmVjdG9yeQorICogQGJoOiBUaGUgaW5vZGUgYnVmZmVyIGZvciB0aGUgaW5vZGUgdG8gYmUgcmVtb3ZlZAorICogQGlub2RlOiBUaGUgaW5vZGUgdG8gYmUgcmVtb3ZlZAorICoKKyAqIENhbGxlZCB3aXRoIGFsbCB0aGUgbG9ja3MgYW5kIGluIGEgdHJhbnNhY3Rpb24uIFRoaXMgd2lsbCBvbmx5IGJlCisgKiBjYWxsZWQgZm9yIGEgZGlyZWN0b3J5IGFmdGVyIGl0IGhhcyBiZWVuIGNoZWNrZWQgdG8gZW5zdXJlIGl0IGlzIGVtcHR5LgorICoKKyAqIFJldHVybnM6IDAgb24gc3VjY2Vzcywgb3IgYW4gZXJyb3IKKyAqLworCitzdGF0aWMgaW50IGdmczJfdW5saW5rX2lub2RlKHN0cnVjdCBnZnMyX2lub2RlICpkaXAsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBnZnMyX2Rpcl9kZWwoZGlwLCBkZW50cnkpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJaXAtPmlfZW50cmllcyA9IDA7CisJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CisJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCisJCWNsZWFyX25saW5rKGlub2RlKTsKKwllbHNlCisJCWRyb3BfbmxpbmsoaW5vZGUpOworCWdmczJfdHJhbnNfYWRkX2JoKGlwLT5pX2dsLCBiaCwgMSk7CisJZ2ZzMl9kaW5vZGVfb3V0KGlwLCBiaC0+Yl9kYXRhKTsKKwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwlpZiAoaW5vZGUtPmlfbmxpbmsgPT0gMCkKKwkJZ2ZzMl91bmxpbmtfZGkoaW5vZGUpOworCXJldHVybiAwOworfQorCisKKy8qKgorICogZ2ZzMl91bmxpbmsgLSBVbmxpbmsgYW4gaW5vZGUgKHRoaXMgZG9lcyBybWRpciBhcyB3ZWxsKQorICogQGRpcjogVGhlIGlub2RlIG9mIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgaW5vZGUgdG8gdW5saW5rCisgKiBAZGVudHJ5OiBUaGUgZmlsZSBpdHNlbGYKKyAqCisgKiBUaGlzIHJvdXRpbmUgdXNlcyB0aGUgdHlwZSBvZiB0aGUgaW5vZGUgYXMgYSBmbGFnIHRvIGZpZ3VyZSBvdXQKKyAqIHdoZXRoZXIgdGhpcyBpcyBhbiB1bmxpbmsgb3IgYW4gcm1kaXIuCisgKgorICogUmV0dXJuczogZXJybm8KKyAqLworCitzdGF0aWMgaW50IGdmczJfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJc3RydWN0IGdmczJfaW5vZGUgKmRpcCA9IEdGUzJfSShkaXIpOworCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQihkaXIpOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOworCXN0cnVjdCBnZnMyX2hvbGRlciBnaHNbM107CisJc3RydWN0IGdmczJfcmdycGQgKnJnZDsKKwlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgcmlfZ2g7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBnZnMyX3JpbmRleF9ob2xkKHNkcCwgJnJpX2doKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCWdmczJfaG9sZGVyX2luaXQoZGlwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsIGdocyk7CisJZ2ZzMl9ob2xkZXJfaW5pdChpcC0+aV9nbCwgIExNX1NUX0VYQ0xVU0lWRSwgMCwgZ2hzICsgMSk7CisKKwlyZ2QgPSBnZnMyX2JsazJyZ3JwZChzZHAsIGlwLT5pX25vX2FkZHIpOworCWdmczJfaG9sZGVyX2luaXQocmdkLT5yZF9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLCBnaHMgKyAyKTsKKworCisJZXJyb3IgPSBnZnMyX2dsb2NrX25xKGdocyk7IC8qIHBhcmVudCAqLworCWlmIChlcnJvcikKKwkJZ290byBvdXRfcGFyZW50OworCisJZXJyb3IgPSBnZnMyX2dsb2NrX25xKGdocyArIDEpOyAvKiBjaGlsZCAqLworCWlmIChlcnJvcikKKwkJZ290byBvdXRfY2hpbGQ7CisKKwllcnJvciA9IC1FTk9FTlQ7CisJaWYgKGlub2RlLT5pX25saW5rID09IDApCisJCWdvdG8gb3V0X3JncnA7CisKKwlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgeworCQllcnJvciA9IC1FTk9URU1QVFk7CisJCWlmIChpcC0+aV9lbnRyaWVzID4gMiB8fCBpbm9kZS0+aV9ubGluayA+IDIpCisJCQlnb3RvIG91dF9yZ3JwOworCX0KKworCWVycm9yID0gZ2ZzMl9nbG9ja19ucShnaHMgKyAyKTsgLyogcmdycCAqLworCWlmIChlcnJvcikKKwkJZ290byBvdXRfcmdycDsKKworCWVycm9yID0gZ2ZzMl91bmxpbmtfb2soZGlwLCAmZGVudHJ5LT5kX25hbWUsIGlwKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X2d1bmxvY2s7CisKKwllcnJvciA9IGdmczJfdHJhbnNfYmVnaW4oc2RwLCAyKlJFU19ESU5PREUgKyAzKlJFU19MRUFGICsgUkVTX1JHX0JJVCwgMCk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9ndW5sb2NrOworCisJZXJyb3IgPSBnZnMyX21ldGFfaW5vZGVfYnVmZmVyKGlwLCAmYmgpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfZW5kX3RyYW5zOworCisJZXJyb3IgPSBnZnMyX3VubGlua19pbm9kZShkaXAsIGRlbnRyeSwgYmgpOworCWJyZWxzZShiaCk7CisKK291dF9lbmRfdHJhbnM6CisJZ2ZzMl90cmFuc19lbmQoc2RwKTsKK291dF9ndW5sb2NrOgorCWdmczJfZ2xvY2tfZHEoZ2hzICsgMik7CitvdXRfcmdycDoKKwlnZnMyX2hvbGRlcl91bmluaXQoZ2hzICsgMik7CisJZ2ZzMl9nbG9ja19kcShnaHMgKyAxKTsKK291dF9jaGlsZDoKKwlnZnMyX2hvbGRlcl91bmluaXQoZ2hzICsgMSk7CisJZ2ZzMl9nbG9ja19kcShnaHMpOworb3V0X3BhcmVudDoKKwlnZnMyX2hvbGRlcl91bmluaXQoZ2hzKTsKKwlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmcmlfZ2gpOworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiBnZnMyX3N5bWxpbmsgLSBDcmVhdGUgYSBzeW1saW5rCisgKiBAZGlyOiBUaGUgZGlyZWN0b3J5IHRvIGNyZWF0ZSB0aGUgc3ltbGluayBpbgorICogQGRlbnRyeTogVGhlIGRlbnRyeSB0byBwdXQgdGhlIHN5bWxpbmsgaW4KKyAqIEBzeW1uYW1lOiBUaGUgdGhpbmcgd2hpY2ggdGhlIGxpbmsgcG9pbnRzIHRvCisgKgorICogUmV0dXJuczogZXJybm8KKyAqLworCitzdGF0aWMgaW50IGdmczJfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJY29uc3QgY2hhciAqc3ltbmFtZSkKK3sKKwlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoZGlyKTsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKworCXNpemUgPSBzdHJsZW4oc3ltbmFtZSk7CisJaWYgKHNpemUgPiBzZHAtPnNkX3NiLnNiX2JzaXplIC0gc2l6ZW9mKHN0cnVjdCBnZnMyX2Rpbm9kZSkgLSAxKQorCQlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKKworCXJldHVybiBnZnMyX2NyZWF0ZV9pbm9kZShkaXIsIGRlbnRyeSwgU19JRkxOSyB8IFNfSVJXWFVHTywgMCwgc3ltbmFtZSwgc2l6ZSk7Cit9CisKKy8qKgorICogZ2ZzMl9ta2RpciAtIE1ha2UgYSBkaXJlY3RvcnkKKyAqIEBkaXI6IFRoZSBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoZSBuZXcgb25lCisgKiBAZGVudHJ5OiBUaGUgZGVudHJ5IG9mIHRoZSBuZXcgZGlyZWN0b3J5CisgKiBAbW9kZTogVGhlIG1vZGUgb2YgdGhlIG5ldyBkaXJlY3RvcnkKKyAqCisgKiBSZXR1cm5zOiBlcnJubworICovCisKK3N0YXRpYyBpbnQgZ2ZzMl9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSkKK3sKKwlyZXR1cm4gZ2ZzMl9jcmVhdGVfaW5vZGUoZGlyLCBkZW50cnksIFNfSUZESVIgfCBtb2RlLCAwLCBOVUxMLCAwKTsKK30KKworLyoqCisgKiBnZnMyX21rbm9kIC0gTWFrZSBhIHNwZWNpYWwgZmlsZQorICogQGRpcjogVGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgc3BlY2lhbCBmaWxlIHdpbGwgcmVzaWRlCisgKiBAZGVudHJ5OiBUaGUgZGVudHJ5IG9mIHRoZSBzcGVjaWFsIGZpbGUKKyAqIEBtb2RlOiBUaGUgbW9kZSBvZiB0aGUgc3BlY2lhbCBmaWxlCisgKiBAZGV2OiBUaGUgZGV2aWNlIHNwZWNpZmljYXRpb24gb2YgdGhlIHNwZWNpYWwgZmlsZQorICoKKyAqLworCitzdGF0aWMgaW50IGdmczJfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsCisJCSAgICAgIGRldl90IGRldikKK3sKKwlyZXR1cm4gZ2ZzMl9jcmVhdGVfaW5vZGUoZGlyLCBkZW50cnksIG1vZGUsIGRldiwgTlVMTCwgMCk7Cit9CisKKy8qCisgKiBnZnMyX29rX3RvX21vdmUgLSBjaGVjayBpZiBpdCdzIG9rIHRvIG1vdmUgYSBkaXJlY3RvcnkgdG8gYW5vdGhlciBkaXJlY3RvcnkKKyAqIEB0aGlzOiBtb3ZlIHRoaXMKKyAqIEB0bzogdG8gaGVyZQorICoKKyAqIEZvbGxvdyBAdG8gYmFjayB0byB0aGUgcm9vdCBhbmQgbWFrZSBzdXJlIHdlIGRvbid0IGVuY291bnRlciBAdGhpcworICogQXNzdW1lcyB3ZSBhbHJlYWR5IGhvbGQgdGhlIHJlbmFtZSBsb2NrLgorICoKKyAqIFJldHVybnM6IGVycm5vCisgKi8KKworc3RhdGljIGludCBnZnMyX29rX3RvX21vdmUoc3RydWN0IGdmczJfaW5vZGUgKnRoaXMsIHN0cnVjdCBnZnMyX2lub2RlICp0bykKK3sKKwlzdHJ1Y3QgaW5vZGUgKmRpciA9ICZ0by0+aV9pbm9kZTsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGlyLT5pX3NiOworCXN0cnVjdCBpbm9kZSAqdG1wOworCWludCBlcnJvciA9IDA7CisKKwlpZ3JhYihkaXIpOworCisJZm9yICg7OykgeworCQlpZiAoZGlyID09ICZ0aGlzLT5pX2lub2RlKSB7CisJCQllcnJvciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlpZiAoZGlyID09IHNiLT5zX3Jvb3QtPmRfaW5vZGUpIHsKKwkJCWVycm9yID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJdG1wID0gZ2ZzMl9sb29rdXBpKGRpciwgJmdmczJfcWRvdGRvdCwgMSk7CisJCWlmIChJU19FUlIodG1wKSkgeworCQkJZXJyb3IgPSBQVFJfRVJSKHRtcCk7CisJCQlicmVhazsKKwkJfQorCisJCWlwdXQoZGlyKTsKKwkJZGlyID0gdG1wOworCX0KKworCWlwdXQoZGlyKTsKKworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiBnZnMyX3JlbmFtZSAtIFJlbmFtZSBhIGZpbGUKKyAqIEBvZGlyOiBQYXJlbnQgZGlyZWN0b3J5IG9mIG9sZCBmaWxlIG5hbWUKKyAqIEBvZGVudHJ5OiBUaGUgb2xkIGRlbnRyeSBvZiB0aGUgZmlsZQorICogQG5kaXI6IFBhcmVudCBkaXJlY3Rvcnkgb2YgbmV3IGZpbGUgbmFtZQorICogQG5kZW50cnk6IFRoZSBuZXcgZGVudHJ5IG9mIHRoZSBmaWxlCisgKgorICogUmV0dXJuczogZXJybm8KKyAqLworCitzdGF0aWMgaW50IGdmczJfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2Rpciwgc3RydWN0IGRlbnRyeSAqb2RlbnRyeSwKKwkJICAgICAgIHN0cnVjdCBpbm9kZSAqbmRpciwgc3RydWN0IGRlbnRyeSAqbmRlbnRyeSkKK3sKKwlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqb2RpcCA9IEdGUzJfSShvZGlyKTsKKwlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqbmRpcCA9IEdGUzJfSShuZGlyKTsKKwlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0kob2RlbnRyeS0+ZF9pbm9kZSk7CisJc3RydWN0IGdmczJfaW5vZGUgKm5pcCA9IE5VTEw7CisJc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKG9kaXIpOworCXN0cnVjdCBnZnMyX2hvbGRlciBnaHNbNV0sIHJfZ2ggPSB7IC5naF9nbCA9IE5VTEwsIH0sIHJpX2doOworCXN0cnVjdCBnZnMyX3JncnBkICpucmdkOworCXVuc2lnbmVkIGludCBudW1fZ2g7CisJaW50IGRpcl9yZW5hbWUgPSAwOworCWludCBhbGxvY19yZXF1aXJlZCA9IDA7CisJdW5zaWduZWQgaW50IHg7CisJaW50IGVycm9yOworCisJaWYgKG5kZW50cnktPmRfaW5vZGUpIHsKKwkJbmlwID0gR0ZTMl9JKG5kZW50cnktPmRfaW5vZGUpOworCQlpZiAoaXAgPT0gbmlwKQorCQkJcmV0dXJuIDA7CisJfQorCisJZXJyb3IgPSBnZnMyX3JpbmRleF9ob2xkKHNkcCwgJnJpX2doKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCWlmIChvZGlwICE9IG5kaXApIHsKKwkJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoc2RwLT5zZF9yZW5hbWVfZ2wsIExNX1NUX0VYQ0xVU0lWRSwKKwkJCQkJICAgMCwgJnJfZ2gpOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIG91dDsKKworCQlpZiAoU19JU0RJUihpcC0+aV9pbm9kZS5pX21vZGUpKSB7CisJCQlkaXJfcmVuYW1lID0gMTsKKwkJCS8qIGRvbid0IG1vdmUgYSBkaXJjdG9yeSBpbnRvIGl0J3Mgc3ViZGlyICovCisJCQllcnJvciA9IGdmczJfb2tfdG9fbW92ZShpcCwgbmRpcCk7CisJCQlpZiAoZXJyb3IpCisJCQkJZ290byBvdXRfZ3VubG9ja19yOworCQl9CisJfQorCisJbnVtX2doID0gMTsKKwlnZnMyX2hvbGRlcl9pbml0KG9kaXAtPmlfZ2wsIExNX1NUX0VYQ0xVU0lWRSwgMCwgZ2hzKTsKKwlpZiAob2RpcCAhPSBuZGlwKSB7CisJCWdmczJfaG9sZGVyX2luaXQobmRpcC0+aV9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLCBnaHMgKyBudW1fZ2gpOworCQludW1fZ2grKzsKKwl9CisJZ2ZzMl9ob2xkZXJfaW5pdChpcC0+aV9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLCBnaHMgKyBudW1fZ2gpOworCW51bV9naCsrOworCisJaWYgKG5pcCkgeworCQlnZnMyX2hvbGRlcl9pbml0KG5pcC0+aV9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLCBnaHMgKyBudW1fZ2gpOworCQludW1fZ2grKzsKKwkJLyogZ3JhYiB0aGUgcmVzb3VyY2UgbG9jayBmb3IgdW5saW5rIGZsYWcgdHdpZGRsaW5nIAorCQkgKiB0aGlzIGlzIHRoZSBjYXNlIG9mIHRoZSB0YXJnZXQgZmlsZSBhbHJlYWR5IGV4aXN0aW5nCisJCSAqIHNvIHdlIHVubGluayBiZWZvcmUgZG9pbmcgdGhlIHJlbmFtZQorCQkgKi8KKwkJbnJnZCA9IGdmczJfYmxrMnJncnBkKHNkcCwgbmlwLT5pX25vX2FkZHIpOworCQlpZiAobnJnZCkKKwkJCWdmczJfaG9sZGVyX2luaXQobnJnZC0+cmRfZ2wsIExNX1NUX0VYQ0xVU0lWRSwgMCwgZ2hzICsgbnVtX2doKyspOworCX0KKworCWZvciAoeCA9IDA7IHggPCBudW1fZ2g7IHgrKykgeworCQllcnJvciA9IGdmczJfZ2xvY2tfbnEoZ2hzICsgeCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gb3V0X2d1bmxvY2s7CisJfQorCisJZXJyb3IgPSAtRU5PRU5UOworCWlmIChpcC0+aV9pbm9kZS5pX25saW5rID09IDApCisJCWdvdG8gb3V0X2d1bmxvY2s7CisKKwkvKiBDaGVjayBvdXQgdGhlIG9sZCBkaXJlY3RvcnkgKi8KKworCWVycm9yID0gZ2ZzMl91bmxpbmtfb2sob2RpcCwgJm9kZW50cnktPmRfbmFtZSwgaXApOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfZ3VubG9jazsKKworCS8qIENoZWNrIG91dCB0aGUgbmV3IGRpcmVjdG9yeSAqLworCisJaWYgKG5pcCkgeworCQllcnJvciA9IGdmczJfdW5saW5rX29rKG5kaXAsICZuZGVudHJ5LT5kX25hbWUsIG5pcCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gb3V0X2d1bmxvY2s7CisKKwkJaWYgKG5pcC0+aV9pbm9kZS5pX25saW5rID09IDApIHsKKwkJCWVycm9yID0gLUVBR0FJTjsKKwkJCWdvdG8gb3V0X2d1bmxvY2s7CisJCX0KKworCQlpZiAoU19JU0RJUihuaXAtPmlfaW5vZGUuaV9tb2RlKSkgeworCQkJaWYgKG5pcC0+aV9lbnRyaWVzIDwgMikgeworCQkJCWdmczJfY29uc2lzdF9pbm9kZShuaXApOworCQkJCWVycm9yID0gLUVJTzsKKwkJCQlnb3RvIG91dF9ndW5sb2NrOworCQkJfQorCQkJaWYgKG5pcC0+aV9lbnRyaWVzID4gMikgeworCQkJCWVycm9yID0gLUVOT1RFTVBUWTsKKwkJCQlnb3RvIG91dF9ndW5sb2NrOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJZXJyb3IgPSBnZnMyX3Blcm1pc3Npb24obmRpciwgTUFZX1dSSVRFIHwgTUFZX0VYRUMsIDApOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIG91dF9ndW5sb2NrOworCisJCWVycm9yID0gZ2ZzMl9kaXJfY2hlY2sobmRpciwgJm5kZW50cnktPmRfbmFtZSwgTlVMTCk7CisJCXN3aXRjaCAoZXJyb3IpIHsKKwkJY2FzZSAtRU5PRU5UOgorCQkJZXJyb3IgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgMDoKKwkJCWVycm9yID0gLUVFWElTVDsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gb3V0X2d1bmxvY2s7CisJCX07CisKKwkJaWYgKG9kaXAgIT0gbmRpcCkgeworCQkJaWYgKCFuZGlwLT5pX2lub2RlLmlfbmxpbmspIHsKKwkJCQllcnJvciA9IC1FTk9FTlQ7CisJCQkJZ290byBvdXRfZ3VubG9jazsKKwkJCX0KKwkJCWlmIChuZGlwLT5pX2VudHJpZXMgPT0gKHUzMiktMSkgeworCQkJCWVycm9yID0gLUVGQklHOworCQkJCWdvdG8gb3V0X2d1bmxvY2s7CisJCQl9CisJCQlpZiAoU19JU0RJUihpcC0+aV9pbm9kZS5pX21vZGUpICYmCisJCQkgICAgbmRpcC0+aV9pbm9kZS5pX25saW5rID09ICh1MzIpLTEpIHsKKwkJCQllcnJvciA9IC1FTUxJTks7CisJCQkJZ290byBvdXRfZ3VubG9jazsKKwkJCX0KKwkJfQorCX0KKworCS8qIENoZWNrIG91dCB0aGUgZGlyIHRvIGJlIHJlbmFtZWQgKi8KKworCWlmIChkaXJfcmVuYW1lKSB7CisJCWVycm9yID0gZ2ZzMl9wZXJtaXNzaW9uKG9kZW50cnktPmRfaW5vZGUsIE1BWV9XUklURSwgMCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gb3V0X2d1bmxvY2s7CisJfQorCisJaWYgKG5pcCA9PSBOVUxMKQorCQlhbGxvY19yZXF1aXJlZCA9IGdmczJfZGlyYWRkX2FsbG9jX3JlcXVpcmVkKG5kaXIsICZuZGVudHJ5LT5kX25hbWUpOworCWVycm9yID0gYWxsb2NfcmVxdWlyZWQ7CisJaWYgKGVycm9yIDwgMCkKKwkJZ290byBvdXRfZ3VubG9jazsKKwllcnJvciA9IDA7CisKKwlpZiAoYWxsb2NfcmVxdWlyZWQpIHsKKwkJc3RydWN0IGdmczJfYWxsb2MgKmFsID0gZ2ZzMl9hbGxvY19nZXQobmRpcCk7CisJCWlmICghYWwpIHsKKwkJCWVycm9yID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0X2d1bmxvY2s7CisJCX0KKworCQllcnJvciA9IGdmczJfcXVvdGFfbG9ja19jaGVjayhuZGlwKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXRfYWxsb2M7CisKKwkJYWwtPmFsX3JlcXVlc3RlZCA9IHNkcC0+c2RfbWF4X2RpcnJlczsKKworCQllcnJvciA9IGdmczJfaW5wbGFjZV9yZXNlcnZlX3JpKG5kaXApOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIG91dF9ndW5sb2NrX3E7CisKKwkJZXJyb3IgPSBnZnMyX3RyYW5zX2JlZ2luKHNkcCwgc2RwLT5zZF9tYXhfZGlycmVzICsKKwkJCQkJIGdmczJfcmdfYmxvY2tzKGFsKSArCisJCQkJCSA0ICogUkVTX0RJTk9ERSArIDQgKiBSRVNfTEVBRiArCisJCQkJCSBSRVNfU1RBVEZTICsgUkVTX1FVT1RBICsgNCwgMCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gb3V0X2lwcmVzZXJ2OworCX0gZWxzZSB7CisJCWVycm9yID0gZ2ZzMl90cmFuc19iZWdpbihzZHAsIDQgKiBSRVNfRElOT0RFICsKKwkJCQkJIDUgKiBSRVNfTEVBRiArIDQsIDApOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIG91dF9ndW5sb2NrOworCX0KKworCS8qIFJlbW92ZSB0aGUgdGFyZ2V0IGZpbGUsIGlmIGl0IGV4aXN0cyAqLworCisJaWYgKG5pcCkgeworCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOworCQllcnJvciA9IGdmczJfbWV0YV9pbm9kZV9idWZmZXIobmlwLCAmYmgpOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIG91dF9lbmRfdHJhbnM7CisJCWVycm9yID0gZ2ZzMl91bmxpbmtfaW5vZGUobmRpcCwgbmRlbnRyeSwgYmgpOworCQlicmVsc2UoYmgpOworCX0KKworCWlmIChkaXJfcmVuYW1lKSB7CisJCWVycm9yID0gZ2ZzMl9kaXJfbXZpbm8oaXAsICZnZnMyX3Fkb3Rkb3QsIG5kaXAsIERUX0RJUik7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gb3V0X2VuZF90cmFuczsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpYmg7CisJCWVycm9yID0gZ2ZzMl9tZXRhX2lub2RlX2J1ZmZlcihpcCwgJmRpYmgpOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIG91dF9lbmRfdHJhbnM7CisJCWlwLT5pX2lub2RlLmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CisJCWdmczJfdHJhbnNfYWRkX2JoKGlwLT5pX2dsLCBkaWJoLCAxKTsKKwkJZ2ZzMl9kaW5vZGVfb3V0KGlwLCBkaWJoLT5iX2RhdGEpOworCQlicmVsc2UoZGliaCk7CisJfQorCisJZXJyb3IgPSBnZnMyX2Rpcl9kZWwob2RpcCwgb2RlbnRyeSk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9lbmRfdHJhbnM7CisKKwllcnJvciA9IGdmczJfZGlyX2FkZChuZGlyLCAmbmRlbnRyeS0+ZF9uYW1lLCBpcCk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9lbmRfdHJhbnM7CisKK291dF9lbmRfdHJhbnM6CisJZ2ZzMl90cmFuc19lbmQoc2RwKTsKK291dF9pcHJlc2VydjoKKwlpZiAoYWxsb2NfcmVxdWlyZWQpCisJCWdmczJfaW5wbGFjZV9yZWxlYXNlKG5kaXApOworb3V0X2d1bmxvY2tfcToKKwlpZiAoYWxsb2NfcmVxdWlyZWQpCisJCWdmczJfcXVvdGFfdW5sb2NrKG5kaXApOworb3V0X2FsbG9jOgorCWlmIChhbGxvY19yZXF1aXJlZCkKKwkJZ2ZzMl9hbGxvY19wdXQobmRpcCk7CitvdXRfZ3VubG9jazoKKwl3aGlsZSAoeC0tKSB7CisJCWdmczJfZ2xvY2tfZHEoZ2hzICsgeCk7CisJCWdmczJfaG9sZGVyX3VuaW5pdChnaHMgKyB4KTsKKwl9CitvdXRfZ3VubG9ja19yOgorCWlmIChyX2doLmdoX2dsKQorCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmcl9naCk7CitvdXQ6CisJZ2ZzMl9nbG9ja19kcV91bmluaXQoJnJpX2doKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogZ2ZzMl9mb2xsb3dfbGluayAtIEZvbGxvdyBhIHN5bWJvbGljIGxpbmsKKyAqIEBkZW50cnk6IFRoZSBkZW50cnkgb2YgdGhlIGxpbmsKKyAqIEBuZDogRGF0YSB0aGF0IHdlIHBhc3MgdG8gdmZzX2ZvbGxvd19saW5rKCkKKyAqCisgKiBUaGlzIGNhbiBoYW5kbGUgc3ltbGlua3Mgb2YgYW55IHNpemUuCisgKgorICogUmV0dXJuczogMCBvbiBzdWNjZXNzIG9yIGVycm9yIGNvZGUKKyAqLworCitzdGF0aWMgdm9pZCAqZ2ZzMl9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQoreworCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShkZW50cnktPmRfaW5vZGUpOworCXN0cnVjdCBnZnMyX2hvbGRlciBpX2doOworCXN0cnVjdCBidWZmZXJfaGVhZCAqZGliaDsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKwljaGFyICpidWY7CisJaW50IGVycm9yOworCisJZ2ZzMl9ob2xkZXJfaW5pdChpcC0+aV9nbCwgTE1fU1RfU0hBUkVELCAwLCAmaV9naCk7CisJZXJyb3IgPSBnZnMyX2dsb2NrX25xKCZpX2doKTsKKwlpZiAoZXJyb3IpIHsKKwkJZ2ZzMl9ob2xkZXJfdW5pbml0KCZpX2doKTsKKwkJbmRfc2V0X2xpbmsobmQsIEVSUl9QVFIoZXJyb3IpKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJc2l6ZSA9ICh1bnNpZ25lZCBpbnQpaV9zaXplX3JlYWQoJmlwLT5pX2lub2RlKTsKKwlpZiAoc2l6ZSA9PSAwKSB7CisJCWdmczJfY29uc2lzdF9pbm9kZShpcCk7CisJCWJ1ZiA9IEVSUl9QVFIoLUVJTyk7CisJCWdvdG8gb3V0OworCX0KKworCWVycm9yID0gZ2ZzMl9tZXRhX2lub2RlX2J1ZmZlcihpcCwgJmRpYmgpOworCWlmIChlcnJvcikgeworCQlidWYgPSBFUlJfUFRSKGVycm9yKTsKKwkJZ290byBvdXQ7CisJfQorCisJYnVmID0ga3phbGxvYyhzaXplICsgMSwgR0ZQX05PRlMpOworCWlmICghYnVmKQorCQlidWYgPSBFUlJfUFRSKC1FTk9NRU0pOworCWVsc2UKKwkJbWVtY3B5KGJ1ZiwgZGliaC0+Yl9kYXRhICsgc2l6ZW9mKHN0cnVjdCBnZnMyX2Rpbm9kZSksIHNpemUpOworCWJyZWxzZShkaWJoKTsKK291dDoKKwlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmaV9naCk7CisJbmRfc2V0X2xpbmsobmQsIGJ1Zik7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGdmczJfcHV0X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgdm9pZCAqcCkKK3sKKwljaGFyICpzID0gbmRfZ2V0X2xpbmsobmQpOworCWlmICghSVNfRVJSKHMpKQorCQlrZnJlZShzKTsKK30KKworLyoqCisgKiBnZnMyX3Blcm1pc3Npb24gLQorICogQGlub2RlOiBUaGUgaW5vZGUKKyAqIEBtYXNrOiBUaGUgbWFzayB0byBiZSB0ZXN0ZWQKKyAqIEBmbGFnczogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBpcyBhbiBSQ1UgcGF0aCB3YWxrIG9yIG5vdAorICoKKyAqIFRoaXMgbWF5IGJlIGNhbGxlZCBmcm9tIHRoZSBWRlMgZGlyZWN0bHksIG9yIGZyb20gd2l0aGluIEdGUzIgd2l0aCB0aGUKKyAqIGlub2RlIGxvY2tlZCwgc28gd2UgbG9vayB0byBzZWUgaWYgdGhlIGdsb2NrIGlzIGFscmVhZHkgbG9ja2VkIGFuZCBvbmx5CisgKiBsb2NrIHRoZSBnbG9jayBpZiBpdHMgbm90IGFscmVhZHkgYmVlbiBkb25lLgorICoKKyAqIFJldHVybnM6IGVycm5vCisgKi8KKworaW50IGdmczJfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBnZnMyX2lub2RlICppcDsKKwlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgaV9naDsKKwlpbnQgZXJyb3I7CisJaW50IHVubG9jayA9IDA7CisKKworCWlwID0gR0ZTMl9JKGlub2RlKTsKKwlpZiAoZ2ZzMl9nbG9ja19pc19sb2NrZWRfYnlfbWUoaXAtPmlfZ2wpID09IE5VTEwpIHsKKwkJaWYgKGZsYWdzICYgSVBFUk1fRkxBR19SQ1UpCisJCQlyZXR1cm4gLUVDSElMRDsKKwkJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoaXAtPmlfZ2wsIExNX1NUX1NIQVJFRCwgTE1fRkxBR19BTlksICZpX2doKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOworCQl1bmxvY2sgPSAxOworCX0KKworCWlmICgobWFzayAmIE1BWV9XUklURSkgJiYgSVNfSU1NVVRBQkxFKGlub2RlKSkKKwkJZXJyb3IgPSAtRUFDQ0VTOworCWVsc2UKKwkJZXJyb3IgPSBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssIGZsYWdzLCBnZnMyX2NoZWNrX2FjbCk7CisJaWYgKHVubG9jaykKKwkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmlfZ2gpOworCisJcmV0dXJuIGVycm9yOwogfQogCiBzdGF0aWMgaW50IF9fZ2ZzMl9zZXRhdHRyX3NpbXBsZShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBpYXR0ciAqYXR0cikKQEAgLTkyOCw4ICsxNTk0LDYgQEAKICAqIEBpcDoKICAqIEBhdHRyOgogICoKLSAqIENhbGxlZCB3aXRoIGEgcmVmZXJlbmNlIG9uIHRoZSB2bm9kZS4KLSAqCiAgKiBSZXR1cm5zOiBlcnJubwogICovCiAKQEAgLTk0OSw2MCArMTYxMywyODAgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXZvaWQgZ2ZzMl9kaW5vZGVfb3V0KGNvbnN0IHN0cnVjdCBnZnMyX2lub2RlICppcCwgdm9pZCAqYnVmKQorc3RhdGljIGludCBzZXRhdHRyX2Nob3duKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpYXR0ciAqYXR0cikKIHsKLQlzdHJ1Y3QgZ2ZzMl9kaW5vZGUgKnN0ciA9IGJ1ZjsKKwlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koaW5vZGUpOworCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQihpbm9kZSk7CisJdTMyIG91aWQsIG9naWQsIG51aWQsIG5naWQ7CisJaW50IGVycm9yOwogCi0Jc3RyLT5kaV9oZWFkZXIubWhfbWFnaWMgPSBjcHVfdG9fYmUzMihHRlMyX01BR0lDKTsKLQlzdHItPmRpX2hlYWRlci5taF90eXBlID0gY3B1X3RvX2JlMzIoR0ZTMl9NRVRBVFlQRV9ESSk7Ci0Jc3RyLT5kaV9oZWFkZXIubWhfZm9ybWF0ID0gY3B1X3RvX2JlMzIoR0ZTMl9GT1JNQVRfREkpOwotCXN0ci0+ZGlfbnVtLm5vX2FkZHIgPSBjcHVfdG9fYmU2NChpcC0+aV9ub19hZGRyKTsKLQlzdHItPmRpX251bS5ub19mb3JtYWxfaW5vID0gY3B1X3RvX2JlNjQoaXAtPmlfbm9fZm9ybWFsX2lubyk7Ci0Jc3RyLT5kaV9tb2RlID0gY3B1X3RvX2JlMzIoaXAtPmlfaW5vZGUuaV9tb2RlKTsKLQlzdHItPmRpX3VpZCA9IGNwdV90b19iZTMyKGlwLT5pX2lub2RlLmlfdWlkKTsKLQlzdHItPmRpX2dpZCA9IGNwdV90b19iZTMyKGlwLT5pX2lub2RlLmlfZ2lkKTsKLQlzdHItPmRpX25saW5rID0gY3B1X3RvX2JlMzIoaXAtPmlfaW5vZGUuaV9ubGluayk7Ci0Jc3RyLT5kaV9zaXplID0gY3B1X3RvX2JlNjQoaV9zaXplX3JlYWQoJmlwLT5pX2lub2RlKSk7Ci0Jc3RyLT5kaV9ibG9ja3MgPSBjcHVfdG9fYmU2NChnZnMyX2dldF9pbm9kZV9ibG9ja3MoJmlwLT5pX2lub2RlKSk7Ci0Jc3RyLT5kaV9hdGltZSA9IGNwdV90b19iZTY0KGlwLT5pX2lub2RlLmlfYXRpbWUudHZfc2VjKTsKLQlzdHItPmRpX210aW1lID0gY3B1X3RvX2JlNjQoaXAtPmlfaW5vZGUuaV9tdGltZS50dl9zZWMpOwotCXN0ci0+ZGlfY3RpbWUgPSBjcHVfdG9fYmU2NChpcC0+aV9pbm9kZS5pX2N0aW1lLnR2X3NlYyk7CisJb3VpZCA9IGlub2RlLT5pX3VpZDsKKwlvZ2lkID0gaW5vZGUtPmlfZ2lkOworCW51aWQgPSBhdHRyLT5pYV91aWQ7CisJbmdpZCA9IGF0dHItPmlhX2dpZDsKIAotCXN0ci0+ZGlfZ29hbF9tZXRhID0gY3B1X3RvX2JlNjQoaXAtPmlfZ29hbCk7Ci0Jc3RyLT5kaV9nb2FsX2RhdGEgPSBjcHVfdG9fYmU2NChpcC0+aV9nb2FsKTsKLQlzdHItPmRpX2dlbmVyYXRpb24gPSBjcHVfdG9fYmU2NChpcC0+aV9nZW5lcmF0aW9uKTsKKwlpZiAoIShhdHRyLT5pYV92YWxpZCAmIEFUVFJfVUlEKSB8fCBvdWlkID09IG51aWQpCisJCW91aWQgPSBudWlkID0gTk9fUVVPVEFfQ0hBTkdFOworCWlmICghKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9HSUQpIHx8IG9naWQgPT0gbmdpZCkKKwkJb2dpZCA9IG5naWQgPSBOT19RVU9UQV9DSEFOR0U7CiAKLQlzdHItPmRpX2ZsYWdzID0gY3B1X3RvX2JlMzIoaXAtPmlfZGlza2ZsYWdzKTsKLQlzdHItPmRpX2hlaWdodCA9IGNwdV90b19iZTE2KGlwLT5pX2hlaWdodCk7Ci0Jc3RyLT5kaV9wYXlsb2FkX2Zvcm1hdCA9IGNwdV90b19iZTMyKFNfSVNESVIoaXAtPmlfaW5vZGUuaV9tb2RlKSAmJgotCQkJCQkgICAgICEoaXAtPmlfZGlza2ZsYWdzICYgR0ZTMl9ESUZfRVhIQVNIKSA/Ci0JCQkJCSAgICAgR0ZTMl9GT1JNQVRfREUgOiAwKTsKLQlzdHItPmRpX2RlcHRoID0gY3B1X3RvX2JlMTYoaXAtPmlfZGVwdGgpOwotCXN0ci0+ZGlfZW50cmllcyA9IGNwdV90b19iZTMyKGlwLT5pX2VudHJpZXMpOworCWlmICghZ2ZzMl9hbGxvY19nZXQoaXApKQorCQlyZXR1cm4gLUVOT01FTTsKIAotCXN0ci0+ZGlfZWF0dHIgPSBjcHVfdG9fYmU2NChpcC0+aV9lYXR0cik7Ci0Jc3RyLT5kaV9hdGltZV9uc2VjID0gY3B1X3RvX2JlMzIoaXAtPmlfaW5vZGUuaV9hdGltZS50dl9uc2VjKTsKLQlzdHItPmRpX210aW1lX25zZWMgPSBjcHVfdG9fYmUzMihpcC0+aV9pbm9kZS5pX210aW1lLnR2X25zZWMpOwotCXN0ci0+ZGlfY3RpbWVfbnNlYyA9IGNwdV90b19iZTMyKGlwLT5pX2lub2RlLmlfY3RpbWUudHZfbnNlYyk7CisJZXJyb3IgPSBnZnMyX3F1b3RhX2xvY2soaXAsIG51aWQsIG5naWQpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfYWxsb2M7CisKKwlpZiAob3VpZCAhPSBOT19RVU9UQV9DSEFOR0UgfHwgb2dpZCAhPSBOT19RVU9UQV9DSEFOR0UpIHsKKwkJZXJyb3IgPSBnZnMyX3F1b3RhX2NoZWNrKGlwLCBudWlkLCBuZ2lkKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXRfZ3VubG9ja19xOworCX0KKworCWVycm9yID0gZ2ZzMl90cmFuc19iZWdpbihzZHAsIFJFU19ESU5PREUgKyAyICogUkVTX1FVT1RBLCAwKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X2d1bmxvY2tfcTsKKworCWVycm9yID0gZ2ZzMl9zZXRhdHRyX3NpbXBsZShpcCwgYXR0cik7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9lbmRfdHJhbnM7CisKKwlpZiAob3VpZCAhPSBOT19RVU9UQV9DSEFOR0UgfHwgb2dpZCAhPSBOT19RVU9UQV9DSEFOR0UpIHsKKwkJdTY0IGJsb2NrcyA9IGdmczJfZ2V0X2lub2RlX2Jsb2NrcygmaXAtPmlfaW5vZGUpOworCQlnZnMyX3F1b3RhX2NoYW5nZShpcCwgLWJsb2Nrcywgb3VpZCwgb2dpZCk7CisJCWdmczJfcXVvdGFfY2hhbmdlKGlwLCBibG9ja3MsIG51aWQsIG5naWQpOworCX0KKworb3V0X2VuZF90cmFuczoKKwlnZnMyX3RyYW5zX2VuZChzZHApOworb3V0X2d1bmxvY2tfcToKKwlnZnMyX3F1b3RhX3VubG9jayhpcCk7CitvdXRfYWxsb2M6CisJZ2ZzMl9hbGxvY19wdXQoaXApOworCXJldHVybiBlcnJvcjsKIH0KIAotdm9pZCBnZnMyX2Rpbm9kZV9wcmludChjb25zdCBzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXApCisvKioKKyAqIGdmczJfc2V0YXR0ciAtIENoYW5nZSBhdHRyaWJ1dGVzIG9uIGFuIGlub2RlCisgKiBAZGVudHJ5OiBUaGUgZGVudHJ5IHdoaWNoIGlzIGNoYW5naW5nCisgKiBAYXR0cjogVGhlIHN0cnVjdHVyZSBkZXNjcmliaW5nIHRoZSBjaGFuZ2UKKyAqCisgKiBUaGUgVkZTIGxheWVyIHdhbnRzIHRvIGNoYW5nZSBvbmUgb3IgbW9yZSBvZiBhbiBpbm9kZXMgYXR0cmlidXRlcy4gIFdyaXRlCisgKiB0aGF0IGNoYW5nZSBvdXQgdG8gZGlzay4KKyAqCisgKiBSZXR1cm5zOiBlcnJubworICovCisKK3N0YXRpYyBpbnQgZ2ZzMl9zZXRhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKQogewotCXByaW50ayhLRVJOX0lORk8gIiAgbm9fZm9ybWFsX2lubyA9ICVsbHVcbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaXAtPmlfbm9fZm9ybWFsX2lubyk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiICBub19hZGRyID0gJWxsdVxuIiwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpcC0+aV9ub19hZGRyKTsKLQlwcmludGsoS0VSTl9JTkZPICIgIGlfc2l6ZSA9ICVsbHVcbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaV9zaXplX3JlYWQoJmlwLT5pX2lub2RlKSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiICBibG9ja3MgPSAlbGx1XG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWdmczJfZ2V0X2lub2RlX2Jsb2NrcygmaXAtPmlfaW5vZGUpKTsKLQlwcmludGsoS0VSTl9JTkZPICIgIGlfZ29hbCA9ICVsbHVcbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaXAtPmlfZ29hbCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiICBpX2Rpc2tmbGFncyA9IDB4JS44WFxuIiwgaXAtPmlfZGlza2ZsYWdzKTsKLQlwcmludGsoS0VSTl9JTkZPICIgIGlfaGVpZ2h0ID0gJXVcbiIsIGlwLT5pX2hlaWdodCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiICBpX2RlcHRoID0gJXVcbiIsIGlwLT5pX2RlcHRoKTsKLQlwcmludGsoS0VSTl9JTkZPICIgIGlfZW50cmllcyA9ICV1XG4iLCBpcC0+aV9lbnRyaWVzKTsKLQlwcmludGsoS0VSTl9JTkZPICIgIGlfZWF0dHIgPSAlbGx1XG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWlwLT5pX2VhdHRyKTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7CisJc3RydWN0IGdmczJfaG9sZGVyIGlfZ2g7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoaXAtPmlfZ2wsIExNX1NUX0VYQ0xVU0lWRSwgMCwgJmlfZ2gpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJZXJyb3IgPSAtRVBFUk07CisJaWYgKElTX0lNTVVUQUJMRShpbm9kZSkgfHwgSVNfQVBQRU5EKGlub2RlKSkKKwkJZ290byBvdXQ7CisKKwllcnJvciA9IGlub2RlX2NoYW5nZV9vayhpbm9kZSwgYXR0cik7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dDsKKworCWlmIChhdHRyLT5pYV92YWxpZCAmIEFUVFJfU0laRSkKKwkJZXJyb3IgPSBnZnMyX3NldGF0dHJfc2l6ZShpbm9kZSwgYXR0ci0+aWFfc2l6ZSk7CisJZWxzZSBpZiAoYXR0ci0+aWFfdmFsaWQgJiAoQVRUUl9VSUQgfCBBVFRSX0dJRCkpCisJCWVycm9yID0gc2V0YXR0cl9jaG93bihpbm9kZSwgYXR0cik7CisJZWxzZSBpZiAoKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9NT0RFKSAmJiBJU19QT1NJWEFDTChpbm9kZSkpCisJCWVycm9yID0gZ2ZzMl9hY2xfY2htb2QoaXAsIGF0dHIpOworCWVsc2UKKwkJZXJyb3IgPSBnZnMyX3NldGF0dHJfc2ltcGxlKGlwLCBhdHRyKTsKKworb3V0OgorCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZpX2doKTsKKwlpZiAoIWVycm9yKQorCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKKy8qKgorICogZ2ZzMl9nZXRhdHRyIC0gUmVhZCBvdXQgYW4gaW5vZGUncyBhdHRyaWJ1dGVzCisgKiBAbW50OiBUaGUgdmZzbW91bnQgdGhlIGlub2RlIGlzIGJlaW5nIGFjY2Vzc2VkIGZyb20KKyAqIEBkZW50cnk6IFRoZSBkZW50cnkgdG8gc3RhdAorICogQHN0YXQ6IFRoZSBpbm9kZSdzIHN0YXRzCisgKgorICogVGhpcyBtYXkgYmUgY2FsbGVkIGZyb20gdGhlIFZGUyBkaXJlY3RseSwgb3IgZnJvbSB3aXRoaW4gR0ZTMiB3aXRoIHRoZQorICogaW5vZGUgbG9ja2VkLCBzbyB3ZSBsb29rIHRvIHNlZSBpZiB0aGUgZ2xvY2sgaXMgYWxyZWFkeSBsb2NrZWQgYW5kIG9ubHkKKyAqIGxvY2sgdGhlIGdsb2NrIGlmIGl0cyBub3QgYWxyZWFkeSBiZWVuIGRvbmUuIE5vdGUgdGhhdCBpdHMgdGhlIE5GUworICogcmVhZGRpcnBsdXMgb3BlcmF0aW9uIHdoaWNoIGNhdXNlcyB0aGlzIHRvIGJlIGNhbGxlZCAoZnJvbSBmaWxsZGlyKQorICogd2l0aCB0aGUgZ2xvY2sgYWxyZWFkeSBoZWxkLgorICoKKyAqIFJldHVybnM6IGVycm5vCisgKi8KKworc3RhdGljIGludCBnZnMyX2dldGF0dHIoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCXN0cnVjdCBrc3RhdCAqc3RhdCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7CisJc3RydWN0IGdmczJfaG9sZGVyIGdoOworCWludCBlcnJvcjsKKwlpbnQgdW5sb2NrID0gMDsKKworCWlmIChnZnMyX2dsb2NrX2lzX2xvY2tlZF9ieV9tZShpcC0+aV9nbCkgPT0gTlVMTCkgeworCQllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChpcC0+aV9nbCwgTE1fU1RfU0hBUkVELCBMTV9GTEFHX0FOWSwgJmdoKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOworCQl1bmxvY2sgPSAxOworCX0KKworCWdlbmVyaWNfZmlsbGF0dHIoaW5vZGUsIHN0YXQpOworCWlmICh1bmxvY2spCisJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZnaCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZnMyX3NldHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKKwlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZ2g7CisJaW50IHJldDsKKworCWdmczJfaG9sZGVyX2luaXQoaXAtPmlfZ2wsIExNX1NUX0VYQ0xVU0lWRSwgMCwgJmdoKTsKKwlyZXQgPSBnZnMyX2dsb2NrX25xKCZnaCk7CisJaWYgKHJldCA9PSAwKSB7CisJCXJldCA9IGdlbmVyaWNfc2V0eGF0dHIoZGVudHJ5LCBuYW1lLCBkYXRhLCBzaXplLCBmbGFncyk7CisJCWdmczJfZ2xvY2tfZHEoJmdoKTsKKwl9CisJZ2ZzMl9ob2xkZXJfdW5pbml0KCZnaCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgZ2ZzMl9nZXR4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgIHZvaWQgKmRhdGEsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKKwlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZ2g7CisJaW50IHJldDsKKworCWdmczJfaG9sZGVyX2luaXQoaXAtPmlfZ2wsIExNX1NUX1NIQVJFRCwgTE1fRkxBR19BTlksICZnaCk7CisJcmV0ID0gZ2ZzMl9nbG9ja19ucSgmZ2gpOworCWlmIChyZXQgPT0gMCkgeworCQlyZXQgPSBnZW5lcmljX2dldHhhdHRyKGRlbnRyeSwgbmFtZSwgZGF0YSwgc2l6ZSk7CisJCWdmczJfZ2xvY2tfZHEoJmdoKTsKKwl9CisJZ2ZzMl9ob2xkZXJfdW5pbml0KCZnaCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBnZnMyX3JlbW92ZXhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7CisJc3RydWN0IGdmczJfaG9sZGVyIGdoOworCWludCByZXQ7CisKKwlnZnMyX2hvbGRlcl9pbml0KGlwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsICZnaCk7CisJcmV0ID0gZ2ZzMl9nbG9ja19ucSgmZ2gpOworCWlmIChyZXQgPT0gMCkgeworCQlyZXQgPSBnZW5lcmljX3JlbW92ZXhhdHRyKGRlbnRyeSwgbmFtZSk7CisJCWdmczJfZ2xvY2tfZHEoJmdoKTsKKwl9CisJZ2ZzMl9ob2xkZXJfdW5pbml0KCZnaCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBnZnMyX2ZpZW1hcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmllbWFwX2V4dGVudF9pbmZvICpmaWVpbmZvLAorCQkgICAgICAgdTY0IHN0YXJ0LCB1NjQgbGVuKQoreworCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7CisJc3RydWN0IGdmczJfaG9sZGVyIGdoOworCWludCByZXQ7CisKKwlyZXQgPSBmaWVtYXBfY2hlY2tfZmxhZ3MoZmllaW5mbywgRklFTUFQX0ZMQUdfU1lOQyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKworCXJldCA9IGdmczJfZ2xvY2tfbnFfaW5pdChpcC0+aV9nbCwgTE1fU1RfU0hBUkVELCAwLCAmZ2gpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJaWYgKGdmczJfaXNfc3R1ZmZlZChpcCkpIHsKKwkJdTY0IHBoeXMgPSBpcC0+aV9ub19hZGRyIDw8IGlub2RlLT5pX2Jsa2JpdHM7CisJCXU2NCBzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOworCQl1MzIgZmxhZ3MgPSBGSUVNQVBfRVhURU5UX0xBU1R8RklFTUFQX0VYVEVOVF9OT1RfQUxJR05FRHwKKwkJCSAgICBGSUVNQVBfRVhURU5UX0RBVEFfSU5MSU5FOworCQlwaHlzICs9IHNpemVvZihzdHJ1Y3QgZ2ZzMl9kaW5vZGUpOworCQlwaHlzICs9IHN0YXJ0OworCQlpZiAoc3RhcnQgKyBsZW4gPiBzaXplKQorCQkJbGVuID0gc2l6ZSAtIHN0YXJ0OworCQlpZiAoc3RhcnQgPCBzaXplKQorCQkJcmV0ID0gZmllbWFwX2ZpbGxfbmV4dF9leHRlbnQoZmllaW5mbywgc3RhcnQsIHBoeXMsCisJCQkJCQkgICAgICBsZW4sIGZsYWdzKTsKKwkJaWYgKHJldCA9PSAxKQorCQkJcmV0ID0gMDsKKwl9IGVsc2UgeworCQlyZXQgPSBfX2dlbmVyaWNfYmxvY2tfZmllbWFwKGlub2RlLCBmaWVpbmZvLCBzdGFydCwgbGVuLAorCQkJCQkgICAgIGdmczJfYmxvY2tfbWFwKTsKKwl9CisKKwlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmZ2gpOworb3V0OgorCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK2NvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGdmczJfZmlsZV9pb3BzID0geworCS5wZXJtaXNzaW9uID0gZ2ZzMl9wZXJtaXNzaW9uLAorCS5zZXRhdHRyID0gZ2ZzMl9zZXRhdHRyLAorCS5nZXRhdHRyID0gZ2ZzMl9nZXRhdHRyLAorCS5zZXR4YXR0ciA9IGdmczJfc2V0eGF0dHIsCisJLmdldHhhdHRyID0gZ2ZzMl9nZXR4YXR0ciwKKwkubGlzdHhhdHRyID0gZ2ZzMl9saXN0eGF0dHIsCisJLnJlbW92ZXhhdHRyID0gZ2ZzMl9yZW1vdmV4YXR0ciwKKwkuZmllbWFwID0gZ2ZzMl9maWVtYXAsCit9OworCitjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBnZnMyX2Rpcl9pb3BzID0geworCS5jcmVhdGUgPSBnZnMyX2NyZWF0ZSwKKwkubG9va3VwID0gZ2ZzMl9sb29rdXAsCisJLmxpbmsgPSBnZnMyX2xpbmssCisJLnVubGluayA9IGdmczJfdW5saW5rLAorCS5zeW1saW5rID0gZ2ZzMl9zeW1saW5rLAorCS5ta2RpciA9IGdmczJfbWtkaXIsCisJLnJtZGlyID0gZ2ZzMl91bmxpbmssCisJLm1rbm9kID0gZ2ZzMl9ta25vZCwKKwkucmVuYW1lID0gZ2ZzMl9yZW5hbWUsCisJLnBlcm1pc3Npb24gPSBnZnMyX3Blcm1pc3Npb24sCisJLnNldGF0dHIgPSBnZnMyX3NldGF0dHIsCisJLmdldGF0dHIgPSBnZnMyX2dldGF0dHIsCisJLnNldHhhdHRyID0gZ2ZzMl9zZXR4YXR0ciwKKwkuZ2V0eGF0dHIgPSBnZnMyX2dldHhhdHRyLAorCS5saXN0eGF0dHIgPSBnZnMyX2xpc3R4YXR0ciwKKwkucmVtb3ZleGF0dHIgPSBnZnMyX3JlbW92ZXhhdHRyLAorCS5maWVtYXAgPSBnZnMyX2ZpZW1hcCwKK307CisKK2NvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGdmczJfc3ltbGlua19pb3BzID0geworCS5yZWFkbGluayA9IGdlbmVyaWNfcmVhZGxpbmssCisJLmZvbGxvd19saW5rID0gZ2ZzMl9mb2xsb3dfbGluaywKKwkucHV0X2xpbmsgPSBnZnMyX3B1dF9saW5rLAorCS5wZXJtaXNzaW9uID0gZ2ZzMl9wZXJtaXNzaW9uLAorCS5zZXRhdHRyID0gZ2ZzMl9zZXRhdHRyLAorCS5nZXRhdHRyID0gZ2ZzMl9nZXRhdHRyLAorCS5zZXR4YXR0ciA9IGdmczJfc2V0eGF0dHIsCisJLmdldHhhdHRyID0gZ2ZzMl9nZXR4YXR0ciwKKwkubGlzdHhhdHRyID0gZ2ZzMl9saXN0eGF0dHIsCisJLnJlbW92ZXhhdHRyID0gZ2ZzMl9yZW1vdmV4YXR0ciwKKwkuZmllbWFwID0gZ2ZzMl9maWVtYXAsCit9OworCmRpZmYgLS1naXQgYS9mcy9nZnMyL2lub2RlLmggYi9mcy9nZnMyL2lub2RlLmgKaW5kZXggMDk5Y2EzMC4uMzE2MDYwNyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9pbm9kZS5oCisrKyBiL2ZzL2dmczIvaW5vZGUuaApAQCAtMTAyLDIyICsxMDIsMTYgQEAKIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmdmczJfbG9va3VwX2J5X2ludW0oc3RydWN0IGdmczJfc2JkICpzZHAsIHU2NCBub19hZGRyLAogCQkJCQkgdTY0ICpub19mb3JtYWxfaW5vLAogCQkJCQkgdW5zaWduZWQgaW50IGJsa3R5cGUpOwotZXh0ZXJuIHN0cnVjdCBpbm9kZSAqZ2ZzMl9pbG9va3VwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCBub19hZGRyKTsKK2V4dGVybiBzdHJ1Y3QgaW5vZGUgKmdmczJfaWxvb2t1cChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgbm9fYWRkciwgaW50IG5vbmJsb2NrKTsKIAogZXh0ZXJuIGludCBnZnMyX2lub2RlX3JlZnJlc2goc3RydWN0IGdmczJfaW5vZGUgKmlwKTsKIAotZXh0ZXJuIGludCBnZnMyX2Rpbm9kZV9kZWFsbG9jKHN0cnVjdCBnZnMyX2lub2RlICppbm9kZSk7Ci1leHRlcm4gaW50IGdmczJfY2hhbmdlX25saW5rKHN0cnVjdCBnZnMyX2lub2RlICppcCwgaW50IGRpZmYpOwogZXh0ZXJuIHN0cnVjdCBpbm9kZSAqZ2ZzMl9sb29rdXBpKHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwKIAkJCQkgIGludCBpc19yb290KTsKLWV4dGVybiBzdHJ1Y3QgaW5vZGUgKmdmczJfY3JlYXRlaShzdHJ1Y3QgZ2ZzMl9ob2xkZXIgKmdocywKLQkJCQkgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLAotCQkJCSAgdW5zaWduZWQgaW50IG1vZGUsIGRldl90IGRldik7CiBleHRlcm4gaW50IGdmczJfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgaW50IGZsYWdzKTsKIGV4dGVybiBpbnQgZ2ZzMl9zZXRhdHRyX3NpbXBsZShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBpYXR0ciAqYXR0cik7CiBleHRlcm4gc3RydWN0IGlub2RlICpnZnMyX2xvb2t1cF9zaW1wbGUoc3RydWN0IGlub2RlICpkaXAsIGNvbnN0IGNoYXIgKm5hbWUpOwogZXh0ZXJuIHZvaWQgZ2ZzMl9kaW5vZGVfb3V0KGNvbnN0IHN0cnVjdCBnZnMyX2lub2RlICppcCwgdm9pZCAqYnVmKTsKLWV4dGVybiB2b2lkIGdmczJfZGlub2RlX3ByaW50KGNvbnN0IHN0cnVjdCBnZnMyX2lub2RlICppcCk7CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBnZnMyX2ZpbGVfaW9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBnZnMyX2Rpcl9pb3BzOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb2cuYyBiL2ZzL2dmczIvbG9nLmMKaW5kZXggNWIxMDJjMS4uOTAzMTE1ZiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9sb2cuYworKysgYi9mcy9nZnMyL2xvZy5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9iaW8uaD4KKyNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KIAogI2luY2x1ZGUgImdmczIuaCIKICNpbmNsdWRlICJpbmNvcmUuaCIKQEAgLTgzLDU1ICs4NCw5NyBAQAogLyoqCiAgKiBnZnMyX2FpbDFfc3RhcnRfb25lIC0gU3RhcnQgSS9PIG9uIGEgcGFydCBvZiB0aGUgQUlMCiAgKiBAc2RwOiB0aGUgZmlsZXN5c3RlbQotICogQHRyOiB0aGUgcGFydCBvZiB0aGUgQUlMCisgKiBAd2JjOiBUaGUgd3JpdGViYWNrIGNvbnRyb2wgc3RydWN0dXJlCisgKiBAYWk6IFRoZSBhaWwgc3RydWN0dXJlCiAgKgogICovCiAKLXN0YXRpYyB2b2lkIGdmczJfYWlsMV9zdGFydF9vbmUoc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBnZnMyX2FpbCAqYWkpCitzdGF0aWMgaW50IGdmczJfYWlsMV9zdGFydF9vbmUoc3RydWN0IGdmczJfc2JkICpzZHAsCisJCQkgICAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsCisJCQkgICAgICAgc3RydWN0IGdmczJfYWlsICphaSkKIF9fcmVsZWFzZXMoJnNkcC0+c2RfYWlsX2xvY2spCiBfX2FjcXVpcmVzKCZzZHAtPnNkX2FpbF9sb2NrKQogeworCXN0cnVjdCBnZnMyX2dsb2NrICpnbCA9IE5VTEw7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CiAJc3RydWN0IGdmczJfYnVmZGF0YSAqYmQsICpzOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci0JaW50IHJldHJ5OwogCi0JZG8gewotCQlyZXRyeSA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoYmQsIHMsICZhaS0+YWlfYWlsMV9saXN0LCBiZF9haWxfc3RfbGlzdCkgeworCQliaCA9IGJkLT5iZF9iaDsKIAotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShiZCwgcywgJmFpLT5haV9haWwxX2xpc3QsCi0JCQkJCQkgYmRfYWlsX3N0X2xpc3QpIHsKLQkJCWJoID0gYmQtPmJkX2JoOworCQlnZnMyX2Fzc2VydChzZHAsIGJkLT5iZF9haWwgPT0gYWkpOwogCi0JCQlnZnMyX2Fzc2VydChzZHAsIGJkLT5iZF9haWwgPT0gYWkpOwotCi0JCQlpZiAoIWJ1ZmZlcl9idXN5KGJoKSkgewotCQkJCWlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSkKLQkJCQkJZ2ZzMl9pb19lcnJvcl9iaChzZHAsIGJoKTsKLQkJCQlsaXN0X21vdmUoJmJkLT5iZF9haWxfc3RfbGlzdCwgJmFpLT5haV9haWwyX2xpc3QpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQlpZiAoIWJ1ZmZlcl9kaXJ0eShiaCkpCi0JCQkJY29udGludWU7Ci0KLQkJCWxpc3RfbW92ZSgmYmQtPmJkX2FpbF9zdF9saXN0LCAmYWktPmFpX2FpbDFfbGlzdCk7Ci0KLQkJCWdldF9iaChiaCk7Ci0JCQlzcGluX3VubG9jaygmc2RwLT5zZF9haWxfbG9jayk7Ci0JCQlsb2NrX2J1ZmZlcihiaCk7Ci0JCQlpZiAodGVzdF9jbGVhcl9idWZmZXJfZGlydHkoYmgpKSB7Ci0JCQkJYmgtPmJfZW5kX2lvID0gZW5kX2J1ZmZlcl93cml0ZV9zeW5jOwotCQkJCXN1Ym1pdF9iaChXUklURV9TWU5DLCBiaCk7Ci0JCQl9IGVsc2UgewotCQkJCXVubG9ja19idWZmZXIoYmgpOwotCQkJCWJyZWxzZShiaCk7Ci0JCQl9Ci0JCQlzcGluX2xvY2soJnNkcC0+c2RfYWlsX2xvY2spOwotCi0JCQlyZXRyeSA9IDE7Ci0JCQlicmVhazsKKwkJaWYgKCFidWZmZXJfYnVzeShiaCkpIHsKKwkJCWlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSkKKwkJCQlnZnMyX2lvX2Vycm9yX2JoKHNkcCwgYmgpOworCQkJbGlzdF9tb3ZlKCZiZC0+YmRfYWlsX3N0X2xpc3QsICZhaS0+YWlfYWlsMl9saXN0KTsKKwkJCWNvbnRpbnVlOwogCQl9Ci0JfSB3aGlsZSAocmV0cnkpOworCisJCWlmICghYnVmZmVyX2RpcnR5KGJoKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoZ2wgPT0gYmQtPmJkX2dsKQorCQkJY29udGludWU7CisJCWdsID0gYmQtPmJkX2dsOworCQlsaXN0X21vdmUoJmJkLT5iZF9haWxfc3RfbGlzdCwgJmFpLT5haV9haWwxX2xpc3QpOworCQltYXBwaW5nID0gYmgtPmJfcGFnZS0+bWFwcGluZzsKKwkJaWYgKCFtYXBwaW5nKQorCQkJY29udGludWU7CisJCXNwaW5fdW5sb2NrKCZzZHAtPnNkX2FpbF9sb2NrKTsKKwkJZ2VuZXJpY193cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYyk7CisJCXNwaW5fbG9jaygmc2RwLT5zZF9haWxfbG9jayk7CisJCWlmICh3YmMtPm5yX3RvX3dyaXRlIDw9IDApCisJCQlicmVhazsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworLyoqCisgKiBnZnMyX2FpbDFfZmx1c2ggLSBzdGFydCB3cml0ZWJhY2sgb2Ygc29tZSBhaWwxIGVudHJpZXMgCisgKiBAc2RwOiBUaGUgc3VwZXIgYmxvY2sKKyAqIEB3YmM6IFRoZSB3cml0ZWJhY2sgY29udHJvbCBzdHJ1Y3R1cmUKKyAqCisgKiBXcml0ZXMgYmFjayBzb21lIGFpbDEgZW50cmllcywgYWNjb3JkaW5nIHRvIHRoZSBsaW1pdHMgaW4gdGhlCisgKiB3cml0ZWJhY2sgY29udHJvbCBzdHJ1Y3R1cmUKKyAqLworCit2b2lkIGdmczJfYWlsMV9mbHVzaChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZzZHAtPnNkX2FpbDFfbGlzdDsKKwlzdHJ1Y3QgZ2ZzMl9haWwgKmFpOworCisJdHJhY2VfZ2ZzMl9haWxfZmx1c2goc2RwLCB3YmMsIDEpOworCXNwaW5fbG9jaygmc2RwLT5zZF9haWxfbG9jayk7CityZXN0YXJ0OgorCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShhaSwgaGVhZCwgYWlfbGlzdCkgeworCQlpZiAod2JjLT5ucl90b193cml0ZSA8PSAwKQorCQkJYnJlYWs7CisJCWlmIChnZnMyX2FpbDFfc3RhcnRfb25lKHNkcCwgd2JjLCBhaSkpCisJCQlnb3RvIHJlc3RhcnQ7CisJfQorCXNwaW5fdW5sb2NrKCZzZHAtPnNkX2FpbF9sb2NrKTsKKwl0cmFjZV9nZnMyX2FpbF9mbHVzaChzZHAsIHdiYywgMCk7Cit9CisKKy8qKgorICogZ2ZzMl9haWwxX3N0YXJ0IC0gc3RhcnQgd3JpdGViYWNrIG9mIGFsbCBhaWwxIGVudHJpZXMKKyAqIEBzZHA6IFRoZSBzdXBlcmJsb2NrCisgKi8KKworc3RhdGljIHZvaWQgZ2ZzMl9haWwxX3N0YXJ0KHN0cnVjdCBnZnMyX3NiZCAqc2RwKQoreworCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7CisJCS5zeW5jX21vZGUgPSBXQl9TWU5DX05PTkUsCisJCS5ucl90b193cml0ZSA9IExPTkdfTUFYLAorCQkucmFuZ2Vfc3RhcnQgPSAwLAorCQkucmFuZ2VfZW5kID0gTExPTkdfTUFYLAorCX07CisKKwlyZXR1cm4gZ2ZzMl9haWwxX2ZsdXNoKHNkcCwgJndiYyk7CiB9CiAKIC8qKgpAQCAtMTQxLDcgKzE4NCw3IEBACiAgKgogICovCiAKLXN0YXRpYyBpbnQgZ2ZzMl9haWwxX2VtcHR5X29uZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGdmczJfYWlsICphaSwgaW50IGZsYWdzKQorc3RhdGljIHZvaWQgZ2ZzMl9haWwxX2VtcHR5X29uZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGdmczJfYWlsICphaSkKIHsKIAlzdHJ1Y3QgZ2ZzMl9idWZkYXRhICpiZCwgKnM7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKQEAgLTE0OSw3NiArMTkyLDYzIEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoYmQsIHMsICZhaS0+YWlfYWlsMV9saXN0LAogCQkJCQkgYmRfYWlsX3N0X2xpc3QpIHsKIAkJYmggPSBiZC0+YmRfYmg7Ci0KIAkJZ2ZzMl9hc3NlcnQoc2RwLCBiZC0+YmRfYWlsID09IGFpKTsKLQotCQlpZiAoYnVmZmVyX2J1c3koYmgpKSB7Ci0JCQlpZiAoZmxhZ3MgJiBESU9fQUxMKQotCQkJCWNvbnRpbnVlOwotCQkJZWxzZQotCQkJCWJyZWFrOwotCQl9Ci0KKwkJaWYgKGJ1ZmZlcl9idXN5KGJoKSkKKwkJCWNvbnRpbnVlOwogCQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpCiAJCQlnZnMyX2lvX2Vycm9yX2JoKHNkcCwgYmgpOwotCiAJCWxpc3RfbW92ZSgmYmQtPmJkX2FpbF9zdF9saXN0LCAmYWktPmFpX2FpbDJfbGlzdCk7CiAJfQogCi0JcmV0dXJuIGxpc3RfZW1wdHkoJmFpLT5haV9haWwxX2xpc3QpOwogfQogCi1zdGF0aWMgdm9pZCBnZnMyX2FpbDFfc3RhcnQoc3RydWN0IGdmczJfc2JkICpzZHApCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKLQl1NjQgc3luY19nZW47Ci0Jc3RydWN0IGdmczJfYWlsICphaTsKLQlpbnQgZG9uZSA9IDA7CisvKioKKyAqIGdmczJfYWlsMV9lbXB0eSAtIFRyeSB0byBlbXB0eSB0aGUgYWlsMSBsaXN0cworICogQHNkcDogVGhlIHN1cGVyYmxvY2sKKyAqCisgKiBUcmllcyB0byBlbXB0eSB0aGUgYWlsMSBsaXN0cywgc3RhcnRpbmcgd2l0aCB0aGUgb2xkZXN0IGZpcnN0CisgKi8KIAotCXNwaW5fbG9jaygmc2RwLT5zZF9haWxfbG9jayk7Ci0JaGVhZCA9ICZzZHAtPnNkX2FpbDFfbGlzdDsKLQlpZiAobGlzdF9lbXB0eShoZWFkKSkgewotCQlzcGluX3VubG9jaygmc2RwLT5zZF9haWxfbG9jayk7Ci0JCXJldHVybjsKLQl9Ci0Jc3luY19nZW4gPSBzZHAtPnNkX2FpbF9zeW5jX2dlbisrOwotCi0Jd2hpbGUoIWRvbmUpIHsKLQkJZG9uZSA9IDE7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShhaSwgaGVhZCwgYWlfbGlzdCkgewotCQkJaWYgKGFpLT5haV9zeW5jX2dlbiA+PSBzeW5jX2dlbikKLQkJCQljb250aW51ZTsKLQkJCWFpLT5haV9zeW5jX2dlbiA9IHN5bmNfZ2VuOwotCQkJZ2ZzMl9haWwxX3N0YXJ0X29uZShzZHAsIGFpKTsgLyogVGhpcyBtYXkgZHJvcCBhaWwgbG9jayAqLwotCQkJZG9uZSA9IDA7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXNwaW5fdW5sb2NrKCZzZHAtPnNkX2FpbF9sb2NrKTsKLX0KLQotc3RhdGljIGludCBnZnMyX2FpbDFfZW1wdHkoc3RydWN0IGdmczJfc2JkICpzZHAsIGludCBmbGFncykKK3N0YXRpYyBpbnQgZ2ZzMl9haWwxX2VtcHR5KHN0cnVjdCBnZnMyX3NiZCAqc2RwKQogewogCXN0cnVjdCBnZnMyX2FpbCAqYWksICpzOwogCWludCByZXQ7CiAKIAlzcGluX2xvY2soJnNkcC0+c2RfYWlsX2xvY2spOwotCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoYWksIHMsICZzZHAtPnNkX2FpbDFfbGlzdCwgYWlfbGlzdCkgewotCQlpZiAoZ2ZzMl9haWwxX2VtcHR5X29uZShzZHAsIGFpLCBmbGFncykpCisJCWdmczJfYWlsMV9lbXB0eV9vbmUoc2RwLCBhaSk7CisJCWlmIChsaXN0X2VtcHR5KCZhaS0+YWlfYWlsMV9saXN0KSkKIAkJCWxpc3RfbW92ZSgmYWktPmFpX2xpc3QsICZzZHAtPnNkX2FpbDJfbGlzdCk7Ci0JCWVsc2UgaWYgKCEoZmxhZ3MgJiBESU9fQUxMKSkKKwkJZWxzZQogCQkJYnJlYWs7CiAJfQotCiAJcmV0ID0gbGlzdF9lbXB0eSgmc2RwLT5zZF9haWwxX2xpc3QpOwotCiAJc3Bpbl91bmxvY2soJnNkcC0+c2RfYWlsX2xvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgZ2ZzMl9haWwxX3dhaXQoc3RydWN0IGdmczJfc2JkICpzZHApCit7CisJc3RydWN0IGdmczJfYWlsICphaTsKKwlzdHJ1Y3QgZ2ZzMl9idWZkYXRhICpiZDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOworCisJc3Bpbl9sb2NrKCZzZHAtPnNkX2FpbF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoYWksICZzZHAtPnNkX2FpbDFfbGlzdCwgYWlfbGlzdCkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJkLCAmYWktPmFpX2FpbDFfbGlzdCwgYmRfYWlsX3N0X2xpc3QpIHsKKwkJCWJoID0gYmQtPmJkX2JoOworCQkJaWYgKCFidWZmZXJfbG9ja2VkKGJoKSkKKwkJCQljb250aW51ZTsKKwkJCWdldF9iaChiaCk7CisJCQlzcGluX3VubG9jaygmc2RwLT5zZF9haWxfbG9jayk7CisJCQl3YWl0X29uX2J1ZmZlcihiaCk7CisJCQlicmVsc2UoYmgpOworCQkJcmV0dXJuOworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZzZHAtPnNkX2FpbF9sb2NrKTsKK30KIAogLyoqCiAgKiBnZnMyX2FpbDJfZW1wdHlfb25lIC0gQ2hlY2sgd2hldGhlciBvciBub3QgYSB0cmFucyBpbiB0aGUgQUlMIGhhcyBiZWVuIHN5bmNlZApAQCAtNTc0LDcgKzYwNCw3IEBACiAJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7CiAJY2xlYXJfYnVmZmVyX2RpcnR5KGJoKTsKIAotCWdmczJfYWlsMV9lbXB0eShzZHAsIDApOworCWdmczJfYWlsMV9lbXB0eShzZHApOwogCXRhaWwgPSBjdXJyZW50X3RhaWwoc2RwKTsKIAogCWxoID0gKHN0cnVjdCBnZnMyX2xvZ19oZWFkZXIgKiliaC0+Yl9kYXRhOwpAQCAtODY5LDkgKzg5OSw5IEBACiAJZ2ZzMl9sb2dfZmx1c2goc2RwLCBOVUxMKTsKIAlmb3IgKDs7KSB7CiAJCWdmczJfYWlsMV9zdGFydChzZHApOwotCQlpZiAoZ2ZzMl9haWwxX2VtcHR5KHNkcCwgRElPX0FMTCkpCisJCWdmczJfYWlsMV93YWl0KHNkcCk7CisJCWlmIChnZnMyX2FpbDFfZW1wdHkoc2RwKSkKIAkJCWJyZWFrOwotCQltc2xlZXAoMTApOwogCX0KIH0KIApAQCAtOTA1LDIwICs5MzUsMjAgQEAKIAogCQlwcmVmbHVzaCA9IGF0b21pY19yZWFkKCZzZHAtPnNkX2xvZ19waW5uZWQpOwogCQlpZiAoZ2ZzMl9qcm5sX2ZsdXNoX3JlcWQoc2RwKSB8fCB0ID09IDApIHsKLQkJCWdmczJfYWlsMV9lbXB0eShzZHAsIERJT19BTEwpOworCQkJZ2ZzMl9haWwxX2VtcHR5KHNkcCk7CiAJCQlnZnMyX2xvZ19mbHVzaChzZHAsIE5VTEwpOwotCQkJZ2ZzMl9haWwxX2VtcHR5KHNkcCwgRElPX0FMTCk7CiAJCX0KIAogCQlpZiAoZ2ZzMl9haWxfZmx1c2hfcmVxZChzZHApKSB7CiAJCQlnZnMyX2FpbDFfc3RhcnQoc2RwKTsKLQkJCWlvX3NjaGVkdWxlKCk7Ci0JCQlnZnMyX2FpbDFfZW1wdHkoc2RwLCAwKTsKKwkJCWdmczJfYWlsMV93YWl0KHNkcCk7CisJCQlnZnMyX2FpbDFfZW1wdHkoc2RwKTsKIAkJCWdmczJfbG9nX2ZsdXNoKHNkcCwgTlVMTCk7Ci0JCQlnZnMyX2FpbDFfZW1wdHkoc2RwLCBESU9fQUxMKTsKIAkJfQogCi0JCXdha2VfdXAoJnNkcC0+c2RfbG9nX3dhaXRxKTsKKwkJaWYgKCFnZnMyX2FpbF9mbHVzaF9yZXFkKHNkcCkpCisJCQl3YWtlX3VwKCZzZHAtPnNkX2xvZ193YWl0cSk7CisKIAkJdCA9IGdmczJfdHVuZV9nZXQoc2RwLCBndF9sb2dkX3NlY3MpICogSFo7CiAJCWlmIChmcmVlemluZyhjdXJyZW50KSkKIAkJCXJlZnJpZ2VyYXRvcigpOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb2cuaCBiL2ZzL2dmczIvbG9nLmgKaW5kZXggMGQwMDdmOS4uYWIwNjIxNiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9sb2cuaAorKysgYi9mcy9nZnMyL2xvZy5oCkBAIC0xMiw2ICsxMiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KICNpbmNsdWRlICJpbmNvcmUuaCIKIAogLyoqCkBAIC01OSw2ICs2MCw3IEBACiBleHRlcm4gdm9pZCBnZnMyX2xvZ19mbHVzaChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGdmczJfZ2xvY2sgKmdsKTsKIGV4dGVybiB2b2lkIGdmczJfbG9nX2NvbW1pdChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGdmczJfdHJhbnMgKnRyYW5zKTsKIGV4dGVybiB2b2lkIGdmczJfcmVtb3ZlX2Zyb21fYWlsKHN0cnVjdCBnZnMyX2J1ZmRhdGEgKmJkKTsKK2V4dGVybiB2b2lkIGdmczJfYWlsMV9mbHVzaChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOwogCiBleHRlcm4gdm9pZCBnZnMyX2xvZ19zaHV0ZG93bihzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CiBleHRlcm4gdm9pZCBnZnMyX21ldGFfc3luY2ZzKHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9wcy5jIGIvZnMvZ2ZzMi9sb3BzLmMKaW5kZXggNTFkMjdmMC4uMDViYmIxMiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9sb3BzLmMKKysrIGIvZnMvZ2ZzMi9sb3BzLmMKQEAgLTQwLDcgKzQwLDcgQEAKIHsKIAlzdHJ1Y3QgZ2ZzMl9idWZkYXRhICpiZDsKIAotCWdmczJfYXNzZXJ0X3dpdGhkcmF3KHNkcCwgdGVzdF9iaXQoU0RGX0pPVVJOQUxfTElWRSwgJnNkcC0+c2RfZmxhZ3MpKTsKKwlCVUdfT04oIWN1cnJlbnQtPmpvdXJuYWxfaW5mbyk7CiAKIAljbGVhcl9idWZmZXJfZGlydHkoYmgpOwogCWlmICh0ZXN0X3NldF9idWZmZXJfcGlubmVkKGJoKSkKQEAgLTY1LDYgKzY1LDcgQEAKICAqIEBzZHA6IHRoZSBmaWxlc3lzdGVtIHRoZSBidWZmZXIgYmVsb25ncyB0bwogICogQGJoOiBUaGUgYnVmZmVyIHRvIHVucGluCiAgKiBAYWk6CisgKiBAZmxhZ3M6IFRoZSBpbm9kZSBkaXJ0eSBmbGFncwogICoKICAqLwogCkBAIC03MywxMCArNzQsOCBAQAogewogCXN0cnVjdCBnZnMyX2J1ZmRhdGEgKmJkID0gYmgtPmJfcHJpdmF0ZTsKIAotCWdmczJfYXNzZXJ0X3dpdGhkcmF3KHNkcCwgYnVmZmVyX3VwdG9kYXRlKGJoKSk7Ci0KLQlpZiAoIWJ1ZmZlcl9waW5uZWQoYmgpKQotCQlnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsIDApOworCUJVR19PTighYnVmZmVyX3VwdG9kYXRlKGJoKSk7CisJQlVHX09OKCFidWZmZXJfcGlubmVkKGJoKSk7CiAKIAlsb2NrX2J1ZmZlcihiaCk7CiAJbWFya19idWZmZXJfZGlydHkoYmgpOwpAQCAtOTUsOCArOTQsNyBAQAogCWxpc3RfYWRkKCZiZC0+YmRfYWlsX3N0X2xpc3QsICZhaS0+YWlfYWlsMV9saXN0KTsKIAlzcGluX3VubG9jaygmc2RwLT5zZF9haWxfbG9jayk7CiAKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEdMRl9MRkxVU0gsICZiZC0+YmRfZ2wtPmdsX2ZsYWdzKSkKLQkJZ2ZzMl9nbG9ja19zY2hlZHVsZV9mb3JfcmVjbGFpbShiZC0+YmRfZ2wpOworCWNsZWFyX2JpdChHTEZfTEZMVVNILCAmYmQtPmJkX2dsLT5nbF9mbGFncyk7CiAJdHJhY2VfZ2ZzMl9waW4oYmQsIDApOwogCXVubG9ja19idWZmZXIoYmgpOwogCWF0b21pY19kZWMoJnNkcC0+c2RfbG9nX3Bpbm5lZCk7CkBAIC0zMjIsMTIgKzMyMCwxNiBAQAogCiBzdGF0aWMgdm9pZCByZXZva2VfbG9fYWRkKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl9sb2dfZWxlbWVudCAqbGUpCiB7CisJc3RydWN0IGdmczJfYnVmZGF0YSAqYmQgPSBjb250YWluZXJfb2YobGUsIHN0cnVjdCBnZnMyX2J1ZmRhdGEsIGJkX2xlKTsKKwlzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wgPSBiZC0+YmRfZ2w7CiAJc3RydWN0IGdmczJfdHJhbnMgKnRyOwogCiAJdHIgPSBjdXJyZW50LT5qb3VybmFsX2luZm87CiAJdHItPnRyX3RvdWNoZWQgPSAxOwogCXRyLT50cl9udW1fcmV2b2tlKys7CiAJc2RwLT5zZF9sb2dfbnVtX3Jldm9rZSsrOworCWF0b21pY19pbmMoJmdsLT5nbF9yZXZva2VzKTsKKwlzZXRfYml0KEdMRl9MRkxVU0gsICZnbC0+Z2xfZmxhZ3MpOwogCWxpc3RfYWRkKCZsZS0+bGVfbGlzdCwgJnNkcC0+c2RfbG9nX2xlX3Jldm9rZSk7CiB9CiAKQEAgLTM1MCw5ICszNTIsNyBAQAogCWxkLT5sZF9kYXRhMSA9IGNwdV90b19iZTMyKHNkcC0+c2RfbG9nX251bV9yZXZva2UpOwogCW9mZnNldCA9IHNpemVvZihzdHJ1Y3QgZ2ZzMl9sb2dfZGVzY3JpcHRvcik7CiAKLQl3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKLQkJYmQgPSBsaXN0X2VudHJ5KGhlYWQtPm5leHQsIHN0cnVjdCBnZnMyX2J1ZmRhdGEsIGJkX2xlLmxlX2xpc3QpOwotCQlsaXN0X2RlbF9pbml0KCZiZC0+YmRfbGUubGVfbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShiZCwgaGVhZCwgYmRfbGUubGVfbGlzdCkgewogCQlzZHAtPnNkX2xvZ19udW1fcmV2b2tlLS07CiAKIAkJaWYgKG9mZnNldCArIHNpemVvZih1NjQpID4gc2RwLT5zZF9zYi5zYl9ic2l6ZSkgewpAQCAtMzY3LDggKzM2Nyw2IEBACiAJCX0KIAogCQkqKF9fYmU2NCAqKShiaC0+Yl9kYXRhICsgb2Zmc2V0KSA9IGNwdV90b19iZTY0KGJkLT5iZF9ibGtubyk7Ci0JCWttZW1fY2FjaGVfZnJlZShnZnMyX2J1ZmRhdGFfY2FjaGVwLCBiZCk7Ci0KIAkJb2Zmc2V0ICs9IHNpemVvZih1NjQpOwogCX0KIAlnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsICFzZHAtPnNkX2xvZ19udW1fcmV2b2tlKTsKQEAgLTM3Niw2ICszNzQsMjIgQEAKIAlzdWJtaXRfYmgoV1JJVEVfU1lOQywgYmgpOwogfQogCitzdGF0aWMgdm9pZCByZXZva2VfbG9fYWZ0ZXJfY29tbWl0KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl9haWwgKmFpKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSAmc2RwLT5zZF9sb2dfbGVfcmV2b2tlOworCXN0cnVjdCBnZnMyX2J1ZmRhdGEgKmJkOworCXN0cnVjdCBnZnMyX2dsb2NrICpnbDsKKworCXdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkgeworCQliZCA9IGxpc3RfZW50cnkoaGVhZC0+bmV4dCwgc3RydWN0IGdmczJfYnVmZGF0YSwgYmRfbGUubGVfbGlzdCk7CisJCWxpc3RfZGVsX2luaXQoJmJkLT5iZF9sZS5sZV9saXN0KTsKKwkJZ2wgPSBiZC0+YmRfZ2w7CisJCWF0b21pY19kZWMoJmdsLT5nbF9yZXZva2VzKTsKKwkJY2xlYXJfYml0KEdMRl9MRkxVU0gsICZnbC0+Z2xfZmxhZ3MpOworCQlrbWVtX2NhY2hlX2ZyZWUoZ2ZzMl9idWZkYXRhX2NhY2hlcCwgYmQpOworCX0KK30KKwogc3RhdGljIHZvaWQgcmV2b2tlX2xvX2JlZm9yZV9zY2FuKHN0cnVjdCBnZnMyX2pkZXNjICpqZCwKIAkJCQkgIHN0cnVjdCBnZnMyX2xvZ19oZWFkZXJfaG9zdCAqaGVhZCwgaW50IHBhc3MpCiB7CkBAIC03NDksNiArNzYzLDcgQEAKIGNvbnN0IHN0cnVjdCBnZnMyX2xvZ19vcGVyYXRpb25zIGdmczJfcmV2b2tlX2xvcHMgPSB7CiAJLmxvX2FkZCA9IHJldm9rZV9sb19hZGQsCiAJLmxvX2JlZm9yZV9jb21taXQgPSByZXZva2VfbG9fYmVmb3JlX2NvbW1pdCwKKwkubG9fYWZ0ZXJfY29tbWl0ID0gcmV2b2tlX2xvX2FmdGVyX2NvbW1pdCwKIAkubG9fYmVmb3JlX3NjYW4gPSByZXZva2VfbG9fYmVmb3JlX3NjYW4sCiAJLmxvX3NjYW5fZWxlbWVudHMgPSByZXZva2VfbG9fc2Nhbl9lbGVtZW50cywKIAkubG9fYWZ0ZXJfc2NhbiA9IHJldm9rZV9sb19hZnRlcl9zY2FuLApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9tYWluLmMgYi9mcy9nZnMyL21haW4uYwppbmRleCA4ODhhNWY1Li5jZmEzMjdkIDEwMDY0NAotLS0gYS9mcy9nZnMyL21haW4uYworKysgYi9mcy9nZnMyL21haW4uYwpAQCAtNTMsNiArNTMsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZnbC0+Z2xfbHJ1KTsKIAlJTklUX0xJU1RfSEVBRCgmZ2wtPmdsX2FpbF9saXN0KTsKIAlhdG9taWNfc2V0KCZnbC0+Z2xfYWlsX2NvdW50LCAwKTsKKwlhdG9taWNfc2V0KCZnbC0+Z2xfcmV2b2tlcywgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIGdmczJfaW5pdF9nbF9hc3BhY2Vfb25jZSh2b2lkICpmb28pCmRpZmYgLS1naXQgYS9mcy9nZnMyL21ldGFfaW8uYyBiL2ZzL2dmczIvbWV0YV9pby5jCmluZGV4IDY3NTM0OWIuLjc0NzIzOGMgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvbWV0YV9pby5jCisrKyBiL2ZzL2dmczIvbWV0YV9pby5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAicmdycC5oIgogI2luY2x1ZGUgInRyYW5zLmgiCiAjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgInRyYWNlX2dmczIuaCIKIAogc3RhdGljIGludCBnZnMyX2FzcGFjZV93cml0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogewpAQCAtMzEwLDYgKzMxMSw3IEBACiAJc3RydWN0IGdmczJfYnVmZGF0YSAqYmQgPSBiaC0+Yl9wcml2YXRlOwogCiAJaWYgKHRlc3RfY2xlYXJfYnVmZmVyX3Bpbm5lZChiaCkpIHsKKwkJdHJhY2VfZ2ZzMl9waW4oYmQsIDApOwogCQlhdG9taWNfZGVjKCZzZHAtPnNkX2xvZ19waW5uZWQpOwogCQlsaXN0X2RlbF9pbml0KCZiZC0+YmRfbGUubGVfbGlzdCk7CiAJCWlmIChtZXRhKSB7CmRpZmYgLS1naXQgYS9mcy9nZnMyL21ldGFfaW8uaCBiL2ZzL2dmczIvbWV0YV9pby5oCmluZGV4IDZhMWQ5YmEuLjIyYzUyNjUgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvbWV0YV9pby5oCisrKyBiL2ZzL2dmczIvbWV0YV9pby5oCkBAIC03Nyw4ICs3Nyw2IEBACiAKICNkZWZpbmUgYnVmZmVyX2J1c3koYmgpIFwKICgoYmgpLT5iX3N0YXRlICYgKCgxdWwgPDwgQkhfRGlydHkpIHwgKDF1bCA8PCBCSF9Mb2NrKSB8ICgxdWwgPDwgQkhfUGlubmVkKSkpCi0jZGVmaW5lIGJ1ZmZlcl9pbl9pbyhiaCkgXAotKChiaCktPmJfc3RhdGUgJiAoKDF1bCA8PCBCSF9EaXJ0eSkgfCAoMXVsIDw8IEJIX0xvY2spKSkKIAogI2VuZGlmIC8qIF9fRElPX0RPVF9IX18gKi8KIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMgYi9mcy9nZnMyL29wc19mc3R5cGUuYwppbmRleCBkM2M2OWViLi44YWM5YWUxIDEwMDY0NAotLS0gYS9mcy9nZnMyL29wc19mc3R5cGUuYworKysgYi9mcy9nZnMyL29wc19mc3R5cGUuYwpAQCAtMTI2LDggKzEyNiwxMCBAQAogICogY2hhbmdlZC4KICAqLwogCi1zdGF0aWMgaW50IGdmczJfY2hlY2tfc2Ioc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBnZnMyX3NiX2hvc3QgKnNiLCBpbnQgc2lsZW50KQorc3RhdGljIGludCBnZnMyX2NoZWNrX3NiKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBpbnQgc2lsZW50KQogeworCXN0cnVjdCBnZnMyX3NiX2hvc3QgKnNiID0gJnNkcC0+c2Rfc2I7CisKIAlpZiAoc2ItPnNiX21hZ2ljICE9IEdGUzJfTUFHSUMgfHwKIAkgICAgc2ItPnNiX3R5cGUgIT0gR0ZTMl9NRVRBVFlQRV9TQikgewogCQlpZiAoIXNpbGVudCkKQEAgLTE1Nyw4ICsxNTksMTAgQEAKIAl1bmxvY2tfcGFnZShwYWdlKTsKIH0KIAotc3RhdGljIHZvaWQgZ2ZzMl9zYl9pbihzdHJ1Y3QgZ2ZzMl9zYl9ob3N0ICpzYiwgY29uc3Qgdm9pZCAqYnVmKQorc3RhdGljIHZvaWQgZ2ZzMl9zYl9pbihzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY29uc3Qgdm9pZCAqYnVmKQogeworCXN0cnVjdCBnZnMyX3NiX2hvc3QgKnNiID0gJnNkcC0+c2Rfc2I7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzID0gc2RwLT5zZF92ZnM7CiAJY29uc3Qgc3RydWN0IGdmczJfc2IgKnN0ciA9IGJ1ZjsKIAogCXNiLT5zYl9tYWdpYyA9IGJlMzJfdG9fY3B1KHN0ci0+c2JfaGVhZGVyLm1oX21hZ2ljKTsKQEAgLTE3NSw3ICsxNzksNyBAQAogCiAJbWVtY3B5KHNiLT5zYl9sb2NrcHJvdG8sIHN0ci0+c2JfbG9ja3Byb3RvLCBHRlMyX0xPQ0tOQU1FX0xFTik7CiAJbWVtY3B5KHNiLT5zYl9sb2NrdGFibGUsIHN0ci0+c2JfbG9ja3RhYmxlLCBHRlMyX0xPQ0tOQU1FX0xFTik7Ci0JbWVtY3B5KHNiLT5zYl91dWlkLCBzdHItPnNiX3V1aWQsIDE2KTsKKwltZW1jcHkocy0+c191dWlkLCBzdHItPnNiX3V1aWQsIDE2KTsKIH0KIAogLyoqCkBAIC0xOTcsNyArMjAxLDcgQEAKICAqIFJldHVybnM6IDAgb24gc3VjY2VzcyBvciBlcnJvcgogICovCiAKLXN0YXRpYyBpbnQgZ2ZzMl9yZWFkX3N1cGVyKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzZWN0b3JfdCBzZWN0b3IpCitzdGF0aWMgaW50IGdmczJfcmVhZF9zdXBlcihzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgc2lsZW50KQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBzZHAtPnNkX3ZmczsKIAlzdHJ1Y3QgZ2ZzMl9zYiAqcDsKQEAgLTIyNywxMCArMjMxLDEwIEBACiAJCXJldHVybiAtRUlPOwogCX0KIAlwID0ga21hcChwYWdlKTsKLQlnZnMyX3NiX2luKCZzZHAtPnNkX3NiLCBwKTsKKwlnZnMyX3NiX2luKHNkcCwgcCk7CiAJa3VubWFwKHBhZ2UpOwogCV9fZnJlZV9wYWdlKHBhZ2UpOwotCXJldHVybiAwOworCXJldHVybiBnZnMyX2NoZWNrX3NiKHNkcCwgc2lsZW50KTsKIH0KIAogLyoqCkBAIC0yNDcsMTcgKzI1MSwxMyBAQAogCXVuc2lnbmVkIGludCB4OwogCWludCBlcnJvcjsKIAotCWVycm9yID0gZ2ZzMl9yZWFkX3N1cGVyKHNkcCwgR0ZTMl9TQl9BRERSID4+IHNkcC0+c2RfZnNiMmJiX3NoaWZ0KTsKKwllcnJvciA9IGdmczJfcmVhZF9zdXBlcihzZHAsIEdGUzJfU0JfQUREUiA+PiBzZHAtPnNkX2ZzYjJiYl9zaGlmdCwgc2lsZW50KTsKIAlpZiAoZXJyb3IpIHsKIAkJaWYgKCFzaWxlbnQpCiAJCQlmc19lcnIoc2RwLCAiY2FuJ3QgcmVhZCBzdXBlcmJsb2NrXG4iKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KIAotCWVycm9yID0gZ2ZzMl9jaGVja19zYihzZHAsICZzZHAtPnNkX3NiLCBzaWxlbnQpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCiAJc2RwLT5zZF9mc2IyYmJfc2hpZnQgPSBzZHAtPnNkX3NiLnNiX2JzaXplX3NoaWZ0IC0KIAkJCSAgICAgICBHRlMyX0JBU0lDX0JMT0NLX1NISUZUOwogCXNkcC0+c2RfZnNiMmJiID0gMSA8PCBzZHAtPnNkX2ZzYjJiYl9zaGlmdDsKQEAgLTM0MCwxNCArMzQwLDEwIEBACiAJLyogIFRyeSB0byBhdXRvZGV0ZWN0ICAqLwogCiAJaWYgKCFwcm90b1swXSB8fCAhdGFibGVbMF0pIHsKLQkJZXJyb3IgPSBnZnMyX3JlYWRfc3VwZXIoc2RwLCBHRlMyX1NCX0FERFIgPj4gc2RwLT5zZF9mc2IyYmJfc2hpZnQpOworCQllcnJvciA9IGdmczJfcmVhZF9zdXBlcihzZHAsIEdGUzJfU0JfQUREUiA+PiBzZHAtPnNkX2ZzYjJiYl9zaGlmdCwgc2lsZW50KTsKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuIGVycm9yOwogCi0JCWVycm9yID0gZ2ZzMl9jaGVja19zYihzZHAsICZzZHAtPnNkX3NiLCBzaWxlbnQpOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dDsKLQogCQlpZiAoIXByb3RvWzBdKQogCQkJcHJvdG8gPSBzZHAtPnNkX3NiLnNiX2xvY2twcm90bzsKIAkJaWYgKCF0YWJsZVswXSkKQEAgLTM2NCw3ICszNjAsNiBAQAogCXdoaWxlICgodGFibGUgPSBzdHJjaHIodGFibGUsICcvJykpKQogCQkqdGFibGUgPSAnXyc7CiAKLW91dDoKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTExMTksOCArMTExNCw3IEBACiAJaWYgKHNkcC0+c2RfYXJncy5hcl9zdGF0ZnNfcXVhbnR1bSkgewogCQlzZHAtPnNkX3R1bmUuZ3Rfc3RhdGZzX3Nsb3cgPSAwOwogCQlzZHAtPnNkX3R1bmUuZ3Rfc3RhdGZzX3F1YW50dW0gPSBzZHAtPnNkX2FyZ3MuYXJfc3RhdGZzX3F1YW50dW07Ci0JfQotCWVsc2UgeworCX0gZWxzZSB7CiAJCXNkcC0+c2RfdHVuZS5ndF9zdGF0ZnNfc2xvdyA9IDE7CiAJCXNkcC0+c2RfdHVuZS5ndF9zdGF0ZnNfcXVhbnR1bSA9IDMwOwogCX0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2lub2RlLmMgYi9mcy9nZnMyL29wc19pbm9kZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWU0MzZhLi4wMDAwMDAwCi0tLSBhL2ZzL2dmczIvb3BzX2lub2RlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKLSAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCi0gKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KLSNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgveGF0dHIuaD4KLSNpbmNsdWRlIDxsaW51eC9wb3NpeF9hY2wuaD4KLSNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Ci0jaW5jbHVkZSA8bGludXgvZmllbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQotI2luY2x1ZGUgImdmczIuaCIKLSNpbmNsdWRlICJpbmNvcmUuaCIKLSNpbmNsdWRlICJhY2wuaCIKLSNpbmNsdWRlICJibWFwLmgiCi0jaW5jbHVkZSAiZGlyLmgiCi0jaW5jbHVkZSAieGF0dHIuaCIKLSNpbmNsdWRlICJnbG9jay5oIgotI2luY2x1ZGUgImlub2RlLmgiCi0jaW5jbHVkZSAibWV0YV9pby5oIgotI2luY2x1ZGUgInF1b3RhLmgiCi0jaW5jbHVkZSAicmdycC5oIgotI2luY2x1ZGUgInRyYW5zLmgiCi0jaW5jbHVkZSAidXRpbC5oIgotI2luY2x1ZGUgInN1cGVyLmgiCi0KLS8qKgotICogZ2ZzMl9jcmVhdGUgLSBDcmVhdGUgYSBmaWxlCi0gKiBAZGlyOiBUaGUgZGlyZWN0b3J5IGluIHdoaWNoIHRvIGNyZWF0ZSB0aGUgZmlsZQotICogQGRlbnRyeTogVGhlIGRlbnRyeSBvZiB0aGUgbmV3IGZpbGUKLSAqIEBtb2RlOiBUaGUgbW9kZSBvZiB0aGUgbmV3IGZpbGUKLSAqCi0gKiBSZXR1cm5zOiBlcnJubwotICovCi0KLXN0YXRpYyBpbnQgZ2ZzMl9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJICAgICAgIGludCBtb2RlLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKLXsKLQlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqZGlwID0gR0ZTMl9JKGRpcik7Ci0Jc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKGRpcik7Ci0Jc3RydWN0IGdmczJfaG9sZGVyIGdoc1syXTsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCi0JZ2ZzMl9ob2xkZXJfaW5pdChkaXAtPmlfZ2wsIDAsIDAsIGdocyk7Ci0KLQlmb3IgKDs7KSB7Ci0JCWlub2RlID0gZ2ZzMl9jcmVhdGVpKGdocywgJmRlbnRyeS0+ZF9uYW1lLCBTX0lGUkVHIHwgbW9kZSwgMCk7Ci0JCWlmICghSVNfRVJSKGlub2RlKSkgewotCQkJZ2ZzMl90cmFuc19lbmQoc2RwKTsKLQkJCWlmIChkaXAtPmlfYWxsb2MtPmFsX3JnZCkKLQkJCQlnZnMyX2lucGxhY2VfcmVsZWFzZShkaXApOwotCQkJZ2ZzMl9xdW90YV91bmxvY2soZGlwKTsKLQkJCWdmczJfYWxsb2NfcHV0KGRpcCk7Ci0JCQlnZnMyX2dsb2NrX2RxX3VuaW5pdF9tKDIsIGdocyk7Ci0JCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKLQkJCWJyZWFrOwotCQl9IGVsc2UgaWYgKFBUUl9FUlIoaW5vZGUpICE9IC1FRVhJU1QgfHwKLQkJCSAgIChuZCAmJiBuZC0+ZmxhZ3MgJiBMT09LVVBfRVhDTCkpIHsKLQkJCWdmczJfaG9sZGVyX3VuaW5pdChnaHMpOwotCQkJcmV0dXJuIFBUUl9FUlIoaW5vZGUpOwotCQl9Ci0KLQkJaW5vZGUgPSBnZnMyX2xvb2t1cGkoZGlyLCAmZGVudHJ5LT5kX25hbWUsIDApOwotCQlpZiAoaW5vZGUpIHsKLQkJCWlmICghSVNfRVJSKGlub2RlKSkgewotCQkJCWdmczJfaG9sZGVyX3VuaW5pdChnaHMpOwotCQkJCWJyZWFrOwotCQkJfSBlbHNlIHsKLQkJCQlnZnMyX2hvbGRlcl91bmluaXQoZ2hzKTsKLQkJCQlyZXR1cm4gUFRSX0VSUihpbm9kZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZ2ZzMl9sb29rdXAgLSBMb29rIHVwIGEgZmlsZW5hbWUgaW4gYSBkaXJlY3RvcnkgYW5kIHJldHVybiBpdHMgaW5vZGUKLSAqIEBkaXI6IFRoZSBkaXJlY3RvcnkgaW5vZGUKLSAqIEBkZW50cnk6IFRoZSBkZW50cnkgb2YgdGhlIG5ldyBpbm9kZQotICogQG5kOiBwYXNzZWQgZnJvbSBMaW51eCBWRlMsIGlnbm9yZWQgYnkgdXMKLSAqCi0gKiBDYWxsZWQgYnkgdGhlIFZGUyBsYXllci4gTG9jayBkaXIgYW5kIGNhbGwgZ2ZzMl9sb29rdXBpKCkKLSAqCi0gKiBSZXR1cm5zOiBlcnJubwotICovCi0KLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpnZnMyX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJCSAgc3RydWN0IG5hbWVpZGF0YSAqbmQpCi17Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7Ci0KLQlpbm9kZSA9IGdmczJfbG9va3VwaShkaXIsICZkZW50cnktPmRfbmFtZSwgMCk7Ci0JaWYgKGlub2RlICYmIElTX0VSUihpbm9kZSkpCi0JCXJldHVybiBFUlJfQ0FTVChpbm9kZSk7Ci0KLQlpZiAoaW5vZGUpIHsKLQkJc3RydWN0IGdmczJfZ2xvY2sgKmdsID0gR0ZTMl9JKGlub2RlKS0+aV9nbDsKLQkJc3RydWN0IGdmczJfaG9sZGVyIGdoOwotCQlpbnQgZXJyb3I7Ci0JCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KGdsLCBMTV9TVF9TSEFSRUQsIExNX0ZMQUdfQU5ZLCAmZ2gpOwotCQlpZiAoZXJyb3IpIHsKLQkJCWlwdXQoaW5vZGUpOwotCQkJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwotCQl9Ci0JCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZnaCk7Ci0JCXJldHVybiBkX3NwbGljZV9hbGlhcyhpbm9kZSwgZGVudHJ5KTsKLQl9Ci0JZF9hZGQoZGVudHJ5LCBpbm9kZSk7Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotLyoqCi0gKiBnZnMyX2xpbmsgLSBMaW5rIHRvIGEgZmlsZQotICogQG9sZF9kZW50cnk6IFRoZSBpbm9kZSB0byBsaW5rCi0gKiBAZGlyOiBBZGQgbGluayB0byB0aGlzIGRpcmVjdG9yeQotICogQGRlbnRyeTogVGhlIG5hbWUgb2YgdGhlIGxpbmsKLSAqCi0gKiBMaW5rIHRoZSBpbm9kZSBpbiAib2xkX2RlbnRyeSIgaW50byB0aGUgZGlyZWN0b3J5ICJkaXIiIHdpdGggdGhlCi0gKiBuYW1lIGluICJkZW50cnkiLgotICoKLSAqIFJldHVybnM6IGVycm5vCi0gKi8KLQotc3RhdGljIGludCBnZnMyX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsCi0JCSAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQotewotCXN0cnVjdCBnZnMyX2lub2RlICpkaXAgPSBHRlMyX0koZGlyKTsKLQlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoZGlyKTsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gb2xkX2RlbnRyeS0+ZF9pbm9kZTsKLQlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koaW5vZGUpOwotCXN0cnVjdCBnZnMyX2hvbGRlciBnaHNbMl07Ci0JaW50IGFsbG9jX3JlcXVpcmVkOwotCWludCBlcnJvcjsKLQotCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQotCQlyZXR1cm4gLUVQRVJNOwotCi0JZ2ZzMl9ob2xkZXJfaW5pdChkaXAtPmlfZ2wsIExNX1NUX0VYQ0xVU0lWRSwgMCwgZ2hzKTsKLQlnZnMyX2hvbGRlcl9pbml0KGlwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsIGdocyArIDEpOwotCi0JZXJyb3IgPSBnZnMyX2dsb2NrX25xKGdocyk7IC8qIHBhcmVudCAqLwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfcGFyZW50OwotCi0JZXJyb3IgPSBnZnMyX2dsb2NrX25xKGdocyArIDEpOyAvKiBjaGlsZCAqLwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfY2hpbGQ7Ci0KLQllcnJvciA9IGdmczJfcGVybWlzc2lvbihkaXIsIE1BWV9XUklURSB8IE1BWV9FWEVDLCAwKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X2d1bmxvY2s7Ci0KLQllcnJvciA9IGdmczJfZGlyX2NoZWNrKGRpciwgJmRlbnRyeS0+ZF9uYW1lLCBOVUxMKTsKLQlzd2l0Y2ggKGVycm9yKSB7Ci0JY2FzZSAtRU5PRU5UOgotCQlicmVhazsKLQljYXNlIDA6Ci0JCWVycm9yID0gLUVFWElTVDsKLQlkZWZhdWx0OgotCQlnb3RvIG91dF9ndW5sb2NrOwotCX0KLQotCWVycm9yID0gLUVJTlZBTDsKLQlpZiAoIWRpcC0+aV9pbm9kZS5pX25saW5rKQotCQlnb3RvIG91dF9ndW5sb2NrOwotCWVycm9yID0gLUVGQklHOwotCWlmIChkaXAtPmlfZW50cmllcyA9PSAodTMyKS0xKQotCQlnb3RvIG91dF9ndW5sb2NrOwotCWVycm9yID0gLUVQRVJNOwotCWlmIChJU19JTU1VVEFCTEUoaW5vZGUpIHx8IElTX0FQUEVORChpbm9kZSkpCi0JCWdvdG8gb3V0X2d1bmxvY2s7Ci0JZXJyb3IgPSAtRUlOVkFMOwotCWlmICghaXAtPmlfaW5vZGUuaV9ubGluaykKLQkJZ290byBvdXRfZ3VubG9jazsKLQllcnJvciA9IC1FTUxJTks7Ci0JaWYgKGlwLT5pX2lub2RlLmlfbmxpbmsgPT0gKHUzMiktMSkKLQkJZ290byBvdXRfZ3VubG9jazsKLQotCWFsbG9jX3JlcXVpcmVkID0gZXJyb3IgPSBnZnMyX2RpcmFkZF9hbGxvY19yZXF1aXJlZChkaXIsICZkZW50cnktPmRfbmFtZSk7Ci0JaWYgKGVycm9yIDwgMCkKLQkJZ290byBvdXRfZ3VubG9jazsKLQllcnJvciA9IDA7Ci0KLQlpZiAoYWxsb2NfcmVxdWlyZWQpIHsKLQkJc3RydWN0IGdmczJfYWxsb2MgKmFsID0gZ2ZzMl9hbGxvY19nZXQoZGlwKTsKLQkJaWYgKCFhbCkgewotCQkJZXJyb3IgPSAtRU5PTUVNOwotCQkJZ290byBvdXRfZ3VubG9jazsKLQkJfQotCi0JCWVycm9yID0gZ2ZzMl9xdW90YV9sb2NrX2NoZWNrKGRpcCk7Ci0JCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0X2FsbG9jOwotCi0JCWFsLT5hbF9yZXF1ZXN0ZWQgPSBzZHAtPnNkX21heF9kaXJyZXM7Ci0KLQkJZXJyb3IgPSBnZnMyX2lucGxhY2VfcmVzZXJ2ZShkaXApOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dF9ndW5sb2NrX3E7Ci0KLQkJZXJyb3IgPSBnZnMyX3RyYW5zX2JlZ2luKHNkcCwgc2RwLT5zZF9tYXhfZGlycmVzICsKLQkJCQkJIGdmczJfcmdfYmxvY2tzKGFsKSArCi0JCQkJCSAyICogUkVTX0RJTk9ERSArIFJFU19TVEFURlMgKwotCQkJCQkgUkVTX1FVT1RBLCAwKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBvdXRfaXByZXM7Ci0JfSBlbHNlIHsKLQkJZXJyb3IgPSBnZnMyX3RyYW5zX2JlZ2luKHNkcCwgMiAqIFJFU19ESU5PREUgKyBSRVNfTEVBRiwgMCk7Ci0JCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0X2lwcmVzOwotCX0KLQotCWVycm9yID0gZ2ZzMl9kaXJfYWRkKGRpciwgJmRlbnRyeS0+ZF9uYW1lLCBpcCwgSUYyRFQoaW5vZGUtPmlfbW9kZSkpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfZW5kX3RyYW5zOwotCi0JZXJyb3IgPSBnZnMyX2NoYW5nZV9ubGluayhpcCwgKzEpOwotCi1vdXRfZW5kX3RyYW5zOgotCWdmczJfdHJhbnNfZW5kKHNkcCk7Ci1vdXRfaXByZXM6Ci0JaWYgKGFsbG9jX3JlcXVpcmVkKQotCQlnZnMyX2lucGxhY2VfcmVsZWFzZShkaXApOwotb3V0X2d1bmxvY2tfcToKLQlpZiAoYWxsb2NfcmVxdWlyZWQpCi0JCWdmczJfcXVvdGFfdW5sb2NrKGRpcCk7Ci1vdXRfYWxsb2M6Ci0JaWYgKGFsbG9jX3JlcXVpcmVkKQotCQlnZnMyX2FsbG9jX3B1dChkaXApOwotb3V0X2d1bmxvY2s6Ci0JZ2ZzMl9nbG9ja19kcShnaHMgKyAxKTsKLW91dF9jaGlsZDoKLQlnZnMyX2dsb2NrX2RxKGdocyk7Ci1vdXRfcGFyZW50OgotCWdmczJfaG9sZGVyX3VuaW5pdChnaHMpOwotCWdmczJfaG9sZGVyX3VuaW5pdChnaHMgKyAxKTsKLQlpZiAoIWVycm9yKSB7Ci0JCWlob2xkKGlub2RlKTsKLQkJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKLQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci0JfQotCXJldHVybiBlcnJvcjsKLX0KLQotLyoKLSAqIGdmczJfdW5saW5rX29rIC0gY2hlY2sgdG8gc2VlIHRoYXQgYSBpbm9kZSBpcyBzdGlsbCBpbiBhIGRpcmVjdG9yeQotICogQGRpcDogdGhlIGRpcmVjdG9yeQotICogQG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBmaWxlCi0gKiBAaXA6IHRoZSBpbm9kZQotICoKLSAqIEFzc3VtZXMgdGhhdCB0aGUgbG9jayBvbiAoYXQgbGVhc3QpIEBkaXAgaXMgaGVsZC4KLSAqCi0gKiBSZXR1cm5zOiAwIGlmIHRoZSBwYXJlbnQvY2hpbGQgcmVsYXRpb25zaGlwIGlzIGNvcnJlY3QsIGVycm5vIGlmIGl0IGlzbid0Ci0gKi8KLQotc3RhdGljIGludCBnZnMyX3VubGlua19vayhzdHJ1Y3QgZ2ZzMl9pbm9kZSAqZGlwLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwKLQkJCSAgY29uc3Qgc3RydWN0IGdmczJfaW5vZGUgKmlwKQotewotCWludCBlcnJvcjsKLQotCWlmIChJU19JTU1VVEFCTEUoJmlwLT5pX2lub2RlKSB8fCBJU19BUFBFTkQoJmlwLT5pX2lub2RlKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCWlmICgoZGlwLT5pX2lub2RlLmlfbW9kZSAmIFNfSVNWVFgpICYmCi0JICAgIGRpcC0+aV9pbm9kZS5pX3VpZCAhPSBjdXJyZW50X2ZzdWlkKCkgJiYKLQkgICAgaXAtPmlfaW5vZGUuaV91aWQgIT0gY3VycmVudF9mc3VpZCgpICYmICFjYXBhYmxlKENBUF9GT1dORVIpKQotCQlyZXR1cm4gLUVQRVJNOwotCi0JaWYgKElTX0FQUEVORCgmZGlwLT5pX2lub2RlKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCWVycm9yID0gZ2ZzMl9wZXJtaXNzaW9uKCZkaXAtPmlfaW5vZGUsIE1BWV9XUklURSB8IE1BWV9FWEVDLCAwKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCWVycm9yID0gZ2ZzMl9kaXJfY2hlY2soJmRpcC0+aV9pbm9kZSwgbmFtZSwgaXApOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZ2ZzMl91bmxpbmsgLSBVbmxpbmsgYSBmaWxlCi0gKiBAZGlyOiBUaGUgaW5vZGUgb2YgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBmaWxlIHRvIHVubGluawotICogQGRlbnRyeTogVGhlIGZpbGUgaXRzZWxmCi0gKgotICogVW5saW5rIGEgZmlsZS4gIENhbGwgZ2ZzMl91bmxpbmtpKCkKLSAqCi0gKiBSZXR1cm5zOiBlcnJubwotICovCi0KLXN0YXRpYyBpbnQgZ2ZzMl91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLXsKLQlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqZGlwID0gR0ZTMl9JKGRpcik7Ci0Jc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKGRpcik7Ci0Jc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGRlbnRyeS0+ZF9pbm9kZSk7Ci0Jc3RydWN0IGdmczJfaG9sZGVyIGdoc1szXTsKLQlzdHJ1Y3QgZ2ZzMl9yZ3JwZCAqcmdkOwotCXN0cnVjdCBnZnMyX2hvbGRlciByaV9naDsKLQlpbnQgZXJyb3I7Ci0KLQllcnJvciA9IGdmczJfcmluZGV4X2hvbGQoc2RwLCAmcmlfZ2gpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0JZ2ZzMl9ob2xkZXJfaW5pdChkaXAtPmlfZ2wsIExNX1NUX0VYQ0xVU0lWRSwgMCwgZ2hzKTsKLQlnZnMyX2hvbGRlcl9pbml0KGlwLT5pX2dsLCAgTE1fU1RfRVhDTFVTSVZFLCAwLCBnaHMgKyAxKTsKLQotCXJnZCA9IGdmczJfYmxrMnJncnBkKHNkcCwgaXAtPmlfbm9fYWRkcik7Ci0JZ2ZzMl9ob2xkZXJfaW5pdChyZ2QtPnJkX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsIGdocyArIDIpOwotCi0KLQllcnJvciA9IGdmczJfZ2xvY2tfbnEoZ2hzKTsgLyogcGFyZW50ICovCi0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9wYXJlbnQ7Ci0KLQllcnJvciA9IGdmczJfZ2xvY2tfbnEoZ2hzICsgMSk7IC8qIGNoaWxkICovCi0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9jaGlsZDsKLQotCWVycm9yID0gZ2ZzMl9nbG9ja19ucShnaHMgKyAyKTsgLyogcmdycCAqLwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfcmdycDsKLQotCWVycm9yID0gZ2ZzMl91bmxpbmtfb2soZGlwLCAmZGVudHJ5LT5kX25hbWUsIGlwKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X2d1bmxvY2s7Ci0KLQllcnJvciA9IGdmczJfdHJhbnNfYmVnaW4oc2RwLCAyKlJFU19ESU5PREUgKyBSRVNfTEVBRiArIFJFU19SR19CSVQsIDApOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfZ3VubG9jazsKLQotCWVycm9yID0gZ2ZzMl9kaXJfZGVsKGRpcCwgJmRlbnRyeS0+ZF9uYW1lKTsKLSAgICAgICAgaWYgKGVycm9yKQotICAgICAgICAgICAgICAgIGdvdG8gb3V0X2VuZF90cmFuczsKLQotCWVycm9yID0gZ2ZzMl9jaGFuZ2VfbmxpbmsoaXAsIC0xKTsKLQotb3V0X2VuZF90cmFuczoKLQlnZnMyX3RyYW5zX2VuZChzZHApOwotb3V0X2d1bmxvY2s6Ci0JZ2ZzMl9nbG9ja19kcShnaHMgKyAyKTsKLW91dF9yZ3JwOgotCWdmczJfaG9sZGVyX3VuaW5pdChnaHMgKyAyKTsKLQlnZnMyX2dsb2NrX2RxKGdocyArIDEpOwotb3V0X2NoaWxkOgotCWdmczJfaG9sZGVyX3VuaW5pdChnaHMgKyAxKTsKLQlnZnMyX2dsb2NrX2RxKGdocyk7Ci1vdXRfcGFyZW50OgotCWdmczJfaG9sZGVyX3VuaW5pdChnaHMpOwotCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZyaV9naCk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi0vKioKLSAqIGdmczJfc3ltbGluayAtIENyZWF0ZSBhIHN5bWxpbmsKLSAqIEBkaXI6IFRoZSBkaXJlY3RvcnkgdG8gY3JlYXRlIHRoZSBzeW1saW5rIGluCi0gKiBAZGVudHJ5OiBUaGUgZGVudHJ5IHRvIHB1dCB0aGUgc3ltbGluayBpbgotICogQHN5bW5hbWU6IFRoZSB0aGluZyB3aGljaCB0aGUgbGluayBwb2ludHMgdG8KLSAqCi0gKiBSZXR1cm5zOiBlcnJubwotICovCi0KLXN0YXRpYyBpbnQgZ2ZzMl9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQljb25zdCBjaGFyICpzeW1uYW1lKQotewotCXN0cnVjdCBnZnMyX2lub2RlICpkaXAgPSBHRlMyX0koZGlyKSwgKmlwOwotCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQihkaXIpOwotCXN0cnVjdCBnZnMyX2hvbGRlciBnaHNbMl07Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpYmg7Ci0JaW50IHNpemU7Ci0JaW50IGVycm9yOwotCi0JLyogTXVzdCBiZSBzdHVmZmVkIHdpdGggYSBudWxsIHRlcm1pbmF0b3IgZm9yIGdmczJfZm9sbG93X2xpbmsoKSAqLwotCXNpemUgPSBzdHJsZW4oc3ltbmFtZSk7Ci0JaWYgKHNpemUgPiBzZHAtPnNkX3NiLnNiX2JzaXplIC0gc2l6ZW9mKHN0cnVjdCBnZnMyX2Rpbm9kZSkgLSAxKQotCQlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKLQotCWdmczJfaG9sZGVyX2luaXQoZGlwLT5pX2dsLCAwLCAwLCBnaHMpOwotCi0JaW5vZGUgPSBnZnMyX2NyZWF0ZWkoZ2hzLCAmZGVudHJ5LT5kX25hbWUsIFNfSUZMTksgfCBTX0lSV1hVR08sIDApOwotCWlmIChJU19FUlIoaW5vZGUpKSB7Ci0JCWdmczJfaG9sZGVyX3VuaW5pdChnaHMpOwotCQlyZXR1cm4gUFRSX0VSUihpbm9kZSk7Ci0JfQotCi0JaXAgPSBnaHNbMV0uZ2hfZ2wtPmdsX29iamVjdDsKLQotCWlfc2l6ZV93cml0ZShpbm9kZSwgc2l6ZSk7Ci0KLQllcnJvciA9IGdmczJfbWV0YV9pbm9kZV9idWZmZXIoaXAsICZkaWJoKTsKLQotCWlmICghZ2ZzMl9hc3NlcnRfd2l0aGRyYXcoc2RwLCAhZXJyb3IpKSB7Ci0JCWdmczJfZGlub2RlX291dChpcCwgZGliaC0+Yl9kYXRhKTsKLQkJbWVtY3B5KGRpYmgtPmJfZGF0YSArIHNpemVvZihzdHJ1Y3QgZ2ZzMl9kaW5vZGUpLCBzeW1uYW1lLAotCQkgICAgICAgc2l6ZSk7Ci0JCWJyZWxzZShkaWJoKTsKLQl9Ci0KLQlnZnMyX3RyYW5zX2VuZChzZHApOwotCWlmIChkaXAtPmlfYWxsb2MtPmFsX3JnZCkKLQkJZ2ZzMl9pbnBsYWNlX3JlbGVhc2UoZGlwKTsKLQlnZnMyX3F1b3RhX3VubG9jayhkaXApOwotCWdmczJfYWxsb2NfcHV0KGRpcCk7Ci0KLQlnZnMyX2dsb2NrX2RxX3VuaW5pdF9tKDIsIGdocyk7Ci0KLQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwotCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZ2ZzMl9ta2RpciAtIE1ha2UgYSBkaXJlY3RvcnkKLSAqIEBkaXI6IFRoZSBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoZSBuZXcgb25lCi0gKiBAZGVudHJ5OiBUaGUgZGVudHJ5IG9mIHRoZSBuZXcgZGlyZWN0b3J5Ci0gKiBAbW9kZTogVGhlIG1vZGUgb2YgdGhlIG5ldyBkaXJlY3RvcnkKLSAqCi0gKiBSZXR1cm5zOiBlcnJubwotICovCi0KLXN0YXRpYyBpbnQgZ2ZzMl9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSkKLXsKLQlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqZGlwID0gR0ZTMl9JKGRpciksICppcDsKLQlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoZGlyKTsKLQlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZ2hzWzJdOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpkaWJoOwotCWludCBlcnJvcjsKLQotCWdmczJfaG9sZGVyX2luaXQoZGlwLT5pX2dsLCAwLCAwLCBnaHMpOwotCi0JaW5vZGUgPSBnZnMyX2NyZWF0ZWkoZ2hzLCAmZGVudHJ5LT5kX25hbWUsIFNfSUZESVIgfCBtb2RlLCAwKTsKLQlpZiAoSVNfRVJSKGlub2RlKSkgewotCQlnZnMyX2hvbGRlcl91bmluaXQoZ2hzKTsKLQkJcmV0dXJuIFBUUl9FUlIoaW5vZGUpOwotCX0KLQotCWlwID0gZ2hzWzFdLmdoX2dsLT5nbF9vYmplY3Q7Ci0KLQlpcC0+aV9pbm9kZS5pX25saW5rID0gMjsKLQlpX3NpemVfd3JpdGUoaW5vZGUsIHNkcC0+c2Rfc2Iuc2JfYnNpemUgLSBzaXplb2Yoc3RydWN0IGdmczJfZGlub2RlKSk7Ci0JaXAtPmlfZGlza2ZsYWdzIHw9IEdGUzJfRElGX0pEQVRBOwotCWlwLT5pX2VudHJpZXMgPSAyOwotCi0JZXJyb3IgPSBnZnMyX21ldGFfaW5vZGVfYnVmZmVyKGlwLCAmZGliaCk7Ci0KLQlpZiAoIWdmczJfYXNzZXJ0X3dpdGhkcmF3KHNkcCwgIWVycm9yKSkgewotCQlzdHJ1Y3QgZ2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBnZnMyX2Rpbm9kZSAqKWRpYmgtPmJfZGF0YTsKLQkJc3RydWN0IGdmczJfZGlyZW50ICpkZW50ID0gKHN0cnVjdCBnZnMyX2RpcmVudCAqKShkaSsxKTsKLQotCQlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgZGliaCwgMSk7Ci0JCWdmczJfcXN0cjJkaXJlbnQoJmdmczJfcWRvdCwgR0ZTMl9ESVJFTlRfU0laRShnZnMyX3Fkb3QubGVuKSwgZGVudCk7Ci0JCWRlbnQtPmRlX2ludW0gPSBkaS0+ZGlfbnVtOyAvKiBhbHJlYWR5IEdGUzIgZW5kaWFuICovCi0JCWRlbnQtPmRlX3R5cGUgPSBjcHVfdG9fYmUxNihEVF9ESVIpOwotCQlkaS0+ZGlfZW50cmllcyA9IGNwdV90b19iZTMyKDEpOwotCi0JCWRlbnQgPSAoc3RydWN0IGdmczJfZGlyZW50ICopKChjaGFyKilkZW50ICsgR0ZTMl9ESVJFTlRfU0laRSgxKSk7Ci0JCWdmczJfcXN0cjJkaXJlbnQoJmdmczJfcWRvdGRvdCwgZGliaC0+Yl9zaXplIC0gR0ZTMl9ESVJFTlRfU0laRSgxKSAtIHNpemVvZihzdHJ1Y3QgZ2ZzMl9kaW5vZGUpLCBkZW50KTsKLQotCQlnZnMyX2ludW1fb3V0KGRpcCwgZGVudCk7Ci0JCWRlbnQtPmRlX3R5cGUgPSBjcHVfdG9fYmUxNihEVF9ESVIpOwotCi0JCWdmczJfZGlub2RlX291dChpcCwgZGkpOwotCi0JCWJyZWxzZShkaWJoKTsKLQl9Ci0KLQllcnJvciA9IGdmczJfY2hhbmdlX25saW5rKGRpcCwgKzEpOwotCWdmczJfYXNzZXJ0X3dpdGhkcmF3KHNkcCwgIWVycm9yKTsgLyogZGlwIGFscmVhZHkgcGlubmVkICovCi0KLQlnZnMyX3RyYW5zX2VuZChzZHApOwotCWlmIChkaXAtPmlfYWxsb2MtPmFsX3JnZCkKLQkJZ2ZzMl9pbnBsYWNlX3JlbGVhc2UoZGlwKTsKLQlnZnMyX3F1b3RhX3VubG9jayhkaXApOwotCWdmczJfYWxsb2NfcHV0KGRpcCk7Ci0KLQlnZnMyX2dsb2NrX2RxX3VuaW5pdF9tKDIsIGdocyk7Ci0KLQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwotCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZ2ZzMl9ybWRpcmkgLSBSZW1vdmUgYSBkaXJlY3RvcnkKLSAqIEBkaXA6IFRoZSBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoZSBkaXJlY3RvcnkgdG8gYmUgcmVtb3ZlZAotICogQG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdG8gYmUgcmVtb3ZlZAotICogQGlwOiBUaGUgR0ZTMiBpbm9kZSBvZiB0aGUgZGlyZWN0b3J5IHRvIGJlIHJlbW92ZWQKLSAqCi0gKiBBc3N1bWVzIEdsb2NrcyBvbiBkaXAgYW5kIGlwIGFyZSBoZWxkCi0gKgotICogUmV0dXJuczogZXJybm8KLSAqLwotCi1zdGF0aWMgaW50IGdmczJfcm1kaXJpKHN0cnVjdCBnZnMyX2lub2RlICpkaXAsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLAotCQkgICAgICAgc3RydWN0IGdmczJfaW5vZGUgKmlwKQotewotCWludCBlcnJvcjsKLQotCWlmIChpcC0+aV9lbnRyaWVzICE9IDIpIHsKLQkJaWYgKGdmczJfY29uc2lzdF9pbm9kZShpcCkpCi0JCQlnZnMyX2Rpbm9kZV9wcmludChpcCk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWVycm9yID0gZ2ZzMl9kaXJfZGVsKGRpcCwgbmFtZSk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQllcnJvciA9IGdmczJfY2hhbmdlX25saW5rKGRpcCwgLTEpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0JZXJyb3IgPSBnZnMyX2Rpcl9kZWwoaXAsICZnZnMyX3Fkb3QpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0JZXJyb3IgPSBnZnMyX2Rpcl9kZWwoaXAsICZnZnMyX3Fkb3Rkb3QpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0JLyogSXQgbG9va3Mgb2RkLCBidXQgaXQgcmVhbGx5IHNob3VsZCBiZSBkb25lIHR3aWNlICovCi0JZXJyb3IgPSBnZnMyX2NoYW5nZV9ubGluayhpcCwgLTEpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0JZXJyb3IgPSBnZnMyX2NoYW5nZV9ubGluayhpcCwgLTEpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0JcmV0dXJuIGVycm9yOwotfQotCi0vKioKLSAqIGdmczJfcm1kaXIgLSBSZW1vdmUgYSBkaXJlY3RvcnkKLSAqIEBkaXI6IFRoZSBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoZSBkaXJlY3RvcnkgdG8gYmUgcmVtb3ZlZAotICogQGRlbnRyeTogVGhlIGRlbnRyeSBvZiB0aGUgZGlyZWN0b3J5IHRvIHJlbW92ZQotICoKLSAqIFJlbW92ZSBhIGRpcmVjdG9yeS4gQ2FsbCBnZnMyX3JtZGlyaSgpCi0gKgotICogUmV0dXJuczogZXJybm8KLSAqLwotCi1zdGF0aWMgaW50IGdmczJfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLXsKLQlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqZGlwID0gR0ZTMl9JKGRpcik7Ci0Jc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKGRpcik7Ci0Jc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGRlbnRyeS0+ZF9pbm9kZSk7Ci0Jc3RydWN0IGdmczJfaG9sZGVyIGdoc1szXTsKLQlzdHJ1Y3QgZ2ZzMl9yZ3JwZCAqcmdkOwotCXN0cnVjdCBnZnMyX2hvbGRlciByaV9naDsKLQlpbnQgZXJyb3I7Ci0KLQllcnJvciA9IGdmczJfcmluZGV4X2hvbGQoc2RwLCAmcmlfZ2gpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCWdmczJfaG9sZGVyX2luaXQoZGlwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsIGdocyk7Ci0JZ2ZzMl9ob2xkZXJfaW5pdChpcC0+aV9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLCBnaHMgKyAxKTsKLQotCXJnZCA9IGdmczJfYmxrMnJncnBkKHNkcCwgaXAtPmlfbm9fYWRkcik7Ci0JZ2ZzMl9ob2xkZXJfaW5pdChyZ2QtPnJkX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsIGdocyArIDIpOwotCi0JZXJyb3IgPSBnZnMyX2dsb2NrX25xKGdocyk7IC8qIHBhcmVudCAqLwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfcGFyZW50OwotCi0JZXJyb3IgPSBnZnMyX2dsb2NrX25xKGdocyArIDEpOyAvKiBjaGlsZCAqLwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfY2hpbGQ7Ci0KLQllcnJvciA9IGdmczJfZ2xvY2tfbnEoZ2hzICsgMik7IC8qIHJncnAgKi8KLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X3JncnA7Ci0KLQllcnJvciA9IGdmczJfdW5saW5rX29rKGRpcCwgJmRlbnRyeS0+ZF9uYW1lLCBpcCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9ndW5sb2NrOwotCi0JaWYgKGlwLT5pX2VudHJpZXMgPCAyKSB7Ci0JCWlmIChnZnMyX2NvbnNpc3RfaW5vZGUoaXApKQotCQkJZ2ZzMl9kaW5vZGVfcHJpbnQoaXApOwotCQllcnJvciA9IC1FSU87Ci0JCWdvdG8gb3V0X2d1bmxvY2s7Ci0JfQotCWlmIChpcC0+aV9lbnRyaWVzID4gMikgewotCQllcnJvciA9IC1FTk9URU1QVFk7Ci0JCWdvdG8gb3V0X2d1bmxvY2s7Ci0JfQotCi0JZXJyb3IgPSBnZnMyX3RyYW5zX2JlZ2luKHNkcCwgMiAqIFJFU19ESU5PREUgKyAzICogUkVTX0xFQUYgKyBSRVNfUkdfQklULCAwKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X2d1bmxvY2s7Ci0KLQllcnJvciA9IGdmczJfcm1kaXJpKGRpcCwgJmRlbnRyeS0+ZF9uYW1lLCBpcCk7Ci0KLQlnZnMyX3RyYW5zX2VuZChzZHApOwotCi1vdXRfZ3VubG9jazoKLQlnZnMyX2dsb2NrX2RxKGdocyArIDIpOwotb3V0X3JncnA6Ci0JZ2ZzMl9ob2xkZXJfdW5pbml0KGdocyArIDIpOwotCWdmczJfZ2xvY2tfZHEoZ2hzICsgMSk7Ci1vdXRfY2hpbGQ6Ci0JZ2ZzMl9ob2xkZXJfdW5pbml0KGdocyArIDEpOwotCWdmczJfZ2xvY2tfZHEoZ2hzKTsKLW91dF9wYXJlbnQ6Ci0JZ2ZzMl9ob2xkZXJfdW5pbml0KGdocyk7Ci0JZ2ZzMl9nbG9ja19kcV91bmluaXQoJnJpX2doKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qKgotICogZ2ZzMl9ta25vZCAtIE1ha2UgYSBzcGVjaWFsIGZpbGUKLSAqIEBkaXI6IFRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIHNwZWNpYWwgZmlsZSB3aWxsIHJlc2lkZQotICogQGRlbnRyeTogVGhlIGRlbnRyeSBvZiB0aGUgc3BlY2lhbCBmaWxlCi0gKiBAbW9kZTogVGhlIG1vZGUgb2YgdGhlIHNwZWNpYWwgZmlsZQotICogQHJkZXY6IFRoZSBkZXZpY2Ugc3BlY2lmaWNhdGlvbiBvZiB0aGUgc3BlY2lhbCBmaWxlCi0gKgotICovCi0KLXN0YXRpYyBpbnQgZ2ZzMl9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSwKLQkJICAgICAgZGV2X3QgZGV2KQotewotCXN0cnVjdCBnZnMyX2lub2RlICpkaXAgPSBHRlMyX0koZGlyKTsKLQlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoZGlyKTsKLQlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZ2hzWzJdOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0KLQlnZnMyX2hvbGRlcl9pbml0KGRpcC0+aV9nbCwgMCwgMCwgZ2hzKTsKLQotCWlub2RlID0gZ2ZzMl9jcmVhdGVpKGdocywgJmRlbnRyeS0+ZF9uYW1lLCBtb2RlLCBkZXYpOwotCWlmIChJU19FUlIoaW5vZGUpKSB7Ci0JCWdmczJfaG9sZGVyX3VuaW5pdChnaHMpOwotCQlyZXR1cm4gUFRSX0VSUihpbm9kZSk7Ci0JfQotCi0JZ2ZzMl90cmFuc19lbmQoc2RwKTsKLQlpZiAoZGlwLT5pX2FsbG9jLT5hbF9yZ2QpCi0JCWdmczJfaW5wbGFjZV9yZWxlYXNlKGRpcCk7Ci0JZ2ZzMl9xdW90YV91bmxvY2soZGlwKTsKLQlnZnMyX2FsbG9jX3B1dChkaXApOwotCi0JZ2ZzMl9nbG9ja19kcV91bmluaXRfbSgyLCBnaHMpOwotCi0JZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKLQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogZ2ZzMl9va190b19tb3ZlIC0gY2hlY2sgaWYgaXQncyBvayB0byBtb3ZlIGEgZGlyZWN0b3J5IHRvIGFub3RoZXIgZGlyZWN0b3J5Ci0gKiBAdGhpczogbW92ZSB0aGlzCi0gKiBAdG86IHRvIGhlcmUKLSAqCi0gKiBGb2xsb3cgQHRvIGJhY2sgdG8gdGhlIHJvb3QgYW5kIG1ha2Ugc3VyZSB3ZSBkb24ndCBlbmNvdW50ZXIgQHRoaXMKLSAqIEFzc3VtZXMgd2UgYWxyZWFkeSBob2xkIHRoZSByZW5hbWUgbG9jay4KLSAqCi0gKiBSZXR1cm5zOiBlcnJubwotICovCi0KLXN0YXRpYyBpbnQgZ2ZzMl9va190b19tb3ZlKHN0cnVjdCBnZnMyX2lub2RlICp0aGlzLCBzdHJ1Y3QgZ2ZzMl9pbm9kZSAqdG8pCi17Ci0Jc3RydWN0IGlub2RlICpkaXIgPSAmdG8tPmlfaW5vZGU7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRpci0+aV9zYjsKLQlzdHJ1Y3QgaW5vZGUgKnRtcDsKLQlpbnQgZXJyb3IgPSAwOwotCi0JaWdyYWIoZGlyKTsKLQotCWZvciAoOzspIHsKLQkJaWYgKGRpciA9PSAmdGhpcy0+aV9pbm9kZSkgewotCQkJZXJyb3IgPSAtRUlOVkFMOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGRpciA9PSBzYi0+c19yb290LT5kX2lub2RlKSB7Ci0JCQllcnJvciA9IDA7Ci0JCQlicmVhazsKLQkJfQotCi0JCXRtcCA9IGdmczJfbG9va3VwaShkaXIsICZnZnMyX3Fkb3Rkb3QsIDEpOwotCQlpZiAoSVNfRVJSKHRtcCkpIHsKLQkJCWVycm9yID0gUFRSX0VSUih0bXApOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpcHV0KGRpcik7Ci0JCWRpciA9IHRtcDsKLQl9Ci0KLQlpcHV0KGRpcik7Ci0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qKgotICogZ2ZzMl9yZW5hbWUgLSBSZW5hbWUgYSBmaWxlCi0gKiBAb2RpcjogUGFyZW50IGRpcmVjdG9yeSBvZiBvbGQgZmlsZSBuYW1lCi0gKiBAb2RlbnRyeTogVGhlIG9sZCBkZW50cnkgb2YgdGhlIGZpbGUKLSAqIEBuZGlyOiBQYXJlbnQgZGlyZWN0b3J5IG9mIG5ldyBmaWxlIG5hbWUKLSAqIEBuZGVudHJ5OiBUaGUgbmV3IGRlbnRyeSBvZiB0aGUgZmlsZQotICoKLSAqIFJldHVybnM6IGVycm5vCi0gKi8KLQotc3RhdGljIGludCBnZnMyX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9kaXIsIHN0cnVjdCBkZW50cnkgKm9kZW50cnksCi0JCSAgICAgICBzdHJ1Y3QgaW5vZGUgKm5kaXIsIHN0cnVjdCBkZW50cnkgKm5kZW50cnkpCi17Ci0Jc3RydWN0IGdmczJfaW5vZGUgKm9kaXAgPSBHRlMyX0kob2Rpcik7Ci0Jc3RydWN0IGdmczJfaW5vZGUgKm5kaXAgPSBHRlMyX0kobmRpcik7Ci0Jc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKG9kZW50cnktPmRfaW5vZGUpOwotCXN0cnVjdCBnZnMyX2lub2RlICpuaXAgPSBOVUxMOwotCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQihvZGlyKTsKLQlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZ2hzWzVdLCByX2doID0geyAuZ2hfZ2wgPSBOVUxMLCB9LCByaV9naDsKLQlzdHJ1Y3QgZ2ZzMl9yZ3JwZCAqbnJnZDsKLQl1bnNpZ25lZCBpbnQgbnVtX2doOwotCWludCBkaXJfcmVuYW1lID0gMDsKLQlpbnQgYWxsb2NfcmVxdWlyZWQgPSAwOwotCXVuc2lnbmVkIGludCB4OwotCWludCBlcnJvcjsKLQotCWlmIChuZGVudHJ5LT5kX2lub2RlKSB7Ci0JCW5pcCA9IEdGUzJfSShuZGVudHJ5LT5kX2lub2RlKTsKLQkJaWYgKGlwID09IG5pcCkKLQkJCXJldHVybiAwOwotCX0KLQotCWVycm9yID0gZ2ZzMl9yaW5kZXhfaG9sZChzZHAsICZyaV9naCk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQlpZiAob2RpcCAhPSBuZGlwKSB7Ci0JCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KHNkcC0+c2RfcmVuYW1lX2dsLCBMTV9TVF9FWENMVVNJVkUsCi0JCQkJCSAgIDAsICZyX2doKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBvdXQ7Ci0KLQkJaWYgKFNfSVNESVIoaXAtPmlfaW5vZGUuaV9tb2RlKSkgewotCQkJZGlyX3JlbmFtZSA9IDE7Ci0JCQkvKiBkb24ndCBtb3ZlIGEgZGlyY3RvcnkgaW50byBpdCdzIHN1YmRpciAqLwotCQkJZXJyb3IgPSBnZnMyX29rX3RvX21vdmUoaXAsIG5kaXApOwotCQkJaWYgKGVycm9yKQotCQkJCWdvdG8gb3V0X2d1bmxvY2tfcjsKLQkJfQotCX0KLQotCW51bV9naCA9IDE7Ci0JZ2ZzMl9ob2xkZXJfaW5pdChvZGlwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsIGdocyk7Ci0JaWYgKG9kaXAgIT0gbmRpcCkgewotCQlnZnMyX2hvbGRlcl9pbml0KG5kaXAtPmlfZ2wsIExNX1NUX0VYQ0xVU0lWRSwgMCwgZ2hzICsgbnVtX2doKTsKLQkJbnVtX2doKys7Ci0JfQotCWdmczJfaG9sZGVyX2luaXQoaXAtPmlfZ2wsIExNX1NUX0VYQ0xVU0lWRSwgMCwgZ2hzICsgbnVtX2doKTsKLQludW1fZ2grKzsKLQotCWlmIChuaXApIHsKLQkJZ2ZzMl9ob2xkZXJfaW5pdChuaXAtPmlfZ2wsIExNX1NUX0VYQ0xVU0lWRSwgMCwgZ2hzICsgbnVtX2doKTsKLQkJbnVtX2doKys7Ci0JCS8qIGdyYWIgdGhlIHJlc291cmNlIGxvY2sgZm9yIHVubGluayBmbGFnIHR3aWRkbGluZyAKLQkJICogdGhpcyBpcyB0aGUgY2FzZSBvZiB0aGUgdGFyZ2V0IGZpbGUgYWxyZWFkeSBleGlzdGluZwotCQkgKiBzbyB3ZSB1bmxpbmsgYmVmb3JlIGRvaW5nIHRoZSByZW5hbWUKLQkJICovCi0JCW5yZ2QgPSBnZnMyX2JsazJyZ3JwZChzZHAsIG5pcC0+aV9ub19hZGRyKTsKLQkJaWYgKG5yZ2QpCi0JCQlnZnMyX2hvbGRlcl9pbml0KG5yZ2QtPnJkX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsIGdocyArIG51bV9naCsrKTsKLQl9Ci0KLQlmb3IgKHggPSAwOyB4IDwgbnVtX2doOyB4KyspIHsKLQkJZXJyb3IgPSBnZnMyX2dsb2NrX25xKGdocyArIHgpOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dF9ndW5sb2NrOwotCX0KLQotCS8qIENoZWNrIG91dCB0aGUgb2xkIGRpcmVjdG9yeSAqLwotCi0JZXJyb3IgPSBnZnMyX3VubGlua19vayhvZGlwLCAmb2RlbnRyeS0+ZF9uYW1lLCBpcCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9ndW5sb2NrOwotCi0JLyogQ2hlY2sgb3V0IHRoZSBuZXcgZGlyZWN0b3J5ICovCi0KLQlpZiAobmlwKSB7Ci0JCWVycm9yID0gZ2ZzMl91bmxpbmtfb2sobmRpcCwgJm5kZW50cnktPmRfbmFtZSwgbmlwKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBvdXRfZ3VubG9jazsKLQotCQlpZiAoU19JU0RJUihuaXAtPmlfaW5vZGUuaV9tb2RlKSkgewotCQkJaWYgKG5pcC0+aV9lbnRyaWVzIDwgMikgewotCQkJCWlmIChnZnMyX2NvbnNpc3RfaW5vZGUobmlwKSkKLQkJCQkJZ2ZzMl9kaW5vZGVfcHJpbnQobmlwKTsKLQkJCQllcnJvciA9IC1FSU87Ci0JCQkJZ290byBvdXRfZ3VubG9jazsKLQkJCX0KLQkJCWlmIChuaXAtPmlfZW50cmllcyA+IDIpIHsKLQkJCQllcnJvciA9IC1FTk9URU1QVFk7Ci0JCQkJZ290byBvdXRfZ3VubG9jazsKLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCWVycm9yID0gZ2ZzMl9wZXJtaXNzaW9uKG5kaXIsIE1BWV9XUklURSB8IE1BWV9FWEVDLCAwKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBvdXRfZ3VubG9jazsKLQotCQllcnJvciA9IGdmczJfZGlyX2NoZWNrKG5kaXIsICZuZGVudHJ5LT5kX25hbWUsIE5VTEwpOwotCQlzd2l0Y2ggKGVycm9yKSB7Ci0JCWNhc2UgLUVOT0VOVDoKLQkJCWVycm9yID0gMDsKLQkJCWJyZWFrOwotCQljYXNlIDA6Ci0JCQllcnJvciA9IC1FRVhJU1Q7Ci0JCWRlZmF1bHQ6Ci0JCQlnb3RvIG91dF9ndW5sb2NrOwotCQl9OwotCi0JCWlmIChvZGlwICE9IG5kaXApIHsKLQkJCWlmICghbmRpcC0+aV9pbm9kZS5pX25saW5rKSB7Ci0JCQkJZXJyb3IgPSAtRUlOVkFMOwotCQkJCWdvdG8gb3V0X2d1bmxvY2s7Ci0JCQl9Ci0JCQlpZiAobmRpcC0+aV9lbnRyaWVzID09ICh1MzIpLTEpIHsKLQkJCQllcnJvciA9IC1FRkJJRzsKLQkJCQlnb3RvIG91dF9ndW5sb2NrOwotCQkJfQotCQkJaWYgKFNfSVNESVIoaXAtPmlfaW5vZGUuaV9tb2RlKSAmJgotCQkJICAgIG5kaXAtPmlfaW5vZGUuaV9ubGluayA9PSAodTMyKS0xKSB7Ci0JCQkJZXJyb3IgPSAtRU1MSU5LOwotCQkJCWdvdG8gb3V0X2d1bmxvY2s7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKiBDaGVjayBvdXQgdGhlIGRpciB0byBiZSByZW5hbWVkICovCi0KLQlpZiAoZGlyX3JlbmFtZSkgewotCQllcnJvciA9IGdmczJfcGVybWlzc2lvbihvZGVudHJ5LT5kX2lub2RlLCBNQVlfV1JJVEUsIDApOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dF9ndW5sb2NrOwotCX0KLQotCWlmIChuaXAgPT0gTlVMTCkKLQkJYWxsb2NfcmVxdWlyZWQgPSBnZnMyX2RpcmFkZF9hbGxvY19yZXF1aXJlZChuZGlyLCAmbmRlbnRyeS0+ZF9uYW1lKTsKLQllcnJvciA9IGFsbG9jX3JlcXVpcmVkOwotCWlmIChlcnJvciA8IDApCi0JCWdvdG8gb3V0X2d1bmxvY2s7Ci0JZXJyb3IgPSAwOwotCi0JaWYgKGFsbG9jX3JlcXVpcmVkKSB7Ci0JCXN0cnVjdCBnZnMyX2FsbG9jICphbCA9IGdmczJfYWxsb2NfZ2V0KG5kaXApOwotCQlpZiAoIWFsKSB7Ci0JCQllcnJvciA9IC1FTk9NRU07Ci0JCQlnb3RvIG91dF9ndW5sb2NrOwotCQl9Ci0KLQkJZXJyb3IgPSBnZnMyX3F1b3RhX2xvY2tfY2hlY2sobmRpcCk7Ci0JCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0X2FsbG9jOwotCi0JCWFsLT5hbF9yZXF1ZXN0ZWQgPSBzZHAtPnNkX21heF9kaXJyZXM7Ci0KLQkJZXJyb3IgPSBnZnMyX2lucGxhY2VfcmVzZXJ2ZV9yaShuZGlwKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBvdXRfZ3VubG9ja19xOwotCi0JCWVycm9yID0gZ2ZzMl90cmFuc19iZWdpbihzZHAsIHNkcC0+c2RfbWF4X2RpcnJlcyArCi0JCQkJCSBnZnMyX3JnX2Jsb2NrcyhhbCkgKwotCQkJCQkgNCAqIFJFU19ESU5PREUgKyA0ICogUkVTX0xFQUYgKwotCQkJCQkgUkVTX1NUQVRGUyArIFJFU19RVU9UQSArIDQsIDApOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dF9pcHJlc2VydjsKLQl9IGVsc2UgewotCQllcnJvciA9IGdmczJfdHJhbnNfYmVnaW4oc2RwLCA0ICogUkVTX0RJTk9ERSArCi0JCQkJCSA1ICogUkVTX0xFQUYgKyA0LCAwKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBvdXRfZ3VubG9jazsKLQl9Ci0KLQkvKiBSZW1vdmUgdGhlIHRhcmdldCBmaWxlLCBpZiBpdCBleGlzdHMgKi8KLQotCWlmIChuaXApIHsKLQkJaWYgKFNfSVNESVIobmlwLT5pX2lub2RlLmlfbW9kZSkpCi0JCQllcnJvciA9IGdmczJfcm1kaXJpKG5kaXAsICZuZGVudHJ5LT5kX25hbWUsIG5pcCk7Ci0JCWVsc2UgewotCQkJZXJyb3IgPSBnZnMyX2Rpcl9kZWwobmRpcCwgJm5kZW50cnktPmRfbmFtZSk7Ci0JCQlpZiAoZXJyb3IpCi0JCQkJZ290byBvdXRfZW5kX3RyYW5zOwotCQkJZXJyb3IgPSBnZnMyX2NoYW5nZV9ubGluayhuaXAsIC0xKTsKLQkJfQotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dF9lbmRfdHJhbnM7Ci0JfQotCi0JaWYgKGRpcl9yZW5hbWUpIHsKLQkJZXJyb3IgPSBnZnMyX2NoYW5nZV9ubGluayhuZGlwLCArMSk7Ci0JCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0X2VuZF90cmFuczsKLQkJZXJyb3IgPSBnZnMyX2NoYW5nZV9ubGluayhvZGlwLCAtMSk7Ci0JCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0X2VuZF90cmFuczsKLQotCQllcnJvciA9IGdmczJfZGlyX212aW5vKGlwLCAmZ2ZzMl9xZG90ZG90LCBuZGlwLCBEVF9ESVIpOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dF9lbmRfdHJhbnM7Ci0JfSBlbHNlIHsKLQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpkaWJoOwotCQllcnJvciA9IGdmczJfbWV0YV9pbm9kZV9idWZmZXIoaXAsICZkaWJoKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBvdXRfZW5kX3RyYW5zOwotCQlpcC0+aV9pbm9kZS5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwotCQlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgZGliaCwgMSk7Ci0JCWdmczJfZGlub2RlX291dChpcCwgZGliaC0+Yl9kYXRhKTsKLQkJYnJlbHNlKGRpYmgpOwotCX0KLQotCWVycm9yID0gZ2ZzMl9kaXJfZGVsKG9kaXAsICZvZGVudHJ5LT5kX25hbWUpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfZW5kX3RyYW5zOwotCi0JZXJyb3IgPSBnZnMyX2Rpcl9hZGQobmRpciwgJm5kZW50cnktPmRfbmFtZSwgaXAsIElGMkRUKGlwLT5pX2lub2RlLmlfbW9kZSkpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfZW5kX3RyYW5zOwotCi1vdXRfZW5kX3RyYW5zOgotCWdmczJfdHJhbnNfZW5kKHNkcCk7Ci1vdXRfaXByZXNlcnY6Ci0JaWYgKGFsbG9jX3JlcXVpcmVkKQotCQlnZnMyX2lucGxhY2VfcmVsZWFzZShuZGlwKTsKLW91dF9ndW5sb2NrX3E6Ci0JaWYgKGFsbG9jX3JlcXVpcmVkKQotCQlnZnMyX3F1b3RhX3VubG9jayhuZGlwKTsKLW91dF9hbGxvYzoKLQlpZiAoYWxsb2NfcmVxdWlyZWQpCi0JCWdmczJfYWxsb2NfcHV0KG5kaXApOwotb3V0X2d1bmxvY2s6Ci0Jd2hpbGUgKHgtLSkgewotCQlnZnMyX2dsb2NrX2RxKGdocyArIHgpOwotCQlnZnMyX2hvbGRlcl91bmluaXQoZ2hzICsgeCk7Ci0JfQotb3V0X2d1bmxvY2tfcjoKLQlpZiAocl9naC5naF9nbCkKLQkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJnJfZ2gpOwotb3V0OgotCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZyaV9naCk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi0vKioKLSAqIGdmczJfZm9sbG93X2xpbmsgLSBGb2xsb3cgYSBzeW1ib2xpYyBsaW5rCi0gKiBAZGVudHJ5OiBUaGUgZGVudHJ5IG9mIHRoZSBsaW5rCi0gKiBAbmQ6IERhdGEgdGhhdCB3ZSBwYXNzIHRvIHZmc19mb2xsb3dfbGluaygpCi0gKgotICogVGhpcyBjYW4gaGFuZGxlIHN5bWxpbmtzIG9mIGFueSBzaXplLgotICoKLSAqIFJldHVybnM6IDAgb24gc3VjY2VzcyBvciBlcnJvciBjb2RlCi0gKi8KLQotc3RhdGljIHZvaWQgKmdmczJfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKLXsKLQlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koZGVudHJ5LT5kX2lub2RlKTsKLQlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgaV9naDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpYmg7Ci0JdW5zaWduZWQgaW50IHgsIHNpemU7Ci0JY2hhciAqYnVmOwotCWludCBlcnJvcjsKLQotCWdmczJfaG9sZGVyX2luaXQoaXAtPmlfZ2wsIExNX1NUX1NIQVJFRCwgMCwgJmlfZ2gpOwotCWVycm9yID0gZ2ZzMl9nbG9ja19ucSgmaV9naCk7Ci0JaWYgKGVycm9yKSB7Ci0JCWdmczJfaG9sZGVyX3VuaW5pdCgmaV9naCk7Ci0JCW5kX3NldF9saW5rKG5kLCBFUlJfUFRSKGVycm9yKSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXNpemUgPSAodW5zaWduZWQgaW50KWlfc2l6ZV9yZWFkKCZpcC0+aV9pbm9kZSk7Ci0JaWYgKHNpemUgPT0gMCkgewotCQlnZnMyX2NvbnNpc3RfaW5vZGUoaXApOwotCQlidWYgPSBFUlJfUFRSKC1FSU8pOwotCQlnb3RvIG91dDsKLQl9Ci0KLQllcnJvciA9IGdmczJfbWV0YV9pbm9kZV9idWZmZXIoaXAsICZkaWJoKTsKLQlpZiAoZXJyb3IpIHsKLQkJYnVmID0gRVJSX1BUUihlcnJvcik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXggPSBzaXplICsgMTsKLQlidWYgPSBrbWFsbG9jKHgsIEdGUF9OT0ZTKTsKLQlpZiAoIWJ1ZikKLQkJYnVmID0gRVJSX1BUUigtRU5PTUVNKTsKLQllbHNlCi0JCW1lbWNweShidWYsIGRpYmgtPmJfZGF0YSArIHNpemVvZihzdHJ1Y3QgZ2ZzMl9kaW5vZGUpLCB4KTsKLQlicmVsc2UoZGliaCk7Ci1vdXQ6Ci0JZ2ZzMl9nbG9ja19kcV91bmluaXQoJmlfZ2gpOwotCW5kX3NldF9saW5rKG5kLCBidWYpOwotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCBnZnMyX3B1dF9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQsIHZvaWQgKnApCi17Ci0JY2hhciAqcyA9IG5kX2dldF9saW5rKG5kKTsKLQlpZiAoIUlTX0VSUihzKSkKLQkJa2ZyZWUocyk7Ci19Ci0KLS8qKgotICogZ2ZzMl9wZXJtaXNzaW9uIC0KLSAqIEBpbm9kZTogVGhlIGlub2RlCi0gKiBAbWFzazogVGhlIG1hc2sgdG8gYmUgdGVzdGVkCi0gKiBAZmxhZ3M6IEluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMgYW4gUkNVIHBhdGggd2FsayBvciBub3QKLSAqCi0gKiBUaGlzIG1heSBiZSBjYWxsZWQgZnJvbSB0aGUgVkZTIGRpcmVjdGx5LCBvciBmcm9tIHdpdGhpbiBHRlMyIHdpdGggdGhlCi0gKiBpbm9kZSBsb2NrZWQsIHNvIHdlIGxvb2sgdG8gc2VlIGlmIHRoZSBnbG9jayBpcyBhbHJlYWR5IGxvY2tlZCBhbmQgb25seQotICogbG9jayB0aGUgZ2xvY2sgaWYgaXRzIG5vdCBhbHJlYWR5IGJlZW4gZG9uZS4KLSAqCi0gKiBSZXR1cm5zOiBlcnJubwotICovCi0KLWludCBnZnMyX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIHVuc2lnbmVkIGludCBmbGFncykKLXsKLQlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXA7Ci0Jc3RydWN0IGdmczJfaG9sZGVyIGlfZ2g7Ci0JaW50IGVycm9yOwotCWludCB1bmxvY2sgPSAwOwotCi0KLQlpcCA9IEdGUzJfSShpbm9kZSk7Ci0JaWYgKGdmczJfZ2xvY2tfaXNfbG9ja2VkX2J5X21lKGlwLT5pX2dsKSA9PSBOVUxMKSB7Ci0JCWlmIChmbGFncyAmIElQRVJNX0ZMQUdfUkNVKQotCQkJcmV0dXJuIC1FQ0hJTEQ7Ci0JCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KGlwLT5pX2dsLCBMTV9TVF9TSEFSRUQsIExNX0ZMQUdfQU5ZLCAmaV9naCk7Ci0JCWlmIChlcnJvcikKLQkJCXJldHVybiBlcnJvcjsKLQkJdW5sb2NrID0gMTsKLQl9Ci0KLQlpZiAoKG1hc2sgJiBNQVlfV1JJVEUpICYmIElTX0lNTVVUQUJMRShpbm9kZSkpCi0JCWVycm9yID0gLUVBQ0NFUzsKLQllbHNlCi0JCWVycm9yID0gZ2VuZXJpY19wZXJtaXNzaW9uKGlub2RlLCBtYXNrLCBmbGFncywgZ2ZzMl9jaGVja19hY2wpOwotCWlmICh1bmxvY2spCi0JCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZpX2doKTsKLQotCXJldHVybiBlcnJvcjsKLX0KLQotc3RhdGljIGludCBzZXRhdHRyX2Nob3duKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpYXR0ciAqYXR0cikKLXsKLQlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koaW5vZGUpOwotCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQihpbm9kZSk7Ci0JdTMyIG91aWQsIG9naWQsIG51aWQsIG5naWQ7Ci0JaW50IGVycm9yOwotCi0Jb3VpZCA9IGlub2RlLT5pX3VpZDsKLQlvZ2lkID0gaW5vZGUtPmlfZ2lkOwotCW51aWQgPSBhdHRyLT5pYV91aWQ7Ci0JbmdpZCA9IGF0dHItPmlhX2dpZDsKLQotCWlmICghKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9VSUQpIHx8IG91aWQgPT0gbnVpZCkKLQkJb3VpZCA9IG51aWQgPSBOT19RVU9UQV9DSEFOR0U7Ci0JaWYgKCEoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX0dJRCkgfHwgb2dpZCA9PSBuZ2lkKQotCQlvZ2lkID0gbmdpZCA9IE5PX1FVT1RBX0NIQU5HRTsKLQotCWlmICghZ2ZzMl9hbGxvY19nZXQoaXApKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWVycm9yID0gZ2ZzMl9xdW90YV9sb2NrKGlwLCBudWlkLCBuZ2lkKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X2FsbG9jOwotCi0JaWYgKG91aWQgIT0gTk9fUVVPVEFfQ0hBTkdFIHx8IG9naWQgIT0gTk9fUVVPVEFfQ0hBTkdFKSB7Ci0JCWVycm9yID0gZ2ZzMl9xdW90YV9jaGVjayhpcCwgbnVpZCwgbmdpZCk7Ci0JCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0X2d1bmxvY2tfcTsKLQl9Ci0KLQllcnJvciA9IGdmczJfdHJhbnNfYmVnaW4oc2RwLCBSRVNfRElOT0RFICsgMiAqIFJFU19RVU9UQSwgMCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9ndW5sb2NrX3E7Ci0KLQllcnJvciA9IGdmczJfc2V0YXR0cl9zaW1wbGUoaXAsIGF0dHIpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfZW5kX3RyYW5zOwotCi0JaWYgKG91aWQgIT0gTk9fUVVPVEFfQ0hBTkdFIHx8IG9naWQgIT0gTk9fUVVPVEFfQ0hBTkdFKSB7Ci0JCXU2NCBibG9ja3MgPSBnZnMyX2dldF9pbm9kZV9ibG9ja3MoJmlwLT5pX2lub2RlKTsKLQkJZ2ZzMl9xdW90YV9jaGFuZ2UoaXAsIC1ibG9ja3MsIG91aWQsIG9naWQpOwotCQlnZnMyX3F1b3RhX2NoYW5nZShpcCwgYmxvY2tzLCBudWlkLCBuZ2lkKTsKLQl9Ci0KLW91dF9lbmRfdHJhbnM6Ci0JZ2ZzMl90cmFuc19lbmQoc2RwKTsKLW91dF9ndW5sb2NrX3E6Ci0JZ2ZzMl9xdW90YV91bmxvY2soaXApOwotb3V0X2FsbG9jOgotCWdmczJfYWxsb2NfcHV0KGlwKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qKgotICogZ2ZzMl9zZXRhdHRyIC0gQ2hhbmdlIGF0dHJpYnV0ZXMgb24gYW4gaW5vZGUKLSAqIEBkZW50cnk6IFRoZSBkZW50cnkgd2hpY2ggaXMgY2hhbmdpbmcKLSAqIEBhdHRyOiBUaGUgc3RydWN0dXJlIGRlc2NyaWJpbmcgdGhlIGNoYW5nZQotICoKLSAqIFRoZSBWRlMgbGF5ZXIgd2FudHMgdG8gY2hhbmdlIG9uZSBvciBtb3JlIG9mIGFuIGlub2RlcyBhdHRyaWJ1dGVzLiAgV3JpdGUKLSAqIHRoYXQgY2hhbmdlIG91dCB0byBkaXNrLgotICoKLSAqIFJldHVybnM6IGVycm5vCi0gKi8KLQotc3RhdGljIGludCBnZnMyX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpCi17Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koaW5vZGUpOwotCXN0cnVjdCBnZnMyX2hvbGRlciBpX2doOwotCWludCBlcnJvcjsKLQotCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KGlwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsICZpX2doKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCWVycm9yID0gLUVQRVJNOwotCWlmIChJU19JTU1VVEFCTEUoaW5vZGUpIHx8IElTX0FQUEVORChpbm9kZSkpCi0JCWdvdG8gb3V0OwotCi0JZXJyb3IgPSBpbm9kZV9jaGFuZ2Vfb2soaW5vZGUsIGF0dHIpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXQ7Ci0KLQlpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpCi0JCWVycm9yID0gZ2ZzMl9zZXRhdHRyX3NpemUoaW5vZGUsIGF0dHItPmlhX3NpemUpOwotCWVsc2UgaWYgKGF0dHItPmlhX3ZhbGlkICYgKEFUVFJfVUlEIHwgQVRUUl9HSUQpKQotCQllcnJvciA9IHNldGF0dHJfY2hvd24oaW5vZGUsIGF0dHIpOwotCWVsc2UgaWYgKChhdHRyLT5pYV92YWxpZCAmIEFUVFJfTU9ERSkgJiYgSVNfUE9TSVhBQ0woaW5vZGUpKQotCQllcnJvciA9IGdmczJfYWNsX2NobW9kKGlwLCBhdHRyKTsKLQllbHNlCi0JCWVycm9yID0gZ2ZzMl9zZXRhdHRyX3NpbXBsZShpcCwgYXR0cik7Ci0KLW91dDoKLQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmaV9naCk7Ci0JaWYgKCFlcnJvcikKLQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi0vKioKLSAqIGdmczJfZ2V0YXR0ciAtIFJlYWQgb3V0IGFuIGlub2RlJ3MgYXR0cmlidXRlcwotICogQG1udDogVGhlIHZmc21vdW50IHRoZSBpbm9kZSBpcyBiZWluZyBhY2Nlc3NlZCBmcm9tCi0gKiBAZGVudHJ5OiBUaGUgZGVudHJ5IHRvIHN0YXQKLSAqIEBzdGF0OiBUaGUgaW5vZGUncyBzdGF0cwotICoKLSAqIFRoaXMgbWF5IGJlIGNhbGxlZCBmcm9tIHRoZSBWRlMgZGlyZWN0bHksIG9yIGZyb20gd2l0aGluIEdGUzIgd2l0aCB0aGUKLSAqIGlub2RlIGxvY2tlZCwgc28gd2UgbG9vayB0byBzZWUgaWYgdGhlIGdsb2NrIGlzIGFscmVhZHkgbG9ja2VkIGFuZCBvbmx5Ci0gKiBsb2NrIHRoZSBnbG9jayBpZiBpdHMgbm90IGFscmVhZHkgYmVlbiBkb25lLiBOb3RlIHRoYXQgaXRzIHRoZSBORlMKLSAqIHJlYWRkaXJwbHVzIG9wZXJhdGlvbiB3aGljaCBjYXVzZXMgdGhpcyB0byBiZSBjYWxsZWQgKGZyb20gZmlsbGRpcikKLSAqIHdpdGggdGhlIGdsb2NrIGFscmVhZHkgaGVsZC4KLSAqCi0gKiBSZXR1cm5zOiBlcnJubwotICovCi0KLXN0YXRpYyBpbnQgZ2ZzMl9nZXRhdHRyKHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQlzdHJ1Y3Qga3N0YXQgKnN0YXQpCi17Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koaW5vZGUpOwotCXN0cnVjdCBnZnMyX2hvbGRlciBnaDsKLQlpbnQgZXJyb3I7Ci0JaW50IHVubG9jayA9IDA7Ci0KLQlpZiAoZ2ZzMl9nbG9ja19pc19sb2NrZWRfYnlfbWUoaXAtPmlfZ2wpID09IE5VTEwpIHsKLQkJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoaXAtPmlfZ2wsIExNX1NUX1NIQVJFRCwgTE1fRkxBR19BTlksICZnaCk7Ci0JCWlmIChlcnJvcikKLQkJCXJldHVybiBlcnJvcjsKLQkJdW5sb2NrID0gMTsKLQl9Ci0KLQlnZW5lcmljX2ZpbGxhdHRyKGlub2RlLCBzdGF0KTsKLQlpZiAodW5sb2NrKQotCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmZ2gpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZ2ZzMl9zZXR4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUsIGludCBmbGFncykKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwotCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7Ci0Jc3RydWN0IGdmczJfaG9sZGVyIGdoOwotCWludCByZXQ7Ci0KLQlnZnMyX2hvbGRlcl9pbml0KGlwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsICZnaCk7Ci0JcmV0ID0gZ2ZzMl9nbG9ja19ucSgmZ2gpOwotCWlmIChyZXQgPT0gMCkgewotCQlyZXQgPSBnZW5lcmljX3NldHhhdHRyKGRlbnRyeSwgbmFtZSwgZGF0YSwgc2l6ZSwgZmxhZ3MpOwotCQlnZnMyX2dsb2NrX2RxKCZnaCk7Ci0JfQotCWdmczJfaG9sZGVyX3VuaW5pdCgmZ2gpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGdmczJfZ2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAotCQkJICAgICB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwotCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7Ci0Jc3RydWN0IGdmczJfaG9sZGVyIGdoOwotCWludCByZXQ7Ci0KLQlnZnMyX2hvbGRlcl9pbml0KGlwLT5pX2dsLCBMTV9TVF9TSEFSRUQsIExNX0ZMQUdfQU5ZLCAmZ2gpOwotCXJldCA9IGdmczJfZ2xvY2tfbnEoJmdoKTsKLQlpZiAocmV0ID09IDApIHsKLQkJcmV0ID0gZ2VuZXJpY19nZXR4YXR0cihkZW50cnksIG5hbWUsIGRhdGEsIHNpemUpOwotCQlnZnMyX2dsb2NrX2RxKCZnaCk7Ci0JfQotCWdmczJfaG9sZGVyX3VuaW5pdCgmZ2gpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZ2ZzMl9yZW1vdmV4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koaW5vZGUpOwotCXN0cnVjdCBnZnMyX2hvbGRlciBnaDsKLQlpbnQgcmV0OwotCi0JZ2ZzMl9ob2xkZXJfaW5pdChpcC0+aV9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLCAmZ2gpOwotCXJldCA9IGdmczJfZ2xvY2tfbnEoJmdoKTsKLQlpZiAocmV0ID09IDApIHsKLQkJcmV0ID0gZ2VuZXJpY19yZW1vdmV4YXR0cihkZW50cnksIG5hbWUpOwotCQlnZnMyX2dsb2NrX2RxKCZnaCk7Ci0JfQotCWdmczJfaG9sZGVyX3VuaW5pdCgmZ2gpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZ2ZzMl9maWVtYXAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpZW1hcF9leHRlbnRfaW5mbyAqZmllaW5mbywKLQkJICAgICAgIHU2NCBzdGFydCwgdTY0IGxlbikKLXsKLQlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koaW5vZGUpOwotCXN0cnVjdCBnZnMyX2hvbGRlciBnaDsKLQlpbnQgcmV0OwotCi0JcmV0ID0gZmllbWFwX2NoZWNrX2ZsYWdzKGZpZWluZm8sIEZJRU1BUF9GTEFHX1NZTkMpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0KLQlyZXQgPSBnZnMyX2dsb2NrX25xX2luaXQoaXAtPmlfZ2wsIExNX1NUX1NIQVJFRCwgMCwgJmdoKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKLQotCWlmIChnZnMyX2lzX3N0dWZmZWQoaXApKSB7Ci0JCXU2NCBwaHlzID0gaXAtPmlfbm9fYWRkciA8PCBpbm9kZS0+aV9ibGtiaXRzOwotCQl1NjQgc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKLQkJdTMyIGZsYWdzID0gRklFTUFQX0VYVEVOVF9MQVNUfEZJRU1BUF9FWFRFTlRfTk9UX0FMSUdORUR8Ci0JCQkgICAgRklFTUFQX0VYVEVOVF9EQVRBX0lOTElORTsKLQkJcGh5cyArPSBzaXplb2Yoc3RydWN0IGdmczJfZGlub2RlKTsKLQkJcGh5cyArPSBzdGFydDsKLQkJaWYgKHN0YXJ0ICsgbGVuID4gc2l6ZSkKLQkJCWxlbiA9IHNpemUgLSBzdGFydDsKLQkJaWYgKHN0YXJ0IDwgc2l6ZSkKLQkJCXJldCA9IGZpZW1hcF9maWxsX25leHRfZXh0ZW50KGZpZWluZm8sIHN0YXJ0LCBwaHlzLAotCQkJCQkJICAgICAgbGVuLCBmbGFncyk7Ci0JCWlmIChyZXQgPT0gMSkKLQkJCXJldCA9IDA7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gX19nZW5lcmljX2Jsb2NrX2ZpZW1hcChpbm9kZSwgZmllaW5mbywgc3RhcnQsIGxlbiwKLQkJCQkJICAgICBnZnMyX2Jsb2NrX21hcCk7Ci0JfQotCi0JZ2ZzMl9nbG9ja19kcV91bmluaXQoJmdoKTsKLW91dDoKLQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQlyZXR1cm4gcmV0OwotfQotCi1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBnZnMyX2ZpbGVfaW9wcyA9IHsKLQkucGVybWlzc2lvbiA9IGdmczJfcGVybWlzc2lvbiwKLQkuc2V0YXR0ciA9IGdmczJfc2V0YXR0ciwKLQkuZ2V0YXR0ciA9IGdmczJfZ2V0YXR0ciwKLQkuc2V0eGF0dHIgPSBnZnMyX3NldHhhdHRyLAotCS5nZXR4YXR0ciA9IGdmczJfZ2V0eGF0dHIsCi0JLmxpc3R4YXR0ciA9IGdmczJfbGlzdHhhdHRyLAotCS5yZW1vdmV4YXR0ciA9IGdmczJfcmVtb3ZleGF0dHIsCi0JLmZpZW1hcCA9IGdmczJfZmllbWFwLAotfTsKLQotY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZ2ZzMl9kaXJfaW9wcyA9IHsKLQkuY3JlYXRlID0gZ2ZzMl9jcmVhdGUsCi0JLmxvb2t1cCA9IGdmczJfbG9va3VwLAotCS5saW5rID0gZ2ZzMl9saW5rLAotCS51bmxpbmsgPSBnZnMyX3VubGluaywKLQkuc3ltbGluayA9IGdmczJfc3ltbGluaywKLQkubWtkaXIgPSBnZnMyX21rZGlyLAotCS5ybWRpciA9IGdmczJfcm1kaXIsCi0JLm1rbm9kID0gZ2ZzMl9ta25vZCwKLQkucmVuYW1lID0gZ2ZzMl9yZW5hbWUsCi0JLnBlcm1pc3Npb24gPSBnZnMyX3Blcm1pc3Npb24sCi0JLnNldGF0dHIgPSBnZnMyX3NldGF0dHIsCi0JLmdldGF0dHIgPSBnZnMyX2dldGF0dHIsCi0JLnNldHhhdHRyID0gZ2ZzMl9zZXR4YXR0ciwKLQkuZ2V0eGF0dHIgPSBnZnMyX2dldHhhdHRyLAotCS5saXN0eGF0dHIgPSBnZnMyX2xpc3R4YXR0ciwKLQkucmVtb3ZleGF0dHIgPSBnZnMyX3JlbW92ZXhhdHRyLAotCS5maWVtYXAgPSBnZnMyX2ZpZW1hcCwKLX07Ci0KLWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGdmczJfc3ltbGlua19pb3BzID0gewotCS5yZWFkbGluayA9IGdlbmVyaWNfcmVhZGxpbmssCi0JLmZvbGxvd19saW5rID0gZ2ZzMl9mb2xsb3dfbGluaywKLQkucHV0X2xpbmsgPSBnZnMyX3B1dF9saW5rLAotCS5wZXJtaXNzaW9uID0gZ2ZzMl9wZXJtaXNzaW9uLAotCS5zZXRhdHRyID0gZ2ZzMl9zZXRhdHRyLAotCS5nZXRhdHRyID0gZ2ZzMl9nZXRhdHRyLAotCS5zZXR4YXR0ciA9IGdmczJfc2V0eGF0dHIsCi0JLmdldHhhdHRyID0gZ2ZzMl9nZXR4YXR0ciwKLQkubGlzdHhhdHRyID0gZ2ZzMl9saXN0eGF0dHIsCi0JLnJlbW92ZXhhdHRyID0gZ2ZzMl9yZW1vdmV4YXR0ciwKLQkuZmllbWFwID0gZ2ZzMl9maWVtYXAsCi19OwotCmRpZmYgLS1naXQgYS9mcy9nZnMyL3JncnAuYyBiL2ZzL2dmczIvcmdycC5jCmluZGV4IDZmY2FlODQuLjliNzgwZGYgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvcmdycC5jCisrKyBiL2ZzL2dmczIvcmdycC5jCkBAIC03OCwxMCArNzgsMTEgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGdmczJfc2V0Yml0KHN0cnVjdCBnZnMyX3JncnBkICpyZ2QsIHVuc2lnbmVkIGNoYXIgKmJ1ZjEsCiAJCQkgICAgICAgdW5zaWduZWQgY2hhciAqYnVmMiwgdW5zaWduZWQgaW50IG9mZnNldCwKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgYnVmbGVuLCB1MzIgYmxvY2ssCisJCQkgICAgICAgc3RydWN0IGdmczJfYml0bWFwICpiaSwgdTMyIGJsb2NrLAogCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgbmV3X3N0YXRlKQogewogCXVuc2lnbmVkIGNoYXIgKmJ5dGUxLCAqYnl0ZTIsICplbmQsIGN1cl9zdGF0ZTsKKwl1bnNpZ25lZCBpbnQgYnVmbGVuID0gYmktPmJpX2xlbjsKIAljb25zdCB1bnNpZ25lZCBpbnQgYml0ID0gKGJsb2NrICUgR0ZTMl9OQkJZKSAqIEdGUzJfQklUX1NJWkU7CiAKIAlieXRlMSA9IGJ1ZjEgKyBvZmZzZXQgKyAoYmxvY2sgLyBHRlMyX05CQlkpOwpAQCAtOTIsNiArOTMsMTYgQEAKIAljdXJfc3RhdGUgPSAoKmJ5dGUxID4+IGJpdCkgJiBHRlMyX0JJVF9NQVNLOwogCiAJaWYgKHVubGlrZWx5KCF2YWxpZF9jaGFuZ2VbbmV3X3N0YXRlICogNCArIGN1cl9zdGF0ZV0pKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkdGUzI6IGJ1Zl9ibGsgPSAweCVsbHggb2xkX3N0YXRlPSVkLCAiCisJCSAgICAgICAibmV3X3N0YXRlPSVkXG4iLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylibG9jaywgY3VyX3N0YXRlLCBuZXdfc3RhdGUpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJHRlMyOiByZ3JwPTB4JWxseCBiaV9zdGFydD0weCVseFxuIiwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcmdkLT5yZF9hZGRyLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpYmktPmJpX3N0YXJ0KTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiR0ZTMjogYmlfb2Zmc2V0PTB4JWx4IGJpX2xlbj0weCVseFxuIiwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nKWJpLT5iaV9vZmZzZXQsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyliaS0+YmlfbGVuKTsKKwkJZHVtcF9zdGFjaygpOwogCQlnZnMyX2NvbnNpc3RfcmdycGQocmdkKTsKIAkJcmV0dXJuOwogCX0KQEAgLTM4MSw2ICszOTIsNyBAQAogCiAJCWlmIChnbCkgewogCQkJZ2wtPmdsX29iamVjdCA9IE5VTEw7CisJCQlnZnMyX2dsb2NrX2FkZF90b19scnUoZ2wpOwogCQkJZ2ZzMl9nbG9ja19wdXQoZ2wpOwogCQl9CiAKQEAgLTEzNjUsNyArMTM3Nyw3IEBACiAKIAlnZnMyX3RyYW5zX2FkZF9iaChyZ2QtPnJkX2dsLCBiaS0+YmlfYmgsIDEpOwogCWdmczJfc2V0Yml0KHJnZCwgYmktPmJpX2JoLT5iX2RhdGEsIGJpLT5iaV9jbG9uZSwgYmktPmJpX29mZnNldCwKLQkJICAgIGJpLT5iaV9sZW4sIGJsaywgbmV3X3N0YXRlKTsKKwkJICAgIGJpLCBibGssIG5ld19zdGF0ZSk7CiAJZ29hbCA9IGJsazsKIAl3aGlsZSAoKm4gPCBlbGVuKSB7CiAJCWdvYWwrKzsKQEAgLTEzNzUsNyArMTM4Nyw3IEBACiAJCSAgICBHRlMyX0JMS1NUX0ZSRUUpCiAJCQlicmVhazsKIAkJZ2ZzMl9zZXRiaXQocmdkLCBiaS0+YmlfYmgtPmJfZGF0YSwgYmktPmJpX2Nsb25lLCBiaS0+Ymlfb2Zmc2V0LAotCQkJICAgIGJpLT5iaV9sZW4sIGdvYWwsIG5ld19zdGF0ZSk7CisJCQkgICAgYmksIGdvYWwsIG5ld19zdGF0ZSk7CiAJCSgqbikrKzsKIAl9CiBvdXQ6CkBAIC0xNDMyLDcgKzE0NDQsNyBAQAogCQl9CiAJCWdmczJfdHJhbnNfYWRkX2JoKHJnZC0+cmRfZ2wsIGJpLT5iaV9iaCwgMSk7CiAJCWdmczJfc2V0Yml0KHJnZCwgYmktPmJpX2JoLT5iX2RhdGEsIE5VTEwsIGJpLT5iaV9vZmZzZXQsCi0JCQkgICAgYmktPmJpX2xlbiwgYnVmX2JsaywgbmV3X3N0YXRlKTsKKwkJCSAgICBiaSwgYnVmX2JsaywgbmV3X3N0YXRlKTsKIAl9CiAKIAlyZXR1cm4gcmdkOwpAQCAtMTYxNyw2ICsxNjI5LDEwIEBACiAJZ2ZzMl9yZ3JwX291dChyZ2QsIHJnZC0+cmRfYml0c1swXS5iaV9iaC0+Yl9kYXRhKTsKIAogCWdmczJfdHJhbnNfYWRkX3JnKHJnZCk7CisKKwkvKiBEaXJlY3RvcmllcyBrZWVwIHRoZWlyIGRhdGEgaW4gdGhlIG1ldGFkYXRhIGFkZHJlc3Mgc3BhY2UgKi8KKwlpZiAoaXAtPmlfZGVwdGgpCisJCWdmczJfbWV0YV93aXBlKGlwLCBic3RhcnQsIGJsZW4pOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2ZzL2dmczIvc3VwZXIuYyBiL2ZzL2dmczIvc3VwZXIuYwppbmRleCBiOWYyOGU2Li5lZDU0MGU3IDEwMDY0NAotLS0gYS9mcy9nZnMyL3N1cGVyLmMKKysrIGIvZnMvZ2ZzMi9zdXBlci5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KKyNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpAQCAtNzAwLDExICs3MDEsNDcgQEAKIAltdXRleF91bmxvY2soJnNkcC0+c2RfZnJlZXplX2xvY2spOwogfQogCit2b2lkIGdmczJfZGlub2RlX291dChjb25zdCBzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHZvaWQgKmJ1ZikKK3sKKwlzdHJ1Y3QgZ2ZzMl9kaW5vZGUgKnN0ciA9IGJ1ZjsKKworCXN0ci0+ZGlfaGVhZGVyLm1oX21hZ2ljID0gY3B1X3RvX2JlMzIoR0ZTMl9NQUdJQyk7CisJc3RyLT5kaV9oZWFkZXIubWhfdHlwZSA9IGNwdV90b19iZTMyKEdGUzJfTUVUQVRZUEVfREkpOworCXN0ci0+ZGlfaGVhZGVyLm1oX2Zvcm1hdCA9IGNwdV90b19iZTMyKEdGUzJfRk9STUFUX0RJKTsKKwlzdHItPmRpX251bS5ub19hZGRyID0gY3B1X3RvX2JlNjQoaXAtPmlfbm9fYWRkcik7CisJc3RyLT5kaV9udW0ubm9fZm9ybWFsX2lubyA9IGNwdV90b19iZTY0KGlwLT5pX25vX2Zvcm1hbF9pbm8pOworCXN0ci0+ZGlfbW9kZSA9IGNwdV90b19iZTMyKGlwLT5pX2lub2RlLmlfbW9kZSk7CisJc3RyLT5kaV91aWQgPSBjcHVfdG9fYmUzMihpcC0+aV9pbm9kZS5pX3VpZCk7CisJc3RyLT5kaV9naWQgPSBjcHVfdG9fYmUzMihpcC0+aV9pbm9kZS5pX2dpZCk7CisJc3RyLT5kaV9ubGluayA9IGNwdV90b19iZTMyKGlwLT5pX2lub2RlLmlfbmxpbmspOworCXN0ci0+ZGlfc2l6ZSA9IGNwdV90b19iZTY0KGlfc2l6ZV9yZWFkKCZpcC0+aV9pbm9kZSkpOworCXN0ci0+ZGlfYmxvY2tzID0gY3B1X3RvX2JlNjQoZ2ZzMl9nZXRfaW5vZGVfYmxvY2tzKCZpcC0+aV9pbm9kZSkpOworCXN0ci0+ZGlfYXRpbWUgPSBjcHVfdG9fYmU2NChpcC0+aV9pbm9kZS5pX2F0aW1lLnR2X3NlYyk7CisJc3RyLT5kaV9tdGltZSA9IGNwdV90b19iZTY0KGlwLT5pX2lub2RlLmlfbXRpbWUudHZfc2VjKTsKKwlzdHItPmRpX2N0aW1lID0gY3B1X3RvX2JlNjQoaXAtPmlfaW5vZGUuaV9jdGltZS50dl9zZWMpOworCisJc3RyLT5kaV9nb2FsX21ldGEgPSBjcHVfdG9fYmU2NChpcC0+aV9nb2FsKTsKKwlzdHItPmRpX2dvYWxfZGF0YSA9IGNwdV90b19iZTY0KGlwLT5pX2dvYWwpOworCXN0ci0+ZGlfZ2VuZXJhdGlvbiA9IGNwdV90b19iZTY0KGlwLT5pX2dlbmVyYXRpb24pOworCisJc3RyLT5kaV9mbGFncyA9IGNwdV90b19iZTMyKGlwLT5pX2Rpc2tmbGFncyk7CisJc3RyLT5kaV9oZWlnaHQgPSBjcHVfdG9fYmUxNihpcC0+aV9oZWlnaHQpOworCXN0ci0+ZGlfcGF5bG9hZF9mb3JtYXQgPSBjcHVfdG9fYmUzMihTX0lTRElSKGlwLT5pX2lub2RlLmlfbW9kZSkgJiYKKwkJCQkJICAgICAhKGlwLT5pX2Rpc2tmbGFncyAmIEdGUzJfRElGX0VYSEFTSCkgPworCQkJCQkgICAgIEdGUzJfRk9STUFUX0RFIDogMCk7CisJc3RyLT5kaV9kZXB0aCA9IGNwdV90b19iZTE2KGlwLT5pX2RlcHRoKTsKKwlzdHItPmRpX2VudHJpZXMgPSBjcHVfdG9fYmUzMihpcC0+aV9lbnRyaWVzKTsKKworCXN0ci0+ZGlfZWF0dHIgPSBjcHVfdG9fYmU2NChpcC0+aV9lYXR0cik7CisJc3RyLT5kaV9hdGltZV9uc2VjID0gY3B1X3RvX2JlMzIoaXAtPmlfaW5vZGUuaV9hdGltZS50dl9uc2VjKTsKKwlzdHItPmRpX210aW1lX25zZWMgPSBjcHVfdG9fYmUzMihpcC0+aV9pbm9kZS5pX210aW1lLnR2X25zZWMpOworCXN0ci0+ZGlfY3RpbWVfbnNlYyA9IGNwdV90b19iZTMyKGlwLT5pX2lub2RlLmlfY3RpbWUudHZfbnNlYyk7Cit9CiAKIC8qKgogICogZ2ZzMl93cml0ZV9pbm9kZSAtIE1ha2Ugc3VyZSB0aGUgaW5vZGUgaXMgc3RhYmxlIG9uIHRoZSBkaXNrCiAgKiBAaW5vZGU6IFRoZSBpbm9kZQotICogQHN5bmM6IHN5bmNocm9ub3VzIHdyaXRlIGZsYWcKKyAqIEB3YmM6IFRoZSB3cml0ZWJhY2sgY29udHJvbCBzdHJ1Y3R1cmUKICAqCiAgKiBSZXR1cm5zOiBlcnJubwogICovCkBAIC03MTMsMTUgKzc1MCwxNyBAQAogewogCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKGlub2RlKTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWV0YW1hcHBpbmcgPSBnZnMyX2dsb2NrMmFzcGFjZShpcC0+aV9nbCk7CisJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSA9IG1ldGFtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvOwogCXN0cnVjdCBnZnMyX2hvbGRlciBnaDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCXN0cnVjdCB0aW1lc3BlYyBhdGltZTsKIAlzdHJ1Y3QgZ2ZzMl9kaW5vZGUgKmRpOwotCWludCByZXQgPSAwOworCWludCByZXQgPSAtRUFHQUlOOwogCi0JLyogQ2hlY2sgdGhpcyBpcyBhICJub3JtYWwiIGlub2RlLCBldGMgKi8KKwkvKiBTa2lwIHRpbWVzdGFtcCB1cGRhdGUsIGlmIHRoaXMgaXMgZnJvbSBhIG1lbWFsbG9jICovCiAJaWYgKGN1cnJlbnQtPmZsYWdzICYgUEZfTUVNQUxMT0MpCi0JCXJldHVybiAwOworCQlnb3RvIGRvX2ZsdXNoOwogCXJldCA9IGdmczJfZ2xvY2tfbnFfaW5pdChpcC0+aV9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLCAmZ2gpOwogCWlmIChyZXQpCiAJCWdvdG8gZG9fZmx1c2g7CkBAIC03NDUsNiArNzg0LDEzIEBACiBkb19mbHVzaDoKIAlpZiAod2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwpCiAJCWdmczJfbG9nX2ZsdXNoKEdGUzJfU0IoaW5vZGUpLCBpcC0+aV9nbCk7CisJZmlsZW1hcF9mZGF0YXdyaXRlKG1ldGFtYXBwaW5nKTsKKwlpZiAoYmRpLT5kaXJ0eV9leGNlZWRlZCkKKwkJZ2ZzMl9haWwxX2ZsdXNoKHNkcCwgd2JjKTsKKwlpZiAoIXJldCAmJiAod2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwpKQorCQlyZXQgPSBmaWxlbWFwX2ZkYXRhd2FpdChtZXRhbWFwcGluZyk7CisJaWYgKHJldCkKKwkJbWFya19pbm9kZV9kaXJ0eV9zeW5jKGlub2RlKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC04NzQsOCArOTIwLDkgQEAKIAogc3RhdGljIGludCBnZnMyX3N5bmNfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHdhaXQpCiB7Ci0JaWYgKHdhaXQgJiYgc2ItPnNfZnNfaW5mbykKLQkJZ2ZzMl9sb2dfZmx1c2goc2ItPnNfZnNfaW5mbywgTlVMTCk7CisJc3RydWN0IGdmczJfc2JkICpzZHAgPSBzYi0+c19mc19pbmZvOworCWlmICh3YWl0ICYmIHNkcCkKKwkJZ2ZzMl9sb2dfZmx1c2goc2RwLCBOVUxMKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTMwOCw2ICsxMzU1LDc4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGdmczJfZmluYWxfcmVsZWFzZV9wYWdlcyhzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXApCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9ICZpcC0+aV9pbm9kZTsKKwlzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wgPSBpcC0+aV9nbDsKKworCXRydW5jYXRlX2lub2RlX3BhZ2VzKGdmczJfZ2xvY2syYXNwYWNlKGlwLT5pX2dsKSwgMCk7CisJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOworCisJaWYgKGF0b21pY19yZWFkKCZnbC0+Z2xfcmV2b2tlcykgPT0gMCkgeworCQljbGVhcl9iaXQoR0xGX0xGTFVTSCwgJmdsLT5nbF9mbGFncyk7CisJCWNsZWFyX2JpdChHTEZfRElSVFksICZnbC0+Z2xfZmxhZ3MpOworCX0KK30KKworc3RhdGljIGludCBnZnMyX2Rpbm9kZV9kZWFsbG9jKHN0cnVjdCBnZnMyX2lub2RlICppcCkKK3sKKwlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoJmlwLT5pX2lub2RlKTsKKwlzdHJ1Y3QgZ2ZzMl9hbGxvYyAqYWw7CisJc3RydWN0IGdmczJfcmdycGQgKnJnZDsKKwlpbnQgZXJyb3I7CisKKwlpZiAoZ2ZzMl9nZXRfaW5vZGVfYmxvY2tzKCZpcC0+aV9pbm9kZSkgIT0gMSkgeworCQlnZnMyX2NvbnNpc3RfaW5vZGUoaXApOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlhbCA9IGdmczJfYWxsb2NfZ2V0KGlwKTsKKwlpZiAoIWFsKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVycm9yID0gZ2ZzMl9xdW90YV9ob2xkKGlwLCBOT19RVU9UQV9DSEFOR0UsIE5PX1FVT1RBX0NIQU5HRSk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dDsKKworCWVycm9yID0gZ2ZzMl9yaW5kZXhfaG9sZChzZHAsICZhbC0+YWxfcmlfZ2gpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfcXM7CisKKwlyZ2QgPSBnZnMyX2JsazJyZ3JwZChzZHAsIGlwLT5pX25vX2FkZHIpOworCWlmICghcmdkKSB7CisJCWdmczJfY29uc2lzdF9pbm9kZShpcCk7CisJCWVycm9yID0gLUVJTzsKKwkJZ290byBvdXRfcmluZGV4X3JlbHNlOworCX0KKworCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KHJnZC0+cmRfZ2wsIExNX1NUX0VYQ0xVU0lWRSwgMCwKKwkJCQkgICAmYWwtPmFsX3JnZF9naCk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9yaW5kZXhfcmVsc2U7CisKKwllcnJvciA9IGdmczJfdHJhbnNfYmVnaW4oc2RwLCBSRVNfUkdfQklUICsgUkVTX1NUQVRGUyArIFJFU19RVU9UQSwKKwkJCQkgc2RwLT5zZF9qZGVzYy0+amRfYmxvY2tzKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X3JnX2d1bmxvY2s7CisKKwlnZnMyX2ZyZWVfZGkocmdkLCBpcCk7CisKKwlnZnMyX2ZpbmFsX3JlbGVhc2VfcGFnZXMoaXApOworCisJZ2ZzMl90cmFuc19lbmQoc2RwKTsKKworb3V0X3JnX2d1bmxvY2s6CisJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmFsLT5hbF9yZ2RfZ2gpOworb3V0X3JpbmRleF9yZWxzZToKKwlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmYWwtPmFsX3JpX2doKTsKK291dF9xczoKKwlnZnMyX3F1b3RhX3VuaG9sZChpcCk7CitvdXQ6CisJZ2ZzMl9hbGxvY19wdXQoaXApOworCXJldHVybiBlcnJvcjsKK30KKwogLyoKICAqIFdlIGhhdmUgdG8gKGF0IHRoZSBtb21lbnQpIGhvbGQgdGhlIGlub2RlcyBtYWluIGxvY2sgdG8gY292ZXIKICAqIHRoZSBnYXAgYmV0d2VlbiB1bmxvY2tpbmcgdGhlIHNoYXJlZCBsb2NrIG9uIHRoZSBpb3BlbiBsb2NrIGFuZApAQCAtMTM3MSwxNSArMTQ5MCwxMyBAQAogCX0KIAogCWVycm9yID0gZ2ZzMl9kaW5vZGVfZGVhbGxvYyhpcCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF91bmxvY2s7CisJZ290byBvdXRfdW5sb2NrOwogCiBvdXRfdHJ1bmNhdGU6CiAJZXJyb3IgPSBnZnMyX3RyYW5zX2JlZ2luKHNkcCwgMCwgc2RwLT5zZF9qZGVzYy0+amRfYmxvY2tzKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X3VubG9jazsKLQkvKiBOZWVkcyB0byBiZSBkb25lIGJlZm9yZSBnbG9jayByZWxlYXNlICYgYWxzbyBpbiBhIHRyYW5zYWN0aW9uICovCi0JdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOworCWdmczJfZmluYWxfcmVsZWFzZV9wYWdlcyhpcCk7CiAJZ2ZzMl90cmFuc19lbmQoc2RwKTsKIAogb3V0X3VubG9jazoKQEAgLTEzOTQsNiArMTUxMSw3IEBACiAJZW5kX3dyaXRlYmFjayhpbm9kZSk7CiAKIAlpcC0+aV9nbC0+Z2xfb2JqZWN0ID0gTlVMTDsKKwlnZnMyX2dsb2NrX2FkZF90b19scnUoaXAtPmlfZ2wpOwogCWdmczJfZ2xvY2tfcHV0KGlwLT5pX2dsKTsKIAlpcC0+aV9nbCA9IE5VTEw7CiAJaWYgKGlwLT5pX2lvcGVuX2doLmdoX2dsKSB7CmRpZmYgLS1naXQgYS9mcy9nZnMyL3N5cy5jIGIvZnMvZ2ZzMi9zeXMuYwppbmRleCA3NDhjY2I1Li5lMjBlYWIzIDEwMDY0NAotLS0gYS9mcy9nZnMyL3N5cy5jCisrKyBiL2ZzL2dmczIvc3lzLmMKQEAgLTgxLDcgKzgxLDggQEAKIAogc3RhdGljIHNzaXplX3QgdXVpZF9zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCiB7Ci0JY29uc3QgdTggKnV1aWQgPSBzZHAtPnNkX3NiLnNiX3V1aWQ7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzID0gc2RwLT5zZF92ZnM7CisJY29uc3QgdTggKnV1aWQgPSBzLT5zX3V1aWQ7CiAJYnVmWzBdID0gJ1wwJzsKIAlpZiAoIWdmczJfdXVpZF92YWxpZCh1dWlkKSkKIAkJcmV0dXJuIDA7CkBAIC02MTYsNyArNjE3LDggQEAKIAkJICAgICAgIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudikKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZ2ZzMl9zYmQsIHNkX2tvYmopOwotCWNvbnN0IHU4ICp1dWlkID0gc2RwLT5zZF9zYi5zYl91dWlkOworCXN0cnVjdCBzdXBlcl9ibG9jayAqcyA9IHNkcC0+c2RfdmZzOworCWNvbnN0IHU4ICp1dWlkID0gcy0+c191dWlkOwogCiAJYWRkX3VldmVudF92YXIoZW52LCAiTE9DS1RBQkxFPSVzIiwgc2RwLT5zZF90YWJsZV9uYW1lKTsKIAlhZGRfdWV2ZW50X3ZhcihlbnYsICJMT0NLUFJPVE89JXMiLCBzZHAtPnNkX3Byb3RvX25hbWUpOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi90cmFjZV9nZnMyLmggYi9mcy9nZnMyL3RyYWNlX2dmczIuaAppbmRleCBjZWRiMGJiLi41ZDA3NjA5IDEwMDY0NAotLS0gYS9mcy9nZnMyL3RyYWNlX2dmczIuaAorKysgYi9mcy9nZnMyL3RyYWNlX2dmczIuaApAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZGxtY29uc3RhbnRzLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KKyNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KICNpbmNsdWRlICJpbmNvcmUuaCIKICNpbmNsdWRlICJnbG9jay5oIgogCkBAIC00MCw3ICs0MSw5IEBACiAJeygxVUwgPDwgR0xGX1JFUExZX1BFTkRJTkcpLAkJInIiIH0sCQlcCiAJeygxVUwgPDwgR0xGX0lOSVRJQUwpLAkJCSJJIiB9LAkJXAogCXsoMVVMIDw8IEdMRl9GUk9aRU4pLAkJCSJGIiB9LAkJXAotCXsoMVVMIDw8IEdMRl9RVUVVRUQpLAkJCSJxIiB9KQorCXsoMVVMIDw8IEdMRl9RVUVVRUQpLAkJCSJxIiB9LAkJXAorCXsoMVVMIDw8IEdMRl9MUlUpLAkJCSJMIiB9LAkJXAorCXsoMVVMIDw8IEdMRl9PQkpFQ1QpLAkJCSJvIiB9KQogCiAjaWZuZGVmIE5VTVBUWQogI2RlZmluZSBOVU1QVFkKQEAgLTk0LDcgKzk3LDcgQEAKIAkJX19lbnRyeS0+bmV3X3N0YXRlCT0gZ2xvY2tfdHJhY2Vfc3RhdGUobmV3X3N0YXRlKTsKIAkJX19lbnRyeS0+dGd0X3N0YXRlCT0gZ2xvY2tfdHJhY2Vfc3RhdGUoZ2wtPmdsX3RhcmdldCk7CiAJCV9fZW50cnktPmRtdF9zdGF0ZQk9IGdsb2NrX3RyYWNlX3N0YXRlKGdsLT5nbF9kZW1vdGVfc3RhdGUpOwotCQlfX2VudHJ5LT5mbGFncwkJPSBnbC0+Z2xfZmxhZ3M7CisJCV9fZW50cnktPmZsYWdzCQk9IGdsLT5nbF9mbGFncyB8IChnbC0+Z2xfb2JqZWN0ID8gKDFVTDw8R0xGX09CSkVDVCkgOiAwKTsKIAkpLAogCiAJVFBfcHJpbnRrKCIldSwldSBnbG9jayAlZDolbGxkIHN0YXRlICVzIHRvICVzIHRndDolcyBkbXQ6JXMgZmxhZ3M6JXMiLApAQCAtMTI3LDcgKzEzMCw3IEBACiAJCV9fZW50cnktPmdsdHlwZQkJPSBnbC0+Z2xfbmFtZS5sbl90eXBlOwogCQlfX2VudHJ5LT5nbG51bQkJPSBnbC0+Z2xfbmFtZS5sbl9udW1iZXI7CiAJCV9fZW50cnktPmN1cl9zdGF0ZQk9IGdsb2NrX3RyYWNlX3N0YXRlKGdsLT5nbF9zdGF0ZSk7Ci0JCV9fZW50cnktPmZsYWdzCQk9IGdsLT5nbF9mbGFnczsKKwkJX19lbnRyeS0+ZmxhZ3MJCT0gZ2wtPmdsX2ZsYWdzICB8IChnbC0+Z2xfb2JqZWN0ID8gKDFVTDw8R0xGX09CSkVDVCkgOiAwKTsKIAkpLAogCiAJVFBfcHJpbnRrKCIldSwldSBnbG9jayAlZDolbGxkIHN0YXRlICVzID0+ICVzIGZsYWdzOiVzIiwKQEAgLTE2MSw3ICsxNjQsNyBAQAogCQlfX2VudHJ5LT5nbG51bQkJPSBnbC0+Z2xfbmFtZS5sbl9udW1iZXI7CiAJCV9fZW50cnktPmN1cl9zdGF0ZQk9IGdsb2NrX3RyYWNlX3N0YXRlKGdsLT5nbF9zdGF0ZSk7CiAJCV9fZW50cnktPmRtdF9zdGF0ZQk9IGdsb2NrX3RyYWNlX3N0YXRlKGdsLT5nbF9kZW1vdGVfc3RhdGUpOwotCQlfX2VudHJ5LT5mbGFncwkJPSBnbC0+Z2xfZmxhZ3M7CisJCV9fZW50cnktPmZsYWdzCQk9IGdsLT5nbF9mbGFncyAgfCAoZ2wtPmdsX29iamVjdCA/ICgxVUw8PEdMRl9PQkpFQ1QpIDogMCk7CiAJKSwKIAogCVRQX3ByaW50aygiJXUsJXUgZ2xvY2sgJWQ6JWxsZCBkZW1vdGUgJXMgdG8gJXMgZmxhZ3M6JXMiLApAQCAtMzE4LDYgKzMyMSwzMyBAQAogCQkgIE1JTk9SKF9fZW50cnktPmRldiksIF9fZW50cnktPmJsb2NrcykKICk7CiAKKy8qIFdyaXRpbmcgYmFjayB0aGUgQUlMICovCitUUkFDRV9FVkVOVChnZnMyX2FpbF9mbHVzaCwKKworCVRQX1BST1RPKGNvbnN0IHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjb25zdCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYywgaW50IHN0YXJ0KSwKKworCVRQX0FSR1Moc2RwLCB3YmMsIHN0YXJ0KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCWRldl90LAlkZXYJCQkpCisJCV9fZmllbGQoCWludCwgc3RhcnQJCQkpCisJCV9fZmllbGQoCWludCwgc3luY19tb2RlCQkJKQorCQlfX2ZpZWxkKAlsb25nLCBucl90b193cml0ZQkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZGV2CQk9IHNkcC0+c2RfdmZzLT5zX2RldjsKKwkJX19lbnRyeS0+c3RhcnQJCT0gc3RhcnQ7CisJCV9fZW50cnktPnN5bmNfbW9kZQk9IHdiYy0+c3luY19tb2RlOworCQlfX2VudHJ5LT5ucl90b193cml0ZQk9IHdiYy0+bnJfdG9fd3JpdGU7CisJKSwKKworCVRQX3ByaW50aygiJXUsJXUgYWlsIGZsdXNoICVzICVzICVsZCIsIE1BSk9SKF9fZW50cnktPmRldiksCisJCSAgTUlOT1IoX19lbnRyeS0+ZGV2KSwgX19lbnRyeS0+c3RhcnQgPyAic3RhcnQiIDogImVuZCIsCisJCSAgX19lbnRyeS0+c3luY19tb2RlID09IFdCX1NZTkNfQUxMID8gImFsbCIgOiAibm9uZSIsCisJCSAgX19lbnRyeS0+bnJfdG9fd3JpdGUpCispOworCiAvKiBTZWN0aW9uIDMgLSBibWFwCiAgKgogICogT2JqZWN0aXZlczoKZGlmZiAtLWdpdCBhL2ZzL2lub2RlLmMgYi9mcy9pbm9kZS5jCmluZGV4IDMzYzk2M2QuLjA1ZjRmYTUgMTAwNjQ0Ci0tLSBhL2ZzL2lub2RlLmMKKysrIGIvZnMvaW5vZGUuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvYXN5bmMuaD4KICNpbmNsdWRlIDxsaW51eC9wb3NpeF9hY2wuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2luY2x1ZGUgPGxpbnV4L2ltYS5oPgogI2luY2x1ZGUgPGxpbnV4L2NyZWQuaD4KICNpbmNsdWRlICJpbnRlcm5hbC5oIgpkaWZmIC0tZ2l0IGEvZnMvbG9nZnMvZGV2X2JkZXYuYyBiL2ZzL2xvZ2ZzL2Rldl9iZGV2LmMKaW5kZXggMWFkYzhkNC4uZGYwZGUyNyAxMDA2NDQKLS0tIGEvZnMvbG9nZnMvZGV2X2JkZXYuYworKysgYi9mcy9sb2dmcy9kZXZfYmRldi5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAjZGVmaW5lIFBBR0VfT0ZTKG9mcykgKChvZnMpICYgKFBBR0VfU0laRS0xKSkKIApkaWZmIC0tZ2l0IGEvZnMvbG9nZnMvcmVhZHdyaXRlLmMgYi9mcy9sb2dmcy9yZWFkd3JpdGUuYwppbmRleCA5ZTIyMDg1Li5kOGQwOTM4IDEwMDY0NAotLS0gYS9mcy9sb2dmcy9yZWFkd3JpdGUuYworKysgYi9mcy9sb2dmcy9yZWFkd3JpdGUuYwpAQCAtNDgxLDcgKzQ4MSw3IEBACiAJCQl2YWwgPSBpbm9kZV92YWwwKGlub2RlKTsKIAkJCWJyZWFrOwogCQljYXNlIElOT0RFX1VTRURfT0ZTOgotCQkJdmFsID0gY3B1X3RvX2JlNjQobGktPmxpX3VzZWRfYnl0ZXMpOzsKKwkJCXZhbCA9IGNwdV90b19iZTY0KGxpLT5saV91c2VkX2J5dGVzKTsKIAkJCWJyZWFrOwogCQljYXNlIElOT0RFX1NJWkVfT0ZTOgogCQkJdmFsID0gY3B1X3RvX2JlNjQoaV9zaXplX3JlYWQoaW5vZGUpKTsKZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IGUzYzRmMTEuLjZmZjg1OGMgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVpLmMKKysrIGIvZnMvbmFtZWkuYwpAQCAtMTM3OCwxMiArMTM3OCwxMiBAQAogewogCWludCByZXM7CiAKLQlCVUdfT04obmQtPmRlcHRoID49IE1BWF9ORVNURURfTElOS1MpOwogCWlmICh1bmxpa2VseShjdXJyZW50LT5saW5rX2NvdW50ID49IE1BWF9ORVNURURfTElOS1MpKSB7CiAJCXBhdGhfcHV0X2NvbmRpdGlvbmFsKHBhdGgsIG5kKTsKIAkJcGF0aF9wdXQoJm5kLT5wYXRoKTsKIAkJcmV0dXJuIC1FTE9PUDsKIAl9CisJQlVHX09OKG5kLT5kZXB0aCA+PSBNQVhfTkVTVEVEX0xJTktTKTsKIAogCW5kLT5kZXB0aCsrOwogCWN1cnJlbnQtPmxpbmtfY291bnQrKzsKZGlmZiAtLWdpdCBhL2ZzL25mc2Qvc3RhdHMuYyBiL2ZzL25mc2Qvc3RhdHMuYwppbmRleCA1MjMyZDNlLi5hMmUyNDAyIDEwMDY0NAotLS0gYS9mcy9uZnNkL3N0YXRzLmMKKysrIGIvZnMvbmZzZC9zdGF0cy5jCkBAIC04LDcgKzgsNyBAQAogICoJCQlTdGF0aXN0c2ljcyBmb3IgdGhlIHJlcGx5IGNhY2hlCiAgKglmaCA8c3RhbGU+IDx0b3RhbC1sb29rdXBzPiA8YW5vbmxvb2t1cHM+IDxkaXItbm90LWluLWRjYWNoZT4gPG5vbmRpci1ub3QtaW4tZGNhY2hlPgogICoJCQlzdGF0aXN0aWNzIGZvciBmaWxlaGFuZGxlIGxvb2t1cAotICoJaW8gPGJ5dGVzLXJlYWQ+IDxieXRlcy13cml0dHRlbj4KKyAqCWlvIDxieXRlcy1yZWFkPiA8Ynl0ZXMtd3JpdHRlbj4KICAqCQkJc3RhdGlzdGljcyBmb3IgSU8gdGhyb3VnaHB1dAogICoJdGggPHRocmVhZHM+IDxmdWxsY250PiA8MTAlLTIwJT4gPDIwJS0zMCU+IC4uLiA8OTAlLTEwMCU+IDwxMDAlPiAKICAqCQkJdGltZSAoc2Vjb25kcykgd2hlbiBuZnNkIHRocmVhZCB1c2FnZSBhYm92ZSB0aHJlc2hvbGRzCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvYWxsb2MuYyBiL2ZzL25pbGZzMi9hbGxvYy5jCmluZGV4IGY3Njg0NDguLmVlZDRkN2IgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9hbGxvYy5jCisrKyBiL2ZzL25pbGZzMi9hbGxvYy5jCkBAIC00ODksOCArNDg5LDggQEAKIHZvaWQgbmlsZnNfcGFsbG9jX2NvbW1pdF9hbGxvY19lbnRyeShzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSAgICAgc3RydWN0IG5pbGZzX3BhbGxvY19yZXEgKnJlcSkKIHsKLQluaWxmc19tZHRfbWFya19idWZmZXJfZGlydHkocmVxLT5wcl9iaXRtYXBfYmgpOwotCW5pbGZzX21kdF9tYXJrX2J1ZmZlcl9kaXJ0eShyZXEtPnByX2Rlc2NfYmgpOworCW1hcmtfYnVmZmVyX2RpcnR5KHJlcS0+cHJfYml0bWFwX2JoKTsKKwltYXJrX2J1ZmZlcl9kaXJ0eShyZXEtPnByX2Rlc2NfYmgpOwogCW5pbGZzX21kdF9tYXJrX2RpcnR5KGlub2RlKTsKIAogCWJyZWxzZShyZXEtPnByX2JpdG1hcF9iaCk7CkBAIC01MjcsOCArNTI3LDggQEAKIAlrdW5tYXAocmVxLT5wcl9iaXRtYXBfYmgtPmJfcGFnZSk7CiAJa3VubWFwKHJlcS0+cHJfZGVzY19iaC0+Yl9wYWdlKTsKIAotCW5pbGZzX21kdF9tYXJrX2J1ZmZlcl9kaXJ0eShyZXEtPnByX2Rlc2NfYmgpOwotCW5pbGZzX21kdF9tYXJrX2J1ZmZlcl9kaXJ0eShyZXEtPnByX2JpdG1hcF9iaCk7CisJbWFya19idWZmZXJfZGlydHkocmVxLT5wcl9kZXNjX2JoKTsKKwltYXJrX2J1ZmZlcl9kaXJ0eShyZXEtPnByX2JpdG1hcF9iaCk7CiAJbmlsZnNfbWR0X21hcmtfZGlydHkoaW5vZGUpOwogCiAJYnJlbHNlKHJlcS0+cHJfYml0bWFwX2JoKTsKQEAgLTY4Myw4ICs2ODMsOCBAQAogCQlrdW5tYXAoYml0bWFwX2JoLT5iX3BhZ2UpOwogCQlrdW5tYXAoZGVzY19iaC0+Yl9wYWdlKTsKIAotCQluaWxmc19tZHRfbWFya19idWZmZXJfZGlydHkoZGVzY19iaCk7Ci0JCW5pbGZzX21kdF9tYXJrX2J1ZmZlcl9kaXJ0eShiaXRtYXBfYmgpOworCQltYXJrX2J1ZmZlcl9kaXJ0eShkZXNjX2JoKTsKKwkJbWFya19idWZmZXJfZGlydHkoYml0bWFwX2JoKTsKIAkJbmlsZnNfbWR0X21hcmtfZGlydHkoaW5vZGUpOwogCiAJCWJyZWxzZShiaXRtYXBfYmgpOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2JtYXAuYyBiL2ZzL25pbGZzMi9ibWFwLmMKaW5kZXggNDcyM2YwNC4uYWFkYmQwYiAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2JtYXAuYworKysgYi9mcy9uaWxmczIvYm1hcC5jCkBAIC0zNCw3ICszNCw5IEBACiAKIHN0cnVjdCBpbm9kZSAqbmlsZnNfYm1hcF9nZXRfZGF0KGNvbnN0IHN0cnVjdCBuaWxmc19ibWFwICpibWFwKQogewotCXJldHVybiBOSUxGU19JX05JTEZTKGJtYXAtPmJfaW5vZGUpLT5uc19kYXQ7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBibWFwLT5iX2lub2RlLT5pX3NiLT5zX2ZzX2luZm87CisKKwlyZXR1cm4gbmlsZnMtPm5zX2RhdDsKIH0KIAogc3RhdGljIGludCBuaWxmc19ibWFwX2NvbnZlcnRfZXJyb3Ioc3RydWN0IG5pbGZzX2JtYXAgKmJtYXAsCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvYnRub2RlLmMgYi9mcy9uaWxmczIvYnRub2RlLmMKaW5kZXggNjA5Y2QyMi4uYTM1YWUzNSAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2J0bm9kZS5jCisrKyBiL2ZzL25pbGZzMi9idG5vZGUuYwpAQCAtMzQsMTIgKzM0LDYgQEAKICNpbmNsdWRlICJwYWdlLmgiCiAjaW5jbHVkZSAiYnRub2RlLmgiCiAKLXZvaWQgbmlsZnNfYnRub2RlX2NhY2hlX2luaXQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmJ0bmMsCi0JCQkgICAgIHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpCi17Ci0JbmlsZnNfbWFwcGluZ19pbml0KGJ0bmMsIGJkaSk7Ci19Ci0KIHZvaWQgbmlsZnNfYnRub2RlX2NhY2hlX2NsZWFyKHN0cnVjdCBhZGRyZXNzX3NwYWNlICpidG5jKQogewogCWludmFsaWRhdGVfbWFwcGluZ19wYWdlcyhidG5jLCAwLCAtMSk7CkBAIC02Miw3ICs1Niw3IEBACiAJCUJVRygpOwogCX0KIAltZW1zZXQoYmgtPmJfZGF0YSwgMCwgMSA8PCBpbm9kZS0+aV9ibGtiaXRzKTsKLQliaC0+Yl9iZGV2ID0gTklMRlNfSV9OSUxGUyhpbm9kZSktPm5zX2JkZXY7CisJYmgtPmJfYmRldiA9IGlub2RlLT5pX3NiLT5zX2JkZXY7CiAJYmgtPmJfYmxvY2tuciA9IGJsb2NrbnI7CiAJc2V0X2J1ZmZlcl9tYXBwZWQoYmgpOwogCXNldF9idWZmZXJfdXB0b2RhdGUoYmgpOwpAQCAtOTQsMTAgKzg4LDExIEBACiAJaWYgKHBibG9ja25yID09IDApIHsKIAkJcGJsb2NrbnIgPSBibG9ja25yOwogCQlpZiAoaW5vZGUtPmlfaW5vICE9IE5JTEZTX0RBVF9JTk8pIHsKLQkJCXN0cnVjdCBpbm9kZSAqZGF0ID0gTklMRlNfSV9OSUxGUyhpbm9kZSktPm5zX2RhdDsKKwkJCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gaW5vZGUtPmlfc2ItPnNfZnNfaW5mbzsKIAogCQkJLyogYmxvY2tuciBpcyBhIHZpcnR1YWwgYmxvY2sgbnVtYmVyICovCi0JCQllcnIgPSBuaWxmc19kYXRfdHJhbnNsYXRlKGRhdCwgYmxvY2tuciwgJnBibG9ja25yKTsKKwkJCWVyciA9IG5pbGZzX2RhdF90cmFuc2xhdGUobmlsZnMtPm5zX2RhdCwgYmxvY2tuciwKKwkJCQkJCSAgJnBibG9ja25yKTsKIAkJCWlmICh1bmxpa2VseShlcnIpKSB7CiAJCQkJYnJlbHNlKGJoKTsKIAkJCQlnb3RvIG91dF9sb2NrZWQ7CkBAIC0xMjAsNyArMTE1LDcgQEAKIAkJZ290byBmb3VuZDsKIAl9CiAJc2V0X2J1ZmZlcl9tYXBwZWQoYmgpOwotCWJoLT5iX2JkZXYgPSBOSUxGU19JX05JTEZTKGlub2RlKS0+bnNfYmRldjsKKwliaC0+Yl9iZGV2ID0gaW5vZGUtPmlfc2ItPnNfYmRldjsKIAliaC0+Yl9ibG9ja25yID0gcGJsb2NrbnI7IC8qIHNldCBibG9jayBhZGRyZXNzIGZvciByZWFkICovCiAJYmgtPmJfZW5kX2lvID0gZW5kX2J1ZmZlcl9yZWFkX3N5bmM7CiAJZ2V0X2JoKGJoKTsKQEAgLTI1OSw3ICsyNTQsNyBAQAogCQkJCSAgICAgICAiaW52YWxpZCBvbGRrZXkgJWxsZCAobmV3a2V5PSVsbGQpIiwKIAkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvbGRrZXksCiAJCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbmV3a2V5KTsKLQkJbmlsZnNfYnRub2RlX21hcmtfZGlydHkob2JoKTsKKwkJbWFya19idWZmZXJfZGlydHkob2JoKTsKIAogCQlzcGluX2xvY2tfaXJxKCZidG5jLT50cmVlX2xvY2spOwogCQlyYWRpeF90cmVlX2RlbGV0ZSgmYnRuYy0+cGFnZV90cmVlLCBvbGRrZXkpOwpAQCAtMjcxLDcgKzI2Niw3IEBACiAJCXVubG9ja19wYWdlKG9wYWdlKTsKIAl9IGVsc2UgewogCQluaWxmc19jb3B5X2J1ZmZlcihuYmgsIG9iaCk7Ci0JCW5pbGZzX2J0bm9kZV9tYXJrX2RpcnR5KG5iaCk7CisJCW1hcmtfYnVmZmVyX2RpcnR5KG5iaCk7CiAKIAkJbmJoLT5iX2Jsb2NrbnIgPSBuZXdrZXk7CiAJCWN0eHQtPmJoID0gbmJoOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2J0bm9kZS5oIGIvZnMvbmlsZnMyL2J0bm9kZS5oCmluZGV4IDFiOGViZDguLjNhNGRkMmQgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9idG5vZGUuaAorKysgYi9mcy9uaWxmczIvYnRub2RlLmgKQEAgLTM3LDcgKzM3LDYgQEAKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld2JoOwogfTsKIAotdm9pZCBuaWxmc19idG5vZGVfY2FjaGVfaW5pdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLCBzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqKTsKIHZvaWQgbmlsZnNfYnRub2RlX2NhY2hlX2NsZWFyKHN0cnVjdCBhZGRyZXNzX3NwYWNlICopOwogc3RydWN0IGJ1ZmZlcl9oZWFkICpuaWxmc19idG5vZGVfY3JlYXRlX2Jsb2NrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICpidG5jLAogCQkJCQkgICAgICBfX3U2NCBibG9ja25yKTsKQEAgLTUxLDcgKzUwLDQgQEAKIHZvaWQgbmlsZnNfYnRub2RlX2Fib3J0X2NoYW5nZV9rZXkoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwKIAkJCQkgICBzdHJ1Y3QgbmlsZnNfYnRub2RlX2Noa2V5X2N0eHQgKik7CiAKLSNkZWZpbmUgbmlsZnNfYnRub2RlX21hcmtfZGlydHkoYmgpCW5pbGZzX21hcmtfYnVmZmVyX2RpcnR5KGJoKQotCi0KICNlbmRpZgkvKiBfTklMRlNfQlROT0RFX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9idHJlZS5jIGIvZnMvbmlsZnMyL2J0cmVlLmMKaW5kZXggZDQ1MWFlMC4uN2VhZmU0NiAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2J0cmVlLmMKKysrIGIvZnMvbmlsZnMyL2J0cmVlLmMKQEAgLTcxNCw3ICs3MTQsNyBAQAogCQkJCW5pbGZzX2J0cmVlX2dldF9ub25yb290X25vZGUocGF0aCwgbGV2ZWwpLAogCQkJCXBhdGhbbGV2ZWxdLmJwX2luZGV4LCBrZXkpOwogCQkJaWYgKCFidWZmZXJfZGlydHkocGF0aFtsZXZlbF0uYnBfYmgpKQotCQkJCW5pbGZzX2J0bm9kZV9tYXJrX2RpcnR5KHBhdGhbbGV2ZWxdLmJwX2JoKTsKKwkJCQltYXJrX2J1ZmZlcl9kaXJ0eShwYXRoW2xldmVsXS5icF9iaCk7CiAJCX0gd2hpbGUgKChwYXRoW2xldmVsXS5icF9pbmRleCA9PSAwKSAmJgogCQkJICgrK2xldmVsIDwgbmlsZnNfYnRyZWVfaGVpZ2h0KGJ0cmVlKSAtIDEpKTsKIAl9CkBAIC03MzksNyArNzM5LDcgQEAKIAkJbmlsZnNfYnRyZWVfbm9kZV9pbnNlcnQobm9kZSwgcGF0aFtsZXZlbF0uYnBfaW5kZXgsCiAJCQkJCSprZXlwLCAqcHRycCwgbmNibGspOwogCQlpZiAoIWJ1ZmZlcl9kaXJ0eShwYXRoW2xldmVsXS5icF9iaCkpCi0JCQluaWxmc19idG5vZGVfbWFya19kaXJ0eShwYXRoW2xldmVsXS5icF9iaCk7CisJCQltYXJrX2J1ZmZlcl9kaXJ0eShwYXRoW2xldmVsXS5icF9iaCk7CiAKIAkJaWYgKHBhdGhbbGV2ZWxdLmJwX2luZGV4ID09IDApCiAJCQluaWxmc19idHJlZV9wcm9tb3RlX2tleShidHJlZSwgcGF0aCwgbGV2ZWwgKyAxLApAQCAtNzc3LDkgKzc3Nyw5IEBACiAJbmlsZnNfYnRyZWVfbm9kZV9tb3ZlX2xlZnQobGVmdCwgbm9kZSwgbiwgbmNibGssIG5jYmxrKTsKIAogCWlmICghYnVmZmVyX2RpcnR5KHBhdGhbbGV2ZWxdLmJwX2JoKSkKLQkJbmlsZnNfYnRub2RlX21hcmtfZGlydHkocGF0aFtsZXZlbF0uYnBfYmgpOworCQltYXJrX2J1ZmZlcl9kaXJ0eShwYXRoW2xldmVsXS5icF9iaCk7CiAJaWYgKCFidWZmZXJfZGlydHkocGF0aFtsZXZlbF0uYnBfc2liX2JoKSkKLQkJbmlsZnNfYnRub2RlX21hcmtfZGlydHkocGF0aFtsZXZlbF0uYnBfc2liX2JoKTsKKwkJbWFya19idWZmZXJfZGlydHkocGF0aFtsZXZlbF0uYnBfc2liX2JoKTsKIAogCW5pbGZzX2J0cmVlX3Byb21vdGVfa2V5KGJ0cmVlLCBwYXRoLCBsZXZlbCArIDEsCiAJCQkJbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KG5vZGUsIDApKTsKQEAgLTgyMyw5ICs4MjMsOSBAQAogCW5pbGZzX2J0cmVlX25vZGVfbW92ZV9yaWdodChub2RlLCByaWdodCwgbiwgbmNibGssIG5jYmxrKTsKIAogCWlmICghYnVmZmVyX2RpcnR5KHBhdGhbbGV2ZWxdLmJwX2JoKSkKLQkJbmlsZnNfYnRub2RlX21hcmtfZGlydHkocGF0aFtsZXZlbF0uYnBfYmgpOworCQltYXJrX2J1ZmZlcl9kaXJ0eShwYXRoW2xldmVsXS5icF9iaCk7CiAJaWYgKCFidWZmZXJfZGlydHkocGF0aFtsZXZlbF0uYnBfc2liX2JoKSkKLQkJbmlsZnNfYnRub2RlX21hcmtfZGlydHkocGF0aFtsZXZlbF0uYnBfc2liX2JoKTsKKwkJbWFya19idWZmZXJfZGlydHkocGF0aFtsZXZlbF0uYnBfc2liX2JoKTsKIAogCXBhdGhbbGV2ZWwgKyAxXS5icF9pbmRleCsrOwogCW5pbGZzX2J0cmVlX3Byb21vdGVfa2V5KGJ0cmVlLCBwYXRoLCBsZXZlbCArIDEsCkBAIC04NzAsOSArODcwLDkgQEAKIAluaWxmc19idHJlZV9ub2RlX21vdmVfcmlnaHQobm9kZSwgcmlnaHQsIG4sIG5jYmxrLCBuY2Jsayk7CiAKIAlpZiAoIWJ1ZmZlcl9kaXJ0eShwYXRoW2xldmVsXS5icF9iaCkpCi0JCW5pbGZzX2J0bm9kZV9tYXJrX2RpcnR5KHBhdGhbbGV2ZWxdLmJwX2JoKTsKKwkJbWFya19idWZmZXJfZGlydHkocGF0aFtsZXZlbF0uYnBfYmgpOwogCWlmICghYnVmZmVyX2RpcnR5KHBhdGhbbGV2ZWxdLmJwX3NpYl9iaCkpCi0JCW5pbGZzX2J0bm9kZV9tYXJrX2RpcnR5KHBhdGhbbGV2ZWxdLmJwX3NpYl9iaCk7CisJCW1hcmtfYnVmZmVyX2RpcnR5KHBhdGhbbGV2ZWxdLmJwX3NpYl9iaCk7CiAKIAluZXdrZXkgPSBuaWxmc19idHJlZV9ub2RlX2dldF9rZXkocmlnaHQsIDApOwogCW5ld3B0ciA9IHBhdGhbbGV2ZWxdLmJwX25ld3JlcS5icHJfcHRyOwpAQCAtOTE5LDcgKzkxOSw3IEBACiAJbmlsZnNfYnRyZWVfbm9kZV9zZXRfbGV2ZWwocm9vdCwgbGV2ZWwgKyAxKTsKIAogCWlmICghYnVmZmVyX2RpcnR5KHBhdGhbbGV2ZWxdLmJwX3NpYl9iaCkpCi0JCW5pbGZzX2J0bm9kZV9tYXJrX2RpcnR5KHBhdGhbbGV2ZWxdLmJwX3NpYl9iaCk7CisJCW1hcmtfYnVmZmVyX2RpcnR5KHBhdGhbbGV2ZWxdLmJwX3NpYl9iaCk7CiAKIAlwYXRoW2xldmVsXS5icF9iaCA9IHBhdGhbbGV2ZWxdLmJwX3NpYl9iaDsKIAlwYXRoW2xldmVsXS5icF9zaWJfYmggPSBOVUxMOwpAQCAtMTE5NCw3ICsxMTk0LDcgQEAKIAkJbmlsZnNfYnRyZWVfbm9kZV9kZWxldGUobm9kZSwgcGF0aFtsZXZlbF0uYnBfaW5kZXgsCiAJCQkJCWtleXAsIHB0cnAsIG5jYmxrKTsKIAkJaWYgKCFidWZmZXJfZGlydHkocGF0aFtsZXZlbF0uYnBfYmgpKQotCQkJbmlsZnNfYnRub2RlX21hcmtfZGlydHkocGF0aFtsZXZlbF0uYnBfYmgpOworCQkJbWFya19idWZmZXJfZGlydHkocGF0aFtsZXZlbF0uYnBfYmgpOwogCQlpZiAocGF0aFtsZXZlbF0uYnBfaW5kZXggPT0gMCkKIAkJCW5pbGZzX2J0cmVlX3Byb21vdGVfa2V5KGJ0cmVlLCBwYXRoLCBsZXZlbCArIDEsCiAJCQkJbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KG5vZGUsIDApKTsKQEAgLTEyMjYsOSArMTIyNiw5IEBACiAJbmlsZnNfYnRyZWVfbm9kZV9tb3ZlX3JpZ2h0KGxlZnQsIG5vZGUsIG4sIG5jYmxrLCBuY2Jsayk7CiAKIAlpZiAoIWJ1ZmZlcl9kaXJ0eShwYXRoW2xldmVsXS5icF9iaCkpCi0JCW5pbGZzX2J0bm9kZV9tYXJrX2RpcnR5KHBhdGhbbGV2ZWxdLmJwX2JoKTsKKwkJbWFya19idWZmZXJfZGlydHkocGF0aFtsZXZlbF0uYnBfYmgpOwogCWlmICghYnVmZmVyX2RpcnR5KHBhdGhbbGV2ZWxdLmJwX3NpYl9iaCkpCi0JCW5pbGZzX2J0bm9kZV9tYXJrX2RpcnR5KHBhdGhbbGV2ZWxdLmJwX3NpYl9iaCk7CisJCW1hcmtfYnVmZmVyX2RpcnR5KHBhdGhbbGV2ZWxdLmJwX3NpYl9iaCk7CiAKIAluaWxmc19idHJlZV9wcm9tb3RlX2tleShidHJlZSwgcGF0aCwgbGV2ZWwgKyAxLAogCQkJCW5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShub2RlLCAwKSk7CkBAIC0xMjU4LDkgKzEyNTgsOSBAQAogCW5pbGZzX2J0cmVlX25vZGVfbW92ZV9sZWZ0KG5vZGUsIHJpZ2h0LCBuLCBuY2JsaywgbmNibGspOwogCiAJaWYgKCFidWZmZXJfZGlydHkocGF0aFtsZXZlbF0uYnBfYmgpKQotCQluaWxmc19idG5vZGVfbWFya19kaXJ0eShwYXRoW2xldmVsXS5icF9iaCk7CisJCW1hcmtfYnVmZmVyX2RpcnR5KHBhdGhbbGV2ZWxdLmJwX2JoKTsKIAlpZiAoIWJ1ZmZlcl9kaXJ0eShwYXRoW2xldmVsXS5icF9zaWJfYmgpKQotCQluaWxmc19idG5vZGVfbWFya19kaXJ0eShwYXRoW2xldmVsXS5icF9zaWJfYmgpOworCQltYXJrX2J1ZmZlcl9kaXJ0eShwYXRoW2xldmVsXS5icF9zaWJfYmgpOwogCiAJcGF0aFtsZXZlbCArIDFdLmJwX2luZGV4Kys7CiAJbmlsZnNfYnRyZWVfcHJvbW90ZV9rZXkoYnRyZWUsIHBhdGgsIGxldmVsICsgMSwKQEAgLTEyODksNyArMTI4OSw3IEBACiAJbmlsZnNfYnRyZWVfbm9kZV9tb3ZlX2xlZnQobGVmdCwgbm9kZSwgbiwgbmNibGssIG5jYmxrKTsKIAogCWlmICghYnVmZmVyX2RpcnR5KHBhdGhbbGV2ZWxdLmJwX3NpYl9iaCkpCi0JCW5pbGZzX2J0bm9kZV9tYXJrX2RpcnR5KHBhdGhbbGV2ZWxdLmJwX3NpYl9iaCk7CisJCW1hcmtfYnVmZmVyX2RpcnR5KHBhdGhbbGV2ZWxdLmJwX3NpYl9iaCk7CiAKIAluaWxmc19idG5vZGVfZGVsZXRlKHBhdGhbbGV2ZWxdLmJwX2JoKTsKIAlwYXRoW2xldmVsXS5icF9iaCA9IHBhdGhbbGV2ZWxdLmJwX3NpYl9iaDsKQEAgLTEzMTUsNyArMTMxNSw3IEBACiAJbmlsZnNfYnRyZWVfbm9kZV9tb3ZlX2xlZnQobm9kZSwgcmlnaHQsIG4sIG5jYmxrLCBuY2Jsayk7CiAKIAlpZiAoIWJ1ZmZlcl9kaXJ0eShwYXRoW2xldmVsXS5icF9iaCkpCi0JCW5pbGZzX2J0bm9kZV9tYXJrX2RpcnR5KHBhdGhbbGV2ZWxdLmJwX2JoKTsKKwkJbWFya19idWZmZXJfZGlydHkocGF0aFtsZXZlbF0uYnBfYmgpOwogCiAJbmlsZnNfYnRub2RlX2RlbGV0ZShwYXRoW2xldmVsXS5icF9zaWJfYmgpOwogCXBhdGhbbGV2ZWxdLmJwX3NpYl9iaCA9IE5VTEw7CkBAIC0xNzA5LDcgKzE3MDksNyBAQAogCQluaWxmc19idHJlZV9ub2RlX2luaXQobm9kZSwgMCwgMSwgbiwgbmNibGssIGtleXMsIHB0cnMpOwogCQluaWxmc19idHJlZV9ub2RlX2luc2VydChub2RlLCBuLCBrZXksIGRyZXEtPmJwcl9wdHIsIG5jYmxrKTsKIAkJaWYgKCFidWZmZXJfZGlydHkoYmgpKQotCQkJbmlsZnNfYnRub2RlX21hcmtfZGlydHkoYmgpOworCQkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCQlpZiAoIW5pbGZzX2JtYXBfZGlydHkoYnRyZWUpKQogCQkJbmlsZnNfYm1hcF9zZXRfZGlydHkoYnRyZWUpOwogCkBAIC0xNzg3LDcgKzE3ODcsNyBAQAogewogCXdoaWxlICgoKytsZXZlbCA8IG5pbGZzX2J0cmVlX2hlaWdodChidHJlZSkgLSAxKSAmJgogCSAgICAgICAhYnVmZmVyX2RpcnR5KHBhdGhbbGV2ZWxdLmJwX2JoKSkKLQkJbmlsZnNfYnRub2RlX21hcmtfZGlydHkocGF0aFtsZXZlbF0uYnBfYmgpOworCQltYXJrX2J1ZmZlcl9kaXJ0eShwYXRoW2xldmVsXS5icF9iaCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIyMjksNyArMjIyOSw3IEBACiAJfQogCiAJaWYgKCFidWZmZXJfZGlydHkoYmgpKQotCQluaWxmc19idG5vZGVfbWFya19kaXJ0eShiaCk7CisJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAlicmVsc2UoYmgpOwogCWlmICghbmlsZnNfYm1hcF9kaXJ0eShidHJlZSkpCiAJCW5pbGZzX2JtYXBfc2V0X2RpcnR5KGJ0cmVlKTsKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9jcGZpbGUuYyBiL2ZzL25pbGZzMi9jcGZpbGUuYwppbmRleCA1ZmYxNWE4Li5jOWIzNDJjIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvY3BmaWxlLmMKKysrIGIvZnMvbmlsZnMyL2NwZmlsZS5jCkBAIC0yMTYsMTQgKzIxNiwxNCBAQAogCQlpZiAoIW5pbGZzX2NwZmlsZV9pc19pbl9maXJzdChjcGZpbGUsIGNubykpCiAJCQluaWxmc19jcGZpbGVfYmxvY2tfYWRkX3ZhbGlkX2NoZWNrcG9pbnRzKGNwZmlsZSwgY3BfYmgsCiAJCQkJCQkJCSBrYWRkciwgMSk7Ci0JCW5pbGZzX21kdF9tYXJrX2J1ZmZlcl9kaXJ0eShjcF9iaCk7CisJCW1hcmtfYnVmZmVyX2RpcnR5KGNwX2JoKTsKIAogCQlrYWRkciA9IGttYXBfYXRvbWljKGhlYWRlcl9iaC0+Yl9wYWdlLCBLTV9VU0VSMCk7CiAJCWhlYWRlciA9IG5pbGZzX2NwZmlsZV9ibG9ja19nZXRfaGVhZGVyKGNwZmlsZSwgaGVhZGVyX2JoLAogCQkJCQkJICAgICAgIGthZGRyKTsKIAkJbGU2NF9hZGRfY3B1KCZoZWFkZXItPmNoX25jaGVja3BvaW50cywgMSk7CiAJCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKLQkJbmlsZnNfbWR0X21hcmtfYnVmZmVyX2RpcnR5KGhlYWRlcl9iaCk7CisJCW1hcmtfYnVmZmVyX2RpcnR5KGhlYWRlcl9iaCk7CiAJCW5pbGZzX21kdF9tYXJrX2RpcnR5KGNwZmlsZSk7CiAJfQogCkBAIC0zMjYsNyArMzI2LDcgQEAKIAkJfQogCQlpZiAobmljcHMgPiAwKSB7CiAJCQl0bmljcHMgKz0gbmljcHM7Ci0JCQluaWxmc19tZHRfbWFya19idWZmZXJfZGlydHkoY3BfYmgpOworCQkJbWFya19idWZmZXJfZGlydHkoY3BfYmgpOwogCQkJbmlsZnNfbWR0X21hcmtfZGlydHkoY3BmaWxlKTsKIAkJCWlmICghbmlsZnNfY3BmaWxlX2lzX2luX2ZpcnN0KGNwZmlsZSwgY25vKSkgewogCQkJCWNvdW50ID0KQEAgLTM1OCw3ICszNTgsNyBAQAogCQloZWFkZXIgPSBuaWxmc19jcGZpbGVfYmxvY2tfZ2V0X2hlYWRlcihjcGZpbGUsIGhlYWRlcl9iaCwKIAkJCQkJCSAgICAgICBrYWRkcik7CiAJCWxlNjRfYWRkX2NwdSgmaGVhZGVyLT5jaF9uY2hlY2twb2ludHMsIC0odTY0KXRuaWNwcyk7Ci0JCW5pbGZzX21kdF9tYXJrX2J1ZmZlcl9kaXJ0eShoZWFkZXJfYmgpOworCQltYXJrX2J1ZmZlcl9kaXJ0eShoZWFkZXJfYmgpOwogCQluaWxmc19tZHRfbWFya19kaXJ0eShjcGZpbGUpOwogCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7CiAJfQpAQCAtNjcxLDEwICs2NzEsMTAgQEAKIAlsZTY0X2FkZF9jcHUoJmhlYWRlci0+Y2hfbnNuYXBzaG90cywgMSk7CiAJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOwogCi0JbmlsZnNfbWR0X21hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgpOwotCW5pbGZzX21kdF9tYXJrX2J1ZmZlcl9kaXJ0eShjdXJyX2JoKTsKLQluaWxmc19tZHRfbWFya19idWZmZXJfZGlydHkoY3BfYmgpOwotCW5pbGZzX21kdF9tYXJrX2J1ZmZlcl9kaXJ0eShoZWFkZXJfYmgpOworCW1hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgpOworCW1hcmtfYnVmZmVyX2RpcnR5KGN1cnJfYmgpOworCW1hcmtfYnVmZmVyX2RpcnR5KGNwX2JoKTsKKwltYXJrX2J1ZmZlcl9kaXJ0eShoZWFkZXJfYmgpOwogCW5pbGZzX21kdF9tYXJrX2RpcnR5KGNwZmlsZSk7CiAKIAlicmVsc2UocHJldl9iaCk7CkBAIC03NzQsMTAgKzc3NCwxMCBAQAogCWxlNjRfYWRkX2NwdSgmaGVhZGVyLT5jaF9uc25hcHNob3RzLCAtMSk7CiAJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOwogCi0JbmlsZnNfbWR0X21hcmtfYnVmZmVyX2RpcnR5KG5leHRfYmgpOwotCW5pbGZzX21kdF9tYXJrX2J1ZmZlcl9kaXJ0eShwcmV2X2JoKTsKLQluaWxmc19tZHRfbWFya19idWZmZXJfZGlydHkoY3BfYmgpOwotCW5pbGZzX21kdF9tYXJrX2J1ZmZlcl9kaXJ0eShoZWFkZXJfYmgpOworCW1hcmtfYnVmZmVyX2RpcnR5KG5leHRfYmgpOworCW1hcmtfYnVmZmVyX2RpcnR5KHByZXZfYmgpOworCW1hcmtfYnVmZmVyX2RpcnR5KGNwX2JoKTsKKwltYXJrX2J1ZmZlcl9kaXJ0eShoZWFkZXJfYmgpOwogCW5pbGZzX21kdF9tYXJrX2RpcnR5KGNwZmlsZSk7CiAKIAlicmVsc2UocHJldl9iaCk7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvZGF0LmMgYi9mcy9uaWxmczIvZGF0LmMKaW5kZXggNTllNWZlNy4uZmNjMmY4NiAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2RhdC5jCisrKyBiL2ZzL25pbGZzMi9kYXQuYwpAQCAtNTQsNyArNTQsNyBAQAogc3RhdGljIHZvaWQgbmlsZnNfZGF0X2NvbW1pdF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRhdCwKIAkJCQkgICBzdHJ1Y3QgbmlsZnNfcGFsbG9jX3JlcSAqcmVxKQogewotCW5pbGZzX21kdF9tYXJrX2J1ZmZlcl9kaXJ0eShyZXEtPnByX2VudHJ5X2JoKTsKKwltYXJrX2J1ZmZlcl9kaXJ0eShyZXEtPnByX2VudHJ5X2JoKTsKIAluaWxmc19tZHRfbWFya19kaXJ0eShkYXQpOwogCWJyZWxzZShyZXEtPnByX2VudHJ5X2JoKTsKIH0KQEAgLTM2MSw3ICszNjEsNyBAQAogCWVudHJ5LT5kZV9ibG9ja25yID0gY3B1X3RvX2xlNjQoYmxvY2tucik7CiAJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOwogCi0JbmlsZnNfbWR0X21hcmtfYnVmZmVyX2RpcnR5KGVudHJ5X2JoKTsKKwltYXJrX2J1ZmZlcl9kaXJ0eShlbnRyeV9iaCk7CiAJbmlsZnNfbWR0X21hcmtfZGlydHkoZGF0KTsKIAogCWJyZWxzZShlbnRyeV9iaCk7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvZmlsZS5jIGIvZnMvbmlsZnMyL2ZpbGUuYwppbmRleCAzOTdlNzMyLi5kN2VlY2E2IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvZmlsZS5jCisrKyBiL2ZzL25pbGZzMi9maWxlLmMKQEAgLTExMSw3ICsxMTEsNiBAQAogCW5pbGZzX3RyYW5zYWN0aW9uX2NvbW1pdChpbm9kZS0+aV9zYik7CiAKICBtYXBwZWQ6Ci0JU2V0UGFnZUNoZWNrZWQocGFnZSk7CiAJd2FpdF9vbl9wYWdlX3dyaXRlYmFjayhwYWdlKTsKIAlyZXR1cm4gVk1fRkFVTFRfTE9DS0VEOwogfQpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2djaW5vZGUuYyBiL2ZzL25pbGZzMi9nY2lub2RlLmMKaW5kZXggMWMyYTNlMi4uMDhhMDdhMiAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2djaW5vZGUuYworKysgYi9mcy9uaWxmczIvZ2Npbm9kZS5jCkBAIC00OCw5ICs0OCw2IEBACiAjaW5jbHVkZSAiZGF0LmgiCiAjaW5jbHVkZSAiaWZpbGUuaCIKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZGVmX2djaW5vZGVfYW9wcyA9IHsKLX07Ci0KIC8qCiAgKiBuaWxmc19nY2NhY2hlX3N1Ym1pdF9yZWFkX2RhdGEoKSAtIGFkZCBkYXRhIGJ1ZmZlciBhbmQgc3VibWl0IHJlYWQgcmVxdWVzdAogICogQGlub2RlIC0gZ2MgaW5vZGUKQEAgLTg3LDkgKzg0LDkgQEAKIAkJZ290byBvdXQ7CiAKIAlpZiAocGJuID09IDApIHsKLQkJc3RydWN0IGlub2RlICpkYXRfaW5vZGUgPSBOSUxGU19JX05JTEZTKGlub2RlKS0+bnNfZGF0OwotCQkJCQkgIC8qIHVzZSBvcmlnaW5hbCBkYXQsIG5vdCBnYyBkYXQuICovCi0JCWVyciA9IG5pbGZzX2RhdF90cmFuc2xhdGUoZGF0X2lub2RlLCB2Ym4sICZwYm4pOworCQlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IGlub2RlLT5pX3NiLT5zX2ZzX2luZm87CisKKwkJZXJyID0gbmlsZnNfZGF0X3RyYW5zbGF0ZShuaWxmcy0+bnNfZGF0LCB2Ym4sICZwYm4pOwogCQlpZiAodW5saWtlbHkoZXJyKSkgeyAvKiAtRUlPLCAtRU5PTUVNLCAtRU5PRU5UICovCiAJCQlicmVsc2UoYmgpOwogCQkJZ290byBmYWlsZWQ7CkBAIC0xMDMsNyArMTAwLDcgQEAKIAl9CiAKIAlpZiAoIWJ1ZmZlcl9tYXBwZWQoYmgpKSB7Ci0JCWJoLT5iX2JkZXYgPSBOSUxGU19JX05JTEZTKGlub2RlKS0+bnNfYmRldjsKKwkJYmgtPmJfYmRldiA9IGlub2RlLT5pX3NiLT5zX2JkZXY7CiAJCXNldF9idWZmZXJfbWFwcGVkKGJoKTsKIAl9CiAJYmgtPmJfYmxvY2tuciA9IHBibjsKQEAgLTE2MCwxNSArMTU3LDExIEBACiAJaWYgKGJ1ZmZlcl9kaXJ0eShiaCkpCiAJCXJldHVybiAtRUVYSVNUOwogCi0JaWYgKGJ1ZmZlcl9uaWxmc19ub2RlKGJoKSkgewotCQlpZiAobmlsZnNfYnRyZWVfYnJva2VuX25vZGVfYmxvY2soYmgpKSB7Ci0JCQljbGVhcl9idWZmZXJfdXB0b2RhdGUoYmgpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQkJbmlsZnNfYnRub2RlX21hcmtfZGlydHkoYmgpOwotCX0gZWxzZSB7Ci0JCW5pbGZzX21hcmtfYnVmZmVyX2RpcnR5KGJoKTsKKwlpZiAoYnVmZmVyX25pbGZzX25vZGUoYmgpICYmIG5pbGZzX2J0cmVlX2Jyb2tlbl9ub2RlX2Jsb2NrKGJoKSkgeworCQljbGVhcl9idWZmZXJfdXB0b2RhdGUoYmgpOworCQlyZXR1cm4gLUVJTzsKIAl9CisJbWFya19idWZmZXJfZGlydHkoYmgpOwogCXJldHVybiAwOwogfQogCkBAIC0xNzgsNyArMTcxLDcgQEAKIAogCWlub2RlLT5pX21vZGUgPSBTX0lGUkVHOwogCW1hcHBpbmdfc2V0X2dmcF9tYXNrKGlub2RlLT5pX21hcHBpbmcsIEdGUF9OT0ZTKTsKLQlpbm9kZS0+aV9tYXBwaW5nLT5hX29wcyA9ICZkZWZfZ2Npbm9kZV9hb3BzOworCWlub2RlLT5pX21hcHBpbmctPmFfb3BzID0gJmVtcHR5X2FvcHM7CiAJaW5vZGUtPmlfbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyA9IGlub2RlLT5pX3NiLT5zX2JkaTsKIAogCWlpLT5pX2ZsYWdzID0gMDsKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9pZmlsZS5jIGIvZnMvbmlsZnMyL2lmaWxlLmMKaW5kZXggYmZjNzNkMy4uNjg0ZDc2MyAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2lmaWxlLmMKKysrIGIvZnMvbmlsZnMyL2lmaWxlLmMKQEAgLTgwLDcgKzgwLDcgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAJbmlsZnNfcGFsbG9jX2NvbW1pdF9hbGxvY19lbnRyeShpZmlsZSwgJnJlcSk7Ci0JbmlsZnNfbWR0X21hcmtfYnVmZmVyX2RpcnR5KHJlcS5wcl9lbnRyeV9iaCk7CisJbWFya19idWZmZXJfZGlydHkocmVxLnByX2VudHJ5X2JoKTsKIAluaWxmc19tZHRfbWFya19kaXJ0eShpZmlsZSk7CiAJKm91dF9pbm8gPSAoaW5vX3QpcmVxLnByX2VudHJ5X25yOwogCSpvdXRfYmggPSByZXEucHJfZW50cnlfYmg7CkBAIC0xMjgsNyArMTI4LDcgQEAKIAlyYXdfaW5vZGUtPmlfZmxhZ3MgPSAwOwogCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKIAotCW5pbGZzX21kdF9tYXJrX2J1ZmZlcl9kaXJ0eShyZXEucHJfZW50cnlfYmgpOworCW1hcmtfYnVmZmVyX2RpcnR5KHJlcS5wcl9lbnRyeV9iaCk7CiAJYnJlbHNlKHJlcS5wcl9lbnRyeV9iaCk7CiAKIAluaWxmc19wYWxsb2NfY29tbWl0X2ZyZWVfZW50cnkoaWZpbGUsICZyZXEpOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2lub2RlLmMgYi9mcy9uaWxmczIvaW5vZGUuYwppbmRleCBjMGFhMjc0Li41ODdmMTg0IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvaW5vZGUuYworKysgYi9mcy9uaWxmczIvaW5vZGUuYwpAQCAtNzQsMTQgKzc0LDE0IEBACiAJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSkKIHsKIAlzdHJ1Y3QgbmlsZnNfaW5vZGVfaW5mbyAqaWkgPSBOSUxGU19JKGlub2RlKTsKKwlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IGlub2RlLT5pX3NiLT5zX2ZzX2luZm87CiAJX191NjQgYmxrbnVtID0gMDsKIAlpbnQgZXJyID0gMCwgcmV0OwotCXN0cnVjdCBpbm9kZSAqZGF0ID0gTklMRlNfSV9OSUxGUyhpbm9kZSktPm5zX2RhdDsKIAl1bnNpZ25lZCBtYXhibG9ja3MgPSBiaF9yZXN1bHQtPmJfc2l6ZSA+PiBpbm9kZS0+aV9ibGtiaXRzOwogCi0JZG93bl9yZWFkKCZOSUxGU19NRFQoZGF0KS0+bWlfc2VtKTsKKwlkb3duX3JlYWQoJk5JTEZTX01EVChuaWxmcy0+bnNfZGF0KS0+bWlfc2VtKTsKIAlyZXQgPSBuaWxmc19ibWFwX2xvb2t1cF9jb250aWcoaWktPmlfYm1hcCwgYmxrb2ZmLCAmYmxrbnVtLCBtYXhibG9ja3MpOwotCXVwX3JlYWQoJk5JTEZTX01EVChkYXQpLT5taV9zZW0pOworCXVwX3JlYWQoJk5JTEZTX01EVChuaWxmcy0+bnNfZGF0KS0+bWlfc2VtKTsKIAlpZiAocmV0ID49IDApIHsJLyogZm91bmQgKi8KIAkJbWFwX2JoKGJoX3Jlc3VsdCwgaW5vZGUtPmlfc2IsIGJsa251bSk7CiAJCWlmIChyZXQgPiAwKQpAQCAtNTk2LDYgKzU5NiwxNiBAQAogCXJhd19pbm9kZS0+aV9mbGFncyA9IGNwdV90b19sZTMyKGlpLT5pX2ZsYWdzKTsKIAlyYXdfaW5vZGUtPmlfZ2VuZXJhdGlvbiA9IGNwdV90b19sZTMyKGlub2RlLT5pX2dlbmVyYXRpb24pOwogCisJaWYgKE5JTEZTX1JPT1RfTUVUQURBVEFfRklMRShpbm9kZS0+aV9pbm8pKSB7CisJCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gaW5vZGUtPmlfc2ItPnNfZnNfaW5mbzsKKworCQkvKiB6ZXJvLWZpbGwgdW51c2VkIHBvcnRpb24gaW4gdGhlIGNhc2Ugb2Ygc3VwZXIgcm9vdCBibG9jayAqLworCQlyYXdfaW5vZGUtPmlfeGF0dHIgPSAwOworCQlyYXdfaW5vZGUtPmlfcGFkID0gMDsKKwkJbWVtc2V0KCh2b2lkICopcmF3X2lub2RlICsgc2l6ZW9mKCpyYXdfaW5vZGUpLCAwLAorCQkgICAgICAgbmlsZnMtPm5zX2lub2RlX3NpemUgLSBzaXplb2YoKnJhd19pbm9kZSkpOworCX0KKwogCWlmIChoYXNfYm1hcCkKIAkJbmlsZnNfYm1hcF93cml0ZShpaS0+aV9ibWFwLCByYXdfaW5vZGUpOwogCWVsc2UgaWYgKFNfSVNDSFIoaW5vZGUtPmlfbW9kZSkgfHwgU19JU0JMSyhpbm9kZS0+aV9tb2RlKSkKQEAgLTg3Miw4ICs4ODIsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7IC8qIE5JTEZTX0lfRElSVFkgbWF5IHJlbWFpbiBmb3IKIAkJCQkJICAgZnJlZWluZyBpbm9kZSAqLwogCQl9Ci0JCWxpc3RfZGVsKCZpaS0+aV9kaXJ0eSk7Ci0JCWxpc3RfYWRkX3RhaWwoJmlpLT5pX2RpcnR5LCAmbmlsZnMtPm5zX2RpcnR5X2ZpbGVzKTsKKwkJbGlzdF9tb3ZlX3RhaWwoJmlpLT5pX2RpcnR5LCAmbmlsZnMtPm5zX2RpcnR5X2ZpbGVzKTsKIAkJc2V0X2JpdChOSUxGU19JX1FVRVVFRCwgJmlpLT5pX3N0YXRlKTsKIAl9CiAJc3Bpbl91bmxvY2soJm5pbGZzLT5uc19pbm9kZV9sb2NrKTsKQEAgLTg5Miw3ICs5MDEsNyBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAluaWxmc191cGRhdGVfaW5vZGUoaW5vZGUsIGliaCk7Ci0JbmlsZnNfbWR0X21hcmtfYnVmZmVyX2RpcnR5KGliaCk7CisJbWFya19idWZmZXJfZGlydHkoaWJoKTsKIAluaWxmc19tZHRfbWFya19kaXJ0eShOSUxGU19JKGlub2RlKS0+aV9yb290LT5pZmlsZSk7CiAJYnJlbHNlKGliaCk7CiAJcmV0dXJuIDA7CkBAIC05MzEsNyArOTQwLDcgQEAKIGludCBuaWxmc19maWVtYXAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpZW1hcF9leHRlbnRfaW5mbyAqZmllaW5mbywKIAkJIF9fdTY0IHN0YXJ0LCBfX3U2NCBsZW4pCiB7Ci0Jc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBOSUxGU19JX05JTEZTKGlub2RlKTsKKwlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IGlub2RlLT5pX3NiLT5zX2ZzX2luZm87CiAJX191NjQgbG9naWNhbCA9IDAsIHBoeXMgPSAwLCBzaXplID0gMDsKIAlfX3UzMiBmbGFncyA9IDA7CiAJbG9mZl90IGlzaXplOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2lvY3RsLmMgYi9mcy9uaWxmczIvaW9jdGwuYwppbmRleCBmMjQ2OWJhLi40MWQ2NzQzIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvaW9jdGwuYworKysgYi9mcy9uaWxmczIvaW9jdGwuYwpAQCAtNjk4LDYgKzY5OCw2MyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG5pbGZzX2lvY3RsX3Jlc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCSAgICAgIHZvaWQgX191c2VyICphcmdwKQoreworCV9fdTY0IG5ld3NpemU7CisJaW50IHJldCA9IC1FUEVSTTsKKworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBtbnRfd2FudF93cml0ZShmaWxwLT5mX3BhdGgubW50KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXJldCA9IC1FRkFVTFQ7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZuZXdzaXplLCBhcmdwLCBzaXplb2YobmV3c2l6ZSkpKQorCQlnb3RvIG91dF9kcm9wX3dyaXRlOworCisJcmV0ID0gbmlsZnNfcmVzaXplX2ZzKGlub2RlLT5pX3NiLCBuZXdzaXplKTsKKworb3V0X2Ryb3Bfd3JpdGU6CisJbW50X2Ryb3Bfd3JpdGUoZmlscC0+Zl9wYXRoLm1udCk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBuaWxmc19pb2N0bF9zZXRfYWxsb2NfcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCBfX3VzZXIgKmFyZ3ApCit7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBpbm9kZS0+aV9zYi0+c19mc19pbmZvOworCV9fdTY0IHJhbmdlWzJdOworCV9fdTY0IG1pbnNlZywgbWF4c2VnOworCXVuc2lnbmVkIGxvbmcgc2VnYnl0ZXM7CisJaW50IHJldCA9IC1FUEVSTTsKKworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSAtRUZBVUxUOworCWlmIChjb3B5X2Zyb21fdXNlcihyYW5nZSwgYXJncCwgc2l6ZW9mKF9fdTY0WzJdKSkpCisJCWdvdG8gb3V0OworCisJcmV0ID0gLUVSQU5HRTsKKwlpZiAocmFuZ2VbMV0gPiBpX3NpemVfcmVhZChpbm9kZS0+aV9zYi0+c19iZGV2LT5iZF9pbm9kZSkpCisJCWdvdG8gb3V0OworCisJc2VnYnl0ZXMgPSBuaWxmcy0+bnNfYmxvY2tzX3Blcl9zZWdtZW50ICogbmlsZnMtPm5zX2Jsb2Nrc2l6ZTsKKworCW1pbnNlZyA9IHJhbmdlWzBdICsgc2VnYnl0ZXMgLSAxOworCWRvX2RpdihtaW5zZWcsIHNlZ2J5dGVzKTsKKwltYXhzZWcgPSBOSUxGU19TQjJfT0ZGU0VUX0JZVEVTKHJhbmdlWzFdKTsKKwlkb19kaXYobWF4c2VnLCBzZWdieXRlcyk7CisJbWF4c2VnLS07CisKKwlyZXQgPSBuaWxmc19zdWZpbGVfc2V0X2FsbG9jX3JhbmdlKG5pbGZzLT5uc19zdWZpbGUsIG1pbnNlZywgbWF4c2VnKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IG5pbGZzX2lvY3RsX2dldF9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAogCQkJCXVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmdwLAogCQkJCXNpemVfdCBtZW1ic3osCkBAIC03NjMsNiArODIwLDEwIEBACiAJCXJldHVybiBuaWxmc19pb2N0bF9jbGVhbl9zZWdtZW50cyhpbm9kZSwgZmlscCwgY21kLCBhcmdwKTsKIAljYXNlIE5JTEZTX0lPQ1RMX1NZTkM6CiAJCXJldHVybiBuaWxmc19pb2N0bF9zeW5jKGlub2RlLCBmaWxwLCBjbWQsIGFyZ3ApOworCWNhc2UgTklMRlNfSU9DVExfUkVTSVpFOgorCQlyZXR1cm4gbmlsZnNfaW9jdGxfcmVzaXplKGlub2RlLCBmaWxwLCBhcmdwKTsKKwljYXNlIE5JTEZTX0lPQ1RMX1NFVF9BTExPQ19SQU5HRToKKwkJcmV0dXJuIG5pbGZzX2lvY3RsX3NldF9hbGxvY19yYW5nZShpbm9kZSwgYXJncCk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9UVFk7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL21kdC5jIGIvZnMvbmlsZnMyL21kdC5jCmluZGV4IGE2NDliMDUuLjgwMGU4ZDcgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9tZHQuYworKysgYi9mcy9uaWxmczIvbWR0LmMKQEAgLTY2LDcgKzY2LDcgQEAKIAlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7CiAKIAlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKLQluaWxmc19tYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CisJbWFya19idWZmZXJfZGlydHkoYmgpOwogCW5pbGZzX21kdF9tYXJrX2RpcnR5KGlub2RlKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTM1NSw3ICszNTUsNyBAQAogCWVyciA9IG5pbGZzX21kdF9yZWFkX2Jsb2NrKGlub2RlLCBibG9jaywgMCwgJmJoKTsKIAlpZiAodW5saWtlbHkoZXJyKSkKIAkJcmV0dXJuIGVycjsKLQluaWxmc19tYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CisJbWFya19idWZmZXJfZGlydHkoYmgpOwogCW5pbGZzX21kdF9tYXJrX2RpcnR5KGlub2RlKTsKIAlicmVsc2UoYmgpOwogCXJldHVybiAwOwpAQCAtNDUwLDkgKzQ1MCw5IEBACiAKIAlJTklUX0xJU1RfSEVBRCgmc2hhZG93LT5mcm96ZW5fYnVmZmVycyk7CiAJYWRkcmVzc19zcGFjZV9pbml0X29uY2UoJnNoYWRvdy0+ZnJvemVuX2RhdGEpOwotCW5pbGZzX21hcHBpbmdfaW5pdCgmc2hhZG93LT5mcm96ZW5fZGF0YSwgYmRpKTsKKwluaWxmc19tYXBwaW5nX2luaXQoJnNoYWRvdy0+ZnJvemVuX2RhdGEsIGlub2RlLCBiZGkpOwogCWFkZHJlc3Nfc3BhY2VfaW5pdF9vbmNlKCZzaGFkb3ctPmZyb3plbl9idG5vZGVzKTsKLQluaWxmc19tYXBwaW5nX2luaXQoJnNoYWRvdy0+ZnJvemVuX2J0bm9kZXMsIGJkaSk7CisJbmlsZnNfbWFwcGluZ19pbml0KCZzaGFkb3ctPmZyb3plbl9idG5vZGVzLCBpbm9kZSwgYmRpKTsKIAltaS0+bWlfc2hhZG93ID0gc2hhZG93OwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL21kdC5oIGIvZnMvbmlsZnMyL21kdC5oCmluZGV4IGVkNjg1NjMuLmFiMjBhNGIgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9tZHQuaAorKysgYi9mcy9uaWxmczIvbWR0LmgKQEAgLTY0LDExICs2NCw2IEBACiAJcmV0dXJuIGlub2RlLT5pX3ByaXZhdGU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHRoZV9uaWxmcyAqTklMRlNfSV9OSUxGUyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXJldHVybiBpbm9kZS0+aV9zYi0+c19mc19pbmZvOwotfQotCiAvKiBEZWZhdWx0IEdGUCBmbGFncyB1c2luZyBoaWdobWVtICovCiAjZGVmaW5lIE5JTEZTX01EVF9HRlAgICAgICAoX19HRlBfV0FJVCB8IF9fR0ZQX0lPIHwgX19HRlBfSElHSE1FTSkKIApAQCAtOTMsOCArODgsNiBAQAogc3RydWN0IGJ1ZmZlcl9oZWFkICpuaWxmc19tZHRfZ2V0X2Zyb3plbl9idWZmZXIoc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOwogCi0jZGVmaW5lIG5pbGZzX21kdF9tYXJrX2J1ZmZlcl9kaXJ0eShiaCkJbmlsZnNfbWFya19idWZmZXJfZGlydHkoYmgpCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCBuaWxmc19tZHRfbWFya19kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCWlmICghdGVzdF9iaXQoTklMRlNfSV9ESVJUWSwgJk5JTEZTX0koaW5vZGUpLT5pX3N0YXRlKSkKQEAgLTEwOCw3ICsxMDEsNyBAQAogCiBzdGF0aWMgaW5saW5lIF9fdTY0IG5pbGZzX21kdF9jbm8oc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlyZXR1cm4gTklMRlNfSV9OSUxGUyhpbm9kZSktPm5zX2NubzsKKwlyZXR1cm4gKChzdHJ1Y3QgdGhlX25pbGZzICopaW5vZGUtPmlfc2ItPnNfZnNfaW5mbyktPm5zX2NubzsKIH0KIAogI2RlZmluZSBuaWxmc19tZHRfYmdsX2xvY2soaW5vZGUsIGJnKSBcCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvbmlsZnMuaCBiL2ZzL25pbGZzMi9uaWxmcy5oCmluZGV4IGE4ZGQzNDQuLmE5YzZhNTMgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9uaWxmcy5oCisrKyBiL2ZzL25pbGZzMi9uaWxmcy5oCkBAIC04MCwxMiArODAsNiBAQAogCXJldHVybiAmaWktPnZmc19pbm9kZTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKk5JTEZTX0FTX0koc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCi17Ci0JcmV0dXJuIChtYXBwaW5nLT5ob3N0KSA/IDoKLQkJY29udGFpbmVyX29mKG1hcHBpbmcsIHN0cnVjdCBpbm9kZSwgaV9kYXRhKTsKLX0KLQogLyoKICAqIER5bmFtaWMgc3RhdGUgZmxhZ3Mgb2YgTklMRlMgb24tbWVtb3J5IGlub2RlIChpX3N0YXRlKQogICovCkBAIC0yOTgsNiArMjkyLDcgQEAKIAkJCQkJICAgICAgIGludCBmbGlwKTsKIGludCBuaWxmc19jb21taXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGZsYWcpOwogaW50IG5pbGZzX2NsZWFudXBfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CitpbnQgbmlsZnNfcmVzaXplX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIF9fdTY0IG5ld3NpemUpOwogaW50IG5pbGZzX2F0dGFjaF9jaGVja3BvaW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIF9fdTY0IGNubywgaW50IGN1cnJfbW50LAogCQkJICAgIHN0cnVjdCBuaWxmc19yb290ICoqcm9vdCk7CiBpbnQgbmlsZnNfY2hlY2twb2ludF9pc19tb3VudGVkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIF9fdTY0IGNubyk7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvcGFnZS5jIGIvZnMvbmlsZnMyL3BhZ2UuYwppbmRleCAxMTY4MDU5Li42NTIyMWEwIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvcGFnZS5jCisrKyBiL2ZzL25pbGZzMi9wYWdlLmMKQEAgLTM3LDggKzM3LDcgQEAKIAogI2RlZmluZSBOSUxGU19CVUZGRVJfSU5IRVJFTlRfQklUUyAgXAogCSgoMVVMIDw8IEJIX1VwdG9kYXRlKSB8ICgxVUwgPDwgQkhfTWFwcGVkKSB8ICgxVUwgPDwgQkhfTklMRlNfTm9kZSkgfCBcCi0JICgxVUwgPDwgQkhfTklMRlNfVm9sYXRpbGUpIHwgKDFVTCA8PCBCSF9OSUxGU19BbGxvY2F0ZWQpIHwgXAotCSAoMVVMIDw8IEJIX05JTEZTX0NoZWNrZWQpKQorCSAoMVVMIDw8IEJIX05JTEZTX1ZvbGF0aWxlKSB8ICgxVUwgPDwgQkhfTklMRlNfQ2hlY2tlZCkpCiAKIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKgogX19uaWxmc19nZXRfcGFnZV9ibG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBibG9jaywgcGdvZmZfdCBpbmRleCwKQEAgLTU5LDE5ICs1OCw2IEBACiAJcmV0dXJuIGJoOwogfQogCi0vKgotICogU2luY2UgdGhlIHBhZ2UgY2FjaGUgb2YgQi10cmVlIG5vZGUgcGFnZXMgb3IgZGF0YSBwYWdlIGNhY2hlIG9mIHBzZXVkbwotICogaW5vZGVzIGRvZXMgbm90IGhhdmUgYSB2YWxpZCBtYXBwaW5nLT5ob3N0IHBvaW50ZXIsIGNhbGxpbmcKLSAqIG1hcmtfYnVmZmVyX2RpcnR5KCkgZm9yIHRoZWlyIGJ1ZmZlcnMgY2F1c2VzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlOwotICogaXQgY2FsbHMgX19tYXJrX2lub2RlX2RpcnR5KE5VTEwpIHRocm91Z2ggX19zZXRfcGFnZV9kaXJ0eSgpLgotICogVG8gYXZvaWQgdGhpcyBwcm9ibGVtLCB0aGUgb2xkIHN0eWxlIG1hcmtfYnVmZmVyX2RpcnR5KCkgaXMgdXNlZCBpbnN0ZWFkLgotICovCi12b2lkIG5pbGZzX21hcmtfYnVmZmVyX2RpcnR5KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCi17Ci0JaWYgKCFidWZmZXJfZGlydHkoYmgpICYmICF0ZXN0X3NldF9idWZmZXJfZGlydHkoYmgpKQotCQlfX3NldF9wYWdlX2RpcnR5X25vYnVmZmVycyhiaC0+Yl9wYWdlKTsKLX0KLQogc3RydWN0IGJ1ZmZlcl9oZWFkICpuaWxmc19ncmFiX2J1ZmZlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSAgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYmxrb2ZmLApAQCAtMTgzLDcgKzE2OSw3IEBACiB2b2lkIG5pbGZzX3BhZ2VfYnVnKHN0cnVjdCBwYWdlICpwYWdlKQogewogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptOwotCXVuc2lnbmVkIGxvbmcgaW5vID0gMDsKKwl1bnNpZ25lZCBsb25nIGlubzsKIAogCWlmICh1bmxpa2VseSghcGFnZSkpIHsKIAkJcHJpbnRrKEtFUk5fQ1JJVCAiTklMRlNfUEFHRV9CVUcoTlVMTClcbiIpOwpAQCAtMTkxLDExICsxNzcsOCBAQAogCX0KIAogCW0gPSBwYWdlLT5tYXBwaW5nOwotCWlmIChtKSB7Ci0JCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOSUxGU19BU19JKG0pOwotCQlpZiAoaW5vZGUgIT0gTlVMTCkKLQkJCWlubyA9IGlub2RlLT5pX2lubzsKLQl9CisJaW5vID0gbSA/IG0tPmhvc3QtPmlfaW5vIDogMDsKKwogCXByaW50ayhLRVJOX0NSSVQgIk5JTEZTX1BBR0VfQlVHKCVwKTogY250PSVkIGluZGV4Iz0lbGx1IGZsYWdzPTB4JWx4ICIKIAkgICAgICAgIm1hcHBpbmc9JXAgaW5vPSVsdVxuIiwKIAkgICAgICAgcGFnZSwgYXRvbWljX3JlYWQoJnBhZ2UtPl9jb3VudCksCkBAIC0yMTcsNTYgKzIwMCw2IEBACiB9CiAKIC8qKgotICogbmlsZnNfYWxsb2NfcHJpdmF0ZV9wYWdlIC0gYWxsb2NhdGUgYSBwcml2YXRlIHBhZ2Ugd2l0aCBidWZmZXIgaGVhZHMKLSAqCi0gKiBSZXR1cm4gVmFsdWU6IE9uIHN1Y2Nlc3MsIGEgcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIHBhZ2UgaXMgcmV0dXJuZWQuCi0gKiBPbiBlcnJvciwgTlVMTCBpcyByZXR1cm5lZC4KLSAqLwotc3RydWN0IHBhZ2UgKm5pbGZzX2FsbG9jX3ByaXZhdGVfcGFnZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBpbnQgc2l6ZSwKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHN0YXRlKQotewotCXN0cnVjdCBidWZmZXJfaGVhZCAqYmgsICpoZWFkLCAqdGFpbDsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQotCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9OT0ZTKTsgLyogcGFnZV9jb3VudCBvZiB0aGUgcmV0dXJuZWQgcGFnZSBpcyAxICovCi0JaWYgKHVubGlrZWx5KCFwYWdlKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlsb2NrX3BhZ2UocGFnZSk7Ci0JaGVhZCA9IGFsbG9jX3BhZ2VfYnVmZmVycyhwYWdlLCBzaXplLCAwKTsKLQlpZiAodW5saWtlbHkoIWhlYWQpKSB7Ci0JCXVubG9ja19wYWdlKHBhZ2UpOwotCQlfX2ZyZWVfcGFnZShwYWdlKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JYmggPSBoZWFkOwotCWRvIHsKLQkJYmgtPmJfc3RhdGUgPSAoMVVMIDw8IEJIX05JTEZTX0FsbG9jYXRlZCkgfCBzdGF0ZTsKLQkJdGFpbCA9IGJoOwotCQliaC0+Yl9iZGV2ID0gYmRldjsKLQkJYmggPSBiaC0+Yl90aGlzX3BhZ2U7Ci0JfSB3aGlsZSAoYmgpOwotCi0JdGFpbC0+Yl90aGlzX3BhZ2UgPSBoZWFkOwotCWF0dGFjaF9wYWdlX2J1ZmZlcnMocGFnZSwgaGVhZCk7Ci0KLQlyZXR1cm4gcGFnZTsKLX0KLQotdm9pZCBuaWxmc19mcmVlX3ByaXZhdGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlCVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOwotCUJVR19PTihwYWdlLT5tYXBwaW5nKTsKLQotCWlmIChwYWdlX2hhc19idWZmZXJzKHBhZ2UpICYmICF0cnlfdG9fZnJlZV9idWZmZXJzKHBhZ2UpKQotCQlOSUxGU19QQUdFX0JVRyhwYWdlLCAiZmFpbGVkIHRvIGZyZWUgcGFnZSIpOwotCi0JdW5sb2NrX3BhZ2UocGFnZSk7Ci0JX19mcmVlX3BhZ2UocGFnZSk7Ci19Ci0KLS8qKgogICogbmlsZnNfY29weV9wYWdlIC0tIGNvcHkgdGhlIHBhZ2Ugd2l0aCBidWZmZXJzCiAgKiBAZHN0OiBkZXN0aW5hdGlvbiBwYWdlCiAgKiBAc3JjOiBzb3VyY2UgcGFnZQpAQCAtNDkyLDEwICs0MjUsMTAgQEAKIAlyZXR1cm4gbmM7CiB9CiAKLXZvaWQgbmlsZnNfbWFwcGluZ19pbml0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAordm9pZCBuaWxmc19tYXBwaW5nX2luaXQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpKQogewotCW1hcHBpbmctPmhvc3QgPSBOVUxMOworCW1hcHBpbmctPmhvc3QgPSBpbm9kZTsKIAltYXBwaW5nLT5mbGFncyA9IDA7CiAJbWFwcGluZ19zZXRfZ2ZwX21hc2sobWFwcGluZywgR0ZQX05PRlMpOwogCW1hcHBpbmctPmFzc29jX21hcHBpbmcgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3BhZ2UuaCBiL2ZzL25pbGZzMi9wYWdlLmgKaW5kZXggZjA2Yjc5YS4uZmI3ZGU3MSAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3BhZ2UuaAorKysgYi9mcy9uaWxmczIvcGFnZS5oCkBAIC0zOCwxNCArMzgsMTIgQEAKIAlCSF9OSUxGU19SZWRpcmVjdGVkLAogfTsKIAotQlVGRkVSX0ZOUyhOSUxGU19BbGxvY2F0ZWQsIG5pbGZzX2FsbG9jYXRlZCkJLyogbmlsZnMgcHJpdmF0ZSBidWZmZXJzICovCiBCVUZGRVJfRk5TKE5JTEZTX05vZGUsIG5pbGZzX25vZGUpCQkvKiBuaWxmcyBub2RlIGJ1ZmZlcnMgKi8KIEJVRkZFUl9GTlMoTklMRlNfVm9sYXRpbGUsIG5pbGZzX3ZvbGF0aWxlKQogQlVGRkVSX0ZOUyhOSUxGU19DaGVja2VkLCBuaWxmc19jaGVja2VkKQkvKiBidWZmZXIgaXMgdmVyaWZpZWQgKi8KIEJVRkZFUl9GTlMoTklMRlNfUmVkaXJlY3RlZCwgbmlsZnNfcmVkaXJlY3RlZCkJLyogcmVkaXJlY3RlZCB0byBhIGNvcHkgKi8KIAogCi12b2lkIG5pbGZzX21hcmtfYnVmZmVyX2RpcnR5KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOwogaW50IF9fbmlsZnNfY2xlYXJfcGFnZV9kaXJ0eShzdHJ1Y3QgcGFnZSAqKTsKIAogc3RydWN0IGJ1ZmZlcl9oZWFkICpuaWxmc19ncmFiX2J1ZmZlcihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwKQEAgLTU0LDE0ICs1MiwxMSBAQAogdm9pZCBuaWxmc19jb3B5X2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICopOwogaW50IG5pbGZzX3BhZ2VfYnVmZmVyc19jbGVhbihzdHJ1Y3QgcGFnZSAqKTsKIHZvaWQgbmlsZnNfcGFnZV9idWcoc3RydWN0IHBhZ2UgKik7Ci1zdHJ1Y3QgcGFnZSAqbmlsZnNfYWxsb2NfcHJpdmF0ZV9wYWdlKHN0cnVjdCBibG9ja19kZXZpY2UgKiwgaW50LAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcpOwotdm9pZCBuaWxmc19mcmVlX3ByaXZhdGVfcGFnZShzdHJ1Y3QgcGFnZSAqKTsKIAogaW50IG5pbGZzX2NvcHlfZGlydHlfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKik7CiB2b2lkIG5pbGZzX2NvcHlfYmFja19wYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqKTsKIHZvaWQgbmlsZnNfY2xlYXJfZGlydHlfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKik7Ci12b2lkIG5pbGZzX21hcHBpbmdfaW5pdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKK3ZvaWQgbmlsZnNfbWFwcGluZ19pbml0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSk7CiB1bnNpZ25lZCBuaWxmc19wYWdlX2NvdW50X2NsZWFuX2J1ZmZlcnMoc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQsIHVuc2lnbmVkKTsKIHVuc2lnbmVkIGxvbmcgbmlsZnNfZmluZF91bmNvbW1pdHRlZF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9yZWNvdmVyeS5jIGIvZnMvbmlsZnMyL3JlY292ZXJ5LmMKaW5kZXggYmE0YTY0NS4uYTYwNGFjMCAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3JlY292ZXJ5LmMKKysrIGIvZnMvbmlsZnMyL3JlY292ZXJ5LmMKQEAgLTM4Nyw5ICszODcsOSBAQAogc3RhdGljIHZvaWQgZGlzcG9zZV9yZWNvdmVyeV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiB7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7Ci0JCXN0cnVjdCBuaWxmc19yZWNvdmVyeV9ibG9jayAqcmIKLQkJCT0gbGlzdF9lbnRyeShoZWFkLT5uZXh0LAotCQkJCSAgICAgc3RydWN0IG5pbGZzX3JlY292ZXJ5X2Jsb2NrLCBsaXN0KTsKKwkJc3RydWN0IG5pbGZzX3JlY292ZXJ5X2Jsb2NrICpyYjsKKworCQlyYiA9IGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgc3RydWN0IG5pbGZzX3JlY292ZXJ5X2Jsb2NrLCBsaXN0KTsKIAkJbGlzdF9kZWwoJnJiLT5saXN0KTsKIAkJa2ZyZWUocmIpOwogCX0KQEAgLTQxNiw5ICs0MTYsOSBAQAogdm9pZCBuaWxmc19kaXNwb3NlX3NlZ21lbnRfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQogewogCXdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkgewotCQlzdHJ1Y3QgbmlsZnNfc2VnbWVudF9lbnRyeSAqZW50Ci0JCQk9IGxpc3RfZW50cnkoaGVhZC0+bmV4dCwKLQkJCQkgICAgIHN0cnVjdCBuaWxmc19zZWdtZW50X2VudHJ5LCBsaXN0KTsKKwkJc3RydWN0IG5pbGZzX3NlZ21lbnRfZW50cnkgKmVudDsKKworCQllbnQgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBuaWxmc19zZWdtZW50X2VudHJ5LCBsaXN0KTsKIAkJbGlzdF9kZWwoJmVudC0+bGlzdCk7CiAJCWtmcmVlKGVudCk7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3NlZ2J1Zi5jIGIvZnMvbmlsZnMyL3NlZ2J1Zi5jCmluZGV4IDI4NTNmZjIuLjg1MGE3YzAgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9zZWdidWYuYworKysgYi9mcy9uaWxmczIvc2VnYnVmLmMKQEAgLTIzOSwxMiArMjM5LDE1IEBACiAJCQkJICAgIHUzMiBzZWVkKQogewogCXN0cnVjdCBuaWxmc19zdXBlcl9yb290ICpyYXdfc3I7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzZWdidWYtPnNiX3N1cGVyLT5zX2ZzX2luZm87CisJdW5zaWduZWQgc3JzaXplOwogCXUzMiBjcmM7CiAKIAlyYXdfc3IgPSAoc3RydWN0IG5pbGZzX3N1cGVyX3Jvb3QgKilzZWdidWYtPnNiX3N1cGVyX3Jvb3QtPmJfZGF0YTsKKwlzcnNpemUgPSBOSUxGU19TUl9CWVRFUyhuaWxmcy0+bnNfaW5vZGVfc2l6ZSk7CiAJY3JjID0gY3JjMzJfbGUoc2VlZCwKIAkJICAgICAgICh1bnNpZ25lZCBjaGFyICopcmF3X3NyICsgc2l6ZW9mKHJhd19zci0+c3Jfc3VtKSwKLQkJICAgICAgIE5JTEZTX1NSX0JZVEVTIC0gc2l6ZW9mKHJhd19zci0+c3Jfc3VtKSk7CisJCSAgICAgICBzcnNpemUgLSBzaXplb2YocmF3X3NyLT5zcl9zdW0pKTsKIAlyYXdfc3ItPnNyX3N1bSA9IGNwdV90b19sZTMyKGNyYyk7CiB9CiAKQEAgLTI1NCwxOCArMjU3LDYgQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShiaCwgbiwgbGlzdCwgYl9hc3NvY19idWZmZXJzKSB7CiAJCWxpc3RfZGVsX2luaXQoJmJoLT5iX2Fzc29jX2J1ZmZlcnMpOwotCQlpZiAoYnVmZmVyX25pbGZzX2FsbG9jYXRlZChiaCkpIHsKLQkJCXN0cnVjdCBwYWdlICpjbG9uZV9wYWdlID0gYmgtPmJfcGFnZTsKLQotCQkJLyogcmVtb3ZlIGNsb25lIHBhZ2UgKi8KLQkJCWJyZWxzZShiaCk7Ci0JCQlwYWdlX2NhY2hlX3JlbGVhc2UoY2xvbmVfcGFnZSk7IC8qIGZvciBlYWNoIGJoICovCi0JCQlpZiAocGFnZV9jb3VudChjbG9uZV9wYWdlKSA8PSAyKSB7Ci0JCQkJbG9ja19wYWdlKGNsb25lX3BhZ2UpOwotCQkJCW5pbGZzX2ZyZWVfcHJpdmF0ZV9wYWdlKGNsb25lX3BhZ2UpOwotCQkJfQotCQkJY29udGludWU7Ci0JCX0KIAkJYnJlbHNlKGJoKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvc2VnbWVudC5jIGIvZnMvbmlsZnMyL3NlZ21lbnQuYwppbmRleCBhZmU0ZjIxLi4xNDE2NDZlIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvc2VnbWVudC5jCisrKyBiL2ZzL25pbGZzMi9zZWdtZW50LmMKQEAgLTY1NSwxMyArNjU1LDEwIEBACiAJCWlmICh1bmxpa2VseShwYWdlLT5pbmRleCA+IGxhc3QpKQogCQkJYnJlYWs7CiAKLQkJaWYgKG1hcHBpbmctPmhvc3QpIHsKLQkJCWxvY2tfcGFnZShwYWdlKTsKLQkJCWlmICghcGFnZV9oYXNfYnVmZmVycyhwYWdlKSkKLQkJCQljcmVhdGVfZW1wdHlfYnVmZmVycyhwYWdlLAotCQkJCQkJICAgICAxIDw8IGlub2RlLT5pX2Jsa2JpdHMsIDApOwotCQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JCX0KKwkJbG9ja19wYWdlKHBhZ2UpOworCQlpZiAoIXBhZ2VfaGFzX2J1ZmZlcnMocGFnZSkpCisJCQljcmVhdGVfZW1wdHlfYnVmZmVycyhwYWdlLCAxIDw8IGlub2RlLT5pX2Jsa2JpdHMsIDApOworCQl1bmxvY2tfcGFnZShwYWdlKTsKIAogCQliaCA9IGhlYWQgPSBwYWdlX2J1ZmZlcnMocGFnZSk7CiAJCWRvIHsKQEAgLTgwOSw3ICs4MDYsNyBAQAogCQkvKiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgZHVwbGljYXRlZCB3aXRoIGNwZmlsZS4gIEJ1dCwgaXQgaXMKIAkJICAgbmVlZGVkIHRvIGNvbGxlY3QgdGhlIGNoZWNrcG9pbnQgZXZlbiBpZiBpdCB3YXMgbm90IG5ld2x5CiAJCSAgIGNyZWF0ZWQgKi8KLQkJbmlsZnNfbWR0X21hcmtfYnVmZmVyX2RpcnR5KGJoX2NwKTsKKwkJbWFya19idWZmZXJfZGlydHkoYmhfY3ApOwogCQluaWxmc19tZHRfbWFya19kaXJ0eShuaWxmcy0+bnNfY3BmaWxlKTsKIAkJbmlsZnNfY3BmaWxlX3B1dF9jaGVja3BvaW50KAogCQkJbmlsZnMtPm5zX2NwZmlsZSwgbmlsZnMtPm5zX2NubywgYmhfY3ApOwpAQCAtODg5LDEyICs4ODYsMTQgQEAKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3NyOwogCXN0cnVjdCBuaWxmc19zdXBlcl9yb290ICpyYXdfc3I7Ci0JdW5zaWduZWQgaXN6ID0gbmlsZnMtPm5zX2lub2RlX3NpemU7CisJdW5zaWduZWQgaXN6LCBzcnN6OwogCiAJYmhfc3IgPSBOSUxGU19MQVNUX1NFR0JVRigmc2NpLT5zY19zZWdidWZzKS0+c2Jfc3VwZXJfcm9vdDsKIAlyYXdfc3IgPSAoc3RydWN0IG5pbGZzX3N1cGVyX3Jvb3QgKiliaF9zci0+Yl9kYXRhOworCWlzeiA9IG5pbGZzLT5uc19pbm9kZV9zaXplOworCXNyc3ogPSBOSUxGU19TUl9CWVRFUyhpc3opOwogCi0JcmF3X3NyLT5zcl9ieXRlcyA9IGNwdV90b19sZTE2KE5JTEZTX1NSX0JZVEVTKTsKKwlyYXdfc3ItPnNyX2J5dGVzID0gY3B1X3RvX2xlMTYoc3Jzeik7CiAJcmF3X3NyLT5zcl9ub25nY19jdGltZQogCQk9IGNwdV90b19sZTY0KG5pbGZzX2RvaW5nX2djKCkgPwogCQkJICAgICAgbmlsZnMtPm5zX25vbmdjX2N0aW1lIDogc2NpLT5zY19zZWdfY3RpbWUpOwpAQCAtOTA2LDYgKzkwNSw3IEBACiAJCQkJIE5JTEZTX1NSX0NQRklMRV9PRkZTRVQoaXN6KSwgMSk7CiAJbmlsZnNfd3JpdGVfaW5vZGVfY29tbW9uKG5pbGZzLT5uc19zdWZpbGUsICh2b2lkICopcmF3X3NyICsKIAkJCQkgTklMRlNfU1JfU1VGSUxFX09GRlNFVChpc3opLCAxKTsKKwltZW1zZXQoKHZvaWQgKilyYXdfc3IgKyBzcnN6LCAwLCBuaWxmcy0+bnNfYmxvY2tzaXplIC0gc3Jzeik7CiB9CiAKIHN0YXRpYyB2b2lkIG5pbGZzX3JlZGlydHlfaW5vZGVzKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCkBAIC05NTQsOCArOTU0LDggQEAKIAogIGRpc3Bvc2VfYnVmZmVyczoKIAl3aGlsZSAoIWxpc3RfZW1wdHkobGlzdHApKSB7Ci0JCWJoID0gbGlzdF9lbnRyeShsaXN0cC0+bmV4dCwgc3RydWN0IGJ1ZmZlcl9oZWFkLAotCQkJCWJfYXNzb2NfYnVmZmVycyk7CisJCWJoID0gbGlzdF9maXJzdF9lbnRyeShsaXN0cCwgc3RydWN0IGJ1ZmZlcl9oZWFkLAorCQkJCSAgICAgIGJfYXNzb2NfYnVmZmVycyk7CiAJCWxpc3RfZGVsX2luaXQoJmJoLT5iX2Fzc29jX2J1ZmZlcnMpOwogCQlicmVsc2UoYmgpOwogCX0KQEAgLTE1MDAsMTAgKzE1MDAsNyBAQAogCQkJbmJsb2NrcyA9IGxlMzJfdG9fY3B1KGZpbmZvLT5maV9uYmxvY2tzKTsKIAkJCW5kYXRhYmxrID0gbGUzMl90b19jcHUoZmluZm8tPmZpX25kYXRhYmxrKTsKIAotCQkJaWYgKGJ1ZmZlcl9uaWxmc19ub2RlKGJoKSkKLQkJCQlpbm9kZSA9IE5JTEZTX0JUTkNfSShiaC0+Yl9wYWdlLT5tYXBwaW5nKTsKLQkJCWVsc2UKLQkJCQlpbm9kZSA9IE5JTEZTX0FTX0koYmgtPmJfcGFnZS0+bWFwcGluZyk7CisJCQlpbm9kZSA9IGJoLT5iX3BhZ2UtPm1hcHBpbmctPmhvc3Q7CiAKIAkJCWlmIChtb2RlID09IFNDX0xTRUdfRFNZTkMpCiAJCQkJc2Nfb3AgPSAmbmlsZnNfc2NfZHN5bmNfb3BzOwpAQCAtMTU1Niw4MyArMTU1MywyNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1uaWxmc19jb3B5X3JlcGxhY2VfcGFnZV9idWZmZXJzKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpvdXQpCi17Ci0Jc3RydWN0IHBhZ2UgKmNsb25lX3BhZ2U7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgKmhlYWQsICpiaDI7Ci0Jdm9pZCAqa2FkZHI7Ci0KLQliaCA9IGhlYWQgPSBwYWdlX2J1ZmZlcnMocGFnZSk7Ci0KLQljbG9uZV9wYWdlID0gbmlsZnNfYWxsb2NfcHJpdmF0ZV9wYWdlKGJoLT5iX2JkZXYsIGJoLT5iX3NpemUsIDApOwotCWlmICh1bmxpa2VseSghY2xvbmVfcGFnZSkpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JYmgyID0gcGFnZV9idWZmZXJzKGNsb25lX3BhZ2UpOwotCWthZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwotCWRvIHsKLQkJaWYgKGxpc3RfZW1wdHkoJmJoLT5iX2Fzc29jX2J1ZmZlcnMpKQotCQkJY29udGludWU7Ci0JCWdldF9iaChiaDIpOwotCQlwYWdlX2NhY2hlX2dldChjbG9uZV9wYWdlKTsgLyogZm9yIGVhY2ggYmggKi8KLQkJbWVtY3B5KGJoMi0+Yl9kYXRhLCBrYWRkciArIGJoX29mZnNldChiaCksIGJoMi0+Yl9zaXplKTsKLQkJYmgyLT5iX2Jsb2NrbnIgPSBiaC0+Yl9ibG9ja25yOwotCQlsaXN0X3JlcGxhY2UoJmJoLT5iX2Fzc29jX2J1ZmZlcnMsICZiaDItPmJfYXNzb2NfYnVmZmVycyk7Ci0JCWxpc3RfYWRkX3RhaWwoJmJoLT5iX2Fzc29jX2J1ZmZlcnMsIG91dCk7Ci0JfSB3aGlsZSAoYmggPSBiaC0+Yl90aGlzX3BhZ2UsIGJoMiA9IGJoMi0+Yl90aGlzX3BhZ2UsIGJoICE9IGhlYWQpOwotCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKLQotCWlmICghVGVzdFNldFBhZ2VXcml0ZWJhY2soY2xvbmVfcGFnZSkpCi0JCWFjY291bnRfcGFnZV93cml0ZWJhY2soY2xvbmVfcGFnZSk7Ci0JdW5sb2NrX3BhZ2UoY2xvbmVfcGFnZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBuaWxmc190ZXN0X3BhZ2VfdG9fYmVfZnJvemVuKHN0cnVjdCBwYWdlICpwYWdlKQotewotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZS0+bWFwcGluZzsKLQotCWlmICghbWFwcGluZyB8fCAhbWFwcGluZy0+aG9zdCB8fCBTX0lTRElSKG1hcHBpbmctPmhvc3QtPmlfbW9kZSkpCi0JCXJldHVybiAwOwotCi0JaWYgKHBhZ2VfbWFwcGVkKHBhZ2UpKSB7Ci0JCUNsZWFyUGFnZUNoZWNrZWQocGFnZSk7Ci0JCXJldHVybiAxOwotCX0KLQlyZXR1cm4gUGFnZUNoZWNrZWQocGFnZSk7Ci19Ci0KLXN0YXRpYyBpbnQgbmlsZnNfYmVnaW5fcGFnZV9pbyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqb3V0KQorc3RhdGljIHZvaWQgbmlsZnNfYmVnaW5fcGFnZV9pbyhzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlpZiAoIXBhZ2UgfHwgUGFnZVdyaXRlYmFjayhwYWdlKSkKIAkJLyogRm9yIHNwbGl0IGItdHJlZSBub2RlIHBhZ2VzLCB0aGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQKIAkJICAgdHdpY2UuICBXZSBpZ25vcmUgdGhlIDJuZCBvciBsYXRlciBjYWxscyBieSB0aGlzIGNoZWNrLiAqLwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCiAJbG9ja19wYWdlKHBhZ2UpOwogCWNsZWFyX3BhZ2VfZGlydHlfZm9yX2lvKHBhZ2UpOwogCXNldF9wYWdlX3dyaXRlYmFjayhwYWdlKTsKIAl1bmxvY2tfcGFnZShwYWdlKTsKLQotCWlmIChuaWxmc190ZXN0X3BhZ2VfdG9fYmVfZnJvemVuKHBhZ2UpKSB7Ci0JCWludCBlcnIgPSBuaWxmc19jb3B5X3JlcGxhY2VfcGFnZV9idWZmZXJzKHBhZ2UsIG91dCk7Ci0JCWlmICh1bmxpa2VseShlcnIpKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0JcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbmlsZnNfc2VnY3Rvcl9wcmVwYXJlX3dyaXRlKHN0cnVjdCBuaWxmc19zY19pbmZvICpzY2ksCi0JCQkJICAgICAgIHN0cnVjdCBwYWdlICoqZmFpbGVkX3BhZ2UpCitzdGF0aWMgdm9pZCBuaWxmc19zZWdjdG9yX3ByZXBhcmVfd3JpdGUoc3RydWN0IG5pbGZzX3NjX2luZm8gKnNjaSkKIHsKIAlzdHJ1Y3QgbmlsZnNfc2VnbWVudF9idWZmZXIgKnNlZ2J1ZjsKIAlzdHJ1Y3QgcGFnZSAqYmRfcGFnZSA9IE5VTEwsICpmc19wYWdlID0gTlVMTDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0ID0gJnNjaS0+c2NfY29waWVkX2J1ZmZlcnM7Ci0JaW50IGVycjsKIAotCSpmYWlsZWRfcGFnZSA9IE5VTEw7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzZWdidWYsICZzY2ktPnNjX3NlZ2J1ZnMsIHNiX2xpc3QpIHsKIAkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIApAQCAtMTY2MiwxMSArMTYwMCw3IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlpZiAoYmgtPmJfcGFnZSAhPSBmc19wYWdlKSB7Ci0JCQkJZXJyID0gbmlsZnNfYmVnaW5fcGFnZV9pbyhmc19wYWdlLCBsaXN0KTsKLQkJCQlpZiAodW5saWtlbHkoZXJyKSkgewotCQkJCQkqZmFpbGVkX3BhZ2UgPSBmc19wYWdlOwotCQkJCQlnb3RvIG91dDsKLQkJCQl9CisJCQkJbmlsZnNfYmVnaW5fcGFnZV9pbyhmc19wYWdlKTsKIAkJCQlmc19wYWdlID0gYmgtPmJfcGFnZTsKIAkJCX0KIAkJfQpAQCAtMTY3NywxMSArMTYxMSw3IEBACiAJCXNldF9wYWdlX3dyaXRlYmFjayhiZF9wYWdlKTsKIAkJdW5sb2NrX3BhZ2UoYmRfcGFnZSk7CiAJfQotCWVyciA9IG5pbGZzX2JlZ2luX3BhZ2VfaW8oZnNfcGFnZSwgbGlzdCk7Ci0JaWYgKHVubGlrZWx5KGVycikpCi0JCSpmYWlsZWRfcGFnZSA9IGZzX3BhZ2U7Ci0gb3V0OgotCXJldHVybiBlcnI7CisJbmlsZnNfYmVnaW5fcGFnZV9pbyhmc19wYWdlKTsKIH0KIAogc3RhdGljIGludCBuaWxmc19zZWdjdG9yX3dyaXRlKHN0cnVjdCBuaWxmc19zY19pbmZvICpzY2ksCkBAIC0xNjk0LDI0ICsxNjI0LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBfX25pbGZzX2VuZF9wYWdlX2lvKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgZXJyKQotewotCWlmICghZXJyKSB7Ci0JCWlmICghbmlsZnNfcGFnZV9idWZmZXJzX2NsZWFuKHBhZ2UpKQotCQkJX19zZXRfcGFnZV9kaXJ0eV9ub2J1ZmZlcnMocGFnZSk7Ci0JCUNsZWFyUGFnZUVycm9yKHBhZ2UpOwotCX0gZWxzZSB7Ci0JCV9fc2V0X3BhZ2VfZGlydHlfbm9idWZmZXJzKHBhZ2UpOwotCQlTZXRQYWdlRXJyb3IocGFnZSk7Ci0JfQotCi0JaWYgKGJ1ZmZlcl9uaWxmc19hbGxvY2F0ZWQocGFnZV9idWZmZXJzKHBhZ2UpKSkgewotCQlpZiAoVGVzdENsZWFyUGFnZVdyaXRlYmFjayhwYWdlKSkKLQkJCWRlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfV1JJVEVCQUNLKTsKLQl9IGVsc2UKLQkJZW5kX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOwotfQotCiBzdGF0aWMgdm9pZCBuaWxmc19lbmRfcGFnZV9pbyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IGVycikKIHsKIAlpZiAoIXBhZ2UpCkBAIC0xNzM4LDQwICsxNjUwLDE5IEBACiAJCXJldHVybjsKIAl9CiAKLQlfX25pbGZzX2VuZF9wYWdlX2lvKHBhZ2UsIGVycik7Ci19Ci0KLXN0YXRpYyB2b2lkIG5pbGZzX2NsZWFyX2NvcGllZF9idWZmZXJzKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCBlcnIpCi17Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgKmhlYWQ7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0KLQl3aGlsZSAoIWxpc3RfZW1wdHkobGlzdCkpIHsKLQkJYmggPSBsaXN0X2VudHJ5KGxpc3QtPm5leHQsIHN0cnVjdCBidWZmZXJfaGVhZCwKLQkJCQliX2Fzc29jX2J1ZmZlcnMpOwotCQlwYWdlID0gYmgtPmJfcGFnZTsKLQkJcGFnZV9jYWNoZV9nZXQocGFnZSk7Ci0JCWhlYWQgPSBiaCA9IHBhZ2VfYnVmZmVycyhwYWdlKTsKLQkJZG8gewotCQkJaWYgKCFsaXN0X2VtcHR5KCZiaC0+Yl9hc3NvY19idWZmZXJzKSkgewotCQkJCWxpc3RfZGVsX2luaXQoJmJoLT5iX2Fzc29jX2J1ZmZlcnMpOwotCQkJCWlmICghZXJyKSB7Ci0JCQkJCXNldF9idWZmZXJfdXB0b2RhdGUoYmgpOwotCQkJCQljbGVhcl9idWZmZXJfZGlydHkoYmgpOwotCQkJCQljbGVhcl9idWZmZXJfZGVsYXkoYmgpOwotCQkJCQljbGVhcl9idWZmZXJfbmlsZnNfdm9sYXRpbGUoYmgpOwotCQkJCX0KLQkJCQlicmVsc2UoYmgpOyAvKiBmb3IgYl9hc3NvY19idWZmZXJzICovCi0JCQl9Ci0JCX0gd2hpbGUgKChiaCA9IGJoLT5iX3RoaXNfcGFnZSkgIT0gaGVhZCk7Ci0KLQkJX19uaWxmc19lbmRfcGFnZV9pbyhwYWdlLCBlcnIpOwotCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJaWYgKCFlcnIpIHsKKwkJaWYgKCFuaWxmc19wYWdlX2J1ZmZlcnNfY2xlYW4ocGFnZSkpCisJCQlfX3NldF9wYWdlX2RpcnR5X25vYnVmZmVycyhwYWdlKTsKKwkJQ2xlYXJQYWdlRXJyb3IocGFnZSk7CisJfSBlbHNlIHsKKwkJX19zZXRfcGFnZV9kaXJ0eV9ub2J1ZmZlcnMocGFnZSk7CisJCVNldFBhZ2VFcnJvcihwYWdlKTsKIAl9CisKKwllbmRfcGFnZV93cml0ZWJhY2socGFnZSk7CiB9CiAKLXN0YXRpYyB2b2lkIG5pbGZzX2Fib3J0X2xvZ3Moc3RydWN0IGxpc3RfaGVhZCAqbG9ncywgc3RydWN0IHBhZ2UgKmZhaWxlZF9wYWdlLAotCQkJICAgICBpbnQgZXJyKQorc3RhdGljIHZvaWQgbmlsZnNfYWJvcnRfbG9ncyhzdHJ1Y3QgbGlzdF9oZWFkICpsb2dzLCBpbnQgZXJyKQogewogCXN0cnVjdCBuaWxmc19zZWdtZW50X2J1ZmZlciAqc2VnYnVmOwogCXN0cnVjdCBwYWdlICpiZF9wYWdlID0gTlVMTCwgKmZzX3BhZ2UgPSBOVUxMOwpAQCAtMTgwMSw4ICsxNjkyLDYgQEAKIAkJCX0KIAkJCWlmIChiaC0+Yl9wYWdlICE9IGZzX3BhZ2UpIHsKIAkJCQluaWxmc19lbmRfcGFnZV9pbyhmc19wYWdlLCBlcnIpOwotCQkJCWlmIChmc19wYWdlICYmIGZzX3BhZ2UgPT0gZmFpbGVkX3BhZ2UpCi0JCQkJCXJldHVybjsKIAkJCQlmc19wYWdlID0gYmgtPmJfcGFnZTsKIAkJCX0KIAkJfQpAQCAtMTgyMSwxMiArMTcxMCwxMSBAQAogCiAJbGlzdF9zcGxpY2VfdGFpbF9pbml0KCZzY2ktPnNjX3dyaXRlX2xvZ3MsICZsb2dzKTsKIAlyZXQgPSBuaWxmc193YWl0X29uX2xvZ3MoJmxvZ3MpOwotCW5pbGZzX2Fib3J0X2xvZ3MoJmxvZ3MsIE5VTEwsIHJldCA/IDogZXJyKTsKKwluaWxmc19hYm9ydF9sb2dzKCZsb2dzLCByZXQgPyA6IGVycik7CiAKIAlsaXN0X3NwbGljZV90YWlsX2luaXQoJnNjaS0+c2Nfc2VnYnVmcywgJmxvZ3MpOwogCW5pbGZzX2NhbmNlbF9zZWd1c2FnZSgmbG9ncywgbmlsZnMtPm5zX3N1ZmlsZSk7CiAJbmlsZnNfZnJlZV9pbmNvbXBsZXRlX2xvZ3MoJmxvZ3MsIG5pbGZzKTsKLQluaWxmc19jbGVhcl9jb3BpZWRfYnVmZmVycygmc2NpLT5zY19jb3BpZWRfYnVmZmVycywgZXJyKTsKIAogCWlmIChzY2ktPnNjX3N0YWdlLmZsYWdzICYgTklMRlNfQ0ZfU1VGUkVFRCkgewogCQlyZXQgPSBuaWxmc19zdWZpbGVfY2FuY2VsX2ZyZWV2KG5pbGZzLT5uc19zdWZpbGUsCkBAIC0xOTIwLDggKzE4MDgsNiBAQAogCiAJbmlsZnNfZW5kX3BhZ2VfaW8oZnNfcGFnZSwgMCk7CiAKLQluaWxmc19jbGVhcl9jb3BpZWRfYnVmZmVycygmc2NpLT5zY19jb3BpZWRfYnVmZmVycywgMCk7Ci0KIAluaWxmc19kcm9wX2NvbGxlY3RlZF9pbm9kZXMoJnNjaS0+c2NfZGlydHlfZmlsZXMpOwogCiAJaWYgKG5pbGZzX2RvaW5nX2djKCkpCkBAIC0xOTc5LDcgKzE4NjUsNyBAQAogCQkJCQkgICAgICAiZmFpbGVkIHRvIGdldCBpbm9kZSBibG9jay5cbiIpOwogCQkJCXJldHVybiBlcnI7CiAJCQl9Ci0JCQluaWxmc19tZHRfbWFya19idWZmZXJfZGlydHkoaWJoKTsKKwkJCW1hcmtfYnVmZmVyX2RpcnR5KGliaCk7CiAJCQluaWxmc19tZHRfbWFya19kaXJ0eShpZmlsZSk7CiAJCQlzcGluX2xvY2soJm5pbGZzLT5uc19pbm9kZV9sb2NrKTsKIAkJCWlmIChsaWtlbHkoIWlpLT5pX2JoKSkKQEAgLTE5OTEsOCArMTg3Nyw3IEBACiAKIAkJY2xlYXJfYml0KE5JTEZTX0lfUVVFVUVELCAmaWktPmlfc3RhdGUpOwogCQlzZXRfYml0KE5JTEZTX0lfQlVTWSwgJmlpLT5pX3N0YXRlKTsKLQkJbGlzdF9kZWwoJmlpLT5pX2RpcnR5KTsKLQkJbGlzdF9hZGRfdGFpbCgmaWktPmlfZGlydHksICZzY2ktPnNjX2RpcnR5X2ZpbGVzKTsKKwkJbGlzdF9tb3ZlX3RhaWwoJmlpLT5pX2RpcnR5LCAmc2NpLT5zY19kaXJ0eV9maWxlcyk7CiAJfQogCXNwaW5fdW5sb2NrKCZuaWxmcy0+bnNfaW5vZGVfbG9jayk7CiAKQEAgLTIwMTQsOCArMTg5OSw3IEBACiAJCWNsZWFyX2JpdChOSUxGU19JX0JVU1ksICZpaS0+aV9zdGF0ZSk7CiAJCWJyZWxzZShpaS0+aV9iaCk7CiAJCWlpLT5pX2JoID0gTlVMTDsKLQkJbGlzdF9kZWwoJmlpLT5pX2RpcnR5KTsKLQkJbGlzdF9hZGRfdGFpbCgmaWktPmlfZGlydHksICZ0aS0+dGlfZ2FyYmFnZSk7CisJCWxpc3RfbW92ZV90YWlsKCZpaS0+aV9kaXJ0eSwgJnRpLT50aV9nYXJiYWdlKTsKIAl9CiAJc3Bpbl91bmxvY2soJm5pbGZzLT5uc19pbm9kZV9sb2NrKTsKIH0KQEAgLTIwMjYsNyArMTkxMCw2IEBACiBzdGF0aWMgaW50IG5pbGZzX3NlZ2N0b3JfZG9fY29uc3RydWN0KHN0cnVjdCBuaWxmc19zY19pbmZvICpzY2ksIGludCBtb2RlKQogewogCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gc2NpLT5zY19zdXBlci0+c19mc19pbmZvOwotCXN0cnVjdCBwYWdlICpmYWlsZWRfcGFnZTsKIAlpbnQgZXJyOwogCiAJc2NpLT5zY19zdGFnZS5zY250ID0gTklMRlNfU1RfSU5JVDsKQEAgLTIwODEsMTEgKzE5NjQsNyBAQAogCQluaWxmc19zZWdjdG9yX3VwZGF0ZV9zZWd1c2FnZShzY2ksIG5pbGZzLT5uc19zdWZpbGUpOwogCiAJCS8qIFdyaXRlIHBhcnRpYWwgc2VnbWVudHMgKi8KLQkJZXJyID0gbmlsZnNfc2VnY3Rvcl9wcmVwYXJlX3dyaXRlKHNjaSwgJmZhaWxlZF9wYWdlKTsKLQkJaWYgKGVycikgewotCQkJbmlsZnNfYWJvcnRfbG9ncygmc2NpLT5zY19zZWdidWZzLCBmYWlsZWRfcGFnZSwgZXJyKTsKLQkJCWdvdG8gZmFpbGVkX3RvX3dyaXRlOwotCQl9CisJCW5pbGZzX3NlZ2N0b3JfcHJlcGFyZV93cml0ZShzY2kpOwogCiAJCW5pbGZzX2FkZF9jaGVja3N1bXNfb25fbG9ncygmc2NpLT5zY19zZWdidWZzLAogCQkJCQkgICAgbmlsZnMtPm5zX2NyY19zZWVkKTsKQEAgLTI2ODcsNyArMjU2Niw2IEBACiAJSU5JVF9MSVNUX0hFQUQoJnNjaS0+c2Nfc2VnYnVmcyk7CiAJSU5JVF9MSVNUX0hFQUQoJnNjaS0+c2Nfd3JpdGVfbG9ncyk7CiAJSU5JVF9MSVNUX0hFQUQoJnNjaS0+c2NfZ2NfaW5vZGVzKTsKLQlJTklUX0xJU1RfSEVBRCgmc2NpLT5zY19jb3BpZWRfYnVmZmVycyk7CiAJaW5pdF90aW1lcigmc2NpLT5zY190aW1lcik7CiAKIAlzY2ktPnNjX2ludGVydmFsID0gSFogKiBOSUxGU19TQ19ERUZBVUxUX1RJTUVPVVQ7CkBAIC0yNzQxLDggKzI2MTksNiBAQAogCWlmIChmbGFnIHx8ICFuaWxmc19zZWdjdG9yX2NvbmZpcm0oc2NpKSkKIAkJbmlsZnNfc2VnY3Rvcl93cml0ZV9vdXQoc2NpKTsKIAotCVdBUk5fT04oIWxpc3RfZW1wdHkoJnNjaS0+c2NfY29waWVkX2J1ZmZlcnMpKTsKLQogCWlmICghbGlzdF9lbXB0eSgmc2NpLT5zY19kaXJ0eV9maWxlcykpIHsKIAkJbmlsZnNfd2FybmluZyhzY2ktPnNjX3N1cGVyLCBfX2Z1bmNfXywKIAkJCSAgICAgICJkaXJ0eSBmaWxlKHMpIGFmdGVyIHRoZSBmaW5hbCBjb25zdHJ1Y3Rpb25cbiIpOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3NlZ21lbnQuaCBiL2ZzL25pbGZzMi9zZWdtZW50LmgKaW5kZXggNmMwMmE4Ni4uMzhhMWQwMCAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3NlZ21lbnQuaAorKysgYi9mcy9uaWxmczIvc2VnbWVudC5oCkBAIC05Miw3ICs5Miw2IEBACiAgKiBAc2NfbmJsa19pbmM6IEJsb2NrIGNvdW50IG9mIGN1cnJlbnQgZ2VuZXJhdGlvbgogICogQHNjX2RpcnR5X2ZpbGVzOiBMaXN0IG9mIGZpbGVzIHRvIGJlIHdyaXR0ZW4KICAqIEBzY19nY19pbm9kZXM6IExpc3Qgb2YgR0MgaW5vZGVzIGhhdmluZyBibG9ja3MgdG8gYmUgd3JpdHRlbgotICogQHNjX2NvcGllZF9idWZmZXJzOiBMaXN0IG9mIGNvcGllZCBidWZmZXJzIChidWZmZXIgaGVhZHMpIHRvIGZyZWV6ZSBkYXRhCiAgKiBAc2NfZnJlZXNlZ3M6IGFycmF5IG9mIHNlZ21lbnQgbnVtYmVycyB0byBiZSBmcmVlZAogICogQHNjX25mcmVlc2VnczogbnVtYmVyIG9mIHNlZ21lbnRzIG9uIEBzY19mcmVlc2VncwogICogQHNjX2RzeW5jX2lub2RlOiBpbm9kZSB3aG9zZSBkYXRhIHBhZ2VzIGFyZSB3cml0dGVuIGZvciBhIHN5bmMgb3BlcmF0aW9uCkBAIC0xMzYsNyArMTM1LDYgQEAKIAogCXN0cnVjdCBsaXN0X2hlYWQJc2NfZGlydHlfZmlsZXM7CiAJc3RydWN0IGxpc3RfaGVhZAlzY19nY19pbm9kZXM7Ci0Jc3RydWN0IGxpc3RfaGVhZAlzY19jb3BpZWRfYnVmZmVyczsKIAogCV9fdTY0CQkgICAgICAgKnNjX2ZyZWVzZWdzOwogCXNpemVfdAkJCXNjX25mcmVlc2VnczsKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9zdWZpbGUuYyBiL2ZzL25pbGZzMi9zdWZpbGUuYwppbmRleCAxZDZmNDg4Li4wYTBhYmE2IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvc3VmaWxlLmMKKysrIGIvZnMvbmlsZnMyL3N1ZmlsZS5jCkBAIC0zMyw3ICszMyw5IEBACiAKIHN0cnVjdCBuaWxmc19zdWZpbGVfaW5mbyB7CiAJc3RydWN0IG5pbGZzX21kdF9pbmZvIG1pOwotCXVuc2lnbmVkIGxvbmcgbmNsZWFuc2VnczsKKwl1bnNpZ25lZCBsb25nIG5jbGVhbnNlZ3M7LyogbnVtYmVyIG9mIGNsZWFuIHNlZ21lbnRzICovCisJX191NjQgYWxsb2NtaW47CQkvKiBsb3dlciBsaW1pdCBvZiBhbGxvY2F0YWJsZSBzZWdtZW50IHJhbmdlICovCisJX191NjQgYWxsb2NtYXg7CQkvKiB1cHBlciBsaW1pdCBvZiBhbGxvY2F0YWJsZSBzZWdtZW50IHJhbmdlICovCiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuaWxmc19zdWZpbGVfaW5mbyAqTklMRlNfU1VJKHN0cnVjdCBpbm9kZSAqc3VmaWxlKQpAQCAtOTYsNiArOTgsMTMgQEAKIAkJCQkgICBjcmVhdGUsIE5VTEwsIGJocCk7CiB9CiAKK3N0YXRpYyBpbnQgbmlsZnNfc3VmaWxlX2RlbGV0ZV9zZWdtZW50X3VzYWdlX2Jsb2NrKHN0cnVjdCBpbm9kZSAqc3VmaWxlLAorCQkJCQkJICAgX191NjQgc2VnbnVtKQoreworCXJldHVybiBuaWxmc19tZHRfZGVsZXRlX2Jsb2NrKHN1ZmlsZSwKKwkJCQkgICAgICBuaWxmc19zdWZpbGVfZ2V0X2Jsa29mZihzdWZpbGUsIHNlZ251bSkpOworfQorCiBzdGF0aWMgdm9pZCBuaWxmc19zdWZpbGVfbW9kX2NvdW50ZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICpoZWFkZXJfYmgsCiAJCQkJICAgICB1NjQgbmNsZWFuYWRkLCB1NjQgbmRpcnR5YWRkKQogewpAQCAtMTA4LDcgKzExNyw3IEBACiAJbGU2NF9hZGRfY3B1KCZoZWFkZXItPnNoX25kaXJ0eXNlZ3MsIG5kaXJ0eWFkZCk7CiAJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOwogCi0JbmlsZnNfbWR0X21hcmtfYnVmZmVyX2RpcnR5KGhlYWRlcl9iaCk7CisJbWFya19idWZmZXJfZGlydHkoaGVhZGVyX2JoKTsKIH0KIAogLyoqCkBAIC0yNDgsNiArMjU3LDM1IEBACiB9CiAKIC8qKgorICogbmlsZnNfc3VmaWxlX3NldF9hbGxvY19yYW5nZSAtIGxpbWl0IHJhbmdlIG9mIHNlZ21lbnQgdG8gYmUgYWxsb2NhdGVkCisgKiBAc3VmaWxlOiBpbm9kZSBvZiBzZWdtZW50IHVzYWdlIGZpbGUKKyAqIEBzdGFydDogbWluaW11bSBzZWdtZW50IG51bWJlciBvZiBhbGxvY2F0YWJsZSByZWdpb24gKGluY2x1c2l2ZSkKKyAqIEBlbmQ6IG1heGltdW0gc2VnbWVudCBudW1iZXIgb2YgYWxsb2NhdGFibGUgcmVnaW9uIChpbmNsdXNpdmUpCisgKgorICogUmV0dXJuIFZhbHVlOiBPbiBzdWNjZXNzLCAwIGlzIHJldHVybmVkLiAgT24gZXJyb3IsIG9uZSBvZiB0aGUKKyAqIGZvbGxvd2luZyBuZWdhdGl2ZSBlcnJvciBjb2RlcyBpcyByZXR1cm5lZC4KKyAqCisgKiAlLUVSQU5HRSAtIGludmFsaWQgc2VnbWVudCByZWdpb24KKyAqLworaW50IG5pbGZzX3N1ZmlsZV9zZXRfYWxsb2NfcmFuZ2Uoc3RydWN0IGlub2RlICpzdWZpbGUsIF9fdTY0IHN0YXJ0LCBfX3U2NCBlbmQpCit7CisJc3RydWN0IG5pbGZzX3N1ZmlsZV9pbmZvICpzdWkgPSBOSUxGU19TVUkoc3VmaWxlKTsKKwlfX3U2NCBuc2VnczsKKwlpbnQgcmV0ID0gLUVSQU5HRTsKKworCWRvd25fd3JpdGUoJk5JTEZTX01EVChzdWZpbGUpLT5taV9zZW0pOworCW5zZWdzID0gbmlsZnNfc3VmaWxlX2dldF9uc2VnbWVudHMoc3VmaWxlKTsKKworCWlmIChzdGFydCA8PSBlbmQgJiYgZW5kIDwgbnNlZ3MpIHsKKwkJc3VpLT5hbGxvY21pbiA9IHN0YXJ0OworCQlzdWktPmFsbG9jbWF4ID0gZW5kOworCQlyZXQgPSAwOworCX0KKwl1cF93cml0ZSgmTklMRlNfTURUKHN1ZmlsZSktPm1pX3NlbSk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCiAgKiBuaWxmc19zdWZpbGVfYWxsb2MgLSBhbGxvY2F0ZSBhIHNlZ21lbnQKICAqIEBzdWZpbGU6IGlub2RlIG9mIHNlZ21lbnQgdXNhZ2UgZmlsZQogICogQHNlZ251bXA6IHBvaW50ZXIgdG8gc2VnbWVudCBudW1iZXIKQEAgLTI2OSwxMSArMzA3LDEyIEBACiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpoZWFkZXJfYmgsICpzdV9iaDsKIAlzdHJ1Y3QgbmlsZnNfc3VmaWxlX2hlYWRlciAqaGVhZGVyOwogCXN0cnVjdCBuaWxmc19zZWdtZW50X3VzYWdlICpzdTsKKwlzdHJ1Y3QgbmlsZnNfc3VmaWxlX2luZm8gKnN1aSA9IE5JTEZTX1NVSShzdWZpbGUpOwogCXNpemVfdCBzdXN6ID0gTklMRlNfTURUKHN1ZmlsZSktPm1pX2VudHJ5X3NpemU7CiAJX191NjQgc2VnbnVtLCBtYXhzZWdudW0sIGxhc3RfYWxsb2M7CiAJdm9pZCAqa2FkZHI7Ci0JdW5zaWduZWQgbG9uZyBuc2VnbWVudHMsIG5jbGVhbnNlZ3MsIG5zdXM7Ci0JaW50IHJldCwgaSwgajsKKwl1bnNpZ25lZCBsb25nIG5zZWdtZW50cywgbmNsZWFuc2VncywgbnN1cywgY250OworCWludCByZXQsIGo7CiAKIAlkb3duX3dyaXRlKCZOSUxGU19NRFQoc3VmaWxlKS0+bWlfc2VtKTsKIApAQCAtMjg3LDEzICszMjYsMzEgQEAKIAlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7CiAKIAluc2VnbWVudHMgPSBuaWxmc19zdWZpbGVfZ2V0X25zZWdtZW50cyhzdWZpbGUpOworCW1heHNlZ251bSA9IHN1aS0+YWxsb2NtYXg7CiAJc2VnbnVtID0gbGFzdF9hbGxvYyArIDE7Ci0JbWF4c2VnbnVtID0gbnNlZ21lbnRzIC0gMTsKLQlmb3IgKGkgPSAwOyBpIDwgbnNlZ21lbnRzOyBpICs9IG5zdXMpIHsKLQkJaWYgKHNlZ251bSA+PSBuc2VnbWVudHMpIHsKLQkJCS8qIHdyYXAgYXJvdW5kICovCi0JCQlzZWdudW0gPSAwOwotCQkJbWF4c2VnbnVtID0gbGFzdF9hbGxvYzsKKwlpZiAoc2VnbnVtIDwgc3VpLT5hbGxvY21pbiB8fCBzZWdudW0gPiBzdWktPmFsbG9jbWF4KQorCQlzZWdudW0gPSBzdWktPmFsbG9jbWluOworCisJZm9yIChjbnQgPSAwOyBjbnQgPCBuc2VnbWVudHM7IGNudCArPSBuc3VzKSB7CisJCWlmIChzZWdudW0gPiBtYXhzZWdudW0pIHsKKwkJCWlmIChjbnQgPCBzdWktPmFsbG9jbWF4IC0gc3VpLT5hbGxvY21pbiArIDEpIHsKKwkJCQkvKgorCQkJCSAqIHdyYXAgYXJvdW5kIGluIHRoZSBsaW1pdGVkIHJlZ2lvbi4KKwkJCQkgKiBpZiBhbGxvY2F0aW9uIHN0YXJ0ZWQgZnJvbQorCQkJCSAqIHN1aS0+YWxsb2NtaW4sIHRoaXMgbmV2ZXIgaGFwcGVucy4KKwkJCQkgKi8KKwkJCQlzZWdudW0gPSBzdWktPmFsbG9jbWluOworCQkJCW1heHNlZ251bSA9IGxhc3RfYWxsb2M7CisJCQl9IGVsc2UgaWYgKHNlZ251bSA+IHN1aS0+YWxsb2NtaW4gJiYKKwkJCQkgICBzdWktPmFsbG9jbWF4ICsgMSA8IG5zZWdtZW50cykgeworCQkJCXNlZ251bSA9IHN1aS0+YWxsb2NtYXggKyAxOworCQkJCW1heHNlZ251bSA9IG5zZWdtZW50cyAtIDE7CisJCQl9IGVsc2UgaWYgKHN1aS0+YWxsb2NtaW4gPiAwKSAgeworCQkJCXNlZ251bSA9IDA7CisJCQkJbWF4c2VnbnVtID0gc3VpLT5hbGxvY21pbiAtIDE7CisJCQl9IGVsc2UgeworCQkJCWJyZWFrOyAvKiBuZXZlciBoYXBwZW5zICovCisJCQl9CiAJCX0KIAkJcmV0ID0gbmlsZnNfc3VmaWxlX2dldF9zZWdtZW50X3VzYWdlX2Jsb2NrKHN1ZmlsZSwgc2VnbnVtLCAxLAogCQkJCQkJCSAgICZzdV9iaCk7CkBAIC0zMTksOSArMzc2LDkgQEAKIAkJCWhlYWRlci0+c2hfbGFzdF9hbGxvYyA9IGNwdV90b19sZTY0KHNlZ251bSk7CiAJCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7CiAKLQkJCU5JTEZTX1NVSShzdWZpbGUpLT5uY2xlYW5zZWdzLS07Ci0JCQluaWxmc19tZHRfbWFya19idWZmZXJfZGlydHkoaGVhZGVyX2JoKTsKLQkJCW5pbGZzX21kdF9tYXJrX2J1ZmZlcl9kaXJ0eShzdV9iaCk7CisJCQlzdWktPm5jbGVhbnNlZ3MtLTsKKwkJCW1hcmtfYnVmZmVyX2RpcnR5KGhlYWRlcl9iaCk7CisJCQltYXJrX2J1ZmZlcl9kaXJ0eShzdV9iaCk7CiAJCQluaWxmc19tZHRfbWFya19kaXJ0eShzdWZpbGUpOwogCQkJYnJlbHNlKHN1X2JoKTsKIAkJCSpzZWdudW1wID0gc2VnbnVtOwpAQCAtMzY0LDcgKzQyMSw3IEBACiAJbmlsZnNfc3VmaWxlX21vZF9jb3VudGVyKGhlYWRlcl9iaCwgLTEsIDEpOwogCU5JTEZTX1NVSShzdWZpbGUpLT5uY2xlYW5zZWdzLS07CiAKLQluaWxmc19tZHRfbWFya19idWZmZXJfZGlydHkoc3VfYmgpOworCW1hcmtfYnVmZmVyX2RpcnR5KHN1X2JoKTsKIAluaWxmc19tZHRfbWFya19kaXJ0eShzdWZpbGUpOwogfQogCkBAIC0zOTUsNyArNDUyLDcgQEAKIAluaWxmc19zdWZpbGVfbW9kX2NvdW50ZXIoaGVhZGVyX2JoLCBjbGVhbiA/ICh1NjQpLTEgOiAwLCBkaXJ0eSA/IDAgOiAxKTsKIAlOSUxGU19TVUkoc3VmaWxlKS0+bmNsZWFuc2VncyAtPSBjbGVhbjsKIAotCW5pbGZzX21kdF9tYXJrX2J1ZmZlcl9kaXJ0eShzdV9iaCk7CisJbWFya19idWZmZXJfZGlydHkoc3VfYmgpOwogCW5pbGZzX21kdF9tYXJrX2RpcnR5KHN1ZmlsZSk7CiB9CiAKQEAgLTQyMSw3ICs0NzgsNyBAQAogCXN1ZGlydHkgPSBuaWxmc19zZWdtZW50X3VzYWdlX2RpcnR5KHN1KTsKIAluaWxmc19zZWdtZW50X3VzYWdlX3NldF9jbGVhbihzdSk7CiAJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOwotCW5pbGZzX21kdF9tYXJrX2J1ZmZlcl9kaXJ0eShzdV9iaCk7CisJbWFya19idWZmZXJfZGlydHkoc3VfYmgpOwogCiAJbmlsZnNfc3VmaWxlX21vZF9jb3VudGVyKGhlYWRlcl9iaCwgMSwgc3VkaXJ0eSA/ICh1NjQpLTEgOiAwKTsKIAlOSUxGU19TVUkoc3VmaWxlKS0+bmNsZWFuc2VncysrOwpAQCAtNDQxLDcgKzQ5OCw3IEBACiAKIAlyZXQgPSBuaWxmc19zdWZpbGVfZ2V0X3NlZ21lbnRfdXNhZ2VfYmxvY2soc3VmaWxlLCBzZWdudW0sIDAsICZiaCk7CiAJaWYgKCFyZXQpIHsKLQkJbmlsZnNfbWR0X21hcmtfYnVmZmVyX2RpcnR5KGJoKTsKKwkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCQluaWxmc19tZHRfbWFya19kaXJ0eShzdWZpbGUpOwogCQlicmVsc2UoYmgpOwogCX0KQEAgLTQ3Niw3ICs1MzMsNyBAQAogCXN1LT5zdV9uYmxvY2tzID0gY3B1X3RvX2xlMzIobmJsb2Nrcyk7CiAJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOwogCi0JbmlsZnNfbWR0X21hcmtfYnVmZmVyX2RpcnR5KGJoKTsKKwltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJbmlsZnNfbWR0X21hcmtfZGlydHkoc3VmaWxlKTsKIAlicmVsc2UoYmgpOwogCkBAIC01MDUsNyArNTYyLDcgQEAKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmhlYWRlcl9iaDsKIAlzdHJ1Y3QgbmlsZnNfc3VmaWxlX2hlYWRlciAqaGVhZGVyOwotCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gTklMRlNfSV9OSUxGUyhzdWZpbGUpOworCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gc3VmaWxlLT5pX3NiLT5zX2ZzX2luZm87CiAJdm9pZCAqa2FkZHI7CiAJaW50IHJldDsKIApAQCAtNTU1LDExICs2MTIsMTgzIEBACiAJCW5pbGZzX3N1ZmlsZV9tb2RfY291bnRlcihoZWFkZXJfYmgsIC0xLCAwKTsKIAkJTklMRlNfU1VJKHN1ZmlsZSktPm5jbGVhbnNlZ3MtLTsKIAl9Ci0JbmlsZnNfbWR0X21hcmtfYnVmZmVyX2RpcnR5KHN1X2JoKTsKKwltYXJrX2J1ZmZlcl9kaXJ0eShzdV9iaCk7CiAJbmlsZnNfbWR0X21hcmtfZGlydHkoc3VmaWxlKTsKIH0KIAogLyoqCisgICogbmlsZnNfc3VmaWxlX3RydW5jYXRlX3JhbmdlIC0gdHJ1bmNhdGUgcmFuZ2Ugb2Ygc2VnbWVudCBhcnJheQorICAqIEBzdWZpbGU6IGlub2RlIG9mIHNlZ21lbnQgdXNhZ2UgZmlsZQorICAqIEBzdGFydDogc3RhcnQgc2VnbWVudCBudW1iZXIgKGluY2x1c2l2ZSkKKyAgKiBAZW5kOiBlbmQgc2VnbWVudCBudW1iZXIgKGluY2x1c2l2ZSkKKyAgKgorICAqIFJldHVybiBWYWx1ZTogT24gc3VjY2VzcywgMCBpcyByZXR1cm5lZC4gIE9uIGVycm9yLCBvbmUgb2YgdGhlCisgICogZm9sbG93aW5nIG5lZ2F0aXZlIGVycm9yIGNvZGVzIGlzIHJldHVybmVkLgorICAqCisgICogJS1FSU8gLSBJL08gZXJyb3IuCisgICoKKyAgKiAlLUVOT01FTSAtIEluc3VmZmljaWVudCBhbW91bnQgb2YgbWVtb3J5IGF2YWlsYWJsZS4KKyAgKgorICAqICUtRUlOVkFMIC0gSW52YWxpZCBudW1iZXIgb2Ygc2VnbWVudHMgc3BlY2lmaWVkCisgICoKKyAgKiAlLUVCVVNZIC0gRGlydHkgb3IgYWN0aXZlIHNlZ21lbnRzIGFyZSBwcmVzZW50IGluIHRoZSByYW5nZQorICAqLworc3RhdGljIGludCBuaWxmc19zdWZpbGVfdHJ1bmNhdGVfcmFuZ2Uoc3RydWN0IGlub2RlICpzdWZpbGUsCisJCQkJICAgICAgIF9fdTY0IHN0YXJ0LCBfX3U2NCBlbmQpCit7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzdWZpbGUtPmlfc2ItPnNfZnNfaW5mbzsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmhlYWRlcl9iaDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnN1X2JoOworCXN0cnVjdCBuaWxmc19zZWdtZW50X3VzYWdlICpzdSwgKnN1MjsKKwlzaXplX3Qgc3VzeiA9IE5JTEZTX01EVChzdWZpbGUpLT5taV9lbnRyeV9zaXplOworCXVuc2lnbmVkIGxvbmcgc2VndXNhZ2VzX3Blcl9ibG9jazsKKwl1bnNpZ25lZCBsb25nIG5zZWdzLCBuY2xlYW5lZDsKKwlfX3U2NCBzZWdudW07CisJdm9pZCAqa2FkZHI7CisJc3NpemVfdCBuLCBuYzsKKwlpbnQgcmV0OworCWludCBqOworCisJbnNlZ3MgPSBuaWxmc19zdWZpbGVfZ2V0X25zZWdtZW50cyhzdWZpbGUpOworCisJcmV0ID0gLUVJTlZBTDsKKwlpZiAoc3RhcnQgPiBlbmQgfHwgc3RhcnQgPj0gbnNlZ3MpCisJCWdvdG8gb3V0OworCisJcmV0ID0gbmlsZnNfc3VmaWxlX2dldF9oZWFkZXJfYmxvY2soc3VmaWxlLCAmaGVhZGVyX2JoKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlzZWd1c2FnZXNfcGVyX2Jsb2NrID0gbmlsZnNfc3VmaWxlX3NlZ21lbnRfdXNhZ2VzX3Blcl9ibG9jayhzdWZpbGUpOworCW5jbGVhbmVkID0gMDsKKworCWZvciAoc2VnbnVtID0gc3RhcnQ7IHNlZ251bSA8PSBlbmQ7IHNlZ251bSArPSBuKSB7CisJCW4gPSBtaW5fdCh1bnNpZ25lZCBsb25nLAorCQkJICBzZWd1c2FnZXNfcGVyX2Jsb2NrIC0KKwkJCQkgIG5pbGZzX3N1ZmlsZV9nZXRfb2Zmc2V0KHN1ZmlsZSwgc2VnbnVtKSwKKwkJCSAgZW5kIC0gc2VnbnVtICsgMSk7CisJCXJldCA9IG5pbGZzX3N1ZmlsZV9nZXRfc2VnbWVudF91c2FnZV9ibG9jayhzdWZpbGUsIHNlZ251bSwgMCwKKwkJCQkJCQkgICAmc3VfYmgpOworCQlpZiAocmV0IDwgMCkgeworCQkJaWYgKHJldCAhPSAtRU5PRU5UKQorCQkJCWdvdG8gb3V0X2hlYWRlcjsKKwkJCS8qIGhvbGUgKi8KKwkJCWNvbnRpbnVlOworCQl9CisJCWthZGRyID0ga21hcF9hdG9taWMoc3VfYmgtPmJfcGFnZSwgS01fVVNFUjApOworCQlzdSA9IG5pbGZzX3N1ZmlsZV9ibG9ja19nZXRfc2VnbWVudF91c2FnZSgKKwkJCXN1ZmlsZSwgc2VnbnVtLCBzdV9iaCwga2FkZHIpOworCQlzdTIgPSBzdTsKKwkJZm9yIChqID0gMDsgaiA8IG47IGorKywgc3UgPSAodm9pZCAqKXN1ICsgc3VzeikgeworCQkJaWYgKChsZTMyX3RvX2NwdShzdS0+c3VfZmxhZ3MpICYKKwkJCSAgICAgfigxVUwgPDwgTklMRlNfU0VHTUVOVF9VU0FHRV9FUlJPUikpIHx8CisJCQkgICAgbmlsZnNfc2VnbWVudF9pc19hY3RpdmUobmlsZnMsIHNlZ251bSArIGopKSB7CisJCQkJcmV0ID0gLUVCVVNZOworCQkJCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKKwkJCQlicmVsc2Uoc3VfYmgpOworCQkJCWdvdG8gb3V0X2hlYWRlcjsKKwkJCX0KKwkJfQorCQluYyA9IDA7CisJCWZvciAoc3UgPSBzdTIsIGogPSAwOyBqIDwgbjsgaisrLCBzdSA9ICh2b2lkICopc3UgKyBzdXN6KSB7CisJCQlpZiAobmlsZnNfc2VnbWVudF91c2FnZV9lcnJvcihzdSkpIHsKKwkJCQluaWxmc19zZWdtZW50X3VzYWdlX3NldF9jbGVhbihzdSk7CisJCQkJbmMrKzsKKwkJCX0KKwkJfQorCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7CisJCWlmIChuYyA+IDApIHsKKwkJCW1hcmtfYnVmZmVyX2RpcnR5KHN1X2JoKTsKKwkJCW5jbGVhbmVkICs9IG5jOworCQl9CisJCWJyZWxzZShzdV9iaCk7CisKKwkJaWYgKG4gPT0gc2VndXNhZ2VzX3Blcl9ibG9jaykgeworCQkJLyogbWFrZSBob2xlICovCisJCQluaWxmc19zdWZpbGVfZGVsZXRlX3NlZ21lbnRfdXNhZ2VfYmxvY2soc3VmaWxlLCBzZWdudW0pOworCQl9CisJfQorCXJldCA9IDA7CisKK291dF9oZWFkZXI6CisJaWYgKG5jbGVhbmVkID4gMCkgeworCQlOSUxGU19TVUkoc3VmaWxlKS0+bmNsZWFuc2VncyArPSBuY2xlYW5lZDsKKwkJbmlsZnNfc3VmaWxlX21vZF9jb3VudGVyKGhlYWRlcl9iaCwgbmNsZWFuZWQsIDApOworCQluaWxmc19tZHRfbWFya19kaXJ0eShzdWZpbGUpOworCX0KKwlicmVsc2UoaGVhZGVyX2JoKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIG5pbGZzX3N1ZmlsZV9yZXNpemUgLSByZXNpemUgc2VnbWVudCBhcnJheQorICogQHN1ZmlsZTogaW5vZGUgb2Ygc2VnbWVudCB1c2FnZSBmaWxlCisgKiBAbmV3bnNlZ3M6IG5ldyBudW1iZXIgb2Ygc2VnbWVudHMKKyAqCisgKiBSZXR1cm4gVmFsdWU6IE9uIHN1Y2Nlc3MsIDAgaXMgcmV0dXJuZWQuICBPbiBlcnJvciwgb25lIG9mIHRoZQorICogZm9sbG93aW5nIG5lZ2F0aXZlIGVycm9yIGNvZGVzIGlzIHJldHVybmVkLgorICoKKyAqICUtRUlPIC0gSS9PIGVycm9yLgorICoKKyAqICUtRU5PTUVNIC0gSW5zdWZmaWNpZW50IGFtb3VudCBvZiBtZW1vcnkgYXZhaWxhYmxlLgorICoKKyAqICUtRU5PU1BDIC0gRW5vdWdoIGZyZWUgc3BhY2UgaXMgbm90IGxlZnQgZm9yIHNocmlua2luZworICoKKyAqICUtRUJVU1kgLSBEaXJ0eSBvciBhY3RpdmUgc2VnbWVudHMgZXhpc3QgaW4gdGhlIHJlZ2lvbiB0byBiZSB0cnVuY2F0ZWQKKyAqLworaW50IG5pbGZzX3N1ZmlsZV9yZXNpemUoc3RydWN0IGlub2RlICpzdWZpbGUsIF9fdTY0IG5ld25zZWdzKQoreworCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gc3VmaWxlLT5pX3NiLT5zX2ZzX2luZm87CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpoZWFkZXJfYmg7CisJc3RydWN0IG5pbGZzX3N1ZmlsZV9oZWFkZXIgKmhlYWRlcjsKKwlzdHJ1Y3QgbmlsZnNfc3VmaWxlX2luZm8gKnN1aSA9IE5JTEZTX1NVSShzdWZpbGUpOworCXZvaWQgKmthZGRyOworCXVuc2lnbmVkIGxvbmcgbnNlZ3MsIG5yc3ZzZWdzOworCWludCByZXQgPSAwOworCisJZG93bl93cml0ZSgmTklMRlNfTURUKHN1ZmlsZSktPm1pX3NlbSk7CisKKwluc2VncyA9IG5pbGZzX3N1ZmlsZV9nZXRfbnNlZ21lbnRzKHN1ZmlsZSk7CisJaWYgKG5zZWdzID09IG5ld25zZWdzKQorCQlnb3RvIG91dDsKKworCXJldCA9IC1FTk9TUEM7CisJbnJzdnNlZ3MgPSBuaWxmc19ucnN2c2VncyhuaWxmcywgbmV3bnNlZ3MpOworCWlmIChuZXduc2VncyA8IG5zZWdzICYmIG5zZWdzIC0gbmV3bnNlZ3MgKyBucnN2c2VncyA+IHN1aS0+bmNsZWFuc2VncykKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBuaWxmc19zdWZpbGVfZ2V0X2hlYWRlcl9ibG9jayhzdWZpbGUsICZoZWFkZXJfYmgpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCWlmIChuZXduc2VncyA+IG5zZWdzKSB7CisJCXN1aS0+bmNsZWFuc2VncyArPSBuZXduc2VncyAtIG5zZWdzOworCX0gZWxzZSAvKiBuZXduc2VncyA8IG5zZWdzICovIHsKKwkJcmV0ID0gbmlsZnNfc3VmaWxlX3RydW5jYXRlX3JhbmdlKHN1ZmlsZSwgbmV3bnNlZ3MsIG5zZWdzIC0gMSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXRfaGVhZGVyOworCisJCXN1aS0+bmNsZWFuc2VncyAtPSBuc2VncyAtIG5ld25zZWdzOworCX0KKworCWthZGRyID0ga21hcF9hdG9taWMoaGVhZGVyX2JoLT5iX3BhZ2UsIEtNX1VTRVIwKTsKKwloZWFkZXIgPSBrYWRkciArIGJoX29mZnNldChoZWFkZXJfYmgpOworCWhlYWRlci0+c2hfbmNsZWFuc2VncyA9IGNwdV90b19sZTY0KHN1aS0+bmNsZWFuc2Vncyk7CisJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOworCisJbWFya19idWZmZXJfZGlydHkoaGVhZGVyX2JoKTsKKwluaWxmc19tZHRfbWFya19kaXJ0eShzdWZpbGUpOworCW5pbGZzX3NldF9uc2VnbWVudHMobmlsZnMsIG5ld25zZWdzKTsKKworb3V0X2hlYWRlcjoKKwlicmVsc2UoaGVhZGVyX2JoKTsKK291dDoKKwl1cF93cml0ZSgmTklMRlNfTURUKHN1ZmlsZSktPm1pX3NlbSk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCiAgKiBuaWxmc19zdWZpbGVfZ2V0X3N1aW5mbyAtCiAgKiBAc3VmaWxlOiBpbm9kZSBvZiBzZWdtZW50IHVzYWdlIGZpbGUKICAqIEBzZWdudW06IHNlZ21lbnQgbnVtYmVyIHRvIHN0YXJ0IGxvb2tpbmcKQEAgLTU4Myw3ICs4MTIsNyBAQAogCXN0cnVjdCBuaWxmc19zZWdtZW50X3VzYWdlICpzdTsKIAlzdHJ1Y3QgbmlsZnNfc3VpbmZvICpzaSA9IGJ1ZjsKIAlzaXplX3Qgc3VzeiA9IE5JTEZTX01EVChzdWZpbGUpLT5taV9lbnRyeV9zaXplOwotCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gTklMRlNfSV9OSUxGUyhzdWZpbGUpOworCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gc3VmaWxlLT5pX3NiLT5zX2ZzX2luZm87CiAJdm9pZCAqa2FkZHI7CiAJdW5zaWduZWQgbG9uZyBuc2Vncywgc2VndXNhZ2VzX3Blcl9ibG9jazsKIAlzc2l6ZV90IG47CkBAIC02NzksNiArOTA4LDkgQEAKIAlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7CiAJYnJlbHNlKGhlYWRlcl9iaCk7CiAKKwlzdWktPmFsbG9jbWF4ID0gbmlsZnNfc3VmaWxlX2dldF9uc2VnbWVudHMoc3VmaWxlKSAtIDE7CisJc3VpLT5hbGxvY21pbiA9IDA7CisKIAl1bmxvY2tfbmV3X2lub2RlKHN1ZmlsZSk7CiAgb3V0OgogCSppbm9kZXAgPSBzdWZpbGU7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvc3VmaWxlLmggYi9mcy9uaWxmczIvc3VmaWxlLmgKaW5kZXggYTk0M2ZiYS4uZTg0YmM1YiAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3N1ZmlsZS5oCisrKyBiL2ZzL25pbGZzMi9zdWZpbGUuaApAQCAtMzEsMTEgKzMxLDEyIEBACiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBuaWxmc19zdWZpbGVfZ2V0X25zZWdtZW50cyhzdHJ1Y3QgaW5vZGUgKnN1ZmlsZSkKIHsKLQlyZXR1cm4gTklMRlNfSV9OSUxGUyhzdWZpbGUpLT5uc19uc2VnbWVudHM7CisJcmV0dXJuICgoc3RydWN0IHRoZV9uaWxmcyAqKXN1ZmlsZS0+aV9zYi0+c19mc19pbmZvKS0+bnNfbnNlZ21lbnRzOwogfQogCiB1bnNpZ25lZCBsb25nIG5pbGZzX3N1ZmlsZV9nZXRfbmNsZWFuc2VncyhzdHJ1Y3QgaW5vZGUgKnN1ZmlsZSk7CiAKK2ludCBuaWxmc19zdWZpbGVfc2V0X2FsbG9jX3JhbmdlKHN0cnVjdCBpbm9kZSAqc3VmaWxlLCBfX3U2NCBzdGFydCwgX191NjQgZW5kKTsKIGludCBuaWxmc19zdWZpbGVfYWxsb2Moc3RydWN0IGlub2RlICosIF9fdTY0ICopOwogaW50IG5pbGZzX3N1ZmlsZV9tYXJrX2RpcnR5KHN0cnVjdCBpbm9kZSAqc3VmaWxlLCBfX3U2NCBzZWdudW0pOwogaW50IG5pbGZzX3N1ZmlsZV9zZXRfc2VnbWVudF91c2FnZShzdHJ1Y3QgaW5vZGUgKnN1ZmlsZSwgX191NjQgc2VnbnVtLApAQCAtNjEsNiArNjIsNyBAQAogdm9pZCBuaWxmc19zdWZpbGVfZG9fc2V0X2Vycm9yKHN0cnVjdCBpbm9kZSAqLCBfX3U2NCwgc3RydWN0IGJ1ZmZlcl9oZWFkICosCiAJCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICopOwogCitpbnQgbmlsZnNfc3VmaWxlX3Jlc2l6ZShzdHJ1Y3QgaW5vZGUgKnN1ZmlsZSwgX191NjQgbmV3bnNlZ3MpOwogaW50IG5pbGZzX3N1ZmlsZV9yZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHNpemVfdCBzdXNpemUsCiAJCSAgICAgIHN0cnVjdCBuaWxmc19pbm9kZSAqcmF3X2lub2RlLCBzdHJ1Y3QgaW5vZGUgKippbm9kZXApOwogCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvc3VwZXIuYyBiL2ZzL25pbGZzMi9zdXBlci5jCmluZGV4IDA2MmNjYTAuLjgzNTFjNDQgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9zdXBlci5jCisrKyBiL2ZzL25pbGZzMi9zdXBlci5jCkBAIC01Niw2ICs1Niw3IEBACiAjaW5jbHVkZSAiYnRub2RlLmgiCiAjaW5jbHVkZSAicGFnZS5oIgogI2luY2x1ZGUgImNwZmlsZS5oIgorI2luY2x1ZGUgInN1ZmlsZS5oIiAvKiBuaWxmc19zdWZpbGVfcmVzaXplKCksIG5pbGZzX3N1ZmlsZV9zZXRfYWxsb2NfcmFuZ2UoKSAqLwogI2luY2x1ZGUgImlmaWxlLmgiCiAjaW5jbHVkZSAiZGF0LmgiCiAjaW5jbHVkZSAic2VnbWVudC5oIgpAQCAtMTY1LDcgKzE2Niw3IEBACiAJaWktPmlfc3RhdGUgPSAwOwogCWlpLT5pX2NubyA9IDA7CiAJaWktPnZmc19pbm9kZS5pX3ZlcnNpb24gPSAxOwotCW5pbGZzX2J0bm9kZV9jYWNoZV9pbml0KCZpaS0+aV9idG5vZGVfY2FjaGUsIHNiLT5zX2JkaSk7CisJbmlsZnNfbWFwcGluZ19pbml0KCZpaS0+aV9idG5vZGVfY2FjaGUsICZpaS0+dmZzX2lub2RlLCBzYi0+c19iZGkpOwogCXJldHVybiAmaWktPnZmc19pbm9kZTsKIH0KIApAQCAtMzQ3LDYgKzM0OCwxMzQgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKioKKyAqIG5pbGZzX21vdmVfMm5kX3N1cGVyIC0gcmVsb2NhdGUgc2Vjb25kYXJ5IHN1cGVyIGJsb2NrCisgKiBAc2I6IHN1cGVyIGJsb2NrIGluc3RhbmNlCisgKiBAc2Iyb2ZmOiBuZXcgb2Zmc2V0IG9mIHRoZSBzZWNvbmRhcnkgc3VwZXIgYmxvY2sgKGluIGJ5dGVzKQorICovCitzdGF0aWMgaW50IG5pbGZzX21vdmVfMm5kX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGxvZmZfdCBzYjJvZmYpCit7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYi0+c19mc19pbmZvOworCXN0cnVjdCBidWZmZXJfaGVhZCAqbnNiaDsKKwlzdHJ1Y3QgbmlsZnNfc3VwZXJfYmxvY2sgKm5zYnA7CisJc2VjdG9yX3QgYmxvY2tuciwgbmV3YmxvY2tucjsKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKKwlpbnQgc2IyaSA9IC0xOyAgLyogYXJyYXkgaW5kZXggb2YgdGhlIHNlY29uZGFyeSBzdXBlcmJsb2NrICovCisJaW50IHJldCA9IDA7CisKKwkvKiBuaWxmcy0+bnNfc2VtIG11c3QgYmUgbG9ja2VkIGJ5IHRoZSBjYWxsZXIuICovCisJaWYgKG5pbGZzLT5uc19zYmhbMV0gJiYKKwkgICAgbmlsZnMtPm5zX3NiaFsxXS0+Yl9ibG9ja25yID4gbmlsZnMtPm5zX2ZpcnN0X2RhdGFfYmxvY2spIHsKKwkJc2IyaSA9IDE7CisJCWJsb2NrbnIgPSBuaWxmcy0+bnNfc2JoWzFdLT5iX2Jsb2NrbnI7CisJfSBlbHNlIGlmIChuaWxmcy0+bnNfc2JoWzBdLT5iX2Jsb2NrbnIgPiBuaWxmcy0+bnNfZmlyc3RfZGF0YV9ibG9jaykgeworCQlzYjJpID0gMDsKKwkJYmxvY2tuciA9IG5pbGZzLT5uc19zYmhbMF0tPmJfYmxvY2tucjsKKwl9CisJaWYgKHNiMmkgPj0gMCAmJiAodTY0KWJsb2NrbnIgPDwgbmlsZnMtPm5zX2Jsb2Nrc2l6ZV9iaXRzID09IHNiMm9mZikKKwkJZ290byBvdXQ7ICAvKiBzdXBlciBibG9jayBsb2NhdGlvbiBpcyB1bmNoYW5nZWQgKi8KKworCS8qIEdldCBuZXcgc3VwZXIgYmxvY2sgYnVmZmVyICovCisJbmV3YmxvY2tuciA9IHNiMm9mZiA+PiBuaWxmcy0+bnNfYmxvY2tzaXplX2JpdHM7CisJb2Zmc2V0ID0gc2Iyb2ZmICYgKG5pbGZzLT5uc19ibG9ja3NpemUgLSAxKTsKKwluc2JoID0gc2JfZ2V0YmxrKHNiLCBuZXdibG9ja25yKTsKKwlpZiAoIW5zYmgpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIk5JTEZTIHdhcm5pbmc6IHVuYWJsZSB0byBtb3ZlIHNlY29uZGFyeSBzdXBlcmJsb2NrICIKKwkJICAgICAgICJ0byBibG9jayAlbGx1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKW5ld2Jsb2NrbnIpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIG91dDsKKwl9CisJbnNicCA9ICh2b2lkICopbnNiaC0+Yl9kYXRhICsgb2Zmc2V0OworCW1lbXNldChuc2JwLCAwLCBuaWxmcy0+bnNfYmxvY2tzaXplKTsKKworCWlmIChzYjJpID49IDApIHsKKwkJbWVtY3B5KG5zYnAsIG5pbGZzLT5uc19zYnBbc2IyaV0sIG5pbGZzLT5uc19zYnNpemUpOworCQlicmVsc2UobmlsZnMtPm5zX3NiaFtzYjJpXSk7CisJCW5pbGZzLT5uc19zYmhbc2IyaV0gPSBuc2JoOworCQluaWxmcy0+bnNfc2JwW3NiMmldID0gbnNicDsKKwl9IGVsc2UgaWYgKG5pbGZzLT5uc19zYmhbMF0tPmJfYmxvY2tuciA8IG5pbGZzLT5uc19maXJzdF9kYXRhX2Jsb2NrKSB7CisJCS8qIHNlY29uZGFyeSBzdXBlciBibG9jayB3aWxsIGJlIHJlc3RvcmVkIHRvIGluZGV4IDEgKi8KKwkJbmlsZnMtPm5zX3NiaFsxXSA9IG5zYmg7CisJCW5pbGZzLT5uc19zYnBbMV0gPSBuc2JwOworCX0gZWxzZSB7CisJCWJyZWxzZShuc2JoKTsKKwl9CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBuaWxmc19yZXNpemVfZnMgLSByZXNpemUgdGhlIGZpbGVzeXN0ZW0KKyAqIEBzYjogc3VwZXIgYmxvY2sgaW5zdGFuY2UKKyAqIEBuZXdzaXplOiBuZXcgc2l6ZSBvZiB0aGUgZmlsZXN5c3RlbSAoaW4gYnl0ZXMpCisgKi8KK2ludCBuaWxmc19yZXNpemVfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgX191NjQgbmV3c2l6ZSkKK3sKKwlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNiLT5zX2ZzX2luZm87CisJc3RydWN0IG5pbGZzX3N1cGVyX2Jsb2NrICoqc2JwOworCV9fdTY0IGRldnNpemUsIG5ld25zZWdzOworCWxvZmZfdCBzYjJvZmY7CisJaW50IHJldDsKKworCXJldCA9IC1FUkFOR0U7CisJZGV2c2l6ZSA9IGlfc2l6ZV9yZWFkKHNiLT5zX2JkZXYtPmJkX2lub2RlKTsKKwlpZiAobmV3c2l6ZSA+IGRldnNpemUpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBXcml0ZSBsb2NrIGlzIHJlcXVpcmVkIHRvIHByb3RlY3Qgc29tZSBmdW5jdGlvbnMgZGVwZW5kaW5nCisJICogb24gdGhlIG51bWJlciBvZiBzZWdtZW50cywgdGhlIG51bWJlciBvZiByZXNlcnZlZCBzZWdtZW50cywKKwkgKiBhbmQgc28gZm9ydGguCisJICovCisJZG93bl93cml0ZSgmbmlsZnMtPm5zX3NlZ2N0b3Jfc2VtKTsKKworCXNiMm9mZiA9IE5JTEZTX1NCMl9PRkZTRVRfQllURVMobmV3c2l6ZSk7CisJbmV3bnNlZ3MgPSBzYjJvZmYgPj4gbmlsZnMtPm5zX2Jsb2Nrc2l6ZV9iaXRzOworCWRvX2RpdihuZXduc2VncywgbmlsZnMtPm5zX2Jsb2Nrc19wZXJfc2VnbWVudCk7CisKKwlyZXQgPSBuaWxmc19zdWZpbGVfcmVzaXplKG5pbGZzLT5uc19zdWZpbGUsIG5ld25zZWdzKTsKKwl1cF93cml0ZSgmbmlsZnMtPm5zX3NlZ2N0b3Jfc2VtKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBuaWxmc19jb25zdHJ1Y3Rfc2VnbWVudChzYik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJZG93bl93cml0ZSgmbmlsZnMtPm5zX3NlbSk7CisJbmlsZnNfbW92ZV8ybmRfc3VwZXIoc2IsIHNiMm9mZik7CisJcmV0ID0gLUVJTzsKKwlzYnAgPSBuaWxmc19wcmVwYXJlX3N1cGVyKHNiLCAwKTsKKwlpZiAobGlrZWx5KHNicCkpIHsKKwkJbmlsZnNfc2V0X2xvZ19jdXJzb3Ioc2JwWzBdLCBuaWxmcyk7CisJCS8qCisJCSAqIERyb3AgTklMRlNfUkVTSVpFX0ZTIGZsYWcgZm9yIGNvbXBhdGliaWxpdHkgd2l0aAorCQkgKiBtb3VudC10aW1lIHJlc2l6ZSB3aGljaCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYQorCQkgKiBmdXR1cmUgcmVsZWFzZS4KKwkJICovCisJCXNicFswXS0+c19zdGF0ZSA9IGNwdV90b19sZTE2KGxlMTZfdG9fY3B1KHNicFswXS0+c19zdGF0ZSkgJgorCQkJCQkgICAgICB+TklMRlNfUkVTSVpFX0ZTKTsKKwkJc2JwWzBdLT5zX2Rldl9zaXplID0gY3B1X3RvX2xlNjQobmV3c2l6ZSk7CisJCXNicFswXS0+c19uc2VnbWVudHMgPSBjcHVfdG9fbGU2NChuaWxmcy0+bnNfbnNlZ21lbnRzKTsKKwkJaWYgKHNicFsxXSkKKwkJCW1lbWNweShzYnBbMV0sIHNicFswXSwgbmlsZnMtPm5zX3Nic2l6ZSk7CisJCXJldCA9IG5pbGZzX2NvbW1pdF9zdXBlcihzYiwgTklMRlNfU0JfQ09NTUlUX0FMTCk7CisJfQorCXVwX3dyaXRlKCZuaWxmcy0+bnNfc2VtKTsKKworCS8qCisJICogUmVzZXQgdGhlIHJhbmdlIG9mIGFsbG9jYXRhYmxlIHNlZ21lbnRzIGxhc3QuICBUaGlzIG9yZGVyCisJICogaXMgaW1wb3J0YW50IGluIHRoZSBjYXNlIG9mIGV4cGFuc2lvbiBiZWNhdXNlIHRoZSBzZWNvbmRhcnkKKwkgKiBzdXBlcmJsb2NrIG11c3QgYmUgcHJvdGVjdGVkIGZyb20gbG9nIHdyaXRlIHVudGlsIG1pZ3JhdGlvbgorCSAqIGNvbXBsZXRlcy4KKwkgKi8KKwlpZiAoIXJldCkKKwkJbmlsZnNfc3VmaWxlX3NldF9hbGxvY19yYW5nZShuaWxmcy0+bnNfc3VmaWxlLCAwLCBuZXduc2VncyAtIDEpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyB2b2lkIG5pbGZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gc2ItPnNfZnNfaW5mbzsKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi90aGVfbmlsZnMuYyBiL2ZzL25pbGZzMi90aGVfbmlsZnMuYwppbmRleCBkMmFjZDFhLi5kMzI3MTQwIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvdGhlX25pbGZzLmMKKysrIGIvZnMvbmlsZnMyL3RoZV9uaWxmcy5jCkBAIC0zNjMsNiArMzYzLDI0IEBACiAJcmV0dXJuIHJlczsKIH0KIAorLyoqCisgKiBuaWxmc19ucnN2c2VncyAtIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIHJlc2VydmVkIHNlZ21lbnRzCisgKiBAbmlsZnM6IG5pbGZzIG9iamVjdAorICogQG5zZWdzOiB0b3RhbCBudW1iZXIgb2Ygc2VnbWVudHMKKyAqLwordW5zaWduZWQgbG9uZyBuaWxmc19ucnN2c2VncyhzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcywgdW5zaWduZWQgbG9uZyBuc2VncykKK3sKKwlyZXR1cm4gbWF4X3QodW5zaWduZWQgbG9uZywgTklMRlNfTUlOX05SU1ZTRUdTLAorCQkgICAgIERJVl9ST1VORF9VUChuc2VncyAqIG5pbGZzLT5uc19yX3NlZ21lbnRzX3BlcmNlbnRhZ2UsCisJCQkJICAxMDApKTsKK30KKwordm9pZCBuaWxmc19zZXRfbnNlZ21lbnRzKHN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzLCB1bnNpZ25lZCBsb25nIG5zZWdzKQoreworCW5pbGZzLT5uc19uc2VnbWVudHMgPSBuc2VnczsKKwluaWxmcy0+bnNfbnJzdnNlZ3MgPSBuaWxmc19ucnN2c2VncyhuaWxmcywgbnNlZ3MpOworfQorCiBzdGF0aWMgaW50IG5pbGZzX3N0b3JlX2Rpc2tfbGF5b3V0KHN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzLAogCQkJCSAgIHN0cnVjdCBuaWxmc19zdXBlcl9ibG9jayAqc2JwKQogewpAQCAtMzg5LDEzICs0MDcsOSBAQAogCX0KIAogCW5pbGZzLT5uc19maXJzdF9kYXRhX2Jsb2NrID0gbGU2NF90b19jcHUoc2JwLT5zX2ZpcnN0X2RhdGFfYmxvY2spOwotCW5pbGZzLT5uc19uc2VnbWVudHMgPSBsZTY0X3RvX2NwdShzYnAtPnNfbnNlZ21lbnRzKTsKIAluaWxmcy0+bnNfcl9zZWdtZW50c19wZXJjZW50YWdlID0KIAkJbGUzMl90b19jcHUoc2JwLT5zX3Jfc2VnbWVudHNfcGVyY2VudGFnZSk7Ci0JbmlsZnMtPm5zX25yc3ZzZWdzID0KLQkJbWF4X3QodW5zaWduZWQgbG9uZywgTklMRlNfTUlOX05SU1ZTRUdTLAotCQkgICAgICBESVZfUk9VTkRfVVAobmlsZnMtPm5zX25zZWdtZW50cyAqCi0JCQkJICAgbmlsZnMtPm5zX3Jfc2VnbWVudHNfcGVyY2VudGFnZSwgMTAwKSk7CisJbmlsZnNfc2V0X25zZWdtZW50cyhuaWxmcywgbGU2NF90b19jcHUoc2JwLT5zX25zZWdtZW50cykpOwogCW5pbGZzLT5uc19jcmNfc2VlZCA9IGxlMzJfdG9fY3B1KHNicC0+c19jcmNfc2VlZCk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvdGhlX25pbGZzLmggYi9mcy9uaWxmczIvdGhlX25pbGZzLmgKaW5kZXggZjQ5NjgxNC4uOTk5MmIxMSAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3RoZV9uaWxmcy5oCisrKyBiL2ZzL25pbGZzMi90aGVfbmlsZnMuaApAQCAtMjY4LDYgKzI2OCw4IEBACiB2b2lkIGRlc3Ryb3lfbmlsZnMoc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMpOwogaW50IGluaXRfbmlsZnMoc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNoYXIgKmRhdGEpOwogaW50IGxvYWRfbmlsZnMoc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwordW5zaWduZWQgbG9uZyBuaWxmc19ucnN2c2VncyhzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcywgdW5zaWduZWQgbG9uZyBuc2Vncyk7Cit2b2lkIG5pbGZzX3NldF9uc2VnbWVudHMoc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMsIHVuc2lnbmVkIGxvbmcgbnNlZ3MpOwogaW50IG5pbGZzX2Rpc2NhcmRfc2VnbWVudHMoc3RydWN0IHRoZV9uaWxmcyAqLCBfX3U2NCAqLCBzaXplX3QpOwogaW50IG5pbGZzX2NvdW50X2ZyZWVfYmxvY2tzKHN0cnVjdCB0aGVfbmlsZnMgKiwgc2VjdG9yX3QgKik7CiBzdHJ1Y3QgbmlsZnNfcm9vdCAqbmlsZnNfbG9va3VwX3Jvb3Qoc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMsIF9fdTY0IGNubyk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYyBiL2ZzL29jZnMyL3JlZmNvdW50dHJlZS5jCmluZGV4IDVkMzI3NDkuLjNjNzYwNmMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3JlZmNvdW50dHJlZS5jCisrKyBiL2ZzL29jZnMyL3JlZmNvdW50dHJlZS5jCkBAIC0zNzA2LDcgKzM3MDYsNyBAQAogCWNvbnRleHQtPmNvd19zdGFydCA9IGNvd19zdGFydDsKIAljb250ZXh0LT5jb3dfbGVuID0gY293X2xlbjsKIAljb250ZXh0LT5yZWZfdHJlZSA9IHJlZl90cmVlOwotCWNvbnRleHQtPnJlZl9yb290X2JoID0gcmVmX3Jvb3RfYmg7OworCWNvbnRleHQtPnJlZl9yb290X2JoID0gcmVmX3Jvb3RfYmg7CiAJY29udGV4dC0+Y293X29iamVjdCA9IHh2OwogCiAJY29udGV4dC0+Y293X2R1cGxpY2F0ZV9jbHVzdGVycyA9IG9jZnMyX2R1cGxpY2F0ZV9jbHVzdGVyc19ieV9qYmQ7CmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL2xkbS5jIGIvZnMvcGFydGl0aW9ucy9sZG0uYwppbmRleCBjZTRmNjI0Li5hZjlmZGYwIDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL2xkbS5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvbGRtLmMKQEAgLTU2NSw3ICs1NjUsNyBAQAogCiAJZGF0YSA9IHJlYWRfcGFydF9zZWN0b3Ioc3RhdGUsIDAsICZzZWN0KTsKIAlpZiAoIWRhdGEpIHsKLQkJbGRtX2NyaXQgKCJEaXNrIHJlYWQgZmFpbGVkLiIpOworCQlsZG1faW5mbyAoIkRpc2sgcmVhZCBmYWlsZWQuIik7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKQEAgLTEzMzUsNiArMTMzNSwxMSBAQAogCiAJbGlzdF9hZGRfdGFpbCAoJmYtPmxpc3QsIGZyYWdzKTsKIGZvdW5kOgorCWlmIChyZWMgPj0gZi0+bnVtKSB7CisJCWxkbV9lcnJvcigiUkVDIHZhbHVlICglZCkgZXhjZWVkcyBOVU0gdmFsdWUgKCVkKSIsIHJlYywgZi0+bnVtKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwogCWlmIChmLT5tYXAgJiAoMSA8PCByZWMpKSB7CiAJCWxkbV9lcnJvciAoIkR1cGxpY2F0ZSBWQkxLLCBwYXJ0ICVkLiIsIHJlYyk7CiAJCWYtPm1hcCAmPSAweDdGOwkJCS8qIE1hcmsgdGhlIGdyb3VwIGFzIGJyb2tlbiAqLwpkaWZmIC0tZ2l0IGEvZnMvcHN0b3JlL3BsYXRmb3JtLmMgYi9mcy9wc3RvcmUvcGxhdGZvcm0uYwppbmRleCBmODM1YTI1Li5mMmMzZmYyIDEwMDY0NAotLS0gYS9mcy9wc3RvcmUvcGxhdGZvcm0uYworKysgYi9mcy9wc3RvcmUvcGxhdGZvcm0uYwpAQCAtMTUyLDIxICsxNTIsMjcgQEAKIHZvaWQgcHN0b3JlX2dldF9yZWNvcmRzKHZvaWQpCiB7CiAJc3RydWN0IHBzdG9yZV9pbmZvICpwc2kgPSBwc2luZm87Ci0Jc2l6ZV90CQkJc2l6ZTsKKwlzc2l6ZV90CQkJc2l6ZTsKIAl1NjQJCQlpZDsKIAllbnVtIHBzdG9yZV90eXBlX2lkCXR5cGU7CiAJc3RydWN0IHRpbWVzcGVjCQl0aW1lOwotCWludAkJCWZhaWxlZCA9IDA7CisJaW50CQkJZmFpbGVkID0gMCwgcmM7CiAKIAlpZiAoIXBzaSkKIAkJcmV0dXJuOwogCiAJbXV0ZXhfbG9jaygmcHNpbmZvLT5idWZfbXV0ZXgpOworCXJjID0gcHNpLT5vcGVuKHBzaSk7CisJaWYgKHJjKQorCQlnb3RvIG91dDsKKwogCXdoaWxlICgoc2l6ZSA9IHBzaS0+cmVhZCgmaWQsICZ0eXBlLCAmdGltZSkpID4gMCkgewotCQlpZiAocHN0b3JlX21rZmlsZSh0eXBlLCBwc2ktPm5hbWUsIGlkLCBwc2ktPmJ1Ziwgc2l6ZSwKKwkJaWYgKHBzdG9yZV9ta2ZpbGUodHlwZSwgcHNpLT5uYW1lLCBpZCwgcHNpLT5idWYsIChzaXplX3Qpc2l6ZSwKIAkJCQkgIHRpbWUsIHBzaS0+ZXJhc2UpKQogCQkJZmFpbGVkKys7CiAJfQorCXBzaS0+Y2xvc2UocHNpKTsKK291dDoKIAltdXRleF91bmxvY2soJnBzaW5mby0+YnVmX211dGV4KTsKIAogCWlmIChmYWlsZWQpCmRpZmYgLS1naXQgYS9mcy9zcXVhc2hmcy9LY29uZmlnIGIvZnMvc3F1YXNoZnMvS2NvbmZpZwppbmRleCBlZmMzMDlmLi43Nzk3MjE4IDEwMDY0NAotLS0gYS9mcy9zcXVhc2hmcy9LY29uZmlnCisrKyBiL2ZzL3NxdWFzaGZzL0tjb25maWcKQEAgLTQyLDcgKzQyLDcgQEAKIAlzZWxlY3QgTFpPX0RFQ09NUFJFU1MKIAloZWxwCiAJICBTYXlpbmcgWSBoZXJlIGluY2x1ZGVzIHN1cHBvcnQgZm9yIHJlYWRpbmcgU3F1YXNoZnMgZmlsZSBzeXN0ZW1zCi0JICBjb21wcmVzc2VkIHdpdGggTFpPIGNvbXByZXNzc2lvbi4gIExaTyBjb21wcmVzc2lvbiBpcyBtYWlubHkKKwkgIGNvbXByZXNzZWQgd2l0aCBMWk8gY29tcHJlc3Npb24uICBMWk8gY29tcHJlc3Npb24gaXMgbWFpbmx5CiAJICBhaW1lZCBhdCBlbWJlZGRlZCBzeXN0ZW1zIHdpdGggc2xvd2VyIENQVXMgd2hlcmUgdGhlIG92ZXJoZWFkcwogCSAgb2YgemxpYiBhcmUgdG9vIGhpZ2guCiAKQEAgLTU3LDcgKzU3LDcgQEAKIAlzZWxlY3QgWFpfREVDCiAJaGVscAogCSAgU2F5aW5nIFkgaGVyZSBpbmNsdWRlcyBzdXBwb3J0IGZvciByZWFkaW5nIFNxdWFzaGZzIGZpbGUgc3lzdGVtcwotCSAgY29tcHJlc3NlZCB3aXRoIFhaIGNvbXByZXNzc2lvbi4gIFhaIGdpdmVzIGJldHRlciBjb21wcmVzc2lvbiB0aGFuCisJICBjb21wcmVzc2VkIHdpdGggWFogY29tcHJlc3Npb24uICBYWiBnaXZlcyBiZXR0ZXIgY29tcHJlc3Npb24gdGhhbgogCSAgdGhlIGRlZmF1bHQgemxpYiBjb21wcmVzc2lvbiwgYXQgdGhlIGV4cGVuc2Ugb2YgZ3JlYXRlciBDUFUgYW5kCiAJICBtZW1vcnkgb3ZlcmhlYWQuCiAKZGlmZiAtLWdpdCBhL2ZzL3NxdWFzaGZzL2NhY2hlLmMgYi9mcy9zcXVhc2hmcy9jYWNoZS5jCmluZGV4IGMzN2I1MjAuLjRiNWEzZmIgMTAwNjQ0Ci0tLSBhL2ZzL3NxdWFzaGZzL2NhY2hlLmMKKysrIGIvZnMvc3F1YXNoZnMvY2FjaGUuYwpAQCAtMjksNyArMjksNyBAQAogICogcGx1cyBmdW5jdGlvbnMgbGF5ZXJlZCBvbnRvcCBvZiB0aGUgZ2VuZXJpYyBjYWNoZSBpbXBsZW1lbnRhdGlvbiB0bwogICogYWNjZXNzIHRoZSBtZXRhZGF0YSBhbmQgZnJhZ21lbnQgY2FjaGVzLgogICoKLSAqIFRvIGF2b2lkIG91dCBvZiBtZW1vcnkgYW5kIGZyYWdtZW50YXRpb24gaXNzc3VlcyB3aXRoIHZtYWxsb2MgdGhlIGNhY2hlCisgKiBUbyBhdm9pZCBvdXQgb2YgbWVtb3J5IGFuZCBmcmFnbWVudGF0aW9uIGlzc3VlcyB3aXRoIHZtYWxsb2MgdGhlIGNhY2hlCiAgKiB1c2VzIHNlcXVlbmNlcyBvZiBrbWFsbG9jZWQgUEFHRV9DQUNIRV9TSVpFIGJ1ZmZlcnMuCiAgKgogICogSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgdGhlIGNhY2hlIGlzIG5vdCB1c2VkIGZvciBmaWxlIGRhdGFibG9ja3MsIHRoZXNlCmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuYwppbmRleCA4YTA2ODgxLi5jMDRmN2UwIDEwMDY0NAotLS0gYS9mcy9zdXBlci5jCisrKyBiL2ZzL3N1cGVyLmMKQEAgLTk0OCw4ICs5NDgsNyBAQAogCSAqIGZpbGVzeXN0ZW1zIHNob3VsZCBuZXZlciBzZXQgc19tYXhieXRlcyBsYXJnZXIgdGhhbiBNQVhfTEZTX0ZJTEVTSVpFCiAJICogYnV0IHNfbWF4Ynl0ZXMgd2FzIGFuIHVuc2lnbmVkIGxvbmcgbG9uZyBmb3IgbWFueSByZWxlYXNlcy4gVGhyb3cKIAkgKiB0aGlzIHdhcm5pbmcgZm9yIGEgbGl0dGxlIHdoaWxlIHRvIHRyeSBhbmQgY2F0Y2ggZmlsZXN5c3RlbXMgdGhhdAotCSAqIHZpb2xhdGUgdGhpcyBydWxlLiBUaGlzIHdhcm5pbmcgc2hvdWxkIGJlIGVpdGhlciByZW1vdmVkIG9yCi0JICogY29udmVydGVkIHRvIGEgQlVHKCkgaW4gMi42LjM0LgorCSAqIHZpb2xhdGUgdGhpcyBydWxlLgogCSAqLwogCVdBUk4oKHNiLT5zX21heGJ5dGVzIDwgMCksICIlcyBzZXQgc2ItPnNfbWF4Ynl0ZXMgdG8gIgogCQkibmVnYXRpdmUgdmFsdWUgKCVsbGQpXG4iLCB0eXBlLT5uYW1lLCBzYi0+c19tYXhieXRlcyk7CmRpZmYgLS1naXQgYS9mcy90aW1lcmZkLmMgYi9mcy90aW1lcmZkLmMKaW5kZXggOGM0ZmMxNC4uZjY3YWNiZCAxMDA2NDQKLS0tIGEvZnMvdGltZXJmZC5jCisrKyBiL2ZzL3RpbWVyZmQuYwpAQCAtMjIsMTYgKzIyLDI0IEBACiAjaW5jbHVkZSA8bGludXgvYW5vbl9pbm9kZXMuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lcmZkLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogCiBzdHJ1Y3QgdGltZXJmZF9jdHggewogCXN0cnVjdCBocnRpbWVyIHRtcjsKIAlrdGltZV90IHRpbnR2OworCWt0aW1lX3QgbW9mZnM7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd3FoOwogCXU2NCB0aWNrczsKIAlpbnQgZXhwaXJlZDsKIAlpbnQgY2xvY2tpZDsKKwlzdHJ1Y3QgcmN1X2hlYWQgcmN1OworCXN0cnVjdCBsaXN0X2hlYWQgY2xpc3Q7CisJYm9vbCBtaWdodF9jYW5jZWw7CiB9OwogCitzdGF0aWMgTElTVF9IRUFEKGNhbmNlbF9saXN0KTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soY2FuY2VsX2xvY2spOworCiAvKgogICogVGhpcyBnZXRzIGNhbGxlZCB3aGVuIHRoZSB0aW1lciBldmVudCB0cmlnZ2Vycy4gV2Ugc2V0IHRoZSAiZXhwaXJlZCIKICAqIGZsYWcsIGJ1dCB3ZSBkbyBub3QgcmUtYXJtIHRoZSB0aW1lciAoaW4gY2FzZSBpdCdzIG5lY2Vzc2FyeSwKQEAgLTUxLDYgKzU5LDYzIEBACiAJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOwogfQogCisvKgorICogQ2FsbGVkIHdoZW4gdGhlIGNsb2NrIHdhcyBzZXQgdG8gY2FuY2VsIHRoZSB0aW1lcnMgaW4gdGhlIGNhbmNlbAorICogbGlzdC4KKyAqLwordm9pZCB0aW1lcmZkX2Nsb2NrX3dhc19zZXQodm9pZCkKK3sKKwlrdGltZV90IG1vZmZzID0ga3RpbWVfZ2V0X21vbm90b25pY19vZmZzZXQoKTsKKwlzdHJ1Y3QgdGltZXJmZF9jdHggKmN0eDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGN0eCwgJmNhbmNlbF9saXN0LCBjbGlzdCkgeworCQlpZiAoIWN0eC0+bWlnaHRfY2FuY2VsKQorCQkJY29udGludWU7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjdHgtPndxaC5sb2NrLCBmbGFncyk7CisJCWlmIChjdHgtPm1vZmZzLnR2NjQgIT0gbW9mZnMudHY2NCkgeworCQkJY3R4LT5tb2Zmcy50djY0ID0gS1RJTUVfTUFYOworCQkJd2FrZV91cF9sb2NrZWQoJmN0eC0+d3FoKTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPndxaC5sb2NrLCBmbGFncyk7CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworfQorCitzdGF0aWMgdm9pZCB0aW1lcmZkX3JlbW92ZV9jYW5jZWwoc3RydWN0IHRpbWVyZmRfY3R4ICpjdHgpCit7CisJaWYgKGN0eC0+bWlnaHRfY2FuY2VsKSB7CisJCWN0eC0+bWlnaHRfY2FuY2VsID0gZmFsc2U7CisJCXNwaW5fbG9jaygmY2FuY2VsX2xvY2spOworCQlsaXN0X2RlbF9yY3UoJmN0eC0+Y2xpc3QpOworCQlzcGluX3VubG9jaygmY2FuY2VsX2xvY2spOworCX0KK30KKworc3RhdGljIGJvb2wgdGltZXJmZF9jYW5jZWxlZChzdHJ1Y3QgdGltZXJmZF9jdHggKmN0eCkKK3sKKwlpZiAoIWN0eC0+bWlnaHRfY2FuY2VsIHx8IGN0eC0+bW9mZnMudHY2NCAhPSBLVElNRV9NQVgpCisJCXJldHVybiBmYWxzZTsKKwljdHgtPm1vZmZzID0ga3RpbWVfZ2V0X21vbm90b25pY19vZmZzZXQoKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgdGltZXJmZF9zZXR1cF9jYW5jZWwoc3RydWN0IHRpbWVyZmRfY3R4ICpjdHgsIGludCBmbGFncykKK3sKKwlpZiAoY3R4LT5jbG9ja2lkID09IENMT0NLX1JFQUxUSU1FICYmIChmbGFncyAmIFRGRF9USU1FUl9BQlNUSU1FKSAmJgorCSAgICAoZmxhZ3MgJiBURkRfVElNRVJfQ0FOQ0VMX09OX1NFVCkpIHsKKwkJaWYgKCFjdHgtPm1pZ2h0X2NhbmNlbCkgeworCQkJY3R4LT5taWdodF9jYW5jZWwgPSB0cnVlOworCQkJc3Bpbl9sb2NrKCZjYW5jZWxfbG9jayk7CisJCQlsaXN0X2FkZF9yY3UoJmN0eC0+Y2xpc3QsICZjYW5jZWxfbGlzdCk7CisJCQlzcGluX3VubG9jaygmY2FuY2VsX2xvY2spOworCQl9CisJfSBlbHNlIGlmIChjdHgtPm1pZ2h0X2NhbmNlbCkgeworCQl0aW1lcmZkX3JlbW92ZV9jYW5jZWwoY3R4KTsKKwl9Cit9CisKIHN0YXRpYyBrdGltZV90IHRpbWVyZmRfZ2V0X3JlbWFpbmluZyhzdHJ1Y3QgdGltZXJmZF9jdHggKmN0eCkKIHsKIAlrdGltZV90IHJlbWFpbmluZzsKQEAgLTU5LDExICsxMjQsMTIgQEAKIAlyZXR1cm4gcmVtYWluaW5nLnR2NjQgPCAwID8ga3RpbWVfc2V0KDAsIDApOiByZW1haW5pbmc7CiB9CiAKLXN0YXRpYyB2b2lkIHRpbWVyZmRfc2V0dXAoc3RydWN0IHRpbWVyZmRfY3R4ICpjdHgsIGludCBmbGFncywKLQkJCSAgY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMgKmt0bXIpCitzdGF0aWMgaW50IHRpbWVyZmRfc2V0dXAoc3RydWN0IHRpbWVyZmRfY3R4ICpjdHgsIGludCBmbGFncywKKwkJCSBjb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyAqa3RtcikKIHsKIAllbnVtIGhydGltZXJfbW9kZSBodG1vZGU7CiAJa3RpbWVfdCB0ZXhwOworCWludCBjbG9ja2lkID0gY3R4LT5jbG9ja2lkOwogCiAJaHRtb2RlID0gKGZsYWdzICYgVEZEX1RJTUVSX0FCU1RJTUUpID8KIAkJSFJUSU1FUl9NT0RFX0FCUzogSFJUSU1FUl9NT0RFX1JFTDsKQEAgLTcyLDE5ICsxMzgsMjQgQEAKIAljdHgtPmV4cGlyZWQgPSAwOwogCWN0eC0+dGlja3MgPSAwOwogCWN0eC0+dGludHYgPSB0aW1lc3BlY190b19rdGltZShrdG1yLT5pdF9pbnRlcnZhbCk7Ci0JaHJ0aW1lcl9pbml0KCZjdHgtPnRtciwgY3R4LT5jbG9ja2lkLCBodG1vZGUpOworCWhydGltZXJfaW5pdCgmY3R4LT50bXIsIGNsb2NraWQsIGh0bW9kZSk7CiAJaHJ0aW1lcl9zZXRfZXhwaXJlcygmY3R4LT50bXIsIHRleHApOwogCWN0eC0+dG1yLmZ1bmN0aW9uID0gdGltZXJmZF90bXJwcm9jOwotCWlmICh0ZXhwLnR2NjQgIT0gMCkKKwlpZiAodGV4cC50djY0ICE9IDApIHsKIAkJaHJ0aW1lcl9zdGFydCgmY3R4LT50bXIsIHRleHAsIGh0bW9kZSk7CisJCWlmICh0aW1lcmZkX2NhbmNlbGVkKGN0eCkpCisJCQlyZXR1cm4gLUVDQU5DRUxFRDsKKwl9CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdGltZXJmZF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCB0aW1lcmZkX2N0eCAqY3R4ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCisJdGltZXJmZF9yZW1vdmVfY2FuY2VsKGN0eCk7CiAJaHJ0aW1lcl9jYW5jZWwoJmN0eC0+dG1yKTsKLQlrZnJlZShjdHgpOworCWtmcmVlX3JjdShjdHgsIHJjdSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExOCw4ICsxODksMjEgQEAKIAkJcmVzID0gLUVBR0FJTjsKIAllbHNlCiAJCXJlcyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV9sb2NrZWRfaXJxKGN0eC0+d3FoLCBjdHgtPnRpY2tzKTsKKworCS8qCisJICogSWYgY2xvY2sgaGFzIGNoYW5nZWQsIHdlIGRvIG5vdCBjYXJlIGFib3V0IHRoZQorCSAqIHRpY2tzIGFuZCB3ZSBkbyBub3QgcmVhcm0gdGhlIHRpbWVyLiBVc2Vyc3BhY2UgbXVzdAorCSAqIHJlZXZhbHVhdGUgYW55d2F5LgorCSAqLworCWlmICh0aW1lcmZkX2NhbmNlbGVkKGN0eCkpIHsKKwkJY3R4LT50aWNrcyA9IDA7CisJCWN0eC0+ZXhwaXJlZCA9IDA7CisJCXJlcyA9IC1FQ0FOQ0VMRUQ7CisJfQorCiAJaWYgKGN0eC0+dGlja3MpIHsKIAkJdGlja3MgPSBjdHgtPnRpY2tzOworCiAJCWlmIChjdHgtPmV4cGlyZWQgJiYgY3R4LT50aW50di50djY0KSB7CiAJCQkvKgogCQkJICogSWYgdGludHYudHY2NCAhPSAwLCB0aGlzIGlzIGEgcGVyaW9kaWMgdGltZXIgdGhhdApAQCAtMTgzLDYgKzI2Nyw3IEBACiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY3R4LT53cWgpOwogCWN0eC0+Y2xvY2tpZCA9IGNsb2NraWQ7CiAJaHJ0aW1lcl9pbml0KCZjdHgtPnRtciwgY2xvY2tpZCwgSFJUSU1FUl9NT0RFX0FCUyk7CisJY3R4LT5tb2ZmcyA9IGt0aW1lX2dldF9tb25vdG9uaWNfb2Zmc2V0KCk7CiAKIAl1ZmQgPSBhbm9uX2lub2RlX2dldGZkKCJbdGltZXJmZF0iLCAmdGltZXJmZF9mb3BzLCBjdHgsCiAJCQkgICAgICAgT19SRFdSIHwgKGZsYWdzICYgVEZEX1NIQVJFRF9GQ05UTF9GTEFHUykpOwpAQCAtMTk5LDYgKzI4NCw3IEBACiAJc3RydWN0IGZpbGUgKmZpbGU7CiAJc3RydWN0IHRpbWVyZmRfY3R4ICpjdHg7CiAJc3RydWN0IGl0aW1lcnNwZWMga3Rtciwga290bXI7CisJaW50IHJldDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigma3RtciwgdXRtciwgc2l6ZW9mKGt0bXIpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0yMTMsNiArMjk5LDggQEAKIAkJcmV0dXJuIFBUUl9FUlIoZmlsZSk7CiAJY3R4ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCisJdGltZXJmZF9zZXR1cF9jYW5jZWwoY3R4LCBmbGFncyk7CisKIAkvKgogCSAqIFdlIG5lZWQgdG8gc3RvcCB0aGUgZXhpc3RpbmcgdGltZXIgYmVmb3JlIHJlcHJvZ3JhbW1pbmcKIAkgKiBpdCB0byB0aGUgbmV3IHZhbHVlcy4KQEAgLTI0MCwxNCArMzI4LDE0IEBACiAJLyoKIAkgKiBSZS1wcm9ncmFtIHRoZSB0aW1lciB0byB0aGUgbmV3IHZhbHVlIC4uLgogCSAqLwotCXRpbWVyZmRfc2V0dXAoY3R4LCBmbGFncywgJmt0bXIpOworCXJldCA9IHRpbWVyZmRfc2V0dXAoY3R4LCBmbGFncywgJmt0bXIpOwogCiAJc3Bpbl91bmxvY2tfaXJxKCZjdHgtPndxaC5sb2NrKTsKIAlmcHV0KGZpbGUpOwogCWlmIChvdG1yICYmIGNvcHlfdG9fdXNlcihvdG1yLCAma290bXIsIHNpemVvZihrb3RtcikpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIFNZU0NBTExfREVGSU5FMih0aW1lcmZkX2dldHRpbWUsIGludCwgdWZkLCBzdHJ1Y3QgaXRpbWVyc3BlYyBfX3VzZXIgKiwgb3RtcikKZGlmZiAtLWdpdCBhL2ZzL3Vmcy9pbm9kZS5jIGIvZnMvdWZzL2lub2RlLmMKaW5kZXggZTc2NTc0My4uYjRkNzkxYSAxMDA2NDQKLS0tIGEvZnMvdWZzL2lub2RlLmMKKysrIGIvZnMvdWZzL2lub2RlLmMKQEAgLTQwOSw3ICs0MDksNyBAQAogfQogCiAvKioKLSAqIHVmc19nZXRmcmFnX2Jsb2MoKSAtIGBnZXRfYmxvY2tfdCcgZnVuY3Rpb24sIGludGVyZmFjZSBiZXR3ZWVuIFVGUyBhbmQKKyAqIHVmc19nZXRmcmFnX2Jsb2NrKCkgLSBgZ2V0X2Jsb2NrX3QnIGZ1bmN0aW9uLCBpbnRlcmZhY2UgYmV0d2VlbiBVRlMgYW5kCiAgKiByZWFkcGFnZSwgd3JpdGVwYWdlIGFuZCBzbyBvbgogICovCiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuYyBiL2ZzL3hmcy94ZnNfaW5vZGUuYwppbmRleCBhMzc0ODBhLi5kMTFjZTYxIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlLmMKKysrIGIvZnMveGZzL3hmc19pbm9kZS5jCkBAIC0xNDcwLDcgKzE0NzAsNyBAQAogCSAqIGZpbGUgYnV0IHRoZSBsb2cgYnVmZmVycyBjb250YWluaW5nIHRoZSBmcmVlIGFuZCByZWFsbG9jYXRpb24KIAkgKiBkb24ndCwgdGhlbiB3ZSdkIGVuZCB1cCB3aXRoIGdhcmJhZ2UgaW4gdGhlIGJsb2NrcyBiZWluZyBmcmVlZC4KIAkgKiBBcyBsb25nIGFzIHdlIG1ha2UgdGhlIG5ld19zaXplIHBlcm1hbmVudCBiZWZvcmUgYWN0dWFsbHkKLQkgKiBmcmVlaW5nIGFueSBibG9ja3MgaXQgZG9lc24ndCBtYXR0ZXIgaWYgdGhleSBnZXQgd3JpdHR0ZW4gdG8uCisJICogZnJlZWluZyBhbnkgYmxvY2tzIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHRoZXkgZ2V0IHdyaXR0ZW4gdG8uCiAJICoKIAkgKiBUaGUgY2FsbGVycyBtdXN0IHNpZ25hbCBpbnRvIHVzIHdoZXRoZXIgb3Igbm90IHRoZSBzaXplCiAJICogc2V0dGluZyBoZXJlIG11c3QgYmUgc3luY2hyb25vdXMuICBUaGVyZSBhcmUgYSBmZXcgY2FzZXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMveG9yLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3hvci5oCmluZGV4IGFhYWI4NzUuLjYwMjhmYjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMveG9yLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy94b3IuaApAQCAtMTMsNyArMTMsNyBAQAogICogU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiBzdGF0aWMgdm9pZAogeG9yXzhyZWdzXzIodW5zaWduZWQgbG9uZyBieXRlcywgdW5zaWduZWQgbG9uZyAqcDEsIHVuc2lnbmVkIGxvbmcgKnAyKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdGg5a19wbGF0Zm9ybS5oIGIvaW5jbHVkZS9saW51eC9hdGg5a19wbGF0Zm9ybS5oCmluZGV4IGI4NDdmYzcuLjYwYTdjNDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXRoOWtfcGxhdGZvcm0uaAorKysgYi9pbmNsdWRlL2xpbnV4L2F0aDlrX3BsYXRmb3JtLmgKQEAgLTIzLDYgKzIzLDEzIEBACiAKIHN0cnVjdCBhdGg5a19wbGF0Zm9ybV9kYXRhIHsKIAl1MTYgZWVwcm9tX2RhdGFbQVRIOUtfUExBVF9FRVBfTUFYX1dPUkRTXTsKKwl1OCAqbWFjYWRkcjsKKworCWludCBsZWRfcGluOworCXUzMiBncGlvX21hc2s7CisJdTMyIGdwaW9fdmFsOworCisJYm9vbCBpc19jbGtfMjVtaHo7CiB9OwogCiAjZW5kaWYgLyogX0xJTlVYX0FUSDlLX1BMQVRGT1JNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmNtYS9iY21hLmggYi9pbmNsdWRlL2xpbnV4L2JjbWEvYmNtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NzYzZTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2JjbWEvYmNtYS5oCkBAIC0wLDAgKzEsMjI0IEBACisjaWZuZGVmIExJTlVYX0JDTUFfSF8KKyNkZWZpbmUgTElOVVhfQkNNQV9IXworCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9iY21hL2JjbWFfZHJpdmVyX2NoaXBjb21tb24uaD4KKyNpbmNsdWRlIDxsaW51eC9iY21hL2JjbWFfZHJpdmVyX3BjaS5oPgorCisjaW5jbHVkZSAiYmNtYV9yZWdzLmgiCisKK3N0cnVjdCBiY21hX2RldmljZTsKK3N0cnVjdCBiY21hX2J1czsKKworZW51bSBiY21hX2hvc3R0eXBlIHsKKwlCQ01BX0hPU1RUWVBFX05PTkUsCisJQkNNQV9IT1NUVFlQRV9QQ0ksCisJQkNNQV9IT1NUVFlQRV9TRElPLAorfTsKKworc3RydWN0IGJjbWFfY2hpcGluZm8geworCXUxNiBpZDsKKwl1OCByZXY7CisJdTggcGtnOworfTsKKworc3RydWN0IGJjbWFfaG9zdF9vcHMgeworCXU4ICgqcmVhZDgpKHN0cnVjdCBiY21hX2RldmljZSAqY29yZSwgdTE2IG9mZnNldCk7CisJdTE2ICgqcmVhZDE2KShzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmUsIHUxNiBvZmZzZXQpOworCXUzMiAoKnJlYWQzMikoc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlLCB1MTYgb2Zmc2V0KTsKKwl2b2lkICgqd3JpdGU4KShzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmUsIHUxNiBvZmZzZXQsIHU4IHZhbHVlKTsKKwl2b2lkICgqd3JpdGUxNikoc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlLCB1MTYgb2Zmc2V0LCB1MTYgdmFsdWUpOworCXZvaWQgKCp3cml0ZTMyKShzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmUsIHUxNiBvZmZzZXQsIHUzMiB2YWx1ZSk7CisJLyogQWdlbnQgb3BzICovCisJdTMyICgqYXJlYWQzMikoc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlLCB1MTYgb2Zmc2V0KTsKKwl2b2lkICgqYXdyaXRlMzIpKHN0cnVjdCBiY21hX2RldmljZSAqY29yZSwgdTE2IG9mZnNldCwgdTMyIHZhbHVlKTsKK307CisKKy8qIENvcmUgbWFudWZhY3R1cmVycyAqLworI2RlZmluZSBCQ01BX01BTlVGX0FSTQkJCTB4NDNCCisjZGVmaW5lIEJDTUFfTUFOVUZfTUlQUwkJCTB4NEE3CisjZGVmaW5lIEJDTUFfTUFOVUZfQkNNCQkJMHg0QkYKKworLyogQ29yZSBjbGFzcyB2YWx1ZXMuICovCisjZGVmaW5lIEJDTUFfQ0xfU0lNCQkJMHgwCisjZGVmaW5lIEJDTUFfQ0xfRVJPTQkJCTB4MQorI2RlZmluZSBCQ01BX0NMX0NPUkVTSUdIVAkJMHg5CisjZGVmaW5lIEJDTUFfQ0xfVkVSSUYJCQkweEIKKyNkZWZpbmUgQkNNQV9DTF9PUFRJTU8JCQkweEQKKyNkZWZpbmUgQkNNQV9DTF9HRU4JCQkweEUKKyNkZWZpbmUgQkNNQV9DTF9QUklNRUNFTEwJCTB4RgorCisvKiBDb3JlLUlEIHZhbHVlcy4gKi8KKyNkZWZpbmUgQkNNQV9DT1JFX09PQl9ST1VURVIJCTB4MzY3CS8qIE91dCBvZiBiYW5kICovCisjZGVmaW5lIEJDTUFfQ09SRV9JTlZBTElECQkweDcwMAorI2RlZmluZSBCQ01BX0NPUkVfQ0hJUENPTU1PTgkJMHg4MDAKKyNkZWZpbmUgQkNNQV9DT1JFX0lMSU5FMjAJCTB4ODAxCisjZGVmaW5lIEJDTUFfQ09SRV9TUkFNCQkJMHg4MDIKKyNkZWZpbmUgQkNNQV9DT1JFX1NEUkFNCQkJMHg4MDMKKyNkZWZpbmUgQkNNQV9DT1JFX1BDSQkJCTB4ODA0CisjZGVmaW5lIEJDTUFfQ09SRV9NSVBTCQkJMHg4MDUKKyNkZWZpbmUgQkNNQV9DT1JFX0VUSEVSTkVUCQkweDgwNgorI2RlZmluZSBCQ01BX0NPUkVfVjkwCQkJMHg4MDcKKyNkZWZpbmUgQkNNQV9DT1JFX1VTQjExX0hPU1RERVYJCTB4ODA4CisjZGVmaW5lIEJDTUFfQ09SRV9BRFNMCQkJMHg4MDkKKyNkZWZpbmUgQkNNQV9DT1JFX0lMSU5FMTAwCQkweDgwQQorI2RlZmluZSBCQ01BX0NPUkVfSVBTRUMJCQkweDgwQgorI2RlZmluZSBCQ01BX0NPUkVfVVRPUElBCQkweDgwQworI2RlZmluZSBCQ01BX0NPUkVfUENNQ0lBCQkweDgwRAorI2RlZmluZSBCQ01BX0NPUkVfSU5URVJOQUxfTUVNCQkweDgwRQorI2RlZmluZSBCQ01BX0NPUkVfTUVNQ19TRFJBTQkJMHg4MEYKKyNkZWZpbmUgQkNNQV9DT1JFX09GRE0JCQkweDgxMAorI2RlZmluZSBCQ01BX0NPUkVfRVhUSUYJCQkweDgxMQorI2RlZmluZSBCQ01BX0NPUkVfODAyMTEJCQkweDgxMgorI2RlZmluZSBCQ01BX0NPUkVfUEhZX0EJCQkweDgxMworI2RlZmluZSBCQ01BX0NPUkVfUEhZX0IJCQkweDgxNAorI2RlZmluZSBCQ01BX0NPUkVfUEhZX0cJCQkweDgxNQorI2RlZmluZSBCQ01BX0NPUkVfTUlQU18zMzAyCQkweDgxNgorI2RlZmluZSBCQ01BX0NPUkVfVVNCMTFfSE9TVAkJMHg4MTcKKyNkZWZpbmUgQkNNQV9DT1JFX1VTQjExX0RFVgkJMHg4MTgKKyNkZWZpbmUgQkNNQV9DT1JFX1VTQjIwX0hPU1QJCTB4ODE5CisjZGVmaW5lIEJDTUFfQ09SRV9VU0IyMF9ERVYJCTB4ODFBCisjZGVmaW5lIEJDTUFfQ09SRV9TRElPX0hPU1QJCTB4ODFCCisjZGVmaW5lIEJDTUFfQ09SRV9ST0JPU1dJVENICQkweDgxQworI2RlZmluZSBCQ01BX0NPUkVfUEFSQV9BVEEJCTB4ODFECisjZGVmaW5lIEJDTUFfQ09SRV9TQVRBX1hPUkRNQQkJMHg4MUUKKyNkZWZpbmUgQkNNQV9DT1JFX0VUSEVSTkVUX0dCSVQJCTB4ODFGCisjZGVmaW5lIEJDTUFfQ09SRV9QQ0lFCQkJMHg4MjAKKyNkZWZpbmUgQkNNQV9DT1JFX1BIWV9OCQkJMHg4MjEKKyNkZWZpbmUgQkNNQV9DT1JFX1NSQU1fQ1RMCQkweDgyMgorI2RlZmluZSBCQ01BX0NPUkVfTUlOSV9NQUNQSFkJCTB4ODIzCisjZGVmaW5lIEJDTUFfQ09SRV9BUk1fMTE3NgkJMHg4MjQKKyNkZWZpbmUgQkNNQV9DT1JFX0FSTV83VERNSQkJMHg4MjUKKyNkZWZpbmUgQkNNQV9DT1JFX1BIWV9MUAkJMHg4MjYKKyNkZWZpbmUgQkNNQV9DT1JFX1BNVQkJCTB4ODI3CisjZGVmaW5lIEJDTUFfQ09SRV9QSFlfU1NOCQkweDgyOAorI2RlZmluZSBCQ01BX0NPUkVfU0RJT19ERVYJCTB4ODI5CisjZGVmaW5lIEJDTUFfQ09SRV9BUk1fQ00zCQkweDgyQQorI2RlZmluZSBCQ01BX0NPUkVfUEhZX0hUCQkweDgyQgorI2RlZmluZSBCQ01BX0NPUkVfTUlQU183NEsJCTB4ODJDCisjZGVmaW5lIEJDTUFfQ09SRV9NQUNfR0JJVAkJMHg4MkQKKyNkZWZpbmUgQkNNQV9DT1JFX0REUjEyX01FTV9DVEwJCTB4ODJFCisjZGVmaW5lIEJDTUFfQ09SRV9QQ0lFX1JDCQkweDgyRgkvKiBQQ0llIFJvb3QgQ29tcGxleCAqLworI2RlZmluZSBCQ01BX0NPUkVfT0NQX09DUF9CUklER0UJMHg4MzAKKyNkZWZpbmUgQkNNQV9DT1JFX1NIQVJFRF9DT01NT04JCTB4ODMxCisjZGVmaW5lIEJDTUFfQ09SRV9PQ1BfQUhCX0JSSURHRQkweDgzMgorI2RlZmluZSBCQ01BX0NPUkVfU1BJX0hPU1QJCTB4ODMzCisjZGVmaW5lIEJDTUFfQ09SRV9JMlMJCQkweDgzNAorI2RlZmluZSBCQ01BX0NPUkVfU0RSX0REUjFfTUVNX0NUTAkweDgzNQkvKiBTRFIvRERSMSBtZW1vcnkgY29udHJvbGxlciBjb3JlICovCisjZGVmaW5lIEJDTUFfQ09SRV9TSElNCQkJMHg4MzcJLyogU0hJTSBjb21wb25lbnQgaW4gdWJ1cy82MzYyICovCisjZGVmaW5lIEJDTUFfQ09SRV9ERUZBVUxUCQkweEZGRgorCisjZGVmaW5lIEJDTUFfTUFYX05SX0NPUkVTCQkxNgorCitzdHJ1Y3QgYmNtYV9kZXZpY2UgeworCXN0cnVjdCBiY21hX2J1cyAqYnVzOworCXN0cnVjdCBiY21hX2RldmljZV9pZCBpZDsKKworCXN0cnVjdCBkZXZpY2UgZGV2OworCWJvb2wgZGV2X3JlZ2lzdGVyZWQ7CisKKwl1OCBjb3JlX2luZGV4OworCisJdTMyIGFkZHI7CisJdTMyIHdyYXA7CisKKwl2b2lkICpkcnZkYXRhOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqYmNtYV9nZXRfZHJ2ZGF0YShzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmUpCit7CisJcmV0dXJuIGNvcmUtPmRydmRhdGE7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgYmNtYV9zZXRfZHJ2ZGF0YShzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmUsIHZvaWQgKmRydmRhdGEpCit7CisJY29yZS0+ZHJ2ZGF0YSA9IGRydmRhdGE7Cit9CisKK3N0cnVjdCBiY21hX2RyaXZlciB7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBzdHJ1Y3QgYmNtYV9kZXZpY2VfaWQgKmlkX3RhYmxlOworCisJaW50ICgqcHJvYmUpKHN0cnVjdCBiY21hX2RldmljZSAqZGV2KTsKKwl2b2lkICgqcmVtb3ZlKShzdHJ1Y3QgYmNtYV9kZXZpY2UgKmRldik7CisJaW50ICgqc3VzcGVuZCkoc3RydWN0IGJjbWFfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CisJaW50ICgqcmVzdW1lKShzdHJ1Y3QgYmNtYV9kZXZpY2UgKmRldik7CisJdm9pZCAoKnNodXRkb3duKShzdHJ1Y3QgYmNtYV9kZXZpY2UgKmRldik7CisKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkcnY7Cit9OworZXh0ZXJuCitpbnQgX19iY21hX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgYmNtYV9kcml2ZXIgKmRydiwgc3RydWN0IG1vZHVsZSAqb3duZXIpOworc3RhdGljIGlubGluZSBpbnQgYmNtYV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGJjbWFfZHJpdmVyICpkcnYpCit7CisJcmV0dXJuIF9fYmNtYV9kcml2ZXJfcmVnaXN0ZXIoZHJ2LCBUSElTX01PRFVMRSk7Cit9CitleHRlcm4gdm9pZCBiY21hX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBiY21hX2RyaXZlciAqZHJ2KTsKKworc3RydWN0IGJjbWFfYnVzIHsKKwkvKiBUaGUgTU1JTyBhcmVhLiAqLworCXZvaWQgX19pb21lbSAqbW1pbzsKKworCWNvbnN0IHN0cnVjdCBiY21hX2hvc3Rfb3BzICpvcHM7CisKKwllbnVtIGJjbWFfaG9zdHR5cGUgaG9zdHR5cGU7CisJdW5pb24geworCQkvKiBQb2ludGVyIHRvIHRoZSBQQ0kgYnVzIChvbmx5IGZvciBCQ01BX0hPU1RUWVBFX1BDSSkgKi8KKwkJc3RydWN0IHBjaV9kZXYgKmhvc3RfcGNpOworCQkvKiBQb2ludGVyIHRvIHRoZSBTRElPIGRldmljZSAob25seSBmb3IgQkNNQV9IT1NUVFlQRV9TRElPKSAqLworCQlzdHJ1Y3Qgc2Rpb19mdW5jICpob3N0X3NkaW87CisJfTsKKworCXN0cnVjdCBiY21hX2NoaXBpbmZvIGNoaXBpbmZvOworCisJc3RydWN0IGJjbWFfZGV2aWNlICptYXBwZWRfY29yZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGNvcmVzOworCXU4IG5yX2NvcmVzOworCisJc3RydWN0IGJjbWFfZHJ2X2NjIGRydl9jYzsKKwlzdHJ1Y3QgYmNtYV9kcnZfcGNpIGRydl9wY2k7Cit9OworCitleHRlcm4gaW5saW5lIHUzMiBiY21hX3JlYWQ4KHN0cnVjdCBiY21hX2RldmljZSAqY29yZSwgdTE2IG9mZnNldCkKK3sKKwlyZXR1cm4gY29yZS0+YnVzLT5vcHMtPnJlYWQ4KGNvcmUsIG9mZnNldCk7Cit9CitleHRlcm4gaW5saW5lIHUzMiBiY21hX3JlYWQxNihzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmUsIHUxNiBvZmZzZXQpCit7CisJcmV0dXJuIGNvcmUtPmJ1cy0+b3BzLT5yZWFkMTYoY29yZSwgb2Zmc2V0KTsKK30KK2V4dGVybiBpbmxpbmUgdTMyIGJjbWFfcmVhZDMyKHN0cnVjdCBiY21hX2RldmljZSAqY29yZSwgdTE2IG9mZnNldCkKK3sKKwlyZXR1cm4gY29yZS0+YnVzLT5vcHMtPnJlYWQzMihjb3JlLCBvZmZzZXQpOworfQorZXh0ZXJuIGlubGluZQordm9pZCBiY21hX3dyaXRlOChzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmUsIHUxNiBvZmZzZXQsIHUzMiB2YWx1ZSkKK3sKKwljb3JlLT5idXMtPm9wcy0+d3JpdGU4KGNvcmUsIG9mZnNldCwgdmFsdWUpOworfQorZXh0ZXJuIGlubGluZQordm9pZCBiY21hX3dyaXRlMTYoc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlLCB1MTYgb2Zmc2V0LCB1MzIgdmFsdWUpCit7CisJY29yZS0+YnVzLT5vcHMtPndyaXRlMTYoY29yZSwgb2Zmc2V0LCB2YWx1ZSk7Cit9CitleHRlcm4gaW5saW5lCit2b2lkIGJjbWFfd3JpdGUzMihzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmUsIHUxNiBvZmZzZXQsIHUzMiB2YWx1ZSkKK3sKKwljb3JlLT5idXMtPm9wcy0+d3JpdGUzMihjb3JlLCBvZmZzZXQsIHZhbHVlKTsKK30KK2V4dGVybiBpbmxpbmUgdTMyIGJjbWFfYXJlYWQzMihzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmUsIHUxNiBvZmZzZXQpCit7CisJcmV0dXJuIGNvcmUtPmJ1cy0+b3BzLT5hcmVhZDMyKGNvcmUsIG9mZnNldCk7Cit9CitleHRlcm4gaW5saW5lCit2b2lkIGJjbWFfYXdyaXRlMzIoc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlLCB1MTYgb2Zmc2V0LCB1MzIgdmFsdWUpCit7CisJY29yZS0+YnVzLT5vcHMtPmF3cml0ZTMyKGNvcmUsIG9mZnNldCwgdmFsdWUpOworfQorCitleHRlcm4gYm9vbCBiY21hX2NvcmVfaXNfZW5hYmxlZChzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmUpOworZXh0ZXJuIGludCBiY21hX2NvcmVfZW5hYmxlKHN0cnVjdCBiY21hX2RldmljZSAqY29yZSwgdTMyIGZsYWdzKTsKKworI2VuZGlmIC8qIExJTlVYX0JDTUFfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmNtYS9iY21hX2RyaXZlcl9jaGlwY29tbW9uLmggYi9pbmNsdWRlL2xpbnV4L2JjbWEvYmNtYV9kcml2ZXJfY2hpcGNvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4M2MzYjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2JjbWEvYmNtYV9kcml2ZXJfY2hpcGNvbW1vbi5oCkBAIC0wLDAgKzEsMzAyIEBACisjaWZuZGVmIExJTlVYX0JDTUFfRFJJVkVSX0NDX0hfCisjZGVmaW5lIExJTlVYX0JDTUFfRFJJVkVSX0NDX0hfCisKKy8qKiBDaGlwQ29tbW9uIGNvcmUgcmVnaXN0ZXJzLiAqKi8KKyNkZWZpbmUgQkNNQV9DQ19JRAkJCTB4MDAwMAorI2RlZmluZSAgQkNNQV9DQ19JRF9JRAkJCTB4MDAwMEZGRkYKKyNkZWZpbmUgIEJDTUFfQ0NfSURfSURfU0hJRlQJCTAKKyNkZWZpbmUgIEJDTUFfQ0NfSURfUkVWCQkJMHgwMDBGMDAwMAorI2RlZmluZSAgQkNNQV9DQ19JRF9SRVZfU0hJRlQJCTE2CisjZGVmaW5lICBCQ01BX0NDX0lEX1BLRwkJCTB4MDBGMDAwMDAKKyNkZWZpbmUgIEJDTUFfQ0NfSURfUEtHX1NISUZUCQkyMAorI2RlZmluZSAgQkNNQV9DQ19JRF9OUkNPUkVTCQkweDBGMDAwMDAwCisjZGVmaW5lICBCQ01BX0NDX0lEX05SQ09SRVNfU0hJRlQJMjQKKyNkZWZpbmUgIEJDTUFfQ0NfSURfVFlQRQkJMHhGMDAwMDAwMAorI2RlZmluZSAgQkNNQV9DQ19JRF9UWVBFX1NISUZUCQkyOAorI2RlZmluZSBCQ01BX0NDX0NBUAkJCTB4MDAwNAkJLyogQ2FwYWJpbGl0aWVzICovCisjZGVmaW5lICBCQ01BX0NDX0NBUF9OUlVBUlQJCTB4MDAwMDAwMDMJLyogIyBvZiBVQVJUcyAqLworI2RlZmluZSAgQkNNQV9DQ19DQVBfTUlQU0VCCQkweDAwMDAwMDA0CS8qIE1JUFMgaW4gQmlnRW5kaWFuIE1vZGUgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfQ0FQX1VBUlRDTEsJCTB4MDAwMDAwMTgJLyogVUFSVCBjbG9jayBzZWxlY3QgKi8KKyNkZWZpbmUgICBCQ01BX0NDX0NBUF9VQVJUQ0xLX0lOVAkweDAwMDAwMDA4CS8qIFVBUlRzIGFyZSBkcml2ZW4gYnkgaW50ZXJuYWwgZGl2aWRlZCBjbG9jayAqLworI2RlZmluZSAgQkNNQV9DQ19DQVBfVUFSVEdQSU8JCTB4MDAwMDAwMjAJLyogVUFSVHMgb24gR1BJTyAxNS0xMiAqLworI2RlZmluZSAgQkNNQV9DQ19DQVBfRVhUQlVTCQkweDAwMDAwMEMwCS8qIEV4dGVybmFsIGJ1c2VzIHByZXNlbnQgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfQ0FQX0ZMQVNIVAkJMHgwMDAwMDcwMAkvKiBGbGFzaCBUeXBlICovCisjZGVmaW5lICAgQkNNQV9DQ19GTEFTSFRfTk9ORQkJMHgwMDAwMDAwMAkvKiBObyBmbGFzaCAqLworI2RlZmluZSAgIEJDTUFfQ0NfRkxBU0hUX1NUU0VSCQkweDAwMDAwMTAwCS8qIFNUIHNlcmlhbCBmbGFzaCAqLworI2RlZmluZSAgIEJDTUFfQ0NfRkxBU0hUX0FUU0VSCQkweDAwMDAwMjAwCS8qIEF0bWVsIHNlcmlhbCBmbGFzaCAqLworI2RlZmluZQkgIEJDTUFfQ0NfRkxBU0hUX1BBUkEJCTB4MDAwMDA3MDAJLyogUGFyYWxsZWwgZmxhc2ggKi8KKyNkZWZpbmUgIEJDTUFfQ0NfQ0FQX1BMTFQJCTB4MDAwMzgwMDAJLyogUExMIFR5cGUgKi8KKyNkZWZpbmUgICBCQ01BX1BMTFRZUEVfTk9ORQkJMHgwMDAwMDAwMAorI2RlZmluZSAgIEJDTUFfUExMVFlQRV8xCQkweDAwMDEwMDAwCS8qIDQ4TWh6IGJhc2UsIDMgZGl2aWRlcnMgKi8KKyNkZWZpbmUgICBCQ01BX1BMTFRZUEVfMgkJMHgwMDAyMDAwMAkvKiA0OE1oeiwgNCBkaXZpZGVycyAqLworI2RlZmluZSAgIEJDTUFfUExMVFlQRV8zCQkweDAwMDMwMDAwCS8qIDI1TWh6LCAyIGRpdmlkZXJzICovCisjZGVmaW5lICAgQkNNQV9QTExUWVBFXzQJCTB4MDAwMDgwMDAJLyogNDhNaHosIDQgZGl2aWRlcnMgKi8KKyNkZWZpbmUgICBCQ01BX1BMTFRZUEVfNQkJMHgwMDAxODAwMAkvKiAyNU1oeiwgNCBkaXZpZGVycyAqLworI2RlZmluZSAgIEJDTUFfUExMVFlQRV82CQkweDAwMDI4MDAwCS8qIDEwMC8yMDAgb3IgMTIwLzI0MCBvbmx5ICovCisjZGVmaW5lICAgQkNNQV9QTExUWVBFXzcJCTB4MDAwMzgwMDAJLyogMjVNaHosIDQgZGl2aWRlcnMgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfQ0FQX1BDVEwJCTB4MDAwNDAwMDAJLyogUG93ZXIgQ29udHJvbCAqLworI2RlZmluZSAgQkNNQV9DQ19DQVBfT1RQUwkJMHgwMDM4MDAwMAkvKiBPVFAgc2l6ZSAqLworI2RlZmluZSAgQkNNQV9DQ19DQVBfT1RQU19TSElGVAkJMTkKKyNkZWZpbmUgIEJDTUFfQ0NfQ0FQX09UUFNfQkFTRQkJNQorI2RlZmluZSAgQkNNQV9DQ19DQVBfSlRBR00JCTB4MDA0MDAwMDAJLyogSlRBRyBtYXN0ZXIgcHJlc2VudCAqLworI2RlZmluZSAgQkNNQV9DQ19DQVBfQlJPTQkJMHgwMDgwMDAwMAkvKiBJbnRlcm5hbCBib290IFJPTSBhY3RpdmUgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfQ0FQXzY0QklUCQkweDA4MDAwMDAwCS8qIDY0LWJpdCBCYWNrcGxhbmUgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfQ0FQX1BNVQkJMHgxMDAwMDAwMAkvKiBQTVUgYXZhaWxhYmxlIChyZXYgPj0gMjApICovCisjZGVmaW5lICBCQ01BX0NDX0NBUF9FQ0kJCTB4MjAwMDAwMDAJLyogRUNJIGF2YWlsYWJsZSAocmV2ID49IDIwKSAqLworI2RlZmluZSAgQkNNQV9DQ19DQVBfU1BST00JCTB4NDAwMDAwMDAJLyogU1BST00gcHJlc2VudCAqLworI2RlZmluZSBCQ01BX0NDX0NPUkVDVEwJCQkweDAwMDgKKyNkZWZpbmUgIEJDTUFfQ0NfQ09SRUNUTF9VQVJUQ0xLMAkweDAwMDAwMDAxCS8qIERyaXZlIFVBUlQgd2l0aCBpbnRlcm5hbCBjbG9jayAqLworI2RlZmluZQkgQkNNQV9DQ19DT1JFQ1RMX1NFCQkweDAwMDAwMDAyCS8qIHN5bmMgY2xrIG91dCBlbmFibGUgKGNvcmVyZXYgPj0gMykgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfQ09SRUNUTF9VQVJUQ0xLRU4JMHgwMDAwMDAwOAkvKiBVQVJUIGNsb2NrIGVuYWJsZSAocmV2ID49IDIxKSAqLworI2RlZmluZSBCQ01BX0NDX0JJU1QJCQkweDAwMEMKKyNkZWZpbmUgQkNNQV9DQ19PVFBTCQkJMHgwMDEwCQkvKiBPVFAgc3RhdHVzICovCisjZGVmaW5lCSBCQ01BX0NDX09UUFNfUFJPR0ZBSUwJCTB4ODAwMDAwMDAKKyNkZWZpbmUJIEJDTUFfQ0NfT1RQU19QUk9URUNUCQkweDAwMDAwMDA3CisjZGVmaW5lCSBCQ01BX0NDX09UUFNfSFdfUFJPVEVDVAkweDAwMDAwMDAxCisjZGVmaW5lCSBCQ01BX0NDX09UUFNfU1dfUFJPVEVDVAkweDAwMDAwMDAyCisjZGVmaW5lCSBCQ01BX0NDX09UUFNfQ0lEX1BST1RFQ1QJMHgwMDAwMDAwNAorI2RlZmluZSBCQ01BX0NDX09UUEMJCQkweDAwMTQJCS8qIE9UUCBjb250cm9sICovCisjZGVmaW5lCSBCQ01BX0NDX09UUENfUkVDV0FJVAkJMHhGRjAwMDAwMAorI2RlZmluZQkgQkNNQV9DQ19PVFBDX1BST0dXQUlUCQkweDAwRkZGRjAwCisjZGVmaW5lCSBCQ01BX0NDX09UUENfUFJXX1NISUZUCQk4CisjZGVmaW5lCSBCQ01BX0NDX09UUENfTUFYRkFJTAkJMHgwMDAwMDAzOAorI2RlZmluZQkgQkNNQV9DQ19PVFBDX1ZTRUwJCTB4MDAwMDAwMDYKKyNkZWZpbmUJIEJDTUFfQ0NfT1RQQ19TRUxWTAkJMHgwMDAwMDAwMQorI2RlZmluZSBCQ01BX0NDX09UUFAJCQkweDAwMTgJCS8qIE9UUCBwcm9nICovCisjZGVmaW5lCSBCQ01BX0NDX09UUFBfQ09MCQkweDAwMDAwMEZGCisjZGVmaW5lCSBCQ01BX0NDX09UUFBfUk9XCQkweDAwMDBGRjAwCisjZGVmaW5lCSBCQ01BX0NDX09UUFBfUk9XX1NISUZUCQk4CisjZGVmaW5lCSBCQ01BX0NDX09UUFBfUkVBREVSUgkJMHgxMDAwMDAwMAorI2RlZmluZQkgQkNNQV9DQ19PVFBQX1ZBTFVFCQkweDIwMDAwMDAwCisjZGVmaW5lCSBCQ01BX0NDX09UUFBfUkVBRAkJMHg0MDAwMDAwMAorI2RlZmluZQkgQkNNQV9DQ19PVFBQX1NUQVJUCQkweDgwMDAwMDAwCisjZGVmaW5lCSBCQ01BX0NDX09UUFBfQlVTWQkJMHg4MDAwMDAwMAorI2RlZmluZSBCQ01BX0NDX0lSUVNUQVQJCQkweDAwMjAKKyNkZWZpbmUgQkNNQV9DQ19JUlFNQVNLCQkJMHgwMDI0CisjZGVmaW5lCSBCQ01BX0NDX0lSUV9HUElPCQkweDAwMDAwMDAxCS8qIGdwaW8gaW50ciAqLworI2RlZmluZQkgQkNNQV9DQ19JUlFfRVhUCQkweDAwMDAwMDAyCS8qIHJvOiBleHQgaW50ciBwaW4gKGNvcmVyZXYgPj0gMykgKi8KKyNkZWZpbmUJIEJDTUFfQ0NfSVJRX1dEUkVTRVQJCTB4ODAwMDAwMDAJLyogd2F0Y2hkb2cgcmVzZXQgb2NjdXJyZWQgKi8KKyNkZWZpbmUgQkNNQV9DQ19DSElQQ1RMCQkJMHgwMDI4CQkvKiBSZXYgPj0gMTEgb25seSAqLworI2RlZmluZSBCQ01BX0NDX0NISVBTVEFUCQkweDAwMkMJCS8qIFJldiA+PSAxMSBvbmx5ICovCisjZGVmaW5lIEJDTUFfQ0NfSkNNRAkJCTB4MDAzMAkJLyogUmV2ID49IDEwIG9ubHkgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfSkNNRF9TVEFSVAkJMHg4MDAwMDAwMAorI2RlZmluZSAgQkNNQV9DQ19KQ01EX0JVU1kJCTB4ODAwMDAwMDAKKyNkZWZpbmUgIEJDTUFfQ0NfSkNNRF9QQVVTRQkJMHg0MDAwMDAwMAorI2RlZmluZSAgQkNNQV9DQ19KQ01EMF9BQ0NfTUFTSwkJMHgwMDAwRjAwMAorI2RlZmluZSAgQkNNQV9DQ19KQ01EMF9BQ0NfSVJEUgkJMHgwMDAwMDAwMAorI2RlZmluZSAgQkNNQV9DQ19KQ01EMF9BQ0NfRFIJCTB4MDAwMDEwMDAKKyNkZWZpbmUgIEJDTUFfQ0NfSkNNRDBfQUNDX0lSCQkweDAwMDAyMDAwCisjZGVmaW5lICBCQ01BX0NDX0pDTUQwX0FDQ19SRVNFVAkweDAwMDAzMDAwCisjZGVmaW5lICBCQ01BX0NDX0pDTUQwX0FDQ19JUlBEUgkweDAwMDA0MDAwCisjZGVmaW5lICBCQ01BX0NDX0pDTUQwX0FDQ19QRFIJCTB4MDAwMDUwMDAKKyNkZWZpbmUgIEJDTUFfQ0NfSkNNRDBfSVJXX01BU0sJCTB4MDAwMDBGMDAKKyNkZWZpbmUgIEJDTUFfQ0NfSkNNRF9BQ0NfTUFTSwkJMHgwMDBGMDAwMAkvKiBDaGFuZ2VzIGZvciBjb3JlcmV2IDExICovCisjZGVmaW5lICBCQ01BX0NDX0pDTURfQUNDX0lSRFIJCTB4MDAwMDAwMDAKKyNkZWZpbmUgIEJDTUFfQ0NfSkNNRF9BQ0NfRFIJCTB4MDAwMTAwMDAKKyNkZWZpbmUgIEJDTUFfQ0NfSkNNRF9BQ0NfSVIJCTB4MDAwMjAwMDAKKyNkZWZpbmUgIEJDTUFfQ0NfSkNNRF9BQ0NfUkVTRVQJCTB4MDAwMzAwMDAKKyNkZWZpbmUgIEJDTUFfQ0NfSkNNRF9BQ0NfSVJQRFIJCTB4MDAwNDAwMDAKKyNkZWZpbmUgIEJDTUFfQ0NfSkNNRF9BQ0NfUERSCQkweDAwMDUwMDAwCisjZGVmaW5lICBCQ01BX0NDX0pDTURfSVJXX01BU0sJCTB4MDAwMDFGMDAKKyNkZWZpbmUgIEJDTUFfQ0NfSkNNRF9JUldfU0hJRlQJCTgKKyNkZWZpbmUgIEJDTUFfQ0NfSkNNRF9EUldfTUFTSwkJMHgwMDAwMDAzRgorI2RlZmluZSBCQ01BX0NDX0pJUgkJCTB4MDAzNAkJLyogUmV2ID49IDEwIG9ubHkgKi8KKyNkZWZpbmUgQkNNQV9DQ19KRFIJCQkweDAwMzgJCS8qIFJldiA+PSAxMCBvbmx5ICovCisjZGVmaW5lIEJDTUFfQ0NfSkNUTAkJCTB4MDAzQwkJLyogUmV2ID49IDEwIG9ubHkgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfSkNUTF9GT1JDRV9DTEsJCTQJCS8qIEZvcmNlIGNsb2NrICovCisjZGVmaW5lICBCQ01BX0NDX0pDVExfRVhUX0VOCQkyCQkvKiBFbmFibGUgZXh0ZXJuYWwgdGFyZ2V0cyAqLworI2RlZmluZSAgQkNNQV9DQ19KQ1RMX0VOCQkxCQkvKiBFbmFibGUgSnRhZyBtYXN0ZXIgKi8KKyNkZWZpbmUgQkNNQV9DQ19GTEFTSENUTAkJMHgwMDQwCisjZGVmaW5lICBCQ01BX0NDX0ZMQVNIQ1RMX1NUQVJUCQkweDgwMDAwMDAwCisjZGVmaW5lICBCQ01BX0NDX0ZMQVNIQ1RMX0JVU1kJCUJDTUFfQ0NfRkxBU0hDVExfU1RBUlQKKyNkZWZpbmUgQkNNQV9DQ19GTEFTSEFERFIJCTB4MDA0NAorI2RlZmluZSBCQ01BX0NDX0ZMQVNIREFUQQkJMHgwMDQ4CisjZGVmaW5lIEJDTUFfQ0NfQkNBU1RfQUREUgkJMHgwMDUwCisjZGVmaW5lIEJDTUFfQ0NfQkNBU1RfREFUQQkJMHgwMDU0CisjZGVmaW5lIEJDTUFfQ0NfR1BJT1BVTExVUAkJMHgwMDU4CQkvKiBSZXYgPj0gMjAgb25seSAqLworI2RlZmluZSBCQ01BX0NDX0dQSU9QVUxMRE9XTgkJMHgwMDVDCQkvKiBSZXYgPj0gMjAgb25seSAqLworI2RlZmluZSBCQ01BX0NDX0dQSU9JTgkJCTB4MDA2MAorI2RlZmluZSBCQ01BX0NDX0dQSU9PVVQJCQkweDAwNjQKKyNkZWZpbmUgQkNNQV9DQ19HUElPT1VURU4JCTB4MDA2OAorI2RlZmluZSBCQ01BX0NDX0dQSU9DVEwJCQkweDAwNkMKKyNkZWZpbmUgQkNNQV9DQ19HUElPUE9MCQkJMHgwMDcwCisjZGVmaW5lIEJDTUFfQ0NfR1BJT0lSUQkJCTB4MDA3NAorI2RlZmluZSBCQ01BX0NDX1dBVENIRE9HCQkweDAwODAKKyNkZWZpbmUgQkNNQV9DQ19HUElPVElNRVIJCTB4MDA4OAkJLyogTEVEIHBvd2Vyc2F2ZSAoY29yZXJldiA+PSAxNikgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfR1BJT1RJTUVSX09GRlRJTUUJMHgwMDAwRkZGRgorI2RlZmluZSAgQkNNQV9DQ19HUElPVElNRVJfT0ZGVElNRV9TSElGVAkwCisjZGVmaW5lICBCQ01BX0NDX0dQSU9USU1FUl9PTlRJTUUJMHhGRkZGMDAwMAorI2RlZmluZSAgQkNNQV9DQ19HUElPVElNRVJfT05USU1FX1NISUZUCTE2CisjZGVmaW5lIEJDTUFfQ0NfR1BJT1RPVVRNCQkweDAwOEMJCS8qIExFRCBwb3dlcnNhdmUgKGNvcmVyZXYgPj0gMTYpICovCisjZGVmaW5lIEJDTUFfQ0NfQ0xPQ0tfTgkJCTB4MDA5MAorI2RlZmluZSBCQ01BX0NDX0NMT0NLX1NCCQkweDAwOTQKKyNkZWZpbmUgQkNNQV9DQ19DTE9DS19QQ0kJCTB4MDA5OAorI2RlZmluZSBCQ01BX0NDX0NMT0NLX00yCQkweDAwOUMKKyNkZWZpbmUgQkNNQV9DQ19DTE9DS19NSVBTCQkweDAwQTAKKyNkZWZpbmUgQkNNQV9DQ19DTEtESVYJCQkweDAwQTQJCS8qIFJldiA+PSAzIG9ubHkgKi8KKyNkZWZpbmUJIEJDTUFfQ0NfQ0xLRElWX1NGTEFTSAkJMHgwRjAwMDAwMAorI2RlZmluZQkgQkNNQV9DQ19DTEtESVZfU0ZMQVNIX1NISUZUCTI0CisjZGVmaW5lCSBCQ01BX0NDX0NMS0RJVl9PVFAJCTB4MDAwRjAwMDAKKyNkZWZpbmUJIEJDTUFfQ0NfQ0xLRElWX09UUF9TSElGVAkxNgorI2RlZmluZQkgQkNNQV9DQ19DTEtESVZfSlRBRwkJMHgwMDAwMEYwMAorI2RlZmluZQkgQkNNQV9DQ19DTEtESVZfSlRBR19TSElGVAk4CisjZGVmaW5lCSBCQ01BX0NDX0NMS0RJVl9VQVJUCQkweDAwMDAwMEZGCisjZGVmaW5lIEJDTUFfQ0NfQ0FQX0VYVAkJCTB4MDBBQwkJLyogQ2FwYWJpbGl0aWVzICovCisjZGVmaW5lIEJDTUFfQ0NfUExMT05ERUxBWQkJMHgwMEIwCQkvKiBSZXYgPj0gNCBvbmx5ICovCisjZGVmaW5lIEJDTUFfQ0NfRlJFRlNFTERFTEFZCQkweDAwQjQJCS8qIFJldiA+PSA0IG9ubHkgKi8KKyNkZWZpbmUgQkNNQV9DQ19TTE9XQ0xLQ1RMCQkweDAwQjgJCS8qIDYgPD0gUmV2IDw9IDkgb25seSAqLworI2RlZmluZSAgQkNNQV9DQ19TTE9XQ0xLQ1RMX1NSQwkJMHgwMDAwMDAwNwkvKiBzbG93IGNsb2NrIHNvdXJjZSBtYXNrICovCisjZGVmaW5lCSAgQkNNQV9DQ19TTE9XQ0xLQ1RMX1NSQ19MUE8JMHgwMDAwMDAwMAkvKiBzb3VyY2Ugb2Ygc2xvdyBjbG9jayBpcyBMUE8gKi8KKyNkZWZpbmUgICBCQ01BX0NDX1NMT1dDTEtDVExfU1JDX1hUQUwJMHgwMDAwMDAwMQkvKiBzb3VyY2Ugb2Ygc2xvdyBjbG9jayBpcyBjcnlzdGFsICovCisjZGVmaW5lCSAgQkNNQV9DQ19TTE9FQ0xLQ1RMX1NSQ19QQ0kJMHgwMDAwMDAwMgkvKiBzb3VyY2Ugb2Ygc2xvdyBjbG9jayBpcyBQQ0kgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfU0xPV0NMS0NUTF9MUE9GUkVRCTB4MDAwMDAyMDAJLyogTFBPRnJlcVNlbCwgMTogMTYwS2h6LCAwOiAzMktIeiAqLworI2RlZmluZSAgQkNNQV9DQ19TTE9XQ0xLQ1RMX0xQT1BECTB4MDAwMDA0MDAJLyogTFBPUG93ZXJEb3duLCAxOiBMUE8gaXMgZGlzYWJsZWQsIDA6IExQTyBpcyBlbmFibGVkICovCisjZGVmaW5lICBCQ01BX0NDX1NMT1dDTEtDVExfRlNMT1cJMHgwMDAwMDgwMAkvKiBGb3JjZVNsb3dDbGssIDE6IHNiL2NvcmVzIHJ1bm5pbmcgb24gc2xvdyBjbG9jaywgMDogcG93ZXIgbG9naWMgY29udHJvbCAqLworI2RlZmluZSAgQkNNQV9DQ19TTE9XQ0xLQ1RMX0lQTEwJMHgwMDAwMTAwMAkvKiBJZ25vcmVQbGxPZmZSZXEsIDEvMDogcG93ZXIgbG9naWMgaWdub3Jlcy9ob25vcnMgUExMIGNsb2NrIGRpc2FibGUgcmVxdWVzdHMgZnJvbSBjb3JlICovCisjZGVmaW5lICBCQ01BX0NDX1NMT1dDTEtDVExfRU5YVEFMCTB4MDAwMDIwMDAJLyogWHRhbENvbnRyb2xFbiwgMS8wOiBwb3dlciBsb2dpYyBkb2VzL2RvZXNuJ3QgZGlzYWJsZSBjcnlzdGFsIHdoZW4gYXBwcm9wcmlhdGUgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfU0xPV0NMS0NUTF9YVEFMUFUJMHgwMDAwNDAwMAkvKiBYdGFsUFUgKFJPKSwgMS8wOiBjcnlzdGFsIHJ1bm5pbmcvZGlzYWJsZWQgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfU0xPV0NMS0NUTF9DTEtESVYJMHhGRkZGMDAwMAkvKiBDbG9ja0RpdmlkZXIgKFNsb3dDbGsgPSAxLyg0K2Rpdmlzb3IpKSAqLworI2RlZmluZSAgQkNNQV9DQ19TTE9XQ0xLQ1RMX0NMS0RJVl9TSElGVAkxNgorI2RlZmluZSBCQ01BX0NDX1NZU0NMS0NUTAkJMHgwMEMwCQkvKiBSZXYgPj0gMyBvbmx5ICovCisjZGVmaW5lCSBCQ01BX0NDX1NZU0NMS0NUTF9JRExQRU4JMHgwMDAwMDAwMQkvKiBJTFBlbjogRW5hYmxlIElkbGUgTG93IFBvd2VyICovCisjZGVmaW5lCSBCQ01BX0NDX1NZU0NMS0NUTF9BTFBFTgkweDAwMDAwMDAyCS8qIEFMUGVuOiBFbmFibGUgQWN0aXZlIExvdyBQb3dlciAqLworI2RlZmluZQkgQkNNQV9DQ19TWVNDTEtDVExfUExMRU4JMHgwMDAwMDAwNAkvKiBGb3JjZVBMTE9uICovCisjZGVmaW5lCSBCQ01BX0NDX1NZU0NMS0NUTF9GT1JDRUFMUAkweDAwMDAwMDA4CS8qIEZvcmNlIEFMUCAob3IgSFQgaWYgQUxQZW4gaXMgbm90IHNldCAqLworI2RlZmluZQkgQkNNQV9DQ19TWVNDTEtDVExfRk9SQ0VIVAkweDAwMDAwMDEwCS8qIEZvcmNlIEhUICovCisjZGVmaW5lICBCQ01BX0NDX1NZU0NMS0NUTF9DTEtESVYJMHhGRkZGMDAwMAkvKiBDbGtEaXYgIChJTFAgPSAxLyg0K2Rpdmlzb3IpKSAqLworI2RlZmluZSAgQkNNQV9DQ19TWVNDTEtDVExfQ0xLRElWX1NISUZUCTE2CisjZGVmaW5lIEJDTUFfQ0NfQ0xLU1RTVFIJCTB4MDBDNAkJLyogUmV2ID49IDMgb25seSAqLworI2RlZmluZSBCQ01BX0NDX0VST00JCQkweDAwRkMKKyNkZWZpbmUgQkNNQV9DQ19QQ01DSUFfQ0ZHCQkweDAxMDAKKyNkZWZpbmUgQkNNQV9DQ19QQ01DSUFfTUVNV0FJVAkJMHgwMTA0CisjZGVmaW5lIEJDTUFfQ0NfUENNQ0lBX0FUVFJXQUlUCQkweDAxMDgKKyNkZWZpbmUgQkNNQV9DQ19QQ01DSUFfSU9XQUlUCQkweDAxMEMKKyNkZWZpbmUgQkNNQV9DQ19JREVfQ0ZHCQkJMHgwMTEwCisjZGVmaW5lIEJDTUFfQ0NfSURFX01FTVdBSVQJCTB4MDExNAorI2RlZmluZSBCQ01BX0NDX0lERV9BVFRSV0FJVAkJMHgwMTE4CisjZGVmaW5lIEJDTUFfQ0NfSURFX0lPV0FJVAkJMHgwMTFDCisjZGVmaW5lIEJDTUFfQ0NfUFJPR19DRkcJCTB4MDEyMAorI2RlZmluZSBCQ01BX0NDX1BST0dfV0FJVENOVAkJMHgwMTI0CisjZGVmaW5lIEJDTUFfQ0NfRkxBU0hfQ0ZHCQkweDAxMjgKKyNkZWZpbmUgQkNNQV9DQ19GTEFTSF9XQUlUQ05UCQkweDAxMkMKKyNkZWZpbmUgQkNNQV9DQ19DTEtDVExTVAkJMHgwMUUwIC8qIENsb2NrIGNvbnRyb2wgYW5kIHN0YXR1cyAocmV2ID49IDIwKSAqLworI2RlZmluZSAgQkNNQV9DQ19DTEtDVExTVF9GT1JDRUFMUAkweDAwMDAwMDAxIC8qIEZvcmNlIEFMUCByZXF1ZXN0ICovCisjZGVmaW5lICBCQ01BX0NDX0NMS0NUTFNUX0ZPUkNFSFQJMHgwMDAwMDAwMiAvKiBGb3JjZSBIVCByZXF1ZXN0ICovCisjZGVmaW5lICBCQ01BX0NDX0NMS0NUTFNUX0ZPUkNFSUxQCTB4MDAwMDAwMDQgLyogRm9yY2UgSUxQIHJlcXVlc3QgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfQ0xLQ1RMU1RfSEFWRUFMUFJFUQkweDAwMDAwMDA4IC8qIEFMUCBhdmFpbGFibGUgcmVxdWVzdCAqLworI2RlZmluZSAgQkNNQV9DQ19DTEtDVExTVF9IQVZFSFRSRVEJMHgwMDAwMDAxMCAvKiBIVCBhdmFpbGFibGUgcmVxdWVzdCAqLworI2RlZmluZSAgQkNNQV9DQ19DTEtDVExTVF9IV0NST0ZGCTB4MDAwMDAwMjAgLyogRm9yY2UgSFcgY2xvY2sgcmVxdWVzdCBvZmYgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfQ0xLQ1RMU1RfSEFWRUhUCTB4MDAwMTAwMDAgLyogSFQgYXZhaWxhYmxlICovCisjZGVmaW5lICBCQ01BX0NDX0NMS0NUTFNUX0hBVkVBTFAJMHgwMDAyMDAwMCAvKiBBUEwgYXZhaWxhYmxlICovCisjZGVmaW5lIEJDTUFfQ0NfSFdfV09SS0FST1VORAkJMHgwMUU0IC8qIEhhcmR3YXJlIHdvcmthcm91bmQgKHJldiA+PSAyMCkgKi8KKyNkZWZpbmUgQkNNQV9DQ19VQVJUMF9EQVRBCQkweDAzMDAKKyNkZWZpbmUgQkNNQV9DQ19VQVJUMF9JTVIJCTB4MDMwNAorI2RlZmluZSBCQ01BX0NDX1VBUlQwX0ZDUgkJMHgwMzA4CisjZGVmaW5lIEJDTUFfQ0NfVUFSVDBfTENSCQkweDAzMEMKKyNkZWZpbmUgQkNNQV9DQ19VQVJUMF9NQ1IJCTB4MDMxMAorI2RlZmluZSBCQ01BX0NDX1VBUlQwX0xTUgkJMHgwMzE0CisjZGVmaW5lIEJDTUFfQ0NfVUFSVDBfTVNSCQkweDAzMTgKKyNkZWZpbmUgQkNNQV9DQ19VQVJUMF9TQ1JBVENICQkweDAzMUMKKyNkZWZpbmUgQkNNQV9DQ19VQVJUMV9EQVRBCQkweDA0MDAKKyNkZWZpbmUgQkNNQV9DQ19VQVJUMV9JTVIJCTB4MDQwNAorI2RlZmluZSBCQ01BX0NDX1VBUlQxX0ZDUgkJMHgwNDA4CisjZGVmaW5lIEJDTUFfQ0NfVUFSVDFfTENSCQkweDA0MEMKKyNkZWZpbmUgQkNNQV9DQ19VQVJUMV9NQ1IJCTB4MDQxMAorI2RlZmluZSBCQ01BX0NDX1VBUlQxX0xTUgkJMHgwNDE0CisjZGVmaW5lIEJDTUFfQ0NfVUFSVDFfTVNSCQkweDA0MTgKKyNkZWZpbmUgQkNNQV9DQ19VQVJUMV9TQ1JBVENICQkweDA0MUMKKy8qIFBNVSByZWdpc3RlcnMgKHJldiA+PSAyMCkgKi8KKyNkZWZpbmUgQkNNQV9DQ19QTVVfQ1RMCQkJMHgwNjAwIC8qIFBNVSBjb250cm9sICovCisjZGVmaW5lICBCQ01BX0NDX1BNVV9DVExfSUxQX0RJVgkweEZGRkYwMDAwIC8qIElMUCBkaXYgbWFzayAqLworI2RlZmluZSAgQkNNQV9DQ19QTVVfQ1RMX0lMUF9ESVZfU0hJRlQJMTYKKyNkZWZpbmUgIEJDTUFfQ0NfUE1VX0NUTF9OT0lMUE9OVwkweDAwMDAwMjAwIC8qIE5vIElMUCBvbiB3YWl0ICovCisjZGVmaW5lICBCQ01BX0NDX1BNVV9DVExfSFRSRVFFTgkweDAwMDAwMTAwIC8qIEhUIHJlcSBlbmFibGUgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfUE1VX0NUTF9BTFBSRVFFTgkweDAwMDAwMDgwIC8qIEFMUCByZXEgZW5hYmxlICovCisjZGVmaW5lICBCQ01BX0NDX1BNVV9DVExfWFRBTEZSRVEJMHgwMDAwMDA3QyAvKiBDcnlzdGFsIGZyZXEgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfUE1VX0NUTF9YVEFMRlJFUV9TSElGVAkyCisjZGVmaW5lICBCQ01BX0NDX1BNVV9DVExfSUxQRElWRU4JMHgwMDAwMDAwMiAvKiBJTFAgZGl2IGVuYWJsZSAqLworI2RlZmluZSAgQkNNQV9DQ19QTVVfQ1RMX0xQT1NFTAkJMHgwMDAwMDAwMSAvKiBMUE8gc2VsICovCisjZGVmaW5lIEJDTUFfQ0NfUE1VX0NBUAkJCTB4MDYwNCAvKiBQTVUgY2FwYWJpbGl0aWVzICovCisjZGVmaW5lICBCQ01BX0NDX1BNVV9DQVBfUkVWSVNJT04JMHgwMDAwMDBGRiAvKiBSZXZpc2lvbiBtYXNrICovCisjZGVmaW5lIEJDTUFfQ0NfUE1VX1NUQVQJCTB4MDYwOCAvKiBQTVUgc3RhdHVzICovCisjZGVmaW5lICBCQ01BX0NDX1BNVV9TVEFUX0lOVFBFTkQJMHgwMDAwMDA0MCAvKiBJbnRlcnJ1cHQgcGVuZGluZyAqLworI2RlZmluZSAgQkNNQV9DQ19QTVVfU1RBVF9TQkNMS1NUCTB4MDAwMDAwMzAgLyogQmFja3BsYW5lIGNsb2NrIHN0YXR1cz8gKi8KKyNkZWZpbmUgIEJDTUFfQ0NfUE1VX1NUQVRfSEFWRUFMUAkweDAwMDAwMDA4IC8qIEFMUCBhdmFpbGFibGUgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfUE1VX1NUQVRfSEFWRUhUCTB4MDAwMDAwMDQgLyogSFQgYXZhaWxhYmxlICovCisjZGVmaW5lICBCQ01BX0NDX1BNVV9TVEFUX1JFU0lOSVQJMHgwMDAwMDAwMyAvKiBSZXMgaW5pdCAqLworI2RlZmluZSBCQ01BX0NDX1BNVV9SRVNfU1RBVAkJMHgwNjBDIC8qIFBNVSByZXMgc3RhdHVzICovCisjZGVmaW5lIEJDTUFfQ0NfUE1VX1JFU19QRU5ECQkweDA2MTAgLyogUE1VIHJlcyBwZW5kaW5nICovCisjZGVmaW5lIEJDTUFfQ0NfUE1VX1RJTUVSCQkweDA2MTQgLyogUE1VIHRpbWVyICovCisjZGVmaW5lIEJDTUFfQ0NfUE1VX01JTlJFU19NU0sJCTB4MDYxOCAvKiBQTVUgbWluIHJlcyBtYXNrICovCisjZGVmaW5lIEJDTUFfQ0NfUE1VX01BWFJFU19NU0sJCTB4MDYxQyAvKiBQTVUgbWF4IHJlcyBtYXNrICovCisjZGVmaW5lIEJDTUFfQ0NfUE1VX1JFU19UQUJTRUwJCTB4MDYyMCAvKiBQTVUgcmVzIHRhYmxlIHNlbCAqLworI2RlZmluZSBCQ01BX0NDX1BNVV9SRVNfREVQTVNLCQkweDA2MjQgLyogUE1VIHJlcyBkZXAgbWFzayAqLworI2RlZmluZSBCQ01BX0NDX1BNVV9SRVNfVVBETlRNCQkweDA2MjggLyogUE1VIHJlcyB1cGRvd24gdGltZXIgKi8KKyNkZWZpbmUgQkNNQV9DQ19QTVVfUkVTX1RJTUVSCQkweDA2MkMgLyogUE1VIHJlcyB0aW1lciAqLworI2RlZmluZSBCQ01BX0NDX1BNVV9DTEtTVFJFVENICQkweDA2MzAgLyogUE1VIGNsb2Nrc3RyZXRjaCAqLworI2RlZmluZSBCQ01BX0NDX1BNVV9XQVRDSERPRwkJMHgwNjM0IC8qIFBNVSB3YXRjaGRvZyAqLworI2RlZmluZSBCQ01BX0NDX1BNVV9SRVNfUkVRVFMJCTB4MDY0MCAvKiBQTVUgcmVzIHJlcSB0aW1lciBzZWwgKi8KKyNkZWZpbmUgQkNNQV9DQ19QTVVfUkVTX1JFUVQJCTB4MDY0NCAvKiBQTVUgcmVzIHJlcSB0aW1lciAqLworI2RlZmluZSBCQ01BX0NDX1BNVV9SRVNfUkVRTQkJMHgwNjQ4IC8qIFBNVSByZXMgcmVxIG1hc2sgKi8KKyNkZWZpbmUgQkNNQV9DQ19DSElQQ1RMX0FERFIJCTB4MDY1MAorI2RlZmluZSBCQ01BX0NDX0NISVBDVExfREFUQQkJMHgwNjU0CisjZGVmaW5lIEJDTUFfQ0NfUkVHQ1RMX0FERFIJCTB4MDY1OAorI2RlZmluZSBCQ01BX0NDX1JFR0NUTF9EQVRBCQkweDA2NUMKKyNkZWZpbmUgQkNNQV9DQ19QTExDVExfQUREUgkJMHgwNjYwCisjZGVmaW5lIEJDTUFfQ0NfUExMQ1RMX0RBVEEJCTB4MDY2NAorCisvKiBEYXRhIGZvciB0aGUgUE1VLCBpZiBhdmFpbGFibGUuCisgKiBDaGVjayBhdmFpbGFiaWxpdHkgd2l0aCAoKHN0cnVjdCBiY21hX2NoaXBjb21tb24pLT5jYXBhYmlsaXRpZXMgJiBCQ01BX0NDX0NBUF9QTVUpCisgKi8KK3N0cnVjdCBiY21hX2NoaXBjb21tb25fcG11IHsKKwl1OCByZXY7CQkJLyogUE1VIHJldmlzaW9uICovCisJdTMyIGNyeXN0YWxmcmVxOwkvKiBUaGUgYWN0aXZlIGNyeXN0YWwgZnJlcXVlbmN5IChpbiBrSHopICovCit9OworCitzdHJ1Y3QgYmNtYV9kcnZfY2MgeworCXN0cnVjdCBiY21hX2RldmljZSAqY29yZTsKKwl1MzIgc3RhdHVzOworCXUzMiBjYXBhYmlsaXRpZXM7CisJdTMyIGNhcGFiaWxpdGllc19leHQ7CisJLyogRmFzdCBQb3dlcnVwIERlbGF5IGNvbnN0YW50ICovCisJdTE2IGZhc3RfcHdydXBfZGVsYXk7CisJc3RydWN0IGJjbWFfY2hpcGNvbW1vbl9wbXUgcG11OworfTsKKworLyogUmVnaXN0ZXIgYWNjZXNzICovCisjZGVmaW5lIGJjbWFfY2NfcmVhZDMyKGNjLCBvZmZzZXQpIFwKKwliY21hX3JlYWQzMigoY2MpLT5jb3JlLCBvZmZzZXQpCisjZGVmaW5lIGJjbWFfY2Nfd3JpdGUzMihjYywgb2Zmc2V0LCB2YWwpIFwKKwliY21hX3dyaXRlMzIoKGNjKS0+Y29yZSwgb2Zmc2V0LCB2YWwpCisKKyNkZWZpbmUgYmNtYV9jY19tYXNrMzIoY2MsIG9mZnNldCwgbWFzaykgXAorCWJjbWFfY2Nfd3JpdGUzMihjYywgb2Zmc2V0LCBiY21hX2NjX3JlYWQzMihjYywgb2Zmc2V0KSAmIChtYXNrKSkKKyNkZWZpbmUgYmNtYV9jY19zZXQzMihjYywgb2Zmc2V0LCBzZXQpIFwKKwliY21hX2NjX3dyaXRlMzIoY2MsIG9mZnNldCwgYmNtYV9jY19yZWFkMzIoY2MsIG9mZnNldCkgfCAoc2V0KSkKKyNkZWZpbmUgYmNtYV9jY19tYXNrc2V0MzIoY2MsIG9mZnNldCwgbWFzaywgc2V0KSBcCisJYmNtYV9jY193cml0ZTMyKGNjLCBvZmZzZXQsIChiY21hX2NjX3JlYWQzMihjYywgb2Zmc2V0KSAmIChtYXNrKSkgfCAoc2V0KSkKKworZXh0ZXJuIHZvaWQgYmNtYV9jb3JlX2NoaXBjb21tb25faW5pdChzdHJ1Y3QgYmNtYV9kcnZfY2MgKmNjKTsKKworZXh0ZXJuIHZvaWQgYmNtYV9jaGlwY29fc3VzcGVuZChzdHJ1Y3QgYmNtYV9kcnZfY2MgKmNjKTsKK2V4dGVybiB2b2lkIGJjbWFfY2hpcGNvX3Jlc3VtZShzdHJ1Y3QgYmNtYV9kcnZfY2MgKmNjKTsKKworZXh0ZXJuIHZvaWQgYmNtYV9jaGlwY29fd2F0Y2hkb2dfdGltZXJfc2V0KHN0cnVjdCBiY21hX2Rydl9jYyAqY2MsCisJCQkJCSAgdTMyIHRpY2tzKTsKKwordm9pZCBiY21hX2NoaXBjb19pcnFfbWFzayhzdHJ1Y3QgYmNtYV9kcnZfY2MgKmNjLCB1MzIgbWFzaywgdTMyIHZhbHVlKTsKKwordTMyIGJjbWFfY2hpcGNvX2lycV9zdGF0dXMoc3RydWN0IGJjbWFfZHJ2X2NjICpjYywgdTMyIG1hc2spOworCisvKiBDaGlwY29tbW9uIEdQSU8gcGluIGFjY2Vzcy4gKi8KK3UzMiBiY21hX2NoaXBjb19ncGlvX2luKHN0cnVjdCBiY21hX2Rydl9jYyAqY2MsIHUzMiBtYXNrKTsKK3UzMiBiY21hX2NoaXBjb19ncGlvX291dChzdHJ1Y3QgYmNtYV9kcnZfY2MgKmNjLCB1MzIgbWFzaywgdTMyIHZhbHVlKTsKK3UzMiBiY21hX2NoaXBjb19ncGlvX291dGVuKHN0cnVjdCBiY21hX2Rydl9jYyAqY2MsIHUzMiBtYXNrLCB1MzIgdmFsdWUpOwordTMyIGJjbWFfY2hpcGNvX2dwaW9fY29udHJvbChzdHJ1Y3QgYmNtYV9kcnZfY2MgKmNjLCB1MzIgbWFzaywgdTMyIHZhbHVlKTsKK3UzMiBiY21hX2NoaXBjb19ncGlvX2ludG1hc2soc3RydWN0IGJjbWFfZHJ2X2NjICpjYywgdTMyIG1hc2ssIHUzMiB2YWx1ZSk7Cit1MzIgYmNtYV9jaGlwY29fZ3Bpb19wb2xhcml0eShzdHJ1Y3QgYmNtYV9kcnZfY2MgKmNjLCB1MzIgbWFzaywgdTMyIHZhbHVlKTsKKworLyogUE1VIHN1cHBvcnQgKi8KK2V4dGVybiB2b2lkIGJjbWFfcG11X2luaXQoc3RydWN0IGJjbWFfZHJ2X2NjICpjYyk7CisKKyNlbmRpZiAvKiBMSU5VWF9CQ01BX0RSSVZFUl9DQ19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iY21hL2JjbWFfZHJpdmVyX3BjaS5oIGIvaW5jbHVkZS9saW51eC9iY21hL2JjbWFfZHJpdmVyX3BjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZTE5MWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2JjbWEvYmNtYV9kcml2ZXJfcGNpLmgKQEAgLTAsMCArMSw4OSBAQAorI2lmbmRlZiBMSU5VWF9CQ01BX0RSSVZFUl9QQ0lfSF8KKyNkZWZpbmUgTElOVVhfQkNNQV9EUklWRVJfUENJX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgcGNpX2RldjsKKworLyoqIFBDSSBjb3JlIHJlZ2lzdGVycy4gKiovCisjZGVmaW5lIEJDTUFfQ09SRV9QQ0lfQ1RMCQkJMHgwMDAwCS8qIFBDSSBDb250cm9sICovCisjZGVmaW5lICBCQ01BX0NPUkVfUENJX0NUTF9SU1RfT0UJCTB4MDAwMDAwMDEgLyogUENJX1JFU0VUIE91dHB1dCBFbmFibGUgKi8KKyNkZWZpbmUgIEJDTUFfQ09SRV9QQ0lfQ1RMX1JTVAkJCTB4MDAwMDAwMDIgLyogUENJX1JFU0VUIGRyaXZlbiBvdXQgdG8gcGluICovCisjZGVmaW5lICBCQ01BX0NPUkVfUENJX0NUTF9DTEtfT0UJCTB4MDAwMDAwMDQgLyogQ2xvY2sgZ2F0ZSBPdXRwdXQgRW5hYmxlICovCisjZGVmaW5lICBCQ01BX0NPUkVfUENJX0NUTF9DTEsJCQkweDAwMDAwMDA4IC8qIEdhdGUgZm9yIGNsb2NrIGRyaXZlbiBvdXQgdG8gcGluICovCisjZGVmaW5lIEJDTUFfQ09SRV9QQ0lfQVJCQ1RMCQkJMHgwMDEwCS8qIFBDSSBBcmJpdGVyIENvbnRyb2wgKi8KKyNkZWZpbmUgIEJDTUFfQ09SRV9QQ0lfQVJCQ1RMX0lOVEVSTgkJMHgwMDAwMDAwMSAvKiBVc2UgaW50ZXJuYWwgYXJiaXRlciAqLworI2RlZmluZSAgQkNNQV9DT1JFX1BDSV9BUkJDVExfRVhURVJOCQkweDAwMDAwMDAyIC8qIFVzZSBleHRlcm5hbCBhcmJpdGVyICovCisjZGVmaW5lICBCQ01BX0NPUkVfUENJX0FSQkNUTF9QQVJLSUQJCTB4MDAwMDAwMDYgLyogTWFzaywgc2VsZWN0cyB3aGljaCBhZ2VudCBpcyBwYXJrZWQgb24gYW4gaWRsZSBidXMgKi8KKyNkZWZpbmUgICBCQ01BX0NPUkVfUENJX0FSQkNUTF9QQVJLSURfTEFTVAkweDAwMDAwMDAwIC8qIExhc3QgcmVxdWVzdG9yICovCisjZGVmaW5lICAgQkNNQV9DT1JFX1BDSV9BUkJDVExfUEFSS0lEXzQ3MTAJMHgwMDAwMDAwMiAvKiA0NzEwICovCisjZGVmaW5lICAgQkNNQV9DT1JFX1BDSV9BUkJDVExfUEFSS0lEX0VYVDAJMHgwMDAwMDAwNCAvKiBFeHRlcm5hbCByZXF1ZXN0b3IgMCAqLworI2RlZmluZSAgIEJDTUFfQ09SRV9QQ0lfQVJCQ1RMX1BBUktJRF9FWFQxCTB4MDAwMDAwMDYgLyogRXh0ZXJuYWwgcmVxdWVzdG9yIDEgKi8KKyNkZWZpbmUgQkNNQV9DT1JFX1BDSV9JU1RBVAkJCTB4MDAyMAkvKiBJbnRlcnJ1cHQgc3RhdHVzICovCisjZGVmaW5lICBCQ01BX0NPUkVfUENJX0lTVEFUX0lOVEEJCTB4MDAwMDAwMDEgLyogUENJIElOVEEjICovCisjZGVmaW5lICBCQ01BX0NPUkVfUENJX0lTVEFUX0lOVEIJCTB4MDAwMDAwMDIgLyogUENJIElOVEIjICovCisjZGVmaW5lICBCQ01BX0NPUkVfUENJX0lTVEFUX1NFUlIJCTB4MDAwMDAwMDQgLyogUENJIFNFUlIjICh3cml0ZSB0byBjbGVhcikgKi8KKyNkZWZpbmUgIEJDTUFfQ09SRV9QQ0lfSVNUQVRfUEVSUgkJMHgwMDAwMDAwOCAvKiBQQ0kgUEVSUiMgKHdyaXRlIHRvIGNsZWFyKSAqLworI2RlZmluZSAgQkNNQV9DT1JFX1BDSV9JU1RBVF9QTUUJCTB4MDAwMDAwMTAgLyogUENJIFBNRSMgKi8KKyNkZWZpbmUgQkNNQV9DT1JFX1BDSV9JTUFTSwkJCTB4MDAyNAkvKiBJbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSAgQkNNQV9DT1JFX1BDSV9JTUFTS19JTlRBCQkweDAwMDAwMDAxIC8qIFBDSSBJTlRBIyAqLworI2RlZmluZSAgQkNNQV9DT1JFX1BDSV9JTUFTS19JTlRCCQkweDAwMDAwMDAyIC8qIFBDSSBJTlRCIyAqLworI2RlZmluZSAgQkNNQV9DT1JFX1BDSV9JTUFTS19TRVJSCQkweDAwMDAwMDA0IC8qIFBDSSBTRVJSIyAqLworI2RlZmluZSAgQkNNQV9DT1JFX1BDSV9JTUFTS19QRVJSCQkweDAwMDAwMDA4IC8qIFBDSSBQRVJSIyAqLworI2RlZmluZSAgQkNNQV9DT1JFX1BDSV9JTUFTS19QTUUJCTB4MDAwMDAwMTAgLyogUENJIFBNRSMgKi8KKyNkZWZpbmUgQkNNQV9DT1JFX1BDSV9NQk9YCQkJMHgwMDI4CS8qIEJhY2twbGFuZSB0byBQQ0kgTWFpbGJveCAqLworI2RlZmluZSAgQkNNQV9DT1JFX1BDSV9NQk9YX0YwXzAJCTB4MDAwMDAxMDAgLyogUENJIGZ1bmN0aW9uIDAsIElOVCAwICovCisjZGVmaW5lICBCQ01BX0NPUkVfUENJX01CT1hfRjBfMQkJMHgwMDAwMDIwMCAvKiBQQ0kgZnVuY3Rpb24gMCwgSU5UIDEgKi8KKyNkZWZpbmUgIEJDTUFfQ09SRV9QQ0lfTUJPWF9GMV8wCQkweDAwMDAwNDAwIC8qIFBDSSBmdW5jdGlvbiAxLCBJTlQgMCAqLworI2RlZmluZSAgQkNNQV9DT1JFX1BDSV9NQk9YX0YxXzEJCTB4MDAwMDA4MDAgLyogUENJIGZ1bmN0aW9uIDEsIElOVCAxICovCisjZGVmaW5lICBCQ01BX0NPUkVfUENJX01CT1hfRjJfMAkJMHgwMDAwMTAwMCAvKiBQQ0kgZnVuY3Rpb24gMiwgSU5UIDAgKi8KKyNkZWZpbmUgIEJDTUFfQ09SRV9QQ0lfTUJPWF9GMl8xCQkweDAwMDAyMDAwIC8qIFBDSSBmdW5jdGlvbiAyLCBJTlQgMSAqLworI2RlZmluZSAgQkNNQV9DT1JFX1BDSV9NQk9YX0YzXzAJCTB4MDAwMDQwMDAgLyogUENJIGZ1bmN0aW9uIDMsIElOVCAwICovCisjZGVmaW5lICBCQ01BX0NPUkVfUENJX01CT1hfRjNfMQkJMHgwMDAwODAwMCAvKiBQQ0kgZnVuY3Rpb24gMywgSU5UIDEgKi8KKyNkZWZpbmUgQkNNQV9DT1JFX1BDSV9CQ0FTVF9BRERSCQkweDAwNTAJLyogQmFja3BsYW5lIEJyb2FkY2FzdCBBZGRyZXNzICovCisjZGVmaW5lICBCQ01BX0NPUkVfUENJX0JDQVNUX0FERFJfTUFTSwkJMHgwMDAwMDBGRgorI2RlZmluZSBCQ01BX0NPUkVfUENJX0JDQVNUX0RBVEEJCTB4MDA1NAkvKiBCYWNrcGxhbmUgQnJvYWRjYXN0IERhdGEgKi8KKyNkZWZpbmUgQkNNQV9DT1JFX1BDSV9HUElPX0lOCQkJMHgwMDYwCS8qIHJldiA+PSAyIG9ubHkgKi8KKyNkZWZpbmUgQkNNQV9DT1JFX1BDSV9HUElPX09VVAkJCTB4MDA2NAkvKiByZXYgPj0gMiBvbmx5ICovCisjZGVmaW5lIEJDTUFfQ09SRV9QQ0lfR1BJT19FTkFCTEUJCTB4MDA2OAkvKiByZXYgPj0gMiBvbmx5ICovCisjZGVmaW5lIEJDTUFfQ09SRV9QQ0lfR1BJT19DVEwJCQkweDAwNkMJLyogcmV2ID49IDIgb25seSAqLworI2RlZmluZSBCQ01BX0NPUkVfUENJX1NCVE9QQ0kwCQkJMHgwMTAwCS8qIEJhY2twbGFuZSB0byBQQ0kgdHJhbnNsYXRpb24gMCAoc2J0b3BjaTApICovCisjZGVmaW5lICBCQ01BX0NPUkVfUENJX1NCVE9QQ0kwX01BU0sJCTB4RkMwMDAwMDAKKyNkZWZpbmUgQkNNQV9DT1JFX1BDSV9TQlRPUENJMQkJCTB4MDEwNAkvKiBCYWNrcGxhbmUgdG8gUENJIHRyYW5zbGF0aW9uIDEgKHNidG9wY2kxKSAqLworI2RlZmluZSAgQkNNQV9DT1JFX1BDSV9TQlRPUENJMV9NQVNLCQkweEZDMDAwMDAwCisjZGVmaW5lIEJDTUFfQ09SRV9QQ0lfU0JUT1BDSTIJCQkweDAxMDgJLyogQmFja3BsYW5lIHRvIFBDSSB0cmFuc2xhdGlvbiAyIChzYnRvcGNpMikgKi8KKyNkZWZpbmUgIEJDTUFfQ09SRV9QQ0lfU0JUT1BDSTJfTUFTSwkJMHhDMDAwMDAwMAorI2RlZmluZSBCQ01BX0NPUkVfUENJX1BDSUNGRzAJCQkweDA0MDAJLyogUENJIGNvbmZpZyBzcGFjZSAwIChyZXYgPj0gOCkgKi8KKyNkZWZpbmUgQkNNQV9DT1JFX1BDSV9QQ0lDRkcxCQkJMHgwNTAwCS8qIFBDSSBjb25maWcgc3BhY2UgMSAocmV2ID49IDgpICovCisjZGVmaW5lIEJDTUFfQ09SRV9QQ0lfUENJQ0ZHMgkJCTB4MDYwMAkvKiBQQ0kgY29uZmlnIHNwYWNlIDIgKHJldiA+PSA4KSAqLworI2RlZmluZSBCQ01BX0NPUkVfUENJX1BDSUNGRzMJCQkweDA3MDAJLyogUENJIGNvbmZpZyBzcGFjZSAzIChyZXYgPj0gOCkgKi8KKyNkZWZpbmUgQkNNQV9DT1JFX1BDSV9TUFJPTSh3b3Jkb2Zmc2V0KQkJKDB4MDgwMCArICgod29yZG9mZnNldCkgKiAyKSkgLyogU1BST00gc2hhZG93IGFyZWEgKDcyIGJ5dGVzKSAqLworCisvKiBTQnRvUENJeCAqLworI2RlZmluZSBCQ01BX0NPUkVfUENJX1NCVE9QQ0lfTUVNCQkweDAwMDAwMDAwCisjZGVmaW5lIEJDTUFfQ09SRV9QQ0lfU0JUT1BDSV9JTwkJMHgwMDAwMDAwMQorI2RlZmluZSBCQ01BX0NPUkVfUENJX1NCVE9QQ0lfQ0ZHMAkJMHgwMDAwMDAwMgorI2RlZmluZSBCQ01BX0NPUkVfUENJX1NCVE9QQ0lfQ0ZHMQkJMHgwMDAwMDAwMworI2RlZmluZSBCQ01BX0NPUkVfUENJX1NCVE9QQ0lfUFJFRgkJMHgwMDAwMDAwNCAvKiBQcmVmZXRjaCBlbmFibGUgKi8KKyNkZWZpbmUgQkNNQV9DT1JFX1BDSV9TQlRPUENJX0JVUlNUCQkweDAwMDAwMDA4IC8qIEJ1cnN0IGVuYWJsZSAqLworI2RlZmluZSBCQ01BX0NPUkVfUENJX1NCVE9QQ0lfTVJNCQkweDAwMDAwMDIwIC8qIE1lbW9yeSBSZWFkIE11bHRpcGxlICovCisjZGVmaW5lIEJDTUFfQ09SRV9QQ0lfU0JUT1BDSV9SQwkJMHgwMDAwMDAzMCAvKiBSZWFkIENvbW1hbmQgbWFzayAocmV2ID49IDExKSAqLworI2RlZmluZSAgQkNNQV9DT1JFX1BDSV9TQlRPUENJX1JDX1JFQUQJCTB4MDAwMDAwMDAgLyogTWVtb3J5IHJlYWQgKi8KKyNkZWZpbmUgIEJDTUFfQ09SRV9QQ0lfU0JUT1BDSV9SQ19SRUFETAkJMHgwMDAwMDAxMCAvKiBNZW1vcnkgcmVhZCBsaW5lICovCisjZGVmaW5lICBCQ01BX0NPUkVfUENJX1NCVE9QQ0lfUkNfUkVBRE0JCTB4MDAwMDAwMjAgLyogTWVtb3J5IHJlYWQgbXVsdGlwbGUgKi8KKworLyogUENJY29yZSBzcGVjaWZpYyBib2FyZGZsYWdzICovCisjZGVmaW5lIEJDTUFfQ09SRV9QQ0lfQkZMX05PUENJCQkJMHgwMDAwMDQwMCAvKiBCb2FyZCBsZWF2ZXMgUENJIGZsb2F0aW5nICovCisKK3N0cnVjdCBiY21hX2Rydl9wY2kgeworCXN0cnVjdCBiY21hX2RldmljZSAqY29yZTsKKwl1OCBzZXR1cF9kb25lOjE7Cit9OworCisvKiBSZWdpc3RlciBhY2Nlc3MgKi8KKyNkZWZpbmUgcGNpY29yZV9yZWFkMzIocGMsIG9mZnNldCkJCWJjbWFfcmVhZDMyKChwYyktPmNvcmUsIG9mZnNldCkKKyNkZWZpbmUgcGNpY29yZV93cml0ZTMyKHBjLCBvZmZzZXQsIHZhbCkJYmNtYV93cml0ZTMyKChwYyktPmNvcmUsIG9mZnNldCwgdmFsKQorCitleHRlcm4gdm9pZCBiY21hX2NvcmVfcGNpX2luaXQoc3RydWN0IGJjbWFfZHJ2X3BjaSAqcGMpOworCisjZW5kaWYgLyogTElOVVhfQkNNQV9EUklWRVJfUENJX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JjbWEvYmNtYV9yZWdzLmggYi9pbmNsdWRlL2xpbnV4L2JjbWEvYmNtYV9yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgyZDg4YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYmNtYS9iY21hX3JlZ3MuaApAQCAtMCwwICsxLDM0IEBACisjaWZuZGVmIExJTlVYX0JDTUFfUkVHU19IXworI2RlZmluZSBMSU5VWF9CQ01BX1JFR1NfSF8KKworLyogQWdlbnQgcmVnaXN0ZXJzIChjb21tb24gZm9yIGV2ZXJ5IGNvcmUpICovCisjZGVmaW5lIEJDTUFfSU9DVEwJCQkweDA0MDgKKyNkZWZpbmUgIEJDTUFfSU9DVExfQ0xLCQkJMHgwMDAxCisjZGVmaW5lICBCQ01BX0lPQ1RMX0ZHQwkJCTB4MDAwMgorI2RlZmluZSAgQkNNQV9JT0NUTF9DT1JFX0JJVFMJCTB4M0ZGQworI2RlZmluZSAgQkNNQV9JT0NUTF9QTUVfRU4JCTB4NDAwMAorI2RlZmluZSAgQkNNQV9JT0NUTF9CSVNUX0VOCQkweDgwMDAKKyNkZWZpbmUgQkNNQV9SRVNFVF9DVEwJCQkweDA4MDAKKyNkZWZpbmUgIEJDTUFfUkVTRVRfQ1RMX1JFU0VUCQkweDAwMDEKKworLyogQkNNQSBQQ0kgY29uZmlnIHNwYWNlIHJlZ2lzdGVycy4gKi8KKyNkZWZpbmUgQkNNQV9QQ0lfUE1DU1IJCQkweDQ0CisjZGVmaW5lICBCQ01BX1BDSV9QRQkJCTB4MTAwCisjZGVmaW5lIEJDTUFfUENJX0JBUjBfV0lOCQkweDgwCS8qIEJhY2twbGFuZSBhZGRyZXNzIHNwYWNlIDAgKi8KKyNkZWZpbmUgQkNNQV9QQ0lfQkFSMV9XSU4JCTB4ODQJLyogQmFja3BsYW5lIGFkZHJlc3Mgc3BhY2UgMSAqLworI2RlZmluZSBCQ01BX1BDSV9TUFJPTUNUTAkJMHg4OAkvKiBTUFJPTSBjb250cm9sICovCisjZGVmaW5lICBCQ01BX1BDSV9TUFJPTUNUTF9XRQkJMHgxMAkvKiBTUFJPTSB3cml0ZSBlbmFibGUgKi8KKyNkZWZpbmUgQkNNQV9QQ0lfQkFSMV9DT05UUk9MCQkweDhjCS8qIEFkZHJlc3Mgc3BhY2UgMSBidXJzdCBjb250cm9sICovCisjZGVmaW5lIEJDTUFfUENJX0lSUVMJCQkweDkwCS8qIFBDSSBpbnRlcnJ1cHRzICovCisjZGVmaW5lIEJDTUFfUENJX0lSUU1BU0sJCTB4OTQJLyogUENJIElSUSBjb250cm9sIGFuZCBtYXNrIChwY2lyZXYgPj0gNiBvbmx5KSAqLworI2RlZmluZSBCQ01BX1BDSV9CQUNLUExBTkVfSVJRUwkJMHg5OAkvKiBCYWNrcGxhbmUgSW50ZXJydXB0cyAqLworI2RlZmluZSBCQ01BX1BDSV9CQVIwX1dJTjIJCTB4QUMKKyNkZWZpbmUgQkNNQV9QQ0lfR1BJT19JTgkJMHhCMAkvKiBHUElPIElucHV0IChwY2lyZXYgPj0gMyBvbmx5KSAqLworI2RlZmluZSBCQ01BX1BDSV9HUElPX09VVAkJMHhCNAkvKiBHUElPIE91dHB1dCAocGNpcmV2ID49IDMgb25seSkgKi8KKyNkZWZpbmUgQkNNQV9QQ0lfR1BJT19PVVRfRU5BQkxFCTB4QjgJLyogR1BJTyBPdXRwdXQgRW5hYmxlL0Rpc2FibGUgKHBjaXJldiA+PSAzIG9ubHkpICovCisjZGVmaW5lICBCQ01BX1BDSV9HUElPX1NDUwkJMHgxMAkvKiBQQ0kgY29uZmlnIHNwYWNlIGJpdCA0IGZvciA0MzA2YzAgc2xvdyBjbG9jayBzb3VyY2UgKi8KKyNkZWZpbmUgIEJDTUFfUENJX0dQSU9fSFdSQUQJCTB4MjAJLyogUENJIGNvbmZpZyBzcGFjZSBHUElPIDEzIGZvciBodyByYWRpbyBkaXNhYmxlICovCisjZGVmaW5lICBCQ01BX1BDSV9HUElPX1hUQUwJCTB4NDAJLyogUENJIGNvbmZpZyBzcGFjZSBHUElPIDE0IGZvciBYdGFsIHBvd2VydXAgKi8KKyNkZWZpbmUgIEJDTUFfUENJX0dQSU9fUExMCQkweDgwCS8qIFBDSSBjb25maWcgc3BhY2UgR1BJTyAxNSBmb3IgUExMIHBvd2VyZG93biAqLworCisjZW5kaWYgLyogTElOVVhfQkNNQV9SRUdTX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaCBiL2luY2x1ZGUvbGludXgvYmluZm10cy5oCmluZGV4IGMzZDY1MTIuLjg4NDU2MTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmluZm10cy5oCisrKyBiL2luY2x1ZGUvbGludXgvYmluZm10cy5oCkBAIC02MCwxMCArNjAsNiBAQAogCXVuc2lnbmVkIGxvbmcgbG9hZGVyLCBleGVjOwogfTsKIAotZXh0ZXJuIHZvaWQgYWNjdF9hcmdfc2l6ZShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCB1bnNpZ25lZCBsb25nIHBhZ2VzKTsKLWV4dGVybiBzdHJ1Y3QgcGFnZSAqZ2V0X2FyZ19wYWdlKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sIHVuc2lnbmVkIGxvbmcgcG9zLAotCQkJCQlpbnQgd3JpdGUpOwotCiAjZGVmaW5lIEJJTlBSTV9GTEFHU19FTkZPUkNFX05PTkRVTVBfQklUIDAKICNkZWZpbmUgQklOUFJNX0ZMQUdTX0VORk9SQ0VfTk9ORFVNUCAoMSA8PCBCSU5QUk1fRkxBR1NfRU5GT1JDRV9OT05EVU1QX0JJVCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jYW4vY29yZS5oIGIvaW5jbHVkZS9saW51eC9jYW4vY29yZS5oCmluZGV4IDZmNzBhNmQuLjVjZTZiNWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2FuL2NvcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nhbi9jb3JlLmgKQEAgLTQ0LDggKzQ0LDggQEAKIAogLyogZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgdGhlIENBTiBuZXR3b3JrbGF5ZXIgY29yZSAoYWZfY2FuLmMpICovCiAKLWV4dGVybiBpbnQgIGNhbl9wcm90b19yZWdpc3RlcihzdHJ1Y3QgY2FuX3Byb3RvICpjcCk7Ci1leHRlcm4gdm9pZCBjYW5fcHJvdG9fdW5yZWdpc3RlcihzdHJ1Y3QgY2FuX3Byb3RvICpjcCk7CitleHRlcm4gaW50ICBjYW5fcHJvdG9fcmVnaXN0ZXIoY29uc3Qgc3RydWN0IGNhbl9wcm90byAqY3ApOworZXh0ZXJuIHZvaWQgY2FuX3Byb3RvX3VucmVnaXN0ZXIoY29uc3Qgc3RydWN0IGNhbl9wcm90byAqY3ApOwogCiBleHRlcm4gaW50ICBjYW5fcnhfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2FuaWRfdCBjYW5faWQsCiAJCQkgICAgY2FuaWRfdCBtYXNrLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmggYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaAppbmRleCBkYzgwZDgyLi5jNmE4NTBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaApAQCAtMjQsNyArMjQsMTAgQEAKIAlfX3UzMgljbWQ7CiAJX191MzIJc3VwcG9ydGVkOwkvKiBGZWF0dXJlcyB0aGlzIGludGVyZmFjZSBzdXBwb3J0cyAqLwogCV9fdTMyCWFkdmVydGlzaW5nOwkvKiBGZWF0dXJlcyB0aGlzIGludGVyZmFjZSBhZHZlcnRpc2VzICovCi0JX191MTYJc3BlZWQ7CQkvKiBUaGUgZm9yY2VkIHNwZWVkLCAxME1iLCAxMDBNYiwgZ2lnYWJpdCAqLworCV9fdTE2CXNwZWVkOwkgICAgICAgIC8qIFRoZSBmb3JjZWQgc3BlZWQgKGxvd2VyIGJpdHMpIGluCisJCQkJICogTWJwcy4gUGxlYXNlIHVzZQorCQkJCSAqIGV0aHRvb2xfY21kX3NwZWVkKCkvX3NldCgpIHRvCisJCQkJICogYWNjZXNzIGl0ICovCiAJX191OAlkdXBsZXg7CQkvKiBEdXBsZXgsIGhhbGYgb3IgZnVsbCAqLwogCV9fdTgJcG9ydDsJCS8qIFdoaWNoIGNvbm5lY3RvciBwb3J0ICovCiAJX191OAlwaHlfYWRkcmVzczsKQEAgLTMzLDcgKzM2LDEwIEBACiAJX191OAltZGlvX3N1cHBvcnQ7CiAJX191MzIJbWF4dHhwa3Q7CS8qIFR4IHBrdHMgYmVmb3JlIGdlbmVyYXRpbmcgdHggaW50ICovCiAJX191MzIJbWF4cnhwa3Q7CS8qIFJ4IHBrdHMgYmVmb3JlIGdlbmVyYXRpbmcgcnggaW50ICovCi0JX191MTYJc3BlZWRfaGk7CisJX191MTYJc3BlZWRfaGk7ICAgICAgIC8qIFRoZSBmb3JjZWQgc3BlZWQgKHVwcGVyCisJCQkJICogYml0cykgaW4gTWJwcy4gUGxlYXNlIHVzZQorCQkJCSAqIGV0aHRvb2xfY21kX3NwZWVkKCkvX3NldCgpIHRvCisJCQkJICogYWNjZXNzIGl0ICovCiAJX191OAlldGhfdHBfbWRpeDsKIAlfX3U4CXJlc2VydmVkMjsKIAlfX3UzMglscF9hZHZlcnRpc2luZzsJLyogRmVhdHVyZXMgdGhlIGxpbmsgcGFydG5lciBhZHZlcnRpc2VzICovCkBAIC00MSwxNCArNDcsMTQgQEAKIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBldGh0b29sX2NtZF9zcGVlZF9zZXQoc3RydWN0IGV0aHRvb2xfY21kICplcCwKLQkJCQkJCV9fdTMyIHNwZWVkKQorCQkJCQkgX191MzIgc3BlZWQpCiB7CiAKIAllcC0+c3BlZWQgPSAoX191MTYpc3BlZWQ7CiAJZXAtPnNwZWVkX2hpID0gKF9fdTE2KShzcGVlZCA+PiAxNik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgX191MzIgZXRodG9vbF9jbWRfc3BlZWQoc3RydWN0IGV0aHRvb2xfY21kICplcCkKK3N0YXRpYyBpbmxpbmUgX191MzIgZXRodG9vbF9jbWRfc3BlZWQoY29uc3Qgc3RydWN0IGV0aHRvb2xfY21kICplcCkKIHsKIAlyZXR1cm4gKGVwLT5zcGVlZF9oaSA8PCAxNikgfCBlcC0+c3BlZWQ7CiB9CkBAIC0yMjksNiArMjM1LDM0IEBACiAJX191MzIJdHhfcGVuZGluZzsKIH07CiAKKy8qKgorICogc3RydWN0IGV0aHRvb2xfY2hhbm5lbHMgLSBjb25maWd1cmluZyBudW1iZXIgb2YgbmV0d29yayBjaGFubmVsCisgKiBAY21kOiBFVEhUT09MX3tHLFN9Q0hBTk5FTFMKKyAqIEBtYXhfcng6IFJlYWQgb25seS4gTWF4aW11bSBudW1iZXIgb2YgcmVjZWl2ZSBjaGFubmVsIHRoZSBkcml2ZXIgc3VwcG9ydC4KKyAqIEBtYXhfdHg6IFJlYWQgb25seS4gTWF4aW11bSBudW1iZXIgb2YgdHJhbnNtaXQgY2hhbm5lbCB0aGUgZHJpdmVyIHN1cHBvcnQuCisgKiBAbWF4X290aGVyOiBSZWFkIG9ubHkuIE1heGltdW0gbnVtYmVyIG9mIG90aGVyIGNoYW5uZWwgdGhlIGRyaXZlciBzdXBwb3J0LgorICogQG1heF9jb21iaW5lZDogUmVhZCBvbmx5LiBNYXhpbXVtIG51bWJlciBvZiBjb21iaW5lZCBjaGFubmVsIHRoZSBkcml2ZXIKKyAqCXN1cHBvcnQuIFNldCBvZiBxdWV1ZXMgUlgsIFRYIG9yIG90aGVyLgorICogQHJ4X2NvdW50OiBWYWxpZCB2YWx1ZXMgYXJlIGluIHRoZSByYW5nZSAxIHRvIHRoZSBtYXhfcnguCisgKiBAdHhfY291bnQ6IFZhbGlkIHZhbHVlcyBhcmUgaW4gdGhlIHJhbmdlIDEgdG8gdGhlIG1heF90eC4KKyAqIEBvdGhlcl9jb3VudDogVmFsaWQgdmFsdWVzIGFyZSBpbiB0aGUgcmFuZ2UgMSB0byB0aGUgbWF4X290aGVyLgorICogQGNvbWJpbmVkX2NvdW50OiBWYWxpZCB2YWx1ZXMgYXJlIGluIHRoZSByYW5nZSAxIHRvIHRoZSBtYXhfY29tYmluZWQuCisgKgorICogVGhpcyBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgUlgsIFRYIGFuZCBvdGhlciBjaGFubmVscy4KKyAqLworCitzdHJ1Y3QgZXRodG9vbF9jaGFubmVscyB7CisJX191MzIJY21kOworCV9fdTMyCW1heF9yeDsKKwlfX3UzMgltYXhfdHg7CisJX191MzIJbWF4X290aGVyOworCV9fdTMyCW1heF9jb21iaW5lZDsKKwlfX3UzMglyeF9jb3VudDsKKwlfX3UzMgl0eF9jb3VudDsKKwlfX3UzMglvdGhlcl9jb3VudDsKKwlfX3UzMgljb21iaW5lZF9jb3VudDsKK307CisKIC8qIGZvciBjb25maWd1cmluZyBsaW5rIGZsb3cgY29udHJvbCBwYXJhbWV0ZXJzICovCiBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtIHsKIAlfX3UzMgljbWQ7CS8qIEVUSFRPT0xfe0csU31QQVVTRVBBUkFNICovCkBAIC0zODAsMjcgKzQxNCw0MiBAQAogCV9fdTggICAgcHJvdG87CiB9OwogCit1bmlvbiBldGh0b29sX2Zsb3dfdW5pb24geworCXN0cnVjdCBldGh0b29sX3RjcGlwNF9zcGVjCQl0Y3BfaXA0X3NwZWM7CisJc3RydWN0IGV0aHRvb2xfdGNwaXA0X3NwZWMJCXVkcF9pcDRfc3BlYzsKKwlzdHJ1Y3QgZXRodG9vbF90Y3BpcDRfc3BlYwkJc2N0cF9pcDRfc3BlYzsKKwlzdHJ1Y3QgZXRodG9vbF9haF9lc3BpcDRfc3BlYwkJYWhfaXA0X3NwZWM7CisJc3RydWN0IGV0aHRvb2xfYWhfZXNwaXA0X3NwZWMJCWVzcF9pcDRfc3BlYzsKKwlzdHJ1Y3QgZXRodG9vbF91c3JpcDRfc3BlYwkJdXNyX2lwNF9zcGVjOworCXN0cnVjdCBldGhoZHIJCQkJZXRoZXJfc3BlYzsKKwlfX3U4CQkJCQloZGF0YVs2MF07Cit9OworCitzdHJ1Y3QgZXRodG9vbF9mbG93X2V4dCB7CisJX19iZTE2CXZsYW5fZXR5cGU7CisJX19iZTE2CXZsYW5fdGNpOworCV9fYmUzMglkYXRhWzJdOworfTsKKwogLyoqCiAgKiBzdHJ1Y3QgZXRodG9vbF9yeF9mbG93X3NwZWMgLSBzcGVjaWZpY2F0aW9uIGZvciBSWCBmbG93IGZpbHRlcgogICogQGZsb3dfdHlwZTogVHlwZSBvZiBtYXRjaCB0byBwZXJmb3JtLCBlLmcuICVUQ1BfVjRfRkxPVwogICogQGhfdTogRmxvdyBmaWVsZHMgdG8gbWF0Y2ggKGRlcGVuZGVudCBvbiBAZmxvd190eXBlKQotICogQG1fdTogTWFza3MgZm9yIGZsb3cgZmllbGQgYml0cyB0byBiZSBpZ25vcmVkCisgKiBAaF9leHQ6IEFkZGl0aW9uYWwgZmllbGRzIHRvIG1hdGNoCisgKiBAbV91OiBNYXNrcyBmb3IgZmxvdyBmaWVsZCBiaXRzIHRvIGJlIG1hdGNoZWQKKyAqIEBtX2V4dDogTWFza3MgZm9yIGFkZGl0aW9uYWwgZmllbGQgYml0cyB0byBiZSBtYXRjaGVkCisgKglOb3RlLCBhbGwgYWRkaXRpb25hbCBmaWVsZHMgbXVzdCBiZSBpZ25vcmVkIHVubGVzcyBAZmxvd190eXBlCisgKglpbmNsdWRlcyB0aGUgJUZMT1dfRVhUIGZsYWcuCiAgKiBAcmluZ19jb29raWU6IFJYIHJpbmcvcXVldWUgaW5kZXggdG8gZGVsaXZlciB0bywgb3IgJVJYX0NMU19GTE9XX0RJU0MKICAqCWlmIHBhY2tldHMgc2hvdWxkIGJlIGRpc2NhcmRlZAogICogQGxvY2F0aW9uOiBJbmRleCBvZiBmaWx0ZXIgaW4gaGFyZHdhcmUgdGFibGUKICAqLwogc3RydWN0IGV0aHRvb2xfcnhfZmxvd19zcGVjIHsKIAlfX3UzMgkJZmxvd190eXBlOwotCXVuaW9uIHsKLQkJc3RydWN0IGV0aHRvb2xfdGNwaXA0X3NwZWMJCXRjcF9pcDRfc3BlYzsKLQkJc3RydWN0IGV0aHRvb2xfdGNwaXA0X3NwZWMJCXVkcF9pcDRfc3BlYzsKLQkJc3RydWN0IGV0aHRvb2xfdGNwaXA0X3NwZWMJCXNjdHBfaXA0X3NwZWM7Ci0JCXN0cnVjdCBldGh0b29sX2FoX2VzcGlwNF9zcGVjCQlhaF9pcDRfc3BlYzsKLQkJc3RydWN0IGV0aHRvb2xfYWhfZXNwaXA0X3NwZWMJCWVzcF9pcDRfc3BlYzsKLQkJc3RydWN0IGV0aHRvb2xfdXNyaXA0X3NwZWMJCXVzcl9pcDRfc3BlYzsKLQkJc3RydWN0IGV0aGhkcgkJCQlldGhlcl9zcGVjOwotCQlfX3U4CQkJCQloZGF0YVs3Ml07Ci0JfSBoX3UsIG1fdTsKKwl1bmlvbiBldGh0b29sX2Zsb3dfdW5pb24gaF91OworCXN0cnVjdCBldGh0b29sX2Zsb3dfZXh0IGhfZXh0OworCXVuaW9uIGV0aHRvb2xfZmxvd191bmlvbiBtX3U7CisJc3RydWN0IGV0aHRvb2xfZmxvd19leHQgbV9leHQ7CiAJX191NjQJCXJpbmdfY29va2llOwogCV9fdTMyCQlsb2NhdGlvbjsKIH07CkBAIC00NTgsMTYgKzUwNywxMCBAQAogCiBzdHJ1Y3QgY29tcGF0X2V0aHRvb2xfcnhfZmxvd19zcGVjIHsKIAl1MzIJCWZsb3dfdHlwZTsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBldGh0b29sX3RjcGlwNF9zcGVjCQl0Y3BfaXA0X3NwZWM7Ci0JCXN0cnVjdCBldGh0b29sX3RjcGlwNF9zcGVjCQl1ZHBfaXA0X3NwZWM7Ci0JCXN0cnVjdCBldGh0b29sX3RjcGlwNF9zcGVjCQlzY3RwX2lwNF9zcGVjOwotCQlzdHJ1Y3QgZXRodG9vbF9haF9lc3BpcDRfc3BlYwkJYWhfaXA0X3NwZWM7Ci0JCXN0cnVjdCBldGh0b29sX2FoX2VzcGlwNF9zcGVjCQllc3BfaXA0X3NwZWM7Ci0JCXN0cnVjdCBldGh0b29sX3VzcmlwNF9zcGVjCQl1c3JfaXA0X3NwZWM7Ci0JCXN0cnVjdCBldGhoZHIJCQkJZXRoZXJfc3BlYzsKLQkJdTgJCQkJCWhkYXRhWzcyXTsKLQl9IGhfdSwgbV91OworCXVuaW9uIGV0aHRvb2xfZmxvd191bmlvbiBoX3U7CisJc3RydWN0IGV0aHRvb2xfZmxvd19leHQgaF9leHQ7CisJdW5pb24gZXRodG9vbF9mbG93X3VuaW9uIG1fdTsKKwlzdHJ1Y3QgZXRodG9vbF9mbG93X2V4dCBtX2V4dDsKIAljb21wYXRfdTY0CXJpbmdfY29va2llOwogCXUzMgkJbG9jYXRpb247CiB9OwpAQCAtNTU4LDYgKzYwMSwyNiBAQAogCWNoYXIJZGF0YVtFVEhUT09MX0ZMQVNIX01BWF9GSUxFTkFNRV07CiB9OwogCisvKioKKyAqIHN0cnVjdCBldGh0b29sX2R1bXAgLSB1c2VkIGZvciByZXRyaWV2aW5nLCBzZXR0aW5nIGRldmljZSBkdW1wCisgKiBAY21kOiBDb21tYW5kIG51bWJlciAtICVFVEhUT09MX0dFVF9EVU1QX0ZMQUcsICVFVEhUT09MX0dFVF9EVU1QX0RBVEEsIG9yCisgKiAJJUVUSFRPT0xfU0VUX0RVTVAKKyAqIEB2ZXJzaW9uOiBGVyB2ZXJzaW9uIG9mIHRoZSBkdW1wLCBmaWxsZWQgaW4gYnkgZHJpdmVyCisgKiBAZmxhZzogZHJpdmVyIGRlcGVuZGVudCBmbGFnIGZvciBkdW1wIHNldHRpbmcsIGZpbGxlZCBpbiBieSBkcml2ZXIgZHVyaW5nCisgKiAJICBnZXQgYW5kIGZpbGxlZCBpbiBieSBldGh0b29sIGZvciBzZXQgb3BlcmF0aW9uCisgKiBAbGVuOiBsZW5ndGggb2YgZHVtcCBkYXRhLCB1c2VkIGFzIHRoZSBsZW5ndGggb2YgdGhlIHVzZXIgYnVmZmVyIG9uIGVudHJ5IHRvCisgKiAJICVFVEhUT09MX0dFVF9EVU1QX0RBVEEgYW5kIHRoaXMgaXMgcmV0dXJuZWQgYXMgZHVtcCBsZW5ndGggYnkgZHJpdmVyCisgKiAJIGZvciAlRVRIVE9PTF9HRVRfRFVNUF9GTEFHIGNvbW1hbmQKKyAqIEBkYXRhOiBkYXRhIGNvbGxlY3RlZCBmb3IgZ2V0IGR1bXAgZGF0YSBvcGVyYXRpb24KKyAqLworc3RydWN0IGV0aHRvb2xfZHVtcCB7CisJX191MzIJY21kOworCV9fdTMyCXZlcnNpb247CisJX191MzIJZmxhZzsKKwlfX3UzMglsZW47CisJX191OAlkYXRhWzBdOworfTsKKwogLyogZm9yIHJldHVybmluZyBhbmQgY2hhbmdpbmcgZmVhdHVyZSBzZXRzICovCiAKIC8qKgpAQCAtNjYzLDYgKzcyNiwyMiBAQAogCXVuc2lnbmVkIGludAkJY291bnQ7CiB9OwogCisvKioKKyAqIGVudW0gZXRodG9vbF9waHlzX2lkX3N0YXRlIC0gaW5kaWNhdG9yIHN0YXRlIGZvciBwaHlzaWNhbCBpZGVudGlmaWNhdGlvbgorICogQEVUSFRPT0xfSURfSU5BQ1RJVkU6IFBoeXNpY2FsIElEIGluZGljYXRvciBzaG91bGQgYmUgZGVhY3RpdmF0ZWQKKyAqIEBFVEhUT09MX0lEX0FDVElWRTogUGh5c2ljYWwgSUQgaW5kaWNhdG9yIHNob3VsZCBiZSBhY3RpdmF0ZWQKKyAqIEBFVEhUT09MX0lEX09OOiBMRUQgc2hvdWxkIGJlIHR1cm5lZCBvbiAodXNlZCBpZmYgJUVUSFRPT0xfSURfQUNUSVZFCisgKglpcyBub3Qgc3VwcG9ydGVkKQorICogQEVUSFRPT0xfSURfT0ZGOiBMRUQgc2hvdWxkIGJlIHR1cm5lZCBvZmYgKHVzZWQgaWZmICVFVEhUT09MX0lEX0FDVElWRQorICoJaXMgbm90IHN1cHBvcnRlZCkKKyAqLworZW51bSBldGh0b29sX3BoeXNfaWRfc3RhdGUgeworCUVUSFRPT0xfSURfSU5BQ1RJVkUsCisJRVRIVE9PTF9JRF9BQ1RJVkUsCisJRVRIVE9PTF9JRF9PTiwKKwlFVEhUT09MX0lEX09GRgorfTsKKwogc3RydWN0IG5ldF9kZXZpY2U7CiAKIC8qIFNvbWUgZ2VuZXJpYyBtZXRob2RzIGRyaXZlcnMgbWF5IHVzZSBpbiB0aGVpciBldGh0b29sX29wcyAqLwpAQCAtNjgzLDYzICs3NjIsMTMxIEBACiBib29sIGV0aHRvb2xfaW52YWxpZF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSwgdTMyIHN1cHBvcnRlZCk7CiAKIC8qKgotICogJmV0aHRvb2xfb3BzIC0gQWx0ZXIgYW5kIHJlcG9ydCBuZXR3b3JrIGRldmljZSBzZXR0aW5ncwotICogZ2V0X3NldHRpbmdzOiBHZXQgZGV2aWNlLXNwZWNpZmljIHNldHRpbmdzCi0gKiBzZXRfc2V0dGluZ3M6IFNldCBkZXZpY2Utc3BlY2lmaWMgc2V0dGluZ3MKLSAqIGdldF9kcnZpbmZvOiBSZXBvcnQgZHJpdmVyIGluZm9ybWF0aW9uCi0gKiBnZXRfcmVnczogR2V0IGRldmljZSByZWdpc3RlcnMKLSAqIGdldF93b2w6IFJlcG9ydCB3aGV0aGVyIFdha2Utb24tTGFuIGlzIGVuYWJsZWQKLSAqIHNldF93b2w6IFR1cm4gV2FrZS1vbi1MYW4gb24gb3Igb2ZmCi0gKiBnZXRfbXNnbGV2ZWw6IFJlcG9ydCBkcml2ZXIgbWVzc2FnZSBsZXZlbAotICogc2V0X21zZ2xldmVsOiBTZXQgZHJpdmVyIG1lc3NhZ2UgbGV2ZWwKLSAqIG53YXlfcmVzZXQ6IFJlc3RhcnQgYXV0b25lZ290aWF0aW9uCi0gKiBnZXRfbGluazogR2V0IGxpbmsgc3RhdHVzCi0gKiBnZXRfZWVwcm9tOiBSZWFkIGRhdGEgZnJvbSB0aGUgZGV2aWNlIEVFUFJPTQotICogc2V0X2VlcHJvbTogV3JpdGUgZGF0YSB0byB0aGUgZGV2aWNlIEVFUFJPTQotICogZ2V0X2NvYWxlc2NlOiBHZXQgaW50ZXJydXB0IGNvYWxlc2NpbmcgcGFyYW1ldGVycwotICogc2V0X2NvYWxlc2NlOiBTZXQgaW50ZXJydXB0IGNvYWxlc2NpbmcgcGFyYW1ldGVycwotICogZ2V0X3JpbmdwYXJhbTogUmVwb3J0IHJpbmcgc2l6ZXMKLSAqIHNldF9yaW5ncGFyYW06IFNldCByaW5nIHNpemVzCi0gKiBnZXRfcGF1c2VwYXJhbTogUmVwb3J0IHBhdXNlIHBhcmFtZXRlcnMKLSAqIHNldF9wYXVzZXBhcmFtOiBTZXQgcGF1c2UgcGFyYW1ldGVycwotICogZ2V0X3J4X2NzdW06IFJlcG9ydCB3aGV0aGVyIHJlY2VpdmUgY2hlY2tzdW1zIGFyZSB0dXJuZWQgb24gb3Igb2ZmCi0gKiBzZXRfcnhfY3N1bTogVHVybiByZWNlaXZlIGNoZWNrc3VtIG9uIG9yIG9mZgotICogZ2V0X3R4X2NzdW06IFJlcG9ydCB3aGV0aGVyIHRyYW5zbWl0IGNoZWNrc3VtcyBhcmUgdHVybmVkIG9uIG9yIG9mZgotICogc2V0X3R4X2NzdW06IFR1cm4gdHJhbnNtaXQgY2hlY2tzdW1zIG9uIG9yIG9mZgotICogZ2V0X3NnOiBSZXBvcnQgd2hldGhlciBzY2F0dGVyLWdhdGhlciBpcyBlbmFibGVkCi0gKiBzZXRfc2c6IFR1cm4gc2NhdHRlci1nYXRoZXIgb24gb3Igb2ZmCi0gKiBnZXRfdHNvOiBSZXBvcnQgd2hldGhlciBUQ1Agc2VnbWVudGF0aW9uIG9mZmxvYWQgaXMgZW5hYmxlZAotICogc2V0X3RzbzogVHVybiBUQ1Agc2VnbWVudGF0aW9uIG9mZmxvYWQgb24gb3Igb2ZmCi0gKiBnZXRfdWZvOiBSZXBvcnQgd2hldGhlciBVRFAgZnJhZ21lbnRhdGlvbiBvZmZsb2FkIGlzIGVuYWJsZWQKLSAqIHNldF91Zm86IFR1cm4gVURQIGZyYWdtZW50YXRpb24gb2ZmbG9hZCBvbiBvciBvZmYKLSAqIHNlbGZfdGVzdDogUnVuIHNwZWNpZmllZCBzZWxmLXRlc3RzCi0gKiBnZXRfc3RyaW5nczogUmV0dXJuIGEgc2V0IG9mIHN0cmluZ3MgdGhhdCBkZXNjcmliZSB0aGUgcmVxdWVzdGVkIG9iamVjdHMKLSAqIHBoeXNfaWQ6IElkZW50aWZ5IHRoZSBkZXZpY2UKLSAqIGdldF9zdGF0czogUmV0dXJuIHN0YXRpc3RpY3MgYWJvdXQgdGhlIGRldmljZQotICogZ2V0X2ZsYWdzOiBnZXQgMzItYml0IGZsYWdzIGJpdG1hcAotICogc2V0X2ZsYWdzOiBzZXQgMzItYml0IGZsYWdzIGJpdG1hcAotICoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIGdldF9zZXR0aW5nczoKLSAqCUBnZXRfc2V0dGluZ3MgaXMgcGFzc2VkIGFuICZldGh0b29sX2NtZCB0byBmaWxsIGluLiAgSXQgcmV0dXJucwotICoJYW4gbmVnYXRpdmUgZXJybm8gb3IgemVyby4KLSAqCi0gKiBzZXRfc2V0dGluZ3M6Ci0gKglAc2V0X3NldHRpbmdzIGlzIHBhc3NlZCBhbiAmZXRodG9vbF9jbWQgYW5kIHNob3VsZCBhdHRlbXB0IHRvIHNldAotICoJYWxsIHRoZSBzZXR0aW5ncyB0aGlzIGRldmljZSBzdXBwb3J0cy4gIEl0IG1heSByZXR1cm4gYW4gZXJyb3IgdmFsdWUKLSAqCWlmIHNvbWV0aGluZyBnb2VzIHdyb25nIChvdGhlcndpc2UgMCkuCi0gKgotICogZ2V0X2VlcHJvbToKKyAqIHN0cnVjdCBldGh0b29sX29wcyAtIG9wdGlvbmFsIG5ldGRldiBvcGVyYXRpb25zCisgKiBAZ2V0X3NldHRpbmdzOiBHZXQgdmFyaW91cyBkZXZpY2Ugc2V0dGluZ3MgaW5jbHVkaW5nIEV0aGVybmV0IGxpbmsKKyAqCXNldHRpbmdzLiBUaGUgQGNtZCBwYXJhbWV0ZXIgaXMgZXhwZWN0ZWQgdG8gaGF2ZSBiZWVuIGNsZWFyZWQKKyAqCWJlZm9yZSBnZXRfc2V0dGluZ3MgaXMgY2FsbGVkLiBSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvcgorICoJemVyby4KKyAqIEBzZXRfc2V0dGluZ3M6IFNldCB2YXJpb3VzIGRldmljZSBzZXR0aW5ncyBpbmNsdWRpbmcgRXRoZXJuZXQgbGluaworICoJc2V0dGluZ3MuICBSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvciB6ZXJvLgorICogQGdldF9kcnZpbmZvOiBSZXBvcnQgZHJpdmVyL2RldmljZSBpbmZvcm1hdGlvbi4gIFNob3VsZCBvbmx5IHNldCB0aGUKKyAqCUBkcml2ZXIsIEB2ZXJzaW9uLCBAZndfdmVyc2lvbiBhbmQgQGJ1c19pbmZvIGZpZWxkcy4gIElmIG5vdAorICoJaW1wbGVtZW50ZWQsIHRoZSBAZHJpdmVyIGFuZCBAYnVzX2luZm8gZmllbGRzIHdpbGwgYmUgZmlsbGVkIGluCisgKglhY2NvcmRpbmcgdG8gdGhlIG5ldGRldidzIHBhcmVudCBkZXZpY2UuCisgKiBAZ2V0X3JlZ3NfbGVuOiBHZXQgYnVmZmVyIGxlbmd0aCByZXF1aXJlZCBmb3IgQGdldF9yZWdzCisgKiBAZ2V0X3JlZ3M6IEdldCBkZXZpY2UgcmVnaXN0ZXJzCisgKiBAZ2V0X3dvbDogUmVwb3J0IHdoZXRoZXIgV2FrZS1vbi1MYW4gaXMgZW5hYmxlZAorICogQHNldF93b2w6IFR1cm4gV2FrZS1vbi1MYW4gb24gb3Igb2ZmLiAgUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUKKyAqCW9yIHplcm8uCisgKiBAZ2V0X21zZ2xldmVsOiBSZXBvcnQgZHJpdmVyIG1lc3NhZ2UgbGV2ZWwuICBUaGlzIHNob3VsZCBiZSB0aGUgdmFsdWUKKyAqCW9mIHRoZSBAbXNnX2VuYWJsZSBmaWVsZCB1c2VkIGJ5IG5ldGlmIGxvZ2dpbmcgZnVuY3Rpb25zLgorICogQHNldF9tc2dsZXZlbDogU2V0IGRyaXZlciBtZXNzYWdlIGxldmVsCisgKiBAbndheV9yZXNldDogUmVzdGFydCBhdXRvbmVnb3RpYXRpb24uICBSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZQorICoJb3IgemVyby4KKyAqIEBnZXRfbGluazogUmVwb3J0IHdoZXRoZXIgcGh5c2ljYWwgbGluayBpcyB1cC4gIFdpbGwgb25seSBiZSBjYWxsZWQgaWYKKyAqCXRoZSBuZXRkZXYgaXMgdXAuICBTaG91bGQgdXN1YWxseSBiZSBzZXQgdG8gZXRodG9vbF9vcF9nZXRfbGluaygpLAorICoJd2hpY2ggdXNlcyBuZXRpZl9jYXJyaWVyX29rKCkuCisgKiBAZ2V0X2VlcHJvbTogUmVhZCBkYXRhIGZyb20gdGhlIGRldmljZSBFRVBST00uCiAgKglTaG91bGQgZmlsbCBpbiB0aGUgbWFnaWMgZmllbGQuICBEb24ndCBuZWVkIHRvIGNoZWNrIGxlbiBmb3IgemVybwogICoJb3Igd3JhcGFyb3VuZC4gIEZpbGwgaW4gdGhlIGRhdGEgYXJndW1lbnQgd2l0aCB0aGUgZWVwcm9tIHZhbHVlcwogICoJZnJvbSBvZmZzZXQgdG8gb2Zmc2V0ICsgbGVuLiAgVXBkYXRlIGxlbiB0byB0aGUgYW1vdW50IHJlYWQuCiAgKglSZXR1cm5zIGFuIGVycm9yIG9yIHplcm8uCi0gKgotICogc2V0X2VlcHJvbToKKyAqIEBzZXRfZWVwcm9tOiBXcml0ZSBkYXRhIHRvIHRoZSBkZXZpY2UgRUVQUk9NLgogICoJU2hvdWxkIHZhbGlkYXRlIHRoZSBtYWdpYyBmaWVsZC4gIERvbid0IG5lZWQgdG8gY2hlY2sgbGVuIGZvciB6ZXJvCiAgKglvciB3cmFwYXJvdW5kLiAgVXBkYXRlIGxlbiB0byB0aGUgYW1vdW50IHdyaXR0ZW4uICBSZXR1cm5zIGFuIGVycm9yCiAgKglvciB6ZXJvLgorICogQGdldF9jb2FsZXNjZTogR2V0IGludGVycnVwdCBjb2FsZXNjaW5nIHBhcmFtZXRlcnMuICBSZXR1cm5zIGEgbmVnYXRpdmUKKyAqCWVycm9yIGNvZGUgb3IgemVyby4KKyAqIEBzZXRfY29hbGVzY2U6IFNldCBpbnRlcnJ1cHQgY29hbGVzY2luZyBwYXJhbWV0ZXJzLiAgUmV0dXJucyBhIG5lZ2F0aXZlCisgKgllcnJvciBjb2RlIG9yIHplcm8uCisgKiBAZ2V0X3JpbmdwYXJhbTogUmVwb3J0IHJpbmcgc2l6ZXMKKyAqIEBzZXRfcmluZ3BhcmFtOiBTZXQgcmluZyBzaXplcy4gIFJldHVybnMgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9yIHplcm8uCisgKiBAZ2V0X3BhdXNlcGFyYW06IFJlcG9ydCBwYXVzZSBwYXJhbWV0ZXJzCisgKiBAc2V0X3BhdXNlcGFyYW06IFNldCBwYXVzZSBwYXJhbWV0ZXJzLiAgUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUKKyAqCW9yIHplcm8uCisgKiBAZ2V0X3J4X2NzdW06IERlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIHRoZSBuZXRkZXYgZmVhdHVyZSAlTkVUSUZfRl9SWENTVU0uCisgKglSZXBvcnQgd2hldGhlciByZWNlaXZlIGNoZWNrc3VtcyBhcmUgdHVybmVkIG9uIG9yIG9mZi4KKyAqIEBzZXRfcnhfY3N1bTogRGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgZ2VuZXJpYyBuZXRkZXYgZmVhdHVyZXMuICBUdXJuCisgKglyZWNlaXZlIGNoZWNrc3VtIG9uIG9yIG9mZi4gIFJldHVybnMgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9yIHplcm8uCisgKiBAZ2V0X3R4X2NzdW06IERlcHJlY2F0ZWQgYXMgcmVkdW5kYW50LiBSZXBvcnQgd2hldGhlciB0cmFuc21pdCBjaGVja3N1bXMKKyAqCWFyZSB0dXJuZWQgb24gb3Igb2ZmLgorICogQHNldF90eF9jc3VtOiBEZXByZWNhdGVkIGluIGZhdm91ciBvZiBnZW5lcmljIG5ldGRldiBmZWF0dXJlcy4gIFR1cm4KKyAqCXRyYW5zbWl0IGNoZWNrc3VtcyBvbiBvciBvZmYuICBSZXR1cm5zIGEgZWdhdGl2ZSBlcnJvciBjb2RlIG9yIHplcm8uCisgKiBAZ2V0X3NnOiBEZXByZWNhdGVkIGFzIHJlZHVuZGFudC4gIFJlcG9ydCB3aGV0aGVyIHNjYXR0ZXItZ2F0aGVyIGlzCisgKgllbmFibGVkLiAgCisgKiBAc2V0X3NnOiBEZXByZWNhdGVkIGluIGZhdm91ciBvZiBnZW5lcmljIG5ldGRldiBmZWF0dXJlcy4gIFR1cm4KKyAqCXNjYXR0ZXItZ2F0aGVyIG9uIG9yIG9mZi4gUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3IgemVyby4KKyAqIEBnZXRfdHNvOiBEZXByZWNhdGVkIGFzIHJlZHVuZGFudC4gIFJlcG9ydCB3aGV0aGVyIFRDUCBzZWdtZW50YXRpb24KKyAqCW9mZmxvYWQgaXMgZW5hYmxlZC4KKyAqIEBzZXRfdHNvOiBEZXByZWNhdGVkIGluIGZhdm91ciBvZiBnZW5lcmljIG5ldGRldiBmZWF0dXJlcy4gIFR1cm4gVENQCisgKglzZWdtZW50YXRpb24gb2ZmbG9hZCBvbiBvciBvZmYuICBSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvciB6ZXJvLgorICogQHNlbGZfdGVzdDogUnVuIHNwZWNpZmllZCBzZWxmLXRlc3RzCisgKiBAZ2V0X3N0cmluZ3M6IFJldHVybiBhIHNldCBvZiBzdHJpbmdzIHRoYXQgZGVzY3JpYmUgdGhlIHJlcXVlc3RlZCBvYmplY3RzCisgKiBAc2V0X3BoeXNfaWQ6IElkZW50aWZ5IHRoZSBwaHlzaWNhbCBkZXZpY2VzLCBlLmcuIGJ5IGZsYXNoaW5nIGFuIExFRAorICoJYXR0YWNoZWQgdG8gaXQuICBUaGUgaW1wbGVtZW50YXRpb24gbWF5IHVwZGF0ZSB0aGUgaW5kaWNhdG9yCisgKglhc3luY2hyb25vdXNseSBvciBzeW5jaHJvbm91c2x5LCBidXQgaW4gZWl0aGVyIGNhc2UgaXQgbXVzdCByZXR1cm4KKyAqCXF1aWNrbHkuICBJdCBpcyBpbml0aWFsbHkgY2FsbGVkIHdpdGggdGhlIGFyZ3VtZW50ICVFVEhUT09MX0lEX0FDVElWRSwKKyAqCWFuZCBtdXN0IGVpdGhlciBhY3RpdmF0ZSBhc3luY2hyb25vdXMgdXBkYXRlcyBhbmQgcmV0dXJuIHplcm8sIHJldHVybgorICoJYSBuZWdhdGl2ZSBlcnJvciBvciByZXR1cm4gYSBwb3NpdGl2ZSBmcmVxdWVuY3kgZm9yIHN5bmNocm9ub3VzCisgKglpbmRpY2F0aW9uIChlLmcuIDEgZm9yIG9uZSBvbi9vZmYgY3ljbGUgcGVyIHNlY29uZCkuICBJZiBpdCByZXR1cm5zCisgKglhIGZyZXF1ZW5jeSB0aGVuIGl0IHdpbGwgYmUgY2FsbGVkIGFnYWluIGF0IGludGVydmFscyB3aXRoIHRoZQorICoJYXJndW1lbnQgJUVUSFRPT0xfSURfT04gb3IgJUVUSFRPT0xfSURfT0ZGIGFuZCBzaG91bGQgc2V0IHRoZSBzdGF0ZSBvZgorICoJdGhlIGluZGljYXRvciBhY2NvcmRpbmdseS4gIEZpbmFsbHksIGl0IGlzIGNhbGxlZCB3aXRoIHRoZSBhcmd1bWVudAorICoJJUVUSFRPT0xfSURfSU5BQ1RJVkUgYW5kIG11c3QgZGVhY3RpdmF0ZSB0aGUgaW5kaWNhdG9yLiAgUmV0dXJucyBhCisgKgluZWdhdGl2ZSBlcnJvciBjb2RlIG9yIHplcm8uCisgKiBAZ2V0X2V0aHRvb2xfc3RhdHM6IFJldHVybiBleHRlbmRlZCBzdGF0aXN0aWNzIGFib3V0IHRoZSBkZXZpY2UuCisgKglUaGlzIGlzIG9ubHkgdXNlZnVsIGlmIHRoZSBkZXZpY2UgbWFpbnRhaW5zIHN0YXRpc3RpY3Mgbm90CisgKglpbmNsdWRlZCBpbiAmc3RydWN0IHJ0bmxfbGlua19zdGF0czY0LgorICogQGJlZ2luOiBGdW5jdGlvbiB0byBiZSBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciBvcGVyYXRpb24uICBSZXR1cm5zIGEKKyAqCW5lZ2F0aXZlIGVycm9yIGNvZGUgb3IgemVyby4KKyAqIEBjb21wbGV0ZTogRnVuY3Rpb24gdG8gYmUgY2FsbGVkIGFmdGVyIGFueSBvdGhlciBvcGVyYXRpb24gZXhjZXB0CisgKglAYmVnaW4uICBXaWxsIGJlIGNhbGxlZCBldmVuIGlmIHRoZSBvdGhlciBvcGVyYXRpb24gZmFpbGVkLgorICogQGdldF91Zm86IERlcHJlY2F0ZWQgYXMgcmVkdW5kYW50LiAgUmVwb3J0IHdoZXRoZXIgVURQIGZyYWdtZW50YXRpb24KKyAqCW9mZmxvYWQgaXMgZW5hYmxlZC4KKyAqIEBzZXRfdWZvOiBEZXByZWNhdGVkIGluIGZhdm91ciBvZiBnZW5lcmljIG5ldGRldiBmZWF0dXJlcy4gIFR1cm4gVURQCisgKglmcmFnbWVudGF0aW9uIG9mZmxvYWQgb24gb3Igb2ZmLiAgUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3IgemVyby4KKyAqIEBnZXRfZmxhZ3M6IERlcHJlY2F0ZWQgYXMgcmVkdW5kYW50LiAgUmVwb3J0IGZlYXR1cmVzIGluY2x1ZGVkIGluCisgKgkmZW51bSBldGh0b29sX2ZsYWdzIHRoYXQgYXJlIGVuYWJsZWQuICAKKyAqIEBzZXRfZmxhZ3M6IERlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIGdlbmVyaWMgbmV0ZGV2IGZlYXR1cmVzLiAgVHVybgorICoJZmVhdHVyZXMgaW5jbHVkZWQgaW4gJmVudW0gZXRodG9vbF9mbGFncyBvbiBvciBvZmYuICBSZXR1cm5zIGEKKyAqCW5lZ2F0aXZlIGVycm9yIGNvZGUgb3IgemVyby4KKyAqIEBnZXRfcHJpdl9mbGFnczogUmVwb3J0IGRyaXZlci1zcGVjaWZpYyBmZWF0dXJlIGZsYWdzLgorICogQHNldF9wcml2X2ZsYWdzOiBTZXQgZHJpdmVyLXNwZWNpZmljIGZlYXR1cmUgZmxhZ3MuICBSZXR1cm5zIGEgbmVnYXRpdmUKKyAqCWVycm9yIGNvZGUgb3IgemVyby4KKyAqIEBnZXRfc3NldF9jb3VudDogR2V0IG51bWJlciBvZiBzdHJpbmdzIHRoYXQgQGdldF9zdHJpbmdzIHdpbGwgd3JpdGUuCisgKiBAZ2V0X3J4bmZjOiBHZXQgUlggZmxvdyBjbGFzc2lmaWNhdGlvbiBydWxlcy4gIFJldHVybnMgYSBuZWdhdGl2ZQorICoJZXJyb3IgY29kZSBvciB6ZXJvLgorICogQHNldF9yeG5mYzogU2V0IFJYIGZsb3cgY2xhc3NpZmljYXRpb24gcnVsZXMuICBSZXR1cm5zIGEgbmVnYXRpdmUKKyAqCWVycm9yIGNvZGUgb3IgemVyby4KKyAqIEBmbGFzaF9kZXZpY2U6IFdyaXRlIGEgZmlybXdhcmUgaW1hZ2UgdG8gZGV2aWNlJ3MgZmxhc2ggbWVtb3J5LgorICoJUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3IgemVyby4KKyAqIEByZXNldDogUmVzZXQgKHBhcnQgb2YpIHRoZSBkZXZpY2UsIGFzIHNwZWNpZmllZCBieSBhIGJpdG1hc2sgb2YKKyAqCWZsYWdzIGZyb20gJmVudW0gZXRodG9vbF9yZXNldF9mbGFncy4gIFJldHVybnMgYSBuZWdhdGl2ZQorICoJZXJyb3IgY29kZSBvciB6ZXJvLgorICogQHNldF9yeF9udHVwbGU6IFNldCBhbiBSWCBuLXR1cGxlIHJ1bGUuICBSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZQorICoJb3IgemVyby4KKyAqIEBnZXRfcnhfbnR1cGxlOiBEZXByZWNhdGVkLgorICogQGdldF9yeGZoX2luZGlyOiBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBSWCBmbG93IGhhc2ggaW5kaXJlY3Rpb24gdGFibGUuCisgKglSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvciB6ZXJvLgorICogQHNldF9yeGZoX2luZGlyOiBTZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBSWCBmbG93IGhhc2ggaW5kaXJlY3Rpb24gdGFibGUuCisgKglSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvciB6ZXJvLgorICogQGdldF9jaGFubmVsczogR2V0IG51bWJlciBvZiBjaGFubmVscy4KKyAqIEBzZXRfY2hhbm5lbHM6IFNldCBudW1iZXIgb2YgY2hhbm5lbHMuICBSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvcgorICoJemVyby4KKyAqIEBnZXRfZHVtcF9mbGFnOiBHZXQgZHVtcCBmbGFnIGluZGljYXRpbmcgY3VycmVudCBkdW1wIGxlbmd0aCwgdmVyc2lvbiwKKyAqIAkJICAgYW5kIGZsYWcgb2YgdGhlIGRldmljZS4KKyAqIEBnZXRfZHVtcF9kYXRhOiBHZXQgZHVtcCBkYXRhLgorICogQHNldF9kdW1wOiBTZXQgZHVtcCBzcGVjaWZpYyBmbGFncyB0byB0aGUgZGV2aWNlLgorICoKKyAqIEFsbCBvcGVyYXRpb25zIGFyZSBvcHRpb25hbCAoaS5lLiB0aGUgZnVuY3Rpb24gcG9pbnRlciBtYXkgYmUgc2V0CisgKiB0byAlTlVMTCkgYW5kIGNhbGxlcnMgbXVzdCB0YWtlIHRoaXMgaW50byBhY2NvdW50LiAgQ2FsbGVycyBtdXN0CisgKiBob2xkIHRoZSBSVE5MLCBleGNlcHQgdGhhdCBmb3IgQGdldF9kcnZpbmZvIHRoZSBjYWxsZXIgbWF5IG9yIG1heQorICogbm90IGhvbGQgdGhlIFJUTkwuCisgKgorICogU2VlIHRoZSBzdHJ1Y3R1cmVzIHVzZWQgYnkgdGhlc2Ugb3BlcmF0aW9ucyBmb3IgZnVydGhlciBkb2N1bWVudGF0aW9uLgorICoKKyAqIFNlZSAmc3RydWN0IG5ldF9kZXZpY2UgYW5kICZzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZm9yIGRvY3VtZW50YXRpb24KKyAqIG9mIHRoZSBnZW5lcmljIG5ldGRldiBmZWF0dXJlcyBpbnRlcmZhY2UuCiAgKi8KIHN0cnVjdCBldGh0b29sX29wcyB7CiAJaW50CSgqZ2V0X3NldHRpbmdzKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZXRodG9vbF9jbWQgKik7CkBAIC03NzgsNyArOTI1LDcgQEAKIAlpbnQJKCpzZXRfdHNvKShzdHJ1Y3QgbmV0X2RldmljZSAqLCB1MzIpOwogCXZvaWQJKCpzZWxmX3Rlc3QpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX3Rlc3QgKiwgdTY0ICopOwogCXZvaWQJKCpnZXRfc3RyaW5ncykoc3RydWN0IG5ldF9kZXZpY2UgKiwgdTMyIHN0cmluZ3NldCwgdTggKik7Ci0JaW50CSgqcGh5c19pZCkoc3RydWN0IG5ldF9kZXZpY2UgKiwgdTMyKTsKKwlpbnQJKCpzZXRfcGh5c19pZCkoc3RydWN0IG5ldF9kZXZpY2UgKiwgZW51bSBldGh0b29sX3BoeXNfaWRfc3RhdGUpOwogCXZvaWQJKCpnZXRfZXRodG9vbF9zdGF0cykoc3RydWN0IG5ldF9kZXZpY2UgKiwKIAkJCQkgICAgIHN0cnVjdCBldGh0b29sX3N0YXRzICosIHU2NCAqKTsKIAlpbnQJKCpiZWdpbikoc3RydWN0IG5ldF9kZXZpY2UgKik7CkBAIC04MDIsNiArOTQ5LDEzIEBACiAJCQkJICBzdHJ1Y3QgZXRodG9vbF9yeGZoX2luZGlyICopOwogCWludAkoKnNldF9yeGZoX2luZGlyKShzdHJ1Y3QgbmV0X2RldmljZSAqLAogCQkJCSAgY29uc3Qgc3RydWN0IGV0aHRvb2xfcnhmaF9pbmRpciAqKTsKKwl2b2lkCSgqZ2V0X2NoYW5uZWxzKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZXRodG9vbF9jaGFubmVscyAqKTsKKwlpbnQJKCpzZXRfY2hhbm5lbHMpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX2NoYW5uZWxzICopOworCWludAkoKmdldF9kdW1wX2ZsYWcpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX2R1bXAgKik7CisJaW50CSgqZ2V0X2R1bXBfZGF0YSkoc3RydWN0IG5ldF9kZXZpY2UgKiwKKwkJCQkgc3RydWN0IGV0aHRvb2xfZHVtcCAqLCB2b2lkICopOworCWludAkoKnNldF9kdW1wKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZXRodG9vbF9kdW1wICopOworCiB9OwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIApAQCAtODcwLDYgKzEwMjQsMTEgQEAKIAogI2RlZmluZSBFVEhUT09MX0dGRUFUVVJFUwkweDAwMDAwMDNhIC8qIEdldCBkZXZpY2Ugb2ZmbG9hZCBzZXR0aW5ncyAqLwogI2RlZmluZSBFVEhUT09MX1NGRUFUVVJFUwkweDAwMDAwMDNiIC8qIENoYW5nZSBkZXZpY2Ugb2ZmbG9hZCBzZXR0aW5ncyAqLworI2RlZmluZSBFVEhUT09MX0dDSEFOTkVMUwkweDAwMDAwMDNjIC8qIEdldCBubyBvZiBjaGFubmVscyAqLworI2RlZmluZSBFVEhUT09MX1NDSEFOTkVMUwkweDAwMDAwMDNkIC8qIFNldCBubyBvZiBjaGFubmVscyAqLworI2RlZmluZSBFVEhUT09MX1NFVF9EVU1QCTB4MDAwMDAwM2UgLyogU2V0IGR1bXAgc2V0dGluZ3MgKi8KKyNkZWZpbmUgRVRIVE9PTF9HRVRfRFVNUF9GTEFHCTB4MDAwMDAwM2YgLyogR2V0IGR1bXAgc2V0dGluZ3MgKi8KKyNkZWZpbmUgRVRIVE9PTF9HRVRfRFVNUF9EQVRBCTB4MDAwMDAwNDAgLyogR2V0IGR1bXAgZGF0YSAqLwogCiAvKiBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgY29kZSAqLwogI2RlZmluZSBTUEFSQ19FVEhfR1NFVAkJRVRIVE9PTF9HU0VUCkBAIC04OTcsNiArMTA1Niw4IEBACiAjZGVmaW5lIFNVUFBPUlRFRF8xMDAwMGJhc2VLWDRfRnVsbAkoMSA8PCAxOCkKICNkZWZpbmUgU1VQUE9SVEVEXzEwMDAwYmFzZUtSX0Z1bGwJKDEgPDwgMTkpCiAjZGVmaW5lIFNVUFBPUlRFRF8xMDAwMGJhc2VSX0ZFQwkoMSA8PCAyMCkKKyNkZWZpbmUgU1VQUE9SVEVEXzIwMDAwYmFzZU1MRDJfRnVsbAkoMSA8PCAyMSkKKyNkZWZpbmUgU1VQUE9SVEVEXzIwMDAwYmFzZUtSMl9GdWxsCSgxIDw8IDIyKQogCiAvKiBJbmRpY2F0ZXMgd2hhdCBmZWF0dXJlcyBhcmUgYWR2ZXJ0aXNlZCBieSB0aGUgaW50ZXJmYWNlLiAqLwogI2RlZmluZSBBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZgkJKDEgPDwgMCkKQEAgLTkyMCw2ICsxMDgxLDggQEAKICNkZWZpbmUgQURWRVJUSVNFRF8xMDAwMGJhc2VLWDRfRnVsbAkoMSA8PCAxOCkKICNkZWZpbmUgQURWRVJUSVNFRF8xMDAwMGJhc2VLUl9GdWxsCSgxIDw8IDE5KQogI2RlZmluZSBBRFZFUlRJU0VEXzEwMDAwYmFzZVJfRkVDCSgxIDw8IDIwKQorI2RlZmluZSBBRFZFUlRJU0VEXzIwMDAwYmFzZU1MRDJfRnVsbAkoMSA8PCAyMSkKKyNkZWZpbmUgQURWRVJUSVNFRF8yMDAwMGJhc2VLUjJfRnVsbAkoMSA8PCAyMikKIAogLyogVGhlIGZvbGxvd2luZyBhcmUgYWxsIGludm9sdmVkIGluIGZvcmNpbmcgYSBwYXJ0aWN1bGFyIGxpbmsKICAqIG1vZGUgZm9yIHRoZSBkZXZpY2UgZm9yIHNldHRpbmcgdGhpbmdzLiAgV2hlbiBnZXR0aW5nIHRoZQpAQCAtOTkyLDYgKzExNTUsOCBAQAogI2RlZmluZQlJUFY0X0ZMT1cJMHgxMAkvKiBoYXNoIG9ubHkgKi8KICNkZWZpbmUJSVBWNl9GTE9XCTB4MTEJLyogaGFzaCBvbmx5ICovCiAjZGVmaW5lCUVUSEVSX0ZMT1cJMHgxMgkvKiBzcGVjIG9ubHkgKGV0aGVyX3NwZWMpICovCisvKiBGbGFnIHRvIGVuYWJsZSBhZGRpdGlvbmFsIGZpZWxkcyBpbiBzdHJ1Y3QgZXRodG9vbF9yeF9mbG93X3NwZWMgKi8KKyNkZWZpbmUJRkxPV19FWFQJMHg4MDAwMDAwMAogCiAvKiBMMy1MNCBuZXR3b3JrIHRyYWZmaWMgZmxvdyBoYXNoIG9wdGlvbnMgKi8KICNkZWZpbmUJUlhIX0wyREEJKDEgPDwgMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oCmluZGV4IDQ1MjY2YjcuLjllZTNmOWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaApAQCAtMTMxLDEwICsxMzEsMTYgQEAKICNkZWZpbmUgU0tGX0xMX09GRiAgICAoLTB4MjAwMDAwKQogCiAjaWZkZWYgX19LRVJORUxfXworCitzdHJ1Y3Qgc2tfYnVmZjsKK3N0cnVjdCBzb2NrOworCiBzdHJ1Y3Qgc2tfZmlsdGVyCiB7CiAJYXRvbWljX3QJCXJlZmNudDsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAJbGVuOwkvKiBOdW1iZXIgb2YgZmlsdGVyIGJsb2NrcyAqLworCXVuc2lnbmVkIGludAkJKCpicGZfZnVuYykoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgIGNvbnN0IHN0cnVjdCBzb2NrX2ZpbHRlciAqZmlsdGVyKTsKIAlzdHJ1Y3QgcmN1X2hlYWQJCXJjdTsKIAlzdHJ1Y3Qgc29ja19maWx0ZXIgICAgIAlpbnNuc1swXTsKIH07CkBAIC0xNDQsMTUgKzE1MCw4NiBAQAogCXJldHVybiBmcC0+bGVuICogc2l6ZW9mKHN0cnVjdCBzb2NrX2ZpbHRlcikgKyBzaXplb2YoKmZwKTsKIH0KIAotc3RydWN0IHNrX2J1ZmY7Ci1zdHJ1Y3Qgc29jazsKLQogZXh0ZXJuIGludCBza19maWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgc2tfcnVuX2ZpbHRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgY29uc3Qgc3RydWN0IHNvY2tfZmlsdGVyICpmaWx0ZXIpOwogZXh0ZXJuIGludCBza19hdHRhY2hfZmlsdGVyKHN0cnVjdCBzb2NrX2Zwcm9nICpmcHJvZywgc3RydWN0IHNvY2sgKnNrKTsKIGV4dGVybiBpbnQgc2tfZGV0YWNoX2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2spOwogZXh0ZXJuIGludCBza19jaGtfZmlsdGVyKHN0cnVjdCBzb2NrX2ZpbHRlciAqZmlsdGVyLCBpbnQgZmxlbik7CisKKyNpZmRlZiBDT05GSUdfQlBGX0pJVAorZXh0ZXJuIHZvaWQgYnBmX2ppdF9jb21waWxlKHN0cnVjdCBza19maWx0ZXIgKmZwKTsKK2V4dGVybiB2b2lkIGJwZl9qaXRfZnJlZShzdHJ1Y3Qgc2tfZmlsdGVyICpmcCk7CisjZGVmaW5lIFNLX1JVTl9GSUxURVIoRklMVEVSLCBTS0IpICgqRklMVEVSLT5icGZfZnVuYykoU0tCLCBGSUxURVItPmluc25zKQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBicGZfaml0X2NvbXBpbGUoc3RydWN0IHNrX2ZpbHRlciAqZnApCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgYnBmX2ppdF9mcmVlKHN0cnVjdCBza19maWx0ZXIgKmZwKQoreworfQorI2RlZmluZSBTS19SVU5fRklMVEVSKEZJTFRFUiwgU0tCKSBza19ydW5fZmlsdGVyKFNLQiwgRklMVEVSLT5pbnNucykKKyNlbmRpZgorCitlbnVtIHsKKwlCUEZfU19SRVRfSyA9IDEsCisJQlBGX1NfUkVUX0EsCisJQlBGX1NfQUxVX0FERF9LLAorCUJQRl9TX0FMVV9BRERfWCwKKwlCUEZfU19BTFVfU1VCX0ssCisJQlBGX1NfQUxVX1NVQl9YLAorCUJQRl9TX0FMVV9NVUxfSywKKwlCUEZfU19BTFVfTVVMX1gsCisJQlBGX1NfQUxVX0RJVl9YLAorCUJQRl9TX0FMVV9BTkRfSywKKwlCUEZfU19BTFVfQU5EX1gsCisJQlBGX1NfQUxVX09SX0ssCisJQlBGX1NfQUxVX09SX1gsCisJQlBGX1NfQUxVX0xTSF9LLAorCUJQRl9TX0FMVV9MU0hfWCwKKwlCUEZfU19BTFVfUlNIX0ssCisJQlBGX1NfQUxVX1JTSF9YLAorCUJQRl9TX0FMVV9ORUcsCisJQlBGX1NfTERfV19BQlMsCisJQlBGX1NfTERfSF9BQlMsCisJQlBGX1NfTERfQl9BQlMsCisJQlBGX1NfTERfV19MRU4sCisJQlBGX1NfTERfV19JTkQsCisJQlBGX1NfTERfSF9JTkQsCisJQlBGX1NfTERfQl9JTkQsCisJQlBGX1NfTERfSU1NLAorCUJQRl9TX0xEWF9XX0xFTiwKKwlCUEZfU19MRFhfQl9NU0gsCisJQlBGX1NfTERYX0lNTSwKKwlCUEZfU19NSVNDX1RBWCwKKwlCUEZfU19NSVNDX1RYQSwKKwlCUEZfU19BTFVfRElWX0ssCisJQlBGX1NfTERfTUVNLAorCUJQRl9TX0xEWF9NRU0sCisJQlBGX1NfU1QsCisJQlBGX1NfU1RYLAorCUJQRl9TX0pNUF9KQSwKKwlCUEZfU19KTVBfSkVRX0ssCisJQlBGX1NfSk1QX0pFUV9YLAorCUJQRl9TX0pNUF9KR0VfSywKKwlCUEZfU19KTVBfSkdFX1gsCisJQlBGX1NfSk1QX0pHVF9LLAorCUJQRl9TX0pNUF9KR1RfWCwKKwlCUEZfU19KTVBfSlNFVF9LLAorCUJQRl9TX0pNUF9KU0VUX1gsCisJLyogQW5jaWxsYXJ5IGRhdGEgKi8KKwlCUEZfU19BTkNfUFJPVE9DT0wsCisJQlBGX1NfQU5DX1BLVFRZUEUsCisJQlBGX1NfQU5DX0lGSU5ERVgsCisJQlBGX1NfQU5DX05MQVRUUiwKKwlCUEZfU19BTkNfTkxBVFRSX05FU1QsCisJQlBGX1NfQU5DX01BUkssCisJQlBGX1NfQU5DX1FVRVVFLAorCUJQRl9TX0FOQ19IQVRZUEUsCisJQlBGX1NfQU5DX1JYSEFTSCwKKwlCUEZfU19BTkNfQ1BVLAorfTsKKwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmIC8qIF9fTElOVVhfRklMVEVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maXJld2lyZS5oIGIvaW5jbHVkZS9saW51eC9maXJld2lyZS5oCmluZGV4IGM2NGYzNjguLjVlNmY0Mjc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLmgKKysrIGIvaW5jbHVkZS9saW51eC9maXJld2lyZS5oCkBAIC0xMjUsNyArMTI1LDYgQEAKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIGJtX3dvcms7IC8qIGJ1cyBtYW5hZ2VyIGpvYiAqLwogCWludCBibV9yZXRyaWVzOwogCWludCBibV9nZW5lcmF0aW9uOwotCV9fYmUzMiBibV90cmFuc2FjdGlvbl9kYXRhWzJdOwogCWludCBibV9ub2RlX2lkOwogCWJvb2wgYm1fYWJkaWNhdGU7CiAKQEAgLTQ0MSwxMiArNDQwLDE1IEBACiAJCQkgc3RydWN0IGZ3X2lzb19wYWNrZXQgKnBhY2tldCwKIAkJCSBzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLAogCQkJIHVuc2lnbmVkIGxvbmcgcGF5bG9hZCk7Cit2b2lkIGZ3X2lzb19jb250ZXh0X3F1ZXVlX2ZsdXNoKHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4KTsKIGludCBmd19pc29fY29udGV4dF9zdGFydChzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCwKIAkJCSBpbnQgY3ljbGUsIGludCBzeW5jLCBpbnQgdGFncyk7CiBpbnQgZndfaXNvX2NvbnRleHRfc3RvcChzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCk7CiB2b2lkIGZ3X2lzb19jb250ZXh0X2Rlc3Ryb3koc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHgpOwogdm9pZCBmd19pc29fcmVzb3VyY2VfbWFuYWdlKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgZ2VuZXJhdGlvbiwKIAkJCSAgICB1NjQgY2hhbm5lbHNfbWFzaywgaW50ICpjaGFubmVsLCBpbnQgKmJhbmR3aWR0aCwKLQkJCSAgICBib29sIGFsbG9jYXRlLCBfX2JlMzIgYnVmZmVyWzJdKTsKKwkJCSAgICBib29sIGFsbG9jYXRlKTsKKworZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpmd193b3JrcXVldWU7CiAKICNlbmRpZiAvKiBfTElOVVhfRklSRVdJUkVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc2xfZGV2aWNlcy5oIGIvaW5jbHVkZS9saW51eC9mc2xfZGV2aWNlcy5oCmluZGV4IDRlYjU2ZWQuLmZmZmRmMDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnNsX2RldmljZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzbF9kZXZpY2VzLmgKQEAgLTcyLDYgKzcyLDcgQEAKIAl2b2lkCQkoKmV4aXQpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CiAJdm9pZCBfX2lvbWVtCSpyZWdzOwkJLyogaW9yZW1hcCdkIHJlZ2lzdGVyIGJhc2UgKi8KIAlzdHJ1Y3QgY2xrCSpjbGs7CisJdW5zaWduZWQJcG93ZXJfYnVkZ2V0OwkvKiBoY2QtPnBvd2VyX2J1ZGdldCAqLwogCXVuc2lnbmVkCWJpZ19lbmRpYW5fbW1pbzoxOwogCXVuc2lnbmVkCWJpZ19lbmRpYW5fZGVzYzoxOwogCXVuc2lnbmVkCWVzOjE7CQkvKiBuZWVkIFVTQk1PREU6RVMgKi8KQEAgLTc5LDYgKzgwLDIxIEBACiAJdW5zaWduZWQJaGF2ZV9zeXNpZl9yZWdzOjE7CiAJdW5zaWduZWQJaW52ZXJ0X2RydnZidXM6MTsKIAl1bnNpZ25lZAlpbnZlcnRfcHdyX2ZhdWx0OjE7CisKKwl1bnNpZ25lZAlzdXNwZW5kZWQ6MTsKKwl1bnNpZ25lZAlhbHJlYWR5X3N1c3BlbmRlZDoxOworCisJLyogcmVnaXN0ZXIgc2F2ZSBhcmVhIGZvciBzdXNwZW5kL3Jlc3VtZSAqLworCXUzMgkJcG1fY29tbWFuZDsKKwl1MzIJCXBtX3N0YXR1czsKKwl1MzIJCXBtX2ludHJfZW5hYmxlOworCXUzMgkJcG1fZnJhbWVfaW5kZXg7CisJdTMyCQlwbV9zZWdtZW50OworCXUzMgkJcG1fZnJhbWVfbGlzdDsKKwl1MzIJCXBtX2FzeW5jX25leHQ7CisJdTMyCQlwbV9jb25maWd1cmVkX2ZsYWc7CisJdTMyCQlwbV9wb3J0c2M7CisJdTMyCQlwbV91c2JnZW5jdHJsOwogfTsKIAogLyogRmxhZ3MgaW4gZnNsX3VzYjJfbXBoX3BsYXRmb3JtX2RhdGEgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHJ0aW1lci5oIGIvaW5jbHVkZS9saW51eC9ocnRpbWVyLmgKaW5kZXggNjJmNTAwYy4uNTE5MzJlNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ocnRpbWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9ocnRpbWVyLmgKQEAgLTE0MywxOSArMTQzLDE4IEBACiAgKi8KIHN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UgewogCXN0cnVjdCBocnRpbWVyX2NwdV9iYXNlCSpjcHVfYmFzZTsKLQljbG9ja2lkX3QJCWluZGV4OworCWludAkJCWluZGV4OworCWNsb2NraWRfdAkJY2xvY2tpZDsKIAlzdHJ1Y3QgdGltZXJxdWV1ZV9oZWFkCWFjdGl2ZTsKIAlrdGltZV90CQkJcmVzb2x1dGlvbjsKIAlrdGltZV90CQkJKCpnZXRfdGltZSkodm9pZCk7CiAJa3RpbWVfdAkJCXNvZnRpcnFfdGltZTsKLSNpZmRlZiBDT05GSUdfSElHSF9SRVNfVElNRVJTCiAJa3RpbWVfdAkJCW9mZnNldDsKLSNlbmRpZgogfTsKIAogZW51bSAgaHJ0aW1lcl9iYXNlX3R5cGUgewotCUhSVElNRVJfQkFTRV9SRUFMVElNRSwKIAlIUlRJTUVSX0JBU0VfTU9OT1RPTklDLAorCUhSVElNRVJfQkFTRV9SRUFMVElNRSwKIAlIUlRJTUVSX0JBU0VfQk9PVFRJTUUsCiAJSFJUSU1FUl9NQVhfQ0xPQ0tfQkFTRVMsCiB9OwpAQCAtMTY0LDcgKzE2Myw3IEBACiAgKiBzdHJ1Y3QgaHJ0aW1lcl9jcHVfYmFzZSAtIHRoZSBwZXIgY3B1IGNsb2NrIGJhc2VzCiAgKiBAbG9jazoJCWxvY2sgcHJvdGVjdGluZyB0aGUgYmFzZSBhbmQgYXNzb2NpYXRlZCBjbG9jayBiYXNlcwogICoJCQlhbmQgdGltZXJzCi0gKiBAY2xvY2tfYmFzZToJCWFycmF5IG9mIGNsb2NrIGJhc2VzIGZvciB0aGlzIGNwdQorICogQGFjdGl2ZV9iYXNlczoJQml0ZmllbGQgdG8gbWFyayBiYXNlcyB3aXRoIGFjdGl2ZSB0aW1lcnMKICAqIEBleHBpcmVzX25leHQ6CWFic29sdXRlIHRpbWUgb2YgdGhlIG5leHQgZXZlbnQgd2hpY2ggd2FzIHNjaGVkdWxlZAogICoJCQl2aWEgY2xvY2tfc2V0X25leHRfZXZlbnQoKQogICogQGhyZXNfYWN0aXZlOglTdGF0ZSBvZiBoaWdoIHJlc29sdXRpb24gbW9kZQpAQCAtMTczLDEwICsxNzIsMTEgQEAKICAqIEBucl9yZXRyaWVzOgkJVG90YWwgbnVtYmVyIG9mIGhydGltZXIgaW50ZXJydXB0IHJldHJpZXMKICAqIEBucl9oYW5nczoJCVRvdGFsIG51bWJlciBvZiBocnRpbWVyIGludGVycnVwdCBoYW5ncwogICogQG1heF9oYW5nX3RpbWU6CU1heGltdW0gdGltZSBzcGVudCBpbiBocnRpbWVyX2ludGVycnVwdAorICogQGNsb2NrX2Jhc2U6CQlhcnJheSBvZiBjbG9jayBiYXNlcyBmb3IgdGhpcyBjcHUKICAqLwogc3RydWN0IGhydGltZXJfY3B1X2Jhc2UgewogCXJhd19zcGlubG9ja190CQkJbG9jazsKLQlzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlCWNsb2NrX2Jhc2VbSFJUSU1FUl9NQVhfQ0xPQ0tfQkFTRVNdOworCXVuc2lnbmVkIGxvbmcJCQlhY3RpdmVfYmFzZXM7CiAjaWZkZWYgQ09ORklHX0hJR0hfUkVTX1RJTUVSUwogCWt0aW1lX3QJCQkJZXhwaXJlc19uZXh0OwogCWludAkJCQlocmVzX2FjdGl2ZTsKQEAgLTE4Niw2ICsxODYsNyBAQAogCXVuc2lnbmVkIGxvbmcJCQlucl9oYW5nczsKIAlrdGltZV90CQkJCW1heF9oYW5nX3RpbWU7CiAjZW5kaWYKKwlzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlCWNsb2NrX2Jhc2VbSFJUSU1FUl9NQVhfQ0xPQ0tfQkFTRVNdOwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIGhydGltZXJfc2V0X2V4cGlyZXMoc3RydWN0IGhydGltZXIgKnRpbWVyLCBrdGltZV90IHRpbWUpCkBAIC0yNTYsOCArMjU3LDYgQEAKICNpZmRlZiBDT05GSUdfSElHSF9SRVNfVElNRVJTCiBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlOwogCi1leHRlcm4gdm9pZCBjbG9ja193YXNfc2V0KHZvaWQpOwotZXh0ZXJuIHZvaWQgaHJlc190aW1lcnNfcmVzdW1lKHZvaWQpOwogZXh0ZXJuIHZvaWQgaHJ0aW1lcl9pbnRlcnJ1cHQoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KTsKIAogLyoKQEAgLTI5MSwxNiArMjkwLDggQEAKICMgZGVmaW5lIE1PTk9UT05JQ19SRVNfTlNFQwlMT1dfUkVTX05TRUMKICMgZGVmaW5lIEtUSU1FX01PTk9UT05JQ19SRVMJS1RJTUVfTE9XX1JFUwogCi0vKgotICogY2xvY2tfd2FzX3NldCgpIGlzIGEgTk9QIGZvciBub24tIGhpZ2gtcmVzb2x1dGlvbiBzeXN0ZW1zLiBUaGUKLSAqIHRpbWUtc29ydGVkIG9yZGVyIGd1YXJhbnRlZXMgdGhhdCBhIHRpbWVyIGRvZXMgbm90IGV4cGlyZSBlYXJseSBhbmQKLSAqIGlzIGV4cGlyZWQgaW4gdGhlIG5leHQgc29mdGlycSB3aGVuIHRoZSBjbG9jayB3YXMgYWR2YW5jZWQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBjbG9ja193YXNfc2V0KHZvaWQpIHsgfQogc3RhdGljIGlubGluZSB2b2lkIGhydGltZXJfcGVla19haGVhZF90aW1lcnModm9pZCkgeyB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBocmVzX3RpbWVyc19yZXN1bWUodm9pZCkgeyB9Ci0KIC8qCiAgKiBJbiBub24gaGlnaCByZXNvbHV0aW9uIG1vZGUgdGhlIHRpbWUgcmVmZXJlbmNlIGlzIHRha2VuIGZyb20KICAqIHRoZSBiYXNlIHNvZnRpcnEgdGltZSB2YXJpYWJsZS4KQEAgLTMxNiwxMCArMzA3LDE4IEBACiB9CiAjZW5kaWYKIAorZXh0ZXJuIHZvaWQgY2xvY2tfd2FzX3NldCh2b2lkKTsKKyNpZmRlZiBDT05GSUdfVElNRVJGRAorZXh0ZXJuIHZvaWQgdGltZXJmZF9jbG9ja193YXNfc2V0KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCB0aW1lcmZkX2Nsb2NrX3dhc19zZXQodm9pZCkgeyB9CisjZW5kaWYKK2V4dGVybiB2b2lkIGhydGltZXJzX3Jlc3VtZSh2b2lkKTsKKwogZXh0ZXJuIGt0aW1lX3Qga3RpbWVfZ2V0KHZvaWQpOwogZXh0ZXJuIGt0aW1lX3Qga3RpbWVfZ2V0X3JlYWwodm9pZCk7CiBleHRlcm4ga3RpbWVfdCBrdGltZV9nZXRfYm9vdHRpbWUodm9pZCk7Ci0KK2V4dGVybiBrdGltZV90IGt0aW1lX2dldF9tb25vdG9uaWNfb2Zmc2V0KHZvaWQpOwogCiBERUNMQVJFX1BFUl9DUFUoc3RydWN0IHRpY2tfZGV2aWNlLCB0aWNrX2NwdV9kZXZpY2UpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lkZS5oIGIvaW5jbHVkZS9saW51eC9pZGUuaAppbmRleCAwNzJmZThjLi40MjU1Nzg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lkZS5oCisrKyBiL2luY2x1ZGUvbGludXgvaWRlLmgKQEAgLTE4LDEzICsxOCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFQUNQSQogI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgogI2VuZGlmCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vbXV0ZXguaD4KIAogLyogZm9yIHJlcXVlc3Rfc2Vuc2UgKi8KICNpbmNsdWRlIDxsaW51eC9jZHJvbS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaCBiL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmgKaW5kZXggMmQxYzYxMS4uYjJlZWU1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oCkBAIC04ODQsNiArODg0LDE1IEBACiAjZGVmaW5lIElFRUU4MDIxMV9IVF9DQVBfNDBNSFpfSU5UT0xFUkFOVAkweDQwMDAKICNkZWZpbmUgSUVFRTgwMjExX0hUX0NBUF9MU0lHX1RYT1BfUFJPVAkJMHg4MDAwCiAKKy8qIDgwMi4xMW4gSFQgZXh0ZW5kZWQgY2FwYWJpbGl0aWVzIG1hc2tzIChmb3IgZXh0ZW5kZWRfaHRfY2FwX2luZm8pICovCisjZGVmaW5lIElFRUU4MDIxMV9IVF9FWFRfQ0FQX1BDTwkJMHgwMDAxCisjZGVmaW5lIElFRUU4MDIxMV9IVF9FWFRfQ0FQX1BDT19USU1FCQkweDAwMDYKKyNkZWZpbmUJCUlFRUU4MDIxMV9IVF9FWFRfQ0FQX1BDT19USU1FX1NISUZUCTEKKyNkZWZpbmUgSUVFRTgwMjExX0hUX0VYVF9DQVBfTUNTX0ZCCQkweDAzMDAKKyNkZWZpbmUJCUlFRUU4MDIxMV9IVF9FWFRfQ0FQX01DU19GQl9TSElGVAk4CisjZGVmaW5lIElFRUU4MDIxMV9IVF9FWFRfQ0FQX0hUQ19TVVAJCTB4MDQwMAorI2RlZmluZSBJRUVFODAyMTFfSFRfRVhUX0NBUF9SRF9SRVNQT05ERVIJMHgwODAwCisKIC8qIDgwMi4xMW4gSFQgY2FwYWJpbGl0eSBBTVBEVSBzZXR0aW5ncyAoZm9yIGFtcGR1X3BhcmFtc19pbmZvKSAqLwogI2RlZmluZSBJRUVFODAyMTFfSFRfQU1QRFVfUEFSTV9GQUNUT1IJCTB4MDMKICNkZWZpbmUgSUVFRTgwMjExX0hUX0FNUERVX1BBUk1fREVOU0lUWQkJMHgxQwpAQCAtOTkzLDYgKzEwMDIsMTEgQEAKIAogI2RlZmluZSBXTEFOX0NBUEFCSUxJVFlfRVNTCQkoMTw8MCkKICNkZWZpbmUgV0xBTl9DQVBBQklMSVRZX0lCU1MJCSgxPDwxKQorCisvKiBBIG1lc2ggU1RBIHNldHMgdGhlIEVTUyBhbmQgSUJTUyBjYXBhYmlsaXR5IGJpdHMgdG8gemVybyAqLworI2RlZmluZSBXTEFOX0NBUEFCSUxJVFlfSVNfTUJTUyhjYXApCVwKKwkoISgoY2FwKSAmIChXTEFOX0NBUEFCSUxJVFlfRVNTIHwgV0xBTl9DQVBBQklMSVRZX0lCU1MpKSkKKwogI2RlZmluZSBXTEFOX0NBUEFCSUxJVFlfQ0ZfUE9MTEFCTEUJKDE8PDIpCiAjZGVmaW5lIFdMQU5fQ0FQQUJJTElUWV9DRl9QT0xMX1JFUVVFU1QJKDE8PDMpCiAjZGVmaW5lIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZCQkoMTw8NCkKQEAgLTEyNTIsOSArMTI2Niw4IEBACiAJV0xBTl9DQVRFR09SWV9NVUxUSUhPUF9BQ1RJT04gPSAxNCwKIAlXTEFOX0NBVEVHT1JZX1NFTEZfUFJPVEVDVEVEID0gMTUsCiAJV0xBTl9DQVRFR09SWV9XTU0gPSAxNywKLQkvKiBUT0RPOiByZW1vdmUgTUVTSF9QTElOSyBhbmQgTUVTSF9QQVRIX1NFTCBhZnRlciAqLwotCS8qICAgICAgIG1lc2ggaXMgdXBkYXRlZCB0byBjdXJyZW50IDgwMi4xMXMgZHJhZnQgICovCi0JV0xBTl9DQVRFR09SWV9NRVNIX1BMSU5LID0gMzAsCisJLyogVE9ETzogcmVtb3ZlIE1FU0hfUEFUSF9TRUwgYWZ0ZXIgbWVzaCBpcyB1cGRhdGVkCisJICogdG8gY3VycmVudCA4MDIuMTFzIGRyYWZ0ICAqLwogCVdMQU5fQ0FURUdPUllfTUVTSF9QQVRIX1NFTCA9IDMyLAogCVdMQU5fQ0FURUdPUllfVkVORE9SX1NQRUNJRklDX1BST1RFQ1RFRCA9IDEyNiwKIAlXTEFOX0NBVEVHT1JZX1ZFTkRPUl9TUEVDSUZJQyA9IDEyNywKQEAgLTE1MDcsNiArMTUyMCw3IEBACiAJCWNhdGVnb3J5ID0gKCh1OCAqKSBoZHIpICsgMjQ7CiAJCXJldHVybiAqY2F0ZWdvcnkgIT0gV0xBTl9DQVRFR09SWV9QVUJMSUMgJiYKIAkJCSpjYXRlZ29yeSAhPSBXTEFOX0NBVEVHT1JZX0hUICYmCisJCQkqY2F0ZWdvcnkgIT0gV0xBTl9DQVRFR09SWV9TRUxGX1BST1RFQ1RFRCAmJgogCQkJKmNhdGVnb3J5ICE9IFdMQU5fQ0FURUdPUllfVkVORE9SX1NQRUNJRklDOwogCX0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oIGIvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oCmluZGV4IGJlNjkwNDMuLjBmMTMyNWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfZXRoZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmgKQEAgLTEzNiw2ICsxMzYsNyBAQAogZXh0ZXJuIHN0cnVjdCBjdGxfdGFibGUgZXRoZXJfdGFibGVbXTsKICNlbmRpZgogCitpbnQgbWFjX3B0b24oY29uc3QgY2hhciAqcywgdTggKm1hYyk7CiBleHRlcm4gc3NpemVfdCBzeXNmc19mb3JtYXRfbWFjKGNoYXIgKmJ1ZiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGxlbik7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl92bGFuLmggYi9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaAppbmRleCA2MzVlMWZhLi4yOTBiZDhhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaApAQCAtODYsNyArODYsNiBAQAogCQkJCQkgICAgKiB0aGUgdmxhbiBpcyBhdHRhY2hlZCB0by4KIAkJCQkJICAgICovCiAJdW5zaWduZWQgaW50CQlucl92bGFuczsKLQlpbnQJCQlraWxsYWxsOwogCXN0cnVjdCBobGlzdF9ub2RlCWhsaXN0OwkvKiBsaW5rZWQgbGlzdCAqLwogCXN0cnVjdCBuZXRfZGV2aWNlICoqdmxhbl9kZXZpY2VzX2FycmF5c1tWTEFOX0dST1VQX0FSUkFZX1NQTElUX1BBUlRTXTsKIAlzdHJ1Y3QgcmN1X2hlYWQJCXJjdTsKQEAgLTEzMiw3ICsxMzEsOCBAQAogCiBleHRlcm4gaW50IF9fdmxhbl9od2FjY2VsX3J4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB2bGFuX2dyb3VwICpncnAsCiAJCQkgICAgIHUxNiB2bGFuX3RjaSwgaW50IHBvbGxpbmcpOwotZXh0ZXJuIGJvb2wgdmxhbl9od2FjY2VsX2RvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipza2IpOworZXh0ZXJuIGJvb2wgdmxhbl9kb19yZWNlaXZlKHN0cnVjdCBza19idWZmICoqc2tiKTsKK2V4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqdmxhbl91bnRhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBncm9fcmVzdWx0X3QKIHZsYW5fZ3JvX3JlY2VpdmUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwLAogCQkgdW5zaWduZWQgaW50IHZsYW5fdGNpLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKQEAgLTE2NiwxMyArMTY2LDE4IEBACiAJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCB2bGFuX2h3YWNjZWxfZG9fcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqKnNrYikKK3N0YXRpYyBpbmxpbmUgYm9vbCB2bGFuX2RvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipza2IpCiB7CiAJaWYgKCgqc2tiKS0+dmxhbl90Y2kgJiBWTEFOX1ZJRF9NQVNLKQogCQkoKnNrYiktPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnZsYW5fdW50YWcoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gc2tiOworfQorCiBzdGF0aWMgaW5saW5lIGdyb19yZXN1bHRfdAogdmxhbl9ncm9fcmVjZWl2ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCB2bGFuX2dyb3VwICpncnAsCiAJCSB1bnNpZ25lZCBpbnQgdmxhbl90Y2ksIHN0cnVjdCBza19idWZmICpza2IpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bS5oIGIvaW5jbHVkZS9saW51eC9rdm0uaAppbmRleCBlYTJkYzFhLi41NWVmMTgxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bS5oCisrKyBiL2luY2x1ZGUvbGludXgva3ZtLmgKQEAgLTU0MSw2ICs1NDEsOSBAQAogI2RlZmluZSBLVk1fQ0FQX1BQQ19HRVRfUFZJTkZPIDU3CiAjZGVmaW5lIEtWTV9DQVBfUFBDX0lSUV9MRVZFTCA1OAogI2RlZmluZSBLVk1fQ0FQX0FTWU5DX1BGIDU5CisjZGVmaW5lIEtWTV9DQVBfVFNDX0NPTlRST0wgNjAKKyNkZWZpbmUgS1ZNX0NBUF9HRVRfVFNDX0tIWiA2MQorI2RlZmluZSBLVk1fQ0FQX1BQQ19CT09LRV9TUkVHUyA2MgogCiAjaWZkZWYgS1ZNX0NBUF9JUlFfUk9VVElORwogCkBAIC02NzcsNiArNjgwLDkgQEAKICNkZWZpbmUgS1ZNX1NFVF9QSVQyICAgICAgICAgICAgICBfSU9XKEtWTUlPLCAgMHhhMCwgc3RydWN0IGt2bV9waXRfc3RhdGUyKQogLyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9QUENfR0VUX1BWSU5GTyAqLwogI2RlZmluZSBLVk1fUFBDX0dFVF9QVklORk8JICBfSU9XKEtWTUlPLCAgMHhhMSwgc3RydWN0IGt2bV9wcGNfcHZpbmZvKQorLyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9UU0NfQ09OVFJPTCAqLworI2RlZmluZSBLVk1fU0VUX1RTQ19LSFogICAgICAgICAgIF9JTyhLVk1JTywgIDB4YTIpCisjZGVmaW5lIEtWTV9HRVRfVFNDX0tIWiAgICAgICAgICAgX0lPKEtWTUlPLCAgMHhhMykKIAogLyoKICAqIGlvY3RscyBmb3IgdmNwdSBmZHMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAppbmRleCBhYjQyODU1Li5iOWMzMjk5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCkBAIC0yNyw2ICsyNywxMCBAQAogCiAjaW5jbHVkZSA8YXNtL2t2bV9ob3N0Lmg+CiAKKyNpZm5kZWYgS1ZNX01NSU9fU0laRQorI2RlZmluZSBLVk1fTU1JT19TSVpFIDgKKyNlbmRpZgorCiAvKgogICogdmNwdS0+cmVxdWVzdHMgYml0IG1lbWJlcnMKICAqLwpAQCAtNDMsNyArNDcsNiBAQAogI2RlZmluZSBLVk1fUkVRX0RFQUNUSVZBVEVfRlBVICAgIDEwCiAjZGVmaW5lIEtWTV9SRVFfRVZFTlQgICAgICAgICAgICAgMTEKICNkZWZpbmUgS1ZNX1JFUV9BUEZfSEFMVCAgICAgICAgICAxMgotI2RlZmluZSBLVk1fUkVRX05NSSAgICAgICAgICAgICAgIDEzCiAKICNkZWZpbmUgS1ZNX1VTRVJTUEFDRV9JUlFfU09VUkNFX0lECTAKIApAQCAtMTMzLDcgKzEzNiw4IEBACiAJaW50IG1taW9fcmVhZF9jb21wbGV0ZWQ7CiAJaW50IG1taW9faXNfd3JpdGU7CiAJaW50IG1taW9fc2l6ZTsKLQl1bnNpZ25lZCBjaGFyIG1taW9fZGF0YVs4XTsKKwlpbnQgbW1pb19pbmRleDsKKwl1bnNpZ25lZCBjaGFyIG1taW9fZGF0YVtLVk1fTU1JT19TSVpFXTsKIAlncGFfdCBtbWlvX3BoeXNfYWRkcjsKICNlbmRpZgogCkBAIC0yOTIsOSArMjk2LDEwIEBACiB9CiAKICNkZWZpbmUga3ZtX2Zvcl9lYWNoX3ZjcHUoaWR4LCB2Y3B1cCwga3ZtKSBcCi0JZm9yIChpZHggPSAwLCB2Y3B1cCA9IGt2bV9nZXRfdmNwdShrdm0sIGlkeCk7IFwKLQkgICAgIGlkeCA8IGF0b21pY19yZWFkKCZrdm0tPm9ubGluZV92Y3B1cykgJiYgdmNwdXA7IFwKLQkgICAgIHZjcHVwID0ga3ZtX2dldF92Y3B1KGt2bSwgKytpZHgpKQorCWZvciAoaWR4ID0gMDsgXAorCSAgICAgaWR4IDwgYXRvbWljX3JlYWQoJmt2bS0+b25saW5lX3ZjcHVzKSAmJiBcCisJICAgICAodmNwdXAgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBpZHgpKSAhPSBOVUxMOyBcCisJICAgICBpZHgrKykKIAogaW50IGt2bV92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGlkKTsKIHZvaWQga3ZtX3ZjcHVfdW5pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CkBAIC0zNjUsNyArMzcwLDYgQEAKIAkJICAgICAgYm9vbCAqd3JpdGFibGUpOwogcGZuX3QgZ2ZuX3RvX3Bmbl9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwKIAkJCSBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBnZm4pOwotaW50IG1lbXNsb3RfaWQoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pOwogdm9pZCBrdm1fcmVsZWFzZV9wZm5fZGlydHkocGZuX3QpOwogdm9pZCBrdm1fcmVsZWFzZV9wZm5fY2xlYW4ocGZuX3QgcGZuKTsKIHZvaWQga3ZtX3NldF9wZm5fZGlydHkocGZuX3QgcGZuKTsKQEAgLTU4Nyw4ICs1OTEsMTcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGt2bV9ndWVzdF9lbnRlcih2b2lkKQogeworCUJVR19PTihwcmVlbXB0aWJsZSgpKTsKIAlhY2NvdW50X3N5c3RlbV92dGltZShjdXJyZW50KTsKIAljdXJyZW50LT5mbGFncyB8PSBQRl9WQ1BVOworCS8qIEtWTSBkb2VzIG5vdCBob2xkIGFueSByZWZlcmVuY2VzIHRvIHJjdSBwcm90ZWN0ZWQgZGF0YSB3aGVuIGl0CisJICogc3dpdGNoZXMgQ1BVIGludG8gYSBndWVzdCBtb2RlLiBJbiBmYWN0IHN3aXRjaGluZyB0byBhIGd1ZXN0IG1vZGUKKwkgKiBpcyB2ZXJ5IHNpbWlsYXIgdG8gZXhpdGluZyB0byB1c2Vyc3Bhc2UgZnJvbSByY3UgcG9pbnQgb2Ygdmlldy4gSW4KKwkgKiBhZGRpdGlvbiBDUFUgbWF5IHN0YXkgaW4gYSBndWVzdCBtb2RlIGZvciBxdWl0ZSBhIGxvbmcgdGltZSAodXAgdG8KKwkgKiBvbmUgdGltZSBzbGljZSkuIExldHMgdHJlYXQgZ3Vlc3QgbW9kZSBhcyBxdWllc2NlbnQgc3RhdGUsIGp1c3QgbGlrZQorCSAqIHdlIGRvIHdpdGggdXNlci1tb2RlIGV4ZWN1dGlvbi4KKwkgKi8KKwlyY3VfdmlydF9ub3RlX2NvbnRleHRfc3dpdGNoKHNtcF9wcm9jZXNzb3JfaWQoKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fZ3Vlc3RfZXhpdCh2b2lkKQpAQCAtNTk3LDYgKzYxMCwxMSBAQAogCWN1cnJlbnQtPmZsYWdzICY9IH5QRl9WQ1BVOwogfQogCitzdGF0aWMgaW5saW5lIGludCBtZW1zbG90X2lkKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQoreworCXJldHVybiBnZm5fdG9fbWVtc2xvdChrdm0sIGdmbiktPmlkOworfQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2ZuX3RvX2h2YV9tZW1zbG90KHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsCiAJCQkJCSAgICAgICBnZm5fdCBnZm4pCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xlZHMtcmVndWxhdG9yLmggYi9pbmNsdWRlL2xpbnV4L2xlZHMtcmVndWxhdG9yLmgKaW5kZXggNWE4ZWIzOC4uZTIzMzdhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sZWRzLXJlZ3VsYXRvci5oCisrKyBiL2luY2x1ZGUvbGludXgvbGVkcy1yZWd1bGF0b3IuaApAQCAtMTYsNyArMTYsNyBAQAogICogVXNlICJ2bGVkIiBhcyBzdXBwbHkgaWQgd2hlbiBkZWNsYXJpbmcgdGhlIHJlZ3VsYXRvciBjb25zdW1lcjoKICAqCiAgKiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgcGNhcF9yZWd1bGF0b3JfVlZJQl9jb25zdW1lcnMgW10gPSB7Ci0gKiAJeyAuZGV2X25hbWUgPSAibGVkcy1yZWd1bGF0b3IuMCIsIHN1cHBseSA9ICJ2bGVkIiB9LAorICogCXsgLmRldl9uYW1lID0gImxlZHMtcmVndWxhdG9yLjAiLCAuc3VwcGx5ID0gInZsZWQiIH0sCiAgKiB9OwogICoKICAqIElmIHlvdSBoYXZlIHNldmVyYWwgcmVndWxhdG9yIGRyaXZlbiBMRURzLCB5b3UgY2FuIGFwcGVuZCBhIG51bWVyaWNhbCBpZCB0bwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saWJhdGEuaCBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKaW5kZXggMDRmMzJhMy4uNWE5OTI2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9saWJhdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCkBAIC0xMTUxLDYgKzExNTEsNyBAQAogCQkgICAgICBhdGFfcmVzZXRfZm5fdCBzb2Z0cmVzZXQsIGF0YV9yZXNldF9mbl90IGhhcmRyZXNldCwKIAkJICAgICAgYXRhX3Bvc3RyZXNldF9mbl90IHBvc3RyZXNldCk7CiBleHRlcm4gdm9pZCBhdGFfc3RkX2Vycm9yX2hhbmRsZXIoc3RydWN0IGF0YV9wb3J0ICphcCk7CitleHRlcm4gaW50IGF0YV9saW5rX25yX2VuYWJsZWQoc3RydWN0IGF0YV9saW5rICpsaW5rKTsKIAogLyoKICAqIEJhc2Ugb3BlcmF0aW9ucyB0byBpbmhlcml0IGZyb20gYW5kIGluaXRpYWxpemVycyBmb3Igc2h0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC93bTg5OTQvcGRhdGEuaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODk5NC9wZGF0YS5oCmluZGV4IDQ2NmIxYzcuLmQxMmY4ZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL3dtODk5NC9wZGF0YS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3dtODk5NC9wZGF0YS5oCkBAIC0zMiw2ICszMiwxMCBAQAogI2RlZmluZSBXTTg5OTRfRVFfUkVHUyAgMjAKICNkZWZpbmUgV004OTU4X01CQ19DVVRPRkZfUkVHUyAyMAogI2RlZmluZSBXTTg5NThfTUJDX0NPRUZGX1JFR1MgIDQ4CisjZGVmaW5lIFdNODk1OF9NQkNfQ09NQklORURfUkVHUyA1NgorI2RlZmluZSBXTTg5NThfVlNTX0hQRl9SRUdTIDIKKyNkZWZpbmUgV004OTU4X1ZTU19SRUdTIDE0OAorI2RlZmluZSBXTTg5NThfRU5IX0VRX1JFR1MgMzIKIAogLyoqCiAgKiBEUkMgY29uZmlndXJhdGlvbnMgYXJlIHNwZWNpZmllZCB3aXRoIGEgbGFiZWwgYW5kIGEgc2V0IG9mIHJlZ2lzdGVyCkBAIC03MSw2ICs3NSw0MiBAQAogCWNvbnN0IGNoYXIgKm5hbWU7CiAJdTE2IGN1dG9mZl9yZWdzW1dNODk1OF9NQkNfQ1VUT0ZGX1JFR1NdOwogCXUxNiBjb2VmZl9yZWdzW1dNODk1OF9NQkNfQ09FRkZfUkVHU107CisKKwkvKiBDb2VmZmljaWVudCBsYXlvdXQgd2hlbiB1c2luZyBNQkMrVlNTIGZpcm13YXJlICovCisJdTE2IGNvbWJpbmVkX3JlZ3NbV004OTU4X01CQ19DT01CSU5FRF9SRUdTXTsKK307CisKKy8qKgorICogVlNTIEhQRiBjb25maWd1cmF0aW9ucyBhcmUgc3BlY2lmaWVkIHdpdGggYSBsYWJlbCBhbmQgdHdvIHZhbHVlcyB0bworICogd3JpdGUuICBDb25maWd1cmF0aW9ucyBhcmUgZXhwZWN0ZWQgdG8gYmUgZ2VuZXJhdGVkIHVzaW5nIHRoZQorICogbXVsdGliYW5kIGNvbXByZXNzb3IgY29uZmlndXJhdGlvbiBwYW5lbCBpbiBXSVNDRSAtIHNlZQorICogaHR0cDovL3d3dy53b2xmc29ubWljcm8uY29tL3dpc2NlLworICovCitzdHJ1Y3Qgd204OTU4X3Zzc19ocGZfY2ZnIHsKKwljb25zdCBjaGFyICpuYW1lOworCXUxNiByZWdzW1dNODk1OF9WU1NfSFBGX1JFR1NdOworfTsKKworLyoqCisgKiBWU1MgY29uZmlndXJhdGlvbnMgYXJlIHNwZWNpZmllZCB3aXRoIGEgbGFiZWwgYW5kIGFycmF5IG9mIHZhbHVlcworICogdG8gd3JpdGUuICBDb25maWd1cmF0aW9ucyBhcmUgZXhwZWN0ZWQgdG8gYmUgZ2VuZXJhdGVkIHVzaW5nIHRoZQorICogbXVsdGliYW5kIGNvbXByZXNzb3IgY29uZmlndXJhdGlvbiBwYW5lbCBpbiBXSVNDRSAtIHNlZQorICogaHR0cDovL3d3dy53b2xmc29ubWljcm8uY29tL3dpc2NlLworICovCitzdHJ1Y3Qgd204OTU4X3Zzc19jZmcgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdTE2IHJlZ3NbV004OTU4X1ZTU19SRUdTXTsKK307CisKKy8qKgorICogRW5oYW5jZWQgRVEgY29uZmlndXJhdGlvbnMgYXJlIHNwZWNpZmllZCB3aXRoIGEgbGFiZWwgYW5kIGFycmF5IG9mCisgKiB2YWx1ZXMgdG8gd3JpdGUuICBDb25maWd1cmF0aW9ucyBhcmUgZXhwZWN0ZWQgdG8gYmUgZ2VuZXJhdGVkIHVzaW5nCisgKiB0aGUgbXVsdGliYW5kIGNvbXByZXNzb3IgY29uZmlndXJhdGlvbiBwYW5lbCBpbiBXSVNDRSAtIHNlZQorICogaHR0cDovL3d3dy53b2xmc29ubWljcm8uY29tL3dpc2NlLworICovCitzdHJ1Y3Qgd204OTU4X2VuaF9lcV9jZmcgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdTE2IHJlZ3NbV004OTU4X0VOSF9FUV9SRUdTXTsKIH07CiAKIHN0cnVjdCB3bTg5OTRfcGRhdGEgewpAQCAtOTUsNiArMTM1LDE1IEBACiAJaW50IG51bV9tYmNfY2ZnczsKIAlzdHJ1Y3Qgd204OTU4X21iY19jZmcgKm1iY19jZmdzOwogCisJaW50IG51bV92c3NfY2ZnczsKKwlzdHJ1Y3Qgd204OTU4X3Zzc19jZmcgKnZzc19jZmdzOworCisJaW50IG51bV92c3NfaHBmX2NmZ3M7CisJc3RydWN0IHdtODk1OF92c3NfaHBmX2NmZyAqdnNzX2hwZl9jZmdzOworCisJaW50IG51bV9lbmhfZXFfY2ZnczsKKwlzdHJ1Y3Qgd204OTU4X2VuaF9lcV9jZmcgKmVuaF9lcV9jZmdzOworCiAgICAgICAgIC8qIExJTkVPVVQgY2FuIGJlIGRpZmZlcmVudGlhbCBvciBzaW5nbGUgZW5kZWQgKi8KICAgICAgICAgdW5zaWduZWQgaW50IGxpbmVvdXQxX2RpZmY6MTsKICAgICAgICAgdW5zaWduZWQgaW50IGxpbmVvdXQyX2RpZmY6MTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmggYi9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oCmluZGV4IDQ4YzAwN2QuLmFlMjhlOTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tb2RfZGV2aWNldGFibGUuaApAQCAtMzgyLDYgKzM4MiwyMyBAQAogI2RlZmluZSBTU0JfQU5ZX0lECQkweEZGRkYKICNkZWZpbmUgU1NCX0FOWV9SRVYJCTB4RkYKIAorLyogQnJvYWRjb20ncyBzcGVjaWZpYyBBTUJBIGNvcmUsIHNlZSBkcml2ZXJzL2JjbWEvICovCitzdHJ1Y3QgYmNtYV9kZXZpY2VfaWQgeworCV9fdTE2CW1hbnVmOworCV9fdTE2CWlkOworCV9fdTgJcmV2OworCV9fdTgJY2xhc3M7Cit9OworI2RlZmluZSBCQ01BX0NPUkUoX21hbnVmLCBfaWQsIF9yZXYsIF9jbGFzcykgIFwKKwl7IC5tYW51ZiA9IF9tYW51ZiwgLmlkID0gX2lkLCAucmV2ID0gX3JldiwgLmNsYXNzID0gX2NsYXNzLCB9CisjZGVmaW5lIEJDTUFfQ09SRVRBQkxFX0VORCAgXAorCXsgMCwgfSwKKworI2RlZmluZSBCQ01BX0FOWV9NQU5VRgkJMHhGRkZGCisjZGVmaW5lIEJDTUFfQU5ZX0lECQkweEZGRkYKKyNkZWZpbmUgQkNNQV9BTllfUkVWCQkweEZGCisjZGVmaW5lIEJDTUFfQU5ZX0NMQVNTCQkweEZGCisKIHN0cnVjdCB2aXJ0aW9fZGV2aWNlX2lkIHsKIAlfX3UzMiBkZXZpY2U7CiAJX191MzIgdmVuZG9yOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tcm91dGUuaCBiL2luY2x1ZGUvbGludXgvbXJvdXRlLmgKaW5kZXggYjIxZDU2Ny4uNDZjYWFmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tcm91dGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21yb3V0ZS5oCkBAIC0yNDQsNiArMjQ0LDcgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiBzdHJ1Y3QgcnRtc2c7CiBleHRlcm4gaW50IGlwbXJfZ2V0X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCiAJCQkgIHN0cnVjdCBydG1zZyAqcnRtLCBpbnQgbm93YWl0KTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldC5oIGIvaW5jbHVkZS9saW51eC9uZXQuaAppbmRleCA5NGRlODNjLi4xZGE1NWU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0LmgKQEAgLTQyLDYgKzQyLDcgQEAKICNkZWZpbmUgU1lTX1JFQ1ZNU0cJMTcJCS8qIHN5c19yZWN2bXNnKDIpCQkqLwogI2RlZmluZSBTWVNfQUNDRVBUNAkxOAkJLyogc3lzX2FjY2VwdDQoMikJCSovCiAjZGVmaW5lIFNZU19SRUNWTU1TRwkxOQkJLyogc3lzX3JlY3ZtbXNnKDIpCQkqLworI2RlZmluZSBTWVNfU0VORE1NU0cJMjAJCS8qIHN5c19zZW5kbW1zZygyKQkJKi8KIAogdHlwZWRlZiBlbnVtIHsKIAlTU19GUkVFID0gMCwJCQkvKiBub3QgYWxsb2NhdGVkCQkqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggMDI0OWZlNy4uY2EzMzNlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC0xMDIwLDkgKzEwMjAsNiBAQAogCSAqCXBhcnQgb2YgdGhlIHVzdWFsIHNldCBzcGVjaWZpZWQgaW4gU3BhY2UuYy4KIAkgKi8KIAotCXVuc2lnbmVkIGNoYXIJCWlmX3BvcnQ7CS8qIFNlbGVjdGFibGUgQVVJLCBUUCwuLiovCi0JdW5zaWduZWQgY2hhcgkJZG1hOwkJLyogRE1BIGNoYW5uZWwJCSovCi0KIAl1bnNpZ25lZCBsb25nCQlzdGF0ZTsKIAogCXN0cnVjdCBsaXN0X2hlYWQJZGV2X2xpc3Q7CkBAIC0xMDM1LDcgKzEwMzIsNyBAQAogCXUzMgkJCWh3X2ZlYXR1cmVzOwogCS8qIHVzZXItcmVxdWVzdGVkIGZlYXR1cmVzICovCiAJdTMyCQkJd2FudGVkX2ZlYXR1cmVzOwotCS8qIFZMQU4gZmVhdHVyZSBtYXNrICovCisJLyogbWFzayBvZiBmZWF0dXJlcyBpbmhlcml0YWJsZSBieSBWTEFOIGRldmljZXMgKi8KIAl1MzIJCQl2bGFuX2ZlYXR1cmVzOwogCiAJLyogTmV0IGRldmljZSBmZWF0dXJlIGJpdHM7IGlmIHlvdSBjaGFuZ2Ugc29tZXRoaW5nLApAQCAtMTA2Niw2ICsxMDYzLDggQEAKICNkZWZpbmUgTkVUSUZfRl9OVFVQTEUJCSgxIDw8IDI3KSAvKiBOLXR1cGxlIGZpbHRlcnMgc3VwcG9ydGVkICovCiAjZGVmaW5lIE5FVElGX0ZfUlhIQVNICQkoMSA8PCAyOCkgLyogUmVjZWl2ZSBoYXNoaW5nIG9mZmxvYWQgKi8KICNkZWZpbmUgTkVUSUZfRl9SWENTVU0JCSgxIDw8IDI5KSAvKiBSZWNlaXZlIGNoZWNrc3VtbWluZyBvZmZsb2FkICovCisjZGVmaW5lIE5FVElGX0ZfTk9DQUNIRV9DT1BZCSgxIDw8IDMwKSAvKiBVc2Ugbm8tY2FjaGUgY29weWZyb211c2VyICovCisjZGVmaW5lIE5FVElGX0ZfTE9PUEJBQ0sJKDEgPDwgMzEpIC8qIEVuYWJsZSBsb29wYmFjayAqLwogCiAJLyogU2VnbWVudGF0aW9uIG9mZmxvYWQgZmVhdHVyZXMgKi8KICNkZWZpbmUgTkVUSUZfRl9HU09fU0hJRlQJMTYKQEAgLTEwNzksOSArMTA3OCw5IEBACiAKIAkvKiBGZWF0dXJlcyB2YWxpZCBmb3IgZXRodG9vbCB0byBjaGFuZ2UgKi8KIAkvKiA9IGFsbCBkZWZpbmVkIG1pbnVzIGRyaXZlci9kZXZpY2UtY2xhc3MtcmVsYXRlZCAqLwotI2RlZmluZSBORVRJRl9GX05FVkVSX0NIQU5HRQkoTkVUSUZfRl9ISUdIRE1BIHwgTkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQgfCBcCisjZGVmaW5lIE5FVElGX0ZfTkVWRVJfQ0hBTkdFCShORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRCB8IFwKIAkJCQkgIE5FVElGX0ZfTExUWCB8IE5FVElGX0ZfTkVUTlNfTE9DQUwpCi0jZGVmaW5lIE5FVElGX0ZfRVRIVE9PTF9CSVRTCSgweDNmM2ZmZmZmICYgfk5FVElGX0ZfTkVWRVJfQ0hBTkdFKQorI2RlZmluZSBORVRJRl9GX0VUSFRPT0xfQklUUwkoMHhmZjNmZmZmZiAmIH5ORVRJRl9GX05FVkVSX0NIQU5HRSkKIAogCS8qIExpc3Qgb2YgZmVhdHVyZXMgd2l0aCBzb2Z0d2FyZSBmYWxsYmFja3MuICovCiAjZGVmaW5lIE5FVElGX0ZfR1NPX1NPRlRXQVJFCShORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPX0VDTiB8IFwKQEAgLTEwOTUsOSArMTA5NCwxNCBAQAogCiAjZGVmaW5lIE5FVElGX0ZfQUxMX1RTTyAJKE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082IHwgTkVUSUZfRl9UU09fRUNOKQogCisjZGVmaW5lIE5FVElGX0ZfQUxMX0ZDT0UJKE5FVElGX0ZfRkNPRV9DUkMgfCBORVRJRl9GX0ZDT0VfTVRVIHwgXAorCQkJCSBORVRJRl9GX0ZTTykKKwogI2RlZmluZSBORVRJRl9GX0FMTF9UWF9PRkZMT0FEUwkoTkVUSUZfRl9BTExfQ1NVTSB8IE5FVElGX0ZfU0cgfCBcCiAJCQkJIE5FVElGX0ZfRlJBR0xJU1QgfCBORVRJRl9GX0FMTF9UU08gfCBcCi0JCQkJIE5FVElGX0ZfU0NUUF9DU1VNIHwgTkVUSUZfRl9GQ09FX0NSQykKKwkJCQkgTkVUSUZfRl9ISUdIRE1BIHwgXAorCQkJCSBORVRJRl9GX1NDVFBfQ1NVTSB8IFwKKwkJCQkgTkVUSUZfRl9BTExfRkNPRSkKIAogCS8qCiAJICogSWYgb25lIGRldmljZSBzdXBwb3J0cyBvbmUgb2YgdGhlc2UgZmVhdHVyZXMsIHRoZW4gZW5hYmxlIHRoZW0KQEAgLTExMDUsNyArMTEwOSwxMiBAQAogCSAqLwogI2RlZmluZSBORVRJRl9GX09ORV9GT1JfQUxMCShORVRJRl9GX0dTT19TT0ZUV0FSRSB8IE5FVElGX0ZfR1NPX1JPQlVTVCB8IFwKIAkJCQkgTkVUSUZfRl9TRyB8IE5FVElGX0ZfSElHSERNQSB8CQlcCi0JCQkJIE5FVElGX0ZfRlJBR0xJU1QpCisJCQkJIE5FVElGX0ZfRlJBR0xJU1QgfCBORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRCkKKwkvKgorCSAqIElmIG9uZSBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IG9uZSBvZiB0aGVzZSBmZWF0dXJlcywgdGhlbiBkaXNhYmxlIGl0CisJICogZm9yIGFsbCBpbiBuZXRkZXZfaW5jcmVtZW50X2ZlYXR1cmVzLgorCSAqLworI2RlZmluZSBORVRJRl9GX0FMTF9GT1JfQUxMCShORVRJRl9GX05PQ0FDSEVfQ09QWSB8IE5FVElGX0ZfRlNPKQogCiAJLyogY2hhbmdlYWJsZSBmZWF0dXJlcyB3aXRoIG5vIHNwZWNpYWwgaGFyZHdhcmUgcmVxdWlyZW1lbnRzICovCiAjZGVmaW5lIE5FVElGX0ZfU09GVF9GRUFUVVJFUwkoTkVUSUZfRl9HU08gfCBORVRJRl9GX0dSTykKQEAgLTExMzQsMTMgKzExNDMsMTYgQEAKIAljb25zdCBzdHJ1Y3QgaGVhZGVyX29wcyAqaGVhZGVyX29wczsKIAogCXVuc2lnbmVkIGludAkJZmxhZ3M7CS8qIGludGVyZmFjZSBmbGFncyAoYSBsYSBCU0QpCSovCisJdW5zaWduZWQgaW50CQlwcml2X2ZsYWdzOyAvKiBMaWtlICdmbGFncycgYnV0IGludmlzaWJsZSB0byB1c2Vyc3BhY2UuICovCiAJdW5zaWduZWQgc2hvcnQJCWdmbGFnczsKLSAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgcHJpdl9mbGFnczsgLyogTGlrZSAnZmxhZ3MnIGJ1dCBpbnZpc2libGUgdG8gdXNlcnNwYWNlLiAqLwogCXVuc2lnbmVkIHNob3J0CQlwYWRkZWQ7CS8qIEhvdyBtdWNoIHBhZGRpbmcgYWRkZWQgYnkgYWxsb2NfbmV0ZGV2KCkgKi8KIAogCXVuc2lnbmVkIGNoYXIJCW9wZXJzdGF0ZTsgLyogUkZDMjg2MyBvcGVyc3RhdGUgKi8KIAl1bnNpZ25lZCBjaGFyCQlsaW5rX21vZGU7IC8qIG1hcHBpbmcgcG9saWN5IHRvIG9wZXJzdGF0ZSAqLwogCisJdW5zaWduZWQgY2hhcgkJaWZfcG9ydDsJLyogU2VsZWN0YWJsZSBBVUksIFRQLC4uKi8KKwl1bnNpZ25lZCBjaGFyCQlkbWE7CQkvKiBETUEgY2hhbm5lbAkJKi8KKwogCXVuc2lnbmVkIGludAkJbXR1OwkvKiBpbnRlcmZhY2UgTVRVIHZhbHVlCQkqLwogCXVuc2lnbmVkIHNob3J0CQl0eXBlOwkvKiBpbnRlcmZhY2UgaGFyZHdhcmUgdHlwZQkqLwogCXVuc2lnbmVkIHNob3J0CQloYXJkX2hlYWRlcl9sZW47CS8qIGhhcmR3YXJlIGhkciBsZW5ndGgJKi8KQEAgLTEyODEsNyArMTI5Myw5IEBACiAJICAgICAgIE5FVFJFR19VTlJFR0lTVEVSRUQsCS8qIGNvbXBsZXRlZCB1bnJlZ2lzdGVyIHRvZG8gKi8KIAkgICAgICAgTkVUUkVHX1JFTEVBU0VELAkJLyogY2FsbGVkIGZyZWVfbmV0ZGV2ICovCiAJICAgICAgIE5FVFJFR19EVU1NWSwJCS8qIGR1bW15IGRldmljZSBmb3IgTkFQSSBwb2xsICovCi0JfSByZWdfc3RhdGU6MTY7CisJfSByZWdfc3RhdGU6ODsKKworCWJvb2wgZGlzbWFudGxlOyAvKiBkZXZpY2UgaXMgZ29pbmcgZG8gYmUgZnJlZWQgKi8KIAogCWVudW0gewogCQlSVE5MX0xJTktfSU5JVElBTElaRUQsCkBAIC0yNTEzLDYgKzI1MjcsNyBAQAogZXh0ZXJuIGludAkJbmV0ZGV2X21heF9iYWNrbG9nOwogZXh0ZXJuIGludAkJbmV0ZGV2X3RzdGFtcF9wcmVxdWV1ZTsKIGV4dGVybiBpbnQJCXdlaWdodF9wOworZXh0ZXJuIGludAkJYnBmX2ppdF9lbmFibGU7CiBleHRlcm4gaW50CQluZXRkZXZfc2V0X21hc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyKTsKIGV4dGVybiBpbnQgbmV0ZGV2X3NldF9ib25kX21hc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKm1hc3Rlcik7CkBAIC0yNTUwLDcgKzI1NjUsOSBAQAogfQogdTMyIG5ldGRldl9pbmNyZW1lbnRfZmVhdHVyZXModTMyIGFsbCwgdTMyIG9uZSwgdTMyIG1hc2spOwogdTMyIG5ldGRldl9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZlYXR1cmVzKTsKK2ludCBfX25ldGRldl91cGRhdGVfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiB2b2lkIG5ldGRldl91cGRhdGVfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Cit2b2lkIG5ldGRldl9jaGFuZ2VfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIHZvaWQgbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKnJvb3RkZXYsCiAJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMjU4OCwxMyArMjYwNSw4IEBACiAKIGV4dGVybiBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgX19uZXRfaW5pdGRhdGEgbG9vcGJhY2tfbmV0X29wczsKIAotc3RhdGljIGlubGluZSBpbnQgZGV2X2V0aHRvb2xfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJCSAgIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQotewotCWlmICghZGV2LT5ldGh0b29sX29wcyB8fCAhZGV2LT5ldGh0b29sX29wcy0+Z2V0X3NldHRpbmdzKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JcmV0dXJuIGRldi0+ZXRodG9vbF9vcHMtPmdldF9zZXR0aW5ncyhkZXYsIGNtZCk7Ci19CitpbnQgZGV2X2V0aHRvb2xfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKTsKIAogc3RhdGljIGlubGluZSB1MzIgZGV2X2V0aHRvb2xfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9nZXRwb3J0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXRfZ2V0cG9ydC5oCmluZGV4IDVhZWJkMTcuLjkwZDA5MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9nZXRwb3J0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2dldHBvcnQuaApAQCAtMjIsNyArMjIsOSBAQAogewogCXN3aXRjaCAocHJvdG8pIHsKIAljYXNlIElQUFJPVE9fVENQOgorCWNhc2UgSVBQUk9UT19TQ1RQOgogCWNhc2UgSVBQUk9UT19VRFA6CisJY2FzZSBJUFBST1RPX1VEUExJVEU6CiAJCXJldHVybiB0cnVlOwogCX0KIAlyZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaAppbmRleCAzNzIxOTUyLi4zMmNkZGY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmgKQEAgLTQ1Niw3MiArNDU2LDYwIEBACiBleHRlcm4gc3RydWN0IHh0X3RhYmxlX2luZm8gKnh0X2FsbG9jX3RhYmxlX2luZm8odW5zaWduZWQgaW50IHNpemUpOwogZXh0ZXJuIHZvaWQgeHRfZnJlZV90YWJsZV9pbmZvKHN0cnVjdCB4dF90YWJsZV9pbmZvICppbmZvKTsKIAotLyoKLSAqIFBlci1DUFUgc3BpbmxvY2sgYXNzb2NpYXRlZCB3aXRoIHBlci1jcHUgdGFibGUgZW50cmllcywgYW5kCi0gKiB3aXRoIGEgY291bnRlciBmb3IgdGhlICJyZWFkaW5nIiBzaWRlIHRoYXQgYWxsb3dzIGEgcmVjdXJzaXZlCi0gKiByZWFkZXIgdG8gYXZvaWQgdGFraW5nIHRoZSBsb2NrIGFuZCBkZWFkbG9ja2luZy4KLSAqCi0gKiAicmVhZGluZyIgaXMgdXNlZCBieSBpcC9hcnAvaXA2IHRhYmxlcyBydWxlIHByb2Nlc3Npbmcgd2hpY2ggcnVucyBwZXItY3B1LgotICogSXQgbmVlZHMgdG8gZW5zdXJlIHRoYXQgdGhlIHJ1bGVzIGFyZSBub3QgYmVpbmcgY2hhbmdlZCB3aGlsZSB0aGUgcGFja2V0Ci0gKiBpcyBiZWluZyBwcm9jZXNzZWQuIEluIHNvbWUgY2FzZXMsIHRoZSByZWFkIGxvY2sgd2lsbCBiZSBhY3F1aXJlZAotICogdHdpY2Ugb24gdGhlIHNhbWUgQ1BVOyB0aGlzIGlzIG9rYXkgYmVjYXVzZSBvZiB0aGUgY291bnQuCi0gKgotICogIndyaXRpbmciIGlzIHVzZWQgd2hlbiByZWFkaW5nIGNvdW50ZXJzLgotICogIER1cmluZyByZXBsYWNlIGFueSByZWFkZXJzIHRoYXQgYXJlIHVzaW5nIHRoZSBvbGQgdGFibGVzIGhhdmUgdG8gY29tcGxldGUKLSAqICBiZWZvcmUgZnJlZWluZyB0aGUgb2xkIHRhYmxlLiBUaGlzIGlzIGhhbmRsZWQgYnkgdGhlIHdyaXRlIGxvY2tpbmcKLSAqICBuZWNlc3NhcnkgZm9yIHJlYWRpbmcgdGhlIGNvdW50ZXJzLgorLyoqCisgKiB4dF9yZWNzZXEgLSByZWN1cnNpdmUgc2VxY291bnQgZm9yIG5ldGZpbHRlciB1c2UKKyAqIAorICogUGFja2V0IHByb2Nlc3NpbmcgY2hhbmdlcyB0aGUgc2VxY291bnQgb25seSBpZiBubyByZWN1cnNpb24gaGFwcGVuZWQKKyAqIGdldF9jb3VudGVycygpIGNhbiB1c2UgcmVhZF9zZXFjb3VudF9iZWdpbigpL3JlYWRfc2VxY291bnRfcmV0cnkoKSwKKyAqIGJlY2F1c2Ugd2UgdXNlIHRoZSBub3JtYWwgc2VxY291bnQgY29udmVudGlvbiA6CisgKiBMb3cgb3JkZXIgYml0IHNldCB0byAxIGlmIGEgd3JpdGVyIGlzIGFjdGl2ZS4KICAqLwotc3RydWN0IHh0X2luZm9fbG9jayB7Ci0Jc2VxbG9ja190IGxvY2s7Ci0JdW5zaWduZWQgY2hhciByZWFkZXJzOwotfTsKLURFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgeHRfaW5mb19sb2NrLCB4dF9pbmZvX2xvY2tzKTsKK0RFQ0xBUkVfUEVSX0NQVShzZXFjb3VudF90LCB4dF9yZWNzZXEpOwogCi0vKgotICogTm90ZTogd2UgbmVlZCB0byBlbnN1cmUgdGhhdCBwcmVlbXB0aW9uIGlzIGRpc2FibGVkIGJlZm9yZSBhY3F1aXJpbmcKLSAqIHRoZSBwZXItY3B1LXZhcmlhYmxlLCBzbyB3ZSBkbyBpdCBhcyBhIHR3byBzdGVwIHByb2Nlc3MgcmF0aGVyIHRoYW4KLSAqIHVzaW5nICJzcGluX2xvY2tfYmgoKSIuCisvKioKKyAqIHh0X3dyaXRlX3JlY3NlcV9iZWdpbiAtIHN0YXJ0IG9mIGEgd3JpdGUgc2VjdGlvbgogICoKLSAqIFdlIF9hbHNvXyBuZWVkIHRvIGRpc2FibGUgYm90dG9tIGhhbGYgcHJvY2Vzc2luZyBiZWZvcmUgdXBkYXRpbmcgb3VyCi0gKiBuZXN0aW5nIGNvdW50LCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgb25seSBraW5kIG9mIHJlLWVudHJhbmN5IGlzIHRoaXMKLSAqIGNvZGUgYmVpbmcgY2FsbGVkIGJ5IGl0c2VsZjogc2luY2UgdGhlIGNvdW50K2xvY2sgaXMgbm90IGFuIGF0b21pYwotICogb3BlcmF0aW9uLCB3ZSBjYW4gYWxsb3cgbm8gcmFjZXMuCi0gKgotICogX09ubHlfIHRoYXQgc3BlY2lhbCBjb21iaW5hdGlvbiBvZiBiZWluZyBwZXItY3B1IGFuZCBuZXZlciBnZXR0aW5nCi0gKiByZS1lbnRlcmVkIGFzeW5jaHJvbm91c2x5IG1lYW5zIHRoYXQgdGhlIGNvdW50IGlzIHNhZmUuCisgKiBCZWdpbiBwYWNrZXQgcHJvY2Vzc2luZyA6IGFsbCByZWFkZXJzIG11c3Qgd2FpdCB0aGUgZW5kCisgKiAxKSBNdXN0IGJlIGNhbGxlZCB3aXRoIHByZWVtcHRpb24gZGlzYWJsZWQKKyAqIDIpIHNvZnRpcnFzIG11c3QgYmUgZGlzYWJsZWQgdG9vIChvciB3ZSBzaG91bGQgdXNlIGlycXNhZmVfY3B1X2FkZCgpKQorICogUmV0dXJucyA6CisgKiAgMSBpZiBubyByZWN1cnNpb24gb24gdGhpcyBjcHUKKyAqICAwIGlmIHJlY3Vyc2lvbiBkZXRlY3RlZAogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgeHRfaW5mb19yZGxvY2tfYmgodm9pZCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHh0X3dyaXRlX3JlY3NlcV9iZWdpbih2b2lkKQogewotCXN0cnVjdCB4dF9pbmZvX2xvY2sgKmxvY2s7CisJdW5zaWduZWQgaW50IGFkZGVuZDsKIAotCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQlsb2NrID0gJl9fZ2V0X2NwdV92YXIoeHRfaW5mb19sb2Nrcyk7Ci0JaWYgKGxpa2VseSghbG9jay0+cmVhZGVycysrKSkKLQkJd3JpdGVfc2VxbG9jaygmbG9jay0+bG9jayk7CisJLyoKKwkgKiBMb3cgb3JkZXIgYml0IG9mIHNlcXVlbmNlIGlzIHNldCBpZiB3ZSBhbHJlYWR5CisJICogY2FsbGVkIHh0X3dyaXRlX3JlY3NlcV9iZWdpbigpLgorCSAqLworCWFkZGVuZCA9IChfX3RoaXNfY3B1X3JlYWQoeHRfcmVjc2VxLnNlcXVlbmNlKSArIDEpICYgMTsKKworCS8qCisJICogVGhpcyBpcyBraW5kIG9mIGEgd3JpdGVfc2VxY291bnRfYmVnaW4oKSwgYnV0IGFkZGVuZCBpcyAwIG9yIDEKKwkgKiBXZSBkb250IGNoZWNrIGFkZGVuZCB2YWx1ZSB0byBhdm9pZCBhIHRlc3QgYW5kIGNvbmRpdGlvbmFsIGp1bXAsCisJICogc2luY2UgYWRkZW5kIGlzIG1vc3QgbGlrZWx5IDEKKwkgKi8KKwlfX3RoaXNfY3B1X2FkZCh4dF9yZWNzZXEuc2VxdWVuY2UsIGFkZGVuZCk7CisJc21wX3dtYigpOworCisJcmV0dXJuIGFkZGVuZDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHh0X2luZm9fcmR1bmxvY2tfYmgodm9pZCkKLXsKLQlzdHJ1Y3QgeHRfaW5mb19sb2NrICpsb2NrID0gJl9fZ2V0X2NwdV92YXIoeHRfaW5mb19sb2Nrcyk7Ci0KLQlpZiAobGlrZWx5KCEtLWxvY2stPnJlYWRlcnMpKQotCQl3cml0ZV9zZXF1bmxvY2soJmxvY2stPmxvY2spOwotCWxvY2FsX2JoX2VuYWJsZSgpOwotfQotCi0vKgotICogVGhlICJ3cml0ZXIiIHNpZGUgbmVlZHMgdG8gZ2V0IGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIGxvY2ssCi0gKiByZWdhcmRsZXNzIG9mIHJlYWRlcnMuICBUaGlzIG11c3QgYmUgY2FsbGVkIHdpdGggYm90dG9tIGhhbGYKLSAqIHByb2Nlc3NpbmcgKGFuZCB0aHVzIGFsc28gcHJlZW1wdGlvbikgZGlzYWJsZWQuCisvKioKKyAqIHh0X3dyaXRlX3JlY3NlcV9lbmQgLSBlbmQgb2YgYSB3cml0ZSBzZWN0aW9uCisgKiBAYWRkZW5kOiByZXR1cm4gdmFsdWUgZnJvbSBwcmV2aW91cyB4dF93cml0ZV9yZWNzZXFfYmVnaW4oKQorICoKKyAqIEVuZCBwYWNrZXQgcHJvY2Vzc2luZyA6IGFsbCByZWFkZXJzIGNhbiBwcm9jZWVkCisgKiAxKSBNdXN0IGJlIGNhbGxlZCB3aXRoIHByZWVtcHRpb24gZGlzYWJsZWQKKyAqIDIpIHNvZnRpcnFzIG11c3QgYmUgZGlzYWJsZWQgdG9vIChvciB3ZSBzaG91bGQgdXNlIGlycXNhZmVfY3B1X2FkZCgpKQogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgeHRfaW5mb193cmxvY2sodW5zaWduZWQgaW50IGNwdSkKK3N0YXRpYyBpbmxpbmUgdm9pZCB4dF93cml0ZV9yZWNzZXFfZW5kKHVuc2lnbmVkIGludCBhZGRlbmQpCiB7Ci0Jd3JpdGVfc2VxbG9jaygmcGVyX2NwdSh4dF9pbmZvX2xvY2tzLCBjcHUpLmxvY2spOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgeHRfaW5mb193cnVubG9jayh1bnNpZ25lZCBpbnQgY3B1KQotewotCXdyaXRlX3NlcXVubG9jaygmcGVyX2NwdSh4dF9pbmZvX2xvY2tzLCBjcHUpLmxvY2spOworCS8qIHRoaXMgaXMga2luZCBvZiBhIHdyaXRlX3NlcWNvdW50X2VuZCgpLCBidXQgYWRkZW5kIGlzIDAgb3IgMSAqLworCXNtcF93bWIoKTsKKwlfX3RoaXNfY3B1X2FkZCh4dF9yZWNzZXEuc2VxdWVuY2UsIGFkZGVuZCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25pbGZzMl9mcy5oIGIvaW5jbHVkZS9saW51eC9uaWxmczJfZnMuaAppbmRleCA4NzY4YzQ2Li43NDU0YWQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25pbGZzMl9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmlsZnMyX2ZzLmgKQEAgLTEwNyw3ICsxMDcsNyBAQAogI2RlZmluZSBOSUxGU19TUl9EQVRfT0ZGU0VUKGlub2RlX3NpemUpICAgICBOSUxGU19TUl9NRFRfT0ZGU0VUKGlub2RlX3NpemUsIDApCiAjZGVmaW5lIE5JTEZTX1NSX0NQRklMRV9PRkZTRVQoaW5vZGVfc2l6ZSkgIE5JTEZTX1NSX01EVF9PRkZTRVQoaW5vZGVfc2l6ZSwgMSkKICNkZWZpbmUgTklMRlNfU1JfU1VGSUxFX09GRlNFVChpbm9kZV9zaXplKSAgTklMRlNfU1JfTURUX09GRlNFVChpbm9kZV9zaXplLCAyKQotI2RlZmluZSBOSUxGU19TUl9CWVRFUyAgICAgICAgICAgICAgICAgIChzaXplb2Yoc3RydWN0IG5pbGZzX3N1cGVyX3Jvb3QpKQorI2RlZmluZSBOSUxGU19TUl9CWVRFUyhpbm9kZV9zaXplKQkgICAgTklMRlNfU1JfTURUX09GRlNFVChpbm9kZV9zaXplLCAzKQogCiAvKgogICogTWF4aW1hbCBtb3VudCBjb3VudHMKQEAgLTg0NSw1ICs4NDUsNyBAQAogCV9JT1IoTklMRlNfSU9DVExfSURFTlQsIDB4OEEsIF9fdTY0KQogI2RlZmluZSBOSUxGU19JT0NUTF9SRVNJWkUgIFwKIAlfSU9XKE5JTEZTX0lPQ1RMX0lERU5ULCAweDhCLCBfX3U2NCkKKyNkZWZpbmUgTklMRlNfSU9DVExfU0VUX0FMTE9DX1JBTkdFICBcCisJX0lPVyhOSUxGU19JT0NUTF9JREVOVCwgMHg4QywgX191NjRbMl0pCiAKICNlbmRpZgkvKiBfTElOVVhfTklMRlNfRlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ubDgwMjExLmggYi9pbmNsdWRlL2xpbnV4L25sODAyMTEuaAppbmRleCBiYmZhMTA5Li5jN2NjYWFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25sODAyMTEuaAorKysgYi9pbmNsdWRlL2xpbnV4L25sODAyMTEuaApAQCAtNzcsNiArNzcsMzkgQEAKICAqLwogCiAvKioKKyAqIERPQzogVmlydHVhbCBpbnRlcmZhY2UgLyBjb25jdXJyZW5jeSBjYXBhYmlsaXRpZXMKKyAqCisgKiBTb21lIGRldmljZXMgYXJlIGFibGUgdG8gb3BlcmF0ZSB3aXRoIHZpcnR1YWwgTUFDcywgdGhleSBjYW4gaGF2ZQorICogbW9yZSB0aGFuIG9uZSB2aXJ0dWFsIGludGVyZmFjZS4gVGhlIGNhcGFiaWxpdHkgaGFuZGxpbmcgZm9yIHRoaXMKKyAqIGlzIGEgYml0IGNvbXBsZXggdGhvdWdoLCBhcyB0aGVyZSBtYXkgYmUgYSBudW1iZXIgb2YgcmVzdHJpY3Rpb25zCisgKiBvbiB0aGUgdHlwZXMgb2YgY29uY3VycmVuY3kgdGhhdCBhcmUgc3VwcG9ydGVkLgorICoKKyAqIFRvIHN0YXJ0IHdpdGgsIGVhY2ggZGV2aWNlIHN1cHBvcnRzIHRoZSBpbnRlcmZhY2UgdHlwZXMgbGlzdGVkIGluCisgKiB0aGUgJU5MODAyMTFfQVRUUl9TVVBQT1JURURfSUZUWVBFUyBhdHRyaWJ1dGUsIGJ1dCBieSBsaXN0aW5nIHRoZQorICogdHlwZXMgdGhlcmUgbm8gY29uY3VycmVuY3kgaXMgaW1wbGllZC4KKyAqCisgKiBPbmNlIGNvbmN1cnJlbmN5IGlzIGRlc2lyZWQsIG1vcmUgYXR0cmlidXRlcyBtdXN0IGJlIG9ic2VydmVkOgorICogVG8gc3RhcnQgd2l0aCwgc2luY2Ugc29tZSBpbnRlcmZhY2UgdHlwZXMgYXJlIHB1cmVseSBtYW5hZ2VkIGluCisgKiBzb2Z0d2FyZSwgbGlrZSB0aGUgQVAtVkxBTiB0eXBlIGluIG1hYzgwMjExIGZvciBleGFtcGxlLCB0aGVyZSdzCisgKiBhbiBhZGRpdGlvbmFsIGxpc3Qgb2YgdGhlc2UsIHRoZXkgY2FuIGJlIGFkZGVkIGF0IGFueSB0aW1lIGFuZAorICogYXJlIG9ubHkgcmVzdHJpY3RlZCBieSBzb21lIHNlbWFudGljIHJlc3RyaWN0aW9ucyAoZS5nLiBBUC1WTEFOCisgKiBjYW5ub3QgYmUgYWRkZWQgd2l0aG91dCBhIGNvcnJlc3BvbmRpbmcgQVAgaW50ZXJmYWNlKS4gVGhpcyBsaXN0CisgKiBpcyBleHBvcnRlZCBpbiB0aGUgJU5MODAyMTFfQVRUUl9TT0ZUV0FSRV9JRlRZUEVTIGF0dHJpYnV0ZS4KKyAqCisgKiBGdXJ0aGVyLCB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgY29tYmluYXRpb25zIGlzIGV4cG9ydGVkLiBUaGlzIGlzCisgKiBpbiB0aGUgJU5MODAyMTFfQVRUUl9JTlRFUkZBQ0VfQ09NQklOQVRJT05TIGF0dHJpYnV0ZS4gQmFzaWNhbGx5LAorICogaXQgZXhwb3J0cyBhIGxpc3Qgb2YgImdyb3VwcyIsIGFuZCBhdCBhbnkgcG9pbnQgaW4gdGltZSB0aGUKKyAqIGludGVyZmFjZXMgdGhhdCBhcmUgY3VycmVudGx5IGFjdGl2ZSBtdXN0IGZhbGwgaW50byBhbnkgb25lIG9mCisgKiB0aGUgYWR2ZXJ0aXNlZCBncm91cHMuIFdpdGhpbiBlYWNoIGdyb3VwLCB0aGVyZSBhcmUgcmVzdHJpY3Rpb25zCisgKiBvbiB0aGUgbnVtYmVyIG9mIGludGVyZmFjZXMgb2YgZGlmZmVyZW50IHR5cGVzIHRoYXQgYXJlIHN1cHBvcnRlZAorICogYW5kIGFsc28gdGhlIG51bWJlciBvZiBkaWZmZXJlbnQgY2hhbm5lbHMsIGFsb25nIHdpdGggcG90ZW50aWFsbHkKKyAqIHNvbWUgb3RoZXIgcmVzdHJpY3Rpb25zLiBTZWUgJmVudW0gbmw4MDIxMV9pZl9jb21iaW5hdGlvbl9hdHRycy4KKyAqCisgKiBBbGwgdG9nZXRoZXIsIHRoZXNlIGF0dHJpYnV0ZXMgZGVmaW5lIHRoZSBjb25jdXJyZW5jeSBvZiB2aXJ0dWFsCisgKiBpbnRlcmZhY2VzIHRoYXQgYSBnaXZlbiBkZXZpY2Ugc3VwcG9ydHMuCisgKi8KKworLyoqCiAgKiBlbnVtIG5sODAyMTFfY29tbWFuZHMgLSBzdXBwb3J0ZWQgbmw4MDIxMSBjb21tYW5kcwogICoKICAqIEBOTDgwMjExX0NNRF9VTlNQRUM6IHVuc3BlY2lmaWVkIGNvbW1hbmQgdG8gY2F0Y2ggZXJyb3JzCkBAIC0yMDMsNiArMjM2LDI4IEBACiAgKiBATkw4MDIxMV9DTURfU0NBTl9BQk9SVEVEOiBzY2FuIHdhcyBhYm9ydGVkLCBmb3IgdW5zcGVjaWZpZWQgcmVhc29ucywKICAqCXBhcnRpYWwgc2NhbiByZXN1bHRzIG1heSBiZSBhdmFpbGFibGUKICAqCisgKiBATkw4MDIxMV9DTURfU1RBUlRfU0NIRURfU0NBTjogc3RhcnQgYSBzY2hlZHVsZWQgc2NhbiBhdCBjZXJ0YWluCisgKglpbnRlcnZhbHMsIGFzIHNwZWNpZmllZCBieSAlTkw4MDIxMV9BVFRSX1NDSEVEX1NDQU5fSU5URVJWQUwuCisgKglMaWtlIHdpdGggbm9ybWFsIHNjYW5zLCBpZiBTU0lEcyAoJU5MODAyMTFfQVRUUl9TQ0FOX1NTSURTKQorICoJYXJlIHBhc3NlZCwgdGhleSBhcmUgdXNlZCBpbiB0aGUgcHJvYmUgcmVxdWVzdHMuICBGb3IKKyAqCWJyb2FkY2FzdCwgYSBicm9hZGNhc3QgU1NJRCBtdXN0IGJlIHBhc3NlZCAoaWUuIGFuIGVtcHR5CisgKglzdHJpbmcpLiAgSWYgbm8gU1NJRCBpcyBwYXNzZWQsIG5vIHByb2JlIHJlcXVlc3RzIGFyZSBzZW50IGFuZAorICoJYSBwYXNzaXZlIHNjYW4gaXMgcGVyZm9ybWVkLiAgJU5MODAyMTFfQVRUUl9TQ0FOX0ZSRVFVRU5DSUVTLAorICoJaWYgcGFzc2VkLCBkZWZpbmUgd2hpY2ggY2hhbm5lbHMgc2hvdWxkIGJlIHNjYW5uZWQ7IGlmIG5vdAorICoJcGFzc2VkLCBhbGwgY2hhbm5lbHMgYWxsb3dlZCBmb3IgdGhlIGN1cnJlbnQgcmVndWxhdG9yeSBkb21haW4KKyAqCWFyZSB1c2VkLiAgRXh0cmEgSUVzIGNhbiBhbHNvIGJlIHBhc3NlZCBmcm9tIHRoZSB1c2Vyc3BhY2UgYnkKKyAqCXVzaW5nIHRoZSAlTkw4MDIxMV9BVFRSX0lFIGF0dHJpYnV0ZS4KKyAqIEBOTDgwMjExX0NNRF9TVE9QX1NDSEVEX1NDQU46IHN0b3AgYSBzY2hlZHVsZWQgc2NhbgorICogQE5MODAyMTFfQ01EX1NDSEVEX1NDQU5fUkVTVUxUUzogaW5kaWNhdGVzIHRoYXQgdGhlcmUgYXJlIHNjaGVkdWxlZCBzY2FuCisgKglyZXN1bHRzIGF2YWlsYWJsZS4KKyAqIEBOTDgwMjExX0NNRF9TQ0hFRF9TQ0FOX1NUT1BQRUQ6IGluZGljYXRlcyB0aGF0IHRoZSBzY2hlZHVsZWQgc2NhbiBoYXMKKyAqCXN0b3BwZWQuICBUaGUgZHJpdmVyIG1heSBpc3N1ZSB0aGlzIGV2ZW50IGF0IGFueSB0aW1lIGR1cmluZyBhCisgKglzY2hlZHVsZWQgc2Nhbi4gIE9uZSByZWFzb24gZm9yIHN0b3BwaW5nIHRoZSBzY2FuIGlzIGlmIHRoZSBoYXJkd2FyZQorICoJZG9lcyBub3Qgc3VwcG9ydCBzdGFydGluZyBhbiBhc3NvY2lhdGlvbiBvciBhIG5vcm1hbCBzY2FuIHdoaWxlIHJ1bm5pbmcKKyAqCWEgc2NoZWR1bGVkIHNjYW4uICBUaGlzIGV2ZW50IGlzIGFsc28gc2VudCB3aGVuIHRoZQorICoJJU5MODAyMTFfQ01EX1NUT1BfU0NIRURfU0NBTiBjb21tYW5kIGlzIHJlY2VpdmVkIG9yIHdoZW4gdGhlIGludGVyZmFjZQorICoJaXMgYnJvdWdodCBkb3duIHdoaWxlIGEgc2NoZWR1bGVkIHNjYW4gd2FzIHJ1bm5pbmcuCisgKgogICogQE5MODAyMTFfQ01EX0dFVF9TVVJWRVk6IGdldCBzdXJ2ZXkgcmVzdWxzLCBlLmcuIGNoYW5uZWwgb2NjdXBhdGlvbgogICogICAgICBvciBub2lzZSBsZXZlbAogICogQE5MODAyMTFfQ01EX05FV19TVVJWRVlfUkVTVUxUUzogc3VydmV5IGRhdGEgbm90aWZpY2F0aW9uIChhcyBhIHJlcGx5IHRvCkBAIC00MTAsNiArNDY1LDI0IEBACiAgKglub3RpZmljYXRpb24uIFRoaXMgZXZlbnQgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IGFuIHVucHJvdGVjdGVkCiAgKglkaXNhc3NvY2lhdGlvbiBmcmFtZSB3YXMgZHJvcHBlZCB3aGVuIE1GUCBpcyBpbiB1c2UuCiAgKgorICogQE5MODAyMTFfQ01EX05FV19QRUVSX0NBTkRJREFURTogTm90aWZpY2F0aW9uIG9uIHRoZSByZWNlcHRpb24gb2YgYQorICogICAgICBiZWFjb24gb3IgcHJvYmUgcmVzcG9uc2UgZnJvbSBhIGNvbXBhdGlibGUgbWVzaCBwZWVyLiAgVGhpcyBpcyBvbmx5CisgKiAgICAgIHNlbnQgd2hpbGUgbm8gc3RhdGlvbiBpbmZvcm1hdGlvbiAoc3RhX2luZm8pIGV4aXN0cyBmb3IgdGhlIG5ldyBwZWVyCisgKiAgICAgIGNhbmRpZGF0ZSBhbmQgd2hlbiBATkw4MDIxMV9NRVNIX1NFVFVQX1VTRVJTUEFDRV9BVVRIIGlzIHNldC4gIE9uCisgKiAgICAgIHJlY2VwdGlvbiBvZiB0aGlzIG5vdGlmaWNhdGlvbiwgdXNlcnNwYWNlIG1heSBkZWNpZGUgdG8gY3JlYXRlIGEgbmV3CisgKiAgICAgIHN0YXRpb24gKEBOTDgwMjExX0NNRF9ORVdfU1RBVElPTikuICBUbyBzdG9wIHRoaXMgbm90aWZpY2F0aW9uIGZyb20KKyAqICAgICAgcmVvY2N1cnJpbmcsIHRoZSB1c2Vyc3BhY2UgYXV0aGVudGljYXRpb24gZGFlbW9uIG1heSB3YW50IHRvIGNyZWF0ZSB0aGUKKyAqICAgICAgbmV3IHN0YXRpb24gd2l0aCB0aGUgQVVUSEVOVElDQVRFRCBmbGFnIHVuc2V0IGFuZCBtYXliZSBjaGFuZ2UgaXQgbGF0ZXIKKyAqICAgICAgZGVwZW5kaW5nIG9uIHRoZSBhdXRoZW50aWNhdGlvbiByZXN1bHQuCisgKgorICogQE5MODAyMTFfQ01EX0dFVF9XT1dMQU46IGdldCBXYWtlLW9uLVdpcmVsZXNzLUxBTiAoV29XTEFOKSBzZXR0aW5ncy4KKyAqIEBOTDgwMjExX0NNRF9TRVRfV09XTEFOOiBzZXQgV2FrZS1vbi1XaXJlbGVzcy1MQU4gKFdvV0xBTikgc2V0dGluZ3MuCisgKglTaW5jZSB3aXJlbGVzcyBpcyBtb3JlIGNvbXBsZXggdGhhbiB3aXJlZCBldGhlcm5ldCwgaXQgc3VwcG9ydHMKKyAqCXZhcmlvdXMgdHJpZ2dlcnMuIFRoZXNlIHRyaWdnZXJzIGNhbiBiZSBjb25maWd1cmVkIHRocm91Z2ggdGhpcworICoJY29tbWFuZCB3aXRoIHRoZSAlTkw4MDIxMV9BVFRSX1dPV0xBTl9UUklHR0VSUyBhdHRyaWJ1dGUuIEZvcgorICoJbW9yZSBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uLCBzZWUKKyAqCWh0dHA6Ly93aXJlbGVzcy5rZXJuZWwub3JnL2VuL3VzZXJzL0RvY3VtZW50YXRpb24vV29XTEFOLgorICoKICAqIEBOTDgwMjExX0NNRF9NQVg6IGhpZ2hlc3QgdXNlZCBjb21tYW5kIG51bWJlcgogICogQF9fTkw4MDIxMV9DTURfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlCiAgKi8KQEAgLTUyMiw2ICs1OTUsMTYgQEAKIAlOTDgwMjExX0NNRF9VTlBST1RfREVBVVRIRU5USUNBVEUsCiAJTkw4MDIxMV9DTURfVU5QUk9UX0RJU0FTU09DSUFURSwKIAorCU5MODAyMTFfQ01EX05FV19QRUVSX0NBTkRJREFURSwKKworCU5MODAyMTFfQ01EX0dFVF9XT1dMQU4sCisJTkw4MDIxMV9DTURfU0VUX1dPV0xBTiwKKworCU5MODAyMTFfQ01EX1NUQVJUX1NDSEVEX1NDQU4sCisJTkw4MDIxMV9DTURfU1RPUF9TQ0hFRF9TQ0FOLAorCU5MODAyMTFfQ01EX1NDSEVEX1NDQU5fUkVTVUxUUywKKwlOTDgwMjExX0NNRF9TQ0hFRF9TQ0FOX1NUT1BQRUQsCisKIAkvKiBhZGQgbmV3IGNvbW1hbmRzIGFib3ZlIGhlcmUgKi8KIAogCS8qIHVzZWQgdG8gZGVmaW5lIE5MODAyMTFfQ01EX01BWCBiZWxvdyAqLwpAQCAtNTQ1LDYgKzYyOCw3IEBACiAvKiBzb3VyY2UtbGV2ZWwgQVBJIGNvbXBhdGliaWxpdHkgKi8KICNkZWZpbmUgTkw4MDIxMV9DTURfR0VUX01FU0hfUEFSQU1TIE5MODAyMTFfQ01EX0dFVF9NRVNIX0NPTkZJRwogI2RlZmluZSBOTDgwMjExX0NNRF9TRVRfTUVTSF9QQVJBTVMgTkw4MDIxMV9DTURfU0VUX01FU0hfQ09ORklHCisjZGVmaW5lIE5MODAyMTFfTUVTSF9TRVRVUF9WRU5ET1JfUEFUSF9TRUxfSUUgTkw4MDIxMV9NRVNIX1NFVFVQX0lFCiAKIC8qKgogICogZW51bSBubDgwMjExX2F0dHJzIC0gbmw4MDIxMSBuZXRsaW5rIGF0dHJpYnV0ZXMKQEAgLTg4Niw2ICs5NzAsMzEgQEAKICAqCWNoYW5nZWQgb25jZSB0aGUgbWVzaCBpcyBhY3RpdmUuCiAgKiBATkw4MDIxMV9BVFRSX01FU0hfQ09ORklHOiBNZXNoIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycywgYSBuZXN0ZWQgYXR0cmlidXRlCiAgKgljb250YWluaW5nIGF0dHJpYnV0ZXMgZnJvbSAmZW51bSBubDgwMjExX21lc2hjb25mX3BhcmFtcy4KKyAqIEBOTDgwMjExX0FUVFJfU1VQUE9SVF9NRVNIX0FVVEg6IEN1cnJlbnRseSwgdGhpcyBtZWFucyB0aGUgdW5kZXJseWluZyBkcml2ZXIKKyAqCWFsbG93cyBhdXRoIGZyYW1lcyBpbiBhIG1lc2ggdG8gYmUgcGFzc2VkIHRvIHVzZXJzcGFjZSBmb3IgcHJvY2Vzc2luZyB2aWEKKyAqCXRoZSBATkw4MDIxMV9NRVNIX1NFVFVQX1VTRVJTUEFDRV9BVVRIIGZsYWcuCisgKiBATkw4MDIxMV9BVFRSX1NUQV9QTElOS19TVEFURTogVGhlIHN0YXRlIG9mIGEgbWVzaCBwZWVyIGxpbmsgYXMKKyAqCWRlZmluZWQgaW4gJmVudW0gbmw4MDIxMV9wbGlua19zdGF0ZS4gVXNlZCB3aGVuIHVzZXJzcGFjZSBpcworICoJZHJpdmluZyB0aGUgcGVlciBsaW5rIG1hbmFnZW1lbnQgc3RhdGUgbWFjaGluZS4KKyAqCUBOTDgwMjExX01FU0hfU0VUVVBfVVNFUlNQQUNFX0FNUEUgbXVzdCBiZSBlbmFibGVkLgorICoKKyAqIEBOTDgwMjExX0FUVFJfV09XTEFOX1NVUFBPUlRFRDogaW5kaWNhdGVzLCBhcyBwYXJ0IG9mIHRoZSB3aXBoeSBjYXBhYmlsaXRpZXMsCisgKgl0aGUgc3VwcG9ydGVkIFdvV0xBTiB0cmlnZ2VycworICogQE5MODAyMTFfQVRUUl9XT1dMQU5fVFJJR0dFUlM6IHVzZWQgYnkgJU5MODAyMTFfQ01EX1NFVF9XT1dMQU4gdG8KKyAqCWluZGljYXRlIHdoaWNoIFdvVyB0cmlnZ2VycyBzaG91bGQgYmUgZW5hYmxlZC4gVGhpcyBpcyBhbHNvCisgKgl1c2VkIGJ5ICVOTDgwMjExX0NNRF9HRVRfV09XTEFOIHRvIGdldCB0aGUgY3VycmVudGx5IGVuYWJsZWQgV29XTEFOCisgKgl0cmlnZ2Vycy4KKworICogQE5MODAyMTFfQVRUUl9TQ0hFRF9TQ0FOX0lOVEVSVkFMOiBJbnRlcnZhbCBiZXR3ZWVuIHNjaGVkdWxlZCBzY2FuCisgKgljeWNsZXMsIGluIG1zZWNzLgorICoKKyAqIEBOTDgwMjExX0FUVFJfSU5URVJGQUNFX0NPTUJJTkFUSU9OUzogTmVzdGVkIGF0dHJpYnV0ZSBsaXN0aW5nIHRoZSBzdXBwb3J0ZWQKKyAqCWludGVyZmFjZSBjb21iaW5hdGlvbnMuIEluIGVhY2ggbmVzdGVkIGl0ZW0sIGl0IGNvbnRhaW5zIGF0dHJpYnV0ZXMKKyAqCWRlZmluZWQgaW4gJmVudW0gbmw4MDIxMV9pZl9jb21iaW5hdGlvbl9hdHRycy4KKyAqIEBOTDgwMjExX0FUVFJfU09GVFdBUkVfSUZUWVBFUzogTmVzdGVkIGF0dHJpYnV0ZSAoanVzdCBsaWtlCisgKgklTkw4MDIxMV9BVFRSX1NVUFBPUlRFRF9JRlRZUEVTKSBjb250YWluaW5nIHRoZSBpbnRlcmZhY2UgdHlwZXMgdGhhdAorICoJYXJlIG1hbmFnZWQgaW4gc29mdHdhcmU6IGludGVyZmFjZXMgb2YgdGhlc2UgdHlwZXMgYXJlbid0IHN1YmplY3QgdG8KKyAqCWFueSByZXN0cmljdGlvbnMgaW4gdGhlaXIgbnVtYmVyIG9yIGNvbWJpbmF0aW9ucy4KICAqCiAgKiBATkw4MDIxMV9BVFRSX01BWDogaGlnaGVzdCBhdHRyaWJ1dGUgbnVtYmVyIGN1cnJlbnRseSBkZWZpbmVkCiAgKiBAX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlCkBAIC0xMDc0LDYgKzExODMsMTcgQEAKIAlOTDgwMjExX0FUVFJfV0lQSFlfQU5URU5OQV9BVkFJTF9UWCwKIAlOTDgwMjExX0FUVFJfV0lQSFlfQU5URU5OQV9BVkFJTF9SWCwKIAorCU5MODAyMTFfQVRUUl9TVVBQT1JUX01FU0hfQVVUSCwKKwlOTDgwMjExX0FUVFJfU1RBX1BMSU5LX1NUQVRFLAorCisJTkw4MDIxMV9BVFRSX1dPV0xBTl9UUklHR0VSUywKKwlOTDgwMjExX0FUVFJfV09XTEFOX1RSSUdHRVJTX1NVUFBPUlRFRCwKKworCU5MODAyMTFfQVRUUl9TQ0hFRF9TQ0FOX0lOVEVSVkFMLAorCisJTkw4MDIxMV9BVFRSX0lOVEVSRkFDRV9DT01CSU5BVElPTlMsCisJTkw4MDIxMV9BVFRSX1NPRlRXQVJFX0lGVFlQRVMsCisKIAkvKiBhZGQgYXR0cmlidXRlcyBoZXJlLCB1cGRhdGUgdGhlIHBvbGljeSBpbiBubDgwMjExLmMgKi8KIAogCV9fTkw4MDIxMV9BVFRSX0FGVEVSX0xBU1QsCkBAIC0xMTI2LDcgKzEyNDYsOSBAQAogICogQE5MODAyMTFfSUZUWVBFX0FESE9DOiBpbmRlcGVuZGVudCBCU1MgbWVtYmVyCiAgKiBATkw4MDIxMV9JRlRZUEVfU1RBVElPTjogbWFuYWdlZCBCU1MgbWVtYmVyCiAgKiBATkw4MDIxMV9JRlRZUEVfQVA6IGFjY2VzcyBwb2ludAotICogQE5MODAyMTFfSUZUWVBFX0FQX1ZMQU46IFZMQU4gaW50ZXJmYWNlIGZvciBhY2Nlc3MgcG9pbnRzCisgKiBATkw4MDIxMV9JRlRZUEVfQVBfVkxBTjogVkxBTiBpbnRlcmZhY2UgZm9yIGFjY2VzcyBwb2ludHM7IFZMQU4gaW50ZXJmYWNlcworICoJYXJlIGEgYml0IHNwZWNpYWwgaW4gdGhhdCB0aGV5IG11c3QgYWx3YXlzIGJlIHRpZWQgdG8gYSBwcmUtZXhpc3RpbmcKKyAqCUFQIHR5cGUgaW50ZXJmYWNlLgogICogQE5MODAyMTFfSUZUWVBFX1dEUzogd2lyZWxlc3MgZGlzdHJpYnV0aW9uIGludGVyZmFjZQogICogQE5MODAyMTFfSUZUWVBFX01PTklUT1I6IG1vbml0b3IgaW50ZXJmYWNlIHJlY2VpdmluZyBhbGwgZnJhbWVzCiAgKiBATkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDogbWVzaCBwb2ludApAQCAtMTE2OCw2ICsxMjkwLDcgQEAKICAqCXdpdGggc2hvcnQgYmFya2VyIHByZWFtYmxlCiAgKiBATkw4MDIxMV9TVEFfRkxBR19XTUU6IHN0YXRpb24gaXMgV01FL1FvUyBjYXBhYmxlCiAgKiBATkw4MDIxMV9TVEFfRkxBR19NRlA6IHN0YXRpb24gdXNlcyBtYW5hZ2VtZW50IGZyYW1lIHByb3RlY3Rpb24KKyAqIEBOTDgwMjExX1NUQV9GTEFHX0FVVEhFTlRJQ0FURUQ6IHN0YXRpb24gaXMgYXV0aGVudGljYXRlZAogICogQE5MODAyMTFfU1RBX0ZMQUdfTUFYOiBoaWdoZXN0IHN0YXRpb24gZmxhZyBudW1iZXIgY3VycmVudGx5IGRlZmluZWQKICAqIEBfX05MODAyMTFfU1RBX0ZMQUdfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlCiAgKi8KQEAgLTExNzcsNiArMTMwMCw3IEBACiAJTkw4MDIxMV9TVEFfRkxBR19TSE9SVF9QUkVBTUJMRSwKIAlOTDgwMjExX1NUQV9GTEFHX1dNRSwKIAlOTDgwMjExX1NUQV9GTEFHX01GUCwKKwlOTDgwMjExX1NUQV9GTEFHX0FVVEhFTlRJQ0FURUQsCiAKIAkvKiBrZWVwIGxhc3QgKi8KIAlfX05MODAyMTFfU1RBX0ZMQUdfQUZURVJfTEFTVCwKQEAgLTEyMjIsNiArMTM0NiwzNiBAQAogfTsKIAogLyoqCisgKiBlbnVtIG5sODAyMTFfc3RhX2Jzc19wYXJhbSAtIEJTUyBpbmZvcm1hdGlvbiBjb2xsZWN0ZWQgYnkgU1RBCisgKgorICogVGhlc2UgYXR0cmlidXRlIHR5cGVzIGFyZSB1c2VkIHdpdGggJU5MODAyMTFfU1RBX0lORk9fQlNTX1BBUkFNCisgKiB3aGVuIGdldHRpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJpdHJhdGUgb2YgYSBzdGF0aW9uLgorICoKKyAqIEBfX05MODAyMTFfU1RBX0JTU19QQVJBTV9JTlZBTElEOiBhdHRyaWJ1dGUgbnVtYmVyIDAgaXMgcmVzZXJ2ZWQKKyAqIEBOTDgwMjExX1NUQV9CU1NfUEFSQU1fQ1RTX1BST1Q6IHdoZXRoZXIgQ1RTIHByb3RlY3Rpb24gaXMgZW5hYmxlZCAoZmxhZykKKyAqIEBOTDgwMjExX1NUQV9CU1NfUEFSQU1fU0hPUlRfUFJFQU1CTEU6ICB3aGV0aGVyIHNob3J0IHByZWFtYmxlIGlzIGVuYWJsZWQKKyAqCShmbGFnKQorICogQE5MODAyMTFfU1RBX0JTU19QQVJBTV9TSE9SVF9TTE9UX1RJTUU6ICB3aGV0aGVyIHNob3J0IHNsb3QgdGltZSBpcyBlbmFibGVkCisgKgkoZmxhZykKKyAqIEBOTDgwMjExX1NUQV9CU1NfUEFSQU1fRFRJTV9QRVJJT0Q6IERUSU0gcGVyaW9kIGZvciBiZWFjb25pbmcgKHU4KQorICogQE5MODAyMTFfU1RBX0JTU19QQVJBTV9CRUFDT05fSU5URVJWQUw6IEJlYWNvbiBpbnRlcnZhbCAodTE2KQorICogQE5MODAyMTFfU1RBX0JTU19QQVJBTV9NQVg6IGhpZ2hlc3Qgc3RhX2Jzc19wYXJhbSBudW1iZXIgY3VycmVudGx5IGRlZmluZWQKKyAqIEBfX05MODAyMTFfU1RBX0JTU19QQVJBTV9BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2UKKyAqLworZW51bSBubDgwMjExX3N0YV9ic3NfcGFyYW0geworCV9fTkw4MDIxMV9TVEFfQlNTX1BBUkFNX0lOVkFMSUQsCisJTkw4MDIxMV9TVEFfQlNTX1BBUkFNX0NUU19QUk9ULAorCU5MODAyMTFfU1RBX0JTU19QQVJBTV9TSE9SVF9QUkVBTUJMRSwKKwlOTDgwMjExX1NUQV9CU1NfUEFSQU1fU0hPUlRfU0xPVF9USU1FLAorCU5MODAyMTFfU1RBX0JTU19QQVJBTV9EVElNX1BFUklPRCwKKwlOTDgwMjExX1NUQV9CU1NfUEFSQU1fQkVBQ09OX0lOVEVSVkFMLAorCisJLyoga2VlcCBsYXN0ICovCisJX19OTDgwMjExX1NUQV9CU1NfUEFSQU1fQUZURVJfTEFTVCwKKwlOTDgwMjExX1NUQV9CU1NfUEFSQU1fTUFYID0gX19OTDgwMjExX1NUQV9CU1NfUEFSQU1fQUZURVJfTEFTVCAtIDEKK307CisKKy8qKgogICogZW51bSBubDgwMjExX3N0YV9pbmZvIC0gc3RhdGlvbiBpbmZvcm1hdGlvbgogICoKICAqIFRoZXNlIGF0dHJpYnV0ZSB0eXBlcyBhcmUgdXNlZCB3aXRoICVOTDgwMjExX0FUVFJfU1RBX0lORk8KQEAgLTEyMzMsNyArMTM4Nyw3IEBACiAgKiBATkw4MDIxMV9TVEFfSU5GT19UWF9CWVRFUzogdG90YWwgdHJhbnNtaXR0ZWQgYnl0ZXMgKHUzMiwgdG8gdGhpcyBzdGF0aW9uKQogICogQE5MODAyMTFfU1RBX0lORk9fU0lHTkFMOiBzaWduYWwgc3RyZW5ndGggb2YgbGFzdCByZWNlaXZlZCBQUERVICh1OCwgZEJtKQogICogQE5MODAyMTFfU1RBX0lORk9fVFhfQklUUkFURTogY3VycmVudCB1bmljYXN0IHR4IHJhdGUsIG5lc3RlZCBhdHRyaWJ1dGUKLSAqIAljb250YWluaW5nIGluZm8gYXMgcG9zc2libGUsIHNlZSAmZW51bSBubDgwMjExX3N0YV9pbmZvX3R4cmF0ZS4KKyAqIAljb250YWluaW5nIGluZm8gYXMgcG9zc2libGUsIHNlZSAmZW51bSBubDgwMjExX3JhdGVfaW5mbwogICogQE5MODAyMTFfU1RBX0lORk9fUlhfUEFDS0VUUzogdG90YWwgcmVjZWl2ZWQgcGFja2V0ICh1MzIsIGZyb20gdGhpcyBzdGF0aW9uKQogICogQE5MODAyMTFfU1RBX0lORk9fVFhfUEFDS0VUUzogdG90YWwgdHJhbnNtaXR0ZWQgcGFja2V0cyAodTMyLCB0byB0aGlzCiAgKglzdGF0aW9uKQpAQCAtMTI0Myw4ICsxMzk3LDEyIEBACiAgKiBATkw4MDIxMV9TVEFfSU5GT19MTElEOiB0aGUgc3RhdGlvbidzIG1lc2ggTExJRAogICogQE5MODAyMTFfU1RBX0lORk9fUExJRDogdGhlIHN0YXRpb24ncyBtZXNoIFBMSUQKICAqIEBOTDgwMjExX1NUQV9JTkZPX1BMSU5LX1NUQVRFOiBwZWVyIGxpbmsgc3RhdGUgZm9yIHRoZSBzdGF0aW9uCisgKgkoc2VlICVlbnVtIG5sODAyMTFfcGxpbmtfc3RhdGUpCiAgKiBATkw4MDIxMV9TVEFfSU5GT19SWF9CSVRSQVRFOiBsYXN0IHVuaWNhc3QgZGF0YSBmcmFtZSByeCByYXRlLCBuZXN0ZWQKICAqCWF0dHJpYnV0ZSwgbGlrZSBOTDgwMjExX1NUQV9JTkZPX1RYX0JJVFJBVEUuCisgKiBATkw4MDIxMV9TVEFfSU5GT19CU1NfUEFSQU06IGN1cnJlbnQgc3RhdGlvbidzIHZpZXcgb2YgQlNTLCBuZXN0ZWQgYXR0cmlidXRlCisgKiAgICAgY29udGFpbmluZyBpbmZvIGFzIHBvc3NpYmxlLCBzZWUgJmVudW0gbmw4MDIxMV9zdGFfYnNzX3BhcmFtCisgKiBATkw4MDIxMV9TVEFfSU5GT19DT05ORUNURURfVElNRTogdGltZSBzaW5jZSB0aGUgc3RhdGlvbiBpcyBsYXN0IGNvbm5lY3RlZAogICogQF9fTkw4MDIxMV9TVEFfSU5GT19BRlRFUl9MQVNUOiBpbnRlcm5hbAogICogQE5MODAyMTFfU1RBX0lORk9fTUFYOiBoaWdoZXN0IHBvc3NpYmxlIHN0YXRpb24gaW5mbyBhdHRyaWJ1dGUKICAqLwpAQCAtMTI2NCw2ICsxNDIyLDggQEAKIAlOTDgwMjExX1NUQV9JTkZPX1RYX0ZBSUxFRCwKIAlOTDgwMjExX1NUQV9JTkZPX1NJR05BTF9BVkcsCiAJTkw4MDIxMV9TVEFfSU5GT19SWF9CSVRSQVRFLAorCU5MODAyMTFfU1RBX0lORk9fQlNTX1BBUkFNLAorCU5MODAyMTFfU1RBX0lORk9fQ09OTkVDVEVEX1RJTUUsCiAKIAkvKiBrZWVwIGxhc3QgKi8KIAlfX05MODAyMTFfU1RBX0lORk9fQUZURVJfTEFTVCwKQEAgLTE2ODYsOSArMTg0NiwyMSBAQAogICogdmVuZG9yIHNwZWNpZmljIHBhdGggbWV0cmljIG9yIGRpc2FibGUgaXQgdG8gdXNlIHRoZSBkZWZhdWx0IEFpcnRpbWUKICAqIG1ldHJpYy4KICAqCi0gKiBATkw4MDIxMV9NRVNIX1NFVFVQX1ZFTkRPUl9QQVRIX1NFTF9JRTogQSB2ZW5kb3Igc3BlY2lmaWMgaW5mb3JtYXRpb24KLSAqIGVsZW1lbnQgdGhhdCB2ZW5kb3JzIHdpbGwgdXNlIHRvIGlkZW50aWZ5IHRoZSBwYXRoIHNlbGVjdGlvbiBtZXRob2RzIGFuZAotICogbWV0cmljcyBpbiB1c2UuCisgKiBATkw4MDIxMV9NRVNIX1NFVFVQX0lFOiBJbmZvcm1hdGlvbiBlbGVtZW50cyBmb3IgdGhpcyBtZXNoLCBmb3IgaW5zdGFuY2UsIGEKKyAqIHJvYnVzdCBzZWN1cml0eSBuZXR3b3JrIGllLCBvciBhIHZlbmRvciBzcGVjaWZpYyBpbmZvcm1hdGlvbiBlbGVtZW50IHRoYXQKKyAqIHZlbmRvcnMgd2lsbCB1c2UgdG8gaWRlbnRpZnkgdGhlIHBhdGggc2VsZWN0aW9uIG1ldGhvZHMgYW5kIG1ldHJpY3MgaW4gdXNlLgorICoKKyAqIEBOTDgwMjExX01FU0hfU0VUVVBfVVNFUlNQQUNFX0FVVEg6IEVuYWJsZSB0aGlzIG9wdGlvbiBpZiBhbiBhdXRoZW50aWNhdGlvbgorICogZGFlbW9uIHdpbGwgYmUgYXV0aGVudGljYXRpbmcgbWVzaCBjYW5kaWRhdGVzLgorICoKKyAqIEBOTDgwMjExX01FU0hfU0VUVVBfVVNFUlNQQUNFX0FNUEU6IEVuYWJsZSB0aGlzIG9wdGlvbiBpZiBhbiBhdXRoZW50aWNhdGlvbgorICogZGFlbW9uIHdpbGwgYmUgc2VjdXJpbmcgcGVlciBsaW5rIGZyYW1lcy4gIEFNUEUgaXMgYSBzZWN1cmVkIHZlcnNpb24gb2YgTWVzaAorICogUGVlcmluZyBNYW5hZ2VtZW50IChNUE0pIGFuZCBpcyBpbXBsZW1lbnRlZCB3aXRoIHRoZSBhc3Npc3RhbmNlIG9mIGEKKyAqIHVzZXJzcGFjZSBkYWVtb24uICBXaGVuIHRoaXMgZmxhZyBpcyBzZXQsIHRoZSBrZXJuZWwgd2lsbCBzZW5kIHBlZXIKKyAqIG1hbmFnZW1lbnQgZnJhbWVzIHRvIGEgdXNlcnNwYWNlIGRhZW1vbiB0aGF0IHdpbGwgaW1wbGVtZW50IEFNUEUKKyAqIGZ1bmN0aW9uYWxpdHkgKHNlY3VyaXR5IGNhcGFiaWxpdGllcyBzZWxlY3Rpb24sIGtleSBjb25maXJtYXRpb24sIGFuZCBrZXkKKyAqIG1hbmFnZW1lbnQpLiAgV2hlbiB0aGUgZmxhZyBpcyB1bnNldCAoZGVmYXVsdCksIHRoZSBrZXJuZWwgY2FuIGF1dG9ub21vdXNseQorICogY29tcGxldGUgKHVuc2VjdXJlZCkgbWVzaCBwZWVyaW5nIHdpdGhvdXQgdGhlIG5lZWQgb2YgYSB1c2Vyc3BhY2UgZGFlbW9uLgogICoKICAqIEBOTDgwMjExX01FU0hfU0VUVVBfQVRUUl9NQVg6IGhpZ2hlc3QgcG9zc2libGUgbWVzaCBzZXR1cCBhdHRyaWJ1dGUgbnVtYmVyCiAgKiBAX19OTDgwMjExX01FU0hfU0VUVVBfQVRUUl9BRlRFUl9MQVNUOiBJbnRlcm5hbCB1c2UKQEAgLTE2OTcsNyArMTg2OSw5IEBACiAJX19OTDgwMjExX01FU0hfU0VUVVBfSU5WQUxJRCwKIAlOTDgwMjExX01FU0hfU0VUVVBfRU5BQkxFX1ZFTkRPUl9QQVRIX1NFTCwKIAlOTDgwMjExX01FU0hfU0VUVVBfRU5BQkxFX1ZFTkRPUl9NRVRSSUMsCi0JTkw4MDIxMV9NRVNIX1NFVFVQX1ZFTkRPUl9QQVRIX1NFTF9JRSwKKwlOTDgwMjExX01FU0hfU0VUVVBfSUUsCisJTkw4MDIxMV9NRVNIX1NFVFVQX1VTRVJTUEFDRV9BVVRILAorCU5MODAyMTFfTUVTSF9TRVRVUF9VU0VSU1BBQ0VfQU1QRSwKIAogCS8qIGtlZXAgbGFzdCAqLwogCV9fTkw4MDIxMV9NRVNIX1NFVFVQX0FUVFJfQUZURVJfTEFTVCwKQEAgLTIwMDIsNCArMjE3NiwxODkgQEAKIAlOTDgwMjExX1RYX1BPV0VSX0ZJWEVELAogfTsKIAorLyoqCisgKiBlbnVtIG5sODAyMTFfd293bGFuX3BhY2tldF9wYXR0ZXJuX2F0dHIgLSBXb1dMQU4gcGFja2V0IHBhdHRlcm4gYXR0cmlidXRlCisgKiBAX19OTDgwMjExX1dPV0xBTl9QS1RQQVRfSU5WQUxJRDogaW52YWxpZCBudW1iZXIgZm9yIG5lc3RlZCBhdHRyaWJ1dGUKKyAqIEBOTDgwMjExX1dPV0xBTl9QS1RQQVRfUEFUVEVSTjogdGhlIHBhdHRlcm4sIHZhbHVlcyB3aGVyZSB0aGUgbWFzayBoYXMKKyAqCWEgemVybyBiaXQgYXJlIGlnbm9yZWQKKyAqIEBOTDgwMjExX1dPV0xBTl9QS1RQQVRfTUFTSzogcGF0dGVybiBtYXNrLCBtdXN0IGJlIGxvbmcgZW5vdWdoIHRvIGhhdmUKKyAqCWEgYml0IGZvciBlYWNoIGJ5dGUgaW4gdGhlIHBhdHRlcm4uIFRoZSBsb3dlc3Qtb3JkZXIgYml0IGNvcnJlc3BvbmRzCisgKgl0byB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgcGF0dGVybiwgYnV0IHRoZSBieXRlcyBvZiB0aGUgcGF0dGVybiBhcmUKKyAqCWluIGEgbGl0dGxlLWVuZGlhbi1saWtlIGZvcm1hdCwgaS5lLiB0aGUgOXRoIGJ5dGUgb2YgdGhlIHBhdHRlcm4KKyAqCWNvcnJlc3BvbmRzIHRvIHRoZSBsb3dlc3Qtb3JkZXIgYml0IGluIHRoZSBzZWNvbmQgYnl0ZSBvZiB0aGUgbWFzay4KKyAqCUZvciBleGFtcGxlOiBUaGUgbWF0Y2ggMDA6eHg6MDA6MDA6eHg6MDA6MDA6MDA6MDA6eHg6eHg6eHggKHdoZXJlCisgKgl4eCBpbmRpY2F0ZXMgImRvbid0IGNhcmUiKSB3b3VsZCBiZSByZXByZXNlbnRlZCBieSBhIHBhdHRlcm4gb2YKKyAqCXR3ZWx2ZSB6ZXJvIGJ5dGVzLCBhbmQgYSBtYXNrIG9mICIweGVkLDB4MDciLgorICoJTm90ZSB0aGF0IHRoZSBwYXR0ZXJuIG1hdGNoaW5nIGlzIGRvbmUgYXMgdGhvdWdoIGZyYW1lcyB3ZXJlIG5vdAorICoJODAyLjExIGZyYW1lcyBidXQgODAyLjMgZnJhbWVzLCBpLmUuIHRoZSBmcmFtZSBpcyBmdWxseSB1bnBhY2tlZAorICoJZmlyc3QgKGluY2x1ZGluZyBTTkFQIGhlYWRlciB1bnBhY2tpbmcpIGFuZCB0aGVuIG1hdGNoZWQuCisgKiBATlVNX05MODAyMTFfV09XTEFOX1BLVFBBVDogbnVtYmVyIG9mIGF0dHJpYnV0ZXMKKyAqIEBNQVhfTkw4MDIxMV9XT1dMQU5fUEtUUEFUOiBtYXggYXR0cmlidXRlIG51bWJlcgorICovCitlbnVtIG5sODAyMTFfd293bGFuX3BhY2tldF9wYXR0ZXJuX2F0dHIgeworCV9fTkw4MDIxMV9XT1dMQU5fUEtUUEFUX0lOVkFMSUQsCisJTkw4MDIxMV9XT1dMQU5fUEtUUEFUX01BU0ssCisJTkw4MDIxMV9XT1dMQU5fUEtUUEFUX1BBVFRFUk4sCisKKwlOVU1fTkw4MDIxMV9XT1dMQU5fUEtUUEFULAorCU1BWF9OTDgwMjExX1dPV0xBTl9QS1RQQVQgPSBOVU1fTkw4MDIxMV9XT1dMQU5fUEtUUEFUIC0gMSwKK307CisKKy8qKgorICogc3RydWN0IG5sODAyMTFfd293bGFuX3BhdHRlcm5fc3VwcG9ydCAtIHBhdHRlcm4gc3VwcG9ydCBpbmZvcm1hdGlvbgorICogQG1heF9wYXR0ZXJuczogbWF4aW11bSBudW1iZXIgb2YgcGF0dGVybnMgc3VwcG9ydGVkCisgKiBAbWluX3BhdHRlcm5fbGVuOiBtaW5pbXVtIGxlbmd0aCBvZiBlYWNoIHBhdHRlcm4KKyAqIEBtYXhfcGF0dGVybl9sZW46IG1heGltdW0gbGVuZ3RoIG9mIGVhY2ggcGF0dGVybgorICoKKyAqIFRoaXMgc3RydWN0IGlzIGNhcnJpZWQgaW4gJU5MODAyMTFfV09XTEFOX1RSSUdfUEtUX1BBVFRFUk4gd2hlbgorICogdGhhdCBpcyBwYXJ0IG9mICVOTDgwMjExX0FUVFJfV09XTEFOX1RSSUdHRVJTX1NVUFBPUlRFRCBpbiB0aGUKKyAqIGNhcGFiaWxpdHkgaW5mb3JtYXRpb24gZ2l2ZW4gYnkgdGhlIGtlcm5lbCB0byB1c2Vyc3BhY2UuCisgKi8KK3N0cnVjdCBubDgwMjExX3dvd2xhbl9wYXR0ZXJuX3N1cHBvcnQgeworCV9fdTMyIG1heF9wYXR0ZXJuczsKKwlfX3UzMiBtaW5fcGF0dGVybl9sZW47CisJX191MzIgbWF4X3BhdHRlcm5fbGVuOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoqCisgKiBlbnVtIG5sODAyMTFfd293bGFuX3RyaWdnZXJzIC0gV29XTEFOIHRyaWdnZXIgZGVmaW5pdGlvbnMKKyAqIEBfX05MODAyMTFfV09XTEFOX1RSSUdfSU5WQUxJRDogaW52YWxpZCBudW1iZXIgZm9yIG5lc3RlZCBhdHRyaWJ1dGVzCisgKiBATkw4MDIxMV9XT1dMQU5fVFJJR19BTlk6IHdha2UgdXAgb24gYW55IGFjdGl2aXR5LCBkbyBub3QgcmVhbGx5IHB1dAorICoJdGhlIGNoaXAgaW50byBhIHNwZWNpYWwgc3RhdGUgLS0gd29ya3MgYmVzdCB3aXRoIGNoaXBzIHRoYXQgaGF2ZQorICoJc3VwcG9ydCBmb3IgbG93LXBvd2VyIG9wZXJhdGlvbiBhbHJlYWR5IChmbGFnKQorICogQE5MODAyMTFfV09XTEFOX1RSSUdfRElTQ09OTkVDVDogd2FrZSB1cCBvbiBkaXNjb25uZWN0LCB0aGUgd2F5IGRpc2Nvbm5lY3QKKyAqCWlzIGRldGVjdGVkIGlzIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIChmbGFnKQorICogQE5MODAyMTFfV09XTEFOX1RSSUdfTUFHSUNfUEtUOiB3YWtlIHVwIG9uIG1hZ2ljIHBhY2tldCAoNnggMHhmZiwgZm9sbG93ZWQKKyAqCWJ5IDE2IHJlcGV0aXRpb25zIG9mIE1BQyBhZGRyLCBhbnl3aGVyZSBpbiBwYXlsb2FkKSAoZmxhZykKKyAqIEBOTDgwMjExX1dPV0xBTl9UUklHX1BLVF9QQVRURVJOOiB3YWtlIHVwIG9uIHRoZSBzcGVjaWZpZWQgcGFja2V0IHBhdHRlcm5zCisgKgl3aGljaCBhcmUgcGFzc2VkIGluIGFuIGFycmF5IG9mIG5lc3RlZCBhdHRyaWJ1dGVzLCBlYWNoIG5lc3RlZCBhdHRyaWJ1dGUKKyAqCWRlZmluaW5nIGEgd2l0aCBhdHRyaWJ1dGVzIGZyb20gJnN0cnVjdCBubDgwMjExX3dvd2xhbl90cmlnX3BrdF9wYXR0ZXJuLgorICoJRWFjaCBwYXR0ZXJuIGRlZmluZXMgYSB3YWtldXAgcGFja2V0LiBUaGUgbWF0Y2hpbmcgaXMgZG9uZSBvbiB0aGUgTVNEVSwKKyAqCWkuZS4gYXMgdGhvdWdoIHRoZSBwYWNrZXQgd2FzIGFuIDgwMi4zIHBhY2tldCwgc28gdGhlIHBhdHRlcm4gbWF0Y2hpbmcKKyAqCWlzIGRvbmUgYWZ0ZXIgdGhlIHBhY2tldCBpcyBjb252ZXJ0ZWQgdG8gdGhlIE1TRFUuCisgKgorICoJSW4gJU5MODAyMTFfQVRUUl9XT1dMQU5fVFJJR0dFUlNfU1VQUE9SVEVELCBpdCBpcyBhIGJpbmFyeSBhdHRyaWJ1dGUKKyAqCWNhcnJ5aW5nIGEgJnN0cnVjdCBubDgwMjExX3dvd2xhbl9wYXR0ZXJuX3N1cHBvcnQuCisgKiBATlVNX05MODAyMTFfV09XTEFOX1RSSUc6IG51bWJlciBvZiB3YWtlIG9uIHdpcmVsZXNzIHRyaWdnZXJzCisgKiBATUFYX05MODAyMTFfV09XTEFOX1RSSUc6IGhpZ2hlc3Qgd293bGFuIHRyaWdnZXIgYXR0cmlidXRlIG51bWJlcgorICovCitlbnVtIG5sODAyMTFfd293bGFuX3RyaWdnZXJzIHsKKwlfX05MODAyMTFfV09XTEFOX1RSSUdfSU5WQUxJRCwKKwlOTDgwMjExX1dPV0xBTl9UUklHX0FOWSwKKwlOTDgwMjExX1dPV0xBTl9UUklHX0RJU0NPTk5FQ1QsCisJTkw4MDIxMV9XT1dMQU5fVFJJR19NQUdJQ19QS1QsCisJTkw4MDIxMV9XT1dMQU5fVFJJR19QS1RfUEFUVEVSTiwKKworCS8qIGtlZXAgbGFzdCAqLworCU5VTV9OTDgwMjExX1dPV0xBTl9UUklHLAorCU1BWF9OTDgwMjExX1dPV0xBTl9UUklHID0gTlVNX05MODAyMTFfV09XTEFOX1RSSUcgLSAxCit9OworCisvKioKKyAqIGVudW0gbmw4MDIxMV9pZmFjZV9saW1pdF9hdHRycyAtIGxpbWl0IGF0dHJpYnV0ZXMKKyAqIEBOTDgwMjExX0lGQUNFX0xJTUlUX1VOU1BFQzogKHJlc2VydmVkKQorICogQE5MODAyMTFfSUZBQ0VfTElNSVRfTUFYOiBtYXhpbXVtIG51bWJlciBvZiBpbnRlcmZhY2VzIHRoYXQKKyAqCWNhbiBiZSBjaG9zZW4gZnJvbSB0aGlzIHNldCBvZiBpbnRlcmZhY2UgdHlwZXMgKHUzMikKKyAqIEBOTDgwMjExX0lGQUNFX0xJTUlUX1RZUEVTOiBuZXN0ZWQgYXR0cmlidXRlIGNvbnRhaW5pbmcgYQorICoJZmxhZyBhdHRyaWJ1dGUgZm9yIGVhY2ggaW50ZXJmYWNlIHR5cGUgaW4gdGhpcyBzZXQKKyAqIEBOVU1fTkw4MDIxMV9JRkFDRV9MSU1JVDogbnVtYmVyIG9mIGF0dHJpYnV0ZXMKKyAqIEBNQVhfTkw4MDIxMV9JRkFDRV9MSU1JVDogaGlnaGVzdCBhdHRyaWJ1dGUgbnVtYmVyCisgKi8KK2VudW0gbmw4MDIxMV9pZmFjZV9saW1pdF9hdHRycyB7CisJTkw4MDIxMV9JRkFDRV9MSU1JVF9VTlNQRUMsCisJTkw4MDIxMV9JRkFDRV9MSU1JVF9NQVgsCisJTkw4MDIxMV9JRkFDRV9MSU1JVF9UWVBFUywKKworCS8qIGtlZXAgbGFzdCAqLworCU5VTV9OTDgwMjExX0lGQUNFX0xJTUlULAorCU1BWF9OTDgwMjExX0lGQUNFX0xJTUlUID0gTlVNX05MODAyMTFfSUZBQ0VfTElNSVQgLSAxCit9OworCisvKioKKyAqIGVudW0gbmw4MDIxMV9pZl9jb21iaW5hdGlvbl9hdHRycyAtLSBpbnRlcmZhY2UgY29tYmluYXRpb24gYXR0cmlidXRlcworICoKKyAqIEBOTDgwMjExX0lGQUNFX0NPTUJfVU5TUEVDOiAocmVzZXJ2ZWQpCisgKiBATkw4MDIxMV9JRkFDRV9DT01CX0xJTUlUUzogTmVzdGVkIGF0dHJpYnV0ZXMgY29udGFpbmluZyB0aGUgbGltaXRzCisgKglmb3IgZ2l2ZW4gaW50ZXJmYWNlIHR5cGVzLCBzZWUgJmVudW0gbmw4MDIxMV9pZmFjZV9saW1pdF9hdHRycy4KKyAqIEBOTDgwMjExX0lGQUNFX0NPTUJfTUFYTlVNOiB1MzIgYXR0cmlidXRlIGdpdmluZyB0aGUgdG90YWwgbnVtYmVyIG9mCisgKglpbnRlcmZhY2VzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgaW4gdGhpcyBncm91cC4gVGhpcyBudW1iZXIgZG9lc24ndAorICoJYXBwbHkgdG8gaW50ZXJmYWNlcyBwdXJlbHkgbWFuYWdlZCBpbiBzb2Z0d2FyZSwgd2hpY2ggYXJlIGxpc3RlZAorICoJaW4gYSBzZXBhcmF0ZSBhdHRyaWJ1dGUgJU5MODAyMTFfQVRUUl9JTlRFUkZBQ0VTX1NPRlRXQVJFLgorICogQE5MODAyMTFfSUZBQ0VfQ09NQl9TVEFfQVBfQklfTUFUQ0g6IGZsYWcgYXR0cmlidXRlIHNwZWNpZnlpbmcgdGhhdAorICoJYmVhY29uIGludGVydmFscyB3aXRoaW4gdGhpcyBncm91cCBtdXN0IGJlIGFsbCB0aGUgc2FtZSBldmVuIGZvcgorICoJaW5mcmFzdHJ1Y3R1cmUgYW5kIEFQL0dPIGNvbWJpbmF0aW9ucywgaS5lLiB0aGUgR08ocykgbXVzdCBhZG9wdAorICoJdGhlIGluZnJhc3RydWN0dXJlIG5ldHdvcmsncyBiZWFjb24gaW50ZXJ2YWwuCisgKiBATkw4MDIxMV9JRkFDRV9DT01CX05VTV9DSEFOTkVMUzogdTMyIGF0dHJpYnV0ZSBzcGVjaWZ5aW5nIGhvdyBtYW55CisgKglkaWZmZXJlbnQgY2hhbm5lbHMgbWF5IGJlIHVzZWQgd2l0aGluIHRoaXMgZ3JvdXAuCisgKiBATlVNX05MODAyMTFfSUZBQ0VfQ09NQjogbnVtYmVyIG9mIGF0dHJpYnV0ZXMKKyAqIEBNQVhfTkw4MDIxMV9JRkFDRV9DT01COiBoaWdoZXN0IGF0dHJpYnV0ZSBudW1iZXIKKyAqCisgKiBFeGFtcGxlczoKKyAqCWxpbWl0cyA9IFsgI3tTVEF9IDw9IDEsICN7QVB9IDw9IDEgXSwgbWF0Y2hpbmcgQkksIGNoYW5uZWxzID0gMSwgbWF4ID0gMgorICoJPT4gYWxsb3dzIGFuIEFQIGFuZCBhIFNUQSB0aGF0IG11c3QgbWF0Y2ggQklzCisgKgorICoJbnVtYmVycyA9IFsgI3tBUCwgUDJQLUdPfSA8PSA4IF0sIGNoYW5uZWxzID0gMSwgbWF4ID0gOAorICoJPT4gYWxsb3dzIDggb2YgQVAvR08KKyAqCisgKgludW1iZXJzID0gWyAje1NUQX0gPD0gMiBdLCBjaGFubmVscyA9IDIsIG1heCA9IDIKKyAqCT0+IGFsbG93cyB0d28gU1RBcyBvbiBkaWZmZXJlbnQgY2hhbm5lbHMKKyAqCisgKgludW1iZXJzID0gWyAje1NUQX0gPD0gMSwgI3tQMlAtY2xpZW50LFAyUC1HT30gPD0gMyBdLCBtYXggPSA0CisgKgk9PiBhbGxvd3MgYSBTVEEgcGx1cyB0aHJlZSBQMlAgaW50ZXJmYWNlcworICoKKyAqIFRoZSBsaXN0IG9mIHRoZXNlIGZvdXIgcG9zc2libGl0aWVzIGNvdWxkIGNvbXBsZXRlbHkgYmUgY29udGFpbmVkCisgKiB3aXRoaW4gdGhlICVOTDgwMjExX0FUVFJfSU5URVJGQUNFX0NPTUJJTkFUSU9OUyBhdHRyaWJ1dGUgdG8gaW5kaWNhdGUKKyAqIHRoYXQgYW55IG9mIHRoZXNlIGdyb3VwcyBtdXN0IG1hdGNoLgorICoKKyAqICJDb21iaW5hdGlvbnMiIG9mIGp1c3QgYSBzaW5nbGUgaW50ZXJmYWNlIHdpbGwgbm90IGJlIGxpc3RlZCBoZXJlLAorICogYSBzaW5nbGUgaW50ZXJmYWNlIG9mIGFueSB2YWxpZCBpbnRlcmZhY2UgdHlwZSBpcyBhc3N1bWVkIHRvIGFsd2F5cworICogYmUgcG9zc2libGUgYnkgaXRzZWxmLiBUaGlzIG1lYW5zIHRoYXQgaW1wbGljaXRseSwgZm9yIGVhY2ggdmFsaWQKKyAqIGludGVyZmFjZSB0eXBlLCB0aGUgZm9sbG93aW5nIGdyb3VwIGFsd2F5cyBleGlzdHM6CisgKgludW1iZXJzID0gWyAjezx0eXBlPn0gPD0gMSBdLCBjaGFubmVscyA9IDEsIG1heCA9IDEKKyAqLworZW51bSBubDgwMjExX2lmX2NvbWJpbmF0aW9uX2F0dHJzIHsKKwlOTDgwMjExX0lGQUNFX0NPTUJfVU5TUEVDLAorCU5MODAyMTFfSUZBQ0VfQ09NQl9MSU1JVFMsCisJTkw4MDIxMV9JRkFDRV9DT01CX01BWE5VTSwKKwlOTDgwMjExX0lGQUNFX0NPTUJfU1RBX0FQX0JJX01BVENILAorCU5MODAyMTFfSUZBQ0VfQ09NQl9OVU1fQ0hBTk5FTFMsCisKKwkvKiBrZWVwIGxhc3QgKi8KKwlOVU1fTkw4MDIxMV9JRkFDRV9DT01CLAorCU1BWF9OTDgwMjExX0lGQUNFX0NPTUIgPSBOVU1fTkw4MDIxMV9JRkFDRV9DT01CIC0gMQorfTsKKworCisvKioKKyAqIGVudW0gbmw4MDIxMV9wbGlua19zdGF0ZSAtIHN0YXRlIG9mIGEgbWVzaCBwZWVyIGxpbmsgZmluaXRlIHN0YXRlIG1hY2hpbmUKKyAqCisgKiBATkw4MDIxMV9QTElOS19MSVNURU46IGluaXRpYWwgc3RhdGUsIGNvbnNpZGVyZWQgdGhlIGltcGxpY2l0CisgKglzdGF0ZSBvZiBub24gZXhpc3RhbnQgbWVzaCBwZWVyIGxpbmtzCisgKiBATkw4MDIxMV9QTElOS19PUE5fU05UOiBtZXNoIHBsaW5rIG9wZW4gZnJhbWUgaGFzIGJlZW4gc2VudCB0bworICoJdGhpcyBtZXNoIHBlZXIKKyAqIEBOTDgwMjExX1BMSU5LX09QTl9SQ1ZEOiBtZXNoIHBsaW5rIG9wZW4gZnJhbWUgaGFzIGJlZW4gcmVjZWl2ZWQKKyAqCWZyb20gdGhpcyBtZXNoIHBlZXIKKyAqIEBOTDgwMjExX1BMSU5LX0NORl9SQ1ZEOiBtZXNoIHBsaW5rIGNvbmZpcm0gZnJhbWUgaGFzIGJlZW4KKyAqCXJlY2VpdmVkIGZyb20gdGhpcyBtZXNoIHBlZXIKKyAqIEBOTDgwMjExX1BMSU5LX0VTVEFCOiBtZXNoIHBlZXIgbGluayBpcyBlc3RhYmxpc2hlZAorICogQE5MODAyMTFfUExJTktfSE9MRElORzogbWVzaCBwZWVyIGxpbmsgaXMgYmVpbmcgY2xvc2VkIG9yIGNhbmNlbGxlZAorICogQE5MODAyMTFfUExJTktfQkxPQ0tFRDogYWxsIGZyYW1lcyB0cmFuc21pdHRlZCBmcm9tIHRoaXMgbWVzaAorICoJcGxpbmsgYXJlIGRpc2NhcmRlZAorICogQE5VTV9OTDgwMjExX1BMSU5LX1NUQVRFUzogbnVtYmVyIG9mIHBlZXIgbGluayBzdGF0ZXMKKyAqIEBNQVhfTkw4MDIxMV9QTElOS19TVEFURVM6IGhpZ2hlc3QgbnVtZXJpY2FsIHZhbHVlIG9mIHBsaW5rIHN0YXRlcworICovCitlbnVtIG5sODAyMTFfcGxpbmtfc3RhdGUgeworCU5MODAyMTFfUExJTktfTElTVEVOLAorCU5MODAyMTFfUExJTktfT1BOX1NOVCwKKwlOTDgwMjExX1BMSU5LX09QTl9SQ1ZELAorCU5MODAyMTFfUExJTktfQ05GX1JDVkQsCisJTkw4MDIxMV9QTElOS19FU1RBQiwKKwlOTDgwMjExX1BMSU5LX0hPTERJTkcsCisJTkw4MDIxMV9QTElOS19CTE9DS0VELAorCisJLyoga2VlcCBsYXN0ICovCisJTlVNX05MODAyMTFfUExJTktfU1RBVEVTLAorCU1BWF9OTDgwMjExX1BMSU5LX1NUQVRFUyA9IE5VTV9OTDgwMjExX1BMSU5LX1NUQVRFUyAtIDEKK307CisKICNlbmRpZiAvKiBfX0xJTlVYX05MODAyMTFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ubWkuaCBiL2luY2x1ZGUvbGludXgvbm1pLmgKaW5kZXggYzUzNmY4NS4uMmQzMDRlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ubWkuaAorKysgYi9pbmNsdWRlL2xpbnV4L25taS5oCkBAIC00NSwxMSArNDUsMTIgQEAKIAogI2lmZGVmIENPTkZJR19MT0NLVVBfREVURUNUT1IKIGludCBod19ubWlfaXNfY3B1X3N0dWNrKHN0cnVjdCBwdF9yZWdzICopOwotdTY0IGh3X25taV9nZXRfc2FtcGxlX3BlcmlvZCh2b2lkKTsKK3U2NCBod19ubWlfZ2V0X3NhbXBsZV9wZXJpb2QoaW50IHdhdGNoZG9nX3RocmVzaCk7CiBleHRlcm4gaW50IHdhdGNoZG9nX2VuYWJsZWQ7CitleHRlcm4gaW50IHdhdGNoZG9nX3RocmVzaDsKIHN0cnVjdCBjdGxfdGFibGU7Ci1leHRlcm4gaW50IHByb2NfZG93YXRjaGRvZ19lbmFibGVkKHN0cnVjdCBjdGxfdGFibGUgKiwgaW50ICwKLQkJCXZvaWQgX191c2VyICosIHNpemVfdCAqLCBsb2ZmX3QgKik7CitleHRlcm4gaW50IHByb2NfZG93YXRjaGRvZyhzdHJ1Y3QgY3RsX3RhYmxlICosIGludCAsCisJCQkgICB2b2lkIF9fdXNlciAqLCBzaXplX3QgKiwgbG9mZl90ICopOwogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ub3RpZmllci5oIGIvaW5jbHVkZS9saW51eC9ub3RpZmllci5oCmluZGV4IDYyMWRmYTEuLmMwNjg4YjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbm90aWZpZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L25vdGlmaWVyLmgKQEAgLTIwOSw4ICsyMDksOSBAQAogI2RlZmluZSBORVRERVZfUE9TVF9UWVBFX0NIQU5HRQkweDAwMEYKICNkZWZpbmUgTkVUREVWX1BPU1RfSU5JVAkweDAwMTAKICNkZWZpbmUgTkVUREVWX1VOUkVHSVNURVJfQkFUQ0ggMHgwMDExCi0jZGVmaW5lIE5FVERFVl9CT05ESU5HX0RFU0xBVkUgIDB4MDAxMgorI2RlZmluZSBORVRERVZfUkVMRUFTRQkJMHgwMDEyCiAjZGVmaW5lIE5FVERFVl9OT1RJRllfUEVFUlMJMHgwMDEzCisjZGVmaW5lIE5FVERFVl9KT0lOCQkweDAwMTQKIAogI2RlZmluZSBTWVNfRE9XTgkweDAwMDEJLyogTm90aWZ5IG9mIHN5c3RlbSBkb3duICovCiAjZGVmaW5lIFNZU19SRVNUQVJUCVNZU19ET1dOCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29mX2lycS5oIGIvaW5jbHVkZS9saW51eC9vZl9pcnEuaAppbmRleCAxMDllMDEzLi5lNjk1NWY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L29mX2lycS5oCisrKyBiL2luY2x1ZGUvbGludXgvb2ZfaXJxLmgKQEAgLTY4LDYgKzY4LDcgQEAKIGV4dGVybiBpbnQgb2ZfaXJxX2NvdW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2KTsKIGV4dGVybiBpbnQgb2ZfaXJxX3RvX3Jlc291cmNlX3RhYmxlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LAogCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgaW50IG5yX2lycXMpOworZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfaXJxX2ZpbmRfcGFyZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQpOwogCiAjZW5kaWYgLyogQ09ORklHX09GX0lSUSAqLwogI2VuZGlmIC8qIENPTkZJR19PRiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAppbmRleCA4YWJlOGQ3Li44NjUyYTRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaApAQCAtNjA4LDYgKzYwOCw4IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFUUk9YX0c1NTAJMHgyNTI3CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFUUk9YX1ZJQQkweDQ1MzYKIAorI2RlZmluZSBQQ0lfVkVORE9SX0lEX01PQklMSVRZX0VMRUNUUk9OSUNTCTB4MTRmMgorCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ1QJCTB4MTAyYwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NUXzY5MDAwCQkweDAwYzAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9DVF82NTU0NQkJMHgwMGQ4CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BrdF9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9wa3Rfc2NoZWQuaAppbmRleCAzYTAyZTAyLi5jNTMzNjcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BrdF9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGt0X3NjaGVkLmgKQEAgLTU4OCw0ICs1ODgsMTkgQEAKIAogI2RlZmluZSBTRkJfTUFYX1BST0IgMHhGRkZGCiAKKy8qIFFGUSAqLworZW51bSB7CisJVENBX1FGUV9VTlNQRUMsCisJVENBX1FGUV9XRUlHSFQsCisJVENBX1FGUV9MTUFYLAorCV9fVENBX1FGUV9NQVgKK307CisKKyNkZWZpbmUgVENBX1FGUV9NQVgJKF9fVENBX1FGUV9NQVggLSAxKQorCitzdHJ1Y3QgdGNfcWZxX3N0YXRzIHsKKwlfX3UzMiB3ZWlnaHQ7CisJX191MzIgbG1heDsKK307CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wb3NpeC1jbG9jay5oIGIvaW5jbHVkZS9saW51eC9wb3NpeC1jbG9jay5oCmluZGV4IDdmMTE4M2RjLi4zNGM0NDk4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Bvc2l4LWNsb2NrLmgKKysrIGIvaW5jbHVkZS9saW51eC9wb3NpeC1jbG9jay5oCkBAIC00NSw3ICs0NSw3IEBACiAgKiBAdGltZXJfY3JlYXRlOiAgIENyZWF0ZSBhIG5ldyB0aW1lcgogICogQHRpbWVyX2RlbGV0ZTogICBSZW1vdmUgYSBwcmV2aW91c2x5IGNyZWF0ZWQgdGltZXIKICAqIEB0aW1lcl9nZXR0aW1lOiAgR2V0IHJlbWFpbmluZyB0aW1lIGFuZCBpbnRlcnZhbCBvZiBhIHRpbWVyCi0gKiBAdGltZXJfc2V0dHRpbWU6IFNldCBhIHRpbWVyJ3MgaW5pdGlhbCBleHBpcmF0aW9uIGFuZCBpbnRlcnZhbAorICogQHRpbWVyX3NldHRpbWU6IFNldCBhIHRpbWVyJ3MgaW5pdGlhbCBleHBpcmF0aW9uIGFuZCBpbnRlcnZhbAogICogQGZhc3luYzogICAgICAgICBPcHRpb25hbCBjaGFyYWN0ZXIgZGV2aWNlIGZhc3luYyBtZXRob2QKICAqIEBtbWFwOiAgICAgICAgICAgT3B0aW9uYWwgY2hhcmFjdGVyIGRldmljZSBtbWFwIG1ldGhvZAogICogQG9wZW46ICAgICAgICAgICBPcHRpb25hbCBjaGFyYWN0ZXIgZGV2aWNlIG9wZW4gbWV0aG9kCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BzdG9yZS5oIGIvaW5jbHVkZS9saW51eC9wc3RvcmUuaAppbmRleCA0MTk3NzczLi4yNDU1ZWYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BzdG9yZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcHN0b3JlLmgKQEAgLTM1LDcgKzM1LDkgQEAKIAlzdHJ1Y3QgbXV0ZXgJYnVmX211dGV4OwkvKiBzZXJpYWxpemUgYWNjZXNzIHRvICdidWYnICovCiAJY2hhcgkJKmJ1ZjsKIAlzaXplX3QJCWJ1ZnNpemU7Ci0Jc2l6ZV90CQkoKnJlYWQpKHU2NCAqaWQsIGVudW0gcHN0b3JlX3R5cGVfaWQgKnR5cGUsCisJaW50CQkoKm9wZW4pKHN0cnVjdCBwc3RvcmVfaW5mbyAqcHNpKTsKKwlpbnQJCSgqY2xvc2UpKHN0cnVjdCBwc3RvcmVfaW5mbyAqcHNpKTsKKwlzc2l6ZV90CQkoKnJlYWQpKHU2NCAqaWQsIGVudW0gcHN0b3JlX3R5cGVfaWQgKnR5cGUsCiAJCQlzdHJ1Y3QgdGltZXNwZWMgKnRpbWUpOwogCXU2NAkJKCp3cml0ZSkoZW51bSBwc3RvcmVfdHlwZV9pZCB0eXBlLCBzaXplX3Qgc2l6ZSk7CiAJaW50CQkoKmVyYXNlKSh1NjQgaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wdGkuaCBiL2luY2x1ZGUvbGludXgvcHRpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFhZjY2NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcHRpLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIEludGVsIDIwMTEKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqCisgKiBUaGUgUFRJIChQYXJhbGxlbCBUcmFjZSBJbnRlcmZhY2UpIGRyaXZlciBkaXJlY3RzIHRyYWNlIGRhdGEgcm91dGVkIGZyb20KKyAqIHZhcmlvdXMgcGFydHMgaW4gdGhlIHN5c3RlbSBvdXQgdGhyb3VnaCB0aGUgSW50ZWwgUGVud2VsbCBQVEkgcG9ydCBhbmQKKyAqIG91dCBvZiB0aGUgbW9iaWxlIGRldmljZSBmb3IgYW5hbHlzaXMgd2l0aCBhIGRlYnVnZ2luZyB0b29sCisgKiAoTGF1dGVyYmFjaCwgRmlkbykuIFRoaXMgaXMgcGFydCBvZiBhIHNvbHV0aW9uIGZvciB0aGUgTUlQSSBQMTE0OS43LAorICogY29tcGFjdCBKVEFHLCBzdGFuZGFyZC4KKyAqCisgKiBUaGlzIGhlYWRlciBmaWxlIHdpbGwgYWxsb3cgb3RoZXIgcGFydHMgb2YgdGhlIE9TIHRvIHVzZSB0aGUKKyAqIGludGVyZmFjZSB0byB3cml0ZSBvdXQgaXQncyBjb250ZW50cyBmb3IgZGVidWdnaW5nIGEgbW9iaWxlIHN5c3RlbS4KKyAqLworCisjaWZuZGVmIFBUSV9IXworI2RlZmluZSBQVElfSF8KKworLyogb2Zmc2V0IGZvciBsYXN0IGR3b3JkIG9mIGFueSBQVEkgbWVzc2FnZS4gUGFydCBvZiBNSVBJIFAxMTQ5LjcgKi8KKyNkZWZpbmUgUFRJX0xBU1REV09SRF9EVFMJMHgzMAorCisvKiBiYXNpYyBzdHJ1Y3R1cmUgdXNlZCBhcyBhIHdyaXRlIGFkZHJlc3MgdG8gdGhlIFBUSSBIVyAqLworc3RydWN0IHB0aV9tYXN0ZXJjaGFubmVsIHsKKwl1OCBtYXN0ZXI7CisJdTggY2hhbm5lbDsKK307CisKKy8qIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGluIG1pc2MvcHRpLmMgKi8KK3ZvaWQgcHRpX3dyaXRlZGF0YShzdHJ1Y3QgcHRpX21hc3RlcmNoYW5uZWwgKm1jLCB1OCAqYnVmLCBpbnQgY291bnQpOworc3RydWN0IHB0aV9tYXN0ZXJjaGFubmVsICpwdGlfcmVxdWVzdF9tYXN0ZXJjaGFubmVsKHU4IHR5cGUpOwordm9pZCBwdGlfcmVsZWFzZV9tYXN0ZXJjaGFubmVsKHN0cnVjdCBwdGlfbWFzdGVyY2hhbm5lbCAqbWMpOworCisjZW5kaWYgLypQVElfSF8qLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZmtpbGwtcmVndWxhdG9yLmggYi9pbmNsdWRlL2xpbnV4L3Jma2lsbC1yZWd1bGF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2EzNmJjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9yZmtpbGwtcmVndWxhdG9yLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIHJma2lsbC1yZWd1bGF0b3IuYyAtIFJlZ3VsYXRvciBjb25zdW1lciBkcml2ZXIgZm9yIHJma2lsbAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSAgR3VpbWluZyBaaHVvIDxnbXpodW9AZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDExICBBbnRvbmlvIE9zcGl0ZSA8b3NwaXRlQHN0dWRlbnRpLnVuaW5hLml0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpZm5kZWYgX19MSU5VWF9SRktJTExfUkVHVUxBVE9SX0gKKyNkZWZpbmUgX19MSU5VWF9SRktJTExfUkVHVUxBVE9SX0gKKworLyoKKyAqIFVzZSAidnJma2lsbCIgYXMgc3VwcGx5IGlkIHdoZW4gZGVjbGFyaW5nIHRoZSByZWd1bGF0b3IgY29uc3VtZXI6CisgKgorICogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHBjYXBfcmVndWxhdG9yX1Y2X2NvbnN1bWVycyBbXSA9IHsKKyAqIAl7IC5kZXZfbmFtZSA9ICJyZmtpbGwtcmVndWxhdG9yLjAiLCAuc3VwcGx5ID0gInZyZmtpbGwiIH0sCisgKiB9OworICoKKyAqIElmIHlvdSBoYXZlIHNldmVyYWwgcmVndWxhdG9yIGRyaXZlbiByZmtpbGwsIHlvdSBjYW4gYXBwZW5kIGEgbnVtZXJpY2FsIGlkIHRvCisgKiAuZGV2X25hbWUgYXMgZG9uZSBhYm92ZSwgYW5kIHVzZSB0aGUgc2FtZSBpZCB3aGVuIGRlY2xhcmluZyB0aGUgcGxhdGZvcm0KKyAqIGRldmljZToKKyAqCisgKiBzdGF0aWMgc3RydWN0IHJma2lsbF9yZWd1bGF0b3JfcGxhdGZvcm1fZGF0YSBlenhfcmZraWxsX2J0X2RhdGEgPSB7CisgKiAJLm5hbWUgID0gImV6eC1ibHVldG9vdGgiLAorICogCS50eXBlICA9IFJGS0lMTF9UWVBFX0JMVUVUT09USCwKKyAqIH07CisgKgorICogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYTkxMF9yZmtpbGwgPSB7CisgKiAJLm5hbWUgID0gInJma2lsbC1yZWd1bGF0b3IiLAorICogCS5pZCAgICA9IDAsCisgKiAJLmRldiAgID0geworICogCQkucGxhdGZvcm1fZGF0YSA9ICZlenhfcmZraWxsX2J0X2RhdGEsCisgKiAJfSwKKyAqIH07CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3Jma2lsbC5oPgorCitzdHJ1Y3QgcmZraWxsX3JlZ3VsYXRvcl9wbGF0Zm9ybV9kYXRhIHsKKwljaGFyICpuYW1lOyAgICAgICAgICAgICAvKiB0aGUgbmFtZSBmb3IgdGhlIHJma2lsbCBzd2l0Y2ggKi8KKwllbnVtIHJma2lsbF90eXBlIHR5cGU7ICAvKiB0aGUgdHlwZSBhcyBzcGVjaWZpZWQgaW4gcmZraWxsLmggKi8KK307CisKKyNlbmRpZiAvKiBfX0xJTlVYX1JGS0lMTF9SRUdVTEFUT1JfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IDEyMjExZTEuLmFhZjcxZTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTMxNSw3ICszMTUsNiBAQAogCQkJCSAgdm9pZCBfX3VzZXIgKmJ1ZmZlciwKIAkJCQkgIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgIHNvZnRsb2NrdXBfcGFuaWM7Ci1leHRlcm4gaW50IHNvZnRsb2NrdXBfdGhyZXNoOwogdm9pZCBsb2NrdXBfZGV0ZWN0b3JfaW5pdCh2b2lkKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZyh2b2lkKQpAQCAtNjUzLDkgKzY1Miw4IEBACiAgKiBCaXRzIGluIGZsYWdzIGZpZWxkIG9mIHNpZ25hbF9zdHJ1Y3QuCiAgKi8KICNkZWZpbmUgU0lHTkFMX1NUT1BfU1RPUFBFRAkweDAwMDAwMDAxIC8qIGpvYiBjb250cm9sIHN0b3AgaW4gZWZmZWN0ICovCi0jZGVmaW5lIFNJR05BTF9TVE9QX0RFUVVFVUVECTB4MDAwMDAwMDIgLyogc3RvcCBzaWduYWwgZGVxdWV1ZWQgKi8KLSNkZWZpbmUgU0lHTkFMX1NUT1BfQ09OVElOVUVECTB4MDAwMDAwMDQgLyogU0lHQ09OVCBzaW5jZSBXQ09OVElOVUVEIHJlYXAgKi8KLSNkZWZpbmUgU0lHTkFMX0dST1VQX0VYSVQJMHgwMDAwMDAwOCAvKiBncm91cCBleGl0IGluIHByb2dyZXNzICovCisjZGVmaW5lIFNJR05BTF9TVE9QX0NPTlRJTlVFRAkweDAwMDAwMDAyIC8qIFNJR0NPTlQgc2luY2UgV0NPTlRJTlVFRCByZWFwICovCisjZGVmaW5lIFNJR05BTF9HUk9VUF9FWElUCTB4MDAwMDAwMDQgLyogZ3JvdXAgZXhpdCBpbiBwcm9ncmVzcyAqLwogLyoKICAqIFBlbmRpbmcgbm90aWZpY2F0aW9ucyB0byBwYXJlbnQuCiAgKi8KQEAgLTc4OCwxNyArNzg2LDM5IEBACiB9OwogCiAvKgotICogc2NoZWQtZG9tYWlucyAobXVsdGlwcm9jZXNzb3IgYmFsYW5jaW5nKSBkZWNsYXJhdGlvbnM6CisgKiBJbmNyZWFzZSByZXNvbHV0aW9uIG9mIG5pY2UtbGV2ZWwgY2FsY3VsYXRpb25zIGZvciA2NC1iaXQgYXJjaGl0ZWN0dXJlcy4KKyAqIFRoZSBleHRyYSByZXNvbHV0aW9uIGltcHJvdmVzIHNoYXJlcyBkaXN0cmlidXRpb24gYW5kIGxvYWQgYmFsYW5jaW5nIG9mCisgKiBsb3ctd2VpZ2h0IHRhc2sgZ3JvdXBzIChlZy4gbmljZSArMTkgb24gYW4gYXV0b2dyb3VwKSwgZGVlcGVyIHRhc2tncm91cAorICogaGllcmFyY2hpZXMsIGVzcGVjaWFsbHkgb24gbGFyZ2VyIHN5c3RlbXMuIFRoaXMgaXMgbm90IGEgdXNlci12aXNpYmxlIGNoYW5nZQorICogYW5kIGRvZXMgbm90IGNoYW5nZSB0aGUgdXNlci1pbnRlcmZhY2UgZm9yIHNldHRpbmcgc2hhcmVzL3dlaWdodHMuCisgKgorICogV2UgaW5jcmVhc2UgcmVzb2x1dGlvbiBvbmx5IGlmIHdlIGhhdmUgZW5vdWdoIGJpdHMgdG8gYWxsb3cgdGhpcyBpbmNyZWFzZWQKKyAqIHJlc29sdXRpb24gKGkuZS4gQklUU19QRVJfTE9ORyA+IDMyKS4gVGhlIGNvc3RzIGZvciBpbmNyZWFzaW5nIHJlc29sdXRpb24KKyAqIHdoZW4gQklUU19QRVJfTE9ORyA8PSAzMiBhcmUgcHJldHR5IGhpZ2ggYW5kIHRoZSByZXR1cm5zIGRvIG5vdCBqdXN0aWZ5IHRoZQorICogaW5jcmVhc2VkIGNvc3RzLgogICovCisjaWYgQklUU19QRVJfTE9ORyA+IDMyCisjIGRlZmluZSBTQ0hFRF9MT0FEX1JFU09MVVRJT04JMTAKKyMgZGVmaW5lIHNjYWxlX2xvYWQodykJCSgodykgPDwgU0NIRURfTE9BRF9SRVNPTFVUSU9OKQorIyBkZWZpbmUgc2NhbGVfbG9hZF9kb3duKHcpCSgodykgPj4gU0NIRURfTE9BRF9SRVNPTFVUSU9OKQorI2Vsc2UKKyMgZGVmaW5lIFNDSEVEX0xPQURfUkVTT0xVVElPTgkwCisjIGRlZmluZSBzY2FsZV9sb2FkKHcpCQkodykKKyMgZGVmaW5lIHNjYWxlX2xvYWRfZG93bih3KQkodykKKyNlbmRpZgogCi0vKgotICogSW5jcmVhc2UgcmVzb2x1dGlvbiBvZiBuaWNlLWxldmVsIGNhbGN1bGF0aW9uczoKLSAqLwotI2RlZmluZSBTQ0hFRF9MT0FEX1NISUZUCTEwCisjZGVmaW5lIFNDSEVEX0xPQURfU0hJRlQJKDEwICsgU0NIRURfTE9BRF9SRVNPTFVUSU9OKQogI2RlZmluZSBTQ0hFRF9MT0FEX1NDQUxFCSgxTCA8PCBTQ0hFRF9MT0FEX1NISUZUKQogCi0jZGVmaW5lIFNDSEVEX0xPQURfU0NBTEVfRlVaWglTQ0hFRF9MT0FEX1NDQUxFCisvKgorICogSW5jcmVhc2UgcmVzb2x1dGlvbiBvZiBjcHVfcG93ZXIgY2FsY3VsYXRpb25zCisgKi8KKyNkZWZpbmUgU0NIRURfUE9XRVJfU0hJRlQJMTAKKyNkZWZpbmUgU0NIRURfUE9XRVJfU0NBTEUJKDFMIDw8IFNDSEVEX1BPV0VSX1NISUZUKQogCisvKgorICogc2NoZWQtZG9tYWlucyAobXVsdGlwcm9jZXNzb3IgYmFsYW5jaW5nKSBkZWNsYXJhdGlvbnM6CisgKi8KICNpZmRlZiBDT05GSUdfU01QCiAjZGVmaW5lIFNEX0xPQURfQkFMQU5DRQkJMHgwMDAxCS8qIERvIGxvYWQgYmFsYW5jaW5nIG9uIHRoaXMgZG9tYWluLiAqLwogI2RlZmluZSBTRF9CQUxBTkNFX05FV0lETEUJMHgwMDAyCS8qIEJhbGFuY2Ugd2hlbiBhYm91dCB0byBiZWNvbWUgaWRsZSAqLwpAQCAtMTI1MSw2ICsxMjcxLDcgQEAKIAlpbnQgZXhpdF9zdGF0ZTsKIAlpbnQgZXhpdF9jb2RlLCBleGl0X3NpZ25hbDsKIAlpbnQgcGRlYXRoX3NpZ25hbDsgIC8qICBUaGUgc2lnbmFsIHNlbnQgd2hlbiB0aGUgcGFyZW50IGRpZXMgICovCisJdW5zaWduZWQgaW50IGdyb3VwX3N0b3A7CS8qIEdST1VQX1NUT1BfKiwgc2lnbG9jayBwcm90ZWN0ZWQgKi8KIAkvKiA/Pz8gKi8KIAl1bnNpZ25lZCBpbnQgcGVyc29uYWxpdHk7CiAJdW5zaWduZWQgZGlkX2V4ZWM6MTsKQEAgLTE3NzEsNiArMTc5MiwxNyBAQAogI2RlZmluZSB0c2tfdXNlZF9tYXRoKHApICgocCktPmZsYWdzICYgUEZfVVNFRF9NQVRIKQogI2RlZmluZSB1c2VkX21hdGgoKSB0c2tfdXNlZF9tYXRoKGN1cnJlbnQpCiAKKy8qCisgKiB0YXNrLT5ncm91cF9zdG9wIGZsYWdzCisgKi8KKyNkZWZpbmUgR1JPVVBfU1RPUF9TSUdNQVNLCTB4ZmZmZiAgICAvKiBzaWduciBvZiB0aGUgbGFzdCBncm91cCBzdG9wICovCisjZGVmaW5lIEdST1VQX1NUT1BfUEVORElORwkoMSA8PCAxNikgLyogdGFzayBzaG91bGQgc3RvcCBmb3IgZ3JvdXAgc3RvcCAqLworI2RlZmluZSBHUk9VUF9TVE9QX0NPTlNVTUUJKDEgPDwgMTcpIC8qIGNvbnN1bWUgZ3JvdXAgc3RvcCBjb3VudCAqLworI2RlZmluZSBHUk9VUF9TVE9QX1RSQVBQSU5HCSgxIDw8IDE4KSAvKiBzd2l0Y2hpbmcgZnJvbSBTVE9QUEVEIHRvIFRSQUNFRCAqLworI2RlZmluZSBHUk9VUF9TVE9QX0RFUVVFVUVECSgxIDw8IDE5KSAvKiBzdG9wIHNpZ25hbCBkZXF1ZXVlZCAqLworCitleHRlcm4gdm9pZCB0YXNrX2NsZWFyX2dyb3VwX3N0b3BfcGVuZGluZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOworCiAjaWZkZWYgQ09ORklHX1BSRUVNUFRfUkNVCiAKICNkZWZpbmUgUkNVX1JFQURfVU5MT0NLX0JMT0NLRUQgKDEgPDwgMCkgLyogYmxvY2tlZCB3aGlsZSBpbiBSQ1UgcmVhZC1zaWRlLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oIGIvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCmluZGV4IDc1OGM1YjAuLmE1YzMxMTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmgKQEAgLTQ1LDcgKzQ1LDggQEAKICNkZWZpbmUgUE9SVF9PQ1RFT04JMTcJLyogQ2F2aXVtIE9DVEVPTiBpbnRlcm5hbCBVQVJUICovCiAjZGVmaW5lIFBPUlRfQVI3CTE4CS8qIFRleGFzIEluc3RydW1lbnRzIEFSNyBpbnRlcm5hbCBVQVJUICovCiAjZGVmaW5lIFBPUlRfVTZfMTY1NTBBCTE5CS8qIFNULUVyaWNzc29uIFU2eHh4IGludGVybmFsIFVBUlQgKi8KLSNkZWZpbmUgUE9SVF9NQVhfODI1MAkxOQkvKiBtYXggcG9ydCBJRCAqLworI2RlZmluZSBQT1JUX1RFR1JBCTIwCS8qIE5WSURJQSBUZWdyYSBpbnRlcm5hbCBVQVJUICovCisjZGVmaW5lIFBPUlRfTUFYXzgyNTAJMjAJLyogbWF4IHBvcnQgSUQgKi8KIAogLyoKICAqIEFSTSBzcGVjaWZpYyB0eXBlIG51bWJlcnMuICBUaGVzZSBhcmUgbm90IGN1cnJlbnRseSBndWFyYW50ZWVkCkBAIC0yMDIsNiArMjAzLDkgQEAKIC8qIFZJQSBWVDg1MDAgU29DICovCiAjZGVmaW5lIFBPUlRfVlQ4NTAwCTk3CiAKKy8qIFhpbGlueCBQU1MgVUFSVCAqLworI2RlZmluZSBQT1JUX1hVQVJUUFMJOTgKKwogI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcmlhbF9yZWcuaCBiL2luY2x1ZGUvbGludXgvc2VyaWFsX3JlZy5oCmluZGV4IDNlY2I3MWEuLmM3NWJkYTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VyaWFsX3JlZy5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VyaWFsX3JlZy5oCkBAIC01Nyw2ICs1Nyw3IEBACiAgKiBTVDE2QzY1NDoJIDggIDE2ICA1NiAgNjAJCSA4ICAxNiAgMzIgIDU2CVBPUlRfMTY2NTQKICAqIFRJMTZDNzUwOgkgMSAgMTYgIDMyICA1NgkJeHggIHh4ICB4eCAgeHgJUE9SVF8xNjc1MAogICogVEkxNkM3NTI6CSA4ICAxNiAgNTYgIDYwCQkgOCAgMTYgIDMyICA1NgorICogVGVncmE6CSAxICAgNCAgIDggIDE0CQkxNiAgIDggICA0ICAgMQlQT1JUX1RFR1JBCiAgKi8KICNkZWZpbmUgVUFSVF9GQ1JfUl9UUklHXzAwCTB4MDAKICNkZWZpbmUgVUFSVF9GQ1JfUl9UUklHXzAxCTB4NDAKQEAgLTExOCw2ICsxMTksNyBAQAogI2RlZmluZSBVQVJUX01DUl9EVFIJCTB4MDEgLyogRFRSIGNvbXBsZW1lbnQgKi8KIAogI2RlZmluZSBVQVJUX0xTUgk1CS8qIEluOiAgTGluZSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUFSVF9MU1JfRklGT0UJCTB4ODAgLyogRmlmbyBlcnJvciAqLwogI2RlZmluZSBVQVJUX0xTUl9URU1UCQkweDQwIC8qIFRyYW5zbWl0dGVyIGVtcHR5ICovCiAjZGVmaW5lIFVBUlRfTFNSX1RIUkUJCTB4MjAgLyogVHJhbnNtaXQtaG9sZC1yZWdpc3RlciBlbXB0eSAqLwogI2RlZmluZSBVQVJUX0xTUl9CSQkJMHgxMCAvKiBCcmVhayBpbnRlcnJ1cHQgaW5kaWNhdG9yICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NodDE1LmggYi9pbmNsdWRlL2xpbnV4L3NodDE1LmgKaW5kZXggMDQ2YmNlMC4uZjg1YzdjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zaHQxNS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2h0MTUuaApAQCAtOCwxNyArOCwyNyBAQAogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBGb3IgZnVydGhlciBpbmZvcm1hdGlvbiwgc2VlIHRoZSBEb2N1bWVudGF0aW9uL2h3bW9uL3NodDE1IGZpbGUuCiAgKi8KIAogLyoqCiAgKiBzdHJ1Y3Qgc2h0MTVfcGxhdGZvcm1fZGF0YSAtIHNodDE1IGNvbm5lY3Rpdml0eSBpbmZvCi0gKiBAZ3Bpb19kYXRhOgluby4gb2YgZ3BpbyB0byB3aGljaCBiaWRpcmVjdGlvbmFsIGRhdGEgbGluZSBpcyBjb25uZWN0ZWQKLSAqIEBncGlvX3NjazoJbm8uIG9mIGdwaW8gdG8gd2hpY2ggdGhlIGRhdGEgY2xvY2sgaXMgY29ubmVjdGVkLgotICogQHN1cHBseV9tdjoJc3VwcGx5IHZvbHRhZ2UgaW4gbXYuIE92ZXJyaWRkZW4gYnkgcmVndWxhdG9yIGlmIGF2YWlsYWJsZS4KLSAqKi8KKyAqIEBncGlvX2RhdGE6CQluby4gb2YgZ3BpbyB0byB3aGljaCBiaWRpcmVjdGlvbmFsIGRhdGEgbGluZSBpcworICoJCQljb25uZWN0ZWQuCisgKiBAZ3Bpb19zY2s6CQluby4gb2YgZ3BpbyB0byB3aGljaCB0aGUgZGF0YSBjbG9jayBpcyBjb25uZWN0ZWQuCisgKiBAc3VwcGx5X212OgkJc3VwcGx5IHZvbHRhZ2UgaW4gbXYuIE92ZXJyaWRkZW4gYnkgcmVndWxhdG9yIGlmCisgKgkJCWF2YWlsYWJsZS4KKyAqIEBjaGVja3N1bToJCWZsYWcgdG8gaW5kaWNhdGUgdGhlIGNoZWNrc3VtIHNob3VsZCBiZSB2YWxpZGF0ZWQuCisgKiBAbm9fb3RwX3JlbG9hZDoJZmxhZyB0byBpbmRpY2F0ZSBubyByZWxvYWQgZnJvbSBPVFAuCisgKiBAbG93X3Jlc29sdXRpb246CWZsYWcgdG8gaW5kaWNhdGUgdGhlIHRlbXAvaHVtaWRpdHkgcmVzb2x1dGlvbiB0byB1c2UuCisgKi8KIHN0cnVjdCBzaHQxNV9wbGF0Zm9ybV9kYXRhIHsKIAlpbnQgZ3Bpb19kYXRhOwogCWludCBncGlvX3NjazsKIAlpbnQgc3VwcGx5X212OworCWJvb2wgY2hlY2tzdW07CisJYm9vbCBub19vdHBfcmVsb2FkOworCWJvb2wgbG93X3Jlc29sdXRpb247CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NpZ25hbC5oIGIvaW5jbHVkZS9saW51eC9zaWduYWwuaAppbmRleCAyOWE2OGFjLi5hODIyMzAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2lnbmFsLmgKQEAgLTEyNSwxMyArMTI1LDEzIEBACiAjZGVmaW5lIF9zaWdfYW5kKHgseSkJKCh4KSAmICh5KSkKIF9TSUdfU0VUX0JJTk9QKHNpZ2FuZHNldHMsIF9zaWdfYW5kKQogCi0jZGVmaW5lIF9zaWdfbmFuZCh4LHkpCSgoeCkgJiB+KHkpKQotX1NJR19TRVRfQklOT1Aoc2lnbmFuZHNldHMsIF9zaWdfbmFuZCkKKyNkZWZpbmUgX3NpZ19hbmRuKHgseSkJKCh4KSAmIH4oeSkpCitfU0lHX1NFVF9CSU5PUChzaWdhbmRuc2V0cywgX3NpZ19hbmRuKQogCiAjdW5kZWYgX1NJR19TRVRfQklOT1AKICN1bmRlZiBfc2lnX29yCiAjdW5kZWYgX3NpZ19hbmQKLSN1bmRlZiBfc2lnX25hbmQKKyN1bmRlZiBfc2lnX2FuZG4KIAogI2RlZmluZSBfU0lHX1NFVF9PUChuYW1lLCBvcCkJCQkJCQlcCiBzdGF0aWMgaW5saW5lIHZvaWQgbmFtZShzaWdzZXRfdCAqc2V0KQkJCQkJXApAQCAtMjM2LDYgKzIzNiw5IEBACiAJcmV0dXJuIHNpZyA8PSBfTlNJRyA/IDEgOiAwOwogfQogCitzdHJ1Y3QgdGltZXNwZWM7CitzdHJ1Y3QgcHRfcmVnczsKKwogZXh0ZXJuIGludCBuZXh0X3NpZ25hbChzdHJ1Y3Qgc2lncGVuZGluZyAqcGVuZGluZywgc2lnc2V0X3QgKm1hc2spOwogZXh0ZXJuIGludCBkb19zZW5kX3NpZ19pbmZvKGludCBzaWcsIHN0cnVjdCBzaWdpbmZvICppbmZvLAogCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgYm9vbCBncm91cCk7CkBAIC0yNDQsMTAgKzI0NywxMiBAQAogZXh0ZXJuIGxvbmcgZG9fcnRfdGdzaWdxdWV1ZWluZm8ocGlkX3QgdGdpZCwgcGlkX3QgcGlkLCBpbnQgc2lnLAogCQkJCSBzaWdpbmZvX3QgKmluZm8pOwogZXh0ZXJuIGxvbmcgZG9fc2lncGVuZGluZyh2b2lkIF9fdXNlciAqLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiBpbnQgZG9fc2lndGltZWR3YWl0KGNvbnN0IHNpZ3NldF90ICosIHNpZ2luZm9fdCAqLAorCQkJCWNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqKTsKIGV4dGVybiBpbnQgc2lncHJvY21hc2soaW50LCBzaWdzZXRfdCAqLCBzaWdzZXRfdCAqKTsKK2V4dGVybiB2b2lkIHNldF9jdXJyZW50X2Jsb2NrZWQoY29uc3Qgc2lnc2V0X3QgKik7CiBleHRlcm4gaW50IHNob3dfdW5oYW5kbGVkX3NpZ25hbHM7CiAKLXN0cnVjdCBwdF9yZWdzOwogZXh0ZXJuIGludCBnZXRfc2lnbmFsX3RvX2RlbGl2ZXIoc2lnaW5mb190ICppbmZvLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKnJldHVybl9rYSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHZvaWQgKmNvb2tpZSk7CiBleHRlcm4gdm9pZCBleGl0X3NpZ25hbHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaAppbmRleCBkMGFlOTBhLi5lOGI3OGNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKQEAgLTM5MSw4ICszOTEsOCBAQAogCiAJX191MzIJCQlyeGhhc2g7CiAKKwlfX3UxNgkJCXF1ZXVlX21hcHBpbmc7CiAJa21lbWNoZWNrX2JpdGZpZWxkX2JlZ2luKGZsYWdzMik7Ci0JX191MTYJCQlxdWV1ZV9tYXBwaW5nOjE2OwogI2lmZGVmIENPTkZJR19JUFY2X05ESVNDX05PREVUWVBFCiAJX191OAkJCW5kaXNjX25vZGV0eXBlOjI7CiAjZW5kaWYKQEAgLTE0NDIsNyArMTQ0Miw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3NrYl90cmltKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCiB7Ci0JaWYgKHVubGlrZWx5KHNrYi0+ZGF0YV9sZW4pKSB7CisJaWYgKHVubGlrZWx5KHNrYl9pc19ub25saW5lYXIoc2tiKSkpIHsKIAkJV0FSTl9PTigxKTsKIAkJcmV0dXJuOwogCX0KQEAgLTE3ODIsNyArMTc4Miw3IEBACiAKICNkZWZpbmUgc2tiX3F1ZXVlX3dhbGsocXVldWUsIHNrYikgXAogCQlmb3IgKHNrYiA9IChxdWV1ZSktPm5leHQ7CQkJCQlcCi0JCSAgICAgcHJlZmV0Y2goc2tiLT5uZXh0KSwgKHNrYiAhPSAoc3RydWN0IHNrX2J1ZmYgKikocXVldWUpKTsJXAorCQkgICAgIHNrYiAhPSAoc3RydWN0IHNrX2J1ZmYgKikocXVldWUpOwkJCQlcCiAJCSAgICAgc2tiID0gc2tiLT5uZXh0KQogCiAjZGVmaW5lIHNrYl9xdWV1ZV93YWxrX3NhZmUocXVldWUsIHNrYiwgdG1wKQkJCQkJXApAQCAtMTc5MSw3ICsxNzkxLDcgQEAKIAkJICAgICBza2IgPSB0bXAsIHRtcCA9IHNrYi0+bmV4dCkKIAogI2RlZmluZSBza2JfcXVldWVfd2Fsa19mcm9tKHF1ZXVlLCBza2IpCQkJCQkJXAotCQlmb3IgKDsgcHJlZmV0Y2goc2tiLT5uZXh0KSwgKHNrYiAhPSAoc3RydWN0IHNrX2J1ZmYgKikocXVldWUpKTsJXAorCQlmb3IgKDsgc2tiICE9IChzdHJ1Y3Qgc2tfYnVmZiAqKShxdWV1ZSk7CQkJXAogCQkgICAgIHNrYiA9IHNrYi0+bmV4dCkKIAogI2RlZmluZSBza2JfcXVldWVfd2Fsa19mcm9tX3NhZmUocXVldWUsIHNrYiwgdG1wKQkJCQlcCkBAIC0xODAxLDcgKzE4MDEsNyBAQAogCiAjZGVmaW5lIHNrYl9xdWV1ZV9yZXZlcnNlX3dhbGsocXVldWUsIHNrYikgXAogCQlmb3IgKHNrYiA9IChxdWV1ZSktPnByZXY7CQkJCQlcCi0JCSAgICAgcHJlZmV0Y2goc2tiLT5wcmV2KSwgKHNrYiAhPSAoc3RydWN0IHNrX2J1ZmYgKikocXVldWUpKTsJXAorCQkgICAgIHNrYiAhPSAoc3RydWN0IHNrX2J1ZmYgKikocXVldWUpOwkJCQlcCiAJCSAgICAgc2tiID0gc2tiLT5wcmV2KQogCiAjZGVmaW5lIHNrYl9xdWV1ZV9yZXZlcnNlX3dhbGtfc2FmZShxdWV1ZSwgc2tiLCB0bXApCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2x1Yl9kZWYuaCBiL2luY2x1ZGUvbGludXgvc2x1Yl9kZWYuaAppbmRleCA0NWNhMTIzLi5jODY2OGQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NsdWJfZGVmLmgKKysrIGIvaW5jbHVkZS9saW51eC9zbHViX2RlZi5oCkBAIC0zNyw5ICszNyw3IEBACiAKIHN0cnVjdCBrbWVtX2NhY2hlX2NwdSB7CiAJdm9pZCAqKmZyZWVsaXN0OwkvKiBQb2ludGVyIHRvIG5leHQgYXZhaWxhYmxlIG9iamVjdCAqLwotI2lmZGVmIENPTkZJR19DTVBYQ0hHX0xPQ0FMCiAJdW5zaWduZWQgbG9uZyB0aWQ7CS8qIEdsb2JhbGx5IHVuaXF1ZSB0cmFuc2FjdGlvbiBpZCAqLwotI2VuZGlmCiAJc3RydWN0IHBhZ2UgKnBhZ2U7CS8qIFRoZSBzbGFiIGZyb20gd2hpY2ggd2UgYXJlIGFsbG9jYXRpbmcgKi8KIAlpbnQgbm9kZTsJCS8qIFRoZSBub2RlIG9mIHRoZSBwYWdlIChvciAtMSBmb3IgZGVidWcpICovCiAjaWZkZWYgQ09ORklHX1NMVUJfU1RBVFMKQEAgLTE3OSw3ICsxNzcsOCBAQAogCWlmIChzaXplIDw9ICAgNCAqIDEwMjQpIHJldHVybiAxMjsKIC8qCiAgKiBUaGUgZm9sbG93aW5nIGlzIG9ubHkgbmVlZGVkIHRvIHN1cHBvcnQgYXJjaGl0ZWN0dXJlcyB3aXRoIGEgbGFyZ2VyIHBhZ2UKLSAqIHNpemUgdGhhbiA0ay4KKyAqIHNpemUgdGhhbiA0ay4gV2UgbmVlZCB0byBzdXBwb3J0IDIgKiBQQUdFX1NJWkUgaGVyZS4gU28gZm9yIGEgNjRrIHBhZ2UKKyAqIHNpemUgd2Ugd291bGQgaGF2ZSB0byBnbyB1cCB0byAxMjhrLgogICovCiAJaWYgKHNpemUgPD0gICA4ICogMTAyNCkgcmV0dXJuIDEzOwogCWlmIChzaXplIDw9ICAxNiAqIDEwMjQpIHJldHVybiAxNDsKQEAgLTE5MCw3ICsxODksOCBAQAogCWlmIChzaXplIDw9IDUxMiAqIDEwMjQpIHJldHVybiAxOTsKIAlpZiAoc2l6ZSA8PSAxMDI0ICogMTAyNCkgcmV0dXJuIDIwOwogCWlmIChzaXplIDw9ICAyICogMTAyNCAqIDEwMjQpIHJldHVybiAyMTsKLQlyZXR1cm4gLTE7CisJQlVHKCk7CisJcmV0dXJuIC0xOyAvKiBXaWxsIG5ldmVyIGJlIHJlYWNoZWQgKi8KIAogLyoKICAqIFdoYXQgd2UgcmVhbGx5IHdhbnRlZCB0byBkbyBhbmQgY2Fubm90IGRvIGJlY2F1c2Ugb2YgY29tcGlsZXIgaXNzdWVzIGlzOgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbXNjOTExeC5oIGIvaW5jbHVkZS9saW51eC9zbXNjOTExeC5oCmluZGV4IDcxNDRlOGEuLjRkZGU3MGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc21zYzkxMXguaAorKysgYi9pbmNsdWRlL2xpbnV4L3Ntc2M5MTF4LmgKQEAgLTI5LDYgKzI5LDcgQEAKIAl1bnNpZ25lZCBpbnQgaXJxX3BvbGFyaXR5OwogCXVuc2lnbmVkIGludCBpcnFfdHlwZTsKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJdW5zaWduZWQgaW50IHNoaWZ0OwogCXBoeV9pbnRlcmZhY2VfdCBwaHlfaW50ZXJmYWNlOwogCXVuc2lnbmVkIGNoYXIgbWFjWzZdOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc29ja2V0LmggYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCmluZGV4IGQyYjVlOTguLjRlZjk4ZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc29ja2V0LmgKKysrIGIvaW5jbHVkZS9saW51eC9zb2NrZXQuaApAQCAtMzMzLDUgKzMzMyw3IEBACiAKIGV4dGVybiBpbnQgX19zeXNfcmVjdm1tc2coaW50IGZkLCBzdHJ1Y3QgbW1zZ2hkciBfX3VzZXIgKm1tc2csIHVuc2lnbmVkIGludCB2bGVuLAogCQkJICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCB0aW1lc3BlYyAqdGltZW91dCk7CitleHRlcm4gaW50IF9fc3lzX3NlbmRtbXNnKGludCBmZCwgc3RydWN0IG1tc2doZHIgX191c2VyICptbXNnLAorCQkJICB1bnNpZ25lZCBpbnQgdmxlbiwgdW5zaWduZWQgaW50IGZsYWdzKTsKICNlbmRpZiAvKiBub3Qga2VybmVsIGFuZCBub3QgZ2xpYmMgKi8KICNlbmRpZiAvKiBfTElOVVhfU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpbmxvY2tfdXAuaCBiL2luY2x1ZGUvbGludXgvc3BpbmxvY2tfdXAuaAppbmRleCBiMTRmNmE5Li5hMjZlMmZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrX3VwLmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGlubG9ja191cC5oCkBAIC01LDYgKzUsOCBAQAogIyBlcnJvciAicGxlYXNlIGRvbid0IGluY2x1ZGUgdGhpcyBmaWxlIGRpcmVjdGx5IgogI2VuZGlmCiAKKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CS8qIGZvciBjcHVfcmVsYXgoKSAqLworCiAvKgogICogaW5jbHVkZS9saW51eC9zcGlubG9ja191cC5oIC0gVVAtZGVidWcgdmVyc2lvbiBvZiBzcGlubG9ja3MuCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zc2Ivc3NiLmggYi9pbmNsdWRlL2xpbnV4L3NzYi9zc2IuaAppbmRleCAwNDVmNzJhLi4yNTJlNDQ4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zc2Ivc3NiLmgKKysrIGIvaW5jbHVkZS9saW51eC9zc2Ivc3NiLmgKQEAgLTMwOCw3ICszMDgsNyBAQAogCiAJLyogSUQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIENoaXAuICovCiAJdTE2IGNoaXBfaWQ7Ci0JdTE2IGNoaXBfcmV2OworCXU4IGNoaXBfcmV2OwogCXUxNiBzcHJvbV9vZmZzZXQ7CiAJdTE2IHNwcm9tX3NpemU7CQkvKiBudW1iZXIgb2Ygd29yZHMgaW4gc3Byb20gKi8KIAl1OCBjaGlwX3BhY2thZ2U7CkBAIC01MjAsNiArNTIwLDcgQEAKICAqIE90aGVyd2lzZSBzdGF0aWMgYWx3YXlzLW9uIHBvd2VyY29udHJvbCB3aWxsIGJlIHVzZWQuICovCiBleHRlcm4gaW50IHNzYl9idXNfcG93ZXJ1cChzdHJ1Y3Qgc3NiX2J1cyAqYnVzLCBib29sIGR5bmFtaWNfcGN0bCk7CiAKK2V4dGVybiB2b2lkIHNzYl9jb21taXRfc2V0dGluZ3Moc3RydWN0IHNzYl9idXMgKmJ1cyk7CiAKIC8qIFZhcmlvdXMgaGVscGVyIGZ1bmN0aW9ucyAqLwogZXh0ZXJuIHUzMiBzc2JfYWRtYXRjaF9iYXNlKHUzMiBhZG0pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zc2Ivc3NiX2RyaXZlcl9jaGlwY29tbW9uLmggYi9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfZHJpdmVyX2NoaXBjb21tb24uaAppbmRleCAyY2RmMjQ5Li5hMDhkNjkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfZHJpdmVyX2NoaXBjb21tb24uaAorKysgYi9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfZHJpdmVyX2NoaXBjb21tb24uaApAQCAtMTIzLDYgKzEyMyw4IEBACiAjZGVmaW5lIFNTQl9DSElQQ09fRkxBU0hEQVRBCQkweDAwNDgKICNkZWZpbmUgU1NCX0NISVBDT19CQ0FTVF9BRERSCQkweDAwNTAKICNkZWZpbmUgU1NCX0NISVBDT19CQ0FTVF9EQVRBCQkweDAwNTQKKyNkZWZpbmUgU1NCX0NISVBDT19HUElPUFVMTFVQCQkweDAwNTgJCS8qIFJldiA+PSAyMCBvbmx5ICovCisjZGVmaW5lIFNTQl9DSElQQ09fR1BJT1BVTExET1dOCQkweDAwNUMJCS8qIFJldiA+PSAyMCBvbmx5ICovCiAjZGVmaW5lIFNTQl9DSElQQ09fR1BJT0lOCQkweDAwNjAKICNkZWZpbmUgU1NCX0NISVBDT19HUElPT1VUCQkweDAwNjQKICNkZWZpbmUgU1NCX0NISVBDT19HUElPT1VURU4JCTB4MDA2OApAQCAtMTMxLDYgKzEzMyw5IEBACiAjZGVmaW5lIFNTQl9DSElQQ09fR1BJT0lSUQkJMHgwMDc0CiAjZGVmaW5lIFNTQl9DSElQQ09fV0FUQ0hET0cJCTB4MDA4MAogI2RlZmluZSBTU0JfQ0hJUENPX0dQSU9USU1FUgkJMHgwMDg4CQkvKiBMRUQgcG93ZXJzYXZlIChjb3JlcmV2ID49IDE2KSAqLworI2RlZmluZSAgU1NCX0NISVBDT19HUElPVElNRVJfT0ZGVElNRQkweDAwMDBGRkZGCisjZGVmaW5lICBTU0JfQ0hJUENPX0dQSU9USU1FUl9PRkZUSU1FX1NISUZUCTAKKyNkZWZpbmUgIFNTQl9DSElQQ09fR1BJT1RJTUVSX09OVElNRQkweEZGRkYwMDAwCiAjZGVmaW5lICBTU0JfQ0hJUENPX0dQSU9USU1FUl9PTlRJTUVfU0hJRlQJMTYKICNkZWZpbmUgU1NCX0NISVBDT19HUElPVE9VVE0JCTB4MDA4QwkJLyogTEVEIHBvd2Vyc2F2ZSAoY29yZXJldiA+PSAxNikgKi8KICNkZWZpbmUgU1NCX0NISVBDT19DTE9DS19OCQkweDAwOTAKQEAgLTE4OSw4ICsxOTQsMTAgQEAKICNkZWZpbmUgIFNTQl9DSElQQ09fQ0xLQ1RMU1RfSEFWRUFMUFJFUQkweDAwMDAwMDA4IC8qIEFMUCBhdmFpbGFibGUgcmVxdWVzdCAqLwogI2RlZmluZSAgU1NCX0NISVBDT19DTEtDVExTVF9IQVZFSFRSRVEJMHgwMDAwMDAxMCAvKiBIVCBhdmFpbGFibGUgcmVxdWVzdCAqLwogI2RlZmluZSAgU1NCX0NISVBDT19DTEtDVExTVF9IV0NST0ZGCTB4MDAwMDAwMjAgLyogRm9yY2UgSFcgY2xvY2sgcmVxdWVzdCBvZmYgKi8KLSNkZWZpbmUgIFNTQl9DSElQQ09fQ0xLQ1RMU1RfSEFWRUhUCTB4MDAwMTAwMDAgLyogSFQgYXZhaWxhYmxlICovCi0jZGVmaW5lICBTU0JfQ0hJUENPX0NMS0NUTFNUX0hBVkVBTFAJMHgwMDAyMDAwMCAvKiBBUEwgYXZhaWxhYmxlICovCisjZGVmaW5lICBTU0JfQ0hJUENPX0NMS0NUTFNUX0hBVkVBTFAJMHgwMDAxMDAwMCAvKiBBTFAgYXZhaWxhYmxlICovCisjZGVmaW5lICBTU0JfQ0hJUENPX0NMS0NUTFNUX0hBVkVIVAkweDAwMDIwMDAwIC8qIEhUIGF2YWlsYWJsZSAqLworI2RlZmluZSAgU1NCX0NISVBDT19DTEtDVExTVF80MzI4QTBfSEFWRUhUCTB4MDAwMTAwMDAgLyogNDMyOGEwIGhhcyByZXZlcnNlZCBiaXRzICovCisjZGVmaW5lICBTU0JfQ0hJUENPX0NMS0NUTFNUXzQzMjhBMF9IQVZFQUxQCTB4MDAwMjAwMDAgLyogNDMyOGEwIGhhcyByZXZlcnNlZCBiaXRzICovCiAjZGVmaW5lIFNTQl9DSElQQ09fSFdfV09SS0FST1VORAkweDAxRTQgLyogSGFyZHdhcmUgd29ya2Fyb3VuZCAocmV2ID49IDIwKSAqLwogI2RlZmluZSBTU0JfQ0hJUENPX1VBUlQwX0RBVEEJCTB4MDMwMAogI2RlZmluZSBTU0JfQ0hJUENPX1VBUlQwX0lNUgkJMHgwMzA0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfcmVncy5oIGIvaW5jbHVkZS9saW51eC9zc2Ivc3NiX3JlZ3MuaAppbmRleCA0MDI5NTVhLi5lZmJmNDU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfcmVncy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3NiL3NzYl9yZWdzLmgKQEAgLTk3LDcgKzk3LDcgQEAKICNkZWZpbmUgIFNTQl9JTlRWRUNfRU5FVDEJMHgwMDAwMDA0MCAvKiBFbmFibGUgaW50ZXJydXB0cyBmb3IgZW5ldCAxICovCiAjZGVmaW5lIFNTQl9UTVNMT1cJCTB4MEY5OCAgICAgLyogU0IgVGFyZ2V0IFN0YXRlIExvdyAqLwogI2RlZmluZSAgU1NCX1RNU0xPV19SRVNFVAkweDAwMDAwMDAxIC8qIFJlc2V0ICovCi0jZGVmaW5lICBTU0JfVE1TTE9XX1JFSkVDVF8yMgkweDAwMDAwMDAyIC8qIFJlamVjdCAoQmFja3BsYW5lIHJldiAyLjIpICovCisjZGVmaW5lICBTU0JfVE1TTE9XX1JFSkVDVAkweDAwMDAwMDAyIC8qIFJlamVjdCAoU3RhbmRhcmQgQmFja3BsYW5lKSAqLwogI2RlZmluZSAgU1NCX1RNU0xPV19SRUpFQ1RfMjMJMHgwMDAwMDAwNCAvKiBSZWplY3QgKEJhY2twbGFuZSByZXYgMi4zKSAqLwogI2RlZmluZSAgU1NCX1RNU0xPV19DTE9DSwkweDAwMDEwMDAwIC8qIENsb2NrIEVuYWJsZSAqLwogI2RlZmluZSAgU1NCX1RNU0xPV19GR0MJCTB4MDAwMjAwMDAgLyogRm9yY2UgR2F0ZWQgQ2xvY2tzIE9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N0bW1hYy5oIGIvaW5jbHVkZS9saW51eC9zdG1tYWMuaAppbmRleCBmMjkxOTdhLi45NTI5ZTQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N0bW1hYy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3RtbWFjLmgKQEAgLTI2LDYgKzI2LDggQEAKICNpZm5kZWYgX19TVE1NQUNfUExBVEZPUk1fREFUQQogI2RlZmluZSBfX1NUTU1BQ19QTEFURk9STV9EQVRBCiAKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKwogLyogcGxhdGZvcm0gZGF0YSBmb3IgcGxhdGZvcm0gZGV2aWNlIHN0cnVjdHVyZSdzIHBsYXRmb3JtX2RhdGEgZmllbGQgKi8KIAogLyogUHJpdmF0ZSBkYXRhIGZvciB0aGUgU1RNIG9uLWJvYXJkIGV0aGVybmV0IGRyaXZlciAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCmluZGV4IDgzZWNjMTcuLmFiNzE0NDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKQEAgLTYxMCw2ICs2MTAsOCBAQAogYXNtbGlua2FnZSBsb25nIHN5c19zZW5kdG8oaW50LCB2b2lkIF9fdXNlciAqLCBzaXplX3QsIHVuc2lnbmVkLAogCQkJCXN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKiwgaW50KTsKIGFzbWxpbmthZ2UgbG9uZyBzeXNfc2VuZG1zZyhpbnQgZmQsIHN0cnVjdCBtc2doZHIgX191c2VyICptc2csIHVuc2lnbmVkIGZsYWdzKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc2VuZG1tc2coaW50IGZkLCBzdHJ1Y3QgbW1zZ2hkciBfX3VzZXIgKm1zZywKKwkJCSAgICAgdW5zaWduZWQgaW50IHZsZW4sIHVuc2lnbmVkIGZsYWdzKTsKIGFzbWxpbmthZ2UgbG9uZyBzeXNfcmVjdihpbnQsIHZvaWQgX191c2VyICosIHNpemVfdCwgdW5zaWduZWQpOwogYXNtbGlua2FnZSBsb25nIHN5c19yZWN2ZnJvbShpbnQsIHZvaWQgX191c2VyICosIHNpemVfdCwgdW5zaWduZWQsCiAJCQkJc3RydWN0IHNvY2thZGRyIF9fdXNlciAqLCBpbnQgX191c2VyICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9saW51eC90aHJlYWRfaW5mby5oCmluZGV4IDIwZmMzMDMuLjhkMDNmMDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGhyZWFkX2luZm8uaAorKysgYi9pbmNsdWRlL2xpbnV4L3RocmVhZF9pbmZvLmgKQEAgLTI5LDcgKzI5LDcgQEAKIAkJfSBmdXRleDsKIAkJLyogRm9yIG5hbm9zbGVlcCAqLwogCQlzdHJ1Y3QgewotCQkJY2xvY2tpZF90IGluZGV4OworCQkJY2xvY2tpZF90IGNsb2NraWQ7CiAJCQlzdHJ1Y3QgdGltZXNwZWMgX191c2VyICpybXRwOwogI2lmZGVmIENPTkZJR19DT01QQVQKIAkJCXN0cnVjdCBjb21wYXRfdGltZXNwZWMgX191c2VyICpjb21wYXRfcm10cDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZXJmZC5oIGIvaW5jbHVkZS9saW51eC90aW1lcmZkLmgKaW5kZXggMmQwNzkyOS4uZDNiNTdmYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aW1lcmZkLmgKKysrIGIvaW5jbHVkZS9saW51eC90aW1lcmZkLmgKQEAgLTE5LDYgKzE5LDcgQEAKICAqIHNoYXJlZCBPXyogZmxhZ3MuCiAgKi8KICNkZWZpbmUgVEZEX1RJTUVSX0FCU1RJTUUgKDEgPDwgMCkKKyNkZWZpbmUgVEZEX1RJTUVSX0NBTkNFTF9PTl9TRVQgKDEgPDwgMSkKICNkZWZpbmUgVEZEX0NMT0VYRUMgT19DTE9FWEVDCiAjZGVmaW5lIFRGRF9OT05CTE9DSyBPX05PTkJMT0NLCiAKQEAgLTI2LDYgKzI3LDYgQEAKIC8qIEZsYWdzIGZvciB0aW1lcmZkX2NyZWF0ZS4gICovCiAjZGVmaW5lIFRGRF9DUkVBVEVfRkxBR1MgVEZEX1NIQVJFRF9GQ05UTF9GTEFHUwogLyogRmxhZ3MgZm9yIHRpbWVyZmRfc2V0dGltZS4gICovCi0jZGVmaW5lIFRGRF9TRVRUSU1FX0ZMQUdTIFRGRF9USU1FUl9BQlNUSU1FCisjZGVmaW5lIFRGRF9TRVRUSU1FX0ZMQUdTIChURkRfVElNRVJfQUJTVElNRSB8IFRGRF9USU1FUl9DQU5DRUxfT05fU0VUKQogCiAjZW5kaWYgLyogX0xJTlVYX1RJTUVSRkRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aXBjLmggYi9pbmNsdWRlL2xpbnV4L3RpcGMuaAppbmRleCBhNWI5OTRhLi5mMmQ5MDA5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpcGMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RpcGMuaApAQCAtMTAxLDcgKzEwMSw3IEBACiAgKiBMaW1pdGluZyB2YWx1ZXMgZm9yIG1lc3NhZ2VzCiAgKi8KIAotI2RlZmluZSBUSVBDX01BWF9VU0VSX01TR19TSVpFCTY2MDAwCisjZGVmaW5lIFRJUENfTUFYX1VTRVJfTVNHX1NJWkUJNjYwMDBVCiAKIC8qCiAgKiBNZXNzYWdlIGltcG9ydGFuY2UgbGV2ZWxzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RyYWNlaG9vay5oIGIvaW5jbHVkZS9saW51eC90cmFjZWhvb2suaAppbmRleCBlYmNmYTRlLi5lOTVmNTIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RyYWNlaG9vay5oCisrKyBiL2luY2x1ZGUvbGludXgvdHJhY2Vob29rLmgKQEAgLTQ2OSwzMyArNDY5LDYgQEAKIH0KIAogLyoqCi0gKiB0cmFjZWhvb2tfbm90aWZ5X2pjdGwgLSByZXBvcnQgYWJvdXQgam9iIGNvbnRyb2wgc3RvcC9jb250aW51ZQotICogQG5vdGlmeToJCXplcm8sICVDTERfU1RPUFBFRCBvciAlQ0xEX0NPTlRJTlVFRAotICogQHdoeToJCSVDTERfU1RPUFBFRCBvciAlQ0xEX0NPTlRJTlVFRAotICoKLSAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gd2UgbWlnaHQgY2FsbCBkb19ub3RpZnlfcGFyZW50X2NsZHN0b3AoKS4KLSAqCi0gKiBAbm90aWZ5IGlzIHplcm8gaWYgd2Ugd291bGQgbm90IG9yZGluYXJpbHkgc2VuZCBhICVTSUdDSExELAotICogb3IgaXMgdGhlICVDTERfU1RPUFBFRCBvciAlQ0xEX0NPTlRJTlVFRCAuc2lfY29kZSBmb3IgJVNJR0NITEQuCi0gKgotICogQHdoeSBpcyAlQ0xEX1NUT1BQRUQgd2hlbiBhYm91dCB0byBzdG9wIGZvciBqb2IgY29udHJvbDsKLSAqIHdlIGFyZSBhbHJlYWR5IGluICVUQVNLX1NUT1BQRUQgc3RhdGUsIGFib3V0IHRvIGNhbGwgc2NoZWR1bGUoKS4KLSAqIEl0IG1pZ2h0IGFsc28gYmUgdGhhdCB3ZSBoYXZlIGp1c3QgZXhpdGVkIChjaGVjayAlUEZfRVhJVElORyksCi0gKiBidXQgbmVlZCB0byByZXBvcnQgdGhhdCBhIGdyb3VwLXdpZGUgc3RvcCBpcyBjb21wbGV0ZS4KLSAqCi0gKiBAd2h5IGlzICVDTERfQ09OVElOVUVEIHdoZW4gd2FraW5nIHVwIGFmdGVyIGpvYiBjb250cm9sIHN0b3AgYW5kCi0gKiByZWFkeSB0byBtYWtlIGEgZGVsYXllZCBAbm90aWZ5IHJlcG9ydC4KLSAqCi0gKiBSZXR1cm4gdGhlICVDTERfKiB2YWx1ZSBmb3IgJVNJR0NITEQsIG9yIHplcm8gdG8gZ2VuZXJhdGUgbm8gc2lnbmFsLgotICoKLSAqIENhbGxlZCB3aXRoIHRoZSBzaWdsb2NrIGhlbGQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHRyYWNlaG9va19ub3RpZnlfamN0bChpbnQgbm90aWZ5LCBpbnQgd2h5KQotewotCXJldHVybiBub3RpZnkgPzogKGN1cnJlbnQtPnB0cmFjZSAmIFBUX1BUUkFDRUQpID8gd2h5IDogMDsKLX0KLQotLyoqCiAgKiB0cmFjZWhvb2tfZmluaXNoX2pjdGwgLSByZXBvcnQgYWJvdXQgcmV0dXJuIGZyb20gam9iIGNvbnRyb2wgc3RvcAogICoKICAqIFRoaXMgaXMgY2FsbGVkIGJ5IGRvX3NpZ25hbF9zdG9wKCkgYWZ0ZXIgd2FrZXVwLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90dHkuaCBiL2luY2x1ZGUvbGludXgvdHR5LmgKaW5kZXggOWY0NjljNy4uZDZmMDUyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90dHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3R0eS5oCkBAIC01MCw2ICs1MCw4IEBACiAjZGVmaW5lIE5fQ0FJRgkJMjAgICAgICAvKiBDQUlGIHByb3RvY29sIGZvciB0YWxraW5nIHRvIG1vZGVtcyAqLwogI2RlZmluZSBOX0dTTTA3MTAJMjEJLyogR1NNIDA3MTAgTXV4ICovCiAjZGVmaW5lIE5fVElfV0wJCTIyCS8qIGZvciBUSSdzIFdMIEJULCBGTSwgR1BTIGNvbWJvIGNoaXBzICovCisjZGVmaW5lIE5fVFJBQ0VTSU5LCTIzCS8qIFRyYWNlIGRhdGEgcm91dGluZyBmb3IgTUlQSSBQMTE0OS43ICovCisjZGVmaW5lIE5fVFJBQ0VST1VURVIJMjQJLyogVHJhY2UgZGF0YSByb3V0aW5nIGZvciBNSVBJIFAxMTQ5LjcgKi8KIAogLyoKICAqIFRoaXMgY2hhcmFjdGVyIGlzIHRoZSBzYW1lIGFzIF9QT1NJWF9WRElTQUJMRTogaXQgY2Fubm90IGJlIHVzZWQgYXMKQEAgLTQ3Miw2ICs0NzQsNyBAQAogZXh0ZXJuIHZvaWQgZnJlZV90dHlfc3RydWN0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogZXh0ZXJuIHZvaWQgaW5pdGlhbGl6ZV90dHlfc3RydWN0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCiAJCXN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIGludCBpZHgpOworZXh0ZXJuIHZvaWQgZGVpbml0aWFsaXplX3R0eV9zdHJ1Y3Qoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBleHRlcm4gc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eV9pbml0X2RldihzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyLCBpbnQgaWR4LAogCQkJCQkJCQlpbnQgZmlyc3Rfb2spOwogZXh0ZXJuIGludCB0dHlfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCk7CkBAIC01MjUsNiArNTI4LDcgQEAKIGV4dGVybiBpbnQgdHR5X2xkaXNjX3NldHVwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0dHlfc3RydWN0ICpvX3R0eSk7CiBleHRlcm4gdm9pZCB0dHlfbGRpc2NfcmVsZWFzZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqb190dHkpOwogZXh0ZXJuIHZvaWQgdHR5X2xkaXNjX2luaXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitleHRlcm4gdm9pZCB0dHlfbGRpc2NfZGVpbml0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogZXh0ZXJuIHZvaWQgdHR5X2xkaXNjX2JlZ2luKHZvaWQpOwogLyogVGhpcyBsYXN0IG9uZSBpcyBqdXN0IGZvciB0aGUgdHR5IGxheWVyIGludGVybmFscyBhbmQgc2hvdWxkbid0IGJlIHVzZWQgZWxzZXdoZXJlICovCiBleHRlcm4gdm9pZCB0dHlfbGRpc2NfZW5hYmxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90dHlfbGRpc2MuaCBiL2luY2x1ZGUvbGludXgvdHR5X2xkaXNjLmgKaW5kZXggZmY3ZGMwOC4uNWIwNzc5MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90dHlfbGRpc2MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3R0eV9sZGlzYy5oCkBAIC03Niw3ICs3Niw3IEBACiAgKiAJdHR5IGRldmljZS4gIEl0IGlzIHNvbGVseSB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGxpbmUKICAqIAlkaXNjaXBsaW5lIHRvIGhhbmRsZSBwb2xsIHJlcXVlc3RzLgogICoKLSAqIHZvaWQJKCpyZWNlaXZlX2J1Zikoc3RydWN0IHR0eV9zdHJ1Y3QgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqY3AsCisgKiB1bnNpZ25lZCBpbnQgKCpyZWNlaXZlX2J1Zikoc3RydWN0IHR0eV9zdHJ1Y3QgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqY3AsCiAgKiAJCSAgICAgICBjaGFyICpmcCwgaW50IGNvdW50KTsKICAqCiAgKiAJVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIGxvdy1sZXZlbCB0dHkgZHJpdmVyIHRvIHNlbmQKQEAgLTg0LDcgKzg0LDggQEAKICAqIAlwcm9jZXNzaW5nLiAgPGNwPiBpcyBhIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBvZiBpbnB1dAogICogCWNoYXJhY3RlciByZWNlaXZlZCBieSB0aGUgZGV2aWNlLiAgPGZwPiBpcyBhIHBvaW50ZXIgdG8gYQogICogCXBvaW50ZXIgb2YgZmxhZyBieXRlcyB3aGljaCBpbmRpY2F0ZSB3aGV0aGVyIGEgY2hhcmFjdGVyIHdhcwotICogCXJlY2VpdmVkIHdpdGggYSBwYXJpdHkgZXJyb3IsIGV0Yy4KKyAqIAlyZWNlaXZlZCB3aXRoIGEgcGFyaXR5IGVycm9yLCBldGMuIFJldHVybnMgdGhlIGFtb3VudCBvZiBieXRlcworICogCXJlY2VpdmVkLgogICogCiAgKiB2b2lkCSgqd3JpdGVfd2FrZXVwKShzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKICAqCkBAIC0xNDAsOCArMTQxLDggQEAKIAkvKgogCSAqIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgYXJlIGNhbGxlZCBmcm9tIGJlbG93LgogCSAqLwotCXZvaWQJKCpyZWNlaXZlX2J1Zikoc3RydWN0IHR0eV9zdHJ1Y3QgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqY3AsCi0JCQkgICAgICAgY2hhciAqZnAsIGludCBjb3VudCk7CisJdW5zaWduZWQgaW50ICgqcmVjZWl2ZV9idWYpKHN0cnVjdCB0dHlfc3RydWN0ICosCisJCQljb25zdCB1bnNpZ25lZCBjaGFyICpjcCwgY2hhciAqZnAsIGludCBjb3VudCk7CiAJdm9pZAkoKndyaXRlX3dha2V1cCkoc3RydWN0IHR0eV9zdHJ1Y3QgKik7CiAJdm9pZAkoKmRjZF9jaGFuZ2UpKHN0cnVjdCB0dHlfc3RydWN0ICosIHVuc2lnbmVkIGludCwKIAkJCQlzdHJ1Y3QgcHBzX2V2ZW50X3RpbWUgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi5oIGIvaW5jbHVkZS9saW51eC91c2IuaAppbmRleCA2NWY3OGNhLi43M2M3ZGY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiLmgKQEAgLTgwNiw4ICs4MDYsMTAgQEAKICAqIEByZXN1bWU6IENhbGxlZCB3aGVuIHRoZSBkZXZpY2UgaXMgYmVpbmcgcmVzdW1lZCBieSB0aGUgc3lzdGVtLgogICogQHJlc2V0X3Jlc3VtZTogQ2FsbGVkIHdoZW4gdGhlIHN1c3BlbmRlZCBkZXZpY2UgaGFzIGJlZW4gcmVzZXQgaW5zdGVhZAogICoJb2YgYmVpbmcgcmVzdW1lZC4KLSAqIEBwcmVfcmVzZXQ6IENhbGxlZCBieSB1c2JfcmVzZXRfZGV2aWNlKCkgd2hlbiB0aGUgZGV2aWNlCi0gKglpcyBhYm91dCB0byBiZSByZXNldC4KKyAqIEBwcmVfcmVzZXQ6IENhbGxlZCBieSB1c2JfcmVzZXRfZGV2aWNlKCkgd2hlbiB0aGUgZGV2aWNlIGlzIGFib3V0IHRvIGJlCisgKglyZXNldC4gIFRoaXMgcm91dGluZSBtdXN0IG5vdCByZXR1cm4gdW50aWwgdGhlIGRyaXZlciBoYXMgbm8gYWN0aXZlCisgKglVUkJzIGZvciB0aGUgZGV2aWNlLCBhbmQgbm8gbW9yZSBVUkJzIG1heSBiZSBzdWJtaXR0ZWQgdW50aWwgdGhlCisgKglwb3N0X3Jlc2V0IG1ldGhvZCBpcyBjYWxsZWQuCiAgKiBAcG9zdF9yZXNldDogQ2FsbGVkIGJ5IHVzYl9yZXNldF9kZXZpY2UoKSBhZnRlciB0aGUgZGV2aWNlCiAgKgloYXMgYmVlbiByZXNldAogICogQGlkX3RhYmxlOiBVU0IgZHJpdmVycyB1c2UgSUQgdGFibGUgdG8gc3VwcG9ydCBob3RwbHVnZ2luZy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL2NoOS5oIGIvaW5jbHVkZS9saW51eC91c2IvY2g5LmgKaW5kZXggYjcyZjMwNS4uMGZkM2ZiZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvY2g5LmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvY2g5LmgKQEAgLTU3OSw3ICs1NzksNyBAQAogCiAJX191OCAgYk1heEJ1cnN0OwogCV9fdTggIGJtQXR0cmlidXRlczsKLQlfX3UxNiB3Qnl0ZXNQZXJJbnRlcnZhbDsKKwlfX2xlMTYgd0J5dGVzUGVySW50ZXJ2YWw7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2RlZmluZSBVU0JfRFRfU1NfRVBfQ09NUF9TSVpFCQk2CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9jb21wb3NpdGUuaCBiL2luY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oCmluZGV4IDg4MmEwODQuLmI3OGNiYTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oCkBAIC0zNyw2ICszNywxNCBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYi9jaDkuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvZ2FkZ2V0Lmg+CiAKKy8qCisgKiBVU0IgZnVuY3Rpb24gZHJpdmVycyBzaG91bGQgcmV0dXJuIFVTQl9HQURHRVRfREVMQVlFRF9TVEFUVVMgaWYgdGhleQorICogd2lzaCB0byBkZWxheSB0aGUgZGF0YS9zdGF0dXMgc3RhZ2VzIG9mIHRoZSBjb250cm9sIHRyYW5zZmVyIHRpbGwgdGhleQorICogYXJlIHJlYWR5LiBUaGUgY29udHJvbCB0cmFuc2ZlciB3aWxsIHRoZW4gYmUga2VwdCBmcm9tIGNvbXBsZXRpbmcgdGlsbAorICogYWxsIHRoZSBmdW5jdGlvbiBkcml2ZXJzIHRoYXQgcmVxdWVzdGVkIGZvciBVU0JfR0FER0VUX0RFTEFZRURfU1RBVVMKKyAqIGludm9rZSB1c2JfY29tcG9zaXRlX3NldHVwX2NvbnRpbnVlKCkuCisgKi8KKyNkZWZpbmUgVVNCX0dBREdFVF9ERUxBWUVEX1NUQVRVUyAgICAgICAweDdmZmYJLyogSW1wb3NzaWJseSBsYXJnZSB2YWx1ZSAqLwogCiBzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb247CiAKQEAgLTI4NSw2ICsyOTMsNyBAQAogZXh0ZXJuIGludCB1c2JfY29tcG9zaXRlX3Byb2JlKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RyaXZlciAqZHJpdmVyLAogCQkJICAgICAgIGludCAoKmJpbmQpKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikpOwogZXh0ZXJuIHZvaWQgdXNiX2NvbXBvc2l0ZV91bnJlZ2lzdGVyKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RyaXZlciAqZHJpdmVyKTsKK2V4dGVybiB2b2lkIHVzYl9jb21wb3NpdGVfc2V0dXBfY29udGludWUoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KTsKIAogCiAvKioKQEAgLTM0Miw3ICszNTEsMTIgQEAKIAkgKi8KIAl1bnNpZ25lZAkJCWRlYWN0aXZhdGlvbnM7CiAKLQkvKiBwcm90ZWN0cyBhdCBsZWFzdCBkZWFjdGl2YXRpb24gY291bnQgKi8KKwkvKiB0aGUgY29tcG9zaXRlIGRyaXZlciB3b24ndCBjb21wbGV0ZSB0aGUgY29udHJvbCB0cmFuc2ZlcidzCisJICogZGF0YS9zdGF0dXMgc3RhZ2VzIHRpbGwgZGVsYXllZF9zdGF0dXMgaXMgemVyby4KKwkgKi8KKwlpbnQJCQkJZGVsYXllZF9zdGF0dXM7CisKKwkvKiBwcm90ZWN0cyBkZWFjdGl2YXRpb25zIGFuZCBkZWxheWVkX3N0YXR1cyBjb3VudHMqLwogCXNwaW5sb2NrX3QJCQlsb2NrOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvZWhjaV9kZWYuaCBiL2luY2x1ZGUvbGludXgvdXNiL2VoY2lfZGVmLmgKaW5kZXggZTQ5ZGZkNC4uN2NjOTVlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvZWhjaV9kZWYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9laGNpX2RlZi5oCkBAIC0yNSwxMCArMjUsMTUgQEAKIHN0cnVjdCBlaGNpX2NhcHMgewogCS8qIHRoZXNlIGZpZWxkcyBhcmUgc3BlY2lmaWVkIGFzIDggYW5kIDE2IGJpdCByZWdpc3RlcnMsCiAJICogYnV0IHNvbWUgaG9zdHMgY2FuJ3QgcGVyZm9ybSA4IG9yIDE2IGJpdCBQQ0kgYWNjZXNzZXMuCisJICogc29tZSBob3N0cyB0cmVhdCBjYXBsZW5ndGggYW5kIGhjaXZlcnNpb24gYXMgcGFydHMgb2YgYSAzMi1iaXQKKwkgKiByZWdpc3Rlciwgb3RoZXJzIHRyZWF0IHRoZW0gYXMgdHdvIHNlcGFyYXRlIHJlZ2lzdGVycywgdGhpcworCSAqIGFmZmVjdHMgdGhlIG1lbW9yeSBtYXAgZm9yIGJpZyBlbmRpYW4gY29udHJvbGxlcnMuCiAJICovCiAJdTMyCQloY19jYXBiYXNlOwotI2RlZmluZSBIQ19MRU5HVEgocCkJCSgoKHApPj4wMCkmMHgwMGZmKQkvKiBiaXRzIDc6MCAqLwotI2RlZmluZSBIQ19WRVJTSU9OKHApCQkoKChwKT4+MTYpJjB4ZmZmZikJLyogYml0cyAzMToxNiAqLworI2RlZmluZSBIQ19MRU5HVEgoZWhjaSwgcCkJKDB4MDBmZiYoKHApID4+IC8qIGJpdHMgNzowIC8gb2Zmc2V0IDAwaCAqLyBcCisJCQkJKGVoY2lfYmlnX2VuZGlhbl9jYXBiYXNlKGVoY2kpID8gMjQgOiAwKSkpCisjZGVmaW5lIEhDX1ZFUlNJT04oZWhjaSwgcCkJKDB4ZmZmZiYoKHApID4+IC8qIGJpdHMgMzE6MTYgLyBvZmZzZXQgMDJoICovIFwKKwkJCQkoZWhjaV9iaWdfZW5kaWFuX2NhcGJhc2UoZWhjaSkgPyAwIDogMTYpKSkKIAl1MzIJCWhjc19wYXJhbXM7ICAgICAvKiBIQ1NQQVJBTVMgLSBvZmZzZXQgMHg0ICovCiAjZGVmaW5lIEhDU19ERUJVR19QT1JUKHApCSgoKHApPj4yMCkmMHhmKQkvKiBiaXRzIDIzOjIwLCBkZWJ1ZyBwb3J0PyAqLwogI2RlZmluZSBIQ1NfSU5ESUNBVE9SKHApCSgocCkmKDEgPDwgMTYpKQkvKiB0cnVlOiBoYXMgcG9ydCBpbmRpY2F0b3JzICovCkBAIC01Miw3ICs1Nyw3IEBACiAjZGVmaW5lIEhDQ19QR01fRlJBTUVMSVNUTEVOKHApICgocCkmKDEgPDwgMSkpICAvKiB0cnVlOiBwZXJpb2RpY19zaXplIGNoYW5nZXMqLwogI2RlZmluZSBIQ0NfNjRCSVRfQUREUihwKSAgICAgICAoKHApJigxKSkgICAgICAgLyogdHJ1ZTogY2FuIHVzZSA2NC1iaXQgYWRkciAqLwogCXU4CQlwb3J0cm91dGVbOF07CSAvKiBuaWJibGVzIGZvciByb3V0aW5nIC0gb2Zmc2V0IDB4QyAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9OwogCiAKIC8qIFNlY3Rpb24gMi4zIEhvc3QgQ29udHJvbGxlciBPcGVyYXRpb25hbCBSZWdpc3RlcnMgKi8KQEAgLTE1MCw3ICsxNTUsNyBAQAogI2RlZmluZSBQT1JUX0NTQwkoMTw8MSkJCS8qIGNvbm5lY3Qgc3RhdHVzIGNoYW5nZSAqLwogI2RlZmluZSBQT1JUX0NPTk5FQ1QJKDE8PDApCQkvKiBkZXZpY2UgY29ubmVjdGVkICovCiAjZGVmaW5lIFBPUlRfUldDX0JJVFMgICAoUE9SVF9DU0MgfCBQT1JUX1BFQyB8IFBPUlRfT0NDKQotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9OwogCiAjZGVmaW5lIFVTQk1PREUJCTB4NjgJCS8qIFVTQiBEZXZpY2UgbW9kZSAqLwogI2RlZmluZSBVU0JNT0RFX1NESVMJKDE8PDMpCQkvKiBTdHJlYW0gZGlzYWJsZSAqLwpAQCAtMTk0LDcgKzE5OSw3IEBACiAJdTMyCWRhdGE0NzsKIAl1MzIJYWRkcmVzczsKICNkZWZpbmUgREJHUF9FUEFERFIoZGV2LCBlcCkJKCgoZGV2KTw8OCl8KGVwKSkKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfTsKIAogI2lmZGVmIENPTkZJR19FQVJMWV9QUklOVEtfREJHUAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL2dhZGdldC5oIGIvaW5jbHVkZS9saW51eC91c2IvZ2FkZ2V0LmgKaW5kZXggZTUzODE3Mi4uZGQxNTcxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvZ2FkZ2V0LmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvZ2FkZ2V0LmgKQEAgLTg5MCw4ICs4OTAsOCBAQAogLyogdXRpbGl0eSB3cmFwcGluZyBhIHNpbXBsZSBlbmRwb2ludCBzZWxlY3Rpb24gcG9saWN5ICovCiAKIGV4dGVybiBzdHJ1Y3QgdXNiX2VwICp1c2JfZXBfYXV0b2NvbmZpZyhzdHJ1Y3QgdXNiX2dhZGdldCAqLAotCQkJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICopIF9fZGV2aW5pdDsKKwkJCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqKTsKIAotZXh0ZXJuIHZvaWQgdXNiX2VwX2F1dG9jb25maWdfcmVzZXQoc3RydWN0IHVzYl9nYWRnZXQgKikgX19kZXZpbml0OworZXh0ZXJuIHZvaWQgdXNiX2VwX2F1dG9jb25maWdfcmVzZXQoc3RydWN0IHVzYl9nYWRnZXQgKik7CiAKICNlbmRpZiAvKiBfX0xJTlVYX1VTQl9HQURHRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvbXNtX2hzdXNiLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9tc21faHN1c2IuaAppbmRleCAzNjU3NDAzLi4wMDMxMWZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9tc21faHN1c2IuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9tc21faHN1c2IuaApAQCAtMiw3ICsyLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlLCBJbmMuCiAgKiBBdXRob3I6IEJyaWFuIFN3ZXRsYW5kIDxzd2V0bGFuZEBnb29nbGUuY29tPgotICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTEsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCkBAIC01NCw2ICs1NCw2NCBAQAogfTsKIAogLyoqCisgKiBQSFkgdXNlZCBpbgorICoKKyAqIElOVkFMSURfUEhZCQkJVW5zdXBwb3J0ZWQgUEhZCisgKiBDSV80NU5NX0lOVEVHUkFURURfUEhZCUNoaXBpZGVhIDQ1bm0gaW50ZWdyYXRlZCBQSFkKKyAqIFNOUFNfMjhOTV9JTlRFR1JBVEVEX1BIWQlTeW5vcHNpcyAyOG5tIGludGVncmF0ZWQgUEhZCisgKgorICovCitlbnVtIG1zbV91c2JfcGh5X3R5cGUgeworCUlOVkFMSURfUEhZID0gMCwKKwlDSV80NU5NX0lOVEVHUkFURURfUEhZLAorCVNOUFNfMjhOTV9JTlRFR1JBVEVEX1BIWSwKK307CisKKyNkZWZpbmUgSURFVl9DSEdfTUFYCTE1MDAKKyNkZWZpbmUgSVVOSVQJCTEwMAorCisvKioKKyAqIERpZmZlcmVudCBzdGF0ZXMgaW52b2x2ZWQgaW4gVVNCIGNoYXJnZXIgZGV0ZWN0aW9uLgorICoKKyAqIFVTQl9DSEdfU1RBVEVfVU5ERUZJTkVECVVTQiBjaGFyZ2VyIGlzIG5vdCBjb25uZWN0ZWQgb3IgZGV0ZWN0aW9uCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MgaXMgbm90IHlldCBzdGFydGVkLgorICogVVNCX0NIR19TVEFURV9XQUlUX0ZPUl9EQ0QJV2FpdGluZyBmb3IgRGF0YSBwaW5zIGNvbnRhY3QuCisgKiBVU0JfQ0hHX1NUQVRFX0RDRF9ET05FCURhdGEgcGluIGNvbnRhY3QgaXMgZGV0ZWN0ZWQuCisgKiBVU0JfQ0hHX1NUQVRFX1BSSU1BUllfRE9ORQlQcmltYXJ5IGRldGVjdGlvbiBpcyBjb21wbGV0ZWQgKERldGVjdHMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV0d2VlbiBTRFAgYW5kIERDUC9DRFApLgorICogVVNCX0NIR19TVEFURV9TRUNPTkRBUllfRE9ORQlTZWNvbmRhcnkgZGV0ZWN0aW9uIGlzIGNvbXBsZXRlZCAoRGV0ZWN0cworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXR3ZWVuIERDUCBhbmQgQ0RQKS4KKyAqIFVTQl9DSEdfU1RBVEVfREVURUNURUQJVVNCIGNoYXJnZXIgdHlwZSBpcyBkZXRlcm1pbmVkLgorICoKKyAqLworZW51bSB1c2JfY2hnX3N0YXRlIHsKKwlVU0JfQ0hHX1NUQVRFX1VOREVGSU5FRCA9IDAsCisJVVNCX0NIR19TVEFURV9XQUlUX0ZPUl9EQ0QsCisJVVNCX0NIR19TVEFURV9EQ0RfRE9ORSwKKwlVU0JfQ0hHX1NUQVRFX1BSSU1BUllfRE9ORSwKKwlVU0JfQ0hHX1NUQVRFX1NFQ09OREFSWV9ET05FLAorCVVTQl9DSEdfU1RBVEVfREVURUNURUQsCit9OworCisvKioKKyAqIFVTQiBjaGFyZ2VyIHR5cGVzCisgKgorICogVVNCX0lOVkFMSURfQ0hBUkdFUglJbnZhbGlkIFVTQiBjaGFyZ2VyLgorICogVVNCX1NEUF9DSEFSR0VSCVN0YW5kYXJkIGRvd25zdHJlYW0gcG9ydC4gUmVmZXJzIHRvIGEgZG93bnN0cmVhbSBwb3J0CisgKiAgICAgICAgICAgICAgICAgICAgICBvbiBVU0IyLjAgY29tcGxpYW50IGhvc3QvaHViLgorICogVVNCX0RDUF9DSEFSR0VSCURlZGljYXRlZCBjaGFyZ2VyIHBvcnQgKEFDIGNoYXJnZXIvIFdhbGwgY2hhcmdlcikuCisgKiBVU0JfQ0RQX0NIQVJHRVIJQ2hhcmdpbmcgZG93bnN0cmVhbSBwb3J0LiBFbnVtZXJhdGlvbiBjYW4gaGFwcGVuIGFuZAorICogICAgICAgICAgICAgICAgICAgICAgSURFVl9DSEdfTUFYIGNhbiBiZSBkcmF3biBpcnJlc3BlY3RpdmUgb2YgVVNCIHN0YXRlLgorICoKKyAqLworZW51bSB1c2JfY2hnX3R5cGUgeworCVVTQl9JTlZBTElEX0NIQVJHRVIgPSAwLAorCVVTQl9TRFBfQ0hBUkdFUiwKKwlVU0JfRENQX0NIQVJHRVIsCisJVVNCX0NEUF9DSEFSR0VSLAorfTsKKworLyoqCiAgKiBzdHJ1Y3QgbXNtX290Z19wbGF0Zm9ybV9kYXRhIC0gcGxhdGZvcm0gZGV2aWNlIGRhdGEKICAqICAgICAgICAgICAgICBmb3IgbXNtX290ZyBkcml2ZXIuCiAgKiBAcGh5X2luaXRfc2VxOiBQSFkgY29uZmlndXJhdGlvbiBzZXF1ZW5jZS4gdmFsLCByZWcgcGFpcnMKQEAgLTY0LDcgKzEyMiw4IEBACiAgKiBAb3RnX2NvbnRyb2w6IE9URyBzd2l0Y2ggY29udHJvbGxlZCBieSB1c2VyL0lkIHBpbgogICogQGRlZmF1bHRfbW9kZTogRGVmYXVsdCBvcGVyYXRpb25hbCBtb2RlLiBBcHBsaWNhYmxlIG9ubHkgaWYKICAqICAgICAgICAgICAgICBPVEcgc3dpdGNoIGlzIGNvbnRyb2xsZXIgYnkgdXNlci4KLSAqCisgKiBAcGNsa19zcmNfbmFtZTogcGNsayBpcyBkZXJpdmVkIGZyb20gZWJpMV91c2JfY2xrIGluIGNhc2Ugb2YgN3gyNyBhbmQgOGsKKyAqICAgICAgICAgICAgICBkZmFiX3VzYl9oc19jbGsgaW4gY2FzZSBvZiA4NjYwIGFuZCA4OTYwLgogICovCiBzdHJ1Y3QgbXNtX290Z19wbGF0Zm9ybV9kYXRhIHsKIAlpbnQgKnBoeV9pbml0X3NlcTsKQEAgLTczLDcgKzEzMiw5IEBACiAJZW51bSB1c2JfbW9kZV90eXBlIG1vZGU7CiAJZW51bSBvdGdfY29udHJvbF90eXBlIG90Z19jb250cm9sOwogCWVudW0gdXNiX21vZGVfdHlwZSBkZWZhdWx0X21vZGU7CisJZW51bSBtc21fdXNiX3BoeV90eXBlIHBoeV90eXBlOwogCXZvaWQgKCpzZXR1cF9ncGlvKShlbnVtIHVzYl9vdGdfc3RhdGUgc3RhdGUpOworCWNoYXIgKnBjbGtfc3JjX25hbWU7CiB9OwogCiAvKioKQEAgLTgzLDYgKzE0NCw3IEBACiAgKiBAaXJxOiBJUlEgbnVtYmVyIGFzc2lnbmVkIGZvciBIU1VTQiBjb250cm9sbGVyLgogICogQGNsazogY2xvY2sgc3RydWN0IG9mIHVzYl9oc19jbGsuCiAgKiBAcGNsazogY2xvY2sgc3RydWN0IG9mIHVzYl9oc19wY2xrLgorICogQHBjbGtfc3JjOiBwY2xrIHNvdXJjZSBmb3Igdm90aW5nLgogICogQHBoeV9yZXNldF9jbGs6IGNsb2NrIHN0cnVjdCBvZiB1c2JfcGh5X2Nsay4KICAqIEBjb3JlX2NsazogY2xvY2sgc3RydWN0IG9mIHVzYl9oc19jb3JlX2Nsay4KICAqIEByZWdzOiBpb3JlbWFwcGVkIHJlZ2lzdGVyIGJhc2UgYWRkcmVzcy4KQEAgLTkwLDcgKzE1MiwxMiBAQAogICogQHNtX3dvcms6IE9URyBzdGF0ZSBtYWNoaW5lIHdvcmsuCiAgKiBAaW5fbHBtOiBpbmRpY2F0ZXMgbG93IHBvd2VyIG1vZGUgKExQTSkgc3RhdGUuCiAgKiBAYXN5bmNfaW50OiBBc3luYyBpbnRlcnJ1cHQgYXJyaXZlZC4KLSAqCisgKiBAY3VyX3Bvd2VyOiBUaGUgYW1vdW50IG9mIG1BIGF2YWlsYWJsZSBmcm9tIGRvd25zdHJlYW0gcG9ydC4KKyAqIEBjaGdfd29yazogQ2hhcmdlciBkZXRlY3Rpb24gd29yay4KKyAqIEBjaGdfc3RhdGU6IFRoZSBzdGF0ZSBvZiBjaGFyZ2VyIGRldGVjdGlvbiBwcm9jZXNzLgorICogQGNoZ190eXBlOiBUaGUgdHlwZSBvZiBjaGFyZ2VyIGF0dGFjaGVkLgorICogQGRjZF9yZXRpcmVzOiBUaGUgcmV0cnkgY291bnQgdXNlZCB0byB0cmFjayBEYXRhIGNvbnRhY3QKKyAqICAgICAgICAgICAgICAgZGV0ZWN0aW9uIHByb2Nlc3MuCiAgKi8KIHN0cnVjdCBtc21fb3RnIHsKIAlzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyIG90ZzsKQEAgLTk4LDYgKzE2NSw3IEBACiAJaW50IGlycTsKIAlzdHJ1Y3QgY2xrICpjbGs7CiAJc3RydWN0IGNsayAqcGNsazsKKwlzdHJ1Y3QgY2xrICpwY2xrX3NyYzsKIAlzdHJ1Y3QgY2xrICpwaHlfcmVzZXRfY2xrOwogCXN0cnVjdCBjbGsgKmNvcmVfY2xrOwogCXZvaWQgX19pb21lbSAqcmVnczsKQEAgLTEwNyw2ICsxNzUsMTEgQEAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc21fd29yazsKIAlhdG9taWNfdCBpbl9scG07CiAJaW50IGFzeW5jX2ludDsKKwl1bnNpZ25lZCBjdXJfcG93ZXI7CisJc3RydWN0IGRlbGF5ZWRfd29yayBjaGdfd29yazsKKwllbnVtIHVzYl9jaGdfc3RhdGUgY2hnX3N0YXRlOworCWVudW0gdXNiX2NoZ190eXBlIGNoZ190eXBlOworCXU4IGRjZF9yZXRyaWVzOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9tc21faHN1c2JfaHcuaCBiL2luY2x1ZGUvbGludXgvdXNiL21zbV9oc3VzYl9ody5oCmluZGV4IDdkMWJhYmIuLjZlOTdhMmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL21zbV9oc3VzYl9ody5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL21zbV9oc3VzYl9ody5oCkBAIC0yNCw2ICsyNCw3IEBACiAjZGVmaW5lIFVTQl9QT1JUU0MgICAgICAgICAgIChNU01fVVNCX0JBU0UgKyAweDAxODQpCiAjZGVmaW5lIFVTQl9PVEdTQyAgICAgICAgICAgIChNU01fVVNCX0JBU0UgKyAweDAxQTQpCiAjZGVmaW5lIFVTQl9VU0JNT0RFICAgICAgICAgIChNU01fVVNCX0JBU0UgKyAweDAxQTgpCisjZGVmaW5lIFVTQl9QSFlfQ1RSTCAgICAgICAgIChNU01fVVNCX0JBU0UgKyAweDAyNDApCiAKICNkZWZpbmUgVVNCQ01EX1JFU0VUICAgMgogI2RlZmluZSBVU0JfVVNCSU5UUiAgICAgICAgICAoTVNNX1VTQl9CQVNFICsgMHgwMTQ4KQpAQCAtNDIsNiArNDMsNyBAQAogCiAjZGVmaW5lIEFTWU5DX0lOVFJfQ1RSTCAgICAgICAgICgxIDw8IDI5KSAvKiBFbmFibGUgYXN5bmMgaW50ZXJydXB0ICovCiAjZGVmaW5lIFVMUElfU1RQX0NUUkwgICAgICAgICAgICgxIDw8IDMwKSAvKiBCbG9jayBjb21tdW5pY2F0aW9uIHdpdGggUEhZICovCisjZGVmaW5lIFBIWV9SRVRFTiAgICAgICAgICAgICAgICgxIDw8IDEpIC8qIFBIWSByZXRlbnRpb24gZW5hYmxlL2Rpc2FibGUgKi8KIAogLyogT1RHIGRlZmluaXRpb25zICovCiAjZGVmaW5lIE9UR1NDX0lOVFNUU19NQVNLCSgweDdmIDw8IDE2KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2Ivb3RnLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9vdGcuaAppbmRleCA2ZTQwNzE4Li5kODdmNDRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9vdGcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9vdGcuaApAQCAtMTY4LDYgKzE2OCw3IEBACiAjaWZkZWYgQ09ORklHX1VTQl9PVEdfVVRJTFMKIGV4dGVybiBzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGdfZ2V0X3RyYW5zY2VpdmVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgb3RnX3B1dF90cmFuc2NlaXZlcihzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICopOworZXh0ZXJuIGNvbnN0IGNoYXIgKm90Z19zdGF0ZV9zdHJpbmcoZW51bSB1c2Jfb3RnX3N0YXRlIHN0YXRlKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90Z19nZXRfdHJhbnNjZWl2ZXIodm9pZCkKIHsKQEAgLTE3Nyw2ICsxNzgsMTEgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBvdGdfcHV0X3RyYW5zY2VpdmVyKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKngpCiB7CiB9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqb3RnX3N0YXRlX3N0cmluZyhlbnVtIHVzYl9vdGdfc3RhdGUgc3RhdGUpCit7CisJcmV0dXJuIE5VTEw7Cit9CiAjZW5kaWYKIAogLyogQ29udGV4dDogY2FuIHNsZWVwICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9yZW5lc2FzX3VzYmhzLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9yZW5lc2FzX3VzYmhzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E3ZjFkOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3JlbmVzYXNfdXNiaHMuaApAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIFJlbmVzYXMgVVNCCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBLdW5pbm9yaSBNb3JpbW90byA8a3VuaW5vcmkubW9yaW1vdG8uZ3hAcmVuZXNhcy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisjaWZuZGVmIFJFTkVTQVNfVVNCX0gKKyNkZWZpbmUgUkVORVNBU19VU0JfSAorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9jaDkuaD4KKworLyoKKyAqIG1vZHVsZSB0eXBlCisgKgorICogaXQgd2lsbCBiZSByZXR1cm4gdmFsdWUgZnJvbSBnZXRfaWQKKyAqLworZW51bSB7CisJVVNCSFNfSE9TVCA9IDAsCisJVVNCSFNfR0FER0VULAorCVVTQkhTX01BWCwKK307CisKKy8qCisgKiBjYWxsYmFjayBmdW5jdGlvbnMgdGFibGUgZm9yIGRyaXZlcgorICoKKyAqIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGZyb20gcGxhdGZvcm0gZm9yIGRyaXZlci4KKyAqIENhbGxiYWNrIGZ1bmN0aW9uJ3MgcG9pbnRlciB3aWxsIGJlIHNldCBiZWZvcmUKKyAqIHJlbmVzYXNfdXNiaHNfcGxhdGZvcm1fY2FsbGJhY2sgOjogaGFyZHdhcmVfaW5pdCB3YXMgY2FsbGVkCisgKi8KK3N0cnVjdCByZW5lc2FzX3VzYmhzX2RyaXZlcl9jYWxsYmFjayB7CisJaW50ICgqbm90aWZ5X2hvdHBsdWcpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOworfTsKKworLyoKKyAqIGNhbGxiYWNrIGZ1bmN0aW9ucyBmb3IgcGxhdGZvcm0KKyAqCisgKiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBmcm9tIGRyaXZlciBmb3IgcGxhdGZvcm0KKyAqLworc3RydWN0IHJlbmVzYXNfdXNiaHNfcGxhdGZvcm1fY2FsbGJhY2sgeworCisJLyoKKwkgKiBvcHRpb246CisJICoKKwkgKiBIYXJkd2FyZSBpbml0IGZ1bmN0aW9uIGZvciBwbGF0Zm9ybS4KKwkgKiBpdCBpcyBjYWxsZWQgd2hlbiBkcml2ZXIgd2FzIHByb2JlZC4KKwkgKi8KKwlpbnQgKCpoYXJkd2FyZV9pbml0KShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKKworCS8qCisJICogb3B0aW9uOgorCSAqCisJICogSGFyZHdhcmUgZXhpdCBmdW5jdGlvbiBmb3IgcGxhdGZvcm0uCisJICogaXQgaXMgY2FsbGVkIHdoZW4gZHJpdmVyIHdhcyByZW1vdmVkCisJICovCisJdm9pZCAoKmhhcmR3YXJlX2V4aXQpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOworCisJLyoKKwkgKiBvcHRpb246CisJICoKKwkgKiBQaHkgcmVzZXQgZm9yIHBsYXRmb3JtCisJICovCisJdm9pZCAoKnBoeV9yZXNldCkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CisKKwkvKgorCSAqIGdldCBVU0IgSUQgZnVuY3Rpb24KKwkgKiAgLSBVU0JIU19IT1NUCisJICogIC0gVVNCSFNfR0FER0VUCisJICovCisJaW50ICgqZ2V0X2lkKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKKworCS8qCisJICogZ2V0IFZCVVMgc3RhdHVzIGZ1bmN0aW9uLgorCSAqLworCWludCAoKmdldF92YnVzKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKK307CisKKy8qCisgKiBwYXJhbWV0ZXJzIGZvciByZW5lc2FzIHVzYmhzCisgKgorICogc29tZSByZWdpc3RlciBuZWVkcyBVU0IgY2hpcCBzcGVjaWZpYyBwYXJhbWV0ZXJzLgorICogVGhpcyBzdHJ1Y3Qgc2hvdyBpdCB0byBkcml2ZXIKKyAqLworc3RydWN0IHJlbmVzYXNfdXNiaHNfZHJpdmVyX3BhcmFtIHsKKwkvKgorCSAqIHBpcGUgc2V0dGluZ3MKKwkgKi8KKwl1MzIgKnBpcGVfdHlwZTsgLyogYXJyYXkgb2YgVVNCX0VORFBPSU5UX1hGRVJfeHh4IChmcm9tIGVwMCkgKi8KKwlpbnQgcGlwZV9zaXplOyAvKiBwaXBlX3R5cGUgYXJyYXkgc2l6ZSAqLworCisJLyoKKwkgKiBvcHRpb246CisJICoKKwkgKiBmb3IgQlVTV0FJVCA6OiBCV0FJVAorCSAqICovCisJaW50IGJ1c3dhaXRfYndhaXQ7CisKKwkvKgorCSAqIG9wdGlvbjoKKwkgKgorCSAqIGRlbGF5IHRpbWUgZnJvbSBub3RpZnlfaG90cGx1ZyBjYWxsYmFjaworCSAqLworCWludCBkZXRlY3Rpb25fZGVsYXk7Cit9OworCisvKgorICogb3B0aW9uOgorICoKKyAqIHBsYXRmb3JtIGluZm9ybWF0aW9uIGZvciByZW5lc2FzX3VzYmhzIGRyaXZlci4KKyAqLworc3RydWN0IHJlbmVzYXNfdXNiaHNfcGxhdGZvcm1faW5mbyB7CisJLyoKKwkgKiBvcHRpb246CisJICoKKwkgKiBwbGF0Zm9ybSBzZXQgdGhlc2UgZnVuY3Rpb25zIGJlZm9yZQorCSAqIGNhbGwgcGxhdGZvcm1fYWRkX2RldmljZXMgaWYgbmVlZGVkCisJICovCisJc3RydWN0IHJlbmVzYXNfdXNiaHNfcGxhdGZvcm1fY2FsbGJhY2sJcGxhdGZvcm1fY2FsbGJhY2s7CisKKwkvKgorCSAqIGRyaXZlciBzZXQgdGhlc2UgY2FsbGJhY2sgZnVuY3Rpb25zIHBvaW50ZXIuCisJICogcGxhdGZvcm0gY2FuIHVzZSBpdCBvbiBjYWxsYmFjayBmdW5jdGlvbnMKKwkgKi8KKwlzdHJ1Y3QgcmVuZXNhc191c2Joc19kcml2ZXJfY2FsbGJhY2sJZHJpdmVyX2NhbGxiYWNrOworCisJLyoKKwkgKiBvcHRpb246CisJICoKKwkgKiBkcml2ZXIgdXNlIHRoZXNlIHBhcmFtIGZvciBzb21lIHJlZ2lzdGVyCisJICovCisJc3RydWN0IHJlbmVzYXNfdXNiaHNfZHJpdmVyX3BhcmFtCWRyaXZlcl9wYXJhbTsKK307CisKKy8qCisgKiBtYWNybyBmb3IgcGxhdGZvcm0KKyAqLworI2RlZmluZSByZW5lc2FzX3VzYmhzX2dldF9pbmZvKHBkZXYpXAorCSgoc3RydWN0IHJlbmVzYXNfdXNiaHNfcGxhdGZvcm1faW5mbyAqKShwZGV2KS0+ZGV2LnBsYXRmb3JtX2RhdGEpCisKKyNkZWZpbmUgcmVuZXNhc191c2Joc19jYWxsX25vdGlmeV9ob3RwbHVnKHBkZXYpCQkJCVwKKwkoewkJCQkJCQkJXAorCQlzdHJ1Y3QgcmVuZXNhc191c2Joc19kcml2ZXJfY2FsbGJhY2sgKmRjOwkJXAorCQlkYyA9ICYocmVuZXNhc191c2Joc19nZXRfaW5mbyhwZGV2KS0+ZHJpdmVyX2NhbGxiYWNrKTsJXAorCQlpZiAoZGMgJiYgZGMtPm5vdGlmeV9ob3RwbHVnKQkJCQlcCisJCQlkYy0+bm90aWZ5X2hvdHBsdWcocGRldik7CQkJXAorCX0pCisjZW5kaWYgLyogUkVORVNBU19VU0JfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2Ivcm5kaXNfaG9zdC5oIGIvaW5jbHVkZS9saW51eC91c2Ivcm5kaXNfaG9zdC5oCmluZGV4IDA1ZWY1MjguLjg4ZmNlYjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL3JuZGlzX2hvc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9ybmRpc19ob3N0LmgKQEAgLTI1Niw2ICsyNTYsOCBAQAogI2RlZmluZSBGTEFHX1JORElTX1BIWU1fTk9UX1dJUkVMRVNTCTB4MDAwMQogI2RlZmluZSBGTEFHX1JORElTX1BIWU1fV0lSRUxFU1MJMHgwMDAyCiAKKy8qIEZsYWdzIGZvciBkcml2ZXJfaW5mbzo6ZGF0YSAqLworI2RlZmluZSBSTkRJU19EUklWRVJfREFUQV9QT0xMX1NUQVRVUwkxCS8qIHBvbGwgc3RhdHVzIGJlZm9yZSBjb250cm9sICovCiAKIGV4dGVybiB2b2lkIHJuZGlzX3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYik7CiBleHRlcm4gaW50CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dsMTJ4eC5oIGIvaW5jbHVkZS9saW51eC93bDEyeHguaAppbmRleCBiZWJiOGVmLi40YjY5NzM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3dsMTJ4eC5oCisrKyBiL2luY2x1ZGUvbGludXgvd2wxMnh4LmgKQEAgLTI0LDEyICsyNCwyNiBAQAogI2lmbmRlZiBfTElOVVhfV0wxMlhYX0gKICNkZWZpbmUgX0xJTlVYX1dMMTJYWF9ICiAKLS8qIFRoZSBib2FyZCByZWZlcmVuY2UgY2xvY2sgdmFsdWVzICovCisvKiBSZWZlcmVuY2UgY2xvY2sgdmFsdWVzICovCiBlbnVtIHsKLQlXTDEyWFhfUkVGQ0xPQ0tfMTkgPSAwLAkvKiAxOS4yIE1IeiAqLwotCVdMMTJYWF9SRUZDTE9DS18yNiA9IDEsCS8qIDI2IE1IeiAqLwotCVdMMTJYWF9SRUZDTE9DS18zOCA9IDIsCS8qIDM4LjQgTUh6ICovCi0JV0wxMlhYX1JFRkNMT0NLXzU0ID0gMywJLyogNTQgTUh6ICovCisJV0wxMlhYX1JFRkNMT0NLXzE5CT0gMCwgLyogMTkuMiBNSHogKi8KKwlXTDEyWFhfUkVGQ0xPQ0tfMjYJPSAxLCAvKiAyNiBNSHogKi8KKwlXTDEyWFhfUkVGQ0xPQ0tfMzgJPSAyLCAvKiAzOC40IE1IeiAqLworCVdMMTJYWF9SRUZDTE9DS181Mgk9IDMsIC8qIDUyIE1IeiAqLworCVdMMTJYWF9SRUZDTE9DS18zOF9YVEFMID0gNCwgLyogMzguNCBNSHosIFhUQUwgKi8KKwlXTDEyWFhfUkVGQ0xPQ0tfMjZfWFRBTCA9IDUsIC8qIDI2IE1IeiwgWFRBTCAqLworfTsKKworLyogVENYTyBjbG9jayB2YWx1ZXMgKi8KK2VudW0geworCVdMMTJYWF9UQ1hPQ0xPQ0tfMTlfMgk9IDAsIC8qIDE5LjJNSHogKi8KKwlXTDEyWFhfVENYT0NMT0NLXzI2CT0gMSwgLyogMjYgTUh6ICovCisJV0wxMlhYX1RDWE9DTE9DS18zOF80CT0gMiwgLyogMzguNE1IeiAqLworCVdMMTJYWF9UQ1hPQ0xPQ0tfNTIJPSAzLCAvKiA1MiBNSHogKi8KKwlXTDEyWFhfVENYT0NMT0NLXzE2XzM2OAk9IDQsIC8qIDE2LjM2OCBNSHogKi8KKwlXTDEyWFhfVENYT0NMT0NLXzMyXzczNgk9IDUsIC8qIDMyLjczNiBNSHogKi8KKwlXTDEyWFhfVENYT0NMT0NLXzE2XzgJPSA2LCAvKiAxNi44IE1IeiAqLworCVdMMTJYWF9UQ1hPQ0xPQ0tfMzNfNgk9IDcsIC8qIDMzLjYgTUh6ICovCiB9OwogCiBzdHJ1Y3Qgd2wxMnh4X3BsYXRmb3JtX2RhdGEgewpAQCAtMzgsOCArNTIsMTMgQEAKIAlpbnQgaXJxOwogCWJvb2wgdXNlX2VlcHJvbTsKIAlpbnQgYm9hcmRfcmVmX2Nsb2NrOworCWludCBib2FyZF90Y3hvX2Nsb2NrOworCXVuc2lnbmVkIGxvbmcgcGxhdGZvcm1fcXVpcmtzOwogfTsKIAorLyogUGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCBsZXZlbCB0cmlnZ2VyIGludGVycnVwdHMgKi8KKyNkZWZpbmUgV0wxMlhYX1BMQVRGT1JNX1FVSVJLX0VER0VfSVJRCUJJVCgwKQorCiAjaWZkZWYgQ09ORklHX1dMMTJYWF9QTEFURk9STV9EQVRBCiAKIGludCB3bDEyeHhfc2V0X3BsYXRmb3JtX2RhdGEoY29uc3Qgc3RydWN0IHdsMTJ4eF9wbGF0Zm9ybV9kYXRhICpkYXRhKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FkZHJjb25mLmggYi9pbmNsdWRlL25ldC9hZGRyY29uZi5oCmluZGV4IDIzNzEwYWEuLjU4MmU0YWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2FkZHJjb25mLmgKKysrIGIvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaApAQCAtNDIsOCArNDIsNiBAQAogfTsKIAogCi0jaWZkZWYgX19LRVJORUxfXwotCiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bmV0L2lmX2luZXQ2Lmg+CiAjaW5jbHVkZSA8bmV0L2lwdjYuaD4KQEAgLTYxLDE2ICs1OSwxNiBAQAogCQkJCQkJICAgICB2b2lkIF9fdXNlciAqYXJnKTsKIAogZXh0ZXJuIGludAkJCWlwdjZfY2hrX2FkZHIoc3RydWN0IG5ldCAqbmV0LAotCQkJCQkgICAgICBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsCisJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwKIAkJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJICAgICAgaW50IHN0cmljdCk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19JUFY2X01JUDYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTUlQNl9NT0RVTEUpCiBleHRlcm4gaW50CQkJaXB2Nl9jaGtfaG9tZV9hZGRyKHN0cnVjdCBuZXQgKm5ldCwKLQkJCQkJCSAgIHN0cnVjdCBpbjZfYWRkciAqYWRkcik7CisJCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOwogI2VuZGlmCiAKLWV4dGVybiBpbnQJCQlpcHY2X2Noa19wcmVmaXgoc3RydWN0IGluNl9hZGRyICphZGRyLAorZXh0ZXJuIGludAkJCWlwdjZfY2hrX3ByZWZpeChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsCiAJCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogZXh0ZXJuIHN0cnVjdCBpbmV0Nl9pZmFkZHIgICAgICAqaXB2Nl9nZXRfaWZhZGRyKHN0cnVjdCBuZXQgKm5ldCwKQEAgLTg5LDkgKzg3LDkgQEAKIGV4dGVybiBpbnQgCQkJaXB2Nl9yY3Zfc2FkZHJfZXF1YWwoY29uc3Qgc3RydWN0IHNvY2sgKnNrLAogCQkJCQkJICAgIGNvbnN0IHN0cnVjdCBzb2NrICpzazIpOwogZXh0ZXJuIHZvaWQJCQlhZGRyY29uZl9qb2luX3NvbGljdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQlzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOworCQkJCQljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOwogZXh0ZXJuIHZvaWQJCQlhZGRyY29uZl9sZWF2ZV9zb2xpY3Qoc3RydWN0IGluZXQ2X2RldiAqaWRldiwKLQkJCQkJc3RydWN0IGluNl9hZGRyICphZGRyKTsKKwkJCQkJY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTsKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGFkZHJjb25mX3RpbWVvdXRfZml4dXAodTMyIHRpbWVvdXQsCiAJCQkJCQkgICAgdW5zaWduZWQgdW5pdCkKQEAgLTE1OCwxNSArMTU2LDE1IEBACiAvKgogICoJYW55Y2FzdCBwcm90b3R5cGVzIChhbnljYXN0LmMpCiAgKi8KLWV4dGVybiBpbnQgaXB2Nl9zb2NrX2FjX2pvaW4oc3RydWN0IHNvY2sgKnNrLGludCBpZmluZGV4LHN0cnVjdCBpbjZfYWRkciAqYWRkcik7Ci1leHRlcm4gaW50IGlwdjZfc29ja19hY19kcm9wKHN0cnVjdCBzb2NrICpzayxpbnQgaWZpbmRleCxzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOworZXh0ZXJuIGludCBpcHY2X3NvY2tfYWNfam9pbihzdHJ1Y3Qgc29jayAqc2ssaW50IGlmaW5kZXgsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcik7CitleHRlcm4gaW50IGlwdjZfc29ja19hY19kcm9wKHN0cnVjdCBzb2NrICpzayxpbnQgaWZpbmRleCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTsKIGV4dGVybiB2b2lkIGlwdjZfc29ja19hY19jbG9zZShzdHJ1Y3Qgc29jayAqc2spOwotZXh0ZXJuIGludCBpbmV0Nl9hY19jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbjZfYWRkciAqYWRkciwgaW50IGlmaW5kZXgpOworZXh0ZXJuIGludCBpbmV0Nl9hY19jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwgaW50IGlmaW5kZXgpOwogCi1leHRlcm4gaW50IGlwdjZfZGV2X2FjX2luYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOwotZXh0ZXJuIGludCBfX2lwdjZfZGV2X2FjX2RlYyhzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOworZXh0ZXJuIGludCBpcHY2X2Rldl9hY19pbmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTsKK2V4dGVybiBpbnQgX19pcHY2X2Rldl9hY19kZWMoc3RydWN0IGluZXQ2X2RldiAqaWRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTsKIGV4dGVybiBpbnQgaXB2Nl9jaGtfYWNhc3RfYWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGluNl9hZGRyICphZGRyKTsKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOwogCiAKIC8qIERldmljZSBub3RpZmllciAqLwpAQCAtMjg1LDQgKzI4MywzIEBACiAjZW5kaWYKIAogI2VuZGlmCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FmX3J4cnBjLmggYi9pbmNsdWRlL25ldC9hZl9yeHJwYy5oCmluZGV4IDAwYzJlYWEuLjAzZTZlOTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2FmX3J4cnBjLmgKKysrIGIvaW5jbHVkZS9uZXQvYWZfcnhycGMuaApAQCAtMTIsOCArMTIsNiBAQAogI2lmbmRlZiBfTkVUX1JYUlBDX0gKICNkZWZpbmUgX05FVF9SWFJQQ19ICiAKLSNpZmRlZiBfX0tFUk5FTF9fCi0KICNpbmNsdWRlIDxsaW51eC9yeHJwYy5oPgogCiBzdHJ1Y3QgcnhycGNfY2FsbDsKQEAgLTUzLDUgKzUxLDQgQEAKIAkJCQkJCSAgIHVuc2lnbmVkIGxvbmcpOwogZXh0ZXJuIGludCByeHJwY19rZXJuZWxfcmVqZWN0X2NhbGwoc3RydWN0IHNvY2tldCAqKTsKIAotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfTkVUX1JYUlBDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FmX3VuaXguaCBiL2luY2x1ZGUvbmV0L2FmX3VuaXguaAppbmRleCAxOGU1YzNmLi45MWFiNWIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9hZl91bml4LmgKKysrIGIvaW5jbHVkZS9uZXQvYWZfdW5peC5oCkBAIC00MSw3ICs0MSw2IEBACiAJCQkJc3Bpbl9sb2NrX25lc3RlZCgmdW5peF9zayhzKS0+bG9jaywgXAogCQkJCVNJTkdMRV9ERVBUSF9ORVNUSU5HKQogCi0jaWZkZWYgX19LRVJORUxfXwogLyogVGhlIEFGX1VOSVggc29ja2V0ICovCiBzdHJ1Y3QgdW5peF9zb2NrIHsKIAkvKiBXQVJOSU5HOiBzayBoYXMgdG8gYmUgdGhlIGZpcnN0IG1lbWJlciAqLwpAQCAtNzIsNCArNzEsMyBAQAogc3RhdGljIGlubGluZSB2b2lkIHVuaXhfc3lzY3RsX3VucmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KSB7fQogI2VuZGlmCiAjZW5kaWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYXRtY2xpcC5oIGIvaW5jbHVkZS9uZXQvYXRtY2xpcC5oCmluZGV4IDQ2N2M1MzEuLjQ5N2VmNjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2F0bWNsaXAuaAorKysgYi9pbmNsdWRlL25ldC9hdG1jbGlwLmgKQEAgLTU0LDggKzU0LDYgQEAKIH07CiAKIAotI2lmZGVmIF9fS0VSTkVMX18KIGV4dGVybiBzdHJ1Y3QgbmVpZ2hfdGFibGUgKmNsaXBfdGJsX2hvb2s7Ci0jZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmgKaW5kZXggMmMwZDMwOS4uMGMyMDIyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaApAQCAtMjQ2LDYgKzI0NiwxNSBAQAogI2RlZmluZSBIQ0lfQVRfR0VORVJBTF9CT05ESU5HCQkweDA0CiAjZGVmaW5lIEhDSV9BVF9HRU5FUkFMX0JPTkRJTkdfTUlUTQkweDA1CiAKKy8qIExpbmsgS2V5IHR5cGVzICovCisjZGVmaW5lIEhDSV9MS19DT01CSU5BVElPTgkJMHgwMAorI2RlZmluZSBIQ0lfTEtfTE9DQUxfVU5JVAkJMHgwMQorI2RlZmluZSBIQ0lfTEtfUkVNT1RFX1VOSVQJCTB4MDIKKyNkZWZpbmUgSENJX0xLX0RFQlVHX0NPTUJJTkFUSU9OCTB4MDMKKyNkZWZpbmUgSENJX0xLX1VOQVVUSF9DT01CSU5BVElPTgkweDA0CisjZGVmaW5lIEhDSV9MS19BVVRIX0NPTUJJTkFUSU9OCQkweDA1CisjZGVmaW5lIEhDSV9MS19DSEFOR0VEX0NPTUJJTkFUSU9OCTB4MDYKKwogLyogLS0tLS0gIEhDSSBDb21tYW5kcyAtLS0tICovCiAjZGVmaW5lIEhDSV9PUF9OT1AJCQkweDAwMDAKIApAQCAtNDI4LDYgKzQzNywxOCBAQAogCiAjZGVmaW5lIEhDSV9PUF9VU0VSX0NPTkZJUk1fTkVHX1JFUExZCTB4MDQyZAogCisjZGVmaW5lIEhDSV9PUF9SRU1PVEVfT09CX0RBVEFfUkVQTFkJMHgwNDMwCitzdHJ1Y3QgaGNpX2NwX3JlbW90ZV9vb2JfZGF0YV9yZXBseSB7CisJYmRhZGRyX3QgYmRhZGRyOworCV9fdTggICAgIGhhc2hbMTZdOworCV9fdTggICAgIHJhbmRvbWl6ZXJbMTZdOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBIQ0lfT1BfUkVNT1RFX09PQl9EQVRBX05FR19SRVBMWQkweDA0MzMKK3N0cnVjdCBoY2lfY3BfcmVtb3RlX29vYl9kYXRhX25lZ19yZXBseSB7CisJYmRhZGRyX3QgYmRhZGRyOworfSBfX3BhY2tlZDsKKwogI2RlZmluZSBIQ0lfT1BfSU9fQ0FQQUJJTElUWV9ORUdfUkVQTFkJMHgwNDM0CiBzdHJ1Y3QgaGNpX2NwX2lvX2NhcGFiaWxpdHlfbmVnX3JlcGx5IHsKIAliZGFkZHJfdCBiZGFkZHI7CkBAIC01MzcsMTUgKzU1OCwxNyBAQAogCV9fdTggICAgIGRlbGV0ZV9hbGw7CiB9IF9fcGFja2VkOwogCisjZGVmaW5lIEhDSV9NQVhfTkFNRV9MRU5HVEgJCTI0OAorCiAjZGVmaW5lIEhDSV9PUF9XUklURV9MT0NBTF9OQU1FCQkweDBjMTMKIHN0cnVjdCBoY2lfY3Bfd3JpdGVfbG9jYWxfbmFtZSB7Ci0JX191OCAgICAgbmFtZVsyNDhdOworCV9fdTggICAgIG5hbWVbSENJX01BWF9OQU1FX0xFTkdUSF07CiB9IF9fcGFja2VkOwogCiAjZGVmaW5lIEhDSV9PUF9SRUFEX0xPQ0FMX05BTUUJCTB4MGMxNAogc3RydWN0IGhjaV9ycF9yZWFkX2xvY2FsX25hbWUgewogCV9fdTggICAgIHN0YXR1czsKLQlfX3U4ICAgICBuYW1lWzI0OF07CisJX191OCAgICAgbmFtZVtIQ0lfTUFYX05BTUVfTEVOR1RIXTsKIH0gX19wYWNrZWQ7CiAKICNkZWZpbmUgSENJX09QX1dSSVRFX0NBX1RJTUVPVVQJCTB4MGMxNgpAQCAtNjAyLDYgKzYyNSwxNCBAQAogCiAjZGVmaW5lIEhDSV9PUF9XUklURV9JTlFVSVJZX01PREUJMHgwYzQ1CiAKKyNkZWZpbmUgSENJX01BWF9FSVJfTEVOR1RICQkyNDAKKworI2RlZmluZSBIQ0lfT1BfV1JJVEVfRUlSCQkweDBjNTIKK3N0cnVjdCBoY2lfY3Bfd3JpdGVfZWlyIHsKKwl1aW50OF90CQlmZWM7CisJdWludDhfdAkJZGF0YVtIQ0lfTUFYX0VJUl9MRU5HVEhdOworfSBfX3BhY2tlZDsKKwogI2RlZmluZSBIQ0lfT1BfUkVBRF9TU1BfTU9ERQkJMHgwYzU1CiBzdHJ1Y3QgaGNpX3JwX3JlYWRfc3NwX21vZGUgewogCV9fdTggICAgIHN0YXR1czsKQEAgLTYxMyw2ICs2NDQsMTMgQEAKIAlfX3U4ICAgICBtb2RlOwogfSBfX3BhY2tlZDsKIAorI2RlZmluZSBIQ0lfT1BfUkVBRF9MT0NBTF9PT0JfREFUQQkJMHgwYzU3CitzdHJ1Y3QgaGNpX3JwX3JlYWRfbG9jYWxfb29iX2RhdGEgeworCV9fdTggICAgIHN0YXR1czsKKwlfX3U4ICAgICBoYXNoWzE2XTsKKwlfX3U4ICAgICByYW5kb21pemVyWzE2XTsKK30gX19wYWNrZWQ7CisKICNkZWZpbmUgSENJX09QX1JFQURfSU5RX1JTUF9UWF9QT1dFUgkweDBjNTgKIAogI2RlZmluZSBIQ0lfT1BfUkVBRF9MT0NBTF9WRVJTSU9OCTB4MTAwMQpAQCAtNzQ3LDcgKzc4NSw3IEBACiBzdHJ1Y3QgaGNpX2V2X3JlbW90ZV9uYW1lIHsKIAlfX3U4ICAgICBzdGF0dXM7CiAJYmRhZGRyX3QgYmRhZGRyOwotCV9fdTggICAgIG5hbWVbMjQ4XTsKKwlfX3U4ICAgICBuYW1lW0hDSV9NQVhfTkFNRV9MRU5HVEhdOwogfSBfX3BhY2tlZDsKIAogI2RlZmluZSBIQ0lfRVZfRU5DUllQVF9DSEFOR0UJCTB4MDgKQEAgLTk1NSw2ICs5OTMsMTEgQEAKIAlfX2xlMzIJCXBhc3NrZXk7CiB9IF9fcGFja2VkOwogCisjZGVmaW5lIEhDSV9FVl9SRU1PVEVfT09CX0RBVEFfUkVRVUVTVAkweDM1CitzdHJ1Y3QgaGNpX2V2X3JlbW90ZV9vb2JfZGF0YV9yZXF1ZXN0IHsKKwliZGFkZHJfdCBiZGFkZHI7Cit9IF9fcGFja2VkOworCiAjZGVmaW5lIEhDSV9FVl9TSU1QTEVfUEFJUl9DT01QTEVURQkweDM2CiBzdHJ1Y3QgaGNpX2V2X3NpbXBsZV9wYWlyX2NvbXBsZXRlIHsKIAlfX3U4ICAgICBzdGF0dXM7CkBAIC0xMDMzLDcgKzEwNzYsNiBAQAogCV9fdTgJZGxlbjsKIH0gX19wYWNrZWQ7CiAKLSNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiBzdGF0aWMgaW5saW5lIHN0cnVjdCBoY2lfZXZlbnRfaGRyICpoY2lfZXZlbnRfaGRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC0xMDQ5LDcgKzEwOTEsNiBAQAogewogCXJldHVybiAoc3RydWN0IGhjaV9zY29faGRyICopIHNrYi0+ZGF0YTsKIH0KLSNlbmRpZgogCiAvKiBDb21tYW5kIG9wY29kZSBwYWNrL3VucGFjayAqLwogI2RlZmluZSBoY2lfb3Bjb2RlX3BhY2sob2dmLCBvY2YpCShfX3UxNikgKChvY2YgJiAweDAzZmYpfChvZ2YgPDwgMTApKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaAppbmRleCA0NDFkYWRiLi42Yzk5NGMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaAorKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaApAQCAtODIsNiArODIsMTMgQEAKIAl1OCBwaW5fbGVuOwogfTsKIAorc3RydWN0IG9vYl9kYXRhIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJYmRhZGRyX3QgYmRhZGRyOworCXU4IGhhc2hbMTZdOworCXU4IHJhbmRvbWl6ZXJbMTZdOworfTsKKwogI2RlZmluZSBOVU1fUkVBU1NFTUJMWSA0CiBzdHJ1Y3QgaGNpX2RldiB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwpAQCAtOTQsNyArMTAxLDggQEAKIAlfX3U4CQlidXM7CiAJX191OAkJZGV2X3R5cGU7CiAJYmRhZGRyX3QJYmRhZGRyOwotCV9fdTgJCWRldl9uYW1lWzI0OF07CisJX191OAkJZGV2X25hbWVbSENJX01BWF9OQU1FX0xFTkdUSF07CisJX191OAkJZWlyW0hDSV9NQVhfRUlSX0xFTkdUSF07CiAJX191OAkJZGV2X2NsYXNzWzNdOwogCV9fdTgJCW1ham9yX2NsYXNzOwogCV9fdTgJCW1pbm9yX2NsYXNzOwpAQCAtMTE4LDYgKzEyNiw4IEBACiAJX191MTYJCXNuaWZmX21pbl9pbnRlcnZhbDsKIAlfX3UxNgkJc25pZmZfbWF4X2ludGVydmFsOwogCisJdW5zaWduZWQgaW50CWF1dG9fYWNjZXB0X2RlbGF5OworCiAJdW5zaWduZWQgbG9uZwlxdWlya3M7CiAKIAlhdG9taWNfdAljbWRfY250OwpAQCAtMTY5LDYgKzE3OSw4IEBACiAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpbmtfa2V5czsKIAorCXN0cnVjdCBsaXN0X2hlYWQJcmVtb3RlX29vYl9kYXRhOworCiAJc3RydWN0IGhjaV9kZXZfc3RhdHMJc3RhdDsKIAogCXN0cnVjdCBza19idWZmX2hlYWQJZHJpdmVyX2luaXQ7CkBAIC0yMTYsNiArMjI4LDcgQEAKIAlfX3UxNgkJcGt0X3R5cGU7CiAJX191MTYJCWxpbmtfcG9saWN5OwogCV9fdTMyCQlsaW5rX21vZGU7CisJX191OAkJa2V5X3R5cGU7CiAJX191OAkJYXV0aF90eXBlOwogCV9fdTgJCXNlY19sZXZlbDsKIAlfX3U4CQlwZW5kaW5nX3NlY19sZXZlbDsKQEAgLTIzNSw2ICsyNDgsNyBAQAogCiAJc3RydWN0IHRpbWVyX2xpc3QgZGlzY190aW1lcjsKIAlzdHJ1Y3QgdGltZXJfbGlzdCBpZGxlX3RpbWVyOworCXN0cnVjdCB0aW1lcl9saXN0IGF1dG9fYWNjZXB0X3RpbWVyOwogCiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtfYWRkOwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrX2RlbDsKQEAgLTQwOCw2ICs0MjIsNyBAQAogCiBzdHJ1Y3QgaGNpX2Nvbm4gKmhjaV9jb25uZWN0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBpbnQgdHlwZSwgYmRhZGRyX3QgKmRzdCwgX191OCBzZWNfbGV2ZWwsIF9fdTggYXV0aF90eXBlKTsKIGludCBoY2lfY29ubl9jaGVja19saW5rX21vZGUoc3RydWN0IGhjaV9jb25uICpjb25uKTsKK2ludCBoY2lfY29ubl9jaGVja19zZWN1cmUoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHNlY19sZXZlbCk7CiBpbnQgaGNpX2Nvbm5fc2VjdXJpdHkoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHNlY19sZXZlbCwgX191OCBhdXRoX3R5cGUpOwogaW50IGhjaV9jb25uX2NoYW5nZV9saW5rX2tleShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pOwogaW50IGhjaV9jb25uX3N3aXRjaF9yb2xlKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCByb2xlKTsKQEAgLTUwMSwxMCArNTE2LDE3IEBACiAKIGludCBoY2lfbGlua19rZXlzX2NsZWFyKHN0cnVjdCBoY2lfZGV2ICpoZGV2KTsKIHN0cnVjdCBsaW5rX2tleSAqaGNpX2ZpbmRfbGlua19rZXkoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGJkYWRkcl90ICpiZGFkZHIpOwotaW50IGhjaV9hZGRfbGlua19rZXkoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGludCBuZXdfa2V5LCBiZGFkZHJfdCAqYmRhZGRyLAotCQkJCQkJdTggKmtleSwgdTggdHlwZSwgdTggcGluX2xlbik7CitpbnQgaGNpX2FkZF9saW5rX2tleShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IGhjaV9jb25uICpjb25uLCBpbnQgbmV3X2tleSwKKwkJCWJkYWRkcl90ICpiZGFkZHIsIHU4ICp2YWwsIHU4IHR5cGUsIHU4IHBpbl9sZW4pOwogaW50IGhjaV9yZW1vdmVfbGlua19rZXkoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGJkYWRkcl90ICpiZGFkZHIpOwogCitpbnQgaGNpX3JlbW90ZV9vb2JfZGF0YV9jbGVhcihzdHJ1Y3QgaGNpX2RldiAqaGRldik7CitzdHJ1Y3Qgb29iX2RhdGEgKmhjaV9maW5kX3JlbW90ZV9vb2JfZGF0YShzdHJ1Y3QgaGNpX2RldiAqaGRldiwKKwkJCQkJCQliZGFkZHJfdCAqYmRhZGRyKTsKK2ludCBoY2lfYWRkX3JlbW90ZV9vb2JfZGF0YShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgYmRhZGRyX3QgKmJkYWRkciwgdTggKmhhc2gsCisJCQkJCQkJCXU4ICpyYW5kb21pemVyKTsKK2ludCBoY2lfcmVtb3ZlX3JlbW90ZV9vb2JfZGF0YShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgYmRhZGRyX3QgKmJkYWRkcik7CisKIHZvaWQgaGNpX2RlbF9vZmZfdGltZXIoc3RydWN0IGhjaV9kZXYgKmhkZXYpOwogCiB2b2lkIGhjaV9ldmVudF9wYWNrZXQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwpAQCAtNzU0LDE5ICs3NzYsMjcgQEAKIGludCBtZ210X3Bvd2VyZWQodTE2IGluZGV4LCB1OCBwb3dlcmVkKTsKIGludCBtZ210X2Rpc2NvdmVyYWJsZSh1MTYgaW5kZXgsIHU4IGRpc2NvdmVyYWJsZSk7CiBpbnQgbWdtdF9jb25uZWN0YWJsZSh1MTYgaW5kZXgsIHU4IGNvbm5lY3RhYmxlKTsKLWludCBtZ210X25ld19rZXkodTE2IGluZGV4LCBzdHJ1Y3QgbGlua19rZXkgKmtleSwgdTggb2xkX2tleV90eXBlKTsKK2ludCBtZ210X25ld19rZXkodTE2IGluZGV4LCBzdHJ1Y3QgbGlua19rZXkgKmtleSwgdTggcGVyc2lzdGVudCk7CiBpbnQgbWdtdF9jb25uZWN0ZWQodTE2IGluZGV4LCBiZGFkZHJfdCAqYmRhZGRyKTsKIGludCBtZ210X2Rpc2Nvbm5lY3RlZCh1MTYgaW5kZXgsIGJkYWRkcl90ICpiZGFkZHIpOwogaW50IG1nbXRfZGlzY29ubmVjdF9mYWlsZWQodTE2IGluZGV4KTsKIGludCBtZ210X2Nvbm5lY3RfZmFpbGVkKHUxNiBpbmRleCwgYmRhZGRyX3QgKmJkYWRkciwgdTggc3RhdHVzKTsKLWludCBtZ210X3Bpbl9jb2RlX3JlcXVlc3QodTE2IGluZGV4LCBiZGFkZHJfdCAqYmRhZGRyKTsKK2ludCBtZ210X3Bpbl9jb2RlX3JlcXVlc3QodTE2IGluZGV4LCBiZGFkZHJfdCAqYmRhZGRyLCB1OCBzZWN1cmUpOwogaW50IG1nbXRfcGluX2NvZGVfcmVwbHlfY29tcGxldGUodTE2IGluZGV4LCBiZGFkZHJfdCAqYmRhZGRyLCB1OCBzdGF0dXMpOwogaW50IG1nbXRfcGluX2NvZGVfbmVnX3JlcGx5X2NvbXBsZXRlKHUxNiBpbmRleCwgYmRhZGRyX3QgKmJkYWRkciwgdTggc3RhdHVzKTsKLWludCBtZ210X3VzZXJfY29uZmlybV9yZXF1ZXN0KHUxNiBpbmRleCwgYmRhZGRyX3QgKmJkYWRkciwgX19sZTMyIHZhbHVlKTsKK2ludCBtZ210X3VzZXJfY29uZmlybV9yZXF1ZXN0KHUxNiBpbmRleCwgYmRhZGRyX3QgKmJkYWRkciwgX19sZTMyIHZhbHVlLAorCQkJCQkJCXU4IGNvbmZpcm1faGludCk7CiBpbnQgbWdtdF91c2VyX2NvbmZpcm1fcmVwbHlfY29tcGxldGUodTE2IGluZGV4LCBiZGFkZHJfdCAqYmRhZGRyLCB1OCBzdGF0dXMpOwogaW50IG1nbXRfdXNlcl9jb25maXJtX25lZ19yZXBseV9jb21wbGV0ZSh1MTYgaW5kZXgsIGJkYWRkcl90ICpiZGFkZHIsCiAJCQkJCQkJCXU4IHN0YXR1cyk7CiBpbnQgbWdtdF9hdXRoX2ZhaWxlZCh1MTYgaW5kZXgsIGJkYWRkcl90ICpiZGFkZHIsIHU4IHN0YXR1cyk7CitpbnQgbWdtdF9zZXRfbG9jYWxfbmFtZV9jb21wbGV0ZSh1MTYgaW5kZXgsIHU4ICpuYW1lLCB1OCBzdGF0dXMpOworaW50IG1nbXRfcmVhZF9sb2NhbF9vb2JfZGF0YV9yZXBseV9jb21wbGV0ZSh1MTYgaW5kZXgsIHU4ICpoYXNoLCB1OCAqcmFuZG9taXplciwKKwkJCQkJCQkJdTggc3RhdHVzKTsKK2ludCBtZ210X2RldmljZV9mb3VuZCh1MTYgaW5kZXgsIGJkYWRkcl90ICpiZGFkZHIsIHU4ICpkZXZfY2xhc3MsIHM4IHJzc2ksCisJCQkJCQkJCXU4ICplaXIpOworaW50IG1nbXRfcmVtb3RlX25hbWUodTE2IGluZGV4LCBiZGFkZHJfdCAqYmRhZGRyLCB1OCAqbmFtZSk7CitpbnQgbWdtdF9kaXNjb3ZlcmluZyh1MTYgaW5kZXgsIHU4IGRpc2NvdmVyaW5nKTsKIAogLyogSENJIGluZm8gZm9yIHNvY2tldCAqLwogI2RlZmluZSBoY2lfcGkoc2spICgoc3RydWN0IGhjaV9waW5mbyAqKSBzaykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9sMmNhcC5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmgKaW5kZXggNGY0YmZmMS4uZDA5YzliMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmgKQEAgLTI3NiwxMSArMjc2LDgxIEBACiAjZGVmaW5lIEwyQ0FQX0NPTk5fUEFSQU1fQUNDRVBURUQJMHgwMDAwCiAjZGVmaW5lIEwyQ0FQX0NPTk5fUEFSQU1fUkVKRUNURUQJMHgwMDAxCiAKLS8qIC0tLS0tIEwyQ0FQIGNvbm5lY3Rpb25zIC0tLS0tICovCi1zdHJ1Y3QgbDJjYXBfY2hhbl9saXN0IHsKLQlzdHJ1Y3Qgc29jawkqaGVhZDsKLQlyd2xvY2tfdAlsb2NrOwotCWxvbmcJCW51bTsKKy8qIC0tLS0tIEwyQ0FQIGNoYW5uZWxzIGFuZCBjb25uZWN0aW9ucyAtLS0tLSAqLworc3RydWN0IHNyZWpfbGlzdCB7CisJX191OAl0eF9zZXE7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKworc3RydWN0IGwyY2FwX2NoYW4geworCXN0cnVjdCBzb2NrICpzazsKKworCXN0cnVjdCBsMmNhcF9jb25uCSpjb25uOworCisJX19sZTE2CQlwc207CisJX191MTYJCWRjaWQ7CisJX191MTYJCXNjaWQ7CisKKwlfX3UxNgkJaW10dTsKKwlfX3UxNgkJb210dTsKKwlfX3UxNgkJZmx1c2hfdG87CisJX191OAkJbW9kZTsKKworCV9fbGUxNgkJc3BvcnQ7CisKKwlfX3U4CQlzZWNfbGV2ZWw7CisJX191OAkJcm9sZV9zd2l0Y2g7CisJX191OAkJZm9yY2VfcmVsaWFibGU7CisJX191OAkJZmx1c2hhYmxlOworCisJX191OAkJaWRlbnQ7CisKKwlfX3U4CQljb25mX3JlcVs2NF07CisJX191OAkJY29uZl9sZW47CisJX191OAkJbnVtX2NvbmZfcmVxOworCV9fdTgJCW51bV9jb25mX3JzcDsKKworCV9fdTgJCWZjczsKKworCV9fdTgJCXR4X3dpbjsKKwlfX3U4CQltYXhfdHg7CisJX191MTYJCXJldHJhbnNfdGltZW91dDsKKwlfX3UxNgkJbW9uaXRvcl90aW1lb3V0OworCV9fdTE2CQltcHM7CisKKwlfX3U4CQljb25mX3N0YXRlOworCV9fdTE2CQljb25uX3N0YXRlOworCisJX191OAkJbmV4dF90eF9zZXE7CisJX191OAkJZXhwZWN0ZWRfYWNrX3NlcTsKKwlfX3U4CQlleHBlY3RlZF90eF9zZXE7CisJX191OAkJYnVmZmVyX3NlcTsKKwlfX3U4CQlidWZmZXJfc2VxX3NyZWo7CisJX191OAkJc3Jlal9zYXZlX3JlcXNlcTsKKwlfX3U4CQlmcmFtZXNfc2VudDsKKwlfX3U4CQl1bmFja2VkX2ZyYW1lczsKKwlfX3U4CQlyZXRyeV9jb3VudDsKKwlfX3U4CQludW1fYWNrZWQ7CisJX191MTYJCXNkdV9sZW47CisJX191MTYJCXBhcnRpYWxfc2R1X2xlbjsKKwlzdHJ1Y3Qgc2tfYnVmZgkqc2R1OworCisJX191OAkJcmVtb3RlX3R4X3dpbjsKKwlfX3U4CQlyZW1vdGVfbWF4X3R4OworCV9fdTE2CQlyZW1vdGVfbXBzOworCisJc3RydWN0IHRpbWVyX2xpc3QJcmV0cmFuc190aW1lcjsKKwlzdHJ1Y3QgdGltZXJfbGlzdAltb25pdG9yX3RpbWVyOworCXN0cnVjdCB0aW1lcl9saXN0CWFja190aW1lcjsKKwlzdHJ1Y3Qgc2tfYnVmZgkJKnR4X3NlbmRfaGVhZDsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCXR4X3E7CisJc3RydWN0IHNrX2J1ZmZfaGVhZAlzcmVqX3E7CisJc3RydWN0IHNrX2J1ZmZfaGVhZAlidXN5X3E7CisJc3RydWN0IHdvcmtfc3RydWN0CWJ1c3lfd29yazsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXNyZWpfbDsKKworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGdsb2JhbF9sOwogfTsKIAogc3RydWN0IGwyY2FwX2Nvbm4gewpAQCAtMzAyLDk3ICszNzIsMjQgQEAKIAogCXN0cnVjdCBza19idWZmICpyeF9za2I7CiAJX191MzIJCXJ4X2xlbjsKLQlfX3U4CQlyeF9pZGVudDsKIAlfX3U4CQl0eF9pZGVudDsKIAogCV9fdTgJCWRpc2NfcmVhc29uOwogCi0Jc3RydWN0IGwyY2FwX2NoYW5fbGlzdCBjaGFuX2xpc3Q7Ci19OwotCi1zdHJ1Y3Qgc29ja19kZWxfbGlzdCB7Ci0Jc3RydWN0IHNvY2sgKnNrOwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGNoYW5fbDsKKwlyd2xvY2tfdAljaGFuX2xvY2s7CiB9OwogCiAjZGVmaW5lIEwyQ0FQX0lORk9fQ0xfTVRVX1JFUV9TRU5UCTB4MDEKICNkZWZpbmUgTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX1NFTlQJMHgwNAogI2RlZmluZSBMMkNBUF9JTkZPX0ZFQVRfTUFTS19SRVFfRE9ORQkweDA4CiAKLS8qIC0tLS0tIEwyQ0FQIGNoYW5uZWwgYW5kIHNvY2tldCBpbmZvIC0tLS0tICovCisvKiAtLS0tLSBMMkNBUCBzb2NrZXQgaW5mbyAtLS0tLSAqLwogI2RlZmluZSBsMmNhcF9waShzaykgKChzdHJ1Y3QgbDJjYXBfcGluZm8gKikgc2spCi0jZGVmaW5lIFRYX1FVRVVFKHNrKSAoJmwyY2FwX3BpKHNrKS0+dHhfcXVldWUpCi0jZGVmaW5lIFNSRUpfUVVFVUUoc2spICgmbDJjYXBfcGkoc2spLT5zcmVqX3F1ZXVlKQotI2RlZmluZSBCVVNZX1FVRVVFKHNrKSAoJmwyY2FwX3BpKHNrKS0+YnVzeV9xdWV1ZSkKLSNkZWZpbmUgU1JFSl9MSVNUKHNrKSAoJmwyY2FwX3BpKHNrKS0+c3Jlal9sLmxpc3QpCi0KLXN0cnVjdCBzcmVqX2xpc3QgewotCV9fdTgJdHhfc2VxOwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLX07CiAKIHN0cnVjdCBsMmNhcF9waW5mbyB7CiAJc3RydWN0IGJ0X3NvY2sJYnQ7Ci0JX19sZTE2CQlwc207Ci0JX191MTYJCWRjaWQ7Ci0JX191MTYJCXNjaWQ7Ci0KLQlfX3UxNgkJaW10dTsKLQlfX3UxNgkJb210dTsKLQlfX3UxNgkJZmx1c2hfdG87Ci0JX191OAkJbW9kZTsKLQlfX3U4CQludW1fY29uZl9yZXE7Ci0JX191OAkJbnVtX2NvbmZfcnNwOwotCi0JX191OAkJZmNzOwotCV9fdTgJCXNlY19sZXZlbDsKLQlfX3U4CQlyb2xlX3N3aXRjaDsKLQlfX3U4CQlmb3JjZV9yZWxpYWJsZTsKLQlfX3U4CQlmbHVzaGFibGU7Ci0KLQlfX3U4CQljb25mX3JlcVs2NF07Ci0JX191OAkJY29uZl9sZW47Ci0JX191OAkJY29uZl9zdGF0ZTsKLQlfX3UxNgkJY29ubl9zdGF0ZTsKLQotCV9fdTgJCW5leHRfdHhfc2VxOwotCV9fdTgJCWV4cGVjdGVkX2Fja19zZXE7Ci0JX191OAkJZXhwZWN0ZWRfdHhfc2VxOwotCV9fdTgJCWJ1ZmZlcl9zZXE7Ci0JX191OAkJYnVmZmVyX3NlcV9zcmVqOwotCV9fdTgJCXNyZWpfc2F2ZV9yZXFzZXE7Ci0JX191OAkJZnJhbWVzX3NlbnQ7Ci0JX191OAkJdW5hY2tlZF9mcmFtZXM7Ci0JX191OAkJcmV0cnlfY291bnQ7Ci0JX191OAkJbnVtX2Fja2VkOwotCV9fdTE2CQlzZHVfbGVuOwotCV9fdTE2CQlwYXJ0aWFsX3NkdV9sZW47Ci0Jc3RydWN0IHNrX2J1ZmYJKnNkdTsKLQotCV9fdTgJCWlkZW50OwotCi0JX191OAkJdHhfd2luOwotCV9fdTgJCW1heF90eDsKLQlfX3U4CQlyZW1vdGVfdHhfd2luOwotCV9fdTgJCXJlbW90ZV9tYXhfdHg7Ci0JX191MTYJCXJldHJhbnNfdGltZW91dDsKLQlfX3UxNgkJbW9uaXRvcl90aW1lb3V0OwotCV9fdTE2CQlyZW1vdGVfbXBzOwotCV9fdTE2CQltcHM7Ci0KLQlfX2xlMTYJCXNwb3J0OwotCi0Jc3RydWN0IHRpbWVyX2xpc3QJcmV0cmFuc190aW1lcjsKLQlzdHJ1Y3QgdGltZXJfbGlzdAltb25pdG9yX3RpbWVyOwotCXN0cnVjdCB0aW1lcl9saXN0CWFja190aW1lcjsKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCXR4X3F1ZXVlOwotCXN0cnVjdCBza19idWZmX2hlYWQJc3Jlal9xdWV1ZTsKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCWJ1c3lfcXVldWU7Ci0Jc3RydWN0IHdvcmtfc3RydWN0CWJ1c3lfd29yazsKLQlzdHJ1Y3Qgc3Jlal9saXN0CXNyZWpfbDsKLQlzdHJ1Y3QgbDJjYXBfY29ubgkqY29ubjsKLQlzdHJ1Y3Qgc29jawkJKm5leHRfYzsKLQlzdHJ1Y3Qgc29jawkJKnByZXZfYzsKKwlzdHJ1Y3QgbDJjYXBfY2hhbgkqY2hhbjsKIH07CiAKICNkZWZpbmUgTDJDQVBfQ09ORl9SRVFfU0VOVCAgICAgICAweDAxCkBAIC00MTksMjQgKzQxNiwyMyBAQAogI2RlZmluZSBMMkNBUF9DT05OX1JOUl9TRU5UICAgICAgICAweDAyMDAKICNkZWZpbmUgTDJDQVBfQ09OTl9TQVJfUkVUUlkgICAgICAgMHgwNDAwCiAKLSNkZWZpbmUgX19tb2RfcmV0cmFuc190aW1lcigpIG1vZF90aW1lcigmbDJjYXBfcGkoc2spLT5yZXRyYW5zX3RpbWVyLCBcCisjZGVmaW5lIF9fbW9kX3JldHJhbnNfdGltZXIoKSBtb2RfdGltZXIoJmNoYW4tPnJldHJhbnNfdGltZXIsIFwKIAkJamlmZmllcyArICBtc2Vjc190b19qaWZmaWVzKEwyQ0FQX0RFRkFVTFRfUkVUUkFOU19UTykpOwotI2RlZmluZSBfX21vZF9tb25pdG9yX3RpbWVyKCkgbW9kX3RpbWVyKCZsMmNhcF9waShzayktPm1vbml0b3JfdGltZXIsIFwKKyNkZWZpbmUgX19tb2RfbW9uaXRvcl90aW1lcigpIG1vZF90aW1lcigmY2hhbi0+bW9uaXRvcl90aW1lciwgXAogCQlqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhMMkNBUF9ERUZBVUxUX01PTklUT1JfVE8pKTsKLSNkZWZpbmUgX19tb2RfYWNrX3RpbWVyKCkgbW9kX3RpbWVyKCZsMmNhcF9waShzayktPmFja190aW1lciwgXAorI2RlZmluZSBfX21vZF9hY2tfdGltZXIoKSBtb2RfdGltZXIoJmNoYW4tPmFja190aW1lciwgXAogCQlqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhMMkNBUF9ERUZBVUxUX0FDS19UTykpOwogCi1zdGF0aWMgaW5saW5lIGludCBsMmNhcF90eF93aW5kb3dfZnVsbChzdHJ1Y3Qgc29jayAqc2spCitzdGF0aWMgaW5saW5lIGludCBsMmNhcF90eF93aW5kb3dfZnVsbChzdHJ1Y3QgbDJjYXBfY2hhbiAqY2gpCiB7Ci0Jc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9IGwyY2FwX3BpKHNrKTsKIAlpbnQgc3ViOwogCi0Jc3ViID0gKHBpLT5uZXh0X3R4X3NlcSAtIHBpLT5leHBlY3RlZF9hY2tfc2VxKSAlIDY0OworCXN1YiA9IChjaC0+bmV4dF90eF9zZXEgLSBjaC0+ZXhwZWN0ZWRfYWNrX3NlcSkgJSA2NDsKIAogCWlmIChzdWIgPCAwKQogCQlzdWIgKz0gNjQ7CiAKLQlyZXR1cm4gc3ViID09IHBpLT5yZW1vdGVfdHhfd2luOworCXJldHVybiBzdWIgPT0gY2gtPnJlbW90ZV90eF93aW47CiB9CiAKICNkZWZpbmUgX19nZXRfdHhzZXEoY3RybCkJKCgoY3RybCkgJiBMMkNBUF9DVFJMX1RYU0VRKSA+PiAxKQpAQCAtNDQ2LDI0ICs0NDIsMjQgQEAKICNkZWZpbmUgX19pc19zYXJfc3RhcnQoY3RybCkJKCgoY3RybCkgJiBMMkNBUF9DVFJMX1NBUikgPT0gTDJDQVBfU0RVX1NUQVJUKQogCiBleHRlcm4gaW50IGRpc2FibGVfZXJ0bTsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGwyY2FwX3NvY2tfb3BzOwotZXh0ZXJuIHN0cnVjdCBidF9zb2NrX2xpc3QgbDJjYXBfc2tfbGlzdDsKIAogaW50IGwyY2FwX2luaXRfc29ja2V0cyh2b2lkKTsKIHZvaWQgbDJjYXBfY2xlYW51cF9zb2NrZXRzKHZvaWQpOwogCi11OCBsMmNhcF9nZXRfaWRlbnQoc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4pOwogdm9pZCBsMmNhcF9zZW5kX2NtZChzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiwgdTggaWRlbnQsIHU4IGNvZGUsIHUxNiBsZW4sIHZvaWQgKmRhdGEpOwotaW50IGwyY2FwX2J1aWxkX2NvbmZfcmVxKHN0cnVjdCBzb2NrICpzaywgdm9pZCAqZGF0YSk7Cit2b2lkIF9fbDJjYXBfY29ubmVjdF9yc3BfZGVmZXIoc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4pOwogaW50IF9fbDJjYXBfd2FpdF9hY2soc3RydWN0IHNvY2sgKnNrKTsKIAotc3RydWN0IHNrX2J1ZmYgKmwyY2FwX2NyZWF0ZV9jb25ubGVzc19wZHUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pOwotc3RydWN0IHNrX2J1ZmYgKmwyY2FwX2NyZWF0ZV9iYXNpY19wZHUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pOwotc3RydWN0IHNrX2J1ZmYgKmwyY2FwX2NyZWF0ZV9pZnJhbWVfcGR1KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCB1MTYgY29udHJvbCwgdTE2IHNkdWxlbik7Ci1pbnQgbDJjYXBfc2FyX3NlZ21lbnRfc2R1KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKTsKLXZvaWQgbDJjYXBfZG9fc2VuZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOwotdm9pZCBsMmNhcF9zdHJlYW1pbmdfc2VuZChzdHJ1Y3Qgc29jayAqc2spOwotaW50IGwyY2FwX2VydG1fc2VuZChzdHJ1Y3Qgc29jayAqc2spOworc3RydWN0IHNrX2J1ZmYgKmwyY2FwX2NyZWF0ZV9jb25ubGVzc19wZHUoc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4sIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbik7CitzdHJ1Y3Qgc2tfYnVmZiAqbDJjYXBfY3JlYXRlX2Jhc2ljX3BkdShzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKTsKK3N0cnVjdCBza19idWZmICpsMmNhcF9jcmVhdGVfaWZyYW1lX3BkdShzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCB1MTYgY29udHJvbCwgdTE2IHNkdWxlbik7CitpbnQgbDJjYXBfc2FyX3NlZ21lbnRfc2R1KHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pOwordm9pZCBsMmNhcF9kb19zZW5kKHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgbDJjYXBfc3RyZWFtaW5nX3NlbmQoc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4pOworaW50IGwyY2FwX2VydG1fc2VuZChzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbik7CisKK2ludCBsMmNhcF9hZGRfcHNtKHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCBiZGFkZHJfdCAqc3JjLCBfX2xlMTYgcHNtKTsKK2ludCBsMmNhcF9hZGRfc2NpZChzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiwgIF9fdTE2IHNjaWQpOwogCiB2b2lkIGwyY2FwX3NvY2tfc2V0X3RpbWVyKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KTsKIHZvaWQgbDJjYXBfc29ja19jbGVhcl90aW1lcihzdHJ1Y3Qgc29jayAqc2spOwpAQCAtNDcyLDggKzQ2OCwxMCBAQAogdm9pZCBsMmNhcF9zb2NrX2luaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqcGFyZW50KTsKIHN0cnVjdCBzb2NrICpsMmNhcF9zb2NrX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywKIAkJCQkJCQlpbnQgcHJvdG8sIGdmcF90IHByaW8pOwotdm9pZCBsMmNhcF9zZW5kX2Rpc2Nvbm5fcmVxKHN0cnVjdCBsMmNhcF9jb25uICpjb25uLCBzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpOwotdm9pZCBsMmNhcF9jaGFuX2RlbChzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpOwotaW50IGwyY2FwX2RvX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrKTsKK3ZvaWQgbDJjYXBfc2VuZF9kaXNjb25uX3JlcShzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiwgc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4sIGludCBlcnIpOworc3RydWN0IGwyY2FwX2NoYW4gKmwyY2FwX2NoYW5fY3JlYXRlKHN0cnVjdCBzb2NrICpzayk7Cit2b2lkIGwyY2FwX2NoYW5fZGVsKHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCBpbnQgZXJyKTsKK3ZvaWQgbDJjYXBfY2hhbl9kZXN0cm95KHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuKTsKK2ludCBsMmNhcF9jaGFuX2Nvbm5lY3Qoc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4pOwogCiAjZW5kaWYgLyogX19MMkNBUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvbWdtdC5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL21nbXQuaAppbmRleCA1ZmFiZmE4Li40ODk5Mjg2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvbWdtdC5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9tZ210LmgKQEAgLTQxLDYgKzQxLDEwIEBACiAJX19sZTE2IGluZGV4WzBdOwogfSBfX3BhY2tlZDsKIAorLyogUmVzZXJ2ZSBvbmUgZXh0cmEgYnl0ZSBmb3IgbmFtZXMgaW4gbWFuYWdlbWVudCBtZXNzYWdlcyBzbyB0aGF0IHRoZXkKKyAqIGFyZSBhbHdheXMgZ3VhcmFudGVlZCB0byBiZSBudWwtdGVybWluYXRlZCAqLworI2RlZmluZSBNR01UX01BWF9OQU1FX0xFTkdUSAkJKEhDSV9NQVhfTkFNRV9MRU5HVEggKyAxKQorCiAjZGVmaW5lIE1HTVRfT1BfUkVBRF9JTkZPCQkweDAwMDQKIHN0cnVjdCBtZ210X3JwX3JlYWRfaW5mbyB7CiAJX191OCB0eXBlOwpAQCAtNTUsNiArNTksNyBAQAogCV9fdTE2IG1hbnVmYWN0dXJlcjsKIAlfX3U4IGhjaV92ZXI7CiAJX191MTYgaGNpX3JldjsKKwlfX3U4IG5hbWVbTUdNVF9NQVhfTkFNRV9MRU5HVEhdOwogfSBfX3BhY2tlZDsKIAogc3RydWN0IG1nbXRfbW9kZSB7CkBAIC0xNjcsNiArMTcyLDMzIEBACiAKICNkZWZpbmUgTUdNVF9PUF9VU0VSX0NPTkZJUk1fTkVHX1JFUExZCTB4MDAxNgogCisjZGVmaW5lIE1HTVRfT1BfU0VUX0xPQ0FMX05BTUUJCTB4MDAxNworc3RydWN0IG1nbXRfY3Bfc2V0X2xvY2FsX25hbWUgeworCV9fdTggbmFtZVtNR01UX01BWF9OQU1FX0xFTkdUSF07Cit9IF9fcGFja2VkOworCisjZGVmaW5lIE1HTVRfT1BfUkVBRF9MT0NBTF9PT0JfREFUQQkweDAwMTgKK3N0cnVjdCBtZ210X3JwX3JlYWRfbG9jYWxfb29iX2RhdGEgeworCV9fdTggaGFzaFsxNl07CisJX191OCByYW5kb21pemVyWzE2XTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgTUdNVF9PUF9BRERfUkVNT1RFX09PQl9EQVRBCTB4MDAxOQorc3RydWN0IG1nbXRfY3BfYWRkX3JlbW90ZV9vb2JfZGF0YSB7CisJYmRhZGRyX3QgYmRhZGRyOworCV9fdTggaGFzaFsxNl07CisJX191OCByYW5kb21pemVyWzE2XTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgTUdNVF9PUF9SRU1PVkVfUkVNT1RFX09PQl9EQVRBCTB4MDAxQQorc3RydWN0IG1nbXRfY3BfcmVtb3ZlX3JlbW90ZV9vb2JfZGF0YSB7CisJYmRhZGRyX3QgYmRhZGRyOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBNR01UX09QX1NUQVJUX0RJU0NPVkVSWQkJMHgwMDFCCisKKyNkZWZpbmUgTUdNVF9PUF9TVE9QX0RJU0NPVkVSWQkJMHgwMDFDCisKICNkZWZpbmUgTUdNVF9FVl9DTURfQ09NUExFVEUJCTB4MDAwMQogc3RydWN0IG1nbXRfZXZfY21kX2NvbXBsZXRlIHsKIAlfX2xlMTYgb3Bjb2RlOwpAQCAtMTk4LDggKzIzMCw4IEBACiAKICNkZWZpbmUgTUdNVF9FVl9ORVdfS0VZCQkJMHgwMDBBCiBzdHJ1Y3QgbWdtdF9ldl9uZXdfa2V5IHsKKwlfX3U4IHN0b3JlX2hpbnQ7CiAJc3RydWN0IG1nbXRfa2V5X2luZm8ga2V5OwotCV9fdTggb2xkX2tleV90eXBlOwogfSBfX3BhY2tlZDsKIAogI2RlZmluZSBNR01UX0VWX0NPTk5FQ1RFRAkJMHgwMDBCCkBAIC0yMjEsMTEgKzI1MywxMyBAQAogI2RlZmluZSBNR01UX0VWX1BJTl9DT0RFX1JFUVVFU1QJMHgwMDBFCiBzdHJ1Y3QgbWdtdF9ldl9waW5fY29kZV9yZXF1ZXN0IHsKIAliZGFkZHJfdCBiZGFkZHI7CisJX191OCBzZWN1cmU7CiB9IF9fcGFja2VkOwogCiAjZGVmaW5lIE1HTVRfRVZfVVNFUl9DT05GSVJNX1JFUVVFU1QJMHgwMDBGCiBzdHJ1Y3QgbWdtdF9ldl91c2VyX2NvbmZpcm1fcmVxdWVzdCB7CiAJYmRhZGRyX3QgYmRhZGRyOworCV9fdTggY29uZmlybV9oaW50OwogCV9fbGUzMiB2YWx1ZTsKIH0gX19wYWNrZWQ7CiAKQEAgLTIzNCwzICsyNjgsMjQgQEAKIAliZGFkZHJfdCBiZGFkZHI7CiAJX191OCBzdGF0dXM7CiB9IF9fcGFja2VkOworCisjZGVmaW5lIE1HTVRfRVZfTE9DQUxfTkFNRV9DSEFOR0VECTB4MDAxMQorc3RydWN0IG1nbXRfZXZfbG9jYWxfbmFtZV9jaGFuZ2VkIHsKKwlfX3U4IG5hbWVbTUdNVF9NQVhfTkFNRV9MRU5HVEhdOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBNR01UX0VWX0RFVklDRV9GT1VORAkJMHgwMDEyCitzdHJ1Y3QgbWdtdF9ldl9kZXZpY2VfZm91bmQgeworCWJkYWRkcl90IGJkYWRkcjsKKwlfX3U4IGRldl9jbGFzc1szXTsKKwlfX3M4IHJzc2k7CisJX191OCBlaXJbSENJX01BWF9FSVJfTEVOR1RIXTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgTUdNVF9FVl9SRU1PVEVfTkFNRQkJMHgwMDEzCitzdHJ1Y3QgbWdtdF9ldl9yZW1vdGVfbmFtZSB7CisJYmRhZGRyX3QgYmRhZGRyOworCV9fdTggbmFtZVtNR01UX01BWF9OQU1FX0xFTkdUSF07Cit9IF9fcGFja2VkOworCisjZGVmaW5lIE1HTVRfRVZfRElTQ09WRVJJTkcJCTB4MDAxNApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2FpZi9jYWlmX2Rldi5oIGIvaW5jbHVkZS9uZXQvY2FpZi9jYWlmX2Rldi5oCmluZGV4IDhlZmY4M2IuLmMwMTEyODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2NhaWYvY2FpZl9kZXYuaAorKysgYi9pbmNsdWRlL25ldC9jYWlmL2NhaWZfZGV2LmgKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxuZXQvY2FpZi9jZmNuZmcuaD4KICNpbmNsdWRlIDxsaW51eC9jYWlmL2NhaWZfc29ja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvaWYuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXQuaD4KIAogLyoqCiAgKiBzdHJ1Y3QgY2FpZl9wYXJhbSAtIENBSUYgcGFyYW1ldGVycy4KQEAgLTYyLDQ2ICs2Myw0NSBAQAogICogRS5nLiBDQUlGIFNvY2tldCB3aWxsIGNhbGwgdGhpcyBmdW5jdGlvbiBmb3IgZWFjaCBzb2NrZXQgaXQgY29ubmVjdHMKICAqIGFuZCBoYXZlIG9uZSBjbGllbnRfbGF5ZXIgaW5zdGFuY2UgZm9yIGVhY2ggc29ja2V0LgogICovCi1pbnQgY2FpZl9jb25uZWN0X2NsaWVudChzdHJ1Y3QgY2FpZl9jb25uZWN0X3JlcXVlc3QgKmNvbm5fcmVxLAoraW50IGNhaWZfY29ubmVjdF9jbGllbnQoc3RydWN0IG5ldCAqbmV0LAorCQkJc3RydWN0IGNhaWZfY29ubmVjdF9yZXF1ZXN0ICpjb25uX3JlcSwKIAkJCXN0cnVjdCBjZmxheWVyICpjbGllbnRfbGF5ZXIsIGludCAqaWZpbmRleCwKIAkJCWludCAqaGVhZHJvb20sIGludCAqdGFpbHJvb20pOwogCiAvKioKICAqIGNhaWZfZGlzY29ubmVjdF9jbGllbnQgLSBEaXNjb25uZWN0cyBhIGNsaWVudCBmcm9tIHRoZSBDQUlGIHN0YWNrLgogICoKKyAqIEBjbGllbnRfbGF5ZXI6IENsaWVudCBsYXllciB0byBiZSBkaXNjb25uZWN0ZWQuCisgKi8KK2ludCBjYWlmX2Rpc2Nvbm5lY3RfY2xpZW50KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGNmbGF5ZXIgKmNsaWVudF9sYXllcik7CisKKworLyoqCisgKiBjYWlmX2NsaWVudF9yZWdpc3Rlcl9yZWZjbnQgLSByZWdpc3RlciByZWYtY291bnQgZnVuY3Rpb25zIHByb3ZpZGVkIGJ5IGNsaWVudC4KKyAqCisgKiBAYWRhcHRfbGF5ZXI6IENsaWVudCBsYXllciB1c2luZyBDQUlGIFN0YWNrLgorICogQGhvbGQ6CUZ1bmN0aW9uIHByb3ZpZGVkIGJ5IGNsaWVudCBsYXllciBpbmNyZWFzaW5nIHJlZi1jb3VudAorICogQHB1dDoJRnVuY3Rpb24gcHJvdmlkZWQgYnkgY2xpZW50IGxheWVyIGRlY3JlYXNpbmcgcmVmLWNvdW50CisgKgorICogQ2xpZW50IG9mIHRoZSBDQUlGIFN0YWNrIG11c3QgcmVnaXN0ZXIgZnVuY3Rpb25zIGZvciByZWZlcmVuY2UgY291bnRpbmcuCisgKiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBieSB0aGUgQ0FJRiBTdGFjayBmb3IgZXZlcnkgdXBzdHJlYW0gcGFja2V0LAorICogYW5kIG11c3QgdGhlcmVmb3JlIGJlIGltcGxlbWVudGVkIGVmZmljaWVudGx5LgorICoKKyAqIENsaWVudCBzaG91bGQgY2FsbCBjYWlmX2ZyZWVfY2xpZW50IHdoZW4gcmVmZXJlbmNlIGNvdW50IGRlZ3JlYXNlIHRvIHplcm8uCisgKi8KKwordm9pZCBjYWlmX2NsaWVudF9yZWdpc3Rlcl9yZWZjbnQoc3RydWN0IGNmbGF5ZXIgKmFkYXB0X2xheWVyLAorCQkJCQl2b2lkICgqaG9sZCkoc3RydWN0IGNmbGF5ZXIgKmx5ciksCisJCQkJCXZvaWQgKCpwdXQpKHN0cnVjdCBjZmxheWVyICpseXIpKTsKKy8qKgorICogY2FpZl9mcmVlX2NsaWVudCAtIEZyZWUgbWVtb3J5IHVzZWQgdG8gbWFuYWdlIHRoZSBjbGllbnQgaW4gdGhlIENBSUYgU3RhY2suCisgKgogICogQGNsaWVudF9sYXllcjogQ2xpZW50IGxheWVyIHRvIGJlIHJlbW92ZWQuCi0gKi8KLWludCBjYWlmX2Rpc2Nvbm5lY3RfY2xpZW50KHN0cnVjdCBjZmxheWVyICpjbGllbnRfbGF5ZXIpOwotCi0vKioKLSAqIGNhaWZfcmVsZWFzZV9jbGllbnQgLSBSZWxlYXNlIGFkYXB0YXRpb24gbGF5ZXIgcmVmZXJlbmNlIHRvIGNsaWVudC4KICAqCi0gKiBAY2xpZW50X2xheWVyOiBDbGllbnQgbGF5ZXIuCi0gKgotICogUmVsZWFzZXMgYSBjbGllbnQvYWRhcHRhdGlvbiBsYXllciB1c2Ugb2YgdGhlIGNhaWYgc3RhY2suCi0gKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgdXNlZCBhZnRlciBjYWlmX2Rpc2Nvbm5lY3RfY2xpZW50IHRvCi0gKiBkZWNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBzZXJ2aWNlIGxheWVyLgorICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIGNsaWVudCBsYXllciBpbiBvcmRlciB0byBmcmVlIG1lbW9yeS4KKyAqIENhbGxlciBtdXN0IGd1YXJhbnRlZSB0aGF0IG5vIHBhY2tldHMgYXJlIGluIGZsaWdodCB1cHN0cmVhbSB3aGVuIGNhbGxpbmcKKyAqIHRoaXMgZnVuY3Rpb24uCiAgKi8KLXZvaWQgY2FpZl9yZWxlYXNlX2NsaWVudChzdHJ1Y3QgY2ZsYXllciAqY2xpZW50X2xheWVyKTsKLQotLyoqCi0gKiBjb25uZWN0X3JlcV90b19saW5rX3BhcmFtIC0gVHJhbnNsYXRlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycwotICoJCQkJZnJvbSBzb2NrZXQgZm9ybWF0IHRvIGludGVybmFsIGZvcm1hdC4KLSAqIEBjbmZnOglQb2ludGVyIHRvIGNvbmZpZ3VyYXRpb24gaGFuZGxlcgotICogQGNvbl9yZXE6CUNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBzdXBwbGllZCBpbiBmdW5jdGlvbgotICoJCWNhaWZfY29ubmVjdF9jbGllbnQKLSAqIEBjaGFubmVsX3NldHVwX3BhcmFtOiBQYXJhbWV0ZXJzIHN1cHBsaWVkIHRvIHRoZSBDQUlGIENvcmUgc3RhY2sgZm9yCi0gKgkJCSBzZXR0aW5nIHVwIGNoYW5uZWxzLgotICoKLSAqLwotaW50IGNvbm5lY3RfcmVxX3RvX2xpbmtfcGFyYW0oc3RydWN0IGNmY25mZyAqY25mZywKLQkJCQlzdHJ1Y3QgY2FpZl9jb25uZWN0X3JlcXVlc3QgKmNvbl9yZXEsCi0JCQkJc3RydWN0IGNmY3RybF9saW5rX3BhcmFtICpjaGFubmVsX3NldHVwX3BhcmFtKTsKLQotLyoqCi0gKiBnZXRfY2FpZl9jb25mKCkgLSBHZXQgdGhlIGNvbmZpZ3VyYXRpb24gaGFuZGxlci4KLSAqLwotc3RydWN0IGNmY25mZyAqZ2V0X2NhaWZfY29uZih2b2lkKTsKLQordm9pZCBjYWlmX2ZyZWVfY2xpZW50KHN0cnVjdCBjZmxheWVyICphZGFwX2xheWVyKTsKIAogI2VuZGlmIC8qIENBSUZfREVWX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jYWlmL2NhaWZfbGF5ZXIuaCBiL2luY2x1ZGUvbmV0L2NhaWYvY2FpZl9sYXllci5oCmluZGV4IGM4YjA3YTkuLjM1YmM3ODggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2NhaWYvY2FpZl9sYXllci5oCisrKyBiL2luY2x1ZGUvbmV0L2NhaWYvY2FpZl9sYXllci5oCkBAIC0xNSw3ICsxNSw2IEBACiBzdHJ1Y3QgY2FpZl9wYXlsb2FkX2luZm87CiBzdHJ1Y3QgY2FpZl9wYWNrZXRfZnVuY3M7CiAKLQogI2RlZmluZSBDQUlGX0xBWUVSX05BTUVfU1ogMTYKIAogLyoqCkBAIC0zMyw3ICszMiw2IEBACiAJfQkJCQkJCQlcCiB9IHdoaWxlICgwKQogCi0KIC8qKgogICogZW51bSBjYWlmX2N0cmxjbWQgLSBDQUlGIFN0YWNrIENvbnRyb2wgU2lnbmFsaW5nIHNlbnQgaW4gbGF5ZXIuY3RybGNtZCgpLgogICoKQEAgLTE0MSw3ICsxMzksNyBAQAogICogICAgLSBBbGwgbGF5ZXJzIG11c3QgdXNlIHRoaXMgc3RydWN0dXJlLiBJZiBlbWJlZGRpbmcgaXQsIHRoZW4gcGxhY2UgdGhpcwogICoJc3RydWN0dXJlIGZpcnN0IGluIHRoZSBsYXllciBzcGVjaWZpYyBzdHJ1Y3R1cmUuCiAgKgotICogICAgLSBFYWNoIGxheWVyIHNob3VsZCBub3QgZGVwZW5kIG9uIGFueSBvdGhlcnMgbGF5ZXIgcHJpdmF0ZSBkYXRhLgorICogICAgLSBFYWNoIGxheWVyIHNob3VsZCBub3QgZGVwZW5kIG9uIGFueSBvdGhlcnMgbGF5ZXIncyBwcml2YXRlIGRhdGEuCiAgKgogICogICAgLSBJbiBvcmRlciB0byBzZW5kIGRhdGEgdXB3YXJkcyBkbwogICoJbGF5ZXItPnVwLT5yZWNlaXZlKGxheWVyLT51cCwgcGFja2V0KTsKQEAgLTE1NSwxNiArMTUzLDIzIEBACiAJc3RydWN0IGxpc3RfaGVhZCBub2RlOwogCiAJLyoKLQkgKiAgcmVjZWl2ZSgpIC0gUmVjZWl2ZSBGdW5jdGlvbi4KKwkgKiAgcmVjZWl2ZSgpIC0gUmVjZWl2ZSBGdW5jdGlvbiAobm9uLWJsb2NraW5nKS4KIAkgKiAgQ29udHJhY3Q6IEVhY2ggbGF5ZXIgbXVzdCBpbXBsZW1lbnQgYSByZWNlaXZlIGZ1bmN0aW9uIHBhc3NpbmcgdGhlCiAJICogIENBSUYgcGFja2V0cyB1cHdhcmRzIGluIHRoZSBzdGFjay4KIAkgKglQYWNrZXQgaGFuZGxpbmcgcnVsZXM6Ci0JICoJICAgICAgLSBUaGUgQ0FJRiBwYWNrZXQgKGNmcGt0KSBjYW5ub3QgYmUgYWNjZXNzZWQgYWZ0ZXIKLQkgKgkJICAgICBwYXNzaW5nIGl0IHRvIHRoZSBuZXh0IGxheWVyIHVzaW5nIHVwLT5yZWNlaXZlKCkuCisJICoJICAgICAgLSBUaGUgQ0FJRiBwYWNrZXQgKGNmcGt0KSBvd25lcnNoaXAgaXMgcGFzc2VkIHRvIHRoZQorCSAqCQljYWxsZWQgcmVjZWl2ZSBmdW5jdGlvbi4gVGhpcyBtZWFucyB0aGF0IHRoZSB0aGUKKwkgKgkJcGFja2V0IGNhbm5vdCBiZSBhY2Nlc3NlZCBhZnRlciBwYXNzaW5nIGl0IHRvIHRoZQorCSAqCQlhYm92ZSBsYXllciB1c2luZyB1cC0+cmVjZWl2ZSgpLgorCSAqCiAJICoJICAgICAgLSBJZiBwYXJzaW5nIG9mIHRoZSBwYWNrZXQgZmFpbHMsIHRoZSBwYWNrZXQgbXVzdCBiZQotCSAqCQkgICAgIGRlc3Ryb3llZCBhbmQgLTEgcmV0dXJuZWQgZnJvbSB0aGUgZnVuY3Rpb24uCisJICoJCWRlc3Ryb3llZCBhbmQgbmVnYXRpdmUgZXJyb3IgY29kZSByZXR1cm5lZAorCSAqCQlmcm9tIHRoZSBmdW5jdGlvbi4KKwkgKgkJRVhDRVBUSU9OOiBJZiB0aGUgZnJhbWluZyBsYXllciAoY2Zmcm1sKSByZXR1cm5zCisJICoJCQktRUlMU0VRLCB0aGUgcGFja2V0IGlzIG5vdCBmcmVlZC4KKwkgKgogCSAqCSAgICAgIC0gSWYgcGFyc2luZyBzdWNjZWVkcyAoYW5kIGFib3ZlIGxheWVycyByZXR1cm4gT0spIHRoZW4KLQkgKgkJICAgICAgdGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdmFsdWUgPiAwLgorCSAqCQkgICAgICB0aGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSB2YWx1ZSA+PSAwLgogCSAqCiAJICogIFJldHVybnMgcmVzdWx0IDwgMCBpbmRpY2F0ZXMgYW4gZXJyb3IsIDAgb3IgcG9zaXRpdmUgdmFsdWUKIAkgKgkgICAgIGluZGljYXRlcyBzdWNjZXNzLgpAQCAtMTc2LDcgKzE4MSw3IEBACiAJaW50ICgqcmVjZWl2ZSkoc3RydWN0IGNmbGF5ZXIgKmxheXIsIHN0cnVjdCBjZnBrdCAqY2Zwa3QpOwogCiAJLyoKLQkgKiAgdHJhbnNtaXQoKSAtIFRyYW5zbWl0IEZ1bmN0aW9uLgorCSAqICB0cmFuc21pdCgpIC0gVHJhbnNtaXQgRnVuY3Rpb24gKG5vbi1ibG9ja2luZykuCiAJICogIENvbnRyYWN0OiBFYWNoIGxheWVyIG11c3QgaW1wbGVtZW50IGEgdHJhbnNtaXQgZnVuY3Rpb24gcGFzc2luZyB0aGUKIAkgKglDQUlGIHBhY2tldCBkb3dud2FyZHMgaW4gdGhlIHN0YWNrLgogCSAqCVBhY2tldCBoYW5kbGluZyBydWxlczoKQEAgLTE4NSwxNSArMTkwLDE2IEBACiAJICoJCWNhbm5vdCBiZSBhY2Nlc3NlZCBhZnRlciBwYXNzaW5nIGl0IHRvIHRoZSBiZWxvdwogCSAqCQlsYXllciB1c2luZyBkbi0+dHJhbnNtaXQoKS4KIAkgKgotCSAqCSAgICAgIC0gSWYgdHJhbnNtaXQgZmFpbHMsIGhvd2V2ZXIsIHRoZSBvd25lcnNoaXAgaXMgcmV0dXJuZWQKLQkgKgkJdG8gdGhlY2FsbGVyLiBUaGUgY2FsbGVyIG9mICJkbi0+dHJhbnNtaXQoKSIgbXVzdAotCSAqCQlkZXN0cm95IG9yIHJlc2VuZCBwYWNrZXQuCisJICoJICAgICAgLSBVcG9uIGVycm9yIHRoZSBwYWNrZXQgb3duZXJzaGlwIGlzIHN0aWxsIHBhc3NlZCBvbiwKKwkgKgkJc28gdGhlIHBhY2tldCBzaGFsbCBiZSBmcmVlZCB3aGVyZSBlcnJvciBpcyBkZXRlY3RlZC4KKwkgKgkJQ2FsbGVycyBvZiB0aGUgdHJhbnNtaXQgZnVuY3Rpb24gc2hhbGwgbm90IGZyZWUgcGFja2V0cywKKwkgKgkJYnV0IGVycm9ycyBzaGFsbCBiZSByZXR1cm5lZC4KIAkgKgogCSAqCSAgICAgIC0gUmV0dXJuIHZhbHVlIGxlc3MgdGhhbiB6ZXJvIG1lYW5zIGVycm9yLCB6ZXJvIG9yCiAJICoJCWdyZWF0ZXIgdGhhbiB6ZXJvIG1lYW5zIE9LLgogCSAqCi0JICoJIHJlc3VsdCA8IDAgaW5kaWNhdGVzIGFuIGVycm9yLCAwIG9yIHBvc2l0aXZlIHZhbHVlCi0JICoJIGluZGljYXRlIHN1Y2Nlc3MuCisJICogIFJldHVybnMgcmVzdWx0IDwgMCBpbmRpY2F0ZXMgYW4gZXJyb3IsIDAgb3IgcG9zaXRpdmUgdmFsdWUKKwkgKgkJaW5kaWNhdGVzIHN1Y2Nlc3MuCiAJICoKIAkgKiAgQGxheXI6CVBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgbGF5ZXIgdGhlIHJlY2VpdmUgZnVuY3Rpb24KIAkgKgkJaXNpbXBsZW1lbnRlZCBmb3IgKHRoaXMgcG9pbnRlcikuCkBAIC0yMDIsNyArMjA4LDcgQEAKIAlpbnQgKCp0cmFuc21pdCkgKHN0cnVjdCBjZmxheWVyICpsYXlyLCBzdHJ1Y3QgY2Zwa3QgKmNmcGt0KTsKIAogCS8qCi0JICogIGN0dHJsY21kKCkgLSBDb250cm9sIEZ1bmN0aW9uIHVwd2FyZHMgaW4gQ0FJRiBTdGFjay4KKwkgKiAgY3R0cmxjbWQoKSAtIENvbnRyb2wgRnVuY3Rpb24gdXB3YXJkcyBpbiBDQUlGIFN0YWNrICAobm9uLWJsb2NraW5nKS4KIAkgKiAgVXNlZCBmb3Igc2lnbmFsaW5nIHJlc3BvbnNlcyAoQ0FJRl9DVFJMQ01EXypfUlNQKQogCSAqICBhbmQgYXN5bmNocm9ub3VzIGV2ZW50cyBmcm9tIHRoZSBtb2RlbSAgKENBSUZfQ1RSTENNRF8qX0lORCkKIAkgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2FpZi9jZmNuZmcuaCBiL2luY2x1ZGUvbmV0L2NhaWYvY2ZjbmZnLmgKaW5kZXggZjMzZDM2My4uM2U5M2E0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY2FpZi9jZmNuZmcuaAorKysgYi9pbmNsdWRlL25ldC9jYWlmL2NmY25mZy5oCkBAIC00Niw2ICs0NiwxMiBAQAogfTsKIAogLyoqCisgKiBjZmNuZmdfY3JlYXRlKCkgLSBHZXQgdGhlIENBSUYgY29uZmlndXJhdGlvbiBvYmplY3QgZ2l2ZW4gbmV0d29yay4KKyAqIEBuZXQ6CU5ldHdvcmsgZm9yIHRoZSBDQUlGIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgorICovCitzdHJ1Y3QgY2ZjbmZnICpnZXRfY2ZjbmZnKHN0cnVjdCBuZXQgKm5ldCk7CisKKy8qKgogICogY2ZjbmZnX2NyZWF0ZSgpIC0gQ3JlYXRlIHRoZSBDQUlGIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICovCiBzdHJ1Y3QgY2ZjbmZnICpjZmNuZmdfY3JlYXRlKHZvaWQpOwpAQCAtNjUsMTcgKzcxLDE1IEBACiAgKiBAZGV2OglQb2ludGVyIHRvIGxpbmsgbGF5ZXIgZGV2aWNlCiAgKiBAcGh5X2xheWVyOglTcGVjaWZ5IHRoZSBwaHlzaWNhbCBsYXllci4gVGhlIHRyYW5zbWl0IGZ1bmN0aW9uCiAgKgkJTVVTVCBiZSBzZXQgaW4gdGhlIHN0cnVjdHVyZS4KLSAqIEBwaHlpZDoJVGhlIGFzc2lnbmVkIHBoeXNpY2FsIElEIGZvciB0aGlzIGxheWVyLCB1c2VkIGluCi0gKgkJY2ZjbmZnX2FkZF9hZGFwdF9sYXllciB0byBzcGVjaWZ5IFBIWSBmb3IgdGhlIGxpbmsuCiAgKiBAcHJlZjoJVGhlIHBoeSAobGluayBsYXllcikgcHJlZmVyZW5jZS4KICAqIEBmY3M6CVNwZWNpZnkgaWYgY2hlY2tzdW0gaXMgdXNlZCBpbiBDQUlGIEZyYW1pbmcgTGF5ZXIuCi0gKiBAc3R4OglTcGVjaWZ5IGlmIFN0YXJ0IE9mIEZyYW1lIGV4dGVuc2lvbiBpcyB1c2VkLgorICogQHN0eDoJU3BlY2lmeSBpZiBTdGFydCBPZiBGcmFtZSBlWHRlbnRpb24gaXMgdXNlZC4KICAqLwogCiB2b2lkCiBjZmNuZmdfYWRkX3BoeV9sYXllcihzdHJ1Y3QgY2ZjbmZnICpjbmZnLCBlbnVtIGNmY25mZ19waHlfdHlwZSBwaHlfdHlwZSwKIAkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2ZsYXllciAqcGh5X2xheWVyLAotCQkgICAgIHUxNiAqcGh5aWQsIGVudW0gY2ZjbmZnX3BoeV9wcmVmZXJlbmNlIHByZWYsCisJCSAgICAgZW51bSBjZmNuZmdfcGh5X3ByZWZlcmVuY2UgcHJlZiwKIAkJICAgICBib29sIGZjcywgYm9vbCBzdHgpOwogCiAvKioKQEAgLTg4LDYxICs5MiwxMiBAQAogaW50IGNmY25mZ19kZWxfcGh5X2xheWVyKHN0cnVjdCBjZmNuZmcgKmNuZmcsIHN0cnVjdCBjZmxheWVyICpwaHlfbGF5ZXIpOwogCiAvKioKLSAqIGNmY25mZ19kaXNjb25uX2FkYXB0X2xheWVyIC0gRGlzY29ubmVjdHMgYW4gYWRhcHRhdGlvbiBsYXllci4KLSAqCi0gKiBAY25mZzoJUG9pbnRlciB0byBhIENBSUYgY29uZmlndXJhdGlvbiBvYmplY3QsIGNyZWF0ZWQgYnkKLSAqCQljZmNuZmdfY3JlYXRlKCkuCi0gKiBAYWRhcF9sYXllcjogQWRhcHRhdGlvbiBsYXllciB0byBiZSByZW1vdmVkLgotICovCi1pbnQgY2ZjbmZnX2Rpc2Nvbm5fYWRhcHRfbGF5ZXIoc3RydWN0IGNmY25mZyAqY25mZywKLQkJCXN0cnVjdCBjZmxheWVyICphZGFwX2xheWVyKTsKLQotLyoqCi0gKiBjZmNuZmdfcmVsZWFzZV9hZGFwX2xheWVyIC0gVXNlZCBieSBjbGllbnQgdG8gcmVsZWFzZSB0aGUgYWRhcHRhdGlvbiBsYXllci4KLSAqCi0gKiBAYWRhcF9sYXllcjogQWRhcHRhdGlvbiBsYXllci4KLSAqLwotdm9pZCBjZmNuZmdfcmVsZWFzZV9hZGFwX2xheWVyKHN0cnVjdCBjZmxheWVyICphZGFwX2xheWVyKTsKLQotLyoqCi0gKiBjZmNuZmdfYWRkX2FkYXB0YXRpb25fbGF5ZXIgLSBBZGQgYW4gYWRhcHRhdGlvbiBsYXllciB0byB0aGUgQ0FJRiBzdGFjay4KLSAqCi0gKiBUaGUgYWRhcHRhdGlvbiBMYXllciBpcyB3aGVyZSB0aGUgaW50ZXJmYWNlIHRvIGFwcGxpY2F0aW9uIG9yIGhpZ2hlci1sZXZlbAotICogZHJpdmVyIGZ1bmN0aW9uYWxpdHkgaXMgaW1wbGVtZW50ZWQuCi0gKgotICogQGNuZmc6CQlQb2ludGVyIHRvIGEgQ0FJRiBjb25maWd1cmF0aW9uIG9iamVjdCwgY3JlYXRlZCBieQotICoJCQljZmNuZmdfY3JlYXRlKCkuCi0gKiBAcGFyYW06CQlMaW5rIHNldHVwIHBhcmFtZXRlcnMuCi0gKiBAYWRhcF9sYXllcjoJCVNwZWNpZnkgdGhlIGFkYXB0YXRpb24gbGF5ZXI7IHRoZSByZWNlaXZlIGFuZAotICoJCQlmbG93LWNvbnRyb2wgZnVuY3Rpb25zIE1VU1QgYmUgc2V0IGluIHRoZSBzdHJ1Y3R1cmUuCi0gKiBAaWZpbmRleDoJCUxpbmsgbGF5ZXIgaW50ZXJmYWNlIGluZGV4IHVzZWQgZm9yIHRoaXMgY29ubmVjdGlvbi4KLSAqIEBwcm90b19oZWFkOgkJUHJvdG9jb2wgaGVhZC1zcGFjZSBuZWVkZWQgYnkgQ0FJRiBwcm90b2NvbCwKLSAqCQkJZXhjbHVkaW5nIGxpbmsgbGF5ZXIuCi0gKiBAcHJvdG9fdGFpbDoJCVByb3RvY29sIHRhaWwtc3BhY2UgbmVlZGVkIGJ5IENBSUYgcHJvdG9jb2wsCi0gKgkJCWV4Y2x1ZGluZyBsaW5rIGxheWVyLgotICovCi1pbnQgY2ZjbmZnX2FkZF9hZGFwdGF0aW9uX2xheWVyKHN0cnVjdCBjZmNuZmcgKmNuZmcsCi0JCQkgICAgc3RydWN0IGNmY3RybF9saW5rX3BhcmFtICpwYXJhbSwKLQkJCSAgICBzdHJ1Y3QgY2ZsYXllciAqYWRhcF9sYXllciwKLQkJCSAgICBpbnQgKmlmaW5kZXgsCi0JCQkgICAgaW50ICpwcm90b19oZWFkLAotCQkJICAgIGludCAqcHJvdG9fdGFpbCk7Ci0KLS8qKgotICogY2ZjbmZnX2dldF9waHlpZCgpIC0gR2V0IHBoeXNpY2FsIElELCBnaXZlbiB0eXBlLgotICogUmV0dXJucyBvbmUgb2YgdGhlIHBoeXNpY2FsIGludGVyZmFjZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHR5cGUuCi0gKiBaZXJvIGlmIG5vIG1hdGNoIGlzIGZvdW5kLgorICogY2ZjbmZnX3NldF9waHlfc3RhdGUoKSAtIFNldCB0aGUgc3RhdGUgb2YgdGhlIHBoeXNpY2FsIGludGVyZmFjZSBkZXZpY2UuCiAgKiBAY25mZzoJQ29uZmlndXJhdGlvbiBvYmplY3QKLSAqIEBwaHlfcHJlZjoJQ2FpZiBMaW5rIExheWVyIHByZWZlcmVuY2UKKyAqIEBwaHlfbGF5ZXI6CVBoeXNpY2FsIExheWVyIHJlcHJlc2VudGF0aW9uCisgKiBAdXA6CVN0YXRlIG9mIGRldmljZQogICovCi1zdHJ1Y3QgZGV2X2luZm8gKmNmY25mZ19nZXRfcGh5aWQoc3RydWN0IGNmY25mZyAqY25mZywKLQkJICAgICBlbnVtIGNmY25mZ19waHlfcHJlZmVyZW5jZSBwaHlfcHJlZik7CitpbnQgY2ZjbmZnX3NldF9waHlfc3RhdGUoc3RydWN0IGNmY25mZyAqY25mZywgc3RydWN0IGNmbGF5ZXIgKnBoeV9sYXllciwKKwkJCQlib29sIHVwKTsKIAotLyoqCi0gKiBjZmNuZmdfZ2V0X2lkX2Zyb21faWZpKCkgLSBHZXQgdGhlIFBoeXNpY2FsIElkZW50aWZpZXIgb2YgaWZpbmRleCwKLSAqIAkJCWl0IG1hdGNoZXMgY2FpZiBwaHlzaWNhbCBpZCB3aXRoIHRoZSBrZXJuZWwgaW50ZXJmYWNlIGlkLgotICogQGNuZmc6CUNvbmZpZ3VyYXRpb24gb2JqZWN0Ci0gKiBAaWZpOglpZmluZGV4IG9idGFpbmVkIGZyb20gc29ja2V0LmMgYmluZHRvZGV2aWNlLgotICovCi1pbnQgY2ZjbmZnX2dldF9pZF9mcm9tX2lmaShzdHJ1Y3QgY2ZjbmZnICpjbmZnLCBpbnQgaWZpKTsKICNlbmRpZgkJCQkvKiBDRkNORkdfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NhaWYvY2ZjdHJsLmggYi9pbmNsdWRlL25ldC9jYWlmL2NmY3RybC5oCmluZGV4IGU1NGY2MzkuLjllNTQyNWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2NhaWYvY2ZjdHJsLmgKKysrIGIvaW5jbHVkZS9uZXQvY2FpZi9jZmN0cmwuaApAQCAtMTIxLDE5ICsxMjEsMTAgQEAKIAkJCSAgIHN0cnVjdCBjZmxheWVyICp1c2VyX2xheWVyKTsKIGludCAgY2ZjdHJsX2xpbmtkb3duX3JlcShzdHJ1Y3QgY2ZsYXllciAqY2ZjdHJsLCB1OCBsaW5raWQsCiAJCQkgc3RydWN0IGNmbGF5ZXIgKmNsaWVudCk7Ci12b2lkIGNmY3RybF9zbGVlcF9yZXEoc3RydWN0IGNmbGF5ZXIgKmNmY3RybCk7Ci12b2lkIGNmY3RybF93YWtlX3JlcShzdHJ1Y3QgY2ZsYXllciAqY2ZjdHJsKTsKLXZvaWQgY2ZjdHJsX2dldHN0YXJ0cmVhc29uX3JlcShzdHJ1Y3QgY2ZsYXllciAqY2ZjdHJsKTsKKwogc3RydWN0IGNmbGF5ZXIgKmNmY3RybF9jcmVhdGUodm9pZCk7Ci12b2lkIGNmY3RybF9zZXRfZG5sYXllcihzdHJ1Y3QgY2ZsYXllciAqdGhpcywgc3RydWN0IGNmbGF5ZXIgKmRuKTsKLXZvaWQgY2ZjdHJsX3NldF91cGxheWVyKHN0cnVjdCBjZmxheWVyICp0aGlzLCBzdHJ1Y3QgY2ZsYXllciAqdXApOwogc3RydWN0IGNmY3RybF9yc3AgKmNmY3RybF9nZXRfcmVzcGZ1bmNzKHN0cnVjdCBjZmxheWVyICpsYXllcik7Ci1ib29sIGNmY3RybF9yZXFfZXEoc3RydWN0IGNmY3RybF9yZXF1ZXN0X2luZm8gKnIxLAotCQkgICBzdHJ1Y3QgY2ZjdHJsX3JlcXVlc3RfaW5mbyAqcjIpOwotdm9pZCBjZmN0cmxfaW5zZXJ0X3JlcShzdHJ1Y3QgY2ZjdHJsICpjdHJsLAotCQkJICAgICAgc3RydWN0IGNmY3RybF9yZXF1ZXN0X2luZm8gKnJlcSk7Ci1zdHJ1Y3QgY2ZjdHJsX3JlcXVlc3RfaW5mbyAqY2ZjdHJsX3JlbW92ZV9yZXEoc3RydWN0IGNmY3RybCAqY3RybCwKLQkJCQkJICAgICAgc3RydWN0IGNmY3RybF9yZXF1ZXN0X2luZm8gKnJlcSk7Ci12b2lkIGNmY3RybF9jYW5jZWxfcmVxKHN0cnVjdCBjZmxheWVyICpsYXlyLCBzdHJ1Y3QgY2ZsYXllciAqYWRhcF9sYXllcik7CitpbnQgY2ZjdHJsX2NhbmNlbF9yZXEoc3RydWN0IGNmbGF5ZXIgKmxheXIsIHN0cnVjdCBjZmxheWVyICphZGFwX2xheWVyKTsKK3ZvaWQgY2ZjdHJsX3JlbW92ZShzdHJ1Y3QgY2ZsYXllciAqbGF5cik7CiAKICNlbmRpZgkJCQkvKiBDRkNUUkxfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NhaWYvY2Zmcm1sLmggYi9pbmNsdWRlL25ldC9jYWlmL2NmZnJtbC5oCmluZGV4IDNmMTRkMmUuLmFmYWMxYTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2NhaWYvY2Zmcm1sLmgKKysrIGIvaW5jbHVkZS9uZXQvY2FpZi9jZmZybWwuaApAQCAtNywxMCArNywxNSBAQAogI2lmbmRlZiBDRkZSTUxfSF8KICNkZWZpbmUgQ0ZGUk1MX0hfCiAjaW5jbHVkZSA8bmV0L2NhaWYvY2FpZl9sYXllci5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogCiBzdHJ1Y3QgY2Zmcm1sOwotc3RydWN0IGNmbGF5ZXIgKmNmZnJtbF9jcmVhdGUodTE2IHBoeWlkLCBib29sIERvRkNTKTsKK3N0cnVjdCBjZmxheWVyICpjZmZybWxfY3JlYXRlKHUxNiBwaHlpZCwgYm9vbCB1c2VfZmNzKTsKK3ZvaWQgY2Zmcm1sX2ZyZWUoc3RydWN0IGNmbGF5ZXIgKmxheXIpOwogdm9pZCBjZmZybWxfc2V0X3VwbGF5ZXIoc3RydWN0IGNmbGF5ZXIgKnRoaXMsIHN0cnVjdCBjZmxheWVyICp1cCk7CiB2b2lkIGNmZnJtbF9zZXRfZG5sYXllcihzdHJ1Y3QgY2ZsYXllciAqdGhpcywgc3RydWN0IGNmbGF5ZXIgKmRuKTsKK3ZvaWQgY2Zmcm1sX3B1dChzdHJ1Y3QgY2ZsYXllciAqbGF5cik7Cit2b2lkIGNmZnJtbF9ob2xkKHN0cnVjdCBjZmxheWVyICpsYXlyKTsKK2ludCBjZmZybWxfcmVmY250X3JlYWQoc3RydWN0IGNmbGF5ZXIgKmxheXIpOwogCiAjZW5kaWYgLyogQ0ZGUk1MX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jYWlmL2NmbXV4bC5oIGIvaW5jbHVkZS9uZXQvY2FpZi9jZm11eGwuaAppbmRleCA0ZTFiNGYzLi41ODQ3YTE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9jYWlmL2NmbXV4bC5oCisrKyBiL2luY2x1ZGUvbmV0L2NhaWYvY2ZtdXhsLmgKQEAgLTE2LDcgKzE2LDUgQEAKIHN0cnVjdCBjZmxheWVyICpjZm11eGxfcmVtb3ZlX2RubGF5ZXIoc3RydWN0IGNmbGF5ZXIgKmxheXIsIHU4IHBoeWlkKTsKIGludCBjZm11eGxfc2V0X2RubGF5ZXIoc3RydWN0IGNmbGF5ZXIgKmxheXIsIHN0cnVjdCBjZmxheWVyICp1cCwgdTggcGh5aWQpOwogc3RydWN0IGNmbGF5ZXIgKmNmbXV4bF9yZW1vdmVfdXBsYXllcihzdHJ1Y3QgY2ZsYXllciAqbGF5ciwgdTggbGlua2lkKTsKLWJvb2wgY2ZtdXhsX2lzX3BoeV9pbnVzZShzdHJ1Y3QgY2ZsYXllciAqbGF5ciwgdTggcGh5aWQpOwotdTggY2ZtdXhsX2dldF9waHlpZChzdHJ1Y3QgY2ZsYXllciAqbGF5ciwgdTggY2hhbm5lbF9pZCk7CiAKICNlbmRpZgkJCQkvKiBDRk1VWExfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NhaWYvY2Zwa3QuaCBiL2luY2x1ZGUvbmV0L2NhaWYvY2Zwa3QuaAppbmRleCBmYmM2ODFiLi42YmQyMDBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9jYWlmL2NmcGt0LmgKKysrIGIvaW5jbHVkZS9uZXQvY2FpZi9jZnBrdC5oCkBAIC0xNiwxMiArMTYsNiBAQAogICovCiBzdHJ1Y3QgY2Zwa3QgKmNmcGt0X2NyZWF0ZSh1MTYgbGVuKTsKIAotLyogQ3JlYXRlIGEgQ0FJRiBwYWNrZXQuCi0gKiBkYXRhIERhdGEgdG8gY29weS4KLSAqIGxlbiBMZW5ndGggb2YgcGFja2V0IHRvIGJlIGNyZWF0ZWQKLSAqIEByZXR1cm4gTmV3IHBhY2tldC4KLSAqLwotc3RydWN0IGNmcGt0ICpjZnBrdF9jcmVhdGVfdXBsaW5rKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pOwogLyoKICAqIERlc3Ryb3kgYSBDQUlGIFBhY2tldC4KICAqIHBrdCBQYWNrZXQgdG8gYmUgZGVzdG95ZWQuCkBAIC0xODEsMjIgKzE3NSw2IEBACiAJCXUxNiAoKml0ZXJfZnVuYykodTE2IGNoa3MsIHZvaWQgKmJ1ZiwgdTE2IGxlbiksCiAJCXUxNiBkYXRhKTsKIAotLyogQXBwZW5kIGJ5IGdpdmluZyB1c2VyIGFjY2VzcyB0byBwYWNrZXQgYnVmZmVyCi0gKiBjZnBrdCBQYWNrZXQgdG8gYXBwZW5kIHRvCi0gKiBidWYgQnVmZmVyIGluc2lkZSBwa3QgdGhhdCB1c2VyIHNoYWxsIGNvcHkgZGF0YSBpbnRvCi0gKiBidWZsZW4gTGVuZ3RoIG9mIGJ1ZmZlciBhbmQgbnVtYmVyIG9mIGJ5dGVzIGFkZGVkIHRvIHBhY2tldAotICogQHJldHVybiAwIG9uIGVycm9yLCAxIG9uIHN1Y2Nlc3MKLSAqLwotaW50IGNmcGt0X3Jhd19hcHBlbmQoc3RydWN0IGNmcGt0ICpjZnBrdCwgdm9pZCAqKmJ1ZiwgdW5zaWduZWQgaW50IGJ1Zmxlbik7Ci0KLS8qIEV4dHJhY3QgYnkgZ2l2aW5nIHVzZXIgYWNjZXNzIHRvIHBhY2tldCBidWZmZXIKLSAqIGNmcGt0IFBhY2tldCB0byBleHRyYWN0IGZyb20KLSAqIGJ1ZiBCdWZmZXIgaW5zaWRlIHBrdCB0aGF0IHVzZXIgc2hhbGwgY29weSBkYXRhIGZyb20KLSAqIGJ1ZmxlbiBMZW5ndGggb2YgYnVmZmVyIGFuZCBudW1iZXIgb2YgYnl0ZXMgcmVtb3ZlZCBmcm9tIHBhY2tldAotICogQHJldHVybiAwIG9uIGVycm9yLCAxIG9uIHN1Y2Nlc3MKLSAqLwotaW50IGNmcGt0X3Jhd19leHRyYWN0KHN0cnVjdCBjZnBrdCAqY2Zwa3QsIHZvaWQgKipidWYsIHVuc2lnbmVkIGludCBidWZsZW4pOwotCiAvKiBNYXAgZnJvbSBhICJuYXRpdmUiIHBhY2tldCAoZS5nLiBMaW51eCBTb2NrZXQgQnVmZmVyKSB0byBhIENBSUYgcGFja2V0LgogICogIGRpciAtIERpcmVjdGlvbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhpcyBwYWNrZXQgaXMgdG8gYmUgc2VudCBvciByZWNlaXZlZC4KICAqICBuYXRpdmVwa3QgIC0gVGhlIG5hdGl2ZSBwYWNrZXQgdG8gYmUgdHJhbnNmb3JtZWQgdG8gYSBDQUlGIHBhY2tldApAQCAtMjEwLDU5ICsxODgsNiBAQAogICovCiB2b2lkICpjZnBrdF90b25hdGl2ZShzdHJ1Y3QgY2Zwa3QgKnBrdCk7CiAKLS8qCi0gKiBJbnNlcnQgYSBwYWNrZXQgaW4gdGhlIHBhY2tldCBxdWV1ZS4KLSAqIHBrdHEgUGFja2V0IHF1ZXVlIHRvIGluc2VydCBpbnRvCi0gKiBwa3QgUGFja2V0IHRvIGJlIGluc2VydGVkIGluIHF1ZXVlCi0gKiBwcmlvIFByaW9yaXR5IG9mIHBhY2tldAotICovCi12b2lkIGNmcGt0X3F1ZXVlKHN0cnVjdCBjZnBrdHEgKnBrdHEsIHN0cnVjdCBjZnBrdCAqcGt0LAotCQkgdW5zaWduZWQgc2hvcnQgcHJpbyk7Ci0KLS8qCi0gKiBSZW1vdmUgYSBwYWNrZXQgZnJvbSB0aGUgcGFja2V0IHF1ZXVlLgotICogcGt0cSBQYWNrZXQgcXVldWUgdG8gZmV0Y2ggcGFja2V0cyBmcm9tLgotICogQHJldHVybiBEZXF1ZXVlZCBwYWNrZXQuCi0gKi8KLXN0cnVjdCBjZnBrdCAqY2Zwa3RfZGVxdWV1ZShzdHJ1Y3QgY2Zwa3RxICpwa3RxKTsKLQotLyoKLSAqIFBlZWsgaW50byBhIHBhY2tldCBmcm9tIHRoZSBwYWNrZXQgcXVldWUuCi0gKiBwa3RxIFBhY2tldCBxdWV1ZSB0byBmZXRjaCBwYWNrZXRzIGZyb20uCi0gKiBAcmV0dXJuIFBlZWtlZCBwYWNrZXQuCi0gKi8KLXN0cnVjdCBjZnBrdCAqY2Zwa3RfcXBlZWsoc3RydWN0IGNmcGt0cSAqcGt0cSk7Ci0KLS8qCi0gKiBJbml0aWF0ZXMgdGhlIHBhY2tldCBxdWV1ZS4KLSAqIEByZXR1cm4gUG9pbnRlciB0byBuZXcgcGFja2V0IHF1ZXVlLgotICovCi1zdHJ1Y3QgY2Zwa3RxICpjZnBrdHFfY3JlYXRlKHZvaWQpOwotCi0vKgotICogR2V0IHRoZSBudW1iZXIgb2YgcGFja2V0cyBpbiB0aGUgcXVldWUuCi0gKiBwa3RxIFBhY2tldCBxdWV1ZSB0byBmZXRjaCBjb3VudCBmcm9tLgotICogQHJldHVybiBOdW1iZXIgb2YgcGFja2V0cyBpbiBxdWV1ZS4KLSAqLwotaW50IGNmcGt0X3Fjb3VudChzdHJ1Y3QgY2Zwa3RxICpwa3RxKTsKLQotLyoKLSAqIFB1dCBjb250ZW50IG9mIHBhY2tldCBpbnRvIGJ1ZmZlciBmb3IgZGVidWdpbmcgcHVycG9zZXMuCi0gKiBwa3QgUGFja2V0IHRvIGNvcHkgZGF0YSBmcm9tCi0gKiBidWYgQnVmZmVyIHRvIGNvcHkgZGF0YSBpbnRvCi0gKiBidWZsZW4gTGVuZ3RoIG9mIGRhdGEgdG8gY29weQotICogQHJldHVybiBQb2ludGVyIHRvIGNvcGllZCBkYXRhCi0gKi8KLWNoYXIgKmNmcGt0X2xvZ19wa3Qoc3RydWN0IGNmcGt0ICpwa3QsIGNoYXIgKmJ1ZiwgaW50IGJ1Zmxlbik7Ci0KLS8qCi0gKiBDbG9uZXMgYSBwYWNrZXQgYW5kIHJlbGVhc2VzIHRoZSBvcmlnaW5hbCBwYWNrZXQuCi0gKiBUaGlzIGlzIHVzZWQgZm9yIHRha2luZyBvd25lcnNoaXAgb2YgYSBwYWNrZXQgZS5nIHF1ZXVlaW5nLgotICogcGt0IFBhY2tldCB0byBjbG9uZSBhbmQgcmVsZWFzZS4KLSAqIEByZXR1cm4gQ2xvbmVkIHBhY2tldC4KLSAqLwotc3RydWN0IGNmcGt0ICpjZnBrdF9jbG9uZV9yZWxlYXNlKHN0cnVjdCBjZnBrdCAqcGt0KTsKLQogCiAvKgogICogUmV0dXJucyBwYWNrZXQgaW5mb3JtYXRpb24gZm9yIGEgcGFja2V0LgpAQCAtMjcwLDUgKzE5NSw0IEBACiAgKiBAcmV0dXJuIFBhY2tldCBpbmZvcm1hdGlvbgogICovCiBzdHJ1Y3QgY2FpZl9wYXlsb2FkX2luZm8gKmNmcGt0X2luZm8oc3RydWN0IGNmcGt0ICpwa3QpOwotLyohIEB9ICovCiAjZW5kaWYJCQkJLyogQ0ZQS1RfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NhaWYvY2ZzcnZsLmggYi9pbmNsdWRlL25ldC9jYWlmL2Nmc3J2bC5oCmluZGV4IGIxZmE4N2UuLjBmNTkwNTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2NhaWYvY2ZzcnZsLmgKKysrIGIvaW5jbHVkZS9uZXQvY2FpZi9jZnNydmwuaApAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3QuaD4KIAogc3RydWN0IGNmc3J2bCB7CiAJc3RydWN0IGNmbGF5ZXIgbGF5ZXI7CkBAIC0xNywxMiArMTgsMTMgQEAKIAlib29sIHBoeV9mbG93X29uOwogCWJvb2wgbW9kZW1fZmxvd19vbjsKIAlib29sIHN1cHBvcnRzX2Zsb3djdHJsOwotCXZvaWQgKCpyZWxlYXNlKShzdHJ1Y3Qga3JlZiAqKTsKKwl2b2lkICgqcmVsZWFzZSkoc3RydWN0IGNmbGF5ZXIgKmxheWVyKTsKIAlzdHJ1Y3QgZGV2X2luZm8gZGV2X2luZm87Ci0Jc3RydWN0IGtyZWYgcmVmOworCXZvaWQgKCpob2xkKShzdHJ1Y3QgY2ZsYXllciAqbHlyKTsKKwl2b2lkICgqcHV0KShzdHJ1Y3QgY2ZsYXllciAqbHlyKTsKKwlzdHJ1Y3QgcmN1X2hlYWQgcmN1OwogfTsKIAotdm9pZCBjZnNydmxfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZik7CiBzdHJ1Y3QgY2ZsYXllciAqY2Z2ZWlfY3JlYXRlKHU4IGxpbmtpZCwgc3RydWN0IGRldl9pbmZvICpkZXZfaW5mbyk7CiBzdHJ1Y3QgY2ZsYXllciAqY2ZkZ21sX2NyZWF0ZSh1OCBsaW5raWQsIHN0cnVjdCBkZXZfaW5mbyAqZGV2X2luZm8pOwogc3RydWN0IGNmbGF5ZXIgKmNmdXRpbGxfY3JlYXRlKHU4IGxpbmtpZCwgc3RydWN0IGRldl9pbmZvICpkZXZfaW5mbyk7CkBAIC0zMCw4ICszMiwxMiBAQAogc3RydWN0IGNmbGF5ZXIgKmNmcmZtbF9jcmVhdGUodTggbGlua2lkLCBzdHJ1Y3QgZGV2X2luZm8gKmRldl9pbmZvLAogCQkJCWludCBtdHVfc2l6ZSk7CiBzdHJ1Y3QgY2ZsYXllciAqY2ZkYmdsX2NyZWF0ZSh1OCBsaW5raWQsIHN0cnVjdCBkZXZfaW5mbyAqZGV2X2luZm8pOworCit2b2lkIGNmc3J2bF9jdHJsY21kKHN0cnVjdCBjZmxheWVyICpsYXlyLCBlbnVtIGNhaWZfY3RybGNtZCBjdHJsLAorCQkgICAgIGludCBwaHlpZCk7CisKIGJvb2wgY2ZzcnZsX3BoeWlkX21hdGNoKHN0cnVjdCBjZmxheWVyICpsYXllciwgaW50IHBoeWlkKTsKLXZvaWQgY2ZzZXJ2bF9kZXN0cm95KHN0cnVjdCBjZmxheWVyICpsYXllcik7CisKIHZvaWQgY2ZzcnZsX2luaXQoc3RydWN0IGNmc3J2bCAqc2VydmljZSwKIAkJCXU4IGNoYW5uZWxfaWQsCiAJCQlzdHJ1Y3QgZGV2X2luZm8gKmRldl9pbmZvLApAQCAtNDEsMjMgKzQ3LDE5IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjZnNydmxfZ2V0KHN0cnVjdCBjZmxheWVyICpsYXlyKQogewotCXN0cnVjdCBjZnNydmwgKnM7Ci0JaWYgKGxheXIgPT0gTlVMTCkKKwlzdHJ1Y3QgY2ZzcnZsICpzID0gY29udGFpbmVyX29mKGxheXIsIHN0cnVjdCBjZnNydmwsIGxheWVyKTsKKwlpZiAobGF5ciA9PSBOVUxMIHx8IGxheXItPnVwID09IE5VTEwgfHwgcy0+aG9sZCA9PSBOVUxMKQogCQlyZXR1cm47Ci0JcyA9IGNvbnRhaW5lcl9vZihsYXlyLCBzdHJ1Y3QgY2ZzcnZsLCBsYXllcik7Ci0Ja3JlZl9nZXQoJnMtPnJlZik7CisKKwlzLT5ob2xkKGxheXItPnVwKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNmc3J2bF9wdXQoc3RydWN0IGNmbGF5ZXIgKmxheXIpCiB7Ci0Jc3RydWN0IGNmc3J2bCAqczsKLQlpZiAobGF5ciA9PSBOVUxMKQorCXN0cnVjdCBjZnNydmwgKnMgPSBjb250YWluZXJfb2YobGF5ciwgc3RydWN0IGNmc3J2bCwgbGF5ZXIpOworCWlmIChsYXlyID09IE5VTEwgfHwgbGF5ci0+dXAgPT0gTlVMTCB8fCBzLT5ob2xkID09IE5VTEwpCiAJCXJldHVybjsKLQlzID0gY29udGFpbmVyX29mKGxheXIsIHN0cnVjdCBjZnNydmwsIGxheWVyKTsKIAotCVdBUk5fT04oIXMtPnJlbGVhc2UpOwotCWlmIChzLT5yZWxlYXNlKQotCQlrcmVmX3B1dCgmcy0+cmVmLCBzLT5yZWxlYXNlKTsKKwlzLT5wdXQobGF5ci0+dXApOwogfQotCiAjZW5kaWYJCQkJLyogQ0ZTUlZMX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaAppbmRleCBiMmI5ZDI4Li5iZmQ2NTU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCisrKyBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmgKQEAgLTM4Nyw2ICszODcsNyBAQAogICogQGxpc3Rlbl9pbnRlcnZhbDogbGlzdGVuIGludGVydmFsIG9yIC0xIGZvciBubyBjaGFuZ2UKICAqIEBhaWQ6IEFJRCBvciB6ZXJvIGZvciBubyBjaGFuZ2UKICAqIEBwbGlua19hY3Rpb246IHBsaW5rIGFjdGlvbiB0byB0YWtlCisgKiBAcGxpbmtfc3RhdGU6IHNldCB0aGUgcGVlciBsaW5rIHN0YXRlIGZvciBhIHN0YXRpb24KICAqIEBodF9jYXBhOiBIVCBjYXBhYmlsaXRpZXMgb2Ygc3RhdGlvbgogICovCiBzdHJ1Y3Qgc3RhdGlvbl9wYXJhbWV0ZXJzIHsKQEAgLTM5Nyw2ICszOTgsNyBAQAogCXUxNiBhaWQ7CiAJdTggc3VwcG9ydGVkX3JhdGVzX2xlbjsKIAl1OCBwbGlua19hY3Rpb247CisJdTggcGxpbmtfc3RhdGU7CiAJc3RydWN0IGllZWU4MDIxMV9odF9jYXAgKmh0X2NhcGE7CiB9OwogCkBAIC00MjIsNiArNDI0LDggQEAKICAqIEBTVEFUSU9OX0lORk9fUlhfRFJPUF9NSVNDOiBAcnhfZHJvcHBlZF9taXNjIGZpbGxlZAogICogQFNUQVRJT05fSU5GT19TSUdOQUxfQVZHOiBAc2lnbmFsX2F2ZyBmaWxsZWQKICAqIEBTVEFUSU9OX0lORk9fUlhfQklUUkFURTogQHJ4cmF0ZSBmaWVsZHMgYXJlIGZpbGxlZAorICogQFNUQVRJT05fSU5GT19CU1NfUEFSQU06IEBic3NfcGFyYW0gZmlsbGVkCisgKiBAU1RBVElPTl9JTkZPX0NPTk5FQ1RFRF9USU1FOiBAY29ubmVjdGVkX3RpbWUgZmlsbGVkCiAgKi8KIGVudW0gc3RhdGlvbl9pbmZvX2ZsYWdzIHsKIAlTVEFUSU9OX0lORk9fSU5BQ1RJVkVfVElNRQk9IDE8PDAsCkBAIC00MzksNiArNDQzLDggQEAKIAlTVEFUSU9OX0lORk9fUlhfRFJPUF9NSVNDCT0gMTw8MTIsCiAJU1RBVElPTl9JTkZPX1NJR05BTF9BVkcJCT0gMTw8MTMsCiAJU1RBVElPTl9JTkZPX1JYX0JJVFJBVEUJCT0gMTw8MTQsCisJU1RBVElPTl9JTkZPX0JTU19QQVJBTSAgICAgICAgICA9IDE8PDE1LAorCVNUQVRJT05fSU5GT19DT05ORUNURURfVElNRQk9IDE8PDE2CiB9OwogCiAvKioKQEAgLTQ3MywxMSArNDc5LDQzIEBACiB9OwogCiAvKioKKyAqIGVudW0gc3RhdGlvbl9pbmZvX3JhdGVfZmxhZ3MgLSBiaXRyYXRlIGluZm8gZmxhZ3MKKyAqCisgKiBVc2VkIGJ5IHRoZSBkcml2ZXIgdG8gaW5kaWNhdGUgdGhlIHNwZWNpZmljIHJhdGUgdHJhbnNtaXNzaW9uCisgKiB0eXBlIGZvciA4MDIuMTFuIHRyYW5zbWlzc2lvbnMuCisgKgorICogQEJTU19QQVJBTV9GTEFHU19DVFNfUFJPVDogd2hldGhlciBDVFMgcHJvdGVjdGlvbiBpcyBlbmFibGVkCisgKiBAQlNTX1BBUkFNX0ZMQUdTX1NIT1JUX1BSRUFNQkxFOiB3aGV0aGVyIHNob3J0IHByZWFtYmxlIGlzIGVuYWJsZWQKKyAqIEBCU1NfUEFSQU1fRkxBR1NfU0hPUlRfU0xPVF9USU1FOiB3aGV0aGVyIHNob3J0IHNsb3QgdGltZSBpcyBlbmFibGVkCisgKi8KK2VudW0gYnNzX3BhcmFtX2ZsYWdzIHsKKwlCU1NfUEFSQU1fRkxBR1NfQ1RTX1BST1QJPSAxPDwwLAorCUJTU19QQVJBTV9GTEFHU19TSE9SVF9QUkVBTUJMRQk9IDE8PDEsCisJQlNTX1BBUkFNX0ZMQUdTX1NIT1JUX1NMT1RfVElNRQk9IDE8PDIsCit9OworCisvKioKKyAqIHN0cnVjdCBzdGFfYnNzX3BhcmFtZXRlcnMgLSBCU1MgcGFyYW1ldGVycyBmb3IgdGhlIGF0dGFjaGVkIHN0YXRpb24KKyAqCisgKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudGx5IGFzc29jaWF0ZWQgQlNTCisgKgorICogQGZsYWdzOiBiaXRmbGFnIG9mIGZsYWdzIGZyb20gJmVudW0gYnNzX3BhcmFtX2ZsYWdzCisgKiBAZHRpbV9wZXJpb2Q6IERUSU0gcGVyaW9kIGZvciB0aGUgQlNTCisgKiBAYmVhY29uX2ludGVydmFsOiBiZWFjb24gaW50ZXJ2YWwKKyAqLworc3RydWN0IHN0YV9ic3NfcGFyYW1ldGVycyB7CisJdTggZmxhZ3M7CisJdTggZHRpbV9wZXJpb2Q7CisJdTE2IGJlYWNvbl9pbnRlcnZhbDsKK307CisKKy8qKgogICogc3RydWN0IHN0YXRpb25faW5mbyAtIHN0YXRpb24gaW5mb3JtYXRpb24KICAqCiAgKiBTdGF0aW9uIGluZm9ybWF0aW9uIGZpbGxlZCBieSBkcml2ZXIgZm9yIGdldF9zdGF0aW9uKCkgYW5kIGR1bXBfc3RhdGlvbi4KICAqCiAgKiBAZmlsbGVkOiBiaXRmbGFnIG9mIGZsYWdzIGZyb20gJmVudW0gc3RhdGlvbl9pbmZvX2ZsYWdzCisgKiBAY29ubmVjdGVkX3RpbWU6IHRpbWUoaW4gc2Vjcykgc2luY2UgYSBzdGF0aW9uIGlzIGxhc3QgY29ubmVjdGVkCiAgKiBAaW5hY3RpdmVfdGltZTogdGltZSBzaW5jZSBsYXN0IHN0YXRpb24gYWN0aXZpdHkgKHR4L3J4KSBpbiBtaWxsaXNlY29uZHMKICAqIEByeF9ieXRlczogYnl0ZXMgcmVjZWl2ZWQgZnJvbSB0aGlzIHN0YXRpb24KICAqIEB0eF9ieXRlczogYnl0ZXMgdHJhbnNtaXR0ZWQgdG8gdGhpcyBzdGF0aW9uCkBAIC01MDAsNiArNTM4LDcgQEAKICAqLwogc3RydWN0IHN0YXRpb25faW5mbyB7CiAJdTMyIGZpbGxlZDsKKwl1MzIgY29ubmVjdGVkX3RpbWU7CiAJdTMyIGluYWN0aXZlX3RpbWU7CiAJdTMyIHJ4X2J5dGVzOwogCXUzMiB0eF9ieXRlczsKQEAgLTUxNSw2ICs1NTQsNyBAQAogCXUzMiB0eF9yZXRyaWVzOwogCXUzMiB0eF9mYWlsZWQ7CiAJdTMyIHJ4X2Ryb3BwZWRfbWlzYzsKKwlzdHJ1Y3Qgc3RhX2Jzc19wYXJhbWV0ZXJzIGJzc19wYXJhbTsKIAogCWludCBnZW5lcmF0aW9uOwogfTsKQEAgLTY1NSw4ICs2OTUsMTAgQEAKICAqIEBtZXNoX2lkX2xlbjogbGVuZ3RoIG9mIHRoZSBtZXNoIElELCBhdCBsZWFzdCAxIGFuZCBhdCBtb3N0IDMyIGJ5dGVzCiAgKiBAcGF0aF9zZWxfcHJvdG86IHdoaWNoIHBhdGggc2VsZWN0aW9uIHByb3RvY29sIHRvIHVzZQogICogQHBhdGhfbWV0cmljOiB3aGljaCBtZXRyaWMgdG8gdXNlCi0gKiBAdmVuZG9yX2llOiB2ZW5kb3IgaW5mb3JtYXRpb24gZWxlbWVudHMgKG9wdGlvbmFsKQotICogQHZlbmRvcl9pZV9sZW46IGxlbmd0aCBvZiB2ZW5kb3IgaW5mb3JtYXRpb24gZWxlbWVudHMKKyAqIEBpZTogdmVuZG9yIGluZm9ybWF0aW9uIGVsZW1lbnRzIChvcHRpb25hbCkKKyAqIEBpZV9sZW46IGxlbmd0aCBvZiB2ZW5kb3IgaW5mb3JtYXRpb24gZWxlbWVudHMKKyAqIEBpc19hdXRoZW50aWNhdGVkOiB0aGlzIG1lc2ggcmVxdWlyZXMgYXV0aGVudGljYXRpb24KKyAqIEBpc19zZWN1cmU6IHRoaXMgbWVzaCB1c2VzIHNlY3VyaXR5CiAgKgogICogVGhlc2UgcGFyYW1ldGVycyBhcmUgZml4ZWQgd2hlbiB0aGUgbWVzaCBpcyBjcmVhdGVkLgogICovCkBAIC02NjUsOCArNzA3LDEwIEBACiAJdTggbWVzaF9pZF9sZW47CiAJdTggIHBhdGhfc2VsX3Byb3RvOwogCXU4ICBwYXRoX21ldHJpYzsKLQljb25zdCB1OCAqdmVuZG9yX2llOwotCXU4IHZlbmRvcl9pZV9sZW47CisJY29uc3QgdTggKmllOworCXU4IGllX2xlbjsKKwlib29sIGlzX2F1dGhlbnRpY2F0ZWQ7CisJYm9vbCBpc19zZWN1cmU7CiB9OwogCiAvKioKQEAgLTc1Myw2ICs3OTcsMzUgQEAKIH07CiAKIC8qKgorICogc3RydWN0IGNmZzgwMjExX3NjaGVkX3NjYW5fcmVxdWVzdCAtIHNjaGVkdWxlZCBzY2FuIHJlcXVlc3QgZGVzY3JpcHRpb24KKyAqCisgKiBAc3NpZHM6IFNTSURzIHRvIHNjYW4gZm9yIChwYXNzZWQgaW4gdGhlIHByb2JlX3JlcXMgaW4gYWN0aXZlIHNjYW5zKQorICogQG5fc3NpZHM6IG51bWJlciBvZiBTU0lEcworICogQG5fY2hhbm5lbHM6IHRvdGFsIG51bWJlciBvZiBjaGFubmVscyB0byBzY2FuCisgKiBAaW50ZXJ2YWw6IGludGVydmFsIGJldHdlZW4gZWFjaCBzY2hlZHVsZWQgc2NhbiBjeWNsZQorICogQGllOiBvcHRpb25hbCBpbmZvcm1hdGlvbiBlbGVtZW50KHMpIHRvIGFkZCBpbnRvIFByb2JlIFJlcXVlc3Qgb3IgJU5VTEwKKyAqIEBpZV9sZW46IGxlbmd0aCBvZiBpZSBpbiBvY3RldHMKKyAqIEB3aXBoeTogdGhlIHdpcGh5IHRoaXMgd2FzIGZvcgorICogQGRldjogdGhlIGludGVyZmFjZQorICogQGNoYW5uZWxzOiBjaGFubmVscyB0byBzY2FuCisgKi8KK3N0cnVjdCBjZmc4MDIxMV9zY2hlZF9zY2FuX3JlcXVlc3QgeworCXN0cnVjdCBjZmc4MDIxMV9zc2lkICpzc2lkczsKKwlpbnQgbl9zc2lkczsKKwl1MzIgbl9jaGFubmVsczsKKwl1MzIgaW50ZXJ2YWw7CisJY29uc3QgdTggKmllOworCXNpemVfdCBpZV9sZW47CisKKwkvKiBpbnRlcm5hbCAqLworCXN0cnVjdCB3aXBoeSAqd2lwaHk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKworCS8qIGtlZXAgbGFzdCAqLworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbHNbMF07Cit9OworCisvKioKICAqIGVudW0gY2ZnODAyMTFfc2lnbmFsX3R5cGUgLSBzaWduYWwgdHlwZQogICoKICAqIEBDRkc4MDIxMV9TSUdOQUxfVFlQRV9OT05FOiBubyBzaWduYWwgc3RyZW5ndGggaW5mb3JtYXRpb24gYXZhaWxhYmxlCkBAIC0xMDQ4LDYgKzExMjEsMzggQEAKIH07CiAKIC8qKgorICogc3RydWN0IGNmZzgwMjExX3dvd2xhbl90cmlnX3BrdF9wYXR0ZXJuIC0gcGFja2V0IHBhdHRlcm4KKyAqIEBtYXNrOiBiaXRtYXNrIHdoZXJlIHRvIG1hdGNoIHBhdHRlcm4gYW5kIHdoZXJlIHRvIGlnbm9yZSBieXRlcywKKyAqCW9uZSBiaXQgcGVyIGJ5dGUsIGluIHNhbWUgZm9ybWF0IGFzIG5sODAyMTEKKyAqIEBwYXR0ZXJuOiBieXRlcyB0byBtYXRjaCB3aGVyZSBiaXRtYXNrIGlzIDEKKyAqIEBwYXR0ZXJuX2xlbjogbGVuZ3RoIG9mIHBhdHRlcm4gKGluIGJ5dGVzKQorICoKKyAqIEludGVybmFsIG5vdGU6IEBtYXNrIGFuZCBAcGF0dGVybiBhcmUgYWxsb2NhdGVkIGluIG9uZSBjaHVuayBvZgorICogbWVtb3J5LCBmcmVlIEBtYXNrIG9ubHkhCisgKi8KK3N0cnVjdCBjZmc4MDIxMV93b3dsYW5fdHJpZ19wa3RfcGF0dGVybiB7CisJdTggKm1hc2ssICpwYXR0ZXJuOworCWludCBwYXR0ZXJuX2xlbjsKK307CisKKy8qKgorICogc3RydWN0IGNmZzgwMjExX3dvd2xhbiAtIFdha2Ugb24gV2lyZWxlc3MtTEFOIHN1cHBvcnQgaW5mbworICoKKyAqIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgdGhlIGVuYWJsZWQgV29XTEFOIHRyaWdnZXJzIGZvciB0aGUgZGV2aWNlLgorICogQGFueTogd2FrZSB1cCBvbiBhbnkgYWN0aXZpdHkgLS0gc3BlY2lhbCB0cmlnZ2VyIGlmIGRldmljZSBjb250aW51ZXMKKyAqCW9wZXJhdGluZyBhcyBub3JtYWwgZHVyaW5nIHN1c3BlbmQKKyAqIEBkaXNjb25uZWN0OiB3YWtlIHVwIGlmIGdldHRpbmcgZGlzY29ubmVjdGVkCisgKiBAbWFnaWNfcGt0OiB3YWtlIHVwIG9uIHJlY2VpdmluZyBtYWdpYyBwYWNrZXQKKyAqIEBwYXR0ZXJuczogd2FrZSB1cCBvbiByZWNlaXZpbmcgcGFja2V0IG1hdGNoaW5nIGEgcGF0dGVybgorICogQG5fcGF0dGVybnM6IG51bWJlciBvZiBwYXR0ZXJucworICovCitzdHJ1Y3QgY2ZnODAyMTFfd293bGFuIHsKKwlib29sIGFueSwgZGlzY29ubmVjdCwgbWFnaWNfcGt0OworCXN0cnVjdCBjZmc4MDIxMV93b3dsYW5fdHJpZ19wa3RfcGF0dGVybiAqcGF0dGVybnM7CisJaW50IG5fcGF0dGVybnM7Cit9OworCisvKioKICAqIHN0cnVjdCBjZmc4MDIxMV9vcHMgLSBiYWNrZW5kIGRlc2NyaXB0aW9uIGZvciB3aXJlbGVzcyBjb25maWd1cmF0aW9uCiAgKgogICogVGhpcyBzdHJ1Y3QgaXMgcmVnaXN0ZXJlZCBieSBmdWxsbWFjIGNhcmQgZHJpdmVycyBhbmQvb3Igd2lyZWxlc3Mgc3RhY2tzCkBAIC0xMDYwLDcgKzExNjUsOSBAQAogICogd2lyZWxlc3MgZXh0ZW5zaW9ucyBidXQgdGhpcyBpcyBzdWJqZWN0IHRvIHJlZXZhbHVhdGlvbiBhcyBzb29uIGFzIHRoaXMKICAqIGNvZGUgaXMgdXNlZCBtb3JlIHdpZGVseSBhbmQgd2UgaGF2ZSBhIGZpcnN0IHVzZXIgd2l0aG91dCB3ZXh0LgogICoKLSAqIEBzdXNwZW5kOiB3aXBoeSBkZXZpY2UgbmVlZHMgdG8gYmUgc3VzcGVuZGVkCisgKiBAc3VzcGVuZDogd2lwaHkgZGV2aWNlIG5lZWRzIHRvIGJlIHN1c3BlbmRlZC4gVGhlIHZhcmlhYmxlIEB3b3cgd2lsbAorICoJYmUgJU5VTEwgb3IgY29udGFpbiB0aGUgZW5hYmxlZCBXYWtlLW9uLVdpcmVsZXNzIHRyaWdnZXJzIHRoYXQgYXJlCisgKgljb25maWd1cmVkIGZvciB0aGUgZGV2aWNlLgogICogQHJlc3VtZTogd2lwaHkgZGV2aWNlIG5lZWRzIHRvIGJlIHJlc3VtZWQKICAqCiAgKiBAYWRkX3ZpcnR1YWxfaW50ZjogY3JlYXRlIGEgbmV3IHZpcnR1YWwgaW50ZXJmYWNlIHdpdGggdGhlIGdpdmVuIG5hbWUsCkBAIC0xMTg3LDYgKzEyOTQsMTAgQEAKICAqIEBzZXRfcG93ZXJfbWdtdDogQ29uZmlndXJlIFdMQU4gcG93ZXIgbWFuYWdlbWVudC4gQSB0aW1lb3V0IHZhbHVlIG9mIC0xCiAgKglhbGxvd3MgdGhlIGRyaXZlciB0byBhZGp1c3QgdGhlIGR5bmFtaWMgcHMgdGltZW91dCB2YWx1ZS4KICAqIEBzZXRfY3FtX3Jzc2lfY29uZmlnOiBDb25maWd1cmUgY29ubmVjdGlvbiBxdWFsaXR5IG1vbml0b3IgUlNTSSB0aHJlc2hvbGQuCisgKiBAc2NoZWRfc2Nhbl9zdGFydDogVGVsbCB0aGUgZHJpdmVyIHRvIHN0YXJ0IGEgc2NoZWR1bGVkIHNjYW4uCisgKiBAc2NoZWRfc2Nhbl9zdG9wOiBUZWxsIHRoZSBkcml2ZXIgdG8gc3RvcCBhbiBvbmdvaW5nIHNjaGVkdWxlZAorICoJc2Nhbi4gIFRoZSBkcml2ZXJfaW5pdGlhdGVkIGZsYWcgc3BlY2lmaWVzIHdoZXRoZXIgdGhlIGRyaXZlcgorICoJaXRzZWxmIGhhcyBpbmZvcm1lZCB0aGF0IHRoZSBzY2FuIGhhcyBzdG9wcGVkLgogICoKICAqIEBtZ210X2ZyYW1lX3JlZ2lzdGVyOiBOb3RpZnkgZHJpdmVyIHRoYXQgYSBtYW5hZ2VtZW50IGZyYW1lIHR5cGUgd2FzCiAgKglyZWdpc3RlcmVkLiBOb3RlIHRoYXQgdGhpcyBjYWxsYmFjayBtYXkgbm90IHNsZWVwLCBhbmQgY2Fubm90IHJ1bgpAQCAtMTIwNCw3ICsxMzE1LDcgQEAKICAqIEBnZXRfcmluZ3BhcmFtOiBHZXQgdHggYW5kIHJ4IHJpbmcgY3VycmVudCBhbmQgbWF4aW11bSBzaXplcy4KICAqLwogc3RydWN0IGNmZzgwMjExX29wcyB7Ci0JaW50CSgqc3VzcGVuZCkoc3RydWN0IHdpcGh5ICp3aXBoeSk7CisJaW50CSgqc3VzcGVuZCkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IGNmZzgwMjExX3dvd2xhbiAqd293KTsKIAlpbnQJKCpyZXN1bWUpKHN0cnVjdCB3aXBoeSAqd2lwaHkpOwogCiAJc3RydWN0IG5ldF9kZXZpY2UgKiAoKmFkZF92aXJ0dWFsX2ludGYpKHN0cnVjdCB3aXBoeSAqd2lwaHksCkBAIC0xMzczLDYgKzE0ODQsMTEgQEAKIAlpbnQJKCpzZXRfcmluZ3BhcmFtKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCB1MzIgdHgsIHUzMiByeCk7CiAJdm9pZAkoKmdldF9yaW5ncGFyYW0pKHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCQkJIHUzMiAqdHgsIHUzMiAqdHhfbWF4LCB1MzIgKnJ4LCB1MzIgKnJ4X21heCk7CisKKwlpbnQJKCpzY2hlZF9zY2FuX3N0YXJ0KShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGNmZzgwMjExX3NjaGVkX3NjYW5fcmVxdWVzdCAqcmVxdWVzdCk7CisJaW50CSgqc2NoZWRfc2Nhbl9zdG9wKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIH07CiAKIC8qCkBAIC0xNDA0LDYgKzE1MjAsMTAgQEAKICAqCWhpbnRzIHJlYWQgdGhlIGRvY3VtZW5hdGlvbiBmb3IgcmVndWxhdG9yeV9oaW50X2ZvdW5kX2JlYWNvbigpCiAgKiBAV0lQSFlfRkxBR19ORVROU19PSzogaWYgbm90IHNldCwgZG8gbm90IGFsbG93IGNoYW5naW5nIHRoZSBuZXRucyBvZiB0aGlzCiAgKgl3aXBoeSBhdCBhbGwKKyAqIEBXSVBIWV9GTEFHX0VORk9SQ0VfQ09NQklOQVRJT05TOiBTZXQgdGhpcyBmbGFnIHRvIGVuZm9yY2UgaW50ZXJmYWNlCisgKgljb21iaW5hdGlvbnMgZm9yIHRoaXMgZGV2aWNlLiBUaGlzIGZsYWcgaXMgdXNlZCBmb3IgYmFja3dhcmQKKyAqCWNvbXBhdGliaWxpdHkgb25seSB1bnRpbCBhbGwgZHJpdmVycyBhZHZlcnRpc2UgY29tYmluYXRpb25zIGFuZAorICoJdGhleSB3aWxsIGFsd2F5cyBiZSBlbmZvcmNlZC4KICAqIEBXSVBIWV9GTEFHX1BTX09OX0JZX0RFRkFVTFQ6IGlmIHNldCB0byB0cnVlLCBwb3dlcnNhdmUgd2lsbCBiZSBlbmFibGVkCiAgKglieSBkZWZhdWx0IC0tIHRoaXMgZmxhZyB3aWxsIGJlIHNldCBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCdzIGRlZmF1bHQKICAqCW9uIHdpcGh5X25ldygpLCBidXQgY2FuIGJlIGNoYW5nZWQgYnkgdGhlIGRyaXZlciBpZiBpdCBoYXMgYSBnb29kCkBAIC0xNDE1LDggKzE1MzUsOSBAQAogICoJY29udHJvbCBwb3J0IHByb3RvY29sIGV0aGVydHlwZS4gVGhlIGRldmljZSBhbHNvIGhvbm91cnMgdGhlCiAgKgljb250cm9sX3BvcnRfbm9fZW5jcnlwdCBmbGFnLgogICogQFdJUEhZX0ZMQUdfSUJTU19SU046IFRoZSBkZXZpY2Ugc3VwcG9ydHMgSUJTUyBSU04uCi0gKiBAV0lQSFlfRkxBR19TVVBQT1JUU19TRVBBUkFURV9ERUZBVUxUX0tFWVM6IFRoZSBkZXZpY2Ugc3VwcG9ydHMgc2VwYXJhdGUKLSAqCXVuaWNhc3QgYW5kIG11bHRpY2FzdCBUWCBrZXlzLgorICogQFdJUEhZX0ZMQUdfTUVTSF9BVVRIOiBUaGUgZGV2aWNlIHN1cHBvcnRzIG1lc2ggYXV0aGVudGljYXRpb24gYnkgcm91dGluZworICoJYXV0aCBmcmFtZXMgdG8gdXNlcnNwYWNlLiBTZWUgQE5MODAyMTFfTUVTSF9TRVRVUF9VU0VSU1BBQ0VfQVVUSC4KKyAqIEBXSVBIWV9GTEFHX1NDSEVEX1NDQU46IFRoZSBkZXZpY2Ugc3VwcG9ydHMgc2NoZWR1bGVkIHNjYW5zLgogICovCiBlbnVtIHdpcGh5X2ZsYWdzIHsKIAlXSVBIWV9GTEFHX0NVU1RPTV9SRUdVTEFUT1JZCQk9IEJJVCgwKSwKQEAgLTE0MjgsNyArMTU0OSw4MyBAQAogCVdJUEhZX0ZMQUdfNEFERFJfU1RBVElPTgkJPSBCSVQoNiksCiAJV0lQSFlfRkxBR19DT05UUk9MX1BPUlRfUFJPVE9DT0wJPSBCSVQoNyksCiAJV0lQSFlfRkxBR19JQlNTX1JTTgkJCT0gQklUKDgpLAotCVdJUEhZX0ZMQUdfU1VQUE9SVFNfU0VQQVJBVEVfREVGQVVMVF9LRVlTPSBCSVQoOSksCisJV0lQSFlfRkxBR19NRVNIX0FVVEgJCQk9IEJJVCgxMCksCisJV0lQSFlfRkxBR19TVVBQT1JUU19TQ0hFRF9TQ0FOCQk9IEJJVCgxMSksCisJV0lQSFlfRkxBR19FTkZPUkNFX0NPTUJJTkFUSU9OUwkJPSBCSVQoMTIpLAorfTsKKworLyoqCisgKiBzdHJ1Y3QgaWVlZTgwMjExX2lmYWNlX2xpbWl0IC0gbGltaXQgb24gY2VydGFpbiBpbnRlcmZhY2UgdHlwZXMKKyAqIEBtYXg6IG1heGltdW0gbnVtYmVyIG9mIGludGVyZmFjZXMgb2YgdGhlc2UgdHlwZXMKKyAqIEB0eXBlczogaW50ZXJmYWNlIHR5cGVzIChiaXRzKQorICovCitzdHJ1Y3QgaWVlZTgwMjExX2lmYWNlX2xpbWl0IHsKKwl1MTYgbWF4OworCXUxNiB0eXBlczsKK307CisKKy8qKgorICogc3RydWN0IGllZWU4MDIxMV9pZmFjZV9jb21iaW5hdGlvbiAtIHBvc3NpYmxlIGludGVyZmFjZSBjb21iaW5hdGlvbgorICogQGxpbWl0czogbGltaXRzIGZvciB0aGUgZ2l2ZW4gaW50ZXJmYWNlIHR5cGVzCisgKiBAbl9saW1pdHM6IG51bWJlciBvZiBsaW1pdGF0aW9ucworICogQG51bV9kaWZmZXJlbnRfY2hhbm5lbHM6IGNhbiB1c2UgdXAgdG8gdGhpcyBtYW55IGRpZmZlcmVudCBjaGFubmVscworICogQG1heF9pbnRlcmZhY2VzOiBtYXhpbXVtIG51bWJlciBvZiBpbnRlcmZhY2VzIGluIHRvdGFsIGFsbG93ZWQgaW4gdGhpcworICoJZ3JvdXAKKyAqIEBiZWFjb25faW50X2luZnJhX21hdGNoOiBJbiB0aGlzIGNvbWJpbmF0aW9uLCB0aGUgYmVhY29uIGludGVydmFscworICoJYmV0d2VlbiBpbmZyYXN0cnVjdHVyZSBhbmQgQVAgdHlwZXMgbXVzdCBtYXRjaC4gVGhpcyBpcyByZXF1aXJlZAorICoJb25seSBpbiBzcGVjaWFsIGNhc2VzLgorICoKKyAqIFRoZXNlIGV4YW1wbGVzIGNhbiBiZSBleHByZXNzZWQgYXMgZm9sbG93czoKKyAqCisgKiBBbGxvdyAjU1RBIDw9IDEsICNBUCA8PSAxLCBtYXRjaGluZyBCSSwgY2hhbm5lbHMgPSAxLCAyIHRvdGFsOgorICoKKyAqICBzdHJ1Y3QgaWVlZTgwMjExX2lmYWNlX2xpbWl0IGxpbWl0czFbXSA9IHsKKyAqCXsgLm1heCA9IDEsIC50eXBlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSwgfSwKKyAqCXsgLm1heCA9IDEsIC50eXBlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9BUH0sIH0sCisgKiAgfTsKKyAqICBzdHJ1Y3QgaWVlZTgwMjExX2lmYWNlX2NvbWJpbmF0aW9uIGNvbWJpbmF0aW9uMSA9IHsKKyAqCS5saW1pdHMgPSBsaW1pdHMxLAorICoJLm5fbGltaXRzID0gQVJSQVlfU0laRShsaW1pdHMxKSwKKyAqCS5tYXhfaW50ZXJmYWNlcyA9IDIsCisgKgkuYmVhY29uX2ludF9pbmZyYV9tYXRjaCA9IHRydWUsCisgKiAgfTsKKyAqCisgKgorICogQWxsb3cgI3tBUCwgUDJQLUdPfSA8PSA4LCBjaGFubmVscyA9IDEsIDggdG90YWw6CisgKgorICogIHN0cnVjdCBpZWVlODAyMTFfaWZhY2VfbGltaXQgbGltaXRzMltdID0geworICoJeyAubWF4ID0gOCwgLnR5cGVzID0gQklUKE5MODAyMTFfSUZUWVBFX0FQKSB8CisgKgkJCSAgICAgQklUKE5MODAyMTFfSUZUWVBFX1AyUF9HTyksIH0sCisgKiAgfTsKKyAqICBzdHJ1Y3QgaWVlZTgwMjExX2lmYWNlX2NvbWJpbmF0aW9uIGNvbWJpbmF0aW9uMiA9IHsKKyAqCS5saW1pdHMgPSBsaW1pdHMyLAorICoJLm5fbGltaXRzID0gQVJSQVlfU0laRShsaW1pdHMyKSwKKyAqCS5tYXhfaW50ZXJmYWNlcyA9IDgsCisgKgkubnVtX2RpZmZlcmVudF9jaGFubmVscyA9IDEsCisgKiAgfTsKKyAqCisgKgorICogQWxsb3cgI1NUQSA8PSAxLCAje1AyUC1jbGllbnQsUDJQLUdPfSA8PSAzIG9uIHR3byBjaGFubmVscywgNCB0b3RhbC4KKyAqIFRoaXMgYWxsb3dzIGZvciBhbiBpbmZyYXN0cnVjdHVyZSBjb25uZWN0aW9uIGFuZCB0aHJlZSBQMlAgY29ubmVjdGlvbnMuCisgKgorICogIHN0cnVjdCBpZWVlODAyMTFfaWZhY2VfbGltaXQgbGltaXRzM1tdID0geworICoJeyAubWF4ID0gMSwgLnR5cGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pLCB9LAorICoJeyAubWF4ID0gMywgLnR5cGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1AyUF9HTykgfAorICoJCQkgICAgIEJJVChOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UKSwgfSwKKyAqICB9OworICogIHN0cnVjdCBpZWVlODAyMTFfaWZhY2VfY29tYmluYXRpb24gY29tYmluYXRpb24zID0geworICoJLmxpbWl0cyA9IGxpbWl0czMsCisgKgkubl9saW1pdHMgPSBBUlJBWV9TSVpFKGxpbWl0czMpLAorICoJLm1heF9pbnRlcmZhY2VzID0gNCwKKyAqCS5udW1fZGlmZmVyZW50X2NoYW5uZWxzID0gMiwKKyAqICB9OworICovCitzdHJ1Y3QgaWVlZTgwMjExX2lmYWNlX2NvbWJpbmF0aW9uIHsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2lmYWNlX2xpbWl0ICpsaW1pdHM7CisJdTMyIG51bV9kaWZmZXJlbnRfY2hhbm5lbHM7CisJdTE2IG1heF9pbnRlcmZhY2VzOworCXU4IG5fbGltaXRzOworCWJvb2wgYmVhY29uX2ludF9pbmZyYV9tYXRjaDsKIH07CiAKIHN0cnVjdCBtYWNfYWRkcmVzcyB7CkBAIC0xNDQwLDYgKzE2MzcsMzggQEAKIH07CiAKIC8qKgorICogZW51bSB3aXBoeV93b3dsYW5fc3VwcG9ydF9mbGFncyAtIFdvV0xBTiBzdXBwb3J0IGZsYWdzCisgKiBAV0lQSFlfV09XTEFOX0FOWTogc3VwcG9ydHMgd2FrZXVwIGZvciB0aGUgc3BlY2lhbCAiYW55IgorICoJdHJpZ2dlciB0aGF0IGtlZXBzIHRoZSBkZXZpY2Ugb3BlcmF0aW5nIGFzLWlzIGFuZAorICoJd2FrZXMgdXAgdGhlIGhvc3Qgb24gYW55IGFjdGl2aXR5LCBmb3IgZXhhbXBsZSBhCisgKglyZWNlaXZlZCBwYWNrZXQgdGhhdCBwYXNzZWQgZmlsdGVyaW5nOyBub3RlIHRoYXQgdGhlCisgKglwYWNrZXQgc2hvdWxkIGJlIHByZXNlcnZlZCBpbiB0aGF0IGNhc2UKKyAqIEBXSVBIWV9XT1dMQU5fTUFHSUNfUEtUOiBzdXBwb3J0cyB3YWtldXAgb24gbWFnaWMgcGFja2V0CisgKgkoc2VlIG5sODAyMTEuaCkKKyAqIEBXSVBIWV9XT1dMQU5fRElTQ09OTkVDVDogc3VwcG9ydHMgd2FrZXVwIG9uIGRpc2Nvbm5lY3QKKyAqLworZW51bSB3aXBoeV93b3dsYW5fc3VwcG9ydF9mbGFncyB7CisJV0lQSFlfV09XTEFOX0FOWQk9IEJJVCgwKSwKKwlXSVBIWV9XT1dMQU5fTUFHSUNfUEtUCT0gQklUKDEpLAorCVdJUEhZX1dPV0xBTl9ESVNDT05ORUNUCT0gQklUKDIpLAorfTsKKworLyoqCisgKiBzdHJ1Y3Qgd2lwaHlfd293bGFuX3N1cHBvcnQgLSBXb1dMQU4gc3VwcG9ydCBkYXRhCisgKiBAZmxhZ3M6IHNlZSAmZW51bSB3aXBoeV93b3dsYW5fc3VwcG9ydF9mbGFncworICogQG5fcGF0dGVybnM6IG51bWJlciBvZiBzdXBwb3J0ZWQgd2FrZXVwIHBhdHRlcm5zCisgKgkoc2VlIG5sODAyMTEuaCBmb3IgdGhlIHBhdHRlcm4gZGVmaW5pdGlvbikKKyAqIEBwYXR0ZXJuX21heF9sZW46IG1heGltdW0gbGVuZ3RoIG9mIGVhY2ggcGF0dGVybgorICogQHBhdHRlcm5fbWluX2xlbjogbWluaW11bSBsZW5ndGggb2YgZWFjaCBwYXR0ZXJuCisgKi8KK3N0cnVjdCB3aXBoeV93b3dsYW5fc3VwcG9ydCB7CisJdTMyIGZsYWdzOworCWludCBuX3BhdHRlcm5zOworCWludCBwYXR0ZXJuX21heF9sZW47CisJaW50IHBhdHRlcm5fbWluX2xlbjsKK307CisKKy8qKgogICogc3RydWN0IHdpcGh5IC0gd2lyZWxlc3MgaGFyZHdhcmUgZGVzY3JpcHRpb24KICAqIEByZWdfbm90aWZpZXI6IHRoZSBkcml2ZXIncyByZWd1bGF0b3J5IG5vdGlmaWNhdGlvbiBjYWxsYmFjaywKICAqCW5vdGUgdGhhdCBpZiB5b3VyIGRyaXZlciB1c2VzIHdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5KCkKQEAgLTE0NzYsNiArMTcwNSwxMSBAQAogICogQHByaXY6IGRyaXZlciBwcml2YXRlIGRhdGEgKHNpemVkIGFjY29yZGluZyB0byB3aXBoeV9uZXcoKSBwYXJhbWV0ZXIpCiAgKiBAaW50ZXJmYWNlX21vZGVzOiBiaXRtYXNrIG9mIGludGVyZmFjZXMgdHlwZXMgdmFsaWQgZm9yIHRoaXMgd2lwaHksCiAgKgltdXN0IGJlIHNldCBieSBkcml2ZXIKKyAqIEBpZmFjZV9jb21iaW5hdGlvbnM6IFZhbGlkIGludGVyZmFjZSBjb21iaW5hdGlvbnMgYXJyYXksIHNob3VsZCBub3QKKyAqCWxpc3Qgc2luZ2xlIGludGVyZmFjZSB0eXBlcy4KKyAqIEBuX2lmYWNlX2NvbWJpbmF0aW9uczogbnVtYmVyIG9mIGVudHJpZXMgaW4gQGlmYWNlX2NvbWJpbmF0aW9ucyBhcnJheS4KKyAqIEBzb2Z0d2FyZV9pZnR5cGVzOiBiaXRtYXNrIG9mIHNvZnR3YXJlIGludGVyZmFjZSB0eXBlcywgdGhlc2UgYXJlIG5vdAorICoJc3ViamVjdCB0byBhbnkgcmVzdHJpY3Rpb25zIHNpbmNlIHRoZXkgYXJlIHB1cmVseSBtYW5hZ2VkIGluIFNXLgogICogQGZsYWdzOiB3aXBoeSBmbGFncywgc2VlICZlbnVtIHdpcGh5X2ZsYWdzCiAgKiBAYnNzX3ByaXZfc2l6ZTogZWFjaCBCU1Mgc3RydWN0IGhhcyBwcml2YXRlIGRhdGEgYWxsb2NhdGVkIHdpdGggaXQsCiAgKgl0aGlzIHZhcmlhYmxlIGRldGVybWluZXMgaXRzIHNpemUKQEAgLTE1MDYsNiArMTc0MCw4IEBACiAgKgogICogQG1heF9yZW1haW5fb25fY2hhbm5lbF9kdXJhdGlvbjogTWF4aW11bSB0aW1lIGEgcmVtYWluLW9uLWNoYW5uZWwgb3BlcmF0aW9uCiAgKgltYXkgcmVxdWVzdCwgaWYgaW1wbGVtZW50ZWQuCisgKgorICogQHdvd2xhbjogV29XTEFOIHN1cHBvcnQgaW5mb3JtYXRpb24KICAqLwogc3RydWN0IHdpcGh5IHsKIAkvKiBhc3NpZ24gdGhlc2UgZmllbGRzIGJlZm9yZSB5b3UgcmVnaXN0ZXIgdGhlIHdpcGh5ICovCkBAIC0xNTE4LDYgKzE3NTQsMTAgQEAKIAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhyeF9zdHlwZXMgKm1nbXRfc3R5cGVzOwogCisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9pZmFjZV9jb21iaW5hdGlvbiAqaWZhY2VfY29tYmluYXRpb25zOworCWludCBuX2lmYWNlX2NvbWJpbmF0aW9uczsKKwl1MTYgc29mdHdhcmVfaWZ0eXBlczsKKwogCXUxNiBuX2FkZHJlc3NlczsKIAogCS8qIFN1cHBvcnRlZCBpbnRlcmZhY2UgbW9kZXMsIE9SIHRvZ2V0aGVyIEJJVChOTDgwMjExX0lGVFlQRV8uLi4pICovCkBAIC0xNTQzLDYgKzE3ODMsOCBAQAogCWNoYXIgZndfdmVyc2lvbltFVEhUT09MX0JVU0lORk9fTEVOXTsKIAl1MzIgaHdfdmVyc2lvbjsKIAorCXN0cnVjdCB3aXBoeV93b3dsYW5fc3VwcG9ydCB3b3dsYW47CisKIAl1MTYgbWF4X3JlbWFpbl9vbl9jaGFubmVsX2R1cmF0aW9uOwogCiAJdTggbWF4X251bV9wbWtpZHM7CkBAIC0xNzI2LDYgKzE5NjgsOCBAQAogICogQG1nbXRfcmVnaXN0cmF0aW9uc19sb2NrOiBsb2NrIGZvciB0aGUgbGlzdAogICogQG10eDogbXV0ZXggdXNlZCB0byBsb2NrIGRhdGEgaW4gdGhpcyBzdHJ1Y3QKICAqIEBjbGVhbnVwX3dvcms6IHdvcmsgc3RydWN0IHVzZWQgZm9yIGNsZWFudXAgdGhhdCBjYW4ndCBiZSBkb25lIGRpcmVjdGx5CisgKiBAYmVhY29uX2ludGVydmFsOiBiZWFjb24gaW50ZXJ2YWwgdXNlZCBvbiB0aGlzIGRldmljZSBmb3IgdHJhbnNtaXR0aW5nCisgKgliZWFjb25zLCAwIHdoZW4gbm90IHZhbGlkCiAgKi8KIHN0cnVjdCB3aXJlbGVzc19kZXYgewogCXN0cnVjdCB3aXBoeSAqd2lwaHk7CkBAIC0xNzY2LDYgKzIwMTAsOCBAQAogCWJvb2wgcHM7CiAJaW50IHBzX3RpbWVvdXQ7CiAKKwlpbnQgYmVhY29uX2ludGVydmFsOworCiAjaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFQKIAkvKiB3ZXh0IGRhdGEgKi8KIAlzdHJ1Y3QgewpAQCAtMTk5MSwxMCArMjIzNywxMiBAQAogICogQGFkZHI6IFRoZSBkZXZpY2UgTUFDIGFkZHJlc3MuCiAgKiBAaWZ0eXBlOiBUaGUgZGV2aWNlIGludGVyZmFjZSB0eXBlLgogICogQGV4dHJhX2hlYWRyb29tOiBUaGUgaGFyZHdhcmUgZXh0cmEgaGVhZHJvb20gZm9yIFNLQnMgaW4gdGhlIEBsaXN0LgorICogQGhhc184MDIxMV9oZWFkZXI6IFNldCBpdCB0cnVlIGlmIFNLQiBpcyB3aXRoIElFRUUgODAyLjExIGhlYWRlci4KICAqLwogdm9pZCBpZWVlODAyMTFfYW1zZHVfdG9fODAyM3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCwKIAkJCSAgICAgIGNvbnN0IHU4ICphZGRyLCBlbnVtIG5sODAyMTFfaWZ0eXBlIGlmdHlwZSwKLQkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBleHRyYV9oZWFkcm9vbSk7CisJCQkgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgZXh0cmFfaGVhZHJvb20sCisJCQkgICAgICBib29sIGhhc184MDIxMV9oZWFkZXIpOwogCiAvKioKICAqIGNmZzgwMjExX2NsYXNzaWZ5ODAyMWQgLSBkZXRlcm1pbmUgdGhlIDgwMi4xcC8xZCB0YWcgZm9yIGEgZGF0YSBmcmFtZQpAQCAtMjIxNCw2ICsyNDYyLDI0IEBACiB2b2lkIGNmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXF1ZXN0LCBib29sIGFib3J0ZWQpOwogCiAvKioKKyAqIGNmZzgwMjExX3NjaGVkX3NjYW5fcmVzdWx0cyAtIG5vdGlmeSB0aGF0IG5ldyBzY2FuIHJlc3VsdHMgYXJlIGF2YWlsYWJsZQorICoKKyAqIEB3aXBoeTogdGhlIHdpcGh5IHdoaWNoIGdvdCBzY2hlZHVsZWQgc2NhbiByZXN1bHRzCisgKi8KK3ZvaWQgY2ZnODAyMTFfc2NoZWRfc2Nhbl9yZXN1bHRzKHN0cnVjdCB3aXBoeSAqd2lwaHkpOworCisvKioKKyAqIGNmZzgwMjExX3NjaGVkX3NjYW5fc3RvcHBlZCAtIG5vdGlmeSB0aGF0IHRoZSBzY2hlZHVsZWQgc2NhbiBoYXMgc3RvcHBlZAorICoKKyAqIEB3aXBoeTogdGhlIHdpcGh5IG9uIHdoaWNoIHRoZSBzY2hlZHVsZWQgc2NhbiBzdG9wcGVkCisgKgorICogVGhlIGRyaXZlciBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGluZm9ybSBjZmc4MDIxMSB0aGF0IHRoZQorICogc2NoZWR1bGVkIHNjYW4gaGFkIHRvIGJlIHN0b3BwZWQsIGZvciB3aGF0ZXZlciByZWFzb24uICBUaGUgZHJpdmVyCisgKiBpcyB0aGVuIGNhbGxlZCBiYWNrIHZpYSB0aGUgc2NoZWRfc2Nhbl9zdG9wIG9wZXJhdGlvbiB3aGVuIGRvbmUuCisgKi8KK3ZvaWQgY2ZnODAyMTFfc2NoZWRfc2Nhbl9zdG9wcGVkKHN0cnVjdCB3aXBoeSAqd2lwaHkpOworCisvKioKICAqIGNmZzgwMjExX2luZm9ybV9ic3NfZnJhbWUgLSBpbmZvcm0gY2ZnODAyMTEgb2YgYSByZWNlaXZlZCBCU1MgZnJhbWUKICAqCiAgKiBAd2lwaHk6IHRoZSB3aXBoeSByZXBvcnRpbmcgdGhlIEJTUwpAQCAtMjQ1MCw2ICsyNzE2LDIyIEBACiB2b2lkIGNmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCwgZ2ZwX3QgZ2ZwKTsKIAogLyoqCisgKiBjZmc4MDIxMV9ub3RpZnlfbmV3X2NhbmRpZGF0ZSAtIG5vdGlmeSBjZmc4MDIxMSBvZiBhIG5ldyBtZXNoIHBlZXIgY2FuZGlkYXRlCisgKgorICogQGRldjogbmV0d29yayBkZXZpY2UKKyAqIEBtYWNhZGRyOiB0aGUgTUFDIGFkZHJlc3Mgb2YgdGhlIG5ldyBjYW5kaWRhdGUKKyAqIEBpZTogaW5mb3JtYXRpb24gZWxlbWVudHMgYWR2ZXJ0aXNlZCBieSB0aGUgcGVlciBjYW5kaWRhdGUKKyAqIEBpZV9sZW46IGxlbmdodCBvZiB0aGUgaW5mb3JtYXRpb24gZWxlbWVudHMgYnVmZmVyCisgKiBAZ2ZwOiBhbGxvY2F0aW9uIGZsYWdzCisgKgorICogVGhpcyBmdW5jdGlvbiBub3RpZmllcyBjZmc4MDIxMSB0aGF0IHRoZSBtZXNoIHBlZXIgY2FuZGlkYXRlIGhhcyBiZWVuCisgKiBkZXRlY3RlZCwgbW9zdCBsaWtlbHkgdmlhIGEgYmVhY29uIG9yLCBsZXNzIGxpa2VseSwgdmlhIGEgcHJvYmUgcmVzcG9uc2UuCisgKiBjZmc4MDIxMSB0aGVuIHNlbmRzIGEgbm90aWZpY2F0aW9uIHRvIHVzZXJzcGFjZS4KKyAqLwordm9pZCBjZmc4MDIxMV9ub3RpZnlfbmV3X3BlZXJfY2FuZGlkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCWNvbnN0IHU4ICptYWNhZGRyLCBjb25zdCB1OCAqaWUsIHU4IGllX2xlbiwgZ2ZwX3QgZ2ZwKTsKKworLyoqCiAgKiBET0M6IFJGa2lsbCBpbnRlZ3JhdGlvbgogICoKICAqIFJGa2lsbCBpbnRlZ3JhdGlvbiBpbiBjZmc4MDIxMSBpcyBhbG1vc3QgaW52aXNpYmxlIHRvIGRyaXZlcnMsCkBAIC0yNjY3LDYgKzI5NDksMTUgQEAKIAkJICAgICAgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8sIGdmcF90IGdmcCk7CiAKIC8qKgorICogY2ZnODAyMTFfZGVsX3N0YSAtIG5vdGlmeSB1c2Vyc3BhY2UgYWJvdXQgZGVsZXRpb24gb2YgYSBzdGF0aW9uCisgKgorICogQGRldjogdGhlIG5ldGRldgorICogQG1hY19hZGRyOiB0aGUgc3RhdGlvbidzIGFkZHJlc3MKKyAqIEBnZnA6IGFsbG9jYXRpb24gZmxhZ3MKKyAqLwordm9pZCBjZmc4MDIxMV9kZWxfc3RhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICptYWNfYWRkciwgZ2ZwX3QgZ2ZwKTsKKworLyoqCiAgKiBjZmc4MDIxMV9yeF9tZ210IC0gbm90aWZpY2F0aW9uIG9mIHJlY2VpdmVkLCB1bnByb2Nlc3NlZCBtYW5hZ2VtZW50IGZyYW1lCiAgKiBAZGV2OiBuZXR3b3JrIGRldmljZQogICogQGZyZXE6IEZyZXF1ZW5jeSBvbiB3aGljaCB0aGUgZnJhbWUgd2FzIHJlY2VpdmVkIGluIE1IegpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY29tcGF0LmggYi9pbmNsdWRlL25ldC9jb21wYXQuaAppbmRleCAyOGQ1NDI4Li45ZWU3NWVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9jb21wYXQuaAorKysgYi9pbmNsdWRlL25ldC9jb21wYXQuaApAQCAtNDMsNiArNDMsOCBAQAogZXh0ZXJuIGludCBnZXRfY29tcGF0X21zZ2hkcihzdHJ1Y3QgbXNnaGRyICosIHN0cnVjdCBjb21wYXRfbXNnaGRyIF9fdXNlciAqKTsKIGV4dGVybiBpbnQgdmVyaWZ5X2NvbXBhdF9pb3ZlYyhzdHJ1Y3QgbXNnaGRyICosIHN0cnVjdCBpb3ZlYyAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwgaW50KTsKIGV4dGVybiBhc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c19zZW5kbXNnKGludCxzdHJ1Y3QgY29tcGF0X21zZ2hkciBfX3VzZXIgKix1bnNpZ25lZCk7CitleHRlcm4gYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfc2VuZG1tc2coaW50LCBzdHJ1Y3QgY29tcGF0X21tc2doZHIgX191c2VyICosCisJCQkJCSAgIHVuc2lnbmVkLCB1bnNpZ25lZCk7CiBleHRlcm4gYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfcmVjdm1zZyhpbnQsc3RydWN0IGNvbXBhdF9tc2doZHIgX191c2VyICosdW5zaWduZWQpOwogZXh0ZXJuIGFzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX3JlY3ZtbXNnKGludCwgc3RydWN0IGNvbXBhdF9tbXNnaGRyIF9fdXNlciAqLAogCQkJCQkgICB1bnNpZ25lZCwgdW5zaWduZWQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc3QuaCBiL2luY2x1ZGUvbmV0L2RzdC5oCmluZGV4IDc1Yjk1ZGYuLjA3YTA0MDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2RzdC5oCisrKyBiL2luY2x1ZGUvbmV0L2RzdC5oCkBAIC0xNiwxMyArMTYsNiBAQAogI2luY2x1ZGUgPG5ldC9uZWlnaGJvdXIuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAKLS8qCi0gKiAwIC0gbm8gZGVidWdnaW5nIG1lc3NhZ2VzCi0gKiAxIC0gcmFyZSBldmVudHMgYW5kIGJ1Z3MgKGRlZmF1bHQpCi0gKiAyIC0gdHJhY2UgbW9kZS4KLSAqLwotI2RlZmluZSBSVF9DQUNIRV9ERUJVRwkJMAotCiAjZGVmaW5lIERTVF9HQ19NSU4JKEhaLzEwKQogI2RlZmluZSBEU1RfR0NfSU5DCShIWi8yKQogI2RlZmluZSBEU1RfR0NfTUFYCSgxMjAqSFopCkBAIC05Miw4ICs4NSw2IEBACiAJfTsKIH07CiAKLSNpZmRlZiBfX0tFUk5FTF9fCi0KIGV4dGVybiB1MzIgKmRzdF9jb3dfbWV0cmljc19nZW5lcmljKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgdW5zaWduZWQgbG9uZyBvbGQpOwogZXh0ZXJuIGNvbnN0IHUzMiBkc3RfZGVmYXVsdF9tZXRyaWNzW1JUQVhfTUFYXTsKIApAQCAtMzUyLDcgKzM0Myw4IEBACiB9CiAKIGV4dGVybiBpbnQgZHN0X2Rpc2NhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1leHRlcm4gdm9pZCAqZHN0X2FsbG9jKHN0cnVjdCBkc3Rfb3BzICogb3BzLCBpbnQgaW5pdGlhbF9yZWYpOworZXh0ZXJuIHZvaWQgKmRzdF9hbGxvYyhzdHJ1Y3QgZHN0X29wcyAqIG9wcywgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgICAgIGludCBpbml0aWFsX3JlZiwgaW50IGluaXRpYWxfb2Jzb2xldGUsIGludCBmbGFncyk7CiBleHRlcm4gdm9pZCBfX2RzdF9mcmVlKHN0cnVjdCBkc3RfZW50cnkgKiBkc3QpOwogZXh0ZXJuIHN0cnVjdCBkc3RfZW50cnkgKmRzdF9kZXN0cm95KHN0cnVjdCBkc3RfZW50cnkgKiBkc3QpOwogCkBAIC00MzgsNiArNDMwLDUgQEAKIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBmbG93aSAqZmwsIHN0cnVjdCBzb2NrICpzaywKIAkJCQkgICAgIGludCBmbGFncyk7CiAjZW5kaWYKLSNlbmRpZgogCiAjZW5kaWYgLyogX05FVF9EU1RfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZmxvdy5oIGIvaW5jbHVkZS9uZXQvZmxvdy5oCmluZGV4IDdmZTVhMGYuLmM2ZDVmZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2Zsb3cuaAorKysgYi9pbmNsdWRlL25ldC9mbG93LmgKQEAgLTI2LDggKzI2LDggQEAKIAogdW5pb24gZmxvd2lfdWxpIHsKIAlzdHJ1Y3QgewotCQlfX2JlMTYJc3BvcnQ7CiAJCV9fYmUxNglkcG9ydDsKKwkJX19iZTE2CXNwb3J0OwogCX0gcG9ydHM7CiAKIAlzdHJ1Y3QgewpAQCAtMzYsOCArMzYsOCBAQAogCX0gaWNtcHQ7CiAKIAlzdHJ1Y3QgewotCQlfX2xlMTYJc3BvcnQ7CiAJCV9fbGUxNglkcG9ydDsKKwkJX19sZTE2CXNwb3J0OwogCX0gZG5wb3J0czsKIAogCV9fYmUzMgkJc3BpOwpAQCAtNzAsNiArNzAsMjcgQEAKICNkZWZpbmUgZmw0X2dyZV9rZXkJCXVsaS5ncmVfa2V5CiB9OwogCitzdGF0aWMgaW5saW5lIHZvaWQgZmxvd2k0X2luaXRfb3V0cHV0KHN0cnVjdCBmbG93aTQgKmZsNCwgaW50IG9pZiwKKwkJCQkgICAgICBfX3UzMiBtYXJrLCBfX3U4IHRvcywgX191OCBzY29wZSwKKwkJCQkgICAgICBfX3U4IHByb3RvLCBfX3U4IGZsYWdzLAorCQkJCSAgICAgIF9fYmUzMiBkYWRkciwgX19iZTMyIHNhZGRyLAorCQkJCSAgICAgIF9fYmUxNiBkcG9ydCwgX19iZTMyIHNwb3J0KQoreworCWZsNC0+Zmxvd2k0X29pZiA9IG9pZjsKKwlmbDQtPmZsb3dpNF9paWYgPSAwOworCWZsNC0+Zmxvd2k0X21hcmsgPSBtYXJrOworCWZsNC0+Zmxvd2k0X3RvcyA9IHRvczsKKwlmbDQtPmZsb3dpNF9zY29wZSA9IHNjb3BlOworCWZsNC0+Zmxvd2k0X3Byb3RvID0gcHJvdG87CisJZmw0LT5mbG93aTRfZmxhZ3MgPSBmbGFnczsKKwlmbDQtPmZsb3dpNF9zZWNpZCA9IDA7CisJZmw0LT5kYWRkciA9IGRhZGRyOworCWZsNC0+c2FkZHIgPSBzYWRkcjsKKwlmbDQtPmZsNF9kcG9ydCA9IGRwb3J0OworCWZsNC0+Zmw0X3Nwb3J0ID0gc3BvcnQ7Cit9CisJCQkJICAgICAgCisKIHN0cnVjdCBmbG93aTYgewogCXN0cnVjdCBmbG93aV9jb21tb24JX19mbF9jb21tb247CiAjZGVmaW5lIGZsb3dpNl9vaWYJCV9fZmxfY29tbW9uLmZsb3dpY19vaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2dhcnAuaCBiL2luY2x1ZGUvbmV0L2dhcnAuaAppbmRleCBmNGMyOTU5Li44MzRkOGFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9nYXJwLmgKKysrIGIvaW5jbHVkZS9uZXQvZ2FycC5oCkBAIC0xMDQsMTAgKzEwNCwxMiBAQAogCXN0cnVjdCBza19idWZmX2hlYWQJcXVldWU7CiAJc3RydWN0IHNrX2J1ZmYJCSpwZHU7CiAJc3RydWN0IHJiX3Jvb3QJCWdpZDsKKwlzdHJ1Y3QgcmN1X2hlYWQJCXJjdTsKIH07CiAKIHN0cnVjdCBnYXJwX3BvcnQgewogCXN0cnVjdCBnYXJwX2FwcGxpY2FudCBfX3JjdQkqYXBwbGljYW50c1tHQVJQX0FQUExJQ0FUSU9OX01BWCArIDFdOworCXN0cnVjdCByY3VfaGVhZAkJCXJjdTsKIH07CiAKIGV4dGVybiBpbnQJZ2FycF9yZWdpc3Rlcl9hcHBsaWNhdGlvbihzdHJ1Y3QgZ2FycF9hcHBsaWNhdGlvbiAqYXBwKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2dlbmV0bGluay5oIGIvaW5jbHVkZS9uZXQvZ2VuZXRsaW5rLmgKaW5kZXggYjRjN2MxYy4uZDQyMGYyOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZ2VuZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9uZXQvZ2VuZXRsaW5rLmgKQEAgLTI2MCw3ICsyNjAsNyBAQAogCiAvKioKICAqIGdlbm5sbXNnX2RhdGEgLSBoZWFkIG9mIG1lc3NhZ2UgcGF5bG9hZAotICogQGdubGg6IGdlbmV0bGluayBtZXNzc2FnZSBoZWFkZXIKKyAqIEBnbmxoOiBnZW5ldGxpbmsgbWVzc2FnZSBoZWFkZXIKICAqLwogc3RhdGljIGlubGluZSB2b2lkICpnZW5sbXNnX2RhdGEoY29uc3Qgc3RydWN0IGdlbmxtc2doZHIgKmdubGgpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pZl9pbmV0Ni5oIGIvaW5jbHVkZS9uZXQvaWZfaW5ldDYuaAppbmRleCBmY2NjMjE4Li4xMWNmMzczIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pZl9pbmV0Ni5oCisrKyBiL2luY2x1ZGUvbmV0L2lmX2luZXQ2LmgKQEAgLTMwLDggKzMwLDYgQEAKICNkZWZpbmUgSUZfUFJFRklYX09OTElOSwkweDAxCiAjZGVmaW5lIElGX1BSRUZJWF9BVVRPQ09ORgkweDAyCiAKLSNpZmRlZiBfX0tFUk5FTF9fCi0KIGVudW0gewogCUlORVQ2X0lGQUREUl9TVEFURV9EQUQsCiAJSU5FVDZfSUZBRERSX1NUQVRFX1BPU1REQUQsCkBAIC0xNTYsOCArMTU0LDggQEAKIHN0cnVjdCBpcHY2X2RldnN0YXQgewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeQkqcHJvY19kaXJfZW50cnk7CiAJREVGSU5FX1NOTVBfU1RBVChzdHJ1Y3QgaXBzdGF0c19taWIsIGlwdjYpOwotCURFRklORV9TTk1QX1NUQVQoc3RydWN0IGljbXB2Nl9taWIsIGljbXB2Nik7Ci0JREVGSU5FX1NOTVBfU1RBVChzdHJ1Y3QgaWNtcHY2bXNnX21pYiwgaWNtcHY2bXNnKTsKKwlERUZJTkVfU05NUF9TVEFUX0FUT01JQyhzdHJ1Y3QgaWNtcHY2X21pYl9kZXZpY2UsIGljbXB2NmRldik7CisJREVGSU5FX1NOTVBfU1RBVF9BVE9NSUMoc3RydWN0IGljbXB2Nm1zZ19taWJfZGV2aWNlLCBpY21wdjZtc2dkZXYpOwogfTsKIAogc3RydWN0IGluZXQ2X2RldiB7CkBAIC0xOTYsNyArMTk0LDcgQEAKIAlzdHJ1Y3QgcmN1X2hlYWQJCXJjdTsKIH07CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpcHY2X2V0aF9tY19tYXAoc3RydWN0IGluNl9hZGRyICphZGRyLCBjaGFyICpidWYpCitzdGF0aWMgaW5saW5lIHZvaWQgaXB2Nl9ldGhfbWNfbWFwKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwgY2hhciAqYnVmKQogewogCS8qCiAJICoJKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKwpAQCAtMjEwLDcgKzIwOCw3IEBACiAJbWVtY3B5KGJ1ZiArIDIsICZhZGRyLT5zNl9hZGRyMzJbM10sIHNpemVvZihfX3UzMikpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaXB2Nl90cl9tY19tYXAoc3RydWN0IGluNl9hZGRyICphZGRyLCBjaGFyICpidWYpCitzdGF0aWMgaW5saW5lIHZvaWQgaXB2Nl90cl9tY19tYXAoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLCBjaGFyICpidWYpCiB7CiAJLyogQWxsIG5vZGVzIEZGMDE6OjEsIEZGMDI6OjEsIEZGMDI6OjE6RkZ4eDp4eHh4ICovCiAKQEAgLTMwMyw0ICszMDEsMyBAQAogfQogCiAjZW5kaWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmggYi9pbmNsdWRlL25ldC9pbmV0Nl9jb25uZWN0aW9uX3NvY2suaAppbmRleCBmZjAxMzUwLi4zMjA3ZTU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0Nl9jb25uZWN0aW9uX3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9pbmV0Nl9jb25uZWN0aW9uX3NvY2suaApAQCAtNDEsNSArNDEsNSBAQAogCiBleHRlcm4gdm9pZCBpbmV0Nl9jc2tfYWRkcjJzb2NrYWRkcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIpOwogCi1leHRlcm4gaW50IGluZXQ2X2Nza194bWl0KHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBpbmV0Nl9jc2tfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2kgKmZsKTsKICNlbmRpZiAvKiBfSU5FVDZfQ09OTkVDVElPTl9TT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmggYi9pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oCmluZGV4IDZhYzRlM2IuLmU2ZGI2MmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaApAQCAtMzYsNyArMzYsNyBAQAogICogKGkuZS4gdGhpbmdzIHRoYXQgZGVwZW5kIG9uIHRoZSBhZGRyZXNzIGZhbWlseSkKICAqLwogc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyB7Ci0JaW50CSAgICAoKnF1ZXVlX3htaXQpKHN0cnVjdCBza19idWZmICpza2IpOworCWludAkgICAgKCpxdWV1ZV94bWl0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2kgKmZsKTsKIAl2b2lkCSAgICAoKnNlbmRfY2hlY2spKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAJaW50CSAgICAoKnJlYnVpbGRfaGVhZGVyKShzdHJ1Y3Qgc29jayAqc2spOwogCWludAkgICAgKCpjb25uX3JlcXVlc3QpKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CkBAIC0yNDksNyArMjQ5LDExIEBACiBleHRlcm4gaW50IGluZXRfY3NrX2dldF9wb3J0KHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgc251bSk7CiAKIGV4dGVybiBzdHJ1Y3QgZHN0X2VudHJ5KiBpbmV0X2Nza19yb3V0ZV9yZXEoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgICAgc3RydWN0IGZsb3dpNCAqZmw0LAogCQkJCQkgICAgY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTsKK2V4dGVybiBzdHJ1Y3QgZHN0X2VudHJ5KiBpbmV0X2Nza19yb3V0ZV9jaGlsZF9zb2NrKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJCSAgIHN0cnVjdCBzb2NrICpuZXdzaywKKwkJCQkJCSAgIGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbmV0X2Nza19yZXFza19xdWV1ZV9hZGQoc3RydWN0IHNvY2sgKnNrLAogCQkJCQkgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmggYi9pbmNsdWRlL25ldC9pbmV0X3NvY2suaAppbmRleCA3YTM3MzY5Li5jYWFmZjVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0X3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9pbmV0X3NvY2suaApAQCAtNTcsNyArNTcsMTUgQEAKIAl1bnNpZ25lZCBjaGFyCV9fZGF0YVswXTsKIH07CiAKLSNkZWZpbmUgb3B0bGVuZ3RoKG9wdCkgKHNpemVvZihzdHJ1Y3QgaXBfb3B0aW9ucykgKyBvcHQtPm9wdGxlbikKK3N0cnVjdCBpcF9vcHRpb25zX3JjdSB7CisJc3RydWN0IHJjdV9oZWFkIHJjdTsKKwlzdHJ1Y3QgaXBfb3B0aW9ucyBvcHQ7Cit9OworCitzdHJ1Y3QgaXBfb3B0aW9uc19kYXRhIHsKKwlzdHJ1Y3QgaXBfb3B0aW9uc19yY3UJb3B0OworCWNoYXIJCQlkYXRhWzQwXTsKK307CiAKIHN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayB7CiAJc3RydWN0IHJlcXVlc3Rfc29jawlyZXE7CkBAIC03OCw3ICs4Niw3IEBACiAJCQkJYWNrZWQJICAgOiAxLAogCQkJCW5vX3NyY2NoZWNrOiAxOwogCWttZW1jaGVja19iaXRmaWVsZF9lbmQoZmxhZ3MpOwotCXN0cnVjdCBpcF9vcHRpb25zCSpvcHQ7CisJc3RydWN0IGlwX29wdGlvbnNfcmN1CSpvcHQ7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaW5ldF9yc2soY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqc2spCkBAIC04OCwxNyArOTYsMjEgQEAKIAogc3RydWN0IGluZXRfY29yayB7CiAJdW5zaWduZWQgaW50CQlmbGFnczsKLQl1bnNpZ25lZCBpbnQJCWZyYWdzaXplOworCV9fYmUzMgkJCWFkZHI7CiAJc3RydWN0IGlwX29wdGlvbnMJKm9wdDsKKwl1bnNpZ25lZCBpbnQJCWZyYWdzaXplOwogCXN0cnVjdCBkc3RfZW50cnkJKmRzdDsKIAlpbnQJCQlsZW5ndGg7IC8qIFRvdGFsIGxlbmd0aCBvZiBhbGwgZnJhbWVzICovCi0JX19iZTMyCQkJYWRkcjsKLQlzdHJ1Y3QgZmxvd2kJCWZsOwogCXN0cnVjdCBwYWdlCQkqcGFnZTsKIAl1MzIJCQlvZmY7CiAJdTgJCQl0eF9mbGFnczsKIH07CiAKK3N0cnVjdCBpbmV0X2NvcmtfZnVsbCB7CisJc3RydWN0IGluZXRfY29yawliYXNlOworCXN0cnVjdCBmbG93aQkJZmw7Cit9OworCiBzdHJ1Y3QgaXBfbWNfc29ja2xpc3Q7CiBzdHJ1Y3QgaXB2Nl9waW5mbzsKIHN0cnVjdCBydGFibGU7CkBAIC0xNDAsNyArMTUyLDcgQEAKIAlfX2JlMTYJCQlpbmV0X3Nwb3J0OwogCV9fdTE2CQkJaW5ldF9pZDsKIAotCXN0cnVjdCBpcF9vcHRpb25zCSpvcHQ7CisJc3RydWN0IGlwX29wdGlvbnNfcmN1IF9fcmN1CSppbmV0X29wdDsKIAlfX3U4CQkJdG9zOwogCV9fdTgJCQltaW5fdHRsOwogCV9fdTgJCQltY190dGw7CkBAIC0xNTYsNyArMTY4LDcgQEAKIAlpbnQJCQltY19pbmRleDsKIAlfX2JlMzIJCQltY19hZGRyOwogCXN0cnVjdCBpcF9tY19zb2NrbGlzdCBfX3JjdQkqbWNfbGlzdDsKLQlzdHJ1Y3QgaW5ldF9jb3JrCWNvcms7CisJc3RydWN0IGluZXRfY29ya19mdWxsCWNvcms7CiB9OwogCiAjZGVmaW5lIElQQ09SS19PUFQJMQkvKiBpcC1vcHRpb25zIGhhcyBiZWVuIGhlbGQgaW4gaXBjb3JrLm9wdCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaW5ldHBlZXIuaCBiL2luY2x1ZGUvbmV0L2luZXRwZWVyLmgKaW5kZXggZTZkZDhkYTYuLjhhMTU5Y2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2luZXRwZWVyLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldHBlZXIuaApAQCAtODAsNyArODAsNyBAQAogCXJldHVybiBpbmV0X2dldHBlZXIoJmRhZGRyLCBjcmVhdGUpOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcl92NihzdHJ1Y3QgaW42X2FkZHIgKnY2ZGFkZHIsIGludCBjcmVhdGUpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcl92Nihjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnY2ZGFkZHIsIGludCBjcmVhdGUpCiB7CiAJc3RydWN0IGluZXRwZWVyX2FkZHIgZGFkZHI7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwLmggYi9pbmNsdWRlL25ldC9pcC5oCmluZGV4IDdjNDE2NTguLjY2ZGQ0OTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwLmgKKysrIGIvaW5jbHVkZS9uZXQvaXAuaApAQCAtNTIsNyArNTIsNyBAQAogc3RydWN0IGlwY21fY29va2llIHsKIAlfX2JlMzIJCQlhZGRyOwogCWludAkJCW9pZjsKLQlzdHJ1Y3QgaXBfb3B0aW9ucwkqb3B0OworCXN0cnVjdCBpcF9vcHRpb25zX3JjdQkqb3B0OwogCV9fdTgJCQl0eF9mbGFnczsKIH07CiAKQEAgLTkyLDcgKzkyLDcgQEAKIAogZXh0ZXJuIGludAkJaXBfYnVpbGRfYW5kX3NlbmRfcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICAgICAgX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCi0JCQkJCSAgICAgIHN0cnVjdCBpcF9vcHRpb25zICpvcHQpOworCQkJCQkgICAgICBzdHJ1Y3QgaXBfb3B0aW9uc19yY3UgKm9wdCk7CiBleHRlcm4gaW50CQlpcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpOwogZXh0ZXJuIGludAkJaXBfbG9jYWxfZGVsaXZlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKQEAgLTEwNCw5ICsxMDQsOSBAQAogZXh0ZXJuIHZvaWQJCWlwX3NlbmRfY2hlY2soc3RydWN0IGlwaGRyICppcCk7CiBleHRlcm4gaW50CQlfX2lwX2xvY2FsX291dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQJCWlwX2xvY2FsX291dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLWV4dGVybiBpbnQJCWlwX3F1ZXVlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50CQlpcF9xdWV1ZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmbG93aSAqZmwpOwogZXh0ZXJuIHZvaWQJCWlwX2luaXQodm9pZCk7Ci1leHRlcm4gaW50CQlpcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssCitleHRlcm4gaW50CQlpcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aTQgKmZsNCwKIAkJCQkgICAgICAgaW50IGdldGZyYWcodm9pZCAqZnJvbSwgY2hhciAqdG8sIGludCBvZmZzZXQsIGludCBsZW4sCiAJCQkJCQkgICBpbnQgb2RkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSwKIAkJCQl2b2lkICpmcm9tLCBpbnQgbGVuLCBpbnQgcHJvdG9sZW4sCkBAIC0xMTQsMTUgKzExNCwxNyBAQAogCQkJCXN0cnVjdCBydGFibGUgKipydCwKIAkJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpOwogZXh0ZXJuIGludAkJaXBfZ2VuZXJpY19nZXRmcmFnKHZvaWQgKmZyb20sIGNoYXIgKnRvLCBpbnQgb2Zmc2V0LCBpbnQgbGVuLCBpbnQgb2RkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLWV4dGVybiBzc2l6ZV90CQlpcF9hcHBlbmRfcGFnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwYWdlICpwYWdlLAorZXh0ZXJuIHNzaXplX3QJCWlwX2FwcGVuZF9wYWdlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGZsb3dpNCAqZmw0LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCQlpbnQgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKIGV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAgKl9faXBfbWFrZV9za2Ioc3RydWN0IHNvY2sgKnNrLAorCQkJCSAgICAgIHN0cnVjdCBmbG93aTQgKmZsNCwKIAkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZSwKIAkJCQkgICAgICBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrKTsKIGV4dGVybiBpbnQJCWlwX3NlbmRfc2tiKHN0cnVjdCBza19idWZmICpza2IpOwotZXh0ZXJuIGludAkJaXBfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2spOworZXh0ZXJuIGludAkJaXBfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aTQgKmZsNCk7CiBleHRlcm4gdm9pZAkJaXBfZmx1c2hfcGVuZGluZ19mcmFtZXMoc3RydWN0IHNvY2sgKnNrKTsKIGV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAgKmlwX21ha2Vfc2tiKHN0cnVjdCBzb2NrICpzaywKKwkJCQkgICAgc3RydWN0IGZsb3dpNCAqZmw0LAogCQkJCSAgICBpbnQgZ2V0ZnJhZyh2b2lkICpmcm9tLCBjaGFyICp0bywgaW50IG9mZnNldCwgaW50IGxlbiwKIAkJCQkJCWludCBvZGQsIHN0cnVjdCBza19idWZmICpza2IpLAogCQkJCSAgICB2b2lkICpmcm9tLCBpbnQgbGVuZ3RoLCBpbnQgdHJhbnNoZHJsZW4sCkBAIC0xMzAsOSArMTMyLDkgQEAKIAkJCQkgICAgc3RydWN0IHJ0YWJsZSAqKnJ0cCwKIAkJCQkgICAgdW5zaWduZWQgaW50IGZsYWdzKTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqaXBfZmluaXNoX3NrYihzdHJ1Y3Qgc29jayAqc2spCitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICppcF9maW5pc2hfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGZsb3dpNCAqZmw0KQogewotCXJldHVybiBfX2lwX21ha2Vfc2tiKHNrLCAmc2stPnNrX3dyaXRlX3F1ZXVlLCAmaW5ldF9zayhzayktPmNvcmspOworCXJldHVybiBfX2lwX21ha2Vfc2tiKHNrLCBmbDQsICZzay0+c2tfd3JpdGVfcXVldWUsICZpbmV0X3NrKHNrKS0+Y29yay5iYXNlKTsKIH0KIAogLyogZGF0YWdyYW0uYyAqLwpAQCAtMTcyLDggKzE3NCw4IEBACiAJcmV0dXJuIChhcmctPmZsYWdzICYgSVBfUkVQTFlfQVJHX05PU1JDQ0hFQ0spID8gRkxPV0lfRkxBR19BTllTUkMgOiAwOwogfQogCi12b2lkIGlwX3NlbmRfcmVwbHkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfcmVwbHlfYXJnICphcmcsCi0JCSAgIHVuc2lnbmVkIGludCBsZW4pOyAKK3ZvaWQgaXBfc2VuZF9yZXBseShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBkYWRkciwKKwkJICAgc3RydWN0IGlwX3JlcGx5X2FyZyAqYXJnLCB1bnNpZ25lZCBpbnQgbGVuKTsKIAogc3RydWN0IGlwdjRfY29uZmlnIHsKIAlpbnQJbG9nX21hcnRpYW5zOwpAQCAtNDE2LDE0ICs0MTgsMTUgQEAKICAqCUZ1bmN0aW9ucyBwcm92aWRlZCBieSBpcF9vcHRpb25zLmMKICAqLwogIAotZXh0ZXJuIHZvaWQgaXBfb3B0aW9uc19idWlsZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0LCBfX2JlMzIgZGFkZHIsIHN0cnVjdCBydGFibGUgKnJ0LCBpbnQgaXNfZnJhZyk7CitleHRlcm4gdm9pZCBpcF9vcHRpb25zX2J1aWxkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF9vcHRpb25zICpvcHQsCisJCQkgICAgIF9fYmUzMiBkYWRkciwgc3RydWN0IHJ0YWJsZSAqcnQsIGludCBpc19mcmFnKTsKIGV4dGVybiBpbnQgaXBfb3B0aW9uc19lY2hvKHN0cnVjdCBpcF9vcHRpb25zICpkb3B0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiB2b2lkIGlwX29wdGlvbnNfZnJhZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gaW50IGlwX29wdGlvbnNfY29tcGlsZShzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkgICAgICBzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLWV4dGVybiBpbnQgaXBfb3B0aW9uc19nZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfb3B0aW9ucyAqKm9wdHAsCitleHRlcm4gaW50IGlwX29wdGlvbnNfZ2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX29wdGlvbnNfcmN1ICoqb3B0cCwKIAkJCSAgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IG9wdGxlbik7Ci1leHRlcm4gaW50IGlwX29wdGlvbnNfZ2V0X2Zyb21fdXNlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9vcHRpb25zICoqb3B0cCwKK2V4dGVybiBpbnQgaXBfb3B0aW9uc19nZXRfZnJvbV91c2VyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX29wdGlvbnNfcmN1ICoqb3B0cCwKIAkJCQkgICAgdW5zaWduZWQgY2hhciBfX3VzZXIgKmRhdGEsIGludCBvcHRsZW4pOwogZXh0ZXJuIHZvaWQgaXBfb3B0aW9uc191bmRvKHN0cnVjdCBpcF9vcHRpb25zICogb3B0KTsKIGV4dGVybiB2b2lkIGlwX2ZvcndhcmRfb3B0aW9ucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9maWIuaCBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaAppbmRleCBiYzNjZGUwLi40NzdlZjc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcDZfZmliLmgKKysrIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oCkBAIC0xMyw4ICsxMyw2IEBACiAjaWZuZGVmIF9JUDZfRklCX0gKICNkZWZpbmUgX0lQNl9GSUJfSAogCi0jaWZkZWYgX19LRVJORUxfXwotCiAjaW5jbHVkZSA8bGludXgvaXB2Nl9yb3V0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CkBAIC00Miw2ICs0MCw3IEBACiAKIAlzdHJ1Y3QgaW42X2FkZHIJZmNfZHN0OwogCXN0cnVjdCBpbjZfYWRkcglmY19zcmM7CisJc3RydWN0IGluNl9hZGRyCWZjX3ByZWZzcmM7CiAJc3RydWN0IGluNl9hZGRyCWZjX2dhdGV3YXk7CiAKIAl1bnNpZ25lZCBsb25nCWZjX2V4cGlyZXM7CkBAIC0xMDcsNiArMTA2LDcgQEAKIAlzdHJ1Y3QgcnQ2a2V5CQkJcnQ2aV9kc3QgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIAl1MzIJCQkJcnQ2aV9mbGFnczsKIAlzdHJ1Y3QgcnQ2a2V5CQkJcnQ2aV9zcmM7CisJc3RydWN0IHJ0NmtleQkJCXJ0NmlfcHJlZnNyYzsKIAl1MzIJCQkJcnQ2aV9tZXRyaWM7CiAJdTMyCQkJCXJ0NmlfcGVlcl9nZW5pZDsKIApAQCAtMTk2LDEyICsxOTYsMTIgQEAKIAkJCQkJCSAgcG9sX2xvb2t1cF90IGxvb2t1cCk7CiAKIGV4dGVybiBzdHJ1Y3QgZmliNl9ub2RlCQkqZmliNl9sb29rdXAoc3RydWN0IGZpYjZfbm9kZSAqcm9vdCwKLQkJCQkJICAgICBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAotCQkJCQkgICAgIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpOworCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCisJCQkJCSAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkcik7CiAKIHN0cnVjdCBmaWI2X25vZGUJCSpmaWI2X2xvY2F0ZShzdHJ1Y3QgZmliNl9ub2RlICpyb290LAotCQkJCQkgICAgIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsIGludCBkc3RfbGVuLAotCQkJCQkgICAgIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIGludCBzcmNfbGVuKTsKKwkJCQkJICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLCBpbnQgZHN0X2xlbiwKKwkJCQkJICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCBpbnQgc3JjX2xlbik7CiAKIGV4dGVybiB2b2lkCQkJZmliNl9jbGVhbl9hbGwoc3RydWN0IG5ldCAqbmV0LAogCQkJCQkgICAgICAgaW50ICgqZnVuYykoc3RydWN0IHJ0Nl9pbmZvICosIHZvaWQgKmFyZyksCkBAIC0yMzgsNCArMjM4LDMgQEAKIH0KICNlbmRpZgogI2VuZGlmCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKaW5kZXggYzg1MGU1Zi4uNWU5MWI3MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKKysrIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKQEAgLTIxLDggKzIxLDYgQEAKIAlfX3U4CQkJcHJlZml4WzBdOwkvKiAwLDggb3IgMTYgKi8KIH07CiAKLSNpZmRlZiBfX0tFUk5FTF9fCi0KICNpbmNsdWRlIDxuZXQvZmxvdy5oPgogI2luY2x1ZGUgPG5ldC9pcDZfZmliLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KQEAgLTg0LDYgKzgyLDEyIEBACiBleHRlcm4gaW50CQkJaXA2X2luc19ydChzdHJ1Y3QgcnQ2X2luZm8gKik7CiBleHRlcm4gaW50CQkJaXA2X2RlbF9ydChzdHJ1Y3QgcnQ2X2luZm8gKik7CiAKK2V4dGVybiBpbnQJCQlpcDZfcm91dGVfZ2V0X3NhZGRyKHN0cnVjdCBuZXQgKm5ldCwKKwkJCQkJCSAgICBzdHJ1Y3QgcnQ2X2luZm8gKnJ0LAorCQkJCQkJICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCisJCQkJCQkgICAgdW5zaWduZWQgaW50IHByZWZzLAorCQkJCQkJICAgIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpOworCiBleHRlcm4gc3RydWN0IHJ0Nl9pbmZvCQkqcnQ2X2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJCSAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAogCQkJCQkgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciwKQEAgLTEwNiw5ICsxMTAsOSBAQAogICoJc3VwcG9ydCBmdW5jdGlvbnMgZm9yIE5ECiAgKgogICovCi1leHRlcm4gc3RydWN0IHJ0Nl9pbmZvICoJcnQ2X2dldF9kZmx0X3JvdXRlcihzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsCitleHRlcm4gc3RydWN0IHJ0Nl9pbmZvICoJcnQ2X2dldF9kZmx0X3JvdXRlcihjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsCiAJCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1leHRlcm4gc3RydWN0IHJ0Nl9pbmZvICoJcnQ2X2FkZF9kZmx0X3JvdXRlcihzdHJ1Y3QgaW42X2FkZHIgKmd3YWRkciwKK2V4dGVybiBzdHJ1Y3QgcnQ2X2luZm8gKglydDZfYWRkX2RmbHRfcm91dGVyKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3dhZGRyLAogCQkJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCQkgICAgdW5zaWduZWQgaW50IHByZWYpOwogCkBAIC0xMTYsMTcgKzEyMCwxNyBAQAogCiBleHRlcm4gaW50CQkJcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCQkgICAgICB1OCAqb3B0LCBpbnQgbGVuLAotCQkJCQkgICAgICBzdHJ1Y3QgaW42X2FkZHIgKmd3YWRkcik7CisJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3dhZGRyKTsKIAotZXh0ZXJuIHZvaWQJCQlydDZfcmVkaXJlY3Qoc3RydWN0IGluNl9hZGRyICpkZXN0LAotCQkJCQkgICAgIHN0cnVjdCBpbjZfYWRkciAqc3JjLAotCQkJCQkgICAgIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCitleHRlcm4gdm9pZAkJCXJ0Nl9yZWRpcmVjdChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsCisJCQkJCSAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzcmMsCisJCQkJCSAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciwKIAkJCQkJICAgICBzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwKIAkJCQkJICAgICB1OCAqbGxhZGRyLAogCQkJCQkgICAgIGludCBvbl9saW5rKTsKIAotZXh0ZXJuIHZvaWQJCQlydDZfcG10dV9kaXNjb3Zlcnkoc3RydWN0IGluNl9hZGRyICpkYWRkciwKLQkJCQkJCSAgIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCitleHRlcm4gdm9pZAkJCXJ0Nl9wbXR1X2Rpc2NvdmVyeShjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorCQkJCQkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciwKIAkJCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCQkgICB1MzIgcG10dSk7CiAKQEAgLTE0MSw2ICsxNDUsNyBAQAogZXh0ZXJuIGludCBydDZfZHVtcF9yb3V0ZShzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCB2b2lkICpwX2FyZyk7CiBleHRlcm4gdm9pZCBydDZfaWZkb3duKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBydDZfbXR1X2NoYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBtdHUpOworZXh0ZXJuIHZvaWQgcnQ2X3JlbW92ZV9wcmVmc3JjKHN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmcCk7CiAKIAogLyoKQEAgLTE4Niw0ICsxOTEsMyBAQAogfQogCiAjZW5kaWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfZmliLmggYi9pbmNsdWRlL25ldC9pcF9maWIuaAppbmRleCBlNWQ2NmVjLi4xMDQyMmVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcF9maWIuaAorKysgYi9pbmNsdWRlL25ldC9pcF9maWIuaApAQCAtMTYwLDcgKzE2MCw4IEBACiAJc3RydWN0IGhsaXN0X25vZGUgdGJfaGxpc3Q7CiAJdTMyCQl0Yl9pZDsKIAlpbnQJCXRiX2RlZmF1bHQ7Ci0JdW5zaWduZWQgY2hhcgl0Yl9kYXRhWzBdOworCWludAkJdGJfbnVtX2RlZmF1bHQ7CisJdW5zaWduZWQgbG9uZwl0Yl9kYXRhWzBdOwogfTsKIAogZXh0ZXJuIGludCBmaWJfdGFibGVfbG9va3VwKHN0cnVjdCBmaWJfdGFibGUgKnRiLCBjb25zdCBzdHJ1Y3QgZmxvd2k0ICpmbHAsCkBAIC0yMjcsOSArMjI4LDkgQEAKIC8qIEV4cG9ydGVkIGJ5IGZpYl9mcm9udGVuZC5jICovCiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcnRtX2lwdjRfcG9saWN5W107CiBleHRlcm4gdm9pZAkJaXBfZmliX2luaXQodm9pZCk7Ci1leHRlcm4gaW50IGZpYl92YWxpZGF0ZV9zb3VyY2UoX19iZTMyIHNyYywgX19iZTMyIGRzdCwgdTggdG9zLCBpbnQgb2lmLAotCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUzMiAqc3BlY19kc3QsCi0JCQkgICAgICAgdTMyICppdGFnLCB1MzIgbWFyayk7CitleHRlcm4gaW50IGZpYl92YWxpZGF0ZV9zb3VyY2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIHNyYywgX19iZTMyIGRzdCwKKwkJCSAgICAgICB1OCB0b3MsIGludCBvaWYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICAgX19iZTMyICpzcGVjX2RzdCwgdTMyICppdGFnKTsKIGV4dGVybiB2b2lkIGZpYl9zZWxlY3RfZGVmYXVsdChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzKTsKIAogLyogRXhwb3J0ZWQgYnkgZmliX3NlbWFudGljcy5jICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF92cy5oIGIvaW5jbHVkZS9uZXQvaXBfdnMuaAppbmRleCA4NmFlZmVkLi40ZmZmNDMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oCisrKyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKQEAgLTgsOSArOCw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9pcF92cy5oPiAgICAgICAgICAgICAgICAvKiBkZWZpbml0aW9ucyBzaGFyZWQgd2l0aCB1c2VybGFuZCAqLwogCi0vKiBvbGQgaXB2c2FkbSB2ZXJzaW9ucyBzdGlsbCBpbmNsdWRlIHRoaXMgZmlsZSBkaXJlY3RseSAqLwotI2lmZGVmIF9fS0VSTkVMX18KLQogI2luY2x1ZGUgPGFzbS90eXBlcy5oPiAgICAgICAgICAgICAgICAgIC8qIGZvciBfX3VYWCB0eXBlcyAqLwogCiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+ICAgICAgICAgICAgICAgLyogZm9yIGN0bF9wYXRoICovCkBAIC02NjgsOSArNjY1LDcgQEAKIAlzdHJ1Y3QgZHN0X2VudHJ5CSpkc3RfY2FjaGU7CS8qIGRlc3RpbmF0aW9uIGNhY2hlIGVudHJ5ICovCiAJdTMyCQkJZHN0X3J0b3M7CS8qIFJUX1RPUyh0b3MpIGZvciBkc3QgKi8KIAl1MzIJCQlkc3RfY29va2llOwotI2lmZGVmIENPTkZJR19JUF9WU19JUFY2Ci0Jc3RydWN0IGluNl9hZGRyCQlkc3Rfc2FkZHI7Ci0jZW5kaWYKKwl1bmlvbiBuZl9pbmV0X2FkZHIJZHN0X3NhZGRyOwogCiAJLyogZm9yIHZpcnR1YWwgc2VydmljZSAqLwogCXN0cnVjdCBpcF92c19zZXJ2aWNlCSpzdmM7CQkvKiBzZXJ2aWNlIGl0IGJlbG9uZ3MgdG8gKi8KQEAgLTEyNTYsNyArMTI1MSw4IEBACiBleHRlcm4gaW50IGlwX3ZzX2RyX3htaXQKIChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHApOwogZXh0ZXJuIGludCBpcF92c19pY21wX3htaXQKLShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQpOworKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKKyBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgaG9va251bSk7CiBleHRlcm4gdm9pZCBpcF92c19kc3RfcmVzZXQoc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpOwogCiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKQEAgLTEyNzAsNyArMTI2Niw3IEBACiAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwKTsKIGV4dGVybiBpbnQgaXBfdnNfaWNtcF94bWl0X3Y2CiAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAotIGludCBvZmZzZXQpOworIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBob29rbnVtKTsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1NZU0NUTApAQCAtMTQzMiw2ICsxNDI4LDQgQEAKIAkJYXRvbWljX3JlYWQoJmRlc3QtPmluYWN0Y29ubnMpOwogfQogCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCiAjZW5kaWYJLyogX05FVF9JUF9WU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcHY2LmggYi9pbmNsdWRlL25ldC9pcHY2LmgKaW5kZXggMzQyMDBmOS4uYzAzM2VkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXB2Ni5oCisrKyBiL2luY2x1ZGUvbmV0L2lwdjYuaApAQCAtNzcsMTEgKzc3LDkgQEAKIC8qCiAgKglBZGRyIHNjb3BlcwogICovCi0jaWZkZWYgX19LRVJORUxfXwogI2RlZmluZSBJUFY2X0FERFJfTUNfU0NPUEUoYSkJXAogCSgoYSktPnM2X2FkZHJbMV0gJiAweDBmKQkvKiBub25zdGFuZGFyZCAqLwogI2RlZmluZSBfX0lQVjZfQUREUl9TQ09QRV9JTlZBTElECS0xCi0jZW5kaWYKICNkZWZpbmUgSVBWNl9BRERSX1NDT1BFX05PREVMT0NBTAkweDAxCiAjZGVmaW5lIElQVjZfQUREUl9TQ09QRV9MSU5LTE9DQUwJMHgwMgogI2RlZmluZSBJUFY2X0FERFJfU0NPUEVfU0lURUxPQ0FMCTB4MDUKQEAgLTkxLDE0ICs4OSwxMiBAQAogLyoKICAqCUFkZHIgZmxhZ3MKICAqLwotI2lmZGVmIF9fS0VSTkVMX18KICNkZWZpbmUgSVBWNl9BRERSX01DX0ZMQUdfVFJBTlNJRU5UKGEpCVwKIAkoKGEpLT5zNl9hZGRyWzFdICYgMHgxMCkKICNkZWZpbmUgSVBWNl9BRERSX01DX0ZMQUdfUFJFRklYKGEpCVwKIAkoKGEpLT5zNl9hZGRyWzFdICYgMHgyMCkKICNkZWZpbmUgSVBWNl9BRERSX01DX0ZMQUdfUkVOREVaVk9VUyhhKQlcCiAJKChhKS0+czZfYWRkclsxXSAmIDB4NDApCi0jZW5kaWYKIAogLyoKICAqCWZyYWdtZW50YXRpb24gaGVhZGVyCkBAIC0xMTMsOCArMTA5LDYgQEAKIAogI2RlZmluZQlJUDZfTUYJMHgwMDAxCiAKLSNpZmRlZiBfX0tFUk5FTF9fCi0KICNpbmNsdWRlIDxuZXQvc29jay5oPgogCiAvKiBzeXNjdGxzICovCkBAIC0xMjksNiArMTIzLDE1IEBACiAJU05NUF9JTkNfU1RBVFMjI21vZGlmaWVyKChuZXQpLT5taWIuc3RhdG5hbWUjI19zdGF0aXN0aWNzLCAoZmllbGQpKTtcCiB9KQogCisvKiBwZXIgZGV2aWNlIGNvdW50ZXJzIGFyZSBhdG9taWNfbG9uZ190ICovCisjZGVmaW5lIF9ERVZJTkNBVE9NSUMobmV0LCBzdGF0bmFtZSwgbW9kaWZpZXIsIGlkZXYsIGZpZWxkKQkJXAorKHsJCQkJCQkJCQlcCisJc3RydWN0IGluZXQ2X2RldiAqX2lkZXYgPSAoaWRldik7CQkJCVwKKwlpZiAobGlrZWx5KF9pZGV2ICE9IE5VTEwpKQkJCQkJXAorCQlTTk1QX0lOQ19TVEFUU19BVE9NSUNfTE9ORygoX2lkZXYpLT5zdGF0cy5zdGF0bmFtZSMjZGV2LCAoZmllbGQpKTsgXAorCVNOTVBfSU5DX1NUQVRTIyNtb2RpZmllcigobmV0KS0+bWliLnN0YXRuYW1lIyNfc3RhdGlzdGljcywgKGZpZWxkKSk7XAorfSkKKwogI2RlZmluZSBfREVWQUREKG5ldCwgc3RhdG5hbWUsIG1vZGlmaWVyLCBpZGV2LCBmaWVsZCwgdmFsKQkJXAogKHsJCQkJCQkJCQlcCiAJc3RydWN0IGluZXQ2X2RldiAqX2lkZXYgPSAoaWRldik7CQkJCVwKQEAgLTE2MCwxNiArMTYzLDE2IEBACiAjZGVmaW5lIElQNl9VUERfUE9fU1RBVFNfQkgobmV0LCBpZGV2LGZpZWxkLHZhbCkgICBcCiAJCV9ERVZVUEQobmV0LCBpcHY2LCA2NF9CSCwgaWRldiwgZmllbGQsIHZhbCkKICNkZWZpbmUgSUNNUDZfSU5DX1NUQVRTKG5ldCwgaWRldiwgZmllbGQpCVwKLQkJX0RFVklOQyhuZXQsIGljbXB2NiwgLCBpZGV2LCBmaWVsZCkKKwkJX0RFVklOQ0FUT01JQyhuZXQsIGljbXB2NiwgLCBpZGV2LCBmaWVsZCkKICNkZWZpbmUgSUNNUDZfSU5DX1NUQVRTX0JIKG5ldCwgaWRldiwgZmllbGQpCVwKLQkJX0RFVklOQyhuZXQsIGljbXB2NiwgX0JILCBpZGV2LCBmaWVsZCkKKwkJX0RFVklOQ0FUT01JQyhuZXQsIGljbXB2NiwgX0JILCBpZGV2LCBmaWVsZCkKIAogI2RlZmluZSBJQ01QNk1TR09VVF9JTkNfU1RBVFMobmV0LCBpZGV2LCBmaWVsZCkJCVwKLQlfREVWSU5DKG5ldCwgaWNtcHY2bXNnLCAsIGlkZXYsIGZpZWxkICsyNTYpCisJX0RFVklOQ0FUT01JQyhuZXQsIGljbXB2Nm1zZywgLCBpZGV2LCBmaWVsZCArMjU2KQogI2RlZmluZSBJQ01QNk1TR09VVF9JTkNfU1RBVFNfQkgobmV0LCBpZGV2LCBmaWVsZCkJXAotCV9ERVZJTkMobmV0LCBpY21wdjZtc2csIF9CSCwgaWRldiwgZmllbGQgKzI1NikKKwlfREVWSU5DQVRPTUlDKG5ldCwgaWNtcHY2bXNnLCBfQkgsIGlkZXYsIGZpZWxkICsyNTYpCiAjZGVmaW5lIElDTVA2TVNHSU5fSU5DX1NUQVRTX0JIKG5ldCwgaWRldiwgZmllbGQpCVwKLQlfREVWSU5DKG5ldCwgaWNtcHY2bXNnLCBfQkgsIGlkZXYsIGZpZWxkKQorCV9ERVZJTkNBVE9NSUMobmV0LCBpY21wdjZtc2csIF9CSCwgaWRldiwgZmllbGQpCiAKIHN0cnVjdCBpcDZfcmFfY2hhaW4gewogCXN0cnVjdCBpcDZfcmFfY2hhaW4JKm5leHQ7CkBAIC0zNzYsOCArMzc5LDggQEAKIHN0cnVjdCBpcDZfY3JlYXRlX2FyZyB7CiAJX19iZTMyIGlkOwogCXUzMiB1c2VyOwotCXN0cnVjdCBpbjZfYWRkciAqc3JjOwotCXN0cnVjdCBpbjZfYWRkciAqZHN0OworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc3JjOworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZHN0OwogfTsKIAogdm9pZCBpcDZfZnJhZ19pbml0KHN0cnVjdCBpbmV0X2ZyYWdfcXVldWUgKnEsIHZvaWQgKmEpOwpAQCAtNjY3LDUgKzY3MCw0IEBACiBleHRlcm4gdm9pZCBpcHY2X3N0YXRpY19zeXNjdGxfdW5yZWdpc3Rlcih2b2lkKTsKICNlbmRpZgogCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9ORVRfSVBWNl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcHguaCBiL2luY2x1ZGUvbmV0L2lweC5oCmluZGV4IDA1ZDdlNGEuLmMxZmVjNmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lweC5oCisrKyBiL2luY2x1ZGUvbmV0L2lweC5oCkBAIC04MCw3ICs4MCw2IEBACiAJYXRvbWljX3QJCXJlZmNudDsKIH07CiAKLSNpZmRlZiBfX0tFUk5FTF9fCiBzdHJ1Y3QgaXB4X2NiIHsKIAl1OAlpcHhfdGN0cmw7CiAJX19iZTMyCWlweF9kZXN0X25ldDsKQEAgLTExNiw3ICsxMTUsNiBAQAogfQogCiAjZGVmaW5lIElQWF9TS0JfQ0IoX19za2IpICgoc3RydWN0IGlweF9jYiAqKSYoKF9fc2tiKS0+Y2JbMF0pKQotI2VuZGlmCiAKICNkZWZpbmUgSVBYX01JTl9FUEhFTUVSQUxfU09DS0VUCTB4NDAwMAogI2RlZmluZSBJUFhfTUFYX0VQSEVNRVJBTF9TT0NLRVQJMHg3ZmZmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAppbmRleCAwMjVkNGNjLi5lNmQ2YTY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCisrKyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKQEAgLTUzNyw2ICs1MzcsMjEgQEAKIAl9OwogfTsKIAorLyoqCisgKiBzdHJ1Y3QgaWVlZTgwMjExX3NjaGVkX3NjYW5faWVzIC0gc2NoZWR1bGVkIHNjYW4gSUVzCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBwYXNzIHRoZSBhcHByb3ByaWF0ZSBJRXMgdG8gYmUgdXNlZCBpbiBzY2hlZHVsZWQKKyAqIHNjYW5zIGZvciBhbGwgYmFuZHMuICBJdCBjb250YWlucyBib3RoIHRoZSBJRXMgcGFzc2VkIGZyb20gdGhlIHVzZXJzcGFjZQorICogYW5kIHRoZSBvbmVzIGdlbmVyYXRlZCBieSBtYWM4MDIxMS4KKyAqCisgKiBAaWU6IGFycmF5IHdpdGggdGhlIElFcyBmb3IgZWFjaCBzdXBwb3J0ZWQgYmFuZAorICogQGxlbjogYXJyYXkgd2l0aCB0aGUgdG90YWwgbGVuZ3RoIG9mIHRoZSBJRXMgZm9yIGVhY2ggYmFuZAorICovCitzdHJ1Y3QgaWVlZTgwMjExX3NjaGVkX3NjYW5faWVzIHsKKwl1OCAqaWVbSUVFRTgwMjExX05VTV9CQU5EU107CisJc2l6ZV90IGxlbltJRUVFODAyMTFfTlVNX0JBTkRTXTsKK307CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICpJRUVFODAyMTFfU0tCX0NCKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJcmV0dXJuIChzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKilza2ItPmNiOwpAQCAtMTYwNiw2ICsxNjIxLDE4IEBACiAgKgl5b3Ugc2hvdWxkIGVuc3VyZSB0byBjYW5jZWwgaXQgb24gdGhpcyBjYWxsYmFjay4KICAqCU11c3QgYmUgaW1wbGVtZW50ZWQgYW5kIGNhbiBzbGVlcC4KICAqCisgKiBAc3VzcGVuZDogU3VzcGVuZCB0aGUgZGV2aWNlOyBtYWM4MDIxMSBpdHNlbGYgd2lsbCBxdWllc2NlIGJlZm9yZSBhbmQKKyAqCXN0b3AgdHJhbnNtaXR0aW5nIGFuZCBkb2luZyBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiwgYW5kIHRoZW4KKyAqCWFzayB0aGUgZGV2aWNlIHRvIHN1c3BlbmQuIFRoaXMgaXMgb25seSBpbnZva2VkIHdoZW4gV29XTEFOIGlzCisgKgljb25maWd1cmVkLCBvdGhlcndpc2UgdGhlIGRldmljZSBpcyBkZWNvbmZpZ3VyZWQgY29tcGxldGVseSBhbmQKKyAqCXJlY29uZmlndXJlZCBhdCByZXN1bWUgdGltZS4KKyAqCisgKiBAcmVzdW1lOiBJZiBXb1dMQU4gd2FzIGNvbmZpZ3VyZWQsIHRoaXMgaW5kaWNhdGVzIHRoYXQgbWFjODAyMTEgaXMKKyAqCW5vdyByZXN1bWluZyBpdHMgb3BlcmF0aW9uLCBhZnRlciB0aGlzIHRoZSBkZXZpY2UgbXVzdCBiZSBmdWxseQorICoJZnVuY3Rpb25hbCBhZ2Fpbi4gSWYgdGhpcyByZXR1cm5zIGFuIGVycm9yLCB0aGUgb25seSB3YXkgb3V0IGlzCisgKgl0byBhbHNvIHVucmVnaXN0ZXIgdGhlIGRldmljZS4gSWYgaXQgcmV0dXJucyAxLCB0aGVuIG1hYzgwMjExCisgKgl3aWxsIGFsc28gZ28gdGhyb3VnaCB0aGUgcmVndWxhciBjb21wbGV0ZSByZXN0YXJ0IG9uIHJlc3VtZS4KKyAqCiAgKiBAYWRkX2ludGVyZmFjZTogQ2FsbGVkIHdoZW4gYSBuZXRkZXZpY2UgYXR0YWNoZWQgdG8gdGhlIGhhcmR3YXJlIGlzCiAgKgllbmFibGVkLiBCZWNhdXNlIGl0IGlzIG5vdCBjYWxsZWQgZm9yIG1vbml0b3IgbW9kZSBkZXZpY2VzLCBAc3RhcnQKICAqCWFuZCBAc3RvcCBtdXN0IGJlIGltcGxlbWVudGVkLgpAQCAtMTY4MSw2ICsxNzA4LDEzIEBACiAgKglhbnkgZXJyb3IgdW5sZXNzIHRoaXMgY2FsbGJhY2sgcmV0dXJuZWQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgogICoJVGhlIGNhbGxiYWNrIGNhbiBzbGVlcC4KICAqCisgKiBAc2NoZWRfc2Nhbl9zdGFydDogQXNrIHRoZSBoYXJkd2FyZSB0byBzdGFydCBzY2FubmluZyByZXBlYXRlZGx5IGF0CisgKglzcGVjaWZpYyBpbnRlcnZhbHMuICBUaGUgZHJpdmVyIG11c3QgY2FsbCB0aGUKKyAqCWllZWU4MDIxMV9zY2hlZF9zY2FuX3Jlc3VsdHMoKSBmdW5jdGlvbiB3aGVuZXZlciBpdCBmaW5kcyByZXN1bHRzLgorICoJVGhpcyBwcm9jZXNzIHdpbGwgY29udGludWUgdW50aWwgc2NoZWRfc2Nhbl9zdG9wIGlzIGNhbGxlZC4KKyAqCisgKiBAc2NoZWRfc2Nhbl9zdG9wOiBUZWxsIHRoZSBoYXJkd2FyZSB0byBzdG9wIGFuIG9uZ29pbmcgc2NoZWR1bGVkIHNjYW4uCisgKgogICogQHN3X3NjYW5fc3RhcnQ6IE5vdGlmaWVyIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGp1c3QgYmVmb3JlIGEgc29mdHdhcmUgc2NhbgogICoJaXMgc3RhcnRlZC4gQ2FuIGJlIE5VTEwsIGlmIHRoZSBkcml2ZXIgZG9lc24ndCBuZWVkIHRoaXMgbm90aWZpY2F0aW9uLgogICoJVGhlIGNhbGxiYWNrIGNhbiBzbGVlcC4KQEAgLTE4MTksMTEgKzE4NTMsMjIgQEAKICAqIEBzZXRfcmluZ3BhcmFtOiBTZXQgdHggYW5kIHJ4IHJpbmcgc2l6ZXMuCiAgKgogICogQGdldF9yaW5ncGFyYW06IEdldCB0eCBhbmQgcnggcmluZyBjdXJyZW50IGFuZCBtYXhpbXVtIHNpemVzLgorICoKKyAqIEB0eF9mcmFtZXNfcGVuZGluZzogQ2hlY2sgaWYgdGhlcmUgaXMgYW55IHBlbmRpbmcgZnJhbWUgaW4gdGhlIGhhcmR3YXJlCisgKglxdWV1ZXMgYmVmb3JlIGVudGVyaW5nIHBvd2VyIHNhdmUuCisgKgorICogQHNldF9iaXRyYXRlX21hc2s6IFNldCBhIG1hc2sgb2YgcmF0ZXMgdG8gYmUgdXNlZCBmb3IgcmF0ZSBjb250cm9sIHNlbGVjdGlvbgorICoJd2hlbiB0cmFuc21pdHRpbmcgYSBmcmFtZS4gQ3VycmVudGx5IG9ubHkgbGVnYWN5IHJhdGVzIGFyZSBoYW5kbGVkLgorICoJVGhlIGNhbGxiYWNrIGNhbiBzbGVlcC4KICAqLwogc3RydWN0IGllZWU4MDIxMV9vcHMgewogCXZvaWQgKCp0eCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpOwogCWludCAoKnN0YXJ0KShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiAJdm9pZCAoKnN0b3ApKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKyNpZmRlZiBDT05GSUdfUE0KKwlpbnQgKCpzdXNwZW5kKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGNmZzgwMjExX3dvd2xhbiAqd293bGFuKTsKKwlpbnQgKCpyZXN1bWUpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKyNlbmRpZgogCWludCAoKmFkZF9pbnRlcmZhY2UpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKIAlpbnQgKCpjaGFuZ2VfaW50ZXJmYWNlKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKQEAgLTE4NTQsNiArMTg5OSwxMiBAQAogCQkJCXUzMiBpdjMyLCB1MTYgKnBoYXNlMWtleSk7CiAJaW50ICgqaHdfc2Nhbikoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCSAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpOworCWludCAoKnNjaGVkX3NjYW5fc3RhcnQpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJc3RydWN0IGNmZzgwMjExX3NjaGVkX3NjYW5fcmVxdWVzdCAqcmVxLAorCQkJCXN0cnVjdCBpZWVlODAyMTFfc2NoZWRfc2Nhbl9pZXMgKmllcyk7CisJdm9pZCAoKnNjaGVkX3NjYW5fc3RvcCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7CiAJdm9pZCAoKnN3X3NjYW5fc3RhcnQpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIAl2b2lkICgqc3dfc2Nhbl9jb21wbGV0ZSkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogCWludCAoKmdldF9zdGF0cykoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCkBAIC0xOTA2LDYgKzE5NTcsOSBAQAogCWludCAoKnNldF9yaW5ncGFyYW0pKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgdHgsIHUzMiByeCk7CiAJdm9pZCAoKmdldF9yaW5ncGFyYW0pKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJICAgICAgdTMyICp0eCwgdTMyICp0eF9tYXgsIHUzMiAqcngsIHUzMiAqcnhfbWF4KTsKKwlib29sICgqdHhfZnJhbWVzX3BlbmRpbmcpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwlpbnQgKCpzZXRfYml0cmF0ZV9tYXNrKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQljb25zdCBzdHJ1Y3QgY2ZnODAyMTFfYml0cmF0ZV9tYXNrICptYXNrKTsKIH07CiAKIC8qKgpAQCAtMjIyMyw2ICsyMjc3LDE5IEBACiAjZGVmaW5lIElFRUU4MDIxMV9UWF9TVEFUVVNfSEVBRFJPT00JMTMKIAogLyoqCisgKiBpZWVlODAyMTFfc3RhX3NldF90aW0gLSBzZXQgdGhlIFRJTSBiaXQgZm9yIGEgc2xlZXBpbmcgc3RhdGlvbgorICogQHN0YTogJnN0cnVjdCBpZWVlODAyMTFfc3RhIHBvaW50ZXIgZm9yIHRoZSBzbGVlcGluZyBzdGF0aW9uCisgKgorICogSWYgYSBkcml2ZXIgYnVmZmVycyBmcmFtZXMgZm9yIGEgcG93ZXJzYXZlIHN0YXRpb24gaW5zdGVhZCBvZiBwYXNzaW5nCisgKiB0aGVtIGJhY2sgdG8gbWFjODAyMTEgZm9yIHJldHJhbnNtaXNzaW9uLCB0aGUgc3RhdGlvbiBuZWVkcyB0byBiZSB0b2xkCisgKiB0byB3YWtlIHVwIHVzaW5nIHRoZSBUSU0gYml0bWFwIGluIHRoZSBiZWFjb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBzdGF0aW9uJ3MgVElNIGJpdCAtIGl0IHdpbGwgYmUgY2xlYXJlZCB3aGVuIHRoZQorICogc3RhdGlvbiB3YWtlcyB1cC4KKyAqLwordm9pZCBpZWVlODAyMTFfc3RhX3NldF90aW0oc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSk7CisKKy8qKgogICogaWVlZTgwMjExX3R4X3N0YXR1cyAtIHRyYW5zbWl0IHN0YXR1cyBjYWxsYmFjawogICoKICAqIENhbGwgdGhpcyBmdW5jdGlvbiBmb3IgYWxsIHRyYW5zbWl0dGVkIGZyYW1lcyBhZnRlciB0aGV5IGhhdmUgYmVlbgpAQCAtMjI3Niw2ICsyMzQzLDE3IEBACiAJCQkJIHN0cnVjdCBza19idWZmICpza2IpOwogCiAvKioKKyAqIGllZWU4MDIxMV9yZXBvcnRfbG93X2FjayAtIHJlcG9ydCBub24tcmVzcG9uZGluZyBzdGF0aW9uCisgKgorICogV2hlbiBvcGVyYXRpbmcgaW4gQVAtbW9kZSwgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHJlcG9ydCBhIG5vbi1yZXNwb25kaW5nCisgKiBjb25uZWN0ZWQgU1RBLgorICoKKyAqIEBzdGE6IHRoZSBub24tcmVzcG9uZGluZyBjb25uZWN0ZWQgc3RhCisgKiBAbnVtX3BhY2tldHM6IG51bWJlciBvZiBwYWNrZXRzIHNlbnQgdG8gQHN0YSB3aXRob3V0IGEgcmVzcG9uc2UKKyAqLwordm9pZCBpZWVlODAyMTFfcmVwb3J0X2xvd19hY2soc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTMyIG51bV9wYWNrZXRzKTsKKworLyoqCiAgKiBpZWVlODAyMTFfYmVhY29uX2dldF90aW0gLSBiZWFjb24gZ2VuZXJhdGlvbiBmdW5jdGlvbgogICogQGh3OiBwb2ludGVyIG9idGFpbmVkIGZyb20gaWVlZTgwMjExX2FsbG9jX2h3KCkuCiAgKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tIHRoZSBhZGRfaW50ZXJmYWNlIGNhbGxiYWNrLgpAQCAtMjU0NSw2ICsyNjIzLDI4IEBACiB2b2lkIGllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBhYm9ydGVkKTsKIAogLyoqCisgKiBpZWVlODAyMTFfc2NoZWRfc2Nhbl9yZXN1bHRzIC0gZ290IHJlc3VsdHMgZnJvbSBzY2hlZHVsZWQgc2NhbgorICoKKyAqIFdoZW4gYSBzY2hlZHVsZWQgc2NhbiBpcyBydW5uaW5nLCB0aGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGNhbGxlZCBieSB0aGUKKyAqIGRyaXZlciB3aGVuZXZlciB0aGVyZSBhcmUgbmV3IHNjYW4gcmVzdWx0cyBhdmFpbGFibGUuCisgKgorICogQGh3OiB0aGUgaGFyZHdhcmUgdGhhdCBpcyBwZXJmb3JtaW5nIHNjaGVkdWxlZCBzY2FucworICovCit2b2lkIGllZWU4MDIxMV9zY2hlZF9zY2FuX3Jlc3VsdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworCisvKioKKyAqIGllZWU4MDIxMV9zY2hlZF9zY2FuX3N0b3BwZWQgLSBpbmZvcm0gdGhhdCB0aGUgc2NoZWR1bGVkIHNjYW4gaGFzIHN0b3BwZWQKKyAqCisgKiBXaGVuIGEgc2NoZWR1bGVkIHNjYW4gaXMgcnVubmluZywgdGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGJ5CisgKiB0aGUgZHJpdmVyIGlmIGl0IG5lZWRzIHRvIHN0b3AgdGhlIHNjYW4gdG8gcGVyZm9ybSBhbm90aGVyIHRhc2suCisgKiBVc3VhbCBzY2VuYXJpb3MgYXJlIGRyaXZlcnMgdGhhdCBjYW5ub3QgY29udGludWUgdGhlIHNjaGVkdWxlZCBzY2FuCisgKiB3aGlsZSBhc3NvY2lhdGluZywgZm9yIGluc3RhbmNlLgorICoKKyAqIEBodzogdGhlIGhhcmR3YXJlIHRoYXQgaXMgcGVyZm9ybWluZyBzY2hlZHVsZWQgc2NhbnMKKyAqLwordm9pZCBpZWVlODAyMTFfc2NoZWRfc2Nhbl9zdG9wcGVkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKworLyoqCiAgKiBpZWVlODAyMTFfaXRlcmF0ZV9hY3RpdmVfaW50ZXJmYWNlcyAtIGl0ZXJhdGUgYWN0aXZlIGludGVyZmFjZXMKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGl0ZXJhdGVzIG92ZXIgdGhlIGludGVyZmFjZXMgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25kaXNjLmggYi9pbmNsdWRlL25ldC9uZGlzYy5oCmluZGV4IGUwZTU5NGYuLjYyYmVlYjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25kaXNjLmgKKysrIGIvaW5jbHVkZS9uZXQvbmRpc2MuaApAQCAtNDIsOCArNDIsNiBAQAogI2RlZmluZSBORF9SRUFDSEFCTEVfVElNRQkJKDMwKkhaKQogI2RlZmluZSBORF9SRVRSQU5TX1RJTUVSCQlIWgogCi0jaWZkZWYgX19LRVJORUxfXwotCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pY21wdjYuaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KQEAgLTEwMiw3ICsxMDAsOCBAQAogCQkJCQkJICAgIHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLAogCQkJCQkJICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqdGFyZ2V0KTsKIAotZXh0ZXJuIGludAkJCW5kaXNjX21jX21hcChzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIGNoYXIgKmJ1Ziwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRpcik7CitleHRlcm4gaW50CQkJbmRpc2NfbWNfbWFwKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwgY2hhciAqYnVmLAorCQkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkaXIpOwogCiBleHRlcm4gc3RydWN0IHNrX2J1ZmYJCSpuZGlzY19idWlsZF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJCSBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLApAQCAtMTU1LDggKzE1NCw0IEBACiAJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CiB9CiAKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGV2ZW50LmggYi9pbmNsdWRlL25ldC9uZXRldmVudC5oCmluZGV4IDIyYjIzOWMuLjA4NmY4YTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGV2ZW50LmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZXZlbnQuaApAQCAtMTAsNyArMTAsNiBAQAogICoKICAqIAlDaGFuZ2VzOgogICovCi0jaWZkZWYgX19LRVJORUxfXwogCiBzdHJ1Y3QgZHN0X2VudHJ5OwogCkBAIC0yOSw0ICsyOCwzIEBACiBleHRlcm4gaW50IGNhbGxfbmV0ZXZlbnRfbm90aWZpZXJzKHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICp2KTsKIAogI2VuZGlmCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaAppbmRleCBkMGQxMzM3Li5jN2M0MmU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oCkBAIC0xNCw3ICsxNCw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbW1vbi5oPgogCi0jaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgpAQCAtMzI2LDUgKzMyNSw0IEBACiAjZGVmaW5lIE1PRFVMRV9BTElBU19ORkNUX0hFTFBFUihoZWxwZXIpIFwKICAgICAgICAgTU9EVUxFX0FMSUFTKCJuZmN0LWhlbHBlci0iIGhlbHBlcikKIAotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfTkZfQ09OTlRSQUNLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaAppbmRleCA0ZWU0NGM4Li43Y2E2YmRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oCkBAIC0xMDQsOCArMTA0LDYgQEAKIAl9IHNyYzsKIH07CiAKLSNpZmRlZiBfX0tFUk5FTF9fCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCBuZl9jdF9kdW1wX3R1cGxlX2lwKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnQpCiB7CiAjaWZkZWYgREVCVUcKQEAgLTE0OCw4ICsxNDYsNiBAQAogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdHVwbGU7CiB9OwogCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCiBzdGF0aWMgaW5saW5lIGJvb2wgX19uZl9jdF90dXBsZV9zcmNfZXF1YWwoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdDEsCiAJCQkJCSAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnQyKQogeyAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9uYXQuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9uYXQuaAppbmRleCBhZmY4MGIxLi4wMzQ2YjAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbmF0LmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX25hdC5oCkBAIC00OCw3ICs0OCw2IEBACiAJc3RydWN0IG5mX25hdF9yYW5nZSByYW5nZVsxXTsKIH07CiAKLSNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5oPgpAQCAtOTMsNyArOTIsNCBAQAogI2VuZGlmCiB9CiAKLSNlbHNlICAvKiAhX19LRVJORUxfXzogaXB0YWJsZXMgd2FudHMgdGhpcyB0byBjb21waWxlLiAqLwotI2RlZmluZSBuZl9uYXRfbXVsdGlfcmFuZ2UgbmZfbmF0X211bHRpX3JhbmdlX2NvbXBhdAotI2VuZGlmIC8qX19LRVJORUxfXyovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGxpbmsuaCBiL2luY2x1ZGUvbmV0L25ldGxpbmsuaAppbmRleCA4YTM5MDZhLi4wMjc0MGE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0bGluay5oCkBAIC0yOTAsNyArMjkwLDcgQEAKIAogLyoqCiAgKiBubG1zZ19kYXRhIC0gaGVhZCBvZiBtZXNzYWdlIHBheWxvYWQKLSAqIEBubGg6IG5ldGxpbmsgbWVzc3NhZ2UgaGVhZGVyCisgKiBAbmxoOiBuZXRsaW5rIG1lc3NhZ2UgaGVhZGVyCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCAqbmxtc2dfZGF0YShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldG5zL2lwdjQuaCBiL2luY2x1ZGUvbmV0L25ldG5zL2lwdjQuaAppbmRleCA1NDIxOTVkLi5kNzg2YjRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRucy9pcHY0LmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oCkBAIC01NCw2ICs1NCw4IEBACiAJaW50IHN5c2N0bF9ydF9jYWNoZV9yZWJ1aWxkX2NvdW50OwogCWludCBjdXJyZW50X3J0X2NhY2hlX3JlYnVpbGRfY291bnQ7CiAKKwl1bnNpZ25lZCBpbnQgc3lzY3RsX3BpbmdfZ3JvdXBfcmFuZ2VbMl07CisKIAlhdG9taWNfdCBydF9nZW5pZDsKIAlhdG9taWNfdCBkZXZfYWRkcl9nZW5pZDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGhvbmV0L3BuX2Rldi5oIGIvaW5jbHVkZS9uZXQvcGhvbmV0L3BuX2Rldi5oCmluZGV4IDEzNjQ5ZWIuLjg2MzlkZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3Bob25ldC9wbl9kZXYuaAorKysgYi9pbmNsdWRlL25ldC9waG9uZXQvcG5fZGV2LmgKQEAgLTUxLDcgKzUxLDcgQEAKIGludCBwaG9uZXRfcm91dGVfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGRhZGRyKTsKIGludCBwaG9uZXRfcm91dGVfZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGRhZGRyKTsKIHZvaWQgcnRtX3Bob25ldF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBkc3QpOwotc3RydWN0IG5ldF9kZXZpY2UgKnBob25ldF9yb3V0ZV9nZXQoc3RydWN0IG5ldCAqbmV0LCB1OCBkYWRkcik7CitzdHJ1Y3QgbmV0X2RldmljZSAqcGhvbmV0X3JvdXRlX2dldF9yY3Uoc3RydWN0IG5ldCAqbmV0LCB1OCBkYWRkcik7CiBzdHJ1Y3QgbmV0X2RldmljZSAqcGhvbmV0X3JvdXRlX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHU4IGRhZGRyKTsKIAogI2RlZmluZSBQTl9OT19BRERSCTB4ZmYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3BpbmcuaCBiL2luY2x1ZGUvbmV0L3BpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODJiNWFlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvcGluZy5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBJTkVUCQlBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVENQL0lQIHByb3RvY29sIHN1aXRlIGZvciB0aGUgTElOVVgKKyAqCQlvcGVyYXRpbmcgc3lzdGVtLiAgSU5FVCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgIEJTRCBTb2NrZXQKKyAqCQlpbnRlcmZhY2UgYXMgdGhlIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC4KKyAqCisgKgkJRGVmaW5pdGlvbnMgZm9yIHRoZSAicGluZyIgbW9kdWxlLgorICoKKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIF9QSU5HX0gKKyNkZWZpbmUgX1BJTkdfSAorCisjaW5jbHVkZSA8bmV0L25ldG5zL2hhc2guaD4KKworLyogUElOR19IVEFCTEVfU0laRSBtdXN0IGJlIHBvd2VyIG9mIDIgKi8KKyNkZWZpbmUgUElOR19IVEFCTEVfU0laRSAJNjQKKyNkZWZpbmUgUElOR19IVEFCTEVfTUFTSyAJKFBJTkdfSFRBQkxFX1NJWkUtMSkKKworI2RlZmluZSBwaW5nX3BvcnRhZGRyX2Zvcl9lYWNoX2VudHJ5KF9fc2ssIG5vZGUsIGxpc3QpIFwKKwlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeShfX3NrLCBub2RlLCBsaXN0LCBza19udWxsc19ub2RlKQorCisvKgorICogZ2lkX3QgaXMgZWl0aGVyIHVpbnQgb3IgdXNob3J0LiAgV2Ugd2FudCB0byBwYXNzIGl0IHRvCisgKiBwcm9jX2RvaW50dmVjX21pbm1heCgpLCBzbyBpdCBtdXN0IG5vdCBiZSBsYXJnZXIgdGhhbiBNQVhfSU5UCisgKi8KKyNkZWZpbmUgR0lEX1RfTUFYICgoKGdpZF90KX4wVSkgPj4gMSkKKworc3RydWN0IHBpbmdfdGFibGUgeworCXN0cnVjdCBobGlzdF9udWxsc19oZWFkCWhhc2hbUElOR19IVEFCTEVfU0laRV07CisJcndsb2NrX3QJCWxvY2s7Cit9OworCitzdHJ1Y3QgcGluZ19pdGVyX3N0YXRlIHsKKwlzdHJ1Y3Qgc2VxX25ldF9wcml2YXRlICBwOworCWludAkJCWJ1Y2tldDsKK307CisKK2V4dGVybiBzdHJ1Y3QgcHJvdG8gcGluZ19wcm90OworCisKK2V4dGVybiB2b2lkIHBpbmdfcmN2KHN0cnVjdCBza19idWZmICopOworZXh0ZXJuIHZvaWQgcGluZ19lcnIoc3RydWN0IHNrX2J1ZmYgKiwgdTMyIGluZm8pOworCisjaWZkZWYgQ09ORklHX1BST0NfRlMKK2V4dGVybiBpbnQgX19pbml0IHBpbmdfcHJvY19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgcGluZ19wcm9jX2V4aXQodm9pZCk7CisjZW5kaWYKKwordm9pZCBfX2luaXQgcGluZ19pbml0KHZvaWQpOworCisKKyNlbmRpZiAvKiBfUElOR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9yYXd2Ni5oIGIvaW5jbHVkZS9uZXQvcmF3djYuaAppbmRleCBmNmI5YjgzLi5jZjc1NzcyIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9yYXd2Ni5oCisrKyBiL2luY2x1ZGUvbmV0L3Jhd3Y2LmgKQEAgLTEsOCArMSw2IEBACiAjaWZuZGVmIF9ORVRfUkFXVjZfSAogI2RlZmluZSBfTkVUX1JBV1Y2X0gKIAotI2lmZGVmIF9fS0VSTkVMX18KLQogI2luY2x1ZGUgPG5ldC9wcm90b2NvbC5oPgogCiB2b2lkIHJhdzZfaWNtcF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQgbmV4dGhkciwKQEAgLTIwLDUgKzE4LDMgQEAKICNlbmRpZgogCiAjZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvcm91dGUuaAppbmRleCA4ZmNlMDYyLi5kYjdiMzQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9yb3V0ZS5oCisrKyBiL2luY2x1ZGUvbmV0L3JvdXRlLmgKQEAgLTM1LDE2ICszNSw4IEBACiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogCi0jaWZuZGVmIF9fS0VSTkVMX18KLSN3YXJuaW5nIFRoaXMgZmlsZSBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBvdXRzaWRlIG9mIGtlcm5lbC4KLSNlbmRpZgotCiAjZGVmaW5lIFJUT19PTkxJTksJMHgwMQogCi0jZGVmaW5lIFJUT19DT05OCTAKLS8qIFJUT19DT05OIGlzIG5vdCB1c2VkIChiZWluZyBhbGlhcyBmb3IgMCksIGJ1dCBwcmVzZXJ2ZWQgbm90IHRvIGJyZWFrCi0gKiBzb21lIG1vZHVsZXMgcmVmZXJyaW5nIHRvIGl0LiAqLwotCiAjZGVmaW5lIFJUX0NPTk5fRkxBR1Moc2spICAgKFJUX1RPUyhpbmV0X3NrKHNrKS0+dG9zKSB8IHNvY2tfZmxhZyhzaywgU09DS19MT0NBTFJPVVRFKSkKIAogc3RydWN0IGZpYl9uaDsKQEAgLTYwLDcgKzUyLDcgQEAKIAlpbnQJCQlydF9nZW5pZDsKIAl1bnNpZ25lZAkJcnRfZmxhZ3M7CiAJX191MTYJCQlydF90eXBlOwotCV9fdTgJCQlydF90b3M7CisJX191OAkJCXJ0X2tleV90b3M7CiAKIAlfX2JlMzIJCQlydF9kc3Q7CS8qIFBhdGggZGVzdGluYXRpb24JKi8KIAlfX2JlMzIJCQlydF9zcmM7CS8qIFBhdGggc291cmNlCQkqLwpAQCAtMTIzLDcgKzExNSw3IEBACiAJCQkJICAgICAgIF9fYmUzMiBzcmMsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQJCXJ0X2NhY2hlX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgaW50IGhvdyk7CiBleHRlcm4gdm9pZAkJcnRfY2FjaGVfZmx1c2hfYmF0Y2goc3RydWN0IG5ldCAqbmV0KTsKLWV4dGVybiBzdHJ1Y3QgcnRhYmxlICpfX2lwX3JvdXRlX291dHB1dF9rZXkoc3RydWN0IG5ldCAqLCBjb25zdCBzdHJ1Y3QgZmxvd2k0ICpmbHApOworZXh0ZXJuIHN0cnVjdCBydGFibGUgKl9faXBfcm91dGVfb3V0cHV0X2tleShzdHJ1Y3QgbmV0ICosIHN0cnVjdCBmbG93aTQgKmZscCk7CiBleHRlcm4gc3RydWN0IHJ0YWJsZSAqaXBfcm91dGVfb3V0cHV0X2Zsb3coc3RydWN0IG5ldCAqLCBzdHJ1Y3QgZmxvd2k0ICpmbHAsCiAJCQkJCSAgIHN0cnVjdCBzb2NrICpzayk7CiBleHRlcm4gc3RydWN0IGRzdF9lbnRyeSAqaXB2NF9ibGFja2hvbGVfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Rfb3JpZyk7CkBAIC0xNDUsNDAgKzEzNywzMyBAQAogCXJldHVybiBpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgJmZsNCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHJ0YWJsZSAqaXBfcm91dGVfb3V0cHV0X3BvcnRzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLAorc3RhdGljIGlubGluZSBzdHJ1Y3QgcnRhYmxlICppcF9yb3V0ZV9vdXRwdXRfcG9ydHMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd2k0ICpmbDQsCisJCQkJCQkgICBzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCQkgICBfX2JlMzIgZGFkZHIsIF9fYmUzMiBzYWRkciwKIAkJCQkJCSAgIF9fYmUxNiBkcG9ydCwgX19iZTE2IHNwb3J0LAogCQkJCQkJICAgX191OCBwcm90bywgX191OCB0b3MsIGludCBvaWYpCiB7Ci0Jc3RydWN0IGZsb3dpNCBmbDQgPSB7Ci0JCS5mbG93aTRfb2lmID0gb2lmLAotCQkuZmxvd2k0X2ZsYWdzID0gc2sgPyBpbmV0X3NrX2Zsb3dpX2ZsYWdzKHNrKSA6IDAsCi0JCS5mbG93aTRfbWFyayA9IHNrID8gc2stPnNrX21hcmsgOiAwLAotCQkuZGFkZHIgPSBkYWRkciwKLQkJLnNhZGRyID0gc2FkZHIsCi0JCS5mbG93aTRfdG9zID0gdG9zLAotCQkuZmxvd2k0X3Byb3RvID0gcHJvdG8sCi0JCS5mbDRfZHBvcnQgPSBkcG9ydCwKLQkJLmZsNF9zcG9ydCA9IHNwb3J0LAotCX07CisJZmxvd2k0X2luaXRfb3V0cHV0KGZsNCwgb2lmLCBzayA/IHNrLT5za19tYXJrIDogMCwgdG9zLAorCQkJICAgUlRfU0NPUEVfVU5JVkVSU0UsIHByb3RvLAorCQkJICAgc2sgPyBpbmV0X3NrX2Zsb3dpX2ZsYWdzKHNrKSA6IDAsCisJCQkgICBkYWRkciwgc2FkZHIsIGRwb3J0LCBzcG9ydCk7CiAJaWYgKHNrKQotCQlzZWN1cml0eV9za19jbGFzc2lmeV9mbG93KHNrLCBmbG93aTRfdG9fZmxvd2koJmZsNCkpOwotCXJldHVybiBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhuZXQsICZmbDQsIHNrKTsKKwkJc2VjdXJpdHlfc2tfY2xhc3NpZnlfZmxvdyhzaywgZmxvd2k0X3RvX2Zsb3dpKGZsNCkpOworCXJldHVybiBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhuZXQsIGZsNCwgc2spOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBydGFibGUgKmlwX3JvdXRlX291dHB1dF9ncmUoc3RydWN0IG5ldCAqbmV0LAorc3RhdGljIGlubGluZSBzdHJ1Y3QgcnRhYmxlICppcF9yb3V0ZV9vdXRwdXRfZ3JlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNCAqZmw0LAogCQkJCQkJIF9fYmUzMiBkYWRkciwgX19iZTMyIHNhZGRyLAogCQkJCQkJIF9fYmUzMiBncmVfa2V5LCBfX3U4IHRvcywgaW50IG9pZikKIHsKLQlzdHJ1Y3QgZmxvd2k0IGZsNCA9IHsKLQkJLmZsb3dpNF9vaWYgPSBvaWYsCi0JCS5kYWRkciA9IGRhZGRyLAotCQkuc2FkZHIgPSBzYWRkciwKLQkJLmZsb3dpNF90b3MgPSB0b3MsCi0JCS5mbG93aTRfcHJvdG8gPSBJUFBST1RPX0dSRSwKLQkJLmZsNF9ncmVfa2V5ID0gZ3JlX2tleSwKLQl9OwotCXJldHVybiBpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgJmZsNCk7CisJbWVtc2V0KGZsNCwgMCwgc2l6ZW9mKCpmbDQpKTsKKwlmbDQtPmZsb3dpNF9vaWYgPSBvaWY7CisJZmw0LT5kYWRkciA9IGRhZGRyOworCWZsNC0+c2FkZHIgPSBzYWRkcjsKKwlmbDQtPmZsb3dpNF90b3MgPSB0b3M7CisJZmw0LT5mbG93aTRfcHJvdG8gPSBJUFBST1RPX0dSRTsKKwlmbDQtPmZsNF9ncmVfa2V5ID0gZ3JlX2tleTsKKwlyZXR1cm4gaXBfcm91dGVfb3V0cHV0X2tleShuZXQsIGZsNCk7CiB9CiAKIGV4dGVybiBpbnQgaXBfcm91dGVfaW5wdXRfY29tbW9uKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBkc3QsIF9fYmUzMiBzcmMsCkBAIC0xOTYsMTQgKzE4MSwxNSBAQAogCXJldHVybiBpcF9yb3V0ZV9pbnB1dF9jb21tb24oc2tiLCBkc3QsIHNyYywgdG9zLCBkZXZpbiwgdHJ1ZSk7CiB9CiAKLWV4dGVybiB1bnNpZ25lZCBzaG9ydAlpcF9ydF9mcmFnX25lZWRlZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcGhkciAqaXBoLCB1bnNpZ25lZCBzaG9ydCBuZXdfbXR1LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2V4dGVybiB1bnNpZ25lZCBzaG9ydAlpcF9ydF9mcmFnX25lZWRlZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoLAorCQkJCQkgIHVuc2lnbmVkIHNob3J0IG5ld19tdHUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQJCWlwX3J0X3NlbmRfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIGV4dGVybiB1bnNpZ25lZAkJaW5ldF9hZGRyX3R5cGUoc3RydWN0IG5ldCAqbmV0LCBfX2JlMzIgYWRkcik7CiBleHRlcm4gdW5zaWduZWQJCWluZXRfZGV2X2FkZHJfdHlwZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUzMiBhZGRyKTsKIGV4dGVybiB2b2lkCQlpcF9ydF9tdWx0aWNhc3RfZXZlbnQoc3RydWN0IGluX2RldmljZSAqKTsKIGV4dGVybiBpbnQJCWlwX3J0X2lvY3RsKHN0cnVjdCBuZXQgKiwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZyk7Ci1leHRlcm4gdm9pZAkJaXBfcnRfZ2V0X3NvdXJjZSh1OCAqc3JjLCBzdHJ1Y3QgcnRhYmxlICpydCk7CitleHRlcm4gdm9pZAkJaXBfcnRfZ2V0X3NvdXJjZSh1OCAqc3JjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcnRhYmxlICpydCk7CiBleHRlcm4gaW50CQlpcF9ydF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpOwogCiBzdHJ1Y3QgaW5faWZhZGRyOwpAQCAtMjI1LDc4ICsyMTEsOTMgQEAKIAlyZXR1cm4gaXBfdG9zMnByaW9bSVBUT1NfVE9TKHRvcyk+PjFdOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBydGFibGUgKmlwX3JvdXRlX2Nvbm5lY3QoX19iZTMyIGRzdCwgX19iZTMyIHNyYywgdTMyIHRvcywKKy8qIGlwX3JvdXRlX2Nvbm5lY3QoKSBhbmQgaXBfcm91dGVfbmV3cG9ydHMoKSB3b3JrIGluIHRhbmRlbSB3aGlsc3QKKyAqIGJpbmRpbmcgYSBzb2NrZXQgZm9yIGEgbmV3IG91dGdvaW5nIGNvbm5lY3Rpb24uCisgKgorICogSW4gb3JkZXIgdG8gdXNlIElQU0VDIHByb3Blcmx5LCB3ZSBtdXN0LCBpbiB0aGUgZW5kLCBoYXZlIGEKKyAqIHJvdXRlIHRoYXQgd2FzIGxvb2tlZCB1cCB1c2luZyBhbGwgYXZhaWxhYmxlIGtleXMgaW5jbHVkaW5nIHNvdXJjZQorICogYW5kIGRlc3RpbmF0aW9uIHBvcnRzLgorICoKKyAqIEhvd2V2ZXIsIGlmIGEgc291cmNlIHBvcnQgbmVlZHMgdG8gYmUgYWxsb2NhdGVkICh0aGUgdXNlciBzcGVjaWZpZWQKKyAqIGEgd2lsZGNhcmQgc291cmNlIHBvcnQpIHdlIG5lZWQgdG8gb2J0YWluIGFkZHJlc3NpbmcgaW5mb3JtYXRpb24KKyAqIGluIG9yZGVyIHRvIHBlcmZvcm0gdGhhdCBhbGxvY2F0aW9uLgorICoKKyAqIFNvIGlwX3JvdXRlX2Nvbm5lY3QoKSBsb29rcyB1cCBhIHJvdXRlIHVzaW5nIHdpbGRjYXJkZWQgc291cmNlIGFuZAorICogZGVzdGluYXRpb24gcG9ydHMgaW4gdGhlIGtleSwgc2ltcGx5IHNvIHRoYXQgd2UgY2FuIGdldCBhIHBhaXIgb2YKKyAqIGFkZHJlc3NlcyB0byB1c2UgZm9yIHBvcnQgYWxsb2NhdGlvbi4KKyAqCisgKiBMYXRlciwgb25jZSB0aGUgcG9ydHMgYXJlIGFsbG9jYXRlZCwgaXBfcm91dGVfbmV3cG9ydHMoKSB3aWxsIG1ha2UKKyAqIGFub3RoZXIgcm91dGUgbG9va3VwIGlmIG5lZWRlZCB0byBtYWtlIHN1cmUgd2UgY2F0Y2ggYW55IElQU0VDCisgKiBydWxlcyBrZXllZCBvbiB0aGUgcG9ydCBpbmZvcm1hdGlvbi4KKyAqCisgKiBUaGUgY2FsbGVycyBhbGxvY2F0ZSB0aGUgZmxvdyBrZXkgb24gdGhlaXIgc3RhY2ssIGFuZCBtdXN0IHBhc3MgaW4KKyAqIHRoZSBzYW1lIGZsb3dpNCBvYmplY3QgdG8gYm90aCB0aGUgaXBfcm91dGVfY29ubmVjdCgpIGFuZCB0aGUKKyAqIGlwX3JvdXRlX25ld3BvcnRzKCkgY2FsbHMuCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGlwX3JvdXRlX2Nvbm5lY3RfaW5pdChzdHJ1Y3QgZmxvd2k0ICpmbDQsIF9fYmUzMiBkc3QsIF9fYmUzMiBzcmMsCisJCQkJCSB1MzIgdG9zLCBpbnQgb2lmLCB1OCBwcm90b2NvbCwKKwkJCQkJIF9fYmUxNiBzcG9ydCwgX19iZTE2IGRwb3J0LAorCQkJCQkgc3RydWN0IHNvY2sgKnNrLCBib29sIGNhbl9zbGVlcCkKK3sKKwlfX3U4IGZsb3dfZmxhZ3MgPSAwOworCisJaWYgKGluZXRfc2soc2spLT50cmFuc3BhcmVudCkKKwkJZmxvd19mbGFncyB8PSBGTE9XSV9GTEFHX0FOWVNSQzsKKwlpZiAocHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApCisJCWZsb3dfZmxhZ3MgfD0gRkxPV0lfRkxBR19QUkVDT1dfTUVUUklDUzsKKwlpZiAoY2FuX3NsZWVwKQorCQlmbG93X2ZsYWdzIHw9IEZMT1dJX0ZMQUdfQ0FOX1NMRUVQOworCisJZmxvd2k0X2luaXRfb3V0cHV0KGZsNCwgb2lmLCBzay0+c2tfbWFyaywgdG9zLCBSVF9TQ09QRV9VTklWRVJTRSwKKwkJCSAgIHByb3RvY29sLCBmbG93X2ZsYWdzLCBkc3QsIHNyYywgZHBvcnQsIHNwb3J0KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcnRhYmxlICppcF9yb3V0ZV9jb25uZWN0KHN0cnVjdCBmbG93aTQgKmZsNCwKKwkJCQkJICAgICAgX19iZTMyIGRzdCwgX19iZTMyIHNyYywgdTMyIHRvcywKIAkJCQkJICAgICAgaW50IG9pZiwgdTggcHJvdG9jb2wsCiAJCQkJCSAgICAgIF9fYmUxNiBzcG9ydCwgX19iZTE2IGRwb3J0LAogCQkJCQkgICAgICBzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgY2FuX3NsZWVwKQogewotCXN0cnVjdCBmbG93aTQgZmw0ID0gewotCQkuZmxvd2k0X29pZiA9IG9pZiwKLQkJLmZsb3dpNF9tYXJrID0gc2stPnNrX21hcmssCi0JCS5kYWRkciA9IGRzdCwKLQkJLnNhZGRyID0gc3JjLAotCQkuZmxvd2k0X3RvcyA9IHRvcywKLQkJLmZsb3dpNF9wcm90byA9IHByb3RvY29sLAotCQkuZmw0X3Nwb3J0ID0gc3BvcnQsCi0JCS5mbDRfZHBvcnQgPSBkcG9ydCwKLQl9OwogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAlzdHJ1Y3QgcnRhYmxlICpydDsKIAotCWlmIChpbmV0X3NrKHNrKS0+dHJhbnNwYXJlbnQpCi0JCWZsNC5mbG93aTRfZmxhZ3MgfD0gRkxPV0lfRkxBR19BTllTUkM7Ci0JaWYgKHByb3RvY29sID09IElQUFJPVE9fVENQKQotCQlmbDQuZmxvd2k0X2ZsYWdzIHw9IEZMT1dJX0ZMQUdfUFJFQ09XX01FVFJJQ1M7Ci0JaWYgKGNhbl9zbGVlcCkKLQkJZmw0LmZsb3dpNF9mbGFncyB8PSBGTE9XSV9GTEFHX0NBTl9TTEVFUDsKKwlpcF9yb3V0ZV9jb25uZWN0X2luaXQoZmw0LCBkc3QsIHNyYywgdG9zLCBvaWYsIHByb3RvY29sLAorCQkJICAgICAgc3BvcnQsIGRwb3J0LCBzaywgY2FuX3NsZWVwKTsKIAogCWlmICghZHN0IHx8ICFzcmMpIHsKLQkJcnQgPSBfX2lwX3JvdXRlX291dHB1dF9rZXkobmV0LCAmZmw0KTsKKwkJcnQgPSBfX2lwX3JvdXRlX291dHB1dF9rZXkobmV0LCBmbDQpOwogCQlpZiAoSVNfRVJSKHJ0KSkKIAkJCXJldHVybiBydDsKLQkJZmw0LmRhZGRyID0gcnQtPnJ0X2RzdDsKLQkJZmw0LnNhZGRyID0gcnQtPnJ0X3NyYzsKIAkJaXBfcnRfcHV0KHJ0KTsKIAl9Ci0Jc2VjdXJpdHlfc2tfY2xhc3NpZnlfZmxvdyhzaywgZmxvd2k0X3RvX2Zsb3dpKCZmbDQpKTsKLQlyZXR1cm4gaXBfcm91dGVfb3V0cHV0X2Zsb3cobmV0LCAmZmw0LCBzayk7CisJc2VjdXJpdHlfc2tfY2xhc3NpZnlfZmxvdyhzaywgZmxvd2k0X3RvX2Zsb3dpKGZsNCkpOworCXJldHVybiBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhuZXQsIGZsNCwgc2spOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBydGFibGUgKmlwX3JvdXRlX25ld3BvcnRzKHN0cnVjdCBydGFibGUgKnJ0LAotCQkJCQkgICAgICAgdTggcHJvdG9jb2wsIF9fYmUxNiBvcmlnX3Nwb3J0LAotCQkJCQkgICAgICAgX19iZTE2IG9yaWdfZHBvcnQsIF9fYmUxNiBzcG9ydCwKLQkJCQkJICAgICAgIF9fYmUxNiBkcG9ydCwgc3RydWN0IHNvY2sgKnNrKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgcnRhYmxlICppcF9yb3V0ZV9uZXdwb3J0cyhzdHJ1Y3QgZmxvd2k0ICpmbDQsIHN0cnVjdCBydGFibGUgKnJ0LAorCQkJCQkgICAgICAgX19iZTE2IG9yaWdfc3BvcnQsIF9fYmUxNiBvcmlnX2Rwb3J0LAorCQkJCQkgICAgICAgX19iZTE2IHNwb3J0LCBfX2JlMTYgZHBvcnQsCisJCQkJCSAgICAgICBzdHJ1Y3Qgc29jayAqc2spCiB7CiAJaWYgKHNwb3J0ICE9IG9yaWdfc3BvcnQgfHwgZHBvcnQgIT0gb3JpZ19kcG9ydCkgewotCQlzdHJ1Y3QgZmxvd2k0IGZsNCA9IHsKLQkJCS5mbG93aTRfb2lmID0gcnQtPnJ0X29pZiwKLQkJCS5mbG93aTRfbWFyayA9IHJ0LT5ydF9tYXJrLAotCQkJLmRhZGRyID0gcnQtPnJ0X2RzdCwKLQkJCS5zYWRkciA9IHJ0LT5ydF9zcmMsCi0JCQkuZmxvd2k0X3RvcyA9IHJ0LT5ydF90b3MsCi0JCQkuZmxvd2k0X3Byb3RvID0gcHJvdG9jb2wsCi0JCQkuZmw0X3Nwb3J0ID0gc3BvcnQsCi0JCQkuZmw0X2Rwb3J0ID0gZHBvcnQKLQkJfTsKLQkJaWYgKGluZXRfc2soc2spLT50cmFuc3BhcmVudCkKLQkJCWZsNC5mbG93aTRfZmxhZ3MgfD0gRkxPV0lfRkxBR19BTllTUkM7Ci0JCWlmIChwcm90b2NvbCA9PSBJUFBST1RPX1RDUCkKLQkJCWZsNC5mbG93aTRfZmxhZ3MgfD0gRkxPV0lfRkxBR19QUkVDT1dfTUVUUklDUzsKKwkJZmw0LT5mbDRfZHBvcnQgPSBkcG9ydDsKKwkJZmw0LT5mbDRfc3BvcnQgPSBzcG9ydDsKIAkJaXBfcnRfcHV0KHJ0KTsKLQkJc2VjdXJpdHlfc2tfY2xhc3NpZnlfZmxvdyhzaywgZmxvd2k0X3RvX2Zsb3dpKCZmbDQpKTsKLQkJcmV0dXJuIGlwX3JvdXRlX291dHB1dF9mbG93KHNvY2tfbmV0KHNrKSwgJmZsNCwgc2spOworCQlzZWN1cml0eV9za19jbGFzc2lmeV9mbG93KHNrLCBmbG93aTRfdG9fZmxvd2koZmw0KSk7CisJCXJldHVybiBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhzb2NrX25ldChzayksIGZsNCwgc2spOwogCX0KIAlyZXR1cm4gcnQ7CiB9CiAKLWV4dGVybiB2b2lkIHJ0X2JpbmRfcGVlcihzdHJ1Y3QgcnRhYmxlICpydCwgaW50IGNyZWF0ZSk7CitleHRlcm4gdm9pZCBydF9iaW5kX3BlZXIoc3RydWN0IHJ0YWJsZSAqcnQsIF9fYmUzMiBkYWRkciwgaW50IGNyZWF0ZSk7CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXRfcGVlciAqcnRfZ2V0X3BlZXIoc3RydWN0IHJ0YWJsZSAqcnQpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0X3BlZXIgKnJ0X2dldF9wZWVyKHN0cnVjdCBydGFibGUgKnJ0LCBfX2JlMzIgZGFkZHIpCiB7CiAJaWYgKHJ0LT5wZWVyKQogCQlyZXR1cm4gcnQtPnBlZXI7CiAKLQlydF9iaW5kX3BlZXIocnQsIDApOworCXJ0X2JpbmRfcGVlcihydCwgZGFkZHIsIDApOwogCXJldHVybiBydC0+cGVlcjsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9jb21tYW5kLmggYi9pbmNsdWRlL25ldC9zY3RwL2NvbW1hbmQuaAppbmRleCBjMDFkYzk5Li4yYjQ0NzY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL2NvbW1hbmQuaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL2NvbW1hbmQuaApAQCAtNzMsNyArNzMsNiBAQAogCVNDVFBfQ01EX0lOSVRfRkFJTEVELCAgIC8qIEhpZ2ggbGV2ZWwsIGRvIGluaXQgZmFpbHVyZSB3b3JrLiAqLwogCVNDVFBfQ01EX1JFUE9SVF9EVVAsCS8qIFJlcG9ydCBhIGR1cGxpY2F0ZSBUU04uICAqLwogCVNDVFBfQ01EX1NUUklLRSwJLyogTWFyayBhIHN0cmlrZSBhZ2FpbnN0IGEgdHJhbnNwb3J0LiAgKi8KLQlTQ1RQX0NNRF9UUkFOU01JVCwgICAgICAvKiBUcmFuc21pdCB0aGUgb3V0cXVldWUuICovCiAJU0NUUF9DTURfSEJfVElNRVJTX1NUQVJULCAgICAvKiBTdGFydCB0aGUgaGVhcnRiZWF0IHRpbWVycy4gKi8KIAlTQ1RQX0NNRF9IQl9USU1FUl9VUERBVEUsICAgIC8qIFVwZGF0ZSBhIGhlYXJ0YmVhdCB0aW1lcnMuICAqLwogCVNDVFBfQ01EX0hCX1RJTUVSU19TVE9QLCAgICAgLyogU3RvcCB0aGUgaGVhcnRiZWF0IHRpbWVycy4gICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL2NvbnN0YW50cy5oIGIvaW5jbHVkZS9uZXQvc2N0cC9jb25zdGFudHMuaAppbmRleCBjNzBkOGNjLi45NDJiODY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL2NvbnN0YW50cy5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmgKQEAgLTE1MCw3ICsxNTAsNiBAQAogU0NUUF9TVUJUWVBFX0NPTlNUUlVDVE9SKFBSSU1JVElWRSwJc2N0cF9ldmVudF9wcmltaXRpdmVfdCwJcHJpbWl0aXZlKQogCiAKLSNkZWZpbmUgc2N0cF9jaHVua19pc19jb250cm9sKGEpIChhLT5jaHVua19oZHItPnR5cGUgIT0gU0NUUF9DSURfREFUQSkKICNkZWZpbmUgc2N0cF9jaHVua19pc19kYXRhKGEpIChhLT5jaHVua19oZHItPnR5cGUgPT0gU0NUUF9DSURfREFUQSkKIAogLyogQ2FsY3VsYXRlIHRoZSBhY3R1YWwgZGF0YSBzaXplIGluIGEgZGF0YSBjaHVuayAqLwpAQCAtMTg4LDE1ICsxODcsMTQgQEAKIC8qIFNDVFAgc3RhdGUgZGVmaW5lcyBmb3IgaW50ZXJuYWwgc3RhdGUgbWFjaGluZSAqLwogdHlwZWRlZiBlbnVtIHsKIAotCVNDVFBfU1RBVEVfRU1QVFkJCT0gMCwKLQlTQ1RQX1NUQVRFX0NMT1NFRAkJPSAxLAotCVNDVFBfU1RBVEVfQ09PS0lFX1dBSVQJCT0gMiwKLQlTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQJPSAzLAotCVNDVFBfU1RBVEVfRVNUQUJMSVNIRUQJCT0gNCwKLQlTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcJPSA1LAotCVNDVFBfU1RBVEVfU0hVVERPV05fU0VOVAk9IDYsCi0JU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRAk9IDcsCi0JU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVAk9IDgsCisJU0NUUF9TVEFURV9DTE9TRUQJCT0gMCwKKwlTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUCQk9IDEsCisJU0NUUF9TVEFURV9DT09LSUVfRUNIT0VECT0gMiwKKwlTQ1RQX1NUQVRFX0VTVEFCTElTSEVECQk9IDMsCisJU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HCT0gNCwKKwlTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQJPSA1LAorCVNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQJPSA2LAorCVNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQJPSA3LAogCiB9IHNjdHBfc3RhdGVfdDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmggYi9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaAppbmRleCAwMWUwOTRjLi5iMmMyMzY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaApAQCAtNTMwLDcgKzUzMCw2IEBACiAKICNkZWZpbmUgX3NjdHBfd2Fsa19wYXJhbXMocG9zLCBjaHVuaywgZW5kLCBtZW1iZXIpXAogZm9yIChwb3MudiA9IGNodW5rLT5tZW1iZXI7XAotICAgICBwb3MudiA8PSAodm9pZCAqKWNodW5rICsgZW5kIC0gc2l6ZW9mKHNjdHBfcGFyYW1oZHJfdCkgJiZcCiAgICAgIHBvcy52IDw9ICh2b2lkICopY2h1bmsgKyBlbmQgLSBudG9ocyhwb3MucC0+bGVuZ3RoKSAmJlwKICAgICAgbnRvaHMocG9zLnAtPmxlbmd0aCkgPj0gc2l6ZW9mKHNjdHBfcGFyYW1oZHJfdCk7XAogICAgICBwb3MudiArPSBXT1JEX1JPVU5EKG50b2hzKHBvcy5wLT5sZW5ndGgpKSkKQEAgLTU0MSw3ICs1NDAsNiBAQAogI2RlZmluZSBfc2N0cF93YWxrX2Vycm9ycyhlcnIsIGNodW5rX2hkciwgZW5kKVwKIGZvciAoZXJyID0gKHNjdHBfZXJyaGRyX3QgKikoKHZvaWQgKiljaHVua19oZHIgKyBcCiAJICAgIHNpemVvZihzY3RwX2NodW5raGRyX3QpKTtcCi0gICAgICh2b2lkICopZXJyIDw9ICh2b2lkICopY2h1bmtfaGRyICsgZW5kIC0gc2l6ZW9mKHNjdHBfZXJyaGRyX3QpICYmXAogICAgICAodm9pZCAqKWVyciA8PSAodm9pZCAqKWNodW5rX2hkciArIGVuZCAtIG50b2hzKGVyci0+bGVuZ3RoKSAmJlwKICAgICAgbnRvaHMoZXJyLT5sZW5ndGgpID49IHNpemVvZihzY3RwX2Vycmhkcl90KTsgXAogICAgICBlcnIgPSAoc2N0cF9lcnJoZHJfdCAqKSgodm9pZCAqKWVyciArIFdPUkRfUk9VTkQobnRvaHMoZXJyLT5sZW5ndGgpKSkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3NtLmggYi9pbmNsdWRlL25ldC9zY3RwL3NtLmgKaW5kZXggOTM1MmQxMi4uOTE0ODYzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9zbS5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvc20uaApAQCAtMTY1LDYgKzE2NSw3IEBACiBzY3RwX3N0YXRlX2ZuX3Qgc2N0cF9zZl9kb19wcm1fYXNjb25mOwogCiAvKiBQcm90b3R5cGVzIGZvciBvdGhlciBldmVudCBzdGF0ZSBmdW5jdGlvbnMuICAqLworc2N0cF9zdGF0ZV9mbl90IHNjdHBfc2ZfZG9fbm9fcGVuZGluZ190c247CiBzY3RwX3N0YXRlX2ZuX3Qgc2N0cF9zZl9kb185XzJfc3RhcnRfc2h1dGRvd247CiBzY3RwX3N0YXRlX2ZuX3Qgc2N0cF9zZl9kb185XzJfc2h1dGRvd25fYWNrOwogc2N0cF9zdGF0ZV9mbl90IHNjdHBfc2ZfaWdub3JlX290aGVyOwpAQCAtMjMyLDkgKzIzMyw3IEBACiAJCQkJICAgY29uc3Qgc3RydWN0IHNjdHBfY2h1bmsgKiwKIAkJCQkgICBzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKTsKIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX21ha2VfaGVhcnRiZWF0KGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosCi0JCQkJICBjb25zdCBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKiwKLQkJCQkgIGNvbnN0IHZvaWQgKnBheWxvYWQsCi0JCQkJICBjb25zdCBzaXplX3QgcGF5bGVuKTsKKwkJCQkgIGNvbnN0IHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqKTsKIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX21ha2VfaGVhcnRiZWF0X2Fjayhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqLAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBzY3RwX2NodW5rICosCiAJCQkJICAgICAgY29uc3Qgdm9pZCAqcGF5bG9hZCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oIGIvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmgKaW5kZXggMGY2ZTYwYS4uNzk1ZjQ4OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmgKQEAgLTU2NCwxOSArNTY0LDE1IEBACiAJCQkJCSBpbnQgb3B0bmFtZSwKIAkJCQkJIGNoYXIgX191c2VyICpvcHR2YWwsCiAJCQkJCSBpbnQgX191c2VyICpvcHRsZW4pOwotCXN0cnVjdCBkc3RfZW50cnkgKigqZ2V0X2RzdCkJKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAotCQkJCQkgdW5pb24gc2N0cF9hZGRyICpkYWRkciwKLQkJCQkJIHVuaW9uIHNjdHBfYWRkciAqc2FkZHIpOworCXZvaWQJCSgqZ2V0X2RzdCkJKHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdCwKKwkJCQkJIHVuaW9uIHNjdHBfYWRkciAqc2FkZHIsCisJCQkJCSBzdHJ1Y3QgZmxvd2kgKmZsLAorCQkJCQkgc3RydWN0IHNvY2sgKnNrKTsKIAl2b2lkCQkoKmdldF9zYWRkcikJKHN0cnVjdCBzY3RwX3NvY2sgKnNrLAotCQkJCQkgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0JCQkJCSBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCi0JCQkJCSB1bmlvbiBzY3RwX2FkZHIgKmRhZGRyLAotCQkJCQkgdW5pb24gc2N0cF9hZGRyICpzYWRkcik7CisJCQkJCSBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnQsCisJCQkJCSBzdHJ1Y3QgZmxvd2kgKmZsKTsKIAl2b2lkCQkoKmNvcHlfYWRkcmxpc3QpIChzdHJ1Y3QgbGlzdF9oZWFkICosCiAJCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKik7Ci0Jdm9pZAkJKCpkc3Rfc2FkZHIpCSh1bmlvbiBzY3RwX2FkZHIgKnNhZGRyLAotCQkJCQkgc3RydWN0IGRzdF9lbnRyeSAqZHN0LAotCQkJCQkgX19iZTE2IHBvcnQpOwogCWludAkJKCpjbXBfYWRkcikJKGNvbnN0IHVuaW9uIHNjdHBfYWRkciAqYWRkcjEsCiAJCQkJCSBjb25zdCB1bmlvbiBzY3RwX2FkZHIgKmFkZHIyKTsKIAl2b2lkCQkoKmFkZHJfY29weSkJKHVuaW9uIHNjdHBfYWRkciAqZHN0LApAQCAtODk4LDYgKzg5NCw3IEBACiAJCS8qIElzIHRoaXMgc3RydWN0dXJlIGtmcmVlKClhYmxlPyAqLwogCQltYWxsb2NlZDoxOwogCisJc3RydWN0IGZsb3dpIGZsOwogCiAJLyogVGhpcyBpcyB0aGUgcGVlcidzIElQIGFkZHJlc3MgYW5kIHBvcnQuICovCiAJdW5pb24gc2N0cF9hZGRyIGlwYWRkcjsKQEAgLTEwNjEsNyArMTA1OCw3IEBACiAJCQkgICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqKTsKIHZvaWQgc2N0cF90cmFuc3BvcnRfcm91dGUoc3RydWN0IHNjdHBfdHJhbnNwb3J0ICosIHVuaW9uIHNjdHBfYWRkciAqLAogCQkJICBzdHJ1Y3Qgc2N0cF9zb2NrICopOwotdm9pZCBzY3RwX3RyYW5zcG9ydF9wbXR1KHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqKTsKK3ZvaWQgc2N0cF90cmFuc3BvcnRfcG10dShzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKiwgc3RydWN0IHNvY2sgKnNrKTsKIHZvaWQgc2N0cF90cmFuc3BvcnRfZnJlZShzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKik7CiB2b2lkIHNjdHBfdHJhbnNwb3J0X3Jlc2V0X3RpbWVycyhzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKik7CiB2b2lkIHNjdHBfdHJhbnNwb3J0X2hvbGQoc3RydWN0IHNjdHBfdHJhbnNwb3J0ICopOwpAQCAtMTQwMCw3ICsxMzk3LDcgQEAKIGludCBzY3RwX3ZlcmlmeV9pbml0KGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLCBzY3RwX2NpZF90LAogCQkgICAgIHNjdHBfaW5pdF9jaHVua190ICpwZWVyX2luaXQsIHN0cnVjdCBzY3RwX2NodW5rICpjaHVuaywKIAkJICAgICBzdHJ1Y3Qgc2N0cF9jaHVuayAqKmVycl9jaHVuayk7Ci1pbnQgc2N0cF9wcm9jZXNzX2luaXQoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKiwgc2N0cF9jaWRfdCBjaWQsCitpbnQgc2N0cF9wcm9jZXNzX2luaXQoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKiwgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLAogCQkgICAgICBjb25zdCB1bmlvbiBzY3RwX2FkZHIgKnBlZXIsCiAJCSAgICAgIHNjdHBfaW5pdF9jaHVua190ICppbml0LCBnZnBfdCBnZnApOwogX191MzIgc2N0cF9nZW5lcmF0ZV90YWcoY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3VscGV2ZW50LmggYi9pbmNsdWRlL25ldC9zY3RwL3VscGV2ZW50LmgKaW5kZXggN2VhMTJlOC4uOTliMDI3YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC91bHBldmVudC5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvdWxwZXZlbnQuaApAQCAtMTMyLDYgKzEzMiw5IEBACiAJY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsIF9fdTE2IGtleV9pZCwKIAlfX3UzMiBpbmRpY2F0aW9uLCBnZnBfdCBnZnApOwogCitzdHJ1Y3Qgc2N0cF91bHBldmVudCAqc2N0cF91bHBldmVudF9tYWtlX3NlbmRlcl9kcnlfZXZlbnQoCisJY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsIGdmcF90IGdmcCk7CisKIHZvaWQgc2N0cF91bHBldmVudF9yZWFkX3NuZHJjdmluZm8oY29uc3Qgc3RydWN0IHNjdHBfdWxwZXZlbnQgKmV2ZW50LAogCXN0cnVjdCBtc2doZHIgKik7CiBfX3UxNiBzY3RwX3VscGV2ZW50X2dldF9ub3RpZmljYXRpb25fdHlwZShjb25zdCBzdHJ1Y3Qgc2N0cF91bHBldmVudCAqZXZlbnQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC91c2VyLmggYi9pbmNsdWRlL25ldC9zY3RwL3VzZXIuaAppbmRleCBlNzNlYmRhLi4zMmZkNTEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL3VzZXIuaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL3VzZXIuaApAQCAtOTEsNiArOTEsNyBAQAogI2RlZmluZSBTQ1RQX1BFRVJfQVVUSF9DSFVOS1MJMjYJLyogUmVhZCBvbmx5ICovCiAjZGVmaW5lIFNDVFBfTE9DQUxfQVVUSF9DSFVOS1MJMjcJLyogUmVhZCBvbmx5ICovCiAjZGVmaW5lIFNDVFBfR0VUX0FTU09DX05VTUJFUgkyOAkvKiBSZWFkIG9ubHkgKi8KKyNkZWZpbmUgU0NUUF9HRVRfQVNTT0NfSURfTElTVAkyOQkvKiBSZWFkIG9ubHkgKi8KIAogLyogSW50ZXJuYWwgU29ja2V0IE9wdGlvbnMuIFNvbWUgb2YgdGhlIHNjdHAgbGlicmFyeSBmdW5jdGlvbnMgYXJlCiAgKiBpbXBsZW1lbnRlZCB1c2luZyB0aGVzZSBzb2NrZXQgb3B0aW9ucy4KQEAgLTM1Myw2ICszNTQsMjAgQEAKIAogZW51bSB7IFNDVFBfQVVUSF9ORVdLRVkgPSAwLCB9OwogCisvKgorICogNi4xLjkuIFNDVFBfU0VOREVSX0RSWV9FVkVOVAorICoKKyAqIFdoZW4gdGhlIFNDVFAgc3RhY2sgaGFzIG5vIG1vcmUgdXNlciBkYXRhIHRvIHNlbmQgb3IgcmV0cmFuc21pdCwgdGhpcworICogbm90aWZpY2F0aW9uIGlzIGdpdmVuIHRvIHRoZSB1c2VyLiBBbHNvLCBhdCB0aGUgdGltZSB3aGVuIGEgdXNlciBhcHAKKyAqIHN1YnNjcmliZXMgdG8gdGhpcyBldmVudCwgaWYgdGhlcmUgaXMgbm8gZGF0YSB0byBiZSBzZW50IG9yCisgKiByZXRyYW5zbWl0LCB0aGUgc3RhY2sgd2lsbCBpbW1lZGlhdGVseSBzZW5kIHVwIHRoaXMgbm90aWZpY2F0aW9uLgorICovCitzdHJ1Y3Qgc2N0cF9zZW5kZXJfZHJ5X2V2ZW50IHsKKwlfX3UxNiBzZW5kZXJfZHJ5X3R5cGU7CisJX191MTYgc2VuZGVyX2RyeV9mbGFnczsKKwlfX3UzMiBzZW5kZXJfZHJ5X2xlbmd0aDsKKwlzY3RwX2Fzc29jX3Qgc2VuZGVyX2RyeV9hc3NvY19pZDsKK307CiAKIC8qCiAgKiBEZXNjcmliZWQgaW4gU2VjdGlvbiA3LjMKQEAgLTM2OCw2ICszODMsNyBAQAogCV9fdTggc2N0cF9wYXJ0aWFsX2RlbGl2ZXJ5X2V2ZW50OwogCV9fdTggc2N0cF9hZGFwdGF0aW9uX2xheWVyX2V2ZW50OwogCV9fdTggc2N0cF9hdXRoZW50aWNhdGlvbl9ldmVudDsKKwlfX3U4IHNjdHBfc2VuZGVyX2RyeV9ldmVudDsKIH07CiAKIC8qCkBAIC0zOTEsNiArNDA3LDcgQEAKIAlzdHJ1Y3Qgc2N0cF9hZGFwdGF0aW9uX2V2ZW50IHNuX2FkYXB0YXRpb25fZXZlbnQ7CiAJc3RydWN0IHNjdHBfcGRhcGlfZXZlbnQgc25fcGRhcGlfZXZlbnQ7CiAJc3RydWN0IHNjdHBfYXV0aGtleV9ldmVudCBzbl9hdXRoa2V5X2V2ZW50OworCXN0cnVjdCBzY3RwX3NlbmRlcl9kcnlfZXZlbnQgc25fc2VuZGVyX2RyeV9ldmVudDsKIH07CiAKIC8qIFNlY3Rpb24gNS4zLjEKQEAgLTQwNyw3ICs0MjQsOSBAQAogCVNDVFBfU0hVVERPV05fRVZFTlQsCiAJU0NUUF9QQVJUSUFMX0RFTElWRVJZX0VWRU5ULAogCVNDVFBfQURBUFRBVElPTl9JTkRJQ0FUSU9OLAotCVNDVFBfQVVUSEVOVElDQVRJT05fSU5ESUNBVElPTiwKKwlTQ1RQX0FVVEhFTlRJQ0FUSU9OX0VWRU5ULAorI2RlZmluZSBTQ1RQX0FVVEhFTlRJQ0FUSU9OX0lORElDQVRJT04JU0NUUF9BVVRIRU5USUNBVElPTl9FVkVOVAorCVNDVFBfU0VOREVSX0RSWV9FVkVOVCwKIH07CiAKIC8qIE5vdGlmaWNhdGlvbiBlcnJvciBjb2RlcyB1c2VkIHRvIGZpbGwgdXAgdGhlIGVycm9yIGZpZWxkcyBpbiBzb21lCkBAIC02NjksNiArNjg4LDE4IEBACiB9OwogCiAvKgorICogOC4yLjYuIEdldCB0aGUgQ3VycmVudCBJZGVudGlmaWVycyBvZiBBc3NvY2lhdGlvbnMKKyAqICAgICAgICAoU0NUUF9HRVRfQVNTT0NfSURfTElTVCkKKyAqCisgKiBUaGlzIG9wdGlvbiBnZXRzIHRoZSBjdXJyZW50IGxpc3Qgb2YgU0NUUCBhc3NvY2lhdGlvbiBpZGVudGlmaWVycyBvZgorICogdGhlIFNDVFAgYXNzb2NpYXRpb25zIGhhbmRsZWQgYnkgYSBvbmUtdG8tbWFueSBzdHlsZSBzb2NrZXQuCisgKi8KK3N0cnVjdCBzY3RwX2Fzc29jX2lkcyB7CisJX191MzIJCWdhaWRzX251bWJlcl9vZl9pZHM7CisJc2N0cF9hc3NvY190CWdhaWRzX2Fzc29jX2lkW107Cit9OworCisvKgogICogOC4zLCA4LjUgZ2V0IGFsbCBwZWVyL2xvY2FsIGFkZHJlc3NlcyBpbiBhbiBhc3NvY2lhdGlvbi4KICAqIFRoaXMgcGFyYW1ldGVyIHN0cnVjdCBpcyB1c2VkIGJ5IFNDVFBfR0VUX1BFRVJfQUREUlMgYW5kIAogICogU0NUUF9HRVRfTE9DQUxfQUREUlMgc29ja2V0IG9wdGlvbnMgdXNlZCBpbnRlcm5hbGx5IHRvIGltcGxlbWVudApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc25tcC5oIGIvaW5jbHVkZS9uZXQvc25tcC5oCmluZGV4IDI3NDYxZDYuLjQ3OTA4M2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NubXAuaAorKysgYi9pbmNsdWRlL25ldC9zbm1wLmgKQEAgLTcyLDE0ICs3MiwyNCBAQAogCiAvKiBJQ01QNiAoSVB2Ni1JQ01QKSAqLwogI2RlZmluZSBJQ01QNl9NSUJfTUFYCV9fSUNNUDZfTUlCX01BWAorLyogcGVyIG5ldHdvcmsgbnMgY291bnRlcnMgKi8KIHN0cnVjdCBpY21wdjZfbWliIHsKIAl1bnNpZ25lZCBsb25nCW1pYnNbSUNNUDZfTUlCX01BWF07CiB9OworLyogcGVyIGRldmljZSBjb3VudGVycywgKHNoYXJlZCBvbiBhbGwgY3B1cykgKi8KK3N0cnVjdCBpY21wdjZfbWliX2RldmljZSB7CisJYXRvbWljX2xvbmdfdAltaWJzW0lDTVA2X01JQl9NQVhdOworfTsKIAogI2RlZmluZSBJQ01QNk1TR19NSUJfTUFYICBfX0lDTVA2TVNHX01JQl9NQVgKKy8qIHBlciBuZXR3b3JrIG5zIGNvdW50ZXJzICovCiBzdHJ1Y3QgaWNtcHY2bXNnX21pYiB7CiAJdW5zaWduZWQgbG9uZwltaWJzW0lDTVA2TVNHX01JQl9NQVhdOwogfTsKKy8qIHBlciBkZXZpY2UgY291bnRlcnMsIChzaGFyZWQgb24gYWxsIGNwdXMpICovCitzdHJ1Y3QgaWNtcHY2bXNnX21pYl9kZXZpY2UgeworCWF0b21pY19sb25nX3QJbWlic1tJQ01QNk1TR19NSUJfTUFYXTsKK307CiAKIAogLyogVENQICovCkBAIC0xMTQsNiArMTI0LDggQEAKICAqLyAKICNkZWZpbmUgREVGSU5FX1NOTVBfU1RBVCh0eXBlLCBuYW1lKQlcCiAJX190eXBlb2ZfXyh0eXBlKSBfX3BlcmNwdSAqbmFtZVsyXQorI2RlZmluZSBERUZJTkVfU05NUF9TVEFUX0FUT01JQyh0eXBlLCBuYW1lKQlcCisJX190eXBlb2ZfXyh0eXBlKSAqbmFtZQogI2RlZmluZSBERUNMQVJFX1NOTVBfU1RBVCh0eXBlLCBuYW1lKQlcCiAJZXh0ZXJuIF9fdHlwZW9mX18odHlwZSkgX19wZXJjcHUgKm5hbWVbMl0KIApAQCAtMTI0LDYgKzEzNiw4IEBACiAJCQlfX3RoaXNfY3B1X2luYyhtaWJbMF0tPm1pYnNbZmllbGRdKQogI2RlZmluZSBTTk1QX0lOQ19TVEFUU19VU0VSKG1pYiwgZmllbGQpCVwKIAkJCXRoaXNfY3B1X2luYyhtaWJbMV0tPm1pYnNbZmllbGRdKQorI2RlZmluZSBTTk1QX0lOQ19TVEFUU19BVE9NSUNfTE9ORyhtaWIsIGZpZWxkKQlcCisJCQlhdG9taWNfbG9uZ19pbmMoJm1pYi0+bWlic1tmaWVsZF0pCiAjZGVmaW5lIFNOTVBfSU5DX1NUQVRTKG1pYiwgZmllbGQpCVwKIAkJCXRoaXNfY3B1X2luYyhtaWJbIWluX3NvZnRpcnEoKV0tPm1pYnNbZmllbGRdKQogI2RlZmluZSBTTk1QX0RFQ19TVEFUUyhtaWIsIGZpZWxkKQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zb2NrLmggYi9pbmNsdWRlL25ldC9zb2NrLmgKaW5kZXggMDE4MTBhMy4uZjIwNDZlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc29jay5oCisrKyBiL2luY2x1ZGUvbmV0L3NvY2suaApAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSA8bGludXgvZmlsdGVyLmg+CiAjaW5jbHVkZSA8bGludXgvcmN1bGlzdF9udWxscy5oPgpAQCAtMTM4OSw2ICsxMzkwLDU5IEBACiAJc2stPnNrX3JvdXRlX2NhcHMgJj0gfmZsYWdzOwogfQogCitzdGF0aWMgaW5saW5lIGludCBza2JfZG9fY29weV9kYXRhX25vY2FjaGUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICBjaGFyIF9fdXNlciAqZnJvbSwgY2hhciAqdG8sCisJCQkJCSAgIGludCBjb3B5LCBpbnQgb2Zmc2V0KQoreworCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9OT05FKSB7CisJCWludCBlcnIgPSAwOworCQlfX3dzdW0gY3N1bSA9IGNzdW1fYW5kX2NvcHlfZnJvbV91c2VyKGZyb20sIHRvLCBjb3B5LCAwLCAmZXJyKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJCXNrYi0+Y3N1bSA9IGNzdW1fYmxvY2tfYWRkKHNrYi0+Y3N1bSwgY3N1bSwgb2Zmc2V0KTsKKwl9IGVsc2UgaWYgKHNrLT5za19yb3V0ZV9jYXBzICYgTkVUSUZfRl9OT0NBQ0hFX0NPUFkpIHsKKwkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGZyb20sIGNvcHkpIHx8CisJCSAgICBfX2NvcHlfZnJvbV91c2VyX25vY2FjaGUodG8sIGZyb20sIGNvcHkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfSBlbHNlIGlmIChjb3B5X2Zyb21fdXNlcih0bywgZnJvbSwgY29weSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNrYl9hZGRfZGF0YV9ub2NhY2hlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICAgY2hhciBfX3VzZXIgKmZyb20sIGludCBjb3B5KQoreworCWludCBlcnIsIG9mZnNldCA9IHNrYi0+bGVuOworCisJZXJyID0gc2tiX2RvX2NvcHlfZGF0YV9ub2NhY2hlKHNrLCBza2IsIGZyb20sIHNrYl9wdXQoc2tiLCBjb3B5KSwKKwkJCQkgICAgICAgY29weSwgb2Zmc2V0KTsKKwlpZiAoZXJyKQorCQlfX3NrYl90cmltKHNrYiwgb2Zmc2V0KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNrYl9jb3B5X3RvX3BhZ2Vfbm9jYWNoZShzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpmcm9tLAorCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkJICAgaW50IG9mZiwgaW50IGNvcHkpCit7CisJaW50IGVycjsKKworCWVyciA9IHNrYl9kb19jb3B5X2RhdGFfbm9jYWNoZShzaywgc2tiLCBmcm9tLCBwYWdlX2FkZHJlc3MocGFnZSkgKyBvZmYsCisJCQkJICAgICAgIGNvcHksIHNrYi0+bGVuKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc2tiLT5sZW4JICAgICArPSBjb3B5OworCXNrYi0+ZGF0YV9sZW4JICAgICArPSBjb3B5OworCXNrYi0+dHJ1ZXNpemUJICAgICArPSBjb3B5OworCXNrLT5za193bWVtX3F1ZXVlZCAgICs9IGNvcHk7CisJc2tfbWVtX2NoYXJnZShzaywgY29weSk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IHNrYl9jb3B5X3RvX3BhZ2Uoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqZnJvbSwKIAkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCQkgICBpbnQgb2ZmLCBpbnQgY29weSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RyYW5zcF92Ni5oIGIvaW5jbHVkZS9uZXQvdHJhbnNwX3Y2LmgKaW5kZXggYTgxMjJkYy4uNTI3MWE3NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdHJhbnNwX3Y2LmgKKysrIGIvaW5jbHVkZS9uZXQvdHJhbnNwX3Y2LmgKQEAgLTcsOCArNyw2IEBACiAgKglJUHY2IHRyYW5zcG9ydCBwcm90b2NvbHMKICAqLwogCi0jaWZkZWYgX19LRVJORUxfXwotCiBleHRlcm4gc3RydWN0IHByb3RvIHJhd3Y2X3Byb3Q7CiBleHRlcm4gc3RydWN0IHByb3RvIHVkcHY2X3Byb3Q7CiBleHRlcm4gc3RydWN0IHByb3RvIHVkcGxpdGV2Nl9wcm90OwpAQCAtNTcsNSArNTUsMyBAQAogZXh0ZXJuIHZvaWQgaW5ldDZfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzayk7CiAKICNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3dpbWF4LmggYi9pbmNsdWRlL25ldC93aW1heC5oCmluZGV4IGM3OTliYTcuLjczMjhkNTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3dpbWF4LmgKKysrIGIvaW5jbHVkZS9uZXQvd2ltYXguaApAQCAtMjUwLDcgKzI1MCw2IEBACiAKICNpZm5kZWYgX19ORVRfX1dJTUFYX0hfXwogI2RlZmluZSBfX05FVF9fV0lNQVhfSF9fCi0jaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8bGludXgvd2ltYXguaD4KICNpbmNsdWRlIDxuZXQvZ2VuZXRsaW5rLmg+CkBAIC01MTgsOCArNTE3LDQgQEAKIGV4dGVybiBpbnQgd2ltYXhfcmZraWxsKHN0cnVjdCB3aW1heF9kZXYgKiwgZW51bSB3aW1heF9yZl9zdGF0ZSk7CiBleHRlcm4gaW50IHdpbWF4X3Jlc2V0KHN0cnVjdCB3aW1heF9kZXYgKik7CiAKLSNlbHNlCi0vKiBZb3UgbWlnaHQgYmUgbG9va2luZyBmb3IgbGludXgvd2ltYXguaCAqLwotI2Vycm9yIFRoaXMgZmlsZSBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGZyb20gdXNlciBzcGFjZS4KLSNlbmRpZiAvKiAjaWZkZWYgX19LRVJORUxfXyAqLwogI2VuZGlmIC8qICNpZm5kZWYgX19ORVRfX1dJTUFYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveGZybS5oIGIvaW5jbHVkZS9uZXQveGZybS5oCmluZGV4IDIwYWZlYWEuLmIyMDNlMTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3hmcm0uaAorKysgYi9pbmNsdWRlL25ldC94ZnJtLmgKQEAgLTk1OCw2ICs5NTgsMTUgQEAKIAlzdHJ1Y3QgeGZybV9zdGF0ZQkqeHZlY1tYRlJNX01BWF9ERVBUSF07CiB9OwogCitzdGF0aWMgaW5saW5lIGludCBzZWNwYXRoX2V4aXN0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworI2lmZGVmIENPTkZJR19YRlJNCisJcmV0dXJuIHNrYi0+c3AgIT0gTlVMTDsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKwogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2VjX3BhdGggKgogc2VjcGF0aF9nZXQoc3RydWN0IHNlY19wYXRoICpzcCkKIHsKQEAgLTE0NjgsNyArMTQ3Nyw3IEBACiBleHRlcm4gaW50IHhmcm02X3R1bm5lbF9yZWdpc3RlcihzdHJ1Y3QgeGZybTZfdHVubmVsICpoYW5kbGVyLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpOwogZXh0ZXJuIGludCB4ZnJtNl90dW5uZWxfZGVyZWdpc3RlcihzdHJ1Y3QgeGZybTZfdHVubmVsICpoYW5kbGVyLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpOwogZXh0ZXJuIF9fYmUzMiB4ZnJtNl90dW5uZWxfYWxsb2Nfc3BpKHN0cnVjdCBuZXQgKm5ldCwgeGZybV9hZGRyZXNzX3QgKnNhZGRyKTsKLWV4dGVybiBfX2JlMzIgeGZybTZfdHVubmVsX3NwaV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIpOworZXh0ZXJuIF9fYmUzMiB4ZnJtNl90dW5uZWxfc3BpX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkcik7CiBleHRlcm4gaW50IHhmcm02X2V4dHJhY3Rfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQgeGZybTZfcHJlcGFyZV9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIGludCB4ZnJtNl9vdXRwdXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CkBAIC0xNTYzLDggKzE1NzIsOCBAQAogCWNhc2UgQUZfSU5FVDoKIAkJcmV0dXJuIChfX2ZvcmNlIHUzMilhLT5hNCAtIChfX2ZvcmNlIHUzMiliLT5hNDsKIAljYXNlIEFGX0lORVQ2OgotCQlyZXR1cm4gaXB2Nl9hZGRyX2NtcCgoc3RydWN0IGluNl9hZGRyICopYSwKLQkJCQkgICAgIChzdHJ1Y3QgaW42X2FkZHIgKiliKTsKKwkJcmV0dXJuIGlwdjZfYWRkcl9jbXAoKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqKWEsCisJCQkJICAgICAoY29uc3Qgc3RydWN0IGluNl9hZGRyICopYik7CiAJfQogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvaWJfYWRkci5oIGIvaW5jbHVkZS9yZG1hL2liX2FkZHIuaAppbmRleCBiNWZjOWYzLi5hZThjNjhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfYWRkci5oCisrKyBiL2luY2x1ZGUvcmRtYS9pYl9hZGRyLmgKQEAgLTIxNywxOCArMjE3LDE5IEBACiBzdGF0aWMgaW5saW5lIGludCBpYm9lX2dldF9yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGV0aHRvb2xfY21kIGNtZDsKKwl1MzIgc3BlZWQ7CiAKLQlpZiAoIWRldi0+ZXRodG9vbF9vcHMgfHwgIWRldi0+ZXRodG9vbF9vcHMtPmdldF9zZXR0aW5ncyB8fAotCSAgICBkZXYtPmV0aHRvb2xfb3BzLT5nZXRfc2V0dGluZ3MoZGV2LCAmY21kKSkKKwlpZiAoZGV2X2V0aHRvb2xfZ2V0X3NldHRpbmdzKGRldiwgJmNtZCkpCiAJCXJldHVybiBJQl9SQVRFX1BPUlRfQ1VSUkVOVDsKIAotCWlmIChjbWQuc3BlZWQgPj0gNDAwMDApCisJc3BlZWQgPSBldGh0b29sX2NtZF9zcGVlZCgmY21kKTsKKwlpZiAoc3BlZWQgPj0gNDAwMDApCiAJCXJldHVybiBJQl9SQVRFXzQwX0dCUFM7Ci0JZWxzZSBpZiAoY21kLnNwZWVkID49IDMwMDAwKQorCWVsc2UgaWYgKHNwZWVkID49IDMwMDAwKQogCQlyZXR1cm4gSUJfUkFURV8zMF9HQlBTOwotCWVsc2UgaWYgKGNtZC5zcGVlZCA+PSAyMDAwMCkKKwllbHNlIGlmIChzcGVlZCA+PSAyMDAwMCkKIAkJcmV0dXJuIElCX1JBVEVfMjBfR0JQUzsKLQllbHNlIGlmIChjbWQuc3BlZWQgPj0gMTAwMDApCisJZWxzZSBpZiAoc3BlZWQgPj0gMTAwMDApCiAJCXJldHVybiBJQl9SQVRFXzEwX0dCUFM7CiAJZWxzZQogCQlyZXR1cm4gSUJfUkFURV9QT1JUX0NVUlJFTlQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2FrNDY0MS5oIGIvaW5jbHVkZS9zb3VuZC9hazQ2NDEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmQxOTkxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC9hazQ2NDEuaApAQCAtMCwwICsxLDI2IEBACisvKgorICogQUs0NjQxIEFMU0EgU29DIENvZGVjIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDA5IFBoaWxpcHAgWmFiZWwKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BSzQ2NDFfSAorI2RlZmluZSBfX0FLNDY0MV9ICisKKy8qKgorICogc3RydWN0IGFrNDY0MV9wbGF0Zm9ybV9kYXRhIC0gcGxhdGZvcm0gc3BlY2lmaWMgQUs0NjQxIGNvbmZpZ3VyYXRpb24KKyAqIEBncGlvX3Bvd2VyOglHUElPIHRvIGNvbnRyb2wgZXh0ZXJuYWwgcG93ZXIgdG8gQUs0NjQxCisgKiBAZ3Bpb19ucGRuOglHUElPIGNvbm5lY3RlZCB0byBBSzQ2NDEgblBETiBwaW4KKyAqCisgKiBCb3RoIEdQSU8gcGFyYW1ldGVycyBhcmUgb3B0aW9uYWwuCisgKi8KK3N0cnVjdCBhazQ2NDFfcGxhdGZvcm1fZGF0YSB7CisJaW50IGdwaW9fcG93ZXI7CisJaW50IGdwaW9fbnBkbjsKK307CisKKyNlbmRpZiAvKiBfX0FLNDY0MV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2NvbnRyb2wuaCBiL2luY2x1ZGUvc291bmQvY29udHJvbC5oCmluZGV4IDQwNGFjYjguLjFhOTRhMjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvY29udHJvbC5oCisrKyBiL2luY2x1ZGUvc291bmQvY29udHJvbC5oCkBAIC0xMTMsNiArMTEzLDcgQEAKIHZvaWQgc25kX2N0bF9mcmVlX29uZShzdHJ1Y3Qgc25kX2tjb250cm9sICoga2NvbnRyb2wpOwogaW50IHNuZF9jdGxfYWRkKHN0cnVjdCBzbmRfY2FyZCAqIGNhcmQsIHN0cnVjdCBzbmRfa2NvbnRyb2wgKiBrY29udHJvbCk7CiBpbnQgc25kX2N0bF9yZW1vdmUoc3RydWN0IHNuZF9jYXJkICogY2FyZCwgc3RydWN0IHNuZF9rY29udHJvbCAqIGtjb250cm9sKTsKK2ludCBzbmRfY3RsX3JlcGxhY2Uoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgYm9vbCBhZGRfb25fcmVwbGFjZSk7CiBpbnQgc25kX2N0bF9yZW1vdmVfaWQoc3RydWN0IHNuZF9jYXJkICogY2FyZCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pZCAqaWQpOwogaW50IHNuZF9jdGxfcmVuYW1lX2lkKHN0cnVjdCBzbmRfY2FyZCAqIGNhcmQsIHN0cnVjdCBzbmRfY3RsX2VsZW1faWQgKnNyY19pZCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pZCAqZHN0X2lkKTsKIGludCBzbmRfY3RsX2FjdGl2YXRlX2lkKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pZCAqaWQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL21heDk4MDk1LmggYi9pbmNsdWRlL3NvdW5kL21heDk4MDk1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUxM2E0MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvbWF4OTgwOTUuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogUGxhdGZvcm0gZGF0YSBmb3IgTUFYOTgwOTUKKyAqCisgKiBDb3B5cmlnaHQgMjAxMSBNYXhpbSBJbnRlZ3JhdGVkIFByb2R1Y3RzCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19TT1VORF9NQVg5ODA5NV9QREFUQV9IX18KKyNkZWZpbmUgX19TT1VORF9NQVg5ODA5NV9QREFUQV9IX18KKworLyogRXF1YWxpemVyIGZpbHRlciByZXNwb25zZSBjb25maWd1cmF0aW9uICovCitzdHJ1Y3QgbWF4OTgwOTVfZXFfY2ZnIHsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIGludCByYXRlOworCXUxNiBiYW5kMVs1XTsKKwl1MTYgYmFuZDJbNV07CisJdTE2IGJhbmQzWzVdOworCXUxNiBiYW5kNFs1XTsKKwl1MTYgYmFuZDVbNV07Cit9OworCisvKiBCaXF1YWQgZmlsdGVyIHJlc3BvbnNlIGNvbmZpZ3VyYXRpb24gKi8KK3N0cnVjdCBtYXg5ODA5NV9iaXF1YWRfY2ZnIHsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIGludCByYXRlOworCXUxNiBiYW5kMVs1XTsKKwl1MTYgYmFuZDJbNV07Cit9OworCisvKiBjb2RlYyBwbGF0Zm9ybSBkYXRhICovCitzdHJ1Y3QgbWF4OTgwOTVfcGRhdGEgeworCisJLyogRXF1YWxpemVycyBmb3IgREFJMSBhbmQgREFJMiAqLworCXN0cnVjdCBtYXg5ODA5NV9lcV9jZmcgKmVxX2NmZzsKKwl1bnNpZ25lZCBpbnQgZXFfY2ZnY250OworCisJLyogQmlxdWFkIGZpbHRlciBmb3IgREFJMSBhbmQgREFJMiAqLworCXN0cnVjdCBtYXg5ODA5NV9iaXF1YWRfY2ZnICpicV9jZmc7CisJdW5zaWduZWQgaW50IGJxX2NmZ2NudDsKKworCS8qIEFuYWxvZy9kaWdpdGFsIG1pY3JvcGhvbmUgY29uZmlndXJhdGlvbjoKKwkgKiAwID0gYW5hbG9nIG1pY3JvcGhvbmUgaW5wdXQgKG5vcm1hbCBzZXR0aW5nKQorCSAqIDEgPSBkaWdpdGFsIG1pY3JvcGhvbmUgaW5wdXQKKwkgKi8KKwl1bnNpZ25lZCBpbnQgZGlnbWljX2xlZnRfbW9kZToxOworCXVuc2lnbmVkIGludCBkaWdtaWNfcmlnaHRfbW9kZToxOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3NvYy1kYXBtLmggYi9pbmNsdWRlL3NvdW5kL3NvYy1kYXBtLmgKaW5kZXggZjcyYzEwMy4uYzQ2ZTdkOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9zb2MtZGFwbS5oCisrKyBiL2luY2x1ZGUvc291bmQvc29jLWRhcG0uaApAQCAtMjQsNyArMjQsNyBAQAogICogU29DIGR5bmFtaWMgYXVkaW8gcG93ZXIgbWFuYWdlbWVudAogICoKICAqIFdlIGNhbiBoYXZlIHVwIHRvIDQgcG93ZXIgZG9tYWlucwotICogCTEuIENvZGVjIGRvbWFpbiAtIFZSRUYsIFZNSUQKKyAqICAxLiBDb2RlYyBkb21haW4gLSBWUkVGLCBWTUlECiAgKiAgICAgVXN1YWxseSBjb250cm9sbGVkIGF0IGNvZGVjIHByb2JlL3JlbW92ZSwgYWx0aG91Z2ggY2FuIGJlIHNldAogICogICAgIGF0IHN0cmVhbSB0aW1lIGlmIHBvd2VyIGlzIG5vdCBuZWVkZWQgZm9yIHNpZGV0b25lLCBldGMuCiAgKiAgMi4gUGxhdGZvcm0vTWFjaGluZSBkb21haW4gLSBwaHlzaWNhbGx5IGNvbm5lY3RlZCBpbnB1dHMgYW5kIG91dHB1dHMKQEAgLTM5LDMwICszOSwzMCBAQAogCiAvKiBjb2RlYyBkb21haW4gKi8KICNkZWZpbmUgU05EX1NPQ19EQVBNX1ZNSUQod25hbWUpIFwKLXsJLmlkID0gc25kX3NvY19kYXBtX3ZtaWQsIC5uYW1lID0gd25hbWUsIC5rY29udHJvbHMgPSBOVUxMLCBcCit7CS5pZCA9IHNuZF9zb2NfZGFwbV92bWlkLCAubmFtZSA9IHduYW1lLCAua2NvbnRyb2xfbmV3cyA9IE5VTEwsIFwKIAkubnVtX2tjb250cm9scyA9IDB9CiAKIC8qIHBsYXRmb3JtIGRvbWFpbiAqLwogI2RlZmluZSBTTkRfU09DX0RBUE1fSU5QVVQod25hbWUpIFwKLXsJLmlkID0gc25kX3NvY19kYXBtX2lucHV0LCAubmFtZSA9IHduYW1lLCAua2NvbnRyb2xzID0gTlVMTCwgXAorewkuaWQgPSBzbmRfc29jX2RhcG1faW5wdXQsIC5uYW1lID0gd25hbWUsIC5rY29udHJvbF9uZXdzID0gTlVMTCwgXAogCS5udW1fa2NvbnRyb2xzID0gMCwgLnJlZyA9IFNORF9TT0NfTk9QTSB9CiAjZGVmaW5lIFNORF9TT0NfREFQTV9PVVRQVVQod25hbWUpIFwKLXsJLmlkID0gc25kX3NvY19kYXBtX291dHB1dCwgLm5hbWUgPSB3bmFtZSwgLmtjb250cm9scyA9IE5VTEwsIFwKK3sJLmlkID0gc25kX3NvY19kYXBtX291dHB1dCwgLm5hbWUgPSB3bmFtZSwgLmtjb250cm9sX25ld3MgPSBOVUxMLCBcCiAJLm51bV9rY29udHJvbHMgPSAwLCAucmVnID0gU05EX1NPQ19OT1BNIH0KICNkZWZpbmUgU05EX1NPQ19EQVBNX01JQyh3bmFtZSwgd2V2ZW50KSBcCi17CS5pZCA9IHNuZF9zb2NfZGFwbV9taWMsIC5uYW1lID0gd25hbWUsIC5rY29udHJvbHMgPSBOVUxMLCBcCit7CS5pZCA9IHNuZF9zb2NfZGFwbV9taWMsIC5uYW1lID0gd25hbWUsIC5rY29udHJvbF9uZXdzID0gTlVMTCwgXAogCS5udW1fa2NvbnRyb2xzID0gMCwgLnJlZyA9IFNORF9TT0NfTk9QTSwgLmV2ZW50ID0gd2V2ZW50LCBcCiAJLmV2ZW50X2ZsYWdzID0gU05EX1NPQ19EQVBNX1BSRV9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTUR9CiAjZGVmaW5lIFNORF9TT0NfREFQTV9IUCh3bmFtZSwgd2V2ZW50KSBcCi17CS5pZCA9IHNuZF9zb2NfZGFwbV9ocCwgLm5hbWUgPSB3bmFtZSwgLmtjb250cm9scyA9IE5VTEwsIFwKK3sJLmlkID0gc25kX3NvY19kYXBtX2hwLCAubmFtZSA9IHduYW1lLCAua2NvbnRyb2xfbmV3cyA9IE5VTEwsIFwKIAkubnVtX2tjb250cm9scyA9IDAsIC5yZWcgPSBTTkRfU09DX05PUE0sIC5ldmVudCA9IHdldmVudCwgXAogCS5ldmVudF9mbGFncyA9IFNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QUkVfUE1EfQogI2RlZmluZSBTTkRfU09DX0RBUE1fU1BLKHduYW1lLCB3ZXZlbnQpIFwKLXsJLmlkID0gc25kX3NvY19kYXBtX3NwaywgLm5hbWUgPSB3bmFtZSwgLmtjb250cm9scyA9IE5VTEwsIFwKK3sJLmlkID0gc25kX3NvY19kYXBtX3NwaywgLm5hbWUgPSB3bmFtZSwgLmtjb250cm9sX25ld3MgPSBOVUxMLCBcCiAJLm51bV9rY29udHJvbHMgPSAwLCAucmVnID0gU05EX1NPQ19OT1BNLCAuZXZlbnQgPSB3ZXZlbnQsIFwKIAkuZXZlbnRfZmxhZ3MgPSBTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUFJFX1BNRH0KICNkZWZpbmUgU05EX1NPQ19EQVBNX0xJTkUod25hbWUsIHdldmVudCkgXAotewkuaWQgPSBzbmRfc29jX2RhcG1fbGluZSwgLm5hbWUgPSB3bmFtZSwgLmtjb250cm9scyA9IE5VTEwsIFwKK3sJLmlkID0gc25kX3NvY19kYXBtX2xpbmUsIC5uYW1lID0gd25hbWUsIC5rY29udHJvbF9uZXdzID0gTlVMTCwgXAogCS5udW1fa2NvbnRyb2xzID0gMCwgLnJlZyA9IFNORF9TT0NfTk9QTSwgLmV2ZW50ID0gd2V2ZW50LCBcCiAJLmV2ZW50X2ZsYWdzID0gU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BSRV9QTUR9CiAKQEAgLTcwLDkxICs3MCw5MSBAQAogI2RlZmluZSBTTkRfU09DX0RBUE1fUEdBKHduYW1lLCB3cmVnLCB3c2hpZnQsIHdpbnZlcnQsXAogCSB3Y29udHJvbHMsIHduY29udHJvbHMpIFwKIHsJLmlkID0gc25kX3NvY19kYXBtX3BnYSwgLm5hbWUgPSB3bmFtZSwgLnJlZyA9IHdyZWcsIC5zaGlmdCA9IHdzaGlmdCwgXAotCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xzID0gd2NvbnRyb2xzLCAubnVtX2tjb250cm9scyA9IHduY29udHJvbHN9CisJLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbF9uZXdzID0gd2NvbnRyb2xzLCAubnVtX2tjb250cm9scyA9IHduY29udHJvbHN9CiAjZGVmaW5lIFNORF9TT0NfREFQTV9PVVRfRFJWKHduYW1lLCB3cmVnLCB3c2hpZnQsIHdpbnZlcnQsXAogCSB3Y29udHJvbHMsIHduY29udHJvbHMpIFwKIHsJLmlkID0gc25kX3NvY19kYXBtX291dF9kcnYsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKLQkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgLm51bV9rY29udHJvbHMgPSB3bmNvbnRyb2xzfQorCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xfbmV3cyA9IHdjb250cm9scywgLm51bV9rY29udHJvbHMgPSB3bmNvbnRyb2xzfQogI2RlZmluZSBTTkRfU09DX0RBUE1fTUlYRVIod25hbWUsIHdyZWcsIHdzaGlmdCwgd2ludmVydCwgXAogCSB3Y29udHJvbHMsIHduY29udHJvbHMpXAogewkuaWQgPSBzbmRfc29jX2RhcG1fbWl4ZXIsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKLQkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgLm51bV9rY29udHJvbHMgPSB3bmNvbnRyb2xzfQorCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xfbmV3cyA9IHdjb250cm9scywgLm51bV9rY29udHJvbHMgPSB3bmNvbnRyb2xzfQogI2RlZmluZSBTTkRfU09DX0RBUE1fTUlYRVJfTkFNRURfQ1RMKHduYW1lLCB3cmVnLCB3c2hpZnQsIHdpbnZlcnQsIFwKIAkgd2NvbnRyb2xzLCB3bmNvbnRyb2xzKVwKIHsgICAgICAgLmlkID0gc25kX3NvY19kYXBtX21peGVyX25hbWVkX2N0bCwgLm5hbWUgPSB3bmFtZSwgLnJlZyA9IHdyZWcsIFwKLQkuc2hpZnQgPSB3c2hpZnQsIC5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xzID0gd2NvbnRyb2xzLCBcCisJLnNoaWZ0ID0gd3NoaWZ0LCAuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9sX25ld3MgPSB3Y29udHJvbHMsIFwKIAkubnVtX2tjb250cm9scyA9IHduY29udHJvbHN9CiAjZGVmaW5lIFNORF9TT0NfREFQTV9NSUNCSUFTKHduYW1lLCB3cmVnLCB3c2hpZnQsIHdpbnZlcnQpIFwKIHsJLmlkID0gc25kX3NvY19kYXBtX21pY2JpYXMsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKLQkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IE5VTEwsIC5udW1fa2NvbnRyb2xzID0gMH0KKwkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9sX25ld3MgPSBOVUxMLCAubnVtX2tjb250cm9scyA9IDB9CiAjZGVmaW5lIFNORF9TT0NfREFQTV9TV0lUQ0god25hbWUsIHdyZWcsIHdzaGlmdCwgd2ludmVydCwgd2NvbnRyb2xzKSBcCiB7CS5pZCA9IHNuZF9zb2NfZGFwbV9zd2l0Y2gsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKLQkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgLm51bV9rY29udHJvbHMgPSAxfQorCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xfbmV3cyA9IHdjb250cm9scywgLm51bV9rY29udHJvbHMgPSAxfQogI2RlZmluZSBTTkRfU09DX0RBUE1fTVVYKHduYW1lLCB3cmVnLCB3c2hpZnQsIHdpbnZlcnQsIHdjb250cm9scykgXAogewkuaWQgPSBzbmRfc29jX2RhcG1fbXV4LCAubmFtZSA9IHduYW1lLCAucmVnID0gd3JlZywgLnNoaWZ0ID0gd3NoaWZ0LCBcCi0JLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbHMgPSB3Y29udHJvbHMsIC5udW1fa2NvbnRyb2xzID0gMX0KKwkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9sX25ld3MgPSB3Y29udHJvbHMsIC5udW1fa2NvbnRyb2xzID0gMX0KICNkZWZpbmUgU05EX1NPQ19EQVBNX1ZJUlRfTVVYKHduYW1lLCB3cmVnLCB3c2hpZnQsIHdpbnZlcnQsIHdjb250cm9scykgXAogewkuaWQgPSBzbmRfc29jX2RhcG1fdmlydF9tdXgsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKLQkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgLm51bV9rY29udHJvbHMgPSAxfQorCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xfbmV3cyA9IHdjb250cm9scywgLm51bV9rY29udHJvbHMgPSAxfQogI2RlZmluZSBTTkRfU09DX0RBUE1fVkFMVUVfTVVYKHduYW1lLCB3cmVnLCB3c2hpZnQsIHdpbnZlcnQsIHdjb250cm9scykgXAogewkuaWQgPSBzbmRfc29jX2RhcG1fdmFsdWVfbXV4LCAubmFtZSA9IHduYW1lLCAucmVnID0gd3JlZywgXAotCS5zaGlmdCA9IHdzaGlmdCwgLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbHMgPSB3Y29udHJvbHMsIFwKKwkuc2hpZnQgPSB3c2hpZnQsIC5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xfbmV3cyA9IHdjb250cm9scywgXAogCS5udW1fa2NvbnRyb2xzID0gMX0KIAogLyogU2ltcGxpZmllZCB2ZXJzaW9ucyBvZiBhYm92ZSBtYWNyb3MsIGFzc3VtaW5nIHduY29udHJvbHMgPSBBUlJBWV9TSVpFKHdjb250cm9scykgKi8KICNkZWZpbmUgU09DX1BHQV9BUlJBWSh3bmFtZSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0LFwKIAkgd2NvbnRyb2xzKSBcCiB7CS5pZCA9IHNuZF9zb2NfZGFwbV9wZ2EsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKLQkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgLm51bV9rY29udHJvbHMgPSBBUlJBWV9TSVpFKHdjb250cm9scyl9CisJLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbF9uZXdzID0gd2NvbnRyb2xzLCAubnVtX2tjb250cm9scyA9IEFSUkFZX1NJWkUod2NvbnRyb2xzKX0KICNkZWZpbmUgU09DX01JWEVSX0FSUkFZKHduYW1lLCB3cmVnLCB3c2hpZnQsIHdpbnZlcnQsIFwKIAkgd2NvbnRyb2xzKVwKIHsJLmlkID0gc25kX3NvY19kYXBtX21peGVyLCAubmFtZSA9IHduYW1lLCAucmVnID0gd3JlZywgLnNoaWZ0ID0gd3NoaWZ0LCBcCi0JLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbHMgPSB3Y29udHJvbHMsIC5udW1fa2NvbnRyb2xzID0gQVJSQVlfU0laRSh3Y29udHJvbHMpfQorCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xfbmV3cyA9IHdjb250cm9scywgLm51bV9rY29udHJvbHMgPSBBUlJBWV9TSVpFKHdjb250cm9scyl9CiAjZGVmaW5lIFNPQ19NSVhFUl9OQU1FRF9DVExfQVJSQVkod25hbWUsIHdyZWcsIHdzaGlmdCwgd2ludmVydCwgXAogCSB3Y29udHJvbHMpXAogeyAgICAgICAuaWQgPSBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsLCAubmFtZSA9IHduYW1lLCAucmVnID0gd3JlZywgXAotCS5zaGlmdCA9IHdzaGlmdCwgLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbHMgPSB3Y29udHJvbHMsIFwKKwkuc2hpZnQgPSB3c2hpZnQsIC5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xfbmV3cyA9IHdjb250cm9scywgXAogCS5udW1fa2NvbnRyb2xzID0gQVJSQVlfU0laRSh3Y29udHJvbHMpfQogCiAvKiBwYXRoIGRvbWFpbiB3aXRoIGV2ZW50IC0gZXZlbnQgaGFuZGxlciBtdXN0IHJldHVybiAwIGZvciBzdWNjZXNzICovCiAjZGVmaW5lIFNORF9TT0NfREFQTV9QR0FfRSh3bmFtZSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0LCB3Y29udHJvbHMsIFwKIAl3bmNvbnRyb2xzLCB3ZXZlbnQsIHdmbGFncykgXAogewkuaWQgPSBzbmRfc29jX2RhcG1fcGdhLCAubmFtZSA9IHduYW1lLCAucmVnID0gd3JlZywgLnNoaWZ0ID0gd3NoaWZ0LCBcCi0JLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbHMgPSB3Y29udHJvbHMsIC5udW1fa2NvbnRyb2xzID0gd25jb250cm9scywgXAorCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xfbmV3cyA9IHdjb250cm9scywgLm51bV9rY29udHJvbHMgPSB3bmNvbnRyb2xzLCBcCiAJLmV2ZW50ID0gd2V2ZW50LCAuZXZlbnRfZmxhZ3MgPSB3ZmxhZ3N9CiAjZGVmaW5lIFNORF9TT0NfREFQTV9PVVRfRFJWX0Uod25hbWUsIHdyZWcsIHdzaGlmdCwgd2ludmVydCwgd2NvbnRyb2xzLCBcCiAJd25jb250cm9scywgd2V2ZW50LCB3ZmxhZ3MpIFwKIHsJLmlkID0gc25kX3NvY19kYXBtX291dF9kcnYsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKLQkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgLm51bV9rY29udHJvbHMgPSB3bmNvbnRyb2xzLCBcCisJLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbF9uZXdzID0gd2NvbnRyb2xzLCAubnVtX2tjb250cm9scyA9IHduY29udHJvbHMsIFwKIAkuZXZlbnQgPSB3ZXZlbnQsIC5ldmVudF9mbGFncyA9IHdmbGFnc30KICNkZWZpbmUgU05EX1NPQ19EQVBNX01JWEVSX0Uod25hbWUsIHdyZWcsIHdzaGlmdCwgd2ludmVydCwgd2NvbnRyb2xzLCBcCiAJd25jb250cm9scywgd2V2ZW50LCB3ZmxhZ3MpIFwKIHsJLmlkID0gc25kX3NvY19kYXBtX21peGVyLCAubmFtZSA9IHduYW1lLCAucmVnID0gd3JlZywgLnNoaWZ0ID0gd3NoaWZ0LCBcCi0JLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbHMgPSB3Y29udHJvbHMsIC5udW1fa2NvbnRyb2xzID0gd25jb250cm9scywgXAorCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xfbmV3cyA9IHdjb250cm9scywgLm51bV9rY29udHJvbHMgPSB3bmNvbnRyb2xzLCBcCiAJLmV2ZW50ID0gd2V2ZW50LCAuZXZlbnRfZmxhZ3MgPSB3ZmxhZ3N9CiAjZGVmaW5lIFNORF9TT0NfREFQTV9NSVhFUl9OQU1FRF9DVExfRSh3bmFtZSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0LCBcCiAJd2NvbnRyb2xzLCB3bmNvbnRyb2xzLCB3ZXZlbnQsIHdmbGFncykgXAogeyAgICAgICAuaWQgPSBzbmRfc29jX2RhcG1fbWl4ZXIsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKLQkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgXAorCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xfbmV3cyA9IHdjb250cm9scywgXAogCS5udW1fa2NvbnRyb2xzID0gd25jb250cm9scywgLmV2ZW50ID0gd2V2ZW50LCAuZXZlbnRfZmxhZ3MgPSB3ZmxhZ3N9CiAjZGVmaW5lIFNORF9TT0NfREFQTV9NSUNCSUFTX0Uod25hbWUsIHdyZWcsIHdzaGlmdCwgd2ludmVydCwgd2V2ZW50LCB3ZmxhZ3MpIFwKIHsJLmlkID0gc25kX3NvY19kYXBtX21pY2JpYXMsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKLQkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IE5VTEwsIC5udW1fa2NvbnRyb2xzID0gMCwgXAorCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xfbmV3cyA9IE5VTEwsIC5udW1fa2NvbnRyb2xzID0gMCwgXAogCS5ldmVudCA9IHdldmVudCwgLmV2ZW50X2ZsYWdzID0gd2ZsYWdzfQogI2RlZmluZSBTTkRfU09DX0RBUE1fU1dJVENIX0Uod25hbWUsIHdyZWcsIHdzaGlmdCwgd2ludmVydCwgd2NvbnRyb2xzLCBcCiAJd2V2ZW50LCB3ZmxhZ3MpIFwKIHsJLmlkID0gc25kX3NvY19kYXBtX3N3aXRjaCwgLm5hbWUgPSB3bmFtZSwgLnJlZyA9IHdyZWcsIC5zaGlmdCA9IHdzaGlmdCwgXAotCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xzID0gd2NvbnRyb2xzLCAubnVtX2tjb250cm9scyA9IDEsIFwKKwkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9sX25ld3MgPSB3Y29udHJvbHMsIC5udW1fa2NvbnRyb2xzID0gMSwgXAogCS5ldmVudCA9IHdldmVudCwgLmV2ZW50X2ZsYWdzID0gd2ZsYWdzfQogI2RlZmluZSBTTkRfU09DX0RBUE1fTVVYX0Uod25hbWUsIHdyZWcsIHdzaGlmdCwgd2ludmVydCwgd2NvbnRyb2xzLCBcCiAJd2V2ZW50LCB3ZmxhZ3MpIFwKIHsJLmlkID0gc25kX3NvY19kYXBtX211eCwgLm5hbWUgPSB3bmFtZSwgLnJlZyA9IHdyZWcsIC5zaGlmdCA9IHdzaGlmdCwgXAotCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xzID0gd2NvbnRyb2xzLCAubnVtX2tjb250cm9scyA9IDEsIFwKKwkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9sX25ld3MgPSB3Y29udHJvbHMsIC5udW1fa2NvbnRyb2xzID0gMSwgXAogCS5ldmVudCA9IHdldmVudCwgLmV2ZW50X2ZsYWdzID0gd2ZsYWdzfQogI2RlZmluZSBTTkRfU09DX0RBUE1fVklSVF9NVVhfRSh3bmFtZSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0LCB3Y29udHJvbHMsIFwKIAl3ZXZlbnQsIHdmbGFncykgXAogewkuaWQgPSBzbmRfc29jX2RhcG1fdmlydF9tdXgsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKLQkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgLm51bV9rY29udHJvbHMgPSAxLCBcCisJLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbF9uZXdzID0gd2NvbnRyb2xzLCAubnVtX2tjb250cm9scyA9IDEsIFwKIAkuZXZlbnQgPSB3ZXZlbnQsIC5ldmVudF9mbGFncyA9IHdmbGFnc30KIAogLyogYWRkaXRpb25hbCBzZXF1ZW5jaW5nIGNvbnRyb2wgd2l0aGluIGFuIGV2ZW50IHR5cGUgKi8KQEAgLTE3MywyNiArMTczLDI2IEBACiAjZGVmaW5lIFNPQ19QR0FfRV9BUlJBWSh3bmFtZSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0LCB3Y29udHJvbHMsIFwKIAl3ZXZlbnQsIHdmbGFncykgXAogewkuaWQgPSBzbmRfc29jX2RhcG1fcGdhLCAubmFtZSA9IHduYW1lLCAucmVnID0gd3JlZywgLnNoaWZ0ID0gd3NoaWZ0LCBcCi0JLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbHMgPSB3Y29udHJvbHMsIC5udW1fa2NvbnRyb2xzID0gQVJSQVlfU0laRSh3Y29udHJvbHMpLCBcCisJLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbF9uZXdzID0gd2NvbnRyb2xzLCAubnVtX2tjb250cm9scyA9IEFSUkFZX1NJWkUod2NvbnRyb2xzKSwgXAogCS5ldmVudCA9IHdldmVudCwgLmV2ZW50X2ZsYWdzID0gd2ZsYWdzfQogI2RlZmluZSBTT0NfTUlYRVJfRV9BUlJBWSh3bmFtZSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0LCB3Y29udHJvbHMsIFwKIAl3ZXZlbnQsIHdmbGFncykgXAogewkuaWQgPSBzbmRfc29jX2RhcG1fbWl4ZXIsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKLQkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgLm51bV9rY29udHJvbHMgPSBBUlJBWV9TSVpFKHdjb250cm9scyksIFwKKwkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9sX25ld3MgPSB3Y29udHJvbHMsIC5udW1fa2NvbnRyb2xzID0gQVJSQVlfU0laRSh3Y29udHJvbHMpLCBcCiAJLmV2ZW50ID0gd2V2ZW50LCAuZXZlbnRfZmxhZ3MgPSB3ZmxhZ3N9CiAjZGVmaW5lIFNPQ19NSVhFUl9OQU1FRF9DVExfRV9BUlJBWSh3bmFtZSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0LCBcCiAJd2NvbnRyb2xzLCB3ZXZlbnQsIHdmbGFncykgXAogeyAgICAgICAuaWQgPSBzbmRfc29jX2RhcG1fbWl4ZXIsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKLQkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgXAorCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xfbmV3cyA9IHdjb250cm9scywgXAogCS5udW1fa2NvbnRyb2xzID0gQVJSQVlfU0laRSh3Y29udHJvbHMpLCAuZXZlbnQgPSB3ZXZlbnQsIC5ldmVudF9mbGFncyA9IHdmbGFnc30KIAogLyogZXZlbnRzIHRoYXQgYXJlIHByZSBhbmQgcG9zdCBEQVBNICovCiAjZGVmaW5lIFNORF9TT0NfREFQTV9QUkUod25hbWUsIHdldmVudCkgXAotewkuaWQgPSBzbmRfc29jX2RhcG1fcHJlLCAubmFtZSA9IHduYW1lLCAua2NvbnRyb2xzID0gTlVMTCwgXAorewkuaWQgPSBzbmRfc29jX2RhcG1fcHJlLCAubmFtZSA9IHduYW1lLCAua2NvbnRyb2xfbmV3cyA9IE5VTEwsIFwKIAkubnVtX2tjb250cm9scyA9IDAsIC5yZWcgPSBTTkRfU09DX05PUE0sIC5ldmVudCA9IHdldmVudCwgXAogCS5ldmVudF9mbGFncyA9IFNORF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BSRV9QTUR9CiAjZGVmaW5lIFNORF9TT0NfREFQTV9QT1NUKHduYW1lLCB3ZXZlbnQpIFwKLXsJLmlkID0gc25kX3NvY19kYXBtX3Bvc3QsIC5uYW1lID0gd25hbWUsIC5rY29udHJvbHMgPSBOVUxMLCBcCit7CS5pZCA9IHNuZF9zb2NfZGFwbV9wb3N0LCAubmFtZSA9IHduYW1lLCAua2NvbnRyb2xfbmV3cyA9IE5VTEwsIFwKIAkubnVtX2tjb250cm9scyA9IDAsIC5yZWcgPSBTTkRfU09DX05PUE0sIC5ldmVudCA9IHdldmVudCwgXAogCS5ldmVudF9mbGFncyA9IFNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QT1NUX1BNRH0KIApAQCAtMjMyLDcgKzIzMiw3IEBACiAKIC8qIGdlbmVyaWMgd2lkZ2V0cyAqLwogI2RlZmluZSBTTkRfU09DX0RBUE1fUkVHKHdpZCwgd25hbWUsIHdyZWcsIHdzaGlmdCwgd21hc2ssIHdvbl92YWwsIHdvZmZfdmFsKSBcCi17CS5pZCA9IHdpZCwgLm5hbWUgPSB3bmFtZSwgLmtjb250cm9scyA9IE5VTEwsIC5udW1fa2NvbnRyb2xzID0gMCwgXAorewkuaWQgPSB3aWQsIC5uYW1lID0gd25hbWUsIC5rY29udHJvbF9uZXdzID0gTlVMTCwgLm51bV9rY29udHJvbHMgPSAwLCBcCiAJLnJlZyA9IC0oKHdyZWcpICsgMSksIC5zaGlmdCA9IHdzaGlmdCwgLm1hc2sgPSB3bWFzaywgXAogCS5vbl92YWwgPSB3b25fdmFsLCAub2ZmX3ZhbCA9IHdvZmZfdmFsLCAuZXZlbnQgPSBkYXBtX3JlZ19ldmVudCwgXAogCS5ldmVudF9mbGFncyA9IFNORF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EfQpAQCAtMzU2LDcgKzM1Niw4IEBACiAKIC8qIGRhcG0gc3lzIGZzIC0gdXNlZCBieSB0aGUgY29yZSAqLwogaW50IHNuZF9zb2NfZGFwbV9zeXNfYWRkKHN0cnVjdCBkZXZpY2UgKmRldik7Ci12b2lkIHNuZF9zb2NfZGFwbV9kZWJ1Z2ZzX2luaXQoc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtKTsKK3ZvaWQgc25kX3NvY19kYXBtX2RlYnVnZnNfaW5pdChzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0sCisJCQkJc3RydWN0IGRlbnRyeSAqcGFyZW50KTsKIAogLyogZGFwbSBhdWRpbyBwaW4gY29udHJvbCBhbmQgc3RhdHVzICovCiBpbnQgc25kX3NvY19kYXBtX2VuYWJsZV9waW4oc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtLApAQCAtNDcyLDcgKzQ3Myw4IEBACiAKIAkvKiBrY29udHJvbHMgdGhhdCByZWxhdGUgdG8gdGhpcyB3aWRnZXQgKi8KIAlpbnQgbnVtX2tjb250cm9sczsKLQljb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa2NvbnRyb2xzOworCWNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprY29udHJvbF9uZXdzOworCXN0cnVjdCBzbmRfa2NvbnRyb2wgKiprY29udHJvbHM7CiAKIAkvKiB3aWRnZXQgaW5wdXQgYW5kIG91dHB1dHMgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIHNvdXJjZXM7CkBAIC01MTYsNCArNTE4LDEwIEBACiAjZW5kaWYKIH07CiAKKy8qIEEgbGlzdCBvZiB3aWRnZXRzIGFzc29jaWF0ZWQgd2l0aCBhbiBvYmplY3QsIHR5cGljYWxseSBhIHNuZF9rY29udHJvbCAqLworc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXRfbGlzdCB7CisJaW50IG51bV93aWRnZXRzOworCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3aWRnZXRzWzBdOworfTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3NvYy5oIGIvaW5jbHVkZS9zb3VuZC9zb2MuaAppbmRleCBiZmE0ODM2Li5mMWRlM2UwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3NvYy5oCisrKyBiL2luY2x1ZGUvc291bmQvc29jLmgKQEAgLTI0OCw3ICsyNDgsNyBAQAogZXh0ZXJuIHN0cnVjdCBzbmRfYWM5N19idXNfb3BzIHNvY19hYzk3X29wczsKIAogZW51bSBzbmRfc29jX2NvbnRyb2xfdHlwZSB7Ci0JU05EX1NPQ19DVVNUT00sCisJU05EX1NPQ19DVVNUT00gPSAxLAogCVNORF9TT0NfSTJDLAogCVNORF9TT0NfU1BJLAogfTsKQEAgLTI3OCw2ICsyNzgsMTAgQEAKIHZvaWQgc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKHN0cnVjdCBkZXZpY2UgKmRldik7CiBpbnQgc25kX3NvY19jb2RlY192b2xhdGlsZV9yZWdpc3RlcihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCiAJCQkJICAgIHVuc2lnbmVkIGludCByZWcpOworaW50IHNuZF9zb2NfY29kZWNfcmVhZGFibGVfcmVnaXN0ZXIoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgcmVnKTsKK2ludCBzbmRfc29jX2NvZGVjX3dyaXRhYmxlX3JlZ2lzdGVyKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgICAgdW5zaWduZWQgaW50IHJlZyk7CiBpbnQgc25kX3NvY19jb2RlY19zZXRfY2FjaGVfaW8oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCQkJICAgICAgIGludCBhZGRyX2JpdHMsIGludCBkYXRhX2JpdHMsCiAJCQkgICAgICAgZW51bSBzbmRfc29jX2NvbnRyb2xfdHlwZSBjb250cm9sKTsKQEAgLTI5Miw2ICsyOTYsOCBAQAogCQkJCSAgICAgIHVuc2lnbmVkIGludCByZWcpOwogaW50IHNuZF9zb2NfZGVmYXVsdF9yZWFkYWJsZV9yZWdpc3RlcihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCiAJCQkJICAgICAgdW5zaWduZWQgaW50IHJlZyk7CitpbnQgc25kX3NvY19kZWZhdWx0X3dyaXRhYmxlX3JlZ2lzdGVyKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgcmVnKTsKIAogLyogVXRpbGl0eSBmdW5jdGlvbnMgdG8gZ2V0IGNsb2NrIHJhdGVzIGZyb20gdmFyaW91cyB0aGluZ3MgKi8KIGludCBzbmRfc29jX2NhbGNfZnJhbWVfc2l6ZShpbnQgc2FtcGxlX3NpemUsIGludCBjaGFubmVscywgaW50IHRkbV9zbG90cyk7CkBAIC01MjMsNiArNTI5LDcgQEAKIAlzaXplX3QgcmVnX3NpemU7CS8qIHJlZ19jYWNoZV9zaXplICogcmVnX3dvcmRfc2l6ZSAqLwogCWludCAoKnZvbGF0aWxlX3JlZ2lzdGVyKShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqLCB1bnNpZ25lZCBpbnQpOwogCWludCAoKnJlYWRhYmxlX3JlZ2lzdGVyKShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqLCB1bnNpZ25lZCBpbnQpOworCWludCAoKndyaXRhYmxlX3JlZ2lzdGVyKShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqLCB1bnNpZ25lZCBpbnQpOwogCiAJLyogcnVudGltZSAqLwogCXN0cnVjdCBzbmRfYWM5NyAqYWM5NzsgIC8qIGZvciBhZC1ob2MgYWM5NyBkZXZpY2VzICovCkBAIC01MzksMTAgKzU0NiwxMiBAQAogCiAJLyogY29kZWMgSU8gKi8KIAl2b2lkICpjb250cm9sX2RhdGE7IC8qIGNvZGVjIGNvbnRyb2wgKGkyYy8zd2lyZSkgZGF0YSAqLworCWVudW0gc25kX3NvY19jb250cm9sX3R5cGUgY29udHJvbF90eXBlOwogCWh3X3dyaXRlX3QgaHdfd3JpdGU7CiAJdW5zaWduZWQgaW50ICgqaHdfcmVhZCkoc3RydWN0IHNuZF9zb2NfY29kZWMgKiwgdW5zaWduZWQgaW50KTsKIAl1bnNpZ25lZCBpbnQgKCpyZWFkKShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqLCB1bnNpZ25lZCBpbnQpOwogCWludCAoKndyaXRlKShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CisJaW50ICgqYnVsa193cml0ZV9yYXcpKHN0cnVjdCBzbmRfc29jX2NvZGVjICosIHVuc2lnbmVkIGludCwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwogCXZvaWQgKnJlZ19jYWNoZTsKIAljb25zdCB2b2lkICpyZWdfZGVmX2NvcHk7CiAJY29uc3Qgc3RydWN0IHNuZF9zb2NfY2FjaGVfb3BzICpjYWNoZV9vcHM7CkBAIC01NjgsNyArNTc3LDkgQEAKIAkJCXBtX21lc3NhZ2VfdCBzdGF0ZSk7CiAJaW50ICgqcmVzdW1lKShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqKTsKIAotCS8qIERlZmF1bHQgREFQTSBzZXR1cCwgYWRkZWQgYWZ0ZXIgcHJvYmUoKSBpcyBydW4gKi8KKwkvKiBEZWZhdWx0IGNvbnRyb2wgYW5kIHNldHVwLCBhZGRlZCBhZnRlciBwcm9iZSgpIGlzIHJ1biAqLworCWNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICpjb250cm9sczsKKwlpbnQgbnVtX2NvbnRyb2xzOwogCWNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpkYXBtX3dpZGdldHM7CiAJaW50IG51bV9kYXBtX3dpZGdldHM7CiAJY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSAqZGFwbV9yb3V0ZXM7CkBAIC01ODcsNiArNTk4LDcgQEAKIAkJCQlzaXplX3QsIHVuc2lnbmVkIGludCk7CiAJaW50ICgqdm9sYXRpbGVfcmVnaXN0ZXIpKHN0cnVjdCBzbmRfc29jX2NvZGVjICosIHVuc2lnbmVkIGludCk7CiAJaW50ICgqcmVhZGFibGVfcmVnaXN0ZXIpKHN0cnVjdCBzbmRfc29jX2NvZGVjICosIHVuc2lnbmVkIGludCk7CisJaW50ICgqd3JpdGFibGVfcmVnaXN0ZXIpKHN0cnVjdCBzbmRfc29jX2NvZGVjICosIHVuc2lnbmVkIGludCk7CiAJc2hvcnQgcmVnX2NhY2hlX3NpemU7CiAJc2hvcnQgcmVnX2NhY2hlX3N0ZXA7CiAJc2hvcnQgcmVnX3dvcmRfc2l6ZTsKQEAgLTY5MCw2ICs3MDIsOCBAQAogLyogU29DIGNhcmQgKi8KIHN0cnVjdCBzbmRfc29jX2NhcmQgewogCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqbG9uZ19uYW1lOworCWNvbnN0IGNoYXIgKmRyaXZlcl9uYW1lOwogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlzdHJ1Y3Qgc25kX2NhcmQgKnNuZF9jYXJkOwogCXN0cnVjdCBtb2R1bGUgKm93bmVyOwpAQCAtNzM3LDEyICs3NTEsMTUgQEAKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkX2F1eDsKIAlpbnQgbnVtX2F1eF9ydGQ7CiAKKwljb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqY29udHJvbHM7CisJaW50IG51bV9jb250cm9sczsKKwogCS8qCiAJICogQ2FyZC1zcGVjaWZpYyByb3V0ZXMgYW5kIHdpZGdldHMuCiAJICovCi0Jc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKmRhcG1fd2lkZ2V0czsKKwljb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqZGFwbV93aWRnZXRzOwogCWludCBudW1fZGFwbV93aWRnZXRzOwotCXN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgKmRhcG1fcm91dGVzOworCWNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgKmRhcG1fcm91dGVzOwogCWludCBudW1fZGFwbV9yb3V0ZXM7CiAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZGVmZXJyZWRfcmVzdW1lX3dvcms7CkBAIC04MDUsNyArODIyLDcgQEAKIAl1bnNpZ25lZCBjaGFyIHNoaWZ0X3I7CiAJdW5zaWduZWQgaW50IG1heDsKIAl1bnNpZ25lZCBpbnQgbWFzazsKLQljb25zdCBjaGFyICoqdGV4dHM7CisJY29uc3QgY2hhciAqIGNvbnN0ICp0ZXh0czsKIAljb25zdCB1bnNpZ25lZCBpbnQgKnZhbHVlczsKIAl2b2lkICpkYXBtOwogfTsKQEAgLTgxNCw2ICs4MzEsOCBAQAogdW5zaWduZWQgaW50IHNuZF9zb2NfcmVhZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcpOwogdW5zaWduZWQgaW50IHNuZF9zb2Nfd3JpdGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCQkJICAgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbCk7Cit1bnNpZ25lZCBpbnQgc25kX3NvY19idWxrX3dyaXRlX3JhdyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJICAgIHVuc2lnbmVkIGludCByZWcsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwogCiAvKiBkZXZpY2UgZHJpdmVyIGRhdGEgKi8KIApAQCAtODcxLDYgKzg5MCw5IEBACiAJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPmRhcG1fbGlzdCk7CiB9CiAKK2ludCBzbmRfc29jX3V0aWxfaW5pdCh2b2lkKTsKK3ZvaWQgc25kX3NvY191dGlsX2V4aXQodm9pZCk7CisKICNpbmNsdWRlIDxzb3VuZC9zb2MtZGFpLmg+CiAKICNpZmRlZiBDT05GSUdfREVCVUdfRlMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvdGVhNTc1eC10dW5lci5oIGIvaW5jbHVkZS9zb3VuZC90ZWE1NzV4LXR1bmVyLmgKaW5kZXggNTcxOGEwMi4uZDJlYTExMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC90ZWE1NzV4LXR1bmVyLmgKKysrIGIvaW5jbHVkZS9zb3VuZC90ZWE1NzV4LXR1bmVyLmgKQEAgLTI2LDI5ICsyNiwzNyBAQAogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogCisjZGVmaW5lIFRFQTU3NVhfRk1JRgkxMDcwMAorCisjZGVmaW5lIFRFQTU3NVhfREFUQQkoMSA8PCAwKQorI2RlZmluZSBURUE1NzVYX0NMSwkoMSA8PCAxKQorI2RlZmluZSBURUE1NzVYX1dSRU4JKDEgPDwgMikKKyNkZWZpbmUgVEVBNTc1WF9NT1NUCSgxIDw8IDMpCisKIHN0cnVjdCBzbmRfdGVhNTc1eDsKIAogc3RydWN0IHNuZF90ZWE1NzV4X29wcyB7Ci0Jdm9pZCAoKndyaXRlKShzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSwgdW5zaWduZWQgaW50IHZhbCk7Ci0JdW5zaWduZWQgaW50ICgqcmVhZCkoc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEpOwotCXZvaWQgKCptdXRlKShzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSwgdW5zaWduZWQgaW50IG11dGUpOworCXZvaWQgKCpzZXRfcGlucykoc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEsIHU4IHBpbnMpOworCXU4ICgqZ2V0X3BpbnMpKHN0cnVjdCBzbmRfdGVhNTc1eCAqdGVhKTsKKwl2b2lkICgqc2V0X2RpcmVjdGlvbikoc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEsIGJvb2wgb3V0cHV0KTsKIH07CiAKIHN0cnVjdCBzbmRfdGVhNTc1eCB7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkOwkvKiB2aWRlbyBkZXZpY2UgKi8KLQlpbnQgZGV2X25yOwkJCS8qIHJlcXVlc3RlZCBkZXZpY2UgbnVtYmVyICsgMSAqLwotCWludCB0ZWE1NzU5OwkJCS8qIDU3NTkgY2hpcCBpcyBwcmVzZW50ICovCi0JaW50IG11dGU7CQkJLyogRGV2aWNlIGlzIG11dGVkPyAqLwotCXVuc2lnbmVkIGludCBmcmVxX2ZpeHVwOwkvKiBjcnlzdGFsIG9uYm9hcmQgKi8KKwlib29sIHRlYTU3NTk7CQkJLyogNTc1OSBjaGlwIGlzIHByZXNlbnQgKi8KKwlib29sIG11dGU7CQkJLyogRGV2aWNlIGlzIG11dGVkPyAqLworCWJvb2wgc3RlcmVvOwkJCS8qIHJlY2VpdmluZyBzdGVyZW8gKi8KKwlib29sIHR1bmVkOwkJCS8qIHR1bmVkIHRvIGEgc3RhdGlvbiAqLwogCXVuc2lnbmVkIGludCB2YWw7CQkvKiBodyB2YWx1ZSAqLwogCXVuc2lnbmVkIGxvbmcgZnJlcTsJCS8qIGZyZXF1ZW5jeSAqLwogCXVuc2lnbmVkIGxvbmcgaW5fdXNlOwkJLyogc2V0IGlmIHRoZSBkZXZpY2UgaXMgaW4gdXNlICovCiAJc3RydWN0IHNuZF90ZWE1NzV4X29wcyAqb3BzOwogCXZvaWQgKnByaXZhdGVfZGF0YTsKKwl1OCBjYXJkWzMyXTsKKwl1OCBidXNfaW5mb1szMl07CiB9OwogCi12b2lkIHNuZF90ZWE1NzV4X2luaXQoc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEpOworaW50IHNuZF90ZWE1NzV4X2luaXQoc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEpOwogdm9pZCBzbmRfdGVhNTc1eF9leGl0KHN0cnVjdCBzbmRfdGVhNTc1eCAqdGVhKTsKIAogI2VuZGlmIC8qIF9fU09VTkRfVEVBNTc1WF9UVU5FUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3RsdjMyMGRhYzMzLXBsYXQuaCBiL2luY2x1ZGUvc291bmQvdGx2MzIwZGFjMzMtcGxhdC5oCmluZGV4IDZjNjY0OTYuLjBiOTQxOTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvdGx2MzIwZGFjMzMtcGxhdC5oCisrKyBiL2luY2x1ZGUvc291bmQvdGx2MzIwZGFjMzMtcGxhdC5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFBsYXRmb3JtIGhlYWRlciBmb3IgVGV4YXMgSW5zdHJ1bWVudHMgVExWMzIwREFDMzMgY29kZWMgZHJpdmVyCiAgKgotICogQXV0aG9yOglQZXRlciBVamZhbHVzaSA8cGV0ZXIudWpmYWx1c2lAbm9raWEuY29tPgorICogQXV0aG9yOiBQZXRlciBVamZhbHVzaSA8cGV0ZXIudWpmYWx1c2lAdGkuY29tPgogICoKICAqIENvcHlyaWdodDogICAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvdHBhNjEzMGEyLXBsYXQuaCBiL2luY2x1ZGUvc291bmQvdHBhNjEzMGEyLXBsYXQuaAppbmRleCBlMjlmZGU2Li44OWJlY2NiNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC90cGE2MTMwYTItcGxhdC5oCisrKyBiL2luY2x1ZGUvc291bmQvdHBhNjEzMGEyLXBsYXQuaApAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIE5va2lhIENvcnBvcmF0aW9uCiAgKgotICogV3JpdHRlbiBieSBQZXRlciBVamZhbHVzaSA8cGV0ZXIudWpmYWx1c2lAbm9raWEuY29tPgorICogQXV0aG9yOiBQZXRlciBVamZhbHVzaSA8cGV0ZXIudWpmYWx1c2lAdGkuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3dtODkxNS5oIGIvaW5jbHVkZS9zb3VuZC93bTg5MTUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODE3ZDc2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC93bTg5MTUuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogbGludXgvc291bmQvd204OTE1LmggLS0gUGxhdGZvcm0gZGF0YSBmb3IgV004OTE1CisgKgorICogQ29weXJpZ2h0IDIwMTEgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzLiBQTEMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfU05EX1dNODkwM19ICisjZGVmaW5lIF9fTElOVVhfU05EX1dNODkwM19ICisKK2VudW0gd204OTE1X2lubW9kZSB7CisJV004OTE1X0RJRkZFUlJFTlRJQUxfMSA9IDAsICAgLyogSU4xeFAgLSBJTjF4TiAqLworCVdNODkxNV9JTlZFUlRJTkcgPSAxLCAgICAgICAgIC8qIElOMXhOICovCisJV004OTE1X05PTl9JTlZFUlRJTkcgPSAyLCAgICAgLyogSU4xeFAgKi8KKwlXTTg5MTVfRElGRkVSRU5USUFMXzIgPSAzLCAgICAvKiBJTjJ4UCAtIElOMnhQICovCit9OworCisvKioKKyAqIFJlVHVuZSBNb2JpbGUgY29uZmlndXJhdGlvbnMgYXJlIHNwZWNpZmllZCB3aXRoIGEgbGFiZWwsIHNhbXBsZQorICogcmF0ZSBhbmQgc2V0IG9mIHZhbHVlcyB0byB3cml0ZSAodGhlIGVuYWJsZSBiaXRzIHdpbGwgYmUgaWdub3JlZCkuCisgKgorICogQ29uZmlndXJhdGlvbnMgYXJlIGV4cGVjdGVkIHRvIGJlIGdlbmVyYXRlZCB1c2luZyB0aGUgUmVUdW5lIE1vYmlsZQorICogY29udHJvbCBwYW5lbCBpbiBXSVNDRSAtIHNlZSBodHRwOi8vd3d3LndvbGZzb25taWNyby5jb20vd2lzY2UvCisgKi8KK3N0cnVjdCB3bTg5MTVfcmV0dW5lX21vYmlsZV9jb25maWcgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IHJhdGU7CisJdTE2IHJlZ3NbMjBdOworfTsKKworI2RlZmluZSBXTTg5MTVfU0VUX0RFRkFVTFQgMHgxMDAwMAorCitzdHJ1Y3Qgd204OTE1X3BkYXRhIHsKKwlpbnQgaXJxX2ZsYWdzOyAgLyoqIFNldCBJUlEgdHJpZ2dlciBmbGFnczsgZGVmYXVsdCBhY3RpdmUgbG93ICovCisKKwlpbnQgbGRvX2VuYTsgIC8qKiBHUElPIGZvciBMRE8xOyAtMSBmb3Igbm9uZSAqLworCisJaW50IG1pY2RldF9kZWY7ICAvKiogRGVmYXVsdCBNSUNERVRfU1JDL0hQMUZCX1NSQy9NSUNEX0JJQVMgKi8KKworCWVudW0gd204OTE1X2lubW9kZSBpbmxfbW9kZTsKKwllbnVtIHdtODkxNV9pbm1vZGUgaW5yX21vZGU7CisKKwl1MzIgc3BrbXV0ZV9zZXE7ICAvKiogVmFsdWUgZm9yIHJlZ2lzdGVyIDB4ODAyICovCisKKwlpbnQgZ3Bpb19iYXNlOworCXUzMiBncGlvX2RlZmF1bHRbNV07CisKKwlpbnQgbnVtX3JldHVuZV9tb2JpbGVfY2ZnczsKKwlzdHJ1Y3Qgd204OTE1X3JldHVuZV9tb2JpbGVfY29uZmlnICpyZXR1bmVfbW9iaWxlX2NmZ3M7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvd204OTYyLmggYi9pbmNsdWRlL3NvdW5kL3dtODk2Mi5oCmluZGV4IDJiNTMwNmMuLjE3NTBiZWQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3dtODk2Mi5oCisrKyBiL2luY2x1ZGUvc291bmQvd204OTYyLmgKQEAgLTE0LDYgKzE0LDI4IEBACiAvKiBVc2UgdG8gc2V0IEdQSU8gZGVmYXVsdCB2YWx1ZXMgdG8gemVybyAqLwogI2RlZmluZSBXTTg5NjJfR1BJT19TRVQgMHgxMDAwMAogCisjZGVmaW5lIFdNODk2Ml9HUElPX0ZOX0NMS09VVCAgICAgICAgICAgMAorI2RlZmluZSBXTTg5NjJfR1BJT19GTl9MT0dJQyAgICAgICAgICAgIDEKKyNkZWZpbmUgV004OTYyX0dQSU9fRk5fU0RPVVQgICAgICAgICAgICAyCisjZGVmaW5lIFdNODk2Ml9HUElPX0ZOX0lSUSAgICAgICAgICAgICAgMworI2RlZmluZSBXTTg5NjJfR1BJT19GTl9USEVSTUFMICAgICAgICAgIDQKKyNkZWZpbmUgV004OTYyX0dQSU9fRk5fUExMMl9MT0NLICAgICAgICA2CisjZGVmaW5lIFdNODk2Ml9HUElPX0ZOX1BMTDNfTE9DSyAgICAgICAgNworI2RlZmluZSBXTTg5NjJfR1BJT19GTl9GTExfTE9DSyAgICAgICAgIDkKKyNkZWZpbmUgV004OTYyX0dQSU9fRk5fRFJDX0FDVCAgICAgICAgIDEwCisjZGVmaW5lIFdNODk2Ml9HUElPX0ZOX1dTRVFfRE9ORSAgICAgICAxMQorI2RlZmluZSBXTTg5NjJfR1BJT19GTl9BTENfTkdfQUNUICAgICAgMTIKKyNkZWZpbmUgV004OTYyX0dQSU9fRk5fQUxDX1BFQUtfTElNSVQgIDEzCisjZGVmaW5lIFdNODk2Ml9HUElPX0ZOX0FMQ19TQVRVUkFUSU9OICAxNAorI2RlZmluZSBXTTg5NjJfR1BJT19GTl9BTENfTEVWRUxfVEhSICAgMTUKKyNkZWZpbmUgV004OTYyX0dQSU9fRk5fQUxDX0xFVkVMX0xPQ0sgIDE2CisjZGVmaW5lIFdNODk2Ml9HUElPX0ZOX0ZJRk9fRVJSICAgICAgICAxNworI2RlZmluZSBXTTg5NjJfR1BJT19GTl9PUENMSyAgICAgICAgICAgMTgKKyNkZWZpbmUgV004OTYyX0dQSU9fRk5fRE1JQ0NMSyAgICAgICAgIDE5CisjZGVmaW5lIFdNODk2Ml9HUElPX0ZOX0RNSUNEQVQgICAgICAgICAyMAorI2RlZmluZSBXTTg5NjJfR1BJT19GTl9NSUNEICAgICAgICAgICAgMjEKKyNkZWZpbmUgV004OTYyX0dQSU9fRk5fTUlDU0NEICAgICAgICAgIDIyCisKIHN0cnVjdCB3bTg5NjJfcGRhdGEgewogCWludCBncGlvX2Jhc2U7CiAJdTMyIGdwaW9faW5pdFtXTTg5NjJfTUFYX0dQSU9dOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9uZXdwb3J0LmggYi9pbmNsdWRlL3ZpZGVvL25ld3BvcnQuaAppbmRleCAzZDdjNGI0Li5kZTk4MGEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3ZpZGVvL25ld3BvcnQuaAorKysgYi9pbmNsdWRlL3ZpZGVvL25ld3BvcnQuaApAQCAtMyw3ICszLDcgQEAKICAqIG5ld3BvcnQuaDogRGVmaW5lcyBhbmQgcmVnaXN0ZXIgbGF5b3V0IGZvciBORVdQT1JUIGdyYXBoaWNzCiAgKiAgICAgICAgICAgIGhhcmR3YXJlLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRtQGVuZ3Iuc2dpLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMTk5NiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCiAgKiAKICAqIFVsZiBDYXJsc3NvbiAtIENvbXBhdGliaWxpdHkgd2l0aCB0aGUgSVJJWCBzdHJ1Y3R1cmVzIGFkZGVkCiAgKi8KZGlmZiAtLWdpdCBhL2luaXQvS2NvbmZpZyBiL2luaXQvS2NvbmZpZwppbmRleCA0OTg2ZWNjLi5jOGIxNzJlIDEwMDY0NAotLS0gYS9pbml0L0tjb25maWcKKysrIGIvaW5pdC9LY29uZmlnCkBAIC04MjcsMTEgKzgyNyw2IEBACiAJICBkZXNrdG9wIGFwcGxpY2F0aW9ucy4gIFRhc2sgZ3JvdXAgYXV0b2dlbmVyYXRpb24gaXMgY3VycmVudGx5IGJhc2VkCiAJICB1cG9uIHRhc2sgc2Vzc2lvbi4KIAotY29uZmlnIFNDSEVEX1RUV1VfUVVFVUUKLQlib29sCi0JZGVwZW5kcyBvbiAhU1BBUkMzMgotCWRlZmF1bHQgeQotCiBjb25maWcgTU1fT1dORVIKIAlib29sCiAKQEAgLTkwOCw3ICs5MDMsNiBAQAogCiBjb25maWcgQ0NfT1BUSU1JWkVfRk9SX1NJWkUKIAlib29sICJPcHRpbWl6ZSBmb3Igc2l6ZSIKLQlkZWZhdWx0IHkKIAloZWxwCiAJICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIHBhc3MgIi1PcyIgaW5zdGVhZCBvZiAiLU8yIiB0byBnY2MKIAkgIHJlc3VsdGluZyBpbiBhIHNtYWxsZXIga2VybmVsLgpkaWZmIC0tZ2l0IGEva2VybmVsL0tjb25maWcubG9ja3MgYi9rZXJuZWwvS2NvbmZpZy5sb2NrcwppbmRleCA4OGM5MmZiLi41MDY4ZTJhIDEwMDY0NAotLS0gYS9rZXJuZWwvS2NvbmZpZy5sb2NrcworKysgYi9rZXJuZWwvS2NvbmZpZy5sb2NrcwpAQCAtMTk5LDQgKzE5OSw0IEBACiAJZGVmX2Jvb2wgIURFQlVHX1NQSU5MT0NLICYmIEFSQ0hfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFCiAKIGNvbmZpZyBNVVRFWF9TUElOX09OX09XTkVSCi0JZGVmX2Jvb2wgU01QICYmICFERUJVR19NVVRFWEVTICYmICFIQVZFX0RFRkFVTFRfTk9fU1BJTl9NVVRFWEVTCisJZGVmX2Jvb2wgU01QICYmICFERUJVR19NVVRFWEVTCmRpZmYgLS1naXQgYS9rZXJuZWwvYXVkaXRzYy5jIGIva2VybmVsL2F1ZGl0c2MuYwppbmRleCBiMzM1MTNhLi4wMGQ3OWRmIDEwMDY0NAotLS0gYS9rZXJuZWwvYXVkaXRzYy5jCisrKyBiL2tlcm5lbC9hdWRpdHNjLmMKQEAgLTQ0MywxNyArNDQzLDI1IEBACiAKIC8qIERldGVybWluZSBpZiBhbnkgY29udGV4dCBuYW1lIGRhdGEgbWF0Y2hlcyBhIHJ1bGUncyB3YXRjaCBkYXRhICovCiAvKiBDb21wYXJlIGEgdGFza19zdHJ1Y3Qgd2l0aCBhbiBhdWRpdF9ydWxlLiAgUmV0dXJuIDEgb24gbWF0Y2gsIDAKLSAqIG90aGVyd2lzZS4gKi8KKyAqIG90aGVyd2lzZS4KKyAqCisgKiBJZiB0YXNrX2NyZWF0aW9uIGlzIHRydWUsIHRoaXMgaXMgYW4gZXhwbGljaXQgaW5kaWNhdGlvbiB0aGF0IHdlIGFyZQorICogZmlsdGVyaW5nIGEgdGFzayBydWxlIGF0IHRhc2sgY3JlYXRpb24gdGltZS4gIFRoaXMgYW5kIHRzayA9PSBjdXJyZW50IGFyZQorICogdGhlIG9ubHkgc2l0dWF0aW9ucyB3aGVyZSB0c2stPmNyZWQgbWF5IGJlIGFjY2Vzc2VkIHdpdGhvdXQgYW4gcmN1IHJlYWQgbG9jay4KKyAqLwogc3RhdGljIGludCBhdWRpdF9maWx0ZXJfcnVsZXMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCiAJCQkgICAgICBzdHJ1Y3QgYXVkaXRfa3J1bGUgKnJ1bGUsCiAJCQkgICAgICBzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY3R4LAogCQkJICAgICAgc3RydWN0IGF1ZGl0X25hbWVzICpuYW1lLAotCQkJICAgICAgZW51bSBhdWRpdF9zdGF0ZSAqc3RhdGUpCisJCQkgICAgICBlbnVtIGF1ZGl0X3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgIGJvb2wgdGFza19jcmVhdGlvbikKIHsKLQljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGdldF90YXNrX2NyZWQodHNrKTsKKwljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZDsKIAlpbnQgaSwgaiwgbmVlZF9zaWQgPSAxOwogCXUzMiBzaWQ7CiAKKwljcmVkID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHRzay0+Y3JlZCwgdHNrID09IGN1cnJlbnQgfHwgdGFza19jcmVhdGlvbik7CisKIAlmb3IgKGkgPSAwOyBpIDwgcnVsZS0+ZmllbGRfY291bnQ7IGkrKykgewogCQlzdHJ1Y3QgYXVkaXRfZmllbGQgKmYgPSAmcnVsZS0+ZmllbGRzW2ldOwogCQlpbnQgcmVzdWx0ID0gMDsKQEAgLTYzNywxMCArNjQ1LDggQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKCFyZXN1bHQpIHsKLQkJCXB1dF9jcmVkKGNyZWQpOworCQlpZiAoIXJlc3VsdCkKIAkJCXJldHVybiAwOwotCQl9CiAJfQogCiAJaWYgKGN0eCkgewpAQCAtNjU2LDcgKzY2Miw2IEBACiAJY2FzZSBBVURJVF9ORVZFUjogICAgKnN0YXRlID0gQVVESVRfRElTQUJMRUQ7CSAgICBicmVhazsKIAljYXNlIEFVRElUX0FMV0FZUzogICAqc3RhdGUgPSBBVURJVF9SRUNPUkRfQ09OVEVYVDsgYnJlYWs7CiAJfQotCXB1dF9jcmVkKGNyZWQpOwogCXJldHVybiAxOwogfQogCkBAIC02NzEsNyArNjc2LDggQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlLCAmYXVkaXRfZmlsdGVyX2xpc3RbQVVESVRfRklMVEVSX1RBU0tdLCBsaXN0KSB7Ci0JCWlmIChhdWRpdF9maWx0ZXJfcnVsZXModHNrLCAmZS0+cnVsZSwgTlVMTCwgTlVMTCwgJnN0YXRlKSkgeworCQlpZiAoYXVkaXRfZmlsdGVyX3J1bGVzKHRzaywgJmUtPnJ1bGUsIE5VTEwsIE5VTEwsCisJCQkJICAgICAgICZzdGF0ZSwgdHJ1ZSkpIHsKIAkJCWlmIChzdGF0ZSA9PSBBVURJVF9SRUNPUkRfQ09OVEVYVCkKIAkJCQkqa2V5ID0ga3N0cmR1cChlLT5ydWxlLmZpbHRlcmtleSwgR0ZQX0FUT01JQyk7CiAJCQlyY3VfcmVhZF91bmxvY2soKTsKQEAgLTcwNSw3ICs3MTEsNyBAQAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlLCBsaXN0LCBsaXN0KSB7CiAJCQlpZiAoKGUtPnJ1bGUubWFza1t3b3JkXSAmIGJpdCkgPT0gYml0ICYmCiAJCQkgICAgYXVkaXRfZmlsdGVyX3J1bGVzKHRzaywgJmUtPnJ1bGUsIGN0eCwgTlVMTCwKLQkJCQkJICAgICAgICZzdGF0ZSkpIHsKKwkJCQkJICAgICAgICZzdGF0ZSwgZmFsc2UpKSB7CiAJCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQkJY3R4LT5jdXJyZW50X3N0YXRlID0gc3RhdGU7CiAJCQkJcmV0dXJuIHN0YXRlOwpAQCAtNzQzLDcgKzc0OSw4IEBACiAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZSwgbGlzdCwgbGlzdCkgewogCQkJaWYgKChlLT5ydWxlLm1hc2tbd29yZF0gJiBiaXQpID09IGJpdCAmJgotCQkJICAgIGF1ZGl0X2ZpbHRlcl9ydWxlcyh0c2ssICZlLT5ydWxlLCBjdHgsIG4sICZzdGF0ZSkpIHsKKwkJCSAgICBhdWRpdF9maWx0ZXJfcnVsZXModHNrLCAmZS0+cnVsZSwgY3R4LCBuLAorCQkJCSAgICAJICAgICAgICZzdGF0ZSwgZmFsc2UpKSB7CiAJCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQkJY3R4LT5jdXJyZW50X3N0YXRlID0gc3RhdGU7CiAJCQkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEva2VybmVsL2NvbXBhdC5jIGIva2VybmVsL2NvbXBhdC5jCmluZGV4IDM4YjFkMmMuLjkyMTRkY2QgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jb21wYXQuYworKysgYi9rZXJuZWwvY29tcGF0LmMKQEAgLTg5MCwxMCArODkwLDkgQEAKIHsKIAljb21wYXRfc2lnc2V0X3QgczMyOwogCXNpZ3NldF90IHM7Ci0JaW50IHNpZzsKIAlzdHJ1Y3QgdGltZXNwZWMgdDsKIAlzaWdpbmZvX3QgaW5mbzsKLQlsb25nIHJldCwgdGltZW91dCA9IDA7CisJbG9uZyByZXQ7CiAKIAlpZiAoc2lnc2V0c2l6ZSAhPSBzaXplb2Yoc2lnc2V0X3QpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTkwMSw1MSArOTAwLDE5IEBACiAJaWYgKGNvcHlfZnJvbV91c2VyKCZzMzIsIHV0aGVzZSwgc2l6ZW9mKGNvbXBhdF9zaWdzZXRfdCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlzaWdzZXRfZnJvbV9jb21wYXQoJnMsICZzMzIpOwotCXNpZ2RlbHNldG1hc2soJnMsc2lnbWFzayhTSUdLSUxMKXxzaWdtYXNrKFNJR1NUT1ApKTsKLQlzaWdub3RzZXQoJnMpOwogCiAJaWYgKHV0cykgewotCQlpZiAoZ2V0X2NvbXBhdF90aW1lc3BlYyAoJnQsIHV0cykpCisJCWlmIChnZXRfY29tcGF0X3RpbWVzcGVjKCZ0LCB1dHMpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmICh0LnR2X25zZWMgPj0gMTAwMDAwMDAwMEwgfHwgdC50dl9uc2VjIDwgMAotCQkJCXx8IHQudHZfc2VjIDwgMCkKLQkJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCXNpZyA9IGRlcXVldWVfc2lnbmFsKGN1cnJlbnQsICZzLCAmaW5mbyk7Ci0JaWYgKCFzaWcpIHsKLQkJdGltZW91dCA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUOwotCQlpZiAodXRzKQotCQkJdGltZW91dCA9IHRpbWVzcGVjX3RvX2ppZmZpZXMoJnQpCi0JCQkJKyh0LnR2X3NlYyB8fCB0LnR2X25zZWMpOwotCQlpZiAodGltZW91dCkgewotCQkJY3VycmVudC0+cmVhbF9ibG9ja2VkID0gY3VycmVudC0+YmxvY2tlZDsKLQkJCXNpZ2FuZHNldHMoJmN1cnJlbnQtPmJsb2NrZWQsICZjdXJyZW50LT5ibG9ja2VkLCAmcyk7CisJcmV0ID0gZG9fc2lndGltZWR3YWl0KCZzLCAmaW5mbywgdXRzID8gJnQgOiBOVUxMKTsKIAotCQkJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKLQkJCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0KLQkJCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUodGltZW91dCk7Ci0KLQkJCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCQkJc2lnID0gZGVxdWV1ZV9zaWduYWwoY3VycmVudCwgJnMsICZpbmZvKTsKLQkJCWN1cnJlbnQtPmJsb2NrZWQgPSBjdXJyZW50LT5yZWFsX2Jsb2NrZWQ7Ci0JCQlzaWdpbml0c2V0KCZjdXJyZW50LT5yZWFsX2Jsb2NrZWQsIDApOwotCQkJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKLQkJfQorCWlmIChyZXQgPiAwICYmIHVpbmZvKSB7CisJCWlmIChjb3B5X3NpZ2luZm9fdG9fdXNlcjMyKHVpbmZvLCAmaW5mbykpCisJCQlyZXQgPSAtRUZBVUxUOwogCX0KLQlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwogCi0JaWYgKHNpZykgewotCQlyZXQgPSBzaWc7Ci0JCWlmICh1aW5mbykgewotCQkJaWYgKGNvcHlfc2lnaW5mb190b191c2VyMzIodWluZm8sICZpbmZvKSkKLQkJCQlyZXQgPSAtRUZBVUxUOwotCQl9Ci0JfWVsc2UgewotCQlyZXQgPSB0aW1lb3V0Py1FSU5UUjotRUFHQUlOOwotCX0KIAlyZXR1cm4gcmV0OwogCiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvZXhpdC5jIGIva2VybmVsL2V4aXQuYwppbmRleCA4ZGQ4NzQxLi4yMGE0MDY0IDEwMDY0NAotLS0gYS9rZXJuZWwvZXhpdC5jCisrKyBiL2tlcm5lbC9leGl0LmMKQEAgLTEzNzcsMTEgKzEzNzcsMjMgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotLyoKLSAqIEhhbmRsZSBzeXNfd2FpdDQgd29yayBmb3Igb25lIHRhc2sgaW4gc3RhdGUgVEFTS19TVE9QUEVELiAgV2UgaG9sZAotICogcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKSBvbiBlbnRyeS4gIElmIHdlIHJldHVybiB6ZXJvLCB3ZSBzdGlsbCBob2xkCi0gKiB0aGUgbG9jayBhbmQgdGhpcyB0YXNrIGlzIHVuaW50ZXJlc3RpbmcuICBJZiB3ZSByZXR1cm4gbm9uemVybywgd2UgaGF2ZQotICogcmVsZWFzZWQgdGhlIGxvY2sgYW5kIHRoZSBzeXN0ZW0gY2FsbCBzaG91bGQgcmV0dXJuLgorLyoqCisgKiB3YWl0X3Rhc2tfc3RvcHBlZCAtIFdhaXQgZm9yICVUQVNLX1NUT1BQRUQgb3IgJVRBU0tfVFJBQ0VECisgKiBAd286IHdhaXQgb3B0aW9ucworICogQHB0cmFjZTogaXMgdGhlIHdhaXQgZm9yIHB0cmFjZQorICogQHA6IHRhc2sgdG8gd2FpdCBmb3IKKyAqCisgKiBIYW5kbGUgc3lzX3dhaXQ0KCkgd29yayBmb3IgJXAgaW4gc3RhdGUgJVRBU0tfU1RPUFBFRCBvciAlVEFTS19UUkFDRUQuCisgKgorICogQ09OVEVYVDoKKyAqIHJlYWRfbG9jaygmdGFza2xpc3RfbG9jayksIHdoaWNoIGlzIHJlbGVhc2VkIGlmIHJldHVybiB2YWx1ZSBpcworICogbm9uLXplcm8uICBBbHNvLCBncmFicyBhbmQgcmVsZWFzZXMgQHAtPnNpZ2hhbmQtPnNpZ2xvY2suCisgKgorICogUkVUVVJOUzoKKyAqIDAgaWYgd2FpdCBjb25kaXRpb24gZGlkbid0IGV4aXN0IGFuZCBzZWFyY2ggZm9yIG90aGVyIHdhaXQgY29uZGl0aW9ucworICogc2hvdWxkIGNvbnRpbnVlLiAgTm9uLXplcm8gcmV0dXJuLCAtZXJybm8gb24gZmFpbHVyZSBhbmQgQHAncyBwaWQgb24KKyAqIHN1Y2Nlc3MsIGltcGxpZXMgdGhhdCB0YXNrbGlzdF9sb2NrIGlzIHJlbGVhc2VkIGFuZCB3YWl0IGNvbmRpdGlvbgorICogc2VhcmNoIHNob3VsZCB0ZXJtaW5hdGUuCiAgKi8KIHN0YXRpYyBpbnQgd2FpdF90YXNrX3N0b3BwZWQoc3RydWN0IHdhaXRfb3B0cyAqd28sCiAJCQkJaW50IHB0cmFjZSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQpAQCAtMTM5Nyw2ICsxNDA5LDkgQEAKIAlpZiAoIXB0cmFjZSAmJiAhKHdvLT53b19mbGFncyAmIFdVTlRSQUNFRCkpCiAJCXJldHVybiAwOwogCisJaWYgKCF0YXNrX3N0b3BwZWRfY29kZShwLCBwdHJhY2UpKQorCQlyZXR1cm4gMDsKKwogCWV4aXRfY29kZSA9IDA7CiAJc3Bpbl9sb2NrX2lycSgmcC0+c2lnaGFuZC0+c2lnbG9jayk7CiAKQEAgLTE1MzgsMzMgKzE1NTMsODQgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKGxpa2VseSghcHRyYWNlKSAmJiB1bmxpa2VseSh0YXNrX3B0cmFjZShwKSkpIHsKLQkJLyoKLQkJICogVGhpcyBjaGlsZCBpcyBoaWRkZW4gYnkgcHRyYWNlLgotCQkgKiBXZSBhcmVuJ3QgYWxsb3dlZCB0byBzZWUgaXQgbm93LCBidXQgZXZlbnR1YWxseSB3ZSB3aWxsLgotCQkgKi8KLQkJd28tPm5vdGFza19lcnJvciA9IDA7Ci0JCXJldHVybiAwOwotCX0KLQorCS8qIGRlYWQgYm9keSBkb2Vzbid0IGhhdmUgbXVjaCB0byBjb250cmlidXRlICovCiAJaWYgKHAtPmV4aXRfc3RhdGUgPT0gRVhJVF9ERUFEKQogCQlyZXR1cm4gMDsKIAotCS8qCi0JICogV2UgZG9uJ3QgcmVhcCBncm91cCBsZWFkZXJzIHdpdGggc3VidGhyZWFkcy4KLQkgKi8KLQlpZiAocC0+ZXhpdF9zdGF0ZSA9PSBFWElUX1pPTUJJRSAmJiAhZGVsYXlfZ3JvdXBfbGVhZGVyKHApKQotCQlyZXR1cm4gd2FpdF90YXNrX3pvbWJpZSh3bywgcCk7CisJLyogc2xheSB6b21iaWU/ICovCisJaWYgKHAtPmV4aXRfc3RhdGUgPT0gRVhJVF9aT01CSUUpIHsKKwkJLyoKKwkJICogQSB6b21iaWUgcHRyYWNlZSBpcyBvbmx5IHZpc2libGUgdG8gaXRzIHB0cmFjZXIuCisJCSAqIE5vdGlmaWNhdGlvbiBhbmQgcmVhcGluZyB3aWxsIGJlIGNhc2NhZGVkIHRvIHRoZSByZWFsCisJCSAqIHBhcmVudCB3aGVuIHRoZSBwdHJhY2VyIGRldGFjaGVzLgorCQkgKi8KKwkJaWYgKGxpa2VseSghcHRyYWNlKSAmJiB1bmxpa2VseSh0YXNrX3B0cmFjZShwKSkpIHsKKwkJCS8qIGl0IHdpbGwgYmVjb21lIHZpc2libGUsIGNsZWFyIG5vdGFza19lcnJvciAqLworCQkJd28tPm5vdGFza19lcnJvciA9IDA7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qIHdlIGRvbid0IHJlYXAgZ3JvdXAgbGVhZGVycyB3aXRoIHN1YnRocmVhZHMgKi8KKwkJaWYgKCFkZWxheV9ncm91cF9sZWFkZXIocCkpCisJCQlyZXR1cm4gd2FpdF90YXNrX3pvbWJpZSh3bywgcCk7CisKKwkJLyoKKwkJICogQWxsb3cgYWNjZXNzIHRvIHN0b3BwZWQvY29udGludWVkIHN0YXRlIHZpYSB6b21iaWUgYnkKKwkJICogZmFsbGluZyB0aHJvdWdoLiAgQ2xlYXJpbmcgb2Ygbm90YXNrX2Vycm9yIGlzIGNvbXBsZXguCisJCSAqCisJCSAqIFdoZW4gIUBwdHJhY2U6CisJCSAqCisJCSAqIElmIFdFWElURUQgaXMgc2V0LCBub3Rhc2tfZXJyb3Igc2hvdWxkIG5hdHVyYWxseSBiZQorCQkgKiBjbGVhcmVkLiAgSWYgbm90LCBzdWJzZXQgb2YgV1NUT1BQRUR8V0NPTlRJTlVFRCBpcyBzZXQsCisJCSAqIHNvLCBpZiB0aGVyZSBhcmUgbGl2ZSBzdWJ0aHJlYWRzLCB0aGVyZSBhcmUgZXZlbnRzIHRvCisJCSAqIHdhaXQgZm9yLiAgSWYgYWxsIHN1YnRocmVhZHMgYXJlIGRlYWQsIGl0J3Mgc3RpbGwgc2FmZQorCQkgKiB0byBjbGVhciAtIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYWdhaW4gaW4gZmluaXRlCisJCSAqIGFtb3VudCB0aW1lIG9uY2UgYWxsIHRoZSBzdWJ0aHJlYWRzIGFyZSByZWxlYXNlZCBhbmQKKwkJICogd2lsbCB0aGVuIHJldHVybiB3aXRob3V0IGNsZWFyaW5nLgorCQkgKgorCQkgKiBXaGVuIEBwdHJhY2U6CisJCSAqCisJCSAqIFN0b3BwZWQgc3RhdGUgaXMgcGVyLXRhc2sgYW5kIHRodXMgY2FuJ3QgY2hhbmdlIG9uY2UgdGhlCisJCSAqIHRhcmdldCB0YXNrIGRpZXMuICBPbmx5IGNvbnRpbnVlZCBhbmQgZXhpdGVkIGNhbiBoYXBwZW4uCisJCSAqIENsZWFyIG5vdGFza19lcnJvciBpZiBXQ09OVElOVUVEIHwgV0VYSVRFRC4KKwkJICovCisJCWlmIChsaWtlbHkoIXB0cmFjZSkgfHwgKHdvLT53b19mbGFncyAmIChXQ09OVElOVUVEIHwgV0VYSVRFRCkpKQorCQkJd28tPm5vdGFza19lcnJvciA9IDA7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogSWYgQHAgaXMgcHRyYWNlZCBieSBhIHRhc2sgaW4gaXRzIHJlYWwgcGFyZW50J3MgZ3JvdXAsCisJCSAqIGhpZGUgZ3JvdXAgc3RvcC9jb250aW51ZWQgc3RhdGUgd2hlbiBsb29raW5nIGF0IEBwIGFzCisJCSAqIHRoZSByZWFsIHBhcmVudDsgb3RoZXJ3aXNlLCBhIHNpbmdsZSBzdG9wIGNhbiBiZQorCQkgKiByZXBvcnRlZCB0d2ljZSBhcyBncm91cCBhbmQgcHRyYWNlIHN0b3BzLgorCQkgKgorCQkgKiBJZiBhIHB0cmFjZXIgd2FudHMgdG8gZGlzdGluZ3Vpc2ggdGhlIHR3byBldmVudHMgZm9yIGl0cworCQkgKiBvd24gY2hpbGRyZW4sIGl0IHNob3VsZCBjcmVhdGUgYSBzZXBhcmF0ZSBwcm9jZXNzIHdoaWNoCisJCSAqIHRha2VzIHRoZSByb2xlIG9mIHJlYWwgcGFyZW50LgorCQkgKi8KKwkJaWYgKGxpa2VseSghcHRyYWNlKSAmJiB0YXNrX3B0cmFjZShwKSAmJgorCQkgICAgc2FtZV90aHJlYWRfZ3JvdXAocC0+cGFyZW50LCBwLT5yZWFsX3BhcmVudCkpCisJCQlyZXR1cm4gMDsKKworCQkvKgorCQkgKiBAcCBpcyBhbGl2ZSBhbmQgaXQncyBnb25uYSBzdG9wLCBjb250aW51ZSBvciBleGl0LCBzbworCQkgKiB0aGVyZSBhbHdheXMgaXMgc29tZXRoaW5nIHRvIHdhaXQgZm9yLgorCQkgKi8KKwkJd28tPm5vdGFza19lcnJvciA9IDA7CisJfQogCiAJLyoKLQkgKiBJdCdzIHN0b3BwZWQgb3IgcnVubmluZyBub3csIHNvIGl0IG1pZ2h0Ci0JICogbGF0ZXIgY29udGludWUsIGV4aXQsIG9yIHN0b3AgYWdhaW4uCisJICogV2FpdCBmb3Igc3RvcHBlZC4gIERlcGVuZGluZyBvbiBAcHRyYWNlLCBkaWZmZXJlbnQgc3RvcHBlZCBzdGF0ZQorCSAqIGlzIHVzZWQgYW5kIHRoZSB0d28gZG9uJ3QgaW50ZXJhY3Qgd2l0aCBlYWNoIG90aGVyLgogCSAqLwotCXdvLT5ub3Rhc2tfZXJyb3IgPSAwOworCXJldCA9IHdhaXRfdGFza19zdG9wcGVkKHdvLCBwdHJhY2UsIHApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKLQlpZiAodGFza19zdG9wcGVkX2NvZGUocCwgcHRyYWNlKSkKLQkJcmV0dXJuIHdhaXRfdGFza19zdG9wcGVkKHdvLCBwdHJhY2UsIHApOwotCisJLyoKKwkgKiBXYWl0IGZvciBjb250aW51ZWQuICBUaGVyZSdzIG9ubHkgb25lIGNvbnRpbnVlZCBzdGF0ZSBhbmQgdGhlCisJICogcHRyYWNlciBjYW4gY29uc3VtZSBpdCB3aGljaCBjYW4gY29uZnVzZSB0aGUgcmVhbCBwYXJlbnQuICBEb24ndAorCSAqIHVzZSBXQ09OVElOVUVEIGZyb20gcHRyYWNlci4gIFlvdSBkb24ndCBuZWVkIG9yIHdhbnQgaXQuCisJICovCiAJcmV0dXJuIHdhaXRfdGFza19jb250aW51ZWQod28sIHApOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvZXh0YWJsZS5jIGIva2VybmVsL2V4dGFibGUuYwppbmRleCBjMmQ2MjVmLi41MzM5NzA1IDEwMDY0NAotLS0gYS9rZXJuZWwvZXh0YWJsZS5jCisrKyBiL2tlcm5lbC9leHRhYmxlLmMKQEAgLTcyLDYgKzcyLDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogY29yZV9rZXJuZWxfZGF0YSAtIHRlbGwgaWYgYWRkciBwb2ludHMgdG8ga2VybmVsIGRhdGEKKyAqIEBhZGRyOiBhZGRyZXNzIHRvIHRlc3QKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgQGFkZHIgcGFzc2VkIGluIGlzIGZyb20gdGhlIGNvcmUga2VybmVsIGRhdGEKKyAqIHNlY3Rpb24uCisgKgorICogTm90ZTogT24gc29tZSBhcmNocyBpdCBtYXkgcmV0dXJuIHRydWUgZm9yIGNvcmUgUk9EQVRBLCBhbmQgZmFsc2UKKyAqICBmb3Igb3RoZXJzLiBCdXQgd2lsbCBhbHdheXMgYmUgdHJ1ZSBmb3IgY29yZSBSVyBkYXRhLgorICovCiBpbnQgY29yZV9rZXJuZWxfZGF0YSh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJaWYgKGFkZHIgPj0gKHVuc2lnbmVkIGxvbmcpX3NkYXRhICYmCmRpZmYgLS1naXQgYS9rZXJuZWwvaHJ0aW1lci5jIGIva2VybmVsL2hydGltZXIuYwppbmRleCBkYmJiZjdkLi5jNTQxZWU1IDEwMDY0NAotLS0gYS9rZXJuZWwvaHJ0aW1lci5jCisrKyBiL2tlcm5lbC9ocnRpbWVyLmMKQEAgLTY0LDE3ICs2NCwyMCBAQAogCS5jbG9ja19iYXNlID0KIAl7CiAJCXsKLQkJCS5pbmRleCA9IENMT0NLX1JFQUxUSU1FLAotCQkJLmdldF90aW1lID0gJmt0aW1lX2dldF9yZWFsLAotCQkJLnJlc29sdXRpb24gPSBLVElNRV9MT1dfUkVTLAotCQl9LAotCQl7Ci0JCQkuaW5kZXggPSBDTE9DS19NT05PVE9OSUMsCisJCQkuaW5kZXggPSBIUlRJTUVSX0JBU0VfTU9OT1RPTklDLAorCQkJLmNsb2NraWQgPSBDTE9DS19NT05PVE9OSUMsCiAJCQkuZ2V0X3RpbWUgPSAma3RpbWVfZ2V0LAogCQkJLnJlc29sdXRpb24gPSBLVElNRV9MT1dfUkVTLAogCQl9LAogCQl7Ci0JCQkuaW5kZXggPSBDTE9DS19CT09UVElNRSwKKwkJCS5pbmRleCA9IEhSVElNRVJfQkFTRV9SRUFMVElNRSwKKwkJCS5jbG9ja2lkID0gQ0xPQ0tfUkVBTFRJTUUsCisJCQkuZ2V0X3RpbWUgPSAma3RpbWVfZ2V0X3JlYWwsCisJCQkucmVzb2x1dGlvbiA9IEtUSU1FX0xPV19SRVMsCisJCX0sCisJCXsKKwkJCS5pbmRleCA9IEhSVElNRVJfQkFTRV9CT09UVElNRSwKKwkJCS5jbG9ja2lkID0gQ0xPQ0tfQk9PVFRJTUUsCiAJCQkuZ2V0X3RpbWUgPSAma3RpbWVfZ2V0X2Jvb3R0aW1lLAogCQkJLnJlc29sdXRpb24gPSBLVElNRV9MT1dfUkVTLAogCQl9LApAQCAtMTk2LDcgKzE5OSw3IEBACiAJc3RydWN0IGhydGltZXJfY3B1X2Jhc2UgKm5ld19jcHVfYmFzZTsKIAlpbnQgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJaW50IGNwdSA9IGhydGltZXJfZ2V0X3RhcmdldCh0aGlzX2NwdSwgcGlubmVkKTsKLQlpbnQgYmFzZW51bSA9IGhydGltZXJfY2xvY2tpZF90b19iYXNlKGJhc2UtPmluZGV4KTsKKwlpbnQgYmFzZW51bSA9IGJhc2UtPmluZGV4OwogCiBhZ2FpbjoKIAluZXdfY3B1X2Jhc2UgPSAmcGVyX2NwdShocnRpbWVyX2Jhc2VzLCBjcHUpOwpAQCAtNjIxLDY2ICs2MjQsNiBAQAogCXJldHVybiByZXM7CiB9CiAKLQotLyoKLSAqIFJldHJpZ2dlciBuZXh0IGV2ZW50IGlzIGNhbGxlZCBhZnRlciBjbG9jayB3YXMgc2V0Ci0gKgotICogQ2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCB2aWEgb25fZWFjaF9jcHUoKQotICovCi1zdGF0aWMgdm9pZCByZXRyaWdnZXJfbmV4dF9ldmVudCh2b2lkICphcmcpCi17Ci0Jc3RydWN0IGhydGltZXJfY3B1X2Jhc2UgKmJhc2U7Ci0Jc3RydWN0IHRpbWVzcGVjIHJlYWx0aW1lX29mZnNldCwgd3RtLCBzbGVlcDsKLQotCWlmICghaHJ0aW1lcl9ocmVzX2FjdGl2ZSgpKQotCQlyZXR1cm47Ci0KLQlnZXRfeHRpbWVfYW5kX21vbm90b25pY19hbmRfc2xlZXBfb2Zmc2V0KCZyZWFsdGltZV9vZmZzZXQsICZ3dG0sCi0JCQkJCQkJJnNsZWVwKTsKLQlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmcmVhbHRpbWVfb2Zmc2V0LCAtd3RtLnR2X3NlYywgLXd0bS50dl9uc2VjKTsKLQotCWJhc2UgPSAmX19nZXRfY3B1X3ZhcihocnRpbWVyX2Jhc2VzKTsKLQotCS8qIEFkanVzdCBDTE9DS19SRUFMVElNRSBvZmZzZXQgKi8KLQlyYXdfc3Bpbl9sb2NrKCZiYXNlLT5sb2NrKTsKLQliYXNlLT5jbG9ja19iYXNlW0hSVElNRVJfQkFTRV9SRUFMVElNRV0ub2Zmc2V0ID0KLQkJdGltZXNwZWNfdG9fa3RpbWUocmVhbHRpbWVfb2Zmc2V0KTsKLQliYXNlLT5jbG9ja19iYXNlW0hSVElNRVJfQkFTRV9CT09UVElNRV0ub2Zmc2V0ID0KLQkJdGltZXNwZWNfdG9fa3RpbWUoc2xlZXApOwotCi0JaHJ0aW1lcl9mb3JjZV9yZXByb2dyYW0oYmFzZSwgMCk7Ci0JcmF3X3NwaW5fdW5sb2NrKCZiYXNlLT5sb2NrKTsKLX0KLQotLyoKLSAqIENsb2NrIHJlYWx0aW1lIHdhcyBzZXQKLSAqCi0gKiBDaGFuZ2UgdGhlIG9mZnNldCBvZiB0aGUgcmVhbHRpbWUgY2xvY2sgdnMuIHRoZSBtb25vdG9uaWMKLSAqIGNsb2NrLgotICoKLSAqIFdlIG1pZ2h0IGhhdmUgdG8gcmVwcm9ncmFtIHRoZSBoaWdoIHJlc29sdXRpb24gdGltZXIgaW50ZXJydXB0LiBPbgotICogU01QIHdlIGNhbGwgdGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjb2RlIHRvIHJldHJpZ2dlciBfYWxsXyBoaWdoCi0gKiByZXNvbHV0aW9uIHRpbWVyIGludGVycnVwdHMuIE9uIFVQIHdlIGp1c3QgZGlzYWJsZSBpbnRlcnJ1cHRzIGFuZAotICogY2FsbCB0aGUgaGlnaCByZXNvbHV0aW9uIGludGVycnVwdCBjb2RlLgotICovCi12b2lkIGNsb2NrX3dhc19zZXQodm9pZCkKLXsKLQkvKiBSZXRyaWdnZXIgdGhlIENQVSBsb2NhbCBldmVudHMgZXZlcnl3aGVyZSAqLwotCW9uX2VhY2hfY3B1KHJldHJpZ2dlcl9uZXh0X2V2ZW50LCBOVUxMLCAxKTsKLX0KLQotLyoKLSAqIER1cmluZyByZXN1bWUgd2UgbWlnaHQgaGF2ZSB0byByZXByb2dyYW0gdGhlIGhpZ2ggcmVzb2x1dGlvbiB0aW1lcgotICogaW50ZXJydXB0IChvbiB0aGUgbG9jYWwgQ1BVKToKLSAqLwotdm9pZCBocmVzX3RpbWVyc19yZXN1bWUodm9pZCkKLXsKLQlXQVJOX09OQ0UoIWlycXNfZGlzYWJsZWQoKSwKLQkJICBLRVJOX0lORk8gImhyZXNfdGltZXJzX3Jlc3VtZSgpIGNhbGxlZCB3aXRoIElSUXMgZW5hYmxlZCEiKTsKLQotCXJldHJpZ2dlcl9uZXh0X2V2ZW50KE5VTEwpOwotfQotCiAvKgogICogSW5pdGlhbGl6ZSB0aGUgaGlnaCByZXNvbHV0aW9uIHJlbGF0ZWQgcGFydHMgb2YgY3B1X2Jhc2UKICAqLwpAQCAtNzE1LDExICs2NTgsMzkgQEAKIH0KIAogLyoKKyAqIFJldHJpZ2dlciBuZXh0IGV2ZW50IGlzIGNhbGxlZCBhZnRlciBjbG9jayB3YXMgc2V0CisgKgorICogQ2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCB2aWEgb25fZWFjaF9jcHUoKQorICovCitzdGF0aWMgdm9pZCByZXRyaWdnZXJfbmV4dF9ldmVudCh2b2lkICphcmcpCit7CisJc3RydWN0IGhydGltZXJfY3B1X2Jhc2UgKmJhc2UgPSAmX19nZXRfY3B1X3ZhcihocnRpbWVyX2Jhc2VzKTsKKwlzdHJ1Y3QgdGltZXNwZWMgcmVhbHRpbWVfb2Zmc2V0LCB4dGltLCB3dG0sIHNsZWVwOworCisJaWYgKCFocnRpbWVyX2hyZXNfYWN0aXZlKCkpCisJCXJldHVybjsKKworCS8qIE9wdGltaXplZCBvdXQgZm9yICFISUdIX1JFUyAqLworCWdldF94dGltZV9hbmRfbW9ub3RvbmljX2FuZF9zbGVlcF9vZmZzZXQoJnh0aW0sICZ3dG0sICZzbGVlcCk7CisJc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJnJlYWx0aW1lX29mZnNldCwgLXd0bS50dl9zZWMsIC13dG0udHZfbnNlYyk7CisKKwkvKiBBZGp1c3QgQ0xPQ0tfUkVBTFRJTUUgb2Zmc2V0ICovCisJcmF3X3NwaW5fbG9jaygmYmFzZS0+bG9jayk7CisJYmFzZS0+Y2xvY2tfYmFzZVtIUlRJTUVSX0JBU0VfUkVBTFRJTUVdLm9mZnNldCA9CisJCXRpbWVzcGVjX3RvX2t0aW1lKHJlYWx0aW1lX29mZnNldCk7CisJYmFzZS0+Y2xvY2tfYmFzZVtIUlRJTUVSX0JBU0VfQk9PVFRJTUVdLm9mZnNldCA9CisJCXRpbWVzcGVjX3RvX2t0aW1lKHNsZWVwKTsKKworCWhydGltZXJfZm9yY2VfcmVwcm9ncmFtKGJhc2UsIDApOworCXJhd19zcGluX3VubG9jaygmYmFzZS0+bG9jayk7Cit9CisKKy8qCiAgKiBTd2l0Y2ggdG8gaGlnaCByZXNvbHV0aW9uIG1vZGUKICAqLwogc3RhdGljIGludCBocnRpbWVyX3N3aXRjaF90b19ocmVzKHZvaWQpCiB7Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpbnQgaSwgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXN0cnVjdCBocnRpbWVyX2NwdV9iYXNlICpiYXNlID0gJnBlcl9jcHUoaHJ0aW1lcl9iYXNlcywgY3B1KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC03MzUsOSArNzA2LDggQEAKIAkJcmV0dXJuIDA7CiAJfQogCWJhc2UtPmhyZXNfYWN0aXZlID0gMTsKLQliYXNlLT5jbG9ja19iYXNlW0hSVElNRVJfQkFTRV9SRUFMVElNRV0ucmVzb2x1dGlvbiA9IEtUSU1FX0hJR0hfUkVTOwotCWJhc2UtPmNsb2NrX2Jhc2VbSFJUSU1FUl9CQVNFX01PTk9UT05JQ10ucmVzb2x1dGlvbiA9IEtUSU1FX0hJR0hfUkVTOwotCWJhc2UtPmNsb2NrX2Jhc2VbSFJUSU1FUl9CQVNFX0JPT1RUSU1FXS5yZXNvbHV0aW9uID0gS1RJTUVfSElHSF9SRVM7CisJZm9yIChpID0gMDsgaSA8IEhSVElNRVJfTUFYX0NMT0NLX0JBU0VTOyBpKyspCisJCWJhc2UtPmNsb2NrX2Jhc2VbaV0ucmVzb2x1dGlvbiA9IEtUSU1FX0hJR0hfUkVTOwogCiAJdGlja19zZXR1cF9zY2hlZF90aW1lcigpOwogCkBAIC03NjEsOSArNzMxLDQzIEBACiAJcmV0dXJuIDA7CiB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaHJ0aW1lcl9pbml0X2hyZXMoc3RydWN0IGhydGltZXJfY3B1X2Jhc2UgKmJhc2UpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHJldHJpZ2dlcl9uZXh0X2V2ZW50KHZvaWQgKmFyZykgeyB9CiAKICNlbmRpZiAvKiBDT05GSUdfSElHSF9SRVNfVElNRVJTICovCiAKKy8qCisgKiBDbG9jayByZWFsdGltZSB3YXMgc2V0CisgKgorICogQ2hhbmdlIHRoZSBvZmZzZXQgb2YgdGhlIHJlYWx0aW1lIGNsb2NrIHZzLiB0aGUgbW9ub3RvbmljCisgKiBjbG9jay4KKyAqCisgKiBXZSBtaWdodCBoYXZlIHRvIHJlcHJvZ3JhbSB0aGUgaGlnaCByZXNvbHV0aW9uIHRpbWVyIGludGVycnVwdC4gT24KKyAqIFNNUCB3ZSBjYWxsIHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29kZSB0byByZXRyaWdnZXIgX2FsbF8gaGlnaAorICogcmVzb2x1dGlvbiB0aW1lciBpbnRlcnJ1cHRzLiBPbiBVUCB3ZSBqdXN0IGRpc2FibGUgaW50ZXJydXB0cyBhbmQKKyAqIGNhbGwgdGhlIGhpZ2ggcmVzb2x1dGlvbiBpbnRlcnJ1cHQgY29kZS4KKyAqLwordm9pZCBjbG9ja193YXNfc2V0KHZvaWQpCit7CisjaWZkZWYgQ09ORklHX0hJR0hSRVNfVElNRVJTCisJLyogUmV0cmlnZ2VyIHRoZSBDUFUgbG9jYWwgZXZlbnRzIGV2ZXJ5d2hlcmUgKi8KKwlvbl9lYWNoX2NwdShyZXRyaWdnZXJfbmV4dF9ldmVudCwgTlVMTCwgMSk7CisjZW5kaWYKKwl0aW1lcmZkX2Nsb2NrX3dhc19zZXQoKTsKK30KKworLyoKKyAqIER1cmluZyByZXN1bWUgd2UgbWlnaHQgaGF2ZSB0byByZXByb2dyYW0gdGhlIGhpZ2ggcmVzb2x1dGlvbiB0aW1lcgorICogaW50ZXJydXB0IChvbiB0aGUgbG9jYWwgQ1BVKToKKyAqLwordm9pZCBocnRpbWVyc19yZXN1bWUodm9pZCkKK3sKKwlXQVJOX09OQ0UoIWlycXNfZGlzYWJsZWQoKSwKKwkJICBLRVJOX0lORk8gImhydGltZXJzX3Jlc3VtZSgpIGNhbGxlZCB3aXRoIElSUXMgZW5hYmxlZCEiKTsKKworCXJldHJpZ2dlcl9uZXh0X2V2ZW50KE5VTEwpOworCXRpbWVyZmRfY2xvY2tfd2FzX3NldCgpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgdGltZXJfc3RhdHNfaHJ0aW1lcl9zZXRfc3RhcnRfaW5mbyhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpCiB7CiAjaWZkZWYgQ09ORklHX1RJTUVSX1NUQVRTCkBAIC04NTYsNiArODYwLDcgQEAKIAlkZWJ1Z19hY3RpdmF0ZSh0aW1lcik7CiAKIAl0aW1lcnF1ZXVlX2FkZCgmYmFzZS0+YWN0aXZlLCAmdGltZXItPm5vZGUpOworCWJhc2UtPmNwdV9iYXNlLT5hY3RpdmVfYmFzZXMgfD0gMSA8PCBiYXNlLT5pbmRleDsKIAogCS8qCiAJICogSFJUSU1FUl9TVEFURV9FTlFVRVVFRCBpcyBvcidlZCB0byB0aGUgY3VycmVudCBzdGF0ZSB0byBwcmVzZXJ2ZSB0aGUKQEAgLTg5Nyw2ICs5MDIsOCBAQAogI2VuZGlmCiAJfQogCXRpbWVycXVldWVfZGVsKCZiYXNlLT5hY3RpdmUsICZ0aW1lci0+bm9kZSk7CisJaWYgKCF0aW1lcnF1ZXVlX2dldG5leHQoJmJhc2UtPmFjdGl2ZSkpCisJCWJhc2UtPmNwdV9iYXNlLT5hY3RpdmVfYmFzZXMgJj0gfigxIDw8IGJhc2UtPmluZGV4KTsKIG91dDoKIAl0aW1lci0+c3RhdGUgPSBuZXdzdGF0ZTsKIH0KQEAgLTEyMzQsNyArMTI0MSw2IEBACiB2b2lkIGhydGltZXJfaW50ZXJydXB0KHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaHJ0aW1lcl9jcHVfYmFzZSAqY3B1X2Jhc2UgPSAmX19nZXRfY3B1X3ZhcihocnRpbWVyX2Jhc2VzKTsKLQlzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlICpiYXNlOwogCWt0aW1lX3QgZXhwaXJlc19uZXh0LCBub3csIGVudHJ5X3RpbWUsIGRlbHRhOwogCWludCBpLCByZXRyaWVzID0gMDsKIApAQCAtMTI1NiwxMiArMTI2MiwxNSBAQAogCSAqLwogCWNwdV9iYXNlLT5leHBpcmVzX25leHQudHY2NCA9IEtUSU1FX01BWDsKIAotCWJhc2UgPSBjcHVfYmFzZS0+Y2xvY2tfYmFzZTsKLQogCWZvciAoaSA9IDA7IGkgPCBIUlRJTUVSX01BWF9DTE9DS19CQVNFUzsgaSsrKSB7Ci0JCWt0aW1lX3QgYmFzZW5vdzsKKwkJc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZSAqYmFzZTsKIAkJc3RydWN0IHRpbWVycXVldWVfbm9kZSAqbm9kZTsKKwkJa3RpbWVfdCBiYXNlbm93OwogCisJCWlmICghKGNwdV9iYXNlLT5hY3RpdmVfYmFzZXMgJiAoMSA8PCBpKSkpCisJCQljb250aW51ZTsKKworCQliYXNlID0gY3B1X2Jhc2UtPmNsb2NrX2Jhc2UgKyBpOwogCQliYXNlbm93ID0ga3RpbWVfYWRkKG5vdywgYmFzZS0+b2Zmc2V0KTsKIAogCQl3aGlsZSAoKG5vZGUgPSB0aW1lcnF1ZXVlX2dldG5leHQoJmJhc2UtPmFjdGl2ZSkpKSB7CkBAIC0xMjk0LDcgKzEzMDMsNiBAQAogCiAJCQlfX3J1bl9ocnRpbWVyKHRpbWVyLCAmYmFzZW5vdyk7CiAJCX0KLQkJYmFzZSsrOwogCX0KIAogCS8qCkBAIC0xNTI1LDcgKzE1MzMsNyBAQAogCXN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgICpybXRwOwogCWludCByZXQgPSAwOwogCi0JaHJ0aW1lcl9pbml0X29uX3N0YWNrKCZ0LnRpbWVyLCByZXN0YXJ0LT5uYW5vc2xlZXAuaW5kZXgsCisJaHJ0aW1lcl9pbml0X29uX3N0YWNrKCZ0LnRpbWVyLCByZXN0YXJ0LT5uYW5vc2xlZXAuY2xvY2tpZCwKIAkJCQlIUlRJTUVSX01PREVfQUJTKTsKIAlocnRpbWVyX3NldF9leHBpcmVzX3R2NjQoJnQudGltZXIsIHJlc3RhcnQtPm5hbm9zbGVlcC5leHBpcmVzKTsKIApAQCAtMTU3Nyw3ICsxNTg1LDcgQEAKIAogCXJlc3RhcnQgPSAmY3VycmVudF90aHJlYWRfaW5mbygpLT5yZXN0YXJ0X2Jsb2NrOwogCXJlc3RhcnQtPmZuID0gaHJ0aW1lcl9uYW5vc2xlZXBfcmVzdGFydDsKLQlyZXN0YXJ0LT5uYW5vc2xlZXAuaW5kZXggPSB0LnRpbWVyLmJhc2UtPmluZGV4OworCXJlc3RhcnQtPm5hbm9zbGVlcC5jbG9ja2lkID0gdC50aW1lci5iYXNlLT5jbG9ja2lkOwogCXJlc3RhcnQtPm5hbm9zbGVlcC5ybXRwID0gcm10cDsKIAlyZXN0YXJ0LT5uYW5vc2xlZXAuZXhwaXJlcyA9IGhydGltZXJfZ2V0X2V4cGlyZXNfdHY2NCgmdC50aW1lcik7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUuYyBiL2tlcm5lbC9tb2R1bGUuYwppbmRleCAyMjg3OTcyLi43OTViZGM3IDEwMDY0NAotLS0gYS9rZXJuZWwvbW9kdWxlLmMKKysrIGIva2VybmVsL21vZHVsZS5jCkBAIC0yODEyLDcgKzI4MTIsNyBAQAogCX0KIAogCS8qIFRoaXMgaGFzIHRvIGJlIGRvbmUgb25jZSB3ZSdyZSBzdXJlIG1vZHVsZSBuYW1lIGlzIHVuaXF1ZS4gKi8KLQlpZiAoIW1vZC0+dGFpbnRzKQorCWlmICghbW9kLT50YWludHMgfHwgbW9kLT50YWludHMgPT0gKDFVPDxUQUlOVF9DUkFQKSkKIAkJZHluYW1pY19kZWJ1Z19zZXR1cChpbmZvLmRlYnVnLCBpbmZvLm51bV9kZWJ1Zyk7CiAKIAkvKiBGaW5kIGR1cGxpY2F0ZSBzeW1ib2xzICovCkBAIC0yODQ5LDcgKzI4NDksNyBAQAogCW1vZHVsZV9idWdfY2xlYW51cChtb2QpOwogCiAgZGRlYnVnOgotCWlmICghbW9kLT50YWludHMpCisJaWYgKCFtb2QtPnRhaW50cyB8fCBtb2QtPnRhaW50cyA9PSAoMVU8PFRBSU5UX0NSQVApKQogCQlkeW5hbWljX2RlYnVnX3JlbW92ZShpbmZvLmRlYnVnKTsKICB1bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZtb2R1bGVfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3BtX3Fvc19wYXJhbXMuYyBiL2tlcm5lbC9wbV9xb3NfcGFyYW1zLmMKaW5kZXggMGRhMDU4Yi4uYmViMTg0NiAxMDA2NDQKLS0tIGEva2VybmVsL3BtX3Fvc19wYXJhbXMuYworKysgYi9rZXJuZWwvcG1fcW9zX3BhcmFtcy5jCkBAIC0zODUsNyArMzg1LDcgQEAKIAlzMzIgdmFsdWU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcG1fcW9zX29iamVjdCAqbzsKLQlzdHJ1Y3QgcG1fcW9zX3JlcXVlc3RfbGlzdCAqcG1fcW9zX3JlcSA9IGZpbHAtPnByaXZhdGVfZGF0YTs7CisJc3RydWN0IHBtX3Fvc19yZXF1ZXN0X2xpc3QgKnBtX3Fvc19yZXEgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAoIXBtX3Fvc19yZXEpCiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYyBiL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMKaW5kZXggMDc5MWIxMy4uNThmNDA1YiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYworKysgYi9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jCkBAIC0xNTE0LDcgKzE1MTQsNyBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKIAkJcmVzdGFydF9ibG9jay0+Zm4gPSBwb3NpeF9jcHVfbnNsZWVwX3Jlc3RhcnQ7Ci0JCXJlc3RhcnRfYmxvY2stPm5hbm9zbGVlcC5pbmRleCA9IHdoaWNoX2Nsb2NrOworCQlyZXN0YXJ0X2Jsb2NrLT5uYW5vc2xlZXAuY2xvY2tpZCA9IHdoaWNoX2Nsb2NrOwogCQlyZXN0YXJ0X2Jsb2NrLT5uYW5vc2xlZXAucm10cCA9IHJtdHA7CiAJCXJlc3RhcnRfYmxvY2stPm5hbm9zbGVlcC5leHBpcmVzID0gdGltZXNwZWNfdG9fbnMocnF0cCk7CiAJfQpAQCAtMTUyMyw3ICsxNTIzLDcgQEAKIAogc3RhdGljIGxvbmcgcG9zaXhfY3B1X25zbGVlcF9yZXN0YXJ0KHN0cnVjdCByZXN0YXJ0X2Jsb2NrICpyZXN0YXJ0X2Jsb2NrKQogewotCWNsb2NraWRfdCB3aGljaF9jbG9jayA9IHJlc3RhcnRfYmxvY2stPm5hbm9zbGVlcC5pbmRleDsKKwljbG9ja2lkX3Qgd2hpY2hfY2xvY2sgPSByZXN0YXJ0X2Jsb2NrLT5uYW5vc2xlZXAuY2xvY2tpZDsKIAlzdHJ1Y3QgdGltZXNwZWMgdDsKIAlzdHJ1Y3QgaXRpbWVyc3BlYyBpdDsKIAlpbnQgZXJyb3I7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG9zaXgtdGltZXJzLmMgYi9rZXJuZWwvcG9zaXgtdGltZXJzLmMKaW5kZXggZTU0OThkNy4uYTFiNWVkZiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvc2l4LXRpbWVycy5jCisrKyBiL2tlcm5lbC9wb3NpeC10aW1lcnMuYwpAQCAtMTA1Niw3ICsxMDU2LDcgQEAKICAqLwogbG9uZyBjbG9ja19uYW5vc2xlZXBfcmVzdGFydChzdHJ1Y3QgcmVzdGFydF9ibG9jayAqcmVzdGFydF9ibG9jaykKIHsKLQljbG9ja2lkX3Qgd2hpY2hfY2xvY2sgPSByZXN0YXJ0X2Jsb2NrLT5uYW5vc2xlZXAuaW5kZXg7CisJY2xvY2tpZF90IHdoaWNoX2Nsb2NrID0gcmVzdGFydF9ibG9jay0+bmFub3NsZWVwLmNsb2NraWQ7CiAJc3RydWN0IGtfY2xvY2sgKmtjID0gY2xvY2tpZF90b19rY2xvY2sod2hpY2hfY2xvY2spOwogCiAJaWYgKFdBUk5fT05fT05DRSgha2MgfHwgIWtjLT5uc2xlZXBfcmVzdGFydCkpCmRpZmYgLS1naXQgYS9rZXJuZWwvcHRyYWNlLmMgYi9rZXJuZWwvcHRyYWNlLmMKaW5kZXggZGM3YWI2NS4uN2E4MWZjMCAxMDA2NDQKLS0tIGEva2VybmVsL3B0cmFjZS5jCisrKyBiL2tlcm5lbC9wdHJhY2UuYwpAQCAtMzgsMzUgKzM4LDMzIEBACiAJY2hpbGQtPnBhcmVudCA9IG5ld19wYXJlbnQ7CiB9CiAKLS8qCi0gKiBUdXJuIGEgdHJhY2luZyBzdG9wIGludG8gYSBub3JtYWwgc3RvcCBub3csIHNpbmNlIHdpdGggbm8gdHJhY2VyIHRoZXJlCi0gKiB3b3VsZCBiZSBubyB3YXkgdG8gd2FrZSBpdCB1cCB3aXRoIFNJR0NPTlQgb3IgU0lHS0lMTC4gIElmIHRoZXJlIHdhcyBhCi0gKiBzaWduYWwgc2VudCB0aGF0IHdvdWxkIHJlc3VtZSB0aGUgY2hpbGQsIGJ1dCBkaWRuJ3QgYmVjYXVzZSBpdCB3YXMgaW4KLSAqIFRBU0tfVFJBQ0VELCByZXN1bWUgaXQgbm93LgotICogUmVxdWlyZXMgdGhhdCBpcnFzIGJlIGRpc2FibGVkLgotICovCi1zdGF0aWMgdm9pZCBwdHJhY2VfdW50cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQotewotCXNwaW5fbG9jaygmY2hpbGQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCWlmICh0YXNrX2lzX3RyYWNlZChjaGlsZCkpIHsKLQkJLyoKLQkJICogSWYgdGhlIGdyb3VwIHN0b3AgaXMgY29tcGxldGVkIG9yIGluIHByb2dyZXNzLAotCQkgKiB0aGlzIHRocmVhZCB3YXMgYWxyZWFkeSBjb3VudGVkIGFzIHN0b3BwZWQuCi0JCSAqLwotCQlpZiAoY2hpbGQtPnNpZ25hbC0+ZmxhZ3MgJiBTSUdOQUxfU1RPUF9TVE9QUEVEIHx8Ci0JCSAgICBjaGlsZC0+c2lnbmFsLT5ncm91cF9zdG9wX2NvdW50KQotCQkJX19zZXRfdGFza19zdGF0ZShjaGlsZCwgVEFTS19TVE9QUEVEKTsKLQkJZWxzZQotCQkJc2lnbmFsX3dha2VfdXAoY2hpbGQsIDEpOwotCX0KLQlzcGluX3VubG9jaygmY2hpbGQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotfQotCi0vKgotICogdW5wdHJhY2UgYSB0YXNrOiBtb3ZlIGl0IGJhY2sgdG8gaXRzIG9yaWdpbmFsIHBhcmVudCBhbmQKLSAqIHJlbW92ZSBpdCBmcm9tIHRoZSBwdHJhY2UgbGlzdC4KKy8qKgorICogX19wdHJhY2VfdW5saW5rIC0gdW5saW5rIHB0cmFjZWUgYW5kIHJlc3RvcmUgaXRzIGV4ZWN1dGlvbiBzdGF0ZQorICogQGNoaWxkOiBwdHJhY2VlIHRvIGJlIHVubGlua2VkCiAgKgotICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgdGFza2xpc3QgbG9jayB3cml0ZS1oZWxkLgorICogUmVtb3ZlIEBjaGlsZCBmcm9tIHRoZSBwdHJhY2UgbGlzdCwgbW92ZSBpdCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBwYXJlbnQsCisgKiBhbmQgcmVzdG9yZSB0aGUgZXhlY3V0aW9uIHN0YXRlIHNvIHRoYXQgaXQgY29uZm9ybXMgdG8gdGhlIGdyb3VwIHN0b3AKKyAqIHN0YXRlLgorICoKKyAqIFVubGlua2luZyBjYW4gaGFwcGVuIHZpYSB0d28gcGF0aHMgLSBleHBsaWNpdCBQVFJBQ0VfREVUQUNIIG9yIHB0cmFjZXIKKyAqIGV4aXRpbmcuICBGb3IgUFRSQUNFX0RFVEFDSCwgdW5sZXNzIHRoZSBwdHJhY2VlIGhhcyBiZWVuIGtpbGxlZCBiZXR3ZWVuCisgKiBwdHJhY2VfY2hlY2tfYXR0YWNoKCkgYW5kIGhlcmUsIGl0J3MgZ3VhcmFudGVlZCB0byBiZSBpbiBUQVNLX1RSQUNFRC4KKyAqIElmIHRoZSBwdHJhY2VyIGlzIGV4aXRpbmcsIHRoZSBwdHJhY2VlIGNhbiBiZSBpbiBhbnkgc3RhdGUuCisgKgorICogQWZ0ZXIgZGV0YWNoLCB0aGUgcHRyYWNlZSBzaG91bGQgYmUgaW4gYSBzdGF0ZSB3aGljaCBjb25mb3JtcyB0byB0aGUKKyAqIGdyb3VwIHN0b3AuICBJZiB0aGUgZ3JvdXAgaXMgc3RvcHBlZCBvciBpbiB0aGUgcHJvY2VzcyBvZiBzdG9wcGluZywgdGhlCisgKiBwdHJhY2VlIHNob3VsZCBiZSBwdXQgaW50byBUQVNLX1NUT1BQRUQ7IG90aGVyd2lzZSwgaXQgc2hvdWxkIGJlIHdva2VuCisgKiB1cCBmcm9tIFRBU0tfVFJBQ0VELgorICoKKyAqIElmIHRoZSBwdHJhY2VlIGlzIGluIFRBU0tfVFJBQ0VEIGFuZCBuZWVkcyB0byBiZSBtb3ZlZCB0byBUQVNLX1NUT1BQRUQsCisgKiBpdCBnb2VzIHRocm91Z2ggVFJBQ0VEIC0+IFJVTk5JTkcgLT4gU1RPUFBFRCB0cmFuc2l0aW9uIHdoaWNoIGlzIHNpbWlsYXIKKyAqIHRvIGJ1dCBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIG9mIHdoYXQgaGFwcGVucyB3aGlsZSBhdHRhY2hpbmcgdG8gYQorICogc3RvcHBlZCB0YXNrLiAgSG93ZXZlciwgaW4gdGhpcyBkaXJlY3Rpb24sIHRoZSBpbnRlcm1lZGlhdGUgUlVOTklORworICogc3RhdGUgaXMgbm90IGhpZGRlbiBldmVuIGZyb20gdGhlIGN1cnJlbnQgcHRyYWNlciBhbmQgaWYgaXQgaW1tZWRpYXRlbHkKKyAqIHJlLWF0dGFjaGVzIGFuZCBwZXJmb3JtcyBhIFdOT0hBTkcgd2FpdCgyKSwgaXQgbWF5IGZhaWwuCisgKgorICogQ09OVEVYVDoKKyAqIHdyaXRlX2xvY2tfaXJxKHRhc2tsaXN0X2xvY2spCiAgKi8KIHZvaWQgX19wdHJhY2VfdW5saW5rKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCiB7CkBAIC03Niw4ICs3NCwyNyBAQAogCWNoaWxkLT5wYXJlbnQgPSBjaGlsZC0+cmVhbF9wYXJlbnQ7CiAJbGlzdF9kZWxfaW5pdCgmY2hpbGQtPnB0cmFjZV9lbnRyeSk7CiAKLQlpZiAodGFza19pc190cmFjZWQoY2hpbGQpKQotCQlwdHJhY2VfdW50cmFjZShjaGlsZCk7CisJc3Bpbl9sb2NrKCZjaGlsZC0+c2lnaGFuZC0+c2lnbG9jayk7CisKKwkvKgorCSAqIFJlaW5zdGF0ZSBHUk9VUF9TVE9QX1BFTkRJTkcgaWYgZ3JvdXAgc3RvcCBpcyBpbiBlZmZlY3QgYW5kCisJICogQGNoaWxkIGlzbid0IGRlYWQuCisJICovCisJaWYgKCEoY2hpbGQtPmZsYWdzICYgUEZfRVhJVElORykgJiYKKwkgICAgKGNoaWxkLT5zaWduYWwtPmZsYWdzICYgU0lHTkFMX1NUT1BfU1RPUFBFRCB8fAorCSAgICAgY2hpbGQtPnNpZ25hbC0+Z3JvdXBfc3RvcF9jb3VudCkpCisJCWNoaWxkLT5ncm91cF9zdG9wIHw9IEdST1VQX1NUT1BfUEVORElORzsKKworCS8qCisJICogSWYgdHJhbnNpdGlvbiB0byBUQVNLX1NUT1BQRUQgaXMgcGVuZGluZyBvciBpbiBUQVNLX1RSQUNFRCwga2ljaworCSAqIEBjaGlsZCBpbiB0aGUgYnV0dC4gIE5vdGUgdGhhdCBAcmVzdW1lIHNob3VsZCBiZSB1c2VkIGlmZiBAY2hpbGQKKwkgKiBpcyBpbiBUQVNLX1RSQUNFRDsgb3RoZXJ3aXNlLCB3ZSBtaWdodCB1bmR1bHkgZGlzcnVwdAorCSAqIFRBU0tfS0lMTEFCTEUgc2xlZXBzLgorCSAqLworCWlmIChjaGlsZC0+Z3JvdXBfc3RvcCAmIEdST1VQX1NUT1BfUEVORElORyB8fCB0YXNrX2lzX3RyYWNlZChjaGlsZCkpCisJCXNpZ25hbF93YWtlX3VwKGNoaWxkLCB0YXNrX2lzX3RyYWNlZChjaGlsZCkpOworCisJc3Bpbl91bmxvY2soJmNoaWxkLT5zaWdoYW5kLT5zaWdsb2NrKTsKIH0KIAogLyoKQEAgLTk2LDE2ICsxMTMsMTQgQEAKIAkgKi8KIAlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwogCWlmICgoY2hpbGQtPnB0cmFjZSAmIFBUX1BUUkFDRUQpICYmIGNoaWxkLT5wYXJlbnQgPT0gY3VycmVudCkgewotCQlyZXQgPSAwOwogCQkvKgogCQkgKiBjaGlsZC0+c2lnaGFuZCBjYW4ndCBiZSBOVUxMLCByZWxlYXNlX3Rhc2soKQogCQkgKiBkb2VzIHB0cmFjZV91bmxpbmsoKSBiZWZvcmUgX19leGl0X3NpZ25hbCgpLgogCQkgKi8KIAkJc3Bpbl9sb2NrX2lycSgmY2hpbGQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCQlpZiAodGFza19pc19zdG9wcGVkKGNoaWxkKSkKLQkJCWNoaWxkLT5zdGF0ZSA9IFRBU0tfVFJBQ0VEOwotCQllbHNlIGlmICghdGFza19pc190cmFjZWQoY2hpbGQpICYmICFraWxsKQotCQkJcmV0ID0gLUVTUkNIOworCQlXQVJOX09OX09OQ0UodGFza19pc19zdG9wcGVkKGNoaWxkKSk7CisJCWlmICh0YXNrX2lzX3RyYWNlZChjaGlsZCkgfHwga2lsbCkKKwkJCXJldCA9IDA7CiAJCXNwaW5fdW5sb2NrX2lycSgmY2hpbGQtPnNpZ2hhbmQtPnNpZ2xvY2spOwogCX0KIAlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CkBAIC0xNjksNiArMTg0LDcgQEAKIAogc3RhdGljIGludCBwdHJhY2VfYXR0YWNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKKwlib29sIHdhaXRfdHJhcCA9IGZhbHNlOwogCWludCByZXR2YWw7CiAKIAlhdWRpdF9wdHJhY2UodGFzayk7CkBAIC0yMDgsMTIgKzIyNCw0MiBAQAogCV9fcHRyYWNlX2xpbmsodGFzaywgY3VycmVudCk7CiAJc2VuZF9zaWdfaW5mbyhTSUdTVE9QLCBTRU5EX1NJR19GT1JDRUQsIHRhc2spOwogCisJc3Bpbl9sb2NrKCZ0YXNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKKworCS8qCisJICogSWYgdGhlIHRhc2sgaXMgYWxyZWFkeSBTVE9QUEVELCBzZXQgR1JPVVBfU1RPUF9QRU5ESU5HIGFuZAorCSAqIFRSQVBQSU5HLCBhbmQga2ljayBpdCBzbyB0aGF0IGl0IHRyYW5zaXRzIHRvIFRSQUNFRC4gIFRSQVBQSU5HCisJICogd2lsbCBiZSBjbGVhcmVkIGlmIHRoZSBjaGlsZCBjb21wbGV0ZXMgdGhlIHRyYW5zaXRpb24gb3IgYW55CisJICogZXZlbnQgd2hpY2ggY2xlYXJzIHRoZSBncm91cCBzdG9wIHN0YXRlcyBoYXBwZW5zLiAgV2UnbGwgd2FpdAorCSAqIGZvciB0aGUgdHJhbnNpdGlvbiB0byBjb21wbGV0ZSBiZWZvcmUgcmV0dXJuaW5nIGZyb20gdGhpcworCSAqIGZ1bmN0aW9uLgorCSAqCisJICogVGhpcyBoaWRlcyBTVE9QUEVEIC0+IFJVTk5JTkcgLT4gVFJBQ0VEIHRyYW5zaXRpb24gZnJvbSB0aGUKKwkgKiBhdHRhY2hpbmcgdGhyZWFkIGJ1dCBhIGRpZmZlcmVudCB0aHJlYWQgaW4gdGhlIHNhbWUgZ3JvdXAgY2FuCisJICogc3RpbGwgb2JzZXJ2ZSB0aGUgdHJhbnNpZW50IFJVTk5JTkcgc3RhdGUuICBJT1csIGlmIGFub3RoZXIKKwkgKiB0aHJlYWQncyBXTk9IQU5HIHdhaXQoMikgb24gdGhlIHN0b3BwZWQgdHJhY2VlIHJhY2VzIGFnYWluc3QKKwkgKiBBVFRBQ0gsIHRoZSB3YWl0KDIpIG1heSBmYWlsIGR1ZSB0byB0aGUgdHJhbnNpZW50IFJVTk5JTkcuCisJICoKKwkgKiBUaGUgZm9sbG93aW5nIHRhc2tfaXNfc3RvcHBlZCgpIHRlc3QgaXMgc2FmZSBhcyBib3RoIHRyYW5zaXRpb25zCisJICogaW4gYW5kIG91dCBvZiBTVE9QUEVEIGFyZSBwcm90ZWN0ZWQgYnkgc2lnbG9jay4KKwkgKi8KKwlpZiAodGFza19pc19zdG9wcGVkKHRhc2spKSB7CisJCXRhc2stPmdyb3VwX3N0b3AgfD0gR1JPVVBfU1RPUF9QRU5ESU5HIHwgR1JPVVBfU1RPUF9UUkFQUElORzsKKwkJc2lnbmFsX3dha2VfdXAodGFzaywgMSk7CisJCXdhaXRfdHJhcCA9IHRydWU7CisJfQorCisJc3Bpbl91bmxvY2soJnRhc2stPnNpZ2hhbmQtPnNpZ2xvY2spOworCiAJcmV0dmFsID0gMDsKIHVubG9ja190YXNrbGlzdDoKIAl3cml0ZV91bmxvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKIHVubG9ja19jcmVkczoKIAltdXRleF91bmxvY2soJnRhc2stPnNpZ25hbC0+Y3JlZF9ndWFyZF9tdXRleCk7CiBvdXQ6CisJaWYgKHdhaXRfdHJhcCkKKwkJd2FpdF9ldmVudChjdXJyZW50LT5zaWduYWwtPndhaXRfY2hsZGV4aXQsCisJCQkgICAhKHRhc2stPmdyb3VwX3N0b3AgJiBHUk9VUF9TVE9QX1RSQVBQSU5HKSk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMzE2LDggKzM2Miw2IEBACiAJaWYgKGNoaWxkLT5wdHJhY2UpIHsKIAkJY2hpbGQtPmV4aXRfY29kZSA9IGRhdGE7CiAJCWRlYWQgPSBfX3B0cmFjZV9kZXRhY2goY3VycmVudCwgY2hpbGQpOwotCQlpZiAoIWNoaWxkLT5leGl0X3N0YXRlKQotCQkJd2FrZV91cF9zdGF0ZShjaGlsZCwgVEFTS19UUkFDRUQgfCBUQVNLX1NUT1BQRUQpOwogCX0KIAl3cml0ZV91bmxvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRpbnkuYyBiL2tlcm5lbC9yY3V0aW55LmMKaW5kZXggNDIxYWJmZC4uN2JiYWM3ZCAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRpbnkuYworKysgYi9rZXJuZWwvcmN1dGlueS5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAvKiBDb250cm9scyBmb3IgcmN1X2t0aHJlYWQoKSBrdGhyZWFkLCByZXBsYWNpbmcgUkNVX1NPRlRJUlEgdXNlZCBwcmV2aW91c2x5LiAqLwogc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqcmN1X2t0aHJlYWRfdGFzazsKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0cmVlLmMgYi9rZXJuZWwvcmN1dHJlZS5jCmluZGV4IGU0ODZmN2MuLmYwN2QyZjAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0cmVlLmMKKysrIGIva2VybmVsL3JjdXRyZWUuYwpAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAjaW5jbHVkZSAicmN1dHJlZS5oIgogCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IGM2MmFjZjQuLjJkMTI4OTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC5jCisrKyBiL2tlcm5lbC9zY2hlZC5jCkBAIC0yOTMsNyArMjkzLDcgQEAKICAqICBsaW1pdGF0aW9uIGZyb20gdGhpcy4pCiAgKi8KICNkZWZpbmUgTUlOX1NIQVJFUwkyCi0jZGVmaW5lIE1BWF9TSEFSRVMJKDFVTCA8PCAxOCkKKyNkZWZpbmUgTUFYX1NIQVJFUwkoMVVMIDw8ICgxOCArIFNDSEVEX0xPQURfUkVTT0xVVElPTikpCiAKIHN0YXRpYyBpbnQgcm9vdF90YXNrX2dyb3VwX2xvYWQgPSBST09UX1RBU0tfR1JPVVBfTE9BRDsKICNlbmRpZgpAQCAtMTMzMCwxMyArMTMzMCwyNSBAQAogewogCXU2NCB0bXA7CiAKLQl0bXAgPSAodTY0KWRlbHRhX2V4ZWMgKiB3ZWlnaHQ7CisJLyoKKwkgKiB3ZWlnaHQgY2FuIGJlIGxlc3MgdGhhbiAyXlNDSEVEX0xPQURfUkVTT0xVVElPTiBmb3IgdGFzayBncm91cCBzY2hlZAorCSAqIGVudGl0aWVzIHNpbmNlIE1JTl9TSEFSRVMgPSAyLiBUcmVhdCB3ZWlnaHQgYXMgMSBpZiBsZXNzIHRoYW4KKwkgKiAyXlNDSEVEX0xPQURfUkVTT0xVVElPTi4KKwkgKi8KKwlpZiAobGlrZWx5KHdlaWdodCA+ICgxVUwgPDwgU0NIRURfTE9BRF9SRVNPTFVUSU9OKSkpCisJCXRtcCA9ICh1NjQpZGVsdGFfZXhlYyAqIHNjYWxlX2xvYWRfZG93bih3ZWlnaHQpOworCWVsc2UKKwkJdG1wID0gKHU2NClkZWx0YV9leGVjOwogCiAJaWYgKCFsdy0+aW52X3dlaWdodCkgewotCQlpZiAoQklUU19QRVJfTE9ORyA+IDMyICYmIHVubGlrZWx5KGx3LT53ZWlnaHQgPj0gV01VTFRfQ09OU1QpKQorCQl1bnNpZ25lZCBsb25nIHcgPSBzY2FsZV9sb2FkX2Rvd24obHctPndlaWdodCk7CisKKwkJaWYgKEJJVFNfUEVSX0xPTkcgPiAzMiAmJiB1bmxpa2VseSh3ID49IFdNVUxUX0NPTlNUKSkKIAkJCWx3LT5pbnZfd2VpZ2h0ID0gMTsKKwkJZWxzZSBpZiAodW5saWtlbHkoIXcpKQorCQkJbHctPmludl93ZWlnaHQgPSBXTVVMVF9DT05TVDsKIAkJZWxzZQotCQkJbHctPmludl93ZWlnaHQgPSBXTVVMVF9DT05TVCAvIGx3LT53ZWlnaHQ7CisJCQlsdy0+aW52X3dlaWdodCA9IFdNVUxUX0NPTlNUIC8gdzsKIAl9CiAKIAkvKgpAQCAtMTc3OCwxNyArMTc5MCwyMCBAQAogCiBzdGF0aWMgdm9pZCBzZXRfbG9hZF93ZWlnaHQoc3RydWN0IHRhc2tfc3RydWN0ICpwKQogeworCWludCBwcmlvID0gcC0+c3RhdGljX3ByaW8gLSBNQVhfUlRfUFJJTzsKKwlzdHJ1Y3QgbG9hZF93ZWlnaHQgKmxvYWQgPSAmcC0+c2UubG9hZDsKKwogCS8qCiAJICogU0NIRURfSURMRSB0YXNrcyBnZXQgbWluaW1hbCB3ZWlnaHQ6CiAJICovCiAJaWYgKHAtPnBvbGljeSA9PSBTQ0hFRF9JRExFKSB7Ci0JCXAtPnNlLmxvYWQud2VpZ2h0ID0gV0VJR0hUX0lETEVQUklPOwotCQlwLT5zZS5sb2FkLmludl93ZWlnaHQgPSBXTVVMVF9JRExFUFJJTzsKKwkJbG9hZC0+d2VpZ2h0ID0gc2NhbGVfbG9hZChXRUlHSFRfSURMRVBSSU8pOworCQlsb2FkLT5pbnZfd2VpZ2h0ID0gV01VTFRfSURMRVBSSU87CiAJCXJldHVybjsKIAl9CiAKLQlwLT5zZS5sb2FkLndlaWdodCA9IHByaW9fdG9fd2VpZ2h0W3AtPnN0YXRpY19wcmlvIC0gTUFYX1JUX1BSSU9dOwotCXAtPnNlLmxvYWQuaW52X3dlaWdodCA9IHByaW9fdG9fd211bHRbcC0+c3RhdGljX3ByaW8gLSBNQVhfUlRfUFJJT107CisJbG9hZC0+d2VpZ2h0ID0gc2NhbGVfbG9hZChwcmlvX3RvX3dlaWdodFtwcmlvXSk7CisJbG9hZC0+aW52X3dlaWdodCA9IHByaW9fdG9fd211bHRbcHJpb107CiB9CiAKIHN0YXRpYyB2b2lkIGVucXVldWVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBmbGFncykKQEAgLTI1NjQsNyArMjU3OSw3IEBACiB7CiAJc3RydWN0IHJxICpycSA9IGNwdV9ycShjcHUpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfU01QKSAmJiBkZWZpbmVkKENPTkZJR19TQ0hFRF9UVFdVX1FVRVVFKQorI2lmIGRlZmluZWQoQ09ORklHX1NNUCkKIAlpZiAoc2NoZWRfZmVhdChUVFdVX1FVRVVFKSAmJiBjcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKSB7CiAJCXR0d3VfcXVldWVfcmVtb3RlKHAsIGNwdSk7CiAJCXJldHVybjsKQEAgLTY1MjcsNyArNjU0Miw3IEBACiAJCWNwdWxpc3Rfc2NucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksIHNjaGVkX2dyb3VwX2NwdXMoZ3JvdXApKTsKIAogCQlwcmludGsoS0VSTl9DT05UICIgJXMiLCBzdHIpOwotCQlpZiAoZ3JvdXAtPmNwdV9wb3dlciAhPSBTQ0hFRF9MT0FEX1NDQUxFKSB7CisJCWlmIChncm91cC0+Y3B1X3Bvd2VyICE9IFNDSEVEX1BPV0VSX1NDQUxFKSB7CiAJCQlwcmludGsoS0VSTl9DT05UICIgKGNwdV9wb3dlciA9ICVkKSIsCiAJCQkJZ3JvdXAtPmNwdV9wb3dlcik7CiAJCX0KQEAgLTc5MDIsNyArNzkxNyw3IEBACiAjaWZkZWYgQ09ORklHX1NNUAogCQlycS0+c2QgPSBOVUxMOwogCQlycS0+cmQgPSBOVUxMOwotCQlycS0+Y3B1X3Bvd2VyID0gU0NIRURfTE9BRF9TQ0FMRTsKKwkJcnEtPmNwdV9wb3dlciA9IFNDSEVEX1BPV0VSX1NDQUxFOwogCQlycS0+cG9zdF9zY2hlZHVsZSA9IDA7CiAJCXJxLT5hY3RpdmVfYmFsYW5jZSA9IDA7CiAJCXJxLT5uZXh0X2JhbGFuY2UgPSBqaWZmaWVzOwpAQCAtODgwNiwxNCArODgyMSwxNCBAQAogc3RhdGljIGludCBjcHVfc2hhcmVzX3dyaXRlX3U2NChzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3QgY2Z0eXBlICpjZnR5cGUsCiAJCQkJdTY0IHNoYXJldmFsKQogewotCXJldHVybiBzY2hlZF9ncm91cF9zZXRfc2hhcmVzKGNncm91cF90ZyhjZ3JwKSwgc2hhcmV2YWwpOworCXJldHVybiBzY2hlZF9ncm91cF9zZXRfc2hhcmVzKGNncm91cF90ZyhjZ3JwKSwgc2NhbGVfbG9hZChzaGFyZXZhbCkpOwogfQogCiBzdGF0aWMgdTY0IGNwdV9zaGFyZXNfcmVhZF91NjQoc3RydWN0IGNncm91cCAqY2dycCwgc3RydWN0IGNmdHlwZSAqY2Z0KQogewogCXN0cnVjdCB0YXNrX2dyb3VwICp0ZyA9IGNncm91cF90ZyhjZ3JwKTsKIAotCXJldHVybiAodTY0KSB0Zy0+c2hhcmVzOworCXJldHVybiAodTY0KSBzY2FsZV9sb2FkX2Rvd24odGctPnNoYXJlcyk7CiB9CiAjZW5kaWYgLyogQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgKi8KIApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2ZhaXIuYyBiL2tlcm5lbC9zY2hlZF9mYWlyLmMKaW5kZXggMzdmMjI2Mi4uZTMyYTliNyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2ZhaXIuYworKysgYi9rZXJuZWwvc2NoZWRfZmFpci5jCkBAIC0xNTg0LDcgKzE1ODQsNyBAQAogCQl9CiAKIAkJLyogQWRqdXN0IGJ5IHJlbGF0aXZlIENQVSBwb3dlciBvZiB0aGUgZ3JvdXAgKi8KLQkJYXZnX2xvYWQgPSAoYXZnX2xvYWQgKiBTQ0hFRF9MT0FEX1NDQUxFKSAvIGdyb3VwLT5jcHVfcG93ZXI7CisJCWF2Z19sb2FkID0gKGF2Z19sb2FkICogU0NIRURfUE9XRVJfU0NBTEUpIC8gZ3JvdXAtPmNwdV9wb3dlcjsKIAogCQlpZiAobG9jYWxfZ3JvdXApIHsKIAkJCXRoaXNfbG9hZCA9IGF2Z19sb2FkOwpAQCAtMTcyMiw3ICsxNzIyLDcgQEAKIAkJCQlucl9ydW5uaW5nICs9IGNwdV9ycShpKS0+Y2ZzLm5yX3J1bm5pbmc7CiAJCQl9CiAKLQkJCWNhcGFjaXR5ID0gRElWX1JPVU5EX0NMT1NFU1QocG93ZXIsIFNDSEVEX0xPQURfU0NBTEUpOworCQkJY2FwYWNpdHkgPSBESVZfUk9VTkRfQ0xPU0VTVChwb3dlciwgU0NIRURfUE9XRVJfU0NBTEUpOwogCiAJCQlpZiAodG1wLT5mbGFncyAmIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFKQogCQkJCW5yX3J1bm5pbmcgLz0gMjsKQEAgLTI1NzAsNyArMjU3MCw3IEBACiAKIHVuc2lnbmVkIGxvbmcgZGVmYXVsdF9zY2FsZV9mcmVxX3Bvd2VyKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgY3B1KQogewotCXJldHVybiBTQ0hFRF9MT0FEX1NDQUxFOworCXJldHVybiBTQ0hFRF9QT1dFUl9TQ0FMRTsKIH0KIAogdW5zaWduZWQgbG9uZyBfX3dlYWsgYXJjaF9zY2FsZV9mcmVxX3Bvd2VyKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgY3B1KQpAQCAtMjYwNywxMCArMjYwNywxMCBAQAogCQlhdmFpbGFibGUgPSB0b3RhbCAtIHJxLT5ydF9hdmc7CiAJfQogCi0JaWYgKHVubGlrZWx5KChzNjQpdG90YWwgPCBTQ0hFRF9MT0FEX1NDQUxFKSkKLQkJdG90YWwgPSBTQ0hFRF9MT0FEX1NDQUxFOworCWlmICh1bmxpa2VseSgoczY0KXRvdGFsIDwgU0NIRURfUE9XRVJfU0NBTEUpKQorCQl0b3RhbCA9IFNDSEVEX1BPV0VSX1NDQUxFOwogCi0JdG90YWwgPj49IFNDSEVEX0xPQURfU0hJRlQ7CisJdG90YWwgPj49IFNDSEVEX1BPV0VSX1NISUZUOwogCiAJcmV0dXJuIGRpdl91NjQoYXZhaWxhYmxlLCB0b3RhbCk7CiB9CkBAIC0yNjE4LDcgKzI2MTgsNyBAQAogc3RhdGljIHZvaWQgdXBkYXRlX2NwdV9wb3dlcihzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IGNwdSkKIHsKIAl1bnNpZ25lZCBsb25nIHdlaWdodCA9IHNkLT5zcGFuX3dlaWdodDsKLQl1bnNpZ25lZCBsb25nIHBvd2VyID0gU0NIRURfTE9BRF9TQ0FMRTsKKwl1bnNpZ25lZCBsb25nIHBvd2VyID0gU0NIRURfUE9XRVJfU0NBTEU7CiAJc3RydWN0IHNjaGVkX2dyb3VwICpzZGcgPSBzZC0+Z3JvdXBzOwogCiAJaWYgKChzZC0+ZmxhZ3MgJiBTRF9TSEFSRV9DUFVQT1dFUikgJiYgd2VpZ2h0ID4gMSkgewpAQCAtMjYyNyw3ICsyNjI3LDcgQEAKIAkJZWxzZQogCQkJcG93ZXIgKj0gZGVmYXVsdF9zY2FsZV9zbXRfcG93ZXIoc2QsIGNwdSk7CiAKLQkJcG93ZXIgPj49IFNDSEVEX0xPQURfU0hJRlQ7CisJCXBvd2VyID4+PSBTQ0hFRF9QT1dFUl9TSElGVDsKIAl9CiAKIAlzZGctPmNwdV9wb3dlcl9vcmlnID0gcG93ZXI7CkBAIC0yNjM3LDEwICsyNjM3LDEwIEBACiAJZWxzZQogCQlwb3dlciAqPSBkZWZhdWx0X3NjYWxlX2ZyZXFfcG93ZXIoc2QsIGNwdSk7CiAKLQlwb3dlciA+Pj0gU0NIRURfTE9BRF9TSElGVDsKKwlwb3dlciA+Pj0gU0NIRURfUE9XRVJfU0hJRlQ7CiAKIAlwb3dlciAqPSBzY2FsZV9ydF9wb3dlcihjcHUpOwotCXBvd2VyID4+PSBTQ0hFRF9MT0FEX1NISUZUOworCXBvd2VyID4+PSBTQ0hFRF9QT1dFUl9TSElGVDsKIAogCWlmICghcG93ZXIpCiAJCXBvd2VyID0gMTsKQEAgLTI2ODIsNyArMjY4Miw3IEBACiBmaXhfc21hbGxfY2FwYWNpdHkoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIHN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXApCiB7CiAJLyoKLQkgKiBPbmx5IHNpYmxpbmdzIGNhbiBoYXZlIHNpZ25pZmljYW50bHkgbGVzcyB0aGFuIFNDSEVEX0xPQURfU0NBTEUKKwkgKiBPbmx5IHNpYmxpbmdzIGNhbiBoYXZlIHNpZ25pZmljYW50bHkgbGVzcyB0aGFuIFNDSEVEX1BPV0VSX1NDQUxFCiAJICovCiAJaWYgKCEoc2QtPmZsYWdzICYgU0RfU0hBUkVfQ1BVUE9XRVIpKQogCQlyZXR1cm4gMDsKQEAgLTI3NzAsNyArMjc3MCw3IEBACiAJfQogCiAJLyogQWRqdXN0IGJ5IHJlbGF0aXZlIENQVSBwb3dlciBvZiB0aGUgZ3JvdXAgKi8KLQlzZ3MtPmF2Z19sb2FkID0gKHNncy0+Z3JvdXBfbG9hZCAqIFNDSEVEX0xPQURfU0NBTEUpIC8gZ3JvdXAtPmNwdV9wb3dlcjsKKwlzZ3MtPmF2Z19sb2FkID0gKHNncy0+Z3JvdXBfbG9hZCpTQ0hFRF9QT1dFUl9TQ0FMRSkgLyBncm91cC0+Y3B1X3Bvd2VyOwogCiAJLyoKIAkgKiBDb25zaWRlciB0aGUgZ3JvdXAgdW5iYWxhbmNlZCB3aGVuIHRoZSBpbWJhbGFuY2UgaXMgbGFyZ2VyCkBAIC0yNzg3LDcgKzI3ODcsOCBAQAogCWlmICgobWF4X2NwdV9sb2FkIC0gbWluX2NwdV9sb2FkKSA+PSBhdmdfbG9hZF9wZXJfdGFzayAmJiBtYXhfbnJfcnVubmluZyA+IDEpCiAJCXNncy0+Z3JvdXBfaW1iID0gMTsKIAotCXNncy0+Z3JvdXBfY2FwYWNpdHkgPSBESVZfUk9VTkRfQ0xPU0VTVChncm91cC0+Y3B1X3Bvd2VyLCBTQ0hFRF9MT0FEX1NDQUxFKTsKKwlzZ3MtPmdyb3VwX2NhcGFjaXR5ID0gRElWX1JPVU5EX0NMT1NFU1QoZ3JvdXAtPmNwdV9wb3dlciwKKwkJCQkJCVNDSEVEX1BPV0VSX1NDQUxFKTsKIAlpZiAoIXNncy0+Z3JvdXBfY2FwYWNpdHkpCiAJCXNncy0+Z3JvdXBfY2FwYWNpdHkgPSBmaXhfc21hbGxfY2FwYWNpdHkoc2QsIGdyb3VwKTsKIAlzZ3MtPmdyb3VwX3dlaWdodCA9IGdyb3VwLT5ncm91cF93ZWlnaHQ7CkBAIC0yOTYxLDcgKzI5NjIsNyBAQAogCQlyZXR1cm4gMDsKIAogCSppbWJhbGFuY2UgPSBESVZfUk9VTkRfQ0xPU0VTVChzZHMtPm1heF9sb2FkICogc2RzLT5idXNpZXN0LT5jcHVfcG93ZXIsCi0JCQkJICAgICAgIFNDSEVEX0xPQURfU0NBTEUpOworCQkJCSAgICAgICBTQ0hFRF9QT1dFUl9TQ0FMRSk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTI5OTAsNyArMjk5MSw3IEBACiAJCQljcHVfYXZnX2xvYWRfcGVyX3Rhc2sodGhpc19jcHUpOwogCiAJc2NhbGVkX2J1c3lfbG9hZF9wZXJfdGFzayA9IHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrCi0JCQkJCQkgKiBTQ0hFRF9MT0FEX1NDQUxFOworCQkJCQkgKiBTQ0hFRF9QT1dFUl9TQ0FMRTsKIAlzY2FsZWRfYnVzeV9sb2FkX3Blcl90YXNrIC89IHNkcy0+YnVzaWVzdC0+Y3B1X3Bvd2VyOwogCiAJaWYgKHNkcy0+bWF4X2xvYWQgLSBzZHMtPnRoaXNfbG9hZCArIHNjYWxlZF9idXN5X2xvYWRfcGVyX3Rhc2sgPj0KQEAgLTMwMDksMTAgKzMwMTAsMTAgQEAKIAkJCW1pbihzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzaywgc2RzLT5tYXhfbG9hZCk7CiAJcHdyX25vdyArPSBzZHMtPnRoaXMtPmNwdV9wb3dlciAqCiAJCQltaW4oc2RzLT50aGlzX2xvYWRfcGVyX3Rhc2ssIHNkcy0+dGhpc19sb2FkKTsKLQlwd3Jfbm93IC89IFNDSEVEX0xPQURfU0NBTEU7CisJcHdyX25vdyAvPSBTQ0hFRF9QT1dFUl9TQ0FMRTsKIAogCS8qIEFtb3VudCBvZiBsb2FkIHdlJ2Qgc3VidHJhY3QgKi8KLQl0bXAgPSAoc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgKiBTQ0hFRF9MT0FEX1NDQUxFKSAvCisJdG1wID0gKHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrICogU0NIRURfUE9XRVJfU0NBTEUpIC8KIAkJc2RzLT5idXNpZXN0LT5jcHVfcG93ZXI7CiAJaWYgKHNkcy0+bWF4X2xvYWQgPiB0bXApCiAJCXB3cl9tb3ZlICs9IHNkcy0+YnVzaWVzdC0+Y3B1X3Bvd2VyICoKQEAgLTMwMjAsMTUgKzMwMjEsMTUgQEAKIAogCS8qIEFtb3VudCBvZiBsb2FkIHdlJ2QgYWRkICovCiAJaWYgKHNkcy0+bWF4X2xvYWQgKiBzZHMtPmJ1c2llc3QtPmNwdV9wb3dlciA8Ci0JCXNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrICogU0NIRURfTE9BRF9TQ0FMRSkKKwkJc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgKiBTQ0hFRF9QT1dFUl9TQ0FMRSkKIAkJdG1wID0gKHNkcy0+bWF4X2xvYWQgKiBzZHMtPmJ1c2llc3QtPmNwdV9wb3dlcikgLwogCQkJc2RzLT50aGlzLT5jcHVfcG93ZXI7CiAJZWxzZQotCQl0bXAgPSAoc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgKiBTQ0hFRF9MT0FEX1NDQUxFKSAvCisJCXRtcCA9IChzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayAqIFNDSEVEX1BPV0VSX1NDQUxFKSAvCiAJCQlzZHMtPnRoaXMtPmNwdV9wb3dlcjsKIAlwd3JfbW92ZSArPSBzZHMtPnRoaXMtPmNwdV9wb3dlciAqCiAJCQltaW4oc2RzLT50aGlzX2xvYWRfcGVyX3Rhc2ssIHNkcy0+dGhpc19sb2FkICsgdG1wKTsKLQlwd3JfbW92ZSAvPSBTQ0hFRF9MT0FEX1NDQUxFOworCXB3cl9tb3ZlIC89IFNDSEVEX1BPV0VSX1NDQUxFOwogCiAJLyogTW92ZSBpZiB3ZSBnYWluIHRocm91Z2hwdXQgKi8KIAlpZiAocHdyX21vdmUgPiBwd3Jfbm93KQpAQCAtMzA3MCw3ICszMDcxLDcgQEAKIAkJbG9hZF9hYm92ZV9jYXBhY2l0eSA9IChzZHMtPmJ1c2llc3RfbnJfcnVubmluZyAtCiAJCQkJCQlzZHMtPmJ1c2llc3RfZ3JvdXBfY2FwYWNpdHkpOwogCi0JCWxvYWRfYWJvdmVfY2FwYWNpdHkgKj0gKFNDSEVEX0xPQURfU0NBTEUgKiBTQ0hFRF9MT0FEX1NDQUxFKTsKKwkJbG9hZF9hYm92ZV9jYXBhY2l0eSAqPSAoU0NIRURfTE9BRF9TQ0FMRSAqIFNDSEVEX1BPV0VSX1NDQUxFKTsKIAogCQlsb2FkX2Fib3ZlX2NhcGFjaXR5IC89IHNkcy0+YnVzaWVzdC0+Y3B1X3Bvd2VyOwogCX0KQEAgLTMwOTAsNyArMzA5MSw3IEBACiAJLyogSG93IG11Y2ggbG9hZCB0byBhY3R1YWxseSBtb3ZlIHRvIGVxdWFsaXNlIHRoZSBpbWJhbGFuY2UgKi8KIAkqaW1iYWxhbmNlID0gbWluKG1heF9wdWxsICogc2RzLT5idXNpZXN0LT5jcHVfcG93ZXIsCiAJCShzZHMtPmF2Z19sb2FkIC0gc2RzLT50aGlzX2xvYWQpICogc2RzLT50aGlzLT5jcHVfcG93ZXIpCi0JCQkvIFNDSEVEX0xPQURfU0NBTEU7CisJCQkvIFNDSEVEX1BPV0VSX1NDQUxFOwogCiAJLyoKIAkgKiBpZiAqaW1iYWxhbmNlIGlzIGxlc3MgdGhhbiB0aGUgYXZlcmFnZSBsb2FkIHBlciBydW5uYWJsZSB0YXNrCkBAIC0zMTU5LDcgKzMxNjAsNyBAQAogCWlmICghc2RzLmJ1c2llc3QgfHwgc2RzLmJ1c2llc3RfbnJfcnVubmluZyA9PSAwKQogCQlnb3RvIG91dF9iYWxhbmNlZDsKIAotCXNkcy5hdmdfbG9hZCA9IChTQ0hFRF9MT0FEX1NDQUxFICogc2RzLnRvdGFsX2xvYWQpIC8gc2RzLnRvdGFsX3B3cjsKKwlzZHMuYXZnX2xvYWQgPSAoU0NIRURfUE9XRVJfU0NBTEUgKiBzZHMudG90YWxfbG9hZCkgLyBzZHMudG90YWxfcHdyOwogCiAJLyoKIAkgKiBJZiB0aGUgYnVzaWVzdCBncm91cCBpcyBpbWJhbGFuY2VkIHRoZSBiZWxvdyBjaGVja3MgZG9uJ3QKQEAgLTMyMzgsNyArMzIzOSw4IEBACiAKIAlmb3JfZWFjaF9jcHUoaSwgc2NoZWRfZ3JvdXBfY3B1cyhncm91cCkpIHsKIAkJdW5zaWduZWQgbG9uZyBwb3dlciA9IHBvd2VyX29mKGkpOwotCQl1bnNpZ25lZCBsb25nIGNhcGFjaXR5ID0gRElWX1JPVU5EX0NMT1NFU1QocG93ZXIsIFNDSEVEX0xPQURfU0NBTEUpOworCQl1bnNpZ25lZCBsb25nIGNhcGFjaXR5ID0gRElWX1JPVU5EX0NMT1NFU1QocG93ZXIsCisJCQkJCQkJICAgU0NIRURfUE9XRVJfU0NBTEUpOwogCQl1bnNpZ25lZCBsb25nIHdsOwogCiAJCWlmICghY2FwYWNpdHkpCkBAIC0zMjYzLDcgKzMyNjUsNyBAQAogCQkgKiB0aGUgbG9hZCBjYW4gYmUgbW92ZWQgYXdheSBmcm9tIHRoZSBjcHUgdGhhdCBpcyBwb3RlbnRpYWxseQogCQkgKiBydW5uaW5nIGF0IGEgbG93ZXIgY2FwYWNpdHkuCiAJCSAqLwotCQl3bCA9ICh3bCAqIFNDSEVEX0xPQURfU0NBTEUpIC8gcG93ZXI7CisJCXdsID0gKHdsICogU0NIRURfUE9XRVJfU0NBTEUpIC8gcG93ZXI7CiAKIAkJaWYgKHdsID4gbWF4X2xvYWQpIHsKIAkJCW1heF9sb2FkID0gd2w7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2lnbmFsLmMgYi9rZXJuZWwvc2lnbmFsLmMKaW5kZXggNzE2NWFmNS4uYWQ1ZTgxOCAxMDA2NDQKLS0tIGEva2VybmVsL3NpZ25hbC5jCisrKyBiL2tlcm5lbC9zaWduYWwuYwpAQCAtMTI0LDcgKzEyNCw3IEBACiAKIHN0YXRpYyBpbnQgcmVjYWxjX3NpZ3BlbmRpbmdfdHNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkKIHsKLQlpZiAodC0+c2lnbmFsLT5ncm91cF9zdG9wX2NvdW50ID4gMCB8fAorCWlmICgodC0+Z3JvdXBfc3RvcCAmIEdST1VQX1NUT1BfUEVORElORykgfHwKIAkgICAgUEVORElORygmdC0+cGVuZGluZywgJnQtPmJsb2NrZWQpIHx8CiAJICAgIFBFTkRJTkcoJnQtPnNpZ25hbC0+c2hhcmVkX3BlbmRpbmcsICZ0LT5ibG9ja2VkKSkgewogCQlzZXRfdHNrX3RocmVhZF9mbGFnKHQsIFRJRl9TSUdQRU5ESU5HKTsKQEAgLTIyMyw2ICsyMjMsODMgQEAKIAkJCQljdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsIHNpZyk7CiB9CiAKKy8qKgorICogdGFza19jbGVhcl9ncm91cF9zdG9wX3RyYXBwaW5nIC0gY2xlYXIgZ3JvdXAgc3RvcCB0cmFwcGluZyBiaXQKKyAqIEB0YXNrOiB0YXJnZXQgdGFzaworICoKKyAqIElmIEdST1VQX1NUT1BfVFJBUFBJTkcgaXMgc2V0LCBhIHB0cmFjZXIgaXMgd2FpdGluZyBmb3IgdXMuICBDbGVhciBpdAorICogYW5kIHdha2UgdXAgdGhlIHB0cmFjZXIuICBOb3RlIHRoYXQgd2UgZG9uJ3QgbmVlZCBhbnkgZnVydGhlciBsb2NraW5nLgorICogQHRhc2stPnNpZ2xvY2sgZ3VhcmFudGVlcyB0aGF0IEB0YXNrLT5wYXJlbnQgcG9pbnRzIHRvIHRoZSBwdHJhY2VyLgorICoKKyAqIENPTlRFWFQ6CisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIEB0YXNrLT5zaWdoYW5kLT5zaWdsb2NrIGhlbGQuCisgKi8KK3N0YXRpYyB2b2lkIHRhc2tfY2xlYXJfZ3JvdXBfc3RvcF90cmFwcGluZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJaWYgKHVubGlrZWx5KHRhc2stPmdyb3VwX3N0b3AgJiBHUk9VUF9TVE9QX1RSQVBQSU5HKSkgeworCQl0YXNrLT5ncm91cF9zdG9wICY9IH5HUk9VUF9TVE9QX1RSQVBQSU5HOworCQlfX3dha2VfdXBfc3luY19rZXkoJnRhc2stPnBhcmVudC0+c2lnbmFsLT53YWl0X2NobGRleGl0LAorCQkJCSAgIFRBU0tfVU5JTlRFUlJVUFRJQkxFLCAxLCB0YXNrKTsKKwl9Cit9CisKKy8qKgorICogdGFza19jbGVhcl9ncm91cF9zdG9wX3BlbmRpbmcgLSBjbGVhciBwZW5kaW5nIGdyb3VwIHN0b3AKKyAqIEB0YXNrOiB0YXJnZXQgdGFzaworICoKKyAqIENsZWFyIGdyb3VwIHN0b3Agc3RhdGVzIGZvciBAdGFzay4KKyAqCisgKiBDT05URVhUOgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBAdGFzay0+c2lnaGFuZC0+c2lnbG9jayBoZWxkLgorICovCit2b2lkIHRhc2tfY2xlYXJfZ3JvdXBfc3RvcF9wZW5kaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwl0YXNrLT5ncm91cF9zdG9wICY9IH4oR1JPVVBfU1RPUF9QRU5ESU5HIHwgR1JPVVBfU1RPUF9DT05TVU1FIHwKKwkJCSAgICAgIEdST1VQX1NUT1BfREVRVUVVRUQpOworfQorCisvKioKKyAqIHRhc2tfcGFydGljaXBhdGVfZ3JvdXBfc3RvcCAtIHBhcnRpY2lwYXRlIGluIGEgZ3JvdXAgc3RvcAorICogQHRhc2s6IHRhc2sgcGFydGljaXBhdGluZyBpbiBhIGdyb3VwIHN0b3AKKyAqCisgKiBAdGFzayBoYXMgR1JPVVBfU1RPUF9QRU5ESU5HIHNldCBhbmQgaXMgcGFydGljaXBhdGluZyBpbiBhIGdyb3VwIHN0b3AuCisgKiBHcm91cCBzdG9wIHN0YXRlcyBhcmUgY2xlYXJlZCBhbmQgdGhlIGdyb3VwIHN0b3AgY291bnQgaXMgY29uc3VtZWQgaWYKKyAqICVHUk9VUF9TVE9QX0NPTlNVTUUgd2FzIHNldC4gIElmIHRoZSBjb25zdW1wdGlvbiBjb21wbGV0ZXMgdGhlIGdyb3VwCisgKiBzdG9wLCB0aGUgYXBwcm9wcmlhdGUgJVNJR05BTF8qIGZsYWdzIGFyZSBzZXQuCisgKgorICogQ09OVEVYVDoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggQHRhc2stPnNpZ2hhbmQtPnNpZ2xvY2sgaGVsZC4KKyAqCisgKiBSRVRVUk5TOgorICogJXRydWUgaWYgZ3JvdXAgc3RvcCBjb21wbGV0aW9uIHNob3VsZCBiZSBub3RpZmllZCB0byB0aGUgcGFyZW50LCAlZmFsc2UKKyAqIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wgdGFza19wYXJ0aWNpcGF0ZV9ncm91cF9zdG9wKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnID0gdGFzay0+c2lnbmFsOworCWJvb2wgY29uc3VtZSA9IHRhc2stPmdyb3VwX3N0b3AgJiBHUk9VUF9TVE9QX0NPTlNVTUU7CisKKwlXQVJOX09OX09OQ0UoISh0YXNrLT5ncm91cF9zdG9wICYgR1JPVVBfU1RPUF9QRU5ESU5HKSk7CisKKwl0YXNrX2NsZWFyX2dyb3VwX3N0b3BfcGVuZGluZyh0YXNrKTsKKworCWlmICghY29uc3VtZSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKCFXQVJOX09OX09OQ0Uoc2lnLT5ncm91cF9zdG9wX2NvdW50ID09IDApKQorCQlzaWctPmdyb3VwX3N0b3BfY291bnQtLTsKKworCS8qCisJICogVGVsbCB0aGUgY2FsbGVyIHRvIG5vdGlmeSBjb21wbGV0aW9uIGlmZiB3ZSBhcmUgZW50ZXJpbmcgaW50byBhCisJICogZnJlc2ggZ3JvdXAgc3RvcC4gIFJlYWQgY29tbWVudCBpbiBkb19zaWduYWxfc3RvcCgpIGZvciBkZXRhaWxzLgorCSAqLworCWlmICghc2lnLT5ncm91cF9zdG9wX2NvdW50ICYmICEoc2lnLT5mbGFncyAmIFNJR05BTF9TVE9QX1NUT1BQRUQpKSB7CisJCXNpZy0+ZmxhZ3MgPSBTSUdOQUxfU1RPUF9TVE9QUEVEOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCiAvKgogICogYWxsb2NhdGUgYSBuZXcgc2lnbmFsIHF1ZXVlIHJlY29yZAogICogLSB0aGlzIG1heSBiZSBjYWxsZWQgd2l0aG91dCBsb2NrcyBpZiBhbmQgb25seSBpZiB0ID09IGN1cnJlbnQsIG90aGVyd2lzZSBhbgpAQCAtNTI3LDcgKzYwNCw3IEBACiAJCSAqIGlzIHRvIGFsZXJ0IHN0b3Atc2lnbmFsIHByb2Nlc3NpbmcgY29kZSB3aGVuIGFub3RoZXIKIAkJICogcHJvY2Vzc29yIGhhcyBjb21lIGFsb25nIGFuZCBjbGVhcmVkIHRoZSBmbGFnLgogCQkgKi8KLQkJdHNrLT5zaWduYWwtPmZsYWdzIHw9IFNJR05BTF9TVE9QX0RFUVVFVUVEOworCQljdXJyZW50LT5ncm91cF9zdG9wIHw9IEdST1VQX1NUT1BfREVRVUVVRUQ7CiAJfQogCWlmICgoaW5mby0+c2lfY29kZSAmIF9fU0lfTUFTSykgPT0gX19TSV9USU1FUiAmJiBpbmZvLT5zaV9zeXNfcHJpdmF0ZSkgewogCQkvKgpAQCAtNTkyLDcgKzY2OSw3IEBACiAJaWYgKHNpZ2lzZW1wdHlzZXQoJm0pKQogCQlyZXR1cm4gMDsKIAotCXNpZ25hbmRzZXRzKCZzLT5zaWduYWwsICZzLT5zaWduYWwsIG1hc2spOworCXNpZ2FuZG5zZXRzKCZzLT5zaWduYWwsICZzLT5zaWduYWwsIG1hc2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShxLCBuLCAmcy0+bGlzdCwgbGlzdCkgewogCQlpZiAoc2lnaXNtZW1iZXIobWFzaywgcS0+aW5mby5zaV9zaWdubykpIHsKIAkJCWxpc3RfZGVsX2luaXQoJnEtPmxpc3QpOwpAQCAtNzI3LDM0ICs4MDQsMTQgQEAKIAl9IGVsc2UgaWYgKHNpZyA9PSBTSUdDT05UKSB7CiAJCXVuc2lnbmVkIGludCB3aHk7CiAJCS8qCi0JCSAqIFJlbW92ZSBhbGwgc3RvcCBzaWduYWxzIGZyb20gYWxsIHF1ZXVlcywKLQkJICogYW5kIHdha2UgYWxsIHRocmVhZHMuCisJCSAqIFJlbW92ZSBhbGwgc3RvcCBzaWduYWxzIGZyb20gYWxsIHF1ZXVlcywgd2FrZSBhbGwgdGhyZWFkcy4KIAkJICovCiAJCXJtX2Zyb21fcXVldWUoU0lHX0tFUk5FTF9TVE9QX01BU0ssICZzaWduYWwtPnNoYXJlZF9wZW5kaW5nKTsKIAkJdCA9IHA7CiAJCWRvIHsKLQkJCXVuc2lnbmVkIGludCBzdGF0ZTsKKwkJCXRhc2tfY2xlYXJfZ3JvdXBfc3RvcF9wZW5kaW5nKHQpOwogCQkJcm1fZnJvbV9xdWV1ZShTSUdfS0VSTkVMX1NUT1BfTUFTSywgJnQtPnBlbmRpbmcpOwotCQkJLyoKLQkJCSAqIElmIHRoZXJlIGlzIGEgaGFuZGxlciBmb3IgU0lHQ09OVCwgd2UgbXVzdCBtYWtlCi0JCQkgKiBzdXJlIHRoYXQgbm8gdGhyZWFkIHJldHVybnMgdG8gdXNlciBtb2RlIGJlZm9yZQotCQkJICogd2UgcG9zdCB0aGUgc2lnbmFsLCBpbiBjYXNlIGl0IHdhcyB0aGUgb25seQotCQkJICogdGhyZWFkIGVsaWdpYmxlIHRvIHJ1biB0aGUgc2lnbmFsIGhhbmRsZXItLXRoZW4KLQkJCSAqIGl0IG11c3Qgbm90IGRvIGFueXRoaW5nIGJldHdlZW4gcmVzdW1pbmcgYW5kCi0JCQkgKiBydW5uaW5nIHRoZSBoYW5kbGVyLiAgV2l0aCB0aGUgVElGX1NJR1BFTkRJTkcKLQkJCSAqIGZsYWcgc2V0LCB0aGUgdGhyZWFkIHdpbGwgcGF1c2UgYW5kIGFjcXVpcmUgdGhlCi0JCQkgKiBzaWdsb2NrIHRoYXQgd2UgaG9sZCBub3cgYW5kIHVudGlsIHdlJ3ZlIHF1ZXVlZAotCQkJICogdGhlIHBlbmRpbmcgc2lnbmFsLgotCQkJICoKLQkJCSAqIFdha2UgdXAgdGhlIHN0b3BwZWQgdGhyZWFkIF9hZnRlcl8gc2V0dGluZwotCQkJICogVElGX1NJR1BFTkRJTkcKLQkJCSAqLwotCQkJc3RhdGUgPSBfX1RBU0tfU1RPUFBFRDsKLQkJCWlmIChzaWdfdXNlcl9kZWZpbmVkKHQsIFNJR0NPTlQpICYmICFzaWdpc21lbWJlcigmdC0+YmxvY2tlZCwgU0lHQ09OVCkpIHsKLQkJCQlzZXRfdHNrX3RocmVhZF9mbGFnKHQsIFRJRl9TSUdQRU5ESU5HKTsKLQkJCQlzdGF0ZSB8PSBUQVNLX0lOVEVSUlVQVElCTEU7Ci0JCQl9Ci0JCQl3YWtlX3VwX3N0YXRlKHQsIHN0YXRlKTsKKwkJCXdha2VfdXBfc3RhdGUodCwgX19UQVNLX1NUT1BQRUQpOwogCQl9IHdoaWxlX2VhY2hfdGhyZWFkKHAsIHQpOwogCiAJCS8qCkBAIC03ODAsMTMgKzgzNyw2IEBACiAJCQlzaWduYWwtPmZsYWdzID0gd2h5IHwgU0lHTkFMX1NUT1BfQ09OVElOVUVEOwogCQkJc2lnbmFsLT5ncm91cF9zdG9wX2NvdW50ID0gMDsKIAkJCXNpZ25hbC0+Z3JvdXBfZXhpdF9jb2RlID0gMDsKLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiBXZSBhcmUgbm90IHN0b3BwZWQsIGJ1dCB0aGVyZSBjb3VsZCBiZSBhIHN0b3AKLQkJCSAqIHNpZ25hbCBpbiB0aGUgbWlkZGxlIG9mIGJlaW5nIHByb2Nlc3NlZCBhZnRlcgotCQkJICogYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBxdWV1ZS4gIENsZWFyIHRoYXQgdG9vLgotCQkJICovCi0JCQlzaWduYWwtPmZsYWdzICY9IH5TSUdOQUxfU1RPUF9ERVFVRVVFRDsKIAkJfQogCX0KIApAQCAtODc1LDYgKzkyNSw3IEBACiAJCQlzaWduYWwtPmdyb3VwX3N0b3BfY291bnQgPSAwOwogCQkJdCA9IHA7CiAJCQlkbyB7CisJCQkJdGFza19jbGVhcl9ncm91cF9zdG9wX3BlbmRpbmcodCk7CiAJCQkJc2lnYWRkc2V0KCZ0LT5wZW5kaW5nLnNpZ25hbCwgU0lHS0lMTCk7CiAJCQkJc2lnbmFsX3dha2VfdXAodCwgMSk7CiAJCQl9IHdoaWxlX2VhY2hfdGhyZWFkKHAsIHQpOwpAQCAtMTEwOSw2ICsxMTYwLDcgQEAKIAlwLT5zaWduYWwtPmdyb3VwX3N0b3BfY291bnQgPSAwOwogCiAJd2hpbGVfZWFjaF90aHJlYWQocCwgdCkgeworCQl0YXNrX2NsZWFyX2dyb3VwX3N0b3BfcGVuZGluZyh0KTsKIAkJY291bnQrKzsKIAogCQkvKiBEb24ndCBib3RoZXIgd2l0aCBhbHJlYWR5IGRlYWQgdGhyZWFkcyAqLwpAQCAtMTUzNiwxNiArMTU4OCwzMCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGRvX25vdGlmeV9wYXJlbnRfY2xkc3RvcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IHdoeSkKKy8qKgorICogZG9fbm90aWZ5X3BhcmVudF9jbGRzdG9wIC0gbm90aWZ5IHBhcmVudCBvZiBzdG9wcGVkL2NvbnRpbnVlZCBzdGF0ZSBjaGFuZ2UKKyAqIEB0c2s6IHRhc2sgcmVwb3J0aW5nIHRoZSBzdGF0ZSBjaGFuZ2UKKyAqIEBmb3JfcHRyYWNlcjogdGhlIG5vdGlmaWNhdGlvbiBpcyBmb3IgcHRyYWNlcgorICogQHdoeTogQ0xEX3tDT05USU5VRUR8U1RPUFBFRHxUUkFQUEVEfSB0byByZXBvcnQKKyAqCisgKiBOb3RpZnkgQHRzaydzIHBhcmVudCB0aGF0IHRoZSBzdG9wcGVkL2NvbnRpbnVlZCBzdGF0ZSBoYXMgY2hhbmdlZC4gIElmCisgKiBAZm9yX3B0cmFjZXIgaXMgJWZhbHNlLCBAdHNrJ3MgZ3JvdXAgbGVhZGVyIG5vdGlmaWVzIHRvIGl0cyByZWFsIHBhcmVudC4KKyAqIElmICV0cnVlLCBAdHNrIHJlcG9ydHMgdG8gQHRzay0+cGFyZW50IHdoaWNoIHNob3VsZCBiZSB0aGUgcHRyYWNlci4KKyAqCisgKiBDT05URVhUOgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0YXNrbGlzdF9sb2NrIGF0IGxlYXN0IHJlYWQgbG9ja2VkLgorICovCitzdGF0aWMgdm9pZCBkb19ub3RpZnlfcGFyZW50X2NsZHN0b3Aoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJCQkJICAgICBib29sIGZvcl9wdHJhY2VyLCBpbnQgd2h5KQogewogCXN0cnVjdCBzaWdpbmZvIGluZm87CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudDsKIAlzdHJ1Y3Qgc2lnaGFuZF9zdHJ1Y3QgKnNpZ2hhbmQ7CiAKLQlpZiAodGFza19wdHJhY2UodHNrKSkKKwlpZiAoZm9yX3B0cmFjZXIpIHsKIAkJcGFyZW50ID0gdHNrLT5wYXJlbnQ7Ci0JZWxzZSB7CisJfSBlbHNlIHsKIAkJdHNrID0gdHNrLT5ncm91cF9sZWFkZXI7CiAJCXBhcmVudCA9IHRzay0+cmVhbF9wYXJlbnQ7CiAJfQpAQCAtMTYyMSw2ICsxNjg3LDE1IEBACiB9CiAKIC8qCisgKiBUZXN0IHdoZXRoZXIgdGhlIHRhcmdldCB0YXNrIG9mIHRoZSB1c3VhbCBjbGRzdG9wIG5vdGlmaWNhdGlvbiAtIHRoZQorICogcmVhbF9wYXJlbnQgb2YgQGNoaWxkIC0gaXMgaW4gdGhlIHNhbWUgZ3JvdXAgYXMgdGhlIHB0cmFjZXIuCisgKi8KK3N0YXRpYyBib29sIHJlYWxfcGFyZW50X2lzX3B0cmFjZXIoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKK3sKKwlyZXR1cm4gc2FtZV90aHJlYWRfZ3JvdXAoY2hpbGQtPnBhcmVudCwgY2hpbGQtPnJlYWxfcGFyZW50KTsKK30KKworLyoKICAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2l0aCBjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrIGhlbGQuCiAgKgogICogVGhpcyBzaG91bGQgYmUgdGhlIHBhdGggZm9yIGFsbCBwdHJhY2Ugc3RvcHMuCkBAIC0xNjMxLDEwICsxNzA2LDEyIEBACiAgKiBJZiB3ZSBhY3R1YWxseSBkZWNpZGUgbm90IHRvIHN0b3AgYXQgYWxsIGJlY2F1c2UgdGhlIHRyYWNlcgogICogaXMgZ29uZSwgd2Uga2VlcCBjdXJyZW50LT5leGl0X2NvZGUgdW5sZXNzIGNsZWFyX2NvZGUuCiAgKi8KLXN0YXRpYyB2b2lkIHB0cmFjZV9zdG9wKGludCBleGl0X2NvZGUsIGludCBjbGVhcl9jb2RlLCBzaWdpbmZvX3QgKmluZm8pCitzdGF0aWMgdm9pZCBwdHJhY2Vfc3RvcChpbnQgZXhpdF9jb2RlLCBpbnQgd2h5LCBpbnQgY2xlYXJfY29kZSwgc2lnaW5mb190ICppbmZvKQogCV9fcmVsZWFzZXMoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spCiAJX19hY3F1aXJlcygmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jaykKIHsKKwlib29sIGdzdG9wX2RvbmUgPSBmYWxzZTsKKwogCWlmIChhcmNoX3B0cmFjZV9zdG9wX25lZWRlZChleGl0X2NvZGUsIGluZm8pKSB7CiAJCS8qCiAJCSAqIFRoZSBhcmNoIGNvZGUgaGFzIHNvbWV0aGluZyBzcGVjaWFsIHRvIGRvIGJlZm9yZSBhCkBAIC0xNjU1LDIxICsxNzMyLDQ5IEBACiAJfQogCiAJLyoKLQkgKiBJZiB0aGVyZSBpcyBhIGdyb3VwIHN0b3AgaW4gcHJvZ3Jlc3MsCi0JICogd2UgbXVzdCBwYXJ0aWNpcGF0ZSBpbiB0aGUgYm9va2tlZXBpbmcuCisJICogSWYgQHdoeSBpcyBDTERfU1RPUFBFRCwgd2UncmUgdHJhcHBpbmcgdG8gcGFydGljaXBhdGUgaW4gYSBncm91cAorCSAqIHN0b3AuICBEbyB0aGUgYm9va2tlZXBpbmcuICBOb3RlIHRoYXQgaWYgU0lHQ09OVCB3YXMgZGVsaWV2ZXJlZAorCSAqIHdoaWxlIHNpZ2xvY2sgd2FzIHJlbGVhc2VkIGZvciB0aGUgYXJjaCBob29rLCBQRU5ESU5HIGNvdWxkIGJlCisJICogY2xlYXIgbm93LiAgV2UgYWN0IGFzIGlmIFNJR0NPTlQgaXMgcmVjZWl2ZWQgYWZ0ZXIgVEFTS19UUkFDRUQKKwkgKiBpcyBlbnRlcmVkIC0gaWdub3JlIGl0LgogCSAqLwotCWlmIChjdXJyZW50LT5zaWduYWwtPmdyb3VwX3N0b3BfY291bnQgPiAwKQotCQktLWN1cnJlbnQtPnNpZ25hbC0+Z3JvdXBfc3RvcF9jb3VudDsKKwlpZiAod2h5ID09IENMRF9TVE9QUEVEICYmIChjdXJyZW50LT5ncm91cF9zdG9wICYgR1JPVVBfU1RPUF9QRU5ESU5HKSkKKwkJZ3N0b3BfZG9uZSA9IHRhc2tfcGFydGljaXBhdGVfZ3JvdXBfc3RvcChjdXJyZW50KTsKIAogCWN1cnJlbnQtPmxhc3Rfc2lnaW5mbyA9IGluZm87CiAJY3VycmVudC0+ZXhpdF9jb2RlID0gZXhpdF9jb2RlOwogCi0JLyogTGV0IHRoZSBkZWJ1Z2dlciBydW4uICAqLwotCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19UUkFDRUQpOworCS8qCisJICogVFJBQ0VEIHNob3VsZCBiZSB2aXNpYmxlIGJlZm9yZSBUUkFQUElORyBpcyBjbGVhcmVkOyBvdGhlcndpc2UsCisJICogdGhlIHRyYWNlciBtaWdodCBmYWlsIGRvX3dhaXQoKS4KKwkgKi8KKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1RSQUNFRCk7CisKKwkvKgorCSAqIFdlJ3JlIGNvbW1pdHRpbmcgdG8gdHJhcHBpbmcuICBDbGVhcmluZyBHUk9VUF9TVE9QX1RSQVBQSU5HIGFuZAorCSAqIHRyYW5zaXRpb24gdG8gVEFTS19UUkFDRUQgc2hvdWxkIGJlIGF0b21pYyB3aXRoIHJlc3BlY3QgdG8KKwkgKiBzaWdsb2NrLiAgVGhpcyBoc291bGQgYmUgZG9uZSBhZnRlciB0aGUgYXJjaCBob29rIGFzIHNpZ2xvY2sgaXMKKwkgKiByZWxlYXNlZCBhbmQgcmVncmFiYmVkIGFjcm9zcyBpdC4KKwkgKi8KKwl0YXNrX2NsZWFyX2dyb3VwX3N0b3BfdHJhcHBpbmcoY3VycmVudCk7CisKIAlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwogCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJaWYgKG1heV9wdHJhY2Vfc3RvcCgpKSB7Ci0JCWRvX25vdGlmeV9wYXJlbnRfY2xkc3RvcChjdXJyZW50LCBDTERfVFJBUFBFRCk7CisJCS8qCisJCSAqIE5vdGlmeSBwYXJlbnRzIG9mIHRoZSBzdG9wLgorCQkgKgorCQkgKiBXaGlsZSBwdHJhY2VkLCB0aGVyZSBhcmUgdHdvIHBhcmVudHMgLSB0aGUgcHRyYWNlciBhbmQKKwkJICogdGhlIHJlYWxfcGFyZW50IG9mIHRoZSBncm91cF9sZWFkZXIuICBUaGUgcHRyYWNlciBzaG91bGQKKwkJICoga25vdyBhYm91dCBldmVyeSBzdG9wIHdoaWxlIHRoZSByZWFsIHBhcmVudCBpcyBvbmx5CisJCSAqIGludGVyZXN0ZWQgaW4gdGhlIGNvbXBsZXRpb24gb2YgZ3JvdXAgc3RvcC4gIFRoZSBzdGF0ZXMKKwkJICogZm9yIHRoZSB0d28gZG9uJ3QgaW50ZXJhY3Qgd2l0aCBlYWNoIG90aGVyLiAgTm90aWZ5CisJCSAqIHNlcGFyYXRlbHkgdW5sZXNzIHRoZXkncmUgZ29ubmEgYmUgZHVwbGljYXRlcy4KKwkJICovCisJCWRvX25vdGlmeV9wYXJlbnRfY2xkc3RvcChjdXJyZW50LCB0cnVlLCB3aHkpOworCQlpZiAoZ3N0b3BfZG9uZSAmJiAhcmVhbF9wYXJlbnRfaXNfcHRyYWNlcihjdXJyZW50KSkKKwkJCWRvX25vdGlmeV9wYXJlbnRfY2xkc3RvcChjdXJyZW50LCBmYWxzZSwgd2h5KTsKKwogCQkvKgogCQkgKiBEb24ndCB3YW50IHRvIGFsbG93IHByZWVtcHRpb24gaGVyZSwgYmVjYXVzZQogCQkgKiBzeXNfcHRyYWNlKCkgbmVlZHMgdGhpcyB0YXNrIHRvIGJlIGluYWN0aXZlLgpAQCAtMTY4NCw3ICsxNzg5LDE2IEBACiAJCS8qCiAJCSAqIEJ5IHRoZSB0aW1lIHdlIGdvdCB0aGUgbG9jaywgb3VyIHRyYWNlciB3ZW50IGF3YXkuCiAJCSAqIERvbid0IGRyb3AgdGhlIGxvY2sgeWV0LCBhbm90aGVyIHRyYWNlciBtYXkgY29tZS4KKwkJICoKKwkJICogSWYgQGdzdG9wX2RvbmUsIHRoZSBwdHJhY2VyIHdlbnQgYXdheSBiZXR3ZWVuIGdyb3VwIHN0b3AKKwkJICogY29tcGxldGlvbiBhbmQgaGVyZS4gIER1cmluZyBkZXRhY2gsIGl0IHdvdWxkIGhhdmUgc2V0CisJCSAqIEdST1VQX1NUT1BfUEVORElORyBvbiB1cyBhbmQgd2UnbGwgcmUtZW50ZXIgVEFTS19TVE9QUEVECisJCSAqIGluIGRvX3NpZ25hbF9zdG9wKCkgb24gcmV0dXJuLCBzbyBub3RpZnlpbmcgdGhlIHJlYWwKKwkJICogcGFyZW50IG9mIHRoZSBncm91cCBzdG9wIGNvbXBsZXRpb24gaXMgZW5vdWdoLgogCQkgKi8KKwkJaWYgKGdzdG9wX2RvbmUpCisJCQlkb19ub3RpZnlfcGFyZW50X2NsZHN0b3AoY3VycmVudCwgZmFsc2UsIHdoeSk7CisKIAkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCQlpZiAoY2xlYXJfY29kZSkKIAkJCWN1cnJlbnQtPmV4aXRfY29kZSA9IDA7CkBAIC0xNzI4LDcgKzE4NDIsNyBAQAogCiAJLyogTGV0IHRoZSBkZWJ1Z2dlciBydW4uICAqLwogCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCXB0cmFjZV9zdG9wKGV4aXRfY29kZSwgMSwgJmluZm8pOworCXB0cmFjZV9zdG9wKGV4aXRfY29kZSwgQ0xEX1RSQVBQRUQsIDEsICZpbmZvKTsKIAlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwogfQogCkBAIC0xNzQxLDY2ICsxODU1LDExNSBAQAogc3RhdGljIGludCBkb19zaWduYWxfc3RvcChpbnQgc2lnbnIpCiB7CiAJc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZyA9IGN1cnJlbnQtPnNpZ25hbDsKLQlpbnQgbm90aWZ5OwogCi0JaWYgKCFzaWctPmdyb3VwX3N0b3BfY291bnQpIHsKKwlpZiAoIShjdXJyZW50LT5ncm91cF9zdG9wICYgR1JPVVBfU1RPUF9QRU5ESU5HKSkgeworCQl1bnNpZ25lZCBpbnQgZ3N0b3AgPSBHUk9VUF9TVE9QX1BFTkRJTkcgfCBHUk9VUF9TVE9QX0NPTlNVTUU7CiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKIAotCQlpZiAoIWxpa2VseShzaWctPmZsYWdzICYgU0lHTkFMX1NUT1BfREVRVUVVRUQpIHx8CisJCS8qIHNpZ25yIHdpbGwgYmUgcmVjb3JkZWQgaW4gdGFzay0+Z3JvdXBfc3RvcCBmb3IgcmV0cmllcyAqLworCQlXQVJOX09OX09OQ0Uoc2lnbnIgJiB+R1JPVVBfU1RPUF9TSUdNQVNLKTsKKworCQlpZiAoIWxpa2VseShjdXJyZW50LT5ncm91cF9zdG9wICYgR1JPVVBfU1RPUF9ERVFVRVVFRCkgfHwKIAkJICAgIHVubGlrZWx5KHNpZ25hbF9ncm91cF9leGl0KHNpZykpKQogCQkJcmV0dXJuIDA7CiAJCS8qCi0JCSAqIFRoZXJlIGlzIG5vIGdyb3VwIHN0b3AgYWxyZWFkeSBpbiBwcm9ncmVzcy4KLQkJICogV2UgbXVzdCBpbml0aWF0ZSBvbmUgbm93LgorCQkgKiBUaGVyZSBpcyBubyBncm91cCBzdG9wIGFscmVhZHkgaW4gcHJvZ3Jlc3MuICBXZSBtdXN0CisJCSAqIGluaXRpYXRlIG9uZSBub3cuCisJCSAqCisJCSAqIFdoaWxlIHB0cmFjZWQsIGEgdGFzayBtYXkgYmUgcmVzdW1lZCB3aGlsZSBncm91cCBzdG9wIGlzCisJCSAqIHN0aWxsIGluIGVmZmVjdCBhbmQgdGhlbiByZWNlaXZlIGEgc3RvcCBzaWduYWwgYW5kCisJCSAqIGluaXRpYXRlIGFub3RoZXIgZ3JvdXAgc3RvcC4gIFRoaXMgZGV2aWF0ZXMgZnJvbSB0aGUKKwkJICogdXN1YWwgYmVoYXZpb3IgYXMgdHdvIGNvbnNlY3V0aXZlIHN0b3Agc2lnbmFscyBjYW4ndAorCQkgKiBjYXVzZSB0d28gZ3JvdXAgc3RvcHMgd2hlbiAhcHRyYWNlZC4gIFRoYXQgaXMgd2h5IHdlCisJCSAqIGFsc28gY2hlY2sgIXRhc2tfaXNfc3RvcHBlZCh0KSBiZWxvdy4KKwkJICoKKwkJICogVGhlIGNvbmRpdGlvbiBjYW4gYmUgZGlzdGluZ3Vpc2hlZCBieSB0ZXN0aW5nIHdoZXRoZXIKKwkJICogU0lHTkFMX1NUT1BfU1RPUFBFRCBpcyBhbHJlYWR5IHNldC4gIERvbid0IGdlbmVyYXRlCisJCSAqIGdyb3VwX2V4aXRfY29kZSBpbiBzdWNoIGNhc2UuCisJCSAqCisJCSAqIFRoaXMgaXMgbm90IG5lY2Vzc2FyeSBmb3IgU0lHTkFMX1NUT1BfQ09OVElOVUVEIGJlY2F1c2UKKwkJICogYW4gaW50ZXJ2ZW5pbmcgc3RvcCBzaWduYWwgaXMgcmVxdWlyZWQgdG8gY2F1c2UgdHdvCisJCSAqIGNvbnRpbnVlZCBldmVudHMgcmVnYXJkbGVzcyBvZiBwdHJhY2UuCiAJCSAqLwotCQlzaWctPmdyb3VwX2V4aXRfY29kZSA9IHNpZ25yOworCQlpZiAoIShzaWctPmZsYWdzICYgU0lHTkFMX1NUT1BfU1RPUFBFRCkpCisJCQlzaWctPmdyb3VwX2V4aXRfY29kZSA9IHNpZ25yOworCQllbHNlCisJCQlXQVJOX09OX09OQ0UoIXRhc2tfcHRyYWNlKGN1cnJlbnQpKTsKIAorCQljdXJyZW50LT5ncm91cF9zdG9wICY9IH5HUk9VUF9TVE9QX1NJR01BU0s7CisJCWN1cnJlbnQtPmdyb3VwX3N0b3AgfD0gc2lnbnIgfCBnc3RvcDsKIAkJc2lnLT5ncm91cF9zdG9wX2NvdW50ID0gMTsKLQkJZm9yICh0ID0gbmV4dF90aHJlYWQoY3VycmVudCk7IHQgIT0gY3VycmVudDsgdCA9IG5leHRfdGhyZWFkKHQpKQorCQlmb3IgKHQgPSBuZXh0X3RocmVhZChjdXJyZW50KTsgdCAhPSBjdXJyZW50OworCQkgICAgIHQgPSBuZXh0X3RocmVhZCh0KSkgeworCQkJdC0+Z3JvdXBfc3RvcCAmPSB+R1JPVVBfU1RPUF9TSUdNQVNLOwogCQkJLyoKIAkJCSAqIFNldHRpbmcgc3RhdGUgdG8gVEFTS19TVE9QUEVEIGZvciBhIGdyb3VwCiAJCQkgKiBzdG9wIGlzIGFsd2F5cyBkb25lIHdpdGggdGhlIHNpZ2xvY2sgaGVsZCwKIAkJCSAqIHNvIHRoaXMgY2hlY2sgaGFzIG5vIHJhY2VzLgogCQkJICovCi0JCQlpZiAoISh0LT5mbGFncyAmIFBGX0VYSVRJTkcpICYmCi0JCQkgICAgIXRhc2tfaXNfc3RvcHBlZF9vcl90cmFjZWQodCkpIHsKKwkJCWlmICghKHQtPmZsYWdzICYgUEZfRVhJVElORykgJiYgIXRhc2tfaXNfc3RvcHBlZCh0KSkgeworCQkJCXQtPmdyb3VwX3N0b3AgfD0gc2lnbnIgfCBnc3RvcDsKIAkJCQlzaWctPmdyb3VwX3N0b3BfY291bnQrKzsKIAkJCQlzaWduYWxfd2FrZV91cCh0LCAwKTsKIAkJCX0KKwkJfQogCX0KLQkvKgotCSAqIElmIHRoZXJlIGFyZSBubyBvdGhlciB0aHJlYWRzIGluIHRoZSBncm91cCwgb3IgaWYgdGhlcmUgaXMKLQkgKiBhIGdyb3VwIHN0b3AgaW4gcHJvZ3Jlc3MgYW5kIHdlIGFyZSB0aGUgbGFzdCB0byBzdG9wLCByZXBvcnQKLQkgKiB0byB0aGUgcGFyZW50LiAgV2hlbiBwdHJhY2VkLCBldmVyeSB0aHJlYWQgcmVwb3J0cyBpdHNlbGYuCi0JICovCi0Jbm90aWZ5ID0gc2lnLT5ncm91cF9zdG9wX2NvdW50ID09IDEgPyBDTERfU1RPUFBFRCA6IDA7Ci0Jbm90aWZ5ID0gdHJhY2Vob29rX25vdGlmeV9qY3RsKG5vdGlmeSwgQ0xEX1NUT1BQRUQpOwotCS8qCi0JICogdHJhY2Vob29rX25vdGlmeV9qY3RsKCkgY2FuIGRyb3AgYW5kIHJlYWNxdWlyZSBzaWdsb2NrLCBzbwotCSAqIHdlIGtlZXAgLT5ncm91cF9zdG9wX2NvdW50ICE9IDAgYmVmb3JlIHRoZSBjYWxsLiBJZiBTSUdDT05UCi0JICogb3IgU0lHS0lMTCBjb21lcyBpbiBiZXR3ZWVuIC0+Z3JvdXBfc3RvcF9jb3VudCA9PSAwLgotCSAqLwotCWlmIChzaWctPmdyb3VwX3N0b3BfY291bnQpIHsKLQkJaWYgKCEtLXNpZy0+Z3JvdXBfc3RvcF9jb3VudCkKLQkJCXNpZy0+ZmxhZ3MgPSBTSUdOQUxfU1RPUF9TVE9QUEVEOwotCQljdXJyZW50LT5leGl0X2NvZGUgPSBzaWctPmdyb3VwX2V4aXRfY29kZTsKK3JldHJ5OgorCWlmIChsaWtlbHkoIXRhc2tfcHRyYWNlKGN1cnJlbnQpKSkgeworCQlpbnQgbm90aWZ5ID0gMDsKKworCQkvKgorCQkgKiBJZiB0aGVyZSBhcmUgbm8gb3RoZXIgdGhyZWFkcyBpbiB0aGUgZ3JvdXAsIG9yIGlmIHRoZXJlCisJCSAqIGlzIGEgZ3JvdXAgc3RvcCBpbiBwcm9ncmVzcyBhbmQgd2UgYXJlIHRoZSBsYXN0IHRvIHN0b3AsCisJCSAqIHJlcG9ydCB0byB0aGUgcGFyZW50LgorCQkgKi8KKwkJaWYgKHRhc2tfcGFydGljaXBhdGVfZ3JvdXBfc3RvcChjdXJyZW50KSkKKwkJCW5vdGlmeSA9IENMRF9TVE9QUEVEOworCiAJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19TVE9QUEVEKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKworCQkvKgorCQkgKiBOb3RpZnkgdGhlIHBhcmVudCBvZiB0aGUgZ3JvdXAgc3RvcCBjb21wbGV0aW9uLiAgQmVjYXVzZQorCQkgKiB3ZSdyZSBub3QgaG9sZGluZyBlaXRoZXIgdGhlIHNpZ2xvY2sgb3IgdGFza2xpc3RfbG9jaworCQkgKiBoZXJlLCBwdHJhY2VyIG1heSBhdHRhY2ggaW5iZXR3ZWVuOyBob3dldmVyLCB0aGlzIGlzIGZvcgorCQkgKiBncm91cCBzdG9wIGFuZCBzaG91bGQgYWx3YXlzIGJlIGRlbGl2ZXJlZCB0byB0aGUgcmVhbAorCQkgKiBwYXJlbnQgb2YgdGhlIGdyb3VwIGxlYWRlci4gIFRoZSBuZXcgcHRyYWNlciB3aWxsIGdldAorCQkgKiBpdHMgbm90aWZpY2F0aW9uIHdoZW4gdGhpcyB0YXNrIHRyYW5zaXRpb25zIGludG8KKwkJICogVEFTS19UUkFDRUQuCisJCSAqLworCQlpZiAobm90aWZ5KSB7CisJCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCQkJZG9fbm90aWZ5X3BhcmVudF9jbGRzdG9wKGN1cnJlbnQsIGZhbHNlLCBub3RpZnkpOworCQkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCQl9CisKKwkJLyogTm93IHdlIGRvbid0IHJ1biBhZ2FpbiB1bnRpbCB3b2tlbiBieSBTSUdDT05UIG9yIFNJR0tJTEwgKi8KKwkJc2NoZWR1bGUoKTsKKworCQlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKwl9IGVsc2UgeworCQlwdHJhY2Vfc3RvcChjdXJyZW50LT5ncm91cF9zdG9wICYgR1JPVVBfU1RPUF9TSUdNQVNLLAorCQkJICAgIENMRF9TVE9QUEVELCAwLCBOVUxMKTsKKwkJY3VycmVudC0+ZXhpdF9jb2RlID0gMDsKIAl9CisKKwkvKgorCSAqIEdST1VQX1NUT1BfUEVORElORyBjb3VsZCBiZSBzZXQgaWYgYW5vdGhlciBncm91cCBzdG9wIGhhcworCSAqIHN0YXJ0ZWQgc2luY2UgYmVpbmcgd29rZW4gdXAgb3IgcHRyYWNlIHdhbnRzIHVzIHRvIHRyYW5zaXQKKwkgKiBiZXR3ZWVuIFRBU0tfU1RPUFBFRCBhbmQgVFJBQ0VELiAgUmV0cnkgZ3JvdXAgc3RvcC4KKwkgKi8KKwlpZiAoY3VycmVudC0+Z3JvdXBfc3RvcCAmIEdST1VQX1NUT1BfUEVORElORykgeworCQlXQVJOX09OX09OQ0UoIShjdXJyZW50LT5ncm91cF9zdG9wICYgR1JPVVBfU1RPUF9TSUdNQVNLKSk7CisJCWdvdG8gcmV0cnk7CisJfQorCisJLyogUFRSQUNFX0FUVEFDSCBtaWdodCBoYXZlIHJhY2VkIHdpdGggdGFzayBraWxsaW5nLCBjbGVhciB0cmFwcGluZyAqLworCXRhc2tfY2xlYXJfZ3JvdXBfc3RvcF90cmFwcGluZyhjdXJyZW50KTsKKwogCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CiAKLQlpZiAobm90aWZ5KSB7Ci0JCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7Ci0JCWRvX25vdGlmeV9wYXJlbnRfY2xkc3RvcChjdXJyZW50LCBub3RpZnkpOwotCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci0JfQotCi0JLyogTm93IHdlIGRvbid0IHJ1biBhZ2FpbiB1bnRpbCB3b2tlbiBieSBTSUdDT05UIG9yIFNJR0tJTEwgKi8KLQlkbyB7Ci0JCXNjaGVkdWxlKCk7Ci0JfSB3aGlsZSAodHJ5X3RvX2ZyZWV6ZSgpKTsKLQogCXRyYWNlaG9va19maW5pc2hfamN0bCgpOwotCWN1cnJlbnQtPmV4aXRfY29kZSA9IDA7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTE4MTQsNyArMTk3Nyw3IEBACiAJcHRyYWNlX3NpZ25hbF9kZWxpdmVyKHJlZ3MsIGNvb2tpZSk7CiAKIAkvKiBMZXQgdGhlIGRlYnVnZ2VyIHJ1bi4gICovCi0JcHRyYWNlX3N0b3Aoc2lnbnIsIDAsIGluZm8pOworCXB0cmFjZV9zdG9wKHNpZ25yLCBDTERfVFJBUFBFRCwgMCwgaW5mbyk7CiAKIAkvKiBXZSdyZSBiYWNrLiAgRGlkIHRoZSBkZWJ1Z2dlciBjYW5jZWwgdGhlIHNpZz8gICovCiAJc2lnbnIgPSBjdXJyZW50LT5leGl0X2NvZGU7CkBAIC0xODY5LDE4ICsyMDMyLDM2IEBACiAJICogdGhlIENMRF8gc2lfY29kZSBpbnRvIFNJR05BTF9DTERfTUFTSyBiaXRzLgogCSAqLwogCWlmICh1bmxpa2VseShzaWduYWwtPmZsYWdzICYgU0lHTkFMX0NMRF9NQVNLKSkgewotCQlpbnQgd2h5ID0gKHNpZ25hbC0+ZmxhZ3MgJiBTSUdOQUxfU1RPUF9DT05USU5VRUQpCi0JCQkJPyBDTERfQ09OVElOVUVEIDogQ0xEX1NUT1BQRUQ7CisJCXN0cnVjdCB0YXNrX3N0cnVjdCAqbGVhZGVyOworCQlpbnQgd2h5OworCisJCWlmIChzaWduYWwtPmZsYWdzICYgU0lHTkFMX0NMRF9DT05USU5VRUQpCisJCQl3aHkgPSBDTERfQ09OVElOVUVEOworCQllbHNlCisJCQl3aHkgPSBDTERfU1RPUFBFRDsKKwogCQlzaWduYWwtPmZsYWdzICY9IH5TSUdOQUxfQ0xEX01BU0s7CiAKLQkJd2h5ID0gdHJhY2Vob29rX25vdGlmeV9qY3RsKHdoeSwgQ0xEX0NPTlRJTlVFRCk7CiAJCXNwaW5fdW5sb2NrX2lycSgmc2lnaGFuZC0+c2lnbG9jayk7CiAKLQkJaWYgKHdoeSkgewotCQkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQkJCWRvX25vdGlmeV9wYXJlbnRfY2xkc3RvcChjdXJyZW50LT5ncm91cF9sZWFkZXIsIHdoeSk7Ci0JCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci0JCX0KKwkJLyoKKwkJICogTm90aWZ5IHRoZSBwYXJlbnQgdGhhdCB3ZSdyZSBjb250aW51aW5nLiAgVGhpcyBldmVudCBpcworCQkgKiBhbHdheXMgcGVyLXByb2Nlc3MgYW5kIGRvZXNuJ3QgbWFrZSB3aG9sZSBsb3Qgb2Ygc2Vuc2UKKwkJICogZm9yIHB0cmFjZXJzLCB3aG8gc2hvdWxkbid0IGNvbnN1bWUgdGhlIHN0YXRlIHZpYQorCQkgKiB3YWl0KDIpIGVpdGhlciwgYnV0LCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgbm90aWZ5CisJCSAqIHRoZSBwdHJhY2VyIG9mIHRoZSBncm91cCBsZWFkZXIgdG9vIHVubGVzcyBpdCdzIGdvbm5hIGJlCisJCSAqIGEgZHVwbGljYXRlLgorCQkgKi8KKwkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKworCQlkb19ub3RpZnlfcGFyZW50X2NsZHN0b3AoY3VycmVudCwgZmFsc2UsIHdoeSk7CisKKwkJbGVhZGVyID0gY3VycmVudC0+Z3JvdXBfbGVhZGVyOworCQlpZiAodGFza19wdHJhY2UobGVhZGVyKSAmJiAhcmVhbF9wYXJlbnRfaXNfcHRyYWNlcihsZWFkZXIpKQorCQkJZG9fbm90aWZ5X3BhcmVudF9jbGRzdG9wKGxlYWRlciwgdHJ1ZSwgd2h5KTsKKworCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisKIAkJZ290byByZWxvY2s7CiAJfQogCkBAIC0xODk3LDggKzIwNzgsOCBAQAogCQlpZiAodW5saWtlbHkoc2lnbnIgIT0gMCkpCiAJCQlrYSA9IHJldHVybl9rYTsKIAkJZWxzZSB7Ci0JCQlpZiAodW5saWtlbHkoc2lnbmFsLT5ncm91cF9zdG9wX2NvdW50ID4gMCkgJiYKLQkJCSAgICBkb19zaWduYWxfc3RvcCgwKSkKKwkJCWlmICh1bmxpa2VseShjdXJyZW50LT5ncm91cF9zdG9wICYKKwkJCQkgICAgIEdST1VQX1NUT1BfUEVORElORykgJiYgZG9fc2lnbmFsX3N0b3AoMCkpCiAJCQkJZ290byByZWxvY2s7CiAKIAkJCXNpZ25yID0gZGVxdWV1ZV9zaWduYWwoY3VycmVudCwgJmN1cnJlbnQtPmJsb2NrZWQsCkBAIC0yMDE3LDEwICsyMTk4LDQyIEBACiAJcmV0dXJuIHNpZ25yOwogfQogCisvKgorICogSXQgY291bGQgYmUgdGhhdCBjb21wbGV0ZV9zaWduYWwoKSBwaWNrZWQgdXMgdG8gbm90aWZ5IGFib3V0IHRoZQorICogZ3JvdXAtd2lkZSBzaWduYWwuIE90aGVyIHRocmVhZHMgc2hvdWxkIGJlIG5vdGlmaWVkIG5vdyB0byB0YWtlCisgKiB0aGUgc2hhcmVkIHNpZ25hbHMgaW4gQHdoaWNoIHNpbmNlIHdlIHdpbGwgbm90LgorICovCitzdGF0aWMgdm9pZCByZXRhcmdldF9zaGFyZWRfcGVuZGluZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc2lnc2V0X3QgKndoaWNoKQoreworCXNpZ3NldF90IHJldGFyZ2V0OworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKKworCXNpZ2FuZHNldHMoJnJldGFyZ2V0LCAmdHNrLT5zaWduYWwtPnNoYXJlZF9wZW5kaW5nLnNpZ25hbCwgd2hpY2gpOworCWlmIChzaWdpc2VtcHR5c2V0KCZyZXRhcmdldCkpCisJCXJldHVybjsKKworCXQgPSB0c2s7CisJd2hpbGVfZWFjaF90aHJlYWQodHNrLCB0KSB7CisJCWlmICh0LT5mbGFncyAmIFBGX0VYSVRJTkcpCisJCQljb250aW51ZTsKKworCQlpZiAoIWhhc19wZW5kaW5nX3NpZ25hbHMoJnJldGFyZ2V0LCAmdC0+YmxvY2tlZCkpCisJCQljb250aW51ZTsKKwkJLyogUmVtb3ZlIHRoZSBzaWduYWxzIHRoaXMgdGhyZWFkIGNhbiBoYW5kbGUuICovCisJCXNpZ2FuZHNldHMoJnJldGFyZ2V0LCAmcmV0YXJnZXQsICZ0LT5ibG9ja2VkKTsKKworCQlpZiAoIXNpZ25hbF9wZW5kaW5nKHQpKQorCQkJc2lnbmFsX3dha2VfdXAodCwgMCk7CisKKwkJaWYgKHNpZ2lzZW1wdHlzZXQoJnJldGFyZ2V0KSkKKwkJCWJyZWFrOworCX0KK30KKwogdm9pZCBleGl0X3NpZ25hbHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CiAJaW50IGdyb3VwX3N0b3AgPSAwOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKKwlzaWdzZXRfdCB1bmJsb2NrZWQ7CiAKIAlpZiAodGhyZWFkX2dyb3VwX2VtcHR5KHRzaykgfHwgc2lnbmFsX2dyb3VwX2V4aXQodHNrLT5zaWduYWwpKSB7CiAJCXRzay0+ZmxhZ3MgfD0gUEZfRVhJVElORzsKQEAgLTIwMzYsMjYgKzIyNDksMjMgQEAKIAlpZiAoIXNpZ25hbF9wZW5kaW5nKHRzaykpCiAJCWdvdG8gb3V0OwogCi0JLyoKLQkgKiBJdCBjb3VsZCBiZSB0aGF0IF9fZ3JvdXBfY29tcGxldGVfc2lnbmFsKCkgY2hvb3NlIHVzIHRvCi0JICogbm90aWZ5IGFib3V0IGdyb3VwLXdpZGUgc2lnbmFsLiBBbm90aGVyIHRocmVhZCBzaG91bGQgYmUKLQkgKiB3b2tlbiBub3cgdG8gdGFrZSB0aGUgc2lnbmFsIHNpbmNlIHdlIHdpbGwgbm90LgotCSAqLwotCWZvciAodCA9IHRzazsgKHQgPSBuZXh0X3RocmVhZCh0KSkgIT0gdHNrOyApCi0JCWlmICghc2lnbmFsX3BlbmRpbmcodCkgJiYgISh0LT5mbGFncyAmIFBGX0VYSVRJTkcpKQotCQkJcmVjYWxjX3NpZ3BlbmRpbmdfYW5kX3dha2UodCk7CisJdW5ibG9ja2VkID0gdHNrLT5ibG9ja2VkOworCXNpZ25vdHNldCgmdW5ibG9ja2VkKTsKKwlyZXRhcmdldF9zaGFyZWRfcGVuZGluZyh0c2ssICZ1bmJsb2NrZWQpOwogCi0JaWYgKHVubGlrZWx5KHRzay0+c2lnbmFsLT5ncm91cF9zdG9wX2NvdW50KSAmJgotCQkJIS0tdHNrLT5zaWduYWwtPmdyb3VwX3N0b3BfY291bnQpIHsKLQkJdHNrLT5zaWduYWwtPmZsYWdzID0gU0lHTkFMX1NUT1BfU1RPUFBFRDsKLQkJZ3JvdXBfc3RvcCA9IHRyYWNlaG9va19ub3RpZnlfamN0bChDTERfU1RPUFBFRCwgQ0xEX1NUT1BQRUQpOwotCX0KKwlpZiAodW5saWtlbHkodHNrLT5ncm91cF9zdG9wICYgR1JPVVBfU1RPUF9QRU5ESU5HKSAmJgorCSAgICB0YXNrX3BhcnRpY2lwYXRlX2dyb3VwX3N0b3AodHNrKSkKKwkJZ3JvdXBfc3RvcCA9IENMRF9TVE9QUEVEOwogb3V0OgogCXNwaW5fdW5sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAorCS8qCisJICogSWYgZ3JvdXAgc3RvcCBoYXMgY29tcGxldGVkLCBkZWxpdmVyIHRoZSBub3RpZmljYXRpb24uICBUaGlzCisJICogc2hvdWxkIGFsd2F5cyBnbyB0byB0aGUgcmVhbCBwYXJlbnQgb2YgdGhlIGdyb3VwIGxlYWRlci4KKwkgKi8KIAlpZiAodW5saWtlbHkoZ3JvdXBfc3RvcCkpIHsKIAkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQkJZG9fbm90aWZ5X3BhcmVudF9jbGRzdG9wKHRzaywgZ3JvdXBfc3RvcCk7CisJCWRvX25vdGlmeV9wYXJlbnRfY2xkc3RvcCh0c2ssIGZhbHNlLCBncm91cF9zdG9wKTsKIAkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwogCX0KIH0KQEAgLTIwODksMTEgKzIyOTksMzMgQEAKIAlyZXR1cm4gLUVJTlRSOwogfQogCi0vKgotICogV2UgZG9uJ3QgbmVlZCB0byBnZXQgdGhlIGtlcm5lbCBsb2NrIC0gdGhpcyBpcyBhbGwgbG9jYWwgdG8gdGhpcwotICogcGFydGljdWxhciB0aHJlYWQuLiAoYW5kIHRoYXQncyBnb29kLCBiZWNhdXNlIHRoaXMgaXMgX2hlYXZpbHlfCi0gKiB1c2VkIGJ5IHZhcmlvdXMgcHJvZ3JhbXMpCitzdGF0aWMgdm9pZCBfX3NldF90YXNrX2Jsb2NrZWQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGNvbnN0IHNpZ3NldF90ICpuZXdzZXQpCit7CisJaWYgKHNpZ25hbF9wZW5kaW5nKHRzaykgJiYgIXRocmVhZF9ncm91cF9lbXB0eSh0c2spKSB7CisJCXNpZ3NldF90IG5ld2Jsb2NrZWQ7CisJCS8qIEEgc2V0IG9mIG5vdyBibG9ja2VkIGJ1dCBwcmV2aW91c2x5IHVuYmxvY2tlZCBzaWduYWxzLiAqLworCQlzaWdhbmRuc2V0cygmbmV3YmxvY2tlZCwgbmV3c2V0LCAmY3VycmVudC0+YmxvY2tlZCk7CisJCXJldGFyZ2V0X3NoYXJlZF9wZW5kaW5nKHRzaywgJm5ld2Jsb2NrZWQpOworCX0KKwl0c2stPmJsb2NrZWQgPSAqbmV3c2V0OworCXJlY2FsY19zaWdwZW5kaW5nKCk7Cit9CisKKy8qKgorICogc2V0X2N1cnJlbnRfYmxvY2tlZCAtIGNoYW5nZSBjdXJyZW50LT5ibG9ja2VkIG1hc2sKKyAqIEBuZXdzZXQ6IG5ldyBtYXNrCisgKgorICogSXQgaXMgd3JvbmcgdG8gY2hhbmdlIC0+YmxvY2tlZCBkaXJlY3RseSwgdGhpcyBoZWxwZXIgc2hvdWxkIGJlIHVzZWQKKyAqIHRvIGVuc3VyZSB0aGUgcHJvY2VzcyBjYW4ndCBtaXNzIGEgc2hhcmVkIHNpZ25hbCB3ZSBhcmUgZ29pbmcgdG8gYmxvY2suCiAgKi8KK3ZvaWQgc2V0X2N1cnJlbnRfYmxvY2tlZChjb25zdCBzaWdzZXRfdCAqbmV3c2V0KQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKworCXNwaW5fbG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CisJX19zZXRfdGFza19ibG9ja2VkKHRzaywgbmV3c2V0KTsKKwlzcGluX3VubG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7Cit9CiAKIC8qCiAgKiBUaGlzIGlzIGFsc28gdXNlZnVsIGZvciBrZXJuZWwgdGhyZWFkcyB0aGF0IHdhbnQgdG8gdGVtcG9yYXJpbHkKQEAgLTIxMDUsMzAgKzIzMzcsMjkgQEAKICAqLwogaW50IHNpZ3Byb2NtYXNrKGludCBob3csIHNpZ3NldF90ICpzZXQsIHNpZ3NldF90ICpvbGRzZXQpCiB7Ci0JaW50IGVycm9yOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKwlzaWdzZXRfdCBuZXdzZXQ7CiAKLQlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKwkvKiBMb2NrbGVzcywgb25seSBjdXJyZW50IGNhbiBjaGFuZ2UgLT5ibG9ja2VkLCBuZXZlciBmcm9tIGlycSAqLwogCWlmIChvbGRzZXQpCi0JCSpvbGRzZXQgPSBjdXJyZW50LT5ibG9ja2VkOworCQkqb2xkc2V0ID0gdHNrLT5ibG9ja2VkOwogCi0JZXJyb3IgPSAwOwogCXN3aXRjaCAoaG93KSB7CiAJY2FzZSBTSUdfQkxPQ0s6Ci0JCXNpZ29yc2V0cygmY3VycmVudC0+YmxvY2tlZCwgJmN1cnJlbnQtPmJsb2NrZWQsIHNldCk7CisJCXNpZ29yc2V0cygmbmV3c2V0LCAmdHNrLT5ibG9ja2VkLCBzZXQpOwogCQlicmVhazsKIAljYXNlIFNJR19VTkJMT0NLOgotCQlzaWduYW5kc2V0cygmY3VycmVudC0+YmxvY2tlZCwgJmN1cnJlbnQtPmJsb2NrZWQsIHNldCk7CisJCXNpZ2FuZG5zZXRzKCZuZXdzZXQsICZ0c2stPmJsb2NrZWQsIHNldCk7CiAJCWJyZWFrOwogCWNhc2UgU0lHX1NFVE1BU0s6Ci0JCWN1cnJlbnQtPmJsb2NrZWQgPSAqc2V0OworCQluZXdzZXQgPSAqc2V0OwogCQlicmVhazsKIAlkZWZhdWx0OgotCQllcnJvciA9IC1FSU5WQUw7CisJCXJldHVybiAtRUlOVkFMOwogCX0KLQlyZWNhbGNfc2lncGVuZGluZygpOwotCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CiAKLQlyZXR1cm4gZXJyb3I7CisJc2V0X2N1cnJlbnRfYmxvY2tlZCgmbmV3c2V0KTsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0yMTM4LDQwICsyMzY5LDM0IEBACiAgKiAgQG9zZXQ6IHByZXZpb3VzIHZhbHVlIG9mIHNpZ25hbCBtYXNrIGlmIG5vbi1udWxsCiAgKiAgQHNpZ3NldHNpemU6IHNpemUgb2Ygc2lnc2V0X3QgdHlwZQogICovCi1TWVNDQUxMX0RFRklORTQocnRfc2lncHJvY21hc2ssIGludCwgaG93LCBzaWdzZXRfdCBfX3VzZXIgKiwgc2V0LAorU1lTQ0FMTF9ERUZJTkU0KHJ0X3NpZ3Byb2NtYXNrLCBpbnQsIGhvdywgc2lnc2V0X3QgX191c2VyICosIG5zZXQsCiAJCXNpZ3NldF90IF9fdXNlciAqLCBvc2V0LCBzaXplX3QsIHNpZ3NldHNpemUpCiB7Ci0JaW50IGVycm9yID0gLUVJTlZBTDsKIAlzaWdzZXRfdCBvbGRfc2V0LCBuZXdfc2V0OworCWludCBlcnJvcjsKIAogCS8qIFhYWDogRG9uJ3QgcHJlY2x1ZGUgaGFuZGxpbmcgZGlmZmVyZW50IHNpemVkIHNpZ3NldF90J3MuICAqLwogCWlmIChzaWdzZXRzaXplICE9IHNpemVvZihzaWdzZXRfdCkpCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChzZXQpIHsKLQkJZXJyb3IgPSAtRUZBVUxUOwotCQlpZiAoY29weV9mcm9tX3VzZXIoJm5ld19zZXQsIHNldCwgc2l6ZW9mKCpzZXQpKSkKLQkJCWdvdG8gb3V0OworCW9sZF9zZXQgPSBjdXJyZW50LT5ibG9ja2VkOworCisJaWYgKG5zZXQpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZuZXdfc2V0LCBuc2V0LCBzaXplb2Yoc2lnc2V0X3QpKSkKKwkJCXJldHVybiAtRUZBVUxUOwogCQlzaWdkZWxzZXRtYXNrKCZuZXdfc2V0LCBzaWdtYXNrKFNJR0tJTEwpfHNpZ21hc2soU0lHU1RPUCkpOwogCi0JCWVycm9yID0gc2lncHJvY21hc2soaG93LCAmbmV3X3NldCwgJm9sZF9zZXQpOworCQllcnJvciA9IHNpZ3Byb2NtYXNrKGhvdywgJm5ld19zZXQsIE5VTEwpOwogCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dDsKLQkJaWYgKG9zZXQpCi0JCQlnb3RvIHNldF9vbGQ7Ci0JfSBlbHNlIGlmIChvc2V0KSB7Ci0JCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCQlvbGRfc2V0ID0gY3VycmVudC0+YmxvY2tlZDsKLQkJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQotCXNldF9vbGQ6Ci0JCWVycm9yID0gLUVGQVVMVDsKLQkJaWYgKGNvcHlfdG9fdXNlcihvc2V0LCAmb2xkX3NldCwgc2l6ZW9mKCpvc2V0KSkpCi0JCQlnb3RvIG91dDsKKwkJCXJldHVybiBlcnJvcjsKIAl9Ci0JZXJyb3IgPSAwOwotb3V0OgotCXJldHVybiBlcnJvcjsKKworCWlmIChvc2V0KSB7CisJCWlmIChjb3B5X3RvX3VzZXIob3NldCwgJm9sZF9zZXQsIHNpemVvZihzaWdzZXRfdCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIGxvbmcgZG9fc2lncGVuZGluZyh2b2lkIF9fdXNlciAqc2V0LCB1bnNpZ25lZCBsb25nIHNpZ3NldHNpemUpCkBAIC0yMjg0LDYgKzI1MDksNjYgQEAKICNlbmRpZgogCiAvKioKKyAqICBkb19zaWd0aW1lZHdhaXQgLSB3YWl0IGZvciBxdWV1ZWQgc2lnbmFscyBzcGVjaWZpZWQgaW4gQHdoaWNoCisgKiAgQHdoaWNoOiBxdWV1ZWQgc2lnbmFscyB0byB3YWl0IGZvcgorICogIEBpbmZvOiBpZiBub24tbnVsbCwgdGhlIHNpZ25hbCdzIHNpZ2luZm8gaXMgcmV0dXJuZWQgaGVyZQorICogIEB0czogdXBwZXIgYm91bmQgb24gcHJvY2VzcyB0aW1lIHN1c3BlbnNpb24KKyAqLworaW50IGRvX3NpZ3RpbWVkd2FpdChjb25zdCBzaWdzZXRfdCAqd2hpY2gsIHNpZ2luZm9fdCAqaW5mbywKKwkJCWNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqdHMpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OworCWxvbmcgdGltZW91dCA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUOworCXNpZ3NldF90IG1hc2sgPSAqd2hpY2g7CisJaW50IHNpZzsKKworCWlmICh0cykgeworCQlpZiAoIXRpbWVzcGVjX3ZhbGlkKHRzKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQl0aW1lb3V0ID0gdGltZXNwZWNfdG9famlmZmllcyh0cyk7CisJCS8qCisJCSAqIFdlIGNhbiBiZSBjbG9zZSB0byB0aGUgbmV4dCB0aWNrLCBhZGQgYW5vdGhlciBvbmUKKwkJICogdG8gZW5zdXJlIHdlIHdpbGwgd2FpdCBhdCBsZWFzdCB0aGUgdGltZSBhc2tlZCBmb3IuCisJCSAqLworCQlpZiAodHMtPnR2X3NlYyB8fCB0cy0+dHZfbnNlYykKKwkJCXRpbWVvdXQrKzsKKwl9CisKKwkvKgorCSAqIEludmVydCB0aGUgc2V0IG9mIGFsbG93ZWQgc2lnbmFscyB0byBnZXQgdGhvc2Ugd2Ugd2FudCB0byBibG9jay4KKwkgKi8KKwlzaWdkZWxzZXRtYXNrKCZtYXNrLCBzaWdtYXNrKFNJR0tJTEwpIHwgc2lnbWFzayhTSUdTVE9QKSk7CisJc2lnbm90c2V0KCZtYXNrKTsKKworCXNwaW5fbG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CisJc2lnID0gZGVxdWV1ZV9zaWduYWwodHNrLCAmbWFzaywgaW5mbyk7CisJaWYgKCFzaWcgJiYgdGltZW91dCkgeworCQkvKgorCQkgKiBOb25lIHJlYWR5LCB0ZW1wb3JhcmlseSB1bmJsb2NrIHRob3NlIHdlJ3JlIGludGVyZXN0ZWQKKwkJICogd2hpbGUgd2UgYXJlIHNsZWVwaW5nIGluIHNvIHRoYXQgd2UnbGwgYmUgYXdha2VuZWQgd2hlbgorCQkgKiB0aGV5IGFycml2ZS4gVW5ibG9ja2luZyBpcyBhbHdheXMgZmluZSwgd2UgY2FuIGF2b2lkCisJCSAqIHNldF9jdXJyZW50X2Jsb2NrZWQoKS4KKwkJICovCisJCXRzay0+cmVhbF9ibG9ja2VkID0gdHNrLT5ibG9ja2VkOworCQlzaWdhbmRzZXRzKCZ0c2stPmJsb2NrZWQsICZ0c2stPmJsb2NrZWQsICZtYXNrKTsKKwkJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOworCisJCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUodGltZW91dCk7CisKKwkJc3Bpbl9sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKKwkJX19zZXRfdGFza19ibG9ja2VkKHRzaywgJnRzay0+cmVhbF9ibG9ja2VkKTsKKwkJc2lnaW5pdHNldCgmdHNrLT5yZWFsX2Jsb2NrZWQsIDApOworCQlzaWcgPSBkZXF1ZXVlX3NpZ25hbCh0c2ssICZtYXNrLCBpbmZvKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOworCisJaWYgKHNpZykKKwkJcmV0dXJuIHNpZzsKKwlyZXR1cm4gdGltZW91dCA/IC1FSU5UUiA6IC1FQUdBSU47Cit9CisKKy8qKgogICogIHN5c19ydF9zaWd0aW1lZHdhaXQgLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzIHNwZWNpZmllZAogICoJCQlpbiBAdXRoZXNlCiAgKiAgQHV0aGVzZTogcXVldWVkIHNpZ25hbHMgdG8gd2FpdCBmb3IKQEAgLTIyOTUsMTEgKzI1ODAsMTAgQEAKIAkJc2lnaW5mb190IF9fdXNlciAqLCB1aW5mbywgY29uc3Qgc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqLCB1dHMsCiAJCXNpemVfdCwgc2lnc2V0c2l6ZSkKIHsKLQlpbnQgcmV0LCBzaWc7CiAJc2lnc2V0X3QgdGhlc2U7CiAJc3RydWN0IHRpbWVzcGVjIHRzOwogCXNpZ2luZm9fdCBpbmZvOwotCWxvbmcgdGltZW91dCA9IDA7CisJaW50IHJldDsKIAogCS8qIFhYWDogRG9uJ3QgcHJlY2x1ZGUgaGFuZGxpbmcgZGlmZmVyZW50IHNpemVkIHNpZ3NldF90J3MuICAqLwogCWlmIChzaWdzZXRzaXplICE9IHNpemVvZihzaWdzZXRfdCkpCkBAIC0yMzA4LDYxICsyNTkyLDE2IEBACiAJaWYgKGNvcHlfZnJvbV91c2VyKCZ0aGVzZSwgdXRoZXNlLCBzaXplb2YodGhlc2UpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkvKgotCSAqIEludmVydCB0aGUgc2V0IG9mIGFsbG93ZWQgc2lnbmFscyB0byBnZXQgdGhvc2Ugd2UKLQkgKiB3YW50IHRvIGJsb2NrLgotCSAqLwotCXNpZ2RlbHNldG1hc2soJnRoZXNlLCBzaWdtYXNrKFNJR0tJTEwpfHNpZ21hc2soU0lHU1RPUCkpOwotCXNpZ25vdHNldCgmdGhlc2UpOwotCiAJaWYgKHV0cykgewogCQlpZiAoY29weV9mcm9tX3VzZXIoJnRzLCB1dHMsIHNpemVvZih0cykpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmICh0cy50dl9uc2VjID49IDEwMDAwMDAwMDBMIHx8IHRzLnR2X25zZWMgPCAwCi0JCSAgICB8fCB0cy50dl9zZWMgPCAwKQotCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0Jc2lnID0gZGVxdWV1ZV9zaWduYWwoY3VycmVudCwgJnRoZXNlLCAmaW5mbyk7Ci0JaWYgKCFzaWcpIHsKLQkJdGltZW91dCA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUOwotCQlpZiAodXRzKQotCQkJdGltZW91dCA9ICh0aW1lc3BlY190b19qaWZmaWVzKCZ0cykKLQkJCQkgICArICh0cy50dl9zZWMgfHwgdHMudHZfbnNlYykpOworCXJldCA9IGRvX3NpZ3RpbWVkd2FpdCgmdGhlc2UsICZpbmZvLCB1dHMgPyAmdHMgOiBOVUxMKTsKIAotCQlpZiAodGltZW91dCkgewotCQkJLyoKLQkJCSAqIE5vbmUgcmVhZHkgLS0gdGVtcG9yYXJpbHkgdW5ibG9jayB0aG9zZSB3ZSdyZQotCQkJICogaW50ZXJlc3RlZCB3aGlsZSB3ZSBhcmUgc2xlZXBpbmcgaW4gc28gdGhhdCB3ZSdsbAotCQkJICogYmUgYXdha2VuZWQgd2hlbiB0aGV5IGFycml2ZS4KLQkJCSAqLwotCQkJY3VycmVudC0+cmVhbF9ibG9ja2VkID0gY3VycmVudC0+YmxvY2tlZDsKLQkJCXNpZ2FuZHNldHMoJmN1cnJlbnQtPmJsb2NrZWQsICZjdXJyZW50LT5ibG9ja2VkLCAmdGhlc2UpOwotCQkJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKLQkJCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0KLQkJCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUodGltZW91dCk7Ci0KLQkJCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCQkJc2lnID0gZGVxdWV1ZV9zaWduYWwoY3VycmVudCwgJnRoZXNlLCAmaW5mbyk7Ci0JCQljdXJyZW50LT5ibG9ja2VkID0gY3VycmVudC0+cmVhbF9ibG9ja2VkOwotCQkJc2lnaW5pdHNldCgmY3VycmVudC0+cmVhbF9ibG9ja2VkLCAwKTsKLQkJCXJlY2FsY19zaWdwZW5kaW5nKCk7Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQotCWlmIChzaWcpIHsKLQkJcmV0ID0gc2lnOwotCQlpZiAodWluZm8pIHsKLQkJCWlmIChjb3B5X3NpZ2luZm9fdG9fdXNlcih1aW5mbywgJmluZm8pKQotCQkJCXJldCA9IC1FRkFVTFQ7Ci0JCX0KLQl9IGVsc2UgewotCQlyZXQgPSAtRUFHQUlOOwotCQlpZiAodGltZW91dCkKLQkJCXJldCA9IC1FSU5UUjsKKwlpZiAocmV0ID4gMCAmJiB1aW5mbykgeworCQlpZiAoY29weV9zaWdpbmZvX3RvX3VzZXIodWluZm8sICZpbmZvKSkKKwkJCXJldCA9IC1FRkFVTFQ7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTI2NTAsNjAgKzI4ODksNTEgQEAKIC8qKgogICogIHN5c19zaWdwcm9jbWFzayAtIGV4YW1pbmUgYW5kIGNoYW5nZSBibG9ja2VkIHNpZ25hbHMKICAqICBAaG93OiB3aGV0aGVyIHRvIGFkZCwgcmVtb3ZlLCBvciBzZXQgc2lnbmFscwotICogIEBzZXQ6IHNpZ25hbHMgdG8gYWRkIG9yIHJlbW92ZSAoaWYgbm9uLW51bGwpCisgKiAgQG5zZXQ6IHNpZ25hbHMgdG8gYWRkIG9yIHJlbW92ZSAoaWYgbm9uLW51bGwpCiAgKiAgQG9zZXQ6IHByZXZpb3VzIHZhbHVlIG9mIHNpZ25hbCBtYXNrIGlmIG5vbi1udWxsCiAgKgogICogU29tZSBwbGF0Zm9ybXMgaGF2ZSB0aGVpciBvd24gdmVyc2lvbiB3aXRoIHNwZWNpYWwgYXJndW1lbnRzOwogICogb3RoZXJzIHN1cHBvcnQgb25seSBzeXNfcnRfc2lncHJvY21hc2suCiAgKi8KIAotU1lTQ0FMTF9ERUZJTkUzKHNpZ3Byb2NtYXNrLCBpbnQsIGhvdywgb2xkX3NpZ3NldF90IF9fdXNlciAqLCBzZXQsCitTWVNDQUxMX0RFRklORTMoc2lncHJvY21hc2ssIGludCwgaG93LCBvbGRfc2lnc2V0X3QgX191c2VyICosIG5zZXQsCiAJCW9sZF9zaWdzZXRfdCBfX3VzZXIgKiwgb3NldCkKIHsKLQlpbnQgZXJyb3I7CiAJb2xkX3NpZ3NldF90IG9sZF9zZXQsIG5ld19zZXQ7CisJc2lnc2V0X3QgbmV3X2Jsb2NrZWQ7CiAKLQlpZiAoc2V0KSB7Ci0JCWVycm9yID0gLUVGQVVMVDsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZuZXdfc2V0LCBzZXQsIHNpemVvZigqc2V0KSkpCi0JCQlnb3RvIG91dDsKKwlvbGRfc2V0ID0gY3VycmVudC0+YmxvY2tlZC5zaWdbMF07CisKKwlpZiAobnNldCkgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJm5ld19zZXQsIG5zZXQsIHNpemVvZigqbnNldCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCW5ld19zZXQgJj0gfihzaWdtYXNrKFNJR0tJTEwpIHwgc2lnbWFzayhTSUdTVE9QKSk7CiAKLQkJc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JCW9sZF9zZXQgPSBjdXJyZW50LT5ibG9ja2VkLnNpZ1swXTsKKwkJbmV3X2Jsb2NrZWQgPSBjdXJyZW50LT5ibG9ja2VkOwogCi0JCWVycm9yID0gMDsKIAkJc3dpdGNoIChob3cpIHsKLQkJZGVmYXVsdDoKLQkJCWVycm9yID0gLUVJTlZBTDsKLQkJCWJyZWFrOwogCQljYXNlIFNJR19CTE9DSzoKLQkJCXNpZ2FkZHNldG1hc2soJmN1cnJlbnQtPmJsb2NrZWQsIG5ld19zZXQpOworCQkJc2lnYWRkc2V0bWFzaygmbmV3X2Jsb2NrZWQsIG5ld19zZXQpOwogCQkJYnJlYWs7CiAJCWNhc2UgU0lHX1VOQkxPQ0s6Ci0JCQlzaWdkZWxzZXRtYXNrKCZjdXJyZW50LT5ibG9ja2VkLCBuZXdfc2V0KTsKKwkJCXNpZ2RlbHNldG1hc2soJm5ld19ibG9ja2VkLCBuZXdfc2V0KTsKIAkJCWJyZWFrOwogCQljYXNlIFNJR19TRVRNQVNLOgotCQkJY3VycmVudC0+YmxvY2tlZC5zaWdbMF0gPSBuZXdfc2V0OworCQkJbmV3X2Jsb2NrZWQuc2lnWzBdID0gbmV3X3NldDsKIAkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQlyZWNhbGNfc2lncGVuZGluZygpOwotCQlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dDsKLQkJaWYgKG9zZXQpCi0JCQlnb3RvIHNldF9vbGQ7Ci0JfSBlbHNlIGlmIChvc2V0KSB7Ci0JCW9sZF9zZXQgPSBjdXJyZW50LT5ibG9ja2VkLnNpZ1swXTsKLQlzZXRfb2xkOgotCQllcnJvciA9IC1FRkFVTFQ7Ci0JCWlmIChjb3B5X3RvX3VzZXIob3NldCwgJm9sZF9zZXQsIHNpemVvZigqb3NldCkpKQotCQkJZ290byBvdXQ7CisJCXNldF9jdXJyZW50X2Jsb2NrZWQoJm5ld19ibG9ja2VkKTsKIAl9Ci0JZXJyb3IgPSAwOwotb3V0OgotCXJldHVybiBlcnJvcjsKKworCWlmIChvc2V0KSB7CisJCWlmIChjb3B5X3RvX3VzZXIob3NldCwgJm9sZF9zZXQsIHNpemVvZigqb3NldCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIDA7CiB9CiAjZW5kaWYgLyogX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLICovCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNfbmkuYyBiL2tlcm5lbC9zeXNfbmkuYwppbmRleCAyNWNjNDFjLi42MmNiYzg4IDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzX25pLmMKKysrIGIva2VybmVsL3N5c19uaS5jCkBAIC00Niw3ICs0Niw5IEBACiBjb25kX3N5c2NhbGwoY29tcGF0X3N5c19nZXRzb2Nrb3B0KTsKIGNvbmRfc3lzY2FsbChzeXNfc2h1dGRvd24pOwogY29uZF9zeXNjYWxsKHN5c19zZW5kbXNnKTsKK2NvbmRfc3lzY2FsbChzeXNfc2VuZG1tc2cpOwogY29uZF9zeXNjYWxsKGNvbXBhdF9zeXNfc2VuZG1zZyk7Citjb25kX3N5c2NhbGwoY29tcGF0X3N5c19zZW5kbW1zZyk7CiBjb25kX3N5c2NhbGwoc3lzX3JlY3Ztc2cpOwogY29uZF9zeXNjYWxsKHN5c19yZWN2bW1zZyk7CiBjb25kX3N5c2NhbGwoY29tcGF0X3N5c19yZWN2bXNnKTsKQEAgLTY5LDE1ICs3MSwyMiBAQAogY29uZF9zeXNjYWxsKHN5c19zZW1nZXQpOwogY29uZF9zeXNjYWxsKHN5c19zZW1vcCk7CiBjb25kX3N5c2NhbGwoc3lzX3NlbXRpbWVkb3ApOworY29uZF9zeXNjYWxsKGNvbXBhdF9zeXNfc2VtdGltZWRvcCk7CiBjb25kX3N5c2NhbGwoc3lzX3NlbWN0bCk7Citjb25kX3N5c2NhbGwoY29tcGF0X3N5c19zZW1jdGwpOwogY29uZF9zeXNjYWxsKHN5c19tc2dnZXQpOwogY29uZF9zeXNjYWxsKHN5c19tc2dzbmQpOworY29uZF9zeXNjYWxsKGNvbXBhdF9zeXNfbXNnc25kKTsKIGNvbmRfc3lzY2FsbChzeXNfbXNncmN2KTsKK2NvbmRfc3lzY2FsbChjb21wYXRfc3lzX21zZ3Jjdik7CiBjb25kX3N5c2NhbGwoc3lzX21zZ2N0bCk7Citjb25kX3N5c2NhbGwoY29tcGF0X3N5c19tc2djdGwpOwogY29uZF9zeXNjYWxsKHN5c19zaG1nZXQpOwogY29uZF9zeXNjYWxsKHN5c19zaG1hdCk7Citjb25kX3N5c2NhbGwoY29tcGF0X3N5c19zaG1hdCk7CiBjb25kX3N5c2NhbGwoc3lzX3NobWR0KTsKIGNvbmRfc3lzY2FsbChzeXNfc2htY3RsKTsKK2NvbmRfc3lzY2FsbChjb21wYXRfc3lzX3NobWN0bCk7CiBjb25kX3N5c2NhbGwoc3lzX21xX29wZW4pOwogY29uZF9zeXNjYWxsKHN5c19tcV91bmxpbmspOwogY29uZF9zeXNjYWxsKHN5c19tcV90aW1lZHNlbmQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5c2N0bC5jIGIva2VybmVsL3N5c2N0bC5jCmluZGV4IGMwYmIzMjQuLjNkZDBjNDYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNjdGwuYworKysgYi9rZXJuZWwvc3lzY3RsLmMKQEAgLTczMCwxNCArNzMwLDE2IEBACiAJCS5kYXRhICAgICAgICAgICA9ICZ3YXRjaGRvZ19lbmFibGVkLAogCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YgKGludCksCiAJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIgICA9IHByb2NfZG93YXRjaGRvZ19lbmFibGVkLAorCQkucHJvY19oYW5kbGVyICAgPSBwcm9jX2Rvd2F0Y2hkb2csCisJCS5leHRyYTEJCT0gJnplcm8sCisJCS5leHRyYTIJCT0gJm9uZSwKIAl9LAogCXsKIAkJLnByb2NuYW1lCT0gIndhdGNoZG9nX3RocmVzaCIsCi0JCS5kYXRhCQk9ICZzb2Z0bG9ja3VwX3RocmVzaCwKKwkJLmRhdGEJCT0gJndhdGNoZG9nX3RocmVzaCwKIAkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG93YXRjaGRvZ190aHJlc2gsCisJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2Rvd2F0Y2hkb2csCiAJCS5leHRyYTEJCT0gJm5lZ19vbmUsCiAJCS5leHRyYTIJCT0gJnNpeHR5LAogCX0sCkBAIC03NTUsNyArNzU3LDkgQEAKIAkJLmRhdGEgICAgICAgICAgID0gJndhdGNoZG9nX2VuYWJsZWQsCiAJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZiAoaW50KSwKIAkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKLQkJLnByb2NfaGFuZGxlciAgID0gcHJvY19kb3dhdGNoZG9nX2VuYWJsZWQsCisJCS5wcm9jX2hhbmRsZXIgICA9IHByb2NfZG93YXRjaGRvZywKKwkJLmV4dHJhMQkJPSAmemVybywKKwkJLmV4dHJhMgkJPSAmb25lLAogCX0sCiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19YODZfTE9DQUxfQVBJQykgJiYgZGVmaW5lZChDT05GSUdfWDg2KQpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvYWxhcm10aW1lci5jIGIva2VybmVsL3RpbWUvYWxhcm10aW1lci5jCmluZGV4IDkyNjUwMTQuLjJkOTY2MjQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL2FsYXJtdGltZXIuYworKysgYi9rZXJuZWwvdGltZS9hbGFybXRpbWVyLmMKQEAgLTQ5NCw3ICs0OTQsNyBAQAogICovCiBzdGF0aWMgbG9uZyBfX3NjaGVkIGFsYXJtX3RpbWVyX25zbGVlcF9yZXN0YXJ0KHN0cnVjdCByZXN0YXJ0X2Jsb2NrICpyZXN0YXJ0KQogewotCWVudW0gIGFsYXJtdGltZXJfdHlwZSB0eXBlID0gcmVzdGFydC0+bmFub3NsZWVwLmluZGV4OworCWVudW0gIGFsYXJtdGltZXJfdHlwZSB0eXBlID0gcmVzdGFydC0+bmFub3NsZWVwLmNsb2NraWQ7CiAJa3RpbWVfdCBleHA7CiAJc3RydWN0IHRpbWVzcGVjIF9fdXNlciAgKnJtdHA7CiAJc3RydWN0IGFsYXJtIGFsYXJtOwpAQCAtNTczLDcgKzU3Myw3IEBACiAKIAlyZXN0YXJ0ID0gJmN1cnJlbnRfdGhyZWFkX2luZm8oKS0+cmVzdGFydF9ibG9jazsKIAlyZXN0YXJ0LT5mbiA9IGFsYXJtX3RpbWVyX25zbGVlcF9yZXN0YXJ0OwotCXJlc3RhcnQtPm5hbm9zbGVlcC5pbmRleCA9IHR5cGU7CisJcmVzdGFydC0+bmFub3NsZWVwLmNsb2NraWQgPSB0eXBlOwogCXJlc3RhcnQtPm5hbm9zbGVlcC5leHBpcmVzID0gZXhwLnR2NjQ7CiAJcmVzdGFydC0+bmFub3NsZWVwLnJtdHAgPSBybXRwOwogCXJldCA9IC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0s7CkBAIC02NjksMTIgKzY2OSwyMCBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCBhbGFybXRpbWVyX2luaXRfbGF0ZSh2b2lkKQogeworCXN0cnVjdCBkZXZpY2UgKmRldjsKIAljaGFyICpzdHI7CiAKIAkvKiBGaW5kIGFuIHJ0YyBkZXZpY2UgYW5kIGluaXQgdGhlIHJ0Y190aW1lciAqLwotCWNsYXNzX2ZpbmRfZGV2aWNlKHJ0Y19jbGFzcywgTlVMTCwgJnN0ciwgaGFzX3dha2VhbGFybSk7Ci0JaWYgKHN0cikKKwlkZXYgPSBjbGFzc19maW5kX2RldmljZShydGNfY2xhc3MsIE5VTEwsICZzdHIsIGhhc193YWtlYWxhcm0pOworCS8qIElmIHdlIGhhdmUgYSBkZXZpY2UgdGhlbiBzdHIgaXMgdmFsaWQuIFNlZSBoYXNfd2FrZWFsYXJtKCkgKi8KKwlpZiAoZGV2KSB7CiAJCXJ0Y2RldiA9IHJ0Y19jbGFzc19vcGVuKHN0cik7CisJCS8qCisJCSAqIERyb3AgdGhlIHJlZmVyZW5jZSB3ZSBnb3QgaW4gY2xhc3NfZmluZF9kZXZpY2UsCisJCSAqIHJ0Y19vcGVuIHRha2VzIGl0cyBvd24uCisJCSAqLworCQlwdXRfZGV2aWNlKGRldik7CisJfQogCWlmICghcnRjZGV2KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5vIFJUQyBkZXZpY2UgZm91bmQsIEFMQVJNIHRpbWVycyB3aWxsIgogCQkJIiBub3Qgd2FrZSBmcm9tIHN1c3BlbmQiKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL2Nsb2NrZXZlbnRzLmMgYi9rZXJuZWwvdGltZS9jbG9ja2V2ZW50cy5jCmluZGV4IDIyYTlkYTkuLmMwMjdkNGYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL2Nsb2NrZXZlbnRzLmMKKysrIGIva2VybmVsL3RpbWUvY2xvY2tldmVudHMuYwpAQCAtMTk3LDcgKzE5Nyw3IEBACiBzdGF0aWMgdm9pZCBjbG9ja2V2ZW50c19jb25maWcoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2LAogCQkJICAgICAgIHUzMiBmcmVxKQogewotCXVuc2lnbmVkIGxvbmcgc2VjOworCXU2NCBzZWM7CiAKIAlpZiAoIShkZXYtPmZlYXR1cmVzICYgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCkpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMgYi9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCmluZGV4IGQ5ZDVmOGMuLjFjOTVmZDYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKKysrIGIva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYwpAQCAtNjM5LDcgKzYzOSw3IEBACiAgKi8KIHZvaWQgX19jbG9ja3NvdXJjZV91cGRhdGVmcmVxX3NjYWxlKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MsIHUzMiBzY2FsZSwgdTMyIGZyZXEpCiB7Ci0JdW5zaWduZWQgbG9uZyBzZWM7CisJdTY0IHNlYzsKIAogCS8qCiAJICogQ2FsYyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2Vjb25kcyB3aGljaCB3ZSBjYW4gcnVuIGJlZm9yZQpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGljay1icm9hZGNhc3QuYyBiL2tlcm5lbC90aW1lL3RpY2stYnJvYWRjYXN0LmMKaW5kZXggNzIzYzc2My4uYzcyMThkMSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGljay1icm9hZGNhc3QuYworKysgYi9rZXJuZWwvdGltZS90aWNrLWJyb2FkY2FzdC5jCkBAIC00NTYsMjMgKzQ1NiwyNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGNwdTsKIAotCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmdGlja19icm9hZGNhc3RfbG9jaywgZmxhZ3MpOwotCiAJLyoKIAkgKiBQZXJpb2RpYyBtb2RlIGRvZXMgbm90IGNhcmUgYWJvdXQgdGhlIGVudGVyL2V4aXQgb2YgcG93ZXIKIAkgKiBzdGF0ZXMKIAkgKi8KIAlpZiAodGlja19icm9hZGNhc3RfZGV2aWNlLm1vZGUgPT0gVElDS0RFVl9NT0RFX1BFUklPRElDKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuOwogCi0JYmMgPSB0aWNrX2Jyb2FkY2FzdF9kZXZpY2UuZXZ0ZGV2OworCS8qCisJICogV2UgYXJlIGNhbGxlZCB3aXRoIHByZWVtdGlvbiBkaXNhYmxlZCBmcm9tIHRoZSBkZXB0aCBvZiB0aGUKKwkgKiBpZGxlIGNvZGUsIHNvIHdlIGNhbid0IGJlIG1vdmVkIGF3YXkuCisJICovCiAJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXRkID0gJnBlcl9jcHUodGlja19jcHVfZGV2aWNlLCBjcHUpOwogCWRldiA9IHRkLT5ldnRkZXY7CiAKIAlpZiAoIShkZXYtPmZlYXR1cmVzICYgQ0xPQ0tfRVZUX0ZFQVRfQzNTVE9QKSkKLQkJZ290byBvdXQ7CisJCXJldHVybjsKIAorCWJjID0gdGlja19icm9hZGNhc3RfZGV2aWNlLmV2dGRldjsKKworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmdGlja19icm9hZGNhc3RfbG9jaywgZmxhZ3MpOwogCWlmIChyZWFzb24gPT0gQ0xPQ0tfRVZUX05PVElGWV9CUk9BRENBU1RfRU5URVIpIHsKIAkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgdGlja19nZXRfYnJvYWRjYXN0X29uZXNob3RfbWFzaygpKSkgewogCQkJY3B1bWFza19zZXRfY3B1KGNwdSwgdGlja19nZXRfYnJvYWRjYXN0X29uZXNob3RfbWFzaygpKTsKQEAgLTQ4OSw4ICs0OTMsNiBAQAogCQkJCXRpY2tfcHJvZ3JhbV9ldmVudChkZXYtPm5leHRfZXZlbnQsIDEpOwogCQl9CiAJfQotCi1vdXQ6CiAJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpY2tfYnJvYWRjYXN0X2xvY2ssIGZsYWdzKTsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYyBiL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMKaW5kZXggOGU2YTA1YS4uMzQyNDA4YyAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYworKysgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCkBAIC02ODAsNyArNjgwLDcgQEAKIAljbG9ja2V2ZW50c19ub3RpZnkoQ0xPQ0tfRVZUX05PVElGWV9SRVNVTUUsIE5VTEwpOwogCiAJLyogUmVzdW1lIGhydGltZXJzICovCi0JaHJlc190aW1lcnNfcmVzdW1lKCk7CisJaHJ0aW1lcnNfcmVzdW1lKCk7CiB9CiAKIHN0YXRpYyBpbnQgdGltZWtlZXBpbmdfc3VzcGVuZCh2b2lkKQpAQCAtMTA5OSw2ICsxMDk5LDIxIEBACiB9CiAKIC8qKgorICoga3RpbWVfZ2V0X21vbm90b25pY19vZmZzZXQoKSAtIGdldCB3YWxsX3RvX21vbm90b25pYyBpbiBrdGltZV90IGZvcm1hdAorICovCitrdGltZV90IGt0aW1lX2dldF9tb25vdG9uaWNfb2Zmc2V0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBzZXE7CisJc3RydWN0IHRpbWVzcGVjIHd0b207CisKKwlkbyB7CisJCXNlcSA9IHJlYWRfc2VxYmVnaW4oJnh0aW1lX2xvY2spOworCQl3dG9tID0gd2FsbF90b19tb25vdG9uaWM7CisJfSB3aGlsZSAocmVhZF9zZXFyZXRyeSgmeHRpbWVfbG9jaywgc2VxKSk7CisJcmV0dXJuIHRpbWVzcGVjX3RvX2t0aW1lKHd0b20pOworfQorCisvKioKICAqIHh0aW1lX3VwZGF0ZSgpIC0gYWR2YW5jZXMgdGhlIHRpbWVrZWVwaW5nIGluZnJhc3RydWN0dXJlCiAgKiBAdGlja3M6CW51bWJlciBvZiB0aWNrcywgdGhhdCBoYXZlIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgY2FsbC4KICAqCmRpZmYgLS1naXQgYS9rZXJuZWwvd2F0Y2hkb2cuYyBiL2tlcm5lbC93YXRjaGRvZy5jCmluZGV4IDE0NzMzZDQuLjZlNjMwOTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC93YXRjaGRvZy5jCisrKyBiL2tlcm5lbC93YXRjaGRvZy5jCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogCiBpbnQgd2F0Y2hkb2dfZW5hYmxlZCA9IDE7Ci1pbnQgX19yZWFkX21vc3RseSBzb2Z0bG9ja3VwX3RocmVzaCA9IDYwOworaW50IF9fcmVhZF9tb3N0bHkgd2F0Y2hkb2dfdGhyZXNoID0gMTA7CiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCB3YXRjaGRvZ190b3VjaF90cyk7CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHRhc2tfc3RydWN0ICosIHNvZnRsb2NrdXBfd2F0Y2hkb2cpOwpAQCAtOTEsNiArOTEsMTcgQEAKIF9fc2V0dXAoIm5vc29mdGxvY2t1cCIsIG5vc29mdGxvY2t1cF9zZXR1cCk7CiAvKiAgKi8KIAorLyoKKyAqIEhhcmQtbG9ja3VwIHdhcm5pbmdzIHNob3VsZCBiZSB0cmlnZ2VyZWQgYWZ0ZXIganVzdCBhIGZldyBzZWNvbmRzLiBTb2Z0LQorICogbG9ja3VwcyBjYW4gaGF2ZSBmYWxzZSBwb3NpdGl2ZXMgdW5kZXIgZXh0cmVtZSBjb25kaXRpb25zLiBTbyB3ZSBnZW5lcmFsbHkKKyAqIHdhbnQgYSBoaWdoZXIgdGhyZXNob2xkIGZvciBzb2Z0IGxvY2t1cHMgdGhhbiBmb3IgaGFyZCBsb2NrdXBzLiBTbyB3ZSBjb3VwbGUKKyAqIHRoZSB0aHJlc2hvbGRzIHdpdGggYSBmYWN0b3I6IHdlIG1ha2UgdGhlIHNvZnQgdGhyZXNob2xkIHR3aWNlIHRoZSBhbW91bnQgb2YKKyAqIHRpbWUgdGhlIGhhcmQgdGhyZXNob2xkIGlzLgorICovCitzdGF0aWMgaW50IGdldF9zb2Z0bG9ja3VwX3RocmVzaCgpCit7CisJcmV0dXJuIHdhdGNoZG9nX3RocmVzaCAqIDI7Cit9CiAKIC8qCiAgKiBSZXR1cm5zIHNlY29uZHMsIGFwcHJveGltYXRlbHkuICBXZSBkb24ndCBuZWVkIG5hbm9zZWNvbmQKQEAgLTEwNSwxMiArMTE2LDEyIEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfc2FtcGxlX3BlcmlvZCh2b2lkKQogewogCS8qCi0JICogY29udmVydCBzb2Z0bG9ja3VwX3RocmVzaCBmcm9tIHNlY29uZHMgdG8gbnMKKwkgKiBjb252ZXJ0IHdhdGNoZG9nX3RocmVzaCBmcm9tIHNlY29uZHMgdG8gbnMKIAkgKiB0aGUgZGl2aWRlIGJ5IDUgaXMgdG8gZ2l2ZSBocnRpbWVyIDUgY2hhbmNlcyB0bwogCSAqIGluY3JlbWVudCBiZWZvcmUgdGhlIGhhcmRsb2NrdXAgZGV0ZWN0b3IgZ2VuZXJhdGVzCiAJICogYSB3YXJuaW5nCiAJICovCi0JcmV0dXJuIHNvZnRsb2NrdXBfdGhyZXNoIC8gNSAqIE5TRUNfUEVSX1NFQzsKKwlyZXR1cm4gZ2V0X3NvZnRsb2NrdXBfdGhyZXNoKCkgKiAoTlNFQ19QRVJfU0VDIC8gNSk7CiB9CiAKIC8qIENvbW1hbmRzIGZvciByZXNldHRpbmcgdGhlIHdhdGNoZG9nICovCkBAIC0xODIsNyArMTkzLDcgQEAKIAl1bnNpZ25lZCBsb25nIG5vdyA9IGdldF90aW1lc3RhbXAoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAogCS8qIFdhcm4gYWJvdXQgdW5yZWFzb25hYmxlIGRlbGF5czogKi8KLQlpZiAodGltZV9hZnRlcihub3csIHRvdWNoX3RzICsgc29mdGxvY2t1cF90aHJlc2gpKQorCWlmICh0aW1lX2FmdGVyKG5vdywgdG91Y2hfdHMgKyBnZXRfc29mdGxvY2t1cF90aHJlc2goKSkpCiAJCXJldHVybiBub3cgLSB0b3VjaF90czsKIAogCXJldHVybiAwOwpAQCAtMzU5LDcgKzM3MCw3IEBACiAKIAkvKiBUcnkgdG8gcmVnaXN0ZXIgdXNpbmcgaGFyZHdhcmUgcGVyZiBldmVudHMgKi8KIAl3ZF9hdHRyID0gJndkX2h3X2F0dHI7Ci0Jd2RfYXR0ci0+c2FtcGxlX3BlcmlvZCA9IGh3X25taV9nZXRfc2FtcGxlX3BlcmlvZCgpOworCXdkX2F0dHItPnNhbXBsZV9wZXJpb2QgPSBod19ubWlfZ2V0X3NhbXBsZV9wZXJpb2Qod2F0Y2hkb2dfdGhyZXNoKTsKIAlldmVudCA9IHBlcmZfZXZlbnRfY3JlYXRlX2tlcm5lbF9jb3VudGVyKHdkX2F0dHIsIGNwdSwgTlVMTCwgd2F0Y2hkb2dfb3ZlcmZsb3dfY2FsbGJhY2spOwogCWlmICghSVNfRVJSKGV2ZW50KSkgewogCQlwcmludGsoS0VSTl9JTkZPICJOTUkgd2F0Y2hkb2cgZW5hYmxlZCwgdGFrZXMgb25lIGh3LXBtdSBjb3VudGVyLlxuIik7CkBAIC01MDEsMjggKzUxMiwyNSBAQAogLyogc3lzY3RsIGZ1bmN0aW9ucyAqLwogI2lmZGVmIENPTkZJR19TWVNDVEwKIC8qCi0gKiBwcm9jIGhhbmRsZXIgZm9yIC9wcm9jL3N5cy9rZXJuZWwvbm1pX3dhdGNoZG9nCisgKiBwcm9jIGhhbmRsZXIgZm9yIC9wcm9jL3N5cy9rZXJuZWwvbm1pX3dhdGNoZG9nLHdhdGNoZG9nX3RocmVzaAogICovCiAKLWludCBwcm9jX2Rvd2F0Y2hkb2dfZW5hYmxlZChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAotCQkgICAgIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVuZ3RoLCBsb2ZmX3QgKnBwb3MpCitpbnQgcHJvY19kb3dhdGNoZG9nKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCisJCSAgICB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKIHsKLQlwcm9jX2RvaW50dmVjKHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5ndGgsIHBwb3MpOworCWludCByZXQ7CiAKLQlpZiAod3JpdGUpIHsKLQkJaWYgKHdhdGNoZG9nX2VuYWJsZWQpCi0JCQl3YXRjaGRvZ19lbmFibGVfYWxsX2NwdXMoKTsKLQkJZWxzZQotCQkJd2F0Y2hkb2dfZGlzYWJsZV9hbGxfY3B1cygpOwotCX0KLQlyZXR1cm4gMDsKLX0KKwlyZXQgPSBwcm9jX2RvaW50dmVjX21pbm1heCh0YWJsZSwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7CisJaWYgKHJldCB8fCAhd3JpdGUpCisJCWdvdG8gb3V0OwogCi1pbnQgcHJvY19kb3dhdGNoZG9nX3RocmVzaChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAotCQkJICAgICB2b2lkIF9fdXNlciAqYnVmZmVyLAotCQkJICAgICBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKLXsKLQlyZXR1cm4gcHJvY19kb2ludHZlY19taW5tYXgodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpOworCWlmICh3YXRjaGRvZ19lbmFibGVkICYmIHdhdGNoZG9nX3RocmVzaCkKKwkJd2F0Y2hkb2dfZW5hYmxlX2FsbF9jcHVzKCk7CisJZWxzZQorCQl3YXRjaGRvZ19kaXNhYmxlX2FsbF9jcHVzKCk7CisKK291dDoKKwlyZXR1cm4gcmV0OwogfQogI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi8KIApkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcuZGVidWcgYi9saWIvS2NvbmZpZy5kZWJ1ZwppbmRleCAxMGVmNjE5Li4wZWZjZGNhIDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZy5kZWJ1ZworKysgYi9saWIvS2NvbmZpZy5kZWJ1ZwpAQCAtNyw3ICs3LDggQEAKIAkgIGluY2x1ZGVkIGluIHByaW50ayBvdXRwdXQuICBUaGlzIGFsbG93cyB5b3UgdG8gbWVhc3VyZQogCSAgdGhlIGludGVydmFsIGJldHdlZW4ga2VybmVsIG9wZXJhdGlvbnMsIGluY2x1ZGluZyBib290dXAKIAkgIG9wZXJhdGlvbnMuICBUaGlzIGlzIHVzZWZ1bCBmb3IgaWRlbnRpZnlpbmcgbG9uZyBkZWxheXMKLQkgIGluIGtlcm5lbCBzdGFydHVwLgorCSAgaW4ga2VybmVsIHN0YXJ0dXAuICBPciBhZGQgcHJpbnRrLnRpbWU9MSBhdCBib290LXRpbWUuCisJICBTZWUgRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKIAogY29uZmlnIERFRkFVTFRfTUVTU0FHRV9MT0dMRVZFTAogCWludCAiRGVmYXVsdCBtZXNzYWdlIGxvZyBsZXZlbCAoMS03KSIKZGlmZiAtLWdpdCBhL2xpYi92c3ByaW50Zi5jIGIvbGliL3ZzcHJpbnRmLmMKaW5kZXggZGZkNjAxOS4uMWQ2NTlkNyAxMDA2NDQKLS0tIGEvbGliL3ZzcHJpbnRmLmMKKysrIGIvbGliL3ZzcHJpbnRmLmMKQEAgLTExNjEsOCArMTE2MSw3IEBACiAgKiByZXR1cm4gaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIEBzaXplLCB0aGUgcmVzdWx0aW5nCiAgKiBzdHJpbmcgaXMgdHJ1bmNhdGVkLgogICoKLSAqIENhbGwgdGhpcyBmdW5jdGlvbiBpZiB5b3UgYXJlIGFscmVhZHkgZGVhbGluZyB3aXRoIGEgdmFfbGlzdC4KLSAqIFlvdSBwcm9iYWJseSB3YW50IHNucHJpbnRmKCkgaW5zdGVhZC4KKyAqIElmIHlvdSdyZSBub3QgYWxyZWFkeSBkZWFsaW5nIHdpdGggYSB2YV9saXN0IGNvbnNpZGVyIHVzaW5nIHNucHJpbnRmKCkuCiAgKi8KIGludCB2c25wcmludGYoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpCiB7CkBAIC0xMzM2LDggKzEzMzUsNyBAQAogICogdGhlIEBidWYgbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgJ1wwJy4gSWYgQHNpemUgaXMgPT0gMCB0aGUgZnVuY3Rpb24KICAqIHJldHVybnMgMC4KICAqCi0gKiBDYWxsIHRoaXMgZnVuY3Rpb24gaWYgeW91IGFyZSBhbHJlYWR5IGRlYWxpbmcgd2l0aCBhIHZhX2xpc3QuCi0gKiBZb3UgcHJvYmFibHkgd2FudCBzY25wcmludGYoKSBpbnN0ZWFkLgorICogSWYgeW91J3JlIG5vdCBhbHJlYWR5IGRlYWxpbmcgd2l0aCBhIHZhX2xpc3QgY29uc2lkZXIgdXNpbmcgc2NucHJpbnRmKCkuCiAgKgogICogU2VlIHRoZSB2c25wcmludGYoKSBkb2N1bWVudGF0aW9uIGZvciBmb3JtYXQgc3RyaW5nIGV4dGVuc2lvbnMgb3ZlciBDOTkuCiAgKi8KQEAgLTE0MTYsOCArMTQxNCw3IEBACiAgKiBpbnRvIEBidWYuIFVzZSB2c25wcmludGYoKSBvciB2c2NucHJpbnRmKCkgaW4gb3JkZXIgdG8gYXZvaWQKICAqIGJ1ZmZlciBvdmVyZmxvd3MuCiAgKgotICogQ2FsbCB0aGlzIGZ1bmN0aW9uIGlmIHlvdSBhcmUgYWxyZWFkeSBkZWFsaW5nIHdpdGggYSB2YV9saXN0LgotICogWW91IHByb2JhYmx5IHdhbnQgc3ByaW50ZigpIGluc3RlYWQuCisgKiBJZiB5b3UncmUgbm90IGFscmVhZHkgZGVhbGluZyB3aXRoIGEgdmFfbGlzdCBjb25zaWRlciB1c2luZyBzcHJpbnRmKCkuCiAgKgogICogU2VlIHRoZSB2c25wcmludGYoKSBkb2N1bWVudGF0aW9uIGZvciBmb3JtYXQgc3RyaW5nIGV4dGVuc2lvbnMgb3ZlciBDOTkuCiAgKi8KZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA4ZWUzYmQ4Li5iYmI0YTViIDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKKysrIGIvbW0vaHVnZXRsYi5jCkBAIC00NzUsNyArNDc1LDcgQEAKIAogCS8qIElmIHJlc2VydmVzIGNhbm5vdCBiZSB1c2VkLCBlbnN1cmUgZW5vdWdoIHBhZ2VzIGFyZSBpbiB0aGUgcG9vbCAqLwogCWlmIChhdm9pZF9yZXNlcnZlICYmIGgtPmZyZWVfaHVnZV9wYWdlcyAtIGgtPnJlc3ZfaHVnZV9wYWdlcyA9PSAwKQotCQlnb3RvIGVycjs7CisJCWdvdG8gZXJyOwogCiAJZm9yX2VhY2hfem9uZV96b25lbGlzdF9ub2RlbWFzayh6b25lLCB6LCB6b25lbGlzdCwKIAkJCQkJCU1BWF9OUl9aT05FUyAtIDEsIG5vZGVtYXNrKSB7CmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggM2Y4YmNlMi4uOWQ1NDk4ZSAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCisrKyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9rbWVtLmg+CiAjaW5jbHVkZSA8bGludXgvZnRyYWNlX2V2ZW50Lmg+CiAjaW5jbHVkZSA8bGludXgvbWVtY29udHJvbC5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAKICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KQEAgLTM1NDAsNyArMzU0MSw3IEBACiAJCXBjcC0+YmF0Y2ggPSBQQUdFX1NISUZUICogODsKIH0KIAotc3RhdGljIF9fbWVtaW5pdCB2b2lkIHNldHVwX3pvbmVfcGFnZXNldChzdHJ1Y3Qgem9uZSAqem9uZSkKK3N0YXRpYyB2b2lkIHNldHVwX3pvbmVfcGFnZXNldChzdHJ1Y3Qgem9uZSAqem9uZSkKIHsKIAlpbnQgY3B1OwogCmRpZmYgLS1naXQgYS9tbS9wcmlvX3RyZWUuYyBiL21tL3ByaW9fdHJlZS5jCmluZGV4IDYwM2FlOTguLjc5OWRjZmQgMTAwNjQ0Ci0tLSBhL21tL3ByaW9fdHJlZS5jCisrKyBiL21tL3ByaW9fdHJlZS5jCkBAIC0xMyw2ICsxMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3ByaW9fdHJlZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAKIC8qCiAgKiBTZWUgbGliL3ByaW9fdHJlZS5jIGZvciBkZXRhaWxzIG9uIHRoZSBnZW5lcmFsIHJhZGl4IHByaW9yaXR5IHNlYXJjaCB0cmVlCmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCBkZmM3MDY5Li5iYTRhZDI4IDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCisrKyBiL21tL3NobWVtLmMKQEAgLTkxNiwxMSArOTE2LDEyIEBACiAJCQlpZiAoc2l6ZSA+IEVOVFJJRVNfUEVSX1BBR0UpCiAJCQkJc2l6ZSA9IEVOVFJJRVNfUEVSX1BBR0U7CiAJCQlvZmZzZXQgPSBzaG1lbV9maW5kX3N3cChlbnRyeSwgcHRyLCBwdHIrc2l6ZSk7CisJCQlzaG1lbV9zd3BfdW5tYXAocHRyKTsKIAkJCWlmIChvZmZzZXQgPj0gMCkgewogCQkJCXNobWVtX2Rpcl91bm1hcChkaXIpOworCQkJCXB0ciA9IHNobWVtX3N3cF9tYXAoc3ViZGlyKTsKIAkJCQlnb3RvIGZvdW5kOwogCQkJfQotCQkJc2htZW1fc3dwX3VubWFwKHB0cik7CiAJCX0KIAl9CiBsb3N0MToKZGlmZiAtLWdpdCBhL21tL3NsYWIuYyBiL21tL3NsYWIuYwppbmRleCA0NmE5YzE2Li5iY2ZhNDk4IDEwMDY0NAotLS0gYS9tbS9zbGFiLmMKKysrIGIvbW0vc2xhYi5jCkBAIC0xMTUsNiArMTE1LDcgQEAKICNpbmNsdWRlCTxsaW51eC9kZWJ1Z29iamVjdHMuaD4KICNpbmNsdWRlCTxsaW51eC9rbWVtY2hlY2suaD4KICNpbmNsdWRlCTxsaW51eC9tZW1vcnkuaD4KKyNpbmNsdWRlCTxsaW51eC9wcmVmZXRjaC5oPgogCiAjaW5jbHVkZQk8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlCTxhc20vdGxiZmx1c2guaD4KZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuYwppbmRleCA5ZDJlNWU0Li40ZWE3ZjFhIDEwMDY0NAotLS0gYS9tbS9zbHViLmMKKysrIGIvbW0vc2x1Yi5jCkBAIC0yNjEsNiArMjYxLDE4IEBACiAJcmV0dXJuICoodm9pZCAqKikob2JqZWN0ICsgcy0+b2Zmc2V0KTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkICpnZXRfZnJlZXBvaW50ZXJfc2FmZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0KQoreworCXZvaWQgKnA7CisKKyNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DCisJcHJvYmVfa2VybmVsX3JlYWQoJnAsICh2b2lkICoqKShvYmplY3QgKyBzLT5vZmZzZXQpLCBzaXplb2YocCkpOworI2Vsc2UKKwlwID0gZ2V0X2ZyZWVwb2ludGVyKHMsIG9iamVjdCk7CisjZW5kaWYKKwlyZXR1cm4gcDsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIHNldF9mcmVlcG9pbnRlcihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LCB2b2lkICpmcCkKIHsKIAkqKHZvaWQgKiopKG9iamVjdCArIHMtPm9mZnNldCkgPSBmcDsKQEAgLTI3MSwxMCArMjgzLDYgQEAKIAlmb3IgKF9fcCA9IChfX2FkZHIpOyBfX3AgPCAoX19hZGRyKSArIChfX29iamVjdHMpICogKF9fcyktPnNpemU7XAogCQkJX19wICs9IChfX3MpLT5zaXplKQogCi0vKiBTY2FuIGZyZWVsaXN0ICovCi0jZGVmaW5lIGZvcl9lYWNoX2ZyZWVfb2JqZWN0KF9fcCwgX19zLCBfX2ZyZWUpIFwKLQlmb3IgKF9fcCA9IChfX2ZyZWUpOyBfX3A7IF9fcCA9IGdldF9mcmVlcG9pbnRlcigoX19zKSwgX19wKSkKLQogLyogRGV0ZXJtaW5lIG9iamVjdCBpbmRleCBmcm9tIGEgZ2l2ZW4gcG9zaXRpb24gKi8KIHN0YXRpYyBpbmxpbmUgaW50IHNsYWJfaW5kZXgodm9pZCAqcCwgc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKmFkZHIpCiB7CkBAIC0zMzIsNiArMzQwLDIxIEBACiAKICNpZmRlZiBDT05GSUdfU0xVQl9ERUJVRwogLyoKKyAqIERldGVybWluZSBhIG1hcCBvZiBvYmplY3QgaW4gdXNlIG9uIGEgcGFnZS4KKyAqCisgKiBTbGFiIGxvY2sgb3Igbm9kZSBsaXN0bG9jayBtdXN0IGJlIGhlbGQgdG8gZ3VhcmFudGVlIHRoYXQgdGhlIHBhZ2UgZG9lcworICogbm90IHZhbmlzaCBmcm9tIHVuZGVyIHVzLgorICovCitzdGF0aWMgdm9pZCBnZXRfbWFwKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyAqbWFwKQoreworCXZvaWQgKnA7CisJdm9pZCAqYWRkciA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKKworCWZvciAocCA9IHBhZ2UtPmZyZWVsaXN0OyBwOyBwID0gZ2V0X2ZyZWVwb2ludGVyKHMsIHApKQorCQlzZXRfYml0KHNsYWJfaW5kZXgocCwgcywgYWRkciksIG1hcCk7Cit9CisKKy8qCiAgKiBEZWJ1ZyBzZXR0aW5nczoKICAqLwogI2lmZGVmIENPTkZJR19TTFVCX0RFQlVHX09OCkBAIC0xNDg3LDcgKzE1MTAsNyBAQAogCWludCBzZWFyY2hub2RlID0gKG5vZGUgPT0gTlVNQV9OT19OT0RFKSA/IG51bWFfbm9kZV9pZCgpIDogbm9kZTsKIAogCXBhZ2UgPSBnZXRfcGFydGlhbF9ub2RlKGdldF9ub2RlKHMsIHNlYXJjaG5vZGUpKTsKLQlpZiAocGFnZSB8fCBub2RlICE9IC0xKQorCWlmIChwYWdlIHx8IG5vZGUgIT0gTlVNQV9OT19OT0RFKQogCQlyZXR1cm4gcGFnZTsKIAogCXJldHVybiBnZXRfYW55X3BhcnRpYWwocywgZmxhZ3MpOwpAQCAtMTU0MCw3ICsxNTYzLDYgQEAKIAl9CiB9CiAKLSNpZmRlZiBDT05GSUdfQ01QWENIR19MT0NBTAogI2lmZGVmIENPTkZJR19QUkVFTVBUCiAvKgogICogQ2FsY3VsYXRlIHRoZSBuZXh0IGdsb2JhbGx5IHVuaXF1ZSB0cmFuc2FjdGlvbiBmb3IgZGlzYW1iaWd1aWF0aW9uCkBAIC0xNjAwLDE3ICsxNjIyLDEyIEBACiAJc3RhdChzLCBDTVBYQ0hHX0RPVUJMRV9DUFVfRkFJTCk7CiB9CiAKLSNlbmRpZgotCiB2b2lkIGluaXRfa21lbV9jYWNoZV9jcHVzKHN0cnVjdCBrbWVtX2NhY2hlICpzKQogewotI2lmZGVmIENPTkZJR19DTVBYQ0hHX0xPQ0FMCiAJaW50IGNwdTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCiAJCXBlcl9jcHVfcHRyKHMtPmNwdV9zbGFiLCBjcHUpLT50aWQgPSBpbml0X3RpZChjcHUpOwotI2VuZGlmCi0KIH0KIC8qCiAgKiBSZW1vdmUgdGhlIGNwdSBzbGFiCkBAIC0xNjQzLDkgKzE2NjAsNyBAQAogCQlwYWdlLT5pbnVzZS0tOwogCX0KIAljLT5wYWdlID0gTlVMTDsKLSNpZmRlZiBDT05GSUdfQ01QWENIR19MT0NBTAogCWMtPnRpZCA9IG5leHRfdGlkKGMtPnRpZCk7Ci0jZW5kaWYKIAl1bmZyZWV6ZV9zbGFiKHMsIHBhZ2UsIHRhaWwpOwogfQogCkBAIC0xNzc5LDggKzE3OTQsNyBAQAogCQkJICB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBrbWVtX2NhY2hlX2NwdSAqYykKIHsKIAl2b2lkICoqb2JqZWN0OwotCXN0cnVjdCBwYWdlICpuZXc7Ci0jaWZkZWYgQ09ORklHX0NNUFhDSEdfTE9DQUwKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwpAQCAtMTc5MiwzNyArMTgwNiwzNSBAQAogCSAqLwogCWMgPSB0aGlzX2NwdV9wdHIocy0+Y3B1X3NsYWIpOwogI2VuZGlmCi0jZW5kaWYKIAogCS8qIFdlIGhhbmRsZSBfX0dGUF9aRVJPIGluIHRoZSBjYWxsZXIgKi8KIAlnZnBmbGFncyAmPSB+X19HRlBfWkVSTzsKIAotCWlmICghYy0+cGFnZSkKKwlwYWdlID0gYy0+cGFnZTsKKwlpZiAoIXBhZ2UpCiAJCWdvdG8gbmV3X3NsYWI7CiAKLQlzbGFiX2xvY2soYy0+cGFnZSk7CisJc2xhYl9sb2NrKHBhZ2UpOwogCWlmICh1bmxpa2VseSghbm9kZV9tYXRjaChjLCBub2RlKSkpCiAJCWdvdG8gYW5vdGhlcl9zbGFiOwogCiAJc3RhdChzLCBBTExPQ19SRUZJTEwpOwogCiBsb2FkX2ZyZWVsaXN0OgotCW9iamVjdCA9IGMtPnBhZ2UtPmZyZWVsaXN0OworCW9iamVjdCA9IHBhZ2UtPmZyZWVsaXN0OwogCWlmICh1bmxpa2VseSghb2JqZWN0KSkKIAkJZ290byBhbm90aGVyX3NsYWI7CiAJaWYgKGttZW1fY2FjaGVfZGVidWcocykpCiAJCWdvdG8gZGVidWc7CiAKIAljLT5mcmVlbGlzdCA9IGdldF9mcmVlcG9pbnRlcihzLCBvYmplY3QpOwotCWMtPnBhZ2UtPmludXNlID0gYy0+cGFnZS0+b2JqZWN0czsKLQljLT5wYWdlLT5mcmVlbGlzdCA9IE5VTEw7Ci0JYy0+bm9kZSA9IHBhZ2VfdG9fbmlkKGMtPnBhZ2UpOworCXBhZ2UtPmludXNlID0gcGFnZS0+b2JqZWN0czsKKwlwYWdlLT5mcmVlbGlzdCA9IE5VTEw7CisKIHVubG9ja19vdXQ6Ci0Jc2xhYl91bmxvY2soYy0+cGFnZSk7Ci0jaWZkZWYgQ09ORklHX0NNUFhDSEdfTE9DQUwKKwlzbGFiX3VubG9jayhwYWdlKTsKIAljLT50aWQgPSBuZXh0X3RpZChjLT50aWQpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLSNlbmRpZgogCXN0YXQocywgQUxMT0NfU0xPV1BBVEgpOwogCXJldHVybiBvYmplY3Q7CiAKQEAgLTE4MzAsMTAgKzE4NDIsMTEgQEAKIAlkZWFjdGl2YXRlX3NsYWIocywgYyk7CiAKIG5ld19zbGFiOgotCW5ldyA9IGdldF9wYXJ0aWFsKHMsIGdmcGZsYWdzLCBub2RlKTsKLQlpZiAobmV3KSB7Ci0JCWMtPnBhZ2UgPSBuZXc7CisJcGFnZSA9IGdldF9wYXJ0aWFsKHMsIGdmcGZsYWdzLCBub2RlKTsKKwlpZiAocGFnZSkgewogCQlzdGF0KHMsIEFMTE9DX0ZST01fUEFSVElBTCk7CisJCWMtPm5vZGUgPSBwYWdlX3RvX25pZChwYWdlKTsKKwkJYy0+cGFnZSA9IHBhZ2U7CiAJCWdvdG8gbG9hZF9mcmVlbGlzdDsKIAl9CiAKQEAgLTE4NDEsMzMgKzE4NTQsMzUgQEAKIAlpZiAoZ2ZwZmxhZ3MgJiBfX0dGUF9XQUlUKQogCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKLQluZXcgPSBuZXdfc2xhYihzLCBnZnBmbGFncywgbm9kZSk7CisJcGFnZSA9IG5ld19zbGFiKHMsIGdmcGZsYWdzLCBub2RlKTsKIAogCWlmIChnZnBmbGFncyAmIF9fR0ZQX1dBSVQpCiAJCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAKLQlpZiAobmV3KSB7CisJaWYgKHBhZ2UpIHsKIAkJYyA9IF9fdGhpc19jcHVfcHRyKHMtPmNwdV9zbGFiKTsKIAkJc3RhdChzLCBBTExPQ19TTEFCKTsKIAkJaWYgKGMtPnBhZ2UpCiAJCQlmbHVzaF9zbGFiKHMsIGMpOwotCQlzbGFiX2xvY2sobmV3KTsKLQkJX19TZXRQYWdlU2x1YkZyb3plbihuZXcpOwotCQljLT5wYWdlID0gbmV3OworCisJCXNsYWJfbG9jayhwYWdlKTsKKwkJX19TZXRQYWdlU2x1YkZyb3plbihwYWdlKTsKKwkJYy0+bm9kZSA9IHBhZ2VfdG9fbmlkKHBhZ2UpOworCQljLT5wYWdlID0gcGFnZTsKIAkJZ290byBsb2FkX2ZyZWVsaXN0OwogCX0KIAlpZiAoIShnZnBmbGFncyAmIF9fR0ZQX05PV0FSTikgJiYgcHJpbnRrX3JhdGVsaW1pdCgpKQogCQlzbGFiX291dF9vZl9tZW1vcnkocywgZ2ZwZmxhZ3MsIG5vZGUpOwotI2lmZGVmIENPTkZJR19DTVBYQ0hHX0xPQ0FMCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotI2VuZGlmCiAJcmV0dXJuIE5VTEw7CiBkZWJ1ZzoKLQlpZiAoIWFsbG9jX2RlYnVnX3Byb2Nlc3NpbmcocywgYy0+cGFnZSwgb2JqZWN0LCBhZGRyKSkKKwlpZiAoIWFsbG9jX2RlYnVnX3Byb2Nlc3NpbmcocywgcGFnZSwgb2JqZWN0LCBhZGRyKSkKIAkJZ290byBhbm90aGVyX3NsYWI7CiAKLQljLT5wYWdlLT5pbnVzZSsrOwotCWMtPnBhZ2UtPmZyZWVsaXN0ID0gZ2V0X2ZyZWVwb2ludGVyKHMsIG9iamVjdCk7CisJcGFnZS0+aW51c2UrKzsKKwlwYWdlLT5mcmVlbGlzdCA9IGdldF9mcmVlcG9pbnRlcihzLCBvYmplY3QpOworCWRlYWN0aXZhdGVfc2xhYihzLCBjKTsKKwljLT5wYWdlID0gTlVMTDsKIAljLT5ub2RlID0gTlVNQV9OT19OT0RFOwogCWdvdG8gdW5sb2NrX291dDsKIH0KQEAgLTE4ODcsMjAgKzE5MDIsMTIgQEAKIHsKIAl2b2lkICoqb2JqZWN0OwogCXN0cnVjdCBrbWVtX2NhY2hlX2NwdSAqYzsKLSNpZmRlZiBDT05GSUdfQ01QWENIR19MT0NBTAogCXVuc2lnbmVkIGxvbmcgdGlkOwotI2Vsc2UKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotI2VuZGlmCiAKIAlpZiAoc2xhYl9wcmVfYWxsb2NfaG9vayhzLCBnZnBmbGFncykpCiAJCXJldHVybiBOVUxMOwogCi0jaWZuZGVmIENPTkZJR19DTVBYQ0hHX0xPQ0FMCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotI2Vsc2UKIHJlZG86Ci0jZW5kaWYKIAogCS8qCiAJICogTXVzdCByZWFkIGttZW1fY2FjaGUgY3B1IGRhdGEgdmlhIHRoaXMgY3B1IHB0ci4gUHJlZW1wdGlvbiBpcwpAQCAtMTkxMCw3ICsxOTE3LDYgQEAKIAkgKi8KIAljID0gX190aGlzX2NwdV9wdHIocy0+Y3B1X3NsYWIpOwogCi0jaWZkZWYgQ09ORklHX0NNUFhDSEdfTE9DQUwKIAkvKgogCSAqIFRoZSB0cmFuc2FjdGlvbiBpZHMgYXJlIGdsb2JhbGx5IHVuaXF1ZSBwZXIgY3B1IGFuZCBwZXIgb3BlcmF0aW9uIG9uCiAJICogYSBwZXIgY3B1IHF1ZXVlLiBUaHVzIHRoZXkgY2FuIGJlIGd1YXJhbnRlZSB0aGF0IHRoZSBjbXB4Y2hnX2RvdWJsZQpAQCAtMTkxOSw3ICsxOTI1LDYgQEAKIAkgKi8KIAl0aWQgPSBjLT50aWQ7CiAJYmFycmllcigpOwotI2VuZGlmCiAKIAlvYmplY3QgPSBjLT5mcmVlbGlzdDsKIAlpZiAodW5saWtlbHkoIW9iamVjdCB8fCAhbm9kZV9tYXRjaChjLCBub2RlKSkpCkBAIC0xOTI3LDcgKzE5MzIsNiBAQAogCQlvYmplY3QgPSBfX3NsYWJfYWxsb2MocywgZ2ZwZmxhZ3MsIG5vZGUsIGFkZHIsIGMpOwogCiAJZWxzZSB7Ci0jaWZkZWYgQ09ORklHX0NNUFhDSEdfTE9DQUwKIAkJLyoKIAkJICogVGhlIGNtcHhjaGcgd2lsbCBvbmx5IG1hdGNoIGlmIHRoZXJlIHdhcyBubyBhZGRpdGlvbmFsCiAJCSAqIG9wZXJhdGlvbiBhbmQgaWYgd2UgYXJlIG9uIHRoZSByaWdodCBwcm9jZXNzb3IuCkBAIC0xOTQzLDIxICsxOTQ3LDE0IEBACiAJCWlmICh1bmxpa2VseSghaXJxc2FmZV9jcHVfY21weGNoZ19kb3VibGUoCiAJCQkJcy0+Y3B1X3NsYWItPmZyZWVsaXN0LCBzLT5jcHVfc2xhYi0+dGlkLAogCQkJCW9iamVjdCwgdGlkLAotCQkJCWdldF9mcmVlcG9pbnRlcihzLCBvYmplY3QpLCBuZXh0X3RpZCh0aWQpKSkpIHsKKwkJCQlnZXRfZnJlZXBvaW50ZXJfc2FmZShzLCBvYmplY3QpLCBuZXh0X3RpZCh0aWQpKSkpIHsKIAogCQkJbm90ZV9jbXB4Y2hnX2ZhaWx1cmUoInNsYWJfYWxsb2MiLCBzLCB0aWQpOwogCQkJZ290byByZWRvOwogCQl9Ci0jZWxzZQotCQljLT5mcmVlbGlzdCA9IGdldF9mcmVlcG9pbnRlcihzLCBvYmplY3QpOwotI2VuZGlmCiAJCXN0YXQocywgQUxMT0NfRkFTVFBBVEgpOwogCX0KIAotI2lmbmRlZiBDT05GSUdfQ01QWENIR19MT0NBTAotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLSNlbmRpZgotCiAJaWYgKHVubGlrZWx5KGdmcGZsYWdzICYgX19HRlBfWkVSTykgJiYgb2JqZWN0KQogCQltZW1zZXQob2JqZWN0LCAwLCBzLT5vYmpzaXplKTsKIApAQCAtMjAzNCwxOCArMjAzMSwxNSBAQAogewogCXZvaWQgKnByaW9yOwogCXZvaWQgKipvYmplY3QgPSAodm9pZCAqKXg7Ci0jaWZkZWYgQ09ORklHX0NNUFhDSEdfTE9DQUwKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotI2VuZGlmCiAJc2xhYl9sb2NrKHBhZ2UpOwogCXN0YXQocywgRlJFRV9TTE9XUEFUSCk7CiAKLQlpZiAoa21lbV9jYWNoZV9kZWJ1ZyhzKSkKLQkJZ290byBkZWJ1ZzsKKwlpZiAoa21lbV9jYWNoZV9kZWJ1ZyhzKSAmJiAhZnJlZV9kZWJ1Z19wcm9jZXNzaW5nKHMsIHBhZ2UsIHgsIGFkZHIpKQorCQlnb3RvIG91dF91bmxvY2s7CiAKLWNoZWNrc19vazoKIAlwcmlvciA9IHBhZ2UtPmZyZWVsaXN0OwogCXNldF9mcmVlcG9pbnRlcihzLCBvYmplY3QsIHByaW9yKTsKIAlwYWdlLT5mcmVlbGlzdCA9IG9iamVjdDsKQEAgLTIwNzAsOSArMjA2NCw3IEBACiAKIG91dF91bmxvY2s6CiAJc2xhYl91bmxvY2socGFnZSk7Ci0jaWZkZWYgQ09ORklHX0NNUFhDSEdfTE9DQUwKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0jZW5kaWYKIAlyZXR1cm47CiAKIHNsYWJfZW1wdHk6CkBAIC0yMDg0LDE3ICsyMDc2LDkgQEAKIAkJc3RhdChzLCBGUkVFX1JFTU9WRV9QQVJUSUFMKTsKIAl9CiAJc2xhYl91bmxvY2socGFnZSk7Ci0jaWZkZWYgQ09ORklHX0NNUFhDSEdfTE9DQUwKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0jZW5kaWYKIAlzdGF0KHMsIEZSRUVfU0xBQik7CiAJZGlzY2FyZF9zbGFiKHMsIHBhZ2UpOwotCXJldHVybjsKLQotZGVidWc6Ci0JaWYgKCFmcmVlX2RlYnVnX3Byb2Nlc3NpbmcocywgcGFnZSwgeCwgYWRkcikpCi0JCWdvdG8gb3V0X3VubG9jazsKLQlnb3RvIGNoZWNrc19vazsKIH0KIAogLyoKQEAgLTIxMTMsMjAgKzIwOTcsMTEgQEAKIHsKIAl2b2lkICoqb2JqZWN0ID0gKHZvaWQgKil4OwogCXN0cnVjdCBrbWVtX2NhY2hlX2NwdSAqYzsKLSNpZmRlZiBDT05GSUdfQ01QWENIR19MT0NBTAogCXVuc2lnbmVkIGxvbmcgdGlkOwotI2Vsc2UKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotI2VuZGlmCiAKIAlzbGFiX2ZyZWVfaG9vayhzLCB4KTsKIAotI2lmbmRlZiBDT05GSUdfQ01QWENIR19MT0NBTAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotI2Vsc2UKIHJlZG86Ci0jZW5kaWYKIAogCS8qCiAJICogRGV0ZXJtaW5lIHRoZSBjdXJyZW50bHkgY3B1cyBwZXIgY3B1IHNsYWIuCkBAIC0yMTM2LDE1ICsyMTExLDEyIEBACiAJICovCiAJYyA9IF9fdGhpc19jcHVfcHRyKHMtPmNwdV9zbGFiKTsKIAotI2lmZGVmIENPTkZJR19DTVBYQ0hHX0xPQ0FMCiAJdGlkID0gYy0+dGlkOwogCWJhcnJpZXIoKTsKLSNlbmRpZgogCi0JaWYgKGxpa2VseShwYWdlID09IGMtPnBhZ2UgJiYgYy0+bm9kZSAhPSBOVU1BX05PX05PREUpKSB7CisJaWYgKGxpa2VseShwYWdlID09IGMtPnBhZ2UpKSB7CiAJCXNldF9mcmVlcG9pbnRlcihzLCBvYmplY3QsIGMtPmZyZWVsaXN0KTsKIAotI2lmZGVmIENPTkZJR19DTVBYQ0hHX0xPQ0FMCiAJCWlmICh1bmxpa2VseSghaXJxc2FmZV9jcHVfY21weGNoZ19kb3VibGUoCiAJCQkJcy0+Y3B1X3NsYWItPmZyZWVsaXN0LCBzLT5jcHVfc2xhYi0+dGlkLAogCQkJCWMtPmZyZWVsaXN0LCB0aWQsCkBAIC0yMTUzLDE2ICsyMTI1LDEwIEBACiAJCQlub3RlX2NtcHhjaGdfZmFpbHVyZSgic2xhYl9mcmVlIiwgcywgdGlkKTsKIAkJCWdvdG8gcmVkbzsKIAkJfQotI2Vsc2UKLQkJYy0+ZnJlZWxpc3QgPSBvYmplY3Q7Ci0jZW5kaWYKIAkJc3RhdChzLCBGUkVFX0ZBU1RQQVRIKTsKIAl9IGVsc2UKIAkJX19zbGFiX2ZyZWUocywgcGFnZSwgeCwgYWRkcik7CiAKLSNpZm5kZWYgQ09ORklHX0NNUFhDSEdfTE9DQUwKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0jZW5kaWYKIH0KIAogdm9pZCBrbWVtX2NhY2hlX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKngpCkBAIC0yNjczLDkgKzI2MzksOCBAQAogCQlyZXR1cm47CiAJc2xhYl9lcnIocywgcGFnZSwgIiVzIiwgdGV4dCk7CiAJc2xhYl9sb2NrKHBhZ2UpOwotCWZvcl9lYWNoX2ZyZWVfb2JqZWN0KHAsIHMsIHBhZ2UtPmZyZWVsaXN0KQotCQlzZXRfYml0KHNsYWJfaW5kZXgocCwgcywgYWRkciksIG1hcCk7CiAKKwlnZXRfbWFwKHMsIHBhZ2UsIG1hcCk7CiAJZm9yX2VhY2hfb2JqZWN0KHAsIHMsIGFkZHIsIHBhZ2UtPm9iamVjdHMpIHsKIAogCQlpZiAoIXRlc3RfYml0KHNsYWJfaW5kZXgocCwgcywgYWRkciksIG1hcCkpIHsKQEAgLTMyMDMsNyArMzE2OCw3IEBACiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZuLT5wYXJ0aWFsLCBscnUpCiAJCQkJcC0+c2xhYiA9IHM7CiAKLSNpZmRlZiBDT05GSUdfU0xBQl9ERUJVRworI2lmZGVmIENPTkZJR19TTFVCX0RFQlVHCiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZuLT5mdWxsLCBscnUpCiAJCQkJcC0+c2xhYiA9IHM7CiAjZW5kaWYKQEAgLTM2MTAsMTAgKzM1NzUsMTEgQEAKIAkvKiBOb3cgd2Uga25vdyB0aGF0IGEgdmFsaWQgZnJlZWxpc3QgZXhpc3RzICovCiAJYml0bWFwX3plcm8obWFwLCBwYWdlLT5vYmplY3RzKTsKIAotCWZvcl9lYWNoX2ZyZWVfb2JqZWN0KHAsIHMsIHBhZ2UtPmZyZWVsaXN0KSB7Ci0JCXNldF9iaXQoc2xhYl9pbmRleChwLCBzLCBhZGRyKSwgbWFwKTsKLQkJaWYgKCFjaGVja19vYmplY3QocywgcGFnZSwgcCwgU0xVQl9SRURfSU5BQ1RJVkUpKQotCQkJcmV0dXJuIDA7CisJZ2V0X21hcChzLCBwYWdlLCBtYXApOworCWZvcl9lYWNoX29iamVjdChwLCBzLCBhZGRyLCBwYWdlLT5vYmplY3RzKSB7CisJCWlmICh0ZXN0X2JpdChzbGFiX2luZGV4KHAsIHMsIGFkZHIpLCBtYXApKQorCQkJaWYgKCFjaGVja19vYmplY3QocywgcGFnZSwgcCwgU0xVQl9SRURfSU5BQ1RJVkUpKQorCQkJCXJldHVybiAwOwogCX0KIAogCWZvcl9lYWNoX29iamVjdChwLCBzLCBhZGRyLCBwYWdlLT5vYmplY3RzKQpAQCAtMzgyMSw4ICszNzg3LDcgQEAKIAl2b2lkICpwOwogCiAJYml0bWFwX3plcm8obWFwLCBwYWdlLT5vYmplY3RzKTsKLQlmb3JfZWFjaF9mcmVlX29iamVjdChwLCBzLCBwYWdlLT5mcmVlbGlzdCkKLQkJc2V0X2JpdChzbGFiX2luZGV4KHAsIHMsIGFkZHIpLCBtYXApOworCWdldF9tYXAocywgcGFnZSwgbWFwKTsKIAogCWZvcl9lYWNoX29iamVjdChwLCBzLCBhZGRyLCBwYWdlLT5vYmplY3RzKQogCQlpZiAoIXRlc3RfYml0KHNsYWJfaW5kZXgocCwgcywgYWRkciksIG1hcCkpCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDhiZmQ0NTAuLmM5MTc3MjAgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCisrKyBiL21tL3Ztc2Nhbi5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXlhY2N0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvb29tLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgpkaWZmIC0tZ2l0IGEvbmV0LzgwMi9nYXJwLmMgYi9uZXQvODAyL2dhcnAuYwppbmRleCBjMWRmMmRhLi4xNjEwMjk1IDEwMDY0NAotLS0gYS9uZXQvODAyL2dhcnAuYworKysgYi9uZXQvODAyL2dhcnAuYwpAQCAtNTU0LDggKzU1NCw3IEBACiAJCQlyZXR1cm47CiAJfQogCXJjdV9hc3NpZ25fcG9pbnRlcihkZXYtPmdhcnBfcG9ydCwgTlVMTCk7Ci0Jc3luY2hyb25pemVfcmN1KCk7Ci0Ja2ZyZWUocG9ydCk7CisJa2ZyZWVfcmN1KHBvcnQsIHJjdSk7CiB9CiAKIGludCBnYXJwX2luaXRfYXBwbGljYW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBnYXJwX2FwcGxpY2F0aW9uICphcHBsKQpAQCAtNjA3LDcgKzYwNiw2IEBACiAJQVNTRVJUX1JUTkwoKTsKIAogCXJjdV9hc3NpZ25fcG9pbnRlcihwb3J0LT5hcHBsaWNhbnRzW2FwcGwtPnR5cGVdLCBOVUxMKTsKLQlzeW5jaHJvbml6ZV9yY3UoKTsKIAogCS8qIERlbGV0ZSB0aW1lciBhbmQgZ2VuZXJhdGUgYSBmaW5hbCBUUkFOU01JVF9QRFUgZXZlbnQgdG8gZmx1c2ggb3V0CiAJICogYWxsIHBlbmRpbmcgbWVzc2FnZXMgYmVmb3JlIHRoZSBhcHBsaWNhbnQgaXMgZ29uZS4gKi8KQEAgLTYxNyw3ICs2MTUsNyBAQAogCWdhcnBfcXVldWVfeG1pdChhcHApOwogCiAJZGV2X21jX2RlbChkZXYsIGFwcGwtPnByb3RvLmdyb3VwX2FkZHJlc3MpOwotCWtmcmVlKGFwcCk7CisJa2ZyZWVfcmN1KGFwcCwgcmN1KTsKIAlnYXJwX3JlbGVhc2VfcG9ydChkZXYpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2FycF91bmluaXRfYXBwbGljYW50KTsKZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmMgYi9uZXQvODAyMXEvdmxhbi5jCmluZGV4IDBlYjFhODguLmIyMjc0ZDEgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuLmMKKysrIGIvbmV0LzgwMjFxL3ZsYW4uYwpAQCAtNDksMTEgKzQ5LDYgQEAKIHN0YXRpYyBjb25zdCBjaGFyIHZsYW5fY29weXJpZ2h0W10gPSAiQmVuIEdyZWVhciA8Z3JlZWFyYkBjYW5kZWxhdGVjaC5jb20+IjsKIHN0YXRpYyBjb25zdCBjaGFyIHZsYW5fYnVnZ3lyaWdodFtdID0gIkRhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AcmVkaGF0LmNvbT4iOwogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHZsYW5fcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKLQkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QXzgwMjFRKSwKLQkuZnVuYyA9IHZsYW5fc2tiX3JlY3YsIC8qIFZMQU4gcmVjZWl2ZSBtZXRob2QgKi8KLX07Ci0KIC8qIEVuZCBvZiBnbG9iYWwgdmFyaWFibGVzIGRlZmluaXRpb25zLiAqLwogCiBzdGF0aWMgdm9pZCB2bGFuX2dyb3VwX2ZyZWUoc3RydWN0IHZsYW5fZ3JvdXAgKmdycCkKQEAgLTEyOCw5ICsxMjMsMTAgQEAKIAkJdmxhbl9ndnJwX3JlcXVlc3RfbGVhdmUoZGV2KTsKIAogCXZsYW5fZ3JvdXBfc2V0X2RldmljZShncnAsIHZsYW5faWQsIE5VTEwpOwotCWlmICghZ3JwLT5raWxsYWxsKQotCQlzeW5jaHJvbml6ZV9uZXQoKTsKLQorCS8qIEJlY2F1c2UgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoKSBtYWtlcyBzdXJlIGF0IGxlYXN0IG9uZSByY3UKKwkgKiBncmFjZSBwZXJpb2QgaXMgcmVzcGVjdGVkIGJlZm9yZSBkZXZpY2UgZnJlZWluZywKKwkgKiB3ZSBkb250IG5lZWQgdG8gY2FsbCBzeW5jaHJvbml6ZV9uZXQoKSBoZXJlLgorCSAqLwogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKGRldiwgaGVhZCk7CiAKIAkvKiBJZiB0aGUgZ3JvdXAgaXMgbm93IGVtcHR5LCBraWxsIG9mZiB0aGUgZ3JvdXAuICovCkBAIC0zMzAsMTAgKzMyNiw2IEBACiBzdGF0aWMgdm9pZCB2bGFuX3RyYW5zZmVyX2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKnZsYW5kZXYpCiB7Ci0JdTMyIG9sZF9mZWF0dXJlcyA9IHZsYW5kZXYtPmZlYXR1cmVzOwotCi0JdmxhbmRldi0+ZmVhdHVyZXMgJj0gfmRldi0+dmxhbl9mZWF0dXJlczsKLQl2bGFuZGV2LT5mZWF0dXJlcyB8PSBkZXYtPmZlYXR1cmVzICYgZGV2LT52bGFuX2ZlYXR1cmVzOwogCXZsYW5kZXYtPmdzb19tYXhfc2l6ZSA9IGRldi0+Z3NvX21heF9zaXplOwogCiAJaWYgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX1ZMQU5fVFgpCkBAIC0zNDQsOCArMzM2LDggQEAKICNpZiBkZWZpbmVkKENPTkZJR19GQ09FKSB8fCBkZWZpbmVkKENPTkZJR19GQ09FX01PRFVMRSkKIAl2bGFuZGV2LT5mY29lX2RkcF94aWQgPSBkZXYtPmZjb2VfZGRwX3hpZDsKICNlbmRpZgotCWlmIChvbGRfZmVhdHVyZXMgIT0gdmxhbmRldi0+ZmVhdHVyZXMpCi0JCW5ldGRldl9mZWF0dXJlc19jaGFuZ2UodmxhbmRldik7CisKKwluZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKHZsYW5kZXYpOwogfQogCiBzdGF0aWMgdm9pZCBfX3ZsYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnQpCkBAIC00OTAsOSArNDgyLDYgQEAKIAkJaWYgKGRldi0+cmVnX3N0YXRlICE9IE5FVFJFR19VTlJFR0lTVEVSSU5HKQogCQkJYnJlYWs7CiAKLQkJLyogRGVsZXRlIGFsbCBWTEFOcyBmb3IgdGhpcyBkZXYuICovCi0JCWdycC0+a2lsbGFsbCA9IDE7Ci0KIAkJZm9yIChpID0gMDsgaSA8IFZMQU5fTl9WSUQ7IGkrKykgewogCQkJdmxhbmRldiA9IHZsYW5fZ3JvdXBfZ2V0X2RldmljZShncnAsIGkpOwogCQkJaWYgKCF2bGFuZGV2KQpAQCAtNTExLDYgKzUwMCwxOCBAQAogCWNhc2UgTkVUREVWX1BSRV9UWVBFX0NIQU5HRToKIAkJLyogRm9yYmlkIHVuZGVybGF5aW5nIGRldmljZSB0byBjaGFuZ2UgaXRzIHR5cGUuICovCiAJCXJldHVybiBOT1RJRllfQkFEOworCisJY2FzZSBORVRERVZfTk9USUZZX1BFRVJTOgorCWNhc2UgTkVUREVWX0JPTkRJTkdfRkFJTE9WRVI6CisJCS8qIFByb3BhZ2F0ZSB0byB2bGFuIGRldmljZXMgKi8KKwkJZm9yIChpID0gMDsgaSA8IFZMQU5fTl9WSUQ7IGkrKykgeworCQkJdmxhbmRldiA9IHZsYW5fZ3JvdXBfZ2V0X2RldmljZShncnAsIGkpOworCQkJaWYgKCF2bGFuZGV2KQorCQkJCWNvbnRpbnVlOworCisJCQljYWxsX25ldGRldmljZV9ub3RpZmllcnMoZXZlbnQsIHZsYW5kZXYpOworCQl9CisJCWJyZWFrOwogCX0KIAogb3V0OgpAQCAtNjkxLDcgKzY5Miw2IEBACiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXJyNDsKIAotCWRldl9hZGRfcGFjaygmdmxhbl9wYWNrZXRfdHlwZSk7CiAJdmxhbl9pb2N0bF9zZXQodmxhbl9pb2N0bF9oYW5kbGVyKTsKIAlyZXR1cm4gMDsKIApAQCAtNzEyLDggKzcxMiw2IEBACiAKIAl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmdmxhbl9ub3RpZmllcl9ibG9jayk7CiAKLQlkZXZfcmVtb3ZlX3BhY2soJnZsYW5fcGFja2V0X3R5cGUpOwotCiAJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZ2bGFuX25ldF9vcHMpOwogCXJjdV9iYXJyaWVyKCk7IC8qIFdhaXQgZm9yIGNvbXBsZXRpb24gb2YgY2FsbF9yY3UoKSdzICovCiAKZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmggYi9uZXQvODAyMXEvdmxhbi5oCmluZGV4IDU2ODdjOWIuLmMzNDA4ZGUgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuLmgKKysrIGIvbmV0LzgwMjFxL3ZsYW4uaApAQCAtNzUsOCArNzUsNiBAQAogfQogCiAvKiBmb3VuZCBpbiB2bGFuX2Rldi5jICovCi1pbnQgdmxhbl9za2JfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2Rldik7CiB2b2lkIHZsYW5fZGV2X3NldF9pbmdyZXNzX3ByaW9yaXR5KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICAgdTMyIHNrYl9wcmlvLCB1MTYgdmxhbl9wcmlvKTsKIGludCB2bGFuX2Rldl9zZXRfZWdyZXNzX3ByaW9yaXR5KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbl9jb3JlLmMgYi9uZXQvODAyMXEvdmxhbl9jb3JlLmMKaW5kZXggY2U4ZTNhYi4uNDE0OTVkYzIgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuX2NvcmUuYworKysgYi9uZXQvODAyMXEvdmxhbl9jb3JlLmMKQEAgLTQsNyArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbmV0cG9sbC5oPgogI2luY2x1ZGUgInZsYW4uaCIKIAotYm9vbCB2bGFuX2h3YWNjZWxfZG9fcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqKnNrYnApCitib29sIHZsYW5fZG9fcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqKnNrYnApCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9ICpza2JwOwogCXUxNiB2bGFuX2lkID0gc2tiLT52bGFuX3RjaSAmIFZMQU5fVklEX01BU0s7CkBAIC04OCwzICs4OCw4NiBAQAogCXJldHVybiBuYXBpX2dyb19mcmFncyhuYXBpKTsKIH0KIEVYUE9SVF9TWU1CT0wodmxhbl9ncm9fZnJhZ3MpOworCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnZsYW5fY2hlY2tfcmVvcmRlcl9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpZiAodmxhbl9kZXZfaW5mbyhza2ItPmRldiktPmZsYWdzICYgVkxBTl9GTEFHX1JFT1JERVJfSERSKSB7CisJCWlmIChza2JfY293KHNrYiwgc2tiX2hlYWRyb29tKHNrYikpIDwgMCkKKwkJCXNrYiA9IE5VTEw7CisJCWlmIChza2IpIHsKKwkJCS8qIExpZnRlZCBmcm9tIEdsZWIncyBWTEFOIGNvZGUuLi4gKi8KKwkJCW1lbW1vdmUoc2tiLT5kYXRhIC0gRVRIX0hMRU4sCisJCQkJc2tiLT5kYXRhIC0gVkxBTl9FVEhfSExFTiwgMTIpOworCQkJc2tiLT5tYWNfaGVhZGVyICs9IFZMQU5fSExFTjsKKwkJfQorCX0KKwlyZXR1cm4gc2tiOworfQorCitzdGF0aWMgdm9pZCB2bGFuX3NldF9lbmNhcF9wcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgdmxhbl9oZHIgKnZoZHIpCit7CisJX19iZTE2IHByb3RvOworCXVuc2lnbmVkIGNoYXIgKnJhd3A7CisKKwkvKgorCSAqIFdhcyBhIFZMQU4gcGFja2V0LCBncmFiIHRoZSBlbmNhcHN1bGF0ZWQgcHJvdG9jb2wsIHdoaWNoIHRoZSBsYXllcgorCSAqIHRocmVlIHByb3RvY29scyBjYXJlIGFib3V0LgorCSAqLworCisJcHJvdG8gPSB2aGRyLT5oX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvOworCWlmIChudG9ocyhwcm90bykgPj0gMTUzNikgeworCQlza2ItPnByb3RvY29sID0gcHJvdG87CisJCXJldHVybjsKKwl9CisKKwlyYXdwID0gc2tiLT5kYXRhOworCWlmICgqKHVuc2lnbmVkIHNob3J0ICopIHJhd3AgPT0gMHhGRkZGKQorCQkvKgorCQkgKiBUaGlzIGlzIGEgbWFnaWMgaGFjayB0byBzcG90IElQWCBwYWNrZXRzLiBPbGRlciBOb3ZlbGwKKwkJICogYnJlYWtzIHRoZSBwcm90b2NvbCBkZXNpZ24gYW5kIHJ1bnMgSVBYIG92ZXIgODAyLjMgd2l0aG91dAorCQkgKiBhbiA4MDIuMiBMTEMgbGF5ZXIuIFdlIGxvb2sgZm9yIEZGRkYgd2hpY2ggaXNuJ3QgYSB1c2VkCisJCSAqIDgwMi4yIFNTQVAvRFNBUC4gVGhpcyB3b24ndCB3b3JrIGZvciBmYXVsdCB0b2xlcmFudCBuZXR3YXJlCisJCSAqIGJ1dCBkb2VzIGZvciB0aGUgcmVzdC4KKwkJICovCisJCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF84MDJfMyk7CisJZWxzZQorCQkvKgorCQkgKiBSZWFsIDgwMi4yIExMQworCQkgKi8KKwkJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QXzgwMl8yKTsKK30KKworc3RydWN0IHNrX2J1ZmYgKnZsYW5fdW50YWcoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3Qgdmxhbl9oZHIgKnZoZHI7CisJdTE2IHZsYW5fdGNpOworCisJaWYgKHVubGlrZWx5KHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkpIHsKKwkJLyogdmxhbl90Y2kgaXMgYWxyZWFkeSBzZXQtdXAgc28gbGVhdmUgdGhpcyBmb3IgYW5vdGhlciB0aW1lICovCisJCXJldHVybiBza2I7CisJfQorCisJc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQyk7CisJaWYgKHVubGlrZWx5KCFza2IpKQorCQlnb3RvIGVycl9mcmVlOworCisJaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgVkxBTl9ITEVOKSkpCisJCWdvdG8gZXJyX2ZyZWU7CisKKwl2aGRyID0gKHN0cnVjdCB2bGFuX2hkciAqKSBza2ItPmRhdGE7CisJdmxhbl90Y2kgPSBudG9ocyh2aGRyLT5oX3ZsYW5fVENJKTsKKwlfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHNrYiwgdmxhbl90Y2kpOworCisJc2tiX3B1bGxfcmNzdW0oc2tiLCBWTEFOX0hMRU4pOworCXZsYW5fc2V0X2VuY2FwX3Byb3RvKHNrYiwgdmhkcik7CisKKwlza2IgPSB2bGFuX2NoZWNrX3Jlb3JkZXJfaGVhZGVyKHNrYik7CisJaWYgKHVubGlrZWx5KCFza2IpKQorCQlnb3RvIGVycl9mcmVlOworCisJcmV0dXJuIHNrYjsKKworZXJyX2ZyZWU6CisJa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbl9kZXYuYyBiL25ldC84MDIxcS92bGFuX2Rldi5jCmluZGV4IGIyZmY2YzguLmYyNDdmNWIgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuX2Rldi5jCisrKyBiL25ldC84MDIxcS92bGFuX2Rldi5jCkBAIC02NSwxNzkgKzY1LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdmxhbl9jaGVja19yZW9yZGVyX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCWlmICh2bGFuX2Rldl9pbmZvKHNrYi0+ZGV2KS0+ZmxhZ3MgJiBWTEFOX0ZMQUdfUkVPUkRFUl9IRFIpIHsKLQkJaWYgKHNrYl9jb3coc2tiLCBza2JfaGVhZHJvb20oc2tiKSkgPCAwKQotCQkJc2tiID0gTlVMTDsKLQkJaWYgKHNrYikgewotCQkJLyogTGlmdGVkIGZyb20gR2xlYidzIFZMQU4gY29kZS4uLiAqLwotCQkJbWVtbW92ZShza2ItPmRhdGEgLSBFVEhfSExFTiwKLQkJCQlza2ItPmRhdGEgLSBWTEFOX0VUSF9ITEVOLCAxMik7Ci0JCQlza2ItPm1hY19oZWFkZXIgKz0gVkxBTl9ITEVOOwotCQl9Ci0JfQotCi0JcmV0dXJuIHNrYjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHZsYW5fc2V0X2VuY2FwX3Byb3RvKHN0cnVjdCBza19idWZmICpza2IsCi0JCXN0cnVjdCB2bGFuX2hkciAqdmhkcikKLXsKLQlfX2JlMTYgcHJvdG87Ci0JdW5zaWduZWQgY2hhciAqcmF3cDsKLQotCS8qCi0JICogV2FzIGEgVkxBTiBwYWNrZXQsIGdyYWIgdGhlIGVuY2Fwc3VsYXRlZCBwcm90b2NvbCwgd2hpY2ggdGhlIGxheWVyCi0JICogdGhyZWUgcHJvdG9jb2xzIGNhcmUgYWJvdXQuCi0JICovCi0KLQlwcm90byA9IHZoZHItPmhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG87Ci0JaWYgKG50b2hzKHByb3RvKSA+PSAxNTM2KSB7Ci0JCXNrYi0+cHJvdG9jb2wgPSBwcm90bzsKLQkJcmV0dXJuOwotCX0KLQotCXJhd3AgPSBza2ItPmRhdGE7Ci0JaWYgKCoodW5zaWduZWQgc2hvcnQgKilyYXdwID09IDB4RkZGRikKLQkJLyoKLQkJICogVGhpcyBpcyBhIG1hZ2ljIGhhY2sgdG8gc3BvdCBJUFggcGFja2V0cy4gT2xkZXIgTm92ZWxsCi0JCSAqIGJyZWFrcyB0aGUgcHJvdG9jb2wgZGVzaWduIGFuZCBydW5zIElQWCBvdmVyIDgwMi4zIHdpdGhvdXQKLQkJICogYW4gODAyLjIgTExDIGxheWVyLiBXZSBsb29rIGZvciBGRkZGIHdoaWNoIGlzbid0IGEgdXNlZAotCQkgKiA4MDIuMiBTU0FQL0RTQVAuIFRoaXMgd29uJ3Qgd29yayBmb3IgZmF1bHQgdG9sZXJhbnQgbmV0d2FyZQotCQkgKiBidXQgZG9lcyBmb3IgdGhlIHJlc3QuCi0JCSAqLwotCQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfODAyXzMpOwotCWVsc2UKLQkJLyoKLQkJICogUmVhbCA4MDIuMiBMTEMKLQkJICovCi0JCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF84MDJfMik7Ci19Ci0KLS8qCi0gKglEZXRlcm1pbmUgdGhlIHBhY2tldCdzIHByb3RvY29sIElELiBUaGUgcnVsZSBoZXJlIGlzIHRoYXQgd2UKLSAqCWFzc3VtZSA4MDIuMyBpZiB0aGUgdHlwZSBmaWVsZCBpcyBzaG9ydCBlbm91Z2ggdG8gYmUgYSBsZW5ndGguCi0gKglUaGlzIGlzIG5vcm1hbCBwcmFjdGljZSBhbmQgd29ya3MgZm9yIGFueSAnbm93IGluIHVzZScgcHJvdG9jb2wuCi0gKgotICogIEFsc28sIGF0IHRoaXMgcG9pbnQgd2UgYXNzdW1lIHRoYXQgd2UgQVJFIGRlYWxpbmcgZXhjbHVzaXZlbHkgd2l0aAotICogIFZMQU4gcGFja2V0cywgb3IgcGFja2V0cyB0aGF0IHNob3VsZCBiZSBtYWRlIGludG8gVkxBTiBwYWNrZXRzIGJhc2VkCi0gKiAgb24gYSBkZWZhdWx0IFZMQU4gSUQuCi0gKgotICogIE5PVEU6ICBTaG91bGQgYmUgc2ltaWxhciB0byBldGhlcm5ldC9ldGguYy4KLSAqCi0gKiAgU0FOSVRZIE5PVEU6ICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhIHBhY2tldCBpcyBtb3ZpbmcgdXAgdGhlIHN0YWNrCi0gKiAgICAgICAgICAgICAgICB0b3dhcmRzIHVzZXJsYW5kLiAgVG8gZ2V0IGhlcmUsIGl0IHdvdWxkIGhhdmUgYWxyZWFkeSBwYXNzZWQKLSAqICAgICAgICAgICAgICAgIHRocm91Z2ggdGhlIGV0aGVybmV0L2V0aC5jIGV0aF90eXBlX3RyYW5zKCkgbWV0aG9kLgotICogIFNBTklUWSBOT1RFIDI6IFdlIGFyZSByZWZlcmVuY2luZyB0byB0aGUgVkxBTl9IRFIgZnJpZWxkcywgd2hpY2ggTUFZIGJlCi0gKiAgICAgICAgICAgICAgICAgc3RvcmVkIFVOQUxJR05FRCBpbiB0aGUgbWVtb3J5LiAgUklTQyBzeXN0ZW1zIGRvbid0IGxpa2UKLSAqICAgICAgICAgICAgICAgICBzdWNoIGNhc2VzIHZlcnkgbXVjaC4uLgotICogIFNBTklUWSBOT1RFIDJhOiBBY2NvcmRpbmcgdG8gRGF2ZSBNaWxsZXIgJiBBbGV4ZXksIGl0IHdpbGwgYWx3YXlzIGJlCi0gKiAgCQkgICAgYWxpZ25lZCwgc28gdGhlcmUgZG9lc24ndCBuZWVkIHRvIGJlIGFueSBvZiB0aGUgdW5hbGlnbmVkCi0gKiAgCQkgICAgc3R1ZmYuICBJdCBoYXMgYmVlbiBjb21tZW50ZWQgb3V0IG5vdy4uLiAgLS1CZW4KLSAqCi0gKi8KLWludCB2bGFuX3NrYl9yZWN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCSAgc3RydWN0IHBhY2tldF90eXBlICpwdHlwZSwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQotewotCXN0cnVjdCB2bGFuX2hkciAqdmhkcjsKLQlzdHJ1Y3Qgdmxhbl9wY3B1X3N0YXRzICpyeF9zdGF0czsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbl9kZXY7Ci0JdTE2IHZsYW5faWQ7Ci0JdTE2IHZsYW5fdGNpOwotCi0Jc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKHNrYiA9PSBOVUxMKQotCQlnb3RvIGVycl9mcmVlOwotCi0JaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgVkxBTl9ITEVOKSkpCi0JCWdvdG8gZXJyX2ZyZWU7Ci0KLQl2aGRyID0gKHN0cnVjdCB2bGFuX2hkciAqKXNrYi0+ZGF0YTsKLQl2bGFuX3RjaSA9IG50b2hzKHZoZHItPmhfdmxhbl9UQ0kpOwotCXZsYW5faWQgPSB2bGFuX3RjaSAmIFZMQU5fVklEX01BU0s7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0Jdmxhbl9kZXYgPSB2bGFuX2ZpbmRfZGV2KGRldiwgdmxhbl9pZCk7Ci0KLQkvKiBJZiB0aGUgVkxBTiBkZXZpY2UgaXMgZGVmaW5lZCwgd2UgdXNlIGl0LgotCSAqIElmIG5vdCwgYW5kIHRoZSBWSUQgaXMgMCwgaXQgaXMgYSA4MDIuMXAgcGFja2V0IChub3QKLQkgKiByZWFsbHkgYSBWTEFOKSwgc28gd2Ugd2lsbCBqdXN0IG5ldGlmX3J4IGl0IGxhdGVyIHRvIHRoZQotCSAqIG9yaWdpbmFsIGludGVyZmFjZSwgYnV0IHdpdGggdGhlIHNrYi0+cHJvdG8gc2V0IHRvIHRoZQotCSAqIHdyYXBwZWQgcHJvdG86IHdlIGRvIG5vdGhpbmcgaGVyZS4KLQkgKi8KLQotCWlmICghdmxhbl9kZXYpIHsKLQkJaWYgKHZsYW5faWQpIHsKLQkJCXByX2RlYnVnKCIlczogRVJST1I6IE5vIG5ldF9kZXZpY2UgZm9yIFZJRDogJXUgb24gZGV2OiAlc1xuIiwKLQkJCQkgX19mdW5jX18sIHZsYW5faWQsIGRldi0+bmFtZSk7Ci0JCQlnb3RvIGVycl91bmxvY2s7Ci0JCX0KLQkJcnhfc3RhdHMgPSBOVUxMOwotCX0gZWxzZSB7Ci0JCXNrYi0+ZGV2ID0gdmxhbl9kZXY7Ci0KLQkJcnhfc3RhdHMgPSB0aGlzX2NwdV9wdHIodmxhbl9kZXZfaW5mbyhza2ItPmRldiktPnZsYW5fcGNwdV9zdGF0cyk7Ci0KLQkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmcnhfc3RhdHMtPnN5bmNwKTsKLQkJcnhfc3RhdHMtPnJ4X3BhY2tldHMrKzsKLQkJcnhfc3RhdHMtPnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotCi0JCXNrYi0+cHJpb3JpdHkgPSB2bGFuX2dldF9pbmdyZXNzX3ByaW9yaXR5KHNrYi0+ZGV2LCB2bGFuX3RjaSk7Ci0KLQkJcHJfZGVidWcoIiVzOiBwcmlvcml0eTogJXUgZm9yIFRDSTogJWh1XG4iLAotCQkJIF9fZnVuY19fLCBza2ItPnByaW9yaXR5LCB2bGFuX3RjaSk7Ci0KLQkJc3dpdGNoIChza2ItPnBrdF90eXBlKSB7Ci0JCWNhc2UgUEFDS0VUX0JST0FEQ0FTVDoKLQkJCS8qIFllYWgsIHN0YXRzIGNvbGxlY3QgdGhlc2UgdG9nZXRoZXIuLiAqLwotCQkJLyogc3RhdHMtPmJyb2FkY2FzdCArKzsgLy8gbm8gc3VjaCBjb3VudGVyIDotKCAqLwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBQQUNLRVRfTVVMVElDQVNUOgotCQkJcnhfc3RhdHMtPnJ4X211bHRpY2FzdCsrOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBQQUNLRVRfT1RIRVJIT1NUOgotCQkJLyogT3VyIGxvd2VyIGxheWVyIHRoaW5rcyB0aGlzIGlzIG5vdCBsb2NhbCwgbGV0J3MgbWFrZQotCQkJICogc3VyZS4KLQkJCSAqIFRoaXMgYWxsb3dzIHRoZSBWTEFOIHRvIGhhdmUgYSBkaWZmZXJlbnQgTUFDIHRoYW4gdGhlCi0JCQkgKiB1bmRlcmx5aW5nIGRldmljZSwgYW5kIHN0aWxsIHJvdXRlIGNvcnJlY3RseS4KLQkJCSAqLwotCQkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIoZXRoX2hkcihza2IpLT5oX2Rlc3QsCi0JCQkJCQlza2ItPmRldi0+ZGV2X2FkZHIpKQotCQkJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJnJ4X3N0YXRzLT5zeW5jcCk7Ci0JfQotCi0Jc2tiX3B1bGxfcmNzdW0oc2tiLCBWTEFOX0hMRU4pOwotCXZsYW5fc2V0X2VuY2FwX3Byb3RvKHNrYiwgdmhkcik7Ci0KLQlpZiAodmxhbl9kZXYpIHsKLQkJc2tiID0gdmxhbl9jaGVja19yZW9yZGVyX2hlYWRlcihza2IpOwotCQlpZiAoIXNrYikgewotCQkJcnhfc3RhdHMtPnJ4X2Vycm9ycysrOwotCQkJZ290byBlcnJfdW5sb2NrOwotCQl9Ci0JfQotCi0JbmV0aWZfcngoc2tiKTsKLQotCXJjdV9yZWFkX3VubG9jaygpOwotCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKLQotZXJyX3VubG9jazoKLQlyY3VfcmVhZF91bmxvY2soKTsKLWVycl9mcmVlOgotCWF0b21pY19sb25nX2luYygmZGV2LT5yeF9kcm9wcGVkKTsKLQlrZnJlZV9za2Ioc2tiKTsKLQlyZXR1cm4gTkVUX1JYX0RST1A7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdTE2CiB2bGFuX2Rldl9nZXRfZWdyZXNzX3Fvc19tYXNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC03MDEsOCArNTI4LDggQEAKIAkJCQkJICAoMTw8X19MSU5LX1NUQVRFX0RPUk1BTlQpKSkgfAogCQkgICAgICAoMTw8X19MSU5LX1NUQVRFX1BSRVNFTlQpOwogCi0JZGV2LT5mZWF0dXJlcyB8PSByZWFsX2Rldi0+ZmVhdHVyZXMgJiByZWFsX2Rldi0+dmxhbl9mZWF0dXJlczsKLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTExUWDsKKwlkZXYtPmh3X2ZlYXR1cmVzID0gTkVUSUZfRl9BTExfVFhfT0ZGTE9BRFM7CisJZGV2LT5mZWF0dXJlcyB8PSByZWFsX2Rldi0+dmxhbl9mZWF0dXJlcyB8IE5FVElGX0ZfTExUWDsKIAlkZXYtPmdzb19tYXhfc2l6ZSA9IHJlYWxfZGV2LT5nc29fbWF4X3NpemU7CiAKIAkvKiBpcHY2IHNoYXJlZCBjYXJkIHJlbGF0ZWQgc3R1ZmYgKi8KQEAgLTc1Niw2ICs1ODMsMTkgQEAKIAl9CiB9CiAKK3N0YXRpYyB1MzIgdmxhbl9kZXZfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSB2bGFuX2Rldl9pbmZvKGRldiktPnJlYWxfZGV2OworCisJZmVhdHVyZXMgJj0gcmVhbF9kZXYtPmZlYXR1cmVzOworCWZlYXR1cmVzICY9IHJlYWxfZGV2LT52bGFuX2ZlYXR1cmVzOworCWlmIChkZXZfZXRodG9vbF9nZXRfcnhfY3N1bShyZWFsX2RldikpCisJCWZlYXR1cmVzIHw9IE5FVElGX0ZfUlhDU1VNOworCWZlYXR1cmVzIHw9IE5FVElGX0ZfTExUWDsKKworCXJldHVybiBmZWF0dXJlczsKK30KKwogc3RhdGljIGludCB2bGFuX2V0aHRvb2xfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICAgICBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKQEAgLTc3MSwxOCArNjExLDYgQEAKIAlzdHJjcHkoaW5mby0+ZndfdmVyc2lvbiwgIk4vQSIpOwogfQogCi1zdGF0aWMgdTMyIHZsYW5fZXRodG9vbF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWNvbnN0IHN0cnVjdCB2bGFuX2Rldl9pbmZvICp2bGFuID0gdmxhbl9kZXZfaW5mbyhkZXYpOwotCXJldHVybiBkZXZfZXRodG9vbF9nZXRfcnhfY3N1bSh2bGFuLT5yZWFsX2Rldik7Ci19Ci0KLXN0YXRpYyB1MzIgdmxhbl9ldGh0b29sX2dldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWNvbnN0IHN0cnVjdCB2bGFuX2Rldl9pbmZvICp2bGFuID0gdmxhbl9kZXZfaW5mbyhkZXYpOwotCXJldHVybiBkZXZfZXRodG9vbF9nZXRfZmxhZ3Modmxhbi0+cmVhbF9kZXYpOwotfQotCiBzdGF0aWMgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICp2bGFuX2Rldl9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKQogewogCkBAIC04MjAsMzIgKzY0OCwxMCBAQAogCXJldHVybiBzdGF0czsKIH0KIAotc3RhdGljIGludCB2bGFuX2V0aHRvb2xfc2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLSAgICAgICBpZiAoZGF0YSkgewotCQlzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSB2bGFuX2Rldl9pbmZvKGRldiktPnJlYWxfZGV2OwotCi0JCS8qIFVuZGVybHlpbmcgZGV2aWNlIG11c3Qgc3VwcG9ydCBUU08gZm9yIFZMQU4tdGFnZ2VkIHBhY2tldHMKLQkJICogYW5kIG11c3QgaGF2ZSBUU08gZW5hYmxlZCBub3cuCi0JCSAqLwotCQlpZiAoIShyZWFsX2Rldi0+dmxhbl9mZWF0dXJlcyAmIE5FVElGX0ZfVFNPKSkKLQkJCXJldHVybiAtRU9QTk9UU1VQUDsKLQkJaWYgKCEocmVhbF9kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9UU08pKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087Ci0JfSBlbHNlIHsKLQkJZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9UU087Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHZsYW5fZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncwkgICAgICAgID0gdmxhbl9ldGh0b29sX2dldF9zZXR0aW5ncywKIAkuZ2V0X2RydmluZm8JICAgICAgICA9IHZsYW5fZXRodG9vbF9nZXRfZHJ2aW5mbywKIAkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKLQkuZ2V0X3J4X2NzdW0JCT0gdmxhbl9ldGh0b29sX2dldF9yeF9jc3VtLAotCS5nZXRfZmxhZ3MJCT0gdmxhbl9ldGh0b29sX2dldF9mbGFncywKLQkuc2V0X3RzbyAgICAgICAgICAgICAgICA9IHZsYW5fZXRodG9vbF9zZXRfdHNvLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2bGFuX25ldGRldl9vcHMgPSB7CkBAIC04NzEsNiArNjc3LDcgQEAKIAkubmRvX2Zjb2VfZ2V0X3d3bgk9IHZsYW5fZGV2X2Zjb2VfZ2V0X3d3biwKIAkubmRvX2Zjb2VfZGRwX3RhcmdldAk9IHZsYW5fZGV2X2Zjb2VfZGRwX3RhcmdldCwKICNlbmRpZgorCS5uZG9fZml4X2ZlYXR1cmVzCT0gdmxhbl9kZXZfZml4X2ZlYXR1cmVzLAogfTsKIAogdm9pZCB2bGFuX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9uZXQvOXAvY2xpZW50LmMgYi9uZXQvOXAvY2xpZW50LmMKaW5kZXggYTlhYTJkZC4uY2VhYjk0MyAxMDA2NDQKLS0tIGEvbmV0LzlwL2NsaWVudC5jCisrKyBiL25ldC85cC9jbGllbnQuYwpAQCAtMTI4MSw3ICsxMjgxLDcgQEAKIHA5X2NsaWVudF9yZWFkKHN0cnVjdCBwOV9maWQgKmZpZCwgY2hhciAqZGF0YSwgY2hhciBfX3VzZXIgKnVkYXRhLCB1NjQgb2Zmc2V0LAogCQkJCQkJCQl1MzIgY291bnQpCiB7Ci0JaW50IGVyciwgcnNpemUsIHRvdGFsOworCWludCBlcnIsIHJzaXplOwogCXN0cnVjdCBwOV9jbGllbnQgKmNsbnQ7CiAJc3RydWN0IHA5X3JlcV90ICpyZXE7CiAJY2hhciAqZGF0YXB0cjsKQEAgLTEyOTAsNyArMTI5MCw2IEBACiAJCQkJCShsb25nIGxvbmcgdW5zaWduZWQpIG9mZnNldCwgY291bnQpOwogCWVyciA9IDA7CiAJY2xudCA9IGZpZC0+Y2xudDsKLQl0b3RhbCA9IDA7CiAKIAlyc2l6ZSA9IGZpZC0+aW91bml0OwogCWlmICghcnNpemUgfHwgcnNpemUgPiBjbG50LT5tc2l6ZS1QOV9JT0hEUlNaKQpAQCAtMTM0Niw3ICsxMzQ1LDcgQEAKIHA5X2NsaWVudF93cml0ZShzdHJ1Y3QgcDlfZmlkICpmaWQsIGNoYXIgKmRhdGEsIGNvbnN0IGNoYXIgX191c2VyICp1ZGF0YSwKIAkJCQkJCQl1NjQgb2Zmc2V0LCB1MzIgY291bnQpCiB7Ci0JaW50IGVyciwgcnNpemUsIHRvdGFsOworCWludCBlcnIsIHJzaXplOwogCXN0cnVjdCBwOV9jbGllbnQgKmNsbnQ7CiAJc3RydWN0IHA5X3JlcV90ICpyZXE7CiAKQEAgLTEzNTQsNyArMTM1Myw2IEBACiAJCQkJZmlkLT5maWQsIChsb25nIGxvbmcgdW5zaWduZWQpIG9mZnNldCwgY291bnQpOwogCWVyciA9IDA7CiAJY2xudCA9IGZpZC0+Y2xudDsKLQl0b3RhbCA9IDA7CiAKIAlyc2l6ZSA9IGZpZC0+aW91bml0OwogCWlmICghcnNpemUgfHwgcnNpemUgPiBjbG50LT5tc2l6ZS1QOV9JT0hEUlNaKQpAQCAtMTc0NSw3ICsxNzQzLDcgQEAKIAogaW50IHA5X2NsaWVudF9yZWFkZGlyKHN0cnVjdCBwOV9maWQgKmZpZCwgY2hhciAqZGF0YSwgdTMyIGNvdW50LCB1NjQgb2Zmc2V0KQogewotCWludCBlcnIsIHJzaXplLCB0b3RhbDsKKwlpbnQgZXJyLCByc2l6ZTsKIAlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OwogCXN0cnVjdCBwOV9yZXFfdCAqcmVxOwogCWNoYXIgKmRhdGFwdHI7CkBAIC0xNzU1LDcgKzE3NTMsNiBAQAogCiAJZXJyID0gMDsKIAljbG50ID0gZmlkLT5jbG50OwotCXRvdGFsID0gMDsKIAogCXJzaXplID0gZmlkLT5pb3VuaXQ7CiAJaWYgKCFyc2l6ZSB8fCByc2l6ZSA+IGNsbnQtPm1zaXplLVA5X1JFQURESVJIRFJTWikKZGlmZiAtLWdpdCBhL25ldC85cC90cmFuc19mZC5jIGIvbmV0LzlwL3RyYW5zX2ZkLmMKaW5kZXggYWE1NjcyYi4uNGE5MDg0MyAxMDA2NDQKLS0tIGEvbmV0LzlwL3RyYW5zX2ZkLmMKKysrIGIvbmV0LzlwL3RyYW5zX2ZkLmMKQEAgLTcxNiw3ICs3MTYsNiBAQAogCXN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTsKIAlpbnQgb3B0aW9uOwogCWNoYXIgKm9wdGlvbnMsICp0bXBfb3B0aW9uczsKLQlpbnQgcmV0OwogCiAJb3B0cy0+cG9ydCA9IFA5X1BPUlQ7CiAJb3B0cy0+cmZkID0gfjA7CkBAIC03NDQsNyArNzQzLDYgQEAKIAkJCWlmIChyIDwgMCkgewogCQkJCVA5X0RQUklOVEsoUDlfREVCVUdfRVJST1IsCiAJCQkJImludGVnZXIgZmllbGQsIGJ1dCBubyBpbnRlZ2VyP1xuIik7Ci0JCQkJcmV0ID0gcjsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvbmV0LzlwL3RyYW5zX3JkbWEuYyBiL25ldC85cC90cmFuc19yZG1hLmMKaW5kZXggMTUwZTBjNC4uODQ0YTdhNSAxMDA2NDQKLS0tIGEvbmV0LzlwL3RyYW5zX3JkbWEuYworKysgYi9uZXQvOXAvdHJhbnNfcmRtYS5jCkBAIC0xNjcsNyArMTY3LDYgQEAKIAlzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107CiAJaW50IG9wdGlvbjsKIAljaGFyICpvcHRpb25zLCAqdG1wX29wdGlvbnM7Ci0JaW50IHJldDsKIAogCW9wdHMtPnBvcnQgPSBQOV9QT1JUOwogCW9wdHMtPnNxX2RlcHRoID0gUDlfUkRNQV9TUV9ERVBUSDsKQEAgLTE5NSw3ICsxOTQsNiBAQAogCQlpZiAociA8IDApIHsKIAkJCVA5X0RQUklOVEsoUDlfREVCVUdfRVJST1IsCiAJCQkJICAgImludGVnZXIgZmllbGQsIGJ1dCBubyBpbnRlZ2VyP1xuIik7Ci0JCQlyZXQgPSByOwogCQkJY29udGludWU7CiAJCX0KIAkJc3dpdGNoICh0b2tlbikgewpkaWZmIC0tZ2l0IGEvbmV0L0tjb25maWcgYi9uZXQvS2NvbmZpZwppbmRleCA3OWNhYmYxLi44NzgxNTFjIDEwMDY0NAotLS0gYS9uZXQvS2NvbmZpZworKysgYi9uZXQvS2NvbmZpZwpAQCAtMjMyLDYgKzIzMiwyMCBAQAogCWRlcGVuZHMgb24gU01QICYmIFNZU0ZTICYmIFVTRV9HRU5FUklDX1NNUF9IRUxQRVJTCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBIQVZFX0JQRl9KSVQKKwlib29sCisKK2NvbmZpZyBCUEZfSklUCisJYm9vbCAiZW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXIiCisJZGVwZW5kcyBvbiBIQVZFX0JQRl9KSVQKKwlkZXBlbmRzIG9uIE1PRFVMRVMKKwktLS1oZWxwLS0tCisJICBCZXJrZWxleSBQYWNrZXQgRmlsdGVyIGZpbHRlcmluZyBjYXBhYmlsaXRpZXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQKKwkgIGJ5IGFuIGludGVycHJldGVyLiBUaGlzIG9wdGlvbiBhbGxvd3Mga2VybmVsIHRvIGdlbmVyYXRlIGEgbmF0aXZlCisJICBjb2RlIHdoZW4gZmlsdGVyIGlzIGxvYWRlZCBpbiBtZW1vcnkuIFRoaXMgc2hvdWxkIHNwZWVkdXAKKwkgIHBhY2tldCBzbmlmZmluZyAobGlicGNhcC90Y3BkdW1wKS4gTm90ZSA6IEFkbWluIHNob3VsZCBlbmFibGUKKwkgIHRoaXMgZmVhdHVyZSBjaGFuZ2luZyAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGUKKwogbWVudSAiTmV0d29yayB0ZXN0aW5nIgogCiBjb25maWcgTkVUX1BLVEdFTgpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9sZWMuYyBiL25ldC9hdG0vbGVjLmMKaW5kZXggMzg3NTRmZC4uMjUwNzNiNiAxMDA2NDQKLS0tIGEvbmV0L2F0bS9sZWMuYworKysgYi9uZXQvYXRtL2xlYy5jCkBAIC0xMjksNyArMTI5LDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19CUklER0UpIHx8IGRlZmluZWQoQ09ORklHX0JSSURHRV9NT0RVTEUpCiBzdGF0aWMgdm9pZCBsZWNfaGFuZGxlX2JyaWRnZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBldGhoZHIgKmV0aDsKIAljaGFyICpidWZmOwogCXN0cnVjdCBsZWNfcHJpdiAqcHJpdjsKIApAQCAtMTM4LDcgKzEzNyw2IEBACiAJICogTEVfVE9QT0xPR1lfUkVRVUVTVCB3aXRoIHRoZSBzYW1lIHZhbHVlIG9mIFRvcG9sb2d5IENoYW5nZSBiaXQKIAkgKiBhcyB0aGUgQ29uZmlnIEJQRFUgaGFzCiAJICovCi0JZXRoID0gKHN0cnVjdCBldGhoZHIgKilza2ItPmRhdGE7CiAJYnVmZiA9IHNrYi0+ZGF0YSArIHNrYi0+ZGV2LT5oYXJkX2hlYWRlcl9sZW47CiAJaWYgKCpidWZmKysgPT0gMHg0MiAmJiAqYnVmZisrID09IDB4NDIgJiYgKmJ1ZmYrKyA9PSAweDAzKSB7CiAJCXN0cnVjdCBzb2NrICpzazsKQEAgLTExODAsNyArMTE3OCw2IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgbGFuZV9tb2R1bGVfY2xlYW51cCh2b2lkKQogewogCWludCBpOwotCXN0cnVjdCBsZWNfcHJpdiAqcHJpdjsKIAogCXJlbW92ZV9wcm9jX2VudHJ5KCJsZWMiLCBhdG1fcHJvY19yb290KTsKIApAQCAtMTE4OCw3ICsxMTg1LDYgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBNQVhfTEVDX0lURjsgaSsrKSB7CiAJCWlmIChkZXZfbGVjW2ldICE9IE5VTEwpIHsKLQkJCXByaXYgPSBuZXRkZXZfcHJpdihkZXZfbGVjW2ldKTsKIAkJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldl9sZWNbaV0pOwogCQkJZnJlZV9uZXRkZXYoZGV2X2xlY1tpXSk7CiAJCQlkZXZfbGVjW2ldID0gTlVMTDsKZGlmZiAtLWdpdCBhL25ldC9heDI1L2FmX2F4MjUuYyBiL25ldC9heDI1L2FmX2F4MjUuYwppbmRleCA2ZGE1ZGFlLi5lN2M2OWY0IDEwMDY0NAotLS0gYS9uZXQvYXgyNS9hZl9heDI1LmMKKysrIGIvbmV0L2F4MjUvYWZfYXgyNS5jCkBAIC0xNTM4LDggKzE1MzgsNiBAQAogCX0KIAogCS8qIEJ1aWxkIGEgcGFja2V0ICovCi0JU09DS19ERUJVRyhzaywgIkFYLjI1OiBzZW5kdG86IEFkZHJlc3NlcyBidWlsdC4gQnVpbGRpbmcgcGFja2V0LlxuIik7Ci0KIAkvKiBBc3N1bWUgdGhlIHdvcnN0IGNhc2UgKi8KIAlzaXplID0gbGVuICsgYXgyNS0+YXgyNV9kZXYtPmRldi0+aGFyZF9oZWFkZXJfbGVuOwogCkBAIC0xNTQ5LDggKzE1NDcsNiBAQAogCiAJc2tiX3Jlc2VydmUoc2tiLCBzaXplIC0gbGVuKTsKIAotCVNPQ0tfREVCVUcoc2ssICJBWC4yNTogQXBwZW5kaW5nIHVzZXIgZGF0YVxuIik7Ci0KIAkvKiBVc2VyIGRhdGEgZm9sbG93cyBpbW1lZGlhdGVseSBhZnRlciB0aGUgQVguMjUgZGF0YSAqLwogCWlmIChtZW1jcHlfZnJvbWlvdmVjKHNrYl9wdXQoc2tiLCBsZW4pLCBtc2ctPm1zZ19pb3YsIGxlbikpIHsKIAkJZXJyID0gLUVGQVVMVDsKQEAgLTE1NjQsOCArMTU2MCw2IEBACiAJaWYgKCFheDI1LT5waWRpbmNsKQogCQkqc2tiX3B1c2goc2tiLCAxKSA9IHNrLT5za19wcm90b2NvbDsKIAotCVNPQ0tfREVCVUcoc2ssICJBWC4yNTogVHJhbnNtaXR0aW5nIGJ1ZmZlclxuIik7Ci0KIAlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19TRVFQQUNLRVQpIHsKIAkJLyogQ29ubmVjdGVkIG1vZGUgc29ja2V0cyBnbyB2aWEgdGhlIExBUEIgbWFjaGluZSAqLwogCQlpZiAoc2stPnNrX3N0YXRlICE9IFRDUF9FU1RBQkxJU0hFRCkgewpAQCAtMTU4MywyMiArMTU3NywxNCBAQAogCiAJc2tiX3B1c2goc2tiLCAxICsgYXgyNV9hZGRyX3NpemUoZHApKTsKIAotCVNPQ0tfREVCVUcoc2ssICJCdWlsZGluZyBBWC4yNSBIZWFkZXIgKGRwPSVwKS5cbiIsIGRwKTsKLQotCWlmIChkcCAhPSBOVUxMKQotCQlTT0NLX0RFQlVHKHNrLCAiTnVtIGRpZ2lwZWF0ZXJzPSVkXG4iLCBkcC0+bmRpZ2kpOworCS8qIEJ1aWxkaW5nIEFYLjI1IEhlYWRlciAqLwogCiAJLyogQnVpbGQgYW4gQVguMjUgaGVhZGVyICovCiAJbHYgPSBheDI1X2FkZHJfYnVpbGQoc2tiLT5kYXRhLCAmYXgyNS0+c291cmNlX2FkZHIsICZzYXguc2F4MjVfY2FsbCwKIAkJCSAgICAgZHAsIEFYMjVfQ09NTUFORCwgQVgyNV9NT0RVTFVTKTsKIAotCVNPQ0tfREVCVUcoc2ssICJCdWlsdCBoZWFkZXIgKCVkIGJ5dGVzKVxuIixsdik7Ci0KIAlza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiLCBsdik7CiAKLQlTT0NLX0RFQlVHKHNrLCAiYmFzZT0lcCBwb3M9JXBcbiIsCi0JCSAgIHNrYi0+ZGF0YSwgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSk7Ci0KIAkqc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSA9IEFYMjVfVUk7CiAKIAkvKiBEYXRhZ3JhbSBmcmFtZXMgZ28gc3RyYWlnaHQgb3V0IG9mIHRoZSBkb29yIGFzIFVJICovCmRpZmYgLS1naXQgYS9uZXQvYXgyNS9heDI1X2lmYWNlLmMgYi9uZXQvYXgyNS9heDI1X2lmYWNlLmMKaW5kZXggNWEwZGRhOC4uNjBiNTQ1ZSAxMDA2NDQKLS0tIGEvbmV0L2F4MjUvYXgyNV9pZmFjZS5jCisrKyBiL25ldC9heDI1L2F4MjVfaWZhY2UuYwpAQCAtNTgsNyArNTgsNyBAQAogCiB2b2lkIGF4MjVfcHJvdG9jb2xfcmVsZWFzZSh1bnNpZ25lZCBpbnQgcGlkKQogewotCXN0cnVjdCBheDI1X3Byb3RvY29sICpzLCAqcHJvdG9jb2w7CisJc3RydWN0IGF4MjVfcHJvdG9jb2wgKnByb3RvY29sOwogCiAJd3JpdGVfbG9ja19iaCgmcHJvdG9jb2xfbGlzdF9sb2NrKTsKIAlwcm90b2NvbCA9IHByb3RvY29sX2xpc3Q7CkBAIC03Miw3ICs3Miw2IEBACiAKIAl3aGlsZSAocHJvdG9jb2wgIT0gTlVMTCAmJiBwcm90b2NvbC0+bmV4dCAhPSBOVUxMKSB7CiAJCWlmIChwcm90b2NvbC0+bmV4dC0+cGlkID09IHBpZCkgewotCQkJcyA9IHByb3RvY29sLT5uZXh0OwogCQkJcHJvdG9jb2wtPm5leHQgPSBwcm90b2NvbC0+bmV4dC0+bmV4dDsKIAkJCWdvdG8gb3V0OwogCQl9CmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9hZ2dyZWdhdGlvbi5jIGIvbmV0L2JhdG1hbi1hZHYvYWdncmVnYXRpb24uYwppbmRleCBhZjQ1ZDZiLi5hOGMzMjAzIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9hZ2dyZWdhdGlvbi5jCisrKyBiL25ldC9iYXRtYW4tYWR2L2FnZ3JlZ2F0aW9uLmMKQEAgLTIzLDExICsyMywxMiBAQAogI2luY2x1ZGUgImFnZ3JlZ2F0aW9uLmgiCiAjaW5jbHVkZSAic2VuZC5oIgogI2luY2x1ZGUgInJvdXRpbmcuaCIKKyNpbmNsdWRlICJoYXJkLWludGVyZmFjZS5oIgogCi0vKiBjYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIGhuYSBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiBwYWNrZXQgKi8KLXN0YXRpYyBpbnQgaG5hX2xlbihzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldCkKKy8qIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgdHQgaW5mb3JtYXRpb24gZm9yIGEgZ2l2ZW4gcGFja2V0ICovCitzdGF0aWMgaW50IHR0X2xlbihzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldCkKIHsKLQlyZXR1cm4gYmF0bWFuX3BhY2tldC0+bnVtX2huYSAqIEVUSF9BTEVOOworCXJldHVybiBiYXRtYW5fcGFja2V0LT5udW1fdHQgKiBFVEhfQUxFTjsKIH0KIAogLyogcmV0dXJuIHRydWUgaWYgbmV3X3BhY2tldCBjYW4gYmUgYWdncmVnYXRlZCB3aXRoIGZvcndfcGFja2V0ICovCkBAIC05NSw3ICs5Niw2IEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi0jZGVmaW5lIGF0b21pY19kZWNfbm90X3plcm8odikgICAgICAgICAgYXRvbWljX2FkZF91bmxlc3MoKHYpLCAtMSwgMCkKIC8qIGNyZWF0ZSBhIG5ldyBhZ2dyZWdhdGVkIHBhY2tldCBhbmQgYWRkIHRoaXMgcGFja2V0IHRvIGl0ICovCiBzdGF0aWMgdm9pZCBuZXdfYWdncmVnYXRlZF9wYWNrZXQodW5zaWduZWQgY2hhciAqcGFja2V0X2J1ZmYsIGludCBwYWNrZXRfbGVuLAogCQkJCSAgdW5zaWduZWQgbG9uZyBzZW5kX3RpbWUsIGJvb2wgZGlyZWN0X2xpbmssCkBAIC0xMDYsMTIgKzEwNiwxNSBAQAogCXN0cnVjdCBmb3J3X3BhY2tldCAqZm9yd19wYWNrZXRfYWdncjsKIAl1bnNpZ25lZCBjaGFyICpza2JfYnVmZjsKIAorCWlmICghYXRvbWljX2luY19ub3RfemVybygmaWZfaW5jb21pbmctPnJlZmNvdW50KSkKKwkJcmV0dXJuOworCiAJLyogb3duIHBhY2tldCBzaG91bGQgYWx3YXlzIGJlIHNjaGVkdWxlZCAqLwogCWlmICghb3duX3BhY2tldCkgewogCQlpZiAoIWF0b21pY19kZWNfbm90X3plcm8oJmJhdF9wcml2LT5iYXRtYW5fcXVldWVfbGVmdCkpIHsKIAkJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCiAJCQkJImJhdG1hbiBwYWNrZXQgcXVldWUgZnVsbFxuIik7Ci0JCQlyZXR1cm47CisJCQlnb3RvIG91dDsKIAkJfQogCX0KIApAQCAtMTE5LDcgKzEyMiw3IEBACiAJaWYgKCFmb3J3X3BhY2tldF9hZ2dyKSB7CiAJCWlmICghb3duX3BhY2tldCkKIAkJCWF0b21pY19pbmMoJmJhdF9wcml2LT5iYXRtYW5fcXVldWVfbGVmdCk7Ci0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAJfQogCiAJaWYgKChhdG9taWNfcmVhZCgmYmF0X3ByaXYtPmFnZ3JlZ2F0ZWRfb2dtcykpICYmCkBAIC0xMzQsNyArMTM3LDcgQEAKIAkJaWYgKCFvd25fcGFja2V0KQogCQkJYXRvbWljX2luYygmYmF0X3ByaXYtPmJhdG1hbl9xdWV1ZV9sZWZ0KTsKIAkJa2ZyZWUoZm9yd19wYWNrZXRfYWdncik7Ci0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAJfQogCXNrYl9yZXNlcnZlKGZvcndfcGFja2V0X2FnZ3ItPnNrYiwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKTsKIApAQCAtMTY1LDYgKzE2OCwxMCBAQAogCXF1ZXVlX2RlbGF5ZWRfd29yayhiYXRfZXZlbnRfd29ya3F1ZXVlLAogCQkJICAgJmZvcndfcGFja2V0X2FnZ3ItPmRlbGF5ZWRfd29yaywKIAkJCSAgIHNlbmRfdGltZSAtIGppZmZpZXMpOworCisJcmV0dXJuOworb3V0OgorCWhhcmRpZl9mcmVlX3JlZihpZl9pbmNvbWluZyk7CiB9CiAKIC8qIGFnZ3JlZ2F0ZSBhIG5ldyBwYWNrZXQgaW50byB0aGUgZXhpc3RpbmcgYWdncmVnYXRpb24gKi8KQEAgLTI1MSw3ICsyNTgsNyBAQAogewogCXN0cnVjdCBiYXRtYW5fcGFja2V0ICpiYXRtYW5fcGFja2V0OwogCWludCBidWZmX3BvcyA9IDA7Ci0JdW5zaWduZWQgY2hhciAqaG5hX2J1ZmY7CisJdW5zaWduZWQgY2hhciAqdHRfYnVmZjsKIAogCWJhdG1hbl9wYWNrZXQgPSAoc3RydWN0IGJhdG1hbl9wYWNrZXQgKilwYWNrZXRfYnVmZjsKIApAQCAtMjYwLDE0ICsyNjcsMTQgQEAKIAkJICAgb3JpZ19pbnRlcnZhbC4gKi8KIAkJYmF0bWFuX3BhY2tldC0+c2Vxbm8gPSBudG9obChiYXRtYW5fcGFja2V0LT5zZXFubyk7CiAKLQkJaG5hX2J1ZmYgPSBwYWNrZXRfYnVmZiArIGJ1ZmZfcG9zICsgQkFUX1BBQ0tFVF9MRU47CisJCXR0X2J1ZmYgPSBwYWNrZXRfYnVmZiArIGJ1ZmZfcG9zICsgQkFUX1BBQ0tFVF9MRU47CiAJCXJlY2VpdmVfYmF0X3BhY2tldChldGhoZHIsIGJhdG1hbl9wYWNrZXQsCi0JCQkJICAgaG5hX2J1ZmYsIGhuYV9sZW4oYmF0bWFuX3BhY2tldCksCisJCQkJICAgdHRfYnVmZiwgdHRfbGVuKGJhdG1hbl9wYWNrZXQpLAogCQkJCSAgIGlmX2luY29taW5nKTsKIAotCQlidWZmX3BvcyArPSBCQVRfUEFDS0VUX0xFTiArIGhuYV9sZW4oYmF0bWFuX3BhY2tldCk7CisJCWJ1ZmZfcG9zICs9IEJBVF9QQUNLRVRfTEVOICsgdHRfbGVuKGJhdG1hbl9wYWNrZXQpOwogCQliYXRtYW5fcGFja2V0ID0gKHN0cnVjdCBiYXRtYW5fcGFja2V0ICopCiAJCQkocGFja2V0X2J1ZmYgKyBidWZmX3Bvcyk7CiAJfSB3aGlsZSAoYWdncmVnYXRlZF9wYWNrZXQoYnVmZl9wb3MsIHBhY2tldF9sZW4sCi0JCQkJICAgYmF0bWFuX3BhY2tldC0+bnVtX2huYSkpOworCQkJCSAgIGJhdG1hbl9wYWNrZXQtPm51bV90dCkpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvYWdncmVnYXRpb24uaCBiL25ldC9iYXRtYW4tYWR2L2FnZ3JlZ2F0aW9uLmgKaW5kZXggMDYyMjA0Mi4uN2U2ZDcyZiAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvYWdncmVnYXRpb24uaAorKysgYi9uZXQvYmF0bWFuLWFkdi9hZ2dyZWdhdGlvbi5oCkBAIC0yNSw5ICsyNSw5IEBACiAjaW5jbHVkZSAibWFpbi5oIgogCiAvKiBpcyB0aGVyZSBhbm90aGVyIGFnZ3JlZ2F0ZWQgcGFja2V0IGhlcmU/ICovCi1zdGF0aWMgaW5saW5lIGludCBhZ2dyZWdhdGVkX3BhY2tldChpbnQgYnVmZl9wb3MsIGludCBwYWNrZXRfbGVuLCBpbnQgbnVtX2huYSkKK3N0YXRpYyBpbmxpbmUgaW50IGFnZ3JlZ2F0ZWRfcGFja2V0KGludCBidWZmX3BvcywgaW50IHBhY2tldF9sZW4sIGludCBudW1fdHQpCiB7Ci0JaW50IG5leHRfYnVmZl9wb3MgPSBidWZmX3BvcyArIEJBVF9QQUNLRVRfTEVOICsgKG51bV9obmEgKiBFVEhfQUxFTik7CisJaW50IG5leHRfYnVmZl9wb3MgPSBidWZmX3BvcyArIEJBVF9QQUNLRVRfTEVOICsgKG51bV90dCAqIEVUSF9BTEVOKTsKIAogCXJldHVybiAobmV4dF9idWZmX3BvcyA8PSBwYWNrZXRfbGVuKSAmJgogCQkobmV4dF9idWZmX3BvcyA8PSBNQVhfQUdHUkVHQVRJT05fQllURVMpOwpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvYmF0X2RlYnVnZnMuYyBiL25ldC9iYXRtYW4tYWR2L2JhdF9kZWJ1Z2ZzLmMKaW5kZXggMGU5ZDQzNS4uYWJhZWVjNSAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvYmF0X2RlYnVnZnMuYworKysgYi9uZXQvYmF0bWFuLWFkdi9iYXRfZGVidWdmcy5jCkBAIC0yNDEsMTMgKzI0MSwxMyBAQAogc3RhdGljIGludCB0cmFuc3RhYmxlX2dsb2JhbF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopaW5vZGUtPmlfcHJpdmF0ZTsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgaG5hX2dsb2JhbF9zZXFfcHJpbnRfdGV4dCwgbmV0X2Rldik7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHR0X2dsb2JhbF9zZXFfcHJpbnRfdGV4dCwgbmV0X2Rldik7CiB9CiAKIHN0YXRpYyBpbnQgdHJhbnN0YWJsZV9sb2NhbF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopaW5vZGUtPmlfcHJpdmF0ZTsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgaG5hX2xvY2FsX3NlcV9wcmludF90ZXh0LCBuZXRfZGV2KTsKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgdHRfbG9jYWxfc2VxX3ByaW50X3RleHQsIG5ldF9kZXYpOwogfQogCiBzdGF0aWMgaW50IHZpc19kYXRhX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9iYXRfc3lzZnMuYyBiL25ldC9iYXRtYW4tYWR2L2JhdF9zeXNmcy5jCmluZGV4IGU0NDliZjYuLjQ5N2EwNzAgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L2JhdF9zeXNmcy5jCisrKyBiL25ldC9iYXRtYW4tYWR2L2JhdF9zeXNmcy5jCkBAIC00ODgsMjIgKzQ4OCwyNCBAQAogCSAgICAoc3RybmNtcChoYXJkX2lmYWNlLT5zb2Z0X2lmYWNlLT5uYW1lLCBidWZmLCBJRk5BTVNJWikgPT0gMCkpCiAJCWdvdG8gb3V0OwogCi0JaWYgKHN0YXR1c190bXAgPT0gSUZfTk9UX0lOX1VTRSkgewotCQlydG5sX2xvY2soKTsKLQkJaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlKGhhcmRfaWZhY2UpOwotCQlydG5sX3VubG9jaygpOworCWlmICghcnRubF90cnlsb2NrKCkpIHsKKwkJcmV0ID0gLUVSRVNUQVJUU1lTOwogCQlnb3RvIG91dDsKIAl9CiAKLQkvKiBpZiB0aGUgaW50ZXJmYWNlIGFscmVhZHkgaXMgaW4gdXNlICovCi0JaWYgKGhhcmRfaWZhY2UtPmlmX3N0YXR1cyAhPSBJRl9OT1RfSU5fVVNFKSB7Ci0JCXJ0bmxfbG9jaygpOworCWlmIChzdGF0dXNfdG1wID09IElGX05PVF9JTl9VU0UpIHsKIAkJaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlKGhhcmRfaWZhY2UpOwotCQlydG5sX3VubG9jaygpOworCQlnb3RvIHVubG9jazsKIAl9CiAKKwkvKiBpZiB0aGUgaW50ZXJmYWNlIGFscmVhZHkgaXMgaW4gdXNlICovCisJaWYgKGhhcmRfaWZhY2UtPmlmX3N0YXR1cyAhPSBJRl9OT1RfSU5fVVNFKQorCQloYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2UoaGFyZF9pZmFjZSk7CisKIAlyZXQgPSBoYXJkaWZfZW5hYmxlX2ludGVyZmFjZShoYXJkX2lmYWNlLCBidWZmKTsKIAordW5sb2NrOgorCXJ0bmxfdW5sb2NrKCk7CiBvdXQ6CiAJaGFyZGlmX2ZyZWVfcmVmKGhhcmRfaWZhY2UpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9nYXRld2F5X2NsaWVudC5jIGIvbmV0L2JhdG1hbi1hZHYvZ2F0ZXdheV9jbGllbnQuYwppbmRleCAxNTBiNmNlLi42MTYwNWEwIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9nYXRld2F5X2NsaWVudC5jCisrKyBiL25ldC9iYXRtYW4tYWR2L2dhdGV3YXlfY2xpZW50LmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJnYXRld2F5X2NsaWVudC5oIgogI2luY2x1ZGUgImdhdGV3YXlfY29tbW9uLmgiCiAjaW5jbHVkZSAiaGFyZC1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJvcmlnaW5hdG9yLmgiCiAjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CiAjaW5jbHVkZSA8bGludXgvdWRwLmg+CkBAIC0zNCw2MSArMzUsNzYgQEAKIAkJa2ZyZWVfcmN1KGd3X25vZGUsIHJjdSk7CiB9CiAKLXZvaWQgKmd3X2dldF9zZWxlY3RlZChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KQorc3RhdGljIHN0cnVjdCBnd19ub2RlICpnd19nZXRfc2VsZWN0ZWRfZ3dfbm9kZShzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KQogewotCXN0cnVjdCBnd19ub2RlICpjdXJyX2dhdGV3YXlfdG1wOwotCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSA9IE5VTEw7CisJc3RydWN0IGd3X25vZGUgKmd3X25vZGU7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JY3Vycl9nYXRld2F5X3RtcCA9IHJjdV9kZXJlZmVyZW5jZShiYXRfcHJpdi0+Y3Vycl9ndyk7Ci0JaWYgKCFjdXJyX2dhdGV3YXlfdG1wKQorCWd3X25vZGUgPSByY3VfZGVyZWZlcmVuY2UoYmF0X3ByaXYtPmN1cnJfZ3cpOworCWlmICghZ3dfbm9kZSkKIAkJZ290byBvdXQ7CiAKLQlvcmlnX25vZGUgPSBjdXJyX2dhdGV3YXlfdG1wLT5vcmlnX25vZGU7Ci0JaWYgKCFvcmlnX25vZGUpCisJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZnd19ub2RlLT5yZWZjb3VudCkpCisJCWd3X25vZGUgPSBOVUxMOworCitvdXQ6CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIGd3X25vZGU7Cit9CisKK3N0cnVjdCBvcmlnX25vZGUgKmd3X2dldF9zZWxlY3RlZF9vcmlnKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCit7CisJc3RydWN0IGd3X25vZGUgKmd3X25vZGU7CisJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlID0gTlVMTDsKKworCWd3X25vZGUgPSBnd19nZXRfc2VsZWN0ZWRfZ3dfbm9kZShiYXRfcHJpdik7CisJaWYgKCFnd19ub2RlKQogCQlnb3RvIG91dDsKIAorCXJjdV9yZWFkX2xvY2soKTsKKwlvcmlnX25vZGUgPSBnd19ub2RlLT5vcmlnX25vZGU7CisJaWYgKCFvcmlnX25vZGUpCisJCWdvdG8gdW5sb2NrOworCiAJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZvcmlnX25vZGUtPnJlZmNvdW50KSkKIAkJb3JpZ19ub2RlID0gTlVMTDsKIAotb3V0OgordW5sb2NrOgogCXJjdV9yZWFkX3VubG9jaygpOwotCXJldHVybiBvcmlnX25vZGU7Ci19Ci0KLXZvaWQgZ3dfZGVzZWxlY3Qoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdikKLXsKLQlzdHJ1Y3QgZ3dfbm9kZSAqZ3dfbm9kZTsKLQotCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPmd3X2xpc3RfbG9jayk7Ci0JZ3dfbm9kZSA9IHJjdV9kZXJlZmVyZW5jZShiYXRfcHJpdi0+Y3Vycl9ndyk7Ci0JcmN1X2Fzc2lnbl9wb2ludGVyKGJhdF9wcml2LT5jdXJyX2d3LCBOVUxMKTsKLQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPmd3X2xpc3RfbG9jayk7Ci0KK291dDoKIAlpZiAoZ3dfbm9kZSkKIAkJZ3dfbm9kZV9mcmVlX3JlZihnd19ub2RlKTsKKwlyZXR1cm4gb3JpZ19ub2RlOwogfQogCiBzdGF0aWMgdm9pZCBnd19zZWxlY3Qoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwgc3RydWN0IGd3X25vZGUgKm5ld19nd19ub2RlKQogewogCXN0cnVjdCBnd19ub2RlICpjdXJyX2d3X25vZGU7CiAKKwlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5nd19saXN0X2xvY2spOworCiAJaWYgKG5ld19nd19ub2RlICYmICFhdG9taWNfaW5jX25vdF96ZXJvKCZuZXdfZ3dfbm9kZS0+cmVmY291bnQpKQogCQluZXdfZ3dfbm9kZSA9IE5VTEw7CiAKLQlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5nd19saXN0X2xvY2spOwotCWN1cnJfZ3dfbm9kZSA9IHJjdV9kZXJlZmVyZW5jZShiYXRfcHJpdi0+Y3Vycl9ndyk7CisJY3Vycl9nd19ub2RlID0gYmF0X3ByaXYtPmN1cnJfZ3c7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKGJhdF9wcml2LT5jdXJyX2d3LCBuZXdfZ3dfbm9kZSk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5nd19saXN0X2xvY2spOwogCiAJaWYgKGN1cnJfZ3dfbm9kZSkKIAkJZ3dfbm9kZV9mcmVlX3JlZihjdXJyX2d3X25vZGUpOworCisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5nd19saXN0X2xvY2spOworfQorCit2b2lkIGd3X2Rlc2VsZWN0KHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCit7CisJZ3dfc2VsZWN0KGJhdF9wcml2LCBOVUxMKTsKIH0KIAogdm9pZCBnd19lbGVjdGlvbihzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KQogewogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCXN0cnVjdCBnd19ub2RlICpnd19ub2RlLCAqY3Vycl9ndywgKmN1cnJfZ3dfdG1wID0gTlVMTDsKKwlzdHJ1Y3QgZ3dfbm9kZSAqZ3dfbm9kZSwgKmN1cnJfZ3cgPSBOVUxMLCAqY3Vycl9nd190bXAgPSBOVUxMOworCXN0cnVjdCBuZWlnaF9ub2RlICpyb3V0ZXI7CiAJdWludDhfdCBtYXhfdHEgPSAwOwogCXVpbnQzMl90IG1heF9nd19mYWN0b3IgPSAwLCB0bXBfZ3dfZmFjdG9yID0gMDsKIAlpbnQgZG93biwgdXA7CkBAIC0xMDIsMzIgKzExOCwyNSBAQAogCWlmIChhdG9taWNfcmVhZCgmYmF0X3ByaXYtPmd3X21vZGUpICE9IEdXX01PREVfQ0xJRU5UKQogCQlyZXR1cm47CiAKKwljdXJyX2d3ID0gZ3dfZ2V0X3NlbGVjdGVkX2d3X25vZGUoYmF0X3ByaXYpOworCWlmIChjdXJyX2d3KQorCQlnb3RvIG91dDsKKwogCXJjdV9yZWFkX2xvY2soKTsKLQljdXJyX2d3ID0gcmN1X2RlcmVmZXJlbmNlKGJhdF9wcml2LT5jdXJyX2d3KTsKLQlpZiAoY3Vycl9ndykgewotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJcmV0dXJuOwotCX0KLQogCWlmIChobGlzdF9lbXB0eSgmYmF0X3ByaXYtPmd3X2xpc3QpKSB7Ci0KLQkJaWYgKGN1cnJfZ3cpIHsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwotCQkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKLQkJCQkiUmVtb3Zpbmcgc2VsZWN0ZWQgZ2F0ZXdheSAtICIKLQkJCQkibm8gZ2F0ZXdheSBpbiByYW5nZVxuIik7Ci0JCQlnd19kZXNlbGVjdChiYXRfcHJpdik7Ci0JCX0gZWxzZQotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQkJcmV0dXJuOworCQliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LAorCQkJIlJlbW92aW5nIHNlbGVjdGVkIGdhdGV3YXkgLSAiCisJCQkibm8gZ2F0ZXdheSBpbiByYW5nZVxuIik7CisJCWd3X2Rlc2VsZWN0KGJhdF9wcml2KTsKKwkJZ290byB1bmxvY2s7CiAJfQogCiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGd3X25vZGUsIG5vZGUsICZiYXRfcHJpdi0+Z3dfbGlzdCwgbGlzdCkgewotCQlpZiAoIWd3X25vZGUtPm9yaWdfbm9kZS0+cm91dGVyKQorCQlpZiAoZ3dfbm9kZS0+ZGVsZXRlZCkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChnd19ub2RlLT5kZWxldGVkKQorCQlyb3V0ZXIgPSBvcmlnX25vZGVfZ2V0X3JvdXRlcihnd19ub2RlLT5vcmlnX25vZGUpOworCQlpZiAoIXJvdXRlcikKIAkJCWNvbnRpbnVlOwogCiAJCXN3aXRjaCAoYXRvbWljX3JlYWQoJmJhdF9wcml2LT5nd19zZWxfY2xhc3MpKSB7CkBAIC0xMzUsMTUgKzE0NCwxNCBAQAogCQkJZ3dfYmFuZHdpZHRoX3RvX2tiaXQoZ3dfbm9kZS0+b3JpZ19ub2RlLT5nd19mbGFncywKIAkJCQkJICAgICAmZG93biwgJnVwKTsKIAotCQkJdG1wX2d3X2ZhY3RvciA9IChnd19ub2RlLT5vcmlnX25vZGUtPnJvdXRlci0+dHFfYXZnICoKLQkJCQkJIGd3X25vZGUtPm9yaWdfbm9kZS0+cm91dGVyLT50cV9hdmcgKgorCQkJdG1wX2d3X2ZhY3RvciA9IChyb3V0ZXItPnRxX2F2ZyAqIHJvdXRlci0+dHFfYXZnICoKIAkJCQkJIGRvd24gKiAxMDAgKiAxMDApIC8KIAkJCQkJIChUUV9MT0NBTF9XSU5ET1dfU0laRSAqCiAJCQkJCSBUUV9MT0NBTF9XSU5ET1dfU0laRSAqIDY0KTsKIAogCQkJaWYgKCh0bXBfZ3dfZmFjdG9yID4gbWF4X2d3X2ZhY3RvcikgfHwKIAkJCSAgICAoKHRtcF9nd19mYWN0b3IgPT0gbWF4X2d3X2ZhY3RvcikgJiYKLQkJCSAgICAgKGd3X25vZGUtPm9yaWdfbm9kZS0+cm91dGVyLT50cV9hdmcgPiBtYXhfdHEpKSkKKwkJCSAgICAgKHJvdXRlci0+dHFfYXZnID4gbWF4X3RxKSkpCiAJCQkJY3Vycl9nd190bXAgPSBnd19ub2RlOwogCQkJYnJlYWs7CiAKQEAgLTE1NSwxOSArMTYzLDI1IEBACiAJCQkgICogICAgIHNvb24gYXMgYSBiZXR0ZXIgZ2F0ZXdheSBhcHBlYXJzIHdoaWNoIGhhcwogCQkJICAqICAgICAkcm91dGluZ19jbGFzcyBtb3JlIHRxIHBvaW50cykKIAkJCSAgKiovCi0JCQlpZiAoZ3dfbm9kZS0+b3JpZ19ub2RlLT5yb3V0ZXItPnRxX2F2ZyA+IG1heF90cSkKKwkJCWlmIChyb3V0ZXItPnRxX2F2ZyA+IG1heF90cSkKIAkJCQljdXJyX2d3X3RtcCA9IGd3X25vZGU7CiAJCQlicmVhazsKIAkJfQogCi0JCWlmIChnd19ub2RlLT5vcmlnX25vZGUtPnJvdXRlci0+dHFfYXZnID4gbWF4X3RxKQotCQkJbWF4X3RxID0gZ3dfbm9kZS0+b3JpZ19ub2RlLT5yb3V0ZXItPnRxX2F2ZzsKKwkJaWYgKHJvdXRlci0+dHFfYXZnID4gbWF4X3RxKQorCQkJbWF4X3RxID0gcm91dGVyLT50cV9hdmc7CiAKIAkJaWYgKHRtcF9nd19mYWN0b3IgPiBtYXhfZ3dfZmFjdG9yKQogCQkJbWF4X2d3X2ZhY3RvciA9IHRtcF9nd19mYWN0b3I7CisKKwkJbmVpZ2hfbm9kZV9mcmVlX3JlZihyb3V0ZXIpOwogCX0KIAogCWlmIChjdXJyX2d3ICE9IGN1cnJfZ3dfdG1wKSB7CisJCXJvdXRlciA9IG9yaWdfbm9kZV9nZXRfcm91dGVyKGN1cnJfZ3dfdG1wLT5vcmlnX25vZGUpOworCQlpZiAoIXJvdXRlcikKKwkJCWdvdG8gdW5sb2NrOworCiAJCWlmICgoY3Vycl9ndykgJiYgKCFjdXJyX2d3X3RtcCkpCiAJCQliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LAogCQkJCSJSZW1vdmluZyBzZWxlY3RlZCBnYXRld2F5IC0gIgpAQCAtMTc4LDQ4ICsxOTIsNTAgQEAKIAkJCQkiKGd3X2ZsYWdzOiAlaSwgdHE6ICVpKVxuIiwKIAkJCQljdXJyX2d3X3RtcC0+b3JpZ19ub2RlLT5vcmlnLAogCQkJCWN1cnJfZ3dfdG1wLT5vcmlnX25vZGUtPmd3X2ZsYWdzLAotCQkJCWN1cnJfZ3dfdG1wLT5vcmlnX25vZGUtPnJvdXRlci0+dHFfYXZnKTsKKwkJCQlyb3V0ZXItPnRxX2F2Zyk7CiAJCWVsc2UKIAkJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCiAJCQkJIkNoYW5naW5nIHJvdXRlIHRvIGdhdGV3YXkgJXBNICIKIAkJCQkiKGd3X2ZsYWdzOiAlaSwgdHE6ICVpKVxuIiwKIAkJCQljdXJyX2d3X3RtcC0+b3JpZ19ub2RlLT5vcmlnLAogCQkJCWN1cnJfZ3dfdG1wLT5vcmlnX25vZGUtPmd3X2ZsYWdzLAotCQkJCWN1cnJfZ3dfdG1wLT5vcmlnX25vZGUtPnJvdXRlci0+dHFfYXZnKTsKKwkJCQlyb3V0ZXItPnRxX2F2Zyk7CiAKKwkJbmVpZ2hfbm9kZV9mcmVlX3JlZihyb3V0ZXIpOwogCQlnd19zZWxlY3QoYmF0X3ByaXYsIGN1cnJfZ3dfdG1wKTsKIAl9CiAKK3VubG9jazoKIAlyY3VfcmVhZF91bmxvY2soKTsKK291dDoKKwlpZiAoY3Vycl9ndykKKwkJZ3dfbm9kZV9mcmVlX3JlZihjdXJyX2d3KTsKIH0KIAogdm9pZCBnd19jaGVja19lbGVjdGlvbihzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LCBzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUpCiB7Ci0Jc3RydWN0IGd3X25vZGUgKmN1cnJfZ2F0ZXdheV90bXA7CisJc3RydWN0IG9yaWdfbm9kZSAqY3Vycl9nd19vcmlnOworCXN0cnVjdCBuZWlnaF9ub2RlICpyb3V0ZXJfZ3cgPSBOVUxMLCAqcm91dGVyX29yaWcgPSBOVUxMOwogCXVpbnQ4X3QgZ3dfdHFfYXZnLCBvcmlnX3RxX2F2ZzsKIAotCXJjdV9yZWFkX2xvY2soKTsKLQljdXJyX2dhdGV3YXlfdG1wID0gcmN1X2RlcmVmZXJlbmNlKGJhdF9wcml2LT5jdXJyX2d3KTsKLQlpZiAoIWN1cnJfZ2F0ZXdheV90bXApCi0JCWdvdG8gb3V0X3JjdTsKKwljdXJyX2d3X29yaWcgPSBnd19nZXRfc2VsZWN0ZWRfb3JpZyhiYXRfcHJpdik7CisJaWYgKCFjdXJyX2d3X29yaWcpCisJCWdvdG8gZGVzZWxlY3Q7CiAKLQlpZiAoIWN1cnJfZ2F0ZXdheV90bXAtPm9yaWdfbm9kZSkKLQkJZ290byBkZXNlbGVjdF9yY3U7Ci0KLQlpZiAoIWN1cnJfZ2F0ZXdheV90bXAtPm9yaWdfbm9kZS0+cm91dGVyKQotCQlnb3RvIGRlc2VsZWN0X3JjdTsKKwlyb3V0ZXJfZ3cgPSBvcmlnX25vZGVfZ2V0X3JvdXRlcihjdXJyX2d3X29yaWcpOworCWlmICghcm91dGVyX2d3KQorCQlnb3RvIGRlc2VsZWN0OwogCiAJLyogdGhpcyBub2RlIGFscmVhZHkgaXMgdGhlIGdhdGV3YXkgKi8KLQlpZiAoY3Vycl9nYXRld2F5X3RtcC0+b3JpZ19ub2RlID09IG9yaWdfbm9kZSkKLQkJZ290byBvdXRfcmN1OworCWlmIChjdXJyX2d3X29yaWcgPT0gb3JpZ19ub2RlKQorCQlnb3RvIG91dDsKIAotCWlmICghb3JpZ19ub2RlLT5yb3V0ZXIpCi0JCWdvdG8gb3V0X3JjdTsKKwlyb3V0ZXJfb3JpZyA9IG9yaWdfbm9kZV9nZXRfcm91dGVyKG9yaWdfbm9kZSk7CisJaWYgKCFyb3V0ZXJfb3JpZykKKwkJZ290byBvdXQ7CiAKLQlnd190cV9hdmcgPSBjdXJyX2dhdGV3YXlfdG1wLT5vcmlnX25vZGUtPnJvdXRlci0+dHFfYXZnOwotCXJjdV9yZWFkX3VubG9jaygpOwotCi0Jb3JpZ190cV9hdmcgPSBvcmlnX25vZGUtPnJvdXRlci0+dHFfYXZnOworCWd3X3RxX2F2ZyA9IHJvdXRlcl9ndy0+dHFfYXZnOworCW9yaWdfdHFfYXZnID0gcm91dGVyX29yaWctPnRxX2F2ZzsKIAogCS8qIHRoZSBUUSB2YWx1ZSBoYXMgdG8gYmUgYmV0dGVyICovCiAJaWYgKG9yaWdfdHFfYXZnIDwgZ3dfdHFfYXZnKQpAQCAtMjM3LDE2ICsyNTMsMTcgQEAKIAkJIlJlc3RhcnRpbmcgZ2F0ZXdheSBzZWxlY3Rpb246IGJldHRlciBnYXRld2F5IGZvdW5kICh0cSBjdXJyOiAiCiAJCSIlaSwgdHEgbmV3OiAlaSlcbiIsCiAJCWd3X3RxX2F2Zywgb3JpZ190cV9hdmcpOwotCWdvdG8gZGVzZWxlY3Q7CiAKLW91dF9yY3U6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0JZ290byBvdXQ7Ci1kZXNlbGVjdF9yY3U6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiBkZXNlbGVjdDoKIAlnd19kZXNlbGVjdChiYXRfcHJpdik7CiBvdXQ6CisJaWYgKGN1cnJfZ3dfb3JpZykKKwkJb3JpZ19ub2RlX2ZyZWVfcmVmKGN1cnJfZ3dfb3JpZyk7CisJaWYgKHJvdXRlcl9ndykKKwkJbmVpZ2hfbm9kZV9mcmVlX3JlZihyb3V0ZXJfZ3cpOworCWlmIChyb3V0ZXJfb3JpZykKKwkJbmVpZ2hfbm9kZV9mcmVlX3JlZihyb3V0ZXJfb3JpZyk7CisKIAlyZXR1cm47CiB9CiAKQEAgLTI4Myw3ICszMDAsMTUgQEAKIAkJICAgIHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwgdWludDhfdCBuZXdfZ3dmbGFncykKIHsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQlzdHJ1Y3QgZ3dfbm9kZSAqZ3dfbm9kZTsKKwlzdHJ1Y3QgZ3dfbm9kZSAqZ3dfbm9kZSwgKmN1cnJfZ3c7CisKKwkvKioKKwkgKiBOb3RlOiBXZSBkb24ndCBuZWVkIGEgTlVMTCBjaGVjayBoZXJlLCBzaW5jZSBjdXJyX2d3IG5ldmVyIGdldHMKKwkgKiBkZXJlZmVyZW5jZWQuIElmIGN1cnJfZ3cgaXMgTlVMTCB3ZSBhbHNvIHNob3VsZCBub3QgZXhpdCBhcyB3ZSBtYXkKKwkgKiBoYXZlIHRoaXMgZ2F0ZXdheSBpbiBvdXIgbGlzdCAoZHVwbGljYXRpb24gY2hlY2shKSBldmVuIHRob3VnaCB3ZQorCSAqIGhhdmUgbm8gY3VycmVudGx5IHNlbGVjdGVkIGdhdGV3YXkuCisJICovCisJY3Vycl9ndyA9IGd3X2dldF9zZWxlY3RlZF9nd19ub2RlKGJhdF9wcml2KTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZ3dfbm9kZSwgbm9kZSwgJmJhdF9wcml2LT5nd19saXN0LCBsaXN0KSB7CkBAIC0zMDQsMjIgKzMyOSwyNiBAQAogCQkJCSJHYXRld2F5ICVwTSByZW1vdmVkIGZyb20gZ2F0ZXdheSBsaXN0XG4iLAogCQkJCW9yaWdfbm9kZS0+b3JpZyk7CiAKLQkJCWlmIChnd19ub2RlID09IHJjdV9kZXJlZmVyZW5jZShiYXRfcHJpdi0+Y3Vycl9ndykpIHsKLQkJCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJCQlnd19kZXNlbGVjdChiYXRfcHJpdik7Ci0JCQkJcmV0dXJuOwotCQkJfQorCQkJaWYgKGd3X25vZGUgPT0gY3Vycl9ndykKKwkJCQlnb3RvIGRlc2VsZWN0OwogCQl9CiAKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXJldHVybjsKKwkJZ290byB1bmxvY2s7CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOwogCiAJaWYgKG5ld19nd2ZsYWdzID09IDApCi0JCXJldHVybjsKKwkJZ290byB1bmxvY2s7CiAKIAlnd19ub2RlX2FkZChiYXRfcHJpdiwgb3JpZ19ub2RlLCBuZXdfZ3dmbGFncyk7CisJZ290byB1bmxvY2s7CisKK2Rlc2VsZWN0OgorCWd3X2Rlc2VsZWN0KGJhdF9wcml2KTsKK3VubG9jazoKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCWlmIChjdXJyX2d3KQorCQlnd19ub2RlX2ZyZWVfcmVmKGN1cnJfZ3cpOwogfQogCiB2b2lkIGd3X25vZGVfZGVsZXRlKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsIHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSkKQEAgLTMyOSw5ICszNTgsMTIgQEAKIAogdm9pZCBnd19ub2RlX3B1cmdlKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCiB7Ci0Jc3RydWN0IGd3X25vZGUgKmd3X25vZGU7CisJc3RydWN0IGd3X25vZGUgKmd3X25vZGUsICpjdXJyX2d3OwogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlLCAqbm9kZV90bXA7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gMiAqIFBVUkdFX1RJTUVPVVQgKiBIWjsKKwljaGFyIGRvX2Rlc2VsZWN0ID0gMDsKKworCWN1cnJfZ3cgPSBnd19nZXRfc2VsZWN0ZWRfZ3dfbm9kZShiYXRfcHJpdik7CiAKIAlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5nd19saXN0X2xvY2spOwogCkBAIC0zNDIsNDEgKzM3NCw1NiBAQAogCQkgICAgYXRvbWljX3JlYWQoJmJhdF9wcml2LT5tZXNoX3N0YXRlKSA9PSBNRVNIX0FDVElWRSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChyY3VfZGVyZWZlcmVuY2UoYmF0X3ByaXYtPmN1cnJfZ3cpID09IGd3X25vZGUpCi0JCQlnd19kZXNlbGVjdChiYXRfcHJpdik7CisJCWlmIChjdXJyX2d3ID09IGd3X25vZGUpCisJCQlkb19kZXNlbGVjdCA9IDE7CiAKIAkJaGxpc3RfZGVsX3JjdSgmZ3dfbm9kZS0+bGlzdCk7CiAJCWd3X25vZGVfZnJlZV9yZWYoZ3dfbm9kZSk7CiAJfQogCi0KIAlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPmd3X2xpc3RfbG9jayk7CisKKwkvKiBnd19kZXNlbGVjdCgpIG5lZWRzIHRvIGFjcXVpcmUgdGhlIGd3X2xpc3RfbG9jayAqLworCWlmIChkb19kZXNlbGVjdCkKKwkJZ3dfZGVzZWxlY3QoYmF0X3ByaXYpOworCisJaWYgKGN1cnJfZ3cpCisJCWd3X25vZGVfZnJlZV9yZWYoY3Vycl9ndyk7CiB9CiAKKy8qKgorICogZmFpbHMgaWYgb3JpZ19ub2RlIGhhcyBubyByb3V0ZXIKKyAqLwogc3RhdGljIGludCBfd3JpdGVfYnVmZmVyX3RleHQoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKIAkJCSAgICAgIHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgZ3dfbm9kZSAqZ3dfbm9kZSkKIHsKIAlzdHJ1Y3QgZ3dfbm9kZSAqY3Vycl9ndzsKLQlpbnQgZG93biwgdXAsIHJldDsKKwlzdHJ1Y3QgbmVpZ2hfbm9kZSAqcm91dGVyOworCWludCBkb3duLCB1cCwgcmV0ID0gLTE7CiAKIAlnd19iYW5kd2lkdGhfdG9fa2JpdChnd19ub2RlLT5vcmlnX25vZGUtPmd3X2ZsYWdzLCAmZG93biwgJnVwKTsKIAotCXJjdV9yZWFkX2xvY2soKTsKLQljdXJyX2d3ID0gcmN1X2RlcmVmZXJlbmNlKGJhdF9wcml2LT5jdXJyX2d3KTsKKwlyb3V0ZXIgPSBvcmlnX25vZGVfZ2V0X3JvdXRlcihnd19ub2RlLT5vcmlnX25vZGUpOworCWlmICghcm91dGVyKQorCQlnb3RvIG91dDsKKworCWN1cnJfZ3cgPSBnd19nZXRfc2VsZWN0ZWRfZ3dfbm9kZShiYXRfcHJpdik7CiAKIAlyZXQgPSBzZXFfcHJpbnRmKHNlcSwgIiVzICVwTSAoJTNpKSAlcE0gWyUxMHNdOiAlM2kgLSAlaSVzLyVpJXNcbiIsCi0JCSAgICAgICAoY3Vycl9ndyA9PSBnd19ub2RlID8gIj0+IiA6ICIgICIpLAotCQkgICAgICAgZ3dfbm9kZS0+b3JpZ19ub2RlLT5vcmlnLAotCQkgICAgICAgZ3dfbm9kZS0+b3JpZ19ub2RlLT5yb3V0ZXItPnRxX2F2ZywKLQkJICAgICAgIGd3X25vZGUtPm9yaWdfbm9kZS0+cm91dGVyLT5hZGRyLAotCQkgICAgICAgZ3dfbm9kZS0+b3JpZ19ub2RlLT5yb3V0ZXItPmlmX2luY29taW5nLT5uZXRfZGV2LT5uYW1lLAotCQkgICAgICAgZ3dfbm9kZS0+b3JpZ19ub2RlLT5nd19mbGFncywKLQkJICAgICAgIChkb3duID4gMjA0OCA/IGRvd24gLyAxMDI0IDogZG93biksCi0JCSAgICAgICAoZG93biA+IDIwNDggPyAiTUJpdCIgOiAiS0JpdCIpLAotCQkgICAgICAgKHVwID4gMjA0OCA/IHVwIC8gMTAyNCA6IHVwKSwKLQkJICAgICAgICh1cCA+IDIwNDggPyAiTUJpdCIgOiAiS0JpdCIpKTsKKwkJCSAoY3Vycl9ndyA9PSBnd19ub2RlID8gIj0+IiA6ICIgICIpLAorCQkJIGd3X25vZGUtPm9yaWdfbm9kZS0+b3JpZywKKwkJCSByb3V0ZXItPnRxX2F2Zywgcm91dGVyLT5hZGRyLAorCQkJIHJvdXRlci0+aWZfaW5jb21pbmctPm5ldF9kZXYtPm5hbWUsCisJCQkgZ3dfbm9kZS0+b3JpZ19ub2RlLT5nd19mbGFncywKKwkJCSAoZG93biA+IDIwNDggPyBkb3duIC8gMTAyNCA6IGRvd24pLAorCQkJIChkb3duID4gMjA0OCA/ICJNQml0IiA6ICJLQml0IiksCisJCQkgKHVwID4gMjA0OCA/IHVwIC8gMTAyNCA6IHVwKSwKKwkJCSAodXAgPiAyMDQ4ID8gIk1CaXQiIDogIktCaXQiKSk7CiAKLQlyY3VfcmVhZF91bmxvY2soKTsKKwluZWlnaF9ub2RlX2ZyZWVfcmVmKHJvdXRlcik7CisJaWYgKGN1cnJfZ3cpCisJCWd3X25vZGVfZnJlZV9yZWYoY3Vycl9ndyk7CitvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzg0LDQwICs0MzEsNDIgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKXNlcS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CisJc3RydWN0IGhhcmRfaWZhY2UgKnByaW1hcnlfaWY7CiAJc3RydWN0IGd3X25vZGUgKmd3X25vZGU7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0JaW50IGd3X2NvdW50ID0gMDsKKwlpbnQgZ3dfY291bnQgPSAwLCByZXQgPSAwOwogCi0JaWYgKCFiYXRfcHJpdi0+cHJpbWFyeV9pZikgewotCi0JCXJldHVybiBzZXFfcHJpbnRmKHNlcSwgIkJBVE1BTiBtZXNoICVzIGRpc2FibGVkIC0gcGxlYXNlICIKLQkJCQkgICJzcGVjaWZ5IGludGVyZmFjZXMgdG8gZW5hYmxlIGl0XG4iLAotCQkJCSAgbmV0X2Rldi0+bmFtZSk7CisJcHJpbWFyeV9pZiA9IHByaW1hcnlfaWZfZ2V0X3NlbGVjdGVkKGJhdF9wcml2KTsKKwlpZiAoIXByaW1hcnlfaWYpIHsKKwkJcmV0ID0gc2VxX3ByaW50ZihzZXEsICJCQVRNQU4gbWVzaCAlcyBkaXNhYmxlZCAtIHBsZWFzZSAiCisJCQkJICJzcGVjaWZ5IGludGVyZmFjZXMgdG8gZW5hYmxlIGl0XG4iLAorCQkJCSBuZXRfZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CiAJfQogCi0JaWYgKGJhdF9wcml2LT5wcmltYXJ5X2lmLT5pZl9zdGF0dXMgIT0gSUZfQUNUSVZFKSB7Ci0KLQkJcmV0dXJuIHNlcV9wcmludGYoc2VxLCAiQkFUTUFOIG1lc2ggJXMgZGlzYWJsZWQgLSAiCi0JCQkJICAgICAgICJwcmltYXJ5IGludGVyZmFjZSBub3QgYWN0aXZlXG4iLAotCQkJCSAgICAgICBuZXRfZGV2LT5uYW1lKTsKKwlpZiAocHJpbWFyeV9pZi0+aWZfc3RhdHVzICE9IElGX0FDVElWRSkgeworCQlyZXQgPSBzZXFfcHJpbnRmKHNlcSwgIkJBVE1BTiBtZXNoICVzIGRpc2FibGVkIC0gIgorCQkJCSAicHJpbWFyeSBpbnRlcmZhY2Ugbm90IGFjdGl2ZVxuIiwKKwkJCQkgbmV0X2Rldi0+bmFtZSk7CisJCWdvdG8gb3V0OwogCX0KIAogCXNlcV9wcmludGYoc2VxLCAiICAgICAgJS0xMnMgKCVzLyVpKSAlMTdzIFslMTBzXTogZ3dfY2xhc3MgLi4uICIKIAkJICAgIltCLkEuVC5NLkEuTi4gYWR2ICVzJXMsIE1haW5JRi9NQUM6ICVzLyVwTSAoJXMpXVxuIiwKIAkJICAgIkdhdGV3YXkiLCAiIyIsIFRRX01BWF9WQUxVRSwgIk5leHRob3AiLAogCQkgICAib3V0Z29pbmdJRiIsIFNPVVJDRV9WRVJTSU9OLCBSRVZJU0lPTl9WRVJTSU9OX1NUUiwKLQkJICAgYmF0X3ByaXYtPnByaW1hcnlfaWYtPm5ldF9kZXYtPm5hbWUsCi0JCSAgIGJhdF9wcml2LT5wcmltYXJ5X2lmLT5uZXRfZGV2LT5kZXZfYWRkciwgbmV0X2Rldi0+bmFtZSk7CisJCSAgIHByaW1hcnlfaWYtPm5ldF9kZXYtPm5hbWUsCisJCSAgIHByaW1hcnlfaWYtPm5ldF9kZXYtPmRldl9hZGRyLCBuZXRfZGV2LT5uYW1lKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZ3dfbm9kZSwgbm9kZSwgJmJhdF9wcml2LT5nd19saXN0LCBsaXN0KSB7CiAJCWlmIChnd19ub2RlLT5kZWxldGVkKQogCQkJY29udGludWU7CiAKLQkJaWYgKCFnd19ub2RlLT5vcmlnX25vZGUtPnJvdXRlcikKKwkJLyogZmFpbHMgaWYgb3JpZ19ub2RlIGhhcyBubyByb3V0ZXIgKi8KKwkJaWYgKF93cml0ZV9idWZmZXJfdGV4dChiYXRfcHJpdiwgc2VxLCBnd19ub2RlKSA8IDApCiAJCQljb250aW51ZTsKIAotCQlfd3JpdGVfYnVmZmVyX3RleHQoYmF0X3ByaXYsIHNlcSwgZ3dfbm9kZSk7CiAJCWd3X2NvdW50Kys7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwpAQCAtNDI1LDcgKzQ3NCwxMCBAQAogCWlmIChnd19jb3VudCA9PSAwKQogCQlzZXFfcHJpbnRmKHNlcSwgIk5vIGdhdGV3YXlzIGluIHJhbmdlIC4uLlxuIik7CiAKLQlyZXR1cm4gMDsKK291dDoKKwlpZiAocHJpbWFyeV9pZikKKwkJaGFyZGlmX2ZyZWVfcmVmKHByaW1hcnlfaWYpOworCXJldHVybiByZXQ7CiB9CiAKIGludCBnd19pc190YXJnZXQoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTQzNCw2ICs0ODYsNyBAQAogCXN0cnVjdCBpcGhkciAqaXBoZHI7CiAJc3RydWN0IGlwdjZoZHIgKmlwdjZoZHI7CiAJc3RydWN0IHVkcGhkciAqdWRwaGRyOworCXN0cnVjdCBnd19ub2RlICpjdXJyX2d3OwogCXVuc2lnbmVkIGludCBoZWFkZXJfbGVuID0gMDsKIAogCWlmIChhdG9taWNfcmVhZCgmYmF0X3ByaXYtPmd3X21vZGUpID09IEdXX01PREVfT0ZGKQpAQCAtNDk4LDEyICs1NTEsMTEgQEAKIAlpZiAoYXRvbWljX3JlYWQoJmJhdF9wcml2LT5nd19tb2RlKSA9PSBHV19NT0RFX1NFUlZFUikKIAkJcmV0dXJuIC0xOwogCi0JcmN1X3JlYWRfbG9jaygpOwotCWlmICghcmN1X2RlcmVmZXJlbmNlKGJhdF9wcml2LT5jdXJyX2d3KSkgewotCQlyY3VfcmVhZF91bmxvY2soKTsKKwljdXJyX2d3ID0gZ3dfZ2V0X3NlbGVjdGVkX2d3X25vZGUoYmF0X3ByaXYpOworCWlmICghY3Vycl9ndykKIAkJcmV0dXJuIDA7Ci0JfQotCXJjdV9yZWFkX3VubG9jaygpOwogCisJaWYgKGN1cnJfZ3cpCisJCWd3X25vZGVfZnJlZV9yZWYoY3Vycl9ndyk7CiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9nYXRld2F5X2NsaWVudC5oIGIvbmV0L2JhdG1hbi1hZHYvZ2F0ZXdheV9jbGllbnQuaAppbmRleCAyYWE0MzkxLi4xY2U4YzYwIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9nYXRld2F5X2NsaWVudC5oCisrKyBiL25ldC9iYXRtYW4tYWR2L2dhdGV3YXlfY2xpZW50LmgKQEAgLTI0LDcgKzI0LDcgQEAKIAogdm9pZCBnd19kZXNlbGVjdChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KTsKIHZvaWQgZ3dfZWxlY3Rpb24oc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdik7Ci12b2lkICpnd19nZXRfc2VsZWN0ZWQoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdik7CitzdHJ1Y3Qgb3JpZ19ub2RlICpnd19nZXRfc2VsZWN0ZWRfb3JpZyhzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KTsKIHZvaWQgZ3dfY2hlY2tfZWxlY3Rpb24oc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwgc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlKTsKIHZvaWQgZ3dfbm9kZV91cGRhdGUoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKIAkJICAgIHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwgdWludDhfdCBuZXdfZ3dmbGFncyk7CmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jIGIvbmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYwppbmRleCBiMzA1OGU0Li5kZmJmY2NjIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jCisrKyBiL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmMKQEAgLTMxLDkgKzMxLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogCi0vKiBwcm90ZWN0IHVwZGF0ZSBjcml0aWNhbCBzaWRlIG9mIGhhcmRpZl9saXN0IC0gYnV0IG5vdCB0aGUgY29udGVudCAqLwotc3RhdGljIERFRklORV9TUElOTE9DSyhoYXJkaWZfbGlzdF9sb2NrKTsKLQogCiBzdGF0aWMgaW50IGJhdG1hbl9za2JfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTExMCw0NyArMTA3LDU3IEBACiAJcmV0dXJuIGhhcmRfaWZhY2U7CiB9CiAKLXN0YXRpYyB2b2lkIHVwZGF0ZV9wcmltYXJ5X2FkZHIoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdikKK3N0YXRpYyB2b2lkIHByaW1hcnlfaWZfdXBkYXRlX2FkZHIoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdikKIHsKIAlzdHJ1Y3QgdmlzX3BhY2tldCAqdmlzX3BhY2tldDsKKwlzdHJ1Y3QgaGFyZF9pZmFjZSAqcHJpbWFyeV9pZjsKKworCXByaW1hcnlfaWYgPSBwcmltYXJ5X2lmX2dldF9zZWxlY3RlZChiYXRfcHJpdik7CisJaWYgKCFwcmltYXJ5X2lmKQorCQlnb3RvIG91dDsKIAogCXZpc19wYWNrZXQgPSAoc3RydWN0IHZpc19wYWNrZXQgKikKIAkJCQliYXRfcHJpdi0+bXlfdmlzX2luZm8tPnNrYl9wYWNrZXQtPmRhdGE7Ci0JbWVtY3B5KHZpc19wYWNrZXQtPnZpc19vcmlnLAotCSAgICAgICBiYXRfcHJpdi0+cHJpbWFyeV9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkodmlzX3BhY2tldC0+dmlzX29yaWcsIHByaW1hcnlfaWYtPm5ldF9kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CiAJbWVtY3B5KHZpc19wYWNrZXQtPnNlbmRlcl9vcmlnLAotCSAgICAgICBiYXRfcHJpdi0+cHJpbWFyeV9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwkgICAgICAgcHJpbWFyeV9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKworb3V0OgorCWlmIChwcmltYXJ5X2lmKQorCQloYXJkaWZfZnJlZV9yZWYocHJpbWFyeV9pZik7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9wcmltYXJ5X2lmKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCi0JCQkgICBzdHJ1Y3QgaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSkKK3N0YXRpYyB2b2lkIHByaW1hcnlfaWZfc2VsZWN0KHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCisJCQkgICAgICBzdHJ1Y3QgaGFyZF9pZmFjZSAqbmV3X2hhcmRfaWZhY2UpCiB7CisJc3RydWN0IGhhcmRfaWZhY2UgKmN1cnJfaGFyZF9pZmFjZTsKIAlzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldDsKLQlzdHJ1Y3QgaGFyZF9pZmFjZSAqb2xkX2lmOwogCi0JaWYgKGhhcmRfaWZhY2UgJiYgIWF0b21pY19pbmNfbm90X3plcm8oJmhhcmRfaWZhY2UtPnJlZmNvdW50KSkKLQkJaGFyZF9pZmFjZSA9IE5VTEw7CisJQVNTRVJUX1JUTkwoKTsKIAotCW9sZF9pZiA9IGJhdF9wcml2LT5wcmltYXJ5X2lmOwotCWJhdF9wcml2LT5wcmltYXJ5X2lmID0gaGFyZF9pZmFjZTsKKwlpZiAobmV3X2hhcmRfaWZhY2UgJiYgIWF0b21pY19pbmNfbm90X3plcm8oJm5ld19oYXJkX2lmYWNlLT5yZWZjb3VudCkpCisJCW5ld19oYXJkX2lmYWNlID0gTlVMTDsKIAotCWlmIChvbGRfaWYpCi0JCWhhcmRpZl9mcmVlX3JlZihvbGRfaWYpOworCWN1cnJfaGFyZF9pZmFjZSA9IGJhdF9wcml2LT5wcmltYXJ5X2lmOworCXJjdV9hc3NpZ25fcG9pbnRlcihiYXRfcHJpdi0+cHJpbWFyeV9pZiwgbmV3X2hhcmRfaWZhY2UpOwogCi0JaWYgKCFiYXRfcHJpdi0+cHJpbWFyeV9pZikKKwlpZiAoY3Vycl9oYXJkX2lmYWNlKQorCQloYXJkaWZfZnJlZV9yZWYoY3Vycl9oYXJkX2lmYWNlKTsKKworCWlmICghbmV3X2hhcmRfaWZhY2UpCiAJCXJldHVybjsKIAotCWJhdG1hbl9wYWNrZXQgPSAoc3RydWN0IGJhdG1hbl9wYWNrZXQgKikoaGFyZF9pZmFjZS0+cGFja2V0X2J1ZmYpOworCWJhdG1hbl9wYWNrZXQgPSAoc3RydWN0IGJhdG1hbl9wYWNrZXQgKikobmV3X2hhcmRfaWZhY2UtPnBhY2tldF9idWZmKTsKIAliYXRtYW5fcGFja2V0LT5mbGFncyA9IFBSSU1BUklFU19GSVJTVF9IT1A7CiAJYmF0bWFuX3BhY2tldC0+dHRsID0gVFRMOwogCi0JdXBkYXRlX3ByaW1hcnlfYWRkcihiYXRfcHJpdik7CisJcHJpbWFyeV9pZl91cGRhdGVfYWRkcihiYXRfcHJpdik7CiAKIAkvKioqCi0JICogaGFja3kgdHJpY2sgdG8gbWFrZSBzdXJlIHRoYXQgd2Ugc2VuZCB0aGUgSE5BIGluZm9ybWF0aW9uIHZpYQorCSAqIGhhY2t5IHRyaWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIHNlbmQgdGhlIFRUIGluZm9ybWF0aW9uIHZpYQogCSAqIG91ciBuZXcgcHJpbWFyeSBpbnRlcmZhY2UKIAkgKi8KLQlhdG9taWNfc2V0KCZiYXRfcHJpdi0+aG5hX2xvY2FsX2NoYW5nZWQsIDEpOworCWF0b21pY19zZXQoJmJhdF9wcml2LT50dF9sb2NhbF9jaGFuZ2VkLCAxKTsKIH0KIAogc3RhdGljIGJvb2wgaGFyZGlmX2lzX2lmYWNlX3VwKHN0cnVjdCBoYXJkX2lmYWNlICpoYXJkX2lmYWNlKQpAQCAtMjM2LDkgKzI0MywxMCBAQAogc3RhdGljIHZvaWQgaGFyZGlmX2FjdGl2YXRlX2ludGVyZmFjZShzdHJ1Y3QgaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSkKIHsKIAlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2OworCXN0cnVjdCBoYXJkX2lmYWNlICpwcmltYXJ5X2lmID0gTlVMTDsKIAogCWlmIChoYXJkX2lmYWNlLT5pZl9zdGF0dXMgIT0gSUZfSU5BQ1RJVkUpCi0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAKIAliYXRfcHJpdiA9IG5ldGRldl9wcml2KGhhcmRfaWZhY2UtPnNvZnRfaWZhY2UpOwogCkBAIC0yNDksMTQgKzI1NywxOCBAQAogCSAqIHRoZSBmaXJzdCBhY3RpdmUgaW50ZXJmYWNlIGJlY29tZXMgb3VyIHByaW1hcnkgaW50ZXJmYWNlIG9yCiAJICogdGhlIG5leHQgYWN0aXZlIGludGVyZmFjZSBhZnRlciB0aGUgb2xkIHByaW1heSBpbnRlcmZhY2Ugd2FzIHJlbW92ZWQKIAkgKi8KLQlpZiAoIWJhdF9wcml2LT5wcmltYXJ5X2lmKQotCQlzZXRfcHJpbWFyeV9pZihiYXRfcHJpdiwgaGFyZF9pZmFjZSk7CisJcHJpbWFyeV9pZiA9IHByaW1hcnlfaWZfZ2V0X3NlbGVjdGVkKGJhdF9wcml2KTsKKwlpZiAoIXByaW1hcnlfaWYpCisJCXByaW1hcnlfaWZfc2VsZWN0KGJhdF9wcml2LCBoYXJkX2lmYWNlKTsKIAogCWJhdF9pbmZvKGhhcmRfaWZhY2UtPnNvZnRfaWZhY2UsICJJbnRlcmZhY2UgYWN0aXZhdGVkOiAlc1xuIiwKIAkJIGhhcmRfaWZhY2UtPm5ldF9kZXYtPm5hbWUpOwogCiAJdXBkYXRlX21pbl9tdHUoaGFyZF9pZmFjZS0+c29mdF9pZmFjZSk7Ci0JcmV0dXJuOworCitvdXQ6CisJaWYgKHByaW1hcnlfaWYpCisJCWhhcmRpZl9mcmVlX3JlZihwcmltYXJ5X2lmKTsKIH0KIAogc3RhdGljIHZvaWQgaGFyZGlmX2RlYWN0aXZhdGVfaW50ZXJmYWNlKHN0cnVjdCBoYXJkX2lmYWNlICpoYXJkX2lmYWNlKQpAQCAtMzI3LDcgKzMzOSw3IEBACiAJYmF0bWFuX3BhY2tldC0+ZmxhZ3MgPSAwOwogCWJhdG1hbl9wYWNrZXQtPnR0bCA9IDI7CiAJYmF0bWFuX3BhY2tldC0+dHEgPSBUUV9NQVhfVkFMVUU7Ci0JYmF0bWFuX3BhY2tldC0+bnVtX2huYSA9IDA7CisJYmF0bWFuX3BhY2tldC0+bnVtX3R0ID0gMDsKIAogCWhhcmRfaWZhY2UtPmlmX251bSA9IGJhdF9wcml2LT5udW1faWZhY2VzOwogCWJhdF9wcml2LT5udW1faWZhY2VzKys7CkBAIC0zODYsMTIgKzM5OCwxMyBAQAogdm9pZCBoYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2Uoc3RydWN0IGhhcmRfaWZhY2UgKmhhcmRfaWZhY2UpCiB7CiAJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KGhhcmRfaWZhY2UtPnNvZnRfaWZhY2UpOworCXN0cnVjdCBoYXJkX2lmYWNlICpwcmltYXJ5X2lmID0gTlVMTDsKIAogCWlmIChoYXJkX2lmYWNlLT5pZl9zdGF0dXMgPT0gSUZfQUNUSVZFKQogCQloYXJkaWZfZGVhY3RpdmF0ZV9pbnRlcmZhY2UoaGFyZF9pZmFjZSk7CiAKIAlpZiAoaGFyZF9pZmFjZS0+aWZfc3RhdHVzICE9IElGX0lOQUNUSVZFKQotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCiAJYmF0X2luZm8oaGFyZF9pZmFjZS0+c29mdF9pZmFjZSwgIlJlbW92aW5nIGludGVyZmFjZTogJXNcbiIsCiAJCSBoYXJkX2lmYWNlLT5uZXRfZGV2LT5uYW1lKTsKQEAgLTQwMCwxMSArNDEzLDEyIEBACiAJYmF0X3ByaXYtPm51bV9pZmFjZXMtLTsKIAlvcmlnX2hhc2hfZGVsX2lmKGhhcmRfaWZhY2UsIGJhdF9wcml2LT5udW1faWZhY2VzKTsKIAotCWlmIChoYXJkX2lmYWNlID09IGJhdF9wcml2LT5wcmltYXJ5X2lmKSB7CisJcHJpbWFyeV9pZiA9IHByaW1hcnlfaWZfZ2V0X3NlbGVjdGVkKGJhdF9wcml2KTsKKwlpZiAoaGFyZF9pZmFjZSA9PSBwcmltYXJ5X2lmKSB7CiAJCXN0cnVjdCBoYXJkX2lmYWNlICpuZXdfaWY7CiAKIAkJbmV3X2lmID0gaGFyZGlmX2dldF9hY3RpdmUoaGFyZF9pZmFjZS0+c29mdF9pZmFjZSk7Ci0JCXNldF9wcmltYXJ5X2lmKGJhdF9wcml2LCBuZXdfaWYpOworCQlwcmltYXJ5X2lmX3NlbGVjdChiYXRfcHJpdiwgbmV3X2lmKTsKIAogCQlpZiAobmV3X2lmKQogCQkJaGFyZGlmX2ZyZWVfcmVmKG5ld19pZik7CkBAIC00MjUsNiArNDM5LDEwIEBACiAKIAloYXJkX2lmYWNlLT5zb2Z0X2lmYWNlID0gTlVMTDsKIAloYXJkaWZfZnJlZV9yZWYoaGFyZF9pZmFjZSk7CisKK291dDoKKwlpZiAocHJpbWFyeV9pZikKKwkJaGFyZGlmX2ZyZWVfcmVmKHByaW1hcnlfaWYpOwogfQogCiBzdGF0aWMgc3RydWN0IGhhcmRfaWZhY2UgKmhhcmRpZl9hZGRfaW50ZXJmYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KQpAQCAtNDMyLDYgKzQ1MCw4IEBACiAJc3RydWN0IGhhcmRfaWZhY2UgKmhhcmRfaWZhY2U7CiAJaW50IHJldDsKIAorCUFTU0VSVF9SVE5MKCk7CisKIAlyZXQgPSBpc192YWxpZF9pZmFjZShuZXRfZGV2KTsKIAlpZiAocmV0ICE9IDEpCiAJCWdvdG8gb3V0OwpAQCAtNDU4LDEwICs0NzgsNyBAQAogCWF0b21pY19zZXQoJmhhcmRfaWZhY2UtPnJlZmNvdW50LCAyKTsKIAogCWNoZWNrX2tub3duX21hY19hZGRyKGhhcmRfaWZhY2UtPm5ldF9kZXYpOwotCi0Jc3Bpbl9sb2NrKCZoYXJkaWZfbGlzdF9sb2NrKTsKIAlsaXN0X2FkZF90YWlsX3JjdSgmaGFyZF9pZmFjZS0+bGlzdCwgJmhhcmRpZl9saXN0KTsKLQlzcGluX3VubG9jaygmaGFyZGlmX2xpc3RfbG9jayk7CiAKIAlyZXR1cm4gaGFyZF9pZmFjZTsKIApAQCAtNDc1LDYgKzQ5Miw4IEBACiAKIHN0YXRpYyB2b2lkIGhhcmRpZl9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBoYXJkX2lmYWNlICpoYXJkX2lmYWNlKQogeworCUFTU0VSVF9SVE5MKCk7CisKIAkvKiBmaXJzdCBkZWFjdGl2YXRlIGludGVyZmFjZSAqLwogCWlmIChoYXJkX2lmYWNlLT5pZl9zdGF0dXMgIT0gSUZfTk9UX0lOX1VTRSkKIAkJaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlKGhhcmRfaWZhY2UpOwpAQCAtNDkwLDIwICs1MDksMTEgQEAKIHZvaWQgaGFyZGlmX3JlbW92ZV9pbnRlcmZhY2VzKHZvaWQpCiB7CiAJc3RydWN0IGhhcmRfaWZhY2UgKmhhcmRfaWZhY2UsICpoYXJkX2lmYWNlX3RtcDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGlmX3F1ZXVlOwogCi0JSU5JVF9MSVNUX0hFQUQoJmlmX3F1ZXVlKTsKLQotCXNwaW5fbG9jaygmaGFyZGlmX2xpc3RfbG9jayk7CisJcnRubF9sb2NrKCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhhcmRfaWZhY2UsIGhhcmRfaWZhY2VfdG1wLAogCQkJCSAmaGFyZGlmX2xpc3QsIGxpc3QpIHsKIAkJbGlzdF9kZWxfcmN1KCZoYXJkX2lmYWNlLT5saXN0KTsKLQkJbGlzdF9hZGRfdGFpbCgmaGFyZF9pZmFjZS0+bGlzdCwgJmlmX3F1ZXVlKTsKLQl9Ci0Jc3Bpbl91bmxvY2soJmhhcmRpZl9saXN0X2xvY2spOwotCi0JcnRubF9sb2NrKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhhcmRfaWZhY2UsIGhhcmRfaWZhY2VfdG1wLCAmaWZfcXVldWUsIGxpc3QpIHsKIAkJaGFyZGlmX3JlbW92ZV9pbnRlcmZhY2UoaGFyZF9pZmFjZSk7CiAJfQogCXJ0bmxfdW5sb2NrKCk7CkBAIC01MTQsNiArNTI0LDcgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKXB0cjsKIAlzdHJ1Y3QgaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSA9IGhhcmRpZl9nZXRfYnlfbmV0ZGV2KG5ldF9kZXYpOworCXN0cnVjdCBoYXJkX2lmYWNlICpwcmltYXJ5X2lmID0gTlVMTDsKIAlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2OwogCiAJaWYgKCFoYXJkX2lmYWNlICYmIGV2ZW50ID09IE5FVERFVl9SRUdJU1RFUikKQEAgLTUzMSw5ICs1NDIsNyBAQAogCQloYXJkaWZfZGVhY3RpdmF0ZV9pbnRlcmZhY2UoaGFyZF9pZmFjZSk7CiAJCWJyZWFrOwogCWNhc2UgTkVUREVWX1VOUkVHSVNURVI6Ci0JCXNwaW5fbG9jaygmaGFyZGlmX2xpc3RfbG9jayk7CiAJCWxpc3RfZGVsX3JjdSgmaGFyZF9pZmFjZS0+bGlzdCk7Ci0JCXNwaW5fdW5sb2NrKCZoYXJkaWZfbGlzdF9sb2NrKTsKIAogCQloYXJkaWZfcmVtb3ZlX2ludGVyZmFjZShoYXJkX2lmYWNlKTsKIAkJYnJlYWs7CkBAIC01NDksOCArNTU4LDEyIEBACiAJCXVwZGF0ZV9tYWNfYWRkcmVzc2VzKGhhcmRfaWZhY2UpOwogCiAJCWJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoaGFyZF9pZmFjZS0+c29mdF9pZmFjZSk7Ci0JCWlmIChoYXJkX2lmYWNlID09IGJhdF9wcml2LT5wcmltYXJ5X2lmKQotCQkJdXBkYXRlX3ByaW1hcnlfYWRkcihiYXRfcHJpdik7CisJCXByaW1hcnlfaWYgPSBwcmltYXJ5X2lmX2dldF9zZWxlY3RlZChiYXRfcHJpdik7CisJCWlmICghcHJpbWFyeV9pZikKKwkJCWdvdG8gaGFyZGlmX3B1dDsKKworCQlpZiAoaGFyZF9pZmFjZSA9PSBwcmltYXJ5X2lmKQorCQkJcHJpbWFyeV9pZl91cGRhdGVfYWRkcihiYXRfcHJpdik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtNTU5LDYgKzU3Miw4IEBACiBoYXJkaWZfcHV0OgogCWhhcmRpZl9mcmVlX3JlZihoYXJkX2lmYWNlKTsKIG91dDoKKwlpZiAocHJpbWFyeV9pZikKKwkJaGFyZGlmX2ZyZWVfcmVmKHByaW1hcnlfaWYpOwogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuaCBiL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmgKaW5kZXggYTlkZGYzNi4uNjQyNjU5OSAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuaAorKysgYi9uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5oCkBAIC00NSw0ICs0NSwyMiBAQAogCQljYWxsX3JjdSgmaGFyZF9pZmFjZS0+cmN1LCBoYXJkaWZfZnJlZV9yY3UpOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBoYXJkX2lmYWNlICpwcmltYXJ5X2lmX2dldF9zZWxlY3RlZCgKKwkJCQkJCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCit7CisJc3RydWN0IGhhcmRfaWZhY2UgKmhhcmRfaWZhY2U7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJaGFyZF9pZmFjZSA9IHJjdV9kZXJlZmVyZW5jZShiYXRfcHJpdi0+cHJpbWFyeV9pZik7CisJaWYgKCFoYXJkX2lmYWNlKQorCQlnb3RvIG91dDsKKworCWlmICghYXRvbWljX2luY19ub3RfemVybygmaGFyZF9pZmFjZS0+cmVmY291bnQpKQorCQloYXJkX2lmYWNlID0gTlVMTDsKKworb3V0OgorCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiBoYXJkX2lmYWNlOworfQorCiAjZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX0hBUkRfSU5URVJGQUNFX0hfICovCmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9pY21wX3NvY2tldC5jIGIvbmV0L2JhdG1hbi1hZHYvaWNtcF9zb2NrZXQuYwppbmRleCAzNGNlNTZjLi5mYTIyYmEyIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9pY21wX3NvY2tldC5jCisrKyBiL25ldC9iYXRtYW4tYWR2L2ljbXBfc29ja2V0LmMKQEAgLTE1Myw2ICsxNTMsNyBAQAogewogCXN0cnVjdCBzb2NrZXRfY2xpZW50ICpzb2NrZXRfY2xpZW50ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBzb2NrZXRfY2xpZW50LT5iYXRfcHJpdjsKKwlzdHJ1Y3QgaGFyZF9pZmFjZSAqcHJpbWFyeV9pZiA9IE5VTEw7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgaWNtcF9wYWNrZXRfcnIgKmljbXBfcGFja2V0OwogCkBAIC0xNjcsMTUgKzE2OCwyMSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoIWJhdF9wcml2LT5wcmltYXJ5X2lmKQotCQlyZXR1cm4gLUVGQVVMVDsKKwlwcmltYXJ5X2lmID0gcHJpbWFyeV9pZl9nZXRfc2VsZWN0ZWQoYmF0X3ByaXYpOworCisJaWYgKCFwcmltYXJ5X2lmKSB7CisJCWxlbiA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KIAogCWlmIChsZW4gPj0gc2l6ZW9mKHN0cnVjdCBpY21wX3BhY2tldF9ycikpCiAJCXBhY2tldF9sZW4gPSBzaXplb2Yoc3RydWN0IGljbXBfcGFja2V0X3JyKTsKIAogCXNrYiA9IGRldl9hbGxvY19za2IocGFja2V0X2xlbiArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7Ci0JaWYgKCFza2IpCi0JCXJldHVybiAtRU5PTUVNOworCWlmICghc2tiKSB7CisJCWxlbiA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KIAogCXNrYl9yZXNlcnZlKHNrYiwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKTsKIAlpY21wX3BhY2tldCA9IChzdHJ1Y3QgaWNtcF9wYWNrZXRfcnIgKilza2JfcHV0KHNrYiwgcGFja2V0X2xlbik7CkBAIC0yMTgsMjMgKzIyNSwxMyBAQAogCWlmIChhdG9taWNfcmVhZCgmYmF0X3ByaXYtPm1lc2hfc3RhdGUpICE9IE1FU0hfQUNUSVZFKQogCQlnb3RvIGRzdF91bnJlYWNoOwogCi0JcmN1X3JlYWRfbG9jaygpOwogCW9yaWdfbm9kZSA9IG9yaWdfaGFzaF9maW5kKGJhdF9wcml2LCBpY21wX3BhY2tldC0+ZHN0KTsKLQogCWlmICghb3JpZ19ub2RlKQotCQlnb3RvIHVubG9jazsKKwkJZ290byBkc3RfdW5yZWFjaDsKIAotCW5laWdoX25vZGUgPSBvcmlnX25vZGUtPnJvdXRlcjsKLQorCW5laWdoX25vZGUgPSBvcmlnX25vZGVfZ2V0X3JvdXRlcihvcmlnX25vZGUpOwogCWlmICghbmVpZ2hfbm9kZSkKLQkJZ290byB1bmxvY2s7Ci0KLQlpZiAoIWF0b21pY19pbmNfbm90X3plcm8oJm5laWdoX25vZGUtPnJlZmNvdW50KSkgewotCQluZWlnaF9ub2RlID0gTlVMTDsKLQkJZ290byB1bmxvY2s7Ci0JfQotCi0JcmN1X3JlYWRfdW5sb2NrKCk7CisJCWdvdG8gZHN0X3VucmVhY2g7CiAKIAlpZiAoIW5laWdoX25vZGUtPmlmX2luY29taW5nKQogCQlnb3RvIGRzdF91bnJlYWNoOwpAQCAtMjQzLDcgKzI0MCw3IEBACiAJCWdvdG8gZHN0X3VucmVhY2g7CiAKIAltZW1jcHkoaWNtcF9wYWNrZXQtPm9yaWcsCi0JICAgICAgIGJhdF9wcml2LT5wcmltYXJ5X2lmLT5uZXRfZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCSAgICAgICBwcmltYXJ5X2lmLT5uZXRfZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwogCiAJaWYgKHBhY2tldF9sZW4gPT0gc2l6ZW9mKHN0cnVjdCBpY21wX3BhY2tldF9ycikpCiAJCW1lbWNweShpY21wX3BhY2tldC0+cnIsCkBAIC0yNTIsMTQgKzI0OSwxNCBAQAogCXNlbmRfc2tiX3BhY2tldChza2IsIG5laWdoX25vZGUtPmlmX2luY29taW5nLCBuZWlnaF9ub2RlLT5hZGRyKTsKIAlnb3RvIG91dDsKIAotdW5sb2NrOgotCXJjdV9yZWFkX3VubG9jaygpOwogZHN0X3VucmVhY2g6CiAJaWNtcF9wYWNrZXQtPm1zZ190eXBlID0gREVTVElOQVRJT05fVU5SRUFDSEFCTEU7CiAJYmF0X3NvY2tldF9hZGRfcGFja2V0KHNvY2tldF9jbGllbnQsIGljbXBfcGFja2V0LCBwYWNrZXRfbGVuKTsKIGZyZWVfc2tiOgogCWtmcmVlX3NrYihza2IpOwogb3V0OgorCWlmIChwcmltYXJ5X2lmKQorCQloYXJkaWZfZnJlZV9yZWYocHJpbWFyeV9pZik7CiAJaWYgKG5laWdoX25vZGUpCiAJCW5laWdoX25vZGVfZnJlZV9yZWYobmVpZ2hfbm9kZSk7CiAJaWYgKG9yaWdfbm9kZSkKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L21haW4uYyBiL25ldC9iYXRtYW4tYWR2L21haW4uYwppbmRleCA3MDliMzNiLi4wYTdjZWUwIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9tYWluLmMKKysrIGIvbmV0L2JhdG1hbi1hZHYvbWFpbi5jCkBAIC0zMyw2ICszMyw5IEBACiAjaW5jbHVkZSAidmlzLmgiCiAjaW5jbHVkZSAiaGFzaC5oIgogCisKKy8qIExpc3QgbWFuaXB1bGF0aW9ucyBvbiBoYXJkaWZfbGlzdCBoYXZlIHRvIGJlIHJ0bmxfbG9jaygpJ2VkLAorICogbGlzdCB0cmF2ZXJzYWxzIGp1c3QgcmN1LWxvY2tlZCAqLwogc3RydWN0IGxpc3RfaGVhZCBoYXJkaWZfbGlzdDsKIAogdW5zaWduZWQgY2hhciBicm9hZGNhc3RfYWRkcltdID0gezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9OwpAQCAtODEsMjggKzg0LDI5IEBACiAKIAlzcGluX2xvY2tfaW5pdCgmYmF0X3ByaXYtPmZvcndfYmF0X2xpc3RfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmJhdF9wcml2LT5mb3J3X2JjYXN0X2xpc3RfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmJhdF9wcml2LT5obmFfbGhhc2hfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmJhdF9wcml2LT5obmFfZ2hhc2hfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmJhdF9wcml2LT50dF9saGFzaF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYmF0X3ByaXYtPnR0X2doYXNoX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZiYXRfcHJpdi0+Z3dfbGlzdF9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmYmF0X3ByaXYtPnZpc19oYXNoX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZiYXRfcHJpdi0+dmlzX2xpc3RfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmJhdF9wcml2LT5zb2Z0aWZfbmVpZ2hfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmJhdF9wcml2LT5zb2Z0aWZfbmVpZ2hfdmlkX2xvY2spOwogCiAJSU5JVF9ITElTVF9IRUFEKCZiYXRfcHJpdi0+Zm9yd19iYXRfbGlzdCk7CiAJSU5JVF9ITElTVF9IRUFEKCZiYXRfcHJpdi0+Zm9yd19iY2FzdF9saXN0KTsKIAlJTklUX0hMSVNUX0hFQUQoJmJhdF9wcml2LT5nd19saXN0KTsKLQlJTklUX0hMSVNUX0hFQUQoJmJhdF9wcml2LT5zb2Z0aWZfbmVpZ2hfbGlzdCk7CisJSU5JVF9ITElTVF9IRUFEKCZiYXRfcHJpdi0+c29mdGlmX25laWdoX3ZpZHMpOwogCiAJaWYgKG9yaWdpbmF0b3JfaW5pdChiYXRfcHJpdikgPCAxKQogCQlnb3RvIGVycjsKIAotCWlmIChobmFfbG9jYWxfaW5pdChiYXRfcHJpdikgPCAxKQorCWlmICh0dF9sb2NhbF9pbml0KGJhdF9wcml2KSA8IDEpCiAJCWdvdG8gZXJyOwogCi0JaWYgKGhuYV9nbG9iYWxfaW5pdChiYXRfcHJpdikgPCAxKQorCWlmICh0dF9nbG9iYWxfaW5pdChiYXRfcHJpdikgPCAxKQogCQlnb3RvIGVycjsKIAotCWhuYV9sb2NhbF9hZGQoc29mdF9pZmFjZSwgc29mdF9pZmFjZS0+ZGV2X2FkZHIpOworCXR0X2xvY2FsX2FkZChzb2Z0X2lmYWNlLCBzb2Z0X2lmYWNlLT5kZXZfYWRkcik7CiAKIAlpZiAodmlzX2luaXQoYmF0X3ByaXYpIDwgMSkKIAkJZ290byBlcnI7CkBAIC0xMzMsOCArMTM3LDggQEAKIAlnd19ub2RlX3B1cmdlKGJhdF9wcml2KTsKIAlvcmlnaW5hdG9yX2ZyZWUoYmF0X3ByaXYpOwogCi0JaG5hX2xvY2FsX2ZyZWUoYmF0X3ByaXYpOwotCWhuYV9nbG9iYWxfZnJlZShiYXRfcHJpdik7CisJdHRfbG9jYWxfZnJlZShiYXRfcHJpdik7CisJdHRfZ2xvYmFsX2ZyZWUoYmF0X3ByaXYpOwogCiAJc29mdGlmX25laWdoX3B1cmdlKGJhdF9wcml2KTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvbWFpbi5oIGIvbmV0L2JhdG1hbi1hZHYvbWFpbi5oCmluZGV4IGRjMjQ4NjkuLjE0OGI0OWUgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L21haW4uaAorKysgYi9uZXQvYmF0bWFuLWFkdi9tYWluLmgKQEAgLTM0LDE2ICszNCwxOCBAQAogCiAjZGVmaW5lIFRRX01BWF9WQUxVRSAyNTUKICNkZWZpbmUgSklUVEVSIDIwCi0jZGVmaW5lIFRUTCA1MAkJCSAgLyogVGltZSBUbyBMaXZlIG9mIGJyb2FkY2FzdCBtZXNzYWdlcyAqLwogCi0jZGVmaW5lIFBVUkdFX1RJTUVPVVQgMjAwCS8qIHB1cmdlIG9yaWdpbmF0b3JzIGFmdGVyIHRpbWUgaW4gc2Vjb25kcyBpZiBubwotCQkJCSAgICogdmFsaWQgcGFja2V0IGNvbWVzIGluIC0+IFRPRE86IGNoZWNrCi0JCQkJICAgKiBpbmZsdWVuY2Ugb24gVFFfTE9DQUxfV0lORE9XX1NJWkUgKi8KLSNkZWZpbmUgTE9DQUxfSE5BX1RJTUVPVVQgMzYwMCAvKiBpbiBzZWNvbmRzICovCisgLyogVGltZSBUbyBMaXZlIG9mIGJyb2FkY2FzdCBtZXNzYWdlcyAqLworI2RlZmluZSBUVEwgNTAKIAotI2RlZmluZSBUUV9MT0NBTF9XSU5ET1dfU0laRSA2NAkgIC8qIHNsaWRpbmcgcGFja2V0IHJhbmdlIG9mIHJlY2VpdmVkIG9yaWdpbmF0b3IKLQkJCQkgICAqIG1lc3NhZ2VzIGluIHNxdWVuY2UgbnVtYmVycyAoc2hvdWxkIGJlIGEKLQkJCQkgICAqIG11bHRpcGxlIG9mIG91ciB3b3JkIHNpemUpICovCisvKiBwdXJnZSBvcmlnaW5hdG9ycyBhZnRlciB0aW1lIGluIHNlY29uZHMgaWYgbm8gdmFsaWQgcGFja2V0IGNvbWVzIGluCisgKiAtPiBUT0RPOiBjaGVjayBpbmZsdWVuY2Ugb24gVFFfTE9DQUxfV0lORE9XX1NJWkUgKi8KKyNkZWZpbmUgUFVSR0VfVElNRU9VVCAyMDAKKyNkZWZpbmUgVFRfTE9DQUxfVElNRU9VVCAzNjAwIC8qIGluIHNlY29uZHMgKi8KKworLyogc2xpZGluZyBwYWNrZXQgcmFuZ2Ugb2YgcmVjZWl2ZWQgb3JpZ2luYXRvciBtZXNzYWdlcyBpbiBzcXVlbmNlIG51bWJlcnMKKyAqIChzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiBvdXIgd29yZCBzaXplKSAqLworI2RlZmluZSBUUV9MT0NBTF9XSU5ET1dfU0laRSA2NAogI2RlZmluZSBUUV9HTE9CQUxfV0lORE9XX1NJWkUgNQogI2RlZmluZSBUUV9MT0NBTF9CSURSRUNUX1NFTkRfTUlOSU1VTSAxCiAjZGVmaW5lIFRRX0xPQ0FMX0JJRFJFQ1RfUkVDVl9NSU5JTVVNIDEKQEAgLTU1LDIxICs1NywyMCBAQAogCiAjZGVmaW5lIFZJU19JTlRFUlZBTCA1MDAwCS8qIDUgc2Vjb25kcyAqLwogCi0vKiBob3cgbXVjaCB3b3JzZSBzZWNvbmRhcnkgaW50ZXJmYWNlcyBtYXkgYmUgdG8KLSAqIHRvIGJlIGNvbnNpZGVyZWQgYXMgYm9uZGluZyBjYW5kaWRhdGVzICovCi0KKy8qIGhvdyBtdWNoIHdvcnNlIHNlY29uZGFyeSBpbnRlcmZhY2VzIG1heSBiZSB0byBiZSBjb25zaWRlcmVkIGFzIGJvbmRpbmcKKyAqIGNhbmRpZGF0ZXMgKi8KICNkZWZpbmUgQk9ORElOR19UUV9USFJFU0hPTEQJNTAKIAotI2RlZmluZSBNQVhfQUdHUkVHQVRJT05fQllURVMgNTEyIC8qIHNob3VsZCBub3QgYmUgYmlnZ2VyIHRoYW4gNTEyIGJ5dGVzIG9yCi0JCQkJICAgKiBjaGFuZ2UgdGhlIHNpemUgb2YKLQkJCQkgICAqIGZvcndfcGFja2V0LT5kaXJlY3RfbGlua19mbGFncyAqLworLyogc2hvdWxkIG5vdCBiZSBiaWdnZXIgdGhhbiA1MTIgYnl0ZXMgb3IgY2hhbmdlIHRoZSBzaXplIG9mCisgKiBmb3J3X3BhY2tldC0+ZGlyZWN0X2xpbmtfZmxhZ3MgKi8KKyNkZWZpbmUgTUFYX0FHR1JFR0FUSU9OX0JZVEVTIDUxMgogI2RlZmluZSBNQVhfQUdHUkVHQVRJT05fTVMgMTAwCiAKICNkZWZpbmUgU09GVElGX05FSUdIX1RJTUVPVVQgMTgwMDAwIC8qIDMgbWludXRlcyAqLwogCisvKiBkb24ndCByZXNldCBhZ2FpbiB3aXRoaW4gMzAgc2Vjb25kcyAqLwogI2RlZmluZSBSRVNFVF9QUk9URUNUSU9OX01TIDMwMDAwCiAjZGVmaW5lIEVYUEVDVEVEX1NFUU5PX1JBTkdFCTY1NTM2Ci0vKiBkb24ndCByZXNldCBhZ2FpbiB3aXRoaW4gMzAgc2Vjb25kcyAqLwogCiAjZGVmaW5lIE1FU0hfSU5BQ1RJVkUgMAogI2RlZmluZSBNRVNIX0FDVElWRSAxCkBAIC04NCwxMiArODUsMTMgQEAKICNpZmRlZiBwcl9mbXQKICN1bmRlZiBwcl9mbXQKICNlbmRpZgotI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdCAvKiBBcHBlbmQgJ2JhdG1hbi1hZHY6ICcgYmVmb3JlCi0JCQkJCSAgICAgKiBrZXJuZWwgbWVzc2FnZXMgKi8KKy8qIEFwcGVuZCAnYmF0bWFuLWFkdjogJyBiZWZvcmUga2VybmVsIG1lc3NhZ2VzICovCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CiAKLSNkZWZpbmUgREJHX0JBVE1BTiAxCS8qIGFsbCBtZXNzYWdlcyByZWxhdGVkIHRvIHJvdXRpbmcgLyBmbG9vZGluZyAvCi0JCQkgKiBicm9hZGNhc3RpbmcgLyBldGMgKi8KLSNkZWZpbmUgREJHX1JPVVRFUyAyCS8qIHJvdXRlIG9yIGhuYSBhZGRlZCAvIGNoYW5nZWQgLyBkZWxldGVkICovCisvKiBhbGwgbWVzc2FnZXMgcmVsYXRlZCB0byByb3V0aW5nIC8gZmxvb2RpbmcgLyBicm9hZGNhc3RpbmcgLyBldGMgKi8KKyNkZWZpbmUgREJHX0JBVE1BTiAxCisvKiByb3V0ZSBvciB0dCBlbnRyeSBhZGRlZCAvIGNoYW5nZWQgLyBkZWxldGVkICovCisjZGVmaW5lIERCR19ST1VURVMgMgogI2RlZmluZSBEQkdfQUxMIDMKIAogCkBAIC0xNzUsNCArMTc3LDYgQEAKIAlyZXR1cm4gKG1lbWNtcChkYXRhMSwgZGF0YTIsIEVUSF9BTEVOKSA9PSAwID8gMSA6IDApOwogfQogCisjZGVmaW5lIGF0b21pY19kZWNfbm90X3plcm8odikJYXRvbWljX2FkZF91bmxlc3MoKHYpLCAtMSwgMCkKKwogI2VuZGlmIC8qIF9ORVRfQkFUTUFOX0FEVl9NQUlOX0hfICovCmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmMgYi9uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmMKaW5kZXggZWQyM2E1ODkuLjQwYTMwYmIgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuYworKysgYi9uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmMKQEAgLTE5LDggKzE5LDYgQEAKICAqCiAgKi8KIAotLyogaW5jcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudGVyIGZvciB0aGlzIG9yaWdpbmF0b3IgKi8KLQogI2luY2x1ZGUgIm1haW4uaCIKICNpbmNsdWRlICJvcmlnaW5hdG9yLmgiCiAjaW5jbHVkZSAiaGFzaC5oIgpAQCAtNjIsNiArNjAsMjEgQEAKIAkJa2ZyZWVfcmN1KG5laWdoX25vZGUsIHJjdSk7CiB9CiAKKy8qIGluY3JlYXNlcyB0aGUgcmVmY291bnRlciBvZiBhIGZvdW5kIHJvdXRlciAqLworc3RydWN0IG5laWdoX25vZGUgKm9yaWdfbm9kZV9nZXRfcm91dGVyKHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSkKK3sKKwlzdHJ1Y3QgbmVpZ2hfbm9kZSAqcm91dGVyOworCisJcmN1X3JlYWRfbG9jaygpOworCXJvdXRlciA9IHJjdV9kZXJlZmVyZW5jZShvcmlnX25vZGUtPnJvdXRlcik7CisKKwlpZiAocm91dGVyICYmICFhdG9taWNfaW5jX25vdF96ZXJvKCZyb3V0ZXItPnJlZmNvdW50KSkKKwkJcm91dGVyID0gTlVMTDsKKworCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiByb3V0ZXI7Cit9CisKIHN0cnVjdCBuZWlnaF9ub2RlICpjcmVhdGVfbmVpZ2hib3Ioc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlLAogCQkJCSAgIHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbmVpZ2hfbm9kZSwKIAkJCQkgICB1aW50OF90ICpuZWlnaCwKQEAgLTc5LDYgKzkyLDcgQEAKIAogCUlOSVRfSExJU1RfTk9ERSgmbmVpZ2hfbm9kZS0+bGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJm5laWdoX25vZGUtPmJvbmRpbmdfbGlzdCk7CisJc3Bpbl9sb2NrX2luaXQoJm5laWdoX25vZGUtPnRxX2xvY2spOwogCiAJbWVtY3B5KG5laWdoX25vZGUtPmFkZHIsIG5laWdoLCBFVEhfQUxFTik7CiAJbmVpZ2hfbm9kZS0+b3JpZ19ub2RlID0gb3JpZ19uZWlnaF9ub2RlOwpAQCAtMTIwLDcgKzEzNCw3IEBACiAJc3Bpbl91bmxvY2tfYmgoJm9yaWdfbm9kZS0+bmVpZ2hfbGlzdF9sb2NrKTsKIAogCWZyYWdfbGlzdF9mcmVlKCZvcmlnX25vZGUtPmZyYWdfbGlzdCk7Ci0JaG5hX2dsb2JhbF9kZWxfb3JpZyhvcmlnX25vZGUtPmJhdF9wcml2LCBvcmlnX25vZGUsCisJdHRfZ2xvYmFsX2RlbF9vcmlnKG9yaWdfbm9kZS0+YmF0X3ByaXYsIG9yaWdfbm9kZSwKIAkJCSAgICAib3JpZ2luYXRvciB0aW1lZCBvdXQiKTsKIAogCWtmcmVlKG9yaWdfbm9kZS0+YmNhc3Rfb3duKTsKQEAgLTE5OCw3ICsyMTIsNyBAQAogCW9yaWdfbm9kZS0+YmF0X3ByaXYgPSBiYXRfcHJpdjsKIAltZW1jcHkob3JpZ19ub2RlLT5vcmlnLCBhZGRyLCBFVEhfQUxFTik7CiAJb3JpZ19ub2RlLT5yb3V0ZXIgPSBOVUxMOwotCW9yaWdfbm9kZS0+aG5hX2J1ZmYgPSBOVUxMOworCW9yaWdfbm9kZS0+dHRfYnVmZiA9IE5VTEw7CiAJb3JpZ19ub2RlLT5iY2FzdF9zZXFub19yZXNldCA9IGppZmZpZXMgLSAxCiAJCQkJCS0gbXNlY3NfdG9famlmZmllcyhSRVNFVF9QUk9URUNUSU9OX01TKTsKIAlvcmlnX25vZGUtPmJhdG1hbl9zZXFub19yZXNldCA9IGppZmZpZXMgLSAxCkBAIC0zMDksOCArMzIzLDggQEAKIAkJCQkJCQkmYmVzdF9uZWlnaF9ub2RlKSkgewogCQkJdXBkYXRlX3JvdXRlcyhiYXRfcHJpdiwgb3JpZ19ub2RlLAogCQkJCSAgICAgIGJlc3RfbmVpZ2hfbm9kZSwKLQkJCQkgICAgICBvcmlnX25vZGUtPmhuYV9idWZmLAotCQkJCSAgICAgIG9yaWdfbm9kZS0+aG5hX2J1ZmZfbGVuKTsKKwkJCQkgICAgICBvcmlnX25vZGUtPnR0X2J1ZmYsCisJCQkJICAgICAgb3JpZ19ub2RlLT50dF9idWZmX2xlbik7CiAJCX0KIAl9CiAKQEAgLTM4MSwyOSArMzk1LDM0IEBACiAJc3RydWN0IGhhc2h0YWJsZV90ICpoYXNoID0gYmF0X3ByaXYtPm9yaWdfaGFzaDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKm5vZGVfdG1wOwogCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBoYXJkX2lmYWNlICpwcmltYXJ5X2lmOwogCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKLQlzdHJ1Y3QgbmVpZ2hfbm9kZSAqbmVpZ2hfbm9kZTsKKwlzdHJ1Y3QgbmVpZ2hfbm9kZSAqbmVpZ2hfbm9kZSwgKm5laWdoX25vZGVfdG1wOwogCWludCBiYXRtYW5fY291bnQgPSAwOwogCWludCBsYXN0X3NlZW5fc2VjczsKIAlpbnQgbGFzdF9zZWVuX21zZWNzOwotCWludCBpOworCWludCBpLCByZXQgPSAwOwogCi0JaWYgKCghYmF0X3ByaXYtPnByaW1hcnlfaWYpIHx8Ci0JICAgIChiYXRfcHJpdi0+cHJpbWFyeV9pZi0+aWZfc3RhdHVzICE9IElGX0FDVElWRSkpIHsKLQkJaWYgKCFiYXRfcHJpdi0+cHJpbWFyeV9pZikKLQkJCXJldHVybiBzZXFfcHJpbnRmKHNlcSwgIkJBVE1BTiBtZXNoICVzIGRpc2FibGVkIC0gIgotCQkJCSAgICAgInBsZWFzZSBzcGVjaWZ5IGludGVyZmFjZXMgdG8gZW5hYmxlIGl0XG4iLAotCQkJCSAgICAgbmV0X2Rldi0+bmFtZSk7CisJcHJpbWFyeV9pZiA9IHByaW1hcnlfaWZfZ2V0X3NlbGVjdGVkKGJhdF9wcml2KTsKIAotCQlyZXR1cm4gc2VxX3ByaW50ZihzZXEsICJCQVRNQU4gbWVzaCAlcyAiCi0JCQkJICAiZGlzYWJsZWQgLSBwcmltYXJ5IGludGVyZmFjZSBub3QgYWN0aXZlXG4iLAotCQkJCSAgbmV0X2Rldi0+bmFtZSk7CisJaWYgKCFwcmltYXJ5X2lmKSB7CisJCXJldCA9IHNlcV9wcmludGYoc2VxLCAiQkFUTUFOIG1lc2ggJXMgZGlzYWJsZWQgLSAiCisJCQkJICJwbGVhc2Ugc3BlY2lmeSBpbnRlcmZhY2VzIHRvIGVuYWJsZSBpdFxuIiwKKwkJCQkgbmV0X2Rldi0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChwcmltYXJ5X2lmLT5pZl9zdGF0dXMgIT0gSUZfQUNUSVZFKSB7CisJCXJldCA9IHNlcV9wcmludGYoc2VxLCAiQkFUTUFOIG1lc2ggJXMgIgorCQkJCSAiZGlzYWJsZWQgLSBwcmltYXJ5IGludGVyZmFjZSBub3QgYWN0aXZlXG4iLAorCQkJCSBuZXRfZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CiAJfQogCiAJc2VxX3ByaW50ZihzZXEsICJbQi5BLlQuTS5BLk4uIGFkdiAlcyVzLCBNYWluSUYvTUFDOiAlcy8lcE0gKCVzKV1cbiIsCiAJCSAgIFNPVVJDRV9WRVJTSU9OLCBSRVZJU0lPTl9WRVJTSU9OX1NUUiwKLQkJICAgYmF0X3ByaXYtPnByaW1hcnlfaWYtPm5ldF9kZXYtPm5hbWUsCi0JCSAgIGJhdF9wcml2LT5wcmltYXJ5X2lmLT5uZXRfZGV2LT5kZXZfYWRkciwgbmV0X2Rldi0+bmFtZSk7CisJCSAgIHByaW1hcnlfaWYtPm5ldF9kZXYtPm5hbWUsCisJCSAgIHByaW1hcnlfaWYtPm5ldF9kZXYtPmRldl9hZGRyLCBuZXRfZGV2LT5uYW1lKTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAgJS0xNXMgJXMgKCVzLyVpKSAlMTdzIFslMTBzXTogJTIwcyAuLi5cbiIsCiAJCSAgICJPcmlnaW5hdG9yIiwgImxhc3Qtc2VlbiIsICIjIiwgVFFfTUFYX1ZBTFVFLCAiTmV4dGhvcCIsCiAJCSAgICJvdXRnb2luZ0lGIiwgIlBvdGVudGlhbCBuZXh0aG9wcyIpOwpAQCAtNDEzLDQwICs0MzIsNDcgQEAKIAogCQlyY3VfcmVhZF9sb2NrKCk7CiAJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShvcmlnX25vZGUsIG5vZGUsIGhlYWQsIGhhc2hfZW50cnkpIHsKLQkJCWlmICghb3JpZ19ub2RlLT5yb3V0ZXIpCisJCQluZWlnaF9ub2RlID0gb3JpZ19ub2RlX2dldF9yb3V0ZXIob3JpZ19ub2RlKTsKKwkJCWlmICghbmVpZ2hfbm9kZSkKIAkJCQljb250aW51ZTsKIAotCQkJaWYgKG9yaWdfbm9kZS0+cm91dGVyLT50cV9hdmcgPT0gMCkKLQkJCQljb250aW51ZTsKKwkJCWlmIChuZWlnaF9ub2RlLT50cV9hdmcgPT0gMCkKKwkJCQlnb3RvIG5leHQ7CiAKIAkJCWxhc3Rfc2Vlbl9zZWNzID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0KIAkJCQkJCW9yaWdfbm9kZS0+bGFzdF92YWxpZCkgLyAxMDAwOwogCQkJbGFzdF9zZWVuX21zZWNzID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0KIAkJCQkJCW9yaWdfbm9kZS0+bGFzdF92YWxpZCkgJSAxMDAwOwogCi0JCQluZWlnaF9ub2RlID0gb3JpZ19ub2RlLT5yb3V0ZXI7CiAJCQlzZXFfcHJpbnRmKHNlcSwgIiVwTSAlNGkuJTAzaXMgICAoJTNpKSAlcE0gWyUxMHNdOiIsCiAJCQkJICAgb3JpZ19ub2RlLT5vcmlnLCBsYXN0X3NlZW5fc2VjcywKIAkJCQkgICBsYXN0X3NlZW5fbXNlY3MsIG5laWdoX25vZGUtPnRxX2F2ZywKIAkJCQkgICBuZWlnaF9ub2RlLT5hZGRyLAogCQkJCSAgIG5laWdoX25vZGUtPmlmX2luY29taW5nLT5uZXRfZGV2LT5uYW1lKTsKIAotCQkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG5laWdoX25vZGUsIG5vZGVfdG1wLAorCQkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG5laWdoX25vZGVfdG1wLCBub2RlX3RtcCwKIAkJCQkJCSAmb3JpZ19ub2RlLT5uZWlnaF9saXN0LCBsaXN0KSB7Ci0JCQkJc2VxX3ByaW50ZihzZXEsICIgJXBNICglM2kpIiwgbmVpZ2hfbm9kZS0+YWRkciwKLQkJCQkJCW5laWdoX25vZGUtPnRxX2F2Zyk7CisJCQkJc2VxX3ByaW50ZihzZXEsICIgJXBNICglM2kpIiwKKwkJCQkJICAgbmVpZ2hfbm9kZV90bXAtPmFkZHIsCisJCQkJCSAgIG5laWdoX25vZGVfdG1wLT50cV9hdmcpOwogCQkJfQogCiAJCQlzZXFfcHJpbnRmKHNlcSwgIlxuIik7CiAJCQliYXRtYW5fY291bnQrKzsKKworbmV4dDoKKwkJCW5laWdoX25vZGVfZnJlZV9yZWYobmVpZ2hfbm9kZSk7CiAJCX0KIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQogCi0JaWYgKChiYXRtYW5fY291bnQgPT0gMCkpCisJaWYgKGJhdG1hbl9jb3VudCA9PSAwKQogCQlzZXFfcHJpbnRmKHNlcSwgIk5vIGJhdG1hbiBub2RlcyBpbiByYW5nZSAuLi5cbiIpOwogCi0JcmV0dXJuIDA7CitvdXQ6CisJaWYgKHByaW1hcnlfaWYpCisJCWhhcmRpZl9mcmVlX3JlZihwcmltYXJ5X2lmKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IG9yaWdfbm9kZV9hZGRfaWYoc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlLCBpbnQgbWF4X2lmX251bSkKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuaCBiL25ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuaAppbmRleCA1Y2MwMTEwLi5lMWQ2NDFmIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmgKKysrIGIvbmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5oCkBAIC0zNCw2ICszNCw3IEBACiAJCQkJICAgdWludDhfdCAqbmVpZ2gsCiAJCQkJICAgc3RydWN0IGhhcmRfaWZhY2UgKmlmX2luY29taW5nKTsKIHZvaWQgbmVpZ2hfbm9kZV9mcmVlX3JlZihzdHJ1Y3QgbmVpZ2hfbm9kZSAqbmVpZ2hfbm9kZSk7CitzdHJ1Y3QgbmVpZ2hfbm9kZSAqb3JpZ19ub2RlX2dldF9yb3V0ZXIoc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlKTsKIGludCBvcmlnX3NlcV9wcmludF90ZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpOwogaW50IG9yaWdfaGFzaF9hZGRfaWYoc3RydWN0IGhhcmRfaWZhY2UgKmhhcmRfaWZhY2UsIGludCBtYXhfaWZfbnVtKTsKIGludCBvcmlnX2hhc2hfZGVsX2lmKHN0cnVjdCBoYXJkX2lmYWNlICpoYXJkX2lmYWNlLCBpbnQgbWF4X2lmX251bSk7CmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9wYWNrZXQuaCBiL25ldC9iYXRtYW4tYWR2L3BhY2tldC5oCmluZGV4IGU3NTcxODcuLmVkYTk5NjUgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L3BhY2tldC5oCisrKyBiL25ldC9iYXRtYW4tYWR2L3BhY2tldC5oCkBAIC02MSw3ICs2MSw3IEBACiAJdWludDhfdCAgb3JpZ1s2XTsKIAl1aW50OF90ICBwcmV2X3NlbmRlcls2XTsKIAl1aW50OF90ICB0dGw7Ci0JdWludDhfdCAgbnVtX2huYTsKKwl1aW50OF90ICBudW1fdHQ7CiAJdWludDhfdCAgZ3dfZmxhZ3M7ICAvKiBmbGFncyByZWxhdGVkIHRvIGdhdGV3YXkgY2xhc3MgKi8KIAl1aW50OF90ICBhbGlnbjsKIH0gX19wYWNrZWQ7CkBAIC0xMjgsOCArMTI4LDcgQEAKIAl1aW50OF90ICBlbnRyaWVzOwkgLyogbnVtYmVyIG9mIGVudHJpZXMgYmVoaW5kIHRoaXMgc3RydWN0ICovCiAJdWludDMyX3Qgc2Vxbm87CQkgLyogc2VxdWVuY2UgbnVtYmVyICovCiAJdWludDhfdCAgdHRsOwkJIC8qIFRUTCAqLwotCXVpbnQ4X3QgIHZpc19vcmlnWzZdOwkgLyogb3JpZ2luYXRvciB0aGF0IGluZm9ybXMgYWJvdXQgaXRzCi0JCQkJICAqIG5laWdoYm9ycyAqLworCXVpbnQ4X3QgIHZpc19vcmlnWzZdOwkgLyogb3JpZ2luYXRvciB0aGF0IGFubm91bmNlcyBpdHMgbmVpZ2hib3JzICovCiAJdWludDhfdCAgdGFyZ2V0X29yaWdbNl07IC8qIHdobyBzaG91bGQgcmVjZWl2ZSB0aGlzIHBhY2tldCAqLwogCXVpbnQ4X3QgIHNlbmRlcl9vcmlnWzZdOyAvKiB3aG8gc2VudCBvciByZWJyb2FkY2FzdGVkIHRoaXMgcGFja2V0ICovCiB9IF9fcGFja2VkOwpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvcm91dGluZy5jIGIvbmV0L2JhdG1hbi1hZHYvcm91dGluZy5jCmluZGV4IGMxNzJmNWQuLmJiMWMzZWMgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L3JvdXRpbmcuYworKysgYi9uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmMKQEAgLTY0LDgwICs2NCw5NyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgdXBkYXRlX0hOQShzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LCBzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsCi0JCSAgICAgICB1bnNpZ25lZCBjaGFyICpobmFfYnVmZiwgaW50IGhuYV9idWZmX2xlbikKK3N0YXRpYyB2b2lkIHVwZGF0ZV9UVChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LCBzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsCisJCSAgICAgICB1bnNpZ25lZCBjaGFyICp0dF9idWZmLCBpbnQgdHRfYnVmZl9sZW4pCiB7Ci0JaWYgKChobmFfYnVmZl9sZW4gIT0gb3JpZ19ub2RlLT5obmFfYnVmZl9sZW4pIHx8Ci0JICAgICgoaG5hX2J1ZmZfbGVuID4gMCkgJiYKLQkgICAgIChvcmlnX25vZGUtPmhuYV9idWZmX2xlbiA+IDApICYmCi0JICAgICAobWVtY21wKG9yaWdfbm9kZS0+aG5hX2J1ZmYsIGhuYV9idWZmLCBobmFfYnVmZl9sZW4pICE9IDApKSkgeworCWlmICgodHRfYnVmZl9sZW4gIT0gb3JpZ19ub2RlLT50dF9idWZmX2xlbikgfHwKKwkgICAgKCh0dF9idWZmX2xlbiA+IDApICYmCisJICAgICAob3JpZ19ub2RlLT50dF9idWZmX2xlbiA+IDApICYmCisJICAgICAobWVtY21wKG9yaWdfbm9kZS0+dHRfYnVmZiwgdHRfYnVmZiwgdHRfYnVmZl9sZW4pICE9IDApKSkgewogCi0JCWlmIChvcmlnX25vZGUtPmhuYV9idWZmX2xlbiA+IDApCi0JCQlobmFfZ2xvYmFsX2RlbF9vcmlnKGJhdF9wcml2LCBvcmlnX25vZGUsCi0JCQkJCSAgICAib3JpZ2luYXRvciBjaGFuZ2VkIGhuYSIpOworCQlpZiAob3JpZ19ub2RlLT50dF9idWZmX2xlbiA+IDApCisJCQl0dF9nbG9iYWxfZGVsX29yaWcoYmF0X3ByaXYsIG9yaWdfbm9kZSwKKwkJCQkJICAgICJvcmlnaW5hdG9yIGNoYW5nZWQgdHQiKTsKIAotCQlpZiAoKGhuYV9idWZmX2xlbiA+IDApICYmIChobmFfYnVmZikpCi0JCQlobmFfZ2xvYmFsX2FkZF9vcmlnKGJhdF9wcml2LCBvcmlnX25vZGUsCi0JCQkJCSAgICBobmFfYnVmZiwgaG5hX2J1ZmZfbGVuKTsKKwkJaWYgKCh0dF9idWZmX2xlbiA+IDApICYmICh0dF9idWZmKSkKKwkJCXR0X2dsb2JhbF9hZGRfb3JpZyhiYXRfcHJpdiwgb3JpZ19ub2RlLAorCQkJCQkgICAgdHRfYnVmZiwgdHRfYnVmZl9sZW4pOwogCX0KIH0KIAogc3RhdGljIHZvaWQgdXBkYXRlX3JvdXRlKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCiAJCQkgc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlLAogCQkJIHN0cnVjdCBuZWlnaF9ub2RlICpuZWlnaF9ub2RlLAotCQkJIHVuc2lnbmVkIGNoYXIgKmhuYV9idWZmLCBpbnQgaG5hX2J1ZmZfbGVuKQorCQkJIHVuc2lnbmVkIGNoYXIgKnR0X2J1ZmYsIGludCB0dF9idWZmX2xlbikKIHsKLQlzdHJ1Y3QgbmVpZ2hfbm9kZSAqbmVpZ2hfbm9kZV90bXA7CisJc3RydWN0IG5laWdoX25vZGUgKmN1cnJfcm91dGVyOworCisJY3Vycl9yb3V0ZXIgPSBvcmlnX25vZGVfZ2V0X3JvdXRlcihvcmlnX25vZGUpOwogCiAJLyogcm91dGUgZGVsZXRlZCAqLwotCWlmICgob3JpZ19ub2RlLT5yb3V0ZXIpICYmICghbmVpZ2hfbm9kZSkpIHsKKwlpZiAoKGN1cnJfcm91dGVyKSAmJiAoIW5laWdoX25vZGUpKSB7CiAKIAkJYmF0X2RiZyhEQkdfUk9VVEVTLCBiYXRfcHJpdiwgIkRlbGV0aW5nIHJvdXRlIHRvd2FyZHM6ICVwTVxuIiwKIAkJCW9yaWdfbm9kZS0+b3JpZyk7Ci0JCWhuYV9nbG9iYWxfZGVsX29yaWcoYmF0X3ByaXYsIG9yaWdfbm9kZSwKKwkJdHRfZ2xvYmFsX2RlbF9vcmlnKGJhdF9wcml2LCBvcmlnX25vZGUsCiAJCQkJICAgICJvcmlnaW5hdG9yIHRpbWVkIG91dCIpOwogCi0JCS8qIHJvdXRlIGFkZGVkICovCi0JfSBlbHNlIGlmICgoIW9yaWdfbm9kZS0+cm91dGVyKSAmJiAobmVpZ2hfbm9kZSkpIHsKKwkvKiByb3V0ZSBhZGRlZCAqLworCX0gZWxzZSBpZiAoKCFjdXJyX3JvdXRlcikgJiYgKG5laWdoX25vZGUpKSB7CiAKIAkJYmF0X2RiZyhEQkdfUk9VVEVTLCBiYXRfcHJpdiwKIAkJCSJBZGRpbmcgcm91dGUgdG93YXJkczogJXBNICh2aWEgJXBNKVxuIiwKIAkJCW9yaWdfbm9kZS0+b3JpZywgbmVpZ2hfbm9kZS0+YWRkcik7Ci0JCWhuYV9nbG9iYWxfYWRkX29yaWcoYmF0X3ByaXYsIG9yaWdfbm9kZSwKLQkJCQkgICAgaG5hX2J1ZmYsIGhuYV9idWZmX2xlbik7CisJCXR0X2dsb2JhbF9hZGRfb3JpZyhiYXRfcHJpdiwgb3JpZ19ub2RlLAorCQkJCSAgICB0dF9idWZmLCB0dF9idWZmX2xlbik7CiAKLQkJLyogcm91dGUgY2hhbmdlZCAqLworCS8qIHJvdXRlIGNoYW5nZWQgKi8KIAl9IGVsc2UgewogCQliYXRfZGJnKERCR19ST1VURVMsIGJhdF9wcml2LAogCQkJIkNoYW5naW5nIHJvdXRlIHRvd2FyZHM6ICVwTSAiCiAJCQkiKG5vdyB2aWEgJXBNIC0gd2FzIHZpYSAlcE0pXG4iLAogCQkJb3JpZ19ub2RlLT5vcmlnLCBuZWlnaF9ub2RlLT5hZGRyLAotCQkJb3JpZ19ub2RlLT5yb3V0ZXItPmFkZHIpOworCQkJY3Vycl9yb3V0ZXItPmFkZHIpOwogCX0KIAorCWlmIChjdXJyX3JvdXRlcikKKwkJbmVpZ2hfbm9kZV9mcmVlX3JlZihjdXJyX3JvdXRlcik7CisKKwkvKiBpbmNyZWFzZSByZWZjb3VudCBvZiBuZXcgYmVzdCBuZWlnaGJvciAqLwogCWlmIChuZWlnaF9ub2RlICYmICFhdG9taWNfaW5jX25vdF96ZXJvKCZuZWlnaF9ub2RlLT5yZWZjb3VudCkpCiAJCW5laWdoX25vZGUgPSBOVUxMOwotCW5laWdoX25vZGVfdG1wID0gb3JpZ19ub2RlLT5yb3V0ZXI7Ci0Jb3JpZ19ub2RlLT5yb3V0ZXIgPSBuZWlnaF9ub2RlOwotCWlmIChuZWlnaF9ub2RlX3RtcCkKLQkJbmVpZ2hfbm9kZV9mcmVlX3JlZihuZWlnaF9ub2RlX3RtcCk7CisKKwlzcGluX2xvY2tfYmgoJm9yaWdfbm9kZS0+bmVpZ2hfbGlzdF9sb2NrKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIob3JpZ19ub2RlLT5yb3V0ZXIsIG5laWdoX25vZGUpOworCXNwaW5fdW5sb2NrX2JoKCZvcmlnX25vZGUtPm5laWdoX2xpc3RfbG9jayk7CisKKwkvKiBkZWNyZWFzZSByZWZjb3VudCBvZiBwcmV2aW91cyBiZXN0IG5laWdoYm9yICovCisJaWYgKGN1cnJfcm91dGVyKQorCQluZWlnaF9ub2RlX2ZyZWVfcmVmKGN1cnJfcm91dGVyKTsKIH0KIAogCiB2b2lkIHVwZGF0ZV9yb3V0ZXMoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwgc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlLAotCQkgICBzdHJ1Y3QgbmVpZ2hfbm9kZSAqbmVpZ2hfbm9kZSwgdW5zaWduZWQgY2hhciAqaG5hX2J1ZmYsCi0JCSAgIGludCBobmFfYnVmZl9sZW4pCisJCSAgIHN0cnVjdCBuZWlnaF9ub2RlICpuZWlnaF9ub2RlLCB1bnNpZ25lZCBjaGFyICp0dF9idWZmLAorCQkgICBpbnQgdHRfYnVmZl9sZW4pCiB7CisJc3RydWN0IG5laWdoX25vZGUgKnJvdXRlciA9IE5VTEw7CiAKIAlpZiAoIW9yaWdfbm9kZSkKLQkJcmV0dXJuOworCQlnb3RvIG91dDsKIAotCWlmIChvcmlnX25vZGUtPnJvdXRlciAhPSBuZWlnaF9ub2RlKQorCXJvdXRlciA9IG9yaWdfbm9kZV9nZXRfcm91dGVyKG9yaWdfbm9kZSk7CisKKwlpZiAocm91dGVyICE9IG5laWdoX25vZGUpCiAJCXVwZGF0ZV9yb3V0ZShiYXRfcHJpdiwgb3JpZ19ub2RlLCBuZWlnaF9ub2RlLAotCQkJICAgICBobmFfYnVmZiwgaG5hX2J1ZmZfbGVuKTsKLQkvKiBtYXkgYmUganVzdCBITkEgY2hhbmdlZCAqLworCQkJICAgICB0dF9idWZmLCB0dF9idWZmX2xlbik7CisJLyogbWF5IGJlIGp1c3QgVFQgY2hhbmdlZCAqLwogCWVsc2UKLQkJdXBkYXRlX0hOQShiYXRfcHJpdiwgb3JpZ19ub2RlLCBobmFfYnVmZiwgaG5hX2J1ZmZfbGVuKTsKKwkJdXBkYXRlX1RUKGJhdF9wcml2LCBvcmlnX25vZGUsIHR0X2J1ZmYsIHR0X2J1ZmZfbGVuKTsKKworb3V0OgorCWlmIChyb3V0ZXIpCisJCW5laWdoX25vZGVfZnJlZV9yZWYocm91dGVyKTsKIH0KIAogc3RhdGljIGludCBpc19iaWRpcmVjdGlvbmFsX25laWdoKHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwKQEAgLTE1Miw2NSArMTY5LDQxIEBACiAJdWludDhfdCBvcmlnX2VxX2NvdW50LCBuZWlnaF9ycV9jb3VudCwgdHFfb3duOwogCWludCB0cV9hc3ltX3BlbmFsdHksIHJldCA9IDA7CiAKLQlpZiAob3JpZ19ub2RlID09IG9yaWdfbmVpZ2hfbm9kZSkgewotCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0bXBfbmVpZ2hfbm9kZSwgbm9kZSwKLQkJCQkJICZvcmlnX25vZGUtPm5laWdoX2xpc3QsIGxpc3QpIHsKKwkvKiBmaW5kIGNvcnJlc3BvbmRpbmcgb25lIGhvcCBuZWlnaGJvciAqLworCXJjdV9yZWFkX2xvY2soKTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodG1wX25laWdoX25vZGUsIG5vZGUsCisJCQkJICZvcmlnX25laWdoX25vZGUtPm5laWdoX2xpc3QsIGxpc3QpIHsKIAotCQkJaWYgKCFjb21wYXJlX2V0aCh0bXBfbmVpZ2hfbm9kZS0+YWRkciwKLQkJCQkJIG9yaWdfbmVpZ2hfbm9kZS0+b3JpZykpCi0JCQkJY29udGludWU7CisJCWlmICghY29tcGFyZV9ldGgodG1wX25laWdoX25vZGUtPmFkZHIsIG9yaWdfbmVpZ2hfbm9kZS0+b3JpZykpCisJCQljb250aW51ZTsKIAotCQkJaWYgKHRtcF9uZWlnaF9ub2RlLT5pZl9pbmNvbWluZyAhPSBpZl9pbmNvbWluZykKLQkJCQljb250aW51ZTsKKwkJaWYgKHRtcF9uZWlnaF9ub2RlLT5pZl9pbmNvbWluZyAhPSBpZl9pbmNvbWluZykKKwkJCWNvbnRpbnVlOwogCi0JCQlpZiAoIWF0b21pY19pbmNfbm90X3plcm8oJnRtcF9uZWlnaF9ub2RlLT5yZWZjb3VudCkpCi0JCQkJY29udGludWU7CisJCWlmICghYXRvbWljX2luY19ub3RfemVybygmdG1wX25laWdoX25vZGUtPnJlZmNvdW50KSkKKwkJCWNvbnRpbnVlOwogCi0JCQluZWlnaF9ub2RlID0gdG1wX25laWdoX25vZGU7Ci0JCX0KLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQkJaWYgKCFuZWlnaF9ub2RlKQotCQkJbmVpZ2hfbm9kZSA9IGNyZWF0ZV9uZWlnaGJvcihvcmlnX25vZGUsCi0JCQkJCQkgICAgIG9yaWdfbmVpZ2hfbm9kZSwKLQkJCQkJCSAgICAgb3JpZ19uZWlnaF9ub2RlLT5vcmlnLAotCQkJCQkJICAgICBpZl9pbmNvbWluZyk7Ci0JCWlmICghbmVpZ2hfbm9kZSkKLQkJCWdvdG8gb3V0OwotCi0JCW5laWdoX25vZGUtPmxhc3RfdmFsaWQgPSBqaWZmaWVzOwotCX0gZWxzZSB7Ci0JCS8qIGZpbmQgcGFja2V0IGNvdW50IG9mIGNvcnJlc3BvbmRpbmcgb25lIGhvcCBuZWlnaGJvciAqLwotCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0bXBfbmVpZ2hfbm9kZSwgbm9kZSwKLQkJCQkJICZvcmlnX25laWdoX25vZGUtPm5laWdoX2xpc3QsIGxpc3QpIHsKLQotCQkJaWYgKCFjb21wYXJlX2V0aCh0bXBfbmVpZ2hfbm9kZS0+YWRkciwKLQkJCQkJIG9yaWdfbmVpZ2hfbm9kZS0+b3JpZykpCi0JCQkJY29udGludWU7Ci0KLQkJCWlmICh0bXBfbmVpZ2hfbm9kZS0+aWZfaW5jb21pbmcgIT0gaWZfaW5jb21pbmcpCi0JCQkJY29udGludWU7Ci0KLQkJCWlmICghYXRvbWljX2luY19ub3RfemVybygmdG1wX25laWdoX25vZGUtPnJlZmNvdW50KSkKLQkJCQljb250aW51ZTsKLQotCQkJbmVpZ2hfbm9kZSA9IHRtcF9uZWlnaF9ub2RlOwotCQl9Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCi0JCWlmICghbmVpZ2hfbm9kZSkKLQkJCW5laWdoX25vZGUgPSBjcmVhdGVfbmVpZ2hib3Iob3JpZ19uZWlnaF9ub2RlLAotCQkJCQkJICAgICBvcmlnX25laWdoX25vZGUsCi0JCQkJCQkgICAgIG9yaWdfbmVpZ2hfbm9kZS0+b3JpZywKLQkJCQkJCSAgICAgaWZfaW5jb21pbmcpOwotCQlpZiAoIW5laWdoX25vZGUpCi0JCQlnb3RvIG91dDsKKwkJbmVpZ2hfbm9kZSA9IHRtcF9uZWlnaF9ub2RlOworCQlicmVhazsKIAl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlpZiAoIW5laWdoX25vZGUpCisJCW5laWdoX25vZGUgPSBjcmVhdGVfbmVpZ2hib3Iob3JpZ19uZWlnaF9ub2RlLAorCQkJCQkgICAgIG9yaWdfbmVpZ2hfbm9kZSwKKwkJCQkJICAgICBvcmlnX25laWdoX25vZGUtPm9yaWcsCisJCQkJCSAgICAgaWZfaW5jb21pbmcpOworCisJaWYgKCFuZWlnaF9ub2RlKQorCQlnb3RvIG91dDsKKworCS8qIGlmIG9yaWdfbm9kZSBpcyBkaXJlY3QgbmVpZ2hib3VyIHVwZGF0ZSBuZWlnaF9ub2RlIGxhc3RfdmFsaWQgKi8KKwlpZiAob3JpZ19ub2RlID09IG9yaWdfbmVpZ2hfbm9kZSkKKwkJbmVpZ2hfbm9kZS0+bGFzdF92YWxpZCA9IGppZmZpZXM7CiAKIAlvcmlnX25vZGUtPmxhc3RfdmFsaWQgPSBqaWZmaWVzOwogCisJLyogZmluZCBwYWNrZXQgY291bnQgb2YgY29ycmVzcG9uZGluZyBvbmUgaG9wIG5laWdoYm9yICovCiAJc3Bpbl9sb2NrX2JoKCZvcmlnX25vZGUtPm9nbV9jbnRfbG9jayk7CiAJb3JpZ19lcV9jb3VudCA9IG9yaWdfbmVpZ2hfbm9kZS0+YmNhc3Rfb3duX3N1bVtpZl9pbmNvbWluZy0+aWZfbnVtXTsKIAluZWlnaF9ycV9jb3VudCA9IG5laWdoX25vZGUtPnJlYWxfcGFja2V0X2NvdW50OwpAQCAtMjg4LDggKzI4MSw4IEBACiAJCQkJICBzdHJ1Y3QgbmVpZ2hfbm9kZSAqbmVpZ2hfbm9kZSkKIHsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQlzdHJ1Y3QgbmVpZ2hfbm9kZSAqdG1wX25laWdoX25vZGU7Ci0JdWludDhfdCBiZXN0X3RxLCBpbnRlcmZlcmVuY2VfY2FuZGlkYXRlID0gMDsKKwlzdHJ1Y3QgbmVpZ2hfbm9kZSAqdG1wX25laWdoX25vZGUsICpyb3V0ZXIgPSBOVUxMOworCXVpbnQ4X3QgaW50ZXJmZXJlbmNlX2NhbmRpZGF0ZSA9IDA7CiAKIAlzcGluX2xvY2tfYmgoJm9yaWdfbm9kZS0+bmVpZ2hfbGlzdF9sb2NrKTsKIApAQCAtMjk4LDEzICsyOTEsMTIgQEAKIAkJCSBuZWlnaF9ub2RlLT5vcmlnX25vZGUtPnByaW1hcnlfYWRkcikpCiAJCWdvdG8gY2FuZGlkYXRlX2RlbDsKIAotCWlmICghb3JpZ19ub2RlLT5yb3V0ZXIpCisJcm91dGVyID0gb3JpZ19ub2RlX2dldF9yb3V0ZXIob3JpZ19ub2RlKTsKKwlpZiAoIXJvdXRlcikKIAkJZ290byBjYW5kaWRhdGVfZGVsOwogCi0JYmVzdF90cSA9IG9yaWdfbm9kZS0+cm91dGVyLT50cV9hdmc7Ci0KIAkvKiAuLi4gYW5kIGlzIGdvb2QgZW5vdWdoIHRvIGJlIGNvbnNpZGVyZWQgKi8KLQlpZiAobmVpZ2hfbm9kZS0+dHFfYXZnIDwgYmVzdF90cSAtIEJPTkRJTkdfVFFfVEhSRVNIT0xEKQorCWlmIChuZWlnaF9ub2RlLT50cV9hdmcgPCByb3V0ZXItPnRxX2F2ZyAtIEJPTkRJTkdfVFFfVEhSRVNIT0xEKQogCQlnb3RvIGNhbmRpZGF0ZV9kZWw7CiAKIAkvKioKQEAgLTM1MCw3ICszNDIsOSBAQAogCiBvdXQ6CiAJc3Bpbl91bmxvY2tfYmgoJm9yaWdfbm9kZS0+bmVpZ2hfbGlzdF9sb2NrKTsKLQlyZXR1cm47CisKKwlpZiAocm91dGVyKQorCQluZWlnaF9ub2RlX2ZyZWVfcmVmKHJvdXRlcik7CiB9CiAKIC8qIGNvcHkgcHJpbWFyeSBhZGRyZXNzIGZvciBib25kaW5nICovCkBAIC0zNjksMTMgKzM2MywxNCBAQAogCQkJc3RydWN0IGV0aGhkciAqZXRoaGRyLAogCQkJc3RydWN0IGJhdG1hbl9wYWNrZXQgKmJhdG1hbl9wYWNrZXQsCiAJCQlzdHJ1Y3QgaGFyZF9pZmFjZSAqaWZfaW5jb21pbmcsCi0JCQl1bnNpZ25lZCBjaGFyICpobmFfYnVmZiwgaW50IGhuYV9idWZmX2xlbiwKKwkJCXVuc2lnbmVkIGNoYXIgKnR0X2J1ZmYsIGludCB0dF9idWZmX2xlbiwKIAkJCWNoYXIgaXNfZHVwbGljYXRlKQogewogCXN0cnVjdCBuZWlnaF9ub2RlICpuZWlnaF9ub2RlID0gTlVMTCwgKnRtcF9uZWlnaF9ub2RlID0gTlVMTDsKKwlzdHJ1Y3QgbmVpZ2hfbm9kZSAqcm91dGVyID0gTlVMTDsKIAlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGVfdG1wOwogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCWludCB0bXBfaG5hX2J1ZmZfbGVuOworCWludCB0bXBfdHRfYnVmZl9sZW47CiAJdWludDhfdCBiY2FzdF9vd25fc3VtX29yaWcsIGJjYXN0X293bl9zdW1fbmVpZ2g7CiAKIAliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LCAidXBkYXRlX29yaWdpbmF0b3IoKTogIgpAQCAtMzk2LDEwICszOTEsMTIgQEAKIAkJaWYgKGlzX2R1cGxpY2F0ZSkKIAkJCWNvbnRpbnVlOwogCisJCXNwaW5fbG9ja19iaCgmdG1wX25laWdoX25vZGUtPnRxX2xvY2spOwogCQlyaW5nX2J1ZmZlcl9zZXQodG1wX25laWdoX25vZGUtPnRxX3JlY3YsCiAJCQkJJnRtcF9uZWlnaF9ub2RlLT50cV9pbmRleCwgMCk7CiAJCXRtcF9uZWlnaF9ub2RlLT50cV9hdmcgPQogCQkJcmluZ19idWZmZXJfYXZnKHRtcF9uZWlnaF9ub2RlLT50cV9yZWN2KTsKKwkJc3Bpbl91bmxvY2tfYmgoJnRtcF9uZWlnaF9ub2RlLT50cV9sb2NrKTsKIAl9CiAKIAlpZiAoIW5laWdoX25vZGUpIHsKQEAgLTQyNCwxMCArNDIxLDEyIEBACiAJb3JpZ19ub2RlLT5mbGFncyA9IGJhdG1hbl9wYWNrZXQtPmZsYWdzOwogCW5laWdoX25vZGUtPmxhc3RfdmFsaWQgPSBqaWZmaWVzOwogCisJc3Bpbl9sb2NrX2JoKCZuZWlnaF9ub2RlLT50cV9sb2NrKTsKIAlyaW5nX2J1ZmZlcl9zZXQobmVpZ2hfbm9kZS0+dHFfcmVjdiwKIAkJCSZuZWlnaF9ub2RlLT50cV9pbmRleCwKIAkJCWJhdG1hbl9wYWNrZXQtPnRxKTsKIAluZWlnaF9ub2RlLT50cV9hdmcgPSByaW5nX2J1ZmZlcl9hdmcobmVpZ2hfbm9kZS0+dHFfcmVjdik7CisJc3Bpbl91bmxvY2tfYmgoJm5laWdoX25vZGUtPnRxX2xvY2spOwogCiAJaWYgKCFpc19kdXBsaWNhdGUpIHsKIAkJb3JpZ19ub2RlLT5sYXN0X3R0bCA9IGJhdG1hbl9wYWNrZXQtPnR0bDsKQEAgLTQzNiwyNCArNDM1LDIzIEBACiAKIAlib25kaW5nX2NhbmRpZGF0ZV9hZGQob3JpZ19ub2RlLCBuZWlnaF9ub2RlKTsKIAotCXRtcF9obmFfYnVmZl9sZW4gPSAoaG5hX2J1ZmZfbGVuID4gYmF0bWFuX3BhY2tldC0+bnVtX2huYSAqIEVUSF9BTEVOID8KLQkJCSAgICBiYXRtYW5fcGFja2V0LT5udW1faG5hICogRVRIX0FMRU4gOiBobmFfYnVmZl9sZW4pOworCXRtcF90dF9idWZmX2xlbiA9ICh0dF9idWZmX2xlbiA+IGJhdG1hbl9wYWNrZXQtPm51bV90dCAqIEVUSF9BTEVOID8KKwkJCSAgICBiYXRtYW5fcGFja2V0LT5udW1fdHQgKiBFVEhfQUxFTiA6IHR0X2J1ZmZfbGVuKTsKIAogCS8qIGlmIHRoaXMgbmVpZ2hib3IgYWxyZWFkeSBpcyBvdXIgbmV4dCBob3AgdGhlcmUgaXMgbm90aGluZwogCSAqIHRvIGNoYW5nZSAqLwotCWlmIChvcmlnX25vZGUtPnJvdXRlciA9PSBuZWlnaF9ub2RlKQotCQlnb3RvIHVwZGF0ZV9obmE7CisJcm91dGVyID0gb3JpZ19ub2RlX2dldF9yb3V0ZXIob3JpZ19ub2RlKTsKKwlpZiAocm91dGVyID09IG5laWdoX25vZGUpCisJCWdvdG8gdXBkYXRlX3R0OwogCiAJLyogaWYgdGhpcyBuZWlnaGJvciBkb2VzIG5vdCBvZmZlciBhIGJldHRlciBUUSB3ZSB3b24ndCBjb25zaWRlciBpdCAqLwotCWlmICgob3JpZ19ub2RlLT5yb3V0ZXIpICYmCi0JICAgIChvcmlnX25vZGUtPnJvdXRlci0+dHFfYXZnID4gbmVpZ2hfbm9kZS0+dHFfYXZnKSkKLQkJZ290byB1cGRhdGVfaG5hOworCWlmIChyb3V0ZXIgJiYgKHJvdXRlci0+dHFfYXZnID4gbmVpZ2hfbm9kZS0+dHFfYXZnKSkKKwkJZ290byB1cGRhdGVfdHQ7CiAKIAkvKiBpZiB0aGUgVFEgaXMgdGhlIHNhbWUgYW5kIHRoZSBsaW5rIG5vdCBtb3JlIHN5bWV0cmljIHdlCiAJICogd29uJ3QgY29uc2lkZXIgaXQgZWl0aGVyICovCi0JaWYgKChvcmlnX25vZGUtPnJvdXRlcikgJiYKLQkgICAgIChuZWlnaF9ub2RlLT50cV9hdmcgPT0gb3JpZ19ub2RlLT5yb3V0ZXItPnRxX2F2ZykpIHsKLQkJb3JpZ19ub2RlX3RtcCA9IG9yaWdfbm9kZS0+cm91dGVyLT5vcmlnX25vZGU7CisJaWYgKHJvdXRlciAmJiAobmVpZ2hfbm9kZS0+dHFfYXZnID09IHJvdXRlci0+dHFfYXZnKSkgeworCQlvcmlnX25vZGVfdG1wID0gcm91dGVyLT5vcmlnX25vZGU7CiAJCXNwaW5fbG9ja19iaCgmb3JpZ19ub2RlX3RtcC0+b2dtX2NudF9sb2NrKTsKIAkJYmNhc3Rfb3duX3N1bV9vcmlnID0KIAkJCW9yaWdfbm9kZV90bXAtPmJjYXN0X293bl9zdW1baWZfaW5jb21pbmctPmlmX251bV07CkBAIC00NjYsMTYgKzQ2NCwxNiBAQAogCQlzcGluX3VubG9ja19iaCgmb3JpZ19ub2RlX3RtcC0+b2dtX2NudF9sb2NrKTsKIAogCQlpZiAoYmNhc3Rfb3duX3N1bV9vcmlnID49IGJjYXN0X293bl9zdW1fbmVpZ2gpCi0JCQlnb3RvIHVwZGF0ZV9obmE7CisJCQlnb3RvIHVwZGF0ZV90dDsKIAl9CiAKIAl1cGRhdGVfcm91dGVzKGJhdF9wcml2LCBvcmlnX25vZGUsIG5laWdoX25vZGUsCi0JCSAgICAgIGhuYV9idWZmLCB0bXBfaG5hX2J1ZmZfbGVuKTsKKwkJICAgICAgdHRfYnVmZiwgdG1wX3R0X2J1ZmZfbGVuKTsKIAlnb3RvIHVwZGF0ZV9ndzsKIAotdXBkYXRlX2huYToKLQl1cGRhdGVfcm91dGVzKGJhdF9wcml2LCBvcmlnX25vZGUsIG9yaWdfbm9kZS0+cm91dGVyLAotCQkgICAgICBobmFfYnVmZiwgdG1wX2huYV9idWZmX2xlbik7Cit1cGRhdGVfdHQ6CisJdXBkYXRlX3JvdXRlcyhiYXRfcHJpdiwgb3JpZ19ub2RlLCByb3V0ZXIsCisJCSAgICAgIHR0X2J1ZmYsIHRtcF90dF9idWZmX2xlbik7CiAKIHVwZGF0ZV9ndzoKIAlpZiAob3JpZ19ub2RlLT5nd19mbGFncyAhPSBiYXRtYW5fcGFja2V0LT5nd19mbGFncykKQEAgLTQ5Niw2ICs0OTQsOCBAQAogb3V0OgogCWlmIChuZWlnaF9ub2RlKQogCQluZWlnaF9ub2RlX2ZyZWVfcmVmKG5laWdoX25vZGUpOworCWlmIChyb3V0ZXIpCisJCW5laWdoX25vZGVfZnJlZV9yZWYocm91dGVyKTsKIH0KIAogLyogY2hlY2tzIHdoZXRoZXIgdGhlIGhvc3QgcmVzdGFydGVkIGFuZCBpcyBpbiB0aGUgcHJvdGVjdGlvbiB0aW1lLgpAQCAtNTk3LDEyICs1OTcsMTQgQEAKIAogdm9pZCByZWNlaXZlX2JhdF9wYWNrZXQoc3RydWN0IGV0aGhkciAqZXRoaGRyLAogCQkJc3RydWN0IGJhdG1hbl9wYWNrZXQgKmJhdG1hbl9wYWNrZXQsCi0JCQl1bnNpZ25lZCBjaGFyICpobmFfYnVmZiwgaW50IGhuYV9idWZmX2xlbiwKKwkJCXVuc2lnbmVkIGNoYXIgKnR0X2J1ZmYsIGludCB0dF9idWZmX2xlbiwKIAkJCXN0cnVjdCBoYXJkX2lmYWNlICppZl9pbmNvbWluZykKIHsKIAlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoaWZfaW5jb21pbmctPnNvZnRfaWZhY2UpOwogCXN0cnVjdCBoYXJkX2lmYWNlICpoYXJkX2lmYWNlOwogCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbmVpZ2hfbm9kZSwgKm9yaWdfbm9kZTsKKwlzdHJ1Y3QgbmVpZ2hfbm9kZSAqcm91dGVyID0gTlVMTCwgKnJvdXRlcl9yb3V0ZXIgPSBOVUxMOworCXN0cnVjdCBuZWlnaF9ub2RlICpvcmlnX25laWdoX3JvdXRlciA9IE5VTEw7CiAJY2hhciBoYXNfZGlyZWN0bGlua19mbGFnOwogCWNoYXIgaXNfbXlfYWRkciA9IDAsIGlzX215X29yaWcgPSAwLCBpc19teV9vbGRvcmlnID0gMDsKIAljaGFyIGlzX2Jyb2FkY2FzdCA9IDAsIGlzX2JpZGlyZWN0aW9uYWwsIGlzX3NpbmdsZV9ob3BfbmVpZ2g7CkBAIC03NDcsMTQgKzc0OSwxNSBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlyb3V0ZXIgPSBvcmlnX25vZGVfZ2V0X3JvdXRlcihvcmlnX25vZGUpOworCWlmIChyb3V0ZXIpCisJCXJvdXRlcl9yb3V0ZXIgPSBvcmlnX25vZGVfZ2V0X3JvdXRlcihyb3V0ZXItPm9yaWdfbm9kZSk7CisKIAkvKiBhdm9pZCB0ZW1wb3Jhcnkgcm91dGluZyBsb29wcyAqLwotCWlmICgob3JpZ19ub2RlLT5yb3V0ZXIpICYmCi0JICAgIChvcmlnX25vZGUtPnJvdXRlci0+b3JpZ19ub2RlLT5yb3V0ZXIpICYmCi0JICAgIChjb21wYXJlX2V0aChvcmlnX25vZGUtPnJvdXRlci0+YWRkciwKLQkJCSBiYXRtYW5fcGFja2V0LT5wcmV2X3NlbmRlcikpICYmCisJaWYgKHJvdXRlciAmJiByb3V0ZXJfcm91dGVyICYmCisJICAgIChjb21wYXJlX2V0aChyb3V0ZXItPmFkZHIsIGJhdG1hbl9wYWNrZXQtPnByZXZfc2VuZGVyKSkgJiYKIAkgICAgIShjb21wYXJlX2V0aChiYXRtYW5fcGFja2V0LT5vcmlnLCBiYXRtYW5fcGFja2V0LT5wcmV2X3NlbmRlcikpICYmCi0JICAgIChjb21wYXJlX2V0aChvcmlnX25vZGUtPnJvdXRlci0+YWRkciwKLQkJCSBvcmlnX25vZGUtPnJvdXRlci0+b3JpZ19ub2RlLT5yb3V0ZXItPmFkZHIpKSkgeworCSAgICAoY29tcGFyZV9ldGgocm91dGVyLT5hZGRyLCByb3V0ZXJfcm91dGVyLT5hZGRyKSkpIHsKIAkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKIAkJCSJEcm9wIHBhY2tldDogaWdub3JpbmcgYWxsIHJlYnJvYWRjYXN0IHBhY2tldHMgdGhhdCAiCiAJCQkibWF5IG1ha2UgbWUgbG9vcCAoc2VuZGVyOiAlcE0pXG4iLCBldGhoZHItPmhfc291cmNlKTsKQEAgLTc2OSw5ICs3NzIsMTEgQEAKIAlpZiAoIW9yaWdfbmVpZ2hfbm9kZSkKIAkJZ290byBvdXQ7CiAKKwlvcmlnX25laWdoX3JvdXRlciA9IG9yaWdfbm9kZV9nZXRfcm91dGVyKG9yaWdfbmVpZ2hfbm9kZSk7CisKIAkvKiBkcm9wIHBhY2tldCBpZiBzZW5kZXIgaXMgbm90IGEgZGlyZWN0IG5laWdoYm9yIGFuZCBpZiB3ZQogCSAqIGRvbid0IHJvdXRlIHRvd2FyZHMgaXQgKi8KLQlpZiAoIWlzX3NpbmdsZV9ob3BfbmVpZ2ggJiYgKCFvcmlnX25laWdoX25vZGUtPnJvdXRlcikpIHsKKwlpZiAoIWlzX3NpbmdsZV9ob3BfbmVpZ2ggJiYgKCFvcmlnX25laWdoX3JvdXRlcikpIHsKIAkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKIAkJCSJEcm9wIHBhY2tldDogT0dNIHZpYSB1bmtub3duIG5laWdoYm9yIVxuIik7CiAJCWdvdG8gb3V0X25laWdoOwpAQCAtNzg5LDE0ICs3OTQsMTQgQEAKIAkgICAgICgob3JpZ19ub2RlLT5sYXN0X3JlYWxfc2Vxbm8gPT0gYmF0bWFuX3BhY2tldC0+c2Vxbm8pICYmCiAJICAgICAgKG9yaWdfbm9kZS0+bGFzdF90dGwgLSAzIDw9IGJhdG1hbl9wYWNrZXQtPnR0bCkpKSkKIAkJdXBkYXRlX29yaWcoYmF0X3ByaXYsIG9yaWdfbm9kZSwgZXRoaGRyLCBiYXRtYW5fcGFja2V0LAotCQkJICAgIGlmX2luY29taW5nLCBobmFfYnVmZiwgaG5hX2J1ZmZfbGVuLCBpc19kdXBsaWNhdGUpOworCQkJICAgIGlmX2luY29taW5nLCB0dF9idWZmLCB0dF9idWZmX2xlbiwgaXNfZHVwbGljYXRlKTsKIAogCS8qIGlzIHNpbmdsZSBob3AgKGRpcmVjdCkgbmVpZ2hib3IgKi8KIAlpZiAoaXNfc2luZ2xlX2hvcF9uZWlnaCkgewogCiAJCS8qIG1hcmsgZGlyZWN0IGxpbmsgb24gaW5jb21pbmcgaW50ZXJmYWNlICovCiAJCXNjaGVkdWxlX2ZvcndhcmRfcGFja2V0KG9yaWdfbm9kZSwgZXRoaGRyLCBiYXRtYW5fcGFja2V0LAotCQkJCQkxLCBobmFfYnVmZl9sZW4sIGlmX2luY29taW5nKTsKKwkJCQkJMSwgdHRfYnVmZl9sZW4sIGlmX2luY29taW5nKTsKIAogCQliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LCAiRm9yd2FyZGluZyBwYWNrZXQ6ICIKIAkJCSJyZWJyb2FkY2FzdCBuZWlnaGJvciBwYWNrZXQgd2l0aCBkaXJlY3QgbGluayBmbGFnXG4iKTsKQEAgLTgxOSwxMiArODI0LDE5IEBACiAJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKIAkJIkZvcndhcmRpbmcgcGFja2V0OiByZWJyb2FkY2FzdCBvcmlnaW5hdG9yIHBhY2tldFxuIik7CiAJc2NoZWR1bGVfZm9yd2FyZF9wYWNrZXQob3JpZ19ub2RlLCBldGhoZHIsIGJhdG1hbl9wYWNrZXQsCi0JCQkJMCwgaG5hX2J1ZmZfbGVuLCBpZl9pbmNvbWluZyk7CisJCQkJMCwgdHRfYnVmZl9sZW4sIGlmX2luY29taW5nKTsKIAogb3V0X25laWdoOgogCWlmICgob3JpZ19uZWlnaF9ub2RlKSAmJiAoIWlzX3NpbmdsZV9ob3BfbmVpZ2gpKQogCQlvcmlnX25vZGVfZnJlZV9yZWYob3JpZ19uZWlnaF9ub2RlKTsKIG91dDoKKwlpZiAocm91dGVyKQorCQluZWlnaF9ub2RlX2ZyZWVfcmVmKHJvdXRlcik7CisJaWYgKHJvdXRlcl9yb3V0ZXIpCisJCW5laWdoX25vZGVfZnJlZV9yZWYocm91dGVyX3JvdXRlcik7CisJaWYgKG9yaWdfbmVpZ2hfcm91dGVyKQorCQluZWlnaF9ub2RlX2ZyZWVfcmVmKG9yaWdfbmVpZ2hfcm91dGVyKTsKKwogCW9yaWdfbm9kZV9mcmVlX3JlZihvcmlnX25vZGUpOwogfQogCkBAIC04NjgsOCArODgwLDkgQEAKIHN0YXRpYyBpbnQgcmVjdl9teV9pY21wX3BhY2tldChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAogCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHNpemVfdCBpY21wX2xlbikKIHsKKwlzdHJ1Y3QgaGFyZF9pZmFjZSAqcHJpbWFyeV9pZiA9IE5VTEw7CiAJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlID0gTlVMTDsKLQlzdHJ1Y3QgbmVpZ2hfbm9kZSAqbmVpZ2hfbm9kZSA9IE5VTEw7CisJc3RydWN0IG5laWdoX25vZGUgKnJvdXRlciA9IE5VTEw7CiAJc3RydWN0IGljbXBfcGFja2V0X3JyICppY21wX3BhY2tldDsKIAlpbnQgcmV0ID0gTkVUX1JYX0RST1A7CiAKQEAgLTg4MSwyOCArODk0LDE5IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmICghYmF0X3ByaXYtPnByaW1hcnlfaWYpCisJcHJpbWFyeV9pZiA9IHByaW1hcnlfaWZfZ2V0X3NlbGVjdGVkKGJhdF9wcml2KTsKKwlpZiAoIXByaW1hcnlfaWYpCiAJCWdvdG8gb3V0OwogCiAJLyogYW5zd2VyIGVjaG8gcmVxdWVzdCAocGluZykgKi8KIAkvKiBnZXQgcm91dGluZyBpbmZvcm1hdGlvbiAqLwotCXJjdV9yZWFkX2xvY2soKTsKIAlvcmlnX25vZGUgPSBvcmlnX2hhc2hfZmluZChiYXRfcHJpdiwgaWNtcF9wYWNrZXQtPm9yaWcpOwotCiAJaWYgKCFvcmlnX25vZGUpCi0JCWdvdG8gdW5sb2NrOworCQlnb3RvIG91dDsKIAotCW5laWdoX25vZGUgPSBvcmlnX25vZGUtPnJvdXRlcjsKLQotCWlmICghbmVpZ2hfbm9kZSkKLQkJZ290byB1bmxvY2s7Ci0KLQlpZiAoIWF0b21pY19pbmNfbm90X3plcm8oJm5laWdoX25vZGUtPnJlZmNvdW50KSkgewotCQluZWlnaF9ub2RlID0gTlVMTDsKLQkJZ290byB1bmxvY2s7Ci0JfQotCi0JcmN1X3JlYWRfdW5sb2NrKCk7CisJcm91dGVyID0gb3JpZ19ub2RlX2dldF9yb3V0ZXIob3JpZ19ub2RlKTsKKwlpZiAoIXJvdXRlcikKKwkJZ290byBvdXQ7CiAKIAkvKiBjcmVhdGUgYSBjb3B5IG9mIHRoZSBza2IsIGlmIG5lZWRlZCwgdG8gbW9kaWZ5IGl0LiAqLwogCWlmIChza2JfY293KHNrYiwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKSA8IDApCkBAIC05MTEsMjAgKzkxNSwxOCBAQAogCWljbXBfcGFja2V0ID0gKHN0cnVjdCBpY21wX3BhY2tldF9yciAqKXNrYi0+ZGF0YTsKIAogCW1lbWNweShpY21wX3BhY2tldC0+ZHN0LCBpY21wX3BhY2tldC0+b3JpZywgRVRIX0FMRU4pOwotCW1lbWNweShpY21wX3BhY2tldC0+b3JpZywKLQkJYmF0X3ByaXYtPnByaW1hcnlfaWYtPm5ldF9kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KGljbXBfcGFja2V0LT5vcmlnLCBwcmltYXJ5X2lmLT5uZXRfZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwogCWljbXBfcGFja2V0LT5tc2dfdHlwZSA9IEVDSE9fUkVQTFk7CiAJaWNtcF9wYWNrZXQtPnR0bCA9IFRUTDsKIAotCXNlbmRfc2tiX3BhY2tldChza2IsIG5laWdoX25vZGUtPmlmX2luY29taW5nLCBuZWlnaF9ub2RlLT5hZGRyKTsKKwlzZW5kX3NrYl9wYWNrZXQoc2tiLCByb3V0ZXItPmlmX2luY29taW5nLCByb3V0ZXItPmFkZHIpOwogCXJldCA9IE5FVF9SWF9TVUNDRVNTOwotCWdvdG8gb3V0OwogCi11bmxvY2s6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiBvdXQ6Ci0JaWYgKG5laWdoX25vZGUpCi0JCW5laWdoX25vZGVfZnJlZV9yZWYobmVpZ2hfbm9kZSk7CisJaWYgKHByaW1hcnlfaWYpCisJCWhhcmRpZl9mcmVlX3JlZihwcmltYXJ5X2lmKTsKKwlpZiAocm91dGVyKQorCQluZWlnaF9ub2RlX2ZyZWVfcmVmKHJvdXRlcik7CiAJaWYgKG9yaWdfbm9kZSkKIAkJb3JpZ19ub2RlX2ZyZWVfcmVmKG9yaWdfbm9kZSk7CiAJcmV0dXJuIHJldDsKQEAgLTkzMyw4ICs5MzUsOSBAQAogc3RhdGljIGludCByZWN2X2ljbXBfdHRsX2V4Y2VlZGVkKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCiAJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCXN0cnVjdCBoYXJkX2lmYWNlICpwcmltYXJ5X2lmID0gTlVMTDsKIAlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUgPSBOVUxMOwotCXN0cnVjdCBuZWlnaF9ub2RlICpuZWlnaF9ub2RlID0gTlVMTDsKKwlzdHJ1Y3QgbmVpZ2hfbm9kZSAqcm91dGVyID0gTlVMTDsKIAlzdHJ1Y3QgaWNtcF9wYWNrZXQgKmljbXBfcGFja2V0OwogCWludCByZXQgPSBORVRfUlhfRFJPUDsKIApAQCAtOTQ4LDI3ICs5NTEsMTggQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKCFiYXRfcHJpdi0+cHJpbWFyeV9pZikKKwlwcmltYXJ5X2lmID0gcHJpbWFyeV9pZl9nZXRfc2VsZWN0ZWQoYmF0X3ByaXYpOworCWlmICghcHJpbWFyeV9pZikKIAkJZ290byBvdXQ7CiAKIAkvKiBnZXQgcm91dGluZyBpbmZvcm1hdGlvbiAqLwotCXJjdV9yZWFkX2xvY2soKTsKIAlvcmlnX25vZGUgPSBvcmlnX2hhc2hfZmluZChiYXRfcHJpdiwgaWNtcF9wYWNrZXQtPm9yaWcpOwotCiAJaWYgKCFvcmlnX25vZGUpCi0JCWdvdG8gdW5sb2NrOworCQlnb3RvIG91dDsKIAotCW5laWdoX25vZGUgPSBvcmlnX25vZGUtPnJvdXRlcjsKLQotCWlmICghbmVpZ2hfbm9kZSkKLQkJZ290byB1bmxvY2s7Ci0KLQlpZiAoIWF0b21pY19pbmNfbm90X3plcm8oJm5laWdoX25vZGUtPnJlZmNvdW50KSkgewotCQluZWlnaF9ub2RlID0gTlVMTDsKLQkJZ290byB1bmxvY2s7Ci0JfQotCi0JcmN1X3JlYWRfdW5sb2NrKCk7CisJcm91dGVyID0gb3JpZ19ub2RlX2dldF9yb3V0ZXIob3JpZ19ub2RlKTsKKwlpZiAoIXJvdXRlcikKKwkJZ290byBvdXQ7CiAKIAkvKiBjcmVhdGUgYSBjb3B5IG9mIHRoZSBza2IsIGlmIG5lZWRlZCwgdG8gbW9kaWZ5IGl0LiAqLwogCWlmIChza2JfY293KHNrYiwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKSA8IDApCkBAIC05NzcsMjAgKzk3MSwxOCBAQAogCWljbXBfcGFja2V0ID0gKHN0cnVjdCBpY21wX3BhY2tldCAqKXNrYi0+ZGF0YTsKIAogCW1lbWNweShpY21wX3BhY2tldC0+ZHN0LCBpY21wX3BhY2tldC0+b3JpZywgRVRIX0FMRU4pOwotCW1lbWNweShpY21wX3BhY2tldC0+b3JpZywKLQkJYmF0X3ByaXYtPnByaW1hcnlfaWYtPm5ldF9kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KGljbXBfcGFja2V0LT5vcmlnLCBwcmltYXJ5X2lmLT5uZXRfZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwogCWljbXBfcGFja2V0LT5tc2dfdHlwZSA9IFRUTF9FWENFRURFRDsKIAlpY21wX3BhY2tldC0+dHRsID0gVFRMOwogCi0Jc2VuZF9za2JfcGFja2V0KHNrYiwgbmVpZ2hfbm9kZS0+aWZfaW5jb21pbmcsIG5laWdoX25vZGUtPmFkZHIpOworCXNlbmRfc2tiX3BhY2tldChza2IsIHJvdXRlci0+aWZfaW5jb21pbmcsIHJvdXRlci0+YWRkcik7CiAJcmV0ID0gTkVUX1JYX1NVQ0NFU1M7Ci0JZ290byBvdXQ7CiAKLXVubG9jazoKLQlyY3VfcmVhZF91bmxvY2soKTsKIG91dDoKLQlpZiAobmVpZ2hfbm9kZSkKLQkJbmVpZ2hfbm9kZV9mcmVlX3JlZihuZWlnaF9ub2RlKTsKKwlpZiAocHJpbWFyeV9pZikKKwkJaGFyZGlmX2ZyZWVfcmVmKHByaW1hcnlfaWYpOworCWlmIChyb3V0ZXIpCisJCW5laWdoX25vZGVfZnJlZV9yZWYocm91dGVyKTsKIAlpZiAob3JpZ19ub2RlKQogCQlvcmlnX25vZGVfZnJlZV9yZWYob3JpZ19ub2RlKTsKIAlyZXR1cm4gcmV0OwpAQCAtMTAwMyw3ICs5OTUsNyBAQAogCXN0cnVjdCBpY21wX3BhY2tldF9yciAqaWNtcF9wYWNrZXQ7CiAJc3RydWN0IGV0aGhkciAqZXRoaGRyOwogCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSA9IE5VTEw7Ci0Jc3RydWN0IG5laWdoX25vZGUgKm5laWdoX25vZGUgPSBOVUxMOworCXN0cnVjdCBuZWlnaF9ub2RlICpyb3V0ZXIgPSBOVUxMOwogCWludCBoZHJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWNtcF9wYWNrZXQpOwogCWludCByZXQgPSBORVRfUlhfRFJPUDsKIApAQCAtMTA1MCwyMyArMTA0MiwxMyBAQAogCQlyZXR1cm4gcmVjdl9pY21wX3R0bF9leGNlZWRlZChiYXRfcHJpdiwgc2tiKTsKIAogCS8qIGdldCByb3V0aW5nIGluZm9ybWF0aW9uICovCi0JcmN1X3JlYWRfbG9jaygpOwogCW9yaWdfbm9kZSA9IG9yaWdfaGFzaF9maW5kKGJhdF9wcml2LCBpY21wX3BhY2tldC0+ZHN0KTsKLQogCWlmICghb3JpZ19ub2RlKQotCQlnb3RvIHVubG9jazsKKwkJZ290byBvdXQ7CiAKLQluZWlnaF9ub2RlID0gb3JpZ19ub2RlLT5yb3V0ZXI7Ci0KLQlpZiAoIW5laWdoX25vZGUpCi0JCWdvdG8gdW5sb2NrOwotCi0JaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZuZWlnaF9ub2RlLT5yZWZjb3VudCkpIHsKLQkJbmVpZ2hfbm9kZSA9IE5VTEw7Ci0JCWdvdG8gdW5sb2NrOwotCX0KLQotCXJjdV9yZWFkX3VubG9jaygpOworCXJvdXRlciA9IG9yaWdfbm9kZV9nZXRfcm91dGVyKG9yaWdfbm9kZSk7CisJaWYgKCFyb3V0ZXIpCisJCWdvdG8gb3V0OwogCiAJLyogY3JlYXRlIGEgY29weSBvZiB0aGUgc2tiLCBpZiBuZWVkZWQsIHRvIG1vZGlmeSBpdC4gKi8KIAlpZiAoc2tiX2Nvdyhza2IsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSkgPCAwKQpAQCAtMTA3OCwyMCArMTA2MCwxMTcgQEAKIAlpY21wX3BhY2tldC0+dHRsLS07CiAKIAkvKiByb3V0ZSBpdCAqLwotCXNlbmRfc2tiX3BhY2tldChza2IsIG5laWdoX25vZGUtPmlmX2luY29taW5nLCBuZWlnaF9ub2RlLT5hZGRyKTsKKwlzZW5kX3NrYl9wYWNrZXQoc2tiLCByb3V0ZXItPmlmX2luY29taW5nLCByb3V0ZXItPmFkZHIpOwogCXJldCA9IE5FVF9SWF9TVUNDRVNTOwotCWdvdG8gb3V0OwogCi11bmxvY2s6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiBvdXQ6Ci0JaWYgKG5laWdoX25vZGUpCi0JCW5laWdoX25vZGVfZnJlZV9yZWYobmVpZ2hfbm9kZSk7CisJaWYgKHJvdXRlcikKKwkJbmVpZ2hfbm9kZV9mcmVlX3JlZihyb3V0ZXIpOwogCWlmIChvcmlnX25vZGUpCiAJCW9yaWdfbm9kZV9mcmVlX3JlZihvcmlnX25vZGUpOwogCXJldHVybiByZXQ7CiB9CiAKKy8qIEluIHRoZSBib25kaW5nIGNhc2UsIHNlbmQgdGhlIHBhY2tldHMgaW4gYSByb3VuZAorICogcm9iaW4gZmFzaGlvbiBvdmVyIHRoZSByZW1haW5pbmcgaW50ZXJmYWNlcy4KKyAqCisgKiBUaGlzIG1ldGhvZCByb3RhdGVzIHRoZSBib25kaW5nIGxpc3QgYW5kIGluY3JlYXNlcyB0aGUKKyAqIHJldHVybmVkIHJvdXRlcidzIHJlZmNvdW50LiAqLworc3RhdGljIHN0cnVjdCBuZWlnaF9ub2RlICpmaW5kX2JvbmRfcm91dGVyKHN0cnVjdCBvcmlnX25vZGUgKnByaW1hcnlfb3JpZywKKwkJCQkJICAgc3RydWN0IGhhcmRfaWZhY2UgKnJlY3ZfaWYpCit7CisJc3RydWN0IG5laWdoX25vZGUgKnRtcF9uZWlnaF9ub2RlOworCXN0cnVjdCBuZWlnaF9ub2RlICpyb3V0ZXIgPSBOVUxMLCAqZmlyc3RfY2FuZGlkYXRlID0gTlVMTDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0bXBfbmVpZ2hfbm9kZSwgJnByaW1hcnlfb3JpZy0+Ym9uZF9saXN0LAorCQkJCWJvbmRpbmdfbGlzdCkgeworCQlpZiAoIWZpcnN0X2NhbmRpZGF0ZSkKKwkJCWZpcnN0X2NhbmRpZGF0ZSA9IHRtcF9uZWlnaF9ub2RlOworCisJCS8qIHJlY3ZfaWYgPT0gTlVMTCBvbiB0aGUgZmlyc3Qgbm9kZS4gKi8KKwkJaWYgKHRtcF9uZWlnaF9ub2RlLT5pZl9pbmNvbWluZyA9PSByZWN2X2lmKQorCQkJY29udGludWU7CisKKwkJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZ0bXBfbmVpZ2hfbm9kZS0+cmVmY291bnQpKQorCQkJY29udGludWU7CisKKwkJcm91dGVyID0gdG1wX25laWdoX25vZGU7CisJCWJyZWFrOworCX0KKworCS8qIHVzZSB0aGUgZmlyc3QgY2FuZGlkYXRlIGlmIG5vdGhpbmcgd2FzIGZvdW5kLiAqLworCWlmICghcm91dGVyICYmIGZpcnN0X2NhbmRpZGF0ZSAmJgorCSAgICBhdG9taWNfaW5jX25vdF96ZXJvKCZmaXJzdF9jYW5kaWRhdGUtPnJlZmNvdW50KSkKKwkJcm91dGVyID0gZmlyc3RfY2FuZGlkYXRlOworCisJaWYgKCFyb3V0ZXIpCisJCWdvdG8gb3V0OworCisJLyogc2VsZWN0ZWQgc2hvdWxkIHBvaW50IHRvIHRoZSBuZXh0IGVsZW1lbnQKKwkgKiBhZnRlciB0aGUgY3VycmVudCByb3V0ZXIgKi8KKwlzcGluX2xvY2tfYmgoJnByaW1hcnlfb3JpZy0+bmVpZ2hfbGlzdF9sb2NrKTsKKwkvKiB0aGlzIGlzIGEgbGlzdF9tb3ZlKCksIHdoaWNoIHVuZm9ydHVuYXRlbHkKKwkgKiBkb2VzIG5vdCBleGlzdCBhcyByY3UgdmVyc2lvbiAqLworCWxpc3RfZGVsX3JjdSgmcHJpbWFyeV9vcmlnLT5ib25kX2xpc3QpOworCWxpc3RfYWRkX3JjdSgmcHJpbWFyeV9vcmlnLT5ib25kX2xpc3QsCisJCSAgICAgJnJvdXRlci0+Ym9uZGluZ19saXN0KTsKKwlzcGluX3VubG9ja19iaCgmcHJpbWFyeV9vcmlnLT5uZWlnaF9saXN0X2xvY2spOworCitvdXQ6CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIHJvdXRlcjsKK30KKworLyogSW50ZXJmYWNlIEFsdGVybmF0aW5nOiBVc2UgdGhlIGJlc3Qgb2YgdGhlCisgKiByZW1haW5pbmcgY2FuZGlkYXRlcyB3aGljaCBhcmUgbm90IHVzaW5nCisgKiB0aGlzIGludGVyZmFjZS4KKyAqCisgKiBJbmNyZWFzZXMgdGhlIHJldHVybmVkIHJvdXRlcidzIHJlZmNvdW50ICovCitzdGF0aWMgc3RydWN0IG5laWdoX25vZGUgKmZpbmRfaWZhbHRlcl9yb3V0ZXIoc3RydWN0IG9yaWdfbm9kZSAqcHJpbWFyeV9vcmlnLAorCQkJCQkgICAgICBzdHJ1Y3QgaGFyZF9pZmFjZSAqcmVjdl9pZikKK3sKKwlzdHJ1Y3QgbmVpZ2hfbm9kZSAqdG1wX25laWdoX25vZGU7CisJc3RydWN0IG5laWdoX25vZGUgKnJvdXRlciA9IE5VTEwsICpmaXJzdF9jYW5kaWRhdGUgPSBOVUxMOworCisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHRtcF9uZWlnaF9ub2RlLCAmcHJpbWFyeV9vcmlnLT5ib25kX2xpc3QsCisJCQkJYm9uZGluZ19saXN0KSB7CisJCWlmICghZmlyc3RfY2FuZGlkYXRlKQorCQkJZmlyc3RfY2FuZGlkYXRlID0gdG1wX25laWdoX25vZGU7CisKKwkJLyogcmVjdl9pZiA9PSBOVUxMIG9uIHRoZSBmaXJzdCBub2RlLiAqLworCQlpZiAodG1wX25laWdoX25vZGUtPmlmX2luY29taW5nID09IHJlY3ZfaWYpCisJCQljb250aW51ZTsKKworCQlpZiAoIWF0b21pY19pbmNfbm90X3plcm8oJnRtcF9uZWlnaF9ub2RlLT5yZWZjb3VudCkpCisJCQljb250aW51ZTsKKworCQkvKiBpZiB3ZSBkb24ndCBoYXZlIGEgcm91dGVyIHlldAorCQkgKiBvciB0aGlzIG9uZSBpcyBiZXR0ZXIsIGNob29zZSBpdC4gKi8KKwkJaWYgKCghcm91dGVyKSB8fAorCQkgICAgKHRtcF9uZWlnaF9ub2RlLT50cV9hdmcgPiByb3V0ZXItPnRxX2F2ZykpIHsKKwkJCS8qIGRlY3JlbWVudCByZWZjb3VudCBvZgorCQkJICogcHJldmlvdXNseSBzZWxlY3RlZCByb3V0ZXIgKi8KKwkJCWlmIChyb3V0ZXIpCisJCQkJbmVpZ2hfbm9kZV9mcmVlX3JlZihyb3V0ZXIpOworCisJCQlyb3V0ZXIgPSB0bXBfbmVpZ2hfbm9kZTsKKwkJCWF0b21pY19pbmNfbm90X3plcm8oJnJvdXRlci0+cmVmY291bnQpOworCQl9CisKKwkJbmVpZ2hfbm9kZV9mcmVlX3JlZih0bXBfbmVpZ2hfbm9kZSk7CisJfQorCisJLyogdXNlIHRoZSBmaXJzdCBjYW5kaWRhdGUgaWYgbm90aGluZyB3YXMgZm91bmQuICovCisJaWYgKCFyb3V0ZXIgJiYgZmlyc3RfY2FuZGlkYXRlICYmCisJICAgIGF0b21pY19pbmNfbm90X3plcm8oJmZpcnN0X2NhbmRpZGF0ZS0+cmVmY291bnQpKQorCQlyb3V0ZXIgPSBmaXJzdF9jYW5kaWRhdGU7CisKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gcm91dGVyOworfQorCiAvKiBmaW5kIGEgc3VpdGFibGUgcm91dGVyIGZvciB0aGlzIG9yaWdpbmF0b3IsIGFuZCB1c2UKICAqIGJvbmRpbmcgaWYgcG9zc2libGUuIGluY3JlYXNlcyB0aGUgZm91bmQgbmVpZ2hib3JzCiAgKiByZWZjb3VudC4qLwpAQCAtMTEwMSwxNSArMTE4MCwxNiBAQAogewogCXN0cnVjdCBvcmlnX25vZGUgKnByaW1hcnlfb3JpZ19ub2RlOwogCXN0cnVjdCBvcmlnX25vZGUgKnJvdXRlcl9vcmlnOwotCXN0cnVjdCBuZWlnaF9ub2RlICpyb3V0ZXIsICpmaXJzdF9jYW5kaWRhdGUsICp0bXBfbmVpZ2hfbm9kZTsKKwlzdHJ1Y3QgbmVpZ2hfbm9kZSAqcm91dGVyOwogCXN0YXRpYyB1aW50OF90IHplcm9fbWFjW0VUSF9BTEVOXSA9IHswLCAwLCAwLCAwLCAwLCAwfTsKIAlpbnQgYm9uZGluZ19lbmFibGVkOwogCiAJaWYgKCFvcmlnX25vZGUpCiAJCXJldHVybiBOVUxMOwogCi0JaWYgKCFvcmlnX25vZGUtPnJvdXRlcikKLQkJcmV0dXJuIE5VTEw7CisJcm91dGVyID0gb3JpZ19ub2RlX2dldF9yb3V0ZXIob3JpZ19ub2RlKTsKKwlpZiAoIXJvdXRlcikKKwkJZ290byBlcnI7CiAKIAkvKiB3aXRob3V0IGJvbmRpbmcsIHRoZSBmaXJzdCBub2RlIHNob3VsZAogCSAqIGFsd2F5cyBjaG9vc2UgdGhlIGRlZmF1bHQgcm91dGVyLiAqLwpAQCAtMTExNywxMiArMTE5Nyw5IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJLyogc2VsZWN0IGRlZmF1bHQgcm91dGVyIHRvIG91dHB1dCAqLwotCXJvdXRlciA9IG9yaWdfbm9kZS0+cm91dGVyOwotCXJvdXRlcl9vcmlnID0gb3JpZ19ub2RlLT5yb3V0ZXItPm9yaWdfbm9kZTsKLQlpZiAoIXJvdXRlcl9vcmlnIHx8ICFhdG9taWNfaW5jX25vdF96ZXJvKCZyb3V0ZXItPnJlZmNvdW50KSkgewotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCXJvdXRlcl9vcmlnID0gcm91dGVyLT5vcmlnX25vZGU7CisJaWYgKCFyb3V0ZXJfb3JpZykKKwkJZ290byBlcnJfdW5sb2NrOwogCiAJaWYgKCghcmVjdl9pZikgJiYgKCFib25kaW5nX2VuYWJsZWQpKQogCQlnb3RvIHJldHVybl9yb3V0ZXI7CkBAIC0xMTUxLDkxICsxMjI4LDI2IEBACiAJaWYgKGF0b21pY19yZWFkKCZwcmltYXJ5X29yaWdfbm9kZS0+Ym9uZF9jYW5kaWRhdGVzKSA8IDIpCiAJCWdvdG8gcmV0dXJuX3JvdXRlcjsKIAotCiAJLyogYWxsIG5vZGVzIGJldHdlZW4gc2hvdWxkIGNob29zZSBhIGNhbmRpZGF0ZSB3aGljaAogCSAqIGlzIGlzIG5vdCBvbiB0aGUgaW50ZXJmYWNlIHdoZXJlIHRoZSBwYWNrZXQgY2FtZQogCSAqIGluLiAqLwogCiAJbmVpZ2hfbm9kZV9mcmVlX3JlZihyb3V0ZXIpOwotCWZpcnN0X2NhbmRpZGF0ZSA9IE5VTEw7Ci0Jcm91dGVyID0gTlVMTDsKIAotCWlmIChib25kaW5nX2VuYWJsZWQpIHsKLQkJLyogaW4gdGhlIGJvbmRpbmcgY2FzZSwgc2VuZCB0aGUgcGFja2V0cyBpbiBhIHJvdW5kCi0JCSAqIHJvYmluIGZhc2hpb24gb3ZlciB0aGUgcmVtYWluaW5nIGludGVyZmFjZXMuICovCisJaWYgKGJvbmRpbmdfZW5hYmxlZCkKKwkJcm91dGVyID0gZmluZF9ib25kX3JvdXRlcihwcmltYXJ5X29yaWdfbm9kZSwgcmVjdl9pZik7CisJZWxzZQorCQlyb3V0ZXIgPSBmaW5kX2lmYWx0ZXJfcm91dGVyKHByaW1hcnlfb3JpZ19ub2RlLCByZWN2X2lmKTsKIAotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0bXBfbmVpZ2hfbm9kZSwKLQkJCQkmcHJpbWFyeV9vcmlnX25vZGUtPmJvbmRfbGlzdCwgYm9uZGluZ19saXN0KSB7Ci0JCQlpZiAoIWZpcnN0X2NhbmRpZGF0ZSkKLQkJCQlmaXJzdF9jYW5kaWRhdGUgPSB0bXBfbmVpZ2hfbm9kZTsKLQkJCS8qIHJlY3ZfaWYgPT0gTlVMTCBvbiB0aGUgZmlyc3Qgbm9kZS4gKi8KLQkJCWlmICh0bXBfbmVpZ2hfbm9kZS0+aWZfaW5jb21pbmcgIT0gcmVjdl9pZiAmJgotCQkJICAgIGF0b21pY19pbmNfbm90X3plcm8oJnRtcF9uZWlnaF9ub2RlLT5yZWZjb3VudCkpIHsKLQkJCQlyb3V0ZXIgPSB0bXBfbmVpZ2hfbm9kZTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCS8qIHVzZSB0aGUgZmlyc3QgY2FuZGlkYXRlIGlmIG5vdGhpbmcgd2FzIGZvdW5kLiAqLwotCQlpZiAoIXJvdXRlciAmJiBmaXJzdF9jYW5kaWRhdGUgJiYKLQkJICAgIGF0b21pY19pbmNfbm90X3plcm8oJmZpcnN0X2NhbmRpZGF0ZS0+cmVmY291bnQpKQotCQkJcm91dGVyID0gZmlyc3RfY2FuZGlkYXRlOwotCi0JCWlmICghcm91dGVyKSB7Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0KLQkJLyogc2VsZWN0ZWQgc2hvdWxkIHBvaW50IHRvIHRoZSBuZXh0IGVsZW1lbnQKLQkJICogYWZ0ZXIgdGhlIGN1cnJlbnQgcm91dGVyICovCi0JCXNwaW5fbG9ja19iaCgmcHJpbWFyeV9vcmlnX25vZGUtPm5laWdoX2xpc3RfbG9jayk7Ci0JCS8qIHRoaXMgaXMgYSBsaXN0X21vdmUoKSwgd2hpY2ggdW5mb3J0dW5hdGVseQotCQkgKiBkb2VzIG5vdCBleGlzdCBhcyByY3UgdmVyc2lvbiAqLwotCQlsaXN0X2RlbF9yY3UoJnByaW1hcnlfb3JpZ19ub2RlLT5ib25kX2xpc3QpOwotCQlsaXN0X2FkZF9yY3UoJnByaW1hcnlfb3JpZ19ub2RlLT5ib25kX2xpc3QsCi0JCQkJJnJvdXRlci0+Ym9uZGluZ19saXN0KTsKLQkJc3Bpbl91bmxvY2tfYmgoJnByaW1hcnlfb3JpZ19ub2RlLT5uZWlnaF9saXN0X2xvY2spOwotCi0JfSBlbHNlIHsKLQkJLyogaWYgYm9uZGluZyBpcyBkaXNhYmxlZCwgdXNlIHRoZSBiZXN0IG9mIHRoZQotCQkgKiByZW1haW5pbmcgY2FuZGlkYXRlcyB3aGljaCBhcmUgbm90IHVzaW5nCi0JCSAqIHRoaXMgaW50ZXJmYWNlLiAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0bXBfbmVpZ2hfbm9kZSwKLQkJCSZwcmltYXJ5X29yaWdfbm9kZS0+Ym9uZF9saXN0LCBib25kaW5nX2xpc3QpIHsKLQkJCWlmICghZmlyc3RfY2FuZGlkYXRlKQotCQkJCWZpcnN0X2NhbmRpZGF0ZSA9IHRtcF9uZWlnaF9ub2RlOwotCi0JCQkvKiByZWN2X2lmID09IE5VTEwgb24gdGhlIGZpcnN0IG5vZGUuICovCi0JCQlpZiAodG1wX25laWdoX25vZGUtPmlmX2luY29taW5nID09IHJlY3ZfaWYpCi0JCQkJY29udGludWU7Ci0KLQkJCWlmICghYXRvbWljX2luY19ub3RfemVybygmdG1wX25laWdoX25vZGUtPnJlZmNvdW50KSkKLQkJCQljb250aW51ZTsKLQotCQkJLyogaWYgd2UgZG9uJ3QgaGF2ZSBhIHJvdXRlciB5ZXQKLQkJCSAqIG9yIHRoaXMgb25lIGlzIGJldHRlciwgY2hvb3NlIGl0LiAqLwotCQkJaWYgKCghcm91dGVyKSB8fAotCQkJICAgICh0bXBfbmVpZ2hfbm9kZS0+dHFfYXZnID4gcm91dGVyLT50cV9hdmcpKSB7Ci0JCQkJLyogZGVjcmVtZW50IHJlZmNvdW50IG9mCi0JCQkJICogcHJldmlvdXNseSBzZWxlY3RlZCByb3V0ZXIgKi8KLQkJCQlpZiAocm91dGVyKQotCQkJCQluZWlnaF9ub2RlX2ZyZWVfcmVmKHJvdXRlcik7Ci0KLQkJCQlyb3V0ZXIgPSB0bXBfbmVpZ2hfbm9kZTsKLQkJCQlhdG9taWNfaW5jX25vdF96ZXJvKCZyb3V0ZXItPnJlZmNvdW50KTsKLQkJCX0KLQotCQkJbmVpZ2hfbm9kZV9mcmVlX3JlZih0bXBfbmVpZ2hfbm9kZSk7Ci0JCX0KLQotCQkvKiB1c2UgdGhlIGZpcnN0IGNhbmRpZGF0ZSBpZiBub3RoaW5nIHdhcyBmb3VuZC4gKi8KLQkJaWYgKCFyb3V0ZXIgJiYgZmlyc3RfY2FuZGlkYXRlICYmCi0JCSAgICBhdG9taWNfaW5jX25vdF96ZXJvKCZmaXJzdF9jYW5kaWRhdGUtPnJlZmNvdW50KSkKLQkJCXJvdXRlciA9IGZpcnN0X2NhbmRpZGF0ZTsKLQl9CiByZXR1cm5fcm91dGVyOgogCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiByb3V0ZXI7CitlcnJfdW5sb2NrOgorCXJjdV9yZWFkX3VubG9jaygpOworZXJyOgorCWlmIChyb3V0ZXIpCisJCW5laWdoX25vZGVfZnJlZV9yZWYocm91dGVyKTsKKwlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIGludCBjaGVja191bmljYXN0X3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGRyX3NpemUpCkBAIC0xMjg0LDEzICsxMjk2LDEwIEBACiAJfQogCiAJLyogZ2V0IHJvdXRpbmcgaW5mb3JtYXRpb24gKi8KLQlyY3VfcmVhZF9sb2NrKCk7CiAJb3JpZ19ub2RlID0gb3JpZ19oYXNoX2ZpbmQoYmF0X3ByaXYsIHVuaWNhc3RfcGFja2V0LT5kZXN0KTsKIAogCWlmICghb3JpZ19ub2RlKQotCQlnb3RvIHVubG9jazsKLQotCXJjdV9yZWFkX3VubG9jaygpOworCQlnb3RvIG91dDsKIAogCS8qIGZpbmRfcm91dGVyKCkgaW5jcmVhc2VzIG5laWdoX25vZGVzIHJlZmNvdW50IGlmIGZvdW5kLiAqLwogCW5laWdoX25vZGUgPSBmaW5kX3JvdXRlcihiYXRfcHJpdiwgb3JpZ19ub2RlLCByZWN2X2lmKTsKQEAgLTEzMzYsMTAgKzEzNDUsNyBAQAogCS8qIHJvdXRlIGl0ICovCiAJc2VuZF9za2JfcGFja2V0KHNrYiwgbmVpZ2hfbm9kZS0+aWZfaW5jb21pbmcsIG5laWdoX25vZGUtPmFkZHIpOwogCXJldCA9IE5FVF9SWF9TVUNDRVNTOwotCWdvdG8gb3V0OwogCi11bmxvY2s6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiBvdXQ6CiAJaWYgKG5laWdoX25vZGUpCiAJCW5laWdoX25vZGVfZnJlZV9yZWYobmVpZ2hfbm9kZSk7CkBAIC0xNDM4LDEzICsxNDQ0LDEwIEBACiAJaWYgKGJjYXN0X3BhY2tldC0+dHRsIDwgMikKIAkJZ290byBvdXQ7CiAKLQlyY3VfcmVhZF9sb2NrKCk7CiAJb3JpZ19ub2RlID0gb3JpZ19oYXNoX2ZpbmQoYmF0X3ByaXYsIGJjYXN0X3BhY2tldC0+b3JpZyk7CiAKIAlpZiAoIW9yaWdfbm9kZSkKLQkJZ290byByY3VfdW5sb2NrOwotCi0JcmN1X3JlYWRfdW5sb2NrKCk7CisJCWdvdG8gb3V0OwogCiAJc3Bpbl9sb2NrX2JoKCZvcmlnX25vZGUtPmJjYXN0X3NlcW5vX2xvY2spOwogCkBAIC0xNDc1LDkgKzE0NzgsNiBAQAogCXJldCA9IE5FVF9SWF9TVUNDRVNTOwogCWdvdG8gb3V0OwogCi1yY3VfdW5sb2NrOgotCXJjdV9yZWFkX3VubG9jaygpOwotCWdvdG8gb3V0Owogc3Bpbl91bmxvY2s6CiAJc3Bpbl91bmxvY2tfYmgoJm9yaWdfbm9kZS0+YmNhc3Rfc2Vxbm9fbG9jayk7CiBvdXQ6CmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmggYi9uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmgKaW5kZXggYjVhMDY0Yy4uODcwZjI5OCAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvcm91dGluZy5oCisrKyBiL25ldC9iYXRtYW4tYWR2L3JvdXRpbmcuaApAQCAtMjUsMTEgKzI1LDExIEBACiB2b2lkIHNsaWRlX293bl9iY2FzdF93aW5kb3coc3RydWN0IGhhcmRfaWZhY2UgKmhhcmRfaWZhY2UpOwogdm9pZCByZWNlaXZlX2JhdF9wYWNrZXQoc3RydWN0IGV0aGhkciAqZXRoaGRyLAogCQkJCXN0cnVjdCBiYXRtYW5fcGFja2V0ICpiYXRtYW5fcGFja2V0LAotCQkJCXVuc2lnbmVkIGNoYXIgKmhuYV9idWZmLCBpbnQgaG5hX2J1ZmZfbGVuLAorCQkJCXVuc2lnbmVkIGNoYXIgKnR0X2J1ZmYsIGludCB0dF9idWZmX2xlbiwKIAkJCQlzdHJ1Y3QgaGFyZF9pZmFjZSAqaWZfaW5jb21pbmcpOwogdm9pZCB1cGRhdGVfcm91dGVzKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsIHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwKLQkJICAgc3RydWN0IG5laWdoX25vZGUgKm5laWdoX25vZGUsIHVuc2lnbmVkIGNoYXIgKmhuYV9idWZmLAotCQkgICBpbnQgaG5hX2J1ZmZfbGVuKTsKKwkJICAgc3RydWN0IG5laWdoX25vZGUgKm5laWdoX25vZGUsIHVuc2lnbmVkIGNoYXIgKnR0X2J1ZmYsCisJCSAgIGludCB0dF9idWZmX2xlbik7CiBpbnQgcm91dGVfdW5pY2FzdF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhhcmRfaWZhY2UgKnJlY3ZfaWYpOwogaW50IHJlY3ZfaWNtcF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhhcmRfaWZhY2UgKnJlY3ZfaWYpOwogaW50IHJlY3ZfdW5pY2FzdF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhhcmRfaWZhY2UgKnJlY3ZfaWYpOwpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvc2VuZC5jIGIvbmV0L2JhdG1hbi1hZHYvc2VuZC5jCmluZGV4IGQ0OWU1NGQuLjMzNzc5MjcgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L3NlbmQuYworKysgYi9uZXQvYmF0bWFuLWFkdi9zZW5kLmMKQEAgLTEyMSw3ICsxMjEsNyBAQAogCS8qIGFkanVzdCBhbGwgZmxhZ3MgYW5kIGxvZyBwYWNrZXRzICovCiAJd2hpbGUgKGFnZ3JlZ2F0ZWRfcGFja2V0KGJ1ZmZfcG9zLAogCQkJCSBmb3J3X3BhY2tldC0+cGFja2V0X2xlbiwKLQkJCQkgYmF0bWFuX3BhY2tldC0+bnVtX2huYSkpIHsKKwkJCQkgYmF0bWFuX3BhY2tldC0+bnVtX3R0KSkgewogCiAJCS8qIHdlIG1pZ2h0IGhhdmUgYWdncmVnYXRlZCBkaXJlY3QgbGluayBwYWNrZXRzIHdpdGggYW4KIAkJICogb3JkaW5hcnkgYmFzZSBwYWNrZXQgKi8KQEAgLTE0Niw3ICsxNDYsNyBAQAogCQkJaGFyZF9pZmFjZS0+bmV0X2Rldi0+ZGV2X2FkZHIpOwogCiAJCWJ1ZmZfcG9zICs9IHNpemVvZihzdHJ1Y3QgYmF0bWFuX3BhY2tldCkgKwotCQkJKGJhdG1hbl9wYWNrZXQtPm51bV9obmEgKiBFVEhfQUxFTik7CisJCQkoYmF0bWFuX3BhY2tldC0+bnVtX3R0ICogRVRIX0FMRU4pOwogCQlwYWNrZXRfbnVtKys7CiAJCWJhdG1hbl9wYWNrZXQgPSAoc3RydWN0IGJhdG1hbl9wYWNrZXQgKikKIAkJCShmb3J3X3BhY2tldC0+c2tiLT5kYXRhICsgYnVmZl9wb3MpOwpAQCAtMjIyLDcgKzIyMiw3IEBACiAJc3RydWN0IGJhdG1hbl9wYWNrZXQgKmJhdG1hbl9wYWNrZXQ7CiAKIAluZXdfbGVuID0gc2l6ZW9mKHN0cnVjdCBiYXRtYW5fcGFja2V0KSArCi0JCQkoYmF0X3ByaXYtPm51bV9sb2NhbF9obmEgKiBFVEhfQUxFTik7CisJCQkoYmF0X3ByaXYtPm51bV9sb2NhbF90dCAqIEVUSF9BTEVOKTsKIAluZXdfYnVmZiA9IGttYWxsb2MobmV3X2xlbiwgR0ZQX0FUT01JQyk7CiAKIAkvKiBrZWVwIG9sZCBidWZmZXIgaWYga21hbGxvYyBzaG91bGQgZmFpbCAqLwpAQCAtMjMxLDcgKzIzMSw3IEBACiAJCSAgICAgICBzaXplb2Yoc3RydWN0IGJhdG1hbl9wYWNrZXQpKTsKIAkJYmF0bWFuX3BhY2tldCA9IChzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqKW5ld19idWZmOwogCi0JCWJhdG1hbl9wYWNrZXQtPm51bV9obmEgPSBobmFfbG9jYWxfZmlsbF9idWZmZXIoYmF0X3ByaXYsCisJCWJhdG1hbl9wYWNrZXQtPm51bV90dCA9IHR0X2xvY2FsX2ZpbGxfYnVmZmVyKGJhdF9wcml2LAogCQkJCW5ld19idWZmICsgc2l6ZW9mKHN0cnVjdCBiYXRtYW5fcGFja2V0KSwKIAkJCQluZXdfbGVuIC0gc2l6ZW9mKHN0cnVjdCBiYXRtYW5fcGFja2V0KSk7CiAKQEAgLTI0NCw2ICsyNDQsNyBAQAogdm9pZCBzY2hlZHVsZV9vd25fcGFja2V0KHN0cnVjdCBoYXJkX2lmYWNlICpoYXJkX2lmYWNlKQogewogCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihoYXJkX2lmYWNlLT5zb2Z0X2lmYWNlKTsKKwlzdHJ1Y3QgaGFyZF9pZmFjZSAqcHJpbWFyeV9pZjsKIAl1bnNpZ25lZCBsb25nIHNlbmRfdGltZTsKIAlzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldDsKIAlpbnQgdmlzX3NlcnZlcjsKQEAgLTI1Myw2ICsyNTQsNyBAQAogCQlyZXR1cm47CiAKIAl2aXNfc2VydmVyID0gYXRvbWljX3JlYWQoJmJhdF9wcml2LT52aXNfbW9kZSk7CisJcHJpbWFyeV9pZiA9IHByaW1hcnlfaWZfZ2V0X3NlbGVjdGVkKGJhdF9wcml2KTsKIAogCS8qKgogCSAqIHRoZSBpbnRlcmZhY2UgZ2V0cyBhY3RpdmF0ZWQgaGVyZSB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbgpAQCAtMjY0LDkgKzI2Niw5IEBACiAJaWYgKGhhcmRfaWZhY2UtPmlmX3N0YXR1cyA9PSBJRl9UT19CRV9BQ1RJVkFURUQpCiAJCWhhcmRfaWZhY2UtPmlmX3N0YXR1cyA9IElGX0FDVElWRTsKIAotCS8qIGlmIGxvY2FsIGhuYSBoYXMgY2hhbmdlZCBhbmQgaW50ZXJmYWNlIGlzIGEgcHJpbWFyeSBpbnRlcmZhY2UgKi8KLQlpZiAoKGF0b21pY19yZWFkKCZiYXRfcHJpdi0+aG5hX2xvY2FsX2NoYW5nZWQpKSAmJgotCSAgICAoaGFyZF9pZmFjZSA9PSBiYXRfcHJpdi0+cHJpbWFyeV9pZikpCisJLyogaWYgbG9jYWwgdHQgaGFzIGNoYW5nZWQgYW5kIGludGVyZmFjZSBpcyBhIHByaW1hcnkgaW50ZXJmYWNlICovCisJaWYgKChhdG9taWNfcmVhZCgmYmF0X3ByaXYtPnR0X2xvY2FsX2NoYW5nZWQpKSAmJgorCSAgICAoaGFyZF9pZmFjZSA9PSBwcmltYXJ5X2lmKSkKIAkJcmVidWlsZF9iYXRtYW5fcGFja2V0KGJhdF9wcml2LCBoYXJkX2lmYWNlKTsKIAogCS8qKgpAQCAtMjg0LDcgKzI4Niw3IEBACiAJZWxzZQogCQliYXRtYW5fcGFja2V0LT5mbGFncyAmPSB+VklTX1NFUlZFUjsKIAotCWlmICgoaGFyZF9pZmFjZSA9PSBiYXRfcHJpdi0+cHJpbWFyeV9pZikgJiYKKwlpZiAoKGhhcmRfaWZhY2UgPT0gcHJpbWFyeV9pZikgJiYKIAkgICAgKGF0b21pY19yZWFkKCZiYXRfcHJpdi0+Z3dfbW9kZSkgPT0gR1dfTU9ERV9TRVJWRVIpKQogCQliYXRtYW5fcGFja2V0LT5nd19mbGFncyA9CiAJCQkJKHVpbnQ4X3QpYXRvbWljX3JlYWQoJmJhdF9wcml2LT5nd19iYW5kd2lkdGgpOwpAQCAtMjk5LDE1ICszMDEsMTkgQEAKIAkJCSAgICAgICBoYXJkX2lmYWNlLT5wYWNrZXRfYnVmZiwKIAkJCSAgICAgICBoYXJkX2lmYWNlLT5wYWNrZXRfbGVuLAogCQkJICAgICAgIGhhcmRfaWZhY2UsIDEsIHNlbmRfdGltZSk7CisKKwlpZiAocHJpbWFyeV9pZikKKwkJaGFyZGlmX2ZyZWVfcmVmKHByaW1hcnlfaWYpOwogfQogCiB2b2lkIHNjaGVkdWxlX2ZvcndhcmRfcGFja2V0KHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwKIAkJCSAgICAgc3RydWN0IGV0aGhkciAqZXRoaGRyLAogCQkJICAgICBzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldCwKLQkJCSAgICAgdWludDhfdCBkaXJlY3RsaW5rLCBpbnQgaG5hX2J1ZmZfbGVuLAorCQkJICAgICB1aW50OF90IGRpcmVjdGxpbmssIGludCB0dF9idWZmX2xlbiwKIAkJCSAgICAgc3RydWN0IGhhcmRfaWZhY2UgKmlmX2luY29taW5nKQogewogCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihpZl9pbmNvbWluZy0+c29mdF9pZmFjZSk7CisJc3RydWN0IG5laWdoX25vZGUgKnJvdXRlcjsKIAl1bnNpZ25lZCBjaGFyIGluX3RxLCBpbl90dGwsIHRxX2F2ZyA9IDA7CiAJdW5zaWduZWQgbG9uZyBzZW5kX3RpbWU7CiAKQEAgLTMxNiw2ICszMjIsOCBAQAogCQlyZXR1cm47CiAJfQogCisJcm91dGVyID0gb3JpZ19ub2RlX2dldF9yb3V0ZXIob3JpZ19ub2RlKTsKKwogCWluX3RxID0gYmF0bWFuX3BhY2tldC0+dHE7CiAJaW5fdHRsID0gYmF0bWFuX3BhY2tldC0+dHRsOwogCkBAIC0zMjQsMjAgKzMzMiwyMiBAQAogCiAJLyogcmVicm9hZGNhc3QgdHEgb2Ygb3VyIGJlc3QgcmFua2luZyBuZWlnaGJvciB0byBlbnN1cmUgdGhlIHJlYnJvYWRjYXN0CiAJICogb2Ygb3VyIGJlc3QgdHEgdmFsdWUgKi8KLQlpZiAoKG9yaWdfbm9kZS0+cm91dGVyKSAmJiAob3JpZ19ub2RlLT5yb3V0ZXItPnRxX2F2ZyAhPSAwKSkgeworCWlmIChyb3V0ZXIgJiYgcm91dGVyLT50cV9hdmcgIT0gMCkgewogCiAJCS8qIHJlYnJvYWRjYXN0IG9nbSBvZiBiZXN0IHJhbmtpbmcgbmVpZ2hib3IgYXMgaXMgKi8KLQkJaWYgKCFjb21wYXJlX2V0aChvcmlnX25vZGUtPnJvdXRlci0+YWRkciwgZXRoaGRyLT5oX3NvdXJjZSkpIHsKLQkJCWJhdG1hbl9wYWNrZXQtPnRxID0gb3JpZ19ub2RlLT5yb3V0ZXItPnRxX2F2ZzsKKwkJaWYgKCFjb21wYXJlX2V0aChyb3V0ZXItPmFkZHIsIGV0aGhkci0+aF9zb3VyY2UpKSB7CisJCQliYXRtYW5fcGFja2V0LT50cSA9IHJvdXRlci0+dHFfYXZnOwogCi0JCQlpZiAob3JpZ19ub2RlLT5yb3V0ZXItPmxhc3RfdHRsKQotCQkJCWJhdG1hbl9wYWNrZXQtPnR0bCA9IG9yaWdfbm9kZS0+cm91dGVyLT5sYXN0X3R0bAotCQkJCQkJCS0gMTsKKwkJCWlmIChyb3V0ZXItPmxhc3RfdHRsKQorCQkJCWJhdG1hbl9wYWNrZXQtPnR0bCA9IHJvdXRlci0+bGFzdF90dGwgLSAxOwogCQl9CiAKLQkJdHFfYXZnID0gb3JpZ19ub2RlLT5yb3V0ZXItPnRxX2F2ZzsKKwkJdHFfYXZnID0gcm91dGVyLT50cV9hdmc7CiAJfQogCisJaWYgKHJvdXRlcikKKwkJbmVpZ2hfbm9kZV9mcmVlX3JlZihyb3V0ZXIpOworCiAJLyogYXBwbHkgaG9wIHBlbmFsdHkgKi8KIAliYXRtYW5fcGFja2V0LT50cSA9IGhvcF9wZW5hbHR5KGJhdG1hbl9wYWNrZXQtPnRxLCBiYXRfcHJpdik7CiAKQEAgLTM1OSw3ICszNjksNyBAQAogCXNlbmRfdGltZSA9IGZvcndhcmRfc2VuZF90aW1lKCk7CiAJYWRkX2JhdF9wYWNrZXRfdG9fbGlzdChiYXRfcHJpdiwKIAkJCSAgICAgICAodW5zaWduZWQgY2hhciAqKWJhdG1hbl9wYWNrZXQsCi0JCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBiYXRtYW5fcGFja2V0KSArIGhuYV9idWZmX2xlbiwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGJhdG1hbl9wYWNrZXQpICsgdHRfYnVmZl9sZW4sCiAJCQkgICAgICAgaWZfaW5jb21pbmcsIDAsIHNlbmRfdGltZSk7CiB9CiAKQEAgLTM2Nyw2ICszNzcsOCBAQAogewogCWlmIChmb3J3X3BhY2tldC0+c2tiKQogCQlrZnJlZV9za2IoZm9yd19wYWNrZXQtPnNrYik7CisJaWYgKGZvcndfcGFja2V0LT5pZl9pbmNvbWluZykKKwkJaGFyZGlmX2ZyZWVfcmVmKGZvcndfcGFja2V0LT5pZl9pbmNvbWluZyk7CiAJa2ZyZWUoZm9yd19wYWNrZXQpOwogfQogCkBAIC0zODgsNyArNDAwLDYgQEAKIAkJCSAgIHNlbmRfdGltZSk7CiB9CiAKLSNkZWZpbmUgYXRvbWljX2RlY19ub3RfemVybyh2KSAgICAgICAgICBhdG9taWNfYWRkX3VubGVzcygodiksIC0xLCAwKQogLyogYWRkIGEgYnJvYWRjYXN0IHBhY2tldCB0byB0aGUgcXVldWUgYW5kIHNldHVwIHRpbWVycy4gYnJvYWRjYXN0IHBhY2tldHMKICAqIGFyZSBzZW50IG11bHRpcGxlIHRpbWVzIHRvIGluY3JlYXNlIHByb2JhYmlsaXR5IGZvciBiZWVpbmcgcmVjZWl2ZWQuCiAgKgpAQCAtMzk5LDYgKzQxMCw3IEBACiAgKiBza2IgaXMgZnJlZWQuICovCiBpbnQgYWRkX2JjYXN0X3BhY2tldF90b19saXN0KHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CisJc3RydWN0IGhhcmRfaWZhY2UgKnByaW1hcnlfaWYgPSBOVUxMOwogCXN0cnVjdCBmb3J3X3BhY2tldCAqZm9yd19wYWNrZXQ7CiAJc3RydWN0IGJjYXN0X3BhY2tldCAqYmNhc3RfcGFja2V0OwogCkBAIC00MDcsOCArNDE5LDkgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKCFiYXRfcHJpdi0+cHJpbWFyeV9pZikKLQkJZ290byBvdXQ7CisJcHJpbWFyeV9pZiA9IHByaW1hcnlfaWZfZ2V0X3NlbGVjdGVkKGJhdF9wcml2KTsKKwlpZiAoIXByaW1hcnlfaWYpCisJCWdvdG8gb3V0X2FuZF9pbmM7CiAKIAlmb3J3X3BhY2tldCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBmb3J3X3BhY2tldCksIEdGUF9BVE9NSUMpOwogCkBAIC00MjYsNyArNDM5LDcgQEAKIAlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwogCiAJZm9yd19wYWNrZXQtPnNrYiA9IHNrYjsKLQlmb3J3X3BhY2tldC0+aWZfaW5jb21pbmcgPSBiYXRfcHJpdi0+cHJpbWFyeV9pZjsKKwlmb3J3X3BhY2tldC0+aWZfaW5jb21pbmcgPSBwcmltYXJ5X2lmOwogCiAJLyogaG93IG9mdGVuIGRpZCB3ZSBzZW5kIHRoZSBiY2FzdCBwYWNrZXQgPyAqLwogCWZvcndfcGFja2V0LT5udW1fcGFja2V0cyA9IDA7CkBAIC00MzksNiArNDUyLDggQEAKIG91dF9hbmRfaW5jOgogCWF0b21pY19pbmMoJmJhdF9wcml2LT5iY2FzdF9xdWV1ZV9sZWZ0KTsKIG91dDoKKwlpZiAocHJpbWFyeV9pZikKKwkJaGFyZGlmX2ZyZWVfcmVmKHByaW1hcnlfaWYpOwogCXJldHVybiBORVRERVZfVFhfQlVTWTsKIH0KIApAQCAtNTI2LDYgKzU0MSw3IEBACiB7CiAJc3RydWN0IGZvcndfcGFja2V0ICpmb3J3X3BhY2tldDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqdG1wX25vZGUsICpzYWZlX3RtcF9ub2RlOworCWJvb2wgcGVuZGluZzsKIAogCWlmIChoYXJkX2lmYWNlKQogCQliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LApAQCAtNTU0LDggKzU3MCwxMyBAQAogCQkgKiBzZW5kX291dHN0YW5kaW5nX2JjYXN0X3BhY2tldCgpIHdpbGwgbG9jayB0aGUgbGlzdCB0bwogCQkgKiBkZWxldGUgdGhlIGl0ZW0gZnJvbSB0aGUgbGlzdAogCQkgKi8KLQkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZmb3J3X3BhY2tldC0+ZGVsYXllZF93b3JrKTsKKwkJcGVuZGluZyA9IGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZm9yd19wYWNrZXQtPmRlbGF5ZWRfd29yayk7CiAJCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPmZvcndfYmNhc3RfbGlzdF9sb2NrKTsKKworCQlpZiAocGVuZGluZykgeworCQkJaGxpc3RfZGVsKCZmb3J3X3BhY2tldC0+bGlzdCk7CisJCQlmb3J3X3BhY2tldF9mcmVlKGZvcndfcGFja2V0KTsKKwkJfQogCX0KIAlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPmZvcndfYmNhc3RfbGlzdF9sb2NrKTsKIApAQCAtNTc4LDggKzU5OSwxMyBAQAogCQkgKiBzZW5kX291dHN0YW5kaW5nX2JhdF9wYWNrZXQoKSB3aWxsIGxvY2sgdGhlIGxpc3QgdG8KIAkJICogZGVsZXRlIHRoZSBpdGVtIGZyb20gdGhlIGxpc3QKIAkJICovCi0JCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZm9yd19wYWNrZXQtPmRlbGF5ZWRfd29yayk7CisJCXBlbmRpbmcgPSBjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmZvcndfcGFja2V0LT5kZWxheWVkX3dvcmspOwogCQlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5mb3J3X2JhdF9saXN0X2xvY2spOworCisJCWlmIChwZW5kaW5nKSB7CisJCQlobGlzdF9kZWwoJmZvcndfcGFja2V0LT5saXN0KTsKKwkJCWZvcndfcGFja2V0X2ZyZWUoZm9yd19wYWNrZXQpOworCQl9CiAJfQogCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+Zm9yd19iYXRfbGlzdF9sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3NlbmQuaCBiL25ldC9iYXRtYW4tYWR2L3NlbmQuaAppbmRleCA3YjJmZjE5Li4yNDcxNzJkIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9zZW5kLmgKKysrIGIvbmV0L2JhdG1hbi1hZHYvc2VuZC5oCkBAIC0yOSw3ICsyOSw3IEBACiB2b2lkIHNjaGVkdWxlX2ZvcndhcmRfcGFja2V0KHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwKIAkJCSAgICAgc3RydWN0IGV0aGhkciAqZXRoaGRyLAogCQkJICAgICBzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldCwKLQkJCSAgICAgdWludDhfdCBkaXJlY3RsaW5rLCBpbnQgaG5hX2J1ZmZfbGVuLAorCQkJICAgICB1aW50OF90IGRpcmVjdGxpbmssIGludCB0dF9idWZmX2xlbiwKIAkJCSAgICAgc3RydWN0IGhhcmRfaWZhY2UgKmlmX291dGdvaW5nKTsKIGludCBhZGRfYmNhc3RfcGFja2V0X3RvX2xpc3Qoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB2b2lkIHNlbmRfb3V0c3RhbmRpbmdfYmF0X3BhY2tldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvc29mdC1pbnRlcmZhY2UuYyBiL25ldC9iYXRtYW4tYWR2L3NvZnQtaW50ZXJmYWNlLmMKaW5kZXggMDRlZmUwMi4uZDVhYTYwOSAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvc29mdC1pbnRlcmZhY2UuYworKysgYi9uZXQvYmF0bWFuLWFkdi9zb2Z0LWludGVyZmFjZS5jCkBAIC00Myw4ICs0Myw2IEBACiBzdGF0aWMgdTMyIGJhdF9nZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBiYXRfc2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiB2YWx1ZSk7CiBzdGF0aWMgdTMyIGJhdF9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB1MzIgYmF0X2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBiYXRfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGJhdF9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NldHRpbmdzID0gYmF0X2dldF9zZXR0aW5ncywKQEAgLTUyLDggKzUwLDYgQEAKIAkuZ2V0X21zZ2xldmVsID0gYmF0X2dldF9tc2dsZXZlbCwKIAkuc2V0X21zZ2xldmVsID0gYmF0X3NldF9tc2dsZXZlbCwKIAkuZ2V0X2xpbmsgPSBiYXRfZ2V0X2xpbmssCi0JLmdldF9yeF9jc3VtID0gYmF0X2dldF9yeF9jc3VtLAotCS5zZXRfcnhfY3N1bSA9IGJhdF9zZXRfcnhfY3N1bQogfTsKIAogaW50IG15X3NrYl9oZWFkX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbikKQEAgLTgyLDEwNiArNzgsMzY1IEBACiAJCWtmcmVlX3JjdShzb2Z0aWZfbmVpZ2gsIHJjdSk7CiB9CiAKLXZvaWQgc29mdGlmX25laWdoX3B1cmdlKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCitzdGF0aWMgdm9pZCBzb2Z0aWZfbmVpZ2hfdmlkX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KQogewotCXN0cnVjdCBzb2Z0aWZfbmVpZ2ggKnNvZnRpZl9uZWlnaCwgKnNvZnRpZl9uZWlnaF90bXA7CisJc3RydWN0IHNvZnRpZl9uZWlnaF92aWQgKnNvZnRpZl9uZWlnaF92aWQ7CisJc3RydWN0IHNvZnRpZl9uZWlnaCAqc29mdGlmX25laWdoOwogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlLCAqbm9kZV90bXA7CisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdjsKKworCXNvZnRpZl9uZWlnaF92aWQgPSBjb250YWluZXJfb2YocmN1LCBzdHJ1Y3Qgc29mdGlmX25laWdoX3ZpZCwgcmN1KTsKKwliYXRfcHJpdiA9IHNvZnRpZl9uZWlnaF92aWQtPmJhdF9wcml2OwogCiAJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+c29mdGlmX25laWdoX2xvY2spOwotCiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzb2Z0aWZfbmVpZ2gsIG5vZGUsIG5vZGVfdG1wLAotCQkJCSAgJmJhdF9wcml2LT5zb2Z0aWZfbmVpZ2hfbGlzdCwgbGlzdCkgewotCi0JCWlmICgoIXRpbWVfYWZ0ZXIoamlmZmllcywgc29mdGlmX25laWdoLT5sYXN0X3NlZW4gKwotCQkJCW1zZWNzX3RvX2ppZmZpZXMoU09GVElGX05FSUdIX1RJTUVPVVQpKSkgJiYKLQkJICAgIChhdG9taWNfcmVhZCgmYmF0X3ByaXYtPm1lc2hfc3RhdGUpID09IE1FU0hfQUNUSVZFKSkKLQkJCWNvbnRpbnVlOwotCisJCQkJICAmc29mdGlmX25laWdoX3ZpZC0+c29mdGlmX25laWdoX2xpc3QsIGxpc3QpIHsKIAkJaGxpc3RfZGVsX3JjdSgmc29mdGlmX25laWdoLT5saXN0KTsKLQotCQlpZiAoYmF0X3ByaXYtPnNvZnRpZl9uZWlnaCA9PSBzb2Z0aWZfbmVpZ2gpIHsKLQkJCWJhdF9kYmcoREJHX1JPVVRFUywgYmF0X3ByaXYsCi0JCQkJICJDdXJyZW50IG1lc2ggZXhpdCBwb2ludCAnJXBNJyB2YW5pc2hlZCAiCi0JCQkJICIodmlkOiAlZCkuXG4iLAotCQkJCSBzb2Z0aWZfbmVpZ2gtPmFkZHIsIHNvZnRpZl9uZWlnaC0+dmlkKTsKLQkJCXNvZnRpZl9uZWlnaF90bXAgPSBiYXRfcHJpdi0+c29mdGlmX25laWdoOwotCQkJYmF0X3ByaXYtPnNvZnRpZl9uZWlnaCA9IE5VTEw7Ci0JCQlzb2Z0aWZfbmVpZ2hfZnJlZV9yZWYoc29mdGlmX25laWdoX3RtcCk7Ci0JCX0KLQogCQlzb2Z0aWZfbmVpZ2hfZnJlZV9yZWYoc29mdGlmX25laWdoKTsKIAl9Ci0KIAlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPnNvZnRpZl9uZWlnaF9sb2NrKTsKKworCWtmcmVlKHNvZnRpZl9uZWlnaF92aWQpOworfQorCitzdGF0aWMgdm9pZCBzb2Z0aWZfbmVpZ2hfdmlkX2ZyZWVfcmVmKHN0cnVjdCBzb2Z0aWZfbmVpZ2hfdmlkICpzb2Z0aWZfbmVpZ2hfdmlkKQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZzb2Z0aWZfbmVpZ2hfdmlkLT5yZWZjb3VudCkpCisJCWNhbGxfcmN1KCZzb2Z0aWZfbmVpZ2hfdmlkLT5yY3UsIHNvZnRpZl9uZWlnaF92aWRfZnJlZV9yY3UpOworfQorCitzdGF0aWMgc3RydWN0IHNvZnRpZl9uZWlnaF92aWQgKnNvZnRpZl9uZWlnaF92aWRfZ2V0KHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCisJCQkJCQkgICAgIHNob3J0IHZpZCkKK3sKKwlzdHJ1Y3Qgc29mdGlmX25laWdoX3ZpZCAqc29mdGlmX25laWdoX3ZpZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc29mdGlmX25laWdoX3ZpZCwgbm9kZSwKKwkJCQkgJmJhdF9wcml2LT5zb2Z0aWZfbmVpZ2hfdmlkcywgbGlzdCkgeworCQlpZiAoc29mdGlmX25laWdoX3ZpZC0+dmlkICE9IHZpZCkKKwkJCWNvbnRpbnVlOworCisJCWlmICghYXRvbWljX2luY19ub3RfemVybygmc29mdGlmX25laWdoX3ZpZC0+cmVmY291bnQpKQorCQkJY29udGludWU7CisKKwkJZ290byBvdXQ7CisJfQorCisJc29mdGlmX25laWdoX3ZpZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2Z0aWZfbmVpZ2hfdmlkKSwKKwkJCQkgICBHRlBfQVRPTUlDKTsKKwlpZiAoIXNvZnRpZl9uZWlnaF92aWQpCisJCWdvdG8gb3V0OworCisJc29mdGlmX25laWdoX3ZpZC0+dmlkID0gdmlkOworCXNvZnRpZl9uZWlnaF92aWQtPmJhdF9wcml2ID0gYmF0X3ByaXY7CisKKwkvKiBpbml0aWFsaXplIHdpdGggMiAtIGNhbGxlciBkZWNyZW1lbnRzIGNvdW50ZXIgYnkgb25lICovCisJYXRvbWljX3NldCgmc29mdGlmX25laWdoX3ZpZC0+cmVmY291bnQsIDIpOworCUlOSVRfSExJU1RfSEVBRCgmc29mdGlmX25laWdoX3ZpZC0+c29mdGlmX25laWdoX2xpc3QpOworCUlOSVRfSExJU1RfTk9ERSgmc29mdGlmX25laWdoX3ZpZC0+bGlzdCk7CisJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+c29mdGlmX25laWdoX3ZpZF9sb2NrKTsKKwlobGlzdF9hZGRfaGVhZF9yY3UoJnNvZnRpZl9uZWlnaF92aWQtPmxpc3QsCisJCQkgICAmYmF0X3ByaXYtPnNvZnRpZl9uZWlnaF92aWRzKTsKKwlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPnNvZnRpZl9uZWlnaF92aWRfbG9jayk7CisKK291dDoKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gc29mdGlmX25laWdoX3ZpZDsKIH0KIAogc3RhdGljIHN0cnVjdCBzb2Z0aWZfbmVpZ2ggKnNvZnRpZl9uZWlnaF9nZXQoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKIAkJCQkJICAgICB1aW50OF90ICphZGRyLCBzaG9ydCB2aWQpCiB7Ci0Jc3RydWN0IHNvZnRpZl9uZWlnaCAqc29mdGlmX25laWdoOworCXN0cnVjdCBzb2Z0aWZfbmVpZ2hfdmlkICpzb2Z0aWZfbmVpZ2hfdmlkOworCXN0cnVjdCBzb2Z0aWZfbmVpZ2ggKnNvZnRpZl9uZWlnaCA9IE5VTEw7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAKKwlzb2Z0aWZfbmVpZ2hfdmlkID0gc29mdGlmX25laWdoX3ZpZF9nZXQoYmF0X3ByaXYsIHZpZCk7CisJaWYgKCFzb2Z0aWZfbmVpZ2hfdmlkKQorCQlnb3RvIG91dDsKKwogCXJjdV9yZWFkX2xvY2soKTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc29mdGlmX25laWdoLCBub2RlLAotCQkJCSAmYmF0X3ByaXYtPnNvZnRpZl9uZWlnaF9saXN0LCBsaXN0KSB7CisJCQkJICZzb2Z0aWZfbmVpZ2hfdmlkLT5zb2Z0aWZfbmVpZ2hfbGlzdCwKKwkJCQkgbGlzdCkgewogCQlpZiAoIWNvbXBhcmVfZXRoKHNvZnRpZl9uZWlnaC0+YWRkciwgYWRkcikpCiAJCQljb250aW51ZTsKIAotCQlpZiAoc29mdGlmX25laWdoLT52aWQgIT0gdmlkKQotCQkJY29udGludWU7Ci0KIAkJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZzb2Z0aWZfbmVpZ2gtPnJlZmNvdW50KSkKIAkJCWNvbnRpbnVlOwogCiAJCXNvZnRpZl9uZWlnaC0+bGFzdF9zZWVuID0gamlmZmllczsKLQkJZ290byBvdXQ7CisJCWdvdG8gdW5sb2NrOwogCX0KIAogCXNvZnRpZl9uZWlnaCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2Z0aWZfbmVpZ2gpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNvZnRpZl9uZWlnaCkKLQkJZ290byBvdXQ7CisJCWdvdG8gdW5sb2NrOwogCiAJbWVtY3B5KHNvZnRpZl9uZWlnaC0+YWRkciwgYWRkciwgRVRIX0FMRU4pOwotCXNvZnRpZl9uZWlnaC0+dmlkID0gdmlkOwogCXNvZnRpZl9uZWlnaC0+bGFzdF9zZWVuID0gamlmZmllczsKIAkvKiBpbml0aWFsaXplIHdpdGggMiAtIGNhbGxlciBkZWNyZW1lbnRzIGNvdW50ZXIgYnkgb25lICovCiAJYXRvbWljX3NldCgmc29mdGlmX25laWdoLT5yZWZjb3VudCwgMik7CiAKIAlJTklUX0hMSVNUX05PREUoJnNvZnRpZl9uZWlnaC0+bGlzdCk7CiAJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+c29mdGlmX25laWdoX2xvY2spOwotCWhsaXN0X2FkZF9oZWFkX3JjdSgmc29mdGlmX25laWdoLT5saXN0LCAmYmF0X3ByaXYtPnNvZnRpZl9uZWlnaF9saXN0KTsKKwlobGlzdF9hZGRfaGVhZF9yY3UoJnNvZnRpZl9uZWlnaC0+bGlzdCwKKwkJCSAgICZzb2Z0aWZfbmVpZ2hfdmlkLT5zb2Z0aWZfbmVpZ2hfbGlzdCk7CisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5zb2Z0aWZfbmVpZ2hfbG9jayk7CisKK3VubG9jazoKKwlyY3VfcmVhZF91bmxvY2soKTsKK291dDoKKwlpZiAoc29mdGlmX25laWdoX3ZpZCkKKwkJc29mdGlmX25laWdoX3ZpZF9mcmVlX3JlZihzb2Z0aWZfbmVpZ2hfdmlkKTsKKwlyZXR1cm4gc29mdGlmX25laWdoOworfQorCitzdGF0aWMgc3RydWN0IHNvZnRpZl9uZWlnaCAqc29mdGlmX25laWdoX2dldF9zZWxlY3RlZCgKKwkJCQlzdHJ1Y3Qgc29mdGlmX25laWdoX3ZpZCAqc29mdGlmX25laWdoX3ZpZCkKK3sKKwlzdHJ1Y3Qgc29mdGlmX25laWdoICpzb2Z0aWZfbmVpZ2g7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJc29mdGlmX25laWdoID0gcmN1X2RlcmVmZXJlbmNlKHNvZnRpZl9uZWlnaF92aWQtPnNvZnRpZl9uZWlnaCk7CisKKwlpZiAoc29mdGlmX25laWdoICYmICFhdG9taWNfaW5jX25vdF96ZXJvKCZzb2Z0aWZfbmVpZ2gtPnJlZmNvdW50KSkKKwkJc29mdGlmX25laWdoID0gTlVMTDsKKworCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiBzb2Z0aWZfbmVpZ2g7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29mdGlmX25laWdoICpzb2Z0aWZfbmVpZ2hfdmlkX2dldF9zZWxlY3RlZCgKKwkJCQkJCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCisJCQkJCQlzaG9ydCB2aWQpCit7CisJc3RydWN0IHNvZnRpZl9uZWlnaF92aWQgKnNvZnRpZl9uZWlnaF92aWQ7CisJc3RydWN0IHNvZnRpZl9uZWlnaCAqc29mdGlmX25laWdoID0gTlVMTDsKKworCXNvZnRpZl9uZWlnaF92aWQgPSBzb2Z0aWZfbmVpZ2hfdmlkX2dldChiYXRfcHJpdiwgdmlkKTsKKwlpZiAoIXNvZnRpZl9uZWlnaF92aWQpCisJCWdvdG8gb3V0OworCisJc29mdGlmX25laWdoID0gc29mdGlmX25laWdoX2dldF9zZWxlY3RlZChzb2Z0aWZfbmVpZ2hfdmlkKTsKK291dDoKKwlpZiAoc29mdGlmX25laWdoX3ZpZCkKKwkJc29mdGlmX25laWdoX3ZpZF9mcmVlX3JlZihzb2Z0aWZfbmVpZ2hfdmlkKTsKKwlyZXR1cm4gc29mdGlmX25laWdoOworfQorCitzdGF0aWMgdm9pZCBzb2Z0aWZfbmVpZ2hfdmlkX3NlbGVjdChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAorCQkJCSAgICBzdHJ1Y3Qgc29mdGlmX25laWdoICpuZXdfbmVpZ2gsCisJCQkJICAgIHNob3J0IHZpZCkKK3sKKwlzdHJ1Y3Qgc29mdGlmX25laWdoX3ZpZCAqc29mdGlmX25laWdoX3ZpZDsKKwlzdHJ1Y3Qgc29mdGlmX25laWdoICpjdXJyX25laWdoOworCisJc29mdGlmX25laWdoX3ZpZCA9IHNvZnRpZl9uZWlnaF92aWRfZ2V0KGJhdF9wcml2LCB2aWQpOworCWlmICghc29mdGlmX25laWdoX3ZpZCkKKwkJZ290byBvdXQ7CisKKwlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5zb2Z0aWZfbmVpZ2hfbG9jayk7CisKKwlpZiAobmV3X25laWdoICYmICFhdG9taWNfaW5jX25vdF96ZXJvKCZuZXdfbmVpZ2gtPnJlZmNvdW50KSkKKwkJbmV3X25laWdoID0gTlVMTDsKKworCWN1cnJfbmVpZ2ggPSBzb2Z0aWZfbmVpZ2hfdmlkLT5zb2Z0aWZfbmVpZ2g7CisJcmN1X2Fzc2lnbl9wb2ludGVyKHNvZnRpZl9uZWlnaF92aWQtPnNvZnRpZl9uZWlnaCwgbmV3X25laWdoKTsKKworCWlmICgoY3Vycl9uZWlnaCkgJiYgKCFuZXdfbmVpZ2gpKQorCQliYXRfZGJnKERCR19ST1VURVMsIGJhdF9wcml2LAorCQkJIlJlbW92aW5nIG1lc2ggZXhpdCBwb2ludCBvbiB2aWQ6ICVkIChwcmV2OiAlcE0pLlxuIiwKKwkJCXZpZCwgY3Vycl9uZWlnaC0+YWRkcik7CisJZWxzZSBpZiAoKGN1cnJfbmVpZ2gpICYmIChuZXdfbmVpZ2gpKQorCQliYXRfZGJnKERCR19ST1VURVMsIGJhdF9wcml2LAorCQkJIkNoYW5naW5nIG1lc2ggZXhpdCBwb2ludCBvbiB2aWQ6ICVkIGZyb20gJXBNICIKKwkJCSJ0byAlcE0uXG4iLCB2aWQsIGN1cnJfbmVpZ2gtPmFkZHIsIG5ld19uZWlnaC0+YWRkcik7CisJZWxzZSBpZiAoKCFjdXJyX25laWdoKSAmJiAobmV3X25laWdoKSkKKwkJYmF0X2RiZyhEQkdfUk9VVEVTLCBiYXRfcHJpdiwKKwkJCSJTZXR0aW5nIG1lc2ggZXhpdCBwb2ludCBvbiB2aWQ6ICVkIHRvICVwTS5cbiIsCisJCQl2aWQsIG5ld19uZWlnaC0+YWRkcik7CisKKwlpZiAoY3Vycl9uZWlnaCkKKwkJc29mdGlmX25laWdoX2ZyZWVfcmVmKGN1cnJfbmVpZ2gpOworCiAJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5zb2Z0aWZfbmVpZ2hfbG9jayk7CiAKIG91dDoKKwlpZiAoc29mdGlmX25laWdoX3ZpZCkKKwkJc29mdGlmX25laWdoX3ZpZF9mcmVlX3JlZihzb2Z0aWZfbmVpZ2hfdmlkKTsKK30KKworc3RhdGljIHZvaWQgc29mdGlmX25laWdoX3ZpZF9kZXNlbGVjdChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAorCQkJCSAgICAgIHN0cnVjdCBzb2Z0aWZfbmVpZ2hfdmlkICpzb2Z0aWZfbmVpZ2hfdmlkKQoreworCXN0cnVjdCBzb2Z0aWZfbmVpZ2ggKmN1cnJfbmVpZ2g7CisJc3RydWN0IHNvZnRpZl9uZWlnaCAqc29mdGlmX25laWdoID0gTlVMTCwgKnNvZnRpZl9uZWlnaF90bXA7CisJc3RydWN0IGhhcmRfaWZhY2UgKnByaW1hcnlfaWYgPSBOVUxMOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCisJcHJpbWFyeV9pZiA9IHByaW1hcnlfaWZfZ2V0X3NlbGVjdGVkKGJhdF9wcml2KTsKKwlpZiAoIXByaW1hcnlfaWYpCisJCWdvdG8gb3V0OworCisJLyogZmluZCBuZXcgc29mdGlmX25laWdoIGltbWVkaWF0ZWx5IHRvIGF2b2lkIHRlbXBvcmFyeSBsb29wcyAqLworCXJjdV9yZWFkX2xvY2soKTsKKwljdXJyX25laWdoID0gcmN1X2RlcmVmZXJlbmNlKHNvZnRpZl9uZWlnaF92aWQtPnNvZnRpZl9uZWlnaCk7CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc29mdGlmX25laWdoX3RtcCwgbm9kZSwKKwkJCQkgJnNvZnRpZl9uZWlnaF92aWQtPnNvZnRpZl9uZWlnaF9saXN0LAorCQkJCSBsaXN0KSB7CisJCWlmIChzb2Z0aWZfbmVpZ2hfdG1wID09IGN1cnJfbmVpZ2gpCisJCQljb250aW51ZTsKKworCQkvKiB3ZSBnb3QgYSBuZWlnaGJvciBidXQgaXRzIG1hYyBpcyAnYmlnZ2VyJyB0aGFuIG91cnMgICovCisJCWlmIChtZW1jbXAocHJpbWFyeV9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIsCisJCQkgICBzb2Z0aWZfbmVpZ2hfdG1wLT5hZGRyLCBFVEhfQUxFTikgPCAwKQorCQkJY29udGludWU7CisKKwkJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZzb2Z0aWZfbmVpZ2hfdG1wLT5yZWZjb3VudCkpCisJCQljb250aW51ZTsKKworCQlzb2Z0aWZfbmVpZ2ggPSBzb2Z0aWZfbmVpZ2hfdG1wOworCQlnb3RvIHVubG9jazsKKwl9CisKK3VubG9jazoKIAlyY3VfcmVhZF91bmxvY2soKTsKLQlyZXR1cm4gc29mdGlmX25laWdoOworb3V0OgorCXNvZnRpZl9uZWlnaF92aWRfc2VsZWN0KGJhdF9wcml2LCBzb2Z0aWZfbmVpZ2gsIHNvZnRpZl9uZWlnaF92aWQtPnZpZCk7CisKKwlpZiAocHJpbWFyeV9pZikKKwkJaGFyZGlmX2ZyZWVfcmVmKHByaW1hcnlfaWYpOworCWlmIChzb2Z0aWZfbmVpZ2gpCisJCXNvZnRpZl9uZWlnaF9mcmVlX3JlZihzb2Z0aWZfbmVpZ2gpOwogfQogCiBpbnQgc29mdGlmX25laWdoX3NlcV9wcmludF90ZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilzZXEtPnByaXZhdGU7CiAJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KG5ldF9kZXYpOworCXN0cnVjdCBzb2Z0aWZfbmVpZ2hfdmlkICpzb2Z0aWZfbmVpZ2hfdmlkOwogCXN0cnVjdCBzb2Z0aWZfbmVpZ2ggKnNvZnRpZl9uZWlnaDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgaGFyZF9pZmFjZSAqcHJpbWFyeV9pZjsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKm5vZGVfdG1wOworCXN0cnVjdCBzb2Z0aWZfbmVpZ2ggKmN1cnJfc29mdGlmX25laWdoOworCWludCByZXQgPSAwLCBsYXN0X3NlZW5fc2VjcywgbGFzdF9zZWVuX21zZWNzOwogCi0JaWYgKCFiYXRfcHJpdi0+cHJpbWFyeV9pZikgewotCQlyZXR1cm4gc2VxX3ByaW50ZihzZXEsICJCQVRNQU4gbWVzaCAlcyBkaXNhYmxlZCAtICIKLQkJCSAgICAgICAicGxlYXNlIHNwZWNpZnkgaW50ZXJmYWNlcyB0byBlbmFibGUgaXRcbiIsCi0JCQkgICAgICAgbmV0X2Rldi0+bmFtZSk7CisJcHJpbWFyeV9pZiA9IHByaW1hcnlfaWZfZ2V0X3NlbGVjdGVkKGJhdF9wcml2KTsKKwlpZiAoIXByaW1hcnlfaWYpIHsKKwkJcmV0ID0gc2VxX3ByaW50ZihzZXEsICJCQVRNQU4gbWVzaCAlcyBkaXNhYmxlZCAtICIKKwkJCQkgInBsZWFzZSBzcGVjaWZ5IGludGVyZmFjZXMgdG8gZW5hYmxlIGl0XG4iLAorCQkJCSBuZXRfZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHByaW1hcnlfaWYtPmlmX3N0YXR1cyAhPSBJRl9BQ1RJVkUpIHsKKwkJcmV0ID0gc2VxX3ByaW50ZihzZXEsICJCQVRNQU4gbWVzaCAlcyAiCisJCQkJICJkaXNhYmxlZCAtIHByaW1hcnkgaW50ZXJmYWNlIG5vdCBhY3RpdmVcbiIsCisJCQkJIG5ldF9kZXYtPm5hbWUpOworCQlnb3RvIG91dDsKIAl9CiAKIAlzZXFfcHJpbnRmKHNlcSwgIlNvZnRpZiBuZWlnaGJvciBsaXN0ICglcylcbiIsIG5ldF9kZXYtPm5hbWUpOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzb2Z0aWZfbmVpZ2gsIG5vZGUsCi0JCQkJICZiYXRfcHJpdi0+c29mdGlmX25laWdoX2xpc3QsIGxpc3QpCi0JCXNlcV9wcmludGYoc2VxLCAiJXMgJXBNICh2aWQ6ICVkKVxuIiwKLQkJCQliYXRfcHJpdi0+c29mdGlmX25laWdoID09IHNvZnRpZl9uZWlnaAotCQkJCT8gIj0+IiA6ICIgICIsIHNvZnRpZl9uZWlnaC0+YWRkciwKLQkJCQlzb2Z0aWZfbmVpZ2gtPnZpZCk7CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNvZnRpZl9uZWlnaF92aWQsIG5vZGUsCisJCQkJICZiYXRfcHJpdi0+c29mdGlmX25laWdoX3ZpZHMsIGxpc3QpIHsKKwkJc2VxX3ByaW50ZihzZXEsICIgICAgICUtMTVzICVzIG9uIHZpZDogJWRcbiIsCisJCQkgICAiT3JpZ2luYXRvciIsICJsYXN0LXNlZW4iLCBzb2Z0aWZfbmVpZ2hfdmlkLT52aWQpOworCisJCWN1cnJfc29mdGlmX25laWdoID0gc29mdGlmX25laWdoX2dldF9zZWxlY3RlZChzb2Z0aWZfbmVpZ2hfdmlkKTsKKworCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc29mdGlmX25laWdoLCBub2RlX3RtcCwKKwkJCQkJICZzb2Z0aWZfbmVpZ2hfdmlkLT5zb2Z0aWZfbmVpZ2hfbGlzdCwKKwkJCQkJIGxpc3QpIHsKKwkJCWxhc3Rfc2Vlbl9zZWNzID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0KKwkJCQkJCXNvZnRpZl9uZWlnaC0+bGFzdF9zZWVuKSAvIDEwMDA7CisJCQlsYXN0X3NlZW5fbXNlY3MgPSBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLQorCQkJCQkJc29mdGlmX25laWdoLT5sYXN0X3NlZW4pICUgMTAwMDsKKwkJCXNlcV9wcmludGYoc2VxLCAiJXMgJXBNICAlM2kuJTAzaXNcbiIsCisJCQkJICAgY3Vycl9zb2Z0aWZfbmVpZ2ggPT0gc29mdGlmX25laWdoCisJCQkJICAgPyAiPT4iIDogIiAgIiwgc29mdGlmX25laWdoLT5hZGRyLAorCQkJCSAgIGxhc3Rfc2Vlbl9zZWNzLCBsYXN0X3NlZW5fbXNlY3MpOworCQl9CisKKwkJaWYgKGN1cnJfc29mdGlmX25laWdoKQorCQkJc29mdGlmX25laWdoX2ZyZWVfcmVmKGN1cnJfc29mdGlmX25laWdoKTsKKworCQlzZXFfcHJpbnRmKHNlcSwgIlxuIik7CisJfQogCXJjdV9yZWFkX3VubG9jaygpOwogCi0JcmV0dXJuIDA7CitvdXQ6CisJaWYgKHByaW1hcnlfaWYpCisJCWhhcmRpZl9mcmVlX3JlZihwcmltYXJ5X2lmKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHNvZnRpZl9uZWlnaF9wdXJnZShzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KQoreworCXN0cnVjdCBzb2Z0aWZfbmVpZ2ggKnNvZnRpZl9uZWlnaCwgKmN1cnJfc29mdGlmX25laWdoOworCXN0cnVjdCBzb2Z0aWZfbmVpZ2hfdmlkICpzb2Z0aWZfbmVpZ2hfdmlkOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlLCAqbm9kZV90bXAsICpub2RlX3RtcDI7CisJY2hhciBkb19kZXNlbGVjdDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc29mdGlmX25laWdoX3ZpZCwgbm9kZSwKKwkJCQkgJmJhdF9wcml2LT5zb2Z0aWZfbmVpZ2hfdmlkcywgbGlzdCkgeworCQlpZiAoIWF0b21pY19pbmNfbm90X3plcm8oJnNvZnRpZl9uZWlnaF92aWQtPnJlZmNvdW50KSkKKwkJCWNvbnRpbnVlOworCisJCWN1cnJfc29mdGlmX25laWdoID0gc29mdGlmX25laWdoX2dldF9zZWxlY3RlZChzb2Z0aWZfbmVpZ2hfdmlkKTsKKwkJZG9fZGVzZWxlY3QgPSAwOworCisJCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPnNvZnRpZl9uZWlnaF9sb2NrKTsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzb2Z0aWZfbmVpZ2gsIG5vZGVfdG1wLCBub2RlX3RtcDIsCisJCQkJCSAgJnNvZnRpZl9uZWlnaF92aWQtPnNvZnRpZl9uZWlnaF9saXN0LAorCQkJCQkgIGxpc3QpIHsKKwkJCWlmICgoIXRpbWVfYWZ0ZXIoamlmZmllcywgc29mdGlmX25laWdoLT5sYXN0X3NlZW4gKworCQkJCW1zZWNzX3RvX2ppZmZpZXMoU09GVElGX05FSUdIX1RJTUVPVVQpKSkgJiYKKwkJCSAgICAoYXRvbWljX3JlYWQoJmJhdF9wcml2LT5tZXNoX3N0YXRlKSA9PSBNRVNIX0FDVElWRSkpCisJCQkJY29udGludWU7CisKKwkJCWlmIChjdXJyX3NvZnRpZl9uZWlnaCA9PSBzb2Z0aWZfbmVpZ2gpIHsKKwkJCQliYXRfZGJnKERCR19ST1VURVMsIGJhdF9wcml2LAorCQkJCQkiQ3VycmVudCBtZXNoIGV4aXQgcG9pbnQgb24gdmlkOiAlZCAiCisJCQkJCSInJXBNJyB2YW5pc2hlZC5cbiIsCisJCQkJCXNvZnRpZl9uZWlnaF92aWQtPnZpZCwKKwkJCQkJc29mdGlmX25laWdoLT5hZGRyKTsKKwkJCQlkb19kZXNlbGVjdCA9IDE7CisJCQl9CisKKwkJCWhsaXN0X2RlbF9yY3UoJnNvZnRpZl9uZWlnaC0+bGlzdCk7CisJCQlzb2Z0aWZfbmVpZ2hfZnJlZV9yZWYoc29mdGlmX25laWdoKTsKKwkJfQorCQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPnNvZnRpZl9uZWlnaF9sb2NrKTsKKworCQkvKiBzb2Z0X25laWdoX3ZpZF9kZXNlbGVjdCgpIG5lZWRzIHRvIGFjcXVpcmUgdGhlCisJCSAqIHNvZnRpZl9uZWlnaF9sb2NrICovCisJCWlmIChkb19kZXNlbGVjdCkKKwkJCXNvZnRpZl9uZWlnaF92aWRfZGVzZWxlY3QoYmF0X3ByaXYsIHNvZnRpZl9uZWlnaF92aWQpOworCisJCWlmIChjdXJyX3NvZnRpZl9uZWlnaCkKKwkJCXNvZnRpZl9uZWlnaF9mcmVlX3JlZihjdXJyX3NvZnRpZl9uZWlnaCk7CisKKwkJc29mdGlmX25laWdoX3ZpZF9mcmVlX3JlZihzb2Z0aWZfbmVpZ2hfdmlkKTsKKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5zb2Z0aWZfbmVpZ2hfdmlkX2xvY2spOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc29mdGlmX25laWdoX3ZpZCwgbm9kZSwgbm9kZV90bXAsCisJCQkJICAmYmF0X3ByaXYtPnNvZnRpZl9uZWlnaF92aWRzLCBsaXN0KSB7CisJCWlmICghaGxpc3RfZW1wdHkoJnNvZnRpZl9uZWlnaF92aWQtPnNvZnRpZl9uZWlnaF9saXN0KSkKKwkJCWNvbnRpbnVlOworCisJCWhsaXN0X2RlbF9yY3UoJnNvZnRpZl9uZWlnaF92aWQtPmxpc3QpOworCQlzb2Z0aWZfbmVpZ2hfdmlkX2ZyZWVfcmVmKHNvZnRpZl9uZWlnaF92aWQpOworCX0KKwlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPnNvZnRpZl9uZWlnaF92aWRfbG9jayk7CisKIH0KIAogc3RhdGljIHZvaWQgc29mdGlmX2JhdG1hbl9yZWN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC0xOTAsNyArNDQ1LDkgQEAKIAlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgZXRoaGRyICpldGhoZHIgPSAoc3RydWN0IGV0aGhkciAqKXNrYi0+ZGF0YTsKIAlzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldDsKLQlzdHJ1Y3Qgc29mdGlmX25laWdoICpzb2Z0aWZfbmVpZ2gsICpzb2Z0aWZfbmVpZ2hfdG1wOworCXN0cnVjdCBzb2Z0aWZfbmVpZ2ggKnNvZnRpZl9uZWlnaCA9IE5VTEw7CisJc3RydWN0IGhhcmRfaWZhY2UgKnByaW1hcnlfaWYgPSBOVUxMOworCXN0cnVjdCBzb2Z0aWZfbmVpZ2ggKmN1cnJfc29mdGlmX25laWdoID0gTlVMTDsKIAogCWlmIChudG9ocyhldGhoZHItPmhfcHJvdG8pID09IEVUSF9QXzgwMjFRKQogCQliYXRtYW5fcGFja2V0ID0gKHN0cnVjdCBiYXRtYW5fcGFja2V0ICopCkBAIC0xOTksNjMgKzQ1Niw1MiBAQAogCQliYXRtYW5fcGFja2V0ID0gKHN0cnVjdCBiYXRtYW5fcGFja2V0ICopKHNrYi0+ZGF0YSArIEVUSF9ITEVOKTsKIAogCWlmIChiYXRtYW5fcGFja2V0LT52ZXJzaW9uICE9IENPTVBBVF9WRVJTSU9OKQotCQlnb3RvIGVycjsKKwkJZ290byBvdXQ7CiAKIAlpZiAoYmF0bWFuX3BhY2tldC0+cGFja2V0X3R5cGUgIT0gQkFUX1BBQ0tFVCkKLQkJZ290byBlcnI7CisJCWdvdG8gb3V0OwogCiAJaWYgKCEoYmF0bWFuX3BhY2tldC0+ZmxhZ3MgJiBQUklNQVJJRVNfRklSU1RfSE9QKSkKLQkJZ290byBlcnI7CisJCWdvdG8gb3V0OwogCiAJaWYgKGlzX215X21hYyhiYXRtYW5fcGFja2V0LT5vcmlnKSkKLQkJZ290byBlcnI7CisJCWdvdG8gb3V0OwogCiAJc29mdGlmX25laWdoID0gc29mdGlmX25laWdoX2dldChiYXRfcHJpdiwgYmF0bWFuX3BhY2tldC0+b3JpZywgdmlkKTsKLQogCWlmICghc29mdGlmX25laWdoKQotCQlnb3RvIGVycjsKKwkJZ290byBvdXQ7CiAKLQlpZiAoYmF0X3ByaXYtPnNvZnRpZl9uZWlnaCA9PSBzb2Z0aWZfbmVpZ2gpCisJY3Vycl9zb2Z0aWZfbmVpZ2ggPSBzb2Z0aWZfbmVpZ2hfdmlkX2dldF9zZWxlY3RlZChiYXRfcHJpdiwgdmlkKTsKKwlpZiAoY3Vycl9zb2Z0aWZfbmVpZ2ggPT0gc29mdGlmX25laWdoKQorCQlnb3RvIG91dDsKKworCXByaW1hcnlfaWYgPSBwcmltYXJ5X2lmX2dldF9zZWxlY3RlZChiYXRfcHJpdik7CisJaWYgKCFwcmltYXJ5X2lmKQogCQlnb3RvIG91dDsKIAogCS8qIHdlIGdvdCBhIG5laWdoYm9yIGJ1dCBpdHMgbWFjIGlzICdiaWdnZXInIHRoYW4gb3VycyAgKi8KLQlpZiAobWVtY21wKGJhdF9wcml2LT5wcmltYXJ5X2lmLT5uZXRfZGV2LT5kZXZfYWRkciwKKwlpZiAobWVtY21wKHByaW1hcnlfaWYtPm5ldF9kZXYtPmRldl9hZGRyLAogCQkgICBzb2Z0aWZfbmVpZ2gtPmFkZHIsIEVUSF9BTEVOKSA8IDApCiAJCWdvdG8gb3V0OwogCi0JLyogc3dpdGNoIHRvIG5ldyAnc21hbGxlc3QgbmVpZ2hib3InICovCi0JaWYgKChiYXRfcHJpdi0+c29mdGlmX25laWdoKSAmJgotCSAgICAobWVtY21wKHNvZnRpZl9uZWlnaC0+YWRkciwgYmF0X3ByaXYtPnNvZnRpZl9uZWlnaC0+YWRkciwKLQkJCQkJCQlFVEhfQUxFTikgPCAwKSkgewotCQliYXRfZGJnKERCR19ST1VURVMsIGJhdF9wcml2LAotCQkJIkNoYW5naW5nIG1lc2ggZXhpdCBwb2ludCBmcm9tICVwTSAodmlkOiAlZCkgIgotCQkJInRvICVwTSAodmlkOiAlZCkuXG4iLAotCQkJIGJhdF9wcml2LT5zb2Z0aWZfbmVpZ2gtPmFkZHIsCi0JCQkgYmF0X3ByaXYtPnNvZnRpZl9uZWlnaC0+dmlkLAotCQkJIHNvZnRpZl9uZWlnaC0+YWRkciwgc29mdGlmX25laWdoLT52aWQpOwotCQlzb2Z0aWZfbmVpZ2hfdG1wID0gYmF0X3ByaXYtPnNvZnRpZl9uZWlnaDsKLQkJYmF0X3ByaXYtPnNvZnRpZl9uZWlnaCA9IHNvZnRpZl9uZWlnaDsKLQkJc29mdGlmX25laWdoX2ZyZWVfcmVmKHNvZnRpZl9uZWlnaF90bXApOwotCQkvKiB3ZSBuZWVkIHRvIGhvbGQgdGhlIGFkZGl0aW9uYWwgcmVmZXJlbmNlICovCi0JCWdvdG8gZXJyOworCS8qIGNsb3NlIG93biBiYXRYIGRldmljZSBhbmQgdXNlIHNvZnRpZl9uZWlnaCBhcyBleGl0IG5vZGUgKi8KKwlpZiAoIWN1cnJfc29mdGlmX25laWdoKSB7CisJCXNvZnRpZl9uZWlnaF92aWRfc2VsZWN0KGJhdF9wcml2LCBzb2Z0aWZfbmVpZ2gsIHZpZCk7CisJCWdvdG8gb3V0OwogCX0KIAotCS8qIGNsb3NlIG93biBiYXRYIGRldmljZSBhbmQgdXNlIHNvZnRpZl9uZWlnaCBhcyBleGl0IG5vZGUgKi8KLQlpZiAoKCFiYXRfcHJpdi0+c29mdGlmX25laWdoKSAmJgotCSAgICAobWVtY21wKHNvZnRpZl9uZWlnaC0+YWRkciwKLQkJICAgIGJhdF9wcml2LT5wcmltYXJ5X2lmLT5uZXRfZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pIDwgMCkpIHsKLQkJYmF0X2RiZyhEQkdfUk9VVEVTLCBiYXRfcHJpdiwKLQkJCSJTZXR0aW5nIG1lc2ggZXhpdCBwb2ludCB0byAlcE0gKHZpZDogJWQpLlxuIiwKLQkJCXNvZnRpZl9uZWlnaC0+YWRkciwgc29mdGlmX25laWdoLT52aWQpOwotCQliYXRfcHJpdi0+c29mdGlmX25laWdoID0gc29mdGlmX25laWdoOwotCQkvKiB3ZSBuZWVkIHRvIGhvbGQgdGhlIGFkZGl0aW9uYWwgcmVmZXJlbmNlICovCi0JCWdvdG8gZXJyOwotCX0KKwkvKiBzd2l0Y2ggdG8gbmV3ICdzbWFsbGVzdCBuZWlnaGJvcicgKi8KKwlpZiAobWVtY21wKHNvZnRpZl9uZWlnaC0+YWRkciwgY3Vycl9zb2Z0aWZfbmVpZ2gtPmFkZHIsIEVUSF9BTEVOKSA8IDApCisJCXNvZnRpZl9uZWlnaF92aWRfc2VsZWN0KGJhdF9wcml2LCBzb2Z0aWZfbmVpZ2gsIHZpZCk7CiAKIG91dDoKLQlzb2Z0aWZfbmVpZ2hfZnJlZV9yZWYoc29mdGlmX25laWdoKTsKLWVycjoKIAlrZnJlZV9za2Ioc2tiKTsKKwlpZiAoc29mdGlmX25laWdoKQorCQlzb2Z0aWZfbmVpZ2hfZnJlZV9yZWYoc29mdGlmX25laWdoKTsKKwlpZiAoY3Vycl9zb2Z0aWZfbmVpZ2gpCisJCXNvZnRpZl9uZWlnaF9mcmVlX3JlZihjdXJyX3NvZnRpZl9uZWlnaCk7CisJaWYgKHByaW1hcnlfaWYpCisJCWhhcmRpZl9mcmVlX3JlZihwcmltYXJ5X2lmKTsKIAlyZXR1cm47CiB9CiAKQEAgLTI4NSwxMSArNTMxLDExIEBACiAJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItPnNhX2RhdGEpKQogCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CiAKLQkvKiBvbmx5IG1vZGlmeSBobmEtdGFibGUgaWYgaXQgaGFzIGJlZW4gaW5pdGlhbGlzZWQgYmVmb3JlICovCisJLyogb25seSBtb2RpZnkgdHJhbnN0YWJsZSBpZiBpdCBoYXMgYmVlbiBpbml0aWFsaXNlZCBiZWZvcmUgKi8KIAlpZiAoYXRvbWljX3JlYWQoJmJhdF9wcml2LT5tZXNoX3N0YXRlKSA9PSBNRVNIX0FDVElWRSkgewotCQlobmFfbG9jYWxfcmVtb3ZlKGJhdF9wcml2LCBkZXYtPmRldl9hZGRyLAorCQl0dF9sb2NhbF9yZW1vdmUoYmF0X3ByaXYsIGRldi0+ZGV2X2FkZHIsCiAJCQkJICJtYWMgYWRkcmVzcyBjaGFuZ2VkIik7Ci0JCWhuYV9sb2NhbF9hZGQoZGV2LCBhZGRyLT5zYV9kYXRhKTsKKwkJdHRfbG9jYWxfYWRkKGRldiwgYWRkci0+c2FfZGF0YSk7CiAJfQogCiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIEVUSF9BTEVOKTsKQEAgLTMxMSw4ICs1NTcsMTAgQEAKIHsKIAlzdHJ1Y3QgZXRoaGRyICpldGhoZHIgPSAoc3RydWN0IGV0aGhkciAqKXNrYi0+ZGF0YTsKIAlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoc29mdF9pZmFjZSk7CisJc3RydWN0IGhhcmRfaWZhY2UgKnByaW1hcnlfaWYgPSBOVUxMOwogCXN0cnVjdCBiY2FzdF9wYWNrZXQgKmJjYXN0X3BhY2tldDsKIAlzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZoZHI7CisJc3RydWN0IHNvZnRpZl9uZWlnaCAqY3Vycl9zb2Z0aWZfbmVpZ2ggPSBOVUxMOwogCWludCBkYXRhX2xlbiA9IHNrYi0+bGVuLCByZXQ7CiAJc2hvcnQgdmlkID0gLTE7CiAJYm9vbCBkb19iY2FzdCA9IGZhbHNlOwpAQCAtMzQwLDExICs1ODgsMTIgQEAKIAkgKiBpZiB3ZSBoYXZlIGEgYW5vdGhlciBjaG9zZW4gbWVzaCBleGl0IG5vZGUgaW4gcmFuZ2UKIAkgKiBpdCB3aWxsIHRyYW5zcG9ydCB0aGUgcGFja2V0cyB0byB0aGUgbWVzaAogCSAqLwotCWlmICgoYmF0X3ByaXYtPnNvZnRpZl9uZWlnaCkgJiYgKGJhdF9wcml2LT5zb2Z0aWZfbmVpZ2gtPnZpZCA9PSB2aWQpKQorCWN1cnJfc29mdGlmX25laWdoID0gc29mdGlmX25laWdoX3ZpZF9nZXRfc2VsZWN0ZWQoYmF0X3ByaXYsIHZpZCk7CisJaWYgKGN1cnJfc29mdGlmX25laWdoKQogCQlnb3RvIGRyb3BwZWQ7CiAKIAkvKiBUT0RPOiBjaGVjayB0aGlzIGZvciBsb2NrcyAqLwotCWhuYV9sb2NhbF9hZGQoc29mdF9pZmFjZSwgZXRoaGRyLT5oX3NvdXJjZSk7CisJdHRfbG9jYWxfYWRkKHNvZnRfaWZhY2UsIGV0aGhkci0+aF9zb3VyY2UpOwogCiAJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGV0aGhkci0+aF9kZXN0KSkgewogCQlyZXQgPSBnd19pc190YXJnZXQoYmF0X3ByaXYsIHNrYik7CkBAIC0zNTgsNyArNjA3LDggQEAKIAogCS8qIGV0aGVybmV0IHBhY2tldCBzaG91bGQgYmUgYnJvYWRjYXN0ZWQgKi8KIAlpZiAoZG9fYmNhc3QpIHsKLQkJaWYgKCFiYXRfcHJpdi0+cHJpbWFyeV9pZikKKwkJcHJpbWFyeV9pZiA9IHByaW1hcnlfaWZfZ2V0X3NlbGVjdGVkKGJhdF9wcml2KTsKKwkJaWYgKCFwcmltYXJ5X2lmKQogCQkJZ290byBkcm9wcGVkOwogCiAJCWlmIChteV9za2JfaGVhZF9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBiY2FzdF9wYWNrZXQpKSA8IDApCkBAIC0zNzQsNyArNjI0LDcgQEAKIAkJLyogaHcgYWRkcmVzcyBvZiBmaXJzdCBpbnRlcmZhY2UgaXMgdGhlIG9yaWcgbWFjIGJlY2F1c2Ugb25seQogCQkgKiB0aGlzIG1hYyBpcyBrbm93biB0aHJvdWdob3V0IHRoZSBtZXNoICovCiAJCW1lbWNweShiY2FzdF9wYWNrZXQtPm9yaWcsCi0JCSAgICAgICBiYXRfcHJpdi0+cHJpbWFyeV9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwkJICAgICAgIHByaW1hcnlfaWYtPm5ldF9kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CiAKIAkJLyogc2V0IGJyb2FkY2FzdCBzZXF1ZW5jZSBudW1iZXIgKi8KIAkJYmNhc3RfcGFja2V0LT5zZXFubyA9CkBAIC00MDIsNiArNjUyLDEwIEBACiBkcm9wcGVkX2ZyZWVkOgogCWJhdF9wcml2LT5zdGF0cy50eF9kcm9wcGVkKys7CiBlbmQ6CisJaWYgKGN1cnJfc29mdGlmX25laWdoKQorCQlzb2Z0aWZfbmVpZ2hfZnJlZV9yZWYoY3Vycl9zb2Z0aWZfbmVpZ2gpOworCWlmIChwcmltYXJ5X2lmKQorCQloYXJkaWZfZnJlZV9yZWYocHJpbWFyeV9pZik7CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIApAQCAtNDEzLDYgKzY2Nyw3IEBACiAJc3RydWN0IHVuaWNhc3RfcGFja2V0ICp1bmljYXN0X3BhY2tldDsKIAlzdHJ1Y3QgZXRoaGRyICpldGhoZHI7CiAJc3RydWN0IHZsYW5fZXRoaGRyICp2aGRyOworCXN0cnVjdCBzb2Z0aWZfbmVpZ2ggKmN1cnJfc29mdGlmX25laWdoID0gTlVMTDsKIAlzaG9ydCB2aWQgPSAtMTsKIAlpbnQgcmV0OwogCkBAIC00NDIsNyArNjk3LDggQEAKIAkgKiBpZiB3ZSBoYXZlIGEgYW5vdGhlciBjaG9zZW4gbWVzaCBleGl0IG5vZGUgaW4gcmFuZ2UKIAkgKiBpdCB3aWxsIHRyYW5zcG9ydCB0aGUgcGFja2V0cyB0byB0aGUgbm9uLW1lc2ggbmV0d29yawogCSAqLwotCWlmICgoYmF0X3ByaXYtPnNvZnRpZl9uZWlnaCkgJiYgKGJhdF9wcml2LT5zb2Z0aWZfbmVpZ2gtPnZpZCA9PSB2aWQpKSB7CisJY3Vycl9zb2Z0aWZfbmVpZ2ggPSBzb2Z0aWZfbmVpZ2hfdmlkX2dldF9zZWxlY3RlZChiYXRfcHJpdiwgdmlkKTsKKwlpZiAoY3Vycl9zb2Z0aWZfbmVpZ2gpIHsKIAkJc2tiX3B1c2goc2tiLCBoZHJfc2l6ZSk7CiAJCXVuaWNhc3RfcGFja2V0ID0gKHN0cnVjdCB1bmljYXN0X3BhY2tldCAqKXNrYi0+ZGF0YTsKIApAQCAtNDUzLDcgKzcwOSw3IEBACiAJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAKIAkJbWVtY3B5KHVuaWNhc3RfcGFja2V0LT5kZXN0LAotCQkgICAgICAgYmF0X3ByaXYtPnNvZnRpZl9uZWlnaC0+YWRkciwgRVRIX0FMRU4pOworCQkgICAgICAgY3Vycl9zb2Z0aWZfbmVpZ2gtPmFkZHIsIEVUSF9BTEVOKTsKIAkJcmV0ID0gcm91dGVfdW5pY2FzdF9wYWNrZXQoc2tiLCByZWN2X2lmKTsKIAkJaWYgKHJldCA9PSBORVRfUlhfRFJPUCkKIAkJCWdvdG8gZHJvcHBlZDsKQEAgLTQ3OCwxMSArNzM0LDEzIEBACiAJc29mdF9pZmFjZS0+bGFzdF9yeCA9IGppZmZpZXM7CiAKIAluZXRpZl9yeChza2IpOwotCXJldHVybjsKKwlnb3RvIG91dDsKIAogZHJvcHBlZDoKIAlrZnJlZV9za2Ioc2tiKTsKIG91dDoKKwlpZiAoY3Vycl9zb2Z0aWZfbmVpZ2gpCisJCXNvZnRpZl9uZWlnaF9mcmVlX3JlZihjdXJyX3NvZnRpZl9uZWlnaCk7CiAJcmV0dXJuOwogfQogCkBAIC01MTYsMTQgKzc3NCwxNSBAQAogCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaW50ZXJmYWNlX3R4OwogI2VuZGlmCiAJZGV2LT5kZXN0cnVjdG9yID0gZnJlZV9uZXRkZXY7CisJZGV2LT50eF9xdWV1ZV9sZW4gPSAwOwogCiAJLyoqCiAJICogY2FuJ3QgY2FsbCBtaW5fbXR1LCBiZWNhdXNlIHRoZSBuZWVkZWQgdmFyaWFibGVzCiAJICogaGF2ZSBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXQKIAkgKi8KIAlkZXYtPm10dSA9IEVUSF9EQVRBX0xFTjsKLQlkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IEJBVF9IRUFERVJfTEVOOyAvKiByZXNlcnZlIG1vcmUgc3BhY2UgaW4gdGhlCi0JCQkJCQkqIHNrYnVmZiBmb3Igb3VyIGhlYWRlciAqLworCS8qIHJlc2VydmUgbW9yZSBzcGFjZSBpbiB0aGUgc2tidWZmIGZvciBvdXIgaGVhZGVyICovCisJZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSBCQVRfSEVBREVSX0xFTjsKIAogCS8qIGdlbmVyYXRlIHJhbmRvbSBhZGRyZXNzICovCiAJcmFuZG9tX2V0aGVyX2FkZHIoZGV2X2FkZHIpOwpAQCAtNTQ4LDcgKzgwNyw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldCA9IHJlZ2lzdGVyX25ldGRldihzb2Z0X2lmYWNlKTsKKwlyZXQgPSByZWdpc3Rlcl9uZXRkZXZpY2Uoc29mdF9pZmFjZSk7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJfZXJyKCJVbmFibGUgdG8gcmVnaXN0ZXIgdGhlIGJhdG1hbiBpbnRlcmZhY2UgJyVzJzogJWlcbiIsCiAJCSAgICAgICBuYW1lLCByZXQpOwpAQCAtNTcyLDExICs4MzEsMTAgQEAKIAogCWF0b21pY19zZXQoJmJhdF9wcml2LT5tZXNoX3N0YXRlLCBNRVNIX0lOQUNUSVZFKTsKIAlhdG9taWNfc2V0KCZiYXRfcHJpdi0+YmNhc3Rfc2Vxbm8sIDEpOwotCWF0b21pY19zZXQoJmJhdF9wcml2LT5obmFfbG9jYWxfY2hhbmdlZCwgMCk7CisJYXRvbWljX3NldCgmYmF0X3ByaXYtPnR0X2xvY2FsX2NoYW5nZWQsIDApOwogCiAJYmF0X3ByaXYtPnByaW1hcnlfaWYgPSBOVUxMOwogCWJhdF9wcml2LT5udW1faWZhY2VzID0gMDsKLQliYXRfcHJpdi0+c29mdGlmX25laWdoID0gTlVMTDsKIAogCXJldCA9IHN5c2ZzX2FkZF9tZXNoaWYoc29mdF9pZmFjZSk7CiAJaWYgKHJldCA8IDApCkBAIC02MzIsNyArODkwLDcgQEAKIHsKIAljbWQtPnN1cHBvcnRlZCA9IDA7CiAJY21kLT5hZHZlcnRpc2luZyA9IDA7Ci0JY21kLT5zcGVlZCA9IFNQRUVEXzEwOworCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIFNQRUVEXzEwKTsKIAljbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOwogCWNtZC0+cG9ydCA9IFBPUlRfVFA7CiAJY21kLT5waHlfYWRkcmVzcyA9IDA7CkBAIC02NjcsMTIgKzkyNSwzIEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyB1MzIgYmF0X2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYmF0X3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCXJldHVybiAtRU9QTk9UU1VQUDsKLX0KZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMgYi9uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jCmluZGV4IDhkMTViNDguLjdiNzI5NjYgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMKKysrIGIvbmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYwpAQCAtMjIsNDMgKzIyLDQ0IEBACiAjaW5jbHVkZSAibWFpbi5oIgogI2luY2x1ZGUgInRyYW5zbGF0aW9uLXRhYmxlLmgiCiAjaW5jbHVkZSAic29mdC1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJoYXJkLWludGVyZmFjZS5oIgogI2luY2x1ZGUgImhhc2guaCIKICNpbmNsdWRlICJvcmlnaW5hdG9yLmgiCiAKLXN0YXRpYyB2b2lkIGhuYV9sb2NhbF9wdXJnZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotc3RhdGljIHZvaWQgX2huYV9nbG9iYWxfZGVsX29yaWcoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKLQkJCQkgc3RydWN0IGhuYV9nbG9iYWxfZW50cnkgKmhuYV9nbG9iYWxfZW50cnksCitzdGF0aWMgdm9pZCB0dF9sb2NhbF9wdXJnZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworc3RhdGljIHZvaWQgX3R0X2dsb2JhbF9kZWxfb3JpZyhzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAorCQkJCSBzdHJ1Y3QgdHRfZ2xvYmFsX2VudHJ5ICp0dF9nbG9iYWxfZW50cnksCiAJCQkJIGNoYXIgKm1lc3NhZ2UpOwogCiAvKiByZXR1cm5zIDEgaWYgdGhleSBhcmUgdGhlIHNhbWUgbWFjIGFkZHIgKi8KLXN0YXRpYyBpbnQgY29tcGFyZV9saG5hKHN0cnVjdCBobGlzdF9ub2RlICpub2RlLCB2b2lkICpkYXRhMikKK3N0YXRpYyBpbnQgY29tcGFyZV9sdHQoc3RydWN0IGhsaXN0X25vZGUgKm5vZGUsIHZvaWQgKmRhdGEyKQogewotCXZvaWQgKmRhdGExID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBobmFfbG9jYWxfZW50cnksIGhhc2hfZW50cnkpOworCXZvaWQgKmRhdGExID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCB0dF9sb2NhbF9lbnRyeSwgaGFzaF9lbnRyeSk7CiAKIAlyZXR1cm4gKG1lbWNtcChkYXRhMSwgZGF0YTIsIEVUSF9BTEVOKSA9PSAwID8gMSA6IDApOwogfQogCiAvKiByZXR1cm5zIDEgaWYgdGhleSBhcmUgdGhlIHNhbWUgbWFjIGFkZHIgKi8KLXN0YXRpYyBpbnQgY29tcGFyZV9naG5hKHN0cnVjdCBobGlzdF9ub2RlICpub2RlLCB2b2lkICpkYXRhMikKK3N0YXRpYyBpbnQgY29tcGFyZV9ndHQoc3RydWN0IGhsaXN0X25vZGUgKm5vZGUsIHZvaWQgKmRhdGEyKQogewotCXZvaWQgKmRhdGExID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBobmFfZ2xvYmFsX2VudHJ5LCBoYXNoX2VudHJ5KTsKKwl2b2lkICpkYXRhMSA9IGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgdHRfZ2xvYmFsX2VudHJ5LCBoYXNoX2VudHJ5KTsKIAogCXJldHVybiAobWVtY21wKGRhdGExLCBkYXRhMiwgRVRIX0FMRU4pID09IDAgPyAxIDogMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGhuYV9sb2NhbF9zdGFydF90aW1lcihzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KQorc3RhdGljIHZvaWQgdHRfbG9jYWxfc3RhcnRfdGltZXIoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdikKIHsKLQlJTklUX0RFTEFZRURfV09SSygmYmF0X3ByaXYtPmhuYV93b3JrLCBobmFfbG9jYWxfcHVyZ2UpOwotCXF1ZXVlX2RlbGF5ZWRfd29yayhiYXRfZXZlbnRfd29ya3F1ZXVlLCAmYmF0X3ByaXYtPmhuYV93b3JrLCAxMCAqIEhaKTsKKwlJTklUX0RFTEFZRURfV09SSygmYmF0X3ByaXYtPnR0X3dvcmssIHR0X2xvY2FsX3B1cmdlKTsKKwlxdWV1ZV9kZWxheWVkX3dvcmsoYmF0X2V2ZW50X3dvcmtxdWV1ZSwgJmJhdF9wcml2LT50dF93b3JrLCAxMCAqIEhaKTsKIH0KIAotc3RhdGljIHN0cnVjdCBobmFfbG9jYWxfZW50cnkgKmhuYV9sb2NhbF9oYXNoX2ZpbmQoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKK3N0YXRpYyBzdHJ1Y3QgdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsX2hhc2hfZmluZChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAogCQkJCQkJICAgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgaGFzaHRhYmxlX3QgKmhhc2ggPSBiYXRfcHJpdi0+aG5hX2xvY2FsX2hhc2g7CisJc3RydWN0IGhhc2h0YWJsZV90ICpoYXNoID0gYmF0X3ByaXYtPnR0X2xvY2FsX2hhc2g7CiAJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0Jc3RydWN0IGhuYV9sb2NhbF9lbnRyeSAqaG5hX2xvY2FsX2VudHJ5LCAqaG5hX2xvY2FsX2VudHJ5X3RtcCA9IE5VTEw7CisJc3RydWN0IHR0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeSwgKnR0X2xvY2FsX2VudHJ5X3RtcCA9IE5VTEw7CiAJaW50IGluZGV4OwogCiAJaWYgKCFoYXNoKQpAQCAtNjgsMjYgKzY5LDI2IEBACiAJaGVhZCA9ICZoYXNoLT50YWJsZVtpbmRleF07CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGhuYV9sb2NhbF9lbnRyeSwgbm9kZSwgaGVhZCwgaGFzaF9lbnRyeSkgewotCQlpZiAoIWNvbXBhcmVfZXRoKGhuYV9sb2NhbF9lbnRyeSwgZGF0YSkpCisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHR0X2xvY2FsX2VudHJ5LCBub2RlLCBoZWFkLCBoYXNoX2VudHJ5KSB7CisJCWlmICghY29tcGFyZV9ldGgodHRfbG9jYWxfZW50cnksIGRhdGEpKQogCQkJY29udGludWU7CiAKLQkJaG5hX2xvY2FsX2VudHJ5X3RtcCA9IGhuYV9sb2NhbF9lbnRyeTsKKwkJdHRfbG9jYWxfZW50cnlfdG1wID0gdHRfbG9jYWxfZW50cnk7CiAJCWJyZWFrOwogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKIAotCXJldHVybiBobmFfbG9jYWxfZW50cnlfdG1wOworCXJldHVybiB0dF9sb2NhbF9lbnRyeV90bXA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaG5hX2dsb2JhbF9lbnRyeSAqaG5hX2dsb2JhbF9oYXNoX2ZpbmQoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKK3N0YXRpYyBzdHJ1Y3QgdHRfZ2xvYmFsX2VudHJ5ICp0dF9nbG9iYWxfaGFzaF9maW5kKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCiAJCQkJCQkgICAgIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGhhc2h0YWJsZV90ICpoYXNoID0gYmF0X3ByaXYtPmhuYV9nbG9iYWxfaGFzaDsKKwlzdHJ1Y3QgaGFzaHRhYmxlX3QgKmhhc2ggPSBiYXRfcHJpdi0+dHRfZ2xvYmFsX2hhc2g7CiAJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0Jc3RydWN0IGhuYV9nbG9iYWxfZW50cnkgKmhuYV9nbG9iYWxfZW50cnk7Ci0Jc3RydWN0IGhuYV9nbG9iYWxfZW50cnkgKmhuYV9nbG9iYWxfZW50cnlfdG1wID0gTlVMTDsKKwlzdHJ1Y3QgdHRfZ2xvYmFsX2VudHJ5ICp0dF9nbG9iYWxfZW50cnk7CisJc3RydWN0IHR0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsX2VudHJ5X3RtcCA9IE5VTEw7CiAJaW50IGluZGV4OwogCiAJaWYgKCFoYXNoKQpAQCAtOTcsMTI1ICs5OCwxMjUgQEAKIAloZWFkID0gJmhhc2gtPnRhYmxlW2luZGV4XTsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaG5hX2dsb2JhbF9lbnRyeSwgbm9kZSwgaGVhZCwgaGFzaF9lbnRyeSkgewotCQlpZiAoIWNvbXBhcmVfZXRoKGhuYV9nbG9iYWxfZW50cnksIGRhdGEpKQorCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0dF9nbG9iYWxfZW50cnksIG5vZGUsIGhlYWQsIGhhc2hfZW50cnkpIHsKKwkJaWYgKCFjb21wYXJlX2V0aCh0dF9nbG9iYWxfZW50cnksIGRhdGEpKQogCQkJY29udGludWU7CiAKLQkJaG5hX2dsb2JhbF9lbnRyeV90bXAgPSBobmFfZ2xvYmFsX2VudHJ5OworCQl0dF9nbG9iYWxfZW50cnlfdG1wID0gdHRfZ2xvYmFsX2VudHJ5OwogCQlicmVhazsKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQlyZXR1cm4gaG5hX2dsb2JhbF9lbnRyeV90bXA7CisJcmV0dXJuIHR0X2dsb2JhbF9lbnRyeV90bXA7CiB9CiAKLWludCBobmFfbG9jYWxfaW5pdChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KQoraW50IHR0X2xvY2FsX2luaXQoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdikKIHsKLQlpZiAoYmF0X3ByaXYtPmhuYV9sb2NhbF9oYXNoKQorCWlmIChiYXRfcHJpdi0+dHRfbG9jYWxfaGFzaCkKIAkJcmV0dXJuIDE7CiAKLQliYXRfcHJpdi0+aG5hX2xvY2FsX2hhc2ggPSBoYXNoX25ldygxMDI0KTsKKwliYXRfcHJpdi0+dHRfbG9jYWxfaGFzaCA9IGhhc2hfbmV3KDEwMjQpOwogCi0JaWYgKCFiYXRfcHJpdi0+aG5hX2xvY2FsX2hhc2gpCisJaWYgKCFiYXRfcHJpdi0+dHRfbG9jYWxfaGFzaCkKIAkJcmV0dXJuIDA7CiAKLQlhdG9taWNfc2V0KCZiYXRfcHJpdi0+aG5hX2xvY2FsX2NoYW5nZWQsIDApOwotCWhuYV9sb2NhbF9zdGFydF90aW1lcihiYXRfcHJpdik7CisJYXRvbWljX3NldCgmYmF0X3ByaXYtPnR0X2xvY2FsX2NoYW5nZWQsIDApOworCXR0X2xvY2FsX3N0YXJ0X3RpbWVyKGJhdF9wcml2KTsKIAogCXJldHVybiAxOwogfQogCi12b2lkIGhuYV9sb2NhbF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKnNvZnRfaWZhY2UsIHVpbnQ4X3QgKmFkZHIpCit2b2lkIHR0X2xvY2FsX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqc29mdF9pZmFjZSwgdWludDhfdCAqYWRkcikKIHsKIAlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoc29mdF9pZmFjZSk7Ci0Jc3RydWN0IGhuYV9sb2NhbF9lbnRyeSAqaG5hX2xvY2FsX2VudHJ5OwotCXN0cnVjdCBobmFfZ2xvYmFsX2VudHJ5ICpobmFfZ2xvYmFsX2VudHJ5OworCXN0cnVjdCB0dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnk7CisJc3RydWN0IHR0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsX2VudHJ5OwogCWludCByZXF1aXJlZF9ieXRlczsKIAotCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPmhuYV9saGFzaF9sb2NrKTsKLQlobmFfbG9jYWxfZW50cnkgPSBobmFfbG9jYWxfaGFzaF9maW5kKGJhdF9wcml2LCBhZGRyKTsKLQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPmhuYV9saGFzaF9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT50dF9saGFzaF9sb2NrKTsKKwl0dF9sb2NhbF9lbnRyeSA9IHR0X2xvY2FsX2hhc2hfZmluZChiYXRfcHJpdiwgYWRkcik7CisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT50dF9saGFzaF9sb2NrKTsKIAotCWlmIChobmFfbG9jYWxfZW50cnkpIHsKLQkJaG5hX2xvY2FsX2VudHJ5LT5sYXN0X3NlZW4gPSBqaWZmaWVzOworCWlmICh0dF9sb2NhbF9lbnRyeSkgeworCQl0dF9sb2NhbF9lbnRyeS0+bGFzdF9zZWVuID0gamlmZmllczsKIAkJcmV0dXJuOwogCX0KIAogCS8qIG9ubHkgYW5ub3VuY2UgYXMgbWFueSBob3N0cyBhcyBwb3NzaWJsZSBpbiB0aGUgYmF0bWFuLXBhY2tldCBhbmQKLQkgICBzcGFjZSBpbiBiYXRtYW5fcGFja2V0LT5udW1faG5hIFRoYXQgYWxzbyBzaG91bGQgZ2l2ZSBhIGxpbWl0IHRvCisJICAgc3BhY2UgaW4gYmF0bWFuX3BhY2tldC0+bnVtX3R0IFRoYXQgYWxzbyBzaG91bGQgZ2l2ZSBhIGxpbWl0IHRvCiAJICAgTUFDLWZsb29kaW5nLiAqLwotCXJlcXVpcmVkX2J5dGVzID0gKGJhdF9wcml2LT5udW1fbG9jYWxfaG5hICsgMSkgKiBFVEhfQUxFTjsKKwlyZXF1aXJlZF9ieXRlcyA9IChiYXRfcHJpdi0+bnVtX2xvY2FsX3R0ICsgMSkgKiBFVEhfQUxFTjsKIAlyZXF1aXJlZF9ieXRlcyArPSBCQVRfUEFDS0VUX0xFTjsKIAogCWlmICgocmVxdWlyZWRfYnl0ZXMgPiBFVEhfREFUQV9MRU4pIHx8CiAJICAgIChhdG9taWNfcmVhZCgmYmF0X3ByaXYtPmFnZ3JlZ2F0ZWRfb2dtcykgJiYKIAkgICAgIHJlcXVpcmVkX2J5dGVzID4gTUFYX0FHR1JFR0FUSU9OX0JZVEVTKSB8fAotCSAgICAoYmF0X3ByaXYtPm51bV9sb2NhbF9obmEgKyAxID4gMjU1KSkgeworCSAgICAoYmF0X3ByaXYtPm51bV9sb2NhbF90dCArIDEgPiAyNTUpKSB7CiAJCWJhdF9kYmcoREJHX1JPVVRFUywgYmF0X3ByaXYsCi0JCQkiQ2FuJ3QgYWRkIG5ldyBsb2NhbCBobmEgZW50cnkgKCVwTSk6ICIKLQkJCSJudW1iZXIgb2YgbG9jYWwgaG5hIGVudHJpZXMgZXhjZWVkcyBwYWNrZXQgc2l6ZVxuIiwKKwkJCSJDYW4ndCBhZGQgbmV3IGxvY2FsIHR0IGVudHJ5ICglcE0pOiAiCisJCQkibnVtYmVyIG9mIGxvY2FsIHR0IGVudHJpZXMgZXhjZWVkcyBwYWNrZXQgc2l6ZVxuIiwKIAkJCWFkZHIpOwogCQlyZXR1cm47CiAJfQogCiAJYmF0X2RiZyhEQkdfUk9VVEVTLCBiYXRfcHJpdiwKLQkJIkNyZWF0aW5nIG5ldyBsb2NhbCBobmEgZW50cnk6ICVwTVxuIiwgYWRkcik7CisJCSJDcmVhdGluZyBuZXcgbG9jYWwgdHQgZW50cnk6ICVwTVxuIiwgYWRkcik7CiAKLQlobmFfbG9jYWxfZW50cnkgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaG5hX2xvY2FsX2VudHJ5KSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFobmFfbG9jYWxfZW50cnkpCisJdHRfbG9jYWxfZW50cnkgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdHRfbG9jYWxfZW50cnkpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXR0X2xvY2FsX2VudHJ5KQogCQlyZXR1cm47CiAKLQltZW1jcHkoaG5hX2xvY2FsX2VudHJ5LT5hZGRyLCBhZGRyLCBFVEhfQUxFTik7Ci0JaG5hX2xvY2FsX2VudHJ5LT5sYXN0X3NlZW4gPSBqaWZmaWVzOworCW1lbWNweSh0dF9sb2NhbF9lbnRyeS0+YWRkciwgYWRkciwgRVRIX0FMRU4pOworCXR0X2xvY2FsX2VudHJ5LT5sYXN0X3NlZW4gPSBqaWZmaWVzOwogCiAJLyogdGhlIGJhdG1hbiBpbnRlcmZhY2UgbWFjIGFkZHJlc3Mgc2hvdWxkIG5ldmVyIGJlIHB1cmdlZCAqLwogCWlmIChjb21wYXJlX2V0aChhZGRyLCBzb2Z0X2lmYWNlLT5kZXZfYWRkcikpCi0JCWhuYV9sb2NhbF9lbnRyeS0+bmV2ZXJfcHVyZ2UgPSAxOworCQl0dF9sb2NhbF9lbnRyeS0+bmV2ZXJfcHVyZ2UgPSAxOwogCWVsc2UKLQkJaG5hX2xvY2FsX2VudHJ5LT5uZXZlcl9wdXJnZSA9IDA7CisJCXR0X2xvY2FsX2VudHJ5LT5uZXZlcl9wdXJnZSA9IDA7CiAKLQlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5obmFfbGhhc2hfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+dHRfbGhhc2hfbG9jayk7CiAKLQloYXNoX2FkZChiYXRfcHJpdi0+aG5hX2xvY2FsX2hhc2gsIGNvbXBhcmVfbGhuYSwgY2hvb3NlX29yaWcsCi0JCSBobmFfbG9jYWxfZW50cnksICZobmFfbG9jYWxfZW50cnktPmhhc2hfZW50cnkpOwotCWJhdF9wcml2LT5udW1fbG9jYWxfaG5hKys7Ci0JYXRvbWljX3NldCgmYmF0X3ByaXYtPmhuYV9sb2NhbF9jaGFuZ2VkLCAxKTsKKwloYXNoX2FkZChiYXRfcHJpdi0+dHRfbG9jYWxfaGFzaCwgY29tcGFyZV9sdHQsIGNob29zZV9vcmlnLAorCQkgdHRfbG9jYWxfZW50cnksICZ0dF9sb2NhbF9lbnRyeS0+aGFzaF9lbnRyeSk7CisJYmF0X3ByaXYtPm51bV9sb2NhbF90dCsrOworCWF0b21pY19zZXQoJmJhdF9wcml2LT50dF9sb2NhbF9jaGFuZ2VkLCAxKTsKIAotCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+aG5hX2xoYXNoX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+dHRfbGhhc2hfbG9jayk7CiAKIAkvKiByZW1vdmUgYWRkcmVzcyBmcm9tIGdsb2JhbCBoYXNoIGlmIHByZXNlbnQgKi8KLQlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5obmFfZ2hhc2hfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+dHRfZ2hhc2hfbG9jayk7CiAKLQlobmFfZ2xvYmFsX2VudHJ5ID0gaG5hX2dsb2JhbF9oYXNoX2ZpbmQoYmF0X3ByaXYsIGFkZHIpOworCXR0X2dsb2JhbF9lbnRyeSA9IHR0X2dsb2JhbF9oYXNoX2ZpbmQoYmF0X3ByaXYsIGFkZHIpOwogCi0JaWYgKGhuYV9nbG9iYWxfZW50cnkpCi0JCV9obmFfZ2xvYmFsX2RlbF9vcmlnKGJhdF9wcml2LCBobmFfZ2xvYmFsX2VudHJ5LAotCQkJCSAgICAgImxvY2FsIGhuYSByZWNlaXZlZCIpOworCWlmICh0dF9nbG9iYWxfZW50cnkpCisJCV90dF9nbG9iYWxfZGVsX29yaWcoYmF0X3ByaXYsIHR0X2dsb2JhbF9lbnRyeSwKKwkJCQkgICAgICJsb2NhbCB0dCByZWNlaXZlZCIpOwogCi0Jc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5obmFfZ2hhc2hfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT50dF9naGFzaF9sb2NrKTsKIH0KIAotaW50IGhuYV9sb2NhbF9maWxsX2J1ZmZlcihzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAoraW50IHR0X2xvY2FsX2ZpbGxfYnVmZmVyKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCiAJCQkgIHVuc2lnbmVkIGNoYXIgKmJ1ZmYsIGludCBidWZmX2xlbikKIHsKLQlzdHJ1Y3QgaGFzaHRhYmxlX3QgKmhhc2ggPSBiYXRfcHJpdi0+aG5hX2xvY2FsX2hhc2g7Ci0Jc3RydWN0IGhuYV9sb2NhbF9lbnRyeSAqaG5hX2xvY2FsX2VudHJ5OworCXN0cnVjdCBoYXNodGFibGVfdCAqaGFzaCA9IGJhdF9wcml2LT50dF9sb2NhbF9oYXNoOworCXN0cnVjdCB0dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnk7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CiAJaW50IGksIGNvdW50ID0gMDsKIAotCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPmhuYV9saGFzaF9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT50dF9saGFzaF9sb2NrKTsKIAogCWZvciAoaSA9IDA7IGkgPCBoYXNoLT5zaXplOyBpKyspIHsKIAkJaGVhZCA9ICZoYXNoLT50YWJsZVtpXTsKIAogCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShobmFfbG9jYWxfZW50cnksIG5vZGUsCisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0dF9sb2NhbF9lbnRyeSwgbm9kZSwKIAkJCQkJIGhlYWQsIGhhc2hfZW50cnkpIHsKIAkJCWlmIChidWZmX2xlbiA8IChjb3VudCArIDEpICogRVRIX0FMRU4pCiAJCQkJYnJlYWs7CiAKLQkJCW1lbWNweShidWZmICsgKGNvdW50ICogRVRIX0FMRU4pLCBobmFfbG9jYWxfZW50cnktPmFkZHIsCisJCQltZW1jcHkoYnVmZiArIChjb3VudCAqIEVUSF9BTEVOKSwgdHRfbG9jYWxfZW50cnktPmFkZHIsCiAJCQkgICAgICAgRVRIX0FMRU4pOwogCiAJCQljb3VudCsrOwpAQCAtMjIzLDM3ICsyMjQsNDcgQEAKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQogCi0JLyogaWYgd2UgZGlkIG5vdCBnZXQgYWxsIG5ldyBsb2NhbCBobmFzIHNlZSB5b3UgbmV4dCB0aW1lICA7LSkgKi8KLQlpZiAoY291bnQgPT0gYmF0X3ByaXYtPm51bV9sb2NhbF9obmEpCi0JCWF0b21pY19zZXQoJmJhdF9wcml2LT5obmFfbG9jYWxfY2hhbmdlZCwgMCk7CisJLyogaWYgd2UgZGlkIG5vdCBnZXQgYWxsIG5ldyBsb2NhbCB0dHMgc2VlIHlvdSBuZXh0IHRpbWUgIDstKSAqLworCWlmIChjb3VudCA9PSBiYXRfcHJpdi0+bnVtX2xvY2FsX3R0KQorCQlhdG9taWNfc2V0KCZiYXRfcHJpdi0+dHRfbG9jYWxfY2hhbmdlZCwgMCk7CiAKLQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPmhuYV9saGFzaF9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPnR0X2xoYXNoX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIAotaW50IGhuYV9sb2NhbF9zZXFfcHJpbnRfdGV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQoraW50IHR0X2xvY2FsX3NlcV9wcmludF90ZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilzZXEtPnByaXZhdGU7CiAJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KG5ldF9kZXYpOwotCXN0cnVjdCBoYXNodGFibGVfdCAqaGFzaCA9IGJhdF9wcml2LT5obmFfbG9jYWxfaGFzaDsKLQlzdHJ1Y3QgaG5hX2xvY2FsX2VudHJ5ICpobmFfbG9jYWxfZW50cnk7CisJc3RydWN0IGhhc2h0YWJsZV90ICpoYXNoID0gYmF0X3ByaXYtPnR0X2xvY2FsX2hhc2g7CisJc3RydWN0IHR0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeTsKKwlzdHJ1Y3QgaGFyZF9pZmFjZSAqcHJpbWFyeV9pZjsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKIAlzaXplX3QgYnVmX3NpemUsIHBvczsKIAljaGFyICpidWZmOwotCWludCBpOworCWludCBpLCByZXQgPSAwOwogCi0JaWYgKCFiYXRfcHJpdi0+cHJpbWFyeV9pZikgewotCQlyZXR1cm4gc2VxX3ByaW50ZihzZXEsICJCQVRNQU4gbWVzaCAlcyBkaXNhYmxlZCAtICIKLQkJCSAgICAgICAicGxlYXNlIHNwZWNpZnkgaW50ZXJmYWNlcyB0byBlbmFibGUgaXRcbiIsCi0JCQkgICAgICAgbmV0X2Rldi0+bmFtZSk7CisJcHJpbWFyeV9pZiA9IHByaW1hcnlfaWZfZ2V0X3NlbGVjdGVkKGJhdF9wcml2KTsKKwlpZiAoIXByaW1hcnlfaWYpIHsKKwkJcmV0ID0gc2VxX3ByaW50ZihzZXEsICJCQVRNQU4gbWVzaCAlcyBkaXNhYmxlZCAtICIKKwkJCQkgInBsZWFzZSBzcGVjaWZ5IGludGVyZmFjZXMgdG8gZW5hYmxlIGl0XG4iLAorCQkJCSBuZXRfZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHByaW1hcnlfaWYtPmlmX3N0YXR1cyAhPSBJRl9BQ1RJVkUpIHsKKwkJcmV0ID0gc2VxX3ByaW50ZihzZXEsICJCQVRNQU4gbWVzaCAlcyBkaXNhYmxlZCAtICIKKwkJCQkgInByaW1hcnkgaW50ZXJmYWNlIG5vdCBhY3RpdmVcbiIsCisJCQkJIG5ldF9kZXYtPm5hbWUpOworCQlnb3RvIG91dDsKIAl9CiAKIAlzZXFfcHJpbnRmKHNlcSwgIkxvY2FsbHkgcmV0cmlldmVkIGFkZHJlc3NlcyAoZnJvbSAlcykgIgotCQkgICAiYW5ub3VuY2VkIHZpYSBITkE6XG4iLAorCQkgICAiYW5ub3VuY2VkIHZpYSBUVDpcbiIsCiAJCSAgIG5ldF9kZXYtPm5hbWUpOwogCi0Jc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+aG5hX2xoYXNoX2xvY2spOworCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPnR0X2xoYXNoX2xvY2spOwogCiAJYnVmX3NpemUgPSAxOwogCS8qIEVzdGltYXRlIGxlbmd0aCBmb3I6ICIgKiB4eDp4eDp4eDp4eDp4eDp4eFxuIiAqLwpAQCAtMjY4LDggKzI3OSw5IEBACiAKIAlidWZmID0ga21hbGxvYyhidWZfc2l6ZSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFidWZmKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+aG5hX2xoYXNoX2xvY2spOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT50dF9saGFzaF9sb2NrKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CiAJfQogCiAJYnVmZlswXSA9ICdcMCc7CkBAIC0yNzksMjExICsyOTEsMjI1IEBACiAJCWhlYWQgPSAmaGFzaC0+dGFibGVbaV07CiAKIAkJcmN1X3JlYWRfbG9jaygpOwotCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaG5hX2xvY2FsX2VudHJ5LCBub2RlLAorCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodHRfbG9jYWxfZW50cnksIG5vZGUsCiAJCQkJCSBoZWFkLCBoYXNoX2VudHJ5KSB7CiAJCQlwb3MgKz0gc25wcmludGYoYnVmZiArIHBvcywgMjIsICIgKiAlcE1cbiIsCi0JCQkJCWhuYV9sb2NhbF9lbnRyeS0+YWRkcik7CisJCQkJCXR0X2xvY2FsX2VudHJ5LT5hZGRyKTsKIAkJfQogCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CiAKLQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPmhuYV9saGFzaF9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPnR0X2xoYXNoX2xvY2spOwogCiAJc2VxX3ByaW50ZihzZXEsICIlcyIsIGJ1ZmYpOwogCWtmcmVlKGJ1ZmYpOwotCXJldHVybiAwOworb3V0OgorCWlmIChwcmltYXJ5X2lmKQorCQloYXJkaWZfZnJlZV9yZWYocHJpbWFyeV9pZik7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgX2huYV9sb2NhbF9kZWwoc3RydWN0IGhsaXN0X25vZGUgKm5vZGUsIHZvaWQgKmFyZykKK3N0YXRpYyB2b2lkIF90dF9sb2NhbF9kZWwoc3RydWN0IGhsaXN0X25vZGUgKm5vZGUsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gKHN0cnVjdCBiYXRfcHJpdiAqKWFyZzsKLQl2b2lkICpkYXRhID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBobmFfbG9jYWxfZW50cnksIGhhc2hfZW50cnkpOworCXZvaWQgKmRhdGEgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IHR0X2xvY2FsX2VudHJ5LCBoYXNoX2VudHJ5KTsKIAogCWtmcmVlKGRhdGEpOwotCWJhdF9wcml2LT5udW1fbG9jYWxfaG5hLS07Ci0JYXRvbWljX3NldCgmYmF0X3ByaXYtPmhuYV9sb2NhbF9jaGFuZ2VkLCAxKTsKKwliYXRfcHJpdi0+bnVtX2xvY2FsX3R0LS07CisJYXRvbWljX3NldCgmYmF0X3ByaXYtPnR0X2xvY2FsX2NoYW5nZWQsIDEpOwogfQogCi1zdGF0aWMgdm9pZCBobmFfbG9jYWxfZGVsKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCi0JCQkgIHN0cnVjdCBobmFfbG9jYWxfZW50cnkgKmhuYV9sb2NhbF9lbnRyeSwKK3N0YXRpYyB2b2lkIHR0X2xvY2FsX2RlbChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAorCQkJICBzdHJ1Y3QgdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsX2VudHJ5LAogCQkJICBjaGFyICptZXNzYWdlKQogewotCWJhdF9kYmcoREJHX1JPVVRFUywgYmF0X3ByaXYsICJEZWxldGluZyBsb2NhbCBobmEgZW50cnkgKCVwTSk6ICVzXG4iLAotCQlobmFfbG9jYWxfZW50cnktPmFkZHIsIG1lc3NhZ2UpOworCWJhdF9kYmcoREJHX1JPVVRFUywgYmF0X3ByaXYsICJEZWxldGluZyBsb2NhbCB0dCBlbnRyeSAoJXBNKTogJXNcbiIsCisJCXR0X2xvY2FsX2VudHJ5LT5hZGRyLCBtZXNzYWdlKTsKIAotCWhhc2hfcmVtb3ZlKGJhdF9wcml2LT5obmFfbG9jYWxfaGFzaCwgY29tcGFyZV9saG5hLCBjaG9vc2Vfb3JpZywKLQkJICAgIGhuYV9sb2NhbF9lbnRyeS0+YWRkcik7Ci0JX2huYV9sb2NhbF9kZWwoJmhuYV9sb2NhbF9lbnRyeS0+aGFzaF9lbnRyeSwgYmF0X3ByaXYpOworCWhhc2hfcmVtb3ZlKGJhdF9wcml2LT50dF9sb2NhbF9oYXNoLCBjb21wYXJlX2x0dCwgY2hvb3NlX29yaWcsCisJCSAgICB0dF9sb2NhbF9lbnRyeS0+YWRkcik7CisJX3R0X2xvY2FsX2RlbCgmdHRfbG9jYWxfZW50cnktPmhhc2hfZW50cnksIGJhdF9wcml2KTsKIH0KIAotdm9pZCBobmFfbG9jYWxfcmVtb3ZlKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCit2b2lkIHR0X2xvY2FsX3JlbW92ZShzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAogCQkgICAgICB1aW50OF90ICphZGRyLCBjaGFyICptZXNzYWdlKQogewotCXN0cnVjdCBobmFfbG9jYWxfZW50cnkgKmhuYV9sb2NhbF9lbnRyeTsKKwlzdHJ1Y3QgdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsX2VudHJ5OwogCi0Jc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+aG5hX2xoYXNoX2xvY2spOworCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPnR0X2xoYXNoX2xvY2spOwogCi0JaG5hX2xvY2FsX2VudHJ5ID0gaG5hX2xvY2FsX2hhc2hfZmluZChiYXRfcHJpdiwgYWRkcik7CisJdHRfbG9jYWxfZW50cnkgPSB0dF9sb2NhbF9oYXNoX2ZpbmQoYmF0X3ByaXYsIGFkZHIpOwogCi0JaWYgKGhuYV9sb2NhbF9lbnRyeSkKLQkJaG5hX2xvY2FsX2RlbChiYXRfcHJpdiwgaG5hX2xvY2FsX2VudHJ5LCBtZXNzYWdlKTsKKwlpZiAodHRfbG9jYWxfZW50cnkpCisJCXR0X2xvY2FsX2RlbChiYXRfcHJpdiwgdHRfbG9jYWxfZW50cnksIG1lc3NhZ2UpOwogCi0Jc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5obmFfbGhhc2hfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT50dF9saGFzaF9sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgaG5hX2xvY2FsX3B1cmdlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3N0YXRpYyB2b2lkIHR0X2xvY2FsX3B1cmdlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrICpkZWxheWVkX3dvcmsgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayk7CiAJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9Ci0JCWNvbnRhaW5lcl9vZihkZWxheWVkX3dvcmssIHN0cnVjdCBiYXRfcHJpdiwgaG5hX3dvcmspOwotCXN0cnVjdCBoYXNodGFibGVfdCAqaGFzaCA9IGJhdF9wcml2LT5obmFfbG9jYWxfaGFzaDsKLQlzdHJ1Y3QgaG5hX2xvY2FsX2VudHJ5ICpobmFfbG9jYWxfZW50cnk7CisJCWNvbnRhaW5lcl9vZihkZWxheWVkX3dvcmssIHN0cnVjdCBiYXRfcHJpdiwgdHRfd29yayk7CisJc3RydWN0IGhhc2h0YWJsZV90ICpoYXNoID0gYmF0X3ByaXYtPnR0X2xvY2FsX2hhc2g7CisJc3RydWN0IHR0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeTsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKm5vZGVfdG1wOwogCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOwogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAlpbnQgaTsKIAotCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPmhuYV9saGFzaF9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT50dF9saGFzaF9sb2NrKTsKIAogCWZvciAoaSA9IDA7IGkgPCBoYXNoLT5zaXplOyBpKyspIHsKIAkJaGVhZCA9ICZoYXNoLT50YWJsZVtpXTsKIAotCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhuYV9sb2NhbF9lbnRyeSwgbm9kZSwgbm9kZV90bXAsCisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodHRfbG9jYWxfZW50cnksIG5vZGUsIG5vZGVfdG1wLAogCQkJCQkgIGhlYWQsIGhhc2hfZW50cnkpIHsKLQkJCWlmIChobmFfbG9jYWxfZW50cnktPm5ldmVyX3B1cmdlKQorCQkJaWYgKHR0X2xvY2FsX2VudHJ5LT5uZXZlcl9wdXJnZSkKIAkJCQljb250aW51ZTsKIAotCQkJdGltZW91dCA9IGhuYV9sb2NhbF9lbnRyeS0+bGFzdF9zZWVuOwotCQkJdGltZW91dCArPSBMT0NBTF9ITkFfVElNRU9VVCAqIEhaOworCQkJdGltZW91dCA9IHR0X2xvY2FsX2VudHJ5LT5sYXN0X3NlZW47CisJCQl0aW1lb3V0ICs9IFRUX0xPQ0FMX1RJTUVPVVQgKiBIWjsKIAogCQkJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKQogCQkJCWNvbnRpbnVlOwogCi0JCQlobmFfbG9jYWxfZGVsKGJhdF9wcml2LCBobmFfbG9jYWxfZW50cnksCisJCQl0dF9sb2NhbF9kZWwoYmF0X3ByaXYsIHR0X2xvY2FsX2VudHJ5LAogCQkJCSAgICAgICJhZGRyZXNzIHRpbWVkIG91dCIpOwogCQl9CiAJfQogCi0Jc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5obmFfbGhhc2hfbG9jayk7Ci0JaG5hX2xvY2FsX3N0YXJ0X3RpbWVyKGJhdF9wcml2KTsKKwlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPnR0X2xoYXNoX2xvY2spOworCXR0X2xvY2FsX3N0YXJ0X3RpbWVyKGJhdF9wcml2KTsKIH0KIAotdm9pZCBobmFfbG9jYWxfZnJlZShzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KQordm9pZCB0dF9sb2NhbF9mcmVlKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCiB7Ci0JaWYgKCFiYXRfcHJpdi0+aG5hX2xvY2FsX2hhc2gpCisJaWYgKCFiYXRfcHJpdi0+dHRfbG9jYWxfaGFzaCkKIAkJcmV0dXJuOwogCi0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZiYXRfcHJpdi0+aG5hX3dvcmspOwotCWhhc2hfZGVsZXRlKGJhdF9wcml2LT5obmFfbG9jYWxfaGFzaCwgX2huYV9sb2NhbF9kZWwsIGJhdF9wcml2KTsKLQliYXRfcHJpdi0+aG5hX2xvY2FsX2hhc2ggPSBOVUxMOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYmF0X3ByaXYtPnR0X3dvcmspOworCWhhc2hfZGVsZXRlKGJhdF9wcml2LT50dF9sb2NhbF9oYXNoLCBfdHRfbG9jYWxfZGVsLCBiYXRfcHJpdik7CisJYmF0X3ByaXYtPnR0X2xvY2FsX2hhc2ggPSBOVUxMOwogfQogCi1pbnQgaG5hX2dsb2JhbF9pbml0KHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCitpbnQgdHRfZ2xvYmFsX2luaXQoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdikKIHsKLQlpZiAoYmF0X3ByaXYtPmhuYV9nbG9iYWxfaGFzaCkKKwlpZiAoYmF0X3ByaXYtPnR0X2dsb2JhbF9oYXNoKQogCQlyZXR1cm4gMTsKIAotCWJhdF9wcml2LT5obmFfZ2xvYmFsX2hhc2ggPSBoYXNoX25ldygxMDI0KTsKKwliYXRfcHJpdi0+dHRfZ2xvYmFsX2hhc2ggPSBoYXNoX25ldygxMDI0KTsKIAotCWlmICghYmF0X3ByaXYtPmhuYV9nbG9iYWxfaGFzaCkKKwlpZiAoIWJhdF9wcml2LT50dF9nbG9iYWxfaGFzaCkKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gMTsKIH0KIAotdm9pZCBobmFfZ2xvYmFsX2FkZF9vcmlnKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCit2b2lkIHR0X2dsb2JhbF9hZGRfb3JpZyhzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAogCQkJIHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwKLQkJCSB1bnNpZ25lZCBjaGFyICpobmFfYnVmZiwgaW50IGhuYV9idWZmX2xlbikKKwkJCSB1bnNpZ25lZCBjaGFyICp0dF9idWZmLCBpbnQgdHRfYnVmZl9sZW4pCiB7Ci0Jc3RydWN0IGhuYV9nbG9iYWxfZW50cnkgKmhuYV9nbG9iYWxfZW50cnk7Ci0Jc3RydWN0IGhuYV9sb2NhbF9lbnRyeSAqaG5hX2xvY2FsX2VudHJ5OwotCWludCBobmFfYnVmZl9jb3VudCA9IDA7Ci0JdW5zaWduZWQgY2hhciAqaG5hX3B0cjsKKwlzdHJ1Y3QgdHRfZ2xvYmFsX2VudHJ5ICp0dF9nbG9iYWxfZW50cnk7CisJc3RydWN0IHR0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeTsKKwlpbnQgdHRfYnVmZl9jb3VudCA9IDA7CisJdW5zaWduZWQgY2hhciAqdHRfcHRyOwogCi0Jd2hpbGUgKChobmFfYnVmZl9jb3VudCArIDEpICogRVRIX0FMRU4gPD0gaG5hX2J1ZmZfbGVuKSB7Ci0JCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPmhuYV9naGFzaF9sb2NrKTsKKwl3aGlsZSAoKHR0X2J1ZmZfY291bnQgKyAxKSAqIEVUSF9BTEVOIDw9IHR0X2J1ZmZfbGVuKSB7CisJCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPnR0X2doYXNoX2xvY2spOwogCi0JCWhuYV9wdHIgPSBobmFfYnVmZiArIChobmFfYnVmZl9jb3VudCAqIEVUSF9BTEVOKTsKLQkJaG5hX2dsb2JhbF9lbnRyeSA9IGhuYV9nbG9iYWxfaGFzaF9maW5kKGJhdF9wcml2LCBobmFfcHRyKTsKKwkJdHRfcHRyID0gdHRfYnVmZiArICh0dF9idWZmX2NvdW50ICogRVRIX0FMRU4pOworCQl0dF9nbG9iYWxfZW50cnkgPSB0dF9nbG9iYWxfaGFzaF9maW5kKGJhdF9wcml2LCB0dF9wdHIpOwogCi0JCWlmICghaG5hX2dsb2JhbF9lbnRyeSkgewotCQkJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5obmFfZ2hhc2hfbG9jayk7CisJCWlmICghdHRfZ2xvYmFsX2VudHJ5KSB7CisJCQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPnR0X2doYXNoX2xvY2spOwogCi0JCQlobmFfZ2xvYmFsX2VudHJ5ID0KLQkJCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaG5hX2dsb2JhbF9lbnRyeSksCisJCQl0dF9nbG9iYWxfZW50cnkgPQorCQkJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0dF9nbG9iYWxfZW50cnkpLAogCQkJCQlHRlBfQVRPTUlDKTsKIAotCQkJaWYgKCFobmFfZ2xvYmFsX2VudHJ5KQorCQkJaWYgKCF0dF9nbG9iYWxfZW50cnkpCiAJCQkJYnJlYWs7CiAKLQkJCW1lbWNweShobmFfZ2xvYmFsX2VudHJ5LT5hZGRyLCBobmFfcHRyLCBFVEhfQUxFTik7CisJCQltZW1jcHkodHRfZ2xvYmFsX2VudHJ5LT5hZGRyLCB0dF9wdHIsIEVUSF9BTEVOKTsKIAogCQkJYmF0X2RiZyhEQkdfUk9VVEVTLCBiYXRfcHJpdiwKLQkJCQkiQ3JlYXRpbmcgbmV3IGdsb2JhbCBobmEgZW50cnk6ICIKKwkJCQkiQ3JlYXRpbmcgbmV3IGdsb2JhbCB0dCBlbnRyeTogIgogCQkJCSIlcE0gKHZpYSAlcE0pXG4iLAotCQkJCWhuYV9nbG9iYWxfZW50cnktPmFkZHIsIG9yaWdfbm9kZS0+b3JpZyk7CisJCQkJdHRfZ2xvYmFsX2VudHJ5LT5hZGRyLCBvcmlnX25vZGUtPm9yaWcpOwogCi0JCQlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5obmFfZ2hhc2hfbG9jayk7Ci0JCQloYXNoX2FkZChiYXRfcHJpdi0+aG5hX2dsb2JhbF9oYXNoLCBjb21wYXJlX2dobmEsCi0JCQkJIGNob29zZV9vcmlnLCBobmFfZ2xvYmFsX2VudHJ5LAotCQkJCSAmaG5hX2dsb2JhbF9lbnRyeS0+aGFzaF9lbnRyeSk7CisJCQlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT50dF9naGFzaF9sb2NrKTsKKwkJCWhhc2hfYWRkKGJhdF9wcml2LT50dF9nbG9iYWxfaGFzaCwgY29tcGFyZV9ndHQsCisJCQkJIGNob29zZV9vcmlnLCB0dF9nbG9iYWxfZW50cnksCisJCQkJICZ0dF9nbG9iYWxfZW50cnktPmhhc2hfZW50cnkpOwogCiAJCX0KIAotCQlobmFfZ2xvYmFsX2VudHJ5LT5vcmlnX25vZGUgPSBvcmlnX25vZGU7Ci0JCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+aG5hX2doYXNoX2xvY2spOworCQl0dF9nbG9iYWxfZW50cnktPm9yaWdfbm9kZSA9IG9yaWdfbm9kZTsKKwkJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT50dF9naGFzaF9sb2NrKTsKIAogCQkvKiByZW1vdmUgYWRkcmVzcyBmcm9tIGxvY2FsIGhhc2ggaWYgcHJlc2VudCAqLwotCQlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5obmFfbGhhc2hfbG9jayk7CisJCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPnR0X2xoYXNoX2xvY2spOwogCi0JCWhuYV9wdHIgPSBobmFfYnVmZiArIChobmFfYnVmZl9jb3VudCAqIEVUSF9BTEVOKTsKLQkJaG5hX2xvY2FsX2VudHJ5ID0gaG5hX2xvY2FsX2hhc2hfZmluZChiYXRfcHJpdiwgaG5hX3B0cik7CisJCXR0X3B0ciA9IHR0X2J1ZmYgKyAodHRfYnVmZl9jb3VudCAqIEVUSF9BTEVOKTsKKwkJdHRfbG9jYWxfZW50cnkgPSB0dF9sb2NhbF9oYXNoX2ZpbmQoYmF0X3ByaXYsIHR0X3B0cik7CiAKLQkJaWYgKGhuYV9sb2NhbF9lbnRyeSkKLQkJCWhuYV9sb2NhbF9kZWwoYmF0X3ByaXYsIGhuYV9sb2NhbF9lbnRyeSwKLQkJCQkgICAgICAiZ2xvYmFsIGhuYSByZWNlaXZlZCIpOworCQlpZiAodHRfbG9jYWxfZW50cnkpCisJCQl0dF9sb2NhbF9kZWwoYmF0X3ByaXYsIHR0X2xvY2FsX2VudHJ5LAorCQkJCSAgICAgICJnbG9iYWwgdHQgcmVjZWl2ZWQiKTsKIAotCQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPmhuYV9saGFzaF9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT50dF9saGFzaF9sb2NrKTsKIAotCQlobmFfYnVmZl9jb3VudCsrOworCQl0dF9idWZmX2NvdW50Kys7CiAJfQogCiAJLyogaW5pdGlhbGl6ZSwgYW5kIG92ZXJ3cml0ZSBpZiBtYWxsb2Mgc3VjY2VlZHMgKi8KLQlvcmlnX25vZGUtPmhuYV9idWZmID0gTlVMTDsKLQlvcmlnX25vZGUtPmhuYV9idWZmX2xlbiA9IDA7CisJb3JpZ19ub2RlLT50dF9idWZmID0gTlVMTDsKKwlvcmlnX25vZGUtPnR0X2J1ZmZfbGVuID0gMDsKIAotCWlmIChobmFfYnVmZl9sZW4gPiAwKSB7Ci0JCW9yaWdfbm9kZS0+aG5hX2J1ZmYgPSBrbWFsbG9jKGhuYV9idWZmX2xlbiwgR0ZQX0FUT01JQyk7Ci0JCWlmIChvcmlnX25vZGUtPmhuYV9idWZmKSB7Ci0JCQltZW1jcHkob3JpZ19ub2RlLT5obmFfYnVmZiwgaG5hX2J1ZmYsIGhuYV9idWZmX2xlbik7Ci0JCQlvcmlnX25vZGUtPmhuYV9idWZmX2xlbiA9IGhuYV9idWZmX2xlbjsKKwlpZiAodHRfYnVmZl9sZW4gPiAwKSB7CisJCW9yaWdfbm9kZS0+dHRfYnVmZiA9IGttYWxsb2ModHRfYnVmZl9sZW4sIEdGUF9BVE9NSUMpOworCQlpZiAob3JpZ19ub2RlLT50dF9idWZmKSB7CisJCQltZW1jcHkob3JpZ19ub2RlLT50dF9idWZmLCB0dF9idWZmLCB0dF9idWZmX2xlbik7CisJCQlvcmlnX25vZGUtPnR0X2J1ZmZfbGVuID0gdHRfYnVmZl9sZW47CiAJCX0KIAl9CiB9CiAKLWludCBobmFfZ2xvYmFsX3NlcV9wcmludF90ZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCitpbnQgdHRfZ2xvYmFsX3NlcV9wcmludF90ZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilzZXEtPnByaXZhdGU7CiAJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KG5ldF9kZXYpOwotCXN0cnVjdCBoYXNodGFibGVfdCAqaGFzaCA9IGJhdF9wcml2LT5obmFfZ2xvYmFsX2hhc2g7Ci0Jc3RydWN0IGhuYV9nbG9iYWxfZW50cnkgKmhuYV9nbG9iYWxfZW50cnk7CisJc3RydWN0IGhhc2h0YWJsZV90ICpoYXNoID0gYmF0X3ByaXYtPnR0X2dsb2JhbF9oYXNoOworCXN0cnVjdCB0dF9nbG9iYWxfZW50cnkgKnR0X2dsb2JhbF9lbnRyeTsKKwlzdHJ1Y3QgaGFyZF9pZmFjZSAqcHJpbWFyeV9pZjsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKIAlzaXplX3QgYnVmX3NpemUsIHBvczsKIAljaGFyICpidWZmOwotCWludCBpOworCWludCBpLCByZXQgPSAwOwogCi0JaWYgKCFiYXRfcHJpdi0+cHJpbWFyeV9pZikgewotCQlyZXR1cm4gc2VxX3ByaW50ZihzZXEsICJCQVRNQU4gbWVzaCAlcyBkaXNhYmxlZCAtICIKLQkJCQkgICJwbGVhc2Ugc3BlY2lmeSBpbnRlcmZhY2VzIHRvIGVuYWJsZSBpdFxuIiwKLQkJCQkgIG5ldF9kZXYtPm5hbWUpOworCXByaW1hcnlfaWYgPSBwcmltYXJ5X2lmX2dldF9zZWxlY3RlZChiYXRfcHJpdik7CisJaWYgKCFwcmltYXJ5X2lmKSB7CisJCXJldCA9IHNlcV9wcmludGYoc2VxLCAiQkFUTUFOIG1lc2ggJXMgZGlzYWJsZWQgLSBwbGVhc2UgIgorCQkJCSAic3BlY2lmeSBpbnRlcmZhY2VzIHRvIGVuYWJsZSBpdFxuIiwKKwkJCQkgbmV0X2Rldi0+bmFtZSk7CisJCWdvdG8gb3V0OwogCX0KIAotCXNlcV9wcmludGYoc2VxLCAiR2xvYmFsbHkgYW5ub3VuY2VkIEhOQXMgcmVjZWl2ZWQgdmlhIHRoZSBtZXNoICVzXG4iLAorCWlmIChwcmltYXJ5X2lmLT5pZl9zdGF0dXMgIT0gSUZfQUNUSVZFKSB7CisJCXJldCA9IHNlcV9wcmludGYoc2VxLCAiQkFUTUFOIG1lc2ggJXMgZGlzYWJsZWQgLSAiCisJCQkJICJwcmltYXJ5IGludGVyZmFjZSBub3QgYWN0aXZlXG4iLAorCQkJCSBuZXRfZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJc2VxX3ByaW50ZihzZXEsCisJCSAgICJHbG9iYWxseSBhbm5vdW5jZWQgVFQgZW50cmllcyByZWNlaXZlZCB2aWEgdGhlIG1lc2ggJXNcbiIsCiAJCSAgIG5ldF9kZXYtPm5hbWUpOwogCi0Jc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+aG5hX2doYXNoX2xvY2spOworCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPnR0X2doYXNoX2xvY2spOwogCiAJYnVmX3NpemUgPSAxOwogCS8qIEVzdGltYXRlIGxlbmd0aCBmb3I6ICIgKiB4eDp4eDp4eDp4eDp4eDp4eCB2aWEgeHg6eHg6eHg6eHg6eHg6eHhcbiIqLwpAQCAtNDk4LDggKzUyNCw5IEBACiAKIAlidWZmID0ga21hbGxvYyhidWZfc2l6ZSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFidWZmKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+aG5hX2doYXNoX2xvY2spOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT50dF9naGFzaF9sb2NrKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CiAJfQogCWJ1ZmZbMF0gPSAnXDAnOwogCXBvcyA9IDA7CkBAIC01MDgsMTAxICs1MzUsMTA0IEBACiAJCWhlYWQgPSAmaGFzaC0+dGFibGVbaV07CiAKIAkJcmN1X3JlYWRfbG9jaygpOwotCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaG5hX2dsb2JhbF9lbnRyeSwgbm9kZSwKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHR0X2dsb2JhbF9lbnRyeSwgbm9kZSwKIAkJCQkJIGhlYWQsIGhhc2hfZW50cnkpIHsKIAkJCXBvcyArPSBzbnByaW50ZihidWZmICsgcG9zLCA0NCwKIAkJCQkJIiAqICVwTSB2aWEgJXBNXG4iLAotCQkJCQlobmFfZ2xvYmFsX2VudHJ5LT5hZGRyLAotCQkJCQlobmFfZ2xvYmFsX2VudHJ5LT5vcmlnX25vZGUtPm9yaWcpOworCQkJCQl0dF9nbG9iYWxfZW50cnktPmFkZHIsCisJCQkJCXR0X2dsb2JhbF9lbnRyeS0+b3JpZ19ub2RlLT5vcmlnKTsKIAkJfQogCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CiAKLQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPmhuYV9naGFzaF9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPnR0X2doYXNoX2xvY2spOwogCiAJc2VxX3ByaW50ZihzZXEsICIlcyIsIGJ1ZmYpOwogCWtmcmVlKGJ1ZmYpOwotCXJldHVybiAwOworb3V0OgorCWlmIChwcmltYXJ5X2lmKQorCQloYXJkaWZfZnJlZV9yZWYocHJpbWFyeV9pZik7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgX2huYV9nbG9iYWxfZGVsX29yaWcoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKLQkJCQkgc3RydWN0IGhuYV9nbG9iYWxfZW50cnkgKmhuYV9nbG9iYWxfZW50cnksCitzdGF0aWMgdm9pZCBfdHRfZ2xvYmFsX2RlbF9vcmlnKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCisJCQkJIHN0cnVjdCB0dF9nbG9iYWxfZW50cnkgKnR0X2dsb2JhbF9lbnRyeSwKIAkJCQkgY2hhciAqbWVzc2FnZSkKIHsKIAliYXRfZGJnKERCR19ST1VURVMsIGJhdF9wcml2LAotCQkiRGVsZXRpbmcgZ2xvYmFsIGhuYSBlbnRyeSAlcE0gKHZpYSAlcE0pOiAlc1xuIiwKLQkJaG5hX2dsb2JhbF9lbnRyeS0+YWRkciwgaG5hX2dsb2JhbF9lbnRyeS0+b3JpZ19ub2RlLT5vcmlnLAorCQkiRGVsZXRpbmcgZ2xvYmFsIHR0IGVudHJ5ICVwTSAodmlhICVwTSk6ICVzXG4iLAorCQl0dF9nbG9iYWxfZW50cnktPmFkZHIsIHR0X2dsb2JhbF9lbnRyeS0+b3JpZ19ub2RlLT5vcmlnLAogCQltZXNzYWdlKTsKIAotCWhhc2hfcmVtb3ZlKGJhdF9wcml2LT5obmFfZ2xvYmFsX2hhc2gsIGNvbXBhcmVfZ2huYSwgY2hvb3NlX29yaWcsCi0JCSAgICBobmFfZ2xvYmFsX2VudHJ5LT5hZGRyKTsKLQlrZnJlZShobmFfZ2xvYmFsX2VudHJ5KTsKKwloYXNoX3JlbW92ZShiYXRfcHJpdi0+dHRfZ2xvYmFsX2hhc2gsIGNvbXBhcmVfZ3R0LCBjaG9vc2Vfb3JpZywKKwkJICAgIHR0X2dsb2JhbF9lbnRyeS0+YWRkcik7CisJa2ZyZWUodHRfZ2xvYmFsX2VudHJ5KTsKIH0KIAotdm9pZCBobmFfZ2xvYmFsX2RlbF9vcmlnKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCit2b2lkIHR0X2dsb2JhbF9kZWxfb3JpZyhzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAogCQkJIHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwgY2hhciAqbWVzc2FnZSkKIHsKLQlzdHJ1Y3QgaG5hX2dsb2JhbF9lbnRyeSAqaG5hX2dsb2JhbF9lbnRyeTsKLQlpbnQgaG5hX2J1ZmZfY291bnQgPSAwOwotCXVuc2lnbmVkIGNoYXIgKmhuYV9wdHI7CisJc3RydWN0IHR0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsX2VudHJ5OworCWludCB0dF9idWZmX2NvdW50ID0gMDsKKwl1bnNpZ25lZCBjaGFyICp0dF9wdHI7CiAKLQlpZiAob3JpZ19ub2RlLT5obmFfYnVmZl9sZW4gPT0gMCkKKwlpZiAob3JpZ19ub2RlLT50dF9idWZmX2xlbiA9PSAwKQogCQlyZXR1cm47CiAKLQlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5obmFfZ2hhc2hfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+dHRfZ2hhc2hfbG9jayk7CiAKLQl3aGlsZSAoKGhuYV9idWZmX2NvdW50ICsgMSkgKiBFVEhfQUxFTiA8PSBvcmlnX25vZGUtPmhuYV9idWZmX2xlbikgewotCQlobmFfcHRyID0gb3JpZ19ub2RlLT5obmFfYnVmZiArIChobmFfYnVmZl9jb3VudCAqIEVUSF9BTEVOKTsKLQkJaG5hX2dsb2JhbF9lbnRyeSA9IGhuYV9nbG9iYWxfaGFzaF9maW5kKGJhdF9wcml2LCBobmFfcHRyKTsKKwl3aGlsZSAoKHR0X2J1ZmZfY291bnQgKyAxKSAqIEVUSF9BTEVOIDw9IG9yaWdfbm9kZS0+dHRfYnVmZl9sZW4pIHsKKwkJdHRfcHRyID0gb3JpZ19ub2RlLT50dF9idWZmICsgKHR0X2J1ZmZfY291bnQgKiBFVEhfQUxFTik7CisJCXR0X2dsb2JhbF9lbnRyeSA9IHR0X2dsb2JhbF9oYXNoX2ZpbmQoYmF0X3ByaXYsIHR0X3B0cik7CiAKLQkJaWYgKChobmFfZ2xvYmFsX2VudHJ5KSAmJgotCQkgICAgKGhuYV9nbG9iYWxfZW50cnktPm9yaWdfbm9kZSA9PSBvcmlnX25vZGUpKQotCQkJX2huYV9nbG9iYWxfZGVsX29yaWcoYmF0X3ByaXYsIGhuYV9nbG9iYWxfZW50cnksCisJCWlmICgodHRfZ2xvYmFsX2VudHJ5KSAmJgorCQkgICAgKHR0X2dsb2JhbF9lbnRyeS0+b3JpZ19ub2RlID09IG9yaWdfbm9kZSkpCisJCQlfdHRfZ2xvYmFsX2RlbF9vcmlnKGJhdF9wcml2LCB0dF9nbG9iYWxfZW50cnksCiAJCQkJCSAgICAgbWVzc2FnZSk7CiAKLQkJaG5hX2J1ZmZfY291bnQrKzsKKwkJdHRfYnVmZl9jb3VudCsrOwogCX0KIAotCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+aG5hX2doYXNoX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+dHRfZ2hhc2hfbG9jayk7CiAKLQlvcmlnX25vZGUtPmhuYV9idWZmX2xlbiA9IDA7Ci0Ja2ZyZWUob3JpZ19ub2RlLT5obmFfYnVmZik7Ci0Jb3JpZ19ub2RlLT5obmFfYnVmZiA9IE5VTEw7CisJb3JpZ19ub2RlLT50dF9idWZmX2xlbiA9IDA7CisJa2ZyZWUob3JpZ19ub2RlLT50dF9idWZmKTsKKwlvcmlnX25vZGUtPnR0X2J1ZmYgPSBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBobmFfZ2xvYmFsX2RlbChzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgdm9pZCAqYXJnKQorc3RhdGljIHZvaWQgdHRfZ2xvYmFsX2RlbChzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgdm9pZCAqYXJnKQogewotCXZvaWQgKmRhdGEgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGhuYV9nbG9iYWxfZW50cnksIGhhc2hfZW50cnkpOworCXZvaWQgKmRhdGEgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IHR0X2dsb2JhbF9lbnRyeSwgaGFzaF9lbnRyeSk7CiAKIAlrZnJlZShkYXRhKTsKIH0KIAotdm9pZCBobmFfZ2xvYmFsX2ZyZWUoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdikKK3ZvaWQgdHRfZ2xvYmFsX2ZyZWUoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdikKIHsKLQlpZiAoIWJhdF9wcml2LT5obmFfZ2xvYmFsX2hhc2gpCisJaWYgKCFiYXRfcHJpdi0+dHRfZ2xvYmFsX2hhc2gpCiAJCXJldHVybjsKIAotCWhhc2hfZGVsZXRlKGJhdF9wcml2LT5obmFfZ2xvYmFsX2hhc2gsIGhuYV9nbG9iYWxfZGVsLCBOVUxMKTsKLQliYXRfcHJpdi0+aG5hX2dsb2JhbF9oYXNoID0gTlVMTDsKKwloYXNoX2RlbGV0ZShiYXRfcHJpdi0+dHRfZ2xvYmFsX2hhc2gsIHR0X2dsb2JhbF9kZWwsIE5VTEwpOworCWJhdF9wcml2LT50dF9nbG9iYWxfaGFzaCA9IE5VTEw7CiB9CiAKIHN0cnVjdCBvcmlnX25vZGUgKnRyYW5zdGFibGVfc2VhcmNoKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsIHVpbnQ4X3QgKmFkZHIpCiB7Ci0Jc3RydWN0IGhuYV9nbG9iYWxfZW50cnkgKmhuYV9nbG9iYWxfZW50cnk7CisJc3RydWN0IHR0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsX2VudHJ5OwogCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSA9IE5VTEw7CiAKLQlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5obmFfZ2hhc2hfbG9jayk7Ci0JaG5hX2dsb2JhbF9lbnRyeSA9IGhuYV9nbG9iYWxfaGFzaF9maW5kKGJhdF9wcml2LCBhZGRyKTsKKwlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT50dF9naGFzaF9sb2NrKTsKKwl0dF9nbG9iYWxfZW50cnkgPSB0dF9nbG9iYWxfaGFzaF9maW5kKGJhdF9wcml2LCBhZGRyKTsKIAotCWlmICghaG5hX2dsb2JhbF9lbnRyeSkKKwlpZiAoIXR0X2dsb2JhbF9lbnRyeSkKIAkJZ290byBvdXQ7CiAKLQlpZiAoIWF0b21pY19pbmNfbm90X3plcm8oJmhuYV9nbG9iYWxfZW50cnktPm9yaWdfbm9kZS0+cmVmY291bnQpKQorCWlmICghYXRvbWljX2luY19ub3RfemVybygmdHRfZ2xvYmFsX2VudHJ5LT5vcmlnX25vZGUtPnJlZmNvdW50KSkKIAkJZ290byBvdXQ7CiAKLQlvcmlnX25vZGUgPSBobmFfZ2xvYmFsX2VudHJ5LT5vcmlnX25vZGU7CisJb3JpZ19ub2RlID0gdHRfZ2xvYmFsX2VudHJ5LT5vcmlnX25vZGU7CiAKIG91dDoKLQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPmhuYV9naGFzaF9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPnR0X2doYXNoX2xvY2spOwogCXJldHVybiBvcmlnX25vZGU7CiB9CmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5oIGIvbmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuaAppbmRleCBmMTk5MzFjLi40NjE1MmMzIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5oCisrKyBiL25ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmgKQEAgLTIyLDIyICsyMiwyMiBAQAogI2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfVFJBTlNMQVRJT05fVEFCTEVfSF8KICNkZWZpbmUgX05FVF9CQVRNQU5fQURWX1RSQU5TTEFUSU9OX1RBQkxFX0hfCiAKLWludCBobmFfbG9jYWxfaW5pdChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KTsKLXZvaWQgaG5hX2xvY2FsX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqc29mdF9pZmFjZSwgdWludDhfdCAqYWRkcik7Ci12b2lkIGhuYV9sb2NhbF9yZW1vdmUoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKK2ludCB0dF9sb2NhbF9pbml0KHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpOwordm9pZCB0dF9sb2NhbF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKnNvZnRfaWZhY2UsIHVpbnQ4X3QgKmFkZHIpOwordm9pZCB0dF9sb2NhbF9yZW1vdmUoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKIAkJICAgICAgdWludDhfdCAqYWRkciwgY2hhciAqbWVzc2FnZSk7Ci1pbnQgaG5hX2xvY2FsX2ZpbGxfYnVmZmVyKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCitpbnQgdHRfbG9jYWxfZmlsbF9idWZmZXIoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKIAkJCSAgdW5zaWduZWQgY2hhciAqYnVmZiwgaW50IGJ1ZmZfbGVuKTsKLWludCBobmFfbG9jYWxfc2VxX3ByaW50X3RleHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCk7Ci12b2lkIGhuYV9sb2NhbF9mcmVlKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpOwotaW50IGhuYV9nbG9iYWxfaW5pdChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KTsKLXZvaWQgaG5hX2dsb2JhbF9hZGRfb3JpZyhzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAoraW50IHR0X2xvY2FsX3NlcV9wcmludF90ZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpOwordm9pZCB0dF9sb2NhbF9mcmVlKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpOworaW50IHR0X2dsb2JhbF9pbml0KHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpOwordm9pZCB0dF9nbG9iYWxfYWRkX29yaWcoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKIAkJCSBzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsCi0JCQkgdW5zaWduZWQgY2hhciAqaG5hX2J1ZmYsIGludCBobmFfYnVmZl9sZW4pOwotaW50IGhuYV9nbG9iYWxfc2VxX3ByaW50X3RleHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCk7Ci12b2lkIGhuYV9nbG9iYWxfZGVsX29yaWcoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKKwkJCSB1bnNpZ25lZCBjaGFyICp0dF9idWZmLCBpbnQgdHRfYnVmZl9sZW4pOworaW50IHR0X2dsb2JhbF9zZXFfcHJpbnRfdGV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KTsKK3ZvaWQgdHRfZ2xvYmFsX2RlbF9vcmlnKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCiAJCQkgc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlLCBjaGFyICptZXNzYWdlKTsKLXZvaWQgaG5hX2dsb2JhbF9mcmVlKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpOwordm9pZCB0dF9nbG9iYWxfZnJlZShzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KTsKIHN0cnVjdCBvcmlnX25vZGUgKnRyYW5zdGFibGVfc2VhcmNoKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsIHVpbnQ4X3QgKmFkZHIpOwogCiAjZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX1RSQU5TTEFUSU9OX1RBQkxFX0hfICovCmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi90eXBlcy5oIGIvbmV0L2JhdG1hbi1hZHYvdHlwZXMuaAppbmRleCA4MzQ0NWNmLi5mYWI3MGU4IDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi90eXBlcy5oCisrKyBiL25ldC9iYXRtYW4tYWR2L3R5cGVzLmgKQEAgLTY3LDcgKzY3LDcgQEAKIHN0cnVjdCBvcmlnX25vZGUgewogCXVpbnQ4X3Qgb3JpZ1tFVEhfQUxFTl07CiAJdWludDhfdCBwcmltYXJ5X2FkZHJbRVRIX0FMRU5dOwotCXN0cnVjdCBuZWlnaF9ub2RlICpyb3V0ZXI7CisJc3RydWN0IG5laWdoX25vZGUgX19yY3UgKnJvdXRlcjsgLyogcmN1IHByb3RlY3RlZCBwb2ludGVyICovCiAJdW5zaWduZWQgbG9uZyAqYmNhc3Rfb3duOwogCXVpbnQ4X3QgKmJjYXN0X293bl9zdW07CiAJdW5zaWduZWQgbG9uZyBsYXN0X3ZhbGlkOwpAQCAtNzUsMjUgKzc1LDI1IEBACiAJdW5zaWduZWQgbG9uZyBiYXRtYW5fc2Vxbm9fcmVzZXQ7CiAJdWludDhfdCBnd19mbGFnczsKIAl1aW50OF90IGZsYWdzOwotCXVuc2lnbmVkIGNoYXIgKmhuYV9idWZmOwotCWludDE2X3QgaG5hX2J1ZmZfbGVuOworCXVuc2lnbmVkIGNoYXIgKnR0X2J1ZmY7CisJaW50MTZfdCB0dF9idWZmX2xlbjsKIAl1aW50MzJfdCBsYXN0X3JlYWxfc2Vxbm87CiAJdWludDhfdCBsYXN0X3R0bDsKIAl1bnNpZ25lZCBsb25nIGJjYXN0X2JpdHNbTlVNX1dPUkRTXTsKIAl1aW50MzJfdCBsYXN0X2JjYXN0X3NlcW5vOwogCXN0cnVjdCBobGlzdF9oZWFkIG5laWdoX2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCBmcmFnX2xpc3Q7Ci0Jc3BpbmxvY2tfdCBuZWlnaF9saXN0X2xvY2s7IC8qIHByb3RlY3RzIG5laWdoYm9yIGxpc3QgKi8KKwlzcGlubG9ja190IG5laWdoX2xpc3RfbG9jazsgLyogcHJvdGVjdHMgbmVpZ2hfbGlzdCBhbmQgcm91dGVyICovCiAJYXRvbWljX3QgcmVmY291bnQ7CiAJc3RydWN0IHJjdV9oZWFkIHJjdTsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSBoYXNoX2VudHJ5OwogCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXY7CiAJdW5zaWduZWQgbG9uZyBsYXN0X2ZyYWdfcGFja2V0OwotCXNwaW5sb2NrX3Qgb2dtX2NudF9sb2NrOyAvKiBwcm90ZWN0czogYmNhc3Rfb3duLCBiY2FzdF9vd25fc3VtLAotCQkJCSAgKiBuZWlnaF9ub2RlLT5yZWFsX2JpdHMsCi0JCQkJICAqIG5laWdoX25vZGUtPnJlYWxfcGFja2V0X2NvdW50ICovCi0Jc3BpbmxvY2tfdCBiY2FzdF9zZXFub19sb2NrOyAvKiBwcm90ZWN0cyBiY2FzdF9iaXRzLAotCQkJCSAgICAgICoJIGxhc3RfYmNhc3Rfc2Vxbm8gKi8KKwkvKiBvZ21fY250X2xvY2sgcHJvdGVjdHM6IGJjYXN0X293biwgYmNhc3Rfb3duX3N1bSwKKwkgKiBuZWlnaF9ub2RlLT5yZWFsX2JpdHMsIG5laWdoX25vZGUtPnJlYWxfcGFja2V0X2NvdW50ICovCisJc3BpbmxvY2tfdCBvZ21fY250X2xvY2s7CisJLyogYmNhc3Rfc2Vxbm9fbG9jayBwcm90ZWN0cyBiY2FzdF9iaXRzLCBsYXN0X2JjYXN0X3NlcW5vICovCisJc3BpbmxvY2tfdCBiY2FzdF9zZXFub19sb2NrOwogCWF0b21pY190IGJvbmRfY2FuZGlkYXRlczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGJvbmRfbGlzdDsKIH07CkBAIC0xMjUsNiArMTI1LDcgQEAKIAlzdHJ1Y3QgcmN1X2hlYWQgcmN1OwogCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKIAlzdHJ1Y3QgaGFyZF9pZmFjZSAqaWZfaW5jb21pbmc7CisJc3BpbmxvY2tfdCB0cV9sb2NrOwkvKiBwcm90ZWN0czogdHFfcmVjdiwgdHFfaW5kZXggKi8KIH07CiAKIApAQCAtMTQ1LDM0ICsxNDYsMzQgQEAKIAlhdG9taWNfdCBiY2FzdF9xdWV1ZV9sZWZ0OwogCWF0b21pY190IGJhdG1hbl9xdWV1ZV9sZWZ0OwogCWNoYXIgbnVtX2lmYWNlczsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCBzb2Z0aWZfbmVpZ2hfbGlzdDsKLQlzdHJ1Y3Qgc29mdGlmX25laWdoICpzb2Z0aWZfbmVpZ2g7CiAJc3RydWN0IGRlYnVnX2xvZyAqZGVidWdfbG9nOwotCXN0cnVjdCBoYXJkX2lmYWNlICpwcmltYXJ5X2lmOwogCXN0cnVjdCBrb2JqZWN0ICptZXNoX29iajsKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z19kaXI7CiAJc3RydWN0IGhsaXN0X2hlYWQgZm9yd19iYXRfbGlzdDsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCBmb3J3X2JjYXN0X2xpc3Q7CiAJc3RydWN0IGhsaXN0X2hlYWQgZ3dfbGlzdDsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCBzb2Z0aWZfbmVpZ2hfdmlkczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHZpc19zZW5kX2xpc3Q7CiAJc3RydWN0IGhhc2h0YWJsZV90ICpvcmlnX2hhc2g7Ci0Jc3RydWN0IGhhc2h0YWJsZV90ICpobmFfbG9jYWxfaGFzaDsKLQlzdHJ1Y3QgaGFzaHRhYmxlX3QgKmhuYV9nbG9iYWxfaGFzaDsKKwlzdHJ1Y3QgaGFzaHRhYmxlX3QgKnR0X2xvY2FsX2hhc2g7CisJc3RydWN0IGhhc2h0YWJsZV90ICp0dF9nbG9iYWxfaGFzaDsKIAlzdHJ1Y3QgaGFzaHRhYmxlX3QgKnZpc19oYXNoOwogCXNwaW5sb2NrX3QgZm9yd19iYXRfbGlzdF9sb2NrOyAvKiBwcm90ZWN0cyBmb3J3X2JhdF9saXN0ICovCiAJc3BpbmxvY2tfdCBmb3J3X2JjYXN0X2xpc3RfbG9jazsgLyogcHJvdGVjdHMgICovCi0Jc3BpbmxvY2tfdCBobmFfbGhhc2hfbG9jazsgLyogcHJvdGVjdHMgaG5hX2xvY2FsX2hhc2ggKi8KLQlzcGlubG9ja190IGhuYV9naGFzaF9sb2NrOyAvKiBwcm90ZWN0cyBobmFfZ2xvYmFsX2hhc2ggKi8KKwlzcGlubG9ja190IHR0X2xoYXNoX2xvY2s7IC8qIHByb3RlY3RzIHR0X2xvY2FsX2hhc2ggKi8KKwlzcGlubG9ja190IHR0X2doYXNoX2xvY2s7IC8qIHByb3RlY3RzIHR0X2dsb2JhbF9oYXNoICovCiAJc3BpbmxvY2tfdCBnd19saXN0X2xvY2s7IC8qIHByb3RlY3RzIGd3X2xpc3QgYW5kIGN1cnJfZ3cgKi8KIAlzcGlubG9ja190IHZpc19oYXNoX2xvY2s7IC8qIHByb3RlY3RzIHZpc19oYXNoICovCiAJc3BpbmxvY2tfdCB2aXNfbGlzdF9sb2NrOyAvKiBwcm90ZWN0cyB2aXNfaW5mbzo6cmVjdl9saXN0ICovCiAJc3BpbmxvY2tfdCBzb2Z0aWZfbmVpZ2hfbG9jazsgLyogcHJvdGVjdHMgc29mdC1pbnRlcmZhY2UgbmVpZ2ggbGlzdCAqLwotCWludDE2X3QgbnVtX2xvY2FsX2huYTsKLQlhdG9taWNfdCBobmFfbG9jYWxfY2hhbmdlZDsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIGhuYV93b3JrOworCXNwaW5sb2NrX3Qgc29mdGlmX25laWdoX3ZpZF9sb2NrOyAvKiBwcm90ZWN0cyBzb2Z0LWludGVyZmFjZSB2aWQgbGlzdCAqLworCWludDE2X3QgbnVtX2xvY2FsX3R0OworCWF0b21pY190IHR0X2xvY2FsX2NoYW5nZWQ7CisJc3RydWN0IGRlbGF5ZWRfd29yayB0dF93b3JrOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgb3JpZ193b3JrOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgdmlzX3dvcms7CiAJc3RydWN0IGd3X25vZGUgX19yY3UgKmN1cnJfZ3c7ICAvKiByY3UgcHJvdGVjdGVkIHBvaW50ZXIgKi8KKwlzdHJ1Y3QgaGFyZF9pZmFjZSBfX3JjdSAqcHJpbWFyeV9pZjsgIC8qIHJjdSBwcm90ZWN0ZWQgcG9pbnRlciAqLwogCXN0cnVjdCB2aXNfaW5mbyAqbXlfdmlzX2luZm87CiB9OwogCkBAIC0xOTEsMTQgKzE5MiwxNCBAQAogCXN0cnVjdCBpY21wX3BhY2tldF9yciBpY21wX3BhY2tldDsKIH07CiAKLXN0cnVjdCBobmFfbG9jYWxfZW50cnkgeworc3RydWN0IHR0X2xvY2FsX2VudHJ5IHsKIAl1aW50OF90IGFkZHJbRVRIX0FMRU5dOwogCXVuc2lnbmVkIGxvbmcgbGFzdF9zZWVuOwogCWNoYXIgbmV2ZXJfcHVyZ2U7CiAJc3RydWN0IGhsaXN0X25vZGUgaGFzaF9lbnRyeTsKIH07CiAKLXN0cnVjdCBobmFfZ2xvYmFsX2VudHJ5IHsKK3N0cnVjdCB0dF9nbG9iYWxfZW50cnkgewogCXVpbnQ4X3QgYWRkcltFVEhfQUxFTl07CiAJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOwogCXN0cnVjdCBobGlzdF9ub2RlIGhhc2hfZW50cnk7CkBAIC0yNjEsNyArMjYyLDcgQEAKIHN0cnVjdCB2aXNfaW5mb19lbnRyeSB7CiAJdWludDhfdCAgc3JjW0VUSF9BTEVOXTsKIAl1aW50OF90ICBkZXN0W0VUSF9BTEVOXTsKLQl1aW50OF90ICBxdWFsaXR5OwkvKiBxdWFsaXR5ID0gMCBtZWFucyBITkEgKi8KKwl1aW50OF90ICBxdWFsaXR5OwkvKiBxdWFsaXR5ID0gMCBjbGllbnQgKi8KIH0gX19wYWNrZWQ7CiAKIHN0cnVjdCByZWN2bGlzdF9ub2RlIHsKQEAgLTI2OSwxMSArMjcwLDIwIEBACiAJdWludDhfdCBtYWNbRVRIX0FMRU5dOwogfTsKIAorc3RydWN0IHNvZnRpZl9uZWlnaF92aWQgeworCXN0cnVjdCBobGlzdF9ub2RlIGxpc3Q7CisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdjsKKwlzaG9ydCB2aWQ7CisJYXRvbWljX3QgcmVmY291bnQ7CisJc3RydWN0IHNvZnRpZl9uZWlnaCBfX3JjdSAqc29mdGlmX25laWdoOworCXN0cnVjdCByY3VfaGVhZCByY3U7CisJc3RydWN0IGhsaXN0X2hlYWQgc29mdGlmX25laWdoX2xpc3Q7Cit9OworCiBzdHJ1Y3Qgc29mdGlmX25laWdoIHsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSBsaXN0OwogCXVpbnQ4X3QgYWRkcltFVEhfQUxFTl07CiAJdW5zaWduZWQgbG9uZyBsYXN0X3NlZW47Ci0Jc2hvcnQgdmlkOwogCWF0b21pY190IHJlZmNvdW50OwogCXN0cnVjdCByY3VfaGVhZCByY3U7CiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvdW5pY2FzdC5jIGIvbmV0L2JhdG1hbi1hZHYvdW5pY2FzdC5jCmluZGV4IDE5Zjg0YmQuLjE5YzNkYWYgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L3VuaWNhc3QuYworKysgYi9uZXQvYmF0bWFuLWFkdi91bmljYXN0LmMKQEAgLTIyMSwxNSArMjIxLDE3IEBACiAJCSAgc3RydWN0IGhhcmRfaWZhY2UgKmhhcmRfaWZhY2UsIHVpbnQ4X3QgZHN0YWRkcltdKQogewogCXN0cnVjdCB1bmljYXN0X3BhY2tldCB0bXBfdWMsICp1bmljYXN0X3BhY2tldDsKKwlzdHJ1Y3QgaGFyZF9pZmFjZSAqcHJpbWFyeV9pZjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqZnJhZ19za2I7CiAJc3RydWN0IHVuaWNhc3RfZnJhZ19wYWNrZXQgKmZyYWcxLCAqZnJhZzI7CiAJaW50IHVjX2hkcl9sZW4gPSBzaXplb2Yoc3RydWN0IHVuaWNhc3RfcGFja2V0KTsKIAlpbnQgdWNmX2hkcl9sZW4gPSBzaXplb2Yoc3RydWN0IHVuaWNhc3RfZnJhZ19wYWNrZXQpOwogCWludCBkYXRhX2xlbiA9IHNrYi0+bGVuIC0gdWNfaGRyX2xlbjsKLQlpbnQgbGFyZ2VfdGFpbCA9IDA7CisJaW50IGxhcmdlX3RhaWwgPSAwLCByZXQgPSBORVRfUlhfRFJPUDsKIAl1aW50MTZfdCBzZXFubzsKIAotCWlmICghYmF0X3ByaXYtPnByaW1hcnlfaWYpCisJcHJpbWFyeV9pZiA9IHByaW1hcnlfaWZfZ2V0X3NlbGVjdGVkKGJhdF9wcml2KTsKKwlpZiAoIXByaW1hcnlfaWYpCiAJCWdvdG8gZHJvcHBlZDsKIAogCWZyYWdfc2tiID0gZGV2X2FsbG9jX3NrYihkYXRhX2xlbiAtIChkYXRhX2xlbiAvIDIpICsgdWNmX2hkcl9sZW4pOwpAQCAtMjU0LDcgKzI1Niw3IEBACiAJZnJhZzEtPnZlcnNpb24gPSBDT01QQVRfVkVSU0lPTjsKIAlmcmFnMS0+cGFja2V0X3R5cGUgPSBCQVRfVU5JQ0FTVF9GUkFHOwogCi0JbWVtY3B5KGZyYWcxLT5vcmlnLCBiYXRfcHJpdi0+cHJpbWFyeV9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkoZnJhZzEtPm9yaWcsIHByaW1hcnlfaWYtPm5ldF9kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CiAJbWVtY3B5KGZyYWcyLCBmcmFnMSwgc2l6ZW9mKHN0cnVjdCB1bmljYXN0X2ZyYWdfcGFja2V0KSk7CiAKIAlpZiAoZGF0YV9sZW4gJiAxKQpAQCAtMjY5LDEzICsyNzEsMTcgQEAKIAogCXNlbmRfc2tiX3BhY2tldChza2IsIGhhcmRfaWZhY2UsIGRzdGFkZHIpOwogCXNlbmRfc2tiX3BhY2tldChmcmFnX3NrYiwgaGFyZF9pZmFjZSwgZHN0YWRkcik7Ci0JcmV0dXJuIE5FVF9SWF9TVUNDRVNTOworCXJldCA9IE5FVF9SWF9TVUNDRVNTOworCWdvdG8gb3V0OwogCiBkcm9wX2ZyYWc6CiAJa2ZyZWVfc2tiKGZyYWdfc2tiKTsKIGRyb3BwZWQ6CiAJa2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIE5FVF9SWF9EUk9QOworb3V0OgorCWlmIChwcmltYXJ5X2lmKQorCQloYXJkaWZfZnJlZV9yZWYocHJpbWFyeV9pZik7CisJcmV0dXJuIHJldDsKIH0KIAogaW50IHVuaWNhc3Rfc2VuZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdikKQEAgLTI4OSwxMiArMjk1LDEyIEBACiAKIAkvKiBnZXQgcm91dGluZyBpbmZvcm1hdGlvbiAqLwogCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGhoZHItPmhfZGVzdCkpIHsKLQkJb3JpZ19ub2RlID0gKHN0cnVjdCBvcmlnX25vZGUgKilnd19nZXRfc2VsZWN0ZWQoYmF0X3ByaXYpOworCQlvcmlnX25vZGUgPSAoc3RydWN0IG9yaWdfbm9kZSAqKWd3X2dldF9zZWxlY3RlZF9vcmlnKGJhdF9wcml2KTsKIAkJaWYgKG9yaWdfbm9kZSkKIAkJCWdvdG8gZmluZF9yb3V0ZXI7CiAJfQogCi0JLyogY2hlY2sgZm9yIGhuYSBob3N0IC0gaW5jcmVhc2VzIG9yaWdfbm9kZSByZWZjb3VudCAqLworCS8qIGNoZWNrIGZvciB0dCBob3N0IC0gaW5jcmVhc2VzIG9yaWdfbm9kZSByZWZjb3VudCAqLwogCW9yaWdfbm9kZSA9IHRyYW5zdGFibGVfc2VhcmNoKGJhdF9wcml2LCBldGhoZHItPmhfZGVzdCk7CiAKIGZpbmRfcm91dGVyOgpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvdmlzLmMgYi9uZXQvYmF0bWFuLWFkdi92aXMuYwppbmRleCBmOTAyMTJmLi5jMzlmMjBjIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi92aXMuYworKysgYi9uZXQvYmF0bWFuLWFkdi92aXMuYwpAQCAtMTk0LDcgKzE5NCw3IEBACiB7CiAJLyogbWF4aW1hbCBsZW5ndGg6IG1heCg0KzE3KzIsIDMrMTcrMSszKzIpID09IDI2ICovCiAJaWYgKHByaW1hcnkgJiYgZW50cnktPnF1YWxpdHkgPT0gMCkKLQkJcmV0dXJuIHNwcmludGYoYnVmZiwgIkhOQSAlcE0sICIsIGVudHJ5LT5kZXN0KTsKKwkJcmV0dXJuIHNwcmludGYoYnVmZiwgIlRUICVwTSwgIiwgZW50cnktPmRlc3QpOwogCWVsc2UgaWYgKGNvbXBhcmVfZXRoKGVudHJ5LT5zcmMsIHNyYykpCiAJCXJldHVybiBzcHJpbnRmKGJ1ZmYsICJUUSAlcE0gJWQsICIsIGVudHJ5LT5kZXN0LAogCQkJICAgICAgIGVudHJ5LT5xdWFsaXR5KTsKQEAgLTIwNCw2ICsyMDQsNyBAQAogCiBpbnQgdmlzX3NlcV9wcmludF90ZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCiB7CisJc3RydWN0IGhhcmRfaWZhY2UgKnByaW1hcnlfaWY7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CiAJc3RydWN0IHZpc19pbmZvICppbmZvOwpAQCAtMjE1LDE1ICsyMTYsMTggQEAKIAlITElTVF9IRUFEKHZpc19pZl9saXN0KTsKIAlzdHJ1Y3QgaWZfbGlzdF9lbnRyeSAqZW50cnk7CiAJc3RydWN0IGhsaXN0X25vZGUgKnBvcywgKm47Ci0JaW50IGksIGo7CisJaW50IGksIGosIHJldCA9IDA7CiAJaW50IHZpc19zZXJ2ZXIgPSBhdG9taWNfcmVhZCgmYmF0X3ByaXYtPnZpc19tb2RlKTsKIAlzaXplX3QgYnVmZl9wb3MsIGJ1Zl9zaXplOwogCWNoYXIgKmJ1ZmY7CiAJaW50IGNvbXBhcmU7CiAKLQlpZiAoKCFiYXRfcHJpdi0+cHJpbWFyeV9pZikgfHwKLQkgICAgKHZpc19zZXJ2ZXIgPT0gVklTX1RZUEVfQ0xJRU5UX1VQREFURSkpCi0JCXJldHVybiAwOworCXByaW1hcnlfaWYgPSBwcmltYXJ5X2lmX2dldF9zZWxlY3RlZChiYXRfcHJpdik7CisJaWYgKCFwcmltYXJ5X2lmKQorCQlnb3RvIG91dDsKKworCWlmICh2aXNfc2VydmVyID09IFZJU19UWVBFX0NMSUVOVF9VUERBVEUpCisJCWdvdG8gb3V0OwogCiAJYnVmX3NpemUgPSAxOwogCS8qIEVzdGltYXRlIGxlbmd0aCAqLwpAQCAtMjcwLDcgKzI3NCw4IEBACiAJYnVmZiA9IGttYWxsb2MoYnVmX3NpemUsIEdGUF9BVE9NSUMpOwogCWlmICghYnVmZikgewogCQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPnZpc19oYXNoX2xvY2spOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CiAJfQogCWJ1ZmZbMF0gPSAnXDAnOwogCWJ1ZmZfcG9zID0gMDsKQEAgLTMyOCw3ICszMzMsMTAgQEAKIAlzZXFfcHJpbnRmKHNlcSwgIiVzIiwgYnVmZik7CiAJa2ZyZWUoYnVmZik7CiAKLQlyZXR1cm4gMDsKK291dDoKKwlpZiAocHJpbWFyeV9pZikKKwkJaGFyZGlmX2ZyZWVfcmVmKHByaW1hcnlfaWYpOworCXJldHVybiByZXQ7CiB9CiAKIC8qIGFkZCB0aGUgaW5mbyBwYWNrZXQgdG8gdGhlIHNlbmQgbGlzdCwgaWYgaXQgd2FzIG5vdApAQCAtNTU4LDYgKzU2Niw3IEBACiAJCQkJc3RydWN0IHZpc19pbmZvICppbmZvKQogewogCXN0cnVjdCBoYXNodGFibGVfdCAqaGFzaCA9IGJhdF9wcml2LT5vcmlnX2hhc2g7CisJc3RydWN0IG5laWdoX25vZGUgKnJvdXRlcjsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKIAlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGU7CkBAIC01NzEsMTMgKzU4MCwxNyBAQAogCiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG9yaWdfbm9kZSwgbm9kZSwgaGVhZCwgaGFzaF9lbnRyeSkgewotCQkJaWYgKChvcmlnX25vZGUpICYmIChvcmlnX25vZGUtPnJvdXRlcikgJiYKLQkJCSAgICAob3JpZ19ub2RlLT5mbGFncyAmIFZJU19TRVJWRVIpICYmCi0JCQkgICAgKG9yaWdfbm9kZS0+cm91dGVyLT50cV9hdmcgPiBiZXN0X3RxKSkgewotCQkJCWJlc3RfdHEgPSBvcmlnX25vZGUtPnJvdXRlci0+dHFfYXZnOworCQkJcm91dGVyID0gb3JpZ19ub2RlX2dldF9yb3V0ZXIob3JpZ19ub2RlKTsKKwkJCWlmICghcm91dGVyKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoKG9yaWdfbm9kZS0+ZmxhZ3MgJiBWSVNfU0VSVkVSKSAmJgorCQkJICAgIChyb3V0ZXItPnRxX2F2ZyA+IGJlc3RfdHEpKSB7CisJCQkJYmVzdF90cSA9IHJvdXRlci0+dHFfYXZnOwogCQkJCW1lbWNweShwYWNrZXQtPnRhcmdldF9vcmlnLCBvcmlnX25vZGUtPm9yaWcsCiAJCQkJICAgICAgIEVUSF9BTEVOKTsKIAkJCX0KKwkJCW5laWdoX25vZGVfZnJlZV9yZWYocm91dGVyKTsKIAkJfQogCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CkBAIC02MDUsMTEgKzYxOCwxMSBAQAogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwogCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOwogCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKLQlzdHJ1Y3QgbmVpZ2hfbm9kZSAqbmVpZ2hfbm9kZTsKKwlzdHJ1Y3QgbmVpZ2hfbm9kZSAqcm91dGVyOwogCXN0cnVjdCB2aXNfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgdmlzX2luZm8gKiliYXRfcHJpdi0+bXlfdmlzX2luZm87CiAJc3RydWN0IHZpc19wYWNrZXQgKnBhY2tldCA9IChzdHJ1Y3QgdmlzX3BhY2tldCAqKWluZm8tPnNrYl9wYWNrZXQtPmRhdGE7CiAJc3RydWN0IHZpc19pbmZvX2VudHJ5ICplbnRyeTsKLQlzdHJ1Y3QgaG5hX2xvY2FsX2VudHJ5ICpobmFfbG9jYWxfZW50cnk7CisJc3RydWN0IHR0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeTsKIAlpbnQgYmVzdF90cSA9IC0xLCBpOwogCiAJaW5mby0+Zmlyc3Rfc2VlbiA9IGppZmZpZXM7CkBAIC02MzMsNTkgKzY0Niw2MSBAQAogCiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG9yaWdfbm9kZSwgbm9kZSwgaGVhZCwgaGFzaF9lbnRyeSkgewotCQkJbmVpZ2hfbm9kZSA9IG9yaWdfbm9kZS0+cm91dGVyOwotCi0JCQlpZiAoIW5laWdoX25vZGUpCisJCQlyb3V0ZXIgPSBvcmlnX25vZGVfZ2V0X3JvdXRlcihvcmlnX25vZGUpOworCQkJaWYgKCFyb3V0ZXIpCiAJCQkJY29udGludWU7CiAKLQkJCWlmICghY29tcGFyZV9ldGgobmVpZ2hfbm9kZS0+YWRkciwgb3JpZ19ub2RlLT5vcmlnKSkKLQkJCQljb250aW51ZTsKKwkJCWlmICghY29tcGFyZV9ldGgocm91dGVyLT5hZGRyLCBvcmlnX25vZGUtPm9yaWcpKQorCQkJCWdvdG8gbmV4dDsKIAotCQkJaWYgKG5laWdoX25vZGUtPmlmX2luY29taW5nLT5pZl9zdGF0dXMgIT0gSUZfQUNUSVZFKQotCQkJCWNvbnRpbnVlOworCQkJaWYgKHJvdXRlci0+aWZfaW5jb21pbmctPmlmX3N0YXR1cyAhPSBJRl9BQ1RJVkUpCisJCQkJZ290byBuZXh0OwogCi0JCQlpZiAobmVpZ2hfbm9kZS0+dHFfYXZnIDwgMSkKLQkJCQljb250aW51ZTsKKwkJCWlmIChyb3V0ZXItPnRxX2F2ZyA8IDEpCisJCQkJZ290byBuZXh0OwogCiAJCQkvKiBmaWxsIG9uZSBlbnRyeSBpbnRvIGJ1ZmZlci4gKi8KIAkJCWVudHJ5ID0gKHN0cnVjdCB2aXNfaW5mb19lbnRyeSAqKQogCQkJCSAgICAgIHNrYl9wdXQoaW5mby0+c2tiX3BhY2tldCwgc2l6ZW9mKCplbnRyeSkpOwogCQkJbWVtY3B5KGVudHJ5LT5zcmMsCi0JCQkgICAgICAgbmVpZ2hfbm9kZS0+aWZfaW5jb21pbmctPm5ldF9kZXYtPmRldl9hZGRyLAorCQkJICAgICAgIHJvdXRlci0+aWZfaW5jb21pbmctPm5ldF9kZXYtPmRldl9hZGRyLAogCQkJICAgICAgIEVUSF9BTEVOKTsKIAkJCW1lbWNweShlbnRyeS0+ZGVzdCwgb3JpZ19ub2RlLT5vcmlnLCBFVEhfQUxFTik7Ci0JCQllbnRyeS0+cXVhbGl0eSA9IG5laWdoX25vZGUtPnRxX2F2ZzsKKwkJCWVudHJ5LT5xdWFsaXR5ID0gcm91dGVyLT50cV9hdmc7CiAJCQlwYWNrZXQtPmVudHJpZXMrKzsKIAorbmV4dDoKKwkJCW5laWdoX25vZGVfZnJlZV9yZWYocm91dGVyKTsKKwogCQkJaWYgKHZpc19wYWNrZXRfZnVsbChpbmZvKSkKIAkJCQlnb3RvIHVubG9jazsKIAkJfQogCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CiAKLQloYXNoID0gYmF0X3ByaXYtPmhuYV9sb2NhbF9oYXNoOworCWhhc2ggPSBiYXRfcHJpdi0+dHRfbG9jYWxfaGFzaDsKIAotCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPmhuYV9saGFzaF9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT50dF9saGFzaF9sb2NrKTsKIAlmb3IgKGkgPSAwOyBpIDwgaGFzaC0+c2l6ZTsgaSsrKSB7CiAJCWhlYWQgPSAmaGFzaC0+dGFibGVbaV07CiAKLQkJaGxpc3RfZm9yX2VhY2hfZW50cnkoaG5hX2xvY2FsX2VudHJ5LCBub2RlLCBoZWFkLCBoYXNoX2VudHJ5KSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHR0X2xvY2FsX2VudHJ5LCBub2RlLCBoZWFkLCBoYXNoX2VudHJ5KSB7CiAJCQllbnRyeSA9IChzdHJ1Y3QgdmlzX2luZm9fZW50cnkgKikKIAkJCQkJc2tiX3B1dChpbmZvLT5za2JfcGFja2V0LAogCQkJCQkJc2l6ZW9mKCplbnRyeSkpOwogCQkJbWVtc2V0KGVudHJ5LT5zcmMsIDAsIEVUSF9BTEVOKTsKLQkJCW1lbWNweShlbnRyeS0+ZGVzdCwgaG5hX2xvY2FsX2VudHJ5LT5hZGRyLCBFVEhfQUxFTik7Ci0JCQllbnRyeS0+cXVhbGl0eSA9IDA7IC8qIDAgbWVhbnMgSE5BICovCisJCQltZW1jcHkoZW50cnktPmRlc3QsIHR0X2xvY2FsX2VudHJ5LT5hZGRyLCBFVEhfQUxFTik7CisJCQllbnRyeS0+cXVhbGl0eSA9IDA7IC8qIDAgbWVhbnMgVFQgKi8KIAkJCXBhY2tldC0+ZW50cmllcysrOwogCiAJCQlpZiAodmlzX3BhY2tldF9mdWxsKGluZm8pKSB7Ci0JCQkJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5obmFfbGhhc2hfbG9jayk7CisJCQkJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT50dF9saGFzaF9sb2NrKTsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KIAkJfQogCX0KIAotCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+aG5hX2xoYXNoX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+dHRfbGhhc2hfbG9jayk7CiAJcmV0dXJuIDA7CiAKIHVubG9jazoKQEAgLTcyNSw2ICs3NDAsNyBAQAogc3RhdGljIHZvaWQgYnJvYWRjYXN0X3Zpc19wYWNrZXQoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKIAkJCQkgc3RydWN0IHZpc19pbmZvICppbmZvKQogeworCXN0cnVjdCBuZWlnaF9ub2RlICpyb3V0ZXI7CiAJc3RydWN0IGhhc2h0YWJsZV90ICpoYXNoID0gYmF0X3ByaXYtPm9yaWdfaGFzaDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKQEAgLTc0NSwxOSArNzYxLDI2IEBACiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG9yaWdfbm9kZSwgbm9kZSwgaGVhZCwgaGFzaF9lbnRyeSkgewogCQkJLyogaWYgaXQncyBhIHZpcyBzZXJ2ZXIgYW5kIHJlYWNoYWJsZSwgc2VuZCBpdC4gKi8KLQkJCWlmICgoIW9yaWdfbm9kZSkgfHwgKCFvcmlnX25vZGUtPnJvdXRlcikpCi0JCQkJY29udGludWU7CiAJCQlpZiAoIShvcmlnX25vZGUtPmZsYWdzICYgVklTX1NFUlZFUikpCiAJCQkJY29udGludWU7Ci0JCQkvKiBkb24ndCBzZW5kIGl0IGlmIHdlIGFscmVhZHkgcmVjZWl2ZWQgdGhlIHBhY2tldCBmcm9tCi0JCQkqIHRoaXMgbm9kZS4gKi8KLQkJCWlmIChyZWN2X2xpc3RfaXNfaW4oYmF0X3ByaXYsICZpbmZvLT5yZWN2X2xpc3QsCi0JCQkJCSAgICBvcmlnX25vZGUtPm9yaWcpKQorCisJCQlyb3V0ZXIgPSBvcmlnX25vZGVfZ2V0X3JvdXRlcihvcmlnX25vZGUpOworCQkJaWYgKCFyb3V0ZXIpCiAJCQkJY29udGludWU7CiAKKwkJCS8qIGRvbid0IHNlbmQgaXQgaWYgd2UgYWxyZWFkeSByZWNlaXZlZCB0aGUgcGFja2V0IGZyb20KKwkJCSAqIHRoaXMgbm9kZS4gKi8KKwkJCWlmIChyZWN2X2xpc3RfaXNfaW4oYmF0X3ByaXYsICZpbmZvLT5yZWN2X2xpc3QsCisJCQkJCSAgICBvcmlnX25vZGUtPm9yaWcpKSB7CisJCQkJbmVpZ2hfbm9kZV9mcmVlX3JlZihyb3V0ZXIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCiAJCQltZW1jcHkocGFja2V0LT50YXJnZXRfb3JpZywgb3JpZ19ub2RlLT5vcmlnLCBFVEhfQUxFTik7Ci0JCQloYXJkX2lmYWNlID0gb3JpZ19ub2RlLT5yb3V0ZXItPmlmX2luY29taW5nOwotCQkJbWVtY3B5KGRzdGFkZHIsIG9yaWdfbm9kZS0+cm91dGVyLT5hZGRyLCBFVEhfQUxFTik7CisJCQloYXJkX2lmYWNlID0gcm91dGVyLT5pZl9pbmNvbWluZzsKKwkJCW1lbWNweShkc3RhZGRyLCByb3V0ZXItPmFkZHIsIEVUSF9BTEVOKTsKKworCQkJbmVpZ2hfbm9kZV9mcmVlX3JlZihyb3V0ZXIpOwogCiAJCQlza2IgPSBza2JfY2xvbmUoaW5mby0+c2tiX3BhY2tldCwgR0ZQX0FUT01JQyk7CiAJCQlpZiAoc2tiKQpAQCAtNzcyLDYwICs3OTUsNDggQEAKIAkJCSAgICAgICBzdHJ1Y3QgdmlzX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOwotCXN0cnVjdCBuZWlnaF9ub2RlICpuZWlnaF9ub2RlID0gTlVMTDsKKwlzdHJ1Y3QgbmVpZ2hfbm9kZSAqcm91dGVyID0gTlVMTDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCB2aXNfcGFja2V0ICpwYWNrZXQ7CiAKIAlwYWNrZXQgPSAoc3RydWN0IHZpc19wYWNrZXQgKilpbmZvLT5za2JfcGFja2V0LT5kYXRhOwogCi0JcmN1X3JlYWRfbG9jaygpOwogCW9yaWdfbm9kZSA9IG9yaWdfaGFzaF9maW5kKGJhdF9wcml2LCBwYWNrZXQtPnRhcmdldF9vcmlnKTsKLQogCWlmICghb3JpZ19ub2RlKQotCQlnb3RvIHVubG9jazsKKwkJZ290byBvdXQ7CiAKLQluZWlnaF9ub2RlID0gb3JpZ19ub2RlLT5yb3V0ZXI7Ci0KLQlpZiAoIW5laWdoX25vZGUpCi0JCWdvdG8gdW5sb2NrOwotCi0JaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZuZWlnaF9ub2RlLT5yZWZjb3VudCkpIHsKLQkJbmVpZ2hfbm9kZSA9IE5VTEw7Ci0JCWdvdG8gdW5sb2NrOwotCX0KLQotCXJjdV9yZWFkX3VubG9jaygpOworCXJvdXRlciA9IG9yaWdfbm9kZV9nZXRfcm91dGVyKG9yaWdfbm9kZSk7CisJaWYgKCFyb3V0ZXIpCisJCWdvdG8gb3V0OwogCiAJc2tiID0gc2tiX2Nsb25lKGluZm8tPnNrYl9wYWNrZXQsIEdGUF9BVE9NSUMpOwogCWlmIChza2IpCi0JCXNlbmRfc2tiX3BhY2tldChza2IsIG5laWdoX25vZGUtPmlmX2luY29taW5nLAotCQkJCW5laWdoX25vZGUtPmFkZHIpOworCQlzZW5kX3NrYl9wYWNrZXQoc2tiLCByb3V0ZXItPmlmX2luY29taW5nLCByb3V0ZXItPmFkZHIpOwogCi0JZ290byBvdXQ7Ci0KLXVubG9jazoKLQlyY3VfcmVhZF91bmxvY2soKTsKIG91dDoKLQlpZiAobmVpZ2hfbm9kZSkKLQkJbmVpZ2hfbm9kZV9mcmVlX3JlZihuZWlnaF9ub2RlKTsKKwlpZiAocm91dGVyKQorCQluZWlnaF9ub2RlX2ZyZWVfcmVmKHJvdXRlcik7CiAJaWYgKG9yaWdfbm9kZSkKIAkJb3JpZ19ub2RlX2ZyZWVfcmVmKG9yaWdfbm9kZSk7Ci0JcmV0dXJuOwogfQogCiAvKiBvbmx5IHNlbmQgb25lIHZpcyBwYWNrZXQuIGNhbGxlZCBmcm9tIHNlbmRfdmlzX3BhY2tldHMoKSAqLwogc3RhdGljIHZvaWQgc2VuZF92aXNfcGFja2V0KHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsIHN0cnVjdCB2aXNfaW5mbyAqaW5mbykKIHsKKwlzdHJ1Y3QgaGFyZF9pZmFjZSAqcHJpbWFyeV9pZjsKIAlzdHJ1Y3QgdmlzX3BhY2tldCAqcGFja2V0OwogCisJcHJpbWFyeV9pZiA9IHByaW1hcnlfaWZfZ2V0X3NlbGVjdGVkKGJhdF9wcml2KTsKKwlpZiAoIXByaW1hcnlfaWYpCisJCWdvdG8gb3V0OworCiAJcGFja2V0ID0gKHN0cnVjdCB2aXNfcGFja2V0ICopaW5mby0+c2tiX3BhY2tldC0+ZGF0YTsKIAlpZiAocGFja2V0LT50dGwgPCAyKSB7CiAJCXByX2RlYnVnKCJFcnJvciAtIGNhbid0IHNlbmQgdmlzIHBhY2tldDogdHRsIGV4Y2VlZGVkXG4iKTsKLQkJcmV0dXJuOworCQlnb3RvIG91dDsKIAl9CiAKLQltZW1jcHkocGFja2V0LT5zZW5kZXJfb3JpZywgYmF0X3ByaXYtPnByaW1hcnlfaWYtPm5ldF9kZXYtPmRldl9hZGRyLAotCSAgICAgICBFVEhfQUxFTik7CisJbWVtY3B5KHBhY2tldC0+c2VuZGVyX29yaWcsIHByaW1hcnlfaWYtPm5ldF9kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CiAJcGFja2V0LT50dGwtLTsKIAogCWlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcihwYWNrZXQtPnRhcmdldF9vcmlnKSkKQEAgLTgzMyw2ICs4NDQsMTAgQEAKIAllbHNlCiAJCXVuaWNhc3RfdmlzX3BhY2tldChiYXRfcHJpdiwgaW5mbyk7CiAJcGFja2V0LT50dGwrKzsgLyogcmVzdG9yZSBUVEwgKi8KKworb3V0OgorCWlmIChwcmltYXJ5X2lmKQorCQloYXJkaWZfZnJlZV9yZWYocHJpbWFyeV9pZik7CiB9CiAKIC8qIGNhbGxlZCBmcm9tIHRpbWVyOyBzZW5kIChhbmQgbWF5YmUgZ2VuZXJhdGUpIHZpcyBwYWNrZXQuICovCkBAIC04NTksOCArODc0LDcgQEAKIAkJa3JlZl9nZXQoJmluZm8tPnJlZmNvdW50KTsKIAkJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT52aXNfaGFzaF9sb2NrKTsKIAotCQlpZiAoYmF0X3ByaXYtPnByaW1hcnlfaWYpCi0JCQlzZW5kX3Zpc19wYWNrZXQoYmF0X3ByaXYsIGluZm8pOworCQlzZW5kX3Zpc19wYWNrZXQoYmF0X3ByaXYsIGluZm8pOwogCiAJCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPnZpc19oYXNoX2xvY2spOwogCQlzZW5kX2xpc3RfZGVsKGluZm8pOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9ibmVwL2JuZXAuaCBiL25ldC9ibHVldG9vdGgvYm5lcC9ibmVwLmgKaW5kZXggNzA2NzI1NDQuLjhlNmMwNjEgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvYm5lcC9ibmVwLmgKKysrIGIvbmV0L2JsdWV0b290aC9ibmVwL2JuZXAuaApAQCAtMjMsODggKzIzLDg4IEBACiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oPgogCi0vLyBMaW1pdHMKLSNkZWZpbmUgQk5FUF9NQVhfUFJPVE9fRklMVEVSUyAgICAgNQotI2RlZmluZSBCTkVQX01BWF9NVUxUSUNBU1RfRklMVEVSUyAyMAorLyogTGltaXRzICovCisjZGVmaW5lIEJORVBfTUFYX1BST1RPX0ZJTFRFUlMJCTUKKyNkZWZpbmUgQk5FUF9NQVhfTVVMVElDQVNUX0ZJTFRFUlMJMjAKIAotLy8gVVVJRHMKLSNkZWZpbmUgQk5FUF9CQVNFX1VVSUQgMHgwMDAwMDAwMDAwMDAxMDAwODAwMDAwODA1RjlCMzRGQgotI2RlZmluZSBCTkVQX1VVSUQxNiAgICAweDAyCi0jZGVmaW5lIEJORVBfVVVJRDMyICAgIDB4MDQKLSNkZWZpbmUgQk5FUF9VVUlEMTI4ICAgMHgxNgorLyogVVVJRHMgKi8KKyNkZWZpbmUgQk5FUF9CQVNFX1VVSUQJMHgwMDAwMDAwMDAwMDAxMDAwODAwMDAwODA1RjlCMzRGQgorI2RlZmluZSBCTkVQX1VVSUQxNgkweDAyCisjZGVmaW5lIEJORVBfVVVJRDMyCTB4MDQKKyNkZWZpbmUgQk5FUF9VVUlEMTI4CTB4MTYKIAotI2RlZmluZSBCTkVQX1NWQ19QQU5VICAweDExMTUKLSNkZWZpbmUgQk5FUF9TVkNfTkFQICAgMHgxMTE2Ci0jZGVmaW5lIEJORVBfU1ZDX0dOICAgIDB4MTExNworI2RlZmluZSBCTkVQX1NWQ19QQU5VCTB4MTExNQorI2RlZmluZSBCTkVQX1NWQ19OQVAJMHgxMTE2CisjZGVmaW5lIEJORVBfU1ZDX0dOCTB4MTExNwogCi0vLyBQYWNrZXQgdHlwZXMKLSNkZWZpbmUgQk5FUF9HRU5FUkFMICAgICAgICAgICAgICAgMHgwMAotI2RlZmluZSBCTkVQX0NPTlRST0wgICAgICAgICAgICAgICAweDAxCi0jZGVmaW5lIEJORVBfQ09NUFJFU1NFRCAgICAgICAgICAgIDB4MDIKLSNkZWZpbmUgQk5FUF9DT01QUkVTU0VEX1NSQ19PTkxZICAgMHgwMwotI2RlZmluZSBCTkVQX0NPTVBSRVNTRURfRFNUX09OTFkgICAweDA0CisvKiBQYWNrZXQgdHlwZXMgKi8KKyNkZWZpbmUgQk5FUF9HRU5FUkFMCQkJMHgwMAorI2RlZmluZSBCTkVQX0NPTlRST0wJCQkweDAxCisjZGVmaW5lIEJORVBfQ09NUFJFU1NFRAkJCTB4MDIKKyNkZWZpbmUgQk5FUF9DT01QUkVTU0VEX1NSQ19PTkxZCTB4MDMKKyNkZWZpbmUgQk5FUF9DT01QUkVTU0VEX0RTVF9PTkxZCTB4MDQKIAotLy8gQ29udHJvbCB0eXBlcwotI2RlZmluZSBCTkVQX0NNRF9OT1RfVU5ERVJTVE9PRCAgICAweDAwCi0jZGVmaW5lIEJORVBfU0VUVVBfQ09OTl9SRVEgICAgICAgIDB4MDEKLSNkZWZpbmUgQk5FUF9TRVRVUF9DT05OX1JTUCAgICAgICAgMHgwMgotI2RlZmluZSBCTkVQX0ZJTFRFUl9ORVRfVFlQRV9TRVQgICAweDAzCi0jZGVmaW5lIEJORVBfRklMVEVSX05FVF9UWVBFX1JTUCAgIDB4MDQKLSNkZWZpbmUgQk5FUF9GSUxURVJfTVVMVElfQUREUl9TRVQgMHgwNQotI2RlZmluZSBCTkVQX0ZJTFRFUl9NVUxUSV9BRERSX1JTUCAweDA2CisvKiBDb250cm9sIHR5cGVzICovCisjZGVmaW5lIEJORVBfQ01EX05PVF9VTkRFUlNUT09ECQkweDAwCisjZGVmaW5lIEJORVBfU0VUVVBfQ09OTl9SRVEJCTB4MDEKKyNkZWZpbmUgQk5FUF9TRVRVUF9DT05OX1JTUAkJMHgwMgorI2RlZmluZSBCTkVQX0ZJTFRFUl9ORVRfVFlQRV9TRVQJMHgwMworI2RlZmluZSBCTkVQX0ZJTFRFUl9ORVRfVFlQRV9SU1AJMHgwNAorI2RlZmluZSBCTkVQX0ZJTFRFUl9NVUxUSV9BRERSX1NFVAkweDA1CisjZGVmaW5lIEJORVBfRklMVEVSX01VTFRJX0FERFJfUlNQCTB4MDYKIAotLy8gRXh0ZW5zaW9uIHR5cGVzCi0jZGVmaW5lIEJORVBfRVhUX0NPTlRST0wgICAgICAgICAgIDB4MDAKKy8qIEV4dGVuc2lvbiB0eXBlcyAqLworI2RlZmluZSBCTkVQX0VYVF9DT05UUk9MIDB4MDAKIAotLy8gUmVzcG9uc2UgbWVzc2FnZXMKLSNkZWZpbmUgQk5FUF9TVUNDRVNTICAgICAgICAgICAgICAgMHgwMAorLyogUmVzcG9uc2UgbWVzc2FnZXMgKi8KKyNkZWZpbmUgQk5FUF9TVUNDRVNTIDB4MDAKIAotI2RlZmluZSBCTkVQX0NPTk5fSU5WQUxJRF9EU1QgICAgICAweDAxCi0jZGVmaW5lIEJORVBfQ09OTl9JTlZBTElEX1NSQyAgICAgIDB4MDIKLSNkZWZpbmUgQk5FUF9DT05OX0lOVkFMSURfU1ZDICAgICAgMHgwMwotI2RlZmluZSBCTkVQX0NPTk5fTk9UX0FMTE9XRUQgICAgICAweDA0CisjZGVmaW5lIEJORVBfQ09OTl9JTlZBTElEX0RTVCAweDAxCisjZGVmaW5lIEJORVBfQ09OTl9JTlZBTElEX1NSQyAweDAyCisjZGVmaW5lIEJORVBfQ09OTl9JTlZBTElEX1NWQyAweDAzCisjZGVmaW5lIEJORVBfQ09OTl9OT1RfQUxMT1dFRCAweDA0CiAKLSNkZWZpbmUgQk5FUF9GSUxURVJfVU5TVVBQT1JURURfUkVRICAgIDB4MDEKLSNkZWZpbmUgQk5FUF9GSUxURVJfSU5WQUxJRF9SQU5HRSAgICAgIDB4MDIKLSNkZWZpbmUgQk5FUF9GSUxURVJfSU5WQUxJRF9NQ0FERFIgICAgIDB4MDIKLSNkZWZpbmUgQk5FUF9GSUxURVJfTElNSVRfUkVBQ0hFRCAgICAgIDB4MDMKLSNkZWZpbmUgQk5FUF9GSUxURVJfREVOSUVEX1NFQ1VSSVRZICAgIDB4MDQKKyNkZWZpbmUgQk5FUF9GSUxURVJfVU5TVVBQT1JURURfUkVRCTB4MDEKKyNkZWZpbmUgQk5FUF9GSUxURVJfSU5WQUxJRF9SQU5HRQkweDAyCisjZGVmaW5lIEJORVBfRklMVEVSX0lOVkFMSURfTUNBRERSCTB4MDIKKyNkZWZpbmUgQk5FUF9GSUxURVJfTElNSVRfUkVBQ0hFRAkweDAzCisjZGVmaW5lIEJORVBfRklMVEVSX0RFTklFRF9TRUNVUklUWQkweDA0CiAKLS8vIEwyQ0FQIHNldHRpbmdzCi0jZGVmaW5lIEJORVBfTVRVICAgICAgICAgMTY5MQotI2RlZmluZSBCTkVQX1BTTQkgMHgwZgotI2RlZmluZSBCTkVQX0ZMVVNIX1RPICAgIDB4ZmZmZgotI2RlZmluZSBCTkVQX0NPTk5FQ1RfVE8gIDE1Ci0jZGVmaW5lIEJORVBfRklMVEVSX1RPICAgMTUKKy8qIEwyQ0FQIHNldHRpbmdzICovCisjZGVmaW5lIEJORVBfTVRVCTE2OTEKKyNkZWZpbmUgQk5FUF9QU00JMHgwZgorI2RlZmluZSBCTkVQX0ZMVVNIX1RPCTB4ZmZmZgorI2RlZmluZSBCTkVQX0NPTk5FQ1RfVE8JMTUKKyNkZWZpbmUgQk5FUF9GSUxURVJfVE8JMTUKIAotLy8gSGVhZGVycwotI2RlZmluZSBCTkVQX1RZUEVfTUFTSwkgMHg3ZgotI2RlZmluZSBCTkVQX0VYVF9IRUFERVIJIDB4ODAKKy8qIEhlYWRlcnMgKi8KKyNkZWZpbmUgQk5FUF9UWVBFX01BU0sJMHg3ZgorI2RlZmluZSBCTkVQX0VYVF9IRUFERVIJMHg4MAogCiBzdHJ1Y3QgYm5lcF9zZXR1cF9jb25uX3JlcSB7Ci0JX191OCAgdHlwZTsKLQlfX3U4ICBjdHJsOwotCV9fdTggIHV1aWRfc2l6ZTsKLQlfX3U4ICBzZXJ2aWNlWzBdOworCV9fdTggdHlwZTsKKwlfX3U4IGN0cmw7CisJX191OCB1dWlkX3NpemU7CisJX191OCBzZXJ2aWNlWzBdOwogfSBfX3BhY2tlZDsKIAogc3RydWN0IGJuZXBfc2V0X2ZpbHRlcl9yZXEgewotCV9fdTggIHR5cGU7Ci0JX191OCAgY3RybDsKKwlfX3U4IHR5cGU7CisJX191OCBjdHJsOwogCV9fYmUxNiBsZW47Ci0JX191OCAgbGlzdFswXTsKKwlfX3U4IGxpc3RbMF07CiB9IF9fcGFja2VkOwogCiBzdHJ1Y3QgYm5lcF9jb250cm9sX3JzcCB7Ci0JX191OCAgdHlwZTsKLQlfX3U4ICBjdHJsOworCV9fdTggdHlwZTsKKwlfX3U4IGN0cmw7CiAJX19iZTE2IHJlc3A7CiB9IF9fcGFja2VkOwogCiBzdHJ1Y3QgYm5lcF9leHRfaGRyIHsKLQlfX3U4ICB0eXBlOwotCV9fdTggIGxlbjsKLQlfX3U4ICBkYXRhWzBdOworCV9fdTggdHlwZTsKKwlfX3U4IGxlbjsKKwlfX3U4IGRhdGFbMF07CiB9IF9fcGFja2VkOwogCiAvKiBCTkVQIGlvY3RsIGRlZmluZXMgKi8KQEAgLTExNCwxMCArMTE0LDEwIEBACiAjZGVmaW5lIEJORVBHRVRDT05OSU5GTwlfSU9SKCdCJywgMjExLCBpbnQpCiAKIHN0cnVjdCBibmVwX2Nvbm5hZGRfcmVxIHsKLQlpbnQgICBzb2NrOyAgICAgICAvLyBDb25uZWN0ZWQgc29ja2V0CisJaW50ICAgc29jazsJCS8qIENvbm5lY3RlZCBzb2NrZXQgKi8KIAlfX3UzMiBmbGFnczsKIAlfX3UxNiByb2xlOwotCWNoYXIgIGRldmljZVsxNl07IC8vIE5hbWUgb2YgdGhlIEV0aGVybmV0IGRldmljZQorCWNoYXIgIGRldmljZVsxNl07CS8qIE5hbWUgb2YgdGhlIEV0aGVybmV0IGRldmljZSAqLwogfTsKIAogc3RydWN0IGJuZXBfY29ubmRlbF9yZXEgewpAQCAtMTQ4LDE0ICsxNDgsMTQgQEAKIGludCBibmVwX2dldF9jb25ubGlzdChzdHJ1Y3QgYm5lcF9jb25ubGlzdF9yZXEgKnJlcSk7CiBpbnQgYm5lcF9nZXRfY29ubmluZm8oc3RydWN0IGJuZXBfY29ubmluZm8gKmNpKTsKIAotLy8gQk5FUCBzZXNzaW9ucworLyogQk5FUCBzZXNzaW9ucyAqLwogc3RydWN0IGJuZXBfc2Vzc2lvbiB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCiAJdW5zaWduZWQgaW50ICByb2xlOwogCXVuc2lnbmVkIGxvbmcgc3RhdGU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlhdG9taWNfdCAgICAgIGtpbGxlZDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CiAKIAlzdHJ1Y3QgZXRoaGRyIGVoOwogCXN0cnVjdCBtc2doZHIgbXNnOwpAQCAtMTczLDcgKzE3Myw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGJuZXBfbWNfaGFzaChfX3U4ICphZGRyKQogewotCXJldHVybiAoY3JjMzJfYmUofjAsIGFkZHIsIEVUSF9BTEVOKSA+PiAyNik7CisJcmV0dXJuIGNyYzMyX2JlKH4wLCBhZGRyLCBFVEhfQUxFTikgPj4gMjY7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9ibmVwL2NvcmUuYyBiL25ldC9ibHVldG9vdGgvYm5lcC9jb3JlLmMKaW5kZXggMDNkNGQxMi4uY2EzOWZjZiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9ibmVwL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2JuZXAvY29yZS5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAKICNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KQEAgLTEzMSw3ICsxMzIsOCBAQAogCQlyZXR1cm4gLUVJTFNFUTsKIAogCW4gPSBnZXRfdW5hbGlnbmVkX2JlMTYoZGF0YSk7Ci0JZGF0YSsrOyBsZW4gLT0gMjsKKwlkYXRhKys7CisJbGVuIC09IDI7CiAKIAlpZiAobGVuIDwgbikKIAkJcmV0dXJuIC1FSUxTRVE7CkBAIC0xNzYsNyArMTc4LDggQEAKIAkJcmV0dXJuIC1FSUxTRVE7CiAKIAluID0gZ2V0X3VuYWxpZ25lZF9iZTE2KGRhdGEpOwotCWRhdGEgKz0gMjsgbGVuIC09IDI7CisJZGF0YSArPSAyOworCWxlbiAtPSAyOwogCiAJaWYgKGxlbiA8IG4pCiAJCXJldHVybiAtRUlMU0VROwpAQCAtMTg3LDYgKzE5MCw4IEBACiAJbiAvPSAoRVRIX0FMRU4gKiAyKTsKIAogCWlmIChuID4gMCkgeworCQlpbnQgaTsKKwogCQlzLT5tY19maWx0ZXIgPSAwOwogCiAJCS8qIEFsd2F5cyBzZW5kIGJyb2FkY2FzdCAqLwpAQCAtMTk2LDE4ICsyMDEsMjIgQEAKIAkJZm9yICg7IG4gPiAwOyBuLS0pIHsKIAkJCXU4IGExWzZdLCAqYTI7CiAKLQkJCW1lbWNweShhMSwgZGF0YSwgRVRIX0FMRU4pOyBkYXRhICs9IEVUSF9BTEVOOwotCQkJYTIgPSBkYXRhOyBkYXRhICs9IEVUSF9BTEVOOworCQkJbWVtY3B5KGExLCBkYXRhLCBFVEhfQUxFTik7CisJCQlkYXRhICs9IEVUSF9BTEVOOworCQkJYTIgPSBkYXRhOworCQkJZGF0YSArPSBFVEhfQUxFTjsKIAogCQkJQlRfREJHKCJtYyBmaWx0ZXIgJXMgLT4gJXMiLAogCQkJCWJhdG9zdHIoKHZvaWQgKikgYTEpLCBiYXRvc3RyKCh2b2lkICopIGEyKSk7CiAKLQkJCSNkZWZpbmUgSU5DQShhKSB7IGludCBpID0gNTsgd2hpbGUgKGkgPj0wICYmICsrYVtpLS1dID09IDApOyB9Ci0KIAkJCS8qIEl0ZXJhdGUgZnJvbSBhMSB0byBhMiAqLwogCQkJc2V0X2JpdChibmVwX21jX2hhc2goYTEpLCAodWxvbmcgKikgJnMtPm1jX2ZpbHRlcik7CiAJCQl3aGlsZSAobWVtY21wKGExLCBhMiwgNikgPCAwICYmIHMtPm1jX2ZpbHRlciAhPSB+MExMKSB7Ci0JCQkJSU5DQShhMSk7CisJCQkJLyogSW5jcmVtZW50IGExICovCisJCQkJaSA9IDU7CisJCQkJd2hpbGUgKGkgPj0gMCAmJiArK2ExW2ktLV0gPT0gMCkKKwkJCQkJOworCiAJCQkJc2V0X2JpdChibmVwX21jX2hhc2goYTEpLCAodWxvbmcgKikgJnMtPm1jX2ZpbHRlcik7CiAJCQl9CiAJCX0KQEAgLTIyNyw3ICsyMzYsOCBAQAogCXU4ICBjbWQgPSAqKHU4ICopZGF0YTsKIAlpbnQgZXJyID0gMDsKIAotCWRhdGErKzsgbGVuLS07CisJZGF0YSsrOworCWxlbi0tOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIEJORVBfQ01EX05PVF9VTkRFUlNUT09EOgpAQCAtMzAyLDcgKzMxMiw2IEBACiAJRVRIX0FMRU4gKyAyLCAvKiBCTkVQX0NPTVBSRVNTRURfU1JDX09OTFkgKi8KIAlFVEhfQUxFTiArIDIgIC8qIEJORVBfQ09NUFJFU1NFRF9EU1RfT05MWSAqLwogfTsKLSNkZWZpbmUgQk5FUF9SWF9UWVBFUwkoc2l6ZW9mKF9fYm5lcF9yeF9obGVuKSAtIDEpCiAKIHN0YXRpYyBpbmxpbmUgaW50IGJuZXBfcnhfZnJhbWUoc3RydWN0IGJuZXBfc2Vzc2lvbiAqcywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTMxMiw5ICszMjEsMTAgQEAKIAogCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKLQl0eXBlID0gKih1OCAqKSBza2ItPmRhdGE7IHNrYl9wdWxsKHNrYiwgMSk7CisJdHlwZSA9ICoodTggKikgc2tiLT5kYXRhOworCXNrYl9wdWxsKHNrYiwgMSk7CiAKLQlpZiAoKHR5cGUgJiBCTkVQX1RZUEVfTUFTSykgPiBCTkVQX1JYX1RZUEVTKQorCWlmICgodHlwZSAmIEJORVBfVFlQRV9NQVNLKSA+PSBzaXplb2YoX19ibmVwX3J4X2hsZW4pKQogCQlnb3RvIGJhZGZyYW1lOwogCiAJaWYgKCh0eXBlICYgQk5FUF9UWVBFX01BU0spID09IEJORVBfQ09OVFJPTCkgewpAQCAtMzY3LDE0ICszNzcsMTQgQEAKIAogCWNhc2UgQk5FUF9DT01QUkVTU0VEX0RTVF9PTkxZOgogCQltZW1jcHkoX19za2JfcHV0KG5za2IsIEVUSF9BTEVOKSwgc2tiX21hY19oZWFkZXIoc2tiKSwKLQkJICAgICAgIEVUSF9BTEVOKTsKKwkJCQkJCQkJRVRIX0FMRU4pOwogCQltZW1jcHkoX19za2JfcHV0KG5za2IsIEVUSF9BTEVOICsgMiksIHMtPmVoLmhfc291cmNlLAotCQkgICAgICAgRVRIX0FMRU4gKyAyKTsKKwkJCQkJCQkJRVRIX0FMRU4gKyAyKTsKIAkJYnJlYWs7CiAKIAljYXNlIEJORVBfR0VORVJBTDoKIAkJbWVtY3B5KF9fc2tiX3B1dChuc2tiLCBFVEhfQUxFTiAqIDIpLCBza2JfbWFjX2hlYWRlcihza2IpLAotCQkgICAgICAgRVRIX0FMRU4gKiAyKTsKKwkJCQkJCQkJRVRIX0FMRU4gKiAyKTsKIAkJcHV0X3VuYWxpZ25lZChzLT5laC5oX3Byb3RvLCAoX19iZTE2ICopIF9fc2tiX3B1dChuc2tiLCAyKSk7CiAJCWJyZWFrOwogCX0KQEAgLTQ3MCwxNSArNDgwLDE0IEBACiAKIAlCVF9EQkcoIiIpOwogCi0JZGFlbW9uaXplKCJrYm5lcGQgJXMiLCBkZXYtPm5hbWUpOwogCXNldF91c2VyX25pY2UoY3VycmVudCwgLTE1KTsKIAogCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZ3YWl0LCBjdXJyZW50KTsKIAlhZGRfd2FpdF9xdWV1ZShza19zbGVlcChzayksICZ3YWl0KTsKLQl3aGlsZSAoIWF0b21pY19yZWFkKCZzLT5raWxsZWQpKSB7CisJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAotCQkvLyBSWAorCQkvKiBSWCAqLwogCQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSkpKSB7CiAJCQlza2Jfb3JwaGFuKHNrYik7CiAJCQlibmVwX3J4X2ZyYW1lKHMsIHNrYik7CkBAIC00ODcsNyArNDk2LDcgQEAKIAkJaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9DT05ORUNURUQpCiAJCQlicmVhazsKIAotCQkvLyBUWAorCQkvKiBUWCAqLwogCQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZzay0+c2tfd3JpdGVfcXVldWUpKSkKIAkJCWlmIChibmVwX3R4X2ZyYW1lKHMsIHNrYikpCiAJCQkJYnJlYWs7CkBAIC01NTUsOCArNTY0LDggQEAKIAogCS8qIHNlc3Npb24gc3RydWN0IGFsbG9jYXRlZCBhcyBwcml2YXRlIHBhcnQgb2YgbmV0X2RldmljZSAqLwogCWRldiA9IGFsbG9jX25ldGRldihzaXplb2Yoc3RydWN0IGJuZXBfc2Vzc2lvbiksCi0JCQkgICAoKnJlcS0+ZGV2aWNlKSA/IHJlcS0+ZGV2aWNlIDogImJuZXAlZCIsCi0JCQkgICBibmVwX25ldF9zZXR1cCk7CisJCQkJKCpyZXEtPmRldmljZSkgPyByZXEtPmRldmljZSA6ICJibmVwJWQiLAorCQkJCWJuZXBfbmV0X3NldHVwKTsKIAlpZiAoIWRldikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTU3MSw3ICs1ODAsNyBAQAogCXMgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJLyogVGhpcyBpcyByeCBoZWFkZXIgdGhlcmVmb3JlIGFkZHJlc3NlcyBhcmUgc3dhcHBlZC4KLQkgKiBpZSBlaC5oX2Rlc3QgaXMgb3VyIGxvY2FsIGFkZHJlc3MuICovCisJICogaWUuIGVoLmhfZGVzdCBpcyBvdXIgbG9jYWwgYWRkcmVzcy4gKi8KIAltZW1jcHkocy0+ZWguaF9kZXN0LCAgICZzcmMsIEVUSF9BTEVOKTsKIAltZW1jcHkocy0+ZWguaF9zb3VyY2UsICZkc3QsIEVUSF9BTEVOKTsKIAltZW1jcHkoZGV2LT5kZXZfYWRkciwgcy0+ZWguaF9kZXN0LCBFVEhfQUxFTik7CkBAIC01OTcsMTcgKzYwNiwxNyBAQAogCVNFVF9ORVRERVZfREVWVFlQRShkZXYsICZibmVwX3R5cGUpOwogCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0JaWYgKGVycikgeworCWlmIChlcnIpCiAJCWdvdG8gZmFpbGVkOwotCX0KIAogCV9fYm5lcF9saW5rX3Nlc3Npb24ocyk7CiAKLQllcnIgPSBrZXJuZWxfdGhyZWFkKGJuZXBfc2Vzc2lvbiwgcywgQ0xPTkVfS0VSTkVMKTsKLQlpZiAoZXJyIDwgMCkgeworCXMtPnRhc2sgPSBrdGhyZWFkX3J1bihibmVwX3Nlc3Npb24sIHMsICJrYm5lcGQgJXMiLCBkZXYtPm5hbWUpOworCWlmIChJU19FUlIocy0+dGFzaykpIHsKIAkJLyogU2Vzc2lvbiB0aHJlYWQgc3RhcnQgZmFpbGVkLCBnb3R0YSBjbGVhbnVwLiAqLwogCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCQlfX2JuZXBfdW5saW5rX3Nlc3Npb24ocyk7CisJCWVyciA9IFBUUl9FUlIocy0+dGFzayk7CiAJCWdvdG8gZmFpbGVkOwogCX0KIApAQCAtNjMxLDE1ICs2NDAsOSBAQAogCWRvd25fcmVhZCgmYm5lcF9zZXNzaW9uX3NlbSk7CiAKIAlzID0gX19ibmVwX2dldF9zZXNzaW9uKHJlcS0+ZHN0KTsKLQlpZiAocykgewotCQkvKiBXYWtldXAgdXNlci1zcGFjZSB3aGljaCBpcyBwb2xsaW5nIGZvciBzb2NrZXQgZXJyb3JzLgotCQkgKiBUaGlzIGlzIHRlbXBvcmFyeSBoYWNrIHVudGlsIHdlIGhhdmUgc2h1dGRvd24gaW4gTDJDQVAgKi8KLQkJcy0+c29jay0+c2stPnNrX2VyciA9IEVVTkFUQ0g7Ci0KLQkJLyogS2lsbCBzZXNzaW9uIHRocmVhZCAqLwotCQlhdG9taWNfaW5jKCZzLT5raWxsZWQpOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoc2tfc2xlZXAocy0+c29jay0+c2spKTsKLQl9IGVsc2UKKwlpZiAocykKKwkJa3RocmVhZF9zdG9wKHMtPnRhc2spOworCWVsc2UKIAkJZXJyID0gLUVOT0VOVDsKIAogCXVwX3JlYWQoJmJuZXBfc2Vzc2lvbl9zZW0pOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9ibmVwL3NvY2suYyBiL25ldC9ibHVldG9vdGgvYm5lcC9zb2NrLmMKaW5kZXggZDkzNWRhNy4uMTc4MDBiMSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9ibmVwL3NvY2suYworKysgYi9uZXQvYmx1ZXRvb3RoL2JuZXAvc29jay5jCkBAIC0zOSwxMCArMzksMTAgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgImJuZXAuaCIKIApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9jbXRwL2NhcGkuYyBiL25ldC9ibHVldG9vdGgvY210cC9jYXBpLmMKaW5kZXggNjdjZmY4MTAuLjc0NDIzM2MgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvY210cC9jYXBpLmMKKysrIGIvbmV0L2JsdWV0b290aC9jbXRwL2NhcGkuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KIAogI2luY2x1ZGUgPGxpbnV4L2lzZG4vY2FwaWxsaS5oPgpAQCAtMTQzLDcgKzE0NCw3IEBACiAKIAlza2JfcXVldWVfdGFpbCgmc2Vzc2lvbi0+dHJhbnNtaXQsIHNrYik7CiAKLQljbXRwX3NjaGVkdWxlKHNlc3Npb24pOworCXdha2VfdXBfaW50ZXJydXB0aWJsZShza19zbGVlcChzZXNzaW9uLT5zb2NrLT5zaykpOwogfQogCiBzdGF0aWMgdm9pZCBjbXRwX3NlbmRfaW50ZXJvcG1zZyhzdHJ1Y3QgY210cF9zZXNzaW9uICpzZXNzaW9uLApAQCAtMzg2LDggKzM4Nyw3IEBACiAKIAljYXBpX2N0cl9kb3duKGN0cmwpOwogCi0JYXRvbWljX2luYygmc2Vzc2lvbi0+dGVybWluYXRlKTsKLQljbXRwX3NjaGVkdWxlKHNlc3Npb24pOworCWt0aHJlYWRfc3RvcChzZXNzaW9uLT50YXNrKTsKIH0KIAogc3RhdGljIHZvaWQgY210cF9yZWdpc3Rlcl9hcHBsKHN0cnVjdCBjYXBpX2N0ciAqY3RybCwgX191MTYgYXBwbCwgY2FwaV9yZWdpc3Rlcl9wYXJhbXMgKnJwKQpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9jbXRwL2NtdHAuaCBiL25ldC9ibHVldG9vdGgvY210cC9jbXRwLmgKaW5kZXggNzg1ZTc5ZS4uZGI0M2I1NCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9jbXRwL2NtdHAuaAorKysgYi9uZXQvYmx1ZXRvb3RoL2NtdHAvY210cC5oCkBAIC0zNyw3ICszNyw3IEBACiAjZGVmaW5lIENNVFBfTE9PUEJBQ0sJMAogCiBzdHJ1Y3QgY210cF9jb25uYWRkX3JlcSB7Ci0JaW50ICAgc29jazsJLy8gQ29ubmVjdGVkIHNvY2tldAorCWludCAgIHNvY2s7CS8qIENvbm5lY3RlZCBzb2NrZXQgKi8KIAlfX3UzMiBmbGFnczsKIH07CiAKQEAgLTgxLDcgKzgxLDcgQEAKIAogCWNoYXIgbmFtZVtCVE5BTVNJWl07CiAKLQlhdG9taWNfdCB0ZXJtaW5hdGU7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwogCiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKIApAQCAtMTIxLDEzICsxMjEsNiBAQAogCiB2b2lkIGNtdHBfcmVjdl9jYXBpbXNnKHN0cnVjdCBjbXRwX3Nlc3Npb24gKnNlc3Npb24sIHN0cnVjdCBza19idWZmICpza2IpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgY210cF9zY2hlZHVsZShzdHJ1Y3QgY210cF9zZXNzaW9uICpzZXNzaW9uKQotewotCXN0cnVjdCBzb2NrICpzayA9IHNlc3Npb24tPnNvY2stPnNrOwotCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKHNrX3NsZWVwKHNrKSk7Ci19Ci0KIC8qIENNVFAgaW5pdCBkZWZpbmVzICovCiBpbnQgY210cF9pbml0X3NvY2tldHModm9pZCk7CiB2b2lkIGNtdHBfY2xlYW51cF9zb2NrZXRzKHZvaWQpOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9jbXRwL2NvcmUuYyBiL25ldC9ibHVldG9vdGgvY210cC9jb3JlLmMKaW5kZXggOTY0ZWE5MS4uYzViMTFhZiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9jbXRwL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2NtdHAvY29yZS5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogCiAjaW5jbHVkZSA8bGludXgvaXNkbi9jYXBpbGxpLmg+CkBAIC0yMzUsOSArMjM2LDEyIEBACiAKIAkJc2l6ZSA9IG1pbl90KHVpbnQsICgodGFpbCA8IDI1OCkgPyAodGFpbCAtIDIpIDogKHRhaWwgLSAzKSksIHNrYi0+bGVuKTsKIAotCQlpZiAoKHNjYi0+aWQgPCAwKSAmJiAoKHNjYi0+aWQgPSBjbXRwX2FsbG9jX2Jsb2NrX2lkKHNlc3Npb24pKSA8IDApKSB7Ci0JCQlza2JfcXVldWVfaGVhZCgmc2Vzc2lvbi0+dHJhbnNtaXQsIHNrYik7Ci0JCQlicmVhazsKKwkJaWYgKHNjYi0+aWQgPCAwKSB7CisJCQlzY2ItPmlkID0gY210cF9hbGxvY19ibG9ja19pZChzZXNzaW9uKTsKKwkJCWlmIChzY2ItPmlkIDwgMCkgeworCQkJCXNrYl9xdWV1ZV9oZWFkKCZzZXNzaW9uLT50cmFuc21pdCwgc2tiKTsKKwkJCQlicmVhazsKKwkJCX0KIAkJfQogCiAJCWlmIChzaXplIDwgMjU2KSB7CkBAIC0yODQsMTIgKzI4OCwxMSBAQAogCiAJQlRfREJHKCJzZXNzaW9uICVwIiwgc2Vzc2lvbik7CiAKLQlkYWVtb25pemUoImtjbXRwZF9jdHJfJWQiLCBzZXNzaW9uLT5udW0pOwogCXNldF91c2VyX25pY2UoY3VycmVudCwgLTE1KTsKIAogCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZ3YWl0LCBjdXJyZW50KTsKIAlhZGRfd2FpdF9xdWV1ZShza19zbGVlcChzayksICZ3YWl0KTsKLQl3aGlsZSAoIWF0b21pY19yZWFkKCZzZXNzaW9uLT50ZXJtaW5hdGUpKSB7CisJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAogCQlpZiAoc2stPnNrX3N0YXRlICE9IEJUX0NPTk5FQ1RFRCkKQEAgLTM0Myw3ICszNDYsOCBAQAogCiAJYmFjcHkoJnNlc3Npb24tPmJkYWRkciwgJmJ0X3NrKHNvY2stPnNrKS0+ZHN0KTsKIAotCXNlc3Npb24tPm10dSA9IG1pbl90KHVpbnQsIGwyY2FwX3BpKHNvY2stPnNrKS0+b210dSwgbDJjYXBfcGkoc29jay0+c2spLT5pbXR1KTsKKwlzZXNzaW9uLT5tdHUgPSBtaW5fdCh1aW50LCBsMmNhcF9waShzb2NrLT5zayktPmNoYW4tPm9tdHUsCisJCQkJCWwyY2FwX3BpKHNvY2stPnNrKS0+Y2hhbi0+aW10dSk7CiAKIAlCVF9EQkcoIm10dSAlZCIsIHNlc3Npb24tPm10dSk7CiAKQEAgLTM2Nyw5ICszNzEsMTIgQEAKIAogCV9fY210cF9saW5rX3Nlc3Npb24oc2Vzc2lvbik7CiAKLQllcnIgPSBrZXJuZWxfdGhyZWFkKGNtdHBfc2Vzc2lvbiwgc2Vzc2lvbiwgQ0xPTkVfS0VSTkVMKTsKLQlpZiAoZXJyIDwgMCkKKwlzZXNzaW9uLT50YXNrID0ga3RocmVhZF9ydW4oY210cF9zZXNzaW9uLCBzZXNzaW9uLCAia2NtdHBkX2N0cl8lZCIsCisJCQkJCQkJCXNlc3Npb24tPm51bSk7CisJaWYgKElTX0VSUihzZXNzaW9uLT50YXNrKSkgeworCQllcnIgPSBQVFJfRVJSKHNlc3Npb24tPnRhc2spOwogCQlnb3RvIHVubGluazsKKwl9CiAKIAlpZiAoIShzZXNzaW9uLT5mbGFncyAmICgxIDw8IENNVFBfTE9PUEJBQ0spKSkgewogCQllcnIgPSBjbXRwX2F0dGFjaF9kZXZpY2Uoc2Vzc2lvbik7CkBAIC00MDYsOSArNDEzLDggQEAKIAkJLyogRmx1c2ggdGhlIHRyYW5zbWl0IHF1ZXVlICovCiAJCXNrYl9xdWV1ZV9wdXJnZSgmc2Vzc2lvbi0+dHJhbnNtaXQpOwogCi0JCS8qIEtpbGwgc2Vzc2lvbiB0aHJlYWQgKi8KLQkJYXRvbWljX2luYygmc2Vzc2lvbi0+dGVybWluYXRlKTsKLQkJY210cF9zY2hlZHVsZShzZXNzaW9uKTsKKwkJLyogU3RvcCBzZXNzaW9uIHRocmVhZCAqLworCQlrdGhyZWFkX3N0b3Aoc2Vzc2lvbi0+dGFzayk7CiAJfSBlbHNlCiAJCWVyciA9IC1FTk9FTlQ7CiAKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvY210cC9zb2NrLmMgYi9uZXQvYmx1ZXRvb3RoL2NtdHAvc29jay5jCmluZGV4IDdlYTE5NzkuLjNmMmRkNWMgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvY210cC9zb2NrLmMKKysrIGIvbmV0L2JsdWV0b290aC9jbXRwL3NvY2suYwpAQCAtMzQsMTIgKzM0LDEyIEBACiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogCiAjaW5jbHVkZSA8bGludXgvaXNkbi9jYXBpbGxpLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgImNtdHAuaCIKIApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jIGIvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jCmluZGV4IDdhNmY1NmIuLjMxNjMzMzAgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMKQEAgLTI2OSw2ICsyNjksMTkgQEAKIAloY2lfY29ubl9lbnRlcl9zbmlmZl9tb2RlKGNvbm4pOwogfQogCitzdGF0aWMgdm9pZCBoY2lfY29ubl9hdXRvX2FjY2VwdCh1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4gPSAodm9pZCAqKSBhcmc7CisJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBjb25uLT5oZGV2OworCisJaGNpX2Rldl9sb2NrKGhkZXYpOworCisJaGNpX3NlbmRfY21kKGhkZXYsIEhDSV9PUF9VU0VSX0NPTkZJUk1fUkVQTFksIHNpemVvZihjb25uLT5kc3QpLAorCQkJCQkJCQkmY29ubi0+ZHN0KTsKKworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOworfQorCiBzdHJ1Y3QgaGNpX2Nvbm4gKmhjaV9jb25uX2FkZChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgaW50IHR5cGUsIGJkYWRkcl90ICpkc3QpCiB7CiAJc3RydWN0IGhjaV9jb25uICpjb25uOwpAQCAtMjg3LDYgKzMwMCw3IEBACiAJY29ubi0+YXV0aF90eXBlID0gSENJX0FUX0dFTkVSQUxfQk9ORElORzsKIAljb25uLT5pb19jYXBhYmlsaXR5ID0gaGRldi0+aW9fY2FwYWJpbGl0eTsKIAljb25uLT5yZW1vdGVfYXV0aCA9IDB4ZmY7CisJY29ubi0+a2V5X3R5cGUgPSAweGZmOwogCiAJY29ubi0+cG93ZXJfc2F2ZSA9IDE7CiAJY29ubi0+ZGlzY190aW1lb3V0ID0gSENJX0RJU0NPTk5fVElNRU9VVDsKQEAgLTMxMSw2ICszMjUsOCBAQAogCiAJc2V0dXBfdGltZXIoJmNvbm4tPmRpc2NfdGltZXIsIGhjaV9jb25uX3RpbWVvdXQsICh1bnNpZ25lZCBsb25nKWNvbm4pOwogCXNldHVwX3RpbWVyKCZjb25uLT5pZGxlX3RpbWVyLCBoY2lfY29ubl9pZGxlLCAodW5zaWduZWQgbG9uZyljb25uKTsKKwlzZXR1cF90aW1lcigmY29ubi0+YXV0b19hY2NlcHRfdGltZXIsIGhjaV9jb25uX2F1dG9fYWNjZXB0LAorCQkJCQkJCSh1bnNpZ25lZCBsb25nKSBjb25uKTsKIAogCWF0b21pY19zZXQoJmNvbm4tPnJlZmNudCwgMCk7CiAKQEAgLTM0MSw2ICszNTcsOCBAQAogCiAJZGVsX3RpbWVyKCZjb25uLT5kaXNjX3RpbWVyKTsKIAorCWRlbF90aW1lcigmY29ubi0+YXV0b19hY2NlcHRfdGltZXIpOworCiAJaWYgKGNvbm4tPnR5cGUgPT0gQUNMX0xJTkspIHsKIAkJc3RydWN0IGhjaV9jb25uICpzY28gPSBjb25uLT5saW5rOwogCQlpZiAoc2NvKQpAQCAtNTM1LDM2ICs1NTMsOTMgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogRW5jcnlwdCB0aGUgdGhlIGxpbmsgKi8KK3N0YXRpYyB2b2lkIGhjaV9jb25uX2VuY3J5cHQoc3RydWN0IGhjaV9jb25uICpjb25uKQoreworCUJUX0RCRygiY29ubiAlcCIsIGNvbm4pOworCisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEhDSV9DT05OX0VOQ1JZUFRfUEVORCwgJmNvbm4tPnBlbmQpKSB7CisJCXN0cnVjdCBoY2lfY3Bfc2V0X2Nvbm5fZW5jcnlwdCBjcDsKKwkJY3AuaGFuZGxlICA9IGNwdV90b19sZTE2KGNvbm4tPmhhbmRsZSk7CisJCWNwLmVuY3J5cHQgPSAweDAxOworCQloY2lfc2VuZF9jbWQoY29ubi0+aGRldiwgSENJX09QX1NFVF9DT05OX0VOQ1JZUFQsIHNpemVvZihjcCksCisJCQkJCQkJCQkmY3ApOworCX0KK30KKwogLyogRW5hYmxlIHNlY3VyaXR5ICovCiBpbnQgaGNpX2Nvbm5fc2VjdXJpdHkoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHNlY19sZXZlbCwgX191OCBhdXRoX3R5cGUpCiB7CiAJQlRfREJHKCJjb25uICVwIiwgY29ubik7CiAKKwkvKiBGb3Igc2RwIHdlIGRvbid0IG5lZWQgdGhlIGxpbmsga2V5LiAqLwogCWlmIChzZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfU0RQKQogCQlyZXR1cm4gMTsKIAorCS8qIEZvciBub24gMi4xIGRldmljZXMgYW5kIGxvdyBzZWN1cml0eSBsZXZlbCB3ZSBkb24ndCBuZWVkIHRoZSBsaW5rCisJICAga2V5LiAqLwogCWlmIChzZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfTE9XICYmCiAJCQkJKCFjb25uLT5zc3BfbW9kZSB8fCAhY29ubi0+aGRldi0+c3NwX21vZGUpKQogCQlyZXR1cm4gMTsKIAotCWlmIChjb25uLT5saW5rX21vZGUgJiBIQ0lfTE1fRU5DUllQVCkKLQkJcmV0dXJuIGhjaV9jb25uX2F1dGgoY29ubiwgc2VjX2xldmVsLCBhdXRoX3R5cGUpOworCS8qIEZvciBvdGhlciBzZWN1cml0eSBsZXZlbHMgd2UgbmVlZCB0aGUgbGluayBrZXkuICovCisJaWYgKCEoY29ubi0+bGlua19tb2RlICYgSENJX0xNX0FVVEgpKQorCQlnb3RvIGF1dGg7CiAKKwkvKiBBbiBhdXRoZW50aWNhdGVkIGNvbWJpbmF0aW9uIGtleSBoYXMgc3VmZmljaWVudCBzZWN1cml0eSBmb3IgYW55CisJICAgc2VjdXJpdHkgbGV2ZWwuICovCisJaWYgKGNvbm4tPmtleV90eXBlID09IEhDSV9MS19BVVRIX0NPTUJJTkFUSU9OKQorCQlnb3RvIGVuY3J5cHQ7CisKKwkvKiBBbiB1bmF1dGhlbnRpY2F0ZWQgY29tYmluYXRpb24ga2V5IGhhcyBzdWZmaWNpZW50IHNlY3VyaXR5IGZvcgorCSAgIHNlY3VyaXR5IGxldmVsIDEgYW5kIDIuICovCisJaWYgKGNvbm4tPmtleV90eXBlID09IEhDSV9MS19VTkFVVEhfQ09NQklOQVRJT04gJiYKKwkJCShzZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfTUVESVVNIHx8CisJCQlzZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfTE9XKSkKKwkJZ290byBlbmNyeXB0OworCisJLyogQSBjb21iaW5hdGlvbiBrZXkgaGFzIGFsd2F5cyBzdWZmaWNpZW50IHNlY3VyaXR5IGZvciB0aGUgc2VjdXJpdHkKKwkgICBsZXZlbHMgMSBvciAyLiBIaWdoIHNlY3VyaXR5IGxldmVsIHJlcXVpcmVzIHRoZSBjb21iaW5hdGlvbiBrZXkKKwkgICBpcyBnZW5lcmF0ZWQgdXNpbmcgbWF4aW11bSBQSU4gY29kZSBsZW5ndGggKDE2KS4KKwkgICBGb3IgcHJlIDIuMSB1bml0cy4gKi8KKwlpZiAoY29ubi0+a2V5X3R5cGUgPT0gSENJX0xLX0NPTUJJTkFUSU9OICYmCisJCQkoc2VjX2xldmVsICE9IEJUX1NFQ1VSSVRZX0hJR0ggfHwKKwkJCWNvbm4tPnBpbl9sZW5ndGggPT0gMTYpKQorCQlnb3RvIGVuY3J5cHQ7CisKK2F1dGg6CiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoSENJX0NPTk5fRU5DUllQVF9QRU5ELCAmY29ubi0+cGVuZCkpCiAJCXJldHVybiAwOwogCi0JaWYgKGhjaV9jb25uX2F1dGgoY29ubiwgc2VjX2xldmVsLCBhdXRoX3R5cGUpKSB7Ci0JCXN0cnVjdCBoY2lfY3Bfc2V0X2Nvbm5fZW5jcnlwdCBjcDsKLQkJY3AuaGFuZGxlICA9IGNwdV90b19sZTE2KGNvbm4tPmhhbmRsZSk7Ci0JCWNwLmVuY3J5cHQgPSAxOwotCQloY2lfc2VuZF9jbWQoY29ubi0+aGRldiwgSENJX09QX1NFVF9DT05OX0VOQ1JZUFQsCi0JCQkJCQkJc2l6ZW9mKGNwKSwgJmNwKTsKLQl9CisJaGNpX2Nvbm5fYXV0aChjb25uLCBzZWNfbGV2ZWwsIGF1dGhfdHlwZSk7CisJcmV0dXJuIDA7CiAKK2VuY3J5cHQ6CisJaWYgKGNvbm4tPmxpbmtfbW9kZSAmIEhDSV9MTV9FTkNSWVBUKQorCQlyZXR1cm4gMTsKKworCWhjaV9jb25uX2VuY3J5cHQoY29ubik7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGhjaV9jb25uX3NlY3VyaXR5KTsKIAorLyogQ2hlY2sgc2VjdXJlIGxpbmsgcmVxdWlyZW1lbnQgKi8KK2ludCBoY2lfY29ubl9jaGVja19zZWN1cmUoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHNlY19sZXZlbCkKK3sKKwlCVF9EQkcoImNvbm4gJXAiLCBjb25uKTsKKworCWlmIChzZWNfbGV2ZWwgIT0gQlRfU0VDVVJJVFlfSElHSCkKKwkJcmV0dXJuIDE7IC8qIEFjY2VwdCBpZiBub24tc2VjdXJlIGlzIHJlcXVpcmVkICovCisKKwlpZiAoY29ubi0+a2V5X3R5cGUgPT0gSENJX0xLX0FVVEhfQ09NQklOQVRJT04gfHwKKwkJCShjb25uLT5rZXlfdHlwZSA9PSBIQ0lfTEtfQ09NQklOQVRJT04gJiYKKwkJCWNvbm4tPnBpbl9sZW5ndGggPT0gMTYpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOyAvKiBSZWplY3Qgbm90IHNlY3VyZSBsaW5rICovCit9CitFWFBPUlRfU1lNQk9MKGhjaV9jb25uX2NoZWNrX3NlY3VyZSk7CisKIC8qIENoYW5nZSBsaW5rIGtleSAqLwogaW50IGhjaV9jb25uX2NoYW5nZV9saW5rX2tleShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pCiB7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKaW5kZXggYjVhOGFmYy4uODE1MjY5YiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYwpAQCAtNTYsNyArNTYsNiBAQAogc3RhdGljIHZvaWQgaGNpX2NtZF90YXNrKHVuc2lnbmVkIGxvbmcgYXJnKTsKIHN0YXRpYyB2b2lkIGhjaV9yeF90YXNrKHVuc2lnbmVkIGxvbmcgYXJnKTsKIHN0YXRpYyB2b2lkIGhjaV90eF90YXNrKHVuc2lnbmVkIGxvbmcgYXJnKTsKLXN0YXRpYyB2b2lkIGhjaV9ub3RpZnkoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGludCBldmVudCk7CiAKIHN0YXRpYyBERUZJTkVfUldMT0NLKGhjaV90YXNrX2xvY2spOwogCkBAIC0xMDIxLDE4ICsxMDIwLDU0IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLWludCBoY2lfYWRkX2xpbmtfa2V5KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBpbnQgbmV3X2tleSwgYmRhZGRyX3QgKmJkYWRkciwKLQkJCQkJCXU4ICp2YWwsIHU4IHR5cGUsIHU4IHBpbl9sZW4pCitzdGF0aWMgaW50IGhjaV9wZXJzaXN0ZW50X2tleShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IGhjaV9jb25uICpjb25uLAorCQkJCQkJdTgga2V5X3R5cGUsIHU4IG9sZF9rZXlfdHlwZSkKK3sKKwkvKiBMZWdhY3kga2V5ICovCisJaWYgKGtleV90eXBlIDwgMHgwMykKKwkJcmV0dXJuIDE7CisKKwkvKiBEZWJ1ZyBrZXlzIGFyZSBpbnNlY3VyZSBzbyBkb24ndCBzdG9yZSB0aGVtIHBlcnNpc3RlbnRseSAqLworCWlmIChrZXlfdHlwZSA9PSBIQ0lfTEtfREVCVUdfQ09NQklOQVRJT04pCisJCXJldHVybiAwOworCisJLyogQ2hhbmdlZCBjb21iaW5hdGlvbiBrZXkgYW5kIHRoZXJlJ3Mgbm8gcHJldmlvdXMgb25lICovCisJaWYgKGtleV90eXBlID09IEhDSV9MS19DSEFOR0VEX0NPTUJJTkFUSU9OICYmIG9sZF9rZXlfdHlwZSA9PSAweGZmKQorCQlyZXR1cm4gMDsKKworCS8qIFNlY3VyaXR5IG1vZGUgMyBjYXNlICovCisJaWYgKCFjb25uKQorCQlyZXR1cm4gMTsKKworCS8qIE5laXRoZXIgbG9jYWwgbm9yIHJlbW90ZSBzaWRlIGhhZCBuby1ib25kaW5nIGFzIHJlcXVpcmVtZW50ICovCisJaWYgKGNvbm4tPmF1dGhfdHlwZSA+IDB4MDEgJiYgY29ubi0+cmVtb3RlX2F1dGggPiAweDAxKQorCQlyZXR1cm4gMTsKKworCS8qIExvY2FsIHNpZGUgaGFkIGRlZGljYXRlZCBib25kaW5nIGFzIHJlcXVpcmVtZW50ICovCisJaWYgKGNvbm4tPmF1dGhfdHlwZSA9PSAweDAyIHx8IGNvbm4tPmF1dGhfdHlwZSA9PSAweDAzKQorCQlyZXR1cm4gMTsKKworCS8qIFJlbW90ZSBzaWRlIGhhZCBkZWRpY2F0ZWQgYm9uZGluZyBhcyByZXF1aXJlbWVudCAqLworCWlmIChjb25uLT5yZW1vdGVfYXV0aCA9PSAweDAyIHx8IGNvbm4tPnJlbW90ZV9hdXRoID09IDB4MDMpCisJCXJldHVybiAxOworCisJLyogSWYgbm9uZSBvZiB0aGUgYWJvdmUgY3JpdGVyaWEgbWF0Y2gsIHRoZW4gZG9uJ3Qgc3RvcmUgdGhlIGtleQorCSAqIHBlcnNpc3RlbnRseSAqLworCXJldHVybiAwOworfQorCitpbnQgaGNpX2FkZF9saW5rX2tleShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IGhjaV9jb25uICpjb25uLCBpbnQgbmV3X2tleSwKKwkJCQliZGFkZHJfdCAqYmRhZGRyLCB1OCAqdmFsLCB1OCB0eXBlLCB1OCBwaW5fbGVuKQogewogCXN0cnVjdCBsaW5rX2tleSAqa2V5LCAqb2xkX2tleTsKLQl1OCBvbGRfa2V5X3R5cGU7CisJdTggb2xkX2tleV90eXBlLCBwZXJzaXN0ZW50OwogCiAJb2xkX2tleSA9IGhjaV9maW5kX2xpbmtfa2V5KGhkZXYsIGJkYWRkcik7CiAJaWYgKG9sZF9rZXkpIHsKIAkJb2xkX2tleV90eXBlID0gb2xkX2tleS0+dHlwZTsKIAkJa2V5ID0gb2xkX2tleTsKIAl9IGVsc2UgewotCQlvbGRfa2V5X3R5cGUgPSAweGZmOworCQlvbGRfa2V5X3R5cGUgPSBjb25uID8gY29ubi0+a2V5X3R5cGUgOiAweGZmOwogCQlrZXkgPSBremFsbG9jKHNpemVvZigqa2V5KSwgR0ZQX0FUT01JQyk7CiAJCWlmICgha2V5KQogCQkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMDQxLDE2ICsxMDc2LDM3IEBACiAKIAlCVF9EQkcoIiVzIGtleSBmb3IgJXMgdHlwZSAldSIsIGhkZXYtPm5hbWUsIGJhdG9zdHIoYmRhZGRyKSwgdHlwZSk7CiAKKwkvKiBTb21lIGJ1Z2d5IGNvbnRyb2xsZXIgY29tYmluYXRpb25zIGdlbmVyYXRlIGEgY2hhbmdlZAorCSAqIGNvbWJpbmF0aW9uIGtleSBmb3IgbGVnYWN5IHBhaXJpbmcgZXZlbiB3aGVuIHRoZXJlJ3Mgbm8KKwkgKiBwcmV2aW91cyBrZXkgKi8KKwlpZiAodHlwZSA9PSBIQ0lfTEtfQ0hBTkdFRF9DT01CSU5BVElPTiAmJgorCQkJCQkoIWNvbm4gfHwgY29ubi0+cmVtb3RlX2F1dGggPT0gMHhmZikgJiYKKwkJCQkJb2xkX2tleV90eXBlID09IDB4ZmYpIHsKKwkJdHlwZSA9IEhDSV9MS19DT01CSU5BVElPTjsKKwkJaWYgKGNvbm4pCisJCQljb25uLT5rZXlfdHlwZSA9IHR5cGU7CisJfQorCiAJYmFjcHkoJmtleS0+YmRhZGRyLCBiZGFkZHIpOwogCW1lbWNweShrZXktPnZhbCwgdmFsLCAxNik7Ci0Ja2V5LT50eXBlID0gdHlwZTsKIAlrZXktPnBpbl9sZW4gPSBwaW5fbGVuOwogCi0JaWYgKG5ld19rZXkpCi0JCW1nbXRfbmV3X2tleShoZGV2LT5pZCwga2V5LCBvbGRfa2V5X3R5cGUpOwotCi0JaWYgKHR5cGUgPT0gMHgwNikKKwlpZiAodHlwZSA9PSBIQ0lfTEtfQ0hBTkdFRF9DT01CSU5BVElPTikKIAkJa2V5LT50eXBlID0gb2xkX2tleV90eXBlOworCWVsc2UKKwkJa2V5LT50eXBlID0gdHlwZTsKKworCWlmICghbmV3X2tleSkKKwkJcmV0dXJuIDA7CisKKwlwZXJzaXN0ZW50ID0gaGNpX3BlcnNpc3RlbnRfa2V5KGhkZXYsIGNvbm4sIHR5cGUsIG9sZF9rZXlfdHlwZSk7CisKKwltZ210X25ld19rZXkoaGRldi0+aWQsIGtleSwgcGVyc2lzdGVudCk7CisKKwlpZiAoIXBlcnNpc3RlbnQpIHsKKwkJbGlzdF9kZWwoJmtleS0+bGlzdCk7CisJCWtmcmVlKGtleSk7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMDgyLDYgKzExMzgsNzAgQEAKIAl0YXNrbGV0X3NjaGVkdWxlKCZoZGV2LT5jbWRfdGFzayk7CiB9CiAKK3N0cnVjdCBvb2JfZGF0YSAqaGNpX2ZpbmRfcmVtb3RlX29vYl9kYXRhKHN0cnVjdCBoY2lfZGV2ICpoZGV2LAorCQkJCQkJCWJkYWRkcl90ICpiZGFkZHIpCit7CisJc3RydWN0IG9vYl9kYXRhICpkYXRhOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkYXRhLCAmaGRldi0+cmVtb3RlX29vYl9kYXRhLCBsaXN0KQorCQlpZiAoYmFjbXAoYmRhZGRyLCAmZGF0YS0+YmRhZGRyKSA9PSAwKQorCQkJcmV0dXJuIGRhdGE7CisKKwlyZXR1cm4gTlVMTDsKK30KKworaW50IGhjaV9yZW1vdmVfcmVtb3RlX29vYl9kYXRhKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBiZGFkZHJfdCAqYmRhZGRyKQoreworCXN0cnVjdCBvb2JfZGF0YSAqZGF0YTsKKworCWRhdGEgPSBoY2lfZmluZF9yZW1vdGVfb29iX2RhdGEoaGRldiwgYmRhZGRyKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRU5PRU5UOworCisJQlRfREJHKCIlcyByZW1vdmluZyAlcyIsIGhkZXYtPm5hbWUsIGJhdG9zdHIoYmRhZGRyKSk7CisKKwlsaXN0X2RlbCgmZGF0YS0+bGlzdCk7CisJa2ZyZWUoZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGhjaV9yZW1vdGVfb29iX2RhdGFfY2xlYXIoc3RydWN0IGhjaV9kZXYgKmhkZXYpCit7CisJc3RydWN0IG9vYl9kYXRhICpkYXRhLCAqbjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkYXRhLCBuLCAmaGRldi0+cmVtb3RlX29vYl9kYXRhLCBsaXN0KSB7CisJCWxpc3RfZGVsKCZkYXRhLT5saXN0KTsKKwkJa2ZyZWUoZGF0YSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBoY2lfYWRkX3JlbW90ZV9vb2JfZGF0YShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgYmRhZGRyX3QgKmJkYWRkciwgdTggKmhhc2gsCisJCQkJCQkJCXU4ICpyYW5kb21pemVyKQoreworCXN0cnVjdCBvb2JfZGF0YSAqZGF0YTsKKworCWRhdGEgPSBoY2lfZmluZF9yZW1vdGVfb29iX2RhdGEoaGRldiwgYmRhZGRyKTsKKworCWlmICghZGF0YSkgeworCQlkYXRhID0ga21hbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFkYXRhKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJYmFjcHkoJmRhdGEtPmJkYWRkciwgYmRhZGRyKTsKKwkJbGlzdF9hZGQoJmRhdGEtPmxpc3QsICZoZGV2LT5yZW1vdGVfb29iX2RhdGEpOworCX0KKworCW1lbWNweShkYXRhLT5oYXNoLCBoYXNoLCBzaXplb2YoZGF0YS0+aGFzaCkpOworCW1lbWNweShkYXRhLT5yYW5kb21pemVyLCByYW5kb21pemVyLCBzaXplb2YoZGF0YS0+cmFuZG9taXplcikpOworCisJQlRfREJHKCIlcyBmb3IgJXMiLCBoZGV2LT5uYW1lLCBiYXRvc3RyKGJkYWRkcikpOworCisJcmV0dXJuIDA7Cit9CisKIC8qIFJlZ2lzdGVyIEhDSSBkZXZpY2UgKi8KIGludCBoY2lfcmVnaXN0ZXJfZGV2KHN0cnVjdCBoY2lfZGV2ICpoZGV2KQogewpAQCAtMTE0Niw2ICsxMjY2LDggQEAKIAogCUlOSVRfTElTVF9IRUFEKCZoZGV2LT5saW5rX2tleXMpOwogCisJSU5JVF9MSVNUX0hFQUQoJmhkZXYtPnJlbW90ZV9vb2JfZGF0YSk7CisKIAlJTklUX1dPUksoJmhkZXYtPnBvd2VyX29uLCBoY2lfcG93ZXJfb24pOwogCUlOSVRfV09SSygmaGRldi0+cG93ZXJfb2ZmLCBoY2lfcG93ZXJfb2ZmKTsKIAlzZXR1cF90aW1lcigmaGRldi0+b2ZmX3RpbWVyLCBoY2lfYXV0b19vZmYsICh1bnNpZ25lZCBsb25nKSBoZGV2KTsKQEAgLTEyMjUsNiArMTM0Nyw3IEBACiAJaGNpX2JsYWNrbGlzdF9jbGVhcihoZGV2KTsKIAloY2lfdXVpZHNfY2xlYXIoaGRldik7CiAJaGNpX2xpbmtfa2V5c19jbGVhcihoZGV2KTsKKwloY2lfcmVtb3RlX29vYl9kYXRhX2NsZWFyKGhkZXYpOwogCWhjaV9kZXZfdW5sb2NrX2JoKGhkZXYpOwogCiAJX19oY2lfZGV2X3B1dChoZGV2KTsKQEAgLTEyNzQsNyArMTM5Nyw3IEBACiBFWFBPUlRfU1lNQk9MKGhjaV9yZWN2X2ZyYW1lKTsKIAogc3RhdGljIGludCBoY2lfcmVhc3NlbWJseShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgaW50IHR5cGUsIHZvaWQgKmRhdGEsCi0JCQkgIGludCBjb3VudCwgX191OCBpbmRleCwgZ2ZwX3QgZ2ZwX21hc2spCisJCQkJCQkgIGludCBjb3VudCwgX191OCBpbmRleCkKIHsKIAlpbnQgbGVuID0gMDsKIAlpbnQgaGxlbiA9IDA7CkBAIC0xMzA0LDcgKzE0MjcsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlza2IgPSBidF9za2JfYWxsb2MobGVuLCBnZnBfbWFzayk7CisJCXNrYiA9IGJ0X3NrYl9hbGxvYyhsZW4sIEdGUF9BVE9NSUMpOwogCQlpZiAoIXNrYikKIAkJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xMzkwLDggKzE1MTMsNyBAQAogCQlyZXR1cm4gLUVJTFNFUTsKIAogCXdoaWxlIChjb3VudCkgewotCQlyZW0gPSBoY2lfcmVhc3NlbWJseShoZGV2LCB0eXBlLCBkYXRhLCBjb3VudCwKLQkJCQkJCXR5cGUgLSAxLCBHRlBfQVRPTUlDKTsKKwkJcmVtID0gaGNpX3JlYXNzZW1ibHkoaGRldiwgdHlwZSwgZGF0YSwgY291bnQsIHR5cGUgLSAxKTsKIAkJaWYgKHJlbSA8IDApCiAJCQlyZXR1cm4gcmVtOwogCkBAIC0xNDI1LDggKzE1NDcsOCBAQAogCQl9IGVsc2UKIAkJCXR5cGUgPSBidF9jYihza2IpLT5wa3RfdHlwZTsKIAotCQlyZW0gPSBoY2lfcmVhc3NlbWJseShoZGV2LCB0eXBlLCBkYXRhLAotCQkJCQljb3VudCwgU1RSRUFNX1JFQVNTRU1CTFksIEdGUF9BVE9NSUMpOworCQlyZW0gPSBoY2lfcmVhc3NlbWJseShoZGV2LCB0eXBlLCBkYXRhLCBjb3VudCwKKwkJCQkJCQlTVFJFQU1fUkVBU1NFTUJMWSk7CiAJCWlmIChyZW0gPCAwKQogCQkJcmV0dXJuIHJlbTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYyBiL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKaW5kZXggYjI1NzAxNS4uZjEzZGRiZiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCkBAIC01Niw3ICs1Niw5IEBACiAJaWYgKHN0YXR1cykKIAkJcmV0dXJuOwogCi0JY2xlYXJfYml0KEhDSV9JTlFVSVJZLCAmaGRldi0+ZmxhZ3MpOworCWlmICh0ZXN0X2JpdChIQ0lfTUdNVCwgJmhkZXYtPmZsYWdzKSAmJgorCQkJCXRlc3RfYW5kX2NsZWFyX2JpdChIQ0lfSU5RVUlSWSwgJmhkZXYtPmZsYWdzKSkKKwkJbWdtdF9kaXNjb3ZlcmluZyhoZGV2LT5pZCwgMCk7CiAKIAloY2lfcmVxX2NvbXBsZXRlKGhkZXYsIEhDSV9PUF9JTlFVSVJZX0NBTkNFTCwgc3RhdHVzKTsKIApAQCAtNzIsNyArNzQsOSBAQAogCWlmIChzdGF0dXMpCiAJCXJldHVybjsKIAotCWNsZWFyX2JpdChIQ0lfSU5RVUlSWSwgJmhkZXYtPmZsYWdzKTsKKwlpZiAodGVzdF9iaXQoSENJX01HTVQsICZoZGV2LT5mbGFncykgJiYKKwkJCQl0ZXN0X2FuZF9jbGVhcl9iaXQoSENJX0lOUVVJUlksICZoZGV2LT5mbGFncykpCisJCW1nbXRfZGlzY292ZXJpbmcoaGRldi0+aWQsIDApOwogCiAJaGNpX2Nvbm5fY2hlY2tfcGVuZGluZyhoZGV2KTsKIH0KQEAgLTE5NSwxNCArMTk5LDE3IEBACiAKIAlCVF9EQkcoIiVzIHN0YXR1cyAweCV4IiwgaGRldi0+bmFtZSwgc3RhdHVzKTsKIAotCWlmIChzdGF0dXMpCi0JCXJldHVybjsKLQogCXNlbnQgPSBoY2lfc2VudF9jbWRfZGF0YShoZGV2LCBIQ0lfT1BfV1JJVEVfTE9DQUxfTkFNRSk7CiAJaWYgKCFzZW50KQogCQlyZXR1cm47CiAKLQltZW1jcHkoaGRldi0+ZGV2X25hbWUsIHNlbnQsIDI0OCk7CisJaWYgKHRlc3RfYml0KEhDSV9NR01ULCAmaGRldi0+ZmxhZ3MpKQorCQltZ210X3NldF9sb2NhbF9uYW1lX2NvbXBsZXRlKGhkZXYtPmlkLCBzZW50LCBzdGF0dXMpOworCisJaWYgKHN0YXR1cykKKwkJcmV0dXJuOworCisJbWVtY3B5KGhkZXYtPmRldl9uYW1lLCBzZW50LCBIQ0lfTUFYX05BTUVfTEVOR1RIKTsKIH0KIAogc3RhdGljIHZvaWQgaGNpX2NjX3JlYWRfbG9jYWxfbmFtZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTIxNCw3ICsyMjEsNyBAQAogCWlmIChycC0+c3RhdHVzKQogCQlyZXR1cm47CiAKLQltZW1jcHkoaGRldi0+ZGV2X25hbWUsIHJwLT5uYW1lLCAyNDgpOworCW1lbWNweShoZGV2LT5kZXZfbmFtZSwgcnAtPm5hbWUsIEhDSV9NQVhfTkFNRV9MRU5HVEgpOwogfQogCiBzdGF0aWMgdm9pZCBoY2lfY2Nfd3JpdGVfYXV0aF9lbmFibGUoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpCkBAIC04MjEsMTYgKzgyOCwzMSBAQAogCQkJCQkJCQlycC0+c3RhdHVzKTsKIH0KIAorc3RhdGljIHZvaWQgaGNpX2NjX3JlYWRfbG9jYWxfb29iX2RhdGFfcmVwbHkoc3RydWN0IGhjaV9kZXYgKmhkZXYsCisJCQkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaGNpX3JwX3JlYWRfbG9jYWxfb29iX2RhdGEgKnJwID0gKHZvaWQgKikgc2tiLT5kYXRhOworCisJQlRfREJHKCIlcyBzdGF0dXMgMHgleCIsIGhkZXYtPm5hbWUsIHJwLT5zdGF0dXMpOworCisJbWdtdF9yZWFkX2xvY2FsX29vYl9kYXRhX3JlcGx5X2NvbXBsZXRlKGhkZXYtPmlkLCBycC0+aGFzaCwKKwkJCQkJCXJwLT5yYW5kb21pemVyLCBycC0+c3RhdHVzKTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGhjaV9jc19pbnF1aXJ5KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBfX3U4IHN0YXR1cykKIHsKIAlCVF9EQkcoIiVzIHN0YXR1cyAweCV4IiwgaGRldi0+bmFtZSwgc3RhdHVzKTsKIAogCWlmIChzdGF0dXMpIHsKIAkJaGNpX3JlcV9jb21wbGV0ZShoZGV2LCBIQ0lfT1BfSU5RVUlSWSwgc3RhdHVzKTsKLQogCQloY2lfY29ubl9jaGVja19wZW5kaW5nKGhkZXYpOwotCX0gZWxzZQotCQlzZXRfYml0KEhDSV9JTlFVSVJZLCAmaGRldi0+ZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJaWYgKHRlc3RfYml0KEhDSV9NR01ULCAmaGRldi0+ZmxhZ3MpICYmCisJCQkJCSF0ZXN0X2FuZF9zZXRfYml0KEhDSV9JTlFVSVJZLAorCQkJCQkJCSZoZGV2LT5mbGFncykpCisJCW1nbXRfZGlzY292ZXJpbmcoaGRldi0+aWQsIDEpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaGNpX2NzX2NyZWF0ZV9jb25uKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBfX3U4IHN0YXR1cykKQEAgLTk5OSwxMiArMTAyMSwxOSBAQAogCWhjaV9kZXZfbG9jayhoZGV2KTsKIAogCWNvbm4gPSBoY2lfY29ubl9oYXNoX2xvb2t1cF9iYShoZGV2LCBBQ0xfTElOSywgJmNwLT5iZGFkZHIpOwotCWlmIChjb25uICYmIGhjaV9vdXRnb2luZ19hdXRoX25lZWRlZChoZGV2LCBjb25uKSkgeworCWlmICghY29ubikKKwkJZ290byB1bmxvY2s7CisKKwlpZiAoIWhjaV9vdXRnb2luZ19hdXRoX25lZWRlZChoZGV2LCBjb25uKSkKKwkJZ290byB1bmxvY2s7CisKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoSENJX0NPTk5fQVVUSF9QRU5ELCAmY29ubi0+cGVuZCkpIHsKIAkJc3RydWN0IGhjaV9jcF9hdXRoX3JlcXVlc3RlZCBjcDsKIAkJY3AuaGFuZGxlID0gX19jcHVfdG9fbGUxNihjb25uLT5oYW5kbGUpOwogCQloY2lfc2VuZF9jbWQoaGRldiwgSENJX09QX0FVVEhfUkVRVUVTVEVELCBzaXplb2YoY3ApLCAmY3ApOwogCX0KIAordW5sb2NrOgogCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwogfQogCkBAIC0xMTk0LDcgKzEyMjMsOSBAQAogCiAJQlRfREJHKCIlcyBzdGF0dXMgJWQiLCBoZGV2LT5uYW1lLCBzdGF0dXMpOwogCi0JY2xlYXJfYml0KEhDSV9JTlFVSVJZLCAmaGRldi0+ZmxhZ3MpOworCWlmICh0ZXN0X2JpdChIQ0lfTUdNVCwgJmhkZXYtPmZsYWdzKSAmJgorCQkJCXRlc3RfYW5kX2NsZWFyX2JpdChIQ0lfSU5RVUlSWSwgJmhkZXYtPmZsYWdzKSkKKwkJbWdtdF9kaXNjb3ZlcmluZyhoZGV2LT5pZCwgMCk7CiAKIAloY2lfcmVxX2NvbXBsZXRlKGhkZXYsIEhDSV9PUF9JTlFVSVJZLCBzdGF0dXMpOwogCkBAIC0xMjE0LDcgKzEyNDUsMTMgQEAKIAogCWhjaV9kZXZfbG9jayhoZGV2KTsKIAotCWZvciAoOyBudW1fcnNwOyBudW1fcnNwLS0pIHsKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoSENJX0lOUVVJUlksICZoZGV2LT5mbGFncykpIHsKKworCQlpZiAodGVzdF9iaXQoSENJX01HTVQsICZoZGV2LT5mbGFncykpCisJCQltZ210X2Rpc2NvdmVyaW5nKGhkZXYtPmlkLCAxKTsKKwl9CisKKwlmb3IgKDsgbnVtX3JzcDsgbnVtX3JzcC0tLCBpbmZvKyspIHsKIAkJYmFjcHkoJmRhdGEuYmRhZGRyLCAmaW5mby0+YmRhZGRyKTsKIAkJZGF0YS5wc2Nhbl9yZXBfbW9kZQk9IGluZm8tPnBzY2FuX3JlcF9tb2RlOwogCQlkYXRhLnBzY2FuX3BlcmlvZF9tb2RlCT0gaW5mby0+cHNjYW5fcGVyaW9kX21vZGU7CkBAIC0xMjIzLDggKzEyNjAsOSBAQAogCQlkYXRhLmNsb2NrX29mZnNldAk9IGluZm8tPmNsb2NrX29mZnNldDsKIAkJZGF0YS5yc3NpCQk9IDB4MDA7CiAJCWRhdGEuc3NwX21vZGUJCT0gMHgwMDsKLQkJaW5mbysrOwogCQloY2lfaW5xdWlyeV9jYWNoZV91cGRhdGUoaGRldiwgJmRhdGEpOworCQltZ210X2RldmljZV9mb3VuZChoZGV2LT5pZCwgJmluZm8tPmJkYWRkciwgaW5mby0+ZGV2X2NsYXNzLCAwLAorCQkJCQkJCQkJTlVMTCk7CiAJfQogCiAJaGNpX2Rldl91bmxvY2soaGRldik7CkBAIC0xNDAyLDcgKzE0NDAsNyBAQAogCiAJY29ubi0+c3RhdGUgPSBCVF9DTE9TRUQ7CiAKLQlpZiAoY29ubi0+dHlwZSA9PSBBQ0xfTElOSykKKwlpZiAoY29ubi0+dHlwZSA9PSBBQ0xfTElOSyB8fCBjb25uLT50eXBlID09IExFX0xJTkspCiAJCW1nbXRfZGlzY29ubmVjdGVkKGhkZXYtPmlkLCAmY29ubi0+ZHN0KTsKIAogCWhjaV9wcm90b19kaXNjb25uX2NmbShjb25uLCBldi0+cmVhc29uKTsKQEAgLTE0MjgsNyArMTQ2Niw2IEBACiAJCQljb25uLT5zZWNfbGV2ZWwgPSBjb25uLT5wZW5kaW5nX3NlY19sZXZlbDsKIAkJfSBlbHNlIHsKIAkJCW1nbXRfYXV0aF9mYWlsZWQoaGRldi0+aWQsICZjb25uLT5kc3QsIGV2LT5zdGF0dXMpOwotCQkJY29ubi0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfTE9XOwogCQl9CiAKIAkJY2xlYXJfYml0KEhDSV9DT05OX0FVVEhfUEVORCwgJmNvbm4tPnBlbmQpOwpAQCAtMTQ4MiwxMyArMTUxOSwyMyBAQAogCiAJaGNpX2Rldl9sb2NrKGhkZXYpOwogCisJaWYgKGV2LT5zdGF0dXMgPT0gMCAmJiB0ZXN0X2JpdChIQ0lfTUdNVCwgJmhkZXYtPmZsYWdzKSkKKwkJbWdtdF9yZW1vdGVfbmFtZShoZGV2LT5pZCwgJmV2LT5iZGFkZHIsIGV2LT5uYW1lKTsKKwogCWNvbm4gPSBoY2lfY29ubl9oYXNoX2xvb2t1cF9iYShoZGV2LCBBQ0xfTElOSywgJmV2LT5iZGFkZHIpOwotCWlmIChjb25uICYmIGhjaV9vdXRnb2luZ19hdXRoX25lZWRlZChoZGV2LCBjb25uKSkgeworCWlmICghY29ubikKKwkJZ290byB1bmxvY2s7CisKKwlpZiAoIWhjaV9vdXRnb2luZ19hdXRoX25lZWRlZChoZGV2LCBjb25uKSkKKwkJZ290byB1bmxvY2s7CisKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoSENJX0NPTk5fQVVUSF9QRU5ELCAmY29ubi0+cGVuZCkpIHsKIAkJc3RydWN0IGhjaV9jcF9hdXRoX3JlcXVlc3RlZCBjcDsKIAkJY3AuaGFuZGxlID0gX19jcHVfdG9fbGUxNihjb25uLT5oYW5kbGUpOwogCQloY2lfc2VuZF9jbWQoaGRldiwgSENJX09QX0FVVEhfUkVRVUVTVEVELCBzaXplb2YoY3ApLCAmY3ApOwogCX0KIAordW5sb2NrOgogCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwogfQogCkBAIC0xNzUxLDYgKzE3OTgsMTAgQEAKIAkJaGNpX2NjX3Bpbl9jb2RlX25lZ19yZXBseShoZGV2LCBza2IpOwogCQlicmVhazsKIAorCWNhc2UgSENJX09QX1JFQURfTE9DQUxfT09CX0RBVEE6CisJCWhjaV9jY19yZWFkX2xvY2FsX29vYl9kYXRhX3JlcGx5KGhkZXYsIHNrYik7CisJCWJyZWFrOworCiAJY2FzZSBIQ0lfT1BfTEVfUkVBRF9CVUZGRVJfU0laRToKIAkJaGNpX2NjX2xlX3JlYWRfYnVmZmVyX3NpemUoaGRldiwgc2tiKTsKIAkJYnJlYWs7CkBAIC0xOTg0LDkgKzIwMzUsMTYgQEAKIAlpZiAoIXRlc3RfYml0KEhDSV9QQUlSQUJMRSwgJmhkZXYtPmZsYWdzKSkKIAkJaGNpX3NlbmRfY21kKGhkZXYsIEhDSV9PUF9QSU5fQ09ERV9ORUdfUkVQTFksCiAJCQkJCXNpemVvZihldi0+YmRhZGRyKSwgJmV2LT5iZGFkZHIpOworCWVsc2UgaWYgKHRlc3RfYml0KEhDSV9NR01ULCAmaGRldi0+ZmxhZ3MpKSB7CisJCXU4IHNlY3VyZTsKIAotCWlmICh0ZXN0X2JpdChIQ0lfTUdNVCwgJmhkZXYtPmZsYWdzKSkKLQkJbWdtdF9waW5fY29kZV9yZXF1ZXN0KGhkZXYtPmlkLCAmZXYtPmJkYWRkcik7CisJCWlmIChjb25uLT5wZW5kaW5nX3NlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9ISUdIKQorCQkJc2VjdXJlID0gMTsKKwkJZWxzZQorCQkJc2VjdXJlID0gMDsKKworCQltZ210X3Bpbl9jb2RlX3JlcXVlc3QoaGRldi0+aWQsICZldi0+YmRhZGRyLCBzZWN1cmUpOworCX0KIAogCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwogfQpAQCAtMjAxNSwxNyArMjA3MywzMCBAQAogCUJUX0RCRygiJXMgZm91bmQga2V5IHR5cGUgJXUgZm9yICVzIiwgaGRldi0+bmFtZSwga2V5LT50eXBlLAogCQkJCQkJCWJhdG9zdHIoJmV2LT5iZGFkZHIpKTsKIAotCWlmICghdGVzdF9iaXQoSENJX0RFQlVHX0tFWVMsICZoZGV2LT5mbGFncykgJiYga2V5LT50eXBlID09IDB4MDMpIHsKKwlpZiAoIXRlc3RfYml0KEhDSV9ERUJVR19LRVlTLCAmaGRldi0+ZmxhZ3MpICYmCisJCQkJa2V5LT50eXBlID09IEhDSV9MS19ERUJVR19DT01CSU5BVElPTikgewogCQlCVF9EQkcoIiVzIGlnbm9yaW5nIGRlYnVnIGtleSIsIGhkZXYtPm5hbWUpOwogCQlnb3RvIG5vdF9mb3VuZDsKIAl9CiAKIAljb25uID0gaGNpX2Nvbm5faGFzaF9sb29rdXBfYmEoaGRldiwgQUNMX0xJTkssICZldi0+YmRhZGRyKTsKKwlpZiAoY29ubikgeworCQlpZiAoa2V5LT50eXBlID09IEhDSV9MS19VTkFVVEhfQ09NQklOQVRJT04gJiYKKwkJCQljb25uLT5hdXRoX3R5cGUgIT0gMHhmZiAmJgorCQkJCShjb25uLT5hdXRoX3R5cGUgJiAweDAxKSkgeworCQkJQlRfREJHKCIlcyBpZ25vcmluZyB1bmF1dGhlbnRpY2F0ZWQga2V5IiwgaGRldi0+bmFtZSk7CisJCQlnb3RvIG5vdF9mb3VuZDsKKwkJfQogCi0JaWYgKGtleS0+dHlwZSA9PSAweDA0ICYmIGNvbm4gJiYgY29ubi0+YXV0aF90eXBlICE9IDB4ZmYgJiYKLQkJCQkJCShjb25uLT5hdXRoX3R5cGUgJiAweDAxKSkgewotCQlCVF9EQkcoIiVzIGlnbm9yaW5nIHVuYXV0aGVudGljYXRlZCBrZXkiLCBoZGV2LT5uYW1lKTsKLQkJZ290byBub3RfZm91bmQ7CisJCWlmIChrZXktPnR5cGUgPT0gSENJX0xLX0NPTUJJTkFUSU9OICYmIGtleS0+cGluX2xlbiA8IDE2ICYmCisJCQkJY29ubi0+cGVuZGluZ19zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfSElHSCkgeworCQkJQlRfREJHKCIlcyBpZ25vcmluZyBrZXkgdW5hdXRoZW50aWNhdGVkIGZvciBoaWdoIFwKKwkJCQkJCQlzZWN1cml0eSIsIGhkZXYtPm5hbWUpOworCQkJZ290byBub3RfZm91bmQ7CisJCX0KKworCQljb25uLT5rZXlfdHlwZSA9IGtleS0+dHlwZTsKKwkJY29ubi0+cGluX2xlbmd0aCA9IGtleS0+cGluX2xlbjsKIAl9CiAKIAliYWNweSgmY3AuYmRhZGRyLCAmZXYtPmJkYWRkcik7CkBAIC0yMDU3LDExICsyMTI4LDE1IEBACiAJCWhjaV9jb25uX2hvbGQoY29ubik7CiAJCWNvbm4tPmRpc2NfdGltZW91dCA9IEhDSV9ESVNDT05OX1RJTUVPVVQ7CiAJCXBpbl9sZW4gPSBjb25uLT5waW5fbGVuZ3RoOworCisJCWlmIChldi0+a2V5X3R5cGUgIT0gSENJX0xLX0NIQU5HRURfQ09NQklOQVRJT04pCisJCQljb25uLT5rZXlfdHlwZSA9IGV2LT5rZXlfdHlwZTsKKwogCQloY2lfY29ubl9wdXQoY29ubik7CiAJfQogCiAJaWYgKHRlc3RfYml0KEhDSV9MSU5LX0tFWVMsICZoZGV2LT5mbGFncykpCi0JCWhjaV9hZGRfbGlua19rZXkoaGRldiwgMSwgJmV2LT5iZGFkZHIsIGV2LT5saW5rX2tleSwKKwkJaGNpX2FkZF9saW5rX2tleShoZGV2LCBjb25uLCAxLCAmZXYtPmJkYWRkciwgZXYtPmxpbmtfa2V5LAogCQkJCQkJCWV2LT5rZXlfdHlwZSwgcGluX2xlbik7CiAKIAloY2lfZGV2X3VubG9jayhoZGV2KTsKQEAgLTIxMzYsMTEgKzIyMTEsMTcgQEAKIAogCWhjaV9kZXZfbG9jayhoZGV2KTsKIAorCWlmICghdGVzdF9hbmRfc2V0X2JpdChIQ0lfSU5RVUlSWSwgJmhkZXYtPmZsYWdzKSkgeworCisJCWlmICh0ZXN0X2JpdChIQ0lfTUdNVCwgJmhkZXYtPmZsYWdzKSkKKwkJCW1nbXRfZGlzY292ZXJpbmcoaGRldi0+aWQsIDEpOworCX0KKwogCWlmICgoc2tiLT5sZW4gLSAxKSAvIG51bV9yc3AgIT0gc2l6ZW9mKHN0cnVjdCBpbnF1aXJ5X2luZm9fd2l0aF9yc3NpKSkgewogCQlzdHJ1Y3QgaW5xdWlyeV9pbmZvX3dpdGhfcnNzaV9hbmRfcHNjYW5fbW9kZSAqaW5mbzsKIAkJaW5mbyA9ICh2b2lkICopIChza2ItPmRhdGEgKyAxKTsKIAotCQlmb3IgKDsgbnVtX3JzcDsgbnVtX3JzcC0tKSB7CisJCWZvciAoOyBudW1fcnNwOyBudW1fcnNwLS0sIGluZm8rKykgewogCQkJYmFjcHkoJmRhdGEuYmRhZGRyLCAmaW5mby0+YmRhZGRyKTsKIAkJCWRhdGEucHNjYW5fcmVwX21vZGUJPSBpbmZvLT5wc2Nhbl9yZXBfbW9kZTsKIAkJCWRhdGEucHNjYW5fcGVyaW9kX21vZGUJPSBpbmZvLT5wc2Nhbl9wZXJpb2RfbW9kZTsKQEAgLTIxNDksMTMgKzIyMzAsMTUgQEAKIAkJCWRhdGEuY2xvY2tfb2Zmc2V0CT0gaW5mby0+Y2xvY2tfb2Zmc2V0OwogCQkJZGF0YS5yc3NpCQk9IGluZm8tPnJzc2k7CiAJCQlkYXRhLnNzcF9tb2RlCQk9IDB4MDA7Ci0JCQlpbmZvKys7CiAJCQloY2lfaW5xdWlyeV9jYWNoZV91cGRhdGUoaGRldiwgJmRhdGEpOworCQkJbWdtdF9kZXZpY2VfZm91bmQoaGRldi0+aWQsICZpbmZvLT5iZGFkZHIsCisJCQkJCQlpbmZvLT5kZXZfY2xhc3MsIGluZm8tPnJzc2ksCisJCQkJCQlOVUxMKTsKIAkJfQogCX0gZWxzZSB7CiAJCXN0cnVjdCBpbnF1aXJ5X2luZm9fd2l0aF9yc3NpICppbmZvID0gKHZvaWQgKikgKHNrYi0+ZGF0YSArIDEpOwogCi0JCWZvciAoOyBudW1fcnNwOyBudW1fcnNwLS0pIHsKKwkJZm9yICg7IG51bV9yc3A7IG51bV9yc3AtLSwgaW5mbysrKSB7CiAJCQliYWNweSgmZGF0YS5iZGFkZHIsICZpbmZvLT5iZGFkZHIpOwogCQkJZGF0YS5wc2Nhbl9yZXBfbW9kZQk9IGluZm8tPnBzY2FuX3JlcF9tb2RlOwogCQkJZGF0YS5wc2Nhbl9wZXJpb2RfbW9kZQk9IGluZm8tPnBzY2FuX3BlcmlvZF9tb2RlOwpAQCAtMjE2NCw4ICsyMjQ3LDEwIEBACiAJCQlkYXRhLmNsb2NrX29mZnNldAk9IGluZm8tPmNsb2NrX29mZnNldDsKIAkJCWRhdGEucnNzaQkJPSBpbmZvLT5yc3NpOwogCQkJZGF0YS5zc3BfbW9kZQkJPSAweDAwOwotCQkJaW5mbysrOwogCQkJaGNpX2lucXVpcnlfY2FjaGVfdXBkYXRlKGhkZXYsICZkYXRhKTsKKwkJCW1nbXRfZGV2aWNlX2ZvdW5kKGhkZXYtPmlkLCAmaW5mby0+YmRhZGRyLAorCQkJCQkJaW5mby0+ZGV2X2NsYXNzLCBpbmZvLT5yc3NpLAorCQkJCQkJTlVMTCk7CiAJCX0KIAl9CiAKQEAgLTIyOTQsOSArMjM3OSwxNSBAQAogCWlmICghbnVtX3JzcCkKIAkJcmV0dXJuOwogCisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEhDSV9JTlFVSVJZLCAmaGRldi0+ZmxhZ3MpKSB7CisKKwkJaWYgKHRlc3RfYml0KEhDSV9NR01ULCAmaGRldi0+ZmxhZ3MpKQorCQkJbWdtdF9kaXNjb3ZlcmluZyhoZGV2LT5pZCwgMSk7CisJfQorCiAJaGNpX2Rldl9sb2NrKGhkZXYpOwogCi0JZm9yICg7IG51bV9yc3A7IG51bV9yc3AtLSkgeworCWZvciAoOyBudW1fcnNwOyBudW1fcnNwLS0sIGluZm8rKykgewogCQliYWNweSgmZGF0YS5iZGFkZHIsICZpbmZvLT5iZGFkZHIpOwogCQlkYXRhLnBzY2FuX3JlcF9tb2RlCT0gaW5mby0+cHNjYW5fcmVwX21vZGU7CiAJCWRhdGEucHNjYW5fcGVyaW9kX21vZGUJPSBpbmZvLT5wc2Nhbl9wZXJpb2RfbW9kZTsKQEAgLTIzMDUsOCArMjM5Niw5IEBACiAJCWRhdGEuY2xvY2tfb2Zmc2V0CT0gaW5mby0+Y2xvY2tfb2Zmc2V0OwogCQlkYXRhLnJzc2kJCT0gaW5mby0+cnNzaTsKIAkJZGF0YS5zc3BfbW9kZQkJPSAweDAxOwotCQlpbmZvKys7CiAJCWhjaV9pbnF1aXJ5X2NhY2hlX3VwZGF0ZShoZGV2LCAmZGF0YSk7CisJCW1nbXRfZGV2aWNlX2ZvdW5kKGhkZXYtPmlkLCAmaW5mby0+YmRhZGRyLCBpbmZvLT5kZXZfY2xhc3MsCisJCQkJCQlpbmZvLT5yc3NpLCBpbmZvLT5kYXRhKTsKIAl9CiAKIAloY2lfZGV2X3VubG9jayhoZGV2KTsKQEAgLTIzMjYsNyArMjQxOCw3IEBACiAKIAkvKiBJZiByZW1vdGUgcmVxdWVzdHMgbm8tYm9uZGluZyBmb2xsb3cgdGhhdCBsZWFkICovCiAJaWYgKGNvbm4tPnJlbW90ZV9hdXRoID09IDB4MDAgfHwgY29ubi0+cmVtb3RlX2F1dGggPT0gMHgwMSkKLQkJcmV0dXJuIDB4MDA7CisJCXJldHVybiBjb25uLT5yZW1vdGVfYXV0aCB8IChjb25uLT5hdXRoX3R5cGUgJiAweDAxKTsKIAogCXJldHVybiBjb25uLT5hdXRoX3R5cGU7CiB9CkBAIC0yMzU1LDggKzI0NDcsMTQgQEAKIAogCQliYWNweSgmY3AuYmRhZGRyLCAmZXYtPmJkYWRkcik7CiAJCWNwLmNhcGFiaWxpdHkgPSBjb25uLT5pb19jYXBhYmlsaXR5OwotCQljcC5vb2JfZGF0YSA9IDA7Ci0JCWNwLmF1dGhlbnRpY2F0aW9uID0gaGNpX2dldF9hdXRoX3JlcShjb25uKTsKKwkJY29ubi0+YXV0aF90eXBlID0gaGNpX2dldF9hdXRoX3JlcShjb25uKTsKKwkJY3AuYXV0aGVudGljYXRpb24gPSBjb25uLT5hdXRoX3R5cGU7CisKKwkJaWYgKChjb25uLT5vdXQgPT0gMHgwMSB8fCBjb25uLT5yZW1vdGVfb29iID09IDB4MDEpICYmCisJCQkJaGNpX2ZpbmRfcmVtb3RlX29vYl9kYXRhKGhkZXYsICZjb25uLT5kc3QpKQorCQkJY3Aub29iX2RhdGEgPSAweDAxOworCQllbHNlCisJCQljcC5vb2JfZGF0YSA9IDB4MDA7CiAKIAkJaGNpX3NlbmRfY21kKGhkZXYsIEhDSV9PUF9JT19DQVBBQklMSVRZX1JFUExZLAogCQkJCQkJCXNpemVvZihjcCksICZjcCk7CkBAIC0yMzY0LDcgKzI0NjIsNyBAQAogCQlzdHJ1Y3QgaGNpX2NwX2lvX2NhcGFiaWxpdHlfbmVnX3JlcGx5IGNwOwogCiAJCWJhY3B5KCZjcC5iZGFkZHIsICZldi0+YmRhZGRyKTsKLQkJY3AucmVhc29uID0gMHgxNjsgLyogUGFpcmluZyBub3QgYWxsb3dlZCAqLworCQljcC5yZWFzb24gPSAweDE4OyAvKiBQYWlyaW5nIG5vdCBhbGxvd2VkICovCiAKIAkJaGNpX3NlbmRfY21kKGhkZXYsIEhDSV9PUF9JT19DQVBBQklMSVRZX05FR19SRVBMWSwKIAkJCQkJCQlzaXplb2YoY3ApLCAmY3ApOwpAQCAtMjM5OSwxNCArMjQ5Nyw2NyBAQAogCQkJCQkJCXN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGhjaV9ldl91c2VyX2NvbmZpcm1fcmVxICpldiA9ICh2b2lkICopIHNrYi0+ZGF0YTsKKwlpbnQgbG9jX21pdG0sIHJlbV9taXRtLCBjb25maXJtX2hpbnQgPSAwOworCXN0cnVjdCBoY2lfY29ubiAqY29ubjsKIAogCUJUX0RCRygiJXMiLCBoZGV2LT5uYW1lKTsKIAogCWhjaV9kZXZfbG9jayhoZGV2KTsKIAotCWlmICh0ZXN0X2JpdChIQ0lfTUdNVCwgJmhkZXYtPmZsYWdzKSkKLQkJbWdtdF91c2VyX2NvbmZpcm1fcmVxdWVzdChoZGV2LT5pZCwgJmV2LT5iZGFkZHIsIGV2LT5wYXNza2V5KTsKKwlpZiAoIXRlc3RfYml0KEhDSV9NR01ULCAmaGRldi0+ZmxhZ3MpKQorCQlnb3RvIHVubG9jazsKIAorCWNvbm4gPSBoY2lfY29ubl9oYXNoX2xvb2t1cF9iYShoZGV2LCBBQ0xfTElOSywgJmV2LT5iZGFkZHIpOworCWlmICghY29ubikKKwkJZ290byB1bmxvY2s7CisKKwlsb2NfbWl0bSA9IChjb25uLT5hdXRoX3R5cGUgJiAweDAxKTsKKwlyZW1fbWl0bSA9IChjb25uLT5yZW1vdGVfYXV0aCAmIDB4MDEpOworCisJLyogSWYgd2UgcmVxdWlyZSBNSVRNIGJ1dCB0aGUgcmVtb3RlIGRldmljZSBjYW4ndCBwcm92aWRlIHRoYXQKKwkgKiAoaXQgaGFzIE5vSW5wdXROb091dHB1dCkgdGhlbiByZWplY3QgdGhlIGNvbmZpcm1hdGlvbgorCSAqIHJlcXVlc3QuIFRoZSBvbmx5IGV4Y2VwdGlvbiBpcyB3aGVuIHdlJ3JlIGRlZGljYXRlZCBib25kaW5nCisJICogaW5pdGlhdG9ycyAoY29ubmVjdF9jZm1fY2Igc2V0KSBzaW5jZSB0aGVuIHdlIGFsd2F5cyBoYXZlIHRoZSBNSVRNCisJICogYml0IHNldC4gKi8KKwlpZiAoIWNvbm4tPmNvbm5lY3RfY2ZtX2NiICYmIGxvY19taXRtICYmIGNvbm4tPnJlbW90ZV9jYXAgPT0gMHgwMykgeworCQlCVF9EQkcoIlJlamVjdGluZyByZXF1ZXN0OiByZW1vdGUgZGV2aWNlIGNhbid0IHByb3ZpZGUgTUlUTSIpOworCQloY2lfc2VuZF9jbWQoaGRldiwgSENJX09QX1VTRVJfQ09ORklSTV9ORUdfUkVQTFksCisJCQkJCXNpemVvZihldi0+YmRhZGRyKSwgJmV2LT5iZGFkZHIpOworCQlnb3RvIHVubG9jazsKKwl9CisKKwkvKiBJZiBubyBzaWRlIHJlcXVpcmVzIE1JVE0gcHJvdGVjdGlvbjsgYXV0by1hY2NlcHQgKi8KKwlpZiAoKCFsb2NfbWl0bSB8fCBjb25uLT5yZW1vdGVfY2FwID09IDB4MDMpICYmCisJCQkJKCFyZW1fbWl0bSB8fCBjb25uLT5pb19jYXBhYmlsaXR5ID09IDB4MDMpKSB7CisKKwkJLyogSWYgd2UncmUgbm90IHRoZSBpbml0aWF0b3JzIHJlcXVlc3QgYXV0aG9yaXphdGlvbiB0bworCQkgKiBwcm9jZWVkIGZyb20gdXNlciBzcGFjZSAobWdtdF91c2VyX2NvbmZpcm0gd2l0aAorCQkgKiBjb25maXJtX2hpbnQgc2V0IHRvIDEpLiAqLworCQlpZiAoIXRlc3RfYml0KEhDSV9DT05OX0FVVEhfUEVORCwgJmNvbm4tPnBlbmQpKSB7CisJCQlCVF9EQkcoIkNvbmZpcm1pbmcgYXV0by1hY2NlcHQgYXMgYWNjZXB0b3IiKTsKKwkJCWNvbmZpcm1faGludCA9IDE7CisJCQlnb3RvIGNvbmZpcm07CisJCX0KKworCQlCVF9EQkcoIkF1dG8tYWNjZXB0IG9mIHVzZXIgY29uZmlybWF0aW9uIHdpdGggJXVtcyBkZWxheSIsCisJCQkJCQloZGV2LT5hdXRvX2FjY2VwdF9kZWxheSk7CisKKwkJaWYgKGhkZXYtPmF1dG9fYWNjZXB0X2RlbGF5ID4gMCkgeworCQkJaW50IGRlbGF5ID0gbXNlY3NfdG9famlmZmllcyhoZGV2LT5hdXRvX2FjY2VwdF9kZWxheSk7CisJCQltb2RfdGltZXIoJmNvbm4tPmF1dG9fYWNjZXB0X3RpbWVyLCBqaWZmaWVzICsgZGVsYXkpOworCQkJZ290byB1bmxvY2s7CisJCX0KKworCQloY2lfc2VuZF9jbWQoaGRldiwgSENJX09QX1VTRVJfQ09ORklSTV9SRVBMWSwKKwkJCQkJCXNpemVvZihldi0+YmRhZGRyKSwgJmV2LT5iZGFkZHIpOworCQlnb3RvIHVubG9jazsKKwl9CisKK2NvbmZpcm06CisJbWdtdF91c2VyX2NvbmZpcm1fcmVxdWVzdChoZGV2LT5pZCwgJmV2LT5iZGFkZHIsIGV2LT5wYXNza2V5LAorCQkJCQkJCQljb25maXJtX2hpbnQpOworCit1bmxvY2s6CiAJaGNpX2Rldl91bmxvY2soaGRldik7CiB9CiAKQEAgLTI0NTMsNiArMjYwNCw0MSBAQAogCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgaGNpX3JlbW90ZV9vb2JfZGF0YV9yZXF1ZXN0X2V2dChzdHJ1Y3QgaGNpX2RldiAqaGRldiwKKwkJCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBoY2lfZXZfcmVtb3RlX29vYl9kYXRhX3JlcXVlc3QgKmV2ID0gKHZvaWQgKikgc2tiLT5kYXRhOworCXN0cnVjdCBvb2JfZGF0YSAqZGF0YTsKKworCUJUX0RCRygiJXMiLCBoZGV2LT5uYW1lKTsKKworCWhjaV9kZXZfbG9jayhoZGV2KTsKKworCWlmICghdGVzdF9iaXQoSENJX01HTVQsICZoZGV2LT5mbGFncykpCisJCWdvdG8gdW5sb2NrOworCisJZGF0YSA9IGhjaV9maW5kX3JlbW90ZV9vb2JfZGF0YShoZGV2LCAmZXYtPmJkYWRkcik7CisJaWYgKGRhdGEpIHsKKwkJc3RydWN0IGhjaV9jcF9yZW1vdGVfb29iX2RhdGFfcmVwbHkgY3A7CisKKwkJYmFjcHkoJmNwLmJkYWRkciwgJmV2LT5iZGFkZHIpOworCQltZW1jcHkoY3AuaGFzaCwgZGF0YS0+aGFzaCwgc2l6ZW9mKGNwLmhhc2gpKTsKKwkJbWVtY3B5KGNwLnJhbmRvbWl6ZXIsIGRhdGEtPnJhbmRvbWl6ZXIsIHNpemVvZihjcC5yYW5kb21pemVyKSk7CisKKwkJaGNpX3NlbmRfY21kKGhkZXYsIEhDSV9PUF9SRU1PVEVfT09CX0RBVEFfUkVQTFksIHNpemVvZihjcCksCisJCQkJCQkJCQkmY3ApOworCX0gZWxzZSB7CisJCXN0cnVjdCBoY2lfY3BfcmVtb3RlX29vYl9kYXRhX25lZ19yZXBseSBjcDsKKworCQliYWNweSgmY3AuYmRhZGRyLCAmZXYtPmJkYWRkcik7CisJCWhjaV9zZW5kX2NtZChoZGV2LCBIQ0lfT1BfUkVNT1RFX09PQl9EQVRBX05FR19SRVBMWSwgc2l6ZW9mKGNwKSwKKwkJCQkJCQkJCSZjcCk7CisJfQorCit1bmxvY2s6CisJaGNpX2Rldl91bmxvY2soaGRldik7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfbGVfY29ubl9jb21wbGV0ZV9ldnQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGhjaV9ldl9sZV9jb25uX2NvbXBsZXRlICpldiA9ICh2b2lkICopIHNrYi0+ZGF0YTsKQEAgLTI0NzMsMTIgKzI2NTksMTUgQEAKIAl9CiAKIAlpZiAoZXYtPnN0YXR1cykgeworCQltZ210X2Nvbm5lY3RfZmFpbGVkKGhkZXYtPmlkLCAmZXYtPmJkYWRkciwgZXYtPnN0YXR1cyk7CiAJCWhjaV9wcm90b19jb25uZWN0X2NmbShjb25uLCBldi0+c3RhdHVzKTsKIAkJY29ubi0+c3RhdGUgPSBCVF9DTE9TRUQ7CiAJCWhjaV9jb25uX2RlbChjb25uKTsKIAkJZ290byB1bmxvY2s7CiAJfQogCisJbWdtdF9jb25uZWN0ZWQoaGRldi0+aWQsICZldi0+YmRhZGRyKTsKKwogCWNvbm4tPmhhbmRsZSA9IF9fbGUxNl90b19jcHUoZXYtPmhhbmRsZSk7CiAJY29ubi0+c3RhdGUgPSBCVF9DT05ORUNURUQ7CiAKQEAgLTI2NTUsNiArMjg0NCwxMCBAQAogCQloY2lfbGVfbWV0YV9ldnQoaGRldiwgc2tiKTsKIAkJYnJlYWs7CiAKKwljYXNlIEhDSV9FVl9SRU1PVEVfT09CX0RBVEFfUkVRVUVTVDoKKwkJaGNpX3JlbW90ZV9vb2JfZGF0YV9yZXF1ZXN0X2V2dChoZGV2LCBza2IpOworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCUJUX0RCRygiJXMgZXZlbnQgMHgleCIsIGhkZXYtPm5hbWUsIGV2ZW50KTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jIGIvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYwppbmRleCAzYzgzOGE2Li5hNmMzYWE4IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMKQEAgLTIxNiwxMyArMjE2LDEzIEBACiBzdGF0aWMgc3NpemVfdCBzaG93X25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JY2hhciBuYW1lWzI0OV07CisJY2hhciBuYW1lW0hDSV9NQVhfTkFNRV9MRU5HVEggKyAxXTsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCAyNDg7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgSENJX01BWF9OQU1FX0xFTkdUSDsgaSsrKQogCQluYW1lW2ldID0gaGRldi0+ZGV2X25hbWVbaV07CiAKLQluYW1lWzI0OF0gPSAnXDAnOworCW5hbWVbSENJX01BWF9OQU1FX0xFTkdUSF0gPSAnXDAnOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBuYW1lKTsKIH0KIApAQCAtMjc3LDEwICsyNzcsMTIgQEAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX2lkbGVfdGltZW91dChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXVuc2lnbmVkIGxvbmcgdmFsOworCXVuc2lnbmVkIGludCB2YWw7CisJaW50IHJ2OwogCi0JaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJnZhbCkgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlydiA9IGtzdHJ0b3VpbnQoYnVmLCAwLCAmdmFsKTsKKwlpZiAocnYgPCAwKQorCQlyZXR1cm4gcnY7CiAKIAlpZiAodmFsICE9IDAgJiYgKHZhbCA8IDUwMCB8fCB2YWwgPiAzNjAwMDAwKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yOTksMTUgKzMwMSwxNCBAQAogc3RhdGljIHNzaXplX3Qgc3RvcmVfc25pZmZfbWF4X2ludGVydmFsKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JdW5zaWduZWQgbG9uZyB2YWw7CisJdTE2IHZhbDsKKwlpbnQgcnY7CiAKLQlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmdmFsKSA8IDApCi0JCXJldHVybiAtRUlOVkFMOworCXJ2ID0ga3N0cnRvdTE2KGJ1ZiwgMCwgJnZhbCk7CisJaWYgKHJ2IDwgMCkKKwkJcmV0dXJuIHJ2OwogCi0JaWYgKHZhbCA8IDB4MDAwMiB8fCB2YWwgPiAweEZGRkUgfHwgdmFsICUgMikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAodmFsIDwgaGRldi0+c25pZmZfbWluX2ludGVydmFsKQorCWlmICh2YWwgPT0gMCB8fCB2YWwgJSAyIHx8IHZhbCA8IGhkZXYtPnNuaWZmX21pbl9pbnRlcnZhbCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAloZGV2LT5zbmlmZl9tYXhfaW50ZXJ2YWwgPSB2YWw7CkBAIC0zMjQsMTUgKzMyNSwxNCBAQAogc3RhdGljIHNzaXplX3Qgc3RvcmVfc25pZmZfbWluX2ludGVydmFsKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JdW5zaWduZWQgbG9uZyB2YWw7CisJdTE2IHZhbDsKKwlpbnQgcnY7CiAKLQlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmdmFsKSA8IDApCi0JCXJldHVybiAtRUlOVkFMOworCXJ2ID0ga3N0cnRvdTE2KGJ1ZiwgMCwgJnZhbCk7CisJaWYgKHJ2IDwgMCkKKwkJcmV0dXJuIHJ2OwogCi0JaWYgKHZhbCA8IDB4MDAwMiB8fCB2YWwgPiAweEZGRkUgfHwgdmFsICUgMikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAodmFsID4gaGRldi0+c25pZmZfbWF4X2ludGVydmFsKQorCWlmICh2YWwgPT0gMCB8fCB2YWwgJSAyIHx8IHZhbCA+IGhkZXYtPnNuaWZmX21heF9pbnRlcnZhbCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAloZGV2LT5zbmlmZl9taW5faW50ZXJ2YWwgPSB2YWw7CkBAIC01MTEsNiArNTExLDM1IEBACiAJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKIH07CiAKK3N0YXRpYyBpbnQgYXV0b19hY2NlcHRfZGVsYXlfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCit7CisJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkYXRhOworCisJaGNpX2Rldl9sb2NrX2JoKGhkZXYpOworCisJaGRldi0+YXV0b19hY2NlcHRfZGVsYXkgPSB2YWw7CisKKwloY2lfZGV2X3VubG9ja19iaChoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF1dG9fYWNjZXB0X2RlbGF5X2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRhdGE7CisKKwloY2lfZGV2X2xvY2tfYmgoaGRldik7CisKKwkqdmFsID0gaGRldi0+YXV0b19hY2NlcHRfZGVsYXk7CisKKwloY2lfZGV2X3VubG9ja19iaChoZGV2KTsKKworCXJldHVybiAwOworfQorCitERUZJTkVfU0lNUExFX0FUVFJJQlVURShhdXRvX2FjY2VwdF9kZWxheV9mb3BzLCBhdXRvX2FjY2VwdF9kZWxheV9nZXQsCisJCQkJCWF1dG9fYWNjZXB0X2RlbGF5X3NldCwgIiVsbHVcbiIpOworCiBpbnQgaGNpX3JlZ2lzdGVyX3N5c2ZzKHN0cnVjdCBoY2lfZGV2ICpoZGV2KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZoZGV2LT5kZXY7CkBAIC01NDUsNiArNTc0LDggQEAKIAogCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInV1aWRzIiwgMDQ0NCwgaGRldi0+ZGVidWdmcywgaGRldiwgJnV1aWRzX2ZvcHMpOwogCisJZGVidWdmc19jcmVhdGVfZmlsZSgiYXV0b19hY2NlcHRfZGVsYXkiLCAwNDQ0LCBoZGV2LT5kZWJ1Z2ZzLCBoZGV2LAorCQkJCQkJJmF1dG9fYWNjZXB0X2RlbGF5X2ZvcHMpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jIGIvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYwppbmRleCA1ZWMxMjk3Li5jNDA1YTk1IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAKICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgpAQCAtNTUsMjIgKzU2LDI0IEBACiBzdGF0aWMgTElTVF9IRUFEKGhpZHBfc2Vzc2lvbl9saXN0KTsKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgaGlkcF9rZXljb2RlWzI1Nl0gPSB7Ci0JICAwLCAgMCwgIDAsICAwLCAzMCwgNDgsIDQ2LCAzMiwgMTgsIDMzLCAzNCwgMzUsIDIzLCAzNiwgMzcsIDM4LAotCSA1MCwgNDksIDI0LCAyNSwgMTYsIDE5LCAzMSwgMjAsIDIyLCA0NywgMTcsIDQ1LCAyMSwgNDQsICAyLCAgMywKLQkgIDQsICA1LCAgNiwgIDcsICA4LCAgOSwgMTAsIDExLCAyOCwgIDEsIDE0LCAxNSwgNTcsIDEyLCAxMywgMjYsCi0JIDI3LCA0MywgNDMsIDM5LCA0MCwgNDEsIDUxLCA1MiwgNTMsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LAotCSA2NSwgNjYsIDY3LCA2OCwgODcsIDg4LCA5OSwgNzAsMTE5LDExMCwxMDIsMTA0LDExMSwxMDcsMTA5LDEwNiwKLQkxMDUsMTA4LDEwMywgNjksIDk4LCA1NSwgNzQsIDc4LCA5NiwgNzksIDgwLCA4MSwgNzUsIDc2LCA3NywgNzEsCi0JIDcyLCA3MywgODIsIDgzLCA4NiwxMjcsMTE2LDExNywxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLAotCTE5MSwxOTIsMTkzLDE5NCwxMzQsMTM4LDEzMCwxMzIsMTI4LDEyOSwxMzEsMTM3LDEzMywxMzUsMTM2LDExMywKLQkxMTUsMTE0LCAgMCwgIDAsICAwLDEyMSwgIDAsIDg5LCA5MywxMjQsIDkyLCA5NCwgOTUsICAwLCAgMCwgIDAsCi0JMTIyLDEyMywgOTAsIDkxLCA4NSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAotCSAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKLQkgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCi0JICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAotCSAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKLQkgMjksIDQyLCA1NiwxMjUsIDk3LCA1NCwxMDAsMTI2LDE2NCwxNjYsMTY1LDE2MywxNjEsMTE1LDExNCwxMTMsCi0JMTUwLDE1OCwxNTksMTI4LDEzNiwxNzcsMTc4LDE3NiwxNDIsMTUyLDE3MywxNDAKKwkgIDAsICAgMCwgICAwLCAgIDAsICAzMCwgIDQ4LCAgNDYsICAzMiwgIDE4LCAgMzMsICAzNCwgIDM1LCAgMjMsICAzNiwKKwkgMzcsICAzOCwgIDUwLCAgNDksICAyNCwgIDI1LCAgMTYsICAxOSwgIDMxLCAgMjAsICAyMiwgIDQ3LCAgMTcsICA0NSwKKwkgMjEsICA0NCwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMjgsICAgMSwKKwkgMTQsICAxNSwgIDU3LCAgMTIsICAxMywgIDI2LCAgMjcsICA0MywgIDQzLCAgMzksICA0MCwgIDQxLCAgNTEsICA1MiwKKwkgNTMsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsICA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgODcsICA4OCwKKwkgOTksICA3MCwgMTE5LCAxMTAsIDEwMiwgMTA0LCAxMTEsIDEwNywgMTA5LCAxMDYsIDEwNSwgMTA4LCAxMDMsICA2OSwKKwkgOTgsICA1NSwgIDc0LCAgNzgsICA5NiwgIDc5LCAgODAsICA4MSwgIDc1LCAgNzYsICA3NywgIDcxLCAgNzIsICA3MywKKwkgODIsICA4MywgIDg2LCAxMjcsIDExNiwgMTE3LCAxODMsIDE4NCwgMTg1LCAxODYsIDE4NywgMTg4LCAxODksIDE5MCwKKwkxOTEsIDE5MiwgMTkzLCAxOTQsIDEzNCwgMTM4LCAxMzAsIDEzMiwgMTI4LCAxMjksIDEzMSwgMTM3LCAxMzMsIDEzNSwKKwkxMzYsIDExMywgMTE1LCAxMTQsICAgMCwgICAwLCAgIDAsIDEyMSwgICAwLCAgODksICA5MywgMTI0LCAgOTIsICA5NCwKKwkgOTUsICAgMCwgICAwLCAgIDAsIDEyMiwgMTIzLCAgOTAsICA5MSwgIDg1LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKwkgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKwkgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKwkgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKwkgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKwkgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKwkgMjksICA0MiwgIDU2LCAxMjUsICA5NywgIDU0LCAxMDAsIDEyNiwgMTY0LCAxNjYsIDE2NSwgMTYzLCAxNjEsIDExNSwKKwkxMTQsIDExMywgMTUwLCAxNTgsIDE1OSwgMTI4LCAxMzYsIDE3NywgMTc4LCAxNzYsIDE0MiwgMTUyLCAxNzMsIDE0MAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgaGlkcF9ta2V5c3BhdFtdID0geyAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxIH07CkBAIC00NjEsOCArNDY0LDcgQEAKIHsKIAlzdHJ1Y3QgaGlkcF9zZXNzaW9uICpzZXNzaW9uID0gKHN0cnVjdCBoaWRwX3Nlc3Npb24gKikgYXJnOwogCi0JYXRvbWljX2luYygmc2Vzc2lvbi0+dGVybWluYXRlKTsKLQloaWRwX3NjaGVkdWxlKHNlc3Npb24pOworCWt0aHJlYWRfc3RvcChzZXNzaW9uLT50YXNrKTsKIH0KIAogc3RhdGljIHZvaWQgaGlkcF9zZXRfdGltZXIoc3RydWN0IGhpZHBfc2Vzc2lvbiAqc2Vzc2lvbikKQEAgLTUzMyw5ICs1MzUsNyBAQAogCQlza2JfcXVldWVfcHVyZ2UoJnNlc3Npb24tPmN0cmxfdHJhbnNtaXQpOwogCQlza2JfcXVldWVfcHVyZ2UoJnNlc3Npb24tPmludHJfdHJhbnNtaXQpOwogCi0JCS8qIEtpbGwgc2Vzc2lvbiB0aHJlYWQgKi8KLQkJYXRvbWljX2luYygmc2Vzc2lvbi0+dGVybWluYXRlKTsKLQkJaGlkcF9zY2hlZHVsZShzZXNzaW9uKTsKKwkJa3RocmVhZF9zdG9wKHNlc3Npb24tPnRhc2spOwogCX0KIH0KIApAQCAtNjk0LDIyICs2OTQsMTAgQEAKIAlzdHJ1Y3Qgc29jayAqY3RybF9zayA9IHNlc3Npb24tPmN0cmxfc29jay0+c2s7CiAJc3RydWN0IHNvY2sgKmludHJfc2sgPSBzZXNzaW9uLT5pbnRyX3NvY2stPnNrOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JaW50IHZlbmRvciA9IDB4MDAwMCwgcHJvZHVjdCA9IDB4MDAwMDsKIAl3YWl0X3F1ZXVlX3QgY3RybF93YWl0LCBpbnRyX3dhaXQ7CiAKIAlCVF9EQkcoInNlc3Npb24gJXAiLCBzZXNzaW9uKTsKIAotCWlmIChzZXNzaW9uLT5pbnB1dCkgewotCQl2ZW5kb3IgID0gc2Vzc2lvbi0+aW5wdXQtPmlkLnZlbmRvcjsKLQkJcHJvZHVjdCA9IHNlc3Npb24tPmlucHV0LT5pZC5wcm9kdWN0OwotCX0KLQotCWlmIChzZXNzaW9uLT5oaWQpIHsKLQkJdmVuZG9yICA9IHNlc3Npb24tPmhpZC0+dmVuZG9yOwotCQlwcm9kdWN0ID0gc2Vzc2lvbi0+aGlkLT5wcm9kdWN0OwotCX0KLQotCWRhZW1vbml6ZSgia2hpZHBkXyUwNHglMDR4IiwgdmVuZG9yLCBwcm9kdWN0KTsKIAlzZXRfdXNlcl9uaWNlKGN1cnJlbnQsIC0xNSk7CiAKIAlpbml0X3dhaXRxdWV1ZV9lbnRyeSgmY3RybF93YWl0LCBjdXJyZW50KTsKQEAgLTcxOCwxMCArNzA2LDExIEBACiAJYWRkX3dhaXRfcXVldWUoc2tfc2xlZXAoaW50cl9zayksICZpbnRyX3dhaXQpOwogCXNlc3Npb24tPndhaXRpbmdfZm9yX3N0YXJ0dXAgPSAwOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmc2Vzc2lvbi0+c3RhcnR1cF9xdWV1ZSk7Ci0Jd2hpbGUgKCFhdG9taWNfcmVhZCgmc2Vzc2lvbi0+dGVybWluYXRlKSkgeworCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAKLQkJaWYgKGN0cmxfc2stPnNrX3N0YXRlICE9IEJUX0NPTk5FQ1RFRCB8fCBpbnRyX3NrLT5za19zdGF0ZSAhPSBCVF9DT05ORUNURUQpCisJCWlmIChjdHJsX3NrLT5za19zdGF0ZSAhPSBCVF9DT05ORUNURUQgfHwKKwkJCQlpbnRyX3NrLT5za19zdGF0ZSAhPSBCVF9DT05ORUNURUQpCiAJCQlicmVhazsKIAogCQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZjdHJsX3NrLT5za19yZWNlaXZlX3F1ZXVlKSkpIHsKQEAgLTk2NSw2ICs5NTQsNyBAQAogaW50IGhpZHBfYWRkX2Nvbm5lY3Rpb24oc3RydWN0IGhpZHBfY29ubmFkZF9yZXEgKnJlcSwgc3RydWN0IHNvY2tldCAqY3RybF9zb2NrLCBzdHJ1Y3Qgc29ja2V0ICppbnRyX3NvY2spCiB7CiAJc3RydWN0IGhpZHBfc2Vzc2lvbiAqc2Vzc2lvbiwgKnM7CisJaW50IHZlbmRvciwgcHJvZHVjdDsKIAlpbnQgZXJyOwogCiAJQlRfREJHKCIiKTsKQEAgLTk4OSw4ICs5NzksMTAgQEAKIAogCWJhY3B5KCZzZXNzaW9uLT5iZGFkZHIsICZidF9zayhjdHJsX3NvY2stPnNrKS0+ZHN0KTsKIAotCXNlc3Npb24tPmN0cmxfbXR1ID0gbWluX3QodWludCwgbDJjYXBfcGkoY3RybF9zb2NrLT5zayktPm9tdHUsIGwyY2FwX3BpKGN0cmxfc29jay0+c2spLT5pbXR1KTsKLQlzZXNzaW9uLT5pbnRyX210dSA9IG1pbl90KHVpbnQsIGwyY2FwX3BpKGludHJfc29jay0+c2spLT5vbXR1LCBsMmNhcF9waShpbnRyX3NvY2stPnNrKS0+aW10dSk7CisJc2Vzc2lvbi0+Y3RybF9tdHUgPSBtaW5fdCh1aW50LCBsMmNhcF9waShjdHJsX3NvY2stPnNrKS0+Y2hhbi0+b210dSwKKwkJCQkJbDJjYXBfcGkoY3RybF9zb2NrLT5zayktPmNoYW4tPmltdHUpOworCXNlc3Npb24tPmludHJfbXR1ID0gbWluX3QodWludCwgbDJjYXBfcGkoaW50cl9zb2NrLT5zayktPmNoYW4tPm9tdHUsCisJCQkJCWwyY2FwX3BpKGludHJfc29jay0+c2spLT5jaGFuLT5pbXR1KTsKIAogCUJUX0RCRygiY3RybCBtdHUgJWQgaW50ciBtdHUgJWQiLCBzZXNzaW9uLT5jdHJsX210dSwgc2Vzc2lvbi0+aW50cl9tdHUpOwogCkBAIC0xMDI2LDkgKzEwMTgsMjQgQEAKIAogCWhpZHBfc2V0X3RpbWVyKHNlc3Npb24pOwogCi0JZXJyID0ga2VybmVsX3RocmVhZChoaWRwX3Nlc3Npb24sIHNlc3Npb24sIENMT05FX0tFUk5FTCk7Ci0JaWYgKGVyciA8IDApCisJaWYgKHNlc3Npb24tPmhpZCkgeworCQl2ZW5kb3IgID0gc2Vzc2lvbi0+aGlkLT52ZW5kb3I7CisJCXByb2R1Y3QgPSBzZXNzaW9uLT5oaWQtPnByb2R1Y3Q7CisJfSBlbHNlIGlmIChzZXNzaW9uLT5pbnB1dCkgeworCQl2ZW5kb3IgID0gc2Vzc2lvbi0+aW5wdXQtPmlkLnZlbmRvcjsKKwkJcHJvZHVjdCA9IHNlc3Npb24tPmlucHV0LT5pZC5wcm9kdWN0OworCX0gZWxzZSB7CisJCXZlbmRvciA9IDB4MDAwMDsKKwkJcHJvZHVjdCA9IDB4MDAwMDsKKwl9CisKKwlzZXNzaW9uLT50YXNrID0ga3RocmVhZF9ydW4oaGlkcF9zZXNzaW9uLCBzZXNzaW9uLCAia2hpZHBkXyUwNHglMDR4IiwKKwkJCQkJCQl2ZW5kb3IsIHByb2R1Y3QpOworCWlmIChJU19FUlIoc2Vzc2lvbi0+dGFzaykpIHsKKwkJZXJyID0gUFRSX0VSUihzZXNzaW9uLT50YXNrKTsKIAkJZ290byB1bmxpbms7CisJfQorCiAJd2hpbGUgKHNlc3Npb24tPndhaXRpbmdfZm9yX3N0YXJ0dXApIHsKIAkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHNlc3Npb24tPnN0YXJ0dXBfcXVldWUsCiAJCQkhc2Vzc2lvbi0+d2FpdGluZ19mb3Jfc3RhcnR1cCk7CkBAIC0xMDUzLDggKzEwNjAsNyBAQAogZXJyX2FkZF9kZXZpY2U6CiAJaGlkX2Rlc3Ryb3lfZGV2aWNlKHNlc3Npb24tPmhpZCk7CiAJc2Vzc2lvbi0+aGlkID0gTlVMTDsKLQlhdG9taWNfaW5jKCZzZXNzaW9uLT50ZXJtaW5hdGUpOwotCWhpZHBfc2NoZWR1bGUoc2Vzc2lvbik7CisJa3RocmVhZF9zdG9wKHNlc3Npb24tPnRhc2spOwogCiB1bmxpbms6CiAJaGlkcF9kZWxfdGltZXIoc2Vzc2lvbik7CkBAIC0xMTA1LDEzICsxMTExLDcgQEAKIAkJCXNrYl9xdWV1ZV9wdXJnZSgmc2Vzc2lvbi0+Y3RybF90cmFuc21pdCk7CiAJCQlza2JfcXVldWVfcHVyZ2UoJnNlc3Npb24tPmludHJfdHJhbnNtaXQpOwogCi0JCQkvKiBXYWtldXAgdXNlci1zcGFjZSBwb2xsaW5nIGZvciBzb2NrZXQgZXJyb3JzICovCi0JCQlzZXNzaW9uLT5pbnRyX3NvY2stPnNrLT5za19lcnIgPSBFVU5BVENIOwotCQkJc2Vzc2lvbi0+Y3RybF9zb2NrLT5zay0+c2tfZXJyID0gRVVOQVRDSDsKLQotCQkJLyogS2lsbCBzZXNzaW9uIHRocmVhZCAqLwotCQkJYXRvbWljX2luYygmc2Vzc2lvbi0+dGVybWluYXRlKTsKLQkJCWhpZHBfc2NoZWR1bGUoc2Vzc2lvbik7CisJCQlrdGhyZWFkX3N0b3Aoc2Vzc2lvbi0+dGFzayk7CiAJCX0KIAl9IGVsc2UKIAkJZXJyID0gLUVOT0VOVDsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGlkcC9oaWRwLmggYi9uZXQvYmx1ZXRvb3RoL2hpZHAvaGlkcC5oCmluZGV4IDEzZGU1ZmEwLi4xOWU5NTAwIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hpZHAvaGlkcC5oCisrKyBiL25ldC9ibHVldG9vdGgvaGlkcC9oaWRwLmgKQEAgLTgwLDEyICs4MCwxMiBAQAogI2RlZmluZSBISURQX1ZJUlRVQUxfQ0FCTEVfVU5QTFVHCTAKICNkZWZpbmUgSElEUF9CT09UX1BST1RPQ09MX01PREUJCTEKICNkZWZpbmUgSElEUF9CTFVFVE9PVEhfVkVORE9SX0lECTkKLSNkZWZpbmUJSElEUF9XQUlUSU5HX0ZPUl9SRVRVUk4JCTEwCisjZGVmaW5lIEhJRFBfV0FJVElOR19GT1JfUkVUVVJOCQkxMAogI2RlZmluZSBISURQX1dBSVRJTkdfRk9SX1NFTkRfQUNLCTExCiAKIHN0cnVjdCBoaWRwX2Nvbm5hZGRfcmVxIHsKLQlpbnQgICBjdHJsX3NvY2s7CS8vIENvbm5lY3RlZCBjb250cm9sIHNvY2tldAotCWludCAgIGludHJfc29jazsJLy8gQ29ubnRldGVkIGludGVycnVwdCBzb2NrZXQKKwlpbnQgICBjdHJsX3NvY2s7CS8qIENvbm5lY3RlZCBjb250cm9sIHNvY2tldCAqLworCWludCAgIGludHJfc29jazsJLyogQ29ubmVjdGVkIGludGVycnVwdCBzb2NrZXQgKi8KIAlfX3UxNiBwYXJzZXI7CiAJX191MTYgcmRfc2l6ZTsKIAlfX3U4IF9fdXNlciAqcmRfZGF0YTsKQEAgLTE0Miw3ICsxNDIsNyBAQAogCXVpbnQgY3RybF9tdHU7CiAJdWludCBpbnRyX210dTsKIAotCWF0b21pY190IHRlcm1pbmF0ZTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CiAKIAl1bnNpZ25lZCBjaGFyIGtleXNbOF07CiAJdW5zaWduZWQgY2hhciBsZWRzOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oaWRwL3NvY2suYyBiL25ldC9ibHVldG9vdGgvaGlkcC9zb2NrLmMKaW5kZXggMjUwZGZkNC4uMTc4YWM3ZiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oaWRwL3NvY2suYworKysgYi9uZXQvYmx1ZXRvb3RoL2hpZHAvc29jay5jCkBAIC04NSw3ICs4NSw4IEBACiAJCQlyZXR1cm4gZXJyOwogCQl9CiAKLQkJaWYgKGNzb2NrLT5zay0+c2tfc3RhdGUgIT0gQlRfQ09OTkVDVEVEIHx8IGlzb2NrLT5zay0+c2tfc3RhdGUgIT0gQlRfQ09OTkVDVEVEKSB7CisJCWlmIChjc29jay0+c2stPnNrX3N0YXRlICE9IEJUX0NPTk5FQ1RFRCB8fAorCQkJCWlzb2NrLT5zay0+c2tfc3RhdGUgIT0gQlRfQ09OTkVDVEVEKSB7CiAJCQlzb2NrZmRfcHV0KGNzb2NrKTsKIAkJCXNvY2tmZF9wdXQoaXNvY2spOwogCQkJcmV0dXJuIC1FQkFERkQ7CkBAIC0xNDAsOCArMTQxLDggQEAKIAogI2lmZGVmIENPTkZJR19DT01QQVQKIHN0cnVjdCBjb21wYXRfaGlkcF9jb25uYWRkX3JlcSB7Ci0JaW50ICAgY3RybF9zb2NrOwkvLyBDb25uZWN0ZWQgY29udHJvbCBzb2NrZXQKLQlpbnQgICBpbnRyX3NvY2s7CS8vIENvbm50ZXRlZCBpbnRlcnJ1cHQgc29ja2V0CisJaW50ICAgY3RybF9zb2NrOwkvKiBDb25uZWN0ZWQgY29udHJvbCBzb2NrZXQgKi8KKwlpbnQgICBpbnRyX3NvY2s7CS8qIENvbm5lY3RlZCBpbnRlcnJ1cHQgc29ja2V0ICovCiAJX191MTYgcGFyc2VyOwogCV9fdTE2IHJkX3NpemU7CiAJY29tcGF0X3VwdHJfdCByZF9kYXRhOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9sMmNhcF9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2wyY2FwX2NvcmUuYwppbmRleCAyYzhkZDQ0Li5hODZmOWJhIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2wyY2FwX2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2wyY2FwX2NvcmUuYwpAQCAtNjIsMTY4ICs2MiwyMzMgQEAKIAogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpfYnVzeV93cTsKIAotc3RydWN0IGJ0X3NvY2tfbGlzdCBsMmNhcF9za19saXN0ID0gewotCS5sb2NrID0gX19SV19MT0NLX1VOTE9DS0VEKGwyY2FwX3NrX2xpc3QubG9jaykKLX07CitMSVNUX0hFQUQoY2hhbl9saXN0KTsKK0RFRklORV9SV0xPQ0soY2hhbl9saXN0X2xvY2spOwogCiBzdGF0aWMgdm9pZCBsMmNhcF9idXN5X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAogc3RhdGljIHN0cnVjdCBza19idWZmICpsMmNhcF9idWlsZF9jbWQoc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4sCiAJCQkJdTggY29kZSwgdTggaWRlbnQsIHUxNiBkbGVuLCB2b2lkICpkYXRhKTsKK3N0YXRpYyBpbnQgbDJjYXBfYnVpbGRfY29uZl9yZXEoc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4sIHZvaWQgKmRhdGEpOwogCiBzdGF0aWMgaW50IGwyY2FwX2VydG1fZGF0YV9yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogLyogLS0tLSBMMkNBUCBjaGFubmVscyAtLS0tICovCi1zdGF0aWMgc3RydWN0IHNvY2sgKl9fbDJjYXBfZ2V0X2NoYW5fYnlfZGNpZChzdHJ1Y3QgbDJjYXBfY2hhbl9saXN0ICpsLCB1MTYgY2lkKQorc3RhdGljIHN0cnVjdCBsMmNhcF9jaGFuICpfX2wyY2FwX2dldF9jaGFuX2J5X2RjaWQoc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4sIHUxNiBjaWQpCiB7Ci0Jc3RydWN0IHNvY2sgKnM7Ci0JZm9yIChzID0gbC0+aGVhZDsgczsgcyA9IGwyY2FwX3BpKHMpLT5uZXh0X2MpIHsKLQkJaWYgKGwyY2FwX3BpKHMpLT5kY2lkID09IGNpZCkKLQkJCWJyZWFrOworCXN0cnVjdCBsMmNhcF9jaGFuICpjOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmY29ubi0+Y2hhbl9sLCBsaXN0KSB7CisJCWlmIChjLT5kY2lkID09IGNpZCkKKwkJCXJldHVybiBjOwogCX0KLQlyZXR1cm4gczsKKwlyZXR1cm4gTlVMTDsKKwogfQogCi1zdGF0aWMgc3RydWN0IHNvY2sgKl9fbDJjYXBfZ2V0X2NoYW5fYnlfc2NpZChzdHJ1Y3QgbDJjYXBfY2hhbl9saXN0ICpsLCB1MTYgY2lkKQorc3RhdGljIHN0cnVjdCBsMmNhcF9jaGFuICpfX2wyY2FwX2dldF9jaGFuX2J5X3NjaWQoc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4sIHUxNiBjaWQpCiB7Ci0Jc3RydWN0IHNvY2sgKnM7Ci0JZm9yIChzID0gbC0+aGVhZDsgczsgcyA9IGwyY2FwX3BpKHMpLT5uZXh0X2MpIHsKLQkJaWYgKGwyY2FwX3BpKHMpLT5zY2lkID09IGNpZCkKLQkJCWJyZWFrOworCXN0cnVjdCBsMmNhcF9jaGFuICpjOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmY29ubi0+Y2hhbl9sLCBsaXN0KSB7CisJCWlmIChjLT5zY2lkID09IGNpZCkKKwkJCXJldHVybiBjOwogCX0KLQlyZXR1cm4gczsKKwlyZXR1cm4gTlVMTDsKIH0KIAogLyogRmluZCBjaGFubmVsIHdpdGggZ2l2ZW4gU0NJRC4KICAqIFJldHVybnMgbG9ja2VkIHNvY2tldCAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc29jayAqbDJjYXBfZ2V0X2NoYW5fYnlfc2NpZChzdHJ1Y3QgbDJjYXBfY2hhbl9saXN0ICpsLCB1MTYgY2lkKQorc3RhdGljIHN0cnVjdCBsMmNhcF9jaGFuICpsMmNhcF9nZXRfY2hhbl9ieV9zY2lkKHN0cnVjdCBsMmNhcF9jb25uICpjb25uLCB1MTYgY2lkKQogewotCXN0cnVjdCBzb2NrICpzOwotCXJlYWRfbG9jaygmbC0+bG9jayk7Ci0JcyA9IF9fbDJjYXBfZ2V0X2NoYW5fYnlfc2NpZChsLCBjaWQpOwotCWlmIChzKQotCQliaF9sb2NrX3NvY2socyk7Ci0JcmVhZF91bmxvY2soJmwtPmxvY2spOwotCXJldHVybiBzOworCXN0cnVjdCBsMmNhcF9jaGFuICpjOworCisJcmVhZF9sb2NrKCZjb25uLT5jaGFuX2xvY2spOworCWMgPSBfX2wyY2FwX2dldF9jaGFuX2J5X3NjaWQoY29ubiwgY2lkKTsKKwlpZiAoYykKKwkJYmhfbG9ja19zb2NrKGMtPnNrKTsKKwlyZWFkX3VubG9jaygmY29ubi0+Y2hhbl9sb2NrKTsKKwlyZXR1cm4gYzsKIH0KIAotc3RhdGljIHN0cnVjdCBzb2NrICpfX2wyY2FwX2dldF9jaGFuX2J5X2lkZW50KHN0cnVjdCBsMmNhcF9jaGFuX2xpc3QgKmwsIHU4IGlkZW50KQorc3RhdGljIHN0cnVjdCBsMmNhcF9jaGFuICpfX2wyY2FwX2dldF9jaGFuX2J5X2lkZW50KHN0cnVjdCBsMmNhcF9jb25uICpjb25uLCB1OCBpZGVudCkKIHsKLQlzdHJ1Y3Qgc29jayAqczsKLQlmb3IgKHMgPSBsLT5oZWFkOyBzOyBzID0gbDJjYXBfcGkocyktPm5leHRfYykgewotCQlpZiAobDJjYXBfcGkocyktPmlkZW50ID09IGlkZW50KQotCQkJYnJlYWs7CisJc3RydWN0IGwyY2FwX2NoYW4gKmM7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZjb25uLT5jaGFuX2wsIGxpc3QpIHsKKwkJaWYgKGMtPmlkZW50ID09IGlkZW50KQorCQkJcmV0dXJuIGM7CiAJfQotCXJldHVybiBzOworCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NrICpsMmNhcF9nZXRfY2hhbl9ieV9pZGVudChzdHJ1Y3QgbDJjYXBfY2hhbl9saXN0ICpsLCB1OCBpZGVudCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGwyY2FwX2NoYW4gKmwyY2FwX2dldF9jaGFuX2J5X2lkZW50KHN0cnVjdCBsMmNhcF9jb25uICpjb25uLCB1OCBpZGVudCkKIHsKLQlzdHJ1Y3Qgc29jayAqczsKLQlyZWFkX2xvY2soJmwtPmxvY2spOwotCXMgPSBfX2wyY2FwX2dldF9jaGFuX2J5X2lkZW50KGwsIGlkZW50KTsKLQlpZiAocykKLQkJYmhfbG9ja19zb2NrKHMpOwotCXJlYWRfdW5sb2NrKCZsLT5sb2NrKTsKLQlyZXR1cm4gczsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqYzsKKworCXJlYWRfbG9jaygmY29ubi0+Y2hhbl9sb2NrKTsKKwljID0gX19sMmNhcF9nZXRfY2hhbl9ieV9pZGVudChjb25uLCBpZGVudCk7CisJaWYgKGMpCisJCWJoX2xvY2tfc29jayhjLT5zayk7CisJcmVhZF91bmxvY2soJmNvbm4tPmNoYW5fbG9jayk7CisJcmV0dXJuIGM7CiB9CiAKLXN0YXRpYyB1MTYgbDJjYXBfYWxsb2NfY2lkKHN0cnVjdCBsMmNhcF9jaGFuX2xpc3QgKmwpCitzdGF0aWMgc3RydWN0IGwyY2FwX2NoYW4gKl9fbDJjYXBfZ2xvYmFsX2NoYW5fYnlfYWRkcihfX2xlMTYgcHNtLCBiZGFkZHJfdCAqc3JjKQoreworCXN0cnVjdCBsMmNhcF9jaGFuICpjOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmY2hhbl9saXN0LCBnbG9iYWxfbCkgeworCQlpZiAoYy0+c3BvcnQgPT0gcHNtICYmICFiYWNtcCgmYnRfc2soYy0+c2spLT5zcmMsIHNyYykpCisJCQlnb3RvIGZvdW5kOworCX0KKworCWMgPSBOVUxMOworZm91bmQ6CisJcmV0dXJuIGM7Cit9CisKK2ludCBsMmNhcF9hZGRfcHNtKHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCBiZGFkZHJfdCAqc3JjLCBfX2xlMTYgcHNtKQoreworCWludCBlcnI7CisKKwl3cml0ZV9sb2NrX2JoKCZjaGFuX2xpc3RfbG9jayk7CisKKwlpZiAocHNtICYmIF9fbDJjYXBfZ2xvYmFsX2NoYW5fYnlfYWRkcihwc20sIHNyYykpIHsKKwkJZXJyID0gLUVBRERSSU5VU0U7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAocHNtKSB7CisJCWNoYW4tPnBzbSA9IHBzbTsKKwkJY2hhbi0+c3BvcnQgPSBwc207CisJCWVyciA9IDA7CisJfSBlbHNlIHsKKwkJdTE2IHA7CisKKwkJZXJyID0gLUVJTlZBTDsKKwkJZm9yIChwID0gMHgxMDAxOyBwIDwgMHgxMTAwOyBwICs9IDIpCisJCQlpZiAoIV9fbDJjYXBfZ2xvYmFsX2NoYW5fYnlfYWRkcihjcHVfdG9fbGUxNihwKSwgc3JjKSkgeworCQkJCWNoYW4tPnBzbSAgID0gY3B1X3RvX2xlMTYocCk7CisJCQkJY2hhbi0+c3BvcnQgPSBjcHVfdG9fbGUxNihwKTsKKwkJCQllcnIgPSAwOworCQkJCWJyZWFrOworCQkJfQorCX0KKworZG9uZToKKwl3cml0ZV91bmxvY2tfYmgoJmNoYW5fbGlzdF9sb2NrKTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgbDJjYXBfYWRkX3NjaWQoc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4sICBfX3UxNiBzY2lkKQoreworCXdyaXRlX2xvY2tfYmgoJmNoYW5fbGlzdF9sb2NrKTsKKworCWNoYW4tPnNjaWQgPSBzY2lkOworCisJd3JpdGVfdW5sb2NrX2JoKCZjaGFuX2xpc3RfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUxNiBsMmNhcF9hbGxvY19jaWQoc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4pCiB7CiAJdTE2IGNpZCA9IEwyQ0FQX0NJRF9EWU5fU1RBUlQ7CiAKIAlmb3IgKDsgY2lkIDwgTDJDQVBfQ0lEX0RZTl9FTkQ7IGNpZCsrKSB7Ci0JCWlmICghX19sMmNhcF9nZXRfY2hhbl9ieV9zY2lkKGwsIGNpZCkpCisJCWlmICghX19sMmNhcF9nZXRfY2hhbl9ieV9zY2lkKGNvbm4sIGNpZCkpCiAJCQlyZXR1cm4gY2lkOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19sMmNhcF9jaGFuX2xpbmsoc3RydWN0IGwyY2FwX2NoYW5fbGlzdCAqbCwgc3RydWN0IHNvY2sgKnNrKQorc3RydWN0IGwyY2FwX2NoYW4gKmwyY2FwX2NoYW5fY3JlYXRlKHN0cnVjdCBzb2NrICpzaykKIHsKLQlzb2NrX2hvbGQoc2spOworCXN0cnVjdCBsMmNhcF9jaGFuICpjaGFuOwogCi0JaWYgKGwtPmhlYWQpCi0JCWwyY2FwX3BpKGwtPmhlYWQpLT5wcmV2X2MgPSBzazsKKwljaGFuID0ga3phbGxvYyhzaXplb2YoKmNoYW4pLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWNoYW4pCisJCXJldHVybiBOVUxMOwogCi0JbDJjYXBfcGkoc2spLT5uZXh0X2MgPSBsLT5oZWFkOwotCWwyY2FwX3BpKHNrKS0+cHJldl9jID0gTlVMTDsKLQlsLT5oZWFkID0gc2s7CisJY2hhbi0+c2sgPSBzazsKKworCXdyaXRlX2xvY2tfYmgoJmNoYW5fbGlzdF9sb2NrKTsKKwlsaXN0X2FkZCgmY2hhbi0+Z2xvYmFsX2wsICZjaGFuX2xpc3QpOworCXdyaXRlX3VubG9ja19iaCgmY2hhbl9saXN0X2xvY2spOworCisJcmV0dXJuIGNoYW47CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBsMmNhcF9jaGFuX3VubGluayhzdHJ1Y3QgbDJjYXBfY2hhbl9saXN0ICpsLCBzdHJ1Y3Qgc29jayAqc2spCit2b2lkIGwyY2FwX2NoYW5fZGVzdHJveShzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbikKIHsKLQlzdHJ1Y3Qgc29jayAqbmV4dCA9IGwyY2FwX3BpKHNrKS0+bmV4dF9jLCAqcHJldiA9IGwyY2FwX3BpKHNrKS0+cHJldl9jOworCXdyaXRlX2xvY2tfYmgoJmNoYW5fbGlzdF9sb2NrKTsKKwlsaXN0X2RlbCgmY2hhbi0+Z2xvYmFsX2wpOworCXdyaXRlX3VubG9ja19iaCgmY2hhbl9saXN0X2xvY2spOwogCi0Jd3JpdGVfbG9ja19iaCgmbC0+bG9jayk7Ci0JaWYgKHNrID09IGwtPmhlYWQpCi0JCWwtPmhlYWQgPSBuZXh0OwotCi0JaWYgKG5leHQpCi0JCWwyY2FwX3BpKG5leHQpLT5wcmV2X2MgPSBwcmV2OwotCWlmIChwcmV2KQotCQlsMmNhcF9waShwcmV2KS0+bmV4dF9jID0gbmV4dDsKLQl3cml0ZV91bmxvY2tfYmgoJmwtPmxvY2spOwotCi0JX19zb2NrX3B1dChzayk7CisJa2ZyZWUoY2hhbik7CiB9CiAKLXN0YXRpYyB2b2lkIF9fbDJjYXBfY2hhbl9hZGQoc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4sIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnBhcmVudCkKK3N0YXRpYyB2b2lkIF9fbDJjYXBfY2hhbl9hZGQoc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4sIHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuKQogewotCXN0cnVjdCBsMmNhcF9jaGFuX2xpc3QgKmwgPSAmY29ubi0+Y2hhbl9saXN0OworCXN0cnVjdCBzb2NrICpzayA9IGNoYW4tPnNrOwogCiAJQlRfREJHKCJjb25uICVwLCBwc20gMHglMi4yeCwgZGNpZCAweCU0LjR4IiwgY29ubiwKLQkJCWwyY2FwX3BpKHNrKS0+cHNtLCBsMmNhcF9waShzayktPmRjaWQpOworCQkJY2hhbi0+cHNtLCBjaGFuLT5kY2lkKTsKIAogCWNvbm4tPmRpc2NfcmVhc29uID0gMHgxMzsKIAotCWwyY2FwX3BpKHNrKS0+Y29ubiA9IGNvbm47CisJY2hhbi0+Y29ubiA9IGNvbm47CiAKIAlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19TRVFQQUNLRVQgfHwgc2stPnNrX3R5cGUgPT0gU09DS19TVFJFQU0pIHsKIAkJaWYgKGNvbm4tPmhjb24tPnR5cGUgPT0gTEVfTElOSykgewogCQkJLyogTEUgY29ubmVjdGlvbiAqLwotCQkJbDJjYXBfcGkoc2spLT5vbXR1ID0gTDJDQVBfTEVfREVGQVVMVF9NVFU7Ci0JCQlsMmNhcF9waShzayktPnNjaWQgPSBMMkNBUF9DSURfTEVfREFUQTsKLQkJCWwyY2FwX3BpKHNrKS0+ZGNpZCA9IEwyQ0FQX0NJRF9MRV9EQVRBOworCQkJY2hhbi0+b210dSA9IEwyQ0FQX0xFX0RFRkFVTFRfTVRVOworCQkJY2hhbi0+c2NpZCA9IEwyQ0FQX0NJRF9MRV9EQVRBOworCQkJY2hhbi0+ZGNpZCA9IEwyQ0FQX0NJRF9MRV9EQVRBOwogCQl9IGVsc2UgewogCQkJLyogQWxsb2MgQ0lEIGZvciBjb25uZWN0aW9uLW9yaWVudGVkIHNvY2tldCAqLwotCQkJbDJjYXBfcGkoc2spLT5zY2lkID0gbDJjYXBfYWxsb2NfY2lkKGwpOwotCQkJbDJjYXBfcGkoc2spLT5vbXR1ID0gTDJDQVBfREVGQVVMVF9NVFU7CisJCQljaGFuLT5zY2lkID0gbDJjYXBfYWxsb2NfY2lkKGNvbm4pOworCQkJY2hhbi0+b210dSA9IEwyQ0FQX0RFRkFVTFRfTVRVOwogCQl9CiAJfSBlbHNlIGlmIChzay0+c2tfdHlwZSA9PSBTT0NLX0RHUkFNKSB7CiAJCS8qIENvbm5lY3Rpb25sZXNzIHNvY2tldCAqLwotCQlsMmNhcF9waShzayktPnNjaWQgPSBMMkNBUF9DSURfQ09OTl9MRVNTOwotCQlsMmNhcF9waShzayktPmRjaWQgPSBMMkNBUF9DSURfQ09OTl9MRVNTOwotCQlsMmNhcF9waShzayktPm9tdHUgPSBMMkNBUF9ERUZBVUxUX01UVTsKKwkJY2hhbi0+c2NpZCA9IEwyQ0FQX0NJRF9DT05OX0xFU1M7CisJCWNoYW4tPmRjaWQgPSBMMkNBUF9DSURfQ09OTl9MRVNTOworCQljaGFuLT5vbXR1ID0gTDJDQVBfREVGQVVMVF9NVFU7CiAJfSBlbHNlIHsKIAkJLyogUmF3IHNvY2tldCBjYW4gc2VuZC9yZWN2IHNpZ25hbGxpbmcgbWVzc2FnZXMgb25seSAqLwotCQlsMmNhcF9waShzayktPnNjaWQgPSBMMkNBUF9DSURfU0lHTkFMSU5HOwotCQlsMmNhcF9waShzayktPmRjaWQgPSBMMkNBUF9DSURfU0lHTkFMSU5HOwotCQlsMmNhcF9waShzayktPm9tdHUgPSBMMkNBUF9ERUZBVUxUX01UVTsKKwkJY2hhbi0+c2NpZCA9IEwyQ0FQX0NJRF9TSUdOQUxJTkc7CisJCWNoYW4tPmRjaWQgPSBMMkNBUF9DSURfU0lHTkFMSU5HOworCQljaGFuLT5vbXR1ID0gTDJDQVBfREVGQVVMVF9NVFU7CiAJfQogCi0JX19sMmNhcF9jaGFuX2xpbmsobCwgc2spOworCXNvY2tfaG9sZChzayk7CiAKLQlpZiAocGFyZW50KQotCQlidF9hY2NlcHRfZW5xdWV1ZShwYXJlbnQsIHNrKTsKKwlsaXN0X2FkZCgmY2hhbi0+bGlzdCwgJmNvbm4tPmNoYW5fbCk7CiB9CiAKIC8qIERlbGV0ZSBjaGFubmVsLgogICogTXVzdCBiZSBjYWxsZWQgb24gdGhlIGxvY2tlZCBzb2NrZXQuICovCi12b2lkIGwyY2FwX2NoYW5fZGVsKHN0cnVjdCBzb2NrICpzaywgaW50IGVycikKK3ZvaWQgbDJjYXBfY2hhbl9kZWwoc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4sIGludCBlcnIpCiB7Ci0Jc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNvbm47CisJc3RydWN0IHNvY2sgKnNrID0gY2hhbi0+c2s7CisJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBjaGFuLT5jb25uOwogCXN0cnVjdCBzb2NrICpwYXJlbnQgPSBidF9zayhzayktPnBhcmVudDsKIAogCWwyY2FwX3NvY2tfY2xlYXJfdGltZXIoc2spOwogCi0JQlRfREJHKCJzayAlcCwgY29ubiAlcCwgZXJyICVkIiwgc2ssIGNvbm4sIGVycik7CisJQlRfREJHKCJjaGFuICVwLCBjb25uICVwLCBlcnIgJWQiLCBjaGFuLCBjb25uLCBlcnIpOwogCiAJaWYgKGNvbm4pIHsKLQkJLyogVW5saW5rIGZyb20gY2hhbm5lbCBsaXN0ICovCi0JCWwyY2FwX2NoYW5fdW5saW5rKCZjb25uLT5jaGFuX2xpc3QsIHNrKTsKLQkJbDJjYXBfcGkoc2spLT5jb25uID0gTlVMTDsKKwkJLyogRGVsZXRlIGZyb20gY2hhbm5lbCBsaXN0ICovCisJCXdyaXRlX2xvY2tfYmgoJmNvbm4tPmNoYW5fbG9jayk7CisJCWxpc3RfZGVsKCZjaGFuLT5saXN0KTsKKwkJd3JpdGVfdW5sb2NrX2JoKCZjb25uLT5jaGFuX2xvY2spOworCQlfX3NvY2tfcHV0KHNrKTsKKworCQljaGFuLT5jb25uID0gTlVMTDsKIAkJaGNpX2Nvbm5fcHV0KGNvbm4tPmhjb24pOwogCX0KIApAQCAtMjM5LDI5ICszMDQsMzUgQEAKIAl9IGVsc2UKIAkJc2stPnNrX3N0YXRlX2NoYW5nZShzayk7CiAKLQlza2JfcXVldWVfcHVyZ2UoVFhfUVVFVUUoc2spKTsKKwlpZiAoIShjaGFuLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9PVVRQVVRfRE9ORSAmJgorCQkJY2hhbi0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfSU5QVVRfRE9ORSkpCisJCXJldHVybjsKIAotCWlmIChsMmNhcF9waShzayktPm1vZGUgPT0gTDJDQVBfTU9ERV9FUlRNKSB7CisJc2tiX3F1ZXVlX3B1cmdlKCZjaGFuLT50eF9xKTsKKworCWlmIChjaGFuLT5tb2RlID09IEwyQ0FQX01PREVfRVJUTSkgewogCQlzdHJ1Y3Qgc3Jlal9saXN0ICpsLCAqdG1wOwogCi0JCWRlbF90aW1lcigmbDJjYXBfcGkoc2spLT5yZXRyYW5zX3RpbWVyKTsKLQkJZGVsX3RpbWVyKCZsMmNhcF9waShzayktPm1vbml0b3JfdGltZXIpOwotCQlkZWxfdGltZXIoJmwyY2FwX3BpKHNrKS0+YWNrX3RpbWVyKTsKKwkJZGVsX3RpbWVyKCZjaGFuLT5yZXRyYW5zX3RpbWVyKTsKKwkJZGVsX3RpbWVyKCZjaGFuLT5tb25pdG9yX3RpbWVyKTsKKwkJZGVsX3RpbWVyKCZjaGFuLT5hY2tfdGltZXIpOwogCi0JCXNrYl9xdWV1ZV9wdXJnZShTUkVKX1FVRVVFKHNrKSk7Ci0JCXNrYl9xdWV1ZV9wdXJnZShCVVNZX1FVRVVFKHNrKSk7CisJCXNrYl9xdWV1ZV9wdXJnZSgmY2hhbi0+c3Jlal9xKTsKKwkJc2tiX3F1ZXVlX3B1cmdlKCZjaGFuLT5idXN5X3EpOwogCi0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsLCB0bXAsIFNSRUpfTElTVChzayksIGxpc3QpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGwsIHRtcCwgJmNoYW4tPnNyZWpfbCwgbGlzdCkgewogCQkJbGlzdF9kZWwoJmwtPmxpc3QpOwogCQkJa2ZyZWUobCk7CiAJCX0KIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTggbDJjYXBfZ2V0X2F1dGhfdHlwZShzdHJ1Y3Qgc29jayAqc2spCitzdGF0aWMgaW5saW5lIHU4IGwyY2FwX2dldF9hdXRoX3R5cGUoc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4pCiB7CisJc3RydWN0IHNvY2sgKnNrID0gY2hhbi0+c2s7CisKIAlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19SQVcpIHsKLQkJc3dpdGNoIChsMmNhcF9waShzayktPnNlY19sZXZlbCkgeworCQlzd2l0Y2ggKGNoYW4tPnNlY19sZXZlbCkgewogCQljYXNlIEJUX1NFQ1VSSVRZX0hJR0g6CiAJCQlyZXR1cm4gSENJX0FUX0RFRElDQVRFRF9CT05ESU5HX01JVE07CiAJCWNhc2UgQlRfU0VDVVJJVFlfTUVESVVNOgpAQCAtMjY5LDE2ICszNDAsMTYgQEAKIAkJZGVmYXVsdDoKIAkJCXJldHVybiBIQ0lfQVRfTk9fQk9ORElORzsKIAkJfQotCX0gZWxzZSBpZiAobDJjYXBfcGkoc2spLT5wc20gPT0gY3B1X3RvX2xlMTYoMHgwMDAxKSkgewotCQlpZiAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfTE9XKQotCQkJbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9TRFA7CisJfSBlbHNlIGlmIChjaGFuLT5wc20gPT0gY3B1X3RvX2xlMTYoMHgwMDAxKSkgeworCQlpZiAoY2hhbi0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX0xPVykKKwkJCWNoYW4tPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX1NEUDsKIAotCQlpZiAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfSElHSCkKKwkJaWYgKGNoYW4tPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9ISUdIKQogCQkJcmV0dXJuIEhDSV9BVF9OT19CT05ESU5HX01JVE07CiAJCWVsc2UKIAkJCXJldHVybiBIQ0lfQVRfTk9fQk9ORElORzsKIAl9IGVsc2UgewotCQlzd2l0Y2ggKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsKSB7CisJCXN3aXRjaCAoY2hhbi0+c2VjX2xldmVsKSB7CiAJCWNhc2UgQlRfU0VDVVJJVFlfSElHSDoKIAkJCXJldHVybiBIQ0lfQVRfR0VORVJBTF9CT05ESU5HX01JVE07CiAJCWNhc2UgQlRfU0VDVVJJVFlfTUVESVVNOgpAQCAtMjkwLDE1ICszNjEsMTQgQEAKIH0KIAogLyogU2VydmljZSBsZXZlbCBzZWN1cml0eSAqLwotc3RhdGljIGlubGluZSBpbnQgbDJjYXBfY2hlY2tfc2VjdXJpdHkoc3RydWN0IHNvY2sgKnNrKQorc3RhdGljIGlubGluZSBpbnQgbDJjYXBfY2hlY2tfc2VjdXJpdHkoc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4pCiB7Ci0Jc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNvbm47CisJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBjaGFuLT5jb25uOwogCV9fdTggYXV0aF90eXBlOwogCi0JYXV0aF90eXBlID0gbDJjYXBfZ2V0X2F1dGhfdHlwZShzayk7CisJYXV0aF90eXBlID0gbDJjYXBfZ2V0X2F1dGhfdHlwZShjaGFuKTsKIAotCXJldHVybiBoY2lfY29ubl9zZWN1cml0eShjb25uLT5oY29uLCBsMmNhcF9waShzayktPnNlY19sZXZlbCwKLQkJCQkJCQkJYXV0aF90eXBlKTsKKwlyZXR1cm4gaGNpX2Nvbm5fc2VjdXJpdHkoY29ubi0+aGNvbiwgY2hhbi0+c2VjX2xldmVsLCBhdXRoX3R5cGUpOwogfQogCiB1OCBsMmNhcF9nZXRfaWRlbnQoc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4pCkBAIC0zNDEsMTEgKzQxMSwxMiBAQAogCWhjaV9zZW5kX2FjbChjb25uLT5oY29uLCBza2IsIGZsYWdzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGwyY2FwX3NlbmRfc2ZyYW1lKHN0cnVjdCBsMmNhcF9waW5mbyAqcGksIHUxNiBjb250cm9sKQorc3RhdGljIGlubGluZSB2b2lkIGwyY2FwX3NlbmRfc2ZyYW1lKHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCB1MTYgY29udHJvbCkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBsMmNhcF9oZHIgKmxoOwotCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gcGktPmNvbm47CisJc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9IGwyY2FwX3BpKGNoYW4tPnNrKTsKKwlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGNoYW4tPmNvbm47CiAJc3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopcGk7CiAJaW50IGNvdW50LCBobGVuID0gTDJDQVBfSERSX1NJWkUgKyAyOwogCXU4IGZsYWdzOwpAQCAtMzUzLDIyICs0MjQsMjIgQEAKIAlpZiAoc2stPnNrX3N0YXRlICE9IEJUX0NPTk5FQ1RFRCkKIAkJcmV0dXJuOwogCi0JaWYgKHBpLT5mY3MgPT0gTDJDQVBfRkNTX0NSQzE2KQorCWlmIChjaGFuLT5mY3MgPT0gTDJDQVBfRkNTX0NSQzE2KQogCQlobGVuICs9IDI7CiAKLQlCVF9EQkcoInBpICVwLCBjb250cm9sIDB4JTIuMngiLCBwaSwgY29udHJvbCk7CisJQlRfREJHKCJjaGFuICVwLCBjb250cm9sIDB4JTIuMngiLCBjaGFuLCBjb250cm9sKTsKIAogCWNvdW50ID0gbWluX3QodW5zaWduZWQgaW50LCBjb25uLT5tdHUsIGhsZW4pOwogCWNvbnRyb2wgfD0gTDJDQVBfQ1RSTF9GUkFNRV9UWVBFOwogCi0JaWYgKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TRU5EX0ZCSVQpIHsKKwlpZiAoY2hhbi0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fU0VORF9GQklUKSB7CiAJCWNvbnRyb2wgfD0gTDJDQVBfQ1RSTF9GSU5BTDsKLQkJcGktPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fU0VORF9GQklUOworCQljaGFuLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1NFTkRfRkJJVDsKIAl9CiAKLQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NFTkRfUEJJVCkgeworCWlmIChjaGFuLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TRU5EX1BCSVQpIHsKIAkJY29udHJvbCB8PSBMMkNBUF9DVFJMX1BPTEw7Ci0JCXBpLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1NFTkRfUEJJVDsKKwkJY2hhbi0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9TRU5EX1BCSVQ7CiAJfQogCiAJc2tiID0gYnRfc2tiX2FsbG9jKGNvdW50LCBHRlBfQVRPTUlDKTsKQEAgLTM3NywxMCArNDQ4LDEwIEBACiAKIAlsaCA9IChzdHJ1Y3QgbDJjYXBfaGRyICopIHNrYl9wdXQoc2tiLCBMMkNBUF9IRFJfU0laRSk7CiAJbGgtPmxlbiA9IGNwdV90b19sZTE2KGhsZW4gLSBMMkNBUF9IRFJfU0laRSk7Ci0JbGgtPmNpZCA9IGNwdV90b19sZTE2KHBpLT5kY2lkKTsKKwlsaC0+Y2lkID0gY3B1X3RvX2xlMTYoY2hhbi0+ZGNpZCk7CiAJcHV0X3VuYWxpZ25lZF9sZTE2KGNvbnRyb2wsIHNrYl9wdXQoc2tiLCAyKSk7CiAKLQlpZiAocGktPmZjcyA9PSBMMkNBUF9GQ1NfQ1JDMTYpIHsKKwlpZiAoY2hhbi0+ZmNzID09IEwyQ0FQX0ZDU19DUkMxNikgewogCQl1MTYgZmNzID0gY3JjMTYoMCwgKHU4ICopbGgsIGNvdW50IC0gMik7CiAJCXB1dF91bmFsaWduZWRfbGUxNihmY3MsIHNrYl9wdXQoc2tiLCAyKSk7CiAJfQpAQCAtMzkwLDQ1ICs0NjEsNDYgQEAKIAllbHNlCiAJCWZsYWdzID0gQUNMX1NUQVJUOwogCi0JaGNpX3NlbmRfYWNsKHBpLT5jb25uLT5oY29uLCBza2IsIGZsYWdzKTsKKwloY2lfc2VuZF9hY2woY2hhbi0+Y29ubi0+aGNvbiwgc2tiLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBsMmNhcF9zZW5kX3JyX29yX3JucihzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpLCB1MTYgY29udHJvbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBsMmNhcF9zZW5kX3JyX29yX3JucihzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiwgdTE2IGNvbnRyb2wpCiB7Ci0JaWYgKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9MT0NBTF9CVVNZKSB7CisJaWYgKGNoYW4tPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX0xPQ0FMX0JVU1kpIHsKIAkJY29udHJvbCB8PSBMMkNBUF9TVVBFUl9SQ1ZfTk9UX1JFQURZOwotCQlwaS0+Y29ubl9zdGF0ZSB8PSBMMkNBUF9DT05OX1JOUl9TRU5UOworCQljaGFuLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fUk5SX1NFTlQ7CiAJfSBlbHNlCiAJCWNvbnRyb2wgfD0gTDJDQVBfU1VQRVJfUkNWX1JFQURZOwogCi0JY29udHJvbCB8PSBwaS0+YnVmZmVyX3NlcSA8PCBMMkNBUF9DVFJMX1JFUVNFUV9TSElGVDsKKwljb250cm9sIHw9IGNoYW4tPmJ1ZmZlcl9zZXEgPDwgTDJDQVBfQ1RSTF9SRVFTRVFfU0hJRlQ7CiAKLQlsMmNhcF9zZW5kX3NmcmFtZShwaSwgY29udHJvbCk7CisJbDJjYXBfc2VuZF9zZnJhbWUoY2hhbiwgY29udHJvbCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IF9fbDJjYXBfbm9fY29ubl9wZW5kaW5nKHN0cnVjdCBzb2NrICpzaykKK3N0YXRpYyBpbmxpbmUgaW50IF9fbDJjYXBfbm9fY29ubl9wZW5kaW5nKHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuKQogewotCXJldHVybiAhKGwyY2FwX3BpKHNrKS0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfQ09OTkVDVF9QRU5EKTsKKwlyZXR1cm4gIShjaGFuLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9DT05ORUNUX1BFTkQpOwogfQogCi1zdGF0aWMgdm9pZCBsMmNhcF9kb19zdGFydChzdHJ1Y3Qgc29jayAqc2spCitzdGF0aWMgdm9pZCBsMmNhcF9kb19zdGFydChzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbikKIHsKLQlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y29ubjsKKwlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGNoYW4tPmNvbm47CiAKIAlpZiAoY29ubi0+aW5mb19zdGF0ZSAmIEwyQ0FQX0lORk9fRkVBVF9NQVNLX1JFUV9TRU5UKSB7CiAJCWlmICghKGNvbm4tPmluZm9fc3RhdGUgJiBMMkNBUF9JTkZPX0ZFQVRfTUFTS19SRVFfRE9ORSkpCiAJCQlyZXR1cm47CiAKLQkJaWYgKGwyY2FwX2NoZWNrX3NlY3VyaXR5KHNrKSAmJiBfX2wyY2FwX25vX2Nvbm5fcGVuZGluZyhzaykpIHsKKwkJaWYgKGwyY2FwX2NoZWNrX3NlY3VyaXR5KGNoYW4pICYmCisJCQkJX19sMmNhcF9ub19jb25uX3BlbmRpbmcoY2hhbikpIHsKIAkJCXN0cnVjdCBsMmNhcF9jb25uX3JlcSByZXE7Ci0JCQlyZXEuc2NpZCA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+c2NpZCk7Ci0JCQlyZXEucHNtICA9IGwyY2FwX3BpKHNrKS0+cHNtOworCQkJcmVxLnNjaWQgPSBjcHVfdG9fbGUxNihjaGFuLT5zY2lkKTsKKwkJCXJlcS5wc20gID0gY2hhbi0+cHNtOwogCi0JCQlsMmNhcF9waShzayktPmlkZW50ID0gbDJjYXBfZ2V0X2lkZW50KGNvbm4pOwotCQkJbDJjYXBfcGkoc2spLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfQ09OTkVDVF9QRU5EOworCQkJY2hhbi0+aWRlbnQgPSBsMmNhcF9nZXRfaWRlbnQoY29ubik7CisJCQljaGFuLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfQ09OTkVDVF9QRU5EOwogCi0JCQlsMmNhcF9zZW5kX2NtZChjb25uLCBsMmNhcF9waShzayktPmlkZW50LAotCQkJCQlMMkNBUF9DT05OX1JFUSwgc2l6ZW9mKHJlcSksICZyZXEpOworCQkJbDJjYXBfc2VuZF9jbWQoY29ubiwgY2hhbi0+aWRlbnQsIEwyQ0FQX0NPTk5fUkVRLAorCQkJCQkJCXNpemVvZihyZXEpLCAmcmVxKTsKIAkJfQogCX0gZWxzZSB7CiAJCXN0cnVjdCBsMmNhcF9pbmZvX3JlcSByZXE7CkBAIC00NjEsMjMgKzUzMywyNCBAQAogCX0KIH0KIAotdm9pZCBsMmNhcF9zZW5kX2Rpc2Nvbm5fcmVxKHN0cnVjdCBsMmNhcF9jb25uICpjb25uLCBzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpCit2b2lkIGwyY2FwX3NlbmRfZGlzY29ubl9yZXEoc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4sIHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCBpbnQgZXJyKQogeworCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3QgbDJjYXBfZGlzY29ubl9yZXEgcmVxOwogCiAJaWYgKCFjb25uKQogCQlyZXR1cm47CiAKLQlza2JfcXVldWVfcHVyZ2UoVFhfUVVFVUUoc2spKTsKKwlzayA9IGNoYW4tPnNrOwogCi0JaWYgKGwyY2FwX3BpKHNrKS0+bW9kZSA9PSBMMkNBUF9NT0RFX0VSVE0pIHsKLQkJZGVsX3RpbWVyKCZsMmNhcF9waShzayktPnJldHJhbnNfdGltZXIpOwotCQlkZWxfdGltZXIoJmwyY2FwX3BpKHNrKS0+bW9uaXRvcl90aW1lcik7Ci0JCWRlbF90aW1lcigmbDJjYXBfcGkoc2spLT5hY2tfdGltZXIpOworCWlmIChjaGFuLT5tb2RlID09IEwyQ0FQX01PREVfRVJUTSkgeworCQlkZWxfdGltZXIoJmNoYW4tPnJldHJhbnNfdGltZXIpOworCQlkZWxfdGltZXIoJmNoYW4tPm1vbml0b3JfdGltZXIpOworCQlkZWxfdGltZXIoJmNoYW4tPmFja190aW1lcik7CiAJfQogCi0JcmVxLmRjaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPmRjaWQpOwotCXJlcS5zY2lkID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5zY2lkKTsKKwlyZXEuZGNpZCA9IGNwdV90b19sZTE2KGNoYW4tPmRjaWQpOworCXJlcS5zY2lkID0gY3B1X3RvX2xlMTYoY2hhbi0+c2NpZCk7CiAJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfZ2V0X2lkZW50KGNvbm4pLAogCQkJTDJDQVBfRElTQ09OTl9SRVEsIHNpemVvZihyZXEpLCAmcmVxKTsKIApAQCAtNDg4LDE3ICs1NjEsMTUgQEAKIC8qIC0tLS0gTDJDQVAgY29ubmVjdGlvbnMgLS0tLSAqLwogc3RhdGljIHZvaWQgbDJjYXBfY29ubl9zdGFydChzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubikKIHsKLQlzdHJ1Y3QgbDJjYXBfY2hhbl9saXN0ICpsID0gJmNvbm4tPmNoYW5fbGlzdDsKLQlzdHJ1Y3Qgc29ja19kZWxfbGlzdCBkZWwsICp0bXAxLCAqdG1wMjsKLQlzdHJ1Y3Qgc29jayAqc2s7CisJc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4sICp0bXA7CiAKIAlCVF9EQkcoImNvbm4gJXAiLCBjb25uKTsKIAotCUlOSVRfTElTVF9IRUFEKCZkZWwubGlzdCk7CisJcmVhZF9sb2NrKCZjb25uLT5jaGFuX2xvY2spOwogCi0JcmVhZF9sb2NrKCZsLT5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hhbiwgdG1wLCAmY29ubi0+Y2hhbl9sLCBsaXN0KSB7CisJCXN0cnVjdCBzb2NrICpzayA9IGNoYW4tPnNrOwogCi0JZm9yIChzayA9IGwtPmhlYWQ7IHNrOyBzayA9IGwyY2FwX3BpKHNrKS0+bmV4dF9jKSB7CiAJCWJoX2xvY2tfc29jayhzayk7CiAKIAkJaWYgKHNrLT5za190eXBlICE9IFNPQ0tfU0VRUEFDS0VUICYmCkBAIC01MTAsNDAgKzU4MSw0MSBAQAogCQlpZiAoc2stPnNrX3N0YXRlID09IEJUX0NPTk5FQ1QpIHsKIAkJCXN0cnVjdCBsMmNhcF9jb25uX3JlcSByZXE7CiAKLQkJCWlmICghbDJjYXBfY2hlY2tfc2VjdXJpdHkoc2spIHx8Ci0JCQkJCSFfX2wyY2FwX25vX2Nvbm5fcGVuZGluZyhzaykpIHsKKwkJCWlmICghbDJjYXBfY2hlY2tfc2VjdXJpdHkoY2hhbikgfHwKKwkJCQkJIV9fbDJjYXBfbm9fY29ubl9wZW5kaW5nKGNoYW4pKSB7CiAJCQkJYmhfdW5sb2NrX3NvY2soc2spOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCi0JCQlpZiAoIWwyY2FwX21vZGVfc3VwcG9ydGVkKGwyY2FwX3BpKHNrKS0+bW9kZSwKKwkJCWlmICghbDJjYXBfbW9kZV9zdXBwb3J0ZWQoY2hhbi0+bW9kZSwKIAkJCQkJY29ubi0+ZmVhdF9tYXNrKQotCQkJCQkmJiBsMmNhcF9waShzayktPmNvbmZfc3RhdGUgJgorCQkJCQkmJiBjaGFuLT5jb25mX3N0YXRlICYKIAkJCQkJTDJDQVBfQ09ORl9TVEFURTJfREVWSUNFKSB7Ci0JCQkJdG1wMSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2NrX2RlbF9saXN0KSwKLQkJCQkJCUdGUF9BVE9NSUMpOwotCQkJCXRtcDEtPnNrID0gc2s7Ci0JCQkJbGlzdF9hZGRfdGFpbCgmdG1wMS0+bGlzdCwgJmRlbC5saXN0KTsKKwkJCQkvKiBfX2wyY2FwX3NvY2tfY2xvc2UoKSBjYWxscyBsaXN0X2RlbChjaGFuKQorCQkJCSAqIHNvIHJlbGVhc2UgdGhlIGxvY2sgKi8KKwkJCQlyZWFkX3VubG9ja19iaCgmY29ubi0+Y2hhbl9sb2NrKTsKKwkJCQkgX19sMmNhcF9zb2NrX2Nsb3NlKHNrLCBFQ09OTlJFU0VUKTsKKwkJCQlyZWFkX2xvY2tfYmgoJmNvbm4tPmNoYW5fbG9jayk7CiAJCQkJYmhfdW5sb2NrX3NvY2soc2spOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCi0JCQlyZXEuc2NpZCA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+c2NpZCk7Ci0JCQlyZXEucHNtICA9IGwyY2FwX3BpKHNrKS0+cHNtOworCQkJcmVxLnNjaWQgPSBjcHVfdG9fbGUxNihjaGFuLT5zY2lkKTsKKwkJCXJlcS5wc20gID0gY2hhbi0+cHNtOwogCi0JCQlsMmNhcF9waShzayktPmlkZW50ID0gbDJjYXBfZ2V0X2lkZW50KGNvbm4pOwotCQkJbDJjYXBfcGkoc2spLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfQ09OTkVDVF9QRU5EOworCQkJY2hhbi0+aWRlbnQgPSBsMmNhcF9nZXRfaWRlbnQoY29ubik7CisJCQljaGFuLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfQ09OTkVDVF9QRU5EOwogCi0JCQlsMmNhcF9zZW5kX2NtZChjb25uLCBsMmNhcF9waShzayktPmlkZW50LAotCQkJCUwyQ0FQX0NPTk5fUkVRLCBzaXplb2YocmVxKSwgJnJlcSk7CisJCQlsMmNhcF9zZW5kX2NtZChjb25uLCBjaGFuLT5pZGVudCwgTDJDQVBfQ09OTl9SRVEsCisJCQkJCQkJc2l6ZW9mKHJlcSksICZyZXEpOwogCiAJCX0gZWxzZSBpZiAoc2stPnNrX3N0YXRlID09IEJUX0NPTk5FQ1QyKSB7CiAJCQlzdHJ1Y3QgbDJjYXBfY29ubl9yc3AgcnNwOwogCQkJY2hhciBidWZbMTI4XTsKLQkJCXJzcC5zY2lkID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5kY2lkKTsKLQkJCXJzcC5kY2lkID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5zY2lkKTsKKwkJCXJzcC5zY2lkID0gY3B1X3RvX2xlMTYoY2hhbi0+ZGNpZCk7CisJCQlyc3AuZGNpZCA9IGNwdV90b19sZTE2KGNoYW4tPnNjaWQpOwogCi0JCQlpZiAobDJjYXBfY2hlY2tfc2VjdXJpdHkoc2spKSB7CisJCQlpZiAobDJjYXBfY2hlY2tfc2VjdXJpdHkoY2hhbikpIHsKIAkJCQlpZiAoYnRfc2soc2spLT5kZWZlcl9zZXR1cCkgewogCQkJCQlzdHJ1Y3Qgc29jayAqcGFyZW50ID0gYnRfc2soc2spLT5wYXJlbnQ7CiAJCQkJCXJzcC5yZXN1bHQgPSBjcHVfdG9fbGUxNihMMkNBUF9DUl9QRU5EKTsKQEAgLTU2MCw4MCArNjMyLDc3IEBACiAJCQkJcnNwLnN0YXR1cyA9IGNwdV90b19sZTE2KEwyQ0FQX0NTX0FVVEhFTl9QRU5EKTsKIAkJCX0KIAotCQkJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfcGkoc2spLT5pZGVudCwKLQkJCQkJTDJDQVBfQ09OTl9SU1AsIHNpemVvZihyc3ApLCAmcnNwKTsKKwkJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGNoYW4tPmlkZW50LCBMMkNBUF9DT05OX1JTUCwKKwkJCQkJCQlzaXplb2YocnNwKSwgJnJzcCk7CiAKLQkJCWlmIChsMmNhcF9waShzayktPmNvbmZfc3RhdGUgJiBMMkNBUF9DT05GX1JFUV9TRU5UIHx8CisJCQlpZiAoY2hhbi0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfUkVRX1NFTlQgfHwKIAkJCQkJcnNwLnJlc3VsdCAhPSBMMkNBUF9DUl9TVUNDRVNTKSB7CiAJCQkJYmhfdW5sb2NrX3NvY2soc2spOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCi0JCQlsMmNhcF9waShzayktPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9SRVFfU0VOVDsKKwkJCWNoYW4tPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9SRVFfU0VOVDsKIAkJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGwyY2FwX2dldF9pZGVudChjb25uKSwgTDJDQVBfQ09ORl9SRVEsCi0JCQkJCQlsMmNhcF9idWlsZF9jb25mX3JlcShzaywgYnVmKSwgYnVmKTsKLQkJCWwyY2FwX3BpKHNrKS0+bnVtX2NvbmZfcmVxKys7CisJCQkJCQlsMmNhcF9idWlsZF9jb25mX3JlcShjaGFuLCBidWYpLCBidWYpOworCQkJY2hhbi0+bnVtX2NvbmZfcmVxKys7CiAJCX0KIAogCQliaF91bmxvY2tfc29jayhzayk7CiAJfQogCi0JcmVhZF91bmxvY2soJmwtPmxvY2spOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRtcDEsIHRtcDIsICZkZWwubGlzdCwgbGlzdCkgewotCQliaF9sb2NrX3NvY2sodG1wMS0+c2spOwotCQlfX2wyY2FwX3NvY2tfY2xvc2UodG1wMS0+c2ssIEVDT05OUkVTRVQpOwotCQliaF91bmxvY2tfc29jayh0bXAxLT5zayk7Ci0JCWxpc3RfZGVsKCZ0bXAxLT5saXN0KTsKLQkJa2ZyZWUodG1wMSk7Ci0JfQorCXJlYWRfdW5sb2NrKCZjb25uLT5jaGFuX2xvY2spOwogfQogCiAvKiBGaW5kIHNvY2tldCB3aXRoIGNpZCBhbmQgc291cmNlIGJkYWRkci4KICAqIFJldHVybnMgY2xvc2VzdCBtYXRjaCwgbG9ja2VkLgogICovCi1zdGF0aWMgc3RydWN0IHNvY2sgKmwyY2FwX2dldF9zb2NrX2J5X3NjaWQoaW50IHN0YXRlLCBfX2xlMTYgY2lkLCBiZGFkZHJfdCAqc3JjKQorc3RhdGljIHN0cnVjdCBsMmNhcF9jaGFuICpsMmNhcF9nbG9iYWxfY2hhbl9ieV9zY2lkKGludCBzdGF0ZSwgX19sZTE2IGNpZCwgYmRhZGRyX3QgKnNyYykKIHsKLQlzdHJ1Y3Qgc29jayAqcywgKnNrID0gTlVMTCwgKnNrMSA9IE5VTEw7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisJc3RydWN0IGwyY2FwX2NoYW4gKmMsICpjMSA9IE5VTEw7CiAKLQlyZWFkX2xvY2soJmwyY2FwX3NrX2xpc3QubG9jayk7CisJcmVhZF9sb2NrKCZjaGFuX2xpc3RfbG9jayk7CiAKLQlza19mb3JfZWFjaChzaywgbm9kZSwgJmwyY2FwX3NrX2xpc3QuaGVhZCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJmNoYW5fbGlzdCwgZ2xvYmFsX2wpIHsKKwkJc3RydWN0IHNvY2sgKnNrID0gYy0+c2s7CisKIAkJaWYgKHN0YXRlICYmIHNrLT5za19zdGF0ZSAhPSBzdGF0ZSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChsMmNhcF9waShzayktPnNjaWQgPT0gY2lkKSB7CisJCWlmIChjLT5zY2lkID09IGNpZCkgewogCQkJLyogRXhhY3QgbWF0Y2guICovCi0JCQlpZiAoIWJhY21wKCZidF9zayhzayktPnNyYywgc3JjKSkKLQkJCQlicmVhazsKKwkJCWlmICghYmFjbXAoJmJ0X3NrKHNrKS0+c3JjLCBzcmMpKSB7CisJCQkJcmVhZF91bmxvY2soJmNoYW5fbGlzdF9sb2NrKTsKKwkJCQlyZXR1cm4gYzsKKwkJCX0KIAogCQkJLyogQ2xvc2VzdCBtYXRjaCAqLwogCQkJaWYgKCFiYWNtcCgmYnRfc2soc2spLT5zcmMsIEJEQUREUl9BTlkpKQotCQkJCXNrMSA9IHNrOworCQkJCWMxID0gYzsKIAkJfQogCX0KLQlzID0gbm9kZSA/IHNrIDogc2sxOwotCWlmIChzKQotCQliaF9sb2NrX3NvY2socyk7Ci0JcmVhZF91bmxvY2soJmwyY2FwX3NrX2xpc3QubG9jayk7CiAKLQlyZXR1cm4gczsKKwlyZWFkX3VubG9jaygmY2hhbl9saXN0X2xvY2spOworCisJcmV0dXJuIGMxOwogfQogCiBzdGF0aWMgdm9pZCBsMmNhcF9sZV9jb25uX3JlYWR5KHN0cnVjdCBsMmNhcF9jb25uICpjb25uKQogewotCXN0cnVjdCBsMmNhcF9jaGFuX2xpc3QgKmxpc3QgPSAmY29ubi0+Y2hhbl9saXN0OwotCXN0cnVjdCBzb2NrICpwYXJlbnQsICp1bmluaXRpYWxpemVkX3Zhcihzayk7CisJc3RydWN0IHNvY2sgKnBhcmVudCwgKnNrOworCXN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCAqcGNoYW47CiAKIAlCVF9EQkcoIiIpOwogCiAJLyogQ2hlY2sgaWYgd2UgaGF2ZSBzb2NrZXQgbGlzdGVuaW5nIG9uIGNpZCAqLwotCXBhcmVudCA9IGwyY2FwX2dldF9zb2NrX2J5X3NjaWQoQlRfTElTVEVOLCBMMkNBUF9DSURfTEVfREFUQSwKKwlwY2hhbiA9IGwyY2FwX2dsb2JhbF9jaGFuX2J5X3NjaWQoQlRfTElTVEVOLCBMMkNBUF9DSURfTEVfREFUQSwKIAkJCQkJCQljb25uLT5zcmMpOwotCWlmICghcGFyZW50KQorCWlmICghcGNoYW4pCiAJCXJldHVybjsKIAorCXBhcmVudCA9IHBjaGFuLT5zazsKKworCWJoX2xvY2tfc29jayhwYXJlbnQpOworCiAJLyogQ2hlY2sgZm9yIGJhY2tsb2cgc2l6ZSAqLwogCWlmIChza19hY2NlcHRxX2lzX2Z1bGwocGFyZW50KSkgewogCQlCVF9EQkcoImJhY2tsb2cgZnVsbCAlZCIsIHBhcmVudC0+c2tfYWNrX2JhY2tsb2cpOwpAQCAtNjQ0LDIyICs3MTMsMzMgQEAKIAlpZiAoIXNrKQogCQlnb3RvIGNsZWFuOwogCi0Jd3JpdGVfbG9ja19iaCgmbGlzdC0+bG9jayk7CisJY2hhbiA9IGwyY2FwX2NoYW5fY3JlYXRlKHNrKTsKKwlpZiAoIWNoYW4pIHsKKwkJbDJjYXBfc29ja19raWxsKHNrKTsKKwkJZ290byBjbGVhbjsKKwl9CisKKwlsMmNhcF9waShzayktPmNoYW4gPSBjaGFuOworCisJd3JpdGVfbG9ja19iaCgmY29ubi0+Y2hhbl9sb2NrKTsKIAogCWhjaV9jb25uX2hvbGQoY29ubi0+aGNvbik7CiAKIAlsMmNhcF9zb2NrX2luaXQoc2ssIHBhcmVudCk7CisKIAliYWNweSgmYnRfc2soc2spLT5zcmMsIGNvbm4tPnNyYyk7CiAJYmFjcHkoJmJ0X3NrKHNrKS0+ZHN0LCBjb25uLT5kc3QpOwogCi0JX19sMmNhcF9jaGFuX2FkZChjb25uLCBzaywgcGFyZW50KTsKKwlidF9hY2NlcHRfZW5xdWV1ZShwYXJlbnQsIHNrKTsKKworCV9fbDJjYXBfY2hhbl9hZGQoY29ubiwgY2hhbik7CiAKIAlsMmNhcF9zb2NrX3NldF90aW1lcihzaywgc2stPnNrX3NuZHRpbWVvKTsKIAogCXNrLT5za19zdGF0ZSA9IEJUX0NPTk5FQ1RFRDsKIAlwYXJlbnQtPnNrX2RhdGFfcmVhZHkocGFyZW50LCAwKTsKIAotCXdyaXRlX3VubG9ja19iaCgmbGlzdC0+bG9jayk7CisJd3JpdGVfdW5sb2NrX2JoKCZjb25uLT5jaGFuX2xvY2spOwogCiBjbGVhbjoKIAliaF91bmxvY2tfc29jayhwYXJlbnQpOwpAQCAtNjY3LDE3ICs3NDcsMTggQEAKIAogc3RhdGljIHZvaWQgbDJjYXBfY29ubl9yZWFkeShzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubikKIHsKLQlzdHJ1Y3QgbDJjYXBfY2hhbl9saXN0ICpsID0gJmNvbm4tPmNoYW5fbGlzdDsKLQlzdHJ1Y3Qgc29jayAqc2s7CisJc3RydWN0IGwyY2FwX2NoYW4gKmNoYW47CiAKIAlCVF9EQkcoImNvbm4gJXAiLCBjb25uKTsKIAogCWlmICghY29ubi0+aGNvbi0+b3V0ICYmIGNvbm4tPmhjb24tPnR5cGUgPT0gTEVfTElOSykKIAkJbDJjYXBfbGVfY29ubl9yZWFkeShjb25uKTsKIAotCXJlYWRfbG9jaygmbC0+bG9jayk7CisJcmVhZF9sb2NrKCZjb25uLT5jaGFuX2xvY2spOwogCi0JZm9yIChzayA9IGwtPmhlYWQ7IHNrOyBzayA9IGwyY2FwX3BpKHNrKS0+bmV4dF9jKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGFuLCAmY29ubi0+Y2hhbl9sLCBsaXN0KSB7CisJCXN0cnVjdCBzb2NrICpzayA9IGNoYW4tPnNrOworCiAJCWJoX2xvY2tfc29jayhzayk7CiAKIAkJaWYgKGNvbm4tPmhjb24tPnR5cGUgPT0gTEVfTElOSykgewpAQCAtNjkyLDMwICs3NzMsMzEgQEAKIAkJCXNrLT5za19zdGF0ZSA9IEJUX0NPTk5FQ1RFRDsKIAkJCXNrLT5za19zdGF0ZV9jaGFuZ2Uoc2spOwogCQl9IGVsc2UgaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNUKQotCQkJbDJjYXBfZG9fc3RhcnQoc2spOworCQkJbDJjYXBfZG9fc3RhcnQoY2hhbik7CiAKIAkJYmhfdW5sb2NrX3NvY2soc2spOwogCX0KIAotCXJlYWRfdW5sb2NrKCZsLT5sb2NrKTsKKwlyZWFkX3VubG9jaygmY29ubi0+Y2hhbl9sb2NrKTsKIH0KIAogLyogTm90aWZ5IHNvY2tldHMgdGhhdCB3ZSBjYW5ub3QgZ3VhcmFudHkgcmVsaWFiaWxpdHkgYW55bW9yZSAqLwogc3RhdGljIHZvaWQgbDJjYXBfY29ubl91bnJlbGlhYmxlKHN0cnVjdCBsMmNhcF9jb25uICpjb25uLCBpbnQgZXJyKQogewotCXN0cnVjdCBsMmNhcF9jaGFuX2xpc3QgKmwgPSAmY29ubi0+Y2hhbl9saXN0OwotCXN0cnVjdCBzb2NrICpzazsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbjsKIAogCUJUX0RCRygiY29ubiAlcCIsIGNvbm4pOwogCi0JcmVhZF9sb2NrKCZsLT5sb2NrKTsKKwlyZWFkX2xvY2soJmNvbm4tPmNoYW5fbG9jayk7CiAKLQlmb3IgKHNrID0gbC0+aGVhZDsgc2s7IHNrID0gbDJjYXBfcGkoc2spLT5uZXh0X2MpIHsKLQkJaWYgKGwyY2FwX3BpKHNrKS0+Zm9yY2VfcmVsaWFibGUpCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGFuLCAmY29ubi0+Y2hhbl9sLCBsaXN0KSB7CisJCXN0cnVjdCBzb2NrICpzayA9IGNoYW4tPnNrOworCisJCWlmIChjaGFuLT5mb3JjZV9yZWxpYWJsZSkKIAkJCXNrLT5za19lcnIgPSBlcnI7CiAJfQogCi0JcmVhZF91bmxvY2soJmwtPmxvY2spOworCXJlYWRfdW5sb2NrKCZjb25uLT5jaGFuX2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCBsMmNhcF9pbmZvX3RpbWVvdXQodW5zaWduZWQgbG9uZyBhcmcpCkBAIC03NTUsNyArODM3LDkgQEAKIAljb25uLT5mZWF0X21hc2sgPSAwOwogCiAJc3Bpbl9sb2NrX2luaXQoJmNvbm4tPmxvY2spOwotCXJ3bG9ja19pbml0KCZjb25uLT5jaGFuX2xpc3QubG9jayk7CisJcndsb2NrX2luaXQoJmNvbm4tPmNoYW5fbG9jayk7CisKKwlJTklUX0xJU1RfSEVBRCgmY29ubi0+Y2hhbl9sKTsKIAogCWlmIChoY29uLT50eXBlICE9IExFX0xJTkspCiAJCXNldHVwX3RpbWVyKCZjb25uLT5pbmZvX3RpbWVyLCBsMmNhcF9pbmZvX3RpbWVvdXQsCkBAIC03NjksNiArODUzLDcgQEAKIHN0YXRpYyB2b2lkIGwyY2FwX2Nvbm5fZGVsKHN0cnVjdCBoY2lfY29ubiAqaGNvbiwgaW50IGVycikKIHsKIAlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGhjb24tPmwyY2FwX2RhdGE7CisJc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4sICpsOwogCXN0cnVjdCBzb2NrICpzazsKIAogCWlmICghY29ubikKQEAgLTc3OSw5ICs4NjQsMTAgQEAKIAlrZnJlZV9za2IoY29ubi0+cnhfc2tiKTsKIAogCS8qIEtpbGwgY2hhbm5lbHMgKi8KLQl3aGlsZSAoKHNrID0gY29ubi0+Y2hhbl9saXN0LmhlYWQpKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNoYW4sIGwsICZjb25uLT5jaGFuX2wsIGxpc3QpIHsKKwkJc2sgPSBjaGFuLT5zazsKIAkJYmhfbG9ja19zb2NrKHNrKTsKLQkJbDJjYXBfY2hhbl9kZWwoc2ssIGVycik7CisJCWwyY2FwX2NoYW5fZGVsKGNoYW4sIGVycik7CiAJCWJoX3VubG9ja19zb2NrKHNrKTsKIAkJbDJjYXBfc29ja19raWxsKHNrKTsKIAl9CkBAIC03OTMsMTIgKzg3OSwxMSBAQAogCWtmcmVlKGNvbm4pOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbDJjYXBfY2hhbl9hZGQoc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4sIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnBhcmVudCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBsMmNhcF9jaGFuX2FkZChzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiwgc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4pCiB7Ci0Jc3RydWN0IGwyY2FwX2NoYW5fbGlzdCAqbCA9ICZjb25uLT5jaGFuX2xpc3Q7Ci0Jd3JpdGVfbG9ja19iaCgmbC0+bG9jayk7Ci0JX19sMmNhcF9jaGFuX2FkZChjb25uLCBzaywgcGFyZW50KTsKLQl3cml0ZV91bmxvY2tfYmgoJmwtPmxvY2spOworCXdyaXRlX2xvY2tfYmgoJmNvbm4tPmNoYW5fbG9jayk7CisJX19sMmNhcF9jaGFuX2FkZChjb25uLCBjaGFuKTsKKwl3cml0ZV91bmxvY2tfYmgoJmNvbm4tPmNoYW5fbG9jayk7CiB9CiAKIC8qIC0tLS0gU29ja2V0IGludGVyZmFjZSAtLS0tICovCkBAIC04MDYsMzUgKzg5MSwzOSBAQAogLyogRmluZCBzb2NrZXQgd2l0aCBwc20gYW5kIHNvdXJjZSBiZGFkZHIuCiAgKiBSZXR1cm5zIGNsb3Nlc3QgbWF0Y2guCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc29jayAqbDJjYXBfZ2V0X3NvY2tfYnlfcHNtKGludCBzdGF0ZSwgX19sZTE2IHBzbSwgYmRhZGRyX3QgKnNyYykKK3N0YXRpYyBzdHJ1Y3QgbDJjYXBfY2hhbiAqbDJjYXBfZ2xvYmFsX2NoYW5fYnlfcHNtKGludCBzdGF0ZSwgX19sZTE2IHBzbSwgYmRhZGRyX3QgKnNyYykKIHsKLQlzdHJ1Y3Qgc29jayAqc2sgPSBOVUxMLCAqc2sxID0gTlVMTDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqYywgKmMxID0gTlVMTDsKIAotCXJlYWRfbG9jaygmbDJjYXBfc2tfbGlzdC5sb2NrKTsKKwlyZWFkX2xvY2soJmNoYW5fbGlzdF9sb2NrKTsKIAotCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmbDJjYXBfc2tfbGlzdC5oZWFkKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmY2hhbl9saXN0LCBnbG9iYWxfbCkgeworCQlzdHJ1Y3Qgc29jayAqc2sgPSBjLT5zazsKKwogCQlpZiAoc3RhdGUgJiYgc2stPnNrX3N0YXRlICE9IHN0YXRlKQogCQkJY29udGludWU7CiAKLQkJaWYgKGwyY2FwX3BpKHNrKS0+cHNtID09IHBzbSkgeworCQlpZiAoYy0+cHNtID09IHBzbSkgewogCQkJLyogRXhhY3QgbWF0Y2guICovCi0JCQlpZiAoIWJhY21wKCZidF9zayhzayktPnNyYywgc3JjKSkKLQkJCQlicmVhazsKKwkJCWlmICghYmFjbXAoJmJ0X3NrKHNrKS0+c3JjLCBzcmMpKSB7CisJCQkJcmVhZF91bmxvY2tfYmgoJmNoYW5fbGlzdF9sb2NrKTsKKwkJCQlyZXR1cm4gYzsKKwkJCX0KIAogCQkJLyogQ2xvc2VzdCBtYXRjaCAqLwogCQkJaWYgKCFiYWNtcCgmYnRfc2soc2spLT5zcmMsIEJEQUREUl9BTlkpKQotCQkJCXNrMSA9IHNrOworCQkJCWMxID0gYzsKIAkJfQogCX0KIAotCXJlYWRfdW5sb2NrKCZsMmNhcF9za19saXN0LmxvY2spOworCXJlYWRfdW5sb2NrKCZjaGFuX2xpc3RfbG9jayk7CiAKLQlyZXR1cm4gbm9kZSA/IHNrIDogc2sxOworCXJldHVybiBjMTsKIH0KIAotaW50IGwyY2FwX2RvX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrKQoraW50IGwyY2FwX2NoYW5fY29ubmVjdChzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbikKIHsKKwlzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLT5zazsKIAliZGFkZHJfdCAqc3JjID0gJmJ0X3NrKHNrKS0+c3JjOwogCWJkYWRkcl90ICpkc3QgPSAmYnRfc2soc2spLT5kc3Q7CiAJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm47CkBAIC04NDQsNyArOTMzLDcgQEAKIAlpbnQgZXJyOwogCiAJQlRfREJHKCIlcyAtPiAlcyBwc20gMHglMi4yeCIsIGJhdG9zdHIoc3JjKSwgYmF0b3N0cihkc3QpLAotCQkJCQkJCWwyY2FwX3BpKHNrKS0+cHNtKTsKKwkJCQkJCQljaGFuLT5wc20pOwogCiAJaGRldiA9IGhjaV9nZXRfcm91dGUoZHN0LCBzcmMpOwogCWlmICghaGRldikKQEAgLTg1MiwxNCArOTQxLDE0IEBACiAKIAloY2lfZGV2X2xvY2tfYmgoaGRldik7CiAKLQlhdXRoX3R5cGUgPSBsMmNhcF9nZXRfYXV0aF90eXBlKHNrKTsKKwlhdXRoX3R5cGUgPSBsMmNhcF9nZXRfYXV0aF90eXBlKGNoYW4pOwogCi0JaWYgKGwyY2FwX3BpKHNrKS0+ZGNpZCA9PSBMMkNBUF9DSURfTEVfREFUQSkKKwlpZiAoY2hhbi0+ZGNpZCA9PSBMMkNBUF9DSURfTEVfREFUQSkKIAkJaGNvbiA9IGhjaV9jb25uZWN0KGhkZXYsIExFX0xJTkssIGRzdCwKLQkJCQkJbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwsIGF1dGhfdHlwZSk7CisJCQkJCWNoYW4tPnNlY19sZXZlbCwgYXV0aF90eXBlKTsKIAllbHNlCiAJCWhjb24gPSBoY2lfY29ubmVjdChoZGV2LCBBQ0xfTElOSywgZHN0LAotCQkJCQlsMmNhcF9waShzayktPnNlY19sZXZlbCwgYXV0aF90eXBlKTsKKwkJCQkJY2hhbi0+c2VjX2xldmVsLCBhdXRoX3R5cGUpOwogCiAJaWYgKElTX0VSUihoY29uKSkgewogCQllcnIgPSBQVFJfRVJSKGhjb24pOwpAQCAtODc2LDcgKzk2NSw3IEBACiAJLyogVXBkYXRlIHNvdXJjZSBhZGRyIG9mIHRoZSBzb2NrZXQgKi8KIAliYWNweShzcmMsIGNvbm4tPnNyYyk7CiAKLQlsMmNhcF9jaGFuX2FkZChjb25uLCBzaywgTlVMTCk7CisJbDJjYXBfY2hhbl9hZGQoY29ubiwgY2hhbik7CiAKIAlzay0+c2tfc3RhdGUgPSBCVF9DT05ORUNUOwogCWwyY2FwX3NvY2tfc2V0X3RpbWVyKHNrLCBzay0+c2tfc25kdGltZW8pOwpAQCAtODg1LDEwICs5NzQsMTAgQEAKIAkJaWYgKHNrLT5za190eXBlICE9IFNPQ0tfU0VRUEFDS0VUICYmCiAJCQkJc2stPnNrX3R5cGUgIT0gU09DS19TVFJFQU0pIHsKIAkJCWwyY2FwX3NvY2tfY2xlYXJfdGltZXIoc2spOwotCQkJaWYgKGwyY2FwX2NoZWNrX3NlY3VyaXR5KHNrKSkKKwkJCWlmIChsMmNhcF9jaGVja19zZWN1cml0eShjaGFuKSkKIAkJCQlzay0+c2tfc3RhdGUgPSBCVF9DT05ORUNURUQ7CiAJCX0gZWxzZQotCQkJbDJjYXBfZG9fc3RhcnQoc2spOworCQkJbDJjYXBfZG9fc3RhcnQoY2hhbik7CiAJfQogCiAJZXJyID0gMDsKQEAgLTkwMSwxMiArOTkwLDEzIEBACiAKIGludCBfX2wyY2FwX3dhaXRfYWNrKHN0cnVjdCBzb2NrICpzaykKIHsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiA9IGwyY2FwX3BpKHNrKS0+Y2hhbjsKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAlpbnQgZXJyID0gMDsKIAlpbnQgdGltZW8gPSBIWi81OwogCiAJYWRkX3dhaXRfcXVldWUoc2tfc2xlZXAoc2spLCAmd2FpdCk7Ci0Jd2hpbGUgKChsMmNhcF9waShzayktPnVuYWNrZWRfZnJhbWVzID4gMCAmJiBsMmNhcF9waShzayktPmNvbm4pKSB7CisJd2hpbGUgKChjaGFuLT51bmFja2VkX2ZyYW1lcyA+IDAgJiYgY2hhbi0+Y29ubikpIHsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAogCQlpZiAoIXRpbWVvKQpAQCAtOTMyLDY4ICsxMDIyLDY5IEBACiAKIHN0YXRpYyB2b2lkIGwyY2FwX21vbml0b3JfdGltZW91dCh1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3Qgc29jayAqc2sgPSAodm9pZCAqKSBhcmc7CisJc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4gPSAodm9pZCAqKSBhcmc7CisJc3RydWN0IHNvY2sgKnNrID0gY2hhbi0+c2s7CiAKLQlCVF9EQkcoInNrICVwIiwgc2spOworCUJUX0RCRygiY2hhbiAlcCIsIGNoYW4pOwogCiAJYmhfbG9ja19zb2NrKHNrKTsKLQlpZiAobDJjYXBfcGkoc2spLT5yZXRyeV9jb3VudCA+PSBsMmNhcF9waShzayktPnJlbW90ZV9tYXhfdHgpIHsKLQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShsMmNhcF9waShzayktPmNvbm4sIHNrLCBFQ09OTkFCT1JURUQpOworCWlmIChjaGFuLT5yZXRyeV9jb3VudCA+PSBjaGFuLT5yZW1vdGVfbWF4X3R4KSB7CisJCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEoY2hhbi0+Y29ubiwgY2hhbiwgRUNPTk5BQk9SVEVEKTsKIAkJYmhfdW5sb2NrX3NvY2soc2spOwogCQlyZXR1cm47CiAJfQogCi0JbDJjYXBfcGkoc2spLT5yZXRyeV9jb3VudCsrOworCWNoYW4tPnJldHJ5X2NvdW50Kys7CiAJX19tb2RfbW9uaXRvcl90aW1lcigpOwogCi0JbDJjYXBfc2VuZF9ycl9vcl9ybnIobDJjYXBfcGkoc2spLCBMMkNBUF9DVFJMX1BPTEwpOworCWwyY2FwX3NlbmRfcnJfb3Jfcm5yKGNoYW4sIEwyQ0FQX0NUUkxfUE9MTCk7CiAJYmhfdW5sb2NrX3NvY2soc2spOwogfQogCiBzdGF0aWMgdm9pZCBsMmNhcF9yZXRyYW5zX3RpbWVvdXQodW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IHNvY2sgKnNrID0gKHZvaWQgKikgYXJnOworCXN0cnVjdCBsMmNhcF9jaGFuICpjaGFuID0gKHZvaWQgKikgYXJnOworCXN0cnVjdCBzb2NrICpzayA9IGNoYW4tPnNrOwogCi0JQlRfREJHKCJzayAlcCIsIHNrKTsKKwlCVF9EQkcoImNoYW4gJXAiLCBjaGFuKTsKIAogCWJoX2xvY2tfc29jayhzayk7Ci0JbDJjYXBfcGkoc2spLT5yZXRyeV9jb3VudCA9IDE7CisJY2hhbi0+cmV0cnlfY291bnQgPSAxOwogCV9fbW9kX21vbml0b3JfdGltZXIoKTsKIAotCWwyY2FwX3BpKHNrKS0+Y29ubl9zdGF0ZSB8PSBMMkNBUF9DT05OX1dBSVRfRjsKKwljaGFuLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fV0FJVF9GOwogCi0JbDJjYXBfc2VuZF9ycl9vcl9ybnIobDJjYXBfcGkoc2spLCBMMkNBUF9DVFJMX1BPTEwpOworCWwyY2FwX3NlbmRfcnJfb3Jfcm5yKGNoYW4sIEwyQ0FQX0NUUkxfUE9MTCk7CiAJYmhfdW5sb2NrX3NvY2soc2spOwogfQogCi1zdGF0aWMgdm9pZCBsMmNhcF9kcm9wX2Fja2VkX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2spCitzdGF0aWMgdm9pZCBsMmNhcF9kcm9wX2Fja2VkX2ZyYW1lcyhzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0Jd2hpbGUgKChza2IgPSBza2JfcGVlayhUWF9RVUVVRShzaykpKSAmJgotCQkJbDJjYXBfcGkoc2spLT51bmFja2VkX2ZyYW1lcykgewotCQlpZiAoYnRfY2Ioc2tiKS0+dHhfc2VxID09IGwyY2FwX3BpKHNrKS0+ZXhwZWN0ZWRfYWNrX3NlcSkKKwl3aGlsZSAoKHNrYiA9IHNrYl9wZWVrKCZjaGFuLT50eF9xKSkgJiYKKwkJCWNoYW4tPnVuYWNrZWRfZnJhbWVzKSB7CisJCWlmIChidF9jYihza2IpLT50eF9zZXEgPT0gY2hhbi0+ZXhwZWN0ZWRfYWNrX3NlcSkKIAkJCWJyZWFrOwogCi0JCXNrYiA9IHNrYl9kZXF1ZXVlKFRYX1FVRVVFKHNrKSk7CisJCXNrYiA9IHNrYl9kZXF1ZXVlKCZjaGFuLT50eF9xKTsKIAkJa2ZyZWVfc2tiKHNrYik7CiAKLQkJbDJjYXBfcGkoc2spLT51bmFja2VkX2ZyYW1lcy0tOworCQljaGFuLT51bmFja2VkX2ZyYW1lcy0tOwogCX0KIAotCWlmICghbDJjYXBfcGkoc2spLT51bmFja2VkX2ZyYW1lcykKLQkJZGVsX3RpbWVyKCZsMmNhcF9waShzayktPnJldHJhbnNfdGltZXIpOworCWlmICghY2hhbi0+dW5hY2tlZF9mcmFtZXMpCisJCWRlbF90aW1lcigmY2hhbi0+cmV0cmFuc190aW1lcik7CiB9CiAKLXZvaWQgbDJjYXBfZG9fc2VuZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCit2b2lkIGwyY2FwX2RvX3NlbmQoc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9IGwyY2FwX3BpKHNrKTsKLQlzdHJ1Y3QgaGNpX2Nvbm4gKmhjb24gPSBwaS0+Y29ubi0+aGNvbjsKKwlzdHJ1Y3QgaGNpX2Nvbm4gKmhjb24gPSBjaGFuLT5jb25uLT5oY29uOwogCXUxNiBmbGFnczsKIAotCUJUX0RCRygic2sgJXAsIHNrYiAlcCBsZW4gJWQiLCBzaywgc2tiLCBza2ItPmxlbik7CisJQlRfREJHKCJjaGFuICVwLCBza2IgJXAgbGVuICVkIiwgY2hhbiwgc2tiLCBza2ItPmxlbik7CiAKLQlpZiAoIXBpLT5mbHVzaGFibGUgJiYgbG1wX25vX2ZsdXNoX2NhcGFibGUoaGNvbi0+aGRldikpCisJaWYgKCFjaGFuLT5mbHVzaGFibGUgJiYgbG1wX25vX2ZsdXNoX2NhcGFibGUoaGNvbi0+aGRldikpCiAJCWZsYWdzID0gQUNMX1NUQVJUX05PX0ZMVVNIOwogCWVsc2UKIAkJZmxhZ3MgPSBBQ0xfU1RBUlQ7CkBAIC0xMDAxLDM1ICsxMDkyLDMzIEBACiAJaGNpX3NlbmRfYWNsKGhjb24sIHNrYiwgZmxhZ3MpOwogfQogCi12b2lkIGwyY2FwX3N0cmVhbWluZ19zZW5kKHN0cnVjdCBzb2NrICpzaykKK3ZvaWQgbDJjYXBfc3RyZWFtaW5nX3NlbmQoc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4pCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOwogCXUxNiBjb250cm9sLCBmY3M7CiAKLQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFRYX1FVRVVFKHNrKSkpKSB7CisJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmY2hhbi0+dHhfcSkpKSB7CiAJCWNvbnRyb2wgPSBnZXRfdW5hbGlnbmVkX2xlMTYoc2tiLT5kYXRhICsgTDJDQVBfSERSX1NJWkUpOwotCQljb250cm9sIHw9IHBpLT5uZXh0X3R4X3NlcSA8PCBMMkNBUF9DVFJMX1RYU0VRX1NISUZUOworCQljb250cm9sIHw9IGNoYW4tPm5leHRfdHhfc2VxIDw8IEwyQ0FQX0NUUkxfVFhTRVFfU0hJRlQ7CiAJCXB1dF91bmFsaWduZWRfbGUxNihjb250cm9sLCBza2ItPmRhdGEgKyBMMkNBUF9IRFJfU0laRSk7CiAKLQkJaWYgKHBpLT5mY3MgPT0gTDJDQVBfRkNTX0NSQzE2KSB7CisJCWlmIChjaGFuLT5mY3MgPT0gTDJDQVBfRkNTX0NSQzE2KSB7CiAJCQlmY3MgPSBjcmMxNigwLCAodTggKilza2ItPmRhdGEsIHNrYi0+bGVuIC0gMik7CiAJCQlwdXRfdW5hbGlnbmVkX2xlMTYoZmNzLCBza2ItPmRhdGEgKyBza2ItPmxlbiAtIDIpOwogCQl9CiAKLQkJbDJjYXBfZG9fc2VuZChzaywgc2tiKTsKKwkJbDJjYXBfZG9fc2VuZChjaGFuLCBza2IpOwogCi0JCXBpLT5uZXh0X3R4X3NlcSA9IChwaS0+bmV4dF90eF9zZXEgKyAxKSAlIDY0OworCQljaGFuLT5uZXh0X3R4X3NlcSA9IChjaGFuLT5uZXh0X3R4X3NlcSArIDEpICUgNjQ7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBsMmNhcF9yZXRyYW5zbWl0X29uZV9mcmFtZShzdHJ1Y3Qgc29jayAqc2ssIHU4IHR4X3NlcSkKK3N0YXRpYyB2b2lkIGwyY2FwX3JldHJhbnNtaXRfb25lX2ZyYW1lKHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCB1OCB0eF9zZXEpCiB7Ci0Jc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9IGwyY2FwX3BpKHNrKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdHhfc2tiOwogCXUxNiBjb250cm9sLCBmY3M7CiAKLQlza2IgPSBza2JfcGVlayhUWF9RVUVVRShzaykpOworCXNrYiA9IHNrYl9wZWVrKCZjaGFuLT50eF9xKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuOwogCkBAIC0xMDM3LDE0ICsxMTI2LDE0IEBACiAJCWlmIChidF9jYihza2IpLT50eF9zZXEgPT0gdHhfc2VxKQogCQkJYnJlYWs7CiAKLQkJaWYgKHNrYl9xdWV1ZV9pc19sYXN0KFRYX1FVRVVFKHNrKSwgc2tiKSkKKwkJaWYgKHNrYl9xdWV1ZV9pc19sYXN0KCZjaGFuLT50eF9xLCBza2IpKQogCQkJcmV0dXJuOwogCi0JfSB3aGlsZSAoKHNrYiA9IHNrYl9xdWV1ZV9uZXh0KFRYX1FVRVVFKHNrKSwgc2tiKSkpOworCX0gd2hpbGUgKChza2IgPSBza2JfcXVldWVfbmV4dCgmY2hhbi0+dHhfcSwgc2tiKSkpOwogCi0JaWYgKHBpLT5yZW1vdGVfbWF4X3R4ICYmCi0JCQlidF9jYihza2IpLT5yZXRyaWVzID09IHBpLT5yZW1vdGVfbWF4X3R4KSB7Ci0JCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEocGktPmNvbm4sIHNrLCBFQ09OTkFCT1JURUQpOworCWlmIChjaGFuLT5yZW1vdGVfbWF4X3R4ICYmCisJCQlidF9jYihza2IpLT5yZXRyaWVzID09IGNoYW4tPnJlbW90ZV9tYXhfdHgpIHsKKwkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShjaGFuLT5jb25uLCBjaGFuLCBFQ09OTkFCT1JURUQpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMDUzLDM5ICsxMTQyLDM5IEBACiAJY29udHJvbCA9IGdldF91bmFsaWduZWRfbGUxNih0eF9za2ItPmRhdGEgKyBMMkNBUF9IRFJfU0laRSk7CiAJY29udHJvbCAmPSBMMkNBUF9DVFJMX1NBUjsKIAotCWlmIChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fU0VORF9GQklUKSB7CisJaWYgKGNoYW4tPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NFTkRfRkJJVCkgewogCQljb250cm9sIHw9IEwyQ0FQX0NUUkxfRklOQUw7Ci0JCXBpLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1NFTkRfRkJJVDsKKwkJY2hhbi0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9TRU5EX0ZCSVQ7CiAJfQogCi0JY29udHJvbCB8PSAocGktPmJ1ZmZlcl9zZXEgPDwgTDJDQVBfQ1RSTF9SRVFTRVFfU0hJRlQpCisJY29udHJvbCB8PSAoY2hhbi0+YnVmZmVyX3NlcSA8PCBMMkNBUF9DVFJMX1JFUVNFUV9TSElGVCkKIAkJCXwgKHR4X3NlcSA8PCBMMkNBUF9DVFJMX1RYU0VRX1NISUZUKTsKIAogCXB1dF91bmFsaWduZWRfbGUxNihjb250cm9sLCB0eF9za2ItPmRhdGEgKyBMMkNBUF9IRFJfU0laRSk7CiAKLQlpZiAocGktPmZjcyA9PSBMMkNBUF9GQ1NfQ1JDMTYpIHsKKwlpZiAoY2hhbi0+ZmNzID09IEwyQ0FQX0ZDU19DUkMxNikgewogCQlmY3MgPSBjcmMxNigwLCAodTggKil0eF9za2ItPmRhdGEsIHR4X3NrYi0+bGVuIC0gMik7CiAJCXB1dF91bmFsaWduZWRfbGUxNihmY3MsIHR4X3NrYi0+ZGF0YSArIHR4X3NrYi0+bGVuIC0gMik7CiAJfQogCi0JbDJjYXBfZG9fc2VuZChzaywgdHhfc2tiKTsKKwlsMmNhcF9kb19zZW5kKGNoYW4sIHR4X3NrYik7CiB9CiAKLWludCBsMmNhcF9lcnRtX3NlbmQoc3RydWN0IHNvY2sgKnNrKQoraW50IGwyY2FwX2VydG1fc2VuZChzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdHhfc2tiOwotCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CisJc3RydWN0IHNvY2sgKnNrID0gY2hhbi0+c2s7CiAJdTE2IGNvbnRyb2wsIGZjczsKIAlpbnQgbnNlbnQgPSAwOwogCiAJaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9DT05ORUNURUQpCiAJCXJldHVybiAtRU5PVENPTk47CiAKLQl3aGlsZSAoKHNrYiA9IHNrLT5za19zZW5kX2hlYWQpICYmICghbDJjYXBfdHhfd2luZG93X2Z1bGwoc2spKSkgeworCXdoaWxlICgoc2tiID0gY2hhbi0+dHhfc2VuZF9oZWFkKSAmJiAoIWwyY2FwX3R4X3dpbmRvd19mdWxsKGNoYW4pKSkgewogCi0JCWlmIChwaS0+cmVtb3RlX21heF90eCAmJgotCQkJCWJ0X2NiKHNrYiktPnJldHJpZXMgPT0gcGktPnJlbW90ZV9tYXhfdHgpIHsKLQkJCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEocGktPmNvbm4sIHNrLCBFQ09OTkFCT1JURUQpOworCQlpZiAoY2hhbi0+cmVtb3RlX21heF90eCAmJgorCQkJCWJ0X2NiKHNrYiktPnJldHJpZXMgPT0gY2hhbi0+cmVtb3RlX21heF90eCkgeworCQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShjaGFuLT5jb25uLCBjaGFuLCBFQ09OTkFCT1JURUQpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTA5NiwzNiArMTE4NSwzNiBAQAogCQljb250cm9sID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHR4X3NrYi0+ZGF0YSArIEwyQ0FQX0hEUl9TSVpFKTsKIAkJY29udHJvbCAmPSBMMkNBUF9DVFJMX1NBUjsKIAotCQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NFTkRfRkJJVCkgeworCQlpZiAoY2hhbi0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fU0VORF9GQklUKSB7CiAJCQljb250cm9sIHw9IEwyQ0FQX0NUUkxfRklOQUw7Ci0JCQlwaS0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9TRU5EX0ZCSVQ7CisJCQljaGFuLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1NFTkRfRkJJVDsKIAkJfQotCQljb250cm9sIHw9IChwaS0+YnVmZmVyX3NlcSA8PCBMMkNBUF9DVFJMX1JFUVNFUV9TSElGVCkKLQkJCQl8IChwaS0+bmV4dF90eF9zZXEgPDwgTDJDQVBfQ1RSTF9UWFNFUV9TSElGVCk7CisJCWNvbnRyb2wgfD0gKGNoYW4tPmJ1ZmZlcl9zZXEgPDwgTDJDQVBfQ1RSTF9SRVFTRVFfU0hJRlQpCisJCQkJfCAoY2hhbi0+bmV4dF90eF9zZXEgPDwgTDJDQVBfQ1RSTF9UWFNFUV9TSElGVCk7CiAJCXB1dF91bmFsaWduZWRfbGUxNihjb250cm9sLCB0eF9za2ItPmRhdGEgKyBMMkNBUF9IRFJfU0laRSk7CiAKIAotCQlpZiAocGktPmZjcyA9PSBMMkNBUF9GQ1NfQ1JDMTYpIHsKKwkJaWYgKGNoYW4tPmZjcyA9PSBMMkNBUF9GQ1NfQ1JDMTYpIHsKIAkJCWZjcyA9IGNyYzE2KDAsICh1OCAqKXNrYi0+ZGF0YSwgdHhfc2tiLT5sZW4gLSAyKTsKIAkJCXB1dF91bmFsaWduZWRfbGUxNihmY3MsIHNrYi0+ZGF0YSArIHR4X3NrYi0+bGVuIC0gMik7CiAJCX0KIAotCQlsMmNhcF9kb19zZW5kKHNrLCB0eF9za2IpOworCQlsMmNhcF9kb19zZW5kKGNoYW4sIHR4X3NrYik7CiAKIAkJX19tb2RfcmV0cmFuc190aW1lcigpOwogCi0JCWJ0X2NiKHNrYiktPnR4X3NlcSA9IHBpLT5uZXh0X3R4X3NlcTsKLQkJcGktPm5leHRfdHhfc2VxID0gKHBpLT5uZXh0X3R4X3NlcSArIDEpICUgNjQ7CisJCWJ0X2NiKHNrYiktPnR4X3NlcSA9IGNoYW4tPm5leHRfdHhfc2VxOworCQljaGFuLT5uZXh0X3R4X3NlcSA9IChjaGFuLT5uZXh0X3R4X3NlcSArIDEpICUgNjQ7CiAKIAkJaWYgKGJ0X2NiKHNrYiktPnJldHJpZXMgPT0gMSkKLQkJCXBpLT51bmFja2VkX2ZyYW1lcysrOworCQkJY2hhbi0+dW5hY2tlZF9mcmFtZXMrKzsKIAotCQlwaS0+ZnJhbWVzX3NlbnQrKzsKKwkJY2hhbi0+ZnJhbWVzX3NlbnQrKzsKIAotCQlpZiAoc2tiX3F1ZXVlX2lzX2xhc3QoVFhfUVVFVUUoc2spLCBza2IpKQotCQkJc2stPnNrX3NlbmRfaGVhZCA9IE5VTEw7CisJCWlmIChza2JfcXVldWVfaXNfbGFzdCgmY2hhbi0+dHhfcSwgc2tiKSkKKwkJCWNoYW4tPnR4X3NlbmRfaGVhZCA9IE5VTEw7CiAJCWVsc2UKLQkJCXNrLT5za19zZW5kX2hlYWQgPSBza2JfcXVldWVfbmV4dChUWF9RVUVVRShzayksIHNrYik7CisJCQljaGFuLT50eF9zZW5kX2hlYWQgPSBza2JfcXVldWVfbmV4dCgmY2hhbi0+dHhfcSwgc2tiKTsKIAogCQluc2VudCsrOwogCX0KQEAgLTExMzMsNDEgKzEyMjIsMzkgQEAKIAlyZXR1cm4gbnNlbnQ7CiB9CiAKLXN0YXRpYyBpbnQgbDJjYXBfcmV0cmFuc21pdF9mcmFtZXMoc3RydWN0IHNvY2sgKnNrKQorc3RhdGljIGludCBsMmNhcF9yZXRyYW5zbWl0X2ZyYW1lcyhzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbikKIHsKLQlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOwogCWludCByZXQ7CiAKLQlpZiAoIXNrYl9xdWV1ZV9lbXB0eShUWF9RVUVVRShzaykpKQotCQlzay0+c2tfc2VuZF9oZWFkID0gVFhfUVVFVUUoc2spLT5uZXh0OworCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZjaGFuLT50eF9xKSkKKwkJY2hhbi0+dHhfc2VuZF9oZWFkID0gY2hhbi0+dHhfcS5uZXh0OwogCi0JcGktPm5leHRfdHhfc2VxID0gcGktPmV4cGVjdGVkX2Fja19zZXE7Ci0JcmV0ID0gbDJjYXBfZXJ0bV9zZW5kKHNrKTsKKwljaGFuLT5uZXh0X3R4X3NlcSA9IGNoYW4tPmV4cGVjdGVkX2Fja19zZXE7CisJcmV0ID0gbDJjYXBfZXJ0bV9zZW5kKGNoYW4pOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGwyY2FwX3NlbmRfYWNrKHN0cnVjdCBsMmNhcF9waW5mbyAqcGkpCitzdGF0aWMgdm9pZCBsMmNhcF9zZW5kX2FjayhzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbikKIHsKLQlzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKilwaTsKIAl1MTYgY29udHJvbCA9IDA7CiAKLQljb250cm9sIHw9IHBpLT5idWZmZXJfc2VxIDw8IEwyQ0FQX0NUUkxfUkVRU0VRX1NISUZUOworCWNvbnRyb2wgfD0gY2hhbi0+YnVmZmVyX3NlcSA8PCBMMkNBUF9DVFJMX1JFUVNFUV9TSElGVDsKIAotCWlmIChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fTE9DQUxfQlVTWSkgeworCWlmIChjaGFuLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9MT0NBTF9CVVNZKSB7CiAJCWNvbnRyb2wgfD0gTDJDQVBfU1VQRVJfUkNWX05PVF9SRUFEWTsKLQkJcGktPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9STlJfU0VOVDsKLQkJbDJjYXBfc2VuZF9zZnJhbWUocGksIGNvbnRyb2wpOworCQljaGFuLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fUk5SX1NFTlQ7CisJCWwyY2FwX3NlbmRfc2ZyYW1lKGNoYW4sIGNvbnRyb2wpOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKGwyY2FwX2VydG1fc2VuZChzaykgPiAwKQorCWlmIChsMmNhcF9lcnRtX3NlbmQoY2hhbikgPiAwKQogCQlyZXR1cm47CiAKIAljb250cm9sIHw9IEwyQ0FQX1NVUEVSX1JDVl9SRUFEWTsKLQlsMmNhcF9zZW5kX3NmcmFtZShwaSwgY29udHJvbCk7CisJbDJjYXBfc2VuZF9zZnJhbWUoY2hhbiwgY29udHJvbCk7CiB9CiAKLXN0YXRpYyB2b2lkIGwyY2FwX3NlbmRfc3JlanRhaWwoc3RydWN0IHNvY2sgKnNrKQorc3RhdGljIHZvaWQgbDJjYXBfc2VuZF9zcmVqdGFpbChzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbikKIHsKIAlzdHJ1Y3Qgc3Jlal9saXN0ICp0YWlsOwogCXUxNiBjb250cm9sOwpAQCAtMTE3NSwxNSArMTI2MiwxNSBAQAogCWNvbnRyb2wgPSBMMkNBUF9TVVBFUl9TRUxFQ1RfUkVKRUNUOwogCWNvbnRyb2wgfD0gTDJDQVBfQ1RSTF9GSU5BTDsKIAotCXRhaWwgPSBsaXN0X2VudHJ5KFNSRUpfTElTVChzayktPnByZXYsIHN0cnVjdCBzcmVqX2xpc3QsIGxpc3QpOworCXRhaWwgPSBsaXN0X2VudHJ5KCgmY2hhbi0+c3Jlal9sKS0+cHJldiwgc3RydWN0IHNyZWpfbGlzdCwgbGlzdCk7CiAJY29udHJvbCB8PSB0YWlsLT50eF9zZXEgPDwgTDJDQVBfQ1RSTF9SRVFTRVFfU0hJRlQ7CiAKLQlsMmNhcF9zZW5kX3NmcmFtZShsMmNhcF9waShzayksIGNvbnRyb2wpOworCWwyY2FwX3NlbmRfc2ZyYW1lKGNoYW4sIGNvbnRyb2wpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBsMmNhcF9za2J1ZmZfZnJvbWlvdmVjKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLCBpbnQgY291bnQsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNvbm47CisJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNoYW4tPmNvbm47CiAJc3RydWN0IHNrX2J1ZmYgKipmcmFnOwogCWludCBlcnIsIHNlbnQgPSAwOwogCkBAIC0xMjEzLDkgKzEzMDAsMTAgQEAKIAlyZXR1cm4gc2VudDsKIH0KIAotc3RydWN0IHNrX2J1ZmYgKmwyY2FwX2NyZWF0ZV9jb25ubGVzc19wZHUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCitzdHJ1Y3Qgc2tfYnVmZiAqbDJjYXBfY3JlYXRlX2Nvbm5sZXNzX3BkdShzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKQogewotCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gbDJjYXBfcGkoc2spLT5jb25uOworCXN0cnVjdCBzb2NrICpzayA9IGNoYW4tPnNrOworCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gY2hhbi0+Y29ubjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBlcnIsIGNvdW50LCBobGVuID0gTDJDQVBfSERSX1NJWkUgKyAyOwogCXN0cnVjdCBsMmNhcF9oZHIgKmxoOwpAQCAtMTIzMCw5ICsxMzE4LDkgQEAKIAogCS8qIENyZWF0ZSBMMkNBUCBoZWFkZXIgKi8KIAlsaCA9IChzdHJ1Y3QgbDJjYXBfaGRyICopIHNrYl9wdXQoc2tiLCBMMkNBUF9IRFJfU0laRSk7Ci0JbGgtPmNpZCA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+ZGNpZCk7CisJbGgtPmNpZCA9IGNwdV90b19sZTE2KGNoYW4tPmRjaWQpOwogCWxoLT5sZW4gPSBjcHVfdG9fbGUxNihsZW4gKyAoaGxlbiAtIEwyQ0FQX0hEUl9TSVpFKSk7Ci0JcHV0X3VuYWxpZ25lZF9sZTE2KGwyY2FwX3BpKHNrKS0+cHNtLCBza2JfcHV0KHNrYiwgMikpOworCXB1dF91bmFsaWduZWRfbGUxNihjaGFuLT5wc20sIHNrYl9wdXQoc2tiLCAyKSk7CiAKIAllcnIgPSBsMmNhcF9za2J1ZmZfZnJvbWlvdmVjKHNrLCBtc2csIGxlbiwgY291bnQsIHNrYik7CiAJaWYgKHVubGlrZWx5KGVyciA8IDApKSB7CkBAIC0xMjQyLDkgKzEzMzAsMTAgQEAKIAlyZXR1cm4gc2tiOwogfQogCi1zdHJ1Y3Qgc2tfYnVmZiAqbDJjYXBfY3JlYXRlX2Jhc2ljX3BkdShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbikKK3N0cnVjdCBza19idWZmICpsMmNhcF9jcmVhdGVfYmFzaWNfcGR1KHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCiB7Ci0Jc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNvbm47CisJc3RydWN0IHNvY2sgKnNrID0gY2hhbi0+c2s7CisJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBjaGFuLT5jb25uOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IGVyciwgY291bnQsIGhsZW4gPSBMMkNBUF9IRFJfU0laRTsKIAlzdHJ1Y3QgbDJjYXBfaGRyICpsaDsKQEAgLTEyNTksNyArMTM0OCw3IEBACiAKIAkvKiBDcmVhdGUgTDJDQVAgaGVhZGVyICovCiAJbGggPSAoc3RydWN0IGwyY2FwX2hkciAqKSBza2JfcHV0KHNrYiwgTDJDQVBfSERSX1NJWkUpOwotCWxoLT5jaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPmRjaWQpOworCWxoLT5jaWQgPSBjcHVfdG9fbGUxNihjaGFuLT5kY2lkKTsKIAlsaC0+bGVuID0gY3B1X3RvX2xlMTYobGVuICsgKGhsZW4gLSBMMkNBUF9IRFJfU0laRSkpOwogCiAJZXJyID0gbDJjYXBfc2tidWZmX2Zyb21pb3ZlYyhzaywgbXNnLCBsZW4sIGNvdW50LCBza2IpOwpAQCAtMTI3MCw5ICsxMzU5LDEwIEBACiAJcmV0dXJuIHNrYjsKIH0KIAotc3RydWN0IHNrX2J1ZmYgKmwyY2FwX2NyZWF0ZV9pZnJhbWVfcGR1KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCB1MTYgY29udHJvbCwgdTE2IHNkdWxlbikKK3N0cnVjdCBza19idWZmICpsMmNhcF9jcmVhdGVfaWZyYW1lX3BkdShzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCB1MTYgY29udHJvbCwgdTE2IHNkdWxlbikKIHsKLQlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y29ubjsKKwlzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLT5zazsKKwlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGNoYW4tPmNvbm47CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgZXJyLCBjb3VudCwgaGxlbiA9IEwyQ0FQX0hEUl9TSVpFICsgMjsKIAlzdHJ1Y3QgbDJjYXBfaGRyICpsaDsKQEAgLTEyODUsNyArMTM3NSw3IEBACiAJaWYgKHNkdWxlbikKIAkJaGxlbiArPSAyOwogCi0JaWYgKGwyY2FwX3BpKHNrKS0+ZmNzID09IEwyQ0FQX0ZDU19DUkMxNikKKwlpZiAoY2hhbi0+ZmNzID09IEwyQ0FQX0ZDU19DUkMxNikKIAkJaGxlbiArPSAyOwogCiAJY291bnQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIChjb25uLT5tdHUgLSBobGVuKSwgbGVuKTsKQEAgLTEyOTYsNyArMTM4Niw3IEBACiAKIAkvKiBDcmVhdGUgTDJDQVAgaGVhZGVyICovCiAJbGggPSAoc3RydWN0IGwyY2FwX2hkciAqKSBza2JfcHV0KHNrYiwgTDJDQVBfSERSX1NJWkUpOwotCWxoLT5jaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPmRjaWQpOworCWxoLT5jaWQgPSBjcHVfdG9fbGUxNihjaGFuLT5kY2lkKTsKIAlsaC0+bGVuID0gY3B1X3RvX2xlMTYobGVuICsgKGhsZW4gLSBMMkNBUF9IRFJfU0laRSkpOwogCXB1dF91bmFsaWduZWRfbGUxNihjb250cm9sLCBza2JfcHV0KHNrYiwgMikpOwogCWlmIChzZHVsZW4pCkBAIC0xMzA4LDE2ICsxMzk4LDE1IEBACiAJCXJldHVybiBFUlJfUFRSKGVycik7CiAJfQogCi0JaWYgKGwyY2FwX3BpKHNrKS0+ZmNzID09IEwyQ0FQX0ZDU19DUkMxNikKKwlpZiAoY2hhbi0+ZmNzID09IEwyQ0FQX0ZDU19DUkMxNikKIAkJcHV0X3VuYWxpZ25lZF9sZTE2KDAsIHNrYl9wdXQoc2tiLCAyKSk7CiAKIAlidF9jYihza2IpLT5yZXRyaWVzID0gMDsKIAlyZXR1cm4gc2tiOwogfQogCi1pbnQgbDJjYXBfc2FyX3NlZ21lbnRfc2R1KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKQoraW50IGwyY2FwX3Nhcl9zZWdtZW50X3NkdShzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKQogewotCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNhcl9xdWV1ZTsKIAl1MTYgY29udHJvbDsKQEAgLTEzMjUsMjYgKzE0MTQsMjYgQEAKIAogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnNhcl9xdWV1ZSk7CiAJY29udHJvbCA9IEwyQ0FQX1NEVV9TVEFSVDsKLQlza2IgPSBsMmNhcF9jcmVhdGVfaWZyYW1lX3BkdShzaywgbXNnLCBwaS0+cmVtb3RlX21wcywgY29udHJvbCwgbGVuKTsKKwlza2IgPSBsMmNhcF9jcmVhdGVfaWZyYW1lX3BkdShjaGFuLCBtc2csIGNoYW4tPnJlbW90ZV9tcHMsIGNvbnRyb2wsIGxlbik7CiAJaWYgKElTX0VSUihza2IpKQogCQlyZXR1cm4gUFRSX0VSUihza2IpOwogCiAJX19za2JfcXVldWVfdGFpbCgmc2FyX3F1ZXVlLCBza2IpOwotCWxlbiAtPSBwaS0+cmVtb3RlX21wczsKLQlzaXplICs9IHBpLT5yZW1vdGVfbXBzOworCWxlbiAtPSBjaGFuLT5yZW1vdGVfbXBzOworCXNpemUgKz0gY2hhbi0+cmVtb3RlX21wczsKIAogCXdoaWxlIChsZW4gPiAwKSB7CiAJCXNpemVfdCBidWZsZW47CiAKLQkJaWYgKGxlbiA+IHBpLT5yZW1vdGVfbXBzKSB7CisJCWlmIChsZW4gPiBjaGFuLT5yZW1vdGVfbXBzKSB7CiAJCQljb250cm9sID0gTDJDQVBfU0RVX0NPTlRJTlVFOwotCQkJYnVmbGVuID0gcGktPnJlbW90ZV9tcHM7CisJCQlidWZsZW4gPSBjaGFuLT5yZW1vdGVfbXBzOwogCQl9IGVsc2UgewogCQkJY29udHJvbCA9IEwyQ0FQX1NEVV9FTkQ7CiAJCQlidWZsZW4gPSBsZW47CiAJCX0KIAotCQlza2IgPSBsMmNhcF9jcmVhdGVfaWZyYW1lX3BkdShzaywgbXNnLCBidWZsZW4sIGNvbnRyb2wsIDApOworCQlza2IgPSBsMmNhcF9jcmVhdGVfaWZyYW1lX3BkdShjaGFuLCBtc2csIGJ1ZmxlbiwgY29udHJvbCwgMCk7CiAJCWlmIChJU19FUlIoc2tiKSkgewogCQkJc2tiX3F1ZXVlX3B1cmdlKCZzYXJfcXVldWUpOwogCQkJcmV0dXJuIFBUUl9FUlIoc2tiKTsKQEAgLTEzNTQsOSArMTQ0Myw5IEBACiAJCWxlbiAtPSBidWZsZW47CiAJCXNpemUgKz0gYnVmbGVuOwogCX0KLQlza2JfcXVldWVfc3BsaWNlX3RhaWwoJnNhcl9xdWV1ZSwgVFhfUVVFVUUoc2spKTsKLQlpZiAoc2stPnNrX3NlbmRfaGVhZCA9PSBOVUxMKQotCQlzay0+c2tfc2VuZF9oZWFkID0gc2FyX3F1ZXVlLm5leHQ7CisJc2tiX3F1ZXVlX3NwbGljZV90YWlsKCZzYXJfcXVldWUsICZjaGFuLT50eF9xKTsKKwlpZiAoY2hhbi0+dHhfc2VuZF9oZWFkID09IE5VTEwpCisJCWNoYW4tPnR4X3NlbmRfaGVhZCA9IHNhcl9xdWV1ZS5uZXh0OwogCiAJcmV0dXJuIHNpemU7CiB9CkBAIC0xMzY0LDEwICsxNDUzLDExIEBACiBzdGF0aWMgdm9pZCBsMmNhcF9jaGFuX3JlYWR5KHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3Qgc29jayAqcGFyZW50ID0gYnRfc2soc2spLT5wYXJlbnQ7CisJc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4gPSBsMmNhcF9waShzayktPmNoYW47CiAKIAlCVF9EQkcoInNrICVwLCBwYXJlbnQgJXAiLCBzaywgcGFyZW50KTsKIAotCWwyY2FwX3BpKHNrKS0+Y29uZl9zdGF0ZSA9IDA7CisJY2hhbi0+Y29uZl9zdGF0ZSA9IDA7CiAJbDJjYXBfc29ja19jbGVhcl90aW1lcihzayk7CiAKIAlpZiAoIXBhcmVudCkgewpAQCAtMTM4NywxNCArMTQ3NywxNCBAQAogLyogQ29weSBmcmFtZSB0byBhbGwgcmF3IHNvY2tldHMgb24gdGhhdCBjb25uZWN0aW9uICovCiBzdGF0aWMgdm9pZCBsMmNhcF9yYXdfcmVjdihzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgbDJjYXBfY2hhbl9saXN0ICpsID0gJmNvbm4tPmNoYW5fbGlzdDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKLQlzdHJ1Y3Qgc29jayAqc2s7CisJc3RydWN0IGwyY2FwX2NoYW4gKmNoYW47CiAKIAlCVF9EQkcoImNvbm4gJXAiLCBjb25uKTsKIAotCXJlYWRfbG9jaygmbC0+bG9jayk7Ci0JZm9yIChzayA9IGwtPmhlYWQ7IHNrOyBzayA9IGwyY2FwX3BpKHNrKS0+bmV4dF9jKSB7CisJcmVhZF9sb2NrKCZjb25uLT5jaGFuX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hhbiwgJmNvbm4tPmNoYW5fbCwgbGlzdCkgeworCQlzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLT5zazsKIAkJaWYgKHNrLT5za190eXBlICE9IFNPQ0tfUkFXKQogCQkJY29udGludWU7CiAKQEAgLTE0MDgsNyArMTQ5OCw3IEBACiAJCWlmIChzb2NrX3F1ZXVlX3Jjdl9za2Ioc2ssIG5za2IpKQogCQkJa2ZyZWVfc2tiKG5za2IpOwogCX0KLQlyZWFkX3VubG9jaygmbC0+bG9jayk7CisJcmVhZF91bmxvY2soJmNvbm4tPmNoYW5fbG9jayk7CiB9CiAKIC8qIC0tLS0gTDJDQVAgc2lnbmFsbGluZyBjb21tYW5kcyAtLS0tICovCkBAIC0xNTQwLDMyICsxNjMwLDM1IEBACiAKIHN0YXRpYyB2b2lkIGwyY2FwX2Fja190aW1lb3V0KHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCBzb2NrICpzayA9ICh2b2lkICopIGFyZzsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiA9ICh2b2lkICopIGFyZzsKIAotCWJoX2xvY2tfc29jayhzayk7Ci0JbDJjYXBfc2VuZF9hY2sobDJjYXBfcGkoc2spKTsKLQliaF91bmxvY2tfc29jayhzayk7CisJYmhfbG9ja19zb2NrKGNoYW4tPnNrKTsKKwlsMmNhcF9zZW5kX2FjayhjaGFuKTsKKwliaF91bmxvY2tfc29jayhjaGFuLT5zayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBsMmNhcF9lcnRtX2luaXQoc3RydWN0IHNvY2sgKnNrKQorc3RhdGljIGlubGluZSB2b2lkIGwyY2FwX2VydG1faW5pdChzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbikKIHsKLQlsMmNhcF9waShzayktPmV4cGVjdGVkX2Fja19zZXEgPSAwOwotCWwyY2FwX3BpKHNrKS0+dW5hY2tlZF9mcmFtZXMgPSAwOwotCWwyY2FwX3BpKHNrKS0+YnVmZmVyX3NlcSA9IDA7Ci0JbDJjYXBfcGkoc2spLT5udW1fYWNrZWQgPSAwOwotCWwyY2FwX3BpKHNrKS0+ZnJhbWVzX3NlbnQgPSAwOworCXN0cnVjdCBzb2NrICpzayA9IGNoYW4tPnNrOwogCi0Jc2V0dXBfdGltZXIoJmwyY2FwX3BpKHNrKS0+cmV0cmFuc190aW1lciwKLQkJCWwyY2FwX3JldHJhbnNfdGltZW91dCwgKHVuc2lnbmVkIGxvbmcpIHNrKTsKLQlzZXR1cF90aW1lcigmbDJjYXBfcGkoc2spLT5tb25pdG9yX3RpbWVyLAotCQkJbDJjYXBfbW9uaXRvcl90aW1lb3V0LCAodW5zaWduZWQgbG9uZykgc2spOwotCXNldHVwX3RpbWVyKCZsMmNhcF9waShzayktPmFja190aW1lciwKLQkJCWwyY2FwX2Fja190aW1lb3V0LCAodW5zaWduZWQgbG9uZykgc2spOworCWNoYW4tPmV4cGVjdGVkX2Fja19zZXEgPSAwOworCWNoYW4tPnVuYWNrZWRfZnJhbWVzID0gMDsKKwljaGFuLT5idWZmZXJfc2VxID0gMDsKKwljaGFuLT5udW1fYWNrZWQgPSAwOworCWNoYW4tPmZyYW1lc19zZW50ID0gMDsKIAotCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdChTUkVKX1FVRVVFKHNrKSk7Ci0JX19za2JfcXVldWVfaGVhZF9pbml0KEJVU1lfUVVFVUUoc2spKTsKKwlzZXR1cF90aW1lcigmY2hhbi0+cmV0cmFuc190aW1lciwgbDJjYXBfcmV0cmFuc190aW1lb3V0LAorCQkJCQkJCSh1bnNpZ25lZCBsb25nKSBjaGFuKTsKKwlzZXR1cF90aW1lcigmY2hhbi0+bW9uaXRvcl90aW1lciwgbDJjYXBfbW9uaXRvcl90aW1lb3V0LAorCQkJCQkJCSh1bnNpZ25lZCBsb25nKSBjaGFuKTsKKwlzZXR1cF90aW1lcigmY2hhbi0+YWNrX3RpbWVyLCBsMmNhcF9hY2tfdGltZW91dCwgKHVuc2lnbmVkIGxvbmcpIGNoYW4pOwogCi0JSU5JVF9XT1JLKCZsMmNhcF9waShzayktPmJ1c3lfd29yaywgbDJjYXBfYnVzeV93b3JrKTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZjaGFuLT5zcmVqX3EpOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmNoYW4tPmJ1c3lfcSk7CisKKwlJTklUX0xJU1RfSEVBRCgmY2hhbi0+c3Jlal9sKTsKKworCUlOSVRfV09SSygmY2hhbi0+YnVzeV93b3JrLCBsMmNhcF9idXN5X3dvcmspOwogCiAJc2stPnNrX2JhY2tsb2dfcmN2ID0gbDJjYXBfZXJ0bV9kYXRhX3JjdjsKIH0KQEAgLTE1ODMsMzggKzE2NzYsMzcgQEAKIAl9CiB9CiAKLWludCBsMmNhcF9idWlsZF9jb25mX3JlcShzdHJ1Y3Qgc29jayAqc2ssIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGwyY2FwX2J1aWxkX2NvbmZfcmVxKHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CiAJc3RydWN0IGwyY2FwX2NvbmZfcmVxICpyZXEgPSBkYXRhOwotCXN0cnVjdCBsMmNhcF9jb25mX3JmYyByZmMgPSB7IC5tb2RlID0gcGktPm1vZGUgfTsKKwlzdHJ1Y3QgbDJjYXBfY29uZl9yZmMgcmZjID0geyAubW9kZSA9IGNoYW4tPm1vZGUgfTsKIAl2b2lkICpwdHIgPSByZXEtPmRhdGE7CiAKLQlCVF9EQkcoInNrICVwIiwgc2spOworCUJUX0RCRygiY2hhbiAlcCIsIGNoYW4pOwogCi0JaWYgKHBpLT5udW1fY29uZl9yZXEgfHwgcGktPm51bV9jb25mX3JzcCkKKwlpZiAoY2hhbi0+bnVtX2NvbmZfcmVxIHx8IGNoYW4tPm51bV9jb25mX3JzcCkKIAkJZ290byBkb25lOwogCi0Jc3dpdGNoIChwaS0+bW9kZSkgeworCXN3aXRjaCAoY2hhbi0+bW9kZSkgewogCWNhc2UgTDJDQVBfTU9ERV9TVFJFQU1JTkc6CiAJY2FzZSBMMkNBUF9NT0RFX0VSVE06Ci0JCWlmIChwaS0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfU1RBVEUyX0RFVklDRSkKKwkJaWYgKGNoYW4tPmNvbmZfc3RhdGUgJiBMMkNBUF9DT05GX1NUQVRFMl9ERVZJQ0UpCiAJCQlicmVhazsKIAogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAlkZWZhdWx0OgotCQlwaS0+bW9kZSA9IGwyY2FwX3NlbGVjdF9tb2RlKHJmYy5tb2RlLCBwaS0+Y29ubi0+ZmVhdF9tYXNrKTsKKwkJY2hhbi0+bW9kZSA9IGwyY2FwX3NlbGVjdF9tb2RlKHJmYy5tb2RlLCBjaGFuLT5jb25uLT5mZWF0X21hc2spOwogCQlicmVhazsKIAl9CiAKIGRvbmU6Ci0JaWYgKHBpLT5pbXR1ICE9IEwyQ0FQX0RFRkFVTFRfTVRVKQotCQlsMmNhcF9hZGRfY29uZl9vcHQoJnB0ciwgTDJDQVBfQ09ORl9NVFUsIDIsIHBpLT5pbXR1KTsKKwlpZiAoY2hhbi0+aW10dSAhPSBMMkNBUF9ERUZBVUxUX01UVSkKKwkJbDJjYXBfYWRkX2NvbmZfb3B0KCZwdHIsIEwyQ0FQX0NPTkZfTVRVLCAyLCBjaGFuLT5pbXR1KTsKIAotCXN3aXRjaCAocGktPm1vZGUpIHsKKwlzd2l0Y2ggKGNoYW4tPm1vZGUpIHsKIAljYXNlIEwyQ0FQX01PREVfQkFTSUM6Ci0JCWlmICghKHBpLT5jb25uLT5mZWF0X21hc2sgJiBMMkNBUF9GRUFUX0VSVE0pICYmCi0JCQkJIShwaS0+Y29ubi0+ZmVhdF9tYXNrICYgTDJDQVBfRkVBVF9TVFJFQU1JTkcpKQorCQlpZiAoIShjaGFuLT5jb25uLT5mZWF0X21hc2sgJiBMMkNBUF9GRUFUX0VSVE0pICYmCisJCQkJIShjaGFuLT5jb25uLT5mZWF0X21hc2sgJiBMMkNBUF9GRUFUX1NUUkVBTUlORykpCiAJCQlicmVhazsKIAogCQlyZmMubW9kZSAgICAgICAgICAgID0gTDJDQVBfTU9ERV9CQVNJQzsKQEAgLTE2MzAsMjQgKzE3MjIsMjQgQEAKIAogCWNhc2UgTDJDQVBfTU9ERV9FUlRNOgogCQlyZmMubW9kZSAgICAgICAgICAgID0gTDJDQVBfTU9ERV9FUlRNOwotCQlyZmMudHh3aW5fc2l6ZSAgICAgID0gcGktPnR4X3dpbjsKLQkJcmZjLm1heF90cmFuc21pdCAgICA9IHBpLT5tYXhfdHg7CisJCXJmYy50eHdpbl9zaXplICAgICAgPSBjaGFuLT50eF93aW47CisJCXJmYy5tYXhfdHJhbnNtaXQgICAgPSBjaGFuLT5tYXhfdHg7CiAJCXJmYy5yZXRyYW5zX3RpbWVvdXQgPSAwOwogCQlyZmMubW9uaXRvcl90aW1lb3V0ID0gMDsKIAkJcmZjLm1heF9wZHVfc2l6ZSAgICA9IGNwdV90b19sZTE2KEwyQ0FQX0RFRkFVTFRfTUFYX1BEVV9TSVpFKTsKLQkJaWYgKEwyQ0FQX0RFRkFVTFRfTUFYX1BEVV9TSVpFID4gcGktPmNvbm4tPm10dSAtIDEwKQotCQkJcmZjLm1heF9wZHVfc2l6ZSA9IGNwdV90b19sZTE2KHBpLT5jb25uLT5tdHUgLSAxMCk7CisJCWlmIChMMkNBUF9ERUZBVUxUX01BWF9QRFVfU0laRSA+IGNoYW4tPmNvbm4tPm10dSAtIDEwKQorCQkJcmZjLm1heF9wZHVfc2l6ZSA9IGNwdV90b19sZTE2KGNoYW4tPmNvbm4tPm10dSAtIDEwKTsKIAogCQlsMmNhcF9hZGRfY29uZl9vcHQoJnB0ciwgTDJDQVBfQ09ORl9SRkMsIHNpemVvZihyZmMpLAogCQkJCQkJCSh1bnNpZ25lZCBsb25nKSAmcmZjKTsKIAotCQlpZiAoIShwaS0+Y29ubi0+ZmVhdF9tYXNrICYgTDJDQVBfRkVBVF9GQ1MpKQorCQlpZiAoIShjaGFuLT5jb25uLT5mZWF0X21hc2sgJiBMMkNBUF9GRUFUX0ZDUykpCiAJCQlicmVhazsKIAotCQlpZiAocGktPmZjcyA9PSBMMkNBUF9GQ1NfTk9ORSB8fAotCQkJCXBpLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9OT19GQ1NfUkVDVikgewotCQkJcGktPmZjcyA9IEwyQ0FQX0ZDU19OT05FOwotCQkJbDJjYXBfYWRkX2NvbmZfb3B0KCZwdHIsIEwyQ0FQX0NPTkZfRkNTLCAxLCBwaS0+ZmNzKTsKKwkJaWYgKGNoYW4tPmZjcyA9PSBMMkNBUF9GQ1NfTk9ORSB8fAorCQkJCWNoYW4tPmNvbmZfc3RhdGUgJiBMMkNBUF9DT05GX05PX0ZDU19SRUNWKSB7CisJCQljaGFuLT5mY3MgPSBMMkNBUF9GQ1NfTk9ORTsKKwkJCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX0ZDUywgMSwgY2hhbi0+ZmNzKTsKIAkJfQogCQlicmVhazsKIApAQCAtMTY1OCw0MyArMTc1MCw0MiBAQAogCQlyZmMucmV0cmFuc190aW1lb3V0ID0gMDsKIAkJcmZjLm1vbml0b3JfdGltZW91dCA9IDA7CiAJCXJmYy5tYXhfcGR1X3NpemUgICAgPSBjcHVfdG9fbGUxNihMMkNBUF9ERUZBVUxUX01BWF9QRFVfU0laRSk7Ci0JCWlmIChMMkNBUF9ERUZBVUxUX01BWF9QRFVfU0laRSA+IHBpLT5jb25uLT5tdHUgLSAxMCkKLQkJCXJmYy5tYXhfcGR1X3NpemUgPSBjcHVfdG9fbGUxNihwaS0+Y29ubi0+bXR1IC0gMTApOworCQlpZiAoTDJDQVBfREVGQVVMVF9NQVhfUERVX1NJWkUgPiBjaGFuLT5jb25uLT5tdHUgLSAxMCkKKwkJCXJmYy5tYXhfcGR1X3NpemUgPSBjcHVfdG9fbGUxNihjaGFuLT5jb25uLT5tdHUgLSAxMCk7CiAKIAkJbDJjYXBfYWRkX2NvbmZfb3B0KCZwdHIsIEwyQ0FQX0NPTkZfUkZDLCBzaXplb2YocmZjKSwKIAkJCQkJCQkodW5zaWduZWQgbG9uZykgJnJmYyk7CiAKLQkJaWYgKCEocGktPmNvbm4tPmZlYXRfbWFzayAmIEwyQ0FQX0ZFQVRfRkNTKSkKKwkJaWYgKCEoY2hhbi0+Y29ubi0+ZmVhdF9tYXNrICYgTDJDQVBfRkVBVF9GQ1MpKQogCQkJYnJlYWs7CiAKLQkJaWYgKHBpLT5mY3MgPT0gTDJDQVBfRkNTX05PTkUgfHwKLQkJCQlwaS0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfTk9fRkNTX1JFQ1YpIHsKLQkJCXBpLT5mY3MgPSBMMkNBUF9GQ1NfTk9ORTsKLQkJCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX0ZDUywgMSwgcGktPmZjcyk7CisJCWlmIChjaGFuLT5mY3MgPT0gTDJDQVBfRkNTX05PTkUgfHwKKwkJCQljaGFuLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9OT19GQ1NfUkVDVikgeworCQkJY2hhbi0+ZmNzID0gTDJDQVBfRkNTX05PTkU7CisJCQlsMmNhcF9hZGRfY29uZl9vcHQoJnB0ciwgTDJDQVBfQ09ORl9GQ1MsIDEsIGNoYW4tPmZjcyk7CiAJCX0KIAkJYnJlYWs7CiAJfQogCi0JcmVxLT5kY2lkICA9IGNwdV90b19sZTE2KHBpLT5kY2lkKTsKKwlyZXEtPmRjaWQgID0gY3B1X3RvX2xlMTYoY2hhbi0+ZGNpZCk7CiAJcmVxLT5mbGFncyA9IGNwdV90b19sZTE2KDApOwogCiAJcmV0dXJuIHB0ciAtIGRhdGE7CiB9CiAKLXN0YXRpYyBpbnQgbDJjYXBfcGFyc2VfY29uZl9yZXEoc3RydWN0IHNvY2sgKnNrLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBsMmNhcF9wYXJzZV9jb25mX3JlcShzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOwogCXN0cnVjdCBsMmNhcF9jb25mX3JzcCAqcnNwID0gZGF0YTsKIAl2b2lkICpwdHIgPSByc3AtPmRhdGE7Ci0Jdm9pZCAqcmVxID0gcGktPmNvbmZfcmVxOwotCWludCBsZW4gPSBwaS0+Y29uZl9sZW47CisJdm9pZCAqcmVxID0gY2hhbi0+Y29uZl9yZXE7CisJaW50IGxlbiA9IGNoYW4tPmNvbmZfbGVuOwogCWludCB0eXBlLCBoaW50LCBvbGVuOwogCXVuc2lnbmVkIGxvbmcgdmFsOwogCXN0cnVjdCBsMmNhcF9jb25mX3JmYyByZmMgPSB7IC5tb2RlID0gTDJDQVBfTU9ERV9CQVNJQyB9OwogCXUxNiBtdHUgPSBMMkNBUF9ERUZBVUxUX01UVTsKIAl1MTYgcmVzdWx0ID0gTDJDQVBfQ09ORl9TVUNDRVNTOwogCi0JQlRfREJHKCJzayAlcCIsIHNrKTsKKwlCVF9EQkcoImNoYW4gJXAiLCBjaGFuKTsKIAogCXdoaWxlIChsZW4gPj0gTDJDQVBfQ09ORl9PUFRfU0laRSkgewogCQlsZW4gLT0gbDJjYXBfZ2V0X2NvbmZfb3B0KCZyZXEsICZ0eXBlLCAmb2xlbiwgJnZhbCk7CkBAIC0xNzA4LDcgKzE3OTksNyBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBMMkNBUF9DT05GX0ZMVVNIX1RPOgotCQkJcGktPmZsdXNoX3RvID0gdmFsOworCQkJY2hhbi0+Zmx1c2hfdG8gPSB2YWw7CiAJCQlicmVhazsKIAogCQljYXNlIEwyQ0FQX0NPTkZfUU9TOgpAQCAtMTcyMSw3ICsxODEyLDcgQEAKIAogCQljYXNlIEwyQ0FQX0NPTkZfRkNTOgogCQkJaWYgKHZhbCA9PSBMMkNBUF9GQ1NfTk9ORSkKLQkJCQlwaS0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX05PX0ZDU19SRUNWOworCQkJCWNoYW4tPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9OT19GQ1NfUkVDVjsKIAogCQkJYnJlYWs7CiAKQEAgLTE3MzUsMzAgKzE4MjYsMzAgQEAKIAkJfQogCX0KIAotCWlmIChwaS0+bnVtX2NvbmZfcnNwIHx8IHBpLT5udW1fY29uZl9yZXEgPiAxKQorCWlmIChjaGFuLT5udW1fY29uZl9yc3AgfHwgY2hhbi0+bnVtX2NvbmZfcmVxID4gMSkKIAkJZ290byBkb25lOwogCi0Jc3dpdGNoIChwaS0+bW9kZSkgeworCXN3aXRjaCAoY2hhbi0+bW9kZSkgewogCWNhc2UgTDJDQVBfTU9ERV9TVFJFQU1JTkc6CiAJY2FzZSBMMkNBUF9NT0RFX0VSVE06Ci0JCWlmICghKHBpLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9TVEFURTJfREVWSUNFKSkgewotCQkJcGktPm1vZGUgPSBsMmNhcF9zZWxlY3RfbW9kZShyZmMubW9kZSwKLQkJCQkJcGktPmNvbm4tPmZlYXRfbWFzayk7CisJCWlmICghKGNoYW4tPmNvbmZfc3RhdGUgJiBMMkNBUF9DT05GX1NUQVRFMl9ERVZJQ0UpKSB7CisJCQljaGFuLT5tb2RlID0gbDJjYXBfc2VsZWN0X21vZGUocmZjLm1vZGUsCisJCQkJCWNoYW4tPmNvbm4tPmZlYXRfbWFzayk7CiAJCQlicmVhazsKIAkJfQogCi0JCWlmIChwaS0+bW9kZSAhPSByZmMubW9kZSkKKwkJaWYgKGNoYW4tPm1vZGUgIT0gcmZjLm1vZGUpCiAJCQlyZXR1cm4gLUVDT05OUkVGVVNFRDsKIAogCQlicmVhazsKIAl9CiAKIGRvbmU6Ci0JaWYgKHBpLT5tb2RlICE9IHJmYy5tb2RlKSB7CisJaWYgKGNoYW4tPm1vZGUgIT0gcmZjLm1vZGUpIHsKIAkJcmVzdWx0ID0gTDJDQVBfQ09ORl9VTkFDQ0VQVDsKLQkJcmZjLm1vZGUgPSBwaS0+bW9kZTsKKwkJcmZjLm1vZGUgPSBjaGFuLT5tb2RlOwogCi0JCWlmIChwaS0+bnVtX2NvbmZfcnNwID09IDEpCisJCWlmIChjaGFuLT5udW1fY29uZl9yc3AgPT0gMSkKIAkJCXJldHVybiAtRUNPTk5SRUZVU0VEOwogCiAJCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX1JGQywKQEAgLTE3NzMsMzIgKzE4NjQsMzIgQEAKIAkJaWYgKG10dSA8IEwyQ0FQX0RFRkFVTFRfTUlOX01UVSkKIAkJCXJlc3VsdCA9IEwyQ0FQX0NPTkZfVU5BQ0NFUFQ7CiAJCWVsc2UgewotCQkJcGktPm9tdHUgPSBtdHU7Ci0JCQlwaS0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX01UVV9ET05FOworCQkJY2hhbi0+b210dSA9IG10dTsKKwkJCWNoYW4tPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9NVFVfRE9ORTsKIAkJfQotCQlsMmNhcF9hZGRfY29uZl9vcHQoJnB0ciwgTDJDQVBfQ09ORl9NVFUsIDIsIHBpLT5vbXR1KTsKKwkJbDJjYXBfYWRkX2NvbmZfb3B0KCZwdHIsIEwyQ0FQX0NPTkZfTVRVLCAyLCBjaGFuLT5vbXR1KTsKIAogCQlzd2l0Y2ggKHJmYy5tb2RlKSB7CiAJCWNhc2UgTDJDQVBfTU9ERV9CQVNJQzoKLQkJCXBpLT5mY3MgPSBMMkNBUF9GQ1NfTk9ORTsKLQkJCXBpLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfTU9ERV9ET05FOworCQkJY2hhbi0+ZmNzID0gTDJDQVBfRkNTX05PTkU7CisJCQljaGFuLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfTU9ERV9ET05FOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBMMkNBUF9NT0RFX0VSVE06Ci0JCQlwaS0+cmVtb3RlX3R4X3dpbiA9IHJmYy50eHdpbl9zaXplOwotCQkJcGktPnJlbW90ZV9tYXhfdHggPSByZmMubWF4X3RyYW5zbWl0OworCQkJY2hhbi0+cmVtb3RlX3R4X3dpbiA9IHJmYy50eHdpbl9zaXplOworCQkJY2hhbi0+cmVtb3RlX21heF90eCA9IHJmYy5tYXhfdHJhbnNtaXQ7CiAKLQkJCWlmIChsZTE2X3RvX2NwdShyZmMubWF4X3BkdV9zaXplKSA+IHBpLT5jb25uLT5tdHUgLSAxMCkKLQkJCQlyZmMubWF4X3BkdV9zaXplID0gY3B1X3RvX2xlMTYocGktPmNvbm4tPm10dSAtIDEwKTsKKwkJCWlmIChsZTE2X3RvX2NwdShyZmMubWF4X3BkdV9zaXplKSA+IGNoYW4tPmNvbm4tPm10dSAtIDEwKQorCQkJCXJmYy5tYXhfcGR1X3NpemUgPSBjcHVfdG9fbGUxNihjaGFuLT5jb25uLT5tdHUgLSAxMCk7CiAKLQkJCXBpLT5yZW1vdGVfbXBzID0gbGUxNl90b19jcHUocmZjLm1heF9wZHVfc2l6ZSk7CisJCQljaGFuLT5yZW1vdGVfbXBzID0gbGUxNl90b19jcHUocmZjLm1heF9wZHVfc2l6ZSk7CiAKIAkJCXJmYy5yZXRyYW5zX3RpbWVvdXQgPQogCQkJCWxlMTZfdG9fY3B1KEwyQ0FQX0RFRkFVTFRfUkVUUkFOU19UTyk7CiAJCQlyZmMubW9uaXRvcl90aW1lb3V0ID0KIAkJCQlsZTE2X3RvX2NwdShMMkNBUF9ERUZBVUxUX01PTklUT1JfVE8pOwogCi0JCQlwaS0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX01PREVfRE9ORTsKKwkJCWNoYW4tPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9NT0RFX0RPTkU7CiAKIAkJCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX1JGQywKIAkJCQkJc2l6ZW9mKHJmYyksICh1bnNpZ25lZCBsb25nKSAmcmZjKTsKQEAgLTE4MDYsMTIgKzE4OTcsMTIgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgTDJDQVBfTU9ERV9TVFJFQU1JTkc6Ci0JCQlpZiAobGUxNl90b19jcHUocmZjLm1heF9wZHVfc2l6ZSkgPiBwaS0+Y29ubi0+bXR1IC0gMTApCi0JCQkJcmZjLm1heF9wZHVfc2l6ZSA9IGNwdV90b19sZTE2KHBpLT5jb25uLT5tdHUgLSAxMCk7CisJCQlpZiAobGUxNl90b19jcHUocmZjLm1heF9wZHVfc2l6ZSkgPiBjaGFuLT5jb25uLT5tdHUgLSAxMCkKKwkJCQlyZmMubWF4X3BkdV9zaXplID0gY3B1X3RvX2xlMTYoY2hhbi0+Y29ubi0+bXR1IC0gMTApOwogCi0JCQlwaS0+cmVtb3RlX21wcyA9IGxlMTZfdG9fY3B1KHJmYy5tYXhfcGR1X3NpemUpOworCQkJY2hhbi0+cmVtb3RlX21wcyA9IGxlMTZfdG9fY3B1KHJmYy5tYXhfcGR1X3NpemUpOwogCi0JCQlwaS0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX01PREVfRE9ORTsKKwkJCWNoYW4tPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9NT0RFX0RPTkU7CiAKIAkJCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX1JGQywKIAkJCQkJc2l6ZW9mKHJmYyksICh1bnNpZ25lZCBsb25nKSAmcmZjKTsKQEAgLTE4MjIsMjkgKzE5MTMsMjggQEAKIAkJCXJlc3VsdCA9IEwyQ0FQX0NPTkZfVU5BQ0NFUFQ7CiAKIAkJCW1lbXNldCgmcmZjLCAwLCBzaXplb2YocmZjKSk7Ci0JCQlyZmMubW9kZSA9IHBpLT5tb2RlOworCQkJcmZjLm1vZGUgPSBjaGFuLT5tb2RlOwogCQl9CiAKIAkJaWYgKHJlc3VsdCA9PSBMMkNBUF9DT05GX1NVQ0NFU1MpCi0JCQlwaS0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX09VVFBVVF9ET05FOworCQkJY2hhbi0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX09VVFBVVF9ET05FOwogCX0KLQlyc3AtPnNjaWQgICA9IGNwdV90b19sZTE2KHBpLT5kY2lkKTsKKwlyc3AtPnNjaWQgICA9IGNwdV90b19sZTE2KGNoYW4tPmRjaWQpOwogCXJzcC0+cmVzdWx0ID0gY3B1X3RvX2xlMTYocmVzdWx0KTsKIAlyc3AtPmZsYWdzICA9IGNwdV90b19sZTE2KDB4MDAwMCk7CiAKIAlyZXR1cm4gcHRyIC0gZGF0YTsKIH0KIAotc3RhdGljIGludCBsMmNhcF9wYXJzZV9jb25mX3JzcChzdHJ1Y3Qgc29jayAqc2ssIHZvaWQgKnJzcCwgaW50IGxlbiwgdm9pZCAqZGF0YSwgdTE2ICpyZXN1bHQpCitzdGF0aWMgaW50IGwyY2FwX3BhcnNlX2NvbmZfcnNwKHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCB2b2lkICpyc3AsIGludCBsZW4sIHZvaWQgKmRhdGEsIHUxNiAqcmVzdWx0KQogewotCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CiAJc3RydWN0IGwyY2FwX2NvbmZfcmVxICpyZXEgPSBkYXRhOwogCXZvaWQgKnB0ciA9IHJlcS0+ZGF0YTsKIAlpbnQgdHlwZSwgb2xlbjsKIAl1bnNpZ25lZCBsb25nIHZhbDsKIAlzdHJ1Y3QgbDJjYXBfY29uZl9yZmMgcmZjOwogCi0JQlRfREJHKCJzayAlcCwgcnNwICVwLCBsZW4gJWQsIHJlcSAlcCIsIHNrLCByc3AsIGxlbiwgZGF0YSk7CisJQlRfREJHKCJjaGFuICVwLCByc3AgJXAsIGxlbiAlZCwgcmVxICVwIiwgY2hhbiwgcnNwLCBsZW4sIGRhdGEpOwogCiAJd2hpbGUgKGxlbiA+PSBMMkNBUF9DT05GX09QVF9TSVpFKSB7CiAJCWxlbiAtPSBsMmNhcF9nZXRfY29uZl9vcHQoJnJzcCwgJnR5cGUsICZvbGVuLCAmdmFsKTsKQEAgLTE4NTMsMjcgKzE5NDMsMjcgQEAKIAkJY2FzZSBMMkNBUF9DT05GX01UVToKIAkJCWlmICh2YWwgPCBMMkNBUF9ERUZBVUxUX01JTl9NVFUpIHsKIAkJCQkqcmVzdWx0ID0gTDJDQVBfQ09ORl9VTkFDQ0VQVDsKLQkJCQlwaS0+aW10dSA9IEwyQ0FQX0RFRkFVTFRfTUlOX01UVTsKKwkJCQljaGFuLT5pbXR1ID0gTDJDQVBfREVGQVVMVF9NSU5fTVRVOwogCQkJfSBlbHNlCi0JCQkJcGktPmltdHUgPSB2YWw7Ci0JCQlsMmNhcF9hZGRfY29uZl9vcHQoJnB0ciwgTDJDQVBfQ09ORl9NVFUsIDIsIHBpLT5pbXR1KTsKKwkJCQljaGFuLT5pbXR1ID0gdmFsOworCQkJbDJjYXBfYWRkX2NvbmZfb3B0KCZwdHIsIEwyQ0FQX0NPTkZfTVRVLCAyLCBjaGFuLT5pbXR1KTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgTDJDQVBfQ09ORl9GTFVTSF9UTzoKLQkJCXBpLT5mbHVzaF90byA9IHZhbDsKKwkJCWNoYW4tPmZsdXNoX3RvID0gdmFsOwogCQkJbDJjYXBfYWRkX2NvbmZfb3B0KCZwdHIsIEwyQ0FQX0NPTkZfRkxVU0hfVE8sCi0JCQkJCQkJMiwgcGktPmZsdXNoX3RvKTsKKwkJCQkJCQkyLCBjaGFuLT5mbHVzaF90byk7CiAJCQlicmVhazsKIAogCQljYXNlIEwyQ0FQX0NPTkZfUkZDOgogCQkJaWYgKG9sZW4gPT0gc2l6ZW9mKHJmYykpCiAJCQkJbWVtY3B5KCZyZmMsICh2b2lkICopdmFsLCBvbGVuKTsKIAotCQkJaWYgKChwaS0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfU1RBVEUyX0RFVklDRSkgJiYKLQkJCQkJCQlyZmMubW9kZSAhPSBwaS0+bW9kZSkKKwkJCWlmICgoY2hhbi0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfU1RBVEUyX0RFVklDRSkgJiYKKwkJCQkJCQlyZmMubW9kZSAhPSBjaGFuLT5tb2RlKQogCQkJCXJldHVybiAtRUNPTk5SRUZVU0VEOwogCi0JCQlwaS0+ZmNzID0gMDsKKwkJCWNoYW4tPmZjcyA9IDA7CiAKIAkJCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX1JGQywKIAkJCQkJc2l6ZW9mKHJmYyksICh1bnNpZ25lZCBsb25nKSAmcmZjKTsKQEAgLTE4ODEsNTMgKzE5NzEsNzQgQEAKIAkJfQogCX0KIAotCWlmIChwaS0+bW9kZSA9PSBMMkNBUF9NT0RFX0JBU0lDICYmIHBpLT5tb2RlICE9IHJmYy5tb2RlKQorCWlmIChjaGFuLT5tb2RlID09IEwyQ0FQX01PREVfQkFTSUMgJiYgY2hhbi0+bW9kZSAhPSByZmMubW9kZSkKIAkJcmV0dXJuIC1FQ09OTlJFRlVTRUQ7CiAKLQlwaS0+bW9kZSA9IHJmYy5tb2RlOworCWNoYW4tPm1vZGUgPSByZmMubW9kZTsKIAogCWlmICgqcmVzdWx0ID09IEwyQ0FQX0NPTkZfU1VDQ0VTUykgewogCQlzd2l0Y2ggKHJmYy5tb2RlKSB7CiAJCWNhc2UgTDJDQVBfTU9ERV9FUlRNOgotCQkJcGktPnJldHJhbnNfdGltZW91dCA9IGxlMTZfdG9fY3B1KHJmYy5yZXRyYW5zX3RpbWVvdXQpOwotCQkJcGktPm1vbml0b3JfdGltZW91dCA9IGxlMTZfdG9fY3B1KHJmYy5tb25pdG9yX3RpbWVvdXQpOwotCQkJcGktPm1wcyAgICA9IGxlMTZfdG9fY3B1KHJmYy5tYXhfcGR1X3NpemUpOworCQkJY2hhbi0+cmV0cmFuc190aW1lb3V0ID0gbGUxNl90b19jcHUocmZjLnJldHJhbnNfdGltZW91dCk7CisJCQljaGFuLT5tb25pdG9yX3RpbWVvdXQgPSBsZTE2X3RvX2NwdShyZmMubW9uaXRvcl90aW1lb3V0KTsKKwkJCWNoYW4tPm1wcyAgICA9IGxlMTZfdG9fY3B1KHJmYy5tYXhfcGR1X3NpemUpOwogCQkJYnJlYWs7CiAJCWNhc2UgTDJDQVBfTU9ERV9TVFJFQU1JTkc6Ci0JCQlwaS0+bXBzICAgID0gbGUxNl90b19jcHUocmZjLm1heF9wZHVfc2l6ZSk7CisJCQljaGFuLT5tcHMgICAgPSBsZTE2X3RvX2NwdShyZmMubWF4X3BkdV9zaXplKTsKIAkJfQogCX0KIAotCXJlcS0+ZGNpZCAgID0gY3B1X3RvX2xlMTYocGktPmRjaWQpOworCXJlcS0+ZGNpZCAgID0gY3B1X3RvX2xlMTYoY2hhbi0+ZGNpZCk7CiAJcmVxLT5mbGFncyAgPSBjcHVfdG9fbGUxNigweDAwMDApOwogCiAJcmV0dXJuIHB0ciAtIGRhdGE7CiB9CiAKLXN0YXRpYyBpbnQgbDJjYXBfYnVpbGRfY29uZl9yc3Aoc3RydWN0IHNvY2sgKnNrLCB2b2lkICpkYXRhLCB1MTYgcmVzdWx0LCB1MTYgZmxhZ3MpCitzdGF0aWMgaW50IGwyY2FwX2J1aWxkX2NvbmZfcnNwKHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCB2b2lkICpkYXRhLCB1MTYgcmVzdWx0LCB1MTYgZmxhZ3MpCiB7CiAJc3RydWN0IGwyY2FwX2NvbmZfcnNwICpyc3AgPSBkYXRhOwogCXZvaWQgKnB0ciA9IHJzcC0+ZGF0YTsKIAotCUJUX0RCRygic2sgJXAiLCBzayk7CisJQlRfREJHKCJjaGFuICVwIiwgY2hhbik7CiAKLQlyc3AtPnNjaWQgICA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+ZGNpZCk7CisJcnNwLT5zY2lkICAgPSBjcHVfdG9fbGUxNihjaGFuLT5kY2lkKTsKIAlyc3AtPnJlc3VsdCA9IGNwdV90b19sZTE2KHJlc3VsdCk7CiAJcnNwLT5mbGFncyAgPSBjcHVfdG9fbGUxNihmbGFncyk7CiAKIAlyZXR1cm4gcHRyIC0gZGF0YTsKIH0KIAotc3RhdGljIHZvaWQgbDJjYXBfY29uZl9yZmNfZ2V0KHN0cnVjdCBzb2NrICpzaywgdm9pZCAqcnNwLCBpbnQgbGVuKQordm9pZCBfX2wyY2FwX2Nvbm5lY3RfcnNwX2RlZmVyKHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuKQogewotCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CisJc3RydWN0IGwyY2FwX2Nvbm5fcnNwIHJzcDsKKwlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGNoYW4tPmNvbm47CisJdTggYnVmWzEyOF07CisKKwlyc3Auc2NpZCAgID0gY3B1X3RvX2xlMTYoY2hhbi0+ZGNpZCk7CisJcnNwLmRjaWQgICA9IGNwdV90b19sZTE2KGNoYW4tPnNjaWQpOworCXJzcC5yZXN1bHQgPSBjcHVfdG9fbGUxNihMMkNBUF9DUl9TVUNDRVNTKTsKKwlyc3Auc3RhdHVzID0gY3B1X3RvX2xlMTYoTDJDQVBfQ1NfTk9fSU5GTyk7CisJbDJjYXBfc2VuZF9jbWQoY29ubiwgY2hhbi0+aWRlbnQsCisJCQkJTDJDQVBfQ09OTl9SU1AsIHNpemVvZihyc3ApLCAmcnNwKTsKKworCWlmIChjaGFuLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9SRVFfU0VOVCkKKwkJcmV0dXJuOworCisJY2hhbi0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX1JFUV9TRU5UOworCWwyY2FwX3NlbmRfY21kKGNvbm4sIGwyY2FwX2dldF9pZGVudChjb25uKSwgTDJDQVBfQ09ORl9SRVEsCisJCQlsMmNhcF9idWlsZF9jb25mX3JlcShjaGFuLCBidWYpLCBidWYpOworCWNoYW4tPm51bV9jb25mX3JlcSsrOworfQorCitzdGF0aWMgdm9pZCBsMmNhcF9jb25mX3JmY19nZXQoc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4sIHZvaWQgKnJzcCwgaW50IGxlbikKK3sKIAlpbnQgdHlwZSwgb2xlbjsKIAl1bnNpZ25lZCBsb25nIHZhbDsKIAlzdHJ1Y3QgbDJjYXBfY29uZl9yZmMgcmZjOwogCi0JQlRfREJHKCJzayAlcCwgcnNwICVwLCBsZW4gJWQiLCBzaywgcnNwLCBsZW4pOworCUJUX0RCRygiY2hhbiAlcCwgcnNwICVwLCBsZW4gJWQiLCBjaGFuLCByc3AsIGxlbik7CiAKLQlpZiAoKHBpLT5tb2RlICE9IEwyQ0FQX01PREVfRVJUTSkgJiYgKHBpLT5tb2RlICE9IEwyQ0FQX01PREVfU1RSRUFNSU5HKSkKKwlpZiAoKGNoYW4tPm1vZGUgIT0gTDJDQVBfTU9ERV9FUlRNKSAmJiAoY2hhbi0+bW9kZSAhPSBMMkNBUF9NT0RFX1NUUkVBTUlORykpCiAJCXJldHVybjsKIAogCXdoaWxlIChsZW4gPj0gTDJDQVBfQ09ORl9PUFRfU0laRSkgewpAQCAtMTk0NCwxMiArMjA1NSwxMiBAQAogZG9uZToKIAlzd2l0Y2ggKHJmYy5tb2RlKSB7CiAJY2FzZSBMMkNBUF9NT0RFX0VSVE06Ci0JCXBpLT5yZXRyYW5zX3RpbWVvdXQgPSBsZTE2X3RvX2NwdShyZmMucmV0cmFuc190aW1lb3V0KTsKLQkJcGktPm1vbml0b3JfdGltZW91dCA9IGxlMTZfdG9fY3B1KHJmYy5tb25pdG9yX3RpbWVvdXQpOwotCQlwaS0+bXBzICAgID0gbGUxNl90b19jcHUocmZjLm1heF9wZHVfc2l6ZSk7CisJCWNoYW4tPnJldHJhbnNfdGltZW91dCA9IGxlMTZfdG9fY3B1KHJmYy5yZXRyYW5zX3RpbWVvdXQpOworCQljaGFuLT5tb25pdG9yX3RpbWVvdXQgPSBsZTE2X3RvX2NwdShyZmMubW9uaXRvcl90aW1lb3V0KTsKKwkJY2hhbi0+bXBzICAgID0gbGUxNl90b19jcHUocmZjLm1heF9wZHVfc2l6ZSk7CiAJCWJyZWFrOwogCWNhc2UgTDJDQVBfTU9ERV9TVFJFQU1JTkc6Ci0JCXBpLT5tcHMgICAgPSBsZTE2X3RvX2NwdShyZmMubWF4X3BkdV9zaXplKTsKKwkJY2hhbi0+bXBzICAgID0gbGUxNl90b19jcHUocmZjLm1heF9wZHVfc2l6ZSk7CiAJfQogfQogCkBAIC0xOTc1LDkgKzIwODYsOSBAQAogCiBzdGF0aWMgaW5saW5lIGludCBsMmNhcF9jb25uZWN0X3JlcShzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiwgc3RydWN0IGwyY2FwX2NtZF9oZHIgKmNtZCwgdTggKmRhdGEpCiB7Ci0Jc3RydWN0IGwyY2FwX2NoYW5fbGlzdCAqbGlzdCA9ICZjb25uLT5jaGFuX2xpc3Q7CiAJc3RydWN0IGwyY2FwX2Nvbm5fcmVxICpyZXEgPSAoc3RydWN0IGwyY2FwX2Nvbm5fcmVxICopIGRhdGE7CiAJc3RydWN0IGwyY2FwX2Nvbm5fcnNwIHJzcDsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiA9IE5VTEwsICpwY2hhbjsKIAlzdHJ1Y3Qgc29jayAqcGFyZW50LCAqc2sgPSBOVUxMOwogCWludCByZXN1bHQsIHN0YXR1cyA9IEwyQ0FQX0NTX05PX0lORk87CiAKQEAgLTE5ODcsMTIgKzIwOTgsMTQgQEAKIAlCVF9EQkcoInBzbSAweCUyLjJ4IHNjaWQgMHglNC40eCIsIHBzbSwgc2NpZCk7CiAKIAkvKiBDaGVjayBpZiB3ZSBoYXZlIHNvY2tldCBsaXN0ZW5pbmcgb24gcHNtICovCi0JcGFyZW50ID0gbDJjYXBfZ2V0X3NvY2tfYnlfcHNtKEJUX0xJU1RFTiwgcHNtLCBjb25uLT5zcmMpOwotCWlmICghcGFyZW50KSB7CisJcGNoYW4gPSBsMmNhcF9nbG9iYWxfY2hhbl9ieV9wc20oQlRfTElTVEVOLCBwc20sIGNvbm4tPnNyYyk7CisJaWYgKCFwY2hhbikgewogCQlyZXN1bHQgPSBMMkNBUF9DUl9CQURfUFNNOwogCQlnb3RvIHNlbmRyZXNwOwogCX0KIAorCXBhcmVudCA9IHBjaGFuLT5zazsKKwogCWJoX2xvY2tfc29jayhwYXJlbnQpOwogCiAJLyogQ2hlY2sgaWYgdGhlIEFDTCBpcyBzZWN1cmUgZW5vdWdoIChpZiBub3QgU0RQKSAqLwpAQCAtMjAxNSwxMSArMjEyOCwxOSBAQAogCWlmICghc2spCiAJCWdvdG8gcmVzcG9uc2U7CiAKLQl3cml0ZV9sb2NrX2JoKCZsaXN0LT5sb2NrKTsKKwljaGFuID0gbDJjYXBfY2hhbl9jcmVhdGUoc2spOworCWlmICghY2hhbikgeworCQlsMmNhcF9zb2NrX2tpbGwoc2spOworCQlnb3RvIHJlc3BvbnNlOworCX0KKworCWwyY2FwX3BpKHNrKS0+Y2hhbiA9IGNoYW47CisKKwl3cml0ZV9sb2NrX2JoKCZjb25uLT5jaGFuX2xvY2spOwogCiAJLyogQ2hlY2sgaWYgd2UgYWxyZWFkeSBoYXZlIGNoYW5uZWwgd2l0aCB0aGF0IGRjaWQgKi8KLQlpZiAoX19sMmNhcF9nZXRfY2hhbl9ieV9kY2lkKGxpc3QsIHNjaWQpKSB7Ci0JCXdyaXRlX3VubG9ja19iaCgmbGlzdC0+bG9jayk7CisJaWYgKF9fbDJjYXBfZ2V0X2NoYW5fYnlfZGNpZChjb25uLCBzY2lkKSkgeworCQl3cml0ZV91bmxvY2tfYmgoJmNvbm4tPmNoYW5fbG9jayk7CiAJCXNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKTsKIAkJbDJjYXBfc29ja19raWxsKHNrKTsKIAkJZ290byByZXNwb25zZTsKQEAgLTIwMzAsMTggKzIxNTEsMjEgQEAKIAlsMmNhcF9zb2NrX2luaXQoc2ssIHBhcmVudCk7CiAJYmFjcHkoJmJ0X3NrKHNrKS0+c3JjLCBjb25uLT5zcmMpOwogCWJhY3B5KCZidF9zayhzayktPmRzdCwgY29ubi0+ZHN0KTsKLQlsMmNhcF9waShzayktPnBzbSAgPSBwc207Ci0JbDJjYXBfcGkoc2spLT5kY2lkID0gc2NpZDsKKwljaGFuLT5wc20gID0gcHNtOworCWNoYW4tPmRjaWQgPSBzY2lkOwogCi0JX19sMmNhcF9jaGFuX2FkZChjb25uLCBzaywgcGFyZW50KTsKLQlkY2lkID0gbDJjYXBfcGkoc2spLT5zY2lkOworCWJ0X2FjY2VwdF9lbnF1ZXVlKHBhcmVudCwgc2spOworCisJX19sMmNhcF9jaGFuX2FkZChjb25uLCBjaGFuKTsKKworCWRjaWQgPSBjaGFuLT5zY2lkOwogCiAJbDJjYXBfc29ja19zZXRfdGltZXIoc2ssIHNrLT5za19zbmR0aW1lbyk7CiAKLQlsMmNhcF9waShzayktPmlkZW50ID0gY21kLT5pZGVudDsKKwljaGFuLT5pZGVudCA9IGNtZC0+aWRlbnQ7CiAKIAlpZiAoY29ubi0+aW5mb19zdGF0ZSAmIEwyQ0FQX0lORk9fRkVBVF9NQVNLX1JFUV9ET05FKSB7Ci0JCWlmIChsMmNhcF9jaGVja19zZWN1cml0eShzaykpIHsKKwkJaWYgKGwyY2FwX2NoZWNrX3NlY3VyaXR5KGNoYW4pKSB7CiAJCQlpZiAoYnRfc2soc2spLT5kZWZlcl9zZXR1cCkgewogCQkJCXNrLT5za19zdGF0ZSA9IEJUX0NPTk5FQ1QyOwogCQkJCXJlc3VsdCA9IEwyQ0FQX0NSX1BFTkQ7CkBAIC0yMDYzLDcgKzIxODcsNyBAQAogCQlzdGF0dXMgPSBMMkNBUF9DU19OT19JTkZPOwogCX0KIAotCXdyaXRlX3VubG9ja19iaCgmbGlzdC0+bG9jayk7CisJd3JpdGVfdW5sb2NrX2JoKCZjb25uLT5jaGFuX2xvY2spOwogCiByZXNwb25zZToKIAliaF91bmxvY2tfc29jayhwYXJlbnQpOwpAQCAtMjA4OSwxMyArMjIxMywxMyBAQAogCQkJCQlMMkNBUF9JTkZPX1JFUSwgc2l6ZW9mKGluZm8pLCAmaW5mbyk7CiAJfQogCi0JaWYgKHNrICYmICEobDJjYXBfcGkoc2spLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9SRVFfU0VOVCkgJiYKKwlpZiAoY2hhbiAmJiAhKGNoYW4tPmNvbmZfc3RhdGUgJiBMMkNBUF9DT05GX1JFUV9TRU5UKSAmJgogCQkJCXJlc3VsdCA9PSBMMkNBUF9DUl9TVUNDRVNTKSB7CiAJCXU4IGJ1ZlsxMjhdOwotCQlsMmNhcF9waShzayktPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9SRVFfU0VOVDsKKwkJY2hhbi0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX1JFUV9TRU5UOwogCQlsMmNhcF9zZW5kX2NtZChjb25uLCBsMmNhcF9nZXRfaWRlbnQoY29ubiksIEwyQ0FQX0NPTkZfUkVRLAotCQkJCQlsMmNhcF9idWlsZF9jb25mX3JlcShzaywgYnVmKSwgYnVmKTsKLQkJbDJjYXBfcGkoc2spLT5udW1fY29uZl9yZXErKzsKKwkJCQkJbDJjYXBfYnVpbGRfY29uZl9yZXEoY2hhbiwgYnVmKSwgYnVmKTsKKwkJY2hhbi0+bnVtX2NvbmZfcmVxKys7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yMTA1LDYgKzIyMjksNyBAQAogewogCXN0cnVjdCBsMmNhcF9jb25uX3JzcCAqcnNwID0gKHN0cnVjdCBsMmNhcF9jb25uX3JzcCAqKSBkYXRhOwogCXUxNiBzY2lkLCBkY2lkLCByZXN1bHQsIHN0YXR1czsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbjsKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJdTggcmVxWzEyOF07CiAKQEAgLTIxMTYsMzQgKzIyNDEsMzYgQEAKIAlCVF9EQkcoImRjaWQgMHglNC40eCBzY2lkIDB4JTQuNHggcmVzdWx0IDB4JTIuMnggc3RhdHVzIDB4JTIuMngiLCBkY2lkLCBzY2lkLCByZXN1bHQsIHN0YXR1cyk7CiAKIAlpZiAoc2NpZCkgewotCQlzayA9IGwyY2FwX2dldF9jaGFuX2J5X3NjaWQoJmNvbm4tPmNoYW5fbGlzdCwgc2NpZCk7Ci0JCWlmICghc2spCisJCWNoYW4gPSBsMmNhcF9nZXRfY2hhbl9ieV9zY2lkKGNvbm4sIHNjaWQpOworCQlpZiAoIWNoYW4pCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAl9IGVsc2UgewotCQlzayA9IGwyY2FwX2dldF9jaGFuX2J5X2lkZW50KCZjb25uLT5jaGFuX2xpc3QsIGNtZC0+aWRlbnQpOwotCQlpZiAoIXNrKQorCQljaGFuID0gbDJjYXBfZ2V0X2NoYW5fYnlfaWRlbnQoY29ubiwgY21kLT5pZGVudCk7CisJCWlmICghY2hhbikKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KIAorCXNrID0gY2hhbi0+c2s7CisKIAlzd2l0Y2ggKHJlc3VsdCkgewogCWNhc2UgTDJDQVBfQ1JfU1VDQ0VTUzoKIAkJc2stPnNrX3N0YXRlID0gQlRfQ09ORklHOwotCQlsMmNhcF9waShzayktPmlkZW50ID0gMDsKLQkJbDJjYXBfcGkoc2spLT5kY2lkID0gZGNpZDsKLQkJbDJjYXBfcGkoc2spLT5jb25mX3N0YXRlICY9IH5MMkNBUF9DT05GX0NPTk5FQ1RfUEVORDsKKwkJY2hhbi0+aWRlbnQgPSAwOworCQljaGFuLT5kY2lkID0gZGNpZDsKKwkJY2hhbi0+Y29uZl9zdGF0ZSAmPSB+TDJDQVBfQ09ORl9DT05ORUNUX1BFTkQ7CiAKLQkJaWYgKGwyY2FwX3BpKHNrKS0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfUkVRX1NFTlQpCisJCWlmIChjaGFuLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9SRVFfU0VOVCkKIAkJCWJyZWFrOwogCi0JCWwyY2FwX3BpKHNrKS0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX1JFUV9TRU5UOworCQljaGFuLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfUkVRX1NFTlQ7CiAKIAkJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfZ2V0X2lkZW50KGNvbm4pLCBMMkNBUF9DT05GX1JFUSwKLQkJCQkJbDJjYXBfYnVpbGRfY29uZl9yZXEoc2ssIHJlcSksIHJlcSk7Ci0JCWwyY2FwX3BpKHNrKS0+bnVtX2NvbmZfcmVxKys7CisJCQkJCWwyY2FwX2J1aWxkX2NvbmZfcmVxKGNoYW4sIHJlcSksIHJlcSk7CisJCWNoYW4tPm51bV9jb25mX3JlcSsrOwogCQlicmVhazsKIAogCWNhc2UgTDJDQVBfQ1JfUEVORDoKLQkJbDJjYXBfcGkoc2spLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfQ09OTkVDVF9QRU5EOworCQljaGFuLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfQ09OTkVDVF9QRU5EOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0yMTU1LDcgKzIyODIsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlsMmNhcF9jaGFuX2RlbChzaywgRUNPTk5SRUZVU0VEKTsKKwkJbDJjYXBfY2hhbl9kZWwoY2hhbiwgRUNPTk5SRUZVU0VEKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0yMTYzLDE1ICsyMjkwLDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZGVmYXVsdF9mY3Moc3RydWN0IGwyY2FwX3BpbmZvICpwaSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZGVmYXVsdF9mY3Moc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4pCiB7CisJc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9IGwyY2FwX3BpKGNoYW4tPnNrKTsKKwogCS8qIEZDUyBpcyBlbmFibGVkIG9ubHkgaW4gRVJUTSBvciBzdHJlYW1pbmcgbW9kZSwgaWYgb25lIG9yIGJvdGgKIAkgKiBzaWRlcyByZXF1ZXN0IGl0LgogCSAqLwotCWlmIChwaS0+bW9kZSAhPSBMMkNBUF9NT0RFX0VSVE0gJiYgcGktPm1vZGUgIT0gTDJDQVBfTU9ERV9TVFJFQU1JTkcpCi0JCXBpLT5mY3MgPSBMMkNBUF9GQ1NfTk9ORTsKLQllbHNlIGlmICghKHBpLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9OT19GQ1NfUkVDVikpCi0JCXBpLT5mY3MgPSBMMkNBUF9GQ1NfQ1JDMTY7CisJaWYgKGNoYW4tPm1vZGUgIT0gTDJDQVBfTU9ERV9FUlRNICYmIGNoYW4tPm1vZGUgIT0gTDJDQVBfTU9ERV9TVFJFQU1JTkcpCisJCWNoYW4tPmZjcyA9IEwyQ0FQX0ZDU19OT05FOworCWVsc2UgaWYgKCEocGktPmNoYW4tPmNvbmZfc3RhdGUgJiBMMkNBUF9DT05GX05PX0ZDU19SRUNWKSkKKwkJY2hhbi0+ZmNzID0gTDJDQVBfRkNTX0NSQzE2OwogfQogCiBzdGF0aWMgaW5saW5lIGludCBsMmNhcF9jb25maWdfcmVxKHN0cnVjdCBsMmNhcF9jb25uICpjb25uLCBzdHJ1Y3QgbDJjYXBfY21kX2hkciAqY21kLCB1MTYgY21kX2xlbiwgdTggKmRhdGEpCkBAIC0yMTc5LDYgKzIzMDgsNyBAQAogCXN0cnVjdCBsMmNhcF9jb25mX3JlcSAqcmVxID0gKHN0cnVjdCBsMmNhcF9jb25mX3JlcSAqKSBkYXRhOwogCXUxNiBkY2lkLCBmbGFnczsKIAl1OCByc3BbNjRdOworCXN0cnVjdCBsMmNhcF9jaGFuICpjaGFuOwogCXN0cnVjdCBzb2NrICpzazsKIAlpbnQgbGVuOwogCkBAIC0yMTg3LDEwICsyMzE3LDEyIEBACiAKIAlCVF9EQkcoImRjaWQgMHglNC40eCBmbGFncyAweCUyLjJ4IiwgZGNpZCwgZmxhZ3MpOwogCi0Jc2sgPSBsMmNhcF9nZXRfY2hhbl9ieV9zY2lkKCZjb25uLT5jaGFuX2xpc3QsIGRjaWQpOwotCWlmICghc2spCisJY2hhbiA9IGwyY2FwX2dldF9jaGFuX2J5X3NjaWQoY29ubiwgZGNpZCk7CisJaWYgKCFjaGFuKQogCQlyZXR1cm4gLUVOT0VOVDsKIAorCXNrID0gY2hhbi0+c2s7CisKIAlpZiAoc2stPnNrX3N0YXRlICE9IEJUX0NPTkZJRykgewogCQlzdHJ1Y3QgbDJjYXBfY21kX3JlaiByZWo7CiAKQEAgLTIyMDIsNjIgKzIzMzQsNjIgQEAKIAogCS8qIFJlamVjdCBpZiBjb25maWcgYnVmZmVyIGlzIHRvbyBzbWFsbC4gKi8KIAlsZW4gPSBjbWRfbGVuIC0gc2l6ZW9mKCpyZXEpOwotCWlmIChsMmNhcF9waShzayktPmNvbmZfbGVuICsgbGVuID4gc2l6ZW9mKGwyY2FwX3BpKHNrKS0+Y29uZl9yZXEpKSB7CisJaWYgKGNoYW4tPmNvbmZfbGVuICsgbGVuID4gc2l6ZW9mKGNoYW4tPmNvbmZfcmVxKSkgewogCQlsMmNhcF9zZW5kX2NtZChjb25uLCBjbWQtPmlkZW50LCBMMkNBUF9DT05GX1JTUCwKLQkJCQlsMmNhcF9idWlsZF9jb25mX3JzcChzaywgcnNwLAorCQkJCWwyY2FwX2J1aWxkX2NvbmZfcnNwKGNoYW4sIHJzcCwKIAkJCQkJTDJDQVBfQ09ORl9SRUpFQ1QsIGZsYWdzKSwgcnNwKTsKIAkJZ290byB1bmxvY2s7CiAJfQogCiAJLyogU3RvcmUgY29uZmlnLiAqLwotCW1lbWNweShsMmNhcF9waShzayktPmNvbmZfcmVxICsgbDJjYXBfcGkoc2spLT5jb25mX2xlbiwgcmVxLT5kYXRhLCBsZW4pOwotCWwyY2FwX3BpKHNrKS0+Y29uZl9sZW4gKz0gbGVuOworCW1lbWNweShjaGFuLT5jb25mX3JlcSArIGNoYW4tPmNvbmZfbGVuLCByZXEtPmRhdGEsIGxlbik7CisJY2hhbi0+Y29uZl9sZW4gKz0gbGVuOwogCiAJaWYgKGZsYWdzICYgMHgwMDAxKSB7CiAJCS8qIEluY29tcGxldGUgY29uZmlnLiBTZW5kIGVtcHR5IHJlc3BvbnNlLiAqLwogCQlsMmNhcF9zZW5kX2NtZChjb25uLCBjbWQtPmlkZW50LCBMMkNBUF9DT05GX1JTUCwKLQkJCQlsMmNhcF9idWlsZF9jb25mX3JzcChzaywgcnNwLAorCQkJCWwyY2FwX2J1aWxkX2NvbmZfcnNwKGNoYW4sIHJzcCwKIAkJCQkJTDJDQVBfQ09ORl9TVUNDRVNTLCAweDAwMDEpLCByc3ApOwogCQlnb3RvIHVubG9jazsKIAl9CiAKIAkvKiBDb21wbGV0ZSBjb25maWcuICovCi0JbGVuID0gbDJjYXBfcGFyc2VfY29uZl9yZXEoc2ssIHJzcCk7CisJbGVuID0gbDJjYXBfcGFyc2VfY29uZl9yZXEoY2hhbiwgcnNwKTsKIAlpZiAobGVuIDwgMCkgewotCQlsMmNhcF9zZW5kX2Rpc2Nvbm5fcmVxKGNvbm4sIHNrLCBFQ09OTlJFU0VUKTsKKwkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShjb25uLCBjaGFuLCBFQ09OTlJFU0VUKTsKIAkJZ290byB1bmxvY2s7CiAJfQogCiAJbDJjYXBfc2VuZF9jbWQoY29ubiwgY21kLT5pZGVudCwgTDJDQVBfQ09ORl9SU1AsIGxlbiwgcnNwKTsKLQlsMmNhcF9waShzayktPm51bV9jb25mX3JzcCsrOworCWNoYW4tPm51bV9jb25mX3JzcCsrOwogCiAJLyogUmVzZXQgY29uZmlnIGJ1ZmZlci4gKi8KLQlsMmNhcF9waShzayktPmNvbmZfbGVuID0gMDsKKwljaGFuLT5jb25mX2xlbiA9IDA7CiAKLQlpZiAoIShsMmNhcF9waShzayktPmNvbmZfc3RhdGUgJiBMMkNBUF9DT05GX09VVFBVVF9ET05FKSkKKwlpZiAoIShjaGFuLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9PVVRQVVRfRE9ORSkpCiAJCWdvdG8gdW5sb2NrOwogCi0JaWYgKGwyY2FwX3BpKHNrKS0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfSU5QVVRfRE9ORSkgewotCQlzZXRfZGVmYXVsdF9mY3MobDJjYXBfcGkoc2spKTsKKwlpZiAoY2hhbi0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfSU5QVVRfRE9ORSkgeworCQlzZXRfZGVmYXVsdF9mY3MoY2hhbik7CiAKIAkJc2stPnNrX3N0YXRlID0gQlRfQ09OTkVDVEVEOwogCi0JCWwyY2FwX3BpKHNrKS0+bmV4dF90eF9zZXEgPSAwOwotCQlsMmNhcF9waShzayktPmV4cGVjdGVkX3R4X3NlcSA9IDA7Ci0JCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdChUWF9RVUVVRShzaykpOwotCQlpZiAobDJjYXBfcGkoc2spLT5tb2RlID09IEwyQ0FQX01PREVfRVJUTSkKLQkJCWwyY2FwX2VydG1faW5pdChzayk7CisJCWNoYW4tPm5leHRfdHhfc2VxID0gMDsKKwkJY2hhbi0+ZXhwZWN0ZWRfdHhfc2VxID0gMDsKKwkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmY2hhbi0+dHhfcSk7CisJCWlmIChjaGFuLT5tb2RlID09IEwyQ0FQX01PREVfRVJUTSkKKwkJCWwyY2FwX2VydG1faW5pdChjaGFuKTsKIAogCQlsMmNhcF9jaGFuX3JlYWR5KHNrKTsKIAkJZ290byB1bmxvY2s7CiAJfQogCi0JaWYgKCEobDJjYXBfcGkoc2spLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9SRVFfU0VOVCkpIHsKKwlpZiAoIShjaGFuLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9SRVFfU0VOVCkpIHsKIAkJdTggYnVmWzY0XTsKLQkJbDJjYXBfcGkoc2spLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfUkVRX1NFTlQ7CisJCWNoYW4tPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9SRVFfU0VOVDsKIAkJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfZ2V0X2lkZW50KGNvbm4pLCBMMkNBUF9DT05GX1JFUSwKLQkJCQkJbDJjYXBfYnVpbGRfY29uZl9yZXEoc2ssIGJ1ZiksIGJ1Zik7Ci0JCWwyY2FwX3BpKHNrKS0+bnVtX2NvbmZfcmVxKys7CisJCQkJCWwyY2FwX2J1aWxkX2NvbmZfcmVxKGNoYW4sIGJ1ZiksIGJ1Zik7CisJCWNoYW4tPm51bV9jb25mX3JlcSsrOwogCX0KIAogdW5sb2NrOgpAQCAtMjI2OSw2ICsyNDAxLDcgQEAKIHsKIAlzdHJ1Y3QgbDJjYXBfY29uZl9yc3AgKnJzcCA9IChzdHJ1Y3QgbDJjYXBfY29uZl9yc3AgKilkYXRhOwogCXUxNiBzY2lkLCBmbGFncywgcmVzdWx0OworCXN0cnVjdCBsMmNhcF9jaGFuICpjaGFuOwogCXN0cnVjdCBzb2NrICpzazsKIAlpbnQgbGVuID0gY21kLT5sZW4gLSBzaXplb2YoKnJzcCk7CiAKQEAgLTIyNzksMzYgKzI0MTIsMzggQEAKIAlCVF9EQkcoInNjaWQgMHglNC40eCBmbGFncyAweCUyLjJ4IHJlc3VsdCAweCUyLjJ4IiwKIAkJCXNjaWQsIGZsYWdzLCByZXN1bHQpOwogCi0Jc2sgPSBsMmNhcF9nZXRfY2hhbl9ieV9zY2lkKCZjb25uLT5jaGFuX2xpc3QsIHNjaWQpOwotCWlmICghc2spCisJY2hhbiA9IGwyY2FwX2dldF9jaGFuX2J5X3NjaWQoY29ubiwgc2NpZCk7CisJaWYgKCFjaGFuKQogCQlyZXR1cm4gMDsKIAorCXNrID0gY2hhbi0+c2s7CisKIAlzd2l0Y2ggKHJlc3VsdCkgewogCWNhc2UgTDJDQVBfQ09ORl9TVUNDRVNTOgotCQlsMmNhcF9jb25mX3JmY19nZXQoc2ssIHJzcC0+ZGF0YSwgbGVuKTsKKwkJbDJjYXBfY29uZl9yZmNfZ2V0KGNoYW4sIHJzcC0+ZGF0YSwgbGVuKTsKIAkJYnJlYWs7CiAKIAljYXNlIEwyQ0FQX0NPTkZfVU5BQ0NFUFQ6Ci0JCWlmIChsMmNhcF9waShzayktPm51bV9jb25mX3JzcCA8PSBMMkNBUF9DT05GX01BWF9DT05GX1JTUCkgeworCQlpZiAoY2hhbi0+bnVtX2NvbmZfcnNwIDw9IEwyQ0FQX0NPTkZfTUFYX0NPTkZfUlNQKSB7CiAJCQljaGFyIHJlcVs2NF07CiAKIAkJCWlmIChsZW4gPiBzaXplb2YocmVxKSAtIHNpemVvZihzdHJ1Y3QgbDJjYXBfY29uZl9yZXEpKSB7Ci0JCQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShjb25uLCBzaywgRUNPTk5SRVNFVCk7CisJCQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShjb25uLCBjaGFuLCBFQ09OTlJFU0VUKTsKIAkJCQlnb3RvIGRvbmU7CiAJCQl9CiAKIAkJCS8qIHRocm93IG91dCBhbnkgb2xkIHN0b3JlZCBjb25mIHJlcXVlc3RzICovCiAJCQlyZXN1bHQgPSBMMkNBUF9DT05GX1NVQ0NFU1M7Ci0JCQlsZW4gPSBsMmNhcF9wYXJzZV9jb25mX3JzcChzaywgcnNwLT5kYXRhLAotCQkJCQkJCWxlbiwgcmVxLCAmcmVzdWx0KTsKKwkJCWxlbiA9IGwyY2FwX3BhcnNlX2NvbmZfcnNwKGNoYW4sIHJzcC0+ZGF0YSwgbGVuLAorCQkJCQkJCQlyZXEsICZyZXN1bHQpOwogCQkJaWYgKGxlbiA8IDApIHsKLQkJCQlsMmNhcF9zZW5kX2Rpc2Nvbm5fcmVxKGNvbm4sIHNrLCBFQ09OTlJFU0VUKTsKKwkJCQlsMmNhcF9zZW5kX2Rpc2Nvbm5fcmVxKGNvbm4sIGNoYW4sIEVDT05OUkVTRVQpOwogCQkJCWdvdG8gZG9uZTsKIAkJCX0KIAogCQkJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfZ2V0X2lkZW50KGNvbm4pLAogCQkJCQkJTDJDQVBfQ09ORl9SRVEsIGxlbiwgcmVxKTsKLQkJCWwyY2FwX3BpKHNrKS0+bnVtX2NvbmZfcmVxKys7CisJCQljaGFuLT5udW1fY29uZl9yZXErKzsKIAkJCWlmIChyZXN1bHQgIT0gTDJDQVBfQ09ORl9TVUNDRVNTKQogCQkJCWdvdG8gZG9uZTsKIAkJCWJyZWFrOwpAQCAtMjMxNywyNCArMjQ1MiwyNCBAQAogCWRlZmF1bHQ6CiAJCXNrLT5za19lcnIgPSBFQ09OTlJFU0VUOwogCQlsMmNhcF9zb2NrX3NldF90aW1lcihzaywgSFogKiA1KTsKLQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShjb25uLCBzaywgRUNPTk5SRVNFVCk7CisJCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEoY29ubiwgY2hhbiwgRUNPTk5SRVNFVCk7CiAJCWdvdG8gZG9uZTsKIAl9CiAKIAlpZiAoZmxhZ3MgJiAweDAxKQogCQlnb3RvIGRvbmU7CiAKLQlsMmNhcF9waShzayktPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9JTlBVVF9ET05FOworCWNoYW4tPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9JTlBVVF9ET05FOwogCi0JaWYgKGwyY2FwX3BpKHNrKS0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfT1VUUFVUX0RPTkUpIHsKLQkJc2V0X2RlZmF1bHRfZmNzKGwyY2FwX3BpKHNrKSk7CisJaWYgKGNoYW4tPmNvbmZfc3RhdGUgJiBMMkNBUF9DT05GX09VVFBVVF9ET05FKSB7CisJCXNldF9kZWZhdWx0X2ZjcyhjaGFuKTsKIAogCQlzay0+c2tfc3RhdGUgPSBCVF9DT05ORUNURUQ7Ci0JCWwyY2FwX3BpKHNrKS0+bmV4dF90eF9zZXEgPSAwOwotCQlsMmNhcF9waShzayktPmV4cGVjdGVkX3R4X3NlcSA9IDA7Ci0JCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdChUWF9RVUVVRShzaykpOwotCQlpZiAobDJjYXBfcGkoc2spLT5tb2RlID09ICBMMkNBUF9NT0RFX0VSVE0pCi0JCQlsMmNhcF9lcnRtX2luaXQoc2spOworCQljaGFuLT5uZXh0X3R4X3NlcSA9IDA7CisJCWNoYW4tPmV4cGVjdGVkX3R4X3NlcSA9IDA7CisJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmNoYW4tPnR4X3EpOworCQlpZiAoY2hhbi0+bW9kZSA9PSAgTDJDQVBfTU9ERV9FUlRNKQorCQkJbDJjYXBfZXJ0bV9pbml0KGNoYW4pOwogCiAJCWwyY2FwX2NoYW5fcmVhZHkoc2spOwogCX0KQEAgLTIzNDksNiArMjQ4NCw3IEBACiAJc3RydWN0IGwyY2FwX2Rpc2Nvbm5fcmVxICpyZXEgPSAoc3RydWN0IGwyY2FwX2Rpc2Nvbm5fcmVxICopIGRhdGE7CiAJc3RydWN0IGwyY2FwX2Rpc2Nvbm5fcnNwIHJzcDsKIAl1MTYgZGNpZCwgc2NpZDsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbjsKIAlzdHJ1Y3Qgc29jayAqc2s7CiAKIAlzY2lkID0gX19sZTE2X3RvX2NwdShyZXEtPnNjaWQpOwpAQCAtMjM1NiwxMiArMjQ5MiwxNCBAQAogCiAJQlRfREJHKCJzY2lkIDB4JTQuNHggZGNpZCAweCU0LjR4Iiwgc2NpZCwgZGNpZCk7CiAKLQlzayA9IGwyY2FwX2dldF9jaGFuX2J5X3NjaWQoJmNvbm4tPmNoYW5fbGlzdCwgZGNpZCk7Ci0JaWYgKCFzaykKKwljaGFuID0gbDJjYXBfZ2V0X2NoYW5fYnlfc2NpZChjb25uLCBkY2lkKTsKKwlpZiAoIWNoYW4pCiAJCXJldHVybiAwOwogCi0JcnNwLmRjaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPnNjaWQpOwotCXJzcC5zY2lkID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5kY2lkKTsKKwlzayA9IGNoYW4tPnNrOworCisJcnNwLmRjaWQgPSBjcHVfdG9fbGUxNihjaGFuLT5zY2lkKTsKKwlyc3Auc2NpZCA9IGNwdV90b19sZTE2KGNoYW4tPmRjaWQpOwogCWwyY2FwX3NlbmRfY21kKGNvbm4sIGNtZC0+aWRlbnQsIEwyQ0FQX0RJU0NPTk5fUlNQLCBzaXplb2YocnNwKSwgJnJzcCk7CiAKIAlzay0+c2tfc2h1dGRvd24gPSBTSFVURE9XTl9NQVNLOwpAQCAtMjM3NSw3ICsyNTEzLDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JbDJjYXBfY2hhbl9kZWwoc2ssIEVDT05OUkVTRVQpOworCWwyY2FwX2NoYW5fZGVsKGNoYW4sIEVDT05OUkVTRVQpOwogCWJoX3VubG9ja19zb2NrKHNrKTsKIAogCWwyY2FwX3NvY2tfa2lsbChzayk7CkBAIC0yMzg2LDYgKzI1MjQsNyBAQAogewogCXN0cnVjdCBsMmNhcF9kaXNjb25uX3JzcCAqcnNwID0gKHN0cnVjdCBsMmNhcF9kaXNjb25uX3JzcCAqKSBkYXRhOwogCXUxNiBkY2lkLCBzY2lkOworCXN0cnVjdCBsMmNhcF9jaGFuICpjaGFuOwogCXN0cnVjdCBzb2NrICpzazsKIAogCXNjaWQgPSBfX2xlMTZfdG9fY3B1KHJzcC0+c2NpZCk7CkBAIC0yMzkzLDEwICsyNTMyLDEyIEBACiAKIAlCVF9EQkcoImRjaWQgMHglNC40eCBzY2lkIDB4JTQuNHgiLCBkY2lkLCBzY2lkKTsKIAotCXNrID0gbDJjYXBfZ2V0X2NoYW5fYnlfc2NpZCgmY29ubi0+Y2hhbl9saXN0LCBzY2lkKTsKLQlpZiAoIXNrKQorCWNoYW4gPSBsMmNhcF9nZXRfY2hhbl9ieV9zY2lkKGNvbm4sIHNjaWQpOworCWlmICghY2hhbikKIAkJcmV0dXJuIDA7CiAKKwlzayA9IGNoYW4tPnNrOworCiAJLyogZG9uJ3QgZGVsZXRlIGwyY2FwIGNoYW5uZWwgaWYgc2sgaXMgb3duZWQgYnkgdXNlciAqLwogCWlmIChzb2NrX293bmVkX2J5X3VzZXIoc2spKSB7CiAJCXNrLT5za19zdGF0ZSA9IEJUX0RJU0NPTk47CkBAIC0yNDA2LDcgKzI1NDcsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlsMmNhcF9jaGFuX2RlbChzaywgMCk7CisJbDJjYXBfY2hhbl9kZWwoY2hhbiwgMCk7CiAJYmhfdW5sb2NrX3NvY2soc2spOwogCiAJbDJjYXBfc29ja19raWxsKHNrKTsKQEAgLTI0NjMsNiArMjYwNCwxMSBAQAogCiAJQlRfREJHKCJ0eXBlIDB4JTQuNHggcmVzdWx0IDB4JTIuMngiLCB0eXBlLCByZXN1bHQpOwogCisJLyogTDJDQVAgSW5mbyByZXEvcnNwIGFyZSB1bmJvdW5kIHRvIGNoYW5uZWxzLCBhZGQgZXh0cmEgY2hlY2tzICovCisJaWYgKGNtZC0+aWRlbnQgIT0gY29ubi0+aW5mb19pZGVudCB8fAorCQkJY29ubi0+aW5mb19zdGF0ZSAmIEwyQ0FQX0lORk9fRkVBVF9NQVNLX1JFUV9ET05FKQorCQlyZXR1cm4gMDsKKwogCWRlbF90aW1lcigmY29ubi0+aW5mb190aW1lcik7CiAKIAlpZiAocmVzdWx0ICE9IEwyQ0FQX0lSX1NVQ0NFU1MpIHsKQEAgLTI2NzMsNyArMjgxOSw4IEBACiAKIAkJaWYgKGVycikgewogCQkJc3RydWN0IGwyY2FwX2NtZF9yZWogcmVqOwotCQkJQlRfREJHKCJlcnJvciAlZCIsIGVycik7CisKKwkJCUJUX0VSUigiV3JvbmcgbGluayB0eXBlICglZCkiLCBlcnIpOwogCiAJCQkvKiBGSVhNRTogTWFwIGVyciB0byBhIHZhbGlkIHJlYXNvbiAqLwogCQkJcmVqLnJlYXNvbiA9IGNwdV90b19sZTE2KDApOwpAQCAtMjY4NywxMiArMjgzNCwxMiBAQAogCWtmcmVlX3NrYihza2IpOwogfQogCi1zdGF0aWMgaW50IGwyY2FwX2NoZWNrX2ZjcyhzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpLCAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgbDJjYXBfY2hlY2tfZmNzKHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAl1MTYgb3VyX2ZjcywgcmN2X2ZjczsKIAlpbnQgaGRyX3NpemUgPSBMMkNBUF9IRFJfU0laRSArIDI7CiAKLQlpZiAocGktPmZjcyA9PSBMMkNBUF9GQ1NfQ1JDMTYpIHsKKwlpZiAoY2hhbi0+ZmNzID09IEwyQ0FQX0ZDU19DUkMxNikgewogCQlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gMik7CiAJCXJjdl9mY3MgPSBnZXRfdW5hbGlnbmVkX2xlMTYoc2tiLT5kYXRhICsgc2tiLT5sZW4pOwogCQlvdXJfZmNzID0gY3JjMTYoMCwgc2tiLT5kYXRhIC0gaGRyX3NpemUsIHNrYi0+bGVuICsgaGRyX3NpemUpOwpAQCAtMjcwMyw0OSArMjg1MCw0NyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbDJjYXBfc2VuZF9pX29yX3JyX29yX3JucihzdHJ1Y3Qgc29jayAqc2spCitzdGF0aWMgaW5saW5lIHZvaWQgbDJjYXBfc2VuZF9pX29yX3JyX29yX3JucihzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbikKIHsKLQlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOwogCXUxNiBjb250cm9sID0gMDsKIAotCXBpLT5mcmFtZXNfc2VudCA9IDA7CisJY2hhbi0+ZnJhbWVzX3NlbnQgPSAwOwogCi0JY29udHJvbCB8PSBwaS0+YnVmZmVyX3NlcSA8PCBMMkNBUF9DVFJMX1JFUVNFUV9TSElGVDsKKwljb250cm9sIHw9IGNoYW4tPmJ1ZmZlcl9zZXEgPDwgTDJDQVBfQ1RSTF9SRVFTRVFfU0hJRlQ7CiAKLQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX0xPQ0FMX0JVU1kpIHsKKwlpZiAoY2hhbi0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fTE9DQUxfQlVTWSkgewogCQljb250cm9sIHw9IEwyQ0FQX1NVUEVSX1JDVl9OT1RfUkVBRFk7Ci0JCWwyY2FwX3NlbmRfc2ZyYW1lKHBpLCBjb250cm9sKTsKLQkJcGktPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9STlJfU0VOVDsKKwkJbDJjYXBfc2VuZF9zZnJhbWUoY2hhbiwgY29udHJvbCk7CisJCWNoYW4tPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9STlJfU0VOVDsKIAl9CiAKLQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1JFTU9URV9CVVNZKQotCQlsMmNhcF9yZXRyYW5zbWl0X2ZyYW1lcyhzayk7CisJaWYgKGNoYW4tPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1JFTU9URV9CVVNZKQorCQlsMmNhcF9yZXRyYW5zbWl0X2ZyYW1lcyhjaGFuKTsKIAotCWwyY2FwX2VydG1fc2VuZChzayk7CisJbDJjYXBfZXJ0bV9zZW5kKGNoYW4pOwogCi0JaWYgKCEocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX0xPQ0FMX0JVU1kpICYmCi0JCQlwaS0+ZnJhbWVzX3NlbnQgPT0gMCkgeworCWlmICghKGNoYW4tPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX0xPQ0FMX0JVU1kpICYmCisJCQljaGFuLT5mcmFtZXNfc2VudCA9PSAwKSB7CiAJCWNvbnRyb2wgfD0gTDJDQVBfU1VQRVJfUkNWX1JFQURZOwotCQlsMmNhcF9zZW5kX3NmcmFtZShwaSwgY29udHJvbCk7CisJCWwyY2FwX3NlbmRfc2ZyYW1lKGNoYW4sIGNvbnRyb2wpOwogCX0KIH0KIAotc3RhdGljIGludCBsMmNhcF9hZGRfdG9fc3Jlal9xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIHU4IHR4X3NlcSwgdTggc2FyKQorc3RhdGljIGludCBsMmNhcF9hZGRfdG9fc3Jlal9xdWV1ZShzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggdHhfc2VxLCB1OCBzYXIpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKm5leHRfc2tiOwotCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CiAJaW50IHR4X3NlcV9vZmZzZXQsIG5leHRfdHhfc2VxX29mZnNldDsKIAogCWJ0X2NiKHNrYiktPnR4X3NlcSA9IHR4X3NlcTsKIAlidF9jYihza2IpLT5zYXIgPSBzYXI7CiAKLQluZXh0X3NrYiA9IHNrYl9wZWVrKFNSRUpfUVVFVUUoc2spKTsKKwluZXh0X3NrYiA9IHNrYl9wZWVrKCZjaGFuLT5zcmVqX3EpOwogCWlmICghbmV4dF9za2IpIHsKLQkJX19za2JfcXVldWVfdGFpbChTUkVKX1FVRVVFKHNrKSwgc2tiKTsKKwkJX19za2JfcXVldWVfdGFpbCgmY2hhbi0+c3Jlal9xLCBza2IpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQl0eF9zZXFfb2Zmc2V0ID0gKHR4X3NlcSAtIHBpLT5idWZmZXJfc2VxKSAlIDY0OworCXR4X3NlcV9vZmZzZXQgPSAodHhfc2VxIC0gY2hhbi0+YnVmZmVyX3NlcSkgJSA2NDsKIAlpZiAodHhfc2VxX29mZnNldCA8IDApCiAJCXR4X3NlcV9vZmZzZXQgKz0gNjQ7CiAKQEAgLTI3NTQsNTMgKzI4OTksNTIgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCW5leHRfdHhfc2VxX29mZnNldCA9IChidF9jYihuZXh0X3NrYiktPnR4X3NlcSAtCi0JCQkJCQlwaS0+YnVmZmVyX3NlcSkgJSA2NDsKKwkJCQkJCWNoYW4tPmJ1ZmZlcl9zZXEpICUgNjQ7CiAJCWlmIChuZXh0X3R4X3NlcV9vZmZzZXQgPCAwKQogCQkJbmV4dF90eF9zZXFfb2Zmc2V0ICs9IDY0OwogCiAJCWlmIChuZXh0X3R4X3NlcV9vZmZzZXQgPiB0eF9zZXFfb2Zmc2V0KSB7Ci0JCQlfX3NrYl9xdWV1ZV9iZWZvcmUoU1JFSl9RVUVVRShzayksIG5leHRfc2tiLCBza2IpOworCQkJX19za2JfcXVldWVfYmVmb3JlKCZjaGFuLT5zcmVqX3EsIG5leHRfc2tiLCBza2IpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAotCQlpZiAoc2tiX3F1ZXVlX2lzX2xhc3QoU1JFSl9RVUVVRShzayksIG5leHRfc2tiKSkKKwkJaWYgKHNrYl9xdWV1ZV9pc19sYXN0KCZjaGFuLT5zcmVqX3EsIG5leHRfc2tiKSkKIAkJCWJyZWFrOwogCi0JfSB3aGlsZSAoKG5leHRfc2tiID0gc2tiX3F1ZXVlX25leHQoU1JFSl9RVUVVRShzayksIG5leHRfc2tiKSkpOworCX0gd2hpbGUgKChuZXh0X3NrYiA9IHNrYl9xdWV1ZV9uZXh0KCZjaGFuLT5zcmVqX3EsIG5leHRfc2tiKSkpOwogCi0JX19za2JfcXVldWVfdGFpbChTUkVKX1FVRVVFKHNrKSwgc2tiKTsKKwlfX3NrYl9xdWV1ZV90YWlsKCZjaGFuLT5zcmVqX3EsIHNrYik7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBsMmNhcF9lcnRtX3JlYXNzZW1ibHlfc2R1KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IGNvbnRyb2wpCitzdGF0aWMgaW50IGwyY2FwX2VydG1fcmVhc3NlbWJseV9zZHUoc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IsIHUxNiBjb250cm9sKQogewotCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CiAJc3RydWN0IHNrX2J1ZmYgKl9za2I7CiAJaW50IGVycjsKIAogCXN3aXRjaCAoY29udHJvbCAmIEwyQ0FQX0NUUkxfU0FSKSB7CiAJY2FzZSBMMkNBUF9TRFVfVU5TRUdNRU5URUQ6Ci0JCWlmIChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fU0FSX1NEVSkKKwkJaWYgKGNoYW4tPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NBUl9TRFUpCiAJCQlnb3RvIGRyb3A7CiAKLQkJZXJyID0gc29ja19xdWV1ZV9yY3Zfc2tiKHNrLCBza2IpOworCQllcnIgPSBzb2NrX3F1ZXVlX3Jjdl9za2IoY2hhbi0+c2ssIHNrYik7CiAJCWlmICghZXJyKQogCQkJcmV0dXJuIGVycjsKIAogCQlicmVhazsKIAogCWNhc2UgTDJDQVBfU0RVX1NUQVJUOgotCQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NBUl9TRFUpCisJCWlmIChjaGFuLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TQVJfU0RVKQogCQkJZ290byBkcm9wOwogCi0JCXBpLT5zZHVfbGVuID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHNrYi0+ZGF0YSk7CisJCWNoYW4tPnNkdV9sZW4gPSBnZXRfdW5hbGlnbmVkX2xlMTYoc2tiLT5kYXRhKTsKIAotCQlpZiAocGktPnNkdV9sZW4gPiBwaS0+aW10dSkKKwkJaWYgKGNoYW4tPnNkdV9sZW4gPiBjaGFuLT5pbXR1KQogCQkJZ290byBkaXNjb25uZWN0OwogCi0JCXBpLT5zZHUgPSBidF9za2JfYWxsb2MocGktPnNkdV9sZW4sIEdGUF9BVE9NSUMpOwotCQlpZiAoIXBpLT5zZHUpCisJCWNoYW4tPnNkdSA9IGJ0X3NrYl9hbGxvYyhjaGFuLT5zZHVfbGVuLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFjaGFuLT5zZHUpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAogCQkvKiBwdWxsIHNkdV9sZW4gYnl0ZXMgb25seSBhZnRlciBhbGxvYywgYmVjYXVzZSBvZiBMb2NhbCBCdXN5CkBAIC0yODA4LDYzICsyOTUyLDYzIEBACiAJCSAqIG9ubHkgb25jZSwgaS5lLiwgd2hlbiBhbGxvYyBkb2VzIG5vdCBmYWlsICovCiAJCXNrYl9wdWxsKHNrYiwgMik7CiAKLQkJbWVtY3B5KHNrYl9wdXQocGktPnNkdSwgc2tiLT5sZW4pLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwkJbWVtY3B5KHNrYl9wdXQoY2hhbi0+c2R1LCBza2ItPmxlbiksIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwogCi0JCXBpLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fU0FSX1NEVTsKLQkJcGktPnBhcnRpYWxfc2R1X2xlbiA9IHNrYi0+bGVuOworCQljaGFuLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fU0FSX1NEVTsKKwkJY2hhbi0+cGFydGlhbF9zZHVfbGVuID0gc2tiLT5sZW47CiAJCWJyZWFrOwogCiAJY2FzZSBMMkNBUF9TRFVfQ09OVElOVUU6Ci0JCWlmICghKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TQVJfU0RVKSkKKwkJaWYgKCEoY2hhbi0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fU0FSX1NEVSkpCiAJCQlnb3RvIGRpc2Nvbm5lY3Q7CiAKLQkJaWYgKCFwaS0+c2R1KQorCQlpZiAoIWNoYW4tPnNkdSkKIAkJCWdvdG8gZGlzY29ubmVjdDsKIAotCQlwaS0+cGFydGlhbF9zZHVfbGVuICs9IHNrYi0+bGVuOwotCQlpZiAocGktPnBhcnRpYWxfc2R1X2xlbiA+IHBpLT5zZHVfbGVuKQorCQljaGFuLT5wYXJ0aWFsX3NkdV9sZW4gKz0gc2tiLT5sZW47CisJCWlmIChjaGFuLT5wYXJ0aWFsX3NkdV9sZW4gPiBjaGFuLT5zZHVfbGVuKQogCQkJZ290byBkcm9wOwogCi0JCW1lbWNweShza2JfcHV0KHBpLT5zZHUsIHNrYi0+bGVuKSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJCW1lbWNweShza2JfcHV0KGNoYW4tPnNkdSwgc2tiLT5sZW4pLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKIAogCQlicmVhazsKIAogCWNhc2UgTDJDQVBfU0RVX0VORDoKLQkJaWYgKCEocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NBUl9TRFUpKQorCQlpZiAoIShjaGFuLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TQVJfU0RVKSkKIAkJCWdvdG8gZGlzY29ubmVjdDsKIAotCQlpZiAoIXBpLT5zZHUpCisJCWlmICghY2hhbi0+c2R1KQogCQkJZ290byBkaXNjb25uZWN0OwogCi0JCWlmICghKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TQVJfUkVUUlkpKSB7Ci0JCQlwaS0+cGFydGlhbF9zZHVfbGVuICs9IHNrYi0+bGVuOworCQlpZiAoIShjaGFuLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TQVJfUkVUUlkpKSB7CisJCQljaGFuLT5wYXJ0aWFsX3NkdV9sZW4gKz0gc2tiLT5sZW47CiAKLQkJCWlmIChwaS0+cGFydGlhbF9zZHVfbGVuID4gcGktPmltdHUpCisJCQlpZiAoY2hhbi0+cGFydGlhbF9zZHVfbGVuID4gY2hhbi0+aW10dSkKIAkJCQlnb3RvIGRyb3A7CiAKLQkJCWlmIChwaS0+cGFydGlhbF9zZHVfbGVuICE9IHBpLT5zZHVfbGVuKQorCQkJaWYgKGNoYW4tPnBhcnRpYWxfc2R1X2xlbiAhPSBjaGFuLT5zZHVfbGVuKQogCQkJCWdvdG8gZHJvcDsKIAotCQkJbWVtY3B5KHNrYl9wdXQocGktPnNkdSwgc2tiLT5sZW4pLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwkJCW1lbWNweShza2JfcHV0KGNoYW4tPnNkdSwgc2tiLT5sZW4pLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKIAkJfQogCi0JCV9za2IgPSBza2JfY2xvbmUocGktPnNkdSwgR0ZQX0FUT01JQyk7CisJCV9za2IgPSBza2JfY2xvbmUoY2hhbi0+c2R1LCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFfc2tiKSB7Ci0JCQlwaS0+Y29ubl9zdGF0ZSB8PSBMMkNBUF9DT05OX1NBUl9SRVRSWTsKKwkJCWNoYW4tPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9TQVJfUkVUUlk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCi0JCWVyciA9IHNvY2tfcXVldWVfcmN2X3NrYihzaywgX3NrYik7CisJCWVyciA9IHNvY2tfcXVldWVfcmN2X3NrYihjaGFuLT5zaywgX3NrYik7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlrZnJlZV9za2IoX3NrYik7Ci0JCQlwaS0+Y29ubl9zdGF0ZSB8PSBMMkNBUF9DT05OX1NBUl9SRVRSWTsKKwkJCWNoYW4tPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9TQVJfUkVUUlk7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAKLQkJcGktPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fU0FSX1JFVFJZOwotCQlwaS0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9TQVJfU0RVOworCQljaGFuLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1NBUl9SRVRSWTsKKwkJY2hhbi0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9TQVJfU0RVOwogCi0JCWtmcmVlX3NrYihwaS0+c2R1KTsKKwkJa2ZyZWVfc2tiKGNoYW4tPnNkdSk7CiAJCWJyZWFrOwogCX0KIApAQCAtMjg3Miw1MSArMzAxNiw1MCBAQAogCXJldHVybiAwOwogCiBkcm9wOgotCWtmcmVlX3NrYihwaS0+c2R1KTsKLQlwaS0+c2R1ID0gTlVMTDsKKwlrZnJlZV9za2IoY2hhbi0+c2R1KTsKKwljaGFuLT5zZHUgPSBOVUxMOwogCiBkaXNjb25uZWN0OgotCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEocGktPmNvbm4sIHNrLCBFQ09OTlJFU0VUKTsKKwlsMmNhcF9zZW5kX2Rpc2Nvbm5fcmVxKGNoYW4tPmNvbm4sIGNoYW4sIEVDT05OUkVTRVQpOwogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGwyY2FwX3RyeV9wdXNoX3J4X3NrYihzdHJ1Y3Qgc29jayAqc2spCitzdGF0aWMgaW50IGwyY2FwX3RyeV9wdXNoX3J4X3NrYihzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbikKIHsKLQlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJdTE2IGNvbnRyb2w7CiAJaW50IGVycjsKIAotCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoQlVTWV9RVUVVRShzaykpKSkgeworCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmNoYW4tPmJ1c3lfcSkpKSB7CiAJCWNvbnRyb2wgPSBidF9jYihza2IpLT5zYXIgPDwgTDJDQVBfQ1RSTF9TQVJfU0hJRlQ7Ci0JCWVyciA9IGwyY2FwX2VydG1fcmVhc3NlbWJseV9zZHUoc2ssIHNrYiwgY29udHJvbCk7CisJCWVyciA9IGwyY2FwX2VydG1fcmVhc3NlbWJseV9zZHUoY2hhbiwgc2tiLCBjb250cm9sKTsKIAkJaWYgKGVyciA8IDApIHsKLQkJCXNrYl9xdWV1ZV9oZWFkKEJVU1lfUVVFVUUoc2spLCBza2IpOworCQkJc2tiX3F1ZXVlX2hlYWQoJmNoYW4tPmJ1c3lfcSwgc2tiKTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAotCQlwaS0+YnVmZmVyX3NlcSA9IChwaS0+YnVmZmVyX3NlcSArIDEpICUgNjQ7CisJCWNoYW4tPmJ1ZmZlcl9zZXEgPSAoY2hhbi0+YnVmZmVyX3NlcSArIDEpICUgNjQ7CiAJfQogCi0JaWYgKCEocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1JOUl9TRU5UKSkKKwlpZiAoIShjaGFuLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9STlJfU0VOVCkpCiAJCWdvdG8gZG9uZTsKIAotCWNvbnRyb2wgPSBwaS0+YnVmZmVyX3NlcSA8PCBMMkNBUF9DVFJMX1JFUVNFUV9TSElGVDsKKwljb250cm9sID0gY2hhbi0+YnVmZmVyX3NlcSA8PCBMMkNBUF9DVFJMX1JFUVNFUV9TSElGVDsKIAljb250cm9sIHw9IEwyQ0FQX1NVUEVSX1JDVl9SRUFEWSB8IEwyQ0FQX0NUUkxfUE9MTDsKLQlsMmNhcF9zZW5kX3NmcmFtZShwaSwgY29udHJvbCk7Ci0JbDJjYXBfcGkoc2spLT5yZXRyeV9jb3VudCA9IDE7CisJbDJjYXBfc2VuZF9zZnJhbWUoY2hhbiwgY29udHJvbCk7CisJY2hhbi0+cmV0cnlfY291bnQgPSAxOwogCi0JZGVsX3RpbWVyKCZwaS0+cmV0cmFuc190aW1lcik7CisJZGVsX3RpbWVyKCZjaGFuLT5yZXRyYW5zX3RpbWVyKTsKIAlfX21vZF9tb25pdG9yX3RpbWVyKCk7CiAKLQlsMmNhcF9waShzayktPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9XQUlUX0Y7CisJY2hhbi0+Y29ubl9zdGF0ZSB8PSBMMkNBUF9DT05OX1dBSVRfRjsKIAogZG9uZToKLQlwaS0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9MT0NBTF9CVVNZOwotCXBpLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1JOUl9TRU5UOworCWNoYW4tPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fTE9DQUxfQlVTWTsKKwljaGFuLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1JOUl9TRU5UOwogCi0JQlRfREJHKCJzayAlcCwgRXhpdCBsb2NhbCBidXN5Iiwgc2spOworCUJUX0RCRygiY2hhbiAlcCwgRXhpdCBsb2NhbCBidXN5IiwgY2hhbik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI5MjQsMjEgKzMwNjcsMjEgQEAKIHN0YXRpYyB2b2lkIGwyY2FwX2J1c3lfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0Jc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbDJjYXBfcGluZm8sIGJ1c3lfd29yayk7Ci0Jc3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopcGk7CisJc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4gPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGwyY2FwX2NoYW4sIGJ1c3lfd29yayk7CisJc3RydWN0IHNvY2sgKnNrID0gY2hhbi0+c2s7CiAJaW50IG5fdHJpZXMgPSAwLCB0aW1lbyA9IEhaLzUsIGVycjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJbG9ja19zb2NrKHNrKTsKIAogCWFkZF93YWl0X3F1ZXVlKHNrX3NsZWVwKHNrKSwgJndhaXQpOwotCXdoaWxlICgoc2tiID0gc2tiX3BlZWsoQlVTWV9RVUVVRShzaykpKSkgeworCXdoaWxlICgoc2tiID0gc2tiX3BlZWsoJmNoYW4tPmJ1c3lfcSkpKSB7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAKIAkJaWYgKG5fdHJpZXMrKyA+IEwyQ0FQX0xPQ0FMX0JVU1lfVFJJRVMpIHsKIAkJCWVyciA9IC1FQlVTWTsKLQkJCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEocGktPmNvbm4sIHNrLCBFQlVTWSk7CisJCQlsMmNhcF9zZW5kX2Rpc2Nvbm5fcmVxKGNoYW4tPmNvbm4sIGNoYW4sIEVCVVNZKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTI5NTgsNyArMzEwMSw3IEBACiAJCWlmIChlcnIpCiAJCQlicmVhazsKIAotCQlpZiAobDJjYXBfdHJ5X3B1c2hfcnhfc2tiKHNrKSA9PSAwKQorCQlpZiAobDJjYXBfdHJ5X3B1c2hfcnhfc2tiKGNoYW4pID09IDApCiAJCQlicmVhazsKIAl9CiAKQEAgLTI5NjgsNDggKzMxMTEsNDYgQEAKIAlyZWxlYXNlX3NvY2soc2spOwogfQogCi1zdGF0aWMgaW50IGwyY2FwX3B1c2hfcnhfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IGNvbnRyb2wpCitzdGF0aWMgaW50IGwyY2FwX3B1c2hfcnhfc2tiKHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgY29udHJvbCkKIHsKLQlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOwogCWludCBzY3RybCwgZXJyOwogCi0JaWYgKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9MT0NBTF9CVVNZKSB7CisJaWYgKGNoYW4tPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX0xPQ0FMX0JVU1kpIHsKIAkJYnRfY2Ioc2tiKS0+c2FyID0gY29udHJvbCA+PiBMMkNBUF9DVFJMX1NBUl9TSElGVDsKLQkJX19za2JfcXVldWVfdGFpbChCVVNZX1FVRVVFKHNrKSwgc2tiKTsKLQkJcmV0dXJuIGwyY2FwX3RyeV9wdXNoX3J4X3NrYihzayk7CisJCV9fc2tiX3F1ZXVlX3RhaWwoJmNoYW4tPmJ1c3lfcSwgc2tiKTsKKwkJcmV0dXJuIGwyY2FwX3RyeV9wdXNoX3J4X3NrYihjaGFuKTsKIAogCiAJfQogCi0JZXJyID0gbDJjYXBfZXJ0bV9yZWFzc2VtYmx5X3NkdShzaywgc2tiLCBjb250cm9sKTsKKwllcnIgPSBsMmNhcF9lcnRtX3JlYXNzZW1ibHlfc2R1KGNoYW4sIHNrYiwgY29udHJvbCk7CiAJaWYgKGVyciA+PSAwKSB7Ci0JCXBpLT5idWZmZXJfc2VxID0gKHBpLT5idWZmZXJfc2VxICsgMSkgJSA2NDsKKwkJY2hhbi0+YnVmZmVyX3NlcSA9IChjaGFuLT5idWZmZXJfc2VxICsgMSkgJSA2NDsKIAkJcmV0dXJuIGVycjsKIAl9CiAKIAkvKiBCdXN5IENvbmRpdGlvbiAqLwotCUJUX0RCRygic2sgJXAsIEVudGVyIGxvY2FsIGJ1c3kiLCBzayk7CisJQlRfREJHKCJjaGFuICVwLCBFbnRlciBsb2NhbCBidXN5IiwgY2hhbik7CiAKLQlwaS0+Y29ubl9zdGF0ZSB8PSBMMkNBUF9DT05OX0xPQ0FMX0JVU1k7CisJY2hhbi0+Y29ubl9zdGF0ZSB8PSBMMkNBUF9DT05OX0xPQ0FMX0JVU1k7CiAJYnRfY2Ioc2tiKS0+c2FyID0gY29udHJvbCA+PiBMMkNBUF9DVFJMX1NBUl9TSElGVDsKLQlfX3NrYl9xdWV1ZV90YWlsKEJVU1lfUVVFVUUoc2spLCBza2IpOworCV9fc2tiX3F1ZXVlX3RhaWwoJmNoYW4tPmJ1c3lfcSwgc2tiKTsKIAotCXNjdHJsID0gcGktPmJ1ZmZlcl9zZXEgPDwgTDJDQVBfQ1RSTF9SRVFTRVFfU0hJRlQ7CisJc2N0cmwgPSBjaGFuLT5idWZmZXJfc2VxIDw8IEwyQ0FQX0NUUkxfUkVRU0VRX1NISUZUOwogCXNjdHJsIHw9IEwyQ0FQX1NVUEVSX1JDVl9OT1RfUkVBRFk7Ci0JbDJjYXBfc2VuZF9zZnJhbWUocGksIHNjdHJsKTsKKwlsMmNhcF9zZW5kX3NmcmFtZShjaGFuLCBzY3RybCk7CiAKLQlwaS0+Y29ubl9zdGF0ZSB8PSBMMkNBUF9DT05OX1JOUl9TRU5UOworCWNoYW4tPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9STlJfU0VOVDsKIAotCWRlbF90aW1lcigmcGktPmFja190aW1lcik7CisJZGVsX3RpbWVyKCZjaGFuLT5hY2tfdGltZXIpOwogCi0JcXVldWVfd29yayhfYnVzeV93cSwgJnBpLT5idXN5X3dvcmspOworCXF1ZXVlX3dvcmsoX2J1c3lfd3EsICZjaGFuLT5idXN5X3dvcmspOwogCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBsMmNhcF9zdHJlYW1pbmdfcmVhc3NlbWJseV9zZHUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgY29udHJvbCkKK3N0YXRpYyBpbnQgbDJjYXBfc3RyZWFtaW5nX3JlYXNzZW1ibHlfc2R1KHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgY29udHJvbCkKIHsKLQlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOwogCXN0cnVjdCBza19idWZmICpfc2tiOwogCWludCBlcnIgPSAtRUlOVkFMOwogCkBAIC0zMDIwLDgwICszMTYxLDgwIEBACiAKIAlzd2l0Y2ggKGNvbnRyb2wgJiBMMkNBUF9DVFJMX1NBUikgewogCWNhc2UgTDJDQVBfU0RVX1VOU0VHTUVOVEVEOgotCQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NBUl9TRFUpIHsKLQkJCWtmcmVlX3NrYihwaS0+c2R1KTsKKwkJaWYgKGNoYW4tPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NBUl9TRFUpIHsKKwkJCWtmcmVlX3NrYihjaGFuLT5zZHUpOwogCQkJYnJlYWs7CiAJCX0KIAotCQllcnIgPSBzb2NrX3F1ZXVlX3Jjdl9za2Ioc2ssIHNrYik7CisJCWVyciA9IHNvY2tfcXVldWVfcmN2X3NrYihjaGFuLT5zaywgc2tiKTsKIAkJaWYgKCFlcnIpCiAJCQlyZXR1cm4gMDsKIAogCQlicmVhazsKIAogCWNhc2UgTDJDQVBfU0RVX1NUQVJUOgotCQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NBUl9TRFUpIHsKLQkJCWtmcmVlX3NrYihwaS0+c2R1KTsKKwkJaWYgKGNoYW4tPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NBUl9TRFUpIHsKKwkJCWtmcmVlX3NrYihjaGFuLT5zZHUpOwogCQkJYnJlYWs7CiAJCX0KIAotCQlwaS0+c2R1X2xlbiA9IGdldF91bmFsaWduZWRfbGUxNihza2ItPmRhdGEpOworCQljaGFuLT5zZHVfbGVuID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHNrYi0+ZGF0YSk7CiAJCXNrYl9wdWxsKHNrYiwgMik7CiAKLQkJaWYgKHBpLT5zZHVfbGVuID4gcGktPmltdHUpIHsKKwkJaWYgKGNoYW4tPnNkdV9sZW4gPiBjaGFuLT5pbXR1KSB7CiAJCQllcnIgPSAtRU1TR1NJWkU7CiAJCQlicmVhazsKIAkJfQogCi0JCXBpLT5zZHUgPSBidF9za2JfYWxsb2MocGktPnNkdV9sZW4sIEdGUF9BVE9NSUMpOwotCQlpZiAoIXBpLT5zZHUpIHsKKwkJY2hhbi0+c2R1ID0gYnRfc2tiX2FsbG9jKGNoYW4tPnNkdV9sZW4sIEdGUF9BVE9NSUMpOworCQlpZiAoIWNoYW4tPnNkdSkgewogCQkJZXJyID0gLUVOT01FTTsKIAkJCWJyZWFrOwogCQl9CiAKLQkJbWVtY3B5KHNrYl9wdXQocGktPnNkdSwgc2tiLT5sZW4pLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwkJbWVtY3B5KHNrYl9wdXQoY2hhbi0+c2R1LCBza2ItPmxlbiksIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwogCi0JCXBpLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fU0FSX1NEVTsKLQkJcGktPnBhcnRpYWxfc2R1X2xlbiA9IHNrYi0+bGVuOworCQljaGFuLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fU0FSX1NEVTsKKwkJY2hhbi0+cGFydGlhbF9zZHVfbGVuID0gc2tiLT5sZW47CiAJCWVyciA9IDA7CiAJCWJyZWFrOwogCiAJY2FzZSBMMkNBUF9TRFVfQ09OVElOVUU6Ci0JCWlmICghKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TQVJfU0RVKSkKKwkJaWYgKCEoY2hhbi0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fU0FSX1NEVSkpCiAJCQlicmVhazsKIAotCQltZW1jcHkoc2tiX3B1dChwaS0+c2R1LCBza2ItPmxlbiksIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCQltZW1jcHkoc2tiX3B1dChjaGFuLT5zZHUsIHNrYi0+bGVuKSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CiAKLQkJcGktPnBhcnRpYWxfc2R1X2xlbiArPSBza2ItPmxlbjsKLQkJaWYgKHBpLT5wYXJ0aWFsX3NkdV9sZW4gPiBwaS0+c2R1X2xlbikKLQkJCWtmcmVlX3NrYihwaS0+c2R1KTsKKwkJY2hhbi0+cGFydGlhbF9zZHVfbGVuICs9IHNrYi0+bGVuOworCQlpZiAoY2hhbi0+cGFydGlhbF9zZHVfbGVuID4gY2hhbi0+c2R1X2xlbikKKwkJCWtmcmVlX3NrYihjaGFuLT5zZHUpOwogCQllbHNlCiAJCQllcnIgPSAwOwogCiAJCWJyZWFrOwogCiAJY2FzZSBMMkNBUF9TRFVfRU5EOgotCQlpZiAoIShwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fU0FSX1NEVSkpCisJCWlmICghKGNoYW4tPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NBUl9TRFUpKQogCQkJYnJlYWs7CiAKLQkJbWVtY3B5KHNrYl9wdXQocGktPnNkdSwgc2tiLT5sZW4pLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwkJbWVtY3B5KHNrYl9wdXQoY2hhbi0+c2R1LCBza2ItPmxlbiksIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwogCi0JCXBpLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1NBUl9TRFU7Ci0JCXBpLT5wYXJ0aWFsX3NkdV9sZW4gKz0gc2tiLT5sZW47CisJCWNoYW4tPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fU0FSX1NEVTsKKwkJY2hhbi0+cGFydGlhbF9zZHVfbGVuICs9IHNrYi0+bGVuOwogCi0JCWlmIChwaS0+cGFydGlhbF9zZHVfbGVuID4gcGktPmltdHUpCisJCWlmIChjaGFuLT5wYXJ0aWFsX3NkdV9sZW4gPiBjaGFuLT5pbXR1KQogCQkJZ290byBkcm9wOwogCi0JCWlmIChwaS0+cGFydGlhbF9zZHVfbGVuID09IHBpLT5zZHVfbGVuKSB7Ci0JCQlfc2tiID0gc2tiX2Nsb25lKHBpLT5zZHUsIEdGUF9BVE9NSUMpOwotCQkJZXJyID0gc29ja19xdWV1ZV9yY3Zfc2tiKHNrLCBfc2tiKTsKKwkJaWYgKGNoYW4tPnBhcnRpYWxfc2R1X2xlbiA9PSBjaGFuLT5zZHVfbGVuKSB7CisJCQlfc2tiID0gc2tiX2Nsb25lKGNoYW4tPnNkdSwgR0ZQX0FUT01JQyk7CisJCQllcnIgPSBzb2NrX3F1ZXVlX3Jjdl9za2IoY2hhbi0+c2ssIF9za2IpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJa2ZyZWVfc2tiKF9za2IpOwogCQl9CiAJCWVyciA9IDA7CiAKIGRyb3A6Ci0JCWtmcmVlX3NrYihwaS0+c2R1KTsKKwkJa2ZyZWVfc2tiKGNoYW4tPnNkdSk7CiAJCWJyZWFrOwogCX0KIApAQCAtMzEwMSwzMSArMzI0MiwzMCBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIGwyY2FwX2NoZWNrX3NyZWpfZ2FwKHN0cnVjdCBzb2NrICpzaywgdTggdHhfc2VxKQorc3RhdGljIHZvaWQgbDJjYXBfY2hlY2tfc3Jlal9nYXAoc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4sIHU4IHR4X3NlcSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXUxNiBjb250cm9sOwogCi0Jd2hpbGUgKChza2IgPSBza2JfcGVlayhTUkVKX1FVRVVFKHNrKSkpKSB7CisJd2hpbGUgKChza2IgPSBza2JfcGVlaygmY2hhbi0+c3Jlal9xKSkpIHsKIAkJaWYgKGJ0X2NiKHNrYiktPnR4X3NlcSAhPSB0eF9zZXEpCiAJCQlicmVhazsKIAotCQlza2IgPSBza2JfZGVxdWV1ZShTUkVKX1FVRVVFKHNrKSk7CisJCXNrYiA9IHNrYl9kZXF1ZXVlKCZjaGFuLT5zcmVqX3EpOwogCQljb250cm9sID0gYnRfY2Ioc2tiKS0+c2FyIDw8IEwyQ0FQX0NUUkxfU0FSX1NISUZUOwotCQlsMmNhcF9lcnRtX3JlYXNzZW1ibHlfc2R1KHNrLCBza2IsIGNvbnRyb2wpOwotCQlsMmNhcF9waShzayktPmJ1ZmZlcl9zZXFfc3JlaiA9Ci0JCQkobDJjYXBfcGkoc2spLT5idWZmZXJfc2VxX3NyZWogKyAxKSAlIDY0OworCQlsMmNhcF9lcnRtX3JlYXNzZW1ibHlfc2R1KGNoYW4sIHNrYiwgY29udHJvbCk7CisJCWNoYW4tPmJ1ZmZlcl9zZXFfc3JlaiA9CisJCQkoY2hhbi0+YnVmZmVyX3NlcV9zcmVqICsgMSkgJSA2NDsKIAkJdHhfc2VxID0gKHR4X3NlcSArIDEpICUgNjQ7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBsMmNhcF9yZXNlbmRfc3JlamZyYW1lKHN0cnVjdCBzb2NrICpzaywgdTggdHhfc2VxKQorc3RhdGljIHZvaWQgbDJjYXBfcmVzZW5kX3NyZWpmcmFtZShzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiwgdTggdHhfc2VxKQogewotCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CiAJc3RydWN0IHNyZWpfbGlzdCAqbCwgKnRtcDsKIAl1MTYgY29udHJvbDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsLCB0bXAsIFNSRUpfTElTVChzayksIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobCwgdG1wLCAmY2hhbi0+c3Jlal9sLCBsaXN0KSB7CiAJCWlmIChsLT50eF9zZXEgPT0gdHhfc2VxKSB7CiAJCQlsaXN0X2RlbCgmbC0+bGlzdCk7CiAJCQlrZnJlZShsKTsKQEAgLTMxMzMsMTA3ICszMjczLDEwNSBAQAogCQl9CiAJCWNvbnRyb2wgPSBMMkNBUF9TVVBFUl9TRUxFQ1RfUkVKRUNUOwogCQljb250cm9sIHw9IGwtPnR4X3NlcSA8PCBMMkNBUF9DVFJMX1JFUVNFUV9TSElGVDsKLQkJbDJjYXBfc2VuZF9zZnJhbWUocGksIGNvbnRyb2wpOworCQlsMmNhcF9zZW5kX3NmcmFtZShjaGFuLCBjb250cm9sKTsKIAkJbGlzdF9kZWwoJmwtPmxpc3QpOwotCQlsaXN0X2FkZF90YWlsKCZsLT5saXN0LCBTUkVKX0xJU1Qoc2spKTsKKwkJbGlzdF9hZGRfdGFpbCgmbC0+bGlzdCwgJmNoYW4tPnNyZWpfbCk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBsMmNhcF9zZW5kX3NyZWpmcmFtZShzdHJ1Y3Qgc29jayAqc2ssIHU4IHR4X3NlcSkKK3N0YXRpYyB2b2lkIGwyY2FwX3NlbmRfc3JlamZyYW1lKHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCB1OCB0eF9zZXEpCiB7Ci0Jc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9IGwyY2FwX3BpKHNrKTsKIAlzdHJ1Y3Qgc3Jlal9saXN0ICpuZXc7CiAJdTE2IGNvbnRyb2w7CiAKLQl3aGlsZSAodHhfc2VxICE9IHBpLT5leHBlY3RlZF90eF9zZXEpIHsKKwl3aGlsZSAodHhfc2VxICE9IGNoYW4tPmV4cGVjdGVkX3R4X3NlcSkgewogCQljb250cm9sID0gTDJDQVBfU1VQRVJfU0VMRUNUX1JFSkVDVDsKLQkJY29udHJvbCB8PSBwaS0+ZXhwZWN0ZWRfdHhfc2VxIDw8IEwyQ0FQX0NUUkxfUkVRU0VRX1NISUZUOwotCQlsMmNhcF9zZW5kX3NmcmFtZShwaSwgY29udHJvbCk7CisJCWNvbnRyb2wgfD0gY2hhbi0+ZXhwZWN0ZWRfdHhfc2VxIDw8IEwyQ0FQX0NUUkxfUkVRU0VRX1NISUZUOworCQlsMmNhcF9zZW5kX3NmcmFtZShjaGFuLCBjb250cm9sKTsKIAogCQluZXcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3Jlal9saXN0KSwgR0ZQX0FUT01JQyk7Ci0JCW5ldy0+dHhfc2VxID0gcGktPmV4cGVjdGVkX3R4X3NlcTsKLQkJcGktPmV4cGVjdGVkX3R4X3NlcSA9IChwaS0+ZXhwZWN0ZWRfdHhfc2VxICsgMSkgJSA2NDsKLQkJbGlzdF9hZGRfdGFpbCgmbmV3LT5saXN0LCBTUkVKX0xJU1Qoc2spKTsKKwkJbmV3LT50eF9zZXEgPSBjaGFuLT5leHBlY3RlZF90eF9zZXE7CisJCWNoYW4tPmV4cGVjdGVkX3R4X3NlcSA9IChjaGFuLT5leHBlY3RlZF90eF9zZXEgKyAxKSAlIDY0OworCQlsaXN0X2FkZF90YWlsKCZuZXctPmxpc3QsICZjaGFuLT5zcmVqX2wpOwogCX0KLQlwaS0+ZXhwZWN0ZWRfdHhfc2VxID0gKHBpLT5leHBlY3RlZF90eF9zZXEgKyAxKSAlIDY0OworCWNoYW4tPmV4cGVjdGVkX3R4X3NlcSA9IChjaGFuLT5leHBlY3RlZF90eF9zZXEgKyAxKSAlIDY0OwogfQogCi1zdGF0aWMgaW5saW5lIGludCBsMmNhcF9kYXRhX2NoYW5uZWxfaWZyYW1lKHN0cnVjdCBzb2NrICpzaywgdTE2IHJ4X2NvbnRyb2wsIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW5saW5lIGludCBsMmNhcF9kYXRhX2NoYW5uZWxfaWZyYW1lKHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCB1MTYgcnhfY29udHJvbCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOwogCXU4IHR4X3NlcSA9IF9fZ2V0X3R4c2VxKHJ4X2NvbnRyb2wpOwogCXU4IHJlcV9zZXEgPSBfX2dldF9yZXFzZXEocnhfY29udHJvbCk7CiAJdTggc2FyID0gcnhfY29udHJvbCA+PiBMMkNBUF9DVFJMX1NBUl9TSElGVDsKIAlpbnQgdHhfc2VxX29mZnNldCwgZXhwZWN0ZWRfdHhfc2VxX29mZnNldDsKLQlpbnQgbnVtX3RvX2FjayA9IChwaS0+dHhfd2luLzYpICsgMTsKKwlpbnQgbnVtX3RvX2FjayA9IChjaGFuLT50eF93aW4vNikgKyAxOwogCWludCBlcnIgPSAwOwogCi0JQlRfREJHKCJzayAlcCBsZW4gJWQgdHhfc2VxICVkIHJ4X2NvbnRyb2wgMHglNC40eCIsIHNrLCBza2ItPmxlbiwgdHhfc2VxLAotCQkJCQkJCQlyeF9jb250cm9sKTsKKwlCVF9EQkcoImNoYW4gJXAgbGVuICVkIHR4X3NlcSAlZCByeF9jb250cm9sIDB4JTQuNHgiLCBjaGFuLCBza2ItPmxlbiwKKwkJCQkJCQl0eF9zZXEsIHJ4X2NvbnRyb2wpOwogCiAJaWYgKEwyQ0FQX0NUUkxfRklOQUwgJiByeF9jb250cm9sICYmCi0JCQlsMmNhcF9waShzayktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1dBSVRfRikgewotCQlkZWxfdGltZXIoJnBpLT5tb25pdG9yX3RpbWVyKTsKLQkJaWYgKHBpLT51bmFja2VkX2ZyYW1lcyA+IDApCisJCQljaGFuLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9XQUlUX0YpIHsKKwkJZGVsX3RpbWVyKCZjaGFuLT5tb25pdG9yX3RpbWVyKTsKKwkJaWYgKGNoYW4tPnVuYWNrZWRfZnJhbWVzID4gMCkKIAkJCV9fbW9kX3JldHJhbnNfdGltZXIoKTsKLQkJcGktPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fV0FJVF9GOworCQljaGFuLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1dBSVRfRjsKIAl9CiAKLQlwaS0+ZXhwZWN0ZWRfYWNrX3NlcSA9IHJlcV9zZXE7Ci0JbDJjYXBfZHJvcF9hY2tlZF9mcmFtZXMoc2spOworCWNoYW4tPmV4cGVjdGVkX2Fja19zZXEgPSByZXFfc2VxOworCWwyY2FwX2Ryb3BfYWNrZWRfZnJhbWVzKGNoYW4pOwogCi0JaWYgKHR4X3NlcSA9PSBwaS0+ZXhwZWN0ZWRfdHhfc2VxKQorCWlmICh0eF9zZXEgPT0gY2hhbi0+ZXhwZWN0ZWRfdHhfc2VxKQogCQlnb3RvIGV4cGVjdGVkOwogCi0JdHhfc2VxX29mZnNldCA9ICh0eF9zZXEgLSBwaS0+YnVmZmVyX3NlcSkgJSA2NDsKKwl0eF9zZXFfb2Zmc2V0ID0gKHR4X3NlcSAtIGNoYW4tPmJ1ZmZlcl9zZXEpICUgNjQ7CiAJaWYgKHR4X3NlcV9vZmZzZXQgPCAwKQogCQl0eF9zZXFfb2Zmc2V0ICs9IDY0OwogCiAJLyogaW52YWxpZCB0eF9zZXEgKi8KLQlpZiAodHhfc2VxX29mZnNldCA+PSBwaS0+dHhfd2luKSB7Ci0JCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEocGktPmNvbm4sIHNrLCBFQ09OTlJFU0VUKTsKKwlpZiAodHhfc2VxX29mZnNldCA+PSBjaGFuLT50eF93aW4pIHsKKwkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShjaGFuLT5jb25uLCBjaGFuLCBFQ09OTlJFU0VUKTsKIAkJZ290byBkcm9wOwogCX0KIAotCWlmIChwaS0+Y29ubl9zdGF0ZSA9PSBMMkNBUF9DT05OX0xPQ0FMX0JVU1kpCisJaWYgKGNoYW4tPmNvbm5fc3RhdGUgPT0gTDJDQVBfQ09OTl9MT0NBTF9CVVNZKQogCQlnb3RvIGRyb3A7CiAKLQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NSRUpfU0VOVCkgeworCWlmIChjaGFuLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TUkVKX1NFTlQpIHsKIAkJc3RydWN0IHNyZWpfbGlzdCAqZmlyc3Q7CiAKLQkJZmlyc3QgPSBsaXN0X2ZpcnN0X2VudHJ5KFNSRUpfTElTVChzayksCisJCWZpcnN0ID0gbGlzdF9maXJzdF9lbnRyeSgmY2hhbi0+c3Jlal9sLAogCQkJCXN0cnVjdCBzcmVqX2xpc3QsIGxpc3QpOwogCQlpZiAodHhfc2VxID09IGZpcnN0LT50eF9zZXEpIHsKLQkJCWwyY2FwX2FkZF90b19zcmVqX3F1ZXVlKHNrLCBza2IsIHR4X3NlcSwgc2FyKTsKLQkJCWwyY2FwX2NoZWNrX3NyZWpfZ2FwKHNrLCB0eF9zZXEpOworCQkJbDJjYXBfYWRkX3RvX3NyZWpfcXVldWUoY2hhbiwgc2tiLCB0eF9zZXEsIHNhcik7CisJCQlsMmNhcF9jaGVja19zcmVqX2dhcChjaGFuLCB0eF9zZXEpOwogCiAJCQlsaXN0X2RlbCgmZmlyc3QtPmxpc3QpOwogCQkJa2ZyZWUoZmlyc3QpOwogCi0JCQlpZiAobGlzdF9lbXB0eShTUkVKX0xJU1Qoc2spKSkgewotCQkJCXBpLT5idWZmZXJfc2VxID0gcGktPmJ1ZmZlcl9zZXFfc3JlajsKLQkJCQlwaS0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9TUkVKX1NFTlQ7Ci0JCQkJbDJjYXBfc2VuZF9hY2socGkpOwotCQkJCUJUX0RCRygic2sgJXAsIEV4aXQgU1JFSl9TRU5UIiwgc2spOworCQkJaWYgKGxpc3RfZW1wdHkoJmNoYW4tPnNyZWpfbCkpIHsKKwkJCQljaGFuLT5idWZmZXJfc2VxID0gY2hhbi0+YnVmZmVyX3NlcV9zcmVqOworCQkJCWNoYW4tPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fU1JFSl9TRU5UOworCQkJCWwyY2FwX3NlbmRfYWNrKGNoYW4pOworCQkJCUJUX0RCRygiY2hhbiAlcCwgRXhpdCBTUkVKX1NFTlQiLCBjaGFuKTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCXN0cnVjdCBzcmVqX2xpc3QgKmw7CiAKIAkJCS8qIGR1cGxpY2F0ZWQgdHhfc2VxICovCi0JCQlpZiAobDJjYXBfYWRkX3RvX3NyZWpfcXVldWUoc2ssIHNrYiwgdHhfc2VxLCBzYXIpIDwgMCkKKwkJCWlmIChsMmNhcF9hZGRfdG9fc3Jlal9xdWV1ZShjaGFuLCBza2IsIHR4X3NlcSwgc2FyKSA8IDApCiAJCQkJZ290byBkcm9wOwogCi0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGwsIFNSRUpfTElTVChzayksIGxpc3QpIHsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkobCwgJmNoYW4tPnNyZWpfbCwgbGlzdCkgewogCQkJCWlmIChsLT50eF9zZXEgPT0gdHhfc2VxKSB7Ci0JCQkJCWwyY2FwX3Jlc2VuZF9zcmVqZnJhbWUoc2ssIHR4X3NlcSk7CisJCQkJCWwyY2FwX3Jlc2VuZF9zcmVqZnJhbWUoY2hhbiwgdHhfc2VxKTsKIAkJCQkJcmV0dXJuIDA7CiAJCQkJfQogCQkJfQotCQkJbDJjYXBfc2VuZF9zcmVqZnJhbWUoc2ssIHR4X3NlcSk7CisJCQlsMmNhcF9zZW5kX3NyZWpmcmFtZShjaGFuLCB0eF9zZXEpOwogCQl9CiAJfSBlbHNlIHsKIAkJZXhwZWN0ZWRfdHhfc2VxX29mZnNldCA9Ci0JCQkocGktPmV4cGVjdGVkX3R4X3NlcSAtIHBpLT5idWZmZXJfc2VxKSAlIDY0OworCQkJKGNoYW4tPmV4cGVjdGVkX3R4X3NlcSAtIGNoYW4tPmJ1ZmZlcl9zZXEpICUgNjQ7CiAJCWlmIChleHBlY3RlZF90eF9zZXFfb2Zmc2V0IDwgMCkKIAkJCWV4cGVjdGVkX3R4X3NlcV9vZmZzZXQgKz0gNjQ7CiAKQEAgLTMyNDEsNTEgKzMzNzksNTEgQEAKIAkJaWYgKHR4X3NlcV9vZmZzZXQgPCBleHBlY3RlZF90eF9zZXFfb2Zmc2V0KQogCQkJZ290byBkcm9wOwogCi0JCXBpLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fU1JFSl9TRU5UOworCQljaGFuLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fU1JFSl9TRU5UOwogCi0JCUJUX0RCRygic2sgJXAsIEVudGVyIFNSRUoiLCBzayk7CisJCUJUX0RCRygiY2hhbiAlcCwgRW50ZXIgU1JFSiIsIGNoYW4pOwogCi0JCUlOSVRfTElTVF9IRUFEKFNSRUpfTElTVChzaykpOwotCQlwaS0+YnVmZmVyX3NlcV9zcmVqID0gcGktPmJ1ZmZlcl9zZXE7CisJCUlOSVRfTElTVF9IRUFEKCZjaGFuLT5zcmVqX2wpOworCQljaGFuLT5idWZmZXJfc2VxX3NyZWogPSBjaGFuLT5idWZmZXJfc2VxOwogCi0JCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdChTUkVKX1FVRVVFKHNrKSk7Ci0JCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdChCVVNZX1FVRVVFKHNrKSk7Ci0JCWwyY2FwX2FkZF90b19zcmVqX3F1ZXVlKHNrLCBza2IsIHR4X3NlcSwgc2FyKTsKKwkJX19za2JfcXVldWVfaGVhZF9pbml0KCZjaGFuLT5zcmVqX3EpOworCQlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmNoYW4tPmJ1c3lfcSk7CisJCWwyY2FwX2FkZF90b19zcmVqX3F1ZXVlKGNoYW4sIHNrYiwgdHhfc2VxLCBzYXIpOwogCi0JCXBpLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fU0VORF9QQklUOworCQljaGFuLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fU0VORF9QQklUOwogCi0JCWwyY2FwX3NlbmRfc3JlamZyYW1lKHNrLCB0eF9zZXEpOworCQlsMmNhcF9zZW5kX3NyZWpmcmFtZShjaGFuLCB0eF9zZXEpOwogCi0JCWRlbF90aW1lcigmcGktPmFja190aW1lcik7CisJCWRlbF90aW1lcigmY2hhbi0+YWNrX3RpbWVyKTsKIAl9CiAJcmV0dXJuIDA7CiAKIGV4cGVjdGVkOgotCXBpLT5leHBlY3RlZF90eF9zZXEgPSAocGktPmV4cGVjdGVkX3R4X3NlcSArIDEpICUgNjQ7CisJY2hhbi0+ZXhwZWN0ZWRfdHhfc2VxID0gKGNoYW4tPmV4cGVjdGVkX3R4X3NlcSArIDEpICUgNjQ7CiAKLQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NSRUpfU0VOVCkgeworCWlmIChjaGFuLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TUkVKX1NFTlQpIHsKIAkJYnRfY2Ioc2tiKS0+dHhfc2VxID0gdHhfc2VxOwogCQlidF9jYihza2IpLT5zYXIgPSBzYXI7Ci0JCV9fc2tiX3F1ZXVlX3RhaWwoU1JFSl9RVUVVRShzayksIHNrYik7CisJCV9fc2tiX3F1ZXVlX3RhaWwoJmNoYW4tPnNyZWpfcSwgc2tiKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JZXJyID0gbDJjYXBfcHVzaF9yeF9za2Ioc2ssIHNrYiwgcnhfY29udHJvbCk7CisJZXJyID0gbDJjYXBfcHVzaF9yeF9za2IoY2hhbiwgc2tiLCByeF9jb250cm9sKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIDA7CiAKIAlpZiAocnhfY29udHJvbCAmIEwyQ0FQX0NUUkxfRklOQUwpIHsKLQkJaWYgKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9SRUpfQUNUKQotCQkJcGktPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fUkVKX0FDVDsKKwkJaWYgKGNoYW4tPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1JFSl9BQ1QpCisJCQljaGFuLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1JFSl9BQ1Q7CiAJCWVsc2UKLQkJCWwyY2FwX3JldHJhbnNtaXRfZnJhbWVzKHNrKTsKKwkJCWwyY2FwX3JldHJhbnNtaXRfZnJhbWVzKGNoYW4pOwogCX0KIAogCV9fbW9kX2Fja190aW1lcigpOwogCi0JcGktPm51bV9hY2tlZCA9IChwaS0+bnVtX2Fja2VkICsgMSkgJSBudW1fdG9fYWNrOwotCWlmIChwaS0+bnVtX2Fja2VkID09IG51bV90b19hY2sgLSAxKQotCQlsMmNhcF9zZW5kX2FjayhwaSk7CisJY2hhbi0+bnVtX2Fja2VkID0gKGNoYW4tPm51bV9hY2tlZCArIDEpICUgbnVtX3RvX2FjazsKKwlpZiAoY2hhbi0+bnVtX2Fja2VkID09IG51bV90b19hY2sgLSAxKQorCQlsMmNhcF9zZW5kX2FjayhjaGFuKTsKIAogCXJldHVybiAwOwogCkBAIC0zMjk0LDE2NSArMzQzMiwxNjAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGwyY2FwX2RhdGFfY2hhbm5lbF9ycmZyYW1lKHN0cnVjdCBzb2NrICpzaywgdTE2IHJ4X2NvbnRyb2wpCitzdGF0aWMgaW5saW5lIHZvaWQgbDJjYXBfZGF0YV9jaGFubmVsX3JyZnJhbWUoc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4sIHUxNiByeF9jb250cm9sKQogewotCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7Ci0KLQlCVF9EQkcoInNrICVwLCByZXFfc2VxICVkIGN0cmwgMHglNC40eCIsIHNrLCBfX2dldF9yZXFzZXEocnhfY29udHJvbCksCisJQlRfREJHKCJjaGFuICVwLCByZXFfc2VxICVkIGN0cmwgMHglNC40eCIsIGNoYW4sIF9fZ2V0X3JlcXNlcShyeF9jb250cm9sKSwKIAkJCQkJCXJ4X2NvbnRyb2wpOwogCi0JcGktPmV4cGVjdGVkX2Fja19zZXEgPSBfX2dldF9yZXFzZXEocnhfY29udHJvbCk7Ci0JbDJjYXBfZHJvcF9hY2tlZF9mcmFtZXMoc2spOworCWNoYW4tPmV4cGVjdGVkX2Fja19zZXEgPSBfX2dldF9yZXFzZXEocnhfY29udHJvbCk7CisJbDJjYXBfZHJvcF9hY2tlZF9mcmFtZXMoY2hhbik7CiAKIAlpZiAocnhfY29udHJvbCAmIEwyQ0FQX0NUUkxfUE9MTCkgewotCQlwaS0+Y29ubl9zdGF0ZSB8PSBMMkNBUF9DT05OX1NFTkRfRkJJVDsKLQkJaWYgKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TUkVKX1NFTlQpIHsKLQkJCWlmICgocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1JFTU9URV9CVVNZKSAmJgotCQkJCQkocGktPnVuYWNrZWRfZnJhbWVzID4gMCkpCisJCWNoYW4tPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9TRU5EX0ZCSVQ7CisJCWlmIChjaGFuLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TUkVKX1NFTlQpIHsKKwkJCWlmICgoY2hhbi0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fUkVNT1RFX0JVU1kpICYmCisJCQkJCShjaGFuLT51bmFja2VkX2ZyYW1lcyA+IDApKQogCQkJCV9fbW9kX3JldHJhbnNfdGltZXIoKTsKIAotCQkJcGktPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fUkVNT1RFX0JVU1k7Ci0JCQlsMmNhcF9zZW5kX3NyZWp0YWlsKHNrKTsKKwkJCWNoYW4tPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fUkVNT1RFX0JVU1k7CisJCQlsMmNhcF9zZW5kX3NyZWp0YWlsKGNoYW4pOwogCQl9IGVsc2UgewotCQkJbDJjYXBfc2VuZF9pX29yX3JyX29yX3Jucihzayk7CisJCQlsMmNhcF9zZW5kX2lfb3JfcnJfb3Jfcm5yKGNoYW4pOwogCQl9CiAKIAl9IGVsc2UgaWYgKHJ4X2NvbnRyb2wgJiBMMkNBUF9DVFJMX0ZJTkFMKSB7Ci0JCXBpLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1JFTU9URV9CVVNZOworCQljaGFuLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1JFTU9URV9CVVNZOwogCi0JCWlmIChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fUkVKX0FDVCkKLQkJCXBpLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1JFSl9BQ1Q7CisJCWlmIChjaGFuLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9SRUpfQUNUKQorCQkJY2hhbi0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9SRUpfQUNUOwogCQllbHNlCi0JCQlsMmNhcF9yZXRyYW5zbWl0X2ZyYW1lcyhzayk7CisJCQlsMmNhcF9yZXRyYW5zbWl0X2ZyYW1lcyhjaGFuKTsKIAogCX0gZWxzZSB7Ci0JCWlmICgocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1JFTU9URV9CVVNZKSAmJgotCQkJCShwaS0+dW5hY2tlZF9mcmFtZXMgPiAwKSkKKwkJaWYgKChjaGFuLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9SRU1PVEVfQlVTWSkgJiYKKwkJCQkoY2hhbi0+dW5hY2tlZF9mcmFtZXMgPiAwKSkKIAkJCV9fbW9kX3JldHJhbnNfdGltZXIoKTsKIAotCQlwaS0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9SRU1PVEVfQlVTWTsKLQkJaWYgKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TUkVKX1NFTlQpCi0JCQlsMmNhcF9zZW5kX2FjayhwaSk7CisJCWNoYW4tPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fUkVNT1RFX0JVU1k7CisJCWlmIChjaGFuLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TUkVKX1NFTlQpCisJCQlsMmNhcF9zZW5kX2FjayhjaGFuKTsKIAkJZWxzZQotCQkJbDJjYXBfZXJ0bV9zZW5kKHNrKTsKKwkJCWwyY2FwX2VydG1fc2VuZChjaGFuKTsKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBsMmNhcF9kYXRhX2NoYW5uZWxfcmVqZnJhbWUoc3RydWN0IHNvY2sgKnNrLCB1MTYgcnhfY29udHJvbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBsMmNhcF9kYXRhX2NoYW5uZWxfcmVqZnJhbWUoc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4sIHUxNiByeF9jb250cm9sKQogewotCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CiAJdTggdHhfc2VxID0gX19nZXRfcmVxc2VxKHJ4X2NvbnRyb2wpOwogCi0JQlRfREJHKCJzayAlcCwgcmVxX3NlcSAlZCBjdHJsIDB4JTQuNHgiLCBzaywgdHhfc2VxLCByeF9jb250cm9sKTsKKwlCVF9EQkcoImNoYW4gJXAsIHJlcV9zZXEgJWQgY3RybCAweCU0LjR4IiwgY2hhbiwgdHhfc2VxLCByeF9jb250cm9sKTsKIAotCXBpLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1JFTU9URV9CVVNZOworCWNoYW4tPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fUkVNT1RFX0JVU1k7CiAKLQlwaS0+ZXhwZWN0ZWRfYWNrX3NlcSA9IHR4X3NlcTsKLQlsMmNhcF9kcm9wX2Fja2VkX2ZyYW1lcyhzayk7CisJY2hhbi0+ZXhwZWN0ZWRfYWNrX3NlcSA9IHR4X3NlcTsKKwlsMmNhcF9kcm9wX2Fja2VkX2ZyYW1lcyhjaGFuKTsKIAogCWlmIChyeF9jb250cm9sICYgTDJDQVBfQ1RSTF9GSU5BTCkgewotCQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1JFSl9BQ1QpCi0JCQlwaS0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9SRUpfQUNUOworCQlpZiAoY2hhbi0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fUkVKX0FDVCkKKwkJCWNoYW4tPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fUkVKX0FDVDsKIAkJZWxzZQotCQkJbDJjYXBfcmV0cmFuc21pdF9mcmFtZXMoc2spOworCQkJbDJjYXBfcmV0cmFuc21pdF9mcmFtZXMoY2hhbik7CiAJfSBlbHNlIHsKLQkJbDJjYXBfcmV0cmFuc21pdF9mcmFtZXMoc2spOworCQlsMmNhcF9yZXRyYW5zbWl0X2ZyYW1lcyhjaGFuKTsKIAotCQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1dBSVRfRikKLQkJCXBpLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fUkVKX0FDVDsKKwkJaWYgKGNoYW4tPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1dBSVRfRikKKwkJCWNoYW4tPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9SRUpfQUNUOwogCX0KIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBsMmNhcF9kYXRhX2NoYW5uZWxfc3JlamZyYW1lKHN0cnVjdCBzb2NrICpzaywgdTE2IHJ4X2NvbnRyb2wpCitzdGF0aWMgaW5saW5lIHZvaWQgbDJjYXBfZGF0YV9jaGFubmVsX3NyZWpmcmFtZShzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiwgdTE2IHJ4X2NvbnRyb2wpCiB7Ci0Jc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9IGwyY2FwX3BpKHNrKTsKIAl1OCB0eF9zZXEgPSBfX2dldF9yZXFzZXEocnhfY29udHJvbCk7CiAKLQlCVF9EQkcoInNrICVwLCByZXFfc2VxICVkIGN0cmwgMHglNC40eCIsIHNrLCB0eF9zZXEsIHJ4X2NvbnRyb2wpOworCUJUX0RCRygiY2hhbiAlcCwgcmVxX3NlcSAlZCBjdHJsIDB4JTQuNHgiLCBjaGFuLCB0eF9zZXEsIHJ4X2NvbnRyb2wpOwogCi0JcGktPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fUkVNT1RFX0JVU1k7CisJY2hhbi0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9SRU1PVEVfQlVTWTsKIAogCWlmIChyeF9jb250cm9sICYgTDJDQVBfQ1RSTF9QT0xMKSB7Ci0JCXBpLT5leHBlY3RlZF9hY2tfc2VxID0gdHhfc2VxOwotCQlsMmNhcF9kcm9wX2Fja2VkX2ZyYW1lcyhzayk7CisJCWNoYW4tPmV4cGVjdGVkX2Fja19zZXEgPSB0eF9zZXE7CisJCWwyY2FwX2Ryb3BfYWNrZWRfZnJhbWVzKGNoYW4pOwogCi0JCXBpLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fU0VORF9GQklUOwotCQlsMmNhcF9yZXRyYW5zbWl0X29uZV9mcmFtZShzaywgdHhfc2VxKTsKKwkJY2hhbi0+Y29ubl9zdGF0ZSB8PSBMMkNBUF9DT05OX1NFTkRfRkJJVDsKKwkJbDJjYXBfcmV0cmFuc21pdF9vbmVfZnJhbWUoY2hhbiwgdHhfc2VxKTsKIAotCQlsMmNhcF9lcnRtX3NlbmQoc2spOworCQlsMmNhcF9lcnRtX3NlbmQoY2hhbik7CiAKLQkJaWYgKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9XQUlUX0YpIHsKLQkJCXBpLT5zcmVqX3NhdmVfcmVxc2VxID0gdHhfc2VxOwotCQkJcGktPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9TUkVKX0FDVDsKKwkJaWYgKGNoYW4tPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1dBSVRfRikgeworCQkJY2hhbi0+c3Jlal9zYXZlX3JlcXNlcSA9IHR4X3NlcTsKKwkJCWNoYW4tPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9TUkVKX0FDVDsKIAkJfQogCX0gZWxzZSBpZiAocnhfY29udHJvbCAmIEwyQ0FQX0NUUkxfRklOQUwpIHsKLQkJaWYgKChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fU1JFSl9BQ1QpICYmCi0JCQkJcGktPnNyZWpfc2F2ZV9yZXFzZXEgPT0gdHhfc2VxKQotCQkJcGktPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fU1JFSl9BQ1Q7CisJCWlmICgoY2hhbi0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fU1JFSl9BQ1QpICYmCisJCQkJY2hhbi0+c3Jlal9zYXZlX3JlcXNlcSA9PSB0eF9zZXEpCisJCQljaGFuLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1NSRUpfQUNUOwogCQllbHNlCi0JCQlsMmNhcF9yZXRyYW5zbWl0X29uZV9mcmFtZShzaywgdHhfc2VxKTsKKwkJCWwyY2FwX3JldHJhbnNtaXRfb25lX2ZyYW1lKGNoYW4sIHR4X3NlcSk7CiAJfSBlbHNlIHsKLQkJbDJjYXBfcmV0cmFuc21pdF9vbmVfZnJhbWUoc2ssIHR4X3NlcSk7Ci0JCWlmIChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fV0FJVF9GKSB7Ci0JCQlwaS0+c3Jlal9zYXZlX3JlcXNlcSA9IHR4X3NlcTsKLQkJCXBpLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fU1JFSl9BQ1Q7CisJCWwyY2FwX3JldHJhbnNtaXRfb25lX2ZyYW1lKGNoYW4sIHR4X3NlcSk7CisJCWlmIChjaGFuLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9XQUlUX0YpIHsKKwkJCWNoYW4tPnNyZWpfc2F2ZV9yZXFzZXEgPSB0eF9zZXE7CisJCQljaGFuLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fU1JFSl9BQ1Q7CiAJCX0KIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBsMmNhcF9kYXRhX2NoYW5uZWxfcm5yZnJhbWUoc3RydWN0IHNvY2sgKnNrLCB1MTYgcnhfY29udHJvbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBsMmNhcF9kYXRhX2NoYW5uZWxfcm5yZnJhbWUoc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4sIHUxNiByeF9jb250cm9sKQogewotCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CiAJdTggdHhfc2VxID0gX19nZXRfcmVxc2VxKHJ4X2NvbnRyb2wpOwogCi0JQlRfREJHKCJzayAlcCwgcmVxX3NlcSAlZCBjdHJsIDB4JTQuNHgiLCBzaywgdHhfc2VxLCByeF9jb250cm9sKTsKKwlCVF9EQkcoImNoYW4gJXAsIHJlcV9zZXEgJWQgY3RybCAweCU0LjR4IiwgY2hhbiwgdHhfc2VxLCByeF9jb250cm9sKTsKIAotCXBpLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fUkVNT1RFX0JVU1k7Ci0JcGktPmV4cGVjdGVkX2Fja19zZXEgPSB0eF9zZXE7Ci0JbDJjYXBfZHJvcF9hY2tlZF9mcmFtZXMoc2spOworCWNoYW4tPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9SRU1PVEVfQlVTWTsKKwljaGFuLT5leHBlY3RlZF9hY2tfc2VxID0gdHhfc2VxOworCWwyY2FwX2Ryb3BfYWNrZWRfZnJhbWVzKGNoYW4pOwogCiAJaWYgKHJ4X2NvbnRyb2wgJiBMMkNBUF9DVFJMX1BPTEwpCi0JCXBpLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fU0VORF9GQklUOworCQljaGFuLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fU0VORF9GQklUOwogCi0JaWYgKCEocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NSRUpfU0VOVCkpIHsKLQkJZGVsX3RpbWVyKCZwaS0+cmV0cmFuc190aW1lcik7CisJaWYgKCEoY2hhbi0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fU1JFSl9TRU5UKSkgeworCQlkZWxfdGltZXIoJmNoYW4tPnJldHJhbnNfdGltZXIpOwogCQlpZiAocnhfY29udHJvbCAmIEwyQ0FQX0NUUkxfUE9MTCkKLQkJCWwyY2FwX3NlbmRfcnJfb3Jfcm5yKHBpLCBMMkNBUF9DVFJMX0ZJTkFMKTsKKwkJCWwyY2FwX3NlbmRfcnJfb3Jfcm5yKGNoYW4sIEwyQ0FQX0NUUkxfRklOQUwpOwogCQlyZXR1cm47CiAJfQogCiAJaWYgKHJ4X2NvbnRyb2wgJiBMMkNBUF9DVFJMX1BPTEwpCi0JCWwyY2FwX3NlbmRfc3JlanRhaWwoc2spOworCQlsMmNhcF9zZW5kX3NyZWp0YWlsKGNoYW4pOwogCWVsc2UKLQkJbDJjYXBfc2VuZF9zZnJhbWUocGksIEwyQ0FQX1NVUEVSX1JDVl9SRUFEWSk7CisJCWwyY2FwX3NlbmRfc2ZyYW1lKGNoYW4sIEwyQ0FQX1NVUEVSX1JDVl9SRUFEWSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGwyY2FwX2RhdGFfY2hhbm5lbF9zZnJhbWUoc3RydWN0IHNvY2sgKnNrLCB1MTYgcnhfY29udHJvbCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbmxpbmUgaW50IGwyY2FwX2RhdGFfY2hhbm5lbF9zZnJhbWUoc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4sIHUxNiByeF9jb250cm9sLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCUJUX0RCRygic2sgJXAgcnhfY29udHJvbCAweCU0LjR4IGxlbiAlZCIsIHNrLCByeF9jb250cm9sLCBza2ItPmxlbik7CisJQlRfREJHKCJjaGFuICVwIHJ4X2NvbnRyb2wgMHglNC40eCBsZW4gJWQiLCBjaGFuLCByeF9jb250cm9sLCBza2ItPmxlbik7CiAKIAlpZiAoTDJDQVBfQ1RSTF9GSU5BTCAmIHJ4X2NvbnRyb2wgJiYKLQkJCWwyY2FwX3BpKHNrKS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fV0FJVF9GKSB7Ci0JCWRlbF90aW1lcigmbDJjYXBfcGkoc2spLT5tb25pdG9yX3RpbWVyKTsKLQkJaWYgKGwyY2FwX3BpKHNrKS0+dW5hY2tlZF9mcmFtZXMgPiAwKQorCQkJY2hhbi0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fV0FJVF9GKSB7CisJCWRlbF90aW1lcigmY2hhbi0+bW9uaXRvcl90aW1lcik7CisJCWlmIChjaGFuLT51bmFja2VkX2ZyYW1lcyA+IDApCiAJCQlfX21vZF9yZXRyYW5zX3RpbWVyKCk7Ci0JCWwyY2FwX3BpKHNrKS0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9XQUlUX0Y7CisJCWNoYW4tPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fV0FJVF9GOwogCX0KIAogCXN3aXRjaCAocnhfY29udHJvbCAmIEwyQ0FQX0NUUkxfU1VQRVJWSVNFKSB7CiAJY2FzZSBMMkNBUF9TVVBFUl9SQ1ZfUkVBRFk6Ci0JCWwyY2FwX2RhdGFfY2hhbm5lbF9ycmZyYW1lKHNrLCByeF9jb250cm9sKTsKKwkJbDJjYXBfZGF0YV9jaGFubmVsX3JyZnJhbWUoY2hhbiwgcnhfY29udHJvbCk7CiAJCWJyZWFrOwogCiAJY2FzZSBMMkNBUF9TVVBFUl9SRUpFQ1Q6Ci0JCWwyY2FwX2RhdGFfY2hhbm5lbF9yZWpmcmFtZShzaywgcnhfY29udHJvbCk7CisJCWwyY2FwX2RhdGFfY2hhbm5lbF9yZWpmcmFtZShjaGFuLCByeF9jb250cm9sKTsKIAkJYnJlYWs7CiAKIAljYXNlIEwyQ0FQX1NVUEVSX1NFTEVDVF9SRUpFQ1Q6Ci0JCWwyY2FwX2RhdGFfY2hhbm5lbF9zcmVqZnJhbWUoc2ssIHJ4X2NvbnRyb2wpOworCQlsMmNhcF9kYXRhX2NoYW5uZWxfc3JlamZyYW1lKGNoYW4sIHJ4X2NvbnRyb2wpOwogCQlicmVhazsKIAogCWNhc2UgTDJDQVBfU1VQRVJfUkNWX05PVF9SRUFEWToKLQkJbDJjYXBfZGF0YV9jaGFubmVsX3JucmZyYW1lKHNrLCByeF9jb250cm9sKTsKKwkJbDJjYXBfZGF0YV9jaGFubmVsX3JucmZyYW1lKGNoYW4sIHJ4X2NvbnRyb2wpOwogCQlicmVhazsKIAl9CiAKQEAgLTM0NjIsNyArMzU5NSw3IEBACiAKIHN0YXRpYyBpbnQgbDJjYXBfZXJ0bV9kYXRhX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9IGwyY2FwX3BpKHNrKTsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiA9IGwyY2FwX3BpKHNrKS0+Y2hhbjsKIAl1MTYgY29udHJvbDsKIAl1OCByZXFfc2VxOwogCWludCBsZW4sIG5leHRfdHhfc2VxX29mZnNldCwgcmVxX3NlcV9vZmZzZXQ7CkBAIC0zNDc2LDUxICszNjA5LDUxIEBACiAJICogUmVjZWl2ZXIgd2lsbCBtaXNzIGl0IGFuZCBzdGFydCBwcm9wZXIgcmVjb3ZlcnkKIAkgKiBwcm9jZWR1cmVzIGFuZCBhc2sgcmV0cmFuc21pc3Npb24uCiAJICovCi0JaWYgKGwyY2FwX2NoZWNrX2ZjcyhwaSwgc2tiKSkKKwlpZiAobDJjYXBfY2hlY2tfZmNzKGNoYW4sIHNrYikpCiAJCWdvdG8gZHJvcDsKIAogCWlmIChfX2lzX3Nhcl9zdGFydChjb250cm9sKSAmJiBfX2lzX2lmcmFtZShjb250cm9sKSkKIAkJbGVuIC09IDI7CiAKLQlpZiAocGktPmZjcyA9PSBMMkNBUF9GQ1NfQ1JDMTYpCisJaWYgKGNoYW4tPmZjcyA9PSBMMkNBUF9GQ1NfQ1JDMTYpCiAJCWxlbiAtPSAyOwogCi0JaWYgKGxlbiA+IHBpLT5tcHMpIHsKLQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShwaS0+Y29ubiwgc2ssIEVDT05OUkVTRVQpOworCWlmIChsZW4gPiBjaGFuLT5tcHMpIHsKKwkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShjaGFuLT5jb25uLCBjaGFuLCBFQ09OTlJFU0VUKTsKIAkJZ290byBkcm9wOwogCX0KIAogCXJlcV9zZXEgPSBfX2dldF9yZXFzZXEoY29udHJvbCk7Ci0JcmVxX3NlcV9vZmZzZXQgPSAocmVxX3NlcSAtIHBpLT5leHBlY3RlZF9hY2tfc2VxKSAlIDY0OworCXJlcV9zZXFfb2Zmc2V0ID0gKHJlcV9zZXEgLSBjaGFuLT5leHBlY3RlZF9hY2tfc2VxKSAlIDY0OwogCWlmIChyZXFfc2VxX29mZnNldCA8IDApCiAJCXJlcV9zZXFfb2Zmc2V0ICs9IDY0OwogCiAJbmV4dF90eF9zZXFfb2Zmc2V0ID0KLQkJKHBpLT5uZXh0X3R4X3NlcSAtIHBpLT5leHBlY3RlZF9hY2tfc2VxKSAlIDY0OworCQkoY2hhbi0+bmV4dF90eF9zZXEgLSBjaGFuLT5leHBlY3RlZF9hY2tfc2VxKSAlIDY0OwogCWlmIChuZXh0X3R4X3NlcV9vZmZzZXQgPCAwKQogCQluZXh0X3R4X3NlcV9vZmZzZXQgKz0gNjQ7CiAKIAkvKiBjaGVjayBmb3IgaW52YWxpZCByZXEtc2VxICovCiAJaWYgKHJlcV9zZXFfb2Zmc2V0ID4gbmV4dF90eF9zZXFfb2Zmc2V0KSB7Ci0JCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEocGktPmNvbm4sIHNrLCBFQ09OTlJFU0VUKTsKKwkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShjaGFuLT5jb25uLCBjaGFuLCBFQ09OTlJFU0VUKTsKIAkJZ290byBkcm9wOwogCX0KIAogCWlmIChfX2lzX2lmcmFtZShjb250cm9sKSkgewogCQlpZiAobGVuIDwgMCkgewotCQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShwaS0+Y29ubiwgc2ssIEVDT05OUkVTRVQpOworCQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShjaGFuLT5jb25uLCBjaGFuLCBFQ09OTlJFU0VUKTsKIAkJCWdvdG8gZHJvcDsKIAkJfQogCi0JCWwyY2FwX2RhdGFfY2hhbm5lbF9pZnJhbWUoc2ssIGNvbnRyb2wsIHNrYik7CisJCWwyY2FwX2RhdGFfY2hhbm5lbF9pZnJhbWUoY2hhbiwgY29udHJvbCwgc2tiKTsKIAl9IGVsc2UgewogCQlpZiAobGVuICE9IDApIHsKIAkJCUJUX0VSUigiJWQiLCBsZW4pOwotCQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShwaS0+Y29ubiwgc2ssIEVDT05OUkVTRVQpOworCQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShjaGFuLT5jb25uLCBjaGFuLCBFQ09OTlJFU0VUKTsKIAkJCWdvdG8gZHJvcDsKIAkJfQogCi0JCWwyY2FwX2RhdGFfY2hhbm5lbF9zZnJhbWUoc2ssIGNvbnRyb2wsIHNrYik7CisJCWwyY2FwX2RhdGFfY2hhbm5lbF9zZnJhbWUoY2hhbiwgY29udHJvbCwgc2tiKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTM1MzIsMzMgKzM2NjUsMzUgQEAKIAogc3RhdGljIGlubGluZSBpbnQgbDJjYXBfZGF0YV9jaGFubmVsKHN0cnVjdCBsMmNhcF9jb25uICpjb25uLCB1MTYgY2lkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBzb2NrICpzazsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbjsKKwlzdHJ1Y3Qgc29jayAqc2sgPSBOVUxMOwogCXN0cnVjdCBsMmNhcF9waW5mbyAqcGk7CiAJdTE2IGNvbnRyb2w7CiAJdTggdHhfc2VxOwogCWludCBsZW47CiAKLQlzayA9IGwyY2FwX2dldF9jaGFuX2J5X3NjaWQoJmNvbm4tPmNoYW5fbGlzdCwgY2lkKTsKLQlpZiAoIXNrKSB7CisJY2hhbiA9IGwyY2FwX2dldF9jaGFuX2J5X3NjaWQoY29ubiwgY2lkKTsKKwlpZiAoIWNoYW4pIHsKIAkJQlRfREJHKCJ1bmtub3duIGNpZCAweCU0LjR4IiwgY2lkKTsKIAkJZ290byBkcm9wOwogCX0KIAorCXNrID0gY2hhbi0+c2s7CiAJcGkgPSBsMmNhcF9waShzayk7CiAKLQlCVF9EQkcoInNrICVwLCBsZW4gJWQiLCBzaywgc2tiLT5sZW4pOworCUJUX0RCRygiY2hhbiAlcCwgbGVuICVkIiwgY2hhbiwgc2tiLT5sZW4pOwogCiAJaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9DT05ORUNURUQpCiAJCWdvdG8gZHJvcDsKIAotCXN3aXRjaCAocGktPm1vZGUpIHsKKwlzd2l0Y2ggKGNoYW4tPm1vZGUpIHsKIAljYXNlIEwyQ0FQX01PREVfQkFTSUM6CiAJCS8qIElmIHNvY2tldCByZWN2IGJ1ZmZlcnMgb3ZlcmZsb3dzIHdlIGRyb3AgZGF0YSBoZXJlCiAJCSAqIHdoaWNoIGlzICpiYWQqIGJlY2F1c2UgTDJDQVAgaGFzIHRvIGJlIHJlbGlhYmxlLgogCQkgKiBCdXQgd2UgZG9uJ3QgaGF2ZSBhbnkgb3RoZXIgY2hvaWNlLiBMMkNBUCBkb2Vzbid0CiAJCSAqIHByb3ZpZGUgZmxvdyBjb250cm9sIG1lY2hhbmlzbS4gKi8KIAotCQlpZiAocGktPmltdHUgPCBza2ItPmxlbikKKwkJaWYgKGNoYW4tPmltdHUgPCBza2ItPmxlbikKIAkJCWdvdG8gZHJvcDsKIAogCQlpZiAoIXNvY2tfcXVldWVfcmN2X3NrYihzaywgc2tiKSkKQEAgLTM1ODAsMzEgKzM3MTUsMzEgQEAKIAkJc2tiX3B1bGwoc2tiLCAyKTsKIAkJbGVuID0gc2tiLT5sZW47CiAKLQkJaWYgKGwyY2FwX2NoZWNrX2ZjcyhwaSwgc2tiKSkKKwkJaWYgKGwyY2FwX2NoZWNrX2ZjcyhjaGFuLCBza2IpKQogCQkJZ290byBkcm9wOwogCiAJCWlmIChfX2lzX3Nhcl9zdGFydChjb250cm9sKSkKIAkJCWxlbiAtPSAyOwogCi0JCWlmIChwaS0+ZmNzID09IEwyQ0FQX0ZDU19DUkMxNikKKwkJaWYgKGNoYW4tPmZjcyA9PSBMMkNBUF9GQ1NfQ1JDMTYpCiAJCQlsZW4gLT0gMjsKIAotCQlpZiAobGVuID4gcGktPm1wcyB8fCBsZW4gPCAwIHx8IF9faXNfc2ZyYW1lKGNvbnRyb2wpKQorCQlpZiAobGVuID4gY2hhbi0+bXBzIHx8IGxlbiA8IDAgfHwgX19pc19zZnJhbWUoY29udHJvbCkpCiAJCQlnb3RvIGRyb3A7CiAKIAkJdHhfc2VxID0gX19nZXRfdHhzZXEoY29udHJvbCk7CiAKLQkJaWYgKHBpLT5leHBlY3RlZF90eF9zZXEgPT0gdHhfc2VxKQotCQkJcGktPmV4cGVjdGVkX3R4X3NlcSA9IChwaS0+ZXhwZWN0ZWRfdHhfc2VxICsgMSkgJSA2NDsKKwkJaWYgKGNoYW4tPmV4cGVjdGVkX3R4X3NlcSA9PSB0eF9zZXEpCisJCQljaGFuLT5leHBlY3RlZF90eF9zZXEgPSAoY2hhbi0+ZXhwZWN0ZWRfdHhfc2VxICsgMSkgJSA2NDsKIAkJZWxzZQotCQkJcGktPmV4cGVjdGVkX3R4X3NlcSA9ICh0eF9zZXEgKyAxKSAlIDY0OworCQkJY2hhbi0+ZXhwZWN0ZWRfdHhfc2VxID0gKHR4X3NlcSArIDEpICUgNjQ7CiAKLQkJbDJjYXBfc3RyZWFtaW5nX3JlYXNzZW1ibHlfc2R1KHNrLCBza2IsIGNvbnRyb2wpOworCQlsMmNhcF9zdHJlYW1pbmdfcmVhc3NlbWJseV9zZHUoY2hhbiwgc2tiLCBjb250cm9sKTsKIAogCQlnb3RvIGRvbmU7CiAKIAlkZWZhdWx0OgotCQlCVF9EQkcoInNrICVwOiBiYWQgbW9kZSAweCUyLjJ4Iiwgc2ssIHBpLT5tb2RlKTsKKwkJQlRfREJHKCJjaGFuICVwOiBiYWQgbW9kZSAweCUyLjJ4IiwgY2hhbiwgY2hhbi0+bW9kZSk7CiAJCWJyZWFrOwogCX0KIApAQCAtMzYyMCwxMiArMzc1NSwxNSBAQAogCiBzdGF0aWMgaW5saW5lIGludCBsMmNhcF9jb25sZXNzX2NoYW5uZWwoc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4sIF9fbGUxNiBwc20sIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IHNvY2sgKnNrOworCXN0cnVjdCBzb2NrICpzayA9IE5VTEw7CisJc3RydWN0IGwyY2FwX2NoYW4gKmNoYW47CiAKLQlzayA9IGwyY2FwX2dldF9zb2NrX2J5X3BzbSgwLCBwc20sIGNvbm4tPnNyYyk7Ci0JaWYgKCFzaykKKwljaGFuID0gbDJjYXBfZ2xvYmFsX2NoYW5fYnlfcHNtKDAsIHBzbSwgY29ubi0+c3JjKTsKKwlpZiAoIWNoYW4pCiAJCWdvdG8gZHJvcDsKIAorCXNrID0gY2hhbi0+c2s7CisKIAliaF9sb2NrX3NvY2soc2spOwogCiAJQlRfREJHKCJzayAlcCwgbGVuICVkIiwgc2ssIHNrYi0+bGVuKTsKQEAgLTM2MzMsNyArMzc3MSw0MCBAQAogCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQk9VTkQgJiYgc2stPnNrX3N0YXRlICE9IEJUX0NPTk5FQ1RFRCkKIAkJZ290byBkcm9wOwogCi0JaWYgKGwyY2FwX3BpKHNrKS0+aW10dSA8IHNrYi0+bGVuKQorCWlmIChsMmNhcF9waShzayktPmNoYW4tPmltdHUgPCBza2ItPmxlbikKKwkJZ290byBkcm9wOworCisJaWYgKCFzb2NrX3F1ZXVlX3Jjdl9za2Ioc2ssIHNrYikpCisJCWdvdG8gZG9uZTsKKworZHJvcDoKKwlrZnJlZV9za2Ioc2tiKTsKKworZG9uZToKKwlpZiAoc2spCisJCWJoX3VubG9ja19zb2NrKHNrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbDJjYXBfYXR0X2NoYW5uZWwoc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4sIF9fbGUxNiBjaWQsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHNvY2sgKnNrID0gTlVMTDsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbjsKKworCWNoYW4gPSBsMmNhcF9nbG9iYWxfY2hhbl9ieV9zY2lkKDAsIGNpZCwgY29ubi0+c3JjKTsKKwlpZiAoIWNoYW4pCisJCWdvdG8gZHJvcDsKKworCXNrID0gY2hhbi0+c2s7CisKKwliaF9sb2NrX3NvY2soc2spOworCisJQlRfREJHKCJzayAlcCwgbGVuICVkIiwgc2ssIHNrYi0+bGVuKTsKKworCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQk9VTkQgJiYgc2stPnNrX3N0YXRlICE9IEJUX0NPTk5FQ1RFRCkKKwkJZ290byBkcm9wOworCisJaWYgKGwyY2FwX3BpKHNrKS0+Y2hhbi0+aW10dSA8IHNrYi0+bGVuKQogCQlnb3RvIGRyb3A7CiAKIAlpZiAoIXNvY2tfcXVldWVfcmN2X3NrYihzaywgc2tiKSkKQEAgLTM2NzcsNiArMzg0OCwxMCBAQAogCQlsMmNhcF9jb25sZXNzX2NoYW5uZWwoY29ubiwgcHNtLCBza2IpOwogCQlicmVhazsKIAorCWNhc2UgTDJDQVBfQ0lEX0xFX0RBVEE6CisJCWwyY2FwX2F0dF9jaGFubmVsKGNvbm4sIGNpZCwgc2tiKTsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQlsMmNhcF9kYXRhX2NoYW5uZWwoY29ubiwgY2lkLCBza2IpOwogCQlicmVhazsKQEAgLTM2ODgsOCArMzg2Myw3IEBACiBzdGF0aWMgaW50IGwyY2FwX2Nvbm5lY3RfaW5kKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBiZGFkZHJfdCAqYmRhZGRyLCB1OCB0eXBlKQogewogCWludCBleGFjdCA9IDAsIGxtMSA9IDAsIGxtMiA9IDA7Ci0JcmVnaXN0ZXIgc3RydWN0IHNvY2sgKnNrOwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCXN0cnVjdCBsMmNhcF9jaGFuICpjOwogCiAJaWYgKHR5cGUgIT0gQUNMX0xJTkspCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzY5NywyMyArMzg3MSwyNSBAQAogCUJUX0RCRygiaGRldiAlcywgYmRhZGRyICVzIiwgaGRldi0+bmFtZSwgYmF0b3N0cihiZGFkZHIpKTsKIAogCS8qIEZpbmQgbGlzdGVuaW5nIHNvY2tldHMgYW5kIGNoZWNrIHRoZWlyIGxpbmtfbW9kZSAqLwotCXJlYWRfbG9jaygmbDJjYXBfc2tfbGlzdC5sb2NrKTsKLQlza19mb3JfZWFjaChzaywgbm9kZSwgJmwyY2FwX3NrX2xpc3QuaGVhZCkgeworCXJlYWRfbG9jaygmY2hhbl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJmNoYW5fbGlzdCwgZ2xvYmFsX2wpIHsKKwkJc3RydWN0IHNvY2sgKnNrID0gYy0+c2s7CisKIAkJaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9MSVNURU4pCiAJCQljb250aW51ZTsKIAogCQlpZiAoIWJhY21wKCZidF9zayhzayktPnNyYywgJmhkZXYtPmJkYWRkcikpIHsKIAkJCWxtMSB8PSBIQ0lfTE1fQUNDRVBUOwotCQkJaWYgKGwyY2FwX3BpKHNrKS0+cm9sZV9zd2l0Y2gpCisJCQlpZiAoYy0+cm9sZV9zd2l0Y2gpCiAJCQkJbG0xIHw9IEhDSV9MTV9NQVNURVI7CiAJCQlleGFjdCsrOwogCQl9IGVsc2UgaWYgKCFiYWNtcCgmYnRfc2soc2spLT5zcmMsIEJEQUREUl9BTlkpKSB7CiAJCQlsbTIgfD0gSENJX0xNX0FDQ0VQVDsKLQkJCWlmIChsMmNhcF9waShzayktPnJvbGVfc3dpdGNoKQorCQkJaWYgKGMtPnJvbGVfc3dpdGNoKQogCQkJCWxtMiB8PSBIQ0lfTE1fTUFTVEVSOwogCQl9CiAJfQotCXJlYWRfdW5sb2NrKCZsMmNhcF9za19saXN0LmxvY2spOworCXJlYWRfdW5sb2NrKCZjaGFuX2xpc3RfbG9jayk7CiAKIAlyZXR1cm4gZXhhY3QgPyBsbTEgOiBsbTI7CiB9CkBAIC0zNzYxLDQ5ICszOTM3LDUwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBsMmNhcF9jaGVja19lbmNyeXB0aW9uKHN0cnVjdCBzb2NrICpzaywgdTggZW5jcnlwdCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBsMmNhcF9jaGVja19lbmNyeXB0aW9uKHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCB1OCBlbmNyeXB0KQogeworCXN0cnVjdCBzb2NrICpzayA9IGNoYW4tPnNrOworCiAJaWYgKHNrLT5za190eXBlICE9IFNPQ0tfU0VRUEFDS0VUICYmIHNrLT5za190eXBlICE9IFNPQ0tfU1RSRUFNKQogCQlyZXR1cm47CiAKIAlpZiAoZW5jcnlwdCA9PSAweDAwKSB7Ci0JCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9NRURJVU0pIHsKKwkJaWYgKGNoYW4tPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9NRURJVU0pIHsKIAkJCWwyY2FwX3NvY2tfY2xlYXJfdGltZXIoc2spOwogCQkJbDJjYXBfc29ja19zZXRfdGltZXIoc2ssIEhaICogNSk7Ci0JCX0gZWxzZSBpZiAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfSElHSCkKKwkJfSBlbHNlIGlmIChjaGFuLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfSElHSCkKIAkJCV9fbDJjYXBfc29ja19jbG9zZShzaywgRUNPTk5SRUZVU0VEKTsKIAl9IGVsc2UgewotCQlpZiAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfTUVESVVNKQorCQlpZiAoY2hhbi0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX01FRElVTSkKIAkJCWwyY2FwX3NvY2tfY2xlYXJfdGltZXIoc2spOwogCX0KIH0KIAogc3RhdGljIGludCBsMmNhcF9zZWN1cml0eV9jZm0oc3RydWN0IGhjaV9jb25uICpoY29uLCB1OCBzdGF0dXMsIHU4IGVuY3J5cHQpCiB7Ci0Jc3RydWN0IGwyY2FwX2NoYW5fbGlzdCAqbDsKIAlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGhjb24tPmwyY2FwX2RhdGE7Ci0Jc3RydWN0IHNvY2sgKnNrOworCXN0cnVjdCBsMmNhcF9jaGFuICpjaGFuOwogCiAJaWYgKCFjb25uKQogCQlyZXR1cm4gMDsKIAotCWwgPSAmY29ubi0+Y2hhbl9saXN0OwotCiAJQlRfREJHKCJjb25uICVwIiwgY29ubik7CiAKLQlyZWFkX2xvY2soJmwtPmxvY2spOworCXJlYWRfbG9jaygmY29ubi0+Y2hhbl9sb2NrKTsKIAotCWZvciAoc2sgPSBsLT5oZWFkOyBzazsgc2sgPSBsMmNhcF9waShzayktPm5leHRfYykgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hhbiwgJmNvbm4tPmNoYW5fbCwgbGlzdCkgeworCQlzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLT5zazsKKwogCQliaF9sb2NrX3NvY2soc2spOwogCi0JCWlmIChsMmNhcF9waShzayktPmNvbmZfc3RhdGUgJiBMMkNBUF9DT05GX0NPTk5FQ1RfUEVORCkgeworCQlpZiAoY2hhbi0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfQ09OTkVDVF9QRU5EKSB7CiAJCQliaF91bmxvY2tfc29jayhzayk7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCWlmICghc3RhdHVzICYmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVEVEIHx8CiAJCQkJCQlzay0+c2tfc3RhdGUgPT0gQlRfQ09ORklHKSkgewotCQkJbDJjYXBfY2hlY2tfZW5jcnlwdGlvbihzaywgZW5jcnlwdCk7CisJCQlsMmNhcF9jaGVja19lbmNyeXB0aW9uKGNoYW4sIGVuY3J5cHQpOwogCQkJYmhfdW5sb2NrX3NvY2soc2spOwogCQkJY29udGludWU7CiAJCX0KQEAgLTM4MTEsMTMgKzM5ODgsMTMgQEAKIAkJaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNUKSB7CiAJCQlpZiAoIXN0YXR1cykgewogCQkJCXN0cnVjdCBsMmNhcF9jb25uX3JlcSByZXE7Ci0JCQkJcmVxLnNjaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPnNjaWQpOwotCQkJCXJlcS5wc20gID0gbDJjYXBfcGkoc2spLT5wc207CisJCQkJcmVxLnNjaWQgPSBjcHVfdG9fbGUxNihjaGFuLT5zY2lkKTsKKwkJCQlyZXEucHNtICA9IGNoYW4tPnBzbTsKIAotCQkJCWwyY2FwX3BpKHNrKS0+aWRlbnQgPSBsMmNhcF9nZXRfaWRlbnQoY29ubik7Ci0JCQkJbDJjYXBfcGkoc2spLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfQ09OTkVDVF9QRU5EOworCQkJCWNoYW4tPmlkZW50ID0gbDJjYXBfZ2V0X2lkZW50KGNvbm4pOworCQkJCWNoYW4tPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9DT05ORUNUX1BFTkQ7CiAKLQkJCQlsMmNhcF9zZW5kX2NtZChjb25uLCBsMmNhcF9waShzayktPmlkZW50LAorCQkJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGNoYW4tPmlkZW50LAogCQkJCQlMMkNBUF9DT05OX1JFUSwgc2l6ZW9mKHJlcSksICZyZXEpOwogCQkJfSBlbHNlIHsKIAkJCQlsMmNhcF9zb2NrX2NsZWFyX3RpbWVyKHNrKTsKQEAgLTM4MzYsMTggKzQwMTMsMTggQEAKIAkJCQlyZXN1bHQgPSBMMkNBUF9DUl9TRUNfQkxPQ0s7CiAJCQl9CiAKLQkJCXJzcC5zY2lkICAgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPmRjaWQpOwotCQkJcnNwLmRjaWQgICA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+c2NpZCk7CisJCQlyc3Auc2NpZCAgID0gY3B1X3RvX2xlMTYoY2hhbi0+ZGNpZCk7CisJCQlyc3AuZGNpZCAgID0gY3B1X3RvX2xlMTYoY2hhbi0+c2NpZCk7CiAJCQlyc3AucmVzdWx0ID0gY3B1X3RvX2xlMTYocmVzdWx0KTsKIAkJCXJzcC5zdGF0dXMgPSBjcHVfdG9fbGUxNihMMkNBUF9DU19OT19JTkZPKTsKLQkJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGwyY2FwX3BpKHNrKS0+aWRlbnQsCi0JCQkJCUwyQ0FQX0NPTk5fUlNQLCBzaXplb2YocnNwKSwgJnJzcCk7CisJCQlsMmNhcF9zZW5kX2NtZChjb25uLCBjaGFuLT5pZGVudCwgTDJDQVBfQ09OTl9SU1AsCisJCQkJCQkJc2l6ZW9mKHJzcCksICZyc3ApOwogCQl9CiAKIAkJYmhfdW5sb2NrX3NvY2soc2spOwogCX0KIAotCXJlYWRfdW5sb2NrKCZsLT5sb2NrKTsKKwlyZWFkX3VubG9jaygmY29ubi0+Y2hhbl9sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzg2Niw3ICs0MDQzLDcgQEAKIAogCWlmICghKGZsYWdzICYgQUNMX0NPTlQpKSB7CiAJCXN0cnVjdCBsMmNhcF9oZHIgKmhkcjsKLQkJc3RydWN0IHNvY2sgKnNrOworCQlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbjsKIAkJdTE2IGNpZDsKIAkJaW50IGxlbjsKIApAQCAtMzkwNCwxOSArNDA4MSwyMiBAQAogCQkJZ290byBkcm9wOwogCQl9CiAKLQkJc2sgPSBsMmNhcF9nZXRfY2hhbl9ieV9zY2lkKCZjb25uLT5jaGFuX2xpc3QsIGNpZCk7CisJCWNoYW4gPSBsMmNhcF9nZXRfY2hhbl9ieV9zY2lkKGNvbm4sIGNpZCk7CiAKLQkJaWYgKHNrICYmIGwyY2FwX3BpKHNrKS0+aW10dSA8IGxlbiAtIEwyQ0FQX0hEUl9TSVpFKSB7Ci0JCQlCVF9FUlIoIkZyYW1lIGV4Y2VlZGluZyByZWN2IE1UVSAobGVuICVkLCBNVFUgJWQpIiwKLQkJCQkJbGVuLCBsMmNhcF9waShzayktPmltdHUpOworCQlpZiAoY2hhbiAmJiBjaGFuLT5zaykgeworCQkJc3RydWN0IHNvY2sgKnNrID0gY2hhbi0+c2s7CisKKwkJCWlmIChjaGFuLT5pbXR1IDwgbGVuIC0gTDJDQVBfSERSX1NJWkUpIHsKKwkJCQlCVF9FUlIoIkZyYW1lIGV4Y2VlZGluZyByZWN2IE1UVSAobGVuICVkLCAiCisJCQkJCQkJIk1UVSAlZCkiLCBsZW4sCisJCQkJCQkJY2hhbi0+aW10dSk7CisJCQkJYmhfdW5sb2NrX3NvY2soc2spOworCQkJCWwyY2FwX2Nvbm5fdW5yZWxpYWJsZShjb25uLCBFQ09NTSk7CisJCQkJZ290byBkcm9wOworCQkJfQogCQkJYmhfdW5sb2NrX3NvY2soc2spOwotCQkJbDJjYXBfY29ubl91bnJlbGlhYmxlKGNvbm4sIEVDT01NKTsKLQkJCWdvdG8gZHJvcDsKIAkJfQogCi0JCWlmIChzaykKLQkJCWJoX3VubG9ja19zb2NrKHNrKTsKLQogCQkvKiBBbGxvY2F0ZSBza2IgZm9yIHRoZSBjb21wbGV0ZSBmcmFtZSAod2l0aCBoZWFkZXIpICovCiAJCWNvbm4tPnJ4X3NrYiA9IGJ0X3NrYl9hbGxvYyhsZW4sIEdGUF9BVE9NSUMpOwogCQlpZiAoIWNvbm4tPnJ4X3NrYikKQEAgLTM5NjIsMjQgKzQxNDIsMjIgQEAKIAogc3RhdGljIGludCBsMmNhcF9kZWJ1Z2ZzX3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICpwKQogewotCXN0cnVjdCBzb2NrICpzazsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqYzsKIAotCXJlYWRfbG9ja19iaCgmbDJjYXBfc2tfbGlzdC5sb2NrKTsKKwlyZWFkX2xvY2tfYmgoJmNoYW5fbGlzdF9sb2NrKTsKIAotCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmbDJjYXBfc2tfbGlzdC5oZWFkKSB7Ci0JCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmY2hhbl9saXN0LCBnbG9iYWxfbCkgeworCQlzdHJ1Y3Qgc29jayAqc2sgPSBjLT5zazsKIAogCQlzZXFfcHJpbnRmKGYsICIlcyAlcyAlZCAlZCAweCU0LjR4IDB4JTQuNHggJWQgJWQgJWQgJWRcbiIsCiAJCQkJCWJhdG9zdHIoJmJ0X3NrKHNrKS0+c3JjKSwKIAkJCQkJYmF0b3N0cigmYnRfc2soc2spLT5kc3QpLAotCQkJCQlzay0+c2tfc3RhdGUsIF9fbGUxNl90b19jcHUocGktPnBzbSksCi0JCQkJCXBpLT5zY2lkLCBwaS0+ZGNpZCwKLQkJCQkJcGktPmltdHUsIHBpLT5vbXR1LCBwaS0+c2VjX2xldmVsLAotCQkJCQlwaS0+bW9kZSk7CisJCQkJCXNrLT5za19zdGF0ZSwgX19sZTE2X3RvX2NwdShjLT5wc20pLAorCQkJCQljLT5zY2lkLCBjLT5kY2lkLCBjLT5pbXR1LCBjLT5vbXR1LAorCQkJCQljLT5zZWNfbGV2ZWwsIGMtPm1vZGUpOwogCX0KIAotCXJlYWRfdW5sb2NrX2JoKCZsMmNhcF9za19saXN0LmxvY2spOworCXJlYWRfdW5sb2NrX2JoKCZjaGFuX2xpc3RfbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvbDJjYXBfc29jay5jIGIvbmV0L2JsdWV0b290aC9sMmNhcF9zb2NrLmMKaW5kZXggMjk5ZmU1Ni4uMThkYzk4OCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9sMmNhcF9zb2NrLmMKKysrIGIvbmV0L2JsdWV0b290aC9sMmNhcF9zb2NrLmMKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmg+CiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9sMmNhcC5oPgogCitzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBsMmNhcF9zb2NrX29wczsKKwogLyogLS0tLSBMMkNBUCB0aW1lcnMgLS0tLSAqLwogc3RhdGljIHZvaWQgbDJjYXBfc29ja190aW1lb3V0KHVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtNTEsNyArNTMsNyBAQAogCWlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVEVEIHx8IHNrLT5za19zdGF0ZSA9PSBCVF9DT05GSUcpCiAJCXJlYXNvbiA9IEVDT05OUkVGVVNFRDsKIAllbHNlIGlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVCAmJgotCQkJCWwyY2FwX3BpKHNrKS0+c2VjX2xldmVsICE9IEJUX1NFQ1VSSVRZX1NEUCkKKwkJCWwyY2FwX3BpKHNrKS0+Y2hhbi0+c2VjX2xldmVsICE9IEJUX1NFQ1VSSVRZX1NEUCkKIAkJcmVhc29uID0gRUNPTk5SRUZVU0VEOwogCWVsc2UKIAkJcmVhc29uID0gRVRJTUVET1VUOwpAQCAtNzYsMjEgKzc4LDEwIEBACiAJc2tfc3RvcF90aW1lcihzaywgJnNrLT5za190aW1lcik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc29jayAqX19sMmNhcF9nZXRfc29ja19ieV9hZGRyKF9fbGUxNiBwc20sIGJkYWRkcl90ICpzcmMpCi17Ci0Jc3RydWN0IHNvY2sgKnNrOwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmbDJjYXBfc2tfbGlzdC5oZWFkKQotCQlpZiAobDJjYXBfcGkoc2spLT5zcG9ydCA9PSBwc20gJiYgIWJhY21wKCZidF9zayhzayktPnNyYywgc3JjKSkKLQkJCWdvdG8gZm91bmQ7Ci0Jc2sgPSBOVUxMOwotZm91bmQ6Ci0JcmV0dXJuIHNrOwotfQotCiBzdGF0aWMgaW50IGwyY2FwX3NvY2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIGludCBhbGVuKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCBsMmNhcF9jaGFuICpjaGFuID0gbDJjYXBfcGkoc2spLT5jaGFuOwogCXN0cnVjdCBzb2NrYWRkcl9sMiBsYTsKIAlpbnQgbGVuLCBlcnIgPSAwOwogCkBAIC0xMjksMjYgKzEyMCwyMCBAQAogCQl9CiAJfQogCi0Jd3JpdGVfbG9ja19iaCgmbDJjYXBfc2tfbGlzdC5sb2NrKTsKLQotCWlmIChsYS5sMl9wc20gJiYgX19sMmNhcF9nZXRfc29ja19ieV9hZGRyKGxhLmwyX3BzbSwgJmxhLmwyX2JkYWRkcikpIHsKLQkJZXJyID0gLUVBRERSSU5VU0U7Ci0JfSBlbHNlIHsKLQkJLyogU2F2ZSBzb3VyY2UgYWRkcmVzcyAqLwotCQliYWNweSgmYnRfc2soc2spLT5zcmMsICZsYS5sMl9iZGFkZHIpOwotCQlsMmNhcF9waShzayktPnBzbSAgID0gbGEubDJfcHNtOwotCQlsMmNhcF9waShzayktPnNwb3J0ID0gbGEubDJfcHNtOwotCQlzay0+c2tfc3RhdGUgPSBCVF9CT1VORDsKLQotCQlpZiAoX19sZTE2X3RvX2NwdShsYS5sMl9wc20pID09IDB4MDAwMSB8fAotCQkJCQlfX2xlMTZfdG9fY3B1KGxhLmwyX3BzbSkgPT0gMHgwMDAzKQotCQkJbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9TRFA7Ci0JfQotCiAJaWYgKGxhLmwyX2NpZCkKLQkJbDJjYXBfcGkoc2spLT5zY2lkID0gbGEubDJfY2lkOworCQllcnIgPSBsMmNhcF9hZGRfc2NpZChjaGFuLCBsYS5sMl9jaWQpOworCWVsc2UKKwkJZXJyID0gbDJjYXBfYWRkX3BzbShjaGFuLCAmbGEubDJfYmRhZGRyLCBsYS5sMl9wc20pOwogCi0Jd3JpdGVfdW5sb2NrX2JoKCZsMmNhcF9za19saXN0LmxvY2spOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGRvbmU7CisKKwlpZiAoX19sZTE2X3RvX2NwdShsYS5sMl9wc20pID09IDB4MDAwMSB8fAorCQkJCV9fbGUxNl90b19jcHUobGEubDJfcHNtKSA9PSAweDAwMDMpCisJCWNoYW4tPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX1NEUDsKKworCWJhY3B5KCZidF9zayhzayktPnNyYywgJmxhLmwyX2JkYWRkcik7CisJc2stPnNrX3N0YXRlID0gQlRfQk9VTkQ7CiAKIGRvbmU6CiAJcmVsZWFzZV9zb2NrKHNrKTsKQEAgLTE1OCw2ICsxNDMsNyBAQAogc3RhdGljIGludCBsMmNhcF9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICphZGRyLCBpbnQgYWxlbiwgaW50IGZsYWdzKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCBsMmNhcF9jaGFuICpjaGFuID0gbDJjYXBfcGkoc2spLT5jaGFuOwogCXN0cnVjdCBzb2NrYWRkcl9sMiBsYTsKIAlpbnQgbGVuLCBlcnIgPSAwOwogCkBAIC0xODIsNyArMTY4LDcgQEAKIAkJZ290byBkb25lOwogCX0KIAotCXN3aXRjaCAobDJjYXBfcGkoc2spLT5tb2RlKSB7CisJc3dpdGNoIChjaGFuLT5tb2RlKSB7CiAJY2FzZSBMMkNBUF9NT0RFX0JBU0lDOgogCQlicmVhazsKIAljYXNlIEwyQ0FQX01PREVfRVJUTToKQEAgLTIyNiwxMCArMjEyLDEwIEBACiAKIAkvKiBTZXQgZGVzdGluYXRpb24gYWRkcmVzcyBhbmQgcHNtICovCiAJYmFjcHkoJmJ0X3NrKHNrKS0+ZHN0LCAmbGEubDJfYmRhZGRyKTsKLQlsMmNhcF9waShzayktPnBzbSA9IGxhLmwyX3BzbTsKLQlsMmNhcF9waShzayktPmRjaWQgPSBsYS5sMl9jaWQ7CisJY2hhbi0+cHNtID0gbGEubDJfcHNtOworCWNoYW4tPmRjaWQgPSBsYS5sMl9jaWQ7CiAKLQllcnIgPSBsMmNhcF9kb19jb25uZWN0KHNrKTsKKwllcnIgPSBsMmNhcF9jaGFuX2Nvbm5lY3QobDJjYXBfcGkoc2spLT5jaGFuKTsKIAlpZiAoZXJyKQogCQlnb3RvIGRvbmU7CiAKQEAgLTI0NCw2ICsyMzAsNyBAQAogc3RhdGljIGludCBsMmNhcF9zb2NrX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgYmFja2xvZykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiA9IGwyY2FwX3BpKHNrKS0+Y2hhbjsKIAlpbnQgZXJyID0gMDsKIAogCUJUX0RCRygic2sgJXAgYmFja2xvZyAlZCIsIHNrLCBiYWNrbG9nKTsKQEAgLTI1Niw3ICsyNDMsNyBAQAogCQlnb3RvIGRvbmU7CiAJfQogCi0Jc3dpdGNoIChsMmNhcF9waShzayktPm1vZGUpIHsKKwlzd2l0Y2ggKGNoYW4tPm1vZGUpIHsKIAljYXNlIEwyQ0FQX01PREVfQkFTSUM6CiAJCWJyZWFrOwogCWNhc2UgTDJDQVBfTU9ERV9FUlRNOgpAQCAtMjY5LDI4ICsyNTYsNiBAQAogCQlnb3RvIGRvbmU7CiAJfQogCi0JaWYgKCFsMmNhcF9waShzayktPnBzbSAmJiAhbDJjYXBfcGkoc2spLT5kY2lkKSB7Ci0JCWJkYWRkcl90ICpzcmMgPSAmYnRfc2soc2spLT5zcmM7Ci0JCXUxNiBwc207Ci0KLQkJZXJyID0gLUVJTlZBTDsKLQotCQl3cml0ZV9sb2NrX2JoKCZsMmNhcF9za19saXN0LmxvY2spOwotCi0JCWZvciAocHNtID0gMHgxMDAxOyBwc20gPCAweDExMDA7IHBzbSArPSAyKQotCQkJaWYgKCFfX2wyY2FwX2dldF9zb2NrX2J5X2FkZHIoY3B1X3RvX2xlMTYocHNtKSwgc3JjKSkgewotCQkJCWwyY2FwX3BpKHNrKS0+cHNtICAgPSBjcHVfdG9fbGUxNihwc20pOwotCQkJCWwyY2FwX3BpKHNrKS0+c3BvcnQgPSBjcHVfdG9fbGUxNihwc20pOwotCQkJCWVyciA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJd3JpdGVfdW5sb2NrX2JoKCZsMmNhcF9za19saXN0LmxvY2spOwotCi0JCWlmIChlcnIgPCAwKQotCQkJZ290byBkb25lOwotCX0KLQogCXNrLT5za19tYXhfYWNrX2JhY2tsb2cgPSBiYWNrbG9nOwogCXNrLT5za19hY2tfYmFja2xvZyA9IDA7CiAJc2stPnNrX3N0YXRlID0gQlRfTElTVEVOOwpAQCAtMzYwLDYgKzMyNSw3IEBACiB7CiAJc3RydWN0IHNvY2thZGRyX2wyICpsYSA9IChzdHJ1Y3Qgc29ja2FkZHJfbDIgKikgYWRkcjsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiA9IGwyY2FwX3BpKHNrKS0+Y2hhbjsKIAogCUJUX0RCRygic29jayAlcCwgc2sgJXAiLCBzb2NrLCBzayk7CiAKQEAgLTM2NywxMyArMzMzLDEzIEBACiAJKmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbDIpOwogCiAJaWYgKHBlZXIpIHsKLQkJbGEtPmwyX3BzbSA9IGwyY2FwX3BpKHNrKS0+cHNtOworCQlsYS0+bDJfcHNtID0gY2hhbi0+cHNtOwogCQliYWNweSgmbGEtPmwyX2JkYWRkciwgJmJ0X3NrKHNrKS0+ZHN0KTsKLQkJbGEtPmwyX2NpZCA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+ZGNpZCk7CisJCWxhLT5sMl9jaWQgPSBjcHVfdG9fbGUxNihjaGFuLT5kY2lkKTsKIAl9IGVsc2UgewotCQlsYS0+bDJfcHNtID0gbDJjYXBfcGkoc2spLT5zcG9ydDsKKwkJbGEtPmwyX3BzbSA9IGNoYW4tPnNwb3J0OwogCQliYWNweSgmbGEtPmwyX2JkYWRkciwgJmJ0X3NrKHNrKS0+c3JjKTsKLQkJbGEtPmwyX2NpZCA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+c2NpZCk7CisJCWxhLT5sMl9jaWQgPSBjcHVfdG9fbGUxNihjaGFuLT5zY2lkKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTM4Miw2ICszNDgsNyBAQAogc3RhdGljIGludCBsMmNhcF9zb2NrX2dldHNvY2tvcHRfb2xkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4gPSBsMmNhcF9waShzayktPmNoYW47CiAJc3RydWN0IGwyY2FwX29wdGlvbnMgb3B0czsKIAlzdHJ1Y3QgbDJjYXBfY29ubmluZm8gY2luZm87CiAJaW50IGxlbiwgZXJyID0gMDsKQEAgLTM5NywxMyArMzY0LDEzIEBACiAJc3dpdGNoIChvcHRuYW1lKSB7CiAJY2FzZSBMMkNBUF9PUFRJT05TOgogCQltZW1zZXQoJm9wdHMsIDAsIHNpemVvZihvcHRzKSk7Ci0JCW9wdHMuaW10dSAgICAgPSBsMmNhcF9waShzayktPmltdHU7Ci0JCW9wdHMub210dSAgICAgPSBsMmNhcF9waShzayktPm9tdHU7Ci0JCW9wdHMuZmx1c2hfdG8gPSBsMmNhcF9waShzayktPmZsdXNoX3RvOwotCQlvcHRzLm1vZGUgICAgID0gbDJjYXBfcGkoc2spLT5tb2RlOwotCQlvcHRzLmZjcyAgICAgID0gbDJjYXBfcGkoc2spLT5mY3M7Ci0JCW9wdHMubWF4X3R4ICAgPSBsMmNhcF9waShzayktPm1heF90eDsKLQkJb3B0cy50eHdpbl9zaXplID0gKF9fdTE2KWwyY2FwX3BpKHNrKS0+dHhfd2luOworCQlvcHRzLmltdHUgICAgID0gY2hhbi0+aW10dTsKKwkJb3B0cy5vbXR1ICAgICA9IGNoYW4tPm9tdHU7CisJCW9wdHMuZmx1c2hfdG8gPSBjaGFuLT5mbHVzaF90bzsKKwkJb3B0cy5tb2RlICAgICA9IGNoYW4tPm1vZGU7CisJCW9wdHMuZmNzICAgICAgPSBjaGFuLT5mY3M7CisJCW9wdHMubWF4X3R4ICAgPSBjaGFuLT5tYXhfdHg7CisJCW9wdHMudHh3aW5fc2l6ZSA9IChfX3UxNiljaGFuLT50eF93aW47CiAKIAkJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIHNpemVvZihvcHRzKSk7CiAJCWlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCAoY2hhciAqKSAmb3B0cywgbGVuKSkKQEAgLTQxMiw3ICszNzksNyBAQAogCQlicmVhazsKIAogCWNhc2UgTDJDQVBfTE06Ci0JCXN3aXRjaCAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwpIHsKKwkJc3dpdGNoIChjaGFuLT5zZWNfbGV2ZWwpIHsKIAkJY2FzZSBCVF9TRUNVUklUWV9MT1c6CiAJCQlvcHQgPSBMMkNBUF9MTV9BVVRIOwogCQkJYnJlYWs7CkBAIC00MjgsMTAgKzM5NSwxMCBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAobDJjYXBfcGkoc2spLT5yb2xlX3N3aXRjaCkKKwkJaWYgKGNoYW4tPnJvbGVfc3dpdGNoKQogCQkJb3B0IHw9IEwyQ0FQX0xNX01BU1RFUjsKIAotCQlpZiAobDJjYXBfcGkoc2spLT5mb3JjZV9yZWxpYWJsZSkKKwkJaWYgKGNoYW4tPmZvcmNlX3JlbGlhYmxlKQogCQkJb3B0IHw9IEwyQ0FQX0xNX1JFTElBQkxFOwogCiAJCWlmIChwdXRfdXNlcihvcHQsICh1MzIgX191c2VyICopIG9wdHZhbCkpCkBAIC00NDYsOCArNDEzLDggQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJY2luZm8uaGNpX2hhbmRsZSA9IGwyY2FwX3BpKHNrKS0+Y29ubi0+aGNvbi0+aGFuZGxlOwotCQltZW1jcHkoY2luZm8uZGV2X2NsYXNzLCBsMmNhcF9waShzayktPmNvbm4tPmhjb24tPmRldl9jbGFzcywgMyk7CisJCWNpbmZvLmhjaV9oYW5kbGUgPSBjaGFuLT5jb25uLT5oY29uLT5oYW5kbGU7CisJCW1lbWNweShjaW5mby5kZXZfY2xhc3MsIGNoYW4tPmNvbm4tPmhjb24tPmRldl9jbGFzcywgMyk7CiAKIAkJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIHNpemVvZihjaW5mbykpOwogCQlpZiAoY29weV90b191c2VyKG9wdHZhbCwgKGNoYXIgKikgJmNpbmZvLCBsZW4pKQpAQCAtNDY3LDYgKzQzNCw3IEBACiBzdGF0aWMgaW50IGwyY2FwX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4gPSBsMmNhcF9waShzayktPmNoYW47CiAJc3RydWN0IGJ0X3NlY3VyaXR5IHNlYzsKIAlpbnQgbGVuLCBlcnIgPSAwOwogCkBAIC00OTEsNyArNDU5LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJc2VjLmxldmVsID0gbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWw7CisJCXNlYy5sZXZlbCA9IGNoYW4tPnNlY19sZXZlbDsKIAogCQlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgc2l6ZW9mKHNlYykpOwogCQlpZiAoY29weV90b191c2VyKG9wdHZhbCwgKGNoYXIgKikgJnNlYywgbGVuKSkKQEAgLTUxMSw3ICs0NzksNyBAQAogCQlicmVhazsKIAogCWNhc2UgQlRfRkxVU0hBQkxFOgotCQlpZiAocHV0X3VzZXIobDJjYXBfcGkoc2spLT5mbHVzaGFibGUsICh1MzIgX191c2VyICopIG9wdHZhbCkpCisJCWlmIChwdXRfdXNlcihjaGFuLT5mbHVzaGFibGUsICh1MzIgX191c2VyICopIG9wdHZhbCkpCiAJCQllcnIgPSAtRUZBVUxUOwogCiAJCWJyZWFrOwpAQCAtNTI4LDYgKzQ5Niw3IEBACiBzdGF0aWMgaW50IGwyY2FwX3NvY2tfc2V0c29ja29wdF9vbGQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4gPSBsMmNhcF9waShzayktPmNoYW47CiAJc3RydWN0IGwyY2FwX29wdGlvbnMgb3B0czsKIAlpbnQgbGVuLCBlcnIgPSAwOwogCXUzMiBvcHQ7CkBAIC01NDMsMTMgKzUxMiwxMyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlvcHRzLmltdHUgICAgID0gbDJjYXBfcGkoc2spLT5pbXR1OwotCQlvcHRzLm9tdHUgICAgID0gbDJjYXBfcGkoc2spLT5vbXR1OwotCQlvcHRzLmZsdXNoX3RvID0gbDJjYXBfcGkoc2spLT5mbHVzaF90bzsKLQkJb3B0cy5tb2RlICAgICA9IGwyY2FwX3BpKHNrKS0+bW9kZTsKLQkJb3B0cy5mY3MgICAgICA9IGwyY2FwX3BpKHNrKS0+ZmNzOwotCQlvcHRzLm1heF90eCAgID0gbDJjYXBfcGkoc2spLT5tYXhfdHg7Ci0JCW9wdHMudHh3aW5fc2l6ZSA9IChfX3UxNilsMmNhcF9waShzayktPnR4X3dpbjsKKwkJb3B0cy5pbXR1ICAgICA9IGNoYW4tPmltdHU7CisJCW9wdHMub210dSAgICAgPSBjaGFuLT5vbXR1OworCQlvcHRzLmZsdXNoX3RvID0gY2hhbi0+Zmx1c2hfdG87CisJCW9wdHMubW9kZSAgICAgPSBjaGFuLT5tb2RlOworCQlvcHRzLmZjcyAgICAgID0gY2hhbi0+ZmNzOworCQlvcHRzLm1heF90eCAgID0gY2hhbi0+bWF4X3R4OworCQlvcHRzLnR4d2luX3NpemUgPSAoX191MTYpY2hhbi0+dHhfd2luOwogCiAJCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgc2l6ZW9mKG9wdHMpLCBvcHRsZW4pOwogCQlpZiAoY29weV9mcm9tX3VzZXIoKGNoYXIgKikgJm9wdHMsIG9wdHZhbCwgbGVuKSkgewpAQCAtNTYyLDEwICs1MzEsMTAgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJbDJjYXBfcGkoc2spLT5tb2RlID0gb3B0cy5tb2RlOwotCQlzd2l0Y2ggKGwyY2FwX3BpKHNrKS0+bW9kZSkgeworCQljaGFuLT5tb2RlID0gb3B0cy5tb2RlOworCQlzd2l0Y2ggKGNoYW4tPm1vZGUpIHsKIAkJY2FzZSBMMkNBUF9NT0RFX0JBU0lDOgotCQkJbDJjYXBfcGkoc2spLT5jb25mX3N0YXRlICY9IH5MMkNBUF9DT05GX1NUQVRFMl9ERVZJQ0U7CisJCQljaGFuLT5jb25mX3N0YXRlICY9IH5MMkNBUF9DT05GX1NUQVRFMl9ERVZJQ0U7CiAJCQlicmVhazsKIAkJY2FzZSBMMkNBUF9NT0RFX0VSVE06CiAJCWNhc2UgTDJDQVBfTU9ERV9TVFJFQU1JTkc6CkBAIC01NzcsMTEgKzU0NiwxMSBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlsMmNhcF9waShzayktPmltdHUgPSBvcHRzLmltdHU7Ci0JCWwyY2FwX3BpKHNrKS0+b210dSA9IG9wdHMub210dTsKLQkJbDJjYXBfcGkoc2spLT5mY3MgID0gb3B0cy5mY3M7Ci0JCWwyY2FwX3BpKHNrKS0+bWF4X3R4ID0gb3B0cy5tYXhfdHg7Ci0JCWwyY2FwX3BpKHNrKS0+dHhfd2luID0gKF9fdTgpb3B0cy50eHdpbl9zaXplOworCQljaGFuLT5pbXR1ID0gb3B0cy5pbXR1OworCQljaGFuLT5vbXR1ID0gb3B0cy5vbXR1OworCQljaGFuLT5mY3MgID0gb3B0cy5mY3M7CisJCWNoYW4tPm1heF90eCA9IG9wdHMubWF4X3R4OworCQljaGFuLT50eF93aW4gPSAoX191OClvcHRzLnR4d2luX3NpemU7CiAJCWJyZWFrOwogCiAJY2FzZSBMMkNBUF9MTToKQEAgLTU5MSwxNCArNTYwLDE0IEBACiAJCX0KIAogCQlpZiAob3B0ICYgTDJDQVBfTE1fQVVUSCkKLQkJCWwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfTE9XOworCQkJY2hhbi0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfTE9XOwogCQlpZiAob3B0ICYgTDJDQVBfTE1fRU5DUllQVCkKLQkJCWwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfTUVESVVNOworCQkJY2hhbi0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfTUVESVVNOwogCQlpZiAob3B0ICYgTDJDQVBfTE1fU0VDVVJFKQotCQkJbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9ISUdIOworCQkJY2hhbi0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfSElHSDsKIAotCQlsMmNhcF9waShzayktPnJvbGVfc3dpdGNoICAgID0gKG9wdCAmIEwyQ0FQX0xNX01BU1RFUik7Ci0JCWwyY2FwX3BpKHNrKS0+Zm9yY2VfcmVsaWFibGUgPSAob3B0ICYgTDJDQVBfTE1fUkVMSUFCTEUpOworCQljaGFuLT5yb2xlX3N3aXRjaCAgICA9IChvcHQgJiBMMkNBUF9MTV9NQVNURVIpOworCQljaGFuLT5mb3JjZV9yZWxpYWJsZSA9IChvcHQgJiBMMkNBUF9MTV9SRUxJQUJMRSk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTYxMyw2ICs1ODIsNyBAQAogc3RhdGljIGludCBsMmNhcF9zb2NrX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbikKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiA9IGwyY2FwX3BpKHNrKS0+Y2hhbjsKIAlzdHJ1Y3QgYnRfc2VjdXJpdHkgc2VjOwogCWludCBsZW4sIGVyciA9IDA7CiAJdTMyIG9wdDsKQEAgLTY0OSw3ICs2MTksNyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlsMmNhcF9waShzayktPnNlY19sZXZlbCA9IHNlYy5sZXZlbDsKKwkJY2hhbi0+c2VjX2xldmVsID0gc2VjLmxldmVsOwogCQlicmVhazsKIAogCWNhc2UgQlRfREVGRVJfU0VUVVA6CkBAIC02NzgsNyArNjQ4LDcgQEAKIAkJfQogCiAJCWlmIChvcHQgPT0gQlRfRkxVU0hBQkxFX09GRikgewotCQkJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNvbm47CisJCQlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGNoYW4tPmNvbm47CiAJCQkvKiBwcm9jZWVkIGZ1cnRoZXIgb25seSB3aGVuIHdlIGhhdmUgbDJjYXBfY29ubiBhbmQKIAkJCSAgIE5vIEZsdXNoIHN1cHBvcnQgaW4gdGhlIExNICovCiAJCQlpZiAoIWNvbm4gfHwgIWxtcF9ub19mbHVzaF9jYXBhYmxlKGNvbm4tPmhjb24tPmhkZXYpKSB7CkBAIC02ODcsNyArNjU3LDcgQEAKIAkJCX0KIAkJfQogCi0JCWwyY2FwX3BpKHNrKS0+Zmx1c2hhYmxlID0gb3B0OworCQljaGFuLT5mbHVzaGFibGUgPSBvcHQ7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTcwMiw3ICs2NzIsNyBAQAogc3RhdGljIGludCBsMmNhcF9zb2NrX3NlbmRtc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7Ci0Jc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9IGwyY2FwX3BpKHNrKTsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiA9IGwyY2FwX3BpKHNrKS0+Y2hhbjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXUxNiBjb250cm9sOwogCWludCBlcnI7CkBAIC03MjUsNzQgKzY5NSw3NyBAQAogCiAJLyogQ29ubmVjdGlvbmxlc3MgY2hhbm5lbCAqLwogCWlmIChzay0+c2tfdHlwZSA9PSBTT0NLX0RHUkFNKSB7Ci0JCXNrYiA9IGwyY2FwX2NyZWF0ZV9jb25ubGVzc19wZHUoc2ssIG1zZywgbGVuKTsKKwkJc2tiID0gbDJjYXBfY3JlYXRlX2Nvbm5sZXNzX3BkdShjaGFuLCBtc2csIGxlbik7CiAJCWlmIChJU19FUlIoc2tiKSkgewogCQkJZXJyID0gUFRSX0VSUihza2IpOwogCQl9IGVsc2UgewotCQkJbDJjYXBfZG9fc2VuZChzaywgc2tiKTsKKwkJCWwyY2FwX2RvX3NlbmQoY2hhbiwgc2tiKTsKIAkJCWVyciA9IGxlbjsKIAkJfQogCQlnb3RvIGRvbmU7CiAJfQogCi0Jc3dpdGNoIChwaS0+bW9kZSkgeworCXN3aXRjaCAoY2hhbi0+bW9kZSkgewogCWNhc2UgTDJDQVBfTU9ERV9CQVNJQzoKIAkJLyogQ2hlY2sgb3V0Z29pbmcgTVRVICovCi0JCWlmIChsZW4gPiBwaS0+b210dSkgeworCQlpZiAobGVuID4gY2hhbi0+b210dSkgewogCQkJZXJyID0gLUVNU0dTSVpFOwogCQkJZ290byBkb25lOwogCQl9CiAKIAkJLyogQ3JlYXRlIGEgYmFzaWMgUERVICovCi0JCXNrYiA9IGwyY2FwX2NyZWF0ZV9iYXNpY19wZHUoc2ssIG1zZywgbGVuKTsKKwkJc2tiID0gbDJjYXBfY3JlYXRlX2Jhc2ljX3BkdShjaGFuLCBtc2csIGxlbik7CiAJCWlmIChJU19FUlIoc2tiKSkgewogCQkJZXJyID0gUFRSX0VSUihza2IpOwogCQkJZ290byBkb25lOwogCQl9CiAKLQkJbDJjYXBfZG9fc2VuZChzaywgc2tiKTsKKwkJbDJjYXBfZG9fc2VuZChjaGFuLCBza2IpOwogCQllcnIgPSBsZW47CiAJCWJyZWFrOwogCiAJY2FzZSBMMkNBUF9NT0RFX0VSVE06CiAJY2FzZSBMMkNBUF9NT0RFX1NUUkVBTUlORzoKIAkJLyogRW50aXJlIFNEVSBmaXRzIGludG8gb25lIFBEVSAqLwotCQlpZiAobGVuIDw9IHBpLT5yZW1vdGVfbXBzKSB7CisJCWlmIChsZW4gPD0gY2hhbi0+cmVtb3RlX21wcykgewogCQkJY29udHJvbCA9IEwyQ0FQX1NEVV9VTlNFR01FTlRFRDsKLQkJCXNrYiA9IGwyY2FwX2NyZWF0ZV9pZnJhbWVfcGR1KHNrLCBtc2csIGxlbiwgY29udHJvbCwgMCk7CisJCQlza2IgPSBsMmNhcF9jcmVhdGVfaWZyYW1lX3BkdShjaGFuLCBtc2csIGxlbiwgY29udHJvbCwKKwkJCQkJCQkJCTApOwogCQkJaWYgKElTX0VSUihza2IpKSB7CiAJCQkJZXJyID0gUFRSX0VSUihza2IpOwogCQkJCWdvdG8gZG9uZTsKIAkJCX0KLQkJCV9fc2tiX3F1ZXVlX3RhaWwoVFhfUVVFVUUoc2spLCBza2IpOworCQkJX19za2JfcXVldWVfdGFpbCgmY2hhbi0+dHhfcSwgc2tiKTsKIAotCQkJaWYgKHNrLT5za19zZW5kX2hlYWQgPT0gTlVMTCkKLQkJCQlzay0+c2tfc2VuZF9oZWFkID0gc2tiOworCQkJaWYgKGNoYW4tPnR4X3NlbmRfaGVhZCA9PSBOVUxMKQorCQkJCWNoYW4tPnR4X3NlbmRfaGVhZCA9IHNrYjsKIAogCQl9IGVsc2UgewogCQkvKiBTZWdtZW50IFNEVSBpbnRvIG11bHRpcGxlcyBQRFVzICovCi0JCQllcnIgPSBsMmNhcF9zYXJfc2VnbWVudF9zZHUoc2ssIG1zZywgbGVuKTsKKwkJCWVyciA9IGwyY2FwX3Nhcl9zZWdtZW50X3NkdShjaGFuLCBtc2csIGxlbik7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlnb3RvIGRvbmU7CiAJCX0KIAotCQlpZiAocGktPm1vZGUgPT0gTDJDQVBfTU9ERV9TVFJFQU1JTkcpIHsKLQkJCWwyY2FwX3N0cmVhbWluZ19zZW5kKHNrKTsKLQkJfSBlbHNlIHsKLQkJCWlmICgocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1JFTU9URV9CVVNZKSAmJgotCQkJCQkocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1dBSVRfRikpIHsKLQkJCQllcnIgPSBsZW47Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQllcnIgPSBsMmNhcF9lcnRtX3NlbmQoc2spOworCQlpZiAoY2hhbi0+bW9kZSA9PSBMMkNBUF9NT0RFX1NUUkVBTUlORykgeworCQkJbDJjYXBfc3RyZWFtaW5nX3NlbmQoY2hhbik7CisJCQllcnIgPSBsZW47CisJCQlicmVhazsKIAkJfQogCisJCWlmICgoY2hhbi0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fUkVNT1RFX0JVU1kpICYmCisJCQkJKGNoYW4tPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1dBSVRfRikpIHsKKwkJCWVyciA9IGxlbjsKKwkJCWJyZWFrOworCQl9CisJCWVyciA9IGwyY2FwX2VydG1fc2VuZChjaGFuKTsKKwogCQlpZiAoZXJyID49IDApCiAJCQllcnIgPSBsZW47CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJQlRfREJHKCJiYWQgc3RhdGUgJTEuMXgiLCBwaS0+bW9kZSk7CisJCUJUX0RCRygiYmFkIHN0YXRlICUxLjF4IiwgY2hhbi0+bW9kZSk7CiAJCWVyciA9IC1FQkFERkQ7CiAJfQogCkBAIC04MDgsMjkgKzc4MSw5IEBACiAJbG9ja19zb2NrKHNrKTsKIAogCWlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVDIgJiYgYnRfc2soc2spLT5kZWZlcl9zZXR1cCkgewotCQlzdHJ1Y3QgbDJjYXBfY29ubl9yc3AgcnNwOwotCQlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y29ubjsKLQkJdTggYnVmWzEyOF07Ci0KIAkJc2stPnNrX3N0YXRlID0gQlRfQ09ORklHOwogCi0JCXJzcC5zY2lkICAgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPmRjaWQpOwotCQlyc3AuZGNpZCAgID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5zY2lkKTsKLQkJcnNwLnJlc3VsdCA9IGNwdV90b19sZTE2KEwyQ0FQX0NSX1NVQ0NFU1MpOwotCQlyc3Auc3RhdHVzID0gY3B1X3RvX2xlMTYoTDJDQVBfQ1NfTk9fSU5GTyk7Ci0JCWwyY2FwX3NlbmRfY21kKGwyY2FwX3BpKHNrKS0+Y29ubiwgbDJjYXBfcGkoc2spLT5pZGVudCwKLQkJCQkJTDJDQVBfQ09OTl9SU1AsIHNpemVvZihyc3ApLCAmcnNwKTsKLQotCQlpZiAobDJjYXBfcGkoc2spLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9SRVFfU0VOVCkgewotCQkJcmVsZWFzZV9zb2NrKHNrKTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJbDJjYXBfcGkoc2spLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfUkVRX1NFTlQ7Ci0JCWwyY2FwX3NlbmRfY21kKGNvbm4sIGwyY2FwX2dldF9pZGVudChjb25uKSwgTDJDQVBfQ09ORl9SRVEsCi0JCQkJbDJjYXBfYnVpbGRfY29uZl9yZXEoc2ssIGJ1ZiksIGJ1Zik7Ci0JCWwyY2FwX3BpKHNrKS0+bnVtX2NvbmZfcmVxKys7Ci0KKwkJX19sMmNhcF9jb25uZWN0X3JzcF9kZWZlcihsMmNhcF9waShzayktPmNoYW4pOwogCQlyZWxlYXNlX3NvY2soc2spOwogCQlyZXR1cm4gMDsKIAl9CkBAIC04NTQsNyArODA3LDggQEAKIAlCVF9EQkcoInNrICVwIHN0YXRlICVkIiwgc2ssIHNrLT5za19zdGF0ZSk7CiAKIAkvKiBLaWxsIHBvb3Igb3JwaGFuICovCi0JYnRfc29ja191bmxpbmsoJmwyY2FwX3NrX2xpc3QsIHNrKTsKKworCWwyY2FwX2NoYW5fZGVzdHJveShsMmNhcF9waShzayktPmNoYW4pOwogCXNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfREVBRCk7CiAJc29ja19wdXQoc2spOwogfQpAQCAtODg1LDcgKzgzOSw4IEBACiAKIHZvaWQgX19sMmNhcF9zb2NrX2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgaW50IHJlYXNvbikKIHsKLQlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y29ubjsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiA9IGwyY2FwX3BpKHNrKS0+Y2hhbjsKKwlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGNoYW4tPmNvbm47CiAKIAlCVF9EQkcoInNrICVwIHN0YXRlICVkIHNvY2tldCAlcCIsIHNrLCBzay0+c2tfc3RhdGUsIHNrLT5za19zb2NrZXQpOwogCkBAIC05MDAsOSArODU1LDkgQEAKIAkJCQkJc2stPnNrX3R5cGUgPT0gU09DS19TVFJFQU0pICYmCiAJCQkJCWNvbm4tPmhjb24tPnR5cGUgPT0gQUNMX0xJTkspIHsKIAkJCWwyY2FwX3NvY2tfc2V0X3RpbWVyKHNrLCBzay0+c2tfc25kdGltZW8pOwotCQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShjb25uLCBzaywgcmVhc29uKTsKKwkJCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEoY29ubiwgY2hhbiwgcmVhc29uKTsKIAkJfSBlbHNlCi0JCQlsMmNhcF9jaGFuX2RlbChzaywgcmVhc29uKTsKKwkJCWwyY2FwX2NoYW5fZGVsKGNoYW4sIHJlYXNvbik7CiAJCWJyZWFrOwogCiAJY2FzZSBCVF9DT05ORUNUMjoKQEAgLTkxNywyMCArODcyLDIwIEBACiAJCQllbHNlCiAJCQkJcmVzdWx0ID0gTDJDQVBfQ1JfQkFEX1BTTTsKIAotCQkJcnNwLnNjaWQgICA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+ZGNpZCk7Ci0JCQlyc3AuZGNpZCAgID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5zY2lkKTsKKwkJCXJzcC5zY2lkICAgPSBjcHVfdG9fbGUxNihjaGFuLT5kY2lkKTsKKwkJCXJzcC5kY2lkICAgPSBjcHVfdG9fbGUxNihjaGFuLT5zY2lkKTsKIAkJCXJzcC5yZXN1bHQgPSBjcHVfdG9fbGUxNihyZXN1bHQpOwogCQkJcnNwLnN0YXR1cyA9IGNwdV90b19sZTE2KEwyQ0FQX0NTX05PX0lORk8pOwotCQkJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfcGkoc2spLT5pZGVudCwKLQkJCQkJTDJDQVBfQ09OTl9SU1AsIHNpemVvZihyc3ApLCAmcnNwKTsKKwkJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGNoYW4tPmlkZW50LCBMMkNBUF9DT05OX1JTUCwKKwkJCQkJCQlzaXplb2YocnNwKSwgJnJzcCk7CiAJCX0KIAotCQlsMmNhcF9jaGFuX2RlbChzaywgcmVhc29uKTsKKwkJbDJjYXBfY2hhbl9kZWwoY2hhbiwgcmVhc29uKTsKIAkJYnJlYWs7CiAKIAljYXNlIEJUX0NPTk5FQ1Q6CiAJY2FzZSBCVF9ESVNDT05OOgotCQlsMmNhcF9jaGFuX2RlbChzaywgcmVhc29uKTsKKwkJbDJjYXBfY2hhbl9kZWwoY2hhbiwgcmVhc29uKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtOTQyLDYgKzg5Nyw3IEBACiBzdGF0aWMgaW50IGwyY2FwX3NvY2tfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiA9IGwyY2FwX3BpKHNrKS0+Y2hhbjsKIAlpbnQgZXJyID0gMDsKIAogCUJUX0RCRygic29jayAlcCwgc2sgJXAiLCBzb2NrLCBzayk7CkBAIC05NTEsNyArOTA3LDcgQEAKIAogCWxvY2tfc29jayhzayk7CiAJaWYgKCFzay0+c2tfc2h1dGRvd24pIHsKLQkJaWYgKGwyY2FwX3BpKHNrKS0+bW9kZSA9PSBMMkNBUF9NT0RFX0VSVE0pCisJCWlmIChjaGFuLT5tb2RlID09IEwyQ0FQX01PREVfRVJUTSkKIAkJCWVyciA9IF9fbDJjYXBfd2FpdF9hY2soc2spOwogCiAJCXNrLT5za19zaHV0ZG93biA9IFNIVVRET1dOX01BU0s7CkBAIC05OTgsNDkgKzk1NCw0NyBAQAogdm9pZCBsMmNhcF9zb2NrX2luaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqcGFyZW50KQogewogCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CisJc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4gPSBwaS0+Y2hhbjsKIAogCUJUX0RCRygic2sgJXAiLCBzayk7CiAKIAlpZiAocGFyZW50KSB7CisJCXN0cnVjdCBsMmNhcF9jaGFuICpwY2hhbiA9IGwyY2FwX3BpKHBhcmVudCktPmNoYW47CisKIAkJc2stPnNrX3R5cGUgPSBwYXJlbnQtPnNrX3R5cGU7CiAJCWJ0X3NrKHNrKS0+ZGVmZXJfc2V0dXAgPSBidF9zayhwYXJlbnQpLT5kZWZlcl9zZXR1cDsKIAotCQlwaS0+aW10dSA9IGwyY2FwX3BpKHBhcmVudCktPmltdHU7Ci0JCXBpLT5vbXR1ID0gbDJjYXBfcGkocGFyZW50KS0+b210dTsKLQkJcGktPmNvbmZfc3RhdGUgPSBsMmNhcF9waShwYXJlbnQpLT5jb25mX3N0YXRlOwotCQlwaS0+bW9kZSA9IGwyY2FwX3BpKHBhcmVudCktPm1vZGU7Ci0JCXBpLT5mY3MgID0gbDJjYXBfcGkocGFyZW50KS0+ZmNzOwotCQlwaS0+bWF4X3R4ID0gbDJjYXBfcGkocGFyZW50KS0+bWF4X3R4OwotCQlwaS0+dHhfd2luID0gbDJjYXBfcGkocGFyZW50KS0+dHhfd2luOwotCQlwaS0+c2VjX2xldmVsID0gbDJjYXBfcGkocGFyZW50KS0+c2VjX2xldmVsOwotCQlwaS0+cm9sZV9zd2l0Y2ggPSBsMmNhcF9waShwYXJlbnQpLT5yb2xlX3N3aXRjaDsKLQkJcGktPmZvcmNlX3JlbGlhYmxlID0gbDJjYXBfcGkocGFyZW50KS0+Zm9yY2VfcmVsaWFibGU7Ci0JCXBpLT5mbHVzaGFibGUgPSBsMmNhcF9waShwYXJlbnQpLT5mbHVzaGFibGU7CisJCWNoYW4tPmltdHUgPSBwY2hhbi0+aW10dTsKKwkJY2hhbi0+b210dSA9IHBjaGFuLT5vbXR1OworCQljaGFuLT5jb25mX3N0YXRlID0gcGNoYW4tPmNvbmZfc3RhdGU7CisJCWNoYW4tPm1vZGUgPSBwY2hhbi0+bW9kZTsKKwkJY2hhbi0+ZmNzICA9IHBjaGFuLT5mY3M7CisJCWNoYW4tPm1heF90eCA9IHBjaGFuLT5tYXhfdHg7CisJCWNoYW4tPnR4X3dpbiA9IHBjaGFuLT50eF93aW47CisJCWNoYW4tPnNlY19sZXZlbCA9IHBjaGFuLT5zZWNfbGV2ZWw7CisJCWNoYW4tPnJvbGVfc3dpdGNoID0gcGNoYW4tPnJvbGVfc3dpdGNoOworCQljaGFuLT5mb3JjZV9yZWxpYWJsZSA9IHBjaGFuLT5mb3JjZV9yZWxpYWJsZTsKKwkJY2hhbi0+Zmx1c2hhYmxlID0gcGNoYW4tPmZsdXNoYWJsZTsKIAl9IGVsc2UgewotCQlwaS0+aW10dSA9IEwyQ0FQX0RFRkFVTFRfTVRVOwotCQlwaS0+b210dSA9IDA7CisJCWNoYW4tPmltdHUgPSBMMkNBUF9ERUZBVUxUX01UVTsKKwkJY2hhbi0+b210dSA9IDA7CiAJCWlmICghZGlzYWJsZV9lcnRtICYmIHNrLT5za190eXBlID09IFNPQ0tfU1RSRUFNKSB7Ci0JCQlwaS0+bW9kZSA9IEwyQ0FQX01PREVfRVJUTTsKLQkJCXBpLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfU1RBVEUyX0RFVklDRTsKKwkJCWNoYW4tPm1vZGUgPSBMMkNBUF9NT0RFX0VSVE07CisJCQljaGFuLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfU1RBVEUyX0RFVklDRTsKIAkJfSBlbHNlIHsKLQkJCXBpLT5tb2RlID0gTDJDQVBfTU9ERV9CQVNJQzsKKwkJCWNoYW4tPm1vZGUgPSBMMkNBUF9NT0RFX0JBU0lDOwogCQl9Ci0JCXBpLT5tYXhfdHggPSBMMkNBUF9ERUZBVUxUX01BWF9UWDsKLQkJcGktPmZjcyAgPSBMMkNBUF9GQ1NfQ1JDMTY7Ci0JCXBpLT50eF93aW4gPSBMMkNBUF9ERUZBVUxUX1RYX1dJTkRPVzsKLQkJcGktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX0xPVzsKLQkJcGktPnJvbGVfc3dpdGNoID0gMDsKLQkJcGktPmZvcmNlX3JlbGlhYmxlID0gMDsKLQkJcGktPmZsdXNoYWJsZSA9IEJUX0ZMVVNIQUJMRV9PRkY7CisJCWNoYW4tPm1heF90eCA9IEwyQ0FQX0RFRkFVTFRfTUFYX1RYOworCQljaGFuLT5mY3MgID0gTDJDQVBfRkNTX0NSQzE2OworCQljaGFuLT50eF93aW4gPSBMMkNBUF9ERUZBVUxUX1RYX1dJTkRPVzsKKwkJY2hhbi0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfTE9XOworCQljaGFuLT5yb2xlX3N3aXRjaCA9IDA7CisJCWNoYW4tPmZvcmNlX3JlbGlhYmxlID0gMDsKKwkJY2hhbi0+Zmx1c2hhYmxlID0gQlRfRkxVU0hBQkxFX09GRjsKIAl9CiAKIAkvKiBEZWZhdWx0IGNvbmZpZyBvcHRpb25zICovCi0JcGktPmNvbmZfbGVuID0gMDsKLQlwaS0+Zmx1c2hfdG8gPSBMMkNBUF9ERUZBVUxUX0ZMVVNIX1RPOwotCXNrYl9xdWV1ZV9oZWFkX2luaXQoVFhfUVVFVUUoc2spKTsKLQlza2JfcXVldWVfaGVhZF9pbml0KFNSRUpfUVVFVUUoc2spKTsKLQlza2JfcXVldWVfaGVhZF9pbml0KEJVU1lfUVVFVUUoc2spKTsKLQlJTklUX0xJU1RfSEVBRChTUkVKX0xJU1Qoc2spKTsKKwljaGFuLT5mbHVzaF90byA9IEwyQ0FQX0RFRkFVTFRfRkxVU0hfVE87CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHJvdG8gbDJjYXBfcHJvdG8gPSB7CkBAIC0xMDcwLDcgKzEwMjQsNiBAQAogCiAJc2V0dXBfdGltZXIoJnNrLT5za190aW1lciwgbDJjYXBfc29ja190aW1lb3V0LCAodW5zaWduZWQgbG9uZykgc2spOwogCi0JYnRfc29ja19saW5rKCZsMmNhcF9za19saXN0LCBzayk7CiAJcmV0dXJuIHNrOwogfQogCkBAIC0xMDc4LDYgKzEwMzEsNyBAQAogCQkJICAgICBpbnQga2VybikKIHsKIAlzdHJ1Y3Qgc29jayAqc2s7CisJc3RydWN0IGwyY2FwX2NoYW4gKmNoYW47CiAKIAlCVF9EQkcoInNvY2sgJXAiLCBzb2NrKTsKIApAQCAtMTA5NiwxMSArMTA1MCwxOSBAQAogCWlmICghc2spCiAJCXJldHVybiAtRU5PTUVNOwogCisJY2hhbiA9IGwyY2FwX2NoYW5fY3JlYXRlKHNrKTsKKwlpZiAoIWNoYW4pIHsKKwkJbDJjYXBfc29ja19raWxsKHNrKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbDJjYXBfcGkoc2spLT5jaGFuID0gY2hhbjsKKwogCWwyY2FwX3NvY2tfaW5pdChzaywgTlVMTCk7CiAJcmV0dXJuIDA7CiB9CiAKLWNvbnN0IHN0cnVjdCBwcm90b19vcHMgbDJjYXBfc29ja19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBsMmNhcF9zb2NrX29wcyA9IHsKIAkuZmFtaWx5CQk9IFBGX0JMVUVUT09USCwKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLnJlbGVhc2UJPSBsMmNhcF9zb2NrX3JlbGVhc2UsCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL21nbXQuYyBiL25ldC9ibHVldG9vdGgvbWdtdC5jCmluZGV4IDQ0NzZkOGUuLmRhZTM4MmMgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvbWdtdC5jCisrKyBiL25ldC9ibHVldG9vdGgvbWdtdC5jCkBAIC0zNiw3ICszNiw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCV9fdTE2IG9wY29kZTsKIAlpbnQgaW5kZXg7Ci0Jdm9pZCAqY21kOworCXZvaWQgKnBhcmFtOwogCXN0cnVjdCBzb2NrICpzazsKIAl2b2lkICp1c2VyX2RhdGE7CiB9OwpAQCAtMTc5LDEwICsxNzksMTIgQEAKIAogCWhjaV9kZWxfb2ZmX3RpbWVyKGhkZXYpOwogCi0JaGNpX2Rldl9sb2NrX2JoKGhkZXYpOworCWhjaV9kZXZfbG9jayhoZGV2KTsKIAogCXNldF9iaXQoSENJX01HTVQsICZoZGV2LT5mbGFncyk7CiAKKwltZW1zZXQoJnJwLCAwLCBzaXplb2YocnApKTsKKwogCXJwLnR5cGUgPSBoZGV2LT5kZXZfdHlwZTsKIAogCXJwLnBvd2VyZWQgPSB0ZXN0X2JpdChIQ0lfVVAsICZoZGV2LT5mbGFncyk7CkBAIC0yMDQsNyArMjA2LDkgQEAKIAlycC5oY2lfdmVyID0gaGRldi0+aGNpX3ZlcjsKIAlwdXRfdW5hbGlnbmVkX2xlMTYoaGRldi0+aGNpX3JldiwgJnJwLmhjaV9yZXYpOwogCi0JaGNpX2Rldl91bmxvY2tfYmgoaGRldik7CisJbWVtY3B5KHJwLm5hbWUsIGhkZXYtPmRldl9uYW1lLCBzaXplb2YoaGRldi0+ZGV2X25hbWUpKTsKKworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwogCWhjaV9kZXZfcHV0KGhkZXYpOwogCiAJcmV0dXJuIGNtZF9jb21wbGV0ZShzaywgaW5kZXgsIE1HTVRfT1BfUkVBRF9JTkZPLCAmcnAsIHNpemVvZihycCkpOwpAQCAtMjEzLDcgKzIxNyw3IEBACiBzdGF0aWMgdm9pZCBtZ210X3BlbmRpbmdfZnJlZShzdHJ1Y3QgcGVuZGluZ19jbWQgKmNtZCkKIHsKIAlzb2NrX3B1dChjbWQtPnNrKTsKLQlrZnJlZShjbWQtPmNtZCk7CisJa2ZyZWUoY21kLT5wYXJhbSk7CiAJa2ZyZWUoY21kKTsKIH0KIApAQCAtMjI5LDEzICsyMzMsMTQgQEAKIAljbWQtPm9wY29kZSA9IG9wY29kZTsKIAljbWQtPmluZGV4ID0gaW5kZXg7CiAKLQljbWQtPmNtZCA9IGttYWxsb2MobGVuLCBHRlBfQVRPTUlDKTsKLQlpZiAoIWNtZC0+Y21kKSB7CisJY21kLT5wYXJhbSA9IGttYWxsb2MobGVuLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWNtZC0+cGFyYW0pIHsKIAkJa2ZyZWUoY21kKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JbWVtY3B5KGNtZC0+Y21kLCBkYXRhLCBsZW4pOworCWlmIChkYXRhKQorCQltZW1jcHkoY21kLT5wYXJhbSwgZGF0YSwgbGVuKTsKIAogCWNtZC0+c2sgPSBzazsKIAlzb2NrX2hvbGQoc2spOwpAQCAtMzExLDcgKzMxNiw3IEBACiAJaWYgKCFoZGV2KQogCQlyZXR1cm4gY21kX3N0YXR1cyhzaywgaW5kZXgsIE1HTVRfT1BfU0VUX1BPV0VSRUQsIEVOT0RFVik7CiAKLQloY2lfZGV2X2xvY2tfYmgoaGRldik7CisJaGNpX2Rldl9sb2NrKGhkZXYpOwogCiAJdXAgPSB0ZXN0X2JpdChIQ0lfVVAsICZoZGV2LT5mbGFncyk7CiAJaWYgKChjcC0+dmFsICYmIHVwKSB8fCAoIWNwLT52YWwgJiYgIXVwKSkgewpAQCAtMzM4LDcgKzM0Myw3IEBACiAJZXJyID0gMDsKIAogZmFpbGVkOgotCWhjaV9kZXZfdW5sb2NrX2JoKGhkZXYpOworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwogCWhjaV9kZXZfcHV0KGhkZXYpOwogCXJldHVybiBlcnI7CiB9CkBAIC0zNjMsNyArMzY4LDcgQEAKIAlpZiAoIWhkZXYpCiAJCXJldHVybiBjbWRfc3RhdHVzKHNrLCBpbmRleCwgTUdNVF9PUF9TRVRfRElTQ09WRVJBQkxFLCBFTk9ERVYpOwogCi0JaGNpX2Rldl9sb2NrX2JoKGhkZXYpOworCWhjaV9kZXZfbG9jayhoZGV2KTsKIAogCWlmICghdGVzdF9iaXQoSENJX1VQLCAmaGRldi0+ZmxhZ3MpKSB7CiAJCWVyciA9IGNtZF9zdGF0dXMoc2ssIGluZGV4LCBNR01UX09QX1NFVF9ESVNDT1ZFUkFCTEUsIEVORVRET1dOKTsKQEAgLTM5OCw3ICs0MDMsNyBAQAogCQltZ210X3BlbmRpbmdfcmVtb3ZlKGNtZCk7CiAKIGZhaWxlZDoKLQloY2lfZGV2X3VubG9ja19iaChoZGV2KTsKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKIAloY2lfZGV2X3B1dChoZGV2KTsKIAogCXJldHVybiBlcnI7CkBAIC00MjQsNyArNDI5LDcgQEAKIAlpZiAoIWhkZXYpCiAJCXJldHVybiBjbWRfc3RhdHVzKHNrLCBpbmRleCwgTUdNVF9PUF9TRVRfQ09OTkVDVEFCTEUsIEVOT0RFVik7CiAKLQloY2lfZGV2X2xvY2tfYmgoaGRldik7CisJaGNpX2Rldl9sb2NrKGhkZXYpOwogCiAJaWYgKCF0ZXN0X2JpdChIQ0lfVVAsICZoZGV2LT5mbGFncykpIHsKIAkJZXJyID0gY21kX3N0YXR1cyhzaywgaW5kZXgsIE1HTVRfT1BfU0VUX0NPTk5FQ1RBQkxFLCBFTkVURE9XTik7CkBAIC00NTgsNyArNDYzLDcgQEAKIAkJbWdtdF9wZW5kaW5nX3JlbW92ZShjbWQpOwogCiBmYWlsZWQ6Ci0JaGNpX2Rldl91bmxvY2tfYmgoaGRldik7CisJaGNpX2Rldl91bmxvY2soaGRldik7CiAJaGNpX2Rldl9wdXQoaGRldik7CiAKIAlyZXR1cm4gZXJyOwpAQCAtNTE3LDcgKzUyMiw3IEBACiAJaWYgKCFoZGV2KQogCQlyZXR1cm4gY21kX3N0YXR1cyhzaywgaW5kZXgsIE1HTVRfT1BfU0VUX1BBSVJBQkxFLCBFTk9ERVYpOwogCi0JaGNpX2Rldl9sb2NrX2JoKGhkZXYpOworCWhjaV9kZXZfbG9jayhoZGV2KTsKIAogCWlmIChjcC0+dmFsKQogCQlzZXRfYml0KEhDSV9QQUlSQUJMRSwgJmhkZXYtPmZsYWdzKTsKQEAgLTUzMywxMiArNTM4LDE1NiBAQAogCWVyciA9IG1nbXRfZXZlbnQoTUdNVF9FVl9QQUlSQUJMRSwgaW5kZXgsICZldiwgc2l6ZW9mKGV2KSwgc2spOwogCiBmYWlsZWQ6Ci0JaGNpX2Rldl91bmxvY2tfYmgoaGRldik7CisJaGNpX2Rldl91bmxvY2soaGRldik7CiAJaGNpX2Rldl9wdXQoaGRldik7CiAKIAlyZXR1cm4gZXJyOwogfQogCisjZGVmaW5lIEVJUl9GTEFHUwkJMHgwMSAvKiBmbGFncyAqLworI2RlZmluZSBFSVJfVVVJRDE2X1NPTUUJCTB4MDIgLyogMTYtYml0IFVVSUQsIG1vcmUgYXZhaWxhYmxlICovCisjZGVmaW5lIEVJUl9VVUlEMTZfQUxMCQkweDAzIC8qIDE2LWJpdCBVVUlELCBhbGwgbGlzdGVkICovCisjZGVmaW5lIEVJUl9VVUlEMzJfU09NRQkJMHgwNCAvKiAzMi1iaXQgVVVJRCwgbW9yZSBhdmFpbGFibGUgKi8KKyNkZWZpbmUgRUlSX1VVSUQzMl9BTEwJCTB4MDUgLyogMzItYml0IFVVSUQsIGFsbCBsaXN0ZWQgKi8KKyNkZWZpbmUgRUlSX1VVSUQxMjhfU09NRQkweDA2IC8qIDEyOC1iaXQgVVVJRCwgbW9yZSBhdmFpbGFibGUgKi8KKyNkZWZpbmUgRUlSX1VVSUQxMjhfQUxMCQkweDA3IC8qIDEyOC1iaXQgVVVJRCwgYWxsIGxpc3RlZCAqLworI2RlZmluZSBFSVJfTkFNRV9TSE9SVAkJMHgwOCAvKiBzaG9ydGVuZWQgbG9jYWwgbmFtZSAqLworI2RlZmluZSBFSVJfTkFNRV9DT01QTEVURQkweDA5IC8qIGNvbXBsZXRlIGxvY2FsIG5hbWUgKi8KKyNkZWZpbmUgRUlSX1RYX1BPV0VSCQkweDBBIC8qIHRyYW5zbWl0IHBvd2VyIGxldmVsICovCisjZGVmaW5lIEVJUl9ERVZJQ0VfSUQJCTB4MTAgLyogZGV2aWNlIElEICovCisKKyNkZWZpbmUgUE5QX0lORk9fU1ZDTEFTU19JRAkJMHgxMjAwCisKK3N0YXRpYyB1OCBibHVldG9vdGhfYmFzZV91dWlkW10gPSB7CisJCQkweEZCLCAweDM0LCAweDlCLCAweDVGLCAweDgwLCAweDAwLCAweDAwLCAweDgwLAorCQkJMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKK307CisKK3N0YXRpYyB1MTYgZ2V0X3V1aWQxNih1OCAqdXVpZDEyOCkKK3sKKwl1MzIgdmFsOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHsKKwkJaWYgKGJsdWV0b290aF9iYXNlX3V1aWRbaV0gIT0gdXVpZDEyOFtpXSkKKwkJCXJldHVybiAwOworCX0KKworCW1lbWNweSgmdmFsLCAmdXVpZDEyOFsxMl0sIDQpOworCisJdmFsID0gbGUzMl90b19jcHUodmFsKTsKKwlpZiAodmFsID4gMHhmZmZmKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAodTE2KSB2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0ZV9laXIoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHU4ICpkYXRhKQoreworCXU4ICpwdHIgPSBkYXRhOworCXUxNiBlaXJfbGVuID0gMDsKKwl1MTYgdXVpZDE2X2xpc3RbSENJX01BWF9FSVJfTEVOR1RIIC8gc2l6ZW9mKHUxNildOworCWludCBpLCB0cnVuY2F0ZWQgPSAwOworCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisJc2l6ZV90IG5hbWVfbGVuOworCisJbmFtZV9sZW4gPSBzdHJsZW4oaGRldi0+ZGV2X25hbWUpOworCisJaWYgKG5hbWVfbGVuID4gMCkgeworCQkvKiBFSVIgRGF0YSB0eXBlICovCisJCWlmIChuYW1lX2xlbiA+IDQ4KSB7CisJCQluYW1lX2xlbiA9IDQ4OworCQkJcHRyWzFdID0gRUlSX05BTUVfU0hPUlQ7CisJCX0gZWxzZQorCQkJcHRyWzFdID0gRUlSX05BTUVfQ09NUExFVEU7CisKKwkJLyogRUlSIERhdGEgbGVuZ3RoICovCisJCXB0clswXSA9IG5hbWVfbGVuICsgMTsKKworCQltZW1jcHkocHRyICsgMiwgaGRldi0+ZGV2X25hbWUsIG5hbWVfbGVuKTsKKworCQllaXJfbGVuICs9IChuYW1lX2xlbiArIDIpOworCQlwdHIgKz0gKG5hbWVfbGVuICsgMik7CisJfQorCisJbWVtc2V0KHV1aWQxNl9saXN0LCAwLCBzaXplb2YodXVpZDE2X2xpc3QpKTsKKworCS8qIEdyb3VwIGFsbCBVVUlEMTYgdHlwZXMgKi8KKwlsaXN0X2Zvcl9lYWNoKHAsICZoZGV2LT51dWlkcykgeworCQlzdHJ1Y3QgYnRfdXVpZCAqdXVpZCA9IGxpc3RfZW50cnkocCwgc3RydWN0IGJ0X3V1aWQsIGxpc3QpOworCQl1MTYgdXVpZDE2OworCisJCXV1aWQxNiA9IGdldF91dWlkMTYodXVpZC0+dXVpZCk7CisJCWlmICh1dWlkMTYgPT0gMCkKKwkJCXJldHVybjsKKworCQlpZiAodXVpZDE2IDwgMHgxMTAwKQorCQkJY29udGludWU7CisKKwkJaWYgKHV1aWQxNiA9PSBQTlBfSU5GT19TVkNMQVNTX0lEKQorCQkJY29udGludWU7CisKKwkJLyogU3RvcCBpZiBub3QgZW5vdWdoIHNwYWNlIHRvIHB1dCBuZXh0IFVVSUQgKi8KKwkJaWYgKGVpcl9sZW4gKyAyICsgc2l6ZW9mKHUxNikgPiBIQ0lfTUFYX0VJUl9MRU5HVEgpIHsKKwkJCXRydW5jYXRlZCA9IDE7CisJCQlicmVhazsKKwkJfQorCisJCS8qIENoZWNrIGZvciBkdXBsaWNhdGVzICovCisJCWZvciAoaSA9IDA7IHV1aWQxNl9saXN0W2ldICE9IDA7IGkrKykKKwkJCWlmICh1dWlkMTZfbGlzdFtpXSA9PSB1dWlkMTYpCisJCQkJYnJlYWs7CisKKwkJaWYgKHV1aWQxNl9saXN0W2ldID09IDApIHsKKwkJCXV1aWQxNl9saXN0W2ldID0gdXVpZDE2OworCQkJZWlyX2xlbiArPSBzaXplb2YodTE2KTsKKwkJfQorCX0KKworCWlmICh1dWlkMTZfbGlzdFswXSAhPSAwKSB7CisJCXU4ICpsZW5ndGggPSBwdHI7CisKKwkJLyogRUlSIERhdGEgdHlwZSAqLworCQlwdHJbMV0gPSB0cnVuY2F0ZWQgPyBFSVJfVVVJRDE2X1NPTUUgOiBFSVJfVVVJRDE2X0FMTDsKKworCQlwdHIgKz0gMjsKKwkJZWlyX2xlbiArPSAyOworCisJCWZvciAoaSA9IDA7IHV1aWQxNl9saXN0W2ldICE9IDA7IGkrKykgeworCQkJKnB0cisrID0gKHV1aWQxNl9saXN0W2ldICYgMHgwMGZmKTsKKwkJCSpwdHIrKyA9ICh1dWlkMTZfbGlzdFtpXSAmIDB4ZmYwMCkgPj4gODsKKwkJfQorCisJCS8qIEVJUiBEYXRhIGxlbmd0aCAqLworCQkqbGVuZ3RoID0gKGkgKiBzaXplb2YodTE2KSkgKyAxOworCX0KK30KKworc3RhdGljIGludCB1cGRhdGVfZWlyKHN0cnVjdCBoY2lfZGV2ICpoZGV2KQoreworCXN0cnVjdCBoY2lfY3Bfd3JpdGVfZWlyIGNwOworCisJaWYgKCEoaGRldi0+ZmVhdHVyZXNbNl0gJiBMTVBfRVhUX0lOUSkpCisJCXJldHVybiAwOworCisJaWYgKGhkZXYtPnNzcF9tb2RlID09IDApCisJCXJldHVybiAwOworCisJaWYgKHRlc3RfYml0KEhDSV9TRVJWSUNFX0NBQ0hFLCAmaGRldi0+ZmxhZ3MpKQorCQlyZXR1cm4gMDsKKworCW1lbXNldCgmY3AsIDAsIHNpemVvZihjcCkpOworCisJY3JlYXRlX2VpcihoZGV2LCBjcC5kYXRhKTsKKworCWlmIChtZW1jbXAoY3AuZGF0YSwgaGRldi0+ZWlyLCBzaXplb2YoY3AuZGF0YSkpID09IDApCisJCXJldHVybiAwOworCisJbWVtY3B5KGhkZXYtPmVpciwgY3AuZGF0YSwgc2l6ZW9mKGNwLmRhdGEpKTsKKworCXJldHVybiBoY2lfc2VuZF9jbWQoaGRldiwgSENJX09QX1dSSVRFX0VJUiwgc2l6ZW9mKGNwKSwgJmNwKTsKK30KKwogc3RhdGljIHU4IGdldF9zZXJ2aWNlX2NsYXNzZXMoc3RydWN0IGhjaV9kZXYgKmhkZXYpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqcDsKQEAgLTU5MCw3ICs3MzksNyBAQAogCWlmICghaGRldikKIAkJcmV0dXJuIGNtZF9zdGF0dXMoc2ssIGluZGV4LCBNR01UX09QX0FERF9VVUlELCBFTk9ERVYpOwogCi0JaGNpX2Rldl9sb2NrX2JoKGhkZXYpOworCWhjaV9kZXZfbG9jayhoZGV2KTsKIAogCXV1aWQgPSBrbWFsbG9jKHNpemVvZigqdXVpZCksIEdGUF9BVE9NSUMpOwogCWlmICghdXVpZCkgewpAQCAtNjA3LDEwICs3NTYsMTQgQEAKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBmYWlsZWQ7CiAKKwllcnIgPSB1cGRhdGVfZWlyKGhkZXYpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGZhaWxlZDsKKwogCWVyciA9IGNtZF9jb21wbGV0ZShzaywgaW5kZXgsIE1HTVRfT1BfQUREX1VVSUQsIE5VTEwsIDApOwogCiBmYWlsZWQ6Ci0JaGNpX2Rldl91bmxvY2tfYmgoaGRldik7CisJaGNpX2Rldl91bmxvY2soaGRldik7CiAJaGNpX2Rldl9wdXQoaGRldik7CiAKIAlyZXR1cm4gZXJyOwpAQCAtNjM1LDcgKzc4OCw3IEBACiAJaWYgKCFoZGV2KQogCQlyZXR1cm4gY21kX3N0YXR1cyhzaywgaW5kZXgsIE1HTVRfT1BfUkVNT1ZFX1VVSUQsIEVOT0RFVik7CiAKLQloY2lfZGV2X2xvY2tfYmgoaGRldik7CisJaGNpX2Rldl9sb2NrKGhkZXYpOwogCiAJaWYgKG1lbWNtcChjcC0+dXVpZCwgYnRfdXVpZF9hbnksIDE2KSA9PSAwKSB7CiAJCWVyciA9IGhjaV91dWlkc19jbGVhcihoZGV2KTsKQEAgLTY2MywxMCArODE2LDE0IEBACiAJaWYgKGVyciA8IDApCiAJCWdvdG8gdW5sb2NrOwogCisJZXJyID0gdXBkYXRlX2VpcihoZGV2KTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byB1bmxvY2s7CisKIAllcnIgPSBjbWRfY29tcGxldGUoc2ssIGluZGV4LCBNR01UX09QX1JFTU9WRV9VVUlELCBOVUxMLCAwKTsKIAogdW5sb2NrOgotCWhjaV9kZXZfdW5sb2NrX2JoKGhkZXYpOworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwogCWhjaV9kZXZfcHV0KGhkZXYpOwogCiAJcmV0dXJuIGVycjsKQEAgLTY5MCw3ICs4NDcsNyBAQAogCWlmICghaGRldikKIAkJcmV0dXJuIGNtZF9zdGF0dXMoc2ssIGluZGV4LCBNR01UX09QX1NFVF9ERVZfQ0xBU1MsIEVOT0RFVik7CiAKLQloY2lfZGV2X2xvY2tfYmgoaGRldik7CisJaGNpX2Rldl9sb2NrKGhkZXYpOwogCiAJaGRldi0+bWFqb3JfY2xhc3MgPSBjcC0+bWFqb3I7CiAJaGRldi0+bWlub3JfY2xhc3MgPSBjcC0+bWlub3I7CkBAIC03MDAsNyArODU3LDcgQEAKIAlpZiAoZXJyID09IDApCiAJCWVyciA9IGNtZF9jb21wbGV0ZShzaywgaW5kZXgsIE1HTVRfT1BfU0VUX0RFVl9DTEFTUywgTlVMTCwgMCk7CiAKLQloY2lfZGV2X3VubG9ja19iaChoZGV2KTsKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKIAloY2lfZGV2X3B1dChoZGV2KTsKIAogCXJldHVybiBlcnI7CkBAIC03MjIsNyArODc5LDcgQEAKIAlpZiAoIWhkZXYpCiAJCXJldHVybiBjbWRfc3RhdHVzKHNrLCBpbmRleCwgTUdNVF9PUF9TRVRfU0VSVklDRV9DQUNIRSwgRU5PREVWKTsKIAotCWhjaV9kZXZfbG9ja19iaChoZGV2KTsKKwloY2lfZGV2X2xvY2soaGRldik7CiAKIAlCVF9EQkcoImhjaSV1IGVuYWJsZSAlZCIsIGluZGV4LCBjcC0+ZW5hYmxlKTsKIApAQCAtNzMyLDEzICs4ODksMTUgQEAKIAl9IGVsc2UgewogCQljbGVhcl9iaXQoSENJX1NFUlZJQ0VfQ0FDSEUsICZoZGV2LT5mbGFncyk7CiAJCWVyciA9IHVwZGF0ZV9jbGFzcyhoZGV2KTsKKwkJaWYgKGVyciA9PSAwKQorCQkJZXJyID0gdXBkYXRlX2VpcihoZGV2KTsKIAl9CiAKIAlpZiAoZXJyID09IDApCiAJCWVyciA9IGNtZF9jb21wbGV0ZShzaywgaW5kZXgsIE1HTVRfT1BfU0VUX1NFUlZJQ0VfQ0FDSEUsIE5VTEwsCiAJCQkJCQkJCQkwKTsKIAotCWhjaV9kZXZfdW5sb2NrX2JoKGhkZXYpOworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwogCWhjaV9kZXZfcHV0KGhkZXYpOwogCiAJcmV0dXJuIGVycjsKQEAgLTc3Miw3ICs5MzEsNyBAQAogCUJUX0RCRygiaGNpJXUgZGVidWdfa2V5cyAldSBrZXlfY291bnQgJXUiLCBpbmRleCwgY3AtPmRlYnVnX2tleXMsCiAJCQkJCQkJCWtleV9jb3VudCk7CiAKLQloY2lfZGV2X2xvY2tfYmgoaGRldik7CisJaGNpX2Rldl9sb2NrKGhkZXYpOwogCiAJaGNpX2xpbmtfa2V5c19jbGVhcihoZGV2KTsKIApAQCAtNzg2LDExICs5NDUsMTEgQEAKIAlmb3IgKGkgPSAwOyBpIDwga2V5X2NvdW50OyBpKyspIHsKIAkJc3RydWN0IG1nbXRfa2V5X2luZm8gKmtleSA9ICZjcC0+a2V5c1tpXTsKIAotCQloY2lfYWRkX2xpbmtfa2V5KGhkZXYsIDAsICZrZXktPmJkYWRkciwga2V5LT52YWwsIGtleS0+dHlwZSwKKwkJaGNpX2FkZF9saW5rX2tleShoZGV2LCBOVUxMLCAwLCAma2V5LT5iZGFkZHIsIGtleS0+dmFsLCBrZXktPnR5cGUsCiAJCQkJCQkJCWtleS0+cGluX2xlbik7CiAJfQogCi0JaGNpX2Rldl91bmxvY2tfYmgoaGRldik7CisJaGNpX2Rldl91bmxvY2soaGRldik7CiAJaGNpX2Rldl9wdXQoaGRldik7CiAKIAlyZXR1cm4gMDsKQEAgLTgxMiw3ICs5NzEsNyBAQAogCWlmICghaGRldikKIAkJcmV0dXJuIGNtZF9zdGF0dXMoc2ssIGluZGV4LCBNR01UX09QX1JFTU9WRV9LRVksIEVOT0RFVik7CiAKLQloY2lfZGV2X2xvY2tfYmgoaGRldik7CisJaGNpX2Rldl9sb2NrKGhkZXYpOwogCiAJZXJyID0gaGNpX3JlbW92ZV9saW5rX2tleShoZGV2LCAmY3AtPmJkYWRkcik7CiAJaWYgKGVyciA8IDApIHsKQEAgLTgzNSw3ICs5OTQsNyBAQAogCX0KIAogdW5sb2NrOgotCWhjaV9kZXZfdW5sb2NrX2JoKGhkZXYpOworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwogCWhjaV9kZXZfcHV0KGhkZXYpOwogCiAJcmV0dXJuIGVycjsKQEAgLTg2MSw3ICsxMDIwLDcgQEAKIAlpZiAoIWhkZXYpCiAJCXJldHVybiBjbWRfc3RhdHVzKHNrLCBpbmRleCwgTUdNVF9PUF9ESVNDT05ORUNULCBFTk9ERVYpOwogCi0JaGNpX2Rldl9sb2NrX2JoKGhkZXYpOworCWhjaV9kZXZfbG9jayhoZGV2KTsKIAogCWlmICghdGVzdF9iaXQoSENJX1VQLCAmaGRldi0+ZmxhZ3MpKSB7CiAJCWVyciA9IGNtZF9zdGF0dXMoc2ssIGluZGV4LCBNR01UX09QX0RJU0NPTk5FQ1QsIEVORVRET1dOKTsKQEAgLTg3NCw2ICsxMDMzLDkgQEAKIAl9CiAKIAljb25uID0gaGNpX2Nvbm5faGFzaF9sb29rdXBfYmEoaGRldiwgQUNMX0xJTkssICZjcC0+YmRhZGRyKTsKKwlpZiAoIWNvbm4pCisJCWNvbm4gPSBoY2lfY29ubl9oYXNoX2xvb2t1cF9iYShoZGV2LCBMRV9MSU5LLCAmY3AtPmJkYWRkcik7CisKIAlpZiAoIWNvbm4pIHsKIAkJZXJyID0gY21kX3N0YXR1cyhzaywgaW5kZXgsIE1HTVRfT1BfRElTQ09OTkVDVCwgRU5PVENPTk4pOwogCQlnb3RvIGZhaWxlZDsKQEAgLTg5Myw3ICsxMDU1LDcgQEAKIAkJbWdtdF9wZW5kaW5nX3JlbW92ZShjbWQpOwogCiBmYWlsZWQ6Ci0JaGNpX2Rldl91bmxvY2tfYmgoaGRldik7CisJaGNpX2Rldl91bmxvY2soaGRldik7CiAJaGNpX2Rldl9wdXQoaGRldik7CiAKIAlyZXR1cm4gZXJyOwpAQCAtOTE0LDcgKzEwNzYsNyBAQAogCWlmICghaGRldikKIAkJcmV0dXJuIGNtZF9zdGF0dXMoc2ssIGluZGV4LCBNR01UX09QX0dFVF9DT05ORUNUSU9OUywgRU5PREVWKTsKIAotCWhjaV9kZXZfbG9ja19iaChoZGV2KTsKKwloY2lfZGV2X2xvY2soaGRldik7CiAKIAljb3VudCA9IDA7CiAJbGlzdF9mb3JfZWFjaChwLCAmaGRldi0+Y29ubl9oYXNoLmxpc3QpIHsKQEAgLTk0NSw3ICsxMTA3LDcgQEAKIAogdW5sb2NrOgogCWtmcmVlKHJwKTsKLQloY2lfZGV2X3VubG9ja19iaChoZGV2KTsKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKIAloY2lfZGV2X3B1dChoZGV2KTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtOTcwLDcgKzExMzIsNyBAQAogCWlmICghaGRldikKIAkJcmV0dXJuIGNtZF9zdGF0dXMoc2ssIGluZGV4LCBNR01UX09QX1BJTl9DT0RFX1JFUExZLCBFTk9ERVYpOwogCi0JaGNpX2Rldl9sb2NrX2JoKGhkZXYpOworCWhjaV9kZXZfbG9jayhoZGV2KTsKIAogCWlmICghdGVzdF9iaXQoSENJX1VQLCAmaGRldi0+ZmxhZ3MpKSB7CiAJCWVyciA9IGNtZF9zdGF0dXMoc2ssIGluZGV4LCBNR01UX09QX1BJTl9DT0RFX1JFUExZLCBFTkVURE9XTik7CkBAIC05OTIsNyArMTE1NCw3IEBACiAJCW1nbXRfcGVuZGluZ19yZW1vdmUoY21kKTsKIAogZmFpbGVkOgotCWhjaV9kZXZfdW5sb2NrX2JoKGhkZXYpOworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwogCWhjaV9kZXZfcHV0KGhkZXYpOwogCiAJcmV0dXJuIGVycjsKQEAgLTEwMTksNyArMTE4MSw3IEBACiAJCXJldHVybiBjbWRfc3RhdHVzKHNrLCBpbmRleCwgTUdNVF9PUF9QSU5fQ09ERV9ORUdfUkVQTFksCiAJCQkJCQkJCQlFTk9ERVYpOwogCi0JaGNpX2Rldl9sb2NrX2JoKGhkZXYpOworCWhjaV9kZXZfbG9jayhoZGV2KTsKIAogCWlmICghdGVzdF9iaXQoSENJX1VQLCAmaGRldi0+ZmxhZ3MpKSB7CiAJCWVyciA9IGNtZF9zdGF0dXMoc2ssIGluZGV4LCBNR01UX09QX1BJTl9DT0RFX05FR19SRVBMWSwKQEAgLTEwNDAsNyArMTIwMiw3IEBACiAJCW1nbXRfcGVuZGluZ19yZW1vdmUoY21kKTsKIAogZmFpbGVkOgotCWhjaV9kZXZfdW5sb2NrX2JoKGhkZXYpOworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwogCWhjaV9kZXZfcHV0KGhkZXYpOwogCiAJcmV0dXJuIGVycjsKQEAgLTEwNjMsMTQgKzEyMjUsMTQgQEAKIAlpZiAoIWhkZXYpCiAJCXJldHVybiBjbWRfc3RhdHVzKHNrLCBpbmRleCwgTUdNVF9PUF9TRVRfSU9fQ0FQQUJJTElUWSwgRU5PREVWKTsKIAotCWhjaV9kZXZfbG9ja19iaChoZGV2KTsKKwloY2lfZGV2X2xvY2soaGRldik7CiAKIAloZGV2LT5pb19jYXBhYmlsaXR5ID0gY3AtPmlvX2NhcGFiaWxpdHk7CiAKIAlCVF9EQkcoIiVzIElPIGNhcGFiaWxpdHkgc2V0IHRvIDB4JTAyeCIsIGhkZXYtPm5hbWUsCiAJCQkJCQkJaGRldi0+aW9fY2FwYWJpbGl0eSk7CiAKLQloY2lfZGV2X3VubG9ja19iaChoZGV2KTsKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKIAloY2lfZGV2X3B1dChoZGV2KTsKIAogCXJldHVybiBjbWRfY29tcGxldGUoc2ssIGluZGV4LCBNR01UX09QX1NFVF9JT19DQVBBQklMSVRZLCBOVUxMLCAwKTsKQEAgLTExNTYsNyArMTMxOCw3IEBACiAJaWYgKCFoZGV2KQogCQlyZXR1cm4gY21kX3N0YXR1cyhzaywgaW5kZXgsIE1HTVRfT1BfUEFJUl9ERVZJQ0UsIEVOT0RFVik7CiAKLQloY2lfZGV2X2xvY2tfYmgoaGRldik7CisJaGNpX2Rldl9sb2NrKGhkZXYpOwogCiAJaWYgKGNwLT5pb19jYXAgPT0gMHgwMykgewogCQlzZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9NRURJVU07CkBAIC0xMTk4LDcgKzEzNjAsNyBAQAogCWVyciA9IDA7CiAKIHVubG9jazoKLQloY2lfZGV2X3VubG9ja19iaChoZGV2KTsKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKIAloY2lfZGV2X3B1dChoZGV2KTsKIAogCXJldHVybiBlcnI7CkBAIC0xMjMwLDcgKzEzOTIsNyBAQAogCWlmICghaGRldikKIAkJcmV0dXJuIGNtZF9zdGF0dXMoc2ssIGluZGV4LCBtZ210X29wLCBFTk9ERVYpOwogCi0JaGNpX2Rldl9sb2NrX2JoKGhkZXYpOworCWhjaV9kZXZfbG9jayhoZGV2KTsKIAogCWlmICghdGVzdF9iaXQoSENJX1VQLCAmaGRldi0+ZmxhZ3MpKSB7CiAJCWVyciA9IGNtZF9zdGF0dXMoc2ssIGluZGV4LCBtZ210X29wLCBFTkVURE9XTik7CkBAIC0xMjQ4LDYgKzE0MTAsMjMxIEBACiAJCW1nbXRfcGVuZGluZ19yZW1vdmUoY21kKTsKIAogZmFpbGVkOgorCWhjaV9kZXZfdW5sb2NrKGhkZXYpOworCWhjaV9kZXZfcHV0KGhkZXYpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBzZXRfbG9jYWxfbmFtZShzdHJ1Y3Qgc29jayAqc2ssIHUxNiBpbmRleCwgdW5zaWduZWQgY2hhciAqZGF0YSwKKwkJCQkJCQkJdTE2IGxlbikKK3sKKwlzdHJ1Y3QgbWdtdF9jcF9zZXRfbG9jYWxfbmFtZSAqbWdtdF9jcCA9ICh2b2lkICopIGRhdGE7CisJc3RydWN0IGhjaV9jcF93cml0ZV9sb2NhbF9uYW1lIGhjaV9jcDsKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldjsKKwlzdHJ1Y3QgcGVuZGluZ19jbWQgKmNtZDsKKwlpbnQgZXJyOworCisJQlRfREJHKCIiKTsKKworCWlmIChsZW4gIT0gc2l6ZW9mKCptZ210X2NwKSkKKwkJcmV0dXJuIGNtZF9zdGF0dXMoc2ssIGluZGV4LCBNR01UX09QX1NFVF9MT0NBTF9OQU1FLCBFSU5WQUwpOworCisJaGRldiA9IGhjaV9kZXZfZ2V0KGluZGV4KTsKKwlpZiAoIWhkZXYpCisJCXJldHVybiBjbWRfc3RhdHVzKHNrLCBpbmRleCwgTUdNVF9PUF9TRVRfTE9DQUxfTkFNRSwgRU5PREVWKTsKKworCWhjaV9kZXZfbG9jayhoZGV2KTsKKworCWNtZCA9IG1nbXRfcGVuZGluZ19hZGQoc2ssIE1HTVRfT1BfU0VUX0xPQ0FMX05BTUUsIGluZGV4LCBkYXRhLCBsZW4pOworCWlmICghY21kKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbGVkOworCX0KKworCW1lbWNweShoY2lfY3AubmFtZSwgbWdtdF9jcC0+bmFtZSwgc2l6ZW9mKGhjaV9jcC5uYW1lKSk7CisJZXJyID0gaGNpX3NlbmRfY21kKGhkZXYsIEhDSV9PUF9XUklURV9MT0NBTF9OQU1FLCBzaXplb2YoaGNpX2NwKSwKKwkJCQkJCQkJJmhjaV9jcCk7CisJaWYgKGVyciA8IDApCisJCW1nbXRfcGVuZGluZ19yZW1vdmUoY21kKTsKKworZmFpbGVkOgorCWhjaV9kZXZfdW5sb2NrKGhkZXYpOworCWhjaV9kZXZfcHV0KGhkZXYpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCByZWFkX2xvY2FsX29vYl9kYXRhKHN0cnVjdCBzb2NrICpzaywgdTE2IGluZGV4KQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2OworCXN0cnVjdCBwZW5kaW5nX2NtZCAqY21kOworCWludCBlcnI7CisKKwlCVF9EQkcoImhjaSV1IiwgaW5kZXgpOworCisJaGRldiA9IGhjaV9kZXZfZ2V0KGluZGV4KTsKKwlpZiAoIWhkZXYpCisJCXJldHVybiBjbWRfc3RhdHVzKHNrLCBpbmRleCwgTUdNVF9PUF9SRUFEX0xPQ0FMX09PQl9EQVRBLAorCQkJCQkJCQkJRU5PREVWKTsKKworCWhjaV9kZXZfbG9jayhoZGV2KTsKKworCWlmICghdGVzdF9iaXQoSENJX1VQLCAmaGRldi0+ZmxhZ3MpKSB7CisJCWVyciA9IGNtZF9zdGF0dXMoc2ssIGluZGV4LCBNR01UX09QX1JFQURfTE9DQUxfT09CX0RBVEEsCisJCQkJCQkJCUVORVRET1dOKTsKKwkJZ290byB1bmxvY2s7CisJfQorCisJaWYgKCEoaGRldi0+ZmVhdHVyZXNbNl0gJiBMTVBfU0lNUExFX1BBSVIpKSB7CisJCWVyciA9IGNtZF9zdGF0dXMoc2ssIGluZGV4LCBNR01UX09QX1JFQURfTE9DQUxfT09CX0RBVEEsCisJCQkJCQkJCUVPUE5PVFNVUFApOworCQlnb3RvIHVubG9jazsKKwl9CisKKwlpZiAobWdtdF9wZW5kaW5nX2ZpbmQoTUdNVF9PUF9SRUFEX0xPQ0FMX09PQl9EQVRBLCBpbmRleCkpIHsKKwkJZXJyID0gY21kX3N0YXR1cyhzaywgaW5kZXgsIE1HTVRfT1BfUkVBRF9MT0NBTF9PT0JfREFUQSwgRUJVU1kpOworCQlnb3RvIHVubG9jazsKKwl9CisKKwljbWQgPSBtZ210X3BlbmRpbmdfYWRkKHNrLCBNR01UX09QX1JFQURfTE9DQUxfT09CX0RBVEEsIGluZGV4LCBOVUxMLCAwKTsKKwlpZiAoIWNtZCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIHVubG9jazsKKwl9CisKKwllcnIgPSBoY2lfc2VuZF9jbWQoaGRldiwgSENJX09QX1JFQURfTE9DQUxfT09CX0RBVEEsIDAsIE5VTEwpOworCWlmIChlcnIgPCAwKQorCQltZ210X3BlbmRpbmdfcmVtb3ZlKGNtZCk7CisKK3VubG9jazoKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKKwloY2lfZGV2X3B1dChoZGV2KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgYWRkX3JlbW90ZV9vb2JfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHUxNiBpbmRleCwgdW5zaWduZWQgY2hhciAqZGF0YSwKKwkJCQkJCQkJCXUxNiBsZW4pCit7CisJc3RydWN0IGhjaV9kZXYgKmhkZXY7CisJc3RydWN0IG1nbXRfY3BfYWRkX3JlbW90ZV9vb2JfZGF0YSAqY3AgPSAodm9pZCAqKSBkYXRhOworCWludCBlcnI7CisKKwlCVF9EQkcoImhjaSV1ICIsIGluZGV4KTsKKworCWlmIChsZW4gIT0gc2l6ZW9mKCpjcCkpCisJCXJldHVybiBjbWRfc3RhdHVzKHNrLCBpbmRleCwgTUdNVF9PUF9BRERfUkVNT1RFX09PQl9EQVRBLAorCQkJCQkJCQkJRUlOVkFMKTsKKworCWhkZXYgPSBoY2lfZGV2X2dldChpbmRleCk7CisJaWYgKCFoZGV2KQorCQlyZXR1cm4gY21kX3N0YXR1cyhzaywgaW5kZXgsIE1HTVRfT1BfQUREX1JFTU9URV9PT0JfREFUQSwKKwkJCQkJCQkJCUVOT0RFVik7CisKKwloY2lfZGV2X2xvY2soaGRldik7CisKKwllcnIgPSBoY2lfYWRkX3JlbW90ZV9vb2JfZGF0YShoZGV2LCAmY3AtPmJkYWRkciwgY3AtPmhhc2gsCisJCQkJCQkJCWNwLT5yYW5kb21pemVyKTsKKwlpZiAoZXJyIDwgMCkKKwkJZXJyID0gY21kX3N0YXR1cyhzaywgaW5kZXgsIE1HTVRfT1BfQUREX1JFTU9URV9PT0JfREFUQSwgLWVycik7CisJZWxzZQorCQllcnIgPSBjbWRfY29tcGxldGUoc2ssIGluZGV4LCBNR01UX09QX0FERF9SRU1PVEVfT09CX0RBVEEsIE5VTEwsCisJCQkJCQkJCQkwKTsKKworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOworCWhjaV9kZXZfcHV0KGhkZXYpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCByZW1vdmVfcmVtb3RlX29vYl9kYXRhKHN0cnVjdCBzb2NrICpzaywgdTE2IGluZGV4LAorCQkJCQkJdW5zaWduZWQgY2hhciAqZGF0YSwgdTE2IGxlbikKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldjsKKwlzdHJ1Y3QgbWdtdF9jcF9yZW1vdmVfcmVtb3RlX29vYl9kYXRhICpjcCA9ICh2b2lkICopIGRhdGE7CisJaW50IGVycjsKKworCUJUX0RCRygiaGNpJXUgIiwgaW5kZXgpOworCisJaWYgKGxlbiAhPSBzaXplb2YoKmNwKSkKKwkJcmV0dXJuIGNtZF9zdGF0dXMoc2ssIGluZGV4LCBNR01UX09QX1JFTU9WRV9SRU1PVEVfT09CX0RBVEEsCisJCQkJCQkJCQlFSU5WQUwpOworCisJaGRldiA9IGhjaV9kZXZfZ2V0KGluZGV4KTsKKwlpZiAoIWhkZXYpCisJCXJldHVybiBjbWRfc3RhdHVzKHNrLCBpbmRleCwgTUdNVF9PUF9SRU1PVkVfUkVNT1RFX09PQl9EQVRBLAorCQkJCQkJCQkJRU5PREVWKTsKKworCWhjaV9kZXZfbG9jayhoZGV2KTsKKworCWVyciA9IGhjaV9yZW1vdmVfcmVtb3RlX29vYl9kYXRhKGhkZXYsICZjcC0+YmRhZGRyKTsKKwlpZiAoZXJyIDwgMCkKKwkJZXJyID0gY21kX3N0YXR1cyhzaywgaW5kZXgsIE1HTVRfT1BfUkVNT1ZFX1JFTU9URV9PT0JfREFUQSwKKwkJCQkJCQkJCS1lcnIpOworCWVsc2UKKwkJZXJyID0gY21kX2NvbXBsZXRlKHNrLCBpbmRleCwgTUdNVF9PUF9SRU1PVkVfUkVNT1RFX09PQl9EQVRBLAorCQkJCQkJCQlOVUxMLCAwKTsKKworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOworCWhjaV9kZXZfcHV0KGhkZXYpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBzdGFydF9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCB1MTYgaW5kZXgpCit7CisJdTggbGFwWzNdID0geyAweDMzLCAweDhiLCAweDllIH07CisJc3RydWN0IGhjaV9jcF9pbnF1aXJ5IGNwOworCXN0cnVjdCBwZW5kaW5nX2NtZCAqY21kOworCXN0cnVjdCBoY2lfZGV2ICpoZGV2OworCWludCBlcnI7CisKKwlCVF9EQkcoImhjaSV1IiwgaW5kZXgpOworCisJaGRldiA9IGhjaV9kZXZfZ2V0KGluZGV4KTsKKwlpZiAoIWhkZXYpCisJCXJldHVybiBjbWRfc3RhdHVzKHNrLCBpbmRleCwgTUdNVF9PUF9TVEFSVF9ESVNDT1ZFUlksIEVOT0RFVik7CisKKwloY2lfZGV2X2xvY2tfYmgoaGRldik7CisKKwljbWQgPSBtZ210X3BlbmRpbmdfYWRkKHNrLCBNR01UX09QX1NUQVJUX0RJU0NPVkVSWSwgaW5kZXgsIE5VTEwsIDApOworCWlmICghY21kKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbGVkOworCX0KKworCW1lbXNldCgmY3AsIDAsIHNpemVvZihjcCkpOworCW1lbWNweSgmY3AubGFwLCBsYXAsIDMpOworCWNwLmxlbmd0aCAgPSAweDA4OworCWNwLm51bV9yc3AgPSAweDAwOworCisJZXJyID0gaGNpX3NlbmRfY21kKGhkZXYsIEhDSV9PUF9JTlFVSVJZLCBzaXplb2YoY3ApLCAmY3ApOworCWlmIChlcnIgPCAwKQorCQltZ210X3BlbmRpbmdfcmVtb3ZlKGNtZCk7CisKK2ZhaWxlZDoKKwloY2lfZGV2X3VubG9ja19iaChoZGV2KTsKKwloY2lfZGV2X3B1dChoZGV2KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgc3RvcF9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCB1MTYgaW5kZXgpCit7CisJc3RydWN0IGhjaV9kZXYgKmhkZXY7CisJc3RydWN0IHBlbmRpbmdfY21kICpjbWQ7CisJaW50IGVycjsKKworCUJUX0RCRygiaGNpJXUiLCBpbmRleCk7CisKKwloZGV2ID0gaGNpX2Rldl9nZXQoaW5kZXgpOworCWlmICghaGRldikKKwkJcmV0dXJuIGNtZF9zdGF0dXMoc2ssIGluZGV4LCBNR01UX09QX1NUT1BfRElTQ09WRVJZLCBFTk9ERVYpOworCisJaGNpX2Rldl9sb2NrX2JoKGhkZXYpOworCisJY21kID0gbWdtdF9wZW5kaW5nX2FkZChzaywgTUdNVF9PUF9TVE9QX0RJU0NPVkVSWSwgaW5kZXgsIE5VTEwsIDApOworCWlmICghY21kKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbGVkOworCX0KKworCWVyciA9IGhjaV9zZW5kX2NtZChoZGV2LCBIQ0lfT1BfSU5RVUlSWV9DQU5DRUwsIDAsIE5VTEwpOworCWlmIChlcnIgPCAwKQorCQltZ210X3BlbmRpbmdfcmVtb3ZlKGNtZCk7CisKK2ZhaWxlZDoKIAloY2lfZGV2X3VubG9ja19iaChoZGV2KTsKIAloY2lfZGV2X3B1dChoZGV2KTsKIApAQCAtMTI2Niw3ICsxNjUzLDcgQEAKIAlpZiAobXNnbGVuIDwgc2l6ZW9mKCpoZHIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWJ1ZiA9IGttYWxsb2MobXNnbGVuLCBHRlBfQVRPTUlDKTsKKwlidWYgPSBrbWFsbG9jKG1zZ2xlbiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xMzQ5LDYgKzE3MzYsMjUgQEAKIAljYXNlIE1HTVRfT1BfVVNFUl9DT05GSVJNX05FR19SRVBMWToKIAkJZXJyID0gdXNlcl9jb25maXJtX3JlcGx5KHNrLCBpbmRleCwgYnVmICsgc2l6ZW9mKCpoZHIpLCBsZW4sIDApOwogCQlicmVhazsKKwljYXNlIE1HTVRfT1BfU0VUX0xPQ0FMX05BTUU6CisJCWVyciA9IHNldF9sb2NhbF9uYW1lKHNrLCBpbmRleCwgYnVmICsgc2l6ZW9mKCpoZHIpLCBsZW4pOworCQlicmVhazsKKwljYXNlIE1HTVRfT1BfUkVBRF9MT0NBTF9PT0JfREFUQToKKwkJZXJyID0gcmVhZF9sb2NhbF9vb2JfZGF0YShzaywgaW5kZXgpOworCQlicmVhazsKKwljYXNlIE1HTVRfT1BfQUREX1JFTU9URV9PT0JfREFUQToKKwkJZXJyID0gYWRkX3JlbW90ZV9vb2JfZGF0YShzaywgaW5kZXgsIGJ1ZiArIHNpemVvZigqaGRyKSwgbGVuKTsKKwkJYnJlYWs7CisJY2FzZSBNR01UX09QX1JFTU9WRV9SRU1PVEVfT09CX0RBVEE6CisJCWVyciA9IHJlbW92ZV9yZW1vdGVfb29iX2RhdGEoc2ssIGluZGV4LCBidWYgKyBzaXplb2YoKmhkciksCisJCQkJCQkJCQlsZW4pOworCQlicmVhazsKKwljYXNlIE1HTVRfT1BfU1RBUlRfRElTQ09WRVJZOgorCQllcnIgPSBzdGFydF9kaXNjb3Zlcnkoc2ssIGluZGV4KTsKKwkJYnJlYWs7CisJY2FzZSBNR01UX09QX1NUT1BfRElTQ09WRVJZOgorCQllcnIgPSBzdG9wX2Rpc2NvdmVyeShzaywgaW5kZXgpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlCVF9EQkcoIlVua25vd24gb3AgJXUiLCBvcGNvZGUpOwogCQllcnIgPSBjbWRfc3RhdHVzKHNrLCBpbmRleCwgb3Bjb2RlLCAweDAxKTsKQEAgLTEzODIsNyArMTc4OCw3IEBACiAKIHN0YXRpYyB2b2lkIG1vZGVfcnNwKHN0cnVjdCBwZW5kaW5nX2NtZCAqY21kLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBtZ210X21vZGUgKmNwID0gY21kLT5jbWQ7CisJc3RydWN0IG1nbXRfbW9kZSAqY3AgPSBjbWQtPnBhcmFtOwogCXN0cnVjdCBjbWRfbG9va3VwICptYXRjaCA9IGRhdGE7CiAKIAlpZiAoY3AtPnZhbCAhPSBtYXRjaC0+dmFsKQpAQCAtMTQ1NSwxNyArMTg2MSwxNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBtZ210X25ld19rZXkodTE2IGluZGV4LCBzdHJ1Y3QgbGlua19rZXkgKmtleSwgdTggb2xkX2tleV90eXBlKQoraW50IG1nbXRfbmV3X2tleSh1MTYgaW5kZXgsIHN0cnVjdCBsaW5rX2tleSAqa2V5LCB1OCBwZXJzaXN0ZW50KQogewogCXN0cnVjdCBtZ210X2V2X25ld19rZXkgZXY7CiAKIAltZW1zZXQoJmV2LCAwLCBzaXplb2YoZXYpKTsKIAorCWV2LnN0b3JlX2hpbnQgPSBwZXJzaXN0ZW50OwogCWJhY3B5KCZldi5rZXkuYmRhZGRyLCAma2V5LT5iZGFkZHIpOwogCWV2LmtleS50eXBlID0ga2V5LT50eXBlOwogCW1lbWNweShldi5rZXkudmFsLCBrZXktPnZhbCwgMTYpOwogCWV2LmtleS5waW5fbGVuID0ga2V5LT5waW5fbGVuOwotCWV2Lm9sZF9rZXlfdHlwZSA9IG9sZF9rZXlfdHlwZTsKIAogCXJldHVybiBtZ210X2V2ZW50KE1HTVRfRVZfTkVXX0tFWSwgaW5kZXgsICZldiwgc2l6ZW9mKGV2KSwgTlVMTCk7CiB9CkBAIC0xNDgxLDcgKzE4ODcsNyBAQAogCiBzdGF0aWMgdm9pZCBkaXNjb25uZWN0X3JzcChzdHJ1Y3QgcGVuZGluZ19jbWQgKmNtZCwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgbWdtdF9jcF9kaXNjb25uZWN0ICpjcCA9IGNtZC0+Y21kOworCXN0cnVjdCBtZ210X2NwX2Rpc2Nvbm5lY3QgKmNwID0gY21kLT5wYXJhbTsKIAlzdHJ1Y3Qgc29jayAqKnNrID0gZGF0YTsKIAlzdHJ1Y3QgbWdtdF9ycF9kaXNjb25uZWN0IHJwOwogCkBAIC0xNTM5LDExICsxOTQ1LDEyIEBACiAJcmV0dXJuIG1nbXRfZXZlbnQoTUdNVF9FVl9DT05ORUNUX0ZBSUxFRCwgaW5kZXgsICZldiwgc2l6ZW9mKGV2KSwgTlVMTCk7CiB9CiAKLWludCBtZ210X3Bpbl9jb2RlX3JlcXVlc3QodTE2IGluZGV4LCBiZGFkZHJfdCAqYmRhZGRyKQoraW50IG1nbXRfcGluX2NvZGVfcmVxdWVzdCh1MTYgaW5kZXgsIGJkYWRkcl90ICpiZGFkZHIsIHU4IHNlY3VyZSkKIHsKIAlzdHJ1Y3QgbWdtdF9ldl9waW5fY29kZV9yZXF1ZXN0IGV2OwogCiAJYmFjcHkoJmV2LmJkYWRkciwgYmRhZGRyKTsKKwlldi5zZWN1cmUgPSBzZWN1cmU7CiAKIAlyZXR1cm4gbWdtdF9ldmVudChNR01UX0VWX1BJTl9DT0RFX1JFUVVFU1QsIGluZGV4LCAmZXYsIHNpemVvZihldiksCiAJCQkJCQkJCQlOVUxMKTsKQEAgLTE1OTEsMTMgKzE5OTgsMTUgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1pbnQgbWdtdF91c2VyX2NvbmZpcm1fcmVxdWVzdCh1MTYgaW5kZXgsIGJkYWRkcl90ICpiZGFkZHIsIF9fbGUzMiB2YWx1ZSkKK2ludCBtZ210X3VzZXJfY29uZmlybV9yZXF1ZXN0KHUxNiBpbmRleCwgYmRhZGRyX3QgKmJkYWRkciwgX19sZTMyIHZhbHVlLAorCQkJCQkJCXU4IGNvbmZpcm1faGludCkKIHsKIAlzdHJ1Y3QgbWdtdF9ldl91c2VyX2NvbmZpcm1fcmVxdWVzdCBldjsKIAogCUJUX0RCRygiaGNpJXUiLCBpbmRleCk7CiAKIAliYWNweSgmZXYuYmRhZGRyLCBiZGFkZHIpOworCWV2LmNvbmZpcm1faGludCA9IGNvbmZpcm1faGludDsKIAlwdXRfdW5hbGlnbmVkX2xlMzIodmFsdWUsICZldi52YWx1ZSk7CiAKIAlyZXR1cm4gbWdtdF9ldmVudChNR01UX0VWX1VTRVJfQ09ORklSTV9SRVFVRVNULCBpbmRleCwgJmV2LCBzaXplb2YoZXYpLApAQCAtMTY0NSwzICsyMDU0LDExMCBAQAogCiAJcmV0dXJuIG1nbXRfZXZlbnQoTUdNVF9FVl9BVVRIX0ZBSUxFRCwgaW5kZXgsICZldiwgc2l6ZW9mKGV2KSwgTlVMTCk7CiB9CisKK2ludCBtZ210X3NldF9sb2NhbF9uYW1lX2NvbXBsZXRlKHUxNiBpbmRleCwgdTggKm5hbWUsIHU4IHN0YXR1cykKK3sKKwlzdHJ1Y3QgcGVuZGluZ19jbWQgKmNtZDsKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldjsKKwlzdHJ1Y3QgbWdtdF9jcF9zZXRfbG9jYWxfbmFtZSBldjsKKwlpbnQgZXJyOworCisJbWVtc2V0KCZldiwgMCwgc2l6ZW9mKGV2KSk7CisJbWVtY3B5KGV2Lm5hbWUsIG5hbWUsIEhDSV9NQVhfTkFNRV9MRU5HVEgpOworCisJY21kID0gbWdtdF9wZW5kaW5nX2ZpbmQoTUdNVF9PUF9TRVRfTE9DQUxfTkFNRSwgaW5kZXgpOworCWlmICghY21kKQorCQlnb3RvIHNlbmRfZXZlbnQ7CisKKwlpZiAoc3RhdHVzKSB7CisJCWVyciA9IGNtZF9zdGF0dXMoY21kLT5zaywgaW5kZXgsIE1HTVRfT1BfU0VUX0xPQ0FMX05BTUUsIEVJTyk7CisJCWdvdG8gZmFpbGVkOworCX0KKworCWhkZXYgPSBoY2lfZGV2X2dldChpbmRleCk7CisJaWYgKGhkZXYpIHsKKwkJaGNpX2Rldl9sb2NrX2JoKGhkZXYpOworCQl1cGRhdGVfZWlyKGhkZXYpOworCQloY2lfZGV2X3VubG9ja19iaChoZGV2KTsKKwkJaGNpX2Rldl9wdXQoaGRldik7CisJfQorCisJZXJyID0gY21kX2NvbXBsZXRlKGNtZC0+c2ssIGluZGV4LCBNR01UX09QX1NFVF9MT0NBTF9OQU1FLCAmZXYsCisJCQkJCQkJCXNpemVvZihldikpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGZhaWxlZDsKKworc2VuZF9ldmVudDoKKwllcnIgPSBtZ210X2V2ZW50KE1HTVRfRVZfTE9DQUxfTkFNRV9DSEFOR0VELCBpbmRleCwgJmV2LCBzaXplb2YoZXYpLAorCQkJCQkJCWNtZCA/IGNtZC0+c2sgOiBOVUxMKTsKKworZmFpbGVkOgorCWlmIChjbWQpCisJCW1nbXRfcGVuZGluZ19yZW1vdmUoY21kKTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgbWdtdF9yZWFkX2xvY2FsX29vYl9kYXRhX3JlcGx5X2NvbXBsZXRlKHUxNiBpbmRleCwgdTggKmhhc2gsIHU4ICpyYW5kb21pemVyLAorCQkJCQkJCQl1OCBzdGF0dXMpCit7CisJc3RydWN0IHBlbmRpbmdfY21kICpjbWQ7CisJaW50IGVycjsKKworCUJUX0RCRygiaGNpJXUgc3RhdHVzICV1IiwgaW5kZXgsIHN0YXR1cyk7CisKKwljbWQgPSBtZ210X3BlbmRpbmdfZmluZChNR01UX09QX1JFQURfTE9DQUxfT09CX0RBVEEsIGluZGV4KTsKKwlpZiAoIWNtZCkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlpZiAoc3RhdHVzKSB7CisJCWVyciA9IGNtZF9zdGF0dXMoY21kLT5zaywgaW5kZXgsIE1HTVRfT1BfUkVBRF9MT0NBTF9PT0JfREFUQSwKKwkJCQkJCQkJCUVJTyk7CisJfSBlbHNlIHsKKwkJc3RydWN0IG1nbXRfcnBfcmVhZF9sb2NhbF9vb2JfZGF0YSBycDsKKworCQltZW1jcHkocnAuaGFzaCwgaGFzaCwgc2l6ZW9mKHJwLmhhc2gpKTsKKwkJbWVtY3B5KHJwLnJhbmRvbWl6ZXIsIHJhbmRvbWl6ZXIsIHNpemVvZihycC5yYW5kb21pemVyKSk7CisKKwkJZXJyID0gY21kX2NvbXBsZXRlKGNtZC0+c2ssIGluZGV4LCBNR01UX09QX1JFQURfTE9DQUxfT09CX0RBVEEsCisJCQkJCQkJJnJwLCBzaXplb2YocnApKTsKKwl9CisKKwltZ210X3BlbmRpbmdfcmVtb3ZlKGNtZCk7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgbWdtdF9kZXZpY2VfZm91bmQodTE2IGluZGV4LCBiZGFkZHJfdCAqYmRhZGRyLCB1OCAqZGV2X2NsYXNzLCBzOCByc3NpLAorCQkJCQkJCQl1OCAqZWlyKQoreworCXN0cnVjdCBtZ210X2V2X2RldmljZV9mb3VuZCBldjsKKworCW1lbXNldCgmZXYsIDAsIHNpemVvZihldikpOworCisJYmFjcHkoJmV2LmJkYWRkciwgYmRhZGRyKTsKKwltZW1jcHkoZXYuZGV2X2NsYXNzLCBkZXZfY2xhc3MsIHNpemVvZihldi5kZXZfY2xhc3MpKTsKKwlldi5yc3NpID0gcnNzaTsKKworCWlmIChlaXIpCisJCW1lbWNweShldi5laXIsIGVpciwgc2l6ZW9mKGV2LmVpcikpOworCisJcmV0dXJuIG1nbXRfZXZlbnQoTUdNVF9FVl9ERVZJQ0VfRk9VTkQsIGluZGV4LCAmZXYsIHNpemVvZihldiksIE5VTEwpOworfQorCitpbnQgbWdtdF9yZW1vdGVfbmFtZSh1MTYgaW5kZXgsIGJkYWRkcl90ICpiZGFkZHIsIHU4ICpuYW1lKQoreworCXN0cnVjdCBtZ210X2V2X3JlbW90ZV9uYW1lIGV2OworCisJbWVtc2V0KCZldiwgMCwgc2l6ZW9mKGV2KSk7CisKKwliYWNweSgmZXYuYmRhZGRyLCBiZGFkZHIpOworCW1lbWNweShldi5uYW1lLCBuYW1lLCBIQ0lfTUFYX05BTUVfTEVOR1RIKTsKKworCXJldHVybiBtZ210X2V2ZW50KE1HTVRfRVZfUkVNT1RFX05BTUUsIGluZGV4LCAmZXYsIHNpemVvZihldiksIE5VTEwpOworfQorCitpbnQgbWdtdF9kaXNjb3ZlcmluZyh1MTYgaW5kZXgsIHU4IGRpc2NvdmVyaW5nKQoreworCXJldHVybiBtZ210X2V2ZW50KE1HTVRfRVZfRElTQ09WRVJJTkcsIGluZGV4LCAmZGlzY292ZXJpbmcsCisJCQkJCQlzaXplb2YoZGlzY292ZXJpbmcpLCBOVUxMKTsKK30KZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYyBiL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYwppbmRleCBjOTk3MzkzLi41NzU5YmI3IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jCkBAIC0yMzIsNiArMjMyLDggQEAKIHN0YXRpYyBpbmxpbmUgaW50IHJmY29tbV9jaGVja19zZWN1cml0eShzdHJ1Y3QgcmZjb21tX2RsYyAqZCkKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBkLT5zZXNzaW9uLT5zb2NrLT5zazsKKwlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y2hhbi0+Y29ubjsKKwogCV9fdTggYXV0aF90eXBlOwogCiAJc3dpdGNoIChkLT5zZWNfbGV2ZWwpIHsKQEAgLTI0Niw4ICsyNDgsNyBAQAogCQlicmVhazsKIAl9CiAKLQlyZXR1cm4gaGNpX2Nvbm5fc2VjdXJpdHkobDJjYXBfcGkoc2spLT5jb25uLT5oY29uLCBkLT5zZWNfbGV2ZWwsCi0JCQkJCQkJCWF1dGhfdHlwZSk7CisJcmV0dXJuIGhjaV9jb25uX3NlY3VyaXR5KGNvbm4tPmhjb24sIGQtPnNlY19sZXZlbCwgYXV0aF90eXBlKTsKIH0KIAogc3RhdGljIHZvaWQgcmZjb21tX3Nlc3Npb25fdGltZW91dCh1bnNpZ25lZCBsb25nIGFyZykKQEAgLTcxMCwxMCArNzExLDEwIEBACiAJLyogU2V0IEwyQ0FQIG9wdGlvbnMgKi8KIAlzayA9IHNvY2stPnNrOwogCWxvY2tfc29jayhzayk7Ci0JbDJjYXBfcGkoc2spLT5pbXR1ID0gbDJjYXBfbXR1OwotCWwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID0gc2VjX2xldmVsOworCWwyY2FwX3BpKHNrKS0+Y2hhbi0+aW10dSA9IGwyY2FwX210dTsKKwlsMmNhcF9waShzayktPmNoYW4tPnNlY19sZXZlbCA9IHNlY19sZXZlbDsKIAlpZiAobDJjYXBfZXJ0bSkKLQkJbDJjYXBfcGkoc2spLT5tb2RlID0gTDJDQVBfTU9ERV9FUlRNOworCQlsMmNhcF9waShzayktPmNoYW4tPm1vZGUgPSBMMkNBUF9NT0RFX0VSVE07CiAJcmVsZWFzZV9zb2NrKHNrKTsKIAogCXMgPSByZmNvbW1fc2Vzc2lvbl9hZGQoc29jaywgQlRfQk9VTkQpOwpAQCAtMTI0MSw2ICsxMjQyLDcgQEAKIHZvaWQgcmZjb21tX2RsY19hY2NlcHQoc3RydWN0IHJmY29tbV9kbGMgKmQpCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gZC0+c2Vzc2lvbi0+c29jay0+c2s7CisJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNoYW4tPmNvbm47CiAKIAlCVF9EQkcoImRsYyAlcCIsIGQpOwogCkBAIC0xMjU0LDcgKzEyNTYsNyBAQAogCXJmY29tbV9kbGNfdW5sb2NrKGQpOwogCiAJaWYgKGQtPnJvbGVfc3dpdGNoKQotCQloY2lfY29ubl9zd2l0Y2hfcm9sZShsMmNhcF9waShzayktPmNvbm4tPmhjb24sIDB4MDApOworCQloY2lfY29ubl9zd2l0Y2hfcm9sZShjb25uLT5oY29uLCAweDAwKTsKIAogCXJmY29tbV9zZW5kX21zYyhkLT5zZXNzaW9uLCAxLCBkLT5kbGNpLCBkLT52MjRfc2lnKTsKIH0KQEAgLTE4OTAsNyArMTg5Miw4IEBACiAKIAkJLyogV2Ugc2hvdWxkIGFkanVzdCBNVFUgb24gaW5jb21pbmcgc2Vzc2lvbnMuCiAJCSAqIEwyQ0FQIE1UVSBtaW51cyBVSUggaGVhZGVyIGFuZCBGQ1MuICovCi0JCXMtPm10dSA9IG1pbihsMmNhcF9waShuc29jay0+c2spLT5vbXR1LCBsMmNhcF9waShuc29jay0+c2spLT5pbXR1KSAtIDU7CisJCXMtPm10dSA9IG1pbihsMmNhcF9waShuc29jay0+c2spLT5jaGFuLT5vbXR1LAorCQkJCWwyY2FwX3BpKG5zb2NrLT5zayktPmNoYW4tPmltdHUpIC0gNTsKIAogCQlyZmNvbW1fc2NoZWR1bGUoKTsKIAl9IGVsc2UKQEAgLTE5MDksNyArMTkxMiw3IEBACiAKIAkJLyogV2UgY2FuIGFkanVzdCBNVFUgb24gb3V0Z29pbmcgc2Vzc2lvbnMuCiAJCSAqIEwyQ0FQIE1UVSBtaW51cyBVSUggaGVhZGVyIGFuZCBGQ1MuICovCi0JCXMtPm10dSA9IG1pbihsMmNhcF9waShzayktPm9tdHUsIGwyY2FwX3BpKHNrKS0+aW10dSkgLSA1OworCQlzLT5tdHUgPSBtaW4obDJjYXBfcGkoc2spLT5jaGFuLT5vbXR1LCBsMmNhcF9waShzayktPmNoYW4tPmltdHUpIC0gNTsKIAogCQlyZmNvbW1fc2VuZF9zYWJtKHMsIDApOwogCQlicmVhazsKQEAgLTE5OTIsNyArMTk5NSw3IEBACiAJLyogU2V0IEwyQ0FQIG9wdGlvbnMgKi8KIAlzayA9IHNvY2stPnNrOwogCWxvY2tfc29jayhzayk7Ci0JbDJjYXBfcGkoc2spLT5pbXR1ID0gbDJjYXBfbXR1OworCWwyY2FwX3BpKHNrKS0+Y2hhbi0+aW10dSA9IGwyY2FwX210dTsKIAlyZWxlYXNlX3NvY2soc2spOwogCiAJLyogU3RhcnQgbGlzdGVuaW5nIG9uIHRoZSBzb2NrZXQgKi8KQEAgLTIwOTMsNyArMjA5Niw3IEBACiAJCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFJGQ09NTV9BVVRIX1BFTkRJTkcsICZkLT5mbGFncykpCiAJCQljb250aW51ZTsKIAotCQlpZiAoIXN0YXR1cykKKwkJaWYgKCFzdGF0dXMgJiYgaGNpX2Nvbm5fY2hlY2tfc2VjdXJlKGNvbm4sIGQtPnNlY19sZXZlbCkpCiAJCQlzZXRfYml0KFJGQ09NTV9BVVRIX0FDQ0VQVCwgJmQtPmZsYWdzKTsKIAkJZWxzZQogCQkJc2V0X2JpdChSRkNPTU1fQVVUSF9SRUpFQ1QsICZkLT5mbGFncyk7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMKaW5kZXggNjZjYzFmMC4uMzg2Y2ZhZiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYwpAQCAtNzQzLDYgKzc0Myw3IEBACiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJc3RydWN0IHNvY2sgKmwyY2FwX3NrOwogCXN0cnVjdCByZmNvbW1fY29ubmluZm8gY2luZm87CisJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNoYW4tPmNvbm47CiAJaW50IGxlbiwgZXJyID0gMDsKIAl1MzIgb3B0OwogCkBAIC03ODcsOCArNzg4LDggQEAKIAogCQlsMmNhcF9zayA9IHJmY29tbV9waShzayktPmRsYy0+c2Vzc2lvbi0+c29jay0+c2s7CiAKLQkJY2luZm8uaGNpX2hhbmRsZSA9IGwyY2FwX3BpKGwyY2FwX3NrKS0+Y29ubi0+aGNvbi0+aGFuZGxlOwotCQltZW1jcHkoY2luZm8uZGV2X2NsYXNzLCBsMmNhcF9waShsMmNhcF9zayktPmNvbm4tPmhjb24tPmRldl9jbGFzcywgMyk7CisJCWNpbmZvLmhjaV9oYW5kbGUgPSBjb25uLT5oY29uLT5oYW5kbGU7CisJCW1lbWNweShjaW5mby5kZXZfY2xhc3MsIGNvbm4tPmhjb24tPmRldl9jbGFzcywgMyk7CiAKIAkJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIHNpemVvZihjaW5mbykpOwogCQlpZiAoY29weV90b191c2VyKG9wdHZhbCwgKGNoYXIgKikgJmNpbmZvLCBsZW4pKQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9ici5jIGIvbmV0L2JyaWRnZS9ici5jCmluZGV4IDg0YmJiODIuLmYyMGM0ZmQgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnIuYworKysgYi9uZXQvYnJpZGdlL2JyLmMKQEAgLTEwNCwzICsxMDQsNCBAQAogbW9kdWxlX2V4aXQoYnJfZGVpbml0KQogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1ZFUlNJT04oQlJfVkVSU0lPTik7CitNT0RVTEVfQUxJQVNfUlROTF9MSU5LKCJicmlkZ2UiKTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMgYi9uZXQvYnJpZGdlL2JyX2RldmljZS5jCmluZGV4IDIxZTU5MDEuLmE2YjJmODYgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMKKysrIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuYwpAQCAtNzQsMTMgKzc0LDIzIEBACiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAorc3RhdGljIGludCBicl9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IG5ldGRldl9wcml2KGRldik7CisKKwlici0+c3RhdHMgPSBhbGxvY19wZXJjcHUoc3RydWN0IGJyX2NwdV9uZXRzdGF0cyk7CisJaWYgKCFici0+c3RhdHMpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgYnJfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQotCWJyX2ZlYXR1cmVzX3JlY29tcHV0ZShicik7CisJbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpOwogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAJYnJfc3RwX2VuYWJsZV9icmlkZ2UoYnIpOwogCWJyX211bHRpY2FzdF9vcGVuKGJyKTsKQEAgLTE3Nyw0OCArMTg3LDExIEBACiAJc3RyY3B5KGluZm8tPmJ1c19pbmZvLCAiTi9BIik7CiB9CiAKLXN0YXRpYyBpbnQgYnJfc2V0X3NnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQorc3RhdGljIHUzMiBicl9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZlYXR1cmVzKQogewogCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IG5ldGRldl9wcml2KGRldik7CiAKLQlpZiAoZGF0YSkKLQkJYnItPmZlYXR1cmVfbWFzayB8PSBORVRJRl9GX1NHOwotCWVsc2UKLQkJYnItPmZlYXR1cmVfbWFzayAmPSB+TkVUSUZfRl9TRzsKLQotCWJyX2ZlYXR1cmVzX3JlY29tcHV0ZShicik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYnJfc2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKGRhdGEpCi0JCWJyLT5mZWF0dXJlX21hc2sgfD0gTkVUSUZfRl9UU087Ci0JZWxzZQotCQlici0+ZmVhdHVyZV9tYXNrICY9IH5ORVRJRl9GX1RTTzsKLQotCWJyX2ZlYXR1cmVzX3JlY29tcHV0ZShicik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYnJfc2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmIChkYXRhKQotCQlici0+ZmVhdHVyZV9tYXNrIHw9IE5FVElGX0ZfTk9fQ1NVTTsKLQllbHNlCi0JCWJyLT5mZWF0dXJlX21hc2sgJj0gfk5FVElGX0ZfQUxMX0NTVU07Ci0KLQlicl9mZWF0dXJlc19yZWNvbXB1dGUoYnIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJyX3NldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKLXsKLQlyZXR1cm4gZXRodG9vbF9vcF9zZXRfZmxhZ3MobmV0ZGV2LCBkYXRhLCBFVEhfRkxBR19UWFZMQU4pOworCXJldHVybiBicl9mZWF0dXJlc19yZWNvbXB1dGUoYnIsIGZlYXR1cmVzKTsKIH0KIAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCkBAIC0zMTksMjEgKzI5MiwxMiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBicl9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8gICAgPSBicl9nZXRpbmZvLAogCS5nZXRfbGluawk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCi0JLmdldF90eF9jc3VtCT0gZXRodG9vbF9vcF9nZXRfdHhfY3N1bSwKLQkuc2V0X3R4X2NzdW0gCT0gYnJfc2V0X3R4X2NzdW0sCi0JLmdldF9zZwkJPSBldGh0b29sX29wX2dldF9zZywKLQkuc2V0X3NnCQk9IGJyX3NldF9zZywKLQkuZ2V0X3Rzbwk9IGV0aHRvb2xfb3BfZ2V0X3RzbywKLQkuc2V0X3Rzbwk9IGJyX3NldF90c28sCi0JLmdldF91Zm8JPSBldGh0b29sX29wX2dldF91Zm8sCi0JLnNldF91Zm8JPSBldGh0b29sX29wX3NldF91Zm8sCi0JLmdldF9mbGFncwk9IGV0aHRvb2xfb3BfZ2V0X2ZsYWdzLAotCS5zZXRfZmxhZ3MJPSBicl9zZXRfZmxhZ3MsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJyX25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuCQkgPSBicl9kZXZfb3BlbiwKIAkubmRvX3N0b3AJCSA9IGJyX2Rldl9zdG9wLAorCS5uZG9faW5pdAkJID0gYnJfZGV2X2luaXQsCiAJLm5kb19zdGFydF94bWl0CQkgPSBicl9kZXZfeG1pdCwKIAkubmRvX2dldF9zdGF0czY0CSA9IGJyX2dldF9zdGF0czY0LAogCS5uZG9fc2V0X21hY19hZGRyZXNzCSA9IGJyX3NldF9tYWNfYWRkcmVzcywKQEAgLTM0Nyw2ICszMTEsNyBAQAogI2VuZGlmCiAJLm5kb19hZGRfc2xhdmUJCSA9IGJyX2FkZF9zbGF2ZSwKIAkubmRvX2RlbF9zbGF2ZQkJID0gYnJfZGVsX3NsYXZlLAorCS5uZG9fZml4X2ZlYXR1cmVzICAgICAgICA9IGJyX2ZpeF9mZWF0dXJlcywKIH07CiAKIHN0YXRpYyB2b2lkIGJyX2Rldl9mcmVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0zNTcsMTggKzMyMiw0OSBAQAogCWZyZWVfbmV0ZGV2KGRldik7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX3R5cGUgYnJfdHlwZSA9IHsKKwkubmFtZQk9ICJicmlkZ2UiLAorfTsKKwogdm9pZCBicl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSBuZXRkZXZfcHJpdihkZXYpOworCiAJcmFuZG9tX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcik7CiAJZXRoZXJfc2V0dXAoZGV2KTsKIAogCWRldi0+bmV0ZGV2X29wcyA9ICZicl9uZXRkZXZfb3BzOwogCWRldi0+ZGVzdHJ1Y3RvciA9IGJyX2Rldl9mcmVlOwogCVNFVF9FVEhUT09MX09QUyhkZXYsICZicl9ldGh0b29sX29wcyk7CisJU0VUX05FVERFVl9ERVZUWVBFKGRldiwgJmJyX3R5cGUpOwogCWRldi0+dHhfcXVldWVfbGVuID0gMDsKIAlkZXYtPnByaXZfZmxhZ3MgPSBJRkZfRUJSSURHRTsKIAogCWRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9GUkFHTElTVCB8IE5FVElGX0ZfSElHSERNQSB8CiAJCQlORVRJRl9GX0dTT19NQVNLIHwgTkVUSUZfRl9OT19DU1VNIHwgTkVUSUZfRl9MTFRYIHwKLQkJCU5FVElGX0ZfTkVUTlNfTE9DQUwgfCBORVRJRl9GX0dTTyB8IE5FVElGX0ZfSFdfVkxBTl9UWDsKKwkJCU5FVElGX0ZfTkVUTlNfTE9DQUwgfCBORVRJRl9GX0hXX1ZMQU5fVFg7CisJZGV2LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0ZSQUdMSVNUIHwgTkVUSUZfRl9ISUdIRE1BIHwKKwkJCSAgIE5FVElGX0ZfR1NPX01BU0sgfCBORVRJRl9GX05PX0NTVU0gfAorCQkJICAgTkVUSUZfRl9IV19WTEFOX1RYOworCisJYnItPmRldiA9IGRldjsKKwlzcGluX2xvY2tfaW5pdCgmYnItPmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZici0+cG9ydF9saXN0KTsKKwlzcGluX2xvY2tfaW5pdCgmYnItPmhhc2hfbG9jayk7CisKKwlici0+YnJpZGdlX2lkLnByaW9bMF0gPSAweDgwOworCWJyLT5icmlkZ2VfaWQucHJpb1sxXSA9IDB4MDA7CisKKwltZW1jcHkoYnItPmdyb3VwX2FkZHIsIGJyX2dyb3VwX2FkZHJlc3MsIEVUSF9BTEVOKTsKKworCWJyLT5zdHBfZW5hYmxlZCA9IEJSX05PX1NUUDsKKwlici0+ZGVzaWduYXRlZF9yb290ID0gYnItPmJyaWRnZV9pZDsKKwlici0+YnJpZGdlX21heF9hZ2UgPSBici0+bWF4X2FnZSA9IDIwICogSFo7CisJYnItPmJyaWRnZV9oZWxsb190aW1lID0gYnItPmhlbGxvX3RpbWUgPSAyICogSFo7CisJYnItPmJyaWRnZV9mb3J3YXJkX2RlbGF5ID0gYnItPmZvcndhcmRfZGVsYXkgPSAxNSAqIEhaOworCWJyLT5hZ2VpbmdfdGltZSA9IDMwMCAqIEhaOworCisJYnJfbmV0ZmlsdGVyX3J0YWJsZV9pbml0KGJyKTsKKwlicl9zdHBfdGltZXJfaW5pdChicik7CisJYnJfbXVsdGljYXN0X2luaXQoYnIpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9mZGIuYyBiL25ldC9icmlkZ2UvYnJfZmRiLmMKaW5kZXggY2M0ZDNjNS4uZTBkZmJjMSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9mZGIuYworKysgYi9uZXQvYnJpZGdlL2JyX2ZkYi5jCkBAIC0yOCw2ICsyOCw3IEBACiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmJyX2ZkYl9jYWNoZSBfX3JlYWRfbW9zdGx5Owogc3RhdGljIGludCBmZGJfaW5zZXJ0KHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqc291cmNlLAogCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKTsKK3N0YXRpYyB2b2lkIGZkYl9ub3RpZnkoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfZmRiX2VudHJ5ICosIGludCk7CiAKIHN0YXRpYyB1MzIgZmRiX3NhbHQgX19yZWFkX21vc3RseTsKIApAQCAtNjIsNyArNjMsNyBAQAogCQkJCSAgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfZmRiX2VudHJ5ICpmZGIpCiB7CiAJcmV0dXJuICFmZGItPmlzX3N0YXRpYyAmJgotCQl0aW1lX2JlZm9yZV9lcShmZGItPmFnZWluZ190aW1lciArIGhvbGRfdGltZShiciksIGppZmZpZXMpOworCQl0aW1lX2JlZm9yZV9lcShmZGItPnVwZGF0ZWQgKyBob2xkX3RpbWUoYnIpLCBqaWZmaWVzKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgYnJfbWFjX2hhc2goY29uc3QgdW5zaWduZWQgY2hhciAqbWFjKQpAQCAtODEsNiArODIsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmRiX2RlbGV0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9mZGJfZW50cnkgKmYpCiB7CisJZmRiX25vdGlmeShmLCBSVE1fREVMTkVJR0gpOwogCWhsaXN0X2RlbF9yY3UoJmYtPmhsaXN0KTsKIAljYWxsX3JjdSgmZi0+cmN1LCBmZGJfcmN1X2ZyZWUpOwogfQpAQCAtMTQwLDcgKzE0Miw3IEBACiAJCQl1bnNpZ25lZCBsb25nIHRoaXNfdGltZXI7CiAJCQlpZiAoZi0+aXNfc3RhdGljKQogCQkJCWNvbnRpbnVlOwotCQkJdGhpc190aW1lciA9IGYtPmFnZWluZ190aW1lciArIGRlbGF5OworCQkJdGhpc190aW1lciA9IGYtPnVwZGF0ZWQgKyBkZWxheTsKIAkJCWlmICh0aW1lX2JlZm9yZV9lcSh0aGlzX3RpbWVyLCBqaWZmaWVzKSkKIAkJCQlmZGJfZGVsZXRlKGYpOwogCQkJZWxzZSBpZiAodGltZV9iZWZvcmUodGhpc190aW1lciwgbmV4dF90aW1lcikpCkBAIC0yOTMsNyArMjk1LDcgQEAKIAogCQkJZmUtPmlzX2xvY2FsID0gZi0+aXNfbG9jYWw7CiAJCQlpZiAoIWYtPmlzX3N0YXRpYykKLQkJCQlmZS0+YWdlaW5nX3RpbWVyX3ZhbHVlID0gamlmZmllc190b19jbG9ja190KGppZmZpZXMgLSBmLT5hZ2VpbmdfdGltZXIpOworCQkJCWZlLT5hZ2VpbmdfdGltZXJfdmFsdWUgPSBqaWZmaWVzX3RvX2Nsb2NrX3QoamlmZmllcyAtIGYtPnVwZGF0ZWQpOwogCQkJKytmZTsKIAkJCSsrbnVtOwogCQl9CkBAIC0zMDUsOCArMzA3LDIxIEBACiAJcmV0dXJuIG51bTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2JyaWRnZV9mZGJfZW50cnkgKmZkYl9maW5kKHN0cnVjdCBobGlzdF9oZWFkICpoZWFkLAotCQkJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpCitzdGF0aWMgc3RydWN0IG5ldF9icmlkZ2VfZmRiX2VudHJ5ICpmZGJfZmluZChzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCwKKwkJCQkJICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKQoreworCXN0cnVjdCBobGlzdF9ub2RlICpoOworCXN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqZmRiOworCisJaGxpc3RfZm9yX2VhY2hfZW50cnkoZmRiLCBoLCBoZWFkLCBobGlzdCkgeworCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihmZGItPmFkZHIuYWRkciwgYWRkcikpCisJCQlyZXR1cm4gZmRiOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqZmRiX2ZpbmRfcmN1KHN0cnVjdCBobGlzdF9oZWFkICpoZWFkLAorCQkJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpCiB7CiAJc3RydWN0IGhsaXN0X25vZGUgKmg7CiAJc3RydWN0IG5ldF9icmlkZ2VfZmRiX2VudHJ5ICpmZGI7CkBAIC0zMjAsOCArMzM1LDcgQEAKIAogc3RhdGljIHN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqZmRiX2NyZWF0ZShzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCwKIAkJCQkJICAgICAgIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnNvdXJjZSwKLQkJCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsCi0JCQkJCSAgICAgICBpbnQgaXNfbG9jYWwpCisJCQkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKQogewogCXN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqZmRiOwogCkBAIC0zMjksMTEgKzM0MywxMSBAQAogCWlmIChmZGIpIHsKIAkJbWVtY3B5KGZkYi0+YWRkci5hZGRyLCBhZGRyLCBFVEhfQUxFTik7CiAJCWZkYi0+ZHN0ID0gc291cmNlOwotCQlmZGItPmlzX2xvY2FsID0gaXNfbG9jYWw7Ci0JCWZkYi0+aXNfc3RhdGljID0gaXNfbG9jYWw7Ci0JCWZkYi0+YWdlaW5nX3RpbWVyID0gamlmZmllczsKLQorCQlmZGItPmlzX2xvY2FsID0gMDsKKwkJZmRiLT5pc19zdGF0aWMgPSAwOworCQlmZGItPnVwZGF0ZWQgPSBmZGItPnVzZWQgPSBqaWZmaWVzOwogCQlobGlzdF9hZGRfaGVhZF9yY3UoJmZkYi0+aGxpc3QsIGhlYWQpOworCQlmZGJfbm90aWZ5KGZkYiwgUlRNX05FV05FSUdIKTsKIAl9CiAJcmV0dXJuIGZkYjsKIH0KQEAgLTM2MCwxMiArMzc0LDE1IEBACiAJCWZkYl9kZWxldGUoZmRiKTsKIAl9CiAKLQlpZiAoIWZkYl9jcmVhdGUoaGVhZCwgc291cmNlLCBhZGRyLCAxKSkKKwlmZGIgPSBmZGJfY3JlYXRlKGhlYWQsIHNvdXJjZSwgYWRkcik7CisJaWYgKCFmZGIpCiAJCXJldHVybiAtRU5PTUVNOwogCisJZmRiLT5pc19sb2NhbCA9IGZkYi0+aXNfc3RhdGljID0gMTsKIAlyZXR1cm4gMDsKIH0KIAorLyogQWRkIGVudHJ5IGZvciBsb2NhbCBhZGRyZXNzIG9mIGludGVyZmFjZSAqLwogaW50IGJyX2ZkYl9pbnNlcnQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpzb3VyY2UsCiAJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcikKIHsKQEAgLTM5Miw3ICs0MDksNyBAQAogCSAgICAgIHNvdXJjZS0+c3RhdGUgPT0gQlJfU1RBVEVfRk9SV0FSRElORykpCiAJCXJldHVybjsKIAotCWZkYiA9IGZkYl9maW5kKGhlYWQsIGFkZHIpOworCWZkYiA9IGZkYl9maW5kX3JjdShoZWFkLCBhZGRyKTsKIAlpZiAobGlrZWx5KGZkYikpIHsKIAkJLyogYXR0ZW1wdCB0byB1cGRhdGUgYW4gZW50cnkgZm9yIGEgbG9jYWwgaW50ZXJmYWNlICovCiAJCWlmICh1bmxpa2VseShmZGItPmlzX2xvY2FsKSkgewpAQCAtNDAzLDE1ICs0MjAsMjc3IEBACiAJCX0gZWxzZSB7CiAJCQkvKiBmYXN0cGF0aDogdXBkYXRlIG9mIGV4aXN0aW5nIGVudHJ5ICovCiAJCQlmZGItPmRzdCA9IHNvdXJjZTsKLQkJCWZkYi0+YWdlaW5nX3RpbWVyID0gamlmZmllczsKKwkJCWZkYi0+dXBkYXRlZCA9IGppZmZpZXM7CiAJCX0KIAl9IGVsc2UgewogCQlzcGluX2xvY2soJmJyLT5oYXNoX2xvY2spOwotCQlpZiAoIWZkYl9maW5kKGhlYWQsIGFkZHIpKQotCQkJZmRiX2NyZWF0ZShoZWFkLCBzb3VyY2UsIGFkZHIsIDApOworCQlpZiAobGlrZWx5KCFmZGJfZmluZChoZWFkLCBhZGRyKSkpCisJCQlmZGJfY3JlYXRlKGhlYWQsIHNvdXJjZSwgYWRkcik7CisKIAkJLyogZWxzZSAgd2UgbG9zZSByYWNlIGFuZCBzb21lb25lIGVsc2UgaW5zZXJ0cwogCQkgKiBpdCBmaXJzdCwgZG9uJ3QgYm90aGVyIHVwZGF0aW5nCiAJCSAqLwogCQlzcGluX3VubG9jaygmYnItPmhhc2hfbG9jayk7CiAJfQogfQorCitzdGF0aWMgaW50IGZkYl90b19udWQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfZmRiX2VudHJ5ICpmZGIpCit7CisJaWYgKGZkYi0+aXNfbG9jYWwpCisJCXJldHVybiBOVURfUEVSTUFORU5UOworCWVsc2UgaWYgKGZkYi0+aXNfc3RhdGljKQorCQlyZXR1cm4gTlVEX05PQVJQOworCWVsc2UgaWYgKGhhc19leHBpcmVkKGZkYi0+ZHN0LT5iciwgZmRiKSkKKwkJcmV0dXJuIE5VRF9TVEFMRTsKKwllbHNlCisJCXJldHVybiBOVURfUkVBQ0hBQkxFOworfQorCitzdGF0aWMgaW50IGZkYl9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9mZGJfZW50cnkgKmZkYiwKKwkJCSB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllczsKKwlzdHJ1Y3QgbmRhX2NhY2hlaW5mbyBjaTsKKwlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKKwlzdHJ1Y3QgbmRtc2cgKm5kbTsKKworCW5saCA9IG5sbXNnX3B1dChza2IsIHBpZCwgc2VxLCB0eXBlLCBzaXplb2YoKm5kbSksIGZsYWdzKTsKKwlpZiAobmxoID09IE5VTEwpCisJCXJldHVybiAtRU1TR1NJWkU7CisKKworCW5kbSA9IG5sbXNnX2RhdGEobmxoKTsKKwluZG0tPm5kbV9mYW1pbHkJID0gQUZfQlJJREdFOworCW5kbS0+bmRtX3BhZDEgICAgPSAwOworCW5kbS0+bmRtX3BhZDIgICAgPSAwOworCW5kbS0+bmRtX2ZsYWdzCSA9IDA7CisJbmRtLT5uZG1fdHlwZQkgPSAwOworCW5kbS0+bmRtX2lmaW5kZXggPSBmZGItPmRzdC0+ZGV2LT5pZmluZGV4OworCW5kbS0+bmRtX3N0YXRlICAgPSBmZGJfdG9fbnVkKGZkYik7CisKKwlOTEFfUFVUKHNrYiwgTkRBX0xMQUREUiwgRVRIX0FMRU4sICZmZGItPmFkZHIpOworCisJY2kubmRtX3VzZWQJID0gamlmZmllc190b19jbG9ja190KG5vdyAtIGZkYi0+dXNlZCk7CisJY2kubmRtX2NvbmZpcm1lZCA9IDA7CisJY2kubmRtX3VwZGF0ZWQJID0gamlmZmllc190b19jbG9ja190KG5vdyAtIGZkYi0+dXBkYXRlZCk7CisJY2kubmRtX3JlZmNudAkgPSAwOworCU5MQV9QVVQoc2tiLCBOREFfQ0FDSEVJTkZPLCBzaXplb2YoY2kpLCAmY2kpOworCisJcmV0dXJuIG5sbXNnX2VuZChza2IsIG5saCk7CisKK25sYV9wdXRfZmFpbHVyZToKKwlubG1zZ19jYW5jZWwoc2tiLCBubGgpOworCXJldHVybiAtRU1TR1NJWkU7Cit9CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IGZkYl9ubG1zZ19zaXplKHZvaWQpCit7CisJcmV0dXJuIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgbmRtc2cpKQorCQkrIG5sYV90b3RhbF9zaXplKEVUSF9BTEVOKSAvKiBOREFfTExBRERSICovCisJCSsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBuZGFfY2FjaGVpbmZvKSk7Cit9CisKK3N0YXRpYyB2b2lkIGZkYl9ub3RpZnkoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfZmRiX2VudHJ5ICpmZGIsIGludCB0eXBlKQoreworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZmRiLT5kc3QtPmRldik7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgZXJyID0gLUVOT0JVRlM7CisKKwlza2IgPSBubG1zZ19uZXcoZmRiX25sbXNnX3NpemUoKSwgR0ZQX0FUT01JQyk7CisJaWYgKHNrYiA9PSBOVUxMKQorCQlnb3RvIGVycm91dDsKKworCWVyciA9IGZkYl9maWxsX2luZm8oc2tiLCBmZGIsIDAsIDAsIHR5cGUsIDApOworCWlmIChlcnIgPCAwKSB7CisJCS8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBmZGJfbmxtc2dfc2l6ZSgpICovCisJCVdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7CisJCWtmcmVlX3NrYihza2IpOworCQlnb3RvIGVycm91dDsKKwl9CisJcnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfTkVJR0gsIE5VTEwsIEdGUF9BVE9NSUMpOworCXJldHVybjsKK2Vycm91dDoKKwlpZiAoZXJyIDwgMCkKKwkJcnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9ORUlHSCwgZXJyKTsKK30KKworLyogRHVtcCBpbmZvcm1hdGlvbiBhYm91dCBlbnRyaWVzLCBpbiByZXNwb25zZSB0byBHRVRORUlHSCAqLworaW50IGJyX2ZkYl9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKK3sKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCWludCBpZHggPSAwOworCisJcmN1X3JlYWRfbG9jaygpOworCWZvcl9lYWNoX25ldGRldl9yY3UobmV0LCBkZXYpIHsKKwkJc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwkJaW50IGk7CisKKwkJaWYgKCEoZGV2LT5wcml2X2ZsYWdzICYgSUZGX0VCUklER0UpKQorCQkJY29udGludWU7CisKKwkJZm9yIChpID0gMDsgaSA8IEJSX0hBU0hfU0laRTsgaSsrKSB7CisJCQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqaDsKKwkJCXN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqZjsKKworCQkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGYsIGgsICZici0+aGFzaFtpXSwgaGxpc3QpIHsKKwkJCQlpZiAoaWR4IDwgY2ItPmFyZ3NbMF0pCisJCQkJCWdvdG8gc2tpcDsKKworCQkJCWlmIChmZGJfZmlsbF9pbmZvKHNrYiwgZiwKKwkJCQkJCSAgTkVUTElOS19DQihjYi0+c2tiKS5waWQsCisJCQkJCQkgIGNiLT5ubGgtPm5sbXNnX3NlcSwKKwkJCQkJCSAgUlRNX05FV05FSUdILAorCQkJCQkJICBOTE1fRl9NVUxUSSkgPCAwKQorCQkJCQlicmVhazsKK3NraXA6CisJCQkJKytpZHg7CisJCQl9CisJCX0KKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwljYi0+YXJnc1swXSA9IGlkeDsKKworCXJldHVybiBza2ItPmxlbjsKK30KKworLyogQ3JlYXRlIG5ldyBzdGF0aWMgZmRiIGVudHJ5ICovCitzdGF0aWMgaW50IGZkYl9hZGRfZW50cnkoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqc291cmNlLCBjb25zdCBfX3U4ICphZGRyLAorCQkJIF9fdTE2IHN0YXRlKQoreworCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHNvdXJjZS0+YnI7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSAmYnItPmhhc2hbYnJfbWFjX2hhc2goYWRkcildOworCXN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqZmRiOworCisJZmRiID0gZmRiX2ZpbmQoaGVhZCwgYWRkcik7CisJaWYgKGZkYikKKwkJcmV0dXJuIC1FRVhJU1Q7CisKKwlmZGIgPSBmZGJfY3JlYXRlKGhlYWQsIHNvdXJjZSwgYWRkcik7CisJaWYgKCFmZGIpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHN0YXRlICYgTlVEX1BFUk1BTkVOVCkKKwkJZmRiLT5pc19sb2NhbCA9IGZkYi0+aXNfc3RhdGljID0gMTsKKwllbHNlIGlmIChzdGF0ZSAmIE5VRF9OT0FSUCkKKwkJZmRiLT5pc19zdGF0aWMgPSAxOworCXJldHVybiAwOworfQorCisvKiBBZGQgbmV3IHBlcm1hbmVudCBmZGIgZW50cnkgd2l0aCBSVE1fTkVXTkVJR0ggKi8KK2ludCBicl9mZGJfYWRkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLCB2b2lkICphcmcpCit7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CisJc3RydWN0IG5kbXNnICpuZG07CisJc3RydWN0IG5sYXR0ciAqdGJbTkRBX01BWCsxXTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7CisJY29uc3QgX191OCAqYWRkcjsKKwlpbnQgZXJyOworCisJQVNTRVJUX1JUTkwoKTsKKwllcnIgPSBubG1zZ19wYXJzZShubGgsIHNpemVvZigqbmRtKSwgdGIsIE5EQV9NQVgsIE5VTEwpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJbmRtID0gbmxtc2dfZGF0YShubGgpOworCWlmIChuZG0tPm5kbV9pZmluZGV4ID09IDApIHsKKwkJcHJfaW5mbygiYnJpZGdlOiBSVE1fTkVXTkVJR0ggd2l0aCBpbnZhbGlkIGlmaW5kZXhcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgobmV0LCBuZG0tPm5kbV9pZmluZGV4KTsKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJcHJfaW5mbygiYnJpZGdlOiBSVE1fTkVXTkVJR0ggd2l0aCB1bmtub3duIGlmaW5kZXhcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoIXRiW05EQV9MTEFERFJdIHx8IG5sYV9sZW4odGJbTkRBX0xMQUREUl0pICE9IEVUSF9BTEVOKSB7CisJCXByX2luZm8oImJyaWRnZTogUlRNX05FV05FSUdIIHdpdGggaW52YWxpZCBhZGRyZXNzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYWRkciA9IG5sYV9kYXRhKHRiW05EQV9MTEFERFJdKTsKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkcikpIHsKKwkJcHJfaW5mbygiYnJpZGdlOiBSVE1fTkVXTkVJR0ggd2l0aCBpbnZhbGlkIGV0aGVyIGFkZHJlc3NcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwID0gYnJfcG9ydF9nZXRfcnRubChkZXYpOworCWlmIChwID09IE5VTEwpIHsKKwkJcHJfaW5mbygiYnJpZGdlOiBSVE1fTkVXTkVJR0ggJXMgbm90IGEgYnJpZGdlIHBvcnRcbiIsCisJCQlkZXYtPm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcGluX2xvY2tfYmgoJnAtPmJyLT5oYXNoX2xvY2spOworCWVyciA9IGZkYl9hZGRfZW50cnkocCwgYWRkciwgbmRtLT5uZG1fc3RhdGUpOworCXNwaW5fdW5sb2NrX2JoKCZwLT5ici0+aGFzaF9sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZmRiX2RlbGV0ZV9ieV9hZGRyKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIGNvbnN0IHU4ICphZGRyKQoreworCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHAtPmJyOworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gJmJyLT5oYXNoW2JyX21hY19oYXNoKGFkZHIpXTsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9mZGJfZW50cnkgKmZkYjsKKworCWZkYiA9IGZkYl9maW5kKGhlYWQsIGFkZHIpOworCWlmICghZmRiKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWZkYl9kZWxldGUoZmRiKTsKKwlyZXR1cm4gMDsKK30KKworLyogUmVtb3ZlIG5laWdoYm9yIGVudHJ5IHdpdGggUlRNX0RFTE5FSUdIICovCitpbnQgYnJfZmRiX2RlbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOworCXN0cnVjdCBuZG1zZyAqbmRtOworCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7CisJc3RydWN0IG5sYXR0ciAqbGxhdHRyOworCWNvbnN0IF9fdTggKmFkZHI7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlpbnQgZXJyOworCisJQVNTRVJUX1JUTkwoKTsKKwlpZiAobmxtc2dfbGVuKG5saCkgPCBzaXplb2YoKm5kbSkpCisJCXJldHVybiAtRUlOVkFMOworCisJbmRtID0gbmxtc2dfZGF0YShubGgpOworCWlmIChuZG0tPm5kbV9pZmluZGV4ID09IDApIHsKKwkJcHJfaW5mbygiYnJpZGdlOiBSVE1fREVMTkVJR0ggd2l0aCBpbnZhbGlkIGlmaW5kZXhcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgobmV0LCBuZG0tPm5kbV9pZmluZGV4KTsKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJcHJfaW5mbygiYnJpZGdlOiBSVE1fREVMTkVJR0ggd2l0aCB1bmtub3duIGlmaW5kZXhcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlsbGF0dHIgPSBubG1zZ19maW5kX2F0dHIobmxoLCBzaXplb2YoKm5kbSksIE5EQV9MTEFERFIpOworCWlmIChsbGF0dHIgPT0gTlVMTCB8fCBubGFfbGVuKGxsYXR0cikgIT0gRVRIX0FMRU4pIHsKKwkJcHJfaW5mbygiYnJpZGdlOiBSVE1fREVMTkVJR0ggd2l0aCBpbnZhbGlkIGFkZHJlc3NcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlhZGRyID0gbmxhX2RhdGEobGxhdHRyKTsKKworCXAgPSBicl9wb3J0X2dldF9ydG5sKGRldik7CisJaWYgKHAgPT0gTlVMTCkgeworCQlwcl9pbmZvKCJicmlkZ2U6IFJUTV9ERUxORUlHSCAlcyBub3QgYSBicmlkZ2UgcG9ydFxuIiwKKwkJCWRldi0+bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNwaW5fbG9ja19iaCgmcC0+YnItPmhhc2hfbG9jayk7CisJZXJyID0gZmRiX2RlbGV0ZV9ieV9hZGRyKHAsIGFkZHIpOworCXNwaW5fdW5sb2NrX2JoKCZwLT5ici0+aGFzaF9sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lmLmMgYi9uZXQvYnJpZGdlL2JyX2lmLmMKaW5kZXggNzE4YjYwMy4uMWJhY2NhNCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9pZi5jCisrKyBiL25ldC9icmlkZ2UvYnJfaWYuYwpAQCAtMzYsOCArMzYsOCBAQAogCWlmIChkZXYtPmV0aHRvb2xfb3BzICYmIGRldi0+ZXRodG9vbF9vcHMtPmdldF9zZXR0aW5ncykgewogCQlzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZCA9IHsgLmNtZCA9IEVUSFRPT0xfR1NFVCwgfTsKIAotCQlpZiAoIWRldi0+ZXRodG9vbF9vcHMtPmdldF9zZXR0aW5ncyhkZXYsICZlY21kKSkgewotCQkJc3dpdGNoKGVjbWQuc3BlZWQpIHsKKwkJaWYgKCFkZXZfZXRodG9vbF9nZXRfc2V0dGluZ3MoZGV2LCAmZWNtZCkpIHsKKwkJCXN3aXRjaCAoZXRodG9vbF9jbWRfc3BlZWQoJmVjbWQpKSB7CiAJCQljYXNlIFNQRUVEXzEwMDAwOgogCQkJCXJldHVybiAyOwogCQkJY2FzZSBTUEVFRF8xMDAwOgpAQCAtMTQ3LDYgKzE0Nyw3IEBACiAJZGV2LT5wcml2X2ZsYWdzICY9IH5JRkZfQlJJREdFX1BPUlQ7CiAKIAluZXRkZXZfcnhfaGFuZGxlcl91bnJlZ2lzdGVyKGRldik7CisJc3luY2hyb25pemVfbmV0KCk7CiAKIAluZXRkZXZfc2V0X21hc3RlcihkZXYsIE5VTEwpOwogCkBAIC0xNzUsNTYgKzE3Niw2IEBACiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoYnItPmRldiwgaGVhZCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqbmV3X2JyaWRnZV9kZXYoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKQotewotCXN0cnVjdCBuZXRfYnJpZGdlICpicjsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCi0JZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgbmV0X2JyaWRnZSksIG5hbWUsCi0JCQkgICBicl9kZXZfc2V0dXApOwotCi0JaWYgKCFkZXYpCi0JCXJldHVybiBOVUxMOwotCWRldl9uZXRfc2V0KGRldiwgbmV0KTsKLQotCWJyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlici0+ZGV2ID0gZGV2OwotCi0JYnItPnN0YXRzID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBicl9jcHVfbmV0c3RhdHMpOwotCWlmICghYnItPnN0YXRzKSB7Ci0JCWZyZWVfbmV0ZGV2KGRldik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXNwaW5fbG9ja19pbml0KCZici0+bG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJmJyLT5wb3J0X2xpc3QpOwotCXNwaW5fbG9ja19pbml0KCZici0+aGFzaF9sb2NrKTsKLQotCWJyLT5icmlkZ2VfaWQucHJpb1swXSA9IDB4ODA7Ci0JYnItPmJyaWRnZV9pZC5wcmlvWzFdID0gMHgwMDsKLQotCW1lbWNweShici0+Z3JvdXBfYWRkciwgYnJfZ3JvdXBfYWRkcmVzcywgRVRIX0FMRU4pOwotCi0JYnItPmZlYXR1cmVfbWFzayA9IGRldi0+ZmVhdHVyZXM7Ci0JYnItPnN0cF9lbmFibGVkID0gQlJfTk9fU1RQOwotCWJyLT5kZXNpZ25hdGVkX3Jvb3QgPSBici0+YnJpZGdlX2lkOwotCWJyLT5yb290X3BhdGhfY29zdCA9IDA7Ci0JYnItPnJvb3RfcG9ydCA9IDA7Ci0JYnItPmJyaWRnZV9tYXhfYWdlID0gYnItPm1heF9hZ2UgPSAyMCAqIEhaOwotCWJyLT5icmlkZ2VfaGVsbG9fdGltZSA9IGJyLT5oZWxsb190aW1lID0gMiAqIEhaOwotCWJyLT5icmlkZ2VfZm9yd2FyZF9kZWxheSA9IGJyLT5mb3J3YXJkX2RlbGF5ID0gMTUgKiBIWjsKLQlici0+dG9wb2xvZ3lfY2hhbmdlID0gMDsKLQlici0+dG9wb2xvZ3lfY2hhbmdlX2RldGVjdGVkID0gMDsKLQlici0+YWdlaW5nX3RpbWUgPSAzMDAgKiBIWjsKLQotCWJyX25ldGZpbHRlcl9ydGFibGVfaW5pdChicik7Ci0KLQlicl9zdHBfdGltZXJfaW5pdChicik7Ci0JYnJfbXVsdGljYXN0X2luaXQoYnIpOwotCi0JcmV0dXJuIGRldjsKLX0KLQogLyogZmluZCBhbiBhdmFpbGFibGUgcG9ydCBudW1iZXIgKi8KIHN0YXRpYyBpbnQgZmluZF9wb3J0bm8oc3RydWN0IG5ldF9icmlkZ2UgKmJyKQogewpAQCAtMjc3LDQyICsyMjgsMTkgQEAKIAlyZXR1cm4gcDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfdHlwZSBicl90eXBlID0gewotCS5uYW1lCT0gImJyaWRnZSIsCi19OwotCiBpbnQgYnJfYWRkX2JyaWRnZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlpbnQgcmV0OwogCi0JZGV2ID0gbmV3X2JyaWRnZV9kZXYobmV0LCBuYW1lKTsKKwlkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBuZXRfYnJpZGdlKSwgbmFtZSwKKwkJCSAgIGJyX2Rldl9zZXR1cCk7CisKIAlpZiAoIWRldikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlydG5sX2xvY2soKTsKLQlpZiAoc3RyY2hyKGRldi0+bmFtZSwgJyUnKSkgewotCQlyZXQgPSBkZXZfYWxsb2NfbmFtZShkZXYsIGRldi0+bmFtZSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXRfZnJlZTsKLQl9CisJZGV2X25ldF9zZXQoZGV2LCBuZXQpOwogCi0JU0VUX05FVERFVl9ERVZUWVBFKGRldiwgJmJyX3R5cGUpOwotCi0JcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7Ci0JaWYgKHJldCkKLQkJZ290byBvdXRfZnJlZTsKLQotCXJldCA9IGJyX3N5c2ZzX2FkZGJyKGRldik7Ci0JaWYgKHJldCkKLQkJdW5yZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKLSBvdXQ6Ci0JcnRubF91bmxvY2soKTsKLQlyZXR1cm4gcmV0OwotCi1vdXRfZnJlZToKLQlmcmVlX25ldGRldihkZXYpOwotCWdvdG8gb3V0OworCXJldHVybiByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIH0KIAogaW50IGJyX2RlbF9icmlkZ2Uoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKQpAQCAtMzY0LDE1ICsyOTIsMTUgQEAKIC8qCiAgKiBSZWNvbXB1dGVzIGZlYXR1cmVzIHVzaW5nIHNsYXZlJ3MgZmVhdHVyZXMKICAqLwotdm9pZCBicl9mZWF0dXJlc19yZWNvbXB1dGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyKQordTMyIGJyX2ZlYXR1cmVzX3JlY29tcHV0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHUzMiBmZWF0dXJlcykKIHsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwOwotCXUzMiBmZWF0dXJlcywgbWFzazsKKwl1MzIgbWFzazsKIAotCWZlYXR1cmVzID0gbWFzayA9IGJyLT5mZWF0dXJlX21hc2s7CiAJaWYgKGxpc3RfZW1wdHkoJmJyLT5wb3J0X2xpc3QpKQotCQlnb3RvIGRvbmU7CisJCXJldHVybiBmZWF0dXJlczsKIAorCW1hc2sgPSBmZWF0dXJlczsKIAlmZWF0dXJlcyAmPSB+TkVUSUZfRl9PTkVfRk9SX0FMTDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmJyLT5wb3J0X2xpc3QsIGxpc3QpIHsKQEAgLTM4MCw4ICszMDgsNyBAQAogCQkJCQkJICAgICBwLT5kZXYtPmZlYXR1cmVzLCBtYXNrKTsKIAl9CiAKLWRvbmU6Ci0JYnItPmRldi0+ZmVhdHVyZXMgPSBuZXRkZXZfZml4X2ZlYXR1cmVzKGJyLT5kZXYsIGZlYXR1cmVzKTsKKwlyZXR1cm4gZmVhdHVyZXM7CiB9CiAKIC8qIGNhbGxlZCB3aXRoIFJUTkwgKi8KQEAgLTQxMiw2ICszMzksOCBAQAogCWlmIChJU19FUlIocCkpCiAJCXJldHVybiBQVFJfRVJSKHApOwogCisJY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9KT0lOLCBkZXYpOworCiAJZXJyID0gZGV2X3NldF9wcm9taXNjdWl0eShkZXYsIDEpOwogCWlmIChlcnIpCiAJCWdvdG8gcHV0X2JhY2s7CkBAIC00NDYsOSArMzc1LDEwIEBACiAKIAlsaXN0X2FkZF9yY3UoJnAtPmxpc3QsICZici0+cG9ydF9saXN0KTsKIAorCW5ldGRldl91cGRhdGVfZmVhdHVyZXMoYnItPmRldik7CisKIAlzcGluX2xvY2tfYmgoJmJyLT5sb2NrKTsKIAljaGFuZ2VkX2FkZHIgPSBicl9zdHBfcmVjYWxjdWxhdGVfYnJpZGdlX2lkKGJyKTsKLQlicl9mZWF0dXJlc19yZWNvbXB1dGUoYnIpOwogCiAJaWYgKChkZXYtPmZsYWdzICYgSUZGX1VQKSAmJiBuZXRpZl9jYXJyaWVyX29rKGRldikgJiYKIAkgICAgKGJyLT5kZXYtPmZsYWdzICYgSUZGX1VQKSkKQEAgLTQ5Niw5ICs0MjYsMTAgQEAKIAogCXNwaW5fbG9ja19iaCgmYnItPmxvY2spOwogCWJyX3N0cF9yZWNhbGN1bGF0ZV9icmlkZ2VfaWQoYnIpOwotCWJyX2ZlYXR1cmVzX3JlY29tcHV0ZShicik7CiAJc3Bpbl91bmxvY2tfYmgoJmJyLT5sb2NrKTsKIAorCW5ldGRldl91cGRhdGVfZmVhdHVyZXMoYnItPmRldik7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jCmluZGV4IDBjN2JhZGEuLmYzYWMxZTggMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfaW5wdXQuYworKysgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmMKQEAgLTk4LDkgKzk4LDEwIEBACiAJfQogCiAJaWYgKHNrYikgewotCQlpZiAoZHN0KQorCQlpZiAoZHN0KSB7CisJCQlkc3QtPnVzZWQgPSBqaWZmaWVzOwogCQkJYnJfZm9yd2FyZChkc3QtPmRzdCwgc2tiLCBza2IyKTsKLQkJZWxzZQorCQl9IGVsc2UKIAkJCWJyX2Zsb29kX2ZvcndhcmQoYnIsIHNrYiwgc2tiMik7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lvY3RsLmMgYi9uZXQvYnJpZGdlL2JyX2lvY3RsLmMKaW5kZXggM2Q5ZmNhMC4uNzIyMmZlMSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9pb2N0bC5jCisrKyBiL25ldC9icmlkZ2UvYnJfaW9jdGwuYwpAQCAtMTgxLDQwICsxODEsMTkgQEAKIAkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQogCQkJcmV0dXJuIC1FUEVSTTsKIAotCQlzcGluX2xvY2tfYmgoJmJyLT5sb2NrKTsKLQkJYnItPmJyaWRnZV9mb3J3YXJkX2RlbGF5ID0gY2xvY2tfdF90b19qaWZmaWVzKGFyZ3NbMV0pOwotCQlpZiAoYnJfaXNfcm9vdF9icmlkZ2UoYnIpKQotCQkJYnItPmZvcndhcmRfZGVsYXkgPSBici0+YnJpZGdlX2ZvcndhcmRfZGVsYXk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZici0+bG9jayk7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gYnJfc2V0X2ZvcndhcmRfZGVsYXkoYnIsIGFyZ3NbMV0pOwogCiAJY2FzZSBCUkNUTF9TRVRfQlJJREdFX0hFTExPX1RJTUU6Ci0JewotCQl1bnNpZ25lZCBsb25nIHQgPSBjbG9ja190X3RvX2ppZmZpZXMoYXJnc1sxXSk7CiAJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKIAkJCXJldHVybiAtRVBFUk07CiAKLQkJaWYgKHQgPCBIWikKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCXNwaW5fbG9ja19iaCgmYnItPmxvY2spOwotCQlici0+YnJpZGdlX2hlbGxvX3RpbWUgPSB0OwotCQlpZiAoYnJfaXNfcm9vdF9icmlkZ2UoYnIpKQotCQkJYnItPmhlbGxvX3RpbWUgPSBici0+YnJpZGdlX2hlbGxvX3RpbWU7Ci0JCXNwaW5fdW5sb2NrX2JoKCZici0+bG9jayk7Ci0JCXJldHVybiAwOwotCX0KKwkJcmV0dXJuIGJyX3NldF9oZWxsb190aW1lKGJyLCBhcmdzWzFdKTsKIAogCWNhc2UgQlJDVExfU0VUX0JSSURHRV9NQVhfQUdFOgogCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCiAJCQlyZXR1cm4gLUVQRVJNOwogCi0JCXNwaW5fbG9ja19iaCgmYnItPmxvY2spOwotCQlici0+YnJpZGdlX21heF9hZ2UgPSBjbG9ja190X3RvX2ppZmZpZXMoYXJnc1sxXSk7Ci0JCWlmIChicl9pc19yb290X2JyaWRnZShicikpCi0JCQlici0+bWF4X2FnZSA9IGJyLT5icmlkZ2VfbWF4X2FnZTsKLQkJc3Bpbl91bmxvY2tfYmgoJmJyLT5sb2NrKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBicl9zZXRfbWF4X2FnZShiciwgYXJnc1sxXSk7CiAKIAljYXNlIEJSQ1RMX1NFVF9BR0VJTkdfVElNRToKIAkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQpAQCAtMjc1LDE5ICsyNTQsMTYgQEAKIAljYXNlIEJSQ1RMX1NFVF9QT1JUX1BSSU9SSVRZOgogCXsKIAkJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcDsKLQkJaW50IHJldCA9IDA7CisJCWludCByZXQ7CiAKIAkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQogCQkJcmV0dXJuIC1FUEVSTTsKIAotCQlpZiAoYXJnc1syXSA+PSAoMTw8KDE2LUJSX1BPUlRfQklUUykpKQotCQkJcmV0dXJuIC1FUkFOR0U7Ci0KIAkJc3Bpbl9sb2NrX2JoKCZici0+bG9jayk7CiAJCWlmICgocCA9IGJyX2dldF9wb3J0KGJyLCBhcmdzWzFdKSkgPT0gTlVMTCkKIAkJCXJldCA9IC1FSU5WQUw7CiAJCWVsc2UKLQkJCWJyX3N0cF9zZXRfcG9ydF9wcmlvcml0eShwLCBhcmdzWzJdKTsKKwkJCXJldCA9IGJyX3N0cF9zZXRfcG9ydF9wcmlvcml0eShwLCBhcmdzWzJdKTsKIAkJc3Bpbl91bmxvY2tfYmgoJmJyLT5sb2NrKTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC0yOTUsMTUgKzI3MSwxNyBAQAogCWNhc2UgQlJDVExfU0VUX1BBVEhfQ09TVDoKIAl7CiAJCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7Ci0JCWludCByZXQgPSAwOworCQlpbnQgcmV0OwogCiAJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKIAkJCXJldHVybiAtRVBFUk07CiAKKwkJc3Bpbl9sb2NrX2JoKCZici0+bG9jayk7CiAJCWlmICgocCA9IGJyX2dldF9wb3J0KGJyLCBhcmdzWzFdKSkgPT0gTlVMTCkKIAkJCXJldCA9IC1FSU5WQUw7CiAJCWVsc2UKLQkJCWJyX3N0cF9zZXRfcGF0aF9jb3N0KHAsIGFyZ3NbMl0pOworCQkJcmV0ID0gYnJfc3RwX3NldF9wYXRoX2Nvc3QocCwgYXJnc1syXSk7CisJCXNwaW5fdW5sb2NrX2JoKCZici0+bG9jayk7CiAKIAkJcmV0dXJuIHJldDsKIAl9CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYwppbmRleCA1OTY2MGM5Li4yZjE0ZWFmIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jCisrKyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMKQEAgLTQxMyw3ICs0MTMsNyBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmJyX2lwNl9tdWx0aWNhc3RfYWxsb2NfcXVlcnkoc3RydWN0IG5ldF9icmlkZ2UgKmJyLAotCQkJCQkJICAgIHN0cnVjdCBpbjZfYWRkciAqZ3JvdXApCisJCQkJCQkgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpncm91cCkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBpcHY2aGRyICppcDZoOwpAQCAtMTExNSw3ICsxMTE1LDcgQEAKIAkJCQkgIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsCiAJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTsKIAlzdHJ1Y3QgaWdtcGhkciAqaWggPSBpZ21wX2hkcihza2IpOwogCXN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqbXA7CiAJc3RydWN0IGlnbXB2M19xdWVyeSAqaWgzOwpAQCAtMTE5MCw3ICsxMTkwLDcgQEAKIAkJCQkgIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsCiAJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBpcHY2aGRyICppcDZoID0gaXB2Nl9oZHIoc2tiKTsKKwljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7CiAJc3RydWN0IG1sZF9tc2cgKm1sZCA9IChzdHJ1Y3QgbWxkX21zZyAqKSBpY21wNl9oZHIoc2tiKTsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKm1wOwogCXN0cnVjdCBtbGQyX3F1ZXJ5ICptbGQycTsKQEAgLTExOTgsNyArMTE5OCw3IEBACiAJc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCBfX3JjdSAqKnBwOwogCXVuc2lnbmVkIGxvbmcgbWF4X2RlbGF5OwogCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllczsKLQlzdHJ1Y3QgaW42X2FkZHIgKmdyb3VwID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmdyb3VwID0gTlVMTDsKIAlpbnQgZXJyID0gMDsKIAogCXNwaW5fbG9jaygmYnItPm11bHRpY2FzdF9sb2NrKTsKQEAgLTEzNTYsNyArMTM1Niw3IEBACiAJCQkJIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjIgPSBza2I7Ci0Jc3RydWN0IGlwaGRyICppcGg7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGg7CiAJc3RydWN0IGlnbXBoZHIgKmloOwogCXVuc2lnbmVkIGxlbjsKIAl1bnNpZ25lZCBvZmZzZXQ7CkBAIC0xNDUyLDcgKzE0NTIsNyBAQAogCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBza19idWZmICpza2IyOwotCXN0cnVjdCBpcHY2aGRyICppcDZoOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoOwogCXN0cnVjdCBpY21wNmhkciAqaWNtcDZoOwogCXU4IG5leHRoZHI7CiAJdW5zaWduZWQgbGVuOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYyBiL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKaW5kZXggNzRlZjRkNC4uZTFmNWVjNyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYworKysgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCkBAIC0yMTksNyArMjE5LDcgQEAKIHN0YXRpYyBpbnQgYnJfcGFyc2VfaXBfb3B0aW9ucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpcF9vcHRpb25zICpvcHQ7Ci0Jc3RydWN0IGlwaGRyICppcGg7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGg7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi0+ZGV2OwogCXUzMiBsZW47CiAKQEAgLTU1NCw3ICs1NTQsNyBAQAogCQkJCQkgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAogCQkJCQkgICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKIHsKLQlzdHJ1Y3QgaXB2NmhkciAqaGRyOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICpoZHI7CiAJdTMyIHBrdF9sZW47CiAKIAlpZiAoc2tiLT5sZW4gPCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMgYi9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYwppbmRleCBmOGJmNGM3Li5mZmIwZGM0IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYworKysgYi9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYwpAQCAtMTIsOSArMTIsMTEgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPG5ldC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisKICNpbmNsdWRlICJicl9wcml2YXRlLmgiCiAKIHN0YXRpYyBpbmxpbmUgc2l6ZV90IGJyX25sbXNnX3NpemUodm9pZCkKQEAgLTExOCw4ICsxMjAsOSBAQAogCWludCBpZHg7CiAKIAlpZHggPSAwOwotCWZvcl9lYWNoX25ldGRldihuZXQsIGRldikgewotCQlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0ID0gYnJfcG9ydF9nZXRfcnRubChkZXYpOworCXJjdV9yZWFkX2xvY2soKTsKKwlmb3JfZWFjaF9uZXRkZXZfcmN1KG5ldCwgZGV2KSB7CisJCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQgPSBicl9wb3J0X2dldF9yY3UoZGV2KTsKIAogCQkvKiBub3QgYSBicmlkZ2UgcG9ydCAqLwogCQlpZiAoIXBvcnQgfHwgaWR4IDwgY2ItPmFyZ3NbMF0pCkBAIC0xMzMsNyArMTM2LDcgQEAKIHNraXA6CiAJCSsraWR4OwogCX0KLQorCXJjdV9yZWFkX3VubG9jaygpOwogCWNiLT5hcmdzWzBdID0gaWR4OwogCiAJcmV0dXJuIHNrYi0+bGVuOwpAQCAtMTg4LDIwICsxOTEsNjEgQEAKIAlyZXR1cm4gMDsKIH0KIAotCi1pbnQgX19pbml0IGJyX25ldGxpbmtfaW5pdCh2b2lkKQorc3RhdGljIGludCBicl92YWxpZGF0ZShzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10pCiB7Ci0JaWYgKF9fcnRubF9yZWdpc3RlcihQRl9CUklER0UsIFJUTV9HRVRMSU5LLCBOVUxMLCBicl9kdW1wX2lmaW5mbykpCi0JCXJldHVybiAtRU5PQlVGUzsKLQotCS8qIE9ubHkgdGhlIGZpcnN0IGNhbGwgdG8gX19ydG5sX3JlZ2lzdGVyIGNhbiBmYWlsICovCi0JX19ydG5sX3JlZ2lzdGVyKFBGX0JSSURHRSwgUlRNX1NFVExJTkssIGJyX3J0bV9zZXRsaW5rLCBOVUxMKTsKKwlpZiAodGJbSUZMQV9BRERSRVNTXSkgeworCQlpZiAobmxhX2xlbih0YltJRkxBX0FERFJFU1NdKSAhPSBFVEhfQUxFTikKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmxhX2RhdGEodGJbSUZMQV9BRERSRVNTXSkpKQorCQkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCX0KIAogCXJldHVybiAwOwogfQogCi12b2lkIF9fZXhpdCBicl9uZXRsaW5rX2Zpbmkodm9pZCkKK3N0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBicl9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0geworCS5raW5kCQk9ICJicmlkZ2UiLAorCS5wcml2X3NpemUJPSBzaXplb2Yoc3RydWN0IG5ldF9icmlkZ2UpLAorCS5zZXR1cAkJPSBicl9kZXZfc2V0dXAsCisJLnZhbGlkYXRlCT0gYnJfdmFsaWRhdGUsCit9OworCitpbnQgX19pbml0IGJyX25ldGxpbmtfaW5pdCh2b2lkKQogeworCWludCBlcnI7CisKKwllcnIgPSBydG5sX2xpbmtfcmVnaXN0ZXIoJmJyX2xpbmtfb3BzKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnIxOworCisJZXJyID0gX19ydG5sX3JlZ2lzdGVyKFBGX0JSSURHRSwgUlRNX0dFVExJTkssIE5VTEwsIGJyX2R1bXBfaWZpbmZvKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjI7CisJZXJyID0gX19ydG5sX3JlZ2lzdGVyKFBGX0JSSURHRSwgUlRNX1NFVExJTkssIGJyX3J0bV9zZXRsaW5rLCBOVUxMKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjM7CisJZXJyID0gX19ydG5sX3JlZ2lzdGVyKFBGX0JSSURHRSwgUlRNX05FV05FSUdILCBicl9mZGJfYWRkLCBOVUxMKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjM7CisJZXJyID0gX19ydG5sX3JlZ2lzdGVyKFBGX0JSSURHRSwgUlRNX0RFTE5FSUdILCBicl9mZGJfZGVsZXRlLCBOVUxMKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjM7CisJZXJyID0gX19ydG5sX3JlZ2lzdGVyKFBGX0JSSURHRSwgUlRNX0dFVE5FSUdILCBOVUxMLCBicl9mZGJfZHVtcCk7CisJaWYgKGVycikKKwkJZ290byBlcnIzOworCisJcmV0dXJuIDA7CisKK2VycjM6CiAJcnRubF91bnJlZ2lzdGVyX2FsbChQRl9CUklER0UpOworZXJyMjoKKwlydG5sX2xpbmtfdW5yZWdpc3RlcigmYnJfbGlua19vcHMpOworZXJyMToKKwlyZXR1cm4gZXJyOwogfQogCit2b2lkIF9fZXhpdCBicl9uZXRsaW5rX2Zpbmkodm9pZCkKK3sKKwlydG5sX2xpbmtfdW5yZWdpc3RlcigmYnJfbGlua19vcHMpOworCXJ0bmxfdW5yZWdpc3Rlcl9hbGwoUEZfQlJJREdFKTsKK30KZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbm90aWZ5LmMgYi9uZXQvYnJpZGdlL2JyX25vdGlmeS5jCmluZGV4IDdkMzM3YzkuLjY1NDVlZTkgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbm90aWZ5LmMKKysrIGIvbmV0L2JyaWRnZS9icl9ub3RpZnkuYwpAQCAtMzYsNiArMzYsMTIgQEAKIAlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnI7CiAJaW50IGVycjsKIAorCS8qIHJlZ2lzdGVyIG9mIGJyaWRnZSBjb21wbGV0ZWQsIGFkZCBzeXNmcyBlbnRyaWVzICovCisJaWYgKChkZXYtPnByaXZfZmxhZ3MgJiBJRkZfRUJSSURHRSkgJiYgZXZlbnQgPT0gTkVUREVWX1JFR0lTVEVSKSB7CisJCWJyX3N5c2ZzX2FkZGJyKGRldik7CisJCXJldHVybiBOT1RJRllfRE9ORTsKKwl9CisKIAkvKiBub3QgYSBwb3J0IG9mIGEgYnJpZGdlICovCiAJcCA9IGJyX3BvcnRfZ2V0X3J0bmwoZGV2KTsKIAlpZiAoIXApCkBAIC02MCwxMCArNjYsNyBAQAogCQlicmVhazsKIAogCWNhc2UgTkVUREVWX0ZFQVRfQ0hBTkdFOgotCQlzcGluX2xvY2tfYmgoJmJyLT5sb2NrKTsKLQkJaWYgKG5ldGlmX3J1bm5pbmcoYnItPmRldikpCi0JCQlicl9mZWF0dXJlc19yZWNvbXB1dGUoYnIpOwotCQlzcGluX3VubG9ja19iaCgmYnItPmxvY2spOworCQluZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGJyLT5kZXYpOwogCQlicmVhazsKIAogCWNhc2UgTkVUREVWX0RPV046CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaCBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oCmluZGV4IDM4NzAxM2QuLjU0NTc4ZjIgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oCisrKyBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oCkBAIC02NCw3ICs2NCw4IEBACiAJc3RydWN0IG5ldF9icmlkZ2VfcG9ydAkJKmRzdDsKIAogCXN0cnVjdCByY3VfaGVhZAkJCXJjdTsKLQl1bnNpZ25lZCBsb25nCQkJYWdlaW5nX3RpbWVyOworCXVuc2lnbmVkIGxvbmcJCQl1cGRhdGVkOworCXVuc2lnbmVkIGxvbmcJCQl1c2VkOwogCW1hY19hZGRyCQkJYWRkcjsKIAl1bnNpZ25lZCBjaGFyCQkJaXNfbG9jYWw7CiAJdW5zaWduZWQgY2hhcgkJCWlzX3N0YXRpYzsKQEAgLTE4Miw3ICsxODMsNiBAQAogCXN0cnVjdCBicl9jcHVfbmV0c3RhdHMgX19wZXJjcHUgKnN0YXRzOwogCXNwaW5sb2NrX3QJCQloYXNoX2xvY2s7CiAJc3RydWN0IGhsaXN0X2hlYWQJCWhhc2hbQlJfSEFTSF9TSVpFXTsKLQl1MzIJCQkJZmVhdHVyZV9tYXNrOwogI2lmZGVmIENPTkZJR19CUklER0VfTkVURklMVEVSCiAJc3RydWN0IHJ0YWJsZSAJCQlmYWtlX3J0YWJsZTsKIAlib29sCQkJCW5mX2NhbGxfaXB0YWJsZXM7CkBAIC0zNTMsNiArMzUzLDkgQEAKIGV4dGVybiB2b2lkIGJyX2ZkYl91cGRhdGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLAogCQkJICBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpzb3VyY2UsCiAJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpOworZXh0ZXJuIGludCBicl9mZGJfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpOworZXh0ZXJuIGludCBicl9mZGJfYWRkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLCB2b2lkICphcmcpOworZXh0ZXJuIGludCBicl9mZGJfZGVsZXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLCB2b2lkICphcmcpOwogCiAvKiBicl9mb3J3YXJkLmMgKi8KIGV4dGVybiB2b2lkIGJyX2RlbGl2ZXIoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqdG8sCkBAIC0zNzUsNyArMzc4LDcgQEAKIGV4dGVybiBpbnQgYnJfZGVsX2lmKHN0cnVjdCBuZXRfYnJpZGdlICpiciwKIAkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGV4dGVybiBpbnQgYnJfbWluX210dShjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpOwotZXh0ZXJuIHZvaWQgYnJfZmVhdHVyZXNfcmVjb21wdXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicik7CitleHRlcm4gdTMyIGJyX2ZlYXR1cmVzX3JlY29tcHV0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHUzMiBmZWF0dXJlcyk7CiAKIC8qIGJyX2lucHV0LmMgKi8KIGV4dGVybiBpbnQgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKQEAgLTQ5MSw2ICs0OTQsMTEgQEAKIGV4dGVybiB2b2lkIGJyX2luaXRfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKTsKIGV4dGVybiB2b2lkIGJyX2JlY29tZV9kZXNpZ25hdGVkX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCk7CiAKK2V4dGVybiBpbnQgYnJfc2V0X2ZvcndhcmRfZGVsYXkoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHgpOworZXh0ZXJuIGludCBicl9zZXRfaGVsbG9fdGltZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgeCk7CitleHRlcm4gaW50IGJyX3NldF9tYXhfYWdlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB4KTsKKworCiAvKiBicl9zdHBfaWYuYyAqLwogZXh0ZXJuIHZvaWQgYnJfc3RwX2VuYWJsZV9icmlkZ2Uoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTsKIGV4dGVybiB2b2lkIGJyX3N0cF9kaXNhYmxlX2JyaWRnZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpOwpAQCAtNTAxLDEwICs1MDksMTAgQEAKIGV4dGVybiB2b2lkIGJyX3N0cF9jaGFuZ2VfYnJpZGdlX2lkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgY29uc3QgdW5zaWduZWQgY2hhciAqYSk7CiBleHRlcm4gdm9pZCBicl9zdHBfc2V0X2JyaWRnZV9wcmlvcml0eShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsCiAJCQkJICAgICAgIHUxNiBuZXdwcmlvKTsKLWV4dGVybiB2b2lkIGJyX3N0cF9zZXRfcG9ydF9wcmlvcml0eShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLAotCQkJCSAgICAgdTggbmV3cHJpbyk7Ci1leHRlcm4gdm9pZCBicl9zdHBfc2V0X3BhdGhfY29zdChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLAotCQkJCSB1MzIgcGF0aF9jb3N0KTsKK2V4dGVybiBpbnQgYnJfc3RwX3NldF9wb3J0X3ByaW9yaXR5KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgbmV3cHJpbyk7CitleHRlcm4gaW50IGJyX3N0cF9zZXRfcGF0aF9jb3N0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsCisJCQkJdW5zaWduZWQgbG9uZyBwYXRoX2Nvc3QpOwogZXh0ZXJuIHNzaXplX3QgYnJfc2hvd19icmlkZ2VfaWQoY2hhciAqYnVmLCBjb25zdCBzdHJ1Y3QgYnJpZGdlX2lkICppZCk7CiAKIC8qIGJyX3N0cF9icGR1LmMgKi8KZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZV9zdHAuaCBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZV9zdHAuaAppbmRleCA4YjY1MGY3Li42NDJlZjQ3IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGVfc3RwLmgKKysrIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlX3N0cC5oCkBAIC0xNiw2ICsxNiwxOSBAQAogI2RlZmluZSBCUERVX1RZUEVfQ09ORklHIDAKICNkZWZpbmUgQlBEVV9UWVBFX1RDTiAweDgwCiAKKy8qIElFRUUgODAyLjFELTE5OTggdGltZXIgdmFsdWVzICovCisjZGVmaW5lIEJSX01JTl9IRUxMT19USU1FCSgxKkhaKQorI2RlZmluZSBCUl9NQVhfSEVMTE9fVElNRQkoMTAqSFopCisKKyNkZWZpbmUgQlJfTUlOX0ZPUldBUkRfREVMQVkJKDIqSFopCisjZGVmaW5lIEJSX01BWF9GT1JXQVJEX0RFTEFZCSgzMCpIWikKKworI2RlZmluZSBCUl9NSU5fTUFYX0FHRQkJKDYqSFopCisjZGVmaW5lIEJSX01BWF9NQVhfQUdFCQkoNDAqSFopCisKKyNkZWZpbmUgQlJfTUlOX1BBVEhfQ09TVAkxCisjZGVmaW5lIEJSX01BWF9QQVRIX0NPU1QJNjU1MzUKKwogc3RydWN0IGJyX2NvbmZpZ19icGR1CiB7CiAJdW5zaWduZWQJdG9wb2xvZ3lfY2hhbmdlOjE7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3N0cC5jIGIvbmV0L2JyaWRnZS9icl9zdHAuYwppbmRleCA3MzcwZDE0Li5iYjQzODNlIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX3N0cC5jCisrKyBiL25ldC9icmlkZ2UvYnJfc3RwLmMKQEAgLTQ4NCwzICs0ODQsNTEgQEAKIAkJYnJfdG9wb2xvZ3lfY2hhbmdlX2Fja25vd2xlZGdlKHApOwogCX0KIH0KKworLyogQ2hhbmdlIGJyaWRnZSBTVFAgcGFyYW1ldGVyICovCitpbnQgYnJfc2V0X2hlbGxvX3RpbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIHQgPSBjbG9ja190X3RvX2ppZmZpZXModmFsKTsKKworCWlmICh0IDwgQlJfTUlOX0hFTExPX1RJTUUgfHwgdCA+IEJSX01BWF9IRUxMT19USU1FKQorCQlyZXR1cm4gLUVSQU5HRTsKKworCXNwaW5fbG9ja19iaCgmYnItPmxvY2spOworCWJyLT5icmlkZ2VfaGVsbG9fdGltZSA9IHQ7CisJaWYgKGJyX2lzX3Jvb3RfYnJpZGdlKGJyKSkKKwkJYnItPmhlbGxvX3RpbWUgPSBici0+YnJpZGdlX2hlbGxvX3RpbWU7CisJc3Bpbl91bmxvY2tfYmgoJmJyLT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGJyX3NldF9tYXhfYWdlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJdW5zaWduZWQgbG9uZyB0ID0gY2xvY2tfdF90b19qaWZmaWVzKHZhbCk7CisKKwlpZiAodCA8IEJSX01JTl9NQVhfQUdFIHx8IHQgPiBCUl9NQVhfTUFYX0FHRSkKKwkJcmV0dXJuIC1FUkFOR0U7CisKKwlzcGluX2xvY2tfYmgoJmJyLT5sb2NrKTsKKwlici0+YnJpZGdlX21heF9hZ2UgPSB0OworCWlmIChicl9pc19yb290X2JyaWRnZShicikpCisJCWJyLT5tYXhfYWdlID0gYnItPmJyaWRnZV9tYXhfYWdlOworCXNwaW5fdW5sb2NrX2JoKCZici0+bG9jayk7CisJcmV0dXJuIDA7CisKK30KKworaW50IGJyX3NldF9mb3J3YXJkX2RlbGF5KHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJdW5zaWduZWQgbG9uZyB0ID0gY2xvY2tfdF90b19qaWZmaWVzKHZhbCk7CisKKwlpZiAoYnItPnN0cF9lbmFibGVkICE9IEJSX05PX1NUUCAmJgorCSAgICAodCA8IEJSX01JTl9GT1JXQVJEX0RFTEFZIHx8IHQgPiBCUl9NQVhfRk9SV0FSRF9ERUxBWSkpCisJCXJldHVybiAtRVJBTkdFOworCisJc3Bpbl9sb2NrX2JoKCZici0+bG9jayk7CisJYnItPmJyaWRnZV9mb3J3YXJkX2RlbGF5ID0gdDsKKwlpZiAoYnJfaXNfcm9vdF9icmlkZ2UoYnIpKQorCQlici0+Zm9yd2FyZF9kZWxheSA9IGJyLT5icmlkZ2VfZm9yd2FyZF9kZWxheTsKKwlzcGluX3VubG9ja19iaCgmYnItPmxvY2spOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9zdHBfaWYuYyBiL25ldC9icmlkZ2UvYnJfc3RwX2lmLmMKaW5kZXggOWI2MWQwOS4uNmY2MTViOCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9zdHBfaWYuYworKysgYi9uZXQvYnJpZGdlL2JyX3N0cF9pZi5jCkBAIC0yMCw3ICsyMCw3IEBACiAKIAogLyogUG9ydCBpZCBpcyBjb21wb3NlZCBvZiBwcmlvcml0eSBhbmQgcG9ydCBudW1iZXIuCi0gKiBOQjogbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiBwcmlvcml0eSBhcmUgZHJvcHBlZCB0bworICogTkI6IHNvbWUgYml0cyBvZiBwcmlvcml0eSBhcmUgZHJvcHBlZCB0bwogICogICAgIG1ha2Ugcm9vbSBmb3IgbW9yZSBwb3J0cy4KICAqLwogc3RhdGljIGlubGluZSBwb3J0X2lkIGJyX21ha2VfcG9ydF9pZChfX3U4IHByaW9yaXR5LCBfX3UxNiBwb3J0X25vKQpAQCAtMjksNiArMjksOCBAQAogCQl8IChwb3J0X25vICYgKCgxPDxCUl9QT1JUX0JJVFMpLTEpKTsKIH0KIAorI2RlZmluZSBCUl9NQVhfUE9SVF9QUklPUklUWSAoKHUxNil+MCA+PiBCUl9QT1JUX0JJVFMpCisKIC8qIGNhbGxlZCB1bmRlciBicmlkZ2UgbG9jayAqLwogdm9pZCBicl9pbml0X3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCkKIHsKQEAgLTI1NSwxMCArMjU3LDE0IEBACiB9CiAKIC8qIGNhbGxlZCB1bmRlciBicmlkZ2UgbG9jayAqLwotdm9pZCBicl9zdHBfc2V0X3BvcnRfcHJpb3JpdHkoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdTggbmV3cHJpbykKK2ludCBicl9zdHBfc2V0X3BvcnRfcHJpb3JpdHkoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdW5zaWduZWQgbG9uZyBuZXdwcmlvKQogewotCXBvcnRfaWQgbmV3X3BvcnRfaWQgPSBicl9tYWtlX3BvcnRfaWQobmV3cHJpbywgcC0+cG9ydF9ubyk7CisJcG9ydF9pZCBuZXdfcG9ydF9pZDsKIAorCWlmIChuZXdwcmlvID4gQlJfTUFYX1BPUlRfUFJJT1JJVFkpCisJCXJldHVybiAtRVJBTkdFOworCisJbmV3X3BvcnRfaWQgPSBicl9tYWtlX3BvcnRfaWQobmV3cHJpbywgcC0+cG9ydF9ubyk7CiAJaWYgKGJyX2lzX2Rlc2lnbmF0ZWRfcG9ydChwKSkKIAkJcC0+ZGVzaWduYXRlZF9wb3J0ID0gbmV3X3BvcnRfaWQ7CiAKQEAgLTI2OSwxNCArMjc1LDIxIEBACiAJCWJyX2JlY29tZV9kZXNpZ25hdGVkX3BvcnQocCk7CiAJCWJyX3BvcnRfc3RhdGVfc2VsZWN0aW9uKHAtPmJyKTsKIAl9CisKKwlyZXR1cm4gMDsKIH0KIAogLyogY2FsbGVkIHVuZGVyIGJyaWRnZSBsb2NrICovCi12b2lkIGJyX3N0cF9zZXRfcGF0aF9jb3N0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHUzMiBwYXRoX2Nvc3QpCitpbnQgYnJfc3RwX3NldF9wYXRoX2Nvc3Qoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdW5zaWduZWQgbG9uZyBwYXRoX2Nvc3QpCiB7CisJaWYgKHBhdGhfY29zdCA8IEJSX01JTl9QQVRIX0NPU1QgfHwKKwkgICAgcGF0aF9jb3N0ID4gQlJfTUFYX1BBVEhfQ09TVCkKKwkJcmV0dXJuIC1FUkFOR0U7CisKIAlwLT5wYXRoX2Nvc3QgPSBwYXRoX2Nvc3Q7CiAJYnJfY29uZmlndXJhdGlvbl91cGRhdGUocC0+YnIpOwogCWJyX3BvcnRfc3RhdGVfc2VsZWN0aW9uKHAtPmJyKTsKKwlyZXR1cm4gMDsKIH0KIAogc3NpemVfdCBicl9zaG93X2JyaWRnZV9pZChjaGFyICpidWYsIGNvbnN0IHN0cnVjdCBicmlkZ2VfaWQgKmlkKQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9zeXNmc19ici5jIGIvbmV0L2JyaWRnZS9icl9zeXNmc19ici5jCmluZGV4IDVjMWU1NTUuLjY4Yjg5M2UgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYworKysgYi9uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMKQEAgLTQzLDkgKzQzLDcgQEAKIAlpZiAoZW5kcCA9PSBidWYpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3Bpbl9sb2NrX2JoKCZici0+bG9jayk7CiAJZXJyID0gKCpzZXQpKGJyLCB2YWwpOwotCXNwaW5fdW5sb2NrX2JoKCZici0+bG9jayk7CiAJcmV0dXJuIGVyciA/IGVyciA6IGxlbjsKIH0KIApAQCAtNTcsMjAgKzU1LDExIEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWx1XG4iLCBqaWZmaWVzX3RvX2Nsb2NrX3QoYnItPmZvcndhcmRfZGVsYXkpKTsKIH0KIAotc3RhdGljIGludCBzZXRfZm9yd2FyZF9kZWxheShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsKQotewotCXVuc2lnbmVkIGxvbmcgZGVsYXkgPSBjbG9ja190X3RvX2ppZmZpZXModmFsKTsKLQlici0+Zm9yd2FyZF9kZWxheSA9IGRlbGF5OwotCWlmIChicl9pc19yb290X2JyaWRnZShicikpCi0JCWJyLT5icmlkZ2VfZm9yd2FyZF9kZWxheSA9IGRlbGF5OwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9mb3J3YXJkX2RlbGF5KHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogewotCXJldHVybiBzdG9yZV9icmlkZ2VfcGFybShkLCBidWYsIGxlbiwgc2V0X2ZvcndhcmRfZGVsYXkpOworCXJldHVybiBzdG9yZV9icmlkZ2VfcGFybShkLCBidWYsIGxlbiwgYnJfc2V0X2ZvcndhcmRfZGVsYXkpOwogfQogc3RhdGljIERFVklDRV9BVFRSKGZvcndhcmRfZGVsYXksIFNfSVJVR08gfCBTX0lXVVNSLAogCQkgICBzaG93X2ZvcndhcmRfZGVsYXksIHN0b3JlX2ZvcndhcmRfZGVsYXkpOwpAQCAtODIsMjQgKzcxLDExIEBACiAJCSAgICAgICBqaWZmaWVzX3RvX2Nsb2NrX3QodG9fYnJpZGdlKGQpLT5oZWxsb190aW1lKSk7CiB9CiAKLXN0YXRpYyBpbnQgc2V0X2hlbGxvX3RpbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCkKLXsKLQl1bnNpZ25lZCBsb25nIHQgPSBjbG9ja190X3RvX2ppZmZpZXModmFsKTsKLQotCWlmICh0IDwgSFopCi0JCXJldHVybiAtRUlOVkFMOwotCi0JYnItPmhlbGxvX3RpbWUgPSB0OwotCWlmIChicl9pc19yb290X2JyaWRnZShicikpCi0JCWJyLT5icmlkZ2VfaGVsbG9fdGltZSA9IHQ7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90IHN0b3JlX2hlbGxvX3RpbWUoc3RydWN0IGRldmljZSAqZCwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLAogCQkJCXNpemVfdCBsZW4pCiB7Ci0JcmV0dXJuIHN0b3JlX2JyaWRnZV9wYXJtKGQsIGJ1ZiwgbGVuLCBzZXRfaGVsbG9fdGltZSk7CisJcmV0dXJuIHN0b3JlX2JyaWRnZV9wYXJtKGQsIGJ1ZiwgbGVuLCBicl9zZXRfaGVsbG9fdGltZSk7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoaGVsbG9fdGltZSwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfaGVsbG9fdGltZSwKIAkJICAgc3RvcmVfaGVsbG9fdGltZSk7CkBAIC0xMTEsMTkgKzg3LDEwIEBACiAJCSAgICAgICBqaWZmaWVzX3RvX2Nsb2NrX3QodG9fYnJpZGdlKGQpLT5tYXhfYWdlKSk7CiB9CiAKLXN0YXRpYyBpbnQgc2V0X21heF9hZ2Uoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCkKLXsKLQl1bnNpZ25lZCBsb25nIHQgPSBjbG9ja190X3RvX2ppZmZpZXModmFsKTsKLQlici0+bWF4X2FnZSA9IHQ7Ci0JaWYgKGJyX2lzX3Jvb3RfYnJpZGdlKGJyKSkKLQkJYnItPmJyaWRnZV9tYXhfYWdlID0gdDsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHNzaXplX3Qgc3RvcmVfbWF4X2FnZShzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogewotCXJldHVybiBzdG9yZV9icmlkZ2VfcGFybShkLCBidWYsIGxlbiwgc2V0X21heF9hZ2UpOworCXJldHVybiBzdG9yZV9icmlkZ2VfcGFybShkLCBidWYsIGxlbiwgYnJfc2V0X21heF9hZ2UpOwogfQogc3RhdGljIERFVklDRV9BVFRSKG1heF9hZ2UsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X21heF9hZ2UsIHN0b3JlX21heF9hZ2UpOwogCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3N5c2ZzX2lmLmMgYi9uZXQvYnJpZGdlL2JyX3N5c2ZzX2lmLmMKaW5kZXggZmQ1Nzk5Yy4uNjIyOWI2MiAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9zeXNmc19pZi5jCisrKyBiL25ldC9icmlkZ2UvYnJfc3lzZnNfaWYuYwpAQCAtMjMsNyArMjMsNyBAQAogc3RydWN0IGJycG9ydF9hdHRyaWJ1dGUgewogCXN0cnVjdCBhdHRyaWJ1dGUJYXR0cjsKIAlzc2l6ZV90ICgqc2hvdykoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqLCBjaGFyICopOwotCXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqLCB1bnNpZ25lZCBsb25nKTsKKwlpbnQgKCpzdG9yZSkoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqLCB1bnNpZ25lZCBsb25nKTsKIH07CiAKICNkZWZpbmUgQlJQT1JUX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKQkJICAgICAgICBcCkBAIC0zOCwyNyArMzgsMTcgQEAKIHsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcC0+cGF0aF9jb3N0KTsKIH0KLXN0YXRpYyBzc2l6ZV90IHN0b3JlX3BhdGhfY29zdChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1bnNpZ25lZCBsb25nIHYpCi17Ci0JYnJfc3RwX3NldF9wYXRoX2Nvc3QocCwgdik7Ci0JcmV0dXJuIDA7Ci19CisKIHN0YXRpYyBCUlBPUlRfQVRUUihwYXRoX2Nvc3QsIFNfSVJVR08gfCBTX0lXVVNSLAotCQkgICBzaG93X3BhdGhfY29zdCwgc3RvcmVfcGF0aF9jb3N0KTsKKwkJICAgc2hvd19wYXRoX2Nvc3QsIGJyX3N0cF9zZXRfcGF0aF9jb3N0KTsKIAogc3RhdGljIHNzaXplX3Qgc2hvd19wcmlvcml0eShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBjaGFyICpidWYpCiB7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHAtPnByaW9yaXR5KTsKIH0KLXN0YXRpYyBzc2l6ZV90IHN0b3JlX3ByaW9yaXR5KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHVuc2lnbmVkIGxvbmcgdikKLXsKLQlpZiAodiA+PSAoMTw8KDE2LUJSX1BPUlRfQklUUykpKQotCQlyZXR1cm4gLUVSQU5HRTsKLQlicl9zdHBfc2V0X3BvcnRfcHJpb3JpdHkocCwgdik7Ci0JcmV0dXJuIDA7Ci19CisKIHN0YXRpYyBCUlBPUlRfQVRUUihwcmlvcml0eSwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCQkgc2hvd19wcmlvcml0eSwgc3RvcmVfcHJpb3JpdHkpOworCQkJIHNob3dfcHJpb3JpdHksIGJyX3N0cF9zZXRfcG9ydF9wcmlvcml0eSk7CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfZGVzaWduYXRlZF9yb290KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIGNoYXIgKmJ1ZikKIHsKQEAgLTEzNiw3ICsxMjYsNyBAQAogfQogc3RhdGljIEJSUE9SVF9BVFRSKGhvbGRfdGltZXIsIFNfSVJVR08sIHNob3dfaG9sZF90aW1lciwgTlVMTCk7CiAKLXN0YXRpYyBzc2l6ZV90IHN0b3JlX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHVuc2lnbmVkIGxvbmcgdikKK3N0YXRpYyBpbnQgc3RvcmVfZmx1c2goc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdW5zaWduZWQgbG9uZyB2KQogewogCWJyX2ZkYl9kZWxldGVfYnlfcG9ydChwLT5iciwgcCwgMCk7IC8vIERvbid0IGRlbGV0ZSBsb2NhbCBlbnRyeQogCXJldHVybiAwOwpAQCAtMTQ4LDcgKzEzOCw3IEBACiAJaW50IGhhaXJwaW5fbW9kZSA9IChwLT5mbGFncyAmIEJSX0hBSVJQSU5fTU9ERSkgPyAxIDogMDsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgaGFpcnBpbl9tb2RlKTsKIH0KLXN0YXRpYyBzc2l6ZV90IHN0b3JlX2hhaXJwaW5fbW9kZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1bnNpZ25lZCBsb25nIHYpCitzdGF0aWMgaW50IHN0b3JlX2hhaXJwaW5fbW9kZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1bnNpZ25lZCBsb25nIHYpCiB7CiAJaWYgKHYpCiAJCXAtPmZsYWdzIHw9IEJSX0hBSVJQSU5fTU9ERTsKQEAgLTE2NSw3ICsxNTUsNyBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwLT5tdWx0aWNhc3Rfcm91dGVyKTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc3RvcmVfbXVsdGljYXN0X3JvdXRlcihzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLAorc3RhdGljIGludCBzdG9yZV9tdWx0aWNhc3Rfcm91dGVyKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsCiAJCQkJICAgICAgdW5zaWduZWQgbG9uZyB2KQogewogCXJldHVybiBicl9tdWx0aWNhc3Rfc2V0X3BvcnRfcm91dGVyKHAsIHYpOwpkaWZmIC0tZ2l0IGEvbmV0L2NhaWYvTWFrZWZpbGUgYi9uZXQvY2FpZi9NYWtlZmlsZQppbmRleCA5ZDM4ZTQwLi5lYmNkNGU3IDEwMDY0NAotLS0gYS9uZXQvY2FpZi9NYWtlZmlsZQorKysgYi9uZXQvY2FpZi9NYWtlZmlsZQpAQCAtNSw3ICs1LDcgQEAKIAljZmZybWwubyBjZnZlaWwubyBjZmRiZ2wub1wKIAljZnNlcmwubyBjZmRnbWwubyAgXAogCWNmcmZtbC5vIGNmdmlkbC5vIGNmdXRpbGwubyBcCi0JY2ZzcnZsLm8gY2Zwa3Rfc2tidWZmLm8gY2FpZl9jb25maWdfdXRpbC5vCisJY2ZzcnZsLm8gY2Zwa3Rfc2tidWZmLm8KIAogb2JqLSQoQ09ORklHX0NBSUYpICs9IGNhaWYubwogb2JqLSQoQ09ORklHX0NBSUZfTkVUREVWKSArPSBjaG5sX25ldC5vCmRpZmYgLS1naXQgYS9uZXQvY2FpZi9jYWlmX2NvbmZpZ191dGlsLmMgYi9uZXQvY2FpZi9jYWlmX2NvbmZpZ191dGlsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1MjJkOGMuLjAwMDAwMDAKLS0tIGEvbmV0L2NhaWYvY2FpZl9jb25maWdfdXRpbC5jCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgU1QtRXJpY3Nzb24gQUIgMjAxMAotICogQXV0aG9yOglTanVyIEJyZW5kZWxhbmQgc2p1ci5icmFuZGVsYW5kQHN0ZXJpY3Nzb24uY29tCi0gKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxuZXQvY2FpZi9jZmN0cmwuaD4KLSNpbmNsdWRlIDxuZXQvY2FpZi9jZmNuZmcuaD4KLSNpbmNsdWRlIDxuZXQvY2FpZi9jYWlmX2Rldi5oPgotCi1pbnQgY29ubmVjdF9yZXFfdG9fbGlua19wYXJhbShzdHJ1Y3QgY2ZjbmZnICpjbmZnLAotCQkJCXN0cnVjdCBjYWlmX2Nvbm5lY3RfcmVxdWVzdCAqcywKLQkJCQlzdHJ1Y3QgY2ZjdHJsX2xpbmtfcGFyYW0gKmwpCi17Ci0Jc3RydWN0IGRldl9pbmZvICpkZXZfaW5mbzsKLQllbnVtIGNmY25mZ19waHlfcHJlZmVyZW5jZSBwcmVmOwotCWludCByZXM7Ci0KLQltZW1zZXQobCwgMCwgc2l6ZW9mKCpsKSk7Ci0JLyogSW4gY2FpZiBwcm90b2NvbCBsb3cgdmFsdWUgaXMgaGlnaCBwcmlvcml0eSAqLwotCWwtPnByaW9yaXR5ID0gQ0FJRl9QUklPX01BWCAtIHMtPnByaW9yaXR5ICsgMTsKLQotCWlmIChzLT5pZmluZGV4ICE9IDApewotCQlyZXMgPSBjZmNuZmdfZ2V0X2lkX2Zyb21faWZpKGNuZmcsIHMtPmlmaW5kZXgpOwotCQlpZiAocmVzIDwgMCkKLQkJCXJldHVybiByZXM7Ci0JCWwtPnBoeWlkID0gcmVzOwotCX0KLQllbHNlIHsKLQkJc3dpdGNoIChzLT5saW5rX3NlbGVjdG9yKSB7Ci0JCWNhc2UgQ0FJRl9MSU5LX0hJR0hfQkFORFc6Ci0JCQlwcmVmID0gQ0ZQSFlQUkVGX0hJR0hfQlc7Ci0JCQlicmVhazsKLQkJY2FzZSBDQUlGX0xJTktfTE9XX0xBVEVOQ1k6Ci0JCQlwcmVmID0gQ0ZQSFlQUkVGX0xPV19MQVQ7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWRldl9pbmZvID0gY2ZjbmZnX2dldF9waHlpZChjbmZnLCBwcmVmKTsKLQkJaWYgKGRldl9pbmZvID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJbC0+cGh5aWQgPSBkZXZfaW5mby0+aWQ7Ci0JfQotCXN3aXRjaCAocy0+cHJvdG9jb2wpIHsKLQljYXNlIENBSUZQUk9UT19BVDoKLQkJbC0+bGlua3R5cGUgPSBDRkNUUkxfU1JWX1ZFSTsKLQkJaWYgKHMtPnNvY2thZGRyLnUuYXQudHlwZSA9PSBDQUlGX0FUVFlQRV9QTEFJTikKLQkJCWwtPmNodHlwZSA9IDB4MDI7Ci0JCWVsc2UKLQkJCWwtPmNodHlwZSA9IHMtPnNvY2thZGRyLnUuYXQudHlwZTsKLQkJbC0+ZW5kcG9pbnQgPSAweDAwOwotCQlicmVhazsKLQljYXNlIENBSUZQUk9UT19EQVRBR1JBTToKLQkJbC0+bGlua3R5cGUgPSBDRkNUUkxfU1JWX0RBVEFHUkFNOwotCQlsLT5jaHR5cGUgPSAweDAwOwotCQlsLT51LmRhdGFncmFtLmNvbm5pZCA9IHMtPnNvY2thZGRyLnUuZGdtLmNvbm5lY3Rpb25faWQ7Ci0JCWJyZWFrOwotCWNhc2UgQ0FJRlBST1RPX0RBVEFHUkFNX0xPT1A6Ci0JCWwtPmxpbmt0eXBlID0gQ0ZDVFJMX1NSVl9EQVRBR1JBTTsKLQkJbC0+Y2h0eXBlID0gMHgwMzsKLQkJbC0+ZW5kcG9pbnQgPSAweDAwOwotCQlsLT51LmRhdGFncmFtLmNvbm5pZCA9IHMtPnNvY2thZGRyLnUuZGdtLmNvbm5lY3Rpb25faWQ7Ci0JCWJyZWFrOwotCWNhc2UgQ0FJRlBST1RPX1JGTToKLQkJbC0+bGlua3R5cGUgPSBDRkNUUkxfU1JWX1JGTTsKLQkJbC0+dS5kYXRhZ3JhbS5jb25uaWQgPSBzLT5zb2NrYWRkci51LnJmbS5jb25uZWN0aW9uX2lkOwotCQlzdHJuY3B5KGwtPnUucmZtLnZvbHVtZSwgcy0+c29ja2FkZHIudS5yZm0udm9sdW1lLAotCQkJc2l6ZW9mKGwtPnUucmZtLnZvbHVtZSktMSk7Ci0JCWwtPnUucmZtLnZvbHVtZVtzaXplb2YobC0+dS5yZm0udm9sdW1lKS0xXSA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgQ0FJRlBST1RPX1VUSUw6Ci0JCWwtPmxpbmt0eXBlID0gQ0ZDVFJMX1NSVl9VVElMOwotCQlsLT5lbmRwb2ludCA9IDB4MDA7Ci0JCWwtPmNodHlwZSA9IDB4MDA7Ci0JCXN0cm5jcHkobC0+dS51dGlsaXR5Lm5hbWUsIHMtPnNvY2thZGRyLnUudXRpbC5zZXJ2aWNlLAotCQkJc2l6ZW9mKGwtPnUudXRpbGl0eS5uYW1lKS0xKTsKLQkJbC0+dS51dGlsaXR5Lm5hbWVbc2l6ZW9mKGwtPnUudXRpbGl0eS5uYW1lKS0xXSA9IDA7Ci0JCWNhaWZfYXNzZXJ0KHNpemVvZihsLT51LnV0aWxpdHkubmFtZSkgPiAxMCk7Ci0JCWwtPnUudXRpbGl0eS5wYXJhbWxlbiA9IHMtPnBhcmFtLnNpemU7Ci0JCWlmIChsLT51LnV0aWxpdHkucGFyYW1sZW4gPiBzaXplb2YobC0+dS51dGlsaXR5LnBhcmFtcykpCi0JCQlsLT51LnV0aWxpdHkucGFyYW1sZW4gPSBzaXplb2YobC0+dS51dGlsaXR5LnBhcmFtcyk7Ci0KLQkJbWVtY3B5KGwtPnUudXRpbGl0eS5wYXJhbXMsIHMtPnBhcmFtLmRhdGEsCi0JCSAgICAgICBsLT51LnV0aWxpdHkucGFyYW1sZW4pOwotCi0JCWJyZWFrOwotCWNhc2UgQ0FJRlBST1RPX0RFQlVHOgotCQlsLT5saW5rdHlwZSA9IENGQ1RSTF9TUlZfREJHOwotCQlsLT5lbmRwb2ludCA9IHMtPnNvY2thZGRyLnUuZGJnLnNlcnZpY2U7Ci0JCWwtPmNodHlwZSA9IHMtPnNvY2thZGRyLnUuZGJnLnR5cGU7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL25ldC9jYWlmL2NhaWZfZGV2LmMgYi9uZXQvY2FpZi9jYWlmX2Rldi5jCmluZGV4IGE0MmE0MDguLjY4MmMwZmUgMTAwNjQ0Ci0tLSBhL25ldC9jYWlmL2NhaWZfZGV2LmMKKysrIGIvbmV0L2NhaWYvY2FpZl9kZXYuYwpAQCAtMTIsNDkgKzEyLDUxIEBACiAjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6JXMoKTogIiBmbXQsIF9fZnVuY19fCiAKICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxuZXQvbmV0bnMvZ2VuZXJpYy5oPgogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bmV0L3BrdF9zY2hlZC5oPgogI2luY2x1ZGUgPG5ldC9jYWlmL2NhaWZfZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bmV0L2NhaWYvY2FpZl9kZXYuaD4KICNpbmNsdWRlIDxuZXQvY2FpZi9jYWlmX2xheWVyLmg+CiAjaW5jbHVkZSA8bmV0L2NhaWYvY2Zwa3QuaD4KICNpbmNsdWRlIDxuZXQvY2FpZi9jZmNuZmcuaD4KIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotI2RlZmluZSBUSU1FT1VUIChIWio1KQogCiAvKiBVc2VkIGZvciBsb2NhbCB0cmFja2luZyBvZiB0aGUgQ0FJRiBuZXQgZGV2aWNlcyAqLwogc3RydWN0IGNhaWZfZGV2aWNlX2VudHJ5IHsKIAlzdHJ1Y3QgY2ZsYXllciBsYXllcjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0JYXRvbWljX3QgaW5fdXNlOwotCWF0b21pY190IHN0YXRlOwotCXUxNiBwaHlpZDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwotCXdhaXRfcXVldWVfaGVhZF90IGV2ZW50OworCWludCBfX3BlcmNwdSAqcGNwdV9yZWZjbnQ7CiB9OwogCiBzdHJ1Y3QgY2FpZl9kZXZpY2VfZW50cnlfbGlzdCB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCS8qIFByb3RlY3RzIHNpbXVsYW5vdXMgZGVsZXRlcyBpbiBsaXN0ICovCi0Jc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBtdXRleCBsb2NrOwogfTsKIAogc3RydWN0IGNhaWZfbmV0IHsKKwlzdHJ1Y3QgY2ZjbmZnICpjZmc7CiAJc3RydWN0IGNhaWZfZGV2aWNlX2VudHJ5X2xpc3QgY2FpZmRldnM7CiB9OwogCiBzdGF0aWMgaW50IGNhaWZfbmV0X2lkOwotc3RhdGljIHN0cnVjdCBjZmNuZmcgKmNmZzsKKworc3RydWN0IGNmY25mZyAqZ2V0X2NmY25mZyhzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IGNhaWZfbmV0ICpjYWlmbjsKKwlCVUdfT04oIW5ldCk7CisJY2FpZm4gPSBuZXRfZ2VuZXJpYyhuZXQsIGNhaWZfbmV0X2lkKTsKKwlCVUdfT04oIWNhaWZuKTsKKwlyZXR1cm4gY2FpZm4tPmNmZzsKK30KK0VYUE9SVF9TWU1CT0woZ2V0X2NmY25mZyk7CiAKIHN0YXRpYyBzdHJ1Y3QgY2FpZl9kZXZpY2VfZW50cnlfbGlzdCAqY2FpZl9kZXZpY2VfbGlzdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CkBAIC02NSwxOSArNjcsMzkgQEAKIAlyZXR1cm4gJmNhaWZuLT5jYWlmZGV2czsKIH0KIAorc3RhdGljIHZvaWQgY2FpZmRfcHV0KHN0cnVjdCBjYWlmX2RldmljZV9lbnRyeSAqZSkKK3sKKwlpcnFzYWZlX2NwdV9kZWMoKmUtPnBjcHVfcmVmY250KTsKK30KKworc3RhdGljIHZvaWQgY2FpZmRfaG9sZChzdHJ1Y3QgY2FpZl9kZXZpY2VfZW50cnkgKmUpCit7CisJaXJxc2FmZV9jcHVfaW5jKCplLT5wY3B1X3JlZmNudCk7Cit9CisKK3N0YXRpYyBpbnQgY2FpZmRfcmVmY250X3JlYWQoc3RydWN0IGNhaWZfZGV2aWNlX2VudHJ5ICplKQoreworCWludCBpLCByZWZjbnQgPSAwOworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQorCQlyZWZjbnQgKz0gKnBlcl9jcHVfcHRyKGUtPnBjcHVfcmVmY250LCBpKTsKKwlyZXR1cm4gcmVmY250OworfQorCiAvKiBBbGxvY2F0ZSBuZXcgQ0FJRiBkZXZpY2UuICovCiBzdGF0aWMgc3RydWN0IGNhaWZfZGV2aWNlX2VudHJ5ICpjYWlmX2RldmljZV9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBjYWlmX2RldmljZV9lbnRyeV9saXN0ICpjYWlmZGV2czsKIAlzdHJ1Y3QgY2FpZl9kZXZpY2VfZW50cnkgKmNhaWZkOworCiAJY2FpZmRldnMgPSBjYWlmX2RldmljZV9saXN0KGRldl9uZXQoZGV2KSk7CiAJQlVHX09OKCFjYWlmZGV2cyk7CisKIAljYWlmZCA9IGt6YWxsb2Moc2l6ZW9mKCpjYWlmZCksIEdGUF9BVE9NSUMpOwogCWlmICghY2FpZmQpCiAJCXJldHVybiBOVUxMOworCWNhaWZkLT5wY3B1X3JlZmNudCA9IGFsbG9jX3BlcmNwdShpbnQpOwogCWNhaWZkLT5uZXRkZXYgPSBkZXY7Ci0JbGlzdF9hZGQoJmNhaWZkLT5saXN0LCAmY2FpZmRldnMtPmxpc3QpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhaWZkLT5ldmVudCk7CisJZGV2X2hvbGQoZGV2KTsKIAlyZXR1cm4gY2FpZmQ7CiB9CiAKQEAgLTg3LDk4ICsxMDksNjUgQEAKIAkgICAgY2FpZl9kZXZpY2VfbGlzdChkZXZfbmV0KGRldikpOwogCXN0cnVjdCBjYWlmX2RldmljZV9lbnRyeSAqY2FpZmQ7CiAJQlVHX09OKCFjYWlmZGV2cyk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShjYWlmZCwgJmNhaWZkZXZzLT5saXN0LCBsaXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY2FpZmQsICZjYWlmZGV2cy0+bGlzdCwgbGlzdCkgewogCQlpZiAoY2FpZmQtPm5ldGRldiA9PSBkZXYpCiAJCQlyZXR1cm4gY2FpZmQ7CiAJfQogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBjYWlmX2RldmljZV9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGNhaWZfZGV2aWNlX2VudHJ5X2xpc3QgKmNhaWZkZXZzID0KLQkgICAgY2FpZl9kZXZpY2VfbGlzdChkZXZfbmV0KGRldikpOwotCXN0cnVjdCBjYWlmX2RldmljZV9lbnRyeSAqY2FpZmQ7Ci0JQVNTRVJUX1JUTkwoKTsKLQlpZiAoZGV2LT50eXBlICE9IEFSUEhSRF9DQUlGKQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2tfYmgoJmNhaWZkZXZzLT5sb2NrKTsKLQljYWlmZCA9IGNhaWZfZ2V0KGRldik7Ci0JaWYgKGNhaWZkID09IE5VTEwpIHsKLQkJc3Bpbl91bmxvY2tfYmgoJmNhaWZkZXZzLT5sb2NrKTsKLQkJcmV0dXJuOwotCX0KLQotCWxpc3RfZGVsKCZjYWlmZC0+bGlzdCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmNhaWZkZXZzLT5sb2NrKTsKLQotCWtmcmVlKGNhaWZkKTsKLX0KLQogc3RhdGljIGludCB0cmFuc21pdChzdHJ1Y3QgY2ZsYXllciAqbGF5ZXIsIHN0cnVjdCBjZnBrdCAqcGt0KQogeworCWludCBlcnI7CiAJc3RydWN0IGNhaWZfZGV2aWNlX2VudHJ5ICpjYWlmZCA9CiAJICAgIGNvbnRhaW5lcl9vZihsYXllciwgc3RydWN0IGNhaWZfZGV2aWNlX2VudHJ5LCBsYXllcik7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiwgKnNrYjI7Ci0JaW50IHJldCA9IC1FSU5WQUw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwogCXNrYiA9IGNmcGt0X3RvbmF0aXZlKHBrdCk7CiAJc2tiLT5kZXYgPSBjYWlmZC0+bmV0ZGV2OwotCS8qCi0JICogRG9uJ3QgYWxsb3cgU0tCIHRvIGJlIGRlc3Ryb3llZCB1cG9uIGVycm9yLCBidXQgc2lnbmFsIHJlc2VuZAotCSAqIG5vdGlmaWNhdGlvbiB0byBjbGllbnRzLiBXZSBjYW4ndCByZWx5IG9uIHRoZSByZXR1cm4gdmFsdWUgYXMKLQkgKiBjb25nZXN0aW9uIChORVRfWE1JVF9DTikgc29tZXRpbWVzIGRyb3BzIHRoZSBwYWNrZXQsIHNvbWV0aW1lcyBkb24ndC4KLQkgKi8KLQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChjYWlmZC0+bmV0ZGV2KSkKLQkJcmV0dXJuIC1FQUdBSU47Ci0Jc2tiMiA9IHNrYl9nZXQoc2tiKTsKIAotCXJldCA9IGRldl9xdWV1ZV94bWl0KHNrYjIpOworCWVyciA9IGRldl9xdWV1ZV94bWl0KHNrYik7CisJaWYgKGVyciA+IDApCisJCWVyciA9IC1FSU87CiAKLQlpZiAoIXJldCkKLQkJa2ZyZWVfc2tiKHNrYik7Ci0JZWxzZQotCQlyZXR1cm4gLUVBR0FJTjsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG1vZGVtY21kKHN0cnVjdCBjZmxheWVyICpsYXlyLCBlbnVtIGNhaWZfbW9kZW1jbWQgY3RybCkKLXsKLQlzdHJ1Y3QgY2FpZl9kZXZpY2VfZW50cnkgKmNhaWZkOwotCXN0cnVjdCBjYWlmX2Rldl9jb21tb24gKmNhaWZkZXY7Ci0JY2FpZmQgPSBjb250YWluZXJfb2YobGF5ciwgc3RydWN0IGNhaWZfZGV2aWNlX2VudHJ5LCBsYXllcik7Ci0JY2FpZmRldiA9IG5ldGRldl9wcml2KGNhaWZkLT5uZXRkZXYpOwotCWlmIChjdHJsID09IF9DQUlGX01PREVNQ01EX1BIWUlGX1VTRUZVTEwpIHsKLQkJYXRvbWljX3NldCgmY2FpZmQtPmluX3VzZSwgMSk7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2FpZmQtPmV2ZW50KTsKLQotCX0gZWxzZSBpZiAoY3RybCA9PSBfQ0FJRl9NT0RFTUNNRF9QSFlJRl9VU0VMRVNTKSB7Ci0JCWF0b21pY19zZXQoJmNhaWZkLT5pbl91c2UsIDApOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNhaWZkLT5ldmVudCk7Ci0JfQotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiAKIC8qCi0gKiBTdHVmZiByZWNlaXZlZCBwYWNrZXRzIHRvIGFzc29jaWF0ZWQgc29ja2V0cy4KKyAqIFN0dWZmIHJlY2VpdmVkIHBhY2tldHMgaW50byB0aGUgQ0FJRiBzdGFjay4KICAqIE9uIGVycm9yLCByZXR1cm5zIG5vbi16ZXJvIGFuZCByZWxlYXNlcyB0aGUgc2tiLgogICovCiBzdGF0aWMgaW50IHJlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgc3RydWN0IHBhY2tldF90eXBlICpwa3R0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0OwogCXN0cnVjdCBjZnBrdCAqcGt0OwogCXN0cnVjdCBjYWlmX2RldmljZV9lbnRyeSAqY2FpZmQ7Ci0JbmV0ID0gZGV2X25ldChkZXYpOworCWludCBlcnI7CisKIAlwa3QgPSBjZnBrdF9mcm9tbmF0aXZlKENBSUZfRElSX0lOLCBza2IpOworCisJcmN1X3JlYWRfbG9jaygpOwogCWNhaWZkID0gY2FpZl9nZXQoZGV2KTsKLQlpZiAoIWNhaWZkIHx8ICFjYWlmZC0+bGF5ZXIudXAgfHwgIWNhaWZkLT5sYXllci51cC0+cmVjZWl2ZSkKLQkJcmV0dXJuIE5FVF9SWF9EUk9QOwogCi0JaWYgKGNhaWZkLT5sYXllci51cC0+cmVjZWl2ZShjYWlmZC0+bGF5ZXIudXAsIHBrdCkpCisJaWYgKCFjYWlmZCB8fCAhY2FpZmQtPmxheWVyLnVwIHx8ICFjYWlmZC0+bGF5ZXIudXAtPnJlY2VpdmUgfHwKKwkJCSFuZXRpZl9vcGVyX3VwKGNhaWZkLT5uZXRkZXYpKSB7CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIE5FVF9SWF9EUk9QOworCX0KIAorCS8qIEhvbGQgcmVmZXJlbmNlIHRvIG5ldGRldmljZSB3aGlsZSB1c2luZyBDQUlGIHN0YWNrICovCisJY2FpZmRfaG9sZChjYWlmZCk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwllcnIgPSBjYWlmZC0+bGF5ZXIudXAtPnJlY2VpdmUoY2FpZmQtPmxheWVyLnVwLCBwa3QpOworCisJLyogRm9yIC1FSUxTRVEgdGhlIHBhY2tldCBpcyBub3QgZnJlZWQgc28gc28gaXQgbm93ICovCisJaWYgKGVyciA9PSAtRUlMU0VRKQorCQljZnBrdF9kZXN0cm95KHBrdCk7CisKKwkvKiBSZWxlYXNlIHJlZmVyZW5jZSB0byBzdGFjayB1cHdhcmRzICovCisJY2FpZmRfcHV0KGNhaWZkKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTg5LDE1ICsxNzgsMjUgQEAKIAogc3RhdGljIHZvaWQgZGV2X2Zsb3djdHJsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBvbikKIHsKLQlzdHJ1Y3QgY2FpZl9kZXZpY2VfZW50cnkgKmNhaWZkID0gY2FpZl9nZXQoZGV2KTsKLQlpZiAoIWNhaWZkIHx8ICFjYWlmZC0+bGF5ZXIudXAgfHwgIWNhaWZkLT5sYXllci51cC0+Y3RybGNtZCkKKwlzdHJ1Y3QgY2FpZl9kZXZpY2VfZW50cnkgKmNhaWZkOworCisJcmN1X3JlYWRfbG9jaygpOworCisJY2FpZmQgPSBjYWlmX2dldChkZXYpOworCWlmICghY2FpZmQgfHwgIWNhaWZkLT5sYXllci51cCB8fCAhY2FpZmQtPmxheWVyLnVwLT5jdHJsY21kKSB7CisJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm47CisJfQorCisJY2FpZmRfaG9sZChjYWlmZCk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAljYWlmZC0+bGF5ZXIudXAtPmN0cmxjbWQoY2FpZmQtPmxheWVyLnVwLAogCQkJCSBvbiA/CiAJCQkJIF9DQUlGX0NUUkxDTURfUEhZSUZfRkxPV19PTl9JTkQgOgogCQkJCSBfQ0FJRl9DVFJMQ01EX1BIWUlGX0ZMT1dfT0ZGX0lORCwKIAkJCQkgY2FpZmQtPmxheWVyLmlkKTsKKwljYWlmZF9wdXQoY2FpZmQpOwogfQogCiAvKiBub3RpZnkgQ2FpZiBvZiBkZXZpY2UgZXZlbnRzICovCkBAIC0yMDgsMzcgKzIwNywyOCBAQAogCXN0cnVjdCBjYWlmX2RldmljZV9lbnRyeSAqY2FpZmQgPSBOVUxMOwogCXN0cnVjdCBjYWlmX2Rldl9jb21tb24gKmNhaWZkZXY7CiAJZW51bSBjZmNuZmdfcGh5X3ByZWZlcmVuY2UgcHJlZjsKLQlpbnQgcmVzID0gLUVJTlZBTDsKIAllbnVtIGNmY25mZ19waHlfdHlwZSBwaHlfdHlwZTsKKwlzdHJ1Y3QgY2ZjbmZnICpjZmc7CisJc3RydWN0IGNhaWZfZGV2aWNlX2VudHJ5X2xpc3QgKmNhaWZkZXZzID0KKwkgICAgY2FpZl9kZXZpY2VfbGlzdChkZXZfbmV0KGRldikpOwogCiAJaWYgKGRldi0+dHlwZSAhPSBBUlBIUkRfQ0FJRikKIAkJcmV0dXJuIDA7CiAKKwljZmcgPSBnZXRfY2ZjbmZnKGRldl9uZXQoZGV2KSk7CisJaWYgKGNmZyA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwogCXN3aXRjaCAod2hhdCkgewogCWNhc2UgTkVUREVWX1JFR0lTVEVSOgotCQluZXRkZXZfaW5mbyhkZXYsICJyZWdpc3RlclxuIik7CiAJCWNhaWZkID0gY2FpZl9kZXZpY2VfYWxsb2MoZGV2KTsKLQkJaWYgKGNhaWZkID09IE5VTEwpCi0JCQlicmVhazsKKwkJaWYgKCFjYWlmZCkKKwkJCXJldHVybiAwOworCiAJCWNhaWZkZXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCQljYWlmZGV2LT5mbG93Y3RybCA9IGRldl9mbG93Y3RybDsKLQkJYXRvbWljX3NldCgmY2FpZmQtPnN0YXRlLCB3aGF0KTsKLQkJcmVzID0gMDsKLQkJYnJlYWs7CiAKLQljYXNlIE5FVERFVl9VUDoKLQkJbmV0ZGV2X2luZm8oZGV2LCAidXBcbiIpOwotCQljYWlmZCA9IGNhaWZfZ2V0KGRldik7Ci0JCWlmIChjYWlmZCA9PSBOVUxMKQotCQkJYnJlYWs7Ci0JCWNhaWZkZXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCQlpZiAoYXRvbWljX3JlYWQoJmNhaWZkLT5zdGF0ZSkgPT0gTkVUREVWX1VQKSB7Ci0JCQluZXRkZXZfaW5mbyhkZXYsICJhbHJlYWR5IHVwXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWF0b21pY19zZXQoJmNhaWZkLT5zdGF0ZSwgd2hhdCk7CiAJCWNhaWZkLT5sYXllci50cmFuc21pdCA9IHRyYW5zbWl0OwotCQljYWlmZC0+bGF5ZXIubW9kZW1jbWQgPSBtb2RlbWNtZDsKIAogCQlpZiAoY2FpZmRldi0+dXNlX2ZyYWcpCiAJCQlwaHlfdHlwZSA9IENGUEhZVFlQRV9GUkFHOwpAQCAtMjU2LDYyICsyNDYsOTQgQEAKIAkJCXByZWYgPSBDRlBIWVBSRUZfSElHSF9CVzsKIAkJCWJyZWFrOwogCQl9Ci0JCWRldl9ob2xkKGRldik7Ci0JCWNmY25mZ19hZGRfcGh5X2xheWVyKGdldF9jYWlmX2NvbmYoKSwKLQkJCQkgICAgIHBoeV90eXBlLAotCQkJCSAgICAgZGV2LAotCQkJCSAgICAgJmNhaWZkLT5sYXllciwKLQkJCQkgICAgICZjYWlmZC0+cGh5aWQsCi0JCQkJICAgICBwcmVmLAotCQkJCSAgICAgY2FpZmRldi0+dXNlX2ZjcywKLQkJCQkgICAgIGNhaWZkZXYtPnVzZV9zdHgpOwogCQlzdHJuY3B5KGNhaWZkLT5sYXllci5uYW1lLCBkZXYtPm5hbWUsCiAJCQlzaXplb2YoY2FpZmQtPmxheWVyLm5hbWUpIC0gMSk7CiAJCWNhaWZkLT5sYXllci5uYW1lW3NpemVvZihjYWlmZC0+bGF5ZXIubmFtZSkgLSAxXSA9IDA7CisKKwkJbXV0ZXhfbG9jaygmY2FpZmRldnMtPmxvY2spOworCQlsaXN0X2FkZF9yY3UoJmNhaWZkLT5saXN0LCAmY2FpZmRldnMtPmxpc3QpOworCisJCWNmY25mZ19hZGRfcGh5X2xheWVyKGNmZywKKwkJCQkgICAgIHBoeV90eXBlLAorCQkJCSAgICAgZGV2LAorCQkJCSAgICAgJmNhaWZkLT5sYXllciwKKwkJCQkgICAgIHByZWYsCisJCQkJICAgICBjYWlmZGV2LT51c2VfZmNzLAorCQkJCSAgICAgY2FpZmRldi0+dXNlX3N0eCk7CisJCW11dGV4X3VubG9jaygmY2FpZmRldnMtPmxvY2spOwogCQlicmVhazsKIAotCWNhc2UgTkVUREVWX0dPSU5HX0RPV046CisJY2FzZSBORVRERVZfVVA6CisJCXJjdV9yZWFkX2xvY2soKTsKKwogCQljYWlmZCA9IGNhaWZfZ2V0KGRldik7Ci0JCWlmIChjYWlmZCA9PSBOVUxMKQorCQlpZiAoY2FpZmQgPT0gTlVMTCkgeworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlicmVhazsKLQkJbmV0ZGV2X2luZm8oZGV2LCAiZ29pbmcgZG93blxuIik7CisJCX0KIAotCQlpZiAoYXRvbWljX3JlYWQoJmNhaWZkLT5zdGF0ZSkgPT0gTkVUREVWX0dPSU5HX0RPV04gfHwKLQkJCWF0b21pY19yZWFkKCZjYWlmZC0+c3RhdGUpID09IE5FVERFVl9ET1dOKQotCQkJYnJlYWs7CisJCWNmY25mZ19zZXRfcGh5X3N0YXRlKGNmZywgJmNhaWZkLT5sYXllciwgdHJ1ZSk7CisJCXJjdV9yZWFkX3VubG9jaygpOwogCi0JCWF0b21pY19zZXQoJmNhaWZkLT5zdGF0ZSwgd2hhdCk7Ci0JCWlmICghY2FpZmQgfHwgIWNhaWZkLT5sYXllci51cCB8fCAhY2FpZmQtPmxheWVyLnVwLT5jdHJsY21kKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWNhaWZkLT5sYXllci51cC0+Y3RybGNtZChjYWlmZC0+bGF5ZXIudXAsCi0JCQkJCSBfQ0FJRl9DVFJMQ01EX1BIWUlGX0RPV05fSU5ELAotCQkJCQkgY2FpZmQtPmxheWVyLmlkKTsKLQkJbWlnaHRfc2xlZXAoKTsKLQkJcmVzID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoY2FpZmQtPmV2ZW50LAotCQkJCQlhdG9taWNfcmVhZCgmY2FpZmQtPmluX3VzZSkgPT0gMCwKLQkJCQkJVElNRU9VVCk7CiAJCWJyZWFrOwogCiAJY2FzZSBORVRERVZfRE9XTjoKKwkJcmN1X3JlYWRfbG9jaygpOworCiAJCWNhaWZkID0gY2FpZl9nZXQoZGV2KTsKLQkJaWYgKGNhaWZkID09IE5VTEwpCi0JCQlicmVhazsKLQkJbmV0ZGV2X2luZm8oZGV2LCAiZG93blxuIik7Ci0JCWlmIChhdG9taWNfcmVhZCgmY2FpZmQtPmluX3VzZSkpCi0JCQluZXRkZXZfd2FybihkZXYsCi0JCQkJICAgICJVbnJlZ2lzdGVyaW5nIGFuIGFjdGl2ZSBDQUlGIGRldmljZVxuIik7Ci0JCWNmY25mZ19kZWxfcGh5X2xheWVyKGdldF9jYWlmX2NvbmYoKSwgJmNhaWZkLT5sYXllcik7Ci0JCWRldl9wdXQoZGV2KTsKLQkJYXRvbWljX3NldCgmY2FpZmQtPnN0YXRlLCB3aGF0KTsKKwkJaWYgKCFjYWlmZCB8fCAhY2FpZmQtPmxheWVyLnVwIHx8ICFjYWlmZC0+bGF5ZXIudXAtPmN0cmxjbWQpIHsKKwkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQljZmNuZmdfc2V0X3BoeV9zdGF0ZShjZmcsICZjYWlmZC0+bGF5ZXIsIGZhbHNlKTsKKwkJY2FpZmRfaG9sZChjYWlmZCk7CisJCXJjdV9yZWFkX3VubG9jaygpOworCisJCWNhaWZkLT5sYXllci51cC0+Y3RybGNtZChjYWlmZC0+bGF5ZXIudXAsCisJCQkJCSBfQ0FJRl9DVFJMQ01EX1BIWUlGX0RPV05fSU5ELAorCQkJCQkgY2FpZmQtPmxheWVyLmlkKTsKKwkJY2FpZmRfcHV0KGNhaWZkKTsKIAkJYnJlYWs7CiAKIAljYXNlIE5FVERFVl9VTlJFR0lTVEVSOgorCQltdXRleF9sb2NrKCZjYWlmZGV2cy0+bG9jayk7CisKIAkJY2FpZmQgPSBjYWlmX2dldChkZXYpOwotCQlpZiAoY2FpZmQgPT0gTlVMTCkKKwkJaWYgKGNhaWZkID09IE5VTEwpIHsKKwkJCW11dGV4X3VubG9jaygmY2FpZmRldnMtPmxvY2spOwogCQkJYnJlYWs7Ci0JCW5ldGRldl9pbmZvKGRldiwgInVucmVnaXN0ZXJcbiIpOwotCQlhdG9taWNfc2V0KCZjYWlmZC0+c3RhdGUsIHdoYXQpOwotCQljYWlmX2RldmljZV9kZXN0cm95KGRldik7CisJCX0KKwkJbGlzdF9kZWxfcmN1KCZjYWlmZC0+bGlzdCk7CisKKwkJLyoKKwkJICogTkVUREVWX1VOUkVHSVNURVIgaXMgY2FsbGVkIHJlcGVhdGVkbHkgdW50aWwgYWxsIHJlZmVyZW5jZQorCQkgKiBjb3VudHMgZm9yIHRoZSBuZXQtZGV2aWNlIGFyZSByZWxlYXNlZC4gSWYgcmVmZXJlbmNlcyB0bworCQkgKiBjYWlmZCBpcyB0YWtlbiwgc2ltcGx5IGlnbm9yZSBORVRERVZfVU5SRUdJU1RFUiBhbmQgd2FpdCBmb3IKKwkJICogdGhlIG5leHQgY2FsbCB0byBORVRERVZfVU5SRUdJU1RFUi4KKwkJICoKKwkJICogSWYgYW55IHBhY2tldHMgYXJlIGluIGZsaWdodCBkb3duIHRoZSBDQUlGIFN0YWNrLAorCQkgKiBjZmNuZmdfZGVsX3BoeV9sYXllciB3aWxsIHJldHVybiBub256ZXJvLgorCQkgKiBJZiBubyBwYWNrZXRzIGFyZSBpbiBmbGlnaHQsIHRoZSBDQUlGIFN0YWNrIGFzc29jaWF0ZWQKKwkJICogd2l0aCB0aGUgbmV0LWRldmljZSB1bi1yZWdpc3RlcmluZyBpcyBmcmVlZC4KKwkJICovCisKKwkJaWYgKGNhaWZkX3JlZmNudF9yZWFkKGNhaWZkKSAhPSAwIHx8CisJCQljZmNuZmdfZGVsX3BoeV9sYXllcihjZmcsICZjYWlmZC0+bGF5ZXIpICE9IDApIHsKKworCQkJcHJfaW5mbygiV2FpdCBmb3IgZGV2aWNlIGludXNlXG4iKTsKKwkJCS8qIEVucm9sZSBkZXZpY2UgaWYgQ0FJRiBTdGFjayBpcyBzdGlsbCBpbiB1c2UgKi8KKwkJCWxpc3RfYWRkX3JjdSgmY2FpZmQtPmxpc3QsICZjYWlmZGV2cy0+bGlzdCk7CisJCQltdXRleF91bmxvY2soJmNhaWZkZXZzLT5sb2NrKTsKKwkJCWJyZWFrOworCQl9CisKKwkJc3luY2hyb25pemVfcmN1KCk7CisJCWRldl9wdXQoY2FpZmQtPm5ldGRldik7CisJCWZyZWVfcGVyY3B1KGNhaWZkLT5wY3B1X3JlZmNudCk7CisJCWtmcmVlKGNhaWZkKTsKKworCQltdXRleF91bmxvY2soJmNhaWZkZXZzLT5sb2NrKTsKIAkJYnJlYWs7CiAJfQogCXJldHVybiAwOwpAQCAtMzIyLDYxICszNDQsNjAgQEAKIAkucHJpb3JpdHkgPSAwLAogfTsKIAotCi1zdHJ1Y3QgY2ZjbmZnICpnZXRfY2FpZl9jb25mKHZvaWQpCi17Ci0JcmV0dXJuIGNmZzsKLX0KLUVYUE9SVF9TWU1CT0woZ2V0X2NhaWZfY29uZik7Ci0KLWludCBjYWlmX2Nvbm5lY3RfY2xpZW50KHN0cnVjdCBjYWlmX2Nvbm5lY3RfcmVxdWVzdCAqY29ubl9yZXEsCi0JCQlzdHJ1Y3QgY2ZsYXllciAqY2xpZW50X2xheWVyLCBpbnQgKmlmaW5kZXgsCi0JCQlpbnQgKmhlYWRyb29tLCBpbnQgKnRhaWxyb29tKQotewotCXN0cnVjdCBjZmN0cmxfbGlua19wYXJhbSBwYXJhbTsKLQlpbnQgcmV0OwotCXJldCA9IGNvbm5lY3RfcmVxX3RvX2xpbmtfcGFyYW0oZ2V0X2NhaWZfY29uZigpLCBjb25uX3JlcSwgJnBhcmFtKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCS8qIEhvb2sgdXAgdGhlIGFkYXB0YXRpb24gbGF5ZXIuICovCi0JcmV0dXJuIGNmY25mZ19hZGRfYWRhcHRhdGlvbl9sYXllcihnZXRfY2FpZl9jb25mKCksICZwYXJhbSwKLQkJCQkJY2xpZW50X2xheWVyLCBpZmluZGV4LAotCQkJCQloZWFkcm9vbSwgdGFpbHJvb20pOwotfQotRVhQT1JUX1NZTUJPTChjYWlmX2Nvbm5lY3RfY2xpZW50KTsKLQotaW50IGNhaWZfZGlzY29ubmVjdF9jbGllbnQoc3RydWN0IGNmbGF5ZXIgKmFkYXBfbGF5ZXIpCi17Ci0gICAgICAgcmV0dXJuIGNmY25mZ19kaXNjb25uX2FkYXB0X2xheWVyKGdldF9jYWlmX2NvbmYoKSwgYWRhcF9sYXllcik7Ci19Ci1FWFBPUlRfU1lNQk9MKGNhaWZfZGlzY29ubmVjdF9jbGllbnQpOwotCi12b2lkIGNhaWZfcmVsZWFzZV9jbGllbnQoc3RydWN0IGNmbGF5ZXIgKmFkYXBfbGF5ZXIpCi17Ci0gICAgICAgY2ZjbmZnX3JlbGVhc2VfYWRhcF9sYXllcihhZGFwX2xheWVyKTsKLX0KLUVYUE9SVF9TWU1CT0woY2FpZl9yZWxlYXNlX2NsaWVudCk7Ci0KIC8qIFBlci1uYW1lc3BhY2UgQ2FpZiBkZXZpY2VzIGhhbmRsaW5nICovCiBzdGF0aWMgaW50IGNhaWZfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBjYWlmX25ldCAqY2FpZm4gPSBuZXRfZ2VuZXJpYyhuZXQsIGNhaWZfbmV0X2lkKTsKKwlCVUdfT04oIWNhaWZuKTsKIAlJTklUX0xJU1RfSEVBRCgmY2FpZm4tPmNhaWZkZXZzLmxpc3QpOwotCXNwaW5fbG9ja19pbml0KCZjYWlmbi0+Y2FpZmRldnMubG9jayk7CisJbXV0ZXhfaW5pdCgmY2FpZm4tPmNhaWZkZXZzLmxvY2spOworCisJY2FpZm4tPmNmZyA9IGNmY25mZ19jcmVhdGUoKTsKKwlpZiAoIWNhaWZuLT5jZmcpIHsKKwkJcHJfd2FybigiY2FuJ3QgY3JlYXRlIGNmY25mZ1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBjYWlmX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCWludCByZXM7CisJc3RydWN0IGNhaWZfZGV2aWNlX2VudHJ5ICpjYWlmZCwgKnRtcDsKKwlzdHJ1Y3QgY2FpZl9kZXZpY2VfZW50cnlfbGlzdCAqY2FpZmRldnMgPQorCSAgICBjYWlmX2RldmljZV9saXN0KG5ldCk7CisJc3RydWN0IGNmY25mZyAqY2ZnOworCiAJcnRubF9sb2NrKCk7Ci0JZm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7Ci0JCWlmIChkZXYtPnR5cGUgIT0gQVJQSFJEX0NBSUYpCi0JCQljb250aW51ZTsKLQkJcmVzID0gZGV2X2Nsb3NlKGRldik7Ci0JCWNhaWZfZGV2aWNlX2Rlc3Ryb3koZGV2KTsKKwltdXRleF9sb2NrKCZjYWlmZGV2cy0+bG9jayk7CisKKwljZmcgPSBnZXRfY2ZjbmZnKG5ldCk7CisJaWYgKGNmZyA9PSBOVUxMKSB7CisJCW11dGV4X3VubG9jaygmY2FpZmRldnMtPmxvY2spOworCQlyZXR1cm47CiAJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNhaWZkLCB0bXAsICZjYWlmZGV2cy0+bGlzdCwgbGlzdCkgeworCQlpbnQgaSA9IDA7CisJCWxpc3RfZGVsX3JjdSgmY2FpZmQtPmxpc3QpOworCQljZmNuZmdfc2V0X3BoeV9zdGF0ZShjZmcsICZjYWlmZC0+bGF5ZXIsIGZhbHNlKTsKKworCQl3aGlsZSAoaSA8IDEwICYmCisJCQkoY2FpZmRfcmVmY250X3JlYWQoY2FpZmQpICE9IDAgfHwKKwkJCWNmY25mZ19kZWxfcGh5X2xheWVyKGNmZywgJmNhaWZkLT5sYXllcikgIT0gMCkpIHsKKworCQkJcHJfaW5mbygiV2FpdCBmb3IgZGV2aWNlIGludXNlXG4iKTsKKwkJCW1zbGVlcCgyNTApOworCQkJaSsrOworCQl9CisJCXN5bmNocm9uaXplX3JjdSgpOworCQlkZXZfcHV0KGNhaWZkLT5uZXRkZXYpOworCQlmcmVlX3BlcmNwdShjYWlmZC0+cGNwdV9yZWZjbnQpOworCQlrZnJlZShjYWlmZCk7CisJfQorCWNmY25mZ19yZW1vdmUoY2ZnKTsKKworCW11dGV4X3VubG9jaygmY2FpZmRldnMtPmxvY2spOwogCXJ0bmxfdW5sb2NrKCk7CiB9CiAKQEAgLTM5MSwzMiArNDEyLDIzIEBACiBzdGF0aWMgaW50IF9faW5pdCBjYWlmX2RldmljZV9pbml0KHZvaWQpCiB7CiAJaW50IHJlc3VsdDsKLQljZmcgPSBjZmNuZmdfY3JlYXRlKCk7Ci0JaWYgKCFjZmcpIHsKLQkJcHJfd2FybigiY2FuJ3QgY3JlYXRlIGNmY25mZ1xuIik7Ci0JCWdvdG8gZXJyX2NmY25mZ19jcmVhdGVfZmFpbGVkOwotCX0KKwogCXJlc3VsdCA9IHJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UoJmNhaWZfbmV0X29wcyk7CiAKLQlpZiAocmVzdWx0KSB7Ci0JCWtmcmVlKGNmZyk7Ci0JCWNmZyA9IE5VTEw7CisJaWYgKHJlc3VsdCkKIAkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0JZGV2X2FkZF9wYWNrKCZjYWlmX3BhY2tldF90eXBlKTsKKwogCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmY2FpZl9kZXZpY2Vfbm90aWZpZXIpOworCWRldl9hZGRfcGFjaygmY2FpZl9wYWNrZXRfdHlwZSk7CiAKIAlyZXR1cm4gcmVzdWx0OwotZXJyX2NmY25mZ19jcmVhdGVfZmFpbGVkOgotCXJldHVybiAtRU5PREVWOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY2FpZl9kZXZpY2VfZXhpdCh2b2lkKQogewotCWRldl9yZW1vdmVfcGFjaygmY2FpZl9wYWNrZXRfdHlwZSk7CiAJdW5yZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKCZjYWlmX25ldF9vcHMpOwogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZjYWlmX2RldmljZV9ub3RpZmllcik7Ci0JY2ZjbmZnX3JlbW92ZShjZmcpOworCWRldl9yZW1vdmVfcGFjaygmY2FpZl9wYWNrZXRfdHlwZSk7CiB9CiAKIG1vZHVsZV9pbml0KGNhaWZfZGV2aWNlX2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2NhaWYvY2FpZl9zb2NrZXQuYyBiL25ldC9jYWlmL2NhaWZfc29ja2V0LmMKaW5kZXggMzdhNDAzNC4uYTk4NjI4MCAxMDA2NDQKLS0tIGEvbmV0L2NhaWYvY2FpZl9zb2NrZXQuYworKysgYi9uZXQvY2FpZi9jYWlmX3NvY2tldC5jCkBAIC0xOSw3ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9jYWlmL2NhaWZfc29ja2V0Lmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGxpbnV4L2F0b21pYy5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L3RjcF9zdGF0ZXMuaD4KICNpbmNsdWRlIDxuZXQvY2FpZi9jYWlmX2xheWVyLmg+CkBAIC00OCw2ICs0OCw3IEBACiAjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCiBzdHJ1Y3QgZGVidWdfZnNfY291bnRlciB7CiAJYXRvbWljX3QgY2FpZl9ucl9zb2NrczsKKwlhdG9taWNfdCBjYWlmX3NvY2tfY3JlYXRlOwogCWF0b21pY190IG51bV9jb25uZWN0X3JlcTsKIAlhdG9taWNfdCBudW1fY29ubmVjdF9yZXNwOwogCWF0b21pY190IG51bV9jb25uZWN0X2ZhaWxfcmVzcDsKQEAgLTU5LDExICs2MCwxMSBAQAogCWF0b21pY190IG51bV9yeF9mbG93X29uOwogfTsKIHN0YXRpYyBzdHJ1Y3QgZGVidWdfZnNfY291bnRlciBjbnQ7Ci0jZGVmaW5lCWRiZnNfYXRvbWljX2luYyh2KSBhdG9taWNfaW5jKHYpCi0jZGVmaW5lCWRiZnNfYXRvbWljX2RlYyh2KSBhdG9taWNfZGVjKHYpCisjZGVmaW5lCWRiZnNfYXRvbWljX2luYyh2KSBhdG9taWNfaW5jX3JldHVybih2KQorI2RlZmluZQlkYmZzX2F0b21pY19kZWModikgYXRvbWljX2RlY19yZXR1cm4odikKICNlbHNlCi0jZGVmaW5lCWRiZnNfYXRvbWljX2luYyh2KQotI2RlZmluZQlkYmZzX2F0b21pY19kZWModikKKyNkZWZpbmUJZGJmc19hdG9taWNfaW5jKHYpIDAKKyNkZWZpbmUJZGJmc19hdG9taWNfZGVjKHYpIDAKICNlbmRpZgogCiBzdHJ1Y3QgY2FpZnNvY2sgewpAQCAtMTU1LDkgKzE1NiwxMCBAQAogCiAJaWYgKGF0b21pY19yZWFkKCZzay0+c2tfcm1lbV9hbGxvYykgKyBza2ItPnRydWVzaXplID49CiAJCSh1bnNpZ25lZClzay0+c2tfcmN2YnVmICYmIHJ4X2Zsb3dfaXNfb24oY2Zfc2spKSB7Ci0JCXByX2RlYnVnKCJzZW5kaW5nIGZsb3cgT0ZGIChxdWV1ZSBsZW4gPSAlZCAlZClcbiIsCi0JCQlhdG9taWNfcmVhZCgmY2Zfc2stPnNrLnNrX3JtZW1fYWxsb2MpLAotCQkJc2tfcmN2YnVmX2xvd3dhdGVyKGNmX3NrKSk7CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcl9kZWJ1Zygic2VuZGluZyBmbG93IE9GRiAocXVldWUgbGVuID0gJWQgJWQpXG4iLAorCQkJCQlhdG9taWNfcmVhZCgmY2Zfc2stPnNrLnNrX3JtZW1fYWxsb2MpLAorCQkJCQlza19yY3ZidWZfbG93d2F0ZXIoY2Zfc2spKTsKIAkJc2V0X3J4X2Zsb3dfb2ZmKGNmX3NrKTsKIAkJZGJmc19hdG9taWNfaW5jKCZjbnQubnVtX3J4X2Zsb3dfb2ZmKTsKIAkJY2FpZl9mbG93X2N0cmwoc2ssIENBSUZfTU9ERU1DTURfRkxPV19PRkZfUkVRKTsKQEAgLTE2OCw3ICsxNzAsOCBAQAogCQlyZXR1cm4gZXJyOwogCWlmICghc2tfcm1lbV9zY2hlZHVsZShzaywgc2tiLT50cnVlc2l6ZSkgJiYgcnhfZmxvd19pc19vbihjZl9zaykpIHsKIAkJc2V0X3J4X2Zsb3dfb2ZmKGNmX3NrKTsKLQkJcHJfZGVidWcoInNlbmRpbmcgZmxvdyBPRkYgZHVlIHRvIHJtZW1fc2NoZWR1bGVcbiIpOworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJfZGVidWcoInNlbmRpbmcgZmxvdyBPRkYgZHVlIHRvIHJtZW1fc2NoZWR1bGVcbiIpOwogCQlkYmZzX2F0b21pY19pbmMoJmNudC5udW1fcnhfZmxvd19vZmYpOwogCQljYWlmX2Zsb3dfY3RybChzaywgQ0FJRl9NT0RFTUNNRF9GTE9XX09GRl9SRVEpOwogCX0KQEAgLTIwMiwxMyArMjA1LDI1IEBACiAJc2tiID0gY2Zwa3RfdG9uYXRpdmUocGt0KTsKIAogCWlmICh1bmxpa2VseShjZl9zay0+c2suc2tfc3RhdGUgIT0gQ0FJRl9DT05ORUNURUQpKSB7Ci0JCWNmcGt0X2Rlc3Ryb3kocGt0KTsKKwkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiAwOwogCX0KIAljYWlmX3F1ZXVlX3Jjdl9za2IoJmNmX3NrLT5zaywgc2tiKTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgY2Zza19ob2xkKHN0cnVjdCBjZmxheWVyICpsYXlyKQoreworCXN0cnVjdCBjYWlmc29jayAqY2Zfc2sgPSBjb250YWluZXJfb2YobGF5ciwgc3RydWN0IGNhaWZzb2NrLCBsYXllcik7CisJc29ja19ob2xkKCZjZl9zay0+c2spOworfQorCitzdGF0aWMgdm9pZCBjZnNrX3B1dChzdHJ1Y3QgY2ZsYXllciAqbGF5cikKK3sKKwlzdHJ1Y3QgY2FpZnNvY2sgKmNmX3NrID0gY29udGFpbmVyX29mKGxheXIsIHN0cnVjdCBjYWlmc29jaywgbGF5ZXIpOworCXNvY2tfcHV0KCZjZl9zay0+c2spOworfQorCiAvKiBQYWNrZXQgQ29udHJvbCBDYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgZnJvbSBDQUlGICovCiBzdGF0aWMgdm9pZCBjYWlmX2N0cmxfY2Ioc3RydWN0IGNmbGF5ZXIgKmxheXIsCiAJCQkJZW51bSBjYWlmX2N0cmxjbWQgZmxvdywKQEAgLTIzMiw2ICsyNDcsOCBAQAogCiAJY2FzZSBDQUlGX0NUUkxDTURfSU5JVF9SU1A6CiAJCS8qIFdlJ3JlIG5vdyBjb25uZWN0ZWQgKi8KKwkJY2FpZl9jbGllbnRfcmVnaXN0ZXJfcmVmY250KCZjZl9zay0+bGF5ZXIsCisJCQkJCQljZnNrX2hvbGQsIGNmc2tfcHV0KTsKIAkJZGJmc19hdG9taWNfaW5jKCZjbnQubnVtX2Nvbm5lY3RfcmVzcCk7CiAJCWNmX3NrLT5zay5za19zdGF0ZSA9IENBSUZfQ09OTkVDVEVEOwogCQlzZXRfdHhfZmxvd19vbihjZl9zayk7CkBAIC0yNDIsNyArMjU5LDYgQEAKIAkJLyogV2UncmUgbm93IGRpc2Nvbm5lY3RlZCAqLwogCQljZl9zay0+c2suc2tfc3RhdGUgPSBDQUlGX0RJU0NPTk5FQ1RFRDsKIAkJY2Zfc2stPnNrLnNrX3N0YXRlX2NoYW5nZSgmY2Zfc2stPnNrKTsKLQkJY2ZjbmZnX3JlbGVhc2VfYWRhcF9sYXllcigmY2Zfc2stPmxheWVyKTsKIAkJYnJlYWs7CiAKIAljYXNlIENBSUZfQ1RSTENNRF9JTklUX0ZBSUxfUlNQOgpAQCAtNTE5LDQzICs1MzUsMTQgQEAKIAkJCWludCBub2Jsb2NrLCBsb25nIHRpbWVvKQogewogCXN0cnVjdCBjZnBrdCAqcGt0OwotCWludCByZXQsIGxvb3BjbnQgPSAwOwogCiAJcGt0ID0gY2Zwa3RfZnJvbW5hdGl2ZShDQUlGX0RJUl9PVVQsIHNrYik7Ci0JbWVtc2V0KGNmcGt0X2luZm8ocGt0KSwgMCwgc2l6ZW9mKHN0cnVjdCBjYWlmX3BheWxvYWRfaW5mbykpOwotCWRvIHsKKwltZW1zZXQoc2tiLT5jYiwgMCwgc2l6ZW9mKHN0cnVjdCBjYWlmX3BheWxvYWRfaW5mbykpOwogCi0JCXJldCA9IC1FVElNRURPVVQ7CisJaWYgKGNmX3NrLT5sYXllci5kbiA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCQkvKiBTbGlnaHQgcGFyYW5vaWEsIHByb2JhYmx5IG5vdCBuZWVkZWQuICovCi0JCWlmICh1bmxpa2VseShsb29wY250KysgPiAxMDAwKSkgewotCQkJcHJfd2FybigidHJhbnNtaXQgcmV0cmllcyBmYWlsZWQsIGVycm9yID0gJWRcbiIsIHJldCk7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChjZl9zay0+bGF5ZXIuZG4gIT0gTlVMTCkKLQkJCXJldCA9IGNmX3NrLT5sYXllci5kbi0+dHJhbnNtaXQoY2Zfc2stPmxheWVyLmRuLCBwa3QpOwotCQlpZiAobGlrZWx5KHJldCA+PSAwKSkKLQkJCWJyZWFrOwotCQkvKiBpZiB0cmFuc21pdCByZXR1cm4gLUVBR0FJTiwgdGhlbiByZXRyeSAqLwotCQlpZiAobm9ibG9jayAmJiByZXQgPT0gLUVBR0FJTikKLQkJCWJyZWFrOwotCQl0aW1lbyA9IGNhaWZfd2FpdF9mb3JfZmxvd19vbihjZl9zaywgMCwgdGltZW8sICZyZXQpOwotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCXJldCA9IHNvY2tfaW50cl9lcnJubyh0aW1lbyk7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAocmV0KQotCQkJYnJlYWs7Ci0JCWlmIChjZl9zay0+c2suc2tfc3RhdGUgIT0gQ0FJRl9DT05ORUNURUQgfHwKLQkJCXNvY2tfZmxhZygmY2Zfc2stPnNrLCBTT0NLX0RFQUQpIHx8Ci0JCQkoY2Zfc2stPnNrLnNrX3NodXRkb3duICYgUkNWX1NIVVRET1dOKSkgewotCQkJcmV0ID0gLUVQSVBFOwotCQkJY2Zfc2stPnNrLnNrX2VyciA9IEVQSVBFOwotCQkJYnJlYWs7Ci0JCX0KLQl9IHdoaWxlIChyZXQgPT0gLUVBR0FJTik7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gY2Zfc2stPmxheWVyLmRuLT50cmFuc21pdChjZl9zay0+bGF5ZXIuZG4sIHBrdCk7CiB9CiAKIC8qIENvcGllZCBmcm9tIGFmX3VuaXg6dW5peF9kZ3JhbV9zZW5kbXNnLCBhbmQgYWRhcHRlZCB0byBDQUlGICovCkBAIC02MjAsNyArNjA3LDkgQEAKIAkJZ290byBlcnI7CiAJcmV0ID0gdHJhbnNtaXRfc2tiKHNrYiwgY2Zfc2ssIG5vYmxvY2ssIHRpbWVvKTsKIAlpZiAocmV0IDwgMCkKLQkJZ290byBlcnI7CisJCS8qIHNrYiBpcyBhbHJlYWR5IGZyZWVkICovCisJCXJldHVybiByZXQ7CisKIAlyZXR1cm4gbGVuOwogZXJyOgogCWtmcmVlX3NrYihza2IpOwpAQCAtODI2LDcgKzgxNSw4IEBACiAJCQkJc2stPnNrX3N0YXRlID09IENBSUZfRElTQ09OTkVDVEVEKTsKIAkJaWYgKHNrLT5za19zaHV0ZG93biAmIFNIVVRET1dOX01BU0spIHsKIAkJCS8qIEFsbG93IHJlLWNvbm5lY3QgYWZ0ZXIgU0hVVERPV05fSU5EICovCi0JCQljYWlmX2Rpc2Nvbm5lY3RfY2xpZW50KCZjZl9zay0+bGF5ZXIpOworCQkJY2FpZl9kaXNjb25uZWN0X2NsaWVudChzb2NrX25ldChzayksICZjZl9zay0+bGF5ZXIpOworCQkJY2FpZl9mcmVlX2NsaWVudCgmY2Zfc2stPmxheWVyKTsKIAkJCWJyZWFrOwogCQl9CiAJCS8qIE5vIHJlY29ubmVjdCBvbiBhIHNlcXBhY2tldCBzb2NrZXQgKi8KQEAgLTg1Miw3ICs4NDIsNyBAQAogCXNvY2stPnN0YXRlID0gU1NfQ09OTkVDVElORzsKIAlzay0+c2tfc3RhdGUgPSBDQUlGX0NPTk5FQ1RJTkc7CiAKLQkvKiBDaGVjayBwcmlvcml0eSB2YWx1ZSBjb21pbmcgZnJvbSBzb2NrZXQgKi8KKwkvKiBDaGVjayBwcmlvcml0eSB2YWx1ZSBjb21taW5nIGZyb20gc29ja2V0ICovCiAJLyogaWYgcHJpb3JpdHkgdmFsdWUgaXMgb3V0IG9mIHJhbmdlIGl0IHdpbGwgYmUgYWp1c3RlZCAqLwogCWlmIChjZl9zay0+c2suc2tfcHJpb3JpdHkgPiBDQUlGX1BSSU9fTUFYKQogCQljZl9zay0+Y29ubl9yZXEucHJpb3JpdHkgPSBDQUlGX1BSSU9fTUFYOwpAQCAtODY2LDggKzg1NiwxMCBAQAogCiAJZGJmc19hdG9taWNfaW5jKCZjbnQubnVtX2Nvbm5lY3RfcmVxKTsKIAljZl9zay0+bGF5ZXIucmVjZWl2ZSA9IGNhaWZfc2t0cmVjdl9jYjsKLQllcnIgPSBjYWlmX2Nvbm5lY3RfY2xpZW50KCZjZl9zay0+Y29ubl9yZXEsCisKKwllcnIgPSBjYWlmX2Nvbm5lY3RfY2xpZW50KHNvY2tfbmV0KHNrKSwgJmNmX3NrLT5jb25uX3JlcSwKIAkJCQkmY2Zfc2stPmxheWVyLCAmaWZpbmRleCwgJmhlYWRyb29tLCAmdGFpbHJvb20pOworCiAJaWYgKGVyciA8IDApIHsKIAkJY2Zfc2stPnNrLnNrX3NvY2tldC0+c3RhdGUgPSBTU19VTkNPTk5FQ1RFRDsKIAkJY2Zfc2stPnNrLnNrX3N0YXRlID0gQ0FJRl9ESVNDT05ORUNURUQ7CkBAIC05MzUsNyArOTI3LDYgQEAKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlzdHJ1Y3QgY2FpZnNvY2sgKmNmX3NrID0gY29udGFpbmVyX29mKHNrLCBzdHJ1Y3QgY2FpZnNvY2ssIHNrKTsKLQlpbnQgcmVzID0gMDsKIAogCWlmICghc2spCiAJCXJldHVybiAwOwpAQCAtOTQ3LDEzICs5MzgsMTQgQEAKIAkgKiBjYWlmX3F1ZXVlX3Jjdl9za2IgY2hlY2tzIFNPQ0tfREVBRCBob2xkaW5nIHRoZSBxdWV1ZSBsb2NrLAogCSAqIHRoaXMgZW5zdXJlcyBubyBwYWNrZXRzIHdoZW4gc29jayBpcyBkZWFkLgogCSAqLwotCXNwaW5fbG9jaygmc2stPnNrX3JlY2VpdmVfcXVldWUubG9jayk7CisJc3Bpbl9sb2NrX2JoKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTsKIAlzb2NrX3NldF9mbGFnKHNrLCBTT0NLX0RFQUQpOwotCXNwaW5fdW5sb2NrKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmc2stPnNrX3JlY2VpdmVfcXVldWUubG9jayk7CiAJc29jay0+c2sgPSBOVUxMOwogCiAJZGJmc19hdG9taWNfaW5jKCZjbnQubnVtX2Rpc2Nvbm5lY3QpOwogCisJV0FSTl9PTihJU19FUlIoY2Zfc2stPmRlYnVnZnNfc29ja2V0X2RpcikpOwogCWlmIChjZl9zay0+ZGVidWdmc19zb2NrZXRfZGlyICE9IE5VTEwpCiAJCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShjZl9zay0+ZGVidWdmc19zb2NrZXRfZGlyKTsKIApAQCAtOTYxLDE5ICs5NTMsMTUgQEAKIAlzay0+c2tfc3RhdGUgPSBDQUlGX0RJU0NPTk5FQ1RFRDsKIAlzay0+c2tfc2h1dGRvd24gPSBTSFVURE9XTl9NQVNLOwogCi0JaWYgKGNmX3NrLT5zay5za19zb2NrZXQtPnN0YXRlID09IFNTX0NPTk5FQ1RFRCB8fAotCQljZl9zay0+c2suc2tfc29ja2V0LT5zdGF0ZSA9PSBTU19DT05ORUNUSU5HKQotCQlyZXMgPSBjYWlmX2Rpc2Nvbm5lY3RfY2xpZW50KCZjZl9zay0+bGF5ZXIpOwotCisJY2FpZl9kaXNjb25uZWN0X2NsaWVudChzb2NrX25ldChzayksICZjZl9zay0+bGF5ZXIpOwogCWNmX3NrLT5zay5za19zb2NrZXQtPnN0YXRlID0gU1NfRElTQ09OTkVDVElORzsKIAl3YWtlX3VwX2ludGVycnVwdGlibGVfcG9sbChza19zbGVlcChzayksIFBPTExFUlJ8UE9MTEhVUCk7CiAKIAlzb2NrX29ycGhhbihzayk7Ci0JY2Zfc2stPmxheWVyLmRuID0gTlVMTDsKIAlza19zdHJlYW1fa2lsbF9xdWV1ZXMoJmNmX3NrLT5zayk7CiAJcmVsZWFzZV9zb2NrKHNrKTsKIAlzb2NrX3B1dChzayk7Ci0JcmV0dXJuIHJlczsKKwlyZXR1cm4gMDsKIH0KIAogLyogQ29waWVkIGZyb20gYWZfdW5peC5jOnVuaXhfcG9sbCgpLCBhZGRlZCBDQUlGIHR4X2Zsb3cgaGFuZGxpbmcgKi8KQEAgLTEwNjAsMTYgKzEwNDgsMTggQEAKIAljYWlmX2Fzc2VydChza191bmhhc2hlZChzaykpOwogCWNhaWZfYXNzZXJ0KCFzay0+c2tfc29ja2V0KTsKIAlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkgewotCQlwcl9pbmZvKCJBdHRlbXB0IHRvIHJlbGVhc2UgYWxpdmUgQ0FJRiBzb2NrZXQ6ICVwXG4iLCBzayk7CisJCXByX2RlYnVnKCJBdHRlbXB0IHRvIHJlbGVhc2UgYWxpdmUgQ0FJRiBzb2NrZXQ6ICVwXG4iLCBzayk7CiAJCXJldHVybjsKIAl9CiAJc2tfc3RyZWFtX2tpbGxfcXVldWVzKCZjZl9zay0+c2spOwogCWRiZnNfYXRvbWljX2RlYygmY250LmNhaWZfbnJfc29ja3MpOworCWNhaWZfZnJlZV9jbGllbnQoJmNmX3NrLT5sYXllcik7CiB9CiAKIHN0YXRpYyBpbnQgY2FpZl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsCiAJCQlpbnQga2VybikKIHsKKwlpbnQgbnVtOwogCXN0cnVjdCBzb2NrICpzayA9IE5VTEw7CiAJc3RydWN0IGNhaWZzb2NrICpjZl9zayA9IE5VTEw7CiAJc3RhdGljIHN0cnVjdCBwcm90byBwcm90ID0gey5uYW1lID0gIlBGX0NBSUYiLApAQCAtMTEyNywxOSArMTExNywyMSBAQAogCXNldF9yeF9mbG93X29uKGNmX3NrKTsKIAogCS8qIFNldCBkZWZhdWx0IG9wdGlvbnMgb24gY29uZmlndXJhdGlvbiAqLwotCWNmX3NrLT5zay5za19wcmlvcml0eT0gQ0FJRl9QUklPX05PUk1BTDsKKwljZl9zay0+c2suc2tfcHJpb3JpdHkgPSBDQUlGX1BSSU9fTk9STUFMOwogCWNmX3NrLT5jb25uX3JlcS5saW5rX3NlbGVjdG9yID0gQ0FJRl9MSU5LX0xPV19MQVRFTkNZOwogCWNmX3NrLT5jb25uX3JlcS5wcm90b2NvbCA9IHByb3RvY29sOwogCS8qIEluY3JlYXNlIHRoZSBudW1iZXIgb2Ygc29ja2V0cyBjcmVhdGVkLiAqLwogCWRiZnNfYXRvbWljX2luYygmY250LmNhaWZfbnJfc29ja3MpOworCW51bSA9IGRiZnNfYXRvbWljX2luYygmY250LmNhaWZfc29ja19jcmVhdGUpOwogI2lmZGVmIENPTkZJR19ERUJVR19GUwogCWlmICghSVNfRVJSKGRlYnVnZnNkaXIpKSB7CisKIAkJLyogRmlsbCBpbiBzb21lIGluZm9ybWF0aW9uIGNvbmNlcm5pbmcgdGhlIG1pc2Mgc29ja2V0LiAqLwotCQlzbnByaW50ZihjZl9zay0+bmFtZSwgc2l6ZW9mKGNmX3NrLT5uYW1lKSwgImNmc2slZCIsCi0JCQkJYXRvbWljX3JlYWQoJmNudC5jYWlmX25yX3NvY2tzKSk7CisJCXNucHJpbnRmKGNmX3NrLT5uYW1lLCBzaXplb2YoY2Zfc2stPm5hbWUpLCAiY2ZzayVkIiwgbnVtKTsKIAogCQljZl9zay0+ZGVidWdmc19zb2NrZXRfZGlyID0KIAkJCWRlYnVnZnNfY3JlYXRlX2RpcihjZl9zay0+bmFtZSwgZGVidWdmc2Rpcik7CisKIAkJZGVidWdmc19jcmVhdGVfdTMyKCJza19zdGF0ZSIsIFNfSVJVU1IgfCBTX0lXVVNSLAogCQkJCWNmX3NrLT5kZWJ1Z2ZzX3NvY2tldF9kaXIsCiAJCQkJKHUzMiAqKSAmY2Zfc2stPnNrLnNrX3N0YXRlKTsKQEAgLTExODMsNiArMTE3NSw5IEBACiAJCWRlYnVnZnNfY3JlYXRlX3UzMigibnVtX3NvY2tldHMiLCBTX0lSVVNSIHwgU19JV1VTUiwKIAkJCQlkZWJ1Z2ZzZGlyLAogCQkJCSh1MzIgKikgJmNudC5jYWlmX25yX3NvY2tzKTsKKwkJZGVidWdmc19jcmVhdGVfdTMyKCJudW1fY3JlYXRlIiwgU19JUlVTUiB8IFNfSVdVU1IsCisJCQkJZGVidWdmc2RpciwKKwkJCQkodTMyICopICZjbnQuY2FpZl9zb2NrX2NyZWF0ZSk7CiAJCWRlYnVnZnNfY3JlYXRlX3UzMigibnVtX2Nvbm5lY3RfcmVxIiwgU19JUlVTUiB8IFNfSVdVU1IsCiAJCQkJZGVidWdmc2RpciwKIAkJCQkodTMyICopICZjbnQubnVtX2Nvbm5lY3RfcmVxKTsKZGlmZiAtLWdpdCBhL25ldC9jYWlmL2NmY25mZy5jIGIvbmV0L2NhaWYvY2ZjbmZnLmMKaW5kZXggZjFmOThkOS4uNTJmZTMzYiAxMDA2NDQKLS0tIGEvbmV0L2NhaWYvY2ZjbmZnLmMKKysrIGIvbmV0L2NhaWYvY2ZjbmZnLmMKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bmV0L2NhaWYvY2FpZl9sYXllci5oPgogI2luY2x1ZGUgPG5ldC9jYWlmL2NmcGt0Lmg+CiAjaW5jbHVkZSA8bmV0L2NhaWYvY2ZjbmZnLmg+CkBAIC0xOCwxMSArMTksNyBAQAogI2luY2x1ZGUgPG5ldC9jYWlmL2NmZnJtbC5oPgogI2luY2x1ZGUgPG5ldC9jYWlmL2Nmc2VybC5oPgogI2luY2x1ZGUgPG5ldC9jYWlmL2Nmc3J2bC5oPgotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotCi0jZGVmaW5lIE1BWF9QSFlfTEFZRVJTIDcKKyNpbmNsdWRlIDxuZXQvY2FpZi9jYWlmX2Rldi5oPgogCiAjZGVmaW5lIGNvbnRhaW5lcl9vYmoobGF5cikgY29udGFpbmVyX29mKGxheXIsIHN0cnVjdCBjZmNuZmcsIGxheWVyKQogCkBAIC0zMCw2ICsyNyw5IEBACiAgKiB0byBtYW5hZ2UgcGh5c2ljYWwgaW50ZXJmYWNlcwogICovCiBzdHJ1Y3QgY2ZjbmZnX3BoeWluZm8geworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKwlib29sIHVwOworCiAJLyogUG9pbnRlciB0byB0aGUgbGF5ZXIgYmVsb3cgdGhlIE1VWCAoZnJhbWluZyBsYXllcikgKi8KIAlzdHJ1Y3QgY2ZsYXllciAqZnJtX2xheWVyOwogCS8qIFBvaW50ZXIgdG8gdGhlIGxvd2VzdCBhY3R1YWwgcGh5c2ljYWwgbGF5ZXIgKi8KQEAgLTM5LDkgKzM5LDYgQEAKIAkvKiBQcmVmZXJlbmNlIG9mIHRoZSBwaHlzaWNhbCBpbiBpbnRlcmZhY2UgKi8KIAllbnVtIGNmY25mZ19waHlfcHJlZmVyZW5jZSBwcmVmOwogCi0JLyogUmVmZXJlbmNlIGNvdW50LCBudW1iZXIgb2YgY2hhbm5lbHMgdXNpbmcgdGhlIGRldmljZSAqLwotCWludCBwaHlfcmVmX2NvdW50OwotCiAJLyogSW5mb3JtYXRpb24gYWJvdXQgdGhlIHBoeXNpY2FsIGRldmljZSAqLwogCXN0cnVjdCBkZXZfaW5mbyBkZXZfaW5mbzsKIApAQCAtNTksOCArNTYsOCBAQAogCXN0cnVjdCBjZmxheWVyIGxheWVyOwogCXN0cnVjdCBjZmxheWVyICpjdHJsOwogCXN0cnVjdCBjZmxheWVyICptdXg7Ci0JdTggbGFzdF9waHlpZDsKLQlzdHJ1Y3QgY2ZjbmZnX3BoeWluZm8gcGh5X2xheWVyc1tNQVhfUEhZX0xBWUVSU107CisJc3RydWN0IGxpc3RfaGVhZCBwaHlzOworCXN0cnVjdCBtdXRleCBsb2NrOwogfTsKIAogc3RhdGljIHZvaWQgY2ZjbmZnX2xpbmt1cF9yc3Aoc3RydWN0IGNmbGF5ZXIgKmxheWVyLCB1OCBjaGFubmVsX2lkLApAQCAtNzYsNiArNzMsOSBAQAogewogCXN0cnVjdCBjZmNuZmcgKnRoaXM7CiAJc3RydWN0IGNmY3RybF9yc3AgKnJlc3A7CisKKwltaWdodF9zbGVlcCgpOworCiAJLyogSW5pdGlhdGUgdGhpcyBsYXllciAqLwogCXRoaXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2ZjbmZnKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCF0aGlzKSB7CkBAIC05OSwyNyArOTksMzMgQEAKIAlyZXNwLT5yYWRpb3NldF9yc3AgPSBjZmN0cmxfcmVzcF9mdW5jOwogCXJlc3AtPmxpbmtzZXR1cF9yc3AgPSBjZmNuZmdfbGlua3VwX3JzcDsKIAlyZXNwLT5yZWplY3RfcnNwID0gY2ZjbmZnX3JlamVjdF9yc3A7Ci0KLQl0aGlzLT5sYXN0X3BoeWlkID0gMTsKKwlJTklUX0xJU1RfSEVBRCgmdGhpcy0+cGh5cyk7CiAKIAljZm11eGxfc2V0X3VwbGF5ZXIodGhpcy0+bXV4LCB0aGlzLT5jdHJsLCAwKTsKIAlsYXllcl9zZXRfZG4odGhpcy0+Y3RybCwgdGhpcy0+bXV4KTsKIAlsYXllcl9zZXRfdXAodGhpcy0+Y3RybCwgdGhpcyk7CisJbXV0ZXhfaW5pdCgmdGhpcy0+bG9jayk7CisKIAlyZXR1cm4gdGhpczsKIG91dF9vZl9tZW06CiAJcHJfd2FybigiT3V0IG9mIG1lbW9yeVxuIik7CisKKwlzeW5jaHJvbml6ZV9yY3UoKTsKKwogCWtmcmVlKHRoaXMtPm11eCk7CiAJa2ZyZWUodGhpcy0+Y3RybCk7CiAJa2ZyZWUodGhpcyk7CiAJcmV0dXJuIE5VTEw7CiB9Ci1FWFBPUlRfU1lNQk9MKGNmY25mZ19jcmVhdGUpOwogCiB2b2lkIGNmY25mZ19yZW1vdmUoc3RydWN0IGNmY25mZyAqY2ZnKQogeworCW1pZ2h0X3NsZWVwKCk7CiAJaWYgKGNmZykgeworCQlzeW5jaHJvbml6ZV9yY3UoKTsKKwogCQlrZnJlZShjZmctPm11eCk7Ci0JCWtmcmVlKGNmZy0+Y3RybCk7CisJCWNmY3RybF9yZW1vdmUoY2ZnLT5jdHJsKTsKIAkJa2ZyZWUoY2ZnKTsKIAl9CiB9CkBAIC0xMjgsMTMyICsxMzQsODMgQEAKIHsKIH0KIAorc3RhdGljIHN0cnVjdCBjZmNuZmdfcGh5aW5mbyAqY2ZjbmZnX2dldF9waHlpbmZvX3JjdShzdHJ1Y3QgY2ZjbmZnICpjbmZnLAorCQkJCQkJCXU4IHBoeWlkKQoreworCXN0cnVjdCBjZmNuZmdfcGh5aW5mbyAqcGh5OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGh5LCAmY25mZy0+cGh5cywgbm9kZSkKKwkJaWYgKHBoeS0+aWQgPT0gcGh5aWQpCisJCQlyZXR1cm4gcGh5OworCXJldHVybiBOVUxMOworfQorCiBzdGF0aWMgdm9pZCBjZmN0cmxfZW51bV9yZXNwKHZvaWQpCiB7CiB9CiAKLXN0cnVjdCBkZXZfaW5mbyAqY2ZjbmZnX2dldF9waHlpZChzdHJ1Y3QgY2ZjbmZnICpjbmZnLAorc3RhdGljIHN0cnVjdCBkZXZfaW5mbyAqY2ZjbmZnX2dldF9waHlpZChzdHJ1Y3QgY2ZjbmZnICpjbmZnLAogCQkJCSAgZW51bSBjZmNuZmdfcGh5X3ByZWZlcmVuY2UgcGh5X3ByZWYpCiB7Ci0JdTE2IGk7Ci0KIAkvKiBUcnkgdG8gbWF0Y2ggd2l0aCBzcGVjaWZpZWQgcHJlZmVyZW5jZSAqLwotCWZvciAoaSA9IDE7IGkgPCBNQVhfUEhZX0xBWUVSUzsgaSsrKSB7Ci0JCWlmIChjbmZnLT5waHlfbGF5ZXJzW2ldLmlkID09IGkgJiYKLQkJICAgICBjbmZnLT5waHlfbGF5ZXJzW2ldLnByZWYgPT0gcGh5X3ByZWYgJiYKLQkJICAgICBjbmZnLT5waHlfbGF5ZXJzW2ldLmZybV9sYXllciAhPSBOVUxMKSB7Ci0JCQljYWlmX2Fzc2VydChjbmZnLT5waHlfbGF5ZXJzICE9IE5VTEwpOwotCQkJY2FpZl9hc3NlcnQoY25mZy0+cGh5X2xheWVyc1tpXS5pZCA9PSBpKTsKLQkJCXJldHVybiAmY25mZy0+cGh5X2xheWVyc1tpXS5kZXZfaW5mbzsKLQkJfQorCXN0cnVjdCBjZmNuZmdfcGh5aW5mbyAqcGh5OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGh5LCAmY25mZy0+cGh5cywgbm9kZSkgeworCQlpZiAocGh5LT51cCAmJiBwaHktPnByZWYgPT0gcGh5X3ByZWYgJiYKKwkJCQlwaHktPmZybV9sYXllciAhPSBOVUxMKQorCisJCQlyZXR1cm4gJnBoeS0+ZGV2X2luZm87CiAJfQorCiAJLyogT3RoZXJ3aXNlIGp1c3QgcmV0dXJuIHNvbWV0aGluZyAqLwotCWZvciAoaSA9IDE7IGkgPCBNQVhfUEhZX0xBWUVSUzsgaSsrKSB7Ci0JCWlmIChjbmZnLT5waHlfbGF5ZXJzW2ldLmlkID09IGkpIHsKLQkJCWNhaWZfYXNzZXJ0KGNuZmctPnBoeV9sYXllcnMgIT0gTlVMTCk7Ci0JCQljYWlmX2Fzc2VydChjbmZnLT5waHlfbGF5ZXJzW2ldLmlkID09IGkpOwotCQkJcmV0dXJuICZjbmZnLT5waHlfbGF5ZXJzW2ldLmRldl9pbmZvOwotCQl9Ci0JfQorCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBoeSwgJmNuZmctPnBoeXMsIG5vZGUpCisJCWlmIChwaHktPnVwKQorCQkJcmV0dXJuICZwaHktPmRldl9pbmZvOwogCiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY2ZjbmZnX3BoeWluZm8gKmNmY25mZ19nZXRfcGh5aW5mbyhzdHJ1Y3QgY2ZjbmZnICpjbmZnLAotCQkJCQkJCXU4IHBoeWlkKQorc3RhdGljIGludCBjZmNuZmdfZ2V0X2lkX2Zyb21faWZpKHN0cnVjdCBjZmNuZmcgKmNuZmcsIGludCBpZmkpCiB7Ci0JaW50IGk7Ci0JLyogVHJ5IHRvIG1hdGNoIHdpdGggc3BlY2lmaWVkIHByZWZlcmVuY2UgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX1BIWV9MQVlFUlM7IGkrKykKLQkJaWYgKGNuZmctPnBoeV9sYXllcnNbaV0uZnJtX2xheWVyICE9IE5VTEwgJiYKLQkJICAgIGNuZmctPnBoeV9sYXllcnNbaV0uaWQgPT0gcGh5aWQpCi0JCQlyZXR1cm4gJmNuZmctPnBoeV9sYXllcnNbaV07Ci0JcmV0dXJuIE5VTEw7Ci19CisJc3RydWN0IGNmY25mZ19waHlpbmZvICpwaHk7CiAKLQotaW50IGNmY25mZ19nZXRfaWRfZnJvbV9pZmkoc3RydWN0IGNmY25mZyAqY25mZywgaW50IGlmaSkKLXsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX1BIWV9MQVlFUlM7IGkrKykKLQkJaWYgKGNuZmctPnBoeV9sYXllcnNbaV0uZnJtX2xheWVyICE9IE5VTEwgJiYKLQkJCQljbmZnLT5waHlfbGF5ZXJzW2ldLmlmaW5kZXggPT0gaWZpKQotCQkJcmV0dXJuIGk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGh5LCAmY25mZy0+cGh5cywgbm9kZSkKKwkJaWYgKHBoeS0+aWZpbmRleCA9PSBpZmkgJiYgcGh5LT51cCkKKwkJCXJldHVybiBwaHktPmlkOwogCXJldHVybiAtRU5PREVWOwogfQogCi1pbnQgY2ZjbmZnX2Rpc2Nvbm5fYWRhcHRfbGF5ZXIoc3RydWN0IGNmY25mZyAqY25mZywgc3RydWN0IGNmbGF5ZXIgKmFkYXBfbGF5ZXIpCitpbnQgY2FpZl9kaXNjb25uZWN0X2NsaWVudChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBjZmxheWVyICphZGFwX2xheWVyKQogewotCXU4IGNoYW5uZWxfaWQgPSAwOwotCWludCByZXQgPSAwOwotCXN0cnVjdCBjZmxheWVyICpzZXJ2bCA9IE5VTEw7Ci0Jc3RydWN0IGNmY25mZ19waHlpbmZvICpwaHlpbmZvID0gTlVMTDsKLQl1OCBwaHlpZCA9IDA7CisJdTggY2hhbm5lbF9pZDsKKwlzdHJ1Y3QgY2ZjbmZnICpjZmcgPSBnZXRfY2ZjbmZnKG5ldCk7CiAKIAljYWlmX2Fzc2VydChhZGFwX2xheWVyICE9IE5VTEwpOworCWNmY3RybF9jYW5jZWxfcmVxKGNmZy0+Y3RybCwgYWRhcF9sYXllcik7CiAJY2hhbm5lbF9pZCA9IGFkYXBfbGF5ZXItPmlkOwotCWlmIChhZGFwX2xheWVyLT5kbiA9PSBOVUxMIHx8IGNoYW5uZWxfaWQgPT0gMCkgewotCQlwcl9lcnIoImFkYXBfbGF5ZXItPmRuID09IE5VTEwgb3IgYWRhcF9sYXllci0+aWQgaXMgMFxuIik7Ci0JCXJldCA9IC1FTk9UQ09OTjsKLQkJZ290byBlbmQ7Ci0JfQotCXNlcnZsID0gY2ZtdXhsX3JlbW92ZV91cGxheWVyKGNuZmctPm11eCwgY2hhbm5lbF9pZCk7Ci0JaWYgKHNlcnZsID09IE5VTEwpIHsKLQkJcHJfZXJyKCJQUk9UT0NPTCBFUlJPUiAtIEVycm9yIHJlbW92aW5nIHNlcnZpY2VfbGF5ZXIgQ2hhbm5lbF9JZCglZCkiLAotCQkgICAgICAgY2hhbm5lbF9pZCk7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZW5kOwotCX0KLQlsYXllcl9zZXRfdXAoc2VydmwsIE5VTEwpOwotCXJldCA9IGNmY3RybF9saW5rZG93bl9yZXEoY25mZy0+Y3RybCwgY2hhbm5lbF9pZCwgYWRhcF9sYXllcik7Ci0JaWYgKHJldCkKLQkJZ290byBlbmQ7Ci0JY2FpZl9hc3NlcnQoY2hhbm5lbF9pZCA9PSBzZXJ2bC0+aWQpOwotCWlmIChhZGFwX2xheWVyLT5kbiAhPSBOVUxMKSB7Ci0JCXBoeWlkID0gY2ZzcnZsX2dldHBoeWlkKGFkYXBfbGF5ZXItPmRuKTsKKwlpZiAoY2hhbm5lbF9pZCAhPSAwKSB7CisJCXN0cnVjdCBjZmxheWVyICpzZXJ2bDsKKwkJc2VydmwgPSBjZm11eGxfcmVtb3ZlX3VwbGF5ZXIoY2ZnLT5tdXgsIGNoYW5uZWxfaWQpOworCQlpZiAoc2VydmwgIT0gTlVMTCkKKwkJCWxheWVyX3NldF91cChzZXJ2bCwgTlVMTCk7CisJfSBlbHNlCisJCXByX2RlYnVnKCJub3RoaW5nIHRvIGRpc2Nvbm5lY3RcbiIpOworCWNmY3RybF9saW5rZG93bl9yZXEoY2ZnLT5jdHJsLCBjaGFubmVsX2lkLCBhZGFwX2xheWVyKTsKIAotCQlwaHlpbmZvID0gY2ZjbmZnX2dldF9waHlpbmZvKGNuZmcsIHBoeWlkKTsKLQkJaWYgKHBoeWluZm8gPT0gTlVMTCkgewotCQkJcHJfd2FybigiTm8gaW50ZXJmYWNlIHRvIHNlbmQgZGlzY29ubmVjdCB0b1xuIik7Ci0JCQlyZXQgPSAtRU5PREVWOwotCQkJZ290byBlbmQ7Ci0JCX0KLQkJaWYgKHBoeWluZm8tPmlkICE9IHBoeWlkIHx8Ci0JCQlwaHlpbmZvLT5waHlfbGF5ZXItPmlkICE9IHBoeWlkIHx8Ci0JCQlwaHlpbmZvLT5mcm1fbGF5ZXItPmlkICE9IHBoeWlkKSB7Ci0JCQlwcl9lcnIoIkluY29uc2lzdGVuY3kgaW4gcGh5IHJlZ2lzdHJhdGlvblxuIik7Ci0JCQlyZXQgPSAtRUlOVkFMOwotCQkJZ290byBlbmQ7Ci0JCX0KLQl9Ci0JaWYgKHBoeWluZm8gIT0gTlVMTCAmJiAtLXBoeWluZm8tPnBoeV9yZWZfY291bnQgPT0gMCAmJgotCQlwaHlpbmZvLT5waHlfbGF5ZXIgIT0gTlVMTCAmJgotCQlwaHlpbmZvLT5waHlfbGF5ZXItPm1vZGVtY21kICE9IE5VTEwpIHsKLQkJcGh5aW5mby0+cGh5X2xheWVyLT5tb2RlbWNtZChwaHlpbmZvLT5waHlfbGF5ZXIsCi0JCQkJCSAgICAgX0NBSUZfTU9ERU1DTURfUEhZSUZfVVNFTEVTUyk7Ci0JfQotZW5kOgotCWNmc3J2bF9wdXQoc2VydmwpOwotCWNmY3RybF9jYW5jZWxfcmVxKGNuZmctPmN0cmwsIGFkYXBfbGF5ZXIpOworCS8qIERvIFJDVSBzeW5jIGJlZm9yZSBpbml0aWF0aW5nIGNsZWFudXAgKi8KKwlzeW5jaHJvbml6ZV9yY3UoKTsKIAlpZiAoYWRhcF9sYXllci0+Y3RybGNtZCAhPSBOVUxMKQogCQlhZGFwX2xheWVyLT5jdHJsY21kKGFkYXBfbGF5ZXIsIENBSUZfQ1RSTENNRF9ERUlOSVRfUlNQLCAwKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogCiB9Ci1FWFBPUlRfU1lNQk9MKGNmY25mZ19kaXNjb25uX2FkYXB0X2xheWVyKTsKLQotdm9pZCBjZmNuZmdfcmVsZWFzZV9hZGFwX2xheWVyKHN0cnVjdCBjZmxheWVyICphZGFwX2xheWVyKQotewotCWlmIChhZGFwX2xheWVyLT5kbikKLQkJY2ZzcnZsX3B1dChhZGFwX2xheWVyLT5kbik7Ci19Ci1FWFBPUlRfU1lNQk9MKGNmY25mZ19yZWxlYXNlX2FkYXBfbGF5ZXIpOworRVhQT1JUX1NZTUJPTChjYWlmX2Rpc2Nvbm5lY3RfY2xpZW50KTsKIAogc3RhdGljIHZvaWQgY2ZjbmZnX2xpbmtkZXN0cm95X3JzcChzdHJ1Y3QgY2ZsYXllciAqbGF5ZXIsIHU4IGNoYW5uZWxfaWQpCiB7CiB9CiAKLWludCBwcm90b2hlYWRbQ0ZDVFJMX1NSVl9NQVNLXSA9IHsKK3N0YXRpYyBjb25zdCBpbnQgcHJvdG9oZWFkW0NGQ1RSTF9TUlZfTUFTS10gPSB7CiAJW0NGQ1RSTF9TUlZfVkVJXSA9IDQsCiAJW0NGQ1RSTF9TUlZfREFUQUdSQU1dID0gNywKIAlbQ0ZDVFJMX1NSVl9VVElMXSA9IDQsCkBAIC0yNjEsNDkgKzIxOCwxNTcgQEAKIAlbQ0ZDVFJMX1NSVl9EQkddID0gMywKIH07CiAKLWludCBjZmNuZmdfYWRkX2FkYXB0YXRpb25fbGF5ZXIoc3RydWN0IGNmY25mZyAqY25mZywKLQkJCQlzdHJ1Y3QgY2ZjdHJsX2xpbmtfcGFyYW0gKnBhcmFtLAotCQkJCXN0cnVjdCBjZmxheWVyICphZGFwX2xheWVyLAotCQkJCWludCAqaWZpbmRleCwKKworc3RhdGljIGludCBjYWlmX2Nvbm5lY3RfcmVxX3RvX2xpbmtfcGFyYW0oc3RydWN0IGNmY25mZyAqY25mZywKKwkJCQkgICBzdHJ1Y3QgY2FpZl9jb25uZWN0X3JlcXVlc3QgKnMsCisJCQkJICAgc3RydWN0IGNmY3RybF9saW5rX3BhcmFtICpsKQoreworCXN0cnVjdCBkZXZfaW5mbyAqZGV2X2luZm87CisJZW51bSBjZmNuZmdfcGh5X3ByZWZlcmVuY2UgcHJlZjsKKwlpbnQgcmVzOworCisJbWVtc2V0KGwsIDAsIHNpemVvZigqbCkpOworCS8qIEluIGNhaWYgcHJvdG9jb2wgbG93IHZhbHVlIGlzIGhpZ2ggcHJpb3JpdHkgKi8KKwlsLT5wcmlvcml0eSA9IENBSUZfUFJJT19NQVggLSBzLT5wcmlvcml0eSArIDE7CisKKwlpZiAocy0+aWZpbmRleCAhPSAwKSB7CisJCXJlcyA9IGNmY25mZ19nZXRfaWRfZnJvbV9pZmkoY25mZywgcy0+aWZpbmRleCk7CisJCWlmIChyZXMgPCAwKQorCQkJcmV0dXJuIHJlczsKKwkJbC0+cGh5aWQgPSByZXM7CisJfSBlbHNlIHsKKwkJc3dpdGNoIChzLT5saW5rX3NlbGVjdG9yKSB7CisJCWNhc2UgQ0FJRl9MSU5LX0hJR0hfQkFORFc6CisJCQlwcmVmID0gQ0ZQSFlQUkVGX0hJR0hfQlc7CisJCQlicmVhazsKKwkJY2FzZSBDQUlGX0xJTktfTE9XX0xBVEVOQ1k6CisJCQlwcmVmID0gQ0ZQSFlQUkVGX0xPV19MQVQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWRldl9pbmZvID0gY2ZjbmZnX2dldF9waHlpZChjbmZnLCBwcmVmKTsKKwkJaWYgKGRldl9pbmZvID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJbC0+cGh5aWQgPSBkZXZfaW5mby0+aWQ7CisJfQorCXN3aXRjaCAocy0+cHJvdG9jb2wpIHsKKwljYXNlIENBSUZQUk9UT19BVDoKKwkJbC0+bGlua3R5cGUgPSBDRkNUUkxfU1JWX1ZFSTsKKwkJbC0+ZW5kcG9pbnQgPSAocy0+c29ja2FkZHIudS5hdC50eXBlID4+IDIpICYgMHgzOworCQlsLT5jaHR5cGUgPSBzLT5zb2NrYWRkci51LmF0LnR5cGUgJiAweDM7CisJCWJyZWFrOworCWNhc2UgQ0FJRlBST1RPX0RBVEFHUkFNOgorCQlsLT5saW5rdHlwZSA9IENGQ1RSTF9TUlZfREFUQUdSQU07CisJCWwtPmNodHlwZSA9IDB4MDA7CisJCWwtPnUuZGF0YWdyYW0uY29ubmlkID0gcy0+c29ja2FkZHIudS5kZ20uY29ubmVjdGlvbl9pZDsKKwkJYnJlYWs7CisJY2FzZSBDQUlGUFJPVE9fREFUQUdSQU1fTE9PUDoKKwkJbC0+bGlua3R5cGUgPSBDRkNUUkxfU1JWX0RBVEFHUkFNOworCQlsLT5jaHR5cGUgPSAweDAzOworCQlsLT5lbmRwb2ludCA9IDB4MDA7CisJCWwtPnUuZGF0YWdyYW0uY29ubmlkID0gcy0+c29ja2FkZHIudS5kZ20uY29ubmVjdGlvbl9pZDsKKwkJYnJlYWs7CisJY2FzZSBDQUlGUFJPVE9fUkZNOgorCQlsLT5saW5rdHlwZSA9IENGQ1RSTF9TUlZfUkZNOworCQlsLT51LmRhdGFncmFtLmNvbm5pZCA9IHMtPnNvY2thZGRyLnUucmZtLmNvbm5lY3Rpb25faWQ7CisJCXN0cm5jcHkobC0+dS5yZm0udm9sdW1lLCBzLT5zb2NrYWRkci51LnJmbS52b2x1bWUsCisJCQlzaXplb2YobC0+dS5yZm0udm9sdW1lKS0xKTsKKwkJbC0+dS5yZm0udm9sdW1lW3NpemVvZihsLT51LnJmbS52b2x1bWUpLTFdID0gMDsKKwkJYnJlYWs7CisJY2FzZSBDQUlGUFJPVE9fVVRJTDoKKwkJbC0+bGlua3R5cGUgPSBDRkNUUkxfU1JWX1VUSUw7CisJCWwtPmVuZHBvaW50ID0gMHgwMDsKKwkJbC0+Y2h0eXBlID0gMHgwMDsKKwkJc3RybmNweShsLT51LnV0aWxpdHkubmFtZSwgcy0+c29ja2FkZHIudS51dGlsLnNlcnZpY2UsCisJCQlzaXplb2YobC0+dS51dGlsaXR5Lm5hbWUpLTEpOworCQlsLT51LnV0aWxpdHkubmFtZVtzaXplb2YobC0+dS51dGlsaXR5Lm5hbWUpLTFdID0gMDsKKwkJY2FpZl9hc3NlcnQoc2l6ZW9mKGwtPnUudXRpbGl0eS5uYW1lKSA+IDEwKTsKKwkJbC0+dS51dGlsaXR5LnBhcmFtbGVuID0gcy0+cGFyYW0uc2l6ZTsKKwkJaWYgKGwtPnUudXRpbGl0eS5wYXJhbWxlbiA+IHNpemVvZihsLT51LnV0aWxpdHkucGFyYW1zKSkKKwkJCWwtPnUudXRpbGl0eS5wYXJhbWxlbiA9IHNpemVvZihsLT51LnV0aWxpdHkucGFyYW1zKTsKKworCQltZW1jcHkobC0+dS51dGlsaXR5LnBhcmFtcywgcy0+cGFyYW0uZGF0YSwKKwkJICAgICAgIGwtPnUudXRpbGl0eS5wYXJhbWxlbik7CisKKwkJYnJlYWs7CisJY2FzZSBDQUlGUFJPVE9fREVCVUc6CisJCWwtPmxpbmt0eXBlID0gQ0ZDVFJMX1NSVl9EQkc7CisJCWwtPmVuZHBvaW50ID0gcy0+c29ja2FkZHIudS5kYmcuc2VydmljZTsKKwkJbC0+Y2h0eXBlID0gcy0+c29ja2FkZHIudS5kYmcudHlwZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitpbnQgY2FpZl9jb25uZWN0X2NsaWVudChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBjYWlmX2Nvbm5lY3RfcmVxdWVzdCAqY29ubl9yZXEsCisJCQlzdHJ1Y3QgY2ZsYXllciAqYWRhcF9sYXllciwgaW50ICppZmluZGV4LAogCQkJCWludCAqcHJvdG9faGVhZCwKIAkJCQlpbnQgKnByb3RvX3RhaWwpCiB7CiAJc3RydWN0IGNmbGF5ZXIgKmZybWw7CisJc3RydWN0IGNmY25mZ19waHlpbmZvICpwaHk7CisJaW50IGVycjsKKwlzdHJ1Y3QgY2ZjdHJsX2xpbmtfcGFyYW0gcGFyYW07CisJc3RydWN0IGNmY25mZyAqY2ZnID0gZ2V0X2NmY25mZyhuZXQpOworCWNhaWZfYXNzZXJ0KGNmZyAhPSBOVUxMKTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwllcnIgPSBjYWlmX2Nvbm5lY3RfcmVxX3RvX2xpbmtfcGFyYW0oY2ZnLCBjb25uX3JlcSwgJnBhcmFtKTsKKwlpZiAoZXJyKQorCQlnb3RvIHVubG9jazsKKworCXBoeSA9IGNmY25mZ19nZXRfcGh5aW5mb19yY3UoY2ZnLCBwYXJhbS5waHlpZCk7CisJaWYgKCFwaHkpIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byB1bmxvY2s7CisJfQorCWVyciA9IC1FSU5WQUw7CisKIAlpZiAoYWRhcF9sYXllciA9PSBOVUxMKSB7CiAJCXByX2VycigiYWRhcF9sYXllciBpcyB6ZXJvXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gdW5sb2NrOwogCX0KIAlpZiAoYWRhcF9sYXllci0+cmVjZWl2ZSA9PSBOVUxMKSB7CiAJCXByX2VycigiYWRhcF9sYXllci0+cmVjZWl2ZSBpcyBOVUxMXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gdW5sb2NrOwogCX0KIAlpZiAoYWRhcF9sYXllci0+Y3RybGNtZCA9PSBOVUxMKSB7CiAJCXByX2VycigiYWRhcF9sYXllci0+Y3RybGNtZCA9PSBOVUxMXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gdW5sb2NrOwogCX0KLQlmcm1sID0gY25mZy0+cGh5X2xheWVyc1twYXJhbS0+cGh5aWRdLmZybV9sYXllcjsKKworCWVyciA9IC1FTk9ERVY7CisJZnJtbCA9IHBoeS0+ZnJtX2xheWVyOwogCWlmIChmcm1sID09IE5VTEwpIHsKIAkJcHJfZXJyKCJTcGVjaWZpZWQgUEhZIHR5cGUgZG9lcyBub3QgZXhpc3QhXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWdvdG8gdW5sb2NrOwogCX0KLQljYWlmX2Fzc2VydChwYXJhbS0+cGh5aWQgPT0gY25mZy0+cGh5X2xheWVyc1twYXJhbS0+cGh5aWRdLmlkKTsKLQljYWlmX2Fzc2VydChjbmZnLT5waHlfbGF5ZXJzW3BhcmFtLT5waHlpZF0uZnJtX2xheWVyLT5pZCA9PQotCQkgICAgIHBhcmFtLT5waHlpZCk7Ci0JY2FpZl9hc3NlcnQoY25mZy0+cGh5X2xheWVyc1twYXJhbS0+cGh5aWRdLnBoeV9sYXllci0+aWQgPT0KLQkJICAgICBwYXJhbS0+cGh5aWQpOworCWNhaWZfYXNzZXJ0KHBhcmFtLnBoeWlkID09IHBoeS0+aWQpOworCWNhaWZfYXNzZXJ0KHBoeS0+ZnJtX2xheWVyLT5pZCA9PQorCQkgICAgIHBhcmFtLnBoeWlkKTsKKwljYWlmX2Fzc2VydChwaHktPnBoeV9sYXllci0+aWQgPT0KKwkJICAgICBwYXJhbS5waHlpZCk7CiAKLQkqaWZpbmRleCA9IGNuZmctPnBoeV9sYXllcnNbcGFyYW0tPnBoeWlkXS5pZmluZGV4OwotCSpwcm90b19oZWFkID0KLQkJcHJvdG9oZWFkW3BhcmFtLT5saW5rdHlwZV0rCi0JCShjbmZnLT5waHlfbGF5ZXJzW3BhcmFtLT5waHlpZF0udXNlX3N0eCA/IDEgOiAwKTsKLQorCSppZmluZGV4ID0gcGh5LT5pZmluZGV4OwogCSpwcm90b190YWlsID0gMjsKKwkqcHJvdG9faGVhZCA9CisKKwlwcm90b2hlYWRbcGFyYW0ubGlua3R5cGVdICsgKHBoeS0+dXNlX3N0eCA/IDEgOiAwKTsKKworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJLyogRklYTUU6IEVOVU1FUkFURSBJTklUSUFMTFkgV0hFTiBBQ1RJVkFUSU5HIFBIWVNJQ0FMIElOVEVSRkFDRSAqLwotCWNmY3RybF9lbnVtX3JlcShjbmZnLT5jdHJsLCBwYXJhbS0+cGh5aWQpOwotCXJldHVybiBjZmN0cmxfbGlua3VwX3JlcXVlc3QoY25mZy0+Y3RybCwgcGFyYW0sIGFkYXBfbGF5ZXIpOworCWNmY3RybF9lbnVtX3JlcShjZmctPmN0cmwsIHBhcmFtLnBoeWlkKTsKKwlyZXR1cm4gY2ZjdHJsX2xpbmt1cF9yZXF1ZXN0KGNmZy0+Y3RybCwgJnBhcmFtLCBhZGFwX2xheWVyKTsKKwordW5sb2NrOgorCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiBlcnI7CiB9Ci1FWFBPUlRfU1lNQk9MKGNmY25mZ19hZGRfYWRhcHRhdGlvbl9sYXllcik7CitFWFBPUlRfU1lNQk9MKGNhaWZfY29ubmVjdF9jbGllbnQpOwogCiBzdGF0aWMgdm9pZCBjZmNuZmdfcmVqZWN0X3JzcChzdHJ1Y3QgY2ZsYXllciAqbGF5ZXIsIHU4IGNoYW5uZWxfaWQsCiAJCQkgICAgIHN0cnVjdCBjZmxheWVyICphZGFwdF9sYXllcikKQEAgLTMxNSwzMiArMzgwLDQ1IEBACiAKIHN0YXRpYyB2b2lkCiBjZmNuZmdfbGlua3VwX3JzcChzdHJ1Y3QgY2ZsYXllciAqbGF5ZXIsIHU4IGNoYW5uZWxfaWQsIGVudW0gY2ZjdHJsX3NydiBzZXJ2LAotCQkgdTggcGh5aWQsIHN0cnVjdCBjZmxheWVyICphZGFwdF9sYXllcikKKwkJICB1OCBwaHlpZCwgc3RydWN0IGNmbGF5ZXIgKmFkYXB0X2xheWVyKQogewogCXN0cnVjdCBjZmNuZmcgKmNuZmcgPSBjb250YWluZXJfb2JqKGxheWVyKTsKIAlzdHJ1Y3QgY2ZsYXllciAqc2VydmljZWwgPSBOVUxMOwogCXN0cnVjdCBjZmNuZmdfcGh5aW5mbyAqcGh5aW5mbzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCi0JaWYgKGFkYXB0X2xheWVyID09IE5VTEwpIHsKLQkJcHJfZGVidWcoImxpbmsgc2V0dXAgcmVzcG9uc2UgYnV0IG5vIGNsaWVudCBleGlzdCwgc2VuZCBsaW5rZG93biBiYWNrXG4iKTsKLQkJY2ZjdHJsX2xpbmtkb3duX3JlcShjbmZnLT5jdHJsLCBjaGFubmVsX2lkLCBOVUxMKTsKKwlpZiAoY2hhbm5lbF9pZCA9PSAwKSB7CisJCXByX3dhcm4oInJlY2VpdmVkIGNoYW5uZWxfaWQgemVyb1xuIik7CisJCWlmIChhZGFwdF9sYXllciAhPSBOVUxMICYmIGFkYXB0X2xheWVyLT5jdHJsY21kICE9IE5VTEwpCisJCQlhZGFwdF9sYXllci0+Y3RybGNtZChhZGFwdF9sYXllciwKKwkJCQkJCUNBSUZfQ1RSTENNRF9JTklUX0ZBSUxfUlNQLCAwKTsKIAkJcmV0dXJuOwogCX0KIAorCXJjdV9yZWFkX2xvY2soKTsKKworCWlmIChhZGFwdF9sYXllciA9PSBOVUxMKSB7CisJCXByX2RlYnVnKCJsaW5rIHNldHVwIHJlc3BvbnNlIGJ1dCBubyBjbGllbnQgZXhpc3QsIgorCQkJCSJzZW5kIGxpbmtkb3duIGJhY2tcbiIpOworCQljZmN0cmxfbGlua2Rvd25fcmVxKGNuZmctPmN0cmwsIGNoYW5uZWxfaWQsIE5VTEwpOworCQlnb3RvIHVubG9jazsKKwl9CisKIAljYWlmX2Fzc2VydChjbmZnICE9IE5VTEwpOwogCWNhaWZfYXNzZXJ0KHBoeWlkICE9IDApOwotCXBoeWluZm8gPSAmY25mZy0+cGh5X2xheWVyc1twaHlpZF07CisKKwlwaHlpbmZvID0gY2ZjbmZnX2dldF9waHlpbmZvX3JjdShjbmZnLCBwaHlpZCk7CisJaWYgKHBoeWluZm8gPT0gTlVMTCkgeworCQlwcl9lcnIoIkVSUk9SOiBMaW5rIExheWVyIERldmljZSBkaXNzYXBlYXJlZCIKKwkJCQkid2hpbGUgY29ubmVjdGluZ1xuIik7CisJCWdvdG8gdW5sb2NrOworCX0KKworCWNhaWZfYXNzZXJ0KHBoeWluZm8gIT0gTlVMTCk7CiAJY2FpZl9hc3NlcnQocGh5aW5mby0+aWQgPT0gcGh5aWQpOwogCWNhaWZfYXNzZXJ0KHBoeWluZm8tPnBoeV9sYXllciAhPSBOVUxMKTsKIAljYWlmX2Fzc2VydChwaHlpbmZvLT5waHlfbGF5ZXItPmlkID09IHBoeWlkKTsKIAotCXBoeWluZm8tPnBoeV9yZWZfY291bnQrKzsKLQlpZiAocGh5aW5mby0+cGh5X3JlZl9jb3VudCA9PSAxICYmCi0JICAgIHBoeWluZm8tPnBoeV9sYXllci0+bW9kZW1jbWQgIT0gTlVMTCkgewotCQlwaHlpbmZvLT5waHlfbGF5ZXItPm1vZGVtY21kKHBoeWluZm8tPnBoeV9sYXllciwKLQkJCQkJICAgICBfQ0FJRl9NT0RFTUNNRF9QSFlJRl9VU0VGVUxMKTsKLQl9CiAJYWRhcHRfbGF5ZXItPmlkID0gY2hhbm5lbF9pZDsKIAogCXN3aXRjaCAoc2VydikgewpAQCAtMzQ4LDcgKzQyNiw4IEBACiAJCXNlcnZpY2VsID0gY2Z2ZWlfY3JlYXRlKGNoYW5uZWxfaWQsICZwaHlpbmZvLT5kZXZfaW5mbyk7CiAJCWJyZWFrOwogCWNhc2UgQ0ZDVFJMX1NSVl9EQVRBR1JBTToKLQkJc2VydmljZWwgPSBjZmRnbWxfY3JlYXRlKGNoYW5uZWxfaWQsICZwaHlpbmZvLT5kZXZfaW5mbyk7CisJCXNlcnZpY2VsID0gY2ZkZ21sX2NyZWF0ZShjaGFubmVsX2lkLAorCQkJCQkmcGh5aW5mby0+ZGV2X2luZm8pOwogCQlicmVhazsKIAljYXNlIENGQ1RSTF9TUlZfUkZNOgogCQluZXRkZXYgPSBwaHlpbmZvLT5kZXZfaW5mby5kZXY7CkBAIC0zNjUsOTQgKzQ0NCw5MiBAQAogCQlzZXJ2aWNlbCA9IGNmZGJnbF9jcmVhdGUoY2hhbm5lbF9pZCwgJnBoeWluZm8tPmRldl9pbmZvKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJfZXJyKCJQcm90b2NvbCBlcnJvci4gTGluayBzZXR1cCByZXNwb25zZSAtIHVua25vd24gY2hhbm5lbCB0eXBlXG4iKTsKLQkJcmV0dXJuOworCQlwcl9lcnIoIlByb3RvY29sIGVycm9yLiBMaW5rIHNldHVwIHJlc3BvbnNlICIKKwkJCQkiLSB1bmtub3duIGNoYW5uZWwgdHlwZVxuIik7CisJCWdvdG8gdW5sb2NrOwogCX0KIAlpZiAoIXNlcnZpY2VsKSB7CiAJCXByX3dhcm4oIk91dCBvZiBtZW1vcnlcbiIpOwotCQlyZXR1cm47CisJCWdvdG8gdW5sb2NrOwogCX0KIAlsYXllcl9zZXRfZG4oc2VydmljZWwsIGNuZmctPm11eCk7CiAJY2ZtdXhsX3NldF91cGxheWVyKGNuZmctPm11eCwgc2VydmljZWwsIGNoYW5uZWxfaWQpOwogCWxheWVyX3NldF91cChzZXJ2aWNlbCwgYWRhcHRfbGF5ZXIpOwogCWxheWVyX3NldF9kbihhZGFwdF9sYXllciwgc2VydmljZWwpOwotCWNmc3J2bF9nZXQoc2VydmljZWwpOworCisJcmN1X3JlYWRfdW5sb2NrKCk7CisKIAlzZXJ2aWNlbC0+Y3RybGNtZChzZXJ2aWNlbCwgQ0FJRl9DVFJMQ01EX0lOSVRfUlNQLCAwKTsKKwlyZXR1cm47Cit1bmxvY2s6CisJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIHZvaWQKIGNmY25mZ19hZGRfcGh5X2xheWVyKHN0cnVjdCBjZmNuZmcgKmNuZmcsIGVudW0gY2ZjbmZnX3BoeV90eXBlIHBoeV90eXBlLAogCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjZmxheWVyICpwaHlfbGF5ZXIsCi0JCSAgICAgdTE2ICpwaHlpZCwgZW51bSBjZmNuZmdfcGh5X3ByZWZlcmVuY2UgcHJlZiwKKwkJICAgICBlbnVtIGNmY25mZ19waHlfcHJlZmVyZW5jZSBwcmVmLAogCQkgICAgIGJvb2wgZmNzLCBib29sIHN0eCkKIHsKIAlzdHJ1Y3QgY2ZsYXllciAqZnJtbDsKIAlzdHJ1Y3QgY2ZsYXllciAqcGh5X2RyaXZlciA9IE5VTEw7CisJc3RydWN0IGNmY25mZ19waHlpbmZvICpwaHlpbmZvOwogCWludCBpOworCXU4IHBoeWlkOwogCisJbXV0ZXhfbG9jaygmY25mZy0+bG9jayk7CiAKLQlpZiAoY25mZy0+cGh5X2xheWVyc1tjbmZnLT5sYXN0X3BoeWlkXS5mcm1fbGF5ZXIgPT0gTlVMTCkgewotCQkqcGh5aWQgPSBjbmZnLT5sYXN0X3BoeWlkOwotCi0JCS8qIHJhbmdlOiAqIDEuLihNQVhfUEhZX0xBWUVSUy0xKSAqLwotCQljbmZnLT5sYXN0X3BoeWlkID0KLQkJICAgIChjbmZnLT5sYXN0X3BoeWlkICUgKE1BWF9QSFlfTEFZRVJTIC0gMSkpICsgMTsKLQl9IGVsc2UgewotCQkqcGh5aWQgPSAwOwotCQlmb3IgKGkgPSAxOyBpIDwgTUFYX1BIWV9MQVlFUlM7IGkrKykgewotCQkJaWYgKGNuZmctPnBoeV9sYXllcnNbaV0uZnJtX2xheWVyID09IE5VTEwpIHsKLQkJCQkqcGh5aWQgPSBpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9CisJLyogQ0FJRiBwcm90b2NvbCBhbGxvdyBtYXhpbXVtIDYgbGluay1sYXllcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7CisJCXBoeWlkID0gKGRldi0+aWZpbmRleCArIGkpICYgMHg3OworCQlpZiAocGh5aWQgPT0gMCkKKwkJCWNvbnRpbnVlOworCQlpZiAoY2ZjbmZnX2dldF9waHlpbmZvX3JjdShjbmZnLCBwaHlpZCkgPT0gTlVMTCkKKwkJCWdvdG8gZ290X3BoeWlkOwogCX0KLQlpZiAoKnBoeWlkID09IDApIHsKLQkJcHJfZXJyKCJObyBBdmFpbGFibGUgUEhZIElEXG4iKTsKLQkJcmV0dXJuOwotCX0KKwlwcl93YXJuKCJUb28gbWFueSBDQUlGIExpbmsgTGF5ZXJzIChtYXggNilcbiIpOworCWdvdG8gb3V0OworCitnb3RfcGh5aWQ6CisJcGh5aW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjZmNuZmdfcGh5aW5mbyksIEdGUF9BVE9NSUMpOwogCiAJc3dpdGNoIChwaHlfdHlwZSkgewogCWNhc2UgQ0ZQSFlUWVBFX0ZSQUc6CiAJCXBoeV9kcml2ZXIgPQotCQkgICAgY2ZzZXJsX2NyZWF0ZShDRlBIWVRZUEVfRlJBRywgKnBoeWlkLCBzdHgpOworCQkgICAgY2ZzZXJsX2NyZWF0ZShDRlBIWVRZUEVfRlJBRywgcGh5aWQsIHN0eCk7CiAJCWlmICghcGh5X2RyaXZlcikgewogCQkJcHJfd2FybigiT3V0IG9mIG1lbW9yeVxuIik7Ci0JCQlyZXR1cm47CisJCQlnb3RvIG91dDsKIAkJfQotCiAJCWJyZWFrOwogCWNhc2UgQ0ZQSFlUWVBFX0NBSUY6CiAJCXBoeV9kcml2ZXIgPSBOVUxMOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcl9lcnIoIiVkXG4iLCBwaHlfdHlwZSk7Ci0JCXJldHVybjsKLQkJYnJlYWs7CisJCWdvdG8gb3V0OwogCX0KKwlwaHlfbGF5ZXItPmlkID0gcGh5aWQ7CisJcGh5aW5mby0+cHJlZiA9IHByZWY7CisJcGh5aW5mby0+aWQgPSBwaHlpZDsKKwlwaHlpbmZvLT5kZXZfaW5mby5pZCA9IHBoeWlkOworCXBoeWluZm8tPmRldl9pbmZvLmRldiA9IGRldjsKKwlwaHlpbmZvLT5waHlfbGF5ZXIgPSBwaHlfbGF5ZXI7CisJcGh5aW5mby0+aWZpbmRleCA9IGRldi0+aWZpbmRleDsKKwlwaHlpbmZvLT51c2Vfc3R4ID0gc3R4OworCXBoeWluZm8tPnVzZV9mY3MgPSBmY3M7CiAKLQlwaHlfbGF5ZXItPmlkID0gKnBoeWlkOwotCWNuZmctPnBoeV9sYXllcnNbKnBoeWlkXS5wcmVmID0gcHJlZjsKLQljbmZnLT5waHlfbGF5ZXJzWypwaHlpZF0uaWQgPSAqcGh5aWQ7Ci0JY25mZy0+cGh5X2xheWVyc1sqcGh5aWRdLmRldl9pbmZvLmlkID0gKnBoeWlkOwotCWNuZmctPnBoeV9sYXllcnNbKnBoeWlkXS5kZXZfaW5mby5kZXYgPSBkZXY7Ci0JY25mZy0+cGh5X2xheWVyc1sqcGh5aWRdLnBoeV9sYXllciA9IHBoeV9sYXllcjsKLQljbmZnLT5waHlfbGF5ZXJzWypwaHlpZF0ucGh5X3JlZl9jb3VudCA9IDA7Ci0JY25mZy0+cGh5X2xheWVyc1sqcGh5aWRdLmlmaW5kZXggPSBkZXYtPmlmaW5kZXg7Ci0JY25mZy0+cGh5X2xheWVyc1sqcGh5aWRdLnVzZV9zdHggPSBzdHg7Ci0JY25mZy0+cGh5X2xheWVyc1sqcGh5aWRdLnVzZV9mY3MgPSBmY3M7CisJZnJtbCA9IGNmZnJtbF9jcmVhdGUocGh5aWQsIGZjcyk7CiAKLQlwaHlfbGF5ZXItPnR5cGUgPSBwaHlfdHlwZTsKLQlmcm1sID0gY2Zmcm1sX2NyZWF0ZSgqcGh5aWQsIGZjcyk7CiAJaWYgKCFmcm1sKSB7CiAJCXByX3dhcm4oIk91dCBvZiBtZW1vcnlcbiIpOwotCQlyZXR1cm47CisJCWtmcmVlKHBoeWluZm8pOworCQlnb3RvIG91dDsKIAl9Ci0JY25mZy0+cGh5X2xheWVyc1sqcGh5aWRdLmZybV9sYXllciA9IGZybWw7Ci0JY2ZtdXhsX3NldF9kbmxheWVyKGNuZmctPm11eCwgZnJtbCwgKnBoeWlkKTsKKwlwaHlpbmZvLT5mcm1fbGF5ZXIgPSBmcm1sOwogCWxheWVyX3NldF91cChmcm1sLCBjbmZnLT5tdXgpOwogCiAJaWYgKHBoeV9kcml2ZXIgIT0gTlVMTCkgewotCQlwaHlfZHJpdmVyLT5pZCA9ICpwaHlpZDsKKwkJcGh5X2RyaXZlci0+aWQgPSBwaHlpZDsKIAkJbGF5ZXJfc2V0X2RuKGZybWwsIHBoeV9kcml2ZXIpOwogCQlsYXllcl9zZXRfdXAocGh5X2RyaXZlciwgZnJtbCk7CiAJCWxheWVyX3NldF9kbihwaHlfZHJpdmVyLCBwaHlfbGF5ZXIpOwpAQCAtNDYxLDMzICs1MzgsOTUgQEAKIAkJbGF5ZXJfc2V0X2RuKGZybWwsIHBoeV9sYXllcik7CiAJCWxheWVyX3NldF91cChwaHlfbGF5ZXIsIGZybWwpOwogCX0KKworCWxpc3RfYWRkX3JjdSgmcGh5aW5mby0+bm9kZSwgJmNuZmctPnBoeXMpOworb3V0OgorCW11dGV4X3VubG9jaygmY25mZy0+bG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MKGNmY25mZ19hZGRfcGh5X2xheWVyKTsKIAoraW50IGNmY25mZ19zZXRfcGh5X3N0YXRlKHN0cnVjdCBjZmNuZmcgKmNuZmcsIHN0cnVjdCBjZmxheWVyICpwaHlfbGF5ZXIsCisJCWJvb2wgdXApCit7CisJc3RydWN0IGNmY25mZ19waHlpbmZvICpwaHlpbmZvOworCisJcmN1X3JlYWRfbG9jaygpOworCXBoeWluZm8gPSBjZmNuZmdfZ2V0X3BoeWluZm9fcmN1KGNuZmcsIHBoeV9sYXllci0+aWQpOworCWlmIChwaHlpbmZvID09IE5VTEwpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChwaHlpbmZvLT51cCA9PSB1cCkgeworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJcmV0dXJuIDA7CisJfQorCXBoeWluZm8tPnVwID0gdXA7CisKKwlpZiAodXApIHsKKwkJY2Zmcm1sX2hvbGQocGh5aW5mby0+ZnJtX2xheWVyKTsKKwkJY2ZtdXhsX3NldF9kbmxheWVyKGNuZmctPm11eCwgcGh5aW5mby0+ZnJtX2xheWVyLAorCQkJCQlwaHlfbGF5ZXItPmlkKTsKKwl9IGVsc2UgeworCQljZm11eGxfcmVtb3ZlX2RubGF5ZXIoY25mZy0+bXV4LCBwaHlfbGF5ZXItPmlkKTsKKwkJY2Zmcm1sX3B1dChwaHlpbmZvLT5mcm1fbGF5ZXIpOworCX0KKworCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChjZmNuZmdfc2V0X3BoeV9zdGF0ZSk7CisKIGludCBjZmNuZmdfZGVsX3BoeV9sYXllcihzdHJ1Y3QgY2ZjbmZnICpjbmZnLCBzdHJ1Y3QgY2ZsYXllciAqcGh5X2xheWVyKQogewogCXN0cnVjdCBjZmxheWVyICpmcm1sLCAqZnJtbF9kbjsKIAl1MTYgcGh5aWQ7Ci0JcGh5aWQgPSBwaHlfbGF5ZXItPmlkOwotCWNhaWZfYXNzZXJ0KHBoeWlkID09IGNuZmctPnBoeV9sYXllcnNbcGh5aWRdLmlkKTsKLQljYWlmX2Fzc2VydChwaHlfbGF5ZXIgPT0gY25mZy0+cGh5X2xheWVyc1twaHlpZF0ucGh5X2xheWVyKTsKLQljYWlmX2Fzc2VydChwaHlfbGF5ZXItPmlkID09IHBoeWlkKTsKLQljYWlmX2Fzc2VydChjbmZnLT5waHlfbGF5ZXJzW3BoeWlkXS5mcm1fbGF5ZXItPmlkID09IHBoeWlkKTsKKwlzdHJ1Y3QgY2ZjbmZnX3BoeWluZm8gKnBoeWluZm87CiAKLQltZW1zZXQoJmNuZmctPnBoeV9sYXllcnNbcGh5X2xheWVyLT5pZF0sIDAsCi0JICAgICAgIHNpemVvZihzdHJ1Y3QgY2ZjbmZnX3BoeWluZm8pKTsKLQlmcm1sID0gY2ZtdXhsX3JlbW92ZV9kbmxheWVyKGNuZmctPm11eCwgcGh5X2xheWVyLT5pZCk7CisJbWlnaHRfc2xlZXAoKTsKKworCW11dGV4X2xvY2soJmNuZmctPmxvY2spOworCisJcGh5aWQgPSBwaHlfbGF5ZXItPmlkOworCXBoeWluZm8gPSBjZmNuZmdfZ2V0X3BoeWluZm9fcmN1KGNuZmcsIHBoeWlkKTsKKworCWlmIChwaHlpbmZvID09IE5VTEwpIHsKKwkJbXV0ZXhfdW5sb2NrKCZjbmZnLT5sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCWNhaWZfYXNzZXJ0KHBoeWlkID09IHBoeWluZm8tPmlkKTsKKwljYWlmX2Fzc2VydChwaHlfbGF5ZXIgPT0gcGh5aW5mby0+cGh5X2xheWVyKTsKKwljYWlmX2Fzc2VydChwaHlfbGF5ZXItPmlkID09IHBoeWlkKTsKKwljYWlmX2Fzc2VydChwaHlpbmZvLT5mcm1fbGF5ZXItPmlkID09IHBoeWlkKTsKKworCWxpc3RfZGVsX3JjdSgmcGh5aW5mby0+bm9kZSk7CisJc3luY2hyb25pemVfcmN1KCk7CisKKwkvKiBGYWlsIGlmIHJlZmVyZW5jZSBjb3VudCBpcyBub3QgemVybyAqLworCWlmIChjZmZybWxfcmVmY250X3JlYWQocGh5aW5mby0+ZnJtX2xheWVyKSAhPSAwKSB7CisJCXByX2luZm8oIldhaXQgZm9yIGRldmljZSBpbnVzZVxuIik7CisJCWxpc3RfYWRkX3JjdSgmcGh5aW5mby0+bm9kZSwgJmNuZmctPnBoeXMpOworCQltdXRleF91bmxvY2soJmNuZmctPmxvY2spOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisKKwlmcm1sID0gcGh5aW5mby0+ZnJtX2xheWVyOwogCWZybWxfZG4gPSBmcm1sLT5kbjsKIAljZmZybWxfc2V0X3VwbGF5ZXIoZnJtbCwgTlVMTCk7CiAJY2Zmcm1sX3NldF9kbmxheWVyKGZybWwsIE5VTEwpOwotCWtmcmVlKGZybWwpOwotCiAJaWYgKHBoeV9sYXllciAhPSBmcm1sX2RuKSB7CiAJCWxheWVyX3NldF91cChmcm1sX2RuLCBOVUxMKTsKIAkJbGF5ZXJfc2V0X2RuKGZybWxfZG4sIE5VTEwpOwotCQlrZnJlZShmcm1sX2RuKTsKIAl9CiAJbGF5ZXJfc2V0X3VwKHBoeV9sYXllciwgTlVMTCk7CisKKwlpZiAocGh5aW5mby0+cGh5X2xheWVyICE9IGZybWxfZG4pCisJCWtmcmVlKGZybWxfZG4pOworCisJY2Zmcm1sX2ZyZWUoZnJtbCk7CisJa2ZyZWUocGh5aW5mbyk7CisJbXV0ZXhfdW5sb2NrKCZjbmZnLT5sb2NrKTsKKwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChjZmNuZmdfZGVsX3BoeV9sYXllcik7CmRpZmYgLS1naXQgYS9uZXQvY2FpZi9jZmN0cmwuYyBiL25ldC9jYWlmL2NmY3RybC5jCmluZGV4IDNjZDhmOTcuLmUyMjY3MWIgMTAwNjQ0Ci0tLSBhL25ldC9jYWlmL2NmY3RybC5jCisrKyBiL25ldC9jYWlmL2NmY3RybC5jCkBAIC0xNyw3ICsxNyw2IEBACiAjZGVmaW5lIFVUSUxJVFlfTkFNRV9MRU5HVEggMTYKICNkZWZpbmUgQ0ZQS1RfQ1RSTF9QS1RfTEVOIDIwCiAKLQogI2lmZGVmIENBSUZfTk9fTE9PUAogc3RhdGljIGludCBoYW5kbGVfbG9vcChzdHJ1Y3QgY2ZjdHJsICpjdHJsLAogCQkJICAgICAgaW50IGNtZCwgc3RydWN0IGNmcGt0ICpwa3QpewpAQCAtNTEsMTQgKzUwLDMxIEBACiAJdGhpcy0+c2Vydi5sYXllci5yZWNlaXZlID0gY2ZjdHJsX3JlY3Y7CiAJc3ByaW50Zih0aGlzLT5zZXJ2LmxheWVyLm5hbWUsICJjdHJsIik7CiAJdGhpcy0+c2Vydi5sYXllci5jdHJsY21kID0gY2ZjdHJsX2N0cmxjbWQ7CisjaWZuZGVmIENBSUZfTk9fTE9PUAogCXNwaW5fbG9ja19pbml0KCZ0aGlzLT5sb29wX2xpbmtpZF9sb2NrKTsKKwl0aGlzLT5sb29wX2xpbmtpZCA9IDE7CisjZW5kaWYKIAlzcGluX2xvY2tfaW5pdCgmdGhpcy0+aW5mb19saXN0X2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZ0aGlzLT5saXN0KTsKLQl0aGlzLT5sb29wX2xpbmtpZCA9IDE7CiAJcmV0dXJuICZ0aGlzLT5zZXJ2LmxheWVyOwogfQogCi1zdGF0aWMgYm9vbCBwYXJhbV9lcShzdHJ1Y3QgY2ZjdHJsX2xpbmtfcGFyYW0gKnAxLCBzdHJ1Y3QgY2ZjdHJsX2xpbmtfcGFyYW0gKnAyKQordm9pZCBjZmN0cmxfcmVtb3ZlKHN0cnVjdCBjZmxheWVyICpsYXllcikKK3sKKwlzdHJ1Y3QgY2ZjdHJsX3JlcXVlc3RfaW5mbyAqcCwgKnRtcDsKKwlzdHJ1Y3QgY2ZjdHJsICpjdHJsID0gY29udGFpbmVyX29iaihsYXllcik7CisKKwlzcGluX2xvY2tfYmgoJmN0cmwtPmluZm9fbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgdG1wLCAmY3RybC0+bGlzdCwgbGlzdCkgeworCQlsaXN0X2RlbCgmcC0+bGlzdCk7CisJCWtmcmVlKHApOworCX0KKwlzcGluX3VubG9ja19iaCgmY3RybC0+aW5mb19saXN0X2xvY2spOworCWtmcmVlKGxheWVyKTsKK30KKworc3RhdGljIGJvb2wgcGFyYW1fZXEoY29uc3Qgc3RydWN0IGNmY3RybF9saW5rX3BhcmFtICpwMSwKKwkJCWNvbnN0IHN0cnVjdCBjZmN0cmxfbGlua19wYXJhbSAqcDIpCiB7CiAJYm9vbCBlcSA9CiAJICAgIHAxLT5saW5rdHlwZSA9PSBwMi0+bGlua3R5cGUgJiYKQEAgLTEwMCw4ICsxMTYsOCBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBjZmN0cmxfcmVxX2VxKHN0cnVjdCBjZmN0cmxfcmVxdWVzdF9pbmZvICpyMSwKLQkJICAgc3RydWN0IGNmY3RybF9yZXF1ZXN0X2luZm8gKnIyKQorc3RhdGljIGJvb2wgY2ZjdHJsX3JlcV9lcShjb25zdCBzdHJ1Y3QgY2ZjdHJsX3JlcXVlc3RfaW5mbyAqcjEsCisJCQkgIGNvbnN0IHN0cnVjdCBjZmN0cmxfcmVxdWVzdF9pbmZvICpyMikKIHsKIAlpZiAocjEtPmNtZCAhPSByMi0+Y21kKQogCQlyZXR1cm4gZmFsc2U7CkBAIC0xMTIsMjMgKzEyOCwyMiBAQAogfQogCiAvKiBJbnNlcnQgcmVxdWVzdCBhdCB0aGUgZW5kICovCi12b2lkIGNmY3RybF9pbnNlcnRfcmVxKHN0cnVjdCBjZmN0cmwgKmN0cmwsCitzdGF0aWMgdm9pZCBjZmN0cmxfaW5zZXJ0X3JlcShzdHJ1Y3QgY2ZjdHJsICpjdHJsLAogCQkJICAgICAgc3RydWN0IGNmY3RybF9yZXF1ZXN0X2luZm8gKnJlcSkKIHsKLQlzcGluX2xvY2soJmN0cmwtPmluZm9fbGlzdF9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJmN0cmwtPmluZm9fbGlzdF9sb2NrKTsKIAlhdG9taWNfaW5jKCZjdHJsLT5yZXFfc2VxX25vKTsKIAlyZXEtPnNlcXVlbmNlX25vID0gYXRvbWljX3JlYWQoJmN0cmwtPnJlcV9zZXFfbm8pOwogCWxpc3RfYWRkX3RhaWwoJnJlcS0+bGlzdCwgJmN0cmwtPmxpc3QpOwotCXNwaW5fdW5sb2NrKCZjdHJsLT5pbmZvX2xpc3RfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJmN0cmwtPmluZm9fbGlzdF9sb2NrKTsKIH0KIAogLyogQ29tcGFyZSBhbmQgcmVtb3ZlIHJlcXVlc3QgKi8KLXN0cnVjdCBjZmN0cmxfcmVxdWVzdF9pbmZvICpjZmN0cmxfcmVtb3ZlX3JlcShzdHJ1Y3QgY2ZjdHJsICpjdHJsLAotCQkJCQkgICAgICBzdHJ1Y3QgY2ZjdHJsX3JlcXVlc3RfaW5mbyAqcmVxKQorc3RhdGljIHN0cnVjdCBjZmN0cmxfcmVxdWVzdF9pbmZvICpjZmN0cmxfcmVtb3ZlX3JlcShzdHJ1Y3QgY2ZjdHJsICpjdHJsLAorCQkJCQkJc3RydWN0IGNmY3RybF9yZXF1ZXN0X2luZm8gKnJlcSkKIHsKIAlzdHJ1Y3QgY2ZjdHJsX3JlcXVlc3RfaW5mbyAqcCwgKnRtcCwgKmZpcnN0OwogCi0Jc3Bpbl9sb2NrKCZjdHJsLT5pbmZvX2xpc3RfbG9jayk7CiAJZmlyc3QgPSBsaXN0X2ZpcnN0X2VudHJ5KCZjdHJsLT5saXN0LCBzdHJ1Y3QgY2ZjdHJsX3JlcXVlc3RfaW5mbywgbGlzdCk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgdG1wLCAmY3RybC0+bGlzdCwgbGlzdCkgewpAQCAtMTQ0LDcgKzE1OSw2IEBACiAJfQogCXAgPSBOVUxMOwogb3V0OgotCXNwaW5fdW5sb2NrKCZjdHJsLT5pbmZvX2xpc3RfbG9jayk7CiAJcmV0dXJuIHA7CiB9CiAKQEAgLTE1NCwxNiArMTY4LDYgQEAKIAlyZXR1cm4gJnRoaXMtPnJlczsKIH0KIAotdm9pZCBjZmN0cmxfc2V0X2RubGF5ZXIoc3RydWN0IGNmbGF5ZXIgKnRoaXMsIHN0cnVjdCBjZmxheWVyICpkbikKLXsKLQl0aGlzLT5kbiA9IGRuOwotfQotCi12b2lkIGNmY3RybF9zZXRfdXBsYXllcihzdHJ1Y3QgY2ZsYXllciAqdGhpcywgc3RydWN0IGNmbGF5ZXIgKnVwKQotewotCXRoaXMtPnVwID0gdXA7Ci19Ci0KIHN0YXRpYyB2b2lkIGluaXRfaW5mbyhzdHJ1Y3QgY2FpZl9wYXlsb2FkX2luZm8gKmluZm8sIHN0cnVjdCBjZmN0cmwgKmNmY3RybCkKIHsKIAlpbmZvLT5oZHJfbGVuID0gMDsKQEAgLTE3NCwyNCArMTc4LDIzIEBACiB2b2lkIGNmY3RybF9lbnVtX3JlcShzdHJ1Y3QgY2ZsYXllciAqbGF5ZXIsIHU4IHBoeXNsaW5raWQpCiB7CiAJc3RydWN0IGNmY3RybCAqY2ZjdHJsID0gY29udGFpbmVyX29iaihsYXllcik7Ci0JaW50IHJldDsKIAlzdHJ1Y3QgY2Zwa3QgKnBrdCA9IGNmcGt0X2NyZWF0ZShDRlBLVF9DVFJMX1BLVF9MRU4pOworCXN0cnVjdCBjZmxheWVyICpkbiA9IGNmY3RybC0+c2Vydi5sYXllci5kbjsKIAlpZiAoIXBrdCkgewogCQlwcl93YXJuKCJPdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmV0dXJuOwogCX0KKwlpZiAoIWRuKSB7CisJCXByX2RlYnVnKCJub3QgYWJsZSB0byBzZW5kIGVudW0gcmVxdWVzdFxuIik7CisJCXJldHVybjsKKwl9CiAJY2FpZl9hc3NlcnQob2Zmc2V0b2Yoc3RydWN0IGNmY3RybCwgc2Vydi5sYXllcikgPT0gMCk7CiAJaW5pdF9pbmZvKGNmcGt0X2luZm8ocGt0KSwgY2ZjdHJsKTsKIAljZnBrdF9pbmZvKHBrdCktPmRldl9pbmZvLT5pZCA9IHBoeXNsaW5raWQ7CiAJY2ZjdHJsLT5zZXJ2LmRldl9pbmZvLmlkID0gcGh5c2xpbmtpZDsKIAljZnBrdF9hZGRiZHkocGt0LCBDRkNUUkxfQ01EX0VOVU0pOwogCWNmcGt0X2FkZGJkeShwa3QsIHBoeXNsaW5raWQpOwotCXJldCA9Ci0JICAgIGNmY3RybC0+c2Vydi5sYXllci5kbi0+dHJhbnNtaXQoY2ZjdHJsLT5zZXJ2LmxheWVyLmRuLCBwa3QpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByX2VycigiQ291bGQgbm90IHRyYW5zbWl0IGVudW0gbWVzc2FnZVxuIik7Ci0JCWNmcGt0X2Rlc3Ryb3kocGt0KTsKLQl9CisJZG4tPnRyYW5zbWl0KGRuLCBwa3QpOwogfQogCiBpbnQgY2ZjdHJsX2xpbmt1cF9yZXF1ZXN0KHN0cnVjdCBjZmxheWVyICpsYXllciwKQEAgLTIwNSwxNCArMjA4LDI5IEBACiAJc3RydWN0IGNmY3RybF9yZXF1ZXN0X2luZm8gKnJlcTsKIAlpbnQgcmV0OwogCWNoYXIgdXRpbGl0eV9uYW1lWzE2XTsKLQlzdHJ1Y3QgY2Zwa3QgKnBrdCA9IGNmcGt0X2NyZWF0ZShDRlBLVF9DVFJMX1BLVF9MRU4pOworCXN0cnVjdCBjZnBrdCAqcGt0OworCXN0cnVjdCBjZmxheWVyICpkbiA9IGNmY3RybC0+c2Vydi5sYXllci5kbjsKKworCWlmICghZG4pIHsKKwkJcHJfZGVidWcoIm5vdCBhYmxlIHRvIHNlbmQgbGlua3VwIHJlcXVlc3RcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoY2ZjdHJsX2NhbmNlbF9yZXEobGF5ZXIsIHVzZXJfbGF5ZXIpID4gMCkgeworCQkvKiBTbGlnaHQgUGFyYW5vaWEsIGNoZWNrIGlmIGFscmVhZHkgY29ubmVjdGluZyAqLworCQlwcl9lcnIoIkR1cGxpY2F0ZSBjb25uZWN0IHJlcXVlc3QgZm9yIHNhbWUgY2xpZW50XG4iKTsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuIC1FQUxSRUFEWTsKKwl9CisKKwlwa3QgPSBjZnBrdF9jcmVhdGUoQ0ZQS1RfQ1RSTF9QS1RfTEVOKTsKIAlpZiAoIXBrdCkgewogCQlwcl93YXJuKCJPdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWNmcGt0X2FkZGJkeShwa3QsIENGQ1RSTF9DTURfTElOS19TRVRVUCk7Ci0JY2Zwa3RfYWRkYmR5KHBrdCwgKHBhcmFtLT5jaHR5cGUgPDwgNCkgKyBwYXJhbS0+bGlua3R5cGUpOwotCWNmcGt0X2FkZGJkeShwa3QsIChwYXJhbS0+cHJpb3JpdHkgPDwgMykgKyBwYXJhbS0+cGh5aWQpOworCWNmcGt0X2FkZGJkeShwa3QsIChwYXJhbS0+Y2h0eXBlIDw8IDQpIHwgcGFyYW0tPmxpbmt0eXBlKTsKKwljZnBrdF9hZGRiZHkocGt0LCAocGFyYW0tPnByaW9yaXR5IDw8IDMpIHwgcGFyYW0tPnBoeWlkKTsKIAljZnBrdF9hZGRiZHkocGt0LCBwYXJhbS0+ZW5kcG9pbnQgJiAweDAzKTsKIAogCXN3aXRjaCAocGFyYW0tPmxpbmt0eXBlKSB7CkBAIC0yNzMsMTEgKzI5MSwxNSBAQAogCSAqLwogCWNmcGt0X2luZm8ocGt0KS0+ZGV2X2luZm8tPmlkID0gcGFyYW0tPnBoeWlkOwogCXJldCA9Ci0JICAgIGNmY3RybC0+c2Vydi5sYXllci5kbi0+dHJhbnNtaXQoY2ZjdHJsLT5zZXJ2LmxheWVyLmRuLCBwa3QpOworCSAgICBkbi0+dHJhbnNtaXQoZG4sIHBrdCk7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJfZXJyKCJDb3VsZCBub3QgdHJhbnNtaXQgbGlua3NldHVwIHJlcXVlc3RcbiIpOwotCQljZnBrdF9kZXN0cm95KHBrdCk7Ci0JCXJldHVybiAtRU5PREVWOworCQlpbnQgY291bnQ7CisKKwkJY291bnQgPSBjZmN0cmxfY2FuY2VsX3JlcSgmY2ZjdHJsLT5zZXJ2LmxheWVyLAorCQkJCQkJdXNlcl9sYXllcik7CisJCWlmIChjb3VudCAhPSAxKQorCQkJcHJfZXJyKCJDb3VsZCBub3QgcmVtb3ZlIHJlcXVlc3QgKCVkKSIsIGNvdW50KTsKKwkJCXJldHVybiAtRU5PREVWOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTI4OCw4OSArMzEwLDQ2IEBACiAJaW50IHJldDsKIAlzdHJ1Y3QgY2ZjdHJsICpjZmN0cmwgPSBjb250YWluZXJfb2JqKGxheWVyKTsKIAlzdHJ1Y3QgY2Zwa3QgKnBrdCA9IGNmcGt0X2NyZWF0ZShDRlBLVF9DVFJMX1BLVF9MRU4pOworCXN0cnVjdCBjZmxheWVyICpkbiA9IGNmY3RybC0+c2Vydi5sYXllci5kbjsKKwogCWlmICghcGt0KSB7CiAJCXByX3dhcm4oIk91dCBvZiBtZW1vcnlcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CisKKwlpZiAoIWRuKSB7CisJCXByX2RlYnVnKCJub3QgYWJsZSB0byBzZW5kIGxpbmstZG93biByZXF1ZXN0XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCiAJY2Zwa3RfYWRkYmR5KHBrdCwgQ0ZDVFJMX0NNRF9MSU5LX0RFU1RST1kpOwogCWNmcGt0X2FkZGJkeShwa3QsIGNoYW5uZWxpZCk7CiAJaW5pdF9pbmZvKGNmcGt0X2luZm8ocGt0KSwgY2ZjdHJsKTsKIAlyZXQgPQotCSAgICBjZmN0cmwtPnNlcnYubGF5ZXIuZG4tPnRyYW5zbWl0KGNmY3RybC0+c2Vydi5sYXllci5kbiwgcGt0KTsKLQlpZiAocmV0IDwgMCkgewotCQlwcl9lcnIoIkNvdWxkIG5vdCB0cmFuc21pdCBsaW5rLWRvd24gcmVxdWVzdFxuIik7Ci0JCWNmcGt0X2Rlc3Ryb3kocGt0KTsKLQl9CisJICAgIGRuLT50cmFuc21pdChkbiwgcGt0KTsKKyNpZm5kZWYgQ0FJRl9OT19MT09QCisJY2ZjdHJsLT5sb29wX2xpbmt1c2VkW2NoYW5uZWxpZF0gPSAwOworI2VuZGlmCiAJcmV0dXJuIHJldDsKIH0KIAotdm9pZCBjZmN0cmxfc2xlZXBfcmVxKHN0cnVjdCBjZmxheWVyICpsYXllcikKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBjZmN0cmwgKmNmY3RybCA9IGNvbnRhaW5lcl9vYmoobGF5ZXIpOwotCXN0cnVjdCBjZnBrdCAqcGt0ID0gY2Zwa3RfY3JlYXRlKENGUEtUX0NUUkxfUEtUX0xFTik7Ci0JaWYgKCFwa3QpIHsKLQkJcHJfd2FybigiT3V0IG9mIG1lbW9yeVxuIik7Ci0JCXJldHVybjsKLQl9Ci0JY2Zwa3RfYWRkYmR5KHBrdCwgQ0ZDVFJMX0NNRF9TTEVFUCk7Ci0JaW5pdF9pbmZvKGNmcGt0X2luZm8ocGt0KSwgY2ZjdHJsKTsKLQlyZXQgPQotCSAgICBjZmN0cmwtPnNlcnYubGF5ZXIuZG4tPnRyYW5zbWl0KGNmY3RybC0+c2Vydi5sYXllci5kbiwgcGt0KTsKLQlpZiAocmV0IDwgMCkKLQkJY2Zwa3RfZGVzdHJveShwa3QpOwotfQotCi12b2lkIGNmY3RybF93YWtlX3JlcShzdHJ1Y3QgY2ZsYXllciAqbGF5ZXIpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgY2ZjdHJsICpjZmN0cmwgPSBjb250YWluZXJfb2JqKGxheWVyKTsKLQlzdHJ1Y3QgY2Zwa3QgKnBrdCA9IGNmcGt0X2NyZWF0ZShDRlBLVF9DVFJMX1BLVF9MRU4pOwotCWlmICghcGt0KSB7Ci0JCXByX3dhcm4oIk91dCBvZiBtZW1vcnlcbiIpOwotCQlyZXR1cm47Ci0JfQotCWNmcGt0X2FkZGJkeShwa3QsIENGQ1RSTF9DTURfV0FLRSk7Ci0JaW5pdF9pbmZvKGNmcGt0X2luZm8ocGt0KSwgY2ZjdHJsKTsKLQlyZXQgPQotCSAgICBjZmN0cmwtPnNlcnYubGF5ZXIuZG4tPnRyYW5zbWl0KGNmY3RybC0+c2Vydi5sYXllci5kbiwgcGt0KTsKLQlpZiAocmV0IDwgMCkKLQkJY2Zwa3RfZGVzdHJveShwa3QpOwotfQotCi12b2lkIGNmY3RybF9nZXRzdGFydHJlYXNvbl9yZXEoc3RydWN0IGNmbGF5ZXIgKmxheWVyKQotewotCWludCByZXQ7Ci0Jc3RydWN0IGNmY3RybCAqY2ZjdHJsID0gY29udGFpbmVyX29iaihsYXllcik7Ci0Jc3RydWN0IGNmcGt0ICpwa3QgPSBjZnBrdF9jcmVhdGUoQ0ZQS1RfQ1RSTF9QS1RfTEVOKTsKLQlpZiAoIXBrdCkgewotCQlwcl93YXJuKCJPdXQgb2YgbWVtb3J5XG4iKTsKLQkJcmV0dXJuOwotCX0KLQljZnBrdF9hZGRiZHkocGt0LCBDRkNUUkxfQ01EX1NUQVJUX1JFQVNPTik7Ci0JaW5pdF9pbmZvKGNmcGt0X2luZm8ocGt0KSwgY2ZjdHJsKTsKLQlyZXQgPQotCSAgICBjZmN0cmwtPnNlcnYubGF5ZXIuZG4tPnRyYW5zbWl0KGNmY3RybC0+c2Vydi5sYXllci5kbiwgcGt0KTsKLQlpZiAocmV0IDwgMCkKLQkJY2Zwa3RfZGVzdHJveShwa3QpOwotfQotCi0KLXZvaWQgY2ZjdHJsX2NhbmNlbF9yZXEoc3RydWN0IGNmbGF5ZXIgKmxheXIsIHN0cnVjdCBjZmxheWVyICphZGFwX2xheWVyKQoraW50IGNmY3RybF9jYW5jZWxfcmVxKHN0cnVjdCBjZmxheWVyICpsYXlyLCBzdHJ1Y3QgY2ZsYXllciAqYWRhcF9sYXllcikKIHsKIAlzdHJ1Y3QgY2ZjdHJsX3JlcXVlc3RfaW5mbyAqcCwgKnRtcDsKIAlzdHJ1Y3QgY2ZjdHJsICpjdHJsID0gY29udGFpbmVyX29iaihsYXlyKTsKLQlzcGluX2xvY2soJmN0cmwtPmluZm9fbGlzdF9sb2NrKTsKKwlpbnQgZm91bmQgPSAwOworCXNwaW5fbG9ja19iaCgmY3RybC0+aW5mb19saXN0X2xvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIHRtcCwgJmN0cmwtPmxpc3QsIGxpc3QpIHsKIAkJaWYgKHAtPmNsaWVudF9sYXllciA9PSBhZGFwX2xheWVyKSB7Ci0JCQlwcl9kZWJ1ZygiY2FuY2VsIHJlcSA6JWRcbiIsIHAtPnNlcXVlbmNlX25vKTsKIAkJCWxpc3RfZGVsKCZwLT5saXN0KTsKIAkJCWtmcmVlKHApOworCQkJZm91bmQrKzsKIAkJfQogCX0KIAotCXNwaW5fdW5sb2NrKCZjdHJsLT5pbmZvX2xpc3RfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJmN0cmwtPmluZm9fbGlzdF9sb2NrKTsKKwlyZXR1cm4gZm91bmQ7CiB9CiAKIHN0YXRpYyBpbnQgY2ZjdHJsX3JlY3Yoc3RydWN0IGNmbGF5ZXIgKmxheWVyLCBzdHJ1Y3QgY2Zwa3QgKnBrdCkKQEAgLTM4OSw3ICszNjgsOCBAQAogCWNmcGt0X2V4dHJfaGVhZChwa3QsICZjbWRyc3AsIDEpOwogCWNtZCA9IGNtZHJzcCAmIENGQ1RSTF9DTURfTUFTSzsKIAlpZiAoY21kICE9IENGQ1RSTF9DTURfTElOS19FUlIKLQkgICAgJiYgQ0ZDVFJMX1JTUF9CSVQgIT0gKENGQ1RSTF9SU1BfQklUICYgY21kcnNwKSkgeworCSAgICAmJiBDRkNUUkxfUlNQX0JJVCAhPSAoQ0ZDVFJMX1JTUF9CSVQgJiBjbWRyc3ApCisJCSYmIENGQ1RSTF9FUlJfQklUICE9IChDRkNUUkxfRVJSX0JJVCAmIGNtZHJzcCkpIHsKIAkJaWYgKGhhbmRsZV9sb29wKGNmY3RybCwgY21kLCBwa3QpICE9IDApCiAJCQljbWRyc3AgfD0gQ0ZDVFJMX0VSUl9CSVQ7CiAJfQpAQCAtNTE1LDE4ICs0OTUsMjAgQEAKIAkJCQljZnBrdF9leHRyX2hlYWQocGt0LCAmcGFyYW0sIGxlbik7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgotCQkJCXByX3dhcm4oIlJlcXVlc3Qgc2V0dXAgLSBpbnZhbGlkIGxpbmsgdHlwZSAoJWQpXG4iLAorCQkJCXByX3dhcm4oIlJlcXVlc3Qgc2V0dXAsIGludmFsaWQgdHlwZSAoJWQpXG4iLAogCQkJCQlzZXJ2KTsKIAkJCQlnb3RvIGVycm9yOwogCQkJfQogCiAJCQlyc3AuY21kID0gY21kOwogCQkJcnNwLnBhcmFtID0gbGlua3BhcmFtOworCQkJc3Bpbl9sb2NrX2JoKCZjZmN0cmwtPmluZm9fbGlzdF9sb2NrKTsKIAkJCXJlcSA9IGNmY3RybF9yZW1vdmVfcmVxKGNmY3RybCwgJnJzcCk7CiAKIAkJCWlmIChDRkNUUkxfRVJSX0JJVCA9PSAoQ0ZDVFJMX0VSUl9CSVQgJiBjbWRyc3ApIHx8CiAJCQkJY2Zwa3RfZXJyb25lb3VzKHBrdCkpIHsKLQkJCQlwcl9lcnIoIkludmFsaWQgTy9FIGJpdCBvciBwYXJzZSBlcnJvciBvbiBDQUlGIGNvbnRyb2wgY2hhbm5lbFxuIik7CisJCQkJcHJfZXJyKCJJbnZhbGlkIE8vRSBiaXQgb3IgcGFyc2UgZXJyb3IgIgorCQkJCQkJIm9uIENBSUYgY29udHJvbCBjaGFubmVsXG4iKTsKIAkJCQljZmN0cmwtPnJlcy5yZWplY3RfcnNwKGNmY3RybC0+c2Vydi5sYXllci51cCwKIAkJCQkJCSAgICAgICAwLAogCQkJCQkJICAgICAgIHJlcSA/IHJlcS0+Y2xpZW50X2xheWVyCkBAIC01NDEsNiArNTIzLDggQEAKIAogCQkJaWYgKHJlcSAhPSBOVUxMKQogCQkJCWtmcmVlKHJlcSk7CisKKwkJCXNwaW5fdW5sb2NrX2JoKCZjZmN0cmwtPmluZm9fbGlzdF9sb2NrKTsKIAkJfQogCQlicmVhazsKIAljYXNlIENGQ1RSTF9DTURfTElOS19ERVNUUk9ZOgpAQCAtNTg0LDEyICs1NjgsMjggQEAKIAlzd2l0Y2ggKGN0cmwpIHsKIAljYXNlIF9DQUlGX0NUUkxDTURfUEhZSUZfRkxPV19PRkZfSU5EOgogCWNhc2UgQ0FJRl9DVFJMQ01EX0ZMT1dfT0ZGX0lORDoKLQkJc3Bpbl9sb2NrKCZ0aGlzLT5pbmZvX2xpc3RfbG9jayk7Ci0JCWlmICghbGlzdF9lbXB0eSgmdGhpcy0+bGlzdCkpIHsKKwkJc3Bpbl9sb2NrX2JoKCZ0aGlzLT5pbmZvX2xpc3RfbG9jayk7CisJCWlmICghbGlzdF9lbXB0eSgmdGhpcy0+bGlzdCkpCiAJCQlwcl9kZWJ1ZygiUmVjZWl2ZWQgZmxvdyBvZmYgaW4gY29udHJvbCBsYXllclxuIik7Ci0JCX0KLQkJc3Bpbl91bmxvY2soJnRoaXMtPmluZm9fbGlzdF9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfYmgoJnRoaXMtPmluZm9fbGlzdF9sb2NrKTsKIAkJYnJlYWs7CisJY2FzZSBfQ0FJRl9DVFJMQ01EX1BIWUlGX0RPV05fSU5EOiB7CisJCXN0cnVjdCBjZmN0cmxfcmVxdWVzdF9pbmZvICpwLCAqdG1wOworCisJCS8qIEZpbmQgYWxsIGNvbm5lY3QgcmVxdWVzdCBhbmQgcmVwb3J0IGZhaWx1cmUgKi8KKwkJc3Bpbl9sb2NrX2JoKCZ0aGlzLT5pbmZvX2xpc3RfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCB0bXAsICZ0aGlzLT5saXN0LCBsaXN0KSB7CisJCQlpZiAocC0+cGFyYW0ucGh5aWQgPT0gcGh5aWQpIHsKKwkJCQlsaXN0X2RlbCgmcC0+bGlzdCk7CisJCQkJcC0+Y2xpZW50X2xheWVyLT5jdHJsY21kKHAtPmNsaWVudF9sYXllciwKKwkJCQkJCUNBSUZfQ1RSTENNRF9JTklUX0ZBSUxfUlNQLAorCQkJCQkJcGh5aWQpOworCQkJCWtmcmVlKHApOworCQkJfQorCQl9CisJCXNwaW5fdW5sb2NrX2JoKCZ0aGlzLT5pbmZvX2xpc3RfbG9jayk7CisJCWJyZWFrOworCX0KIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC01OTksMjcgKzU5OSwzMyBAQAogc3RhdGljIGludCBoYW5kbGVfbG9vcChzdHJ1Y3QgY2ZjdHJsICpjdHJsLCBpbnQgY21kLCBzdHJ1Y3QgY2Zwa3QgKnBrdCkKIHsKIAlzdGF0aWMgaW50IGxhc3RfbGlua2lkOworCXN0YXRpYyBpbnQgZGVjOwogCXU4IGxpbmtpZCwgbGlua3R5cGUsIHRtcDsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgQ0ZDVFJMX0NNRF9MSU5LX1NFVFVQOgotCQlzcGluX2xvY2soJmN0cmwtPmxvb3BfbGlua2lkX2xvY2spOwotCQlmb3IgKGxpbmtpZCA9IGxhc3RfbGlua2lkICsgMTsgbGlua2lkIDwgMjU1OyBsaW5raWQrKykKKwkJc3Bpbl9sb2NrX2JoKCZjdHJsLT5sb29wX2xpbmtpZF9sb2NrKTsKKwkJaWYgKCFkZWMpIHsKKwkJCWZvciAobGlua2lkID0gbGFzdF9saW5raWQgKyAxOyBsaW5raWQgPCAyNTQ7IGxpbmtpZCsrKQorCQkJCWlmICghY3RybC0+bG9vcF9saW5rdXNlZFtsaW5raWRdKQorCQkJCQlnb3RvIGZvdW5kOworCQl9CisJCWRlYyA9IDE7CisJCWZvciAobGlua2lkID0gbGFzdF9saW5raWQgLSAxOyBsaW5raWQgPiAxOyBsaW5raWQtLSkKIAkJCWlmICghY3RybC0+bG9vcF9saW5rdXNlZFtsaW5raWRdKQogCQkJCWdvdG8gZm91bmQ7Ci0JCWZvciAobGlua2lkID0gbGFzdF9saW5raWQgLSAxOyBsaW5raWQgPiAwOyBsaW5raWQtLSkKLQkJCWlmICghY3RybC0+bG9vcF9saW5rdXNlZFtsaW5raWRdKQotCQkJCWdvdG8gZm91bmQ7Ci0JCXNwaW5fdW5sb2NrKCZjdHJsLT5sb29wX2xpbmtpZF9sb2NrKTsKLQkJcHJfZXJyKCJPdXQgb2YgbGluay1pZHNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJc3Bpbl91bmxvY2tfYmgoJmN0cmwtPmxvb3BfbGlua2lkX2xvY2spOworCQlyZXR1cm4gLTE7CiBmb3VuZDoKKwkJaWYgKGxpbmtpZCA8IDEwKQorCQkJZGVjID0gMDsKKwogCQlpZiAoIWN0cmwtPmxvb3BfbGlua3VzZWRbbGlua2lkXSkKIAkJCWN0cmwtPmxvb3BfbGlua3VzZWRbbGlua2lkXSA9IDE7CiAKIAkJbGFzdF9saW5raWQgPSBsaW5raWQ7CiAKIAkJY2Zwa3RfYWRkX3RyYWlsKHBrdCwgJmxpbmtpZCwgMSk7Ci0JCXNwaW5fdW5sb2NrKCZjdHJsLT5sb29wX2xpbmtpZF9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfYmgoJmN0cmwtPmxvb3BfbGlua2lkX2xvY2spOwogCQljZnBrdF9wZWVrX2hlYWQocGt0LCAmbGlua3R5cGUsIDEpOwogCQlpZiAobGlua3R5cGUgPT0gIENGQ1RSTF9TUlZfVVRJTCkgewogCQkJdG1wID0gMHgwMTsKQEAgLTYyOSwxMCArNjM1LDEwIEBACiAJCWJyZWFrOwogCiAJY2FzZSBDRkNUUkxfQ01EX0xJTktfREVTVFJPWToKLQkJc3Bpbl9sb2NrKCZjdHJsLT5sb29wX2xpbmtpZF9sb2NrKTsKKwkJc3Bpbl9sb2NrX2JoKCZjdHJsLT5sb29wX2xpbmtpZF9sb2NrKTsKIAkJY2Zwa3RfcGVla19oZWFkKHBrdCwgJmxpbmtpZCwgMSk7CiAJCWN0cmwtPmxvb3BfbGlua3VzZWRbbGlua2lkXSA9IDA7Ci0JCXNwaW5fdW5sb2NrKCZjdHJsLT5sb29wX2xpbmtpZF9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfYmgoJmN0cmwtPmxvb3BfbGlua2lkX2xvY2spOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKZGlmZiAtLWdpdCBhL25ldC9jYWlmL2NmZGdtbC5jIGIvbmV0L2NhaWYvY2ZkZ21sLmMKaW5kZXggMDU0ZmRiNS4uMDM4MmRlYyAxMDA2NDQKLS0tIGEvbmV0L2NhaWYvY2ZkZ21sLmMKKysrIGIvbmV0L2NhaWYvY2ZkZ21sLmMKQEAgLTEwOCwxMCArMTA4LDUgQEAKIAkgKi8KIAlpbmZvLT5oZHJfbGVuID0gNDsKIAlpbmZvLT5kZXZfaW5mbyA9ICZzZXJ2aWNlLT5kZXZfaW5mbzsKLQlyZXQgPSBsYXlyLT5kbi0+dHJhbnNtaXQobGF5ci0+ZG4sIHBrdCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJdTMyIHRtcDMyOwotCQljZnBrdF9leHRyX2hlYWQocGt0LCAmdG1wMzIsIDQpOwotCX0KLQlyZXR1cm4gcmV0OworCXJldHVybiBsYXlyLT5kbi0+dHJhbnNtaXQobGF5ci0+ZG4sIHBrdCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvY2FpZi9jZmZybWwuYyBiL25ldC9jYWlmL2NmZnJtbC5jCmluZGV4IGE0NDUwNDMuLjA0MjA0YjIgMTAwNjQ0Ci0tLSBhL25ldC9jYWlmL2NmZnJtbC5jCisrKyBiL25ldC9jYWlmL2NmZnJtbC5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjLWNjaXR0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bmV0L2NhaWYvY2FpZl9sYXllci5oPgogI2luY2x1ZGUgPG5ldC9jYWlmL2NmcGt0Lmg+CiAjaW5jbHVkZSA8bmV0L2NhaWYvY2Zmcm1sLmg+CkBAIC0yMSw2ICsyMiw3IEBACiBzdHJ1Y3QgY2Zmcm1sIHsKIAlzdHJ1Y3QgY2ZsYXllciBsYXllcjsKIAlib29sIGRvZmNzOwkJLyogITwgRkNTIGFjdGl2ZSAqLworCWludCBfX3BlcmNwdQkJKnBjcHVfcmVmY250OwogfTsKIAogc3RhdGljIGludCBjZmZybWxfcmVjZWl2ZShzdHJ1Y3QgY2ZsYXllciAqbGF5ciwgc3RydWN0IGNmcGt0ICpwa3QpOwpAQCAtMzcsNiArMzksMTIgQEAKIAkJcHJfd2FybigiT3V0IG9mIG1lbW9yeVxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KKwl0aGlzLT5wY3B1X3JlZmNudCA9IGFsbG9jX3BlcmNwdShpbnQpOworCWlmICh0aGlzLT5wY3B1X3JlZmNudCA9PSBOVUxMKSB7CisJCWtmcmVlKHRoaXMpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKIAljYWlmX2Fzc2VydChvZmZzZXRvZihzdHJ1Y3QgY2Zmcm1sLCBsYXllcikgPT0gMCk7CiAKIAltZW1zZXQodGhpcywgMCwgc2l6ZW9mKHN0cnVjdCBjZmxheWVyKSk7CkBAIC00OSw2ICs1NywxMyBAQAogCXJldHVybiAoc3RydWN0IGNmbGF5ZXIgKikgdGhpczsKIH0KIAordm9pZCBjZmZybWxfZnJlZShzdHJ1Y3QgY2ZsYXllciAqbGF5ZXIpCit7CisJc3RydWN0IGNmZnJtbCAqdGhpcyA9IGNvbnRhaW5lcl9vYmoobGF5ZXIpOworCWZyZWVfcGVyY3B1KHRoaXMtPnBjcHVfcmVmY250KTsKKwlrZnJlZShsYXllcik7Cit9CisKIHZvaWQgY2Zmcm1sX3NldF91cGxheWVyKHN0cnVjdCBjZmxheWVyICp0aGlzLCBzdHJ1Y3QgY2ZsYXllciAqdXApCiB7CiAJdGhpcy0+dXAgPSB1cDsKQEAgLTExMiw2ICsxMjcsMTMgQEAKIAkJY2Zwa3RfZGVzdHJveShwa3QpOwogCQlyZXR1cm4gLUVQUk9UTzsKIAl9CisKKwlpZiAobGF5ci0+dXAgPT0gTlVMTCkgeworCQlwcl9lcnIoIkxheXIgdXAgaXMgbWlzc2luZyFcbiIpOworCQljZnBrdF9kZXN0cm95KHBrdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCXJldHVybiBsYXlyLT51cC0+cmVjZWl2ZShsYXlyLT51cCwgcGt0KTsKIH0KIApAQCAtMTIwLDcgKzE0Miw2IEBACiAJaW50IHRtcDsKIAl1MTYgY2hrczsKIAl1MTYgbGVuOwotCWludCByZXQ7CiAJc3RydWN0IGNmZnJtbCAqdGhpcyA9IGNvbnRhaW5lcl9vYmoobGF5cik7CiAJaWYgKHRoaXMtPmRvZmNzKSB7CiAJCWNoa3MgPSBjZnBrdF9pdGVyYXRlKHBrdCwgY2Zmcm1sX2NoZWNrc3VtLCAweGZmZmYpOwpAQCAtMTM1LDE5ICsxNTYsNDQgQEAKIAljZnBrdF9pbmZvKHBrdCktPmhkcl9sZW4gKz0gMjsKIAlpZiAoY2Zwa3RfZXJyb25lb3VzKHBrdCkpIHsKIAkJcHJfZXJyKCJQYWNrZXQgaXMgZXJyb25lb3VzIVxuIik7CisJCWNmcGt0X2Rlc3Ryb3kocGt0KTsKIAkJcmV0dXJuIC1FUFJPVE87CiAJfQotCXJldCA9IGxheXItPmRuLT50cmFuc21pdChsYXlyLT5kbiwgcGt0KTsKLQlpZiAocmV0IDwgMCkgewotCQkvKiBSZW1vdmUgaGVhZGVyIG9uIGZhdWx0eSBwYWNrZXQuICovCi0JCWNmcGt0X2V4dHJfaGVhZChwa3QsICZ0bXAsIDIpOworCisJaWYgKGxheXItPmRuID09IE5VTEwpIHsKKwkJY2Zwa3RfZGVzdHJveShwa3QpOworCQlyZXR1cm4gLUVOT0RFVjsKKwogCX0KLQlyZXR1cm4gcmV0OworCXJldHVybiBsYXlyLT5kbi0+dHJhbnNtaXQobGF5ci0+ZG4sIHBrdCk7CiB9CiAKIHN0YXRpYyB2b2lkIGNmZnJtbF9jdHJsY21kKHN0cnVjdCBjZmxheWVyICpsYXlyLCBlbnVtIGNhaWZfY3RybGNtZCBjdHJsLAogCQkJCQlpbnQgcGh5aWQpCiB7Ci0JaWYgKGxheXItPnVwLT5jdHJsY21kKQorCWlmIChsYXlyLT51cCAmJiBsYXlyLT51cC0+Y3RybGNtZCkKIAkJbGF5ci0+dXAtPmN0cmxjbWQobGF5ci0+dXAsIGN0cmwsIGxheXItPmlkKTsKIH0KKwordm9pZCBjZmZybWxfcHV0KHN0cnVjdCBjZmxheWVyICpsYXlyKQoreworCXN0cnVjdCBjZmZybWwgKnRoaXMgPSBjb250YWluZXJfb2JqKGxheXIpOworCWlmIChsYXlyICE9IE5VTEwgJiYgdGhpcy0+cGNwdV9yZWZjbnQgIT0gTlVMTCkKKwkJaXJxc2FmZV9jcHVfZGVjKCp0aGlzLT5wY3B1X3JlZmNudCk7Cit9CisKK3ZvaWQgY2Zmcm1sX2hvbGQoc3RydWN0IGNmbGF5ZXIgKmxheXIpCit7CisJc3RydWN0IGNmZnJtbCAqdGhpcyA9IGNvbnRhaW5lcl9vYmoobGF5cik7CisJaWYgKGxheXIgIT0gTlVMTCAmJiB0aGlzLT5wY3B1X3JlZmNudCAhPSBOVUxMKQorCQlpcnFzYWZlX2NwdV9pbmMoKnRoaXMtPnBjcHVfcmVmY250KTsKK30KKworaW50IGNmZnJtbF9yZWZjbnRfcmVhZChzdHJ1Y3QgY2ZsYXllciAqbGF5cikKK3sKKwlpbnQgaSwgcmVmY250ID0gMDsKKwlzdHJ1Y3QgY2Zmcm1sICp0aGlzID0gY29udGFpbmVyX29iaihsYXlyKTsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkKKwkJcmVmY250ICs9ICpwZXJfY3B1X3B0cih0aGlzLT5wY3B1X3JlZmNudCwgaSk7CisJcmV0dXJuIHJlZmNudDsKK30KZGlmZiAtLWdpdCBhL25ldC9jYWlmL2NmbXV4bC5jIGIvbmV0L2NhaWYvY2ZtdXhsLmMKaW5kZXggMjRmMWZmYS4uM2E2NmI4YyAxMDA2NDQKLS0tIGEvbmV0L2NhaWYvY2ZtdXhsLmMKKysrIGIvbmV0L2NhaWYvY2ZtdXhsLmMKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcmN1bGlzdC5oPgogI2luY2x1ZGUgPG5ldC9jYWlmL2NmcGt0Lmg+CiAjaW5jbHVkZSA8bmV0L2NhaWYvY2ZtdXhsLmg+CiAjaW5jbHVkZSA8bmV0L2NhaWYvY2ZzcnZsLmg+CkBAIC02MSwxMTEgKzYyLDg4IEBACiAJcmV0dXJuICZ0aGlzLT5sYXllcjsKIH0KIAotaW50IGNmbXV4bF9zZXRfdXBsYXllcihzdHJ1Y3QgY2ZsYXllciAqbGF5ciwgc3RydWN0IGNmbGF5ZXIgKnVwLCB1OCBsaW5raWQpCi17Ci0Jc3RydWN0IGNmbXV4bCAqbXV4bCA9IGNvbnRhaW5lcl9vYmoobGF5cik7Ci0Jc3Bpbl9sb2NrKCZtdXhsLT5yZWNlaXZlX2xvY2spOwotCWNmc3J2bF9nZXQodXApOwotCWxpc3RfYWRkKCZ1cC0+bm9kZSwgJm11eGwtPnNydmxfbGlzdCk7Ci0Jc3Bpbl91bmxvY2soJm11eGwtPnJlY2VpdmVfbG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWJvb2wgY2ZtdXhsX2lzX3BoeV9pbnVzZShzdHJ1Y3QgY2ZsYXllciAqbGF5ciwgdTggcGh5aWQpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbm9kZTsKLQlzdHJ1Y3QgY2ZsYXllciAqbGF5ZXI7Ci0Jc3RydWN0IGNmbXV4bCAqbXV4bCA9IGNvbnRhaW5lcl9vYmoobGF5cik7Ci0JYm9vbCBtYXRjaCA9IGZhbHNlOwotCXNwaW5fbG9jaygmbXV4bC0+cmVjZWl2ZV9sb2NrKTsKLQotCWxpc3RfZm9yX2VhY2gobm9kZSwgJm11eGwtPnNydmxfbGlzdCkgewotCQlsYXllciA9IGxpc3RfZW50cnkobm9kZSwgc3RydWN0IGNmbGF5ZXIsIG5vZGUpOwotCQlpZiAoY2ZzcnZsX3BoeWlkX21hdGNoKGxheWVyLCBwaHlpZCkpIHsKLQkJCW1hdGNoID0gdHJ1ZTsKLQkJCWJyZWFrOwotCQl9Ci0KLQl9Ci0Jc3Bpbl91bmxvY2soJm11eGwtPnJlY2VpdmVfbG9jayk7Ci0JcmV0dXJuIG1hdGNoOwotfQotCi11OCBjZm11eGxfZ2V0X3BoeWlkKHN0cnVjdCBjZmxheWVyICpsYXlyLCB1OCBjaGFubmVsX2lkKQotewotCXN0cnVjdCBjZmxheWVyICp1cDsKLQlpbnQgcGh5aWQ7Ci0Jc3RydWN0IGNmbXV4bCAqbXV4bCA9IGNvbnRhaW5lcl9vYmoobGF5cik7Ci0Jc3Bpbl9sb2NrKCZtdXhsLT5yZWNlaXZlX2xvY2spOwotCXVwID0gZ2V0X3VwKG11eGwsIGNoYW5uZWxfaWQpOwotCWlmICh1cCAhPSBOVUxMKQotCQlwaHlpZCA9IGNmc3J2bF9nZXRwaHlpZCh1cCk7Ci0JZWxzZQotCQlwaHlpZCA9IDA7Ci0Jc3Bpbl91bmxvY2soJm11eGwtPnJlY2VpdmVfbG9jayk7Ci0JcmV0dXJuIHBoeWlkOwotfQotCiBpbnQgY2ZtdXhsX3NldF9kbmxheWVyKHN0cnVjdCBjZmxheWVyICpsYXlyLCBzdHJ1Y3QgY2ZsYXllciAqZG4sIHU4IHBoeWlkKQogewogCXN0cnVjdCBjZm11eGwgKm11eGwgPSAoc3RydWN0IGNmbXV4bCAqKSBsYXlyOwotCXNwaW5fbG9jaygmbXV4bC0+dHJhbnNtaXRfbG9jayk7Ci0JbGlzdF9hZGQoJmRuLT5ub2RlLCAmbXV4bC0+ZnJtbF9saXN0KTsKLQlzcGluX3VubG9jaygmbXV4bC0+dHJhbnNtaXRfbG9jayk7CisKKwlzcGluX2xvY2tfYmgoJm11eGwtPnRyYW5zbWl0X2xvY2spOworCWxpc3RfYWRkX3JjdSgmZG4tPm5vZGUsICZtdXhsLT5mcm1sX2xpc3QpOworCXNwaW5fdW5sb2NrX2JoKCZtdXhsLT50cmFuc21pdF9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBjZmxheWVyICpnZXRfZnJvbV9pZChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCB1MTYgaWQpCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbm9kZTsKLQlzdHJ1Y3QgY2ZsYXllciAqbGF5ZXI7Ci0JbGlzdF9mb3JfZWFjaChub2RlLCBsaXN0KSB7Ci0JCWxheWVyID0gbGlzdF9lbnRyeShub2RlLCBzdHJ1Y3QgY2ZsYXllciwgbm9kZSk7Ci0JCWlmIChsYXllci0+aWQgPT0gaWQpCi0JCQlyZXR1cm4gbGF5ZXI7CisJc3RydWN0IGNmbGF5ZXIgKmx5cjsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShseXIsIGxpc3QsIG5vZGUpIHsKKwkJaWYgKGx5ci0+aWQgPT0gaWQpCisJCQlyZXR1cm4gbHlyOwogCX0KKwogCXJldHVybiBOVUxMOwogfQogCitpbnQgY2ZtdXhsX3NldF91cGxheWVyKHN0cnVjdCBjZmxheWVyICpsYXlyLCBzdHJ1Y3QgY2ZsYXllciAqdXAsIHU4IGxpbmtpZCkKK3sKKwlzdHJ1Y3QgY2ZtdXhsICptdXhsID0gY29udGFpbmVyX29iaihsYXlyKTsKKwlzdHJ1Y3QgY2ZsYXllciAqb2xkOworCisJc3Bpbl9sb2NrX2JoKCZtdXhsLT5yZWNlaXZlX2xvY2spOworCisJLyogVHdvIGVudHJpZXMgd2l0aCBzYW1lIGlkIGlzIHdyb25nLCBzbyByZW1vdmUgb2xkIGxheWVyIGZyb20gbXV4ICovCisJb2xkID0gZ2V0X2Zyb21faWQoJm11eGwtPnNydmxfbGlzdCwgbGlua2lkKTsKKwlpZiAob2xkICE9IE5VTEwpCisJCWxpc3RfZGVsX3JjdSgmb2xkLT5ub2RlKTsKKworCWxpc3RfYWRkX3JjdSgmdXAtPm5vZGUsICZtdXhsLT5zcnZsX2xpc3QpOworCXNwaW5fdW5sb2NrX2JoKCZtdXhsLT5yZWNlaXZlX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKIHN0cnVjdCBjZmxheWVyICpjZm11eGxfcmVtb3ZlX2RubGF5ZXIoc3RydWN0IGNmbGF5ZXIgKmxheXIsIHU4IHBoeWlkKQogewogCXN0cnVjdCBjZm11eGwgKm11eGwgPSBjb250YWluZXJfb2JqKGxheXIpOwogCXN0cnVjdCBjZmxheWVyICpkbjsKLQlzcGluX2xvY2soJm11eGwtPnRyYW5zbWl0X2xvY2spOwotCW1lbXNldChtdXhsLT5kbl9jYWNoZSwgMCwgc2l6ZW9mKG11eGwtPmRuX2NhY2hlKSk7CisJaW50IGlkeCA9IHBoeWlkICUgRE5fQ0FDSEVfU0laRTsKKworCXNwaW5fbG9ja19iaCgmbXV4bC0+dHJhbnNtaXRfbG9jayk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKG11eGwtPmRuX2NhY2hlW2lkeF0sIE5VTEwpOwogCWRuID0gZ2V0X2Zyb21faWQoJm11eGwtPmZybWxfbGlzdCwgcGh5aWQpOwotCWlmIChkbiA9PSBOVUxMKSB7Ci0JCXNwaW5fdW5sb2NrKCZtdXhsLT50cmFuc21pdF9sb2NrKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWxpc3RfZGVsKCZkbi0+bm9kZSk7CisJaWYgKGRuID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJbGlzdF9kZWxfcmN1KCZkbi0+bm9kZSk7CiAJY2FpZl9hc3NlcnQoZG4gIT0gTlVMTCk7Ci0Jc3Bpbl91bmxvY2soJm11eGwtPnRyYW5zbWl0X2xvY2spOworb3V0OgorCXNwaW5fdW5sb2NrX2JoKCZtdXhsLT50cmFuc21pdF9sb2NrKTsKIAlyZXR1cm4gZG47CiB9CiAKLS8qIEludmFyaWFudDogbG9jayBpcyB0YWtlbiAqLwogc3RhdGljIHN0cnVjdCBjZmxheWVyICpnZXRfdXAoc3RydWN0IGNmbXV4bCAqbXV4bCwgdTE2IGlkKQogewogCXN0cnVjdCBjZmxheWVyICp1cDsKIAlpbnQgaWR4ID0gaWQgJSBVUF9DQUNIRV9TSVpFOwotCXVwID0gbXV4bC0+dXBfY2FjaGVbaWR4XTsKKwl1cCA9IHJjdV9kZXJlZmVyZW5jZShtdXhsLT51cF9jYWNoZVtpZHhdKTsKIAlpZiAodXAgPT0gTlVMTCB8fCB1cC0+aWQgIT0gaWQpIHsKKwkJc3Bpbl9sb2NrX2JoKCZtdXhsLT5yZWNlaXZlX2xvY2spOwogCQl1cCA9IGdldF9mcm9tX2lkKCZtdXhsLT5zcnZsX2xpc3QsIGlkKTsKLQkJbXV4bC0+dXBfY2FjaGVbaWR4XSA9IHVwOworCQlyY3VfYXNzaWduX3BvaW50ZXIobXV4bC0+dXBfY2FjaGVbaWR4XSwgdXApOworCQlzcGluX3VubG9ja19iaCgmbXV4bC0+cmVjZWl2ZV9sb2NrKTsKIAl9CiAJcmV0dXJuIHVwOwogfQogCi0vKiBJbnZhcmlhbnQ6IGxvY2sgaXMgdGFrZW4gKi8KIHN0YXRpYyBzdHJ1Y3QgY2ZsYXllciAqZ2V0X2RuKHN0cnVjdCBjZm11eGwgKm11eGwsIHN0cnVjdCBkZXZfaW5mbyAqZGV2X2luZm8pCiB7CiAJc3RydWN0IGNmbGF5ZXIgKmRuOwogCWludCBpZHggPSBkZXZfaW5mby0+aWQgJSBETl9DQUNIRV9TSVpFOwotCWRuID0gbXV4bC0+ZG5fY2FjaGVbaWR4XTsKKwlkbiA9IHJjdV9kZXJlZmVyZW5jZShtdXhsLT5kbl9jYWNoZVtpZHhdKTsKIAlpZiAoZG4gPT0gTlVMTCB8fCBkbi0+aWQgIT0gZGV2X2luZm8tPmlkKSB7CisJCXNwaW5fbG9ja19iaCgmbXV4bC0+dHJhbnNtaXRfbG9jayk7CiAJCWRuID0gZ2V0X2Zyb21faWQoJm11eGwtPmZybWxfbGlzdCwgZGV2X2luZm8tPmlkKTsKLQkJbXV4bC0+ZG5fY2FjaGVbaWR4XSA9IGRuOworCQlyY3VfYXNzaWduX3BvaW50ZXIobXV4bC0+ZG5fY2FjaGVbaWR4XSwgZG4pOworCQlzcGluX3VubG9ja19iaCgmbXV4bC0+dHJhbnNtaXRfbG9jayk7CiAJfQogCXJldHVybiBkbjsKIH0KQEAgLTE3NCwxNSArMTUyLDIyIEBACiB7CiAJc3RydWN0IGNmbGF5ZXIgKnVwOwogCXN0cnVjdCBjZm11eGwgKm11eGwgPSBjb250YWluZXJfb2JqKGxheXIpOwotCXNwaW5fbG9jaygmbXV4bC0+cmVjZWl2ZV9sb2NrKTsKLQl1cCA9IGdldF91cChtdXhsLCBpZCk7CisJaW50IGlkeCA9IGlkICUgVVBfQ0FDSEVfU0laRTsKKworCWlmIChpZCA9PSAwKSB7CisJCXByX3dhcm4oIlRyeWluZyB0byByZW1vdmUgY29udHJvbCBsYXllclxuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCXNwaW5fbG9ja19iaCgmbXV4bC0+cmVjZWl2ZV9sb2NrKTsKKwl1cCA9IGdldF9mcm9tX2lkKCZtdXhsLT5zcnZsX2xpc3QsIGlkKTsKIAlpZiAodXAgPT0gTlVMTCkKIAkJZ290byBvdXQ7Ci0JbWVtc2V0KG11eGwtPnVwX2NhY2hlLCAwLCBzaXplb2YobXV4bC0+dXBfY2FjaGUpKTsKLQlsaXN0X2RlbCgmdXAtPm5vZGUpOwotCWNmc3J2bF9wdXQodXApOworCisJcmN1X2Fzc2lnbl9wb2ludGVyKG11eGwtPnVwX2NhY2hlW2lkeF0sIE5VTEwpOworCWxpc3RfZGVsX3JjdSgmdXAtPm5vZGUpOwogb3V0OgotCXNwaW5fdW5sb2NrKCZtdXhsLT5yZWNlaXZlX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZtdXhsLT5yZWNlaXZlX2xvY2spOwogCXJldHVybiB1cDsKIH0KIApAQCAtMTk3LDU4ICsxODIsOTIgQEAKIAkJY2Zwa3RfZGVzdHJveShwa3QpOwogCQlyZXR1cm4gLUVQUk9UTzsKIAl9Ci0KLQlzcGluX2xvY2soJm11eGwtPnJlY2VpdmVfbG9jayk7CisJcmN1X3JlYWRfbG9jaygpOwogCXVwID0gZ2V0X3VwKG11eGwsIGlkKTsKLQlzcGluX3VubG9jaygmbXV4bC0+cmVjZWl2ZV9sb2NrKTsKKwogCWlmICh1cCA9PSBOVUxMKSB7Ci0JCXByX2luZm8oIlJlY2VpdmVkIGRhdGEgb24gdW5rbm93biBsaW5rIElEID0gJWQgKDB4JXgpIHVwID09IE5VTEwiLAotCQkJaWQsIGlkKTsKKwkJcHJfZGVidWcoIlJlY2VpdmVkIGRhdGEgb24gdW5rbm93biBsaW5rIElEID0gJWQgKDB4JXgpIgorCQkJIiB1cCA9PSBOVUxMIiwgaWQsIGlkKTsKIAkJY2Zwa3RfZGVzdHJveShwa3QpOwogCQkvKgogCQkgKiBEb24ndCByZXR1cm4gRVJST1IsIHNpbmNlIG1vZGVtIG1pc2JlaGF2ZXMgYW5kIHNlbmRzIG91dAogCQkgKiBmbG93IG9uIGJlZm9yZSBsaW5rc2V0dXAgcmVzcG9uc2UuCiAJCSAqLworCisJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm4gLyogQ0ZHTFVfRVBST1Q7ICovIDA7CiAJfQorCisJLyogV2UgY2FuJ3QgaG9sZCByY3VfbG9jayBkdXJpbmcgcmVjZWl2ZSwgc28gdGFrZSBhIHJlZiBjb3VudCBpbnN0ZWFkICovCiAJY2ZzcnZsX2dldCh1cCk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKIAlyZXQgPSB1cC0+cmVjZWl2ZSh1cCwgcGt0KTsKKwogCWNmc3J2bF9wdXQodXApOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgY2ZtdXhsX3RyYW5zbWl0KHN0cnVjdCBjZmxheWVyICpsYXlyLCBzdHJ1Y3QgY2Zwa3QgKnBrdCkKIHsKLQlpbnQgcmV0OwogCXN0cnVjdCBjZm11eGwgKm11eGwgPSBjb250YWluZXJfb2JqKGxheXIpOworCWludCBlcnI7CiAJdTggbGlua2lkOwogCXN0cnVjdCBjZmxheWVyICpkbjsKIAlzdHJ1Y3QgY2FpZl9wYXlsb2FkX2luZm8gKmluZm8gPSBjZnBrdF9pbmZvKHBrdCk7Ci0JZG4gPSBnZXRfZG4obXV4bCwgY2Zwa3RfaW5mbyhwa3QpLT5kZXZfaW5mbyk7CisJQlVHX09OKCFpbmZvKTsKKworCXJjdV9yZWFkX2xvY2soKTsKKworCWRuID0gZ2V0X2RuKG11eGwsIGluZm8tPmRldl9pbmZvKTsKIAlpZiAoZG4gPT0gTlVMTCkgewotCQlwcl93YXJuKCJTZW5kIGRhdGEgb24gdW5rbm93biBwaHkgSUQgPSAlZCAoMHgleClcbiIsCisJCXByX2RlYnVnKCJTZW5kIGRhdGEgb24gdW5rbm93biBwaHkgSUQgPSAlZCAoMHgleClcbiIsCiAJCQlpbmZvLT5kZXZfaW5mby0+aWQsIGluZm8tPmRldl9pbmZvLT5pZCk7CisJCXJjdV9yZWFkX3VubG9jaygpOworCQljZnBrdF9kZXN0cm95KHBrdCk7CiAJCXJldHVybiAtRU5PVENPTk47CiAJfQorCiAJaW5mby0+aGRyX2xlbiArPSAxOwogCWxpbmtpZCA9IGluZm8tPmNoYW5uZWxfaWQ7CiAJY2Zwa3RfYWRkX2hlYWQocGt0LCAmbGlua2lkLCAxKTsKLQlyZXQgPSBkbi0+dHJhbnNtaXQoZG4sIHBrdCk7Ci0JLyogUmVtb3ZlIE1VWCBwcm90b2NvbCBoZWFkZXIgdXBvbiBlcnJvci4gKi8KLQlpZiAocmV0IDwgMCkKLQkJY2Zwa3RfZXh0cl9oZWFkKHBrdCwgJmxpbmtpZCwgMSk7Ci0JcmV0dXJuIHJldDsKKworCS8qIFdlIGNhbid0IGhvbGQgcmN1X2xvY2sgZHVyaW5nIHJlY2VpdmUsIHNvIHRha2UgYSByZWYgY291bnQgaW5zdGVhZCAqLworCWNmZnJtbF9ob2xkKGRuKTsKKworCXJjdV9yZWFkX3VubG9jaygpOworCisJZXJyID0gZG4tPnRyYW5zbWl0KGRuLCBwa3QpOworCisJY2Zmcm1sX3B1dChkbik7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgY2ZtdXhsX2N0cmxjbWQoc3RydWN0IGNmbGF5ZXIgKmxheXIsIGVudW0gY2FpZl9jdHJsY21kIGN0cmwsCiAJCQkJaW50IHBoeWlkKQogewogCXN0cnVjdCBjZm11eGwgKm11eGwgPSBjb250YWluZXJfb2JqKGxheXIpOwotCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGUsICpuZXh0OwogCXN0cnVjdCBjZmxheWVyICpsYXllcjsKLQlsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgJm11eGwtPnNydmxfbGlzdCkgewotCQlsYXllciA9IGxpc3RfZW50cnkobm9kZSwgc3RydWN0IGNmbGF5ZXIsIG5vZGUpOwotCQlpZiAoY2ZzcnZsX3BoeWlkX21hdGNoKGxheWVyLCBwaHlpZCkpCisJaW50IGlkeDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShsYXllciwgJm11eGwtPnNydmxfbGlzdCwgbm9kZSkgeworCisJCWlmIChjZnNydmxfcGh5aWRfbWF0Y2gobGF5ZXIsIHBoeWlkKSAmJiBsYXllci0+Y3RybGNtZCkgeworCisJCQlpZiAoKGN0cmwgPT0gX0NBSUZfQ1RSTENNRF9QSFlJRl9GTE9XX09GRl9JTkQgfHwKKwkJCQljdHJsID09IENBSUZfQ1RSTENNRF9SRU1PVEVfU0hVVERPV05fSU5EKSAmJgorCQkJCQlsYXllci0+aWQgIT0gMCkgeworCisJCQkJaWR4ID0gbGF5ZXItPmlkICUgVVBfQ0FDSEVfU0laRTsKKwkJCQlzcGluX2xvY2tfYmgoJm11eGwtPnJlY2VpdmVfbG9jayk7CisJCQkJcmN1X2Fzc2lnbl9wb2ludGVyKG11eGwtPnVwX2NhY2hlW2lkeF0sIE5VTEwpOworCQkJCWxpc3RfZGVsX3JjdSgmbGF5ZXItPm5vZGUpOworCQkJCXNwaW5fdW5sb2NrX2JoKCZtdXhsLT5yZWNlaXZlX2xvY2spOworCQkJfQorCQkJLyogTk9URTogY3RybGNtZCBpcyBub3QgYWxsb3dlZCB0byBibG9jayAqLwogCQkJbGF5ZXItPmN0cmxjbWQobGF5ZXIsIGN0cmwsIHBoeWlkKTsKKwkJfQogCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9jYWlmL2NmcGt0X3NrYnVmZi5jIGIvbmV0L2NhaWYvY2Zwa3Rfc2tidWZmLmMKaW5kZXggZDdlODY1ZS4uNzVkNGJmYSAxMDA2NDQKLS0tIGEvbmV0L2NhaWYvY2Zwa3Rfc2tidWZmLmMKKysrIGIvbmV0L2NhaWYvY2Zwa3Rfc2tidWZmLmMKQEAgLTQyLDIyICs0MiwyMiBAQAogCWJvb2wgZXJyb25vdXM7CiB9OwogCi1pbmxpbmUgc3RydWN0IGNmcGt0X3ByaXZfZGF0YSAqY2Zwa3RfcHJpdihzdHJ1Y3QgY2Zwa3QgKnBrdCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNmcGt0X3ByaXZfZGF0YSAqY2Zwa3RfcHJpdihzdHJ1Y3QgY2Zwa3QgKnBrdCkKIHsKIAlyZXR1cm4gKHN0cnVjdCBjZnBrdF9wcml2X2RhdGEgKikgcGt0LT5za2IuY2I7CiB9CiAKLWlubGluZSBib29sIGlzX2Vycm9ub3VzKHN0cnVjdCBjZnBrdCAqcGt0KQorc3RhdGljIGlubGluZSBib29sIGlzX2Vycm9ub3VzKHN0cnVjdCBjZnBrdCAqcGt0KQogewogCXJldHVybiBjZnBrdF9wcml2KHBrdCktPmVycm9ub3VzOwogfQogCi1pbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnBrdF90b19za2Ioc3RydWN0IGNmcGt0ICpwa3QpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpwa3RfdG9fc2tiKHN0cnVjdCBjZnBrdCAqcGt0KQogewogCXJldHVybiAmcGt0LT5za2I7CiB9CiAKLWlubGluZSBzdHJ1Y3QgY2Zwa3QgKnNrYl90b19wa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNmcGt0ICpza2JfdG9fcGt0KHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJcmV0dXJuIChzdHJ1Y3QgY2Zwa3QgKikgc2tiOwogfQpAQCAtOTcsMjEgKzk3LDIwIEBACiB7CiAJcmV0dXJuIGNmcGt0X2NyZWF0ZV9wZngobGVuICsgUEtUX1BPU1RGSVgsIFBLVF9QUkVGSVgpOwogfQotRVhQT1JUX1NZTUJPTChjZnBrdF9jcmVhdGUpOwogCiB2b2lkIGNmcGt0X2Rlc3Ryb3koc3RydWN0IGNmcGt0ICpwa3QpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdF90b19za2IocGt0KTsKIAlrZnJlZV9za2Ioc2tiKTsKIH0KLUVYUE9SVF9TWU1CT0woY2Zwa3RfZGVzdHJveSk7CisKIAogaW5saW5lIGJvb2wgY2Zwa3RfbW9yZShzdHJ1Y3QgY2Zwa3QgKnBrdCkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcGt0X3RvX3NrYihwa3QpOwogCXJldHVybiBza2ItPmxlbiA+IDA7CiB9Ci1FWFBPUlRfU1lNQk9MKGNmcGt0X21vcmUpOworCiAKIGludCBjZnBrdF9wZWVrX2hlYWQoc3RydWN0IGNmcGt0ICpwa3QsIHZvaWQgKmRhdGEsIHUxNiBsZW4pCiB7CkBAIC0xMjMsNyArMTIyLDYgQEAKIAlyZXR1cm4gIWNmcGt0X2V4dHJfaGVhZChwa3QsIGRhdGEsIGxlbikgJiYKIAkgICAgIWNmcGt0X2FkZF9oZWFkKHBrdCwgZGF0YSwgbGVuKTsKIH0KLUVYUE9SVF9TWU1CT0woY2Zwa3RfcGVla19oZWFkKTsKIAogaW50IGNmcGt0X2V4dHJfaGVhZChzdHJ1Y3QgY2Zwa3QgKnBrdCwgdm9pZCAqZGF0YSwgdTE2IGxlbikKIHsKQEAgLTE0OCw3ICsxNDYsNiBAQAogCW1lbWNweShkYXRhLCBmcm9tLCBsZW4pOwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChjZnBrdF9leHRyX2hlYWQpOwogCiBpbnQgY2Zwa3RfZXh0cl90cmFpbChzdHJ1Y3QgY2Zwa3QgKnBrdCwgdm9pZCAqZHRhLCB1MTYgbGVuKQogewpAQCAtMTcxLDEzICsxNjgsMTMgQEAKIAltZW1jcHkoZGF0YSwgZnJvbSwgbGVuKTsKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woY2Zwa3RfZXh0cl90cmFpbCk7CisKIAogaW50IGNmcGt0X3BhZF90cmFpbChzdHJ1Y3QgY2Zwa3QgKnBrdCwgdTE2IGxlbikKIHsKIAlyZXR1cm4gY2Zwa3RfYWRkX2JvZHkocGt0LCBOVUxMLCBsZW4pOwogfQotRVhQT1JUX1NZTUJPTChjZnBrdF9wYWRfdHJhaWwpOworCiAKIGludCBjZnBrdF9hZGRfYm9keShzdHJ1Y3QgY2Zwa3QgKnBrdCwgY29uc3Qgdm9pZCAqZGF0YSwgdTE2IGxlbikKIHsKQEAgLTIyNiwxMyArMjIzLDExIEBACiAJCW1lbWNweSh0bywgZGF0YSwgbGVuKTsKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woY2Zwa3RfYWRkX2JvZHkpOwogCiBpbmxpbmUgaW50IGNmcGt0X2FkZGJkeShzdHJ1Y3QgY2Zwa3QgKnBrdCwgdTggZGF0YSkKIHsKIAlyZXR1cm4gY2Zwa3RfYWRkX2JvZHkocGt0LCAmZGF0YSwgMSk7CiB9Ci1FWFBPUlRfU1lNQk9MKGNmcGt0X2FkZGJkeSk7CiAKIGludCBjZnBrdF9hZGRfaGVhZChzdHJ1Y3QgY2Zwa3QgKnBrdCwgY29uc3Qgdm9pZCAqZGF0YTIsIHUxNiBsZW4pCiB7CkBAIC0yNTksMjAgKzI1NCwyMCBAQAogCW1lbWNweSh0bywgZGF0YSwgbGVuKTsKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woY2Zwa3RfYWRkX2hlYWQpOworCiAKIGlubGluZSBpbnQgY2Zwa3RfYWRkX3RyYWlsKHN0cnVjdCBjZnBrdCAqcGt0LCBjb25zdCB2b2lkICpkYXRhLCB1MTYgbGVuKQogewogCXJldHVybiBjZnBrdF9hZGRfYm9keShwa3QsIGRhdGEsIGxlbik7CiB9Ci1FWFBPUlRfU1lNQk9MKGNmcGt0X2FkZF90cmFpbCk7CisKIAogaW5saW5lIHUxNiBjZnBrdF9nZXRsZW4oc3RydWN0IGNmcGt0ICpwa3QpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdF90b19za2IocGt0KTsKIAlyZXR1cm4gc2tiLT5sZW47CiB9Ci1FWFBPUlRfU1lNQk9MKGNmcGt0X2dldGxlbik7CisKIAogaW5saW5lIHUxNiBjZnBrdF9pdGVyYXRlKHN0cnVjdCBjZnBrdCAqcGt0LAogCQkJICAgIHUxNiAoKml0ZXJfZnVuYykodTE2LCB2b2lkICosIHUxNiksCkBAIC0yOTAsNyArMjg1LDcgQEAKIAl9CiAJcmV0dXJuIGl0ZXJfZnVuYyhkYXRhLCBwa3QtPnNrYi5kYXRhLCBjZnBrdF9nZXRsZW4ocGt0KSk7CiB9Ci1FWFBPUlRfU1lNQk9MKGNmcGt0X2l0ZXJhdGUpOworCiAKIGludCBjZnBrdF9zZXRsZW4oc3RydWN0IGNmcGt0ICpwa3QsIHUxNiBsZW4pCiB7CkBAIC0zMTUsMTggKzMxMCw2IEBACiAKIAlyZXR1cm4gY2Zwa3RfZ2V0bGVuKHBrdCk7CiB9Ci1FWFBPUlRfU1lNQk9MKGNmcGt0X3NldGxlbik7Ci0KLXN0cnVjdCBjZnBrdCAqY2Zwa3RfY3JlYXRlX3VwbGluayhjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQotewotCXN0cnVjdCBjZnBrdCAqcGt0ID0gY2Zwa3RfY3JlYXRlX3BmeChsZW4gKyBQS1RfUE9TVEZJWCwgUEtUX1BSRUZJWCk7Ci0JaWYgKCFwa3QpCi0JCXJldHVybiBOVUxMOwotCWlmICh1bmxpa2VseShkYXRhICE9IE5VTEwpKQotCQljZnBrdF9hZGRfYm9keShwa3QsIGRhdGEsIGxlbik7Ci0JcmV0dXJuIHBrdDsKLX0KLUVYUE9SVF9TWU1CT0woY2Zwa3RfY3JlYXRlX3VwbGluayk7CiAKIHN0cnVjdCBjZnBrdCAqY2Zwa3RfYXBwZW5kKHN0cnVjdCBjZnBrdCAqZHN0cGt0LAogCQkJICAgICBzdHJ1Y3QgY2Zwa3QgKmFkZHBrdCwKQEAgLTM2OCw3ICszNTEsNiBAQAogCWRzdC0+bGVuICs9IGFkZGxlbjsKIAlyZXR1cm4gc2tiX3RvX3BrdChkc3QpOwogfQotRVhQT1JUX1NZTUJPTChjZnBrdF9hcHBlbmQpOwogCiBzdHJ1Y3QgY2Zwa3QgKmNmcGt0X3NwbGl0KHN0cnVjdCBjZnBrdCAqcGt0LCB1MTYgcG9zKQogewpAQCAtNDA2LDE3NCArMzg4LDEzIEBACiAJc2tiMi0+bGVuICs9IGxlbjJuZDsKIAlyZXR1cm4gc2tiX3RvX3BrdChza2IyKTsKIH0KLUVYUE9SVF9TWU1CT0woY2Zwa3Rfc3BsaXQpOwogCi1jaGFyICpjZnBrdF9sb2dfcGt0KHN0cnVjdCBjZnBrdCAqcGt0LCBjaGFyICpidWYsIGludCBidWZsZW4pCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdF90b19za2IocGt0KTsKLQljaGFyICpwID0gYnVmOwotCWludCBpOwotCi0JLyoKLQkgKiBTYW5pdHkgY2hlY2sgYnVmZmVyIGxlbmd0aCwgaXQgbmVlZHMgdG8gYmUgYXQgbGVhc3QgYXMgbGFyZ2UgYXMKLQkgKiB0aGUgaGVhZGVyIGluZm86IH49NTArIGJ5dGVzCi0JICovCi0JaWYgKGJ1ZmxlbiA8IDUwKQotCQlyZXR1cm4gTlVMTDsKLQotCXNucHJpbnRmKGJ1ZiwgYnVmbGVuLCAiJXM6IHBrdDolcCBsZW46JWxkKCVsZCslbGQpIHslbGQsJWxkfSBkYXRhOiBbIiwKLQkJaXNfZXJyb25vdXMocGt0KSA/ICJFUlJPTk9VUy1TS0IiIDoKLQkJIChza2ItPmRhdGFfbGVuICE9IDAgPyAiQ09NUExFWC1TS0IiIDogIlNLQiIpLAotCQkgc2tiLAotCQkgKGxvbmcpIHNrYi0+bGVuLAotCQkgKGxvbmcpIChza2JfdGFpbF9wb2ludGVyKHNrYikgLSBza2ItPmRhdGEpLAotCQkgKGxvbmcpIHNrYi0+ZGF0YV9sZW4sCi0JCSAobG9uZykgKHNrYi0+ZGF0YSAtIHNrYi0+aGVhZCksCi0JCSAobG9uZykgKHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtIHNrYi0+aGVhZCkpOwotCXAgPSBidWYgKyBzdHJsZW4oYnVmKTsKLQotCWZvciAoaSA9IDA7IGkgPCBza2JfdGFpbF9wb2ludGVyKHNrYikgLSBza2ItPmRhdGEgJiYgaSA8IDMwMDsgaSsrKSB7Ci0JCWlmIChwID4gYnVmICsgYnVmbGVuIC0gMTApIHsKLQkJCXNwcmludGYocCwgIi4uLiIpOwotCQkJcCA9IGJ1ZiArIHN0cmxlbihidWYpOwotCQkJYnJlYWs7Ci0JCX0KLQkJc3ByaW50ZihwLCAiJTAyeCwiLCBza2ItPmRhdGFbaV0pOwotCQlwID0gYnVmICsgc3RybGVuKGJ1Zik7Ci0JfQotCXNwcmludGYocCwgIl1cbiIpOwotCXJldHVybiBidWY7Ci19Ci1FWFBPUlRfU1lNQk9MKGNmcGt0X2xvZ19wa3QpOwotCi1pbnQgY2Zwa3RfcmF3X2FwcGVuZChzdHJ1Y3QgY2Zwa3QgKnBrdCwgdm9pZCAqKmJ1ZiwgdW5zaWduZWQgaW50IGJ1ZmxlbikKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcGt0X3RvX3NrYihwa3QpOwotCXN0cnVjdCBza19idWZmICpsYXN0c2tiOwotCi0JY2FpZl9hc3NlcnQoYnVmICE9IE5VTEwpOwotCWlmICh1bmxpa2VseShpc19lcnJvbm91cyhwa3QpKSkKLQkJcmV0dXJuIC1FUFJPVE87Ci0JLyogTWFrZSBzdXJlIFNLQiBpcyB3cml0YWJsZSAqLwotCWlmICh1bmxpa2VseShza2JfY293X2RhdGEoc2tiLCAwLCAmbGFzdHNrYikgPCAwKSkgewotCQlQS1RfRVJST1IocGt0LCAic2tiX2Nvd19kYXRhIGZhaWxlZFxuIik7Ci0JCXJldHVybiAtRVBST1RPOwotCX0KLQotCWlmICh1bmxpa2VseShza2JfbGluZWFyaXplKHNrYikgIT0gMCkpIHsKLQkJUEtUX0VSUk9SKHBrdCwgImxpbmVhcml6ZSBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLUVQUk9UTzsKLQl9Ci0KLQlpZiAodW5saWtlbHkoc2tiX3RhaWxyb29tKHNrYikgPCBidWZsZW4pKSB7Ci0JCVBLVF9FUlJPUihwa3QsICJidWZmZXIgdG9vIHNob3J0IC0gZmFpbGVkXG4iKTsKLQkJcmV0dXJuIC1FUFJPVE87Ci0JfQotCi0JKmJ1ZiA9IHNrYl9wdXQoc2tiLCBidWZsZW4pOwotCXJldHVybiAxOwotfQotRVhQT1JUX1NZTUJPTChjZnBrdF9yYXdfYXBwZW5kKTsKLQotaW50IGNmcGt0X3Jhd19leHRyYWN0KHN0cnVjdCBjZnBrdCAqcGt0LCB2b2lkICoqYnVmLCB1bnNpZ25lZCBpbnQgYnVmbGVuKQotewotCXN0cnVjdCBza19idWZmICpza2IgPSBwa3RfdG9fc2tiKHBrdCk7Ci0KLQljYWlmX2Fzc2VydChidWYgIT0gTlVMTCk7Ci0JaWYgKHVubGlrZWx5KGlzX2Vycm9ub3VzKHBrdCkpKQotCQlyZXR1cm4gLUVQUk9UTzsKLQotCWlmICh1bmxpa2VseShidWZsZW4gPiBza2ItPmxlbikpIHsKLQkJUEtUX0VSUk9SKHBrdCwgImJ1ZmxlbiB0b28gbGFyZ2UgLSBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLUVQUk9UTzsKLQl9Ci0KLQlpZiAodW5saWtlbHkoYnVmbGVuID4gc2tiX2hlYWRsZW4oc2tiKSkpIHsKLQkJaWYgKHVubGlrZWx5KHNrYl9saW5lYXJpemUoc2tiKSAhPSAwKSkgewotCQkJUEtUX0VSUk9SKHBrdCwgImxpbmVhcml6ZSBmYWlsZWRcbiIpOwotCQkJcmV0dXJuIC1FUFJPVE87Ci0JCX0KLQl9Ci0KLQkqYnVmID0gc2tiLT5kYXRhOwotCXNrYl9wdWxsKHNrYiwgYnVmbGVuKTsKLQotCXJldHVybiAxOwotfQotRVhQT1JUX1NZTUJPTChjZnBrdF9yYXdfZXh0cmFjdCk7Ci0KLWlubGluZSBib29sIGNmcGt0X2Vycm9uZW91cyhzdHJ1Y3QgY2Zwa3QgKnBrdCkKK2Jvb2wgY2Zwa3RfZXJyb25lb3VzKHN0cnVjdCBjZnBrdCAqcGt0KQogewogCXJldHVybiBjZnBrdF9wcml2KHBrdCktPmVycm9ub3VzOwogfQotRVhQT1JUX1NZTUJPTChjZnBrdF9lcnJvbmVvdXMpOwotCi1zdHJ1Y3QgY2Zwa3RxICpjZnBrdHFfY3JlYXRlKHZvaWQpCi17Ci0Jc3RydWN0IGNmcGt0cSAqcSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjZnBrdHEpLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXEpCi0JCXJldHVybiBOVUxMOwotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnEtPmhlYWQpOwotCWF0b21pY19zZXQoJnEtPmNvdW50LCAwKTsKLQlzcGluX2xvY2tfaW5pdCgmcS0+bG9jayk7Ci0JcmV0dXJuIHE7Ci19Ci1FWFBPUlRfU1lNQk9MKGNmcGt0cV9jcmVhdGUpOwotCi12b2lkIGNmcGt0X3F1ZXVlKHN0cnVjdCBjZnBrdHEgKnBrdHEsIHN0cnVjdCBjZnBrdCAqcGt0LCB1bnNpZ25lZCBzaG9ydCBwcmlvKQotewotCWF0b21pY19pbmMoJnBrdHEtPmNvdW50KTsKLQlzcGluX2xvY2soJnBrdHEtPmxvY2spOwotCXNrYl9xdWV1ZV90YWlsKCZwa3RxLT5oZWFkLCBwa3RfdG9fc2tiKHBrdCkpOwotCXNwaW5fdW5sb2NrKCZwa3RxLT5sb2NrKTsKLQotfQotRVhQT1JUX1NZTUJPTChjZnBrdF9xdWV1ZSk7Ci0KLXN0cnVjdCBjZnBrdCAqY2Zwa3RfcXBlZWsoc3RydWN0IGNmcGt0cSAqcGt0cSkKLXsKLQlzdHJ1Y3QgY2Zwa3QgKnRtcDsKLQlzcGluX2xvY2soJnBrdHEtPmxvY2spOwotCXRtcCA9IHNrYl90b19wa3Qoc2tiX3BlZWsoJnBrdHEtPmhlYWQpKTsKLQlzcGluX3VubG9jaygmcGt0cS0+bG9jayk7Ci0JcmV0dXJuIHRtcDsKLX0KLUVYUE9SVF9TWU1CT0woY2Zwa3RfcXBlZWspOwotCi1zdHJ1Y3QgY2Zwa3QgKmNmcGt0X2RlcXVldWUoc3RydWN0IGNmcGt0cSAqcGt0cSkKLXsKLQlzdHJ1Y3QgY2Zwa3QgKnBrdDsKLQlzcGluX2xvY2soJnBrdHEtPmxvY2spOwotCXBrdCA9IHNrYl90b19wa3Qoc2tiX2RlcXVldWUoJnBrdHEtPmhlYWQpKTsKLQlpZiAocGt0KSB7Ci0JCWF0b21pY19kZWMoJnBrdHEtPmNvdW50KTsKLQkJY2FpZl9hc3NlcnQoYXRvbWljX3JlYWQoJnBrdHEtPmNvdW50KSA+PSAwKTsKLQl9Ci0Jc3Bpbl91bmxvY2soJnBrdHEtPmxvY2spOwotCXJldHVybiBwa3Q7Ci19Ci1FWFBPUlRfU1lNQk9MKGNmcGt0X2RlcXVldWUpOwotCi1pbnQgY2Zwa3RfcWNvdW50KHN0cnVjdCBjZnBrdHEgKnBrdHEpCi17Ci0JcmV0dXJuIGF0b21pY19yZWFkKCZwa3RxLT5jb3VudCk7Ci19Ci1FWFBPUlRfU1lNQk9MKGNmcGt0X3Fjb3VudCk7Ci0KLXN0cnVjdCBjZnBrdCAqY2Zwa3RfY2xvbmVfcmVsZWFzZShzdHJ1Y3QgY2Zwa3QgKnBrdCkKLXsKLQlzdHJ1Y3QgY2Zwa3QgKmNsb25lOwotCWNsb25lICA9IHNrYl90b19wa3Qoc2tiX2Nsb25lKHBrdF90b19za2IocGt0KSwgR0ZQX0FUT01JQykpOwotCS8qIEZyZWUgb3JpZ2luYWwgcGFja2V0LiAqLwotCWNmcGt0X2Rlc3Ryb3kocGt0KTsKLQlpZiAoIWNsb25lKQotCQlyZXR1cm4gTlVMTDsKLQlyZXR1cm4gY2xvbmU7Ci19Ci1FWFBPUlRfU1lNQk9MKGNmcGt0X2Nsb25lX3JlbGVhc2UpOwogCiBzdHJ1Y3QgY2FpZl9wYXlsb2FkX2luZm8gKmNmcGt0X2luZm8oc3RydWN0IGNmcGt0ICpwa3QpCiB7CiAJcmV0dXJuIChzdHJ1Y3QgY2FpZl9wYXlsb2FkX2luZm8gKikmcGt0X3RvX3NrYihwa3QpLT5jYjsKIH0KLUVYUE9SVF9TWU1CT0woY2Zwa3RfaW5mbyk7CmRpZmYgLS1naXQgYS9uZXQvY2FpZi9jZnJmbWwuYyBiL25ldC9jYWlmL2NmcmZtbC5jCmluZGV4IGUyZmI1ZmEuLjBkZWFiYjQgMTAwNjQ0Ci0tLSBhL25ldC9jYWlmL2NmcmZtbC5jCisrKyBiL25ldC9jYWlmL2NmcmZtbC5jCkBAIC0zMSw5ICszMSw5IEBACiAJc3BpbmxvY2tfdCBzeW5jOwogfTsKIAotc3RhdGljIHZvaWQgY2ZyZm1sX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCitzdGF0aWMgdm9pZCBjZnJmbWxfcmVsZWFzZShzdHJ1Y3QgY2ZsYXllciAqbGF5ZXIpCiB7Ci0Jc3RydWN0IGNmc3J2bCAqc3J2bCA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgY2ZzcnZsLCByZWYpOworCXN0cnVjdCBjZnNydmwgKnNydmwgPSBjb250YWluZXJfb2YobGF5ZXIsIHN0cnVjdCBjZnNydmwsIGxheWVyKTsKIAlzdHJ1Y3QgY2ZyZm1sICpyZm1sID0gY29udGFpbmVyX29iaigmc3J2bC0+bGF5ZXIpOwogCiAJaWYgKHJmbWwtPmluY29tcGxldGVfZnJtKQpkaWZmIC0tZ2l0IGEvbmV0L2NhaWYvY2ZzZXJsLmMgYi9uZXQvY2FpZi9jZnNlcmwuYwppbmRleCA4MzAzZmUzLi4yNzE1Yzg0IDEwMDY0NAotLS0gYS9uZXQvY2FpZi9jZnNlcmwuYworKysgYi9uZXQvY2FpZi9jZnNlcmwuYwpAQCAtMTc5LDE1ICsxNzksMTAgQEAKIHN0YXRpYyBpbnQgY2ZzZXJsX3RyYW5zbWl0KHN0cnVjdCBjZmxheWVyICpsYXllciwgc3RydWN0IGNmcGt0ICpuZXdwa3QpCiB7CiAJc3RydWN0IGNmc2VybCAqbGF5ciA9IGNvbnRhaW5lcl9vYmoobGF5ZXIpOwotCWludCByZXQ7CiAJdTggdG1wOCA9IENGU0VSTF9TVFg7CiAJaWYgKGxheXItPnVzZXN0eCkKIAkJY2Zwa3RfYWRkX2hlYWQobmV3cGt0LCAmdG1wOCwgMSk7Ci0JcmV0ID0gbGF5ZXItPmRuLT50cmFuc21pdChsYXllci0+ZG4sIG5ld3BrdCk7Ci0JaWYgKHJldCA8IDApCi0JCWNmcGt0X2V4dHJfaGVhZChuZXdwa3QsICZ0bXA4LCAxKTsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIGxheWVyLT5kbi0+dHJhbnNtaXQobGF5ZXItPmRuLCBuZXdwa3QpOwogfQogCiBzdGF0aWMgdm9pZCBjZnNlcmxfY3RybGNtZChzdHJ1Y3QgY2ZsYXllciAqbGF5ciwgZW51bSBjYWlmX2N0cmxjbWQgY3RybCwKZGlmZiAtLWdpdCBhL25ldC9jYWlmL2Nmc3J2bC5jIGIvbmV0L2NhaWYvY2ZzcnZsLmMKaW5kZXggYWI1ZTU0Mi4uNTM1YTFlNyAxMDA2NDQKLS0tIGEvbmV0L2NhaWYvY2ZzcnZsLmMKKysrIGIvbmV0L2NhaWYvY2ZzcnZsLmMKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPG5ldC9jYWlmL2NhaWZfbGF5ZXIuaD4KICNpbmNsdWRlIDxuZXQvY2FpZi9jZnNydmwuaD4KICNpbmNsdWRlIDxuZXQvY2FpZi9jZnBrdC5oPgpAQCAtMjcsOCArMjgsOCBAQAogewogCXN0cnVjdCBjZnNydmwgKnNlcnZpY2UgPSBjb250YWluZXJfb2JqKGxheXIpOwogCi0JY2FpZl9hc3NlcnQobGF5ci0+dXAgIT0gTlVMTCk7Ci0JY2FpZl9hc3NlcnQobGF5ci0+dXAtPmN0cmxjbWQgIT0gTlVMTCk7CisJaWYgKGxheXItPnVwID09IE5VTEwgfHwgbGF5ci0+dXAtPmN0cmxjbWQgPT0gTlVMTCkKKwkJcmV0dXJuOwogCiAJc3dpdGNoIChjdHJsKSB7CiAJY2FzZSBDQUlGX0NUUkxDTURfSU5JVF9SU1A6CkBAIC0xNTEsMTQgKzE1Miw5IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXZvaWQgY2ZzZXJ2bF9kZXN0cm95KHN0cnVjdCBjZmxheWVyICpsYXllcikKK3N0YXRpYyB2b2lkIGNmc3J2bF9yZWxlYXNlKHN0cnVjdCBjZmxheWVyICpsYXllcikKIHsKLQlrZnJlZShsYXllcik7Ci19Ci0KLXZvaWQgY2ZzcnZsX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCi17Ci0Jc3RydWN0IGNmc3J2bCAqc2VydmljZSA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgY2ZzcnZsLCByZWYpOworCXN0cnVjdCBjZnNydmwgKnNlcnZpY2UgPSBjb250YWluZXJfb2YobGF5ZXIsIHN0cnVjdCBjZnNydmwsIGxheWVyKTsKIAlrZnJlZShzZXJ2aWNlKTsKIH0KIApAQCAtMTc4LDEwICsxNzQsOCBAQAogCXNlcnZpY2UtPmRldl9pbmZvID0gKmRldl9pbmZvOwogCXNlcnZpY2UtPnN1cHBvcnRzX2Zsb3djdHJsID0gc3VwcG9ydHNfZmxvd2N0cmw7CiAJc2VydmljZS0+cmVsZWFzZSA9IGNmc3J2bF9yZWxlYXNlOwotCWtyZWZfaW5pdCgmc2VydmljZS0+cmVmKTsKIH0KIAotCiBib29sIGNmc3J2bF9yZWFkeShzdHJ1Y3QgY2ZzcnZsICpzZXJ2aWNlLCBpbnQgKmVycikKIHsKIAlpZiAoc2VydmljZS0+b3BlbiAmJiBzZXJ2aWNlLT5tb2RlbV9mbG93X29uICYmIHNlcnZpY2UtPnBoeV9mbG93X29uKQpAQCAtMTk0LDYgKzE4OCw3IEBACiAJKmVyciA9IC1FQUdBSU47CiAJcmV0dXJuIGZhbHNlOwogfQorCiB1OCBjZnNydmxfZ2V0cGh5aWQoc3RydWN0IGNmbGF5ZXIgKmxheWVyKQogewogCXN0cnVjdCBjZnNydmwgKnNlcnZsID0gY29udGFpbmVyX29iaihsYXllcik7CkBAIC0yMDUsMyArMjAwLDI2IEBACiAJc3RydWN0IGNmc3J2bCAqc2VydmwgPSBjb250YWluZXJfb2JqKGxheWVyKTsKIAlyZXR1cm4gc2VydmwtPmRldl9pbmZvLmlkID09IHBoeWlkOwogfQorCit2b2lkIGNhaWZfZnJlZV9jbGllbnQoc3RydWN0IGNmbGF5ZXIgKmFkYXBfbGF5ZXIpCit7CisJc3RydWN0IGNmc3J2bCAqc2Vydmw7CisJaWYgKGFkYXBfbGF5ZXIgPT0gTlVMTCB8fCBhZGFwX2xheWVyLT5kbiA9PSBOVUxMKQorCQlyZXR1cm47CisJc2VydmwgPSBjb250YWluZXJfb2JqKGFkYXBfbGF5ZXItPmRuKTsKKwlzZXJ2bC0+cmVsZWFzZSgmc2VydmwtPmxheWVyKTsKK30KK0VYUE9SVF9TWU1CT0woY2FpZl9mcmVlX2NsaWVudCk7CisKK3ZvaWQgY2FpZl9jbGllbnRfcmVnaXN0ZXJfcmVmY250KHN0cnVjdCBjZmxheWVyICphZGFwdF9sYXllciwKKwkJCQkJdm9pZCAoKmhvbGQpKHN0cnVjdCBjZmxheWVyICpseXIpLAorCQkJCQl2b2lkICgqcHV0KShzdHJ1Y3QgY2ZsYXllciAqbHlyKSkKK3sKKwlzdHJ1Y3QgY2ZzcnZsICpzZXJ2aWNlOworCXNlcnZpY2UgPSBjb250YWluZXJfb2YoYWRhcHRfbGF5ZXItPmRuLCBzdHJ1Y3QgY2ZzcnZsLCBsYXllcik7CisKKwlXQVJOX09OKGFkYXB0X2xheWVyID09IE5VTEwgfHwgYWRhcHRfbGF5ZXItPmRuID09IE5VTEwpOworCXNlcnZpY2UtPmhvbGQgPSBob2xkOworCXNlcnZpY2UtPnB1dCA9IHB1dDsKK30KK0VYUE9SVF9TWU1CT0woY2FpZl9jbGllbnRfcmVnaXN0ZXJfcmVmY250KTsKZGlmZiAtLWdpdCBhL25ldC9jYWlmL2NmdXRpbGwuYyBiL25ldC9jYWlmL2NmdXRpbGwuYwppbmRleCAzMTVjMGQ2Li45OGUwMjdkIDEwMDY0NAotLS0gYS9uZXQvY2FpZi9jZnV0aWxsLmMKKysrIGIvbmV0L2NhaWYvY2Z1dGlsbC5jCkBAIC0xMDAsMTAgKzEwMCw1IEBACiAJICovCiAJaW5mby0+aGRyX2xlbiA9IDE7CiAJaW5mby0+ZGV2X2luZm8gPSAmc2VydmljZS0+ZGV2X2luZm87Ci0JcmV0ID0gbGF5ci0+ZG4tPnRyYW5zbWl0KGxheXItPmRuLCBwa3QpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXUzMiB0bXAzMjsKLQkJY2Zwa3RfZXh0cl9oZWFkKHBrdCwgJnRtcDMyLCA0KTsKLQl9Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gbGF5ci0+ZG4tPnRyYW5zbWl0KGxheXItPmRuLCBwa3QpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2NhaWYvY2Z2ZWlsLmMgYi9uZXQvY2FpZi9jZnZlaWwuYwppbmRleCBjM2IxZGVjLi4zZWM4M2ZiIDEwMDY0NAotLS0gYS9uZXQvY2FpZi9jZnZlaWwuYworKysgYi9uZXQvY2FpZi9jZnZlaWwuYwpAQCAtODIsMTMgKzgyLDE0IEBACiAJaW50IHJldDsKIAlzdHJ1Y3QgY2ZzcnZsICpzZXJ2aWNlID0gY29udGFpbmVyX29iaihsYXlyKTsKIAlpZiAoIWNmc3J2bF9yZWFkeShzZXJ2aWNlLCAmcmV0KSkKLQkJcmV0dXJuIHJldDsKKwkJZ290byBlcnI7CiAJY2FpZl9hc3NlcnQobGF5ci0+ZG4gIT0gTlVMTCk7CiAJY2FpZl9hc3NlcnQobGF5ci0+ZG4tPnRyYW5zbWl0ICE9IE5VTEwpOwogCiAJaWYgKGNmcGt0X2FkZF9oZWFkKHBrdCwgJnRtcCwgMSkgPCAwKSB7CiAJCXByX2VycigiUGFja2V0IGlzIGVycm9uZW91cyFcbiIpOwotCQlyZXR1cm4gLUVQUk9UTzsKKwkJcmV0ID0gLUVQUk9UTzsKKwkJZ290byBlcnI7CiAJfQogCiAJLyogQWRkIGluZm8tPiBmb3IgTVVYLWxheWVyIHRvIHJvdXRlIHRoZSBwYWNrZXQgb3V0LiAqLwpAQCAtOTYsOCArOTcsOCBAQAogCWluZm8tPmNoYW5uZWxfaWQgPSBzZXJ2aWNlLT5sYXllci5pZDsKIAlpbmZvLT5oZHJfbGVuID0gMTsKIAlpbmZvLT5kZXZfaW5mbyA9ICZzZXJ2aWNlLT5kZXZfaW5mbzsKLQlyZXQgPSBsYXlyLT5kbi0+dHJhbnNtaXQobGF5ci0+ZG4sIHBrdCk7Ci0JaWYgKHJldCA8IDApCi0JCWNmcGt0X2V4dHJfaGVhZChwa3QsICZ0bXAsIDEpOworCXJldHVybiBsYXlyLT5kbi0+dHJhbnNtaXQobGF5ci0+ZG4sIHBrdCk7CitlcnI6CisJY2Zwa3RfZGVzdHJveShwa3QpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9uZXQvY2FpZi9jZnZpZGwuYyBiL25ldC9jYWlmL2NmdmlkbC5jCmluZGV4IGJmNmZlZjIuLmIyZjU5ODkgMTAwNjQ0Ci0tLSBhL25ldC9jYWlmL2NmdmlkbC5jCisrKyBiL25ldC9jYWlmL2NmdmlkbC5jCkBAIC02MCw4ICs2MCw1IEBACiAJaW5mbyA9IGNmcGt0X2luZm8ocGt0KTsKIAlpbmZvLT5jaGFubmVsX2lkID0gc2VydmljZS0+bGF5ZXIuaWQ7CiAJaW5mby0+ZGV2X2luZm8gPSAmc2VydmljZS0+ZGV2X2luZm87Ci0JcmV0ID0gbGF5ci0+ZG4tPnRyYW5zbWl0KGxheXItPmRuLCBwa3QpOwotCWlmIChyZXQgPCAwKQotCQljZnBrdF9leHRyX2hlYWQocGt0LCAmdmlkZW9oZWFkZXIsIDQpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIGxheXItPmRuLT50cmFuc21pdChsYXlyLT5kbiwgcGt0KTsKIH0KZGlmZiAtLWdpdCBhL25ldC9jYWlmL2NobmxfbmV0LmMgYi9uZXQvY2FpZi9jaG5sX25ldC5jCmluZGV4IDYwMDhkNmQuLjY0OWViYWMgMTAwNjQ0Ci0tLSBhL25ldC9jYWlmL2NobmxfbmV0LmMKKysrIGIvbmV0L2NhaWYvY2hubF9uZXQuYwpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NhaWYvaWZfY2FpZi5oPgogI2luY2x1ZGUgPG5ldC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxuZXQvY2FpZi9jYWlmX2xheWVyLmg+Ci0jaW5jbHVkZSA8bmV0L2NhaWYvY2ZjbmZnLmg+CiAjaW5jbHVkZSA8bmV0L2NhaWYvY2Zwa3QuaD4KICNpbmNsdWRlIDxuZXQvY2FpZi9jYWlmX2Rldi5oPgogCkBAIC04NCwxMCArODMsMTEgQEAKIAlpZiAoIXByaXYpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JLyogR2V0IGxlbmd0aCBvZiBDQUlGIHBhY2tldC4gKi8KLQlwa3RsZW4gPSBjZnBrdF9nZXRsZW4ocGt0KTsKLQogCXNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKSBjZnBrdF90b25hdGl2ZShwa3QpOworCisJLyogR2V0IGxlbmd0aCBvZiBDQUlGIHBhY2tldC4gKi8KKwlwa3RsZW4gPSBza2ItPmxlbjsKKwogCS8qIFBhc3Mgc29tZSBtaW5pbXVtIGluZm9ybWF0aW9uIGFuZAogCSAqIHNlbmQgdGhlIHBhY2tldCB0byB0aGUgbmV0IHN0YWNrLgogCSAqLwpAQCAtMTUzLDYgKzE1MywxOCBAQAogfQogc3RhdGljIERFQ0xBUkVfV09SSyhjbG9zZV93b3JrZXIsIGNsb3NlX3dvcmspOwogCitzdGF0aWMgdm9pZCBjaG5sX2hvbGQoc3RydWN0IGNmbGF5ZXIgKmx5cikKK3sKKwlzdHJ1Y3QgY2hubF9uZXQgKnByaXYgPSBjb250YWluZXJfb2YobHlyLCBzdHJ1Y3QgY2hubF9uZXQsIGNobmwpOworCWRldl9ob2xkKHByaXYtPm5ldGRldik7Cit9CisKK3N0YXRpYyB2b2lkIGNobmxfcHV0KHN0cnVjdCBjZmxheWVyICpseXIpCit7CisJc3RydWN0IGNobmxfbmV0ICpwcml2ID0gY29udGFpbmVyX29mKGx5ciwgc3RydWN0IGNobmxfbmV0LCBjaG5sKTsKKwlkZXZfcHV0KHByaXYtPm5ldGRldik7Cit9CisKIHN0YXRpYyB2b2lkIGNobmxfZmxvd2N0cmxfY2Ioc3RydWN0IGNmbGF5ZXIgKmxheXIsIGVudW0gY2FpZl9jdHJsY21kIGZsb3csCiAJCQkJaW50IHBoeWlkKQogewpAQCAtMTkwLDYgKzIwMiw3IEBACiAJCW5ldGlmX3dha2VfcXVldWUocHJpdi0+bmV0ZGV2KTsKIAkJYnJlYWs7CiAJY2FzZSBDQUlGX0NUUkxDTURfSU5JVF9SU1A6CisJCWNhaWZfY2xpZW50X3JlZ2lzdGVyX3JlZmNudCgmcHJpdi0+Y2hubCwgY2hubF9ob2xkLCBjaG5sX3B1dCk7CiAJCXByaXYtPnN0YXRlID0gQ0FJRl9DT05ORUNURUQ7CiAJCXByaXYtPmZsb3dlbmFibGVkID0gdHJ1ZTsKIAkJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5uZXRkZXYpOwpAQCAtMjU3LDggKzI3MCw5IEBACiAKIAlpZiAocHJpdi0+c3RhdGUgIT0gQ0FJRl9DT05ORUNUSU5HKSB7CiAJCXByaXYtPnN0YXRlID0gQ0FJRl9DT05ORUNUSU5HOwotCQlyZXN1bHQgPSBjYWlmX2Nvbm5lY3RfY2xpZW50KCZwcml2LT5jb25uX3JlcSwgJnByaXYtPmNobmwsCi0JCQkJCSZsbGlmaW5kZXgsICZoZWFkcm9vbSwgJnRhaWxyb29tKTsKKwkJcmVzdWx0ID0gY2FpZl9jb25uZWN0X2NsaWVudChkZXZfbmV0KGRldiksICZwcml2LT5jb25uX3JlcSwKKwkJCQkJCSZwcml2LT5jaG5sLCAmbGxpZmluZGV4LAorCQkJCQkJJmhlYWRyb29tLCAmdGFpbHJvb20pOwogCQlpZiAocmVzdWx0ICE9IDApIHsKIAkJCQlwcl9kZWJ1ZygiZXJyOiAiCiAJCQkJCSAiVW5hYmxlIHRvIHJlZ2lzdGVyIGFuZCBvcGVuIGRldmljZSwiCkBAIC0zMTQsNyArMzI4LDcgQEAKIAogCWlmIChyZXN1bHQgPT0gMCkgewogCQlwcl9kZWJ1ZygiY29ubmVjdCB0aW1lb3V0XG4iKTsKLQkJY2FpZl9kaXNjb25uZWN0X2NsaWVudCgmcHJpdi0+Y2hubCk7CisJCWNhaWZfZGlzY29ubmVjdF9jbGllbnQoZGV2X25ldChkZXYpLCAmcHJpdi0+Y2hubCk7CiAJCXByaXYtPnN0YXRlID0gQ0FJRl9ESVNDT05ORUNURUQ7CiAJCXByX2RlYnVnKCJzdGF0ZSBkaXNjb25uZWN0ZWRcbiIpOwogCQlyZXN1bHQgPSAtRVRJTUVET1VUOwpAQCAtMzMwLDcgKzM0NCw3IEBACiAJcmV0dXJuIDA7CiAKIGVycm9yOgotCWNhaWZfZGlzY29ubmVjdF9jbGllbnQoJnByaXYtPmNobmwpOworCWNhaWZfZGlzY29ubmVjdF9jbGllbnQoZGV2X25ldChkZXYpLCAmcHJpdi0+Y2hubCk7CiAJcHJpdi0+c3RhdGUgPSBDQUlGX0RJU0NPTk5FQ1RFRDsKIAlwcl9kZWJ1Zygic3RhdGUgZGlzY29ubmVjdGVkXG4iKTsKIAlyZXR1cm4gcmVzdWx0OwpAQCAtMzQ0LDcgKzM1OCw3IEBACiAJQVNTRVJUX1JUTkwoKTsKIAlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlwcml2LT5zdGF0ZSA9IENBSUZfRElTQ09OTkVDVEVEOwotCWNhaWZfZGlzY29ubmVjdF9jbGllbnQoJnByaXYtPmNobmwpOworCWNhaWZfZGlzY29ubmVjdF9jbGllbnQoZGV2X25ldChkZXYpLCAmcHJpdi0+Y2hubCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM3MywxMSArMzg3LDE4IEBACiAJLm5kb19zdGFydF94bWl0ID0gY2hubF9uZXRfc3RhcnRfeG1pdCwKIH07CiAKK3N0YXRpYyB2b2lkIGNobmxfbmV0X2Rlc3RydWN0b3Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgY2hubF9uZXQgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWNhaWZfZnJlZV9jbGllbnQoJnByaXYtPmNobmwpOworCWZyZWVfbmV0ZGV2KGRldik7Cit9CisKIHN0YXRpYyB2b2lkIGlwY2FpZl9uZXRfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgY2hubF9uZXQgKnByaXY7CiAJZGV2LT5uZXRkZXZfb3BzID0gJm5ldGRldl9vcHM7Ci0JZGV2LT5kZXN0cnVjdG9yID0gZnJlZV9uZXRkZXY7CisJZGV2LT5kZXN0cnVjdG9yID0gY2hubF9uZXRfZGVzdHJ1Y3RvcjsKIAlkZXYtPmZsYWdzIHw9IElGRl9OT0FSUDsKIAlkZXYtPmZsYWdzIHw9IElGRl9QT0lOVE9QT0lOVDsKIAlkZXYtPm10dSA9IEdQUlNfUERQX01UVTsKQEAgLTM5MSw3ICs0MTIsNyBAQAogCXByaXYtPmNvbm5fcmVxLmxpbmtfc2VsZWN0b3IgPSBDQUlGX0xJTktfSElHSF9CQU5EVzsKIAlwcml2LT5jb25uX3JlcS5wcmlvcml0eSA9IENBSUZfUFJJT19MT1c7CiAJLyogSW5zZXJ0IGlsbGVnYWwgdmFsdWUgKi8KLQlwcml2LT5jb25uX3JlcS5zb2NrYWRkci51LmRnbS5jb25uZWN0aW9uX2lkID0gLTE7CisJcHJpdi0+Y29ubl9yZXEuc29ja2FkZHIudS5kZ20uY29ubmVjdGlvbl9pZCA9IDA7CiAJcHJpdi0+Zmxvd2VuYWJsZWQgPSBmYWxzZTsKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnByaXYtPm5ldG1nbXRfd3EpOwpAQCAtNDUzLDYgKzQ3NCwxMCBAQAogCQlwcl93YXJuKCJkZXZpY2UgcnRtbCByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKIAllbHNlCiAJCWxpc3RfYWRkKCZjYWlmZGV2LT5saXN0X2ZpZWxkLCAmY2hubF9uZXRfbGlzdCk7CisKKwkvKiBUYWtlIGlmaW5kZXggYXMgY29ubmVjdGlvbi1pZCBpZiBudWxsICovCisJaWYgKGNhaWZkZXYtPmNvbm5fcmVxLnNvY2thZGRyLnUuZGdtLmNvbm5lY3Rpb25faWQgPT0gMCkKKwkJY2FpZmRldi0+Y29ubl9yZXEuc29ja2FkZHIudS5kZ20uY29ubmVjdGlvbl9pZCA9IGRldi0+aWZpbmRleDsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9uZXQvY2FuL2FmX2Nhbi5jIGIvbmV0L2Nhbi9hZl9jYW4uYwppbmRleCA3MzNkNjZmLi4wOTRmYzUzIDEwMDY0NAotLS0gYS9uZXQvY2FuL2FmX2Nhbi5jCisrKyBiL25ldC9jYW4vYWZfY2FuLmMKQEAgLTg0LDggKzg0LDggQEAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcmN2X2NhY2hlIF9fcmVhZF9tb3N0bHk7CiAKIC8qIHRhYmxlIG9mIHJlZ2lzdGVyZWQgQ0FOIHByb3RvY29scyAqLwotc3RhdGljIHN0cnVjdCBjYW5fcHJvdG8gKnByb3RvX3RhYltDQU5fTlBST1RPXSBfX3JlYWRfbW9zdGx5Owotc3RhdGljIERFRklORV9TUElOTE9DSyhwcm90b190YWJfbG9jayk7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNhbl9wcm90byAqcHJvdG9fdGFiW0NBTl9OUFJPVE9dIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgREVGSU5FX01VVEVYKHByb3RvX3RhYl9sb2NrKTsKIAogc3RydWN0IHRpbWVyX2xpc3QgY2FuX3N0YXR0aW1lcjsgICAvKiB0aW1lciBmb3Igc3RhdGlzdGljcyB1cGRhdGUgKi8KIHN0cnVjdCBzX3N0YXRzICAgIGNhbl9zdGF0czsgICAgICAgLyogcGFja2V0IHN0YXRpc3RpY3MgKi8KQEAgLTExNSwxMSArMTE1LDI5IEBACiAJc2tiX3F1ZXVlX3B1cmdlKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2FuX3Byb3RvICpjYW5fZ2V0X3Byb3RvKGludCBwcm90b2NvbCkKK3sKKwljb25zdCBzdHJ1Y3QgY2FuX3Byb3RvICpjcDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwljcCA9IHJjdV9kZXJlZmVyZW5jZShwcm90b190YWJbcHJvdG9jb2xdKTsKKwlpZiAoY3AgJiYgIXRyeV9tb2R1bGVfZ2V0KGNwLT5wcm90LT5vd25lcikpCisJCWNwID0gTlVMTDsKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXJldHVybiBjcDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNhbl9wdXRfcHJvdG8oY29uc3Qgc3RydWN0IGNhbl9wcm90byAqY3ApCit7CisJbW9kdWxlX3B1dChjcC0+cHJvdC0+b3duZXIpOworfQorCiBzdGF0aWMgaW50IGNhbl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsCiAJCSAgICAgIGludCBrZXJuKQogewogCXN0cnVjdCBzb2NrICpzazsKLQlzdHJ1Y3QgY2FuX3Byb3RvICpjcDsKKwljb25zdCBzdHJ1Y3QgY2FuX3Byb3RvICpjcDsKIAlpbnQgZXJyID0gMDsKIAogCXNvY2stPnN0YXRlID0gU1NfVU5DT05ORUNURUQ7CkBAIC0xMzAsOSArMTQ4LDEyIEBACiAJaWYgKCFuZXRfZXEobmV0LCAmaW5pdF9uZXQpKQogCQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKIAorCWNwID0gY2FuX2dldF9wcm90byhwcm90b2NvbCk7CisKICNpZmRlZiBDT05GSUdfTU9EVUxFUwotCS8qIHRyeSB0byBsb2FkIHByb3RvY29sIG1vZHVsZSBrZXJuZWwgaXMgbW9kdWxhciAqLwotCWlmICghcHJvdG9fdGFiW3Byb3RvY29sXSkgeworCWlmICghY3ApIHsKKwkJLyogdHJ5IHRvIGxvYWQgcHJvdG9jb2wgbW9kdWxlIGlmIGtlcm5lbCBpcyBtb2R1bGFyICovCisKIAkJZXJyID0gcmVxdWVzdF9tb2R1bGUoImNhbi1wcm90by0lZCIsIHByb3RvY29sKTsKIAogCQkvKgpAQCAtMTQzLDIyICsxNjQsMTggQEAKIAkJaWYgKGVyciAmJiBwcmludGtfcmF0ZWxpbWl0KCkpCiAJCQlwcmludGsoS0VSTl9FUlIgImNhbjogcmVxdWVzdF9tb2R1bGUgIgogCQkJICAgICAgICIoY2FuLXByb3RvLSVkKSBmYWlsZWQuXG4iLCBwcm90b2NvbCk7CisKKwkJY3AgPSBjYW5fZ2V0X3Byb3RvKHByb3RvY29sKTsKIAl9CiAjZW5kaWYKIAotCXNwaW5fbG9jaygmcHJvdG9fdGFiX2xvY2spOwotCWNwID0gcHJvdG9fdGFiW3Byb3RvY29sXTsKLQlpZiAoY3AgJiYgIXRyeV9tb2R1bGVfZ2V0KGNwLT5wcm90LT5vd25lcikpCi0JCWNwID0gTlVMTDsKLQlzcGluX3VubG9jaygmcHJvdG9fdGFiX2xvY2spOwotCiAJLyogY2hlY2sgZm9yIGF2YWlsYWJsZSBwcm90b2NvbCBhbmQgY29ycmVjdCB1c2FnZSAqLwogCiAJaWYgKCFjcCkKIAkJcmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7CiAKIAlpZiAoY3AtPnR5cGUgIT0gc29jay0+dHlwZSkgewotCQllcnIgPSAtRVBST1RPTk9TVVBQT1JUOworCQllcnIgPSAtRVBST1RPVFlQRTsKIAkJZ290byBlcnJvdXQ7CiAJfQogCkBAIC0xODMsNyArMjAwLDcgQEAKIAl9CiAKICBlcnJvdXQ6Ci0JbW9kdWxlX3B1dChjcC0+cHJvdC0+b3duZXIpOworCWNhbl9wdXRfcHJvdG8oY3ApOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTY3OSw3ICs2OTYsNyBAQAogICogIC1FQlVTWSAgcHJvdG9jb2wgYWxyZWFkeSBpbiB1c2UKICAqICAtRU5PQlVGIGlmIHByb3RvX3JlZ2lzdGVyKCkgZmFpbHMKICAqLwotaW50IGNhbl9wcm90b19yZWdpc3RlcihzdHJ1Y3QgY2FuX3Byb3RvICpjcCkKK2ludCBjYW5fcHJvdG9fcmVnaXN0ZXIoY29uc3Qgc3RydWN0IGNhbl9wcm90byAqY3ApCiB7CiAJaW50IHByb3RvID0gY3AtPnByb3RvY29sOwogCWludCBlcnIgPSAwOwpAQCAtNjk0LDE1ICs3MTEsMTYgQEAKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCXNwaW5fbG9jaygmcHJvdG9fdGFiX2xvY2spOworCW11dGV4X2xvY2soJnByb3RvX3RhYl9sb2NrKTsKKwogCWlmIChwcm90b190YWJbcHJvdG9dKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiY2FuOiBwcm90b2NvbCAlZCBhbHJlYWR5IHJlZ2lzdGVyZWRcbiIsCiAJCSAgICAgICBwcm90byk7CiAJCWVyciA9IC1FQlVTWTsKIAl9IGVsc2UKLQkJcHJvdG9fdGFiW3Byb3RvXSA9IGNwOworCQlyY3VfYXNzaWduX3BvaW50ZXIocHJvdG9fdGFiW3Byb3RvXSwgY3ApOwogCi0Jc3Bpbl91bmxvY2soJnByb3RvX3RhYl9sb2NrKTsKKwltdXRleF91bmxvY2soJnByb3RvX3RhYl9sb2NrKTsKIAogCWlmIChlcnIgPCAwKQogCQlwcm90b191bnJlZ2lzdGVyKGNwLT5wcm90KTsKQEAgLTcxNSwxNyArNzMzLDE2IEBACiAgKiBjYW5fcHJvdG9fdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgQ0FOIHRyYW5zcG9ydCBwcm90b2NvbAogICogQGNwOiBwb2ludGVyIHRvIENBTiBwcm90b2NvbCBzdHJ1Y3R1cmUKICAqLwotdm9pZCBjYW5fcHJvdG9fdW5yZWdpc3RlcihzdHJ1Y3QgY2FuX3Byb3RvICpjcCkKK3ZvaWQgY2FuX3Byb3RvX3VucmVnaXN0ZXIoY29uc3Qgc3RydWN0IGNhbl9wcm90byAqY3ApCiB7CiAJaW50IHByb3RvID0gY3AtPnByb3RvY29sOwogCi0Jc3Bpbl9sb2NrKCZwcm90b190YWJfbG9jayk7Ci0JaWYgKCFwcm90b190YWJbcHJvdG9dKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiQlVHOiBjYW46IHByb3RvY29sICVkIGlzIG5vdCByZWdpc3RlcmVkXG4iLAotCQkgICAgICAgcHJvdG8pOwotCX0KLQlwcm90b190YWJbcHJvdG9dID0gTlVMTDsKLQlzcGluX3VubG9jaygmcHJvdG9fdGFiX2xvY2spOworCW11dGV4X2xvY2soJnByb3RvX3RhYl9sb2NrKTsKKwlCVUdfT04ocHJvdG9fdGFiW3Byb3RvXSAhPSBjcCk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKHByb3RvX3RhYltwcm90b10sIE5VTEwpOworCW11dGV4X3VubG9jaygmcHJvdG9fdGFiX2xvY2spOworCisJc3luY2hyb25pemVfcmN1KCk7CiAKIAlwcm90b191bnJlZ2lzdGVyKGNwLT5wcm90KTsKIH0KZGlmZiAtLWdpdCBhL25ldC9jYW4vYmNtLmMgYi9uZXQvY2FuL2JjbS5jCmluZGV4IDhhNmEwNWUuLmNjZWQ4MDYgMTAwNjQ0Ci0tLSBhL25ldC9jYW4vYmNtLmMKKysrIGIvbmV0L2Nhbi9iY20uYwpAQCAtMTYwMSw3ICsxNjAxLDcgQEAKIAkuaW5pdCAgICAgICA9IGJjbV9pbml0LAogfTsKIAotc3RhdGljIHN0cnVjdCBjYW5fcHJvdG8gYmNtX2Nhbl9wcm90byBfX3JlYWRfbW9zdGx5ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjYW5fcHJvdG8gYmNtX2Nhbl9wcm90byA9IHsKIAkudHlwZSAgICAgICA9IFNPQ0tfREdSQU0sCiAJLnByb3RvY29sICAgPSBDQU5fQkNNLAogCS5vcHMgICAgICAgID0gJmJjbV9vcHMsCmRpZmYgLS1naXQgYS9uZXQvY2FuL3Jhdy5jIGIvbmV0L2Nhbi9yYXcuYwppbmRleCAwZWIzOWE3Li5kZWE5OWE2IDEwMDY0NAotLS0gYS9uZXQvY2FuL3Jhdy5jCisrKyBiL25ldC9jYW4vcmF3LmMKQEAgLTc3NCw3ICs3NzQsNyBAQAogCS5pbml0ICAgICAgID0gcmF3X2luaXQsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNhbl9wcm90byByYXdfY2FuX3Byb3RvIF9fcmVhZF9tb3N0bHkgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNhbl9wcm90byByYXdfY2FuX3Byb3RvID0gewogCS50eXBlICAgICAgID0gU09DS19SQVcsCiAJLnByb3RvY29sICAgPSBDQU5fUkFXLAogCS5vcHMgICAgICAgID0gJnJhd19vcHMsCmRpZmYgLS1naXQgYS9uZXQvY29tcGF0LmMgYi9uZXQvY29tcGF0LmMKaW5kZXggMzY0OWQ1OC4uYzU3OGQ5MyAxMDA2NDQKLS0tIGEvbmV0L2NvbXBhdC5jCisrKyBiL25ldC9jb21wYXQuYwpAQCAtNzIyLDExICs3MjIsMTEgQEAKIAogLyogQXJndW1lbnQgbGlzdCBzaXplcyBmb3IgY29tcGF0X3N5c19zb2NrZXRjYWxsICovCiAjZGVmaW5lIEFMKHgpICgoeCkgKiBzaXplb2YodTMyKSkKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIG5hc1syMF0gPSB7CitzdGF0aWMgdW5zaWduZWQgY2hhciBuYXNbMjFdID0gewogCUFMKDApLCBBTCgzKSwgQUwoMyksIEFMKDMpLCBBTCgyKSwgQUwoMyksCiAJQUwoMyksIEFMKDMpLCBBTCg0KSwgQUwoNCksIEFMKDQpLCBBTCg2KSwKIAlBTCg2KSwgQUwoMiksIEFMKDUpLCBBTCg1KSwgQUwoMyksIEFMKDMpLAotCUFMKDQpLCBBTCg1KQorCUFMKDQpLCBBTCg1KSwgQUwoNCkKIH07CiAjdW5kZWYgQUwKIApAQCAtNzM1LDYgKzczNSwxMyBAQAogCXJldHVybiBzeXNfc2VuZG1zZyhmZCwgKHN0cnVjdCBtc2doZHIgX191c2VyICopbXNnLCBmbGFncyB8IE1TR19DTVNHX0NPTVBBVCk7CiB9CiAKK2FzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX3NlbmRtbXNnKGludCBmZCwgc3RydWN0IGNvbXBhdF9tbXNnaGRyIF9fdXNlciAqbW1zZywKKwkJCQkgICAgdW5zaWduZWQgdmxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXJldHVybiBfX3N5c19zZW5kbW1zZyhmZCwgKHN0cnVjdCBtbXNnaGRyIF9fdXNlciAqKW1tc2csIHZsZW4sCisJCQkgICAgICBmbGFncyB8IE1TR19DTVNHX0NPTVBBVCk7Cit9CisKIGFzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX3JlY3Ztc2coaW50IGZkLCBzdHJ1Y3QgY29tcGF0X21zZ2hkciBfX3VzZXIgKm1zZywgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXJldHVybiBzeXNfcmVjdm1zZyhmZCwgKHN0cnVjdCBtc2doZHIgX191c2VyICopbXNnLCBmbGFncyB8IE1TR19DTVNHX0NPTVBBVCk7CkBAIC03ODAsNyArNzg3LDcgQEAKIAl1MzIgYVs2XTsKIAl1MzIgYTAsIGExOwogCi0JaWYgKGNhbGwgPCBTWVNfU09DS0VUIHx8IGNhbGwgPiBTWVNfUkVDVk1NU0cpCisJaWYgKGNhbGwgPCBTWVNfU09DS0VUIHx8IGNhbGwgPiBTWVNfU0VORE1NU0cpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChjb3B5X2Zyb21fdXNlcihhLCBhcmdzLCBuYXNbY2FsbF0pKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTgzOSw2ICs4NDYsOSBAQAogCWNhc2UgU1lTX1NFTkRNU0c6CiAJCXJldCA9IGNvbXBhdF9zeXNfc2VuZG1zZyhhMCwgY29tcGF0X3B0cihhMSksIGFbMl0pOwogCQlicmVhazsKKwljYXNlIFNZU19TRU5ETU1TRzoKKwkJcmV0ID0gY29tcGF0X3N5c19zZW5kbW1zZyhhMCwgY29tcGF0X3B0cihhMSksIGFbMl0sIGFbM10pOworCQlicmVhazsKIAljYXNlIFNZU19SRUNWTVNHOgogCQlyZXQgPSBjb21wYXRfc3lzX3JlY3Ztc2coYTAsIGNvbXBhdF9wdHIoYTEpLCBhWzJdKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IGI2MjRmZTQuLmJjYjA1Y2IgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCisrKyBiL25ldC9jb3JlL2Rldi5jCkBAIC05NDgsNyArOTQ4LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woZGV2X2FsbG9jX25hbWUpOwogCi1zdGF0aWMgaW50IGRldl9nZXRfdmFsaWRfbmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lLCBib29sIGZtdCkKK3N0YXRpYyBpbnQgZGV2X2dldF92YWxpZF9uYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IG5ldCAqbmV0OwogCkBAIC05NTgsNyArOTU4LDcgQEAKIAlpZiAoIWRldl92YWxpZF9uYW1lKG5hbWUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChmbXQgJiYgc3RyY2hyKG5hbWUsICclJykpCisJaWYgKHN0cmNocihuYW1lLCAnJScpKQogCQlyZXR1cm4gZGV2X2FsbG9jX25hbWUoZGV2LCBuYW1lKTsKIAllbHNlIGlmIChfX2Rldl9nZXRfYnlfbmFtZShuZXQsIG5hbWUpKQogCQlyZXR1cm4gLUVFWElTVDsKQEAgLTk5NSw3ICs5OTUsNyBAQAogCiAJbWVtY3B5KG9sZG5hbWUsIGRldi0+bmFtZSwgSUZOQU1TSVopOwogCi0JZXJyID0gZGV2X2dldF92YWxpZF9uYW1lKGRldiwgbmV3bmFtZSwgMSk7CisJZXJyID0gZGV2X2dldF92YWxpZF9uYW1lKGRldiwgbmV3bmFtZSk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKQEAgLTEwMDcsNyArMTAwNyw3IEBACiAJfQogCiAJd3JpdGVfbG9ja19iaCgmZGV2X2Jhc2VfbG9jayk7Ci0JaGxpc3RfZGVsKCZkZXYtPm5hbWVfaGxpc3QpOworCWhsaXN0X2RlbF9yY3UoJmRldi0+bmFtZV9obGlzdCk7CiAJd3JpdGVfdW5sb2NrX2JoKCZkZXZfYmFzZV9sb2NrKTsKIAogCXN5bmNocm9uaXplX3JjdSgpOwpAQCAtMTMxNyw3ICsxMzE3LDggQEAKIAkJcmV0dXJuOwogCiAJX19ldGh0b29sX3NldF9mbGFncyhkZXYsIGZsYWdzICYgfkVUSF9GTEFHX0xSTyk7Ci0JV0FSTl9PTihkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MUk8pOworCWlmICh1bmxpa2VseShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MUk8pKQorCQluZXRkZXZfV0FSTihkZXYsICJmYWlsZWQgdG8gZGlzYWJsZSBMUk8hXG4iKTsKIH0KIEVYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfbHJvKTsKIApAQCAtMjUwNCw4ICsyNTA1LDggQEAKIF9fdTMyIF9fc2tiX2dldF9yeGhhc2goc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgbmhvZmYsIGhhc2ggPSAwLCBwb2ZmOwotCXN0cnVjdCBpcHY2aGRyICppcDY7Ci0Jc3RydWN0IGlwaGRyICppcDsKKwljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2OworCWNvbnN0IHN0cnVjdCBpcGhkciAqaXA7CiAJdTggaXBfcHJvdG87CiAJdTMyIGFkZHIxLCBhZGRyMiwgaWhsOwogCXVuaW9uIHsKQEAgLTI1MjAsNyArMjUyMSw3IEBACiAJCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqaXApICsgbmhvZmYpKQogCQkJZ290byBkb25lOwogCi0JCWlwID0gKHN0cnVjdCBpcGhkciAqKSAoc2tiLT5kYXRhICsgbmhvZmYpOworCQlpcCA9IChjb25zdCBzdHJ1Y3QgaXBoZHIgKikgKHNrYi0+ZGF0YSArIG5ob2ZmKTsKIAkJaWYgKGlwLT5mcmFnX29mZiAmIGh0b25zKElQX01GIHwgSVBfT0ZGU0VUKSkKIAkJCWlwX3Byb3RvID0gMDsKIAkJZWxzZQpAQCAtMjUzMyw3ICsyNTM0LDcgQEAKIAkJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCppcDYpICsgbmhvZmYpKQogCQkJZ290byBkb25lOwogCi0JCWlwNiA9IChzdHJ1Y3QgaXB2NmhkciAqKSAoc2tiLT5kYXRhICsgbmhvZmYpOworCQlpcDYgPSAoY29uc3Qgc3RydWN0IGlwdjZoZHIgKikgKHNrYi0+ZGF0YSArIG5ob2ZmKTsKIAkJaXBfcHJvdG8gPSBpcDYtPm5leHRoZHI7CiAJCWFkZHIxID0gKF9fZm9yY2UgdTMyKSBpcDYtPnNhZGRyLnM2X2FkZHIzMlszXTsKIAkJYWRkcjIgPSAoX19mb3JjZSB1MzIpIGlwNi0+ZGFkZHIuczZfYWRkcjMyWzNdOwpAQCAtMzA3OCwyNSArMzA3OSw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZXRkZXZfcnhfaGFuZGxlcl91bnJlZ2lzdGVyKTsKIAotc3RhdGljIHZvaWQgdmxhbl9vbl9ib25kX2hvb2soc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQkvKgotCSAqIE1ha2Ugc3VyZSBBUlAgZnJhbWVzIHJlY2VpdmVkIG9uIFZMQU4gaW50ZXJmYWNlcyBzdGFja2VkIG9uCi0JICogYm9uZGluZyBpbnRlcmZhY2VzIHN0aWxsIG1ha2UgdGhlaXIgd2F5IHRvIGFueSBiYXNlIGJvbmRpbmcKLQkgKiBkZXZpY2UgdGhhdCBtYXkgaGF2ZSByZWdpc3RlcmVkIGZvciBhIHNwZWNpZmljIHB0eXBlLgotCSAqLwotCWlmIChza2ItPmRldi0+cHJpdl9mbGFncyAmIElGRl84MDJfMVFfVkxBTiAmJgotCSAgICB2bGFuX2Rldl9yZWFsX2Rldihza2ItPmRldiktPnByaXZfZmxhZ3MgJiBJRkZfQk9ORElORyAmJgotCSAgICBza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0FSUCkpIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKLQotCQlpZiAoIXNrYjIpCi0JCQlyZXR1cm47Ci0JCXNrYjItPmRldiA9IHZsYW5fZGV2X3JlYWxfZGV2KHNrYi0+ZGV2KTsKLQkJbmV0aWZfcngoc2tiMik7Ci0JfQotfQotCiBzdGF0aWMgaW50IF9fbmV0aWZfcmVjZWl2ZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0eXBlLCAqcHRfcHJldjsKQEAgLTMxMzIsNiArMzExNCwxMiBAQAogCiAJX190aGlzX2NwdV9pbmMoc29mdG5ldF9kYXRhLnByb2Nlc3NlZCk7CiAKKwlpZiAoc2tiLT5wcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF84MDIxUSkpIHsKKwkJc2tiID0gdmxhbl91bnRhZyhza2IpOworCQlpZiAodW5saWtlbHkoIXNrYikpCisJCQlnb3RvIG91dDsKKwl9CisKICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1QKIAlpZiAoc2tiLT50Y192ZXJkICYgVENfTkNMUykgewogCQlza2ItPnRjX3ZlcmQgPSBDTFJfVENfTkNMUyhza2ItPnRjX3ZlcmQpOwpAQCAtMzE3OSwxNSArMzE2NywxMyBAQAogCQkJcmV0ID0gZGVsaXZlcl9za2Ioc2tiLCBwdF9wcmV2LCBvcmlnX2Rldik7CiAJCQlwdF9wcmV2ID0gTlVMTDsKIAkJfQotCQlpZiAodmxhbl9od2FjY2VsX2RvX3JlY2VpdmUoJnNrYikpIHsKKwkJaWYgKHZsYW5fZG9fcmVjZWl2ZSgmc2tiKSkgewogCQkJcmV0ID0gX19uZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCQkJZ290byBvdXQ7CiAJCX0gZWxzZSBpZiAodW5saWtlbHkoIXNrYikpCiAJCQlnb3RvIG91dDsKIAl9CiAKLQl2bGFuX29uX2JvbmRfaG9vayhza2IpOwotCiAJLyogZGVsaXZlciBvbmx5IGV4YWN0IG1hdGNoIHdoZW4gaW5kaWNhdGVkICovCiAJbnVsbF9vcl9kZXYgPSBkZWxpdmVyX2V4YWN0ID8gc2tiLT5kZXYgOiBOVUxMOwogCkBAIC00MzA4LDEwICs0Mjk0LDggQEAKIAogCXNsYXZlLT5tYXN0ZXIgPSBtYXN0ZXI7CiAKLQlpZiAob2xkKSB7Ci0JCXN5bmNocm9uaXplX25ldCgpOworCWlmIChvbGQpCiAJCWRldl9wdXQob2xkKTsKLQl9CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKG5ldGRldl9zZXRfbWFzdGVyKTsKQEAgLTQ1MTIsNiArNDQ5NiwzMCBAQAogfQogCiAvKioKKyAqCWRldl9ldGh0b29sX2dldF9zZXR0aW5ncyAtIGNhbGwgZGV2aWNlJ3MgZXRodG9vbF9vcHM6OmdldF9zZXR0aW5ncygpCisgKglAZGV2OiBkZXZpY2UKKyAqCUBjbWQ6IG1lbW9yeSBhcmVhIGZvciBldGh0b29sX29wczo6Z2V0X3NldHRpbmdzKCkgcmVzdWx0CisgKgorICogICAgICBUaGUgY21kIGFyZyBpcyBpbml0aWFsaXplZCBwcm9wZXJseSAoY2xlYXJlZCBhbmQKKyAqICAgICAgZXRodG9vbF9jbWQ6OmNtZCBmaWVsZCBzZXQgdG8gRVRIVE9PTF9HU0VUKS4KKyAqCisgKglSZXR1cm4gZGV2aWNlJ3MgZXRodG9vbF9vcHM6OmdldF9zZXR0aW5ncygpIHJlc3VsdCB2YWx1ZSBvcgorICoJLUVPUE5PVFNVUFAgd2hlbiBkZXZpY2UgZG9lc24ndCBleHBvc2UKKyAqCWV0aHRvb2xfb3BzOjpnZXRfc2V0dGluZ3MoKSBvcGVyYXRpb24uCisgKi8KK2ludCBkZXZfZXRodG9vbF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJaWYgKCFkZXYtPmV0aHRvb2xfb3BzIHx8ICFkZXYtPmV0aHRvb2xfb3BzLT5nZXRfc2V0dGluZ3MpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCW1lbXNldChjbWQsIDAsIHNpemVvZihzdHJ1Y3QgZXRodG9vbF9jbWQpKTsKKwljbWQtPmNtZCA9IEVUSFRPT0xfR1NFVDsKKwlyZXR1cm4gZGV2LT5ldGh0b29sX29wcy0+Z2V0X3NldHRpbmdzKGRldiwgY21kKTsKK30KK0VYUE9SVF9TWU1CT0woZGV2X2V0aHRvb2xfZ2V0X3NldHRpbmdzKTsKKworLyoqCiAgKglkZXZfZ2V0X2ZsYWdzIC0gZ2V0IGZsYWdzIHJlcG9ydGVkIHRvIHVzZXJzcGFjZQogICoJQGRldjogZGV2aWNlCiAgKgpAQCAtNTExNiw3ICs1MTI0LDcgQEAKIAkJCWxpc3RfZGVsKCZkZXYtPnVucmVnX2xpc3QpOwogCQkJY29udGludWU7CiAJCX0KLQorCQlkZXYtPmRpc21hbnRsZSA9IHRydWU7CiAJCUJVR19PTihkZXYtPnJlZ19zdGF0ZSAhPSBORVRSRUdfUkVHSVNURVJFRCk7CiAJfQogCkBAIC01MjQyLDExICs1MjUwLDEzIEBACiB9CiBFWFBPUlRfU1lNQk9MKG5ldGRldl9maXhfZmVhdHVyZXMpOwogCi12b2lkIG5ldGRldl91cGRhdGVfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK2ludCBfX25ldGRldl91cGRhdGVfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAl1MzIgZmVhdHVyZXM7CiAJaW50IGVyciA9IDA7CiAKKwlBU1NFUlRfUlROTCgpOworCiAJZmVhdHVyZXMgPSBuZXRkZXZfZ2V0X3dhbnRlZF9mZWF0dXJlcyhkZXYpOwogCiAJaWYgKGRldi0+bmV0ZGV2X29wcy0+bmRvX2ZpeF9mZWF0dXJlcykKQEAgLTUyNTYsMjQgKzUyNjYsNjAgQEAKIAlmZWF0dXJlcyA9IG5ldGRldl9maXhfZmVhdHVyZXMoZGV2LCBmZWF0dXJlcyk7CiAKIAlpZiAoZGV2LT5mZWF0dXJlcyA9PSBmZWF0dXJlcykKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAotCW5ldGRldl9pbmZvKGRldiwgIkZlYXR1cmVzIGNoYW5nZWQ6IDB4JTA4eCAtPiAweCUwOHhcbiIsCisJbmV0ZGV2X2RiZyhkZXYsICJGZWF0dXJlcyBjaGFuZ2VkOiAweCUwOHggLT4gMHglMDh4XG4iLAogCQlkZXYtPmZlYXR1cmVzLCBmZWF0dXJlcyk7CiAKIAlpZiAoZGV2LT5uZXRkZXZfb3BzLT5uZG9fc2V0X2ZlYXR1cmVzKQogCQllcnIgPSBkZXYtPm5ldGRldl9vcHMtPm5kb19zZXRfZmVhdHVyZXMoZGV2LCBmZWF0dXJlcyk7CiAKLQlpZiAoIWVycikKLQkJZGV2LT5mZWF0dXJlcyA9IGZlYXR1cmVzOwotCWVsc2UgaWYgKGVyciA8IDApCisJaWYgKHVubGlrZWx5KGVyciA8IDApKSB7CiAJCW5ldGRldl9lcnIoZGV2LAogCQkJInNldF9mZWF0dXJlcygpIGZhaWxlZCAoJWQpOyB3YW50ZWQgMHglMDh4LCBsZWZ0IDB4JTA4eFxuIiwKIAkJCWVyciwgZmVhdHVyZXMsIGRldi0+ZmVhdHVyZXMpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKCFlcnIpCisJCWRldi0+ZmVhdHVyZXMgPSBmZWF0dXJlczsKKworCXJldHVybiAxOworfQorCisvKioKKyAqCW5ldGRldl91cGRhdGVfZmVhdHVyZXMgLSByZWNhbGN1bGF0ZSBkZXZpY2UgZmVhdHVyZXMKKyAqCUBkZXY6IHRoZSBkZXZpY2UgdG8gY2hlY2sKKyAqCisgKglSZWNhbGN1bGF0ZSBkZXYtPmZlYXR1cmVzIHNldCBhbmQgc2VuZCBub3RpZmljYXRpb25zIGlmIGl0CisgKgloYXMgY2hhbmdlZC4gU2hvdWxkIGJlIGNhbGxlZCBhZnRlciBkcml2ZXIgb3IgaGFyZHdhcmUgZGVwZW5kZW50CisgKgljb25kaXRpb25zIG1pZ2h0IGhhdmUgY2hhbmdlZCB0aGF0IGluZmx1ZW5jZSB0aGUgZmVhdHVyZXMuCisgKi8KK3ZvaWQgbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWlmIChfX25ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KSkKKwkJbmV0ZGV2X2ZlYXR1cmVzX2NoYW5nZShkZXYpOwogfQogRVhQT1JUX1NZTUJPTChuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKTsKIAogLyoqCisgKgluZXRkZXZfY2hhbmdlX2ZlYXR1cmVzIC0gcmVjYWxjdWxhdGUgZGV2aWNlIGZlYXR1cmVzCisgKglAZGV2OiB0aGUgZGV2aWNlIHRvIGNoZWNrCisgKgorICoJUmVjYWxjdWxhdGUgZGV2LT5mZWF0dXJlcyBzZXQgYW5kIHNlbmQgbm90aWZpY2F0aW9ucyBldmVuCisgKglpZiB0aGV5IGhhdmUgbm90IGNoYW5nZWQuIFNob3VsZCBiZSBjYWxsZWQgaW5zdGVhZCBvZgorICoJbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcygpIGlmIGFsc28gZGV2LT52bGFuX2ZlYXR1cmVzIG1pZ2h0CisgKgloYXZlIGNoYW5nZWQgdG8gYWxsb3cgdGhlIGNoYW5nZXMgdG8gYmUgcHJvcGFnYXRlZCB0byBzdGFja2VkCisgKglWTEFOIGRldmljZXMuCisgKi8KK3ZvaWQgbmV0ZGV2X2NoYW5nZV9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCV9fbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpOworCW5ldGRldl9mZWF0dXJlc19jaGFuZ2UoZGV2KTsKK30KK0VYUE9SVF9TWU1CT0wobmV0ZGV2X2NoYW5nZV9mZWF0dXJlcyk7CisKKy8qKgogICoJbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUgLQl0cmFuc2ZlciBvcGVyc3RhdGUKICAqCUByb290ZGV2OiB0aGUgcm9vdCBvciBsb3dlciBsZXZlbCBkZXZpY2UgdG8gdHJhbnNmZXIgc3RhdGUgZnJvbQogICoJQGRldjogdGhlIGRldmljZSB0byB0cmFuc2ZlciBvcGVyc3RhdGUgdG8KQEAgLTUzODksNiArNTQzNSwxMCBAQAogCiAJZGV2LT5pZmxpbmsgPSAtMTsKIAorCXJldCA9IGRldl9nZXRfdmFsaWRfbmFtZShkZXYsIGRldi0+bmFtZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCiAJLyogSW5pdCwgaWYgdGhpcyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgKi8KIAlpZiAoZGV2LT5uZXRkZXZfb3BzLT5uZG9faW5pdCkgewogCQlyZXQgPSBkZXYtPm5ldGRldl9vcHMtPm5kb19pbml0KGRldik7CkBAIC01Mzk5LDEwICs1NDQ5LDYgQEAKIAkJfQogCX0KIAotCXJldCA9IGRldl9nZXRfdmFsaWRfbmFtZShkZXYsIGRldi0+bmFtZSwgMCk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJfdW5pbml0OwotCiAJZGV2LT5pZmluZGV4ID0gZGV2X25ld19pbmRleChuZXQpOwogCWlmIChkZXYtPmlmbGluayA9PSAtMSkKIAkJZGV2LT5pZmxpbmsgPSBkZXYtPmlmaW5kZXg7CkBAIC01NDE0LDYgKzU0NjAsMTQgQEAKIAlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU09GVF9GRUFUVVJFUzsKIAlkZXYtPndhbnRlZF9mZWF0dXJlcyA9IGRldi0+ZmVhdHVyZXMgJiBkZXYtPmh3X2ZlYXR1cmVzOwogCisJLyogVHVybiBvbiBubyBjYWNoZSBjb3B5IGlmIEhXIGlzIGRvaW5nIGNoZWNrc3VtICovCisJZGV2LT5od19mZWF0dXJlcyB8PSBORVRJRl9GX05PQ0FDSEVfQ09QWTsKKwlpZiAoKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0FMTF9DU1VNKSAmJgorCSAgICAhKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX05PX0NTVU0pKSB7CisJCWRldi0+d2FudGVkX2ZlYXR1cmVzIHw9IE5FVElGX0ZfTk9DQUNIRV9DT1BZOworCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTk9DQUNIRV9DT1BZOworCX0KKwogCS8qIEVuYWJsZSBHUk8gYW5kIE5FVElGX0ZfSElHSERNQSBmb3IgdmxhbnMgYnkgZGVmYXVsdCwKIAkgKiB2bGFuX2Rldl9pbml0KCkgd2lsbCBkbyB0aGUgZGV2LT5mZWF0dXJlcyBjaGVjaywgc28gdGhlc2UgZmVhdHVyZXMKIAkgKiBhcmUgZW5hYmxlZCBvbmx5IGlmIHN1cHBvcnRlZCBieSB1bmRlcmx5aW5nIGRldmljZS4KQEAgLTU0MzAsNyArNTQ4NCw3IEBACiAJCWdvdG8gZXJyX3VuaW5pdDsKIAlkZXYtPnJlZ19zdGF0ZSA9IE5FVFJFR19SRUdJU1RFUkVEOwogCi0JbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpOworCV9fbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpOwogCiAJLyoKIAkgKglEZWZhdWx0IGluaXRpYWwgc3RhdGUgYXQgcmVnaXN0cnkgaXMgdGhhdCB0aGUKQEAgLTU1MjcsMTkgKzU1ODEsNyBAQAogCWludCBlcnI7CiAKIAlydG5sX2xvY2soKTsKLQotCS8qCi0JICogSWYgdGhlIG5hbWUgaXMgYSBmb3JtYXQgc3RyaW5nIHRoZSBjYWxsZXIgd2FudHMgdXMgdG8gZG8gYQotCSAqIG5hbWUgYWxsb2NhdGlvbi4KLQkgKi8KLQlpZiAoc3RyY2hyKGRldi0+bmFtZSwgJyUnKSkgewotCQllcnIgPSBkZXZfYWxsb2NfbmFtZShkZXYsIGRldi0+bmFtZSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJZ290byBvdXQ7Ci0JfQotCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7Ci1vdXQ6CiAJcnRubF91bmxvY2soKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtNjAyMSw3ICs2MDYzLDcgQEAKIAkJLyogV2UgZ2V0IGhlcmUgaWYgd2UgY2FuJ3QgdXNlIHRoZSBjdXJyZW50IGRldmljZSBuYW1lICovCiAJCWlmICghcGF0KQogCQkJZ290byBvdXQ7Ci0JCWlmIChkZXZfZ2V0X3ZhbGlkX25hbWUoZGV2LCBwYXQsIDEpKQorCQlpZiAoZGV2X2dldF92YWxpZF9uYW1lKGRldiwgcGF0KSA8IDApCiAJCQlnb3RvIG91dDsKIAl9CiAKQEAgLTYxNTMsMjkgKzYxOTUsMjAgQEAKICAqLwogdTMyIG5ldGRldl9pbmNyZW1lbnRfZmVhdHVyZXModTMyIGFsbCwgdTMyIG9uZSwgdTMyIG1hc2spCiB7CisJaWYgKG1hc2sgJiBORVRJRl9GX0dFTl9DU1VNKQorCQltYXNrIHw9IE5FVElGX0ZfQUxMX0NTVU07CisJbWFzayB8PSBORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRDsKKworCWFsbCB8PSBvbmUgJiAoTkVUSUZfRl9PTkVfRk9SX0FMTHxORVRJRl9GX0FMTF9DU1VNKSAmIG1hc2s7CisJYWxsICY9IG9uZSB8IH5ORVRJRl9GX0FMTF9GT1JfQUxMOworCiAJLyogSWYgZGV2aWNlIG5lZWRzIGNoZWNrc3VtbWluZywgZG93bmdyYWRlIHRvIGl0LiAqLwotCWlmIChhbGwgJiBORVRJRl9GX05PX0NTVU0gJiYgIShvbmUgJiBORVRJRl9GX05PX0NTVU0pKQotCQlhbGwgXj0gTkVUSUZfRl9OT19DU1VNIHwgKG9uZSAmIE5FVElGX0ZfQUxMX0NTVU0pOwotCWVsc2UgaWYgKG1hc2sgJiBORVRJRl9GX0FMTF9DU1VNKSB7Ci0JCS8qIElmIG9uZSBkZXZpY2Ugc3VwcG9ydHMgdjQvdjYgY2hlY2tzdW1taW5nLCBzZXQgZm9yIGFsbC4gKi8KLQkJaWYgKG9uZSAmIChORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSkgJiYKLQkJICAgICEoYWxsICYgTkVUSUZfRl9HRU5fQ1NVTSkpIHsKLQkJCWFsbCAmPSB+TkVUSUZfRl9BTExfQ1NVTTsKLQkJCWFsbCB8PSBvbmUgJiAoTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU0pOwotCQl9CisJaWYgKGFsbCAmIChORVRJRl9GX0FMTF9DU1VNICYgfk5FVElGX0ZfTk9fQ1NVTSkpCisJCWFsbCAmPSB+TkVUSUZfRl9OT19DU1VNOwogCi0JCS8qIElmIG9uZSBkZXZpY2Ugc3VwcG9ydHMgaHcgY2hlY2tzdW1taW5nLCBzZXQgZm9yIGFsbC4gKi8KLQkJaWYgKG9uZSAmIE5FVElGX0ZfR0VOX0NTVU0gJiYgIShhbGwgJiBORVRJRl9GX0dFTl9DU1VNKSkgewotCQkJYWxsICY9IH5ORVRJRl9GX0FMTF9DU1VNOwotCQkJYWxsIHw9IE5FVElGX0ZfSFdfQ1NVTTsKLQkJfQotCX0KLQotCW9uZSB8PSBORVRJRl9GX0FMTF9DU1VNOwotCi0Jb25lIHw9IGFsbCAmIE5FVElGX0ZfT05FX0ZPUl9BTEw7Ci0JYWxsICY9IG9uZSB8IE5FVElGX0ZfTExUWCB8IE5FVElGX0ZfR1NPIHwgTkVUSUZfRl9VRk87Ci0JYWxsIHw9IG9uZSAmIG1hc2sgJiBORVRJRl9GX09ORV9GT1JfQUxMOworCS8qIElmIG9uZSBkZXZpY2Ugc3VwcG9ydHMgaHcgY2hlY2tzdW1taW5nLCBzZXQgZm9yIGFsbC4gKi8KKwlpZiAoYWxsICYgTkVUSUZfRl9HRU5fQ1NVTSkKKwkJYWxsICY9IH4oTkVUSUZfRl9BTExfQ1NVTSAmIH5ORVRJRl9GX0dFTl9DU1VNKTsKIAogCXJldHVybiBhbGw7CiB9CmRpZmYgLS1naXQgYS9uZXQvY29yZS9kc3QuYyBiL25ldC9jb3JlL2RzdC5jCmluZGV4IDkxMTA0ZDMuLjgxYTRmYTEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2RzdC5jCisrKyBiL25ldC9jb3JlL2RzdC5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2luY2x1ZGUgPG5ldC9kc3QuaD4KIApAQCAtMzMsOSArMzQsNiBAQAogICogMykgVGhpcyBsaXN0IGlzIGd1YXJkZWQgYnkgYSBtdXRleCwKICAqICAgIHNvIHRoYXQgdGhlIGdjX3Rhc2sgYW5kIGRzdF9kZXZfZXZlbnQoKSBjYW4gYmUgc3luY2hyb25pemVkLgogICovCi0jaWYgUlRfQ0FDSEVfREVCVUcgPj0gMgotc3RhdGljIGF0b21pY190CQkJIGRzdF90b3RhbCA9IEFUT01JQ19JTklUKDApOwotI2VuZGlmCiAKIC8qCiAgKiBXZSB3YW50IHRvIGtlZXAgbG9jayAmIGxpc3QgY2xvc2UgdG9nZXRoZXIKQEAgLTY5LDEwICs2Nyw2IEBACiAJdW5zaWduZWQgbG9uZyBleHBpcmVzID0gfjBMOwogCXN0cnVjdCBkc3RfZW50cnkgKmRzdCwgKm5leHQsIGhlYWQ7CiAJc3RydWN0IGRzdF9lbnRyeSAqbGFzdCA9ICZoZWFkOwotI2lmIFJUX0NBQ0hFX0RFQlVHID49IDIKLQlrdGltZV90IHRpbWVfc3RhcnQgPSBrdGltZV9nZXQoKTsKLQlzdHJ1Y3QgdGltZXNwZWMgZWxhcHNlZDsKLSNlbmRpZgogCiAJbXV0ZXhfbG9jaygmZHN0X2djX211dGV4KTsKIAluZXh0ID0gZHN0X2J1c3lfbGlzdDsKQEAgLTE0NiwxNSArMTQwLDYgQEAKIAogCXNwaW5fdW5sb2NrX2JoKCZkc3RfZ2FyYmFnZS5sb2NrKTsKIAltdXRleF91bmxvY2soJmRzdF9nY19tdXRleCk7Ci0jaWYgUlRfQ0FDSEVfREVCVUcgPj0gMgotCWVsYXBzZWQgPSBrdGltZV90b190aW1lc3BlYyhrdGltZV9zdWIoa3RpbWVfZ2V0KCksIHRpbWVfc3RhcnQpKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiZHN0X3RvdGFsOiAlZCBkZWxheWVkOiAlZCB3b3JrX3BlcmY6ICVkIgotCQkiIGV4cGlyZXM6ICVsdSBlbGFwc2VkOiAlbHUgdXNcbiIsCi0JCWF0b21pY19yZWFkKCZkc3RfdG90YWwpLCBkZWxheWVkLCB3b3JrX3BlcmZvcm1lZCwKLQkJZXhwaXJlcywKLQkJZWxhcHNlZC50dl9zZWMgKiBVU0VDX1BFUl9TRUMgKwotCQkgIGVsYXBzZWQudHZfbnNlYyAvIE5TRUNfUEVSX1VTRUMpOwotI2VuZGlmCiB9CiAKIGludCBkc3RfZGlzY2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMTY2LDcgKzE1MSw4IEBACiAKIGNvbnN0IHUzMiBkc3RfZGVmYXVsdF9tZXRyaWNzW1JUQVhfTUFYXTsKIAotdm9pZCAqZHN0X2FsbG9jKHN0cnVjdCBkc3Rfb3BzICpvcHMsIGludCBpbml0aWFsX3JlZikKK3ZvaWQgKmRzdF9hbGxvYyhzdHJ1Y3QgZHN0X29wcyAqb3BzLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQlpbnQgaW5pdGlhbF9yZWYsIGludCBpbml0aWFsX29ic29sZXRlLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0OwogCkBAIC0xNzQsMTggKzE2MCwzNiBAQAogCQlpZiAob3BzLT5nYyhvcHMpKQogCQkJcmV0dXJuIE5VTEw7CiAJfQotCWRzdCA9IGttZW1fY2FjaGVfemFsbG9jKG9wcy0+a21lbV9jYWNoZXAsIEdGUF9BVE9NSUMpOworCWRzdCA9IGttZW1fY2FjaGVfYWxsb2Mob3BzLT5rbWVtX2NhY2hlcCwgR0ZQX0FUT01JQyk7CiAJaWYgKCFkc3QpCiAJCXJldHVybiBOVUxMOwotCWF0b21pY19zZXQoJmRzdC0+X19yZWZjbnQsIGluaXRpYWxfcmVmKTsKKwlkc3QtPmNoaWxkID0gTlVMTDsKKwlkc3QtPmRldiA9IGRldjsKKwlpZiAoZGV2KQorCQlkZXZfaG9sZChkZXYpOwogCWRzdC0+b3BzID0gb3BzOwotCWRzdC0+bGFzdHVzZSA9IGppZmZpZXM7Ci0JZHN0LT5wYXRoID0gZHN0OwotCWRzdC0+aW5wdXQgPSBkc3QtPm91dHB1dCA9IGRzdF9kaXNjYXJkOwogCWRzdF9pbml0X21ldHJpY3MoZHN0LCBkc3RfZGVmYXVsdF9tZXRyaWNzLCB0cnVlKTsKLSNpZiBSVF9DQUNIRV9ERUJVRyA+PSAyCi0JYXRvbWljX2luYygmZHN0X3RvdGFsKTsKKwlkc3QtPmV4cGlyZXMgPSAwVUw7CisJZHN0LT5wYXRoID0gZHN0OworCWRzdC0+bmVpZ2hib3VyID0gTlVMTDsKKwlkc3QtPmhoID0gTlVMTDsKKyNpZmRlZiBDT05GSUdfWEZSTQorCWRzdC0+eGZybSA9IE5VTEw7CiAjZW5kaWYKKwlkc3QtPmlucHV0ID0gZHN0X2Rpc2NhcmQ7CisJZHN0LT5vdXRwdXQgPSBkc3RfZGlzY2FyZDsKKwlkc3QtPmVycm9yID0gMDsKKwlkc3QtPm9ic29sZXRlID0gaW5pdGlhbF9vYnNvbGV0ZTsKKwlkc3QtPmhlYWRlcl9sZW4gPSAwOworCWRzdC0+dHJhaWxlcl9sZW4gPSAwOworI2lmZGVmIENPTkZJR19JUF9ST1VURV9DTEFTU0lECisJZHN0LT50Y2xhc3NpZCA9IDA7CisjZW5kaWYKKwlhdG9taWNfc2V0KCZkc3QtPl9fcmVmY250LCBpbml0aWFsX3JlZik7CisJZHN0LT5fX3VzZSA9IDA7CisJZHN0LT5sYXN0dXNlID0gamlmZmllczsKKwlkc3QtPmZsYWdzID0gZmxhZ3M7CisJZHN0LT5uZXh0ID0gTlVMTDsKIAlkc3RfZW50cmllc19hZGQob3BzLCAxKTsKIAlyZXR1cm4gZHN0OwogfQpAQCAtMjQ1LDkgKzI0OSw2IEBACiAJCWRzdC0+b3BzLT5kZXN0cm95KGRzdCk7CiAJaWYgKGRzdC0+ZGV2KQogCQlkZXZfcHV0KGRzdC0+ZGV2KTsKLSNpZiBSVF9DQUNIRV9ERUJVRyA+PSAyCi0JYXRvbWljX2RlYygmZHN0X3RvdGFsKTsKLSNlbmRpZgogCWttZW1fY2FjaGVfZnJlZShkc3QtPm9wcy0+a21lbV9jYWNoZXAsIGRzdCk7CiAKIAlkc3QgPSBjaGlsZDsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2V0aHRvb2wuYyBiL25ldC9jb3JlL2V0aHRvb2wuYwppbmRleCA3NGVhZDllLi44NGU3MzA0IDEwMDY0NAotLS0gYS9uZXQvY29yZS9ldGh0b29sLmMKKysrIGIvbmV0L2NvcmUvZXRodG9vbC5jCkBAIC0yMSw2ICsyMSw4IEBACiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogLyoKICAqIFNvbWUgdXNlZnVsIGV0aHRvb2xfb3BzIG1ldGhvZHMgdGhhdCdyZSBkZXZpY2UgaW5kZXBlbmRlbnQuCkBAIC0zMTcsNyArMzE5LDcgQEAKIAogCWRldi0+d2FudGVkX2ZlYXR1cmVzICY9IH5mZWF0dXJlc1swXS52YWxpZDsKIAlkZXYtPndhbnRlZF9mZWF0dXJlcyB8PSBmZWF0dXJlc1swXS52YWxpZCAmIGZlYXR1cmVzWzBdLnJlcXVlc3RlZDsKLQluZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7CisJX19uZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7CiAKIAlpZiAoKGRldi0+d2FudGVkX2ZlYXR1cmVzIF4gZGV2LT5mZWF0dXJlcykgJiBmZWF0dXJlc1swXS52YWxpZCkKIAkJcmV0IHw9IEVUSFRPT0xfRl9XSVNIOwpAQCAtMzMwLDcgKzMzMiw3IEBACiAJLyogTkVUSUZfRl9JUF9DU1VNICovICAgICAgICAgInR4LWNoZWNrc3VtLWlwdjQiLAogCS8qIE5FVElGX0ZfTk9fQ1NVTSAqLyAgICAgICAgICJ0eC1jaGVja3N1bS11bm5lZWRlZCIsCiAJLyogTkVUSUZfRl9IV19DU1VNICovICAgICAgICAgInR4LWNoZWNrc3VtLWlwLWdlbmVyaWMiLAotCS8qIE5FVElGX0ZfSVBWNl9DU1VNICovICAgICAgICJ0eF9jaGVja3N1bS1pcHY2IiwKKwkvKiBORVRJRl9GX0lQVjZfQ1NVTSAqLyAgICAgICAidHgtY2hlY2tzdW0taXB2NiIsCiAJLyogTkVUSUZfRl9ISUdIRE1BICovICAgICAgICAgImhpZ2hkbWEiLAogCS8qIE5FVElGX0ZfRlJBR0xJU1QgKi8gICAgICAgICJ0eC1zY2F0dGVyLWdhdGhlci1mcmFnbGlzdCIsCiAJLyogTkVUSUZfRl9IV19WTEFOX1RYICovICAgICAgInR4LXZsYW4taHctaW5zZXJ0IiwKQEAgLTM1OSw4ICszNjEsOCBAQAogCS8qIE5FVElGX0ZfTlRVUExFICovICAgICAgICAgICJyeC1udHVwbGUtZmlsdGVyIiwKIAkvKiBORVRJRl9GX1JYSEFTSCAqLyAgICAgICAgICAicngtaGFzaGluZyIsCiAJLyogTkVUSUZfRl9SWENTVU0gKi8gICAgICAgICAgInJ4LWNoZWNrc3VtIiwKLQkiIiwKLQkiIiwKKwkvKiBORVRJRl9GX05PQ0FDSEVfQ09QWSAqLyAgICAidHgtbm9jYWNoZS1jb3B5IiwKKwkvKiBORVRJRl9GX0xPT1BCQUNLICovICAgICAgICAibG9vcGJhY2siLAogfTsKIAogc3RhdGljIGludCBfX2V0aHRvb2xfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHNzZXQpCkBAIC00OTksNyArNTAxLDcgQEAKIAkJZWxzZQogCQkJZGV2LT53YW50ZWRfZmVhdHVyZXMgJj0gfm1hc2s7CiAKLQkJbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpOworCQlfX25ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC01NDQsMTQgKzU0NiwxNCBAQAogCX0KIAogCS8qIGFsbG93IGNoYW5naW5nIG9ubHkgYml0cyBzZXQgaW4gaHdfZmVhdHVyZXMgKi8KLQljaGFuZ2VkID0gKGRhdGEgXiBkZXYtPndhbnRlZF9mZWF0dXJlcykgJiBmbGFnc19kdXBfZmVhdHVyZXM7CisJY2hhbmdlZCA9IChkYXRhIF4gZGV2LT5mZWF0dXJlcykgJiBmbGFnc19kdXBfZmVhdHVyZXM7CiAJaWYgKGNoYW5nZWQgJiB+ZGV2LT5od19mZWF0dXJlcykKIAkJcmV0dXJuIChjaGFuZ2VkICYgZGV2LT5od19mZWF0dXJlcykgPyAtRUlOVkFMIDogLUVPUE5PVFNVUFA7CiAKIAlkZXYtPndhbnRlZF9mZWF0dXJlcyA9Ci0JCShkZXYtPndhbnRlZF9mZWF0dXJlcyAmIH5jaGFuZ2VkKSB8IGRhdGE7CisJCShkZXYtPndhbnRlZF9mZWF0dXJlcyAmIH5jaGFuZ2VkKSB8IChkYXRhICYgZGV2LT5od19mZWF0dXJlcyk7CiAKLQluZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7CisJX19uZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTkwOCw2ICs5MTAsOSBAQAogCXN0cnVjdCBldGh0b29sX3J4X250dXBsZV9mbG93X3NwZWNfY29udGFpbmVyICpmc2MgPSBOVUxMOwogCWludCByZXQ7CiAKKwlpZiAoIW9wcy0+c2V0X3J4X250dXBsZSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCiAJaWYgKCEoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTlRVUExFKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTE0NDEsNiArMTQ0NiwzNSBAQAogCXJldHVybiBkZXYtPmV0aHRvb2xfb3BzLT5zZXRfcmluZ3BhcmFtKGRldiwgJnJpbmdwYXJhbSk7CiB9CiAKK3N0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IGV0aHRvb2xfZ2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCQkgICB2b2lkIF9fdXNlciAqdXNlcmFkZHIpCit7CisJc3RydWN0IGV0aHRvb2xfY2hhbm5lbHMgY2hhbm5lbHMgPSB7IC5jbWQgPSBFVEhUT09MX0dDSEFOTkVMUyB9OworCisJaWYgKCFkZXYtPmV0aHRvb2xfb3BzLT5nZXRfY2hhbm5lbHMpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWRldi0+ZXRodG9vbF9vcHMtPmdldF9jaGFubmVscyhkZXYsICZjaGFubmVscyk7CisKKwlpZiAoY29weV90b191c2VyKHVzZXJhZGRyLCAmY2hhbm5lbHMsIHNpemVvZihjaGFubmVscykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayBpbnQgZXRodG9vbF9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJCSAgIHZvaWQgX191c2VyICp1c2VyYWRkcikKK3sKKwlzdHJ1Y3QgZXRodG9vbF9jaGFubmVscyBjaGFubmVsczsKKworCWlmICghZGV2LT5ldGh0b29sX29wcy0+c2V0X2NoYW5uZWxzKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmNoYW5uZWxzLCB1c2VyYWRkciwgc2l6ZW9mKGNoYW5uZWxzKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIGRldi0+ZXRodG9vbF9vcHMtPnNldF9jaGFubmVscyhkZXYsICZjaGFubmVscyk7Cit9CisKIHN0YXRpYyBpbnQgZXRodG9vbF9nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpCiB7CiAJc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSBwYXVzZXBhcmFtID0geyBFVEhUT09MX0dQQVVTRVBBUkFNIH07CkBAIC0xNjE4LDE0ICsxNjUyLDYwIEBACiBzdGF0aWMgaW50IGV0aHRvb2xfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpCiB7CiAJc3RydWN0IGV0aHRvb2xfdmFsdWUgaWQ7CisJc3RhdGljIGJvb2wgYnVzeTsKKwlpbnQgcmM7CiAKLQlpZiAoIWRldi0+ZXRodG9vbF9vcHMtPnBoeXNfaWQpCisJaWYgKCFkZXYtPmV0aHRvb2xfb3BzLT5zZXRfcGh5c19pZCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCisJaWYgKGJ1c3kpCisJCXJldHVybiAtRUJVU1k7CisKIAlpZiAoY29weV9mcm9tX3VzZXIoJmlkLCB1c2VyYWRkciwgc2l6ZW9mKGlkKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRldi0+ZXRodG9vbF9vcHMtPnBoeXNfaWQoZGV2LCBpZC5kYXRhKTsKKwlyYyA9IGRldi0+ZXRodG9vbF9vcHMtPnNldF9waHlzX2lkKGRldiwgRVRIVE9PTF9JRF9BQ1RJVkUpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCS8qIERyb3AgdGhlIFJUTkwgbG9jayB3aGlsZSB3YWl0aW5nLCBidXQgcHJldmVudCByZWVudHJ5IG9yCisJICogcmVtb3ZhbCBvZiB0aGUgZGV2aWNlLgorCSAqLworCWJ1c3kgPSB0cnVlOworCWRldl9ob2xkKGRldik7CisJcnRubF91bmxvY2soKTsKKworCWlmIChyYyA9PSAwKSB7CisJCS8qIERyaXZlciB3aWxsIGhhbmRsZSB0aGlzIGl0c2VsZiAqLworCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoCisJCQlpZC5kYXRhID8gKGlkLmRhdGEgKiBIWikgOiBNQVhfU0NIRURVTEVfVElNRU9VVCk7CisJfSBlbHNlIHsKKwkJLyogRHJpdmVyIGV4cGVjdHMgdG8gYmUgY2FsbGVkIGF0IHR3aWNlIHRoZSBmcmVxdWVuY3kgaW4gcmMgKi8KKwkJaW50IG4gPSByYyAqIDIsIGksIGludGVydmFsID0gSFogLyBuOworCisJCS8qIENvdW50IGRvd24gc2Vjb25kcyAqLworCQlkbyB7CisJCQkvKiBDb3VudCBkb3duIGl0ZXJhdGlvbnMgcGVyIHNlY29uZCAqLworCQkJaSA9IG47CisJCQlkbyB7CisJCQkJcnRubF9sb2NrKCk7CisJCQkJcmMgPSBkZXYtPmV0aHRvb2xfb3BzLT5zZXRfcGh5c19pZChkZXYsCisJCQkJICAgIChpICYgMSkgPyBFVEhUT09MX0lEX09GRiA6IEVUSFRPT0xfSURfT04pOworCQkJCXJ0bmxfdW5sb2NrKCk7CisJCQkJaWYgKHJjKQorCQkJCQlicmVhazsKKwkJCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoaW50ZXJ2YWwpOworCQkJfSB3aGlsZSAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpICYmIC0taSAhPSAwKTsKKwkJfSB3aGlsZSAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpICYmCisJCQkgKGlkLmRhdGEgPT0gMCB8fCAtLWlkLmRhdGEgIT0gMCkpOworCX0KKworCXJ0bmxfbG9jaygpOworCWRldl9wdXQoZGV2KTsKKwlidXN5ID0gZmFsc2U7CisKKwkodm9pZClkZXYtPmV0aHRvb2xfb3BzLT5zZXRfcGh5c19pZChkZXYsIEVUSFRPT0xfSURfSU5BQ1RJVkUpOworCXJldHVybiByYzsKIH0KIAogc3RhdGljIGludCBldGh0b29sX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpCkBAIC0xNzQzLDYgKzE4MjMsODcgQEAKIAlyZXR1cm4gZGV2LT5ldGh0b29sX29wcy0+Zmxhc2hfZGV2aWNlKGRldiwgJmVmbCk7CiB9CiAKK3N0YXRpYyBpbnQgZXRodG9vbF9zZXRfZHVtcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJdm9pZCBfX3VzZXIgKnVzZXJhZGRyKQoreworCXN0cnVjdCBldGh0b29sX2R1bXAgZHVtcDsKKworCWlmICghZGV2LT5ldGh0b29sX29wcy0+c2V0X2R1bXApCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmZHVtcCwgdXNlcmFkZHIsIHNpemVvZihkdW1wKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIGRldi0+ZXRodG9vbF9vcHMtPnNldF9kdW1wKGRldiwgJmR1bXApOworfQorCitzdGF0aWMgaW50IGV0aHRvb2xfZ2V0X2R1bXBfZmxhZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXZvaWQgX191c2VyICp1c2VyYWRkcikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBldGh0b29sX2R1bXAgZHVtcDsKKwljb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgKm9wcyA9IGRldi0+ZXRodG9vbF9vcHM7CisKKwlpZiAoIWRldi0+ZXRodG9vbF9vcHMtPmdldF9kdW1wX2ZsYWcpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmZHVtcCwgdXNlcmFkZHIsIHNpemVvZihkdW1wKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0ID0gb3BzLT5nZXRfZHVtcF9mbGFnKGRldiwgJmR1bXApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoY29weV90b191c2VyKHVzZXJhZGRyLCAmZHVtcCwgc2l6ZW9mKGR1bXApKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXRodG9vbF9nZXRfZHVtcF9kYXRhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJdm9pZCBfX3VzZXIgKnVzZXJhZGRyKQoreworCWludCByZXQ7CisJX191MzIgbGVuOworCXN0cnVjdCBldGh0b29sX2R1bXAgZHVtcCwgdG1wOworCWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyAqb3BzID0gZGV2LT5ldGh0b29sX29wczsKKwl2b2lkICpkYXRhID0gTlVMTDsKKworCWlmICghZGV2LT5ldGh0b29sX29wcy0+Z2V0X2R1bXBfZGF0YSB8fAorCQkhZGV2LT5ldGh0b29sX29wcy0+Z2V0X2R1bXBfZmxhZykKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZkdW1wLCB1c2VyYWRkciwgc2l6ZW9mKGR1bXApKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwltZW1zZXQoJnRtcCwgMCwgc2l6ZW9mKHRtcCkpOworCXRtcC5jbWQgPSBFVEhUT09MX0dFVF9EVU1QX0ZMQUc7CisJcmV0ID0gb3BzLT5nZXRfZHVtcF9mbGFnKGRldiwgJnRtcCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWxlbiA9ICh0bXAubGVuID4gZHVtcC5sZW4pID8gZHVtcC5sZW4gOiB0bXAubGVuOworCWlmICghbGVuKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWRhdGEgPSB2emFsbG9jKHRtcC5sZW4pOworCWlmICghZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0ID0gb3BzLT5nZXRfZHVtcF9kYXRhKGRldiwgJmR1bXAsIGRhdGEpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJaWYgKGNvcHlfdG9fdXNlcih1c2VyYWRkciwgJmR1bXAsIHNpemVvZihkdW1wKSkpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQorCXVzZXJhZGRyICs9IG9mZnNldG9mKHN0cnVjdCBldGh0b29sX2R1bXAsIGRhdGEpOworCWlmIChjb3B5X3RvX3VzZXIodXNlcmFkZHIsIGRhdGEsIGxlbikpCisJCXJldCA9IC1FRkFVTFQ7CitvdXQ6CisJdmZyZWUoZGF0YSk7CisJcmV0dXJuIHJldDsKK30KKwogLyogVGhlIG1haW4gZW50cnkgcG9pbnQgaW4gdGhpcyBmaWxlLiAgQ2FsbGVkIGZyb20gbmV0L2NvcmUvZGV2LmMgKi8KIAogaW50IGRldl9ldGh0b29sKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlmcmVxICppZnIpCkBAIC0xOTUzLDYgKzIxMTQsMjEgQEAKIAljYXNlIEVUSFRPT0xfU0dSTzoKIAkJcmMgPSBldGh0b29sX3NldF9vbmVfZmVhdHVyZShkZXYsIHVzZXJhZGRyLCBldGhjbWQpOwogCQlicmVhazsKKwljYXNlIEVUSFRPT0xfR0NIQU5ORUxTOgorCQlyYyA9IGV0aHRvb2xfZ2V0X2NoYW5uZWxzKGRldiwgdXNlcmFkZHIpOworCQlicmVhazsKKwljYXNlIEVUSFRPT0xfU0NIQU5ORUxTOgorCQlyYyA9IGV0aHRvb2xfc2V0X2NoYW5uZWxzKGRldiwgdXNlcmFkZHIpOworCQlicmVhazsKKwljYXNlIEVUSFRPT0xfU0VUX0RVTVA6CisJCXJjID0gZXRodG9vbF9zZXRfZHVtcChkZXYsIHVzZXJhZGRyKTsKKwkJYnJlYWs7CisJY2FzZSBFVEhUT09MX0dFVF9EVU1QX0ZMQUc6CisJCXJjID0gZXRodG9vbF9nZXRfZHVtcF9mbGFnKGRldiwgdXNlcmFkZHIpOworCQlicmVhazsKKwljYXNlIEVUSFRPT0xfR0VUX0RVTVBfREFUQToKKwkJcmMgPSBldGh0b29sX2dldF9kdW1wX2RhdGEoZGV2LCB1c2VyYWRkcik7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJjID0gLUVPUE5PVFNVUFA7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmliX3J1bGVzLmMgYi9uZXQvY29yZS9maWJfcnVsZXMuYwppbmRleCA4MjQ4ZWJiLi4zOTExNTg2IDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWJfcnVsZXMuYworKysgYi9uZXQvY29yZS9maWJfcnVsZXMuYwpAQCAtNTkwLDcgKzU5MCw4IEBACiAJaW50IGlkeCA9IDA7CiAJc3RydWN0IGZpYl9ydWxlICpydWxlOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShydWxlLCAmb3BzLT5ydWxlc19saXN0LCBsaXN0KSB7CisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJ1bGUsICZvcHMtPnJ1bGVzX2xpc3QsIGxpc3QpIHsKIAkJaWYgKGlkeCA8IGNiLT5hcmdzWzFdKQogCQkJZ290byBza2lwOwogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IGFmYjhhZmIuLjBlYjhjNDQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCisrKyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC0zOSw2NSArMzksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZpbHRlci5oPgogI2luY2x1ZGUgPGxpbnV4L3JlY2lwcm9jYWxfZGl2Lmg+CiAKLWVudW0gewotCUJQRl9TX1JFVF9LID0gMSwKLQlCUEZfU19SRVRfQSwKLQlCUEZfU19BTFVfQUREX0ssCi0JQlBGX1NfQUxVX0FERF9YLAotCUJQRl9TX0FMVV9TVUJfSywKLQlCUEZfU19BTFVfU1VCX1gsCi0JQlBGX1NfQUxVX01VTF9LLAotCUJQRl9TX0FMVV9NVUxfWCwKLQlCUEZfU19BTFVfRElWX1gsCi0JQlBGX1NfQUxVX0FORF9LLAotCUJQRl9TX0FMVV9BTkRfWCwKLQlCUEZfU19BTFVfT1JfSywKLQlCUEZfU19BTFVfT1JfWCwKLQlCUEZfU19BTFVfTFNIX0ssCi0JQlBGX1NfQUxVX0xTSF9YLAotCUJQRl9TX0FMVV9SU0hfSywKLQlCUEZfU19BTFVfUlNIX1gsCi0JQlBGX1NfQUxVX05FRywKLQlCUEZfU19MRF9XX0FCUywKLQlCUEZfU19MRF9IX0FCUywKLQlCUEZfU19MRF9CX0FCUywKLQlCUEZfU19MRF9XX0xFTiwKLQlCUEZfU19MRF9XX0lORCwKLQlCUEZfU19MRF9IX0lORCwKLQlCUEZfU19MRF9CX0lORCwKLQlCUEZfU19MRF9JTU0sCi0JQlBGX1NfTERYX1dfTEVOLAotCUJQRl9TX0xEWF9CX01TSCwKLQlCUEZfU19MRFhfSU1NLAotCUJQRl9TX01JU0NfVEFYLAotCUJQRl9TX01JU0NfVFhBLAotCUJQRl9TX0FMVV9ESVZfSywKLQlCUEZfU19MRF9NRU0sCi0JQlBGX1NfTERYX01FTSwKLQlCUEZfU19TVCwKLQlCUEZfU19TVFgsCi0JQlBGX1NfSk1QX0pBLAotCUJQRl9TX0pNUF9KRVFfSywKLQlCUEZfU19KTVBfSkVRX1gsCi0JQlBGX1NfSk1QX0pHRV9LLAotCUJQRl9TX0pNUF9KR0VfWCwKLQlCUEZfU19KTVBfSkdUX0ssCi0JQlBGX1NfSk1QX0pHVF9YLAotCUJQRl9TX0pNUF9KU0VUX0ssCi0JQlBGX1NfSk1QX0pTRVRfWCwKLQkvKiBBbmNpbGxhcnkgZGF0YSAqLwotCUJQRl9TX0FOQ19QUk9UT0NPTCwKLQlCUEZfU19BTkNfUEtUVFlQRSwKLQlCUEZfU19BTkNfSUZJTkRFWCwKLQlCUEZfU19BTkNfTkxBVFRSLAotCUJQRl9TX0FOQ19OTEFUVFJfTkVTVCwKLQlCUEZfU19BTkNfTUFSSywKLQlCUEZfU19BTkNfUVVFVUUsCi0JQlBGX1NfQU5DX0hBVFlQRSwKLQlCUEZfU19BTkNfUlhIQVNILAotCUJQRl9TX0FOQ19DUFUsCi19OwotCiAvKiBObyBodXJyeSBpbiB0aGlzIGJyYW5jaCAqLwogc3RhdGljIHZvaWQgKl9fbG9hZF9wb2ludGVyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGludCBrLCB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKQEAgLTE0NSw3ICs4Niw3IEBACiAJcmN1X3JlYWRfbG9jaygpOwogCWZpbHRlciA9IHJjdV9kZXJlZmVyZW5jZShzay0+c2tfZmlsdGVyKTsKIAlpZiAoZmlsdGVyKSB7Ci0JCXVuc2lnbmVkIGludCBwa3RfbGVuID0gc2tfcnVuX2ZpbHRlcihza2IsIGZpbHRlci0+aW5zbnMpOworCQl1bnNpZ25lZCBpbnQgcGt0X2xlbiA9IFNLX1JVTl9GSUxURVIoZmlsdGVyLCBza2IpOwogCiAJCWVyciA9IHBrdF9sZW4gPyBwc2tiX3RyaW0oc2tiLCBwa3RfbGVuKSA6IC1FUEVSTTsKIAl9CkBAIC02MzgsNiArNTc5LDcgQEAKIHsKIAlzdHJ1Y3Qgc2tfZmlsdGVyICpmcCA9IGNvbnRhaW5lcl9vZihyY3UsIHN0cnVjdCBza19maWx0ZXIsIHJjdSk7CiAKKwlicGZfaml0X2ZyZWUoZnApOwogCWtmcmVlKGZwKTsKIH0KIEVYUE9SVF9TWU1CT0woc2tfZmlsdGVyX3JlbGVhc2VfcmN1KTsKQEAgLTY3Miw2ICs2MTQsNyBAQAogCiAJYXRvbWljX3NldCgmZnAtPnJlZmNudCwgMSk7CiAJZnAtPmxlbiA9IGZwcm9nLT5sZW47CisJZnAtPmJwZl9mdW5jID0gc2tfcnVuX2ZpbHRlcjsKIAogCWVyciA9IHNrX2Noa19maWx0ZXIoZnAtPmluc25zLCBmcC0+bGVuKTsKIAlpZiAoZXJyKSB7CkBAIC02NzksNiArNjIyLDggQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKKwlicGZfaml0X2NvbXBpbGUoZnApOworCiAJb2xkX2ZwID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzay0+c2tfZmlsdGVyLAogCQkJCQkgICBzb2NrX293bmVkX2J5X3VzZXIoc2spKTsKIAlyY3VfYXNzaWduX3BvaW50ZXIoc2stPnNrX2ZpbHRlciwgZnApOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmMgYi9uZXQvY29yZS9uZXQtc3lzZnMuYwppbmRleCA4MGIyYWFkLi4xMWI5OGJjIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXQtc3lzZnMuYworKysgYi9uZXQvY29yZS9uZXQtc3lzZnMuYwpAQCAtMjgsNiArMjgsNyBAQAogc3RhdGljIGNvbnN0IGNoYXIgZm10X2hleFtdID0gIiUjeFxuIjsKIHN0YXRpYyBjb25zdCBjaGFyIGZtdF9sb25nX2hleFtdID0gIiUjbHhcbiI7CiBzdGF0aWMgY29uc3QgY2hhciBmbXRfZGVjW10gPSAiJWRcbiI7CitzdGF0aWMgY29uc3QgY2hhciBmbXRfdWRlY1tdID0gIiV1XG4iOwogc3RhdGljIGNvbnN0IGNoYXIgZm10X3Vsb25nW10gPSAiJWx1XG4iOwogc3RhdGljIGNvbnN0IGNoYXIgZm10X3U2NFtdID0gIiVsbHVcbiI7CiAKQEAgLTE0NSwxMyArMTQ2LDEwIEBACiAJaWYgKCFydG5sX3RyeWxvY2soKSkKIAkJcmV0dXJuIHJlc3RhcnRfc3lzY2FsbCgpOwogCi0JaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSAmJgotCSAgICBuZXRkZXYtPmV0aHRvb2xfb3BzICYmCi0JICAgIG5ldGRldi0+ZXRodG9vbF9vcHMtPmdldF9zZXR0aW5ncykgewotCQlzdHJ1Y3QgZXRodG9vbF9jbWQgY21kID0geyBFVEhUT09MX0dTRVQgfTsKLQotCQlpZiAoIW5ldGRldi0+ZXRodG9vbF9vcHMtPmdldF9zZXR0aW5ncyhuZXRkZXYsICZjbWQpKQotCQkJcmV0ID0gc3ByaW50ZihidWYsIGZtdF9kZWMsIGV0aHRvb2xfY21kX3NwZWVkKCZjbWQpKTsKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCXN0cnVjdCBldGh0b29sX2NtZCBjbWQ7CisJCWlmICghZGV2X2V0aHRvb2xfZ2V0X3NldHRpbmdzKG5ldGRldiwgJmNtZCkpCisJCQlyZXQgPSBzcHJpbnRmKGJ1ZiwgZm10X3VkZWMsIGV0aHRvb2xfY21kX3NwZWVkKCZjbWQpKTsKIAl9CiAJcnRubF91bmxvY2soKTsKIAlyZXR1cm4gcmV0OwpAQCAtMTY2LDEzICsxNjQsMTEgQEAKIAlpZiAoIXJ0bmxfdHJ5bG9jaygpKQogCQlyZXR1cm4gcmVzdGFydF9zeXNjYWxsKCk7CiAKLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpICYmCi0JICAgIG5ldGRldi0+ZXRodG9vbF9vcHMgJiYKLQkgICAgbmV0ZGV2LT5ldGh0b29sX29wcy0+Z2V0X3NldHRpbmdzKSB7Ci0JCXN0cnVjdCBldGh0b29sX2NtZCBjbWQgPSB7IEVUSFRPT0xfR1NFVCB9OwotCi0JCWlmICghbmV0ZGV2LT5ldGh0b29sX29wcy0+Z2V0X3NldHRpbmdzKG5ldGRldiwgJmNtZCkpCi0JCQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBjbWQuZHVwbGV4ID8gImZ1bGwiIDogImhhbGYiKTsKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCXN0cnVjdCBldGh0b29sX2NtZCBjbWQ7CisJCWlmICghZGV2X2V0aHRvb2xfZ2V0X3NldHRpbmdzKG5ldGRldiwgJmNtZCkpCisJCQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVzXG4iLAorCQkJCSAgICAgIGNtZC5kdXBsZXggPyAiZnVsbCIgOiAiaGFsZiIpOwogCX0KIAlydG5sX3VubG9jaygpOwogCXJldHVybiByZXQ7CkBAIC05NDYsNyArOTQyLDcgQEAKIAkJfSBlbHNlCiAJCQlwb3MgPSBtYXBfbGVuID0gYWxsb2NfbGVuID0gMDsKIAotCQluZWVkX3NldCA9IGNwdV9pc3NldChjcHUsICptYXNrKSAmJiBjcHVfb25saW5lKGNwdSk7CisJCW5lZWRfc2V0ID0gY3B1bWFza190ZXN0X2NwdShjcHUsIG1hc2spICYmIGNwdV9vbmxpbmUoY3B1KTsKICNpZmRlZiBDT05GSUdfTlVNQQogCQlpZiAobmVlZF9zZXQpIHsKIAkJCWlmIChudW1hX25vZGUgPT0gLTIpCmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMgYi9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMKaW5kZXggMjk3YmI5Mi4uMmUyZGNlNiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jCisrKyBiL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYwpAQCAtMjA4LDExICsyMDgsMTQgQEAKIAlrbWVtX2NhY2hlX2ZyZWUobmV0X2NhY2hlcCwgbmV0KTsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXQgKm5ldF9jcmVhdGUodm9pZCkKK3N0cnVjdCBuZXQgKmNvcHlfbmV0X25zKHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHN0cnVjdCBuZXQgKm9sZF9uZXQpCiB7CiAJc3RydWN0IG5ldCAqbmV0OwogCWludCBydjsKIAorCWlmICghKGZsYWdzICYgQ0xPTkVfTkVXTkVUKSkKKwkJcmV0dXJuIGdldF9uZXQob2xkX25ldCk7CisKIAluZXQgPSBuZXRfYWxsb2MoKTsKIAlpZiAoIW5ldCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CkBAIC0yMzEsMTMgKzIzNCw2IEBACiAJcmV0dXJuIG5ldDsKIH0KIAotc3RydWN0IG5ldCAqY29weV9uZXRfbnModW5zaWduZWQgbG9uZyBmbGFncywgc3RydWN0IG5ldCAqb2xkX25ldCkKLXsKLQlpZiAoIShmbGFncyAmIENMT05FX05FV05FVCkpCi0JCXJldHVybiBnZXRfbmV0KG9sZF9uZXQpOwotCXJldHVybiBuZXRfY3JlYXRlKCk7Ci19Ci0KIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY2xlYW51cF9saXN0X2xvY2spOwogc3RhdGljIExJU1RfSEVBRChjbGVhbnVwX2xpc3QpOyAgLyogTXVzdCBob2xkIGNsZWFudXBfbGlzdF9sb2NrIHRvIHRvdWNoICovCiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldHBvbGwuYyBiL25ldC9jb3JlL25ldHBvbGwuYwppbmRleCAwNmJlMjQzLi4yZDdkNmQ0IDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRwb2xsLmMKKysrIGIvbmV0L2NvcmUvbmV0cG9sbC5jCkBAIC01MzksNyArNTM5LDcgQEAKIHsKIAlpbnQgcHJvdG8sIGxlbiwgdWxlbjsKIAlpbnQgaGl0cyA9IDA7Ci0Jc3RydWN0IGlwaGRyICppcGg7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGg7CiAJc3RydWN0IHVkcGhkciAqdWg7CiAJc3RydWN0IG5ldHBvbGxfaW5mbyAqbnBpbmZvID0gc2tiLT5kZXYtPm5waW5mbzsKIAlzdHJ1Y3QgbmV0cG9sbCAqbnAsICp0bXA7CkBAIC02OTgsMzIgKzY5OCw4IEBACiAKIAlpZiAoKmN1ciAhPSAwKSB7CiAJCS8qIE1BQyBhZGRyZXNzICovCi0JCWlmICgoZGVsaW0gPSBzdHJjaHIoY3VyLCAnOicpKSA9PSBOVUxMKQorCQlpZiAoIW1hY19wdG9uKGN1ciwgbnAtPnJlbW90ZV9tYWMpKQogCQkJZ290byBwYXJzZV9mYWlsZWQ7Ci0JCSpkZWxpbSA9IDA7Ci0JCW5wLT5yZW1vdGVfbWFjWzBdID0gc2ltcGxlX3N0cnRvbChjdXIsIE5VTEwsIDE2KTsKLQkJY3VyID0gZGVsaW0gKyAxOwotCQlpZiAoKGRlbGltID0gc3RyY2hyKGN1ciwgJzonKSkgPT0gTlVMTCkKLQkJCWdvdG8gcGFyc2VfZmFpbGVkOwotCQkqZGVsaW0gPSAwOwotCQlucC0+cmVtb3RlX21hY1sxXSA9IHNpbXBsZV9zdHJ0b2woY3VyLCBOVUxMLCAxNik7Ci0JCWN1ciA9IGRlbGltICsgMTsKLQkJaWYgKChkZWxpbSA9IHN0cmNocihjdXIsICc6JykpID09IE5VTEwpCi0JCQlnb3RvIHBhcnNlX2ZhaWxlZDsKLQkJKmRlbGltID0gMDsKLQkJbnAtPnJlbW90ZV9tYWNbMl0gPSBzaW1wbGVfc3RydG9sKGN1ciwgTlVMTCwgMTYpOwotCQljdXIgPSBkZWxpbSArIDE7Ci0JCWlmICgoZGVsaW0gPSBzdHJjaHIoY3VyLCAnOicpKSA9PSBOVUxMKQotCQkJZ290byBwYXJzZV9mYWlsZWQ7Ci0JCSpkZWxpbSA9IDA7Ci0JCW5wLT5yZW1vdGVfbWFjWzNdID0gc2ltcGxlX3N0cnRvbChjdXIsIE5VTEwsIDE2KTsKLQkJY3VyID0gZGVsaW0gKyAxOwotCQlpZiAoKGRlbGltID0gc3RyY2hyKGN1ciwgJzonKSkgPT0gTlVMTCkKLQkJCWdvdG8gcGFyc2VfZmFpbGVkOwotCQkqZGVsaW0gPSAwOwotCQlucC0+cmVtb3RlX21hY1s0XSA9IHNpbXBsZV9zdHJ0b2woY3VyLCBOVUxMLCAxNik7Ci0JCWN1ciA9IGRlbGltICsgMTsKLQkJbnAtPnJlbW90ZV9tYWNbNV0gPSBzaW1wbGVfc3RydG9sKGN1ciwgTlVMTCwgMTYpOwogCX0KIAogCW5ldHBvbGxfcHJpbnRfb3B0aW9ucyhucCk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9wa3RnZW4uYyBiL25ldC9jb3JlL3BrdGdlbi5jCmluZGV4IGFlZWVjZTcuLmY3NjA3OWMgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3BrdGdlbi5jCisrKyBiL25ldC9jb3JlL3BrdGdlbi5jCkBAIC0xNTYsNiArMTU2LDcgQEAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgogI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CkBAIC00NDksNyArNDUwLDYgQEAKIHN0YXRpYyB2b2lkIHBrdGdlbl9jbGVhcl9jb3VudGVycyhzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldik7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2Nhbl9pcDYoY29uc3QgY2hhciAqcywgY2hhciBpcFsxNl0pOwotc3RhdGljIHVuc2lnbmVkIGludCBmbXRfaXA2KGNoYXIgKnMsIGNvbnN0IGNoYXIgaXBbMTZdKTsKIAogLyogTW9kdWxlIHBhcmFtZXRlcnMsIGRlZmF1bHRzLiAqLwogc3RhdGljIGludCBwZ19jb3VudF9kIF9fcmVhZF9tb3N0bHkgPSAxMDAwOwpAQCAtNTU2LDIxICs1NTYsMTMgQEAKIAkJCSAgIHBrdF9kZXYtPnNrYl9wcmlvcml0eSk7CiAKIAlpZiAocGt0X2Rldi0+ZmxhZ3MgJiBGX0lQVjYpIHsKLQkJY2hhciBiMVsxMjhdLCBiMlsxMjhdLCBiM1sxMjhdOwotCQlmbXRfaXA2KGIxLCBwa3RfZGV2LT5pbjZfc2FkZHIuczZfYWRkcik7Ci0JCWZtdF9pcDYoYjIsIHBrdF9kZXYtPm1pbl9pbjZfc2FkZHIuczZfYWRkcik7Ci0JCWZtdF9pcDYoYjMsIHBrdF9kZXYtPm1heF9pbjZfc2FkZHIuczZfYWRkcik7CiAJCXNlcV9wcmludGYoc2VxLAotCQkJICAgIiAgICAgc2FkZHI6ICVzICBtaW5fc2FkZHI6ICVzICBtYXhfc2FkZHI6ICVzXG4iLCBiMSwKLQkJCSAgIGIyLCBiMyk7Ci0KLQkJZm10X2lwNihiMSwgcGt0X2Rldi0+aW42X2RhZGRyLnM2X2FkZHIpOwotCQlmbXRfaXA2KGIyLCBwa3RfZGV2LT5taW5faW42X2RhZGRyLnM2X2FkZHIpOwotCQlmbXRfaXA2KGIzLCBwa3RfZGV2LT5tYXhfaW42X2RhZGRyLnM2X2FkZHIpOwotCQlzZXFfcHJpbnRmKHNlcSwKLQkJCSAgICIgICAgIGRhZGRyOiAlcyAgbWluX2RhZGRyOiAlcyAgbWF4X2RhZGRyOiAlc1xuIiwgYjEsCi0JCQkgICBiMiwgYjMpOwotCisJCQkgICAiICAgICBzYWRkcjogJXBJNmMgIG1pbl9zYWRkcjogJXBJNmMgIG1heF9zYWRkcjogJXBJNmNcbiIKKwkJCSAgICIgICAgIGRhZGRyOiAlcEk2YyAgbWluX2RhZGRyOiAlcEk2YyAgbWF4X2RhZGRyOiAlcEk2Y1xuIiwKKwkJCSAgICZwa3RfZGV2LT5pbjZfc2FkZHIsCisJCQkgICAmcGt0X2Rldi0+bWluX2luNl9zYWRkciwgJnBrdF9kZXYtPm1heF9pbjZfc2FkZHIsCisJCQkgICAmcGt0X2Rldi0+aW42X2RhZGRyLAorCQkJICAgJnBrdF9kZXYtPm1pbl9pbjZfZGFkZHIsICZwa3RfZGV2LT5tYXhfaW42X2RhZGRyKTsKIAl9IGVsc2UgewogCQlzZXFfcHJpbnRmKHNlcSwKIAkJCSAgICIgICAgIGRzdF9taW46ICVzICBkc3RfbWF4OiAlc1xuIiwKQEAgLTcwNiwxMCArNjk4LDkgQEAKIAkJICAgcGt0X2Rldi0+Y3VyX3NyY19tYWNfb2Zmc2V0KTsKIAogCWlmIChwa3RfZGV2LT5mbGFncyAmIEZfSVBWNikgewotCQljaGFyIGIxWzEyOF0sIGIyWzEyOF07Ci0JCWZtdF9pcDYoYjEsIHBrdF9kZXYtPmN1cl9pbjZfZGFkZHIuczZfYWRkcik7Ci0JCWZtdF9pcDYoYjIsIHBrdF9kZXYtPmN1cl9pbjZfc2FkZHIuczZfYWRkcik7Ci0JCXNlcV9wcmludGYoc2VxLCAiICAgICBjdXJfc2FkZHI6ICVzICBjdXJfZGFkZHI6ICVzXG4iLCBiMiwgYjEpOworCQlzZXFfcHJpbnRmKHNlcSwgIiAgICAgY3VyX3NhZGRyOiAlcEk2YyAgY3VyX2RhZGRyOiAlcEk2Y1xuIiwKKwkJCQkmcGt0X2Rldi0+Y3VyX2luNl9zYWRkciwKKwkJCQkmcGt0X2Rldi0+Y3VyX2luNl9kYWRkcik7CiAJfSBlbHNlCiAJCXNlcV9wcmludGYoc2VxLCAiICAgICBjdXJfc2FkZHI6IDB4JXggIGN1cl9kYWRkcjogMHgleFxuIiwKIAkJCSAgIHBrdF9kZXYtPmN1cl9zYWRkciwgcGt0X2Rldi0+Y3VyX2RhZGRyKTsKQEAgLTEzMDksNyArMTMwMCw3IEBACiAJCWJ1ZltsZW5dID0gMDsKIAogCQlzY2FuX2lwNihidWYsIHBrdF9kZXYtPmluNl9kYWRkci5zNl9hZGRyKTsKLQkJZm10X2lwNihidWYsIHBrdF9kZXYtPmluNl9kYWRkci5zNl9hZGRyKTsKKwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVwSTZjIiwgJnBrdF9kZXYtPmluNl9kYWRkcik7CiAKIAkJaXB2Nl9hZGRyX2NvcHkoJnBrdF9kZXYtPmN1cl9pbjZfZGFkZHIsICZwa3RfZGV2LT5pbjZfZGFkZHIpOwogCkBAIC0xMzMyLDcgKzEzMjMsNyBAQAogCQlidWZbbGVuXSA9IDA7CiAKIAkJc2Nhbl9pcDYoYnVmLCBwa3RfZGV2LT5taW5faW42X2RhZGRyLnM2X2FkZHIpOwotCQlmbXRfaXA2KGJ1ZiwgcGt0X2Rldi0+bWluX2luNl9kYWRkci5zNl9hZGRyKTsKKwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVwSTZjIiwgJnBrdF9kZXYtPm1pbl9pbjZfZGFkZHIpOwogCiAJCWlwdjZfYWRkcl9jb3B5KCZwa3RfZGV2LT5jdXJfaW42X2RhZGRyLAogCQkJICAgICAgICZwa3RfZGV2LT5taW5faW42X2RhZGRyKTsKQEAgLTEzNTUsNyArMTM0Niw3IEBACiAJCWJ1ZltsZW5dID0gMDsKIAogCQlzY2FuX2lwNihidWYsIHBrdF9kZXYtPm1heF9pbjZfZGFkZHIuczZfYWRkcik7Ci0JCWZtdF9pcDYoYnVmLCBwa3RfZGV2LT5tYXhfaW42X2RhZGRyLnM2X2FkZHIpOworCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXBJNmMiLCAmcGt0X2Rldi0+bWF4X2luNl9kYWRkcik7CiAKIAkJaWYgKGRlYnVnKQogCQkJcHJpbnRrKEtFUk5fREVCVUcgInBrdGdlbjogZHN0Nl9tYXggc2V0IHRvOiAlc1xuIiwgYnVmKTsKQEAgLTEzNzYsNyArMTM2Nyw3IEBACiAJCWJ1ZltsZW5dID0gMDsKIAogCQlzY2FuX2lwNihidWYsIHBrdF9kZXYtPmluNl9zYWRkci5zNl9hZGRyKTsKLQkJZm10X2lwNihidWYsIHBrdF9kZXYtPmluNl9zYWRkci5zNl9hZGRyKTsKKwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVwSTZjIiwgJnBrdF9kZXYtPmluNl9zYWRkcik7CiAKIAkJaXB2Nl9hZGRyX2NvcHkoJnBrdF9kZXYtPmN1cl9pbjZfc2FkZHIsICZwa3RfZGV2LT5pbjZfc2FkZHIpOwogCkBAIC0xNDMwLDExICsxNDIxLDYgQEAKIAkJcmV0dXJuIGNvdW50OwogCX0KIAlpZiAoIXN0cmNtcChuYW1lLCAiZHN0X21hYyIpKSB7Ci0JCWNoYXIgKnYgPSB2YWxzdHI7Ci0JCXVuc2lnbmVkIGNoYXIgb2xkX2RtYWNbRVRIX0FMRU5dOwotCQl1bnNpZ25lZCBjaGFyICptID0gcGt0X2Rldi0+ZHN0X21hYzsKLQkJbWVtY3B5KG9sZF9kbWFjLCBwa3RfZGV2LT5kc3RfbWFjLCBFVEhfQUxFTik7Ci0KIAkJbGVuID0gc3Rybl9sZW4oJnVzZXJfYnVmZmVyW2ldLCBzaXplb2YodmFsc3RyKSAtIDEpOwogCQlpZiAobGVuIDwgMCkKIAkJCXJldHVybiBsZW47CkBAIC0xNDQyLDM1ICsxNDI4LDE2IEBACiAJCW1lbXNldCh2YWxzdHIsIDAsIHNpemVvZih2YWxzdHIpKTsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKHZhbHN0ciwgJnVzZXJfYnVmZmVyW2ldLCBsZW4pKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWkgKz0gbGVuOwogCi0JCWZvciAoKm0gPSAwOyAqdiAmJiBtIDwgcGt0X2Rldi0+ZHN0X21hYyArIDY7IHYrKykgewotCQkJaW50IHZhbHVlOwotCi0JCQl2YWx1ZSA9IGhleF90b19iaW4oKnYpOwotCQkJaWYgKHZhbHVlID49IDApCi0JCQkJKm0gPSAqbSAqIDE2ICsgdmFsdWU7Ci0KLQkJCWlmICgqdiA9PSAnOicpIHsKLQkJCQltKys7Ci0JCQkJKm0gPSAwOwotCQkJfQotCQl9Ci0KKwkJaWYgKCFtYWNfcHRvbih2YWxzdHIsIHBrdF9kZXYtPmRzdF9tYWMpKQorCQkJcmV0dXJuIC1FSU5WQUw7CiAJCS8qIFNldCB1cCBEZXN0IE1BQyAqLwotCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKG9sZF9kbWFjLCBwa3RfZGV2LT5kc3RfbWFjKSkKLQkJCW1lbWNweSgmKHBrdF9kZXYtPmhoWzBdKSwgcGt0X2Rldi0+ZHN0X21hYywgRVRIX0FMRU4pOworCQltZW1jcHkoJnBrdF9kZXYtPmhoWzBdLCBwa3RfZGV2LT5kc3RfbWFjLCBFVEhfQUxFTik7CiAKLQkJc3ByaW50ZihwZ19yZXN1bHQsICJPSzogZHN0bWFjIik7CisJCXNwcmludGYocGdfcmVzdWx0LCAiT0s6IGRzdG1hYyAlcE0iLCBwa3RfZGV2LT5kc3RfbWFjKTsKIAkJcmV0dXJuIGNvdW50OwogCX0KIAlpZiAoIXN0cmNtcChuYW1lLCAic3JjX21hYyIpKSB7Ci0JCWNoYXIgKnYgPSB2YWxzdHI7Ci0JCXVuc2lnbmVkIGNoYXIgb2xkX3NtYWNbRVRIX0FMRU5dOwotCQl1bnNpZ25lZCBjaGFyICptID0gcGt0X2Rldi0+c3JjX21hYzsKLQotCQltZW1jcHkob2xkX3NtYWMsIHBrdF9kZXYtPnNyY19tYWMsIEVUSF9BTEVOKTsKLQogCQlsZW4gPSBzdHJuX2xlbigmdXNlcl9idWZmZXJbaV0sIHNpemVvZih2YWxzdHIpIC0gMSk7CiAJCWlmIChsZW4gPCAwKQogCQkJcmV0dXJuIGxlbjsKQEAgLTE0NzgsMjYgKzE0NDUsMTMgQEAKIAkJbWVtc2V0KHZhbHN0ciwgMCwgc2l6ZW9mKHZhbHN0cikpOwogCQlpZiAoY29weV9mcm9tX3VzZXIodmFsc3RyLCAmdXNlcl9idWZmZXJbaV0sIGxlbikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJaSArPSBsZW47CiAKLQkJZm9yICgqbSA9IDA7ICp2ICYmIG0gPCBwa3RfZGV2LT5zcmNfbWFjICsgNjsgdisrKSB7Ci0JCQlpbnQgdmFsdWU7Ci0KLQkJCXZhbHVlID0gaGV4X3RvX2Jpbigqdik7Ci0JCQlpZiAodmFsdWUgPj0gMCkKLQkJCQkqbSA9ICptICogMTYgKyB2YWx1ZTsKLQotCQkJaWYgKCp2ID09ICc6JykgewotCQkJCW0rKzsKLQkJCQkqbSA9IDA7Ci0JCQl9Ci0JCX0KLQorCQlpZiAoIW1hY19wdG9uKHZhbHN0ciwgcGt0X2Rldi0+c3JjX21hYykpCisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJLyogU2V0IHVwIFNyYyBNQUMgKi8KLQkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihvbGRfc21hYywgcGt0X2Rldi0+c3JjX21hYykpCi0JCQltZW1jcHkoJihwa3RfZGV2LT5oaFs2XSksIHBrdF9kZXYtPnNyY19tYWMsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KCZwa3RfZGV2LT5oaFs2XSwgcGt0X2Rldi0+c3JjX21hYywgRVRIX0FMRU4pOwogCi0JCXNwcmludGYocGdfcmVzdWx0LCAiT0s6IHNyY21hYyIpOworCQlzcHJpbnRmKHBnX3Jlc3VsdCwgIk9LOiBzcmNtYWMgJXBNIiwgcGt0X2Rldi0+c3JjX21hYyk7CiAJCXJldHVybiBjb3VudDsKIAl9CiAKQEAgLTI1MTQsNyArMjQ2OCw2IEBACiB7CiAJc3RydWN0IHhmcm1fc3RhdGUgKnggPSBwa3RfZGV2LT5mbG93c1twa3RfZGV2LT5jdXJmbF0ueDsKIAlpbnQgZXJyID0gMDsKLQlzdHJ1Y3QgaXBoZHIgKmlwaDsKIAogCWlmICgheCkKIAkJcmV0dXJuIDA7CkBAIC0yNTI0LDcgKzI0NzcsNiBAQAogCQlyZXR1cm4gMDsKIAogCXNwaW5fbG9jaygmeC0+bG9jayk7Ci0JaXBoID0gaXBfaGRyKHNrYik7CiAKIAllcnIgPSB4LT5vdXRlcl9tb2RlLT5vdXRwdXQoeCwgc2tiKTsKIAlpZiAoZXJyKQpAQCAtMjYyNCw2ICsyNTc2LDcgQEAKIAl9IGVsc2UgewogCQlpbnQgZnJhZ3MgPSBwa3RfZGV2LT5uZnJhZ3M7CiAJCWludCBpLCBsZW47CisJCWludCBmcmFnX2xlbjsKIAogCiAJCWlmIChmcmFncyA+IE1BWF9TS0JfRlJBR1MpCkBAIC0yNjM1LDYgKzI1ODgsOCBAQAogCQl9CiAKIAkJaSA9IDA7CisJCWZyYWdfbGVuID0gKGRhdGFsZW4vZnJhZ3MpIDwgUEFHRV9TSVpFID8KKwkJCSAgIChkYXRhbGVuL2ZyYWdzKSA6IFBBR0VfU0laRTsKIAkJd2hpbGUgKGRhdGFsZW4gPiAwKSB7CiAJCQlpZiAodW5saWtlbHkoIXBrdF9kZXYtPnBhZ2UpKSB7CiAJCQkJaW50IG5vZGUgPSBudW1hX25vZGVfaWQoKTsKQEAgLTI2NDgsMzggKzI2MDMsMTggQEAKIAkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0ucGFnZSA9IHBrdF9kZXYtPnBhZ2U7CiAJCQlnZXRfcGFnZShwa3RfZGV2LT5wYWdlKTsKIAkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0ucGFnZV9vZmZzZXQgPSAwOwotCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5zaXplID0KLQkJCSAgICAoZGF0YWxlbiA8IFBBR0VfU0laRSA/IGRhdGFsZW4gOiBQQUdFX1NJWkUpOworCQkJLypsYXN0IGZyYWdtZW50LCBmaWxsIHJlc3Qgb2YgZGF0YSovCisJCQlpZiAoaSA9PSAoZnJhZ3MgLSAxKSkKKwkJCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnNpemUgPQorCQkJCSAgICAoZGF0YWxlbiA8IFBBR0VfU0laRSA/IGRhdGFsZW4gOiBQQUdFX1NJWkUpOworCQkJZWxzZQorCQkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0uc2l6ZSA9IGZyYWdfbGVuOwogCQkJZGF0YWxlbiAtPSBza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnNpemU7CiAJCQlza2ItPmxlbiArPSBza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnNpemU7CiAJCQlza2ItPmRhdGFfbGVuICs9IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0uc2l6ZTsKIAkJCWkrKzsKIAkJCXNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPSBpOwogCQl9Ci0KLQkJd2hpbGUgKGkgPCBmcmFncykgewotCQkJaW50IHJlbTsKLQotCQkJaWYgKGkgPT0gMCkKLQkJCQlicmVhazsKLQotCQkJcmVtID0gc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpIC0gMV0uc2l6ZSAvIDI7Ci0JCQlpZiAocmVtID09IDApCi0JCQkJYnJlYWs7Ci0KLQkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaSAtIDFdLnNpemUgLT0gcmVtOwotCi0JCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldID0KLQkJCSAgICBza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2kgLSAxXTsKLQkJCWdldF9wYWdlKHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0ucGFnZSk7Ci0JCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnBhZ2UgPQotCQkJICAgIHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaSAtIDFdLnBhZ2U7Ci0JCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnBhZ2Vfb2Zmc2V0ICs9Ci0JCQkgICAgc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpIC0gMV0uc2l6ZTsKLQkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0uc2l6ZSA9IHJlbTsKLQkJCWkrKzsKLQkJCXNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPSBpOwotCQl9CiAJfQogCiAJLyogU3RhbXAgdGhlIHRpbWUsIGFuZCBzZXF1ZW5jZSBudW1iZXIsCkBAIC0yOTE3LDc5ICsyODUyLDYgQEAKIAlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgY2hhciB0b2hleChjaGFyIGhleGRpZ2l0KQotewotCXJldHVybiBoZXhkaWdpdCA+IDkgPyBoZXhkaWdpdCArICdhJyAtIDEwIDogaGV4ZGlnaXQgKyAnMCc7Ci19Ci0KLXN0YXRpYyBpbnQgZm10X3hsb25nKGNoYXIgKnMsIHVuc2lnbmVkIGludCBpKQotewotCWNoYXIgKmJhayA9IHM7Ci0JKnMgPSB0b2hleCgoaSA+PiAxMikgJiAweGYpOwotCWlmIChzICE9IGJhayB8fCAqcyAhPSAnMCcpCi0JCSsrczsKLQkqcyA9IHRvaGV4KChpID4+IDgpICYgMHhmKTsKLQlpZiAocyAhPSBiYWsgfHwgKnMgIT0gJzAnKQotCQkrK3M7Ci0JKnMgPSB0b2hleCgoaSA+PiA0KSAmIDB4Zik7Ci0JaWYgKHMgIT0gYmFrIHx8ICpzICE9ICcwJykKLQkJKytzOwotCSpzID0gdG9oZXgoaSAmIDB4Zik7Ci0JcmV0dXJuIHMgLSBiYWsgKyAxOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGZtdF9pcDYoY2hhciAqcywgY29uc3QgY2hhciBpcFsxNl0pCi17Ci0JdW5zaWduZWQgaW50IGxlbjsKLQl1bnNpZ25lZCBpbnQgaTsKLQl1bnNpZ25lZCBpbnQgdGVtcDsKLQl1bnNpZ25lZCBpbnQgY29tcHJlc3Npbmc7Ci0JaW50IGo7Ci0KLQlsZW4gPSAwOwotCWNvbXByZXNzaW5nID0gMDsKLQlmb3IgKGogPSAwOyBqIDwgMTY7IGogKz0gMikgewotCi0jaWZkZWYgVjRNQVBQRURQUkVGSVgKLQkJaWYgKGogPT0gMTIgJiYgIW1lbWNtcChpcCwgVjRtYXBwZWRwcmVmaXgsIDEyKSkgewotCQkJaW5ldF9udG9hX3IoKihzdHJ1Y3QgaW5fYWRkciAqKShpcCArIDEyKSwgcyk7Ci0JCQl0ZW1wID0gc3RybGVuKHMpOwotCQkJcmV0dXJuIGxlbiArIHRlbXA7Ci0JCX0KLSNlbmRpZgotCQl0ZW1wID0gKCh1bnNpZ25lZCBsb25nKSh1bnNpZ25lZCBjaGFyKWlwW2pdIDw8IDgpICsKLQkJICAgICh1bnNpZ25lZCBsb25nKSh1bnNpZ25lZCBjaGFyKWlwW2ogKyAxXTsKLQkJaWYgKHRlbXAgPT0gMCkgewotCQkJaWYgKCFjb21wcmVzc2luZykgewotCQkJCWNvbXByZXNzaW5nID0gMTsKLQkJCQlpZiAoaiA9PSAwKSB7Ci0JCQkJCSpzKysgPSAnOic7Ci0JCQkJCSsrbGVuOwotCQkJCX0KLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChjb21wcmVzc2luZykgewotCQkJCWNvbXByZXNzaW5nID0gMDsKLQkJCQkqcysrID0gJzonOwotCQkJCSsrbGVuOwotCQkJfQotCQkJaSA9IGZtdF94bG9uZyhzLCB0ZW1wKTsKLQkJCWxlbiArPSBpOwotCQkJcyArPSBpOwotCQkJaWYgKGogPCAxNCkgewotCQkJCSpzKysgPSAnOic7Ci0JCQkJKytsZW47Ci0JCQl9Ci0JCX0KLQl9Ci0JaWYgKGNvbXByZXNzaW5nKSB7Ci0JCSpzKysgPSAnOic7Ci0JCSsrbGVuOwotCX0KLQkqcyA9IDA7Ci0JcmV0dXJuIGxlbjsKLX0KLQogc3RhdGljIHN0cnVjdCBza19idWZmICpmaWxsX3BhY2tldF9pcHY2KHN0cnVjdCBuZXRfZGV2aWNlICpvZGV2LAogCQkJCQlzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikKIHsKQEAgLTM2ODIsMTMgKzM1NDQsMTIgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlzdHJjcHkocGt0X2Rldi0+b2Rldm5hbWUsIGlmbmFtZSk7Ci0JcGt0X2Rldi0+Zmxvd3MgPSB2bWFsbG9jX25vZGUoTUFYX0NGTE9XUyAqIHNpemVvZihzdHJ1Y3QgZmxvd19zdGF0ZSksCisJcGt0X2Rldi0+Zmxvd3MgPSB2emFsbG9jX25vZGUoTUFYX0NGTE9XUyAqIHNpemVvZihzdHJ1Y3QgZmxvd19zdGF0ZSksCiAJCQkJICAgICAgbm9kZSk7CiAJaWYgKHBrdF9kZXYtPmZsb3dzID09IE5VTEwpIHsKIAkJa2ZyZWUocGt0X2Rldik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQltZW1zZXQocGt0X2Rldi0+Zmxvd3MsIDAsIE1BWF9DRkxPV1MgKiBzaXplb2Yoc3RydWN0IGZsb3dfc3RhdGUpKTsKIAogCXBrdF9kZXYtPnJlbW92YWxfbWFyayA9IDA7CiAJcGt0X2Rldi0+bWluX3BrdF9zaXplID0gRVRIX1pMRU47CkBAIC0zODQ2LDYgKzM3MDcsNyBAQAogewogCWludCBjcHU7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZTsKKwlpbnQgcmV0ID0gMDsKIAogCXByX2luZm8oIiVzIiwgdmVyc2lvbik7CiAKQEAgLTM4NTYsMTEgKzM3MTgsMTAgQEAKIAlwZSA9IHByb2NfY3JlYXRlKFBHQ1RSTCwgMDYwMCwgcGdfcHJvY19kaXIsICZwa3RnZW5fZm9wcyk7CiAJaWYgKHBlID09IE5VTEwpIHsKIAkJcHJfZXJyKCJFUlJPUjogY2Fubm90IGNyZWF0ZSAlcyBwcm9jZnMgZW50cnlcbiIsIFBHQ1RSTCk7Ci0JCXByb2NfbmV0X3JlbW92ZSgmaW5pdF9uZXQsIFBHX1BST0NfRElSKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gcmVtb3ZlX2RpcjsKIAl9CiAKLQkvKiBSZWdpc3RlciB1cyB0byByZWNlaXZlIG5ldGRldmljZSBldmVudHMgKi8KIAlyZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJnBrdGdlbl9ub3RpZmllcl9ibG9jayk7CiAKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewpAQCAtMzg3NCwxMyArMzczNSwxOCBAQAogCiAJaWYgKGxpc3RfZW1wdHkoJnBrdGdlbl90aHJlYWRzKSkgewogCQlwcl9lcnIoIkVSUk9SOiBJbml0aWFsaXphdGlvbiBmYWlsZWQgZm9yIGFsbCB0aHJlYWRzXG4iKTsKLQkJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJnBrdGdlbl9ub3RpZmllcl9ibG9jayk7Ci0JCXJlbW92ZV9wcm9jX2VudHJ5KFBHQ1RSTCwgcGdfcHJvY19kaXIpOwotCQlwcm9jX25ldF9yZW1vdmUoJmluaXRfbmV0LCBQR19QUk9DX0RJUik7Ci0JCXJldHVybiAtRU5PREVWOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIHVucmVnaXN0ZXI7CiAJfQogCiAJcmV0dXJuIDA7CisKKyB1bnJlZ2lzdGVyOgorCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZwa3RnZW5fbm90aWZpZXJfYmxvY2spOworCXJlbW92ZV9wcm9jX2VudHJ5KFBHQ1RSTCwgcGdfcHJvY19kaXIpOworIHJlbW92ZV9kaXI6CisJcHJvY19uZXRfcmVtb3ZlKCZpbml0X25ldCwgUEdfUFJPQ19ESVIpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBwZ19jbGVhbnVwKHZvaWQpCmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jCmluZGV4IGQ3YzRiYjQuLmQxNjQ0ZTMgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jCisrKyBiL25ldC9jb3JlL3J0bmV0bGluay5jCkBAIC0xMDA3LDEwICsxMDA3LDExIEBACiAJc19oID0gY2ItPmFyZ3NbMF07CiAJc19pZHggPSBjYi0+YXJnc1sxXTsKIAorCXJjdV9yZWFkX2xvY2soKTsKIAlmb3IgKGggPSBzX2g7IGggPCBORVRERVZfSEFTSEVOVFJJRVM7IGgrKywgc19pZHggPSAwKSB7CiAJCWlkeCA9IDA7CiAJCWhlYWQgPSAmbmV0LT5kZXZfaW5kZXhfaGVhZFtoXTsKLQkJaGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCBub2RlLCBoZWFkLCBpbmRleF9obGlzdCkgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGV2LCBub2RlLCBoZWFkLCBpbmRleF9obGlzdCkgewogCQkJaWYgKGlkeCA8IHNfaWR4KQogCQkJCWdvdG8gY29udDsKIAkJCWlmIChydG5sX2ZpbGxfaWZpbmZvKHNrYiwgZGV2LCBSVE1fTkVXTElOSywKQEAgLTEwMjMsNiArMTAyNCw3IEBACiAJCX0KIAl9CiBvdXQ6CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJY2ItPmFyZ3NbMV0gPSBpZHg7CiAJY2ItPmFyZ3NbMF0gPSBoOwogCkBAIC0xNDk5LDYgKzE1MDEsNyBAQAogCWNoYXIgaWZuYW1lW0lGTkFNU0laXTsKIAlzdHJ1Y3QgbmxhdHRyICp0YltJRkxBX01BWCsxXTsKIAlpbnQgZXJyOworCUxJU1RfSEVBRChsaXN0X2tpbGwpOwogCiAJZXJyID0gbmxtc2dfcGFyc2UobmxoLCBzaXplb2YoKmlmbSksIHRiLCBJRkxBX01BWCwgaWZsYV9wb2xpY3kpOwogCWlmIChlcnIgPCAwKQpAQCAtMTUyMiw3ICsxNTI1LDkgQEAKIAlpZiAoIW9wcykKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0Jb3BzLT5kZWxsaW5rKGRldiwgTlVMTCk7CisJb3BzLT5kZWxsaW5rKGRldiwgJmxpc3Rfa2lsbCk7CisJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueSgmbGlzdF9raWxsKTsKKwlsaXN0X2RlbCgmbGlzdF9raWxsKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTU3MCwxMiArMTU3NSw2IEBACiAJZGV2LT5ydG5sX2xpbmtfc3RhdGUgPSBSVE5MX0xJTktfSU5JVElBTElaSU5HOwogCWRldi0+cmVhbF9udW1fdHhfcXVldWVzID0gcmVhbF9udW1fcXVldWVzOwogCi0JaWYgKHN0cmNocihkZXYtPm5hbWUsICclJykpIHsKLQkJZXJyID0gZGV2X2FsbG9jX25hbWUoZGV2LCBkZXYtPm5hbWUpOwotCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gZXJyX2ZyZWU7Ci0JfQotCiAJaWYgKHRiW0lGTEFfTVRVXSkKIAkJZGV2LT5tdHUgPSBubGFfZ2V0X3UzMih0YltJRkxBX01UVV0pOwogCWlmICh0YltJRkxBX0FERFJFU1NdKQpAQCAtMTU5NSw4ICsxNTk0LDYgQEAKIAogCXJldHVybiBkZXY7CiAKLWVycl9mcmVlOgotCWZyZWVfbmV0ZGV2KGRldik7CiBlcnI6CiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KQEAgLTE4NzksNyArMTg3Niw2IEBACiAJaW50IG1pbl9sZW47CiAJaW50IGZhbWlseTsKIAlpbnQgdHlwZTsKLQlpbnQgZXJyOwogCiAJdHlwZSA9IG5saC0+bmxtc2dfdHlwZTsKIAlpZiAodHlwZSA+IFJUTV9NQVgpCkBAIC0xOTA2LDExICsxOTAyLDggQEAKIAkJaWYgKGR1bXBpdCA9PSBOVUxMKQogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JCV9fcnRubF91bmxvY2soKTsKIAkJcnRubCA9IG5ldC0+cnRubDsKLQkJZXJyID0gbmV0bGlua19kdW1wX3N0YXJ0KHJ0bmwsIHNrYiwgbmxoLCBkdW1waXQsIE5VTEwpOwotCQlydG5sX2xvY2soKTsKLQkJcmV0dXJuIGVycjsKKwkJcmV0dXJuIG5ldGxpbmtfZHVtcF9zdGFydChydG5sLCBza2IsIG5saCwgZHVtcGl0LCBOVUxMKTsKIAl9CiAKIAltZW1zZXQocnRhX2J1ZiwgMCwgKHJ0YXR0cl9tYXggKiBzaXplb2Yoc3RydWN0IHJ0YXR0ciAqKSkpOwpAQCAtMTk2Myw2ICsxOTU2LDggQEAKIAljYXNlIE5FVERFVl9HT0lOR19ET1dOOgogCWNhc2UgTkVUREVWX1VOUkVHSVNURVI6CiAJY2FzZSBORVRERVZfVU5SRUdJU1RFUl9CQVRDSDoKKwljYXNlIE5FVERFVl9SRUxFQVNFOgorCWNhc2UgTkVUREVWX0pPSU46CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJ0bXNnX2lmaW5mbyhSVE1fTkVXTElOSywgZGV2LCAwKTsKQEAgLTE5ODAsNyArMTk3NSw3IEBACiB7CiAJc3RydWN0IHNvY2sgKnNrOwogCXNrID0gbmV0bGlua19rZXJuZWxfY3JlYXRlKG5ldCwgTkVUTElOS19ST1VURSwgUlROTEdSUF9NQVgsCi0JCQkJICAgcnRuZXRsaW5rX3JjdiwgJnJ0bmxfbXV0ZXgsIFRISVNfTU9EVUxFKTsKKwkJCQkgICBydG5ldGxpbmtfcmN2LCBOVUxMLCBUSElTX01PRFVMRSk7CiAJaWYgKCFzaykKIAkJcmV0dXJuIC1FTk9NRU07CiAJbmV0LT5ydG5sID0gc2s7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IDdlYmVlZDAuLjQ2Y2JkMjggMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCisrKyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJycXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAjaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgpAQCAtMjk5Myw2ICsyOTk0LDkgQEAKIAlza2ItPmRlc3RydWN0b3IgPSBzb2NrX3JtZW1fZnJlZTsKIAlhdG9taWNfYWRkKHNrYi0+dHJ1ZXNpemUsICZzay0+c2tfcm1lbV9hbGxvYyk7CiAKKwkvKiBiZWZvcmUgZXhpdGluZyByY3Ugc2VjdGlvbiwgbWFrZSBzdXJlIGRzdCBpcyByZWZjb3VudGVkICovCisJc2tiX2RzdF9mb3JjZShza2IpOworCiAJc2tiX3F1ZXVlX3RhaWwoJnNrLT5za19lcnJvcl9xdWV1ZSwgc2tiKTsKIAlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkKIAkJc2stPnNrX2RhdGFfcmVhZHkoc2ssIHNrYi0+bGVuKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMKaW5kZXggMzg1YjYwOS4uYTgyOWUzZiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMKKysrIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMKQEAgLTEyMiw2ICsxMjIsMTUgQEAKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMKIAl9LAorI2lmZGVmIENPTkZJR19CUEZfSklUCisJeworCQkucHJvY25hbWUJPSAiYnBmX2ppdF9lbmFibGUiLAorCQkuZGF0YQkJPSAmYnBmX2ppdF9lbmFibGUsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjCisJfSwKKyNlbmRpZgogCXsKIAkJLnByb2NuYW1lCT0gIm5ldGRldl90c3RhbXBfcHJlcXVldWUiLAogCQkuZGF0YQkJPSAmbmV0ZGV2X3RzdGFtcF9wcmVxdWV1ZSwKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3V0aWxzLmMgYi9uZXQvY29yZS91dGlscy5jCmluZGV4IDVmZWEwYWIuLjIwMTJiYzcgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3V0aWxzLmMKKysrIGIvbmV0L2NvcmUvdXRpbHMuYwpAQCAtMjk2LDMgKzI5NiwyNyBAQAogCQkJCWNzdW1fdW5mb2xkKCpzdW0pKSk7CiB9CiBFWFBPUlRfU1lNQk9MKGluZXRfcHJvdG9fY3N1bV9yZXBsYWNlNCk7CisKK2ludCBtYWNfcHRvbihjb25zdCBjaGFyICpzLCB1OCAqbWFjKQoreworCWludCBpOworCisJLyogWFg6WFg6WFg6WFg6WFg6WFggKi8KKwlpZiAoc3RybGVuKHMpIDwgMyAqIEVUSF9BTEVOIC0gMSkKKwkJcmV0dXJuIDA7CisKKwkvKiBEb24ndCBkaXJ0eSByZXN1bHQgdW5sZXNzIHN0cmluZyBpcyB2YWxpZCBNQUMuICovCisJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspIHsKKwkJaWYgKCFzdHJjaHIoIjAxMjM0NTY3ODlhYmNkZWZBQkNERUYiLCBzW2kgKiAzXSkpCisJCQlyZXR1cm4gMDsKKwkJaWYgKCFzdHJjaHIoIjAxMjM0NTY3ODlhYmNkZWZBQkNERUYiLCBzW2kgKiAzICsgMV0pKQorCQkJcmV0dXJuIDA7CisJCWlmIChpICE9IEVUSF9BTEVOIC0gMSAmJiBzW2kgKiAzICsgMl0gIT0gJzonKQorCQkJcmV0dXJuIDA7CisJfQorCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKSB7CisJCW1hY1tpXSA9IChoZXhfdG9fYmluKHNbaSAqIDNdKSA8PCA0KSB8IGhleF90b19iaW4oc1tpICogMyArIDFdKTsKKwl9CisJcmV0dXJuIDE7Cit9CitFWFBPUlRfU1lNQk9MKG1hY19wdG9uKTsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2lwdjQuYyBiL25ldC9kY2NwL2lwdjQuYwppbmRleCBhZTQ1MWM2Li44YzM2YWRmIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9pcHY0LmMKKysrIGIvbmV0L2RjY3AvaXB2NC5jCkBAIC00MCwxMyArNDAsMTUgQEAKIAogaW50IGRjY3BfdjRfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsIGludCBhZGRyX2xlbikKIHsKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnVzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopdWFkZHI7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7Ci0JY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICp1c2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXVhZGRyOwogCV9fYmUxNiBvcmlnX3Nwb3J0LCBvcmlnX2Rwb3J0OwotCXN0cnVjdCBydGFibGUgKnJ0OwogCV9fYmUzMiBkYWRkciwgbmV4dGhvcDsKKwlzdHJ1Y3QgZmxvd2k0ICpmbDQ7CisJc3RydWN0IHJ0YWJsZSAqcnQ7CiAJaW50IGVycjsKKwlzdHJ1Y3QgaXBfb3B0aW9uc19yY3UgKmluZXRfb3B0OwogCiAJZHAtPmRjY3BzX3JvbGUgPSBEQ0NQX1JPTEVfQ0xJRU5UOwogCkBAIC01NywxNSArNTksMTkgQEAKIAkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CiAKIAluZXh0aG9wID0gZGFkZHIgPSB1c2luLT5zaW5fYWRkci5zX2FkZHI7Ci0JaWYgKGluZXQtPm9wdCAhPSBOVUxMICYmIGluZXQtPm9wdC0+c3JyKSB7CisKKwlpbmV0X29wdCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoaW5ldC0+aW5ldF9vcHQsCisJCQkJCSAgICAgc29ja19vd25lZF9ieV91c2VyKHNrKSk7CisJaWYgKGluZXRfb3B0ICE9IE5VTEwgJiYgaW5ldF9vcHQtPm9wdC5zcnIpIHsKIAkJaWYgKGRhZGRyID09IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJbmV4dGhvcCA9IGluZXQtPm9wdC0+ZmFkZHI7CisJCW5leHRob3AgPSBpbmV0X29wdC0+b3B0LmZhZGRyOwogCX0KIAogCW9yaWdfc3BvcnQgPSBpbmV0LT5pbmV0X3Nwb3J0OwogCW9yaWdfZHBvcnQgPSB1c2luLT5zaW5fcG9ydDsKLQlydCA9IGlwX3JvdXRlX2Nvbm5lY3QobmV4dGhvcCwgaW5ldC0+aW5ldF9zYWRkciwKKwlmbDQgPSAmaW5ldC0+Y29yay5mbC51LmlwNDsKKwlydCA9IGlwX3JvdXRlX2Nvbm5lY3QoZmw0LCBuZXh0aG9wLCBpbmV0LT5pbmV0X3NhZGRyLAogCQkJICAgICAgUlRfQ09OTl9GTEFHUyhzayksIHNrLT5za19ib3VuZF9kZXZfaWYsCiAJCQkgICAgICBJUFBST1RPX0RDQ1AsCiAJCQkgICAgICBvcmlnX3Nwb3J0LCBvcmlnX2Rwb3J0LCBzaywgdHJ1ZSk7CkBAIC03NywxOSArODMsMTkgQEAKIAkJcmV0dXJuIC1FTkVUVU5SRUFDSDsKIAl9CiAKLQlpZiAoaW5ldC0+b3B0ID09IE5VTEwgfHwgIWluZXQtPm9wdC0+c3JyKQotCQlkYWRkciA9IHJ0LT5ydF9kc3Q7CisJaWYgKGluZXRfb3B0ID09IE5VTEwgfHwgIWluZXRfb3B0LT5vcHQuc3JyKQorCQlkYWRkciA9IGZsNC0+ZGFkZHI7CiAKIAlpZiAoaW5ldC0+aW5ldF9zYWRkciA9PSAwKQotCQlpbmV0LT5pbmV0X3NhZGRyID0gcnQtPnJ0X3NyYzsKKwkJaW5ldC0+aW5ldF9zYWRkciA9IGZsNC0+c2FkZHI7CiAJaW5ldC0+aW5ldF9yY3Zfc2FkZHIgPSBpbmV0LT5pbmV0X3NhZGRyOwogCiAJaW5ldC0+aW5ldF9kcG9ydCA9IHVzaW4tPnNpbl9wb3J0OwogCWluZXQtPmluZXRfZGFkZHIgPSBkYWRkcjsKIAogCWluZXRfY3NrKHNrKS0+aWNza19leHRfaGRyX2xlbiA9IDA7Ci0JaWYgKGluZXQtPm9wdCAhPSBOVUxMKQotCQlpbmV0X2NzayhzayktPmljc2tfZXh0X2hkcl9sZW4gPSBpbmV0LT5vcHQtPm9wdGxlbjsKKwlpZiAoaW5ldF9vcHQpCisJCWluZXRfY3NrKHNrKS0+aWNza19leHRfaGRyX2xlbiA9IGluZXRfb3B0LT5vcHQub3B0bGVuOwogCS8qCiAJICogU29ja2V0IGlkZW50aXR5IGlzIHN0aWxsIHVua25vd24gKHNwb3J0IG1heSBiZSB6ZXJvKS4KIAkgKiBIb3dldmVyIHdlIHNldCBzdGF0ZSB0byBEQ0NQX1JFUVVFU1RJTkcgYW5kIG5vdCByZWxlYXNpbmcgc29ja2V0CkBAIC0xMDEsOCArMTA3LDcgQEAKIAlpZiAoZXJyICE9IDApCiAJCWdvdG8gZmFpbHVyZTsKIAotCXJ0ID0gaXBfcm91dGVfbmV3cG9ydHMocnQsIElQUFJPVE9fRENDUCwKLQkJCSAgICAgICBvcmlnX3Nwb3J0LCBvcmlnX2Rwb3J0LAorCXJ0ID0gaXBfcm91dGVfbmV3cG9ydHMoZmw0LCBydCwgb3JpZ19zcG9ydCwgb3JpZ19kcG9ydCwKIAkJCSAgICAgICBpbmV0LT5pbmV0X3Nwb3J0LCBpbmV0LT5pbmV0X2Rwb3J0LCBzayk7CiAJaWYgKElTX0VSUihydCkpIHsKIAkJcnQgPSBOVUxMOwpAQCAtMzkxLDMyICszOTYsMzAgQEAKIAlpZiAoc2tfYWNjZXB0cV9pc19mdWxsKHNrKSkKIAkJZ290byBleGl0X292ZXJmbG93OwogCi0JaWYgKGRzdCA9PSBOVUxMICYmIChkc3QgPSBpbmV0X2Nza19yb3V0ZV9yZXEoc2ssIHJlcSkpID09IE5VTEwpCi0JCWdvdG8gZXhpdDsKLQogCW5ld3NrID0gZGNjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZChzaywgcmVxLCBza2IpOwogCWlmIChuZXdzayA9PSBOVUxMKQogCQlnb3RvIGV4aXRfbm9uZXdzazsKIAotCXNrX3NldHVwX2NhcHMobmV3c2ssIGRzdCk7Ci0KIAluZXdpbmV0CQkgICA9IGluZXRfc2sobmV3c2spOwogCWlyZXEJCSAgID0gaW5ldF9yc2socmVxKTsKIAluZXdpbmV0LT5pbmV0X2RhZGRyCT0gaXJlcS0+cm10X2FkZHI7CiAJbmV3aW5ldC0+aW5ldF9yY3Zfc2FkZHIgPSBpcmVxLT5sb2NfYWRkcjsKIAluZXdpbmV0LT5pbmV0X3NhZGRyCT0gaXJlcS0+bG9jX2FkZHI7Ci0JbmV3aW5ldC0+b3B0CSAgID0gaXJlcS0+b3B0OworCW5ld2luZXQtPmluZXRfb3B0CT0gaXJlcS0+b3B0OwogCWlyZXEtPm9wdAkgICA9IE5VTEw7CiAJbmV3aW5ldC0+bWNfaW5kZXggID0gaW5ldF9paWYoc2tiKTsKIAluZXdpbmV0LT5tY190dGwJICAgPSBpcF9oZHIoc2tiKS0+dHRsOwogCW5ld2luZXQtPmluZXRfaWQgICA9IGppZmZpZXM7CiAKKwlpZiAoZHN0ID09IE5VTEwgJiYgKGRzdCA9IGluZXRfY3NrX3JvdXRlX2NoaWxkX3NvY2soc2ssIG5ld3NrLCByZXEpKSA9PSBOVUxMKQorCQlnb3RvIHB1dF9hbmRfZXhpdDsKKworCXNrX3NldHVwX2NhcHMobmV3c2ssIGRzdCk7CisKIAlkY2NwX3N5bmNfbXNzKG5ld3NrLCBkc3RfbXR1KGRzdCkpOwogCi0JaWYgKF9faW5ldF9pbmhlcml0X3BvcnQoc2ssIG5ld3NrKSA8IDApIHsKLQkJc29ja19wdXQobmV3c2spOwotCQlnb3RvIGV4aXQ7Ci0JfQorCWlmIChfX2luZXRfaW5oZXJpdF9wb3J0KHNrLCBuZXdzaykgPCAwKQorCQlnb3RvIHB1dF9hbmRfZXhpdDsKIAlfX2luZXRfaGFzaF9ub2xpc3RlbihuZXdzaywgTlVMTCk7CiAKIAlyZXR1cm4gbmV3c2s7CkBAIC00MjgsNiArNDMxLDkgQEAKIGV4aXQ6CiAJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIExJTlVYX01JQl9MSVNURU5EUk9QUyk7CiAJcmV0dXJuIE5VTEw7CitwdXRfYW5kX2V4aXQ6CisJc29ja19wdXQobmV3c2spOworCWdvdG8gZXhpdDsKIH0KIAogRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF92NF9yZXF1ZXN0X3JlY3Zfc29jayk7CkBAIC00OTEsOCArNDk3LDkgQEAKIAlpbnQgZXJyID0gLTE7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7CisJc3RydWN0IGZsb3dpNCBmbDQ7CiAKLQlkc3QgPSBpbmV0X2Nza19yb3V0ZV9yZXEoc2ssIHJlcSk7CisJZHN0ID0gaW5ldF9jc2tfcm91dGVfcmVxKHNrLCAmZmw0LCByZXEpOwogCWlmIChkc3QgPT0gTlVMTCkKIAkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2lwdjYuYyBiL25ldC9kY2NwL2lwdjYuYwppbmRleCBkZTFiN2UzLi44ZGM0MzQ4IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9pcHY2LmMKKysrIGIvbmV0L2RjY3AvaXB2Ni5jCkBAIC01NCw4ICs1NCw4IEBACiAKIC8qIGFkZCBwc2V1ZG8taGVhZGVyIHRvIERDQ1AgY2hlY2tzdW0gc3RvcmVkIGluIHNrYi0+Y3N1bSAqLwogc3RhdGljIGlubGluZSBfX3N1bTE2IGRjY3BfdjZfY3N1bV9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICAgICBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAotCQkJCSAgICAgIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIpCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyKQogewogCXJldHVybiBjc3VtX2lwdjZfbWFnaWMoc2FkZHIsIGRhZGRyLCBza2ItPmxlbiwgSVBQUk9UT19EQ0NQLCBza2ItPmNzdW0pOwogfQpAQCAtODcsNyArODcsNyBAQAogc3RhdGljIHZvaWQgZGNjcF92Nl9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQsCiAJCQl1OCB0eXBlLCB1OCBjb2RlLCBpbnQgb2Zmc2V0LCBfX2JlMzIgaW5mbykKIHsKLQlzdHJ1Y3QgaXB2NmhkciAqaGRyID0gKHN0cnVjdCBpcHY2aGRyICopc2tiLT5kYXRhOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICpoZHIgPSAoY29uc3Qgc3RydWN0IGlwdjZoZHIgKilza2ItPmRhdGE7CiAJY29uc3Qgc3RydWN0IGRjY3BfaGRyICpkaCA9IChzdHJ1Y3QgZGNjcF9oZHIgKikoc2tiLT5kYXRhICsgb2Zmc2V0KTsKIAlzdHJ1Y3QgZGNjcF9zb2NrICpkcDsKIAlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnA7CkBAIC0yOTYsNyArMjk2LDcgQEAKIAogc3RhdGljIHZvaWQgZGNjcF92Nl9jdGxfc2VuZF9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpyeHNrYikKIHsKLQlzdHJ1Y3QgaXB2NmhkciAqcnhpcDZoOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICpyeGlwNmg7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgZmxvd2k2IGZsNjsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYl9kc3Qocnhza2IpLT5kZXYpOwpAQCAtNTczLDcgKzU3Myw3IEBACiAKIAkgICBGaXJzdDogbm8gSVB2NCBvcHRpb25zLgogCSAqLwotCW5ld2luZXQtPm9wdCA9IE5VTEw7CisJbmV3aW5ldC0+aW5ldF9vcHQgPSBOVUxMOwogCiAJLyogQ2xvbmUgUlggYml0cyAqLwogCW5ld25wLT5yeG9wdC5hbGwgPSBucC0+cnhvcHQuYWxsOwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3Avb3V0cHV0LmMgYi9uZXQvZGNjcC9vdXRwdXQuYwppbmRleCAxMzZkNDFjLi5mYWIxMDhlIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9vdXRwdXQuYworKysgYi9uZXQvZGNjcC9vdXRwdXQuYwpAQCAtNDMsNyArNDMsNyBAQAogc3RhdGljIGludCBkY2NwX3RyYW5zbWl0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaWYgKGxpa2VseShza2IgIT0gTlVMTCkpIHsKLQkJY29uc3Qgc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOworCQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAJCWNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKIAkJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKIAkJc3RydWN0IGRjY3Bfc2tiX2NiICpkY2IgPSBEQ0NQX1NLQl9DQihza2IpOwpAQCAtMTM2LDcgKzEzNiw3IEBACiAKIAkJRENDUF9JTkNfU1RBVFMoRENDUF9NSUJfT1VUU0VHUyk7CiAKLQkJZXJyID0gaWNzay0+aWNza19hZl9vcHMtPnF1ZXVlX3htaXQoc2tiKTsKKwkJZXJyID0gaWNzay0+aWNza19hZl9vcHMtPnF1ZXVlX3htaXQoc2tiLCAmaW5ldC0+Y29yay5mbCk7CiAJCXJldHVybiBuZXRfeG1pdF9ldmFsKGVycik7CiAJfQogCXJldHVybiAtRU5PQlVGUzsKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvZG5fZGV2LmMgYi9uZXQvZGVjbmV0L2RuX2Rldi5jCmluZGV4IDRjMjc2MTUuLmNmMjZhYzcgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fZGV2LmMKKysrIGIvbmV0L2RlY25ldC9kbl9kZXYuYwpAQCAtNzQ3LDcgKzc0Nyw4IEBACiAJc2tpcF9uYWRkciA9IGNiLT5hcmdzWzFdOwogCiAJaWR4ID0gMDsKLQlmb3JfZWFjaF9uZXRkZXYoJmluaXRfbmV0LCBkZXYpIHsKKwlyY3VfcmVhZF9sb2NrKCk7CisJZm9yX2VhY2hfbmV0ZGV2X3JjdSgmaW5pdF9uZXQsIGRldikgewogCQlpZiAoaWR4IDwgc2tpcF9uZGV2cykKIAkJCWdvdG8gY29udDsKIAkJZWxzZSBpZiAoaWR4ID4gc2tpcF9uZGV2cykgewpAQCAtNzU2LDExICs3NTcsMTEgQEAKIAkJCXNraXBfbmFkZHIgPSAwOwogCQl9CiAKLQkJaWYgKChkbl9kYiA9IHJ0bmxfZGVyZWZlcmVuY2UoZGV2LT5kbl9wdHIpKSA9PSBOVUxMKQorCQlpZiAoKGRuX2RiID0gcmN1X2RlcmVmZXJlbmNlKGRldi0+ZG5fcHRyKSkgPT0gTlVMTCkKIAkJCWdvdG8gY29udDsKIAotCQlmb3IgKGlmYSA9IHJ0bmxfZGVyZWZlcmVuY2UoZG5fZGItPmlmYV9saXN0KSwgZG5faWR4ID0gMDsgaWZhOwotCQkgICAgIGlmYSA9IHJ0bmxfZGVyZWZlcmVuY2UoaWZhLT5pZmFfbmV4dCksIGRuX2lkeCsrKSB7CisJCWZvciAoaWZhID0gcmN1X2RlcmVmZXJlbmNlKGRuX2RiLT5pZmFfbGlzdCksIGRuX2lkeCA9IDA7IGlmYTsKKwkJICAgICBpZmEgPSByY3VfZGVyZWZlcmVuY2UoaWZhLT5pZmFfbmV4dCksIGRuX2lkeCsrKSB7CiAJCQlpZiAoZG5faWR4IDwgc2tpcF9uYWRkcikKIAkJCQljb250aW51ZTsKIApAQCAtNzczLDYgKzc3NCw3IEBACiAJCWlkeCsrOwogCX0KIGRvbmU6CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJY2ItPmFyZ3NbMF0gPSBpZHg7CiAJY2ItPmFyZ3NbMV0gPSBkbl9pZHg7CiAKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvZG5fcm91dGUuYyBiL25ldC9kZWNuZXQvZG5fcm91dGUuYwppbmRleCA5ZjA5ZDRmLi43NDU0NGJjIDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2RuX3JvdXRlLmMKKysrIGIvbmV0L2RlY25ldC9kbl9yb3V0ZS5jCkBAIC0xMTI1LDEzICsxMTI1LDExIEBACiAJaWYgKGRldl9vdXQtPmZsYWdzICYgSUZGX0xPT1BCQUNLKQogCQlmbGFncyB8PSBSVENGX0xPQ0FMOwogCi0JcnQgPSBkc3RfYWxsb2MoJmRuX2RzdF9vcHMsIDApOworCXJ0ID0gZHN0X2FsbG9jKCZkbl9kc3Rfb3BzLCBkZXZfb3V0LCAxLCAwLCBEU1RfSE9TVCk7CiAJaWYgKHJ0ID09IE5VTEwpCiAJCWdvdG8gZV9ub2J1ZnM7CiAKLQlhdG9taWNfc2V0KCZydC0+ZHN0Ll9fcmVmY250LCAxKTsKLQlydC0+ZHN0LmZsYWdzICAgPSBEU1RfSE9TVDsKLQorCW1lbXNldCgmcnQtPmZsZCwgMCwgc2l6ZW9mKHJ0LT5mbGQpKTsKIAlydC0+ZmxkLnNhZGRyICAgICAgICA9IG9sZGZscC0+c2FkZHI7CiAJcnQtPmZsZC5kYWRkciAgICAgICAgPSBvbGRmbHAtPmRhZGRyOwogCXJ0LT5mbGQuZmxvd2lkbl9vaWYgID0gb2xkZmxwLT5mbG93aWRuX29pZjsKQEAgLTExNDYsOCArMTE0NCw2IEBACiAJcnQtPnJ0X2RzdF9tYXAgICAgPSBmbGQuZGFkZHI7CiAJcnQtPnJ0X3NyY19tYXAgICAgPSBmbGQuc2FkZHI7CiAKLQlydC0+ZHN0LmRldiA9IGRldl9vdXQ7Ci0JZGV2X2hvbGQoZGV2X291dCk7CiAJcnQtPmRzdC5uZWlnaGJvdXIgPSBuZWlnaDsKIAluZWlnaCA9IE5VTEw7CiAKQEAgLTEzOTksMTAgKzEzOTUsMTEgQEAKIAl9CiAKIG1ha2Vfcm91dGU6Ci0JcnQgPSBkc3RfYWxsb2MoJmRuX2RzdF9vcHMsIDApOworCXJ0ID0gZHN0X2FsbG9jKCZkbl9kc3Rfb3BzLCBvdXRfZGV2LCAwLCAwLCBEU1RfSE9TVCk7CiAJaWYgKHJ0ID09IE5VTEwpCiAJCWdvdG8gZV9ub2J1ZnM7CiAKKwltZW1zZXQoJnJ0LT5mbGQsIDAsIHNpemVvZihydC0+ZmxkKSk7CiAJcnQtPnJ0X3NhZGRyICAgICAgPSBmbGQuc2FkZHI7CiAJcnQtPnJ0X2RhZGRyICAgICAgPSBmbGQuZGFkZHI7CiAJcnQtPnJ0X2dhdGV3YXkgICAgPSBmbGQuZGFkZHI7CkBAIC0xNDE5LDkgKzE0MTYsNyBAQAogCXJ0LT5mbGQuZmxvd2lkbl9paWYgID0gaW5fZGV2LT5pZmluZGV4OwogCXJ0LT5mbGQuZmxvd2lkbl9tYXJrID0gZmxkLmZsb3dpZG5fbWFyazsKIAotCXJ0LT5kc3QuZmxhZ3MgPSBEU1RfSE9TVDsKIAlydC0+ZHN0Lm5laWdoYm91ciA9IG5laWdoOwotCXJ0LT5kc3QuZGV2ID0gb3V0X2RldjsKIAlydC0+ZHN0Lmxhc3R1c2UgPSBqaWZmaWVzOwogCXJ0LT5kc3Qub3V0cHV0ID0gZG5fcnRfYnVnOwogCXN3aXRjaChyZXMudHlwZSkgewpAQCAtMTQ0MCw4ICsxNDM1LDYgQEAKIAkJCXJ0LT5kc3QuaW5wdXQgPSBkc3RfZGlzY2FyZDsKIAl9CiAJcnQtPnJ0X2ZsYWdzID0gZmxhZ3M7Ci0JaWYgKHJ0LT5kc3QuZGV2KQotCQlkZXZfaG9sZChydC0+ZHN0LmRldik7CiAKIAllcnIgPSBkbl9ydF9zZXRfbmV4dF9ob3AocnQsICZyZXMpOwogCWlmIChlcnIpCmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX3RhYmxlLmMgYi9uZXQvZGVjbmV0L2RuX3RhYmxlLmMKaW5kZXggOTlkOGQzYS4uYmQwYTUyZCAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9kbl90YWJsZS5jCisrKyBiL25ldC9kZWNuZXQvZG5fdGFibGUuYwpAQCAtMTIzLDExICsxMjMsMTEgQEAKIAkJCQkgICBzdHJ1Y3QgZG5fZmliX25vZGUgKipvbGRfaHQsCiAJCQkJICAgaW50IG9sZF9kaXZpc29yKQogewotCWludCBpOwogCXN0cnVjdCBkbl9maWJfbm9kZSAqZiwgKipmcCwgKm5leHQ7CisJaW50IGk7CiAKIAlmb3IoaSA9IDA7IGkgPCBvbGRfZGl2aXNvcjsgaSsrKSB7Ci0JCWZvcihmID0gb2xkX2h0W2ldOyBmOyBmID0gZi0+Zm5fbmV4dCkgeworCQlmb3IoZiA9IG9sZF9odFtpXTsgZjsgZiA9IG5leHQpIHsKIAkJCW5leHQgPSBmLT5mbl9uZXh0OwogCQkJZm9yKGZwID0gZG5fY2hhaW5fcChmLT5mbl9rZXksIGR6KTsKIAkJCQkqZnAgJiYgZG5fa2V5X2xlcSgoKmZwKS0+Zm5fa2V5LCBmLT5mbl9rZXkpOwpkaWZmIC0tZ2l0IGEvbmV0L2RzYS9zbGF2ZS5jIGIvbmV0L2RzYS9zbGF2ZS5jCmluZGV4IDY0Y2EyYTYuLjBhNDdiNmMgMTAwNjQ0Ci0tLSBhL25ldC9kc2Evc2xhdmUuYworKysgYi9uZXQvZHNhL3NsYXZlLmMKQEAgLTI4OCw3ICsyODgsNiBAQAogCS5nZXRfZHJ2aW5mbwkJPSBkc2Ffc2xhdmVfZ2V0X2RydmluZm8sCiAJLm53YXlfcmVzZXQJCT0gZHNhX3NsYXZlX253YXlfcmVzZXQsCiAJLmdldF9saW5rCQk9IGRzYV9zbGF2ZV9nZXRfbGluaywKLQkuc2V0X3NnCQkJPSBldGh0b29sX29wX3NldF9zZywKIAkuZ2V0X3N0cmluZ3MJCT0gZHNhX3NsYXZlX2dldF9zdHJpbmdzLAogCS5nZXRfZXRodG9vbF9zdGF0cwk9IGRzYV9zbGF2ZV9nZXRfZXRodG9vbF9zdGF0cywKIAkuZ2V0X3NzZXRfY291bnQJCT0gZHNhX3NsYXZlX2dldF9zc2V0X2NvdW50LApkaWZmIC0tZ2l0IGEvbmV0L2Vjb25ldC9hZl9lY29uZXQuYyBiL25ldC9lY29uZXQvYWZfZWNvbmV0LmMKaW5kZXggMTE2ZDNmZC4uYTFkOWYzNyAxMDA2NDQKLS0tIGEvbmV0L2Vjb25ldC9hZl9lY29uZXQuYworKysgYi9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jCkBAIC05MzUsNyArOTM1LDYgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXVuc2lnbmVkIGNoYXIgKmRhdGE7CiAJc3RydWN0IGF1bmhkciAqYWg7Ci0Jc3RydWN0IGlwaGRyICppcDsKIAlzaXplX3QgbGVuOwogCiAJd2hpbGUgKChza2IgPSBza2JfcmVjdl9kYXRhZ3JhbShzaywgMCwgMSwgJmVycikpID09IE5VTEwpIHsKQEAgLTk0OSw3ICs5NDgsNiBAQAogCWRhdGEgPSBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwogCWFoID0gKHN0cnVjdCBhdW5oZHIgKilkYXRhOwogCWxlbiA9IHNrYi0+bGVuIC0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwotCWlwID0gaXBfaGRyKHNrYik7CiAKIAlzd2l0Y2ggKGFoLT5jb2RlKQogCXsKQEAgLTk2MiwxMiArOTYwLDYgQEAKIAljYXNlIDQ6CiAJCWF1bl90eF9hY2soYWgtPmhhbmRsZSwgRUNUWVBFX1RSQU5TTUlUX05PVF9MSVNURU5JTkcpOwogCQlicmVhazsKLSNpZiAwCi0JCS8qIFRoaXMgaXNuJ3QgcXVpdGUgcmlnaHQgeWV0LiAqLwotCWNhc2UgNToKLQkJYXVuX3NlbmRfcmVzcG9uc2UoaXAtPnNhZGRyLCBhaC0+aGFuZGxlLCA2LCBhaC0+Y2IpOwotCQlicmVhazsKLSNlbmRpZgogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0RFQlVHICJ1bmtub3duIEFVTiBwYWNrZXQgKHR5cGUgJWQpXG4iLCBkYXRhWzBdKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9NYWtlZmlsZSBiL25ldC9pcHY0L01ha2VmaWxlCmluZGV4IDBkYzc3MmQuLmYyZGM2OWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L01ha2VmaWxlCisrKyBiL25ldC9pcHY0L01ha2VmaWxlCkBAIC0xMSw3ICsxMSw3IEBACiAJICAgICBkYXRhZ3JhbS5vIHJhdy5vIHVkcC5vIHVkcGxpdGUubyBcCiAJICAgICBhcnAubyBpY21wLm8gZGV2aW5ldC5vIGFmX2luZXQubyAgaWdtcC5vIFwKIAkgICAgIGZpYl9mcm9udGVuZC5vIGZpYl9zZW1hbnRpY3MubyBmaWJfdHJpZS5vIFwKLQkgICAgIGluZXRfZnJhZ21lbnQubworCSAgICAgaW5ldF9mcmFnbWVudC5vIHBpbmcubwogCiBvYmotJChDT05GSUdfU1lTQ1RMKSArPSBzeXNjdGxfbmV0X2lwdjQubwogb2JqLSQoQ09ORklHX1BST0NfRlMpICs9IHByb2MubwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYWZfaW5ldC5jIGIvbmV0L2lwdjQvYWZfaW5ldC5jCmluZGV4IDgwN2Q4M2MuLmNjMTQ2MzEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FmX2luZXQuYworKysgYi9uZXQvaXB2NC9hZl9pbmV0LmMKQEAgLTEwNSw2ICsxMDUsNyBAQAogI2luY2x1ZGUgPG5ldC90Y3AuaD4KICNpbmNsdWRlIDxuZXQvdWRwLmg+CiAjaW5jbHVkZSA8bmV0L3VkcGxpdGUuaD4KKyNpbmNsdWRlIDxuZXQvcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L3Jhdy5oPgpAQCAtMTUzLDcgKzE1NCw3IEBACiAJV0FSTl9PTihzay0+c2tfd21lbV9xdWV1ZWQpOwogCVdBUk5fT04oc2stPnNrX2ZvcndhcmRfYWxsb2MpOwogCi0Ja2ZyZWUoaW5ldC0+b3B0KTsKKwlrZnJlZShyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGluZXQtPmluZXRfb3B0LCAxKSk7CiAJZHN0X3JlbGVhc2UocmN1X2RlcmVmZXJlbmNlX2NoZWNrKHNrLT5za19kc3RfY2FjaGUsIDEpKTsKIAlza19yZWZjbnRfZGVidWdfZGVjKHNrKTsKIH0KQEAgLTEwMDgsNiArMTAwOSwxNCBAQAogCQkuZmxhZ3MgPSAgICAgIElORVRfUFJPVE9TV19QRVJNQU5FTlQsCiAgICAgICAgfSwKIAorICAgICAgIHsKKwkJLnR5cGUgPSAgICAgICBTT0NLX0RHUkFNLAorCQkucHJvdG9jb2wgPSAgIElQUFJPVE9fSUNNUCwKKwkJLnByb3QgPSAgICAgICAmcGluZ19wcm90LAorCQkub3BzID0gICAgICAgICZpbmV0X2RncmFtX29wcywKKwkJLm5vX2NoZWNrID0gICBVRFBfQ1NVTV9ERUZBVUxULAorCQkuZmxhZ3MgPSAgICAgIElORVRfUFJPVE9TV19SRVVTRSwKKyAgICAgICB9LAogCiAgICAgICAgewogCSAgICAgICAudHlwZSA9ICAgICAgIFNPQ0tfUkFXLApAQCAtMTEwMywxNCArMTExMiwxOSBAQAogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAlfX2JlMzIgb2xkX3NhZGRyID0gaW5ldC0+aW5ldF9zYWRkcjsKIAlfX2JlMzIgZGFkZHIgPSBpbmV0LT5pbmV0X2RhZGRyOworCXN0cnVjdCBmbG93aTQgKmZsNDsKIAlzdHJ1Y3QgcnRhYmxlICpydDsKIAlfX2JlMzIgbmV3X3NhZGRyOworCXN0cnVjdCBpcF9vcHRpb25zX3JjdSAqaW5ldF9vcHQ7CiAKLQlpZiAoaW5ldC0+b3B0ICYmIGluZXQtPm9wdC0+c3JyKQotCQlkYWRkciA9IGluZXQtPm9wdC0+ZmFkZHI7CisJaW5ldF9vcHQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGluZXQtPmluZXRfb3B0LAorCQkJCQkgICAgIHNvY2tfb3duZWRfYnlfdXNlcihzaykpOworCWlmIChpbmV0X29wdCAmJiBpbmV0X29wdC0+b3B0LnNycikKKwkJZGFkZHIgPSBpbmV0X29wdC0+b3B0LmZhZGRyOwogCiAJLyogUXVlcnkgbmV3IHJvdXRlLiAqLwotCXJ0ID0gaXBfcm91dGVfY29ubmVjdChkYWRkciwgMCwgUlRfQ09OTl9GTEFHUyhzayksCisJZmw0ID0gJmluZXQtPmNvcmsuZmwudS5pcDQ7CisJcnQgPSBpcF9yb3V0ZV9jb25uZWN0KGZsNCwgZGFkZHIsIDAsIFJUX0NPTk5fRkxBR1Moc2spLAogCQkJICAgICAgc2stPnNrX2JvdW5kX2Rldl9pZiwgc2stPnNrX3Byb3RvY29sLAogCQkJICAgICAgaW5ldC0+aW5ldF9zcG9ydCwgaW5ldC0+aW5ldF9kcG9ydCwgc2ssIGZhbHNlKTsKIAlpZiAoSVNfRVJSKHJ0KSkKQEAgLTExMTgsNyArMTEzMiw3IEBACiAKIAlza19zZXR1cF9jYXBzKHNrLCAmcnQtPmRzdCk7CiAKLQluZXdfc2FkZHIgPSBydC0+cnRfc3JjOworCW5ld19zYWRkciA9IGZsNC0+c2FkZHI7CiAKIAlpZiAobmV3X3NhZGRyID09IG9sZF9zYWRkcikKIAkJcmV0dXJuIDA7CkBAIC0xMTQ3LDYgKzExNjEsOCBAQAogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAlzdHJ1Y3QgcnRhYmxlICpydCA9IChzdHJ1Y3QgcnRhYmxlICopX19za19kc3RfY2hlY2soc2ssIDApOwogCV9fYmUzMiBkYWRkcjsKKwlzdHJ1Y3QgaXBfb3B0aW9uc19yY3UgKmluZXRfb3B0OworCXN0cnVjdCBmbG93aTQgKmZsNDsKIAlpbnQgZXJyOwogCiAJLyogUm91dGUgaXMgT0ssIG5vdGhpbmcgdG8gZG8uICovCkBAIC0xMTU0LDEwICsxMTcwLDE0IEBACiAJCXJldHVybiAwOwogCiAJLyogUmVyb3V0ZS4gKi8KKwlyY3VfcmVhZF9sb2NrKCk7CisJaW5ldF9vcHQgPSByY3VfZGVyZWZlcmVuY2UoaW5ldC0+aW5ldF9vcHQpOwogCWRhZGRyID0gaW5ldC0+aW5ldF9kYWRkcjsKLQlpZiAoaW5ldC0+b3B0ICYmIGluZXQtPm9wdC0+c3JyKQotCQlkYWRkciA9IGluZXQtPm9wdC0+ZmFkZHI7Ci0JcnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMoc29ja19uZXQoc2spLCBzaywgZGFkZHIsIGluZXQtPmluZXRfc2FkZHIsCisJaWYgKGluZXRfb3B0ICYmIGluZXRfb3B0LT5vcHQuc3JyKQorCQlkYWRkciA9IGluZXRfb3B0LT5vcHQuZmFkZHI7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJZmw0ID0gJmluZXQtPmNvcmsuZmwudS5pcDQ7CisJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMoc29ja19uZXQoc2spLCBmbDQsIHNrLCBkYWRkciwgaW5ldC0+aW5ldF9zYWRkciwKIAkJCQkgICBpbmV0LT5pbmV0X2Rwb3J0LCBpbmV0LT5pbmV0X3Nwb3J0LAogCQkJCSAgIHNrLT5za19wcm90b2NvbCwgUlRfQ09OTl9GTEFHUyhzayksCiAJCQkJICAgc2stPnNrX2JvdW5kX2Rldl9pZik7CkBAIC0xMTg2LDcgKzEyMDYsNyBAQAogCiBzdGF0aWMgaW50IGluZXRfZ3NvX3NlbmRfY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaXBoZHIgKmlwaDsKKwljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDsKIAljb25zdCBzdHJ1Y3QgbmV0X3Byb3RvY29sICpvcHM7CiAJaW50IHByb3RvOwogCWludCBpaGw7CkBAIC0xMjkzLDcgKzEzMTMsNyBAQAogCWNvbnN0IHN0cnVjdCBuZXRfcHJvdG9jb2wgKm9wczsKIAlzdHJ1Y3Qgc2tfYnVmZiAqKnBwID0gTlVMTDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqcDsKLQlzdHJ1Y3QgaXBoZHIgKmlwaDsKKwljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDsKIAl1bnNpZ25lZCBpbnQgaGxlbjsKIAl1bnNpZ25lZCBpbnQgb2ZmOwogCXVuc2lnbmVkIGludCBpZDsKQEAgLTE1MTYsNiArMTUzNiw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvY29sIGljbXBfcHJvdG9jb2wgPSB7CiAJLmhhbmRsZXIgPQlpY21wX3JjdiwKKwkuZXJyX2hhbmRsZXIgPQlwaW5nX2VyciwKIAkubm9fcG9saWN5ID0JMSwKIAkubmV0bnNfb2sgPQkxLAogfTsKQEAgLTE2MzEsNiArMTY1MiwxMCBAQAogCWlmIChyYykKIAkJZ290byBvdXRfdW5yZWdpc3Rlcl91ZHBfcHJvdG87CiAKKwlyYyA9IHByb3RvX3JlZ2lzdGVyKCZwaW5nX3Byb3QsIDEpOworCWlmIChyYykKKwkJZ290byBvdXRfdW5yZWdpc3Rlcl9yYXdfcHJvdG87CisKIAkvKgogCSAqCVRlbGwgU09DS0VUIHRoYXQgd2UgYXJlIGFsaXZlLi4uCiAJICovCkBAIC0xNjg2LDYgKzE3MTEsOCBAQAogCS8qIEFkZCBVRFAtTGl0ZSAoUkZDIDM4MjgpICovCiAJdWRwbGl0ZTRfcmVnaXN0ZXIoKTsKIAorCXBpbmdfaW5pdCgpOworCiAJLyoKIAkgKglTZXQgdGhlIElDTVAgbGF5ZXIgdXAKIAkgKi8KQEAgLTE3MTYsNiArMTc0Myw4IEBACiAJcmMgPSAwOwogb3V0OgogCXJldHVybiByYzsKK291dF91bnJlZ2lzdGVyX3Jhd19wcm90bzoKKwlwcm90b191bnJlZ2lzdGVyKCZyYXdfcHJvdCk7CiBvdXRfdW5yZWdpc3Rlcl91ZHBfcHJvdG86CiAJcHJvdG9fdW5yZWdpc3RlcigmdWRwX3Byb3QpOwogb3V0X3VucmVnaXN0ZXJfdGNwX3Byb3RvOgpAQCAtMTc0MCwxMSArMTc2OSwxNSBAQAogCQlnb3RvIG91dF90Y3A7CiAJaWYgKHVkcDRfcHJvY19pbml0KCkpCiAJCWdvdG8gb3V0X3VkcDsKKwlpZiAocGluZ19wcm9jX2luaXQoKSkKKwkJZ290byBvdXRfcGluZzsKIAlpZiAoaXBfbWlzY19wcm9jX2luaXQoKSkKIAkJZ290byBvdXRfbWlzYzsKIG91dDoKIAlyZXR1cm4gcmM7CiBvdXRfbWlzYzoKKwlwaW5nX3Byb2NfZXhpdCgpOworb3V0X3Bpbmc6CiAJdWRwNF9wcm9jX2V4aXQoKTsKIG91dF91ZHA6CiAJdGNwNF9wcm9jX2V4aXQoKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2FoNC5jIGIvbmV0L2lwdjQvYWg0LmMKaW5kZXggNDI4NmZkMy4uYzFmNDE1NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvYWg0LmMKKysrIGIvbmV0L2lwdjQvYWg0LmMKQEAgLTczLDcgKzczLDcgQEAKICAqIGludG8gSVAgaGVhZGVyIGZvciBpY3YgY2FsY3VsYXRpb24uIE9wdGlvbnMgYXJlIGFscmVhZHkgY2hlY2tlZAogICogZm9yIHZhbGlkaXR5LCBzbyBwYXJhbm9pYSBpcyBub3QgcmVxdWlyZWQuICovCiAKLXN0YXRpYyBpbnQgaXBfY2xlYXJfbXV0YWJsZV9vcHRpb25zKHN0cnVjdCBpcGhkciAqaXBoLCBfX2JlMzIgKmRhZGRyKQorc3RhdGljIGludCBpcF9jbGVhcl9tdXRhYmxlX29wdGlvbnMoY29uc3Qgc3RydWN0IGlwaGRyICppcGgsIF9fYmUzMiAqZGFkZHIpCiB7CiAJdW5zaWduZWQgY2hhciAqIG9wdHB0ciA9ICh1bnNpZ25lZCBjaGFyKikoaXBoKzEpOwogCWludCAgbCA9IGlwaC0+aWhsKjQgLSBzaXplb2Yoc3RydWN0IGlwaGRyKTsKQEAgLTM5Niw3ICszOTYsNyBAQAogc3RhdGljIHZvaWQgYWg0X2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5mbykKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0+ZGV2KTsKLQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2ItPmRhdGE7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGggPSAoY29uc3Qgc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOwogCXN0cnVjdCBpcF9hdXRoX2hkciAqYWggPSAoc3RydWN0IGlwX2F1dGhfaGRyICopKHNrYi0+ZGF0YSsoaXBoLT5paGw8PDIpKTsKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKIApAQCAtNDA0LDcgKzQwNCw4IEBACiAJICAgIGljbXBfaGRyKHNrYiktPmNvZGUgIT0gSUNNUF9GUkFHX05FRURFRCkKIAkJcmV0dXJuOwogCi0JeCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgc2tiLT5tYXJrLCAoeGZybV9hZGRyZXNzX3QgKikmaXBoLT5kYWRkciwgYWgtPnNwaSwgSVBQUk9UT19BSCwgQUZfSU5FVCk7CisJeCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgc2tiLT5tYXJrLCAoY29uc3QgeGZybV9hZGRyZXNzX3QgKikmaXBoLT5kYWRkciwKKwkJCSAgICAgIGFoLT5zcGksIElQUFJPVE9fQUgsIEFGX0lORVQpOwogCWlmICgheCkKIAkJcmV0dXJuOwogCXByaW50ayhLRVJOX0RFQlVHICJwbXR1IGRpc2NvdmVyeSBvbiBTQSBBSC8lMDh4LyUwOHhcbiIsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9jaXBzb19pcHY0LmMgYi9uZXQvaXB2NC9jaXBzb19pcHY0LmMKaW5kZXggYTBhZjdlYS4uMmIzYzIzYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvY2lwc29faXB2NC5jCisrKyBiL25ldC9pcHY0L2NpcHNvX2lwdjQuYwpAQCAtMTg1Nyw2ICsxODU3LDExIEBACiAJcmV0dXJuIENJUFNPX1Y0X0hEUl9MRU4gKyByZXRfdmFsOwogfQogCitzdGF0aWMgdm9pZCBvcHRfa2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlrZnJlZShjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGlwX29wdGlvbnNfcmN1LCByY3UpKTsKK30KKwogLyoqCiAgKiBjaXBzb192NF9zb2NrX3NldGF0dHIgLSBBZGQgYSBDSVBTTyBvcHRpb24gdG8gYSBzb2NrZXQKICAqIEBzazogdGhlIHNvY2tldApAQCAtMTg3OSw3ICsxODg0LDcgQEAKIAl1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxMOwogCXUzMiBidWZfbGVuOwogCXUzMiBvcHRfbGVuOwotCXN0cnVjdCBpcF9vcHRpb25zICpvcHQgPSBOVUxMOworCXN0cnVjdCBpcF9vcHRpb25zX3JjdSAqb2xkLCAqb3B0ID0gTlVMTDsKIAlzdHJ1Y3QgaW5ldF9zb2NrICpza19pbmV0OwogCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqc2tfY29ubjsKIApAQCAtMTkxNSwyMiArMTkyMCwyNSBAQAogCQlyZXRfdmFsID0gLUVOT01FTTsKIAkJZ290byBzb2NrZXRfc2V0YXR0cl9mYWlsdXJlOwogCX0KLQltZW1jcHkob3B0LT5fX2RhdGEsIGJ1ZiwgYnVmX2xlbik7Ci0Jb3B0LT5vcHRsZW4gPSBvcHRfbGVuOwotCW9wdC0+Y2lwc28gPSBzaXplb2Yoc3RydWN0IGlwaGRyKTsKKwltZW1jcHkob3B0LT5vcHQuX19kYXRhLCBidWYsIGJ1Zl9sZW4pOworCW9wdC0+b3B0Lm9wdGxlbiA9IG9wdF9sZW47CisJb3B0LT5vcHQuY2lwc28gPSBzaXplb2Yoc3RydWN0IGlwaGRyKTsKIAlrZnJlZShidWYpOwogCWJ1ZiA9IE5VTEw7CiAKIAlza19pbmV0ID0gaW5ldF9zayhzayk7CisKKwlvbGQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHNrX2luZXQtPmluZXRfb3B0LCBzb2NrX293bmVkX2J5X3VzZXIoc2spKTsKIAlpZiAoc2tfaW5ldC0+aXNfaWNzaykgewogCQlza19jb25uID0gaW5ldF9jc2soc2spOwotCQlpZiAoc2tfaW5ldC0+b3B0KQotCQkJc2tfY29ubi0+aWNza19leHRfaGRyX2xlbiAtPSBza19pbmV0LT5vcHQtPm9wdGxlbjsKLQkJc2tfY29ubi0+aWNza19leHRfaGRyX2xlbiArPSBvcHQtPm9wdGxlbjsKKwkJaWYgKG9sZCkKKwkJCXNrX2Nvbm4tPmljc2tfZXh0X2hkcl9sZW4gLT0gb2xkLT5vcHQub3B0bGVuOworCQlza19jb25uLT5pY3NrX2V4dF9oZHJfbGVuICs9IG9wdC0+b3B0Lm9wdGxlbjsKIAkJc2tfY29ubi0+aWNza19zeW5jX21zcyhzaywgc2tfY29ubi0+aWNza19wbXR1X2Nvb2tpZSk7CiAJfQotCW9wdCA9IHhjaGcoJnNrX2luZXQtPm9wdCwgb3B0KTsKLQlrZnJlZShvcHQpOworCXJjdV9hc3NpZ25fcG9pbnRlcihza19pbmV0LT5pbmV0X29wdCwgb3B0KTsKKwlpZiAob2xkKQorCQljYWxsX3JjdSgmb2xkLT5yY3UsIG9wdF9rZnJlZV9yY3UpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTE5NjAsNyArMTk2OCw3IEBACiAJdW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDsKIAl1MzIgYnVmX2xlbjsKIAl1MzIgb3B0X2xlbjsKLQlzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0ID0gTlVMTDsKKwlzdHJ1Y3QgaXBfb3B0aW9uc19yY3UgKm9wdCA9IE5VTEw7CiAJc3RydWN0IGluZXRfcmVxdWVzdF9zb2NrICpyZXFfaW5ldDsKIAogCS8qIFdlIGFsbG9jYXRlIHRoZSBtYXhpbXVtIENJUFNPIG9wdGlvbiBzaXplIGhlcmUgc28gd2UgYXJlIHByb2JhYmx5CkBAIC0xOTg4LDE1ICsxOTk2LDE2IEBACiAJCXJldF92YWwgPSAtRU5PTUVNOwogCQlnb3RvIHJlcV9zZXRhdHRyX2ZhaWx1cmU7CiAJfQotCW1lbWNweShvcHQtPl9fZGF0YSwgYnVmLCBidWZfbGVuKTsKLQlvcHQtPm9wdGxlbiA9IG9wdF9sZW47Ci0Jb3B0LT5jaXBzbyA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpOworCW1lbWNweShvcHQtPm9wdC5fX2RhdGEsIGJ1ZiwgYnVmX2xlbik7CisJb3B0LT5vcHQub3B0bGVuID0gb3B0X2xlbjsKKwlvcHQtPm9wdC5jaXBzbyA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpOwogCWtmcmVlKGJ1Zik7CiAJYnVmID0gTlVMTDsKIAogCXJlcV9pbmV0ID0gaW5ldF9yc2socmVxKTsKIAlvcHQgPSB4Y2hnKCZyZXFfaW5ldC0+b3B0LCBvcHQpOwotCWtmcmVlKG9wdCk7CisJaWYgKG9wdCkKKwkJY2FsbF9yY3UoJm9wdC0+cmN1LCBvcHRfa2ZyZWVfcmN1KTsKIAogCXJldHVybiAwOwogCkBAIC0yMDE2LDM0ICsyMDI1LDM0IEBACiAgKiB2YWx1ZXMgb24gZmFpbHVyZS4KICAqCiAgKi8KLXN0YXRpYyBpbnQgY2lwc29fdjRfZGVsb3B0KHN0cnVjdCBpcF9vcHRpb25zICoqb3B0X3B0cikKK3N0YXRpYyBpbnQgY2lwc29fdjRfZGVsb3B0KHN0cnVjdCBpcF9vcHRpb25zX3JjdSAqKm9wdF9wdHIpCiB7CiAJaW50IGhkcl9kZWx0YSA9IDA7Ci0Jc3RydWN0IGlwX29wdGlvbnMgKm9wdCA9ICpvcHRfcHRyOworCXN0cnVjdCBpcF9vcHRpb25zX3JjdSAqb3B0ID0gKm9wdF9wdHI7CiAKLQlpZiAob3B0LT5zcnIgfHwgb3B0LT5yciB8fCBvcHQtPnRzIHx8IG9wdC0+cm91dGVyX2FsZXJ0KSB7CisJaWYgKG9wdC0+b3B0LnNyciB8fCBvcHQtPm9wdC5yciB8fCBvcHQtPm9wdC50cyB8fCBvcHQtPm9wdC5yb3V0ZXJfYWxlcnQpIHsKIAkJdTggY2lwc29fbGVuOwogCQl1OCBjaXBzb19vZmY7CiAJCXVuc2lnbmVkIGNoYXIgKmNpcHNvX3B0cjsKIAkJaW50IGl0ZXI7CiAJCWludCBvcHRsZW5fbmV3OwogCi0JCWNpcHNvX29mZiA9IG9wdC0+Y2lwc28gLSBzaXplb2Yoc3RydWN0IGlwaGRyKTsKLQkJY2lwc29fcHRyID0gJm9wdC0+X19kYXRhW2NpcHNvX29mZl07CisJCWNpcHNvX29mZiA9IG9wdC0+b3B0LmNpcHNvIC0gc2l6ZW9mKHN0cnVjdCBpcGhkcik7CisJCWNpcHNvX3B0ciA9ICZvcHQtPm9wdC5fX2RhdGFbY2lwc29fb2ZmXTsKIAkJY2lwc29fbGVuID0gY2lwc29fcHRyWzFdOwogCi0JCWlmIChvcHQtPnNyciA+IG9wdC0+Y2lwc28pCi0JCQlvcHQtPnNyciAtPSBjaXBzb19sZW47Ci0JCWlmIChvcHQtPnJyID4gb3B0LT5jaXBzbykKLQkJCW9wdC0+cnIgLT0gY2lwc29fbGVuOwotCQlpZiAob3B0LT50cyA+IG9wdC0+Y2lwc28pCi0JCQlvcHQtPnRzIC09IGNpcHNvX2xlbjsKLQkJaWYgKG9wdC0+cm91dGVyX2FsZXJ0ID4gb3B0LT5jaXBzbykKLQkJCW9wdC0+cm91dGVyX2FsZXJ0IC09IGNpcHNvX2xlbjsKLQkJb3B0LT5jaXBzbyA9IDA7CisJCWlmIChvcHQtPm9wdC5zcnIgPiBvcHQtPm9wdC5jaXBzbykKKwkJCW9wdC0+b3B0LnNyciAtPSBjaXBzb19sZW47CisJCWlmIChvcHQtPm9wdC5yciA+IG9wdC0+b3B0LmNpcHNvKQorCQkJb3B0LT5vcHQucnIgLT0gY2lwc29fbGVuOworCQlpZiAob3B0LT5vcHQudHMgPiBvcHQtPm9wdC5jaXBzbykKKwkJCW9wdC0+b3B0LnRzIC09IGNpcHNvX2xlbjsKKwkJaWYgKG9wdC0+b3B0LnJvdXRlcl9hbGVydCA+IG9wdC0+b3B0LmNpcHNvKQorCQkJb3B0LT5vcHQucm91dGVyX2FsZXJ0IC09IGNpcHNvX2xlbjsKKwkJb3B0LT5vcHQuY2lwc28gPSAwOwogCiAJCW1lbW1vdmUoY2lwc29fcHRyLCBjaXBzb19wdHIgKyBjaXBzb19sZW4sCi0JCQlvcHQtPm9wdGxlbiAtIGNpcHNvX29mZiAtIGNpcHNvX2xlbik7CisJCQlvcHQtPm9wdC5vcHRsZW4gLSBjaXBzb19vZmYgLSBjaXBzb19sZW4pOwogCiAJCS8qIGRldGVybWluaW5nIHRoZSBuZXcgdG90YWwgb3B0aW9uIGxlbmd0aCBpcyB0cmlja3kgYmVjYXVzZSBvZgogCQkgKiB0aGUgcGFkZGluZyBuZWNlc3NhcnksIHRoZSBvbmx5IHRoaW5nIGkgY2FuIHRoaW5rIHRvIGRvIGF0CkBAIC0yMDUyLDIxICsyMDYxLDIxIEBACiAJCSAqIGZyb20gdGhlcmUgd2UgY2FuIGRldGVybWluZSB0aGUgbmV3IHRvdGFsIG9wdGlvbiBsZW5ndGggKi8KIAkJaXRlciA9IDA7CiAJCW9wdGxlbl9uZXcgPSAwOwotCQl3aGlsZSAoaXRlciA8IG9wdC0+b3B0bGVuKQotCQkJaWYgKG9wdC0+X19kYXRhW2l0ZXJdICE9IElQT1BUX05PUCkgewotCQkJCWl0ZXIgKz0gb3B0LT5fX2RhdGFbaXRlciArIDFdOworCQl3aGlsZSAoaXRlciA8IG9wdC0+b3B0Lm9wdGxlbikKKwkJCWlmIChvcHQtPm9wdC5fX2RhdGFbaXRlcl0gIT0gSVBPUFRfTk9QKSB7CisJCQkJaXRlciArPSBvcHQtPm9wdC5fX2RhdGFbaXRlciArIDFdOwogCQkJCW9wdGxlbl9uZXcgPSBpdGVyOwogCQkJfSBlbHNlCiAJCQkJaXRlcisrOwotCQloZHJfZGVsdGEgPSBvcHQtPm9wdGxlbjsKLQkJb3B0LT5vcHRsZW4gPSAob3B0bGVuX25ldyArIDMpICYgfjM7Ci0JCWhkcl9kZWx0YSAtPSBvcHQtPm9wdGxlbjsKKwkJaGRyX2RlbHRhID0gb3B0LT5vcHQub3B0bGVuOworCQlvcHQtPm9wdC5vcHRsZW4gPSAob3B0bGVuX25ldyArIDMpICYgfjM7CisJCWhkcl9kZWx0YSAtPSBvcHQtPm9wdC5vcHRsZW47CiAJfSBlbHNlIHsKIAkJLyogb25seSB0aGUgY2lwc28gb3B0aW9uIHdhcyBwcmVzZW50IG9uIHRoZSBzb2NrZXQgc28gd2UgY2FuCiAJCSAqIHJlbW92ZSB0aGUgZW50aXJlIG9wdGlvbiBzdHJ1Y3QgKi8KIAkJKm9wdF9wdHIgPSBOVUxMOwotCQloZHJfZGVsdGEgPSBvcHQtPm9wdGxlbjsKLQkJa2ZyZWUob3B0KTsKKwkJaGRyX2RlbHRhID0gb3B0LT5vcHQub3B0bGVuOworCQljYWxsX3JjdSgmb3B0LT5yY3UsIG9wdF9rZnJlZV9yY3UpOwogCX0KIAogCXJldHVybiBoZHJfZGVsdGE7CkBAIC0yMDgzLDE1ICsyMDkyLDE1IEBACiB2b2lkIGNpcHNvX3Y0X3NvY2tfZGVsYXR0cihzdHJ1Y3Qgc29jayAqc2spCiB7CiAJaW50IGhkcl9kZWx0YTsKLQlzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0OworCXN0cnVjdCBpcF9vcHRpb25zX3JjdSAqb3B0OwogCXN0cnVjdCBpbmV0X3NvY2sgKnNrX2luZXQ7CiAKIAlza19pbmV0ID0gaW5ldF9zayhzayk7Ci0Jb3B0ID0gc2tfaW5ldC0+b3B0OwotCWlmIChvcHQgPT0gTlVMTCB8fCBvcHQtPmNpcHNvID09IDApCisJb3B0ID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChza19pbmV0LT5pbmV0X29wdCwgMSk7CisJaWYgKG9wdCA9PSBOVUxMIHx8IG9wdC0+b3B0LmNpcHNvID09IDApCiAJCXJldHVybjsKIAotCWhkcl9kZWx0YSA9IGNpcHNvX3Y0X2RlbG9wdCgmc2tfaW5ldC0+b3B0KTsKKwloZHJfZGVsdGEgPSBjaXBzb192NF9kZWxvcHQoJnNrX2luZXQtPmluZXRfb3B0KTsKIAlpZiAoc2tfaW5ldC0+aXNfaWNzayAmJiBoZHJfZGVsdGEgPiAwKSB7CiAJCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqc2tfY29ubiA9IGluZXRfY3NrKHNrKTsKIAkJc2tfY29ubi0+aWNza19leHRfaGRyX2xlbiAtPSBoZHJfZGVsdGE7CkBAIC0yMTA5LDEyICsyMTE4LDEyIEBACiAgKi8KIHZvaWQgY2lwc29fdjRfcmVxX2RlbGF0dHIoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQogewotCXN0cnVjdCBpcF9vcHRpb25zICpvcHQ7CisJc3RydWN0IGlwX29wdGlvbnNfcmN1ICpvcHQ7CiAJc3RydWN0IGluZXRfcmVxdWVzdF9zb2NrICpyZXFfaW5ldDsKIAogCXJlcV9pbmV0ID0gaW5ldF9yc2socmVxKTsKIAlvcHQgPSByZXFfaW5ldC0+b3B0OwotCWlmIChvcHQgPT0gTlVMTCB8fCBvcHQtPmNpcHNvID09IDApCisJaWYgKG9wdCA9PSBOVUxMIHx8IG9wdC0+b3B0LmNpcHNvID09IDApCiAJCXJldHVybjsKIAogCWNpcHNvX3Y0X2RlbG9wdCgmcmVxX2luZXQtPm9wdCk7CkBAIC0yMTg0LDE0ICsyMTkzLDE4IEBACiAgKi8KIGludCBjaXBzb192NF9zb2NrX2dldGF0dHIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQogewotCXN0cnVjdCBpcF9vcHRpb25zICpvcHQ7CisJc3RydWN0IGlwX29wdGlvbnNfcmN1ICpvcHQ7CisJaW50IHJlcyA9IC1FTk9NU0c7CiAKLQlvcHQgPSBpbmV0X3NrKHNrKS0+b3B0OwotCWlmIChvcHQgPT0gTlVMTCB8fCBvcHQtPmNpcHNvID09IDApCi0JCXJldHVybiAtRU5PTVNHOwotCi0JcmV0dXJuIGNpcHNvX3Y0X2dldGF0dHIob3B0LT5fX2RhdGEgKyBvcHQtPmNpcHNvIC0gc2l6ZW9mKHN0cnVjdCBpcGhkciksCi0JCQkJc2VjYXR0cik7CisJcmN1X3JlYWRfbG9jaygpOworCW9wdCA9IHJjdV9kZXJlZmVyZW5jZShpbmV0X3NrKHNrKS0+aW5ldF9vcHQpOworCWlmIChvcHQgJiYgb3B0LT5vcHQuY2lwc28pCisJCXJlcyA9IGNpcHNvX3Y0X2dldGF0dHIob3B0LT5vcHQuX19kYXRhICsKKwkJCQkJCW9wdC0+b3B0LmNpcHNvIC0KKwkJCQkJCXNpemVvZihzdHJ1Y3QgaXBoZHIpLAorCQkJCSAgICAgICBzZWNhdHRyKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gcmVzOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2RhdGFncmFtLmMgYi9uZXQvaXB2NC9kYXRhZ3JhbS5jCmluZGV4IDg1YmQyNGMuLjQyNGZhZmIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2RhdGFncmFtLmMKKysrIGIvbmV0L2lwdjQvZGF0YWdyYW0uYwpAQCAtMjQsNiArMjQsNyBAQAogewogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnVzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopIHVhZGRyOworCXN0cnVjdCBmbG93aTQgKmZsNDsKIAlzdHJ1Y3QgcnRhYmxlICpydDsKIAlfX2JlMzIgc2FkZHI7CiAJaW50IG9pZjsKQEAgLTM4LDYgKzM5LDggQEAKIAogCXNrX2RzdF9yZXNldChzayk7CiAKKwlsb2NrX3NvY2soc2spOworCiAJb2lmID0gc2stPnNrX2JvdW5kX2Rldl9pZjsKIAlzYWRkciA9IGluZXQtPmluZXRfc2FkZHI7CiAJaWYgKGlwdjRfaXNfbXVsdGljYXN0KHVzaW4tPnNpbl9hZGRyLnNfYWRkcikpIHsKQEAgLTQ2LDcgKzQ5LDggQEAKIAkJaWYgKCFzYWRkcikKIAkJCXNhZGRyID0gaW5ldC0+bWNfYWRkcjsKIAl9Ci0JcnQgPSBpcF9yb3V0ZV9jb25uZWN0KHVzaW4tPnNpbl9hZGRyLnNfYWRkciwgc2FkZHIsCisJZmw0ID0gJmluZXQtPmNvcmsuZmwudS5pcDQ7CisJcnQgPSBpcF9yb3V0ZV9jb25uZWN0KGZsNCwgdXNpbi0+c2luX2FkZHIuc19hZGRyLCBzYWRkciwKIAkJCSAgICAgIFJUX0NPTk5fRkxBR1Moc2spLCBvaWYsCiAJCQkgICAgICBzay0+c2tfcHJvdG9jb2wsCiAJCQkgICAgICBpbmV0LT5pbmV0X3Nwb3J0LCB1c2luLT5zaW5fcG9ydCwgc2ssIHRydWUpOwpAQCAtNTQsMjYgKzU4LDMwIEBACiAJCWVyciA9IFBUUl9FUlIocnQpOwogCQlpZiAoZXJyID09IC1FTkVUVU5SRUFDSCkKIAkJCUlQX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIElQU1RBVFNfTUlCX09VVE5PUk9VVEVTKTsKLQkJcmV0dXJuIGVycjsKKwkJZ290byBvdXQ7CiAJfQogCiAJaWYgKChydC0+cnRfZmxhZ3MgJiBSVENGX0JST0FEQ0FTVCkgJiYgIXNvY2tfZmxhZyhzaywgU09DS19CUk9BRENBU1QpKSB7CiAJCWlwX3J0X3B1dChydCk7Ci0JCXJldHVybiAtRUFDQ0VTOworCQllcnIgPSAtRUFDQ0VTOworCQlnb3RvIG91dDsKIAl9CiAJaWYgKCFpbmV0LT5pbmV0X3NhZGRyKQotCQlpbmV0LT5pbmV0X3NhZGRyID0gcnQtPnJ0X3NyYzsJLyogVXBkYXRlIHNvdXJjZSBhZGRyZXNzICovCisJCWluZXQtPmluZXRfc2FkZHIgPSBmbDQtPnNhZGRyOwkvKiBVcGRhdGUgc291cmNlIGFkZHJlc3MgKi8KIAlpZiAoIWluZXQtPmluZXRfcmN2X3NhZGRyKSB7Ci0JCWluZXQtPmluZXRfcmN2X3NhZGRyID0gcnQtPnJ0X3NyYzsKKwkJaW5ldC0+aW5ldF9yY3Zfc2FkZHIgPSBmbDQtPnNhZGRyOwogCQlpZiAoc2stPnNrX3Byb3QtPnJlaGFzaCkKIAkJCXNrLT5za19wcm90LT5yZWhhc2goc2spOwogCX0KLQlpbmV0LT5pbmV0X2RhZGRyID0gcnQtPnJ0X2RzdDsKKwlpbmV0LT5pbmV0X2RhZGRyID0gZmw0LT5kYWRkcjsKIAlpbmV0LT5pbmV0X2Rwb3J0ID0gdXNpbi0+c2luX3BvcnQ7CiAJc2stPnNrX3N0YXRlID0gVENQX0VTVEFCTElTSEVEOwogCWluZXQtPmluZXRfaWQgPSBqaWZmaWVzOwogCiAJc2tfZHN0X3NldChzaywgJnJ0LT5kc3QpOwotCXJldHVybiAwOworCWVyciA9IDA7CitvdXQ6CisJcmVsZWFzZV9zb2NrKHNrKTsKKwlyZXR1cm4gZXJyOwogfQogRVhQT1JUX1NZTUJPTChpcDRfZGF0YWdyYW1fY29ubmVjdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9kZXZpbmV0LmMgYi9uZXQvaXB2NC9kZXZpbmV0LmMKaW5kZXggY2Q5Y2EwOC4uMGQ0YTE4NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZGV2aW5ldC5jCisrKyBiL25ldC9pcHY0L2RldmluZXQuYwpAQCAtMTM2OSw3ICsxMzY5LDcgQEAKIAogc3RhdGljIHNpemVfdCBpbmV0X2dldF9saW5rX2FmX3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBfX2luX2Rldl9nZXRfcnRubChkZXYpOworCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IHJjdV9kZXJlZmVyZW5jZV9ydG5sKGRldi0+aXBfcHRyKTsKIAogCWlmICghaW5fZGV2KQogCQlyZXR1cm4gMDsKQEAgLTEzNzksNyArMTM3OSw3IEBACiAKIHN0YXRpYyBpbnQgaW5ldF9maWxsX2xpbmtfYWYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBfX2luX2Rldl9nZXRfcnRubChkZXYpOworCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IHJjdV9kZXJlZmVyZW5jZV9ydG5sKGRldi0+aXBfcHRyKTsKIAlzdHJ1Y3QgbmxhdHRyICpubGE7CiAJaW50IGk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2VzcDQuYyBiL25ldC9pcHY0L2VzcDQuYwppbmRleCAwM2Y5OTRiLi5hNWI0MTM0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9lc3A0LmMKKysrIGIvbmV0L2lwdjQvZXNwNC5jCkBAIC0yNzYsNyArMjc2LDcgQEAKIAogc3RhdGljIGludCBlc3BfaW5wdXRfZG9uZTIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycikKIHsKLQlzdHJ1Y3QgaXBoZHIgKmlwaDsKKwljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDsKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqeCA9IHhmcm1faW5wdXRfc3RhdGUoc2tiKTsKIAlzdHJ1Y3QgZXNwX2RhdGEgKmVzcCA9IHgtPmRhdGE7CiAJc3RydWN0IGNyeXB0b19hZWFkICphZWFkID0gZXNwLT5hZWFkOwpAQCAtNDg0LDcgKzQ4NCw3IEBACiBzdGF0aWMgdm9pZCBlc3A0X2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5mbykKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0+ZGV2KTsKLQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2ItPmRhdGE7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGggPSAoY29uc3Qgc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOwogCXN0cnVjdCBpcF9lc3BfaGRyICplc3BoID0gKHN0cnVjdCBpcF9lc3BfaGRyICopKHNrYi0+ZGF0YSsoaXBoLT5paGw8PDIpKTsKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKIApAQCAtNDkyLDcgKzQ5Miw4IEBACiAJICAgIGljbXBfaGRyKHNrYiktPmNvZGUgIT0gSUNNUF9GUkFHX05FRURFRCkKIAkJcmV0dXJuOwogCi0JeCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgc2tiLT5tYXJrLCAoeGZybV9hZGRyZXNzX3QgKikmaXBoLT5kYWRkciwgZXNwaC0+c3BpLCBJUFBST1RPX0VTUCwgQUZfSU5FVCk7CisJeCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgc2tiLT5tYXJrLCAoY29uc3QgeGZybV9hZGRyZXNzX3QgKikmaXBoLT5kYWRkciwKKwkJCSAgICAgIGVzcGgtPnNwaSwgSVBQUk9UT19FU1AsIEFGX0lORVQpOwogCWlmICgheCkKIAkJcmV0dXJuOwogCU5FVERFQlVHKEtFUk5fREVCVUcgInBtdHUgZGlzY292ZXJ5IG9uIFNBIEVTUC8lMDh4LyUwOHhcbiIsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYyBiL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCmluZGV4IDQ1MTA4ODMuLjIyNTI0NzEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCisrKyBiL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSA8bmV0L2FycC5oPgogI2luY2x1ZGUgPG5ldC9pcF9maWIuaD4KICNpbmNsdWRlIDxuZXQvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSA8bmV0L3hmcm0uaD4KIAogI2lmbmRlZiBDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTCiAKQEAgLTE4OCw5ICsxODksOSBAQAogICogLSBjaGVjaywgdGhhdCBwYWNrZXQgYXJyaXZlZCBmcm9tIGV4cGVjdGVkIHBoeXNpY2FsIGludGVyZmFjZS4KICAqIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2soKQogICovCi1pbnQgZmliX3ZhbGlkYXRlX3NvdXJjZShfX2JlMzIgc3JjLCBfX2JlMzIgZHN0LCB1OCB0b3MsIGludCBvaWYsCi0JCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMzIgKnNwZWNfZHN0LAotCQkJdTMyICppdGFnLCB1MzIgbWFyaykKK2ludCBmaWJfdmFsaWRhdGVfc291cmNlKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBzcmMsIF9fYmUzMiBkc3QsIHU4IHRvcywKKwkJCWludCBvaWYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUzMiAqc3BlY19kc3QsCisJCQl1MzIgKml0YWcpCiB7CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwogCXN0cnVjdCBmbG93aTQgZmw0OwpAQCAtMjAyLDcgKzIwMyw2IEBACiAKIAlmbDQuZmxvd2k0X29pZiA9IDA7CiAJZmw0LmZsb3dpNF9paWYgPSBvaWY7Ci0JZmw0LmZsb3dpNF9tYXJrID0gbWFyazsKIAlmbDQuZGFkZHIgPSBzcmM7CiAJZmw0LnNhZGRyID0gZHN0OwogCWZsNC5mbG93aTRfdG9zID0gdG9zOwpAQCAtMjEyLDEwICsyMTIsMTIgQEAKIAlpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7CiAJaWYgKGluX2RldikgewogCQlub19hZGRyID0gaW5fZGV2LT5pZmFfbGlzdCA9PSBOVUxMOwotCQlycGYgPSBJTl9ERVZfUlBGSUxURVIoaW5fZGV2KTsKKworCQkvKiBJZ25vcmUgcnBfZmlsdGVyIGZvciBwYWNrZXRzIHByb3RlY3RlZCBieSBJUHNlYy4gKi8KKwkJcnBmID0gc2VjcGF0aF9leGlzdHMoc2tiKSA/IDAgOiBJTl9ERVZfUlBGSUxURVIoaW5fZGV2KTsKKwogCQlhY2NlcHRfbG9jYWwgPSBJTl9ERVZfQUNDRVBUX0xPQ0FMKGluX2Rldik7Ci0JCWlmIChtYXJrICYmICFJTl9ERVZfU1JDX1ZNQVJLKGluX2RldikpCi0JCQlmbDQuZmxvd2k0X21hcmsgPSAwOworCQlmbDQuZmxvd2k0X21hcmsgPSBJTl9ERVZfU1JDX1ZNQVJLKGluX2RldikgPyBza2ItPm1hcmsgOiAwOwogCX0KIAogCWlmIChpbl9kZXYgPT0gTlVMTCkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl90cmllLmMgYi9uZXQvaXB2NC9maWJfdHJpZS5jCmluZGV4IDExZDRkMjguLjU4YzI1ZWEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl90cmllLmMKKysrIGIvbmV0L2lwdjQvZmliX3RyaWUuYwpAQCAtNzIsNiArNzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxuZXQvaXAuaD4KICNpbmNsdWRlIDxuZXQvcHJvdG9jb2wuaD4KQEAgLTEyNiw3ICsxMjcsNyBAQAogCQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKIAkJc3RydWN0IHRub2RlICp0bm9kZV9mcmVlOwogCX07Ci0Jc3RydWN0IHJ0X3RyaWVfbm9kZSAqY2hpbGRbMF07CisJc3RydWN0IHJ0X3RyaWVfbm9kZSBfX3JjdSAqY2hpbGRbMF07CiB9OwogCiAjaWZkZWYgQ09ORklHX0lQX0ZJQl9UUklFX1NUQVRTCkBAIC0xNTEsNyArMTUyLDcgQEAKIH07CiAKIHN0cnVjdCB0cmllIHsKLQlzdHJ1Y3QgcnRfdHJpZV9ub2RlICp0cmllOworCXN0cnVjdCBydF90cmllX25vZGUgX19yY3UgKnRyaWU7CiAjaWZkZWYgQ09ORklHX0lQX0ZJQl9UUklFX1NUQVRTCiAJc3RydWN0IHRyaWVfdXNlX3N0YXRzIHN0YXRzOwogI2VuZGlmCkBAIC0xNzcsMTYgKzE3OCwyOSBAQAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpmbl9hbGlhc19rbWVtIF9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnRyaWVfbGVhZl9rbWVtIF9fcmVhZF9tb3N0bHk7CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHRub2RlICpub2RlX3BhcmVudChzdHJ1Y3QgcnRfdHJpZV9ub2RlICpub2RlKQorLyoKKyAqIGNhbGxlciBtdXN0IGhvbGQgUlROTAorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0bm9kZSAqbm9kZV9wYXJlbnQoY29uc3Qgc3RydWN0IHJ0X3RyaWVfbm9kZSAqbm9kZSkKIHsKLQlyZXR1cm4gKHN0cnVjdCB0bm9kZSAqKShub2RlLT5wYXJlbnQgJiB+Tk9ERV9UWVBFX01BU0spOworCXVuc2lnbmVkIGxvbmcgcGFyZW50OworCisJcGFyZW50ID0gcmN1X2RlcmVmZXJlbmNlX2luZGV4X2NoZWNrKG5vZGUtPnBhcmVudCwgbG9ja2RlcF9ydG5sX2lzX2hlbGQoKSk7CisKKwlyZXR1cm4gKHN0cnVjdCB0bm9kZSAqKShwYXJlbnQgJiB+Tk9ERV9UWVBFX01BU0spOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB0bm9kZSAqbm9kZV9wYXJlbnRfcmN1KHN0cnVjdCBydF90cmllX25vZGUgKm5vZGUpCisvKgorICogY2FsbGVyIG11c3QgaG9sZCBSQ1UgcmVhZCBsb2NrIG9yIFJUTkwKKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgdG5vZGUgKm5vZGVfcGFyZW50X3JjdShjb25zdCBzdHJ1Y3QgcnRfdHJpZV9ub2RlICpub2RlKQogewotCXN0cnVjdCB0bm9kZSAqcmV0ID0gbm9kZV9wYXJlbnQobm9kZSk7CisJdW5zaWduZWQgbG9uZyBwYXJlbnQ7CiAKLQlyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX3J0bmwocmV0KTsKKwlwYXJlbnQgPSByY3VfZGVyZWZlcmVuY2VfaW5kZXhfY2hlY2sobm9kZS0+cGFyZW50LCByY3VfcmVhZF9sb2NrX2hlbGQoKSB8fAorCQkJCQkJCSAgIGxvY2tkZXBfcnRubF9pc19oZWxkKCkpOworCisJcmV0dXJuIChzdHJ1Y3QgdG5vZGUgKikocGFyZW50ICYgfk5PREVfVFlQRV9NQVNLKTsKIH0KIAogLyogU2FtZSBhcyByY3VfYXNzaWduX3BvaW50ZXIKQEAgLTE5OCwxOCArMjEyLDI0IEBACiAJbm9kZS0+cGFyZW50ID0gKHVuc2lnbmVkIGxvbmcpcHRyIHwgTk9ERV9UWVBFKG5vZGUpOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBydF90cmllX25vZGUgKnRub2RlX2dldF9jaGlsZChzdHJ1Y3QgdG5vZGUgKnRuLCB1bnNpZ25lZCBpbnQgaSkKKy8qCisgKiBjYWxsZXIgbXVzdCBob2xkIFJUTkwKKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgcnRfdHJpZV9ub2RlICp0bm9kZV9nZXRfY2hpbGQoY29uc3Qgc3RydWN0IHRub2RlICp0biwgdW5zaWduZWQgaW50IGkpCiB7CiAJQlVHX09OKGkgPj0gMVUgPDwgdG4tPmJpdHMpOwogCi0JcmV0dXJuIHRuLT5jaGlsZFtpXTsKKwlyZXR1cm4gcnRubF9kZXJlZmVyZW5jZSh0bi0+Y2hpbGRbaV0pOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBydF90cmllX25vZGUgKnRub2RlX2dldF9jaGlsZF9yY3Uoc3RydWN0IHRub2RlICp0biwgdW5zaWduZWQgaW50IGkpCisvKgorICogY2FsbGVyIG11c3QgaG9sZCBSQ1UgcmVhZCBsb2NrIG9yIFJUTkwKKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgcnRfdHJpZV9ub2RlICp0bm9kZV9nZXRfY2hpbGRfcmN1KGNvbnN0IHN0cnVjdCB0bm9kZSAqdG4sIHVuc2lnbmVkIGludCBpKQogewotCXN0cnVjdCBydF90cmllX25vZGUgKnJldCA9IHRub2RlX2dldF9jaGlsZCh0biwgaSk7CisJQlVHX09OKGkgPj0gMVUgPDwgdG4tPmJpdHMpOwogCi0JcmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9ydG5sKHJldCk7CisJcmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9ydG5sKHRuLT5jaGlsZFtpXSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHRub2RlX2NoaWxkX2xlbmd0aChjb25zdCBzdHJ1Y3QgdG5vZGUgKnRuKQpAQCAtNDgyLDcgKzUwMiw3IEBACiBzdGF0aWMgdm9pZCB0bm9kZV9wdXRfY2hpbGRfcmVvcmcoc3RydWN0IHRub2RlICp0biwgaW50IGksIHN0cnVjdCBydF90cmllX25vZGUgKm4sCiAJCQkJICBpbnQgd2FzZnVsbCkKIHsKLQlzdHJ1Y3QgcnRfdHJpZV9ub2RlICpjaGkgPSB0bi0+Y2hpbGRbaV07CisJc3RydWN0IHJ0X3RyaWVfbm9kZSAqY2hpID0gcnRubF9kZXJlZmVyZW5jZSh0bi0+Y2hpbGRbaV0pOwogCWludCBpc2Z1bGw7CiAKIAlCVUdfT04oaSA+PSAxPDx0bi0+Yml0cyk7CkBAIC02NjAsNyArNjgwLDcgQEAKIAkJZm9yIChpID0gMDsgaSA8IHRub2RlX2NoaWxkX2xlbmd0aCh0bik7IGkrKykgewogCQkJc3RydWN0IHJ0X3RyaWVfbm9kZSAqbjsKIAotCQkJbiA9IHRuLT5jaGlsZFtpXTsKKwkJCW4gPSBydG5sX2RlcmVmZXJlbmNlKHRuLT5jaGlsZFtpXSk7CiAJCQlpZiAoIW4pCiAJCQkJY29udGludWU7CiAKQEAgLTY3NCw2ICs2OTQsMjAgQEAKIAlyZXR1cm4gKHN0cnVjdCBydF90cmllX25vZGUgKikgdG47CiB9CiAKKworc3RhdGljIHZvaWQgdG5vZGVfY2xlYW5fZnJlZShzdHJ1Y3QgdG5vZGUgKnRuKQoreworCWludCBpOworCXN0cnVjdCB0bm9kZSAqdG9mcmVlOworCisJZm9yIChpID0gMDsgaSA8IHRub2RlX2NoaWxkX2xlbmd0aCh0bik7IGkrKykgeworCQl0b2ZyZWUgPSAoc3RydWN0IHRub2RlICopcnRubF9kZXJlZmVyZW5jZSh0bi0+Y2hpbGRbaV0pOworCQlpZiAodG9mcmVlKQorCQkJdG5vZGVfZnJlZSh0b2ZyZWUpOworCX0KKwl0bm9kZV9mcmVlKHRuKTsKK30KKwogc3RhdGljIHN0cnVjdCB0bm9kZSAqaW5mbGF0ZShzdHJ1Y3QgdHJpZSAqdCwgc3RydWN0IHRub2RlICp0bikKIHsKIAlzdHJ1Y3QgdG5vZGUgKm9sZHRub2RlID0gdG47CkBAIC03NTAsOCArNzg0LDggQEAKIAkJaW5vZGUgPSAoc3RydWN0IHRub2RlICopIG5vZGU7CiAKIAkJaWYgKGlub2RlLT5iaXRzID09IDEpIHsKLQkJCXB1dF9jaGlsZCh0LCB0biwgMippLCBpbm9kZS0+Y2hpbGRbMF0pOwotCQkJcHV0X2NoaWxkKHQsIHRuLCAyKmkrMSwgaW5vZGUtPmNoaWxkWzFdKTsKKwkJCXB1dF9jaGlsZCh0LCB0biwgMippLCBydG5sX2RlcmVmZXJlbmNlKGlub2RlLT5jaGlsZFswXSkpOworCQkJcHV0X2NoaWxkKHQsIHRuLCAyKmkrMSwgcnRubF9kZXJlZmVyZW5jZShpbm9kZS0+Y2hpbGRbMV0pKTsKIAogCQkJdG5vZGVfZnJlZV9zYWZlKGlub2RlKTsKIAkJCWNvbnRpbnVlOwpAQCAtNzkyLDggKzgyNiw4IEBACiAKIAkJc2l6ZSA9IHRub2RlX2NoaWxkX2xlbmd0aChsZWZ0KTsKIAkJZm9yIChqID0gMDsgaiA8IHNpemU7IGorKykgewotCQkJcHV0X2NoaWxkKHQsIGxlZnQsIGosIGlub2RlLT5jaGlsZFtqXSk7Ci0JCQlwdXRfY2hpbGQodCwgcmlnaHQsIGosIGlub2RlLT5jaGlsZFtqICsgc2l6ZV0pOworCQkJcHV0X2NoaWxkKHQsIGxlZnQsIGosIHJ0bmxfZGVyZWZlcmVuY2UoaW5vZGUtPmNoaWxkW2pdKSk7CisJCQlwdXRfY2hpbGQodCwgcmlnaHQsIGosIHJ0bmxfZGVyZWZlcmVuY2UoaW5vZGUtPmNoaWxkW2ogKyBzaXplXSkpOwogCQl9CiAJCXB1dF9jaGlsZCh0LCB0biwgMippLCByZXNpemUodCwgbGVmdCkpOwogCQlwdXRfY2hpbGQodCwgdG4sIDIqaSsxLCByZXNpemUodCwgcmlnaHQpKTsKQEAgLTgwMywxOCArODM3LDggQEAKIAl0bm9kZV9mcmVlX3NhZmUob2xkdG5vZGUpOwogCXJldHVybiB0bjsKIG5vbWVtOgotCXsKLQkJaW50IHNpemUgPSB0bm9kZV9jaGlsZF9sZW5ndGgodG4pOwotCQlpbnQgajsKLQotCQlmb3IgKGogPSAwOyBqIDwgc2l6ZTsgaisrKQotCQkJaWYgKHRuLT5jaGlsZFtqXSkKLQkJCQl0bm9kZV9mcmVlKChzdHJ1Y3QgdG5vZGUgKil0bi0+Y2hpbGRbal0pOwotCi0JCXRub2RlX2ZyZWUodG4pOwotCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCX0KKwl0bm9kZV9jbGVhbl9mcmVlKHRuKTsKKwlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIH0KIAogc3RhdGljIHN0cnVjdCB0bm9kZSAqaGFsdmUoc3RydWN0IHRyaWUgKnQsIHN0cnVjdCB0bm9kZSAqdG4pCkBAIC04ODUsMTggKzkwOSw4IEBACiAJdG5vZGVfZnJlZV9zYWZlKG9sZHRub2RlKTsKIAlyZXR1cm4gdG47CiBub21lbToKLQl7Ci0JCWludCBzaXplID0gdG5vZGVfY2hpbGRfbGVuZ3RoKHRuKTsKLQkJaW50IGo7Ci0KLQkJZm9yIChqID0gMDsgaiA8IHNpemU7IGorKykKLQkJCWlmICh0bi0+Y2hpbGRbal0pCi0JCQkJdG5vZGVfZnJlZSgoc3RydWN0IHRub2RlICopdG4tPmNoaWxkW2pdKTsKLQotCQl0bm9kZV9mcmVlKHRuKTsKLQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQl9CisJdG5vZGVfY2xlYW5fZnJlZSh0bik7CisJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiB9CiAKIC8qIHJlYWRzaWRlIG11c3QgdXNlIHJjdV9yZWFkX2xvY2sgY3VycmVudGx5IGR1bXAgcm91dGluZXMKQEAgLTEwMjgsNyArMTA0Miw3IEBACiAJdF9rZXkgY2luZGV4OwogCiAJcG9zID0gMDsKLQluID0gdC0+dHJpZTsKKwluID0gcnRubF9kZXJlZmVyZW5jZSh0LT50cmllKTsKIAogCS8qIElmIHdlIHBvaW50IHRvIE5VTEwsIHN0b3AuIEVpdGhlciB0aGUgdHJlZSBpcyBlbXB0eSBhbmQgd2Ugc2hvdWxkCiAJICoganVzdCBwdXQgYSBuZXcgbGVhZiBpbiBpZiwgb3Igd2UgaGF2ZSByZWFjaGVkIGFuIGVtcHR5IGNoaWxkIHNsb3QsCkBAIC0xMzE0LDYgKzEzMjgsOSBAQAogCQl9CiAJfQogCisJaWYgKCFwbGVuKQorCQl0Yi0+dGJfbnVtX2RlZmF1bHQrKzsKKwogCWxpc3RfYWRkX3RhaWxfcmN1KCZuZXdfZmEtPmZhX2xpc3QsCiAJCQkgIChmYSA/ICZmYS0+ZmFfbGlzdCA6IGZhX2hlYWQpKTsKIApAQCAtMTY3OSw2ICsxNjk2LDkgQEAKIAogCWxpc3RfZGVsX3JjdSgmZmEtPmZhX2xpc3QpOwogCisJaWYgKCFwbGVuKQorCQl0Yi0+dGJfbnVtX2RlZmF1bHQtLTsKKwogCWlmIChsaXN0X2VtcHR5KGZhX2hlYWQpKSB7CiAJCWhsaXN0X2RlbF9yY3UoJmxpLT5obGlzdCk7CiAJCWZyZWVfbGVhZl9pbmZvKGxpKTsKQEAgLTE3NTEsNyArMTc3MSw3IEBACiAJCQkJY29udGludWU7CiAKIAkJCWlmIChJU19MRUFGKGMpKSB7Ci0JCQkJcHJlZmV0Y2gocC0+Y2hpbGRbaWR4XSk7CisJCQkJcHJlZmV0Y2gocmN1X2RlcmVmZXJlbmNlX3J0bmwocC0+Y2hpbGRbaWR4XSkpOwogCQkJCXJldHVybiAoc3RydWN0IGxlYWYgKikgYzsKIAkJCX0KIApAQCAtMTk2OSw2ICsxOTg5LDcgQEAKIAogCXRiLT50Yl9pZCA9IGlkOwogCXRiLT50Yl9kZWZhdWx0ID0gLTE7CisJdGItPnRiX251bV9kZWZhdWx0ID0gMDsKIAogCXQgPSAoc3RydWN0IHRyaWUgKikgdGItPnRiX2RhdGE7CiAJbWVtc2V0KHQsIDAsIHNpemVvZigqdCkpOwpAQCAtMjI2NCw3ICsyMjg1LDcgQEAKIAogCS8qIHdhbGsgcmVzdCBvZiB0aGlzIGhhc2ggY2hhaW4gKi8KIAloID0gdGItPnRiX2lkICYgKEZJQl9UQUJMRV9IQVNIU1ogLSAxKTsKLQl3aGlsZSAoICh0Yl9ub2RlID0gcmN1X2RlcmVmZXJlbmNlKHRiLT50Yl9obGlzdC5uZXh0KSkgKSB7CisJd2hpbGUgKCh0Yl9ub2RlID0gcmN1X2RlcmVmZXJlbmNlKGhsaXN0X25leHRfcmN1KCZ0Yi0+dGJfaGxpc3QpKSkpIHsKIAkJdGIgPSBobGlzdF9lbnRyeSh0Yl9ub2RlLCBzdHJ1Y3QgZmliX3RhYmxlLCB0Yl9obGlzdCk7CiAJCW4gPSBmaWJfdHJpZV9nZXRfZmlyc3QoaXRlciwgKHN0cnVjdCB0cmllICopIHRiLT50Yl9kYXRhKTsKIAkJaWYgKG4pCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pY21wLmMgYi9uZXQvaXB2NC9pY21wLmMKaW5kZXggZTVmOGE3MS4uNTM5NWU0NSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWNtcC5jCisrKyBiL25ldC9pcHY0L2ljbXAuYwpAQCAtODMsNiArODMsNyBAQAogI2luY2x1ZGUgPG5ldC90Y3AuaD4KICNpbmNsdWRlIDxuZXQvdWRwLmg+CiAjaW5jbHVkZSA8bmV0L3Jhdy5oPgorI2luY2x1ZGUgPG5ldC9waW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtMTA4LDggKzEwOSw3IEBACiAJCV9fYmUzMgkgICAgICAgdGltZXNbM107CiAJfSBkYXRhOwogCWludCBoZWFkX2xlbjsKLQlzdHJ1Y3QgaXBfb3B0aW9ucyByZXBseW9wdHM7Ci0JdW5zaWduZWQgY2hhciAgb3B0YnVmWzQwXTsKKwlzdHJ1Y3QgaXBfb3B0aW9uc19kYXRhIHJlcGx5b3B0czsKIH07CiAKIC8qIEFuIGFycmF5IG9mIGVycm5vIGZvciBlcnJvciBtZXNzYWdlcyBmcm9tIGRlc3QgdW5yZWFjaC4gKi8KQEAgLTIzNCw3ICsyMzQsNyBAQAogICovCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpY21wdjRfeHJsaW1fYWxsb3coc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcnRhYmxlICpydCwKLQkJaW50IHR5cGUsIGludCBjb2RlKQorCQkJCSAgICAgIHN0cnVjdCBmbG93aTQgKmZsNCwgaW50IHR5cGUsIGludCBjb2RlKQogewogCXN0cnVjdCBkc3RfZW50cnkgKmRzdCA9ICZydC0+ZHN0OwogCWJvb2wgcmMgPSB0cnVlOwpAQCAtMjUzLDcgKzI1Myw3IEBACiAJLyogTGltaXQgaWYgaWNtcCB0eXBlIGlzIGVuYWJsZWQgaW4gcmF0ZW1hc2suICovCiAJaWYgKCgxIDw8IHR5cGUpICYgbmV0LT5pcHY0LnN5c2N0bF9pY21wX3JhdGVtYXNrKSB7CiAJCWlmICghcnQtPnBlZXIpCi0JCQlydF9iaW5kX3BlZXIocnQsIDEpOworCQkJcnRfYmluZF9wZWVyKHJ0LCBmbDQtPmRhZGRyLCAxKTsKIAkJcmMgPSBpbmV0X3BlZXJfeHJsaW1fYWxsb3cocnQtPnBlZXIsCiAJCQkJCSAgIG5ldC0+aXB2NC5zeXNjdGxfaWNtcF9yYXRlbGltaXQpOwogCX0KQEAgLTI5MSwxMyArMjkxLDE0IEBACiB9CiAKIHN0YXRpYyB2b2lkIGljbXBfcHVzaF9yZXBseShzdHJ1Y3QgaWNtcF9ieG0gKmljbXBfcGFyYW0sCisJCQkgICAgc3RydWN0IGZsb3dpNCAqZmw0LAogCQkJICAgIHN0cnVjdCBpcGNtX2Nvb2tpZSAqaXBjLCBzdHJ1Y3QgcnRhYmxlICoqcnQpCiB7CiAJc3RydWN0IHNvY2sgKnNrOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKIAlzayA9IGljbXBfc2soZGV2X25ldCgoKnJ0KS0+ZHN0LmRldikpOwotCWlmIChpcF9hcHBlbmRfZGF0YShzaywgaWNtcF9nbHVlX2JpdHMsIGljbXBfcGFyYW0sCisJaWYgKGlwX2FwcGVuZF9kYXRhKHNrLCBmbDQsIGljbXBfZ2x1ZV9iaXRzLCBpY21wX3BhcmFtLAogCQkJICAgaWNtcF9wYXJhbS0+ZGF0YV9sZW4raWNtcF9wYXJhbS0+aGVhZF9sZW4sCiAJCQkgICBpY21wX3BhcmFtLT5oZWFkX2xlbiwKIAkJCSAgIGlwYywgcnQsIE1TR19ET05UV0FJVCkgPCAwKSB7CkBAIC0zMTYsNyArMzE3LDcgQEAKIAkJCQkJCSBpY21wX3BhcmFtLT5oZWFkX2xlbiwgY3N1bSk7CiAJCWljbXBoLT5jaGVja3N1bSA9IGNzdW1fZm9sZChjc3VtKTsKIAkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwotCQlpcF9wdXNoX3BlbmRpbmdfZnJhbWVzKHNrKTsKKwkJaXBfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzaywgZmw0KTsKIAl9CiB9CiAKQEAgLTMyOSwxMSArMzMwLDEyIEBACiAJc3RydWN0IGlwY21fY29va2llIGlwYzsKIAlzdHJ1Y3QgcnRhYmxlICpydCA9IHNrYl9ydGFibGUoc2tiKTsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHJ0LT5kc3QuZGV2KTsKKwlzdHJ1Y3QgZmxvd2k0IGZsNDsKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldDsKIAlfX2JlMzIgZGFkZHI7CiAKLQlpZiAoaXBfb3B0aW9uc19lY2hvKCZpY21wX3BhcmFtLT5yZXBseW9wdHMsIHNrYikpCisJaWYgKGlwX29wdGlvbnNfZWNobygmaWNtcF9wYXJhbS0+cmVwbHlvcHRzLm9wdC5vcHQsIHNrYikpCiAJCXJldHVybjsKIAogCXNrID0gaWNtcF94bWl0X2xvY2sobmV0KTsKQEAgLTM0NCw2NSArMzQ2LDYwIEBACiAJaWNtcF9wYXJhbS0+ZGF0YS5pY21waC5jaGVja3N1bSA9IDA7CiAKIAlpbmV0LT50b3MgPSBpcF9oZHIoc2tiKS0+dG9zOwotCWRhZGRyID0gaXBjLmFkZHIgPSBydC0+cnRfc3JjOworCWRhZGRyID0gaXBjLmFkZHIgPSBpcF9oZHIoc2tiKS0+c2FkZHI7CiAJaXBjLm9wdCA9IE5VTEw7CiAJaXBjLnR4X2ZsYWdzID0gMDsKLQlpZiAoaWNtcF9wYXJhbS0+cmVwbHlvcHRzLm9wdGxlbikgewotCQlpcGMub3B0ID0gJmljbXBfcGFyYW0tPnJlcGx5b3B0czsKLQkJaWYgKGlwYy5vcHQtPnNycikKLQkJCWRhZGRyID0gaWNtcF9wYXJhbS0+cmVwbHlvcHRzLmZhZGRyOworCWlmIChpY21wX3BhcmFtLT5yZXBseW9wdHMub3B0Lm9wdC5vcHRsZW4pIHsKKwkJaXBjLm9wdCA9ICZpY21wX3BhcmFtLT5yZXBseW9wdHMub3B0OworCQlpZiAoaXBjLm9wdC0+b3B0LnNycikKKwkJCWRhZGRyID0gaWNtcF9wYXJhbS0+cmVwbHlvcHRzLm9wdC5vcHQuZmFkZHI7CiAJfQotCXsKLQkJc3RydWN0IGZsb3dpNCBmbDQgPSB7Ci0JCQkuZGFkZHIgPSBkYWRkciwKLQkJCS5zYWRkciA9IHJ0LT5ydF9zcGVjX2RzdCwKLQkJCS5mbG93aTRfdG9zID0gUlRfVE9TKGlwX2hkcihza2IpLT50b3MpLAotCQkJLmZsb3dpNF9wcm90byA9IElQUFJPVE9fSUNNUCwKLQkJfTsKLQkJc2VjdXJpdHlfc2tiX2NsYXNzaWZ5X2Zsb3coc2tiLCBmbG93aTRfdG9fZmxvd2koJmZsNCkpOwotCQlydCA9IGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCAmZmw0KTsKLQkJaWYgKElTX0VSUihydCkpCi0JCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCWlmIChpY21wdjRfeHJsaW1fYWxsb3cobmV0LCBydCwgaWNtcF9wYXJhbS0+ZGF0YS5pY21waC50eXBlLAorCW1lbXNldCgmZmw0LCAwLCBzaXplb2YoZmw0KSk7CisJZmw0LmRhZGRyID0gZGFkZHI7CisJZmw0LnNhZGRyID0gcnQtPnJ0X3NwZWNfZHN0OworCWZsNC5mbG93aTRfdG9zID0gUlRfVE9TKGlwX2hkcihza2IpLT50b3MpOworCWZsNC5mbG93aTRfcHJvdG8gPSBJUFBST1RPX0lDTVA7CisJc2VjdXJpdHlfc2tiX2NsYXNzaWZ5X2Zsb3coc2tiLCBmbG93aTRfdG9fZmxvd2koJmZsNCkpOworCXJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleShuZXQsICZmbDQpOworCWlmIChJU19FUlIocnQpKQorCQlnb3RvIG91dF91bmxvY2s7CisJaWYgKGljbXB2NF94cmxpbV9hbGxvdyhuZXQsIHJ0LCAmZmw0LCBpY21wX3BhcmFtLT5kYXRhLmljbXBoLnR5cGUsCiAJCQkgICAgICAgaWNtcF9wYXJhbS0+ZGF0YS5pY21waC5jb2RlKSkKLQkJaWNtcF9wdXNoX3JlcGx5KGljbXBfcGFyYW0sICZpcGMsICZydCk7CisJCWljbXBfcHVzaF9yZXBseShpY21wX3BhcmFtLCAmZmw0LCAmaXBjLCAmcnQpOwogCWlwX3J0X3B1dChydCk7CiBvdXRfdW5sb2NrOgogCWljbXBfeG1pdF91bmxvY2soc2spOwogfQogCi1zdGF0aWMgc3RydWN0IHJ0YWJsZSAqaWNtcF9yb3V0ZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLAotCQkJCQlzdHJ1Y3QgaXBoZHIgKmlwaCwKK3N0YXRpYyBzdHJ1Y3QgcnRhYmxlICppY21wX3JvdXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsCisJCQkJCXN0cnVjdCBmbG93aTQgKmZsNCwKKwkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYl9pbiwKKwkJCQkJY29uc3Qgc3RydWN0IGlwaGRyICppcGgsCiAJCQkJCV9fYmUzMiBzYWRkciwgdTggdG9zLAogCQkJCQlpbnQgdHlwZSwgaW50IGNvZGUsCiAJCQkJCXN0cnVjdCBpY21wX2J4bSAqcGFyYW0pCiB7Ci0Jc3RydWN0IGZsb3dpNCBmbDQgPSB7Ci0JCS5kYWRkciA9IChwYXJhbS0+cmVwbHlvcHRzLnNyciA/Ci0JCQkgIHBhcmFtLT5yZXBseW9wdHMuZmFkZHIgOiBpcGgtPnNhZGRyKSwKLQkJLnNhZGRyID0gc2FkZHIsCi0JCS5mbG93aTRfdG9zID0gUlRfVE9TKHRvcyksCi0JCS5mbG93aTRfcHJvdG8gPSBJUFBST1RPX0lDTVAsCi0JCS5mbDRfaWNtcF90eXBlID0gdHlwZSwKLQkJLmZsNF9pY21wX2NvZGUgPSBjb2RlLAotCX07CiAJc3RydWN0IHJ0YWJsZSAqcnQsICpydDI7CiAJaW50IGVycjsKIAotCXNlY3VyaXR5X3NrYl9jbGFzc2lmeV9mbG93KHNrYl9pbiwgZmxvd2k0X3RvX2Zsb3dpKCZmbDQpKTsKLQlydCA9IF9faXBfcm91dGVfb3V0cHV0X2tleShuZXQsICZmbDQpOworCW1lbXNldChmbDQsIDAsIHNpemVvZigqZmw0KSk7CisJZmw0LT5kYWRkciA9IChwYXJhbS0+cmVwbHlvcHRzLm9wdC5vcHQuc3JyID8KKwkJICAgICAgcGFyYW0tPnJlcGx5b3B0cy5vcHQub3B0LmZhZGRyIDogaXBoLT5zYWRkcik7CisJZmw0LT5zYWRkciA9IHNhZGRyOworCWZsNC0+Zmxvd2k0X3RvcyA9IFJUX1RPUyh0b3MpOworCWZsNC0+Zmxvd2k0X3Byb3RvID0gSVBQUk9UT19JQ01QOworCWZsNC0+Zmw0X2ljbXBfdHlwZSA9IHR5cGU7CisJZmw0LT5mbDRfaWNtcF9jb2RlID0gY29kZTsKKwlzZWN1cml0eV9za2JfY2xhc3NpZnlfZmxvdyhza2JfaW4sIGZsb3dpNF90b19mbG93aShmbDQpKTsKKwlydCA9IF9faXBfcm91dGVfb3V0cHV0X2tleShuZXQsIGZsNCk7CiAJaWYgKElTX0VSUihydCkpCiAJCXJldHVybiBydDsKIAogCS8qIE5vIG5lZWQgdG8gY2xvbmUgc2luY2Ugd2UncmUganVzdCB1c2luZyBpdHMgYWRkcmVzcy4gKi8KIAlydDIgPSBydDsKIAotCWlmICghZmw0LnNhZGRyKQotCQlmbDQuc2FkZHIgPSBydC0+cnRfc3JjOwotCiAJcnQgPSAoc3RydWN0IHJ0YWJsZSAqKSB4ZnJtX2xvb2t1cChuZXQsICZydC0+ZHN0LAotCQkJCQkgICBmbG93aTRfdG9fZmxvd2koJmZsNCksIE5VTEwsIDApOworCQkJCQkgICBmbG93aTRfdG9fZmxvd2koZmw0KSwgTlVMTCwgMCk7CiAJaWYgKCFJU19FUlIocnQpKSB7CiAJCWlmIChydCAhPSBydDIpCiAJCQlyZXR1cm4gcnQ7CkBAIC00MTEsMTkgKzQwOCwxOSBAQAogCX0gZWxzZQogCQlyZXR1cm4gcnQ7CiAKLQllcnIgPSB4ZnJtX2RlY29kZV9zZXNzaW9uX3JldmVyc2Uoc2tiX2luLCBmbG93aTRfdG9fZmxvd2koJmZsNCksIEFGX0lORVQpOworCWVyciA9IHhmcm1fZGVjb2RlX3Nlc3Npb25fcmV2ZXJzZShza2JfaW4sIGZsb3dpNF90b19mbG93aShmbDQpLCBBRl9JTkVUKTsKIAlpZiAoZXJyKQogCQlnb3RvIHJlbG9va3VwX2ZhaWxlZDsKIAotCWlmIChpbmV0X2FkZHJfdHlwZShuZXQsIGZsNC5zYWRkcikgPT0gUlROX0xPQ0FMKSB7Ci0JCXJ0MiA9IF9faXBfcm91dGVfb3V0cHV0X2tleShuZXQsICZmbDQpOworCWlmIChpbmV0X2FkZHJfdHlwZShuZXQsIGZsNC0+c2FkZHIpID09IFJUTl9MT0NBTCkgeworCQlydDIgPSBfX2lwX3JvdXRlX291dHB1dF9rZXkobmV0LCBmbDQpOwogCQlpZiAoSVNfRVJSKHJ0MikpCiAJCQllcnIgPSBQVFJfRVJSKHJ0Mik7CiAJfSBlbHNlIHsKIAkJc3RydWN0IGZsb3dpNCBmbDRfMiA9IHt9OwogCQl1bnNpZ25lZCBsb25nIG9yZWZkc3Q7CiAKLQkJZmw0XzIuZGFkZHIgPSBmbDQuc2FkZHI7CisJCWZsNF8yLmRhZGRyID0gZmw0LT5zYWRkcjsKIAkJcnQyID0gaXBfcm91dGVfb3V0cHV0X2tleShuZXQsICZmbDRfMik7CiAJCWlmIChJU19FUlIocnQyKSkgewogCQkJZXJyID0gUFRSX0VSUihydDIpOwpAQCAtNDMxLDcgKzQyOCw3IEBACiAJCX0KIAkJLyogVWdoISAqLwogCQlvcmVmZHN0ID0gc2tiX2luLT5fc2tiX3JlZmRzdDsgLyogc2F2ZSBvbGQgcmVmZHN0ICovCi0JCWVyciA9IGlwX3JvdXRlX2lucHV0KHNrYl9pbiwgZmw0LmRhZGRyLCBmbDQuc2FkZHIsCisJCWVyciA9IGlwX3JvdXRlX2lucHV0KHNrYl9pbiwgZmw0LT5kYWRkciwgZmw0LT5zYWRkciwKIAkJCQkgICAgIFJUX1RPUyh0b3MpLCBydDItPmRzdC5kZXYpOwogCiAJCWRzdF9yZWxlYXNlKCZydDItPmRzdCk7CkBAIC00NDMsNyArNDQwLDcgQEAKIAkJZ290byByZWxvb2t1cF9mYWlsZWQ7CiAKIAlydDIgPSAoc3RydWN0IHJ0YWJsZSAqKSB4ZnJtX2xvb2t1cChuZXQsICZydDItPmRzdCwKLQkJCQkJICAgIGZsb3dpNF90b19mbG93aSgmZmw0KSwgTlVMTCwKKwkJCQkJICAgIGZsb3dpNF90b19mbG93aShmbDQpLCBOVUxMLAogCQkJCQkgICAgWEZSTV9MT09LVVBfSUNNUCk7CiAJaWYgKCFJU19FUlIocnQyKSkgewogCQlkc3RfcmVsZWFzZSgmcnQtPmRzdCk7CkBAIC00ODIsNiArNDc5LDcgQEAKIAlzdHJ1Y3QgaWNtcF9ieG0gaWNtcF9wYXJhbTsKIAlzdHJ1Y3QgcnRhYmxlICpydCA9IHNrYl9ydGFibGUoc2tiX2luKTsKIAlzdHJ1Y3QgaXBjbV9jb29raWUgaXBjOworCXN0cnVjdCBmbG93aTQgZmw0OwogCV9fYmUzMiBzYWRkcjsKIAl1OCAgdG9zOwogCXN0cnVjdCBuZXQgKm5ldDsKQEAgLTU4MSw3ICs1NzksNyBAQAogCQkJCQkgICBJUFRPU19QUkVDX0lOVEVSTkVUQ09OVFJPTCkgOgogCQkJCQkgIGlwaC0+dG9zOwogCi0JaWYgKGlwX29wdGlvbnNfZWNobygmaWNtcF9wYXJhbS5yZXBseW9wdHMsIHNrYl9pbikpCisJaWYgKGlwX29wdGlvbnNfZWNobygmaWNtcF9wYXJhbS5yZXBseW9wdHMub3B0Lm9wdCwgc2tiX2luKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCiAKQEAgLTU5NywxNSArNTk1LDE1IEBACiAJaWNtcF9wYXJhbS5vZmZzZXQgPSBza2JfbmV0d29ya19vZmZzZXQoc2tiX2luKTsKIAlpbmV0X3NrKHNrKS0+dG9zID0gdG9zOwogCWlwYy5hZGRyID0gaXBoLT5zYWRkcjsKLQlpcGMub3B0ID0gJmljbXBfcGFyYW0ucmVwbHlvcHRzOworCWlwYy5vcHQgPSAmaWNtcF9wYXJhbS5yZXBseW9wdHMub3B0OwogCWlwYy50eF9mbGFncyA9IDA7CiAKLQlydCA9IGljbXBfcm91dGVfbG9va3VwKG5ldCwgc2tiX2luLCBpcGgsIHNhZGRyLCB0b3MsCisJcnQgPSBpY21wX3JvdXRlX2xvb2t1cChuZXQsICZmbDQsIHNrYl9pbiwgaXBoLCBzYWRkciwgdG9zLAogCQkJICAgICAgIHR5cGUsIGNvZGUsICZpY21wX3BhcmFtKTsKIAlpZiAoSVNfRVJSKHJ0KSkKIAkJZ290byBvdXRfdW5sb2NrOwogCi0JaWYgKCFpY21wdjRfeHJsaW1fYWxsb3cobmV0LCBydCwgdHlwZSwgY29kZSkpCisJaWYgKCFpY21wdjRfeHJsaW1fYWxsb3cobmV0LCBydCwgJmZsNCwgdHlwZSwgY29kZSkpCiAJCWdvdG8gZW5kZTsKIAogCS8qIFJGQyBzYXlzIHJldHVybiBhcyBtdWNoIGFzIHdlIGNhbiB3aXRob3V0IGV4Y2VlZGluZyA1NzYgYnl0ZXMuICovCkBAIC02MTMsNyArNjExLDcgQEAKIAlyb29tID0gZHN0X210dSgmcnQtPmRzdCk7CiAJaWYgKHJvb20gPiA1NzYpCiAJCXJvb20gPSA1NzY7Ci0Jcm9vbSAtPSBzaXplb2Yoc3RydWN0IGlwaGRyKSArIGljbXBfcGFyYW0ucmVwbHlvcHRzLm9wdGxlbjsKKwlyb29tIC09IHNpemVvZihzdHJ1Y3QgaXBoZHIpICsgaWNtcF9wYXJhbS5yZXBseW9wdHMub3B0Lm9wdC5vcHRsZW47CiAJcm9vbSAtPSBzaXplb2Yoc3RydWN0IGljbXBoZHIpOwogCiAJaWNtcF9wYXJhbS5kYXRhX2xlbiA9IHNrYl9pbi0+bGVuIC0gaWNtcF9wYXJhbS5vZmZzZXQ7CkBAIC02MjEsNyArNjE5LDcgQEAKIAkJaWNtcF9wYXJhbS5kYXRhX2xlbiA9IHJvb207CiAJaWNtcF9wYXJhbS5oZWFkX2xlbiA9IHNpemVvZihzdHJ1Y3QgaWNtcGhkcik7CiAKLQlpY21wX3B1c2hfcmVwbHkoJmljbXBfcGFyYW0sICZpcGMsICZydCk7CisJaWNtcF9wdXNoX3JlcGx5KCZpY21wX3BhcmFtLCAmZmw0LCAmaXBjLCAmcnQpOwogZW5kZToKIAlpcF9ydF9wdXQocnQpOwogb3V0X3VubG9jazoKQEAgLTYzNyw3ICs2MzUsNyBAQAogCiBzdGF0aWMgdm9pZCBpY21wX3VucmVhY2goc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaXBoZHIgKmlwaDsKKwljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDsKIAlzdHJ1Y3QgaWNtcGhkciAqaWNtcGg7CiAJaW50IGhhc2gsIHByb3RvY29sOwogCWNvbnN0IHN0cnVjdCBuZXRfcHJvdG9jb2wgKmlwcHJvdDsKQEAgLTY1Niw3ICs2NTQsNyBAQAogCQlnb3RvIG91dF9lcnI7CiAKIAlpY21waCA9IGljbXBfaGRyKHNrYik7Ci0JaXBoICAgPSAoc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOworCWlwaCAgID0gKGNvbnN0IHN0cnVjdCBpcGhkciAqKXNrYi0+ZGF0YTsKIAogCWlmIChpcGgtPmlobCA8IDUpIC8qIE1hbmdsZWQgaGVhZGVyLCBkcm9wLiAqLwogCQlnb3RvIG91dF9lcnI7CkBAIC03MjksNyArNzI3LDcgQEAKIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBpcGgtPmlobCAqIDQgKyA4KSkKIAkJZ290byBvdXQ7CiAKLQlpcGggPSAoc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOworCWlwaCA9IChjb25zdCBzdHJ1Y3QgaXBoZHIgKilza2ItPmRhdGE7CiAJcHJvdG9jb2wgPSBpcGgtPnByb3RvY29sOwogCiAJLyoKQEAgLTc1OCw3ICs3NTYsNyBAQAogCiBzdGF0aWMgdm9pZCBpY21wX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGlwaGRyICppcGg7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGg7CiAKIAlpZiAoc2tiLT5sZW4gPCBzaXplb2Yoc3RydWN0IGlwaGRyKSkKIAkJZ290byBvdXRfZXJyOwpAQCAtNzY5LDcgKzc2Nyw3IEBACiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcGhkcikpKQogCQlnb3RvIG91dDsKIAotCWlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2ItPmRhdGE7CisJaXBoID0gKGNvbnN0IHN0cnVjdCBpcGhkciAqKXNrYi0+ZGF0YTsKIAogCXN3aXRjaCAoaWNtcF9oZHIoc2tiKS0+Y29kZSAmIDcpIHsKIAljYXNlIElDTVBfUkVESVJfTkVUOgpAQCAtNzg0LDYgKzc4MiwxNSBAQAogCQkJICAgICAgIGlwaC0+c2FkZHIsIHNrYi0+ZGV2KTsKIAkJYnJlYWs7CiAJfQorCisJLyogUGluZyB3YW50cyB0byBzZWUgcmVkaXJlY3RzLgorICAgICAgICAgKiBMZXQncyBwcmV0ZW5kIHRoZXkgYXJlIGVycm9ycyBvZiBzb3J0cy4uLiAqLworCWlmIChpcGgtPnByb3RvY29sID09IElQUFJPVE9fSUNNUCAmJgorCSAgICBpcGgtPmlobCA+PSA1ICYmCisJICAgIHBza2JfbWF5X3B1bGwoc2tiLCAoaXBoLT5paGw8PDIpKzgpKSB7CisJCXBpbmdfZXJyKHNrYiwgaWNtcF9oZHIoc2tiKS0+dW4uZ2F0ZXdheSk7CisJfQorCiBvdXQ6CiAJcmV0dXJuOwogb3V0X2VycjoKQEAgLTkzMywxMiArOTQwLDEyIEBACiAJCUJVR19PTihtcCA9PSBOVUxMKTsKIAkJZm9yIChpZmEgPSBpbl9kZXYtPmlmYV9saXN0OyBpZmE7IGlmYSA9IGlmYS0+aWZhX25leHQpIHsKIAkJCWlmICgqbXAgPT0gaWZhLT5pZmFfbWFzayAmJgotCQkJICAgIGluZXRfaWZhX21hdGNoKHJ0LT5ydF9zcmMsIGlmYSkpCisJCQkgICAgaW5ldF9pZmFfbWF0Y2goaXBfaGRyKHNrYiktPnNhZGRyLCBpZmEpKQogCQkJCWJyZWFrOwogCQl9CiAJCWlmICghaWZhICYmIG5ldF9yYXRlbGltaXQoKSkgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAiV3JvbmcgYWRkcmVzcyBtYXNrICVwSTQgZnJvbSAlcy8lcEk0XG4iLAotCQkJICAgICAgIG1wLCBkZXYtPm5hbWUsICZydC0+cnRfc3JjKTsKKwkJCSAgICAgICBtcCwgZGV2LT5uYW1lLCAmaXBfaGRyKHNrYiktPnNhZGRyKTsKIAkJfQogCX0KIH0KQEAgLTEwNDQsNyArMTA1MSw3IEBACiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNtcF9jb250cm9sIGljbXBfcG9pbnRlcnNbTlJfSUNNUF9UWVBFUyArIDFdID0gewogCVtJQ01QX0VDSE9SRVBMWV0gPSB7Ci0JCS5oYW5kbGVyID0gaWNtcF9kaXNjYXJkLAorCQkuaGFuZGxlciA9IHBpbmdfcmN2LAogCX0sCiAJWzFdID0gewogCQkuaGFuZGxlciA9IGljbXBfZGlzY2FyZCwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lnbXAuYyBiL25ldC9pcHY0L2lnbXAuYwppbmRleCA4ZjYyZDY2Li42NzJlNDc2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pZ21wLmMKKysrIGIvbmV0L2lwdjQvaWdtcC5jCkBAIC0zMDMsNiArMzAzLDcgQEAKIAlzdHJ1Y3QgaXBoZHIgKnBpcDsKIAlzdHJ1Y3QgaWdtcHYzX3JlcG9ydCAqcGlnOwogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKKwlzdHJ1Y3QgZmxvd2k0IGZsNDsKIAogCXdoaWxlICgxKSB7CiAJCXNrYiA9IGFsbG9jX3NrYihzaXplICsgTExfQUxMT0NBVEVEX1NQQUNFKGRldiksCkBAIC0zMTUsMTggKzMxNiwxMyBAQAogCX0KIAlpZ21wX3NrYl9zaXplKHNrYikgPSBzaXplOwogCi0JcnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMobmV0LCBOVUxMLCBJR01QVjNfQUxMX01DUiwgMCwKKwlydCA9IGlwX3JvdXRlX291dHB1dF9wb3J0cyhuZXQsICZmbDQsIE5VTEwsIElHTVBWM19BTExfTUNSLCAwLAogCQkJCSAgIDAsIDAsCiAJCQkJICAgSVBQUk9UT19JR01QLCAwLCBkZXYtPmlmaW5kZXgpOwogCWlmIChJU19FUlIocnQpKSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JaWYgKHJ0LT5ydF9zcmMgPT0gMCkgewotCQlrZnJlZV9za2Ioc2tiKTsKLQkJaXBfcnRfcHV0KHJ0KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQogCiAJc2tiX2RzdF9zZXQoc2tiLCAmcnQtPmRzdCk7CiAJc2tiLT5kZXYgPSBkZXY7CkBAIC0zNDIsOCArMzM4LDggQEAKIAlwaXAtPnRvcyAgICAgID0gMHhjMDsKIAlwaXAtPmZyYWdfb2ZmID0gaHRvbnMoSVBfREYpOwogCXBpcC0+dHRsICAgICAgPSAxOwotCXBpcC0+ZGFkZHIgICAgPSBydC0+cnRfZHN0OwotCXBpcC0+c2FkZHIgICAgPSBydC0+cnRfc3JjOworCXBpcC0+ZGFkZHIgICAgPSBmbDQuZGFkZHI7CisJcGlwLT5zYWRkciAgICA9IGZsNC5zYWRkcjsKIAlwaXAtPnByb3RvY29sID0gSVBQUk9UT19JR01QOwogCXBpcC0+dG90X2xlbiAgPSAwOwkvKiBmaWxsZWQgaW4gbGF0ZXIgKi8KIAlpcF9zZWxlY3RfaWRlbnQocGlwLCAmcnQtPmRzdCwgTlVMTCk7CkBAIC02NDksNiArNjQ1LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5fZGV2LT5kZXY7CiAJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOwogCV9fYmUzMglncm91cCA9IHBtYyA/IHBtYy0+bXVsdGlhZGRyIDogMDsKKwlzdHJ1Y3QgZmxvd2k0IGZsNDsKIAlfX2JlMzIJZHN0OwogCiAJaWYgKHR5cGUgPT0gSUdNUFYzX0hPU1RfTUVNQkVSU0hJUF9SRVBPUlQpCkBAIC02NTgsMTcgKzY1NSwxMiBAQAogCWVsc2UKIAkJZHN0ID0gZ3JvdXA7CiAKLQlydCA9IGlwX3JvdXRlX291dHB1dF9wb3J0cyhuZXQsIE5VTEwsIGRzdCwgMCwKKwlydCA9IGlwX3JvdXRlX291dHB1dF9wb3J0cyhuZXQsICZmbDQsIE5VTEwsIGRzdCwgMCwKIAkJCQkgICAwLCAwLAogCQkJCSAgIElQUFJPVE9fSUdNUCwgMCwgZGV2LT5pZmluZGV4KTsKIAlpZiAoSVNfRVJSKHJ0KSkKIAkJcmV0dXJuIC0xOwogCi0JaWYgKHJ0LT5ydF9zcmMgPT0gMCkgewotCQlpcF9ydF9wdXQocnQpOwotCQlyZXR1cm4gLTE7Ci0JfQotCiAJc2tiID0gYWxsb2Nfc2tiKElHTVBfU0laRStMTF9BTExPQ0FURURfU1BBQ0UoZGV2KSwgR0ZQX0FUT01JQyk7CiAJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCWlwX3J0X3B1dChydCk7CkBAIC02ODksNyArNjgxLDcgQEAKIAlpcGgtPmZyYWdfb2ZmID0gaHRvbnMoSVBfREYpOwogCWlwaC0+dHRsICAgICAgPSAxOwogCWlwaC0+ZGFkZHIgICAgPSBkc3Q7Ci0JaXBoLT5zYWRkciAgICA9IHJ0LT5ydF9zcmM7CisJaXBoLT5zYWRkciAgICA9IGZsNC5zYWRkcjsKIAlpcGgtPnByb3RvY29sID0gSVBQUk9UT19JR01QOwogCWlwX3NlbGVjdF9pZGVudChpcGgsICZydC0+ZHN0LCBOVUxMKTsKIAkoKHU4KikmaXBoWzFdKVswXSA9IElQT1BUX1JBOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKaW5kZXggMzhmMjNlNy4uNjFmYWM0YyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYworKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCkBAIC0zNTAsMzAgKzM1MCwyNCBAQAogRVhQT1JUX1NZTUJPTChpbmV0X2Nza19yZXNldF9rZWVwYWxpdmVfdGltZXIpOwogCiBzdHJ1Y3QgZHN0X2VudHJ5ICppbmV0X2Nza19yb3V0ZV9yZXEoc3RydWN0IHNvY2sgKnNrLAorCQkJCSAgICAgc3RydWN0IGZsb3dpNCAqZmw0LAogCQkJCSAgICAgY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQogewogCXN0cnVjdCBydGFibGUgKnJ0OwogCWNvbnN0IHN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaXJlcSA9IGluZXRfcnNrKHJlcSk7Ci0Jc3RydWN0IGlwX29wdGlvbnMgKm9wdCA9IGluZXRfcnNrKHJlcSktPm9wdDsKLQlzdHJ1Y3QgZmxvd2k0IGZsNCA9IHsKLQkJLmZsb3dpNF9vaWYgPSBzay0+c2tfYm91bmRfZGV2X2lmLAotCQkuZmxvd2k0X21hcmsgPSBzay0+c2tfbWFyaywKLQkJLmRhZGRyID0gKChvcHQgJiYgb3B0LT5zcnIpID8KLQkJCSAgb3B0LT5mYWRkciA6IGlyZXEtPnJtdF9hZGRyKSwKLQkJLnNhZGRyID0gaXJlcS0+bG9jX2FkZHIsCi0JCS5mbG93aTRfdG9zID0gUlRfQ09OTl9GTEFHUyhzayksCi0JCS5mbG93aTRfcHJvdG8gPSBzay0+c2tfcHJvdG9jb2wsCi0JCS5mbG93aTRfZmxhZ3MgPSBpbmV0X3NrX2Zsb3dpX2ZsYWdzKHNrKSwKLQkJLmZsNF9zcG9ydCA9IGluZXRfc2soc2spLT5pbmV0X3Nwb3J0LAotCQkuZmw0X2Rwb3J0ID0gaXJlcS0+cm10X3BvcnQsCi0JfTsKKwlzdHJ1Y3QgaXBfb3B0aW9uc19yY3UgKm9wdCA9IGluZXRfcnNrKHJlcSktPm9wdDsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAKLQlzZWN1cml0eV9yZXFfY2xhc3NpZnlfZmxvdyhyZXEsIGZsb3dpNF90b19mbG93aSgmZmw0KSk7Ci0JcnQgPSBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhuZXQsICZmbDQsIHNrKTsKKwlmbG93aTRfaW5pdF9vdXRwdXQoZmw0LCBzay0+c2tfYm91bmRfZGV2X2lmLCBzay0+c2tfbWFyaywKKwkJCSAgIFJUX0NPTk5fRkxBR1Moc2spLCBSVF9TQ09QRV9VTklWRVJTRSwKKwkJCSAgIHNrLT5za19wcm90b2NvbCwgaW5ldF9za19mbG93aV9mbGFncyhzayksCisJCQkgICAob3B0ICYmIG9wdC0+b3B0LnNycikgPyBvcHQtPm9wdC5mYWRkciA6IGlyZXEtPnJtdF9hZGRyLAorCQkJICAgaXJlcS0+bG9jX2FkZHIsIGlyZXEtPnJtdF9wb3J0LCBpbmV0X3NrKHNrKS0+aW5ldF9zcG9ydCk7CisJc2VjdXJpdHlfcmVxX2NsYXNzaWZ5X2Zsb3cocmVxLCBmbG93aTRfdG9fZmxvd2koZmw0KSk7CisJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhuZXQsIGZsNCwgc2spOwogCWlmIChJU19FUlIocnQpKQogCQlnb3RvIG5vX3JvdXRlOwotCWlmIChvcHQgJiYgb3B0LT5pc19zdHJpY3Ryb3V0ZSAmJiBydC0+cnRfZHN0ICE9IHJ0LT5ydF9nYXRld2F5KQorCWlmIChvcHQgJiYgb3B0LT5vcHQuaXNfc3RyaWN0cm91dGUgJiYgZmw0LT5kYWRkciAhPSBydC0+cnRfZ2F0ZXdheSkKIAkJZ290byByb3V0ZV9lcnI7CiAJcmV0dXJuICZydC0+ZHN0OwogCkBAIC0zODUsNiArMzc5LDM5IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpbmV0X2Nza19yb3V0ZV9yZXEpOwogCitzdHJ1Y3QgZHN0X2VudHJ5ICppbmV0X2Nza19yb3V0ZV9jaGlsZF9zb2NrKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgIHN0cnVjdCBzb2NrICpuZXdzaywKKwkJCQkJICAgIGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKK3sKKwljb25zdCBzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgKmlyZXEgPSBpbmV0X3JzayhyZXEpOworCXN0cnVjdCBpbmV0X3NvY2sgKm5ld2luZXQgPSBpbmV0X3NrKG5ld3NrKTsKKwlzdHJ1Y3QgaXBfb3B0aW9uc19yY3UgKm9wdCA9IGlyZXEtPm9wdDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CisJc3RydWN0IGZsb3dpNCAqZmw0OworCXN0cnVjdCBydGFibGUgKnJ0OworCisJZmw0ID0gJm5ld2luZXQtPmNvcmsuZmwudS5pcDQ7CisJZmxvd2k0X2luaXRfb3V0cHV0KGZsNCwgc2stPnNrX2JvdW5kX2Rldl9pZiwgc2stPnNrX21hcmssCisJCQkgICBSVF9DT05OX0ZMQUdTKHNrKSwgUlRfU0NPUEVfVU5JVkVSU0UsCisJCQkgICBzay0+c2tfcHJvdG9jb2wsIGluZXRfc2tfZmxvd2lfZmxhZ3Moc2spLAorCQkJICAgKG9wdCAmJiBvcHQtPm9wdC5zcnIpID8gb3B0LT5vcHQuZmFkZHIgOiBpcmVxLT5ybXRfYWRkciwKKwkJCSAgIGlyZXEtPmxvY19hZGRyLCBpcmVxLT5ybXRfcG9ydCwgaW5ldF9zayhzayktPmluZXRfc3BvcnQpOworCXNlY3VyaXR5X3JlcV9jbGFzc2lmeV9mbG93KHJlcSwgZmxvd2k0X3RvX2Zsb3dpKGZsNCkpOworCXJ0ID0gaXBfcm91dGVfb3V0cHV0X2Zsb3cobmV0LCBmbDQsIHNrKTsKKwlpZiAoSVNfRVJSKHJ0KSkKKwkJZ290byBub19yb3V0ZTsKKwlpZiAob3B0ICYmIG9wdC0+b3B0LmlzX3N0cmljdHJvdXRlICYmIGZsNC0+ZGFkZHIgIT0gcnQtPnJ0X2dhdGV3YXkpCisJCWdvdG8gcm91dGVfZXJyOworCXJldHVybiAmcnQtPmRzdDsKKworcm91dGVfZXJyOgorCWlwX3J0X3B1dChydCk7Citub19yb3V0ZToKKwlJUF9JTkNfU1RBVFNfQkgobmV0LCBJUFNUQVRTX01JQl9PVVROT1JPVVRFUyk7CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpbmV0X2Nza19yb3V0ZV9jaGlsZF9zb2NrKTsKKwogc3RhdGljIGlubGluZSB1MzIgaW5ldF9zeW5xX2hhc2goY29uc3QgX19iZTMyIHJhZGRyLCBjb25zdCBfX2JlMTYgcnBvcnQsCiAJCQkJIGNvbnN0IHUzMiBybmQsIGNvbnN0IHUzMiBzeW5xX2hzaXplKQogewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9kaWFnLmMgYi9uZXQvaXB2NC9pbmV0X2RpYWcuYwppbmRleCAyYWRhMTcxLi42ZmZlOTRjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2RpYWcuYworKysgYi9uZXQvaXB2NC9pbmV0X2RpYWcuYwpAQCAtMTI0LDcgKzEyNCw3IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkIChDT05GSUdfSVBWNl9NT0RVTEUpCiAJaWYgKHItPmlkaWFnX2ZhbWlseSA9PSBBRl9JTkVUNikgewotCQlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7CisJCWNvbnN0IHN0cnVjdCBpcHY2X3BpbmZvICpucCA9IGluZXQ2X3NrKHNrKTsKIAogCQlpcHY2X2FkZHJfY29weSgoc3RydWN0IGluNl9hZGRyICopci0+aWQuaWRpYWdfc3JjLAogCQkJICAgICAgICZucC0+cmN2X3NhZGRyKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfbHJvLmMgYi9uZXQvaXB2NC9pbmV0X2xyby5jCmluZGV4IDQ3MDM4Y2IuLjg1YTBmNzUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRfbHJvLmMKKysrIGIvbmV0L2lwdjQvaW5ldF9scm8uYwpAQCAtNTEsOCArNTEsOCBAQAogICogQmFzaWMgdGNwIGNoZWNrcyB3aGV0aGVyIHBhY2tldCBpcyBzdWl0YWJsZSBmb3IgTFJPCiAgKi8KIAotc3RhdGljIGludCBscm9fdGNwX2lwX2NoZWNrKHN0cnVjdCBpcGhkciAqaXBoLCBzdHJ1Y3QgdGNwaGRyICp0Y3BoLAotCQkJICAgIGludCBsZW4sIHN0cnVjdCBuZXRfbHJvX2Rlc2MgKmxyb19kZXNjKQorc3RhdGljIGludCBscm9fdGNwX2lwX2NoZWNrKGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoLCBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0Y3BoLAorCQkJICAgIGludCBsZW4sIGNvbnN0IHN0cnVjdCBuZXRfbHJvX2Rlc2MgKmxyb19kZXNjKQogewogICAgICAgICAvKiBjaGVjayBpcCBoZWFkZXI6IGRvbid0IGFnZ3JlZ2F0ZSBwYWRkZWQgZnJhbWVzICovCiAJaWYgKG50b2hzKGlwaC0+dG90X2xlbikgIT0gbGVuKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZm9yd2FyZC5jIGIvbmV0L2lwdjQvaXBfZm9yd2FyZC5jCmluZGV4IDk5NDYxZjAuLjNiMzRkMWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2ZvcndhcmQuYworKysgYi9uZXQvaXB2NC9pcF9mb3J3YXJkLmMKQEAgLTg0LDcgKzg0LDcgQEAKIAogCXJ0ID0gc2tiX3J0YWJsZShza2IpOwogCi0JaWYgKG9wdC0+aXNfc3RyaWN0cm91dGUgJiYgcnQtPnJ0X2RzdCAhPSBydC0+cnRfZ2F0ZXdheSkKKwlpZiAob3B0LT5pc19zdHJpY3Ryb3V0ZSAmJiBpcF9oZHIoc2tiKS0+ZGFkZHIgIT0gcnQtPnJ0X2dhdGV3YXkpCiAJCWdvdG8gc3JfZmFpbGVkOwogCiAJaWYgKHVubGlrZWx5KHNrYi0+bGVuID4gZHN0X210dSgmcnQtPmRzdCkgJiYgIXNrYl9pc19nc28oc2tiKSAmJgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYyBiL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMKaW5kZXggYjFkMjgyZi4uMGFkNjAzNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYworKysgYi9uZXQvaXB2NC9pcF9mcmFnbWVudC5jCkBAIC03NywyMiArNzcsNDAgQEAKIAlzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyOwogfTsKIAotI2RlZmluZSBJUEZSQUdfRUNOX0NMRUFSICAweDAxIC8qIG9uZSBmcmFnIGhhZCBJTkVUX0VDTl9OT1RfRUNUICovCi0jZGVmaW5lIElQRlJBR19FQ05fU0VUX0NFIDB4MDQgLyogb25lIGZyYWcgaGFkIElORVRfRUNOX0NFICovCisvKiBSRkMgMzE2OCBzdXBwb3J0IDoKKyAqIFdlIHdhbnQgdG8gY2hlY2sgRUNOIHZhbHVlcyBvZiBhbGwgZnJhZ21lbnRzLCBkbyBkZXRlY3QgaW52YWxpZCBjb21iaW5hdGlvbnMuCisgKiBJbiBpcHEtPmVjbiwgd2Ugc3RvcmUgdGhlIE9SIHZhbHVlIG9mIGVhY2ggaXA0X2ZyYWdfZWNuKCkgZnJhZ21lbnQgdmFsdWUuCisgKi8KKyNkZWZpbmUJSVBGUkFHX0VDTl9OT1RfRUNUCTB4MDEgLyogb25lIGZyYWcgaGFkIEVDTl9OT1RfRUNUICovCisjZGVmaW5lCUlQRlJBR19FQ05fRUNUXzEJMHgwMiAvKiBvbmUgZnJhZyBoYWQgRUNOX0VDVF8xICovCisjZGVmaW5lCUlQRlJBR19FQ05fRUNUXzAJMHgwNCAvKiBvbmUgZnJhZyBoYWQgRUNOX0VDVF8wICovCisjZGVmaW5lCUlQRlJBR19FQ05fQ0UJCTB4MDggLyogb25lIGZyYWcgaGFkIEVDTl9DRSAqLwogCiBzdGF0aWMgaW5saW5lIHU4IGlwNF9mcmFnX2Vjbih1OCB0b3MpCiB7Ci0JdG9zID0gKHRvcyAmIElORVRfRUNOX01BU0spICsgMTsKLQkvKgotCSAqIEFmdGVyIHRoZSBsYXN0IG9wZXJhdGlvbiB3ZSBoYXZlIChpbiBiaW5hcnkpOgotCSAqIElORVRfRUNOX05PVF9FQ1QgPT4gMDAxCi0JICogSU5FVF9FQ05fRUNUXzEgICA9PiAwMTAKLQkgKiBJTkVUX0VDTl9FQ1RfMCAgID0+IDAxMQotCSAqIElORVRfRUNOX0NFICAgICAgPT4gMTAwCi0JICovCi0JcmV0dXJuICh0b3MgJiAyKSA/IDAgOiB0b3M7CisJcmV0dXJuIDEgPDwgKHRvcyAmIElORVRfRUNOX01BU0spOwogfQogCisvKiBHaXZlbiB0aGUgT1IgdmFsdWVzIG9mIGFsbCBmcmFnbWVudHMsIGFwcGx5IFJGQyAzMTY4IDUuMyByZXF1aXJlbWVudHMKKyAqIFZhbHVlIDogMHhmZiBpZiBmcmFtZSBzaG91bGQgYmUgZHJvcHBlZC4KKyAqICAgICAgICAgMCBvciBJTkVUX0VDTl9DRSB2YWx1ZSwgdG8gYmUgT1JlZCBpbiB0byBmaW5hbCBpcGgtPnRvcyBmaWVsZAorICovCitzdGF0aWMgY29uc3QgdTggaXA0X2ZyYWdfZWNuX3RhYmxlWzE2XSA9IHsKKwkvKiBhdCBsZWFzdCBvbmUgZnJhZ21lbnQgaGFkIENFLCBhbmQgb3RoZXJzIEVDVF8wIG9yIEVDVF8xICovCisJW0lQRlJBR19FQ05fQ0UgfCBJUEZSQUdfRUNOX0VDVF8wXQkJCT0gSU5FVF9FQ05fQ0UsCisJW0lQRlJBR19FQ05fQ0UgfCBJUEZSQUdfRUNOX0VDVF8xXQkJCT0gSU5FVF9FQ05fQ0UsCisJW0lQRlJBR19FQ05fQ0UgfCBJUEZSQUdfRUNOX0VDVF8wIHwgSVBGUkFHX0VDTl9FQ1RfMV0JPSBJTkVUX0VDTl9DRSwKKworCS8qIGludmFsaWQgY29tYmluYXRpb25zIDogZHJvcCBmcmFtZSAqLworCVtJUEZSQUdfRUNOX05PVF9FQ1QgfCBJUEZSQUdfRUNOX0NFXSA9IDB4ZmYsCisJW0lQRlJBR19FQ05fTk9UX0VDVCB8IElQRlJBR19FQ05fRUNUXzBdID0gMHhmZiwKKwlbSVBGUkFHX0VDTl9OT1RfRUNUIHwgSVBGUkFHX0VDTl9FQ1RfMV0gPSAweGZmLAorCVtJUEZSQUdfRUNOX05PVF9FQ1QgfCBJUEZSQUdfRUNOX0VDVF8wIHwgSVBGUkFHX0VDTl9FQ1RfMV0gPSAweGZmLAorCVtJUEZSQUdfRUNOX05PVF9FQ1QgfCBJUEZSQUdfRUNOX0NFIHwgSVBGUkFHX0VDTl9FQ1RfMF0gPSAweGZmLAorCVtJUEZSQUdfRUNOX05PVF9FQ1QgfCBJUEZSQUdfRUNOX0NFIHwgSVBGUkFHX0VDTl9FQ1RfMV0gPSAweGZmLAorCVtJUEZSQUdfRUNOX05PVF9FQ1QgfCBJUEZSQUdfRUNOX0NFIHwgSVBGUkFHX0VDTl9FQ1RfMCB8IElQRlJBR19FQ05fRUNUXzFdID0gMHhmZiwKK307CisKIHN0YXRpYyBzdHJ1Y3QgaW5ldF9mcmFncyBpcDRfZnJhZ3M7CiAKIGludCBpcF9mcmFnX25xdWV1ZXMoc3RydWN0IG5ldCAqbmV0KQpAQCAtNTI0LDkgKzU0MiwxNSBAQAogCWludCBsZW47CiAJaW50IGlobGVuOwogCWludCBlcnI7CisJdTggZWNuOwogCiAJaXBxX2tpbGwocXApOwogCisJZWNuID0gaXA0X2ZyYWdfZWNuX3RhYmxlW3FwLT5lY25dOworCWlmICh1bmxpa2VseShlY24gPT0gMHhmZikpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXRfZmFpbDsKKwl9CiAJLyogTWFrZSB0aGUgb25lIHdlIGp1c3QgcmVjZWl2ZWQgdGhlIGhlYWQuICovCiAJaWYgKHByZXYpIHsKIAkJaGVhZCA9IHByZXYtPm5leHQ7CkBAIC02MDUsMTcgKzYyOSw3IEBACiAJaXBoID0gaXBfaGRyKGhlYWQpOwogCWlwaC0+ZnJhZ19vZmYgPSAwOwogCWlwaC0+dG90X2xlbiA9IGh0b25zKGxlbik7Ci0JLyogUkZDMzE2OCA1LjMgRnJhZ21lbnRhdGlvbiBzdXBwb3J0Ci0JICogSWYgb25lIGZyYWdtZW50IGhhZCBJTkVUX0VDTl9OT1RfRUNULAotCSAqCXJlYXNzZW1ibGVkIGZyYW1lIGFsc28gaGFzIElORVRfRUNOX05PVF9FQ1QKLQkgKiBFbGlmIG9uZSBmcmFnbWVudCBoYWQgSU5FVF9FQ05fQ0UKLQkgKglyZWFzc2VtYmxlZCBmcmFtZSBhbHNvIGhhcyBJTkVUX0VDTl9DRQotCSAqLwotCWlmIChxcC0+ZWNuICYgSVBGUkFHX0VDTl9DTEVBUikKLQkJaXBoLT50b3MgJj0gfklORVRfRUNOX01BU0s7Ci0JZWxzZSBpZiAocXAtPmVjbiAmIElQRlJBR19FQ05fU0VUX0NFKQotCQlpcGgtPnRvcyB8PSBJTkVUX0VDTl9DRTsKLQorCWlwaC0+dG9zIHw9IGVjbjsKIAlJUF9JTkNfU1RBVFNfQkgobmV0LCBJUFNUQVRTX01JQl9SRUFTTU9LUyk7CiAJcXAtPnEuZnJhZ21lbnRzID0gTlVMTDsKIAlxcC0+cS5mcmFnbWVudHNfdGFpbCA9IE5VTEw7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9ncmUuYyBiL25ldC9pcHY0L2lwX2dyZS5jCmluZGV4IGRhNTk0MWYuLjg4NzEwNjcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2dyZS5jCisrKyBiL25ldC9pcHY0L2lwX2dyZS5jCkBAIC00MTMsMTEgKzQxMyw2IEBACiAKIAlkZXZfbmV0X3NldChkZXYsIG5ldCk7CiAKLQlpZiAoc3RyY2hyKG5hbWUsICclJykpIHsKLQkJaWYgKGRldl9hbGxvY19uYW1lKGRldiwgbmFtZSkgPCAwKQotCQkJZ290byBmYWlsZWRfZnJlZTsKLQl9Ci0KIAludCA9IG5ldGRldl9wcml2KGRldik7CiAJbnQtPnBhcm1zID0gKnBhcm1zOwogCWRldi0+cnRubF9saW5rX29wcyA9ICZpcGdyZV9saW5rX29wczsKQEAgLTQ2Miw3ICs0NTcsNyBAQAogICAgYnkgdGhlbXNlbGY/Pz8KICAqLwogCi0Jc3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOworCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoID0gKGNvbnN0IHN0cnVjdCBpcGhkciAqKXNrYi0+ZGF0YTsKIAlfX2JlMTYJICAgICAqcCA9IChfX2JlMTYqKShza2ItPmRhdGErKGlwaC0+aWhsPDwyKSk7CiAJaW50IGdyZWhsZW4gPSAoaXBoLT5paGw8PDIpICsgNDsKIAljb25zdCBpbnQgdHlwZSA9IGljbXBfaGRyKHNrYiktPnR5cGU7CkBAIC01MzQsNyArNTI5LDcgQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGlwZ3JlX2Vjbl9kZWNhcHN1bGF0ZShzdHJ1Y3QgaXBoZHIgKmlwaCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcGdyZV9lY25fZGVjYXBzdWxhdGUoY29uc3Qgc3RydWN0IGlwaGRyICppcGgsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaWYgKElORVRfRUNOX2lzX2NlKGlwaC0+dG9zKSkgewogCQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHsKQEAgLTU0NiwxOSArNTQxLDE5IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgdTgKLWlwZ3JlX2Vjbl9lbmNhcHN1bGF0ZSh1OCB0b3MsIHN0cnVjdCBpcGhkciAqb2xkX2lwaCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK2lwZ3JlX2Vjbl9lbmNhcHN1bGF0ZSh1OCB0b3MsIGNvbnN0IHN0cnVjdCBpcGhkciAqb2xkX2lwaCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAl1OCBpbm5lciA9IDA7CiAJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKQogCQlpbm5lciA9IG9sZF9pcGgtPnRvczsKIAllbHNlIGlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKQotCQlpbm5lciA9IGlwdjZfZ2V0X2RzZmllbGQoKHN0cnVjdCBpcHY2aGRyICopb2xkX2lwaCk7CisJCWlubmVyID0gaXB2Nl9nZXRfZHNmaWVsZCgoY29uc3Qgc3RydWN0IGlwdjZoZHIgKilvbGRfaXBoKTsKIAlyZXR1cm4gSU5FVF9FQ05fZW5jYXBzdWxhdGUodG9zLCBpbm5lcik7CiB9CiAKIHN0YXRpYyBpbnQgaXBncmVfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGlwaGRyICppcGg7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGg7CiAJdTggICAgICpoOwogCV9fYmUxNiAgICBmbGFnczsKIAlfX3N1bTE2ICAgY3N1bSA9IDA7CkBAIC02OTcsOCArNjkyLDkgQEAKIHsKIAlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBwY3B1X3RzdGF0cyAqdHN0YXRzOwotCXN0cnVjdCBpcGhkciAgKm9sZF9pcGggPSBpcF9oZHIoc2tiKTsKLQlzdHJ1Y3QgaXBoZHIgICp0aXBoOworCWNvbnN0IHN0cnVjdCBpcGhkciAgKm9sZF9pcGggPSBpcF9oZHIoc2tiKTsKKwljb25zdCBzdHJ1Y3QgaXBoZHIgICp0aXBoOworCXN0cnVjdCBmbG93aTQgZmw0OwogCXU4ICAgICB0b3M7CiAJX19iZTE2IGRmOwogCXN0cnVjdCBydGFibGUgKnJ0OyAgICAgCQkJLyogUm91dGUgdG8gdGhlIG90aGVyIGhvc3QgKi8KQEAgLTcxNCw3ICs3MTAsNyBAQAogCiAJaWYgKGRldi0+aGVhZGVyX29wcyAmJiBkZXYtPnR5cGUgPT0gQVJQSFJEX0lQR1JFKSB7CiAJCWdyZV9obGVuID0gMDsKLQkJdGlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2ItPmRhdGE7CisJCXRpcGggPSAoY29uc3Qgc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOwogCX0gZWxzZSB7CiAJCWdyZV9obGVuID0gdHVubmVsLT5obGVuOwogCQl0aXBoID0gJnR1bm5lbC0+cGFybXMuaXBoOwpAQCAtNzM1LDE0ICs3MzEsMTQgQEAKIAkJfQogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQogCQllbHNlIGlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7Ci0JCQlzdHJ1Y3QgaW42X2FkZHIgKmFkZHI2OworCQkJY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyNjsKIAkJCWludCBhZGRyX3R5cGU7CiAJCQlzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCA9IHNrYl9kc3Qoc2tiKS0+bmVpZ2hib3VyOwogCiAJCQlpZiAobmVpZ2ggPT0gTlVMTCkKIAkJCQlnb3RvIHR4X2Vycm9yOwogCi0JCQlhZGRyNiA9IChzdHJ1Y3QgaW42X2FkZHIgKikmbmVpZ2gtPnByaW1hcnlfa2V5OworCQkJYWRkcjYgPSAoY29uc3Qgc3RydWN0IGluNl9hZGRyICopJm5laWdoLT5wcmltYXJ5X2tleTsKIAkJCWFkZHJfdHlwZSA9IGlwdjZfYWRkcl90eXBlKGFkZHI2KTsKIAogCQkJaWYgKGFkZHJfdHlwZSA9PSBJUFY2X0FERFJfQU5ZKSB7CkBAIC03NjYsMTAgKzc2MiwxMCBAQAogCQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpCiAJCQl0b3MgPSBvbGRfaXBoLT50b3M7CiAJCWVsc2UgaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpCi0JCQl0b3MgPSBpcHY2X2dldF9kc2ZpZWxkKChzdHJ1Y3QgaXB2NmhkciAqKW9sZF9pcGgpOworCQkJdG9zID0gaXB2Nl9nZXRfZHNmaWVsZCgoY29uc3Qgc3RydWN0IGlwdjZoZHIgKilvbGRfaXBoKTsKIAl9CiAKLQlydCA9IGlwX3JvdXRlX291dHB1dF9ncmUoZGV2X25ldChkZXYpLCBkc3QsIHRpcGgtPnNhZGRyLAorCXJ0ID0gaXBfcm91dGVfb3V0cHV0X2dyZShkZXZfbmV0KGRldiksICZmbDQsIGRzdCwgdGlwaC0+c2FkZHIsCiAJCQkJIHR1bm5lbC0+cGFybXMub19rZXksIFJUX1RPUyh0b3MpLAogCQkJCSB0dW5uZWwtPnBhcm1zLmxpbmspOwogCWlmIChJU19FUlIocnQpKSB7CkBAIC04NzMsMTUgKzg2OSwxNSBAQAogCWlwaC0+ZnJhZ19vZmYJCT0JZGY7CiAJaXBoLT5wcm90b2NvbAkJPQlJUFBST1RPX0dSRTsKIAlpcGgtPnRvcwkJPQlpcGdyZV9lY25fZW5jYXBzdWxhdGUodG9zLCBvbGRfaXBoLCBza2IpOwotCWlwaC0+ZGFkZHIJCT0JcnQtPnJ0X2RzdDsKLQlpcGgtPnNhZGRyCQk9CXJ0LT5ydF9zcmM7CisJaXBoLT5kYWRkcgkJPQlmbDQuZGFkZHI7CisJaXBoLT5zYWRkcgkJPQlmbDQuc2FkZHI7CiAKIAlpZiAoKGlwaC0+dHRsID0gdGlwaC0+dHRsKSA9PSAwKSB7CiAJCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKIAkJCWlwaC0+dHRsID0gb2xkX2lwaC0+dHRsOwogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQogCQllbHNlIGlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKQotCQkJaXBoLT50dGwgPSAoKHN0cnVjdCBpcHY2aGRyICopb2xkX2lwaCktPmhvcF9saW1pdDsKKwkJCWlwaC0+dHRsID0gKChjb25zdCBzdHJ1Y3QgaXB2NmhkciAqKW9sZF9pcGgpLT5ob3BfbGltaXQ7CiAjZW5kaWYKIAkJZWxzZQogCQkJaXBoLT50dGwgPSBpcDRfZHN0X2hvcGxpbWl0KCZydC0+ZHN0KTsKQEAgLTkyNyw3ICs5MjMsNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICp0ZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWw7Ci0Jc3RydWN0IGlwaGRyICppcGg7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGg7CiAJaW50IGhsZW4gPSBMTF9NQVhfSEVBREVSOwogCWludCBtdHUgPSBFVEhfREFUQV9MRU47CiAJaW50IGFkZGVuZCA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpICsgNDsKQEAgLTkzOCwxMiArOTM0LDE0IEBACiAJLyogR3Vlc3Mgb3V0cHV0IGRldmljZSB0byBjaG9vc2UgcmVhc29uYWJsZSBtdHUgYW5kIG5lZWRlZF9oZWFkcm9vbSAqLwogCiAJaWYgKGlwaC0+ZGFkZHIpIHsKLQkJc3RydWN0IHJ0YWJsZSAqcnQgPSBpcF9yb3V0ZV9vdXRwdXRfZ3JlKGRldl9uZXQoZGV2KSwKLQkJCQkJCQlpcGgtPmRhZGRyLCBpcGgtPnNhZGRyLAotCQkJCQkJCXR1bm5lbC0+cGFybXMub19rZXksCi0JCQkJCQkJUlRfVE9TKGlwaC0+dG9zKSwKLQkJCQkJCQl0dW5uZWwtPnBhcm1zLmxpbmspOworCQlzdHJ1Y3QgZmxvd2k0IGZsNDsKKwkJc3RydWN0IHJ0YWJsZSAqcnQ7CiAKKwkJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfZ3JlKGRldl9uZXQoZGV2KSwgJmZsNCwKKwkJCQkJIGlwaC0+ZGFkZHIsIGlwaC0+c2FkZHIsCisJCQkJCSB0dW5uZWwtPnBhcm1zLm9fa2V5LAorCQkJCQkgUlRfVE9TKGlwaC0+dG9zKSwKKwkJCQkJIHR1bm5lbC0+cGFybXMubGluayk7CiAJCWlmICghSVNfRVJSKHJ0KSkgewogCQkJdGRldiA9IHJ0LT5kc3QuZGV2OwogCQkJaXBfcnRfcHV0KHJ0KTsKQEAgLTExODAsNyArMTE3OCw3IEBACiAKIHN0YXRpYyBpbnQgaXBncmVfaGVhZGVyX3BhcnNlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGNoYXIgKmhhZGRyKQogewotCXN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKSBza2JfbWFjX2hlYWRlcihza2IpOworCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoID0gKGNvbnN0IHN0cnVjdCBpcGhkciAqKSBza2JfbWFjX2hlYWRlcihza2IpOwogCW1lbWNweShoYWRkciwgJmlwaC0+c2FkZHIsIDQpOwogCXJldHVybiA0OwogfQpAQCAtMTE5NiwxMyArMTE5NCwxNSBAQAogCXN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJaWYgKGlwdjRfaXNfbXVsdGljYXN0KHQtPnBhcm1zLmlwaC5kYWRkcikpIHsKLQkJc3RydWN0IHJ0YWJsZSAqcnQgPSBpcF9yb3V0ZV9vdXRwdXRfZ3JlKGRldl9uZXQoZGV2KSwKLQkJCQkJCQl0LT5wYXJtcy5pcGguZGFkZHIsCi0JCQkJCQkJdC0+cGFybXMuaXBoLnNhZGRyLAotCQkJCQkJCXQtPnBhcm1zLm9fa2V5LAotCQkJCQkJCVJUX1RPUyh0LT5wYXJtcy5pcGgudG9zKSwKLQkJCQkJCQl0LT5wYXJtcy5saW5rKTsKKwkJc3RydWN0IGZsb3dpNCBmbDQ7CisJCXN0cnVjdCBydGFibGUgKnJ0OwogCisJCXJ0ID0gaXBfcm91dGVfb3V0cHV0X2dyZShkZXZfbmV0KGRldiksICZmbDQsCisJCQkJCSB0LT5wYXJtcy5pcGguZGFkZHIsCisJCQkJCSB0LT5wYXJtcy5pcGguc2FkZHIsCisJCQkJCSB0LT5wYXJtcy5vX2tleSwKKwkJCQkJIFJUX1RPUyh0LT5wYXJtcy5pcGgudG9zKSwKKwkJCQkJIHQtPnBhcm1zLmxpbmspOwogCQlpZiAoSVNfRVJSKHJ0KSkKIAkJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIAkJZGV2ID0gcnQtPmRzdC5kZXY7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9pbnB1dC5jIGIvbmV0L2lwdjQvaXBfaW5wdXQuYwppbmRleCBkN2IyYjA5Li5jOGY0OGVmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9pbnB1dC5jCisrKyBiL25ldC9pcHY0L2lwX2lucHV0LmMKQEAgLTI2OCw3ICsyNjgsNyBAQAogc3RhdGljIGlubGluZSBpbnQgaXBfcmN2X29wdGlvbnMoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0OwotCXN0cnVjdCBpcGhkciAqaXBoOworCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2ItPmRldjsKIAogCS8qIEl0IGxvb2tzIGFzIG92ZXJraWxsLCBiZWNhdXNlIG5vdCBhbGwKQEAgLTM3NCw3ICszNzQsNyBAQAogICovCiBpbnQgaXBfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKIHsKLQlzdHJ1Y3QgaXBoZHIgKmlwaDsKKwljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDsKIAl1MzIgbGVuOwogCiAJLyogV2hlbiB0aGUgaW50ZXJmYWNlIGlzIGluIHByb21pc2MuIG1vZGUsIGRyb3AgYWxsIHRoZSBjcmFwCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vcHRpb25zLmMgYi9uZXQvaXB2NC9pcF9vcHRpb25zLmMKaW5kZXggMjM5MWIyNC4uYzMxMThlMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3B0aW9ucy5jCisrKyBiL25ldC9pcHY0L2lwX29wdGlvbnMuYwpAQCAtMzYsOCArMzYsOCBAQAogICogc2FkZHIgaXMgYWRkcmVzcyBvZiBvdXRnb2luZyBpbnRlcmZhY2UuCiAgKi8KIAotdm9pZCBpcF9vcHRpb25zX2J1aWxkKHN0cnVjdCBza19idWZmICogc2tiLCBzdHJ1Y3QgaXBfb3B0aW9ucyAqIG9wdCwKLQkJCSAgICBfX2JlMzIgZGFkZHIsIHN0cnVjdCBydGFibGUgKnJ0LCBpbnQgaXNfZnJhZykKK3ZvaWQgaXBfb3B0aW9uc19idWlsZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0LAorCQkgICAgICBfX2JlMzIgZGFkZHIsIHN0cnVjdCBydGFibGUgKnJ0LCBpbnQgaXNfZnJhZykKIHsKIAl1bnNpZ25lZCBjaGFyICppcGggPSBza2JfbmV0d29ya19oZWFkZXIoc2tiKTsKIApAQCAtNTAsOSArNTAsOSBAQAogCiAJaWYgKCFpc19mcmFnKSB7CiAJCWlmIChvcHQtPnJyX25lZWRhZGRyKQotCQkJaXBfcnRfZ2V0X3NvdXJjZShpcGgrb3B0LT5ycitpcGhbb3B0LT5ycisyXS01LCBydCk7CisJCQlpcF9ydF9nZXRfc291cmNlKGlwaCtvcHQtPnJyK2lwaFtvcHQtPnJyKzJdLTUsIHNrYiwgcnQpOwogCQlpZiAob3B0LT50c19uZWVkYWRkcikKLQkJCWlwX3J0X2dldF9zb3VyY2UoaXBoK29wdC0+dHMraXBoW29wdC0+dHMrMl0tOSwgcnQpOworCQkJaXBfcnRfZ2V0X3NvdXJjZShpcGgrb3B0LT50cytpcGhbb3B0LT50cysyXS05LCBza2IsIHJ0KTsKIAkJaWYgKG9wdC0+dHNfbmVlZHRpbWUpIHsKIAkJCXN0cnVjdCB0aW1lc3BlYyB0djsKIAkJCV9fYmUzMiBtaWR0aW1lOwpAQCAtODMsOSArODMsOSBAQAogICogTk9URTogZG9wdCBjYW5ub3QgcG9pbnQgdG8gc2tiLgogICovCiAKLWludCBpcF9vcHRpb25zX2VjaG8oc3RydWN0IGlwX29wdGlvbnMgKiBkb3B0LCBzdHJ1Y3Qgc2tfYnVmZiAqIHNrYikKK2ludCBpcF9vcHRpb25zX2VjaG8oc3RydWN0IGlwX29wdGlvbnMgKmRvcHQsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGlwX29wdGlvbnMgKnNvcHQ7CisJY29uc3Qgc3RydWN0IGlwX29wdGlvbnMgKnNvcHQ7CiAJdW5zaWduZWQgY2hhciAqc3B0ciwgKmRwdHI7CiAJaW50IHNvZmZzZXQsIGRvZmZzZXQ7CiAJaW50CW9wdGxlbjsKQEAgLTk1LDEwICs5NSw4IEBACiAKIAlzb3B0ID0gJihJUENCKHNrYiktPm9wdCk7CiAKLQlpZiAoc29wdC0+b3B0bGVuID09IDApIHsKLQkJZG9wdC0+b3B0bGVuID0gMDsKKwlpZiAoc29wdC0+b3B0bGVuID09IDApCiAJCXJldHVybiAwOwotCX0KIAogCXNwdHIgPSBza2JfbmV0d29ya19oZWFkZXIoc2tiKTsKIAlkcHRyID0gZG9wdC0+X19kYXRhOwpAQCAtMTU3LDcgKzE1NSw3IEBACiAJCWRvcHQtPm9wdGxlbiArPSBvcHRsZW47CiAJfQogCWlmIChzb3B0LT5zcnIpIHsKLQkJdW5zaWduZWQgY2hhciAqIHN0YXJ0ID0gc3B0citzb3B0LT5zcnI7CisJCXVuc2lnbmVkIGNoYXIgKnN0YXJ0ID0gc3B0citzb3B0LT5zcnI7CiAJCV9fYmUzMiBmYWRkcjsKIAogCQlvcHRsZW4gID0gc3RhcnRbMV07CkBAIC00OTksMTkgKzQ5NywxOSBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBpcF9vcHRpb25zICppcF9vcHRpb25zX2dldF9hbGxvYyhjb25zdCBpbnQgb3B0bGVuKQorc3RhdGljIHN0cnVjdCBpcF9vcHRpb25zX3JjdSAqaXBfb3B0aW9uc19nZXRfYWxsb2MoY29uc3QgaW50IG9wdGxlbikKIHsKLQlyZXR1cm4ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlwX29wdGlvbnMpICsgKChvcHRsZW4gKyAzKSAmIH4zKSwKKwlyZXR1cm4ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlwX29wdGlvbnNfcmN1KSArICgob3B0bGVuICsgMykgJiB+MyksCiAJCSAgICAgICBHRlBfS0VSTkVMKTsKIH0KIAotc3RhdGljIGludCBpcF9vcHRpb25zX2dldF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfb3B0aW9ucyAqKm9wdHAsCi0JCQkJIHN0cnVjdCBpcF9vcHRpb25zICpvcHQsIGludCBvcHRsZW4pCitzdGF0aWMgaW50IGlwX29wdGlvbnNfZ2V0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9vcHRpb25zX3JjdSAqKm9wdHAsCisJCQkJIHN0cnVjdCBpcF9vcHRpb25zX3JjdSAqb3B0LCBpbnQgb3B0bGVuKQogewogCXdoaWxlIChvcHRsZW4gJiAzKQotCQlvcHQtPl9fZGF0YVtvcHRsZW4rK10gPSBJUE9QVF9FTkQ7Ci0Jb3B0LT5vcHRsZW4gPSBvcHRsZW47Ci0JaWYgKG9wdGxlbiAmJiBpcF9vcHRpb25zX2NvbXBpbGUobmV0LCBvcHQsIE5VTEwpKSB7CisJCW9wdC0+b3B0Ll9fZGF0YVtvcHRsZW4rK10gPSBJUE9QVF9FTkQ7CisJb3B0LT5vcHQub3B0bGVuID0gb3B0bGVuOworCWlmIChvcHRsZW4gJiYgaXBfb3B0aW9uc19jb21waWxlKG5ldCwgJm9wdC0+b3B0LCBOVUxMKSkgewogCQlrZnJlZShvcHQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC01MjAsMjkgKzUxOCwyOSBAQAogCXJldHVybiAwOwogfQogCi1pbnQgaXBfb3B0aW9uc19nZXRfZnJvbV91c2VyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX29wdGlvbnMgKipvcHRwLAoraW50IGlwX29wdGlvbnNfZ2V0X2Zyb21fdXNlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9vcHRpb25zX3JjdSAqKm9wdHAsCiAJCQkgICAgIHVuc2lnbmVkIGNoYXIgX191c2VyICpkYXRhLCBpbnQgb3B0bGVuKQogewotCXN0cnVjdCBpcF9vcHRpb25zICpvcHQgPSBpcF9vcHRpb25zX2dldF9hbGxvYyhvcHRsZW4pOworCXN0cnVjdCBpcF9vcHRpb25zX3JjdSAqb3B0ID0gaXBfb3B0aW9uc19nZXRfYWxsb2Mob3B0bGVuKTsKIAogCWlmICghb3B0KQogCQlyZXR1cm4gLUVOT01FTTsKLQlpZiAob3B0bGVuICYmIGNvcHlfZnJvbV91c2VyKG9wdC0+X19kYXRhLCBkYXRhLCBvcHRsZW4pKSB7CisJaWYgKG9wdGxlbiAmJiBjb3B5X2Zyb21fdXNlcihvcHQtPm9wdC5fX2RhdGEsIGRhdGEsIG9wdGxlbikpIHsKIAkJa2ZyZWUob3B0KTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCXJldHVybiBpcF9vcHRpb25zX2dldF9maW5pc2gobmV0LCBvcHRwLCBvcHQsIG9wdGxlbik7CiB9CiAKLWludCBpcF9vcHRpb25zX2dldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9vcHRpb25zICoqb3B0cCwKK2ludCBpcF9vcHRpb25zX2dldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9vcHRpb25zX3JjdSAqKm9wdHAsCiAJCSAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBvcHRsZW4pCiB7Ci0Jc3RydWN0IGlwX29wdGlvbnMgKm9wdCA9IGlwX29wdGlvbnNfZ2V0X2FsbG9jKG9wdGxlbik7CisJc3RydWN0IGlwX29wdGlvbnNfcmN1ICpvcHQgPSBpcF9vcHRpb25zX2dldF9hbGxvYyhvcHRsZW4pOwogCiAJaWYgKCFvcHQpCiAJCXJldHVybiAtRU5PTUVNOwogCWlmIChvcHRsZW4pCi0JCW1lbWNweShvcHQtPl9fZGF0YSwgZGF0YSwgb3B0bGVuKTsKKwkJbWVtY3B5KG9wdC0+b3B0Ll9fZGF0YSwgZGF0YSwgb3B0bGVuKTsKIAlyZXR1cm4gaXBfb3B0aW9uc19nZXRfZmluaXNoKG5ldCwgb3B0cCwgb3B0LCBvcHRsZW4pOwogfQogCkBAIC01NTUsNyArNTUzLDcgQEAKIAogCWlmIChvcHQtPnJyX25lZWRhZGRyKSB7CiAJCW9wdHB0ciA9ICh1bnNpZ25lZCBjaGFyICopcmF3ICsgb3B0LT5ycjsKLQkJaXBfcnRfZ2V0X3NvdXJjZSgmb3B0cHRyW29wdHB0clsyXS01XSwgcnQpOworCQlpcF9ydF9nZXRfc291cmNlKCZvcHRwdHJbb3B0cHRyWzJdLTVdLCBza2IsIHJ0KTsKIAkJb3B0LT5pc19jaGFuZ2VkID0gMTsKIAl9CiAJaWYgKG9wdC0+c3JyX2lzX2hpdCkgewpAQCAtNTY5LDE5ICs1NjcsMTggQEAKIAkJICAgICApIHsKIAkJCWlmIChzcnJwdHIgKyAzID4gc3Jyc3BhY2UpCiAJCQkJYnJlYWs7Ci0JCQlpZiAobWVtY21wKCZydC0+cnRfZHN0LCAmb3B0cHRyW3NycnB0ci0xXSwgNCkgPT0gMCkKKwkJCWlmIChtZW1jbXAoJmlwX2hkcihza2IpLT5kYWRkciwgJm9wdHB0cltzcnJwdHItMV0sIDQpID09IDApCiAJCQkJYnJlYWs7CiAJCX0KIAkJaWYgKHNycnB0ciArIDMgPD0gc3Jyc3BhY2UpIHsKIAkJCW9wdC0+aXNfY2hhbmdlZCA9IDE7Ci0JCQlpcF9ydF9nZXRfc291cmNlKCZvcHRwdHJbc3JycHRyLTFdLCBydCk7Ci0JCQlpcF9oZHIoc2tiKS0+ZGFkZHIgPSBydC0+cnRfZHN0OworCQkJaXBfcnRfZ2V0X3NvdXJjZSgmb3B0cHRyW3NycnB0ci0xXSwgc2tiLCBydCk7CiAJCQlvcHRwdHJbMl0gPSBzcnJwdHIrNDsKIAkJfSBlbHNlIGlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQlwcmludGsoS0VSTl9DUklUICJpcF9mb3J3YXJkKCk6IEFyZ2ghIERlc3RpbmF0aW9uIGxvc3QhXG4iKTsKIAkJaWYgKG9wdC0+dHNfbmVlZGFkZHIpIHsKIAkJCW9wdHB0ciA9IHJhdyArIG9wdC0+dHM7Ci0JCQlpcF9ydF9nZXRfc291cmNlKCZvcHRwdHJbb3B0cHRyWzJdLTldLCBydCk7CisJCQlpcF9ydF9nZXRfc291cmNlKCZvcHRwdHJbb3B0cHRyWzJdLTldLCBza2IsIHJ0KTsKIAkJCW9wdC0+aXNfY2hhbmdlZCA9IDE7CiAJCX0KIAl9CkBAIC02MDMsNyArNjAwLDcgQEAKIAl1bnNpZ25lZCBsb25nIG9yZWZkc3Q7CiAJaW50IGVycjsKIAotCWlmICghb3B0LT5zcnIgfHwgIXJ0KQorCWlmICghcnQpCiAJCXJldHVybiAwOwogCiAJaWYgKHNrYi0+cGt0X3R5cGUgIT0gUEFDS0VUX0hPU1QpCkBAIC02MzcsNyArNjM0LDcgQEAKIAkJaWYgKHJ0Mi0+cnRfdHlwZSAhPSBSVE5fTE9DQUwpCiAJCQlicmVhazsKIAkJLyogU3VwZXJmYXN0IDgpIGxvb3BiYWNrIGZvcndhcmQgKi8KLQkJbWVtY3B5KCZpcGgtPmRhZGRyLCAmb3B0cHRyW3NycnB0ci0xXSwgNCk7CisJCWlwaC0+ZGFkZHIgPSBuZXh0aG9wOwogCQlvcHQtPmlzX2NoYW5nZWQgPSAxOwogCX0KIAlpZiAoc3JycHRyIDw9IHNycnNwYWNlKSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vdXRwdXQuYyBiL25ldC9pcHY0L2lwX291dHB1dC5jCmluZGV4IDQ1OWMwMTEuLjk4YWYzNjkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L2lwX291dHB1dC5jCkBAIC0xNDAsMTQgKzE0MCwxNCBAQAogICoKICAqLwogaW50IGlwX2J1aWxkX2FuZF9zZW5kX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2ssCi0JCQkgIF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLCBzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0KQorCQkJICBfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwgc3RydWN0IGlwX29wdGlvbnNfcmN1ICpvcHQpCiB7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCXN0cnVjdCBydGFibGUgKnJ0ID0gc2tiX3J0YWJsZShza2IpOwogCXN0cnVjdCBpcGhkciAqaXBoOwogCiAJLyogQnVpbGQgdGhlIElQIGhlYWRlci4gKi8KLQlza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgaXBoZHIpICsgKG9wdCA/IG9wdC0+b3B0bGVuIDogMCkpOworCXNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcGhkcikgKyAob3B0ID8gb3B0LT5vcHQub3B0bGVuIDogMCkpOwogCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwogCWlwaCA9IGlwX2hkcihza2IpOwogCWlwaC0+dmVyc2lvbiAgPSA0OwpAQCAtMTU4LDE0ICsxNTgsMTQgQEAKIAllbHNlCiAJCWlwaC0+ZnJhZ19vZmYgPSAwOwogCWlwaC0+dHRsICAgICAgPSBpcF9zZWxlY3RfdHRsKGluZXQsICZydC0+ZHN0KTsKLQlpcGgtPmRhZGRyICAgID0gcnQtPnJ0X2RzdDsKLQlpcGgtPnNhZGRyICAgID0gcnQtPnJ0X3NyYzsKKwlpcGgtPmRhZGRyICAgID0gKG9wdCAmJiBvcHQtPm9wdC5zcnIgPyBvcHQtPm9wdC5mYWRkciA6IGRhZGRyKTsKKwlpcGgtPnNhZGRyICAgID0gc2FkZHI7CiAJaXBoLT5wcm90b2NvbCA9IHNrLT5za19wcm90b2NvbDsKIAlpcF9zZWxlY3RfaWRlbnQoaXBoLCAmcnQtPmRzdCwgc2spOwogCi0JaWYgKG9wdCAmJiBvcHQtPm9wdGxlbikgewotCQlpcGgtPmlobCArPSBvcHQtPm9wdGxlbj4+MjsKLQkJaXBfb3B0aW9uc19idWlsZChza2IsIG9wdCwgZGFkZHIsIHJ0LCAwKTsKKwlpZiAob3B0ICYmIG9wdC0+b3B0Lm9wdGxlbikgeworCQlpcGgtPmlobCArPSBvcHQtPm9wdC5vcHRsZW4+PjI7CisJCWlwX29wdGlvbnNfYnVpbGQoc2tiLCAmb3B0LT5vcHQsIGRhZGRyLCBydCwgMCk7CiAJfQogCiAJc2tiLT5wcmlvcml0eSA9IHNrLT5za19wcmlvcml0eTsKQEAgLTMxMiwxMSArMzEyLDEyIEBACiAJCQkgICAgIShJUENCKHNrYiktPmZsYWdzICYgSVBTS0JfUkVST1VURUQpKTsKIH0KIAotaW50IGlwX3F1ZXVlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKK2ludCBpcF9xdWV1ZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmbG93aSAqZmwpCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc2tiLT5zazsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7Ci0Jc3RydWN0IGlwX29wdGlvbnMgKm9wdCA9IGluZXQtPm9wdDsKKwlzdHJ1Y3QgaXBfb3B0aW9uc19yY3UgKmluZXRfb3B0OworCXN0cnVjdCBmbG93aTQgKmZsNDsKIAlzdHJ1Y3QgcnRhYmxlICpydDsKIAlzdHJ1Y3QgaXBoZHIgKmlwaDsKIAlpbnQgcmVzOwpAQCAtMzI1LDYgKzMyNiw4IEBACiAJICogZi5lLiBieSBzb21ldGhpbmcgbGlrZSBTQ1RQLgogCSAqLwogCXJjdV9yZWFkX2xvY2soKTsKKwlpbmV0X29wdCA9IHJjdV9kZXJlZmVyZW5jZShpbmV0LT5pbmV0X29wdCk7CisJZmw0ID0gJmZsLT51LmlwNDsKIAlydCA9IHNrYl9ydGFibGUoc2tiKTsKIAlpZiAocnQgIT0gTlVMTCkKIAkJZ290byBwYWNrZXRfcm91dGVkOwpAQCAtMzM2LDE0ICszMzksMTQgQEAKIAogCQkvKiBVc2UgY29ycmVjdCBkZXN0aW5hdGlvbiBhZGRyZXNzIGlmIHdlIGhhdmUgb3B0aW9ucy4gKi8KIAkJZGFkZHIgPSBpbmV0LT5pbmV0X2RhZGRyOwotCQlpZihvcHQgJiYgb3B0LT5zcnIpCi0JCQlkYWRkciA9IG9wdC0+ZmFkZHI7CisJCWlmIChpbmV0X29wdCAmJiBpbmV0X29wdC0+b3B0LnNycikKKwkJCWRhZGRyID0gaW5ldF9vcHQtPm9wdC5mYWRkcjsKIAogCQkvKiBJZiB0aGlzIGZhaWxzLCByZXRyYW5zbWl0IG1lY2hhbmlzbSBvZiB0cmFuc3BvcnQgbGF5ZXIgd2lsbAogCQkgKiBrZWVwIHRyeWluZyB1bnRpbCByb3V0ZSBhcHBlYXJzIG9yIHRoZSBjb25uZWN0aW9uIHRpbWVzCiAJCSAqIGl0c2VsZiBvdXQuCiAJCSAqLwotCQlydCA9IGlwX3JvdXRlX291dHB1dF9wb3J0cyhzb2NrX25ldChzayksIHNrLAorCQlydCA9IGlwX3JvdXRlX291dHB1dF9wb3J0cyhzb2NrX25ldChzayksIGZsNCwgc2ssCiAJCQkJCSAgIGRhZGRyLCBpbmV0LT5pbmV0X3NhZGRyLAogCQkJCQkgICBpbmV0LT5pbmV0X2Rwb3J0LAogCQkJCQkgICBpbmV0LT5pbmV0X3Nwb3J0LApAQCAtMzU3LDExICszNjAsMTEgQEAKIAlza2JfZHN0X3NldF9ub3JlZihza2IsICZydC0+ZHN0KTsKIAogcGFja2V0X3JvdXRlZDoKLQlpZiAob3B0ICYmIG9wdC0+aXNfc3RyaWN0cm91dGUgJiYgcnQtPnJ0X2RzdCAhPSBydC0+cnRfZ2F0ZXdheSkKKwlpZiAoaW5ldF9vcHQgJiYgaW5ldF9vcHQtPm9wdC5pc19zdHJpY3Ryb3V0ZSAmJiBmbDQtPmRhZGRyICE9IHJ0LT5ydF9nYXRld2F5KQogCQlnb3RvIG5vX3JvdXRlOwogCiAJLyogT0ssIHdlIGtub3cgd2hlcmUgdG8gc2VuZCBpdCwgYWxsb2NhdGUgYW5kIGJ1aWxkIElQIGhlYWRlci4gKi8KLQlza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgaXBoZHIpICsgKG9wdCA/IG9wdC0+b3B0bGVuIDogMCkpOworCXNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcGhkcikgKyAoaW5ldF9vcHQgPyBpbmV0X29wdC0+b3B0Lm9wdGxlbiA6IDApKTsKIAlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKIAlpcGggPSBpcF9oZHIoc2tiKTsKIAkqKChfX2JlMTYgKilpcGgpID0gaHRvbnMoKDQgPDwgMTIpIHwgKDUgPDwgOCkgfCAoaW5ldC0+dG9zICYgMHhmZikpOwpAQCAtMzcxLDEzICszNzQsMTMgQEAKIAkJaXBoLT5mcmFnX29mZiA9IDA7CiAJaXBoLT50dGwgICAgICA9IGlwX3NlbGVjdF90dGwoaW5ldCwgJnJ0LT5kc3QpOwogCWlwaC0+cHJvdG9jb2wgPSBzay0+c2tfcHJvdG9jb2w7Ci0JaXBoLT5zYWRkciAgICA9IHJ0LT5ydF9zcmM7Ci0JaXBoLT5kYWRkciAgICA9IHJ0LT5ydF9kc3Q7CisJaXBoLT5zYWRkciAgICA9IGZsNC0+c2FkZHI7CisJaXBoLT5kYWRkciAgICA9IGZsNC0+ZGFkZHI7CiAJLyogVHJhbnNwb3J0IGxheWVyIHNldCBza2ItPmguZm9vIGl0c2VsZi4gKi8KIAotCWlmIChvcHQgJiYgb3B0LT5vcHRsZW4pIHsKLQkJaXBoLT5paGwgKz0gb3B0LT5vcHRsZW4gPj4gMjsKLQkJaXBfb3B0aW9uc19idWlsZChza2IsIG9wdCwgaW5ldC0+aW5ldF9kYWRkciwgcnQsIDApOworCWlmIChpbmV0X29wdCAmJiBpbmV0X29wdC0+b3B0Lm9wdGxlbikgeworCQlpcGgtPmlobCArPSBpbmV0X29wdC0+b3B0Lm9wdGxlbiA+PiAyOworCQlpcF9vcHRpb25zX2J1aWxkKHNrYiwgJmluZXRfb3B0LT5vcHQsIGluZXQtPmluZXRfZGFkZHIsIHJ0LCAwKTsKIAl9CiAKIAlpcF9zZWxlY3RfaWRlbnRfbW9yZShpcGgsICZydC0+ZHN0LCBzaywKQEAgLTc3Myw3ICs3NzYsOSBAQAogCQkJCSAgICAgICAobGVuZ3RoIC0gdHJhbnNoZHJsZW4pKTsKIH0KIAotc3RhdGljIGludCBfX2lwX2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUsCitzdGF0aWMgaW50IF9faXBfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLAorCQkJICAgIHN0cnVjdCBmbG93aTQgKmZsNCwKKwkJCSAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZSwKIAkJCSAgICBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLAogCQkJICAgIGludCBnZXRmcmFnKHZvaWQgKmZyb20sIGNoYXIgKnRvLCBpbnQgb2Zmc2V0LAogCQkJCQlpbnQgbGVuLCBpbnQgb2RkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSwKQEAgLTgwNSw3ICs4MTAsNyBAQAogCW1heGZyYWdsZW4gPSAoKG10dSAtIGZyYWdoZWFkZXJsZW4pICYgfjcpICsgZnJhZ2hlYWRlcmxlbjsKIAogCWlmIChjb3JrLT5sZW5ndGggKyBsZW5ndGggPiAweEZGRkYgLSBmcmFnaGVhZGVybGVuKSB7Ci0JCWlwX2xvY2FsX2Vycm9yKHNrLCBFTVNHU0laRSwgcnQtPnJ0X2RzdCwgaW5ldC0+aW5ldF9kcG9ydCwKKwkJaXBfbG9jYWxfZXJyb3Ioc2ssIEVNU0dTSVpFLCBmbDQtPmRhZGRyLCBpbmV0LT5pbmV0X2Rwb3J0LAogCQkJICAgICAgIG10dS1leHRoZHJsZW4pOwogCQlyZXR1cm4gLUVNU0dTSVpFOwogCX0KQEAgLTEwMzMsNyArMTAzOCw3IEBACiAJCQkgc3RydWN0IGlwY21fY29va2llICppcGMsIHN0cnVjdCBydGFibGUgKipydHApCiB7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwotCXN0cnVjdCBpcF9vcHRpb25zICpvcHQ7CisJc3RydWN0IGlwX29wdGlvbnNfcmN1ICpvcHQ7CiAJc3RydWN0IHJ0YWJsZSAqcnQ7CiAKIAkvKgpAQCAtMTA0Nyw3ICsxMDUyLDcgQEAKIAkJCWlmICh1bmxpa2VseShjb3JrLT5vcHQgPT0gTlVMTCkpCiAJCQkJcmV0dXJuIC1FTk9CVUZTOwogCQl9Ci0JCW1lbWNweShjb3JrLT5vcHQsIG9wdCwgc2l6ZW9mKHN0cnVjdCBpcF9vcHRpb25zKSArIG9wdC0+b3B0bGVuKTsKKwkJbWVtY3B5KGNvcmstPm9wdCwgJm9wdC0+b3B0LCBzaXplb2Yoc3RydWN0IGlwX29wdGlvbnMpICsgb3B0LT5vcHQub3B0bGVuKTsKIAkJY29yay0+ZmxhZ3MgfD0gSVBDT1JLX09QVDsKIAkJY29yay0+YWRkciA9IGlwYy0+YWRkcjsKIAl9CkBAIC0xMDgwLDcgKzEwODUsNyBAQAogICoKICAqCUxBVEVSOiBsZW5ndGggbXVzdCBiZSBhZGp1c3RlZCBieSBwYWQgYXQgdGFpbCwgd2hlbiBpdCBpcyByZXF1aXJlZC4KICAqLwotaW50IGlwX2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzaywKK2ludCBpcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aTQgKmZsNCwKIAkJICAgaW50IGdldGZyYWcodm9pZCAqZnJvbSwgY2hhciAqdG8sIGludCBvZmZzZXQsIGludCBsZW4sCiAJCQkgICAgICAgaW50IG9kZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiksCiAJCSAgIHZvaWQgKmZyb20sIGludCBsZW5ndGgsIGludCB0cmFuc2hkcmxlbiwKQEAgLTEwOTQsMjQgKzEwOTksMjUgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZzay0+c2tfd3JpdGVfcXVldWUpKSB7Ci0JCWVyciA9IGlwX3NldHVwX2Nvcmsoc2ssICZpbmV0LT5jb3JrLCBpcGMsIHJ0cCk7CisJCWVyciA9IGlwX3NldHVwX2Nvcmsoc2ssICZpbmV0LT5jb3JrLmJhc2UsIGlwYywgcnRwKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfSBlbHNlIHsKIAkJdHJhbnNoZHJsZW4gPSAwOwogCX0KIAotCXJldHVybiBfX2lwX2FwcGVuZF9kYXRhKHNrLCAmc2stPnNrX3dyaXRlX3F1ZXVlLCAmaW5ldC0+Y29yaywgZ2V0ZnJhZywKKwlyZXR1cm4gX19pcF9hcHBlbmRfZGF0YShzaywgZmw0LCAmc2stPnNrX3dyaXRlX3F1ZXVlLCAmaW5ldC0+Y29yay5iYXNlLCBnZXRmcmFnLAogCQkJCWZyb20sIGxlbmd0aCwgdHJhbnNoZHJsZW4sIGZsYWdzKTsKIH0KIAotc3NpemVfdAlpcF9hcHBlbmRfcGFnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwYWdlICpwYWdlLAorc3NpemVfdAlpcF9hcHBlbmRfcGFnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aTQgKmZsNCwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCSAgICAgICBpbnQgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogewogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBydGFibGUgKnJ0OwogCXN0cnVjdCBpcF9vcHRpb25zICpvcHQgPSBOVUxMOworCXN0cnVjdCBpbmV0X2NvcmsgKmNvcms7CiAJaW50IGhoX2xlbjsKIAlpbnQgbXR1OwogCWludCBsZW47CkBAIC0xMTI3LDI4ICsxMTMzLDI5IEBACiAJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmc2stPnNrX3dyaXRlX3F1ZXVlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlydCA9IChzdHJ1Y3QgcnRhYmxlICopaW5ldC0+Y29yay5kc3Q7Ci0JaWYgKGluZXQtPmNvcmsuZmxhZ3MgJiBJUENPUktfT1BUKQotCQlvcHQgPSBpbmV0LT5jb3JrLm9wdDsKKwljb3JrID0gJmluZXQtPmNvcmsuYmFzZTsKKwlydCA9IChzdHJ1Y3QgcnRhYmxlICopY29yay0+ZHN0OworCWlmIChjb3JrLT5mbGFncyAmIElQQ09SS19PUFQpCisJCW9wdCA9IGNvcmstPm9wdDsKIAogCWlmICghKHJ0LT5kc3QuZGV2LT5mZWF0dXJlcyZORVRJRl9GX1NHKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaGhfbGVuID0gTExfUkVTRVJWRURfU1BBQ0UocnQtPmRzdC5kZXYpOwotCW10dSA9IGluZXQtPmNvcmsuZnJhZ3NpemU7CisJbXR1ID0gY29yay0+ZnJhZ3NpemU7CiAKIAlmcmFnaGVhZGVybGVuID0gc2l6ZW9mKHN0cnVjdCBpcGhkcikgKyAob3B0ID8gb3B0LT5vcHRsZW4gOiAwKTsKIAltYXhmcmFnbGVuID0gKChtdHUgLSBmcmFnaGVhZGVybGVuKSAmIH43KSArIGZyYWdoZWFkZXJsZW47CiAKLQlpZiAoaW5ldC0+Y29yay5sZW5ndGggKyBzaXplID4gMHhGRkZGIC0gZnJhZ2hlYWRlcmxlbikgewotCQlpcF9sb2NhbF9lcnJvcihzaywgRU1TR1NJWkUsIHJ0LT5ydF9kc3QsIGluZXQtPmluZXRfZHBvcnQsIG10dSk7CisJaWYgKGNvcmstPmxlbmd0aCArIHNpemUgPiAweEZGRkYgLSBmcmFnaGVhZGVybGVuKSB7CisJCWlwX2xvY2FsX2Vycm9yKHNrLCBFTVNHU0laRSwgZmw0LT5kYWRkciwgaW5ldC0+aW5ldF9kcG9ydCwgbXR1KTsKIAkJcmV0dXJuIC1FTVNHU0laRTsKIAl9CiAKIAlpZiAoKHNrYiA9IHNrYl9wZWVrX3RhaWwoJnNrLT5za193cml0ZV9xdWV1ZSkpID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaW5ldC0+Y29yay5sZW5ndGggKz0gc2l6ZTsKKwljb3JrLT5sZW5ndGggKz0gc2l6ZTsKIAlpZiAoKHNpemUgKyBza2ItPmxlbiA+IG10dSkgJiYKIAkgICAgKHNrLT5za19wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkgJiYKIAkgICAgKHJ0LT5kc3QuZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfVUZPKSkgewpAQCAtMTI0Myw3ICsxMjUwLDcgQEAKIAlyZXR1cm4gMDsKIAogZXJyb3I6Ci0JaW5ldC0+Y29yay5sZW5ndGggLT0gc2l6ZTsKKwljb3JrLT5sZW5ndGggLT0gc2l6ZTsKIAlJUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBJUFNUQVRTX01JQl9PVVRESVNDQVJEUyk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTEyNjIsNiArMTI2OSw3IEBACiAgKglhbmQgcHVzaCB0aGVtIG91dC4KICAqLwogc3RydWN0IHNrX2J1ZmYgKl9faXBfbWFrZV9za2Ioc3RydWN0IHNvY2sgKnNrLAorCQkJICAgICAgc3RydWN0IGZsb3dpNCAqZmw0LAogCQkJICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUsCiAJCQkgICAgICBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrKQogewpAQCAtMTMxOSwxNyArMTMyNywxOCBAQAogCWlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2ItPmRhdGE7CiAJaXBoLT52ZXJzaW9uID0gNDsKIAlpcGgtPmlobCA9IDU7Ci0JaWYgKG9wdCkgewotCQlpcGgtPmlobCArPSBvcHQtPm9wdGxlbj4+MjsKLQkJaXBfb3B0aW9uc19idWlsZChza2IsIG9wdCwgY29yay0+YWRkciwgcnQsIDApOwotCX0KIAlpcGgtPnRvcyA9IGluZXQtPnRvczsKIAlpcGgtPmZyYWdfb2ZmID0gZGY7CiAJaXBfc2VsZWN0X2lkZW50KGlwaCwgJnJ0LT5kc3QsIHNrKTsKIAlpcGgtPnR0bCA9IHR0bDsKIAlpcGgtPnByb3RvY29sID0gc2stPnNrX3Byb3RvY29sOwotCWlwaC0+c2FkZHIgPSBydC0+cnRfc3JjOwotCWlwaC0+ZGFkZHIgPSBydC0+cnRfZHN0OworCWlwaC0+c2FkZHIgPSBmbDQtPnNhZGRyOworCWlwaC0+ZGFkZHIgPSBmbDQtPmRhZGRyOworCisJaWYgKG9wdCkgeworCQlpcGgtPmlobCArPSBvcHQtPm9wdGxlbj4+MjsKKwkJaXBfb3B0aW9uc19idWlsZChza2IsIG9wdCwgY29yay0+YWRkciwgcnQsIDApOworCX0KIAogCXNrYi0+cHJpb3JpdHkgPSBzay0+c2tfcHJpb3JpdHk7CiAJc2tiLT5tYXJrID0gc2stPnNrX21hcms7CkBAIC0xMzY1LDExICsxMzc0LDExIEBACiAJcmV0dXJuIGVycjsKIH0KIAotaW50IGlwX3B1c2hfcGVuZGluZ19mcmFtZXMoc3RydWN0IHNvY2sgKnNrKQoraW50IGlwX3B1c2hfcGVuZGluZ19mcmFtZXMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2k0ICpmbDQpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCXNrYiA9IGlwX2ZpbmlzaF9za2Ioc2spOworCXNrYiA9IGlwX2ZpbmlzaF9za2Ioc2ssIGZsNCk7CiAJaWYgKCFza2IpCiAJCXJldHVybiAwOwogCkBAIC0xMzk0LDE3ICsxNDAzLDE4IEBACiAKIHZvaWQgaXBfZmx1c2hfcGVuZGluZ19mcmFtZXMoc3RydWN0IHNvY2sgKnNrKQogewotCV9faXBfZmx1c2hfcGVuZGluZ19mcmFtZXMoc2ssICZzay0+c2tfd3JpdGVfcXVldWUsICZpbmV0X3NrKHNrKS0+Y29yayk7CisJX19pcF9mbHVzaF9wZW5kaW5nX2ZyYW1lcyhzaywgJnNrLT5za193cml0ZV9xdWV1ZSwgJmluZXRfc2soc2spLT5jb3JrLmJhc2UpOwogfQogCiBzdHJ1Y3Qgc2tfYnVmZiAqaXBfbWFrZV9za2Ioc3RydWN0IHNvY2sgKnNrLAorCQkJICAgIHN0cnVjdCBmbG93aTQgKmZsNCwKIAkJCSAgICBpbnQgZ2V0ZnJhZyh2b2lkICpmcm9tLCBjaGFyICp0bywgaW50IG9mZnNldCwKIAkJCQkJaW50IGxlbiwgaW50IG9kZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiksCiAJCQkgICAgdm9pZCAqZnJvbSwgaW50IGxlbmd0aCwgaW50IHRyYW5zaGRybGVuLAogCQkJICAgIHN0cnVjdCBpcGNtX2Nvb2tpZSAqaXBjLCBzdHJ1Y3QgcnRhYmxlICoqcnRwLAogCQkJICAgIHVuc2lnbmVkIGludCBmbGFncykKIHsKLQlzdHJ1Y3QgaW5ldF9jb3JrIGNvcmsgPSB7fTsKKwlzdHJ1Y3QgaW5ldF9jb3JrIGNvcms7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZCBxdWV1ZTsKIAlpbnQgZXJyOwogCkBAIC0xNDEzLDE4ICsxNDIzLDIxIEBACiAKIAlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJnF1ZXVlKTsKIAorCWNvcmsuZmxhZ3MgPSAwOworCWNvcmsuYWRkciA9IDA7CisJY29yay5vcHQgPSBOVUxMOwogCWVyciA9IGlwX3NldHVwX2Nvcmsoc2ssICZjb3JrLCBpcGMsIHJ0cCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIAotCWVyciA9IF9faXBfYXBwZW5kX2RhdGEoc2ssICZxdWV1ZSwgJmNvcmssIGdldGZyYWcsCisJZXJyID0gX19pcF9hcHBlbmRfZGF0YShzaywgZmw0LCAmcXVldWUsICZjb3JrLCBnZXRmcmFnLAogCQkJICAgICAgIGZyb20sIGxlbmd0aCwgdHJhbnNoZHJsZW4sIGZsYWdzKTsKIAlpZiAoZXJyKSB7CiAJCV9faXBfZmx1c2hfcGVuZGluZ19mcmFtZXMoc2ssICZxdWV1ZSwgJmNvcmspOwogCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCX0KIAotCXJldHVybiBfX2lwX21ha2Vfc2tiKHNrLCAmcXVldWUsICZjb3JrKTsKKwlyZXR1cm4gX19pcF9tYWtlX3NrYihzaywgZmw0LCAmcXVldWUsICZjb3JrKTsKIH0KIAogLyoKQEAgLTE0NDcsNDggKzE0NjAsMzkgQEAKICAqCVNob3VsZCBydW4gc2luZ2xlIHRocmVhZGVkIHBlciBzb2NrZXQgYmVjYXVzZSBpdCB1c2VzIHRoZSBzb2NrCiAgKiAgICAgCXN0cnVjdHVyZSB0byBwYXNzIGFyZ3VtZW50cy4KICAqLwotdm9pZCBpcF9zZW5kX3JlcGx5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3JlcGx5X2FyZyAqYXJnLAotCQkgICB1bnNpZ25lZCBpbnQgbGVuKQordm9pZCBpcF9zZW5kX3JlcGx5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIGRhZGRyLAorCQkgICBzdHJ1Y3QgaXBfcmVwbHlfYXJnICphcmcsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwotCXN0cnVjdCB7Ci0JCXN0cnVjdCBpcF9vcHRpb25zCW9wdDsKLQkJY2hhcgkJCWRhdGFbNDBdOwotCX0gcmVwbHlvcHRzOworCXN0cnVjdCBpcF9vcHRpb25zX2RhdGEgcmVwbHlvcHRzOwogCXN0cnVjdCBpcGNtX2Nvb2tpZSBpcGM7Ci0JX19iZTMyIGRhZGRyOworCXN0cnVjdCBmbG93aTQgZmw0OwogCXN0cnVjdCBydGFibGUgKnJ0ID0gc2tiX3J0YWJsZShza2IpOwogCi0JaWYgKGlwX29wdGlvbnNfZWNobygmcmVwbHlvcHRzLm9wdCwgc2tiKSkKKwlpZiAoaXBfb3B0aW9uc19lY2hvKCZyZXBseW9wdHMub3B0Lm9wdCwgc2tiKSkKIAkJcmV0dXJuOwogCi0JZGFkZHIgPSBpcGMuYWRkciA9IHJ0LT5ydF9zcmM7CisJaXBjLmFkZHIgPSBkYWRkcjsKIAlpcGMub3B0ID0gTlVMTDsKIAlpcGMudHhfZmxhZ3MgPSAwOwogCi0JaWYgKHJlcGx5b3B0cy5vcHQub3B0bGVuKSB7CisJaWYgKHJlcGx5b3B0cy5vcHQub3B0Lm9wdGxlbikgewogCQlpcGMub3B0ID0gJnJlcGx5b3B0cy5vcHQ7CiAKLQkJaWYgKGlwYy5vcHQtPnNycikKLQkJCWRhZGRyID0gcmVwbHlvcHRzLm9wdC5mYWRkcjsKKwkJaWYgKHJlcGx5b3B0cy5vcHQub3B0LnNycikKKwkJCWRhZGRyID0gcmVwbHlvcHRzLm9wdC5vcHQuZmFkZHI7CiAJfQogCi0JewotCQlzdHJ1Y3QgZmxvd2k0IGZsNCA9IHsKLQkJCS5mbG93aTRfb2lmID0gYXJnLT5ib3VuZF9kZXZfaWYsCi0JCQkuZGFkZHIgPSBkYWRkciwKLQkJCS5zYWRkciA9IHJ0LT5ydF9zcGVjX2RzdCwKLQkJCS5mbG93aTRfdG9zID0gUlRfVE9TKGlwX2hkcihza2IpLT50b3MpLAotCQkJLmZsNF9zcG9ydCA9IHRjcF9oZHIoc2tiKS0+ZGVzdCwKLQkJCS5mbDRfZHBvcnQgPSB0Y3BfaGRyKHNrYiktPnNvdXJjZSwKLQkJCS5mbG93aTRfcHJvdG8gPSBzay0+c2tfcHJvdG9jb2wsCi0JCQkuZmxvd2k0X2ZsYWdzID0gaXBfcmVwbHlfYXJnX2Zsb3dpX2ZsYWdzKGFyZyksCi0JCX07Ci0JCXNlY3VyaXR5X3NrYl9jbGFzc2lmeV9mbG93KHNrYiwgZmxvd2k0X3RvX2Zsb3dpKCZmbDQpKTsKLQkJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KHNvY2tfbmV0KHNrKSwgJmZsNCk7Ci0JCWlmIChJU19FUlIocnQpKQotCQkJcmV0dXJuOwotCX0KKwlmbG93aTRfaW5pdF9vdXRwdXQoJmZsNCwgYXJnLT5ib3VuZF9kZXZfaWYsIDAsCisJCQkgICBSVF9UT1MoaXBfaGRyKHNrYiktPnRvcyksCisJCQkgICBSVF9TQ09QRV9VTklWRVJTRSwgc2stPnNrX3Byb3RvY29sLAorCQkJICAgaXBfcmVwbHlfYXJnX2Zsb3dpX2ZsYWdzKGFyZyksCisJCQkgICBkYWRkciwgcnQtPnJ0X3NwZWNfZHN0LAorCQkJICAgdGNwX2hkcihza2IpLT5zb3VyY2UsIHRjcF9oZHIoc2tiKS0+ZGVzdCk7CisJc2VjdXJpdHlfc2tiX2NsYXNzaWZ5X2Zsb3coc2tiLCBmbG93aTRfdG9fZmxvd2koJmZsNCkpOworCXJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleShzb2NrX25ldChzayksICZmbDQpOworCWlmIChJU19FUlIocnQpKQorCQlyZXR1cm47CiAKIAkvKiBBbmQgbGV0IElQIGRvIGFsbCB0aGUgaGFyZCB3b3JrLgogCkBAIC0xNTAxLDcgKzE1MDUsNyBAQAogCXNrLT5za19wcmlvcml0eSA9IHNrYi0+cHJpb3JpdHk7CiAJc2stPnNrX3Byb3RvY29sID0gaXBfaGRyKHNrYiktPnByb3RvY29sOwogCXNrLT5za19ib3VuZF9kZXZfaWYgPSBhcmctPmJvdW5kX2Rldl9pZjsKLQlpcF9hcHBlbmRfZGF0YShzaywgaXBfcmVwbHlfZ2x1ZV9iaXRzLCBhcmctPmlvdi0+aW92X2Jhc2UsIGxlbiwgMCwKKwlpcF9hcHBlbmRfZGF0YShzaywgJmZsNCwgaXBfcmVwbHlfZ2x1ZV9iaXRzLCBhcmctPmlvdi0+aW92X2Jhc2UsIGxlbiwgMCwKIAkJICAgICAgICZpcGMsICZydCwgTVNHX0RPTlRXQUlUKTsKIAlpZiAoKHNrYiA9IHNrYl9wZWVrKCZzay0+c2tfd3JpdGVfcXVldWUpKSAhPSBOVUxMKSB7CiAJCWlmIChhcmctPmNzdW1vZmZzZXQgPj0gMCkKQEAgLTE1MDksNyArMTUxMyw3IEBACiAJCQkgIGFyZy0+Y3N1bW9mZnNldCkgPSBjc3VtX2ZvbGQoY3N1bV9hZGQoc2tiLT5jc3VtLAogCQkJCQkJCQlhcmctPmNzdW0pKTsKIAkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwotCQlpcF9wdXNoX3BlbmRpbmdfZnJhbWVzKHNrKTsKKwkJaXBfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzaywgJmZsNCk7CiAJfQogCiAJYmhfdW5sb2NrX3NvY2soc2spOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuYyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKaW5kZXggMzk0OGM4Ni4uYWIwYzllZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuYworKysgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCkBAIC0xMzEsNyArMTMxLDcgQEAKIHN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl9kc3RhZGRyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOwotCXN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTsKIAlfX2JlMTYgKnBvcnRzID0gKF9fYmUxNiAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7CiAKIAlpZiAoc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSArIDQgPiBza2ItPmxlbikKQEAgLTQ1MSw2ICs0NTEsMTEgQEAKIH0KIAogCitzdGF0aWMgdm9pZCBvcHRfa2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlrZnJlZShjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGlwX29wdGlvbnNfcmN1LCByY3UpKTsKK30KKwogLyoKICAqCVNvY2tldCBvcHRpb24gY29kZSBmb3IgSVAuIFRoaXMgaXMgdGhlIGVuZCBvZiB0aGUgbGluZSBhZnRlciBhbnkKICAqCVRDUCxVRFAgZXRjIG9wdGlvbnMgb24gYW4gSVAgc29ja2V0LgpAQCAtNDk3LDEzICs1MDIsMTYgQEAKIAlzd2l0Y2ggKG9wdG5hbWUpIHsKIAljYXNlIElQX09QVElPTlM6CiAJewotCQlzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0ID0gTlVMTDsKKwkJc3RydWN0IGlwX29wdGlvbnNfcmN1ICpvbGQsICpvcHQgPSBOVUxMOworCiAJCWlmIChvcHRsZW4gPiA0MCkKIAkJCWdvdG8gZV9pbnZhbDsKIAkJZXJyID0gaXBfb3B0aW9uc19nZXRfZnJvbV91c2VyKHNvY2tfbmV0KHNrKSwgJm9wdCwKIAkJCQkJICAgICAgIG9wdHZhbCwgb3B0bGVuKTsKIAkJaWYgKGVycikKIAkJCWJyZWFrOworCQlvbGQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGluZXQtPmluZXRfb3B0LAorCQkJCQkJc29ja19vd25lZF9ieV91c2VyKHNrKSk7CiAJCWlmIChpbmV0LT5pc19pY3NrKSB7CiAJCQlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCkBAIC01MTIsMTcgKzUyMCwxOCBAQAogCQkJICAgICAgIChUQ1BGX0xJU1RFTiB8IFRDUEZfQ0xPU0UpKSAmJgogCQkJICAgICBpbmV0LT5pbmV0X2RhZGRyICE9IExPT1BCQUNLNF9JUFY2KSkgewogI2VuZGlmCi0JCQkJaWYgKGluZXQtPm9wdCkKLQkJCQkJaWNzay0+aWNza19leHRfaGRyX2xlbiAtPSBpbmV0LT5vcHQtPm9wdGxlbjsKKwkJCQlpZiAob2xkKQorCQkJCQlpY3NrLT5pY3NrX2V4dF9oZHJfbGVuIC09IG9sZC0+b3B0Lm9wdGxlbjsKIAkJCQlpZiAob3B0KQotCQkJCQlpY3NrLT5pY3NrX2V4dF9oZHJfbGVuICs9IG9wdC0+b3B0bGVuOworCQkJCQlpY3NrLT5pY3NrX2V4dF9oZHJfbGVuICs9IG9wdC0+b3B0Lm9wdGxlbjsKIAkJCQlpY3NrLT5pY3NrX3N5bmNfbXNzKHNrLCBpY3NrLT5pY3NrX3BtdHVfY29va2llKTsKICNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKIAkJCX0KICNlbmRpZgogCQl9Ci0JCW9wdCA9IHhjaGcoJmluZXQtPm9wdCwgb3B0KTsKLQkJa2ZyZWUob3B0KTsKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKGluZXQtPmluZXRfb3B0LCBvcHQpOworCQlpZiAob2xkKQorCQkJY2FsbF9yY3UoJm9sZC0+cmN1LCBvcHRfa2ZyZWVfcmN1KTsKIAkJYnJlYWs7CiAJfQogCWNhc2UgSVBfUEtUSU5GTzoKQEAgLTEwODEsMTIgKzEwOTAsMTYgQEAKIAljYXNlIElQX09QVElPTlM6CiAJewogCQl1bnNpZ25lZCBjaGFyIG9wdGJ1ZltzaXplb2Yoc3RydWN0IGlwX29wdGlvbnMpKzQwXTsKLQkJc3RydWN0IGlwX29wdGlvbnMgKiBvcHQgPSAoc3RydWN0IGlwX29wdGlvbnMgKilvcHRidWY7CisJCXN0cnVjdCBpcF9vcHRpb25zICpvcHQgPSAoc3RydWN0IGlwX29wdGlvbnMgKilvcHRidWY7CisJCXN0cnVjdCBpcF9vcHRpb25zX3JjdSAqaW5ldF9vcHQ7CisKKwkJaW5ldF9vcHQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGluZXQtPmluZXRfb3B0LAorCQkJCQkJICAgICBzb2NrX293bmVkX2J5X3VzZXIoc2spKTsKIAkJb3B0LT5vcHRsZW4gPSAwOwotCQlpZiAoaW5ldC0+b3B0KQotCQkJbWVtY3B5KG9wdGJ1ZiwgaW5ldC0+b3B0LAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXBfb3B0aW9ucykrCi0JCQkgICAgICAgaW5ldC0+b3B0LT5vcHRsZW4pOworCQlpZiAoaW5ldF9vcHQpCisJCQltZW1jcHkob3B0YnVmLCAmaW5ldF9vcHQtPm9wdCwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGlwX29wdGlvbnMpICsKKwkJCSAgICAgICBpbmV0X29wdC0+b3B0Lm9wdGxlbik7CiAJCXJlbGVhc2Vfc29jayhzayk7CiAKIAkJaWYgKG9wdC0+b3B0bGVuID09IDApCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGNvbXAuYyBiL25ldC9pcHY0L2lwY29tcC5jCmluZGV4IDYyOTA2NzUuLmM4NTdmNmYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwY29tcC5jCisrKyBiL25ldC9pcHY0L2lwY29tcC5jCkBAIC0yNyw3ICsyNyw3IEBACiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItPmRldik7CiAJX19iZTMyIHNwaTsKLQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2ItPmRhdGE7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGggPSAoY29uc3Qgc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOwogCXN0cnVjdCBpcF9jb21wX2hkciAqaXBjaCA9IChzdHJ1Y3QgaXBfY29tcF9oZHIgKikoc2tiLT5kYXRhKyhpcGgtPmlobDw8MikpOwogCXN0cnVjdCB4ZnJtX3N0YXRlICp4OwogCkBAIC0zNiw3ICszNiw3IEBACiAJCXJldHVybjsKIAogCXNwaSA9IGh0b25sKG50b2hzKGlwY2gtPmNwaSkpOwotCXggPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIHNrYi0+bWFyaywgKHhmcm1fYWRkcmVzc190ICopJmlwaC0+ZGFkZHIsCisJeCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgc2tiLT5tYXJrLCAoY29uc3QgeGZybV9hZGRyZXNzX3QgKikmaXBoLT5kYWRkciwKIAkJCSAgICAgIHNwaSwgSVBQUk9UT19DT01QLCBBRl9JTkVUKTsKIAlpZiAoIXgpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwY29uZmlnLmMgYi9uZXQvaXB2NC9pcGNvbmZpZy5jCmluZGV4IGNiZmYyZWMuLmFiN2U1NTQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwY29uZmlnLmMKKysrIGIvbmV0L2lwdjQvaXBjb25maWcuYwpAQCAtODcsOCArODcsOCBAQAogI2VuZGlmCiAKIC8qIERlZmluZSB0aGUgZnJpZW5kbHkgZGVsYXkgYmVmb3JlIGFuZCBhZnRlciBvcGVuaW5nIG5ldCBkZXZpY2VzICovCi0jZGVmaW5lIENPTkZfUFJFX09QRU4JCTUwMAkvKiBCZWZvcmUgb3BlbmluZzogMS8yIHNlY29uZCAqLwotI2RlZmluZSBDT05GX1BPU1RfT1BFTgkJMQkvKiBBZnRlciBvcGVuaW5nOiAxIHNlY29uZCAqLworI2RlZmluZSBDT05GX1BPU1RfT1BFTgkJMTAJLyogQWZ0ZXIgb3BlbmluZzogMTAgbXNlY3MgKi8KKyNkZWZpbmUgQ09ORl9DQVJSSUVSX1RJTUVPVVQJMTIwMDAwCS8qIFdhaXQgZm9yIGNhcnJpZXIgdGltZW91dCAqLwogCiAvKiBEZWZpbmUgdGhlIHRpbWVvdXQgZm9yIHdhaXRpbmcgZm9yIGEgREhDUC9CT09UUC9SQVJQIHJlcGx5ICovCiAjZGVmaW5lIENPTkZfT1BFTl9SRVRSSUVTIAkyCS8qIChSZSlvcGVuIGRldmljZXMgdHdpY2UgKi8KQEAgLTE4OCwxNCArMTg4LDE0IEBACiBzdGF0aWMgc3RydWN0IGljX2RldmljZSAqaWNfZmlyc3RfZGV2IF9faW5pdGRhdGEgPSBOVUxMOy8qIExpc3Qgb2Ygb3BlbiBkZXZpY2UgKi8KIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaWNfZGV2IF9faW5pdGRhdGEgPSBOVUxMOwkvKiBTZWxlY3RlZCBkZXZpY2UgKi8KIAotc3RhdGljIGJvb2wgX19pbml0IGljX2RldmljZV9tYXRjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGJvb2wgX19pbml0IGljX2lzX2luaXRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JaWYgKHVzZXJfZGV2X25hbWVbMF0gPyAhc3RyY21wKGRldi0+bmFtZSwgdXNlcl9kZXZfbmFtZSkgOgorCWlmIChkZXYtPmZsYWdzICYgSUZGX0xPT1BCQUNLKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHVzZXJfZGV2X25hbWVbMF0gPyAhc3RyY21wKGRldi0+bmFtZSwgdXNlcl9kZXZfbmFtZSkgOgogCSAgICAoIShkZXYtPmZsYWdzICYgSUZGX0xPT1BCQUNLKSAmJgogCSAgICAgKGRldi0+ZmxhZ3MgJiAoSUZGX1BPSU5UT1BPSU5UfElGRl9CUk9BRENBU1QpKSAmJgotCSAgICAgc3RybmNtcChkZXYtPm5hbWUsICJkdW1teSIsIDUpKSkKLQkJcmV0dXJuIHRydWU7Ci0JcmV0dXJuIGZhbHNlOworCSAgICAgc3RybmNtcChkZXYtPm5hbWUsICJkdW1teSIsIDUpKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgaWNfb3Blbl9kZXZzKHZvaWQpCkBAIC0yMDMsNiArMjAzLDcgQEAKIAlzdHJ1Y3QgaWNfZGV2aWNlICpkLCAqKmxhc3Q7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAl1bnNpZ25lZCBzaG9ydCBvZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBzdGFydDsKIAogCWxhc3QgPSAmaWNfZmlyc3RfZGV2OwogCXJ0bmxfbG9jaygpOwpAQCAtMjE2LDkgKzIxNyw3IEBACiAJfQogCiAJZm9yX2VhY2hfbmV0ZGV2KCZpbml0X25ldCwgZGV2KSB7Ci0JCWlmIChkZXYtPmZsYWdzICYgSUZGX0xPT1BCQUNLKQotCQkJY29udGludWU7Ci0JCWlmIChpY19kZXZpY2VfbWF0Y2goZGV2KSkgeworCQlpZiAoaWNfaXNfaW5pdF9kZXYoZGV2KSkgewogCQkJaW50IGFibGUgPSAwOwogCQkJaWYgKGRldi0+bXR1ID49IDM2NCkKIAkJCQlhYmxlIHw9IElDX0JPT1RQOwpAQCAtMjUyLDYgKzI1MSwxNyBAQAogCQkJCWRldi0+bmFtZSwgYWJsZSwgZC0+eGlkKSk7CiAJCX0KIAl9CisKKwkvKiB3YWl0IGZvciBhIGNhcnJpZXIgb24gYXQgbGVhc3Qgb25lIGRldmljZSAqLworCXN0YXJ0ID0gamlmZmllczsKKwl3aGlsZSAoamlmZmllcyAtIHN0YXJ0IDwgbXNlY3NfdG9famlmZmllcyhDT05GX0NBUlJJRVJfVElNRU9VVCkpIHsKKwkJZm9yX2VhY2hfbmV0ZGV2KCZpbml0X25ldCwgZGV2KQorCQkJaWYgKGljX2lzX2luaXRfZGV2KGRldikgJiYgbmV0aWZfY2Fycmllcl9vayhkZXYpKQorCQkJCWdvdG8gaGF2ZV9jYXJyaWVyOworCisJCW1zbGVlcCgxKTsKKwl9CitoYXZlX2NhcnJpZXI6CiAJcnRubF91bmxvY2soKTsKIAogCSpsYXN0ID0gTlVMTDsKQEAgLTEzMjQsMTQgKzEzMzQsMTMgQEAKIHsKIAlpbnQgaTsKIAotCW1zbGVlcChDT05GX1BSRV9PUEVOKTsKIAlmb3IgKGkgPSAwOyBpIDwgREVWSUNFX1dBSVRfTUFYOyBpKyspIHsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAkJaW50IGZvdW5kID0gMDsKIAogCQlydG5sX2xvY2soKTsKIAkJZm9yX2VhY2hfbmV0ZGV2KCZpbml0X25ldCwgZGV2KSB7Ci0JCQlpZiAoaWNfZGV2aWNlX21hdGNoKGRldikpIHsKKwkJCWlmIChpY19pc19pbml0X2RldihkZXYpKSB7CiAJCQkJZm91bmQgPSAxOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMTM3OCw3ICsxMzg3LDcgQEAKIAkJcmV0dXJuIGVycjsKIAogCS8qIEdpdmUgZHJpdmVycyBhIGNoYW5jZSB0byBzZXR0bGUgKi8KLQlzc2xlZXAoQ09ORl9QT1NUX09QRU4pOworCW1zbGVlcChDT05GX1BPU1RfT1BFTik7CiAKIAkvKgogCSAqIElmIHRoZSBjb25maWcgaW5mb3JtYXRpb24gaXMgaW5zdWZmaWNpZW50IChlLmcuLCBvdXIgSVAgYWRkcmVzcyBvcgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBpcC5jIGIvbmV0L2lwdjQvaXBpcC5jCmluZGV4IGJmYzE3YzUuLjM3OGIyMGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwaXAuYworKysgYi9uZXQvaXB2NC9pcGlwLmMKQEAgLTI3NiwxMSArMjc2LDYgQEAKIAogCWRldl9uZXRfc2V0KGRldiwgbmV0KTsKIAotCWlmIChzdHJjaHIobmFtZSwgJyUnKSkgewotCQlpZiAoZGV2X2FsbG9jX25hbWUoZGV2LCBuYW1lKSA8IDApCi0JCQlnb3RvIGZhaWxlZF9mcmVlOwotCX0KLQogCW50ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAludC0+cGFybXMgPSAqcGFybXM7CiAKQEAgLTMxOSw3ICszMTQsNyBAQAogICAgOCBieXRlcyBvZiBwYWNrZXQgcGF5bG9hZC4gSXQgbWVhbnMsIHRoYXQgcHJlY2lzZSByZWxheWluZyBvZgogICAgSUNNUCBpbiB0aGUgcmVhbCBJbnRlcm5ldCBpcyBhYnNvbHV0ZWx5IGluZmVhc2libGUuCiAgKi8KLQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2ItPmRhdGE7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGggPSAoY29uc3Qgc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOwogCWNvbnN0IGludCB0eXBlID0gaWNtcF9oZHIoc2tiKS0+dHlwZTsKIAljb25zdCBpbnQgY29kZSA9IGljbXBfaGRyKHNrYiktPmNvZGU7CiAJc3RydWN0IGlwX3R1bm5lbCAqdDsKQEAgLTQzMywxNSArNDI4LDE2IEBACiB7CiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgcGNwdV90c3RhdHMgKnRzdGF0czsKLQlzdHJ1Y3QgaXBoZHIgICp0aXBoID0gJnR1bm5lbC0+cGFybXMuaXBoOworCWNvbnN0IHN0cnVjdCBpcGhkciAgKnRpcGggPSAmdHVubmVsLT5wYXJtcy5pcGg7CiAJdTggICAgIHRvcyA9IHR1bm5lbC0+cGFybXMuaXBoLnRvczsKIAlfX2JlMTYgZGYgPSB0aXBoLT5mcmFnX29mZjsKIAlzdHJ1Y3QgcnRhYmxlICpydDsgICAgIAkJCS8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovCiAJc3RydWN0IG5ldF9kZXZpY2UgKnRkZXY7CQkvKiBEZXZpY2UgdG8gb3RoZXIgaG9zdCAqLwotCXN0cnVjdCBpcGhkciAgKm9sZF9pcGggPSBpcF9oZHIoc2tiKTsKKwljb25zdCBzdHJ1Y3QgaXBoZHIgICpvbGRfaXBoID0gaXBfaGRyKHNrYik7CiAJc3RydWN0IGlwaGRyICAqaXBoOwkJCS8qIE91ciBuZXcgSVAgaGVhZGVyICovCiAJdW5zaWduZWQgaW50IG1heF9oZWFkcm9vbTsJCS8qIFRoZSBleHRyYSBoZWFkZXIgc3BhY2UgbmVlZGVkICovCiAJX19iZTMyIGRzdCA9IHRpcGgtPmRhZGRyOworCXN0cnVjdCBmbG93aTQgZmw0OwogCWludCAgICBtdHU7CiAKIAlpZiAoc2tiLT5wcm90b2NvbCAhPSBodG9ucyhFVEhfUF9JUCkpCkBAIC00NjAsNyArNDU2LDcgQEAKIAkJCWdvdG8gdHhfZXJyb3JfaWNtcDsKIAl9CiAKLQlydCA9IGlwX3JvdXRlX291dHB1dF9wb3J0cyhkZXZfbmV0KGRldiksIE5VTEwsCisJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMoZGV2X25ldChkZXYpLCAmZmw0LCBOVUxMLAogCQkJCSAgIGRzdCwgdGlwaC0+c2FkZHIsCiAJCQkJICAgMCwgMCwKIAkJCQkgICBJUFBST1RPX0lQSVAsIFJUX1RPUyh0b3MpLApAQCAtNTQ5LDggKzU0NSw4IEBACiAJaXBoLT5mcmFnX29mZgkJPQlkZjsKIAlpcGgtPnByb3RvY29sCQk9CUlQUFJPVE9fSVBJUDsKIAlpcGgtPnRvcwkJPQlJTkVUX0VDTl9lbmNhcHN1bGF0ZSh0b3MsIG9sZF9pcGgtPnRvcyk7Ci0JaXBoLT5kYWRkcgkJPQlydC0+cnRfZHN0OwotCWlwaC0+c2FkZHIJCT0JcnQtPnJ0X3NyYzsKKwlpcGgtPmRhZGRyCQk9CWZsNC5kYWRkcjsKKwlpcGgtPnNhZGRyCQk9CWZsNC5zYWRkcjsKIAogCWlmICgoaXBoLT50dGwgPSB0aXBoLT50dGwpID09IDApCiAJCWlwaC0+dHRsCT0Jb2xkX2lwaC0+dHRsOwpAQCAtNTcyLDE5ICs1NjgsMjEgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqdGRldiA9IE5VTEw7CiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsOwotCXN0cnVjdCBpcGhkciAqaXBoOworCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoOwogCiAJdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpcGggPSAmdHVubmVsLT5wYXJtcy5pcGg7CiAKIAlpZiAoaXBoLT5kYWRkcikgewotCQlzdHJ1Y3QgcnRhYmxlICpydCA9IGlwX3JvdXRlX291dHB1dF9wb3J0cyhkZXZfbmV0KGRldiksIE5VTEwsCi0JCQkJCQkJICBpcGgtPmRhZGRyLCBpcGgtPnNhZGRyLAotCQkJCQkJCSAgMCwgMCwKLQkJCQkJCQkgIElQUFJPVE9fSVBJUCwKLQkJCQkJCQkgIFJUX1RPUyhpcGgtPnRvcyksCi0JCQkJCQkJICB0dW5uZWwtPnBhcm1zLmxpbmspOworCQlzdHJ1Y3QgcnRhYmxlICpydDsKKwkJc3RydWN0IGZsb3dpNCBmbDQ7CiAKKwkJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMoZGV2X25ldChkZXYpLCAmZmw0LCBOVUxMLAorCQkJCQkgICBpcGgtPmRhZGRyLCBpcGgtPnNhZGRyLAorCQkJCQkgICAwLCAwLAorCQkJCQkgICBJUFBST1RPX0lQSVAsCisJCQkJCSAgIFJUX1RPUyhpcGgtPnRvcyksCisJCQkJCSAgIHR1bm5lbC0+cGFybXMubGluayk7CiAJCWlmICghSVNfRVJSKHJ0KSkgewogCQkJdGRldiA9IHJ0LT5kc3QuZGV2OwogCQkJaXBfcnRfcHV0KHJ0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXIuYyBiL25ldC9pcHY0L2lwbXIuYwppbmRleCAxZjYyZWFlLi4zMGE3NzYzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcG1yLmMKKysrIGIvbmV0L2lwdjQvaXBtci5jCkBAIC0xNTQ5LDcgKzE1NDksNyBAQAogc3RhdGljIHZvaWQgaXBfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIpCiB7CiAJc3RydWN0IGlwaGRyICppcGg7Ci0Jc3RydWN0IGlwaGRyICpvbGRfaXBoID0gaXBfaGRyKHNrYik7CisJY29uc3Qgc3RydWN0IGlwaGRyICpvbGRfaXBoID0gaXBfaGRyKHNrYik7CiAKIAlza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTsKIAlza2ItPnRyYW5zcG9ydF9oZWFkZXIgPSBza2ItPm5ldHdvcmtfaGVhZGVyOwpAQCAtMTU5NSw2ICsxNTk1LDcgQEAKIAlzdHJ1Y3QgdmlmX2RldmljZSAqdmlmID0gJm1ydC0+dmlmX3RhYmxlW3ZpZmldOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHJ0YWJsZSAqcnQ7CisJc3RydWN0IGZsb3dpNCBmbDQ7CiAJaW50ICAgIGVuY2FwID0gMDsKIAogCWlmICh2aWYtPmRldiA9PSBOVUxMKQpAQCAtMTYxMiw3ICsxNjEzLDcgQEAKICNlbmRpZgogCiAJaWYgKHZpZi0+ZmxhZ3MgJiBWSUZGX1RVTk5FTCkgewotCQlydCA9IGlwX3JvdXRlX291dHB1dF9wb3J0cyhuZXQsIE5VTEwsCisJCXJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKG5ldCwgJmZsNCwgTlVMTCwKIAkJCQkJICAgdmlmLT5yZW1vdGUsIHZpZi0+bG9jYWwsCiAJCQkJCSAgIDAsIDAsCiAJCQkJCSAgIElQUFJPVE9fSVBJUCwKQEAgLTE2MjEsNyArMTYyMiw3IEBACiAJCQlnb3RvIG91dF9mcmVlOwogCQllbmNhcCA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpOwogCX0gZWxzZSB7Ci0JCXJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKG5ldCwgTlVMTCwgaXBoLT5kYWRkciwgMCwKKwkJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMobmV0LCAmZmw0LCBOVUxMLCBpcGgtPmRhZGRyLCAwLAogCQkJCQkgICAwLCAwLAogCQkJCQkgICBJUFBST1RPX0lQSVAsCiAJCQkJCSAgIFJUX1RPUyhpcGgtPnRvcyksIHZpZi0+bGluayk7CkBAIC0xNzg4LDEyICsxNzg5LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKmlwbXJfcnRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBydGFibGUgKnJ0KQorc3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXBtcl9ydF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKKwlzdHJ1Y3QgcnRhYmxlICpydCA9IHNrYl9ydGFibGUoc2tiKTsKKwlzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpOwogCXN0cnVjdCBmbG93aTQgZmw0ID0gewotCQkuZGFkZHIgPSBydC0+cnRfa2V5X2RzdCwKLQkJLnNhZGRyID0gcnQtPnJ0X2tleV9zcmMsCi0JCS5mbG93aTRfdG9zID0gcnQtPnJ0X3RvcywKKwkJLmRhZGRyID0gaXBoLT5kYWRkciwKKwkJLnNhZGRyID0gaXBoLT5zYWRkciwKKwkJLmZsb3dpNF90b3MgPSBpcGgtPnRvcywKIAkJLmZsb3dpNF9vaWYgPSBydC0+cnRfb2lmLAogCQkuZmxvd2k0X2lpZiA9IHJ0LT5ydF9paWYsCiAJCS5mbG93aTRfbWFyayA9IHJ0LT5ydF9tYXJrLApAQCAtMTgyNSw3ICsxODI4LDcgQEAKIAlpZiAoSVBDQihza2IpLT5mbGFncyAmIElQU0tCX0ZPUldBUkRFRCkKIAkJZ290byBkb250X2ZvcndhcmQ7CiAKLQltcnQgPSBpcG1yX3J0X2ZpYl9sb29rdXAobmV0LCBza2JfcnRhYmxlKHNrYikpOworCW1ydCA9IGlwbXJfcnRfZmliX2xvb2t1cChuZXQsIHNrYik7CiAJaWYgKElTX0VSUihtcnQpKSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gUFRSX0VSUihtcnQpOwpAQCAtMTk1Nyw3ICsxOTYwLDcgQEAKIAogCXBpbSA9IGlnbXBfaGRyKHNrYik7CiAKLQltcnQgPSBpcG1yX3J0X2ZpYl9sb29rdXAobmV0LCBza2JfcnRhYmxlKHNrYikpOworCW1ydCA9IGlwbXJfcnRfZmliX2xvb2t1cChuZXQsIHNrYik7CiAJaWYgKElTX0VSUihtcnQpKQogCQlnb3RvIGRyb3A7CiAJaWYgKCFtcnQtPm1yb3V0ZV9kb19waW0gfHwKQEAgLTE5ODksNyArMTk5Miw3IEBACiAJICAgICBjc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgMCwgc2tiLT5sZW4sIDApKSkpCiAJCWdvdG8gZHJvcDsKIAotCW1ydCA9IGlwbXJfcnRfZmliX2xvb2t1cChuZXQsIHNrYl9ydGFibGUoc2tiKSk7CisJbXJ0ID0gaXBtcl9ydF9maWJfbG9va3VwKG5ldCwgc2tiKTsKIAlpZiAoSVNfRVJSKG1ydCkpCiAJCWdvdG8gZHJvcDsKIAlpZiAoX19waW1fcmN2KG1ydCwgc2tiLCBzaXplb2YoKnBpbSkpKSB7CkBAIC0yMDM4LDIwICsyMDQxLDIwIEBACiAJcmV0dXJuIC1FTVNHU0laRTsKIH0KIAotaW50IGlwbXJfZ2V0X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwKLQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJ0bXNnICpydG0sIGludCBub3dhaXQpCitpbnQgaXBtcl9nZXRfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICBfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwKKwkJICAgc3RydWN0IHJ0bXNnICpydG0sIGludCBub3dhaXQpCiB7Ci0JaW50IGVycjsKLQlzdHJ1Y3QgbXJfdGFibGUgKm1ydDsKIAlzdHJ1Y3QgbWZjX2NhY2hlICpjYWNoZTsKLQlzdHJ1Y3QgcnRhYmxlICpydCA9IHNrYl9ydGFibGUoc2tiKTsKKwlzdHJ1Y3QgbXJfdGFibGUgKm1ydDsKKwlpbnQgZXJyOwogCiAJbXJ0ID0gaXBtcl9nZXRfdGFibGUobmV0LCBSVF9UQUJMRV9ERUZBVUxUKTsKIAlpZiAobXJ0ID09IE5VTEwpCiAJCXJldHVybiAtRU5PRU5UOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCWNhY2hlID0gaXBtcl9jYWNoZV9maW5kKG1ydCwgcnQtPnJ0X3NyYywgcnQtPnJ0X2RzdCk7CisJY2FjaGUgPSBpcG1yX2NhY2hlX2ZpbmQobXJ0LCBzYWRkciwgZGFkZHIpOwogCiAJaWYgKGNhY2hlID09IE5VTEwpIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjI7CkBAIC0yMDg0LDggKzIwODcsOCBAQAogCQlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiMik7CiAJCWlwaCA9IGlwX2hkcihza2IyKTsKIAkJaXBoLT5paGwgPSBzaXplb2Yoc3RydWN0IGlwaGRyKSA+PiAyOwotCQlpcGgtPnNhZGRyID0gcnQtPnJ0X3NyYzsKLQkJaXBoLT5kYWRkciA9IHJ0LT5ydF9kc3Q7CisJCWlwaC0+c2FkZHIgPSBzYWRkcjsKKwkJaXBoLT5kYWRkciA9IGRhZGRyOwogCQlpcGgtPnZlcnNpb24gPSAwOwogCQllcnIgPSBpcG1yX2NhY2hlX3VucmVzb2x2ZWQobXJ0LCB2aWYsIHNrYjIpOwogCQlyZWFkX3VubG9jaygmbXJ0X2xvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKaW5kZXggODliYzdlNi4uZmQ3YTNmNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCkBAIC0yNjAsNiArMjYwLDcgQEAKIAl2b2lkICp0YWJsZV9iYXNlOwogCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlOwogCXN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gYWNwYXI7CisJdW5zaWduZWQgaW50IGFkZGVuZDsKIAogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIGFycF9oZHJfbGVuKHNrYi0+ZGV2KSkpCiAJCXJldHVybiBORl9EUk9QOwpAQCAtMjY3LDcgKzI2OCw4IEBACiAJaW5kZXYgPSBpbiA/IGluLT5uYW1lIDogbnVsbGRldm5hbWU7CiAJb3V0ZGV2ID0gb3V0ID8gb3V0LT5uYW1lIDogbnVsbGRldm5hbWU7CiAKLQl4dF9pbmZvX3JkbG9ja19iaCgpOworCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwlhZGRlbmQgPSB4dF93cml0ZV9yZWNzZXFfYmVnaW4oKTsKIAlwcml2YXRlID0gdGFibGUtPnByaXZhdGU7CiAJdGFibGVfYmFzZSA9IHByaXZhdGUtPmVudHJpZXNbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKIApAQCAtMzM4LDcgKzM0MCw4IEBACiAJCQkvKiBWZXJkaWN0ICovCiAJCQlicmVhazsKIAl9IHdoaWxlICghYWNwYXIuaG90ZHJvcCk7Ci0JeHRfaW5mb19yZHVubG9ja19iaCgpOworCXh0X3dyaXRlX3JlY3NlcV9lbmQoYWRkZW5kKTsKKwlsb2NhbF9iaF9lbmFibGUoKTsKIAogCWlmIChhY3Bhci5ob3Rkcm9wKQogCQlyZXR1cm4gTkZfRFJPUDsKQEAgLTcxMiw3ICs3MTUsNyBAQAogCXVuc2lnbmVkIGludCBpOwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlzZXFsb2NrX3QgKmxvY2sgPSAmcGVyX2NwdSh4dF9pbmZvX2xvY2tzLCBjcHUpLmxvY2s7CisJCXNlcWNvdW50X3QgKnMgPSAmcGVyX2NwdSh4dF9yZWNzZXEsIGNwdSk7CiAKIAkJaSA9IDA7CiAJCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgdC0+ZW50cmllc1tjcHVdLCB0LT5zaXplKSB7CkBAIC03MjAsMTAgKzcyMywxMCBAQAogCQkJdW5zaWduZWQgaW50IHN0YXJ0OwogCiAJCQlkbyB7Ci0JCQkJc3RhcnQgPSByZWFkX3NlcWJlZ2luKGxvY2spOworCQkJCXN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihzKTsKIAkJCQliY250ID0gaXRlci0+Y291bnRlcnMuYmNudDsKIAkJCQlwY250ID0gaXRlci0+Y291bnRlcnMucGNudDsKLQkJCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnkobG9jaywgc3RhcnQpKTsKKwkJCX0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkocywgc3RhcnQpKTsKIAogCQkJQUREX0NPVU5URVIoY291bnRlcnNbaV0sIGJjbnQsIHBjbnQpOwogCQkJKytpOwpAQCAtMTExNSw2ICsxMTE4LDcgQEAKIAlpbnQgcmV0ID0gMDsKIAl2b2lkICpsb2NfY3B1X2VudHJ5OwogCXN0cnVjdCBhcnB0X2VudHJ5ICppdGVyOworCXVuc2lnbmVkIGludCBhZGRlbmQ7CiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCXN0cnVjdCBjb21wYXRfeHRfY291bnRlcnNfaW5mbyBjb21wYXRfdG1wOwogCkBAIC0xMTcxLDEyICsxMTc1LDEyIEBACiAJLyogQ2hvb3NlIHRoZSBjb3B5IHRoYXQgaXMgb24gb3VyIG5vZGUgKi8KIAljdXJjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJbG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtPmVudHJpZXNbY3VyY3B1XTsKLQl4dF9pbmZvX3dybG9jayhjdXJjcHUpOworCWFkZGVuZCA9IHh0X3dyaXRlX3JlY3NlcV9iZWdpbigpOwogCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgbG9jX2NwdV9lbnRyeSwgcHJpdmF0ZS0+c2l6ZSkgewogCQlBRERfQ09VTlRFUihpdGVyLT5jb3VudGVycywgcGFkZGNbaV0uYmNudCwgcGFkZGNbaV0ucGNudCk7CiAJCSsraTsKIAl9Ci0JeHRfaW5mb193cnVubG9jayhjdXJjcHUpOworCXh0X3dyaXRlX3JlY3NlcV9lbmQoYWRkZW5kKTsKICB1bmxvY2tfdXBfZnJlZToKIAlsb2NhbF9iaF9lbmFibGUoKTsKIAl4dF90YWJsZV91bmxvY2sodCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKaW5kZXggNzA0OTE1MC4uNzY0NzQzOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYwpAQCAtNjgsMTUgKzY4LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlwdF9hbGxvY19pbml0aWFsX3RhYmxlKTsKIAotLyoKLSAgIFdlIGtlZXAgYSBzZXQgb2YgcnVsZXMgZm9yIGVhY2ggQ1BVLCBzbyB3ZSBjYW4gYXZvaWQgd3JpdGUtbG9ja2luZwotICAgdGhlbSBpbiB0aGUgc29mdGlycSB3aGVuIHVwZGF0aW5nIHRoZSBjb3VudGVycyBhbmQgdGhlcmVmb3JlCi0gICBvbmx5IG5lZWQgdG8gcmVhZC1sb2NrIGluIHRoZSBzb2Z0aXJxOyBkb2luZyBhIHdyaXRlX2xvY2tfYmgoKSBpbiB1c2VyCi0gICBjb250ZXh0IHN0b3BzIHBhY2tldHMgY29taW5nIHRocm91Z2ggYW5kIGFsbG93cyB1c2VyIGNvbnRleHQgdG8gcmVhZAotICAgdGhlIGNvdW50ZXJzIG9yIHVwZGF0ZSB0aGUgcnVsZXMuCi0KLSAgIEhlbmNlIHRoZSBzdGFydCBvZiBhbnkgdGFibGUgaXMgZ2l2ZW4gYnkgZ2V0X3RhYmxlKCkgYmVsb3cuICAqLwotCiAvKiBSZXR1cm5zIHdoZXRoZXIgbWF0Y2hlcyBydWxlIG9yIG5vdC4gKi8KIC8qIFBlcmZvcm1hbmNlIGNyaXRpY2FsIC0gY2FsbGVkIGZvciBldmVyeSBwYWNrZXQgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbApAQCAtMzExLDYgKzMwMiw3IEBACiAJdW5zaWduZWQgaW50ICpzdGFja3B0ciwgb3JpZ3B0ciwgY3B1OwogCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlOwogCXN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gYWNwYXI7CisJdW5zaWduZWQgaW50IGFkZGVuZDsKIAogCS8qIEluaXRpYWxpemF0aW9uICovCiAJaXAgPSBpcF9oZHIoc2tiKTsKQEAgLTMzMSw3ICszMjMsOCBAQAogCWFjcGFyLmhvb2tudW0gPSBob29rOwogCiAJSVBfTkZfQVNTRVJUKHRhYmxlLT52YWxpZF9ob29rcyAmICgxIDw8IGhvb2spKTsKLQl4dF9pbmZvX3JkbG9ja19iaCgpOworCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwlhZGRlbmQgPSB4dF93cml0ZV9yZWNzZXFfYmVnaW4oKTsKIAlwcml2YXRlID0gdGFibGUtPnByaXZhdGU7CiAJY3B1ICAgICAgICA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAl0YWJsZV9iYXNlID0gcHJpdmF0ZS0+ZW50cmllc1tjcHVdOwpAQCAtNDMwLDcgKzQyMyw5IEBACiAJcHJfZGVidWcoIkV4aXRpbmcgJXM7IHJlc2V0dGluZyBzcCBmcm9tICV1IHRvICV1XG4iLAogCQkgX19mdW5jX18sICpzdGFja3B0ciwgb3JpZ3B0cik7CiAJKnN0YWNrcHRyID0gb3JpZ3B0cjsKLQl4dF9pbmZvX3JkdW5sb2NrX2JoKCk7CisgCXh0X3dyaXRlX3JlY3NlcV9lbmQoYWRkZW5kKTsKKyAJbG9jYWxfYmhfZW5hYmxlKCk7CisKICNpZmRlZiBERUJVR19BTExPV19BTEwKIAlyZXR1cm4gTkZfQUNDRVBUOwogI2Vsc2UKQEAgLTg4Niw3ICs4ODEsNyBAQAogCXVuc2lnbmVkIGludCBpOwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlzZXFsb2NrX3QgKmxvY2sgPSAmcGVyX2NwdSh4dF9pbmZvX2xvY2tzLCBjcHUpLmxvY2s7CisJCXNlcWNvdW50X3QgKnMgPSAmcGVyX2NwdSh4dF9yZWNzZXEsIGNwdSk7CiAKIAkJaSA9IDA7CiAJCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgdC0+ZW50cmllc1tjcHVdLCB0LT5zaXplKSB7CkBAIC04OTQsMTAgKzg4OSwxMCBAQAogCQkJdW5zaWduZWQgaW50IHN0YXJ0OwogCiAJCQlkbyB7Ci0JCQkJc3RhcnQgPSByZWFkX3NlcWJlZ2luKGxvY2spOworCQkJCXN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihzKTsKIAkJCQliY250ID0gaXRlci0+Y291bnRlcnMuYmNudDsKIAkJCQlwY250ID0gaXRlci0+Y291bnRlcnMucGNudDsKLQkJCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnkobG9jaywgc3RhcnQpKTsKKwkJCX0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkocywgc3RhcnQpKTsKIAogCQkJQUREX0NPVU5URVIoY291bnRlcnNbaV0sIGJjbnQsIHBjbnQpOwogCQkJKytpOyAvKiBtYWNybyBkb2VzIG11bHRpIGV2YWwgb2YgaSAqLwpAQCAtMTMxMiw2ICsxMzA3LDcgQEAKIAlpbnQgcmV0ID0gMDsKIAl2b2lkICpsb2NfY3B1X2VudHJ5OwogCXN0cnVjdCBpcHRfZW50cnkgKml0ZXI7CisJdW5zaWduZWQgaW50IGFkZGVuZDsKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJc3RydWN0IGNvbXBhdF94dF9jb3VudGVyc19pbmZvIGNvbXBhdF90bXA7CiAKQEAgLTEzNjgsMTIgKzEzNjQsMTIgQEAKIAkvKiBDaG9vc2UgdGhlIGNvcHkgdGhhdCBpcyBvbiBvdXIgbm9kZSAqLwogCWN1cmNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlsb2NfY3B1X2VudHJ5ID0gcHJpdmF0ZS0+ZW50cmllc1tjdXJjcHVdOwotCXh0X2luZm9fd3Jsb2NrKGN1cmNwdSk7CisJYWRkZW5kID0geHRfd3JpdGVfcmVjc2VxX2JlZ2luKCk7CiAJeHRfZW50cnlfZm9yZWFjaChpdGVyLCBsb2NfY3B1X2VudHJ5LCBwcml2YXRlLT5zaXplKSB7CiAJCUFERF9DT1VOVEVSKGl0ZXItPmNvdW50ZXJzLCBwYWRkY1tpXS5iY250LCBwYWRkY1tpXS5wY250KTsKIAkJKytpOwogCX0KLQl4dF9pbmZvX3dydW5sb2NrKGN1cmNwdSk7CisJeHRfd3JpdGVfcmVjc2VxX2VuZChhZGRlbmQpOwogIHVubG9ja191cF9mcmVlOgogCWxvY2FsX2JoX2VuYWJsZSgpOwogCXh0X3RhYmxlX3VubG9jayh0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2hlbHBlci5jCmluZGV4IDMxNDI3ZmIuLjk5Y2ZhMjggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuYwpAQCAtMTUzLDcgKzE1Myw3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfc2V0X3NlcV9hZGp1c3QpOwogCi1zdGF0aWMgdm9pZCBuZl9uYXRfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBoZHIgKmlwaCwgdm9pZCAqZGF0YSwKK3N0YXRpYyB2b2lkIG5mX25hdF9jc3VtKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoLCB2b2lkICpkYXRhLAogCQkJaW50IGRhdGFsZW4sIF9fc3VtMTYgKmNoZWNrLCBpbnQgb2xkbGVuKQogewogCXN0cnVjdCBydGFibGUgKnJ0ID0gc2tiX3J0YWJsZShza2IpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcGluZy5jIGIvbmV0L2lwdjQvcGluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmM2JiMTEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaXB2NC9waW5nLmMKQEAgLTAsMCArMSw5MzUgQEAKKy8qCisgKiBJTkVUCQlBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVENQL0lQIHByb3RvY29sIHN1aXRlIGZvciB0aGUgTElOVVgKKyAqCQlvcGVyYXRpbmcgc3lzdGVtLiAgSU5FVCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgIEJTRCBTb2NrZXQKKyAqCQlpbnRlcmZhY2UgYXMgdGhlIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC4KKyAqCisgKgkJIlBpbmciIHNvY2tldHMKKyAqCisgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBCYXNlZCBvbiBpcHY0L3VkcC5jIGNvZGUuCisgKgorICogQXV0aG9yczoJVmFzaWxpeSBLdWxpa292IC8gT3BlbndhbGwgKGZvciBMaW51eCAyLjYpLAorICoJCVBhdmVsIEthbmtvdnNreSAoZm9yIExpbnV4IDIuNC4zMikKKyAqCisgKiBQYXZlbCBnYXZlIGFsbCByaWdodHMgdG8gYnVncyB0byBWYXNpbGl5LAorICogbm9uZSBvZiB0aGUgYnVncyBhcmUgUGF2ZWwncyBub3cuCisgKgorICovCisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bmV0L3NubXAuaD4KKyNpbmNsdWRlIDxuZXQvaXAuaD4KKyNpbmNsdWRlIDxuZXQvaXB2Ni5oPgorI2luY2x1ZGUgPG5ldC9pY21wLmg+CisjaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisjaW5jbHVkZSA8bmV0L3BpbmcuaD4KKyNpbmNsdWRlIDxuZXQvaWNtcC5oPgorI2luY2x1ZGUgPG5ldC91ZHAuaD4KKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4KKyNpbmNsdWRlIDxuZXQvaW5ldF9jb21tb24uaD4KKyNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KKworCitzdGF0aWMgc3RydWN0IHBpbmdfdGFibGUgcGluZ190YWJsZTsKKworc3RhdGljIHUxNiBwaW5nX3BvcnRfcm92ZXI7CisKK3N0YXRpYyBpbmxpbmUgaW50IHBpbmdfaGFzaGZuKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgbnVtLCB1bnNpZ25lZCBtYXNrKQoreworCWludCByZXMgPSAobnVtICsgbmV0X2hhc2hfbWl4KG5ldCkpICYgbWFzazsKKwlwcl9kZWJ1ZygiaGFzaCglZCkgPSAlZFxuIiwgbnVtLCByZXMpOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKnBpbmdfaGFzaHNsb3Qoc3RydWN0IHBpbmdfdGFibGUgKnRhYmxlLAorCQkJCQkgICAgIHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgbnVtKQoreworCXJldHVybiAmdGFibGUtPmhhc2hbcGluZ19oYXNoZm4obmV0LCBudW0sIFBJTkdfSFRBQkxFX01BU0spXTsKK30KKworc3RhdGljIGludCBwaW5nX3Y0X2dldF9wb3J0KHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaWRlbnQpCit7CisJc3RydWN0IGhsaXN0X251bGxzX25vZGUgKm5vZGU7CisJc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhsaXN0OworCXN0cnVjdCBpbmV0X3NvY2sgKmlzaywgKmlzazI7CisJc3RydWN0IHNvY2sgKnNrMiA9IE5VTEw7CisKKwlpc2sgPSBpbmV0X3NrKHNrKTsKKwl3cml0ZV9sb2NrX2JoKCZwaW5nX3RhYmxlLmxvY2spOworCWlmIChpZGVudCA9PSAwKSB7CisJCXUzMiBpOworCQl1MTYgcmVzdWx0ID0gcGluZ19wb3J0X3JvdmVyICsgMTsKKworCQlmb3IgKGkgPSAwOyBpIDwgKDFMIDw8IDE2KTsgaSsrLCByZXN1bHQrKykgeworCQkJaWYgKCFyZXN1bHQpCisJCQkJcmVzdWx0Kys7IC8qIGF2b2lkIHplcm8gKi8KKwkJCWhsaXN0ID0gcGluZ19oYXNoc2xvdCgmcGluZ190YWJsZSwgc29ja19uZXQoc2spLAorCQkJCQkgICAgcmVzdWx0KTsKKwkJCXBpbmdfcG9ydGFkZHJfZm9yX2VhY2hfZW50cnkoc2syLCBub2RlLCBobGlzdCkgeworCQkJCWlzazIgPSBpbmV0X3NrKHNrMik7CisKKwkJCQlpZiAoaXNrMi0+aW5ldF9udW0gPT0gcmVzdWx0KQorCQkJCQlnb3RvIG5leHRfcG9ydDsKKwkJCX0KKworCQkJLyogZm91bmQgKi8KKwkJCXBpbmdfcG9ydF9yb3ZlciA9IGlkZW50ID0gcmVzdWx0OworCQkJYnJlYWs7CituZXh0X3BvcnQ6CisJCQk7CisJCX0KKwkJaWYgKGkgPj0gKDFMIDw8IDE2KSkKKwkJCWdvdG8gZmFpbDsKKwl9IGVsc2UgeworCQlobGlzdCA9IHBpbmdfaGFzaHNsb3QoJnBpbmdfdGFibGUsIHNvY2tfbmV0KHNrKSwgaWRlbnQpOworCQlwaW5nX3BvcnRhZGRyX2Zvcl9lYWNoX2VudHJ5KHNrMiwgbm9kZSwgaGxpc3QpIHsKKwkJCWlzazIgPSBpbmV0X3NrKHNrMik7CisKKwkJCWlmICgoaXNrMi0+aW5ldF9udW0gPT0gaWRlbnQpICYmCisJCQkgICAgKHNrMiAhPSBzaykgJiYKKwkJCSAgICAoIXNrMi0+c2tfcmV1c2UgfHwgIXNrLT5za19yZXVzZSkpCisJCQkJZ290byBmYWlsOworCQl9CisJfQorCisJcHJfZGVidWcoImZvdW5kIHBvcnQvaWRlbnQgPSAlZFxuIiwgaWRlbnQpOworCWlzay0+aW5ldF9udW0gPSBpZGVudDsKKwlpZiAoc2tfdW5oYXNoZWQoc2spKSB7CisJCXByX2RlYnVnKCJ3YXMgbm90IGhhc2hlZFxuIik7CisJCXNvY2tfaG9sZChzayk7CisJCWhsaXN0X251bGxzX2FkZF9oZWFkKCZzay0+c2tfbnVsbHNfbm9kZSwgaGxpc3QpOworCQlzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stPnNrX3Byb3QsIDEpOworCX0KKwl3cml0ZV91bmxvY2tfYmgoJnBpbmdfdGFibGUubG9jayk7CisJcmV0dXJuIDA7CisKK2ZhaWw6CisJd3JpdGVfdW5sb2NrX2JoKCZwaW5nX3RhYmxlLmxvY2spOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBwaW5nX3Y0X2hhc2goc3RydWN0IHNvY2sgKnNrKQoreworCXByX2RlYnVnKCJwaW5nX3Y0X2hhc2goc2stPnBvcnQ9JXUpXG4iLCBpbmV0X3NrKHNrKS0+aW5ldF9udW0pOworCUJVRygpOyAvKiAiUGxlYXNlIGRvIG5vdCBwcmVzcyB0aGlzIGJ1dHRvbiBhZ2Fpbi4iICovCit9CisKK3N0YXRpYyB2b2lkIHBpbmdfdjRfdW5oYXNoKHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgaW5ldF9zb2NrICppc2sgPSBpbmV0X3NrKHNrKTsKKwlwcl9kZWJ1ZygicGluZ192NF91bmhhc2goaXNrPSVwLGlzay0+bnVtPSV1KVxuIiwgaXNrLCBpc2stPmluZXRfbnVtKTsKKwlpZiAoc2tfaGFzaGVkKHNrKSkgeworCQlzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaHNsb3Q7CisKKwkJaHNsb3QgPSBwaW5nX2hhc2hzbG90KCZwaW5nX3RhYmxlLCBzb2NrX25ldChzayksIGlzay0+aW5ldF9udW0pOworCQl3cml0ZV9sb2NrX2JoKCZwaW5nX3RhYmxlLmxvY2spOworCQlobGlzdF9udWxsc19kZWwoJnNrLT5za19udWxsc19ub2RlKTsKKwkJc29ja19wdXQoc2spOworCQlpc2stPmluZXRfbnVtID0gaXNrLT5pbmV0X3Nwb3J0ID0gMDsKKwkJc29ja19wcm90X2ludXNlX2FkZChzb2NrX25ldChzayksIHNrLT5za19wcm90LCAtMSk7CisJCXdyaXRlX3VubG9ja19iaCgmcGluZ190YWJsZS5sb2NrKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29jayAqcGluZ192NF9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgc2FkZHIsIHUzMiBkYWRkciwKKwkJCQkgICB1MTYgaWRlbnQsIGludCBkaWYpCit7CisJc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhzbG90ID0gcGluZ19oYXNoc2xvdCgmcGluZ190YWJsZSwgbmV0LCBpZGVudCk7CisJc3RydWN0IHNvY2sgKnNrID0gTlVMTDsKKwlzdHJ1Y3QgaW5ldF9zb2NrICppc2s7CisJc3RydWN0IGhsaXN0X251bGxzX25vZGUgKmhub2RlOworCisJcHJfZGVidWcoInRyeSB0byBmaW5kOiBudW0gPSAlZCwgZGFkZHIgPSAlbGQsIGRpZiA9ICVkXG4iLAorCQkJIChpbnQpaWRlbnQsICh1bnNpZ25lZCBsb25nKWRhZGRyLCBkaWYpOworCXJlYWRfbG9ja19iaCgmcGluZ190YWJsZS5sb2NrKTsKKworCXBpbmdfcG9ydGFkZHJfZm9yX2VhY2hfZW50cnkoc2ssIGhub2RlLCBoc2xvdCkgeworCQlpc2sgPSBpbmV0X3NrKHNrKTsKKworCQlwcl9kZWJ1ZygiZm91bmQ6ICVwOiBudW0gPSAlZCwgZGFkZHIgPSAlbGQsIGRpZiA9ICVkXG4iLCBzaywKKwkJCSAoaW50KWlzay0+aW5ldF9udW0sICh1bnNpZ25lZCBsb25nKWlzay0+aW5ldF9yY3Zfc2FkZHIsCisJCQkgc2stPnNrX2JvdW5kX2Rldl9pZik7CisKKwkJcHJfZGVidWcoIml0ZXJhdGVcbiIpOworCQlpZiAoaXNrLT5pbmV0X251bSAhPSBpZGVudCkKKwkJCWNvbnRpbnVlOworCQlpZiAoaXNrLT5pbmV0X3Jjdl9zYWRkciAmJiBpc2stPmluZXRfcmN2X3NhZGRyICE9IGRhZGRyKQorCQkJY29udGludWU7CisJCWlmIChzay0+c2tfYm91bmRfZGV2X2lmICYmIHNrLT5za19ib3VuZF9kZXZfaWYgIT0gZGlmKQorCQkJY29udGludWU7CisKKwkJc29ja19ob2xkKHNrKTsKKwkJZ290byBleGl0OworCX0KKworCXNrID0gTlVMTDsKK2V4aXQ6CisJcmVhZF91bmxvY2tfYmgoJnBpbmdfdGFibGUubG9jayk7CisKKwlyZXR1cm4gc2s7Cit9CisKK3N0YXRpYyB2b2lkIGluZXRfZ2V0X3BpbmdfZ3JvdXBfcmFuZ2VfbmV0KHN0cnVjdCBuZXQgKm5ldCwgZ2lkX3QgKmxvdywKKwkJCQkJICBnaWRfdCAqaGlnaCkKK3sKKwlnaWRfdCAqZGF0YSA9IG5ldC0+aXB2NC5zeXNjdGxfcGluZ19ncm91cF9yYW5nZTsKKwl1bnNpZ25lZCBzZXE7CisJZG8geworCQlzZXEgPSByZWFkX3NlcWJlZ2luKCZzeXNjdGxfbG9jYWxfcG9ydHMubG9jayk7CisKKwkJKmxvdyA9IGRhdGFbMF07CisJCSpoaWdoID0gZGF0YVsxXTsKKwl9IHdoaWxlIChyZWFkX3NlcXJldHJ5KCZzeXNjdGxfbG9jYWxfcG9ydHMubG9jaywgc2VxKSk7Cit9CisKKworc3RhdGljIGludCBwaW5nX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOworCWdpZF90IGdyb3VwID0gY3VycmVudF9lZ2lkKCk7CisJZ2lkX3QgcmFuZ2VbMl07CisJc3RydWN0IGdyb3VwX2luZm8gKmdyb3VwX2luZm8gPSBnZXRfY3VycmVudF9ncm91cHMoKTsKKwlpbnQgaSwgaiwgY291bnQgPSBncm91cF9pbmZvLT5uZ3JvdXBzOworCisJaW5ldF9nZXRfcGluZ19ncm91cF9yYW5nZV9uZXQobmV0LCByYW5nZSwgcmFuZ2UrMSk7CisJaWYgKHJhbmdlWzBdIDw9IGdyb3VwICYmIGdyb3VwIDw9IHJhbmdlWzFdKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCBncm91cF9pbmZvLT5uYmxvY2tzOyBpKyspIHsKKwkJaW50IGNwX2NvdW50ID0gbWluX3QoaW50LCBOR1JPVVBTX1BFUl9CTE9DSywgY291bnQpOworCisJCWZvciAoaiA9IDA7IGogPCBjcF9jb3VudDsgaisrKSB7CisJCQlncm91cCA9IGdyb3VwX2luZm8tPmJsb2Nrc1tpXVtqXTsKKwkJCWlmIChyYW5nZVswXSA8PSBncm91cCAmJiBncm91cCA8PSByYW5nZVsxXSkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCisJCWNvdW50IC09IGNwX2NvdW50OworCX0KKworCXJldHVybiAtRUFDQ0VTOworfQorCitzdGF0aWMgdm9pZCBwaW5nX2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KQoreworCXByX2RlYnVnKCJwaW5nX2Nsb3NlKHNrPSVwLHNrLT5udW09JXUpXG4iLAorCQlpbmV0X3NrKHNrKSwgaW5ldF9zayhzayktPmluZXRfbnVtKTsKKwlwcl9kZWJ1ZygiaXNrLT5yZWZjbnQgPSAlZFxuIiwgc2stPnNrX3JlZmNudC5jb3VudGVyKTsKKworCXNrX2NvbW1vbl9yZWxlYXNlKHNrKTsKK30KKworLyoKKyAqIFdlIG5lZWQgb3VyIG93biBiaW5kIGJlY2F1c2UgdGhlcmUgYXJlIG5vIHByaXZpbGVnZWQgaWQncyA9PSBsb2NhbCBwb3J0cy4KKyAqIE1vcmVvdmVyLCB3ZSBkb24ndCBhbGxvdyBiaW5kaW5nIHRvIG11bHRpLSBhbmQgYnJvYWRjYXN0IGFkZHJlc3Nlcy4KKyAqLworCitzdGF0aWMgaW50IHBpbmdfYmluZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsIGludCBhZGRyX2xlbikKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHIgPSAoc3RydWN0IHNvY2thZGRyX2luICopdWFkZHI7CisJc3RydWN0IGluZXRfc29jayAqaXNrID0gaW5ldF9zayhzayk7CisJdW5zaWduZWQgc2hvcnQgc251bTsKKwlpbnQgY2hrX2FkZHJfcmV0OworCWludCBlcnI7CisKKwlpZiAoYWRkcl9sZW4gPCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcl9kZWJ1ZygicGluZ192NF9iaW5kKHNrPSVwLHNhX2FkZHI9JTA4eCxzYV9wb3J0PSVkKVxuIiwKKwkJc2ssIGFkZHItPnNpbl9hZGRyLnNfYWRkciwgbnRvaHMoYWRkci0+c2luX3BvcnQpKTsKKworCWNoa19hZGRyX3JldCA9IGluZXRfYWRkcl90eXBlKHNvY2tfbmV0KHNrKSwgYWRkci0+c2luX2FkZHIuc19hZGRyKTsKKwlpZiAoYWRkci0+c2luX2FkZHIuc19hZGRyID09IElOQUREUl9BTlkpCisJCWNoa19hZGRyX3JldCA9IFJUTl9MT0NBTDsKKworCWlmICgoc3lzY3RsX2lwX25vbmxvY2FsX2JpbmQgPT0gMCAmJgorCSAgICBpc2stPmZyZWViaW5kID09IDAgJiYgaXNrLT50cmFuc3BhcmVudCA9PSAwICYmCisJICAgICBjaGtfYWRkcl9yZXQgIT0gUlROX0xPQ0FMKSB8fAorCSAgICBjaGtfYWRkcl9yZXQgPT0gUlROX01VTFRJQ0FTVCB8fAorCSAgICBjaGtfYWRkcl9yZXQgPT0gUlROX0JST0FEQ0FTVCkKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCisJbG9ja19zb2NrKHNrKTsKKworCWVyciA9IC1FSU5WQUw7CisJaWYgKGlzay0+aW5ldF9udW0gIT0gMCkKKwkJZ290byBvdXQ7CisKKwllcnIgPSAtRUFERFJJTlVTRTsKKwlpc2stPmluZXRfcmN2X3NhZGRyID0gaXNrLT5pbmV0X3NhZGRyID0gYWRkci0+c2luX2FkZHIuc19hZGRyOworCXNudW0gPSBudG9ocyhhZGRyLT5zaW5fcG9ydCk7CisJaWYgKHBpbmdfdjRfZ2V0X3BvcnQoc2ssIHNudW0pICE9IDApIHsKKwkJaXNrLT5pbmV0X3NhZGRyID0gaXNrLT5pbmV0X3Jjdl9zYWRkciA9IDA7CisJCWdvdG8gb3V0OworCX0KKworCXByX2RlYnVnKCJhZnRlciBiaW5kKCk6IG51bSA9ICVkLCBkYWRkciA9ICVsZCwgZGlmID0gJWRcbiIsCisJCShpbnQpaXNrLT5pbmV0X251bSwKKwkJKHVuc2lnbmVkIGxvbmcpIGlzay0+aW5ldF9yY3Zfc2FkZHIsCisJCShpbnQpc2stPnNrX2JvdW5kX2Rldl9pZik7CisKKwllcnIgPSAwOworCWlmIChpc2stPmluZXRfcmN2X3NhZGRyKQorCQlzay0+c2tfdXNlcmxvY2tzIHw9IFNPQ0tfQklOREFERFJfTE9DSzsKKwlpZiAoc251bSkKKwkJc2stPnNrX3VzZXJsb2NrcyB8PSBTT0NLX0JJTkRQT1JUX0xPQ0s7CisJaXNrLT5pbmV0X3Nwb3J0ID0gaHRvbnMoaXNrLT5pbmV0X251bSk7CisJaXNrLT5pbmV0X2RhZGRyID0gMDsKKwlpc2stPmluZXRfZHBvcnQgPSAwOworCXNrX2RzdF9yZXNldChzayk7CitvdXQ6CisJcmVsZWFzZV9zb2NrKHNrKTsKKwlwcl9kZWJ1ZygicGluZ192NF9iaW5kIC0+ICVkXG4iLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBJcyB0aGlzIGEgc3VwcG9ydGVkIHR5cGUgb2YgSUNNUCBtZXNzYWdlPworICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHBpbmdfc3VwcG9ydGVkKGludCB0eXBlLCBpbnQgY29kZSkKK3sKKwlpZiAodHlwZSA9PSBJQ01QX0VDSE8gJiYgY29kZSA9PSAwKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYnkgdGhlIElDTVAgbW9kdWxlIHdoZW4gaXQgZ2V0cyBzb21lCisgKiBzb3J0IG9mIGVycm9yIGNvbmRpdGlvbi4KKyAqLworCitzdGF0aWMgaW50IHBpbmdfcXVldWVfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOworCit2b2lkIHBpbmdfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBpbmZvKQoreworCXN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWNtcGhkciAqaWNtcGggPSAoc3RydWN0IGljbXBoZHIgKikoc2tiLT5kYXRhKyhpcGgtPmlobDw8MikpOworCXN0cnVjdCBpbmV0X3NvY2sgKmluZXRfc29jazsKKwlpbnQgdHlwZSA9IGljbXBoLT50eXBlOworCWludCBjb2RlID0gaWNtcGgtPmNvZGU7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItPmRldik7CisJc3RydWN0IHNvY2sgKnNrOworCWludCBoYXJkZXJyOworCWludCBlcnI7CisKKwkvKiBXZSBhc3N1bWUgdGhlIHBhY2tldCBoYXMgYWxyZWFkeSBiZWVuIGNoZWNrZWQgYnkgaWNtcF91bnJlYWNoICovCisKKwlpZiAoIXBpbmdfc3VwcG9ydGVkKGljbXBoLT50eXBlLCBpY21waC0+Y29kZSkpCisJCXJldHVybjsKKworCXByX2RlYnVnKCJwaW5nX2Vycih0eXBlPSUwNHgsY29kZT0lMDR4LGlkPSUwNHgsc2VxPSUwNHgpXG4iLCB0eXBlLAorCQljb2RlLCBudG9ocyhpY21waC0+dW4uZWNoby5pZCksIG50b2hzKGljbXBoLT51bi5lY2hvLnNlcXVlbmNlKSk7CisKKwlzayA9IHBpbmdfdjRfbG9va3VwKG5ldCwgaXBoLT5kYWRkciwgaXBoLT5zYWRkciwKKwkJCSAgICBudG9ocyhpY21waC0+dW4uZWNoby5pZCksIHNrYi0+ZGV2LT5pZmluZGV4KTsKKwlpZiAoc2sgPT0gTlVMTCkgeworCQlJQ01QX0lOQ19TVEFUU19CSChuZXQsIElDTVBfTUlCX0lORVJST1JTKTsKKwkJcHJfZGVidWcoIm5vIHNvY2tldCwgZHJvcHBpbmdcbiIpOworCQlyZXR1cm47CS8qIE5vIHNvY2tldCBmb3IgZXJyb3IgKi8KKwl9CisJcHJfZGVidWcoImVyciBvbiBzb2NrZXQgJXBcbiIsIHNrKTsKKworCWVyciA9IDA7CisJaGFyZGVyciA9IDA7CisJaW5ldF9zb2NrID0gaW5ldF9zayhzayk7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwlkZWZhdWx0OgorCWNhc2UgSUNNUF9USU1FX0VYQ0VFREVEOgorCQllcnIgPSBFSE9TVFVOUkVBQ0g7CisJCWJyZWFrOworCWNhc2UgSUNNUF9TT1VSQ0VfUVVFTkNIOgorCQkvKiBUaGlzIGlzIG5vdCBhIHJlYWwgZXJyb3IgYnV0IHBpbmcgd2FudHMgdG8gc2VlIGl0LgorCQkgKiBSZXBvcnQgaXQgd2l0aCBzb21lIGZha2UgZXJybm8uICovCisJCWVyciA9IEVSRU1PVEVJTzsKKwkJYnJlYWs7CisJY2FzZSBJQ01QX1BBUkFNRVRFUlBST0I6CisJCWVyciA9IEVQUk9UTzsKKwkJaGFyZGVyciA9IDE7CisJCWJyZWFrOworCWNhc2UgSUNNUF9ERVNUX1VOUkVBQ0g6CisJCWlmIChjb2RlID09IElDTVBfRlJBR19ORUVERUQpIHsgLyogUGF0aCBNVFUgZGlzY292ZXJ5ICovCisJCQlpZiAoaW5ldF9zb2NrLT5wbXR1ZGlzYyAhPSBJUF9QTVRVRElTQ19ET05UKSB7CisJCQkJZXJyID0gRU1TR1NJWkU7CisJCQkJaGFyZGVyciA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCQlnb3RvIG91dDsKKwkJfQorCQllcnIgPSBFSE9TVFVOUkVBQ0g7CisJCWlmIChjb2RlIDw9IE5SX0lDTVBfVU5SRUFDSCkgeworCQkJaGFyZGVyciA9IGljbXBfZXJyX2NvbnZlcnRbY29kZV0uZmF0YWw7CisJCQllcnIgPSBpY21wX2Vycl9jb252ZXJ0W2NvZGVdLmVycm5vOworCQl9CisJCWJyZWFrOworCWNhc2UgSUNNUF9SRURJUkVDVDoKKwkJLyogU2VlIElDTVBfU09VUkNFX1FVRU5DSCAqLworCQllcnIgPSBFUkVNT1RFSU87CisJCWJyZWFrOworCX0KKworCS8qCisJICogICAgICBSRkMxMTIyOiBPSy4gIFBhc3NlcyBJQ01QIGVycm9ycyBiYWNrIHRvIGFwcGxpY2F0aW9uLCBhcyBwZXIKKwkgKgk0LjEuMy4zLgorCSAqLworCWlmICghaW5ldF9zb2NrLT5yZWN2ZXJyKSB7CisJCWlmICghaGFyZGVyciB8fCBzay0+c2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKQorCQkJZ290byBvdXQ7CisJfSBlbHNlIHsKKwkJaXBfaWNtcF9lcnJvcihzaywgc2tiLCBlcnIsIDAgLyogbm8gcmVtb3RlIHBvcnQgKi8sCisJCQkgaW5mbywgKHU4ICopaWNtcGgpOworCX0KKwlzay0+c2tfZXJyID0gZXJyOworCXNrLT5za19lcnJvcl9yZXBvcnQoc2spOworb3V0OgorCXNvY2tfcHV0KHNrKTsKK30KKworLyoKKyAqCUNvcHkgYW5kIGNoZWNrc3VtIGFuIElDTVAgRWNobyBwYWNrZXQgZnJvbSB1c2VyIHNwYWNlIGludG8gYSBidWZmZXIuCisgKi8KKworc3RydWN0IHBpbmdmYWtlaGRyIHsKKwlzdHJ1Y3QgaWNtcGhkciBpY21waDsKKwlzdHJ1Y3QgaW92ZWMgKmlvdjsKKwl1MzIgd2NoZWNrOworfTsKKworc3RhdGljIGludCBwaW5nX2dldGZyYWcodm9pZCAqZnJvbSwgY2hhciAqIHRvLAorCQkJaW50IG9mZnNldCwgaW50IGZyYWdsZW4sIGludCBvZGQsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHBpbmdmYWtlaGRyICpwZmggPSAoc3RydWN0IHBpbmdmYWtlaGRyICopZnJvbTsKKworCWlmIChvZmZzZXQgPT0gMCkgeworCQlpZiAoZnJhZ2xlbiA8IHNpemVvZihzdHJ1Y3QgaWNtcGhkcikpCisJCQlCVUcoKTsKKwkJaWYgKGNzdW1fcGFydGlhbF9jb3B5X2Zyb21pb3ZlY2VuZCh0byArIHNpemVvZihzdHJ1Y3QgaWNtcGhkciksCisJCQkgICAgcGZoLT5pb3YsIDAsIGZyYWdsZW4gLSBzaXplb2Yoc3RydWN0IGljbXBoZHIpLAorCQkJICAgICZwZmgtPndjaGVjaykpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlyZXR1cm4gMDsKKwl9CisJaWYgKG9mZnNldCA8IHNpemVvZihzdHJ1Y3QgaWNtcGhkcikpCisJCUJVRygpOworCWlmIChjc3VtX3BhcnRpYWxfY29weV9mcm9taW92ZWNlbmQKKwkJCSh0bywgcGZoLT5pb3YsIG9mZnNldCAtIHNpemVvZihzdHJ1Y3QgaWNtcGhkciksCisJCQkgZnJhZ2xlbiwgJnBmaC0+d2NoZWNrKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGluZ19wdXNoX3BlbmRpbmdfZnJhbWVzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBpbmdmYWtlaGRyICpwZmgsCisJCQkJICAgIHN0cnVjdCBmbG93aTQgKmZsNCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2tiX3BlZWsoJnNrLT5za193cml0ZV9xdWV1ZSk7CisKKwlwZmgtPndjaGVjayA9IGNzdW1fcGFydGlhbCgoY2hhciAqKSZwZmgtPmljbXBoLAorCQlzaXplb2Yoc3RydWN0IGljbXBoZHIpLCBwZmgtPndjaGVjayk7CisJcGZoLT5pY21waC5jaGVja3N1bSA9IGNzdW1fZm9sZChwZmgtPndjaGVjayk7CisJbWVtY3B5KGljbXBfaGRyKHNrYiksICZwZmgtPmljbXBoLCBzaXplb2Yoc3RydWN0IGljbXBoZHIpKTsKKwlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJcmV0dXJuIGlwX3B1c2hfcGVuZGluZ19mcmFtZXMoc2ssIGZsNCk7Cit9CisKK3N0YXRpYyBpbnQgcGluZ19zZW5kbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csCisJCQlzaXplX3QgbGVuKQoreworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKKwlzdHJ1Y3QgZmxvd2k0IGZsNDsKKwlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CisJc3RydWN0IGlwY21fY29va2llIGlwYzsKKwlzdHJ1Y3QgaWNtcGhkciB1c2VyX2ljbXBoOworCXN0cnVjdCBwaW5nZmFrZWhkciBwZmg7CisJc3RydWN0IHJ0YWJsZSAqcnQgPSBOVUxMOworCXN0cnVjdCBpcF9vcHRpb25zX2RhdGEgb3B0X2NvcHk7CisJaW50IGZyZWUgPSAwOworCXUzMiBzYWRkciwgZGFkZHIsIGZhZGRyOworCXU4ICB0b3M7CisJaW50IGVycjsKKworCXByX2RlYnVnKCJwaW5nX3NlbmRtc2coc2s9JXAsc2stPm51bT0ldSlcbiIsIGluZXQsIGluZXQtPmluZXRfbnVtKTsKKworCisJaWYgKGxlbiA+IDB4RkZGRikKKwkJcmV0dXJuIC1FTVNHU0laRTsKKworCS8qCisJICoJQ2hlY2sgdGhlIGZsYWdzLgorCSAqLworCisJLyogTWlycm9yIEJTRCBlcnJvciBtZXNzYWdlIGNvbXBhdGliaWxpdHkgKi8KKwlpZiAobXNnLT5tc2dfZmxhZ3MgJiBNU0dfT09CKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwkvKgorCSAqCUZldGNoIHRoZSBJQ01QIGhlYWRlciBwcm92aWRlZCBieSB0aGUgdXNlcmxhbmQuCisJICoJaW92ZWMgaXMgbW9kaWZpZWQhCisJICovCisKKwlpZiAobWVtY3B5X2Zyb21pb3ZlYygodTggKikmdXNlcl9pY21waCwgbXNnLT5tc2dfaW92LAorCQkJICAgICBzaXplb2Yoc3RydWN0IGljbXBoZHIpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKCFwaW5nX3N1cHBvcnRlZCh1c2VyX2ljbXBoLnR5cGUsIHVzZXJfaWNtcGguY29kZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKglHZXQgYW5kIHZlcmlmeSB0aGUgYWRkcmVzcy4KKwkgKi8KKworCWlmIChtc2ctPm1zZ19uYW1lKSB7CisJCXN0cnVjdCBzb2NrYWRkcl9pbiAqdXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKiltc2ctPm1zZ19uYW1lOworCQlpZiAobXNnLT5tc2dfbmFtZWxlbiA8IHNpemVvZigqdXNpbikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKHVzaW4tPnNpbl9mYW1pbHkgIT0gQUZfSU5FVCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlkYWRkciA9IHVzaW4tPnNpbl9hZGRyLnNfYWRkcjsKKwkJLyogbm8gcmVtb3RlIHBvcnQgKi8KKwl9IGVsc2UgeworCQlpZiAoc2stPnNrX3N0YXRlICE9IFRDUF9FU1RBQkxJU0hFRCkKKwkJCXJldHVybiAtRURFU1RBRERSUkVROworCQlkYWRkciA9IGluZXQtPmluZXRfZGFkZHI7CisJCS8qIG5vIHJlbW90ZSBwb3J0ICovCisJfQorCisJaXBjLmFkZHIgPSBpbmV0LT5pbmV0X3NhZGRyOworCWlwYy5vcHQgPSBOVUxMOworCWlwYy5vaWYgPSBzay0+c2tfYm91bmRfZGV2X2lmOworCWlwYy50eF9mbGFncyA9IDA7CisJZXJyID0gc29ja190eF90aW1lc3RhbXAoc2ssICZpcGMudHhfZmxhZ3MpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAobXNnLT5tc2dfY29udHJvbGxlbikgeworCQllcnIgPSBpcF9jbXNnX3NlbmQoc29ja19uZXQoc2spLCBtc2csICZpcGMpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJaWYgKGlwYy5vcHQpCisJCQlmcmVlID0gMTsKKwl9CisJaWYgKCFpcGMub3B0KSB7CisJCXN0cnVjdCBpcF9vcHRpb25zX3JjdSAqaW5ldF9vcHQ7CisKKwkJcmN1X3JlYWRfbG9jaygpOworCQlpbmV0X29wdCA9IHJjdV9kZXJlZmVyZW5jZShpbmV0LT5pbmV0X29wdCk7CisJCWlmIChpbmV0X29wdCkgeworCQkJbWVtY3B5KCZvcHRfY29weSwgaW5ldF9vcHQsCisJCQkgICAgICAgc2l6ZW9mKCppbmV0X29wdCkgKyBpbmV0X29wdC0+b3B0Lm9wdGxlbik7CisJCQlpcGMub3B0ID0gJm9wdF9jb3B5Lm9wdDsKKwkJfQorCQlyY3VfcmVhZF91bmxvY2soKTsKKwl9CisKKwlzYWRkciA9IGlwYy5hZGRyOworCWlwYy5hZGRyID0gZmFkZHIgPSBkYWRkcjsKKworCWlmIChpcGMub3B0ICYmIGlwYy5vcHQtPm9wdC5zcnIpIHsKKwkJaWYgKCFkYWRkcikKKwkJCXJldHVybiAtRUlOVkFMOworCQlmYWRkciA9IGlwYy5vcHQtPm9wdC5mYWRkcjsKKwl9CisJdG9zID0gUlRfVE9TKGluZXQtPnRvcyk7CisJaWYgKHNvY2tfZmxhZyhzaywgU09DS19MT0NBTFJPVVRFKSB8fAorCSAgICAobXNnLT5tc2dfZmxhZ3MgJiBNU0dfRE9OVFJPVVRFKSB8fAorCSAgICAoaXBjLm9wdCAmJiBpcGMub3B0LT5vcHQuaXNfc3RyaWN0cm91dGUpKSB7CisJCXRvcyB8PSBSVE9fT05MSU5LOworCX0KKworCWlmIChpcHY0X2lzX211bHRpY2FzdChkYWRkcikpIHsKKwkJaWYgKCFpcGMub2lmKQorCQkJaXBjLm9pZiA9IGluZXQtPm1jX2luZGV4OworCQlpZiAoIXNhZGRyKQorCQkJc2FkZHIgPSBpbmV0LT5tY19hZGRyOworCX0KKworCWZsb3dpNF9pbml0X291dHB1dCgmZmw0LCBpcGMub2lmLCBzay0+c2tfbWFyaywgdG9zLAorCQkJICAgUlRfU0NPUEVfVU5JVkVSU0UsIHNrLT5za19wcm90b2NvbCwKKwkJCSAgIGluZXRfc2tfZmxvd2lfZmxhZ3Moc2spLCBmYWRkciwgc2FkZHIsIDAsIDApOworCisJc2VjdXJpdHlfc2tfY2xhc3NpZnlfZmxvdyhzaywgZmxvd2k0X3RvX2Zsb3dpKCZmbDQpKTsKKwlydCA9IGlwX3JvdXRlX291dHB1dF9mbG93KG5ldCwgJmZsNCwgc2spOworCWlmIChJU19FUlIocnQpKSB7CisJCWVyciA9IFBUUl9FUlIocnQpOworCQlydCA9IE5VTEw7CisJCWlmIChlcnIgPT0gLUVORVRVTlJFQUNIKQorCQkJSVBfSU5DX1NUQVRTX0JIKG5ldCwgSVBTVEFUU19NSUJfT1VUTk9ST1VURVMpOworCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSAtRUFDQ0VTOworCWlmICgocnQtPnJ0X2ZsYWdzICYgUlRDRl9CUk9BRENBU1QpICYmCisJICAgICFzb2NrX2ZsYWcoc2ssIFNPQ0tfQlJPQURDQVNUKSkKKwkJZ290byBvdXQ7CisKKwlpZiAobXNnLT5tc2dfZmxhZ3MgJiBNU0dfQ09ORklSTSkKKwkJZ290byBkb19jb25maXJtOworYmFja19mcm9tX2NvbmZpcm06CisKKwlpZiAoIWlwYy5hZGRyKQorCQlpcGMuYWRkciA9IGZsNC5kYWRkcjsKKworCWxvY2tfc29jayhzayk7CisKKwlwZmguaWNtcGgudHlwZSA9IHVzZXJfaWNtcGgudHlwZTsgLyogYWxyZWFkeSBjaGVja2VkICovCisJcGZoLmljbXBoLmNvZGUgPSB1c2VyX2ljbXBoLmNvZGU7IC8qIGRpdHRvICovCisJcGZoLmljbXBoLmNoZWNrc3VtID0gMDsKKwlwZmguaWNtcGgudW4uZWNoby5pZCA9IGluZXQtPmluZXRfc3BvcnQ7CisJcGZoLmljbXBoLnVuLmVjaG8uc2VxdWVuY2UgPSB1c2VyX2ljbXBoLnVuLmVjaG8uc2VxdWVuY2U7CisJcGZoLmlvdiA9IG1zZy0+bXNnX2lvdjsKKwlwZmgud2NoZWNrID0gMDsKKworCWVyciA9IGlwX2FwcGVuZF9kYXRhKHNrLCAmZmw0LCBwaW5nX2dldGZyYWcsICZwZmgsIGxlbiwKKwkJCTAsICZpcGMsICZydCwgbXNnLT5tc2dfZmxhZ3MpOworCWlmIChlcnIpCisJCWlwX2ZsdXNoX3BlbmRpbmdfZnJhbWVzKHNrKTsKKwllbHNlCisJCWVyciA9IHBpbmdfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzaywgJnBmaCwgJmZsNCk7CisJcmVsZWFzZV9zb2NrKHNrKTsKKworb3V0OgorCWlwX3J0X3B1dChydCk7CisJaWYgKGZyZWUpCisJCWtmcmVlKGlwYy5vcHQpOworCWlmICghZXJyKSB7CisJCWljbXBfb3V0X2NvdW50KHNvY2tfbmV0KHNrKSwgdXNlcl9pY21waC50eXBlKTsKKwkJcmV0dXJuIGxlbjsKKwl9CisJcmV0dXJuIGVycjsKKworZG9fY29uZmlybToKKwlkc3RfY29uZmlybSgmcnQtPmRzdCk7CisJaWYgKCEobXNnLT5tc2dfZmxhZ3MgJiBNU0dfUFJPQkUpIHx8IGxlbikKKwkJZ290byBiYWNrX2Zyb21fY29uZmlybTsKKwllcnIgPSAwOworCWdvdG8gb3V0OworfQorCitzdGF0aWMgaW50IHBpbmdfcmVjdm1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLAorCQkJc2l6ZV90IGxlbiwgaW50IG5vYmxvY2ssIGludCBmbGFncywgaW50ICphZGRyX2xlbikKK3sKKwlzdHJ1Y3QgaW5ldF9zb2NrICppc2sgPSBpbmV0X3NrKHNrKTsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKiltc2ctPm1zZ19uYW1lOworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IGNvcGllZCwgZXJyOworCisJcHJfZGVidWcoInBpbmdfcmVjdm1zZyhzaz0lcCxzay0+bnVtPSV1KVxuIiwgaXNrLCBpc2stPmluZXRfbnVtKTsKKworCWlmIChmbGFncyAmIE1TR19PT0IpCisJCWdvdG8gb3V0OworCisJaWYgKGFkZHJfbGVuKQorCQkqYWRkcl9sZW4gPSBzaXplb2YoKnNpbik7CisKKwlpZiAoZmxhZ3MgJiBNU0dfRVJSUVVFVUUpCisJCXJldHVybiBpcF9yZWN2X2Vycm9yKHNrLCBtc2csIGxlbik7CisKKwlza2IgPSBza2JfcmVjdl9kYXRhZ3JhbShzaywgZmxhZ3MsIG5vYmxvY2ssICZlcnIpOworCWlmICghc2tiKQorCQlnb3RvIG91dDsKKworCWNvcGllZCA9IHNrYi0+bGVuOworCWlmIChjb3BpZWQgPiBsZW4pIHsKKwkJbXNnLT5tc2dfZmxhZ3MgfD0gTVNHX1RSVU5DOworCQljb3BpZWQgPSBsZW47CisJfQorCisJLyogRG9uJ3QgYm90aGVyIGNoZWNraW5nIHRoZSBjaGVja3N1bSAqLworCWVyciA9IHNrYl9jb3B5X2RhdGFncmFtX2lvdmVjKHNrYiwgMCwgbXNnLT5tc2dfaW92LCBjb3BpZWQpOworCWlmIChlcnIpCisJCWdvdG8gZG9uZTsKKworCXNvY2tfcmVjdl90aW1lc3RhbXAobXNnLCBzaywgc2tiKTsKKworCS8qIENvcHkgdGhlIGFkZHJlc3MuICovCisJaWYgKHNpbikgeworCQlzaW4tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCQlzaW4tPnNpbl9wb3J0ID0gMCAvKiBza2ItPmgudWgtPnNvdXJjZSAqLzsKKwkJc2luLT5zaW5fYWRkci5zX2FkZHIgPSBpcF9oZHIoc2tiKS0+c2FkZHI7CisJCW1lbXNldChzaW4tPnNpbl96ZXJvLCAwLCBzaXplb2Yoc2luLT5zaW5femVybykpOworCX0KKwlpZiAoaXNrLT5jbXNnX2ZsYWdzKQorCQlpcF9jbXNnX3JlY3YobXNnLCBza2IpOworCWVyciA9IGNvcGllZDsKKworZG9uZToKKwlza2JfZnJlZV9kYXRhZ3JhbShzaywgc2tiKTsKK291dDoKKwlwcl9kZWJ1ZygicGluZ19yZWN2bXNnIC0+ICVkXG4iLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcGluZ19xdWV1ZV9yY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlwcl9kZWJ1ZygicGluZ19xdWV1ZV9yY3Zfc2tiKHNrPSVwLHNrLT5udW09JWQsc2tiPSVwKVxuIiwKKwkJaW5ldF9zayhzayksIGluZXRfc2soc2spLT5pbmV0X251bSwgc2tiKTsKKwlpZiAoc29ja19xdWV1ZV9yY3Zfc2tiKHNrLCBza2IpIDwgMCkgeworCQlJQ01QX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIElDTVBfTUlCX0lORVJST1JTKTsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXByX2RlYnVnKCJwaW5nX3F1ZXVlX3Jjdl9za2IgLT4gZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworCisvKgorICoJQWxsIHdlIG5lZWQgdG8gZG8gaXMgZ2V0IHRoZSBzb2NrZXQuCisgKi8KKwordm9pZCBwaW5nX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBzb2NrICpzazsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0+ZGV2KTsKKwlzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpOworCXN0cnVjdCBpY21waGRyICppY21waCA9IGljbXBfaGRyKHNrYik7CisJdTMyIHNhZGRyID0gaXBoLT5zYWRkcjsKKwl1MzIgZGFkZHIgPSBpcGgtPmRhZGRyOworCisJLyogV2UgYXNzdW1lIHRoZSBwYWNrZXQgaGFzIGFscmVhZHkgYmVlbiBjaGVja2VkIGJ5IGljbXBfcmN2ICovCisKKwlwcl9kZWJ1ZygicGluZ19yY3Yoc2tiPSVwLGlkPSUwNHgsc2VxPSUwNHgpXG4iLAorCQlza2IsIG50b2hzKGljbXBoLT51bi5lY2hvLmlkKSwgbnRvaHMoaWNtcGgtPnVuLmVjaG8uc2VxdWVuY2UpKTsKKworCS8qIFB1c2ggSUNNUCBoZWFkZXIgYmFjayAqLworCXNrYl9wdXNoKHNrYiwgc2tiLT5kYXRhIC0gKHU4ICopaWNtcGgpOworCisJc2sgPSBwaW5nX3Y0X2xvb2t1cChuZXQsIHNhZGRyLCBkYWRkciwgbnRvaHMoaWNtcGgtPnVuLmVjaG8uaWQpLAorCQkJICAgIHNrYi0+ZGV2LT5pZmluZGV4KTsKKwlpZiAoc2sgIT0gTlVMTCkgeworCQlwcl9kZWJ1ZygicmN2IG9uIHNvY2tldCAlcFxuIiwgc2spOworCQlwaW5nX3F1ZXVlX3Jjdl9za2Ioc2ssIHNrYl9nZXQoc2tiKSk7CisJCXNvY2tfcHV0KHNrKTsKKwkJcmV0dXJuOworCX0KKwlwcl9kZWJ1Zygibm8gc29ja2V0LCBkcm9wcGluZ1xuIik7CisKKwkvKiBXZSdyZSBjYWxsZWQgZnJvbSBpY21wX3JjdigpLiBrZnJlZV9za2IoKSBpcyBkb25lIHRoZXJlLiAqLworfQorCitzdHJ1Y3QgcHJvdG8gcGluZ19wcm90ID0geworCS5uYW1lID0JCSJQSU5HIiwKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkuaW5pdCA9CQlwaW5nX2luaXRfc29jaywKKwkuY2xvc2UgPQlwaW5nX2Nsb3NlLAorCS5jb25uZWN0ID0JaXA0X2RhdGFncmFtX2Nvbm5lY3QsCisJLmRpc2Nvbm5lY3QgPQl1ZHBfZGlzY29ubmVjdCwKKwkuc2V0c29ja29wdCA9CWlwX3NldHNvY2tvcHQsCisJLmdldHNvY2tvcHQgPQlpcF9nZXRzb2Nrb3B0LAorCS5zZW5kbXNnID0JcGluZ19zZW5kbXNnLAorCS5yZWN2bXNnID0JcGluZ19yZWN2bXNnLAorCS5iaW5kID0JCXBpbmdfYmluZCwKKwkuYmFja2xvZ19yY3YgPQlwaW5nX3F1ZXVlX3Jjdl9za2IsCisJLmhhc2ggPQkJcGluZ192NF9oYXNoLAorCS51bmhhc2ggPQlwaW5nX3Y0X3VuaGFzaCwKKwkuZ2V0X3BvcnQgPQlwaW5nX3Y0X2dldF9wb3J0LAorCS5vYmpfc2l6ZSA9CXNpemVvZihzdHJ1Y3QgaW5ldF9zb2NrKSwKK307CitFWFBPUlRfU1lNQk9MKHBpbmdfcHJvdCk7CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCitzdGF0aWMgc3RydWN0IHNvY2sgKnBpbmdfZ2V0X2ZpcnN0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBpbnQgc3RhcnQpCit7CisJc3RydWN0IHNvY2sgKnNrOworCXN0cnVjdCBwaW5nX2l0ZXJfc3RhdGUgKnN0YXRlID0gc2VxLT5wcml2YXRlOworCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOworCisJZm9yIChzdGF0ZS0+YnVja2V0ID0gc3RhcnQ7IHN0YXRlLT5idWNrZXQgPCBQSU5HX0hUQUJMRV9TSVpFOworCSAgICAgKytzdGF0ZS0+YnVja2V0KSB7CisJCXN0cnVjdCBobGlzdF9udWxsc19ub2RlICpub2RlOworCQlzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaHNsb3Q7CisKKwkJaHNsb3QgPSAmcGluZ190YWJsZS5oYXNoW3N0YXRlLT5idWNrZXRdOworCisJCWlmIChobGlzdF9udWxsc19lbXB0eShoc2xvdCkpCisJCQljb250aW51ZTsKKworCQlza19udWxsc19mb3JfZWFjaChzaywgbm9kZSwgaHNsb3QpIHsKKwkJCWlmIChuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpKQorCQkJCWdvdG8gZm91bmQ7CisJCX0KKwl9CisJc2sgPSBOVUxMOworZm91bmQ6CisJcmV0dXJuIHNrOworfQorCitzdGF0aWMgc3RydWN0IHNvY2sgKnBpbmdfZ2V0X25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgcGluZ19pdGVyX3N0YXRlICpzdGF0ZSA9IHNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTsKKworCWRvIHsKKwkJc2sgPSBza19udWxsc19uZXh0KHNrKTsKKwl9IHdoaWxlIChzayAmJiAoIW5ldF9lcShzb2NrX25ldChzayksIG5ldCkpKTsKKworCWlmICghc2spCisJCXJldHVybiBwaW5nX2dldF9maXJzdChzZXEsIHN0YXRlLT5idWNrZXQgKyAxKTsKKwlyZXR1cm4gc2s7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29jayAqcGluZ19nZXRfaWR4KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgcG9zKQoreworCXN0cnVjdCBzb2NrICpzayA9IHBpbmdfZ2V0X2ZpcnN0KHNlcSwgMCk7CisKKwlpZiAoc2spCisJCXdoaWxlIChwb3MgJiYgKHNrID0gcGluZ19nZXRfbmV4dChzZXEsIHNrKSkgIT0gTlVMTCkKKwkJCS0tcG9zOworCXJldHVybiBwb3MgPyBOVUxMIDogc2s7Cit9CisKK3N0YXRpYyB2b2lkICpwaW5nX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IHBpbmdfaXRlcl9zdGF0ZSAqc3RhdGUgPSBzZXEtPnByaXZhdGU7CisJc3RhdGUtPmJ1Y2tldCA9IDA7CisKKwlyZWFkX2xvY2tfYmgoJnBpbmdfdGFibGUubG9jayk7CisKKwlyZXR1cm4gKnBvcyA/IHBpbmdfZ2V0X2lkeChzZXEsICpwb3MtMSkgOiBTRVFfU1RBUlRfVE9LRU47Cit9CisKK3N0YXRpYyB2b2lkICpwaW5nX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1Y3Qgc29jayAqc2s7CisKKwlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCisJCXNrID0gcGluZ19nZXRfaWR4KHNlcSwgMCk7CisJZWxzZQorCQlzayA9IHBpbmdfZ2V0X25leHQoc2VxLCB2KTsKKworCSsrKnBvczsKKwlyZXR1cm4gc2s7Cit9CisKK3N0YXRpYyB2b2lkIHBpbmdfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCit7CisJcmVhZF91bmxvY2tfYmgoJnBpbmdfdGFibGUubG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHBpbmdfZm9ybWF0X3NvY2soc3RydWN0IHNvY2sgKnNwLCBzdHJ1Y3Qgc2VxX2ZpbGUgKmYsCisJCWludCBidWNrZXQsIGludCAqbGVuKQoreworCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNwKTsKKwlfX2JlMzIgZGVzdCA9IGluZXQtPmluZXRfZGFkZHI7CisJX19iZTMyIHNyYyA9IGluZXQtPmluZXRfcmN2X3NhZGRyOworCV9fdTE2IGRlc3RwID0gbnRvaHMoaW5ldC0+aW5ldF9kcG9ydCk7CisJX191MTYgc3JjcCA9IG50b2hzKGluZXQtPmluZXRfc3BvcnQpOworCisJc2VxX3ByaW50ZihmLCAiJTVkOiAlMDhYOiUwNFggJTA4WDolMDRYIgorCQkiICUwMlggJTA4WDolMDhYICUwMlg6JTA4bFggJTA4WCAlNWQgJThkICVsdSAlZCAlcEsgJWQlbiIsCisJCWJ1Y2tldCwgc3JjLCBzcmNwLCBkZXN0LCBkZXN0cCwgc3AtPnNrX3N0YXRlLAorCQlza193bWVtX2FsbG9jX2dldChzcCksCisJCXNrX3JtZW1fYWxsb2NfZ2V0KHNwKSwKKwkJMCwgMEwsIDAsIHNvY2tfaV91aWQoc3ApLCAwLCBzb2NrX2lfaW5vKHNwKSwKKwkJYXRvbWljX3JlYWQoJnNwLT5za19yZWZjbnQpLCBzcCwKKwkJYXRvbWljX3JlYWQoJnNwLT5za19kcm9wcyksIGxlbik7Cit9CisKK3N0YXRpYyBpbnQgcGluZ19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKKwlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCisJCXNlcV9wcmludGYoc2VxLCAiJS0xMjdzXG4iLAorCQkJICAgIiAgc2wgIGxvY2FsX2FkZHJlc3MgcmVtX2FkZHJlc3MgICBzdCB0eF9xdWV1ZSAiCisJCQkgICAicnhfcXVldWUgdHIgdG0tPndoZW4gcmV0cm5zbXQgICB1aWQgIHRpbWVvdXQgIgorCQkJICAgImlub2RlIHJlZiBwb2ludGVyIGRyb3BzIik7CisJZWxzZSB7CisJCXN0cnVjdCBwaW5nX2l0ZXJfc3RhdGUgKnN0YXRlID0gc2VxLT5wcml2YXRlOworCQlpbnQgbGVuOworCisJCXBpbmdfZm9ybWF0X3NvY2sodiwgc2VxLCBzdGF0ZS0+YnVja2V0LCAmbGVuKTsKKwkJc2VxX3ByaW50ZihzZXEsICIlKnNcbiIsIDEyNyAtIGxlbiwgIiIpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwaW5nX3NlcV9vcHMgPSB7CisJLnNob3cJCT0gcGluZ19zZXFfc2hvdywKKwkuc3RhcnQJCT0gcGluZ19zZXFfc3RhcnQsCisJLm5leHQJCT0gcGluZ19zZXFfbmV4dCwKKwkuc3RvcAkJPSBwaW5nX3NlcV9zdG9wLAorfTsKKworc3RhdGljIGludCBwaW5nX3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzZXFfb3Blbl9uZXQoaW5vZGUsIGZpbGUsICZwaW5nX3NlcV9vcHMsCisJCQkgICBzaXplb2Yoc3RydWN0IHBpbmdfaXRlcl9zdGF0ZSkpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwaW5nX3NlcV9mb3BzID0geworCS5vcGVuCQk9IHBpbmdfc2VxX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZV9uZXQsCit9OworCitzdGF0aWMgaW50IHBpbmdfcHJvY19yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwOworCWludCByYyA9IDA7CisKKwlwID0gcHJvY19uZXRfZm9wc19jcmVhdGUobmV0LCAiaWNtcCIsIFNfSVJVR08sICZwaW5nX3NlcV9mb3BzKTsKKwlpZiAoIXApCisJCXJjID0gLUVOT01FTTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIHBpbmdfcHJvY191bnJlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlwcm9jX25ldF9yZW1vdmUobmV0LCAiaWNtcCIpOworfQorCisKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCBwaW5nX3Byb2NfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQoreworCXJldHVybiBwaW5nX3Byb2NfcmVnaXN0ZXIobmV0KTsKK30KKworc3RhdGljIHZvaWQgX19uZXRfZXhpdCBwaW5nX3Byb2NfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQoreworCXBpbmdfcHJvY191bnJlZ2lzdGVyKG5ldCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgcGluZ19uZXRfb3BzID0geworCS5pbml0ID0gcGluZ19wcm9jX2luaXRfbmV0LAorCS5leGl0ID0gcGluZ19wcm9jX2V4aXRfbmV0LAorfTsKKworaW50IF9faW5pdCBwaW5nX3Byb2NfaW5pdCh2b2lkKQoreworCXJldHVybiByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZwaW5nX25ldF9vcHMpOworfQorCit2b2lkIHBpbmdfcHJvY19leGl0KHZvaWQpCit7CisJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZwaW5nX25ldF9vcHMpOworfQorCisjZW5kaWYKKwordm9pZCBfX2luaXQgcGluZ19pbml0KHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUElOR19IVEFCTEVfU0laRTsgaSsrKQorCQlJTklUX0hMSVNUX05VTExTX0hFQUQoJnBpbmdfdGFibGUuaGFzaFtpXSwgaSk7CisJcndsb2NrX2luaXQoJnBpbmdfdGFibGUubG9jayk7Cit9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yYXcuYyBiL25ldC9pcHY0L3Jhdy5jCmluZGV4IGJjZWFlYzQuLjExZTE3ODA0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yYXcuYworKysgYi9uZXQvaXB2NC9yYXcuYwpAQCAtMTU0LDcgKzE1NCw3IEBACiAgKiBSRkMgMTEyMjogU0hPVUxEIHBhc3MgVE9TIHZhbHVlIHVwIHRvIHRoZSB0cmFuc3BvcnQgbGF5ZXIuCiAgKiAtPiBJdCBkb2VzLiBBbmQgbm90IG9ubHkgVE9TLCBidXQgYWxsIElQIGhlYWRlci4KICAqLwotc3RhdGljIGludCByYXdfdjRfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwaGRyICppcGgsIGludCBoYXNoKQorc3RhdGljIGludCByYXdfdjRfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGlwaGRyICppcGgsIGludCBoYXNoKQogewogCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKQEAgLTI0Nyw3ICsyNDcsNyBAQAogCX0KIAogCWlmIChpbmV0LT5yZWN2ZXJyKSB7Ci0JCXN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYi0+ZGF0YTsKKwkJY29uc3Qgc3RydWN0IGlwaGRyICppcGggPSAoY29uc3Qgc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOwogCQl1OCAqcGF5bG9hZCA9IHNrYi0+ZGF0YSArIChpcGgtPmlobCA8PCAyKTsKIAogCQlpZiAoaW5ldC0+aGRyaW5jbCkKQEAgLTI2NSw3ICsyNjUsNyBAQAogewogCWludCBoYXNoOwogCXN0cnVjdCBzb2NrICpyYXdfc2s7Ci0Jc3RydWN0IGlwaGRyICppcGg7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGg7CiAJc3RydWN0IG5ldCAqbmV0OwogCiAJaGFzaCA9IHByb3RvY29sICYgKFJBV19IVEFCTEVfU0laRSAtIDEpOwpAQCAtMjczLDcgKzI3Myw3IEBACiAJcmVhZF9sb2NrKCZyYXdfdjRfaGFzaGluZm8ubG9jayk7CiAJcmF3X3NrID0gc2tfaGVhZCgmcmF3X3Y0X2hhc2hpbmZvLmh0W2hhc2hdKTsKIAlpZiAocmF3X3NrICE9IE5VTEwpIHsKLQkJaXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYi0+ZGF0YTsKKwkJaXBoID0gKGNvbnN0IHN0cnVjdCBpcGhkciAqKXNrYi0+ZGF0YTsKIAkJbmV0ID0gZGV2X25ldChza2ItPmRldik7CiAKIAkJd2hpbGUgKChyYXdfc2sgPSBfX3Jhd192NF9sb29rdXAobmV0LCByYXdfc2ssIHByb3RvY29sLApAQCAtMjgxLDcgKzI4MSw3IEBACiAJCQkJCQlza2ItPmRldi0+aWZpbmRleCkpICE9IE5VTEwpIHsKIAkJCXJhd19lcnIocmF3X3NrLCBza2IsIGluZm8pOwogCQkJcmF3X3NrID0gc2tfbmV4dChyYXdfc2spOwotCQkJaXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYi0+ZGF0YTsKKwkJCWlwaCA9IChjb25zdCBzdHJ1Y3QgaXBoZHIgKilza2ItPmRhdGE7CiAJCX0KIAl9CiAJcmVhZF91bmxvY2soJnJhd192NF9oYXNoaW5mby5sb2NrKTsKQEAgLTMxNCw5ICszMTQsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCByYXdfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCB2b2lkICpmcm9tLCBzaXplX3QgbGVuZ3RoLAotCQkJc3RydWN0IHJ0YWJsZSAqKnJ0cCwKLQkJCXVuc2lnbmVkIGludCBmbGFncykKK3N0YXRpYyBpbnQgcmF3X3NlbmRfaGRyaW5jKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGZsb3dpNCAqZmw0LAorCQkJICAgdm9pZCAqZnJvbSwgc2l6ZV90IGxlbmd0aCwKKwkJCSAgIHN0cnVjdCBydGFibGUgKipydHAsCisJCQkgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKQEAgLTMyNyw3ICszMjgsNyBAQAogCXN0cnVjdCBydGFibGUgKnJ0ID0gKnJ0cDsKIAogCWlmIChsZW5ndGggPiBydC0+ZHN0LmRldi0+bXR1KSB7Ci0JCWlwX2xvY2FsX2Vycm9yKHNrLCBFTVNHU0laRSwgcnQtPnJ0X2RzdCwgaW5ldC0+aW5ldF9kcG9ydCwKKwkJaXBfbG9jYWxfZXJyb3Ioc2ssIEVNU0dTSVpFLCBmbDQtPmRhZGRyLCBpbmV0LT5pbmV0X2Rwb3J0LAogCQkJICAgICAgIHJ0LT5kc3QuZGV2LT5tdHUpOwogCQlyZXR1cm4gLUVNU0dTSVpFOwogCX0KQEAgLTM3Miw3ICszNzMsNyBAQAogCiAJaWYgKGlwaGxlbiA+PSBzaXplb2YoKmlwaCkpIHsKIAkJaWYgKCFpcGgtPnNhZGRyKQotCQkJaXBoLT5zYWRkciA9IHJ0LT5ydF9zcmM7CisJCQlpcGgtPnNhZGRyID0gZmw0LT5zYWRkcjsKIAkJaXBoLT5jaGVjayAgID0gMDsKIAkJaXBoLT50b3RfbGVuID0gaHRvbnMobGVuZ3RoKTsKIAkJaWYgKCFpcGgtPmlkKQpAQCAtNDU1LDExICs0NTYsMTMgQEAKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAJc3RydWN0IGlwY21fY29va2llIGlwYzsKIAlzdHJ1Y3QgcnRhYmxlICpydCA9IE5VTEw7CisJc3RydWN0IGZsb3dpNCBmbDQ7CiAJaW50IGZyZWUgPSAwOwogCV9fYmUzMiBkYWRkcjsKIAlfX2JlMzIgc2FkZHI7CiAJdTggIHRvczsKIAlpbnQgZXJyOworCXN0cnVjdCBpcF9vcHRpb25zX2RhdGEgb3B0X2NvcHk7CiAKIAllcnIgPSAtRU1TR1NJWkU7CiAJaWYgKGxlbiA+IDB4RkZGRikKQEAgLTUyMCw4ICs1MjMsMTggQEAKIAlzYWRkciA9IGlwYy5hZGRyOwogCWlwYy5hZGRyID0gZGFkZHI7CiAKLQlpZiAoIWlwYy5vcHQpCi0JCWlwYy5vcHQgPSBpbmV0LT5vcHQ7CisJaWYgKCFpcGMub3B0KSB7CisJCXN0cnVjdCBpcF9vcHRpb25zX3JjdSAqaW5ldF9vcHQ7CisKKwkJcmN1X3JlYWRfbG9jaygpOworCQlpbmV0X29wdCA9IHJjdV9kZXJlZmVyZW5jZShpbmV0LT5pbmV0X29wdCk7CisJCWlmIChpbmV0X29wdCkgeworCQkJbWVtY3B5KCZvcHRfY29weSwgaW5ldF9vcHQsCisJCQkgICAgICAgc2l6ZW9mKCppbmV0X29wdCkgKyBpbmV0X29wdC0+b3B0Lm9wdGxlbik7CisJCQlpcGMub3B0ID0gJm9wdF9jb3B5Lm9wdDsKKwkJfQorCQlyY3VfcmVhZF91bmxvY2soKTsKKwl9CiAKIAlpZiAoaXBjLm9wdCkgewogCQllcnIgPSAtRUlOVkFMOwpAQCAtNTMwLDEwICs1NDMsMTAgQEAKIAkJICovCiAJCWlmIChpbmV0LT5oZHJpbmNsKQogCQkJZ290byBkb25lOwotCQlpZiAoaXBjLm9wdC0+c3JyKSB7CisJCWlmIChpcGMub3B0LT5vcHQuc3JyKSB7CiAJCQlpZiAoIWRhZGRyKQogCQkJCWdvdG8gZG9uZTsKLQkJCWRhZGRyID0gaXBjLm9wdC0+ZmFkZHI7CisJCQlkYWRkciA9IGlwYy5vcHQtPm9wdC5mYWRkcjsKIAkJfQogCX0KIAl0b3MgPSBSVF9DT05OX0ZMQUdTKHNrKTsKQEAgLTU0NywzMSArNTYwLDIzIEBACiAJCQlzYWRkciA9IGluZXQtPm1jX2FkZHI7CiAJfQogCi0JewotCQlzdHJ1Y3QgZmxvd2k0IGZsNCA9IHsKLQkJCS5mbG93aTRfb2lmID0gaXBjLm9pZiwKLQkJCS5mbG93aTRfbWFyayA9IHNrLT5za19tYXJrLAotCQkJLmRhZGRyID0gZGFkZHIsCi0JCQkuc2FkZHIgPSBzYWRkciwKLQkJCS5mbG93aTRfdG9zID0gdG9zLAotCQkJLmZsb3dpNF9wcm90byA9IChpbmV0LT5oZHJpbmNsID8KLQkJCQkJIElQUFJPVE9fUkFXIDoKLQkJCQkJIHNrLT5za19wcm90b2NvbCksCi0JCQkuZmxvd2k0X2ZsYWdzID0gRkxPV0lfRkxBR19DQU5fU0xFRVAsCi0JCX07Ci0JCWlmICghaW5ldC0+aGRyaW5jbCkgewotCQkJZXJyID0gcmF3X3Byb2JlX3Byb3RvX29wdCgmZmw0LCBtc2cpOwotCQkJaWYgKGVycikKLQkJCQlnb3RvIGRvbmU7Ci0JCX0KKwlmbG93aTRfaW5pdF9vdXRwdXQoJmZsNCwgaXBjLm9pZiwgc2stPnNrX21hcmssIHRvcywKKwkJCSAgIFJUX1NDT1BFX1VOSVZFUlNFLAorCQkJICAgaW5ldC0+aGRyaW5jbCA/IElQUFJPVE9fUkFXIDogc2stPnNrX3Byb3RvY29sLAorCQkJICAgRkxPV0lfRkxBR19DQU5fU0xFRVAsIGRhZGRyLCBzYWRkciwgMCwgMCk7CiAKLQkJc2VjdXJpdHlfc2tfY2xhc3NpZnlfZmxvdyhzaywgZmxvd2k0X3RvX2Zsb3dpKCZmbDQpKTsKLQkJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhzb2NrX25ldChzayksICZmbDQsIHNrKTsKLQkJaWYgKElTX0VSUihydCkpIHsKLQkJCWVyciA9IFBUUl9FUlIocnQpOwotCQkJcnQgPSBOVUxMOworCWlmICghaW5ldC0+aGRyaW5jbCkgeworCQllcnIgPSByYXdfcHJvYmVfcHJvdG9fb3B0KCZmbDQsIG1zZyk7CisJCWlmIChlcnIpCiAJCQlnb3RvIGRvbmU7Ci0JCX0KKwl9CisKKwlzZWN1cml0eV9za19jbGFzc2lmeV9mbG93KHNrLCBmbG93aTRfdG9fZmxvd2koJmZsNCkpOworCXJ0ID0gaXBfcm91dGVfb3V0cHV0X2Zsb3coc29ja19uZXQoc2spLCAmZmw0LCBzayk7CisJaWYgKElTX0VSUihydCkpIHsKKwkJZXJyID0gUFRSX0VSUihydCk7CisJCXJ0ID0gTlVMTDsKKwkJZ290byBkb25lOwogCX0KIAogCWVyciA9IC1FQUNDRVM7CkBAIC01ODMsMTkgKzU4OCwyMCBAQAogYmFja19mcm9tX2NvbmZpcm06CiAKIAlpZiAoaW5ldC0+aGRyaW5jbCkKLQkJZXJyID0gcmF3X3NlbmRfaGRyaW5jKHNrLCBtc2ctPm1zZ19pb3YsIGxlbiwKLQkJCQkJJnJ0LCBtc2ctPm1zZ19mbGFncyk7CisJCWVyciA9IHJhd19zZW5kX2hkcmluYyhzaywgJmZsNCwgbXNnLT5tc2dfaW92LCBsZW4sCisJCQkJICAgICAgJnJ0LCBtc2ctPm1zZ19mbGFncyk7CiAKIAkgZWxzZSB7CiAJCWlmICghaXBjLmFkZHIpCi0JCQlpcGMuYWRkciA9IHJ0LT5ydF9kc3Q7CisJCQlpcGMuYWRkciA9IGZsNC5kYWRkcjsKIAkJbG9ja19zb2NrKHNrKTsKLQkJZXJyID0gaXBfYXBwZW5kX2RhdGEoc2ssIGlwX2dlbmVyaWNfZ2V0ZnJhZywgbXNnLT5tc2dfaW92LCBsZW4sIDAsCi0JCQkJCSZpcGMsICZydCwgbXNnLT5tc2dfZmxhZ3MpOworCQllcnIgPSBpcF9hcHBlbmRfZGF0YShzaywgJmZsNCwgaXBfZ2VuZXJpY19nZXRmcmFnLAorCQkJCSAgICAgbXNnLT5tc2dfaW92LCBsZW4sIDAsCisJCQkJICAgICAmaXBjLCAmcnQsIG1zZy0+bXNnX2ZsYWdzKTsKIAkJaWYgKGVycikKIAkJCWlwX2ZsdXNoX3BlbmRpbmdfZnJhbWVzKHNrKTsKIAkJZWxzZSBpZiAoIShtc2ctPm1zZ19mbGFncyAmIE1TR19NT1JFKSkgewotCQkJZXJyID0gaXBfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzayk7CisJCQllcnIgPSBpcF9wdXNoX3BlbmRpbmdfZnJhbWVzKHNrLCAmZmw0KTsKIAkJCWlmIChlcnIgPT0gLUVOT0JVRlMgJiYgIWluZXQtPnJlY3ZlcnIpCiAJCQkJZXJyID0gMDsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmMKaW5kZXggOTllNmU0Yi4uNTJiMGI5NSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYworKysgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC0xNTYsNyArMTU2LDcgQEAKIAl1MzIgKnAgPSBOVUxMOwogCiAJaWYgKCFydC0+cGVlcikKLQkJcnRfYmluZF9wZWVyKHJ0LCAxKTsKKwkJcnRfYmluZF9wZWVyKHJ0LCBydC0+cnRfZHN0LCAxKTsKIAogCXBlZXIgPSBydC0+cGVlcjsKIAlpZiAocGVlcikgewpAQCAtNDI0LDcgKzQyNCw3IEBACiAJCQlkc3RfbWV0cmljKCZyLT5kc3QsIFJUQVhfV0lORE9XKSwKIAkJCShpbnQpKChkc3RfbWV0cmljKCZyLT5kc3QsIFJUQVhfUlRUKSA+PiAzKSArCiAJCQkgICAgICBkc3RfbWV0cmljKCZyLT5kc3QsIFJUQVhfUlRUVkFSKSksCi0JCQlyLT5ydF90b3MsCisJCQlyLT5ydF9rZXlfdG9zLAogCQkJci0+ZHN0LmhoID8gYXRvbWljX3JlYWQoJnItPmRzdC5oaC0+aGhfcmVmY250KSA6IC0xLAogCQkJci0+ZHN0LmhoID8gKHItPmRzdC5oaC0+aGhfb3V0cHV0ID09CiAJCQkJICAgICAgIGRldl9xdWV1ZV94bWl0KSA6IDAsCkBAIC03MjQsNyArNzI0LDcgQEAKIAlyZXR1cm4gKCgoX19mb3JjZSB1MzIpcnQxLT5ydF9rZXlfZHN0IF4gKF9fZm9yY2UgdTMyKXJ0Mi0+cnRfa2V5X2RzdCkgfAogCQkoKF9fZm9yY2UgdTMyKXJ0MS0+cnRfa2V5X3NyYyBeIChfX2ZvcmNlIHUzMilydDItPnJ0X2tleV9zcmMpIHwKIAkJKHJ0MS0+cnRfbWFyayBeIHJ0Mi0+cnRfbWFyaykgfAotCQkocnQxLT5ydF90b3MgXiBydDItPnJ0X3RvcykgfAorCQkocnQxLT5ydF9rZXlfdG9zIF4gcnQyLT5ydF9rZXlfdG9zKSB8CiAJCShydDEtPnJ0X29pZiBeIHJ0Mi0+cnRfb2lmKSB8CiAJCShydDEtPnJ0X2lpZiBeIHJ0Mi0+cnRfaWlmKSkgPT0gMDsKIH0KQEAgLTk2OCwxMCArOTY4LDYgQEAKIAkJCWJyZWFrOwogCiAJCWV4cGlyZSA+Pj0gMTsKLSNpZiBSVF9DQUNIRV9ERUJVRyA+PSAyCi0JCXByaW50ayhLRVJOX0RFQlVHICJleHBpcmU+PiAldSAlZCAlZCAlZFxuIiwgZXhwaXJlLAotCQkJCWRzdF9lbnRyaWVzX2dldF9mYXN0KCZpcHY0X2RzdF9vcHMpLCBnb2FsLCBpKTsKLSNlbmRpZgogCiAJCWlmIChkc3RfZW50cmllc19nZXRfZmFzdCgmaXB2NF9kc3Rfb3BzKSA8IGlwX3J0X21heF9zaXplKQogCQkJZ290byBvdXQ7CkBAIC05OTIsMTAgKzk4OCw2IEBACiAJICAgIGRzdF9lbnRyaWVzX2dldF9mYXN0KCZpcHY0X2RzdF9vcHMpIDwgaXB2NF9kc3Rfb3BzLmdjX3RocmVzaCB8fAogCSAgICBkc3RfZW50cmllc19nZXRfc2xvdygmaXB2NF9kc3Rfb3BzKSA8IGlwdjRfZHN0X29wcy5nY190aHJlc2gpCiAJCWV4cGlyZSA9IGlwX3J0X2djX3RpbWVvdXQ7Ci0jaWYgUlRfQ0FDSEVfREVCVUcgPj0gMgotCXByaW50ayhLRVJOX0RFQlVHICJleHBpcmUrKyAldSAlZCAlZCAlZFxuIiwgZXhwaXJlLAotCQkJZHN0X2VudHJpZXNfZ2V0X2Zhc3QoJmlwdjRfZHN0X29wcyksIGdvYWwsIHJvdmVyKTsKLSNlbmRpZgogb3V0OglyZXR1cm4gMDsKIH0KIApAQCAtMTE3OSwxNiArMTE3MSw2IEBACiAKIAlydC0+ZHN0LnJ0X25leHQgPSBydF9oYXNoX3RhYmxlW2hhc2hdLmNoYWluOwogCi0jaWYgUlRfQ0FDSEVfREVCVUcgPj0gMgotCWlmIChydC0+ZHN0LnJ0X25leHQpIHsKLQkJc3RydWN0IHJ0YWJsZSAqdHJ0OwotCQlwcmludGsoS0VSTl9ERUJVRyAicnRfY2FjaGUgQCUwMng6ICVwSTQiLAotCQkgICAgICAgaGFzaCwgJnJ0LT5ydF9kc3QpOwotCQlmb3IgKHRydCA9IHJ0LT5kc3QucnRfbmV4dDsgdHJ0OyB0cnQgPSB0cnQtPmRzdC5ydF9uZXh0KQotCQkJcHJpbnRrKCIgLiAlcEk0IiwgJnRydC0+cnRfZHN0KTsKLQkJcHJpbnRrKCJcbiIpOwotCX0KLSNlbmRpZgogCS8qCiAJICogU2luY2UgbG9va3VwIGlzIGxvY2tmcmVlLCB3ZSBtdXN0IG1ha2Ugc3VyZQogCSAqIHByZXZpb3VzIHdyaXRlcyB0byBydCBhcmUgY29tbWl0dGVkIHRvIG1lbW9yeQpAQCAtMTIxMSwxMSArMTE5MywxMSBAQAogCXJldHVybiBhdG9taWNfcmVhZCgmX19ydF9wZWVyX2dlbmlkKTsKIH0KIAotdm9pZCBydF9iaW5kX3BlZXIoc3RydWN0IHJ0YWJsZSAqcnQsIGludCBjcmVhdGUpCit2b2lkIHJ0X2JpbmRfcGVlcihzdHJ1Y3QgcnRhYmxlICpydCwgX19iZTMyIGRhZGRyLCBpbnQgY3JlYXRlKQogewogCXN0cnVjdCBpbmV0X3BlZXIgKnBlZXI7CiAKLQlwZWVyID0gaW5ldF9nZXRwZWVyX3Y0KHJ0LT5ydF9kc3QsIGNyZWF0ZSk7CisJcGVlciA9IGluZXRfZ2V0cGVlcl92NChkYWRkciwgY3JlYXRlKTsKIAogCWlmIChwZWVyICYmIGNtcHhjaGcoJnJ0LT5wZWVyLCBOVUxMLCBwZWVyKSAhPSBOVUxMKQogCQlpbmV0X3B1dHBlZXIocGVlcik7CkBAIC0xMjQ5LDcgKzEyMzEsNyBAQAogCiAJaWYgKHJ0KSB7CiAJCWlmIChydC0+cGVlciA9PSBOVUxMKQotCQkJcnRfYmluZF9wZWVyKHJ0LCAxKTsKKwkJCXJ0X2JpbmRfcGVlcihydCwgcnQtPnJ0X2RzdCwgMSk7CiAKIAkJLyogSWYgcGVlciBpcyBhdHRhY2hlZCB0byBkZXN0aW5hdGlvbiwgaXQgaXMgbmV2ZXIgZGV0YWNoZWQsCiAJCSAgIHNvIHRoYXQgd2UgbmVlZCBub3QgdG8gZ3JhYiBhIGxvY2sgdG8gZGVyZWZlcmVuY2UgaXQuCkBAIC0xMzQ3LDEwICsxMzI5LDYgQEAKIAkJCXVuc2lnbmVkIGhhc2ggPSBydF9oYXNoKHJ0LT5ydF9rZXlfZHN0LCBydC0+cnRfa2V5X3NyYywKIAkJCQkJCXJ0LT5ydF9vaWYsCiAJCQkJCQlydF9nZW5pZChkZXZfbmV0KGRzdC0+ZGV2KSkpOwotI2lmIFJUX0NBQ0hFX0RFQlVHID49IDEKLQkJCXByaW50ayhLRVJOX0RFQlVHICJpcHY0X25lZ2F0aXZlX2FkdmljZTogcmVkaXJlY3QgdG8gJXBJNC8lMDJ4IGRyb3BwZWRcbiIsCi0JCQkJJnJ0LT5ydF9kc3QsIHJ0LT5ydF90b3MpOwotI2VuZGlmCiAJCQlydF9kZWwoaGFzaCwgcnQpOwogCQkJcmV0ID0gTlVMTDsKIAkJfSBlbHNlIGlmIChydC0+cGVlciAmJgpAQCAtMTM5OSw3ICsxMzc3LDcgQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCWlmICghcnQtPnBlZXIpCi0JCXJ0X2JpbmRfcGVlcihydCwgMSk7CisJCXJ0X2JpbmRfcGVlcihydCwgcnQtPnJ0X2RzdCwgMSk7CiAJcGVlciA9IHJ0LT5wZWVyOwogCWlmICghcGVlcikgewogCQlpY21wX3NlbmQoc2tiLCBJQ01QX1JFRElSRUNULCBJQ01QX1JFRElSX0hPU1QsIHJ0LT5ydF9nYXRld2F5KTsKQEAgLTE0MzUsNyArMTQxMyw3IEBACiAJCSAgICBwZWVyLT5yYXRlX3Rva2VucyA9PSBpcF9ydF9yZWRpcmVjdF9udW1iZXIgJiYKIAkJICAgIG5ldF9yYXRlbGltaXQoKSkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgImhvc3QgJXBJNC9pZiVkIGlnbm9yZXMgcmVkaXJlY3RzIGZvciAlcEk0IHRvICVwSTQuXG4iLAotCQkJCSZydC0+cnRfc3JjLCBydC0+cnRfaWlmLAorCQkJICAgICAgICZpcF9oZHIoc2tiKS0+c2FkZHIsIHJ0LT5ydF9paWYsCiAJCQkJJnJ0LT5ydF9kc3QsICZydC0+cnRfZ2F0ZXdheSk7CiAjZW5kaWYKIAl9CkBAIC0xNDY3LDcgKzE0NDUsNyBAQAogCX0KIAogCWlmICghcnQtPnBlZXIpCi0JCXJ0X2JpbmRfcGVlcihydCwgMSk7CisJCXJ0X2JpbmRfcGVlcihydCwgcnQtPnJ0X2RzdCwgMSk7CiAJcGVlciA9IHJ0LT5wZWVyOwogCiAJc2VuZCA9IHRydWU7CkBAIC0xNTA3LDcgKzE0ODUsNyBAQAogCXJldHVybiA2ODsKIH0KIAotdW5zaWduZWQgc2hvcnQgaXBfcnRfZnJhZ19uZWVkZWQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBoZHIgKmlwaCwKK3Vuc2lnbmVkIHNob3J0IGlwX3J0X2ZyYWdfbmVlZGVkKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGlwaGRyICppcGgsCiAJCQkJIHVuc2lnbmVkIHNob3J0IG5ld19tdHUsCiAJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0xNTc0LDcgKzE1NTIsNyBAQAogCWRzdF9jb25maXJtKGRzdCk7CiAKIAlpZiAoIXJ0LT5wZWVyKQotCQlydF9iaW5kX3BlZXIocnQsIDEpOworCQlydF9iaW5kX3BlZXIocnQsIHJ0LT5ydF9kc3QsIDEpOwogCXBlZXIgPSBydC0+cGVlcjsKIAlpZiAocGVlcikgewogCQlpZiAobXR1IDwgaXBfcnRfbWluX3BtdHUpCkBAIC0xNjMxLDcgKzE2MDksNyBAQAogCQlzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyOwogCiAJCWlmICghcnQtPnBlZXIpCi0JCQlydF9iaW5kX3BlZXIocnQsIDApOworCQkJcnRfYmluZF9wZWVyKHJ0LCBydC0+cnRfZHN0LCAwKTsKIAogCQlwZWVyID0gcnQtPnBlZXI7CiAJCWlmIChwZWVyICYmIHBlZXItPnBtdHVfZXhwaXJlcykKQEAgLTE2ODcsNiArMTY2NSw3IEBACiAJCSZpcF9oZHIoc2tiKS0+c2FkZHIsICZpcF9oZHIoc2tiKS0+ZGFkZHIsCiAJCXNrYi0+ZGV2ID8gc2tiLT5kZXYtPm5hbWUgOiAiPyIpOwogCWtmcmVlX3NrYihza2IpOworCVdBUk5fT04oMSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2OTksMjIgKzE2NzgsMjYgQEAKICAgIGluIElQIG9wdGlvbnMhCiAgKi8KIAotdm9pZCBpcF9ydF9nZXRfc291cmNlKHU4ICphZGRyLCBzdHJ1Y3QgcnRhYmxlICpydCkKK3ZvaWQgaXBfcnRfZ2V0X3NvdXJjZSh1OCAqYWRkciwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJ0YWJsZSAqcnQpCiB7CiAJX19iZTMyIHNyYzsKLQlzdHJ1Y3QgZmliX3Jlc3VsdCByZXM7CiAKIAlpZiAocnRfaXNfb3V0cHV0X3JvdXRlKHJ0KSkKLQkJc3JjID0gcnQtPnJ0X3NyYzsKKwkJc3JjID0gaXBfaGRyKHNrYiktPnNhZGRyOwogCWVsc2UgewotCQlzdHJ1Y3QgZmxvd2k0IGZsNCA9IHsKLQkJCS5kYWRkciA9IHJ0LT5ydF9rZXlfZHN0LAotCQkJLnNhZGRyID0gcnQtPnJ0X2tleV9zcmMsCi0JCQkuZmxvd2k0X3RvcyA9IHJ0LT5ydF90b3MsCi0JCQkuZmxvd2k0X29pZiA9IHJ0LT5ydF9vaWYsCi0JCQkuZmxvd2k0X2lpZiA9IHJ0LT5ydF9paWYsCi0JCQkuZmxvd2k0X21hcmsgPSBydC0+cnRfbWFyaywKLQkJfTsKKwkJc3RydWN0IGZpYl9yZXN1bHQgcmVzOworCQlzdHJ1Y3QgZmxvd2k0IGZsNDsKKwkJc3RydWN0IGlwaGRyICppcGg7CisKKwkJaXBoID0gaXBfaGRyKHNrYik7CisKKwkJbWVtc2V0KCZmbDQsIDAsIHNpemVvZihmbDQpKTsKKwkJZmw0LmRhZGRyID0gaXBoLT5kYWRkcjsKKwkJZmw0LnNhZGRyID0gaXBoLT5zYWRkcjsKKwkJZmw0LmZsb3dpNF90b3MgPSBpcGgtPnRvczsKKwkJZmw0LmZsb3dpNF9vaWYgPSBydC0+ZHN0LmRldi0+aWZpbmRleDsKKwkJZmw0LmZsb3dpNF9paWYgPSBza2ItPmRldi0+aWZpbmRleDsKKwkJZmw0LmZsb3dpNF9tYXJrID0gc2tiLT5tYXJrOwogCiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJaWYgKGZpYl9sb29rdXAoZGV2X25ldChydC0+ZHN0LmRldiksICZmbDQsICZyZXMpID09IDApCkBAIC0xNzY3LDcgKzE3NTAsNyBAQAogCXJldHVybiBtdHU7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0X2luaXRfbWV0cmljcyhzdHJ1Y3QgcnRhYmxlICpydCwgY29uc3Qgc3RydWN0IGZsb3dpNCAqb2xkZmxwNCwKK3N0YXRpYyB2b2lkIHJ0X2luaXRfbWV0cmljcyhzdHJ1Y3QgcnRhYmxlICpydCwgY29uc3Qgc3RydWN0IGZsb3dpNCAqZmw0LAogCQkJICAgIHN0cnVjdCBmaWJfaW5mbyAqZmkpCiB7CiAJc3RydWN0IGluZXRfcGVlciAqcGVlcjsKQEAgLTE3NzYsNyArMTc1OSw3IEBACiAJLyogSWYgYSBwZWVyIGVudHJ5IGV4aXN0cyBmb3IgdGhpcyBkZXN0aW5hdGlvbiwgd2UgbXVzdCBob29rCiAJICogaXQgdXAgaW4gb3JkZXIgdG8gZ2V0IGF0IGNhY2hlZCBtZXRyaWNzLgogCSAqLwotCWlmIChvbGRmbHA0ICYmIChvbGRmbHA0LT5mbG93aTRfZmxhZ3MgJiBGTE9XSV9GTEFHX1BSRUNPV19NRVRSSUNTKSkKKwlpZiAoZmw0ICYmIChmbDQtPmZsb3dpNF9mbGFncyAmIEZMT1dJX0ZMQUdfUFJFQ09XX01FVFJJQ1MpKQogCQljcmVhdGUgPSAxOwogCiAJcnQtPnBlZXIgPSBwZWVyID0gaW5ldF9nZXRwZWVyX3Y0KHJ0LT5ydF9kc3QsIGNyZWF0ZSk7CkBAIC0xODAzLDcgKzE3ODYsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgcnRfc2V0X25leHRob3Aoc3RydWN0IHJ0YWJsZSAqcnQsIGNvbnN0IHN0cnVjdCBmbG93aTQgKm9sZGZscDQsCitzdGF0aWMgdm9pZCBydF9zZXRfbmV4dGhvcChzdHJ1Y3QgcnRhYmxlICpydCwgY29uc3Qgc3RydWN0IGZsb3dpNCAqZmw0LAogCQkJICAgY29uc3Qgc3RydWN0IGZpYl9yZXN1bHQgKnJlcywKIAkJCSAgIHN0cnVjdCBmaWJfaW5mbyAqZmksIHUxNiB0eXBlLCB1MzIgaXRhZykKIHsKQEAgLTE4MTMsNyArMTc5Niw3IEBACiAJCWlmIChGSUJfUkVTX0dXKCpyZXMpICYmCiAJCSAgICBGSUJfUkVTX05IKCpyZXMpLm5oX3Njb3BlID09IFJUX1NDT1BFX0xJTkspCiAJCQlydC0+cnRfZ2F0ZXdheSA9IEZJQl9SRVNfR1coKnJlcyk7Ci0JCXJ0X2luaXRfbWV0cmljcyhydCwgb2xkZmxwNCwgZmkpOworCQlydF9pbml0X21ldHJpY3MocnQsIGZsNCwgZmkpOwogI2lmZGVmIENPTkZJR19JUF9ST1VURV9DTEFTU0lECiAJCWRzdC0+dGNsYXNzaWQgPSBGSUJfUkVTX05IKCpyZXMpLm5oX3RjbGFzc2lkOwogI2VuZGlmCkBAIC0xODMwLDIwICsxODEzLDE1IEBACiAjZW5kaWYKIAlzZXRfY2xhc3NfdGFnKHJ0LCBpdGFnKTsKICNlbmRpZgotCXJ0LT5ydF90eXBlID0gdHlwZTsKIH0KIAotc3RhdGljIHN0cnVjdCBydGFibGUgKnJ0X2RzdF9hbGxvYyhib29sIG5vcG9saWN5LCBib29sIG5veGZybSkKK3N0YXRpYyBzdHJ1Y3QgcnRhYmxlICpydF9kc3RfYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICBib29sIG5vcG9saWN5LCBib29sIG5veGZybSkKIHsKLQlzdHJ1Y3QgcnRhYmxlICpydCA9IGRzdF9hbGxvYygmaXB2NF9kc3Rfb3BzLCAxKTsKLQlpZiAocnQpIHsKLQkJcnQtPmRzdC5vYnNvbGV0ZSA9IC0xOwotCi0JCXJ0LT5kc3QuZmxhZ3MgPSBEU1RfSE9TVCB8Ci0JCQkobm9wb2xpY3kgPyBEU1RfTk9QT0xJQ1kgOiAwKSB8Ci0JCQkobm94ZnJtID8gRFNUX05PWEZSTSA6IDApOwotCX0KLQlyZXR1cm4gcnQ7CisJcmV0dXJuIGRzdF9hbGxvYygmaXB2NF9kc3Rfb3BzLCBkZXYsIDEsIC0xLAorCQkJIERTVF9IT1NUIHwKKwkJCSAobm9wb2xpY3kgPyBEU1RfTk9QT0xJQ1kgOiAwKSB8CisJCQkgKG5veGZybSA/IERTVF9OT1hGUk0gOiAwKSk7CiB9CiAKIC8qIGNhbGxlZCBpbiByY3VfcmVhZF9sb2NrKCkgc2VjdGlvbiAqLwpAQCAtMTg3MSwzNiArMTg0OSwzOCBAQAogCQkJZ290byBlX2ludmFsOwogCQlzcGVjX2RzdCA9IGluZXRfc2VsZWN0X2FkZHIoZGV2LCAwLCBSVF9TQ09QRV9MSU5LKTsKIAl9IGVsc2UgewotCQllcnIgPSBmaWJfdmFsaWRhdGVfc291cmNlKHNhZGRyLCAwLCB0b3MsIDAsIGRldiwgJnNwZWNfZHN0LAotCQkJCQkgICZpdGFnLCAwKTsKKwkJZXJyID0gZmliX3ZhbGlkYXRlX3NvdXJjZShza2IsIHNhZGRyLCAwLCB0b3MsIDAsIGRldiwgJnNwZWNfZHN0LAorCQkJCQkgICZpdGFnKTsKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIGVfZXJyOwogCX0KLQlydGggPSBydF9kc3RfYWxsb2MoSU5fREVWX0NPTkZfR0VUKGluX2RldiwgTk9QT0xJQ1kpLCBmYWxzZSk7CisJcnRoID0gcnRfZHN0X2FsbG9jKGluaXRfbmV0Lmxvb3BiYWNrX2RldiwKKwkJCSAgIElOX0RFVl9DT05GX0dFVChpbl9kZXYsIE5PUE9MSUNZKSwgZmFsc2UpOwogCWlmICghcnRoKQogCQlnb3RvIGVfbm9idWZzOwogCi0JcnRoLT5kc3Qub3V0cHV0ID0gaXBfcnRfYnVnOwotCi0JcnRoLT5ydF9rZXlfZHN0CT0gZGFkZHI7Ci0JcnRoLT5ydF9kc3QJPSBkYWRkcjsKLQlydGgtPnJ0X3Rvcwk9IHRvczsKLQlydGgtPnJ0X21hcmsgICAgPSBza2ItPm1hcms7Ci0JcnRoLT5ydF9rZXlfc3JjCT0gc2FkZHI7Ci0JcnRoLT5ydF9zcmMJPSBzYWRkcjsKICNpZmRlZiBDT05GSUdfSVBfUk9VVEVfQ0xBU1NJRAogCXJ0aC0+ZHN0LnRjbGFzc2lkID0gaXRhZzsKICNlbmRpZgotCXJ0aC0+cnRfcm91dGVfaWlmID0gZGV2LT5pZmluZGV4OwotCXJ0aC0+cnRfaWlmCT0gZGV2LT5pZmluZGV4OwotCXJ0aC0+ZHN0LmRldgk9IGluaXRfbmV0Lmxvb3BiYWNrX2RldjsKLQlkZXZfaG9sZChydGgtPmRzdC5kZXYpOwotCXJ0aC0+cnRfb2lmCT0gMDsKLQlydGgtPnJ0X2dhdGV3YXkJPSBkYWRkcjsKLQlydGgtPnJ0X3NwZWNfZHN0PSBzcGVjX2RzdDsKKwlydGgtPmRzdC5vdXRwdXQgPSBpcF9ydF9idWc7CisKKwlydGgtPnJ0X2tleV9kc3QJPSBkYWRkcjsKKwlydGgtPnJ0X2tleV9zcmMJPSBzYWRkcjsKIAlydGgtPnJ0X2dlbmlkCT0gcnRfZ2VuaWQoZGV2X25ldChkZXYpKTsKIAlydGgtPnJ0X2ZsYWdzCT0gUlRDRl9NVUxUSUNBU1Q7CiAJcnRoLT5ydF90eXBlCT0gUlROX01VTFRJQ0FTVDsKKwlydGgtPnJ0X2tleV90b3MJPSB0b3M7CisJcnRoLT5ydF9kc3QJPSBkYWRkcjsKKwlydGgtPnJ0X3NyYwk9IHNhZGRyOworCXJ0aC0+cnRfcm91dGVfaWlmID0gZGV2LT5pZmluZGV4OworCXJ0aC0+cnRfaWlmCT0gZGV2LT5pZmluZGV4OworCXJ0aC0+cnRfb2lmCT0gMDsKKwlydGgtPnJ0X21hcmsgICAgPSBza2ItPm1hcms7CisJcnRoLT5ydF9nYXRld2F5CT0gZGFkZHI7CisJcnRoLT5ydF9zcGVjX2RzdD0gc3BlY19kc3Q7CisJcnRoLT5ydF9wZWVyX2dlbmlkID0gMDsKKwlydGgtPnBlZXIgPSBOVUxMOworCXJ0aC0+ZmkgPSBOVUxMOwogCWlmIChvdXIpIHsKIAkJcnRoLT5kc3QuaW5wdXQ9IGlwX2xvY2FsX2RlbGl2ZXI7CiAJCXJ0aC0+cnRfZmxhZ3MgfD0gUlRDRl9MT0NBTDsKQEAgLTE5ODEsOCArMTk2MSw4IEBACiAJfQogCiAKLQllcnIgPSBmaWJfdmFsaWRhdGVfc291cmNlKHNhZGRyLCBkYWRkciwgdG9zLCBGSUJfUkVTX09JRigqcmVzKSwKLQkJCQkgIGluX2Rldi0+ZGV2LCAmc3BlY19kc3QsICZpdGFnLCBza2ItPm1hcmspOworCWVyciA9IGZpYl92YWxpZGF0ZV9zb3VyY2Uoc2tiLCBzYWRkciwgZGFkZHIsIHRvcywgRklCX1JFU19PSUYoKnJlcyksCisJCQkJICBpbl9kZXYtPmRldiwgJnNwZWNfZHN0LCAmaXRhZyk7CiAJaWYgKGVyciA8IDApIHsKIAkJaXBfaGFuZGxlX21hcnRpYW5fc291cmNlKGluX2Rldi0+ZGV2LCBpbl9kZXYsIHNrYiwgZGFkZHIsCiAJCQkJCSBzYWRkcik7CkBAIC0yMDEzLDcgKzE5OTMsOCBAQAogCQl9CiAJfQogCi0JcnRoID0gcnRfZHN0X2FsbG9jKElOX0RFVl9DT05GX0dFVChpbl9kZXYsIE5PUE9MSUNZKSwKKwlydGggPSBydF9kc3RfYWxsb2Mob3V0X2Rldi0+ZGV2LAorCQkJICAgSU5fREVWX0NPTkZfR0VUKGluX2RldiwgTk9QT0xJQ1kpLAogCQkJICAgSU5fREVWX0NPTkZfR0VUKG91dF9kZXYsIE5PWEZSTSkpOwogCWlmICghcnRoKSB7CiAJCWVyciA9IC1FTk9CVUZTOwpAQCAtMjAyMSwyNyArMjAwMiwyOCBAQAogCX0KIAogCXJ0aC0+cnRfa2V5X2RzdAk9IGRhZGRyOwotCXJ0aC0+cnRfZHN0CT0gZGFkZHI7Ci0JcnRoLT5ydF90b3MJPSB0b3M7Ci0JcnRoLT5ydF9tYXJrICAgID0gc2tiLT5tYXJrOwogCXJ0aC0+cnRfa2V5X3NyYwk9IHNhZGRyOworCXJ0aC0+cnRfZ2VuaWQgPSBydF9nZW5pZChkZXZfbmV0KHJ0aC0+ZHN0LmRldikpOworCXJ0aC0+cnRfZmxhZ3MgPSBmbGFnczsKKwlydGgtPnJ0X3R5cGUgPSByZXMtPnR5cGU7CisJcnRoLT5ydF9rZXlfdG9zCT0gdG9zOworCXJ0aC0+cnRfZHN0CT0gZGFkZHI7CiAJcnRoLT5ydF9zcmMJPSBzYWRkcjsKLQlydGgtPnJ0X2dhdGV3YXkJPSBkYWRkcjsKIAlydGgtPnJ0X3JvdXRlX2lpZiA9IGluX2Rldi0+ZGV2LT5pZmluZGV4OwogCXJ0aC0+cnRfaWlmIAk9IGluX2Rldi0+ZGV2LT5pZmluZGV4OwotCXJ0aC0+ZHN0LmRldgk9IChvdXRfZGV2KS0+ZGV2OwotCWRldl9ob2xkKHJ0aC0+ZHN0LmRldik7CiAJcnRoLT5ydF9vaWYgCT0gMDsKKwlydGgtPnJ0X21hcmsgICAgPSBza2ItPm1hcms7CisJcnRoLT5ydF9nYXRld2F5CT0gZGFkZHI7CiAJcnRoLT5ydF9zcGVjX2RzdD0gc3BlY19kc3Q7CisJcnRoLT5ydF9wZWVyX2dlbmlkID0gMDsKKwlydGgtPnBlZXIgPSBOVUxMOworCXJ0aC0+ZmkgPSBOVUxMOwogCiAJcnRoLT5kc3QuaW5wdXQgPSBpcF9mb3J3YXJkOwogCXJ0aC0+ZHN0Lm91dHB1dCA9IGlwX291dHB1dDsKLQlydGgtPnJ0X2dlbmlkID0gcnRfZ2VuaWQoZGV2X25ldChydGgtPmRzdC5kZXYpKTsKIAogCXJ0X3NldF9uZXh0aG9wKHJ0aCwgTlVMTCwgcmVzLCByZXMtPmZpLCByZXMtPnR5cGUsIGl0YWcpOwogCi0JcnRoLT5ydF9mbGFncyA9IGZsYWdzOwotCiAJKnJlc3VsdCA9IHJ0aDsKIAllcnIgPSAwOwogIGNsZWFudXA6CkBAIC0yMTUwLDkgKzIxMzIsOSBAQAogCQlnb3RvIGJyZF9pbnB1dDsKIAogCWlmIChyZXMudHlwZSA9PSBSVE5fTE9DQUwpIHsKLQkJZXJyID0gZmliX3ZhbGlkYXRlX3NvdXJjZShzYWRkciwgZGFkZHIsIHRvcywKKwkJZXJyID0gZmliX3ZhbGlkYXRlX3NvdXJjZShza2IsIHNhZGRyLCBkYWRkciwgdG9zLAogCQkJCQkgIG5ldC0+bG9vcGJhY2tfZGV2LT5pZmluZGV4LAotCQkJCQkgIGRldiwgJnNwZWNfZHN0LCAmaXRhZywgc2tiLT5tYXJrKTsKKwkJCQkJICBkZXYsICZzcGVjX2RzdCwgJml0YWcpOwogCQlpZiAoZXJyIDwgMCkKIAkJCWdvdG8gbWFydGlhbl9zb3VyY2Vfa2VlcF9lcnI7CiAJCWlmIChlcnIpCkBAIC0yMTc2LDggKzIxNTgsOCBAQAogCWlmIChpcHY0X2lzX3plcm9uZXQoc2FkZHIpKQogCQlzcGVjX2RzdCA9IGluZXRfc2VsZWN0X2FkZHIoZGV2LCAwLCBSVF9TQ09QRV9MSU5LKTsKIAllbHNlIHsKLQkJZXJyID0gZmliX3ZhbGlkYXRlX3NvdXJjZShzYWRkciwgMCwgdG9zLCAwLCBkZXYsICZzcGVjX2RzdCwKLQkJCQkJICAmaXRhZywgc2tiLT5tYXJrKTsKKwkJZXJyID0gZmliX3ZhbGlkYXRlX3NvdXJjZShza2IsIHNhZGRyLCAwLCB0b3MsIDAsIGRldiwgJnNwZWNfZHN0LAorCQkJCQkgICZpdGFnKTsKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIG1hcnRpYW5fc291cmNlX2tlZXBfZXJyOwogCQlpZiAoZXJyKQpAQCAtMjE4OCwzNiArMjE3MCw0MiBAQAogCVJUX0NBQ0hFX1NUQVRfSU5DKGluX2JyZCk7CiAKIGxvY2FsX2lucHV0OgotCXJ0aCA9IHJ0X2RzdF9hbGxvYyhJTl9ERVZfQ09ORl9HRVQoaW5fZGV2LCBOT1BPTElDWSksIGZhbHNlKTsKKwlydGggPSBydF9kc3RfYWxsb2MobmV0LT5sb29wYmFja19kZXYsCisJCQkgICBJTl9ERVZfQ09ORl9HRVQoaW5fZGV2LCBOT1BPTElDWSksIGZhbHNlKTsKIAlpZiAoIXJ0aCkKIAkJZ290byBlX25vYnVmczsKIAorCXJ0aC0+ZHN0LmlucHV0PSBpcF9sb2NhbF9kZWxpdmVyOwogCXJ0aC0+ZHN0Lm91dHB1dD0gaXBfcnRfYnVnOwotCXJ0aC0+cnRfZ2VuaWQgPSBydF9nZW5pZChuZXQpOworI2lmZGVmIENPTkZJR19JUF9ST1VURV9DTEFTU0lECisJcnRoLT5kc3QudGNsYXNzaWQgPSBpdGFnOworI2VuZGlmCiAKIAlydGgtPnJ0X2tleV9kc3QJPSBkYWRkcjsKLQlydGgtPnJ0X2RzdAk9IGRhZGRyOwotCXJ0aC0+cnRfdG9zCT0gdG9zOwotCXJ0aC0+cnRfbWFyayAgICA9IHNrYi0+bWFyazsKIAlydGgtPnJ0X2tleV9zcmMJPSBzYWRkcjsKKwlydGgtPnJ0X2dlbmlkID0gcnRfZ2VuaWQobmV0KTsKKwlydGgtPnJ0X2ZsYWdzIAk9IGZsYWdzfFJUQ0ZfTE9DQUw7CisJcnRoLT5ydF90eXBlCT0gcmVzLnR5cGU7CisJcnRoLT5ydF9rZXlfdG9zCT0gdG9zOworCXJ0aC0+cnRfZHN0CT0gZGFkZHI7CiAJcnRoLT5ydF9zcmMJPSBzYWRkcjsKICNpZmRlZiBDT05GSUdfSVBfUk9VVEVfQ0xBU1NJRAogCXJ0aC0+ZHN0LnRjbGFzc2lkID0gaXRhZzsKICNlbmRpZgogCXJ0aC0+cnRfcm91dGVfaWlmID0gZGV2LT5pZmluZGV4OwogCXJ0aC0+cnRfaWlmCT0gZGV2LT5pZmluZGV4OwotCXJ0aC0+ZHN0LmRldgk9IG5ldC0+bG9vcGJhY2tfZGV2OwotCWRldl9ob2xkKHJ0aC0+ZHN0LmRldik7CisJcnRoLT5ydF9vaWYJPSAwOworCXJ0aC0+cnRfbWFyayAgICA9IHNrYi0+bWFyazsKIAlydGgtPnJ0X2dhdGV3YXkJPSBkYWRkcjsKIAlydGgtPnJ0X3NwZWNfZHN0PSBzcGVjX2RzdDsKLQlydGgtPmRzdC5pbnB1dD0gaXBfbG9jYWxfZGVsaXZlcjsKLQlydGgtPnJ0X2ZsYWdzIAk9IGZsYWdzfFJUQ0ZfTE9DQUw7CisJcnRoLT5ydF9wZWVyX2dlbmlkID0gMDsKKwlydGgtPnBlZXIgPSBOVUxMOworCXJ0aC0+ZmkgPSBOVUxMOwogCWlmIChyZXMudHlwZSA9PSBSVE5fVU5SRUFDSEFCTEUpIHsKIAkJcnRoLT5kc3QuaW5wdXQ9IGlwX2Vycm9yOwogCQlydGgtPmRzdC5lcnJvcj0gLWVycjsKIAkJcnRoLT5ydF9mbGFncyAJJj0gflJUQ0ZfTE9DQUw7CiAJfQotCXJ0aC0+cnRfdHlwZQk9IHJlcy50eXBlOwogCWhhc2ggPSBydF9oYXNoKGRhZGRyLCBzYWRkciwgZmw0LmZsb3dpNF9paWYsIHJ0X2dlbmlkKG5ldCkpOwogCXJ0aCA9IHJ0X2ludGVybl9oYXNoKGhhc2gsIHJ0aCwgc2tiLCBmbDQuZmxvd2k0X2lpZik7CiAJZXJyID0gMDsKQEAgLTIyODgsNyArMjI3Niw3IEBACiAJCSAgICAgKChfX2ZvcmNlIHUzMilydGgtPnJ0X2tleV9zcmMgXiAoX19mb3JjZSB1MzIpc2FkZHIpIHwKIAkJICAgICAocnRoLT5ydF9paWYgXiBpaWYpIHwKIAkJICAgICBydGgtPnJ0X29pZiB8Ci0JCSAgICAgKHJ0aC0+cnRfdG9zIF4gdG9zKSkgPT0gMCAmJgorCQkgICAgIChydGgtPnJ0X2tleV90b3MgXiB0b3MpKSA9PSAwICYmCiAJCSAgICBydGgtPnJ0X21hcmsgPT0gc2tiLT5tYXJrICYmCiAJCSAgICBuZXRfZXEoZGV2X25ldChydGgtPmRzdC5kZXYpLCBuZXQpICYmCiAJCSAgICAhcnRfaXNfZXhwaXJlZChydGgpKSB7CkBAIC0yMzQ5LDEyICsyMzM3LDEyIEBACiAvKiBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgKi8KIHN0YXRpYyBzdHJ1Y3QgcnRhYmxlICpfX21rcm91dGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsCiAJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBmbG93aTQgKmZsNCwKLQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGZsb3dpNCAqb2xkZmxwNCwKLQkJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldl9vdXQsCisJCQkJICAgICAgIF9fYmUzMiBvcmlnX2RhZGRyLCBfX2JlMzIgb3JpZ19zYWRkciwKKwkJCQkgICAgICAgaW50IG9yaWdfb2lmLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X291dCwKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXN0cnVjdCBmaWJfaW5mbyAqZmkgPSByZXMtPmZpOwotCXUzMiB0b3MgPSBSVF9GTF9UT1Mob2xkZmxwNCk7CisJdTMyIHRvcyA9IFJUX0ZMX1RPUyhmbDQpOwogCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKIAl1MTYgdHlwZSA9IHJlcy0+dHlwZTsKIAlzdHJ1Y3QgcnRhYmxlICpydGg7CkBAIC0yMzgxLDggKzIzNjksOCBAQAogCQlmaSA9IE5VTEw7CiAJfSBlbHNlIGlmICh0eXBlID09IFJUTl9NVUxUSUNBU1QpIHsKIAkJZmxhZ3MgfD0gUlRDRl9NVUxUSUNBU1QgfCBSVENGX0xPQ0FMOwotCQlpZiAoIWlwX2NoZWNrX21jX3JjdShpbl9kZXYsIG9sZGZscDQtPmRhZGRyLCBvbGRmbHA0LT5zYWRkciwKLQkJCQkgICAgIG9sZGZscDQtPmZsb3dpNF9wcm90bykpCisJCWlmICghaXBfY2hlY2tfbWNfcmN1KGluX2RldiwgZmw0LT5kYWRkciwgZmw0LT5zYWRkciwKKwkJCQkgICAgIGZsNC0+Zmxvd2k0X3Byb3RvKSkKIAkJCWZsYWdzICY9IH5SVENGX0xPQ0FMOwogCQkvKiBJZiBtdWx0aWNhc3Qgcm91dGUgZG8gbm90IGV4aXN0IHVzZQogCQkgKiBkZWZhdWx0IG9uZSwgYnV0IGRvIG5vdCBnYXRld2F5IGluIHRoaXMgY2FzZS4KQEAgLTIzOTIsMjkgKzIzODAsMzEgQEAKIAkJCWZpID0gTlVMTDsKIAl9CiAKLQlydGggPSBydF9kc3RfYWxsb2MoSU5fREVWX0NPTkZfR0VUKGluX2RldiwgTk9QT0xJQ1kpLAorCXJ0aCA9IHJ0X2RzdF9hbGxvYyhkZXZfb3V0LAorCQkJICAgSU5fREVWX0NPTkZfR0VUKGluX2RldiwgTk9QT0xJQ1kpLAogCQkJICAgSU5fREVWX0NPTkZfR0VUKGluX2RldiwgTk9YRlJNKSk7CiAJaWYgKCFydGgpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9CVUZTKTsKIAotCXJ0aC0+cnRfa2V5X2RzdAk9IG9sZGZscDQtPmRhZGRyOwotCXJ0aC0+cnRfdG9zCT0gdG9zOwotCXJ0aC0+cnRfa2V5X3NyYwk9IG9sZGZscDQtPnNhZGRyOwotCXJ0aC0+cnRfb2lmCT0gb2xkZmxwNC0+Zmxvd2k0X29pZjsKLQlydGgtPnJ0X21hcmsgICAgPSBvbGRmbHA0LT5mbG93aTRfbWFyazsKKwlydGgtPmRzdC5vdXRwdXQgPSBpcF9vdXRwdXQ7CisKKwlydGgtPnJ0X2tleV9kc3QJPSBvcmlnX2RhZGRyOworCXJ0aC0+cnRfa2V5X3NyYwk9IG9yaWdfc2FkZHI7CisJcnRoLT5ydF9nZW5pZCA9IHJ0X2dlbmlkKGRldl9uZXQoZGV2X291dCkpOworCXJ0aC0+cnRfZmxhZ3MJPSBmbGFnczsKKwlydGgtPnJ0X3R5cGUJPSB0eXBlOworCXJ0aC0+cnRfa2V5X3Rvcwk9IHRvczsKIAlydGgtPnJ0X2RzdAk9IGZsNC0+ZGFkZHI7CiAJcnRoLT5ydF9zcmMJPSBmbDQtPnNhZGRyOwogCXJ0aC0+cnRfcm91dGVfaWlmID0gMDsKLQlydGgtPnJ0X2lpZgk9IG9sZGZscDQtPmZsb3dpNF9vaWYgPyA6IGRldl9vdXQtPmlmaW5kZXg7Ci0JLyogZ2V0IHJlZmVyZW5jZXMgdG8gdGhlIGRldmljZXMgdGhhdCBhcmUgdG8gYmUgaG9sZCBieSB0aGUgcm91dGluZwotCSAgIGNhY2hlIGVudHJ5ICovCi0JcnRoLT5kc3QuZGV2CT0gZGV2X291dDsKLQlkZXZfaG9sZChkZXZfb3V0KTsKKwlydGgtPnJ0X2lpZgk9IG9yaWdfb2lmID8gOiBkZXZfb3V0LT5pZmluZGV4OworCXJ0aC0+cnRfb2lmCT0gb3JpZ19vaWY7CisJcnRoLT5ydF9tYXJrICAgID0gZmw0LT5mbG93aTRfbWFyazsKIAlydGgtPnJ0X2dhdGV3YXkgPSBmbDQtPmRhZGRyOwogCXJ0aC0+cnRfc3BlY19kc3Q9IGZsNC0+c2FkZHI7Ci0KLQlydGgtPmRzdC5vdXRwdXQ9aXBfb3V0cHV0OwotCXJ0aC0+cnRfZ2VuaWQgPSBydF9nZW5pZChkZXZfbmV0KGRldl9vdXQpKTsKKwlydGgtPnJ0X3BlZXJfZ2VuaWQgPSAwOworCXJ0aC0+cGVlciA9IE5VTEw7CisJcnRoLT5maSA9IE5VTEw7CiAKIAlSVF9DQUNIRV9TVEFUX0lOQyhvdXRfc2xvd190b3QpOwogCkBAIC0yNDMyLDcgKzI0MjIsNyBAQAogI2lmZGVmIENPTkZJR19JUF9NUk9VVEUKIAkJaWYgKHR5cGUgPT0gUlROX01VTFRJQ0FTVCkgewogCQkJaWYgKElOX0RFVl9NRk9SV0FSRChpbl9kZXYpICYmCi0JCQkgICAgIWlwdjRfaXNfbG9jYWxfbXVsdGljYXN0KG9sZGZscDQtPmRhZGRyKSkgeworCQkJICAgICFpcHY0X2lzX2xvY2FsX211bHRpY2FzdChmbDQtPmRhZGRyKSkgewogCQkJCXJ0aC0+ZHN0LmlucHV0ID0gaXBfbXJfaW5wdXQ7CiAJCQkJcnRoLT5kc3Qub3V0cHV0ID0gaXBfbWNfb3V0cHV0OwogCQkJfQpAQCAtMjQ0MCw5ICsyNDMwLDggQEAKICNlbmRpZgogCX0KIAotCXJ0X3NldF9uZXh0aG9wKHJ0aCwgb2xkZmxwNCwgcmVzLCBmaSwgdHlwZSwgMCk7CisJcnRfc2V0X25leHRob3AocnRoLCBmbDQsIHJlcywgZmksIHR5cGUsIDApOwogCi0JcnRoLT5ydF9mbGFncyA9IGZsYWdzOwogCXJldHVybiBydGg7CiB9CiAKQEAgLTI0NTEsMzYgKzI0NDAsMzcgQEAKICAqIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2soKTsKICAqLwogCi1zdGF0aWMgc3RydWN0IHJ0YWJsZSAqaXBfcm91dGVfb3V0cHV0X3Nsb3coc3RydWN0IG5ldCAqbmV0LAotCQkJCQkgICBjb25zdCBzdHJ1Y3QgZmxvd2k0ICpvbGRmbHA0KQorc3RhdGljIHN0cnVjdCBydGFibGUgKmlwX3JvdXRlX291dHB1dF9zbG93KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNCAqZmw0KQogewotCXUzMiB0b3MJPSBSVF9GTF9UT1Mob2xkZmxwNCk7Ci0Jc3RydWN0IGZsb3dpNCBmbDQ7Ci0Jc3RydWN0IGZpYl9yZXN1bHQgcmVzOwotCXVuc2lnbmVkIGludCBmbGFncyA9IDA7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldl9vdXQgPSBOVUxMOworCXUzMiB0b3MJPSBSVF9GTF9UT1MoZmw0KTsKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOworCXN0cnVjdCBmaWJfcmVzdWx0IHJlczsKIAlzdHJ1Y3QgcnRhYmxlICpydGg7CisJX19iZTMyIG9yaWdfZGFkZHI7CisJX19iZTMyIG9yaWdfc2FkZHI7CisJaW50IG9yaWdfb2lmOwogCiAJcmVzLmZpCQk9IE5VTEw7CiAjaWZkZWYgQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUwogCXJlcy5yCQk9IE5VTEw7CiAjZW5kaWYKIAotCWZsNC5mbG93aTRfb2lmID0gb2xkZmxwNC0+Zmxvd2k0X29pZjsKLQlmbDQuZmxvd2k0X2lpZiA9IG5ldC0+bG9vcGJhY2tfZGV2LT5pZmluZGV4OwotCWZsNC5mbG93aTRfbWFyayA9IG9sZGZscDQtPmZsb3dpNF9tYXJrOwotCWZsNC5kYWRkciA9IG9sZGZscDQtPmRhZGRyOwotCWZsNC5zYWRkciA9IG9sZGZscDQtPnNhZGRyOwotCWZsNC5mbG93aTRfdG9zID0gdG9zICYgSVBUT1NfUlRfTUFTSzsKLQlmbDQuZmxvd2k0X3Njb3BlID0gKCh0b3MgJiBSVE9fT05MSU5LKSA/Ci0JCQlSVF9TQ09QRV9MSU5LIDogUlRfU0NPUEVfVU5JVkVSU0UpOworCW9yaWdfZGFkZHIgPSBmbDQtPmRhZGRyOworCW9yaWdfc2FkZHIgPSBmbDQtPnNhZGRyOworCW9yaWdfb2lmID0gZmw0LT5mbG93aTRfb2lmOworCisJZmw0LT5mbG93aTRfaWlmID0gbmV0LT5sb29wYmFja19kZXYtPmlmaW5kZXg7CisJZmw0LT5mbG93aTRfdG9zID0gdG9zICYgSVBUT1NfUlRfTUFTSzsKKwlmbDQtPmZsb3dpNF9zY29wZSA9ICgodG9zICYgUlRPX09OTElOSykgPworCQkJIFJUX1NDT1BFX0xJTksgOiBSVF9TQ09QRV9VTklWRVJTRSk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JaWYgKG9sZGZscDQtPnNhZGRyKSB7CisJaWYgKGZsNC0+c2FkZHIpIHsKIAkJcnRoID0gRVJSX1BUUigtRUlOVkFMKTsKLQkJaWYgKGlwdjRfaXNfbXVsdGljYXN0KG9sZGZscDQtPnNhZGRyKSB8fAotCQkgICAgaXB2NF9pc19sYmNhc3Qob2xkZmxwNC0+c2FkZHIpIHx8Ci0JCSAgICBpcHY0X2lzX3plcm9uZXQob2xkZmxwNC0+c2FkZHIpKQorCQlpZiAoaXB2NF9pc19tdWx0aWNhc3QoZmw0LT5zYWRkcikgfHwKKwkJICAgIGlwdjRfaXNfbGJjYXN0KGZsNC0+c2FkZHIpIHx8CisJCSAgICBpcHY0X2lzX3plcm9uZXQoZmw0LT5zYWRkcikpCiAJCQlnb3RvIG91dDsKIAogCQkvKiBJIHJlbW92ZWQgY2hlY2sgZm9yIG9pZiA9PSBkZXZfb3V0LT5vaWYgaGVyZS4KQEAgLTI0OTEsMTEgKzI0ODEsMTEgQEAKIAkJICAgICAgb2YgYW5vdGhlciBpZmFjZS4gLS1BTksKIAkJICovCiAKLQkJaWYgKG9sZGZscDQtPmZsb3dpNF9vaWYgPT0gMCAmJgotCQkgICAgKGlwdjRfaXNfbXVsdGljYXN0KG9sZGZscDQtPmRhZGRyKSB8fAotCQkgICAgIGlwdjRfaXNfbGJjYXN0KG9sZGZscDQtPmRhZGRyKSkpIHsKKwkJaWYgKGZsNC0+Zmxvd2k0X29pZiA9PSAwICYmCisJCSAgICAoaXB2NF9pc19tdWx0aWNhc3QoZmw0LT5kYWRkcikgfHwKKwkJICAgICBpcHY0X2lzX2xiY2FzdChmbDQtPmRhZGRyKSkpIHsKIAkJCS8qIEl0IGlzIGVxdWl2YWxlbnQgdG8gaW5ldF9hZGRyX3R5cGUoc2FkZHIpID09IFJUTl9MT0NBTCAqLwotCQkJZGV2X291dCA9IF9faXBfZGV2X2ZpbmQobmV0LCBvbGRmbHA0LT5zYWRkciwgZmFsc2UpOworCQkJZGV2X291dCA9IF9faXBfZGV2X2ZpbmQobmV0LCBmbDQtPnNhZGRyLCBmYWxzZSk7CiAJCQlpZiAoZGV2X291dCA9PSBOVUxMKQogCQkJCWdvdG8gb3V0OwogCkBAIC0yNTE0LDIwICsyNTA0LDIwIEBACiAJCQkgICBMdWNraWx5LCB0aGlzIGhhY2sgaXMgZ29vZCB3b3JrYXJvdW5kLgogCQkJICovCiAKLQkJCWZsNC5mbG93aTRfb2lmID0gZGV2X291dC0+aWZpbmRleDsKKwkJCWZsNC0+Zmxvd2k0X29pZiA9IGRldl9vdXQtPmlmaW5kZXg7CiAJCQlnb3RvIG1ha2Vfcm91dGU7CiAJCX0KIAotCQlpZiAoIShvbGRmbHA0LT5mbG93aTRfZmxhZ3MgJiBGTE9XSV9GTEFHX0FOWVNSQykpIHsKKwkJaWYgKCEoZmw0LT5mbG93aTRfZmxhZ3MgJiBGTE9XSV9GTEFHX0FOWVNSQykpIHsKIAkJCS8qIEl0IGlzIGVxdWl2YWxlbnQgdG8gaW5ldF9hZGRyX3R5cGUoc2FkZHIpID09IFJUTl9MT0NBTCAqLwotCQkJaWYgKCFfX2lwX2Rldl9maW5kKG5ldCwgb2xkZmxwNC0+c2FkZHIsIGZhbHNlKSkKKwkJCWlmICghX19pcF9kZXZfZmluZChuZXQsIGZsNC0+c2FkZHIsIGZhbHNlKSkKIAkJCQlnb3RvIG91dDsKIAkJfQogCX0KIAogCi0JaWYgKG9sZGZscDQtPmZsb3dpNF9vaWYpIHsKLQkJZGV2X291dCA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KG5ldCwgb2xkZmxwNC0+Zmxvd2k0X29pZik7CisJaWYgKGZsNC0+Zmxvd2k0X29pZikgeworCQlkZXZfb3V0ID0gZGV2X2dldF9ieV9pbmRleF9yY3UobmV0LCBmbDQtPmZsb3dpNF9vaWYpOwogCQlydGggPSBFUlJfUFRSKC1FTk9ERVYpOwogCQlpZiAoZGV2X291dCA9PSBOVUxMKQogCQkJZ290byBvdXQ7CkBAIC0yNTM3LDM3ICsyNTI3LDM3IEBACiAJCQlydGggPSBFUlJfUFRSKC1FTkVUVU5SRUFDSCk7CiAJCQlnb3RvIG91dDsKIAkJfQotCQlpZiAoaXB2NF9pc19sb2NhbF9tdWx0aWNhc3Qob2xkZmxwNC0+ZGFkZHIpIHx8Ci0JCSAgICBpcHY0X2lzX2xiY2FzdChvbGRmbHA0LT5kYWRkcikpIHsKLQkJCWlmICghZmw0LnNhZGRyKQotCQkJCWZsNC5zYWRkciA9IGluZXRfc2VsZWN0X2FkZHIoZGV2X291dCwgMCwKLQkJCQkJCQkgICAgIFJUX1NDT1BFX0xJTkspOworCQlpZiAoaXB2NF9pc19sb2NhbF9tdWx0aWNhc3QoZmw0LT5kYWRkcikgfHwKKwkJICAgIGlwdjRfaXNfbGJjYXN0KGZsNC0+ZGFkZHIpKSB7CisJCQlpZiAoIWZsNC0+c2FkZHIpCisJCQkJZmw0LT5zYWRkciA9IGluZXRfc2VsZWN0X2FkZHIoZGV2X291dCwgMCwKKwkJCQkJCQkgICAgICBSVF9TQ09QRV9MSU5LKTsKIAkJCWdvdG8gbWFrZV9yb3V0ZTsKIAkJfQotCQlpZiAoIWZsNC5zYWRkcikgewotCQkJaWYgKGlwdjRfaXNfbXVsdGljYXN0KG9sZGZscDQtPmRhZGRyKSkKLQkJCQlmbDQuc2FkZHIgPSBpbmV0X3NlbGVjdF9hZGRyKGRldl9vdXQsIDAsCi0JCQkJCQkJICAgICBmbDQuZmxvd2k0X3Njb3BlKTsKLQkJCWVsc2UgaWYgKCFvbGRmbHA0LT5kYWRkcikKLQkJCQlmbDQuc2FkZHIgPSBpbmV0X3NlbGVjdF9hZGRyKGRldl9vdXQsIDAsCi0JCQkJCQkJICAgICBSVF9TQ09QRV9IT1NUKTsKKwkJaWYgKGZsNC0+c2FkZHIpIHsKKwkJCWlmIChpcHY0X2lzX211bHRpY2FzdChmbDQtPmRhZGRyKSkKKwkJCQlmbDQtPnNhZGRyID0gaW5ldF9zZWxlY3RfYWRkcihkZXZfb3V0LCAwLAorCQkJCQkJCSAgICAgIGZsNC0+Zmxvd2k0X3Njb3BlKTsKKwkJCWVsc2UgaWYgKCFmbDQtPmRhZGRyKQorCQkJCWZsNC0+c2FkZHIgPSBpbmV0X3NlbGVjdF9hZGRyKGRldl9vdXQsIDAsCisJCQkJCQkJICAgICAgUlRfU0NPUEVfSE9TVCk7CiAJCX0KIAl9CiAKLQlpZiAoIWZsNC5kYWRkcikgewotCQlmbDQuZGFkZHIgPSBmbDQuc2FkZHI7Ci0JCWlmICghZmw0LmRhZGRyKQotCQkJZmw0LmRhZGRyID0gZmw0LnNhZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKTsKKwlpZiAoIWZsNC0+ZGFkZHIpIHsKKwkJZmw0LT5kYWRkciA9IGZsNC0+c2FkZHI7CisJCWlmICghZmw0LT5kYWRkcikKKwkJCWZsNC0+ZGFkZHIgPSBmbDQtPnNhZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKTsKIAkJZGV2X291dCA9IG5ldC0+bG9vcGJhY2tfZGV2OwotCQlmbDQuZmxvd2k0X29pZiA9IG5ldC0+bG9vcGJhY2tfZGV2LT5pZmluZGV4OworCQlmbDQtPmZsb3dpNF9vaWYgPSBuZXQtPmxvb3BiYWNrX2Rldi0+aWZpbmRleDsKIAkJcmVzLnR5cGUgPSBSVE5fTE9DQUw7CiAJCWZsYWdzIHw9IFJUQ0ZfTE9DQUw7CiAJCWdvdG8gbWFrZV9yb3V0ZTsKIAl9CiAKLQlpZiAoZmliX2xvb2t1cChuZXQsICZmbDQsICZyZXMpKSB7CisJaWYgKGZpYl9sb29rdXAobmV0LCBmbDQsICZyZXMpKSB7CiAJCXJlcy5maSA9IE5VTEw7Ci0JCWlmIChvbGRmbHA0LT5mbG93aTRfb2lmKSB7CisJCWlmIChmbDQtPmZsb3dpNF9vaWYpIHsKIAkJCS8qIEFwcGFyZW50bHksIHJvdXRpbmcgdGFibGVzIGFyZSB3cm9uZy4gQXNzdW1lLAogCQkJICAgdGhhdCB0aGUgZGVzdGluYXRpb24gaXMgb24gbGluay4KIApAQCAtMjU4Niw5ICsyNTc2LDkgQEAKIAkJCSAgIGxpa2VseSBJUHY2LCBidXQgd2UgZG8gbm90LgogCQkJICovCiAKLQkJCWlmIChmbDQuc2FkZHIgPT0gMCkKLQkJCQlmbDQuc2FkZHIgPSBpbmV0X3NlbGVjdF9hZGRyKGRldl9vdXQsIDAsCi0JCQkJCQkJICAgICBSVF9TQ09QRV9MSU5LKTsKKwkJCWlmIChmbDQtPnNhZGRyID09IDApCisJCQkJZmw0LT5zYWRkciA9IGluZXRfc2VsZWN0X2FkZHIoZGV2X291dCwgMCwKKwkJCQkJCQkgICAgICBSVF9TQ09QRV9MSU5LKTsKIAkJCXJlcy50eXBlID0gUlROX1VOSUNBU1Q7CiAJCQlnb3RvIG1ha2Vfcm91dGU7CiAJCX0KQEAgLTI1OTcsNDIgKzI1ODcsNDUgQEAKIAl9CiAKIAlpZiAocmVzLnR5cGUgPT0gUlROX0xPQ0FMKSB7Ci0JCWlmICghZmw0LnNhZGRyKSB7CisJCWlmICghZmw0LT5zYWRkcikgewogCQkJaWYgKHJlcy5maS0+ZmliX3ByZWZzcmMpCi0JCQkJZmw0LnNhZGRyID0gcmVzLmZpLT5maWJfcHJlZnNyYzsKKwkJCQlmbDQtPnNhZGRyID0gcmVzLmZpLT5maWJfcHJlZnNyYzsKIAkJCWVsc2UKLQkJCQlmbDQuc2FkZHIgPSBmbDQuZGFkZHI7CisJCQkJZmw0LT5zYWRkciA9IGZsNC0+ZGFkZHI7CiAJCX0KIAkJZGV2X291dCA9IG5ldC0+bG9vcGJhY2tfZGV2OwotCQlmbDQuZmxvd2k0X29pZiA9IGRldl9vdXQtPmlmaW5kZXg7CisJCWZsNC0+Zmxvd2k0X29pZiA9IGRldl9vdXQtPmlmaW5kZXg7CiAJCXJlcy5maSA9IE5VTEw7CiAJCWZsYWdzIHw9IFJUQ0ZfTE9DQUw7CiAJCWdvdG8gbWFrZV9yb3V0ZTsKIAl9CiAKICNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRICi0JaWYgKHJlcy5maS0+ZmliX25ocyA+IDEgJiYgZmw0LmZsb3dpNF9vaWYgPT0gMCkKKwlpZiAocmVzLmZpLT5maWJfbmhzID4gMSAmJiBmbDQtPmZsb3dpNF9vaWYgPT0gMCkKIAkJZmliX3NlbGVjdF9tdWx0aXBhdGgoJnJlcyk7CiAJZWxzZQogI2VuZGlmCi0JaWYgKCFyZXMucHJlZml4bGVuICYmIHJlcy50eXBlID09IFJUTl9VTklDQVNUICYmICFmbDQuZmxvd2k0X29pZikKKwlpZiAoIXJlcy5wcmVmaXhsZW4gJiYKKwkgICAgcmVzLnRhYmxlLT50Yl9udW1fZGVmYXVsdCA+IDEgJiYKKwkgICAgcmVzLnR5cGUgPT0gUlROX1VOSUNBU1QgJiYgIWZsNC0+Zmxvd2k0X29pZikKIAkJZmliX3NlbGVjdF9kZWZhdWx0KCZyZXMpOwogCi0JaWYgKCFmbDQuc2FkZHIpCi0JCWZsNC5zYWRkciA9IEZJQl9SRVNfUFJFRlNSQyhuZXQsIHJlcyk7CisJaWYgKCFmbDQtPnNhZGRyKQorCQlmbDQtPnNhZGRyID0gRklCX1JFU19QUkVGU1JDKG5ldCwgcmVzKTsKIAogCWRldl9vdXQgPSBGSUJfUkVTX0RFVihyZXMpOwotCWZsNC5mbG93aTRfb2lmID0gZGV2X291dC0+aWZpbmRleDsKKwlmbDQtPmZsb3dpNF9vaWYgPSBkZXZfb3V0LT5pZmluZGV4OwogCiAKIG1ha2Vfcm91dGU6Ci0JcnRoID0gX19ta3JvdXRlX291dHB1dCgmcmVzLCAmZmw0LCBvbGRmbHA0LCBkZXZfb3V0LCBmbGFncyk7CisJcnRoID0gX19ta3JvdXRlX291dHB1dCgmcmVzLCBmbDQsIG9yaWdfZGFkZHIsIG9yaWdfc2FkZHIsIG9yaWdfb2lmLAorCQkJICAgICAgIGRldl9vdXQsIGZsYWdzKTsKIAlpZiAoIUlTX0VSUihydGgpKSB7CiAJCXVuc2lnbmVkIGludCBoYXNoOwogCi0JCWhhc2ggPSBydF9oYXNoKG9sZGZscDQtPmRhZGRyLCBvbGRmbHA0LT5zYWRkciwgb2xkZmxwNC0+Zmxvd2k0X29pZiwKKwkJaGFzaCA9IHJ0X2hhc2gob3JpZ19kYWRkciwgb3JpZ19zYWRkciwgb3JpZ19vaWYsCiAJCQkgICAgICAgcnRfZ2VuaWQoZGV2X25ldChkZXZfb3V0KSkpOwotCQlydGggPSBydF9pbnRlcm5faGFzaChoYXNoLCBydGgsIE5VTEwsIG9sZGZscDQtPmZsb3dpNF9vaWYpOworCQlydGggPSBydF9pbnRlcm5faGFzaChoYXNoLCBydGgsIE5VTEwsIG9yaWdfb2lmKTsKIAl9CiAKIG91dDoKQEAgLTI2NDAsNyArMjYzMyw3IEBACiAJcmV0dXJuIHJ0aDsKIH0KIAotc3RydWN0IHJ0YWJsZSAqX19pcF9yb3V0ZV9vdXRwdXRfa2V5KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGZsb3dpNCAqZmxwNCkKK3N0cnVjdCBydGFibGUgKl9faXBfcm91dGVfb3V0cHV0X2tleShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93aTQgKmZscDQpCiB7CiAJc3RydWN0IHJ0YWJsZSAqcnRoOwogCXVuc2lnbmVkIGludCBoYXNoOwpAQCAtMjY1OCwxMyArMjY1MSwxNyBAQAogCQkgICAgcnRfaXNfb3V0cHV0X3JvdXRlKHJ0aCkgJiYKIAkJICAgIHJ0aC0+cnRfb2lmID09IGZscDQtPmZsb3dpNF9vaWYgJiYKIAkJICAgIHJ0aC0+cnRfbWFyayA9PSBmbHA0LT5mbG93aTRfbWFyayAmJgotCQkgICAgISgocnRoLT5ydF90b3MgXiBmbHA0LT5mbG93aTRfdG9zKSAmCisJCSAgICAhKChydGgtPnJ0X2tleV90b3MgXiBmbHA0LT5mbG93aTRfdG9zKSAmCiAJCQkgICAgKElQVE9TX1JUX01BU0sgfCBSVE9fT05MSU5LKSkgJiYKIAkJICAgIG5ldF9lcShkZXZfbmV0KHJ0aC0+ZHN0LmRldiksIG5ldCkgJiYKIAkJICAgICFydF9pc19leHBpcmVkKHJ0aCkpIHsKIAkJCWRzdF91c2UoJnJ0aC0+ZHN0LCBqaWZmaWVzKTsKIAkJCVJUX0NBQ0hFX1NUQVRfSU5DKG91dF9oaXQpOwogCQkJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CisJCQlpZiAoIWZscDQtPnNhZGRyKQorCQkJCWZscDQtPnNhZGRyID0gcnRoLT5ydF9zcmM7CisJCQlpZiAoIWZscDQtPmRhZGRyKQorCQkJCWZscDQtPmRhZGRyID0gcnRoLT5ydF9kc3Q7CiAJCQlyZXR1cm4gcnRoOwogCQl9CiAJCVJUX0NBQ0hFX1NUQVRfSU5DKG91dF9obGlzdF9zZWFyY2gpOwpAQCAtMjcwOSw3ICsyNzA2LDcgQEAKIAogc3RydWN0IGRzdF9lbnRyeSAqaXB2NF9ibGFja2hvbGVfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Rfb3JpZykKIHsKLQlzdHJ1Y3QgcnRhYmxlICpydCA9IGRzdF9hbGxvYygmaXB2NF9kc3RfYmxhY2tob2xlX29wcywgMSk7CisJc3RydWN0IHJ0YWJsZSAqcnQgPSBkc3RfYWxsb2MoJmlwdjRfZHN0X2JsYWNraG9sZV9vcHMsIE5VTEwsIDEsIDAsIDApOwogCXN0cnVjdCBydGFibGUgKm9ydCA9IChzdHJ1Y3QgcnRhYmxlICopIGRzdF9vcmlnOwogCiAJaWYgKHJ0KSB7CkBAIC0yNzI2LDcgKzI3MjMsNyBAQAogCiAJCXJ0LT5ydF9rZXlfZHN0ID0gb3J0LT5ydF9rZXlfZHN0OwogCQlydC0+cnRfa2V5X3NyYyA9IG9ydC0+cnRfa2V5X3NyYzsKLQkJcnQtPnJ0X3RvcyA9IG9ydC0+cnRfdG9zOworCQlydC0+cnRfa2V5X3RvcyA9IG9ydC0+cnRfa2V5X3RvczsKIAkJcnQtPnJ0X3JvdXRlX2lpZiA9IG9ydC0+cnRfcm91dGVfaWlmOwogCQlydC0+cnRfaWlmID0gb3J0LT5ydF9paWY7CiAJCXJ0LT5ydF9vaWYgPSBvcnQtPnJ0X29pZjsKQEAgLTI3NjIsMTUgKzI3NTksMTAgQEAKIAlpZiAoSVNfRVJSKHJ0KSkKIAkJcmV0dXJuIHJ0OwogCi0JaWYgKGZscDQtPmZsb3dpNF9wcm90bykgewotCQlpZiAoIWZscDQtPnNhZGRyKQotCQkJZmxwNC0+c2FkZHIgPSBydC0+cnRfc3JjOwotCQlpZiAoIWZscDQtPmRhZGRyKQotCQkJZmxwNC0+ZGFkZHIgPSBydC0+cnRfZHN0OworCWlmIChmbHA0LT5mbG93aTRfcHJvdG8pCiAJCXJ0ID0gKHN0cnVjdCBydGFibGUgKikgeGZybV9sb29rdXAobmV0LCAmcnQtPmRzdCwKIAkJCQkJCSAgIGZsb3dpNF90b19mbG93aShmbHA0KSwKIAkJCQkJCSAgIHNrLCAwKTsKLQl9CiAKIAlyZXR1cm4gcnQ7CiB9CkBAIC0yNzk0LDcgKzI3ODYsNyBAQAogCXItPnJ0bV9mYW1pbHkJID0gQUZfSU5FVDsKIAlyLT5ydG1fZHN0X2xlbgk9IDMyOwogCXItPnJ0bV9zcmNfbGVuCT0gMDsKLQlyLT5ydG1fdG9zCT0gcnQtPnJ0X3RvczsKKwlyLT5ydG1fdG9zCT0gcnQtPnJ0X2tleV90b3M7CiAJci0+cnRtX3RhYmxlCT0gUlRfVEFCTEVfTUFJTjsKIAlOTEFfUFVUX1UzMihza2IsIFJUQV9UQUJMRSwgUlRfVEFCTEVfTUFJTik7CiAJci0+cnRtX3R5cGUJPSBydC0+cnRfdHlwZTsKQEAgLTI4NDgsNyArMjg0MCw5IEBACiAKIAkJaWYgKGlwdjRfaXNfbXVsdGljYXN0KGRzdCkgJiYgIWlwdjRfaXNfbG9jYWxfbXVsdGljYXN0KGRzdCkgJiYKIAkJICAgIElQVjRfREVWQ09ORl9BTEwobmV0LCBNQ19GT1JXQVJESU5HKSkgewotCQkJaW50IGVyciA9IGlwbXJfZ2V0X3JvdXRlKG5ldCwgc2tiLCByLCBub3dhaXQpOworCQkJaW50IGVyciA9IGlwbXJfZ2V0X3JvdXRlKG5ldCwgc2tiLAorCQkJCQkJIHJ0LT5ydF9zcmMsIHJ0LT5ydF9kc3QsCisJCQkJCQkgciwgbm93YWl0KTsKIAkJCWlmIChlcnIgPD0gMCkgewogCQkJCWlmICghbm93YWl0KSB7CiAJCQkJCWlmIChlcnIgPT0gMCkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3N5bmNvb2tpZXMuYyBiL25ldC9pcHY0L3N5bmNvb2tpZXMuYwppbmRleCA4YjQ0YzZkLi4yNjQ2MTQ5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9zeW5jb29raWVzLmMKKysrIGIvbmV0L2lwdjQvc3luY29va2llcy5jCkBAIC0zMjEsMTAgKzMyMSwxMCBAQAogCSAqIHRoZSBBQ0sgY2FycmllcyB0aGUgc2FtZSBvcHRpb25zIGFnYWluIChzZWUgUkZDMTEyMiA0LjIuMy44KQogCSAqLwogCWlmIChvcHQgJiYgb3B0LT5vcHRsZW4pIHsKLQkJaW50IG9wdF9zaXplID0gc2l6ZW9mKHN0cnVjdCBpcF9vcHRpb25zKSArIG9wdC0+b3B0bGVuOworCQlpbnQgb3B0X3NpemUgPSBzaXplb2Yoc3RydWN0IGlwX29wdGlvbnNfcmN1KSArIG9wdC0+b3B0bGVuOwogCiAJCWlyZXEtPm9wdCA9IGttYWxsb2Mob3B0X3NpemUsIEdGUF9BVE9NSUMpOwotCQlpZiAoaXJlcS0+b3B0ICE9IE5VTEwgJiYgaXBfb3B0aW9uc19lY2hvKGlyZXEtPm9wdCwgc2tiKSkgeworCQlpZiAoaXJlcS0+b3B0ICE9IE5VTEwgJiYgaXBfb3B0aW9uc19lY2hvKCZpcmVxLT5vcHQtPm9wdCwgc2tiKSkgewogCQkJa2ZyZWUoaXJlcS0+b3B0KTsKIAkJCWlyZXEtPm9wdCA9IE5VTEw7CiAJCX0KQEAgLTM0NSwxNyArMzQ1LDEzIEBACiAJICogbm8gZWFzeSB3YXkgdG8gZG8gdGhpcy4KIAkgKi8KIAl7Ci0JCXN0cnVjdCBmbG93aTQgZmw0ID0gewotCQkJLmZsb3dpNF9tYXJrID0gc2stPnNrX21hcmssCi0JCQkuZGFkZHIgPSAoKG9wdCAmJiBvcHQtPnNycikgPwotCQkJCSAgb3B0LT5mYWRkciA6IGlyZXEtPnJtdF9hZGRyKSwKLQkJCS5zYWRkciA9IGlyZXEtPmxvY19hZGRyLAotCQkJLmZsb3dpNF90b3MgPSBSVF9DT05OX0ZMQUdTKHNrKSwKLQkJCS5mbG93aTRfcHJvdG8gPSBJUFBST1RPX1RDUCwKLQkJCS5mbG93aTRfZmxhZ3MgPSBpbmV0X3NrX2Zsb3dpX2ZsYWdzKHNrKSwKLQkJCS5mbDRfc3BvcnQgPSB0aC0+ZGVzdCwKLQkJCS5mbDRfZHBvcnQgPSB0aC0+c291cmNlLAotCQl9OworCQlzdHJ1Y3QgZmxvd2k0IGZsNDsKKworCQlmbG93aTRfaW5pdF9vdXRwdXQoJmZsNCwgMCwgc2stPnNrX21hcmssIFJUX0NPTk5fRkxBR1Moc2spLAorCQkJCSAgIFJUX1NDT1BFX1VOSVZFUlNFLCBJUFBST1RPX1RDUCwKKwkJCQkgICBpbmV0X3NrX2Zsb3dpX2ZsYWdzKHNrKSwKKwkJCQkgICAob3B0ICYmIG9wdC0+c3JyKSA/IG9wdC0+ZmFkZHIgOiBpcmVxLT5ybXRfYWRkciwKKwkJCQkgICBpcmVxLT5sb2NfYWRkciwgdGgtPnNvdXJjZSwgdGgtPmRlc3QpOwogCQlzZWN1cml0eV9yZXFfY2xhc3NpZnlfZmxvdyhyZXEsIGZsb3dpNF90b19mbG93aSgmZmw0KSk7CiAJCXJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleShzb2NrX25ldChzayksICZmbDQpOwogCQlpZiAoSVNfRVJSKHJ0KSkgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYwppbmRleCAzMjFlNmU4Li41N2QwNzUyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYworKysgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcWxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L25zcHJveHkuaD4KICNpbmNsdWRlIDxuZXQvc25tcC5oPgogI2luY2x1ZGUgPG5ldC9pY21wLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CkBAIC0yMSw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bmV0L3VkcC5oPgogI2luY2x1ZGUgPG5ldC9jaXBzb19pcHY0Lmg+CiAjaW5jbHVkZSA8bmV0L2luZXRfZnJhZy5oPgorI2luY2x1ZGUgPG5ldC9waW5nLmg+CiAKIHN0YXRpYyBpbnQgemVybzsKIHN0YXRpYyBpbnQgdGNwX3JldHIxX21heCA9IDI1NTsKQEAgLTMwLDYgKzMyLDggQEAKIHN0YXRpYyBpbnQgdGNwX2Fkdl93aW5fc2NhbGVfbWF4ID0gMzE7CiBzdGF0aWMgaW50IGlwX3R0bF9taW4gPSAxOwogc3RhdGljIGludCBpcF90dGxfbWF4ID0gMjU1Oworc3RhdGljIGludCBpcF9waW5nX2dyb3VwX3JhbmdlX21pbltdID0geyAwLCAwIH07CitzdGF0aWMgaW50IGlwX3BpbmdfZ3JvdXBfcmFuZ2VfbWF4W10gPSB7IEdJRF9UX01BWCwgR0lEX1RfTUFYIH07CiAKIC8qIFVwZGF0ZSBzeXN0ZW0gdmlzaWJsZSBJUCBwb3J0IHJhbmdlICovCiBzdGF0aWMgdm9pZCBzZXRfbG9jYWxfcG9ydF9yYW5nZShpbnQgcmFuZ2VbMl0pCkBAIC02OCw2ICs3Miw1MyBAQAogCXJldHVybiByZXQ7CiB9CiAKKwordm9pZCBpbmV0X2dldF9waW5nX2dyb3VwX3JhbmdlX3RhYmxlKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBnaWRfdCAqbG93LCBnaWRfdCAqaGlnaCkKK3sKKwlnaWRfdCAqZGF0YSA9IHRhYmxlLT5kYXRhOworCXVuc2lnbmVkIHNlcTsKKwlkbyB7CisJCXNlcSA9IHJlYWRfc2VxYmVnaW4oJnN5c2N0bF9sb2NhbF9wb3J0cy5sb2NrKTsKKworCQkqbG93ID0gZGF0YVswXTsKKwkJKmhpZ2ggPSBkYXRhWzFdOworCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoJnN5c2N0bF9sb2NhbF9wb3J0cy5sb2NrLCBzZXEpKTsKK30KKworLyogVXBkYXRlIHN5c3RlbSB2aXNpYmxlIElQIHBvcnQgcmFuZ2UgKi8KK3N0YXRpYyB2b2lkIHNldF9waW5nX2dyb3VwX3JhbmdlKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgcmFuZ2VbMl0pCit7CisJZ2lkX3QgKmRhdGEgPSB0YWJsZS0+ZGF0YTsKKwl3cml0ZV9zZXFsb2NrKCZzeXNjdGxfbG9jYWxfcG9ydHMubG9jayk7CisJZGF0YVswXSA9IHJhbmdlWzBdOworCWRhdGFbMV0gPSByYW5nZVsxXTsKKwl3cml0ZV9zZXF1bmxvY2soJnN5c2N0bF9sb2NhbF9wb3J0cy5sb2NrKTsKK30KKworLyogVmFsaWRhdGUgY2hhbmdlcyBmcm9tIC9wcm9jIGludGVyZmFjZS4gKi8KK3N0YXRpYyBpbnQgaXB2NF9waW5nX2dyb3VwX3JhbmdlKGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKKwkJCQkgdm9pZCBfX3VzZXIgKmJ1ZmZlciwKKwkJCQkgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpCit7CisJaW50IHJldDsKKwlnaWRfdCByYW5nZVsyXTsKKwljdGxfdGFibGUgdG1wID0geworCQkuZGF0YSA9ICZyYW5nZSwKKwkJLm1heGxlbiA9IHNpemVvZihyYW5nZSksCisJCS5tb2RlID0gdGFibGUtPm1vZGUsCisJCS5leHRyYTEgPSAmaXBfcGluZ19ncm91cF9yYW5nZV9taW4sCisJCS5leHRyYTIgPSAmaXBfcGluZ19ncm91cF9yYW5nZV9tYXgsCisJfTsKKworCWluZXRfZ2V0X3BpbmdfZ3JvdXBfcmFuZ2VfdGFibGUodGFibGUsIHJhbmdlLCByYW5nZSArIDEpOworCXJldCA9IHByb2NfZG9pbnR2ZWNfbWlubWF4KCZ0bXAsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpOworCisJaWYgKHdyaXRlICYmIHJldCA9PSAwKQorCQlzZXRfcGluZ19ncm91cF9yYW5nZSh0YWJsZSwgcmFuZ2UpOworCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCBwcm9jX3RjcF9jb25nZXN0aW9uX2NvbnRyb2woY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSwKIAkJCQkgICAgICAgdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpCiB7CkBAIC02NzcsNiArNzI4LDEzIEBACiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjCiAJfSwKKwl7CisJCS5wcm9jbmFtZQk9ICJwaW5nX2dyb3VwX3JhbmdlIiwKKwkJLmRhdGEJCT0gJmluaXRfbmV0LmlwdjQuc3lzY3RsX3BpbmdfZ3JvdXBfcmFuZ2UsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGluaXRfbmV0LmlwdjQuc3lzY3RsX3BpbmdfZ3JvdXBfcmFuZ2UpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gaXB2NF9waW5nX2dyb3VwX3JhbmdlLAorCX0sCiAJeyB9CiB9OwogCkBAIC03MTEsOCArNzY5LDE4IEBACiAJCQkmbmV0LT5pcHY0LnN5c2N0bF9pY21wX3JhdGVtYXNrOwogCQl0YWJsZVs2XS5kYXRhID0KIAkJCSZuZXQtPmlwdjQuc3lzY3RsX3J0X2NhY2hlX3JlYnVpbGRfY291bnQ7CisJCXRhYmxlWzddLmRhdGEgPQorCQkJJm5ldC0+aXB2NC5zeXNjdGxfcGluZ19ncm91cF9yYW5nZTsKKwogCX0KIAorCS8qCisJICogU2FuZSBkZWZhdWx0cyAtIG5vYm9keSBtYXkgY3JlYXRlIHBpbmcgc29ja2V0cy4KKwkgKiBCb290IHNjcmlwdHMgc2hvdWxkIHNldCB0aGlzIHRvIGRpc3Ryby1zcGVjaWZpYyBncm91cC4KKwkgKi8KKwluZXQtPmlwdjQuc3lzY3RsX3BpbmdfZ3JvdXBfcmFuZ2VbMF0gPSAxOworCW5ldC0+aXB2NC5zeXNjdGxfcGluZ19ncm91cF9yYW5nZVsxXSA9IDA7CisKIAluZXQtPmlwdjQuc3lzY3RsX3J0X2NhY2hlX3JlYnVpbGRfY291bnQgPSA0OwogCiAJbmV0LT5pcHY0LmlwdjRfaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShuZXQsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IGIyMmQ0NTAuLjA1NGE1OWQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcC5jCisrKyBiL25ldC9pcHY0L3RjcC5jCkBAIC05OTksNyArOTk5LDggQEAKIAkJCQkvKiBXZSBoYXZlIHNvbWUgc3BhY2UgaW4gc2tiIGhlYWQuIFN1cGVyYiEgKi8KIAkJCQlpZiAoY29weSA+IHNrYl90YWlscm9vbShza2IpKQogCQkJCQljb3B5ID0gc2tiX3RhaWxyb29tKHNrYik7Ci0JCQkJaWYgKChlcnIgPSBza2JfYWRkX2RhdGEoc2tiLCBmcm9tLCBjb3B5KSkgIT0gMCkKKwkJCQllcnIgPSBza2JfYWRkX2RhdGFfbm9jYWNoZShzaywgc2tiLCBmcm9tLCBjb3B5KTsKKwkJCQlpZiAoZXJyKQogCQkJCQlnb3RvIGRvX2ZhdWx0OwogCQkJfSBlbHNlIHsKIAkJCQlpbnQgbWVyZ2UgPSAwOwpAQCAtMTA0Miw4ICsxMDQzLDggQEAKIAogCQkJCS8qIFRpbWUgdG8gY29weSBkYXRhLiBXZSBhcmUgY2xvc2UgdG8KIAkJCQkgKiB0aGUgZW5kISAqLwotCQkJCWVyciA9IHNrYl9jb3B5X3RvX3BhZ2Uoc2ssIGZyb20sIHNrYiwgcGFnZSwKLQkJCQkJCSAgICAgICBvZmYsIGNvcHkpOworCQkJCWVyciA9IHNrYl9jb3B5X3RvX3BhZ2Vfbm9jYWNoZShzaywgZnJvbSwgc2tiLAorCQkJCQkJCSAgICAgICBwYWdlLCBvZmYsIGNvcHkpOwogCQkJCWlmIChlcnIpIHsKIAkJCQkJLyogSWYgdGhpcyBwYWdlIHdhcyBuZXcsIGdpdmUgaXQgdG8gdGhlCiAJCQkJCSAqIHNvY2tldCBzbyBpdCBkb2VzIG5vdCBnZXQgbGVha2VkLgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lwdjQuYyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKaW5kZXggZjdlNmMyYy4uM2M4ZDliNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lwdjQuYworKysgYi9uZXQvaXB2NC90Y3BfaXB2NC5jCkBAIC0xNDYsMTMgKzE0NiwxNSBAQAogLyogVGhpcyB3aWxsIGluaXRpYXRlIGFuIG91dGdvaW5nIGNvbm5lY3Rpb24uICovCiBpbnQgdGNwX3Y0X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLCBpbnQgYWRkcl9sZW4pCiB7CisJc3RydWN0IHNvY2thZGRyX2luICp1c2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXVhZGRyOwogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnVzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopdWFkZHI7CiAJX19iZTE2IG9yaWdfc3BvcnQsIG9yaWdfZHBvcnQ7Ci0Jc3RydWN0IHJ0YWJsZSAqcnQ7CiAJX19iZTMyIGRhZGRyLCBuZXh0aG9wOworCXN0cnVjdCBmbG93aTQgKmZsNDsKKwlzdHJ1Y3QgcnRhYmxlICpydDsKIAlpbnQgZXJyOworCXN0cnVjdCBpcF9vcHRpb25zX3JjdSAqaW5ldF9vcHQ7CiAKIAlpZiAoYWRkcl9sZW4gPCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNjEsMTUgKzE2MywxOCBAQAogCQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKIAogCW5leHRob3AgPSBkYWRkciA9IHVzaW4tPnNpbl9hZGRyLnNfYWRkcjsKLQlpZiAoaW5ldC0+b3B0ICYmIGluZXQtPm9wdC0+c3JyKSB7CisJaW5ldF9vcHQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGluZXQtPmluZXRfb3B0LAorCQkJCQkgICAgIHNvY2tfb3duZWRfYnlfdXNlcihzaykpOworCWlmIChpbmV0X29wdCAmJiBpbmV0X29wdC0+b3B0LnNycikgewogCQlpZiAoIWRhZGRyKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCW5leHRob3AgPSBpbmV0LT5vcHQtPmZhZGRyOworCQluZXh0aG9wID0gaW5ldF9vcHQtPm9wdC5mYWRkcjsKIAl9CiAKIAlvcmlnX3Nwb3J0ID0gaW5ldC0+aW5ldF9zcG9ydDsKIAlvcmlnX2Rwb3J0ID0gdXNpbi0+c2luX3BvcnQ7Ci0JcnQgPSBpcF9yb3V0ZV9jb25uZWN0KG5leHRob3AsIGluZXQtPmluZXRfc2FkZHIsCisJZmw0ID0gJmluZXQtPmNvcmsuZmwudS5pcDQ7CisJcnQgPSBpcF9yb3V0ZV9jb25uZWN0KGZsNCwgbmV4dGhvcCwgaW5ldC0+aW5ldF9zYWRkciwKIAkJCSAgICAgIFJUX0NPTk5fRkxBR1Moc2spLCBzay0+c2tfYm91bmRfZGV2X2lmLAogCQkJICAgICAgSVBQUk9UT19UQ1AsCiAJCQkgICAgICBvcmlnX3Nwb3J0LCBvcmlnX2Rwb3J0LCBzaywgdHJ1ZSk7CkBAIC0xODUsMTEgKzE5MCwxMSBAQAogCQlyZXR1cm4gLUVORVRVTlJFQUNIOwogCX0KIAotCWlmICghaW5ldC0+b3B0IHx8ICFpbmV0LT5vcHQtPnNycikKLQkJZGFkZHIgPSBydC0+cnRfZHN0OworCWlmICghaW5ldF9vcHQgfHwgIWluZXRfb3B0LT5vcHQuc3JyKQorCQlkYWRkciA9IGZsNC0+ZGFkZHI7CiAKIAlpZiAoIWluZXQtPmluZXRfc2FkZHIpCi0JCWluZXQtPmluZXRfc2FkZHIgPSBydC0+cnRfc3JjOworCQlpbmV0LT5pbmV0X3NhZGRyID0gZmw0LT5zYWRkcjsKIAlpbmV0LT5pbmV0X3Jjdl9zYWRkciA9IGluZXQtPmluZXRfc2FkZHI7CiAKIAlpZiAodHAtPnJ4X29wdC50c19yZWNlbnRfc3RhbXAgJiYgaW5ldC0+aW5ldF9kYWRkciAhPSBkYWRkcikgewpAQCAtMjAwLDggKzIwNSw4IEBACiAJfQogCiAJaWYgKHRjcF9kZWF0aF9yb3cuc3lzY3RsX3R3X3JlY3ljbGUgJiYKLQkgICAgIXRwLT5yeF9vcHQudHNfcmVjZW50X3N0YW1wICYmIHJ0LT5ydF9kc3QgPT0gZGFkZHIpIHsKLQkJc3RydWN0IGluZXRfcGVlciAqcGVlciA9IHJ0X2dldF9wZWVyKHJ0KTsKKwkgICAgIXRwLT5yeF9vcHQudHNfcmVjZW50X3N0YW1wICYmIGZsNC0+ZGFkZHIgPT0gZGFkZHIpIHsKKwkJc3RydWN0IGluZXRfcGVlciAqcGVlciA9IHJ0X2dldF9wZWVyKHJ0LCBmbDQtPmRhZGRyKTsKIAkJLyoKIAkJICogVkoncyBpZGVhLiBXZSBzYXZlIGxhc3QgdGltZXN0YW1wIHNlZW4gZnJvbQogCQkgKiB0aGUgZGVzdGluYXRpb24gaW4gcGVlciB0YWJsZSwgd2hlbiBlbnRlcmluZyBzdGF0ZQpAQCAtMjIxLDggKzIyNiw4IEBACiAJaW5ldC0+aW5ldF9kYWRkciA9IGRhZGRyOwogCiAJaW5ldF9jc2soc2spLT5pY3NrX2V4dF9oZHJfbGVuID0gMDsKLQlpZiAoaW5ldC0+b3B0KQotCQlpbmV0X2NzayhzayktPmljc2tfZXh0X2hkcl9sZW4gPSBpbmV0LT5vcHQtPm9wdGxlbjsKKwlpZiAoaW5ldF9vcHQpCisJCWluZXRfY3NrKHNrKS0+aWNza19leHRfaGRyX2xlbiA9IGluZXRfb3B0LT5vcHQub3B0bGVuOwogCiAJdHAtPnJ4X29wdC5tc3NfY2xhbXAgPSBUQ1BfTVNTX0RFRkFVTFQ7CiAKQEAgLTIzNiw4ICsyNDEsNyBAQAogCWlmIChlcnIpCiAJCWdvdG8gZmFpbHVyZTsKIAotCXJ0ID0gaXBfcm91dGVfbmV3cG9ydHMocnQsIElQUFJPVE9fVENQLAotCQkJICAgICAgIG9yaWdfc3BvcnQsIG9yaWdfZHBvcnQsCisJcnQgPSBpcF9yb3V0ZV9uZXdwb3J0cyhmbDQsIHJ0LCBvcmlnX3Nwb3J0LCBvcmlnX2Rwb3J0LAogCQkJICAgICAgIGluZXQtPmluZXRfc3BvcnQsIGluZXQtPmluZXRfZHBvcnQsIHNrKTsKIAlpZiAoSVNfRVJSKHJ0KSkgewogCQllcnIgPSBQVFJfRVJSKHJ0KTsKQEAgLTI3OSw3ICsyODMsNyBAQAogLyoKICAqIFRoaXMgcm91dGluZSBkb2VzIHBhdGggbXR1IGRpc2NvdmVyeSBhcyBkZWZpbmVkIGluIFJGQzExOTEuCiAgKi8KLXN0YXRpYyB2b2lkIGRvX3BtdHVfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwaGRyICppcGgsIHUzMiBtdHUpCitzdGF0aWMgdm9pZCBkb19wbXR1X2Rpc2NvdmVyeShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoLCB1MzIgbXR1KQogewogCXN0cnVjdCBkc3RfZW50cnkgKmRzdDsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CkBAIC0zNDEsNyArMzQ1LDcgQEAKIAogdm9pZCB0Y3BfdjRfZXJyKHN0cnVjdCBza19idWZmICppY21wX3NrYiwgdTMyIGluZm8pCiB7Ci0Jc3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopaWNtcF9za2ItPmRhdGE7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGggPSAoY29uc3Qgc3RydWN0IGlwaGRyICopaWNtcF9za2ItPmRhdGE7CiAJc3RydWN0IHRjcGhkciAqdGggPSAoc3RydWN0IHRjcGhkciAqKShpY21wX3NrYi0+ZGF0YSArIChpcGgtPmlobCA8PCAyKSk7CiAJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrOwogCXN0cnVjdCB0Y3Bfc29jayAqdHA7CkBAIC02NDcsNyArNjUxLDcgQEAKIAlhcmcuZmxhZ3MgPSAoc2sgJiYgaW5ldF9zayhzayktPnRyYW5zcGFyZW50KSA/IElQX1JFUExZX0FSR19OT1NSQ0NIRUNLIDogMDsKIAogCW5ldCA9IGRldl9uZXQoc2tiX2RzdChza2IpLT5kZXYpOwotCWlwX3NlbmRfcmVwbHkobmV0LT5pcHY0LnRjcF9zb2NrLCBza2IsCisJaXBfc2VuZF9yZXBseShuZXQtPmlwdjQudGNwX3NvY2ssIHNrYiwgaXBfaGRyKHNrYiktPnNhZGRyLAogCQkgICAgICAmYXJnLCBhcmcuaW92WzBdLmlvdl9sZW4pOwogCiAJVENQX0lOQ19TVEFUU19CSChuZXQsIFRDUF9NSUJfT1VUU0VHUyk7CkBAIC03MjIsNyArNzI2LDcgQEAKIAlpZiAob2lmKQogCQlhcmcuYm91bmRfZGV2X2lmID0gb2lmOwogCi0JaXBfc2VuZF9yZXBseShuZXQtPmlwdjQudGNwX3NvY2ssIHNrYiwKKwlpcF9zZW5kX3JlcGx5KG5ldC0+aXB2NC50Y3Bfc29jaywgc2tiLCBpcF9oZHIoc2tiKS0+c2FkZHIsCiAJCSAgICAgICZhcmcsIGFyZy5pb3ZbMF0uaW92X2xlbik7CiAKIAlUQ1BfSU5DX1NUQVRTX0JIKG5ldCwgVENQX01JQl9PVVRTRUdTKTsKQEAgLTc2NSwxMSArNzY5LDEyIEBACiAJCQkgICAgICBzdHJ1Y3QgcmVxdWVzdF92YWx1ZXMgKnJ2cCkKIHsKIAljb25zdCBzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgKmlyZXEgPSBpbmV0X3JzayhyZXEpOworCXN0cnVjdCBmbG93aTQgZmw0OwogCWludCBlcnIgPSAtMTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqIHNrYjsKIAogCS8qIEZpcnN0LCBncmFiIGEgcm91dGUuICovCi0JaWYgKCFkc3QgJiYgKGRzdCA9IGluZXRfY3NrX3JvdXRlX3JlcShzaywgcmVxKSkgPT0gTlVMTCkKKwlpZiAoIWRzdCAmJiAoZHN0ID0gaW5ldF9jc2tfcm91dGVfcmVxKHNrLCAmZmw0LCByZXEpKSA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CiAKIAlza2IgPSB0Y3BfbWFrZV9zeW5hY2soc2ssIGRzdCwgcmVxLCBydnApOwpAQCAtODIwLDE3ICs4MjUsMTggQEAKIC8qCiAgKiBTYXZlIGFuZCBjb21waWxlIElQdjQgb3B0aW9ucyBpbnRvIHRoZSByZXF1ZXN0X3NvY2sgaWYgbmVlZGVkLgogICovCi1zdGF0aWMgc3RydWN0IGlwX29wdGlvbnMgKnRjcF92NF9zYXZlX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLAotCQkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHN0cnVjdCBpcF9vcHRpb25zX3JjdSAqdGNwX3Y0X3NhdmVfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGlwX29wdGlvbnMgKm9wdCA9ICYoSVBDQihza2IpLT5vcHQpOwotCXN0cnVjdCBpcF9vcHRpb25zICpkb3B0ID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0ID0gJihJUENCKHNrYiktPm9wdCk7CisJc3RydWN0IGlwX29wdGlvbnNfcmN1ICpkb3B0ID0gTlVMTDsKIAogCWlmIChvcHQgJiYgb3B0LT5vcHRsZW4pIHsKLQkJaW50IG9wdF9zaXplID0gb3B0bGVuZ3RoKG9wdCk7CisJCWludCBvcHRfc2l6ZSA9IHNpemVvZigqZG9wdCkgKyBvcHQtPm9wdGxlbjsKKwogCQlkb3B0ID0ga21hbGxvYyhvcHRfc2l6ZSwgR0ZQX0FUT01JQyk7CiAJCWlmIChkb3B0KSB7Ci0JCQlpZiAoaXBfb3B0aW9uc19lY2hvKGRvcHQsIHNrYikpIHsKKwkJCWlmIChpcF9vcHRpb25zX2VjaG8oJmRvcHQtPm9wdCwgc2tiKSkgewogCQkJCWtmcmVlKGRvcHQpOwogCQkJCWRvcHQgPSBOVUxMOwogCQkJfQpAQCAtMTMzMyw2ICsxMzM5LDcgQEAKIAkJcmVxLT5jb29raWVfdHMgPSB0bXBfb3B0LnRzdGFtcF9vazsKIAl9IGVsc2UgaWYgKCFpc24pIHsKIAkJc3RydWN0IGluZXRfcGVlciAqcGVlciA9IE5VTEw7CisJCXN0cnVjdCBmbG93aTQgZmw0OwogCiAJCS8qIFZKJ3MgaWRlYS4gV2Ugc2F2ZSBsYXN0IHRpbWVzdGFtcCBzZWVuCiAJCSAqIGZyb20gdGhlIGRlc3RpbmF0aW9uIGluIHBlZXIgdGFibGUsIHdoZW4gZW50ZXJpbmcKQEAgLTEzNDUsOSArMTM1Miw5IEBACiAJCSAqLwogCQlpZiAodG1wX29wdC5zYXdfdHN0YW1wICYmCiAJCSAgICB0Y3BfZGVhdGhfcm93LnN5c2N0bF90d19yZWN5Y2xlICYmCi0JCSAgICAoZHN0ID0gaW5ldF9jc2tfcm91dGVfcmVxKHNrLCByZXEpKSAhPSBOVUxMICYmCi0JCSAgICAocGVlciA9IHJ0X2dldF9wZWVyKChzdHJ1Y3QgcnRhYmxlICopZHN0KSkgIT0gTlVMTCAmJgotCQkgICAgcGVlci0+ZGFkZHIuYWRkci5hNCA9PSBzYWRkcikgeworCQkgICAgKGRzdCA9IGluZXRfY3NrX3JvdXRlX3JlcShzaywgJmZsNCwgcmVxKSkgIT0gTlVMTCAmJgorCQkgICAgZmw0LmRhZGRyID09IHNhZGRyICYmCisJCSAgICAocGVlciA9IHJ0X2dldF9wZWVyKChzdHJ1Y3QgcnRhYmxlICopZHN0LCBmbDQuZGFkZHIpKSAhPSBOVUxMKSB7CiAJCQlpbmV0X3BlZXJfcmVmY2hlY2socGVlcik7CiAJCQlpZiAoKHUzMilnZXRfc2Vjb25kcygpIC0gcGVlci0+dGNwX3RzX3N0YW1wIDwgVENQX1BBV1NfTVNMICYmCiAJCQkgICAgKHMzMikocGVlci0+dGNwX3RzIC0gcmVxLT50c19yZWNlbnQpID4KQEAgLTE0MTEsMTkgKzE0MTgsMTYgQEAKICNpZmRlZiBDT05GSUdfVENQX01ENVNJRwogCXN0cnVjdCB0Y3BfbWQ1c2lnX2tleSAqa2V5OwogI2VuZGlmCisJc3RydWN0IGlwX29wdGlvbnNfcmN1ICppbmV0X29wdDsKIAogCWlmIChza19hY2NlcHRxX2lzX2Z1bGwoc2spKQogCQlnb3RvIGV4aXRfb3ZlcmZsb3c7CiAKLQlpZiAoIWRzdCAmJiAoZHN0ID0gaW5ldF9jc2tfcm91dGVfcmVxKHNrLCByZXEpKSA9PSBOVUxMKQotCQlnb3RvIGV4aXQ7Ci0KIAluZXdzayA9IHRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZChzaywgcmVxLCBza2IpOwogCWlmICghbmV3c2spCiAJCWdvdG8gZXhpdF9ub25ld3NrOwogCiAJbmV3c2stPnNrX2dzb190eXBlID0gU0tCX0dTT19UQ1BWNDsKLQlza19zZXR1cF9jYXBzKG5ld3NrLCBkc3QpOwogCiAJbmV3dHAJCSAgICAgID0gdGNwX3NrKG5ld3NrKTsKIAluZXdpbmV0CQkgICAgICA9IGluZXRfc2sobmV3c2spOwpAQCAtMTQzMSwxNSArMTQzNSwyMSBAQAogCW5ld2luZXQtPmluZXRfZGFkZHIgICA9IGlyZXEtPnJtdF9hZGRyOwogCW5ld2luZXQtPmluZXRfcmN2X3NhZGRyID0gaXJlcS0+bG9jX2FkZHI7CiAJbmV3aW5ldC0+aW5ldF9zYWRkcgkgICAgICA9IGlyZXEtPmxvY19hZGRyOwotCW5ld2luZXQtPm9wdAkgICAgICA9IGlyZXEtPm9wdDsKKwlpbmV0X29wdAkgICAgICA9IGlyZXEtPm9wdDsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmV3aW5ldC0+aW5ldF9vcHQsIGluZXRfb3B0KTsKIAlpcmVxLT5vcHQJICAgICAgPSBOVUxMOwogCW5ld2luZXQtPm1jX2luZGV4ICAgICA9IGluZXRfaWlmKHNrYik7CiAJbmV3aW5ldC0+bWNfdHRsCSAgICAgID0gaXBfaGRyKHNrYiktPnR0bDsKIAlpbmV0X2NzayhuZXdzayktPmljc2tfZXh0X2hkcl9sZW4gPSAwOwotCWlmIChuZXdpbmV0LT5vcHQpCi0JCWluZXRfY3NrKG5ld3NrKS0+aWNza19leHRfaGRyX2xlbiA9IG5ld2luZXQtPm9wdC0+b3B0bGVuOworCWlmIChpbmV0X29wdCkKKwkJaW5ldF9jc2sobmV3c2spLT5pY3NrX2V4dF9oZHJfbGVuID0gaW5ldF9vcHQtPm9wdC5vcHRsZW47CiAJbmV3aW5ldC0+aW5ldF9pZCA9IG5ld3RwLT53cml0ZV9zZXEgXiBqaWZmaWVzOwogCisJaWYgKCFkc3QgJiYgKGRzdCA9IGluZXRfY3NrX3JvdXRlX2NoaWxkX3NvY2soc2ssIG5ld3NrLCByZXEpKSA9PSBOVUxMKQorCQlnb3RvIHB1dF9hbmRfZXhpdDsKKworCXNrX3NldHVwX2NhcHMobmV3c2ssIGRzdCk7CisKIAl0Y3BfbXR1cF9pbml0KG5ld3NrKTsKIAl0Y3Bfc3luY19tc3MobmV3c2ssIGRzdF9tdHUoZHN0KSk7CiAJbmV3dHAtPmFkdm1zcyA9IGRzdF9tZXRyaWNfYWR2bXNzKGRzdCk7CkBAIC0xNDY3LDEwICsxNDc3LDggQEAKIAl9CiAjZW5kaWYKIAotCWlmIChfX2luZXRfaW5oZXJpdF9wb3J0KHNrLCBuZXdzaykgPCAwKSB7Ci0JCXNvY2tfcHV0KG5ld3NrKTsKLQkJZ290byBleGl0OwotCX0KKwlpZiAoX19pbmV0X2luaGVyaXRfcG9ydChzaywgbmV3c2spIDwgMCkKKwkJZ290byBwdXRfYW5kX2V4aXQ7CiAJX19pbmV0X2hhc2hfbm9saXN0ZW4obmV3c2ssIE5VTEwpOwogCiAJcmV0dXJuIG5ld3NrOwpAQCAtMTQ4Miw2ICsxNDkwLDkgQEAKIGV4aXQ6CiAJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIExJTlVYX01JQl9MSVNURU5EUk9QUyk7CiAJcmV0dXJuIE5VTEw7CitwdXRfYW5kX2V4aXQ6CisJc29ja19wdXQobmV3c2spOworCWdvdG8gZXhpdDsKIH0KIEVYUE9SVF9TWU1CT0wodGNwX3Y0X3N5bl9yZWN2X3NvY2spOwogCkBAIC0xNzY0LDEyICsxNzc1LDEzIEBACiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCXN0cnVjdCBpbmV0X3BlZXIgKnBlZXI7CiAKLQlpZiAoIXJ0IHx8IHJ0LT5ydF9kc3QgIT0gaW5ldC0+aW5ldF9kYWRkcikgeworCWlmICghcnQgfHwKKwkgICAgaW5ldC0+Y29yay5mbC51LmlwNC5kYWRkciAhPSBpbmV0LT5pbmV0X2RhZGRyKSB7CiAJCXBlZXIgPSBpbmV0X2dldHBlZXJfdjQoaW5ldC0+aW5ldF9kYWRkciwgMSk7CiAJCSpyZWxlYXNlX2l0ID0gdHJ1ZTsKIAl9IGVsc2UgewogCQlpZiAoIXJ0LT5wZWVyKQotCQkJcnRfYmluZF9wZWVyKHJ0LCAxKTsKKwkJCXJ0X2JpbmRfcGVlcihydCwgaW5ldC0+aW5ldF9kYWRkciwgMSk7CiAJCXBlZXIgPSBydC0+cGVlcjsKIAkJKnJlbGVhc2VfaXQgPSBmYWxzZTsKIAl9CkBAIC0yNTI3LDcgKzI1MzksNyBAQAogCiBzdHJ1Y3Qgc2tfYnVmZiAqKnRjcDRfZ3JvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBpcGhkciAqaXBoID0gc2tiX2dyb19uZXR3b3JrX2hlYWRlcihza2IpOworCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoID0gc2tiX2dyb19uZXR3b3JrX2hlYWRlcihza2IpOwogCiAJc3dpdGNoIChza2ItPmlwX3N1bW1lZCkgewogCWNhc2UgQ0hFQ0tTVU1fQ09NUExFVEU6CkBAIC0yNTQ4LDcgKzI1NjAsNyBAQAogCiBpbnQgdGNwNF9ncm9fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpOworCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7CiAJc3RydWN0IHRjcGhkciAqdGggPSB0Y3BfaGRyKHNrYik7CiAKIAl0aC0+Y2hlY2sgPSB+dGNwX3Y0X2NoZWNrKHNrYi0+bGVuIC0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwppbmRleCAxNzM4OGM3Li44ODJlMGIwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCkBAIC04OTksNyArODk5LDcgQEAKIAkJVENQX0FERF9TVEFUUyhzb2NrX25ldChzayksIFRDUF9NSUJfT1VUU0VHUywKIAkJCSAgICAgIHRjcF9za2JfcGNvdW50KHNrYikpOwogCi0JZXJyID0gaWNzay0+aWNza19hZl9vcHMtPnF1ZXVlX3htaXQoc2tiKTsKKwllcnIgPSBpY3NrLT5pY3NrX2FmX29wcy0+cXVldWVfeG1pdChza2IsICZpbmV0LT5jb3JrLmZsKTsKIAlpZiAobGlrZWx5KGVyciA8PSAwKSkKIAkJcmV0dXJuIGVycjsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdWRwLmMgYi9uZXQvaXB2NC91ZHAuYwppbmRleCBmODdhOGViLi41OTkzNzRmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC91ZHAuYworKysgYi9uZXQvaXB2NC91ZHAuYwpAQCAtNTc4LDcgKzU3OCw3IEBACiB2b2lkIF9fdWRwNF9saWJfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBpbmZvLCBzdHJ1Y3QgdWRwX3RhYmxlICp1ZHB0YWJsZSkKIHsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0OwotCXN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYi0+ZGF0YTsKKwljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCA9IChjb25zdCBzdHJ1Y3QgaXBoZHIgKilza2ItPmRhdGE7CiAJc3RydWN0IHVkcGhkciAqdWggPSAoc3RydWN0IHVkcGhkciAqKShza2ItPmRhdGErKGlwaC0+aWhsPDwyKSk7CiAJY29uc3QgaW50IHR5cGUgPSBpY21wX2hkcihza2IpLT50eXBlOwogCWNvbnN0IGludCBjb2RlID0gaWNtcF9oZHIoc2tiKS0+Y29kZTsKQEAgLTcwNiwxMiArNzA2LDExIEBACiAJfQogfQogCi1zdGF0aWMgaW50IHVkcF9zZW5kX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgZGFkZHIsIF9fYmUzMiBkcG9ydCkKK3N0YXRpYyBpbnQgdWRwX3NlbmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmbG93aTQgKmZsNCkKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBza2ItPnNrOwogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAlzdHJ1Y3QgdWRwaGRyICp1aDsKLQlzdHJ1Y3QgcnRhYmxlICpydCA9IChzdHJ1Y3QgcnRhYmxlICopc2tiX2RzdChza2IpOwogCWludCBlcnIgPSAwOwogCWludCBpc191ZHBsaXRlID0gSVNfVURQTElURShzayk7CiAJaW50IG9mZnNldCA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7CkBAIC03MjMsNyArNzIyLDcgQEAKIAkgKi8KIAl1aCA9IHVkcF9oZHIoc2tiKTsKIAl1aC0+c291cmNlID0gaW5ldC0+aW5ldF9zcG9ydDsKLQl1aC0+ZGVzdCA9IGRwb3J0OworCXVoLT5kZXN0ID0gZmw0LT5mbDRfZHBvcnQ7CiAJdWgtPmxlbiA9IGh0b25zKGxlbik7CiAJdWgtPmNoZWNrID0gMDsKIApAQCAtNzM3LDE0ICs3MzYsMTQgQEAKIAogCX0gZWxzZSBpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgeyAvKiBVRFAgaGFyZHdhcmUgY3N1bSAqLwogCi0JCXVkcDRfaHdjc3VtKHNrYiwgcnQtPnJ0X3NyYywgZGFkZHIpOworCQl1ZHA0X2h3Y3N1bShza2IsIGZsNC0+c2FkZHIsIGZsNC0+ZGFkZHIpOwogCQlnb3RvIHNlbmQ7CiAKIAl9IGVsc2UKIAkJY3N1bSA9IHVkcF9jc3VtKHNrYik7CiAKIAkvKiBhZGQgcHJvdG9jb2wtZGVwZW5kZW50IHBzZXVkby1oZWFkZXIgKi8KLQl1aC0+Y2hlY2sgPSBjc3VtX3RjcHVkcF9tYWdpYyhydC0+cnRfc3JjLCBkYWRkciwgbGVuLAorCXVoLT5jaGVjayA9IGNzdW1fdGNwdWRwX21hZ2ljKGZsNC0+c2FkZHIsIGZsNC0+ZGFkZHIsIGxlbiwKIAkJCQkgICAgICBzay0+c2tfcHJvdG9jb2wsIGNzdW0pOwogCWlmICh1aC0+Y2hlY2sgPT0gMCkKIAkJdWgtPmNoZWNrID0gQ1NVTV9NQU5HTEVEXzA7CkBAIC03NzQsMTEgKzc3MywxMSBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IGVyciA9IDA7CiAKLQlza2IgPSBpcF9maW5pc2hfc2tiKHNrKTsKKwlza2IgPSBpcF9maW5pc2hfc2tiKHNrLCBmbDQpOwogCWlmICghc2tiKQogCQlnb3RvIG91dDsKIAotCWVyciA9IHVkcF9zZW5kX3NrYihza2IsIGZsNC0+ZGFkZHIsIGZsNC0+Zmw0X2Rwb3J0KTsKKwllcnIgPSB1ZHBfc2VuZF9za2Ioc2tiLCBmbDQpOwogCiBvdXQ6CiAJdXAtPmxlbiA9IDA7CkBAIC03OTEsNiArNzkwLDcgQEAKIHsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAJc3RydWN0IHVkcF9zb2NrICp1cCA9IHVkcF9zayhzayk7CisJc3RydWN0IGZsb3dpNCBmbDRfc3RhY2s7CiAJc3RydWN0IGZsb3dpNCAqZmw0OwogCWludCB1bGVuID0gbGVuOwogCXN0cnVjdCBpcGNtX2Nvb2tpZSBpcGM7CkBAIC04MDQsNiArODA0LDcgQEAKIAlpbnQgY29ya3JlcSA9IHVwLT5jb3JrZmxhZyB8fCBtc2ctPm1zZ19mbGFncyZNU0dfTU9SRTsKIAlpbnQgKCpnZXRmcmFnKSh2b2lkICosIGNoYXIgKiwgaW50LCBpbnQsIGludCwgc3RydWN0IHNrX2J1ZmYgKik7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaXBfb3B0aW9uc19kYXRhIG9wdF9jb3B5OwogCiAJaWYgKGxlbiA+IDB4RkZGRikKIAkJcmV0dXJuIC1FTVNHU0laRTsKQEAgLTgyMCw2ICs4MjEsNyBAQAogCiAJZ2V0ZnJhZyA9IGlzX3VkcGxpdGUgPyB1ZHBsaXRlX2dldGZyYWcgOiBpcF9nZW5lcmljX2dldGZyYWc7CiAKKwlmbDQgPSAmaW5ldC0+Y29yay5mbC51LmlwNDsKIAlpZiAodXAtPnBlbmRpbmcpIHsKIAkJLyoKIAkJICogVGhlcmUgYXJlIHBlbmRpbmcgZnJhbWVzLgpAQCAtODc3LDIyICs4NzksMzIgQEAKIAkJCWZyZWUgPSAxOwogCQljb25uZWN0ZWQgPSAwOwogCX0KLQlpZiAoIWlwYy5vcHQpCi0JCWlwYy5vcHQgPSBpbmV0LT5vcHQ7CisJaWYgKCFpcGMub3B0KSB7CisJCXN0cnVjdCBpcF9vcHRpb25zX3JjdSAqaW5ldF9vcHQ7CisKKwkJcmN1X3JlYWRfbG9jaygpOworCQlpbmV0X29wdCA9IHJjdV9kZXJlZmVyZW5jZShpbmV0LT5pbmV0X29wdCk7CisJCWlmIChpbmV0X29wdCkgeworCQkJbWVtY3B5KCZvcHRfY29weSwgaW5ldF9vcHQsCisJCQkgICAgICAgc2l6ZW9mKCppbmV0X29wdCkgKyBpbmV0X29wdC0+b3B0Lm9wdGxlbik7CisJCQlpcGMub3B0ID0gJm9wdF9jb3B5Lm9wdDsKKwkJfQorCQlyY3VfcmVhZF91bmxvY2soKTsKKwl9CiAKIAlzYWRkciA9IGlwYy5hZGRyOwogCWlwYy5hZGRyID0gZmFkZHIgPSBkYWRkcjsKIAotCWlmIChpcGMub3B0ICYmIGlwYy5vcHQtPnNycikgeworCWlmIChpcGMub3B0ICYmIGlwYy5vcHQtPm9wdC5zcnIpIHsKIAkJaWYgKCFkYWRkcikKIAkJCXJldHVybiAtRUlOVkFMOwotCQlmYWRkciA9IGlwYy5vcHQtPmZhZGRyOworCQlmYWRkciA9IGlwYy5vcHQtPm9wdC5mYWRkcjsKIAkJY29ubmVjdGVkID0gMDsKIAl9CiAJdG9zID0gUlRfVE9TKGluZXQtPnRvcyk7CiAJaWYgKHNvY2tfZmxhZyhzaywgU09DS19MT0NBTFJPVVRFKSB8fAogCSAgICAobXNnLT5tc2dfZmxhZ3MgJiBNU0dfRE9OVFJPVVRFKSB8fAotCSAgICAoaXBjLm9wdCAmJiBpcGMub3B0LT5pc19zdHJpY3Ryb3V0ZSkpIHsKKwkgICAgKGlwYy5vcHQgJiYgaXBjLm9wdC0+b3B0LmlzX3N0cmljdHJvdXRlKSkgewogCQl0b3MgfD0gUlRPX09OTElOSzsKIAkJY29ubmVjdGVkID0gMDsKIAl9CkBAIC05MDksMjIgKzkyMSwxNiBAQAogCQlydCA9IChzdHJ1Y3QgcnRhYmxlICopc2tfZHN0X2NoZWNrKHNrLCAwKTsKIAogCWlmIChydCA9PSBOVUxMKSB7Ci0JCXN0cnVjdCBmbG93aTQgZmw0ID0gewotCQkJLmZsb3dpNF9vaWYgPSBpcGMub2lmLAotCQkJLmZsb3dpNF9tYXJrID0gc2stPnNrX21hcmssCi0JCQkuZGFkZHIgPSBmYWRkciwKLQkJCS5zYWRkciA9IHNhZGRyLAotCQkJLmZsb3dpNF90b3MgPSB0b3MsCi0JCQkuZmxvd2k0X3Byb3RvID0gc2stPnNrX3Byb3RvY29sLAotCQkJLmZsb3dpNF9mbGFncyA9IChpbmV0X3NrX2Zsb3dpX2ZsYWdzKHNrKSB8Ci0JCQkJCSBGTE9XSV9GTEFHX0NBTl9TTEVFUCksCi0JCQkuZmw0X3Nwb3J0ID0gaW5ldC0+aW5ldF9zcG9ydCwKLQkJCS5mbDRfZHBvcnQgPSBkcG9ydCwKLQkJfTsKIAkJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwogCi0JCXNlY3VyaXR5X3NrX2NsYXNzaWZ5X2Zsb3coc2ssIGZsb3dpNF90b19mbG93aSgmZmw0KSk7Ci0JCXJ0ID0gaXBfcm91dGVfb3V0cHV0X2Zsb3cobmV0LCAmZmw0LCBzayk7CisJCWZsNCA9ICZmbDRfc3RhY2s7CisJCWZsb3dpNF9pbml0X291dHB1dChmbDQsIGlwYy5vaWYsIHNrLT5za19tYXJrLCB0b3MsCisJCQkJICAgUlRfU0NPUEVfVU5JVkVSU0UsIHNrLT5za19wcm90b2NvbCwKKwkJCQkgICBpbmV0X3NrX2Zsb3dpX2ZsYWdzKHNrKXxGTE9XSV9GTEFHX0NBTl9TTEVFUCwKKwkJCQkgICBmYWRkciwgc2FkZHIsIGRwb3J0LCBpbmV0LT5pbmV0X3Nwb3J0KTsKKworCQlzZWN1cml0eV9za19jbGFzc2lmeV9mbG93KHNrLCBmbG93aTRfdG9fZmxvd2koZmw0KSk7CisJCXJ0ID0gaXBfcm91dGVfb3V0cHV0X2Zsb3cobmV0LCBmbDQsIHNrKTsKIAkJaWYgKElTX0VSUihydCkpIHsKIAkJCWVyciA9IFBUUl9FUlIocnQpOwogCQkJcnQgPSBOVUxMOwpAQCAtOTQ1LDE4ICs5NTEsMTggQEAKIAkJZ290byBkb19jb25maXJtOwogYmFja19mcm9tX2NvbmZpcm06CiAKLQlzYWRkciA9IHJ0LT5ydF9zcmM7CisJc2FkZHIgPSBmbDQtPnNhZGRyOwogCWlmICghaXBjLmFkZHIpCi0JCWRhZGRyID0gaXBjLmFkZHIgPSBydC0+cnRfZHN0OworCQlkYWRkciA9IGlwYy5hZGRyID0gZmw0LT5kYWRkcjsKIAogCS8qIExvY2tsZXNzIGZhc3QgcGF0aCBmb3IgdGhlIG5vbi1jb3JraW5nIGNhc2UuICovCiAJaWYgKCFjb3JrcmVxKSB7Ci0JCXNrYiA9IGlwX21ha2Vfc2tiKHNrLCBnZXRmcmFnLCBtc2ctPm1zZ19pb3YsIHVsZW4sCisJCXNrYiA9IGlwX21ha2Vfc2tiKHNrLCBmbDQsIGdldGZyYWcsIG1zZy0+bXNnX2lvdiwgdWxlbiwKIAkJCQkgIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSwgJmlwYywgJnJ0LAogCQkJCSAgbXNnLT5tc2dfZmxhZ3MpOwogCQllcnIgPSBQVFJfRVJSKHNrYik7CiAJCWlmIChza2IgJiYgIUlTX0VSUihza2IpKQotCQkJZXJyID0gdWRwX3NlbmRfc2tiKHNrYiwgZGFkZHIsIGRwb3J0KTsKKwkJCWVyciA9IHVkcF9zZW5kX3NrYihza2IsIGZsNCk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtOTgyLDkgKzk4OCw5IEBACiAKIGRvX2FwcGVuZF9kYXRhOgogCXVwLT5sZW4gKz0gdWxlbjsKLQllcnIgPSBpcF9hcHBlbmRfZGF0YShzaywgZ2V0ZnJhZywgbXNnLT5tc2dfaW92LCB1bGVuLAotCQkJc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLCAmaXBjLCAmcnQsCi0JCQljb3JrcmVxID8gbXNnLT5tc2dfZmxhZ3N8TVNHX01PUkUgOiBtc2ctPm1zZ19mbGFncyk7CisJZXJyID0gaXBfYXBwZW5kX2RhdGEoc2ssIGZsNCwgZ2V0ZnJhZywgbXNnLT5tc2dfaW92LCB1bGVuLAorCQkJICAgICBzaXplb2Yoc3RydWN0IHVkcGhkciksICZpcGMsICZydCwKKwkJCSAgICAgY29ya3JlcSA/IG1zZy0+bXNnX2ZsYWdzfE1TR19NT1JFIDogbXNnLT5tc2dfZmxhZ3MpOwogCWlmIChlcnIpCiAJCXVkcF9mbHVzaF9wZW5kaW5nX2ZyYW1lcyhzayk7CiAJZWxzZSBpZiAoIWNvcmtyZXEpCkBAIC0xMDI0LDYgKzEwMzAsNyBAQAogaW50IHVkcF9zZW5kcGFnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2Zmc2V0LAogCQkgc2l6ZV90IHNpemUsIGludCBmbGFncykKIHsKKwlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAJc3RydWN0IHVkcF9zb2NrICp1cCA9IHVkcF9zayhzayk7CiAJaW50IHJldDsKIApAQCAtMTA0OCw3ICsxMDU1LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmV0ID0gaXBfYXBwZW5kX3BhZ2Uoc2ssIHBhZ2UsIG9mZnNldCwgc2l6ZSwgZmxhZ3MpOworCXJldCA9IGlwX2FwcGVuZF9wYWdlKHNrLCAmaW5ldC0+Y29yay5mbC51LmlwNCwKKwkJCSAgICAgcGFnZSwgb2Zmc2V0LCBzaXplLCBmbGFncyk7CiAJaWYgKHJldCA9PSAtRU9QTk9UU1VQUCkgewogCQlyZWxlYXNlX3NvY2soc2spOwogCQlyZXR1cm4gc29ja19ub19zZW5kcGFnZShzay0+c2tfc29ja2V0LCBwYWdlLCBvZmZzZXQsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYyBiL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCmluZGV4IGQyMGEwNWUuLjk4MWU0M2UgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCisrKyBiL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCkBAIC0xOCwzOCArMTgsNDYgQEAKIAogc3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8geGZybTRfcG9saWN5X2FmaW5mbzsKIAotc3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKnhmcm00X2RzdF9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBpbnQgdG9zLAotCQkJCQkgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkciwKLQkJCQkJICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIpCitzdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqX194ZnJtNF9kc3RfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNCAqZmw0LAorCQkJCQkgICAgaW50IHRvcywKKwkJCQkJICAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkciwKKwkJCQkJICAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkcikKIHsKLQlzdHJ1Y3QgZmxvd2k0IGZsNCA9IHsKLQkJLmRhZGRyID0gZGFkZHItPmE0LAotCQkuZmxvd2k0X3RvcyA9IHRvcywKLQl9OwogCXN0cnVjdCBydGFibGUgKnJ0OwogCisJbWVtc2V0KGZsNCwgMCwgc2l6ZW9mKCpmbDQpKTsKKwlmbDQtPmRhZGRyID0gZGFkZHItPmE0OworCWZsNC0+Zmxvd2k0X3RvcyA9IHRvczsKIAlpZiAoc2FkZHIpCi0JCWZsNC5zYWRkciA9IHNhZGRyLT5hNDsKKwkJZmw0LT5zYWRkciA9IHNhZGRyLT5hNDsKIAotCXJ0ID0gX19pcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgJmZsNCk7CisJcnQgPSBfX2lwX3JvdXRlX291dHB1dF9rZXkobmV0LCBmbDQpOwogCWlmICghSVNfRVJSKHJ0KSkKIAkJcmV0dXJuICZydC0+ZHN0OwogCiAJcmV0dXJuIEVSUl9DQVNUKHJ0KTsKIH0KIAorc3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKnhmcm00X2RzdF9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBpbnQgdG9zLAorCQkJCQkgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkciwKKwkJCQkJICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIpCit7CisJc3RydWN0IGZsb3dpNCBmbDQ7CisKKwlyZXR1cm4gX194ZnJtNF9kc3RfbG9va3VwKG5ldCwgJmZsNCwgdG9zLCBzYWRkciwgZGFkZHIpOworfQorCiBzdGF0aWMgaW50IHhmcm00X2dldF9zYWRkcihzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkgICB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsIHhmcm1fYWRkcmVzc190ICpkYWRkcikKIHsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7Ci0Jc3RydWN0IHJ0YWJsZSAqcnQ7CisJc3RydWN0IGZsb3dpNCBmbDQ7CiAKLQlkc3QgPSB4ZnJtNF9kc3RfbG9va3VwKG5ldCwgMCwgTlVMTCwgZGFkZHIpOworCWRzdCA9IF9feGZybTRfZHN0X2xvb2t1cChuZXQsICZmbDQsIDAsIE5VTEwsIGRhZGRyKTsKIAlpZiAoSVNfRVJSKGRzdCkpCiAJCXJldHVybiAtRUhPU1RVTlJFQUNIOwogCi0JcnQgPSAoc3RydWN0IHJ0YWJsZSAqKWRzdDsKLQlzYWRkci0+YTQgPSBydC0+cnRfc3JjOworCXNhZGRyLT5hNCA9IGZsNC5zYWRkcjsKIAlkc3RfcmVsZWFzZShkc3QpOwogCXJldHVybiAwOwogfQpAQCAtNzMsNyArODEsNyBAQAogCiAJcnQtPnJ0X2tleV9kc3QgPSBmbDQtPmRhZGRyOwogCXJ0LT5ydF9rZXlfc3JjID0gZmw0LT5zYWRkcjsKLQlydC0+cnRfdG9zID0gZmw0LT5mbG93aTRfdG9zOworCXJ0LT5ydF9rZXlfdG9zID0gZmw0LT5mbG93aTRfdG9zOwogCXJ0LT5ydF9yb3V0ZV9paWYgPSBmbDQtPmZsb3dpNF9paWY7CiAJcnQtPnJ0X2lpZiA9IGZsNC0+Zmxvd2k0X2lpZjsKIAlydC0+cnRfb2lmID0gZmw0LT5mbG93aTRfb2lmOwpAQCAtMTAyLDcgKzExMCw3IEBACiBzdGF0aWMgdm9pZAogX2RlY29kZV9zZXNzaW9uNChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2kgKmZsLCBpbnQgcmV2ZXJzZSkKIHsKLQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpOworCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7CiAJdTggKnhwcnRoID0gc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBpcGgtPmlobCAqIDQ7CiAJc3RydWN0IGZsb3dpNCAqZmw0ID0gJmZsLT51LmlwNDsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQveGZybTRfc3RhdGUuYyBiL25ldC9pcHY0L3hmcm00X3N0YXRlLmMKaW5kZXggODA1ZDYzZS4uZDlhYzBhMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQveGZybTRfc3RhdGUuYworKysgYi9uZXQvaXB2NC94ZnJtNF9zdGF0ZS5jCkBAIC01NSw3ICs1NSw3IEBACiAKIGludCB4ZnJtNF9leHRyYWN0X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTsKIAogCVhGUk1fTU9ERV9TS0JfQ0Ioc2tiKS0+aWhsID0gc2l6ZW9mKCppcGgpOwogCVhGUk1fTU9ERV9TS0JfQ0Ioc2tiKS0+aWQgPSBpcGgtPmlkOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmMKaW5kZXggOGYxM2Q4OC4uNDk4YjkyNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuYworKysgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCkBAIC0yODksMTkgKzI4OSwxOSBAQAogCQkJICBzaXplb2Yoc3RydWN0IGlwc3RhdHNfbWliKSwKIAkJCSAgX19hbGlnbm9mX18oc3RydWN0IGlwc3RhdHNfbWliKSkgPCAwKQogCQlnb3RvIGVycl9pcDsKLQlpZiAoc25tcF9taWJfaW5pdCgodm9pZCBfX3BlcmNwdSAqKilpZGV2LT5zdGF0cy5pY21wdjYsCi0JCQkgIHNpemVvZihzdHJ1Y3QgaWNtcHY2X21pYiksCi0JCQkgIF9fYWxpZ25vZl9fKHN0cnVjdCBpY21wdjZfbWliKSkgPCAwKQorCWlkZXYtPnN0YXRzLmljbXB2NmRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpY21wdjZfbWliX2RldmljZSksCisJCQkJCUdGUF9LRVJORUwpOworCWlmICghaWRldi0+c3RhdHMuaWNtcHY2ZGV2KQogCQlnb3RvIGVycl9pY21wOwotCWlmIChzbm1wX21pYl9pbml0KCh2b2lkIF9fcGVyY3B1ICoqKWlkZXYtPnN0YXRzLmljbXB2Nm1zZywKLQkJCSAgc2l6ZW9mKHN0cnVjdCBpY21wdjZtc2dfbWliKSwKLQkJCSAgX19hbGlnbm9mX18oc3RydWN0IGljbXB2Nm1zZ19taWIpKSA8IDApCisJaWRldi0+c3RhdHMuaWNtcHY2bXNnZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGljbXB2Nm1zZ19taWJfZGV2aWNlKSwKKwkJCQkJICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFpZGV2LT5zdGF0cy5pY21wdjZtc2dkZXYpCiAJCWdvdG8gZXJyX2ljbXBtc2c7CiAKIAlyZXR1cm4gMDsKIAogZXJyX2ljbXBtc2c6Ci0Jc25tcF9taWJfZnJlZSgodm9pZCBfX3BlcmNwdSAqKilpZGV2LT5zdGF0cy5pY21wdjYpOworCWtmcmVlKGlkZXYtPnN0YXRzLmljbXB2NmRldik7CiBlcnJfaWNtcDoKIAlzbm1wX21pYl9mcmVlKCh2b2lkIF9fcGVyY3B1ICoqKWlkZXYtPnN0YXRzLmlwdjYpOwogZXJyX2lwOgpAQCAtMzEwLDggKzMxMCw4IEBACiAKIHN0YXRpYyB2b2lkIHNubXA2X2ZyZWVfZGV2KHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpCiB7Ci0Jc25tcF9taWJfZnJlZSgodm9pZCBfX3BlcmNwdSAqKilpZGV2LT5zdGF0cy5pY21wdjZtc2cpOwotCXNubXBfbWliX2ZyZWUoKHZvaWQgX19wZXJjcHUgKiopaWRldi0+c3RhdHMuaWNtcHY2KTsKKwlrZnJlZShpZGV2LT5zdGF0cy5pY21wdjZtc2dkZXYpOworCWtmcmVlKGlkZXYtPnN0YXRzLmljbXB2NmRldik7CiAJc25tcF9taWJfZnJlZSgodm9pZCBfX3BlcmNwdSAqKilpZGV2LT5zdGF0cy5pcHY2KTsKIH0KIApAQCAtODEzLDYgKzgxMyw4IEBACiAJCWRzdF9yZWxlYXNlKCZydC0+ZHN0KTsKIAl9CiAKKwkvKiBjbGVhbiB1cCBwcmVmc3JjIGVudHJpZXMgKi8KKwlydDZfcmVtb3ZlX3ByZWZzcmMoaWZwKTsKIG91dDoKIAlpbjZfaWZhX3B1dChpZnApOwogfQpAQCAtMTI2OSw3ICsxMjcxLDcgQEAKIAlyZXR1cm4gY250OwogfQogCi1pbnQgaXB2Nl9jaGtfYWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpbjZfYWRkciAqYWRkciwKK2ludCBpcHY2X2Noa19hZGRyKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLAogCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzdHJpY3QpCiB7CiAJc3RydWN0IGluZXQ2X2lmYWRkciAqaWZwOwpAQCAtMTMxMiw3ICsxMzE0LDcgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLWludCBpcHY2X2Noa19wcmVmaXgoc3RydWN0IGluNl9hZGRyICphZGRyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoraW50IGlwdjZfY2hrX3ByZWZpeChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKIAlzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZmE7CkBAIC0xNDQzLDcgKzE0NDUsNyBAQAogCiAvKiBKb2luIHRvIHNvbGljaXRlZCBhZGRyIG11bHRpY2FzdCBncm91cC4gKi8KIAotdm9pZCBhZGRyY29uZl9qb2luX3NvbGljdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCit2b2lkIGFkZHJjb25mX2pvaW5fc29saWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcikKIHsKIAlzdHJ1Y3QgaW42X2FkZHIgbWFkZHI7CiAKQEAgLTE0NTQsNyArMTQ1Niw3IEBACiAJaXB2Nl9kZXZfbWNfaW5jKGRldiwgJm1hZGRyKTsKIH0KIAotdm9pZCBhZGRyY29uZl9sZWF2ZV9zb2xpY3Qoc3RydWN0IGluZXQ2X2RldiAqaWRldiwgc3RydWN0IGluNl9hZGRyICphZGRyKQordm9pZCBhZGRyY29uZl9sZWF2ZV9zb2xpY3Qoc3RydWN0IGluZXQ2X2RldiAqaWRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKQogewogCXN0cnVjdCBpbjZfYWRkciBtYWRkcjsKIApAQCAtMjA5OSw3ICsyMTAxLDcgQEAKIC8qCiAgKglNYW51YWwgY29uZmlndXJhdGlvbiBvZiBhZGRyZXNzIG9uIGFuIGludGVyZmFjZQogICovCi1zdGF0aWMgaW50IGluZXQ2X2FkZHJfYWRkKHN0cnVjdCBuZXQgKm5ldCwgaW50IGlmaW5kZXgsIHN0cnVjdCBpbjZfYWRkciAqcGZ4LAorc3RhdGljIGludCBpbmV0Nl9hZGRyX2FkZChzdHJ1Y3QgbmV0ICpuZXQsIGludCBpZmluZGV4LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnBmeCwKIAkJCSAgdW5zaWduZWQgaW50IHBsZW4sIF9fdTggaWZhX2ZsYWdzLCBfX3UzMiBwcmVmZXJlZF9sZnQsCiAJCQkgIF9fdTMyIHZhbGlkX2xmdCkKIHsKQEAgLTIxNzMsNyArMjE3NSw3IEBACiAJcmV0dXJuIFBUUl9FUlIoaWZwKTsKIH0KIAotc3RhdGljIGludCBpbmV0Nl9hZGRyX2RlbChzdHJ1Y3QgbmV0ICpuZXQsIGludCBpZmluZGV4LCBzdHJ1Y3QgaW42X2FkZHIgKnBmeCwKK3N0YXRpYyBpbnQgaW5ldDZfYWRkcl9kZWwoc3RydWN0IG5ldCAqbmV0LCBpbnQgaWZpbmRleCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpwZngsCiAJCQkgIHVuc2lnbmVkIGludCBwbGVuKQogewogCXN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmcDsKQEAgLTIzMzYsNyArMjMzOCw3IEBACiAJYWRkX2FkZHIoaWRldiwgJmluNmFkZHJfbG9vcGJhY2ssIDEyOCwgSUZBX0hPU1QpOwogfQogCi1zdGF0aWMgdm9pZCBhZGRyY29uZl9hZGRfbGlua2xvY2FsKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsIHN0cnVjdCBpbjZfYWRkciAqYWRkcikKK3N0YXRpYyB2b2lkIGFkZHJjb25mX2FkZF9saW5rbG9jYWwoc3RydWN0IGluZXQ2X2RldiAqaWRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKQogewogCXN0cnVjdCBpbmV0Nl9pZmFkZHIgKiBpZnA7CiAJdTMyIGFkZHJfZmxhZ3MgPSBJRkFfRl9QRVJNQU5FTlQ7CkBAIC0zMTA3LDcgKzMxMDksNyBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfSVBWNl9NSVA2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01JUDZfTU9EVUxFKQogLyogQ2hlY2sgaWYgYWRkcmVzcyBpcyBhIGhvbWUgYWRkcmVzcyBjb25maWd1cmVkIG9uIGFueSBpbnRlcmZhY2UuICovCi1pbnQgaXB2Nl9jaGtfaG9tZV9hZGRyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGluNl9hZGRyICphZGRyKQoraW50IGlwdjZfY2hrX2hvbWVfYWRkcihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcikKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZnAgPSBOVUxMOwpAQCAtMzgyNCw3ICszODI2LDcgQEAKIAkgICAgICAgKyBubGFfdG90YWxfc2l6ZShpbmV0Nl9pZmxhNl9zaXplKCkpOyAvKiBJRkxBX1BST1RJTkZPICovCiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3NubXA2X2ZpbGxfc3RhdHModTY0ICpzdGF0cywgdm9pZCBfX3BlcmNwdSAqKm1pYiwKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NubXA2X2ZpbGxfc3RhdHNkZXYodTY0ICpzdGF0cywgYXRvbWljX2xvbmdfdCAqbWliLAogCQkJCSAgICAgIGludCBpdGVtcywgaW50IGJ5dGVzKQogewogCWludCBpOwpAQCAtMzgzNCw3ICszODM2LDcgQEAKIAkvKiBVc2UgcHV0X3VuYWxpZ25lZCgpIGJlY2F1c2Ugc3RhdHMgbWF5IG5vdCBiZSBhbGlnbmVkIGZvciB1NjQuICovCiAJcHV0X3VuYWxpZ25lZChpdGVtcywgJnN0YXRzWzBdKTsKIAlmb3IgKGkgPSAxOyBpIDwgaXRlbXM7IGkrKykKLQkJcHV0X3VuYWxpZ25lZChzbm1wX2ZvbGRfZmllbGQobWliLCBpKSwgJnN0YXRzW2ldKTsKKwkJcHV0X3VuYWxpZ25lZChhdG9taWNfbG9uZ19yZWFkKCZtaWJbaV0pLCAmc3RhdHNbaV0pOwogCiAJbWVtc2V0KCZzdGF0c1tpdGVtc10sIDAsIHBhZCk7CiB9CkBAIC0zODYzLDcgKzM4NjUsNyBAQAogCQkJCSAgICAgSVBTVEFUU19NSUJfTUFYLCBieXRlcywgb2Zmc2V0b2Yoc3RydWN0IGlwc3RhdHNfbWliLCBzeW5jcCkpOwogCQlicmVhazsKIAljYXNlIElGTEFfSU5FVDZfSUNNUDZTVEFUUzoKLQkJX19zbm1wNl9maWxsX3N0YXRzKHN0YXRzLCAodm9pZCBfX3BlcmNwdSAqKilpZGV2LT5zdGF0cy5pY21wdjYsIElDTVA2X01JQl9NQVgsIGJ5dGVzKTsKKwkJX19zbm1wNl9maWxsX3N0YXRzZGV2KHN0YXRzLCBpZGV2LT5zdGF0cy5pY21wdjZkZXYtPm1pYnMsIElDTVA2X01JQl9NQVgsIGJ5dGVzKTsKIAkJYnJlYWs7CiAJfQogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWZfaW5ldDYuYyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKaW5kZXggYWZjYzcwOS4uYjc5MTlmOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWZfaW5ldDYuYworKysgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jCkBAIC03NDAsNyArNzQwLDcgQEAKIAogc3RhdGljIGludCBpcHY2X2dzb19zZW5kX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGlwdjZoZHIgKmlwdjZoOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcHY2aDsKIAljb25zdCBzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgKm9wczsKIAlpbnQgZXJyID0gLUVJTlZBTDsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYW55Y2FzdC5jIGIvbmV0L2lwdjYvYW55Y2FzdC5jCmluZGV4IDBlNWU5NDMuLjY3NDI1NWYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FueWNhc3QuYworKysgYi9uZXQvaXB2Ni9hbnljYXN0LmMKQEAgLTQ0LDcgKzQ0LDcgQEAKIAogI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgogCi1zdGF0aWMgaW50IGlwdjZfZGV2X2FjX2RlYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOworc3RhdGljIGludCBpcHY2X2Rldl9hY19kZWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTsKIAogLyogQmlnIGFjIGxpc3QgbG9jayBmb3IgYWxsIHRoZSBzb2NrZXRzICovCiBzdGF0aWMgREVGSU5FX1JXTE9DSyhpcHY2X3NrX2FjX2xvY2spOwpAQCAtNTQsNyArNTQsNyBAQAogICoJc29ja2V0IGpvaW4gYW4gYW55Y2FzdCBncm91cAogICovCiAKLWludCBpcHY2X3NvY2tfYWNfam9pbihzdHJ1Y3Qgc29jayAqc2ssIGludCBpZmluZGV4LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCitpbnQgaXB2Nl9zb2NrX2FjX2pvaW4oc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKQogewogCXN0cnVjdCBpcHY2X3BpbmZvICpucCA9IGluZXQ2X3NrKHNrKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKQEAgLTE0NSw3ICsxNDUsNyBAQAogLyoKICAqCXNvY2tldCBsZWF2ZSBhbiBhbnljYXN0IGdyb3VwCiAgKi8KLWludCBpcHY2X3NvY2tfYWNfZHJvcChzdHJ1Y3Qgc29jayAqc2ssIGludCBpZmluZGV4LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCitpbnQgaXB2Nl9zb2NrX2FjX2Ryb3Aoc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKQogewogCXN0cnVjdCBpcHY2X3BpbmZvICpucCA9IGluZXQ2X3NrKHNrKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwpAQCAtMjUyLDcgKzI1Miw3IEBACiAvKgogICoJZGV2aWNlIGFueWNhc3QgZ3JvdXAgaW5jIChhZGQgaWYgbm90IGZvdW5kKQogICovCi1pbnQgaXB2Nl9kZXZfYWNfaW5jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpbjZfYWRkciAqYWRkcikKK2ludCBpcHY2X2Rldl9hY19pbmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKQogewogCXN0cnVjdCBpZmFjYWRkcjYgKmFjYTsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2OwpAQCAtMzI0LDcgKzMyNCw3IEBACiAvKgogICoJZGV2aWNlIGFueWNhc3QgZ3JvdXAgZGVjcmVtZW50CiAgKi8KLWludCBfX2lwdjZfZGV2X2FjX2RlYyhzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCitpbnQgX19pcHY2X2Rldl9hY19kZWMoc3RydWN0IGluZXQ2X2RldiAqaWRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKQogewogCXN0cnVjdCBpZmFjYWRkcjYgKmFjYSwgKnByZXZfYWNhOwogCkBAIC0zNTgsNyArMzU4LDcgQEAKIH0KIAogLyogY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jaygpICovCi1zdGF0aWMgaW50IGlwdjZfZGV2X2FjX2RlYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCitzdGF0aWMgaW50IGlwdjZfZGV2X2FjX2RlYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCiB7CiAJc3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTsKIApAQCAtMzcxLDcgKzM3MSw3IEBACiAgKgljaGVjayBpZiB0aGUgaW50ZXJmYWNlIGhhcyB0aGlzIGFueWNhc3QgYWRkcmVzcwogICoJY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jaygpCiAgKi8KLXN0YXRpYyBpbnQgaXB2Nl9jaGtfYWNhc3RfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpbjZfYWRkciAqYWRkcikKK3N0YXRpYyBpbnQgaXB2Nl9jaGtfYWNhc3RfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcikKIHsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2OwogCXN0cnVjdCBpZmFjYWRkcjYgKmFjYTsKQEAgLTM5Miw3ICszOTIsNyBAQAogICoJY2hlY2sgaWYgZ2l2ZW4gaW50ZXJmYWNlIChvciBhbnksIGlmIGRldj09MCkgaGFzIHRoaXMgYW55Y2FzdCBhZGRyZXNzCiAgKi8KIGludCBpcHY2X2Noa19hY2FzdF9hZGRyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCXN0cnVjdCBpbjZfYWRkciAqYWRkcikKKwkJCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcikKIHsKIAlpbnQgZm91bmQgPSAwOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9lc3A2LmMgYi9uZXQvaXB2Ni9lc3A2LmMKaW5kZXggNTlkY2NmYi4uMWFjNzkzOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvZXNwNi5jCisrKyBiL25ldC9pcHY2L2VzcDYuYwpAQCAtNDMwLDcgKzQzMCw3IEBACiAJCSAgICAgdTggdHlwZSwgdTggY29kZSwgaW50IG9mZnNldCwgX19iZTMyIGluZm8pCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItPmRldik7Ci0Jc3RydWN0IGlwdjZoZHIgKmlwaCA9IChzdHJ1Y3QgaXB2Nmhkciopc2tiLT5kYXRhOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcGggPSAoY29uc3Qgc3RydWN0IGlwdjZoZHIgKilza2ItPmRhdGE7CiAJc3RydWN0IGlwX2VzcF9oZHIgKmVzcGggPSAoc3RydWN0IGlwX2VzcF9oZHIgKikoc2tiLT5kYXRhICsgb2Zmc2V0KTsKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKIApAQCAtNDM4LDcgKzQzOCw4IEBACiAJICAgIHR5cGUgIT0gSUNNUFY2X1BLVF9UT09CSUcpCiAJCXJldHVybjsKIAotCXggPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIHNrYi0+bWFyaywgKHhmcm1fYWRkcmVzc190ICopJmlwaC0+ZGFkZHIsIGVzcGgtPnNwaSwgSVBQUk9UT19FU1AsIEFGX0lORVQ2KTsKKwl4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBza2ItPm1hcmssIChjb25zdCB4ZnJtX2FkZHJlc3NfdCAqKSZpcGgtPmRhZGRyLAorCQkJICAgICAgZXNwaC0+c3BpLCBJUFBST1RPX0VTUCwgQUZfSU5FVDYpOwogCWlmICgheCkKIAkJcmV0dXJuOwogCXByaW50ayhLRVJOX0RFQlVHICJwbXR1IGRpc2NvdmVyeSBvbiBTQSBFU1AvJTA4eC8lcEk2XG4iLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaWNtcC5jIGIvbmV0L2lwdjYvaWNtcC5jCmluZGV4IDgzY2I0ZjkuLjExOTAwNDEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2ljbXAuYworKysgYi9uZXQvaXB2Ni9pY21wLmMKQEAgLTM3Miw3ICszNzIsNyBAQAogCXN0cnVjdCBpcHY2aGRyICpoZHIgPSBpcHY2X2hkcihza2IpOwogCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnA7Ci0Jc3RydWN0IGluNl9hZGRyICpzYWRkciA9IE5VTEw7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciA9IE5VTEw7CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0OwogCXN0cnVjdCBpY21wNmhkciB0bXBfaGRyOwogCXN0cnVjdCBmbG93aTYgZmw2OwpAQCAtNTIxLDcgKzUyMSw3IEBACiAJc3RydWN0IHNvY2sgKnNrOwogCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7CiAJc3RydWN0IGlwdjZfcGluZm8gKm5wOwotCXN0cnVjdCBpbjZfYWRkciAqc2FkZHIgPSBOVUxMOworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIgPSBOVUxMOwogCXN0cnVjdCBpY21wNmhkciAqaWNtcGggPSBpY21wNl9oZHIoc2tiKTsKIAlzdHJ1Y3QgaWNtcDZoZHIgdG1wX2hkcjsKIAlzdHJ1Y3QgZmxvd2k2IGZsNjsKQEAgLTY0NSw4ICs2NDUsOCBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2ItPmRldjsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldChkZXYpOwotCXN0cnVjdCBpbjZfYWRkciAqc2FkZHIsICpkYWRkcjsKLQlzdHJ1Y3QgaXB2NmhkciAqb3JpZ19oZHI7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciwgKmRhZGRyOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICpvcmlnX2hkcjsKIAlzdHJ1Y3QgaWNtcDZoZHIgKmhkcjsKIAl1OCB0eXBlOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pbmV0Nl9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY2L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5jCmluZGV4IGYyYzViMGYuLjhhNThlOGMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5jCisrKyBiL25ldC9pcHY2L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5jCkBAIC0yMDMsNyArMjAzLDcgQEAKIAlyZXR1cm4gZHN0OwogfQogCi1pbnQgaW5ldDZfY3NrX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKK2ludCBpbmV0Nl9jc2tfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2kgKmZsX3VudXNlZCkKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBza2ItPnNrOwogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9maWIuYyBiL25ldC9pcHY2L2lwNl9maWIuYwppbmRleCA3NTQ4OTA1Li40MDc2YTBiIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfZmliLmMKKysrIGIvbmV0L2lwdjYvaXA2X2ZpYi5jCkBAIC0xMzQsOSArMTM0LDkgQEAKICMgZGVmaW5lIEJJVE9QX0JFMzJfU1dJWlpMRQkwCiAjZW5kaWYKIAotc3RhdGljIF9faW5saW5lX18gX19iZTMyIGFkZHJfYml0X3NldCh2b2lkICp0b2tlbiwgaW50IGZuX2JpdCkKK3N0YXRpYyBfX2lubGluZV9fIF9fYmUzMiBhZGRyX2JpdF9zZXQoY29uc3Qgdm9pZCAqdG9rZW4sIGludCBmbl9iaXQpCiB7Ci0JX19iZTMyICphZGRyID0gdG9rZW47CisJY29uc3QgX19iZTMyICphZGRyID0gdG9rZW47CiAJLyoKIAkgKiBIZXJlLAogCSAqIAkxIDw8ICgofmZuX2JpdCBeIEJJVE9QX0JFMzJfU1dJWlpMRSkgJiAweDFmKQpAQCAtMzk0LDEwICszOTQsMTEgQEAKIAlhcmcubmV0ID0gbmV0OwogCXctPmFyZ3MgPSAmYXJnOwogCisJcmN1X3JlYWRfbG9jaygpOwogCWZvciAoaCA9IHNfaDsgaCA8IEZJQjZfVEFCTEVfSEFTSFNaOyBoKyssIHNfZSA9IDApIHsKIAkJZSA9IDA7CiAJCWhlYWQgPSAmbmV0LT5pcHY2LmZpYl90YWJsZV9oYXNoW2hdOwotCQlobGlzdF9mb3JfZWFjaF9lbnRyeSh0Yiwgbm9kZSwgaGVhZCwgdGI2X2hsaXN0KSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0Yiwgbm9kZSwgaGVhZCwgdGI2X2hsaXN0KSB7CiAJCQlpZiAoZSA8IHNfZSkKIAkJCQlnb3RvIG5leHQ7CiAJCQlyZXMgPSBmaWI2X2R1bXBfdGFibGUodGIsIHNrYiwgY2IpOwpAQCAtNDA4LDYgKzQwOSw3IEBACiAJCX0KIAl9CiBvdXQ6CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJY2ItPmFyZ3NbMV0gPSBlOwogCWNiLT5hcmdzWzBdID0gaDsKIApAQCAtODIyLDcgKzgyNCw3IEBACiAKIHN0cnVjdCBsb29rdXBfYXJncyB7CiAJaW50CQlvZmZzZXQ7CQkvKiBrZXkgb2Zmc2V0IG9uIHJ0Nl9pbmZvCSovCi0Jc3RydWN0IGluNl9hZGRyCSphZGRyOwkJLyogc2VhcmNoIGtleQkJCSovCisJY29uc3Qgc3RydWN0IGluNl9hZGRyCSphZGRyOwkJLyogc2VhcmNoIGtleQkJCSovCiB9OwogCiBzdGF0aWMgc3RydWN0IGZpYjZfbm9kZSAqIGZpYjZfbG9va3VwXzEoc3RydWN0IGZpYjZfbm9kZSAqcm9vdCwKQEAgLTg4MSw4ICs4ODMsOCBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdHJ1Y3QgZmliNl9ub2RlICogZmliNl9sb29rdXAoc3RydWN0IGZpYjZfbm9kZSAqcm9vdCwgc3RydWN0IGluNl9hZGRyICpkYWRkciwKLQkJCSAgICAgICBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKQorc3RydWN0IGZpYjZfbm9kZSAqIGZpYjZfbG9va3VwKHN0cnVjdCBmaWI2X25vZGUgKnJvb3QsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkcikKIHsKIAlzdHJ1Y3QgZmliNl9ub2RlICpmbjsKIAlzdHJ1Y3QgbG9va3VwX2FyZ3MgYXJnc1tdID0gewpAQCAtOTE2LDcgKzkxOCw3IEBACiAKIAogc3RhdGljIHN0cnVjdCBmaWI2X25vZGUgKiBmaWI2X2xvY2F0ZV8xKHN0cnVjdCBmaWI2X25vZGUgKnJvb3QsCi0JCQkJCXN0cnVjdCBpbjZfYWRkciAqYWRkciwKKwkJCQkJY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLAogCQkJCQlpbnQgcGxlbiwgaW50IG9mZnNldCkKIHsKIAlzdHJ1Y3QgZmliNl9ub2RlICpmbjsKQEAgLTk0Niw4ICs5NDgsOCBAQAogfQogCiBzdHJ1Y3QgZmliNl9ub2RlICogZmliNl9sb2NhdGUoc3RydWN0IGZpYjZfbm9kZSAqcm9vdCwKLQkJCSAgICAgICBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLCBpbnQgZHN0X2xlbiwKLQkJCSAgICAgICBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCBpbnQgc3JjX2xlbikKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLCBpbnQgZHN0X2xlbiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCBpbnQgc3JjX2xlbikKIHsKIAlzdHJ1Y3QgZmliNl9ub2RlICpmbjsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2lucHV0LmMgYi9uZXQvaXB2Ni9pcDZfaW5wdXQuYwppbmRleCBhODNlOTIwLi4wMjdjN2ZmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfaW5wdXQuYworKysgYi9uZXQvaXB2Ni9pcDZfaW5wdXQuYwpAQCAtNTcsNyArNTcsNyBAQAogCiBpbnQgaXB2Nl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQogewotCXN0cnVjdCBpcHY2aGRyICpoZHI7CisJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmhkcjsKIAl1MzIgCQlwa3RfbGVuOwogCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7CiAJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItPmRldik7CkBAIC0xODYsNyArMTg2LDcgQEAKIAkJaW50IHJldDsKIAogCQlpZiAoaXBwcm90LT5mbGFncyAmIElORVQ2X1BST1RPX0ZJTkFMKSB7Ci0JCQlzdHJ1Y3QgaXB2NmhkciAqaGRyOworCQkJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmhkcjsKIAogCQkJLyogRnJlZSByZWZlcmVuY2UgZWFybHk6IHdlIGRvbid0IG5lZWQgaXQgYW55IG1vcmUsCiAJCQkgICBhbmQgaXQgbWF5IGhvbGQgaXBfY29ubnRyYWNrIG1vZHVsZSBsb2FkZWQKQEAgLTI0Miw3ICsyNDIsNyBAQAogCiBpbnQgaXA2X21jX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGlwdjZoZHIgKmhkcjsKKwljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaGRyOwogCWludCBkZWxpdmVyOwogCiAJSVA2X1VQRF9QT19TVEFUU19CSChkZXZfbmV0KHNrYl9kc3Qoc2tiKS0+ZGV2KSwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9vdXRwdXQuYyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuYwppbmRleCA0NmNmN2JlLi45ZDRiMTY1IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jCkBAIC04NjksOSArODY5LDkgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBpcDZfcnRfY2hlY2soc3RydWN0IHJ0NmtleSAqcnRfa2V5LAotCQkJICAgICAgIHN0cnVjdCBpbjZfYWRkciAqZmxfYWRkciwKLQkJCSAgICAgICBzdHJ1Y3QgaW42X2FkZHIgKmFkZHJfY2FjaGUpCitzdGF0aWMgaW5saW5lIGludCBpcDZfcnRfY2hlY2soY29uc3Qgc3RydWN0IHJ0NmtleSAqcnRfa2V5LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZmxfYWRkciwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHJfY2FjaGUpCiB7CiAJcmV0dXJuIChydF9rZXktPnBsZW4gIT0gMTI4IHx8ICFpcHY2X2FkZHJfZXF1YWwoZmxfYWRkciwgJnJ0X2tleS0+YWRkcikpICYmCiAJCShhZGRyX2NhY2hlID09IE5VTEwgfHwgIWlwdjZfYWRkcl9lcXVhbChmbF9hZGRyLCBhZGRyX2NhY2hlKSk7CkBAIC04NzksNyArODc5LDcgQEAKIAogc3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKmlwNl9za19kc3RfY2hlY2soc3RydWN0IHNvY2sgKnNrLAogCQkJCQkgIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKLQkJCQkJICBzdHJ1Y3QgZmxvd2k2ICpmbDYpCisJCQkJCSAgY29uc3Qgc3RydWN0IGZsb3dpNiAqZmw2KQogewogCXN0cnVjdCBpcHY2X3BpbmZvICpucCA9IGluZXQ2X3NrKHNrKTsKIAlzdHJ1Y3QgcnQ2X2luZm8gKnJ0ID0gKHN0cnVjdCBydDZfaW5mbyAqKWRzdDsKQEAgLTkzMCwxMCArOTMwLDEwIEBACiAJCWdvdG8gb3V0X2Vycl9yZWxlYXNlOwogCiAJaWYgKGlwdjZfYWRkcl9hbnkoJmZsNi0+c2FkZHIpKSB7Ci0JCWVyciA9IGlwdjZfZGV2X2dldF9zYWRkcihuZXQsIGlwNl9kc3RfaWRldigqZHN0KS0+ZGV2LAotCQkJCQkgJmZsNi0+ZGFkZHIsCi0JCQkJCSBzayA/IGluZXQ2X3NrKHNrKS0+c3JjcHJlZnMgOiAwLAotCQkJCQkgJmZsNi0+c2FkZHIpOworCQlzdHJ1Y3QgcnQ2X2luZm8gKnJ0ID0gKHN0cnVjdCBydDZfaW5mbyAqKSAqZHN0OworCQllcnIgPSBpcDZfcm91dGVfZ2V0X3NhZGRyKG5ldCwgcnQsICZmbDYtPmRhZGRyLAorCQkJCQkgIHNrID8gaW5ldDZfc2soc2spLT5zcmNwcmVmcyA6IDAsCisJCQkJCSAgJmZsNi0+c2FkZHIpOwogCQlpZiAoZXJyKQogCQkJZ290byBvdXRfZXJyX3JlbGVhc2U7CiAJfQpAQCAtMTE1MCw2ICsxMTUwLDcgQEAKIHsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOworCXN0cnVjdCBpbmV0X2NvcmsgKmNvcms7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1bnNpZ25lZCBpbnQgbWF4ZnJhZ2xlbiwgZnJhZ2hlYWRlcmxlbjsKIAlpbnQgZXh0aGRybGVuOwpAQCAtMTE2Myw2ICsxMTY0LDcgQEAKIAogCWlmIChmbGFncyZNU0dfUFJPQkUpCiAJCXJldHVybiAwOworCWNvcmsgPSAmaW5ldC0+Y29yay5iYXNlOwogCWlmIChza2JfcXVldWVfZW1wdHkoJnNrLT5za193cml0ZV9xdWV1ZSkpIHsKIAkJLyoKIAkJICogc2V0dXAgZm9yIGNvcmtpbmcKQEAgLTEyMDIsNyArMTIwNCw3IEBACiAJCQkvKiBuZWVkIHNvdXJjZSBhZGRyZXNzIGFib3ZlIG1peWF6YXdhKi8KIAkJfQogCQlkc3RfaG9sZCgmcnQtPmRzdCk7Ci0JCWluZXQtPmNvcmsuZHN0ID0gJnJ0LT5kc3Q7CisJCWNvcmstPmRzdCA9ICZydC0+ZHN0OwogCQlpbmV0LT5jb3JrLmZsLnUuaXA2ID0gKmZsNjsKIAkJbnAtPmNvcmsuaG9wX2xpbWl0ID0gaGxpbWl0OwogCQlucC0+Y29yay50Y2xhc3MgPSB0Y2xhc3M7CkBAIC0xMjEyLDEwICsxMjE0LDEwIEBACiAJCQlpZiAobnAtPmZyYWdfc2l6ZSkKIAkJCQltdHUgPSBucC0+ZnJhZ19zaXplOwogCQl9Ci0JCWluZXQtPmNvcmsuZnJhZ3NpemUgPSBtdHU7CisJCWNvcmstPmZyYWdzaXplID0gbXR1OwogCQlpZiAoZHN0X2FsbGZyYWcocnQtPmRzdC5wYXRoKSkKLQkJCWluZXQtPmNvcmsuZmxhZ3MgfD0gSVBDT1JLX0FMTEZSQUc7Ci0JCWluZXQtPmNvcmsubGVuZ3RoID0gMDsKKwkJCWNvcmstPmZsYWdzIHw9IElQQ09SS19BTExGUkFHOworCQljb3JrLT5sZW5ndGggPSAwOwogCQlzay0+c2tfc25kbXNnX3BhZ2UgPSBOVUxMOwogCQlzay0+c2tfc25kbXNnX29mZiA9IDA7CiAJCWV4dGhkcmxlbiA9IHJ0LT5kc3QuaGVhZGVyX2xlbiArIChvcHQgPyBvcHQtPm9wdF9mbGVuIDogMCkgLQpAQCAtMTIyMywxMiArMTIyNSwxMiBAQAogCQlsZW5ndGggKz0gZXh0aGRybGVuOwogCQl0cmFuc2hkcmxlbiArPSBleHRoZHJsZW47CiAJfSBlbHNlIHsKLQkJcnQgPSAoc3RydWN0IHJ0Nl9pbmZvICopaW5ldC0+Y29yay5kc3Q7CisJCXJ0ID0gKHN0cnVjdCBydDZfaW5mbyAqKWNvcmstPmRzdDsKIAkJZmw2ID0gJmluZXQtPmNvcmsuZmwudS5pcDY7CiAJCW9wdCA9IG5wLT5jb3JrLm9wdDsKIAkJdHJhbnNoZHJsZW4gPSAwOwogCQlleHRoZHJsZW4gPSAwOwotCQltdHUgPSBpbmV0LT5jb3JrLmZyYWdzaXplOworCQltdHUgPSBjb3JrLT5mcmFnc2l6ZTsKIAl9CiAKIAloaF9sZW4gPSBMTF9SRVNFUlZFRF9TUEFDRShydC0+ZHN0LmRldik7CkBAIC0xMjM4LDcgKzEyNDAsNyBAQAogCW1heGZyYWdsZW4gPSAoKG10dSAtIGZyYWdoZWFkZXJsZW4pICYgfjcpICsgZnJhZ2hlYWRlcmxlbiAtIHNpemVvZihzdHJ1Y3QgZnJhZ19oZHIpOwogCiAJaWYgKG10dSA8PSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICsgSVBWNl9NQVhQTEVOKSB7Ci0JCWlmIChpbmV0LT5jb3JrLmxlbmd0aCArIGxlbmd0aCA+IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgKyBJUFY2X01BWFBMRU4gLSBmcmFnaGVhZGVybGVuKSB7CisJCWlmIChjb3JrLT5sZW5ndGggKyBsZW5ndGggPiBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICsgSVBWNl9NQVhQTEVOIC0gZnJhZ2hlYWRlcmxlbikgewogCQkJaXB2Nl9sb2NhbF9lcnJvcihzaywgRU1TR1NJWkUsIGZsNiwgbXR1LWV4dGhkcmxlbik7CiAJCQlyZXR1cm4gLUVNU0dTSVpFOwogCQl9CkBAIC0xMjY3LDcgKzEyNjksNyBAQAogCSAqIC0teW9zaGZ1amkKIAkgKi8KIAotCWluZXQtPmNvcmsubGVuZ3RoICs9IGxlbmd0aDsKKwljb3JrLT5sZW5ndGggKz0gbGVuZ3RoOwogCWlmIChsZW5ndGggPiBtdHUpIHsKIAkJaW50IHByb3RvID0gc2stPnNrX3Byb3RvY29sOwogCQlpZiAoZG9udGZyYWcgJiYgKHByb3RvID09IElQUFJPVE9fVURQIHx8IHByb3RvID09IElQUFJPVE9fUkFXKSl7CkBAIC0xMjkyLDcgKzEyOTQsNyBAQAogCiAJd2hpbGUgKGxlbmd0aCA+IDApIHsKIAkJLyogQ2hlY2sgaWYgdGhlIHJlbWFpbmluZyBkYXRhIGZpdHMgaW50byBjdXJyZW50IHBhY2tldC4gKi8KLQkJY29weSA9IChpbmV0LT5jb3JrLmxlbmd0aCA8PSBtdHUgJiYgIShpbmV0LT5jb3JrLmZsYWdzICYgSVBDT1JLX0FMTEZSQUcpID8gbXR1IDogbWF4ZnJhZ2xlbikgLSBza2ItPmxlbjsKKwkJY29weSA9IChjb3JrLT5sZW5ndGggPD0gbXR1ICYmICEoY29yay0+ZmxhZ3MgJiBJUENPUktfQUxMRlJBRykgPyBtdHUgOiBtYXhmcmFnbGVuKSAtIHNrYi0+bGVuOwogCQlpZiAoY29weSA8IGxlbmd0aCkKIAkJCWNvcHkgPSBtYXhmcmFnbGVuIC0gc2tiLT5sZW47CiAKQEAgLTEzMTcsNyArMTMxOSw3IEBACiAJCQkgKiB3ZSBrbm93IHdlIG5lZWQgbW9yZSBmcmFnbWVudChzKS4KIAkJCSAqLwogCQkJZGF0YWxlbiA9IGxlbmd0aCArIGZyYWdnYXA7Ci0JCQlpZiAoZGF0YWxlbiA+IChpbmV0LT5jb3JrLmxlbmd0aCA8PSBtdHUgJiYgIShpbmV0LT5jb3JrLmZsYWdzICYgSVBDT1JLX0FMTEZSQUcpID8gbXR1IDogbWF4ZnJhZ2xlbikgLSBmcmFnaGVhZGVybGVuKQorCQkJaWYgKGRhdGFsZW4gPiAoY29yay0+bGVuZ3RoIDw9IG10dSAmJiAhKGNvcmstPmZsYWdzICYgSVBDT1JLX0FMTEZSQUcpID8gbXR1IDogbWF4ZnJhZ2xlbikgLSBmcmFnaGVhZGVybGVuKQogCQkJCWRhdGFsZW4gPSBtYXhmcmFnbGVuIC0gZnJhZ2hlYWRlcmxlbjsKIAogCQkJZnJhZ2xlbiA9IGRhdGFsZW4gKyBmcmFnaGVhZGVybGVuOwpAQCAtMTQ4MSw3ICsxNDgzLDcgQEAKIAl9CiAJcmV0dXJuIDA7CiBlcnJvcjoKLQlpbmV0LT5jb3JrLmxlbmd0aCAtPSBsZW5ndGg7CisJY29yay0+bGVuZ3RoIC09IGxlbmd0aDsKIAlJUDZfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgcnQtPnJ0NmlfaWRldiwgSVBTVEFUU19NSUJfT1VURElTQ0FSRFMpOwogCXJldHVybiBlcnI7CiB9CkBAIC0xNDk3LDEwICsxNDk5LDEwIEBACiAJCW5wLT5jb3JrLm9wdCA9IE5VTEw7CiAJfQogCi0JaWYgKGluZXQtPmNvcmsuZHN0KSB7Ci0JCWRzdF9yZWxlYXNlKGluZXQtPmNvcmsuZHN0KTsKLQkJaW5ldC0+Y29yay5kc3QgPSBOVUxMOwotCQlpbmV0LT5jb3JrLmZsYWdzICY9IH5JUENPUktfQUxMRlJBRzsKKwlpZiAoaW5ldC0+Y29yay5iYXNlLmRzdCkgeworCQlkc3RfcmVsZWFzZShpbmV0LT5jb3JrLmJhc2UuZHN0KTsKKwkJaW5ldC0+Y29yay5iYXNlLmRzdCA9IE5VTEw7CisJCWluZXQtPmNvcmsuYmFzZS5mbGFncyAmPSB+SVBDT1JLX0FMTEZSQUc7CiAJfQogCW1lbXNldCgmaW5ldC0+Y29yay5mbCwgMCwgc2l6ZW9mKGluZXQtPmNvcmsuZmwpKTsKIH0KQEAgLTE1MTUsNyArMTUxNyw3IEBACiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwogCXN0cnVjdCBpcHY2aGRyICpoZHI7CiAJc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHQgPSBucC0+Y29yay5vcHQ7Ci0Jc3RydWN0IHJ0Nl9pbmZvICpydCA9IChzdHJ1Y3QgcnQ2X2luZm8gKilpbmV0LT5jb3JrLmRzdDsKKwlzdHJ1Y3QgcnQ2X2luZm8gKnJ0ID0gKHN0cnVjdCBydDZfaW5mbyAqKWluZXQtPmNvcmsuYmFzZS5kc3Q7CiAJc3RydWN0IGZsb3dpNiAqZmw2ID0gJmluZXQtPmNvcmsuZmwudS5pcDY7CiAJdW5zaWduZWQgY2hhciBwcm90byA9IGZsNi0+Zmxvd2k2X3Byb3RvOwogCWludCBlcnIgPSAwOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCmluZGV4IGMxYjFiZDMuLjM2YzI4NDIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuYworKysgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKQEAgLTE2Miw3ICsxNjIsNyBAQAogCWZvciAodCA9IHJjdV9kZXJlZmVyZW5jZShzdGFydCk7IHQ7IHQgPSByY3VfZGVyZWZlcmVuY2UodC0+bmV4dCkpCiAKIHN0YXRpYyBzdHJ1Y3QgaXA2X3RubCAqCi1pcDZfdG5sX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpbjZfYWRkciAqcmVtb3RlLCBzdHJ1Y3QgaW42X2FkZHIgKmxvY2FsKQoraXA2X3RubF9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnJlbW90ZSwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpsb2NhbCkKIHsKIAl1bnNpZ25lZCBpbnQgaDAgPSBIQVNIKHJlbW90ZSk7CiAJdW5zaWduZWQgaW50IGgxID0gSEFTSChsb2NhbCk7CkBAIC0xOTQsMTAgKzE5NCwxMCBAQAogICoqLwogCiBzdGF0aWMgc3RydWN0IGlwNl90bmwgX19yY3UgKioKLWlwNl90bmxfYnVja2V0KHN0cnVjdCBpcDZfdG5sX25ldCAqaXA2biwgc3RydWN0IGlwNl90bmxfcGFybSAqcCkKK2lwNl90bmxfYnVja2V0KHN0cnVjdCBpcDZfdG5sX25ldCAqaXA2biwgY29uc3Qgc3RydWN0IGlwNl90bmxfcGFybSAqcCkKIHsKLQlzdHJ1Y3QgaW42X2FkZHIgKnJlbW90ZSA9ICZwLT5yYWRkcjsKLQlzdHJ1Y3QgaW42X2FkZHIgKmxvY2FsID0gJnAtPmxhZGRyOworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqcmVtb3RlID0gJnAtPnJhZGRyOworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbG9jYWwgPSAmcC0+bGFkZHI7CiAJdW5zaWduZWQgaCA9IDA7CiAJaW50IHByaW8gPSAwOwogCkBAIC0yODAsMTEgKzI4MCw2IEBACiAKIAlkZXZfbmV0X3NldChkZXYsIG5ldCk7CiAKLQlpZiAoc3RyY2hyKG5hbWUsICclJykpIHsKLQkJaWYgKGRldl9hbGxvY19uYW1lKGRldiwgbmFtZSkgPCAwKQotCQkJZ290byBmYWlsZWRfZnJlZTsKLQl9Ci0KIAl0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl0LT5wYXJtcyA9ICpwOwogCWVyciA9IGlwNl90bmxfZGV2X2luaXQoZGV2KTsKQEAgLTMyMSw4ICszMTYsOCBAQAogc3RhdGljIHN0cnVjdCBpcDZfdG5sICppcDZfdG5sX2xvY2F0ZShzdHJ1Y3QgbmV0ICpuZXQsCiAJCXN0cnVjdCBpcDZfdG5sX3Bhcm0gKnAsIGludCBjcmVhdGUpCiB7Ci0Jc3RydWN0IGluNl9hZGRyICpyZW1vdGUgPSAmcC0+cmFkZHI7Ci0Jc3RydWN0IGluNl9hZGRyICpsb2NhbCA9ICZwLT5sYWRkcjsKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnJlbW90ZSA9ICZwLT5yYWRkcjsKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmxvY2FsID0gJnAtPmxhZGRyOwogCXN0cnVjdCBpcDZfdG5sIF9fcmN1ICoqdHA7CiAJc3RydWN0IGlwNl90bmwgKnQ7CiAJc3RydWN0IGlwNl90bmxfbmV0ICppcDZuID0gbmV0X2dlbmVyaWMobmV0LCBpcDZfdG5sX25ldF9pZCk7CkBAIC0zNzQsNyArMzY5LDcgQEAKIHN0YXRpYyBfX3UxNgogcGFyc2VfdGx2X3RubF9lbmNfbGltKHN0cnVjdCBza19idWZmICpza2IsIF9fdTggKiByYXcpCiB7Ci0Jc3RydWN0IGlwdjZoZHIgKmlwdjZoID0gKHN0cnVjdCBpcHY2aGRyICopIHJhdzsKKwljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXB2NmggPSAoY29uc3Qgc3RydWN0IGlwdjZoZHIgKikgcmF3OwogCV9fdTggbmV4dGhkciA9IGlwdjZoLT5uZXh0aGRyOwogCV9fdTE2IG9mZiA9IHNpemVvZiAoKmlwdjZoKTsKIApAQCAtNDM1LDcgKzQzMCw3IEBACiBpcDZfdG5sX2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3U4IGlwcHJvdG8sIHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0LAogCSAgICB1OCAqdHlwZSwgdTggKmNvZGUsIGludCAqbXNnLCBfX3UzMiAqaW5mbywgaW50IG9mZnNldCkKIHsKLQlzdHJ1Y3QgaXB2NmhkciAqaXB2NmggPSAoc3RydWN0IGlwdjZoZHIgKikgc2tiLT5kYXRhOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcHY2aCA9IChjb25zdCBzdHJ1Y3QgaXB2NmhkciAqKSBza2ItPmRhdGE7CiAJc3RydWN0IGlwNl90bmwgKnQ7CiAJaW50IHJlbF9tc2cgPSAwOwogCXU4IHJlbF90eXBlID0gSUNNUFY2X0RFU1RfVU5SRUFDSDsKQEAgLTUzNSw4ICs1MzAsOSBAQAogCV9fdTMyIHJlbF9pbmZvID0gbnRvaGwoaW5mbyk7CiAJaW50IGVycjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjsKLQlzdHJ1Y3QgaXBoZHIgKmVpcGg7CisJY29uc3Qgc3RydWN0IGlwaGRyICplaXBoOwogCXN0cnVjdCBydGFibGUgKnJ0OworCXN0cnVjdCBmbG93aTQgZmw0OwogCiAJZXJyID0gaXA2X3RubF9lcnIoc2tiLCBJUFBST1RPX0lQSVAsIG9wdCwgJnJlbF90eXBlLCAmcmVsX2NvZGUsCiAJCQkgICZyZWxfbXNnLCAmcmVsX2luZm8sIG9mZnNldCk7CkBAIC01NzcsNyArNTczLDcgQEAKIAllaXBoID0gaXBfaGRyKHNrYjIpOwogCiAJLyogVHJ5IHRvIGd1ZXNzIGluY29taW5nIGludGVyZmFjZSAqLwotCXJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKGRldl9uZXQoc2tiLT5kZXYpLCBOVUxMLAorCXJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKGRldl9uZXQoc2tiLT5kZXYpLCAmZmw0LCBOVUxMLAogCQkJCSAgIGVpcGgtPnNhZGRyLCAwLAogCQkJCSAgIDAsIDAsCiAJCQkJICAgSVBQUk9UT19JUElQLCBSVF9UT1MoZWlwaC0+dG9zKSwgMCk7CkBAIC01OTAsNyArNTg2LDcgQEAKIAlpZiAocnQtPnJ0X2ZsYWdzICYgUlRDRl9MT0NBTCkgewogCQlpcF9ydF9wdXQocnQpOwogCQlydCA9IE5VTEw7Ci0JCXJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKGRldl9uZXQoc2tiLT5kZXYpLCBOVUxMLAorCQlydCA9IGlwX3JvdXRlX291dHB1dF9wb3J0cyhkZXZfbmV0KHNrYi0+ZGV2KSwgJmZsNCwgTlVMTCwKIAkJCQkJICAgZWlwaC0+ZGFkZHIsIGVpcGgtPnNhZGRyLAogCQkJCQkgICAwLCAwLAogCQkJCQkgICBJUFBST1RPX0lQSVAsCkBAIC02NjksOCArNjY1LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaXA0aXA2X2RzY3BfZWNuX2RlY2Fwc3VsYXRlKHN0cnVjdCBpcDZfdG5sICp0LAotCQkJCQlzdHJ1Y3QgaXB2NmhkciAqaXB2NmgsCitzdGF0aWMgdm9pZCBpcDRpcDZfZHNjcF9lY25fZGVjYXBzdWxhdGUoY29uc3Qgc3RydWN0IGlwNl90bmwgKnQsCisJCQkJCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcHY2aCwKIAkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlfX3U4IGRzZmllbGQgPSBpcHY2X2dldF9kc2ZpZWxkKGlwdjZoKSAmIH5JTkVUX0VDTl9NQVNLOwpAQCAtNjgyLDggKzY3OCw4IEBACiAJCUlQX0VDTl9zZXRfY2UoaXBfaGRyKHNrYikpOwogfQogCi1zdGF0aWMgdm9pZCBpcDZpcDZfZHNjcF9lY25fZGVjYXBzdWxhdGUoc3RydWN0IGlwNl90bmwgKnQsCi0JCQkJCXN0cnVjdCBpcHY2aGRyICppcHY2aCwKK3N0YXRpYyB2b2lkIGlwNmlwNl9kc2NwX2Vjbl9kZWNhcHN1bGF0ZShjb25zdCBzdHJ1Y3QgaXA2X3RubCAqdCwKKwkJCQkJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwdjZoLAogCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWlmICh0LT5wYXJtcy5mbGFncyAmIElQNl9UTkxfRl9SQ1ZfRFNDUF9DT1BZKQpAQCAtNzI2LDEyICs3MjIsMTIgQEAKIAogc3RhdGljIGludCBpcDZfdG5sX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3UxNiBwcm90b2NvbCwKIAkJICAgICAgIF9fdTggaXBwcm90bywKLQkJICAgICAgIHZvaWQgKCpkc2NwX2Vjbl9kZWNhcHN1bGF0ZSkoc3RydWN0IGlwNl90bmwgKnQsCi0JCQkJCQkgICAgc3RydWN0IGlwdjZoZHIgKmlwdjZoLAorCQkgICAgICAgdm9pZCAoKmRzY3BfZWNuX2RlY2Fwc3VsYXRlKShjb25zdCBzdHJ1Y3QgaXA2X3RubCAqdCwKKwkJCQkJCSAgICBjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXB2NmgsCiAJCQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikpCiB7CiAJc3RydWN0IGlwNl90bmwgKnQ7Ci0Jc3RydWN0IGlwdjZoZHIgKmlwdjZoID0gaXB2Nl9oZHIoc2tiKTsKKwljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXB2NmggPSBpcHY2X2hkcihza2IpOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCkBAIC04MjgsNyArODI0LDcgQEAKICAqKi8KIAogc3RhdGljIGlubGluZSBpbnQKLWlwNl90bmxfYWRkcl9jb25mbGljdChzdHJ1Y3QgaXA2X3RubCAqdCwgc3RydWN0IGlwdjZoZHIgKmhkcikKK2lwNl90bmxfYWRkcl9jb25mbGljdChjb25zdCBzdHJ1Y3QgaXA2X3RubCAqdCwgY29uc3Qgc3RydWN0IGlwdjZoZHIgKmhkcikKIHsKIAlyZXR1cm4gaXB2Nl9hZGRyX2VxdWFsKCZ0LT5wYXJtcy5yYWRkciwgJmhkci0+c2FkZHIpOwogfQpAQCAtMTAwNSw3ICsxMDAxLDcgQEAKIGlwNGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBpcDZfdG5sICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaXBoZHIgICppcGggPSBpcF9oZHIoc2tiKTsKKwljb25zdCBzdHJ1Y3QgaXBoZHIgICppcGggPSBpcF9oZHIoc2tiKTsKIAlpbnQgZW5jYXBfbGltaXQgPSAtMTsKIAlzdHJ1Y3QgZmxvd2k2IGZsNjsKIAlfX3U4IGRzZmllbGQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZtci5jIGIvbmV0L2lwdjYvaXA2bXIuYwppbmRleCAyOWU0ODU5Li44MmE4MDk5IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZtci5jCisrKyBiL25ldC9pcHY2L2lwNm1yLmMKQEAgLTk4OSw4ICs5ODksOCBAQAogfQogCiBzdGF0aWMgc3RydWN0IG1mYzZfY2FjaGUgKmlwNm1yX2NhY2hlX2ZpbmQoc3RydWN0IG1yNl90YWJsZSAqbXJ0LAotCQkJCQkgICBzdHJ1Y3QgaW42X2FkZHIgKm9yaWdpbiwKLQkJCQkJICAgc3RydWN0IGluNl9hZGRyICptY2FzdGdycCkKKwkJCQkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpvcmlnaW4sCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbWNhc3RncnApCiB7CiAJaW50IGxpbmUgPSBNRkM2X0hBU0gobWNhc3RncnAsIG9yaWdpbik7CiAJc3RydWN0IG1mYzZfY2FjaGUgKmM7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcGNvbXA2LmMgYi9uZXQvaXB2Ni9pcGNvbXA2LmMKaW5kZXggODVjY2NkNi4uYmJhNjU4ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXBjb21wNi5jCisrKyBiL25ldC9pcHY2L2lwY29tcDYuYwpAQCAtNTUsNyArNTUsNyBAQAogewogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLT5kZXYpOwogCV9fYmUzMiBzcGk7Ci0Jc3RydWN0IGlwdjZoZHIgKmlwaCA9IChzdHJ1Y3QgaXB2Nmhkciopc2tiLT5kYXRhOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcGggPSAoY29uc3Qgc3RydWN0IGlwdjZoZHIgKilza2ItPmRhdGE7CiAJc3RydWN0IGlwX2NvbXBfaGRyICppcGNvbXBoID0KIAkJKHN0cnVjdCBpcF9jb21wX2hkciAqKShza2ItPmRhdGEgKyBvZmZzZXQpOwogCXN0cnVjdCB4ZnJtX3N0YXRlICp4OwpAQCAtNjQsNyArNjQsOCBAQAogCQlyZXR1cm47CiAKIAlzcGkgPSBodG9ubChudG9ocyhpcGNvbXBoLT5jcGkpKTsKLQl4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBza2ItPm1hcmssICh4ZnJtX2FkZHJlc3NfdCAqKSZpcGgtPmRhZGRyLCBzcGksIElQUFJPVE9fQ09NUCwgQUZfSU5FVDYpOworCXggPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIHNrYi0+bWFyaywgKGNvbnN0IHhmcm1fYWRkcmVzc190ICopJmlwaC0+ZGFkZHIsCisJCQkgICAgICBzcGksIElQUFJPVE9fQ09NUCwgQUZfSU5FVDYpOwogCWlmICgheCkKIAkJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9tY2FzdC5jIGIvbmV0L2lwdjYvbWNhc3QuYwppbmRleCBmMmQ5OGNhLi4zZTZlYmNkIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9tY2FzdC5jCisrKyBiL25ldC9pcHY2L21jYXN0LmMKQEAgLTkyLDE2ICs5MiwxNiBAQAogc3RhdGljIHZvaWQgbWxkX2lmY190aW1lcl9leHBpcmUodW5zaWduZWQgbG9uZyBkYXRhKTsKIHN0YXRpYyB2b2lkIG1sZF9pZmNfZXZlbnQoc3RydWN0IGluZXQ2X2RldiAqaWRldik7CiBzdGF0aWMgdm9pZCBtbGRfYWRkX2RlbHJlYyhzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LCBzdHJ1Y3QgaWZtY2FkZHI2ICpwbWMpOwotc3RhdGljIHZvaWQgbWxkX2RlbF9kZWxyZWMoc3RydWN0IGluZXQ2X2RldiAqaWRldiwgc3RydWN0IGluNl9hZGRyICphZGRyKTsKK3N0YXRpYyB2b2lkIG1sZF9kZWxfZGVscmVjKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcik7CiBzdGF0aWMgdm9pZCBtbGRfY2xlYXJfZGVscmVjKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpOwogc3RhdGljIGludCBzZl9zZXRzdGF0ZShzdHJ1Y3QgaWZtY2FkZHI2ICpwbWMpOwogc3RhdGljIHZvaWQgc2ZfbWFya3N0YXRlKHN0cnVjdCBpZm1jYWRkcjYgKnBtYyk7CiBzdGF0aWMgdm9pZCBpcDZfbWNfY2xlYXJfc3JjKHN0cnVjdCBpZm1jYWRkcjYgKnBtYyk7Ci1zdGF0aWMgaW50IGlwNl9tY19kZWxfc3JjKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsIHN0cnVjdCBpbjZfYWRkciAqcG1jYSwKLQkJCSAgaW50IHNmbW9kZSwgaW50IHNmY291bnQsIHN0cnVjdCBpbjZfYWRkciAqcHNmc3JjLAorc3RhdGljIGludCBpcDZfbWNfZGVsX3NyYyhzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnBtY2EsCisJCQkgIGludCBzZm1vZGUsIGludCBzZmNvdW50LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnBzZnNyYywKIAkJCSAgaW50IGRlbHRhKTsKLXN0YXRpYyBpbnQgaXA2X21jX2FkZF9zcmMoc3RydWN0IGluZXQ2X2RldiAqaWRldiwgc3RydWN0IGluNl9hZGRyICpwbWNhLAotCQkJICBpbnQgc2Ztb2RlLCBpbnQgc2Zjb3VudCwgc3RydWN0IGluNl9hZGRyICpwc2ZzcmMsCitzdGF0aWMgaW50IGlwNl9tY19hZGRfc3JjKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqcG1jYSwKKwkJCSAgaW50IHNmbW9kZSwgaW50IHNmY291bnQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqcHNmc3JjLAogCQkJICBpbnQgZGVsdGEpOwogc3RhdGljIGludCBpcDZfbWNfbGVhdmVfc3JjKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwdjZfbWNfc29ja2xpc3QgKmltbCwKIAkJCSAgICBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KTsKQEAgLTI0Niw3ICsyNDYsNyBAQAogCiAvKiBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgKi8KIHN0YXRpYyBzdHJ1Y3QgaW5ldDZfZGV2ICppcDZfbWNfZmluZF9kZXZfcmN1KHN0cnVjdCBuZXQgKm5ldCwKLQkJCQkJICAgICBzdHJ1Y3QgaW42X2FkZHIgKmdyb3VwLAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3JvdXAsCiAJCQkJCSAgICAgaW50IGlmaW5kZXgpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CkBAIC00NDcsNyArNDQ3LDcgQEAKIAogaW50IGlwNl9tY19tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBncm91cF9maWx0ZXIgKmdzZikKIHsKLQlzdHJ1Y3QgaW42X2FkZHIgKmdyb3VwOworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3JvdXA7CiAJc3RydWN0IGlwdjZfbWNfc29ja2xpc3QgKnBtYzsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2OwogCXN0cnVjdCBpcHY2X3BpbmZvICppbmV0NiA9IGluZXQ2X3NrKHNrKTsKQEAgLTUzOCw3ICs1MzgsNyBAQAogCXN0cnVjdCBncm91cF9maWx0ZXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKIHsKIAlpbnQgZXJyLCBpLCBjb3VudCwgY29weWNvdW50OwotCXN0cnVjdCBpbjZfYWRkciAqZ3JvdXA7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyICpncm91cDsKIAlzdHJ1Y3QgaXB2Nl9tY19zb2NrbGlzdCAqcG1jOwogCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7CiAJc3RydWN0IGlwdjZfcGluZm8gKmluZXQ2ID0gaW5ldDZfc2soc2spOwpAQCAtNzQ4LDcgKzc0OCw3IEBACiAJc3Bpbl91bmxvY2tfYmgoJmlkZXYtPm1jX2xvY2spOwogfQogCi1zdGF0aWMgdm9pZCBtbGRfZGVsX2RlbHJlYyhzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LCBzdHJ1Y3QgaW42X2FkZHIgKnBtY2EpCitzdGF0aWMgdm9pZCBtbGRfZGVsX2RlbHJlYyhzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnBtY2EpCiB7CiAJc3RydWN0IGlmbWNhZGRyNiAqcG1jLCAqcG1jX3ByZXY7CiAJc3RydWN0IGlwNl9zZl9saXN0ICpwc2YsICpwc2ZfbmV4dDsKQEAgLTEwNDgsNyArMTA0OCw3IEBACiAKIC8qIG1hcmsgRVhDTFVERS1tb2RlIHNvdXJjZXMgKi8KIHN0YXRpYyBpbnQgbWxkX3htYXJrc291cmNlcyhzdHJ1Y3QgaWZtY2FkZHI2ICpwbWMsIGludCBuc3JjcywKLQlzdHJ1Y3QgaW42X2FkZHIgKnNyY3MpCisJY29uc3Qgc3RydWN0IGluNl9hZGRyICpzcmNzKQogewogCXN0cnVjdCBpcDZfc2ZfbGlzdCAqcHNmOwogCWludCBpLCBzY291bnQ7CkBAIC0xMDc2LDcgKzEwNzYsNyBAQAogfQogCiBzdGF0aWMgaW50IG1sZF9tYXJrc291cmNlcyhzdHJ1Y3QgaWZtY2FkZHI2ICpwbWMsIGludCBuc3JjcywKLQlzdHJ1Y3QgaW42X2FkZHIgKnNyY3MpCisJY29uc3Qgc3RydWN0IGluNl9hZGRyICpzcmNzKQogewogCXN0cnVjdCBpcDZfc2ZfbGlzdCAqcHNmOwogCWludCBpLCBzY291bnQ7CkBAIC0xMTExLDcgKzExMTEsNyBAQAogewogCXN0cnVjdCBtbGQyX3F1ZXJ5ICptbGgyID0gTlVMTDsKIAlzdHJ1Y3QgaWZtY2FkZHI2ICptYTsKLQlzdHJ1Y3QgaW42X2FkZHIgKmdyb3VwOworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3JvdXA7CiAJdW5zaWduZWQgbG9uZyBtYXhfZGVsYXk7CiAJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKIAlzdHJ1Y3QgbWxkX21zZyAqbWxkOwpAQCAtMTgxNyw3ICsxODE3LDcgQEAKIH0KIAogc3RhdGljIGludCBpcDZfbWNfZGVsMV9zcmMoc3RydWN0IGlmbWNhZGRyNiAqcG1jLCBpbnQgc2Ztb2RlLAotCXN0cnVjdCBpbjZfYWRkciAqcHNmc3JjKQorCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqcHNmc3JjKQogewogCXN0cnVjdCBpcDZfc2ZfbGlzdCAqcHNmLCAqcHNmX3ByZXY7CiAJaW50IHJ2ID0gMDsKQEAgLTE4NTMsOCArMTg1Myw4IEBACiAJcmV0dXJuIHJ2OwogfQogCi1zdGF0aWMgaW50IGlwNl9tY19kZWxfc3JjKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsIHN0cnVjdCBpbjZfYWRkciAqcG1jYSwKLQkJCSAgaW50IHNmbW9kZSwgaW50IHNmY291bnQsIHN0cnVjdCBpbjZfYWRkciAqcHNmc3JjLAorc3RhdGljIGludCBpcDZfbWNfZGVsX3NyYyhzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnBtY2EsCisJCQkgIGludCBzZm1vZGUsIGludCBzZmNvdW50LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnBzZnNyYywKIAkJCSAgaW50IGRlbHRhKQogewogCXN0cnVjdCBpZm1jYWRkcjYgKnBtYzsKQEAgLTE5MTQsNyArMTkxNCw3IEBACiAgKiBBZGQgbXVsdGljYXN0IHNpbmdsZS1zb3VyY2UgZmlsdGVyIHRvIHRoZSBpbnRlcmZhY2UgbGlzdAogICovCiBzdGF0aWMgaW50IGlwNl9tY19hZGQxX3NyYyhzdHJ1Y3QgaWZtY2FkZHI2ICpwbWMsIGludCBzZm1vZGUsCi0Jc3RydWN0IGluNl9hZGRyICpwc2ZzcmMsIGludCBkZWx0YSkKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnBzZnNyYywgaW50IGRlbHRhKQogewogCXN0cnVjdCBpcDZfc2ZfbGlzdCAqcHNmLCAqcHNmX3ByZXY7CiAKQEAgLTIwMTcsOCArMjAxNyw4IEBACiAvKgogICogQWRkIG11bHRpY2FzdCBzb3VyY2UgZmlsdGVyIGxpc3QgdG8gdGhlIGludGVyZmFjZSBsaXN0CiAgKi8KLXN0YXRpYyBpbnQgaXA2X21jX2FkZF9zcmMoc3RydWN0IGluZXQ2X2RldiAqaWRldiwgc3RydWN0IGluNl9hZGRyICpwbWNhLAotCQkJICBpbnQgc2Ztb2RlLCBpbnQgc2Zjb3VudCwgc3RydWN0IGluNl9hZGRyICpwc2ZzcmMsCitzdGF0aWMgaW50IGlwNl9tY19hZGRfc3JjKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqcG1jYSwKKwkJCSAgaW50IHNmbW9kZSwgaW50IHNmY291bnQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqcHNmc3JjLAogCQkJICBpbnQgZGVsdGEpCiB7CiAJc3RydWN0IGlmbWNhZGRyNiAqcG1jOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbWlwNi5jIGIvbmV0L2lwdjYvbWlwNi5jCmluZGV4IDliMjEwNDguLjQzMjQyZTYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L21pcDYuYworKysgYi9uZXQvaXB2Ni9taXA2LmMKQEAgLTEyNiw3ICsxMjYsNyBAQAogCiBzdGF0aWMgaW50IG1pcDZfZGVzdG9wdF9pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaXB2NmhkciAqaXBoID0gaXB2Nl9oZHIoc2tiKTsKKwljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXBoID0gaXB2Nl9oZHIoc2tiKTsKIAlzdHJ1Y3QgaXB2Nl9kZXN0b3B0X2hkciAqZGVzdG9wdCA9IChzdHJ1Y3QgaXB2Nl9kZXN0b3B0X2hkciAqKXNrYi0+ZGF0YTsKIAlpbnQgZXJyID0gZGVzdG9wdC0+bmV4dGhkcjsKIApAQCAtMTgxLDggKzE4MSw4IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IG1pcDZfcmVwb3J0X3JsX2FsbG93KHN0cnVjdCB0aW1ldmFsICpzdGFtcCwKLQkJCQkgICAgICAgc3RydWN0IGluNl9hZGRyICpkc3QsCi0JCQkJICAgICAgIHN0cnVjdCBpbjZfYWRkciAqc3JjLCBpbnQgaWlmKQorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRzdCwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzcmMsIGludCBpaWYpCiB7CiAJaW50IGFsbG93ID0gMDsKIApAQCAtMzQ5LDcgKzM0OSw3IEBACiAKIHN0YXRpYyBpbnQgbWlwNl9ydGhkcl9pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaXB2NmhkciAqaXBoID0gaXB2Nl9oZHIoc2tiKTsKKwljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXBoID0gaXB2Nl9oZHIoc2tiKTsKIAlzdHJ1Y3QgcnQyX2hkciAqcnQyID0gKHN0cnVjdCBydDJfaGRyICopc2tiLT5kYXRhOwogCWludCBlcnIgPSBydDItPnJ0X2hkci5uZXh0aGRyOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZGlzYy5jIGIvbmV0L2lwdjYvbmRpc2MuYwppbmRleCA5MmY5NTJkLi43NTk2ZjA3IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZGlzYy5jCisrKyBiL25ldC9pcHY2L25kaXNjLmMKQEAgLTMyNCw3ICszMjQsNyBAQAogCXJldHVybiBsbGFkZHIgKyBwcmVwYWQ7CiB9CiAKLWludCBuZGlzY19tY19tYXAoc3RydWN0IGluNl9hZGRyICphZGRyLCBjaGFyICpidWYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkaXIpCitpbnQgbmRpc2NfbWNfbWFwKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwgY2hhciAqYnVmLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGlyKQogewogCXN3aXRjaCAoZGV2LT50eXBlKSB7CiAJY2FzZSBBUlBIUkRfRVRIRVI6CkBAIC02MTEsNiArNjExLDI5IEBACiAJCSAgICAgaW5jX29wdCA/IE5EX09QVF9UQVJHRVRfTExfQUREUiA6IDApOwogfQogCitzdGF0aWMgdm9pZCBuZGlzY19zZW5kX3Vuc29sX25hKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKKwlzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZmE7CisJc3RydWN0IGluNl9hZGRyIG1jYWRkcjsKKworCWlkZXYgPSBpbjZfZGV2X2dldChkZXYpOworCWlmICghaWRldikKKwkJcmV0dXJuOworCisJcmVhZF9sb2NrX2JoKCZpZGV2LT5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlmYSwgJmlkZXYtPmFkZHJfbGlzdCwgaWZfbGlzdCkgeworCQlhZGRyY29uZl9hZGRyX3NvbGljdF9tdWx0KCZpZmEtPmFkZHIsICZtY2FkZHIpOworCQluZGlzY19zZW5kX25hKGRldiwgTlVMTCwgJm1jYWRkciwgJmlmYS0+YWRkciwKKwkJCSAgICAgIC8qcm91dGVyPSovICEhaWRldi0+Y25mLmZvcndhcmRpbmcsCisJCQkgICAgICAvKnNvbGljaXRlZD0qLyBmYWxzZSwgLypvdmVycmlkZT0qLyB0cnVlLAorCQkJICAgICAgLyppbmNfb3B0PSovIHRydWUpOworCX0KKwlyZWFkX3VubG9ja19iaCgmaWRldi0+bG9jayk7CisKKwlpbjZfZGV2X3B1dChpZGV2KTsKK30KKwogdm9pZCBuZGlzY19zZW5kX25zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLAogCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNvbGljaXQsCiAJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpCkBAIC03MjUsOCArNzQ4LDggQEAKIHN0YXRpYyB2b2lkIG5kaXNjX3JlY3ZfbnMoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgbmRfbXNnICptc2cgPSAoc3RydWN0IG5kX21zZyAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7Ci0Jc3RydWN0IGluNl9hZGRyICpzYWRkciA9ICZpcHY2X2hkcihza2IpLT5zYWRkcjsKLQlzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyID0gJmlwdjZfaGRyKHNrYiktPmRhZGRyOworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIgPSAmaXB2Nl9oZHIoc2tiKS0+c2FkZHI7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciA9ICZpcHY2X2hkcihza2IpLT5kYWRkcjsKIAl1OCAqbGxhZGRyID0gTlVMTDsKIAl1MzIgbmRvcHRsZW4gPSBza2ItPnRhaWwgLSAoc2tiLT50cmFuc3BvcnRfaGVhZGVyICsKIAkJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IG5kX21zZywgb3B0KSk7CkBAIC05MDEsOCArOTI0LDggQEAKIHN0YXRpYyB2b2lkIG5kaXNjX3JlY3ZfbmEoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgbmRfbXNnICptc2cgPSAoc3RydWN0IG5kX21zZyAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7Ci0Jc3RydWN0IGluNl9hZGRyICpzYWRkciA9ICZpcHY2X2hkcihza2IpLT5zYWRkcjsKLQlzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyID0gJmlwdjZfaGRyKHNrYiktPmRhZGRyOworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIgPSAmaXB2Nl9oZHIoc2tiKS0+c2FkZHI7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciA9ICZpcHY2X2hkcihza2IpLT5kYWRkcjsKIAl1OCAqbGxhZGRyID0gTlVMTDsKIAl1MzIgbmRvcHRsZW4gPSBza2ItPnRhaWwgLSAoc2tiLT50cmFuc3BvcnRfaGVhZGVyICsKIAkJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IG5kX21zZywgb3B0KSk7CkBAIC05NDUsOSArOTY4LDEwIEBACiAJfQogCWlmcCA9IGlwdjZfZ2V0X2lmYWRkcihkZXZfbmV0KGRldiksICZtc2ctPnRhcmdldCwgZGV2LCAxKTsKIAlpZiAoaWZwKSB7Ci0JCWlmIChpZnAtPmZsYWdzICYgSUZBX0ZfVEVOVEFUSVZFKSB7Ci0JCQlhZGRyY29uZl9kYWRfZmFpbHVyZShpZnApOwotCQkJcmV0dXJuOworCQlpZiAoc2tiLT5wa3RfdHlwZSAhPSBQQUNLRVRfTE9PUEJBQ0sKKwkJICAgICYmIChpZnAtPmZsYWdzICYgSUZBX0ZfVEVOVEFUSVZFKSkgeworCQkJCWFkZHJjb25mX2RhZF9mYWlsdXJlKGlmcCk7CisJCQkJcmV0dXJuOwogCQl9CiAJCS8qIFdoYXQgc2hvdWxkIHdlIG1ha2Ugbm93PyBUaGUgYWR2ZXJ0aXNlbWVudAogCQkgICBpcyBpbnZhbGlkLCBidXQgbmRpc2Mgc3BlY3Mgc2F5IG5vdGhpbmcKQEAgLTEwMTQsNyArMTAzOCw3IEBACiAJdW5zaWduZWQgbG9uZyBuZG9wdGxlbiA9IHNrYi0+bGVuIC0gc2l6ZW9mKCpyc19tc2cpOwogCXN0cnVjdCBuZWlnaGJvdXIgKm5laWdoOwogCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7Ci0Jc3RydWN0IGluNl9hZGRyICpzYWRkciA9ICZpcHY2X2hkcihza2IpLT5zYWRkcjsKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyID0gJmlwdjZfaGRyKHNrYiktPnNhZGRyOwogCXN0cnVjdCBuZGlzY19vcHRpb25zIG5kb3B0czsKIAl1OCAqbGxhZGRyID0gTlVMTDsKIApAQCAtMTQxMSw4ICsxNDM1LDggQEAKIHsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppbjZfZGV2OwogCXN0cnVjdCBpY21wNmhkciAqaWNtcGg7Ci0Jc3RydWN0IGluNl9hZGRyICpkZXN0OwotCXN0cnVjdCBpbjZfYWRkciAqdGFyZ2V0OwkvKiBuZXcgZmlyc3QgaG9wIHRvIGRlc3RpbmF0aW9uICovCisJY29uc3Qgc3RydWN0IGluNl9hZGRyICpkZXN0OworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqdGFyZ2V0OwkvKiBuZXcgZmlyc3QgaG9wIHRvIGRlc3RpbmF0aW9uICovCiAJc3RydWN0IG5laWdoYm91ciAqbmVpZ2g7CiAJaW50IG9uX2xpbmsgPSAwOwogCXN0cnVjdCBuZGlzY19vcHRpb25zIG5kb3B0czsKQEAgLTE0NDUsNyArMTQ2OSw3IEBACiAJfQogCiAJaWNtcGggPSBpY21wNl9oZHIoc2tiKTsKLQl0YXJnZXQgPSAoc3RydWN0IGluNl9hZGRyICopIChpY21waCArIDEpOworCXRhcmdldCA9IChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKikgKGljbXBoICsgMSk7CiAJZGVzdCA9IHRhcmdldCArIDE7CiAKIAlpZiAoaXB2Nl9hZGRyX2lzX211bHRpY2FzdChkZXN0KSkgewpAQCAtMTcyMiw2ICsxNzQ2LDkgQEAKIAkJbmVpZ2hfaWZkb3duKCZuZF90YmwsIGRldik7CiAJCWZpYjZfcnVuX2djKH4wVUwsIG5ldCk7CiAJCWJyZWFrOworCWNhc2UgTkVUREVWX05PVElGWV9QRUVSUzoKKwkJbmRpc2Nfc2VuZF91bnNvbF9uYShkZXYpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIuYyBiL25ldC9pcHY2L25ldGZpbHRlci5jCmluZGV4IDI4YmMxZjYuLjMwZmNlZTQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci5jCkBAIC0xMyw3ICsxMyw3IEBACiBpbnQgaXA2X3JvdXRlX21lX2hhcmRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiX2RzdChza2IpLT5kZXYpOwotCXN0cnVjdCBpcHY2aGRyICppcGggPSBpcHY2X2hkcihza2IpOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcGggPSBpcHY2X2hkcihza2IpOwogCXN0cnVjdCBkc3RfZW50cnkgKmRzdDsKIAlzdHJ1Y3QgZmxvd2k2IGZsNiA9IHsKIAkJLmZsb3dpNl9vaWYgPSBza2ItPnNrID8gc2tiLT5zay0+c2tfYm91bmRfZGV2X2lmIDogMCwKQEAgLTY3LDcgKzY3LDcgQEAKIAlzdHJ1Y3QgaXA2X3J0X2luZm8gKnJ0X2luZm8gPSBuZl9xdWV1ZV9lbnRyeV9yZXJvdXRlKGVudHJ5KTsKIAogCWlmIChlbnRyeS0+aG9vayA9PSBORl9JTkVUX0xPQ0FMX09VVCkgewotCQlzdHJ1Y3QgaXB2NmhkciAqaXBoID0gaXB2Nl9oZHIoc2tiKTsKKwkJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwaCA9IGlwdjZfaGRyKHNrYik7CiAKIAkJcnRfaW5mby0+ZGFkZHIgPSBpcGgtPmRhZGRyOwogCQlydF9pbmZvLT5zYWRkciA9IGlwaC0+c2FkZHI7CkBAIC04MSw3ICs4MSw3IEBACiAJc3RydWN0IGlwNl9ydF9pbmZvICpydF9pbmZvID0gbmZfcXVldWVfZW50cnlfcmVyb3V0ZShlbnRyeSk7CiAKIAlpZiAoZW50cnktPmhvb2sgPT0gTkZfSU5FVF9MT0NBTF9PVVQpIHsKLQkJc3RydWN0IGlwdjZoZHIgKmlwaCA9IGlwdjZfaGRyKHNrYik7CisJCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcGggPSBpcHY2X2hkcihza2IpOwogCQlpZiAoIWlwdjZfYWRkcl9lcXVhbCgmaXBoLT5kYWRkciwgJnJ0X2luZm8tPmRhZGRyKSB8fAogCQkgICAgIWlwdjZfYWRkcl9lcXVhbCgmaXBoLT5zYWRkciwgJnJ0X2luZm8tPnNhZGRyKSB8fAogCQkgICAgc2tiLT5tYXJrICE9IHJ0X2luZm8tPm1hcmspCkBAIC0xMDgsNyArMTA4LDcgQEAKIF9fc3VtMTYgbmZfaXA2X2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rLAogCQkJICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdV9pbnQ4X3QgcHJvdG9jb2wpCiB7Ci0Jc3RydWN0IGlwdjZoZHIgKmlwNmggPSBpcHY2X2hkcihza2IpOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoID0gaXB2Nl9oZHIoc2tiKTsKIAlfX3N1bTE2IGNzdW0gPSAwOwogCiAJc3dpdGNoIChza2ItPmlwX3N1bW1lZCkgewpAQCAtMTQyLDcgKzE0Miw3IEBACiAJCQkJICAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1bnNpZ25lZCBpbnQgbGVuLAogCQkJCSAgICAgICB1X2ludDhfdCBwcm90b2NvbCkKIHsKLQlzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7CisJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNmggPSBpcHY2X2hkcihza2IpOwogCV9fd3N1bSBoc3VtOwogCV9fc3VtMTYgY3N1bSA9IDA7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCmluZGV4IDVhMWM2ZjIuLjk0ODc0YjAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYwpAQCAtMzQwLDYgKzM0MCw3IEBACiAJdW5zaWduZWQgaW50ICpzdGFja3B0ciwgb3JpZ3B0ciwgY3B1OwogCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlOwogCXN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gYWNwYXI7CisJdW5zaWduZWQgaW50IGFkZGVuZDsKIAogCS8qIEluaXRpYWxpemF0aW9uICovCiAJaW5kZXYgPSBpbiA/IGluLT5uYW1lIDogbnVsbGRldm5hbWU7CkBAIC0zNTgsNyArMzU5LDggQEAKIAogCUlQX05GX0FTU0VSVCh0YWJsZS0+dmFsaWRfaG9va3MgJiAoMSA8PCBob29rKSk7CiAKLQl4dF9pbmZvX3JkbG9ja19iaCgpOworCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwlhZGRlbmQgPSB4dF93cml0ZV9yZWNzZXFfYmVnaW4oKTsKIAlwcml2YXRlID0gdGFibGUtPnByaXZhdGU7CiAJY3B1ICAgICAgICA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAl0YWJsZV9iYXNlID0gcHJpdmF0ZS0+ZW50cmllc1tjcHVdOwpAQCAtNDQyLDcgKzQ0NCw5IEBACiAJfSB3aGlsZSAoIWFjcGFyLmhvdGRyb3ApOwogCiAJKnN0YWNrcHRyID0gb3JpZ3B0cjsKLQl4dF9pbmZvX3JkdW5sb2NrX2JoKCk7CisKKyAJeHRfd3JpdGVfcmVjc2VxX2VuZChhZGRlbmQpOworIAlsb2NhbF9iaF9lbmFibGUoKTsKIAogI2lmZGVmIERFQlVHX0FMTE9XX0FMTAogCXJldHVybiBORl9BQ0NFUFQ7CkBAIC04OTksNyArOTAzLDcgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJc2VxbG9ja190ICpsb2NrID0gJnBlcl9jcHUoeHRfaW5mb19sb2NrcywgY3B1KS5sb2NrOworCQlzZXFjb3VudF90ICpzID0gJnBlcl9jcHUoeHRfcmVjc2VxLCBjcHUpOwogCiAJCWkgPSAwOwogCQl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIHQtPmVudHJpZXNbY3B1XSwgdC0+c2l6ZSkgewpAQCAtOTA3LDEwICs5MTEsMTAgQEAKIAkJCXVuc2lnbmVkIGludCBzdGFydDsKIAogCQkJZG8gewotCQkJCXN0YXJ0ID0gcmVhZF9zZXFiZWdpbihsb2NrKTsKKwkJCQlzdGFydCA9IHJlYWRfc2VxY291bnRfYmVnaW4ocyk7CiAJCQkJYmNudCA9IGl0ZXItPmNvdW50ZXJzLmJjbnQ7CiAJCQkJcGNudCA9IGl0ZXItPmNvdW50ZXJzLnBjbnQ7Ci0JCQl9IHdoaWxlIChyZWFkX3NlcXJldHJ5KGxvY2ssIHN0YXJ0KSk7CisJCQl9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KHMsIHN0YXJ0KSk7CiAKIAkJCUFERF9DT1VOVEVSKGNvdW50ZXJzW2ldLCBiY250LCBwY250KTsKIAkJCSsraTsKQEAgLTEzMjUsNiArMTMyOSw3IEBACiAJaW50IHJldCA9IDA7CiAJY29uc3Qgdm9pZCAqbG9jX2NwdV9lbnRyeTsKIAlzdHJ1Y3QgaXA2dF9lbnRyeSAqaXRlcjsKKwl1bnNpZ25lZCBpbnQgYWRkZW5kOwogI2lmZGVmIENPTkZJR19DT01QQVQKIAlzdHJ1Y3QgY29tcGF0X3h0X2NvdW50ZXJzX2luZm8gY29tcGF0X3RtcDsKIApAQCAtMTM4MSwxMyArMTM4NiwxMyBAQAogCWkgPSAwOwogCS8qIENob29zZSB0aGUgY29weSB0aGF0IGlzIG9uIG91ciBub2RlICovCiAJY3VyY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXh0X2luZm9fd3Jsb2NrKGN1cmNwdSk7CisJYWRkZW5kID0geHRfd3JpdGVfcmVjc2VxX2JlZ2luKCk7CiAJbG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtPmVudHJpZXNbY3VyY3B1XTsKIAl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIGxvY19jcHVfZW50cnksIHByaXZhdGUtPnNpemUpIHsKIAkJQUREX0NPVU5URVIoaXRlci0+Y291bnRlcnMsIHBhZGRjW2ldLmJjbnQsIHBhZGRjW2ldLnBjbnQpOwogCQkrK2k7CiAJfQotCXh0X2luZm9fd3J1bmxvY2soY3VyY3B1KTsKKwl4dF93cml0ZV9yZWNzZXFfZW5kKGFkZGVuZCk7CiAKICB1bmxvY2tfdXBfZnJlZToKIAlsb2NhbF9iaF9lbmFibGUoKTsKQEAgLTE1NzgsNyArMTU4Myw2IEBACiAJCQkgICAgc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sIHVuc2lnbmVkIGNoYXIgKmJhc2UpCiB7CiAJc3RydWN0IHh0X2VudHJ5X3RhcmdldCAqdDsKLQlzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQ7CiAJc3RydWN0IGlwNnRfZW50cnkgKmRlOwogCXVuc2lnbmVkIGludCBvcmlnc2l6ZTsKIAlpbnQgcmV0LCBoOwpAQCAtMTYwMCw3ICsxNjA0LDYgQEAKIAl9CiAJZGUtPnRhcmdldF9vZmZzZXQgPSBlLT50YXJnZXRfb2Zmc2V0IC0gKG9yaWdzaXplIC0gKnNpemUpOwogCXQgPSBjb21wYXRfaXA2dF9nZXRfdGFyZ2V0KGUpOwotCXRhcmdldCA9IHQtPnUua2VybmVsLnRhcmdldDsKIAl4dF9jb21wYXRfdGFyZ2V0X2Zyb21fdXNlcih0LCBkc3RwdHIsIHNpemUpOwogCiAJZGUtPm5leHRfb2Zmc2V0ID0gZS0+bmV4dF9vZmZzZXQgLSAob3JpZ3NpemUgLSAqc2l6ZSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfbWFuZ2xlLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfbWFuZ2xlLmMKaW5kZXggNjc5YTBhMy4uMDBkMTkxNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX21hbmdsZS5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9tYW5nbGUuYwpAQCAtNjQsNyArNjQsOCBAQAogCSAgICAobWVtY21wKCZpcHY2X2hkcihza2IpLT5zYWRkciwgJnNhZGRyLCBzaXplb2Yoc2FkZHIpKSB8fAogCSAgICAgbWVtY21wKCZpcHY2X2hkcihza2IpLT5kYWRkciwgJmRhZGRyLCBzaXplb2YoZGFkZHIpKSB8fAogCSAgICAgc2tiLT5tYXJrICE9IG1hcmsgfHwKLQkgICAgIGlwdjZfaGRyKHNrYiktPmhvcF9saW1pdCAhPSBob3BfbGltaXQpKQorCSAgICAgaXB2Nl9oZHIoc2tiKS0+aG9wX2xpbWl0ICE9IGhvcF9saW1pdCB8fAorCSAgICAgZmxvd2xhYmVsICE9ICooKHVfaW50MzJfdCAqKWlwdjZfaGRyKHNrYikpKSkKIAkJcmV0dXJuIGlwNl9yb3V0ZV9tZV9oYXJkZXIoc2tiKSA9PSAwID8gcmV0IDogTkZfRFJPUDsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9wcm9jLmMgYi9uZXQvaXB2Ni9wcm9jLmMKaW5kZXggMjRiMzU1OC4uMThmZjVkZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcHJvYy5jCisrKyBiL25ldC9pcHY2L3Byb2MuYwpAQCAtMTQxLDcgKzE0MSwxMSBAQAogCVNOTVBfTUlCX1NFTlRJTkVMCiB9OwogCi1zdGF0aWMgdm9pZCBzbm1wNl9zZXFfc2hvd19pY21wdjZtc2coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgX19wZXJjcHUgKiptaWIpCisvKiBjYW4gYmUgY2FsbGVkIGVpdGhlciB3aXRoIHBlcmNwdSBtaWIgKHBjcHVtaWIgIT0gTlVMTCksCisgKiBvciBzaGFyZWQgb25lIChzbWliICE9IE5VTEwpCisgKi8KK3N0YXRpYyB2b2lkIHNubXA2X3NlcV9zaG93X2ljbXB2Nm1zZyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCBfX3BlcmNwdSAqKnBjcHVtaWIsCisJCQkJICAgICBhdG9taWNfbG9uZ190ICpzbWliKQogewogCWNoYXIgbmFtZVszMl07CiAJaW50IGk7CkBAIC0xNTgsMTQgKzE2MiwxNCBAQAogCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJJY21wNiVzJXMiLAogCQkJaSAmIDB4MTAwID8gIk91dCIgOiAiSW4iLCBwKTsKIAkJc2VxX3ByaW50ZihzZXEsICIlLTMyc1x0JWx1XG4iLCBuYW1lLAotCQkJc25tcF9mb2xkX2ZpZWxkKG1pYiwgaSkpOworCQkJcGNwdW1pYiA/IHNubXBfZm9sZF9maWVsZChwY3B1bWliLCBpKSA6IGF0b21pY19sb25nX3JlYWQoc21pYiArIGkpKTsKIAl9CiAKIAkvKiBwcmludCBieSBudW1iZXIgKG5vbnplcm8gb25seSkgLSBJQ01QTXNnU3RhdCBmb3JtYXQgKi8KIAlmb3IgKGkgPSAwOyBpIDwgSUNNUDZNU0dfTUlCX01BWDsgaSsrKSB7CiAJCXVuc2lnbmVkIGxvbmcgdmFsOwogCi0JCXZhbCA9IHNubXBfZm9sZF9maWVsZChtaWIsIGkpOworCQl2YWwgPSBwY3B1bWliID8gc25tcF9mb2xkX2ZpZWxkKHBjcHVtaWIsIGkpIDogYXRvbWljX2xvbmdfcmVhZChzbWliICsgaSk7CiAJCWlmICghdmFsKQogCQkJY29udGludWU7CiAJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIkljbXA2JXNUeXBlJXUiLApAQCAtMTc0LDE0ICsxNzgsMjIgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHNubXA2X3NlcV9zaG93X2l0ZW0oc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgX19wZXJjcHUgKiptaWIsCisvKiBjYW4gYmUgY2FsbGVkIGVpdGhlciB3aXRoIHBlcmNwdSBtaWIgKHBjcHVtaWIgIT0gTlVMTCksCisgKiBvciBzaGFyZWQgb25lIChzbWliICE9IE5VTEwpCisgKi8KK3N0YXRpYyB2b2lkIHNubXA2X3NlcV9zaG93X2l0ZW0oc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgX19wZXJjcHUgKipwY3B1bWliLAorCQkJCWF0b21pY19sb25nX3QgKnNtaWIsCiAJCQkJY29uc3Qgc3RydWN0IHNubXBfbWliICppdGVtbGlzdCkKIHsKIAlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKIAotCWZvciAoaSA9IDA7IGl0ZW1saXN0W2ldLm5hbWU7IGkrKykKLQkJc2VxX3ByaW50ZihzZXEsICIlLTMyc1x0JWx1XG4iLCBpdGVtbGlzdFtpXS5uYW1lLAotCQkJICAgc25tcF9mb2xkX2ZpZWxkKG1pYiwgaXRlbWxpc3RbaV0uZW50cnkpKTsKKwlmb3IgKGkgPSAwOyBpdGVtbGlzdFtpXS5uYW1lOyBpKyspIHsKKwkJdmFsID0gcGNwdW1pYiA/CisJCQlzbm1wX2ZvbGRfZmllbGQocGNwdW1pYiwgaXRlbWxpc3RbaV0uZW50cnkpIDoKKwkJCWF0b21pY19sb25nX3JlYWQoc21pYiArIGl0ZW1saXN0W2ldLmVudHJ5KTsKKwkJc2VxX3ByaW50ZihzZXEsICIlLTMyc1x0JWx1XG4iLCBpdGVtbGlzdFtpXS5uYW1lLCB2YWwpOworCX0KIH0KIAogc3RhdGljIHZvaWQgc25tcDZfc2VxX3Nob3dfaXRlbTY0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkIF9fcGVyY3B1ICoqbWliLApAQCAtMjAxLDEzICsyMTMsMTMgQEAKIAlzbm1wNl9zZXFfc2hvd19pdGVtNjQoc2VxLCAodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi5pcHY2X3N0YXRpc3RpY3MsCiAJCQkgICAgc25tcDZfaXBzdGF0c19saXN0LCBvZmZzZXRvZihzdHJ1Y3QgaXBzdGF0c19taWIsIHN5bmNwKSk7CiAJc25tcDZfc2VxX3Nob3dfaXRlbShzZXEsICh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLmljbXB2Nl9zdGF0aXN0aWNzLAotCQkJICAgIHNubXA2X2ljbXA2X2xpc3QpOworCQkJICAgIE5VTEwsIHNubXA2X2ljbXA2X2xpc3QpOwogCXNubXA2X3NlcV9zaG93X2ljbXB2Nm1zZyhzZXEsCi0JCQkgICAgKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIuaWNtcHY2bXNnX3N0YXRpc3RpY3MpOworCQkJICAgICh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLmljbXB2Nm1zZ19zdGF0aXN0aWNzLCBOVUxMKTsKIAlzbm1wNl9zZXFfc2hvd19pdGVtKHNlcSwgKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIudWRwX3N0YXRzX2luNiwKLQkJCSAgICBzbm1wNl91ZHA2X2xpc3QpOworCQkJICAgIE5VTEwsIHNubXA2X3VkcDZfbGlzdCk7CiAJc25tcDZfc2VxX3Nob3dfaXRlbShzZXEsICh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLnVkcGxpdGVfc3RhdHNfaW42LAotCQkJICAgIHNubXA2X3VkcGxpdGU2X2xpc3QpOworCQkJICAgIE5VTEwsIHNubXA2X3VkcGxpdGU2X2xpc3QpOwogCXJldHVybiAwOwogfQogCkBAIC0yMjksMTEgKzI0MSwxMSBAQAogCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSAoc3RydWN0IGluZXQ2X2RldiAqKXNlcS0+cHJpdmF0ZTsKIAogCXNlcV9wcmludGYoc2VxLCAiJS0zMnNcdCV1XG4iLCAiaWZJbmRleCIsIGlkZXYtPmRldi0+aWZpbmRleCk7Ci0Jc25tcDZfc2VxX3Nob3dfaXRlbShzZXEsICh2b2lkIF9fcGVyY3B1ICoqKWlkZXYtPnN0YXRzLmlwdjYsCisJc25tcDZfc2VxX3Nob3dfaXRlbShzZXEsICh2b2lkIF9fcGVyY3B1ICoqKWlkZXYtPnN0YXRzLmlwdjYsIE5VTEwsCiAJCQkgICAgc25tcDZfaXBzdGF0c19saXN0KTsKLQlzbm1wNl9zZXFfc2hvd19pdGVtKHNlcSwgKHZvaWQgX19wZXJjcHUgKiopaWRldi0+c3RhdHMuaWNtcHY2LAorCXNubXA2X3NlcV9zaG93X2l0ZW0oc2VxLCBOVUxMLCBpZGV2LT5zdGF0cy5pY21wdjZkZXYtPm1pYnMsCiAJCQkgICAgc25tcDZfaWNtcDZfbGlzdCk7Ci0Jc25tcDZfc2VxX3Nob3dfaWNtcHY2bXNnKHNlcSwgKHZvaWQgX19wZXJjcHUgKiopaWRldi0+c3RhdHMuaWNtcHY2bXNnKTsKKwlzbm1wNl9zZXFfc2hvd19pY21wdjZtc2coc2VxLCBOVUxMLCBpZGV2LT5zdGF0cy5pY21wdjZtc2dkZXYtPm1pYnMpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yYXcuYyBiL25ldC9pcHY2L3Jhdy5jCmluZGV4IDRhMWMzYjQuLmFlNjQ5ODQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3Jhdy5jCisrKyBiL25ldC9pcHY2L3Jhdy5jCkBAIC02Nyw4ICs2Nyw4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNvY2sgKl9fcmF3X3Y2X2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywKLQkJdW5zaWduZWQgc2hvcnQgbnVtLCBzdHJ1Y3QgaW42X2FkZHIgKmxvY19hZGRyLAotCQlzdHJ1Y3QgaW42X2FkZHIgKnJtdF9hZGRyLCBpbnQgZGlmKQorCQl1bnNpZ25lZCBzaG9ydCBudW0sIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbG9jX2FkZHIsCisJCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqcm10X2FkZHIsIGludCBkaWYpCiB7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAJaW50IGlzX211bHRpY2FzdCA9IGlwdjZfYWRkcl9pc19tdWx0aWNhc3QobG9jX2FkZHIpOwpAQCAtMTU0LDggKzE1NCw4IEBACiAgKi8KIHN0YXRpYyBpbnQgaXB2Nl9yYXdfZGVsaXZlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkcikKIHsKLQlzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyOwotCXN0cnVjdCBpbjZfYWRkciAqZGFkZHI7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkcjsKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyOwogCXN0cnVjdCBzb2NrICpzazsKIAlpbnQgZGVsaXZlcmVkID0gMDsKIAlfX3U4IGhhc2g7CkBAIC0zNDgsNyArMzQ4LDcgQEAKIHsKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJaW50IGhhc2g7Ci0Jc3RydWN0IGluNl9hZGRyICpzYWRkciwgKmRhZGRyOworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsICpkYWRkcjsKIAlzdHJ1Y3QgbmV0ICpuZXQ7CiAKIAloYXNoID0gbmV4dGhkciAmIChSQVdfSFRBQkxFX1NJWkUgLSAxKTsKQEAgLTM1Nyw3ICszNTcsNyBAQAogCXNrID0gc2tfaGVhZCgmcmF3X3Y2X2hhc2hpbmZvLmh0W2hhc2hdKTsKIAlpZiAoc2sgIT0gTlVMTCkgewogCQkvKiBOb3RlOiBpcHY2X2hkcihza2IpICE9IHNrYi0+ZGF0YSAqLwotCQlzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKXNrYi0+ZGF0YTsKKwkJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNmggPSAoY29uc3Qgc3RydWN0IGlwdjZoZHIgKilza2ItPmRhdGE7CiAJCXNhZGRyID0gJmlwNmgtPnNhZGRyOwogCQlkYWRkciA9ICZpcDZoLT5kYWRkcjsKIAkJbmV0ID0gZGV2X25ldChza2ItPmRldik7CkBAIC01NDIsOCArNTQyLDggQEAKIAkJZ290byBvdXQ7CiAKIAlvZmZzZXQgPSBycC0+b2Zmc2V0OwotCXRvdGFsX2xlbiA9IGluZXRfc2soc2spLT5jb3JrLmxlbmd0aCAtIChza2JfbmV0d29ya19oZWFkZXIoc2tiKSAtCi0JCQkJCQlza2ItPmRhdGEpOworCXRvdGFsX2xlbiA9IGluZXRfc2soc2spLT5jb3JrLmJhc2UubGVuZ3RoIC0gKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpIC0KKwkJCQkJCSAgICAgc2tiLT5kYXRhKTsKIAlpZiAob2Zmc2V0ID49IHRvdGFsX2xlbiAtIDEpIHsKIAkJZXJyID0gLUVJTlZBTDsKIAkJaXA2X2ZsdXNoX3BlbmRpbmdfZnJhbWVzKHNrKTsKQEAgLTEyMzEsNyArMTIzMSw3IEBACiBzdGF0aWMgdm9pZCByYXc2X3NvY2tfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBzb2NrICpzcCwgaW50IGkpCiB7CiAJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc3ApOwotCXN0cnVjdCBpbjZfYWRkciAqZGVzdCwgKnNyYzsKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsICpzcmM7CiAJX191MTYgZGVzdHAsIHNyY3A7CiAKIAlkZXN0ICA9ICZucC0+ZGFkZHI7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yZWFzc2VtYmx5LmMgYi9uZXQvaXB2Ni9yZWFzc2VtYmx5LmMKaW5kZXggMDdiZWViMC4uN2I5NTRlMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcmVhc3NlbWJseS5jCisrKyBiL25ldC9pcHY2L3JlYXNzZW1ibHkuYwpAQCAtMjI0LDcgKzIyNCw3IEBACiB9CiAKIHN0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBmcmFnX3F1ZXVlICoKLWZxX2ZpbmQoc3RydWN0IG5ldCAqbmV0LCBfX2JlMzIgaWQsIHN0cnVjdCBpbjZfYWRkciAqc3JjLCBzdHJ1Y3QgaW42X2FkZHIgKmRzdCkKK2ZxX2ZpbmQoc3RydWN0IG5ldCAqbmV0LCBfX2JlMzIgaWQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc3JjLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRzdCkKIHsKIAlzdHJ1Y3QgaW5ldF9mcmFnX3F1ZXVlICpxOwogCXN0cnVjdCBpcDZfY3JlYXRlX2FyZyBhcmc7CkBAIC01MzUsNyArNTM1LDcgQEAKIHsKIAlzdHJ1Y3QgZnJhZ19oZHIgKmZoZHI7CiAJc3RydWN0IGZyYWdfcXVldWUgKmZxOwotCXN0cnVjdCBpcHY2aGRyICpoZHIgPSBpcHY2X2hkcihza2IpOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICpoZHIgPSBpcHY2X2hkcihza2IpOwogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiX2RzdChza2IpLT5kZXYpOwogCiAJSVA2X0lOQ19TVEFUU19CSChuZXQsIGlwNl9kc3RfaWRldihza2JfZHN0KHNrYikpLCBJUFNUQVRTX01JQl9SRUFTTVJFUURTKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jCmluZGV4IGZkMGVlYzYuLmRlMmIxZGUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3JvdXRlLmMKKysrIGIvbmV0L2lwdjYvcm91dGUuYwpAQCAtODksMTIgKzg5LDEyIEBACiAKICNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPCiBzdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfYWRkX3JvdXRlX2luZm8oc3RydWN0IG5ldCAqbmV0LAotCQkJCQkgICBzdHJ1Y3QgaW42X2FkZHIgKnByZWZpeCwgaW50IHByZWZpeGxlbiwKLQkJCQkJICAgc3RydWN0IGluNl9hZGRyICpnd2FkZHIsIGludCBpZmluZGV4LAorCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnByZWZpeCwgaW50IHByZWZpeGxlbiwKKwkJCQkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpnd2FkZHIsIGludCBpZmluZGV4LAogCQkJCQkgICB1bnNpZ25lZCBwcmVmKTsKIHN0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKnJ0Nl9nZXRfcm91dGVfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsCi0JCQkJCSAgIHN0cnVjdCBpbjZfYWRkciAqcHJlZml4LCBpbnQgcHJlZml4bGVuLAotCQkJCQkgICBzdHJ1Y3QgaW42X2FkZHIgKmd3YWRkciwgaW50IGlmaW5kZXgpOworCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnByZWZpeCwgaW50IHByZWZpeGxlbiwKKwkJCQkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpnd2FkZHIsIGludCBpZmluZGV4KTsKICNlbmRpZgogCiBzdGF0aWMgdTMyICppcHY2X2Nvd19tZXRyaWNzKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgdW5zaWduZWQgbG9uZyBvbGQpCkBAIC0yMjcsOSArMjI3LDE0IEBACiAjZW5kaWYKIAogLyogYWxsb2NhdGUgZHN0IHdpdGggaXA2X2RzdF9vcHMgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHJ0Nl9pbmZvICppcDZfZHN0X2FsbG9jKHN0cnVjdCBkc3Rfb3BzICpvcHMpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBydDZfaW5mbyAqaXA2X2RzdF9hbGxvYyhzdHJ1Y3QgZHN0X29wcyAqb3BzLAorCQkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIChzdHJ1Y3QgcnQ2X2luZm8gKilkc3RfYWxsb2Mob3BzLCAwKTsKKwlzdHJ1Y3QgcnQ2X2luZm8gKnJ0ID0gZHN0X2FsbG9jKG9wcywgZGV2LCAwLCAwLCAwKTsKKworCW1lbXNldCgmcnQtPnJ0NmlfdGFibGUsIDAsIHNpemVvZigqcnQpIC0gc2l6ZW9mKHN0cnVjdCBkc3RfZW50cnkpKTsKKworCXJldHVybiBydDsKIH0KIAogc3RhdGljIHZvaWQgaXA2X2RzdF9kZXN0cm95KHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKQEAgLTI5MCw3ICsyOTUsNyBAQAogCQl0aW1lX2FmdGVyKGppZmZpZXMsIHJ0LT5ydDZpX2V4cGlyZXMpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBydDZfbmVlZF9zdHJpY3Qoc3RydWN0IGluNl9hZGRyICpkYWRkcikKK3N0YXRpYyBpbmxpbmUgaW50IHJ0Nl9uZWVkX3N0cmljdChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyKQogewogCXJldHVybiBpcHY2X2FkZHJfdHlwZShkYWRkcikgJgogCQkoSVBWNl9BRERSX01VTFRJQ0FTVCB8IElQVjZfQUREUl9MSU5LTE9DQUwgfCBJUFY2X0FERFJfTE9PUEJBQ0spOwpAQCAtMzAyLDcgKzMwNyw3IEBACiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJ0Nl9pbmZvICpydDZfZGV2aWNlX21hdGNoKHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJCSAgICBzdHJ1Y3QgcnQ2X2luZm8gKnJ0LAotCQkJCQkJICAgIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCisJCQkJCQkgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciwKIAkJCQkJCSAgICBpbnQgb2lmLAogCQkJCQkJICAgIGludCBmbGFncykKIHsKQEAgLTUxNCw3ICs1MTksNyBAQAogCiAjaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GTwogaW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbiwKLQkJICBzdHJ1Y3QgaW42X2FkZHIgKmd3YWRkcikKKwkJICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3YWRkcikKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CiAJc3RydWN0IHJvdXRlX2luZm8gKnJpbmZvID0gKHN0cnVjdCByb3V0ZV9pbmZvICopIG9wdDsKQEAgLTY3Nyw4ICs2ODIsOCBAQAogCXJldHVybiBfX2lwNl9pbnNfcnQocnQsICZpbmZvKTsKIH0KIAotc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2FsbG9jX2NvdyhzdHJ1Y3QgcnQ2X2luZm8gKm9ydCwgc3RydWN0IGluNl9hZGRyICpkYWRkciwKLQkJCQkgICAgICBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKQorc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2FsbG9jX2NvdyhzdHJ1Y3QgcnQ2X2luZm8gKm9ydCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKQogewogCXN0cnVjdCBydDZfaW5mbyAqcnQ7CiAKQEAgLTc0Niw3ICs3NTEsNyBAQAogCXJldHVybiBydDsKIH0KIAotc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2FsbG9jX2Nsb25lKHN0cnVjdCBydDZfaW5mbyAqb3J0LCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyKQorc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2FsbG9jX2Nsb25lKHN0cnVjdCBydDZfaW5mbyAqb3J0LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyKQogewogCXN0cnVjdCBydDZfaW5mbyAqcnQgPSBpcDZfcnRfY29weShvcnQpOwogCWlmIChydCkgewpAQCAtODM3LDcgKzg0Miw3IEBACiAKIHZvaWQgaXA2X3JvdXRlX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGlwdjZoZHIgKmlwaCA9IGlwdjZfaGRyKHNrYik7CisJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwaCA9IGlwdjZfaGRyKHNrYik7CiAJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItPmRldik7CiAJaW50IGZsYWdzID0gUlQ2X0xPT0tVUF9GX0hBU19TQUREUjsKIAlzdHJ1Y3QgZmxvd2k2IGZsNiA9IHsKQEAgLTg4MSwxMSArODg2LDEzIEBACiAKIHN0cnVjdCBkc3RfZW50cnkgKmlwNl9ibGFja2hvbGVfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Rfb3JpZykKIHsKLQlzdHJ1Y3QgcnQ2X2luZm8gKnJ0ID0gZHN0X2FsbG9jKCZpcDZfZHN0X2JsYWNraG9sZV9vcHMsIDEpOwotCXN0cnVjdCBydDZfaW5mbyAqb3J0ID0gKHN0cnVjdCBydDZfaW5mbyAqKSBkc3Rfb3JpZzsKKwlzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCAqb3J0ID0gKHN0cnVjdCBydDZfaW5mbyAqKSBkc3Rfb3JpZzsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpuZXcgPSBOVUxMOwogCisJcnQgPSBkc3RfYWxsb2MoJmlwNl9kc3RfYmxhY2tob2xlX29wcywgb3J0LT5kc3QuZGV2LCAxLCAwLCAwKTsKIAlpZiAocnQpIHsKKwkJbWVtc2V0KCZydC0+cnQ2aV90YWJsZSwgMCwgc2l6ZW9mKCpydCkgLSBzaXplb2Yoc3RydWN0IGRzdF9lbnRyeSkpOworCiAJCW5ldyA9ICZydC0+ZHN0OwogCiAJCW5ldy0+X191c2UgPSAxOwpAQCAtODkzLDkgKzkwMCw2IEBACiAJCW5ldy0+b3V0cHV0ID0gZHN0X2Rpc2NhcmQ7CiAKIAkJZHN0X2NvcHlfbWV0cmljcyhuZXcsICZvcnQtPmRzdCk7Ci0JCW5ldy0+ZGV2ID0gb3J0LT5kc3QuZGV2OwotCQlpZiAobmV3LT5kZXYpCi0JCQlkZXZfaG9sZChuZXctPmRldik7CiAJCXJ0LT5ydDZpX2lkZXYgPSBvcnQtPnJ0NmlfaWRldjsKIAkJaWYgKHJ0LT5ydDZpX2lkZXYpCiAJCQlpbjZfZGV2X2hvbGQocnQtPnJ0NmlfaWRldik7CkBAIC0xMDM4LDEzICsxMDQyLDEyIEBACiAJaWYgKHVubGlrZWx5KGlkZXYgPT0gTlVMTCkpCiAJCXJldHVybiBOVUxMOwogCi0JcnQgPSBpcDZfZHN0X2FsbG9jKCZuZXQtPmlwdjYuaXA2X2RzdF9vcHMpOworCXJ0ID0gaXA2X2RzdF9hbGxvYygmbmV0LT5pcHY2LmlwNl9kc3Rfb3BzLCBkZXYpOwogCWlmICh1bmxpa2VseShydCA9PSBOVUxMKSkgewogCQlpbjZfZGV2X3B1dChpZGV2KTsKIAkJZ290byBvdXQ7CiAJfQogCi0JZGV2X2hvbGQoZGV2KTsKIAlpZiAobmVpZ2gpCiAJCW5laWdoX2hvbGQobmVpZ2gpOwogCWVsc2UgewpAQCAtMTA1Myw3ICsxMDU2LDYgQEAKIAkJCW5laWdoID0gTlVMTDsKIAl9CiAKLQlydC0+cnQ2aV9kZXYJICA9IGRldjsKIAlydC0+cnQ2aV9pZGV2ICAgICA9IGlkZXY7CiAJcnQtPnJ0NmlfbmV4dGhvcCAgPSBuZWlnaDsKIAlhdG9taWNfc2V0KCZydC0+ZHN0Ll9fcmVmY250LCAxKTsKQEAgLTEyMTIsNyArMTIxNCw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJ0ID0gaXA2X2RzdF9hbGxvYygmbmV0LT5pcHY2LmlwNl9kc3Rfb3BzKTsKKwlydCA9IGlwNl9kc3RfYWxsb2MoJm5ldC0+aXB2Ni5pcDZfZHN0X29wcywgTlVMTCk7CiAKIAlpZiAocnQgPT0gTlVMTCkgewogCQllcnIgPSAtRU5PTUVNOwpAQCAtMTI3OSw3ICsxMjgxLDcgQEAKIAl9CiAKIAlpZiAoY2ZnLT5mY19mbGFncyAmIFJURl9HQVRFV0FZKSB7Ci0JCXN0cnVjdCBpbjZfYWRkciAqZ3dfYWRkcjsKKwkJY29uc3Qgc3RydWN0IGluNl9hZGRyICpnd19hZGRyOwogCQlpbnQgZ3dhX3R5cGU7CiAKIAkJZ3dfYWRkciA9ICZjZmctPmZjX2dhdGV3YXk7CkBAIC0xMzMyLDYgKzEzMzQsMTYgQEAKIAlpZiAoZGV2ID09IE5VTEwpCiAJCWdvdG8gb3V0OwogCisJaWYgKCFpcHY2X2FkZHJfYW55KCZjZmctPmZjX3ByZWZzcmMpKSB7CisJCWlmICghaXB2Nl9jaGtfYWRkcihuZXQsICZjZmctPmZjX3ByZWZzcmMsIGRldiwgMCkpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpcHY2X2FkZHJfY29weSgmcnQtPnJ0NmlfcHJlZnNyYy5hZGRyLCAmY2ZnLT5mY19wcmVmc3JjKTsKKwkJcnQtPnJ0NmlfcHJlZnNyYy5wbGVuID0gMTI4OworCX0gZWxzZQorCQlydC0+cnQ2aV9wcmVmc3JjLnBsZW4gPSAwOworCiAJaWYgKGNmZy0+ZmNfZmxhZ3MgJiAoUlRGX0dBVEVXQVkgfCBSVEZfTk9ORVhUSE9QKSkgewogCQlydC0+cnQ2aV9uZXh0aG9wID0gX19uZWlnaF9sb29rdXBfZXJybm8oJm5kX3RibCwgJnJ0LT5ydDZpX2dhdGV3YXksIGRldik7CiAJCWlmIChJU19FUlIocnQtPnJ0NmlfbmV4dGhvcCkpIHsKQEAgLTE1MDksOSArMTUyMSw5IEBACiAJcmV0dXJuIHJ0OwogfTsKIAotc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqaXA2X3JvdXRlX3JlZGlyZWN0KHN0cnVjdCBpbjZfYWRkciAqZGVzdCwKLQkJCQkJICAgc3RydWN0IGluNl9hZGRyICpzcmMsCi0JCQkJCSAgIHN0cnVjdCBpbjZfYWRkciAqZ2F0ZXdheSwKK3N0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKmlwNl9yb3V0ZV9yZWRpcmVjdChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc3JjLAorCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmdhdGV3YXksCiAJCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaW50IGZsYWdzID0gUlQ2X0xPT0tVUF9GX0hBU19TQUREUjsKQEAgLTE1MzMsOCArMTU0NSw4IEBACiAJCQkJCQkgICBmbGFncywgX19pcDZfcm91dGVfcmVkaXJlY3QpOwogfQogCi12b2lkIHJ0Nl9yZWRpcmVjdChzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsIHN0cnVjdCBpbjZfYWRkciAqc3JjLAotCQkgIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCit2b2lkIHJ0Nl9yZWRpcmVjdChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc3JjLAorCQkgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCiAJCSAgc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsIHU4ICpsbGFkZHIsIGludCBvbl9saW5rKQogewogCXN0cnVjdCBydDZfaW5mbyAqcnQsICpucnQgPSBOVUxMOwpAQCAtMTYwOCw3ICsxNjIwLDcgQEAKICAqCWkuZS4gUGF0aCBNVFUgZGlzY292ZXJ5CiAgKi8KIAotc3RhdGljIHZvaWQgcnQ2X2RvX3BtdHVfZGlzYyhzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAorc3RhdGljIHZvaWQgcnQ2X2RvX3BtdHVfZGlzYyhjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAogCQkJICAgICBzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBwbXR1LCBpbnQgaWZpbmRleCkKIHsKIAlzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCAqbnJ0OwpAQCAtMTY5Myw3ICsxNzA1LDcgQEAKIAlkc3RfcmVsZWFzZSgmcnQtPmRzdCk7CiB9CiAKLXZvaWQgcnQ2X3BtdHVfZGlzY292ZXJ5KHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCit2b2lkIHJ0Nl9wbXR1X2Rpc2NvdmVyeShjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAogCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHBtdHUpCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOwpAQCAtMTcyMSw3ICsxNzMzLDggQEAKIHN0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKiBpcDZfcnRfY29weShzdHJ1Y3QgcnQ2X2luZm8gKm9ydCkKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KG9ydC0+cnQ2aV9kZXYpOwotCXN0cnVjdCBydDZfaW5mbyAqcnQgPSBpcDZfZHN0X2FsbG9jKCZuZXQtPmlwdjYuaXA2X2RzdF9vcHMpOworCXN0cnVjdCBydDZfaW5mbyAqcnQgPSBpcDZfZHN0X2FsbG9jKCZuZXQtPmlwdjYuaXA2X2RzdF9vcHMsCisJCQkJCSAgICBvcnQtPmRzdC5kZXYpOwogCiAJaWYgKHJ0KSB7CiAJCXJ0LT5kc3QuaW5wdXQgPSBvcnQtPmRzdC5pbnB1dDsKQEAgLTE3MjksOSArMTc0Miw2IEBACiAKIAkJZHN0X2NvcHlfbWV0cmljcygmcnQtPmRzdCwgJm9ydC0+ZHN0KTsKIAkJcnQtPmRzdC5lcnJvciA9IG9ydC0+ZHN0LmVycm9yOwotCQlydC0+ZHN0LmRldiA9IG9ydC0+ZHN0LmRldjsKLQkJaWYgKHJ0LT5kc3QuZGV2KQotCQkJZGV2X2hvbGQocnQtPmRzdC5kZXYpOwogCQlydC0+cnQ2aV9pZGV2ID0gb3J0LT5ydDZpX2lkZXY7CiAJCWlmIChydC0+cnQ2aV9pZGV2KQogCQkJaW42X2Rldl9ob2xkKHJ0LT5ydDZpX2lkZXYpOwpAQCAtMTc0Niw2ICsxNzU2LDcgQEAKICNpZmRlZiBDT05GSUdfSVBWNl9TVUJUUkVFUwogCQltZW1jcHkoJnJ0LT5ydDZpX3NyYywgJm9ydC0+cnQ2aV9zcmMsIHNpemVvZihzdHJ1Y3QgcnQ2a2V5KSk7CiAjZW5kaWYKKwkJbWVtY3B5KCZydC0+cnQ2aV9wcmVmc3JjLCAmb3J0LT5ydDZpX3ByZWZzcmMsIHNpemVvZihzdHJ1Y3QgcnQ2a2V5KSk7CiAJCXJ0LT5ydDZpX3RhYmxlID0gb3J0LT5ydDZpX3RhYmxlOwogCX0KIAlyZXR1cm4gcnQ7CkBAIC0xNzUzLDggKzE3NjQsOCBAQAogCiAjaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GTwogc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2dldF9yb3V0ZV9pbmZvKHN0cnVjdCBuZXQgKm5ldCwKLQkJCQkJICAgc3RydWN0IGluNl9hZGRyICpwcmVmaXgsIGludCBwcmVmaXhsZW4sCi0JCQkJCSAgIHN0cnVjdCBpbjZfYWRkciAqZ3dhZGRyLCBpbnQgaWZpbmRleCkKKwkJCQkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpwcmVmaXgsIGludCBwcmVmaXhsZW4sCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3dhZGRyLCBpbnQgaWZpbmRleCkKIHsKIAlzdHJ1Y3QgZmliNl9ub2RlICpmbjsKIAlzdHJ1Y3QgcnQ2X2luZm8gKnJ0ID0gTlVMTDsKQEAgLTE3ODUsOCArMTc5Niw4IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKnJ0Nl9hZGRfcm91dGVfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsCi0JCQkJCSAgIHN0cnVjdCBpbjZfYWRkciAqcHJlZml4LCBpbnQgcHJlZml4bGVuLAotCQkJCQkgICBzdHJ1Y3QgaW42X2FkZHIgKmd3YWRkciwgaW50IGlmaW5kZXgsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqcHJlZml4LCBpbnQgcHJlZml4bGVuLAorCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3YWRkciwgaW50IGlmaW5kZXgsCiAJCQkJCSAgIHVuc2lnbmVkIHByZWYpCiB7CiAJc3RydWN0IGZpYjZfY29uZmlnIGNmZyA9IHsKQEAgLTE4MTQsNyArMTgyNSw3IEBACiB9CiAjZW5kaWYKIAotc3RydWN0IHJ0Nl9pbmZvICpydDZfZ2V0X2RmbHRfcm91dGVyKHN0cnVjdCBpbjZfYWRkciAqYWRkciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0cnVjdCBydDZfaW5mbyAqcnQ2X2dldF9kZmx0X3JvdXRlcihjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHJ0Nl9pbmZvICpydDsKIAlzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGU7CkBAIC0xODM2LDcgKzE4NDcsNyBAQAogCXJldHVybiBydDsKIH0KIAotc3RydWN0IHJ0Nl9pbmZvICpydDZfYWRkX2RmbHRfcm91dGVyKHN0cnVjdCBpbjZfYWRkciAqZ3dhZGRyLAorc3RydWN0IHJ0Nl9pbmZvICpydDZfYWRkX2RmbHRfcm91dGVyKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3dhZGRyLAogCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICAgIHVuc2lnbmVkIGludCBwcmVmKQogewpAQCAtMjAwMSw3ICsyMDEyLDggQEAKIAkJCQkgICAgaW50IGFueWNhc3QpCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChpZGV2LT5kZXYpOwotCXN0cnVjdCBydDZfaW5mbyAqcnQgPSBpcDZfZHN0X2FsbG9jKCZuZXQtPmlwdjYuaXA2X2RzdF9vcHMpOworCXN0cnVjdCBydDZfaW5mbyAqcnQgPSBpcDZfZHN0X2FsbG9jKCZuZXQtPmlwdjYuaXA2X2RzdF9vcHMsCisJCQkJCSAgICBuZXQtPmxvb3BiYWNrX2Rldik7CiAJc3RydWN0IG5laWdoYm91ciAqbmVpZ2g7CiAKIAlpZiAocnQgPT0gTlVMTCkgewpAQCAtMjAxMSwxMyArMjAyMywxMSBAQAogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAl9CiAKLQlkZXZfaG9sZChuZXQtPmxvb3BiYWNrX2Rldik7CiAJaW42X2Rldl9ob2xkKGlkZXYpOwogCiAJcnQtPmRzdC5mbGFncyA9IERTVF9IT1NUOwogCXJ0LT5kc3QuaW5wdXQgPSBpcDZfaW5wdXQ7CiAJcnQtPmRzdC5vdXRwdXQgPSBpcDZfb3V0cHV0OwotCXJ0LT5ydDZpX2RldiA9IG5ldC0+bG9vcGJhY2tfZGV2OwogCXJ0LT5ydDZpX2lkZXYgPSBpZGV2OwogCXJ0LT5kc3Qub2Jzb2xldGUgPSAtMTsKIApAQCAtMjA0Myw2ICsyMDUzLDU1IEBACiAJcmV0dXJuIHJ0OwogfQogCitpbnQgaXA2X3JvdXRlX2dldF9zYWRkcihzdHJ1Y3QgbmV0ICpuZXQsCisJCQlzdHJ1Y3QgcnQ2X2luZm8gKnJ0LAorCQkJY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwKKwkJCXVuc2lnbmVkIGludCBwcmVmcywKKwkJCXN0cnVjdCBpbjZfYWRkciAqc2FkZHIpCit7CisJc3RydWN0IGluZXQ2X2RldiAqaWRldiA9IGlwNl9kc3RfaWRldigoc3RydWN0IGRzdF9lbnRyeSopcnQpOworCWludCBlcnIgPSAwOworCWlmIChydC0+cnQ2aV9wcmVmc3JjLnBsZW4pCisJCWlwdjZfYWRkcl9jb3B5KHNhZGRyLCAmcnQtPnJ0NmlfcHJlZnNyYy5hZGRyKTsKKwllbHNlCisJCWVyciA9IGlwdjZfZGV2X2dldF9zYWRkcihuZXQsIGlkZXYgPyBpZGV2LT5kZXYgOiBOVUxMLAorCQkJCQkgZGFkZHIsIHByZWZzLCBzYWRkcik7CisJcmV0dXJuIGVycjsKK30KKworLyogcmVtb3ZlIGRlbGV0ZWQgaXAgZnJvbSBwcmVmc3JjIGVudHJpZXMgKi8KK3N0cnVjdCBhcmdfZGV2X25ldF9pcCB7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgbmV0ICpuZXQ7CisJc3RydWN0IGluNl9hZGRyICphZGRyOworfTsKKworc3RhdGljIGludCBmaWI2X3JlbW92ZV9wcmVmc3JjKHN0cnVjdCBydDZfaW5mbyAqcnQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKChzdHJ1Y3QgYXJnX2Rldl9uZXRfaXAgKilhcmcpLT5kZXY7CisJc3RydWN0IG5ldCAqbmV0ID0gKChzdHJ1Y3QgYXJnX2Rldl9uZXRfaXAgKilhcmcpLT5uZXQ7CisJc3RydWN0IGluNl9hZGRyICphZGRyID0gKChzdHJ1Y3QgYXJnX2Rldl9uZXRfaXAgKilhcmcpLT5hZGRyOworCisJaWYgKCgodm9pZCAqKXJ0LT5ydDZpX2RldiA9PSBkZXYgfHwgZGV2ID09IE5VTEwpICYmCisJICAgIHJ0ICE9IG5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeSAmJgorCSAgICBpcHY2X2FkZHJfZXF1YWwoYWRkciwgJnJ0LT5ydDZpX3ByZWZzcmMuYWRkcikpIHsKKwkJLyogcmVtb3ZlIHByZWZzcmMgZW50cnkgKi8KKwkJcnQtPnJ0NmlfcHJlZnNyYy5wbGVuID0gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcnQ2X3JlbW92ZV9wcmVmc3JjKHN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmcCkKK3sKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGlmcC0+aWRldi0+ZGV2KTsKKwlzdHJ1Y3QgYXJnX2Rldl9uZXRfaXAgYWRuaSA9IHsKKwkJLmRldiA9IGlmcC0+aWRldi0+ZGV2LAorCQkubmV0ID0gbmV0LAorCQkuYWRkciA9ICZpZnAtPmFkZHIsCisJfTsKKwlmaWI2X2NsZWFuX2FsbChuZXQsIGZpYjZfcmVtb3ZlX3ByZWZzcmMsIDAsICZhZG5pKTsKK30KKwogc3RydWN0IGFyZ19kZXZfbmV0IHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBuZXQgKm5ldDsKQEAgLTIxODksNiArMjI0OCw5IEBACiAJCW5sYV9tZW1jcHkoJmNmZy0+ZmNfc3JjLCB0YltSVEFfU1JDXSwgcGxlbik7CiAJfQogCisJaWYgKHRiW1JUQV9QUkVGU1JDXSkKKwkJbmxhX21lbWNweSgmY2ZnLT5mY19wcmVmc3JjLCB0YltSVEFfUFJFRlNSQ10sIDE2KTsKKwogCWlmICh0YltSVEFfT0lGXSkKIAkJY2ZnLT5mY19pZmluZGV4ID0gbmxhX2dldF91MzIodGJbUlRBX09JRl0pOwogCkBAIC0yMzMxLDEzICsyMzkzLDE3IEBACiAjZW5kaWYKIAkJCU5MQV9QVVRfVTMyKHNrYiwgUlRBX0lJRiwgaWlmKTsKIAl9IGVsc2UgaWYgKGRzdCkgewotCQlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gaXA2X2RzdF9pZGV2KCZydC0+ZHN0KTsKIAkJc3RydWN0IGluNl9hZGRyIHNhZGRyX2J1ZjsKLQkJaWYgKGlwdjZfZGV2X2dldF9zYWRkcihuZXQsIGlkZXYgPyBpZGV2LT5kZXYgOiBOVUxMLAotCQkJCSAgICAgICBkc3QsIDAsICZzYWRkcl9idWYpID09IDApCisJCWlmIChpcDZfcm91dGVfZ2V0X3NhZGRyKG5ldCwgcnQsIGRzdCwgMCwgJnNhZGRyX2J1ZikgPT0gMCkKIAkJCU5MQV9QVVQoc2tiLCBSVEFfUFJFRlNSQywgMTYsICZzYWRkcl9idWYpOwogCX0KIAorCWlmIChydC0+cnQ2aV9wcmVmc3JjLnBsZW4pIHsKKwkJc3RydWN0IGluNl9hZGRyIHNhZGRyX2J1ZjsKKwkJaXB2Nl9hZGRyX2NvcHkoJnNhZGRyX2J1ZiwgJnJ0LT5ydDZpX3ByZWZzcmMuYWRkcik7CisJCU5MQV9QVVQoc2tiLCBSVEFfUFJFRlNSQywgMTYsICZzYWRkcl9idWYpOworCX0KKwogCWlmIChydG5ldGxpbmtfcHV0X21ldHJpY3Moc2tiLCBkc3RfbWV0cmljc19wdHIoJnJ0LT5kc3QpKSA8IDApCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zaXQuYyBiL25ldC9pcHY2L3NpdC5jCmluZGV4IDVmMzVkNTkuLjFjY2E1NzYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3NpdC5jCisrKyBiL25ldC9pcHY2L3NpdC5jCkBAIC0yNTAsMTEgKzI1MCw2IEBACiAKIAlkZXZfbmV0X3NldChkZXYsIG5ldCk7CiAKLQlpZiAoc3RyY2hyKG5hbWUsICclJykpIHsKLQkJaWYgKGRldl9hbGxvY19uYW1lKGRldiwgbmFtZSkgPCAwKQotCQkJZ290byBmYWlsZWRfZnJlZTsKLQl9Ci0KIAludCA9IG5ldGRldl9wcml2KGRldik7CiAKIAludC0+cGFybXMgPSAqcGFybXM7CkBAIC00NDcsNyArNDQyLDcgQEAKIH0KIAogc3RhdGljIGludAotaXNhdGFwX2Noa3NyYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBoZHIgKmlwaCwgc3RydWN0IGlwX3R1bm5lbCAqdCkKK2lzYXRhcF9jaGtzcmMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGlwaGRyICppcGgsIHN0cnVjdCBpcF90dW5uZWwgKnQpCiB7CiAJc3RydWN0IGlwX3R1bm5lbF9wcmxfZW50cnkgKnA7CiAJaW50IG9rID0gMTsKQEAgLTQ2MCw3ICs0NTUsOCBAQAogCQllbHNlCiAJCQlza2ItPm5kaXNjX25vZGV0eXBlID0gTkRJU0NfTk9ERVRZUEVfTk9ERUZBVUxUOwogCX0gZWxzZSB7Ci0JCXN0cnVjdCBpbjZfYWRkciAqYWRkcjYgPSAmaXB2Nl9oZHIoc2tiKS0+c2FkZHI7CisJCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcjYgPSAmaXB2Nl9oZHIoc2tiKS0+c2FkZHI7CisKIAkJaWYgKGlwdjZfYWRkcl9pc19pc2F0YXAoYWRkcjYpICYmCiAJCSAgICAoYWRkcjYtPnM2X2FkZHIzMlszXSA9PSBpcGgtPnNhZGRyKSAmJgogCQkgICAgaXB2Nl9jaGtfcHJlZml4KGFkZHI2LCB0LT5kZXYpKQpAQCAtNDk0LDcgKzQ5MCw3IEBACiAgICA4IGJ5dGVzIG9mIHBhY2tldCBwYXlsb2FkLiBJdCBtZWFucywgdGhhdCBwcmVjaXNlIHJlbGF5aW5nIG9mCiAgICBJQ01QIGluIHRoZSByZWFsIEludGVybmV0IGlzIGFic29sdXRlbHkgaW5mZWFzaWJsZS4KICAqLwotCXN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciopc2tiLT5kYXRhOworCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoID0gKGNvbnN0IHN0cnVjdCBpcGhkciAqKXNrYi0+ZGF0YTsKIAljb25zdCBpbnQgdHlwZSA9IGljbXBfaGRyKHNrYiktPnR5cGU7CiAJY29uc3QgaW50IGNvZGUgPSBpY21wX2hkcihza2IpLT5jb2RlOwogCXN0cnVjdCBpcF90dW5uZWwgKnQ7CkBAIC01NTIsNyArNTQ4LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaXBpcDZfZWNuX2RlY2Fwc3VsYXRlKHN0cnVjdCBpcGhkciAqaXBoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGlubGluZSB2b2lkIGlwaXA2X2Vjbl9kZWNhcHN1bGF0ZShjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpZiAoSU5FVF9FQ05faXNfY2UoaXBoLT50b3MpKQogCQlJUDZfRUNOX3NldF9jZShpcHY2X2hkcihza2IpKTsKQEAgLTU2MCw3ICs1NTYsNyBAQAogCiBzdGF0aWMgaW50IGlwaXA2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBpcGhkciAqaXBoOworCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoOwogCXN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbDsKIAogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpKQpAQCAtNjE2LDcgKzYxMiw3IEBACiAgKiBjb21lcyBmcm9tIDZyZCAvIDZ0bzQgKFJGQyAzMDU2KSBhZGRyIHNwYWNlLgogICovCiBzdGF0aWMgaW5saW5lCi1fX2JlMzIgdHJ5XzZyZChzdHJ1Y3QgaW42X2FkZHIgKnY2ZHN0LCBzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwpCitfX2JlMzIgdHJ5XzZyZChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnY2ZHN0LCBzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwpCiB7CiAJX19iZTMyIGRzdCA9IDA7CiAKQEAgLTY1OSw4ICs2NTUsOCBAQAogewogCXN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHBjcHVfdHN0YXRzICp0c3RhdHM7Ci0Jc3RydWN0IGlwaGRyICAqdGlwaCA9ICZ0dW5uZWwtPnBhcm1zLmlwaDsKLQlzdHJ1Y3QgaXB2NmhkciAqaXBoNiA9IGlwdjZfaGRyKHNrYik7CisJY29uc3Qgc3RydWN0IGlwaGRyICAqdGlwaCA9ICZ0dW5uZWwtPnBhcm1zLmlwaDsKKwljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXBoNiA9IGlwdjZfaGRyKHNrYik7CiAJdTggICAgIHRvcyA9IHR1bm5lbC0+cGFybXMuaXBoLnRvczsKIAlfX2JlMTYgZGYgPSB0aXBoLT5mcmFnX29mZjsKIAlzdHJ1Y3QgcnRhYmxlICpydDsgICAgIAkJCS8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovCkBAIC02NjgsOCArNjY0LDkgQEAKIAlzdHJ1Y3QgaXBoZHIgICppcGg7CQkJLyogT3VyIG5ldyBJUCBoZWFkZXIgKi8KIAl1bnNpZ25lZCBpbnQgbWF4X2hlYWRyb29tOwkJLyogVGhlIGV4dHJhIGhlYWRlciBzcGFjZSBuZWVkZWQgKi8KIAlfX2JlMzIgZHN0ID0gdGlwaC0+ZGFkZHI7CisJc3RydWN0IGZsb3dpNCBmbDQ7CiAJaW50ICAgIG10dTsKLQlzdHJ1Y3QgaW42X2FkZHIgKmFkZHI2OworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcjY7CiAJaW50IGFkZHJfdHlwZTsKIAogCWlmIChza2ItPnByb3RvY29sICE9IGh0b25zKEVUSF9QX0lQVjYpKQpAQCAtNjg4LDcgKzY4NSw3IEBACiAJCQlnb3RvIHR4X2Vycm9yOwogCQl9CiAKLQkJYWRkcjYgPSAoc3RydWN0IGluNl9hZGRyKikmbmVpZ2gtPnByaW1hcnlfa2V5OworCQlhZGRyNiA9IChjb25zdCBzdHJ1Y3QgaW42X2FkZHIqKSZuZWlnaC0+cHJpbWFyeV9rZXk7CiAJCWFkZHJfdHlwZSA9IGlwdjZfYWRkcl90eXBlKGFkZHI2KTsKIAogCQlpZiAoKGFkZHJfdHlwZSAmIElQVjZfQUREUl9VTklDQVNUKSAmJgpAQCAtNzEzLDcgKzcxMCw3IEBACiAJCQlnb3RvIHR4X2Vycm9yOwogCQl9CiAKLQkJYWRkcjYgPSAoc3RydWN0IGluNl9hZGRyKikmbmVpZ2gtPnByaW1hcnlfa2V5OworCQlhZGRyNiA9IChjb25zdCBzdHJ1Y3QgaW42X2FkZHIqKSZuZWlnaC0+cHJpbWFyeV9rZXk7CiAJCWFkZHJfdHlwZSA9IGlwdjZfYWRkcl90eXBlKGFkZHI2KTsKIAogCQlpZiAoYWRkcl90eXBlID09IElQVjZfQUREUl9BTlkpIHsKQEAgLTcyNyw3ICs3MjQsNyBAQAogCQlkc3QgPSBhZGRyNi0+czZfYWRkcjMyWzNdOwogCX0KIAotCXJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKGRldl9uZXQoZGV2KSwgTlVMTCwKKwlydCA9IGlwX3JvdXRlX291dHB1dF9wb3J0cyhkZXZfbmV0KGRldiksICZmbDQsIE5VTEwsCiAJCQkJICAgZHN0LCB0aXBoLT5zYWRkciwKIAkJCQkgICAwLCAwLAogCQkJCSAgIElQUFJPVE9fSVBWNiwgUlRfVE9TKHRvcyksCkBAIC04MjEsOCArODE4LDggQEAKIAlpcGgtPmZyYWdfb2ZmCQk9CWRmOwogCWlwaC0+cHJvdG9jb2wJCT0JSVBQUk9UT19JUFY2OwogCWlwaC0+dG9zCQk9CUlORVRfRUNOX2VuY2Fwc3VsYXRlKHRvcywgaXB2Nl9nZXRfZHNmaWVsZChpcGg2KSk7Ci0JaXBoLT5kYWRkcgkJPQlydC0+cnRfZHN0OwotCWlwaC0+c2FkZHIJCT0JcnQtPnJ0X3NyYzsKKwlpcGgtPmRhZGRyCQk9CWZsNC5kYWRkcjsKKwlpcGgtPnNhZGRyCQk9CWZsNC5zYWRkcjsKIAogCWlmICgoaXBoLT50dGwgPSB0aXBoLT50dGwpID09IDApCiAJCWlwaC0+dHRsCT0JaXBoNi0+aG9wX2xpbWl0OwpAQCAtODQ0LDEzICs4NDEsMTQgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqdGRldiA9IE5VTEw7CiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsOwotCXN0cnVjdCBpcGhkciAqaXBoOworCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoOworCXN0cnVjdCBmbG93aTQgZmw0OwogCiAJdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpcGggPSAmdHVubmVsLT5wYXJtcy5pcGg7CiAKIAlpZiAoaXBoLT5kYWRkcikgewotCQlzdHJ1Y3QgcnRhYmxlICpydCA9IGlwX3JvdXRlX291dHB1dF9wb3J0cyhkZXZfbmV0KGRldiksIE5VTEwsCisJCXN0cnVjdCBydGFibGUgKnJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKGRldl9uZXQoZGV2KSwgJmZsNCwgTlVMTCwKIAkJCQkJCQkgIGlwaC0+ZGFkZHIsIGlwaC0+c2FkZHIsCiAJCQkJCQkJICAwLCAwLAogCQkJCQkJCSAgSVBQUk9UT19JUFY2LApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc3luY29va2llcy5jIGIvbmV0L2lwdjYvc3luY29va2llcy5jCmluZGV4IDM1MmMyNjAuLjhiOTY0NGEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3N5bmNvb2tpZXMuYworKysgYi9uZXQvaXB2Ni9zeW5jb29raWVzLmMKQEAgLTY2LDcgKzY2LDcgQEAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShfX3UzMiBbMTYgKyA1ICsgU0hBX1dPUktTUEFDRV9XT1JEU10sCiAJCSAgICAgIGlwdjZfY29va2llX3NjcmF0Y2gpOwogCi1zdGF0aWMgdTMyIGNvb2tpZV9oYXNoKHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCitzdGF0aWMgdTMyIGNvb2tpZV9oYXNoKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCiAJCSAgICAgICBfX2JlMTYgc3BvcnQsIF9fYmUxNiBkcG9ydCwgdTMyIGNvdW50LCBpbnQgYykKIHsKIAlfX3UzMiAqdG1wID0gX19nZXRfY3B1X3ZhcihpcHY2X2Nvb2tpZV9zY3JhdGNoKTsKQEAgLTg2LDcgKzg2LDggQEAKIAlyZXR1cm4gdG1wWzE3XTsKIH0KIAotc3RhdGljIF9fdTMyIHNlY3VyZV90Y3Bfc3luX2Nvb2tpZShzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorc3RhdGljIF9fdTMyIHNlY3VyZV90Y3Bfc3luX2Nvb2tpZShjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCiAJCQkJICAgX19iZTE2IHNwb3J0LCBfX2JlMTYgZHBvcnQsIF9fdTMyIHNzZXEsCiAJCQkJICAgX191MzIgY291bnQsIF9fdTMyIGRhdGEpCiB7CkBAIC05Niw4ICs5Nyw4IEBACiAJCSYgQ09PS0lFTUFTSykpOwogfQogCi1zdGF0aWMgX191MzIgY2hlY2tfdGNwX3N5bl9jb29raWUoX191MzIgY29va2llLCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAotCQkJCSAgc3RydWN0IGluNl9hZGRyICpkYWRkciwgX19iZTE2IHNwb3J0LAorc3RhdGljIF9fdTMyIGNoZWNrX3RjcF9zeW5fY29va2llKF9fdTMyIGNvb2tpZSwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciwKKwkJCQkgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsIF9fYmUxNiBzcG9ydCwKIAkJCQkgIF9fYmUxNiBkcG9ydCwgX191MzIgc3NlcSwgX191MzIgY291bnQsCiAJCQkJICBfX3UzMiBtYXhkaWZmKQogewpAQCAtMTE2LDcgKzExNyw3IEBACiAKIF9fdTMyIGNvb2tpZV92Nl9pbml0X3NlcXVlbmNlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX191MTYgKm1zc3ApCiB7Ci0Jc3RydWN0IGlwdjZoZHIgKmlwaCA9IGlwdjZfaGRyKHNrYik7CisJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwaCA9IGlwdjZfaGRyKHNrYik7CiAJY29uc3Qgc3RydWN0IHRjcGhkciAqdGggPSB0Y3BfaGRyKHNrYik7CiAJaW50IG1zc2luZDsKIAljb25zdCBfX3UxNiBtc3MgPSAqbXNzcDsKQEAgLTEzOCw3ICsxMzksNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBjb29raWVfY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwgX191MzIgY29va2llKQogewotCXN0cnVjdCBpcHY2aGRyICppcGggPSBpcHY2X2hkcihza2IpOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcGggPSBpcHY2X2hkcihza2IpOwogCWNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoID0gdGNwX2hkcihza2IpOwogCV9fdTMyIHNlcSA9IG50b2hsKHRoLT5zZXEpIC0gMTsKIAlfX3UzMiBtc3NpbmQgPSBjaGVja190Y3Bfc3luX2Nvb2tpZShjb29raWUsICZpcGgtPnNhZGRyLCAmaXBoLT5kYWRkciwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3RjcF9pcHY2LmMgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCmluZGV4IDRmNDllNWQuLjg2ODM2NjQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3RjcF9pcHY2LmMKKysrIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwpAQCAtNzYsOCArNzYsOCBAQAogCiBzdGF0aWMgaW50CXRjcF92Nl9kb19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHN0YXRpYyB2b2lkCV9fdGNwX3Y2X3NlbmRfY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICAgc3RydWN0IGluNl9hZGRyICpzYWRkciwKLQkJCQkgICAgc3RydWN0IGluNl9hZGRyICpkYWRkcik7CisJCQkJICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBpcHY2X21hcHBlZDsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGlwdjZfc3BlY2lmaWM7CkBAIC04Niw3ICs4Niw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHRjcF9zb2NrX2FmX29wcyB0Y3Bfc29ja19pcHY2X21hcHBlZF9zcGVjaWZpYzsKICNlbHNlCiBzdGF0aWMgc3RydWN0IHRjcF9tZDVzaWdfa2V5ICp0Y3BfdjZfbWQ1X2RvX2xvb2t1cChzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJCQkgICBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCisJCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCiB7CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0xMDYsOCArMTA2LDggQEAKIH0KIAogc3RhdGljIF9faW5saW5lX18gX19zdW0xNiB0Y3BfdjZfY2hlY2soaW50IGxlbiwKLQkJCQkgICBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAotCQkJCSAgIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCisJCQkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAogCQkJCSAgIF9fd3N1bSBiYXNlKQogewogCXJldHVybiBjc3VtX2lwdjZfbWFnaWMoc2FkZHIsIGRhZGRyLCBsZW4sIElQUFJPVE9fVENQLCBiYXNlKTsKQEAgLTMzMSw3ICszMzEsNyBAQAogc3RhdGljIHZvaWQgdGNwX3Y2X2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCwKIAkJdTggdHlwZSwgdTggY29kZSwgaW50IG9mZnNldCwgX19iZTMyIGluZm8pCiB7Ci0Jc3RydWN0IGlwdjZoZHIgKmhkciA9IChzdHJ1Y3QgaXB2Nmhkciopc2tiLT5kYXRhOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICpoZHIgPSAoY29uc3Qgc3RydWN0IGlwdjZoZHIqKXNrYi0+ZGF0YTsKIAljb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYi0+ZGF0YStvZmZzZXQpOwogCXN0cnVjdCBpcHY2X3BpbmZvICpucDsKIAlzdHJ1Y3Qgc29jayAqc2s7CkBAIC01NTEsNyArNTUxLDcgQEAKIAogI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCiBzdGF0aWMgc3RydWN0IHRjcF9tZDVzaWdfa2V5ICp0Y3BfdjZfbWQ1X2RvX2xvb2t1cChzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJCQkgICBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCisJCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJaW50IGk7CkBAIC01ODAsNyArNTgwLDcgQEAKIAlyZXR1cm4gdGNwX3Y2X21kNV9kb19sb29rdXAoc2ssICZpbmV0Nl9yc2socmVxKS0+cm10X2FkZHIpOwogfQogCi1zdGF0aWMgaW50IHRjcF92Nl9tZDVfZG9fYWRkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluNl9hZGRyICpwZWVyLAorc3RhdGljIGludCB0Y3BfdjZfbWQ1X2RvX2FkZChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqcGVlciwKIAkJCSAgICAgY2hhciAqbmV3a2V5LCB1OCBuZXdrZXlsZW4pCiB7CiAJLyogQWRkIGtleSB0byB0aGUgbGlzdCAqLwpAQCAtNjQ1LDcgKzY0NSw3IEBACiAJCQkJIG5ld2tleSwgbmV3a2V5bGVuKTsKIH0KIAotc3RhdGljIGludCB0Y3BfdjZfbWQ1X2RvX2RlbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbjZfYWRkciAqcGVlcikKK3N0YXRpYyBpbnQgdGNwX3Y2X21kNV9kb19kZWwoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnBlZXIpCiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJaW50IGk7CkBAIC03NTMsOCArNzUzLDggQEAKIH0KIAogc3RhdGljIGludCB0Y3BfdjZfbWQ1X2hhc2hfcHNldWRvaGVhZGVyKHN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKmhwLAotCQkJCQlzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAotCQkJCQlzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCBpbnQgbmJ5dGVzKQorCQkJCQljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorCQkJCQljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCBpbnQgbmJ5dGVzKQogewogCXN0cnVjdCB0Y3A2X3BzZXVkb2hkciAqYnA7CiAJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOwpAQCAtNzcxLDcgKzc3MSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgdGNwX3Y2X21kNV9oYXNoX2hkcihjaGFyICptZDVfaGFzaCwgc3RydWN0IHRjcF9tZDVzaWdfa2V5ICprZXksCi0JCQkgICAgICAgc3RydWN0IGluNl9hZGRyICpkYWRkciwgc3RydWN0IGluNl9hZGRyICpzYWRkciwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAogCQkJICAgICAgIHN0cnVjdCB0Y3BoZHIgKnRoKQogewogCXN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKmhwOwpAQCAtODA3LDcgKzgwNyw3IEBACiAJCQkgICAgICAgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCiAJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCAqZGFkZHI7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciwgKmRhZGRyOwogCXN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKmhwOwogCXN0cnVjdCBoYXNoX2Rlc2MgKmRlc2M7CiAJc3RydWN0IHRjcGhkciAqdGggPSB0Y3BfaGRyKHNrYik7CkBAIC04MTksNyArODE5LDcgQEAKIAkJc2FkZHIgPSAmaW5ldDZfcnNrKHJlcSktPmxvY19hZGRyOwogCQlkYWRkciA9ICZpbmV0Nl9yc2socmVxKS0+cm10X2FkZHI7CiAJfSBlbHNlIHsKLQkJc3RydWN0IGlwdjZoZHIgKmlwNmggPSBpcHY2X2hkcihza2IpOworCQljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7CiAJCXNhZGRyID0gJmlwNmgtPnNhZGRyOwogCQlkYWRkciA9ICZpcDZoLT5kYWRkcjsKIAl9CkBAIC04NTcsNyArODU3LDcgQEAKIHsKIAlfX3U4ICpoYXNoX2xvY2F0aW9uID0gTlVMTDsKIAlzdHJ1Y3QgdGNwX21kNXNpZ19rZXkgKmhhc2hfZXhwZWN0ZWQ7Ci0Jc3RydWN0IGlwdjZoZHIgKmlwNmggPSBpcHY2X2hkcihza2IpOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoID0gaXB2Nl9oZHIoc2tiKTsKIAlzdHJ1Y3QgdGNwaGRyICp0aCA9IHRjcF9oZHIoc2tiKTsKIAlpbnQgZ2VuaGFzaDsKIAl1OCBuZXdoYXNoWzE2XTsKQEAgLTkxNSw3ICs5MTUsNyBAQAogI2VuZGlmCiAKIHN0YXRpYyB2b2lkIF9fdGNwX3Y2X3NlbmRfY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQlzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyKQorCQkJCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIpCiB7CiAJc3RydWN0IHRjcGhkciAqdGggPSB0Y3BfaGRyKHNrYik7CiAKQEAgLTkzOSw3ICs5MzksNyBAQAogCiBzdGF0aWMgaW50IHRjcF92Nl9nc29fc2VuZF9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBpcHY2aGRyICppcHY2aDsKKwljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXB2Nmg7CiAJc3RydWN0IHRjcGhkciAqdGg7CiAKIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKnRoKSkpCkBAIC05NTcsNyArOTU3LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqKnRjcDZfZ3JvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipoZWFkLAogCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaXB2NmhkciAqaXBoID0gc2tiX2dyb19uZXR3b3JrX2hlYWRlcihza2IpOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcGggPSBza2JfZ3JvX25ldHdvcmtfaGVhZGVyKHNrYik7CiAKIAlzd2l0Y2ggKHNrYi0+aXBfc3VtbWVkKSB7CiAJY2FzZSBDSEVDS1NVTV9DT01QTEVURToKQEAgLTk3OCw3ICs5NzgsNyBAQAogCiBzdGF0aWMgaW50IHRjcDZfZ3JvX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGlwdjZoZHIgKmlwaCA9IGlwdjZfaGRyKHNrYik7CisJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwaCA9IGlwdjZfaGRyKHNrYik7CiAJc3RydWN0IHRjcGhkciAqdGggPSB0Y3BfaGRyKHNrYik7CiAKIAl0aC0+Y2hlY2sgPSB+dGNwX3Y2X2NoZWNrKHNrYi0+bGVuIC0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSwKQEAgLTE0NjksNyArMTQ2OSw3IEBACiAKIAkgICBGaXJzdDogbm8gSVB2NCBvcHRpb25zLgogCSAqLwotCW5ld2luZXQtPm9wdCA9IE5VTEw7CisJbmV3aW5ldC0+aW5ldF9vcHQgPSBOVUxMOwogCW5ld25wLT5pcHY2X2ZsX2xpc3QgPSBOVUxMOwogCiAJLyogQ2xvbmUgUlggYml0cyAqLwpAQCAtMTcwMiw3ICsxNzAyLDcgQEAKIHN0YXRpYyBpbnQgdGNwX3Y2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCB0Y3BoZHIgKnRoOwotCXN0cnVjdCBpcHY2aGRyICpoZHI7CisJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmhkcjsKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJaW50IHJldDsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0+ZGV2KTsKQEAgLTIwMjgsOCArMjAyOCw4IEBACiAJCQkgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsIGludCBpLCBpbnQgdWlkKQogewogCWludCB0dGQgPSByZXEtPmV4cGlyZXMgLSBqaWZmaWVzOwotCXN0cnVjdCBpbjZfYWRkciAqc3JjID0gJmluZXQ2X3JzayhyZXEpLT5sb2NfYWRkcjsKLQlzdHJ1Y3QgaW42X2FkZHIgKmRlc3QgPSAmaW5ldDZfcnNrKHJlcSktPnJtdF9hZGRyOworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc3JjID0gJmluZXQ2X3JzayhyZXEpLT5sb2NfYWRkcjsKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRlc3QgPSAmaW5ldDZfcnNrKHJlcSktPnJtdF9hZGRyOwogCiAJaWYgKHR0ZCA8IDApCiAJCXR0ZCA9IDA7CkBAIC0yMDU3LDcgKzIwNTcsNyBAQAogCiBzdGF0aWMgdm9pZCBnZXRfdGNwNl9zb2NrKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3Qgc29jayAqc3AsIGludCBpKQogewotCXN0cnVjdCBpbjZfYWRkciAqZGVzdCwgKnNyYzsKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsICpzcmM7CiAJX191MTYgZGVzdHAsIHNyY3A7CiAJaW50IHRpbWVyX2FjdGl2ZTsKIAl1bnNpZ25lZCBsb25nIHRpbWVyX2V4cGlyZXM7CkBAIC0yMTE0LDcgKzIxMTQsNyBAQAogc3RhdGljIHZvaWQgZ2V0X3RpbWV3YWl0Nl9zb2NrKHN0cnVjdCBzZXFfZmlsZSAqc2VxLAogCQkJICAgICAgIHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3LCBpbnQgaSkKIHsKLQlzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsICpzcmM7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyICpkZXN0LCAqc3JjOwogCV9fdTE2IGRlc3RwLCBzcmNwOwogCXN0cnVjdCBpbmV0Nl90aW1ld2FpdF9zb2NrICp0dzYgPSBpbmV0Nl90d3NrKChzdHJ1Y3Qgc29jayAqKXR3KTsKIAlpbnQgdHRkID0gdHctPnR3X3R0ZCAtIGppZmZpZXM7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni91ZHAuYyBiL25ldC9pcHY2L3VkcC5jCmluZGV4IDllMzA1ZDc0Li5mYzBjNDJhIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni91ZHAuYworKysgYi9uZXQvaXB2Ni91ZHAuYwpAQCAtMzExLDcgKzMxMSw3IEBACiAJCQkJCSAgc3RydWN0IHVkcF90YWJsZSAqdWRwdGFibGUpCiB7CiAJc3RydWN0IHNvY2sgKnNrOwotCXN0cnVjdCBpcHY2aGRyICppcGggPSBpcHY2X2hkcihza2IpOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcGggPSBpcHY2X2hkcihza2IpOwogCiAJaWYgKHVubGlrZWx5KHNrID0gc2tiX3N0ZWFsX3NvY2soc2tiKSkpCiAJCXJldHVybiBzazsKQEAgLTQ2Myw5ICs0NjMsOSBAQAogCQkgICAgc3RydWN0IHVkcF90YWJsZSAqdWRwdGFibGUpCiB7CiAJc3RydWN0IGlwdjZfcGluZm8gKm5wOwotCXN0cnVjdCBpcHY2aGRyICpoZHIgPSAoc3RydWN0IGlwdjZoZHIqKXNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyID0gJmhkci0+c2FkZHI7Ci0Jc3RydWN0IGluNl9hZGRyICpkYWRkciA9ICZoZHItPmRhZGRyOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICpoZHIgPSAoY29uc3Qgc3RydWN0IGlwdjZoZHIgKilza2ItPmRhdGE7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciA9ICZoZHItPnNhZGRyOworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIgPSAmaGRyLT5kYWRkcjsKIAlzdHJ1Y3QgdWRwaGRyICp1aCA9IChzdHJ1Y3QgdWRwaGRyKikoc2tiLT5kYXRhK29mZnNldCk7CiAJc3RydWN0IHNvY2sgKnNrOwogCWludCBlcnI7CkBAIC01NTMsOCArNTUzLDggQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzb2NrICp1ZHBfdjZfbWNhc3RfbmV4dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywKLQkJCQkgICAgICBfX2JlMTYgbG9jX3BvcnQsIHN0cnVjdCBpbjZfYWRkciAqbG9jX2FkZHIsCi0JCQkJICAgICAgX19iZTE2IHJtdF9wb3J0LCBzdHJ1Y3QgaW42X2FkZHIgKnJtdF9hZGRyLAorCQkJCSAgICAgIF9fYmUxNiBsb2NfcG9ydCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpsb2NfYWRkciwKKwkJCQkgICAgICBfX2JlMTYgcm10X3BvcnQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqcm10X2FkZHIsCiAJCQkJICAgICAgaW50IGRpZikKIHsKIAlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbm9kZTsKQEAgLTYzMyw3ICs2MzMsNyBAQAogICogc28gd2UgZG9uJ3QgbmVlZCB0byBsb2NrIHRoZSBoYXNoZXMuCiAgKi8KIHN0YXRpYyBpbnQgX191ZHA2X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJc3RydWN0IGluNl9hZGRyICpzYWRkciwgc3RydWN0IGluNl9hZGRyICpkYWRkciwKKwkJY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwKIAkJc3RydWN0IHVkcF90YWJsZSAqdWRwdGFibGUpCiB7CiAJc3RydWN0IHNvY2sgKnNrLCAqc3RhY2tbMjU2IC8gc2l6ZW9mKHN0cnVjdCBzb2NrICopXTsKQEAgLTcxNiw3ICs3MTYsNyBAQAogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLT5kZXYpOwogCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3QgdWRwaGRyICp1aDsKLQlzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCAqZGFkZHI7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciwgKmRhZGRyOwogCXUzMiB1bGVuID0gMDsKIAogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSkpCkBAIC0xMjc4LDcgKzEyNzgsNyBAQAogCiBzdGF0aWMgaW50IHVkcDZfdWZvX3NlbmRfY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaXB2NmhkciAqaXB2Nmg7CisJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwdjZoOwogCXN0cnVjdCB1ZHBoZHIgKnVoOwogCiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCp1aCkpKQpAQCAtMTMyOCw3ICsxMzI4LDcgQEAKIAkvKiBEbyBzb2Z0d2FyZSBVRk8uIENvbXBsZXRlIGFuZCBmaWxsIGluIHRoZSBVRFAgY2hlY2tzdW0gYXMgSFcgY2Fubm90CiAJICogZG8gY2hlY2tzdW0gb2YgVURQIHBhY2tldHMgc2VudCBhcyBtdWx0aXBsZSBJUCBmcmFnbWVudHMuCiAJICovCi0Jb2Zmc2V0ID0gc2tiLT5jc3VtX3N0YXJ0IC0gc2tiX2hlYWRyb29tKHNrYik7CisJb2Zmc2V0ID0gc2tiX2NoZWNrc3VtX3N0YXJ0X29mZnNldChza2IpOwogCWNzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHNrYi0+bGVuLSBvZmZzZXQsIDApOwogCW9mZnNldCArPSBza2ItPmNzdW1fb2Zmc2V0OwogCSooX19zdW0xNiAqKShza2ItPmRhdGEgKyBvZmZzZXQpID0gY3N1bV9mb2xkKGNzdW0pOwpAQCAtMTM4Miw3ICsxMzgyLDcgQEAKIHsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzcCk7CiAJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc3ApOwotCXN0cnVjdCBpbjZfYWRkciAqZGVzdCwgKnNyYzsKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsICpzcmM7CiAJX191MTYgZGVzdHAsIHNyY3A7CiAKIAlkZXN0ICA9ICZucC0+ZGFkZHI7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9tb2RlX2JlZXQuYyBiL25ldC9pcHY2L3hmcm02X21vZGVfYmVldC5jCmluZGV4IGJiZDQ4YjEuLjM0MzdkN2QgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X21vZGVfYmVldC5jCisrKyBiL25ldC9pcHY2L3hmcm02X21vZGVfYmVldC5jCkBAIC00MSwxMCArNDEsOCBAQAogewogCXN0cnVjdCBpcHY2aGRyICp0b3BfaXBoOwogCXN0cnVjdCBpcF9iZWV0X3BoZHIgKnBoOwotCXN0cnVjdCBpcGhkciAqaXBodjQ7CiAJaW50IG9wdGxlbiwgaGRyX2xlbjsKIAotCWlwaHY0ID0gaXBfaGRyKHNrYik7CiAJaGRyX2xlbiA9IDA7CiAJb3B0bGVuID0gWEZSTV9NT0RFX1NLQl9DQihza2IpLT5vcHRsZW47CiAJaWYgKHVubGlrZWx5KG9wdGxlbikpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9tb2RlX3R1bm5lbC5jIGIvbmV0L2lwdjYveGZybTZfbW9kZV90dW5uZWwuYwppbmRleCA2NDVjYjk2Li40ZDZlZGZmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9tb2RlX3R1bm5lbC5jCisrKyBiL25ldC9pcHY2L3hmcm02X21vZGVfdHVubmVsLmMKQEAgLTIwLDcgKzIwLDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGlwaXA2X2Vjbl9kZWNhcHN1bGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBpcHY2aGRyICpvdXRlcl9pcGggPSBpcHY2X2hkcihza2IpOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICpvdXRlcl9pcGggPSBpcHY2X2hkcihza2IpOwogCXN0cnVjdCBpcHY2aGRyICppbm5lcl9pcGggPSBpcGlwdjZfaGRyKHNrYik7CiAKIAlpZiAoSU5FVF9FQ05faXNfY2UoaXB2Nl9nZXRfZHNmaWVsZChvdXRlcl9pcGgpKSkKQEAgLTU1LDggKzU1LDggQEAKIAkJZHNmaWVsZCAmPSB+SU5FVF9FQ05fTUFTSzsKIAlpcHY2X2NoYW5nZV9kc2ZpZWxkKHRvcF9pcGgsIDAsIGRzZmllbGQpOwogCXRvcF9pcGgtPmhvcF9saW1pdCA9IGlwNl9kc3RfaG9wbGltaXQoZHN0LT5jaGlsZCk7Ci0JaXB2Nl9hZGRyX2NvcHkoJnRvcF9pcGgtPnNhZGRyLCAoc3RydWN0IGluNl9hZGRyICopJngtPnByb3BzLnNhZGRyKTsKLQlpcHY2X2FkZHJfY29weSgmdG9wX2lwaC0+ZGFkZHIsIChzdHJ1Y3QgaW42X2FkZHIgKikmeC0+aWQuZGFkZHIpOworCWlwdjZfYWRkcl9jb3B5KCZ0b3BfaXBoLT5zYWRkciwgKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqKSZ4LT5wcm9wcy5zYWRkcik7CisJaXB2Nl9hZGRyX2NvcHkoJnRvcF9pcGgtPmRhZGRyLCAoY29uc3Qgc3RydWN0IGluNl9hZGRyICopJngtPmlkLmRhZGRyKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfcG9saWN5LmMgYi9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYwppbmRleCAwNWUzNGM4Li5kODc5ZjdlIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYworKysgYi9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYwpAQCAtMTI0LDcgKzEyNCw3IEBACiAJc3RydWN0IGZsb3dpNiAqZmw2ID0gJmZsLT51LmlwNjsKIAlpbnQgb25seXByb3RvID0gMDsKIAl1MTYgb2Zmc2V0ID0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpOwotCXN0cnVjdCBpcHY2aGRyICpoZHIgPSBpcHY2X2hkcihza2IpOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICpoZHIgPSBpcHY2X2hkcihza2IpOwogCXN0cnVjdCBpcHY2X29wdF9oZHIgKmV4dGhkcjsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpuaCA9IHNrYl9uZXR3b3JrX2hlYWRlcihza2IpOwogCXU4IG5leHRoZHIgPSBuaFtJUDZDQihza2IpLT5uaG9mZl07CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl90dW5uZWwuYyBiL25ldC9pcHY2L3hmcm02X3R1bm5lbC5jCmluZGV4IDI5NjljYWQuLmE2NzcwYTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X3R1bm5lbC5jCisrKyBiL25ldC9pcHY2L3hmcm02X3R1bm5lbC5jCkBAIC02OCw3ICs2OCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqeGZybTZfdHVubmVsX3NwaV9rbWVtIF9fcmVhZF9tb3N0bHk7CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgeGZybTZfdHVubmVsX3NwaV9oYXNoX2J5YWRkcih4ZnJtX2FkZHJlc3NfdCAqYWRkcikKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgeGZybTZfdHVubmVsX3NwaV9oYXNoX2J5YWRkcihjb25zdCB4ZnJtX2FkZHJlc3NfdCAqYWRkcikKIHsKIAl1bnNpZ25lZCBoOwogCkBAIC04NSw3ICs4NSw3IEBACiAJcmV0dXJuIHNwaSAlIFhGUk02X1RVTk5FTF9TUElfQllTUElfSFNJWkU7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgeGZybTZfdHVubmVsX3NwaSAqX194ZnJtNl90dW5uZWxfc3BpX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHhmcm1fYWRkcmVzc190ICpzYWRkcikKK3N0YXRpYyBzdHJ1Y3QgeGZybTZfdHVubmVsX3NwaSAqX194ZnJtNl90dW5uZWxfc3BpX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkcikKIHsKIAlzdHJ1Y3QgeGZybTZfdHVubmVsX25ldCAqeGZybTZfdG4gPSB4ZnJtNl90dW5uZWxfcGVybmV0KG5ldCk7CiAJc3RydWN0IHhmcm02X3R1bm5lbF9zcGkgKng2c3BpOwpAQCAtMTAxLDcgKzEwMSw3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLV9fYmUzMiB4ZnJtNl90dW5uZWxfc3BpX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHhmcm1fYWRkcmVzc190ICpzYWRkcikKK19fYmUzMiB4ZnJtNl90dW5uZWxfc3BpX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkcikKIHsKIAlzdHJ1Y3QgeGZybTZfdHVubmVsX3NwaSAqeDZzcGk7CiAJdTMyIHNwaTsKQEAgLTIzNywxMCArMjM3LDEwIEBACiBzdGF0aWMgaW50IHhmcm02X3R1bm5lbF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0+ZGV2KTsKLQlzdHJ1Y3QgaXB2NmhkciAqaXBoID0gaXB2Nl9oZHIoc2tiKTsKKwljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXBoID0gaXB2Nl9oZHIoc2tiKTsKIAlfX2JlMzIgc3BpOwogCi0Jc3BpID0geGZybTZfdHVubmVsX3NwaV9sb29rdXAobmV0LCAoeGZybV9hZGRyZXNzX3QgKikmaXBoLT5zYWRkcik7CisJc3BpID0geGZybTZfdHVubmVsX3NwaV9sb29rdXAobmV0LCAoY29uc3QgeGZybV9hZGRyZXNzX3QgKikmaXBoLT5zYWRkcik7CiAJcmV0dXJuIHhmcm02X3Jjdl9zcGkoc2tiLCBJUFBST1RPX0lQVjYsIHNwaSkgPiAwID8gOiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX2NvcmUuYyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fY29yZS5jCmluZGV4IGU5NzA4MjAuLjUyMDc5ZjEgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fY29yZS5jCisrKyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fY29yZS5jCkBAIC0yNDQsMTQgKzI0NCw4IEBACiB2b2lkIGlyY29tbV9jb25uZWN0X2luZGljYXRpb24oc3RydWN0IGlyY29tbV9jYiAqc2VsZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgICBzdHJ1Y3QgaXJjb21tX2luZm8gKmluZm8pCiB7Ci0JaW50IGNsZW4gPSAwOwotCiAJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAotCS8qIENoZWNrIGlmIHRoZSBwYWNrZXQgY29udGFpbnMgZGF0YSBvbiB0aGUgY29udHJvbCBjaGFubmVsICovCi0JaWYgKHNrYi0+bGVuID4gMCkKLQkJY2xlbiA9IHNrYi0+ZGF0YVswXTsKLQogCS8qCiAJICogSWYgdGhlcmUgYXJlIGFueSBkYXRhIGhpZGluZyBpbiB0aGUgY29udHJvbCBjaGFubmVsLCB3ZSBtdXN0CiAJICogZGVsaXZlciBpdCBmaXJzdC4gVGhlIHNpZGUgZWZmZWN0IGlzIHRoYXQgdGhlIGNvbnRyb2wgY2hhbm5lbApkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJjb21tL2lyY29tbV9sbXAuYyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fbG1wLmMKaW5kZXggMDhmYjU0ZC4uM2I4MDk1YyAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJjb21tL2lyY29tbV9sbXAuYworKysgYi9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX2xtcC5jCkBAIC03NSw3ICs3NSw2IEBACiAJCQkJICAgICAgIHN0cnVjdCBza19idWZmICp1c2VyZGF0YSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqdHhfc2tiOwotCWludCByZXQ7CiAKIAlJUkRBX0RFQlVHKDAsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCkBAIC0xMDAsOSArOTksNyBAQAogCQl0eF9za2IgPSB1c2VyZGF0YTsKIAl9CiAKLQlyZXQgPSBpcmxtcF9jb25uZWN0X3Jlc3BvbnNlKHNlbGYtPmxzYXAsIHR4X3NrYik7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gaXJsbXBfY29ubmVjdF9yZXNwb25zZShzZWxmLT5sc2FwLCB0eF9za2IpOwogfQogCiBzdGF0aWMgaW50IGlyY29tbV9sbXBfZGlzY29ubmVjdF9yZXF1ZXN0KHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYsCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0eS5jIGIvbmV0L2lyZGEvaXJjb21tL2lyY29tbV90dHkuYwppbmRleCBhMzljY2E4Li5iM2NjOGIzIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0eS5jCisrKyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5LmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Rlcm1pb3MuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgkJLyogZm9yIE1PRFVMRV9BTElBU19DSEFSREVWX01BSk9SICovCiAKQEAgLTExMzIsNyArMTEzMyw2IEBACiAJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqc2VsZiA9IChzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqKSBpbnN0YW5jZTsKLQlzdHJ1Y3QgdHR5X2xkaXNjICpsZDsKIAogCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKQEAgLTExNjEsMTUgKzExNjEsMTEgQEAKIAl9CiAKIAkvKgotCSAqIEp1c3QgZ2l2ZSBpdCBvdmVyIHRvIHRoZSBsaW5lIGRpc2NpcGxpbmUuIFRoZXJlIGlzIG5vIG5lZWQgdG8KLQkgKiBpbnZvbHZlIHRoZSBmbGlwIGJ1ZmZlcnMsIHNpbmNlIHdlIGFyZSBub3QgcnVubmluZyBpbiBhbiBpbnRlcnJ1cHQKLQkgKiBoYW5kbGVyCisJICogVXNlIGZsaXAgYnVmZmVyIGZ1bmN0aW9ucyBzaW5jZSB0aGUgY29kZSBtYXkgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0CisJICogY29udGV4dAogCSAqLwotCi0JbGQgPSB0dHlfbGRpc2NfcmVmKHNlbGYtPnR0eSk7Ci0JaWYgKGxkKQotCQlsZC0+b3BzLT5yZWNlaXZlX2J1ZihzZWxmLT50dHksIHNrYi0+ZGF0YSwgTlVMTCwgc2tiLT5sZW4pOwotCXR0eV9sZGlzY19kZXJlZihsZCk7CisJdHR5X2luc2VydF9mbGlwX3N0cmluZyhzZWxmLT50dHksIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHNlbGYtPnR0eSk7CiAKIAkvKiBObyBuZWVkIHRvIGtmcmVlX3NrYiAtIHNlZSBpcmNvbW1fdHRwX2RhdGFfaW5kaWNhdGlvbigpICovCiAKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFuL2lybGFuX2ZpbHRlci5jIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZmlsdGVyLmMKaW5kZXggOWZmNzgyMy4uNzk3N2JlNyAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZmlsdGVyLmMKKysrIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZmlsdGVyLmMKQEAgLTE0MywxMiArMTQzLDggQEAKICAqLwogdm9pZCBpcmxhbl9jaGVja19jb21tYW5kX3BhcmFtKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgY2hhciAqcGFyYW0sIGNoYXIgKnZhbHVlKQogewotCV9fdTggKmJ5dGVzOwotCiAJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAotCWJ5dGVzID0gdmFsdWU7Ci0KIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSTEFOX01BR0lDLCByZXR1cm47KTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fcHJvdmlkZXIuYyBiL25ldC9pcmRhL2lybGFuL2lybGFuX3Byb3ZpZGVyLmMKaW5kZXggNWNmNWU2Yy4uYjhhZjc0YSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fcHJvdmlkZXIuYworKysgYi9uZXQvaXJkYS9pcmxhbi9pcmxhbl9wcm92aWRlci5jCkBAIC0xMjgsNyArMTI4LDYgQEAKIHsKIAlzdHJ1Y3QgaXJsYW5fY2IgKnNlbGY7CiAJc3RydWN0IHRzYXBfY2IgKnRzYXA7Ci0JX191MzIgc2FkZHIsIGRhZGRyOwogCiAJSVJEQV9ERUJVRygwLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIApAQCAtMTQxLDggKzE0MCw2IEBACiAJSVJEQV9BU1NFUlQodHNhcCA9PSBzZWxmLT5wcm92aWRlci50c2FwX2N0cmwscmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+cHJvdmlkZXIuc3RhdGUgPT0gSVJMQU5fSURMRSwgcmV0dXJuOyk7CiAKLQlkYWRkciA9IGlydHRwX2dldF9kYWRkcih0c2FwKTsKLQlzYWRkciA9IGlydHRwX2dldF9zYWRkcih0c2FwKTsKIAlzZWxmLT5wcm92aWRlci5tYXhfc2R1X3NpemUgPSBtYXhfc2R1X3NpemU7CiAJc2VsZi0+cHJvdmlkZXIubWF4X2hlYWRlcl9zaXplID0gbWF4X2hlYWRlcl9zaXplOwogCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxhcF9ldmVudC5jIGIvbmV0L2lyZGEvaXJsYXBfZXZlbnQuYwppbmRleCBiYjQ3MDIxLi5jY2QyMTRmIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmxhcF9ldmVudC5jCisrKyBiL25ldC9pcmRhL2lybGFwX2V2ZW50LmMKQEAgLTIyMjcsOCArMjIyNyw2IEBACiBzdGF0aWMgaW50IGlybGFwX3N0YXRlX3NjbG9zZShzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYsIElSTEFQX0VWRU5UIGV2ZW50LAogCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlybGFwX2luZm8gKmluZm8pCiB7Ci0JaW50IHJldCA9IDA7Ci0KIAlJUkRBX0RFQlVHKDEsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAtRU5PREVWOyk7CkBAIC0yMjg5LDcgKzIyODcsNiBAQAogCQlJUkRBX0RFQlVHKDEsICIlcygpLCBVbmtub3duIGV2ZW50ICVkLCAoJXMpXG4iLCBfX2Z1bmNfXywKIAkJCSAgIGV2ZW50LCBpcmxhcF9ldmVudFtldmVudF0pOwogCi0JCXJldCA9IC1FSU5WQUw7CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJwcm9jLmMgYi9uZXQvaXJkYS9pcnByb2MuYwppbmRleCAzMTg3NjZlLi5iOWFjNTk4IDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcnByb2MuYworKysgYi9uZXQvaXJkYS9pcnByb2MuYwpAQCAtNjUsMTUgKzY1LDE0IEBACiB2b2lkIF9faW5pdCBpcmRhX3Byb2NfcmVnaXN0ZXIodm9pZCkKIHsKIAlpbnQgaTsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmQ7CiAKIAlwcm9jX2lyZGEgPSBwcm9jX21rZGlyKCJpcmRhIiwgaW5pdF9uZXQucHJvY19uZXQpOwogCWlmIChwcm9jX2lyZGEgPT0gTlVMTCkKIAkJcmV0dXJuOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaXJkYV9kaXJzKTsgaSsrKQotCQlkID0gcHJvY19jcmVhdGUoaXJkYV9kaXJzW2ldLm5hbWUsIDAsIHByb2NfaXJkYSwKLQkJCQlpcmRhX2RpcnNbaV0uZm9wcyk7CisJCSh2b2lkKSBwcm9jX2NyZWF0ZShpcmRhX2RpcnNbaV0ubmFtZSwgMCwgcHJvY19pcmRhLAorCQkJCSAgIGlyZGFfZGlyc1tpXS5mb3BzKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL25ldC9pdWN2L2FmX2l1Y3YuYyBiL25ldC9pdWN2L2FmX2l1Y3YuYwppbmRleCA5ODZiMmE1Li5lMjAxM2U0IDEwMDY0NAotLS0gYS9uZXQvaXVjdi9hZl9pdWN2LmMKKysrIGIvbmV0L2l1Y3YvYWZfaXVjdi5jCkBAIC0xOTAsNyArMTkwLDYgQEAKICAqLwogc3RhdGljIGludCBhZml1Y3ZfcG1fcmVzdG9yZV90aGF3KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaXVjdl9zb2NrICppdWN2OwogCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKIApAQCAtMTk5LDcgKzE5OCw2IEBACiAjZW5kaWYKIAlyZWFkX2xvY2soJml1Y3Zfc2tfbGlzdC5sb2NrKTsKIAlza19mb3JfZWFjaChzaywgbm9kZSwgJml1Y3Zfc2tfbGlzdC5oZWFkKSB7Ci0JCWl1Y3YgPSBpdWN2X3NrKHNrKTsKIAkJc3dpdGNoIChzay0+c2tfc3RhdGUpIHsKIAkJY2FzZSBJVUNWX0NPTk5FQ1RFRDoKIAkJCXNrLT5za19lcnIgPSBFUElQRTsKQEAgLTM4MSw3ICszNzksNiBAQAogewogCXVuc2lnbmVkIGNoYXIgdXNlcl9kYXRhWzE2XTsKIAlzdHJ1Y3QgaXVjdl9zb2NrICppdWN2ID0gaXVjdl9zayhzayk7Ci0JaW50IGVycjsKIAl1bnNpZ25lZCBsb25nIHRpbWVvOwogCiAJaXVjdl9zb2NrX2NsZWFyX3RpbWVyKHNrKTsKQEAgLTM5NCw4ICszOTEsNiBAQAogCiAJY2FzZSBJVUNWX0NPTk5FQ1RFRDoKIAljYXNlIElVQ1ZfRElTQ09OTjoKLQkJZXJyID0gMDsKLQogCQlzay0+c2tfc3RhdGUgPSBJVUNWX0NMT1NJTkc7CiAJCXNrLT5za19zdGF0ZV9jaGFuZ2Uoc2spOwogCkBAIC00MDQsNyArMzk5LDcgQEAKIAkJCQl0aW1lbyA9IHNrLT5za19saW5nZXJ0aW1lOwogCQkJZWxzZQogCQkJCXRpbWVvID0gSVVDVl9ESVNDT05OX1RJTUVPVVQ7Ci0JCQllcnIgPSBpdWN2X3NvY2tfd2FpdChzaywKKwkJCWl1Y3Zfc29ja193YWl0KHNrLAogCQkJCQlpdWN2X3NvY2tfaW5fc3RhdGUoc2ssIElVQ1ZfQ0xPU0VELCAwKSwKIAkJCQkJdGltZW8pOwogCQl9CkBAIC00MTcsNyArNDEyLDcgQEAKIAkJCWxvd19ubWNweSh1c2VyX2RhdGEsIGl1Y3YtPnNyY19uYW1lKTsKIAkJCWhpZ2hfbm1jcHkodXNlcl9kYXRhLCBpdWN2LT5kc3RfbmFtZSk7CiAJCQlBU0NFQkModXNlcl9kYXRhLCBzaXplb2YodXNlcl9kYXRhKSk7Ci0JCQllcnIgPSBpdWN2X3BhdGhfc2V2ZXIoaXVjdi0+cGF0aCwgdXNlcl9kYXRhKTsKKwkJCWl1Y3ZfcGF0aF9zZXZlcihpdWN2LT5wYXRoLCB1c2VyX2RhdGEpOwogCQkJaXVjdl9wYXRoX2ZyZWUoaXVjdi0+cGF0aCk7CiAJCQlpdWN2LT5wYXRoID0gTlVMTDsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L2l1Y3YvaXVjdi5jIGIvbmV0L2l1Y3YvaXVjdi5jCmluZGV4IDhmMTU2YmQuLmExNWMwMTUgMTAwNjQ0Ci0tLSBhL25ldC9pdWN2L2l1Y3YuYworKysgYi9uZXQvaXVjdi9pdWN2LmMKQEAgLTEyOCw4ICsxMjgsOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBpdWN2X2lycV9kYXRhICppdWN2X2lycV9kYXRhW05SX0NQVVNdOwotc3RhdGljIGNwdW1hc2tfdCBpdWN2X2J1ZmZlcl9jcHVtYXNrID0gQ1BVX01BU0tfTk9ORTsKLXN0YXRpYyBjcHVtYXNrX3QgaXVjdl9pcnFfY3B1bWFzayA9IENQVV9NQVNLX05PTkU7CitzdGF0aWMgY3B1bWFza190IGl1Y3ZfYnVmZmVyX2NwdW1hc2sgPSB7IENQVV9CSVRTX05PTkUgfTsKK3N0YXRpYyBjcHVtYXNrX3QgaXVjdl9pcnFfY3B1bWFzayA9IHsgQ1BVX0JJVFNfTk9ORSB9OwogCiAvKgogICogUXVldWUgb2YgaW50ZXJydXB0IGJ1ZmZlcnMgbG9jayBmb3IgZGVsaXZlcnkgdmlhIHRoZSB0YXNrbGV0CkBAIC00MDYsNyArNDA2LDcgQEAKIAlwYXJtLT5zZXRfbWFzay5pcG1hc2sgPSAweGY4OwogCWl1Y3ZfY2FsbF9iMmYwKElVQ1ZfU0VUQ09OVFJPTE1BU0ssIHBhcm0pOwogCS8qIFNldCBpbmRpY2F0aW9uIHRoYXQgaXVjdiBpbnRlcnJ1cHRzIGFyZSBhbGxvd2VkIGZvciB0aGlzIGNwdS4gKi8KLQljcHVfc2V0KGNwdSwgaXVjdl9pcnFfY3B1bWFzayk7CisJY3B1bWFza19zZXRfY3B1KGNwdSwgJml1Y3ZfaXJxX2NwdW1hc2spOwogfQogCiAvKioKQEAgLTQyNiw3ICs0MjYsNyBAQAogCWl1Y3ZfY2FsbF9iMmYwKElVQ1ZfU0VUTUFTSywgcGFybSk7CiAKIAkvKiBDbGVhciBpbmRpY2F0aW9uIHRoYXQgaXVjdiBpbnRlcnJ1cHRzIGFyZSBhbGxvd2VkIGZvciB0aGlzIGNwdS4gKi8KLQljcHVfY2xlYXIoY3B1LCBpdWN2X2lycV9jcHVtYXNrKTsKKwljcHVtYXNrX2NsZWFyX2NwdShjcHUsICZpdWN2X2lycV9jcHVtYXNrKTsKIH0KIAogLyoqCkBAIC00NTEsNyArNDUxLDcgQEAKIAlpdWN2X2NhbGxfYjJmMChJVUNWX1NFVENPTlRST0xNQVNLLCBwYXJtKTsKIAogCS8qIENsZWFyIGluZGljYXRpb24gdGhhdCBpdWN2IGludGVycnVwdHMgYXJlIGFsbG93ZWQgZm9yIHRoaXMgY3B1LiAqLwotCWNwdV9jbGVhcihjcHUsIGl1Y3ZfaXJxX2NwdW1hc2spOworCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgJml1Y3ZfaXJxX2NwdW1hc2spOwogfQogCiAvKioKQEAgLTQ2Niw3ICs0NjYsNyBAQAogCXVuaW9uIGl1Y3ZfcGFyYW0gKnBhcm07CiAJaW50IHJjOwogCi0JaWYgKGNwdV9pc3NldChjcHUsIGl1Y3ZfYnVmZmVyX2NwdW1hc2spKQorCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgJml1Y3ZfYnVmZmVyX2NwdW1hc2spKQogCQlyZXR1cm47CiAKIAkvKiBEZWNsYXJlIGludGVycnVwdCBidWZmZXIuICovCkBAIC00OTksOSArNDk5LDkgQEAKIAl9CiAKIAkvKiBTZXQgaW5kaWNhdGlvbiB0aGF0IGFuIGl1Y3YgYnVmZmVyIGV4aXN0cyBmb3IgdGhpcyBjcHUuICovCi0JY3B1X3NldChjcHUsIGl1Y3ZfYnVmZmVyX2NwdW1hc2spOworCWNwdW1hc2tfc2V0X2NwdShjcHUsICZpdWN2X2J1ZmZlcl9jcHVtYXNrKTsKIAotCWlmIChpdWN2X25vbnNtcF9oYW5kbGVyID09IDAgfHwgY3B1c19lbXB0eShpdWN2X2lycV9jcHVtYXNrKSkKKwlpZiAoaXVjdl9ub25zbXBfaGFuZGxlciA9PSAwIHx8IGNwdW1hc2tfZW1wdHkoJml1Y3ZfaXJxX2NwdW1hc2spKQogCQkvKiBFbmFibGUgaXVjdiBpbnRlcnJ1cHRzIG9uIHRoaXMgY3B1LiAqLwogCQlpdWN2X2FsbG93X2NwdShOVUxMKTsKIAllbHNlCkBAIC01MjAsNyArNTIwLDcgQEAKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXVuaW9uIGl1Y3ZfcGFyYW0gKnBhcm07CiAKLQlpZiAoIWNwdV9pc3NldChjcHUsIGl1Y3ZfYnVmZmVyX2NwdW1hc2spKQorCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsICZpdWN2X2J1ZmZlcl9jcHVtYXNrKSkKIAkJcmV0dXJuOwogCiAJLyogQmxvY2sgaXVjdiBpbnRlcnJ1cHRzLiAqLwpAQCAtNTMxLDcgKzUzMSw3IEBACiAJaXVjdl9jYWxsX2IyZjAoSVVDVl9SRVRSSUVWRV9CVUZGRVIsIHBhcm0pOwogCiAJLyogQ2xlYXIgaW5kaWNhdGlvbiB0aGF0IGFuIGl1Y3YgYnVmZmVyIGV4aXN0cyBmb3IgdGhpcyBjcHUuICovCi0JY3B1X2NsZWFyKGNwdSwgaXVjdl9idWZmZXJfY3B1bWFzayk7CisJY3B1bWFza19jbGVhcl9jcHUoY3B1LCAmaXVjdl9idWZmZXJfY3B1bWFzayk7CiB9CiAKIC8qKgpAQCAtNTQ2LDggKzU0Niw4IEBACiAJZ2V0X29ubGluZV9jcHVzKCk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCiAJCS8qIEVuYWJsZSBhbGwgY3B1cyB3aXRoIGEgZGVjbGFyZWQgYnVmZmVyLiAqLwotCQlpZiAoY3B1X2lzc2V0KGNwdSwgaXVjdl9idWZmZXJfY3B1bWFzaykgJiYKLQkJICAgICFjcHVfaXNzZXQoY3B1LCBpdWN2X2lycV9jcHVtYXNrKSkKKwkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCAmaXVjdl9idWZmZXJfY3B1bWFzaykgJiYKKwkJICAgICFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgJml1Y3ZfaXJxX2NwdW1hc2spKQogCQkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgaXVjdl9hbGxvd19jcHUsCiAJCQkJCQkgTlVMTCwgMSk7CiAJcHV0X29ubGluZV9jcHVzKCk7CkBAIC01NjQsOSArNTY0LDkgQEAKIAlpbnQgY3B1OwogCiAJLyogRGlzYWJsZSBhbGwgY3B1IGJ1dCB0aGUgZmlyc3QgaW4gY3B1X2lycV9jcHVtYXNrLiAqLwotCWNwdW1hc2sgPSBpdWN2X2lycV9jcHVtYXNrOwotCWNwdV9jbGVhcihmaXJzdF9jcHUoaXVjdl9pcnFfY3B1bWFzayksIGNwdW1hc2spOwotCWZvcl9lYWNoX2NwdV9tYXNrX25yKGNwdSwgY3B1bWFzaykKKwljcHVtYXNrX2NvcHkoJmNwdW1hc2ssICZpdWN2X2lycV9jcHVtYXNrKTsKKwljcHVtYXNrX2NsZWFyX2NwdShjcHVtYXNrX2ZpcnN0KCZpdWN2X2lycV9jcHVtYXNrKSwgJmNwdW1hc2spOworCWZvcl9lYWNoX2NwdShjcHUsICZjcHVtYXNrKQogCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBpdWN2X2Jsb2NrX2NwdSwgTlVMTCwgMSk7CiB9CiAKQEAgLTU5Myw3ICs1OTMsNyBAQAogCXJjID0gLUVJTzsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKIAkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgaXVjdl9kZWNsYXJlX2NwdSwgTlVMTCwgMSk7Ci0JaWYgKGNwdXNfZW1wdHkoaXVjdl9idWZmZXJfY3B1bWFzaykpCisJaWYgKGNwdW1hc2tfZW1wdHkoJml1Y3ZfYnVmZmVyX2NwdW1hc2spKQogCQkvKiBObyBjcHUgY291bGQgZGVjbGFyZSBhbiBpdWN2IGJ1ZmZlci4gKi8KIAkJZ290byBvdXQ7CiAJcHV0X29ubGluZV9jcHVzKCk7CkBAIC02NzUsMTUgKzY3NSwxNiBAQAogCWNhc2UgQ1BVX0RPV05fUFJFUEFSRV9GUk9aRU46CiAJCWlmICghaXVjdl9wYXRoX3RhYmxlKQogCQkJYnJlYWs7Ci0JCWNwdW1hc2sgPSBpdWN2X2J1ZmZlcl9jcHVtYXNrOwotCQljcHVfY2xlYXIoY3B1LCBjcHVtYXNrKTsKLQkJaWYgKGNwdXNfZW1wdHkoY3B1bWFzaykpCisJCWNwdW1hc2tfY29weSgmY3B1bWFzaywgJml1Y3ZfYnVmZmVyX2NwdW1hc2spOworCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsICZjcHVtYXNrKTsKKwkJaWYgKGNwdW1hc2tfZW1wdHkoJmNwdW1hc2spKQogCQkJLyogQ2FuJ3Qgb2ZmbGluZSBsYXN0IElVQ1YgZW5hYmxlZCBjcHUuICovCiAJCQlyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubygtRUlOVkFMKTsKIAkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgaXVjdl9yZXRyaWV2ZV9jcHUsIE5VTEwsIDEpOwotCQlpZiAoY3B1c19lbXB0eShpdWN2X2lycV9jcHVtYXNrKSkKLQkJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShmaXJzdF9jcHUoaXVjdl9idWZmZXJfY3B1bWFzayksCi0JCQkJCQkgaXVjdl9hbGxvd19jcHUsIE5VTEwsIDEpOworCQlpZiAoY3B1bWFza19lbXB0eSgmaXVjdl9pcnFfY3B1bWFzaykpCisJCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoCisJCQkJY3B1bWFza19maXJzdCgmaXVjdl9idWZmZXJfY3B1bWFzayksCisJCQkJaXVjdl9hbGxvd19jcHUsIE5VTEwsIDEpOwogCQlicmVhazsKIAl9CiAJcmV0dXJuIE5PVElGWV9PSzsKQEAgLTgyOCwxNCArODI5LDE0IEBACiBzdGF0aWMgaW50IGl1Y3ZfcmVib290X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQogewotCWludCBpLCByYzsKKwlpbnQgaTsKIAogCWdldF9vbmxpbmVfY3B1cygpOwogCW9uX2VhY2hfY3B1KGl1Y3ZfYmxvY2tfY3B1LCBOVUxMLCAxKTsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAlmb3IgKGkgPSAwOyBpIDwgaXVjdl9tYXhfcGF0aGlkOyBpKyspIHsKIAkJaWYgKGl1Y3ZfcGF0aF90YWJsZVtpXSkKLQkJCXJjID0gaXVjdl9zZXZlcl9wYXRoaWQoaSwgTlVMTCk7CisJCQlpdWN2X3NldmVyX3BhdGhpZChpLCBOVUxMKTsKIAl9CiAJcHJlZW1wdF9lbmFibGUoKTsKIAlwdXRfb25saW5lX2NwdXMoKTsKQEAgLTg2Niw3ICs4NjcsNyBAQAogCWludCByYzsKIAogCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQlpZiAoY3B1c19lbXB0eShpdWN2X2J1ZmZlcl9jcHVtYXNrKSkgeworCWlmIChjcHVtYXNrX2VtcHR5KCZpdWN2X2J1ZmZlcl9jcHVtYXNrKSkgewogCQlyYyA9IC1FSU87CiAJCWdvdG8gb3V0OwogCX0KQEAgLTkxNSw3ICs5MTYsNyBAQAogCiAJc3Bpbl9sb2NrX2JoKCZpdWN2X3RhYmxlX2xvY2spOwogCWl1Y3ZfY2xlYW51cF9xdWV1ZSgpOwotCWlmIChjcHVzX2VtcHR5KGl1Y3ZfYnVmZmVyX2NwdW1hc2spKSB7CisJaWYgKGNwdW1hc2tfZW1wdHkoJml1Y3ZfYnVmZmVyX2NwdW1hc2spKSB7CiAJCXJjID0gLUVJTzsKIAkJZ290byBvdXQ7CiAJfQpAQCAtOTc1LDcgKzk3Niw3IEBACiAJaW50IHJjOwogCiAJbG9jYWxfYmhfZGlzYWJsZSgpOwotCWlmIChjcHVzX2VtcHR5KGl1Y3ZfYnVmZmVyX2NwdW1hc2spKSB7CisJaWYgKGNwdW1hc2tfZW1wdHkoJml1Y3ZfYnVmZmVyX2NwdW1hc2spKSB7CiAJCXJjID0gLUVJTzsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMTAwNyw3ICsxMDA4LDcgQEAKIAlpbnQgcmM7CiAKIAlsb2NhbF9iaF9kaXNhYmxlKCk7Ci0JaWYgKGNwdXNfZW1wdHkoaXVjdl9idWZmZXJfY3B1bWFzaykpIHsKKwlpZiAoY3B1bWFza19lbXB0eSgmaXVjdl9idWZmZXJfY3B1bWFzaykpIHsKIAkJcmMgPSAtRUlPOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xMDM2LDcgKzEwMzcsNyBAQAogCWludCByYzsKIAogCXByZWVtcHRfZGlzYWJsZSgpOwotCWlmIChjcHVzX2VtcHR5KGl1Y3ZfYnVmZmVyX2NwdW1hc2spKSB7CisJaWYgKGNwdW1hc2tfZW1wdHkoJml1Y3ZfYnVmZmVyX2NwdW1hc2spKSB7CiAJCXJjID0gLUVJTzsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMTA3MCw3ICsxMDcxLDcgQEAKIAlpbnQgcmM7CiAKIAlsb2NhbF9iaF9kaXNhYmxlKCk7Ci0JaWYgKGNwdXNfZW1wdHkoaXVjdl9idWZmZXJfY3B1bWFzaykpIHsKKwlpZiAoY3B1bWFza19lbXB0eSgmaXVjdl9idWZmZXJfY3B1bWFzaykpIHsKIAkJcmMgPSAtRUlPOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xMTYyLDcgKzExNjMsNyBAQAogCWlmIChtc2ctPmZsYWdzICYgSVVDVl9JUFJNREFUQSkKIAkJcmV0dXJuIGl1Y3ZfbWVzc2FnZV9yZWNlaXZlX2lwcm1kYXRhKHBhdGgsIG1zZywgZmxhZ3MsCiAJCQkJCQkgICAgIGJ1ZmZlciwgc2l6ZSwgcmVzaWR1YWwpOwotCWlmIChjcHVzX2VtcHR5KGl1Y3ZfYnVmZmVyX2NwdW1hc2spKSB7CisJIGlmIChjcHVtYXNrX2VtcHR5KCZpdWN2X2J1ZmZlcl9jcHVtYXNrKSkgewogCQlyYyA9IC1FSU87CiAJCWdvdG8gb3V0OwogCX0KQEAgLTEyMzUsNyArMTIzNiw3IEBACiAJaW50IHJjOwogCiAJbG9jYWxfYmhfZGlzYWJsZSgpOwotCWlmIChjcHVzX2VtcHR5KGl1Y3ZfYnVmZmVyX2NwdW1hc2spKSB7CisJaWYgKGNwdW1hc2tfZW1wdHkoJml1Y3ZfYnVmZmVyX2NwdW1hc2spKSB7CiAJCXJjID0gLUVJTzsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMTI3NCw3ICsxMjc1LDcgQEAKIAlpbnQgcmM7CiAKIAlsb2NhbF9iaF9kaXNhYmxlKCk7Ci0JaWYgKGNwdXNfZW1wdHkoaXVjdl9idWZmZXJfY3B1bWFzaykpIHsKKwlpZiAoY3B1bWFza19lbXB0eSgmaXVjdl9idWZmZXJfY3B1bWFzaykpIHsKIAkJcmMgPSAtRUlPOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xMzI0LDcgKzEzMjUsNyBAQAogCXVuaW9uIGl1Y3ZfcGFyYW0gKnBhcm07CiAJaW50IHJjOwogCi0JaWYgKGNwdXNfZW1wdHkoaXVjdl9idWZmZXJfY3B1bWFzaykpIHsKKwlpZiAoY3B1bWFza19lbXB0eSgmaXVjdl9idWZmZXJfY3B1bWFzaykpIHsKIAkJcmMgPSAtRUlPOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xNDExLDcgKzE0MTIsNyBAQAogCWludCByYzsKIAogCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQlpZiAoY3B1c19lbXB0eShpdWN2X2J1ZmZlcl9jcHVtYXNrKSkgeworCWlmIChjcHVtYXNrX2VtcHR5KCZpdWN2X2J1ZmZlcl9jcHVtYXNrKSkgewogCQlyYyA9IC1FSU87CiAJCWdvdG8gb3V0OwogCX0KQEAgLTE4ODgsNyArMTg4OSw3IEBACiAJcHJpbnRrKEtFUk5fV0FSTklORyAiaXVjdl9wbV9mcmVlemVcbiIpOwogI2VuZGlmCiAJaWYgKGl1Y3ZfcG1fc3RhdGUgIT0gSVVDVl9QTV9GUkVFWklORykgewotCQlmb3JfZWFjaF9jcHVfbWFza19ucihjcHUsIGl1Y3ZfaXJxX2NwdW1hc2spCisJCWZvcl9lYWNoX2NwdShjcHUsICZpdWN2X2lycV9jcHVtYXNrKQogCQkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgaXVjdl9ibG9ja19jcHVfYWxtb3N0LAogCQkJCQkJIE5VTEwsIDEpOwogCQljYW5jZWxfd29ya19zeW5jKCZpdWN2X3dvcmspOwpAQCAtMTkyOCw3ICsxOTI5LDcgQEAKIAkJaWYgKHJjKQogCQkJZ290byBvdXQ7CiAJfQotCWlmIChjcHVzX2VtcHR5KGl1Y3ZfaXJxX2NwdW1hc2spKSB7CisJaWYgKGNwdW1hc2tfZW1wdHkoJml1Y3ZfaXJxX2NwdW1hc2spKSB7CiAJCWlmIChpdWN2X25vbnNtcF9oYW5kbGVyKQogCQkJLyogZW5hYmxlIGludGVycnVwdHMgb24gb25lIGNwdSAqLwogCQkJaXVjdl9hbGxvd19jcHUoTlVMTCk7CkBAIC0xOTYxLDcgKzE5NjIsNyBAQAogCQlwcl93YXJuaW5nKCJTdXNwZW5kaW5nIExpbnV4IGRpZCBub3QgY29tcGxldGVseSBjbG9zZSBhbGwgSVVDViAiCiAJCQkiY29ubmVjdGlvbnNcbiIpOwogCWl1Y3ZfcG1fc3RhdGUgPSBJVUNWX1BNX1JFU1RPUklORzsKLQlpZiAoY3B1c19lbXB0eShpdWN2X2lycV9jcHVtYXNrKSkgeworCWlmIChjcHVtYXNrX2VtcHR5KCZpdWN2X2lycV9jcHVtYXNrKSkgewogCQlyYyA9IGl1Y3ZfcXVlcnlfbWF4Y29ubigpOwogCQlyYyA9IGl1Y3ZfZW5hYmxlKCk7CiAJCWlmIChyYykKZGlmZiAtLWdpdCBhL25ldC9rZXkvYWZfa2V5LmMgYi9uZXQva2V5L2FmX2tleS5jCmluZGV4IDdkYjg2ZmYuLmQ2MjQwMWMgMTAwNjQ0Ci0tLSBhL25ldC9rZXkvYWZfa2V5LmMKKysrIGIvbmV0L2tleS9hZl9rZXkuYwpAQCAtNzEyLDcgKzcxMiw3IEBACiAJCXNpbjYtPnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CiAJCXNpbjYtPnNpbjZfcG9ydCA9IHBvcnQ7CiAJCXNpbjYtPnNpbjZfZmxvd2luZm8gPSAwOwotCQlpcHY2X2FkZHJfY29weSgmc2luNi0+c2luNl9hZGRyLCAoc3RydWN0IGluNl9hZGRyICopeGFkZHItPmE2KTsKKwkJaXB2Nl9hZGRyX2NvcHkoJnNpbjYtPnNpbjZfYWRkciwgKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqKXhhZGRyLT5hNik7CiAJCXNpbjYtPnNpbjZfc2NvcGVfaWQgPSAwOwogCQlyZXR1cm4gMTI4OwogCSAgICB9CmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX2NvcmUuYyBiL25ldC9sMnRwL2wydHBfY29yZS5jCmluZGV4IGM2NGNlMGEuLmVkOGEyMzMgMTAwNjQ0Ci0tLSBhL25ldC9sMnRwL2wydHBfY29yZS5jCisrKyBiL25ldC9sMnRwL2wydHBfY29yZS5jCkBAIC05NTQsNyArOTU0LDcgQEAKIH0KIAogc3RhdGljIGludCBsMnRwX3htaXRfY29yZShzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICBzaXplX3QgZGF0YV9sZW4pCisJCQkgIHN0cnVjdCBmbG93aSAqZmwsIHNpemVfdCBkYXRhX2xlbikKIHsKIAlzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCA9IHNlc3Npb24tPnR1bm5lbDsKIAl1bnNpZ25lZCBpbnQgbGVuID0gc2tiLT5sZW47CkBAIC05ODcsNyArOTg3LDcgQEAKIAogCS8qIFF1ZXVlIHRoZSBwYWNrZXQgdG8gSVAgZm9yIG91dHB1dCAqLwogCXNrYi0+bG9jYWxfZGYgPSAxOwotCWVycm9yID0gaXBfcXVldWVfeG1pdChza2IpOworCWVycm9yID0gaXBfcXVldWVfeG1pdChza2IsIGZsKTsKIAogCS8qIFVwZGF0ZSBzdGF0cyAqLwogCWlmIChlcnJvciA+PSAwKSB7CkBAIC0xMDI4LDYgKzEwMjgsNyBAQAogCWludCBkYXRhX2xlbiA9IHNrYi0+bGVuOwogCXN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsID0gc2Vzc2lvbi0+dHVubmVsOwogCXN0cnVjdCBzb2NrICpzayA9IHR1bm5lbC0+c29jazsKKwlzdHJ1Y3QgZmxvd2kgKmZsOwogCXN0cnVjdCB1ZHBoZHIgKnVoOwogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQ7CiAJX193c3VtIGNzdW07CkBAIC0xMDYwLDE0ICsxMDYxLDIxIEBACiAJCQkgICAgICBJUFNLQl9SRVJPVVRFRCk7CiAJbmZfcmVzZXQoc2tiKTsKIAorCWJoX2xvY2tfc29jayhzayk7CisJaWYgKHNvY2tfb3duZWRfYnlfdXNlcihzaykpIHsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCiAJLyogR2V0IHJvdXRpbmcgaW5mbyBmcm9tIHRoZSB0dW5uZWwgc29ja2V0ICovCiAJc2tiX2RzdF9kcm9wKHNrYik7CiAJc2tiX2RzdF9zZXQoc2tiLCBkc3RfY2xvbmUoX19za19kc3RfZ2V0KHNrKSkpOwogCisJaW5ldCA9IGluZXRfc2soc2spOworCWZsID0gJmluZXQtPmNvcmsuZmw7CiAJc3dpdGNoICh0dW5uZWwtPmVuY2FwKSB7CiAJY2FzZSBMMlRQX0VOQ0FQVFlQRV9VRFA6CiAJCS8qIFNldHVwIFVEUCBoZWFkZXIgKi8KLQkJaW5ldCA9IGluZXRfc2soc2spOwogCQlfX3NrYl9wdXNoKHNrYiwgc2l6ZW9mKCp1aCkpOwogCQlza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOwogCQl1aCA9IHVkcF9oZHIoc2tiKTsKQEAgLTExMDUsNyArMTExMyw5IEBACiAKIAlsMnRwX3NrYl9zZXRfb3duZXJfdyhza2IsIHNrKTsKIAotCWwydHBfeG1pdF9jb3JlKHNlc3Npb24sIHNrYiwgZGF0YV9sZW4pOworCWwydHBfeG1pdF9jb3JlKHNlc3Npb24sIHNrYiwgZmwsIGRhdGFfbGVuKTsKK291dF91bmxvY2s6CisJYmhfdW5sb2NrX3NvY2soc2spOwogCiBhYm9ydDoKIAlyZXR1cm4gMDsKQEAgLTE0MjUsMTYgKzE0MzUsMTUgQEAKIAogCS8qIEFkZCB0dW5uZWwgdG8gb3VyIGxpc3QgKi8KIAlJTklUX0xJU1RfSEVBRCgmdHVubmVsLT5saXN0KTsKLQlzcGluX2xvY2tfYmgoJnBuLT5sMnRwX3R1bm5lbF9saXN0X2xvY2spOwotCWxpc3RfYWRkX3JjdSgmdHVubmVsLT5saXN0LCAmcG4tPmwydHBfdHVubmVsX2xpc3QpOwotCXNwaW5fdW5sb2NrX2JoKCZwbi0+bDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKLQlzeW5jaHJvbml6ZV9yY3UoKTsKIAlhdG9taWNfaW5jKCZsMnRwX3R1bm5lbF9jb3VudCk7CiAKIAkvKiBCdW1wIHRoZSByZWZlcmVuY2UgY291bnQuIFRoZSB0dW5uZWwgY29udGV4dCBpcyBkZWxldGVkCi0JICogb25seSB3aGVuIHRoaXMgZHJvcHMgdG8gemVyby4KKwkgKiBvbmx5IHdoZW4gdGhpcyBkcm9wcyB0byB6ZXJvLiBNdXN0IGJlIGRvbmUgYmVmb3JlIGxpc3QgaW5zZXJ0aW9uCiAJICovCiAJbDJ0cF90dW5uZWxfaW5jX3JlZmNvdW50KHR1bm5lbCk7CisJc3Bpbl9sb2NrX2JoKCZwbi0+bDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKKwlsaXN0X2FkZF9yY3UoJnR1bm5lbC0+bGlzdCwgJnBuLT5sMnRwX3R1bm5lbF9saXN0KTsKKwlzcGluX3VubG9ja19iaCgmcG4tPmwydHBfdHVubmVsX2xpc3RfbG9jayk7CiAKIAllcnIgPSAwOwogZXJyOgpAQCAtMTYyNiw3ICsxNjM1LDYgQEAKIAkJCWhsaXN0X2FkZF9oZWFkX3JjdSgmc2Vzc2lvbi0+Z2xvYmFsX2hsaXN0LAogCQkJCQkgICBsMnRwX3Nlc3Npb25faWRfaGFzaF8yKHBuLCBzZXNzaW9uX2lkKSk7CiAJCQlzcGluX3VubG9ja19iaCgmcG4tPmwydHBfc2Vzc2lvbl9obGlzdF9sb2NrKTsKLQkJCXN5bmNocm9uaXplX3JjdSgpOwogCQl9CiAKIAkJLyogSWdub3JlIG1hbmFnZW1lbnQgc2Vzc2lvbiBpbiBzZXNzaW9uIGNvdW50IHZhbHVlICovCmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX2lwLmMgYi9uZXQvbDJ0cC9sMnRwX2lwLmMKaW5kZXggNWMwNGYzZS4uYjY0NjZlNyAxMDA2NDQKLS0tIGEvbmV0L2wydHAvbDJ0cF9pcC5jCisrKyBiL25ldC9sMnRwL2wydHBfaXAuYwpAQCAtMjk2LDEyICsyOTYsMTIgQEAKIAogc3RhdGljIGludCBsMnRwX2lwX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLCBpbnQgYWRkcl9sZW4pCiB7Ci0JaW50IHJjOwotCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAlzdHJ1Y3Qgc29ja2FkZHJfbDJ0cGlwICpsc2EgPSAoc3RydWN0IHNvY2thZGRyX2wydHBpcCAqKSB1YWRkcjsKKwlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CisJc3RydWN0IGZsb3dpNCAqZmw0OwogCXN0cnVjdCBydGFibGUgKnJ0OwogCV9fYmUzMiBzYWRkcjsKLQlpbnQgb2lmOworCWludCBvaWYsIHJjOwogCiAJcmMgPSAtRUlOVkFMOwogCWlmIChhZGRyX2xlbiA8IHNpemVvZigqbHNhKSkKQEAgLTMxMSw2ICszMTEsOCBAQAogCWlmIChsc2EtPmwydHBfZmFtaWx5ICE9IEFGX0lORVQpCiAJCWdvdG8gb3V0OwogCisJbG9ja19zb2NrKHNrKTsKKwogCXNrX2RzdF9yZXNldChzayk7CiAKIAlvaWYgPSBzay0+c2tfYm91bmRfZGV2X2lmOwpAQCAtMzIwLDcgKzMyMiw4IEBACiAJaWYgKGlwdjRfaXNfbXVsdGljYXN0KGxzYS0+bDJ0cF9hZGRyLnNfYWRkcikpCiAJCWdvdG8gb3V0OwogCi0JcnQgPSBpcF9yb3V0ZV9jb25uZWN0KGxzYS0+bDJ0cF9hZGRyLnNfYWRkciwgc2FkZHIsCisJZmw0ID0gJmluZXQtPmNvcmsuZmwudS5pcDQ7CisJcnQgPSBpcF9yb3V0ZV9jb25uZWN0KGZsNCwgbHNhLT5sMnRwX2FkZHIuc19hZGRyLCBzYWRkciwKIAkJCSAgICAgIFJUX0NPTk5fRkxBR1Moc2spLCBvaWYsCiAJCQkgICAgICBJUFBST1RPX0wyVFAsCiAJCQkgICAgICAwLCAwLCBzaywgdHJ1ZSk7CkBAIC0zNDAsMTAgKzM0MywxMCBAQAogCWwydHBfaXBfc2soc2spLT5wZWVyX2Nvbm5faWQgPSBsc2EtPmwydHBfY29ubl9pZDsKIAogCWlmICghaW5ldC0+aW5ldF9zYWRkcikKLQkJaW5ldC0+aW5ldF9zYWRkciA9IHJ0LT5ydF9zcmM7CisJCWluZXQtPmluZXRfc2FkZHIgPSBmbDQtPnNhZGRyOwogCWlmICghaW5ldC0+aW5ldF9yY3Zfc2FkZHIpCi0JCWluZXQtPmluZXRfcmN2X3NhZGRyID0gcnQtPnJ0X3NyYzsKLQlpbmV0LT5pbmV0X2RhZGRyID0gcnQtPnJ0X2RzdDsKKwkJaW5ldC0+aW5ldF9yY3Zfc2FkZHIgPSBmbDQtPnNhZGRyOworCWluZXQtPmluZXRfZGFkZHIgPSBmbDQtPmRhZGRyOwogCXNrLT5za19zdGF0ZSA9IFRDUF9FU1RBQkxJU0hFRDsKIAlpbmV0LT5pbmV0X2lkID0gamlmZmllczsKIApAQCAtMzU2LDYgKzM1OSw3IEBACiAKIAlyYyA9IDA7CiBvdXQ6CisJcmVsZWFzZV9zb2NrKHNrKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTQxNiwyMyArNDIwLDI4IEBACiAJaW50IHJjOwogCXN0cnVjdCBsMnRwX2lwX3NvY2sgKmxzYSA9IGwydHBfaXBfc2soc2spOwogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKLQlzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0ID0gaW5ldC0+b3B0OwogCXN0cnVjdCBydGFibGUgKnJ0ID0gTlVMTDsKKwlzdHJ1Y3QgZmxvd2k0ICpmbDQ7CiAJaW50IGNvbm5lY3RlZCA9IDA7CiAJX19iZTMyIGRhZGRyOwogCisJbG9ja19zb2NrKHNrKTsKKworCXJjID0gLUVOT1RDT05OOwogCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpCi0JCXJldHVybiAtRU5PVENPTk47CisJCWdvdG8gb3V0OwogCiAJLyogR2V0IGFuZCB2ZXJpZnkgdGhlIGFkZHJlc3MuICovCiAJaWYgKG1zZy0+bXNnX25hbWUpIHsKIAkJc3RydWN0IHNvY2thZGRyX2wydHBpcCAqbGlwID0gKHN0cnVjdCBzb2NrYWRkcl9sMnRwaXAgKikgbXNnLT5tc2dfbmFtZTsKKwkJcmMgPSAtRUlOVkFMOwogCQlpZiAobXNnLT5tc2dfbmFtZWxlbiA8IHNpemVvZigqbGlwKSkKLQkJCXJldHVybiAtRUlOVkFMOworCQkJZ290byBvdXQ7CiAKIAkJaWYgKGxpcC0+bDJ0cF9mYW1pbHkgIT0gQUZfSU5FVCkgeworCQkJcmMgPSAtRUFGTk9TVVBQT1JUOwogCQkJaWYgKGxpcC0+bDJ0cF9mYW1pbHkgIT0gQUZfVU5TUEVDKQotCQkJCXJldHVybiAtRUFGTk9TVVBQT1JUOworCQkJCWdvdG8gb3V0OwogCQl9CiAKIAkJZGFkZHIgPSBsaXAtPmwydHBfYWRkci5zX2FkZHI7CkBAIC00NjcsMTkgKzQ3NiwyNyBAQAogCQlnb3RvIGVycm9yOwogCX0KIAorCWZsNCA9ICZpbmV0LT5jb3JrLmZsLnUuaXA0OwogCWlmIChjb25uZWN0ZWQpCiAJCXJ0ID0gKHN0cnVjdCBydGFibGUgKikgX19za19kc3RfY2hlY2soc2ssIDApOwogCiAJaWYgKHJ0ID09IE5VTEwpIHsKKwkJc3RydWN0IGlwX29wdGlvbnNfcmN1ICppbmV0X29wdDsKKworCQlyY3VfcmVhZF9sb2NrKCk7CisJCWluZXRfb3B0ID0gcmN1X2RlcmVmZXJlbmNlKGluZXQtPmluZXRfb3B0KTsKKwogCQkvKiBVc2UgY29ycmVjdCBkZXN0aW5hdGlvbiBhZGRyZXNzIGlmIHdlIGhhdmUgb3B0aW9ucy4gKi8KLQkJaWYgKG9wdCAmJiBvcHQtPnNycikKLQkJCWRhZGRyID0gb3B0LT5mYWRkcjsKKwkJaWYgKGluZXRfb3B0ICYmIGluZXRfb3B0LT5vcHQuc3JyKQorCQkJZGFkZHIgPSBpbmV0X29wdC0+b3B0LmZhZGRyOworCisJCXJjdV9yZWFkX3VubG9jaygpOwogCiAJCS8qIElmIHRoaXMgZmFpbHMsIHJldHJhbnNtaXQgbWVjaGFuaXNtIG9mIHRyYW5zcG9ydCBsYXllciB3aWxsCiAJCSAqIGtlZXAgdHJ5aW5nIHVudGlsIHJvdXRlIGFwcGVhcnMgb3IgdGhlIGNvbm5lY3Rpb24gdGltZXMKIAkJICogaXRzZWxmIG91dC4KIAkJICovCi0JCXJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKHNvY2tfbmV0KHNrKSwgc2ssCisJCXJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKHNvY2tfbmV0KHNrKSwgZmw0LCBzaywKIAkJCQkJICAgZGFkZHIsIGluZXQtPmluZXRfc2FkZHIsCiAJCQkJCSAgIGluZXQtPmluZXRfZHBvcnQsIGluZXQtPmluZXRfc3BvcnQsCiAJCQkJCSAgIHNrLT5za19wcm90b2NvbCwgUlRfQ09OTl9GTEFHUyhzayksCkBAIC00OTEsNyArNTA4LDcgQEAKIAlza2JfZHN0X3NldChza2IsIGRzdF9jbG9uZSgmcnQtPmRzdCkpOwogCiAJLyogUXVldWUgdGhlIHBhY2tldCB0byBJUCBmb3Igb3V0cHV0ICovCi0JcmMgPSBpcF9xdWV1ZV94bWl0KHNrYik7CisJcmMgPSBpcF9xdWV1ZV94bWl0KHNrYiwgJmluZXQtPmNvcmsuZmwpOwogCiBlcnJvcjoKIAkvKiBVcGRhdGUgc3RhdHMgKi8KQEAgLTUwMywxMiArNTIwLDE1IEBACiAJCWxzYS0+dHhfZXJyb3JzKys7CiAJfQogCitvdXQ6CisJcmVsZWFzZV9zb2NrKHNrKTsKIAlyZXR1cm4gcmM7CiAKIG5vX3JvdXRlOgogCUlQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIElQU1RBVFNfTUlCX09VVE5PUk9VVEVTKTsKIAlrZnJlZV9za2Ioc2tiKTsKLQlyZXR1cm4gLUVIT1NUVU5SRUFDSDsKKwlyYyA9IC1FSE9TVFVOUkVBQ0g7CisJZ290byBvdXQ7CiB9CiAKIHN0YXRpYyBpbnQgbDJ0cF9pcF9yZWN2bXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csCmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYyBiL25ldC9sMnRwL2wydHBfbmV0bGluay5jCmluZGV4IDRjMWU1NDAuLjkzYTQxYTAgMTAwNjQ0Ci0tLSBhL25ldC9sMnRwL2wydHBfbmV0bGluay5jCisrKyBiL25ldC9sMnRwL2wydHBfbmV0bGluay5jCkBAIC03OTUsMTEgKzc5NSwxMiBAQAogCQlnb3RvIG91dDsKIAogCWwydHBfbmxfY21kX29wc1twd190eXBlXSA9IG9wczsKKwlyZXQgPSAwOwogCiBvdXQ6CiAJZ2VubF91bmxvY2soKTsKIGVycjoKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwobDJ0cF9ubF9yZWdpc3Rlcl9vcHMpOwogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvS2NvbmZpZyBiL25ldC9tYWM4MDIxMS9LY29uZmlnCmluZGV4IDUxM2Y4NWMuLmY1ZmRmY2JmIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvS2NvbmZpZworKysgYi9uZXQvbWFjODAyMTEvS2NvbmZpZwpAQCAtMiw3ICsyLDYgQEAKIAl0cmlzdGF0ZSAiR2VuZXJpYyBJRUVFIDgwMi4xMSBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxMSkiCiAJZGVwZW5kcyBvbiBDRkc4MDIxMQogCXNlbGVjdCBDUllQVE8KLQlzZWxlY3QgQ1JZUFRPX0VDQgogCXNlbGVjdCBDUllQVE9fQVJDNAogCXNlbGVjdCBDUllQVE9fQUVTCiAJc2VsZWN0IENSQzMyCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvYWVzX2NjbS5jIGIvbmV0L21hYzgwMjExL2Flc19jY20uYwppbmRleCA0YmQ2ZWYwLi5iOWI1OTVjIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvYWVzX2NjbS5jCisrKyBiL25ldC9tYWM4MDIxMS9hZXNfY2NtLmMKQEAgLTU0LDEzICs1NCwxMiBAQAogCQkJICAgICAgIHU4ICpjZGF0YSwgdTggKm1pYykKIHsKIAlpbnQgaSwgaiwgbGFzdF9sZW4sIG51bV9ibG9ja3M7Ci0JdTggKnBvcywgKmNwb3MsICpiLCAqc18wLCAqZSwgKmJfMCwgKmFhZDsKKwl1OCAqcG9zLCAqY3BvcywgKmIsICpzXzAsICplLCAqYl8wOwogCiAJYiA9IHNjcmF0Y2g7CiAJc18wID0gc2NyYXRjaCArIEFFU19CTE9DS19MRU47CiAJZSA9IHNjcmF0Y2ggKyAyICogQUVTX0JMT0NLX0xFTjsKIAliXzAgPSBzY3JhdGNoICsgMyAqIEFFU19CTE9DS19MRU47Ci0JYWFkID0gc2NyYXRjaCArIDQgKiBBRVNfQkxPQ0tfTEVOOwogCiAJbnVtX2Jsb2NrcyA9IERJVl9ST1VORF9VUChkYXRhX2xlbiwgQUVTX0JMT0NLX0xFTik7CiAJbGFzdF9sZW4gPSBkYXRhX2xlbiAlIEFFU19CTE9DS19MRU47CkBAIC05NCwxMyArOTMsMTIgQEAKIAkJCSAgICAgIHU4ICpjZGF0YSwgc2l6ZV90IGRhdGFfbGVuLCB1OCAqbWljLCB1OCAqZGF0YSkKIHsKIAlpbnQgaSwgaiwgbGFzdF9sZW4sIG51bV9ibG9ja3M7Ci0JdTggKnBvcywgKmNwb3MsICpiLCAqc18wLCAqYSwgKmJfMCwgKmFhZDsKKwl1OCAqcG9zLCAqY3BvcywgKmIsICpzXzAsICphLCAqYl8wOwogCiAJYiA9IHNjcmF0Y2g7CiAJc18wID0gc2NyYXRjaCArIEFFU19CTE9DS19MRU47CiAJYSA9IHNjcmF0Y2ggKyAyICogQUVTX0JMT0NLX0xFTjsKIAliXzAgPSBzY3JhdGNoICsgMyAqIEFFU19CTE9DS19MRU47Ci0JYWFkID0gc2NyYXRjaCArIDQgKiBBRVNfQkxPQ0tfTEVOOwogCiAJbnVtX2Jsb2NrcyA9IERJVl9ST1VORF9VUChkYXRhX2xlbiwgQUVTX0JMT0NLX0xFTik7CiAJbGFzdF9sZW4gPSBkYXRhX2xlbiAlIEFFU19CTE9DS19MRU47CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvYWdnLXJ4LmMgYi9uZXQvbWFjODAyMTEvYWdnLXJ4LmMKaW5kZXggMGM5ZDBjMC4uOWMwZDc2YyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2FnZy1yeC5jCisrKyBiL25ldC9tYWM4MDIxMS9hZ2ctcnguYwpAQCAtNjMsNyArNjMsOCBAQAogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmc3RhLT5hbXBkdV9tbG1lLm10eCk7CiAKLQl0aWRfcnggPSBzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF07CisJdGlkX3J4ID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0sCisJCQkJCWxvY2tkZXBfaXNfaGVsZCgmc3RhLT5hbXBkdV9tbG1lLm10eCkpOwogCiAJaWYgKCF0aWRfcngpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hZ2ctdHguYyBiL25ldC9tYWM4MDIxMS9hZ2ctdHguYwppbmRleCA1M2RlZmFmLi5jOGJlOGVmIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvYWdnLXR4LmMKKysrIGIvbmV0L21hYzgwMjExL2FnZy10eC5jCkBAIC0xMzYsMjQgKzEzNiwzNSBAQAogCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYik7CiB9CiAKK3ZvaWQgaWVlZTgwMjExX2Fzc2lnbl90aWRfdHgoc3RydWN0IHN0YV9pbmZvICpzdGEsIGludCB0aWQsCisJCQkgICAgIHN0cnVjdCB0aWRfYW1wZHVfdHggKnRpZF90eCkKK3sKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZzdGEtPmFtcGR1X21sbWUubXR4KTsKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZzdGEtPmxvY2spOworCXJjdV9hc3NpZ25fcG9pbnRlcihzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0sIHRpZF90eCk7Cit9CisKIGludCBfX19pZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLAogCQkJCSAgICBlbnVtIGllZWU4MDIxMV9iYWNrX3BhcnRpZXMgaW5pdGlhdG9yLAogCQkJCSAgICBib29sIHR4KQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc3RhLT5sb2NhbDsKLQlzdHJ1Y3QgdGlkX2FtcGR1X3R4ICp0aWRfdHggPSBzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF07CisJc3RydWN0IHRpZF9hbXBkdV90eCAqdGlkX3R4OwogCWludCByZXQ7CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZzdGEtPmFtcGR1X21sbWUubXR4KTsKIAotCWlmICghdGlkX3R4KQotCQlyZXR1cm4gLUVOT0VOVDsKLQogCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKIAorCXRpZF90eCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWRfdGlkX3R4KHN0YSwgdGlkKTsKKwlpZiAoIXRpZF90eCkgeworCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCiAJaWYgKHRlc3RfYml0KEhUX0FHR19TVEFURV9XQU5UX1NUQVJULCAmdGlkX3R4LT5zdGF0ZSkpIHsKIAkJLyogbm90IGV2ZW4gc3RhcnRlZCB5ZXQhICovCi0JCXJjdV9hc3NpZ25fcG9pbnRlcihzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0sIE5VTEwpOworCQlpZWVlODAyMTFfYXNzaWduX3RpZF90eChzdGEsIHRpZCwgTlVMTCk7CiAJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwogCQlrZnJlZV9yY3UodGlkX3R4LCByY3VfaGVhZCk7CiAJCXJldHVybiAwOwpAQCAtMjc1LDEzICsyODYsMTMgQEAKIAogdm9pZCBpZWVlODAyMTFfdHhfYmFfc2Vzc2lvbl9oYW5kbGVfc3RhcnQoc3RydWN0IHN0YV9pbmZvICpzdGEsIGludCB0aWQpCiB7Ci0Jc3RydWN0IHRpZF9hbXBkdV90eCAqdGlkX3R4ID0gc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdOworCXN0cnVjdCB0aWRfYW1wZHVfdHggKnRpZF90eDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHN0YS0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBzdGEtPnNkYXRhOwogCXUxNiBzdGFydF9zZXFfbnVtOwogCWludCByZXQ7CiAKLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZzdGEtPmFtcGR1X21sbWUubXR4KTsKKwl0aWRfdHggPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkX3RpZF90eChzdGEsIHRpZCk7CiAKIAkvKgogCSAqIFdoaWxlIHdlJ3JlIGFza2luZyB0aGUgZHJpdmVyIGFib3V0IHRoZSBhZ2dyZWdhdGlvbiwKQEAgLTMxMCw3ICszMjEsNyBAQAogCQkJCQkiIHRpZCAlZFxuIiwgdGlkKTsKICNlbmRpZgogCQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0JCXJjdV9hc3NpZ25fcG9pbnRlcihzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0sIE5VTEwpOworCQlpZWVlODAyMTFfYXNzaWduX3RpZF90eChzdGEsIHRpZCwgTlVMTCk7CiAJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwogCiAJCWllZWU4MDIxMV93YWtlX3F1ZXVlX2FnZyhsb2NhbCwgdGlkKTsKQEAgLTM4OCw5ICszOTksOSBAQAogCQlnb3RvIGVycl91bmxvY2tfc3RhOwogCX0KIAotCXRpZF90eCA9IHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXTsKKwl0aWRfdHggPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkX3RpZF90eChzdGEsIHRpZCk7CiAJLyogY2hlY2sgaWYgdGhlIFRJRCBpcyBub3QgaW4gYWdncmVnYXRpb24gZmxvdyBhbHJlYWR5ICovCi0JaWYgKHRpZF90eCkgeworCWlmICh0aWRfdHggfHwgc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGFydF90eFt0aWRdKSB7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCiAJCXByaW50ayhLRVJOX0RFQlVHICJCQSByZXF1ZXN0IGRlbmllZCAtIHNlc3Npb24gaXMgbm90ICIKIAkJCQkgImlkbGUgb24gdGlkICV1XG4iLCB0aWQpOwpAQCAtNDI1LDggKzQzNiwxMSBAQAogCXN0YS0+YW1wZHVfbWxtZS5kaWFsb2dfdG9rZW5fYWxsb2NhdG9yKys7CiAJdGlkX3R4LT5kaWFsb2dfdG9rZW4gPSBzdGEtPmFtcGR1X21sbWUuZGlhbG9nX3Rva2VuX2FsbG9jYXRvcjsKIAotCS8qIGZpbmFsbHksIGFzc2lnbiBpdCB0byB0aGUgYXJyYXkgKi8KLQlyY3VfYXNzaWduX3BvaW50ZXIoc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLCB0aWRfdHgpOworCS8qCisJICogRmluYWxseSwgYXNzaWduIGl0IHRvIHRoZSBzdGFydCBhcnJheTsgdGhlIHdvcmsgaXRlbSB3aWxsCisJICogY29sbGVjdCBpdCBhbmQgbW92ZSBpdCB0byB0aGUgbm9ybWFsIGFycmF5LgorCSAqLworCXN0YS0+YW1wZHVfbWxtZS50aWRfc3RhcnRfdHhbdGlkXSA9IHRpZF90eDsKIAogCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZzdGEtPmFtcGR1X21sbWUud29yayk7CiAKQEAgLTQ3MiwxNiArNDg2LDE5IEBACiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfYWdnX3R4X29wZXJhdGlvbmFsKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJCQkgc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQpCiB7CisJc3RydWN0IHRpZF9hbXBkdV90eCAqdGlkX3R4OworCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmc3RhLT5hbXBkdV9tbG1lLm10eCk7CiAKKwl0aWRfdHggPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkX3RpZF90eChzdGEsIHRpZCk7CisKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKIAlwcmludGsoS0VSTl9ERUJVRyAiQWdncmVnYXRpb24gaXMgb24gZm9yIHRpZCAlZFxuIiwgdGlkKTsKICNlbmRpZgogCiAJZHJ2X2FtcGR1X2FjdGlvbihsb2NhbCwgc3RhLT5zZGF0YSwKIAkJCSBJRUVFODAyMTFfQU1QRFVfVFhfT1BFUkFUSU9OQUwsCi0JCQkgJnN0YS0+c3RhLCB0aWQsIE5VTEwsCi0JCQkgc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5idWZfc2l6ZSk7CisJCQkgJnN0YS0+c3RhLCB0aWQsIE5VTEwsIHRpZF90eC0+YnVmX3NpemUpOwogCiAJLyoKIAkgKiBzeW5jaHJvbml6ZSB3aXRoIFRYIHBhdGgsIHdoaWxlIHNwbGljaW5nIHRoZSBUWCBwYXRoCkBAIC00ODksMTMgKzUwNiwxMyBAQAogCSAqLwogCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKIAotCWllZWU4MDIxMV9hZ2dfc3BsaWNlX3BhY2tldHMobG9jYWwsIHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSwgdGlkKTsKKwlpZWVlODAyMTFfYWdnX3NwbGljZV9wYWNrZXRzKGxvY2FsLCB0aWRfdHgsIHRpZCk7CiAJLyoKIAkgKiBOb3cgbWFyayBhcyBvcGVyYXRpb25hbC4gVGhpcyB3aWxsIGJlIHZpc2libGUKIAkgKiBpbiB0aGUgVFggcGF0aCwgYW5kIGxldHMgaXQgZ28gbG9jay1mcmVlIGluCiAJICogdGhlIGNvbW1vbiBjYXNlLgogCSAqLwotCXNldF9iaXQoSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMLCAmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5zdGF0ZSk7CisJc2V0X2JpdChIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwsICZ0aWRfdHgtPnN0YXRlKTsKIAlpZWVlODAyMTFfYWdnX3NwbGljZV9maW5pc2gobG9jYWwsIHRpZCk7CiAKIAlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKQEAgLTUyOSw3ICs1NDYsNyBAQAogCX0KIAogCW11dGV4X2xvY2soJnN0YS0+YW1wZHVfbWxtZS5tdHgpOwotCXRpZF90eCA9IHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXTsKKwl0aWRfdHggPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkX3RpZF90eChzdGEsIHRpZCk7CiAKIAlpZiAoV0FSTl9PTighdGlkX3R4KSkgewogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwpAQCAtNjA3LDcgKzYyNCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwotCXRpZF90eCA9IHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXTsKKwl0aWRfdHggPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkX3RpZF90eChzdGEsIHRpZCk7CiAKIAlpZiAoIXRpZF90eCkgewogCQlyZXQgPSAtRU5PRU5UOwpAQCAtNjYzLDcgKzY4MCw3IEBACiAKIAltdXRleF9sb2NrKCZzdGEtPmFtcGR1X21sbWUubXR4KTsKIAlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0JdGlkX3R4ID0gc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdOworCXRpZF90eCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWRfdGlkX3R4KHN0YSwgdGlkKTsKIAogCWlmICghdGlkX3R4IHx8ICF0ZXN0X2JpdChIVF9BR0dfU1RBVEVfU1RPUFBJTkcsICZ0aWRfdHgtPnN0YXRlKSkgewogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwpAQCAtNjg5LDcgKzcwNiw3IEBACiAJaWVlZTgwMjExX2FnZ19zcGxpY2VfcGFja2V0cyhsb2NhbCwgdGlkX3R4LCB0aWQpOwogCiAJLyogZnV0dXJlIHBhY2tldHMgbXVzdCBub3QgZmluZCB0aGUgdGlkX3R4IHN0cnVjdCBhbnkgbW9yZSAqLwotCXJjdV9hc3NpZ25fcG9pbnRlcihzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0sIE5VTEwpOworCWllZWU4MDIxMV9hc3NpZ25fdGlkX3R4KHN0YSwgdGlkLCBOVUxMKTsKIAogCWllZWU4MDIxMV9hZ2dfc3BsaWNlX2ZpbmlzaChsb2NhbCwgdGlkKTsKIApAQCAtNzQ0LDcgKzc2MSw3IEBACiAKIAltdXRleF9sb2NrKCZzdGEtPmFtcGR1X21sbWUubXR4KTsKIAotCXRpZF90eCA9IHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXTsKKwl0aWRfdHggPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkX3RpZF90eChzdGEsIHRpZCk7CiAJaWYgKCF0aWRfdHgpCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvY2ZnLmMgYi9uZXQvbWFjODAyMTEvY2ZnLmMKaW5kZXggNDQwNDk3My4uYmU3MGM3MCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2NmZy5jCisrKyBiL25ldC9tYWM4MDIxMS9jZmcuYwpAQCAtMTM2LDcgKzEzNiwxMCBAQAogCW11dGV4X2xvY2soJnNkYXRhLT5sb2NhbC0+c3RhX210eCk7CiAKIAlpZiAobWFjX2FkZHIpIHsKLQkJc3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWFjX2FkZHIpOworCQlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSkKKwkJCXN0YSA9IHN0YV9pbmZvX2dldChzZGF0YSwgbWFjX2FkZHIpOworCQllbHNlCisJCQlzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtYWNfYWRkcik7CiAJCWlmICghc3RhKSB7CiAJCQlpZWVlODAyMTFfa2V5X2ZyZWUoc2RhdGEtPmxvY2FsLCBrZXkpOwogCQkJZXJyID0gLUVOT0VOVDsKQEAgLTE1NywxMyArMTYwLDE0IEBACiBzdGF0aWMgaW50IGllZWU4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgIHU4IGtleV9pZHgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkcikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CisJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSA9IE5VTEw7CiAJaW50IHJldDsKIAotCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQotCW11dGV4X2xvY2soJnNkYXRhLT5sb2NhbC0+c3RhX210eCk7CisJbXV0ZXhfbG9jaygmbG9jYWwtPnN0YV9tdHgpOworCW11dGV4X2xvY2soJmxvY2FsLT5rZXlfbXR4KTsKIAogCWlmIChtYWNfYWRkcikgewogCQlyZXQgPSAtRU5PRU5UOwpAQCAtMTcyLDMzICsxNzYsMjQgQEAKIAkJaWYgKCFzdGEpCiAJCQlnb3RvIG91dF91bmxvY2s7CiAKLQkJaWYgKHBhaXJ3aXNlKSB7Ci0JCQlpZiAoc3RhLT5wdGspIHsKLQkJCQlpZWVlODAyMTFfa2V5X2ZyZWUoc2RhdGEtPmxvY2FsLCBzdGEtPnB0ayk7Ci0JCQkJcmV0ID0gMDsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChzdGEtPmd0a1trZXlfaWR4XSkgewotCQkJCWllZWU4MDIxMV9rZXlfZnJlZShzZGF0YS0+bG9jYWwsCi0JCQkJCQkgICBzdGEtPmd0a1trZXlfaWR4XSk7Ci0JCQkJcmV0ID0gMDsKLQkJCX0KLQkJfQorCQlpZiAocGFpcndpc2UpCisJCQlrZXkgPSBrZXlfbXR4X2RlcmVmZXJlbmNlKGxvY2FsLCBzdGEtPnB0ayk7CisJCWVsc2UKKwkJCWtleSA9IGtleV9tdHhfZGVyZWZlcmVuY2UobG9jYWwsIHN0YS0+Z3RrW2tleV9pZHhdKTsKKwl9IGVsc2UKKwkJa2V5ID0ga2V5X210eF9kZXJlZmVyZW5jZShsb2NhbCwgc2RhdGEtPmtleXNba2V5X2lkeF0pOwogCi0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLQlpZiAoIXNkYXRhLT5rZXlzW2tleV9pZHhdKSB7CisJaWYgKCFrZXkpIHsKIAkJcmV0ID0gLUVOT0VOVDsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCWllZWU4MDIxMV9rZXlfZnJlZShzZGF0YS0+bG9jYWwsIHNkYXRhLT5rZXlzW2tleV9pZHhdKTsKLQlXQVJOX09OKHNkYXRhLT5rZXlzW2tleV9pZHhdKTsKKwlfX2llZWU4MDIxMV9rZXlfZnJlZShrZXkpOwogCiAJcmV0ID0gMDsKICBvdXRfdW5sb2NrOgotCW11dGV4X3VubG9jaygmc2RhdGEtPmxvY2FsLT5zdGFfbXR4KTsKKwltdXRleF91bmxvY2soJmxvY2FsLT5rZXlfbXR4KTsKKwltdXRleF91bmxvY2soJmxvY2FsLT5zdGFfbXR4KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yMjgsMTEgKzIyMywxMSBAQAogCQkJZ290byBvdXQ7CiAKIAkJaWYgKHBhaXJ3aXNlKQotCQkJa2V5ID0gc3RhLT5wdGs7CisJCQlrZXkgPSByY3VfZGVyZWZlcmVuY2Uoc3RhLT5wdGspOwogCQllbHNlIGlmIChrZXlfaWR4IDwgTlVNX0RFRkFVTFRfS0VZUykKLQkJCWtleSA9IHN0YS0+Z3RrW2tleV9pZHhdOworCQkJa2V5ID0gcmN1X2RlcmVmZXJlbmNlKHN0YS0+Z3RrW2tleV9pZHhdKTsKIAl9IGVsc2UKLQkJa2V5ID0gc2RhdGEtPmtleXNba2V5X2lkeF07CisJCWtleSA9IHJjdV9kZXJlZmVyZW5jZShzZGF0YS0+a2V5c1trZXlfaWR4XSk7CiAKIAlpZiAoIWtleSkKIAkJZ290byBvdXQ7CkBAIC0zMzAsNiArMzI1LDcgQEAKIHN0YXRpYyB2b2lkIHN0YV9zZXRfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsIHN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvKQogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gc3RhLT5zZGF0YTsKKwlzdHJ1Y3QgdGltZXNwZWMgdXB0aW1lOwogCiAJc2luZm8tPmdlbmVyYXRpb24gPSBzZGF0YS0+bG9jYWwtPnN0YV9nZW5lcmF0aW9uOwogCkBAIC0zNDIsNyArMzM4LDEyIEBACiAJCQlTVEFUSU9OX0lORk9fVFhfRkFJTEVEIHwKIAkJCVNUQVRJT05fSU5GT19UWF9CSVRSQVRFIHwKIAkJCVNUQVRJT05fSU5GT19SWF9CSVRSQVRFIHwKLQkJCVNUQVRJT05fSU5GT19SWF9EUk9QX01JU0M7CisJCQlTVEFUSU9OX0lORk9fUlhfRFJPUF9NSVNDIHwKKwkJCVNUQVRJT05fSU5GT19CU1NfUEFSQU0gfAorCQkJU1RBVElPTl9JTkZPX0NPTk5FQ1RFRF9USU1FOworCisJZG9fcG9zaXhfY2xvY2tfbW9ub3RvbmljX2dldHRpbWUoJnVwdGltZSk7CisJc2luZm8tPmNvbm5lY3RlZF90aW1lID0gdXB0aW1lLnR2X3NlYyAtIHN0YS0+bGFzdF9jb25uZWN0ZWQ7CiAKIAlzaW5mby0+aW5hY3RpdmVfdGltZSA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHN0YS0+bGFzdF9yeCk7CiAJc2luZm8tPnJ4X2J5dGVzID0gc3RhLT5yeF9ieXRlczsKQEAgLTM4OSw2ICszOTAsMTYgQEAKIAkJc2luZm8tPnBsaW5rX3N0YXRlID0gc3RhLT5wbGlua19zdGF0ZTsKICNlbmRpZgogCX0KKworCXNpbmZvLT5ic3NfcGFyYW0uZmxhZ3MgPSAwOworCWlmIChzZGF0YS0+dmlmLmJzc19jb25mLnVzZV9jdHNfcHJvdCkKKwkJc2luZm8tPmJzc19wYXJhbS5mbGFncyB8PSBCU1NfUEFSQU1fRkxBR1NfQ1RTX1BST1Q7CisJaWYgKHNkYXRhLT52aWYuYnNzX2NvbmYudXNlX3Nob3J0X3ByZWFtYmxlKQorCQlzaW5mby0+YnNzX3BhcmFtLmZsYWdzIHw9IEJTU19QQVJBTV9GTEFHU19TSE9SVF9QUkVBTUJMRTsKKwlpZiAoc2RhdGEtPnZpZi5ic3NfY29uZi51c2Vfc2hvcnRfc2xvdCkKKwkJc2luZm8tPmJzc19wYXJhbS5mbGFncyB8PSBCU1NfUEFSQU1fRkxBR1NfU0hPUlRfU0xPVF9USU1FOworCXNpbmZvLT5ic3NfcGFyYW0uZHRpbV9wZXJpb2QgPSBzZGF0YS0+bG9jYWwtPmh3LmNvbmYucHNfZHRpbV9wZXJpb2Q7CisJc2luZm8tPmJzc19wYXJhbS5iZWFjb25faW50ZXJ2YWwgPSBzZGF0YS0+dmlmLmJzc19jb25mLmJlYWNvbl9pbnQ7CiB9CiAKIApAQCAtNDUyLDcgKzQ2Myw3IEBACiAJaW50IHNpemU7CiAJaW50IGVyciA9IC1FSU5WQUw7CiAKLQlvbGQgPSBzZGF0YS0+dS5hcC5iZWFjb247CisJb2xkID0gcnRubF9kZXJlZmVyZW5jZShzZGF0YS0+dS5hcC5iZWFjb24pOwogCiAJLyogaGVhZCBtdXN0IG5vdCBiZSB6ZXJvLWxlbmd0aCAqLwogCWlmIChwYXJhbXMtPmhlYWQgJiYgIXBhcmFtcy0+aGVhZF9sZW4pCkBAIC01NDcsOCArNTU4LDcgQEAKIAogCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAotCW9sZCA9IHNkYXRhLT51LmFwLmJlYWNvbjsKLQorCW9sZCA9IHJ0bmxfZGVyZWZlcmVuY2Uoc2RhdGEtPnUuYXAuYmVhY29uKTsKIAlpZiAob2xkKQogCQlyZXR1cm4gLUVBTFJFQURZOwogCkBAIC01NjMsOCArNTczLDcgQEAKIAogCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAotCW9sZCA9IHNkYXRhLT51LmFwLmJlYWNvbjsKLQorCW9sZCA9IHJ0bmxfZGVyZWZlcmVuY2Uoc2RhdGEtPnUuYXAuYmVhY29uKTsKIAlpZiAoIW9sZCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKQEAgLTU3OCw4ICs1ODcsNyBAQAogCiAJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCi0Jb2xkID0gc2RhdGEtPnUuYXAuYmVhY29uOwotCisJb2xkID0gcnRubF9kZXJlZmVyZW5jZShzZGF0YS0+dS5hcC5iZWFjb24pOwogCWlmICghb2xkKQogCQlyZXR1cm4gLUVOT0VOVDsKIApAQCAtNjc1LDYgKzY4MywxMiBAQAogCQlpZiAoc2V0ICYgQklUKE5MODAyMTFfU1RBX0ZMQUdfTUZQKSkKIAkJCXN0YS0+ZmxhZ3MgfD0gV0xBTl9TVEFfTUZQOwogCX0KKworCWlmIChtYXNrICYgQklUKE5MODAyMTFfU1RBX0ZMQUdfQVVUSEVOVElDQVRFRCkpIHsKKwkJc3RhLT5mbGFncyAmPSB+V0xBTl9TVEFfQVVUSDsKKwkJaWYgKHNldCAmIEJJVChOTDgwMjExX1NUQV9GTEFHX0FVVEhFTlRJQ0FURUQpKQorCQkJc3RhLT5mbGFncyB8PSBXTEFOX1NUQV9BVVRIOworCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGEtPmZsYWdsb2NrLCBmbGFncyk7CiAKIAkvKgpAQCAtNzEyLDE1ICs3MjYsMjkgQEAKIAkJCQkJCSAgcGFyYW1zLT5odF9jYXBhLAogCQkJCQkJICAmc3RhLT5zdGEuaHRfY2FwKTsKIAotCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpICYmIHBhcmFtcy0+cGxpbmtfYWN0aW9uKSB7Ci0JCXN3aXRjaCAocGFyYW1zLT5wbGlua19hY3Rpb24pIHsKLQkJY2FzZSBQTElOS19BQ1RJT05fT1BFTjoKLQkJCW1lc2hfcGxpbmtfb3BlbihzdGEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUExJTktfQUNUSU9OX0JMT0NLOgotCQkJbWVzaF9wbGlua19ibG9jayhzdGEpOwotCQkJYnJlYWs7Ci0JCX0KKwlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICisJCWlmIChzZGF0YS0+dS5tZXNoLnNlY3VyaXR5ICYgSUVFRTgwMjExX01FU0hfU0VDX1NFQ1VSRUQpCisJCQlzd2l0Y2ggKHBhcmFtcy0+cGxpbmtfc3RhdGUpIHsKKwkJCWNhc2UgTkw4MDIxMV9QTElOS19MSVNURU46CisJCQljYXNlIE5MODAyMTFfUExJTktfRVNUQUI6CisJCQljYXNlIE5MODAyMTFfUExJTktfQkxPQ0tFRDoKKwkJCQlzdGEtPnBsaW5rX3N0YXRlID0gcGFyYW1zLT5wbGlua19zdGF0ZTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJLyogIG5vdGhpbmcgICovCisJCQkJYnJlYWs7CisJCQl9CisJCWVsc2UKKwkJCXN3aXRjaCAocGFyYW1zLT5wbGlua19hY3Rpb24pIHsKKwkJCWNhc2UgUExJTktfQUNUSU9OX09QRU46CisJCQkJbWVzaF9wbGlua19vcGVuKHN0YSk7CisJCQkJYnJlYWs7CisJCQljYXNlIFBMSU5LX0FDVElPTl9CTE9DSzoKKwkJCQltZXNoX3BsaW5rX2Jsb2NrKHN0YSk7CisJCQkJYnJlYWs7CisJCQl9CisjZW5kaWYKIAl9CiB9CiAKQEAgLTkyMSw4ICs5NDksMTAgQEAKIHN0YXRpYyB2b2lkIG1wYXRoX3NldF9waW5mbyhzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCwgdTggKm5leHRfaG9wLAogCQkJICAgIHN0cnVjdCBtcGF0aF9pbmZvICpwaW5mbykKIHsKLQlpZiAobXBhdGgtPm5leHRfaG9wKQotCQltZW1jcHkobmV4dF9ob3AsIG1wYXRoLT5uZXh0X2hvcC0+c3RhLmFkZHIsIEVUSF9BTEVOKTsKKwlzdHJ1Y3Qgc3RhX2luZm8gKm5leHRfaG9wX3N0YSA9IHJjdV9kZXJlZmVyZW5jZShtcGF0aC0+bmV4dF9ob3ApOworCisJaWYgKG5leHRfaG9wX3N0YSkKKwkJbWVtY3B5KG5leHRfaG9wLCBuZXh0X2hvcF9zdGEtPnN0YS5hZGRyLCBFVEhfQUxFTik7CiAJZWxzZQogCQltZW1zZXQobmV4dF9ob3AsIDAsIEVUSF9BTEVOKTsKIApAQCAtMTAyMywyNiArMTA1MywzMCBAQAogCXU4ICpuZXdfaWU7CiAJY29uc3QgdTggKm9sZF9pZTsKIAotCS8qIGZpcnN0IGFsbG9jYXRlIHRoZSBuZXcgdmVuZG9yIGluZm9ybWF0aW9uIGVsZW1lbnQgKi8KKwkvKiBhbGxvY2F0ZSBpbmZvcm1hdGlvbiBlbGVtZW50cyAqLwogCW5ld19pZSA9IE5VTEw7Ci0Jb2xkX2llID0gaWZtc2gtPnZlbmRvcl9pZTsKKwlvbGRfaWUgPSBpZm1zaC0+aWU7CiAKLQlpZm1zaC0+dmVuZG9yX2llX2xlbiA9IHNldHVwLT52ZW5kb3JfaWVfbGVuOwotCWlmIChzZXR1cC0+dmVuZG9yX2llX2xlbikgewotCQluZXdfaWUgPSBrbWVtZHVwKHNldHVwLT52ZW5kb3JfaWUsIHNldHVwLT52ZW5kb3JfaWVfbGVuLAorCWlmIChzZXR1cC0+aWVfbGVuKSB7CisJCW5ld19pZSA9IGttZW1kdXAoc2V0dXAtPmllLCBzZXR1cC0+aWVfbGVuLAogCQkJCUdGUF9LRVJORUwpOwogCQlpZiAoIW5ld19pZSkKIAkJCXJldHVybiAtRU5PTUVNOwogCX0KKwlpZm1zaC0+aWVfbGVuID0gc2V0dXAtPmllX2xlbjsKKwlpZm1zaC0+aWUgPSBuZXdfaWU7CisJa2ZyZWUob2xkX2llKTsKIAogCS8qIG5vdyBjb3B5IHRoZSByZXN0IG9mIHRoZSBzZXR1cCBwYXJhbWV0ZXJzICovCiAJaWZtc2gtPm1lc2hfaWRfbGVuID0gc2V0dXAtPm1lc2hfaWRfbGVuOwogCW1lbWNweShpZm1zaC0+bWVzaF9pZCwgc2V0dXAtPm1lc2hfaWQsIGlmbXNoLT5tZXNoX2lkX2xlbik7CiAJaWZtc2gtPm1lc2hfcHBfaWQgPSBzZXR1cC0+cGF0aF9zZWxfcHJvdG87CiAJaWZtc2gtPm1lc2hfcG1faWQgPSBzZXR1cC0+cGF0aF9tZXRyaWM7Ci0JaWZtc2gtPnZlbmRvcl9pZSA9IG5ld19pZTsKLQotCWtmcmVlKG9sZF9pZSk7CisJaWZtc2gtPnNlY3VyaXR5ID0gSUVFRTgwMjExX01FU0hfU0VDX05PTkU7CisJaWYgKHNldHVwLT5pc19hdXRoZW50aWNhdGVkKQorCQlpZm1zaC0+c2VjdXJpdHkgfD0gSUVFRTgwMjExX01FU0hfU0VDX0FVVEhFRDsKKwlpZiAoc2V0dXAtPmlzX3NlY3VyZSkKKwkJaWZtc2gtPnNlY3VyaXR5IHw9IElFRUU4MDIxMV9NRVNIX1NFQ19TRUNVUkVEOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjc1LDkgKzEzMDksMTAgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBpZWVlODAyMTFfc3VzcGVuZChzdHJ1Y3Qgd2lwaHkgKndpcGh5KQorc3RhdGljIGludCBpZWVlODAyMTFfc3VzcGVuZChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJICAgICBzdHJ1Y3QgY2ZnODAyMTFfd293bGFuICp3b3dsYW4pCiB7Ci0JcmV0dXJuIF9faWVlZTgwMjExX3N1c3BlbmQod2lwaHlfcHJpdih3aXBoeSkpOworCXJldHVybiBfX2llZWU4MDIxMV9zdXNwZW5kKHdpcGh5X3ByaXYod2lwaHkpLCB3b3dsYW4pOwogfQogCiBzdGF0aWMgaW50IGllZWU4MDIxMV9yZXN1bWUoc3RydWN0IHdpcGh5ICp3aXBoeSkKQEAgLTEzMjAsNiArMTM1NSwzMCBAQAogCXJldHVybiBpZWVlODAyMTFfcmVxdWVzdF9zY2FuKHNkYXRhLCByZXEpOwogfQogCitzdGF0aWMgaW50CitpZWVlODAyMTFfc2NoZWRfc2Nhbl9zdGFydChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBjZmc4MDIxMV9zY2hlZF9zY2FuX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisKKwlpZiAoIXNkYXRhLT5sb2NhbC0+b3BzLT5zY2hlZF9zY2FuX3N0YXJ0KQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlyZXR1cm4gaWVlZTgwMjExX3JlcXVlc3Rfc2NoZWRfc2Nhbl9zdGFydChzZGF0YSwgcmVxKTsKK30KKworc3RhdGljIGludAoraWVlZTgwMjExX3NjaGVkX3NjYW5fc3RvcChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKworCWlmICghc2RhdGEtPmxvY2FsLT5vcHMtPnNjaGVkX3NjYW5fc3RvcCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJcmV0dXJuIGllZWU4MDIxMV9yZXF1ZXN0X3NjaGVkX3NjYW5fc3RvcChzZGF0YSk7Cit9CisKIHN0YXRpYyBpbnQgaWVlZTgwMjExX2F1dGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgc3RydWN0IGNmZzgwMjExX2F1dGhfcmVxdWVzdCAqcmVxKQogewpAQCAtMTYxMSwxNiArMTY3MCwxMyBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCWludCBpOworCWludCBpLCByZXQ7CiAKLQkvKgotCSAqIFRoaXMgX2NvdWxkXyBiZSBzdXBwb3J0ZWQgYnkgcHJvdmlkaW5nIGEgaG9vayBmb3IKLQkgKiBkcml2ZXJzIGZvciB0aGlzIGZ1bmN0aW9uLCBidXQgYXQgdGhpcyBwb2ludCBpdAotCSAqIGRvZXNuJ3Qgc2VlbSB3b3J0aCBib3RoZXJpbmcuCi0JICovCi0JaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19IQVNfUkFURV9DT05UUk9MKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX0hBU19SQVRFX0NPTlRST0wpIHsKKwkJcmV0ID0gZHJ2X3NldF9iaXRyYXRlX21hc2sobG9jYWwsIHNkYXRhLCBtYXNrKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGkrKykKIAkJc2RhdGEtPnJjX3JhdGVpZHhfbWFza1tpXSA9IG1hc2stPmNvbnRyb2xbaV0ubGVnYWN5OwpAQCAtMjA2NCw2ICsyMTIwLDggQEAKIAkuc3VzcGVuZCA9IGllZWU4MDIxMV9zdXNwZW5kLAogCS5yZXN1bWUgPSBpZWVlODAyMTFfcmVzdW1lLAogCS5zY2FuID0gaWVlZTgwMjExX3NjYW4sCisJLnNjaGVkX3NjYW5fc3RhcnQgPSBpZWVlODAyMTFfc2NoZWRfc2Nhbl9zdGFydCwKKwkuc2NoZWRfc2Nhbl9zdG9wID0gaWVlZTgwMjExX3NjaGVkX3NjYW5fc3RvcCwKIAkuYXV0aCA9IGllZWU4MDIxMV9hdXRoLAogCS5hc3NvYyA9IGllZWU4MDIxMV9hc3NvYywKIAkuZGVhdXRoID0gaWVlZTgwMjExX2RlYXV0aCwKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMgYi9uZXQvbWFjODAyMTEvZGVidWdmcy5jCmluZGV4IDUxZjBkNzguLjE4NmUwMmYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMKKysrIGIvbmV0L21hYzgwMjExL2RlYnVnZnMuYwpAQCAtMzcsNyArMzcsNyBAQAogCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCByZXMpOwogfQogCi0jZGVmaW5lIERFQlVHRlNfUkVBRE9OTFlfRklMRShuYW1lLCBmbXQsIHZhbHVlLi4uKQkJCVwKKyNkZWZpbmUgREVCVUdGU19SRUFET05MWV9GSUxFX0ZOKG5hbWUsIGZtdCwgdmFsdWUuLi4pCQkJXAogc3RhdGljIHNzaXplX3QgbmFtZSMjIF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwJXAogCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQkJCVwKIHsJCQkJCQkJCQlcCkBAIC00NSwxNCArNDUsMTkgQEAKIAkJCQkJCQkJCVwKIAlyZXR1cm4gbWFjODAyMTFfZm9ybWF0X2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgCQlcCiAJCQkJICAgICAgZm10ICJcbiIsICMjdmFsdWUpOwkJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKK30KKworI2RlZmluZSBERUJVR0ZTX1JFQURPTkxZX0ZJTEVfT1BTKG5hbWUpCQkJXAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmFtZSMjIF9vcHMgPSB7CQkJXAogCS5yZWFkID0gbmFtZSMjIF9yZWFkLAkJCQkJCVwKIAkub3BlbiA9IG1hYzgwMjExX29wZW5fZmlsZV9nZW5lcmljLAkJCQlcCiAJLmxsc2VlayA9IGdlbmVyaWNfZmlsZV9sbHNlZWssCQkJCQlcCiB9OwogCisjZGVmaW5lIERFQlVHRlNfUkVBRE9OTFlfRklMRShuYW1lLCBmbXQsIHZhbHVlLi4uKQkJXAorCURFQlVHRlNfUkVBRE9OTFlfRklMRV9GTihuYW1lLCBmbXQsIHZhbHVlKQkJXAorCURFQlVHRlNfUkVBRE9OTFlfRklMRV9PUFMobmFtZSkKKwogI2RlZmluZSBERUJVR0ZTX0FERChuYW1lKQkJCQkJCVwKIAlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCNuYW1lLCAwNDAwLCBwaHlkLCBsb2NhbCwgJm5hbWUjIyBfb3BzKTsKIApAQCAtMTMwLDcgKzEzNSw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKIAlydG5sX2xvY2soKTsKLQlfX2llZWU4MDIxMV9zdXNwZW5kKCZsb2NhbC0+aHcpOworCV9faWVlZTgwMjExX3N1c3BlbmQoJmxvY2FsLT5odywgTlVMTCk7CiAJX19pZWVlODAyMTFfcmVzdW1lKCZsb2NhbC0+aHcpOwogCXJ0bmxfdW5sb2NrKCk7CiAKQEAgLTI5MSwxMSArMjk2LDcwIEBACiAJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBzdHJsZW4oYnVmKSk7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNoYW5uZWxfdHlwZV9vcHMgPSB7Ci0JLnJlYWQgPSBjaGFubmVsX3R5cGVfcmVhZCwKLQkub3BlbiA9IG1hYzgwMjExX29wZW5fZmlsZV9nZW5lcmljLAotCS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywKLX07CitzdGF0aWMgc3NpemVfdCBod2ZsYWdzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgbXhsbiA9IDUwMDsKKwlzc2l6ZV90IHJ2OworCWNoYXIgKmJ1ZiA9IGt6YWxsb2MobXhsbiwgR0ZQX0tFUk5FTCk7CisJaW50IHNmID0gMDsgLyogaG93IG1hbnkgd3JpdHRlbiBzbyBmYXIgKi8KKworCXNmICs9IHNucHJpbnRmKGJ1ZiwgbXhsbiAtIHNmLCAiMHgleFxuIiwgbG9jYWwtPmh3LmZsYWdzKTsKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX0hBU19SQVRFX0NPTlRST0wpCisJCXNmICs9IHNucHJpbnRmKGJ1ZiArIHNmLCBteGxuIC0gc2YsICJIQVNfUkFURV9DT05UUk9MXG4iKTsKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUykKKwkJc2YgKz0gc25wcmludGYoYnVmICsgc2YsIG14bG4gLSBzZiwgIlJYX0lOQ0xVREVTX0ZDU1xuIik7CisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19IT1NUX0JST0FEQ0FTVF9QU19CVUZGRVJJTkcpCisJCXNmICs9IHNucHJpbnRmKGJ1ZiArIHNmLCBteGxuIC0gc2YsCisJCQkgICAgICAgIkhPU1RfQkNBU1RfUFNfQlVGRkVSSU5HXG4iKTsKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXXzJHSFpfU0hPUlRfU0xPVF9JTkNBUEFCTEUpCisJCXNmICs9IHNucHJpbnRmKGJ1ZiArIHNmLCBteGxuIC0gc2YsCisJCQkgICAgICAgIjJHSFpfU0hPUlRfU0xPVF9JTkNBUEFCTEVcbiIpOworCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfMkdIWl9TSE9SVF9QUkVBTUJMRV9JTkNBUEFCTEUpCisJCXNmICs9IHNucHJpbnRmKGJ1ZiArIHNmLCBteGxuIC0gc2YsCisJCQkgICAgICAgIjJHSFpfU0hPUlRfUFJFQU1CTEVfSU5DQVBBQkxFXG4iKTsKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9VTlNQRUMpCisJCXNmICs9IHNucHJpbnRmKGJ1ZiArIHNmLCBteGxuIC0gc2YsICJTSUdOQUxfVU5TUEVDXG4iKTsKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0pCisJCXNmICs9IHNucHJpbnRmKGJ1ZiArIHNmLCBteGxuIC0gc2YsICJTSUdOQUxfREJNXG4iKTsKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX05FRURfRFRJTV9QRVJJT0QpCisJCXNmICs9IHNucHJpbnRmKGJ1ZiArIHNmLCBteGxuIC0gc2YsICJORUVEX0RUSU1fUEVSSU9EXG4iKTsKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NQRUNUUlVNX01HTVQpCisJCXNmICs9IHNucHJpbnRmKGJ1ZiArIHNmLCBteGxuIC0gc2YsICJTUEVDVFJVTV9NR01UXG4iKTsKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OKQorCQlzZiArPSBzbnByaW50ZihidWYgKyBzZiwgbXhsbiAtIHNmLCAiQU1QRFVfQUdHUkVHQVRJT05cbiIpOworCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMpCisJCXNmICs9IHNucHJpbnRmKGJ1ZiArIHNmLCBteGxuIC0gc2YsICJTVVBQT1JUU19QU1xuIik7CisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSykKKwkJc2YgKz0gc25wcmludGYoYnVmICsgc2YsIG14bG4gLSBzZiwgIlBTX05VTExGVU5DX1NUQUNLXG4iKTsKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NVUFBPUlRTX0RZTkFNSUNfUFMpCisJCXNmICs9IHNucHJpbnRmKGJ1ZiArIHNmLCBteGxuIC0gc2YsICJTVVBQT1JUU19EWU5BTUlDX1BTXG4iKTsKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX01GUF9DQVBBQkxFKQorCQlzZiArPSBzbnByaW50ZihidWYgKyBzZiwgbXhsbiAtIHNmLCAiTUZQX0NBUEFCTEVcbiIpOworCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfQkVBQ09OX0ZJTFRFUikKKwkJc2YgKz0gc25wcmludGYoYnVmICsgc2YsIG14bG4gLSBzZiwgIkJFQUNPTl9GSUxURVJcbiIpOworCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1VQUE9SVFNfU1RBVElDX1NNUFMpCisJCXNmICs9IHNucHJpbnRmKGJ1ZiArIHNmLCBteGxuIC0gc2YsICJTVVBQT1JUU19TVEFUSUNfU01QU1xuIik7CisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1NNUFMpCisJCXNmICs9IHNucHJpbnRmKGJ1ZiArIHNmLCBteGxuIC0gc2YsICJTVVBQT1JUU19EWU5BTUlDX1NNUFNcbiIpOworCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1VQUE9SVFNfVUFQU0QpCisJCXNmICs9IHNucHJpbnRmKGJ1ZiArIHNmLCBteGxuIC0gc2YsICJTVVBQT1JUU19VQVBTRFxuIik7CisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19SRVBPUlRTX1RYX0FDS19TVEFUVVMpCisJCXNmICs9IHNucHJpbnRmKGJ1ZiArIHNmLCBteGxuIC0gc2YsICJSRVBPUlRTX1RYX0FDS19TVEFUVVNcbiIpOworCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfQ09OTkVDVElPTl9NT05JVE9SKQorCQlzZiArPSBzbnByaW50ZihidWYgKyBzZiwgbXhsbiAtIHNmLCAiQ09OTkVDVElPTl9NT05JVE9SXG4iKTsKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NVUFBPUlRTX0NRTV9SU1NJKQorCQlzZiArPSBzbnByaW50ZihidWYgKyBzZiwgbXhsbiAtIHNmLCAiU1VQUE9SVFNfQ1FNX1JTU0lcbiIpOworCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1VQUE9SVFNfUEVSX1NUQV9HVEspCisJCXNmICs9IHNucHJpbnRmKGJ1ZiArIHNmLCBteGxuIC0gc2YsICJTVVBQT1JUU19QRVJfU1RBX0dUS1xuIik7CisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19BUF9MSU5LX1BTKQorCQlzZiArPSBzbnByaW50ZihidWYgKyBzZiwgbXhsbiAtIHNmLCAiQVBfTElOS19QU1xuIik7CisKKwlydiA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBzdHJsZW4oYnVmKSk7CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcnY7Cit9CiAKIHN0YXRpYyBzc2l6ZV90IHF1ZXVlc19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKQEAgLTMxNSwxMSArMzc5LDkgQEAKIAlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHJlcyk7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHF1ZXVlc19vcHMgPSB7Ci0JLnJlYWQgPSBxdWV1ZXNfcmVhZCwKLQkub3BlbiA9IG1hYzgwMjExX29wZW5fZmlsZV9nZW5lcmljLAotCS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywKLX07CitERUJVR0ZTX1JFQURPTkxZX0ZJTEVfT1BTKGh3ZmxhZ3MpOworREVCVUdGU19SRUFET05MWV9GSUxFX09QUyhjaGFubmVsX3R5cGUpOworREVCVUdGU19SRUFET05MWV9GSUxFX09QUyhxdWV1ZXMpOwogCiAvKiBzdGF0aXN0aWNzIHN0dWZmICovCiAKQEAgLTM5NSw2ICs0NTcsNyBAQAogCURFQlVHRlNfQUREKHVhcHNkX3F1ZXVlcyk7CiAJREVCVUdGU19BREQodWFwc2RfbWF4X3NwX2xlbik7CiAJREVCVUdGU19BREQoY2hhbm5lbF90eXBlKTsKKwlERUJVR0ZTX0FERChod2ZsYWdzKTsKIAlERUJVR0ZTX0FERCh1c2VyX3Bvd2VyKTsKIAlERUJVR0ZTX0FERChwb3dlcik7CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5jIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmMKaW5kZXggZjdlZjM0Ny4uMzNjNThiOCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmMKKysrIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmMKQEAgLTI0MSwxNiArMjQxLDEyIEBACiAJaWYgKCFrZXktPmRlYnVnZnMuZGlyKQogCQlyZXR1cm47CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0Jc3RhID0gcmN1X2RlcmVmZXJlbmNlKGtleS0+c3RhKTsKLQlpZiAoc3RhKQorCXN0YSA9IGtleS0+c3RhOworCWlmIChzdGEpIHsKIAkJc3ByaW50ZihidWYsICIuLi8uLi9zdGF0aW9ucy8lcE0iLCBzdGEtPnN0YS5hZGRyKTsKLQlyY3VfcmVhZF91bmxvY2soKTsKLQotCS8qIHVzaW5nIHN0YSBhcyBhIGJvb2xlYW4gaXMgZmluZSBvdXRzaWRlIFJDVSBsb2NrICovCi0JaWYgKHN0YSkKIAkJa2V5LT5kZWJ1Z2ZzLnN0YWxpbmsgPQogCQkJZGVidWdmc19jcmVhdGVfc3ltbGluaygic3RhdGlvbiIsIGtleS0+ZGVidWdmcy5kaXIsIGJ1Zik7CisJfQogCiAJREVCVUdGU19BREQoa2V5bGVuKTsKIAlERUJVR0ZTX0FERChmbGFncyk7CkBAIC0yODYsNyArMjgyLDggQEAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZzZGF0YS0+bG9jYWwtPmtleV9tdHgpOwogCiAJaWYgKHNkYXRhLT5kZWZhdWx0X3VuaWNhc3Rfa2V5KSB7Ci0JCWtleSA9IHNkYXRhLT5kZWZhdWx0X3VuaWNhc3Rfa2V5OworCQlrZXkgPSBrZXlfbXR4X2RlcmVmZXJlbmNlKHNkYXRhLT5sb2NhbCwKKwkJCQkJICBzZGF0YS0+ZGVmYXVsdF91bmljYXN0X2tleSk7CiAJCXNwcmludGYoYnVmLCAiLi4va2V5cy8lZCIsIGtleS0+ZGVidWdmcy5jbnQpOwogCQlzZGF0YS0+ZGVidWdmcy5kZWZhdWx0X3VuaWNhc3Rfa2V5ID0KIAkJCWRlYnVnZnNfY3JlYXRlX3N5bWxpbmsoImRlZmF1bHRfdW5pY2FzdF9rZXkiLApAQCAtMjk3LDcgKzI5NCw4IEBACiAJfQogCiAJaWYgKHNkYXRhLT5kZWZhdWx0X211bHRpY2FzdF9rZXkpIHsKLQkJa2V5ID0gc2RhdGEtPmRlZmF1bHRfbXVsdGljYXN0X2tleTsKKwkJa2V5ID0ga2V5X210eF9kZXJlZmVyZW5jZShzZGF0YS0+bG9jYWwsCisJCQkJCSAgc2RhdGEtPmRlZmF1bHRfbXVsdGljYXN0X2tleSk7CiAJCXNwcmludGYoYnVmLCAiLi4va2V5cy8lZCIsIGtleS0+ZGVidWdmcy5jbnQpOwogCQlzZGF0YS0+ZGVidWdmcy5kZWZhdWx0X211bHRpY2FzdF9rZXkgPQogCQkJZGVidWdmc19jcmVhdGVfc3ltbGluaygiZGVmYXVsdF9tdWx0aWNhc3Rfa2V5IiwKQEAgLTMxNiw5ICszMTQsOCBAQAogCWlmICghc2RhdGEtPmRlYnVnZnMuZGlyKQogCQlyZXR1cm47CiAKLQkvKiB0aGlzIGlzIHJ1bm5pbmcgdW5kZXIgdGhlIGtleSBsb2NrICovCi0KLQlrZXkgPSBzZGF0YS0+ZGVmYXVsdF9tZ210X2tleTsKKwlrZXkgPSBrZXlfbXR4X2RlcmVmZXJlbmNlKHNkYXRhLT5sb2NhbCwKKwkJCQkgIHNkYXRhLT5kZWZhdWx0X21nbXRfa2V5KTsKIAlpZiAoa2V5KSB7CiAJCXNwcmludGYoYnVmLCAiLi4va2V5cy8lZCIsIGtleS0+ZGVidWdmcy5jbnQpOwogCQlzZGF0YS0+ZGVidWdmcy5kZWZhdWx0X21nbXRfa2V5ID0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5jIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMKaW5kZXggYzA0YTEzOS4uYTAxZDIxMyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMKKysrIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMKQEAgLTkyLDYgKzkyLDMxIEBACiB9CiBTVEFfT1BTKGluYWN0aXZlX21zKTsKIAorCitzdGF0aWMgc3NpemVfdCBzdGFfY29ubmVjdGVkX3RpbWVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCisJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBzdGFfaW5mbyAqc3RhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB0aW1lc3BlYyB1cHRpbWU7CisJc3RydWN0IHRtIHJlc3VsdDsKKwlsb25nIGNvbm5lY3RlZF90aW1lX3NlY3M7CisJY2hhciBidWZbMTAwXTsKKwlpbnQgcmVzOworCWRvX3Bvc2l4X2Nsb2NrX21vbm90b25pY19nZXR0aW1lKCZ1cHRpbWUpOworCWNvbm5lY3RlZF90aW1lX3NlY3MgPSB1cHRpbWUudHZfc2VjIC0gc3RhLT5sYXN0X2Nvbm5lY3RlZDsKKwl0aW1lX3RvX3RtKGNvbm5lY3RlZF90aW1lX3NlY3MsIDAsICZyZXN1bHQpOworCXJlc3VsdC50bV95ZWFyIC09IDcwOworCXJlc3VsdC50bV9tZGF5IC09IDE7CisJcmVzID0gc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksCisJCSJ5ZWFycyAgLSAlbGRcbm1vbnRocyAtICVkXG5kYXlzICAgLSAlZFxuY2xvY2sgIC0gJWQ6JWQ6JWRcblxuIiwKKwkJCXJlc3VsdC50bV95ZWFyLCByZXN1bHQudG1fbW9uLCByZXN1bHQudG1fbWRheSwKKwkJCXJlc3VsdC50bV9ob3VyLCByZXN1bHQudG1fbWluLCByZXN1bHQudG1fc2VjKTsKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcmVzKTsKK30KK1NUQV9PUFMoY29ubmVjdGVkX3RpbWUpOworCisKKwogc3RhdGljIHNzaXplX3Qgc3RhX2xhc3Rfc2VxX2N0cmxfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCiAJCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CkBAIC0zMjQsNiArMzQ5LDcgQEAKIAlERUJVR0ZTX0FERChmbGFncyk7CiAJREVCVUdGU19BREQobnVtX3BzX2J1Zl9mcmFtZXMpOwogCURFQlVHRlNfQUREKGluYWN0aXZlX21zKTsKKwlERUJVR0ZTX0FERChjb25uZWN0ZWRfdGltZSk7CiAJREVCVUdGU19BREQobGFzdF9zZXFfY3RybCk7CiAJREVCVUdGU19BREQoYWdnX3N0YXR1cyk7CiAJREVCVUdGU19BREQoZGV2KTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmggYi9uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oCmluZGV4IDljMGQ2MmIuLmVlYmY3YTYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmgKKysrIGIvbmV0L21hYzgwMjExL2RyaXZlci1vcHMuaApAQCAtNDEsNiArNDEsMzMgQEAKIAlsb2NhbC0+c3RhcnRlZCA9IGZhbHNlOwogfQogCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW5saW5lIGludCBkcnZfc3VzcGVuZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCSAgICAgIHN0cnVjdCBjZmc4MDIxMV93b3dsYW4gKndvd2xhbikKK3sKKwlpbnQgcmV0OworCisJbWlnaHRfc2xlZXAoKTsKKworCXRyYWNlX2Rydl9zdXNwZW5kKGxvY2FsKTsKKwlyZXQgPSBsb2NhbC0+b3BzLT5zdXNwZW5kKCZsb2NhbC0+aHcsIHdvd2xhbik7CisJdHJhY2VfZHJ2X3JldHVybl9pbnQobG9jYWwsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZHJ2X3Jlc3VtZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKK3sKKwlpbnQgcmV0OworCisJbWlnaHRfc2xlZXAoKTsKKworCXRyYWNlX2Rydl9yZXN1bWUobG9jYWwpOworCXJldCA9IGxvY2FsLT5vcHMtPnJlc3VtZSgmbG9jYWwtPmh3KTsKKwl0cmFjZV9kcnZfcmV0dXJuX2ludChsb2NhbCwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCisKIHN0YXRpYyBpbmxpbmUgaW50IGRydl9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewpAQCAtMTg1LDEyICsyMTIsMzkgQEAKIAogCW1pZ2h0X3NsZWVwKCk7CiAKLQl0cmFjZV9kcnZfaHdfc2Nhbihsb2NhbCwgc2RhdGEsIHJlcSk7CisJdHJhY2VfZHJ2X2h3X3NjYW4obG9jYWwsIHNkYXRhKTsKIAlyZXQgPSBsb2NhbC0+b3BzLT5od19zY2FuKCZsb2NhbC0+aHcsICZzZGF0YS0+dmlmLCByZXEpOwogCXRyYWNlX2Rydl9yZXR1cm5faW50KGxvY2FsLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50CitkcnZfc2NoZWRfc2Nhbl9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJICAgICBzdHJ1Y3QgY2ZnODAyMTFfc2NoZWRfc2Nhbl9yZXF1ZXN0ICpyZXEsCisJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zY2hlZF9zY2FuX2llcyAqaWVzKQoreworCWludCByZXQ7CisKKwltaWdodF9zbGVlcCgpOworCisJdHJhY2VfZHJ2X3NjaGVkX3NjYW5fc3RhcnQobG9jYWwsIHNkYXRhKTsKKwlyZXQgPSBsb2NhbC0+b3BzLT5zY2hlZF9zY2FuX3N0YXJ0KCZsb2NhbC0+aHcsICZzZGF0YS0+dmlmLAorCQkJCQkgICAgICByZXEsIGllcyk7CisJdHJhY2VfZHJ2X3JldHVybl9pbnQobG9jYWwsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRydl9zY2hlZF9zY2FuX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCW1pZ2h0X3NsZWVwKCk7CisKKwl0cmFjZV9kcnZfc2NoZWRfc2Nhbl9zdG9wKGxvY2FsLCBzZGF0YSk7CisJbG9jYWwtPm9wcy0+c2NoZWRfc2Nhbl9zdG9wKCZsb2NhbC0+aHcsICZzZGF0YS0+dmlmKTsKKwl0cmFjZV9kcnZfcmV0dXJuX3ZvaWQobG9jYWwpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgZHJ2X3N3X3NjYW5fc3RhcnQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7CiAJbWlnaHRfc2xlZXAoKTsKQEAgLTU1Miw0ICs2MDYsMzUgQEAKIAl0cmFjZV9kcnZfcmV0dXJuX3ZvaWQobG9jYWwpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgZHJ2X3R4X2ZyYW1lc19wZW5kaW5nKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQoreworCWJvb2wgcmV0ID0gZmFsc2U7CisKKwltaWdodF9zbGVlcCgpOworCisJdHJhY2VfZHJ2X3R4X2ZyYW1lc19wZW5kaW5nKGxvY2FsKTsKKwlpZiAobG9jYWwtPm9wcy0+dHhfZnJhbWVzX3BlbmRpbmcpCisJCXJldCA9IGxvY2FsLT5vcHMtPnR4X2ZyYW1lc19wZW5kaW5nKCZsb2NhbC0+aHcpOworCXRyYWNlX2Rydl9yZXR1cm5fYm9vbChsb2NhbCwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRydl9zZXRfYml0cmF0ZV9tYXNrKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGNmZzgwMjExX2JpdHJhdGVfbWFzayAqbWFzaykKK3sKKwlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7CisKKwltaWdodF9zbGVlcCgpOworCisJdHJhY2VfZHJ2X3NldF9iaXRyYXRlX21hc2sobG9jYWwsIHNkYXRhLCBtYXNrKTsKKwlpZiAobG9jYWwtPm9wcy0+c2V0X2JpdHJhdGVfbWFzaykKKwkJcmV0ID0gbG9jYWwtPm9wcy0+c2V0X2JpdHJhdGVfbWFzaygmbG9jYWwtPmh3LAorCQkJCQkJICAgJnNkYXRhLT52aWYsIG1hc2spOworCXRyYWNlX2Rydl9yZXR1cm5faW50KGxvY2FsLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKwogI2VuZGlmIC8qIF9fTUFDODAyMTFfRFJJVkVSX09QUyAqLwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RyaXZlci10cmFjZS5oIGIvbmV0L21hYzgwMjExL2RyaXZlci10cmFjZS5oCmluZGV4IDQ1YWFiODAuLmVkOWVkY2IgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kcml2ZXItdHJhY2UuaAorKysgYi9uZXQvbWFjODAyMTEvZHJpdmVyLXRyYWNlLmgKQEAgLTU1LDYgKzU1LDcwIEBACiAJVFBfcHJpbnRrKExPQ0FMX1BSX0ZNVCwgTE9DQUxfUFJfQVJHKQogKTsKIAorREVDTEFSRV9FVkVOVF9DTEFTUyhsb2NhbF9zZGF0YV9hZGRyX2V2dCwKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKSwKKwlUUF9BUkdTKGxvY2FsLCBzZGF0YSksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlMT0NBTF9FTlRSWQorCQlWSUZfRU5UUlkKKwkJX19hcnJheShjaGFyLCBhZGRyLCA2KQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJTE9DQUxfQVNTSUdOOworCQlWSUZfQVNTSUdOOworCQltZW1jcHkoX19lbnRyeS0+YWRkciwgc2RhdGEtPnZpZi5hZGRyLCA2KTsKKwkpLAorCisJVFBfcHJpbnRrKAorCQlMT0NBTF9QUl9GTVQgIFZJRl9QUl9GTVQgIiBhZGRyOiVwTSIsCisJCUxPQ0FMX1BSX0FSRywgVklGX1BSX0FSRywgX19lbnRyeS0+YWRkcgorCSkKKyk7CisKK0RFQ0xBUkVfRVZFTlRfQ0xBU1MobG9jYWxfdTMyX2V2dCwKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTMyIHZhbHVlKSwKKwlUUF9BUkdTKGxvY2FsLCB2YWx1ZSksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlMT0NBTF9FTlRSWQorCQlfX2ZpZWxkKHUzMiwgdmFsdWUpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlMT0NBTF9BU1NJR047CisJCV9fZW50cnktPnZhbHVlID0gdmFsdWU7CisJKSwKKworCVRQX3ByaW50aygKKwkJTE9DQUxfUFJfRk1UICIgdmFsdWU6JWQiLAorCQlMT0NBTF9QUl9BUkcsIF9fZW50cnktPnZhbHVlCisJKQorKTsKKworREVDTEFSRV9FVkVOVF9DTEFTUyhsb2NhbF9zZGF0YV9ldnQsCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCSBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSksCisJVFBfQVJHUyhsb2NhbCwgc2RhdGEpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJTE9DQUxfRU5UUlkKKwkJVklGX0VOVFJZCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlMT0NBTF9BU1NJR047CisJCVZJRl9BU1NJR047CisJKSwKKworCVRQX3ByaW50aygKKwkJTE9DQUxfUFJfRk1UIFZJRl9QUl9GTVQsCisJCUxPQ0FMX1BSX0FSRywgVklGX1BSX0FSRworCSkKKyk7CisKIERFRklORV9FVkVOVChsb2NhbF9vbmx5X2V2dCwgZHJ2X3JldHVybl92b2lkLAogCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKSwKIAlUUF9BUkdTKGxvY2FsKQpAQCAtNzQsNiArMTM4LDIxIEBACiAJVFBfcHJpbnRrKExPQ0FMX1BSX0ZNVCAiIC0gJWQiLCBMT0NBTF9QUl9BUkcsIF9fZW50cnktPnJldCkKICk7CiAKK1RSQUNFX0VWRU5UKGRydl9yZXR1cm5fYm9vbCwKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgYm9vbCByZXQpLAorCVRQX0FSR1MobG9jYWwsIHJldCksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJTE9DQUxfRU5UUlkKKwkJX19maWVsZChib29sLCByZXQpCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJTE9DQUxfQVNTSUdOOworCQlfX2VudHJ5LT5yZXQgPSByZXQ7CisJKSwKKwlUUF9wcmludGsoTE9DQUxfUFJfRk1UICIgLSAlcyIsIExPQ0FMX1BSX0FSRywgKF9fZW50cnktPnJldCkgPworCQkgICJ0cnVlIiA6ICJmYWxzZSIpCispOworCiBUUkFDRV9FVkVOVChkcnZfcmV0dXJuX3U2NCwKIAlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTY0IHJldCksCiAJVFBfQVJHUyhsb2NhbCwgcmV0KSwKQEAgLTkzLDMzICsxNzIsMjUgQEAKIAlUUF9BUkdTKGxvY2FsKQogKTsKIAorREVGSU5FX0VWRU5UKGxvY2FsX29ubHlfZXZ0LCBkcnZfc3VzcGVuZCwKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCksCisJVFBfQVJHUyhsb2NhbCkKKyk7CisKK0RFRklORV9FVkVOVChsb2NhbF9vbmx5X2V2dCwgZHJ2X3Jlc3VtZSwKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCksCisJVFBfQVJHUyhsb2NhbCkKKyk7CisKIERFRklORV9FVkVOVChsb2NhbF9vbmx5X2V2dCwgZHJ2X3N0b3AsCiAJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpLAogCVRQX0FSR1MobG9jYWwpCiApOwogCi1UUkFDRV9FVkVOVChkcnZfYWRkX2ludGVyZmFjZSwKK0RFRklORV9FVkVOVChsb2NhbF9zZGF0YV9hZGRyX2V2dCwgZHJ2X2FkZF9pbnRlcmZhY2UsCiAJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCSBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSksCi0KLQlUUF9BUkdTKGxvY2FsLCBzZGF0YSksCi0KLQlUUF9TVFJVQ1RfX2VudHJ5KAotCQlMT0NBTF9FTlRSWQotCQlWSUZfRU5UUlkKLQkJX19hcnJheShjaGFyLCBhZGRyLCA2KQotCSksCi0KLQlUUF9mYXN0X2Fzc2lnbigKLQkJTE9DQUxfQVNTSUdOOwotCQlWSUZfQVNTSUdOOwotCQltZW1jcHkoX19lbnRyeS0+YWRkciwgc2RhdGEtPnZpZi5hZGRyLCA2KTsKLQkpLAotCi0JVFBfcHJpbnRrKAotCQlMT0NBTF9QUl9GTVQgIFZJRl9QUl9GTVQgIiBhZGRyOiVwTSIsCi0JCUxPQ0FMX1BSX0FSRywgVklGX1BSX0FSRywgX19lbnRyeS0+YWRkcgotCSkKKwlUUF9BUkdTKGxvY2FsLCBzZGF0YSkKICk7CiAKIFRSQUNFX0VWRU5UKGRydl9jaGFuZ2VfaW50ZXJmYWNlLApAQCAtMTUwLDI3ICsyMjEsMTAgQEAKIAkpCiApOwogCi1UUkFDRV9FVkVOVChkcnZfcmVtb3ZlX2ludGVyZmFjZSwKLQlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpLAotCi0JVFBfQVJHUyhsb2NhbCwgc2RhdGEpLAotCi0JVFBfU1RSVUNUX19lbnRyeSgKLQkJTE9DQUxfRU5UUlkKLQkJVklGX0VOVFJZCi0JCV9fYXJyYXkoY2hhciwgYWRkciwgNikKLQkpLAotCi0JVFBfZmFzdF9hc3NpZ24oCi0JCUxPQ0FMX0FTU0lHTjsKLQkJVklGX0FTU0lHTjsKLQkJbWVtY3B5KF9fZW50cnktPmFkZHIsIHNkYXRhLT52aWYuYWRkciwgNik7Ci0JKSwKLQotCVRQX3ByaW50aygKLQkJTE9DQUxfUFJfRk1UICBWSUZfUFJfRk1UICIgYWRkcjolcE0iLAotCQlMT0NBTF9QUl9BUkcsIFZJRl9QUl9BUkcsIF9fZW50cnktPmFkZHIKLQkpCitERUZJTkVfRVZFTlQobG9jYWxfc2RhdGFfYWRkcl9ldnQsIGRydl9yZW1vdmVfaW50ZXJmYWNlLAorCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpLAorCVRQX0FSR1MobG9jYWwsIHNkYXRhKQogKTsKIAogVFJBQ0VfRVZFTlQoZHJ2X2NvbmZpZywKQEAgLTQwMCwyNyArNDU0LDIyIEBACiAJKQogKTsKIAotVFJBQ0VfRVZFTlQoZHJ2X2h3X3NjYW4sCitERUZJTkVfRVZFTlQobG9jYWxfc2RhdGFfZXZ0LCBkcnZfaHdfc2NhbiwKIAlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKSwKKwkJIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKSwKKwlUUF9BUkdTKGxvY2FsLCBzZGF0YSkKKyk7CiAKLQlUUF9BUkdTKGxvY2FsLCBzZGF0YSwgcmVxKSwKK0RFRklORV9FVkVOVChsb2NhbF9zZGF0YV9ldnQsIGRydl9zY2hlZF9zY2FuX3N0YXJ0LAorCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpLAorCVRQX0FSR1MobG9jYWwsIHNkYXRhKQorKTsKIAotCVRQX1NUUlVDVF9fZW50cnkoCi0JCUxPQ0FMX0VOVFJZCi0JCVZJRl9FTlRSWQotCSksCi0KLQlUUF9mYXN0X2Fzc2lnbigKLQkJTE9DQUxfQVNTSUdOOwotCQlWSUZfQVNTSUdOOwotCSksCi0KLQlUUF9wcmludGsoCi0JCUxPQ0FMX1BSX0ZNVCBWSUZfUFJfRk1ULAotCQlMT0NBTF9QUl9BUkcsVklGX1BSX0FSRwotCSkKK0RFRklORV9FVkVOVChsb2NhbF9zZGF0YV9ldnQsIGRydl9zY2hlZF9zY2FuX3N0b3AsCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCSBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSksCisJVFBfQVJHUyhsb2NhbCwgc2RhdGEpCiApOwogCiBERUZJTkVfRVZFTlQobG9jYWxfb25seV9ldnQsIGRydl9zd19zY2FuX3N0YXJ0LApAQCAtNDg5LDQ2ICs1MzgsMTQgQEAKIAkpCiApOwogCi1UUkFDRV9FVkVOVChkcnZfc2V0X2ZyYWdfdGhyZXNob2xkLAorREVGSU5FX0VWRU5UKGxvY2FsX3UzMl9ldnQsIGRydl9zZXRfZnJhZ190aHJlc2hvbGQsCiAJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHUzMiB2YWx1ZSksCi0KLQlUUF9BUkdTKGxvY2FsLCB2YWx1ZSksCi0KLQlUUF9TVFJVQ1RfX2VudHJ5KAotCQlMT0NBTF9FTlRSWQotCQlfX2ZpZWxkKHUzMiwgdmFsdWUpCi0JKSwKLQotCVRQX2Zhc3RfYXNzaWduKAotCQlMT0NBTF9BU1NJR047Ci0JCV9fZW50cnktPnZhbHVlID0gdmFsdWU7Ci0JKSwKLQotCVRQX3ByaW50aygKLQkJTE9DQUxfUFJfRk1UICIgdmFsdWU6JWQiLAotCQlMT0NBTF9QUl9BUkcsIF9fZW50cnktPnZhbHVlCi0JKQorCVRQX0FSR1MobG9jYWwsIHZhbHVlKQogKTsKIAotVFJBQ0VfRVZFTlQoZHJ2X3NldF9ydHNfdGhyZXNob2xkLAorREVGSU5FX0VWRU5UKGxvY2FsX3UzMl9ldnQsIGRydl9zZXRfcnRzX3RocmVzaG9sZCwKIAlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTMyIHZhbHVlKSwKLQotCVRQX0FSR1MobG9jYWwsIHZhbHVlKSwKLQotCVRQX1NUUlVDVF9fZW50cnkoCi0JCUxPQ0FMX0VOVFJZCi0JCV9fZmllbGQodTMyLCB2YWx1ZSkKLQkpLAotCi0JVFBfZmFzdF9hc3NpZ24oCi0JCUxPQ0FMX0FTU0lHTjsKLQkJX19lbnRyeS0+dmFsdWUgPSB2YWx1ZTsKLQkpLAotCi0JVFBfcHJpbnRrKAotCQlMT0NBTF9QUl9GTVQgIiB2YWx1ZTolZCIsCi0JCUxPQ0FMX1BSX0FSRywgX19lbnRyeS0+dmFsdWUKLQkpCisJVFBfQVJHUyhsb2NhbCwgdmFsdWUpCiApOwogCiBUUkFDRV9FVkVOVChkcnZfc2V0X2NvdmVyYWdlX2NsYXNzLApAQCAtOTY0LDExICs5ODEsNDMgQEAKIAkpCiApOwogCitERUZJTkVfRVZFTlQobG9jYWxfb25seV9ldnQsIGRydl90eF9mcmFtZXNfcGVuZGluZywKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCksCisJVFBfQVJHUyhsb2NhbCkKKyk7CisKIERFRklORV9FVkVOVChsb2NhbF9vbmx5X2V2dCwgZHJ2X29mZmNoYW5uZWxfdHhfY2FuY2VsX3dhaXQsCiAJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpLAogCVRQX0FSR1MobG9jYWwpCiApOwogCitUUkFDRV9FVkVOVChkcnZfc2V0X2JpdHJhdGVfbWFzaywKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkgY29uc3Qgc3RydWN0IGNmZzgwMjExX2JpdHJhdGVfbWFzayAqbWFzayksCisKKwlUUF9BUkdTKGxvY2FsLCBzZGF0YSwgbWFzayksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlMT0NBTF9FTlRSWQorCQlWSUZfRU5UUlkKKwkJX19maWVsZCh1MzIsIGxlZ2FjeV8yZykKKwkJX19maWVsZCh1MzIsIGxlZ2FjeV81ZykKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCUxPQ0FMX0FTU0lHTjsKKwkJVklGX0FTU0lHTjsKKwkJX19lbnRyeS0+bGVnYWN5XzJnID0gbWFzay0+Y29udHJvbFtJRUVFODAyMTFfQkFORF8yR0haXS5sZWdhY3k7CisJCV9fZW50cnktPmxlZ2FjeV81ZyA9IG1hc2stPmNvbnRyb2xbSUVFRTgwMjExX0JBTkRfNUdIWl0ubGVnYWN5OworCSksCisKKwlUUF9wcmludGsoCisJCUxPQ0FMX1BSX0ZNVCAgVklGX1BSX0ZNVCAiIDJHIE1hc2s6MHgleCA1RyBNYXNrOjB4JXgiLAorCQlMT0NBTF9QUl9BUkcsIFZJRl9QUl9BUkcsIF9fZW50cnktPmxlZ2FjeV8yZywgX19lbnRyeS0+bGVnYWN5XzVnCisJKQorKTsKKwogLyoKICAqIFRyYWNpbmcgZm9yIEFQSSBjYWxscyB0aGF0IGRyaXZlcnMgY2FsbC4KICAqLwpAQCAtMTE0Nyw2ICsxMTk2LDQyIEBACiAJKQogKTsKIAorVFJBQ0VfRVZFTlQoYXBpX3NjaGVkX3NjYW5fcmVzdWx0cywKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCksCisKKwlUUF9BUkdTKGxvY2FsKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCUxPQ0FMX0VOVFJZCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlMT0NBTF9BU1NJR047CisJKSwKKworCVRQX3ByaW50aygKKwkJTE9DQUxfUFJfRk1ULCBMT0NBTF9QUl9BUkcKKwkpCispOworCitUUkFDRV9FVkVOVChhcGlfc2NoZWRfc2Nhbl9zdG9wcGVkLAorCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKSwKKworCVRQX0FSR1MobG9jYWwpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJTE9DQUxfRU5UUlkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCUxPQ0FMX0FTU0lHTjsKKwkpLAorCisJVFBfcHJpbnRrKAorCQlMT0NBTF9QUl9GTVQsIExPQ0FMX1BSX0FSRworCSkKKyk7CisKIFRSQUNFX0VWRU5UKGFwaV9zdGFfYmxvY2tfYXdha2UsCiAJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCBib29sIGJsb2NrKSwKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9odC5jIGIvbmV0L21hYzgwMjExL2h0LmMKaW5kZXggYjllNGI5Yi4uNTkxYWRkMiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2h0LmMKKysrIGIvbmV0L21hYzgwMjExL2h0LmMKQEAgLTE0MCwxNCArMTQwLDI5IEBACiAJCQkJc3RhLCB0aWQsIFdMQU5fQkFDS19SRUNJUElFTlQsCiAJCQkJV0xBTl9SRUFTT05fUVNUQV9USU1FT1VULCB0cnVlKTsKIAotCQl0aWRfdHggPSBzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF07Ci0JCWlmICghdGlkX3R4KQotCQkJY29udGludWU7CisJCXRpZF90eCA9IHN0YS0+YW1wZHVfbWxtZS50aWRfc3RhcnRfdHhbdGlkXTsKKwkJaWYgKHRpZF90eCkgeworCQkJLyoKKwkJCSAqIEFzc2lnbiBpdCBvdmVyIHRvIHRoZSBub3JtYWwgdGlkX3R4IGFycmF5CisJCQkgKiB3aGVyZSBpdCAiZ29lcyBsaXZlIi4KKwkJCSAqLworCQkJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwogCi0JCWlmICh0ZXN0X2JpdChIVF9BR0dfU1RBVEVfV0FOVF9TVEFSVCwgJnRpZF90eC0+c3RhdGUpKQorCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGFydF90eFt0aWRdID0gTlVMTDsKKwkJCS8qIGNvdWxkIHRoZXJlIGJlIGEgcmFjZT8gKi8KKwkJCWlmIChzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0pCisJCQkJa2ZyZWUodGlkX3R4KTsKKwkJCWVsc2UKKwkJCQlpZWVlODAyMTFfYXNzaWduX3RpZF90eChzdGEsIHRpZCwgdGlkX3R4KTsKKwkJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworCiAJCQlpZWVlODAyMTFfdHhfYmFfc2Vzc2lvbl9oYW5kbGVfc3RhcnQoc3RhLCB0aWQpOwotCQllbHNlIGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSFRfQUdHX1NUQVRFX1dBTlRfU1RPUCwKLQkJCQkJICAgICZ0aWRfdHgtPnN0YXRlKSkKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJdGlkX3R4ID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZF90aWRfdHgoc3RhLCB0aWQpOworCQlpZiAodGlkX3R4ICYmIHRlc3RfYW5kX2NsZWFyX2JpdChIVF9BR0dfU1RBVEVfV0FOVF9TVE9QLAorCQkJCQkJICZ0aWRfdHgtPnN0YXRlKSkKIAkJCV9fX2llZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oc3RhLCB0aWQsCiAJCQkJCQkJV0xBTl9CQUNLX0lOSVRJQVRPUiwKIAkJCQkJCQl0cnVlKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pYnNzLmMgYi9uZXQvbWFjODAyMTEvaWJzcy5jCmluZGV4IDNlODFhZjEuLjQyMWVhYTYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pYnNzLmMKKysrIGIvbmV0L21hYzgwMjExL2lic3MuYwpAQCAtNDAsNyArNDAsNyBAQAogCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkJCXNpemVfdCBsZW4pCiB7Ci0JdTE2IGF1dGhfYWxnLCBhdXRoX3RyYW5zYWN0aW9uLCBzdGF0dXNfY29kZTsKKwl1MTYgYXV0aF9hbGcsIGF1dGhfdHJhbnNhY3Rpb247CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZzZGF0YS0+dS5pYnNzLm10eCk7CiAKQEAgLTQ5LDcgKzQ5LDYgQEAKIAogCWF1dGhfYWxnID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLmF1dGhfYWxnKTsKIAlhdXRoX3RyYW5zYWN0aW9uID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLmF1dGhfdHJhbnNhY3Rpb24pOwotCXN0YXR1c19jb2RlID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLnN0YXR1c19jb2RlKTsKIAogCS8qCiAJICogSUVFRSA4MDIuMTEgc3RhbmRhcmQgZG9lcyBub3QgcmVxdWlyZSBhdXRoZW50aWNhdGlvbiBpbiBJQlNTCkBAIC01MjcsOCArNTI2LDYgQEAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfY3JlYXRlX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAl1OCBic3NpZFtFVEhfQUxFTl07CiAJdTE2IGNhcGFiaWxpdHk7CiAJaW50IGk7CkBAIC01NTEsOCArNTQ4LDYgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IENyZWF0aW5nIG5ldyBJQlNTIG5ldHdvcmssIEJTU0lEICVwTVxuIiwKIAkgICAgICAgc2RhdGEtPm5hbWUsIGJzc2lkKTsKIAotCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tpZmlic3MtPmNoYW5uZWwtPmJhbmRdOwotCiAJY2FwYWJpbGl0eSA9IFdMQU5fQ0FQQUJJTElUWV9JQlNTOwogCiAJaWYgKGlmaWJzcy0+cHJpdmFjeSkKQEAgLTY2MSwxOSArNjU2LDIyIEBACiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJCXN0cnVjdCBza19idWZmICpyZXEpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihyZXEpOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9ICh2b2lkICopcmVxLT5kYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJaW50IHR4X2xhc3RfYmVhY29uLCBsZW4gPSByZXEtPmxlbjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqcmVzcDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqcHJlc3A7CiAJdTggKnBvcywgKmVuZDsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmlmaWJzcy0+bXR4KTsKIAorCXByZXNwID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChpZmlic3MtPnByZXNwLAorCQkJCQkgIGxvY2tkZXBfaXNfaGVsZCgmaWZpYnNzLT5tdHgpKTsKKwogCWlmIChpZmlic3MtPnN0YXRlICE9IElFRUU4MDIxMV9JQlNTX01MTUVfSk9JTkVEIHx8Ci0JICAgIGxlbiA8IDI0ICsgMiB8fCAhaWZpYnNzLT5wcmVzcCkKKwkgICAgbGVuIDwgMjQgKyAyIHx8ICFwcmVzcCkKIAkJcmV0dXJuOwogCiAJdHhfbGFzdF9iZWFjb24gPSBkcnZfdHhfbGFzdF9iZWFjb24obG9jYWwpOwpAQCAtNjg1LDcgKzY4Myw3IEBACiAJICAgICAgIG1nbXQtPmJzc2lkLCB0eF9sYXN0X2JlYWNvbik7CiAjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KIAotCWlmICghdHhfbGFzdF9iZWFjb24gJiYgIShyeF9zdGF0dXMtPnJ4X2ZsYWdzICYgSUVFRTgwMjExX1JYX1JBX01BVENIKSkKKwlpZiAoIXR4X2xhc3RfYmVhY29uICYmIGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKG1nbXQtPmRhKSkKIAkJcmV0dXJuOwogCiAJaWYgKG1lbWNtcChtZ210LT5ic3NpZCwgaWZpYnNzLT5ic3NpZCwgRVRIX0FMRU4pICE9IDAgJiYKQEAgLTcxMSw3ICs3MDksNyBAQAogCX0KIAogCS8qIFJlcGx5IHdpdGggUHJvYmVSZXNwICovCi0Jc2tiID0gc2tiX2NvcHkoaWZpYnNzLT5wcmVzcCwgR0ZQX0tFUk5FTCk7CisJc2tiID0gc2tiX2NvcHkocHJlc3AsIEdGUF9LRVJORUwpOwogCWlmICghc2tiKQogCQlyZXR1cm47CiAKQEAgLTk5MSw3ICs5ODksOCBAQAogCiAJLyogcmVtb3ZlIGJlYWNvbiAqLwogCWtmcmVlKHNkYXRhLT51Lmlic3MuaWUpOwotCXNrYiA9IHNkYXRhLT51Lmlic3MucHJlc3A7CisJc2tiID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzZGF0YS0+dS5pYnNzLnByZXNwLAorCQkJCQlsb2NrZGVwX2lzX2hlbGQoJnNkYXRhLT51Lmlic3MubXR4KSk7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKHNkYXRhLT51Lmlic3MucHJlc3AsIE5VTEwpOwogCXNkYXRhLT52aWYuYnNzX2NvbmYuaWJzc19qb2luZWQgPSBmYWxzZTsKIAlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzZGF0YSwgQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQgfApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAppbmRleCBjMTgzOTZjLi4yMDI1YWY1IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAorKysgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaApAQCAtMjE0LDcgKzIxNCw3IEBACiB9OwogCiBzdHJ1Y3QgaWVlZTgwMjExX2lmX2FwIHsKLQlzdHJ1Y3QgYmVhY29uX2RhdGEgKmJlYWNvbjsKKwlzdHJ1Y3QgYmVhY29uX2RhdGEgX19yY3UgKmJlYWNvbjsKIAogCXN0cnVjdCBsaXN0X2hlYWQgdmxhbnM7CiAKQEAgLTIzNyw3ICsyMzcsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAogCS8qIHVzZWQgZm9yIGFsbCB0eCBpZiB0aGUgVkxBTiBpcyBjb25maWd1cmVkIHRvIDQtYWRkciBtb2RlICovCi0Jc3RydWN0IHN0YV9pbmZvICpzdGE7CisJc3RydWN0IHN0YV9pbmZvIF9fcmN1ICpzdGE7CiB9OwogCiBzdHJ1Y3QgbWVzaF9zdGF0cyB7CkBAIC00NDIsNyArNDQyLDggQEAKIAogCXVuc2lnbmVkIGxvbmcgaWJzc19qb2luX3JlcTsKIAkvKiBwcm9iZSByZXNwb25zZS9iZWFjb24gZm9yIElCU1MgKi8KLQlzdHJ1Y3Qgc2tfYnVmZiAqcHJlc3AsICpza2I7CisJc3RydWN0IHNrX2J1ZmYgX19yY3UgKnByZXNwOworCXN0cnVjdCBza19idWZmICpza2I7CiAKIAllbnVtIHsKIAkJSUVFRTgwMjExX0lCU1NfTUxNRV9TRUFSQ0gsCkBAIC00ODgsOCArNDg5LDEzIEBACiAJc3RydWN0IG1lc2hfY29uZmlnIG1zaGNmZzsKIAl1MzIgbWVzaF9zZXFudW07CiAJYm9vbCBhY2NlcHRpbmdfcGxpbmtzOwotCWNvbnN0IHU4ICp2ZW5kb3JfaWU7Ci0JdTggdmVuZG9yX2llX2xlbjsKKwljb25zdCB1OCAqaWU7CisJdTggaWVfbGVuOworCWVudW0geworCQlJRUVFODAyMTFfTUVTSF9TRUNfTk9ORSA9IDB4MCwKKwkJSUVFRTgwMjExX01FU0hfU0VDX0FVVEhFRCA9IDB4MSwKKwkJSUVFRTgwMjExX01FU0hfU0VDX1NFQ1VSRUQgPSAweDIsCisJfSBzZWN1cml0eTsKIH07CiAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSApAQCAtNTYyLDkgKzU2OCwxMCBAQAogCXN0cnVjdCBpZWVlODAyMTFfZnJhZ21lbnRfZW50cnkJZnJhZ21lbnRzW0lFRUU4MDIxMV9GUkFHTUVOVF9NQVhdOwogCXVuc2lnbmVkIGludCBmcmFnbWVudF9uZXh0OwogCi0Jc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleXNbTlVNX0RFRkFVTFRfS0VZUyArIE5VTV9ERUZBVUxUX01HTVRfS0VZU107Ci0Jc3RydWN0IGllZWU4MDIxMV9rZXkgKmRlZmF1bHRfdW5pY2FzdF9rZXksICpkZWZhdWx0X211bHRpY2FzdF9rZXk7Ci0Jc3RydWN0IGllZWU4MDIxMV9rZXkgKmRlZmF1bHRfbWdtdF9rZXk7CisJc3RydWN0IGllZWU4MDIxMV9rZXkgX19yY3UgKmtleXNbTlVNX0RFRkFVTFRfS0VZUyArIE5VTV9ERUZBVUxUX01HTVRfS0VZU107CisJc3RydWN0IGllZWU4MDIxMV9rZXkgX19yY3UgKmRlZmF1bHRfdW5pY2FzdF9rZXk7CisJc3RydWN0IGllZWU4MDIxMV9rZXkgX19yY3UgKmRlZmF1bHRfbXVsdGljYXN0X2tleTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2tleSBfX3JjdSAqZGVmYXVsdF9tZ210X2tleTsKIAogCXUxNiBzZXF1ZW5jZV9udW1iZXI7CiAJX19iZTE2IGNvbnRyb2xfcG9ydF9wcm90b2NvbDsKQEAgLTc2Myw4ICs3NzAsMTQgQEAKIAkvKiBkZXZpY2UgaXMgc3RhcnRlZCAqLwogCWJvb2wgc3RhcnRlZDsKIAorCS8qIHdvd2xhbiBpcyBlbmFibGVkIC0tIGRvbid0IHJlY29uZmlnIG9uIHJlc3VtZSAqLworCWJvb2wgd293bGFuOworCiAJaW50IHR4X2hlYWRyb29tOyAvKiByZXF1aXJlZCBoZWFkcm9vbSBmb3IgaGFyZHdhcmUvcmFkaW90YXAgKi8KIAorCS8qIGNvdW50IGZvciBrZXlzIG5lZWRpbmcgdGFpbHJvb20gc3BhY2UgYWxsb2NhdGlvbiAqLworCWludCBjcnlwdG9fdHhfdGFpbHJvb21fbmVlZGVkX2NudDsKKwogCS8qIFRhc2tsZXQgYW5kIHNrYiBxdWV1ZSB0byBwcm9jZXNzIGNhbGxzIGZyb20gSVJRIG1vZGUuIEFsbCBmcmFtZXMKIAkgKiBhZGRlZCB0byBza2JfcXVldWUgd2lsbCBiZSBwcm9jZXNzZWQsIGJ1dCBmcmFtZXMgaW4KIAkgKiBza2JfcXVldWVfdW5yZWxpYWJsZSBtYXkgYmUgZHJvcHBlZCBpZiB0aGUgdG90YWwgbGVuZ3RoIG9mIHRoZXNlCkBAIC03OTQsNyArODA3LDcgQEAKIAlzcGlubG9ja190IHN0YV9sb2NrOwogCXVuc2lnbmVkIGxvbmcgbnVtX3N0YTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHN0YV9saXN0LCBzdGFfcGVuZGluZ19saXN0OwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhX2hhc2hbU1RBX0hBU0hfU0laRV07CisJc3RydWN0IHN0YV9pbmZvIF9fcmN1ICpzdGFfaGFzaFtTVEFfSEFTSF9TSVpFXTsKIAlzdHJ1Y3QgdGltZXJfbGlzdCBzdGFfY2xlYW51cDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc3RhX2ZpbmlzaF93b3JrOwogCWludCBzdGFfZ2VuZXJhdGlvbjsKQEAgLTgwOSw4ICs4MjIsOCBAQAogCiAJc3RydWN0IHJhdGVfY29udHJvbF9yZWYgKnJhdGVfY3RybDsKIAotCXN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp3ZXBfdHhfdGZtOwotCXN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp3ZXBfcnhfdGZtOworCXN0cnVjdCBjcnlwdG9fY2lwaGVyICp3ZXBfdHhfdGZtOworCXN0cnVjdCBjcnlwdG9fY2lwaGVyICp3ZXBfcnhfdGZtOwogCXUzMiB3ZXBfaXY7CiAKIAkvKiBzZWUgaWZhY2UuYyAqLwpAQCAtODM2LDYgKzg0OSwxMCBAQAogCWludCBzY2FuX2NoYW5uZWxfaWR4OwogCWludCBzY2FuX2llc19sZW47CiAKKwlib29sIHNjaGVkX3NjYW5uaW5nOworCXN0cnVjdCBpZWVlODAyMTFfc2NoZWRfc2Nhbl9pZXMgc2NoZWRfc2Nhbl9pZXM7CisJc3RydWN0IHdvcmtfc3RydWN0IHNjaGVkX3NjYW5fc3RvcHBlZF93b3JrOworCiAJdW5zaWduZWQgbG9uZyBsZWF2ZV9vcGVyX2NoYW5uZWxfdGltZTsKIAllbnVtIG1hYzgwMjExX3NjYW5fc3RhdGUgbmV4dF9zY2FuX3N0YXRlOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgc2Nhbl93b3JrOwpAQCAtMTE0Myw2ICsxMTYwLDEyIEBACiB2b2lkIGllZWU4MDIxMV9yeF9ic3NfcHV0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzKTsKIAorLyogc2NoZWR1bGVkIHNjYW4gaGFuZGxpbmcgKi8KK2ludCBpZWVlODAyMTFfcmVxdWVzdF9zY2hlZF9zY2FuX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfc2NoZWRfc2Nhbl9yZXF1ZXN0ICpyZXEpOworaW50IGllZWU4MDIxMV9yZXF1ZXN0X3NjaGVkX3NjYW5fc3RvcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7Cit2b2lkIGllZWU4MDIxMV9zY2hlZF9zY2FuX3N0b3BwZWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCiAvKiBvZmYtY2hhbm5lbCBoZWxwZXJzICovCiBib29sIGllZWU4MDIxMV9jZmdfb25fb3Blcl9jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKIHZvaWQgaWVlZTgwMjExX29mZmNoYW5uZWxfZW5hYmxlX2FsbF9wcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKQEAgLTEyNDYsNyArMTI2OSw4IEBACiB2b2lkIGllZWU4MDIxMV9zdG9wX2RldmljZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7CiAKICNpZmRlZiBDT05GSUdfUE0KLWludCBfX2llZWU4MDIxMV9zdXNwZW5kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK2ludCBfX2llZWU4MDIxMV9zdXNwZW5kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJc3RydWN0IGNmZzgwMjExX3dvd2xhbiAqd293bGFuKTsKIAogc3RhdGljIGlubGluZSBpbnQgX19pZWVlODAyMTFfcmVzdW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewpAQCAtMTI1OSw3ICsxMjgzLDggQEAKIAlyZXR1cm4gaWVlZTgwMjExX3JlY29uZmlnKGh3X3RvX2xvY2FsKGh3KSk7CiB9CiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgX19pZWVlODAyMTFfc3VzcGVuZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3N0YXRpYyBpbmxpbmUgaW50IF9faWVlZTgwMjExX3N1c3BlbmQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgc3RydWN0IGNmZzgwMjExX3dvd2xhbiAqd293bGFuKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2lmYWNlLmMgYi9uZXQvbWFjODAyMTEvaWZhY2UuYwppbmRleCA0MDU0Mzk5Li43ZGZiZTcxIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWZhY2UuYworKysgYi9uZXQvbWFjODAyMTEvaWZhY2UuYwpAQCAtNDQ5LDcgKzQ0OSw4IEBACiAJLyogQVBzIG5lZWQgc3BlY2lhbCB0cmVhdG1lbnQgKi8KIAlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnZsYW4sICp0bXBzZGF0YTsKLQkJc3RydWN0IGJlYWNvbl9kYXRhICpvbGRfYmVhY29uID0gc2RhdGEtPnUuYXAuYmVhY29uOworCQlzdHJ1Y3QgYmVhY29uX2RhdGEgKm9sZF9iZWFjb24gPQorCQkJcnRubF9kZXJlZmVyZW5jZShzZGF0YS0+dS5hcC5iZWFjb24pOwogCiAJCS8qIHNkYXRhX3J1bm5pbmcgd2lsbCByZXR1cm4gZmFsc2UsIHNvIHRoaXMgd2lsbCBkaXNhYmxlICovCiAJCWllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLApAQCAtMTE0NCwxMCArMTE0NSw2IEBACiAJCQkJKyBJRUVFODAyMTFfRU5DUllQVF9IRUFEUk9PTTsKIAluZGV2LT5uZWVkZWRfdGFpbHJvb20gPSBJRUVFODAyMTFfRU5DUllQVF9UQUlMUk9PTTsKIAotCXJldCA9IGRldl9hbGxvY19uYW1lKG5kZXYsIG5kZXYtPm5hbWUpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGZhaWw7Ci0KIAlpZWVlODAyMTFfYXNzaWduX3Blcm1fYWRkcihsb2NhbCwgbmRldiwgdHlwZSk7CiAJbWVtY3B5KG5kZXYtPmRldl9hZGRyLCBuZGV2LT5wZXJtX2FkZHIsIEVUSF9BTEVOKTsKIAlTRVRfTkVUREVWX0RFVihuZGV2LCB3aXBoeV9kZXYobG9jYWwtPmh3LndpcGh5KSk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEva2V5LmMgYi9uZXQvbWFjODAyMTEva2V5LmMKaW5kZXggYWYzYzU2NC4uMzFhZmQ3MTIgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9rZXkuYworKysgYi9uZXQvbWFjODAyMTEva2V5LmMKQEAgLTEwMSw2ICsxMDEsMTEgQEAKIAogCWlmICghcmV0KSB7CiAJCWtleS0+ZmxhZ3MgfD0gS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkU7CisKKwkJaWYgKCEoKGtleS0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9NTUlDKSB8fAorCQkgICAgICAoa2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWKSkpCisJCQlrZXktPmxvY2FsLT5jcnlwdG9fdHhfdGFpbHJvb21fbmVlZGVkX2NudC0tOworCiAJCXJldHVybiAwOwogCX0KIApAQCAtMTU2LDYgKzE2MSwxMCBAQAogCQkJICBrZXktPmNvbmYua2V5aWR4LCBzdGEgPyBzdGEtPmFkZHIgOiBiY2FzdF9hZGRyLCByZXQpOwogCiAJa2V5LT5mbGFncyAmPSB+S0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkU7CisKKwlpZiAoISgoa2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUMpIHx8CisJICAgICAgKGtleS0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVikpKQorCQlrZXktPmxvY2FsLT5jcnlwdG9fdHhfdGFpbHJvb21fbmVlZGVkX2NudCsrOwogfQogCiB2b2lkIGllZWU4MDIxMV9rZXlfcmVtb3ZlZChzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXlfY29uZikKQEAgLTE4Niw3ICsxOTUsNyBAQAogCWFzc2VydF9rZXlfbG9jayhzZGF0YS0+bG9jYWwpOwogCiAJaWYgKGlkeCA+PSAwICYmIGlkeCA8IE5VTV9ERUZBVUxUX0tFWVMpCi0JCWtleSA9IHNkYXRhLT5rZXlzW2lkeF07CisJCWtleSA9IGtleV9tdHhfZGVyZWZlcmVuY2Uoc2RhdGEtPmxvY2FsLCBzZGF0YS0+a2V5c1tpZHhdKTsKIAogCWlmICh1bmkpCiAJCXJjdV9hc3NpZ25fcG9pbnRlcihzZGF0YS0+ZGVmYXVsdF91bmljYXN0X2tleSwga2V5KTsKQEAgLTIxMyw3ICsyMjIsNyBAQAogCiAJaWYgKGlkeCA+PSBOVU1fREVGQVVMVF9LRVlTICYmCiAJICAgIGlkeCA8IE5VTV9ERUZBVUxUX0tFWVMgKyBOVU1fREVGQVVMVF9NR01UX0tFWVMpCi0JCWtleSA9IHNkYXRhLT5rZXlzW2lkeF07CisJCWtleSA9IGtleV9tdHhfZGVyZWZlcmVuY2Uoc2RhdGEtPmxvY2FsLCBzZGF0YS0+a2V5c1tpZHhdKTsKIAogCXJjdV9hc3NpZ25fcG9pbnRlcihzZGF0YS0+ZGVmYXVsdF9tZ210X2tleSwga2V5KTsKIApAQCAtMjU3LDkgKzI2NiwxNSBAQAogCQllbHNlCiAJCQlpZHggPSBuZXctPmNvbmYua2V5aWR4OwogCi0JCWRlZnVuaWtleSA9IG9sZCAmJiBzZGF0YS0+ZGVmYXVsdF91bmljYXN0X2tleSA9PSBvbGQ7Ci0JCWRlZm11bHRpa2V5ID0gb2xkICYmIHNkYXRhLT5kZWZhdWx0X211bHRpY2FzdF9rZXkgPT0gb2xkOwotCQlkZWZtZ210a2V5ID0gb2xkICYmIHNkYXRhLT5kZWZhdWx0X21nbXRfa2V5ID09IG9sZDsKKwkJZGVmdW5pa2V5ID0gb2xkICYmCisJCQlvbGQgPT0ga2V5X210eF9kZXJlZmVyZW5jZShzZGF0YS0+bG9jYWwsCisJCQkJCQlzZGF0YS0+ZGVmYXVsdF91bmljYXN0X2tleSk7CisJCWRlZm11bHRpa2V5ID0gb2xkICYmCisJCQlvbGQgPT0ga2V5X210eF9kZXJlZmVyZW5jZShzZGF0YS0+bG9jYWwsCisJCQkJCQlzZGF0YS0+ZGVmYXVsdF9tdWx0aWNhc3Rfa2V5KTsKKwkJZGVmbWdtdGtleSA9IG9sZCAmJgorCQkJb2xkID09IGtleV9tdHhfZGVyZWZlcmVuY2Uoc2RhdGEtPmxvY2FsLAorCQkJCQkJc2RhdGEtPmRlZmF1bHRfbWdtdF9rZXkpOwogCiAJCWlmIChkZWZ1bmlrZXkgJiYgIW5ldykKIAkJCV9faWVlZTgwMjExX3NldF9kZWZhdWx0X2tleShzZGF0YSwgLTEsIHRydWUsIGZhbHNlKTsKQEAgLTM4OCw4ICs0MDMsMTAgQEAKIAkJaWVlZTgwMjExX2Flc19rZXlfZnJlZShrZXktPnUuY2NtcC50Zm0pOwogCWlmIChrZXktPmNvbmYuY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDKQogCQlpZWVlODAyMTFfYWVzX2NtYWNfa2V5X2ZyZWUoa2V5LT51LmFlc19jbWFjLnRmbSk7Ci0JaWYgKGtleS0+bG9jYWwpCisJaWYgKGtleS0+bG9jYWwpIHsKIAkJaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZShrZXkpOworCQlrZXktPmxvY2FsLT5jcnlwdG9fdHhfdGFpbHJvb21fbmVlZGVkX2NudC0tOworCX0KIAogCWtmcmVlKGtleSk7CiB9CkBAIC00NDAsMTcgKzQ1NywxOSBAQAogCW11dGV4X2xvY2soJnNkYXRhLT5sb2NhbC0+a2V5X210eCk7CiAKIAlpZiAoc3RhICYmIHBhaXJ3aXNlKQotCQlvbGRfa2V5ID0gc3RhLT5wdGs7CisJCW9sZF9rZXkgPSBrZXlfbXR4X2RlcmVmZXJlbmNlKHNkYXRhLT5sb2NhbCwgc3RhLT5wdGspOwogCWVsc2UgaWYgKHN0YSkKLQkJb2xkX2tleSA9IHN0YS0+Z3RrW2lkeF07CisJCW9sZF9rZXkgPSBrZXlfbXR4X2RlcmVmZXJlbmNlKHNkYXRhLT5sb2NhbCwgc3RhLT5ndGtbaWR4XSk7CiAJZWxzZQotCQlvbGRfa2V5ID0gc2RhdGEtPmtleXNbaWR4XTsKKwkJb2xkX2tleSA9IGtleV9tdHhfZGVyZWZlcmVuY2Uoc2RhdGEtPmxvY2FsLCBzZGF0YS0+a2V5c1tpZHhdKTsKIAogCV9faWVlZTgwMjExX2tleV9yZXBsYWNlKHNkYXRhLCBzdGEsIHBhaXJ3aXNlLCBvbGRfa2V5LCBrZXkpOwogCV9faWVlZTgwMjExX2tleV9kZXN0cm95KG9sZF9rZXkpOwogCiAJaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZChrZXkpOwogCisJa2V5LT5sb2NhbC0+Y3J5cHRvX3R4X3RhaWxyb29tX25lZWRlZF9jbnQrKzsKKwogCXJldCA9IGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKGtleSk7CiAKIAltdXRleF91bmxvY2soJnNkYXRhLT5sb2NhbC0+a2V5X210eCk7CkBAIC00NTgsOCArNDc3LDExIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgX19pZWVlODAyMTFfa2V5X2ZyZWUoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSkKK3ZvaWQgX19pZWVlODAyMTFfa2V5X2ZyZWUoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSkKIHsKKwlpZiAoIWtleSkKKwkJcmV0dXJuOworCiAJLyoKIAkgKiBSZXBsYWNlIGtleSB3aXRoIG5vdGhpbmduZXNzIGlmIGl0IHdhcyBldmVyIHVzZWQuCiAJICovCkBAIC00NzMsOSArNDk1LDYgQEAKIHZvaWQgaWVlZTgwMjExX2tleV9mcmVlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSkKIHsKLQlpZiAoIWtleSkKLQkJcmV0dXJuOwotCiAJbXV0ZXhfbG9jaygmbG9jYWwtPmtleV9tdHgpOwogCV9faWVlZTgwMjExX2tleV9mcmVlKGtleSk7CiAJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+a2V5X210eCk7CkBAIC00OTIsOCArNTExLDEyIEBACiAKIAltdXRleF9sb2NrKCZzZGF0YS0+bG9jYWwtPmtleV9tdHgpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShrZXksICZzZGF0YS0+a2V5X2xpc3QsIGxpc3QpCisJc2RhdGEtPmxvY2FsLT5jcnlwdG9fdHhfdGFpbHJvb21fbmVlZGVkX2NudCA9IDA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGtleSwgJnNkYXRhLT5rZXlfbGlzdCwgbGlzdCkgeworCQlzZGF0YS0+bG9jYWwtPmNyeXB0b190eF90YWlscm9vbV9uZWVkZWRfY250Kys7CiAJCWllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKGtleSk7CisJfQogCiAJbXV0ZXhfdW5sb2NrKCZzZGF0YS0+bG9jYWwtPmtleV9tdHgpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2tleS5oIGIvbmV0L21hYzgwMjExL2tleS5oCmluZGV4IDRkZGJlMjcuLmQ4MDFkNTMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9rZXkuaAorKysgYi9uZXQvbWFjODAyMTEva2V5LmgKQEAgLTEzNSw2ICsxMzUsNyBAQAogaW50IF9fbXVzdF9jaGVjayBpZWVlODAyMTFfa2V5X2xpbmsoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwKIAkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKK3ZvaWQgX19pZWVlODAyMTFfa2V5X2ZyZWUoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSk7CiB2b2lkIGllZWU4MDIxMV9rZXlfZnJlZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpOwogdm9pZCBpZWVlODAyMTFfc2V0X2RlZmF1bHRfa2V5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBpbnQgaWR4LApAQCAtMTQ1LDQgKzE0Niw3IEBACiB2b2lkIGllZWU4MDIxMV9lbmFibGVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiB2b2lkIGllZWU4MDIxMV9kaXNhYmxlX2tleXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogCisjZGVmaW5lIGtleV9tdHhfZGVyZWZlcmVuY2UobG9jYWwsIHJlZikgXAorCXJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocmVmLCBsb2NrZGVwX2lzX2hlbGQoJigobG9jYWwpLT5rZXlfbXR4KSkpCisKICNlbmRpZiAvKiBJRUVFODAyMTFfS0VZX0ggKi8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tYWluLmMgYi9uZXQvbWFjODAyMTEvbWFpbi5jCmluZGV4IDU2MmQyOTguLjBkN2IwOGQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tYWluLmMKKysrIGIvbmV0L21hYzgwMjExL21haW4uYwpAQCAtMzMsMTIgKzMzLDYgQEAKICNpbmNsdWRlICJjZmcuaCIKICNpbmNsdWRlICJkZWJ1Z2ZzLmgiCiAKLQotc3RhdGljIGJvb2wgaWVlZTgwMjExX2Rpc2FibGVfNDBtaHpfMjRnaHo7Ci1tb2R1bGVfcGFyYW0oaWVlZTgwMjExX2Rpc2FibGVfNDBtaHpfMjRnaHosIGJvb2wsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhpZWVlODAyMTFfZGlzYWJsZV80MG1oel8yNGdoeiwKLQkJICJEaXNhYmxlIDQwTUh6IHN1cHBvcnQgaW4gdGhlIDIuNEdIeiBiYW5kIik7Ci0KIHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgaWVlZTgwMjExX3J4X3NrYl9xdWV1ZV9jbGFzczsKIAogdm9pZCBpZWVlODAyMTFfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKQEAgLTM2NCw3ICszNTgsOCBAQAogCWZsdXNoX3dvcmtxdWV1ZShsb2NhbC0+d29ya3F1ZXVlKTsKIAogCW11dGV4X2xvY2soJmxvY2FsLT5tdHgpOwotCVdBUk4odGVzdF9iaXQoU0NBTl9IV19TQ0FOTklORywgJmxvY2FsLT5zY2FubmluZyksCisJV0FSTih0ZXN0X2JpdChTQ0FOX0hXX1NDQU5OSU5HLCAmbG9jYWwtPnNjYW5uaW5nKSB8fAorCSAgICAgbG9jYWwtPnNjaGVkX3NjYW5uaW5nLAogCQkiJXMgY2FsbGVkIHdpdGggaGFyZHdhcmUgc2NhbiBpbiBwcm9ncmVzc1xuIiwgX19mdW5jX18pOwogCW11dGV4X3VubG9jaygmbG9jYWwtPm10eCk7CiAKQEAgLTU0NSw3ICs1NDAsOSBAQAogCX0sCiAJW05MODAyMTFfSUZUWVBFX01FU0hfUE9JTlRdID0gewogCQkudHggPSAweGZmZmYsCi0JCS5yeCA9IEJJVChJRUVFODAyMTFfU1RZUEVfQUNUSU9OID4+IDQpLAorCQkucnggPSBCSVQoSUVFRTgwMjExX1NUWVBFX0FDVElPTiA+PiA0KSB8CisJCQlCSVQoSUVFRTgwMjExX1NUWVBFX0FVVEggPj4gNCkgfAorCQkJQklUKElFRUU4MDIxMV9TVFlQRV9ERUFVVEggPj4gNCksCiAJfSwKIH07CiAKQEAgLTU4NCw4ICs1ODEsNyBAQAogCiAJd2lwaHktPmZsYWdzIHw9IFdJUEhZX0ZMQUdfTkVUTlNfT0sgfAogCQkJV0lQSFlfRkxBR180QUREUl9BUCB8Ci0JCQlXSVBIWV9GTEFHXzRBRERSX1NUQVRJT04gfAotCQkJV0lQSFlfRkxBR19TVVBQT1JUU19TRVBBUkFURV9ERUZBVUxUX0tFWVM7CisJCQlXSVBIWV9GTEFHXzRBRERSX1NUQVRJT047CiAKIAlpZiAoIW9wcy0+c2V0X2tleSkKIAkJd2lwaHktPmZsYWdzIHw9IFdJUEhZX0ZMQUdfSUJTU19SU047CkBAIC02NTYsNiArNjUyLDkgQEAKIAlzZXR1cF90aW1lcigmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIsCiAJCSAgICBpZWVlODAyMTFfZHluYW1pY19wc190aW1lciwgKHVuc2lnbmVkIGxvbmcpIGxvY2FsKTsKIAorCUlOSVRfV09SSygmbG9jYWwtPnNjaGVkX3NjYW5fc3RvcHBlZF93b3JrLAorCQkgIGllZWU4MDIxMV9zY2hlZF9zY2FuX3N0b3BwZWRfd29yayk7CisKIAlzdGFfaW5mb19pbml0KGxvY2FsKTsKIAogCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfTUFYX1FVRVVFUzsgaSsrKSB7CkBAIC02ODYsNyArNjg1LDcgQEAKIGludCBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7Ci0JaW50IHJlc3VsdDsKKwlpbnQgcmVzdWx0LCBpOwogCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKIAlpbnQgY2hhbm5lbHMsIG1heF9iaXRyYXRlczsKIAlib29sIHN1cHBfaHQ7CkBAIC03MDEsNiArNzAwLDEzIEBACiAJCVdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDCiAJfTsKIAorCWlmICgoaHctPndpcGh5LT53b3dsYW4uZmxhZ3MgfHwgaHctPndpcGh5LT53b3dsYW4ubl9wYXR0ZXJucykKKyNpZmRlZiBDT05GSUdfUE0KKwkgICAgJiYgKCFsb2NhbC0+b3BzLT5zdXNwZW5kIHx8ICFsb2NhbC0+b3BzLT5yZXN1bWUpCisjZW5kaWYKKwkgICAgKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmIChody0+bWF4X3JlcG9ydF9yYXRlcyA9PSAwKQogCQlody0+bWF4X3JlcG9ydF9yYXRlcyA9IGh3LT5tYXhfcmF0ZXM7CiAKQEAgLTcyNiwxOCArNzMyLDYgQEAKIAkJfQogCQljaGFubmVscyArPSBzYmFuZC0+bl9jaGFubmVsczsKIAotCQkvKgotCQkgKiBTaW5jZSBpZWVlODAyMTFfZGlzYWJsZV80MG1oel8yNGdoeiBpcyBnbG9iYWwsIHdlIGNhbgotCQkgKiBtb2RpZnkgdGhlIHNiYW5kJ3MgaHQgZGF0YSBldmVuIGlmIHRoZSBkcml2ZXIgdXNlcyBhCi0JCSAqIGdsb2JhbCBzdHJ1Y3R1cmUgZm9yIHRoYXQuCi0JCSAqLwotCQlpZiAoaWVlZTgwMjExX2Rpc2FibGVfNDBtaHpfMjRnaHogJiYKLQkJICAgIGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWiAmJgotCQkgICAgc2JhbmQtPmh0X2NhcC5odF9zdXBwb3J0ZWQpIHsKLQkJCXNiYW5kLT5odF9jYXAuY2FwICY9IH5JRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MDsKLQkJCXNiYW5kLT5odF9jYXAuY2FwICY9IH5JRUVFODAyMTFfSFRfQ0FQX1NHSV80MDsKLQkJfQotCiAJCWlmIChtYXhfYml0cmF0ZXMgPCBzYmFuZC0+bl9iaXRyYXRlcykKIAkJCW1heF9iaXRyYXRlcyA9IHNiYW5kLT5uX2JpdHJhdGVzOwogCQlzdXBwX2h0ID0gc3VwcF9odCB8fCBzYmFuZC0+aHRfY2FwLmh0X3N1cHBvcnRlZDsKQEAgLTc0OSwxNyArNzQzLDMwIEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJLyogaWYgbG93LWxldmVsIGRyaXZlciBzdXBwb3J0cyBBUCwgd2UgYWxzbyBzdXBwb3J0IFZMQU4gKi8KLQlpZiAobG9jYWwtPmh3LndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgJiBCSVQoTkw4MDIxMV9JRlRZUEVfQVApKQotCQlsb2NhbC0+aHcud2lwaHktPmludGVyZmFjZV9tb2RlcyB8PSBCSVQoTkw4MDIxMV9JRlRZUEVfQVBfVkxBTik7CisJaWYgKGxvY2FsLT5ody53aXBoeS0+aW50ZXJmYWNlX21vZGVzICYgQklUKE5MODAyMTFfSUZUWVBFX0FQKSkgeworCQlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyB8PSBCSVQoTkw4MDIxMV9JRlRZUEVfQVBfVkxBTik7CisJCWh3LT53aXBoeS0+c29mdHdhcmVfaWZ0eXBlcyB8PSBCSVQoTkw4MDIxMV9JRlRZUEVfQVBfVkxBTik7CisJfQogCiAJLyogbWFjODAyMTEgYWx3YXlzIHN1cHBvcnRzIG1vbml0b3IgKi8KLQlsb2NhbC0+aHcud2lwaHktPmludGVyZmFjZV9tb2RlcyB8PSBCSVQoTkw4MDIxMV9JRlRZUEVfTU9OSVRPUik7CisJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgfD0gQklUKE5MODAyMTFfSUZUWVBFX01PTklUT1IpOworCWh3LT53aXBoeS0+c29mdHdhcmVfaWZ0eXBlcyB8PSBCSVQoTkw4MDIxMV9JRlRZUEVfTU9OSVRPUik7CisKKwkvKiBtYWM4MDIxMSBkb2Vzbid0IHN1cHBvcnQgbW9yZSB0aGFuIDEgY2hhbm5lbCAqLworCWZvciAoaSA9IDA7IGkgPCBody0+d2lwaHktPm5faWZhY2VfY29tYmluYXRpb25zOyBpKyspCisJCWlmIChody0+d2lwaHktPmlmYWNlX2NvbWJpbmF0aW9uc1tpXS5udW1fZGlmZmVyZW50X2NoYW5uZWxzID4gMSkKKwkJCXJldHVybiAtRUlOVkFMOwogCiAjaWZuZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICiAJLyogbWVzaCBkZXBlbmRzIG9uIEtjb25maWcsIGJ1dCBkcml2ZXJzIHNob3VsZCBzZXQgaXQgaWYgdGhleSB3YW50ICovCiAJbG9jYWwtPmh3LndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgJj0gfkJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKTsKICNlbmRpZgogCisJLyogaWYgdGhlIHVuZGVybHlpbmcgZHJpdmVyIHN1cHBvcnRzIG1lc2gsIG1hYzgwMjExIHdpbGwgKGF0IGxlYXN0KQorCSAqIHByb3ZpZGUgcm91dGluZyBvZiBtZXNoIGF1dGhlbnRpY2F0aW9uIGZyYW1lcyB0byB1c2Vyc3BhY2UgKi8KKwlpZiAobG9jYWwtPmh3LndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgJiBCSVQoTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkpCisJCWxvY2FsLT5ody53aXBoeS0+ZmxhZ3MgfD0gV0lQSFlfRkxBR19NRVNIX0FVVEg7CisKIAkvKiBtYWM4MDIxMSBzdXBwb3J0cyBjb250cm9sIHBvcnQgcHJvdG9jb2wgY2hhbmdpbmcgKi8KIAlsb2NhbC0+aHcud2lwaHktPmZsYWdzIHw9IFdJUEhZX0ZMQUdfQ09OVFJPTF9QT1JUX1BST1RPQ09MOwogCkBAIC04MzgsNiArODQ1LDkgQEAKIAlpZiAoIWxvY2FsLT5vcHMtPnJlbWFpbl9vbl9jaGFubmVsKQogCQlsb2NhbC0+aHcud2lwaHktPm1heF9yZW1haW5fb25fY2hhbm5lbF9kdXJhdGlvbiA9IDUwMDA7CiAKKwlpZiAobG9jYWwtPm9wcy0+c2NoZWRfc2Nhbl9zdGFydCkKKwkJbG9jYWwtPmh3LndpcGh5LT5mbGFncyB8PSBXSVBIWV9GTEFHX1NVUFBPUlRTX1NDSEVEX1NDQU47CisKIAlyZXN1bHQgPSB3aXBoeV9yZWdpc3Rlcihsb2NhbC0+aHcud2lwaHkpOwogCWlmIChyZXN1bHQgPCAwKQogCQlnb3RvIGZhaWxfd2lwaHlfcmVnaXN0ZXI7CkBAIC04NjEsOCArODcxLDEwIEBACiAJICogYW5kIHdlIG5lZWQgc29tZSBoZWFkcm9vbSBmb3IgcGFzc2luZyB0aGUgZnJhbWUgdG8gbW9uaXRvcgogCSAqIGludGVyZmFjZXMsIGJ1dCBuZXZlciBib3RoIGF0IHRoZSBzYW1lIHRpbWUuCiAJICovCisjaWZuZGVmIF9fQ0hFQ0tFUl9fCiAJQlVJTERfQlVHX09OKElFRUU4MDIxMV9UWF9TVEFUVVNfSEVBRFJPT00gIT0KIAkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1c19ydGFwX2hkcikpOworI2VuZGlmCiAJbG9jYWwtPnR4X2hlYWRyb29tID0gbWF4X3QodW5zaWduZWQgaW50ICwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tLAogCQkJCSAgIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1c19ydGFwX2hkcikpOwogCkBAIC04NzksMTAgKzg5MSw2IEBACiAKIAlsb2NhbC0+ZHluYW1pY19wc19mb3JjZWRfdGltZW91dCA9IC0xOwogCi0JcmVzdWx0ID0gc3RhX2luZm9fc3RhcnQobG9jYWwpOwotCWlmIChyZXN1bHQgPCAwKQotCQlnb3RvIGZhaWxfc3RhX2luZm87Ci0KIAlyZXN1bHQgPSBpZWVlODAyMTFfd2VwX2luaXQobG9jYWwpOwogCWlmIChyZXN1bHQgPCAwKQogCQl3aXBoeV9kZWJ1Zyhsb2NhbC0+aHcud2lwaHksICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSB3ZXA6ICVkXG4iLApAQCAtOTQ1LDcgKzk1Myw2IEBACiAJcnRubF91bmxvY2soKTsKIAlpZWVlODAyMTFfd2VwX2ZyZWUobG9jYWwpOwogCXN0YV9pbmZvX3N0b3AobG9jYWwpOwotIGZhaWxfc3RhX2luZm86CiAJZGVzdHJveV93b3JrcXVldWUobG9jYWwtPndvcmtxdWV1ZSk7CiAgZmFpbF93b3JrcXVldWU6CiAJd2lwaHlfdW5yZWdpc3Rlcihsb2NhbC0+aHcud2lwaHkpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2guYyBiL25ldC9tYWM4MDIxMS9tZXNoLmMKaW5kZXggMmE1N2NjMC4uMjllOTk4MCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21lc2guYworKysgYi9uZXQvbWFjODAyMTEvbWVzaC5jCkBAIC0yNzksNTcgKzI3OSwxNCBAQAogCSAgICBNRVNIQ09ORl9DQVBBQl9BQ0NFUFRfUExJTktTIDogMHgwMDsKIAkqcG9zKysgPSAweDAwOwogCi0JaWYgKHNkYXRhLT51Lm1lc2gudmVuZG9yX2llKSB7Ci0JCWludCBsZW4gPSBzZGF0YS0+dS5tZXNoLnZlbmRvcl9pZV9sZW47Ci0JCWNvbnN0IHU4ICpkYXRhID0gc2RhdGEtPnUubWVzaC52ZW5kb3JfaWU7CisJaWYgKHNkYXRhLT51Lm1lc2guaWUpIHsKKwkJaW50IGxlbiA9IHNkYXRhLT51Lm1lc2guaWVfbGVuOworCQljb25zdCB1OCAqZGF0YSA9IHNkYXRhLT51Lm1lc2guaWU7CiAJCWlmIChza2JfdGFpbHJvb20oc2tiKSA+IGxlbikKIAkJCW1lbWNweShza2JfcHV0KHNrYiwgbGVuKSwgZGF0YSwgbGVuKTsKIAl9CiB9CiAKLXUzMiBtZXNoX3RhYmxlX2hhc2godTggKmFkZHIsIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsKQotewotCS8qIFVzZSBsYXN0IGZvdXIgYnl0ZXMgb2YgaHcgYWRkciBhbmQgaW50ZXJmYWNlIGluZGV4IGFzIGhhc2ggaW5kZXggKi8KLQlyZXR1cm4gamhhc2hfMndvcmRzKCoodTMyICopKGFkZHIrMiksIHNkYXRhLT5kZXYtPmlmaW5kZXgsIHRibC0+aGFzaF9ybmQpCi0JCSYgdGJsLT5oYXNoX21hc2s7Ci19Ci0KLXN0cnVjdCBtZXNoX3RhYmxlICptZXNoX3RhYmxlX2FsbG9jKGludCBzaXplX29yZGVyKQotewotCWludCBpOwotCXN0cnVjdCBtZXNoX3RhYmxlICpuZXd0Ymw7Ci0KLQluZXd0YmwgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWVzaF90YWJsZSksIEdGUF9LRVJORUwpOwotCWlmICghbmV3dGJsKQotCQlyZXR1cm4gTlVMTDsKLQotCW5ld3RibC0+aGFzaF9idWNrZXRzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpICoKLQkJCSgxIDw8IHNpemVfb3JkZXIpLCBHRlBfS0VSTkVMKTsKLQotCWlmICghbmV3dGJsLT5oYXNoX2J1Y2tldHMpIHsKLQkJa2ZyZWUobmV3dGJsKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JbmV3dGJsLT5oYXNod2xvY2sgPSBrbWFsbG9jKHNpemVvZihzcGlubG9ja190KSAqCi0JCQkoMSA8PCBzaXplX29yZGVyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFuZXd0YmwtPmhhc2h3bG9jaykgewotCQlrZnJlZShuZXd0YmwtPmhhc2hfYnVja2V0cyk7Ci0JCWtmcmVlKG5ld3RibCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCW5ld3RibC0+c2l6ZV9vcmRlciA9IHNpemVfb3JkZXI7Ci0JbmV3dGJsLT5oYXNoX21hc2sgPSAoMSA8PCBzaXplX29yZGVyKSAtIDE7Ci0JYXRvbWljX3NldCgmbmV3dGJsLT5lbnRyaWVzLCAgMCk7Ci0JZ2V0X3JhbmRvbV9ieXRlcygmbmV3dGJsLT5oYXNoX3JuZCwKLQkJCXNpemVvZihuZXd0YmwtPmhhc2hfcm5kKSk7Ci0JZm9yIChpID0gMDsgaSA8PSBuZXd0YmwtPmhhc2hfbWFzazsgaSsrKQotCQlzcGluX2xvY2tfaW5pdCgmbmV3dGJsLT5oYXNod2xvY2tbaV0pOwotCi0JcmV0dXJuIG5ld3RibDsKLX0KLQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfbWVzaF9wYXRoX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKQEAgLTU3Myw2ICs1MzAsMTAgQEAKIAlpZWVlODAyXzExX3BhcnNlX2VsZW1zKG1nbXQtPnUucHJvYmVfcmVzcC52YXJpYWJsZSwgbGVuIC0gYmFzZWxlbiwKIAkJCSAgICAgICAmZWxlbXMpOwogCisJLyogaWdub3JlIGJlYWNvbnMgZnJvbSBzZWN1cmUgbWVzaCBwZWVycyBpZiBvdXIgc2VjdXJpdHkgaXMgb2ZmICovCisJaWYgKGVsZW1zLnJzbl9sZW4gJiYgc2RhdGEtPnUubWVzaC5zZWN1cml0eSA9PSBJRUVFODAyMTFfTUVTSF9TRUNfTk9ORSkKKwkJcmV0dXJuOworCiAJaWYgKGVsZW1zLmRzX3BhcmFtcyAmJiBlbGVtcy5kc19wYXJhbXNfbGVuID09IDEpCiAJCWZyZXEgPSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koZWxlbXMuZHNfcGFyYW1zWzBdLCBiYW5kKTsKIAllbHNlCkBAIC01ODYsOSArNTQ3LDcgQEAKIAlpZiAoZWxlbXMubWVzaF9pZCAmJiBlbGVtcy5tZXNoX2NvbmZpZyAmJgogCSAgICBtZXNoX21hdGNoZXNfbG9jYWwoJmVsZW1zLCBzZGF0YSkpIHsKIAkJc3VwcF9yYXRlcyA9IGllZWU4MDIxMV9zdGFfZ2V0X3JhdGVzKGxvY2FsLCAmZWxlbXMsIGJhbmQpOwotCi0JCW1lc2hfbmVpZ2hib3VyX3VwZGF0ZShtZ210LT5zYSwgc3VwcF9yYXRlcywgc2RhdGEsCi0JCQkJICAgICAgbWVzaF9wZWVyX2FjY2VwdHNfcGxpbmtzKCZlbGVtcykpOworCQltZXNoX25laWdoYm91cl91cGRhdGUobWdtdC0+c2EsIHN1cHBfcmF0ZXMsIHNkYXRhLCAmZWxlbXMpOwogCX0KIH0KIApAQCAtNTk4LDcgKzU1Nyw3IEBACiAJCQkJCSAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKIHsKIAlzd2l0Y2ggKG1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5KSB7Ci0JY2FzZSBXTEFOX0NBVEVHT1JZX01FU0hfUExJTks6CisJY2FzZSBXTEFOX0NBVEVHT1JZX01FU0hfQUNUSU9OOgogCQltZXNoX3J4X3BsaW5rX2ZyYW1lKHNkYXRhLCBtZ210LCBsZW4sIHJ4X3N0YXR1cyk7CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9DQVRFR09SWV9NRVNIX1BBVEhfU0VMOgpAQCAtNjExLDEyICs1NzAsOSBAQAogCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1czsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX21lc2ggKmlmbXNoOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKIAl1MTYgc3R5cGU7CiAKLQlpZm1zaCA9ICZzZGF0YS0+dS5tZXNoOwotCiAJcnhfc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7CiAJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOwogCXN0eXBlID0gbGUxNl90b19jcHUobWdtdC0+ZnJhbWVfY29udHJvbCkgJiBJRUVFODAyMTFfRkNUTF9TVFlQRTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoLmggYi9uZXQvbWFjODAyMTEvbWVzaC5oCmluZGV4IGI5OWUyMzAuLmU3YzVmZGQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoLmgKKysrIGIvbmV0L21hYzgwMjExL21lc2guaApAQCAtOTIsNyArOTIsNyBAQAogCXU4IGRzdFtFVEhfQUxFTl07CiAJdTggbXBwW0VUSF9BTEVOXTsJLyogdXNlZCBmb3IgTVBQIG9yIE1BUCAqLwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwotCXN0cnVjdCBzdGFfaW5mbyAqbmV4dF9ob3A7CisJc3RydWN0IHN0YV9pbmZvIF9fcmN1ICpuZXh0X2hvcDsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGZyYW1lX3F1ZXVlOwogCXN0cnVjdCByY3VfaGVhZCByY3U7CkBAIC0yMjYsNyArMjI2LDggQEAKIGludCBtZXNoX3BhdGhfYWRkKHU4ICpkc3QsIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIC8qIE1lc2ggcGxpbmtzICovCiB2b2lkIG1lc2hfbmVpZ2hib3VyX3VwZGF0ZSh1OCAqaHdfYWRkciwgdTMyIHJhdGVzLAotCQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgYm9vbCBhZGQpOworCQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgKmllKTsKIGJvb2wgbWVzaF9wZWVyX2FjY2VwdHNfcGxpbmtzKHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICppZSk7CiB2b2lkIG1lc2hfYWNjZXB0X3BsaW5rc191cGRhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogdm9pZCBtZXNoX3BsaW5rX2Jyb2tlbihzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7CkBAIC0yMzksMTIgKzI0MCw4IEBACiAKIC8qIFByaXZhdGUgaW50ZXJmYWNlcyAqLwogLyogTWVzaCB0YWJsZXMgKi8KLXN0cnVjdCBtZXNoX3RhYmxlICptZXNoX3RhYmxlX2FsbG9jKGludCBzaXplX29yZGVyKTsKLXZvaWQgbWVzaF90YWJsZV9mcmVlKHN0cnVjdCBtZXNoX3RhYmxlICp0YmwsIGJvb2wgZnJlZV9sZWFmcyk7CiB2b2lkIG1lc2hfbXBhdGhfdGFibGVfZ3Jvdyh2b2lkKTsKIHZvaWQgbWVzaF9tcHBfdGFibGVfZ3Jvdyh2b2lkKTsKLXUzMiBtZXNoX3RhYmxlX2hhc2godTggKmFkZHIsIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQlzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsKTsKIC8qIE1lc2ggcGF0aHMgKi8KIGludCBtZXNoX3BhdGhfZXJyb3JfdHgodTggdHRsLCB1OCAqdGFyZ2V0LCBfX2xlMzIgdGFyZ2V0X3NuLCBfX2xlMTYgdGFyZ2V0X3Jjb2RlLAogCQkgICAgICAgY29uc3QgdTggKnJhLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWVzaF9od21wLmMgYi9uZXQvbWFjODAyMTEvbWVzaF9od21wLmMKaW5kZXggNWJmNjRkNy4uMmIxODA1MyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21lc2hfaHdtcC5jCisrKyBiL25ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYwpAQCAtMzkxLDcgKzM5MSw2IEBACiAJCQkgICAgKG1wYXRoLT5mbGFncyAmIE1FU0hfUEFUSF9TTl9WQUxJRCkpIHsKIAkJCQlpZiAoU05fR1QobXBhdGgtPnNuLCBvcmlnX3NuKSB8fAogCQkJCSAgICAobXBhdGgtPnNuID09IG9yaWdfc24gJiYKLQkJCQkgICAgIGFjdGlvbiA9PSBNUEFUSF9QUkVRICYmCiAJCQkJICAgICBuZXdfbWV0cmljID49IG1wYXRoLT5tZXRyaWMpKSB7CiAJCQkJCXByb2Nlc3MgPSBmYWxzZTsKIAkJCQkJZnJlc2hfaW5mbyA9IGZhbHNlOwpAQCAtNTYxLDYgKzU2MCwxNCBAQAogfQogCiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHN0YV9pbmZvICoKK25leHRfaG9wX2RlcmVmX3Byb3RlY3RlZChzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCkKK3sKKwlyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtcGF0aC0+bmV4dF9ob3AsCisJCQkJCSBsb2NrZGVwX2lzX2hlbGQoJm1wYXRoLT5zdGF0ZV9sb2NrKSk7Cit9CisKKwogc3RhdGljIHZvaWQgaHdtcF9wcmVwX2ZyYW1lX3Byb2Nlc3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKIAkJCQkgICAgdTggKnByZXBfZWxlbSwgdTMyIG1ldHJpYykKQEAgLTYwMCw3ICs2MDcsNyBAQAogCQlzcGluX3VubG9ja19iaCgmbXBhdGgtPnN0YXRlX2xvY2spOwogCQlnb3RvIGZhaWw7CiAJfQotCW1lbWNweShuZXh0X2hvcCwgbXBhdGgtPm5leHRfaG9wLT5zdGEuYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShuZXh0X2hvcCwgbmV4dF9ob3BfZGVyZWZfcHJvdGVjdGVkKG1wYXRoKS0+c3RhLmFkZHIsIEVUSF9BTEVOKTsKIAlzcGluX3VubG9ja19iaCgmbXBhdGgtPnN0YXRlX2xvY2spOwogCS0tdHRsOwogCWZsYWdzID0gUFJFUF9JRV9GTEFHUyhwcmVwX2VsZW0pOwpAQCAtNjMzLDcgKzY0MCw2IEBACiAJc3RydWN0IG1lc2hfcGF0aCAqbXBhdGg7CiAJdTggdHRsOwogCXU4ICp0YSwgKnRhcmdldF9hZGRyOwotCXU4IHRhcmdldF9mbGFnczsKIAl1MzIgdGFyZ2V0X3NuOwogCXUxNiB0YXJnZXRfcmNvZGU7CiAKQEAgLTY0NCw3ICs2NTAsNiBAQAogCQlyZXR1cm47CiAJfQogCXR0bC0tOwotCXRhcmdldF9mbGFncyA9IFBFUlJfSUVfVEFSR0VUX0ZMQUdTKHBlcnJfZWxlbSk7CiAJdGFyZ2V0X2FkZHIgPSBQRVJSX0lFX1RBUkdFVF9BRERSKHBlcnJfZWxlbSk7CiAJdGFyZ2V0X3NuID0gUEVSUl9JRV9UQVJHRVRfU04ocGVycl9lbGVtKTsKIAl0YXJnZXRfcmNvZGUgPSBQRVJSX0lFX1RBUkdFVF9SQ09ERShwZXJyX2VsZW0pOwpAQCAtNjU0LDcgKzY1OSw4IEBACiAJaWYgKG1wYXRoKSB7CiAJCXNwaW5fbG9ja19iaCgmbXBhdGgtPnN0YXRlX2xvY2spOwogCQlpZiAobXBhdGgtPmZsYWdzICYgTUVTSF9QQVRIX0FDVElWRSAmJgotCQkgICAgbWVtY21wKHRhLCBtcGF0aC0+bmV4dF9ob3AtPnN0YS5hZGRyLCBFVEhfQUxFTikgPT0gMCAmJgorCQkgICAgbWVtY21wKHRhLCBuZXh0X2hvcF9kZXJlZl9wcm90ZWN0ZWQobXBhdGgpLT5zdGEuYWRkciwKKwkJCQkJCQlFVEhfQUxFTikgPT0gMCAmJgogCQkgICAgKCEobXBhdGgtPmZsYWdzICYgTUVTSF9QQVRIX1NOX1ZBTElEKSB8fAogCQkgICAgU05fR1QodGFyZ2V0X3NuLCBtcGF0aC0+c24pKSkgewogCQkJbXBhdGgtPmZsYWdzICY9IH5NRVNIX1BBVEhfQUNUSVZFOwpAQCAtNjc1LDEyICs2ODEsMTAgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21lc2ggKmlmbXNoID0gJnNkYXRhLT51Lm1lc2g7CiAJc3RydWN0IG1lc2hfcGF0aCAqbXBhdGg7Ci0JdTggKnRhOwogCXU4IHR0bCwgZmxhZ3MsIGhvcGNvdW50OwogCXU4ICpvcmlnX2FkZHI7CiAJdTMyIG9yaWdfc24sIG1ldHJpYzsKIAotCXRhID0gbWdtdC0+c2E7CiAJdHRsID0gcmFubi0+cmFubl90dGw7CiAJaWYgKHR0bCA8PSAxKSB7CiAJCWlmbXNoLT5tc2hzdGF0cy5kcm9wcGVkX2ZyYW1lc190dGwrKzsKQEAgLTkxOCw2ICs5MjIsNyBAQAogewogCXN0cnVjdCBza19idWZmICpza2JfdG9fZnJlZSA9IE5VTEw7CiAJc3RydWN0IG1lc2hfcGF0aCAqbXBhdGg7CisJc3RydWN0IHN0YV9pbmZvICpuZXh0X2hvcDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAl1OCAqdGFyZ2V0X2FkZHIgPSBoZHItPmFkZHIzOwogCWludCBlcnIgPSAwOwpAQCAtOTQ1LDcgKzk1MCwxMSBAQAogCQkJbWVzaF9xdWV1ZV9wcmVxKG1wYXRoLAogCQkJCQlQUkVRX1FfRl9TVEFSVCB8IFBSRVFfUV9GX1JFRlJFU0gpOwogCQl9Ci0JCW1lbWNweShoZHItPmFkZHIxLCBtcGF0aC0+bmV4dF9ob3AtPnN0YS5hZGRyLCBFVEhfQUxFTik7CisJCW5leHRfaG9wID0gcmN1X2RlcmVmZXJlbmNlKG1wYXRoLT5uZXh0X2hvcCk7CisJCWlmIChuZXh0X2hvcCkKKwkJCW1lbWNweShoZHItPmFkZHIxLCBuZXh0X2hvcC0+c3RhLmFkZHIsIEVUSF9BTEVOKTsKKwkJZWxzZQorCQkJZXJyID0gLUVOT0VOVDsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJCWlmICghKG1wYXRoLT5mbGFncyAmIE1FU0hfUEFUSF9SRVNPTFZJTkcpKSB7CkBAIC05NzEsMjAgKzk4MCwxMSBAQAogCiB2b2lkIG1lc2hfcGF0aF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0Jc3RydWN0IG1lc2hfcGF0aCAqbXBhdGg7CisJc3RydWN0IG1lc2hfcGF0aCAqbXBhdGggPSAodm9pZCAqKSBkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gbXBhdGgtPnNkYXRhOwogCi0JcmN1X3JlYWRfbG9jaygpOwotCW1wYXRoID0gKHN0cnVjdCBtZXNoX3BhdGggKikgZGF0YTsKLQltcGF0aCA9IHJjdV9kZXJlZmVyZW5jZShtcGF0aCk7Ci0JaWYgKCFtcGF0aCkKLQkJZ290byBlbmRtcGF0aHRpbWVyOwotCXNkYXRhID0gbXBhdGgtPnNkYXRhOwotCi0JaWYgKHNkYXRhLT5sb2NhbC0+cXVpZXNjaW5nKSB7Ci0JCXJjdV9yZWFkX3VubG9jaygpOworCWlmIChzZGF0YS0+bG9jYWwtPnF1aWVzY2luZykKIAkJcmV0dXJuOwotCX0KIAogCXNwaW5fbG9ja19iaCgmbXBhdGgtPnN0YXRlX2xvY2spOwogCWlmIChtcGF0aC0+ZmxhZ3MgJiBNRVNIX1BBVEhfUkVTT0xWRUQgfHwKQEAgLTEwMDEsOCArMTAwMSw2IEBACiAJfQogCiAJc3Bpbl91bmxvY2tfYmgoJm1wYXRoLT5zdGF0ZV9sb2NrKTsKLWVuZG1wYXRodGltZXI6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYyBiL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYwppbmRleCAzMzZjYTlkLi44M2NlNDhlIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMKKysrIGIvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jCkBAIC00MCw2ICs0MCw1MCBAQAogc3RhdGljIHN0cnVjdCBtZXNoX3RhYmxlICptcHBfcGF0aHM7IC8qIFN0b3JlIHBhdGhzIGZvciBNUFAmTUFQICovCiAKIGludCBtZXNoX3BhdGhzX2dlbmVyYXRpb247CisKKy8qIFRoaXMgbG9jayB3aWxsIGhhdmUgdGhlIGdyb3cgdGFibGUgZnVuY3Rpb24gYXMgd3JpdGVyIGFuZCBhZGQgLyBkZWxldGUgbm9kZXMKKyAqIGFzIHJlYWRlcnMuIFdoZW4gcmVhZGluZyB0aGUgdGFibGUgKGkuZS4gZG9pbmcgbG9va3Vwcykgd2UgYXJlIHdlbGwgcHJvdGVjdGVkCisgKiBieSBSQ1UKKyAqLworc3RhdGljIERFRklORV9SV0xPQ0socGF0aHRibF9yZXNpemVfbG9jayk7CisKKworc3RhdGljIHN0cnVjdCBtZXNoX3RhYmxlICptZXNoX3RhYmxlX2FsbG9jKGludCBzaXplX29yZGVyKQoreworCWludCBpOworCXN0cnVjdCBtZXNoX3RhYmxlICpuZXd0Ymw7CisKKwluZXd0YmwgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWVzaF90YWJsZSksIEdGUF9LRVJORUwpOworCWlmICghbmV3dGJsKQorCQlyZXR1cm4gTlVMTDsKKworCW5ld3RibC0+aGFzaF9idWNrZXRzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpICoKKwkJCSgxIDw8IHNpemVfb3JkZXIpLCBHRlBfS0VSTkVMKTsKKworCWlmICghbmV3dGJsLT5oYXNoX2J1Y2tldHMpIHsKKwkJa2ZyZWUobmV3dGJsKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbmV3dGJsLT5oYXNod2xvY2sgPSBrbWFsbG9jKHNpemVvZihzcGlubG9ja190KSAqCisJCQkoMSA8PCBzaXplX29yZGVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXd0YmwtPmhhc2h3bG9jaykgeworCQlrZnJlZShuZXd0YmwtPmhhc2hfYnVja2V0cyk7CisJCWtmcmVlKG5ld3RibCk7CisJCXJldHVybiBOVUxMOworCX0KKworCW5ld3RibC0+c2l6ZV9vcmRlciA9IHNpemVfb3JkZXI7CisJbmV3dGJsLT5oYXNoX21hc2sgPSAoMSA8PCBzaXplX29yZGVyKSAtIDE7CisJYXRvbWljX3NldCgmbmV3dGJsLT5lbnRyaWVzLCAgMCk7CisJZ2V0X3JhbmRvbV9ieXRlcygmbmV3dGJsLT5oYXNoX3JuZCwKKwkJCXNpemVvZihuZXd0YmwtPmhhc2hfcm5kKSk7CisJZm9yIChpID0gMDsgaSA8PSBuZXd0YmwtPmhhc2hfbWFzazsgaSsrKQorCQlzcGluX2xvY2tfaW5pdCgmbmV3dGJsLT5oYXNod2xvY2tbaV0pOworCisJcmV0dXJuIG5ld3RibDsKK30KKwogc3RhdGljIHZvaWQgX19tZXNoX3RhYmxlX2ZyZWUoc3RydWN0IG1lc2hfdGFibGUgKnRibCkKIHsKIAlrZnJlZSh0YmwtPmhhc2hfYnVja2V0cyk7CkBAIC00Nyw3ICs5MSw3IEBACiAJa2ZyZWUodGJsKTsKIH0KIAotdm9pZCBtZXNoX3RhYmxlX2ZyZWUoc3RydWN0IG1lc2hfdGFibGUgKnRibCwgYm9vbCBmcmVlX2xlYWZzKQorc3RhdGljIHZvaWQgbWVzaF90YWJsZV9mcmVlKHN0cnVjdCBtZXNoX3RhYmxlICp0YmwsIGJvb2wgZnJlZV9sZWFmcykKIHsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqbWVzaF9oYXNoOwogCXN0cnVjdCBobGlzdF9ub2RlICpwLCAqcTsKQEAgLTU1LDYwICs5OSw1NiBAQAogCiAJbWVzaF9oYXNoID0gdGJsLT5oYXNoX2J1Y2tldHM7CiAJZm9yIChpID0gMDsgaSA8PSB0YmwtPmhhc2hfbWFzazsgaSsrKSB7Ci0JCXNwaW5fbG9jaygmdGJsLT5oYXNod2xvY2tbaV0pOworCQlzcGluX2xvY2tfYmgoJnRibC0+aGFzaHdsb2NrW2ldKTsKIAkJaGxpc3RfZm9yX2VhY2hfc2FmZShwLCBxLCAmbWVzaF9oYXNoW2ldKSB7CiAJCQl0YmwtPmZyZWVfbm9kZShwLCBmcmVlX2xlYWZzKTsKIAkJCWF0b21pY19kZWMoJnRibC0+ZW50cmllcyk7CiAJCX0KLQkJc3Bpbl91bmxvY2soJnRibC0+aGFzaHdsb2NrW2ldKTsKKwkJc3Bpbl91bmxvY2tfYmgoJnRibC0+aGFzaHdsb2NrW2ldKTsKIAl9CiAJX19tZXNoX3RhYmxlX2ZyZWUodGJsKTsKIH0KIAotc3RhdGljIHN0cnVjdCBtZXNoX3RhYmxlICptZXNoX3RhYmxlX2dyb3coc3RydWN0IG1lc2hfdGFibGUgKnRibCkKK3N0YXRpYyBpbnQgbWVzaF90YWJsZV9ncm93KHN0cnVjdCBtZXNoX3RhYmxlICpvbGR0YmwsCisJCQkgICBzdHJ1Y3QgbWVzaF90YWJsZSAqbmV3dGJsKQogewotCXN0cnVjdCBtZXNoX3RhYmxlICpuZXd0Ymw7CiAJc3RydWN0IGhsaXN0X2hlYWQgKm9sZGhhc2g7CiAJc3RydWN0IGhsaXN0X25vZGUgKnAsICpxOwogCWludCBpOwogCi0JaWYgKGF0b21pY19yZWFkKCZ0YmwtPmVudHJpZXMpCi0JCQk8IHRibC0+bWVhbl9jaGFpbl9sZW4gKiAodGJsLT5oYXNoX21hc2sgKyAxKSkKLQkJZ290byBlbmRncm93OworCWlmIChhdG9taWNfcmVhZCgmb2xkdGJsLT5lbnRyaWVzKQorCQkJPCBvbGR0YmwtPm1lYW5fY2hhaW5fbGVuICogKG9sZHRibC0+aGFzaF9tYXNrICsgMSkpCisJCXJldHVybiAtRUFHQUlOOwogCi0JbmV3dGJsID0gbWVzaF90YWJsZV9hbGxvYyh0YmwtPnNpemVfb3JkZXIgKyAxKTsKLQlpZiAoIW5ld3RibCkKLQkJZ290byBlbmRncm93OworCW5ld3RibC0+ZnJlZV9ub2RlID0gb2xkdGJsLT5mcmVlX25vZGU7CisJbmV3dGJsLT5tZWFuX2NoYWluX2xlbiA9IG9sZHRibC0+bWVhbl9jaGFpbl9sZW47CisJbmV3dGJsLT5jb3B5X25vZGUgPSBvbGR0YmwtPmNvcHlfbm9kZTsKKwlhdG9taWNfc2V0KCZuZXd0YmwtPmVudHJpZXMsIGF0b21pY19yZWFkKCZvbGR0YmwtPmVudHJpZXMpKTsKIAotCW5ld3RibC0+ZnJlZV9ub2RlID0gdGJsLT5mcmVlX25vZGU7Ci0JbmV3dGJsLT5tZWFuX2NoYWluX2xlbiA9IHRibC0+bWVhbl9jaGFpbl9sZW47Ci0JbmV3dGJsLT5jb3B5X25vZGUgPSB0YmwtPmNvcHlfbm9kZTsKLQlhdG9taWNfc2V0KCZuZXd0YmwtPmVudHJpZXMsIGF0b21pY19yZWFkKCZ0YmwtPmVudHJpZXMpKTsKLQotCW9sZGhhc2ggPSB0YmwtPmhhc2hfYnVja2V0czsKLQlmb3IgKGkgPSAwOyBpIDw9IHRibC0+aGFzaF9tYXNrOyBpKyspCisJb2xkaGFzaCA9IG9sZHRibC0+aGFzaF9idWNrZXRzOworCWZvciAoaSA9IDA7IGkgPD0gb2xkdGJsLT5oYXNoX21hc2s7IGkrKykKIAkJaGxpc3RfZm9yX2VhY2gocCwgJm9sZGhhc2hbaV0pCi0JCQlpZiAodGJsLT5jb3B5X25vZGUocCwgbmV3dGJsKSA8IDApCisJCQlpZiAob2xkdGJsLT5jb3B5X25vZGUocCwgbmV3dGJsKSA8IDApCiAJCQkJZ290byBlcnJjb3B5OwogCi0JcmV0dXJuIG5ld3RibDsKKwlyZXR1cm4gMDsKIAogZXJyY29weToKIAlmb3IgKGkgPSAwOyBpIDw9IG5ld3RibC0+aGFzaF9tYXNrOyBpKyspIHsKIAkJaGxpc3RfZm9yX2VhY2hfc2FmZShwLCBxLCAmbmV3dGJsLT5oYXNoX2J1Y2tldHNbaV0pCi0JCQl0YmwtPmZyZWVfbm9kZShwLCAwKTsKKwkJCW9sZHRibC0+ZnJlZV9ub2RlKHAsIDApOwogCX0KLQlfX21lc2hfdGFibGVfZnJlZShuZXd0YmwpOwotZW5kZ3JvdzoKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAorc3RhdGljIHUzMiBtZXNoX3RhYmxlX2hhc2godTggKmFkZHIsIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJICAgc3RydWN0IG1lc2hfdGFibGUgKnRibCkKK3sKKwkvKiBVc2UgbGFzdCBmb3VyIGJ5dGVzIG9mIGh3IGFkZHIgYW5kIGludGVyZmFjZSBpbmRleCBhcyBoYXNoIGluZGV4ICovCisJcmV0dXJuIGpoYXNoXzJ3b3JkcygqKHUzMiAqKShhZGRyKzIpLCBzZGF0YS0+ZGV2LT5pZmluZGV4LCB0YmwtPmhhc2hfcm5kKQorCQkmIHRibC0+aGFzaF9tYXNrOworfQogCi0vKiBUaGlzIGxvY2sgd2lsbCBoYXZlIHRoZSBncm93IHRhYmxlIGZ1bmN0aW9uIGFzIHdyaXRlciBhbmQgYWRkIC8gZGVsZXRlIG5vZGVzCi0gKiBhcyByZWFkZXJzLiBXaGVuIHJlYWRpbmcgdGhlIHRhYmxlIChpLmUuIGRvaW5nIGxvb2t1cHMpIHdlIGFyZSB3ZWxsIHByb3RlY3RlZAotICogYnkgUkNVCi0gKi8KLXN0YXRpYyBERUZJTkVfUldMT0NLKHBhdGh0YmxfcmVzaXplX2xvY2spOwogCiAvKioKICAqCkBAIC0yODAsNyArMzIwLDcgQEAKIAlpZiAoIW5ld19ub2RlKQogCQlnb3RvIGVycl9ub2RlX2FsbG9jOwogCi0JcmVhZF9sb2NrKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKKwlyZWFkX2xvY2tfYmgoJnBhdGh0YmxfcmVzaXplX2xvY2spOwogCW1lbWNweShuZXdfbXBhdGgtPmRzdCwgZHN0LCBFVEhfQUxFTik7CiAJbmV3X21wYXRoLT5zZGF0YSA9IHNkYXRhOwogCW5ld19tcGF0aC0+ZmxhZ3MgPSAwOwpAQCAtMjk1LDcgKzMzNSw3IEBACiAJaGFzaF9pZHggPSBtZXNoX3RhYmxlX2hhc2goZHN0LCBzZGF0YSwgbWVzaF9wYXRocyk7CiAJYnVja2V0ID0gJm1lc2hfcGF0aHMtPmhhc2hfYnVja2V0c1toYXNoX2lkeF07CiAKLQlzcGluX2xvY2soJm1lc2hfcGF0aHMtPmhhc2h3bG9ja1toYXNoX2lkeF0pOworCXNwaW5fbG9ja19iaCgmbWVzaF9wYXRocy0+aGFzaHdsb2NrW2hhc2hfaWR4XSk7CiAKIAllcnIgPSAtRUVYSVNUOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsIG4sIGJ1Y2tldCwgbGlzdCkgewpAQCAtMzExLDggKzM1MSw4IEBACiAKIAltZXNoX3BhdGhzX2dlbmVyYXRpb24rKzsKIAotCXNwaW5fdW5sb2NrKCZtZXNoX3BhdGhzLT5oYXNod2xvY2tbaGFzaF9pZHhdKTsKLQlyZWFkX3VubG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJm1lc2hfcGF0aHMtPmhhc2h3bG9ja1toYXNoX2lkeF0pOworCXJlYWRfdW5sb2NrX2JoKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKIAlpZiAoZ3JvdykgewogCQlzZXRfYml0KE1FU0hfV09SS19HUk9XX01QQVRIX1RBQkxFLCAgJmlmbXNoLT53cmtxX2ZsYWdzKTsKIAkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJnNkYXRhLT53b3JrKTsKQEAgLTMyMCw4ICszNjAsOCBAQAogCXJldHVybiAwOwogCiBlcnJfZXhpc3RzOgotCXNwaW5fdW5sb2NrKCZtZXNoX3BhdGhzLT5oYXNod2xvY2tbaGFzaF9pZHhdKTsKLQlyZWFkX3VubG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJm1lc2hfcGF0aHMtPmhhc2h3bG9ja1toYXNoX2lkeF0pOworCXJlYWRfdW5sb2NrX2JoKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKIAlrZnJlZShuZXdfbm9kZSk7CiBlcnJfbm9kZV9hbGxvYzoKIAlrZnJlZShuZXdfbXBhdGgpOwpAQCAtMzM0LDE1ICszNzQsMjEgQEAKIHsKIAlzdHJ1Y3QgbWVzaF90YWJsZSAqb2xkdGJsLCAqbmV3dGJsOwogCi0Jd3JpdGVfbG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7CisJcmN1X3JlYWRfbG9jaygpOworCW5ld3RibCA9IG1lc2hfdGFibGVfYWxsb2MocmN1X2RlcmVmZXJlbmNlKG1lc2hfcGF0aHMpLT5zaXplX29yZGVyICsgMSk7CisJaWYgKCFuZXd0YmwpCisJCXJldHVybjsKKwl3cml0ZV9sb2NrX2JoKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKIAlvbGR0YmwgPSBtZXNoX3BhdGhzOwotCW5ld3RibCA9IG1lc2hfdGFibGVfZ3JvdyhtZXNoX3BhdGhzKTsKLQlpZiAoIW5ld3RibCkgewotCQl3cml0ZV91bmxvY2soJnBhdGh0YmxfcmVzaXplX2xvY2spOworCWlmIChtZXNoX3RhYmxlX2dyb3cobWVzaF9wYXRocywgbmV3dGJsKSA8IDApIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCV9fbWVzaF90YWJsZV9mcmVlKG5ld3RibCk7CisJCXdyaXRlX3VubG9ja19iaCgmcGF0aHRibF9yZXNpemVfbG9jayk7CiAJCXJldHVybjsKIAl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKG1lc2hfcGF0aHMsIG5ld3RibCk7Ci0Jd3JpdGVfdW5sb2NrKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKKwl3cml0ZV91bmxvY2tfYmgoJnBhdGh0YmxfcmVzaXplX2xvY2spOwogCiAJc3luY2hyb25pemVfcmN1KCk7CiAJbWVzaF90YWJsZV9mcmVlKG9sZHRibCwgZmFsc2UpOwpAQCAtMzUyLDE1ICszOTgsMjEgQEAKIHsKIAlzdHJ1Y3QgbWVzaF90YWJsZSAqb2xkdGJsLCAqbmV3dGJsOwogCi0Jd3JpdGVfbG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7CisJcmN1X3JlYWRfbG9jaygpOworCW5ld3RibCA9IG1lc2hfdGFibGVfYWxsb2MocmN1X2RlcmVmZXJlbmNlKG1wcF9wYXRocyktPnNpemVfb3JkZXIgKyAxKTsKKwlpZiAoIW5ld3RibCkKKwkJcmV0dXJuOworCXdyaXRlX2xvY2tfYmgoJnBhdGh0YmxfcmVzaXplX2xvY2spOwogCW9sZHRibCA9IG1wcF9wYXRoczsKLQluZXd0YmwgPSBtZXNoX3RhYmxlX2dyb3cobXBwX3BhdGhzKTsKLQlpZiAoIW5ld3RibCkgewotCQl3cml0ZV91bmxvY2soJnBhdGh0YmxfcmVzaXplX2xvY2spOworCWlmIChtZXNoX3RhYmxlX2dyb3cobXBwX3BhdGhzLCBuZXd0YmwpIDwgMCkgeworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJX19tZXNoX3RhYmxlX2ZyZWUobmV3dGJsKTsKKwkJd3JpdGVfdW5sb2NrX2JoKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKIAkJcmV0dXJuOwogCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKIAlyY3VfYXNzaWduX3BvaW50ZXIobXBwX3BhdGhzLCBuZXd0YmwpOwotCXdyaXRlX3VubG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7CisJd3JpdGVfdW5sb2NrX2JoKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKIAogCXN5bmNocm9uaXplX3JjdSgpOwogCW1lc2hfdGFibGVfZnJlZShvbGR0YmwsIGZhbHNlKTsKQEAgLTM5NCw3ICs0NDYsNyBAQAogCWlmICghbmV3X25vZGUpCiAJCWdvdG8gZXJyX25vZGVfYWxsb2M7CiAKLQlyZWFkX2xvY2soJnBhdGh0YmxfcmVzaXplX2xvY2spOworCXJlYWRfbG9ja19iaCgmcGF0aHRibF9yZXNpemVfbG9jayk7CiAJbWVtY3B5KG5ld19tcGF0aC0+ZHN0LCBkc3QsIEVUSF9BTEVOKTsKIAltZW1jcHkobmV3X21wYXRoLT5tcHAsIG1wcCwgRVRIX0FMRU4pOwogCW5ld19tcGF0aC0+c2RhdGEgPSBzZGF0YTsKQEAgLTQwNyw3ICs0NTksNyBAQAogCWhhc2hfaWR4ID0gbWVzaF90YWJsZV9oYXNoKGRzdCwgc2RhdGEsIG1wcF9wYXRocyk7CiAJYnVja2V0ID0gJm1wcF9wYXRocy0+aGFzaF9idWNrZXRzW2hhc2hfaWR4XTsKIAotCXNwaW5fbG9jaygmbXBwX3BhdGhzLT5oYXNod2xvY2tbaGFzaF9pZHhdKTsKKwlzcGluX2xvY2tfYmgoJm1wcF9wYXRocy0+aGFzaHdsb2NrW2hhc2hfaWR4XSk7CiAKIAllcnIgPSAtRUVYSVNUOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsIG4sIGJ1Y2tldCwgbGlzdCkgewpAQCAtNDIxLDggKzQ3Myw4IEBACiAJCW1wcF9wYXRocy0+bWVhbl9jaGFpbl9sZW4gKiAobXBwX3BhdGhzLT5oYXNoX21hc2sgKyAxKSkKIAkJZ3JvdyA9IDE7CiAKLQlzcGluX3VubG9jaygmbXBwX3BhdGhzLT5oYXNod2xvY2tbaGFzaF9pZHhdKTsKLQlyZWFkX3VubG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJm1wcF9wYXRocy0+aGFzaHdsb2NrW2hhc2hfaWR4XSk7CisJcmVhZF91bmxvY2tfYmgoJnBhdGh0YmxfcmVzaXplX2xvY2spOwogCWlmIChncm93KSB7CiAJCXNldF9iaXQoTUVTSF9XT1JLX0dST1dfTVBQX1RBQkxFLCAgJmlmbXNoLT53cmtxX2ZsYWdzKTsKIAkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJnNkYXRhLT53b3JrKTsKQEAgLTQzMCw4ICs0ODIsOCBAQAogCXJldHVybiAwOwogCiBlcnJfZXhpc3RzOgotCXNwaW5fdW5sb2NrKCZtcHBfcGF0aHMtPmhhc2h3bG9ja1toYXNoX2lkeF0pOwotCXJlYWRfdW5sb2NrKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmbXBwX3BhdGhzLT5oYXNod2xvY2tbaGFzaF9pZHhdKTsKKwlyZWFkX3VubG9ja19iaCgmcGF0aHRibF9yZXNpemVfbG9jayk7CiAJa2ZyZWUobmV3X25vZGUpOwogZXJyX25vZGVfYWxsb2M6CiAJa2ZyZWUobmV3X21wYXRoKTsKQEAgLTU0NCwxMSArNTk2LDExIEBACiAJaW50IGhhc2hfaWR4OwogCWludCBlcnIgPSAwOwogCi0JcmVhZF9sb2NrKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKKwlyZWFkX2xvY2tfYmgoJnBhdGh0YmxfcmVzaXplX2xvY2spOwogCWhhc2hfaWR4ID0gbWVzaF90YWJsZV9oYXNoKGFkZHIsIHNkYXRhLCBtZXNoX3BhdGhzKTsKIAlidWNrZXQgPSAmbWVzaF9wYXRocy0+aGFzaF9idWNrZXRzW2hhc2hfaWR4XTsKIAotCXNwaW5fbG9jaygmbWVzaF9wYXRocy0+aGFzaHdsb2NrW2hhc2hfaWR4XSk7CisJc3Bpbl9sb2NrX2JoKCZtZXNoX3BhdGhzLT5oYXNod2xvY2tbaGFzaF9pZHhdKTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCBuLCBidWNrZXQsIGxpc3QpIHsKIAkJbXBhdGggPSBub2RlLT5tcGF0aDsKIAkJaWYgKG1wYXRoLT5zZGF0YSA9PSBzZGF0YSAmJgpAQCAtNTY2LDggKzYxOCw4IEBACiAJZXJyID0gLUVOWElPOwogZW5kZGVsOgogCW1lc2hfcGF0aHNfZ2VuZXJhdGlvbisrOwotCXNwaW5fdW5sb2NrKCZtZXNoX3BhdGhzLT5oYXNod2xvY2tbaGFzaF9pZHhdKTsKLQlyZWFkX3VubG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJm1lc2hfcGF0aHMtPmhhc2h3bG9ja1toYXNoX2lkeF0pOworCXJlYWRfdW5sb2NrX2JoKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC03MTksNyArNzcxLDcgQEAKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcDsKIAlpbnQgaTsKIAotCXJlYWRfbG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7CisJcmVhZF9sb2NrX2JoKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKIAlmb3JfZWFjaF9tZXNoX2VudHJ5KG1lc2hfcGF0aHMsIHAsIG5vZGUsIGkpIHsKIAkJaWYgKG5vZGUtPm1wYXRoLT5zZGF0YSAhPSBzZGF0YSkKIAkJCWNvbnRpbnVlOwpAQCAtNzM0LDcgKzc4Niw3IEBACiAJCX0gZWxzZQogCQkJc3Bpbl91bmxvY2tfYmgoJm1wYXRoLT5zdGF0ZV9sb2NrKTsKIAl9Ci0JcmVhZF91bmxvY2soJnBhdGh0YmxfcmVzaXplX2xvY2spOworCXJlYWRfdW5sb2NrX2JoKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKIH0KIAogdm9pZCBtZXNoX3BhdGh0YmxfdW5yZWdpc3Rlcih2b2lkKQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2hfcGxpbmsuYyBiL25ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMKaW5kZXggNDRiNTM5My4uZjRhZGMwOSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21lc2hfcGxpbmsuYworKysgYi9uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jCkBAIC00Myw3ICs0Myw3IEBACiAjZGVmaW5lIGRvdDExTWVzaE1heFBlZXJMaW5rcyhzKSAocy0+dS5tZXNoLm1zaGNmZy5kb3QxMU1lc2hNYXhQZWVyTGlua3MpCiAKIGVudW0gcGxpbmtfZnJhbWVfdHlwZSB7Ci0JUExJTktfT1BFTiA9IDAsCisJUExJTktfT1BFTiA9IDEsCiAJUExJTktfQ09ORklSTSwKIAlQTElOS19DTE9TRQogfTsKQEAgLTgzLDcgKzgzLDcgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIG1lc2hfcGxpbmtfZnNtX3Jlc3RhcnQoc3RydWN0IHN0YV9pbmZvICpzdGEpCiB7Ci0Jc3RhLT5wbGlua19zdGF0ZSA9IFBMSU5LX0xJU1RFTjsKKwlzdGEtPnBsaW5rX3N0YXRlID0gTkw4MDIxMV9QTElOS19MSVNURU47CiAJc3RhLT5sbGlkID0gc3RhLT5wbGlkID0gc3RhLT5yZWFzb24gPSAwOwogCXN0YS0+cGxpbmtfcmV0cmllcyA9IDA7CiB9CkBAIC0xMDUsNyArMTA1LDcgQEAKIAlpZiAoIXN0YSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlzdGEtPmZsYWdzID0gV0xBTl9TVEFfQVVUSE9SSVpFRDsKKwlzdGEtPmZsYWdzID0gV0xBTl9TVEFfQVVUSE9SSVpFRCB8IFdMQU5fU1RBX0FVVEg7CiAJc3RhLT5zdGEuc3VwcF9yYXRlc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXSA9IHJhdGVzOwogCXJhdGVfY29udHJvbF9yYXRlX2luaXQoc3RhKTsKIApAQCAtMTI2LDExICsxMjYsMTEgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHN0YS0+c2RhdGE7CiAJYm9vbCBkZWFjdGl2YXRlZCA9IGZhbHNlOwogCi0JaWYgKHN0YS0+cGxpbmtfc3RhdGUgPT0gUExJTktfRVNUQUIpIHsKKwlpZiAoc3RhLT5wbGlua19zdGF0ZSA9PSBOTDgwMjExX1BMSU5LX0VTVEFCKSB7CiAJCW1lc2hfcGxpbmtfZGVjX2VzdGFiX2NvdW50KHNkYXRhKTsKIAkJZGVhY3RpdmF0ZWQgPSB0cnVlOwogCX0KLQlzdGEtPnBsaW5rX3N0YXRlID0gUExJTktfQkxPQ0tFRDsKKwlzdGEtPnBsaW5rX3N0YXRlID0gTkw4MDIxMV9QTElOS19CTE9DS0VEOwogCW1lc2hfcGF0aF9mbHVzaF9ieV9uZXh0aG9wKHN0YSk7CiAKIAlyZXR1cm4gZGVhY3RpdmF0ZWQ7CkBAIC0xNjEsNyArMTYxLDcgQEAKIAkJX19sZTE2IHJlYXNvbikgewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBza19idWZmICpza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIDQwMCArCi0JCQlzZGF0YS0+dS5tZXNoLnZlbmRvcl9pZV9sZW4pOworCQkJc2RhdGEtPnUubWVzaC5pZV9sZW4pOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKIAlib29sIGluY2x1ZGVfcGxpZCA9IGZhbHNlOwogCXN0YXRpYyBjb25zdCB1OCBtZXNocGVlcmluZ3Byb3RvW10gPSB7IDB4MDAsIDB4MEYsIDB4QUMsIDB4MkEgfTsKQEAgLTE4MSw4ICsxODEsOCBAQAogCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BQ1RJT04pOwogCW1lbWNweShtZ210LT5kYSwgZGEsIEVUSF9BTEVOKTsKIAltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pOwotCS8qIEJTU0lEIGlzIGxlZnQgemVyb2VkLCB3aWxkY2FyZCB2YWx1ZSAqLwotCW1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5ID0gV0xBTl9DQVRFR09SWV9NRVNIX1BMSU5LOworCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTik7CisJbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgPSBXTEFOX0NBVEVHT1JZX01FU0hfQUNUSU9OOwogCW1nbXQtPnUuYWN0aW9uLnUucGxpbmtfYWN0aW9uLmFjdGlvbl9jb2RlID0gYWN0aW9uOwogCiAJaWYgKGFjdGlvbiA9PSBQTElOS19DTE9TRSkKQEAgLTIzNyw4ICsyMzcsOSBAQAogCXJldHVybiAwOwogfQogCi12b2lkIG1lc2hfbmVpZ2hib3VyX3VwZGF0ZSh1OCAqaHdfYWRkciwgdTMyIHJhdGVzLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCSAgIGJvb2wgcGVlcl9hY2NlcHRpbmdfcGxpbmtzKQordm9pZCBtZXNoX25laWdoYm91cl91cGRhdGUodTggKmh3X2FkZHIsIHUzMiByYXRlcywKKwkJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCXN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKQEAgLTI0OCw4ICsyNDksMTQgQEAKIAlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEsIGh3X2FkZHIpOwogCWlmICghc3RhKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwotCi0JCXN0YSA9IG1lc2hfcGxpbmtfYWxsb2Moc2RhdGEsIGh3X2FkZHIsIHJhdGVzKTsKKwkJLyogVXNlcnNwYWNlIGhhbmRsZXMgcGVlciBhbGxvY2F0aW9uIHdoZW4gc2VjdXJpdHkgaXMgZW5hYmxlZAorCQkgKiAqLworCQlpZiAoc2RhdGEtPnUubWVzaC5zZWN1cml0eSAmIElFRUU4MDIxMV9NRVNIX1NFQ19BVVRIRUQpCisJCQljZmc4MDIxMV9ub3RpZnlfbmV3X3BlZXJfY2FuZGlkYXRlKHNkYXRhLT5kZXYsIGh3X2FkZHIsCisJCQkJCWVsZW1zLT5pZV9zdGFydCwgZWxlbXMtPnRvdGFsX2xlbiwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJCWVsc2UKKwkJCXN0YSA9IG1lc2hfcGxpbmtfYWxsb2Moc2RhdGEsIGh3X2FkZHIsIHJhdGVzKTsKIAkJaWYgKCFzdGEpCiAJCQlyZXR1cm47CiAJCWlmIChzdGFfaW5mb19pbnNlcnRfcmN1KHN0YSkpIHsKQEAgLTI2MCw3ICsyNjcsOCBAQAogCiAJc3RhLT5sYXN0X3J4ID0gamlmZmllczsKIAlzdGEtPnN0YS5zdXBwX3JhdGVzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdID0gcmF0ZXM7Ci0JaWYgKHBlZXJfYWNjZXB0aW5nX3BsaW5rcyAmJiBzdGEtPnBsaW5rX3N0YXRlID09IFBMSU5LX0xJU1RFTiAmJgorCWlmIChtZXNoX3BlZXJfYWNjZXB0c19wbGlua3MoZWxlbXMpICYmCisJCQlzdGEtPnBsaW5rX3N0YXRlID09IE5MODAyMTFfUExJTktfTElTVEVOICYmCiAJCQlzZGF0YS0+dS5tZXNoLmFjY2VwdGluZ19wbGlua3MgJiYKIAkJCXNkYXRhLT51Lm1lc2gubXNoY2ZnLmF1dG9fb3Blbl9wbGlua3MpCiAJCW1lc2hfcGxpbmtfb3BlbihzdGEpOwpAQCAtMzAwLDggKzMwOCw4IEBACiAJc2RhdGEgPSBzdGEtPnNkYXRhOwogCiAJc3dpdGNoIChzdGEtPnBsaW5rX3N0YXRlKSB7Ci0JY2FzZSBQTElOS19PUE5fUkNWRDoKLQljYXNlIFBMSU5LX09QTl9TTlQ6CisJY2FzZSBOTDgwMjExX1BMSU5LX09QTl9SQ1ZEOgorCWNhc2UgTkw4MDIxMV9QTElOS19PUE5fU05UOgogCQkvKiByZXRyeSB0aW1lciAqLwogCQlpZiAoc3RhLT5wbGlua19yZXRyaWVzIDwgZG90MTFNZXNoTWF4UmV0cmllcyhzZGF0YSkpIHsKIAkJCXUzMiByYW5kOwpAQCAtMzIwLDE3ICszMjgsMTcgQEAKIAkJfQogCQlyZWFzb24gPSBjcHVfdG9fbGUxNihNRVNIX01BWF9SRVRSSUVTKTsKIAkJLyogZmFsbCB0aHJvdWdoIG9uIGVsc2UgKi8KLQljYXNlIFBMSU5LX0NORl9SQ1ZEOgorCWNhc2UgTkw4MDIxMV9QTElOS19DTkZfUkNWRDoKIAkJLyogY29uZmlybSB0aW1lciAqLwogCQlpZiAoIXJlYXNvbikKIAkJCXJlYXNvbiA9IGNwdV90b19sZTE2KE1FU0hfQ09ORklSTV9USU1FT1VUKTsKLQkJc3RhLT5wbGlua19zdGF0ZSA9IFBMSU5LX0hPTERJTkc7CisJCXN0YS0+cGxpbmtfc3RhdGUgPSBOTDgwMjExX1BMSU5LX0hPTERJTkc7CiAJCW1vZF9wbGlua190aW1lcihzdGEsIGRvdDExTWVzaEhvbGRpbmdUaW1lb3V0KHNkYXRhKSk7CiAJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwogCQltZXNoX3BsaW5rX2ZyYW1lX3R4KHNkYXRhLCBQTElOS19DTE9TRSwgc3RhLT5zdGEuYWRkciwgbGxpZCwgcGxpZCwKIAkJCQkgICAgcmVhc29uKTsKIAkJYnJlYWs7Ci0JY2FzZSBQTElOS19IT0xESU5HOgorCWNhc2UgTkw4MDIxMV9QTElOS19IT0xESU5HOgogCQkvKiBob2xkaW5nIHRpbWVyICovCiAJCWRlbF90aW1lcigmc3RhLT5wbGlua190aW1lcik7CiAJCW1lc2hfcGxpbmtfZnNtX3Jlc3RhcnQoc3RhKTsKQEAgLTM3MiwxNCArMzgwLDE3IEBACiAJX19sZTE2IGxsaWQ7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBzdGEtPnNkYXRhOwogCisJaWYgKCF0ZXN0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX0FVVEgpKQorCQlyZXR1cm4gLUVQRVJNOworCiAJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwogCWdldF9yYW5kb21fYnl0ZXMoJmxsaWQsIDIpOwogCXN0YS0+bGxpZCA9IGxsaWQ7Ci0JaWYgKHN0YS0+cGxpbmtfc3RhdGUgIT0gUExJTktfTElTVEVOKSB7CisJaWYgKHN0YS0+cGxpbmtfc3RhdGUgIT0gTkw4MDIxMV9QTElOS19MSVNURU4pIHsKIAkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQotCXN0YS0+cGxpbmtfc3RhdGUgPSBQTElOS19PUE5fU05UOworCXN0YS0+cGxpbmtfc3RhdGUgPSBOTDgwMjExX1BMSU5LX09QTl9TTlQ7CiAJbWVzaF9wbGlua190aW1lcl9zZXQoc3RhLCBkb3QxMU1lc2hSZXRyeVRpbWVvdXQoc2RhdGEpKTsKIAlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIAltcGxfZGJnKCJNZXNoIHBsaW5rOiBzdGFydGluZyBlc3RhYmxpc2htZW50IHdpdGggJXBNXG4iLApAQCAtMzk2LDcgKzQwNyw3IEBACiAKIAlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CiAJZGVhY3RpdmF0ZWQgPSBfX21lc2hfcGxpbmtfZGVhY3RpdmF0ZShzdGEpOwotCXN0YS0+cGxpbmtfc3RhdGUgPSBQTElOS19CTE9DS0VEOworCXN0YS0+cGxpbmtfc3RhdGUgPSBOTDgwMjExX1BMSU5LX0JMT0NLRUQ7CiAJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAKIAlpZiAoZGVhY3RpdmF0ZWQpCkBAIC00MTksMTMgKzQzMCwxMyBAQAogCV9fbGUxNiBwbGlkLCBsbGlkLCByZWFzb247CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfTVBMX0RFQlVHCiAJc3RhdGljIGNvbnN0IGNoYXIgKm1wbHN0YXRlc1tdID0gewotCQlbUExJTktfTElTVEVOXSA9ICJMSVNURU4iLAotCQlbUExJTktfT1BOX1NOVF0gPSAiT1BOLVNOVCIsCi0JCVtQTElOS19PUE5fUkNWRF0gPSAiT1BOLVJDVkQiLAotCQlbUExJTktfQ05GX1JDVkRdID0gIkNORl9SQ1ZEIiwKLQkJW1BMSU5LX0VTVEFCXSA9ICJFU1RBQiIsCi0JCVtQTElOS19IT0xESU5HXSA9ICJIT0xESU5HIiwKLQkJW1BMSU5LX0JMT0NLRURdID0gIkJMT0NLRUQiCisJCVtOTDgwMjExX1BMSU5LX0xJU1RFTl0gPSAiTElTVEVOIiwKKwkJW05MODAyMTFfUExJTktfT1BOX1NOVF0gPSAiT1BOLVNOVCIsCisJCVtOTDgwMjExX1BMSU5LX09QTl9SQ1ZEXSA9ICJPUE4tUkNWRCIsCisJCVtOTDgwMjExX1BMSU5LX0NORl9SQ1ZEXSA9ICJDTkZfUkNWRCIsCisJCVtOTDgwMjExX1BMSU5LX0VTVEFCXSA9ICJFU1RBQiIsCisJCVtOTDgwMjExX1BMSU5LX0hPTERJTkddID0gIkhPTERJTkciLAorCQlbTkw4MDIxMV9QTElOS19CTE9DS0VEXSA9ICJCTE9DS0VEIgogCX07CiAjZW5kaWYKIApAQCAtNDQ5LDYgKzQ2MCwxMSBAQAogCQltcGxfZGJnKCJNZXNoIHBsaW5rOiBtaXNzaW5nIG5lY2Vzc2FyeSBwZWVyIGxpbmsgaWVcbiIpOwogCQlyZXR1cm47CiAJfQorCWlmIChlbGVtcy5yc25fbGVuICYmCisJCQlzZGF0YS0+dS5tZXNoLnNlY3VyaXR5ID09IElFRUU4MDIxMV9NRVNIX1NFQ19OT05FKSB7CisJCW1wbF9kYmcoIk1lc2ggcGxpbms6IGNhbid0IGVzdGFibGlzaCBsaW5rIHdpdGggc2VjdXJlIHBlZXJcbiIpOworCQlyZXR1cm47CisJfQogCiAJZnR5cGUgPSBtZ210LT51LmFjdGlvbi51LnBsaW5rX2FjdGlvbi5hY3Rpb25fY29kZTsKIAlpZV9sZW4gPSBlbGVtcy5wZWVyX2xpbmtfbGVuOwpAQCAtNDgwLDcgKzQ5NiwxMyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKHN0YSAmJiBzdGEtPnBsaW5rX3N0YXRlID09IFBMSU5LX0JMT0NLRUQpIHsKKwlpZiAoc3RhICYmICF0ZXN0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX0FVVEgpKSB7CisJCW1wbF9kYmcoIk1lc2ggcGxpbms6IEFjdGlvbiBmcmFtZSBmcm9tIG5vbi1hdXRoZWQgcGVlclxuIik7CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlyZXR1cm47CisJfQorCisJaWYgKHN0YSAmJiBzdGEtPnBsaW5rX3N0YXRlID09IE5MODAyMTFfUExJTktfQkxPQ0tFRCkgewogCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcmV0dXJuOwogCX0KQEAgLTU1MCw3ICs1NzIsNyBAQAogCQkJCWV2ZW50ID0gQ05GX0FDUFQ7CiAJCQlicmVhazsKIAkJY2FzZSBQTElOS19DTE9TRToKLQkJCWlmIChzdGEtPnBsaW5rX3N0YXRlID09IFBMSU5LX0VTVEFCKQorCQkJaWYgKHN0YS0+cGxpbmtfc3RhdGUgPT0gTkw4MDIxMV9QTElOS19FU1RBQikKIAkJCQkvKiBEbyBub3QgY2hlY2sgZm9yIGxsaWQgb3IgcGxpZC4gVGhpcyBkb2VzIG5vdAogCQkJCSAqIGZvbGxvdyB0aGUgc3RhbmRhcmQgYnV0IHNpbmNlIG11bHRpcGxlIHBsaW5rcwogCQkJCSAqIHBlciBzdGEgYXJlIG5vdCBzdXBwb3J0ZWQsIGl0IGlzIG5lY2Vzc2FyeSBpbgpAQCAtNTg1LDE0ICs2MDcsMTQgQEAKIAlyZWFzb24gPSAwOwogCXN3aXRjaCAoc3RhLT5wbGlua19zdGF0ZSkgewogCQkvKiBzcGluX3VubG9jayBhcyBzb29uIGFzIHN0YXRlIGlzIHVwZGF0ZWQgYXQgZWFjaCBjYXNlICovCi0JY2FzZSBQTElOS19MSVNURU46CisJY2FzZSBOTDgwMjExX1BMSU5LX0xJU1RFTjoKIAkJc3dpdGNoIChldmVudCkgewogCQljYXNlIENMU19BQ1BUOgogCQkJbWVzaF9wbGlua19mc21fcmVzdGFydChzdGEpOwogCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAJCQlicmVhazsKIAkJY2FzZSBPUE5fQUNQVDoKLQkJCXN0YS0+cGxpbmtfc3RhdGUgPSBQTElOS19PUE5fUkNWRDsKKwkJCXN0YS0+cGxpbmtfc3RhdGUgPSBOTDgwMjExX1BMSU5LX09QTl9SQ1ZEOwogCQkJc3RhLT5wbGlkID0gcGxpZDsKIAkJCWdldF9yYW5kb21fYnl0ZXMoJmxsaWQsIDIpOwogCQkJc3RhLT5sbGlkID0gbGxpZDsKQEAgLTYwOSw3ICs2MzEsNyBAQAogCQl9CiAJCWJyZWFrOwogCi0JY2FzZSBQTElOS19PUE5fU05UOgorCWNhc2UgTkw4MDIxMV9QTElOS19PUE5fU05UOgogCQlzd2l0Y2ggKGV2ZW50KSB7CiAJCWNhc2UgT1BOX1JKQ1Q6CiAJCWNhc2UgQ05GX1JKQ1Q6CkBAIC02MTgsNyArNjQwLDcgQEAKIAkJCWlmICghcmVhc29uKQogCQkJCXJlYXNvbiA9IGNwdV90b19sZTE2KE1FU0hfQ0xPU0VfUkNWRCk7CiAJCQlzdGEtPnJlYXNvbiA9IHJlYXNvbjsKLQkJCXN0YS0+cGxpbmtfc3RhdGUgPSBQTElOS19IT0xESU5HOworCQkJc3RhLT5wbGlua19zdGF0ZSA9IE5MODAyMTFfUExJTktfSE9MRElORzsKIAkJCWlmICghbW9kX3BsaW5rX3RpbWVyKHN0YSwKIAkJCQkJICAgICBkb3QxMU1lc2hIb2xkaW5nVGltZW91dChzZGF0YSkpKQogCQkJCXN0YS0+aWdub3JlX3BsaW5rX3RpbWVyID0gdHJ1ZTsKQEAgLTYzMCw3ICs2NTIsNyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgT1BOX0FDUFQ6CiAJCQkvKiByZXRyeSB0aW1lciBpcyBsZWZ0IHVudG91Y2hlZCAqLwotCQkJc3RhLT5wbGlua19zdGF0ZSA9IFBMSU5LX09QTl9SQ1ZEOworCQkJc3RhLT5wbGlua19zdGF0ZSA9IE5MODAyMTFfUExJTktfT1BOX1JDVkQ7CiAJCQlzdGEtPnBsaWQgPSBwbGlkOwogCQkJbGxpZCA9IHN0YS0+bGxpZDsKIAkJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwpAQCAtNjM4LDcgKzY2MCw3IEBACiAJCQkJCSAgICBwbGlkLCAwKTsKIAkJCWJyZWFrOwogCQljYXNlIENORl9BQ1BUOgotCQkJc3RhLT5wbGlua19zdGF0ZSA9IFBMSU5LX0NORl9SQ1ZEOworCQkJc3RhLT5wbGlua19zdGF0ZSA9IE5MODAyMTFfUExJTktfQ05GX1JDVkQ7CiAJCQlpZiAoIW1vZF9wbGlua190aW1lcihzdGEsCiAJCQkJCSAgICAgZG90MTFNZXNoQ29uZmlybVRpbWVvdXQoc2RhdGEpKSkKIAkJCQlzdGEtPmlnbm9yZV9wbGlua190aW1lciA9IHRydWU7CkBAIC02NTEsNyArNjczLDcgQEAKIAkJfQogCQlicmVhazsKIAotCWNhc2UgUExJTktfT1BOX1JDVkQ6CisJY2FzZSBOTDgwMjExX1BMSU5LX09QTl9SQ1ZEOgogCQlzd2l0Y2ggKGV2ZW50KSB7CiAJCWNhc2UgT1BOX1JKQ1Q6CiAJCWNhc2UgQ05GX1JKQ1Q6CkBAIC02NjAsNyArNjgyLDcgQEAKIAkJCWlmICghcmVhc29uKQogCQkJCXJlYXNvbiA9IGNwdV90b19sZTE2KE1FU0hfQ0xPU0VfUkNWRCk7CiAJCQlzdGEtPnJlYXNvbiA9IHJlYXNvbjsKLQkJCXN0YS0+cGxpbmtfc3RhdGUgPSBQTElOS19IT0xESU5HOworCQkJc3RhLT5wbGlua19zdGF0ZSA9IE5MODAyMTFfUExJTktfSE9MRElORzsKIAkJCWlmICghbW9kX3BsaW5rX3RpbWVyKHN0YSwKIAkJCQkJICAgICBkb3QxMU1lc2hIb2xkaW5nVGltZW91dChzZGF0YSkpKQogCQkJCXN0YS0+aWdub3JlX3BsaW5rX3RpbWVyID0gdHJ1ZTsKQEAgLTY3OCw3ICs3MDAsNyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgQ05GX0FDUFQ6CiAJCQlkZWxfdGltZXIoJnN0YS0+cGxpbmtfdGltZXIpOwotCQkJc3RhLT5wbGlua19zdGF0ZSA9IFBMSU5LX0VTVEFCOworCQkJc3RhLT5wbGlua19zdGF0ZSA9IE5MODAyMTFfUExJTktfRVNUQUI7CiAJCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIAkJCW1lc2hfcGxpbmtfaW5jX2VzdGFiX2NvdW50KHNkYXRhKTsKIAkJCWllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLCBCU1NfQ0hBTkdFRF9CRUFDT04pOwpAQCAtNjkxLDcgKzcxMyw3IEBACiAJCX0KIAkJYnJlYWs7CiAKLQljYXNlIFBMSU5LX0NORl9SQ1ZEOgorCWNhc2UgTkw4MDIxMV9QTElOS19DTkZfUkNWRDoKIAkJc3dpdGNoIChldmVudCkgewogCQljYXNlIE9QTl9SSkNUOgogCQljYXNlIENORl9SSkNUOgpAQCAtNzAwLDcgKzcyMiw3IEBACiAJCQlpZiAoIXJlYXNvbikKIAkJCQlyZWFzb24gPSBjcHVfdG9fbGUxNihNRVNIX0NMT1NFX1JDVkQpOwogCQkJc3RhLT5yZWFzb24gPSByZWFzb247Ci0JCQlzdGEtPnBsaW5rX3N0YXRlID0gUExJTktfSE9MRElORzsKKwkJCXN0YS0+cGxpbmtfc3RhdGUgPSBOTDgwMjExX1BMSU5LX0hPTERJTkc7CiAJCQlpZiAoIW1vZF9wbGlua190aW1lcihzdGEsCiAJCQkJCSAgICAgZG90MTFNZXNoSG9sZGluZ1RpbWVvdXQoc2RhdGEpKSkKIAkJCQlzdGEtPmlnbm9yZV9wbGlua190aW1lciA9IHRydWU7CkBAIC03MTIsNyArNzM0LDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIE9QTl9BQ1BUOgogCQkJZGVsX3RpbWVyKCZzdGEtPnBsaW5rX3RpbWVyKTsKLQkJCXN0YS0+cGxpbmtfc3RhdGUgPSBQTElOS19FU1RBQjsKKwkJCXN0YS0+cGxpbmtfc3RhdGUgPSBOTDgwMjExX1BMSU5LX0VTVEFCOwogCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAJCQltZXNoX3BsaW5rX2luY19lc3RhYl9jb3VudChzZGF0YSk7CiAJCQlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzZGF0YSwgQlNTX0NIQU5HRURfQkVBQ09OKTsKQEAgLTcyNywxMyArNzQ5LDEzIEBACiAJCX0KIAkJYnJlYWs7CiAKLQljYXNlIFBMSU5LX0VTVEFCOgorCWNhc2UgTkw4MDIxMV9QTElOS19FU1RBQjoKIAkJc3dpdGNoIChldmVudCkgewogCQljYXNlIENMU19BQ1BUOgogCQkJcmVhc29uID0gY3B1X3RvX2xlMTYoTUVTSF9DTE9TRV9SQ1ZEKTsKIAkJCXN0YS0+cmVhc29uID0gcmVhc29uOwogCQkJZGVhY3RpdmF0ZWQgPSBfX21lc2hfcGxpbmtfZGVhY3RpdmF0ZShzdGEpOwotCQkJc3RhLT5wbGlua19zdGF0ZSA9IFBMSU5LX0hPTERJTkc7CisJCQlzdGEtPnBsaW5rX3N0YXRlID0gTkw4MDIxMV9QTElOS19IT0xESU5HOwogCQkJbGxpZCA9IHN0YS0+bGxpZDsKIAkJCW1vZF9wbGlua190aW1lcihzdGEsIGRvdDExTWVzaEhvbGRpbmdUaW1lb3V0KHNkYXRhKSk7CiAJCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKQEAgLTc1Myw3ICs3NzUsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7Ci0JY2FzZSBQTElOS19IT0xESU5HOgorCWNhc2UgTkw4MDIxMV9QTElOS19IT0xESU5HOgogCQlzd2l0Y2ggKGV2ZW50KSB7CiAJCWNhc2UgQ0xTX0FDUFQ6CiAJCQlpZiAoZGVsX3RpbWVyKCZzdGEtPnBsaW5rX3RpbWVyKSkKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jCmluZGV4IDY0ZDkyZDUuLjRmNmIyNjcgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tbG1lLmMKKysrIGIvbmV0L21hYzgwMjExL21sbWUuYwpAQCAtOTAsMjAgKzkwLDExIEBACiAJLyogbm8gYWN0aW9uIHJlcXVpcmVkICovCiAJUlhfTUdNVF9OT05FLAogCi0JLyogY2FsbGVyIG11c3QgY2FsbCBjZmc4MDIxMV9zZW5kX3J4X2F1dGgoKSAqLwotCVJYX01HTVRfQ0ZHODAyMTFfQVVUSCwKLQotCS8qIGNhbGxlciBtdXN0IGNhbGwgY2ZnODAyMTFfc2VuZF9yeF9hc3NvYygpICovCi0JUlhfTUdNVF9DRkc4MDIxMV9BU1NPQywKLQogCS8qIGNhbGxlciBtdXN0IGNhbGwgY2ZnODAyMTFfc2VuZF9kZWF1dGgoKSAqLwogCVJYX01HTVRfQ0ZHODAyMTFfREVBVVRILAogCiAJLyogY2FsbGVyIG11c3QgY2FsbCBjZmc4MDIxMV9zZW5kX2Rpc2Fzc29jKCkgKi8KIAlSWF9NR01UX0NGRzgwMjExX0RJU0FTU09DLAotCi0JLyogY2FsbGVyIG11c3QgdGVsbCBjZmc4MDIxMSBhYm91dCBpbnRlcm5hbCBlcnJvciAqLwotCVJYX01HTVRfQ0ZHODAyMTFfQVNTT0NfRVJST1IsCiB9OwogCiAvKiB1dGlscyAqLwpAQCAtNzU5LDYgKzc1MCw4IEBACiAJCQkgICAgIGR5bmFtaWNfcHNfZW5hYmxlX3dvcmspOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gbG9jYWwtPnBzX3NkYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHE7CiAKIAkvKiBjYW4gb25seSBoYXBwZW4gd2hlbiBQUyB3YXMganVzdCBkaXNhYmxlZCBhbnl3YXkgKi8KIAlpZiAoIXNkYXRhKQpAQCAtNzY3LDE4ICs3NjAsMzcgQEAKIAlpZiAobG9jYWwtPmh3LmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykKIAkJcmV0dXJuOwogCisJLyoKKwkgKiB0cmFuc21pc3Npb24gY2FuIGJlIHN0b3BwZWQgYnkgb3RoZXJzIHdoaWNoIGxlYWRzIHRvCisJICogZHluYW1pY19wc190aW1lciBleHBpcnkuIFBvc3Rwb25kIHRoZSBwcyB0aW1lciBpZiBpdAorCSAqIGlzIG5vdCB0aGUgYWN0dWFsIGlkbGUgc3RhdGUuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLCBmbGFncyk7CisJZm9yIChxID0gMDsgcSA8IGxvY2FsLT5ody5xdWV1ZXM7IHErKykgeworCQlpZiAobG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1txXSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2ssCisJCQkJCSAgICAgICBmbGFncyk7CisJCQltb2RfdGltZXIoJmxvY2FsLT5keW5hbWljX3BzX3RpbWVyLCBqaWZmaWVzICsKKwkJCQkgIG1zZWNzX3RvX2ppZmZpZXMoCisJCQkJICBsb2NhbC0+aHcuY29uZi5keW5hbWljX3BzX3RpbWVvdXQpKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywgZmxhZ3MpOworCiAJaWYgKChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0spICYmCiAJICAgICghKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfTlVMTEZVTkNfQUNLRUQpKSkgewogCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7Ci0JCS8qCi0JCSAqIEZsdXNoIGFsbCB0aGUgZnJhbWVzIHF1ZXVlZCBpbiB0aGUgZHJpdmVyIGJlZm9yZQotCQkgKiBnb2luZyB0byBwb3dlciBzYXZlCi0JCSAqLwotCQlkcnZfZmx1c2gobG9jYWwsIGZhbHNlKTsKLQkJaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMobG9jYWwsIHNkYXRhLCAxKTsKIAotCQkvKiBGbHVzaCBvbmNlIGFnYWluIHRvIGdldCB0aGUgdHggc3RhdHVzIG9mIG51bGxmdW5jIGZyYW1lICovCi0JCWRydl9mbHVzaChsb2NhbCwgZmFsc2UpOworCQlpZiAoZHJ2X3R4X2ZyYW1lc19wZW5kaW5nKGxvY2FsKSkKKwkJCW1vZF90aW1lcigmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIsIGppZmZpZXMgKworCQkJCSAgbXNlY3NfdG9famlmZmllcygKKwkJCQkgIGxvY2FsLT5ody5jb25mLmR5bmFtaWNfcHNfdGltZW91dCkpOworCQllbHNlIHsKKwkJCWllZWU4MDIxMV9zZW5kX251bGxmdW5jKGxvY2FsLCBzZGF0YSwgMSk7CisJCQkvKiBGbHVzaCB0byBnZXQgdGhlIHR4IHN0YXR1cyBvZiBudWxsZnVuYyBmcmFtZSAqLworCQkJZHJ2X2ZsdXNoKGxvY2FsLCBmYWxzZSk7CisJCX0KIAl9CiAKIAlpZiAoISgobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1JFUE9SVFNfVFhfQUNLX1NUQVRVUykgJiYKQEAgLTc4OSw3ICs4MDEsNyBAQAogCQlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpOwogCX0KIAotCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CisJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKHNkYXRhLT5kZXYpOwogfQogCiB2b2lkIGllZWU4MDIxMV9keW5hbWljX3BzX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9wbS5jIGIvbmV0L21hYzgwMjExL3BtLmMKaW5kZXggZTM3MzU1MS4uNzMwNzc4YSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3BtLmMKKysrIGIvbmV0L21hYzgwMjExL3BtLmMKQEAgLTYsNyArNiw3IEBACiAjaW5jbHVkZSAiZHJpdmVyLW9wcy5oIgogI2luY2x1ZGUgImxlZC5oIgogCi1pbnQgX19pZWVlODAyMTFfc3VzcGVuZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK2ludCBfX2llZWU4MDIxMV9zdXNwZW5kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgY2ZnODAyMTFfd293bGFuICp3b3dsYW4pCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CkBAIC0xNCwxMiArMTQsMjMgQEAKIAogCWllZWU4MDIxMV9zY2FuX2NhbmNlbChsb2NhbCk7CiAKKwlpZiAoaHctPmZsYWdzICYgSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OKSB7CisJCW11dGV4X2xvY2soJmxvY2FsLT5zdGFfbXR4KTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShzdGEsICZsb2NhbC0+c3RhX2xpc3QsIGxpc3QpIHsKKwkJCXNldF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9CTE9DS19CQSk7CisJCQlpZWVlODAyMTFfc3RhX3RlYXJfZG93bl9CQV9zZXNzaW9ucyhzdGEsIHRydWUpOworCQl9CisJCW11dGV4X3VubG9jaygmbG9jYWwtPnN0YV9tdHgpOworCX0KKwogCWllZWU4MDIxMV9zdG9wX3F1ZXVlc19ieV9yZWFzb24oaHcsCiAJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fU1VTUEVORCk7CiAKIAkvKiBmbHVzaCBvdXQgYWxsIHBhY2tldHMgKi8KIAlzeW5jaHJvbml6ZV9uZXQoKTsKIAorCWRydl9mbHVzaChsb2NhbCwgZmFsc2UpOworCiAJbG9jYWwtPnF1aWVzY2luZyA9IHRydWU7CiAJLyogbWFrZSBxdWllc2NpbmcgdmlzaWJsZSB0byB0aW1lcnMgZXZlcnl3aGVyZSAqLwogCW1iKCk7CkBAIC0zNiw2ICs0NywxNiBAQAogCWNhbmNlbF93b3JrX3N5bmMoJmxvY2FsLT5keW5hbWljX3BzX2VuYWJsZV93b3JrKTsKIAlkZWxfdGltZXJfc3luYygmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIpOwogCisJbG9jYWwtPndvd2xhbiA9IHdvd2xhbiAmJiBsb2NhbC0+b3Blbl9jb3VudDsKKwlpZiAobG9jYWwtPndvd2xhbikgeworCQlpbnQgZXJyID0gZHJ2X3N1c3BlbmQobG9jYWwsIHdvd2xhbik7CisJCWlmIChlcnIpIHsKKwkJCWxvY2FsLT5xdWllc2NpbmcgPSBmYWxzZTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwkJZ290byBzdXNwZW5kOworCX0KKwogCS8qIGRpc2FibGUga2V5cyAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkKIAkJaWVlZTgwMjExX2Rpc2FibGVfa2V5cyhzZGF0YSk7CkBAIC00MywxMSArNjQsNiBAQAogCS8qIHRlYXIgZG93biBhZ2dyZWdhdGlvbiBzZXNzaW9ucyBhbmQgcmVtb3ZlIFNUQXMgKi8KIAltdXRleF9sb2NrKCZsb2NhbC0+c3RhX210eCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzdGEsICZsb2NhbC0+c3RhX2xpc3QsIGxpc3QpIHsKLQkJaWYgKGh3LT5mbGFncyAmIElFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTikgewotCQkJc2V0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX0JMT0NLX0JBKTsKLQkJCWllZWU4MDIxMV9zdGFfdGVhcl9kb3duX0JBX3Nlc3Npb25zKHN0YSwgdHJ1ZSk7Ci0JCX0KLQogCQlpZiAoc3RhLT51cGxvYWRlZCkgewogCQkJc2RhdGEgPSBzdGEtPnNkYXRhOwogCQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQpAQCAtOTgsNiArMTE0LDcgQEAKIAlpZiAobG9jYWwtPm9wZW5fY291bnQpCiAJCWllZWU4MDIxMV9zdG9wX2RldmljZShsb2NhbCk7CiAKKyBzdXNwZW5kOgogCWxvY2FsLT5zdXNwZW5kZWQgPSB0cnVlOwogCS8qIG5lZWQgc3VzcGVuZGVkIHRvIGJlIHZpc2libGUgYmVmb3JlIHF1aWVzY2luZyBpcyBmYWxzZSAqLwogCWJhcnJpZXIoKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsLmMgYi9uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbC5jCmluZGV4IDc3OGM2MDQuLjhhZGFjNjcgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsLmMKKysrIGIvbmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWwuYwpAQCAtNDE3LDggKzQxNyw4IEBACiAJCQl0eF90aW1lX3NpbmdsZSA9IG1yLT5hY2tfdGltZSArIG1yLT5wZXJmZWN0X3R4X3RpbWU7CiAKIAkJCS8qIGNvbnRlbnRpb24gd2luZG93ICovCi0JCQl0eF90aW1lX3NpbmdsZSArPSB0X3Nsb3QgKyBtaW4oY3csIG1wLT5jd19tYXgpOwotCQkJY3cgPSAoY3cgPDwgMSkgfCAxOworCQkJdHhfdGltZV9zaW5nbGUgKz0gKHRfc2xvdCAqIGN3KSA+PiAxOworCQkJY3cgPSBtaW4oKGN3IDw8IDEpIHwgMSwgbXAtPmN3X21heCk7CiAKIAkJCXR4X3RpbWUgKz0gdHhfdGltZV9zaW5nbGU7CiAJCQl0eF90aW1lX2N0cyArPSB0eF90aW1lX3NpbmdsZSArIG1pLT5zcF9hY2tfZHVyOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfaHQuYyBiL25ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmMKaW5kZXggYzA2YWEzYS4uMzMzYjUxMSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfaHQuYworKysgYi9uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5jCkBAIC00NjQsNiArNDY0LDcgQEAKIAljb25zdCBzdHJ1Y3QgbWNzX2dyb3VwICpncm91cDsKIAl1bnNpZ25lZCBpbnQgdHhfdGltZSwgdHhfdGltZV9ydHNjdHMsIHR4X3RpbWVfZGF0YTsKIAl1bnNpZ25lZCBpbnQgY3cgPSBtcC0+Y3dfbWluOworCXVuc2lnbmVkIGludCBjdGltZSA9IDA7CiAJdW5zaWduZWQgaW50IHRfc2xvdCA9IDk7IC8qIEZJWE1FICovCiAJdW5zaWduZWQgaW50IGFtcGR1X2xlbiA9IE1JTlNUUkVMX1RSVU5DKG1pLT5hdmdfYW1wZHVfbGVuKTsKIApAQCAtNDgwLDEzICs0ODEsMjcgQEAKIAogCWdyb3VwID0gJm1pbnN0cmVsX21jc19ncm91cHNbaW5kZXggLyBNQ1NfR1JPVVBfUkFURVNdOwogCXR4X3RpbWVfZGF0YSA9IGdyb3VwLT5kdXJhdGlvbltpbmRleCAlIE1DU19HUk9VUF9SQVRFU10gKiBhbXBkdV9sZW47Ci0JdHhfdGltZSA9IDIgKiAodF9zbG90ICsgbWktPm92ZXJoZWFkICsgdHhfdGltZV9kYXRhKTsKLQl0eF90aW1lX3J0c2N0cyA9IDIgKiAodF9zbG90ICsgbWktPm92ZXJoZWFkX3J0c2N0cyArIHR4X3RpbWVfZGF0YSk7CisKKwkvKiBDb250ZW50aW9uIHRpbWUgZm9yIGZpcnN0IDIgdHJpZXMgKi8KKwljdGltZSA9ICh0X3Nsb3QgKiBjdykgPj4gMTsKKwljdyA9IG1pbigoY3cgPDwgMSkgfCAxLCBtcC0+Y3dfbWF4KTsKKwljdGltZSArPSAodF9zbG90ICogY3cpID4+IDE7CisJY3cgPSBtaW4oKGN3IDw8IDEpIHwgMSwgbXAtPmN3X21heCk7CisKKwkvKiBUb3RhbCBUWCB0aW1lIGZvciBkYXRhIGFuZCBDb250ZW50aW9uIGFmdGVyIGZpcnN0IDIgdHJpZXMgKi8KKwl0eF90aW1lID0gY3RpbWUgKyAyICogKG1pLT5vdmVyaGVhZCArIHR4X3RpbWVfZGF0YSk7CisJdHhfdGltZV9ydHNjdHMgPSBjdGltZSArIDIgKiAobWktPm92ZXJoZWFkX3J0c2N0cyArIHR4X3RpbWVfZGF0YSk7CisKKwkvKiBTZWUgaG93IG1hbnkgbW9yZSB0cmllcyB3ZSBjYW4gZml0IGluc2lkZSBzZWdtZW50IHNpemUgKi8KIAlkbyB7Ci0JCWN3ID0gKGN3IDw8IDEpIHwgMTsKLQkJY3cgPSBtaW4oY3csIG1wLT5jd19tYXgpOwotCQl0eF90aW1lICs9IGN3ICsgdF9zbG90ICsgbWktPm92ZXJoZWFkOwotCQl0eF90aW1lX3J0c2N0cyArPSBjdyArIHRfc2xvdCArIG1pLT5vdmVyaGVhZF9ydHNjdHM7CisJCS8qIENvbnRlbnRpb24gdGltZSBmb3IgdGhpcyB0cnkgKi8KKwkJY3RpbWUgPSAodF9zbG90ICogY3cpID4+IDE7CisJCWN3ID0gbWluKChjdyA8PCAxKSB8IDEsIG1wLT5jd19tYXgpOworCisJCS8qIFRvdGFsIFRYIHRpbWUgYWZ0ZXIgdGhpcyB0cnkgKi8KKwkJdHhfdGltZSArPSBjdGltZSArIG1pLT5vdmVyaGVhZCArIHR4X3RpbWVfZGF0YTsKKwkJdHhfdGltZV9ydHNjdHMgKz0gY3RpbWUgKyBtaS0+b3ZlcmhlYWRfcnRzY3RzICsgdHhfdGltZV9kYXRhOworCiAJCWlmICh0eF90aW1lX3J0c2N0cyA8IG1wLT5zZWdtZW50X3NpemUpCiAJCQltci0+cmV0cnlfY291bnRfcnRzY3RzKys7CiAJfSB3aGlsZSAoKHR4X3RpbWUgPCBtcC0+c2VnbWVudF9zaXplKSAmJgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3J4LmMgYi9uZXQvbWFjODAyMTEvcnguYwppbmRleCBjNWQ0NTMwLi43ZmE4YzZiIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvcnguYworKysgYi9uZXQvbWFjODAyMTEvcnguYwpAQCAtMTQzLDcgKzE0Myw4IEBACiAJaWYgKHN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfSFQpIHsKIAkJLyoKIAkJICogTUNTIGluZm9ybWF0aW9uIGlzIGEgc2VwYXJhdGUgZmllbGQgaW4gcmFkaW90YXAsCi0JCSAqIGFkZGVkIGJlbG93LgorCQkgKiBhZGRlZCBiZWxvdy4gVGhlIGJ5dGUgaGVyZSBpcyBuZWVkZWQgYXMgcGFkZGluZworCQkgKiBmb3IgdGhlIGNoYW5uZWwgdGhvdWdoLCBzbyBpbml0aWFsaXNlIGl0IHRvIDAuCiAJCSAqLwogCQkqcG9zID0gMDsKIAl9IGVsc2UgewpAQCAtNDAzLDExICs0MDQsMTMgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHJ4LT5za2IpOwogCXN0cnVjdCBza19idWZmICpza2IgPSByeC0+c2tiOwogCi0JaWYgKGxpa2VseSghKHN0YXR1cy0+cnhfZmxhZ3MgJiBJRUVFODAyMTFfUlhfSU5fU0NBTikpKQorCWlmIChsaWtlbHkoIShzdGF0dXMtPnJ4X2ZsYWdzICYgSUVFRTgwMjExX1JYX0lOX1NDQU4pICYmCisJCSAgICFsb2NhbC0+c2NoZWRfc2Nhbm5pbmcpKQogCQlyZXR1cm4gUlhfQ09OVElOVUU7CiAKIAlpZiAodGVzdF9iaXQoU0NBTl9IV19TQ0FOTklORywgJmxvY2FsLT5zY2FubmluZykgfHwKLQkgICAgdGVzdF9iaXQoU0NBTl9TV19TQ0FOTklORywgJmxvY2FsLT5zY2FubmluZykpCisJICAgIHRlc3RfYml0KFNDQU5fU1dfU0NBTk5JTkcsICZsb2NhbC0+c2Nhbm5pbmcpIHx8CisJICAgIGxvY2FsLT5zY2hlZF9zY2FubmluZykKIAkJcmV0dXJuIGllZWU4MDIxMV9zY2FuX3J4KHJ4LT5zZGF0YSwgc2tiKTsKIAogCS8qIHNjYW5uaW5nIGZpbmlzaGVkIGR1cmluZyBpbnZva2luZyBvZiBoYW5kbGVycyAqLwpAQCAtNDg3LDIyICs0OTAsMjYgQEAKIAkgKiBlc3RhYmxpc21lbnQgZnJhbWUsIGJlYWNvbiBvciBwcm9iZSwgZHJvcCB0aGUgZnJhbWUuCiAJICovCiAKLQlpZiAoIXJ4LT5zdGEgfHwgc3RhX3BsaW5rX3N0YXRlKHJ4LT5zdGEpICE9IFBMSU5LX0VTVEFCKSB7CisJaWYgKCFyeC0+c3RhIHx8IHN0YV9wbGlua19zdGF0ZShyeC0+c3RhKSAhPSBOTDgwMjExX1BMSU5LX0VTVEFCKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKIAogCQlpZiAoIWllZWU4MDIxMV9pc19tZ210KGhkci0+ZnJhbWVfY29udHJvbCkpCiAJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCiAJCWlmIChpZWVlODAyMTFfaXNfYWN0aW9uKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKKwkJCXU4IGNhdGVnb3J5OwogCQkJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKiloZHI7Ci0JCQlpZiAobWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgIT0gV0xBTl9DQVRFR09SWV9NRVNIX1BMSU5LKQorCQkJY2F0ZWdvcnkgPSBtZ210LT51LmFjdGlvbi5jYXRlZ29yeTsKKwkJCWlmIChjYXRlZ29yeSAhPSBXTEFOX0NBVEVHT1JZX01FU0hfQUNUSU9OICYmCisJCQkJY2F0ZWdvcnkgIT0gV0xBTl9DQVRFR09SWV9TRUxGX1BST1RFQ1RFRCkKIAkJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCQkJcmV0dXJuIFJYX0NPTlRJTlVFOwogCQl9CiAKIAkJaWYgKGllZWU4MDIxMV9pc19wcm9iZV9yZXEoaGRyLT5mcmFtZV9jb250cm9sKSB8fAogCQkgICAgaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoaGRyLT5mcmFtZV9jb250cm9sKSB8fAotCQkgICAgaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpKQorCQkgICAgaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpIHx8CisJCSAgICBpZWVlODAyMTFfaXNfYXV0aChoZHItPmZyYW1lX2NvbnRyb2wpKQogCQkJcmV0dXJuIFJYX0NPTlRJTlVFOwogCiAJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CkBAIC02NTAsNyArNjU3LDcgQEAKICBzZXRfcmVsZWFzZV90aW1lcjoKIAogCQltb2RfdGltZXIoJnRpZF9hZ2dfcngtPnJlb3JkZXJfdGltZXIsCi0JCQkgIHRpZF9hZ2dfcngtPnJlb3JkZXJfdGltZVtqXSArCisJCQkgIHRpZF9hZ2dfcngtPnJlb3JkZXJfdGltZVtqXSArIDEgKwogCQkJICBIVF9SWF9SRU9SREVSX0JVRl9USU1FT1VUKTsKIAl9IGVsc2UgewogCQlkZWxfdGltZXIoJnRpZF9hZ2dfcngtPnJlb3JkZXJfdGltZXIpOwpAQCAtNzA3LDYgKzcxNCw4IEBACiAJLyoKIAkgKiBJZiB0aGUgY3VycmVudCBNUERVIGlzIGluIHRoZSByaWdodCBvcmRlciBhbmQgbm90aGluZyBlbHNlCiAJICogaXMgc3RvcmVkIHdlIGNhbiBwcm9jZXNzIGl0IGRpcmVjdGx5LCBubyBuZWVkIHRvIGJ1ZmZlciBpdC4KKwkgKiBJZiBpdCBpcyBmaXJzdCBidXQgdGhlcmUncyBzb21ldGhpbmcgc3RvcmVkLCB3ZSBtYXkgYmUgYWJsZQorCSAqIHRvIHJlbGVhc2UgZnJhbWVzIGFmdGVyIHRoaXMgb25lLgogCSAqLwogCWlmIChtcGR1X3NlcV9udW0gPT0gdGlkX2FnZ19yeC0+aGVhZF9zZXFfbnVtICYmCiAJICAgIHRpZF9hZ2dfcngtPnN0b3JlZF9tcGR1X251bSA9PSAwKSB7CkBAIC0xNTgzLDcgKzE1OTIsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1fX2llZWU4MDIxMV9kYXRhX3RvXzgwMjMoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKK19faWVlZTgwMjExX2RhdGFfdG9fODAyMyhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LCBib29sICpwb3J0X2NvbnRyb2wpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSByeC0+c2RhdGE7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXJ4LT5za2ItPmRhdGE7CkBAIC0xNTkxLDYgKzE2MDAsNyBAQAogCXN0cnVjdCBldGhoZHIgKmVoZHI7CiAJaW50IHJldDsKIAorCSpwb3J0X2NvbnRyb2wgPSBmYWxzZTsKIAlpZiAoaWVlZTgwMjExX2hhc19hNChoZHItPmZyYW1lX2NvbnRyb2wpICYmCiAJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOICYmICFzZGF0YS0+dS52bGFuLnN0YSkKIAkJcmV0dXJuIC0xOwpAQCAtMTYwOSwxMSArMTYxOSwxMyBAQAogCQlyZXR1cm4gLTE7CiAKIAlyZXQgPSBpZWVlODAyMTFfZGF0YV90b184MDIzKHJ4LT5za2IsIHNkYXRhLT52aWYuYWRkciwgc2RhdGEtPnZpZi50eXBlKTsKLQlpZiAocmV0IDwgMCB8fCAhY2hlY2tfcG9ydF9jb250cm9sKQorCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCiAJZWhkciA9IChzdHJ1Y3QgZXRoaGRyICopIHJ4LT5za2ItPmRhdGE7Ci0JaWYgKGVoZHItPmhfcHJvdG8gIT0gcngtPnNkYXRhLT5jb250cm9sX3BvcnRfcHJvdG9jb2wpCisJaWYgKGVoZHItPmhfcHJvdG8gPT0gcngtPnNkYXRhLT5jb250cm9sX3BvcnRfcHJvdG9jb2wpCisJCSpwb3J0X2NvbnRyb2wgPSB0cnVlOworCWVsc2UgaWYgKGNoZWNrX3BvcnRfY29udHJvbCkKIAkJcmV0dXJuIC0xOwogCiAJcmV0dXJuIDA7CkBAIC0xNzcxLDcgKzE3ODMsNyBAQAogCiAJaWVlZTgwMjExX2Ftc2R1X3RvXzgwMjNzKHNrYiwgJmZyYW1lX2xpc3QsIGRldi0+ZGV2X2FkZHIsCiAJCQkJIHJ4LT5zZGF0YS0+dmlmLnR5cGUsCi0JCQkJIHJ4LT5sb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCQkJCSByeC0+bG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tLCB0cnVlKTsKIAogCXdoaWxlICghc2tiX3F1ZXVlX2VtcHR5KCZmcmFtZV9saXN0KSkgewogCQlyeC0+c2tiID0gX19za2JfZGVxdWV1ZSgmZnJhbWVfbGlzdCk7CkBAIC0xOTE0LDYgKzE5MjYsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBzZGF0YS0+ZGV2OwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilyeC0+c2tiLT5kYXRhOwogCV9fbGUxNiBmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKKwlib29sIHBvcnRfY29udHJvbDsKIAlpbnQgZXJyOwogCiAJaWYgKHVubGlrZWx5KCFpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpKSkKQEAgLTE5MzAsMTMgKzE5NDMsMjEgQEAKIAkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKQogCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCi0JZXJyID0gX19pZWVlODAyMTFfZGF0YV90b184MDIzKHJ4KTsKKwllcnIgPSBfX2llZWU4MDIxMV9kYXRhX3RvXzgwMjMocngsICZwb3J0X2NvbnRyb2wpOwogCWlmICh1bmxpa2VseShlcnIpKQogCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKIAogCWlmICghaWVlZTgwMjExX2ZyYW1lX2FsbG93ZWQocngsIGZjKSkKIAkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIAorCWlmIChyeC0+c2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4gJiYKKwkgICAgdW5saWtlbHkocG9ydF9jb250cm9sKSAmJiBzZGF0YS0+YnNzKSB7CisJCXNkYXRhID0gY29udGFpbmVyX29mKHNkYXRhLT5ic3MsIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsCisJCQkJICAgICB1LmFwKTsKKwkJZGV2ID0gc2RhdGEtPmRldjsKKwkJcngtPnNkYXRhID0gc2RhdGE7CisJfQorCiAJcngtPnNrYi0+ZGV2ID0gZGV2OwogCiAJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CkBAIC0yMTg5LDcgKzIyMTAsNyBAQAogCQkJZ290byBoYW5kbGVkOwogCQl9CiAJCWJyZWFrOwotCWNhc2UgV0xBTl9DQVRFR09SWV9NRVNIX1BMSU5LOgorCWNhc2UgV0xBTl9DQVRFR09SWV9NRVNIX0FDVElPTjoKIAkJaWYgKCFpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKQogCQkJYnJlYWs7CiAJCWdvdG8gcXVldWU7CkBAIC0yMzUyLDQ3ICsyMzczLDYgQEAKIAlyZXR1cm4gUlhfUVVFVUVEOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWljaGFlbF9taWNfcmVwb3J0KHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCi0JCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQotewotCWludCBrZXlpZHg7Ci0JdW5zaWduZWQgaW50IGhkcmxlbjsKLQotCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKLQlpZiAocngtPnNrYi0+bGVuID49IGhkcmxlbiArIDQpCi0JCWtleWlkeCA9IHJ4LT5za2ItPmRhdGFbaGRybGVuICsgM10gPj4gNjsKLQllbHNlCi0JCWtleWlkeCA9IC0xOwotCi0JaWYgKCFyeC0+c3RhKSB7Ci0JCS8qCi0JCSAqIFNvbWUgaGFyZHdhcmUgc2VlbSB0byBnZW5lcmF0ZSBpbmNvcnJlY3QgTWljaGFlbCBNSUMKLQkJICogcmVwb3J0czsgaWdub3JlIHRoZW0gdG8gYXZvaWQgdHJpZ2dlcmluZyBjb3VudGVybWVhc3VyZXMuCi0JCSAqLwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKCFpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChoZHItPmZyYW1lX2NvbnRyb2wpKQotCQlyZXR1cm47Ci0KLQlpZiAocngtPnNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCAmJiBrZXlpZHgpIHsKLQkJLyoKLQkJICogQVBzIHdpdGggcGFpcndpc2Uga2V5cyBzaG91bGQgbmV2ZXIgcmVjZWl2ZSBNaWNoYWVsIE1JQwotCQkgKiBlcnJvcnMgZm9yIG5vbi16ZXJvIGtleWlkeCBiZWNhdXNlIHRoZXNlIGFyZSByZXNlcnZlZCBmb3IKLQkJICogZ3JvdXAga2V5cyBhbmQgb25seSB0aGUgQVAgaXMgc2VuZGluZyByZWFsIG11bHRpY2FzdAotCQkgKiBmcmFtZXMgaW4gdGhlIEJTUy4KLQkJICovCi0JCXJldHVybjsKLQl9Ci0KLQlpZiAoIWllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKLQkgICAgIWllZWU4MDIxMV9pc19hdXRoKGhkci0+ZnJhbWVfY29udHJvbCkpCi0JCXJldHVybjsKLQotCW1hYzgwMjExX2V2X21pY2hhZWxfbWljX2ZhaWx1cmUocngtPnNkYXRhLCBrZXlpZHgsIGhkciwgTlVMTCwKLQkJCQkJR0ZQX0FUT01JQyk7Ci19Ci0KIC8qIFRPRE86IHVzZSBJRUVFODAyMTFfUlhfRlJBR01FTlRFRCAqLwogc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X2Nvb2tlZF9tb25pdG9yKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsCiAJCQkJCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZSkKQEAgLTI3MzYsMTIgKzI3MTYsNiBAQAogCWlmICghcHJlcGFyZXMpCiAJCXJldHVybiBmYWxzZTsKIAotCWlmIChzdGF0dXMtPmZsYWcgJiBSWF9GTEFHX01NSUNfRVJST1IpIHsKLQkJaWYgKHN0YXR1cy0+cnhfZmxhZ3MgJiBJRUVFODAyMTFfUlhfUkFfTUFUQ0gpCi0JCQlpZWVlODAyMTFfcnhfbWljaGFlbF9taWNfcmVwb3J0KGhkciwgcngpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCiAJaWYgKCFjb25zdW1lKSB7CiAJCXNrYiA9IHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7CiAJCWlmICghc2tiKSB7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc2Nhbi5jIGIvbmV0L21hYzgwMjExL3NjYW4uYwppbmRleCA0ODliNmFkLi5kMjAwNDZiIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc2Nhbi5jCisrKyBiL25ldC9tYWM4MDIxMS9zY2FuLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9wbV9xb3NfcGFyYW1zLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPG5ldC9zY2hfZ2VuZXJpYy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KQEAgLTE3MCw3ICsxNzEsNyBAQAogCQlyZXR1cm4gUlhfQ09OVElOVUU7CiAKIAlpZiAoc2tiLT5sZW4gPCAyNCkKLQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwkJcmV0dXJuIFJYX0NPTlRJTlVFOwogCiAJcHJlc3AgPSBpZWVlODAyMTFfaXNfcHJvYmVfcmVzcChmYyk7CiAJaWYgKHByZXNwKSB7CkBAIC04NTAsMyArODUxLDEyMiBAQAogCX0KIAltdXRleF91bmxvY2soJmxvY2FsLT5tdHgpOwogfQorCitpbnQgaWVlZTgwMjExX3JlcXVlc3Rfc2NoZWRfc2Nhbl9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgICAgICAgc3RydWN0IGNmZzgwMjExX3NjaGVkX3NjYW5fcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCWludCByZXQsIGk7CisKKwltdXRleF9sb2NrKCZzZGF0YS0+bG9jYWwtPm10eCk7CisKKwlpZiAobG9jYWwtPnNjaGVkX3NjYW5uaW5nKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFsb2NhbC0+b3BzLT5zY2hlZF9zY2FuX3N0YXJ0KSB7CisJCXJldCA9IC1FTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGkrKykgeworCQlsb2NhbC0+c2NoZWRfc2Nhbl9pZXMuaWVbaV0gPSBremFsbG9jKDIgKworCQkJCQkJICAgICAgSUVFRTgwMjExX01BWF9TU0lEX0xFTiArCisJCQkJCQkgICAgICBsb2NhbC0+c2Nhbl9pZXNfbGVuLAorCQkJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJCWlmICghbG9jYWwtPnNjaGVkX3NjYW5faWVzLmllW2ldKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXRfZnJlZTsKKwkJfQorCisJCWxvY2FsLT5zY2hlZF9zY2FuX2llcy5sZW5baV0gPQorCQkJaWVlZTgwMjExX2J1aWxkX3ByZXFfaWVzKGxvY2FsLAorCQkJCQkJIGxvY2FsLT5zY2hlZF9zY2FuX2llcy5pZVtpXSwKKwkJCQkJCSByZXEtPmllLCByZXEtPmllX2xlbiwgaSwKKwkJCQkJCSAodTMyKSAtMSwgMCk7CisJfQorCisJcmV0ID0gZHJ2X3NjaGVkX3NjYW5fc3RhcnQobG9jYWwsIHNkYXRhLCByZXEsCisJCQkJICAgJmxvY2FsLT5zY2hlZF9zY2FuX2llcyk7CisJaWYgKHJldCA9PSAwKSB7CisJCWxvY2FsLT5zY2hlZF9zY2FubmluZyA9IHRydWU7CisJCWdvdG8gb3V0OworCX0KKworb3V0X2ZyZWU6CisJd2hpbGUgKGkgPiAwKQorCQlrZnJlZShsb2NhbC0+c2NoZWRfc2Nhbl9pZXMuaWVbLS1pXSk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZzZGF0YS0+bG9jYWwtPm10eCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGllZWU4MDIxMV9yZXF1ZXN0X3NjaGVkX3NjYW5fc3RvcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlpbnQgcmV0ID0gMCwgaTsKKworCW11dGV4X2xvY2soJnNkYXRhLT5sb2NhbC0+bXR4KTsKKworCWlmICghbG9jYWwtPm9wcy0+c2NoZWRfc2Nhbl9zdG9wKSB7CisJCXJldCA9IC1FTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGxvY2FsLT5zY2hlZF9zY2FubmluZykgeworCQlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgaSsrKQorCQkJa2ZyZWUobG9jYWwtPnNjaGVkX3NjYW5faWVzLmllW2ldKTsKKworCQlkcnZfc2NoZWRfc2Nhbl9zdG9wKGxvY2FsLCBzZGF0YSk7CisJCWxvY2FsLT5zY2hlZF9zY2FubmluZyA9IGZhbHNlOworCX0KK291dDoKKwltdXRleF91bmxvY2soJnNkYXRhLT5sb2NhbC0+bXR4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgaWVlZTgwMjExX3NjaGVkX3NjYW5fcmVzdWx0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKworCXRyYWNlX2FwaV9zY2hlZF9zY2FuX3Jlc3VsdHMobG9jYWwpOworCisJY2ZnODAyMTFfc2NoZWRfc2Nhbl9yZXN1bHRzKGh3LT53aXBoeSk7Cit9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zY2hlZF9zY2FuX3Jlc3VsdHMpOworCit2b2lkIGllZWU4MDIxMV9zY2hlZF9zY2FuX3N0b3BwZWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9sb2NhbCwKKwkJCSAgICAgc2NoZWRfc2Nhbl9zdG9wcGVkX3dvcmspOworCWludCBpOworCisJbXV0ZXhfbG9jaygmbG9jYWwtPm10eCk7CisKKwlpZiAoIWxvY2FsLT5zY2hlZF9zY2FubmluZykgeworCQltdXRleF91bmxvY2soJmxvY2FsLT5tdHgpOworCQlyZXR1cm47CisJfQorCisJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGkrKykKKwkJa2ZyZWUobG9jYWwtPnNjaGVkX3NjYW5faWVzLmllW2ldKTsKKworCWxvY2FsLT5zY2hlZF9zY2FubmluZyA9IGZhbHNlOworCisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+bXR4KTsKKworCWNmZzgwMjExX3NjaGVkX3NjYW5fc3RvcHBlZChsb2NhbC0+aHcud2lwaHkpOworfQorCit2b2lkIGllZWU4MDIxMV9zY2hlZF9zY2FuX3N0b3BwZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CisKKwl0cmFjZV9hcGlfc2NoZWRfc2Nhbl9zdG9wcGVkKGxvY2FsKTsKKworCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZsb2NhbC0+c2NoZWRfc2Nhbl9zdG9wcGVkX3dvcmspOworfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc2NoZWRfc2Nhbl9zdG9wcGVkKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKaW5kZXggMTNlOGMzMC4uYjgzODcwYiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKKysrIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKQEAgLTY3LDcgKzY3LDggQEAKIHsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnM7CiAKLQlzID0gbG9jYWwtPnN0YV9oYXNoW1NUQV9IQVNIKHN0YS0+c3RhLmFkZHIpXTsKKwlzID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChsb2NhbC0+c3RhX2hhc2hbU1RBX0hBU0goc3RhLT5zdGEuYWRkcildLAorCQkJCSAgICAgIGxvY2tkZXBfaXNfaGVsZCgmbG9jYWwtPnN0YV9sb2NrKSk7CiAJaWYgKCFzKQogCQlyZXR1cm4gLUVOT0VOVDsKIAlpZiAocyA9PSBzdGEpIHsKQEAgLTc2LDkgKzc3LDExIEBACiAJCXJldHVybiAwOwogCX0KIAotCXdoaWxlIChzLT5obmV4dCAmJiBzLT5obmV4dCAhPSBzdGEpCi0JCXMgPSBzLT5obmV4dDsKLQlpZiAocy0+aG5leHQpIHsKKwl3aGlsZSAocmN1X2FjY2Vzc19wb2ludGVyKHMtPmhuZXh0KSAmJgorCSAgICAgICByY3VfYWNjZXNzX3BvaW50ZXIocy0+aG5leHQpICE9IHN0YSkKKwkJcyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocy0+aG5leHQsCisJCQkJCWxvY2tkZXBfaXNfaGVsZCgmbG9jYWwtPnN0YV9sb2NrKSk7CisJaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihzLT5obmV4dCkpIHsKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKHMtPmhuZXh0LCBzdGEtPmhuZXh0KTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMjI4LDYgKzIzMSw3IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CisJc3RydWN0IHRpbWVzcGVjIHVwdGltZTsKIAlpbnQgaTsKIAogCXN0YSA9IGt6YWxsb2Moc2l6ZW9mKCpzdGEpICsgbG9jYWwtPmh3LnN0YV9kYXRhX3NpemUsIGdmcCk7CkBAIC0yNDUsNiArMjQ5LDggQEAKIAlzdGEtPnNkYXRhID0gc2RhdGE7CiAJc3RhLT5sYXN0X3J4ID0gamlmZmllczsKIAorCWRvX3Bvc2l4X2Nsb2NrX21vbm90b25pY19nZXR0aW1lKCZ1cHRpbWUpOworCXN0YS0+bGFzdF9jb25uZWN0ZWQgPSB1cHRpbWUudHZfc2VjOwogCWV3bWFfaW5pdCgmc3RhLT5hdmdfc2lnbmFsLCAxMDI0LCA4KTsKIAogCWlmIChzdGFfcHJlcGFyZV9yYXRlX2NvbnRyb2wobG9jYWwsIHN0YSwgZ2ZwKSkgewpAQCAtMjcxLDcgKzI3Nyw3IEBACiAjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcgKi8KIAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICi0Jc3RhLT5wbGlua19zdGF0ZSA9IFBMSU5LX0xJU1RFTjsKKwlzdGEtPnBsaW5rX3N0YXRlID0gTkw4MDIxMV9QTElOS19MSVNURU47CiAJaW5pdF90aW1lcigmc3RhLT5wbGlua190aW1lcik7CiAjZW5kaWYKIApAQCAtNTg0LDcgKzU5MCw2IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCiAJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmc3RhLT5wc190eF9idWYpKQogCQlyZXR1cm4gZmFsc2U7CkBAIC02MDEsNyArNjA2LDYgQEAKIAkJaWYgKCFza2IpCiAJCQlicmVhazsKIAotCQlzZGF0YSA9IHN0YS0+c2RhdGE7CiAJCWxvY2FsLT50b3RhbF9wc19idWZmZXJlZC0tOwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX1BTX0RFQlVHCiAJCXByaW50ayhLRVJOX0RFQlVHICJCdWZmZXJlZCBmcmFtZSBleHBpcmVkIChTVEEgJXBNKVxuIiwKQEAgLTYwOSw3ICs2MTMsOCBAQAogI2VuZGlmCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAotCQlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZzdGEtPnBzX3R4X2J1ZikpCisJCWlmIChza2JfcXVldWVfZW1wdHkoJnN0YS0+cHNfdHhfYnVmKSAmJgorCQkgICAgIXRlc3Rfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfUFNfRFJJVkVSX0JVRikpCiAJCQlzdGFfaW5mb19jbGVhcl90aW1fYml0KHN0YSk7CiAJfQogCkBAIC02NTAsMTAgKzY1NSwxMiBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwltdXRleF9sb2NrKCZsb2NhbC0+a2V5X210eCk7CiAJZm9yIChpID0gMDsgaSA8IE5VTV9ERUZBVUxUX0tFWVM7IGkrKykKLQkJaWVlZTgwMjExX2tleV9mcmVlKGxvY2FsLCBzdGEtPmd0a1tpXSk7CisJCV9faWVlZTgwMjExX2tleV9mcmVlKGtleV9tdHhfZGVyZWZlcmVuY2UobG9jYWwsIHN0YS0+Z3RrW2ldKSk7CiAJaWYgKHN0YS0+cHRrKQotCQlpZWVlODAyMTFfa2V5X2ZyZWUobG9jYWwsIHN0YS0+cHRrKTsKKwkJX19pZWVlODAyMTFfa2V5X2ZyZWUoa2V5X210eF9kZXJlZmVyZW5jZShsb2NhbCwgc3RhLT5wdGspKTsKKwltdXRleF91bmxvY2soJmxvY2FsLT5rZXlfbXR4KTsKIAogCXN0YS0+ZGVhZCA9IHRydWU7CiAKQEAgLTY5OCw2ICs3MDUsOCBAQAogI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHICovCiAJY2FuY2VsX3dvcmtfc3luYygmc3RhLT5kcnZfdW5ibG9ja193ayk7CiAKKwljZmc4MDIxMV9kZWxfc3RhKHNkYXRhLT5kZXYsIHN0YS0+c3RhLmFkZHIsIEdGUF9LRVJORUwpOworCiAJcmF0ZV9jb250cm9sX3JlbW92ZV9zdGFfZGVidWdmcyhzdGEpOwogCWllZWU4MDIxMV9zdGFfZGVidWdmc19yZW1vdmUoc3RhKTsKIApAQCAtNzY2LDkgKzc3NSw4IEBACiAJaWYgKCF0aW1lcl9uZWVkZWQpCiAJCXJldHVybjsKIAotCWxvY2FsLT5zdGFfY2xlYW51cC5leHBpcmVzID0KLQkJcm91bmRfamlmZmllcyhqaWZmaWVzICsgU1RBX0lORk9fQ0xFQU5VUF9JTlRFUlZBTCk7Ci0JYWRkX3RpbWVyKCZsb2NhbC0+c3RhX2NsZWFudXApOworCW1vZF90aW1lcigmbG9jYWwtPnN0YV9jbGVhbnVwLAorCQkgIHJvdW5kX2ppZmZpZXMoamlmZmllcyArIFNUQV9JTkZPX0NMRUFOVVBfSU5URVJWQUwpKTsKIH0KIAogdm9pZCBzdGFfaW5mb19pbml0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQpAQCAtNzgxLDE0ICs3ODksNiBAQAogCiAJc2V0dXBfdGltZXIoJmxvY2FsLT5zdGFfY2xlYW51cCwgc3RhX2luZm9fY2xlYW51cCwKIAkJICAgICh1bnNpZ25lZCBsb25nKWxvY2FsKTsKLQlsb2NhbC0+c3RhX2NsZWFudXAuZXhwaXJlcyA9Ci0JCXJvdW5kX2ppZmZpZXMoamlmZmllcyArIFNUQV9JTkZPX0NMRUFOVVBfSU5URVJWQUwpOwotfQotCi1pbnQgc3RhX2luZm9fc3RhcnQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCi17Ci0JYWRkX3RpbWVyKCZsb2NhbC0+c3RhX2NsZWFudXApOwotCXJldHVybiAwOwogfQogCiB2b2lkIHN0YV9pbmZvX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCkBAIC05MDAsNiArOTAwLDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlpbnQgc2VudCwgYnVmZmVyZWQ7CiAKKwljbGVhcl9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9QU19EUklWRVJfQlVGKTsKIAlpZiAoIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfQVBfTElOS19QUykpCiAJCWRydl9zdGFfbm90aWZ5KGxvY2FsLCBzZGF0YSwgU1RBX05PVElGWV9BV0FLRSwgJnN0YS0+c3RhKTsKIApAQCAtOTkyLDMgKzk5MywxMiBAQAogCQlpZWVlODAyMTFfcXVldWVfd29yayhodywgJnN0YS0+ZHJ2X3VuYmxvY2tfd2spOwogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RhX2Jsb2NrX2F3YWtlKTsKKwordm9pZCBpZWVlODAyMTFfc3RhX3NldF90aW0oc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSkKK3sKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IGNvbnRhaW5lcl9vZihwdWJzdGEsIHN0cnVjdCBzdGFfaW5mbywgc3RhKTsKKworCXNldF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9QU19EUklWRVJfQlVGKTsKKwlzdGFfaW5mb19zZXRfdGltX2JpdChzdGEpOworfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RhX3NldF90aW0pOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmggYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uaAppbmRleCBiMmY5NTk2Li5jNmFlODcxIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uaAorKysgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uaApAQCAtNDMsNiArNDMsOCBAQAogICoJYmUgaW4gdGhlIHF1ZXVlcwogICogQFdMQU5fU1RBX1BTUE9MTDogU3RhdGlvbiBzZW50IFBTLXBvbGwgd2hpbGUgZHJpdmVyIHdhcyBrZWVwaW5nCiAgKglzdGF0aW9uIGluIHBvd2VyLXNhdmUgbW9kZSwgcmVwbHkgd2hlbiB0aGUgZHJpdmVyIHVuYmxvY2tzLgorICogQFdMQU5fU1RBX1BTX0RSSVZFUl9CVUY6IFN0YXRpb24gaGFzIGZyYW1lcyBwZW5kaW5nIGluIGRyaXZlciBpbnRlcm5hbAorICoJYnVmZmVycy4gQXV0b21hdGljYWxseSBjbGVhcmVkIG9uIHN0YXRpb24gd2FrZS11cC4KICAqLwogZW51bSBpZWVlODAyMTFfc3RhX2luZm9fZmxhZ3MgewogCVdMQU5fU1RBX0FVVEgJCT0gMTw8MCwKQEAgLTU4LDYgKzYwLDcgQEAKIAlXTEFOX1NUQV9CTE9DS19CQQk9IDE8PDExLAogCVdMQU5fU1RBX1BTX0RSSVZFUgk9IDE8PDEyLAogCVdMQU5fU1RBX1BTUE9MTAkJPSAxPDwxMywKKwlXTEFOX1NUQV9QU19EUklWRVJfQlVGCT0gMTw8MTQsCiB9OwogCiAjZGVmaW5lIFNUQV9USURfTlVNIDE2CkBAIC0xNDksNiArMTUyLDcgQEAKICAqCiAgKiBAdGlkX3J4OiBhZ2dyZWdhdGlvbiBpbmZvIGZvciBSeCBwZXIgVElEIC0tIFJDVSBwcm90ZWN0ZWQKICAqIEB0aWRfdHg6IGFnZ3JlZ2F0aW9uIGluZm8gZm9yIFR4IHBlciBUSUQKKyAqIEB0aWRfc3RhcnRfdHg6IHNlc3Npb25zIHdoZXJlIHN0YXJ0IHdhcyByZXF1ZXN0ZWQKICAqIEBhZGRiYV9yZXFfbnVtOiBudW1iZXIgb2YgdGltZXMgYWRkQkEgcmVxdWVzdCBoYXMgYmVlbiBzZW50LgogICogQGRpYWxvZ190b2tlbl9hbGxvY2F0b3I6IGRpYWxvZyB0b2tlbiBlbnVtZXJhdG9yIGZvciBlYWNoIG5ldyBzZXNzaW9uOwogICogQHdvcms6IHdvcmsgc3RydWN0IGZvciBzdGFydGluZy9zdG9wcGluZyBhZ2dyZWdhdGlvbgpAQCAtMTYwLDQwICsxNjQsMTggQEAKIHN0cnVjdCBzdGFfYW1wZHVfbWxtZSB7CiAJc3RydWN0IG11dGV4IG10eDsKIAkvKiByeCAqLwotCXN0cnVjdCB0aWRfYW1wZHVfcnggKnRpZF9yeFtTVEFfVElEX05VTV07CisJc3RydWN0IHRpZF9hbXBkdV9yeCBfX3JjdSAqdGlkX3J4W1NUQV9USURfTlVNXTsKIAl1bnNpZ25lZCBsb25nIHRpZF9yeF90aW1lcl9leHBpcmVkW0JJVFNfVE9fTE9OR1MoU1RBX1RJRF9OVU0pXTsKIAkvKiB0eCAqLwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwotCXN0cnVjdCB0aWRfYW1wZHVfdHggKnRpZF90eFtTVEFfVElEX05VTV07CisJc3RydWN0IHRpZF9hbXBkdV90eCBfX3JjdSAqdGlkX3R4W1NUQV9USURfTlVNXTsKKwlzdHJ1Y3QgdGlkX2FtcGR1X3R4ICp0aWRfc3RhcnRfdHhbU1RBX1RJRF9OVU1dOwogCXU4IGFkZGJhX3JlcV9udW1bU1RBX1RJRF9OVU1dOwogCXU4IGRpYWxvZ190b2tlbl9hbGxvY2F0b3I7CiB9OwogCiAKIC8qKgotICogZW51bSBwbGlua19zdGF0ZSAtIHN0YXRlIG9mIGEgbWVzaCBwZWVyIGxpbmsgZmluaXRlIHN0YXRlIG1hY2hpbmUKLSAqCi0gKiBAUExJTktfTElTVEVOOiBpbml0aWFsIHN0YXRlLCBjb25zaWRlcmVkIHRoZSBpbXBsaWNpdCBzdGF0ZSBvZiBub24gZXhpc3RlbnQKLSAqIAltZXNoIHBlZXIgbGlua3MKLSAqIEBQTElOS19PUE5fU05UOiBtZXNoIHBsaW5rIG9wZW4gZnJhbWUgaGFzIGJlZW4gc2VudCB0byB0aGlzIG1lc2ggcGVlcgotICogQFBMSU5LX09QTl9SQ1ZEOiBtZXNoIHBsaW5rIG9wZW4gZnJhbWUgaGFzIGJlZW4gcmVjZWl2ZWQgZnJvbSB0aGlzIG1lc2ggcGVlcgotICogQFBMSU5LX0NORl9SQ1ZEOiBtZXNoIHBsaW5rIGNvbmZpcm0gZnJhbWUgaGFzIGJlZW4gcmVjZWl2ZWQgZnJvbSB0aGlzIG1lc2gKLSAqIAlwZWVyCi0gKiBAUExJTktfRVNUQUI6IG1lc2ggcGVlciBsaW5rIGlzIGVzdGFibGlzaGVkCi0gKiBAUExJTktfSE9MRElORzogbWVzaCBwZWVyIGxpbmsgaXMgYmVpbmcgY2xvc2VkIG9yIGNhbmNlbGxlZAotICogQFBMSU5LX0JMT0NLRUQ6IGFsbCBmcmFtZXMgdHJhbnNtaXR0ZWQgZnJvbSB0aGlzIG1lc2ggcGxpbmsgYXJlIGRpc2NhcmRlZAotICovCi1lbnVtIHBsaW5rX3N0YXRlIHsKLQlQTElOS19MSVNURU4sCi0JUExJTktfT1BOX1NOVCwKLQlQTElOS19PUE5fUkNWRCwKLQlQTElOS19DTkZfUkNWRCwKLQlQTElOS19FU1RBQiwKLQlQTElOS19IT0xESU5HLAotCVBMSU5LX0JMT0NLRUQKLX07Ci0KLS8qKgogICogc3RydWN0IHN0YV9pbmZvIC0gU1RBIGluZm9ybWF0aW9uCiAgKgogICogVGhpcyBzdHJ1Y3R1cmUgY29sbGVjdHMgaW5mb3JtYXRpb24gYWJvdXQgYSBzdGF0aW9uIHRoYXQKQEAgLTIyNiw2ICsyMDgsNyBAQAogICogQHJ4X2J5dGVzOiBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgZnJvbSB0aGlzIFNUQQogICogQHdlcF93ZWFrX2l2X2NvdW50OiBudW1iZXIgb2Ygd2VhayBXRVAgSVZzIHJlY2VpdmVkIGZyb20gdGhpcyBzdGF0aW9uCiAgKiBAbGFzdF9yeDogdGltZSAoaW4gamlmZmllcykgd2hlbiBsYXN0IGZyYW1lIHdhcyByZWNlaXZlZCBmcm9tIHRoaXMgU1RBCisgKiBAbGFzdF9jb25uZWN0ZWQ6IHRpbWUgKGluIHNlY29uZHMpIHdoZW4gYSBzdGF0aW9uIGdvdCBjb25uZWN0ZWQKICAqIEBudW1fZHVwbGljYXRlczogbnVtYmVyIG9mIGR1cGxpY2F0ZSBmcmFtZXMgcmVjZWl2ZWQgZnJvbSB0aGlzIFNUQQogICogQHJ4X2ZyYWdtZW50czogbnVtYmVyIG9mIHJlY2VpdmVkIE1QRFVzCiAgKiBAcnhfZHJvcHBlZDogbnVtYmVyIG9mIGRyb3BwZWQgTVBEVXMgZnJvbSB0aGlzIFNUQQpAQCAtMjYwLDExICsyNDMsMTEgQEAKIHN0cnVjdCBzdGFfaW5mbyB7CiAJLyogR2VuZXJhbCBpbmZvcm1hdGlvbiwgbW9zdGx5IHN0YXRpYyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3Qgc3RhX2luZm8gKmhuZXh0OworCXN0cnVjdCBzdGFfaW5mbyBfX3JjdSAqaG5leHQ7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9rZXkgKmd0a1tOVU1fREVGQVVMVF9LRVlTICsgTlVNX0RFRkFVTFRfTUdNVF9LRVlTXTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqcHRrOworCXN0cnVjdCBpZWVlODAyMTFfa2V5IF9fcmN1ICpndGtbTlVNX0RFRkFVTFRfS0VZUyArIE5VTV9ERUZBVUxUX01HTVRfS0VZU107CisJc3RydWN0IGllZWU4MDIxMV9rZXkgX19yY3UgKnB0azsKIAlzdHJ1Y3QgcmF0ZV9jb250cm9sX3JlZiAqcmF0ZV9jdHJsOwogCXZvaWQgKnJhdGVfY3RybF9wcml2OwogCXNwaW5sb2NrX3QgbG9jazsKQEAgLTI5NSw2ICsyNzgsNyBAQAogCXVuc2lnbmVkIGxvbmcgcnhfcGFja2V0cywgcnhfYnl0ZXM7CiAJdW5zaWduZWQgbG9uZyB3ZXBfd2Vha19pdl9jb3VudDsKIAl1bnNpZ25lZCBsb25nIGxhc3Rfcng7CisJbG9uZyBsYXN0X2Nvbm5lY3RlZDsKIAl1bnNpZ25lZCBsb25nIG51bV9kdXBsaWNhdGVzOwogCXVuc2lnbmVkIGxvbmcgcnhfZnJhZ21lbnRzOwogCXVuc2lnbmVkIGxvbmcgcnhfZHJvcHBlZDsKQEAgLTMzNCw3ICszMTgsNyBAQAogCXU4IHBsaW5rX3JldHJpZXM7CiAJYm9vbCBpZ25vcmVfcGxpbmtfdGltZXI7CiAJYm9vbCBwbGlua190aW1lcl93YXNfcnVubmluZzsKLQllbnVtIHBsaW5rX3N0YXRlIHBsaW5rX3N0YXRlOworCWVudW0gbmw4MDIxMV9wbGlua19zdGF0ZSBwbGlua19zdGF0ZTsKIAl1MzIgcGxpbmtfdGltZW91dDsKIAlzdHJ1Y3QgdGltZXJfbGlzdCBwbGlua190aW1lcjsKICNlbmRpZgpAQCAtMzUyLDEyICszMzYsMTIgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3N0YSBzdGE7CiB9OwogCi1zdGF0aWMgaW5saW5lIGVudW0gcGxpbmtfc3RhdGUgc3RhX3BsaW5rX3N0YXRlKHN0cnVjdCBzdGFfaW5mbyAqc3RhKQorc3RhdGljIGlubGluZSBlbnVtIG5sODAyMTFfcGxpbmtfc3RhdGUgc3RhX3BsaW5rX3N0YXRlKHN0cnVjdCBzdGFfaW5mbyAqc3RhKQogewogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICiAJcmV0dXJuIHN0YS0+cGxpbmtfc3RhdGU7CiAjZW5kaWYKLQlyZXR1cm4gUExJTktfTElTVEVOOworCXJldHVybiBOTDgwMjExX1BMSU5LX0xJU1RFTjsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNldF9zdGFfZmxhZ3Moc3RydWN0IHN0YV9pbmZvICpzdGEsIGNvbnN0IHUzMiBmbGFncykKQEAgLTQxNiw3ICs0MDAsMTYgQEAKIAlyZXR1cm4gcmV0OwogfQogCit2b2lkIGllZWU4MDIxMV9hc3NpZ25fdGlkX3R4KHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBpbnQgdGlkLAorCQkJICAgICBzdHJ1Y3QgdGlkX2FtcGR1X3R4ICp0aWRfdHgpOwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0aWRfYW1wZHVfdHggKgorcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZF90aWRfdHgoc3RydWN0IHN0YV9pbmZvICpzdGEsIGludCB0aWQpCit7CisJcmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLAorCQkJCQkgbG9ja2RlcF9pc19oZWxkKCZzdGEtPmxvY2spIHx8CisJCQkJCSBsb2NrZGVwX2lzX2hlbGQoJnN0YS0+YW1wZHVfbWxtZS5tdHgpKTsKK30KIAogI2RlZmluZSBTVEFfSEFTSF9TSVpFIDI1NgogI2RlZmluZSBTVEFfSEFTSChzdGEpIChzdGFbNV0pCkBAIC00OTcsNyArNDkwLDYgQEAKIHZvaWQgc3RhX2luZm9fY2xlYXJfdGltX2JpdChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7CiAKIHZvaWQgc3RhX2luZm9faW5pdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7Ci1pbnQgc3RhX2luZm9fc3RhcnQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwogdm9pZCBzdGFfaW5mb19zdG9wKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKIGludCBzdGFfaW5mb19mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YXR1cy5jIGIvbmV0L21hYzgwMjExL3N0YXR1cy5jCmluZGV4IGI5MzZkZDIuLjE2NThlZmEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zdGF0dXMuYworKysgYi9uZXQvbWFjODAyMTEvc3RhdHVzLmMKQEAgLTE4OSwxNiArMTg5LDE5IEBACiAJYm9vbCBhY2tlZDsKIAogCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfVFhfTUFYX1JBVEVTOyBpKyspIHsKLQkJLyogdGhlIEhXIGNhbm5vdCBoYXZlIGF0dGVtcHRlZCB0aGF0IHJhdGUgKi8KLQkJaWYgKGkgPj0gaHctPm1heF9yZXBvcnRfcmF0ZXMpIHsKKwkJaWYgKGluZm8tPnN0YXR1cy5yYXRlc1tpXS5pZHggPCAwKSB7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChpID49IGh3LT5tYXhfcmVwb3J0X3JhdGVzKSB7CisJCQkvKiB0aGUgSFcgY2Fubm90IGhhdmUgYXR0ZW1wdGVkIHRoYXQgcmF0ZSAqLwogCQkJaW5mby0+c3RhdHVzLnJhdGVzW2ldLmlkeCA9IC0xOwogCQkJaW5mby0+c3RhdHVzLnJhdGVzW2ldLmNvdW50ID0gMDsKLQkJfSBlbHNlIGlmIChpbmZvLT5zdGF0dXMucmF0ZXNbaV0uaWR4ID49IDApIHsKLQkJCXJhdGVzX2lkeCA9IGk7CisJCQlicmVhazsKIAkJfQogCiAJCXJldHJ5X2NvdW50ICs9IGluZm8tPnN0YXR1cy5yYXRlc1tpXS5jb3VudDsKIAl9CisJcmF0ZXNfaWR4ID0gaSAtIDE7CisKIAlpZiAocmV0cnlfY291bnQgPCAwKQogCQlyZXRyeV9jb3VudCA9IDA7CiAKQEAgLTQ0MywzICs0NDYsMTEgQEAKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiB9CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV90eF9zdGF0dXMpOworCit2b2lkIGllZWU4MDIxMV9yZXBvcnRfbG93X2FjayhzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLCB1MzIgbnVtX3BhY2tldHMpCit7CisJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBjb250YWluZXJfb2YocHVic3RhLCBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7CisJY2ZnODAyMTFfY3FtX3BrdGxvc3Nfbm90aWZ5KHN0YS0+c2RhdGEtPmRldiwgc3RhLT5zdGEuYWRkciwKKwkJCQkgICAgbnVtX3BhY2tldHMsIEdGUF9BVE9NSUMpOworfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfcmVwb3J0X2xvd19hY2spOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3RraXAuYyBiL25ldC9tYWM4MDIxMS90a2lwLmMKaW5kZXggZTg0MGM5Yy4uNzU3ZTRlYiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3RraXAuYworKysgYi9uZXQvbWFjODAyMTEvdGtpcC5jCkBAIC0yMDIsNyArMjAyLDcgQEAKICAqIEBwYXlsb2FkX2xlbiBpcyB0aGUgbGVuZ3RoIG9mIHBheWxvYWQgKF9ub3RfIGluY2x1ZGluZyBJVi9JQ1YgbGVuZ3RoKS4KICAqIEB0YSBpcyB0aGUgdHJhbnNtaXR0ZXIgYWRkcmVzc2VzLgogICovCi1pbnQgaWVlZTgwMjExX3RraXBfZW5jcnlwdF9kYXRhKHN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm0sCitpbnQgaWVlZTgwMjExX3RraXBfZW5jcnlwdF9kYXRhKHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0sCiAJCQkJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwKIAkJCQl1OCAqcG9zLCBzaXplX3QgcGF5bG9hZF9sZW4sIHU4ICp0YSkKIHsKQEAgLTIyMyw3ICsyMjMsNyBAQAogICogYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIgY29udGFpbmluZyBJRUVFIDgwMi4xMSBoZWFkZXIgcGF5bG9hZCwgaS5lLiwKICAqIGluY2x1ZGluZyBJViwgRXh0LiBJViwgcmVhbCBkYXRhLCBNaWNoYWVsIE1JQywgSUNWLiBAcGF5bG9hZF9sZW4gaXMgdGhlCiAgKiBsZW5ndGggb2YgcGF5bG9hZCwgaW5jbHVkaW5nIElWLCBFeHQuIElWLCBNSUMsIElDVi4gICovCi1pbnQgaWVlZTgwMjExX3RraXBfZGVjcnlwdF9kYXRhKHN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm0sCitpbnQgaWVlZTgwMjExX3RraXBfZGVjcnlwdF9kYXRhKHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0sCiAJCQkJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwKIAkJCQl1OCAqcGF5bG9hZCwgc2l6ZV90IHBheWxvYWRfbGVuLCB1OCAqdGEsCiAJCQkJdTggKnJhLCBpbnQgb25seV9pdiwgaW50IHF1ZXVlLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3RraXAuaCBiL25ldC9tYWM4MDIxMS90a2lwLmgKaW5kZXggN2U4M2RlZS4uMWNhYjljOCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3RraXAuaAorKysgYi9uZXQvbWFjODAyMTEvdGtpcC5oCkBAIC0xNSw3ICsxNSw3IEBACiAKIHU4ICppZWVlODAyMTFfdGtpcF9hZGRfaXYodTggKnBvcywgc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwgdTE2IGl2MTYpOwogCi1pbnQgaWVlZTgwMjExX3RraXBfZW5jcnlwdF9kYXRhKHN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm0sCitpbnQgaWVlZTgwMjExX3RraXBfZW5jcnlwdF9kYXRhKHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0sCiAJCQkJIHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksCiAJCQkJIHU4ICpwb3MsIHNpemVfdCBwYXlsb2FkX2xlbiwgdTggKnRhKTsKIGVudW0gewpAQCAtMjQsNyArMjQsNyBAQAogCVRLSVBfREVDUllQVF9JTlZBTElEX0tFWUlEWCA9IC0yLAogCVRLSVBfREVDUllQVF9SRVBMQVkgPSAtMywKIH07Ci1pbnQgaWVlZTgwMjExX3RraXBfZGVjcnlwdF9kYXRhKHN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm0sCitpbnQgaWVlZTgwMjExX3RraXBfZGVjcnlwdF9kYXRhKHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0sCiAJCQkJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwKIAkJCQl1OCAqcGF5bG9hZCwgc2l6ZV90IHBheWxvYWRfbGVuLCB1OCAqdGEsCiAJCQkJdTggKnJhLCBpbnQgb25seV9pdiwgaW50IHF1ZXVlLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguYwppbmRleCBiZDEyMjRmLi42NGUwZjc1IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdHguYworKysgYi9uZXQvbWFjODAyMTEvdHguYwpAQCAtMTA0MCwxNCArMTA0MCwxMSBAQAogCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3IgaXRlcmF0b3I7CiAJc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgKnJ0aGRyID0KIAkJKHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyICopIHNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAlib29sIGh3X2ZyYWc7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCWludCByZXQgPSBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3JfaW5pdCgmaXRlcmF0b3IsIHJ0aGRyLCBza2ItPmxlbiwKIAkJCQkJCSAgIE5VTEwpOwogCi0Jc2JhbmQgPSB0eC0+bG9jYWwtPmh3LndpcGh5LT5iYW5kc1t0eC0+Y2hhbm5lbC0+YmFuZF07Ci0KIAlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUOwogCXR4LT5mbGFncyAmPSB+SUVFRTgwMjExX1RYX0ZSQUdNRU5URUQ7CiAKQEAgLTExNTQsNyArMTE1MSw3IEBACiAJCSAqICAgICBwYWNrZXQgcGFzcyB0aHJvdWdoIGJlY2F1c2Ugc3BsaWNpbmcgdGhlIGZyYW1lcwogCQkgKiAgICAgYmFjayBpcyBhbHJlYWR5IGRvbmUuCiAJCSAqLwotCQl0aWRfdHggPSB0eC0+c3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdOworCQl0aWRfdHggPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkX3RpZF90eCh0eC0+c3RhLCB0aWQpOwogCiAJCWlmICghdGlkX3R4KSB7CiAJCQkvKiBkbyBub3RoaW5nLCBsZXQgcGFja2V0IHBhc3MgdGhyb3VnaCAqLwpAQCAtMTQ0NiwxMSArMTQ0Myw4IEBACiAJc3RydWN0IGllZWU4MDIxMV90eF9kYXRhIHR4OwogCWllZWU4MDIxMV90eF9yZXN1bHQgcmVzX3ByZXBhcmU7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXUxNiBxdWV1ZTsKIAlib29sIHJlc3VsdCA9IHRydWU7CiAKLQlxdWV1ZSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwotCiAJaWYgKHVubGlrZWx5KHNrYi0+bGVuIDwgMTApKSB7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIHRydWU7CkBAIC0xNDg2LDEyICsxNDgwLDcgQEAKIHsKIAlpbnQgdGFpbF9uZWVkID0gMDsKIAotCS8qCi0JICogVGhpcyBjb3VsZCBiZSBvcHRpbWlzZWQsIGRldmljZXMgdGhhdCBkbyBmdWxsIGhhcmR3YXJlCi0JICogY3J5cHRvIChpbmNsdWRpbmcgVEtJUCBNTUlDKSBuZWVkIG5vIHRhaWxyb29tLi4uIEJ1dCB3ZQotCSAqIGhhdmUgbm8gZHJpdmVycyBmb3Igc3VjaCBkZXZpY2VzIGN1cnJlbnRseS4KLQkgKi8KLQlpZiAobWF5X2VuY3J5cHQpIHsKKwlpZiAobWF5X2VuY3J5cHQgJiYgbG9jYWwtPmNyeXB0b190eF90YWlscm9vbV9uZWVkZWRfY250KSB7CiAJCXRhaWxfbmVlZCA9IElFRUU4MDIxMV9FTkNSWVBUX1RBSUxST09NOwogCQl0YWlsX25lZWQgLT0gc2tiX3RhaWxyb29tKHNrYik7CiAJCXRhaWxfbmVlZCA9IG1heF90KGludCwgdGFpbF9uZWVkLCAwKTsKQEAgLTE3NjYsNiArMTc1NSw3IEBACiAJCQlyZXQgPSBORVRERVZfVFhfT0s7CiAJCQlnb3RvIGZhaWw7CiAJCX0KKwkJcmN1X3JlYWRfbG9jaygpOwogCQlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKHNrYi0+ZGF0YSkpCiAJCQltcHBhdGggPSBtcHBfcGF0aF9sb29rdXAoc2tiLT5kYXRhLCBzZGF0YSk7CiAKQEAgLTE3ODAsMTMgKzE3NzAsMTMgQEAKIAkJICAgICEobXBwYXRoICYmIGNvbXBhcmVfZXRoZXJfYWRkcihtcHBhdGgtPm1wcCwgc2tiLT5kYXRhKSkpIHsKIAkJCWhkcmxlbiA9IGllZWU4MDIxMV9maWxsX21lc2hfYWRkcmVzc2VzKCZoZHIsICZmYywKIAkJCQkJc2tiLT5kYXRhLCBza2ItPmRhdGEgKyBFVEhfQUxFTik7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCW1lc2hoZHJsZW4gPSBpZWVlODAyMTFfbmV3X21lc2hfaGVhZGVyKCZtZXNoX2hkciwKIAkJCQkJc2RhdGEsIE5VTEwsIE5VTEwpOwogCQl9IGVsc2UgewogCQkJaW50IGlzX21lc2hfbWNhc3QgPSAxOwogCQkJY29uc3QgdTggKm1lc2hfZGE7CiAKLQkJCXJjdV9yZWFkX2xvY2soKTsKIAkJCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihza2ItPmRhdGEpKQogCQkJCS8qIERBIFRBIG1TQSBBRTpTQSAqLwogCQkJCW1lc2hfZGEgPSBza2ItPmRhdGE7CkBAIC0yMjY2LDcgKzIyNTYsNyBAQAogCiAJCS8qIGhlYWRyb29tLCBoZWFkIGxlbmd0aCwgdGFpbCBsZW5ndGggYW5kIG1heGltdW0gVElNIGxlbmd0aCAqLwogCQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT50eF9oZWFkcm9vbSArIDQwMCArCi0JCQkJc2RhdGEtPnUubWVzaC52ZW5kb3JfaWVfbGVuKTsKKwkJCQlzZGF0YS0+dS5tZXNoLmllX2xlbik7CiAJCWlmICghc2tiKQogCQkJZ290byBvdXQ7CiAKQEAgLTI0ODksNyArMjQ3OSw2IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJc3RydWN0IGllZWU4MDIxMV90eF9kYXRhIHR4OwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfaWZfYXAgKmJzcyA9IE5VTEw7CkBAIC0yNTMxLDcgKzI1MjAsNiBAQAogCiAJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAotCXN0YSA9IHR4LnN0YTsKIAl0eC5mbGFncyB8PSBJRUVFODAyMTFfVFhfUFNfQlVGRkVSRUQ7CiAJdHguY2hhbm5lbCA9IGxvY2FsLT5ody5jb25mLmNoYW5uZWw7CiAJaW5mby0+YmFuZCA9IHR4LmNoYW5uZWwtPmJhbmQ7CkBAIC0yNTUxLDggKzI1MzksOSBAQAogCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAwKTsKIAlza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiLCAwKTsKIAotCS8qIHNlbmQgYWxsIGludGVybmFsIG1nbXQgZnJhbWVzIG9uIFZPICovCi0Jc2tiX3NldF9xdWV1ZV9tYXBwaW5nKHNrYiwgMCk7CisJLyogU2VuZCBhbGwgaW50ZXJuYWwgbWdtdCBmcmFtZXMgb24gVk8uIEFjY29yZGluZ2x5IHNldCBUSUQgdG8gNy4gKi8KKwlza2Jfc2V0X3F1ZXVlX21hcHBpbmcoc2tiLCBJRUVFODAyMTFfQUNfVk8pOworCXNrYi0+cHJpb3JpdHkgPSA3OwogCiAJLyoKIAkgKiBUaGUgb3RoZXIgcGF0aCBjYWxsaW5nIGllZWU4MDIxMV94bWl0IGlzIGZyb20gdGhlIHRhc2tsZXQsCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdXRpbC5jIGIvbmV0L21hYzgwMjExL3V0aWwuYwppbmRleCA1NTY2NDdhLi5kM2ZlMmQyIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdXRpbC5jCisrKyBiL25ldC9tYWM4MDIxMS91dGlsLmMKQEAgLTExMjUsOSArMTEyNSwyNyBAQAogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCWludCByZXM7CiAKKyNpZmRlZiBDT05GSUdfUE0KIAlpZiAobG9jYWwtPnN1c3BlbmRlZCkKIAkJbG9jYWwtPnJlc3VtaW5nID0gdHJ1ZTsKIAorCWlmIChsb2NhbC0+d293bGFuKSB7CisJCWxvY2FsLT53b3dsYW4gPSBmYWxzZTsKKwkJcmVzID0gZHJ2X3Jlc3VtZShsb2NhbCk7CisJCWlmIChyZXMgPCAwKSB7CisJCQlsb2NhbC0+cmVzdW1pbmcgPSBmYWxzZTsKKwkJCXJldHVybiByZXM7CisJCX0KKwkJaWYgKHJlcyA9PSAwKQorCQkJZ290byB3YWtlX3VwOworCQlXQVJOX09OKHJlcyA+IDEpOworCQkvKgorCQkgKiByZXMgaXMgMSwgd2hpY2ggbWVhbnMgdGhlIGRyaXZlciByZXF1ZXN0ZWQKKwkJICogdG8gZ28gdGhyb3VnaCBhIHJlZ3VsYXIgcmVzZXQgb24gd2FrZXVwLgorCQkgKi8KKwl9CisjZW5kaWYKKwogCS8qIHJlc3RhcnQgaGFyZHdhcmUgKi8KIAlpZiAobG9jYWwtPm9wZW5fY291bnQpIHsKIAkJLyoKQEAgLTEyNTgsNiArMTI3Niw3IEBACiAJCWlmIChpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCiAJCQlpZWVlODAyMTFfZW5hYmxlX2tleXMoc2RhdGEpOwogCisgd2FrZV91cDoKIAlpZWVlODAyMTFfd2FrZV9xdWV1ZXNfYnlfcmVhc29uKGh3LAogCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX1NVU1BFTkQpOwogCkBAIC0xMjkwLDcgKzEzMDksNyBAQAogCQl9CiAJfQogCi0JYWRkX3RpbWVyKCZsb2NhbC0+c3RhX2NsZWFudXApOworCW1vZF90aW1lcigmbG9jYWwtPnN0YV9jbGVhbnVwLCBqaWZmaWVzICsgMSk7CiAKIAltdXRleF9sb2NrKCZsb2NhbC0+c3RhX210eCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzdGEsICZsb2NhbC0+c3RhX2xpc3QsIGxpc3QpCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvd2VwLmMgYi9uZXQvbWFjODAyMTEvd2VwLmMKaW5kZXggMmZmNmQxZS4uYTFjNmJmZCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3dlcC5jCisrKyBiL25ldC9tYWM4MDIxMS93ZXAuYwpAQCAtMzAsMTcgKzMwLDE1IEBACiAJLyogc3RhcnQgV0VQIElWIGZyb20gYSByYW5kb20gdmFsdWUgKi8KIAlnZXRfcmFuZG9tX2J5dGVzKCZsb2NhbC0+d2VwX2l2LCBXRVBfSVZfTEVOKTsKIAotCWxvY2FsLT53ZXBfdHhfdGZtID0gY3J5cHRvX2FsbG9jX2Jsa2NpcGhlcigiZWNiKGFyYzQpIiwgMCwKLQkJCQkJCUNSWVBUT19BTEdfQVNZTkMpOworCWxvY2FsLT53ZXBfdHhfdGZtID0gY3J5cHRvX2FsbG9jX2NpcGhlcigiYXJjNCIsIDAsIENSWVBUT19BTEdfQVNZTkMpOwogCWlmIChJU19FUlIobG9jYWwtPndlcF90eF90Zm0pKSB7CiAJCWxvY2FsLT53ZXBfcnhfdGZtID0gRVJSX1BUUigtRUlOVkFMKTsKIAkJcmV0dXJuIFBUUl9FUlIobG9jYWwtPndlcF90eF90Zm0pOwogCX0KIAotCWxvY2FsLT53ZXBfcnhfdGZtID0gY3J5cHRvX2FsbG9jX2Jsa2NpcGhlcigiZWNiKGFyYzQpIiwgMCwKLQkJCQkJCUNSWVBUT19BTEdfQVNZTkMpOworCWxvY2FsLT53ZXBfcnhfdGZtID0gY3J5cHRvX2FsbG9jX2NpcGhlcigiYXJjNCIsIDAsIENSWVBUT19BTEdfQVNZTkMpOwogCWlmIChJU19FUlIobG9jYWwtPndlcF9yeF90Zm0pKSB7Ci0JCWNyeXB0b19mcmVlX2Jsa2NpcGhlcihsb2NhbC0+d2VwX3R4X3RmbSk7CisJCWNyeXB0b19mcmVlX2NpcGhlcihsb2NhbC0+d2VwX3R4X3RmbSk7CiAJCWxvY2FsLT53ZXBfdHhfdGZtID0gRVJSX1BUUigtRUlOVkFMKTsKIAkJcmV0dXJuIFBUUl9FUlIobG9jYWwtPndlcF9yeF90Zm0pOwogCX0KQEAgLTUxLDkgKzQ5LDkgQEAKIHZvaWQgaWVlZTgwMjExX3dlcF9mcmVlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogewogCWlmICghSVNfRVJSKGxvY2FsLT53ZXBfdHhfdGZtKSkKLQkJY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKGxvY2FsLT53ZXBfdHhfdGZtKTsKKwkJY3J5cHRvX2ZyZWVfY2lwaGVyKGxvY2FsLT53ZXBfdHhfdGZtKTsKIAlpZiAoIUlTX0VSUihsb2NhbC0+d2VwX3J4X3RmbSkpCi0JCWNyeXB0b19mcmVlX2Jsa2NpcGhlcihsb2NhbC0+d2VwX3J4X3RmbSk7CisJCWNyeXB0b19mcmVlX2NpcGhlcihsb2NhbC0+d2VwX3J4X3RmbSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpZWVlODAyMTFfd2VwX3dlYWtfaXYodTMyIGl2LCBpbnQga2V5bGVuKQpAQCAtMTI3LDEyICsxMjUsMTEgQEAKIC8qIFBlcmZvcm0gV0VQIGVuY3J5cHRpb24gdXNpbmcgZ2l2ZW4ga2V5LiBkYXRhIGJ1ZmZlciBtdXN0IGhhdmUgdGFpbHJvb20KICAqIGZvciA0LWJ5dGUgSUNWLiBkYXRhX2xlbiBtdXN0IG5vdCBpbmNsdWRlIHRoaXMgSUNWLiBOb3RlOiB0aGlzIGZ1bmN0aW9uCiAgKiBkb2VzIF9ub3RfIGFkZCBJVi4gZGF0YSA9IFJDNChkYXRhIHwgQ1JDMzIoZGF0YSkpICovCi1pbnQgaWVlZTgwMjExX3dlcF9lbmNyeXB0X2RhdGEoc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbSwgdTggKnJjNGtleSwKK2ludCBpZWVlODAyMTFfd2VwX2VuY3J5cHRfZGF0YShzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtLCB1OCAqcmM0a2V5LAogCQkJICAgICAgIHNpemVfdCBrbGVuLCB1OCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuKQogewotCXN0cnVjdCBibGtjaXBoZXJfZGVzYyBkZXNjID0geyAudGZtID0gdGZtIH07Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0IHNnOwogCV9fbGUzMiBpY3Y7CisJaW50IGk7CiAKIAlpZiAoSVNfRVJSKHRmbSkpCiAJCXJldHVybiAtMTsKQEAgLTE0MCw5ICsxMzcsOSBAQAogCWljdiA9IGNwdV90b19sZTMyKH5jcmMzMl9sZSh+MCwgZGF0YSwgZGF0YV9sZW4pKTsKIAlwdXRfdW5hbGlnbmVkKGljdiwgKF9fbGUzMiAqKShkYXRhICsgZGF0YV9sZW4pKTsKIAotCWNyeXB0b19ibGtjaXBoZXJfc2V0a2V5KHRmbSwgcmM0a2V5LCBrbGVuKTsKLQlzZ19pbml0X29uZSgmc2csIGRhdGEsIGRhdGFfbGVuICsgV0VQX0lDVl9MRU4pOwotCWNyeXB0b19ibGtjaXBoZXJfZW5jcnlwdCgmZGVzYywgJnNnLCAmc2csIHNnLmxlbmd0aCk7CisJY3J5cHRvX2NpcGhlcl9zZXRrZXkodGZtLCByYzRrZXksIGtsZW4pOworCWZvciAoaSA9IDA7IGkgPCBkYXRhX2xlbiArIFdFUF9JQ1ZfTEVOOyBpKyspCisJCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUodGZtLCBkYXRhICsgaSwgZGF0YSArIGkpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xODYsMTkgKzE4MywxOCBAQAogLyogUGVyZm9ybSBXRVAgZGVjcnlwdGlvbiB1c2luZyBnaXZlbiBrZXkuIGRhdGEgYnVmZmVyIGluY2x1ZGVzIGVuY3J5cHRlZAogICogcGF5bG9hZCwgaW5jbHVkaW5nIDQtYnl0ZSBJQ1YsIGJ1dCBfbm90XyBJVi4gZGF0YV9sZW4gbXVzdCBub3QgaW5jbHVkZSBJQ1YuCiAgKiBSZXR1cm4gMCBvbiBzdWNjZXNzIGFuZCAtMSBvbiBJQ1YgbWlzbWF0Y2guICovCi1pbnQgaWVlZTgwMjExX3dlcF9kZWNyeXB0X2RhdGEoc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbSwgdTggKnJjNGtleSwKK2ludCBpZWVlODAyMTFfd2VwX2RlY3J5cHRfZGF0YShzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtLCB1OCAqcmM0a2V5LAogCQkJICAgICAgIHNpemVfdCBrbGVuLCB1OCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuKQogewotCXN0cnVjdCBibGtjaXBoZXJfZGVzYyBkZXNjID0geyAudGZtID0gdGZtIH07Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0IHNnOwogCV9fbGUzMiBjcmM7CisJaW50IGk7CiAKIAlpZiAoSVNfRVJSKHRmbSkpCiAJCXJldHVybiAtMTsKIAotCWNyeXB0b19ibGtjaXBoZXJfc2V0a2V5KHRmbSwgcmM0a2V5LCBrbGVuKTsKLQlzZ19pbml0X29uZSgmc2csIGRhdGEsIGRhdGFfbGVuICsgV0VQX0lDVl9MRU4pOwotCWNyeXB0b19ibGtjaXBoZXJfZGVjcnlwdCgmZGVzYywgJnNnLCAmc2csIHNnLmxlbmd0aCk7CisJY3J5cHRvX2NpcGhlcl9zZXRrZXkodGZtLCByYzRrZXksIGtsZW4pOworCWZvciAoaSA9IDA7IGkgPCBkYXRhX2xlbiArIFdFUF9JQ1ZfTEVOOyBpKyspCisJCWNyeXB0b19jaXBoZXJfZGVjcnlwdF9vbmUodGZtLCBkYXRhICsgaSwgZGF0YSArIGkpOwogCiAJY3JjID0gY3B1X3RvX2xlMzIofmNyYzMyX2xlKH4wLCBkYXRhLCBkYXRhX2xlbikpOwogCWlmIChtZW1jbXAoJmNyYywgZGF0YSArIGRhdGFfbGVuLCBXRVBfSUNWX0xFTikgIT0gMCkKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS93ZXAuaCBiL25ldC9tYWM4MDIxMS93ZXAuaAppbmRleCA1ODY1NGVlLi4wMWU1NDg0IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvd2VwLmgKKysrIGIvbmV0L21hYzgwMjExL3dlcC5oCkBAIC0xOCwxMiArMTgsMTIgQEAKIAogaW50IGllZWU4MDIxMV93ZXBfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7CiB2b2lkIGllZWU4MDIxMV93ZXBfZnJlZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7Ci1pbnQgaWVlZTgwMjExX3dlcF9lbmNyeXB0X2RhdGEoc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbSwgdTggKnJjNGtleSwKK2ludCBpZWVlODAyMTFfd2VwX2VuY3J5cHRfZGF0YShzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtLCB1OCAqcmM0a2V5LAogCQkJCXNpemVfdCBrbGVuLCB1OCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuKTsKIGludCBpZWVlODAyMTFfd2VwX2VuY3J5cHQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkgIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgIGNvbnN0IHU4ICprZXksIGludCBrZXlsZW4sIGludCBrZXlpZHgpOwotaW50IGllZWU4MDIxMV93ZXBfZGVjcnlwdF9kYXRhKHN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm0sIHU4ICpyYzRrZXksCitpbnQgaWVlZTgwMjExX3dlcF9kZWNyeXB0X2RhdGEoc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbSwgdTggKnJjNGtleSwKIAkJCSAgICAgICBzaXplX3Qga2xlbiwgdTggKmRhdGEsIHNpemVfdCBkYXRhX2xlbik7CiBib29sIGllZWU4MDIxMV93ZXBfaXNfd2Vha19pdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KTsKIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3dvcmsuYyBiL25ldC9tYWM4MDIxMS93b3JrLmMKaW5kZXggYWMzNTQ5Ni4uZDJlN2YwZSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3dvcmsuYworKysgYi9uZXQvbWFjODAyMTEvd29yay5jCkBAIC0xOTAsOSArMTkwLDggQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKIAl1OCAqcG9zLCBxb3NfaW5mbzsKLQljb25zdCB1OCAqaWVzOwogCXNpemVfdCBvZmZzZXQgPSAwLCBub2Zmc2V0OwotCWludCBpLCBsZW4sIGNvdW50LCByYXRlc19sZW4sIHN1cHBfcmF0ZXNfbGVuOworCWludCBpLCBjb3VudCwgcmF0ZXNfbGVuLCBzdXBwX3JhdGVzX2xlbjsKIAl1MTYgY2FwYWI7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJdTMyIHJhdGVzID0gMDsKQEAgLTI3Nyw3ICsyNzYsNyBAQAogCX0KIAogCS8qIFNTSUQgKi8KLQlpZXMgPSBwb3MgPSBza2JfcHV0KHNrYiwgMiArIHdrLT5hc3NvYy5zc2lkX2xlbik7CisJcG9zID0gc2tiX3B1dChza2IsIDIgKyB3ay0+YXNzb2Muc3NpZF9sZW4pOwogCSpwb3MrKyA9IFdMQU5fRUlEX1NTSUQ7CiAJKnBvcysrID0gd2stPmFzc29jLnNzaWRfbGVuOwogCW1lbWNweShwb3MsIHdrLT5hc3NvYy5zc2lkLCB3ay0+YXNzb2Muc3NpZF9sZW4pOwpAQCAtMjg3LDcgKzI4Niw2IEBACiAJaWYgKHN1cHBfcmF0ZXNfbGVuID4gOCkKIAkJc3VwcF9yYXRlc19sZW4gPSA4OwogCi0JbGVuID0gc2JhbmQtPm5fYml0cmF0ZXM7CiAJcG9zID0gc2tiX3B1dChza2IsIHN1cHBfcmF0ZXNfbGVuICsgMik7CiAJKnBvcysrID0gV0xBTl9FSURfU1VQUF9SQVRFUzsKIAkqcG9zKysgPSBzdXBwX3JhdGVzX2xlbjsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS93cGEuYyBiL25ldC9tYWM4MDIxMS93cGEuYwppbmRleCBmMTc2NWRlLi45ZGMzYjVmIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvd3BhLmMKKysrIGIvbmV0L21hYzgwMjExL3dwYS5jCkBAIC04NywxNCArODcsNTAgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAotCS8qIE5vIHdheSB0byB2ZXJpZnkgdGhlIE1JQyBpZiB0aGUgaGFyZHdhcmUgc3RyaXBwZWQgaXQgKi8KLQlpZiAoc3RhdHVzLT5mbGFnICYgUlhfRkxBR19NTUlDX1NUUklQUEVEKQorCS8qCisJICogaXQgbWFrZXMgbm8gc2Vuc2UgdG8gY2hlY2sgZm9yIE1JQyBlcnJvcnMgb24gYW55dGhpbmcgb3RoZXIKKwkgKiB0aGFuIGRhdGEgZnJhbWVzLgorCSAqLworCWlmICghaWVlZTgwMjExX2lzX2RhdGFfcHJlc2VudChoZHItPmZyYW1lX2NvbnRyb2wpKQogCQlyZXR1cm4gUlhfQ09OVElOVUU7CiAKLQlpZiAoIXJ4LT5rZXkgfHwgcngtPmtleS0+Y29uZi5jaXBoZXIgIT0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUCB8fAotCSAgICAhaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoaGRyLT5mcmFtZV9jb250cm9sKSB8fAotCSAgICAhaWVlZTgwMjExX2lzX2RhdGFfcHJlc2VudChoZHItPmZyYW1lX2NvbnRyb2wpKQorCS8qCisJICogTm8gd2F5IHRvIHZlcmlmeSB0aGUgTUlDIGlmIHRoZSBoYXJkd2FyZSBzdHJpcHBlZCBpdCBvcgorCSAqIHRoZSBJViB3aXRoIHRoZSBrZXkgaW5kZXguIEluIHRoaXMgY2FzZSB3ZSBoYXZlIHNvbGVseSByZWx5CisJICogb24gdGhlIGRyaXZlciB0byBzZXQgUlhfRkxBR19NTUlDX0VSUk9SIGluIHRoZSBldmVudCBvZiBhCisJICogTUlDIGZhaWx1cmUgcmVwb3J0LgorCSAqLworCWlmIChzdGF0dXMtPmZsYWcgJiAoUlhfRkxBR19NTUlDX1NUUklQUEVEIHwgUlhfRkxBR19JVl9TVFJJUFBFRCkpIHsKKwkJaWYgKHN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfTU1JQ19FUlJPUikKKwkJCWdvdG8gbWljX2ZhaWw7CisKKwkJaWYgKCEoc3RhdHVzLT5mbGFnICYgUlhfRkxBR19JVl9TVFJJUFBFRCkpCisJCQlnb3RvIHVwZGF0ZV9pdjsKKwogCQlyZXR1cm4gUlhfQ09OVElOVUU7CisJfQorCisJLyoKKwkgKiBTb21lIGhhcmR3YXJlIHNlZW1zIHRvIGdlbmVyYXRlIE1pY2hhZWwgTUlDIGZhaWx1cmUgcmVwb3J0czsgZXZlbgorCSAqIHRob3VnaCwgdGhlIGZyYW1lIHdhcyBub3QgZW5jcnlwdGVkIHdpdGggVEtJUCBhbmQgdGhlcmVmb3JlIGhhcyBubworCSAqIE1JQy4gSWdub3JlIHRoZSBmbGFnIHRoZW0gdG8gYXZvaWQgdHJpZ2dlcmluZyBjb3VudGVybWVhc3VyZXMuCisJICovCisJaWYgKCFyeC0+a2V5IHx8IHJ4LT5rZXktPmNvbmYuY2lwaGVyICE9IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVAgfHwKKwkgICAgIShzdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0RFQ1JZUFRFRCkpCisJCXJldHVybiBSWF9DT05USU5VRTsKKworCWlmIChyeC0+c2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQICYmIHJ4LT5rZXktPmNvbmYua2V5aWR4KSB7CisJCS8qCisJCSAqIEFQcyB3aXRoIHBhaXJ3aXNlIGtleXMgc2hvdWxkIG5ldmVyIHJlY2VpdmUgTWljaGFlbCBNSUMKKwkJICogZXJyb3JzIGZvciBub24temVybyBrZXlpZHggYmVjYXVzZSB0aGVzZSBhcmUgcmVzZXJ2ZWQgZm9yCisJCSAqIGdyb3VwIGtleXMgYW5kIG9ubHkgdGhlIEFQIGlzIHNlbmRpbmcgcmVhbCBtdWx0aWNhc3QKKwkJICogZnJhbWVzIGluIHRoZSBCU1MuICgKKwkJICovCisJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOworCX0KKworCWlmIChzdGF0dXMtPmZsYWcgJiBSWF9GTEFHX01NSUNfRVJST1IpCisJCWdvdG8gbWljX2ZhaWw7CiAKIAloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGhkci0+ZnJhbWVfY29udHJvbCk7CiAJaWYgKHNrYi0+bGVuIDwgaGRybGVuICsgTUlDSEFFTF9NSUNfTEVOKQpAQCAtMTAyLDI3ICsxMzgsMjUgQEAKIAogCWRhdGEgPSBza2ItPmRhdGEgKyBoZHJsZW47CiAJZGF0YV9sZW4gPSBza2ItPmxlbiAtIGhkcmxlbiAtIE1JQ0hBRUxfTUlDX0xFTjsKLQogCWtleSA9ICZyeC0+a2V5LT5jb25mLmtleVtOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfUlhfTUlDX0tFWV07CiAJbWljaGFlbF9taWMoa2V5LCBoZHIsIGRhdGEsIGRhdGFfbGVuLCBtaWMpOwotCWlmIChtZW1jbXAobWljLCBkYXRhICsgZGF0YV9sZW4sIE1JQ0hBRUxfTUlDX0xFTikgIT0gMCkgewotCQlpZiAoIShzdGF0dXMtPnJ4X2ZsYWdzICYgSUVFRTgwMjExX1JYX1JBX01BVENIKSkKLQkJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOwotCi0JCW1hYzgwMjExX2V2X21pY2hhZWxfbWljX2ZhaWx1cmUocngtPnNkYXRhLCByeC0+a2V5LT5jb25mLmtleWlkeCwKLQkJCQkJCSh2b2lkICopIHNrYi0+ZGF0YSwgTlVMTCwKLQkJCQkJCUdGUF9BVE9NSUMpOwotCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKLQl9CisJaWYgKG1lbWNtcChtaWMsIGRhdGEgKyBkYXRhX2xlbiwgTUlDSEFFTF9NSUNfTEVOKSAhPSAwKQorCQlnb3RvIG1pY19mYWlsOwogCiAJLyogcmVtb3ZlIE1pY2hhZWwgTUlDIGZyb20gcGF5bG9hZCAqLwogCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSBNSUNIQUVMX01JQ19MRU4pOwogCit1cGRhdGVfaXY6CiAJLyogdXBkYXRlIElWIGluIGtleSBpbmZvcm1hdGlvbiB0byBiZSBhYmxlIHRvIGRldGVjdCByZXBsYXlzICovCiAJcngtPmtleS0+dS50a2lwLnJ4W3J4LT5xdWV1ZV0uaXYzMiA9IHJ4LT50a2lwX2l2MzI7CiAJcngtPmtleS0+dS50a2lwLnJ4W3J4LT5xdWV1ZV0uaXYxNiA9IHJ4LT50a2lwX2l2MTY7CiAKIAlyZXR1cm4gUlhfQ09OVElOVUU7CisKK21pY19mYWlsOgorCW1hYzgwMjExX2V2X21pY2hhZWxfbWljX2ZhaWx1cmUocngtPnNkYXRhLCByeC0+a2V5LT5jb25mLmtleWlkeCwKKwkJCQkJKHZvaWQgKikgc2tiLT5kYXRhLCBOVUxMLCBHRlBfQVRPTUlDKTsKKwlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKIH0KIAogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jCmluZGV4IGExMTNmZjAuLmJhMmQxNjYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jCkBAIC0yOTMsNyArMjkzLDcgQEAKIAogCWZvciAoOyAhYmVmb3JlKGlwX3RvLCBpcCk7IGlwICs9IG1hcC0+aG9zdHMpIHsKIAkJaWQgPSBpcF90b19pZChtYXAsIGlwKTsKLQkJcmV0ID0gYWR0Zm4oc2V0LCAmaWQsIHRpbWVvdXQpOzsKKwkJcmV0ID0gYWR0Zm4oc2V0LCAmaWQsIHRpbWVvdXQpOwogCiAJCWlmIChyZXQgJiYgIWlwX3NldF9lZXhpc3QocmV0LCBmbGFncykpCiAJCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfZ2V0cG9ydC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfZ2V0cG9ydC5jCmluZGV4IDhkNTIyNzIuLjc1NzE0M2IgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2dldHBvcnQuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9nZXRwb3J0LmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9pY21wLmg+CiAjaW5jbHVkZSA8bGludXgvaWNtcHY2Lmg+CisjaW5jbHVkZSA8bGludXgvc2N0cC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaD4KICNpbmNsdWRlIDxuZXQvaXAuaD4KICNpbmNsdWRlIDxuZXQvaXB2Ni5oPgpAQCAtMzUsNyArMzYsMjAgQEAKIAkJKnBvcnQgPSBzcmMgPyB0aC0+c291cmNlIDogdGgtPmRlc3Q7CiAJCWJyZWFrOwogCX0KLQljYXNlIElQUFJPVE9fVURQOiB7CisJY2FzZSBJUFBST1RPX1NDVFA6IHsKKwkJc2N0cF9zY3RwaGRyX3QgX3NoOworCQljb25zdCBzY3RwX3NjdHBoZHJfdCAqc2g7CisKKwkJc2ggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwcm90b29mZiwgc2l6ZW9mKF9zaCksICZfc2gpOworCQlpZiAoc2ggPT0gTlVMTCkKKwkJCS8qIE5vIGNob2ljZSBlaXRoZXIgKi8KKwkJCXJldHVybiBmYWxzZTsKKworCQkqcG9ydCA9IHNyYyA/IHNoLT5zb3VyY2UgOiBzaC0+ZGVzdDsKKwkJYnJlYWs7CisJfQorCWNhc2UgSVBQUk9UT19VRFA6CisJY2FzZSBJUFBST1RPX1VEUExJVEU6IHsKIAkJc3RydWN0IHVkcGhkciBfdWRwaDsKIAkJY29uc3Qgc3RydWN0IHVkcGhkciAqdWg7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jCmluZGV4IGI5MjE0MTQuLjE0MjgxYjYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYwpAQCAtNDkxLDcgKzQ5MSw3IEBACiAJLmZlYXR1cmVzCT0gSVBTRVRfVFlQRV9JUCB8IElQU0VUX1RZUEVfUE9SVCwKIAkuZGltZW5zaW9uCT0gSVBTRVRfRElNX1RXTywKIAkuZmFtaWx5CQk9IEFGX1VOU1BFQywKLQkucmV2aXNpb24JPSAwLAorCS5yZXZpc2lvbgk9IDEsCiAJLmNyZWF0ZQkJPSBoYXNoX2lwcG9ydF9jcmVhdGUsCiAJLmNyZWF0ZV9wb2xpY3kJPSB7CiAJCVtJUFNFVF9BVFRSX0hBU0hTSVpFXQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMKaW5kZXggNDY0Mjg3Mi4uNDAxYzhhMiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYwpAQCAtNTA5LDcgKzUwOSw3IEBACiAJLmZlYXR1cmVzCT0gSVBTRVRfVFlQRV9JUCB8IElQU0VUX1RZUEVfUE9SVCB8IElQU0VUX1RZUEVfSVAyLAogCS5kaW1lbnNpb24JPSBJUFNFVF9ESU1fVEhSRUUsCiAJLmZhbWlseQkJPSBBRl9VTlNQRUMsCi0JLnJldmlzaW9uCT0gMCwKKwkucmV2aXNpb24JPSAxLAogCS5jcmVhdGUJCT0gaGFzaF9pcHBvcnRpcF9jcmVhdGUsCiAJLmNyZWF0ZV9wb2xpY3kJPSB7CiAJCVtJUFNFVF9BVFRSX0hBU0hTSVpFXQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYwppbmRleCAyY2I4NGE1Li40NzQzZTU0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMKQEAgLTU3NCw3ICs1NzQsNyBAQAogCS5mZWF0dXJlcwk9IElQU0VUX1RZUEVfSVAgfCBJUFNFVF9UWVBFX1BPUlQgfCBJUFNFVF9UWVBFX0lQMiwKIAkuZGltZW5zaW9uCT0gSVBTRVRfRElNX1RIUkVFLAogCS5mYW1pbHkJCT0gQUZfVU5TUEVDLAotCS5yZXZpc2lvbgk9IDAsCisJLnJldmlzaW9uCT0gMSwKIAkuY3JlYXRlCQk9IGhhc2hfaXBwb3J0bmV0X2NyZWF0ZSwKIAkuY3JlYXRlX3BvbGljeQk9IHsKIAkJW0lQU0VUX0FUVFJfSEFTSFNJWkVdCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMKaW5kZXggODU5ODY3Ni4uZDJhNDAzNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMKQEAgLTUyNiw3ICs1MjYsNyBAQAogCS5mZWF0dXJlcwk9IElQU0VUX1RZUEVfSVAgfCBJUFNFVF9UWVBFX1BPUlQsCiAJLmRpbWVuc2lvbgk9IElQU0VUX0RJTV9UV08sCiAJLmZhbWlseQkJPSBBRl9VTlNQRUMsCi0JLnJldmlzaW9uCT0gMCwKKwkucmV2aXNpb24JPSAxLAogCS5jcmVhdGUJCT0gaGFzaF9uZXRwb3J0X2NyZWF0ZSwKIAkuY3JlYXRlX3BvbGljeQk9IHsKIAkJW0lQU0VUX0FUVFJfSEFTSFNJWkVdCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jCmluZGV4IGE3NGRhZTYuLmJmYTgwOGYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYwpAQCAtMTM4MiwxNSArMTM4Miw3IEBACiAJaXBfdnNfaW5fc3RhdHMoY3AsIHNrYik7CiAJaWYgKElQUFJPVE9fVENQID09IGNpaC0+cHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gY2loLT5wcm90b2NvbCkKIAkJb2Zmc2V0ICs9IDIgKiBzaXplb2YoX191MTYpOwotCXZlcmRpY3QgPSBpcF92c19pY21wX3htaXQoc2tiLCBjcCwgcHAsIG9mZnNldCk7Ci0JLyogTE9DQUxOT0RFIGZyb20gRk9SV0FSRCBob29rIGlzIG5vdCBzdXBwb3J0ZWQgKi8KLQlpZiAodmVyZGljdCA9PSBORl9BQ0NFUFQgJiYgaG9va251bSA9PSBORl9JTkVUX0ZPUldBUkQgJiYKLQkgICAgc2tiX3J0YWJsZShza2IpLT5ydF9mbGFncyAmIFJUQ0ZfTE9DQUwpIHsKLQkJSVBfVlNfREJHKDEsICIlcygpOiAiCi0JCQkgICJsb2NhbCBkZWxpdmVyeSB0byAlcEk0IGJ1dCBpbiBGT1JXQVJEXG4iLAotCQkJICBfX2Z1bmNfXywgJnNrYl9ydGFibGUoc2tiKS0+cnRfZHN0KTsKLQkJdmVyZGljdCA9IE5GX0RST1A7Ci0JfQorCXZlcmRpY3QgPSBpcF92c19pY21wX3htaXQoc2tiLCBjcCwgcHAsIG9mZnNldCwgaG9va251bSk7CiAKICAgb3V0OgogCV9faXBfdnNfY29ubl9wdXQoY3ApOwpAQCAtMTQxMiw3ICsxNDA0LDYgQEAKIAlzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwOwogCXN0cnVjdCBpcF92c19wcm90b19kYXRhICpwZDsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0LCB2ZXJkaWN0OwotCXN0cnVjdCBydDZfaW5mbyAqcnQ7CiAKIAkqcmVsYXRlZCA9IDE7CiAKQEAgLTE0NzQsMjMgKzE0NjUsMTIgQEAKIAlpZiAoIWNwKQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCi0JdmVyZGljdCA9IE5GX0RST1A7Ci0KIAkvKiBkbyB0aGUgc3RhdGlzdGljcyBhbmQgcHV0IGl0IGJhY2sgKi8KIAlpcF92c19pbl9zdGF0cyhjcCwgc2tiKTsKIAlpZiAoSVBQUk9UT19UQ1AgPT0gY2loLT5uZXh0aGRyIHx8IElQUFJPVE9fVURQID09IGNpaC0+bmV4dGhkciB8fAogCSAgICBJUFBST1RPX1NDVFAgPT0gY2loLT5uZXh0aGRyKQogCQlvZmZzZXQgKz0gMiAqIHNpemVvZihfX3UxNik7Ci0JdmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdF92Nihza2IsIGNwLCBwcCwgb2Zmc2V0KTsKLQkvKiBMT0NBTE5PREUgZnJvbSBGT1JXQVJEIGhvb2sgaXMgbm90IHN1cHBvcnRlZCAqLwotCWlmICh2ZXJkaWN0ID09IE5GX0FDQ0VQVCAmJiBob29rbnVtID09IE5GX0lORVRfRk9SV0FSRCAmJgotCSAgICAocnQgPSAoc3RydWN0IHJ0Nl9pbmZvICopIHNrYl9kc3Qoc2tiKSkgJiYKLQkgICAgcnQtPnJ0NmlfZGV2ICYmIHJ0LT5ydDZpX2Rldi0+ZmxhZ3MgJiBJRkZfTE9PUEJBQ0spIHsKLQkJSVBfVlNfREJHKDEsICIlcygpOiAiCi0JCQkgICJsb2NhbCBkZWxpdmVyeSB0byAlcEk2IGJ1dCBpbiBGT1JXQVJEXG4iLAotCQkJICBfX2Z1bmNfXywgJnJ0LT5ydDZpX2RzdCk7Ci0JCXZlcmRpY3QgPSBORl9EUk9QOwotCX0KKwl2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0X3Y2KHNrYiwgY3AsIHBwLCBvZmZzZXQsIGhvb2tudW0pOwogCiAJX19pcF92c19jb25uX3B1dChjcCk7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYwppbmRleCAzNzg5MGYyLi42OTljNzlhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jCkBAIC0yMDY5LDkgKzIwNjksNiBAQAogCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfbmV0LAogfTsKIAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfUFJPQ19GUwogc3RhdGljIGludCBpcF92c19zdGF0c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewogCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX3NpbmdsZV9uZXQoc2VxKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jCmluZGV4IDYxMzJiMjEuLmVlMzE5YTQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYwpAQCAtODcsNyArODcsNyBAQAogLyogR2V0IHJvdXRlIHRvIGRlc3RpbmF0aW9uIG9yIHJlbW90ZSBzZXJ2ZXIgKi8KIHN0YXRpYyBzdHJ1Y3QgcnRhYmxlICoKIF9faXBfdnNfZ2V0X291dF9ydChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCwKLQkJICAgX19iZTMyIGRhZGRyLCB1MzIgcnRvcywgaW50IHJ0X21vZGUpCisJCSAgIF9fYmUzMiBkYWRkciwgdTMyIHJ0b3MsIGludCBydF9tb2RlLCBfX2JlMzIgKnJldF9zYWRkcikKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYl9kc3Qoc2tiKS0+ZGV2KTsKIAlzdHJ1Y3QgcnRhYmxlICpydDsJCQkvKiBSb3V0ZSB0byB0aGUgb3RoZXIgaG9zdCAqLwpAQCAtOTgsNyArOTgsMTIgQEAKIAkJc3Bpbl9sb2NrKCZkZXN0LT5kc3RfbG9jayk7CiAJCWlmICghKHJ0ID0gKHN0cnVjdCBydGFibGUgKikKIAkJICAgICAgX19pcF92c19kc3RfY2hlY2soZGVzdCwgcnRvcykpKSB7Ci0JCQlydCA9IGlwX3JvdXRlX291dHB1dChuZXQsIGRlc3QtPmFkZHIuaXAsIDAsIHJ0b3MsIDApOworCQkJc3RydWN0IGZsb3dpNCBmbDQ7CisKKwkJCW1lbXNldCgmZmw0LCAwLCBzaXplb2YoZmw0KSk7CisJCQlmbDQuZGFkZHIgPSBkZXN0LT5hZGRyLmlwOworCQkJZmw0LmZsb3dpNF90b3MgPSBydG9zOworCQkJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgJmZsNCk7CiAJCQlpZiAoSVNfRVJSKHJ0KSkgewogCQkJCXNwaW5fdW5sb2NrKCZkZXN0LT5kc3RfbG9jayk7CiAJCQkJSVBfVlNfREJHX1JMKCJpcF9yb3V0ZV9vdXRwdXQgZXJyb3IsIGRlc3Q6ICVwSTRcbiIsCkBAIC0xMDYsMTggKzExMSwzMCBAQAogCQkJCXJldHVybiBOVUxMOwogCQkJfQogCQkJX19pcF92c19kc3Rfc2V0KGRlc3QsIHJ0b3MsIGRzdF9jbG9uZSgmcnQtPmRzdCksIDApOwotCQkJSVBfVlNfREJHKDEwLCAibmV3IGRzdCAlcEk0LCByZWZjbnQ9JWQsIHJ0b3M9JVhcbiIsCi0JCQkJICAmZGVzdC0+YWRkci5pcCwKKwkJCWRlc3QtPmRzdF9zYWRkci5pcCA9IGZsNC5zYWRkcjsKKwkJCUlQX1ZTX0RCRygxMCwgIm5ldyBkc3QgJXBJNCwgc3JjICVwSTQsIHJlZmNudD0lZCwgIgorCQkJCSAgInJ0b3M9JVhcbiIsCisJCQkJICAmZGVzdC0+YWRkci5pcCwgJmRlc3QtPmRzdF9zYWRkci5pcCwKIAkJCQkgIGF0b21pY19yZWFkKCZydC0+ZHN0Ll9fcmVmY250KSwgcnRvcyk7CiAJCX0KKwkJZGFkZHIgPSBkZXN0LT5hZGRyLmlwOworCQlpZiAocmV0X3NhZGRyKQorCQkJKnJldF9zYWRkciA9IGRlc3QtPmRzdF9zYWRkci5pcDsKIAkJc3Bpbl91bmxvY2soJmRlc3QtPmRzdF9sb2NrKTsKIAl9IGVsc2UgewotCQlydCA9IGlwX3JvdXRlX291dHB1dChuZXQsIGRhZGRyLCAwLCBydG9zLCAwKTsKKwkJc3RydWN0IGZsb3dpNCBmbDQ7CisKKwkJbWVtc2V0KCZmbDQsIDAsIHNpemVvZihmbDQpKTsKKwkJZmw0LmRhZGRyID0gZGFkZHI7CisJCWZsNC5mbG93aTRfdG9zID0gcnRvczsKKwkJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgJmZsNCk7CiAJCWlmIChJU19FUlIocnQpKSB7CiAJCQlJUF9WU19EQkdfUkwoImlwX3JvdXRlX291dHB1dCBlcnJvciwgZGVzdDogJXBJNFxuIiwKIAkJCQkgICAgICZkYWRkcik7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQorCQlpZiAocmV0X3NhZGRyKQorCQkJKnJldF9zYWRkciA9IGZsNC5zYWRkcjsKIAl9CiAKIAlsb2NhbCA9IHJ0LT5ydF9mbGFncyAmIFJUQ0ZfTE9DQUw7CkBAIC0xMjUsNyArMTQyLDcgQEAKIAkgICAgICBydF9tb2RlKSkgewogCQlJUF9WU19EQkdfUkwoIlN0b3BwaW5nIHRyYWZmaWMgdG8gJXMgYWRkcmVzcywgZGVzdDogJXBJNFxuIiwKIAkJCSAgICAgKHJ0LT5ydF9mbGFncyAmIFJUQ0ZfTE9DQUwpID8KLQkJCSAgICAgImxvY2FsIjoibm9uLWxvY2FsIiwgJnJ0LT5ydF9kc3QpOworCQkJICAgICAibG9jYWwiOiJub24tbG9jYWwiLCAmZGFkZHIpOwogCQlpcF9ydF9wdXQocnQpOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC0xMzMsMTQgKzE1MCwxNCBAQAogCSAgICAhKChvcnQgPSBza2JfcnRhYmxlKHNrYikpICYmIG9ydC0+cnRfZmxhZ3MgJiBSVENGX0xPQ0FMKSkgewogCQlJUF9WU19EQkdfUkwoIlJlZGlyZWN0IGZyb20gbm9uLWxvY2FsIGFkZHJlc3MgJXBJNCB0byBsb2NhbCAiCiAJCQkgICAgICJyZXF1aXJlcyBOQVQgbWV0aG9kLCBkZXN0OiAlcEk0XG4iLAotCQkJICAgICAmaXBfaGRyKHNrYiktPmRhZGRyLCAmcnQtPnJ0X2RzdCk7CisJCQkgICAgICZpcF9oZHIoc2tiKS0+ZGFkZHIsICZkYWRkcik7CiAJCWlwX3J0X3B1dChydCk7CiAJCXJldHVybiBOVUxMOwogCX0KIAlpZiAodW5saWtlbHkoIWxvY2FsICYmIGlwdjRfaXNfbG9vcGJhY2soaXBfaGRyKHNrYiktPnNhZGRyKSkpIHsKIAkJSVBfVlNfREJHX1JMKCJTdG9wcGluZyB0cmFmZmljIGZyb20gbG9vcGJhY2sgYWRkcmVzcyAlcEk0ICIKIAkJCSAgICAgInRvIG5vbi1sb2NhbCBhZGRyZXNzLCBkZXN0OiAlcEk0XG4iLAotCQkJICAgICAmaXBfaGRyKHNrYiktPnNhZGRyLCAmcnQtPnJ0X2RzdCk7CisJCQkgICAgICZpcF9oZHIoc2tiKS0+c2FkZHIsICZkYWRkcik7CiAJCWlwX3J0X3B1dChydCk7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTIyOSw4ICsyNDYsNiBAQAogCiAvKgogICogR2V0IHJvdXRlIHRvIGRlc3RpbmF0aW9uIG9yIHJlbW90ZSBzZXJ2ZXIKLSAqIHJ0X21vZGU6IGZsYWdzLCAmMT1BbGxvdyBsb2NhbCBkZXN0LCAmMj1BbGxvdyBub24tbG9jYWwgZGVzdCwKLSAqCSAgICAmND1BbGxvdyByZWRpcmVjdCBmcm9tIHJlbW90ZSBkYWRkciB0byBsb2NhbAogICovCiBzdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICoKIF9faXBfdnNfZ2V0X291dF9ydF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCwKQEAgLTI1MCw3ICsyNjUsNyBAQAogCQkJdTMyIGNvb2tpZTsKIAogCQkJZHN0ID0gX19pcF92c19yb3V0ZV9vdXRwdXRfdjYobmV0LCAmZGVzdC0+YWRkci5pbjYsCi0JCQkJCQkgICAgICAmZGVzdC0+ZHN0X3NhZGRyLAorCQkJCQkJICAgICAgJmRlc3QtPmRzdF9zYWRkci5pbjYsCiAJCQkJCQkgICAgICBkb194ZnJtKTsKIAkJCWlmICghZHN0KSB7CiAJCQkJc3Bpbl91bmxvY2soJmRlc3QtPmRzdF9sb2NrKTsKQEAgLTI2MCwxMSArMjc1LDExIEBACiAJCQljb29raWUgPSBydC0+cnQ2aV9ub2RlID8gcnQtPnJ0Nmlfbm9kZS0+Zm5fc2VybnVtIDogMDsKIAkJCV9faXBfdnNfZHN0X3NldChkZXN0LCAwLCBkc3RfY2xvbmUoJnJ0LT5kc3QpLCBjb29raWUpOwogCQkJSVBfVlNfREJHKDEwLCAibmV3IGRzdCAlcEk2LCBzcmMgJXBJNiwgcmVmY250PSVkXG4iLAotCQkJCSAgJmRlc3QtPmFkZHIuaW42LCAmZGVzdC0+ZHN0X3NhZGRyLAorCQkJCSAgJmRlc3QtPmFkZHIuaW42LCAmZGVzdC0+ZHN0X3NhZGRyLmluNiwKIAkJCQkgIGF0b21pY19yZWFkKCZydC0+ZHN0Ll9fcmVmY250KSk7CiAJCX0KIAkJaWYgKHJldF9zYWRkcikKLQkJCWlwdjZfYWRkcl9jb3B5KHJldF9zYWRkciwgJmRlc3QtPmRzdF9zYWRkcik7CisJCQlpcHY2X2FkZHJfY29weShyZXRfc2FkZHIsICZkZXN0LT5kc3Rfc2FkZHIuaW42KTsKIAkJc3Bpbl91bmxvY2soJmRlc3QtPmRzdF9sb2NrKTsKIAl9IGVsc2UgewogCQlkc3QgPSBfX2lwX3ZzX3JvdXRlX291dHB1dF92NihuZXQsIGRhZGRyLCByZXRfc2FkZHIsIGRvX3hmcm0pOwpAQCAtMjc0LDEzICsyODksMTQgQEAKIAl9CiAKIAlsb2NhbCA9IF9faXBfdnNfaXNfbG9jYWxfcm91dGU2KHJ0KTsKLQlpZiAoISgobG9jYWwgPyAxIDogMikgJiBydF9tb2RlKSkgeworCWlmICghKChsb2NhbCA/IElQX1ZTX1JUX01PREVfTE9DQUwgOiBJUF9WU19SVF9NT0RFX05PTl9MT0NBTCkgJgorCSAgICAgIHJ0X21vZGUpKSB7CiAJCUlQX1ZTX0RCR19STCgiU3RvcHBpbmcgdHJhZmZpYyB0byAlcyBhZGRyZXNzLCBkZXN0OiAlcEk2XG4iLAogCQkJICAgICBsb2NhbCA/ICJsb2NhbCI6Im5vbi1sb2NhbCIsIGRhZGRyKTsKIAkJZHN0X3JlbGVhc2UoJnJ0LT5kc3QpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JaWYgKGxvY2FsICYmICEocnRfbW9kZSAmIDQpICYmCisJaWYgKGxvY2FsICYmICEocnRfbW9kZSAmIElQX1ZTX1JUX01PREVfUkRSKSAmJgogCSAgICAhKChvcnQgPSAoc3RydWN0IHJ0Nl9pbmZvICopIHNrYl9kc3Qoc2tiKSkgJiYKIAkgICAgICBfX2lwX3ZzX2lzX2xvY2FsX3JvdXRlNihvcnQpKSkgewogCQlJUF9WU19EQkdfUkwoIlJlZGlyZWN0IGZyb20gbm9uLWxvY2FsIGFkZHJlc3MgJXBJNiB0byBsb2NhbCAiCkBAIC0zODYsNyArNDAyLDcgQEAKIAlFbnRlckZ1bmN0aW9uKDEwKTsKIAogCWlmICghKHJ0ID0gX19pcF92c19nZXRfb3V0X3J0KHNrYiwgTlVMTCwgaXBoLT5kYWRkciwgUlRfVE9TKGlwaC0+dG9zKSwKLQkJCQkgICAgICBJUF9WU19SVF9NT0RFX05PTl9MT0NBTCkpKQorCQkJCSAgICAgIElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMLCBOVUxMKSkpCiAJCWdvdG8gdHhfZXJyb3JfaWNtcDsKIAogCS8qIE1UVSBjaGVja2luZyAqLwpAQCAtNDQwLDcgKzQ1Niw4IEBACiAKIAlFbnRlckZ1bmN0aW9uKDEwKTsKIAotCWlmICghKHJ0ID0gX19pcF92c19nZXRfb3V0X3J0X3Y2KHNrYiwgTlVMTCwgJmlwaC0+ZGFkZHIsIE5VTEwsIDAsIDIpKSkKKwlpZiAoIShydCA9IF9faXBfdnNfZ2V0X291dF9ydF92Nihza2IsIE5VTEwsICZpcGgtPmRhZGRyLCBOVUxMLCAwLAorCQkJCQkgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwpKSkKIAkJZ290byB0eF9lcnJvcl9pY21wOwogCiAJLyogTVRVIGNoZWNraW5nICovCkBAIC01MTcsNyArNTM0LDcgQEAKIAkJCQkgICAgICBSVF9UT1MoaXBoLT50b3MpLAogCQkJCSAgICAgIElQX1ZTX1JUX01PREVfTE9DQUwgfAogCQkJCQlJUF9WU19SVF9NT0RFX05PTl9MT0NBTCB8Ci0JCQkJCUlQX1ZTX1JUX01PREVfUkRSKSkpCisJCQkJCUlQX1ZTX1JUX01PREVfUkRSLCBOVUxMKSkpCiAJCWdvdG8gdHhfZXJyb3JfaWNtcDsKIAlsb2NhbCA9IHJ0LT5ydF9mbGFncyAmIFJUQ0ZfTE9DQUw7CiAJLyoKQEAgLTUzOSw3ICs1NTYsNyBAQAogI2VuZGlmCiAKIAkvKiBGcm9tIHdvcmxkIGJ1dCBETkFUIHRvIGxvb3BiYWNrIGFkZHJlc3M/ICovCi0JaWYgKGxvY2FsICYmIGlwdjRfaXNfbG9vcGJhY2socnQtPnJ0X2RzdCkgJiYKKwlpZiAobG9jYWwgJiYgaXB2NF9pc19sb29wYmFjayhjcC0+ZGFkZHIuaXApICYmCiAJICAgIHJ0X2lzX2lucHV0X3JvdXRlKHNrYl9ydGFibGUoc2tiKSkpIHsKIAkJSVBfVlNfREJHX1JMX1BLVCgxLCBBRl9JTkVULCBwcCwgc2tiLCAwLCAiaXBfdnNfbmF0X3htaXQoKTogIgogCQkJCSAic3RvcHBpbmcgRE5BVCB0byBsb29wYmFjayBhZGRyZXNzIik7CkBAIC02MzIsNyArNjQ5LDkgQEAKIAl9CiAKIAlpZiAoIShydCA9IF9faXBfdnNfZ2V0X291dF9ydF92Nihza2IsIGNwLT5kZXN0LCAmY3AtPmRhZGRyLmluNiwgTlVMTCwKLQkJCQkJIDAsIDF8Mnw0KSkpCisJCQkJCSAwLCAoSVBfVlNfUlRfTU9ERV9MT0NBTCB8CisJCQkJCSAgICAgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwgfAorCQkJCQkgICAgIElQX1ZTX1JUX01PREVfUkRSKSkpKQogCQlnb3RvIHR4X2Vycm9yX2ljbXA7CiAJbG9jYWwgPSBfX2lwX3ZzX2lzX2xvY2FsX3JvdXRlNihydCk7CiAJLyoKQEAgLTc0OCw2ICs3NjcsNyBAQAogCQkgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHApCiB7CiAJc3RydWN0IHJ0YWJsZSAqcnQ7CQkJLyogUm91dGUgdG8gdGhlIG90aGVyIGhvc3QgKi8KKwlfX2JlMzIgc2FkZHI7CQkJCS8qIFNvdXJjZSBmb3IgdHVubmVsICovCiAJc3RydWN0IG5ldF9kZXZpY2UgKnRkZXY7CQkvKiBEZXZpY2UgdG8gb3RoZXIgaG9zdCAqLwogCXN0cnVjdCBpcGhkciAgKm9sZF9pcGggPSBpcF9oZHIoc2tiKTsKIAl1OCAgICAgdG9zID0gb2xkX2lwaC0+dG9zOwpAQCAtNzYxLDcgKzc4MSw4IEBACiAKIAlpZiAoIShydCA9IF9faXBfdnNfZ2V0X291dF9ydChza2IsIGNwLT5kZXN0LCBjcC0+ZGFkZHIuaXAsCiAJCQkJICAgICAgUlRfVE9TKHRvcyksIElQX1ZTX1JUX01PREVfTE9DQUwgfAotCQkJCQkJICAgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwpKSkKKwkJCQkJCSAgIElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMLAorCQkJCQkJICAgJnNhZGRyKSkpCiAJCWdvdG8gdHhfZXJyb3JfaWNtcDsKIAlpZiAocnQtPnJ0X2ZsYWdzICYgUlRDRl9MT0NBTCkgewogCQlpcF9ydF9wdXQocnQpOwpAQCAtODI5LDggKzg1MCw4IEBACiAJaXBoLT5mcmFnX29mZgkJPQlkZjsKIAlpcGgtPnByb3RvY29sCQk9CUlQUFJPVE9fSVBJUDsKIAlpcGgtPnRvcwkJPQl0b3M7Ci0JaXBoLT5kYWRkcgkJPQlydC0+cnRfZHN0OwotCWlwaC0+c2FkZHIJCT0JcnQtPnJ0X3NyYzsKKwlpcGgtPmRhZGRyCQk9CWNwLT5kYWRkci5pcDsKKwlpcGgtPnNhZGRyCQk9CXNhZGRyOwogCWlwaC0+dHRsCQk9CW9sZF9pcGgtPnR0bDsKIAlpcF9zZWxlY3RfaWRlbnQoaXBoLCAmcnQtPmRzdCwgTlVMTCk7CiAKQEAgLTg3NSw3ICs4OTYsOCBAQAogCUVudGVyRnVuY3Rpb24oMTApOwogCiAJaWYgKCEocnQgPSBfX2lwX3ZzX2dldF9vdXRfcnRfdjYoc2tiLCBjcC0+ZGVzdCwgJmNwLT5kYWRkci5pbjYsCi0JCQkJCSAmc2FkZHIsIDEsIDF8MikpKQorCQkJCQkgJnNhZGRyLCAxLCAoSVBfVlNfUlRfTU9ERV9MT0NBTCB8CisJCQkJCQkgICAgIElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMKSkpKQogCQlnb3RvIHR4X2Vycm9yX2ljbXA7CiAJaWYgKF9faXBfdnNfaXNfbG9jYWxfcm91dGU2KHJ0KSkgewogCQlkc3RfcmVsZWFzZSgmcnQtPmRzdCk7CkBAIC05OTIsNyArMTAxNCw3IEBACiAJaWYgKCEocnQgPSBfX2lwX3ZzX2dldF9vdXRfcnQoc2tiLCBjcC0+ZGVzdCwgY3AtPmRhZGRyLmlwLAogCQkJCSAgICAgIFJUX1RPUyhpcGgtPnRvcyksCiAJCQkJICAgICAgSVBfVlNfUlRfTU9ERV9MT0NBTCB8Ci0JCQkJCUlQX1ZTX1JUX01PREVfTk9OX0xPQ0FMKSkpCisJCQkJCUlQX1ZTX1JUX01PREVfTk9OX0xPQ0FMLCBOVUxMKSkpCiAJCWdvdG8gdHhfZXJyb3JfaWNtcDsKIAlpZiAocnQtPnJ0X2ZsYWdzICYgUlRDRl9MT0NBTCkgewogCQlpcF9ydF9wdXQocnQpOwpAQCAtMTA1MCw3ICsxMDcyLDggQEAKIAlFbnRlckZ1bmN0aW9uKDEwKTsKIAogCWlmICghKHJ0ID0gX19pcF92c19nZXRfb3V0X3J0X3Y2KHNrYiwgY3AtPmRlc3QsICZjcC0+ZGFkZHIuaW42LCBOVUxMLAotCQkJCQkgMCwgMXwyKSkpCisJCQkJCSAwLCAoSVBfVlNfUlRfTU9ERV9MT0NBTCB8CisJCQkJCSAgICAgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwpKSkpCiAJCWdvdG8gdHhfZXJyb3JfaWNtcDsKIAlpZiAoX19pcF92c19pc19sb2NhbF9yb3V0ZTYocnQpKSB7CiAJCWRzdF9yZWxlYXNlKCZydC0+ZHN0KTsKQEAgLTExMDksMTIgKzExMzIsMTMgQEAKICAqLwogaW50CiBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAotCQlzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0KQorCQlzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgaG9va251bSkKIHsKIAlzdHJ1Y3QgcnRhYmxlCSpydDsJLyogUm91dGUgdG8gdGhlIG90aGVyIGhvc3QgKi8KIAlpbnQgbXR1OwogCWludCByYzsKIAlpbnQgbG9jYWw7CisJaW50IHJ0X21vZGU7CiAKIAlFbnRlckZ1bmN0aW9uKDEwKTsKIApAQCAtMTEzNSwxMSArMTE1OSwxMyBAQAogCSAqIG1hbmdsZSBhbmQgc2VuZCB0aGUgcGFja2V0IGhlcmUgKG9ubHkgZm9yIFZTL05BVCkKIAkgKi8KIAorCS8qIExPQ0FMTk9ERSBmcm9tIEZPUldBUkQgaG9vayBpcyBub3Qgc3VwcG9ydGVkICovCisJcnRfbW9kZSA9IChob29rbnVtICE9IE5GX0lORVRfRk9SV0FSRCkgPworCQkgIElQX1ZTX1JUX01PREVfTE9DQUwgfCBJUF9WU19SVF9NT0RFX05PTl9MT0NBTCB8CisJCSAgSVBfVlNfUlRfTU9ERV9SRFIgOiBJUF9WU19SVF9NT0RFX05PTl9MT0NBTDsKIAlpZiAoIShydCA9IF9faXBfdnNfZ2V0X291dF9ydChza2IsIGNwLT5kZXN0LCBjcC0+ZGFkZHIuaXAsCiAJCQkJICAgICAgUlRfVE9TKGlwX2hkcihza2IpLT50b3MpLAotCQkJCSAgICAgIElQX1ZTX1JUX01PREVfTE9DQUwgfAotCQkJCQlJUF9WU19SVF9NT0RFX05PTl9MT0NBTCB8Ci0JCQkJCUlQX1ZTX1JUX01PREVfUkRSKSkpCisJCQkJICAgICAgcnRfbW9kZSwgTlVMTCkpKQogCQlnb3RvIHR4X2Vycm9yX2ljbXA7CiAJbG9jYWwgPSBydC0+cnRfZmxhZ3MgJiBSVENGX0xPQ0FMOwogCkBAIC0xMTYyLDcgKzExODgsNyBAQAogI2VuZGlmCiAKIAkvKiBGcm9tIHdvcmxkIGJ1dCBETkFUIHRvIGxvb3BiYWNrIGFkZHJlc3M/ICovCi0JaWYgKGxvY2FsICYmIGlwdjRfaXNfbG9vcGJhY2socnQtPnJ0X2RzdCkgJiYKKwlpZiAobG9jYWwgJiYgaXB2NF9pc19sb29wYmFjayhjcC0+ZGFkZHIuaXApICYmCiAJICAgIHJ0X2lzX2lucHV0X3JvdXRlKHNrYl9ydGFibGUoc2tiKSkpIHsKIAkJSVBfVlNfREJHKDEsICIlcygpOiAiCiAJCQkgICJzdG9wcGluZyBETkFUIHRvIGxvb3BiYWNrICVwSTRcbiIsCkBAIC0xMjI3LDEyICsxMjUzLDEzIEBACiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKIGludAogaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKLQkJc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgaW50IG9mZnNldCkKKwkJc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IGhvb2tudW0pCiB7CiAJc3RydWN0IHJ0Nl9pbmZvCSpydDsJLyogUm91dGUgdG8gdGhlIG90aGVyIGhvc3QgKi8KIAlpbnQgbXR1OwogCWludCByYzsKIAlpbnQgbG9jYWw7CisJaW50IHJ0X21vZGU7CiAKIAlFbnRlckZ1bmN0aW9uKDEwKTsKIApAQCAtMTI1Myw4ICsxMjgwLDEyIEBACiAJICogbWFuZ2xlIGFuZCBzZW5kIHRoZSBwYWNrZXQgaGVyZSAob25seSBmb3IgVlMvTkFUKQogCSAqLwogCisJLyogTE9DQUxOT0RFIGZyb20gRk9SV0FSRCBob29rIGlzIG5vdCBzdXBwb3J0ZWQgKi8KKwlydF9tb2RlID0gKGhvb2tudW0gIT0gTkZfSU5FVF9GT1JXQVJEKSA/CisJCSAgSVBfVlNfUlRfTU9ERV9MT0NBTCB8IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMIHwKKwkJICBJUF9WU19SVF9NT0RFX1JEUiA6IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMOwogCWlmICghKHJ0ID0gX19pcF92c19nZXRfb3V0X3J0X3Y2KHNrYiwgY3AtPmRlc3QsICZjcC0+ZGFkZHIuaW42LCBOVUxMLAotCQkJCQkgMCwgMXwyfDQpKSkKKwkJCQkJIDAsIHJ0X21vZGUpKSkKIAkJZ290byB0eF9lcnJvcl9pY21wOwogCiAJbG9jYWwgPSBfX2lwX3ZzX2lzX2xvY2FsX3JvdXRlNihydCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jCmluZGV4IDIzN2NjMTkuLmNiNWEyODUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jCkBAIC0xNDE5LDYgKzE0MTksNyBAQAogCWNvbnN0IGNoYXIgKmRwdHIsICplbmQ7CiAJczE2IGRpZmYsIHRkaWZmID0gMDsKIAlpbnQgcmV0ID0gTkZfQUNDRVBUOworCWJvb2wgdGVybTsKIAl0eXBlb2YobmZfbmF0X3NpcF9zZXFfYWRqdXN0X2hvb2spIG5mX25hdF9zaXBfc2VxX2FkanVzdDsKIAogCWlmIChjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRUQgJiYKQEAgLTE0NTMsMTQgKzE0NTQsMjEgQEAKIAkJaWYgKGRwdHIgKyBtYXRjaG9mZiA9PSBlbmQpCiAJCQlicmVhazsKIAotCQlpZiAoZW5kICsgc3RybGVuKCJcclxuXHJcbiIpID4gZHB0ciArIGRhdGFsZW4pCi0JCQlicmVhazsKLQkJaWYgKGVuZFswXSAhPSAnXHInIHx8IGVuZFsxXSAhPSAnXG4nIHx8Ci0JCSAgICBlbmRbMl0gIT0gJ1xyJyB8fCBlbmRbM10gIT0gJ1xuJykKKwkJdGVybSA9IGZhbHNlOworCQlmb3IgKDsgZW5kICsgc3RybGVuKCJcclxuXHJcbiIpIDw9IGRwdHIgKyBkYXRhbGVuOyBlbmQrKykgeworCQkJaWYgKGVuZFswXSA9PSAnXHInICYmIGVuZFsxXSA9PSAnXG4nICYmCisJCQkgICAgZW5kWzJdID09ICdccicgJiYgZW5kWzNdID09ICdcbicpIHsKKwkJCQl0ZXJtID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoIXRlcm0pCiAJCQlicmVhazsKIAkJZW5kICs9IHN0cmxlbigiXHJcblxyXG4iKSArIGNsZW47CiAKIAkJbXNnbGVuID0gb3JpZ2xlbiA9IGVuZCAtIGRwdHI7CisJCWlmIChtc2dsZW4gPiBkYXRhbGVuKQorCQkJcmV0dXJuIE5GX0RST1A7CiAKIAkJcmV0ID0gcHJvY2Vzc19zaXBfbXNnKHNrYiwgY3QsIGRhdGFvZmYsICZkcHRyLCAmbXNnbGVuKTsKIAkJaWYgKHJldCAhPSBORl9BQ0NFUFQpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKaW5kZXggMGFlMTQyOC4uMDVlOWZlYiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwpAQCAtMjQ1LDcgKzI0NSw3IEBACiAJcmV0ID0gMDsKIHJlbGVhc2U6CiAJbmZfY3RfcHV0KGN0KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGN0X3NlcV9vcHMgPSB7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jCmluZGV4IDk4NWU5YjcuLmUwZWUwMTAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jCkBAIC0zODEsNyArMzgxLDYgQEAKIAlzdHJ1Y3QgbmZ1bG5sX21zZ19wYWNrZXRfaGRyIHBtc2c7CiAJc3RydWN0IG5sbXNnaGRyICpubGg7CiAJc3RydWN0IG5mZ2VubXNnICpuZm1zZzsKLQlfX2JlMzIgdG1wX3VpbnQ7CiAJc2tfYnVmZl9kYXRhX3Qgb2xkX3RhaWwgPSBpbnN0LT5za2ItPnRhaWw7CiAKIAlubGggPSBOTE1TR19QVVQoaW5zdC0+c2tiLCAwLCAwLApAQCAtNDI4LDcgKzQyNyw2IEBACiAJfQogCiAJaWYgKG91dGRldikgewotCQl0bXBfdWludCA9IGh0b25sKG91dGRldi0+aWZpbmRleCk7CiAjaWZuZGVmIENPTkZJR19CUklER0VfTkVURklMVEVSCiAJCU5MQV9QVVRfQkUzMihpbnN0LT5za2IsIE5GVUxBX0lGSU5ERVhfT1VUREVWLAogCQkJICAgICBodG9ubChvdXRkZXYtPmlmaW5kZXgpKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYyBiL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYwppbmRleCA4YTAyNWE1Li5iMDg2OWZlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMKKysrIGIvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jCkBAIC03NjIsOCArNzYyLDggQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHh0X2NvbXBhdF91bmxvY2spOwogI2VuZGlmCiAKLURFRklORV9QRVJfQ1BVKHN0cnVjdCB4dF9pbmZvX2xvY2ssIHh0X2luZm9fbG9ja3MpOwotRVhQT1JUX1BFUl9DUFVfU1lNQk9MX0dQTCh4dF9pbmZvX2xvY2tzKTsKK0RFRklORV9QRVJfQ1BVKHNlcWNvdW50X3QsIHh0X3JlY3NlcSk7CitFWFBPUlRfUEVSX0NQVV9TWU1CT0xfR1BMKHh0X3JlY3NlcSk7CiAKIHN0YXRpYyBpbnQgeHRfanVtcHN0YWNrX2FsbG9jKHN0cnVjdCB4dF90YWJsZV9pbmZvICppKQogewpAQCAtMTM2MiwxMCArMTM2Miw3IEBACiAJaW50IHJ2OwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKLQkJc3RydWN0IHh0X2luZm9fbG9jayAqbG9jayA9ICZwZXJfY3B1KHh0X2luZm9fbG9ja3MsIGkpOwotCi0JCXNlcWxvY2tfaW5pdCgmbG9jay0+bG9jayk7Ci0JCWxvY2stPnJlYWRlcnMgPSAwOworCQlzZXFjb3VudF9pbml0KCZwZXJfY3B1KHh0X3JlY3NlcSwgaSkpOwogCX0KIAogCXh0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHh0X2FmKSAqIE5GUFJPVE9fTlVNUFJPVE8sIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX2FkZHJsaXN0LmggYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfYWRkcmxpc3QuaAppbmRleCAxYzFjMDkzLi4yYjk2NDRlIDEwMDY0NAotLS0gYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfYWRkcmxpc3QuaAorKysgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfYWRkcmxpc3QuaApAQCAtOTYsMTIgKzk2LDEyIEBACiAKICNkZWZpbmUgbmV0bGJsX2FmNGxpc3RfZm9yZWFjaChpdGVyLCBoZWFkKQkJCQlcCiAJZm9yIChpdGVyID0gX19hZjRsaXN0X3ZhbGlkKChoZWFkKS0+bmV4dCwgaGVhZCk7CQlcCi0JICAgICBwcmVmZXRjaChpdGVyLT5saXN0Lm5leHQpLCAmaXRlci0+bGlzdCAhPSAoaGVhZCk7CQlcCisJICAgICAmaXRlci0+bGlzdCAhPSAoaGVhZCk7CQkJCQlcCiAJICAgICBpdGVyID0gX19hZjRsaXN0X3ZhbGlkKGl0ZXItPmxpc3QubmV4dCwgaGVhZCkpCiAKICNkZWZpbmUgbmV0bGJsX2FmNGxpc3RfZm9yZWFjaF9yY3UoaXRlciwgaGVhZCkJCQkJXAogCWZvciAoaXRlciA9IF9fYWY0bGlzdF92YWxpZF9yY3UoKGhlYWQpLT5uZXh0LCBoZWFkKTsJCVwKLQkgICAgIHByZWZldGNoKGl0ZXItPmxpc3QubmV4dCksCSZpdGVyLT5saXN0ICE9IChoZWFkKTsJCVwKKwkgICAgICZpdGVyLT5saXN0ICE9IChoZWFkKTsJCQkJCVwKIAkgICAgIGl0ZXIgPSBfX2FmNGxpc3RfdmFsaWRfcmN1KGl0ZXItPmxpc3QubmV4dCwgaGVhZCkpCiAKICNkZWZpbmUgbmV0bGJsX2FmNGxpc3RfZm9yZWFjaF9zYWZlKGl0ZXIsIHRtcCwgaGVhZCkJCQlcCkBAIC0xNjMsMTIgKzE2MywxMiBAQAogCiAjZGVmaW5lIG5ldGxibF9hZjZsaXN0X2ZvcmVhY2goaXRlciwgaGVhZCkJCQkJXAogCWZvciAoaXRlciA9IF9fYWY2bGlzdF92YWxpZCgoaGVhZCktPm5leHQsIGhlYWQpOwkJXAotCSAgICAgcHJlZmV0Y2goaXRlci0+bGlzdC5uZXh0KSwJJml0ZXItPmxpc3QgIT0gKGhlYWQpOwkJXAorCSAgICAgJml0ZXItPmxpc3QgIT0gKGhlYWQpOwkJCQkJXAogCSAgICAgaXRlciA9IF9fYWY2bGlzdF92YWxpZChpdGVyLT5saXN0Lm5leHQsIGhlYWQpKQogCiAjZGVmaW5lIG5ldGxibF9hZjZsaXN0X2ZvcmVhY2hfcmN1KGl0ZXIsIGhlYWQpCQkJCVwKIAlmb3IgKGl0ZXIgPSBfX2FmNmxpc3RfdmFsaWRfcmN1KChoZWFkKS0+bmV4dCwgaGVhZCk7CQlcCi0JICAgICBwcmVmZXRjaChpdGVyLT5saXN0Lm5leHQpLAkmaXRlci0+bGlzdCAhPSAoaGVhZCk7CQlcCisJICAgICAmaXRlci0+bGlzdCAhPSAoaGVhZCk7CQkJCQlcCiAJICAgICBpdGVyID0gX19hZjZsaXN0X3ZhbGlkX3JjdShpdGVyLT5saXN0Lm5leHQsIGhlYWQpKQogCiAjZGVmaW5lIG5ldGxibF9hZjZsaXN0X2ZvcmVhY2hfc2FmZShpdGVyLCB0bXAsIGhlYWQpCQkJXApkaWZmIC0tZ2l0IGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX2NpcHNvX3Y0LmMgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfY2lwc29fdjQuYwppbmRleCA1ZjE0Yzg0Li5iYWU1NzU2IDEwMDY0NAotLS0gYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfY2lwc29fdjQuYworKysgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfY2lwc29fdjQuYwpAQCAtNDIyLDcgKzQyMiw2IEBACiAKIHsKIAlpbnQgcmV0X3ZhbCA9IC1FSU5WQUw7Ci0JY29uc3QgY2hhciAqdHlwZV9zdHIgPSAiKHVua25vd24pIjsKIAlzdHJ1Y3QgbmV0bGJsX2F1ZGl0IGF1ZGl0X2luZm87CiAKIAlpZiAoIWluZm8tPmF0dHJzW05MQkxfQ0lQU09WNF9BX0RPSV0gfHwKQEAgLTQzMiwxNSArNDMxLDEyIEBACiAJbmV0bGJsX25ldGxpbmtfYXVkaXRpbmZvKHNrYiwgJmF1ZGl0X2luZm8pOwogCXN3aXRjaCAobmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkxCTF9DSVBTT1Y0X0FfTVRZUEVdKSkgewogCWNhc2UgQ0lQU09fVjRfTUFQX1RSQU5TOgotCQl0eXBlX3N0ciA9ICJ0cmFucyI7CiAJCXJldF92YWwgPSBuZXRsYmxfY2lwc292NF9hZGRfc3RkKGluZm8sICZhdWRpdF9pbmZvKTsKIAkJYnJlYWs7CiAJY2FzZSBDSVBTT19WNF9NQVBfUEFTUzoKLQkJdHlwZV9zdHIgPSAicGFzcyI7CiAJCXJldF92YWwgPSBuZXRsYmxfY2lwc292NF9hZGRfcGFzcyhpbmZvLCAmYXVkaXRfaW5mbyk7CiAJCWJyZWFrOwogCWNhc2UgQ0lQU09fVjRfTUFQX0xPQ0FMOgotCQl0eXBlX3N0ciA9ICJsb2NhbCI7CiAJCXJldF92YWwgPSBuZXRsYmxfY2lwc292NF9hZGRfbG9jYWwoaW5mbywgJmF1ZGl0X2luZm8pOwogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9uZXQvbmV0cm9tL2FmX25ldHJvbS5jIGIvbmV0L25ldHJvbS9hZl9uZXRyb20uYwppbmRleCAwNmNiMDI3Li43MzIxNTJmIDEwMDY0NAotLS0gYS9uZXQvbmV0cm9tL2FmX25ldHJvbS5jCisrKyBiL25ldC9uZXRyb20vYWZfbmV0cm9tLmMKQEAgLTU5MSw3ICs1OTEsNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKChkZXYgPSBucl9kZXZfZ2V0KCZhZGRyLT5mc2FfYXgyNS5zYXgyNV9jYWxsKSkgPT0gTlVMTCkgewotCQlTT0NLX0RFQlVHKHNrLCAiTkVUL1JPTTogYmluZCBmYWlsZWQ6IGludmFsaWQgbm9kZSBjYWxsc2lnblxuIik7CiAJCXJlbGVhc2Vfc29jayhzayk7CiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIAl9CkBAIC02MzIsNyArNjMxLDcgQEAKIAlzb2NrX3Jlc2V0X2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKTsKIAlkZXZfcHV0KGRldik7CiAJcmVsZWFzZV9zb2NrKHNrKTsKLQlTT0NLX0RFQlVHKHNrLCAiTkVUL1JPTTogc29ja2V0IGlzIGJvdW5kXG4iKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xMDgyLDggKzEwODEsNiBAQAogCQlzYXguc2F4MjVfY2FsbCAgID0gbnItPmRlc3RfYWRkcjsKIAl9CiAKLQlTT0NLX0RFQlVHKHNrLCAiTkVUL1JPTTogc2VuZHRvOiBBZGRyZXNzZXMgYnVpbHQuXG4iKTsKLQogCS8qIEJ1aWxkIGEgcGFja2V0IC0gdGhlIGNvbnZlbnRpb25hbCB1c2VyIGxpbWl0IGlzIDIzNiBieXRlcy4gV2UgY2FuCiAJICAgZG8gbHVkaWNyb3VzbHkgbGFyZ2UgTmV0Uk9NIGZyYW1lcyBidXQgbXVzdCBub3Qgb3ZlcmZsb3cgKi8KIAlpZiAobGVuID4gNjU1MzYpIHsKQEAgLTEwOTEsNyArMTA4OCw2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCVNPQ0tfREVCVUcoc2ssICJORVQvUk9NOiBzZW5kdG86IGJ1aWxkaW5nIHBhY2tldC5cbiIpOwogCXNpemUgPSBsZW4gKyBOUl9ORVRXT1JLX0xFTiArIE5SX1RSQU5TUE9SVF9MRU47CiAKIAlpZiAoKHNrYiA9IHNvY2tfYWxsb2Nfc2VuZF9za2Ioc2ssIHNpemUsIG1zZy0+bXNnX2ZsYWdzICYgTVNHX0RPTlRXQUlULCAmZXJyKSkgPT0gTlVMTCkKQEAgLTExMDUsNyArMTEwMSw2IEBACiAJICovCiAKIAlhc21wdHIgPSBza2JfcHVzaChza2IsIE5SX1RSQU5TUE9SVF9MRU4pOwotCVNPQ0tfREVCVUcoc2ssICJCdWlsZGluZyBORVQvUk9NIEhlYWRlci5cbiIpOwogCiAJLyogQnVpbGQgYSBORVQvUk9NIFRyYW5zcG9ydCBoZWFkZXIgKi8KIApAQCAtMTExNCwxNSArMTEwOSwxMiBAQAogCSphc21wdHIrKyA9IDA7CQkvKiBUbyBiZSBmaWxsZWQgaW4gbGF0ZXIgKi8KIAkqYXNtcHRyKysgPSAwOwkJLyogICAgICBEaXR0byAgICAgICAgICAgICovCiAJKmFzbXB0cisrID0gTlJfSU5GTzsKLQlTT0NLX0RFQlVHKHNrLCAiQnVpbHQgaGVhZGVyLlxuIik7CiAKIAkvKgogCSAqCVB1dCB0aGUgZGF0YSBvbiB0aGUgZW5kCiAJICovCiAJc2tiX3B1dChza2IsIGxlbik7CiAKLQlTT0NLX0RFQlVHKHNrLCAiTkVUL1JPTTogQXBwZW5kaW5nIHVzZXIgZGF0YVxuIik7Ci0KIAkvKiBVc2VyIGRhdGEgZm9sbG93cyBpbW1lZGlhdGVseSBhZnRlciB0aGUgTkVUL1JPTSB0cmFuc3BvcnQgaGVhZGVyICovCiAJaWYgKG1lbWNweV9mcm9taW92ZWMoc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSwgbXNnLT5tc2dfaW92LCBsZW4pKSB7CiAJCWtmcmVlX3NrYihza2IpOwpAQCAtMTEzMCw4ICsxMTIyLDYgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JU09DS19ERUJVRyhzaywgIk5FVC9ST006IFRyYW5zbWl0dGluZyBidWZmZXJcbiIpOwotCiAJaWYgKHNrLT5za19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQpIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWVyciA9IC1FTk9UQ09OTjsKZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCmluZGV4IGI1MzYyZTkuLjU0OTUyN2IgMTAwNjQ0Ci0tLSBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKKysrIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwpAQCAtNTM4LDcgKzUzOCw3IEBACiAJcmN1X3JlYWRfbG9jaygpOwogCWZpbHRlciA9IHJjdV9kZXJlZmVyZW5jZShzay0+c2tfZmlsdGVyKTsKIAlpZiAoZmlsdGVyICE9IE5VTEwpCi0JCXJlcyA9IHNrX3J1bl9maWx0ZXIoc2tiLCBmaWx0ZXItPmluc25zKTsKKwkJcmVzID0gU0tfUlVOX0ZJTFRFUihmaWx0ZXIsIHNrYik7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm4gcmVzOwpkaWZmIC0tZ2l0IGEvbmV0L3Bob25ldC9wbl9kZXYuYyBiL25ldC9waG9uZXQvcG5fZGV2LmMKaW5kZXggMTU2NjY3Mi4uZDJkZjhmMyAxMDA2NDQKLS0tIGEvbmV0L3Bob25ldC9wbl9kZXYuYworKysgYi9uZXQvcGhvbmV0L3BuX2Rldi5jCkBAIC00MTgsMTggKzQxOCwxNCBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgbmV0X2RldmljZSAqcGhvbmV0X3JvdXRlX2dldChzdHJ1Y3QgbmV0ICpuZXQsIHU4IGRhZGRyKQorc3RydWN0IG5ldF9kZXZpY2UgKnBob25ldF9yb3V0ZV9nZXRfcmN1KHN0cnVjdCBuZXQgKm5ldCwgdTggZGFkZHIpCiB7CiAJc3RydWN0IHBob25ldF9uZXQgKnBubiA9IHBob25ldF9wZXJuZXQobmV0KTsKIAlzdHJ1Y3QgcGhvbmV0X3JvdXRlcyAqcm91dGVzID0gJnBubi0+cm91dGVzOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKLQlBU1NFUlRfUlROTCgpOyAvKiBubyBuZWVkIHRvIGhvbGQgdGhlIGRldmljZSAqLwotCiAJZGFkZHIgPj49IDI7Ci0JcmN1X3JlYWRfbG9jaygpOwogCWRldiA9IHJjdV9kZXJlZmVyZW5jZShyb3V0ZXMtPnRhYmxlW2RhZGRyXSk7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIGRldjsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3Bob25ldC9wbl9uZXRsaW5rLmMgYi9uZXQvcGhvbmV0L3BuX25ldGxpbmsuYwppbmRleCA1OGIzYjFmLi40MzhhY2NiIDEwMDY0NAotLS0gYS9uZXQvcGhvbmV0L3BuX25ldGxpbmsuYworKysgYi9uZXQvcGhvbmV0L3BuX25ldGxpbmsuYwpAQCAtMjY0LDEwICsyNjQsMTEgQEAKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAl1OCBhZGRyLCBhZGRyX2lkeCA9IDAsIGFkZHJfc3RhcnRfaWR4ID0gY2ItPmFyZ3NbMF07CiAKKwlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yIChhZGRyID0gMDsgYWRkciA8IDY0OyBhZGRyKyspIHsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAotCQlkZXYgPSBwaG9uZXRfcm91dGVfZ2V0KG5ldCwgYWRkciA8PCAyKTsKKwkJZGV2ID0gcGhvbmV0X3JvdXRlX2dldF9yY3UobmV0LCBhZGRyIDw8IDIpOwogCQlpZiAoIWRldikKIAkJCWNvbnRpbnVlOwogCkBAIC0yNzksNiArMjgwLDcgQEAKIAl9CiAKIG91dDoKKwlyY3VfcmVhZF91bmxvY2soKTsKIAljYi0+YXJnc1swXSA9IGFkZHJfaWR4OwogCWNiLT5hcmdzWzFdID0gMDsKIApkaWZmIC0tZ2l0IGEvbmV0L3Bob25ldC9zb2NrZXQuYyBiL25ldC9waG9uZXQvc29ja2V0LmMKaW5kZXggYjFhZGFmYS4uOGM1YmZjZSAxMDA2NDQKLS0tIGEvbmV0L3Bob25ldC9zb2NrZXQuYworKysgYi9uZXQvcGhvbmV0L3NvY2tldC5jCkBAIC01Miw3ICs1Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgIHsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCBobGlzdFtQTl9IQVNIU0laRV07Ci0Jc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBtdXRleCBsb2NrOwogfSBwbnNvY2tzOwogCiB2b2lkIF9faW5pdCBwbl9zb2NrX2luaXQodm9pZCkKQEAgLTYxLDcgKzYxLDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBQTl9IQVNIU0laRTsgaSsrKQogCQlJTklUX0hMSVNUX0hFQUQocG5zb2Nrcy5obGlzdCArIGkpOwotCXNwaW5fbG9ja19pbml0KCZwbnNvY2tzLmxvY2spOworCW11dGV4X2luaXQoJnBuc29ja3MubG9jayk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCAqcG5faGFzaF9saXN0KHUxNiBvYmopCkBAIC04Miw5ICs4Miw4IEBACiAJdTggcmVzID0gc3BuLT5zcG5fcmVzb3VyY2U7CiAJc3RydWN0IGhsaXN0X2hlYWQgKmhsaXN0ID0gcG5faGFzaF9saXN0KG9iaik7CiAKLQlzcGluX2xvY2tfYmgoJnBuc29ja3MubG9jayk7Ci0KLQlza19mb3JfZWFjaChza25vZGUsIG5vZGUsIGhsaXN0KSB7CisJcmN1X3JlYWRfbG9jaygpOworCXNrX2Zvcl9lYWNoX3JjdShza25vZGUsIG5vZGUsIGhsaXN0KSB7CiAJCXN0cnVjdCBwbl9zb2NrICpwbiA9IHBuX3NrKHNrbm9kZSk7CiAJCUJVR19PTighcG4tPnNvYmplY3QpOyAvKiB1bmJvdW5kIHNvY2tldCAqLwogCkBAIC0xMDcsOCArMTA2LDcgQEAKIAkJc29ja19ob2xkKHNrbm9kZSk7CiAJCWJyZWFrOwogCX0KLQotCXNwaW5fdW5sb2NrX2JoKCZwbnNvY2tzLmxvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIHJ2YWw7CiB9CkBAIC0xMTksNyArMTE3LDcgQEAKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGxpc3QgPSBwbnNvY2tzLmhsaXN0OwogCXVuc2lnbmVkIGg7CiAKLQlzcGluX2xvY2soJnBuc29ja3MubG9jayk7CisJcmN1X3JlYWRfbG9jaygpOwogCWZvciAoaCA9IDA7IGggPCBQTl9IQVNIU0laRTsgaCsrKSB7CiAJCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwogCQlzdHJ1Y3Qgc29jayAqc2tub2RlOwpAQCAtMTQwLDI1ICsxMzgsMjYgQEAKIAkJfQogCQlobGlzdCsrOwogCX0KLQlzcGluX3VubG9jaygmcG5zb2Nrcy5sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAogdm9pZCBwbl9zb2NrX2hhc2goc3RydWN0IHNvY2sgKnNrKQogewogCXN0cnVjdCBobGlzdF9oZWFkICpobGlzdCA9IHBuX2hhc2hfbGlzdChwbl9zayhzayktPnNvYmplY3QpOwogCi0Jc3Bpbl9sb2NrX2JoKCZwbnNvY2tzLmxvY2spOwotCXNrX2FkZF9ub2RlKHNrLCBobGlzdCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJnBuc29ja3MubG9jayk7CisJbXV0ZXhfbG9jaygmcG5zb2Nrcy5sb2NrKTsKKwlza19hZGRfbm9kZV9yY3Uoc2ssIGhsaXN0KTsKKwltdXRleF91bmxvY2soJnBuc29ja3MubG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MKHBuX3NvY2tfaGFzaCk7CiAKIHZvaWQgcG5fc29ja191bmhhc2goc3RydWN0IHNvY2sgKnNrKQogewotCXNwaW5fbG9ja19iaCgmcG5zb2Nrcy5sb2NrKTsKLQlza19kZWxfbm9kZV9pbml0KHNrKTsKLQlzcGluX3VubG9ja19iaCgmcG5zb2Nrcy5sb2NrKTsKKwltdXRleF9sb2NrKCZwbnNvY2tzLmxvY2spOworCXNrX2RlbF9ub2RlX2luaXRfcmN1KHNrKTsKKwltdXRleF91bmxvY2soJnBuc29ja3MubG9jayk7CiAJcG5fc29ja191bmJpbmRfYWxsX3Jlcyhzayk7CisJc3luY2hyb25pemVfcmN1KCk7CiB9CiBFWFBPUlRfU1lNQk9MKHBuX3NvY2tfdW5oYXNoKTsKIApAQCAtNTQ4LDcgKzU0Nyw3IEBACiAJdW5zaWduZWQgaDsKIAogCWZvciAoaCA9IDA7IGggPCBQTl9IQVNIU0laRTsgaCsrKSB7Ci0JCXNrX2Zvcl9lYWNoKHNrbm9kZSwgbm9kZSwgaGxpc3QpIHsKKwkJc2tfZm9yX2VhY2hfcmN1KHNrbm9kZSwgbm9kZSwgaGxpc3QpIHsKIAkJCWlmICghbmV0X2VxKG5ldCwgc29ja19uZXQoc2tub2RlKSkpCiAJCQkJY29udGludWU7CiAJCQlpZiAoIXBvcykKQEAgLTU3Miw5ICs1NzEsOSBAQAogfQogCiBzdGF0aWMgdm9pZCAqcG5fc29ja19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQotCV9fYWNxdWlyZXMocG5zb2Nrcy5sb2NrKQorCV9fYWNxdWlyZXMocmN1KQogewotCXNwaW5fbG9ja19iaCgmcG5zb2Nrcy5sb2NrKTsKKwlyY3VfcmVhZF9sb2NrKCk7CiAJcmV0dXJuICpwb3MgPyBwbl9zb2NrX2dldF9pZHgoc2VxLCAqcG9zIC0gMSkgOiBTRVFfU1RBUlRfVE9LRU47CiB9CiAKQEAgLTU5MSw5ICs1OTAsOSBAQAogfQogCiBzdGF0aWMgdm9pZCBwbl9zb2NrX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotCV9fcmVsZWFzZXMocG5zb2Nrcy5sb2NrKQorCV9fcmVsZWFzZXMocmN1KQogewotCXNwaW5fdW5sb2NrX2JoKCZwbnNvY2tzLmxvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogfQogCiBzdGF0aWMgaW50IHBuX3NvY2tfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCkBAIC03MjEsMTMgKzcyMCwxMSBAQAogCX0KIAltdXRleF91bmxvY2soJnJlc291cmNlX211dGV4KTsKIAotCWlmIChtYXRjaCA9PSAwKQotCQlyZXR1cm47Ci0Jc3luY2hyb25pemVfcmN1KCk7CiAJd2hpbGUgKG1hdGNoID4gMCkgewotCQlzb2NrX3B1dChzayk7CisJCV9fc29ja19wdXQoc2spOwogCQltYXRjaC0tOwogCX0KKwkvKiBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIFJDVSBzeW5jIGJlZm9yZSBmaW5hbCBzb2NrX3B1dCgpICovCiB9CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwpkaWZmIC0tZ2l0IGEvbmV0L3Jma2lsbC9LY29uZmlnIGIvbmV0L3Jma2lsbC9LY29uZmlnCmluZGV4IDdmY2U2ZGYuLjQ4NDY0Y2EgMTAwNjQ0Ci0tLSBhL25ldC9yZmtpbGwvS2NvbmZpZworKysgYi9uZXQvcmZraWxsL0tjb25maWcKQEAgLTIyLDMgKzIyLDE0IEBACiAJZGVwZW5kcyBvbiBSRktJTEwKIAlkZXBlbmRzIG9uIElOUFVUID0geSB8fCBSRktJTEwgPSBJTlBVVAogCWRlZmF1bHQgeSBpZiAhRVhQRVJUCisKK2NvbmZpZyBSRktJTExfUkVHVUxBVE9SCisJdHJpc3RhdGUgIkdlbmVyaWMgcmZraWxsIHJlZ3VsYXRvciBkcml2ZXIiCisJZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTAorCWRlcGVuZHMgb24gUkVHVUxBVE9SCisJaGVscAorICAgICAgICAgIFRoaXMgb3B0aW9ucyBlbmFibGUgY29udHJvbGxpbmcgcmFkaW8gdHJhbnNtaXR0ZXJzIGNvbm5lY3RlZCB0bworICAgICAgICAgIHZvbHRhZ2UgcmVndWxhdG9yIHVzaW5nIHRoZSByZWd1bGF0b3IgZnJhbWV3b3JrLgorCisgICAgICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsCisgICAgICAgICAgYmUgY2FsbGVkIHJma2lsbC1yZWd1bGF0b3IuCmRpZmYgLS1naXQgYS9uZXQvcmZraWxsL01ha2VmaWxlIGIvbmV0L3Jma2lsbC9NYWtlZmlsZQppbmRleCA2NjIxMDUzLi5kOWE1YTU4IDEwMDY0NAotLS0gYS9uZXQvcmZraWxsL01ha2VmaWxlCisrKyBiL25ldC9yZmtpbGwvTWFrZWZpbGUKQEAgLTUsMyArNSw0IEBACiByZmtpbGwteQkJCSs9IGNvcmUubwogcmZraWxsLSQoQ09ORklHX1JGS0lMTF9JTlBVVCkJKz0gaW5wdXQubwogb2JqLSQoQ09ORklHX1JGS0lMTCkJCSs9IHJma2lsbC5vCitvYmotJChDT05GSUdfUkZLSUxMX1JFR1VMQVRPUikJKz0gcmZraWxsLXJlZ3VsYXRvci5vCmRpZmYgLS1naXQgYS9uZXQvcmZraWxsL2NvcmUuYyBiL25ldC9yZmtpbGwvY29yZS5jCmluZGV4IDAxOTgxOTEuLmJlOTA2NDAgMTAwNjQ0Ci0tLSBhL25ldC9yZmtpbGwvY29yZS5jCisrKyBiL25ldC9yZmtpbGwvY29yZS5jCkBAIC0xMDI0LDcgKzEwMjQsNiBAQAogCSAqIHN0YXJ0IGdldHRpbmcgZXZlbnRzIGZyb20gZWxzZXdoZXJlIGJ1dCBob2xkIG10eCB0byBnZXQKIAkgKiBzdGFydHVwIGV2ZW50cyBhZGRlZCBmaXJzdAogCSAqLwotCWxpc3RfYWRkKCZkYXRhLT5saXN0LCAmcmZraWxsX2Zkcyk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJma2lsbCwgJnJma2lsbF9saXN0LCBub2RlKSB7CiAJCWV2ID0ga3phbGxvYyhzaXplb2YoKmV2KSwgR0ZQX0tFUk5FTCk7CkBAIC0xMDMzLDYgKzEwMzIsNyBAQAogCQlyZmtpbGxfZmlsbF9ldmVudCgmZXYtPmV2LCByZmtpbGwsIFJGS0lMTF9PUF9BREQpOwogCQlsaXN0X2FkZF90YWlsKCZldi0+bGlzdCwgJmRhdGEtPmV2ZW50cyk7CiAJfQorCWxpc3RfYWRkKCZkYXRhLT5saXN0LCAmcmZraWxsX2Zkcyk7CiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT5tdHgpOwogCW11dGV4X3VubG9jaygmcmZraWxsX2dsb2JhbF9tdXRleCk7CiAKZGlmZiAtLWdpdCBhL25ldC9yZmtpbGwvcmZraWxsLXJlZ3VsYXRvci5jIGIvbmV0L3Jma2lsbC9yZmtpbGwtcmVndWxhdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThkYzUxMgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZmtpbGwvcmZraWxsLXJlZ3VsYXRvci5jCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogcmZraWxsLXJlZ3VsYXRvci5jIC0gUmVndWxhdG9yIGNvbnN1bWVyIGRyaXZlciBmb3IgcmZraWxsCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5ICBHdWltaW5nIFpodW8gPGdtemh1b0BnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgIEFudG9uaW8gT3NwaXRlIDxvc3BpdGVAc3R1ZGVudGkudW5pbmEuaXQ+CisgKgorICogSW1wbGVtZW50YXRpb24gaW5zcGlyZWQgYnkgbGVkcy1yZWd1bGF0b3IgZHJpdmVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvcmZraWxsLmg+CisjaW5jbHVkZSA8bGludXgvcmZraWxsLXJlZ3VsYXRvci5oPgorCitzdHJ1Y3QgcmZraWxsX3JlZ3VsYXRvcl9kYXRhIHsKKwlzdHJ1Y3QgcmZraWxsICpyZl9raWxsOworCWJvb2wgcmVnX2VuYWJsZWQ7CisKKwlzdHJ1Y3QgcmVndWxhdG9yICp2Y2M7Cit9OworCitzdGF0aWMgaW50IHJma2lsbF9yZWd1bGF0b3Jfc2V0X2Jsb2NrKHZvaWQgKmRhdGEsIGJvb2wgYmxvY2tlZCkKK3sKKwlzdHJ1Y3QgcmZraWxsX3JlZ3VsYXRvcl9kYXRhICpyZmtpbGxfZGF0YSA9IGRhdGE7CisKKwlwcl9kZWJ1ZygiJXM6IGJsb2NrZWQ6ICVkXG4iLCBfX2Z1bmNfXywgYmxvY2tlZCk7CisKKwlpZiAoYmxvY2tlZCkgeworCQlpZiAocmZraWxsX2RhdGEtPnJlZ19lbmFibGVkKSB7CisJCQlyZWd1bGF0b3JfZGlzYWJsZShyZmtpbGxfZGF0YS0+dmNjKTsKKwkJCXJma2lsbF9kYXRhLT5yZWdfZW5hYmxlZCA9IDA7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoIXJma2lsbF9kYXRhLT5yZWdfZW5hYmxlZCkgeworCQkJcmVndWxhdG9yX2VuYWJsZShyZmtpbGxfZGF0YS0+dmNjKTsKKwkJCXJma2lsbF9kYXRhLT5yZWdfZW5hYmxlZCA9IDE7CisJCX0KKwl9CisKKwlwcl9kZWJ1ZygiJXM6IHJlZ3VsYXRvcl9pc19lbmFibGVkIGFmdGVyIHNldF9ibG9jazogJWRcbiIsIF9fZnVuY19fLAorCQlyZWd1bGF0b3JfaXNfZW5hYmxlZChyZmtpbGxfZGF0YS0+dmNjKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHJma2lsbF9vcHMgcmZraWxsX3JlZ3VsYXRvcl9vcHMgPSB7CisJLnNldF9ibG9jayA9IHJma2lsbF9yZWd1bGF0b3Jfc2V0X2Jsb2NrLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgcmZraWxsX3JlZ3VsYXRvcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZmtpbGxfcmVndWxhdG9yX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHJma2lsbF9yZWd1bGF0b3JfZGF0YSAqcmZraWxsX2RhdGE7CisJc3RydWN0IHJlZ3VsYXRvciAqdmNjOworCXN0cnVjdCByZmtpbGwgKnJmX2tpbGw7CisJaW50IHJldCA9IDA7CisKKwlpZiAocGRhdGEgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKHBkYXRhLT5uYW1lID09IE5VTEwgfHwgcGRhdGEtPnR5cGUgPT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlkIG5hbWUgb3IgdHlwZSBpbiBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdmNjID0gcmVndWxhdG9yX2dldF9leGNsdXNpdmUoJnBkZXYtPmRldiwgInZyZmtpbGwiKTsKKwlpZiAoSVNfRVJSKHZjYykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IGdldCB2Y2MgZm9yICVzXG4iLCBwZGF0YS0+bmFtZSk7CisJCXJldCA9IFBUUl9FUlIodmNjKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmZraWxsX2RhdGEgPSBremFsbG9jKHNpemVvZigqcmZraWxsX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAocmZraWxsX2RhdGEgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9kYXRhX2FsbG9jOworCX0KKworCXJmX2tpbGwgPSByZmtpbGxfYWxsb2MocGRhdGEtPm5hbWUsICZwZGV2LT5kZXYsCisJCQkJcGRhdGEtPnR5cGUsCisJCQkJJnJma2lsbF9yZWd1bGF0b3Jfb3BzLCByZmtpbGxfZGF0YSk7CisJaWYgKHJmX2tpbGwgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgYWxsb2MgcmZraWxsIGRldmljZVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3Jma2lsbF9hbGxvYzsKKwl9CisKKwlpZiAocmVndWxhdG9yX2lzX2VuYWJsZWQodmNjKSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJSZWd1bGF0b3IgYWxyZWFkeSBlbmFibGVkXG4iKTsKKwkJcmZraWxsX2RhdGEtPnJlZ19lbmFibGVkID0gMTsKKwl9CisJcmZraWxsX2RhdGEtPnZjYyA9IHZjYzsKKwlyZmtpbGxfZGF0YS0+cmZfa2lsbCA9IHJmX2tpbGw7CisKKwlyZXQgPSByZmtpbGxfcmVnaXN0ZXIocmZfa2lsbCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgcmVnaXN0ZXIgcmZraWxsIGRldmljZVxuIik7CisJCWdvdG8gZXJyX3Jma2lsbF9yZWdpc3RlcjsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCByZmtpbGxfZGF0YSk7CisJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzIGluaXRpYWxpemVkXG4iLCBwZGF0YS0+bmFtZSk7CisKKwlyZXR1cm4gMDsKKworZXJyX3Jma2lsbF9yZWdpc3RlcjoKKwlyZmtpbGxfZGVzdHJveShyZl9raWxsKTsKK2Vycl9yZmtpbGxfYWxsb2M6CisJa2ZyZWUocmZraWxsX2RhdGEpOworZXJyX2RhdGFfYWxsb2M6CisJcmVndWxhdG9yX3B1dCh2Y2MpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHJma2lsbF9yZWd1bGF0b3JfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJma2lsbF9yZWd1bGF0b3JfZGF0YSAqcmZraWxsX2RhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcmZraWxsICpyZl9raWxsID0gcmZraWxsX2RhdGEtPnJmX2tpbGw7CisKKwlyZmtpbGxfdW5yZWdpc3RlcihyZl9raWxsKTsKKwlyZmtpbGxfZGVzdHJveShyZl9raWxsKTsKKwlyZWd1bGF0b3JfcHV0KHJma2lsbF9kYXRhLT52Y2MpOworCWtmcmVlKHJma2lsbF9kYXRhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciByZmtpbGxfcmVndWxhdG9yX2RyaXZlciA9IHsKKwkucHJvYmUgPSByZmtpbGxfcmVndWxhdG9yX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChyZmtpbGxfcmVndWxhdG9yX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAicmZraWxsLXJlZ3VsYXRvciIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCByZmtpbGxfcmVndWxhdG9yX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZyZmtpbGxfcmVndWxhdG9yX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChyZmtpbGxfcmVndWxhdG9yX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgcmZraWxsX3JlZ3VsYXRvcl9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnJma2lsbF9yZWd1bGF0b3JfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHJma2lsbF9yZWd1bGF0b3JfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkd1aW1pbmcgWmh1byA8Z216aHVvQGdtYWlsLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIkFudG9uaW8gT3NwaXRlIDxvc3BpdGVAc3R1ZGVudGkudW5pbmEuaXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlJlZ3VsYXRvciBjb25zdW1lciBkcml2ZXIgZm9yIHJma2lsbCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpyZmtpbGwtcmVndWxhdG9yIik7CmRpZmYgLS1naXQgYS9uZXQvcm9zZS9hZl9yb3NlLmMgYi9uZXQvcm9zZS9hZl9yb3NlLmMKaW5kZXggYTgwYWVmNi4uZjllYTkyNSAxMDA2NDQKLS0tIGEvbmV0L3Jvc2UvYWZfcm9zZS5jCisrKyBiL25ldC9yb3NlL2FmX3Jvc2UuYwpAQCAtNjgyLDEwICs2ODIsOCBAQAogCWlmICgodW5zaWduZWQgaW50KSBhZGRyLT5zcm9zZV9uZGlnaXMgPiBST1NFX01BWF9ESUdJUykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoKGRldiA9IHJvc2VfZGV2X2dldCgmYWRkci0+c3Jvc2VfYWRkcikpID09IE5VTEwpIHsKLQkJU09DS19ERUJVRyhzaywgIlJPU0U6IGJpbmQgZmFpbGVkOiBpbnZhbGlkIGFkZHJlc3NcbiIpOworCWlmICgoZGV2ID0gcm9zZV9kZXZfZ2V0KCZhZGRyLT5zcm9zZV9hZGRyKSkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwotCX0KIAogCXNvdXJjZSA9ICZhZGRyLT5zcm9zZV9jYWxsOwogCkBAIC03MTYsNyArNzE0LDcgQEAKIAlyb3NlX2luc2VydF9zb2NrZXQoc2spOwogCiAJc29ja19yZXNldF9mbGFnKHNrLCBTT0NLX1pBUFBFRCk7Ci0JU09DS19ERUJVRyhzaywgIlJPU0U6IHNvY2tldCBpcyBib3VuZFxuIik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTEwOSwxMCArMTEwNyw3IEBACiAJCQlzcm9zZS5zcm9zZV9kaWdpc1tuXSA9IHJvc2UtPmRlc3RfZGlnaXNbbl07CiAJfQogCi0JU09DS19ERUJVRyhzaywgIlJPU0U6IHNlbmR0bzogQWRkcmVzc2VzIGJ1aWx0LlxuIik7Ci0KIAkvKiBCdWlsZCBhIHBhY2tldCAqLwotCVNPQ0tfREVCVUcoc2ssICJST1NFOiBzZW5kdG86IGJ1aWxkaW5nIHBhY2tldC5cbiIpOwogCS8qIFNhbml0eSBjaGVjayB0aGUgcGFja2V0IHNpemUgKi8KIAlpZiAobGVuID4gNjU1MzUpCiAJCXJldHVybiAtRU1TR1NJWkU7CkBAIC0xMTI3LDcgKzExMjIsNiBAQAogCS8qCiAJICoJUHV0IHRoZSBkYXRhIG9uIHRoZSBlbmQKIAkgKi8KLQlTT0NLX0RFQlVHKHNrLCAiUk9TRTogQXBwZW5kaW5nIHVzZXIgZGF0YVxuIik7CiAKIAlza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOwogCXNrYl9wdXQoc2tiLCBsZW4pOwpAQCAtMTE1Miw4ICsxMTQ2LDYgQEAKIAkgKi8KIAlhc21wdHIgPSBza2JfcHVzaChza2IsIFJPU0VfTUlOX0xFTik7CiAKLQlTT0NLX0RFQlVHKHNrLCAiUk9TRTogQnVpbGRpbmcgTmV0d29yayBIZWFkZXIuXG4iKTsKLQogCS8qIEJ1aWxkIGEgUk9TRSBOZXR3b3JrIGhlYWRlciAqLwogCWFzbXB0clswXSA9ICgocm9zZS0+bGNpID4+IDgpICYgMHgwRikgfCBST1NFX0dGSTsKIAlhc21wdHJbMV0gPSAocm9zZS0+bGNpID4+IDApICYgMHhGRjsKQEAgLTExNjIsMTAgKzExNTQsNiBAQAogCWlmIChxYml0KQogCQlhc21wdHJbMF0gfD0gUk9TRV9RX0JJVDsKIAotCVNPQ0tfREVCVUcoc2ssICJST1NFOiBCdWlsdCBoZWFkZXIuXG4iKTsKLQotCVNPQ0tfREVCVUcoc2ssICJST1NFOiBUcmFuc21pdHRpbmcgYnVmZmVyXG4iKTsKLQogCWlmIChzay0+c2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gLUVOT1RDT05OOwpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2FyLWFjay5jIGIvbmV0L3J4cnBjL2FyLWFjay5jCmluZGV4IGI2ZmZlNGUuLmY5OWNmY2UgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9hci1hY2suYworKysgYi9uZXQvcnhycGMvYXItYWNrLmMKQEAgLTM3NSw3ICszNzUsNiBAQAogICovCiBzdGF0aWMgdm9pZCByeHJwY19yb3RhdGVfdHhfd2luZG93KHN0cnVjdCByeHJwY19jYWxsICpjYWxsLCB1MzIgaGFyZCkKIHsKLQlzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwOwogCXVuc2lnbmVkIGxvbmcgX3NrYjsKIAlpbnQgdGFpbCA9IGNhbGwtPmFja3NfdGFpbCwgb2xkX3RhaWw7CiAJaW50IHdpbiA9IENJUkNfQ05UKGNhbGwtPmFja3NfaGVhZCwgdGFpbCwgY2FsbC0+YWNrc193aW5zeik7CkBAIC0zODcsNyArMzg2LDYgQEAKIAl3aGlsZSAoY2FsbC0+YWNrc19oYXJkIDwgaGFyZCkgewogCQlzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKTsKIAkJX3NrYiA9IGNhbGwtPmFja3Nfd2luZG93W3RhaWxdICYgfjE7Ci0JCXNwID0gcnhycGNfc2tiKChzdHJ1Y3Qgc2tfYnVmZiAqKSBfc2tiKTsKIAkJcnhycGNfZnJlZV9za2IoKHN0cnVjdCBza19idWZmICopIF9za2IpOwogCQlvbGRfdGFpbCA9IHRhaWw7CiAJCXRhaWwgPSAodGFpbCArIDEpICYgKGNhbGwtPmFja3Nfd2luc3ogLSAxKTsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hci1jb25uZXZlbnQuYyBiL25ldC9yeHJwYy9hci1jb25uZXZlbnQuYwppbmRleCAwNTA1Y2RjLi5lN2VkNDNhIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvYXItY29ubmV2ZW50LmMKKysrIGIvbmV0L3J4cnBjL2FyLWNvbm5ldmVudC5jCkBAIC0yNTksNyArMjU5LDYgQEAKIHsKIAlzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiwgcHJvY2Vzc29yKTsKLQlzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJdTMyIGFib3J0X2NvZGUgPSBSWF9QUk9UT0NPTF9FUlJPUjsKIAlpbnQgcmV0OwpAQCAtMjc2LDggKzI3NSw2IEBACiAJLyogZ28gdGhyb3VnaCB0aGUgY29ubi1sZXZlbCBldmVudCBwYWNrZXRzLCByZWxlYXNpbmcgdGhlIHJlZiBvbiB0aGlzCiAJICogY29ubmVjdGlvbiB0aGF0IGVhY2ggb25lIGhhcyB3aGVuIHdlJ3ZlIGZpbmlzaGVkIHdpdGggaXQgKi8KIAl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZjb25uLT5yeF9xdWV1ZSkpKSB7Ci0JCXNwID0gcnhycGNfc2tiKHNrYik7Ci0KIAkJcmV0ID0gcnhycGNfcHJvY2Vzc19ldmVudChjb25uLCBza2IsICZhYm9ydF9jb2RlKTsKIAkJc3dpdGNoIChyZXQpIHsKIAkJY2FzZSAtRVBST1RPOgpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2FyLWVycm9yLmMgYi9uZXQvcnhycGMvYXItZXJyb3IuYwppbmRleCBkNGQxYWUyLi41ZDZiNTcyIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvYXItZXJyb3IuYworKysgYi9uZXQvcnhycGMvYXItZXJyb3IuYwpAQCAtMTM5LDcgKzEzOSw3IEBACiAJc3RydWN0IHJ4cnBjX3RyYW5zcG9ydCAqdHJhbnMgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ4cnBjX3RyYW5zcG9ydCwgZXJyb3JfaGFuZGxlcik7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgbG9jYWwsIGVycjsKKwlpbnQgZXJyOwogCiAJX2VudGVyKCIiKTsKIApAQCAtMTU3LDcgKzE1Nyw2IEBACiAKIAlzd2l0Y2ggKGVlLT5lZV9vcmlnaW4pIHsKIAljYXNlIFNPX0VFX09SSUdJTl9JQ01QOgotCQlsb2NhbCA9IDA7CiAJCXN3aXRjaCAoZWUtPmVlX3R5cGUpIHsKIAkJY2FzZSBJQ01QX0RFU1RfVU5SRUFDSDoKIAkJCXN3aXRjaCAoZWUtPmVlX2NvZGUpIHsKQEAgLTIwNyw3ICsyMDYsNiBAQAogCWNhc2UgU09fRUVfT1JJR0lOX0xPQ0FMOgogCQlfcHJvdG8oIlJ4IFJlY2VpdmVkIGxvY2FsIGVycm9yIHsgZXJyb3I9JWQgfSIsCiAJCSAgICAgICBlZS0+ZWVfZXJybm8pOwotCQlsb2NhbCA9IDE7CiAJCWJyZWFrOwogCiAJY2FzZSBTT19FRV9PUklHSU5fTk9ORToKQEAgLTIxNSw3ICsyMTMsNiBAQAogCWRlZmF1bHQ6CiAJCV9wcm90bygiUnggUmVjZWl2ZWQgZXJyb3IgcmVwb3J0IHsgb3JpZz0ldSB9IiwKIAkJICAgICAgIGVlLT5lZV9vcmlnaW4pOwotCQlsb2NhbCA9IDA7CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2FyLXBlZXIuYyBiL25ldC9yeHJwYy9hci1wZWVyLmMKaW5kZXggNTViOTNkYy4uMjc1NGYwOSAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL2FyLXBlZXIuYworKysgYi9uZXQvcnhycGMvYXItcGVlci5jCkBAIC0zNiwxMCArMzYsMTEgQEAKIHN0YXRpYyB2b2lkIHJ4cnBjX2Fzc2Vzc19NVFVfc2l6ZShzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcikKIHsKIAlzdHJ1Y3QgcnRhYmxlICpydDsKKwlzdHJ1Y3QgZmxvd2k0IGZsNDsKIAogCXBlZXItPmlmX210dSA9IDE1MDA7CiAKLQlydCA9IGlwX3JvdXRlX291dHB1dF9wb3J0cygmaW5pdF9uZXQsIE5VTEwsCisJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMoJmluaXRfbmV0LCAmZmw0LCBOVUxMLAogCQkJCSAgIHBlZXItPnNyeC50cmFuc3BvcnQuc2luLnNpbl9hZGRyLnNfYWRkciwgMCwKIAkJCQkgICBodG9ucyg3MDAwKSwgaHRvbnMoNzAwMSksCiAJCQkJICAgSVBQUk9UT19VRFAsIDAsIDApOwpAQCAtMTU2LDYgKzE1Nyw3IEBACiAJLyogd2UgY2FuIG5vdyBhZGQgdGhlIG5ldyBjYW5kaWRhdGUgdG8gdGhlIGxpc3QgKi8KIAlwZWVyID0gY2FuZGlkYXRlOwogCWNhbmRpZGF0ZSA9IE5VTEw7CisJdXNhZ2UgPSBhdG9taWNfcmVhZCgmcGVlci0+dXNhZ2UpOwogCiAJbGlzdF9hZGRfdGFpbCgmcGVlci0+bGluaywgJnJ4cnBjX3BlZXJzKTsKIAl3cml0ZV91bmxvY2tfYmgoJnJ4cnBjX3BlZXJfbG9jayk7CkBAIC0xNzAsNyArMTcyLDcgQEAKIAkgICAgICZwZWVyLT5zcngudHJhbnNwb3J0LnNpbi5zaW5fYWRkciwKIAkgICAgIG50b2hzKHBlZXItPnNyeC50cmFuc3BvcnQuc2luLnNpbl9wb3J0KSk7CiAKLQlfbGVhdmUoIiA9ICVwIHt1PSVkfSIsIHBlZXIsIGF0b21pY19yZWFkKCZwZWVyLT51c2FnZSkpOworCV9sZWF2ZSgiID0gJXAge3U9JWR9IiwgcGVlciwgdXNhZ2UpOwogCXJldHVybiBwZWVyOwogCiAJLyogd2UgZm91bmQgdGhlIHBlZXIgaW4gdGhlIGxpc3QgaW1tZWRpYXRlbHkgKi8KZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hci10cmFuc3BvcnQuYyBiL25ldC9yeHJwYy9hci10cmFuc3BvcnQuYwppbmRleCA1ZTAyMjZmLi45MmRmNTY2IDEwMDY0NAotLS0gYS9uZXQvcnhycGMvYXItdHJhbnNwb3J0LmMKKysrIGIvbmV0L3J4cnBjL2FyLXRyYW5zcG9ydC5jCkBAIC0xMTEsNiArMTExLDcgQEAKIAkvKiB3ZSBjYW4gbm93IGFkZCB0aGUgbmV3IGNhbmRpZGF0ZSB0byB0aGUgbGlzdCAqLwogCXRyYW5zID0gY2FuZGlkYXRlOwogCWNhbmRpZGF0ZSA9IE5VTEw7CisJdXNhZ2UgPSBhdG9taWNfcmVhZCgmdHJhbnMtPnVzYWdlKTsKIAogCXJ4cnBjX2dldF9sb2NhbCh0cmFucy0+bG9jYWwpOwogCWF0b21pY19pbmMoJnRyYW5zLT5wZWVyLT51c2FnZSk7CkBAIC0xMjUsNyArMTI2LDcgQEAKIAkgICAgIHRyYW5zLT5sb2NhbC0+ZGVidWdfaWQsCiAJICAgICB0cmFucy0+cGVlci0+ZGVidWdfaWQpOwogCi0JX2xlYXZlKCIgPSAlcCB7dT0lZH0iLCB0cmFucywgYXRvbWljX3JlYWQoJnRyYW5zLT51c2FnZSkpOworCV9sZWF2ZSgiID0gJXAge3U9JWR9IiwgdHJhbnMsIHVzYWdlKTsKIAlyZXR1cm4gdHJhbnM7CiAKIAkvKiB3ZSBmb3VuZCB0aGUgdHJhbnNwb3J0IGluIHRoZSBsaXN0IGltbWVkaWF0ZWx5ICovCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvS2NvbmZpZyBiL25ldC9zY2hlZC9LY29uZmlnCmluZGV4IGE3YTU1ODNkLi4yNTkwZTkxIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvS2NvbmZpZworKysgYi9uZXQvc2NoZWQvS2NvbmZpZwpAQCAtMjM5LDYgKzIzOSwxNyBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjaF9jaG9rZS4KIAorY29uZmlnIE5FVF9TQ0hfUUZRCisJdHJpc3RhdGUgIlF1aWNrIEZhaXIgUXVldWVpbmcgc2NoZWR1bGVyIChRRlEpIgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBRdWljayBGYWlyIFF1ZXVlaW5nIFNjaGVkdWxlciAoUUZRKQorCSAgcGFja2V0IHNjaGVkdWxpbmcgYWxnb3JpdGhtLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBzY2hfcWZxLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgTkVUX1NDSF9JTkdSRVNTCiAJdHJpc3RhdGUgIkluZ3Jlc3MgUWRpc2MiCiAJZGVwZW5kcyBvbiBORVRfQ0xTX0FDVApAQCAtMjc3LDYgKzI4OCw3IEBACiAKIGNvbmZpZyBORVRfQ0xTX1JPVVRFNAogCXRyaXN0YXRlICJSb3V0aW5nIGRlY2lzaW9uIChST1VURSkiCisJZGVwZW5kcyBvbiBJTkVUCiAJc2VsZWN0IElQX1JPVVRFX0NMQVNTSUQKIAlzZWxlY3QgTkVUX0NMUwogCS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9NYWtlZmlsZSBiL25ldC9zY2hlZC9NYWtlZmlsZQppbmRleCAyZTc3YjhkLi5kYzU4ODljIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvTWFrZWZpbGUKKysrIGIvbmV0L3NjaGVkL01ha2VmaWxlCkBAIC0zNSw2ICszNSw3IEBACiBvYmotJChDT05GSUdfTkVUX1NDSF9EUlIpCSs9IHNjaF9kcnIubwogb2JqLSQoQ09ORklHX05FVF9TQ0hfTVFQUklPKQkrPSBzY2hfbXFwcmlvLm8KIG9iai0kKENPTkZJR19ORVRfU0NIX0NIT0tFKQkrPSBzY2hfY2hva2Uubworb2JqLSQoQ09ORklHX05FVF9TQ0hfUUZRKQkrPSBzY2hfcWZxLm8KIAogb2JqLSQoQ09ORklHX05FVF9DTFNfVTMyKQkrPSBjbHNfdTMyLm8KIG9iai0kKENPTkZJR19ORVRfQ0xTX1JPVVRFNCkJKz0gY2xzX3JvdXRlLm8KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfYXBpLmMgYi9uZXQvc2NoZWQvc2NoX2FwaS5jCmluZGV4IDc0OTBmM2YuLjZiODYyNzYgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfYXBpLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9hcGkuYwpAQCAtMTY3MywxMCArMTY3Myw4IEBACiB7CiAJaW50IGVyciA9IDA7CiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUCi0JX19iZTE2IHByb3RvY29sOwogCXN0cnVjdCB0Y2ZfcHJvdG8gKm90cCA9IHRwOwogcmVjbGFzc2lmeToKLQlwcm90b2NvbCA9IHNrYi0+cHJvdG9jb2w7CiAjZW5kaWYKIAogCWVyciA9IHRjX2NsYXNzaWZ5X2NvbXBhdChza2IsIHRwLCByZXMpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMgYi9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYwppbmRleCBjODRiNjU5Li5iMTcyMWQ3IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYworKysgYi9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYwpAQCAtODE1LDkgKzgxNSwxNyBAQAogCXJldHVybiBmYWxzZTsKIH0KIAorLyoqCisgKiAJZGV2X2RlYWN0aXZhdGVfbWFueSAtIGRlYWN0aXZhdGUgdHJhbnNtaXNzaW9ucyBvbiBzZXZlcmFsIGRldmljZXMKKyAqIAlAaGVhZDogbGlzdCBvZiBkZXZpY2VzIHRvIGRlYWN0aXZhdGUKKyAqCisgKglUaGlzIGZ1bmN0aW9uIHJldHVybnMgb25seSB3aGVuIGFsbCBvdXRzdGFuZGluZyB0cmFuc21pc3Npb25zCisgKgloYXZlIGNvbXBsZXRlZCwgdW5sZXNzIGFsbCBkZXZpY2VzIGFyZSBpbiBkaXNtYW50bGUgcGhhc2UuCisgKi8KIHZvaWQgZGV2X2RlYWN0aXZhdGVfbWFueShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJYm9vbCBzeW5jX25lZWRlZCA9IGZhbHNlOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsIGhlYWQsIHVucmVnX2xpc3QpIHsKIAkJbmV0ZGV2X2Zvcl9lYWNoX3R4X3F1ZXVlKGRldiwgZGV2X2RlYWN0aXZhdGVfcXVldWUsCkBAIC04MjcsMTAgKzgzNSwxNSBAQAogCQkJCQkgICAgICZub29wX3FkaXNjKTsKIAogCQlkZXZfd2F0Y2hkb2dfZG93bihkZXYpOworCQlzeW5jX25lZWRlZCB8PSAhZGV2LT5kaXNtYW50bGU7CiAJfQogCi0JLyogV2FpdCBmb3Igb3V0c3RhbmRpbmcgcWRpc2MtbGVzcyBkZXZfcXVldWVfeG1pdCBjYWxscy4gKi8KLQlzeW5jaHJvbml6ZV9yY3UoKTsKKwkvKiBXYWl0IGZvciBvdXRzdGFuZGluZyBxZGlzYy1sZXNzIGRldl9xdWV1ZV94bWl0IGNhbGxzLgorCSAqIFRoaXMgaXMgYXZvaWRlZCBpZiBhbGwgZGV2aWNlcyBhcmUgaW4gZGlzbWFudGxlIHBoYXNlIDoKKwkgKiBDYWxsZXIgd2lsbCBjYWxsIHN5bmNocm9uaXplX25ldCgpIGZvciB1cworCSAqLworCWlmIChzeW5jX25lZWRlZCkKKwkJc3luY2hyb25pemVfbmV0KCk7CiAKIAkvKiBXYWl0IGZvciBvdXRzdGFuZGluZyBxZGlzY19ydW4gY2FsbHMuICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsIGhlYWQsIHVucmVnX2xpc3QpCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3FmcS5jIGIvbmV0L3NjaGVkL3NjaF9xZnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDMzNDM0Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3NjaGVkL3NjaF9xZnEuYwpAQCAtMCwwICsxLDExMzcgQEAKKy8qCisgKiBuZXQvc2NoZWQvc2NoX3FmcS5jICAgICAgICAgUXVpY2sgRmFpciBRdWV1ZWluZyBTY2hlZHVsZXIuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IEZhYmlvIENoZWNjb25pLCBMdWlnaSBSaXp6bywgYW5kIFBhb2xvIFZhbGVudGUuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGt0X3NjaGVkLmg+CisjaW5jbHVkZSA8bmV0L3NjaF9nZW5lcmljLmg+CisjaW5jbHVkZSA8bmV0L3BrdF9zY2hlZC5oPgorI2luY2x1ZGUgPG5ldC9wa3RfY2xzLmg+CisKKworLyogIFF1aWNrIEZhaXIgUXVldWVpbmcKKyAgICA9PT09PT09PT09PT09PT09PT09CisKKyAgICBTb3VyY2VzOgorCisgICAgRmFiaW8gQ2hlY2NvbmksIEx1aWdpIFJpenpvLCBhbmQgUGFvbG8gVmFsZW50ZTogIlFGUTogRWZmaWNpZW50CisgICAgUGFja2V0IFNjaGVkdWxpbmcgd2l0aCBUaWdodCBCYW5kd2lkdGggRGlzdHJpYnV0aW9uIEd1YXJhbnRlZXMuIgorCisgICAgU2VlIGFsc286CisgICAgaHR0cDovL3JldGlzLnNzc3VwLml0L35mYWJpby9saW51eC9xZnEvCisgKi8KKworLyoKKworICBWaXJ0dWFsIHRpbWUgY29tcHV0YXRpb25zLgorCisgIFMsIEYgYW5kIFYgYXJlIGFsbCBjb21wdXRlZCBpbiBmaXhlZCBwb2ludCBhcml0aG1ldGljIHdpdGgKKyAgRlJBQ19CSVRTIGRlY2ltYWwgYml0cy4KKworICBRRlFfTUFYX0lOREVYIGlzIHRoZSBtYXhpbXVtIGluZGV4IGFsbG93ZWQgZm9yIGEgZ3JvdXAuIFdlIG5lZWQKKwlvbmUgYml0IHBlciBpbmRleC4KKyAgUUZRX01BWF9XU0hJRlQgaXMgdGhlIG1heGltdW0gcG93ZXIgb2YgdHdvIHN1cHBvcnRlZCBhcyBhIHdlaWdodC4KKworICBUaGUgbGF5b3V0IG9mIHRoZSBiaXRzIGlzIGFzIGJlbG93OgorCisgICAgICAgICAgICAgICAgICAgWyBNVFVfU0hJRlQgXVsgICAgICBGUkFDX0JJVFMgICAgXQorICAgICAgICAgICAgICAgICAgIFsgTUFYX0lOREVYICAgIF1bIE1JTl9TTE9UX1NISUZUIF0KKwkJCQkgXi5fX2dycC0+aW5kZXggPSAwCisJCQkJICouX19ncnAtPnNsb3Rfc2hpZnQKKworICB3aGVyZSBNSU5fU0xPVF9TSElGVCBpcyBkZXJpdmVkIGJ5IGRpZmZlcmVuY2UgZnJvbSB0aGUgb3RoZXJzLgorCisgIFRoZSBtYXggZ3JvdXAgaW5kZXggY29ycmVzcG9uZHMgdG8gTG1heC93X21pbiwgd2hlcmUKKyAgTG1heD0xPDxNVFVfU0hJRlQsIHdfbWluID0gMSAuCisgIEZyb20gdGhpcywgYW5kIGtub3dpbmcgaG93IG1hbnkgZ3JvdXBzIChNQVhfSU5ERVgpIHdlIHdhbnQsCisgIHdlIGNhbiBkZXJpdmUgdGhlIHNoaWZ0IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBncm91cC4KKworICBCZWNhdXNlIHdlIG9mdGVuIG5lZWQgdG8gY29tcHV0ZQorCUYgPSBTICsgbGVuL3dfaSAgYW5kIFYgPSBWICsgbGVuL3dzdW0KKyAgaW5zdGVhZCBvZiBzdG9yaW5nIHdfaSBzdG9yZSB0aGUgdmFsdWUKKwlpbnZfdyA9ICgxPDxGUkFDX0JJVFMpL3dfaQorICBzbyB3ZSBjYW4gZG8gRiA9IFMgKyBsZW4gKiBpbnZfdyAqIHdzdW0uCisgIFdlIHVzZSBXX1RPVCBpbiB0aGUgZm9ybXVsYXMgc28gd2UgY2FuIGVhc2lseSBtb3ZlIGJldHdlZW4KKyAgc3RhdGljIGFuZCBhZGFwdGl2ZSB3ZWlnaHQgc3VtLgorCisgIFRoZSBwZXItc2NoZWR1bGVyLWluc3RhbmNlIGRhdGEgY29udGFpbiBhbGwgdGhlIGRhdGEgc3RydWN0dXJlcworICBmb3IgdGhlIHNjaGVkdWxlcjogYml0bWFwcyBhbmQgYnVja2V0IGxpc3RzLgorCisgKi8KKworLyoKKyAqIE1heGltdW0gbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHNsb3RzIG9jY3VwaWVkIGJ5IGJhY2tsb2dnZWQgY2xhc3NlcworICogaW5zaWRlIGEgZ3JvdXAuCisgKi8KKyNkZWZpbmUgUUZRX01BWF9TTE9UUwkzMgorCisvKgorICogU2hpZnRzIHVzZWQgZm9yIGNsYXNzPC0+Z3JvdXAgbWFwcGluZy4gIFdlIGFsbG93IGNsYXNzIHdlaWdodHMgdGhhdCBhcmUKKyAqIGluIHRoZSByYW5nZSBbMSwgMl5NQVhfV1NISUZUXSwgYW5kIHdlIHRyeSB0byBtYXAgZWFjaCBjbGFzcyBpIHRvIHRoZQorICogZ3JvdXAgd2l0aCB0aGUgc21hbGxlc3QgaW5kZXggdGhhdCBjYW4gc3VwcG9ydCB0aGUgTF9pIC8gcl9pIGNvbmZpZ3VyZWQKKyAqIGZvciB0aGUgY2xhc3MuCisgKgorICogZ3JwLT5pbmRleCBpcyB0aGUgaW5kZXggb2YgdGhlIGdyb3VwOyBhbmQgZ3JwLT5zbG90X3NoaWZ0CisgKiBpcyB0aGUgc2hpZnQgZm9yIHRoZSBjb3JyZXNwb25kaW5nIChzY2FsZWQpIHNpZ21hX2kuCisgKi8KKyNkZWZpbmUgUUZRX01BWF9JTkRFWAkJMTkKKyNkZWZpbmUgUUZRX01BWF9XU0hJRlQJCTE2CisKKyNkZWZpbmUJUUZRX01BWF9XRUlHSFQJCSgxPDxRRlFfTUFYX1dTSElGVCkKKyNkZWZpbmUgUUZRX01BWF9XU1VNCQkoMipRRlFfTUFYX1dFSUdIVCkKKworI2RlZmluZSBGUkFDX0JJVFMJCTMwCS8qIGZpeGVkIHBvaW50IGFyaXRobWV0aWMgKi8KKyNkZWZpbmUgT05FX0ZQCQkJKDFVTCA8PCBGUkFDX0JJVFMpCisjZGVmaW5lIElXU1VNCQkJKE9ORV9GUC9RRlFfTUFYX1dTVU0pCisKKyNkZWZpbmUgUUZRX01UVV9TSElGVAkJMTEKKyNkZWZpbmUgUUZRX01JTl9TTE9UX1NISUZUCShGUkFDX0JJVFMgKyBRRlFfTVRVX1NISUZUIC0gUUZRX01BWF9JTkRFWCkKKworLyoKKyAqIFBvc3NpYmxlIGdyb3VwIHN0YXRlcy4gIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCBhcyBpbmRleGVzIGZvciB0aGUgYml0bWFwcworICogYXJyYXkgb2Ygc3RydWN0IHFmcV9xdWV1ZS4KKyAqLworZW51bSBxZnFfc3RhdGUgeyBFUiwgSVIsIEVCLCBJQiwgUUZRX01BWF9TVEFURSB9OworCitzdHJ1Y3QgcWZxX2dyb3VwOworCitzdHJ1Y3QgcWZxX2NsYXNzIHsKKwlzdHJ1Y3QgUWRpc2NfY2xhc3NfY29tbW9uIGNvbW1vbjsKKworCXVuc2lnbmVkIGludCByZWZjbnQ7CisJdW5zaWduZWQgaW50IGZpbHRlcl9jbnQ7CisKKwlzdHJ1Y3QgZ25ldF9zdGF0c19iYXNpY19wYWNrZWQgYnN0YXRzOworCXN0cnVjdCBnbmV0X3N0YXRzX3F1ZXVlIHFzdGF0czsKKwlzdHJ1Y3QgZ25ldF9zdGF0c19yYXRlX2VzdCByYXRlX2VzdDsKKwlzdHJ1Y3QgUWRpc2MgKnFkaXNjOworCisJc3RydWN0IGhsaXN0X25vZGUgbmV4dDsJLyogTGluayBmb3IgdGhlIHNsb3QgbGlzdC4gKi8KKwl1NjQgUywgRjsJCS8qIGZsb3cgdGltZXN0YW1wcyAoZXhhY3QpICovCisKKwkvKiBncm91cCB3ZSBiZWxvbmcgdG8uIEluIHByaW5jaXBsZSB3ZSB3b3VsZCBuZWVkIHRoZSBpbmRleCwKKwkgKiB3aGljaCBpcyBsb2dfMihsbWF4L3dlaWdodCksIGJ1dCB3ZSBuZXZlciByZWZlcmVuY2UgaXQKKwkgKiBkaXJlY3RseSwgb25seSB0aGUgZ3JvdXAuCisJICovCisJc3RydWN0IHFmcV9ncm91cCAqZ3JwOworCisJLyogdGhlc2UgYXJlIGNvcGllZCBmcm9tIHRoZSBmbG93c2V0LiAqLworCXUzMglpbnZfdzsJCS8qIE9ORV9GUC93ZWlnaHQgKi8KKwl1MzIJbG1heDsJCS8qIE1heCBwYWNrZXQgc2l6ZSBmb3IgdGhpcyBmbG93LiAqLworfTsKKworc3RydWN0IHFmcV9ncm91cCB7CisJdTY0IFMsIEY7CQkJLyogZ3JvdXAgdGltZXN0YW1wcyAoYXBwcm94KS4gKi8KKwl1bnNpZ25lZCBpbnQgc2xvdF9zaGlmdDsJLyogU2xvdCBzaGlmdC4gKi8KKwl1bnNpZ25lZCBpbnQgaW5kZXg7CQkvKiBHcm91cCBpbmRleC4gKi8KKwl1bnNpZ25lZCBpbnQgZnJvbnQ7CQkvKiBJbmRleCBvZiB0aGUgZnJvbnQgc2xvdC4gKi8KKwl1bnNpZ25lZCBsb25nIGZ1bGxfc2xvdHM7CS8qIG5vbi1lbXB0eSBzbG90cyAqLworCisJLyogQXJyYXkgb2YgUlIgbGlzdHMgb2YgYWN0aXZlIGNsYXNzZXMuICovCisJc3RydWN0IGhsaXN0X2hlYWQgc2xvdHNbUUZRX01BWF9TTE9UU107Cit9OworCitzdHJ1Y3QgcWZxX3NjaGVkIHsKKwlzdHJ1Y3QgdGNmX3Byb3RvICpmaWx0ZXJfbGlzdDsKKwlzdHJ1Y3QgUWRpc2NfY2xhc3NfaGFzaCBjbGhhc2g7CisKKwl1NjQJCVY7CQkvKiBQcmVjaXNlIHZpcnR1YWwgdGltZS4gKi8KKwl1MzIJCXdzdW07CQkvKiB3ZWlnaHQgc3VtICovCisKKwl1bnNpZ25lZCBsb25nIGJpdG1hcHNbUUZRX01BWF9TVEFURV07CSAgICAvKiBHcm91cCBiaXRtYXBzLiAqLworCXN0cnVjdCBxZnFfZ3JvdXAgZ3JvdXBzW1FGUV9NQVhfSU5ERVggKyAxXTsgLyogVGhlIGdyb3Vwcy4gKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcWZxX2NsYXNzICpxZnFfZmluZF9jbGFzcyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdTMyIGNsYXNzaWQpCit7CisJc3RydWN0IHFmcV9zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKKwlzdHJ1Y3QgUWRpc2NfY2xhc3NfY29tbW9uICpjbGM7CisKKwljbGMgPSBxZGlzY19jbGFzc19maW5kKCZxLT5jbGhhc2gsIGNsYXNzaWQpOworCWlmIChjbGMgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjbGMsIHN0cnVjdCBxZnFfY2xhc3MsIGNvbW1vbik7Cit9CisKK3N0YXRpYyB2b2lkIHFmcV9wdXJnZV9xdWV1ZShzdHJ1Y3QgcWZxX2NsYXNzICpjbCkKK3sKKwl1bnNpZ25lZCBpbnQgbGVuID0gY2wtPnFkaXNjLT5xLnFsZW47CisKKwlxZGlzY19yZXNldChjbC0+cWRpc2MpOworCXFkaXNjX3RyZWVfZGVjcmVhc2VfcWxlbihjbC0+cWRpc2MsIGxlbik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBxZnFfcG9saWN5W1RDQV9RRlFfTUFYICsgMV0gPSB7CisJW1RDQV9RRlFfV0VJR0hUXSA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCisJW1RDQV9RRlFfTE1BWF0gPSB7IC50eXBlID0gTkxBX1UzMiB9LAorfTsKKworLyoKKyAqIENhbGN1bGF0ZSBhIGZsb3cgaW5kZXgsIGdpdmVuIGl0cyB3ZWlnaHQgYW5kIG1heGltdW0gcGFja2V0IGxlbmd0aC4KKyAqIGluZGV4ID0gbG9nXzIobWF4bGVuL3dlaWdodCkgYnV0IHdlIG5lZWQgdG8gYXBwbHkgdGhlIHNjYWxpbmcuCisgKiBUaGlzIGlzIHVzZWQgb25seSBvbmNlIGF0IGZsb3cgY3JlYXRpb24uCisgKi8KK3N0YXRpYyBpbnQgcWZxX2NhbGNfaW5kZXgodTMyIGludl93LCB1bnNpZ25lZCBpbnQgbWF4bGVuKQoreworCXU2NCBzbG90X3NpemUgPSAodTY0KW1heGxlbiAqIGludl93OworCXVuc2lnbmVkIGxvbmcgc2l6ZV9tYXA7CisJaW50IGluZGV4ID0gMDsKKworCXNpemVfbWFwID0gc2xvdF9zaXplID4+IFFGUV9NSU5fU0xPVF9TSElGVDsKKwlpZiAoIXNpemVfbWFwKQorCQlnb3RvIG91dDsKKworCWluZGV4ID0gX19mbHMoc2l6ZV9tYXApICsgMTsJLyogYmFzaWNhbGx5IGEgbG9nXzIgKi8KKwlpbmRleCAtPSAhKHNsb3Rfc2l6ZSAtICgxVUxMIDw8IChpbmRleCArIFFGUV9NSU5fU0xPVF9TSElGVCAtIDEpKSk7CisKKwlpZiAoaW5kZXggPCAwKQorCQlpbmRleCA9IDA7CitvdXQ6CisJcHJfZGVidWcoInFmcSBjYWxjX2luZGV4OiBXID0gJWx1LCBMID0gJXUsIEkgPSAlZFxuIiwKKwkJICh1bnNpZ25lZCBsb25nKSBPTkVfRlAvaW52X3csIG1heGxlbiwgaW5kZXgpOworCisJcmV0dXJuIGluZGV4OworfQorCitzdGF0aWMgaW50IHFmcV9jaGFuZ2VfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkLCB1MzIgcGFyZW50aWQsCisJCQkgICAgc3RydWN0IG5sYXR0ciAqKnRjYSwgdW5zaWduZWQgbG9uZyAqYXJnKQoreworCXN0cnVjdCBxZnFfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7CisJc3RydWN0IHFmcV9jbGFzcyAqY2wgPSAoc3RydWN0IHFmcV9jbGFzcyAqKSphcmc7CisJc3RydWN0IG5sYXR0ciAqdGJbVENBX1FGUV9NQVggKyAxXTsKKwl1MzIgd2VpZ2h0LCBsbWF4LCBpbnZfdzsKKwlpbnQgaSwgZXJyOworCisJaWYgKHRjYVtUQ0FfT1BUSU9OU10gPT0gTlVMTCkgeworCQlwcl9ub3RpY2UoInFmcTogbm8gb3B0aW9uc1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIFRDQV9RRlFfTUFYLCB0Y2FbVENBX09QVElPTlNdLCBxZnFfcG9saWN5KTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWlmICh0YltUQ0FfUUZRX1dFSUdIVF0pIHsKKwkJd2VpZ2h0ID0gbmxhX2dldF91MzIodGJbVENBX1FGUV9XRUlHSFRdKTsKKwkJaWYgKCF3ZWlnaHQgfHwgd2VpZ2h0ID4gKDFVTCA8PCBRRlFfTUFYX1dTSElGVCkpIHsKKwkJCXByX25vdGljZSgicWZxOiBpbnZhbGlkIHdlaWdodCAldVxuIiwgd2VpZ2h0KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlCisJCXdlaWdodCA9IDE7CisKKwlpbnZfdyA9IE9ORV9GUCAvIHdlaWdodDsKKwl3ZWlnaHQgPSBPTkVfRlAgLyBpbnZfdzsKKwlpZiAocS0+d3N1bSArIHdlaWdodCA+IFFGUV9NQVhfV1NVTSkgeworCQlwcl9ub3RpY2UoInFmcTogdG90YWwgd2VpZ2h0IG91dCBvZiByYW5nZSAoJXUgKyAldSlcbiIsCisJCQkgIHdlaWdodCwgcS0+d3N1bSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh0YltUQ0FfUUZRX0xNQVhdKSB7CisJCWxtYXggPSBubGFfZ2V0X3UzMih0YltUQ0FfUUZRX0xNQVhdKTsKKwkJaWYgKCFsbWF4IHx8IGxtYXggPiAoMVVMIDw8IFFGUV9NVFVfU0hJRlQpKSB7CisJCQlwcl9ub3RpY2UoInFmcTogaW52YWxpZCBtYXggbGVuZ3RoICV1XG4iLCBsbWF4KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlCisJCWxtYXggPSAxVUwgPDwgUUZRX01UVV9TSElGVDsKKworCWlmIChjbCAhPSBOVUxMKSB7CisJCWlmICh0Y2FbVENBX1JBVEVdKSB7CisJCQllcnIgPSBnZW5fcmVwbGFjZV9lc3RpbWF0b3IoJmNsLT5ic3RhdHMsICZjbC0+cmF0ZV9lc3QsCisJCQkJCQkgICAgcWRpc2Nfcm9vdF9zbGVlcGluZ19sb2NrKHNjaCksCisJCQkJCQkgICAgdGNhW1RDQV9SQVRFXSk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCX0KKworCQlzY2hfdHJlZV9sb2NrKHNjaCk7CisJCWlmICh0YltUQ0FfUUZRX1dFSUdIVF0pIHsKKwkJCXEtPndzdW0gPSB3ZWlnaHQgLSBPTkVfRlAgLyBjbC0+aW52X3c7CisJCQljbC0+aW52X3cgPSBpbnZfdzsKKwkJfQorCQlzY2hfdHJlZV91bmxvY2soc2NoKTsKKworCQlyZXR1cm4gMDsKKwl9CisKKwljbCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBxZnFfY2xhc3MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2wgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9CVUZTOworCisJY2wtPnJlZmNudCA9IDE7CisJY2wtPmNvbW1vbi5jbGFzc2lkID0gY2xhc3NpZDsKKwljbC0+bG1heCA9IGxtYXg7CisJY2wtPmludl93ID0gaW52X3c7CisJaSA9IHFmcV9jYWxjX2luZGV4KGNsLT5pbnZfdywgY2wtPmxtYXgpOworCisJY2wtPmdycCA9ICZxLT5ncm91cHNbaV07CisJcS0+d3N1bSArPSB3ZWlnaHQ7CisKKwljbC0+cWRpc2MgPSBxZGlzY19jcmVhdGVfZGZsdChzY2gtPmRldl9xdWV1ZSwKKwkJCQkgICAgICAmcGZpZm9fcWRpc2Nfb3BzLCBjbGFzc2lkKTsKKwlpZiAoY2wtPnFkaXNjID09IE5VTEwpCisJCWNsLT5xZGlzYyA9ICZub29wX3FkaXNjOworCisJaWYgKHRjYVtUQ0FfUkFURV0pIHsKKwkJZXJyID0gZ2VuX25ld19lc3RpbWF0b3IoJmNsLT5ic3RhdHMsICZjbC0+cmF0ZV9lc3QsCisJCQkJCXFkaXNjX3Jvb3Rfc2xlZXBpbmdfbG9jayhzY2gpLAorCQkJCQl0Y2FbVENBX1JBVEVdKTsKKwkJaWYgKGVycikgeworCQkJcWRpc2NfZGVzdHJveShjbC0+cWRpc2MpOworCQkJa2ZyZWUoY2wpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCXNjaF90cmVlX2xvY2soc2NoKTsKKwlxZGlzY19jbGFzc19oYXNoX2luc2VydCgmcS0+Y2xoYXNoLCAmY2wtPmNvbW1vbik7CisJc2NoX3RyZWVfdW5sb2NrKHNjaCk7CisKKwlxZGlzY19jbGFzc19oYXNoX2dyb3coc2NoLCAmcS0+Y2xoYXNoKTsKKworCSphcmcgPSAodW5zaWduZWQgbG9uZyljbDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcWZxX2Rlc3Ryb3lfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBxZnFfY2xhc3MgKmNsKQoreworCXN0cnVjdCBxZnFfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7CisKKwlpZiAoY2wtPmludl93KSB7CisJCXEtPndzdW0gLT0gT05FX0ZQIC8gY2wtPmludl93OworCQljbC0+aW52X3cgPSAwOworCX0KKworCWdlbl9raWxsX2VzdGltYXRvcigmY2wtPmJzdGF0cywgJmNsLT5yYXRlX2VzdCk7CisJcWRpc2NfZGVzdHJveShjbC0+cWRpc2MpOworCWtmcmVlKGNsKTsKK30KKworc3RhdGljIGludCBxZnFfZGVsZXRlX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgcWZxX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpOworCXN0cnVjdCBxZnFfY2xhc3MgKmNsID0gKHN0cnVjdCBxZnFfY2xhc3MgKilhcmc7CisKKwlpZiAoY2wtPmZpbHRlcl9jbnQgPiAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJc2NoX3RyZWVfbG9jayhzY2gpOworCisJcWZxX3B1cmdlX3F1ZXVlKGNsKTsKKwlxZGlzY19jbGFzc19oYXNoX3JlbW92ZSgmcS0+Y2xoYXNoLCAmY2wtPmNvbW1vbik7CisKKwlCVUdfT04oLS1jbC0+cmVmY250ID09IDApOworCS8qCisJICogVGhpcyBzaG91bGRuJ3QgaGFwcGVuOiB3ZSAiaG9sZCIgb25lIGNvcHMtPmdldCgpIHdoZW4gY2FsbGVkCisJICogZnJvbSB0Y19jdGxfdGNsYXNzOyB0aGUgZGVzdHJveSBtZXRob2QgaXMgZG9uZSBmcm9tIGNvcHMtPnB1dCgpLgorCSAqLworCisJc2NoX3RyZWVfdW5sb2NrKHNjaCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHFmcV9nZXRfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkKQoreworCXN0cnVjdCBxZnFfY2xhc3MgKmNsID0gcWZxX2ZpbmRfY2xhc3Moc2NoLCBjbGFzc2lkKTsKKworCWlmIChjbCAhPSBOVUxMKQorCQljbC0+cmVmY250Kys7CisKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpY2w7Cit9CisKK3N0YXRpYyB2b2lkIHFmcV9wdXRfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBxZnFfY2xhc3MgKmNsID0gKHN0cnVjdCBxZnFfY2xhc3MgKilhcmc7CisKKwlpZiAoLS1jbC0+cmVmY250ID09IDApCisJCXFmcV9kZXN0cm95X2NsYXNzKHNjaCwgY2wpOworfQorCitzdGF0aWMgc3RydWN0IHRjZl9wcm90byAqKnFmcV90Y2ZfY2hhaW4oc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wpCit7CisJc3RydWN0IHFmcV9zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKKworCWlmIChjbCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gJnEtPmZpbHRlcl9saXN0OworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBxZnFfYmluZF90Y2Yoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgcGFyZW50LAorCQkJCSAgdTMyIGNsYXNzaWQpCit7CisJc3RydWN0IHFmcV9jbGFzcyAqY2wgPSBxZnFfZmluZF9jbGFzcyhzY2gsIGNsYXNzaWQpOworCisJaWYgKGNsICE9IE5VTEwpCisJCWNsLT5maWx0ZXJfY250Kys7CisKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpY2w7Cit9CisKK3N0YXRpYyB2b2lkIHFmcV91bmJpbmRfdGNmKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgcWZxX2NsYXNzICpjbCA9IChzdHJ1Y3QgcWZxX2NsYXNzICopYXJnOworCisJY2wtPmZpbHRlcl9jbnQtLTsKK30KKworc3RhdGljIGludCBxZnFfZ3JhZnRfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgYXJnLAorCQkJICAgc3RydWN0IFFkaXNjICpuZXcsIHN0cnVjdCBRZGlzYyAqKm9sZCkKK3sKKwlzdHJ1Y3QgcWZxX2NsYXNzICpjbCA9IChzdHJ1Y3QgcWZxX2NsYXNzICopYXJnOworCisJaWYgKG5ldyA9PSBOVUxMKSB7CisJCW5ldyA9IHFkaXNjX2NyZWF0ZV9kZmx0KHNjaC0+ZGV2X3F1ZXVlLAorCQkJCQkmcGZpZm9fcWRpc2Nfb3BzLCBjbC0+Y29tbW9uLmNsYXNzaWQpOworCQlpZiAobmV3ID09IE5VTEwpCisJCQluZXcgPSAmbm9vcF9xZGlzYzsKKwl9CisKKwlzY2hfdHJlZV9sb2NrKHNjaCk7CisJcWZxX3B1cmdlX3F1ZXVlKGNsKTsKKwkqb2xkID0gY2wtPnFkaXNjOworCWNsLT5xZGlzYyA9IG5ldzsKKwlzY2hfdHJlZV91bmxvY2soc2NoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBRZGlzYyAqcWZxX2NsYXNzX2xlYWYoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBxZnFfY2xhc3MgKmNsID0gKHN0cnVjdCBxZnFfY2xhc3MgKilhcmc7CisKKwlyZXR1cm4gY2wtPnFkaXNjOworfQorCitzdGF0aWMgaW50IHFmcV9kdW1wX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGFyZywKKwkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjbXNnICp0Y20pCit7CisJc3RydWN0IHFmcV9jbGFzcyAqY2wgPSAoc3RydWN0IHFmcV9jbGFzcyAqKWFyZzsKKwlzdHJ1Y3QgbmxhdHRyICpuZXN0OworCisJdGNtLT50Y21fcGFyZW50CT0gVENfSF9ST09UOworCXRjbS0+dGNtX2hhbmRsZQk9IGNsLT5jb21tb24uY2xhc3NpZDsKKwl0Y20tPnRjbV9pbmZvCT0gY2wtPnFkaXNjLT5oYW5kbGU7CisKKwluZXN0ID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBUQ0FfT1BUSU9OUyk7CisJaWYgKG5lc3QgPT0gTlVMTCkKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisJTkxBX1BVVF9VMzIoc2tiLCBUQ0FfUUZRX1dFSUdIVCwgT05FX0ZQL2NsLT5pbnZfdyk7CisJTkxBX1BVVF9VMzIoc2tiLCBUQ0FfUUZRX0xNQVgsIGNsLT5sbWF4KTsKKwlyZXR1cm4gbmxhX25lc3RfZW5kKHNrYiwgbmVzdCk7CisKK25sYV9wdXRfZmFpbHVyZToKKwlubGFfbmVzdF9jYW5jZWwoc2tiLCBuZXN0KTsKKwlyZXR1cm4gLUVNU0dTSVpFOworfQorCitzdGF0aWMgaW50IHFmcV9kdW1wX2NsYXNzX3N0YXRzKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGFyZywKKwkJCQlzdHJ1Y3QgZ25ldF9kdW1wICpkKQoreworCXN0cnVjdCBxZnFfY2xhc3MgKmNsID0gKHN0cnVjdCBxZnFfY2xhc3MgKilhcmc7CisJc3RydWN0IHRjX3FmcV9zdGF0cyB4c3RhdHM7CisKKwltZW1zZXQoJnhzdGF0cywgMCwgc2l6ZW9mKHhzdGF0cykpOworCWNsLT5xZGlzYy0+cXN0YXRzLnFsZW4gPSBjbC0+cWRpc2MtPnEucWxlbjsKKworCXhzdGF0cy53ZWlnaHQgPSBPTkVfRlAvY2wtPmludl93OworCXhzdGF0cy5sbWF4ID0gY2wtPmxtYXg7CisKKwlpZiAoZ25ldF9zdGF0c19jb3B5X2Jhc2ljKGQsICZjbC0+YnN0YXRzKSA8IDAgfHwKKwkgICAgZ25ldF9zdGF0c19jb3B5X3JhdGVfZXN0KGQsICZjbC0+YnN0YXRzLCAmY2wtPnJhdGVfZXN0KSA8IDAgfHwKKwkgICAgZ25ldF9zdGF0c19jb3B5X3F1ZXVlKGQsICZjbC0+cWRpc2MtPnFzdGF0cykgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gZ25ldF9zdGF0c19jb3B5X2FwcChkLCAmeHN0YXRzLCBzaXplb2YoeHN0YXRzKSk7Cit9CisKK3N0YXRpYyB2b2lkIHFmcV93YWxrKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgcWRpc2Nfd2Fsa2VyICphcmcpCit7CisJc3RydWN0IHFmcV9zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKKwlzdHJ1Y3QgcWZxX2NsYXNzICpjbDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmIChhcmctPnN0b3ApCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBxLT5jbGhhc2guaGFzaHNpemU7IGkrKykgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeShjbCwgbiwgJnEtPmNsaGFzaC5oYXNoW2ldLCBjb21tb24uaG5vZGUpIHsKKwkJCWlmIChhcmctPmNvdW50IDwgYXJnLT5za2lwKSB7CisJCQkJYXJnLT5jb3VudCsrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKGFyZy0+Zm4oc2NoLCAodW5zaWduZWQgbG9uZyljbCwgYXJnKSA8IDApIHsKKwkJCQlhcmctPnN0b3AgPSAxOworCQkJCXJldHVybjsKKwkJCX0KKwkJCWFyZy0+Y291bnQrKzsKKwkJfQorCX0KK30KKworc3RhdGljIHN0cnVjdCBxZnFfY2xhc3MgKnFmcV9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwKKwkJCQkgICAgICBpbnQgKnFlcnIpCit7CisJc3RydWN0IHFmcV9zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKKwlzdHJ1Y3QgcWZxX2NsYXNzICpjbDsKKwlzdHJ1Y3QgdGNmX3Jlc3VsdCByZXM7CisJaW50IHJlc3VsdDsKKworCWlmIChUQ19IX01BSihza2ItPnByaW9yaXR5IF4gc2NoLT5oYW5kbGUpID09IDApIHsKKwkJcHJfZGVidWcoInFmcV9jbGFzc2lmeTogZm91bmQgJWRcbiIsIHNrYi0+cHJpb3JpdHkpOworCQljbCA9IHFmcV9maW5kX2NsYXNzKHNjaCwgc2tiLT5wcmlvcml0eSk7CisJCWlmIChjbCAhPSBOVUxMKQorCQkJcmV0dXJuIGNsOworCX0KKworCSpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTOworCXJlc3VsdCA9IHRjX2NsYXNzaWZ5KHNrYiwgcS0+ZmlsdGVyX2xpc3QsICZyZXMpOworCWlmIChyZXN1bHQgPj0gMCkgeworI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVAorCQlzd2l0Y2ggKHJlc3VsdCkgeworCQljYXNlIFRDX0FDVF9RVUVVRUQ6CisJCWNhc2UgVENfQUNUX1NUT0xFTjoKKwkJCSpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfU1RPTEVOOworCQljYXNlIFRDX0FDVF9TSE9UOgorCQkJcmV0dXJuIE5VTEw7CisJCX0KKyNlbmRpZgorCQljbCA9IChzdHJ1Y3QgcWZxX2NsYXNzICopcmVzLmNsYXNzOworCQlpZiAoY2wgPT0gTlVMTCkKKwkJCWNsID0gcWZxX2ZpbmRfY2xhc3Moc2NoLCByZXMuY2xhc3NpZCk7CisJCXJldHVybiBjbDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyogR2VuZXJpYyBjb21wYXJpc29uIGZ1bmN0aW9uLCBoYW5kbGluZyB3cmFwYXJvdW5kLiAqLworc3RhdGljIGlubGluZSBpbnQgcWZxX2d0KHU2NCBhLCB1NjQgYikKK3sKKwlyZXR1cm4gKHM2NCkoYSAtIGIpID4gMDsKK30KKworLyogUm91bmQgYSBwcmVjaXNlIHRpbWVzdGFtcCB0byBpdHMgc2xvdHRlZCB2YWx1ZS4gKi8KK3N0YXRpYyBpbmxpbmUgdTY0IHFmcV9yb3VuZF9kb3duKHU2NCB0cywgdW5zaWduZWQgaW50IHNoaWZ0KQoreworCXJldHVybiB0cyAmIH4oKDFVTEwgPDwgc2hpZnQpIC0gMSk7Cit9CisKKy8qIHJldHVybiB0aGUgcG9pbnRlciB0byB0aGUgZ3JvdXAgd2l0aCBsb3dlc3QgaW5kZXggaW4gdGhlIGJpdG1hcCAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgcWZxX2dyb3VwICpxZnFfZmZzKHN0cnVjdCBxZnFfc2NoZWQgKnEsCisJCQkJCXVuc2lnbmVkIGxvbmcgYml0bWFwKQoreworCWludCBpbmRleCA9IF9fZmZzKGJpdG1hcCk7CisJcmV0dXJuICZxLT5ncm91cHNbaW5kZXhdOworfQorLyogQ2FsY3VsYXRlIGEgbWFzayB0byBtaW1pYyB3aGF0IHdvdWxkIGJlIGZmc19mcm9tKCkuICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWFza19mcm9tKHVuc2lnbmVkIGxvbmcgYml0bWFwLCBpbnQgZnJvbSkKK3sKKwlyZXR1cm4gYml0bWFwICYgfigoMVVMIDw8IGZyb20pIC0gMSk7Cit9CisKKy8qCisgKiBUaGUgc3RhdGUgY29tcHV0YXRpb24gcmVsaWVzIG9uIEVSPTAsIElSPTEsIEVCPTIsIElCPTMKKyAqIEZpcnN0IGNvbXB1dGUgZWxpZ2liaWxpdHkgY29tcGFyaW5nIGdycC0+UywgcS0+ViwKKyAqIHRoZW4gY2hlY2sgaWYgc29tZW9uZSBpcyBibG9ja2luZyB1cyBhbmQgcG9zc2libHkgYWRkIEVCCisgKi8KK3N0YXRpYyBpbnQgcWZxX2NhbGNfc3RhdGUoc3RydWN0IHFmcV9zY2hlZCAqcSwgY29uc3Qgc3RydWN0IHFmcV9ncm91cCAqZ3JwKQoreworCS8qIGlmIFMgPiBWIHdlIGFyZSBub3QgZWxpZ2libGUgKi8KKwl1bnNpZ25lZCBpbnQgc3RhdGUgPSBxZnFfZ3QoZ3JwLT5TLCBxLT5WKTsKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSBtYXNrX2Zyb20ocS0+Yml0bWFwc1tFUl0sIGdycC0+aW5kZXgpOworCXN0cnVjdCBxZnFfZ3JvdXAgKm5leHQ7CisKKwlpZiAobWFzaykgeworCQluZXh0ID0gcWZxX2ZmcyhxLCBtYXNrKTsKKwkJaWYgKHFmcV9ndChncnAtPkYsIG5leHQtPkYpKQorCQkJc3RhdGUgfD0gRUI7CisJfQorCisJcmV0dXJuIHN0YXRlOworfQorCisKKy8qCisgKiBJbiBwcmluY2lwbGUKKyAqCXEtPmJpdG1hcHNbZHN0XSB8PSBxLT5iaXRtYXBzW3NyY10gJiBtYXNrOworICoJcS0+Yml0bWFwc1tzcmNdICY9IH5tYXNrOworICogYnV0IHdlIHNob3VsZCBtYWtlIHN1cmUgdGhhdCBzcmMgIT0gZHN0CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBxZnFfbW92ZV9ncm91cHMoc3RydWN0IHFmcV9zY2hlZCAqcSwgdW5zaWduZWQgbG9uZyBtYXNrLAorCQkJCSAgIGludCBzcmMsIGludCBkc3QpCit7CisJcS0+Yml0bWFwc1tkc3RdIHw9IHEtPmJpdG1hcHNbc3JjXSAmIG1hc2s7CisJcS0+Yml0bWFwc1tzcmNdICY9IH5tYXNrOworfQorCitzdGF0aWMgdm9pZCBxZnFfdW5ibG9ja19ncm91cHMoc3RydWN0IHFmcV9zY2hlZCAqcSwgaW50IGluZGV4LCB1NjQgb2xkX0YpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gbWFza19mcm9tKHEtPmJpdG1hcHNbRVJdLCBpbmRleCArIDEpOworCXN0cnVjdCBxZnFfZ3JvdXAgKm5leHQ7CisKKwlpZiAobWFzaykgeworCQluZXh0ID0gcWZxX2ZmcyhxLCBtYXNrKTsKKwkJaWYgKCFxZnFfZ3QobmV4dC0+Riwgb2xkX0YpKQorCQkJcmV0dXJuOworCX0KKworCW1hc2sgPSAoMVVMIDw8IGluZGV4KSAtIDE7CisJcWZxX21vdmVfZ3JvdXBzKHEsIG1hc2ssIEVCLCBFUik7CisJcWZxX21vdmVfZ3JvdXBzKHEsIG1hc2ssIElCLCBJUik7Cit9CisKKy8qCisgKiBwZXJoYXBzCisgKgorCW9sZF9WIF49IHEtPlY7CisJb2xkX1YgPj49IFFGUV9NSU5fU0xPVF9TSElGVDsKKwlpZiAob2xkX1YpIHsKKwkJLi4uCisJfQorICoKKyAqLworc3RhdGljIHZvaWQgcWZxX21ha2VfZWxpZ2libGUoc3RydWN0IHFmcV9zY2hlZCAqcSwgdTY0IG9sZF9WKQoreworCXVuc2lnbmVkIGxvbmcgdnNsb3QgPSBxLT5WID4+IFFGUV9NSU5fU0xPVF9TSElGVDsKKwl1bnNpZ25lZCBsb25nIG9sZF92c2xvdCA9IG9sZF9WID4+IFFGUV9NSU5fU0xPVF9TSElGVDsKKworCWlmICh2c2xvdCAhPSBvbGRfdnNsb3QpIHsKKwkJdW5zaWduZWQgbG9uZyBtYXNrID0gKDFVTCA8PCBmbHModnNsb3QgXiBvbGRfdnNsb3QpKSAtIDE7CisJCXFmcV9tb3ZlX2dyb3VwcyhxLCBtYXNrLCBJUiwgRVIpOworCQlxZnFfbW92ZV9ncm91cHMocSwgbWFzaywgSUIsIEVCKTsKKwl9Cit9CisKKworLyoKKyAqIFhYWCB3ZSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgc2xvdCBiZWNvbWVzIGxlc3MgdGhhbiAzMi4KKyAqIFRoaXMgaXMgZ3VhcmFudGVlZCBieSB0aGUgaW5wdXQgdmFsdWVzLgorICogcm91bmRlZFMgaXMgYWx3YXlzIGNsLT5TIHJvdW5kZWQgb24gZ3JwLT5zbG90X3NoaWZ0IGJpdHMuCisgKi8KK3N0YXRpYyB2b2lkIHFmcV9zbG90X2luc2VydChzdHJ1Y3QgcWZxX2dyb3VwICpncnAsIHN0cnVjdCBxZnFfY2xhc3MgKmNsLAorCQkJICAgIHU2NCByb3VuZGVkUykKK3sKKwl1NjQgc2xvdCA9IChyb3VuZGVkUyAtIGdycC0+UykgPj4gZ3JwLT5zbG90X3NoaWZ0OworCXVuc2lnbmVkIGludCBpID0gKGdycC0+ZnJvbnQgKyBzbG90KSAlIFFGUV9NQVhfU0xPVFM7CisKKwlobGlzdF9hZGRfaGVhZCgmY2wtPm5leHQsICZncnAtPnNsb3RzW2ldKTsKKwlfX3NldF9iaXQoc2xvdCwgJmdycC0+ZnVsbF9zbG90cyk7Cit9CisKKy8qIE1heWJlIGludHJvZHVjZSBobGlzdF9maXJzdF9lbnRyeT8/ICovCitzdGF0aWMgc3RydWN0IHFmcV9jbGFzcyAqcWZxX3Nsb3RfaGVhZChzdHJ1Y3QgcWZxX2dyb3VwICpncnApCit7CisJcmV0dXJuIGhsaXN0X2VudHJ5KGdycC0+c2xvdHNbZ3JwLT5mcm9udF0uZmlyc3QsCisJCQkgICBzdHJ1Y3QgcWZxX2NsYXNzLCBuZXh0KTsKK30KKworLyoKKyAqIHJlbW92ZSB0aGUgZW50cnkgZnJvbSB0aGUgc2xvdAorICovCitzdGF0aWMgdm9pZCBxZnFfZnJvbnRfc2xvdF9yZW1vdmUoc3RydWN0IHFmcV9ncm91cCAqZ3JwKQoreworCXN0cnVjdCBxZnFfY2xhc3MgKmNsID0gcWZxX3Nsb3RfaGVhZChncnApOworCisJQlVHX09OKCFjbCk7CisJaGxpc3RfZGVsKCZjbC0+bmV4dCk7CisJaWYgKGhsaXN0X2VtcHR5KCZncnAtPnNsb3RzW2dycC0+ZnJvbnRdKSkKKwkJX19jbGVhcl9iaXQoMCwgJmdycC0+ZnVsbF9zbG90cyk7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRoZSBmaXJzdCBmdWxsIHF1ZXVlIGluIGEgZ3JvdXAuIEFzIGEgc2lkZSBlZmZlY3QsCisgKiBhZGp1c3QgdGhlIGJ1Y2tldCBsaXN0IHNvIHRoZSBmaXJzdCBub24tZW1wdHkgYnVja2V0IGlzIGF0CisgKiBwb3NpdGlvbiAwIGluIGZ1bGxfc2xvdHMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcWZxX2NsYXNzICpxZnFfc2xvdF9zY2FuKHN0cnVjdCBxZnFfZ3JvdXAgKmdycCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCXByX2RlYnVnKCJxZnEgc2xvdF9zY2FuOiBncnAgJXUgZnVsbCAlI2x4XG4iLAorCQkgZ3JwLT5pbmRleCwgZ3JwLT5mdWxsX3Nsb3RzKTsKKworCWlmIChncnAtPmZ1bGxfc2xvdHMgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpID0gX19mZnMoZ3JwLT5mdWxsX3Nsb3RzKTsgIC8qIHplcm8gYmFzZWQgKi8KKwlpZiAoaSA+IDApIHsKKwkJZ3JwLT5mcm9udCA9IChncnAtPmZyb250ICsgaSkgJSBRRlFfTUFYX1NMT1RTOworCQlncnAtPmZ1bGxfc2xvdHMgPj49IGk7CisJfQorCisJcmV0dXJuIHFmcV9zbG90X2hlYWQoZ3JwKTsKK30KKworLyoKKyAqIGFkanVzdCB0aGUgYnVja2V0IGxpc3QuIFdoZW4gdGhlIHN0YXJ0IHRpbWUgb2YgYSBncm91cCBkZWNyZWFzZXMsCisgKiB3ZSBtb3ZlIHRoZSBpbmRleCBkb3duIChtb2R1bG8gUUZRX01BWF9TTE9UUykgc28gd2UgZG9uJ3QgbmVlZCB0bworICogbW92ZSB0aGUgb2JqZWN0cy4gVGhlIG1hc2sgb2Ygb2NjdXBpZWQgc2xvdHMgbXVzdCBiZSBzaGlmdGVkCisgKiBiZWNhdXNlIHdlIHVzZSBmZnMoKSB0byBmaW5kIHRoZSBmaXJzdCBub24tZW1wdHkgc2xvdC4KKyAqIFRoaXMgY292ZXJzIGRlY3JlYXNlcyBpbiB0aGUgZ3JvdXAncyBzdGFydCB0aW1lLCBidXQgd2hhdCBhYm91dAorICogaW5jcmVhc2VzIG9mIHRoZSBzdGFydCB0aW1lID8KKyAqIEhlcmUgdG9vIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhhdCBpIGlzIGxlc3MgdGhhbiAzMgorICovCitzdGF0aWMgdm9pZCBxZnFfc2xvdF9yb3RhdGUoc3RydWN0IHFmcV9ncm91cCAqZ3JwLCB1NjQgcm91bmRlZFMpCit7CisJdW5zaWduZWQgaW50IGkgPSAoZ3JwLT5TIC0gcm91bmRlZFMpID4+IGdycC0+c2xvdF9zaGlmdDsKKworCWdycC0+ZnVsbF9zbG90cyA8PD0gaTsKKwlncnAtPmZyb250ID0gKGdycC0+ZnJvbnQgLSBpKSAlIFFGUV9NQVhfU0xPVFM7Cit9CisKK3N0YXRpYyB2b2lkIHFmcV91cGRhdGVfZWxpZ2libGUoc3RydWN0IHFmcV9zY2hlZCAqcSwgdTY0IG9sZF9WKQoreworCXN0cnVjdCBxZnFfZ3JvdXAgKmdycDsKKwl1bnNpZ25lZCBsb25nIGluZWxpZ2libGU7CisKKwlpbmVsaWdpYmxlID0gcS0+Yml0bWFwc1tJUl0gfCBxLT5iaXRtYXBzW0lCXTsKKwlpZiAoaW5lbGlnaWJsZSkgeworCQlpZiAoIXEtPmJpdG1hcHNbRVJdKSB7CisJCQlncnAgPSBxZnFfZmZzKHEsIGluZWxpZ2libGUpOworCQkJaWYgKHFmcV9ndChncnAtPlMsIHEtPlYpKQorCQkJCXEtPlYgPSBncnAtPlM7CisJCX0KKwkJcWZxX21ha2VfZWxpZ2libGUocSwgb2xkX1YpOworCX0KK30KKworLyogV2hhdCBpcyBsZW5ndGggb2YgbmV4dCBwYWNrZXQgaW4gcXVldWUgKDAgaWYgcXVldWUgaXMgZW1wdHkpICovCitzdGF0aWMgdW5zaWduZWQgaW50IHFkaXNjX3BlZWtfbGVuKHN0cnVjdCBRZGlzYyAqc2NoKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlza2IgPSBzY2gtPm9wcy0+cGVlayhzY2gpOworCXJldHVybiBza2IgPyBxZGlzY19wa3RfbGVuKHNrYikgOiAwOworfQorCisvKgorICogVXBkYXRlcyB0aGUgY2xhc3MsIHJldHVybnMgdHJ1ZSBpZiBhbHNvIHRoZSBncm91cCBuZWVkcyB0byBiZSB1cGRhdGVkLgorICovCitzdGF0aWMgYm9vbCBxZnFfdXBkYXRlX2NsYXNzKHN0cnVjdCBxZnFfZ3JvdXAgKmdycCwgc3RydWN0IHFmcV9jbGFzcyAqY2wpCit7CisJdW5zaWduZWQgaW50IGxlbiA9IHFkaXNjX3BlZWtfbGVuKGNsLT5xZGlzYyk7CisKKwljbC0+UyA9IGNsLT5GOworCWlmICghbGVuKQorCQlxZnFfZnJvbnRfc2xvdF9yZW1vdmUoZ3JwKTsJLyogcXVldWUgaXMgZW1wdHkgKi8KKwllbHNlIHsKKwkJdTY0IHJvdW5kZWRTOworCisJCWNsLT5GID0gY2wtPlMgKyAodTY0KWxlbiAqIGNsLT5pbnZfdzsKKwkJcm91bmRlZFMgPSBxZnFfcm91bmRfZG93bihjbC0+UywgZ3JwLT5zbG90X3NoaWZ0KTsKKwkJaWYgKHJvdW5kZWRTID09IGdycC0+UykKKwkJCXJldHVybiBmYWxzZTsKKworCQlxZnFfZnJvbnRfc2xvdF9yZW1vdmUoZ3JwKTsKKwkJcWZxX3Nsb3RfaW5zZXJ0KGdycCwgY2wsIHJvdW5kZWRTKTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICpxZnFfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaCkKK3sKKwlzdHJ1Y3QgcWZxX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpOworCXN0cnVjdCBxZnFfZ3JvdXAgKmdycDsKKwlzdHJ1Y3QgcWZxX2NsYXNzICpjbDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXVuc2lnbmVkIGludCBsZW47CisJdTY0IG9sZF9WOworCisJaWYgKCFxLT5iaXRtYXBzW0VSXSkKKwkJcmV0dXJuIE5VTEw7CisKKwlncnAgPSBxZnFfZmZzKHEsIHEtPmJpdG1hcHNbRVJdKTsKKworCWNsID0gcWZxX3Nsb3RfaGVhZChncnApOworCXNrYiA9IHFkaXNjX2RlcXVldWVfcGVla2VkKGNsLT5xZGlzYyk7CisJaWYgKCFza2IpIHsKKwkJV0FSTl9PTkNFKDEsICJxZnFfZGVxdWV1ZTogbm9uLXdvcmtjb25zZXJ2aW5nIGxlYWZcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlzY2gtPnEucWxlbi0tOworCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOworCisJb2xkX1YgPSBxLT5WOworCWxlbiA9IHFkaXNjX3BrdF9sZW4oc2tiKTsKKwlxLT5WICs9ICh1NjQpbGVuICogSVdTVU07CisJcHJfZGVidWcoInFmcSBkZXF1ZXVlOiBsZW4gJXUgRiAlbGxkIG5vdyAlbGxkXG4iLAorCQkgbGVuLCAodW5zaWduZWQgbG9uZyBsb25nKSBjbC0+RiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgcS0+Vik7CisKKwlpZiAocWZxX3VwZGF0ZV9jbGFzcyhncnAsIGNsKSkgeworCQl1NjQgb2xkX0YgPSBncnAtPkY7CisKKwkJY2wgPSBxZnFfc2xvdF9zY2FuKGdycCk7CisJCWlmICghY2wpCisJCQlfX2NsZWFyX2JpdChncnAtPmluZGV4LCAmcS0+Yml0bWFwc1tFUl0pOworCQllbHNlIHsKKwkJCXU2NCByb3VuZGVkUyA9IHFmcV9yb3VuZF9kb3duKGNsLT5TLCBncnAtPnNsb3Rfc2hpZnQpOworCQkJdW5zaWduZWQgaW50IHM7CisKKwkJCWlmIChncnAtPlMgPT0gcm91bmRlZFMpCisJCQkJZ290byBza2lwX3VuYmxvY2s7CisJCQlncnAtPlMgPSByb3VuZGVkUzsKKwkJCWdycC0+RiA9IHJvdW5kZWRTICsgKDJVTEwgPDwgZ3JwLT5zbG90X3NoaWZ0KTsKKwkJCV9fY2xlYXJfYml0KGdycC0+aW5kZXgsICZxLT5iaXRtYXBzW0VSXSk7CisJCQlzID0gcWZxX2NhbGNfc3RhdGUocSwgZ3JwKTsKKwkJCV9fc2V0X2JpdChncnAtPmluZGV4LCAmcS0+Yml0bWFwc1tzXSk7CisJCX0KKworCQlxZnFfdW5ibG9ja19ncm91cHMocSwgZ3JwLT5pbmRleCwgb2xkX0YpOworCX0KKworc2tpcF91bmJsb2NrOgorCXFmcV91cGRhdGVfZWxpZ2libGUocSwgb2xkX1YpOworCisJcmV0dXJuIHNrYjsKK30KKworLyoKKyAqIEFzc2lnbiBhIHJlYXNvbmFibGUgc3RhcnQgdGltZSBmb3IgYSBuZXcgZmxvdyBrIGluIGdyb3VwIGkuCisgKiBBZG1pc3NpYmxlIHZhbHVlcyBmb3IgXGhhdChGKSBhcmUgbXVsdGlwbGVzIG9mIFxzaWdtYV9pCisgKiBubyBncmVhdGVyIHRoYW4gVitcc2lnbWFfaSAuIExhcmdlciB2YWx1ZXMgbWVhbiB0aGF0CisgKiB3ZSBoYWQgYSB3cmFwYXJvdW5kIHNvIHdlIGNvbnNpZGVyIHRoZSB0aW1lc3RhbXAgdG8gYmUgc3RhbGUuCisgKgorICogSWYgRiBpcyBub3Qgc3RhbGUgYW5kIEYgPj0gViB0aGVuIHdlIHNldCBTID0gRi4KKyAqIE90aGVyd2lzZSB3ZSBzaG91bGQgYXNzaWduIFMgPSBWLCBidXQgdGhpcyBtYXkgdmlvbGF0ZQorICogdGhlIG9yZGVyaW5nIGluIEVSLiBTbywgaWYgd2UgaGF2ZSBncm91cHMgaW4gRVIsIHNldCBTIHRvCisgKiB0aGUgRl9qIG9mIHRoZSBmaXJzdCBncm91cCBqIHdoaWNoIHdvdWxkIGJlIGJsb2NraW5nIHVzLgorICogV2UgYXJlIGd1YXJhbnRlZWQgbm90IHRvIG1vdmUgUyBiYWNrd2FyZCBiZWNhdXNlCisgKiBvdGhlcndpc2Ugb3VyIGdyb3VwIGkgd291bGQgc3RpbGwgYmUgYmxvY2tlZC4KKyAqLworc3RhdGljIHZvaWQgcWZxX3VwZGF0ZV9zdGFydChzdHJ1Y3QgcWZxX3NjaGVkICpxLCBzdHJ1Y3QgcWZxX2NsYXNzICpjbCkKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisJdWludDMyX3QgbGltaXQsIHJvdW5kZWRGOworCWludCBzbG90X3NoaWZ0ID0gY2wtPmdycC0+c2xvdF9zaGlmdDsKKworCXJvdW5kZWRGID0gcWZxX3JvdW5kX2Rvd24oY2wtPkYsIHNsb3Rfc2hpZnQpOworCWxpbWl0ID0gcWZxX3JvdW5kX2Rvd24ocS0+Viwgc2xvdF9zaGlmdCkgKyAoMVVMIDw8IHNsb3Rfc2hpZnQpOworCisJaWYgKCFxZnFfZ3QoY2wtPkYsIHEtPlYpIHx8IHFmcV9ndChyb3VuZGVkRiwgbGltaXQpKSB7CisJCS8qIHRpbWVzdGFtcCB3YXMgc3RhbGUgKi8KKwkJbWFzayA9IG1hc2tfZnJvbShxLT5iaXRtYXBzW0VSXSwgY2wtPmdycC0+aW5kZXgpOworCQlpZiAobWFzaykgeworCQkJc3RydWN0IHFmcV9ncm91cCAqbmV4dCA9IHFmcV9mZnMocSwgbWFzayk7CisJCQlpZiAocWZxX2d0KHJvdW5kZWRGLCBuZXh0LT5GKSkgeworCQkJCWNsLT5TID0gbmV4dC0+RjsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKwkJY2wtPlMgPSBxLT5WOworCX0gZWxzZSAgLyogdGltZXN0YW1wIGlzIG5vdCBzdGFsZSAqLworCQljbC0+UyA9IGNsLT5GOworfQorCitzdGF0aWMgaW50IHFmcV9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoKQoreworCXN0cnVjdCBxZnFfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7CisJc3RydWN0IHFmcV9ncm91cCAqZ3JwOworCXN0cnVjdCBxZnFfY2xhc3MgKmNsOworCWludCBlcnI7CisJdTY0IHJvdW5kZWRTOworCWludCBzOworCisJY2wgPSBxZnFfY2xhc3NpZnkoc2tiLCBzY2gsICZlcnIpOworCWlmIChjbCA9PSBOVUxMKSB7CisJCWlmIChlcnIgJiBfX05FVF9YTUlUX0JZUEFTUykKKwkJCXNjaC0+cXN0YXRzLmRyb3BzKys7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm4gZXJyOworCX0KKwlwcl9kZWJ1ZygicWZxX2VucXVldWU6IGNsID0gJXhcbiIsIGNsLT5jb21tb24uY2xhc3NpZCk7CisKKwllcnIgPSBxZGlzY19lbnF1ZXVlKHNrYiwgY2wtPnFkaXNjKTsKKwlpZiAodW5saWtlbHkoZXJyICE9IE5FVF9YTUlUX1NVQ0NFU1MpKSB7CisJCXByX2RlYnVnKCJxZnFfZW5xdWV1ZTogZW5xdWV1ZSBmYWlsZWQgJWRcbiIsIGVycik7CisJCWlmIChuZXRfeG1pdF9kcm9wX2NvdW50KGVycikpIHsKKwkJCWNsLT5xc3RhdHMuZHJvcHMrKzsKKwkJCXNjaC0+cXN0YXRzLmRyb3BzKys7CisJCX0KKwkJcmV0dXJuIGVycjsKKwl9CisKKwlic3RhdHNfdXBkYXRlKCZjbC0+YnN0YXRzLCBza2IpOworCSsrc2NoLT5xLnFsZW47CisKKwkvKiBJZiB0aGUgbmV3IHNrYiBpcyBub3QgdGhlIGhlYWQgb2YgcXVldWUsIHRoZW4gZG9uZSBoZXJlLiAqLworCWlmIChjbC0+cWRpc2MtPnEucWxlbiAhPSAxKQorCQlyZXR1cm4gZXJyOworCisJLyogSWYgcmVhY2ggdGhpcyBwb2ludCwgcXVldWUgcSB3YXMgaWRsZSAqLworCWdycCA9IGNsLT5ncnA7CisJcWZxX3VwZGF0ZV9zdGFydChxLCBjbCk7CisKKwkvKiBjb21wdXRlIG5ldyBmaW5pc2ggdGltZSBhbmQgcm91bmRlZCBzdGFydC4gKi8KKwljbC0+RiA9IGNsLT5TICsgKHU2NClxZGlzY19wa3RfbGVuKHNrYikgKiBjbC0+aW52X3c7CisJcm91bmRlZFMgPSBxZnFfcm91bmRfZG93bihjbC0+UywgZ3JwLT5zbG90X3NoaWZ0KTsKKworCS8qCisJICogaW5zZXJ0IGNsIGluIHRoZSBjb3JyZWN0IGJ1Y2tldC4KKwkgKiBJZiBjbC0+UyA+PSBncnAtPlMgd2UgZG9uJ3QgbmVlZCB0byBhZGp1c3QgdGhlCisJICogYnVja2V0IGxpc3QgYW5kIHNpbXBseSBnbyB0byB0aGUgaW5zZXJ0aW9uIHBoYXNlLgorCSAqIE90aGVyd2lzZSBncnAtPlMgaXMgZGVjcmVhc2luZywgd2UgbXVzdCBtYWtlIHJvb20KKwkgKiBpbiB0aGUgYnVja2V0IGxpc3QsIGFuZCBhbHNvIHJlY29tcHV0ZSB0aGUgZ3JvdXAgc3RhdGUuCisJICogRmluYWxseSwgaWYgdGhlcmUgd2VyZSBubyBmbG93cyBpbiB0aGlzIGdyb3VwIGFuZCBub2JvZHkKKwkgKiB3YXMgaW4gRVIgbWFrZSBzdXJlIHRvIGFkanVzdCBWLgorCSAqLworCWlmIChncnAtPmZ1bGxfc2xvdHMpIHsKKwkJaWYgKCFxZnFfZ3QoZ3JwLT5TLCBjbC0+UykpCisJCQlnb3RvIHNraXBfdXBkYXRlOworCisJCS8qIGNyZWF0ZSBhIHNsb3QgZm9yIHRoaXMgY2wtPlMgKi8KKwkJcWZxX3Nsb3Rfcm90YXRlKGdycCwgcm91bmRlZFMpOworCQkvKiBncm91cCB3YXMgc3VyZWx5IGluZWxpZ2libGUsIHJlbW92ZSAqLworCQlfX2NsZWFyX2JpdChncnAtPmluZGV4LCAmcS0+Yml0bWFwc1tJUl0pOworCQlfX2NsZWFyX2JpdChncnAtPmluZGV4LCAmcS0+Yml0bWFwc1tJQl0pOworCX0gZWxzZSBpZiAoIXEtPmJpdG1hcHNbRVJdICYmIHFmcV9ndChyb3VuZGVkUywgcS0+VikpCisJCXEtPlYgPSByb3VuZGVkUzsKKworCWdycC0+UyA9IHJvdW5kZWRTOworCWdycC0+RiA9IHJvdW5kZWRTICsgKDJVTEwgPDwgZ3JwLT5zbG90X3NoaWZ0KTsKKwlzID0gcWZxX2NhbGNfc3RhdGUocSwgZ3JwKTsKKwlfX3NldF9iaXQoZ3JwLT5pbmRleCwgJnEtPmJpdG1hcHNbc10pOworCisJcHJfZGVidWcoInFmcSBlbnF1ZXVlOiBuZXcgc3RhdGUgJWQgJSNseCBTICVsbGQgRiAlbGxkIFYgJWxsZFxuIiwKKwkJIHMsIHEtPmJpdG1hcHNbc10sCisJCSAodW5zaWduZWQgbG9uZyBsb25nKSBjbC0+UywKKwkJICh1bnNpZ25lZCBsb25nIGxvbmcpIGNsLT5GLAorCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgcS0+Vik7CisKK3NraXBfdXBkYXRlOgorCXFmcV9zbG90X2luc2VydChncnAsIGNsLCByb3VuZGVkUyk7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyB2b2lkIHFmcV9zbG90X3JlbW92ZShzdHJ1Y3QgcWZxX3NjaGVkICpxLCBzdHJ1Y3QgcWZxX2dyb3VwICpncnAsCisJCQkgICAgc3RydWN0IHFmcV9jbGFzcyAqY2wpCit7CisJdW5zaWduZWQgaW50IGksIG9mZnNldDsKKwl1NjQgcm91bmRlZFM7CisKKwlyb3VuZGVkUyA9IHFmcV9yb3VuZF9kb3duKGNsLT5TLCBncnAtPnNsb3Rfc2hpZnQpOworCW9mZnNldCA9IChyb3VuZGVkUyAtIGdycC0+UykgPj4gZ3JwLT5zbG90X3NoaWZ0OworCWkgPSAoZ3JwLT5mcm9udCArIG9mZnNldCkgJSBRRlFfTUFYX1NMT1RTOworCisJaGxpc3RfZGVsKCZjbC0+bmV4dCk7CisJaWYgKGhsaXN0X2VtcHR5KCZncnAtPnNsb3RzW2ldKSkKKwkJX19jbGVhcl9iaXQob2Zmc2V0LCAmZ3JwLT5mdWxsX3Nsb3RzKTsKK30KKworLyoKKyAqIGNhbGxlZCB0byBmb3JjaWJseSBkZXN0cm95IGEgcXVldWUuCisgKiBJZiB0aGUgcXVldWUgaXMgbm90IGluIHRoZSBmcm9udCBidWNrZXQsIG9yIGlmIGl0IGhhcworICogb3RoZXIgcXVldWVzIGluIHRoZSBmcm9udCBidWNrZXQsIHdlIGNhbiBzaW1wbHkgcmVtb3ZlCisgKiB0aGUgcXVldWUgd2l0aCBubyBvdGhlciBzaWRlIGVmZmVjdHMuCisgKiBPdGhlcndpc2Ugd2UgbXVzdCBwcm9wYWdhdGUgdGhlIGV2ZW50IHVwLgorICovCitzdGF0aWMgdm9pZCBxZnFfZGVhY3RpdmF0ZV9jbGFzcyhzdHJ1Y3QgcWZxX3NjaGVkICpxLCBzdHJ1Y3QgcWZxX2NsYXNzICpjbCkKK3sKKwlzdHJ1Y3QgcWZxX2dyb3VwICpncnAgPSBjbC0+Z3JwOworCXVuc2lnbmVkIGxvbmcgbWFzazsKKwl1NjQgcm91bmRlZFM7CisJaW50IHM7CisKKwljbC0+RiA9IGNsLT5TOworCXFmcV9zbG90X3JlbW92ZShxLCBncnAsIGNsKTsKKworCWlmICghZ3JwLT5mdWxsX3Nsb3RzKSB7CisJCV9fY2xlYXJfYml0KGdycC0+aW5kZXgsICZxLT5iaXRtYXBzW0lSXSk7CisJCV9fY2xlYXJfYml0KGdycC0+aW5kZXgsICZxLT5iaXRtYXBzW0VCXSk7CisJCV9fY2xlYXJfYml0KGdycC0+aW5kZXgsICZxLT5iaXRtYXBzW0lCXSk7CisKKwkJaWYgKHRlc3RfYml0KGdycC0+aW5kZXgsICZxLT5iaXRtYXBzW0VSXSkgJiYKKwkJICAgICEocS0+Yml0bWFwc1tFUl0gJiB+KCgxVUwgPDwgZ3JwLT5pbmRleCkgLSAxKSkpIHsKKwkJCW1hc2sgPSBxLT5iaXRtYXBzW0VSXSAmICgoMVVMIDw8IGdycC0+aW5kZXgpIC0gMSk7CisJCQlpZiAobWFzaykKKwkJCQltYXNrID0gfigoMVVMIDw8IF9fZmxzKG1hc2spKSAtIDEpOworCQkJZWxzZQorCQkJCW1hc2sgPSB+MFVMOworCQkJcWZxX21vdmVfZ3JvdXBzKHEsIG1hc2ssIEVCLCBFUik7CisJCQlxZnFfbW92ZV9ncm91cHMocSwgbWFzaywgSUIsIElSKTsKKwkJfQorCQlfX2NsZWFyX2JpdChncnAtPmluZGV4LCAmcS0+Yml0bWFwc1tFUl0pOworCX0gZWxzZSBpZiAoaGxpc3RfZW1wdHkoJmdycC0+c2xvdHNbZ3JwLT5mcm9udF0pKSB7CisJCWNsID0gcWZxX3Nsb3Rfc2NhbihncnApOworCQlyb3VuZGVkUyA9IHFmcV9yb3VuZF9kb3duKGNsLT5TLCBncnAtPnNsb3Rfc2hpZnQpOworCQlpZiAoZ3JwLT5TICE9IHJvdW5kZWRTKSB7CisJCQlfX2NsZWFyX2JpdChncnAtPmluZGV4LCAmcS0+Yml0bWFwc1tFUl0pOworCQkJX19jbGVhcl9iaXQoZ3JwLT5pbmRleCwgJnEtPmJpdG1hcHNbSVJdKTsKKwkJCV9fY2xlYXJfYml0KGdycC0+aW5kZXgsICZxLT5iaXRtYXBzW0VCXSk7CisJCQlfX2NsZWFyX2JpdChncnAtPmluZGV4LCAmcS0+Yml0bWFwc1tJQl0pOworCQkJZ3JwLT5TID0gcm91bmRlZFM7CisJCQlncnAtPkYgPSByb3VuZGVkUyArICgyVUxMIDw8IGdycC0+c2xvdF9zaGlmdCk7CisJCQlzID0gcWZxX2NhbGNfc3RhdGUocSwgZ3JwKTsKKwkJCV9fc2V0X2JpdChncnAtPmluZGV4LCAmcS0+Yml0bWFwc1tzXSk7CisJCX0KKwl9CisKKwlxZnFfdXBkYXRlX2VsaWdpYmxlKHEsIHEtPlYpOworfQorCitzdGF0aWMgdm9pZCBxZnFfcWxlbl9ub3RpZnkoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBxZnFfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7CisJc3RydWN0IHFmcV9jbGFzcyAqY2wgPSAoc3RydWN0IHFmcV9jbGFzcyAqKWFyZzsKKworCWlmIChjbC0+cWRpc2MtPnEucWxlbiA9PSAwKQorCQlxZnFfZGVhY3RpdmF0ZV9jbGFzcyhxLCBjbCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcWZxX2Ryb3Aoc3RydWN0IFFkaXNjICpzY2gpCit7CisJc3RydWN0IHFmcV9zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKKwlzdHJ1Y3QgcWZxX2dyb3VwICpncnA7CisJdW5zaWduZWQgaW50IGksIGosIGxlbjsKKworCWZvciAoaSA9IDA7IGkgPD0gUUZRX01BWF9JTkRFWDsgaSsrKSB7CisJCWdycCA9ICZxLT5ncm91cHNbaV07CisJCWZvciAoaiA9IDA7IGogPCBRRlFfTUFYX1NMT1RTOyBqKyspIHsKKwkJCXN0cnVjdCBxZnFfY2xhc3MgKmNsOworCQkJc3RydWN0IGhsaXN0X25vZGUgKm47CisKKwkJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsLCBuLCAmZ3JwLT5zbG90c1tqXSwgbmV4dCkgeworCisJCQkJaWYgKCFjbC0+cWRpc2MtPm9wcy0+ZHJvcCkKKwkJCQkJY29udGludWU7CisKKwkJCQlsZW4gPSBjbC0+cWRpc2MtPm9wcy0+ZHJvcChjbC0+cWRpc2MpOworCQkJCWlmIChsZW4gPiAwKSB7CisJCQkJCXNjaC0+cS5xbGVuLS07CisJCQkJCWlmICghY2wtPnFkaXNjLT5xLnFsZW4pCisJCQkJCQlxZnFfZGVhY3RpdmF0ZV9jbGFzcyhxLCBjbCk7CisKKwkJCQkJcmV0dXJuIGxlbjsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZnFfaW5pdF9xZGlzYyhzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0KQoreworCXN0cnVjdCBxZnFfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7CisJc3RydWN0IHFmcV9ncm91cCAqZ3JwOworCWludCBpLCBqLCBlcnI7CisKKwllcnIgPSBxZGlzY19jbGFzc19oYXNoX2luaXQoJnEtPmNsaGFzaCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlmb3IgKGkgPSAwOyBpIDw9IFFGUV9NQVhfSU5ERVg7IGkrKykgeworCQlncnAgPSAmcS0+Z3JvdXBzW2ldOworCQlncnAtPmluZGV4ID0gaTsKKwkJZ3JwLT5zbG90X3NoaWZ0ID0gUUZRX01UVV9TSElGVCArIEZSQUNfQklUUworCQkJCSAgIC0gKFFGUV9NQVhfSU5ERVggLSBpKTsKKwkJZm9yIChqID0gMDsgaiA8IFFGUV9NQVhfU0xPVFM7IGorKykKKwkJCUlOSVRfSExJU1RfSEVBRCgmZ3JwLT5zbG90c1tqXSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHFmcV9yZXNldF9xZGlzYyhzdHJ1Y3QgUWRpc2MgKnNjaCkKK3sKKwlzdHJ1Y3QgcWZxX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpOworCXN0cnVjdCBxZnFfZ3JvdXAgKmdycDsKKwlzdHJ1Y3QgcWZxX2NsYXNzICpjbDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbiwgKnRtcDsKKwl1bnNpZ25lZCBpbnQgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPD0gUUZRX01BWF9JTkRFWDsgaSsrKSB7CisJCWdycCA9ICZxLT5ncm91cHNbaV07CisJCWZvciAoaiA9IDA7IGogPCBRRlFfTUFYX1NMT1RTOyBqKyspIHsKKwkJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2wsIG4sIHRtcCwKKwkJCQkJCSAgJmdycC0+c2xvdHNbal0sIG5leHQpIHsKKwkJCQlxZnFfZGVhY3RpdmF0ZV9jbGFzcyhxLCBjbCk7CisJCQl9CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcS0+Y2xoYXNoLmhhc2hzaXplOyBpKyspIHsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnkoY2wsIG4sICZxLT5jbGhhc2guaGFzaFtpXSwgY29tbW9uLmhub2RlKQorCQkJcWRpc2NfcmVzZXQoY2wtPnFkaXNjKTsKKwl9CisJc2NoLT5xLnFsZW4gPSAwOworfQorCitzdGF0aWMgdm9pZCBxZnFfZGVzdHJveV9xZGlzYyhzdHJ1Y3QgUWRpc2MgKnNjaCkKK3sKKwlzdHJ1Y3QgcWZxX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpOworCXN0cnVjdCBxZnFfY2xhc3MgKmNsOworCXN0cnVjdCBobGlzdF9ub2RlICpuLCAqbmV4dDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXRjZl9kZXN0cm95X2NoYWluKCZxLT5maWx0ZXJfbGlzdCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcS0+Y2xoYXNoLmhhc2hzaXplOyBpKyspIHsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjbCwgbiwgbmV4dCwgJnEtPmNsaGFzaC5oYXNoW2ldLAorCQkJCQkgIGNvbW1vbi5obm9kZSkgeworCQkJcWZxX2Rlc3Ryb3lfY2xhc3Moc2NoLCBjbCk7CisJCX0KKwl9CisJcWRpc2NfY2xhc3NfaGFzaF9kZXN0cm95KCZxLT5jbGhhc2gpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IFFkaXNjX2NsYXNzX29wcyBxZnFfY2xhc3Nfb3BzID0geworCS5jaGFuZ2UJCT0gcWZxX2NoYW5nZV9jbGFzcywKKwkuZGVsZXRlCQk9IHFmcV9kZWxldGVfY2xhc3MsCisJLmdldAkJPSBxZnFfZ2V0X2NsYXNzLAorCS5wdXQJCT0gcWZxX3B1dF9jbGFzcywKKwkudGNmX2NoYWluCT0gcWZxX3RjZl9jaGFpbiwKKwkuYmluZF90Y2YJPSBxZnFfYmluZF90Y2YsCisJLnVuYmluZF90Y2YJPSBxZnFfdW5iaW5kX3RjZiwKKwkuZ3JhZnQJCT0gcWZxX2dyYWZ0X2NsYXNzLAorCS5sZWFmCQk9IHFmcV9jbGFzc19sZWFmLAorCS5xbGVuX25vdGlmeQk9IHFmcV9xbGVuX25vdGlmeSwKKwkuZHVtcAkJPSBxZnFfZHVtcF9jbGFzcywKKwkuZHVtcF9zdGF0cwk9IHFmcV9kdW1wX2NsYXNzX3N0YXRzLAorCS53YWxrCQk9IHFmcV93YWxrLAorfTsKKworc3RhdGljIHN0cnVjdCBRZGlzY19vcHMgcWZxX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0geworCS5jbF9vcHMJCT0gJnFmcV9jbGFzc19vcHMsCisJLmlkCQk9ICJxZnEiLAorCS5wcml2X3NpemUJPSBzaXplb2Yoc3RydWN0IHFmcV9zY2hlZCksCisJLmVucXVldWUJPSBxZnFfZW5xdWV1ZSwKKwkuZGVxdWV1ZQk9IHFmcV9kZXF1ZXVlLAorCS5wZWVrCQk9IHFkaXNjX3BlZWtfZGVxdWV1ZWQsCisJLmRyb3AJCT0gcWZxX2Ryb3AsCisJLmluaXQJCT0gcWZxX2luaXRfcWRpc2MsCisJLnJlc2V0CQk9IHFmcV9yZXNldF9xZGlzYywKKwkuZGVzdHJveQk9IHFmcV9kZXN0cm95X3FkaXNjLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHFmcV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHJlZ2lzdGVyX3FkaXNjKCZxZnFfcWRpc2Nfb3BzKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHFmcV9leGl0KHZvaWQpCit7CisJdW5yZWdpc3Rlcl9xZGlzYygmcWZxX3FkaXNjX29wcyk7Cit9CisKK21vZHVsZV9pbml0KHFmcV9pbml0KTsKK21vZHVsZV9leGl0KHFmcV9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfc2ZxLmMgYi9uZXQvc2NoZWQvc2NoX3NmcS5jCmluZGV4IGMyZTYyOGQuLjdlZjg3ZjkgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfc2ZxLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9zZnEuYwpAQCAtMTY5LDcgKzE2OSw3IEBACiAJfQogCWNhc2UgaHRvbnMoRVRIX1BfSVBWNik6CiAJewotCQlzdHJ1Y3QgaXB2NmhkciAqaXBoOworCQljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXBoOwogCQlpbnQgcG9mZjsKIAogCQlpZiAoIXBza2JfbmV0d29ya19tYXlfcHVsbChza2IsIHNpemVvZigqaXBoKSkpCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9iaW5kX2FkZHIuYyBiL25ldC9zY3RwL2JpbmRfYWRkci5jCmluZGV4IDNjMDZjODcuLjgzZTMwMTEgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2JpbmRfYWRkci5jCisrKyBiL25ldC9zY3RwL2JpbmRfYWRkci5jCkBAIC0xNDAsMTQgKzE0MCwxMiBAQAogLyogRGlzcG9zZSBvZiB0aGUgYWRkcmVzcyBsaXN0LiAqLwogc3RhdGljIHZvaWQgc2N0cF9iaW5kX2FkZHJfY2xlYW4oc3RydWN0IHNjdHBfYmluZF9hZGRyICpicCkKIHsKLQlzdHJ1Y3Qgc2N0cF9zb2NrYWRkcl9lbnRyeSAqYWRkcjsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICp0ZW1wOworCXN0cnVjdCBzY3RwX3NvY2thZGRyX2VudHJ5ICphZGRyLCAqdGVtcDsKIAogCS8qIEVtcHR5IHRoZSBiaW5kIGFkZHJlc3MgbGlzdC4gKi8KLQlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0ZW1wLCAmYnAtPmFkZHJlc3NfbGlzdCkgewotCQlhZGRyID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzY3RwX3NvY2thZGRyX2VudHJ5LCBsaXN0KTsKLQkJbGlzdF9kZWwocG9zKTsKLQkJa2ZyZWUoYWRkcik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGFkZHIsIHRlbXAsICZicC0+YWRkcmVzc19saXN0LCBsaXN0KSB7CisJCWxpc3RfZGVsX3JjdSgmYWRkci0+bGlzdCk7CisJCWtmcmVlX3JjdShhZGRyLCByY3UpOwogCQlTQ1RQX0RCR19PQkpDTlRfREVDKGFkZHIpOwogCX0KIH0KZGlmZiAtLWdpdCBhL25ldC9zY3RwL2RlYnVnLmMgYi9uZXQvc2N0cC9kZWJ1Zy5jCmluZGV4IGJmMjRmYTYuLmVjOTk3Y2YgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2RlYnVnLmMKKysrIGIvbmV0L3NjdHAvZGVidWcuYwpAQCAtOTgsNyArOTgsNiBAQAogCiAvKiBUaGVzZSBhcmUgcHJpbnRhYmxlIGZvcm1zIG9mIHRoZSBzdGF0ZXMuICAqLwogY29uc3QgY2hhciAqY29uc3Qgc2N0cF9zdGF0ZV90YmxbU0NUUF9TVEFURV9OVU1fU1RBVEVTXSA9IHsKLQkiU1RBVEVfRU1QVFkiLAogCSJTVEFURV9DTE9TRUQiLAogCSJTVEFURV9DT09LSUVfV0FJVCIsCiAJIlNUQVRFX0NPT0tJRV9FQ0hPRUQiLApkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvZW5kcG9pbnRvbGEuYyBiL25ldC9zY3RwL2VuZHBvaW50b2xhLmMKaW5kZXggZTEwYWNjMC4uYzhjYzI0ZSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvZW5kcG9pbnRvbGEuYworKysgYi9uZXQvc2N0cC9lbmRwb2ludG9sYS5jCkBAIC0zMjUsNiArMzI1LDcgQEAKIAlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKip0cmFuc3BvcnQpCiB7CiAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MgPSBOVUxMOworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICp0bXA7CiAJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0ID0gTlVMTDsKIAlzdHJ1Y3Qgc2N0cF9oYXNoYnVja2V0ICpoZWFkOwogCXN0cnVjdCBzY3RwX2VwX2NvbW1vbiAqZXBiOwpAQCAtMzMzLDI1ICszMzQsMzIgQEAKIAlpbnQgcnBvcnQ7CiAKIAkqdHJhbnNwb3J0ID0gTlVMTDsKKworCS8qIElmIHRoZSBsb2NhbCBwb3J0IGlzIG5vdCBzZXQsIHRoZXJlIGNhbid0IGJlIGFueSBhc3NvY2lhdGlvbnMKKwkgKiBvbiB0aGlzIGVuZHBvaW50LgorCSAqLworCWlmICghZXAtPmJhc2UuYmluZF9hZGRyLnBvcnQpCisJCWdvdG8gb3V0OworCiAJcnBvcnQgPSBudG9ocyhwYWRkci0+djQuc2luX3BvcnQpOwogCiAJaGFzaCA9IHNjdHBfYXNzb2NfaGFzaGZuKGVwLT5iYXNlLmJpbmRfYWRkci5wb3J0LCBycG9ydCk7CiAJaGVhZCA9ICZzY3RwX2Fzc29jX2hhc2h0YWJsZVtoYXNoXTsKIAlyZWFkX2xvY2soJmhlYWQtPmxvY2spOwogCXNjdHBfZm9yX2VhY2hfaGVudHJ5KGVwYiwgbm9kZSwgJmhlYWQtPmNoYWluKSB7Ci0JCWFzb2MgPSBzY3RwX2Fzc29jKGVwYik7Ci0JCWlmIChhc29jLT5lcCAhPSBlcCB8fCBycG9ydCAhPSBhc29jLT5wZWVyLnBvcnQpCi0JCQlnb3RvIG5leHQ7CisJCXRtcCA9IHNjdHBfYXNzb2MoZXBiKTsKKwkJaWYgKHRtcC0+ZXAgIT0gZXAgfHwgcnBvcnQgIT0gdG1wLT5wZWVyLnBvcnQpCisJCQljb250aW51ZTsKIAotCQl0ID0gc2N0cF9hc3NvY19sb29rdXBfcGFkZHIoYXNvYywgcGFkZHIpOworCQl0ID0gc2N0cF9hc3NvY19sb29rdXBfcGFkZHIodG1wLCBwYWRkcik7CiAJCWlmICh0KSB7CisJCQlhc29jID0gdG1wOwogCQkJKnRyYW5zcG9ydCA9IHQ7CiAJCQlicmVhazsKIAkJfQotbmV4dDoKLQkJYXNvYyA9IE5VTEw7CiAJfQogCXJlYWRfdW5sb2NrKCZoZWFkLT5sb2NrKTsKK291dDoKIAlyZXR1cm4gYXNvYzsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvaW5wdXQuYyBiL25ldC9zY3RwL2lucHV0LmMKaW5kZXggNTQzNmM2OS4uNzQxZWQxNiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvaW5wdXQuYworKysgYi9uZXQvc2N0cC9pbnB1dC5jCkBAIC01NjUsNyArNTY1LDcgQEAKICAqLwogdm9pZCBzY3RwX3Y0X2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3UzMiBpbmZvKQogewotCXN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYi0+ZGF0YTsKKwljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCA9IChjb25zdCBzdHJ1Y3QgaXBoZHIgKilza2ItPmRhdGE7CiAJY29uc3QgaW50IGlobGVuID0gaXBoLT5paGwgKiA0OwogCWNvbnN0IGludCB0eXBlID0gaWNtcF9oZHIoc2tiKS0+dHlwZTsKIAljb25zdCBpbnQgY29kZSA9IGljbXBfaGRyKHNrYiktPmNvZGU7CkBAIC02NjEsNyArNjYxLDYgQEAKIHsKIAlzY3RwX2NodW5raGRyX3QgKmNoOwogCV9fdTggKmNoX2VuZDsKLQlzY3RwX2Vycmhkcl90ICplcnI7CiAKIAljaCA9IChzY3RwX2NodW5raGRyX3QgKikgc2tiLT5kYXRhOwogCkBAIC02OTcsMjAgKzY5Niw2IEBACiAJCWlmIChTQ1RQX0NJRF9JTklUID09IGNoLT50eXBlICYmICh2b2lkICopY2ggIT0gc2tiLT5kYXRhKQogCQkJZ290byBkaXNjYXJkOwogCi0JCS8qIFJGQyA4LjQsIDcpIElmIHRoZSBwYWNrZXQgY29udGFpbnMgYSAiU3RhbGUgY29va2llIiBFUlJPUgotCQkgKiBvciBhIENPT0tJRSBBQ0sgdGhlIFNDVFAgUGFja2V0IHNob3VsZCBiZSBzaWxlbnRseQotCQkgKiBkaXNjYXJkZWQuCi0JCSAqLwotCQlpZiAoU0NUUF9DSURfQ09PS0lFX0FDSyA9PSBjaC0+dHlwZSkKLQkJCWdvdG8gZGlzY2FyZDsKLQotCQlpZiAoU0NUUF9DSURfRVJST1IgPT0gY2gtPnR5cGUpIHsKLQkJCXNjdHBfd2Fsa19lcnJvcnMoZXJyLCBjaCkgewotCQkJCWlmIChTQ1RQX0VSUk9SX1NUQUxFX0NPT0tJRSA9PSBlcnItPmNhdXNlKQotCQkJCQlnb3RvIGRpc2NhcmQ7Ci0JCQl9Ci0JCX0KLQogCQljaCA9IChzY3RwX2NodW5raGRyX3QgKikgY2hfZW5kOwogCX0gd2hpbGUgKGNoX2VuZCA8IHNrYl90YWlsX3BvaW50ZXIoc2tiKSk7CiAKQEAgLTEwMTcsNyArMTAwMiw3IEBACiAJLyogU2tpcCBvdmVyIHRoZSBBRERJUCBoZWFkZXIgYW5kIGZpbmQgdGhlIEFkZHJlc3MgcGFyYW1ldGVyICovCiAJcGFyYW0gPSAodW5pb24gc2N0cF9hZGRyX3BhcmFtICopKGFzY29uZiArIDEpOwogCi0JYWYgPSBzY3RwX2dldF9hZl9zcGVjaWZpYyhwYXJhbV90eXBlMmFmKHBhcmFtLT52NC5wYXJhbV9oZHIudHlwZSkpOworCWFmID0gc2N0cF9nZXRfYWZfc3BlY2lmaWMocGFyYW1fdHlwZTJhZihwYXJhbS0+cC50eXBlKSk7CiAJaWYgKHVubGlrZWx5KCFhZikpCiAJCXJldHVybiBOVUxMOwogCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9pcHY2LmMgYi9uZXQvc2N0cC9pcHY2LmMKaW5kZXggMTg1ZmUwNS4uMGJiMGQ3YyAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvaXB2Ni5jCisrKyBiL25ldC9zY3RwL2lwdjYuYwpAQCAtODAsNiArODAsMTMgQEAKIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKK3N0YXRpYyBpbmxpbmUgaW50IHNjdHBfdjZfYWRkcl9tYXRjaF9sZW4odW5pb24gc2N0cF9hZGRyICpzMSwKKwkJCQkJIHVuaW9uIHNjdHBfYWRkciAqczIpOworc3RhdGljIHZvaWQgc2N0cF92Nl90b19hZGRyKHVuaW9uIHNjdHBfYWRkciAqYWRkciwgc3RydWN0IGluNl9hZGRyICpzYWRkciwKKwkJCSAgICAgIF9fYmUxNiBwb3J0KTsKK3N0YXRpYyBpbnQgc2N0cF92Nl9jbXBfYWRkcihjb25zdCB1bmlvbiBzY3RwX2FkZHIgKmFkZHIxLAorCQkJICAgIGNvbnN0IHVuaW9uIHNjdHBfYWRkciAqYWRkcjIpOworCiAvKiBFdmVudCBoYW5kbGVyIGZvciBpbmV0NiBhZGRyZXNzIGFkZGl0aW9uL2RlbGV0aW9uIGV2ZW50cy4KICAqIFRoZSBzY3RwX2xvY2FsX2FkZHJfbGlzdCBuZWVkcyB0byBiZSBwcm90b2N0ZWQgYnkgYSBzcGluIGxvY2sgc2luY2UKICAqIG11bHRpcGxlIG5vdGlmaWVycyAoc2F5IElQdjQgYW5kIElQdjYpIG1heSBiZSBydW5uaW5nIGF0IHRoZSBzYW1lCkBAIC0yNDAsMzcgKzI0NywxMDcgQEAKIC8qIFJldHVybnMgdGhlIGRzdCBjYWNoZSBlbnRyeSBmb3IgdGhlIGdpdmVuIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gaXAKICAqIGFkZHJlc3Nlcy4KICAqLwotc3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKnNjdHBfdjZfZ2V0X2RzdChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLQkJCQkJIHVuaW9uIHNjdHBfYWRkciAqZGFkZHIsCi0JCQkJCSB1bmlvbiBzY3RwX2FkZHIgKnNhZGRyKQorc3RhdGljIHZvaWQgc2N0cF92Nl9nZXRfZHN0KHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdCwgdW5pb24gc2N0cF9hZGRyICpzYWRkciwKKwkJCSAgICBzdHJ1Y3QgZmxvd2kgKmZsLCBzdHJ1Y3Qgc29jayAqc2spCiB7Ci0Jc3RydWN0IGRzdF9lbnRyeSAqZHN0OwotCXN0cnVjdCBmbG93aTYgZmw2OworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jID0gdC0+YXNvYzsKKwlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBOVUxMOworCXN0cnVjdCBmbG93aTYgKmZsNiA9ICZmbC0+dS5pcDY7CisJc3RydWN0IHNjdHBfYmluZF9hZGRyICpicDsKKwlzdHJ1Y3Qgc2N0cF9zb2NrYWRkcl9lbnRyeSAqbGFkZHI7CisJdW5pb24gc2N0cF9hZGRyICpiYWRkciA9IE5VTEw7CisJdW5pb24gc2N0cF9hZGRyICpkYWRkciA9ICZ0LT5pcGFkZHI7CisJdW5pb24gc2N0cF9hZGRyIGRzdF9zYWRkcjsKKwlfX3U4IG1hdGNobGVuID0gMDsKKwlfX3U4IGJtYXRjaGxlbjsKKwlzY3RwX3Njb3BlX3Qgc2NvcGU7CiAKLQltZW1zZXQoJmZsNiwgMCwgc2l6ZW9mKGZsNikpOwotCWlwdjZfYWRkcl9jb3B5KCZmbDYuZGFkZHIsICZkYWRkci0+djYuc2luNl9hZGRyKTsKKwltZW1zZXQoZmw2LCAwLCBzaXplb2Yoc3RydWN0IGZsb3dpNikpOworCWlwdjZfYWRkcl9jb3B5KCZmbDYtPmRhZGRyLCAmZGFkZHItPnY2LnNpbjZfYWRkcik7CisJZmw2LT5mbDZfZHBvcnQgPSBkYWRkci0+djYuc2luNl9wb3J0OworCWZsNi0+Zmxvd2k2X3Byb3RvID0gSVBQUk9UT19TQ1RQOwogCWlmIChpcHY2X2FkZHJfdHlwZSgmZGFkZHItPnY2LnNpbjZfYWRkcikgJiBJUFY2X0FERFJfTElOS0xPQ0FMKQotCQlmbDYuZmxvd2k2X29pZiA9IGRhZGRyLT52Ni5zaW42X3Njb3BlX2lkOworCQlmbDYtPmZsb3dpNl9vaWYgPSBkYWRkci0+djYuc2luNl9zY29wZV9pZDsKIAorCVNDVFBfREVCVUdfUFJJTlRLKCIlczogRFNUPSVwSTYgIiwgX19mdW5jX18sICZmbDYtPmRhZGRyKTsKIAotCVNDVFBfREVCVUdfUFJJTlRLKCIlczogRFNUPSVwSTYgIiwgX19mdW5jX18sICZmbDYuZGFkZHIpOworCWlmIChhc29jKQorCQlmbDYtPmZsNl9zcG9ydCA9IGh0b25zKGFzb2MtPmJhc2UuYmluZF9hZGRyLnBvcnQpOwogCiAJaWYgKHNhZGRyKSB7Ci0JCWlwdjZfYWRkcl9jb3B5KCZmbDYuc2FkZHIsICZzYWRkci0+djYuc2luNl9hZGRyKTsKLQkJU0NUUF9ERUJVR19QUklOVEsoIlNSQz0lcEk2IC0gIiwgJmZsNi5zYWRkcik7CisJCWlwdjZfYWRkcl9jb3B5KCZmbDYtPnNhZGRyLCAmc2FkZHItPnY2LnNpbjZfYWRkcik7CisJCWZsNi0+Zmw2X3Nwb3J0ID0gc2FkZHItPnY2LnNpbjZfcG9ydDsKKwkJU0NUUF9ERUJVR19QUklOVEsoIlNSQz0lcEk2IC0gIiwgJmZsNi0+c2FkZHIpOwogCX0KIAotCWRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQoJmluaXRfbmV0LCBOVUxMLCAmZmw2KTsKLQlpZiAoIWRzdC0+ZXJyb3IpIHsKKwlkc3QgPSBpcDZfZHN0X2xvb2t1cF9mbG93KHNrLCBmbDYsIE5VTEwsIGZhbHNlKTsKKwlpZiAoIWFzb2MgfHwgc2FkZHIpCisJCWdvdG8gb3V0OworCisJYnAgPSAmYXNvYy0+YmFzZS5iaW5kX2FkZHI7CisJc2NvcGUgPSBzY3RwX3Njb3BlKGRhZGRyKTsKKwkvKiBpcDZfZHN0X2xvb2t1cCBoYXMgZmlsbGVkIGluIHRoZSBmbDYtPnNhZGRyIGZvciB1cy4gIENoZWNrCisJICogdG8gc2VlIGlmIHdlIGNhbiB1c2UgaXQuCisJICovCisJaWYgKCFJU19FUlIoZHN0KSkgeworCQkvKiBXYWxrIHRocm91Z2ggdGhlIGJpbmQgYWRkcmVzcyBsaXN0IGFuZCBsb29rIGZvciBhIGJpbmQKKwkJICogYWRkcmVzcyB0aGF0IG1hdGNoZXMgdGhlIHNvdXJjZSBhZGRyZXNzIG9mIHRoZSByZXR1cm5lZCBkc3QuCisJCSAqLworCQlzY3RwX3Y2X3RvX2FkZHIoJmRzdF9zYWRkciwgJmZsNi0+c2FkZHIsIGh0b25zKGJwLT5wb3J0KSk7CisJCXJjdV9yZWFkX2xvY2soKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobGFkZHIsICZicC0+YWRkcmVzc19saXN0LCBsaXN0KSB7CisJCQlpZiAoIWxhZGRyLT52YWxpZCB8fCAobGFkZHItPnN0YXRlICE9IFNDVFBfQUREUl9TUkMpKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBEbyBub3QgY29tcGFyZSBhZ2FpbnN0IHY0IGFkZHJzICovCisJCQlpZiAoKGxhZGRyLT5hLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgJiYKKwkJCSAgICAoc2N0cF92Nl9jbXBfYWRkcigmZHN0X3NhZGRyLCAmbGFkZHItPmEpKSkgeworCQkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJCXJjdV9yZWFkX3VubG9jaygpOworCQkvKiBOb25lIG9mIHRoZSBib3VuZCBhZGRyZXNzZXMgbWF0Y2ggdGhlIHNvdXJjZSBhZGRyZXNzIG9mIHRoZQorCQkgKiBkc3QuIFNvIHJlbGVhc2UgaXQuCisJCSAqLworCQlkc3RfcmVsZWFzZShkc3QpOworCQlkc3QgPSBOVUxMOworCX0KKworCS8qIFdhbGsgdGhyb3VnaCB0aGUgYmluZCBhZGRyZXNzIGxpc3QgYW5kIHRyeSB0byBnZXQgdGhlCisJICogYmVzdCBzb3VyY2UgYWRkcmVzcyBmb3IgYSBnaXZlbiBkZXN0aW5hdGlvbi4KKwkgKi8KKwlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobGFkZHIsICZicC0+YWRkcmVzc19saXN0LCBsaXN0KSB7CisJCWlmICghbGFkZHItPnZhbGlkICYmIGxhZGRyLT5zdGF0ZSAhPSBTQ1RQX0FERFJfU1JDKQorCQkJY29udGludWU7CisJCWlmICgobGFkZHItPmEuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KSAmJgorCQkgICAgKHNjb3BlIDw9IHNjdHBfc2NvcGUoJmxhZGRyLT5hKSkpIHsKKwkJCWJtYXRjaGxlbiA9IHNjdHBfdjZfYWRkcl9tYXRjaF9sZW4oZGFkZHIsICZsYWRkci0+YSk7CisJCQlpZiAoIWJhZGRyIHx8IChtYXRjaGxlbiA8IGJtYXRjaGxlbikpIHsKKwkJCQliYWRkciA9ICZsYWRkci0+YTsKKwkJCQltYXRjaGxlbiA9IGJtYXRjaGxlbjsKKwkJCX0KKwkJfQorCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKwlpZiAoYmFkZHIpIHsKKwkJaXB2Nl9hZGRyX2NvcHkoJmZsNi0+c2FkZHIsICZiYWRkci0+djYuc2luNl9hZGRyKTsKKwkJZmw2LT5mbDZfc3BvcnQgPSBiYWRkci0+djYuc2luNl9wb3J0OworCQlkc3QgPSBpcDZfZHN0X2xvb2t1cF9mbG93KHNrLCBmbDYsIE5VTEwsIGZhbHNlKTsKKwl9CisKK291dDoKKwlpZiAoIUlTX0VSUihkc3QpKSB7CiAJCXN0cnVjdCBydDZfaW5mbyAqcnQ7CiAJCXJ0ID0gKHN0cnVjdCBydDZfaW5mbyAqKWRzdDsKKwkJdC0+ZHN0ID0gZHN0OwogCQlTQ1RQX0RFQlVHX1BSSU5USygicnQ2X2RzdDolcEk2IHJ0Nl9zcmM6JXBJNlxuIiwKLQkJCSZydC0+cnQ2aV9kc3QuYWRkciwgJnJ0LT5ydDZpX3NyYy5hZGRyKTsKLQkJcmV0dXJuIGRzdDsKKwkJCSZydC0+cnQ2aV9kc3QuYWRkciwgJmZsNi0+c2FkZHIpOworCX0gZWxzZSB7CisJCXQtPmRzdCA9IE5VTEw7CisJCVNDVFBfREVCVUdfUFJJTlRLKCJOTyBST1VURVxuIik7CiAJfQotCVNDVFBfREVCVUdfUFJJTlRLKCJOTyBST1VURVxuIik7Ci0JZHN0X3JlbGVhc2UoZHN0KTsKLQlyZXR1cm4gTlVMTDsKIH0KIAogLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIGluaXRpYWwgYml0cyB0aGF0IG1hdGNoIGluIHRoZSAyIGlwdjYKQEAgLTI4Niw2NCArMzYzLDE4IEBACiAgKiBhbmQgYXNvYydzIGJpbmQgYWRkcmVzcyBsaXN0LgogICovCiBzdGF0aWMgdm9pZCBzY3RwX3Y2X2dldF9zYWRkcihzdHJ1Y3Qgc2N0cF9zb2NrICpzaywKLQkJCSAgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAotCQkJICAgICAgc3RydWN0IGRzdF9lbnRyeSAqZHN0LAotCQkJICAgICAgdW5pb24gc2N0cF9hZGRyICpkYWRkciwKLQkJCSAgICAgIHVuaW9uIHNjdHBfYWRkciAqc2FkZHIpCisJCQkgICAgICBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnQsCisJCQkgICAgICBzdHJ1Y3QgZmxvd2kgKmZsKQogewotCXN0cnVjdCBzY3RwX2JpbmRfYWRkciAqYnA7Ci0Jc3RydWN0IHNjdHBfc29ja2FkZHJfZW50cnkgKmxhZGRyOwotCXNjdHBfc2NvcGVfdCBzY29wZTsKLQl1bmlvbiBzY3RwX2FkZHIgKmJhZGRyID0gTlVMTDsKLQlfX3U4IG1hdGNobGVuID0gMDsKLQlfX3U4IGJtYXRjaGxlbjsKKwlzdHJ1Y3QgZmxvd2k2ICpmbDYgPSAmZmwtPnUuaXA2OworCXVuaW9uIHNjdHBfYWRkciAqc2FkZHIgPSAmdC0+c2FkZHI7CiAKLQlTQ1RQX0RFQlVHX1BSSU5USygiJXM6IGFzb2M6JXAgZHN0OiVwIGRhZGRyOiVwSTYgIiwKLQkJCSAgX19mdW5jX18sIGFzb2MsIGRzdCwgJmRhZGRyLT52Ni5zaW42X2FkZHIpOworCVNDVFBfREVCVUdfUFJJTlRLKCIlczogYXNvYzolcCBkc3Q6JXBcbiIsIF9fZnVuY19fLCB0LT5hc29jLCB0LT5kc3QpOwogCi0JaWYgKCFhc29jKSB7Ci0JCWlwdjZfZGV2X2dldF9zYWRkcihzb2NrX25ldChzY3RwX29wdDJzayhzaykpLAotCQkJCSAgIGRzdCA/IGlwNl9kc3RfaWRldihkc3QpLT5kZXYgOiBOVUxMLAotCQkJCSAgICZkYWRkci0+djYuc2luNl9hZGRyLAotCQkJCSAgIGluZXQ2X3NrKCZzay0+aW5ldC5zayktPnNyY3ByZWZzLAotCQkJCSAgICZzYWRkci0+djYuc2luNl9hZGRyKTsKLQkJU0NUUF9ERUJVR19QUklOVEsoInNhZGRyIGZyb20gaXB2Nl9nZXRfc2FkZHI6ICVwSTZcbiIsCi0JCQkJICAmc2FkZHItPnY2LnNpbjZfYWRkcik7Ci0JCXJldHVybjsKKwlpZiAodC0+ZHN0KSB7CisJCXNhZGRyLT52Ni5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworCQlpcHY2X2FkZHJfY29weSgmc2FkZHItPnY2LnNpbjZfYWRkciwgJmZsNi0+c2FkZHIpOwogCX0KLQotCXNjb3BlID0gc2N0cF9zY29wZShkYWRkcik7Ci0KLQlicCA9ICZhc29jLT5iYXNlLmJpbmRfYWRkcjsKLQotCS8qIEdvIHRocm91Z2ggdGhlIGJpbmQgYWRkcmVzcyBsaXN0IGFuZCBmaW5kIHRoZSBiZXN0IHNvdXJjZSBhZGRyZXNzCi0JICogdGhhdCBtYXRjaGVzIHRoZSBzY29wZSBvZiB0aGUgZGVzdGluYXRpb24gYWRkcmVzcy4KLQkgKi8KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobGFkZHIsICZicC0+YWRkcmVzc19saXN0LCBsaXN0KSB7Ci0JCWlmICghbGFkZHItPnZhbGlkKQotCQkJY29udGludWU7Ci0JCWlmICgobGFkZHItPnN0YXRlID09IFNDVFBfQUREUl9TUkMpICYmCi0JCSAgICAobGFkZHItPmEuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KSAmJgotCQkgICAgKHNjb3BlIDw9IHNjdHBfc2NvcGUoJmxhZGRyLT5hKSkpIHsKLQkJCWJtYXRjaGxlbiA9IHNjdHBfdjZfYWRkcl9tYXRjaF9sZW4oZGFkZHIsICZsYWRkci0+YSk7Ci0JCQlpZiAoIWJhZGRyIHx8IChtYXRjaGxlbiA8IGJtYXRjaGxlbikpIHsKLQkJCQliYWRkciA9ICZsYWRkci0+YTsKLQkJCQltYXRjaGxlbiA9IGJtYXRjaGxlbjsKLQkJCX0KLQkJfQotCX0KLQotCWlmIChiYWRkcikgewotCQltZW1jcHkoc2FkZHIsIGJhZGRyLCBzaXplb2YodW5pb24gc2N0cF9hZGRyKSk7Ci0JCVNDVFBfREVCVUdfUFJJTlRLKCJzYWRkcjogJXBJNlxuIiwgJnNhZGRyLT52Ni5zaW42X2FkZHIpOwotCX0gZWxzZSB7Ci0JCXByX2VycigiJXM6IGFzb2M6JXAgQ291bGQgbm90IGZpbmQgYSB2YWxpZCBzb3VyY2UgIgotCQkgICAgICAgImFkZHJlc3MgZm9yIHRoZSBkZXN0OiVwSTZcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgYXNvYywgJmRhZGRyLT52Ni5zaW42X2FkZHIpOwotCX0KLQotCXJjdV9yZWFkX3VubG9jaygpOwogfQogCiAvKiBNYWtlIGEgY29weSBvZiBhbGwgcG90ZW50aWFsIGxvY2FsIGFkZHJlc3Nlcy4gKi8KQEAgLTQ2NSwxNCArNDk2LDEzIEBACiAJcmV0dXJuIGxlbmd0aDsKIH0KIAotLyogSW5pdGlhbGl6ZSBhIHNjdHBfYWRkciBmcm9tIGEgZHN0X2VudHJ5LiAqLwotc3RhdGljIHZvaWQgc2N0cF92Nl9kc3Rfc2FkZHIodW5pb24gc2N0cF9hZGRyICphZGRyLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCisvKiBJbml0aWFsaXplIGEgc2N0cF9hZGRyIGZyb20gc3RydWN0IGluNl9hZGRyLiAqLworc3RhdGljIHZvaWQgc2N0cF92Nl90b19hZGRyKHVuaW9uIHNjdHBfYWRkciAqYWRkciwgc3RydWN0IGluNl9hZGRyICpzYWRkciwKIAkJCSAgICAgIF9fYmUxNiBwb3J0KQogewotCXN0cnVjdCBydDZfaW5mbyAqcnQgPSAoc3RydWN0IHJ0Nl9pbmZvICopZHN0OwogCWFkZHItPnNhLnNhX2ZhbWlseSA9IEFGX0lORVQ2OwogCWFkZHItPnY2LnNpbjZfcG9ydCA9IHBvcnQ7Ci0JaXB2Nl9hZGRyX2NvcHkoJmFkZHItPnY2LnNpbjZfYWRkciwgJnJ0LT5ydDZpX3NyYy5hZGRyKTsKKwlpcHY2X2FkZHJfY29weSgmYWRkci0+djYuc2luNl9hZGRyLCBzYWRkcik7CiB9CiAKIC8qIENvbXBhcmUgYWRkcmVzc2VzIGV4YWN0bHkuCkBAIC01MzEsNyArNTYxLDcgQEAKIHN0YXRpYyBpbnQgc2N0cF92Nl9hdmFpbGFibGUodW5pb24gc2N0cF9hZGRyICphZGRyLCBzdHJ1Y3Qgc2N0cF9zb2NrICpzcCkKIHsKIAlpbnQgdHlwZTsKLQlzdHJ1Y3QgaW42X2FkZHIgKmluNiA9IChzdHJ1Y3QgaW42X2FkZHIgKikmYWRkci0+djYuc2luNl9hZGRyOworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqaW42ID0gKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqKSZhZGRyLT52Ni5zaW42X2FkZHI7CiAKIAl0eXBlID0gaXB2Nl9hZGRyX3R5cGUoaW42KTsKIAlpZiAoSVBWNl9BRERSX0FOWSA9PSB0eXBlKQpAQCAtOTU5LDcgKzk4OSw2IEBACiAJLnRvX3NrX2RhZGRyCSAgID0gc2N0cF92Nl90b19za19kYWRkciwKIAkuZnJvbV9hZGRyX3BhcmFtICAgPSBzY3RwX3Y2X2Zyb21fYWRkcl9wYXJhbSwKIAkudG9fYWRkcl9wYXJhbQkgICA9IHNjdHBfdjZfdG9fYWRkcl9wYXJhbSwKLQkuZHN0X3NhZGRyCSAgID0gc2N0cF92Nl9kc3Rfc2FkZHIsCiAJLmNtcF9hZGRyCSAgID0gc2N0cF92Nl9jbXBfYWRkciwKIAkuc2NvcGUJCSAgID0gc2N0cF92Nl9zY29wZSwKIAkuYWRkcl92YWxpZAkgICA9IHNjdHBfdjZfYWRkcl92YWxpZCwKZGlmZiAtLWdpdCBhL25ldC9zY3RwL291dHF1ZXVlLmMgYi9uZXQvc2N0cC9vdXRxdWV1ZS5jCmluZGV4IGJmOTJhNWIuLjFjODhjODkgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL291dHF1ZXVlLmMKKysrIGIvbmV0L3NjdHAvb3V0cXVldWUuYwpAQCAtMTMxLDcgKzEzMSw4IEBACiBzdGF0aWMgaW5saW5lIGludCBzY3RwX2NhY2Nfc2tpcF8zXzFfZihzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zcG9ydCwKIAkJCQkgICAgICAgaW50IGNvdW50X29mX25ld2Fja3MpCiB7Ci0JaWYgKGNvdW50X29mX25ld2Fja3MgPCAyICYmICF0cmFuc3BvcnQtPmNhY2MuY2FjY19zYXdfbmV3YWNrKQorCWlmIChjb3VudF9vZl9uZXdhY2tzIDwgMiAmJgorCQkJKHRyYW5zcG9ydCAmJiAhdHJhbnNwb3J0LT5jYWNjLmNhY2Nfc2F3X25ld2FjaykpCiAJCXJldHVybiAxOwogCXJldHVybiAwOwogfQpAQCAtMzE5LDcgKzMyMCw2IEBACiAJCSAqIGNodW5rLgogCQkgKi8KIAkJc3dpdGNoIChxLT5hc29jLT5zdGF0ZSkgewotCQljYXNlIFNDVFBfU1RBVEVfRU1QVFk6CiAJCWNhc2UgU0NUUF9TVEFURV9DTE9TRUQ6CiAJCWNhc2UgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HOgogCQljYXNlIFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVDoKQEAgLTU3Nyw2ICs1NzcsMTMgQEAKIAkgKiB0cnkgdG8gc2VuZCBhcyBtdWNoIGFzIHBvc3NpYmxlLgogCSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaHVuaywgY2h1bmsxLCBscXVldWUsIHRyYW5zbWl0dGVkX2xpc3QpIHsKKwkJLyogSWYgdGhlIGNodW5rIGlzIGFiYW5kb25lZCwgbW92ZSBpdCB0byBhYmFuZG9uZWQgbGlzdC4gKi8KKwkJaWYgKHNjdHBfY2h1bmtfYWJhbmRvbmVkKGNodW5rKSkgeworCQkJbGlzdF9kZWxfaW5pdCgmY2h1bmstPnRyYW5zbWl0dGVkX2xpc3QpOworCQkJc2N0cF9pbnNlcnRfbGlzdCgmcS0+YWJhbmRvbmVkLAorCQkJCQkgJmNodW5rLT50cmFuc21pdHRlZF9saXN0KTsKKwkJCWNvbnRpbnVlOworCQl9CiAKIAkJLyogTWFrZSBzdXJlIHRoYXQgR2FwIEFja2VkIFRTTnMgYXJlIG5vdCByZXRyYW5zbWl0dGVkLiAgQQogCQkgKiBzaW1wbGUgYXBwcm9hY2ggaXMganVzdCB0byBtb3ZlIHN1Y2ggVFNOcyBvdXQgb2YgdGhlCkBAIC02MTgsOSArNjI1LDEyIEBACiAKIAkJCS8qIElmIHdlIGFyZSByZXRyYW5zbWl0dGluZywgd2Ugc2hvdWxkIG9ubHkKIAkJCSAqIHNlbmQgYSBzaW5nbGUgcGFja2V0LgorCQkJICogT3RoZXJ3aXNlLCB0cnkgYXBwZW5kaW5nIHRoaXMgY2h1bmsgYWdhaW4uCiAJCQkgKi8KIAkJCWlmIChydHhfdGltZW91dCB8fCBmYXN0X3J0eCkKIAkJCQlkb25lID0gMTsKKwkJCWVsc2UKKwkJCQlnb3RvIHJlZG87CiAKIAkJCS8qIEJ1bmRsZSBuZXh0IGNodW5rIGluIHRoZSBuZXh0IHJvdW5kLiAgKi8KIAkJCWJyZWFrOwpAQCAtMTY4Myw4ICsxNjkzLDkgQEAKIAkJCS8qIFNGUi1DQUNDIG1heSByZXF1aXJlIHVzIHRvIHNraXAgbWFya2luZwogCQkJICogdGhpcyBjaHVuayBhcyBtaXNzaW5nLgogCQkJICovCi0JCQlpZiAoIXRyYW5zcG9ydCB8fCAhc2N0cF9jYWNjX3NraXAocHJpbWFyeSwgdHJhbnNwb3J0LAotCQkJCQkgICAgY291bnRfb2ZfbmV3YWNrcywgdHNuKSkgeworCQkJaWYgKCF0cmFuc3BvcnQgfHwgIXNjdHBfY2FjY19za2lwKHByaW1hcnksCisJCQkJCQljaHVuay0+dHJhbnNwb3J0LAorCQkJCQkJY291bnRfb2ZfbmV3YWNrcywgdHNuKSkgewogCQkJCWNodW5rLT50c25fbWlzc2luZ19yZXBvcnQrKzsKIAogCQkJCVNDVFBfREVCVUdfUFJJTlRLKApkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvcHJvdG9jb2wuYyBiL25ldC9zY3RwL3Byb3RvY29sLmMKaW5kZXggMDY1ZDk5OS4uNjczODBhMiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvcHJvdG9jb2wuYworKysgYi9uZXQvc2N0cC9wcm90b2NvbC5jCkBAIC0zMzIsMTMgKzMzMiwxMiBAQAogfQogCiAvKiBJbml0aWFsaXplIGEgc2N0cF9hZGRyIGZyb20gYSBkc3RfZW50cnkuICovCi1zdGF0aWMgdm9pZCBzY3RwX3Y0X2RzdF9zYWRkcih1bmlvbiBzY3RwX2FkZHIgKnNhZGRyLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCitzdGF0aWMgdm9pZCBzY3RwX3Y0X2RzdF9zYWRkcih1bmlvbiBzY3RwX2FkZHIgKnNhZGRyLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsCiAJCQkgICAgICBfX2JlMTYgcG9ydCkKIHsKLQlzdHJ1Y3QgcnRhYmxlICpydCA9IChzdHJ1Y3QgcnRhYmxlICopZHN0OwogCXNhZGRyLT52NC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKIAlzYWRkci0+djQuc2luX3BvcnQgPSBwb3J0OwotCXNhZGRyLT52NC5zaW5fYWRkci5zX2FkZHIgPSBydC0+cnRfc3JjOworCXNhZGRyLT52NC5zaW5fYWRkci5zX2FkZHIgPSBmbDQtPnNhZGRyOwogfQogCiAvKiBDb21wYXJlIHR3byBhZGRyZXNzZXMgZXhhY3RseS4gKi8KQEAgLTQ1NiwzNSArNDU1LDM2IEBACiAgKiBhZGRyZXNzZXMuIElmIGFuIGFzc29jaWF0aW9uIGlzIHBhc3NlZCwgdHJ5cyB0byBnZXQgYSBkc3QgZW50cnkgd2l0aCBhCiAgKiBzb3VyY2UgYWRkcmVzcyB0aGF0IG1hdGNoZXMgYW4gYWRkcmVzcyBpbiB0aGUgYmluZCBhZGRyZXNzIGxpc3QuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICpzY3RwX3Y0X2dldF9kc3Qoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0JCQkJCSB1bmlvbiBzY3RwX2FkZHIgKmRhZGRyLAotCQkJCQkgdW5pb24gc2N0cF9hZGRyICpzYWRkcikKK3N0YXRpYyB2b2lkIHNjdHBfdjRfZ2V0X2RzdChzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnQsIHVuaW9uIHNjdHBfYWRkciAqc2FkZHIsCisJCQkJc3RydWN0IGZsb3dpICpmbCwgc3RydWN0IHNvY2sgKnNrKQogeworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jID0gdC0+YXNvYzsKIAlzdHJ1Y3QgcnRhYmxlICpydDsKLQlzdHJ1Y3QgZmxvd2k0IGZsNDsKKwlzdHJ1Y3QgZmxvd2k0ICpmbDQgPSAmZmwtPnUuaXA0OwogCXN0cnVjdCBzY3RwX2JpbmRfYWRkciAqYnA7CiAJc3RydWN0IHNjdHBfc29ja2FkZHJfZW50cnkgKmxhZGRyOwogCXN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IE5VTEw7CisJdW5pb24gc2N0cF9hZGRyICpkYWRkciA9ICZ0LT5pcGFkZHI7CiAJdW5pb24gc2N0cF9hZGRyIGRzdF9zYWRkcjsKIAotCW1lbXNldCgmZmw0LCAweDAsIHNpemVvZihzdHJ1Y3QgZmxvd2k0KSk7Ci0JZmw0LmRhZGRyICA9IGRhZGRyLT52NC5zaW5fYWRkci5zX2FkZHI7Ci0JZmw0LmZsNF9kcG9ydCA9IGRhZGRyLT52NC5zaW5fcG9ydDsKLQlmbDQuZmxvd2k0X3Byb3RvID0gSVBQUk9UT19TQ1RQOworCW1lbXNldChmbDQsIDB4MCwgc2l6ZW9mKHN0cnVjdCBmbG93aTQpKTsKKwlmbDQtPmRhZGRyICA9IGRhZGRyLT52NC5zaW5fYWRkci5zX2FkZHI7CisJZmw0LT5mbDRfZHBvcnQgPSBkYWRkci0+djQuc2luX3BvcnQ7CisJZmw0LT5mbG93aTRfcHJvdG8gPSBJUFBST1RPX1NDVFA7CiAJaWYgKGFzb2MpIHsKLQkJZmw0LmZsb3dpNF90b3MgPSBSVF9DT05OX0ZMQUdTKGFzb2MtPmJhc2Uuc2spOwotCQlmbDQuZmxvd2k0X29pZiA9IGFzb2MtPmJhc2Uuc2stPnNrX2JvdW5kX2Rldl9pZjsKLQkJZmw0LmZsNF9zcG9ydCA9IGh0b25zKGFzb2MtPmJhc2UuYmluZF9hZGRyLnBvcnQpOworCQlmbDQtPmZsb3dpNF90b3MgPSBSVF9DT05OX0ZMQUdTKGFzb2MtPmJhc2Uuc2spOworCQlmbDQtPmZsb3dpNF9vaWYgPSBhc29jLT5iYXNlLnNrLT5za19ib3VuZF9kZXZfaWY7CisJCWZsNC0+Zmw0X3Nwb3J0ID0gaHRvbnMoYXNvYy0+YmFzZS5iaW5kX2FkZHIucG9ydCk7CiAJfQogCWlmIChzYWRkcikgewotCQlmbDQuc2FkZHIgPSBzYWRkci0+djQuc2luX2FkZHIuc19hZGRyOwotCQlmbDQuZmw0X3Nwb3J0ID0gc2FkZHItPnY0LnNpbl9wb3J0OworCQlmbDQtPnNhZGRyID0gc2FkZHItPnY0LnNpbl9hZGRyLnNfYWRkcjsKKwkJZmw0LT5mbDRfc3BvcnQgPSBzYWRkci0+djQuc2luX3BvcnQ7CiAJfQogCiAJU0NUUF9ERUJVR19QUklOVEsoIiVzOiBEU1Q6JXBJNCwgU1JDOiVwSTQgLSAiLAotCQkJICBfX2Z1bmNfXywgJmZsNC5kYWRkciwgJmZsNC5zYWRkcik7CisJCQkgIF9fZnVuY19fLCAmZmw0LT5kYWRkciwgJmZsNC0+c2FkZHIpOwogCi0JcnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KCZpbml0X25ldCwgJmZsNCk7CisJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KCZpbml0X25ldCwgZmw0KTsKIAlpZiAoIUlTX0VSUihydCkpCiAJCWRzdCA9ICZydC0+ZHN0OwogCkBAIC01MDAsNyArNTAwLDcgQEAKIAkJLyogV2FsayB0aHJvdWdoIHRoZSBiaW5kIGFkZHJlc3MgbGlzdCBhbmQgbG9vayBmb3IgYSBiaW5kCiAJCSAqIGFkZHJlc3MgdGhhdCBtYXRjaGVzIHRoZSBzb3VyY2UgYWRkcmVzcyBvZiB0aGUgcmV0dXJuZWQgZHN0LgogCQkgKi8KLQkJc2N0cF92NF9kc3Rfc2FkZHIoJmRzdF9zYWRkciwgZHN0LCBodG9ucyhicC0+cG9ydCkpOworCQlzY3RwX3Y0X2RzdF9zYWRkcigmZHN0X3NhZGRyLCBmbDQsIGh0b25zKGJwLT5wb3J0KSk7CiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobGFkZHIsICZicC0+YWRkcmVzc19saXN0LCBsaXN0KSB7CiAJCQlpZiAoIWxhZGRyLT52YWxpZCB8fCAobGFkZHItPnN0YXRlICE9IFNDVFBfQUREUl9TUkMpKQpAQCAtNTI2LDkgKzUyNiw5IEBACiAJCQljb250aW51ZTsKIAkJaWYgKChsYWRkci0+c3RhdGUgPT0gU0NUUF9BRERSX1NSQykgJiYKIAkJICAgIChBRl9JTkVUID09IGxhZGRyLT5hLnNhLnNhX2ZhbWlseSkpIHsKLQkJCWZsNC5zYWRkciA9IGxhZGRyLT5hLnY0LnNpbl9hZGRyLnNfYWRkcjsKLQkJCWZsNC5mbDRfc3BvcnQgPSBsYWRkci0+YS52NC5zaW5fcG9ydDsKLQkJCXJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleSgmaW5pdF9uZXQsICZmbDQpOworCQkJZmw0LT5zYWRkciA9IGxhZGRyLT5hLnY0LnNpbl9hZGRyLnNfYWRkcjsKKwkJCWZsNC0+Zmw0X3Nwb3J0ID0gbGFkZHItPmEudjQuc2luX3BvcnQ7CisJCQlydCA9IGlwX3JvdXRlX291dHB1dF9rZXkoJmluaXRfbmV0LCBmbDQpOwogCQkJaWYgKCFJU19FUlIocnQpKSB7CiAJCQkJZHN0ID0gJnJ0LT5kc3Q7CiAJCQkJZ290byBvdXRfdW5sb2NrOwpAQCAtNTM5LDMzICs1MzksMjcgQEAKIG91dF91bmxvY2s6CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiBvdXQ6CisJdC0+ZHN0ID0gZHN0OwogCWlmIChkc3QpCiAJCVNDVFBfREVCVUdfUFJJTlRLKCJydF9kc3Q6JXBJNCwgcnRfc3JjOiVwSTRcbiIsCi0JCQkJICAmcnQtPnJ0X2RzdCwgJnJ0LT5ydF9zcmMpOworCQkJCSAgJmZsNC0+ZGFkZHIsICZmbDQtPnNhZGRyKTsKIAllbHNlCiAJCVNDVFBfREVCVUdfUFJJTlRLKCJOTyBST1VURVxuIik7Ci0KLQlyZXR1cm4gZHN0OwogfQogCiAvKiBGb3IgdjQsIHRoZSBzb3VyY2UgYWRkcmVzcyBpcyBjYWNoZWQgaW4gdGhlIHJvdXRlIGVudHJ5KGRzdCkuIFNvIG5vIG5lZWQKICAqIHRvIGNhY2hlIGl0IHNlcGFyYXRlbHkgYW5kIGhlbmNlIHRoaXMgaXMgYW4gZW1wdHkgcm91dGluZS4KICAqLwogc3RhdGljIHZvaWQgc2N0cF92NF9nZXRfc2FkZHIoc3RydWN0IHNjdHBfc29jayAqc2ssCi0JCQkgICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLQkJCSAgICAgIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKLQkJCSAgICAgIHVuaW9uIHNjdHBfYWRkciAqZGFkZHIsCi0JCQkgICAgICB1bmlvbiBzY3RwX2FkZHIgKnNhZGRyKQorCQkJICAgICAgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0LAorCQkJICAgICAgc3RydWN0IGZsb3dpICpmbCkKIHsKLQlzdHJ1Y3QgcnRhYmxlICpydCA9IChzdHJ1Y3QgcnRhYmxlICopZHN0OwotCi0JaWYgKCFhc29jKQotCQlyZXR1cm47CisJdW5pb24gc2N0cF9hZGRyICpzYWRkciA9ICZ0LT5zYWRkcjsKKwlzdHJ1Y3QgcnRhYmxlICpydCA9IChzdHJ1Y3QgcnRhYmxlICopdC0+ZHN0OwogCiAJaWYgKHJ0KSB7CiAJCXNhZGRyLT52NC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLQkJc2FkZHItPnY0LnNpbl9wb3J0ID0gaHRvbnMoYXNvYy0+YmFzZS5iaW5kX2FkZHIucG9ydCk7Ci0JCXNhZGRyLT52NC5zaW5fYWRkci5zX2FkZHIgPSBydC0+cnRfc3JjOworCQlzYWRkci0+djQuc2luX2FkZHIuc19hZGRyID0gZmwtPnUuaXA0LnNhZGRyOwogCX0KIH0KIApAQCAtODQ3LDE0ICs4NDEsMTQgQEAKIAogCVNDVFBfREVCVUdfUFJJTlRLKCIlczogc2tiOiVwLCBsZW46JWQsIHNyYzolcEk0LCBkc3Q6JXBJNFxuIiwKIAkJCSAgX19mdW5jX18sIHNrYiwgc2tiLT5sZW4sCi0JCQkgICZza2JfcnRhYmxlKHNrYiktPnJ0X3NyYywKLQkJCSAgJnNrYl9ydGFibGUoc2tiKS0+cnRfZHN0KTsKKwkJCSAgJnRyYW5zcG9ydC0+ZmwudS5pcDQuc2FkZHIsCisJCQkgICZ0cmFuc3BvcnQtPmZsLnUuaXA0LmRhZGRyKTsKIAogCWluZXQtPnBtdHVkaXNjID0gdHJhbnNwb3J0LT5wYXJhbV9mbGFncyAmIFNQUF9QTVRVRF9FTkFCTEUgPwogCQkJIElQX1BNVFVESVNDX0RPIDogSVBfUE1UVURJU0NfRE9OVDsKIAogCVNDVFBfSU5DX1NUQVRTKFNDVFBfTUlCX09VVFNDVFBQQUNLUyk7Ci0JcmV0dXJuIGlwX3F1ZXVlX3htaXQoc2tiKTsKKwlyZXR1cm4gaXBfcXVldWVfeG1pdChza2IsICZ0cmFuc3BvcnQtPmZsKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzY3RwX2FmIHNjdHBfYWZfaW5ldDsKQEAgLTk0Myw3ICs5MzcsNiBAQAogCS50b19za19kYWRkcgkgICA9IHNjdHBfdjRfdG9fc2tfZGFkZHIsCiAJLmZyb21fYWRkcl9wYXJhbSAgID0gc2N0cF92NF9mcm9tX2FkZHJfcGFyYW0sCiAJLnRvX2FkZHJfcGFyYW0JICAgPSBzY3RwX3Y0X3RvX2FkZHJfcGFyYW0sCi0JLmRzdF9zYWRkcgkgICA9IHNjdHBfdjRfZHN0X3NhZGRyLAogCS5jbXBfYWRkcgkgICA9IHNjdHBfdjRfY21wX2FkZHIsCiAJLmFkZHJfdmFsaWQJICAgPSBzY3RwX3Y0X2FkZHJfdmFsaWQsCiAJLmluYWRkcl9hbnkJICAgPSBzY3RwX3Y0X2luYWRkcl9hbnksCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKaW5kZXggYjM0MzRjYy4uNThlYjI3ZiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCisrKyBiL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYwpAQCAtMTA3NSwyMCArMTA3NSwyOCBAQAogCiAvKiBNYWtlIGEgSEVBUlRCRUFUIGNodW5rLiAgKi8KIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX21ha2VfaGVhcnRiZWF0KGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAotCQkJCSAgY29uc3Qgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cmFuc3BvcnQsCi0JCQkJICBjb25zdCB2b2lkICpwYXlsb2FkLCBjb25zdCBzaXplX3QgcGF5bGVuKQorCQkJCSAgY29uc3Qgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cmFuc3BvcnQpCiB7Ci0Jc3RydWN0IHNjdHBfY2h1bmsgKnJldHZhbCA9IHNjdHBfbWFrZV9jaHVuayhhc29jLCBTQ1RQX0NJRF9IRUFSVEJFQVQsCi0JCQkJCQkgICAgMCwgcGF5bGVuKTsKKwlzdHJ1Y3Qgc2N0cF9jaHVuayAqcmV0dmFsOworCXNjdHBfc2VuZGVyX2hiX2luZm9fdCBoYmluZm87CisKKwlyZXR2YWwgPSBzY3RwX21ha2VfY2h1bmsoYXNvYywgU0NUUF9DSURfSEVBUlRCRUFULCAwLCBzaXplb2YoaGJpbmZvKSk7CiAKIAlpZiAoIXJldHZhbCkKIAkJZ290byBub2RhdGE7CiAKKwloYmluZm8ucGFyYW1faGRyLnR5cGUgPSBTQ1RQX1BBUkFNX0hFQVJUQkVBVF9JTkZPOworCWhiaW5mby5wYXJhbV9oZHIubGVuZ3RoID0gaHRvbnMoc2l6ZW9mKHNjdHBfc2VuZGVyX2hiX2luZm9fdCkpOworCWhiaW5mby5kYWRkciA9IHRyYW5zcG9ydC0+aXBhZGRyOworCWhiaW5mby5zZW50X2F0ID0gamlmZmllczsKKwloYmluZm8uaGJfbm9uY2UgPSB0cmFuc3BvcnQtPmhiX25vbmNlOworCiAJLyogQ2FzdCBhd2F5IHRoZSAnY29uc3QnLCBhcyB0aGlzIGlzIGp1c3QgdGVsbGluZyB0aGUgY2h1bmsKIAkgKiB3aGF0IHRyYW5zcG9ydCBpdCBiZWxvbmdzIHRvLgogCSAqLwogCXJldHZhbC0+dHJhbnNwb3J0ID0gKHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqKSB0cmFuc3BvcnQ7Ci0JcmV0dmFsLT5zdWJoLmhic19oZHIgPSBzY3RwX2FkZHRvX2NodW5rKHJldHZhbCwgcGF5bGVuLCBwYXlsb2FkKTsKKwlyZXR2YWwtPnN1YmguaGJzX2hkciA9IHNjdHBfYWRkdG9fY2h1bmsocmV0dmFsLCBzaXplb2YoaGJpbmZvKSwKKwkJCQkJCSZoYmluZm8pOwogCiBub2RhdGE6CiAJcmV0dXJuIHJldHZhbDsKQEAgLTIyNDIsMTQgKzIyNTAsMTcgQEAKICAqIFJldHVybnMgMCBvbiBmYWlsdXJlLCBlbHNlIHN1Y2Nlc3MuCiAgKiBGSVhNRTogIFRoaXMgaXMgYW4gYXNzb2NpYXRpb24gbWV0aG9kLgogICovCi1pbnQgc2N0cF9wcm9jZXNzX2luaXQoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsIHNjdHBfY2lkX3QgY2lkLAoraW50IHNjdHBfcHJvY2Vzc19pbml0KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssCiAJCSAgICAgIGNvbnN0IHVuaW9uIHNjdHBfYWRkciAqcGVlcl9hZGRyLAogCQkgICAgICBzY3RwX2luaXRfY2h1bmtfdCAqcGVlcl9pbml0LCBnZnBfdCBnZnApCiB7CiAJdW5pb24gc2N0cF9wYXJhbXMgcGFyYW07CiAJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cmFuc3BvcnQ7CiAJc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqdGVtcDsKKwlzdHJ1Y3Qgc2N0cF9hZiAqYWY7CisJdW5pb24gc2N0cF9hZGRyIGFkZHI7CiAJY2hhciAqY29va2llOworCWludCBzcmNfbWF0Y2ggPSAwOwogCiAJLyogV2UgbXVzdCBpbmNsdWRlIHRoZSBhZGRyZXNzIHRoYXQgdGhlIElOSVQgcGFja2V0IGNhbWUgZnJvbS4KIAkgKiBUaGlzIGlzIHRoZSBvbmx5IGFkZHJlc3MgdGhhdCBtYXR0ZXJzIGZvciBhbiBJTklUIHBhY2tldC4KQEAgLTIyNjEsMTggKzIyNzIsMzEgQEAKIAkgKiBhZGRlZCBhcyB0aGUgcHJpbWFyeSB0cmFuc3BvcnQuICBUaGUgc291cmNlIGFkZHJlc3Mgc2VlbXMgdG8KIAkgKiBiZSBhIGEgYmV0dGVyIGNob2ljZSB0aGFuIGFueSBvZiB0aGUgZW1iZWRkZWQgYWRkcmVzc2VzLgogCSAqLwotCWlmIChwZWVyX2FkZHIpIHsKLQkJaWYoIXNjdHBfYXNzb2NfYWRkX3BlZXIoYXNvYywgcGVlcl9hZGRyLCBnZnAsIFNDVFBfQUNUSVZFKSkKLQkJCWdvdG8gbm9tZW07Ci0JfQorCWlmKCFzY3RwX2Fzc29jX2FkZF9wZWVyKGFzb2MsIHBlZXJfYWRkciwgZ2ZwLCBTQ1RQX0FDVElWRSkpCisJCWdvdG8gbm9tZW07CisKKwlpZiAoc2N0cF9jbXBfYWRkcl9leGFjdChzY3RwX3NvdXJjZShjaHVuayksIHBlZXJfYWRkcikpCisJCXNyY19tYXRjaCA9IDE7CiAKIAkvKiBQcm9jZXNzIHRoZSBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXJzLiAgKi8KIAlzY3RwX3dhbGtfcGFyYW1zKHBhcmFtLCBwZWVyX2luaXQsIGluaXRfaGRyLnBhcmFtcykgeworCQlpZiAoIXNyY19tYXRjaCAmJiAocGFyYW0ucC0+dHlwZSA9PSBTQ1RQX1BBUkFNX0lQVjRfQUREUkVTUyB8fAorCQkgICAgcGFyYW0ucC0+dHlwZSA9PSBTQ1RQX1BBUkFNX0lQVjZfQUREUkVTUykpIHsKKwkJCWFmID0gc2N0cF9nZXRfYWZfc3BlY2lmaWMocGFyYW1fdHlwZTJhZihwYXJhbS5wLT50eXBlKSk7CisJCQlhZi0+ZnJvbV9hZGRyX3BhcmFtKCZhZGRyLCBwYXJhbS5hZGRyLAorCQkJCQkgICAgY2h1bmstPnNjdHBfaGRyLT5zb3VyY2UsIDApOworCQkJaWYgKHNjdHBfY21wX2FkZHJfZXhhY3Qoc2N0cF9zb3VyY2UoY2h1bmspLCAmYWRkcikpCisJCQkJc3JjX21hdGNoID0gMTsKKwkJfQogCiAJCWlmICghc2N0cF9wcm9jZXNzX3BhcmFtKGFzb2MsIHBhcmFtLCBwZWVyX2FkZHIsIGdmcCkpCiAJCQlnb3RvIGNsZWFuX3VwOwogCX0KIAorCS8qIHNvdXJjZSBhZGRyZXNzIG9mIGNodW5rIG1heSBub3QgbWF0Y2ggYW55IHZhbGlkIGFkZHJlc3MgKi8KKwlpZiAoIXNyY19tYXRjaCkKKwkJZ290byBjbGVhbl91cDsKKwogCS8qIEFVVEg6IEFmdGVyIHByb2Nlc3NpbmcgdGhlIHBhcmFtZXRlcnMsIG1ha2Ugc3VyZSB0aGF0IHdlCiAJICogaGF2ZSBhbGwgdGhlIHJlcXVpcmVkIGluZm8gdG8gcG90ZW50aWFsbHkgZG8gYXV0aGVudGljYXRpb25zLgogCSAqLwpAQCAtMjkyMyw3ICsyOTQ3LDcgQEAKIAkgICAgYXNjb25mX3BhcmFtLT5wYXJhbV9oZHIudHlwZSAhPSBTQ1RQX1BBUkFNX1NFVF9QUklNQVJZKQogCQlyZXR1cm4gU0NUUF9FUlJPUl9VTktOT1dOX1BBUkFNOwogCi0Jc3dpdGNoIChhZGRyX3BhcmFtLT52NC5wYXJhbV9oZHIudHlwZSkgeworCXN3aXRjaCAoYWRkcl9wYXJhbS0+cC50eXBlKSB7CiAJY2FzZSBTQ1RQX1BBUkFNX0lQVjZfQUREUkVTUzoKIAkJaWYgKCFhc29jLT5wZWVyLmlwdjZfYWRkcmVzcykKIAkJCXJldHVybiBTQ1RQX0VSUk9SX0ROU19GQUlMRUQ7CkBAIC0yOTM2LDcgKzI5NjAsNyBAQAogCQlyZXR1cm4gU0NUUF9FUlJPUl9ETlNfRkFJTEVEOwogCX0KIAotCWFmID0gc2N0cF9nZXRfYWZfc3BlY2lmaWMocGFyYW1fdHlwZTJhZihhZGRyX3BhcmFtLT52NC5wYXJhbV9oZHIudHlwZSkpOworCWFmID0gc2N0cF9nZXRfYWZfc3BlY2lmaWMocGFyYW1fdHlwZTJhZihhZGRyX3BhcmFtLT5wLnR5cGUpKTsKIAlpZiAodW5saWtlbHkoIWFmKSkKIAkJcmV0dXJuIFNDVFBfRVJST1JfRE5TX0ZBSUxFRDsKIApAQCAtMzEwMCw3ICszMTI0LDcgQEAKIAkvKiBTa2lwIHRoZSBhZGRyZXNzIHBhcmFtZXRlciBhbmQgc3RvcmUgYSBwb2ludGVyIHRvIHRoZSBmaXJzdAogCSAqIGFzY29uZiBwYXJhbWV0ZXIuCiAJICovCi0JbGVuZ3RoID0gbnRvaHMoYWRkcl9wYXJhbS0+djQucGFyYW1faGRyLmxlbmd0aCk7CisJbGVuZ3RoID0gbnRvaHMoYWRkcl9wYXJhbS0+cC5sZW5ndGgpOwogCWFzY29uZl9wYXJhbSA9IChzY3RwX2FkZGlwX3BhcmFtX3QgKikoKHZvaWQgKilhZGRyX3BhcmFtICsgbGVuZ3RoKTsKIAljaHVua19sZW4gLT0gbGVuZ3RoOwogCkBAIC0zMTc3LDcgKzMyMDEsNyBAQAogCQkJKCh2b2lkICopYXNjb25mX3BhcmFtICsgc2l6ZW9mKHNjdHBfYWRkaXBfcGFyYW1fdCkpOwogCiAJLyogV2UgaGF2ZSBjaGVja2VkIHRoZSBwYWNrZXQgYmVmb3JlLCBzbyB3ZSBkbyBub3QgY2hlY2sgYWdhaW4uCSovCi0JYWYgPSBzY3RwX2dldF9hZl9zcGVjaWZpYyhwYXJhbV90eXBlMmFmKGFkZHJfcGFyYW0tPnY0LnBhcmFtX2hkci50eXBlKSk7CisJYWYgPSBzY3RwX2dldF9hZl9zcGVjaWZpYyhwYXJhbV90eXBlMmFmKGFkZHJfcGFyYW0tPnAudHlwZSkpOwogCWFmLT5mcm9tX2FkZHJfcGFyYW0oJmFkZHIsIGFkZHJfcGFyYW0sIGh0b25zKGJwLT5wb3J0KSwgMCk7CiAKIAlzd2l0Y2ggKGFzY29uZl9wYXJhbS0+cGFyYW1faGRyLnR5cGUpIHsKQEAgLTMxOTMsMTEgKzMyMTcsOCBAQAogCQlsb2NhbF9iaF9lbmFibGUoKTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0cmFuc3BvcnQsICZhc29jLT5wZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QsCiAJCQkJdHJhbnNwb3J0cykgewotCQkJaWYgKHRyYW5zcG9ydC0+c3RhdGUgPT0gU0NUUF9BQ1RJVkUpCi0JCQkJY29udGludWU7CiAJCQlkc3RfcmVsZWFzZSh0cmFuc3BvcnQtPmRzdCk7Ci0JCQlzY3RwX3RyYW5zcG9ydF9yb3V0ZSh0cmFuc3BvcnQsIE5VTEwsCi0JCQkJCSAgICAgc2N0cF9zayhhc29jLT5iYXNlLnNrKSk7CisJCQl0cmFuc3BvcnQtPmRzdCA9IE5VTEw7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBTQ1RQX1BBUkFNX0RFTF9JUDoKQEAgLTMyMDcsOCArMzIyOCw3IEBACiAJCWxpc3RfZm9yX2VhY2hfZW50cnkodHJhbnNwb3J0LCAmYXNvYy0+cGVlci50cmFuc3BvcnRfYWRkcl9saXN0LAogCQkJCXRyYW5zcG9ydHMpIHsKIAkJCWRzdF9yZWxlYXNlKHRyYW5zcG9ydC0+ZHN0KTsKLQkJCXNjdHBfdHJhbnNwb3J0X3JvdXRlKHRyYW5zcG9ydCwgTlVMTCwKLQkJCQkJICAgICBzY3RwX3NrKGFzb2MtPmJhc2Uuc2spKTsKKwkJCXRyYW5zcG9ydC0+ZHN0ID0gTlVMTDsKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMzMwNCw3ICszMzI0LDcgQEAKIAkvKiBTa2lwIHRoZSBhZGRyZXNzIHBhcmFtZXRlciBpbiB0aGUgbGFzdCBhc2NvbmYgc2VudCBhbmQgc3RvcmUgYQogCSAqIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGFzY29uZiBwYXJhbWV0ZXIuCiAJICovCi0JbGVuZ3RoID0gbnRvaHMoYWRkcl9wYXJhbS0+djQucGFyYW1faGRyLmxlbmd0aCk7CisJbGVuZ3RoID0gbnRvaHMoYWRkcl9wYXJhbS0+cC5sZW5ndGgpOwogCWFzY29uZl9wYXJhbSA9IChzY3RwX2FkZGlwX3BhcmFtX3QgKikoKHZvaWQgKilhZGRyX3BhcmFtICsgbGVuZ3RoKTsKIAlhc2NvbmZfbGVuIC09IGxlbmd0aDsKIApkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jIGIvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jCmluZGV4IDVmODZlZTRiLi5kNjEyY2ExIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMKKysrIGIvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jCkBAIC01OTUsOCArNTk1LDcgQEAKIAkgKiBmYWlsIGR1cmluZyBJTklUIHByb2Nlc3NpbmcgKGR1ZSB0byBtYWxsb2MgcHJvYmxlbXMpLAogCSAqIGp1c3QgcmV0dXJuIHRoZSBlcnJvciBhbmQgc3RvcCBwcm9jZXNzaW5nIHRoZSBzdGFjay4KIAkgKi8KLQlpZiAoIXNjdHBfcHJvY2Vzc19pbml0KGFzb2MsIGNodW5rLT5jaHVua19oZHItPnR5cGUsCi0JCQkgICAgICAgc2N0cF9zb3VyY2UoY2h1bmspLCBwZWVyX2luaXQsIGdmcCkpCisJaWYgKCFzY3RwX3Byb2Nlc3NfaW5pdChhc29jLCBjaHVuaywgc2N0cF9zb3VyY2UoY2h1bmspLCBwZWVyX2luaXQsIGdmcCkpCiAJCWVycm9yID0gLUVOT01FTTsKIAllbHNlCiAJCWVycm9yID0gMDsKQEAgLTE0MTUsMTIgKzE0MTQsNiBAQAogCQkJCQlTQ1RQX1JUWFJfVDNfUlRYKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgU0NUUF9DTURfVFJBTlNNSVQ6Ci0JCQkvKiBLaWNrIHN0YXJ0IHRyYW5zbWlzc2lvbi4gKi8KLQkJCWVycm9yID0gc2N0cF9vdXRxX3VuY29yaygmYXNvYy0+b3V0cXVldWUpOwotCQkJbG9jYWxfY29yayA9IDA7Ci0JCQlicmVhazsKLQogCQljYXNlIFNDVFBfQ01EX0VDTl9DRToKIAkJCS8qIERvIGRlbGF5ZWQgQ0UgcHJvY2Vzc2luZy4gICAqLwogCQkJc2N0cF9kb19lY25fY2Vfd29yayhhc29jLCBjbWQtPm9iai51MzIpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMgYi9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYwppbmRleCA3Njc5MjA4Li43ZjRhNGY4IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYworKysgYi9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYwpAQCAtMzkzLDggKzM5Myw3IEBACiAJCWdvdG8gbm9tZW1faW5pdDsKIAogCS8qIFRoZSBjYWxsLCBzY3RwX3Byb2Nlc3NfaW5pdCgpLCBjYW4gZmFpbCBvbiBtZW1vcnkgYWxsb2NhdGlvbi4gICovCi0JaWYgKCFzY3RwX3Byb2Nlc3NfaW5pdChuZXdfYXNvYywgY2h1bmstPmNodW5rX2hkci0+dHlwZSwKLQkJCSAgICAgICBzY3RwX3NvdXJjZShjaHVuayksCisJaWYgKCFzY3RwX3Byb2Nlc3NfaW5pdChuZXdfYXNvYywgY2h1bmssIHNjdHBfc291cmNlKGNodW5rKSwKIAkJCSAgICAgICAoc2N0cF9pbml0X2NodW5rX3QgKiljaHVuay0+Y2h1bmtfaGRyLAogCQkJICAgICAgIEdGUF9BVE9NSUMpKQogCQlnb3RvIG5vbWVtX2luaXQ7CkBAIC03MjUsNyArNzI0LDcgQEAKIAkgKi8KIAlwZWVyX2luaXQgPSAmY2h1bmstPnN1YmguY29va2llX2hkci0+Yy5wZWVyX2luaXRbMF07CiAKLQlpZiAoIXNjdHBfcHJvY2Vzc19pbml0KG5ld19hc29jLCBjaHVuay0+Y2h1bmtfaGRyLT50eXBlLAorCWlmICghc2N0cF9wcm9jZXNzX2luaXQobmV3X2Fzb2MsIGNodW5rLAogCQkJICAgICAgICZjaHVuay0+c3ViaC5jb29raWVfaGRyLT5jLnBlZXJfYWRkciwKIAkJCSAgICAgICBwZWVyX2luaXQsIEdGUF9BVE9NSUMpKQogCQlnb3RvIG5vbWVtX2luaXQ7CkBAIC05NDIsMTggKzk0MSw5IEBACiB7CiAJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cmFuc3BvcnQgPSAoc3RydWN0IHNjdHBfdHJhbnNwb3J0ICopIGFyZzsKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqcmVwbHk7Ci0Jc2N0cF9zZW5kZXJfaGJfaW5mb190IGhiaW5mbzsKLQlzaXplX3QgcGF5bGVuID0gMDsKLQotCWhiaW5mby5wYXJhbV9oZHIudHlwZSA9IFNDVFBfUEFSQU1fSEVBUlRCRUFUX0lORk87Ci0JaGJpbmZvLnBhcmFtX2hkci5sZW5ndGggPSBodG9ucyhzaXplb2Yoc2N0cF9zZW5kZXJfaGJfaW5mb190KSk7Ci0JaGJpbmZvLmRhZGRyID0gdHJhbnNwb3J0LT5pcGFkZHI7Ci0JaGJpbmZvLnNlbnRfYXQgPSBqaWZmaWVzOwotCWhiaW5mby5oYl9ub25jZSA9IHRyYW5zcG9ydC0+aGJfbm9uY2U7CiAKIAkvKiBTZW5kIGEgaGVhcnRiZWF0IHRvIG91ciBwZWVyLiAgKi8KLQlwYXlsZW4gPSBzaXplb2Yoc2N0cF9zZW5kZXJfaGJfaW5mb190KTsKLQlyZXBseSA9IHNjdHBfbWFrZV9oZWFydGJlYXQoYXNvYywgdHJhbnNwb3J0LCAmaGJpbmZvLCBwYXlsZW4pOworCXJlcGx5ID0gc2N0cF9tYWtlX2hlYXJ0YmVhdChhc29jLCB0cmFuc3BvcnQpOwogCWlmICghcmVwbHkpCiAJCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX05PTUVNOwogCkBAIC0xNDY0LDggKzE0NTQsNyBAQAogCSAqIFZlcmlmaWNhdGlvbiBUYWcgYW5kIFBlZXJzIFZlcmlmaWNhdGlvbiB0YWcgaW50byBhIHJlc2VydmVkCiAJICogcGxhY2UgKGxvY2FsIHRpZS10YWcgYW5kIHBlciB0aWUtdGFnKSB3aXRoaW4gdGhlIHN0YXRlIGNvb2tpZS4KIAkgKi8KLQlpZiAoIXNjdHBfcHJvY2Vzc19pbml0KG5ld19hc29jLCBjaHVuay0+Y2h1bmtfaGRyLT50eXBlLAotCQkJICAgICAgIHNjdHBfc291cmNlKGNodW5rKSwKKwlpZiAoIXNjdHBfcHJvY2Vzc19pbml0KG5ld19hc29jLCBjaHVuaywgc2N0cF9zb3VyY2UoY2h1bmspLAogCQkJICAgICAgIChzY3RwX2luaXRfY2h1bmtfdCAqKWNodW5rLT5jaHVua19oZHIsCiAJCQkgICAgICAgR0ZQX0FUT01JQykpCiAJCWdvdG8gbm9tZW07CkBAIC0xNjk0LDggKzE2ODMsNyBAQAogCSAqLwogCXBlZXJfaW5pdCA9ICZjaHVuay0+c3ViaC5jb29raWVfaGRyLT5jLnBlZXJfaW5pdFswXTsKIAotCWlmICghc2N0cF9wcm9jZXNzX2luaXQobmV3X2Fzb2MsIGNodW5rLT5jaHVua19oZHItPnR5cGUsCi0JCQkgICAgICAgc2N0cF9zb3VyY2UoY2h1bmspLCBwZWVyX2luaXQsCisJaWYgKCFzY3RwX3Byb2Nlc3NfaW5pdChuZXdfYXNvYywgY2h1bmssIHNjdHBfc291cmNlKGNodW5rKSwgcGVlcl9pbml0LAogCQkJICAgICAgIEdGUF9BVE9NSUMpKQogCQlnb3RvIG5vbWVtOwogCkBAIC0xNzgwLDggKzE3NjgsNyBAQAogCSAqIHNpZGUgZWZmZWN0cy0taXQgaXMgc2FmZSB0byBydW4gdGhlbSBoZXJlLgogCSAqLwogCXBlZXJfaW5pdCA9ICZjaHVuay0+c3ViaC5jb29raWVfaGRyLT5jLnBlZXJfaW5pdFswXTsKLQlpZiAoIXNjdHBfcHJvY2Vzc19pbml0KG5ld19hc29jLCBjaHVuay0+Y2h1bmtfaGRyLT50eXBlLAotCQkJICAgICAgIHNjdHBfc291cmNlKGNodW5rKSwgcGVlcl9pbml0LAorCWlmICghc2N0cF9wcm9jZXNzX2luaXQobmV3X2Fzb2MsIGNodW5rLCBzY3RwX3NvdXJjZShjaHVuayksIHBlZXJfaW5pdCwKIAkJCSAgICAgICBHRlBfQVRPTUlDKSkKIAkJZ290byBub21lbTsKIApAQCAtMjQxMiw4ICsyMzk5LDE1IEBACiAKIAkvKiBTZWUgaWYgd2UgaGF2ZSBhbiBlcnJvciBjYXVzZSBjb2RlIGluIHRoZSBjaHVuay4gICovCiAJbGVuID0gbnRvaHMoY2h1bmstPmNodW5rX2hkci0+bGVuZ3RoKTsKLQlpZiAobGVuID49IHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcikgKyBzaXplb2Yoc3RydWN0IHNjdHBfZXJyaGRyKSkKKwlpZiAobGVuID49IHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcikgKyBzaXplb2Yoc3RydWN0IHNjdHBfZXJyaGRyKSkgeworCisJCXNjdHBfZXJyaGRyX3QgKmVycjsKKwkJc2N0cF93YWxrX2Vycm9ycyhlcnIsIGNodW5rLT5jaHVua19oZHIpOworCQlpZiAoKHZvaWQgKillcnIgIT0gKHZvaWQgKiljaHVuay0+Y2h1bmtfZW5kKQorCQkJcmV0dXJuIHNjdHBfc2ZfcGRpc2NhcmQoZXAsIGFzb2MsIHR5cGUsIGFyZywgY29tbWFuZHMpOworCiAJCWVycm9yID0gKChzY3RwX2Vycmhkcl90ICopY2h1bmstPnNrYi0+ZGF0YSktPmNhdXNlOworCX0KIAogCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfU0VUX1NLX0VSUiwgU0NUUF9FUlJPUihFQ09OTlJFU0VUKSk7CiAJLyogQVNTT0NfRkFJTEVEIHdpbGwgREVMRVRFX1RDQi4gKi8KQEAgLTMyMDQsNiArMzE5OCw3IEBACiAJCQkJCXNjdHBfY21kX3NlcV90ICpjb21tYW5kcykKIHsKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmsgPSBhcmc7CisJc2N0cF9lcnJoZHJfdCAqZXJyOwogCiAJaWYgKCFzY3RwX3Z0YWdfdmVyaWZ5KGNodW5rLCBhc29jKSkKIAkJcmV0dXJuIHNjdHBfc2ZfcGRpc2NhcmQoZXAsIGFzb2MsIHR5cGUsIGFyZywgY29tbWFuZHMpOwpAQCAtMzIxMiw2ICszMjA3LDEwIEBACiAJaWYgKCFzY3RwX2NodW5rX2xlbmd0aF92YWxpZChjaHVuaywgc2l6ZW9mKHNjdHBfb3BlcnJfY2h1bmtfdCkpKQogCQlyZXR1cm4gc2N0cF9zZl92aW9sYXRpb25fY2h1bmtsZW4oZXAsIGFzb2MsIHR5cGUsIGFyZywKIAkJCQkJCSAgY29tbWFuZHMpOworCXNjdHBfd2Fsa19lcnJvcnMoZXJyLCBjaHVuay0+Y2h1bmtfaGRyKTsKKwlpZiAoKHZvaWQgKillcnIgIT0gKHZvaWQgKiljaHVuay0+Y2h1bmtfZW5kKQorCQlyZXR1cm4gc2N0cF9zZl92aW9sYXRpb25fcGFyYW1sZW4oZXAsIGFzb2MsIHR5cGUsIGFyZywKKwkJCQkJCSAgKHZvaWQgKillcnIsIGNvbW1hbmRzKTsKIAogCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfUFJPQ0VTU19PUEVSUiwKIAkJCVNDVFBfQ0hVTksoY2h1bmspKTsKQEAgLTMzMjAsOCArMzMxOSwxMCBAQAogCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuayA9IGFyZzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gY2h1bmstPnNrYjsKIAlzY3RwX2NodW5raGRyX3QgKmNoOworCXNjdHBfZXJyaGRyX3QgKmVycjsKIAlfX3U4ICpjaF9lbmQ7CiAJaW50IG9vdGJfc2h1dF9hY2sgPSAwOworCWludCBvb3RiX2Nvb2tpZV9hY2sgPSAwOwogCiAJU0NUUF9JTkNfU1RBVFMoU0NUUF9NSUJfT1VUT0ZCTFVFUyk7CiAKQEAgLTMzNDYsNiArMzM0NywyMyBAQAogCQlpZiAoU0NUUF9DSURfQUJPUlQgPT0gY2gtPnR5cGUpCiAJCQlyZXR1cm4gc2N0cF9zZl9wZGlzY2FyZChlcCwgYXNvYywgdHlwZSwgYXJnLCBjb21tYW5kcyk7CiAKKwkJLyogUkZDIDguNCwgNykgSWYgdGhlIHBhY2tldCBjb250YWlucyBhICJTdGFsZSBjb29raWUiIEVSUk9SCisJCSAqIG9yIGEgQ09PS0lFIEFDSyB0aGUgU0NUUCBQYWNrZXQgc2hvdWxkIGJlIHNpbGVudGx5CisJCSAqIGRpc2NhcmRlZC4KKwkJICovCisKKwkJaWYgKFNDVFBfQ0lEX0NPT0tJRV9BQ0sgPT0gY2gtPnR5cGUpCisJCQlvb3RiX2Nvb2tpZV9hY2sgPSAxOworCisJCWlmIChTQ1RQX0NJRF9FUlJPUiA9PSBjaC0+dHlwZSkgeworCQkJc2N0cF93YWxrX2Vycm9ycyhlcnIsIGNoKSB7CisJCQkJaWYgKFNDVFBfRVJST1JfU1RBTEVfQ09PS0lFID09IGVyci0+Y2F1c2UpIHsKKwkJCQkJb290Yl9jb29raWVfYWNrID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKIAkJLyogUmVwb3J0IHZpb2xhdGlvbiBpZiBjaHVuayBsZW4gb3ZlcmZsb3dzICovCiAJCWNoX2VuZCA9ICgoX191OCAqKWNoKSArIFdPUkRfUk9VTkQobnRvaHMoY2gtPmxlbmd0aCkpOwogCQlpZiAoY2hfZW5kID4gc2tiX3RhaWxfcG9pbnRlcihza2IpKQpAQCAtMzM1Nyw2ICszMzc1LDggQEAKIAogCWlmIChvb3RiX3NodXRfYWNrKQogCQlyZXR1cm4gc2N0cF9zZl9zaHV0XzhfNF81KGVwLCBhc29jLCB0eXBlLCBhcmcsIGNvbW1hbmRzKTsKKwllbHNlIGlmIChvb3RiX2Nvb2tpZV9hY2spCisJCXJldHVybiBzY3RwX3NmX3BkaXNjYXJkKGVwLCBhc29jLCB0eXBlLCBhcmcsIGNvbW1hbmRzKTsKIAllbHNlCiAJCXJldHVybiBzY3RwX3NmX3RhYm9ydF84XzRfOChlcCwgYXNvYywgdHlwZSwgYXJnLCBjb21tYW5kcyk7CiB9CkBAIC00MzQzLDggKzQzNjMsOSBAQAogCiAvKgogICogSGFuZGxlIGEgcHJvdG9jb2wgdmlvbGF0aW9uIHdoZW4gdGhlIHBhcmFtZXRlciBsZW5ndGggaXMgaW52YWxpZC4KLSAqICJJbnZhbGlkIiBsZW5ndGggaXMgaWRlbnRpZmllZCBhcyBzbWFsbGVyIHRoYW4gdGhlIG1pbmltYWwgbGVuZ3RoIGEKLSAqIGdpdmVuIHBhcmFtZXRlciBjYW4gYmUuCisgKiBJZiB0aGUgbGVuZ3RoIGlzIHNtYWxsZXIgdGhhbiB0aGUgbWluaW11bSBsZW5ndGggb2YgYSBnaXZlbiBwYXJhbWV0ZXIsCisgKiBvciBhY2N1bXVsYXRlZCBsZW5ndGggaW4gbXVsdGkgcGFyYW1ldGVycyBleGNlZWRzIHRoZSBlbmQgb2YgdGhlIGNodW5rLAorICogdGhlIGxlbmd0aCBpcyBjb25zaWRlcmVkIGFzIGludmFsaWQuCiAgKi8KIHN0YXRpYyBzY3RwX2Rpc3Bvc2l0aW9uX3Qgc2N0cF9zZl92aW9sYXRpb25fcGFyYW1sZW4oCiAJCQkJICAgICBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsCkBAIC01MDU2LDYgKzUwNzcsMzAgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCisgKiBXaGVuIHRoZSBTQ1RQIHN0YWNrIGhhcyBubyBtb3JlIHVzZXIgZGF0YSB0byBzZW5kIG9yIHJldHJhbnNtaXQsIHRoaXMKKyAqIG5vdGlmaWNhdGlvbiBpcyBnaXZlbiB0byB0aGUgdXNlci4gQWxzbywgYXQgdGhlIHRpbWUgd2hlbiBhIHVzZXIgYXBwCisgKiBzdWJzY3JpYmVzIHRvIHRoaXMgZXZlbnQsIGlmIHRoZXJlIGlzIG5vIGRhdGEgdG8gYmUgc2VudCBvcgorICogcmV0cmFuc21pdCwgdGhlIHN0YWNrIHdpbGwgaW1tZWRpYXRlbHkgc2VuZCB1cCB0aGlzIG5vdGlmaWNhdGlvbi4KKyAqLworc2N0cF9kaXNwb3NpdGlvbl90IHNjdHBfc2ZfZG9fbm9fcGVuZGluZ190c24oCisJY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLAorCWNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorCWNvbnN0IHNjdHBfc3VidHlwZV90IHR5cGUsCisJdm9pZCAqYXJnLAorCXNjdHBfY21kX3NlcV90ICpjb21tYW5kcykKK3sKKwlzdHJ1Y3Qgc2N0cF91bHBldmVudCAqZXZlbnQ7CisKKwlldmVudCA9IHNjdHBfdWxwZXZlbnRfbWFrZV9zZW5kZXJfZHJ5X2V2ZW50KGFzb2MsIEdGUF9BVE9NSUMpOworCWlmICghZXZlbnQpCisJCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX05PTUVNOworCisJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9FVkVOVF9VTFAsIFNDVFBfVUxQRVZFTlQoZXZlbnQpKTsKKworCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0NPTlNVTUU7Cit9CisKKy8qCiAgKiBTdGFydCB0aGUgc2h1dGRvd24gbmVnb3RpYXRpb24uCiAgKgogICogRnJvbSBTZWN0aW9uIDkuMjoKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX3N0YXRldGFibGUuYyBiL25ldC9zY3RwL3NtX3N0YXRldGFibGUuYwppbmRleCA1NDZkNDM4Ny4uMDMzOGRjNiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jCisrKyBiL25ldC9zY3RwL3NtX3N0YXRldGFibGUuYwpAQCAtMTA3LDggKzEwNyw2IEBACiAjZGVmaW5lIFRZUEVfU0NUUF9GVU5DKGZ1bmMpIHsuZm4gPSBmdW5jLCAubmFtZSA9ICNmdW5jfQogCiAjZGVmaW5lIFRZUEVfU0NUUF9EQVRBIHsgXAotCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfb290YiksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCiAJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9vb3RiKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXApAQCAtMTI4LDggKzEyNiw2IEBACiB9IC8qIFRZUEVfU0NUUF9EQVRBICovCiAKICNkZWZpbmUgVFlQRV9TQ1RQX0lOSVQgeyBcCi0JLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0JVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9idWcpLCBcCiAJLyogU0NUUF9TVEFURV9DTE9TRUQgKi8gXAogCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZG9fNV8xQl9pbml0KSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXApAQCAtMTQ5LDggKzE0NSw2IEBACiB9IC8qIFRZUEVfU0NUUF9JTklUICovCiAKICNkZWZpbmUgVFlQRV9TQ1RQX0lOSVRfQUNLIHsgXAotCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfb290YiksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCiAJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kb181XzJfM19pbml0YWNrKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXApAQCAtMTcwLDggKzE2NCw2IEBACiB9IC8qIFRZUEVfU0NUUF9JTklUX0FDSyAqLwogCiAjZGVmaW5lIFRZUEVfU0NUUF9TQUNLIHsgXAotCS8qICBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX29vdGIpLCBcCiAJLyogU0NUUF9TVEFURV9DTE9TRUQgKi8gXAogCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfb290YiksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKQEAgLTE5MSw4ICsxODMsNiBAQAogfSAvKiBUWVBFX1NDVFBfU0FDSyAqLwogCiAjZGVmaW5lIFRZUEVfU0NUUF9IRUFSVEJFQVQgeyBcCi0JLyogIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfb290YiksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCiAJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9vb3RiKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXApAQCAtMjEzLDggKzIwMyw2IEBACiB9IC8qIFRZUEVfU0NUUF9IRUFSVEJFQVQgKi8KIAogI2RlZmluZSBUWVBFX1NDVFBfSEVBUlRCRUFUX0FDSyB7IFwKLQkvKiAgU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0JVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9vb3RiKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKIAlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX29vdGIpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCkBAIC0yMzQsOCArMjIyLDYgQEAKIH0gLyogVFlQRV9TQ1RQX0hFQVJUQkVBVF9BQ0sgKi8KIAogI2RlZmluZSBUWVBFX1NDVFBfQUJPUlQgeyBcCi0JLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0JVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9vb3RiKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKIAlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3BkaXNjYXJkKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXApAQCAtMjU1LDggKzI0MSw2IEBACiB9IC8qIFRZUEVfU0NUUF9BQk9SVCAqLwogCiAjZGVmaW5lIFRZUEVfU0NUUF9TSFVURE9XTiB7IFwKLQkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX29vdGIpLCBcCiAJLyogU0NUUF9TVEFURV9DTE9TRUQgKi8gXAogCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfb290YiksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKQEAgLTI3Niw4ICsyNjAsNiBAQAogfSAvKiBUWVBFX1NDVFBfU0hVVERPV04gKi8KIAogI2RlZmluZSBUWVBFX1NDVFBfU0hVVERPV05fQUNLIHsgXAotCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfb290YiksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCiAJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9vb3RiKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXApAQCAtMjk3LDggKzI3OSw2IEBACiB9IC8qIFRZUEVfU0NUUF9TSFVURE9XTl9BQ0sgKi8KIAogI2RlZmluZSBUWVBFX1NDVFBfRVJST1IgeyBcCi0JLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0JVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9vb3RiKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKIAlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX29vdGIpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCkBAIC0zMTgsOCArMjk4LDYgQEAKIH0gLyogVFlQRV9TQ1RQX0VSUk9SICovCiAKICNkZWZpbmUgVFlQRV9TQ1RQX0NPT0tJRV9FQ0hPIHsgXAotCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfYnVnKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKIAlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2RvXzVfMURfY2UpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCkBAIC0zMzksOCArMzE3LDYgQEAKIH0gLyogVFlQRV9TQ1RQX0NPT0tJRV9FQ0hPICovCiAKICNkZWZpbmUgVFlQRV9TQ1RQX0NPT0tJRV9BQ0sgeyBcCi0JLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0JVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9vb3RiKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKIAlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCkBAIC0zNjAsOCArMzM2LDYgQEAKIH0gLyogVFlQRV9TQ1RQX0NPT0tJRV9BQ0sgKi8KIAogI2RlZmluZSBUWVBFX1NDVFBfRUNOX0VDTkUgeyBcCi0JLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0JVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9vb3RiKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKIAlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCkBAIC0zODEsOCArMzU1LDYgQEAKIH0gLyogVFlQRV9TQ1RQX0VDTl9FQ05FICovCiAKICNkZWZpbmUgVFlQRV9TQ1RQX0VDTl9DV1IgeyBcCi0JLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0JVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9vb3RiKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKIAlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCkBAIC00MDIsOCArMzc0LDYgQEAKIH0gLyogVFlQRV9TQ1RQX0VDTl9DV1IgKi8KIAogI2RlZmluZSBUWVBFX1NDVFBfU0hVVERPV05fQ09NUExFVEUgeyBcCi0JLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0JVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9vb3RiKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKIAlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCkBAIC00NDYsOCArNDE2LDYgQEAKIH07IC8qIHN0YXRlX2ZuX3QgY2h1bmtfZXZlbnRfdGFibGVbXVtdICovCiAKICNkZWZpbmUgVFlQRV9TQ1RQX0FTQ09ORiB7IFwKLQkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX29vdGIpLCBcCiAJLyogU0NUUF9TVEFURV9DTE9TRUQgKi8gXAogCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZGlzY2FyZF9jaHVuayksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKQEAgLTQ2Nyw4ICs0MzUsNiBAQAogfSAvKiBUWVBFX1NDVFBfQVNDT05GICovCiAKICNkZWZpbmUgVFlQRV9TQ1RQX0FTQ09ORl9BQ0sgeyBcCi0JLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0JVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9vb3RiKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKIAlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCkBAIC00OTYsOCArNDYyLDYgQEAKIH07IC8qc3RhdGVfZm5fdCBhZGRpcF9jaHVua19ldmVudF90YWJsZVtdW10gKi8KIAogI2RlZmluZSBUWVBFX1NDVFBfRldEX1RTTiB7IFwKLQkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX29vdGIpLCBcCiAJLyogU0NUUF9TVEFURV9DTE9TRUQgKi8gXAogCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfb290YiksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKQEAgLTUyNCw4ICs0ODgsNiBAQAogfTsgLypzdGF0ZV9mbl90IHByc2N0cF9jaHVua19ldmVudF90YWJsZVtdW10gKi8KIAogI2RlZmluZSBUWVBFX1NDVFBfQVVUSCB7IFwKLQkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX29vdGIpLCBcCiAJLyogU0NUUF9TVEFURV9DTE9TRUQgKi8gXAogCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfb290YiksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKQEAgLTU1Myw4ICs1MTUsNiBAQAogCiBzdGF0aWMgY29uc3Qgc2N0cF9zbV90YWJsZV9lbnRyeV90CiBjaHVua19ldmVudF90YWJsZV91bmtub3duW1NDVFBfU1RBVEVfTlVNX1NUQVRFU10gPSB7Ci0JLyogU0NUUF9TVEFURV9FTVBUWSAqLwotCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfb290YiksCiAJLyogU0NUUF9TVEFURV9DTE9TRUQgKi8KIAlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX29vdGIpLAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8KQEAgLTU3NSw4ICs1MzUsNiBAQAogCiAKICNkZWZpbmUgVFlQRV9TQ1RQX1BSSU1JVElWRV9BU1NPQ0lBVEUgIHsgXAotCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfYnVnKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKIAlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2RvX3BybV9hc29jKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXApAQCAtNTk2LDggKzU1NCw2IEBACiB9IC8qIFRZUEVfU0NUUF9QUklNSVRJVkVfQVNTT0NJQVRFICovCiAKICNkZWZpbmUgVFlQRV9TQ1RQX1BSSU1JVElWRV9TSFVURE9XTiAgeyBcCi0JLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0JVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9idWcpLCBcCiAJLyogU0NUUF9TVEFURV9DTE9TRUQgKi8gXAogCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZXJyb3JfY2xvc2VkKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXApAQCAtNjE3LDggKzU3Myw2IEBACiB9IC8qIFRZUEVfU0NUUF9QUklNSVRJVkVfU0hVVERPV04gKi8KIAogI2RlZmluZSBUWVBFX1NDVFBfUFJJTUlUSVZFX0FCT1JUICB7IFwKLQkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2J1ZyksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCiAJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9lcnJvcl9jbG9zZWQpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCkBAIC02MzgsOCArNTkyLDYgQEAKIH0gLyogVFlQRV9TQ1RQX1BSSU1JVElWRV9BQk9SVCAqLwogCiAjZGVmaW5lIFRZUEVfU0NUUF9QUklNSVRJVkVfU0VORCAgeyBcCi0JLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0JVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9idWcpLCBcCiAJLyogU0NUUF9TVEFURV9DTE9TRUQgKi8gXAogCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZXJyb3JfY2xvc2VkKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXApAQCAtNjU5LDggKzYxMSw2IEBACiB9IC8qIFRZUEVfU0NUUF9QUklNSVRJVkVfU0VORCAqLwogCiAjZGVmaW5lIFRZUEVfU0NUUF9QUklNSVRJVkVfUkVRVUVTVEhFQVJUQkVBVCAgeyBcCi0JLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0JVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9idWcpLCBcCiAJLyogU0NUUF9TVEFURV9DTE9TRUQgKi8gXAogCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZXJyb3JfY2xvc2VkKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXApAQCAtNjgwLDggKzYzMCw2IEBACiB9IC8qIFRZUEVfU0NUUF9QUklNSVRJVkVfUkVRVUVTVEhFQVJUQkVBVCAqLwogCiAjZGVmaW5lIFRZUEVfU0NUUF9QUklNSVRJVkVfQVNDT05GIHsgXAotCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfYnVnKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKIAlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Vycm9yX2Nsb3NlZCksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKQEAgLTcxMyw4ICs2NjEsNiBAQAogfTsKIAogI2RlZmluZSBUWVBFX1NDVFBfT1RIRVJfTk9fUEVORElOR19UU04gIHsgXAotCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfYnVnKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKIAlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2lnbm9yZV9vdGhlciksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKQEAgLTcyMiw3ICs2NjgsNyBAQAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRCAqLyBcCiAJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9pZ25vcmVfb3RoZXIpLCBcCiAJLyogU0NUUF9TVEFURV9FU1RBQkxJU0hFRCAqLyBcCi0JVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9pZ25vcmVfb3RoZXIpLCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kb19ub19wZW5kaW5nX3RzbiksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcgKi8gXAogCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZG9fOV8yX3N0YXJ0X3NodXRkb3duKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCAqLyBcCkBAIC03MzQsOCArNjgwLDYgQEAKIH0KIAogI2RlZmluZSBUWVBFX1NDVFBfT1RIRVJfSUNNUF9QUk9UT19VTlJFQUNIICB7IFwKLQkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2J1ZyksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCiAJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9pZ25vcmVfb3RoZXIpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCkBAIC03NjAsOCArNzA0LDYgQEAKIH07CiAKICNkZWZpbmUgVFlQRV9TQ1RQX0VWRU5UX1RJTUVPVVRfTk9ORSB7IFwKLQkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2J1ZyksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCiAJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9idWcpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCkBAIC03ODEsOCArNzIzLDYgQEAKIH0KIAogI2RlZmluZSBUWVBFX1NDVFBfRVZFTlRfVElNRU9VVF9UMV9DT09LSUUgeyBcCi0JLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0JVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9idWcpLCBcCiAJLyogU0NUUF9TVEFURV9DTE9TRUQgKi8gXAogCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdGltZXJfaWdub3JlKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXApAQCAtODAyLDggKzc0Miw2IEBACiB9CiAKICNkZWZpbmUgVFlQRV9TQ1RQX0VWRU5UX1RJTUVPVVRfVDFfSU5JVCB7IFwKLQkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2J1ZyksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCiAJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl90aW1lcl9pZ25vcmUpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCkBAIC04MjMsOCArNzYxLDYgQEAKIH0KIAogI2RlZmluZSBUWVBFX1NDVFBfRVZFTlRfVElNRU9VVF9UMl9TSFVURE9XTiB7IFwKLQkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2J1ZyksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCiAJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl90aW1lcl9pZ25vcmUpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCkBAIC04NDQsOCArNzgwLDYgQEAKIH0KIAogI2RlZmluZSBUWVBFX1NDVFBfRVZFTlRfVElNRU9VVF9UM19SVFggeyBcCi0JLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0JVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9idWcpLCBcCiAJLyogU0NUUF9TVEFURV9DTE9TRUQgKi8gXAogCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdGltZXJfaWdub3JlKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXApAQCAtODY1LDggKzc5OSw2IEBACiB9CiAKICNkZWZpbmUgVFlQRV9TQ1RQX0VWRU5UX1RJTUVPVVRfVDRfUlRPIHsgXAotCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfYnVnKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKIAlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3RpbWVyX2lnbm9yZSksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKQEAgLTg4Niw4ICs4MTgsNiBAQAogfQogCiAjZGVmaW5lIFRZUEVfU0NUUF9FVkVOVF9USU1FT1VUX1Q1X1NIVVRET1dOX0dVQVJEIHsgXAotCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfYnVnKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKIAlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3RpbWVyX2lnbm9yZSksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKQEAgLTkwNyw4ICs4MzcsNiBAQAogfQogCiAjZGVmaW5lIFRZUEVfU0NUUF9FVkVOVF9USU1FT1VUX0hFQVJUQkVBVCB7IFwKLQkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2J1ZyksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCiAJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl90aW1lcl9pZ25vcmUpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCkBAIC05MjgsOCArODU2LDYgQEAKIH0KIAogI2RlZmluZSBUWVBFX1NDVFBfRVZFTlRfVElNRU9VVF9TQUNLIHsgXAotCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfYnVnKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKIAlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3RpbWVyX2lnbm9yZSksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKQEAgLTk0OSw4ICs4NzUsNiBAQAogfQogCiAjZGVmaW5lIFRZUEVfU0NUUF9FVkVOVF9USU1FT1VUX0FVVE9DTE9TRSB7IFwKLQkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3RpbWVyX2lnbm9yZSksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCiAJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl90aW1lcl9pZ25vcmUpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zb2NrZXQuYyBiL25ldC9zY3RwL3NvY2tldC5jCmluZGV4IGRlYjgyZTMuLjY3NjY5MTMgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NvY2tldC5jCisrKyBiL25ldC9zY3RwL3NvY2tldC5jCkBAIC02NTgsMTEgKzY1OCwxNSBAQAogCQkJZ290byBlcnJfYmluZHhfcmVtOwogCQl9CiAKLQkJaWYgKHNhX2FkZHItPnY0LnNpbl9wb3J0ICE9IGh0b25zKGJwLT5wb3J0KSkgeworCQlpZiAoc2FfYWRkci0+djQuc2luX3BvcnQgJiYKKwkJICAgIHNhX2FkZHItPnY0LnNpbl9wb3J0ICE9IGh0b25zKGJwLT5wb3J0KSkgewogCQkJcmV0dmFsID0gLUVJTlZBTDsKIAkJCWdvdG8gZXJyX2JpbmR4X3JlbTsKIAkJfQogCisJCWlmICghc2FfYWRkci0+djQuc2luX3BvcnQpCisJCQlzYV9hZGRyLT52NC5zaW5fcG9ydCA9IGh0b25zKGJwLT5wb3J0KTsKKwogCQkvKiBGSVhNRSAtIFRoZXJlIGlzIHByb2JhYmx5IGEgbmVlZCB0byBjaGVjayBpZiBzay0+c2tfc2FkZHIgYW5kCiAJCSAqIHNrLT5za19yY3ZfYWRkciBhcmUgY3VycmVudGx5IHNldCB0byBvbmUgb2YgdGhlIGFkZHJlc3NlcyB0bwogCQkgKiBiZSByZW1vdmVkLiBUaGlzIGlzIHNvbWV0aGluZyB3aGljaCBuZWVkcyB0byBiZSBsb29rZWQgaW50bwpAQCAtMTQ5Miw3ICsxNDk2LDcgQEAKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bms7CiAJdW5pb24gc2N0cF9hZGRyIHRvOwogCXN0cnVjdCBzb2NrYWRkciAqbXNnX25hbWUgPSBOVUxMOwotCXN0cnVjdCBzY3RwX3NuZHJjdmluZm8gZGVmYXVsdF9zaW5mbyA9IHsgMCB9OworCXN0cnVjdCBzY3RwX3NuZHJjdmluZm8gZGVmYXVsdF9zaW5mbzsKIAlzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICpzaW5mbzsKIAlzdHJ1Y3Qgc2N0cF9pbml0bXNnICpzaW5pdDsKIAlzY3RwX2Fzc29jX3QgYXNzb2NpZCA9IDA7CkBAIC0xNzU2LDYgKzE3NjAsNyBAQAogCQkvKiBJZiB0aGUgdXNlciBkaWRuJ3Qgc3BlY2lmeSBTTkRSQ1ZJTkZPLCBtYWtlIHVwIG9uZSB3aXRoCiAJCSAqIHNvbWUgZGVmYXVsdHMuCiAJCSAqLworCQltZW1zZXQoJmRlZmF1bHRfc2luZm8sIDAsIHNpemVvZihkZWZhdWx0X3NpbmZvKSk7CiAJCWRlZmF1bHRfc2luZm8uc2luZm9fc3RyZWFtID0gYXNvYy0+ZGVmYXVsdF9zdHJlYW07CiAJCWRlZmF1bHRfc2luZm8uc2luZm9fZmxhZ3MgPSBhc29jLT5kZWZhdWx0X2ZsYWdzOwogCQlkZWZhdWx0X3NpbmZvLnNpbmZvX3BwaWQgPSBhc29jLT5kZWZhdWx0X3BwaWQ7CkBAIC0xNzg2LDEyICsxNzkxLDEwIEBACiAJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCi0JaWYgKHNpbmZvKSB7Ci0JCS8qIENoZWNrIGZvciBpbnZhbGlkIHN0cmVhbS4gKi8KLQkJaWYgKHNpbmZvLT5zaW5mb19zdHJlYW0gPj0gYXNvYy0+Yy5zaW5pdF9udW1fb3N0cmVhbXMpIHsKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dF9mcmVlOwotCQl9CisJLyogQ2hlY2sgZm9yIGludmFsaWQgc3RyZWFtLiAqLworCWlmIChzaW5mby0+c2luZm9fc3RyZWFtID49IGFzb2MtPmMuc2luaXRfbnVtX29zdHJlYW1zKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCiAJdGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBtc2ctPm1zZ19mbGFncyAmIE1TR19ET05UV0FJVCk7CkBAIC0yMjgzLDcgKzIyODYsNyBAQAogCQkJdHJhbnMtPnBhcmFtX2ZsYWdzID0KIAkJCQkodHJhbnMtPnBhcmFtX2ZsYWdzICYgflNQUF9QTVRVRCkgfCBwbXR1ZF9jaGFuZ2U7CiAJCQlpZiAodXBkYXRlKSB7Ci0JCQkJc2N0cF90cmFuc3BvcnRfcG10dSh0cmFucyk7CisJCQkJc2N0cF90cmFuc3BvcnRfcG10dSh0cmFucywgc2N0cF9vcHQyc2soc3ApKTsKIAkJCQlzY3RwX2Fzc29jX3N5bmNfcG10dShhc29jKTsKIAkJCX0KIAkJfSBlbHNlIGlmIChhc29jKSB7CkBAIC0zMjE1LDE0ICszMjE4LDkgQEAKIAlpZiAob3B0bGVuIDwgc2l6ZW9mKHN0cnVjdCBzY3RwX2htYWNhbGdvKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlobWFjcyA9IGttYWxsb2Mob3B0bGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWhtYWNzKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWlmIChjb3B5X2Zyb21fdXNlcihobWFjcywgb3B0dmFsLCBvcHRsZW4pKSB7Ci0JCWVyciA9IC1FRkFVTFQ7Ci0JCWdvdG8gb3V0OwotCX0KKwlobWFjcz0gbWVtZHVwX3VzZXIob3B0dmFsLCBvcHRsZW4pOworCWlmIChJU19FUlIoaG1hY3MpKQorCQlyZXR1cm4gUFRSX0VSUihobWFjcyk7CiAKIAlpZGVudHMgPSBobWFjcy0+c2htYWNfbnVtX2lkZW50czsKIAlpZiAoaWRlbnRzID09IDAgfHwgaWRlbnRzID4gU0NUUF9BVVRIX05VTV9ITUFDUyB8fApAQCAtMzI1NywxNCArMzI1NSw5IEBACiAJaWYgKG9wdGxlbiA8PSBzaXplb2Yoc3RydWN0IHNjdHBfYXV0aGtleSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JYXV0aGtleSA9IGttYWxsb2Mob3B0bGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWF1dGhrZXkpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKGF1dGhrZXksIG9wdHZhbCwgb3B0bGVuKSkgewotCQlyZXQgPSAtRUZBVUxUOwotCQlnb3RvIG91dDsKLQl9CisJYXV0aGtleT0gbWVtZHVwX3VzZXIob3B0dmFsLCBvcHRsZW4pOworCWlmIChJU19FUlIoYXV0aGtleSkpCisJCXJldHVybiBQVFJfRVJSKGF1dGhrZXkpOwogCiAJaWYgKGF1dGhrZXktPnNjYV9rZXlsZW5ndGggPiBvcHRsZW4gLSBzaXplb2Yoc3RydWN0IHNjdHBfYXV0aGtleSkpIHsKIAkJcmV0ID0gLUVJTlZBTDsKQEAgLTUyODMsNiArNTI3Niw1NSBAQAogCXJldHVybiAwOwogfQogCisvKgorICogOC4yLjYuIEdldCB0aGUgQ3VycmVudCBJZGVudGlmaWVycyBvZiBBc3NvY2lhdGlvbnMKKyAqICAgICAgICAoU0NUUF9HRVRfQVNTT0NfSURfTElTVCkKKyAqCisgKiBUaGlzIG9wdGlvbiBnZXRzIHRoZSBjdXJyZW50IGxpc3Qgb2YgU0NUUCBhc3NvY2lhdGlvbiBpZGVudGlmaWVycyBvZgorICogdGhlIFNDVFAgYXNzb2NpYXRpb25zIGhhbmRsZWQgYnkgYSBvbmUtdG8tbWFueSBzdHlsZSBzb2NrZXQuCisgKi8KK3N0YXRpYyBpbnQgc2N0cF9nZXRzb2Nrb3B0X2Fzc29jX2lkcyhzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4sCisJCQkJICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3sKKwlzdHJ1Y3Qgc2N0cF9zb2NrICpzcCA9IHNjdHBfc2soc2spOworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOworCXN0cnVjdCBzY3RwX2Fzc29jX2lkcyAqaWRzOworCXUzMiBudW0gPSAwOworCisJaWYgKHNjdHBfc3R5bGUoc2ssIFRDUCkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmIChsZW4gPCBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfaWRzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFzb2MsICYoc3AtPmVwLT5hc29jcyksIGFzb2NzKSB7CisJCW51bSsrOworCX0KKworCWlmIChsZW4gPCBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfaWRzKSArIHNpemVvZihzY3RwX2Fzc29jX3QpICogbnVtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY19pZHMpICsgc2l6ZW9mKHNjdHBfYXNzb2NfdCkgKiBudW07CisKKwlpZHMgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFpZHMpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlkcy0+Z2FpZHNfbnVtYmVyX29mX2lkcyA9IG51bTsKKwludW0gPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkoYXNvYywgJihzcC0+ZXAtPmFzb2NzKSwgYXNvY3MpIHsKKwkJaWRzLT5nYWlkc19hc3NvY19pZFtudW0rK10gPSBhc29jLT5hc3NvY19pZDsKKwl9CisKKwlpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pIHx8IGNvcHlfdG9fdXNlcihvcHR2YWwsIGlkcywgbGVuKSkgeworCQlrZnJlZShpZHMpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlrZnJlZShpZHMpOworCXJldHVybiAwOworfQorCiBTQ1RQX1NUQVRJQyBpbnQgc2N0cF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJCQljaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCiB7CkBAIC01NDE1LDYgKzU0NTcsOSBAQAogCWNhc2UgU0NUUF9HRVRfQVNTT0NfTlVNQkVSOgogCQlyZXR2YWwgPSBzY3RwX2dldHNvY2tvcHRfYXNzb2NfbnVtYmVyKHNrLCBsZW4sIG9wdHZhbCwgb3B0bGVuKTsKIAkJYnJlYWs7CisJY2FzZSBTQ1RQX0dFVF9BU1NPQ19JRF9MSVNUOgorCQlyZXR2YWwgPSBzY3RwX2dldHNvY2tvcHRfYXNzb2NfaWRzKHNrLCBsZW4sIG9wdHZhbCwgb3B0bGVuKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dmFsID0gLUVOT1BST1RPT1BUOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3RyYW5zcG9ydC5jIGIvbmV0L3NjdHAvdHJhbnNwb3J0LmMKaW5kZXggZDNhZTQ5My4uMzk0YzU3YyAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvdHJhbnNwb3J0LmMKKysrIGIvbmV0L3NjdHAvdHJhbnNwb3J0LmMKQEAgLTIxMSwxNSArMjExLDE3IEBACiB9CiAKIC8qIEluaXRpYWxpemUgdGhlIHBtdHUgb2YgYSB0cmFuc3BvcnQuICovCi12b2lkIHNjdHBfdHJhbnNwb3J0X3BtdHUoc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cmFuc3BvcnQpCit2b2lkIHNjdHBfdHJhbnNwb3J0X3BtdHUoc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cmFuc3BvcnQsIHN0cnVjdCBzb2NrICpzaykKIHsKLQlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7CisJLyogSWYgd2UgZG9uJ3QgaGF2ZSBhIGZyZXNoIHJvdXRlLCBsb29rIG9uZSB1cCAqLworCWlmICghdHJhbnNwb3J0LT5kc3QgfHwgdHJhbnNwb3J0LT5kc3QtPm9ic29sZXRlID4gMSkgeworCQlkc3RfcmVsZWFzZSh0cmFuc3BvcnQtPmRzdCk7CisJCXRyYW5zcG9ydC0+YWZfc3BlY2lmaWMtPmdldF9kc3QodHJhbnNwb3J0LCAmdHJhbnNwb3J0LT5zYWRkciwKKwkJCQkJCSZ0cmFuc3BvcnQtPmZsLCBzayk7CisJfQogCi0JZHN0ID0gdHJhbnNwb3J0LT5hZl9zcGVjaWZpYy0+Z2V0X2RzdChOVUxMLCAmdHJhbnNwb3J0LT5pcGFkZHIsIE5VTEwpOwotCi0JaWYgKGRzdCkgewotCQl0cmFuc3BvcnQtPnBhdGhtdHUgPSBkc3RfbXR1KGRzdCk7Ci0JCWRzdF9yZWxlYXNlKGRzdCk7CisJaWYgKHRyYW5zcG9ydC0+ZHN0KSB7CisJCXRyYW5zcG9ydC0+cGF0aG10dSA9IGRzdF9tdHUodHJhbnNwb3J0LT5kc3QpOwogCX0gZWxzZQogCQl0cmFuc3BvcnQtPnBhdGhtdHUgPSBTQ1RQX0RFRkFVTFRfTUFYU0VHTUVOVDsKIH0KQEAgLTI3MCwyMiArMjcyLDE5IEBACiB7CiAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MgPSB0cmFuc3BvcnQtPmFzb2M7CiAJc3RydWN0IHNjdHBfYWYgKmFmID0gdHJhbnNwb3J0LT5hZl9zcGVjaWZpYzsKLQl1bmlvbiBzY3RwX2FkZHIgKmRhZGRyID0gJnRyYW5zcG9ydC0+aXBhZGRyOwotCXN0cnVjdCBkc3RfZW50cnkgKmRzdDsKIAotCWRzdCA9IGFmLT5nZXRfZHN0KGFzb2MsIGRhZGRyLCBzYWRkcik7CisJYWYtPmdldF9kc3QodHJhbnNwb3J0LCBzYWRkciwgJnRyYW5zcG9ydC0+ZmwsIHNjdHBfb3B0MnNrKG9wdCkpOwogCiAJaWYgKHNhZGRyKQogCQltZW1jcHkoJnRyYW5zcG9ydC0+c2FkZHIsIHNhZGRyLCBzaXplb2YodW5pb24gc2N0cF9hZGRyKSk7CiAJZWxzZQotCQlhZi0+Z2V0X3NhZGRyKG9wdCwgYXNvYywgZHN0LCBkYWRkciwgJnRyYW5zcG9ydC0+c2FkZHIpOworCQlhZi0+Z2V0X3NhZGRyKG9wdCwgdHJhbnNwb3J0LCAmdHJhbnNwb3J0LT5mbCk7CiAKLQl0cmFuc3BvcnQtPmRzdCA9IGRzdDsKIAlpZiAoKHRyYW5zcG9ydC0+cGFyYW1fZmxhZ3MgJiBTUFBfUE1UVURfRElTQUJMRSkgJiYgdHJhbnNwb3J0LT5wYXRobXR1KSB7CiAJCXJldHVybjsKIAl9Ci0JaWYgKGRzdCkgewotCQl0cmFuc3BvcnQtPnBhdGhtdHUgPSBkc3RfbXR1KGRzdCk7CisJaWYgKHRyYW5zcG9ydC0+ZHN0KSB7CisJCXRyYW5zcG9ydC0+cGF0aG10dSA9IGRzdF9tdHUodHJhbnNwb3J0LT5kc3QpOwogCiAJCS8qIEluaXRpYWxpemUgc2stPnNrX3Jjdl9zYWRkciwgaWYgdGhlIHRyYW5zcG9ydCBpcyB0aGUKIAkJICogYXNzb2NpYXRpb24ncyBhY3RpdmUgcGF0aCBmb3IgZ2V0c29ja25hbWUoKS4KZGlmZiAtLWdpdCBhL25ldC9zY3RwL3VscGV2ZW50LmMgYi9uZXQvc2N0cC91bHBldmVudC5jCmluZGV4IDYxYjFmNWEuLmU3MGU1ZmMgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3VscGV2ZW50LmMKKysrIGIvbmV0L3NjdHAvdWxwZXZlbnQuYwpAQCAtODQzLDcgKzg0Myw3IEBACiAJYWsgPSAoc3RydWN0IHNjdHBfYXV0aGtleV9ldmVudCAqKQogCQlza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhrZXlfZXZlbnQpKTsKIAotCWFrLT5hdXRoX3R5cGUgPSBTQ1RQX0FVVEhFTlRJQ0FUSU9OX0lORElDQVRJT047CisJYWstPmF1dGhfdHlwZSA9IFNDVFBfQVVUSEVOVElDQVRJT05fRVZFTlQ7CiAJYWstPmF1dGhfZmxhZ3MgPSAwOwogCWFrLT5hdXRoX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoa2V5X2V2ZW50KTsKIApAQCAtODYyLDYgKzg2MiwzNCBAQAogCXJldHVybiBOVUxMOwogfQogCisvKgorICogU29ja2V0IEV4dGVuc2lvbnMgZm9yIFNDVFAKKyAqIDYuMy4xMC4gU0NUUF9TRU5ERVJfRFJZX0VWRU5UCisgKi8KK3N0cnVjdCBzY3RwX3VscGV2ZW50ICpzY3RwX3VscGV2ZW50X21ha2Vfc2VuZGVyX2RyeV9ldmVudCgKKwljb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCBzY3RwX3VscGV2ZW50ICpldmVudDsKKwlzdHJ1Y3Qgc2N0cF9zZW5kZXJfZHJ5X2V2ZW50ICpzZHJ5OworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlldmVudCA9IHNjdHBfdWxwZXZlbnRfbmV3KHNpemVvZihzdHJ1Y3Qgc2N0cF9zZW5kZXJfZHJ5X2V2ZW50KSwKKwkJCQkgIE1TR19OT1RJRklDQVRJT04sIGdmcCk7CisJaWYgKCFldmVudCkKKwkJcmV0dXJuIE5VTEw7CisKKwlza2IgPSBzY3RwX2V2ZW50MnNrYihldmVudCk7CisJc2RyeSA9IChzdHJ1Y3Qgc2N0cF9zZW5kZXJfZHJ5X2V2ZW50ICopCisJCXNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IHNjdHBfc2VuZGVyX2RyeV9ldmVudCkpOworCisJc2RyeS0+c2VuZGVyX2RyeV90eXBlID0gU0NUUF9TRU5ERVJfRFJZX0VWRU5UOworCXNkcnktPnNlbmRlcl9kcnlfZmxhZ3MgPSAwOworCXNkcnktPnNlbmRlcl9kcnlfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3NlbmRlcl9kcnlfZXZlbnQpOworCXNjdHBfdWxwZXZlbnRfc2V0X293bmVyKGV2ZW50LCBhc29jKTsKKwlzZHJ5LT5zZW5kZXJfZHJ5X2Fzc29jX2lkID0gc2N0cF9hc3NvYzJpZChhc29jKTsKKworCXJldHVybiBldmVudDsKK30KIAogLyogUmV0dXJuIHRoZSBub3RpZmljYXRpb24gdHlwZSwgYXNzdW1pbmcgdGhpcyBpcyBhIG5vdGlmaWNhdGlvbgogICogZXZlbnQuCmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmMKaW5kZXggYzJlZDdjOS4uMDJkYzgyZCAxMDA2NDQKLS0tIGEvbmV0L3NvY2tldC5jCisrKyBiL25ldC9zb2NrZXQuYwpAQCAtNTQyLDExICs1NDIsMTAgQEAKIH0KIEVYUE9SVF9TWU1CT0woc29ja190eF90aW1lc3RhbXApOwogCi1zdGF0aWMgaW5saW5lIGludCBfX3NvY2tfc2VuZG1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCi0JCQkJIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCitzdGF0aWMgaW5saW5lIGludCBfX3NvY2tfc2VuZG1zZ19ub3NlYyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCisJCQkJICAgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCiB7CiAJc3RydWN0IHNvY2tfaW9jYiAqc2kgPSBraW9jYl90b19zaW9jYihpb2NiKTsKLQlpbnQgZXJyOwogCiAJc29ja191cGRhdGVfY2xhc3NpZChzb2NrLT5zayk7CiAKQEAgLTU1NSwxMyArNTU0LDE3IEBACiAJc2ktPm1zZyA9IG1zZzsKIAlzaS0+c2l6ZSA9IHNpemU7CiAKLQllcnIgPSBzZWN1cml0eV9zb2NrZXRfc2VuZG1zZyhzb2NrLCBtc2csIHNpemUpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KIAlyZXR1cm4gc29jay0+b3BzLT5zZW5kbXNnKGlvY2IsIHNvY2ssIG1zZywgc2l6ZSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IF9fc29ja19zZW5kbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywKKwkJCQkgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSkKK3sKKwlpbnQgZXJyID0gc2VjdXJpdHlfc29ja2V0X3NlbmRtc2coc29jaywgbXNnLCBzaXplKTsKKworCXJldHVybiBlcnIgPzogX19zb2NrX3NlbmRtc2dfbm9zZWMoaW9jYiwgc29jaywgbXNnLCBzaXplKTsKK30KKwogaW50IHNvY2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKQogewogCXN0cnVjdCBraW9jYiBpb2NiOwpAQCAtNTc3LDYgKzU4MCwyMCBAQAogfQogRVhQT1JUX1NZTUJPTChzb2NrX3NlbmRtc2cpOwogCitpbnQgc29ja19zZW5kbXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IGtpb2NiIGlvY2I7CisJc3RydWN0IHNvY2tfaW9jYiBzaW9jYjsKKwlpbnQgcmV0OworCisJaW5pdF9zeW5jX2tpb2NiKCZpb2NiLCBOVUxMKTsKKwlpb2NiLnByaXZhdGUgPSAmc2lvY2I7CisJcmV0ID0gX19zb2NrX3NlbmRtc2dfbm9zZWMoJmlvY2IsIHNvY2ssIG1zZywgc2l6ZSk7CisJaWYgKC1FSU9DQlFVRVVFRCA9PSByZXQpCisJCXJldCA9IHdhaXRfb25fc3luY19raW9jYigmaW9jYik7CisJcmV0dXJuIHJldDsKK30KKwogaW50IGtlcm5lbF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKIAkJICAgc3RydWN0IGt2ZWMgKnZlYywgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUpCiB7CkBAIC0xODU0LDU3ICsxODcxLDQ3IEBACiAjZGVmaW5lIENPTVBBVF9OQU1FTEVOKG1zZykJQ09NUEFUX01TRyhtc2csIG1zZ19uYW1lbGVuKQogI2RlZmluZSBDT01QQVRfRkxBR1MobXNnKQlDT01QQVRfTVNHKG1zZywgbXNnX2ZsYWdzKQogCi0vKgotICoJQlNEIHNlbmRtc2cgaW50ZXJmYWNlCi0gKi8KLQotU1lTQ0FMTF9ERUZJTkUzKHNlbmRtc2csIGludCwgZmQsIHN0cnVjdCBtc2doZHIgX191c2VyICosIG1zZywgdW5zaWduZWQsIGZsYWdzKQorc3RhdGljIGludCBfX3N5c19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgX191c2VyICptc2csCisJCQkgc3RydWN0IG1zZ2hkciAqbXNnX3N5cywgdW5zaWduZWQgZmxhZ3MsIGludCBub3NlYykKIHsKIAlzdHJ1Y3QgY29tcGF0X21zZ2hkciBfX3VzZXIgKm1zZ19jb21wYXQgPQogCSAgICAoc3RydWN0IGNvbXBhdF9tc2doZHIgX191c2VyICopbXNnOwotCXN0cnVjdCBzb2NrZXQgKnNvY2s7CiAJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgYWRkcmVzczsKIAlzdHJ1Y3QgaW92ZWMgaW92c3RhY2tbVUlPX0ZBU1RJT1ZdLCAqaW92ID0gaW92c3RhY2s7CiAJdW5zaWduZWQgY2hhciBjdGxbc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSArIDIwXQogCSAgICBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZChzaXplb2YoX19rZXJuZWxfc2l6ZV90KSkpKTsKIAkvKiAyMCBpcyBzaXplIG9mIGlwdjZfcGt0aW5mbyAqLwogCXVuc2lnbmVkIGNoYXIgKmN0bF9idWYgPSBjdGw7Ci0Jc3RydWN0IG1zZ2hkciBtc2dfc3lzOwogCWludCBlcnIsIGN0bF9sZW4sIGlvdl9zaXplLCB0b3RhbF9sZW47Ci0JaW50IGZwdXRfbmVlZGVkOwogCiAJZXJyID0gLUVGQVVMVDsKIAlpZiAoTVNHX0NNU0dfQ09NUEFUICYgZmxhZ3MpIHsKLQkJaWYgKGdldF9jb21wYXRfbXNnaGRyKCZtc2dfc3lzLCBtc2dfY29tcGF0KSkKKwkJaWYgKGdldF9jb21wYXRfbXNnaGRyKG1zZ19zeXMsIG1zZ19jb21wYXQpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfSBlbHNlIGlmIChjb3B5X2Zyb21fdXNlcigmbXNnX3N5cywgbXNnLCBzaXplb2Yoc3RydWN0IG1zZ2hkcikpKQorCX0gZWxzZSBpZiAoY29weV9mcm9tX3VzZXIobXNnX3N5cywgbXNnLCBzaXplb2Yoc3RydWN0IG1zZ2hkcikpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXNvY2sgPSBzb2NrZmRfbG9va3VwX2xpZ2h0KGZkLCAmZXJyLCAmZnB1dF9uZWVkZWQpOwotCWlmICghc29jaykKLQkJZ290byBvdXQ7Ci0KIAkvKiBkbyBub3QgbW92ZSBiZWZvcmUgbXNnX3N5cyBpcyB2YWxpZCAqLwogCWVyciA9IC1FTVNHU0laRTsKLQlpZiAobXNnX3N5cy5tc2dfaW92bGVuID4gVUlPX01BWElPVikKLQkJZ290byBvdXRfcHV0OworCWlmIChtc2dfc3lzLT5tc2dfaW92bGVuID4gVUlPX01BWElPVikKKwkJZ290byBvdXQ7CiAKIAkvKiBDaGVjayB3aGV0aGVyIHRvIGFsbG9jYXRlIHRoZSBpb3ZlYyBhcmVhICovCiAJZXJyID0gLUVOT01FTTsKLQlpb3Zfc2l6ZSA9IG1zZ19zeXMubXNnX2lvdmxlbiAqIHNpemVvZihzdHJ1Y3QgaW92ZWMpOwotCWlmIChtc2dfc3lzLm1zZ19pb3ZsZW4gPiBVSU9fRkFTVElPVikgeworCWlvdl9zaXplID0gbXNnX3N5cy0+bXNnX2lvdmxlbiAqIHNpemVvZihzdHJ1Y3QgaW92ZWMpOworCWlmIChtc2dfc3lzLT5tc2dfaW92bGVuID4gVUlPX0ZBU1RJT1YpIHsKIAkJaW92ID0gc29ja19rbWFsbG9jKHNvY2stPnNrLCBpb3Zfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghaW92KQotCQkJZ290byBvdXRfcHV0OworCQkJZ290byBvdXQ7CiAJfQogCiAJLyogVGhpcyB3aWxsIGFsc28gbW92ZSB0aGUgYWRkcmVzcyBkYXRhIGludG8ga2VybmVsIHNwYWNlICovCiAJaWYgKE1TR19DTVNHX0NPTVBBVCAmIGZsYWdzKSB7Ci0JCWVyciA9IHZlcmlmeV9jb21wYXRfaW92ZWMoJm1zZ19zeXMsIGlvdiwKKwkJZXJyID0gdmVyaWZ5X2NvbXBhdF9pb3ZlYyhtc2dfc3lzLCBpb3YsCiAJCQkJCSAgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyZXNzLAogCQkJCQkgIFZFUklGWV9SRUFEKTsKIAl9IGVsc2UKLQkJZXJyID0gdmVyaWZ5X2lvdmVjKCZtc2dfc3lzLCBpb3YsCisJCWVyciA9IHZlcmlmeV9pb3ZlYyhtc2dfc3lzLCBpb3YsCiAJCQkJICAgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyZXNzLAogCQkJCSAgIFZFUklGWV9SRUFEKTsKIAlpZiAoZXJyIDwgMCkKQEAgLTE5MTMsMTcgKzE5MjAsMTcgQEAKIAogCWVyciA9IC1FTk9CVUZTOwogCi0JaWYgKG1zZ19zeXMubXNnX2NvbnRyb2xsZW4gPiBJTlRfTUFYKQorCWlmIChtc2dfc3lzLT5tc2dfY29udHJvbGxlbiA+IElOVF9NQVgpCiAJCWdvdG8gb3V0X2ZyZWVpb3Y7Ci0JY3RsX2xlbiA9IG1zZ19zeXMubXNnX2NvbnRyb2xsZW47CisJY3RsX2xlbiA9IG1zZ19zeXMtPm1zZ19jb250cm9sbGVuOwogCWlmICgoTVNHX0NNU0dfQ09NUEFUICYgZmxhZ3MpICYmIGN0bF9sZW4pIHsKIAkJZXJyID0KLQkJICAgIGNtc2doZHJfZnJvbV91c2VyX2NvbXBhdF90b19rZXJuKCZtc2dfc3lzLCBzb2NrLT5zaywgY3RsLAorCQkgICAgY21zZ2hkcl9mcm9tX3VzZXJfY29tcGF0X3RvX2tlcm4obXNnX3N5cywgc29jay0+c2ssIGN0bCwKIAkJCQkJCSAgICAgc2l6ZW9mKGN0bCkpOwogCQlpZiAoZXJyKQogCQkJZ290byBvdXRfZnJlZWlvdjsKLQkJY3RsX2J1ZiA9IG1zZ19zeXMubXNnX2NvbnRyb2w7Ci0JCWN0bF9sZW4gPSBtc2dfc3lzLm1zZ19jb250cm9sbGVuOworCQljdGxfYnVmID0gbXNnX3N5cy0+bXNnX2NvbnRyb2w7CisJCWN0bF9sZW4gPSBtc2dfc3lzLT5tc2dfY29udHJvbGxlbjsKIAl9IGVsc2UgaWYgKGN0bF9sZW4pIHsKIAkJaWYgKGN0bF9sZW4gPiBzaXplb2YoY3RsKSkgewogCQkJY3RsX2J1ZiA9IHNvY2tfa21hbGxvYyhzb2NrLT5zaywgY3RsX2xlbiwgR0ZQX0tFUk5FTCk7CkBAIC0xOTMyLDIxICsxOTM5LDIyIEBACiAJCX0KIAkJZXJyID0gLUVGQVVMVDsKIAkJLyoKLQkJICogQ2FyZWZ1bCEgQmVmb3JlIHRoaXMsIG1zZ19zeXMubXNnX2NvbnRyb2wgY29udGFpbnMgYSB1c2VyIHBvaW50ZXIuCisJCSAqIENhcmVmdWwhIEJlZm9yZSB0aGlzLCBtc2dfc3lzLT5tc2dfY29udHJvbCBjb250YWlucyBhIHVzZXIgcG9pbnRlci4KIAkJICogQWZ0ZXJ3YXJkcywgaXQgd2lsbCBiZSBhIGtlcm5lbCBwb2ludGVyLiBUaHVzIHRoZSBjb21waWxlci1hc3Npc3RlZAogCQkgKiBjaGVja2luZyBmYWxscyBkb3duIG9uIHRoaXMuCiAJCSAqLwogCQlpZiAoY29weV9mcm9tX3VzZXIoY3RsX2J1ZiwKLQkJCQkgICAodm9pZCBfX3VzZXIgX19mb3JjZSAqKW1zZ19zeXMubXNnX2NvbnRyb2wsCisJCQkJICAgKHZvaWQgX191c2VyIF9fZm9yY2UgKiltc2dfc3lzLT5tc2dfY29udHJvbCwKIAkJCQkgICBjdGxfbGVuKSkKIAkJCWdvdG8gb3V0X2ZyZWVjdGw7Ci0JCW1zZ19zeXMubXNnX2NvbnRyb2wgPSBjdGxfYnVmOworCQltc2dfc3lzLT5tc2dfY29udHJvbCA9IGN0bF9idWY7CiAJfQotCW1zZ19zeXMubXNnX2ZsYWdzID0gZmxhZ3M7CisJbXNnX3N5cy0+bXNnX2ZsYWdzID0gZmxhZ3M7CiAKIAlpZiAoc29jay0+ZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCi0JCW1zZ19zeXMubXNnX2ZsYWdzIHw9IE1TR19ET05UV0FJVDsKLQllcnIgPSBzb2NrX3NlbmRtc2coc29jaywgJm1zZ19zeXMsIHRvdGFsX2xlbik7CisJCW1zZ19zeXMtPm1zZ19mbGFncyB8PSBNU0dfRE9OVFdBSVQ7CisJZXJyID0gKG5vc2VjID8gc29ja19zZW5kbXNnX25vc2VjIDogc29ja19zZW5kbXNnKShzb2NrLCBtc2dfc3lzLAorCQkJCQkJCSAgdG90YWxfbGVuKTsKIAogb3V0X2ZyZWVjdGw6CiAJaWYgKGN0bF9idWYgIT0gY3RsKQpAQCAtMTk1NCwxMiArMTk2MiwxMTQgQEAKIG91dF9mcmVlaW92OgogCWlmIChpb3YgIT0gaW92c3RhY2spCiAJCXNvY2tfa2ZyZWVfcyhzb2NrLT5zaywgaW92LCBpb3Zfc2l6ZSk7Ci1vdXRfcHV0Ogorb3V0OgorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKglCU0Qgc2VuZG1zZyBpbnRlcmZhY2UKKyAqLworCitTWVNDQUxMX0RFRklORTMoc2VuZG1zZywgaW50LCBmZCwgc3RydWN0IG1zZ2hkciBfX3VzZXIgKiwgbXNnLCB1bnNpZ25lZCwgZmxhZ3MpCit7CisJaW50IGZwdXRfbmVlZGVkLCBlcnI7CisJc3RydWN0IG1zZ2hkciBtc2dfc3lzOworCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSBzb2NrZmRfbG9va3VwX2xpZ2h0KGZkLCAmZXJyLCAmZnB1dF9uZWVkZWQpOworCisJaWYgKCFzb2NrKQorCQlnb3RvIG91dDsKKworCWVyciA9IF9fc3lzX3NlbmRtc2coc29jaywgbXNnLCAmbXNnX3N5cywgZmxhZ3MsIDApOworCiAJZnB1dF9saWdodChzb2NrLT5maWxlLCBmcHV0X25lZWRlZCk7CiBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KIAorLyoKKyAqCUxpbnV4IHNlbmRtbXNnIGludGVyZmFjZQorICovCisKK2ludCBfX3N5c19zZW5kbW1zZyhpbnQgZmQsIHN0cnVjdCBtbXNnaGRyIF9fdXNlciAqbW1zZywgdW5zaWduZWQgaW50IHZsZW4sCisJCSAgIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlpbnQgZnB1dF9uZWVkZWQsIGVyciwgZGF0YWdyYW1zOworCXN0cnVjdCBzb2NrZXQgKnNvY2s7CisJc3RydWN0IG1tc2doZHIgX191c2VyICplbnRyeTsKKwlzdHJ1Y3QgY29tcGF0X21tc2doZHIgX191c2VyICpjb21wYXRfZW50cnk7CisJc3RydWN0IG1zZ2hkciBtc2dfc3lzOworCisJZGF0YWdyYW1zID0gMDsKKworCXNvY2sgPSBzb2NrZmRfbG9va3VwX2xpZ2h0KGZkLCAmZXJyLCAmZnB1dF9uZWVkZWQpOworCWlmICghc29jaykKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHNvY2tfZXJyb3Ioc29jay0+c2spOworCWlmIChlcnIpCisJCWdvdG8gb3V0X3B1dDsKKworCWVudHJ5ID0gbW1zZzsKKwljb21wYXRfZW50cnkgPSAoc3RydWN0IGNvbXBhdF9tbXNnaGRyIF9fdXNlciAqKW1tc2c7CisKKwl3aGlsZSAoZGF0YWdyYW1zIDwgdmxlbikgeworCQkvKgorCQkgKiBObyBuZWVkIHRvIGFzayBMU00gZm9yIG1vcmUgdGhhbiB0aGUgZmlyc3QgZGF0YWdyYW0uCisJCSAqLworCQlpZiAoTVNHX0NNU0dfQ09NUEFUICYgZmxhZ3MpIHsKKwkJCWVyciA9IF9fc3lzX3NlbmRtc2coc29jaywgKHN0cnVjdCBtc2doZHIgX191c2VyICopY29tcGF0X2VudHJ5LAorCQkJCQkgICAgJm1zZ19zeXMsIGZsYWdzLCBkYXRhZ3JhbXMpOworCQkJaWYgKGVyciA8IDApCisJCQkJYnJlYWs7CisJCQllcnIgPSBfX3B1dF91c2VyKGVyciwgJmNvbXBhdF9lbnRyeS0+bXNnX2xlbik7CisJCQkrK2NvbXBhdF9lbnRyeTsKKwkJfSBlbHNlIHsKKwkJCWVyciA9IF9fc3lzX3NlbmRtc2coc29jaywgKHN0cnVjdCBtc2doZHIgX191c2VyICopZW50cnksCisJCQkJCSAgICAmbXNnX3N5cywgZmxhZ3MsIGRhdGFncmFtcyk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlicmVhazsKKwkJCWVyciA9IHB1dF91c2VyKGVyciwgJmVudHJ5LT5tc2dfbGVuKTsKKwkJCSsrZW50cnk7CisJCX0KKworCQlpZiAoZXJyKQorCQkJYnJlYWs7CisJCSsrZGF0YWdyYW1zOworCX0KKworb3V0X3B1dDoKKwlmcHV0X2xpZ2h0KHNvY2stPmZpbGUsIGZwdXRfbmVlZGVkKTsKKworCWlmIChlcnIgPT0gMCkKKwkJcmV0dXJuIGRhdGFncmFtczsKKworCWlmIChkYXRhZ3JhbXMgIT0gMCkgeworCQkvKgorCQkgKiBXZSBtYXkgc2VuZCBsZXNzIGVudHJpZXMgdGhhbiByZXF1ZXN0ZWQgKHZsZW4pIGlmIHRoZQorCQkgKiBzb2NrIGlzIG5vbiBibG9ja2luZy4uLgorCQkgKi8KKwkJaWYgKGVyciAhPSAtRUFHQUlOKSB7CisJCQkvKgorCQkJICogLi4uIG9yIGlmIHNlbmRtc2cgcmV0dXJucyBhbiBlcnJvciBhZnRlciB3ZQorCQkJICogc2VuZCBzb21lIGRhdGFncmFtcywgd2hlcmUgd2UgcmVjb3JkIHRoZQorCQkJICogZXJyb3IgdG8gcmV0dXJuIG9uIHRoZSBuZXh0IGNhbGwgb3IgaWYgdGhlCisJCQkgKiBhcHAgYXNrcyBhYm91dCBpdCB1c2luZyBnZXRzb2Nrb3B0KFNPX0VSUk9SKS4KKwkJCSAqLworCQkJc29jay0+c2stPnNrX2VyciA9IC1lcnI7CisJCX0KKworCQlyZXR1cm4gZGF0YWdyYW1zOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK1NZU0NBTExfREVGSU5FNChzZW5kbW1zZywgaW50LCBmZCwgc3RydWN0IG1tc2doZHIgX191c2VyICosIG1tc2csCisJCXVuc2lnbmVkIGludCwgdmxlbiwgdW5zaWduZWQgaW50LCBmbGFncykKK3sKKwlyZXR1cm4gX19zeXNfc2VuZG1tc2coZmQsIG1tc2csIHZsZW4sIGZsYWdzKTsKK30KKwogc3RhdGljIGludCBfX3N5c19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgX191c2VyICptc2csCiAJCQkgc3RydWN0IG1zZ2hkciAqbXNnX3N5cywgdW5zaWduZWQgZmxhZ3MsIGludCBub3NlYykKIHsKQEAgLTIxMTMsMTQgKzIyMjMsMTYgQEAKIAkJICovCiAJCWlmIChNU0dfQ01TR19DT01QQVQgJiBmbGFncykgewogCQkJZXJyID0gX19zeXNfcmVjdm1zZyhzb2NrLCAoc3RydWN0IG1zZ2hkciBfX3VzZXIgKiljb21wYXRfZW50cnksCi0JCQkJCSAgICAmbXNnX3N5cywgZmxhZ3MsIGRhdGFncmFtcyk7CisJCQkJCSAgICAmbXNnX3N5cywgZmxhZ3MgJiB+TVNHX1dBSVRGT1JPTkUsCisJCQkJCSAgICBkYXRhZ3JhbXMpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJYnJlYWs7CiAJCQllcnIgPSBfX3B1dF91c2VyKGVyciwgJmNvbXBhdF9lbnRyeS0+bXNnX2xlbik7CiAJCQkrK2NvbXBhdF9lbnRyeTsKIAkJfSBlbHNlIHsKIAkJCWVyciA9IF9fc3lzX3JlY3Ztc2coc29jaywgKHN0cnVjdCBtc2doZHIgX191c2VyICopZW50cnksCi0JCQkJCSAgICAmbXNnX3N5cywgZmxhZ3MsIGRhdGFncmFtcyk7CisJCQkJCSAgICAmbXNnX3N5cywgZmxhZ3MgJiB+TVNHX1dBSVRGT1JPTkUsCisJCQkJCSAgICBkYXRhZ3JhbXMpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJYnJlYWs7CiAJCQllcnIgPSBwdXRfdXNlcihlcnIsICZlbnRyeS0+bXNnX2xlbik7CkBAIC0yMjA1LDExICsyMzE3LDExIEBACiAjaWZkZWYgX19BUkNIX1dBTlRfU1lTX1NPQ0tFVENBTEwKIC8qIEFyZ3VtZW50IGxpc3Qgc2l6ZXMgZm9yIHN5c19zb2NrZXRjYWxsICovCiAjZGVmaW5lIEFMKHgpICgoeCkgKiBzaXplb2YodW5zaWduZWQgbG9uZykpCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBuYXJnc1syMF0gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBuYXJnc1syMV0gPSB7CiAJQUwoMCksIEFMKDMpLCBBTCgzKSwgQUwoMyksIEFMKDIpLCBBTCgzKSwKIAlBTCgzKSwgQUwoMyksIEFMKDQpLCBBTCg0KSwgQUwoNCksIEFMKDYpLAogCUFMKDYpLCBBTCgyKSwgQUwoNSksIEFMKDUpLCBBTCgzKSwgQUwoMyksCi0JQUwoNCksIEFMKDUpCisJQUwoNCksIEFMKDUpLCBBTCg0KQogfTsKIAogI3VuZGVmIEFMCkBAIC0yMjI5LDcgKzIzNDEsNyBAQAogCWludCBlcnI7CiAJdW5zaWduZWQgaW50IGxlbjsKIAotCWlmIChjYWxsIDwgMSB8fCBjYWxsID4gU1lTX1JFQ1ZNTVNHKQorCWlmIChjYWxsIDwgMSB8fCBjYWxsID4gU1lTX1NFTkRNTVNHKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWxlbiA9IG5hcmdzW2NhbGxdOwpAQCAtMjMwNCw2ICsyNDE2LDkgQEAKIAljYXNlIFNZU19TRU5ETVNHOgogCQllcnIgPSBzeXNfc2VuZG1zZyhhMCwgKHN0cnVjdCBtc2doZHIgX191c2VyICopYTEsIGFbMl0pOwogCQlicmVhazsKKwljYXNlIFNZU19TRU5ETU1TRzoKKwkJZXJyID0gc3lzX3NlbmRtbXNnKGEwLCAoc3RydWN0IG1tc2doZHIgX191c2VyICopYTEsIGFbMl0sIGFbM10pOworCQlicmVhazsKIAljYXNlIFNZU19SRUNWTVNHOgogCQllcnIgPSBzeXNfcmVjdm1zZyhhMCwgKHN0cnVjdCBtc2doZHIgX191c2VyICopYTEsIGFbMl0pOwogCQlicmVhazsKQEAgLTI2MzQsMTMgKzI3NDksMTMgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlpZiAoY29udmVydF9pbikgewotCQkvKiBXZSBleHBlY3QgdGhlcmUgdG8gYmUgaG9sZXMgYmV0d2VlbiBmcy5tX3UgYW5kCisJCS8qIFdlIGV4cGVjdCB0aGVyZSB0byBiZSBob2xlcyBiZXR3ZWVuIGZzLm1fZXh0IGFuZAogCQkgKiBmcy5yaW5nX2Nvb2tpZSBhbmQgYXQgdGhlIGVuZCBvZiBmcywgYnV0IG5vd2hlcmUgZWxzZS4KIAkJICovCi0JCUJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X2V0aHRvb2xfcnhuZmMsIGZzLm1fdSkgKwotCQkJICAgICBzaXplb2YoY29tcGF0X3J4bmZjLT5mcy5tX3UpICE9Ci0JCQkgICAgIG9mZnNldG9mKHN0cnVjdCBldGh0b29sX3J4bmZjLCBmcy5tX3UpICsKLQkJCSAgICAgc2l6ZW9mKHJ4bmZjLT5mcy5tX3UpKTsKKwkJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBjb21wYXRfZXRodG9vbF9yeG5mYywgZnMubV9leHQpICsKKwkJCSAgICAgc2l6ZW9mKGNvbXBhdF9yeG5mYy0+ZnMubV9leHQpICE9CisJCQkgICAgIG9mZnNldG9mKHN0cnVjdCBldGh0b29sX3J4bmZjLCBmcy5tX2V4dCkgKworCQkJICAgICBzaXplb2YocnhuZmMtPmZzLm1fZXh0KSk7CiAJCUJVSUxEX0JVR19PTigKIAkJCW9mZnNldG9mKHN0cnVjdCBjb21wYXRfZXRodG9vbF9yeG5mYywgZnMubG9jYXRpb24pIC0KIAkJCW9mZnNldG9mKHN0cnVjdCBjb21wYXRfZXRodG9vbF9yeG5mYywgZnMucmluZ19jb29raWUpICE9CkBAIC0yNjQ4LDcgKzI3NjMsNyBAQAogCQkJb2Zmc2V0b2Yoc3RydWN0IGV0aHRvb2xfcnhuZmMsIGZzLnJpbmdfY29va2llKSk7CiAKIAkJaWYgKGNvcHlfaW5fdXNlcihyeG5mYywgY29tcGF0X3J4bmZjLAotCQkJCSAodm9pZCAqKSgmcnhuZmMtPmZzLm1fdSArIDEpIC0KKwkJCQkgKHZvaWQgKikoJnJ4bmZjLT5mcy5tX2V4dCArIDEpIC0KIAkJCQkgKHZvaWQgKilyeG5mYykgfHwKIAkJICAgIGNvcHlfaW5fdXNlcigmcnhuZmMtPmZzLnJpbmdfY29va2llLAogCQkJCSAmY29tcGF0X3J4bmZjLT5mcy5yaW5nX2Nvb2tpZSwKQEAgLTI2NjUsNyArMjc4MCw3IEBACiAKIAlpZiAoY29udmVydF9vdXQpIHsKIAkJaWYgKGNvcHlfaW5fdXNlcihjb21wYXRfcnhuZmMsIHJ4bmZjLAotCQkJCSAoY29uc3Qgdm9pZCAqKSgmcnhuZmMtPmZzLm1fdSArIDEpIC0KKwkJCQkgKGNvbnN0IHZvaWQgKikoJnJ4bmZjLT5mcy5tX2V4dCArIDEpIC0KIAkJCQkgKGNvbnN0IHZvaWQgKilyeG5mYykgfHwKIAkJICAgIGNvcHlfaW5fdXNlcigmY29tcGF0X3J4bmZjLT5mcy5yaW5nX2Nvb2tpZSwKIAkJCQkgJnJ4bmZjLT5mcy5yaW5nX2Nvb2tpZSwKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYWRkci5jIGIvbmV0L3N1bnJwYy9hZGRyLmMKaW5kZXggMTQxOWQwYy4uNDE5NTIzMyAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hZGRyLmMKKysrIGIvbmV0L3N1bnJwYy9hZGRyLmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogCQlyZXR1cm4gMDsKIAogCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0JcmV0dXJuIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOzsKKwlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWFfdHJhbnNwb3J0LmMgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3RyYW5zcG9ydC5jCmluZGV4IDFhMTBkY2QuLjZjMDE0ZGQgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWFfdHJhbnNwb3J0LmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS9zdmNfcmRtYV90cmFuc3BvcnQuYwpAQCAtMzMzLDcgKzMzMyw3IEBACiB9CiAKIC8qCi0gKiBQcm9jZXNzcyBhIGNvbXBsZXRpb24gY29udGV4dAorICogUHJvY2VzcyBhIGNvbXBsZXRpb24gY29udGV4dAogICovCiBzdGF0aWMgdm9pZCBwcm9jZXNzX2NvbnRleHQoc3RydWN0IHN2Y3hwcnRfcmRtYSAqeHBydCwKIAkJCSAgICBzdHJ1Y3Qgc3ZjX3JkbWFfb3BfY3R4dCAqY3R4dCkKZGlmZiAtLWdpdCBhL25ldC90aXBjL2FkZHIuaCBiL25ldC90aXBjL2FkZHIuaAppbmRleCA4OTcxYWJhLi5lNGYzNWFmIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9hZGRyLmgKKysrIGIvbmV0L3RpcGMvYWRkci5oCkBAIC0zNywxNCArMzcsMTcgQEAKICNpZm5kZWYgX1RJUENfQUREUl9ICiAjZGVmaW5lIF9USVBDX0FERFJfSAogCisjZGVmaW5lIFRJUENfWk9ORV9NQVNLCQkweGZmMDAwMDAwdQorI2RlZmluZSBUSVBDX0NMVVNURVJfTUFTSwkweGZmZmZmMDAwdQorCiBzdGF0aWMgaW5saW5lIHUzMiB0aXBjX3pvbmVfbWFzayh1MzIgYWRkcikKIHsKLQlyZXR1cm4gYWRkciAmIDB4ZmYwMDAwMDB1OworCXJldHVybiBhZGRyICYgVElQQ19aT05FX01BU0s7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTMyIHRpcGNfY2x1c3Rlcl9tYXNrKHUzMiBhZGRyKQogewotCXJldHVybiBhZGRyICYgMHhmZmZmZjAwMHU7CisJcmV0dXJuIGFkZHIgJiBUSVBDX0NMVVNURVJfTUFTSzsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgaW5fb3duX2NsdXN0ZXIodTMyIGFkZHIpCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9iY2FzdC5jIGIvbmV0L3RpcGMvYmNhc3QuYwppbmRleCA3ZGMxZGM3Li5mYTY4ZDFlIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9iY2FzdC5jCisrKyBiL25ldC90aXBjL2JjYXN0LmMKQEAgLTQ0LDEzICs0NCw2IEBACiAKICNkZWZpbmUgQkNMSU5LX1dJTl9ERUZBVUxUIDIwCQkvKiBiY2FzdCBsaW5rIHdpbmRvdyBzaXplIChkZWZhdWx0KSAqLwogCi0vKgotICogTG9zcyByYXRlIGZvciBpbmNvbWluZyBicm9hZGNhc3QgZnJhbWVzOyB1c2VkIHRvIHRlc3QgcmV0cmFuc21pc3Npb24gY29kZS4KLSAqIFNldCB0byBOIHRvIGNhdXNlIGV2ZXJ5IE4ndGggZnJhbWUgdG8gYmUgZGlzY2FyZGVkOyAwID0+IGRvbid0IGRpc2NhcmQgYW55LgotICovCi0KLSNkZWZpbmUgVElQQ19CQ0FTVF9MT1NTX1JBVEUgMAotCiAvKioKICAqIHN0cnVjdCBiY2JlYXJlcl9wYWlyIC0gYSBwYWlyIG9mIGJlYXJlcnMgdXNlZCBieSBicm9hZGNhc3QgbGluawogICogQHByaW1hcnk6IHBvaW50ZXIgdG8gcHJpbWFyeSBiZWFyZXIKQEAgLTQxNCw5ICs0MDcsNyBAQAogCXNwaW5fbG9ja19iaCgmYmNfbG9jayk7CiAKIAlyZXMgPSB0aXBjX2xpbmtfc2VuZF9idWYoYmNsLCBidWYpOwotCWlmICh1bmxpa2VseShyZXMgPT0gLUVMSU5LQ09ORykpCi0JCWJ1Zl9kaXNjYXJkKGJ1Zik7Ci0JZWxzZQorCWlmIChsaWtlbHkocmVzID4gMCkpCiAJCWJjbGlua19zZXRfbGFzdF9zZW50KCk7CiAKIAliY2wtPnN0YXRzLnF1ZXVlX3N6X2NvdW50cysrOwpAQCAtNDM0LDkgKzQyNSw2IEBACiAKIHZvaWQgdGlwY19iY2xpbmtfcmVjdl9wa3Qoc3RydWN0IHNrX2J1ZmYgKmJ1ZikKIHsKLSNpZiAoVElQQ19CQ0FTVF9MT1NTX1JBVEUpCi0Jc3RhdGljIGludCByeF9jb3VudDsKLSNlbmRpZgogCXN0cnVjdCB0aXBjX21zZyAqbXNnID0gYnVmX21zZyhidWYpOwogCXN0cnVjdCB0aXBjX25vZGUgKm5vZGUgPSB0aXBjX25vZGVfZmluZChtc2dfcHJldm5vZGUobXNnKSk7CiAJdTMyIG5leHRfaW47CkBAIC00NzAsMTQgKzQ1OCw2IEBACiAJCXJldHVybjsKIAl9CiAKLSNpZiAoVElQQ19CQ0FTVF9MT1NTX1JBVEUpCi0JaWYgKCsrcnhfY291bnQgPT0gVElQQ19CQ0FTVF9MT1NTX1JBVEUpIHsKLQkJcnhfY291bnQgPSAwOwotCQlidWZfZGlzY2FyZChidWYpOwotCQlyZXR1cm47Ci0JfQotI2VuZGlmCi0KIAl0aXBjX25vZGVfbG9jayhub2RlKTsKIHJlY2VpdmU6CiAJZGVmZXJyZWQgPSBub2RlLT5iY2xpbmsuZGVmZXJyZWRfaGVhZDsKZGlmZiAtLWdpdCBhL25ldC90aXBjL2JlYXJlci5jIGIvbmV0L3RpcGMvYmVhcmVyLmMKaW5kZXggNDExNzE5Zi4uODUyMDllYSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvYmVhcmVyLmMKKysrIGIvbmV0L3RpcGMvYmVhcmVyLmMKQEAgLTQ2LDYgKzQ2LDggQEAKIAogc3RydWN0IHRpcGNfYmVhcmVyIHRpcGNfYmVhcmVyc1tNQVhfQkVBUkVSU107CiAKK3N0YXRpYyB2b2lkIGJlYXJlcl9kaXNhYmxlKHN0cnVjdCB0aXBjX2JlYXJlciAqYl9wdHIpOworCiAvKioKICAqIG1lZGlhX25hbWVfdmFsaWQgLSB2YWxpZGF0ZSBtZWRpYSBuYW1lCiAgKgpAQCAtMzQyLDE1ICszNDQsMTUgQEAKIHZvaWQgdGlwY19iZWFyZXJfYWRkX2Rlc3Qoc3RydWN0IHRpcGNfYmVhcmVyICpiX3B0ciwgdTMyIGRlc3QpCiB7CiAJdGlwY19ubWFwX2FkZCgmYl9wdHItPm5vZGVzLCBkZXN0KTsKLQl0aXBjX2Rpc2NfdXBkYXRlX2xpbmtfcmVxKGJfcHRyLT5saW5rX3JlcSk7CiAJdGlwY19iY2JlYXJlcl9zb3J0KCk7CisJdGlwY19kaXNjX2FkZF9kZXN0KGJfcHRyLT5saW5rX3JlcSk7CiB9CiAKIHZvaWQgdGlwY19iZWFyZXJfcmVtb3ZlX2Rlc3Qoc3RydWN0IHRpcGNfYmVhcmVyICpiX3B0ciwgdTMyIGRlc3QpCiB7CiAJdGlwY19ubWFwX3JlbW92ZSgmYl9wdHItPm5vZGVzLCBkZXN0KTsKLQl0aXBjX2Rpc2NfdXBkYXRlX2xpbmtfcmVxKGJfcHRyLT5saW5rX3JlcSk7CiAJdGlwY19iY2JlYXJlcl9zb3J0KCk7CisJdGlwY19kaXNjX3JlbW92ZV9kZXN0KGJfcHRyLT5saW5rX3JlcSk7CiB9CiAKIC8qCkBAIC00OTMsOCArNDk1LDE1IEBACiAJCXdhcm4oIkJlYXJlciA8JXM+IHJlamVjdGVkLCBpbGxlZ2FsIG5hbWVcbiIsIG5hbWUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JaWYgKCF0aXBjX2FkZHJfZG9tYWluX3ZhbGlkKGRpc2NfZG9tYWluKSB8fAotCSAgICAhdGlwY19pbl9zY29wZShkaXNjX2RvbWFpbiwgdGlwY19vd25fYWRkcikpIHsKKwlpZiAodGlwY19hZGRyX2RvbWFpbl92YWxpZChkaXNjX2RvbWFpbikgJiYKKwkgICAgKGRpc2NfZG9tYWluICE9IHRpcGNfb3duX2FkZHIpKSB7CisJCWlmICh0aXBjX2luX3Njb3BlKGRpc2NfZG9tYWluLCB0aXBjX293bl9hZGRyKSkgeworCQkJZGlzY19kb21haW4gPSB0aXBjX293bl9hZGRyICYgVElQQ19DTFVTVEVSX01BU0s7CisJCQlyZXMgPSAwOyAgIC8qIGFjY2VwdCBhbnkgbm9kZSBpbiBvd24gY2x1c3RlciAqLworCQl9IGVsc2UgaWYgKGluX293bl9jbHVzdGVyKGRpc2NfZG9tYWluKSkKKwkJCXJlcyA9IDA7ICAgLyogYWNjZXB0IHNwZWNpZmllZCBub2RlIGluIG93biBjbHVzdGVyICovCisJfQorCWlmIChyZXMpIHsKIAkJd2FybigiQmVhcmVyIDwlcz4gcmVqZWN0ZWQsIGlsbGVnYWwgZGlzY292ZXJ5IGRvbWFpblxuIiwgbmFtZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTUxMSw3ICs1MjAsNyBAQAogCWlmICghbV9wdHIpIHsKIAkJd2FybigiQmVhcmVyIDwlcz4gcmVqZWN0ZWQsIG1lZGlhIDwlcz4gbm90IHJlZ2lzdGVyZWRcbiIsIG5hbWUsCiAJCSAgICAgYl9uYW1lLm1lZGlhX25hbWUpOwotCQlnb3RvIGZhaWxlZDsKKwkJZ290byBleGl0OwogCX0KIAogCWlmIChwcmlvcml0eSA9PSBUSVBDX01FRElBX0xJTktfUFJJKQpAQCAtNTI3LDE0ICs1MzYsMTQgQEAKIAkJfQogCQlpZiAoIXN0cmNtcChuYW1lLCB0aXBjX2JlYXJlcnNbaV0ubmFtZSkpIHsKIAkJCXdhcm4oIkJlYXJlciA8JXM+IHJlamVjdGVkLCBhbHJlYWR5IGVuYWJsZWRcbiIsIG5hbWUpOwotCQkJZ290byBmYWlsZWQ7CisJCQlnb3RvIGV4aXQ7CiAJCX0KIAkJaWYgKCh0aXBjX2JlYXJlcnNbaV0ucHJpb3JpdHkgPT0gcHJpb3JpdHkpICYmCiAJCSAgICAoKyt3aXRoX3RoaXNfcHJpbyA+IDIpKSB7CiAJCQlpZiAocHJpb3JpdHktLSA9PSAwKSB7CiAJCQkJd2FybigiQmVhcmVyIDwlcz4gcmVqZWN0ZWQsIGR1cGxpY2F0ZSBwcmlvcml0eVxuIiwKIAkJCQkgICAgIG5hbWUpOwotCQkJCWdvdG8gZmFpbGVkOworCQkJCWdvdG8gZXhpdDsKIAkJCX0KIAkJCXdhcm4oIkJlYXJlciA8JXM+IHByaW9yaXR5IGFkanVzdG1lbnQgcmVxdWlyZWQgJXUtPiV1XG4iLAogCQkJICAgICBuYW1lLCBwcmlvcml0eSArIDEsIHByaW9yaXR5KTsKQEAgLTU0NCw3ICs1NTMsNyBAQAogCWlmIChiZWFyZXJfaWQgPj0gTUFYX0JFQVJFUlMpIHsKIAkJd2FybigiQmVhcmVyIDwlcz4gcmVqZWN0ZWQsIGJlYXJlciBsaW1pdCByZWFjaGVkICgldSlcbiIsCiAJCSAgICAgbmFtZSwgTUFYX0JFQVJFUlMpOwotCQlnb3RvIGZhaWxlZDsKKwkJZ290byBleGl0OwogCX0KIAogCWJfcHRyID0gJnRpcGNfYmVhcmVyc1tiZWFyZXJfaWRdOwpAQCAtNTUyLDcgKzU2MSw3IEBACiAJcmVzID0gbV9wdHItPmVuYWJsZV9iZWFyZXIoYl9wdHIpOwogCWlmIChyZXMpIHsKIAkJd2FybigiQmVhcmVyIDwlcz4gcmVqZWN0ZWQsIGVuYWJsZSBmYWlsdXJlICglZClcbiIsIG5hbWUsIC1yZXMpOwotCQlnb3RvIGZhaWxlZDsKKwkJZ290byBleGl0OwogCX0KIAogCWJfcHRyLT5pZGVudGl0eSA9IGJlYXJlcl9pZDsKQEAgLTU2MiwxNCArNTcxLDE4IEBACiAJYl9wdHItPnByaW9yaXR5ID0gcHJpb3JpdHk7CiAJSU5JVF9MSVNUX0hFQUQoJmJfcHRyLT5jb25nX2xpbmtzKTsKIAlJTklUX0xJU1RfSEVBRCgmYl9wdHItPmxpbmtzKTsKLQliX3B0ci0+bGlua19yZXEgPSB0aXBjX2Rpc2NfaW5pdF9saW5rX3JlcShiX3B0ciwgJm1fcHRyLT5iY2FzdF9hZGRyLAotCQkJCQkJICBkaXNjX2RvbWFpbik7CiAJc3Bpbl9sb2NrX2luaXQoJmJfcHRyLT5sb2NrKTsKLQl3cml0ZV91bmxvY2tfYmgoJnRpcGNfbmV0X2xvY2spOworCisJcmVzID0gdGlwY19kaXNjX2NyZWF0ZShiX3B0ciwgJm1fcHRyLT5iY2FzdF9hZGRyLCBkaXNjX2RvbWFpbik7CisJaWYgKHJlcykgeworCQliZWFyZXJfZGlzYWJsZShiX3B0cik7CisJCXdhcm4oIkJlYXJlciA8JXM+IHJlamVjdGVkLCBkaXNjb3Zlcnkgb2JqZWN0IGNyZWF0aW9uIGZhaWxlZFxuIiwKKwkJICAgICBuYW1lKTsKKwkJZ290byBleGl0OworCX0KIAlpbmZvKCJFbmFibGVkIGJlYXJlciA8JXM+LCBkaXNjb3ZlcnkgZG9tYWluICVzLCBwcmlvcml0eSAldVxuIiwKIAkgICAgIG5hbWUsIHRpcGNfYWRkcl9zdHJpbmdfZmlsbChhZGRyX3N0cmluZywgZGlzY19kb21haW4pLCBwcmlvcml0eSk7Ci0JcmV0dXJuIDA7Ci1mYWlsZWQ6CitleGl0OgogCXdyaXRlX3VubG9ja19iaCgmdGlwY19uZXRfbG9jayk7CiAJcmV0dXJuIHJlczsKIH0KQEAgLTYyMCwxNCArNjMzLDE0IEBACiAJc3RydWN0IGxpbmsgKnRlbXBfbF9wdHI7CiAKIAlpbmZvKCJEaXNhYmxpbmcgYmVhcmVyIDwlcz5cbiIsIGJfcHRyLT5uYW1lKTsKLQl0aXBjX2Rpc2Nfc3RvcF9saW5rX3JlcShiX3B0ci0+bGlua19yZXEpOwogCXNwaW5fbG9ja19iaCgmYl9wdHItPmxvY2spOwotCWJfcHRyLT5saW5rX3JlcSA9IE5VTEw7CiAJYl9wdHItPmJsb2NrZWQgPSAxOwogCWJfcHRyLT5tZWRpYS0+ZGlzYWJsZV9iZWFyZXIoYl9wdHIpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsX3B0ciwgdGVtcF9sX3B0ciwgJmJfcHRyLT5saW5rcywgbGlua19saXN0KSB7CiAJCXRpcGNfbGlua19kZWxldGUobF9wdHIpOwogCX0KKwlpZiAoYl9wdHItPmxpbmtfcmVxKQorCQl0aXBjX2Rpc2NfZGVsZXRlKGJfcHRyLT5saW5rX3JlcSk7CiAJc3Bpbl91bmxvY2tfYmgoJmJfcHRyLT5sb2NrKTsKIAltZW1zZXQoYl9wdHIsIDAsIHNpemVvZihzdHJ1Y3QgdGlwY19iZWFyZXIpKTsKIH0KZGlmZiAtLWdpdCBhL25ldC90aXBjL2NvcmUuYyBiL25ldC90aXBjL2NvcmUuYwppbmRleCBjOWE3M2U3Li45NDNiNmFmIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9jb3JlLmMKKysrIGIvbmV0L3RpcGMvY29yZS5jCkBAIC0xNzksOCArMTc5LDcgQEAKIAlpZiAodGlwY19sb2dfcmVzaXplKENPTkZJR19USVBDX0xPRykgIT0gMCkKIAkJd2FybigiVW5hYmxlIHRvIGNyZWF0ZSBsb2cgYnVmZmVyXG4iKTsKIAotCWluZm8oIkFjdGl2YXRlZCAodmVyc2lvbiAiIFRJUENfTU9EX1ZFUgotCSAgICAgIiBjb21waWxlZCAiIF9fREFURV9fICIgIiBfX1RJTUVfXyAiKVxuIik7CisJaW5mbygiQWN0aXZhdGVkICh2ZXJzaW9uICIgVElQQ19NT0RfVkVSICIpXG4iKTsKIAogCXRpcGNfb3duX2FkZHIgPSAwOwogCXRpcGNfcmVtb3RlX21hbmFnZW1lbnQgPSAxOwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvZGlzY292ZXIuYyBiL25ldC90aXBjL2Rpc2NvdmVyLmMKaW5kZXggNDkxZWZmNS4uMDk4NzkzMyAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvZGlzY292ZXIuYworKysgYi9uZXQvdGlwYy9kaXNjb3Zlci5jCkBAIC0zOSwxOSArMzksMTcgQEAKICNpbmNsdWRlICJkaXNjb3Zlci5oIgogCiAjZGVmaW5lIFRJUENfTElOS19SRVFfSU5JVAkxMjUJLyogbWluIGRlbGF5IGR1cmluZyBiZWFyZXIgc3RhcnQgdXAgKi8KLSNkZWZpbmUgVElQQ19MSU5LX1JFUV9GQVNUCTIwMDAJLyogbm9ybWFsIGRlbGF5IGlmIGJlYXJlciBoYXMgbm8gbGlua3MgKi8KLSNkZWZpbmUgVElQQ19MSU5LX1JFUV9TTE9XCTYwMDAwMAkvKiBub3JtYWwgZGVsYXkgaWYgYmVhcmVyIGhhcyBsaW5rcyAqLwotCi0vKgotICogVE9ETzogTW9zdCBvZiB0aGUgaW50ZXItY2x1c3RlciBzZXR1cCBzdHVmZiBzaG91bGQgYmUKLSAqIHJld3JpdHRlbiwgYW5kIGJlIG1hZGUgY29uZm9ybWFudCB3aXRoIHNwZWNpZmljYXRpb24uCi0gKi8KKyNkZWZpbmUgVElQQ19MSU5LX1JFUV9GQVNUCTEwMDAJLyogbWF4IGRlbGF5IGlmIGJlYXJlciBoYXMgbm8gbGlua3MgKi8KKyNkZWZpbmUgVElQQ19MSU5LX1JFUV9TTE9XCTYwMDAwCS8qIG1heCBkZWxheSBpZiBiZWFyZXIgaGFzIGxpbmtzICovCisjZGVmaW5lIFRJUENfTElOS19SRVFfSU5BQ1RJVkUJMHhmZmZmZmZmZiAvKiBpbmRpY2F0ZXMgbm8gdGltZXIgaW4gdXNlICovCiAKIAogLyoqCiAgKiBzdHJ1Y3QgbGlua19yZXEgLSBpbmZvcm1hdGlvbiBhYm91dCBhbiBvbmdvaW5nIGxpbmsgc2V0dXAgcmVxdWVzdAogICogQGJlYXJlcjogYmVhcmVyIGlzc3VpbmcgcmVxdWVzdHMKICAqIEBkZXN0OiBkZXN0aW5hdGlvbiBhZGRyZXNzIGZvciByZXF1ZXN0IG1lc3NhZ2VzCisgKiBAZG9tYWluOiBuZXR3b3JrIGRvbWFpbiB0byB3aGljaCBsaW5rcyBjYW4gYmUgZXN0YWJsaXNoZWQKKyAqIEBudW1fbm9kZXM6IG51bWJlciBvZiBub2RlcyBjdXJyZW50bHkgZGlzY292ZXJlZCAoaS5lLiB3aXRoIGFuIGFjdGl2ZSBsaW5rKQogICogQGJ1ZjogcmVxdWVzdCBtZXNzYWdlIHRvIGJlIChyZXBlYXRlZGx5KSBzZW50CiAgKiBAdGltZXI6IHRpbWVyIGdvdmVybmluZyBwZXJpb2QgYmV0d2VlbiByZXF1ZXN0cwogICogQHRpbWVyX2ludHY6IGN1cnJlbnQgaW50ZXJ2YWwgYmV0d2VlbiByZXF1ZXN0cyAoaW4gbXMpCkBAIC01OSw2ICs1Nyw4IEBACiBzdHJ1Y3QgbGlua19yZXEgewogCXN0cnVjdCB0aXBjX2JlYXJlciAqYmVhcmVyOwogCXN0cnVjdCB0aXBjX21lZGlhX2FkZHIgZGVzdDsKKwl1MzIgZG9tYWluOworCWludCBudW1fbm9kZXM7CiAJc3RydWN0IHNrX2J1ZmYgKmJ1ZjsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKIAl1bnNpZ25lZCBpbnQgdGltZXJfaW50djsKQEAgLTE0Nyw3ICsxNDcsNyBAQAogCX0KIAlpZiAoIXRpcGNfaW5fc2NvcGUoZGVzdCwgdGlwY19vd25fYWRkcikpCiAJCXJldHVybjsKLQlpZiAoIWluX293bl9jbHVzdGVyKG9yaWcpKQorCWlmICghdGlwY19pbl9zY29wZShiX3B0ci0+bGlua19yZXEtPmRvbWFpbiwgb3JpZykpCiAJCXJldHVybjsKIAogCS8qIExvY2F0ZSBzdHJ1Y3R1cmUgY29ycmVzcG9uZGluZyB0byByZXF1ZXN0aW5nIG5vZGUgKi8KQEAgLTIxNCw0NCArMjE0LDU0IEBACiB9CiAKIC8qKgotICogdGlwY19kaXNjX3N0b3BfbGlua19yZXEgLSBzdG9wIHNlbmRpbmcgcGVyaW9kaWMgbGluayBzZXR1cCByZXF1ZXN0cworICogZGlzY191cGRhdGUgLSB1cGRhdGUgZnJlcXVlbmN5IG9mIHBlcmlvZGljIGxpbmsgc2V0dXAgcmVxdWVzdHMKICAqIEByZXE6IHB0ciB0byBsaW5rIHJlcXVlc3Qgc3RydWN0dXJlCisgKgorICogUmVpbml0aWF0ZXMgZGlzY292ZXJ5IHByb2Nlc3MgaWYgZGlzY292ZXJ5IG9iamVjdCBoYXMgbm8gYXNzb2NpYXRlZCBub2RlcworICogYW5kIGlzIGVpdGhlciBub3QgY3VycmVudGx5IHNlYXJjaGluZyBvciBpcyBzZWFyY2hpbmcgYXQgYSBzbG93IHJhdGUKICAqLwogCi12b2lkIHRpcGNfZGlzY19zdG9wX2xpbmtfcmVxKHN0cnVjdCBsaW5rX3JlcSAqcmVxKQorc3RhdGljIHZvaWQgZGlzY191cGRhdGUoc3RydWN0IGxpbmtfcmVxICpyZXEpCiB7Ci0JaWYgKCFyZXEpCi0JCXJldHVybjsKLQotCWtfY2FuY2VsX3RpbWVyKCZyZXEtPnRpbWVyKTsKLQlrX3Rlcm1fdGltZXIoJnJlcS0+dGltZXIpOwotCWJ1Zl9kaXNjYXJkKHJlcS0+YnVmKTsKLQlrZnJlZShyZXEpOworCWlmICghcmVxLT5udW1fbm9kZXMpIHsKKwkJaWYgKChyZXEtPnRpbWVyX2ludHYgPT0gVElQQ19MSU5LX1JFUV9JTkFDVElWRSkgfHwKKwkJICAgIChyZXEtPnRpbWVyX2ludHYgPiBUSVBDX0xJTktfUkVRX0ZBU1QpKSB7CisJCQlyZXEtPnRpbWVyX2ludHYgPSBUSVBDX0xJTktfUkVRX0lOSVQ7CisJCQlrX3N0YXJ0X3RpbWVyKCZyZXEtPnRpbWVyLCByZXEtPnRpbWVyX2ludHYpOworCQl9CisJfQogfQogCiAvKioKLSAqIHRpcGNfZGlzY191cGRhdGVfbGlua19yZXEgLSB1cGRhdGUgZnJlcXVlbmN5IG9mIHBlcmlvZGljIGxpbmsgc2V0dXAgcmVxdWVzdHMKKyAqIHRpcGNfZGlzY19hZGRfZGVzdCAtIGluY3JlbWVudCBzZXQgb2YgZGlzY292ZXJlZCBub2RlcwogICogQHJlcTogcHRyIHRvIGxpbmsgcmVxdWVzdCBzdHJ1Y3R1cmUKICAqLwogCi12b2lkIHRpcGNfZGlzY191cGRhdGVfbGlua19yZXEoc3RydWN0IGxpbmtfcmVxICpyZXEpCit2b2lkIHRpcGNfZGlzY19hZGRfZGVzdChzdHJ1Y3QgbGlua19yZXEgKnJlcSkKIHsKLQlpZiAoIXJlcSkKLQkJcmV0dXJuOworCXJlcS0+bnVtX25vZGVzKys7Cit9CiAKLQlpZiAocmVxLT50aW1lcl9pbnR2ID09IFRJUENfTElOS19SRVFfU0xPVykgewotCQlpZiAoIXJlcS0+YmVhcmVyLT5ub2Rlcy5jb3VudCkgewotCQkJcmVxLT50aW1lcl9pbnR2ID0gVElQQ19MSU5LX1JFUV9GQVNUOwotCQkJa19zdGFydF90aW1lcigmcmVxLT50aW1lciwgcmVxLT50aW1lcl9pbnR2KTsKLQkJfQotCX0gZWxzZSBpZiAocmVxLT50aW1lcl9pbnR2ID09IFRJUENfTElOS19SRVFfRkFTVCkgewotCQlpZiAocmVxLT5iZWFyZXItPm5vZGVzLmNvdW50KSB7Ci0JCQlyZXEtPnRpbWVyX2ludHYgPSBUSVBDX0xJTktfUkVRX1NMT1c7Ci0JCQlrX3N0YXJ0X3RpbWVyKCZyZXEtPnRpbWVyLCByZXEtPnRpbWVyX2ludHYpOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogbGVhdmUgdGltZXIgImFzIGlzIiBpZiBoYXZlbid0IHlldCByZWFjaGVkIGEgIm5vcm1hbCIgcmF0ZSAqLwotCX0KKy8qKgorICogdGlwY19kaXNjX3JlbW92ZV9kZXN0IC0gZGVjcmVtZW50IHNldCBvZiBkaXNjb3ZlcmVkIG5vZGVzCisgKiBAcmVxOiBwdHIgdG8gbGluayByZXF1ZXN0IHN0cnVjdHVyZQorICovCisKK3ZvaWQgdGlwY19kaXNjX3JlbW92ZV9kZXN0KHN0cnVjdCBsaW5rX3JlcSAqcmVxKQoreworCXJlcS0+bnVtX25vZGVzLS07CisJZGlzY191cGRhdGUocmVxKTsKK30KKworLyoqCisgKiBkaXNjX3NlbmRfbXNnIC0gc2VuZCBsaW5rIHNldHVwIHJlcXVlc3QgbWVzc2FnZQorICogQHJlcTogcHRyIHRvIGxpbmsgcmVxdWVzdCBzdHJ1Y3R1cmUKKyAqLworCitzdGF0aWMgdm9pZCBkaXNjX3NlbmRfbXNnKHN0cnVjdCBsaW5rX3JlcSAqcmVxKQoreworCWlmICghcmVxLT5iZWFyZXItPmJsb2NrZWQpCisJCXRpcGNfYmVhcmVyX3NlbmQocmVxLT5iZWFyZXIsIHJlcS0+YnVmLCAmcmVxLT5kZXN0KTsKIH0KIAogLyoqCkBAIC0yNjMsNTYgKzI3Myw4NiBAQAogCiBzdGF0aWMgdm9pZCBkaXNjX3RpbWVvdXQoc3RydWN0IGxpbmtfcmVxICpyZXEpCiB7CisJaW50IG1heF9kZWxheTsKKwogCXNwaW5fbG9ja19iaCgmcmVxLT5iZWFyZXItPmxvY2spOwogCi0JcmVxLT5iZWFyZXItPm1lZGlhLT5zZW5kX21zZyhyZXEtPmJ1ZiwgcmVxLT5iZWFyZXIsICZyZXEtPmRlc3QpOworCS8qIFN0b3Agc2VhcmNoaW5nIGlmIG9ubHkgZGVzaXJlZCBub2RlIGhhcyBiZWVuIGZvdW5kICovCiAKLQlpZiAoKHJlcS0+dGltZXJfaW50diA9PSBUSVBDX0xJTktfUkVRX1NMT1cpIHx8Ci0JICAgIChyZXEtPnRpbWVyX2ludHYgPT0gVElQQ19MSU5LX1JFUV9GQVNUKSkgewotCQkvKiBsZWF2ZSB0aW1lciBpbnRlcnZhbCAiYXMgaXMiIGlmIGFscmVhZHkgYXQgYSAibm9ybWFsIiByYXRlICovCi0JfSBlbHNlIHsKLQkJcmVxLT50aW1lcl9pbnR2ICo9IDI7Ci0JCWlmIChyZXEtPnRpbWVyX2ludHYgPiBUSVBDX0xJTktfUkVRX0ZBU1QpCi0JCQlyZXEtPnRpbWVyX2ludHYgPSBUSVBDX0xJTktfUkVRX0ZBU1Q7Ci0JCWlmICgocmVxLT50aW1lcl9pbnR2ID09IFRJUENfTElOS19SRVFfRkFTVCkgJiYKLQkJICAgIChyZXEtPmJlYXJlci0+bm9kZXMuY291bnQpKQotCQkJcmVxLT50aW1lcl9pbnR2ID0gVElQQ19MSU5LX1JFUV9TTE9XOworCWlmICh0aXBjX25vZGUocmVxLT5kb21haW4pICYmIHJlcS0+bnVtX25vZGVzKSB7CisJCXJlcS0+dGltZXJfaW50diA9IFRJUENfTElOS19SRVFfSU5BQ1RJVkU7CisJCWdvdG8gZXhpdDsKIAl9Ci0Ja19zdGFydF90aW1lcigmcmVxLT50aW1lciwgcmVxLT50aW1lcl9pbnR2KTsKIAorCS8qCisJICogU2VuZCBkaXNjb3ZlcnkgbWVzc2FnZSwgdGhlbiB1cGRhdGUgZGlzY292ZXJ5IHRpbWVyCisJICoKKwkgKiBLZWVwIGRvdWJsaW5nIHRpbWUgYmV0d2VlbiByZXF1ZXN0cyB1bnRpbCBsaW1pdCBpcyByZWFjaGVkOworCSAqIGhvbGQgYXQgZmFzdCBwb2xsaW5nIHJhdGUgaWYgZG9uJ3QgaGF2ZSBhbnkgYXNzb2NpYXRlZCBub2RlcywKKwkgKiBvdGhlcndpc2UgaG9sZCBhdCBzbG93IHBvbGxpbmcgcmF0ZQorCSAqLworCisJZGlzY19zZW5kX21zZyhyZXEpOworCisJcmVxLT50aW1lcl9pbnR2ICo9IDI7CisJaWYgKHJlcS0+bnVtX25vZGVzKQorCQltYXhfZGVsYXkgPSBUSVBDX0xJTktfUkVRX1NMT1c7CisJZWxzZQorCQltYXhfZGVsYXkgPSBUSVBDX0xJTktfUkVRX0ZBU1Q7CisJaWYgKHJlcS0+dGltZXJfaW50diA+IG1heF9kZWxheSkKKwkJcmVxLT50aW1lcl9pbnR2ID0gbWF4X2RlbGF5OworCisJa19zdGFydF90aW1lcigmcmVxLT50aW1lciwgcmVxLT50aW1lcl9pbnR2KTsKK2V4aXQ6CiAJc3Bpbl91bmxvY2tfYmgoJnJlcS0+YmVhcmVyLT5sb2NrKTsKIH0KIAogLyoqCi0gKiB0aXBjX2Rpc2NfaW5pdF9saW5rX3JlcSAtIHN0YXJ0IHNlbmRpbmcgcGVyaW9kaWMgbGluayBzZXR1cCByZXF1ZXN0cworICogdGlwY19kaXNjX2NyZWF0ZSAtIGNyZWF0ZSBvYmplY3QgdG8gc2VuZCBwZXJpb2RpYyBsaW5rIHNldHVwIHJlcXVlc3RzCiAgKiBAYl9wdHI6IHB0ciB0byBiZWFyZXIgaXNzdWluZyByZXF1ZXN0cwogICogQGRlc3Q6IGRlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIHJlcXVlc3QgbWVzc2FnZXMKLSAqIEBkZXN0X2RvbWFpbjogbmV0d29yayBkb21haW4gb2Ygbm9kZShzKSB3aGljaCBzaG91bGQgcmVzcG9uZCB0byBtZXNzYWdlCisgKiBAZGVzdF9kb21haW46IG5ldHdvcmsgZG9tYWluIHRvIHdoaWNoIGxpbmtzIGNhbiBiZSBlc3RhYmxpc2hlZAogICoKLSAqIFJldHVybnMgcG9pbnRlciB0byBsaW5rIHJlcXVlc3Qgc3RydWN0dXJlLCBvciBOVUxMIGlmIHVuYWJsZSB0byBjcmVhdGUuCisgKiBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIC1lcnJuby4KICAqLwogCi1zdHJ1Y3QgbGlua19yZXEgKnRpcGNfZGlzY19pbml0X2xpbmtfcmVxKHN0cnVjdCB0aXBjX2JlYXJlciAqYl9wdHIsCi0JCQkJCSBjb25zdCBzdHJ1Y3QgdGlwY19tZWRpYV9hZGRyICpkZXN0LAotCQkJCQkgdTMyIGRlc3RfZG9tYWluKQoraW50IHRpcGNfZGlzY19jcmVhdGUoc3RydWN0IHRpcGNfYmVhcmVyICpiX3B0ciwKKwkJICAgICBzdHJ1Y3QgdGlwY19tZWRpYV9hZGRyICpkZXN0LCB1MzIgZGVzdF9kb21haW4pCiB7CiAJc3RydWN0IGxpbmtfcmVxICpyZXE7CiAKIAlyZXEgPSBrbWFsbG9jKHNpemVvZigqcmVxKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFyZXEpCi0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gLUVOT01FTTsKIAogCXJlcS0+YnVmID0gdGlwY19kaXNjX2luaXRfbXNnKERTQ19SRVFfTVNHLCBkZXN0X2RvbWFpbiwgYl9wdHIpOwogCWlmICghcmVxLT5idWYpIHsKIAkJa2ZyZWUocmVxKTsKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiAtRU5PTVNHOwogCX0KIAogCW1lbWNweSgmcmVxLT5kZXN0LCBkZXN0LCBzaXplb2YoKmRlc3QpKTsKIAlyZXEtPmJlYXJlciA9IGJfcHRyOworCXJlcS0+ZG9tYWluID0gZGVzdF9kb21haW47CisJcmVxLT5udW1fbm9kZXMgPSAwOwogCXJlcS0+dGltZXJfaW50diA9IFRJUENfTElOS19SRVFfSU5JVDsKIAlrX2luaXRfdGltZXIoJnJlcS0+dGltZXIsIChIYW5kbGVyKWRpc2NfdGltZW91dCwgKHVuc2lnbmVkIGxvbmcpcmVxKTsKIAlrX3N0YXJ0X3RpbWVyKCZyZXEtPnRpbWVyLCByZXEtPnRpbWVyX2ludHYpOwotCXJldHVybiByZXE7CisJYl9wdHItPmxpbmtfcmVxID0gcmVxOworCWRpc2Nfc2VuZF9tc2cocmVxKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0aXBjX2Rpc2NfZGVsZXRlIC0gZGVzdHJveSBvYmplY3Qgc2VuZGluZyBwZXJpb2RpYyBsaW5rIHNldHVwIHJlcXVlc3RzCisgKiBAcmVxOiBwdHIgdG8gbGluayByZXF1ZXN0IHN0cnVjdHVyZQorICovCisKK3ZvaWQgdGlwY19kaXNjX2RlbGV0ZShzdHJ1Y3QgbGlua19yZXEgKnJlcSkKK3sKKwlrX2NhbmNlbF90aW1lcigmcmVxLT50aW1lcik7CisJa190ZXJtX3RpbWVyKCZyZXEtPnRpbWVyKTsKKwlidWZfZGlzY2FyZChyZXEtPmJ1Zik7CisJa2ZyZWUocmVxKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvZGlzY292ZXIuaCBiL25ldC90aXBjL2Rpc2NvdmVyLmgKaW5kZXggZTQ4YTE2Ny4uYTNhZjU5NSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvZGlzY292ZXIuaAorKysgYi9uZXQvdGlwYy9kaXNjb3Zlci5oCkBAIC0zOSwxMiArMzksMTEgQEAKIAogc3RydWN0IGxpbmtfcmVxOwogCi1zdHJ1Y3QgbGlua19yZXEgKnRpcGNfZGlzY19pbml0X2xpbmtfcmVxKHN0cnVjdCB0aXBjX2JlYXJlciAqYl9wdHIsCi0JCQkJCSBjb25zdCBzdHJ1Y3QgdGlwY19tZWRpYV9hZGRyICpkZXN0LAotCQkJCQkgdTMyIGRlc3RfZG9tYWluKTsKLXZvaWQgdGlwY19kaXNjX3VwZGF0ZV9saW5rX3JlcShzdHJ1Y3QgbGlua19yZXEgKnJlcSk7Ci12b2lkIHRpcGNfZGlzY19zdG9wX2xpbmtfcmVxKHN0cnVjdCBsaW5rX3JlcSAqcmVxKTsKLQoraW50IHRpcGNfZGlzY19jcmVhdGUoc3RydWN0IHRpcGNfYmVhcmVyICpiX3B0ciwgc3RydWN0IHRpcGNfbWVkaWFfYWRkciAqZGVzdCwKKwkJICAgICB1MzIgZGVzdF9kb21haW4pOwordm9pZCB0aXBjX2Rpc2NfZGVsZXRlKHN0cnVjdCBsaW5rX3JlcSAqcmVxKTsKK3ZvaWQgdGlwY19kaXNjX2FkZF9kZXN0KHN0cnVjdCBsaW5rX3JlcSAqcmVxKTsKK3ZvaWQgdGlwY19kaXNjX3JlbW92ZV9kZXN0KHN0cnVjdCBsaW5rX3JlcSAqcmVxKTsKIHZvaWQgdGlwY19kaXNjX3JlY3ZfbXNnKHN0cnVjdCBza19idWZmICpidWYsIHN0cnVjdCB0aXBjX2JlYXJlciAqYl9wdHIpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC90aXBjL2xpbmsuYyBiL25ldC90aXBjL2xpbmsuYwppbmRleCBlYmYzMzhmLi41ZWQ0YjRmIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9saW5rLmMKKysrIGIvbmV0L3RpcGMvbGluay5jCkBAIC05Miw3ICs5Miw4IEBACiBzdGF0aWMgdm9pZCBsaW5rX3NldF9zdXBlcnZpc2lvbl9wcm9wcyhzdHJ1Y3QgbGluayAqbF9wdHIsIHUzMiB0b2xlcmFuY2UpOwogc3RhdGljIGludCAgbGlua19zZW5kX3NlY3Rpb25zX2xvbmcoc3RydWN0IHRpcGNfcG9ydCAqc2VuZGVyLAogCQkJCSAgICBzdHJ1Y3QgaW92ZWMgY29uc3QgKm1zZ19zZWN0LAotCQkJCSAgICB1MzIgbnVtX3NlY3QsIHUzMiBkZXN0bm9kZSk7CisJCQkJICAgIHUzMiBudW1fc2VjdCwgdW5zaWduZWQgaW50IHRvdGFsX2xlbiwKKwkJCQkgICAgdTMyIGRlc3Rub2RlKTsKIHN0YXRpYyB2b2lkIGxpbmtfY2hlY2tfZGVmcmFnbV9idWZzKHN0cnVjdCBsaW5rICpsX3B0cik7CiBzdGF0aWMgdm9pZCBsaW5rX3N0YXRlX2V2ZW50KHN0cnVjdCBsaW5rICpsX3B0ciwgdTMyIGV2ZW50KTsKIHN0YXRpYyB2b2lkIGxpbmtfcmVzZXRfc3RhdGlzdGljcyhzdHJ1Y3QgbGluayAqbF9wdHIpOwpAQCAtODQyLDYgKzg0MywyNSBAQAogCQlsX3B0ci0+c3RhdHMubWF4X3F1ZXVlX3N6ID0gbF9wdHItPm91dF9xdWV1ZV9zaXplOwogfQogCitzdGF0aWMgdm9pZCBsaW5rX2FkZF9jaGFpbl90b19vdXRxdWV1ZShzdHJ1Y3QgbGluayAqbF9wdHIsCisJCQkJICAgICAgIHN0cnVjdCBza19idWZmICpidWZfY2hhaW4sCisJCQkJICAgICAgIHUzMiBsb25nX21zZ25vKQoreworCXN0cnVjdCBza19idWZmICpidWY7CisJc3RydWN0IHRpcGNfbXNnICptc2c7CisKKwlpZiAoIWxfcHRyLT5uZXh0X291dCkKKwkJbF9wdHItPm5leHRfb3V0ID0gYnVmX2NoYWluOworCXdoaWxlIChidWZfY2hhaW4pIHsKKwkJYnVmID0gYnVmX2NoYWluOworCQlidWZfY2hhaW4gPSBidWZfY2hhaW4tPm5leHQ7CisKKwkJbXNnID0gYnVmX21zZyhidWYpOworCQltc2dfc2V0X2xvbmdfbXNnbm8obXNnLCBsb25nX21zZ25vKTsKKwkJbGlua19hZGRfdG9fb3V0cXVldWUobF9wdHIsIGJ1ZiwgbXNnKTsKKwl9Cit9CisKIC8qCiAgKiB0aXBjX2xpbmtfc2VuZF9idWYoKSBpcyB0aGUgJ2Z1bGwgcGF0aCcgZm9yIG1lc3NhZ2VzLCBjYWxsZWQgZnJvbQogICogaW5zaWRlIFRJUEMgd2hlbiB0aGUgJ2Zhc3QgcGF0aCcgaW4gdGlwY19zZW5kX2J1ZgpAQCAtODY0LDggKzg4NCw5IEBACiAKIAlpZiAodW5saWtlbHkocXVldWVfc2l6ZSA+PSBxdWV1ZV9saW1pdCkpIHsKIAkJaWYgKGltcCA8PSBUSVBDX0NSSVRJQ0FMX0lNUE9SVEFOQ0UpIHsKLQkJCXJldHVybiBsaW5rX3NjaGVkdWxlX3BvcnQobF9wdHIsIG1zZ19vcmlncG9ydChtc2cpLAotCQkJCQkJICBzaXplKTsKKwkJCWxpbmtfc2NoZWR1bGVfcG9ydChsX3B0ciwgbXNnX29yaWdwb3J0KG1zZyksIHNpemUpOworCQkJYnVmX2Rpc2NhcmQoYnVmKTsKKwkJCXJldHVybiAtRUxJTktDT05HOwogCQl9CiAJCWJ1Zl9kaXNjYXJkKGJ1Zik7CiAJCWlmIChpbXAgPiBDT05OX01BTkFHRVIpIHsKQEAgLTEwNDIsNiArMTA2Myw3IEBACiBpbnQgdGlwY19saW5rX3NlbmRfc2VjdGlvbnNfZmFzdChzdHJ1Y3QgdGlwY19wb3J0ICpzZW5kZXIsCiAJCQkJIHN0cnVjdCBpb3ZlYyBjb25zdCAqbXNnX3NlY3QsCiAJCQkJIGNvbnN0IHUzMiBudW1fc2VjdCwKKwkJCQkgdW5zaWduZWQgaW50IHRvdGFsX2xlbiwKIAkJCQkgdTMyIGRlc3RhZGRyKQogewogCXN0cnVjdCB0aXBjX21zZyAqaGRyID0gJnNlbmRlci0+cGhkcjsKQEAgLTEwNTcsOCArMTA3OSw4IEBACiAJICogKE11c3Qgbm90IGhvbGQgYW55IGxvY2tzIHdoaWxlIGJ1aWxkaW5nIG1lc3NhZ2UuKQogCSAqLwogCi0JcmVzID0gdGlwY19tc2dfYnVpbGQoaGRyLCBtc2dfc2VjdCwgbnVtX3NlY3QsIHNlbmRlci0+bWF4X3BrdCwKLQkJCSFzZW5kZXItPnVzZXJfcG9ydCwgJmJ1Zik7CisJcmVzID0gdGlwY19tc2dfYnVpbGQoaGRyLCBtc2dfc2VjdCwgbnVtX3NlY3QsIHRvdGFsX2xlbiwKKwkJCSAgICAgc2VuZGVyLT5tYXhfcGt0LCAhc2VuZGVyLT51c2VyX3BvcnQsICZidWYpOwogCiAJcmVhZF9sb2NrX2JoKCZ0aXBjX25ldF9sb2NrKTsKIAlub2RlID0gdGlwY19ub2RlX2ZpbmQoZGVzdGFkZHIpOwpAQCAtMTA2OSw4ICsxMDkxLDYgQEAKIAkJCWlmIChsaWtlbHkoYnVmKSkgewogCQkJCXJlcyA9IGxpbmtfc2VuZF9idWZfZmFzdChsX3B0ciwgYnVmLAogCQkJCQkJCSAmc2VuZGVyLT5tYXhfcGt0KTsKLQkJCQlpZiAodW5saWtlbHkocmVzIDwgMCkpCi0JCQkJCWJ1Zl9kaXNjYXJkKGJ1Zik7CiBleGl0OgogCQkJCXRpcGNfbm9kZV91bmxvY2sobm9kZSk7CiAJCQkJcmVhZF91bmxvY2tfYmgoJnRpcGNfbmV0X2xvY2spOwpAQCAtMTEwNSw3ICsxMTI1LDggQEAKIAkJCQlnb3RvIGFnYWluOwogCiAJCQlyZXR1cm4gbGlua19zZW5kX3NlY3Rpb25zX2xvbmcoc2VuZGVyLCBtc2dfc2VjdCwKLQkJCQkJCSAgICAgICBudW1fc2VjdCwgZGVzdGFkZHIpOworCQkJCQkJICAgICAgIG51bV9zZWN0LCB0b3RhbF9sZW4sCisJCQkJCQkgICAgICAgZGVzdGFkZHIpOwogCQl9CiAJCXRpcGNfbm9kZV91bmxvY2sobm9kZSk7CiAJfQpAQCAtMTExNyw3ICsxMTM4LDcgQEAKIAkJcmV0dXJuIHRpcGNfcmVqZWN0X21zZyhidWYsIFRJUENfRVJSX05PX05PREUpOwogCWlmIChyZXMgPj0gMCkKIAkJcmV0dXJuIHRpcGNfcG9ydF9yZWplY3Rfc2VjdGlvbnMoc2VuZGVyLCBoZHIsIG1zZ19zZWN0LCBudW1fc2VjdCwKLQkJCQkJCSBUSVBDX0VSUl9OT19OT0RFKTsKKwkJCQkJCSB0b3RhbF9sZW4sIFRJUENfRVJSX05PX05PREUpOwogCXJldHVybiByZXM7CiB9CiAKQEAgLTExMzgsMTIgKzExNTksMTMgQEAKIHN0YXRpYyBpbnQgbGlua19zZW5kX3NlY3Rpb25zX2xvbmcoc3RydWN0IHRpcGNfcG9ydCAqc2VuZGVyLAogCQkJCSAgIHN0cnVjdCBpb3ZlYyBjb25zdCAqbXNnX3NlY3QsCiAJCQkJICAgdTMyIG51bV9zZWN0LAorCQkJCSAgIHVuc2lnbmVkIGludCB0b3RhbF9sZW4sCiAJCQkJICAgdTMyIGRlc3RhZGRyKQogewogCXN0cnVjdCBsaW5rICpsX3B0cjsKIAlzdHJ1Y3QgdGlwY19ub2RlICpub2RlOwogCXN0cnVjdCB0aXBjX21zZyAqaGRyID0gJnNlbmRlci0+cGhkcjsKLQl1MzIgZHN6ID0gbXNnX2RhdGFfc3ooaGRyKTsKKwl1MzIgZHN6ID0gdG90YWxfbGVuOwogCXUzMiBtYXhfcGt0LCBmcmFnbV9zeiwgcmVzdDsKIAlzdHJ1Y3QgdGlwY19tc2cgZnJhZ21faGRyOwogCXN0cnVjdCBza19idWZmICpidWYsICpidWZfY2hhaW4sICpwcmV2OwpAQCAtMTE2OSw3ICsxMTkxLDYgQEAKIAogCXRpcGNfbXNnX2luaXQoJmZyYWdtX2hkciwgTVNHX0ZSQUdNRU5URVIsIEZJUlNUX0ZSQUdNRU5ULAogCQkgSU5UX0hfU0laRSwgbXNnX2Rlc3Rub2RlKGhkcikpOwotCW1zZ19zZXRfbGlua19zZWxlY3RvcigmZnJhZ21faGRyLCBzZW5kZXItPnJlZik7CiAJbXNnX3NldF9zaXplKCZmcmFnbV9oZHIsIG1heF9wa3QpOwogCW1zZ19zZXRfZnJhZ21fbm8oJmZyYWdtX2hkciwgMSk7CiAKQEAgLTEyNzEsMjggKzEyOTIsMTUgQEAKIAkJCWJ1Zl9kaXNjYXJkKGJ1Zl9jaGFpbik7CiAJCX0KIAkJcmV0dXJuIHRpcGNfcG9ydF9yZWplY3Rfc2VjdGlvbnMoc2VuZGVyLCBoZHIsIG1zZ19zZWN0LCBudW1fc2VjdCwKLQkJCQkJCSBUSVBDX0VSUl9OT19OT0RFKTsKKwkJCQkJCSB0b3RhbF9sZW4sIFRJUENfRVJSX05PX05PREUpOwogCX0KIAotCS8qIEFwcGVuZCB3aG9sZSBjaGFpbiB0byBzZW5kIHF1ZXVlOiAqLworCS8qIEFwcGVuZCBjaGFpbiBvZiBmcmFnbWVudHMgdG8gc2VuZCBxdWV1ZSAmIHNlbmQgdGhlbSAqLwogCi0JYnVmID0gYnVmX2NoYWluOwotCWxfcHRyLT5sb25nX21zZ19zZXFfbm8gPSBtb2QobF9wdHItPmxvbmdfbXNnX3NlcV9ubyArIDEpOwotCWlmICghbF9wdHItPm5leHRfb3V0KQotCQlsX3B0ci0+bmV4dF9vdXQgPSBidWZfY2hhaW47CisJbF9wdHItPmxvbmdfbXNnX3NlcV9ubysrOworCWxpbmtfYWRkX2NoYWluX3RvX291dHF1ZXVlKGxfcHRyLCBidWZfY2hhaW4sIGxfcHRyLT5sb25nX21zZ19zZXFfbm8pOworCWxfcHRyLT5zdGF0cy5zZW50X2ZyYWdtZW50cyArPSBmcmFnbV9ubzsKIAlsX3B0ci0+c3RhdHMuc2VudF9mcmFnbWVudGVkKys7Ci0Jd2hpbGUgKGJ1ZikgewotCQlzdHJ1Y3Qgc2tfYnVmZiAqbmV4dCA9IGJ1Zi0+bmV4dDsKLQkJc3RydWN0IHRpcGNfbXNnICptc2cgPSBidWZfbXNnKGJ1Zik7Ci0KLQkJbF9wdHItPnN0YXRzLnNlbnRfZnJhZ21lbnRzKys7Ci0JCW1zZ19zZXRfbG9uZ19tc2dubyhtc2csIGxfcHRyLT5sb25nX21zZ19zZXFfbm8pOwotCQlsaW5rX2FkZF90b19vdXRxdWV1ZShsX3B0ciwgYnVmLCBtc2cpOwotCQlidWYgPSBuZXh0OwotCX0KLQotCS8qIFNlbmQgaXQsIGlmIHBvc3NpYmxlOiAqLwotCiAJdGlwY19saW5rX3B1c2hfcXVldWUobF9wdHIpOwogCXRpcGNfbm9kZV91bmxvY2sobm9kZSk7CiAJcmV0dXJuIGRzejsKQEAgLTI0MDcsNiArMjQxNSw4IEBACiAgKi8KIHN0YXRpYyBpbnQgbGlua19zZW5kX2xvbmdfYnVmKHN0cnVjdCBsaW5rICpsX3B0ciwgc3RydWN0IHNrX2J1ZmYgKmJ1ZikKIHsKKwlzdHJ1Y3Qgc2tfYnVmZiAqYnVmX2NoYWluID0gTlVMTDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqYnVmX2NoYWluX3RhaWwgPSAoc3RydWN0IHNrX2J1ZmYgKikmYnVmX2NoYWluOwogCXN0cnVjdCB0aXBjX21zZyAqaW5tc2cgPSBidWZfbXNnKGJ1Zik7CiAJc3RydWN0IHRpcGNfbXNnIGZyYWdtX2hkcjsKIAl1MzIgaW5zaXplID0gbXNnX3NpemUoaW5tc2cpOwpAQCAtMjQxNSw3ICsyNDI1LDcgQEAKIAl1MzIgcmVzdCA9IGluc2l6ZTsKIAl1MzIgcGFja19zeiA9IGxfcHRyLT5tYXhfcGt0OwogCXUzMiBmcmFnbV9zeiA9IHBhY2tfc3ogLSBJTlRfSF9TSVpFOwotCXUzMiBmcmFnbV9ubyA9IDE7CisJdTMyIGZyYWdtX25vID0gMDsKIAl1MzIgZGVzdGFkZHI7CiAKIAlpZiAobXNnX3Nob3J0KGlubXNnKSkKQEAgLTI0MjcsMTAgKzI0MzcsNiBAQAogCiAJdGlwY19tc2dfaW5pdCgmZnJhZ21faGRyLCBNU0dfRlJBR01FTlRFUiwgRklSU1RfRlJBR01FTlQsCiAJCSBJTlRfSF9TSVpFLCBkZXN0YWRkcik7Ci0JbXNnX3NldF9saW5rX3NlbGVjdG9yKCZmcmFnbV9oZHIsIG1zZ19saW5rX3NlbGVjdG9yKGlubXNnKSk7Ci0JbXNnX3NldF9sb25nX21zZ25vKCZmcmFnbV9oZHIsIG1vZChsX3B0ci0+bG9uZ19tc2dfc2VxX25vKyspKTsKLQltc2dfc2V0X2ZyYWdtX25vKCZmcmFnbV9oZHIsIGZyYWdtX25vKTsKLQlsX3B0ci0+c3RhdHMuc2VudF9mcmFnbWVudGVkKys7CiAKIAkvKiBDaG9wIHVwIG1lc3NhZ2U6ICovCiAKQEAgLTI0NDMsMjcgKzI0NDksMzcgQEAKIAkJfQogCQlmcmFnbSA9IHRpcGNfYnVmX2FjcXVpcmUoZnJhZ21fc3ogKyBJTlRfSF9TSVpFKTsKIAkJaWYgKGZyYWdtID09IE5VTEwpIHsKLQkJCXdhcm4oIkxpbmsgdW5hYmxlIHRvIGZyYWdtZW50IG1lc3NhZ2VcbiIpOwotCQkJZHN6ID0gLUVOT01FTTsKLQkJCWdvdG8gZXhpdDsKKwkJCWJ1Zl9kaXNjYXJkKGJ1Zik7CisJCQl3aGlsZSAoYnVmX2NoYWluKSB7CisJCQkJYnVmID0gYnVmX2NoYWluOworCQkJCWJ1Zl9jaGFpbiA9IGJ1Zl9jaGFpbi0+bmV4dDsKKwkJCQlidWZfZGlzY2FyZChidWYpOworCQkJfQorCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAkJbXNnX3NldF9zaXplKCZmcmFnbV9oZHIsIGZyYWdtX3N6ICsgSU5UX0hfU0laRSk7CisJCWZyYWdtX25vKys7CisJCW1zZ19zZXRfZnJhZ21fbm8oJmZyYWdtX2hkciwgZnJhZ21fbm8pOwogCQlza2JfY29weV90b19saW5lYXJfZGF0YShmcmFnbSwgJmZyYWdtX2hkciwgSU5UX0hfU0laRSk7CiAJCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhX29mZnNldChmcmFnbSwgSU5UX0hfU0laRSwgY3JzLAogCQkJCQkgICAgICAgZnJhZ21fc3opOwotCQkvKiAgU2VuZCBxdWV1ZWQgbWVzc2FnZXMgZmlyc3QsIGlmIGFueTogKi8KKwkJYnVmX2NoYWluX3RhaWwtPm5leHQgPSBmcmFnbTsKKwkJYnVmX2NoYWluX3RhaWwgPSBmcmFnbTsKIAotCQlsX3B0ci0+c3RhdHMuc2VudF9mcmFnbWVudHMrKzsKLQkJdGlwY19saW5rX3NlbmRfYnVmKGxfcHRyLCBmcmFnbSk7Ci0JCWlmICghdGlwY19saW5rX2lzX3VwKGxfcHRyKSkKLQkJCXJldHVybiBkc3o7Ci0JCW1zZ19zZXRfZnJhZ21fbm8oJmZyYWdtX2hkciwgKytmcmFnbV9ubyk7CiAJCXJlc3QgLT0gZnJhZ21fc3o7CiAJCWNycyArPSBmcmFnbV9zejsKIAkJbXNnX3NldF90eXBlKCZmcmFnbV9oZHIsIEZSQUdNRU5UKTsKIAl9Ci1leGl0OgogCWJ1Zl9kaXNjYXJkKGJ1Zik7CisKKwkvKiBBcHBlbmQgY2hhaW4gb2YgZnJhZ21lbnRzIHRvIHNlbmQgcXVldWUgJiBzZW5kIHRoZW0gKi8KKworCWxfcHRyLT5sb25nX21zZ19zZXFfbm8rKzsKKwlsaW5rX2FkZF9jaGFpbl90b19vdXRxdWV1ZShsX3B0ciwgYnVmX2NoYWluLCBsX3B0ci0+bG9uZ19tc2dfc2VxX25vKTsKKwlsX3B0ci0+c3RhdHMuc2VudF9mcmFnbWVudHMgKz0gZnJhZ21fbm87CisJbF9wdHItPnN0YXRzLnNlbnRfZnJhZ21lbnRlZCsrOworCXRpcGNfbGlua19wdXNoX3F1ZXVlKGxfcHRyKTsKKwogCXJldHVybiBkc3o7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC90aXBjL2xpbmsuaCBiL25ldC90aXBjL2xpbmsuaAppbmRleCBlNmEzMGRiLi43NGZiZWNhIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9saW5rLmgKKysrIGIvbmV0L3RpcGMvbGluay5oCkBAIC0yMjgsNiArMjI4LDcgQEAKIGludCB0aXBjX2xpbmtfc2VuZF9zZWN0aW9uc19mYXN0KHN0cnVjdCB0aXBjX3BvcnQgKnNlbmRlciwKIAkJCQkgc3RydWN0IGlvdmVjIGNvbnN0ICptc2dfc2VjdCwKIAkJCQkgY29uc3QgdTMyIG51bV9zZWN0LAorCQkJCSB1bnNpZ25lZCBpbnQgdG90YWxfbGVuLAogCQkJCSB1MzIgZGVzdG5vZGUpOwogdm9pZCB0aXBjX2xpbmtfcmVjdl9idW5kbGUoc3RydWN0IHNrX2J1ZmYgKmJ1Zik7CiBpbnQgIHRpcGNfbGlua19yZWN2X2ZyYWdtZW50KHN0cnVjdCBza19idWZmICoqcGVuZGluZywKZGlmZiAtLWdpdCBhL25ldC90aXBjL21zZy5jIGIvbmV0L3RpcGMvbXNnLmMKaW5kZXggNmQ5MmQxNy4uMDNlNTdiZiAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbXNnLmMKKysrIGIvbmV0L3RpcGMvbXNnLmMKQEAgLTY4LDIwICs2OCw2IEBACiB9CiAKIC8qKgotICogdGlwY19tc2dfY2FsY19kYXRhX3NpemUgLSBkZXRlcm1pbmUgdG90YWwgZGF0YSBzaXplIGZvciBtZXNzYWdlCi0gKi8KLQotaW50IHRpcGNfbXNnX2NhbGNfZGF0YV9zaXplKHN0cnVjdCBpb3ZlYyBjb25zdCAqbXNnX3NlY3QsIHUzMiBudW1fc2VjdCkKLXsKLQlpbnQgZHN6ID0gMDsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW1fc2VjdDsgaSsrKQotCQlkc3ogKz0gbXNnX3NlY3RbaV0uaW92X2xlbjsKLQlyZXR1cm4gZHN6OwotfQotCi0vKioKICAqIHRpcGNfbXNnX2J1aWxkIC0gY3JlYXRlIG1lc3NhZ2UgdXNpbmcgc3BlY2lmaWVkIGhlYWRlciBhbmQgZGF0YQogICoKICAqIE5vdGU6IENhbGxlciBtdXN0IG5vdCBob2xkIGFueSBsb2NrcyBpbiBjYXNlIGNvcHlfZnJvbV91c2VyKCkgaXMgaW50ZXJydXB0ZWQhCkBAIC04OSwxOCArNzUsMTMgQEAKICAqIFJldHVybnMgbWVzc2FnZSBkYXRhIHNpemUgb3IgZXJybm8KICAqLwogCi1pbnQgdGlwY19tc2dfYnVpbGQoc3RydWN0IHRpcGNfbXNnICpoZHIsCi0JCQkgICAgc3RydWN0IGlvdmVjIGNvbnN0ICptc2dfc2VjdCwgdTMyIG51bV9zZWN0LAoraW50IHRpcGNfbXNnX2J1aWxkKHN0cnVjdCB0aXBjX21zZyAqaGRyLCBzdHJ1Y3QgaW92ZWMgY29uc3QgKm1zZ19zZWN0LAorCQkgICB1MzIgbnVtX3NlY3QsIHVuc2lnbmVkIGludCB0b3RhbF9sZW4sCiAJCQkgICAgaW50IG1heF9zaXplLCBpbnQgdXNybWVtLCBzdHJ1Y3Qgc2tfYnVmZiAqKmJ1ZikKIHsKIAlpbnQgZHN6LCBzeiwgaHN6LCBwb3MsIHJlcywgY250OwogCi0JZHN6ID0gdGlwY19tc2dfY2FsY19kYXRhX3NpemUobXNnX3NlY3QsIG51bV9zZWN0KTsKLQlpZiAodW5saWtlbHkoZHN6ID4gVElQQ19NQVhfVVNFUl9NU0dfU0laRSkpIHsKLQkJKmJ1ZiA9IE5VTEw7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQorCWRzeiA9IHRvdGFsX2xlbjsKIAlwb3MgPSBoc3ogPSBtc2dfaGRyX3N6KGhkcik7CiAJc3ogPSBoc3ogKyBkc3o7CiAJbXNnX3NldF9zaXplKGhkciwgc3opOwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbXNnLmggYi9uZXQvdGlwYy9tc2cuaAppbmRleCBkZTAyMzM5Li44NDUyNDU0IDEwMDY0NAotLS0gYS9uZXQvdGlwYy9tc2cuaAorKysgYi9uZXQvdGlwYy9tc2cuaApAQCAtMzksNDEgKzM5LDI0IEBACiAKICNpbmNsdWRlICJiZWFyZXIuaCIKIAorLyoKKyAqIENvbnN0YW50cyBhbmQgcm91dGluZXMgdXNlZCB0byByZWFkIGFuZCB3cml0ZSBUSVBDIHBheWxvYWQgbWVzc2FnZSBoZWFkZXJzCisgKgorICogTm90ZTogU29tZSBpdGVtcyBhcmUgYWxzbyB1c2VkIHdpdGggVElQQyBpbnRlcm5hbCBtZXNzYWdlIGhlYWRlcnMKKyAqLworCiAjZGVmaW5lIFRJUENfVkVSU0lPTiAgICAgICAgICAgICAgMgogCiAvKgotICoJCVRJUEMgdXNlciBkYXRhIG1lc3NhZ2UgaGVhZGVyIGZvcm1hdCwgdmVyc2lvbiAyOgotICoKLSAqCi0gKiAgICAgMSAwIDkgOCA3IDYgNSA0fDMgMiAxIDAgOSA4IDcgNnw1IDQgMyAyIDEgMCA5IDh8NyA2IDUgNCAzIDIgMSAwCi0gKiAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICogdzA6fHZlcnMgfCB1c2VyICB8aGRyIHN6IHxufGR8c3wtfCAgICAgICAgICBtZXNzYWdlIHNpemUgICAgICAgICAgIHwKLSAqICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gKiB3MTp8bXN0eXB8IGVycm9yIHxyZXIgY250fGxzY3xvcHQgcHwgICAgICBicm9hZGNhc3QgYWNrIG5vICAgICAgICAgfAotICogICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAqIHcyOnwgICAgICAgIGxpbmsgbGV2ZWwgYWNrIG5vICAgICAgfCAgIGJyb2FkY2FzdC9saW5rIGxldmVsIHNlcSBubyB8Ci0gKiAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICogdzM6fCAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMgbm9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAqICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gKiB3NDp8ICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmF0aW5nIHBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgfAotICogICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAqIHc1OnwgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24gcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gKiAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICogdzY6fCAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hdGluZyBub2RlICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAqICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gKiB3Nzp8ICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uIG5vZGUgICAgICAgICAgICAgICAgICAgICAgICAgfAotICogICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAqIHc4OnwgICAgICAgICAgICBuYW1lIHR5cGUgLyB0cmFuc3BvcnQgc2VxdWVuY2UgbnVtYmVyICAgICAgICAgICAgICB8Ci0gKiAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICogdzk6fCAgICAgICAgICAgICAgbmFtZSBpbnN0YW5jZS9tdWx0aWNhc3QgbG93ZXIgYm91bmQgICAgICAgICAgICAgIHwKLSAqICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gKiB3QTp8ICAgICAgICAgICAgICAgICAgICBtdWx0aWNhc3QgdXBwZXIgYm91bmQgICAgICAgICAgICAgICAgICAgICAgfAotICogICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAqICAgIC8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvCi0gKiAgICBcICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICogICAgLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8KLSAqICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gKgorICogUGF5bG9hZCBtZXNzYWdlIHVzZXJzIGFyZSBkZWZpbmVkIGluIFRJUEMncyBwdWJsaWMgQVBJOgorICogLSBUSVBDX0xPV19JTVBPUlRBTkNFCisgKiAtIFRJUENfTUVESVVNX0lNUE9SVEFOQ0UKKyAqIC0gVElQQ19ISUdIX0lNUE9SVEFOQ0UKKyAqIC0gVElQQ19DUklUSUNBTF9JTVBPUlRBTkNFCisgKi8KKworLyoKKyAqIFBheWxvYWQgbWVzc2FnZSB0eXBlcwogICovCiAKICNkZWZpbmUgVElQQ19DT05OX01TRwkJMApAQCAtODEsNiArNjQsOSBAQAogI2RlZmluZSBUSVBDX05BTUVEX01TRwkJMgogI2RlZmluZSBUSVBDX0RJUkVDVF9NU0cJCTMKIAorLyoKKyAqIE1lc3NhZ2UgaGVhZGVyIHNpemVzCisgKi8KIAogI2RlZmluZSBTSE9SVF9IX1NJWkUgICAgICAgICAgICAgIDI0CS8qIENvbm5lY3RlZCwgaW4tY2x1c3RlciBtZXNzYWdlcyAqLwogI2RlZmluZSBESVJfTVNHX0hfU0laRSAgICAgICAgICAgIDMyCS8qIERpcmVjdGx5IGFkZHJlc3NlZCBtZXNzYWdlcyAqLwpAQCAtNDczLDQwICs0NTksMTEgQEAKIAogCiAvKgotCQlUSVBDIGludGVybmFsIG1lc3NhZ2UgaGVhZGVyIGZvcm1hdCwgdmVyc2lvbiAyCi0KLSAgICAgICAxIDAgOSA4IDcgNiA1IDR8MyAyIDEgMCA5IDggNyA2fDUgNCAzIDIgMSAwIDkgOHw3IDYgNSA0IDMgMiAxIDAKLSAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICB3MDp8dmVycyB8bXNnIHVzcnxoZHIgc3ogfG58cmVzcnZ8ICAgICAgICAgICAgcGFja2V0IHNpemUgICAgICAgICAgfAotICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgIHcxOnxtIHR5cHwgICAgICBzZXF1ZW5jZSBnYXAgICAgICAgfCAgICAgICBicm9hZGNhc3QgYWNrIG5vICAgICAgICB8Ci0gICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgdzI6fCBsaW5rIGxldmVsIGFjayBuby9iY19nYXBfZnJvbSB8ICAgICBzZXEgbm8gLyBiY2FzdF9nYXBfdG8gICAgIHwKLSAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICB3Mzp8ICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyBub2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgIHc0OnwgIG5leHQgc2VudCBicm9hZGNhc3QvZnJhZ20gbm8gfCBuZXh0IHNlbnQgcGt0LyBmcmFnbSBtc2cgbm8gICB8Ci0gICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgdzU6fCAgICAgICAgICBzZXNzaW9uIG5vICAgICAgICAgICB8cnN2PTB8cnxiZXJpZHxsaW5rIHByaW98bmV0cGx8cHwKLSAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICB3Njp8ICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmF0aW5nIG5vZGUgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgIHc3OnwgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24gbm9kZSAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgdzg6fCAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnQgc2VxdWVuY2UgbnVtYmVyICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICB3OTp8ICAgbXNnIGNvdW50IC8gYmNhc3QgdGFnICAgICAgIHwgICAgICAgbGluayB0b2xlcmFuY2UgICAgICAgICAgfAotICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgIFwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAvICAgICAgICAgICAgICAgICAgICAgVXNlciBTcGVjaWZpYyBEYXRhICAgICAgICAgICAgICAgICAgICAgICAgLwotICAgICAgXCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0KLSAgICAgIE5COiBDT05OX01BTkFHRVIgdXNlIGRhdGEgbWVzc2FnZSBmb3JtYXQuIExJTktfQ09ORklHIGhhcyBvd24gZm9ybWF0LgotKi8KKyAqIENvbnN0YW50cyBhbmQgcm91dGluZXMgdXNlZCB0byByZWFkIGFuZCB3cml0ZSBUSVBDIGludGVybmFsIG1lc3NhZ2UgaGVhZGVycworICovCiAKIC8qCi0gKiBJbnRlcm5hbCB1c2VycworICogSW50ZXJuYWwgbWVzc2FnZSB1c2VycwogICovCiAKICNkZWZpbmUgIEJDQVNUX1BST1RPQ09MICAgICAgIDUKQEAgLTUyMCw3ICs0NzcsNyBAQAogI2RlZmluZSAgTElOS19DT05GSUcgICAgICAgICAgMTMKIAogLyoKLSAqICBDb25uZWN0aW9uIG1hbmFnZW1lbnQgcHJvdG9jb2wgbWVzc2FnZXMKKyAqICBDb25uZWN0aW9uIG1hbmFnZW1lbnQgcHJvdG9jb2wgbWVzc2FnZSB0eXBlcwogICovCiAKICNkZWZpbmUgQ09OTl9QUk9CRSAgICAgICAgMApAQCAtNTI4LDEyICs0ODUsNDEgQEAKICNkZWZpbmUgQ09OTl9BQ0sgICAgICAgICAgMgogCiAvKgotICogTmFtZSBkaXN0cmlidXRvciBtZXNzYWdlcworICogTmFtZSBkaXN0cmlidXRvciBtZXNzYWdlIHR5cGVzCiAgKi8KIAogI2RlZmluZSBQVUJMSUNBVElPTiAgICAgICAwCiAjZGVmaW5lIFdJVEhEUkFXQUwgICAgICAgIDEKIAorLyoKKyAqIFNlZ21lbnRhdGlvbiBtZXNzYWdlIHR5cGVzCisgKi8KKworI2RlZmluZSBGSVJTVF9GUkFHTUVOVAkJMAorI2RlZmluZSBGUkFHTUVOVAkJMQorI2RlZmluZSBMQVNUX0ZSQUdNRU5UCQkyCisKKy8qCisgKiBMaW5rIG1hbmFnZW1lbnQgcHJvdG9jb2wgbWVzc2FnZSB0eXBlcworICovCisKKyNkZWZpbmUgU1RBVEVfTVNHCQkwCisjZGVmaW5lIFJFU0VUX01TRwkJMQorI2RlZmluZSBBQ1RJVkFURV9NU0cJCTIKKworLyoKKyAqIENoYW5nZW92ZXIgdHVubmVsIG1lc3NhZ2UgdHlwZXMKKyAqLworI2RlZmluZSBEVVBMSUNBVEVfTVNHCQkwCisjZGVmaW5lIE9SSUdJTkFMX01TRwkJMQorCisvKgorICogQ29uZmlnIHByb3RvY29sIG1lc3NhZ2UgdHlwZXMKKyAqLworCisjZGVmaW5lIERTQ19SRVFfTVNHCQkwCisjZGVmaW5lIERTQ19SRVNQX01TRwkJMQorCiAKIC8qCiAgKiBXb3JkIDEKQEAgLTc2MSw1MCArNzQ3LDExIEBACiAJbXNnX3NldF9iaXRzKG0sIDksIDAsIDB4ZmZmZiwgbik7CiB9CiAKLS8qCi0gKiBTZWdtZW50YXRpb24gbWVzc2FnZSB0eXBlcwotICovCi0KLSNkZWZpbmUgRklSU1RfRlJBR01FTlQgICAgIDAKLSNkZWZpbmUgRlJBR01FTlQgICAgICAgICAgIDEKLSNkZWZpbmUgTEFTVF9GUkFHTUVOVCAgICAgIDIKLQotLyoKLSAqIExpbmsgbWFuYWdlbWVudCBwcm90b2NvbCBtZXNzYWdlIHR5cGVzCi0gKi8KLQotI2RlZmluZSBTVEFURV9NU0cgICAgICAgMAotI2RlZmluZSBSRVNFVF9NU0cgICAgICAgMQotI2RlZmluZSBBQ1RJVkFURV9NU0cgICAgMgotCi0vKgotICogQ2hhbmdlb3ZlciB0dW5uZWwgbWVzc2FnZSB0eXBlcwotICovCi0jZGVmaW5lIERVUExJQ0FURV9NU0cgICAgMAotI2RlZmluZSBPUklHSU5BTF9NU0cgICAgIDEKLQotLyoKLSAqIFJvdXRpbmcgdGFibGUgbWVzc2FnZSB0eXBlcwotICovCi0jZGVmaW5lIEVYVF9ST1VUSU5HX1RBQkxFICAgIDAKLSNkZWZpbmUgTE9DQUxfUk9VVElOR19UQUJMRSAgMQkJLyogb2Jzb2xldGVkICovCi0jZGVmaW5lIFNMQVZFX1JPVVRJTkdfVEFCTEUgIDIKLSNkZWZpbmUgUk9VVEVfQURESVRJT04gICAgICAgMwotI2RlZmluZSBST1VURV9SRU1PVkFMICAgICAgICA0Ci0KLS8qCi0gKiBDb25maWcgcHJvdG9jb2wgbWVzc2FnZSB0eXBlcwotICovCi0KLSNkZWZpbmUgRFNDX1JFUV9NU0cgICAgICAgICAgMAotI2RlZmluZSBEU0NfUkVTUF9NU0cgICAgICAgICAxCi0KIHUzMiB0aXBjX21zZ190b3RfaW1wb3J0YW5jZShzdHJ1Y3QgdGlwY19tc2cgKm0pOwogdm9pZCB0aXBjX21zZ19pbml0KHN0cnVjdCB0aXBjX21zZyAqbSwgdTMyIHVzZXIsIHUzMiB0eXBlLAogCQkJICAgIHUzMiBoc2l6ZSwgdTMyIGRlc3Rub2RlKTsKLWludCB0aXBjX21zZ19jYWxjX2RhdGFfc2l6ZShzdHJ1Y3QgaW92ZWMgY29uc3QgKm1zZ19zZWN0LCB1MzIgbnVtX3NlY3QpOwotaW50IHRpcGNfbXNnX2J1aWxkKHN0cnVjdCB0aXBjX21zZyAqaGRyLAotCQkJICAgIHN0cnVjdCBpb3ZlYyBjb25zdCAqbXNnX3NlY3QsIHUzMiBudW1fc2VjdCwKK2ludCB0aXBjX21zZ19idWlsZChzdHJ1Y3QgdGlwY19tc2cgKmhkciwgc3RydWN0IGlvdmVjIGNvbnN0ICptc2dfc2VjdCwKKwkJICAgdTMyIG51bV9zZWN0LCB1bnNpZ25lZCBpbnQgdG90YWxfbGVuLAogCQkJICAgIGludCBtYXhfc2l6ZSwgaW50IHVzcm1lbSwgc3RydWN0IHNrX2J1ZmYgKipidWYpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgbXNnX3NldF9tZWRpYV9hZGRyKHN0cnVjdCB0aXBjX21zZyAqbSwgc3RydWN0IHRpcGNfbWVkaWFfYWRkciAqYSkKZGlmZiAtLWdpdCBhL25ldC90aXBjL3BvcnQuYyBiL25ldC90aXBjL3BvcnQuYwppbmRleCA2ZmY3OGY5Li5jNjhkYzk1IDEwMDY0NAotLS0gYS9uZXQvdGlwYy9wb3J0LmMKKysrIGIvbmV0L3RpcGMvcG9ydC5jCkBAIC03NCw3ICs3NCw4IEBACiAgKi8KIAogaW50IHRpcGNfbXVsdGljYXN0KHUzMiByZWYsIHN0cnVjdCB0aXBjX25hbWVfc2VxIGNvbnN0ICpzZXEsCi0JCSAgIHUzMiBudW1fc2VjdCwgc3RydWN0IGlvdmVjIGNvbnN0ICptc2dfc2VjdCkKKwkJICAgdTMyIG51bV9zZWN0LCBzdHJ1Y3QgaW92ZWMgY29uc3QgKm1zZ19zZWN0LAorCQkgICB1bnNpZ25lZCBpbnQgdG90YWxfbGVuKQogewogCXN0cnVjdCB0aXBjX21zZyAqaGRyOwogCXN0cnVjdCBza19idWZmICpidWY7CkBAIC05MSwxMSArOTIsMTQgQEAKIAogCWhkciA9ICZvcG9ydC0+cGhkcjsKIAltc2dfc2V0X3R5cGUoaGRyLCBUSVBDX01DQVNUX01TRyk7CisJbXNnX3NldF9sb29rdXBfc2NvcGUoaGRyLCBUSVBDX0NMVVNURVJfU0NPUEUpOworCW1zZ19zZXRfZGVzdHBvcnQoaGRyLCAwKTsKKwltc2dfc2V0X2Rlc3Rub2RlKGhkciwgMCk7CiAJbXNnX3NldF9uYW1ldHlwZShoZHIsIHNlcS0+dHlwZSk7CiAJbXNnX3NldF9uYW1lbG93ZXIoaGRyLCBzZXEtPmxvd2VyKTsKIAltc2dfc2V0X25hbWV1cHBlcihoZHIsIHNlcS0+dXBwZXIpOwogCW1zZ19zZXRfaGRyX3N6KGhkciwgTUNBU1RfSF9TSVpFKTsKLQlyZXMgPSB0aXBjX21zZ19idWlsZChoZHIsIG1zZ19zZWN0LCBudW1fc2VjdCwgTUFYX01TR19TSVpFLAorCXJlcyA9IHRpcGNfbXNnX2J1aWxkKGhkciwgbXNnX3NlY3QsIG51bV9zZWN0LCB0b3RhbF9sZW4sIE1BWF9NU0dfU0laRSwKIAkJCSFvcG9ydC0+dXNlcl9wb3J0LCAmYnVmKTsKIAlpZiAodW5saWtlbHkoIWJ1ZikpCiAJCXJldHVybiByZXM7CkBAIC0xNjEsNiArMTY1LDcgQEAKIAkvKiBEZWxpdmVyIGEgY29weSBvZiBtZXNzYWdlIHRvIGVhY2ggZGVzdGluYXRpb24gcG9ydCAqLwogCiAJaWYgKGRwLT5jb3VudCAhPSAwKSB7CisJCW1zZ19zZXRfZGVzdG5vZGUobXNnLCB0aXBjX293bl9hZGRyKTsKIAkJaWYgKGRwLT5jb3VudCA9PSAxKSB7CiAJCQltc2dfc2V0X2Rlc3Rwb3J0KG1zZywgZHAtPnBvcnRzWzBdKTsKIAkJCXRpcGNfcG9ydF9yZWN2X21zZyhidWYpOwpAQCAtNDE0LDEyICs0MTksMTIgQEAKIAogaW50IHRpcGNfcG9ydF9yZWplY3Rfc2VjdGlvbnMoc3RydWN0IHRpcGNfcG9ydCAqcF9wdHIsIHN0cnVjdCB0aXBjX21zZyAqaGRyLAogCQkJICAgICAgc3RydWN0IGlvdmVjIGNvbnN0ICptc2dfc2VjdCwgdTMyIG51bV9zZWN0LAotCQkJICAgICAgaW50IGVycikKKwkJCSAgICAgIHVuc2lnbmVkIGludCB0b3RhbF9sZW4sIGludCBlcnIpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKmJ1ZjsKIAlpbnQgcmVzOwogCi0JcmVzID0gdGlwY19tc2dfYnVpbGQoaGRyLCBtc2dfc2VjdCwgbnVtX3NlY3QsIE1BWF9NU0dfU0laRSwKKwlyZXMgPSB0aXBjX21zZ19idWlsZChoZHIsIG1zZ19zZWN0LCBudW1fc2VjdCwgdG90YWxfbGVuLCBNQVhfTVNHX1NJWkUsCiAJCQkhcF9wdHItPnVzZXJfcG9ydCwgJmJ1Zik7CiAJaWYgKCFidWYpCiAJCXJldHVybiByZXM7CkBAIC0xMDY1LDYgKzEwNzAsNyBAQAogCW1zZ19zZXRfb3JpZ25vZGUobXNnLCB0aXBjX293bl9hZGRyKTsKIAltc2dfc2V0X29yaWdwb3J0KG1zZywgcF9wdHItPnJlZik7CiAJbXNnX3NldF90eXBlKG1zZywgVElQQ19DT05OX01TRyk7CisJbXNnX3NldF9sb29rdXBfc2NvcGUobXNnLCAwKTsKIAltc2dfc2V0X2hkcl9zeihtc2csIFNIT1JUX0hfU0laRSk7CiAKIAlwX3B0ci0+cHJvYmluZ19pbnRlcnZhbCA9IFBST0JJTkdfSU5URVJWQUw7CkBAIC0xMTU4LDEyICsxMTY0LDEzIEBACiAgKi8KIAogc3RhdGljIGludCB0aXBjX3BvcnRfcmVjdl9zZWN0aW9ucyhzdHJ1Y3QgdGlwY19wb3J0ICpzZW5kZXIsIHVuc2lnbmVkIGludCBudW1fc2VjdCwKLQkJCQkgICBzdHJ1Y3QgaW92ZWMgY29uc3QgKm1zZ19zZWN0KQorCQkJCSAgIHN0cnVjdCBpb3ZlYyBjb25zdCAqbXNnX3NlY3QsCisJCQkJICAgdW5zaWduZWQgaW50IHRvdGFsX2xlbikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqYnVmOwogCWludCByZXM7CiAKLQlyZXMgPSB0aXBjX21zZ19idWlsZCgmc2VuZGVyLT5waGRyLCBtc2dfc2VjdCwgbnVtX3NlY3QsCisJcmVzID0gdGlwY19tc2dfYnVpbGQoJnNlbmRlci0+cGhkciwgbXNnX3NlY3QsIG51bV9zZWN0LCB0b3RhbF9sZW4sCiAJCQlNQVhfTVNHX1NJWkUsICFzZW5kZXItPnVzZXJfcG9ydCwgJmJ1Zik7CiAJaWYgKGxpa2VseShidWYpKQogCQl0aXBjX3BvcnRfcmVjdl9tc2coYnVmKTsKQEAgLTExNzQsNyArMTE4MSw4IEBACiAgKiB0aXBjX3NlbmQgLSBzZW5kIG1lc3NhZ2Ugc2VjdGlvbnMgb24gY29ubmVjdGlvbgogICovCiAKLWludCB0aXBjX3NlbmQodTMyIHJlZiwgdW5zaWduZWQgaW50IG51bV9zZWN0LCBzdHJ1Y3QgaW92ZWMgY29uc3QgKm1zZ19zZWN0KQoraW50IHRpcGNfc2VuZCh1MzIgcmVmLCB1bnNpZ25lZCBpbnQgbnVtX3NlY3QsIHN0cnVjdCBpb3ZlYyBjb25zdCAqbXNnX3NlY3QsCisJICAgICAgdW5zaWduZWQgaW50IHRvdGFsX2xlbikKIHsKIAlzdHJ1Y3QgdGlwY19wb3J0ICpwX3B0cjsKIAl1MzIgZGVzdG5vZGU7CkBAIC0xMTg5LDkgKzExOTcsMTAgQEAKIAkJZGVzdG5vZGUgPSBwb3J0X3BlZXJub2RlKHBfcHRyKTsKIAkJaWYgKGxpa2VseShkZXN0bm9kZSAhPSB0aXBjX293bl9hZGRyKSkKIAkJCXJlcyA9IHRpcGNfbGlua19zZW5kX3NlY3Rpb25zX2Zhc3QocF9wdHIsIG1zZ19zZWN0LCBudW1fc2VjdCwKLQkJCQkJCQkgICBkZXN0bm9kZSk7CisJCQkJCQkJICAgdG90YWxfbGVuLCBkZXN0bm9kZSk7CiAJCWVsc2UKLQkJCXJlcyA9IHRpcGNfcG9ydF9yZWN2X3NlY3Rpb25zKHBfcHRyLCBudW1fc2VjdCwgbXNnX3NlY3QpOworCQkJcmVzID0gdGlwY19wb3J0X3JlY3Zfc2VjdGlvbnMocF9wdHIsIG51bV9zZWN0LCBtc2dfc2VjdCwKKwkJCQkJCSAgICAgIHRvdGFsX2xlbik7CiAKIAkJaWYgKGxpa2VseShyZXMgIT0gLUVMSU5LQ09ORykpIHsKIAkJCXBfcHRyLT5jb25nZXN0ZWQgPSAwOwpAQCAtMTIwMiw4ICsxMjExLDcgQEAKIAl9CiAJaWYgKHBvcnRfdW5yZWxpYWJsZShwX3B0cikpIHsKIAkJcF9wdHItPmNvbmdlc3RlZCA9IDA7Ci0JCS8qIEp1c3QgY2FsY3VsYXRlIG1zZyBsZW5ndGggYW5kIHJldHVybiAqLwotCQlyZXR1cm4gdGlwY19tc2dfY2FsY19kYXRhX3NpemUobXNnX3NlY3QsIG51bV9zZWN0KTsKKwkJcmV0dXJuIHRvdGFsX2xlbjsKIAl9CiAJcmV0dXJuIC1FTElOS0NPTkc7CiB9CkBAIC0xMjEzLDcgKzEyMjEsOCBAQAogICovCiAKIGludCB0aXBjX3NlbmQybmFtZSh1MzIgcmVmLCBzdHJ1Y3QgdGlwY19uYW1lIGNvbnN0ICpuYW1lLCB1bnNpZ25lZCBpbnQgZG9tYWluLAotCSAgIHVuc2lnbmVkIGludCBudW1fc2VjdCwgc3RydWN0IGlvdmVjIGNvbnN0ICptc2dfc2VjdCkKKwkJICAgdW5zaWduZWQgaW50IG51bV9zZWN0LCBzdHJ1Y3QgaW92ZWMgY29uc3QgKm1zZ19zZWN0LAorCQkgICB1bnNpZ25lZCBpbnQgdG90YWxfbGVuKQogewogCXN0cnVjdCB0aXBjX3BvcnQgKnBfcHRyOwogCXN0cnVjdCB0aXBjX21zZyAqbXNnOwpAQCAtMTI0MCwyMyArMTI0OSwyMyBAQAogCWlmIChsaWtlbHkoZGVzdHBvcnQpKSB7CiAJCWlmIChsaWtlbHkoZGVzdG5vZGUgPT0gdGlwY19vd25fYWRkcikpCiAJCQlyZXMgPSB0aXBjX3BvcnRfcmVjdl9zZWN0aW9ucyhwX3B0ciwgbnVtX3NlY3QsCi0JCQkJCQkgICAgICBtc2dfc2VjdCk7CisJCQkJCQkgICAgICBtc2dfc2VjdCwgdG90YWxfbGVuKTsKIAkJZWxzZQogCQkJcmVzID0gdGlwY19saW5rX3NlbmRfc2VjdGlvbnNfZmFzdChwX3B0ciwgbXNnX3NlY3QsCi0JCQkJCQkJICAgbnVtX3NlY3QsIGRlc3Rub2RlKTsKKwkJCQkJCQkgICBudW1fc2VjdCwgdG90YWxfbGVuLAorCQkJCQkJCSAgIGRlc3Rub2RlKTsKIAkJaWYgKGxpa2VseShyZXMgIT0gLUVMSU5LQ09ORykpIHsKIAkJCWlmIChyZXMgPiAwKQogCQkJCXBfcHRyLT5zZW50Kys7CiAJCQlyZXR1cm4gcmVzOwogCQl9CiAJCWlmIChwb3J0X3VucmVsaWFibGUocF9wdHIpKSB7Ci0JCQkvKiBKdXN0IGNhbGN1bGF0ZSBtc2cgbGVuZ3RoIGFuZCByZXR1cm4gKi8KLQkJCXJldHVybiB0aXBjX21zZ19jYWxjX2RhdGFfc2l6ZShtc2dfc2VjdCwgbnVtX3NlY3QpOworCQkJcmV0dXJuIHRvdGFsX2xlbjsKIAkJfQogCQlyZXR1cm4gLUVMSU5LQ09ORzsKIAl9CiAJcmV0dXJuIHRpcGNfcG9ydF9yZWplY3Rfc2VjdGlvbnMocF9wdHIsIG1zZywgbXNnX3NlY3QsIG51bV9zZWN0LAotCQkJCQkgVElQQ19FUlJfTk9fTkFNRSk7CisJCQkJCSB0b3RhbF9sZW4sIFRJUENfRVJSX05PX05BTUUpOwogfQogCiAvKioKQEAgLTEyNjQsNyArMTI3Myw4IEBACiAgKi8KIAogaW50IHRpcGNfc2VuZDJwb3J0KHUzMiByZWYsIHN0cnVjdCB0aXBjX3BvcnRpZCBjb25zdCAqZGVzdCwKLQkgICB1bnNpZ25lZCBpbnQgbnVtX3NlY3QsIHN0cnVjdCBpb3ZlYyBjb25zdCAqbXNnX3NlY3QpCisJCSAgIHVuc2lnbmVkIGludCBudW1fc2VjdCwgc3RydWN0IGlvdmVjIGNvbnN0ICptc2dfc2VjdCwKKwkJICAgdW5zaWduZWQgaW50IHRvdGFsX2xlbikKIHsKIAlzdHJ1Y3QgdGlwY19wb3J0ICpwX3B0cjsKIAlzdHJ1Y3QgdGlwY19tc2cgKm1zZzsKQEAgLTEyNzYsNiArMTI4Niw3IEBACiAKIAltc2cgPSAmcF9wdHItPnBoZHI7CiAJbXNnX3NldF90eXBlKG1zZywgVElQQ19ESVJFQ1RfTVNHKTsKKwltc2dfc2V0X2xvb2t1cF9zY29wZShtc2csIDApOwogCW1zZ19zZXRfb3JpZ25vZGUobXNnLCB0aXBjX293bl9hZGRyKTsKIAltc2dfc2V0X29yaWdwb3J0KG1zZywgcmVmKTsKIAltc2dfc2V0X2Rlc3Rub2RlKG1zZywgZGVzdC0+bm9kZSk7CkBAIC0xMjgzLDE4ICsxMjk0LDE4IEBACiAJbXNnX3NldF9oZHJfc3oobXNnLCBESVJfTVNHX0hfU0laRSk7CiAKIAlpZiAoZGVzdC0+bm9kZSA9PSB0aXBjX293bl9hZGRyKQotCQlyZXMgPSAgdGlwY19wb3J0X3JlY3Zfc2VjdGlvbnMocF9wdHIsIG51bV9zZWN0LCBtc2dfc2VjdCk7CisJCXJlcyA9ICB0aXBjX3BvcnRfcmVjdl9zZWN0aW9ucyhwX3B0ciwgbnVtX3NlY3QsIG1zZ19zZWN0LAorCQkJCQkgICAgICAgdG90YWxfbGVuKTsKIAllbHNlCiAJCXJlcyA9IHRpcGNfbGlua19zZW5kX3NlY3Rpb25zX2Zhc3QocF9wdHIsIG1zZ19zZWN0LCBudW1fc2VjdCwKLQkJCQkJCSAgIGRlc3QtPm5vZGUpOworCQkJCQkJICAgdG90YWxfbGVuLCBkZXN0LT5ub2RlKTsKIAlpZiAobGlrZWx5KHJlcyAhPSAtRUxJTktDT05HKSkgewogCQlpZiAocmVzID4gMCkKIAkJCXBfcHRyLT5zZW50Kys7CiAJCXJldHVybiByZXM7CiAJfQogCWlmIChwb3J0X3VucmVsaWFibGUocF9wdHIpKSB7Ci0JCS8qIEp1c3QgY2FsY3VsYXRlIG1zZyBsZW5ndGggYW5kIHJldHVybiAqLwotCQlyZXR1cm4gdGlwY19tc2dfY2FsY19kYXRhX3NpemUobXNnX3NlY3QsIG51bV9zZWN0KTsKKwkJcmV0dXJuIHRvdGFsX2xlbjsKIAl9CiAJcmV0dXJuIC1FTElOS0NPTkc7CiB9CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9wb3J0LmggYi9uZXQvdGlwYy9wb3J0LmgKaW5kZXggODdiOTQyNC4uYjlhYTM0MSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvcG9ydC5oCisrKyBiL25ldC90aXBjL3BvcnQuaApAQCAtMjA1LDIzICsyMDUsMjcgQEAKIC8qCiAgKiBUSVBDIG1lc3NhZ2luZyByb3V0aW5lcwogICovCi1pbnQgdGlwY19zZW5kKHUzMiBwb3J0cmVmLCB1bnNpZ25lZCBpbnQgbnVtX3NlY3QsIHN0cnVjdCBpb3ZlYyBjb25zdCAqbXNnX3NlY3QpOworaW50IHRpcGNfc2VuZCh1MzIgcG9ydHJlZiwgdW5zaWduZWQgaW50IG51bV9zZWN0LCBzdHJ1Y3QgaW92ZWMgY29uc3QgKm1zZ19zZWN0LAorCSAgICAgIHVuc2lnbmVkIGludCB0b3RhbF9sZW4pOwogCiBpbnQgdGlwY19zZW5kMm5hbWUodTMyIHBvcnRyZWYsIHN0cnVjdCB0aXBjX25hbWUgY29uc3QgKm5hbWUsIHUzMiBkb21haW4sCi0JCXVuc2lnbmVkIGludCBudW1fc2VjdCwgc3RydWN0IGlvdmVjIGNvbnN0ICptc2dfc2VjdCk7CisJCSAgIHVuc2lnbmVkIGludCBudW1fc2VjdCwgc3RydWN0IGlvdmVjIGNvbnN0ICptc2dfc2VjdCwKKwkJICAgdW5zaWduZWQgaW50IHRvdGFsX2xlbik7CiAKIGludCB0aXBjX3NlbmQycG9ydCh1MzIgcG9ydHJlZiwgc3RydWN0IHRpcGNfcG9ydGlkIGNvbnN0ICpkZXN0LAotCQl1bnNpZ25lZCBpbnQgbnVtX3NlY3QsIHN0cnVjdCBpb3ZlYyBjb25zdCAqbXNnX3NlY3QpOworCQkgICB1bnNpZ25lZCBpbnQgbnVtX3NlY3QsIHN0cnVjdCBpb3ZlYyBjb25zdCAqbXNnX3NlY3QsCisJCSAgIHVuc2lnbmVkIGludCB0b3RhbF9sZW4pOwogCiBpbnQgdGlwY19zZW5kX2J1ZjJwb3J0KHUzMiBwb3J0cmVmLCBzdHJ1Y3QgdGlwY19wb3J0aWQgY29uc3QgKmRlc3QsCiAJCXN0cnVjdCBza19idWZmICpidWYsIHVuc2lnbmVkIGludCBkc3opOwogCiBpbnQgdGlwY19tdWx0aWNhc3QodTMyIHBvcnRyZWYsIHN0cnVjdCB0aXBjX25hbWVfc2VxIGNvbnN0ICpzZXEsCi0JCXVuc2lnbmVkIGludCBzZWN0aW9uX2NvdW50LCBzdHJ1Y3QgaW92ZWMgY29uc3QgKm1zZyk7CisJCSAgIHVuc2lnbmVkIGludCBzZWN0aW9uX2NvdW50LCBzdHJ1Y3QgaW92ZWMgY29uc3QgKm1zZywKKwkJICAgdW5zaWduZWQgaW50IHRvdGFsX2xlbik7CiAKIGludCB0aXBjX3BvcnRfcmVqZWN0X3NlY3Rpb25zKHN0cnVjdCB0aXBjX3BvcnQgKnBfcHRyLCBzdHJ1Y3QgdGlwY19tc2cgKmhkciwKIAkJCSAgICAgIHN0cnVjdCBpb3ZlYyBjb25zdCAqbXNnX3NlY3QsIHUzMiBudW1fc2VjdCwKLQkJCSAgICAgIGludCBlcnIpOworCQkJICAgICAgdW5zaWduZWQgaW50IHRvdGFsX2xlbiwgaW50IGVycik7CiBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19wb3J0X2dldF9wb3J0cyh2b2lkKTsKIHZvaWQgdGlwY19wb3J0X3JlY3ZfcHJvdG9fbXNnKHN0cnVjdCBza19idWZmICpidWYpOwogdm9pZCB0aXBjX3BvcnRfcmVjdl9tY2FzdChzdHJ1Y3Qgc2tfYnVmZiAqYnVmLCBzdHJ1Y3QgcG9ydF9saXN0ICpkcCk7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9zb2NrZXQuYyBiL25ldC90aXBjL3NvY2tldC5jCmluZGV4IDI5ZDk0ZDUuLjMzODgzNzMgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL3NvY2tldC5jCisrKyBiL25ldC90aXBjL3NvY2tldC5jCkBAIC01MzUsNiArNTM1LDkgQEAKIAlpZiAodW5saWtlbHkoKG0tPm1zZ19uYW1lbGVuIDwgc2l6ZW9mKCpkZXN0KSkgfHwKIAkJICAgICAoZGVzdC0+ZmFtaWx5ICE9IEFGX1RJUEMpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCh0b3RhbF9sZW4gPiBUSVBDX01BWF9VU0VSX01TR19TSVpFKSB8fAorCSAgICAobS0+bXNnX2lvdmxlbiA+ICh1bnNpZ25lZClJTlRfTUFYKSkKKwkJcmV0dXJuIC1FTVNHU0laRTsKIAogCWlmIChpb2NiKQogCQlsb2NrX3NvY2soc2spOwpAQCAtNTczLDEyICs1NzYsMTQgQEAKIAkJCQkJICAgICAmZGVzdC0+YWRkci5uYW1lLm5hbWUsCiAJCQkJCSAgICAgZGVzdC0+YWRkci5uYW1lLmRvbWFpbiwKIAkJCQkJICAgICBtLT5tc2dfaW92bGVuLAotCQkJCQkgICAgIG0tPm1zZ19pb3YpOworCQkJCQkgICAgIG0tPm1zZ19pb3YsCisJCQkJCSAgICAgdG90YWxfbGVuKTsKIAkJfSBlbHNlIGlmIChkZXN0LT5hZGRydHlwZSA9PSBUSVBDX0FERFJfSUQpIHsKIAkJCXJlcyA9IHRpcGNfc2VuZDJwb3J0KHRwb3J0LT5yZWYsCiAJCQkJCSAgICAgJmRlc3QtPmFkZHIuaWQsCiAJCQkJCSAgICAgbS0+bXNnX2lvdmxlbiwKLQkJCQkJICAgICBtLT5tc2dfaW92KTsKKwkJCQkJICAgICBtLT5tc2dfaW92LAorCQkJCQkgICAgIHRvdGFsX2xlbik7CiAJCX0gZWxzZSBpZiAoZGVzdC0+YWRkcnR5cGUgPT0gVElQQ19BRERSX01DQVNUKSB7CiAJCQlpZiAobmVlZHNfY29ubikgewogCQkJCXJlcyA9IC1FT1BOT1RTVVBQOwpAQCAtNTkwLDcgKzU5NSw4IEBACiAJCQlyZXMgPSB0aXBjX211bHRpY2FzdCh0cG9ydC0+cmVmLAogCQkJCQkgICAgICZkZXN0LT5hZGRyLm5hbWVzZXEsCiAJCQkJCSAgICAgbS0+bXNnX2lvdmxlbiwKLQkJCQkJICAgICBtLT5tc2dfaW92KTsKKwkJCQkJICAgICBtLT5tc2dfaW92LAorCQkJCQkgICAgIHRvdGFsX2xlbik7CiAJCX0KIAkJaWYgKGxpa2VseShyZXMgIT0gLUVMSU5LQ09ORykpIHsKIAkJCWlmIChuZWVkc19jb25uICYmIChyZXMgPj0gMCkpCkBAIC02NDAsNiArNjQ2LDEwIEBACiAJaWYgKHVubGlrZWx5KGRlc3QpKQogCQlyZXR1cm4gc2VuZF9tc2coaW9jYiwgc29jaywgbSwgdG90YWxfbGVuKTsKIAorCWlmICgodG90YWxfbGVuID4gVElQQ19NQVhfVVNFUl9NU0dfU0laRSkgfHwKKwkgICAgKG0tPm1zZ19pb3ZsZW4gPiAodW5zaWduZWQpSU5UX01BWCkpCisJCXJldHVybiAtRU1TR1NJWkU7CisKIAlpZiAoaW9jYikKIAkJbG9ja19zb2NrKHNrKTsKIApAQCAtNjUyLDcgKzY2Miw4IEBACiAJCQlicmVhazsKIAkJfQogCi0JCXJlcyA9IHRpcGNfc2VuZCh0cG9ydC0+cmVmLCBtLT5tc2dfaW92bGVuLCBtLT5tc2dfaW92KTsKKwkJcmVzID0gdGlwY19zZW5kKHRwb3J0LT5yZWYsIG0tPm1zZ19pb3ZsZW4sIG0tPm1zZ19pb3YsCisJCQkJdG90YWxfbGVuKTsKIAkJaWYgKGxpa2VseShyZXMgIT0gLUVMSU5LQ09ORykpCiAJCQlicmVhazsKIAkJaWYgKG0tPm1zZ19mbGFncyAmIE1TR19ET05UV0FJVCkgewpAQCAtNzIzLDYgKzczNCwxMiBAQAogCQlnb3RvIGV4aXQ7CiAJfQogCisJaWYgKCh0b3RhbF9sZW4gPiAodW5zaWduZWQpSU5UX01BWCkgfHwKKwkgICAgKG0tPm1zZ19pb3ZsZW4gPiAodW5zaWduZWQpSU5UX01BWCkpIHsKKwkJcmVzID0gLUVNU0dTSVpFOworCQlnb3RvIGV4aXQ7CisJfQorCiAJLyoKIAkgKiBTZW5kIGVhY2ggaW92ZWMgZW50cnkgdXNpbmcgb25lIG9yIG1vcmUgbWVzc2FnZXMKIAkgKgpAQCAtNzUzLDcgKzc3MCw3IEBACiAJCQkJYnl0ZXNfdG9fc2VuZCA9IGN1cnJfbGVmdDsKIAkJCW15X2lvdi5pb3ZfYmFzZSA9IGN1cnJfc3RhcnQ7CiAJCQlteV9pb3YuaW92X2xlbiA9IGJ5dGVzX3RvX3NlbmQ7Ci0JCQlyZXMgPSBzZW5kX3BhY2tldChOVUxMLCBzb2NrLCAmbXlfbXNnLCAwKTsKKwkJCXJlcyA9IHNlbmRfcGFja2V0KE5VTEwsIHNvY2ssICZteV9tc2csIGJ5dGVzX3RvX3NlbmQpOwogCQkJaWYgKHJlcyA8IDApIHsKIAkJCQlpZiAoYnl0ZXNfc2VudCkKIAkJCQkJcmVzID0gYnl0ZXNfc2VudDsKZGlmZiAtLWdpdCBhL25ldC90aXBjL3N1YnNjci5jIGIvbmV0L3RpcGMvc3Vic2NyLmMKaW5kZXggYWFlOWVhZS4uNmNmNzI2OCAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvc3Vic2NyLmMKKysrIGIvbmV0L3RpcGMvc3Vic2NyLmMKQEAgLTEwOSw3ICsxMDksNyBAQAogCXN1Yi0+ZXZ0LmZvdW5kX3VwcGVyID0gaHRvaGwoZm91bmRfdXBwZXIsIHN1Yi0+c3dhcCk7CiAJc3ViLT5ldnQucG9ydC5yZWYgPSBodG9obChwb3J0X3JlZiwgc3ViLT5zd2FwKTsKIAlzdWItPmV2dC5wb3J0Lm5vZGUgPSBodG9obChub2RlLCBzdWItPnN3YXApOwotCXRpcGNfc2VuZChzdWItPnNlcnZlcl9yZWYsIDEsICZtc2dfc2VjdCk7CisJdGlwY19zZW5kKHN1Yi0+c2VydmVyX3JlZiwgMSwgJm1zZ19zZWN0LCBtc2dfc2VjdC5pb3ZfbGVuKTsKIH0KIAogLyoqCkBAIC01MjEsNyArNTIxLDcgQEAKIAogCS8qIFNlbmQgYW4gQUNLLSB0byBjb21wbGV0ZSBjb25uZWN0aW9uIGhhbmRzaGFraW5nICovCiAKLQl0aXBjX3NlbmQoc2VydmVyX3BvcnRfcmVmLCAwLCBOVUxMKTsKKwl0aXBjX3NlbmQoc2VydmVyX3BvcnRfcmVmLCAwLCBOVUxMLCAwKTsKIAogCS8qIEhhbmRsZSBvcHRpb25hbCBzdWJzY3JpcHRpb24gcmVxdWVzdCAqLwogCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5jIGIvbmV0L3dpcmVsZXNzL2NvcmUuYwppbmRleCBmZTAxZGUyLi5jMjJlZjM0IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5jCisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmMKQEAgLTQ2LDYgKzQ2LDExIEBACiAvKiBmb3IgdGhlIGNsZWFudXAsIHNjYW4gYW5kIGV2ZW50IHdvcmtzICovCiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqY2ZnODAyMTFfd3E7CiAKK3N0YXRpYyBib29sIGNmZzgwMjExX2Rpc2FibGVfNDBtaHpfMjRnaHo7Cittb2R1bGVfcGFyYW0oY2ZnODAyMTFfZGlzYWJsZV80MG1oel8yNGdoeiwgYm9vbCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGNmZzgwMjExX2Rpc2FibGVfNDBtaHpfMjRnaHosCisJCSAiRGlzYWJsZSA0ME1IeiBzdXBwb3J0IGluIHRoZSAyLjRHSHogYmFuZCIpOworCiAvKiByZXF1aXJlcyBjZmc4MDIxMV9tdXRleCB0byBiZSBoZWxkISAqLwogc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpjZmc4MDIxMV9yZGV2X2J5X3dpcGh5X2lkeChpbnQgd2lwaHlfaWR4KQogewpAQCAtMzY1LDcgKzM3MCw3IEBACiAJc3Bpbl9sb2NrX2luaXQoJnJkZXYtPmJzc19sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmcmRldi0+YnNzX2xpc3QpOwogCUlOSVRfV09SSygmcmRldi0+c2Nhbl9kb25lX3drLCBfX2NmZzgwMjExX3NjYW5fZG9uZSk7Ci0KKwlJTklUX1dPUksoJnJkZXYtPnNjaGVkX3NjYW5fcmVzdWx0c193aywgX19jZmc4MDIxMV9zY2hlZF9zY2FuX3Jlc3VsdHMpOwogI2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUCiAJcmRldi0+d2lwaHkud2V4dCA9ICZjZmc4MDIxMV93ZXh0X2hhbmRsZXI7CiAjZW5kaWYKQEAgLTQxMSw2ICs0MTYsNjcgQEAKIH0KIEVYUE9SVF9TWU1CT0wod2lwaHlfbmV3KTsKIAorc3RhdGljIGludCB3aXBoeV92ZXJpZnlfY29tYmluYXRpb25zKHN0cnVjdCB3aXBoeSAqd2lwaHkpCit7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9pZmFjZV9jb21iaW5hdGlvbiAqYzsKKwlpbnQgaSwgajsKKworCS8qIElmIHdlIGhhdmUgY29tYmluYXRpb25zIGVuZm9yY2UgdGhlbSAqLworCWlmICh3aXBoeS0+bl9pZmFjZV9jb21iaW5hdGlvbnMpCisJCXdpcGh5LT5mbGFncyB8PSBXSVBIWV9GTEFHX0VORk9SQ0VfQ09NQklOQVRJT05TOworCisJZm9yIChpID0gMDsgaSA8IHdpcGh5LT5uX2lmYWNlX2NvbWJpbmF0aW9uczsgaSsrKSB7CisJCXUzMiBjbnQgPSAwOworCQl1MTYgYWxsX2lmdHlwZXMgPSAwOworCisJCWMgPSAmd2lwaHktPmlmYWNlX2NvbWJpbmF0aW9uc1tpXTsKKworCQkvKiBDb21iaW5hdGlvbnMgd2l0aCBqdXN0IG9uZSBpbnRlcmZhY2UgYXJlbid0IHJlYWwgKi8KKwkJaWYgKFdBUk5fT04oYy0+bWF4X2ludGVyZmFjZXMgPCAyKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCS8qIE5lZWQgYXQgbGVhc3Qgb25lIGNoYW5uZWwgKi8KKwkJaWYgKFdBUk5fT04oIWMtPm51bV9kaWZmZXJlbnRfY2hhbm5lbHMpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKFdBUk5fT04oIWMtPm5fbGltaXRzKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWZvciAoaiA9IDA7IGogPCBjLT5uX2xpbWl0czsgaisrKSB7CisJCQl1MTYgdHlwZXMgPSBjLT5saW1pdHNbal0udHlwZXM7CisKKwkJCS8qCisJCQkgKiBpbnRlcmZhY2UgdHlwZXMgc2hvdWxkbid0IG92ZXJsYXAsIHRoaXMgaXMKKwkJCSAqIHVzZWQgaW4gY2ZnODAyMTFfY2FuX2NoYW5nZV9pbnRlcmZhY2UoKQorCQkJICovCisJCQlpZiAoV0FSTl9PTih0eXBlcyAmIGFsbF9pZnR5cGVzKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWFsbF9pZnR5cGVzIHw9IHR5cGVzOworCisJCQlpZiAoV0FSTl9PTighYy0+bGltaXRzW2pdLm1heCkpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCS8qIFNob3VsZG4ndCBsaXN0IHNvZnR3YXJlIGlmdHlwZXMgaW4gY29tYmluYXRpb25zISAqLworCQkJaWYgKFdBUk5fT04od2lwaHktPnNvZnR3YXJlX2lmdHlwZXMgJiB0eXBlcykpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCWNudCArPSBjLT5saW1pdHNbal0ubWF4OworCQkJLyoKKwkJCSAqIERvbid0IGFkdmVydGlzZSBhbiB1bnN1cHBvcnRlZCB0eXBlCisJCQkgKiBpbiBhIGNvbWJpbmF0aW9uLgorCQkJICovCisJCQlpZiAoV0FSTl9PTigod2lwaHktPmludGVyZmFjZV9tb2RlcyAmIHR5cGVzKSAhPSB0eXBlcykpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQkvKiBZb3UgY2FuJ3QgZXZlbiBjaG9vc2UgdGhhdCBtYW55ISAqLworCQlpZiAoV0FSTl9PTihjbnQgPCBjLT5tYXhfaW50ZXJmYWNlcykpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogaW50IHdpcGh5X3JlZ2lzdGVyKHN0cnVjdCB3aXBoeSAqd2lwaHkpCiB7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKQEAgLTQzOSw2ICs1MDUsMTAgQEAKIAlpZiAoV0FSTl9PTihpZm1vZGVzICE9IHdpcGh5LT5pbnRlcmZhY2VfbW9kZXMpKQogCQl3aXBoeS0+aW50ZXJmYWNlX21vZGVzID0gaWZtb2RlczsKIAorCXJlcyA9IHdpcGh5X3ZlcmlmeV9jb21iaW5hdGlvbnMod2lwaHkpOworCWlmIChyZXMpCisJCXJldHVybiByZXM7CisKIAkvKiBzYW5pdHkgY2hlY2sgc3VwcG9ydGVkIGJhbmRzL2NoYW5uZWxzICovCiAJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykgewogCQlzYmFuZCA9IHdpcGh5LT5iYW5kc1tiYW5kXTsKQEAgLTQ1MSw2ICs1MjEsMTggQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCS8qCisJCSAqIFNpbmNlIGNmZzgwMjExX2Rpc2FibGVfNDBtaHpfMjRnaHogaXMgZ2xvYmFsLCB3ZSBjYW4KKwkJICogbW9kaWZ5IHRoZSBzYmFuZCdzIGh0IGRhdGEgZXZlbiBpZiB0aGUgZHJpdmVyIHVzZXMgYQorCQkgKiBnbG9iYWwgc3RydWN0dXJlIGZvciB0aGF0LgorCQkgKi8KKwkJaWYgKGNmZzgwMjExX2Rpc2FibGVfNDBtaHpfMjRnaHogJiYKKwkJICAgIGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWiAmJgorCQkgICAgc2JhbmQtPmh0X2NhcC5odF9zdXBwb3J0ZWQpIHsKKwkJCXNiYW5kLT5odF9jYXAuY2FwICY9IH5JRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MDsKKwkJCXNiYW5kLT5odF9jYXAuY2FwICY9IH5JRUVFODAyMTFfSFRfQ0FQX1NHSV80MDsKKwkJfQorCisJCS8qCiAJCSAqIFNpbmNlIHdlIHVzZSBhIHUzMiBmb3IgcmF0ZSBiaXRtYXBzIGluCiAJCSAqIGllZWU4MDIxMV9nZXRfcmVzcG9uc2VfcmF0ZSwgd2UgY2Fubm90CiAJCSAqIGhhdmUgbW9yZSB0aGFuIDMyIGxlZ2FjeSByYXRlcy4KQEAgLTQ3Niw2ICs1NTgsMTMgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJaWYgKHJkZXYtPndpcGh5Lndvd2xhbi5uX3BhdHRlcm5zKSB7CisJCWlmIChXQVJOX09OKCFyZGV2LT53aXBoeS53b3dsYW4ucGF0dGVybl9taW5fbGVuIHx8CisJCQkgICAgcmRldi0+d2lwaHkud293bGFuLnBhdHRlcm5fbWluX2xlbiA+CisJCQkgICAgcmRldi0+d2lwaHkud293bGFuLnBhdHRlcm5fbWF4X2xlbikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAkvKiBjaGVjayBhbmQgc2V0IHVwIGJpdHJhdGVzICovCiAJaWVlZTgwMjExX3NldF9iaXRyYXRlX2ZsYWdzKHdpcGh5KTsKIApAQCAtNjE0LDYgKzcwMyw3IEBACiAJbXV0ZXhfZGVzdHJveSgmcmRldi0+ZGV2bGlzdF9tdHgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzY2FuLCB0bXAsICZyZGV2LT5ic3NfbGlzdCwgbGlzdCkKIAkJY2ZnODAyMTFfcHV0X2Jzcygmc2Nhbi0+cHViKTsKKwljZmc4MDIxMV9yZGV2X2ZyZWVfd293bGFuKHJkZXYpOwogCWtmcmVlKHJkZXYpOwogfQogCkBAIC02NDcsNiArNzM3LDExIEBACiAJCV9fX2NmZzgwMjExX3NjYW5fZG9uZShyZGV2LCB0cnVlKTsKIAl9CiAKKwlpZiAoV0FSTl9PTihyZGV2LT5zY2hlZF9zY2FuX3JlcSAmJgorCQkgICAgcmRldi0+c2NoZWRfc2Nhbl9yZXEtPmRldiA9PSB3ZGV2LT5uZXRkZXYpKSB7CisJCV9fY2ZnODAyMTFfc3RvcF9zY2hlZF9zY2FuKHJkZXYsIGZhbHNlKTsKKwl9CisKIAljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKIAogCW11dGV4X2xvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKQEAgLTY2OCw2ICs3NjMsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZGV2OwogCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OworCWludCByZXQ7CiAKIAlpZiAoIXdkZXYpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKQEAgLTczNCw2ICs4MzAsMTAgQEAKIAkJCWJyZWFrOwogCQljYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQ6CiAJCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJCWNmZzgwMjExX2xvY2tfcmRldihyZGV2KTsKKwkJCV9fY2ZnODAyMTFfc3RvcF9zY2hlZF9zY2FuKHJkZXYsIGZhbHNlKTsKKwkJCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOworCiAJCQl3ZGV2X2xvY2sod2Rldik7CiAjaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFQKIAkJCWtmcmVlKHdkZXYtPndleHQuaWUpOwpAQCAtNzUyLDYgKzg1Miw3IEBACiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQorCQl3ZGV2LT5iZWFjb25faW50ZXJ2YWwgPSAwOwogCQlicmVhazsKIAljYXNlIE5FVERFVl9ET1dOOgogCQlkZXZfaG9sZChkZXYpOwpAQCAtODU4LDYgKzk1OSw5IEBACiAJCQlyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubygtRU9QTk9UU1VQUCk7CiAJCWlmIChyZmtpbGxfYmxvY2tlZChyZGV2LT5yZmtpbGwpKQogCQkJcmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8oLUVSRktJTEwpOworCQlyZXQgPSBjZmc4MDIxMV9jYW5fYWRkX2ludGVyZmFjZShyZGV2LCB3ZGV2LT5pZnR5cGUpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8ocmV0KTsKIAkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5oIGIvbmV0L3dpcmVsZXNzL2NvcmUuaAppbmRleCAyNmEwYTA4Li5iZjBmYjQwIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5oCisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmgKQEAgLTYwLDggKzYwLDEwIEBACiAJc3RydWN0IHJiX3Jvb3QgYnNzX3RyZWU7CiAJdTMyIGJzc19nZW5lcmF0aW9uOwogCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnNjYW5fcmVxOyAvKiBwcm90ZWN0ZWQgYnkgUlROTCAqLworCXN0cnVjdCBjZmc4MDIxMV9zY2hlZF9zY2FuX3JlcXVlc3QgKnNjaGVkX3NjYW5fcmVxOwogCXVuc2lnbmVkIGxvbmcgc3VzcGVuZF9hdDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2Nhbl9kb25lX3drOworCXN0cnVjdCB3b3JrX3N0cnVjdCBzY2hlZF9zY2FuX3Jlc3VsdHNfd2s7CiAKICNpZmRlZiBDT05GSUdfTkw4MDIxMV9URVNUTU9ERQogCXN0cnVjdCBnZW5sX2luZm8gKnRlc3Rtb2RlX2luZm87CkBAIC03MCw2ICs3Miw4IEBACiAJc3RydWN0IHdvcmtfc3RydWN0IGNvbm5fd29yazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZXZlbnRfd29yazsKIAorCXN0cnVjdCBjZmc4MDIxMV93b3dsYW4gKndvd2xhbjsKKwogCS8qIG11c3QgYmUgbGFzdCBiZWNhdXNlIG9mIHRoZSB3YXkgd2UgZG8gd2lwaHlfcHJpdigpLAogCSAqIGFuZCBpdCBzaG91bGQgYXQgbGVhc3QgYmUgYWxpZ25lZCB0byBORVRERVZfQUxJR04gKi8KIAlzdHJ1Y3Qgd2lwaHkgd2lwaHkgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oTkVUREVWX0FMSUdOKSkpOwpAQCAtODksNiArOTMsMTggQEAKIAlyZXR1cm4gd2lwaHlfaWR4ID49IDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZAorY2ZnODAyMTFfcmRldl9mcmVlX3dvd2xhbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpCit7CisJaW50IGk7CisKKwlpZiAoIXJkZXYtPndvd2xhbikKKwkJcmV0dXJuOworCWZvciAoaSA9IDA7IGkgPCByZGV2LT53b3dsYW4tPm5fcGF0dGVybnM7IGkrKykKKwkJa2ZyZWUocmRldi0+d293bGFuLT5wYXR0ZXJuc1tpXS5tYXNrKTsKKwlrZnJlZShyZGV2LT53b3dsYW4tPnBhdHRlcm5zKTsKKwlrZnJlZShyZGV2LT53b3dsYW4pOworfQogCiBleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmNmZzgwMjExX3dxOwogZXh0ZXJuIHN0cnVjdCBtdXRleCBjZmc4MDIxMV9tdXRleDsKQEAgLTM5NywxMiArNDEzLDI2IEBACiB2b2lkIGNmZzgwMjExX3NtZV9kaXNhc3NvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaWR4KTsKIHZvaWQgX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IHdvcmtfc3RydWN0ICp3ayk7CiB2b2lkIF9fX2NmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsIGJvb2wgbGVhayk7Cit2b2lkIF9fY2ZnODAyMTFfc2NoZWRfc2Nhbl9yZXN1bHRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd2spOworaW50IF9fY2ZnODAyMTFfc3RvcF9zY2hlZF9zY2FuKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSAgICAgICBib29sIGRyaXZlcl9pbml0aWF0ZWQpOwogdm9pZCBjZmc4MDIxMV91cGxvYWRfY29ubmVjdF9rZXlzKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpOwogaW50IGNmZzgwMjExX2NoYW5nZV9pZmFjZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gbmw4MDIxMV9pZnR5cGUgbnR5cGUsCiAJCQkgIHUzMiAqZmxhZ3MsIHN0cnVjdCB2aWZfcGFyYW1zICpwYXJhbXMpOwogdm9pZCBjZmc4MDIxMV9wcm9jZXNzX3JkZXZfZXZlbnRzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldik7CiAKK2ludCBjZmc4MDIxMV9jYW5fY2hhbmdlX2ludGVyZmFjZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkJICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAorCQkJCSAgZW51bSBubDgwMjExX2lmdHlwZSBpZnR5cGUpOworCitzdGF0aWMgaW5saW5lIGludAorY2ZnODAyMTFfY2FuX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICAgZW51bSBubDgwMjExX2lmdHlwZSBpZnR5cGUpCit7CisJcmV0dXJuIGNmZzgwMjExX2Nhbl9jaGFuZ2VfaW50ZXJmYWNlKHJkZXYsIE5VTEwsIGlmdHlwZSk7Cit9CisKIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqCiByZGV2X2ZyZXFfdG9fY2hhbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCSAgaW50IGZyZXEsIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlKTsKQEAgLTQxMiw2ICs0NDIsOSBAQAogCiB1MTYgY2ZnODAyMTFfY2FsY3VsYXRlX2JpdHJhdGUoc3RydWN0IHJhdGVfaW5mbyAqcmF0ZSk7CiAKK2ludCBjZmc4MDIxMV92YWxpZGF0ZV9iZWFjb25faW50KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCQkgdTMyIGJlYWNvbl9pbnQpOworCiAjaWZkZWYgQ09ORklHX0NGRzgwMjExX0RFVkVMT1BFUl9XQVJOSU5HUwogI2RlZmluZSBDRkc4MDIxMV9ERVZfV0FSTl9PTihjb25kKQlXQVJOX09OKGNvbmQpCiAjZWxzZQpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2xpYjgwMjExX2NyeXB0X3dlcC5jIGIvbmV0L3dpcmVsZXNzL2xpYjgwMjExX2NyeXB0X3dlcC5jCmluZGV4IGUyZTg4ODcuLjJmMjY1ZTAgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9saWI4MDIxMV9jcnlwdF93ZXAuYworKysgYi9uZXQvd2lyZWxlc3MvbGliODAyMTFfY3J5cHRfd2VwLmMKQEAgLTk2LDEzICs5NiwxMiBAQAogCQkJICAgICAgIHU4ICprZXksIGludCBrZXlsZW4sIHZvaWQgKnByaXYpCiB7CiAJc3RydWN0IGxpYjgwMjExX3dlcF9kYXRhICp3ZXAgPSBwcml2OwotCXUzMiBrbGVuLCBsZW47CisJdTMyIGtsZW47CiAJdTggKnBvczsKIAogCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IDQgfHwgc2tiLT5sZW4gPCBoZHJfbGVuKQogCQlyZXR1cm4gLTE7CiAKLQlsZW4gPSBza2ItPmxlbiAtIGhkcl9sZW47CiAJcG9zID0gc2tiX3B1c2goc2tiLCA0KTsKIAltZW1tb3ZlKHBvcywgcG9zICsgNCwgaGRyX2xlbik7CiAJcG9zICs9IGhkcl9sZW47CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvbWVzaC5jIGIvbmV0L3dpcmVsZXNzL21lc2guYwppbmRleCA3M2UzOWMxLi41YzExNjA4IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvbWVzaC5jCisrKyBiL25ldC93aXJlbGVzcy9tZXNoLmMKQEAgLTEsNSArMSw2IEBACiAjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+CiAjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+CisjaW5jbHVkZSAibmw4MDIxMS5oIgogI2luY2x1ZGUgImNvcmUuaCIKIAogLyogRGVmYXVsdCB2YWx1ZXMsIHRpbWVvdXRzIGluIG1zICovCkBAIC01Myw4ICs1NCw5IEBACiBjb25zdCBzdHJ1Y3QgbWVzaF9zZXR1cCBkZWZhdWx0X21lc2hfc2V0dXAgPSB7CiAJLnBhdGhfc2VsX3Byb3RvID0gSUVFRTgwMjExX1BBVEhfUFJPVE9DT0xfSFdNUCwKIAkucGF0aF9tZXRyaWMgPSBJRUVFODAyMTFfUEFUSF9NRVRSSUNfQUlSVElNRSwKLQkudmVuZG9yX2llID0gTlVMTCwKLQkudmVuZG9yX2llX2xlbiA9IDAsCisJLmllID0gTlVMTCwKKwkuaWVfbGVuID0gMCwKKwkuaXNfc2VjdXJlID0gZmFsc2UsCiB9OwogCiBpbnQgX19jZmc4MDIxMV9qb2luX21lc2goc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LApAQCAtNzIsNiArNzQsMTAgQEAKIAlpZiAoZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCisJaWYgKCEocmRldi0+d2lwaHkuZmxhZ3MgJiBXSVBIWV9GTEFHX01FU0hfQVVUSCkgJiYKKwkgICAgICBzZXR1cC0+aXNfc2VjdXJlKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKIAlpZiAod2Rldi0+bWVzaF9pZF9sZW4pCiAJCXJldHVybiAtRUFMUkVBRFk7CiAKQEAgLTEwNSw2ICsxMTEsMTkgQEAKIAlyZXR1cm4gZXJyOwogfQogCit2b2lkIGNmZzgwMjExX25vdGlmeV9uZXdfcGVlcl9jYW5kaWRhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJY29uc3QgdTggKm1hY2FkZHIsIGNvbnN0IHU4KiBpZSwgdTggaWVfbGVuLCBnZnBfdCBnZnApCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKworCWlmIChXQVJOX09OKHdkZXYtPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSkKKwkJcmV0dXJuOworCisJbmw4MDIxMV9zZW5kX25ld19wZWVyX2NhbmRpZGF0ZSh3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpLCBkZXYsCisJCQltYWNhZGRyLCBpZSwgaWVfbGVuLCBnZnApOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9ub3RpZnlfbmV3X3BlZXJfY2FuZGlkYXRlKTsKKwogc3RhdGljIGludCBfX2NmZzgwMjExX2xlYXZlX21lc2goc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL21sbWUuYyBiL25ldC93aXJlbGVzcy9tbG1lLmMKaW5kZXggYWE1ZGY4OC4uNDkzYjkzOSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL21sbWUuYworKysgYi9uZXQvd2lyZWxlc3MvbWxtZS5jCkBAIC03NzAsNiArNzcwLDE1IEBACiB9CiBFWFBPUlRfU1lNQk9MKGNmZzgwMjExX25ld19zdGEpOwogCit2b2lkIGNmZzgwMjExX2RlbF9zdGEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKm1hY19hZGRyLCBnZnBfdCBnZnApCit7CisJc3RydWN0IHdpcGh5ICp3aXBoeSA9IGRldi0+aWVlZTgwMjExX3B0ci0+d2lwaHk7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKKworCW5sODAyMTFfc2VuZF9zdGFfZGVsX2V2ZW50KHJkZXYsIGRldiwgbWFjX2FkZHIsIGdmcCk7Cit9CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX2RlbF9zdGEpOworCiBzdHJ1Y3QgY2ZnODAyMTFfbWdtdF9yZWdpc3RyYXRpb24gewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIApAQCAtOTU0LDYgKzk2MywxNiBAQAogCQkJaWYgKG1lbWNtcChtZ210LT5ic3NpZCwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pKQogCQkJCWVyciA9IC1FSU5WQUw7CiAJCQlicmVhazsKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgorCQkJaWYgKG1lbWNtcChtZ210LT5zYSwgbWdtdC0+YnNzaWQsIEVUSF9BTEVOKSkgeworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJYnJlYWs7CisJCQl9CisJCQkvKgorCQkJICogY2hlY2sgZm9yIG1lc2ggREEgbXVzdCBiZSBkb25lIGJ5IGRyaXZlciBhcworCQkJICogY2ZnODAyMTEgZG9lc24ndCB0cmFjayB0aGUgc3RhdGlvbnMKKwkJCSAqLworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKaW5kZXggNGViY2U0Mi4uMjIyMmNlMDggMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMKKysrIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwpAQCAtMTI0LDYgKzEyNCw3IEBACiAJW05MODAyMTFfQVRUUl9CU1NfSFRfT1BNT0RFXSA9IHsgLnR5cGUgPSBOTEFfVTE2IH0sCiAKIAlbTkw4MDIxMV9BVFRSX01FU0hfQ09ORklHXSA9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sCisJW05MODAyMTFfQVRUUl9TVVBQT1JUX01FU0hfQVVUSF0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSwKIAogCVtOTDgwMjExX0FUVFJfSFRfQ0FQQUJJTElUWV0gPSB7IC50eXBlID0gTkxBX0JJTkFSWSwKIAkJCQkJIC5sZW4gPSBOTDgwMjExX0hUX0NBUEFCSUxJVFlfTEVOIH0sCkBAIC0xNzIsNiArMTczLDkgQEAKIAlbTkw4MDIxMV9BVFRSX01DQVNUX1JBVEVdID0geyAudHlwZSA9IE5MQV9VMzIgfSwKIAlbTkw4MDIxMV9BVFRSX09GRkNIQU5ORUxfVFhfT0tdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sCiAJW05MODAyMTFfQVRUUl9LRVlfREVGQVVMVF9UWVBFU10gPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LAorCVtOTDgwMjExX0FUVFJfV09XTEFOX1RSSUdHRVJTXSA9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sCisJW05MODAyMTFfQVRUUl9TVEFfUExJTktfU1RBVEVdID0geyAudHlwZSA9IE5MQV9VOCB9LAorCVtOTDgwMjExX0FUVFJfU0NIRURfU0NBTl9JTlRFUlZBTF0gPSB7IC50eXBlID0gTkxBX1UzMiB9LAogfTsKIAogLyogcG9saWN5IGZvciB0aGUga2V5IGF0dHJpYnV0ZXMgKi8KQEAgLTE5Myw2ICsxOTcsMTUgQEAKIAlbTkw4MDIxMV9LRVlfREVGQVVMVF9UWVBFX01VTFRJQ0FTVF0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSwKIH07CiAKKy8qIHBvbGljeSBmb3IgV29XTEFOIGF0dHJpYnV0ZXMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeQorbmw4MDIxMV93b3dsYW5fcG9saWN5W05VTV9OTDgwMjExX1dPV0xBTl9UUklHXSA9IHsKKwlbTkw4MDIxMV9XT1dMQU5fVFJJR19BTlldID0geyAudHlwZSA9IE5MQV9GTEFHIH0sCisJW05MODAyMTFfV09XTEFOX1RSSUdfRElTQ09OTkVDVF0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSwKKwlbTkw4MDIxMV9XT1dMQU5fVFJJR19NQUdJQ19QS1RdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sCisJW05MODAyMTFfV09XTEFOX1RSSUdfUEtUX1BBVFRFUk5dID0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwKK307CisKIC8qIGlmaWR4IGdldCBoZWxwZXIgKi8KIHN0YXRpYyBpbnQgbmw4MDIxMV9nZXRfaWZpZHgoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogewpAQCAtNTMzLDYgKzU0Niw3IEBACiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FQX1ZMQU46CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfR086CisJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgogCQlpZiAoIXdkZXYtPmN1cnJlbnRfYnNzKQpAQCAtNTUwLDYgKzU2NCw4OCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG5sODAyMTFfcHV0X2lmdHlwZXMoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIGF0dHIsIHUxNiBpZm1vZGVzKQoreworCXN0cnVjdCBubGF0dHIgKm5sX21vZGVzID0gbmxhX25lc3Rfc3RhcnQobXNnLCBhdHRyKTsKKwlpbnQgaTsKKworCWlmICghbmxfbW9kZXMpCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCisJaSA9IDA7CisJd2hpbGUgKGlmbW9kZXMpIHsKKwkJaWYgKGlmbW9kZXMgJiAxKQorCQkJTkxBX1BVVF9GTEFHKG1zZywgaSk7CisJCWlmbW9kZXMgPj49IDE7CisJCWkrKzsKKwl9CisKKwlubGFfbmVzdF9lbmQobXNnLCBubF9tb2Rlcyk7CisJcmV0dXJuIDA7CisKK25sYV9wdXRfZmFpbHVyZToKKwlyZXR1cm4gLUVOT0JVRlM7Cit9CisKK3N0YXRpYyBpbnQgbmw4MDIxMV9wdXRfaWZhY2VfY29tYmluYXRpb25zKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKm1zZykKK3sKKwlzdHJ1Y3QgbmxhdHRyICpubF9jb21iaXM7CisJaW50IGksIGo7CisKKwlubF9jb21iaXMgPSBubGFfbmVzdF9zdGFydChtc2csCisJCQkJTkw4MDIxMV9BVFRSX0lOVEVSRkFDRV9DT01CSU5BVElPTlMpOworCWlmICghbmxfY29tYmlzKQorCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKworCWZvciAoaSA9IDA7IGkgPCB3aXBoeS0+bl9pZmFjZV9jb21iaW5hdGlvbnM7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2lmYWNlX2NvbWJpbmF0aW9uICpjOworCQlzdHJ1Y3QgbmxhdHRyICpubF9jb21iaSwgKm5sX2xpbWl0czsKKworCQljID0gJndpcGh5LT5pZmFjZV9jb21iaW5hdGlvbnNbaV07CisKKwkJbmxfY29tYmkgPSBubGFfbmVzdF9zdGFydChtc2csIGkgKyAxKTsKKwkJaWYgKCFubF9jb21iaSkKKwkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCisJCW5sX2xpbWl0cyA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgTkw4MDIxMV9JRkFDRV9DT01CX0xJTUlUUyk7CisJCWlmICghbmxfbGltaXRzKQorCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKKwkJZm9yIChqID0gMDsgaiA8IGMtPm5fbGltaXRzOyBqKyspIHsKKwkJCXN0cnVjdCBubGF0dHIgKm5sX2xpbWl0OworCisJCQlubF9saW1pdCA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgaiArIDEpOworCQkJaWYgKCFubF9saW1pdCkKKwkJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKwkJCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9JRkFDRV9MSU1JVF9NQVgsCisJCQkJICAgIGMtPmxpbWl0c1tqXS5tYXgpOworCQkJaWYgKG5sODAyMTFfcHV0X2lmdHlwZXMobXNnLCBOTDgwMjExX0lGQUNFX0xJTUlUX1RZUEVTLAorCQkJCQkJYy0+bGltaXRzW2pdLnR5cGVzKSkKKwkJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKwkJCW5sYV9uZXN0X2VuZChtc2csIG5sX2xpbWl0KTsKKwkJfQorCisJCW5sYV9uZXN0X2VuZChtc2csIG5sX2xpbWl0cyk7CisKKwkJaWYgKGMtPmJlYWNvbl9pbnRfaW5mcmFfbWF0Y2gpCisJCQlOTEFfUFVUX0ZMQUcobXNnLAorCQkJCU5MODAyMTFfSUZBQ0VfQ09NQl9TVEFfQVBfQklfTUFUQ0gpOworCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfSUZBQ0VfQ09NQl9OVU1fQ0hBTk5FTFMsCisJCQkgICAgYy0+bnVtX2RpZmZlcmVudF9jaGFubmVscyk7CisJCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9JRkFDRV9DT01CX01BWE5VTSwKKwkJCSAgICBjLT5tYXhfaW50ZXJmYWNlcyk7CisKKwkJbmxhX25lc3RfZW5kKG1zZywgbmxfY29tYmkpOworCX0KKworCW5sYV9uZXN0X2VuZChtc2csIG5sX2NvbWJpcyk7CisKKwlyZXR1cm4gMDsKK25sYV9wdXRfZmFpbHVyZToKKwlyZXR1cm4gLUVOT0JVRlM7Cit9CisKIHN0YXRpYyBpbnQgbmw4MDIxMV9zZW5kX3dpcGh5KHN0cnVjdCBza19idWZmICptc2csIHUzMiBwaWQsIHUzMiBzZXEsIGludCBmbGFncywKIAkJCSAgICAgIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2KQogewpAQCAtNTU3LDEzICs2NTMsMTEgQEAKIAlzdHJ1Y3QgbmxhdHRyICpubF9iYW5kcywgKm5sX2JhbmQ7CiAJc3RydWN0IG5sYXR0ciAqbmxfZnJlcXMsICpubF9mcmVxOwogCXN0cnVjdCBubGF0dHIgKm5sX3JhdGVzLCAqbmxfcmF0ZTsKLQlzdHJ1Y3QgbmxhdHRyICpubF9tb2RlczsKIAlzdHJ1Y3QgbmxhdHRyICpubF9jbWRzOwogCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CiAJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlOwogCWludCBpOwotCXUxNiBpZm1vZGVzID0gZGV2LT53aXBoeS5pbnRlcmZhY2VfbW9kZXM7CiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eHJ4X3N0eXBlcyAqbWdtdF9zdHlwZXMgPQogCQkJCWRldi0+d2lwaHkubWdtdF9zdHlwZXM7CiAKQEAgLTU5NCw2ICs2ODgsOCBAQAogCiAJaWYgKGRldi0+d2lwaHkuZmxhZ3MgJiBXSVBIWV9GTEFHX0lCU1NfUlNOKQogCQlOTEFfUFVUX0ZMQUcobXNnLCBOTDgwMjExX0FUVFJfU1VQUE9SVF9JQlNTX1JTTik7CisJaWYgKGRldi0+d2lwaHkuZmxhZ3MgJiBXSVBIWV9GTEFHX01FU0hfQVVUSCkKKwkJTkxBX1BVVF9GTEFHKG1zZywgTkw4MDIxMV9BVFRSX1NVUFBPUlRfTUVTSF9BVVRIKTsKIAogCU5MQV9QVVQobXNnLCBOTDgwMjExX0FUVFJfQ0lQSEVSX1NVSVRFUywKIAkJc2l6ZW9mKHUzMikgKiBkZXYtPndpcGh5Lm5fY2lwaGVyX3N1aXRlcywKQEAgLTYyMSwyMCArNzE3LDEwIEBACiAJCX0KIAl9CiAKLQlubF9tb2RlcyA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgTkw4MDIxMV9BVFRSX1NVUFBPUlRFRF9JRlRZUEVTKTsKLQlpZiAoIW5sX21vZGVzKQorCWlmIChubDgwMjExX3B1dF9pZnR5cGVzKG1zZywgTkw4MDIxMV9BVFRSX1NVUFBPUlRFRF9JRlRZUEVTLAorCQkJCWRldi0+d2lwaHkuaW50ZXJmYWNlX21vZGVzKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKLQlpID0gMDsKLQl3aGlsZSAoaWZtb2RlcykgewotCQlpZiAoaWZtb2RlcyAmIDEpCi0JCQlOTEFfUFVUX0ZMQUcobXNnLCBpKTsKLQkJaWZtb2RlcyA+Pj0gMTsKLQkJaSsrOwotCX0KLQotCW5sYV9uZXN0X2VuZChtc2csIG5sX21vZGVzKTsKLQogCW5sX2JhbmRzID0gbmxhX25lc3Rfc3RhcnQobXNnLCBOTDgwMjExX0FUVFJfV0lQSFlfQkFORFMpOwogCWlmICghbmxfYmFuZHMpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwpAQCAtNzQ2LDYgKzgzMiw4IEBACiAJfQogCUNNRChzZXRfY2hhbm5lbCwgU0VUX0NIQU5ORUwpOwogCUNNRChzZXRfd2RzX3BlZXIsIFNFVF9XRFNfUEVFUik7CisJaWYgKGRldi0+d2lwaHkuZmxhZ3MgJiBXSVBIWV9GTEFHX1NVUFBPUlRTX1NDSEVEX1NDQU4pCisJCUNNRChzY2hlZF9zY2FuX3N0YXJ0LCBTVEFSVF9TQ0hFRF9TQ0FOKTsKIAogI3VuZGVmIENNRAogCkBAIC04MTgsNiArOTA2LDQyIEBACiAJCW5sYV9uZXN0X2VuZChtc2csIG5sX2lmcyk7CiAJfQogCisJaWYgKGRldi0+d2lwaHkud293bGFuLmZsYWdzIHx8IGRldi0+d2lwaHkud293bGFuLm5fcGF0dGVybnMpIHsKKwkJc3RydWN0IG5sYXR0ciAqbmxfd293bGFuOworCisJCW5sX3dvd2xhbiA9IG5sYV9uZXN0X3N0YXJ0KG1zZywKKwkJCQlOTDgwMjExX0FUVFJfV09XTEFOX1RSSUdHRVJTX1NVUFBPUlRFRCk7CisJCWlmICghbmxfd293bGFuKQorCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKKwkJaWYgKGRldi0+d2lwaHkud293bGFuLmZsYWdzICYgV0lQSFlfV09XTEFOX0FOWSkKKwkJCU5MQV9QVVRfRkxBRyhtc2csIE5MODAyMTFfV09XTEFOX1RSSUdfQU5ZKTsKKwkJaWYgKGRldi0+d2lwaHkud293bGFuLmZsYWdzICYgV0lQSFlfV09XTEFOX0RJU0NPTk5FQ1QpCisJCQlOTEFfUFVUX0ZMQUcobXNnLCBOTDgwMjExX1dPV0xBTl9UUklHX0RJU0NPTk5FQ1QpOworCQlpZiAoZGV2LT53aXBoeS53b3dsYW4uZmxhZ3MgJiBXSVBIWV9XT1dMQU5fTUFHSUNfUEtUKQorCQkJTkxBX1BVVF9GTEFHKG1zZywgTkw4MDIxMV9XT1dMQU5fVFJJR19NQUdJQ19QS1QpOworCQlpZiAoZGV2LT53aXBoeS53b3dsYW4ubl9wYXR0ZXJucykgeworCQkJc3RydWN0IG5sODAyMTFfd293bGFuX3BhdHRlcm5fc3VwcG9ydCBwYXQgPSB7CisJCQkJLm1heF9wYXR0ZXJucyA9IGRldi0+d2lwaHkud293bGFuLm5fcGF0dGVybnMsCisJCQkJLm1pbl9wYXR0ZXJuX2xlbiA9CisJCQkJCWRldi0+d2lwaHkud293bGFuLnBhdHRlcm5fbWluX2xlbiwKKwkJCQkubWF4X3BhdHRlcm5fbGVuID0KKwkJCQkJZGV2LT53aXBoeS53b3dsYW4ucGF0dGVybl9tYXhfbGVuLAorCQkJfTsKKwkJCU5MQV9QVVQobXNnLCBOTDgwMjExX1dPV0xBTl9UUklHX1BLVF9QQVRURVJOLAorCQkJCXNpemVvZihwYXQpLCAmcGF0KTsKKwkJfQorCisJCW5sYV9uZXN0X2VuZChtc2csIG5sX3dvd2xhbik7CisJfQorCisJaWYgKG5sODAyMTFfcHV0X2lmdHlwZXMobXNnLCBOTDgwMjExX0FUVFJfU09GVFdBUkVfSUZUWVBFUywKKwkJCQlkZXYtPndpcGh5LnNvZnR3YXJlX2lmdHlwZXMpKQorCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKworCWlmIChubDgwMjExX3B1dF9pZmFjZV9jb21iaW5hdGlvbnMoJmRldi0+d2lwaHksIG1zZykpCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCiAJcmV0dXJuIGdlbmxtc2dfZW5kKG1zZywgaGRyKTsKIAogIG5sYV9wdXRfZmFpbHVyZToKQEAgLTE2NzksMTQgKzE4MDMsNiBAQAogCQlpZiAoZXJyKQogCQkJZ290byBvdXQ7CiAKLQkJaWYgKCEocmRldi0+d2lwaHkuZmxhZ3MgJgotCQkJCVdJUEhZX0ZMQUdfU1VQUE9SVFNfU0VQQVJBVEVfREVGQVVMVF9LRVlTKSkgewotCQkJaWYgKCFrZXkuZGVmX3VuaSB8fCAha2V5LmRlZl9tdWx0aSkgewotCQkJCWVyciA9IC1FT1BOT1RTVVBQOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQl9Ci0KIAkJZXJyID0gcmRldi0+b3BzLT5zZXRfZGVmYXVsdF9rZXkoJnJkZXYtPndpcGh5LCBkZXYsIGtleS5pZHgsCiAJCQkJCQkga2V5LmRlZl91bmksIGtleS5kZWZfbXVsdGkpOwogCkBAIC0xODM3LDggKzE5NTMsOSBAQAogCQkgICAgc3RydWN0IGJlYWNvbl9wYXJhbWV0ZXJzICppbmZvKTsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLT51c2VyX3B0clswXTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby0+dXNlcl9wdHJbMV07CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKIAlzdHJ1Y3QgYmVhY29uX3BhcmFtZXRlcnMgcGFyYW1zOwotCWludCBoYXZlaW5mbyA9IDA7CisJaW50IGhhdmVpbmZvID0gMCwgZXJyOwogCiAJaWYgKCFpc192YWxpZF9pZV9hdHRyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9CRUFDT05fVEFJTF0pKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE4NDcsNiArMTk2NCw4IEBACiAJICAgIGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1AyUF9HTykKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCisJbWVtc2V0KCZwYXJhbXMsIDAsIHNpemVvZihwYXJhbXMpKTsKKwogCXN3aXRjaCAoaW5mby0+Z2VubGhkci0+Y21kKSB7CiAJY2FzZSBOTDgwMjExX0NNRF9ORVdfQkVBQ09OOgogCQkvKiB0aGVzZSBhcmUgcmVxdWlyZWQgZm9yIE5FV19CRUFDT04gKi8KQEAgLTE4NTUsNiArMTk3NCwxNSBAQAogCQkgICAgIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9CRUFDT05fSEVBRF0pCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAorCQlwYXJhbXMuaW50ZXJ2YWwgPQorCQkJbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0JFQUNPTl9JTlRFUlZBTF0pOworCQlwYXJhbXMuZHRpbV9wZXJpb2QgPQorCQkJbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0RUSU1fUEVSSU9EXSk7CisKKwkJZXJyID0gY2ZnODAyMTFfdmFsaWRhdGVfYmVhY29uX2ludChyZGV2LCBwYXJhbXMuaW50ZXJ2YWwpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwogCQljYWxsID0gcmRldi0+b3BzLT5hZGRfYmVhY29uOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfQ01EX1NFVF9CRUFDT046CkBAIC0xODY4LDIwICsxOTk2LDYgQEAKIAlpZiAoIWNhbGwpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCW1lbXNldCgmcGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7Ci0KLQlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0JFQUNPTl9JTlRFUlZBTF0pIHsKLQkJcGFyYW1zLmludGVydmFsID0KLQkJICAgIG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9CRUFDT05fSU5URVJWQUxdKTsKLQkJaGF2ZWluZm8gPSAxOwotCX0KLQotCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfRFRJTV9QRVJJT0RdKSB7Ci0JCXBhcmFtcy5kdGltX3BlcmlvZCA9Ci0JCSAgICBubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfRFRJTV9QRVJJT0RdKTsKLQkJaGF2ZWluZm8gPSAxOwotCX0KLQogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfQkVBQ09OX0hFQURdKSB7CiAJCXBhcmFtcy5oZWFkID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0JFQUNPTl9IRUFEXSk7CiAJCXBhcmFtcy5oZWFkX2xlbiA9CkBAIC0xODk5LDEzICsyMDEzLDE4IEBACiAJaWYgKCFoYXZlaW5mbykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR1cm4gY2FsbCgmcmRldi0+d2lwaHksIGRldiwgJnBhcmFtcyk7CisJZXJyID0gY2FsbCgmcmRldi0+d2lwaHksIGRldiwgJnBhcmFtcyk7CisJaWYgKCFlcnIgJiYgcGFyYW1zLmludGVydmFsKQorCQl3ZGV2LT5iZWFjb25faW50ZXJ2YWwgPSBwYXJhbXMuaW50ZXJ2YWw7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBubDgwMjExX2RlbF9iZWFjb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLT51c2VyX3B0clswXTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby0+dXNlcl9wdHJbMV07CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlpbnQgZXJyOwogCiAJaWYgKCFyZGV2LT5vcHMtPmRlbF9iZWFjb24pCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTE5MTQsNyArMjAzMywxMCBAQAogCSAgICBkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9QMlBfR08pCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJldHVybiByZGV2LT5vcHMtPmRlbF9iZWFjb24oJnJkZXYtPndpcGh5LCBkZXYpOworCWVyciA9IHJkZXYtPm9wcy0+ZGVsX2JlYWNvbigmcmRldi0+d2lwaHksIGRldik7CisJaWYgKCFlcnIpCisJCXdkZXYtPmJlYWNvbl9pbnRlcnZhbCA9IDA7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHN0YV9mbGFnc19wb2xpY3lbTkw4MDIxMV9TVEFfRkxBR19NQVggKyAxXSA9IHsKQEAgLTE5MjIsNiArMjA0NCw3IEBACiAJW05MODAyMTFfU1RBX0ZMQUdfU0hPUlRfUFJFQU1CTEVdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sCiAJW05MODAyMTFfU1RBX0ZMQUdfV01FXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAogCVtOTDgwMjExX1NUQV9GTEFHX01GUF0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSwKKwlbTkw4MDIxMV9TVEFfRkxBR19BVVRIRU5USUNBVEVEXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAogfTsKIAogc3RhdGljIGludCBwYXJzZV9zdGF0aW9uX2ZsYWdzKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sCkBAIC0yMDAyLDcgKzIxMjUsNyBAQAogCQkJCWNvbnN0IHU4ICptYWNfYWRkciwgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8pCiB7CiAJdm9pZCAqaGRyOwotCXN0cnVjdCBubGF0dHIgKnNpbmZvYXR0cjsKKwlzdHJ1Y3QgbmxhdHRyICpzaW5mb2F0dHIsICpic3NfcGFyYW07CiAKIAloZHIgPSBubDgwMjExaGRyX3B1dChtc2csIHBpZCwgc2VxLCBmbGFncywgTkw4MDIxMV9DTURfTkVXX1NUQVRJT04pOwogCWlmICghaGRyKQpAQCAtMjAxNiw2ICsyMTM5LDkgQEAKIAlzaW5mb2F0dHIgPSBubGFfbmVzdF9zdGFydChtc2csIE5MODAyMTFfQVRUUl9TVEFfSU5GTyk7CiAJaWYgKCFzaW5mb2F0dHIpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCWlmIChzaW5mby0+ZmlsbGVkICYgU1RBVElPTl9JTkZPX0NPTk5FQ1RFRF9USU1FKQorCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfU1RBX0lORk9fQ09OTkVDVEVEX1RJTUUsCisJCQkgICAgc2luZm8tPmNvbm5lY3RlZF90aW1lKTsKIAlpZiAoc2luZm8tPmZpbGxlZCAmIFNUQVRJT05fSU5GT19JTkFDVElWRV9USU1FKQogCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfU1RBX0lORk9fSU5BQ1RJVkVfVElNRSwKIAkJCSAgICBzaW5mby0+aW5hY3RpdmVfdGltZSk7CkBAIC0yMDYyLDYgKzIxODgsMjUgQEAKIAlpZiAoc2luZm8tPmZpbGxlZCAmIFNUQVRJT05fSU5GT19UWF9GQUlMRUQpCiAJCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9TVEFfSU5GT19UWF9GQUlMRUQsCiAJCQkgICAgc2luZm8tPnR4X2ZhaWxlZCk7CisJaWYgKHNpbmZvLT5maWxsZWQgJiBTVEFUSU9OX0lORk9fQlNTX1BBUkFNKSB7CisJCWJzc19wYXJhbSA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgTkw4MDIxMV9TVEFfSU5GT19CU1NfUEFSQU0pOworCQlpZiAoIWJzc19wYXJhbSkKKwkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCisJCWlmIChzaW5mby0+YnNzX3BhcmFtLmZsYWdzICYgQlNTX1BBUkFNX0ZMQUdTX0NUU19QUk9UKQorCQkJTkxBX1BVVF9GTEFHKG1zZywgTkw4MDIxMV9TVEFfQlNTX1BBUkFNX0NUU19QUk9UKTsKKwkJaWYgKHNpbmZvLT5ic3NfcGFyYW0uZmxhZ3MgJiBCU1NfUEFSQU1fRkxBR1NfU0hPUlRfUFJFQU1CTEUpCisJCQlOTEFfUFVUX0ZMQUcobXNnLCBOTDgwMjExX1NUQV9CU1NfUEFSQU1fU0hPUlRfUFJFQU1CTEUpOworCQlpZiAoc2luZm8tPmJzc19wYXJhbS5mbGFncyAmIEJTU19QQVJBTV9GTEFHU19TSE9SVF9TTE9UX1RJTUUpCisJCQlOTEFfUFVUX0ZMQUcobXNnLAorCQkJCSAgICAgTkw4MDIxMV9TVEFfQlNTX1BBUkFNX1NIT1JUX1NMT1RfVElNRSk7CisJCU5MQV9QVVRfVTgobXNnLCBOTDgwMjExX1NUQV9CU1NfUEFSQU1fRFRJTV9QRVJJT0QsCisJCQkgICBzaW5mby0+YnNzX3BhcmFtLmR0aW1fcGVyaW9kKTsKKwkJTkxBX1BVVF9VMTYobXNnLCBOTDgwMjExX1NUQV9CU1NfUEFSQU1fQkVBQ09OX0lOVEVSVkFMLAorCQkJICAgIHNpbmZvLT5ic3NfcGFyYW0uYmVhY29uX2ludGVydmFsKTsKKworCQlubGFfbmVzdF9lbmQobXNnLCBic3NfcGFyYW0pOworCX0KIAlubGFfbmVzdF9lbmQobXNnLCBzaW5mb2F0dHIpOwogCiAJcmV0dXJuIGdlbmxtc2dfZW5kKG1zZywgaGRyKTsKQEAgLTIxOTAsNiArMjMzNSw3IEBACiAJbWVtc2V0KCZwYXJhbXMsIDAsIHNpemVvZihwYXJhbXMpKTsKIAogCXBhcmFtcy5saXN0ZW5faW50ZXJ2YWwgPSAtMTsKKwlwYXJhbXMucGxpbmtfc3RhdGUgPSAtMTsKIAogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1RBX0FJRF0pCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjIyMSw2ICsyMzY3LDEwIEBACiAJCXBhcmFtcy5wbGlua19hY3Rpb24gPQogCQkgICAgbmxhX2dldF91OChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1RBX1BMSU5LX0FDVElPTl0pOwogCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TVEFfUExJTktfU1RBVEVdKQorCQlwYXJhbXMucGxpbmtfc3RhdGUgPQorCQkgICAgbmxhX2dldF91OChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1RBX1BMSU5LX1NUQVRFXSk7CisKIAllcnIgPSBnZXRfdmxhbihpbmZvLCByZGV2LCAmcGFyYW1zLnZsYW4pOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwpAQCAtMjI2MCw5ICsyNDEwLDEwIEBACiAJCQllcnIgPSAtRUlOVkFMOwogCQlpZiAocGFyYW1zLmxpc3Rlbl9pbnRlcnZhbCA+PSAwKQogCQkJZXJyID0gLUVJTlZBTDsKLQkJaWYgKHBhcmFtcy5zdXBwb3J0ZWRfcmF0ZXMpCi0JCQllcnIgPSAtRUlOVkFMOwotCQlpZiAocGFyYW1zLnN0YV9mbGFnc19tYXNrKQorCQlpZiAocGFyYW1zLnN0YV9mbGFnc19tYXNrICYKKwkJCQl+KEJJVChOTDgwMjExX1NUQV9GTEFHX0FVVEhFTlRJQ0FURUQpIHwKKwkJCQkgIEJJVChOTDgwMjExX1NUQV9GTEFHX01GUCkgfAorCQkJCSAgQklUKE5MODAyMTFfU1RBX0ZMQUdfQVVUSE9SSVpFRCkpKQogCQkJZXJyID0gLUVJTlZBTDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTIzMjQsMTEgKzI0NzUsMTYgQEAKIAkJcGFyYW1zLmh0X2NhcGEgPQogCQkJbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0hUX0NBUEFCSUxJVFldKTsKIAorCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1RBX1BMSU5LX0FDVElPTl0pCisJCXBhcmFtcy5wbGlua19hY3Rpb24gPQorCQkgICAgbmxhX2dldF91OChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1RBX1BMSU5LX0FDVElPTl0pOworCiAJaWYgKHBhcnNlX3N0YXRpb25fZmxhZ3MoaW5mbywgJnBhcmFtcykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQICYmCiAJICAgIGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4gJiYKKwkgICAgZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCAmJgogCSAgICBkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9QMlBfR08pCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0yODA0LDggKzI5NjAsMTAgQEAKIAlubDgwMjExX21lc2hfc2V0dXBfcGFyYW1zX3BvbGljeVtOTDgwMjExX01FU0hfU0VUVVBfQVRUUl9NQVgrMV0gPSB7CiAJW05MODAyMTFfTUVTSF9TRVRVUF9FTkFCTEVfVkVORE9SX1BBVEhfU0VMXSA9IHsgLnR5cGUgPSBOTEFfVTggfSwKIAlbTkw4MDIxMV9NRVNIX1NFVFVQX0VOQUJMRV9WRU5ET1JfTUVUUklDXSA9IHsgLnR5cGUgPSBOTEFfVTggfSwKLQlbTkw4MDIxMV9NRVNIX1NFVFVQX1ZFTkRPUl9QQVRIX1NFTF9JRV0gPSB7IC50eXBlID0gTkxBX0JJTkFSWSwKKwlbTkw4MDIxMV9NRVNIX1NFVFVQX1VTRVJTUEFDRV9BVVRIXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAorCVtOTDgwMjExX01FU0hfU0VUVVBfSUVdID0geyAudHlwZSA9IE5MQV9CSU5BUlksCiAJCS5sZW4gPSBJRUVFODAyMTFfTUFYX0RBVEFfTEVOIH0sCisJW05MODAyMTFfTUVTSF9TRVRVUF9VU0VSU1BBQ0VfQU1QRV0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSwKIH07CiAKIHN0YXRpYyBpbnQgbmw4MDIxMV9wYXJzZV9tZXNoX2NvbmZpZyhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLApAQCAtMjkwNiwxNCArMzA2NCwxNyBAQAogCQkgSUVFRTgwMjExX1BBVEhfTUVUUklDX1ZFTkRPUiA6CiAJCSBJRUVFODAyMTFfUEFUSF9NRVRSSUNfQUlSVElNRTsKIAotCWlmICh0YltOTDgwMjExX01FU0hfU0VUVVBfVkVORE9SX1BBVEhfU0VMX0lFXSkgeworCisJaWYgKHRiW05MODAyMTFfTUVTSF9TRVRVUF9JRV0pIHsKIAkJc3RydWN0IG5sYXR0ciAqaWVhdHRyID0KLQkJCXRiW05MODAyMTFfTUVTSF9TRVRVUF9WRU5ET1JfUEFUSF9TRUxfSUVdOworCQkJdGJbTkw4MDIxMV9NRVNIX1NFVFVQX0lFXTsKIAkJaWYgKCFpc192YWxpZF9pZV9hdHRyKGllYXR0cikpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJc2V0dXAtPnZlbmRvcl9pZSA9IG5sYV9kYXRhKGllYXR0cik7Ci0JCXNldHVwLT52ZW5kb3JfaWVfbGVuID0gbmxhX2xlbihpZWF0dHIpOworCQlzZXR1cC0+aWUgPSBubGFfZGF0YShpZWF0dHIpOworCQlzZXR1cC0+aWVfbGVuID0gbmxhX2xlbihpZWF0dHIpOwogCX0KKwlzZXR1cC0+aXNfYXV0aGVudGljYXRlZCA9IG5sYV9nZXRfZmxhZyh0YltOTDgwMjExX01FU0hfU0VUVVBfVVNFUlNQQUNFX0FVVEhdKTsKKwlzZXR1cC0+aXNfc2VjdXJlID0gbmxhX2dldF9mbGFnKHRiW05MODAyMTFfTUVTSF9TRVRVUF9VU0VSU1BBQ0VfQU1QRV0pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMjgyLDYgKzM0NDMsMTg4IEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCBubDgwMjExX3N0YXJ0X3NjaGVkX3NjYW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfc2NoZWRfc2Nhbl9yZXF1ZXN0ICpyZXF1ZXN0OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGluZm8tPnVzZXJfcHRyWzBdOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLT51c2VyX3B0clsxXTsKKwlzdHJ1Y3QgY2ZnODAyMTFfc3NpZCAqc3NpZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7CisJc3RydWN0IG5sYXR0ciAqYXR0cjsKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5OworCWludCBlcnIsIHRtcCwgbl9zc2lkcyA9IDAsIG5fY2hhbm5lbHMsIGk7CisJdTMyIGludGVydmFsOworCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKKwlzaXplX3QgaWVfbGVuOworCisJaWYgKCEocmRldi0+d2lwaHkuZmxhZ3MgJiBXSVBIWV9GTEFHX1NVUFBPUlRTX1NDSEVEX1NDQU4pIHx8CisJICAgICFyZGV2LT5vcHMtPnNjaGVkX3NjYW5fc3RhcnQpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmICghaXNfdmFsaWRfaWVfYXR0cihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocmRldi0+c2NoZWRfc2Nhbl9yZXEpCisJCXJldHVybiAtRUlOUFJPR1JFU1M7CisKKwlpZiAoIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TQ0hFRF9TQ0FOX0lOVEVSVkFMXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpbnRlcnZhbCA9IG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TQ0hFRF9TQ0FOX0lOVEVSVkFMXSk7CisJaWYgKGludGVydmFsID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJd2lwaHkgPSAmcmRldi0+d2lwaHk7CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fRlJFUVVFTkNJRVNdKSB7CisJCW5fY2hhbm5lbHMgPSB2YWxpZGF0ZV9zY2FuX2ZyZXFzKAorCQkJCWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX0ZSRVFVRU5DSUVTXSk7CisJCWlmICghbl9jaGFubmVscykKKwkJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZSB7CisJCW5fY2hhbm5lbHMgPSAwOworCisJCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspCisJCQlpZiAod2lwaHktPmJhbmRzW2JhbmRdKQorCQkJCW5fY2hhbm5lbHMgKz0gd2lwaHktPmJhbmRzW2JhbmRdLT5uX2NoYW5uZWxzOworCX0KKworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9TU0lEU10pCisJCW5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fU1NJRFNdLAorCQkJCSAgICB0bXApCisJCQluX3NzaWRzKys7CisKKwlpZiAobl9zc2lkcyA+IHdpcGh5LT5tYXhfc2Nhbl9zc2lkcykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSkKKwkJaWVfbGVuID0gbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKTsKKwllbHNlCisJCWllX2xlbiA9IDA7CisKKwlpZiAoaWVfbGVuID4gd2lwaHktPm1heF9zY2FuX2llX2xlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXF1ZXN0ID0ga3phbGxvYyhzaXplb2YoKnJlcXVlc3QpCisJCQkrIHNpemVvZigqc3NpZCkgKiBuX3NzaWRzCisJCQkrIHNpemVvZihjaGFubmVsKSAqIG5fY2hhbm5lbHMKKwkJCSsgaWVfbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlcXVlc3QpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKG5fc3NpZHMpCisJCXJlcXVlc3QtPnNzaWRzID0gKHZvaWQgKikmcmVxdWVzdC0+Y2hhbm5lbHNbbl9jaGFubmVsc107CisJcmVxdWVzdC0+bl9zc2lkcyA9IG5fc3NpZHM7CisJaWYgKGllX2xlbikgeworCQlpZiAocmVxdWVzdC0+c3NpZHMpCisJCQlyZXF1ZXN0LT5pZSA9ICh2b2lkICopKHJlcXVlc3QtPnNzaWRzICsgbl9zc2lkcyk7CisJCWVsc2UKKwkJCXJlcXVlc3QtPmllID0gKHZvaWQgKikocmVxdWVzdC0+Y2hhbm5lbHMgKyBuX2NoYW5uZWxzKTsKKwl9CisKKwlpID0gMDsKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fRlJFUVVFTkNJRVNdKSB7CisJCS8qIHVzZXIgc3BlY2lmaWVkLCBiYWlsIG91dCBpZiBjaGFubmVsIG5vdCBmb3VuZCAqLworCQlubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsCisJCQkJICAgIGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX0ZSRVFVRU5DSUVTXSwKKwkJCQkgICAgdG1wKSB7CisJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CisKKwkJCWNoYW4gPSBpZWVlODAyMTFfZ2V0X2NoYW5uZWwod2lwaHksIG5sYV9nZXRfdTMyKGF0dHIpKTsKKworCQkJaWYgKCFjaGFuKSB7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlnb3RvIG91dF9mcmVlOworCQkJfQorCisJCQkvKiBpZ25vcmUgZGlzYWJsZWQgY2hhbm5lbHMgKi8KKwkJCWlmIChjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKQorCQkJCWNvbnRpbnVlOworCisJCQlyZXF1ZXN0LT5jaGFubmVsc1tpXSA9IGNoYW47CisJCQlpKys7CisJCX0KKwl9IGVsc2UgeworCQkvKiBhbGwgY2hhbm5lbHMgKi8KKwkJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykgeworCQkJaW50IGo7CisJCQlpZiAoIXdpcGh5LT5iYW5kc1tiYW5kXSkKKwkJCQljb250aW51ZTsKKwkJCWZvciAoaiA9IDA7IGogPCB3aXBoeS0+YmFuZHNbYmFuZF0tPm5fY2hhbm5lbHM7IGorKykgeworCQkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjsKKworCQkJCWNoYW4gPSAmd2lwaHktPmJhbmRzW2JhbmRdLT5jaGFubmVsc1tqXTsKKworCQkJCWlmIChjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKQorCQkJCQljb250aW51ZTsKKworCQkJCXJlcXVlc3QtPmNoYW5uZWxzW2ldID0gY2hhbjsKKwkJCQlpKys7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoIWkpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlyZXF1ZXN0LT5uX2NoYW5uZWxzID0gaTsKKworCWkgPSAwOworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9TU0lEU10pIHsKKwkJbmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9TU0lEU10sCisJCQkJICAgIHRtcCkgeworCQkJaWYgKHJlcXVlc3QtPnNzaWRzW2ldLnNzaWRfbGVuID4KKwkJCSAgICBJRUVFODAyMTFfTUFYX1NTSURfTEVOKSB7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlnb3RvIG91dF9mcmVlOworCQkJfQorCQkJbWVtY3B5KHJlcXVlc3QtPnNzaWRzW2ldLnNzaWQsIG5sYV9kYXRhKGF0dHIpLAorCQkJICAgICAgIG5sYV9sZW4oYXR0cikpOworCQkJcmVxdWVzdC0+c3NpZHNbaV0uc3NpZF9sZW4gPSBubGFfbGVuKGF0dHIpOworCQkJaSsrOworCQl9CisJfQorCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pIHsKKwkJcmVxdWVzdC0+aWVfbGVuID0gbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKTsKKwkJbWVtY3B5KCh2b2lkICopcmVxdWVzdC0+aWUsCisJCSAgICAgICBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKSwKKwkJICAgICAgIHJlcXVlc3QtPmllX2xlbik7CisJfQorCisJcmVxdWVzdC0+ZGV2ID0gZGV2OworCXJlcXVlc3QtPndpcGh5ID0gJnJkZXYtPndpcGh5OworCXJlcXVlc3QtPmludGVydmFsID0gaW50ZXJ2YWw7CisKKwllcnIgPSByZGV2LT5vcHMtPnNjaGVkX3NjYW5fc3RhcnQoJnJkZXYtPndpcGh5LCBkZXYsIHJlcXVlc3QpOworCWlmICghZXJyKSB7CisJCXJkZXYtPnNjaGVkX3NjYW5fcmVxID0gcmVxdWVzdDsKKwkJbmw4MDIxMV9zZW5kX3NjaGVkX3NjYW4ocmRldiwgZGV2LAorCQkJCQlOTDgwMjExX0NNRF9TVEFSVF9TQ0hFRF9TQ0FOKTsKKwkJZ290byBvdXQ7CisJfQorCitvdXRfZnJlZToKKwlrZnJlZShyZXF1ZXN0KTsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG5sODAyMTFfc3RvcF9zY2hlZF9zY2FuKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLT51c2VyX3B0clswXTsKKworCWlmICghKHJkZXYtPndpcGh5LmZsYWdzICYgV0lQSFlfRkxBR19TVVBQT1JUU19TQ0hFRF9TQ0FOKSB8fAorCSAgICAhcmRldi0+b3BzLT5zY2hlZF9zY2FuX3N0b3ApCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXJldHVybiBfX2NmZzgwMjExX3N0b3Bfc2NoZWRfc2NhbihyZGV2LCBmYWxzZSk7Cit9CisKIHN0YXRpYyBpbnQgbmw4MDIxMV9zZW5kX2JzcyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgZmxhZ3MsCiAJCQkgICAgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCkBAIC00NzgwLDYgKzUxMjMsMTk0IEBACiAJcmV0dXJuIGNmZzgwMjExX2xlYXZlX21lc2gocmRldiwgZGV2KTsKIH0KIAorc3RhdGljIGludCBubDgwMjExX2dldF93b3dsYW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLT51c2VyX3B0clswXTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOworCXZvaWQgKmhkcjsKKworCWlmICghcmRldi0+d2lwaHkud293bGFuLmZsYWdzICYmICFyZGV2LT53aXBoeS53b3dsYW4ubl9wYXR0ZXJucykKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtc2cpCisJCXJldHVybiAtRU5PTUVNOworCisJaGRyID0gbmw4MDIxMWhkcl9wdXQobXNnLCBpbmZvLT5zbmRfcGlkLCBpbmZvLT5zbmRfc2VxLCAwLAorCQkJICAgICBOTDgwMjExX0NNRF9HRVRfV09XTEFOKTsKKwlpZiAoIWhkcikKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKKwlpZiAocmRldi0+d293bGFuKSB7CisJCXN0cnVjdCBubGF0dHIgKm5sX3dvd2xhbjsKKworCQlubF93b3dsYW4gPSBubGFfbmVzdF9zdGFydChtc2csIE5MODAyMTFfQVRUUl9XT1dMQU5fVFJJR0dFUlMpOworCQlpZiAoIW5sX3dvd2xhbikKKwkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCisJCWlmIChyZGV2LT53b3dsYW4tPmFueSkKKwkJCU5MQV9QVVRfRkxBRyhtc2csIE5MODAyMTFfV09XTEFOX1RSSUdfQU5ZKTsKKwkJaWYgKHJkZXYtPndvd2xhbi0+ZGlzY29ubmVjdCkKKwkJCU5MQV9QVVRfRkxBRyhtc2csIE5MODAyMTFfV09XTEFOX1RSSUdfRElTQ09OTkVDVCk7CisJCWlmIChyZGV2LT53b3dsYW4tPm1hZ2ljX3BrdCkKKwkJCU5MQV9QVVRfRkxBRyhtc2csIE5MODAyMTFfV09XTEFOX1RSSUdfTUFHSUNfUEtUKTsKKwkJaWYgKHJkZXYtPndvd2xhbi0+bl9wYXR0ZXJucykgeworCQkJc3RydWN0IG5sYXR0ciAqbmxfcGF0cywgKm5sX3BhdDsKKwkJCWludCBpLCBwYXRfbGVuOworCisJCQlubF9wYXRzID0gbmxhX25lc3Rfc3RhcnQobXNnLAorCQkJCQlOTDgwMjExX1dPV0xBTl9UUklHX1BLVF9QQVRURVJOKTsKKwkJCWlmICghbmxfcGF0cykKKwkJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKworCQkJZm9yIChpID0gMDsgaSA8IHJkZXYtPndvd2xhbi0+bl9wYXR0ZXJuczsgaSsrKSB7CisJCQkJbmxfcGF0ID0gbmxhX25lc3Rfc3RhcnQobXNnLCBpICsgMSk7CisJCQkJaWYgKCFubF9wYXQpCisJCQkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCQkJCXBhdF9sZW4gPSByZGV2LT53b3dsYW4tPnBhdHRlcm5zW2ldLnBhdHRlcm5fbGVuOworCQkJCU5MQV9QVVQobXNnLCBOTDgwMjExX1dPV0xBTl9QS1RQQVRfTUFTSywKKwkJCQkJRElWX1JPVU5EX1VQKHBhdF9sZW4sIDgpLAorCQkJCQlyZGV2LT53b3dsYW4tPnBhdHRlcm5zW2ldLm1hc2spOworCQkJCU5MQV9QVVQobXNnLCBOTDgwMjExX1dPV0xBTl9QS1RQQVRfUEFUVEVSTiwKKwkJCQkJcGF0X2xlbiwKKwkJCQkJcmRldi0+d293bGFuLT5wYXR0ZXJuc1tpXS5wYXR0ZXJuKTsKKwkJCQlubGFfbmVzdF9lbmQobXNnLCBubF9wYXQpOworCQkJfQorCQkJbmxhX25lc3RfZW5kKG1zZywgbmxfcGF0cyk7CisJCX0KKworCQlubGFfbmVzdF9lbmQobXNnLCBubF93b3dsYW4pOworCX0KKworCWdlbmxtc2dfZW5kKG1zZywgaGRyKTsKKwlyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pOworCitubGFfcHV0X2ZhaWx1cmU6CisJbmxtc2dfZnJlZShtc2cpOworCXJldHVybiAtRU5PQlVGUzsKK30KKworc3RhdGljIGludCBubDgwMjExX3NldF93b3dsYW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLT51c2VyX3B0clswXTsKKwlzdHJ1Y3QgbmxhdHRyICp0YltOVU1fTkw4MDIxMV9XT1dMQU5fVFJJR107CisJc3RydWN0IGNmZzgwMjExX3dvd2xhbiBub190cmlnZ2VycyA9IHt9OworCXN0cnVjdCBjZmc4MDIxMV93b3dsYW4gbmV3X3RyaWdnZXJzID0ge307CisJc3RydWN0IHdpcGh5X3dvd2xhbl9zdXBwb3J0ICp3b3dsYW4gPSAmcmRldi0+d2lwaHkud293bGFuOworCWludCBlcnIsIGk7CisKKwlpZiAoIXJkZXYtPndpcGh5Lndvd2xhbi5mbGFncyAmJiAhcmRldi0+d2lwaHkud293bGFuLm5fcGF0dGVybnMpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dPV0xBTl9UUklHR0VSU10pCisJCWdvdG8gbm9fdHJpZ2dlcnM7CisKKwllcnIgPSBubGFfcGFyc2UodGIsIE1BWF9OTDgwMjExX1dPV0xBTl9UUklHLAorCQkJbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dPV0xBTl9UUklHR0VSU10pLAorCQkJbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfV09XTEFOX1RSSUdHRVJTXSksCisJCQlubDgwMjExX3dvd2xhbl9wb2xpY3kpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAodGJbTkw4MDIxMV9XT1dMQU5fVFJJR19BTlldKSB7CisJCWlmICghKHdvd2xhbi0+ZmxhZ3MgJiBXSVBIWV9XT1dMQU5fQU5ZKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQluZXdfdHJpZ2dlcnMuYW55ID0gdHJ1ZTsKKwl9CisKKwlpZiAodGJbTkw4MDIxMV9XT1dMQU5fVFJJR19ESVNDT05ORUNUXSkgeworCQlpZiAoISh3b3dsYW4tPmZsYWdzICYgV0lQSFlfV09XTEFOX0RJU0NPTk5FQ1QpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCW5ld190cmlnZ2Vycy5kaXNjb25uZWN0ID0gdHJ1ZTsKKwl9CisKKwlpZiAodGJbTkw4MDIxMV9XT1dMQU5fVFJJR19NQUdJQ19QS1RdKSB7CisJCWlmICghKHdvd2xhbi0+ZmxhZ3MgJiBXSVBIWV9XT1dMQU5fTUFHSUNfUEtUKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQluZXdfdHJpZ2dlcnMubWFnaWNfcGt0ID0gdHJ1ZTsKKwl9CisKKwlpZiAodGJbTkw4MDIxMV9XT1dMQU5fVFJJR19QS1RfUEFUVEVSTl0pIHsKKwkJc3RydWN0IG5sYXR0ciAqcGF0OworCQlpbnQgbl9wYXR0ZXJucyA9IDA7CisJCWludCByZW0sIHBhdF9sZW4sIG1hc2tfbGVuOworCQlzdHJ1Y3QgbmxhdHRyICpwYXRfdGJbTlVNX05MODAyMTFfV09XTEFOX1BLVFBBVF07CisKKwkJbmxhX2Zvcl9lYWNoX25lc3RlZChwYXQsIHRiW05MODAyMTFfV09XTEFOX1RSSUdfUEtUX1BBVFRFUk5dLAorCQkJCSAgICByZW0pCisJCQluX3BhdHRlcm5zKys7CisJCWlmIChuX3BhdHRlcm5zID4gd293bGFuLT5uX3BhdHRlcm5zKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJbmV3X3RyaWdnZXJzLnBhdHRlcm5zID0ga2NhbGxvYyhuX3BhdHRlcm5zLAorCQkJCQkJc2l6ZW9mKG5ld190cmlnZ2Vycy5wYXR0ZXJuc1swXSksCisJCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKCFuZXdfdHJpZ2dlcnMucGF0dGVybnMpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQluZXdfdHJpZ2dlcnMubl9wYXR0ZXJucyA9IG5fcGF0dGVybnM7CisJCWkgPSAwOworCisJCW5sYV9mb3JfZWFjaF9uZXN0ZWQocGF0LCB0YltOTDgwMjExX1dPV0xBTl9UUklHX1BLVF9QQVRURVJOXSwKKwkJCQkgICAgcmVtKSB7CisJCQlubGFfcGFyc2UocGF0X3RiLCBNQVhfTkw4MDIxMV9XT1dMQU5fUEtUUEFULAorCQkJCSAgbmxhX2RhdGEocGF0KSwgbmxhX2xlbihwYXQpLCBOVUxMKTsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlpZiAoIXBhdF90YltOTDgwMjExX1dPV0xBTl9QS1RQQVRfTUFTS10gfHwKKwkJCSAgICAhcGF0X3RiW05MODAyMTFfV09XTEFOX1BLVFBBVF9QQVRURVJOXSkKKwkJCQlnb3RvIGVycm9yOworCQkJcGF0X2xlbiA9IG5sYV9sZW4ocGF0X3RiW05MODAyMTFfV09XTEFOX1BLVFBBVF9QQVRURVJOXSk7CisJCQltYXNrX2xlbiA9IERJVl9ST1VORF9VUChwYXRfbGVuLCA4KTsKKwkJCWlmIChubGFfbGVuKHBhdF90YltOTDgwMjExX1dPV0xBTl9QS1RQQVRfTUFTS10pICE9CisJCQkgICAgbWFza19sZW4pCisJCQkJZ290byBlcnJvcjsKKwkJCWlmIChwYXRfbGVuID4gd293bGFuLT5wYXR0ZXJuX21heF9sZW4gfHwKKwkJCSAgICBwYXRfbGVuIDwgd293bGFuLT5wYXR0ZXJuX21pbl9sZW4pCisJCQkJZ290byBlcnJvcjsKKworCQkJbmV3X3RyaWdnZXJzLnBhdHRlcm5zW2ldLm1hc2sgPQorCQkJCWttYWxsb2MobWFza19sZW4gKyBwYXRfbGVuLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghbmV3X3RyaWdnZXJzLnBhdHRlcm5zW2ldLm1hc2spIHsKKwkJCQllcnIgPSAtRU5PTUVNOworCQkJCWdvdG8gZXJyb3I7CisJCQl9CisJCQluZXdfdHJpZ2dlcnMucGF0dGVybnNbaV0ucGF0dGVybiA9CisJCQkJbmV3X3RyaWdnZXJzLnBhdHRlcm5zW2ldLm1hc2sgKyBtYXNrX2xlbjsKKwkJCW1lbWNweShuZXdfdHJpZ2dlcnMucGF0dGVybnNbaV0ubWFzaywKKwkJCSAgICAgICBubGFfZGF0YShwYXRfdGJbTkw4MDIxMV9XT1dMQU5fUEtUUEFUX01BU0tdKSwKKwkJCSAgICAgICBtYXNrX2xlbik7CisJCQluZXdfdHJpZ2dlcnMucGF0dGVybnNbaV0ucGF0dGVybl9sZW4gPSBwYXRfbGVuOworCQkJbWVtY3B5KG5ld190cmlnZ2Vycy5wYXR0ZXJuc1tpXS5wYXR0ZXJuLAorCQkJICAgICAgIG5sYV9kYXRhKHBhdF90YltOTDgwMjExX1dPV0xBTl9QS1RQQVRfUEFUVEVSTl0pLAorCQkJICAgICAgIHBhdF9sZW4pOworCQkJaSsrOworCQl9CisJfQorCisJaWYgKG1lbWNtcCgmbmV3X3RyaWdnZXJzLCAmbm9fdHJpZ2dlcnMsIHNpemVvZihuZXdfdHJpZ2dlcnMpKSkgeworCQlzdHJ1Y3QgY2ZnODAyMTFfd293bGFuICpudHJpZzsKKwkJbnRyaWcgPSBrbWVtZHVwKCZuZXdfdHJpZ2dlcnMsIHNpemVvZihuZXdfdHJpZ2dlcnMpLAorCQkJCUdGUF9LRVJORUwpOworCQlpZiAoIW50cmlnKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBlcnJvcjsKKwkJfQorCQljZmc4MDIxMV9yZGV2X2ZyZWVfd293bGFuKHJkZXYpOworCQlyZGV2LT53b3dsYW4gPSBudHJpZzsKKwl9IGVsc2UgeworIG5vX3RyaWdnZXJzOgorCQljZmc4MDIxMV9yZGV2X2ZyZWVfd293bGFuKHJkZXYpOworCQlyZGV2LT53b3dsYW4gPSBOVUxMOworCX0KKworCXJldHVybiAwOworIGVycm9yOgorCWZvciAoaSA9IDA7IGkgPCBuZXdfdHJpZ2dlcnMubl9wYXR0ZXJuczsgaSsrKQorCQlrZnJlZShuZXdfdHJpZ2dlcnMucGF0dGVybnNbaV0ubWFzayk7CisJa2ZyZWUobmV3X3RyaWdnZXJzLnBhdHRlcm5zKTsKKwlyZXR1cm4gZXJyOworfQorCiAjZGVmaW5lIE5MODAyMTFfRkxBR19ORUVEX1dJUEhZCQkweDAxCiAjZGVmaW5lIE5MODAyMTFfRkxBR19ORUVEX05FVERFVgkweDAyCiAjZGVmaW5lIE5MODAyMTFfRkxBR19ORUVEX1JUTkwJCTB4MDQKQEAgLTUwNjQsNiArNTU5NSwyMiBAQAogCQkuZHVtcGl0ID0gbmw4MDIxMV9kdW1wX3NjYW4sCiAJfSwKIAl7CisJCS5jbWQgPSBOTDgwMjExX0NNRF9TVEFSVF9TQ0hFRF9TQ0FOLAorCQkuZG9pdCA9IG5sODAyMTFfc3RhcnRfc2NoZWRfc2NhbiwKKwkJLnBvbGljeSA9IG5sODAyMTFfcG9saWN5LAorCQkuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sCisJCS5pbnRlcm5hbF9mbGFncyA9IE5MODAyMTFfRkxBR19ORUVEX05FVERFVl9VUCB8CisJCQkJICBOTDgwMjExX0ZMQUdfTkVFRF9SVE5MLAorCX0sCisJeworCQkuY21kID0gTkw4MDIxMV9DTURfU1RPUF9TQ0hFRF9TQ0FOLAorCQkuZG9pdCA9IG5sODAyMTFfc3RvcF9zY2hlZF9zY2FuLAorCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCisJCS5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSwKKwkJLmludGVybmFsX2ZsYWdzID0gTkw4MDIxMV9GTEFHX05FRURfTkVUREVWX1VQIHwKKwkJCQkgIE5MODAyMTFfRkxBR19ORUVEX1JUTkwsCisJfSwKKwl7CiAJCS5jbWQgPSBOTDgwMjExX0NNRF9BVVRIRU5USUNBVEUsCiAJCS5kb2l0ID0gbmw4MDIxMV9hdXRoZW50aWNhdGUsCiAJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKQEAgLTUyNzgsNiArNTgyNSwyMiBAQAogCQkuaW50ZXJuYWxfZmxhZ3MgPSBOTDgwMjExX0ZMQUdfTkVFRF9ORVRERVZfVVAgfAogCQkJCSAgTkw4MDIxMV9GTEFHX05FRURfUlROTCwKIAl9LAorCXsKKwkJLmNtZCA9IE5MODAyMTFfQ01EX0dFVF9XT1dMQU4sCisJCS5kb2l0ID0gbmw4MDIxMV9nZXRfd293bGFuLAorCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCisJCS8qIGNhbiBiZSByZXRyaWV2ZWQgYnkgdW5wcml2aWxlZ2VkIHVzZXJzICovCisJCS5pbnRlcm5hbF9mbGFncyA9IE5MODAyMTFfRkxBR19ORUVEX1dJUEhZIHwKKwkJCQkgIE5MODAyMTFfRkxBR19ORUVEX1JUTkwsCisJfSwKKwl7CisJCS5jbWQgPSBOTDgwMjExX0NNRF9TRVRfV09XTEFOLAorCQkuZG9pdCA9IG5sODAyMTFfc2V0X3dvd2xhbiwKKwkJLnBvbGljeSA9IG5sODAyMTFfcG9saWN5LAorCQkuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sCisJCS5pbnRlcm5hbF9mbGFncyA9IE5MODAyMTFfRkxBR19ORUVEX1dJUEhZIHwKKwkJCQkgIE5MODAyMTFfRkxBR19ORUVEX1JUTkwsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgbmw4MDIxMV9tbG1lX21jZ3JwID0gewpAQCAtNTM3Myw2ICs1OTM2LDI4IEBACiAJcmV0dXJuIC1FTVNHU0laRTsKIH0KIAorc3RhdGljIGludAorbmw4MDIxMV9zZW5kX3NjaGVkX3NjYW5fbXNnKHN0cnVjdCBza19idWZmICptc2csCisJCQkgICAgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkgICAgdTMyIHBpZCwgdTMyIHNlcSwgaW50IGZsYWdzLCB1MzIgY21kKQoreworCXZvaWQgKmhkcjsKKworCWhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgcGlkLCBzZXEsIGZsYWdzLCBjbWQpOworCWlmICghaGRyKQorCQlyZXR1cm4gLTE7CisKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9XSVBIWSwgcmRldi0+d2lwaHlfaWR4KTsKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9JRklOREVYLCBuZXRkZXYtPmlmaW5kZXgpOworCisJcmV0dXJuIGdlbmxtc2dfZW5kKG1zZywgaGRyKTsKKworIG5sYV9wdXRfZmFpbHVyZToKKwlnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7CisJcmV0dXJuIC1FTVNHU0laRTsKK30KKwogdm9pZCBubDgwMjExX3NlbmRfc2Nhbl9zdGFydChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CkBAIC01NDMwLDYgKzYwMTUsNDMgQEAKIAkJCQlubDgwMjExX3NjYW5fbWNncnAuaWQsIEdGUF9LRVJORUwpOwogfQogCit2b2lkIG5sODAyMTFfc2VuZF9zY2hlZF9zY2FuX3Jlc3VsdHMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOworCisJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtc2cpCisJCXJldHVybjsKKworCWlmIChubDgwMjExX3NlbmRfc2NoZWRfc2Nhbl9tc2cobXNnLCByZGV2LCBuZXRkZXYsIDAsIDAsIDAsCisJCQkJCU5MODAyMTFfQ01EX1NDSEVEX1NDQU5fUkVTVUxUUykgPCAwKSB7CisJCW5sbXNnX2ZyZWUobXNnKTsKKwkJcmV0dXJuOworCX0KKworCWdlbmxtc2dfbXVsdGljYXN0X25ldG5zKHdpcGh5X25ldCgmcmRldi0+d2lwaHkpLCBtc2csIDAsCisJCQkJbmw4MDIxMV9zY2FuX21jZ3JwLmlkLCBHRlBfS0VSTkVMKTsKK30KKwordm9pZCBubDgwMjExX3NlbmRfc2NoZWRfc2NhbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBjbWQpCit7CisJc3RydWN0IHNrX2J1ZmYgKm1zZzsKKworCW1zZyA9IG5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtc2cpCisJCXJldHVybjsKKworCWlmIChubDgwMjExX3NlbmRfc2NoZWRfc2Nhbl9tc2cobXNnLCByZGV2LCBuZXRkZXYsIDAsIDAsIDAsIGNtZCkgPCAwKSB7CisJCW5sbXNnX2ZyZWUobXNnKTsKKwkJcmV0dXJuOworCX0KKworCWdlbmxtc2dfbXVsdGljYXN0X25ldG5zKHdpcGh5X25ldCgmcmRldi0+d2lwaHkpLCBtc2csIDAsCisJCQkJbmw4MDIxMV9zY2FuX21jZ3JwLmlkLCBHRlBfS0VSTkVMKTsKK30KKwogLyoKICAqIFRoaXMgY2FuIGhhcHBlbiBvbiBnbG9iYWwgcmVndWxhdG9yeSBjaGFuZ2VzIG9yIGRldmljZSBzcGVjaWZpYyBzZXR0aW5ncwogICogYmFzZWQgb24gY3VzdG9tIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWlucy4KQEAgLTU3ODUsNiArNjQwNyw0NCBAQAogCW5sbXNnX2ZyZWUobXNnKTsKIH0KIAordm9pZCBubDgwMjExX3NlbmRfbmV3X3BlZXJfY2FuZGlkYXRlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJY29uc3QgdTggKm1hY2FkZHIsIGNvbnN0IHU4KiBpZSwgdTggaWVfbGVuLAorCQlnZnBfdCBnZnApCit7CisJc3RydWN0IHNrX2J1ZmYgKm1zZzsKKwl2b2lkICpoZHI7CisKKwltc2cgPSBubG1zZ19uZXcoTkxNU0dfREVGQVVMVF9TSVpFLCBnZnApOworCWlmICghbXNnKQorCQlyZXR1cm47CisKKwloZHIgPSBubDgwMjExaGRyX3B1dChtc2csIDAsIDAsIDAsIE5MODAyMTFfQ01EX05FV19QRUVSX0NBTkRJREFURSk7CisJaWYgKCFoZHIpIHsKKwkJbmxtc2dfZnJlZShtc2cpOworCQlyZXR1cm47CisJfQorCisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfV0lQSFksIHJkZXYtPndpcGh5X2lkeCk7CisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfSUZJTkRFWCwgbmV0ZGV2LT5pZmluZGV4KTsKKwlOTEFfUFVUKG1zZywgTkw4MDIxMV9BVFRSX01BQywgRVRIX0FMRU4sIG1hY2FkZHIpOworCWlmIChpZV9sZW4gJiYgaWUpCisJCU5MQV9QVVQobXNnLCBOTDgwMjExX0FUVFJfSUUsIGllX2xlbiAsIGllKTsKKworCWlmIChnZW5sbXNnX2VuZChtc2csIGhkcikgPCAwKSB7CisJCW5sbXNnX2ZyZWUobXNnKTsKKwkJcmV0dXJuOworCX0KKworCWdlbmxtc2dfbXVsdGljYXN0X25ldG5zKHdpcGh5X25ldCgmcmRldi0+d2lwaHkpLCBtc2csIDAsCisJCQkJbmw4MDIxMV9tbG1lX21jZ3JwLmlkLCBnZnApOworCXJldHVybjsKKworIG5sYV9wdXRfZmFpbHVyZToKKwlnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7CisJbmxtc2dfZnJlZShtc2cpOworfQorCiB2b2lkIG5sODAyMTFfbWljaGFlbF9taWNfZmFpbHVyZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNvbnN0IHU4ICphZGRyLAogCQkJCSBlbnVtIG5sODAyMTFfa2V5X3R5cGUga2V5X3R5cGUsIGludCBrZXlfaWQsCkBAIC01OTY2LDYgKzY2MjYsNDAgQEAKIAkJCQlubDgwMjExX21sbWVfbWNncnAuaWQsIGdmcCk7CiB9CiAKK3ZvaWQgbmw4MDIxMV9zZW5kX3N0YV9kZWxfZXZlbnQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICptYWNfYWRkciwKKwkJCQlnZnBfdCBnZnApCit7CisJc3RydWN0IHNrX2J1ZmYgKm1zZzsKKwl2b2lkICpoZHI7CisKKwltc2cgPSBubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIGdmcCk7CisJaWYgKCFtc2cpCisJCXJldHVybjsKKworCWhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgMCwgMCwgMCwgTkw4MDIxMV9DTURfREVMX1NUQVRJT04pOworCWlmICghaGRyKSB7CisJCW5sbXNnX2ZyZWUobXNnKTsKKwkJcmV0dXJuOworCX0KKworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX0lGSU5ERVgsIGRldi0+aWZpbmRleCk7CisJTkxBX1BVVChtc2csIE5MODAyMTFfQVRUUl9NQUMsIEVUSF9BTEVOLCBtYWNfYWRkcik7CisKKwlpZiAoZ2VubG1zZ19lbmQobXNnLCBoZHIpIDwgMCkgeworCQlubG1zZ19mcmVlKG1zZyk7CisJCXJldHVybjsKKwl9CisKKwlnZW5sbXNnX211bHRpY2FzdF9uZXRucyh3aXBoeV9uZXQoJnJkZXYtPndpcGh5KSwgbXNnLCAwLAorCQkJCW5sODAyMTFfbWxtZV9tY2dycC5pZCwgZ2ZwKTsKKwlyZXR1cm47CisKKyBubGFfcHV0X2ZhaWx1cmU6CisJZ2VubG1zZ19jYW5jZWwobXNnLCBoZHIpOworCW5sbXNnX2ZyZWUobXNnKTsKK30KKwogaW50IG5sODAyMTFfc2VuZF9tZ210KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIG5scGlkLAogCQkgICAgICBpbnQgZnJlcSwgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbiwgZ2ZwX3QgZ2ZwKQpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuaCBiL25ldC93aXJlbGVzcy9ubDgwMjExLmgKaW5kZXggZTNmN2ZhOC4uMmYxYmZiOCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuaAorKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oCkBAIC0xMiw2ICsxMiwxMCBAQAogCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwogdm9pZCBubDgwMjExX3NlbmRfc2Nhbl9hYm9ydGVkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK3ZvaWQgbmw4MDIxMV9zZW5kX3NjaGVkX3NjYW4oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgY21kKTsKK3ZvaWQgbmw4MDIxMV9zZW5kX3NjaGVkX3NjYW5fcmVzdWx0cyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKIHZvaWQgbmw4MDIxMV9zZW5kX3JlZ19jaGFuZ2VfZXZlbnQoc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdCk7CiB2b2lkIG5sODAyMTFfc2VuZF9yeF9hdXRoKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKQEAgLTUwLDYgKzU0LDEwIEBACiAJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IHJlYXNvbiwKIAkJCSAgICAgICBjb25zdCB1OCAqaWUsIHNpemVfdCBpZV9sZW4sIGJvb2wgZnJvbV9hcCk7CiAKK3ZvaWQgbmw4MDIxMV9zZW5kX25ld19wZWVyX2NhbmRpZGF0ZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICAgY29uc3QgdTggKm1hY2FkZHIsIGNvbnN0IHU4KiBpZSwgdTggaWVfbGVuLAorCQkJCSAgICAgZ2ZwX3QgZ2ZwKTsKIHZvaWQKIG5sODAyMTFfbWljaGFlbF9taWNfZmFpbHVyZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY29uc3QgdTggKmFkZHIsCkBAIC03OSw2ICs4Nyw5IEBACiB2b2lkIG5sODAyMTFfc2VuZF9zdGFfZXZlbnQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICptYWNfYWRkciwKIAkJCSAgICBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbywgZ2ZwX3QgZ2ZwKTsKK3ZvaWQgbmw4MDIxMV9zZW5kX3N0YV9kZWxfZXZlbnQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICptYWNfYWRkciwKKwkJCQlnZnBfdCBnZnApOwogCiBpbnQgbmw4MDIxMV9zZW5kX21nbXQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgbmxwaWQsIGludCBmcmVxLApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3JlZy5jIGIvbmV0L3dpcmVsZXNzL3JlZy5jCmluZGV4IGFiODAxYTEuLjFhZDBmMzkgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9yZWcuYworKysgYi9uZXQvd2lyZWxlc3MvcmVnLmMKQEAgLTEwNiw2ICsxMDYsOSBAQAogc3RhdGljIHZvaWQgcmVnX3RvZG8oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHN0YXRpYyBERUNMQVJFX1dPUksocmVnX3dvcmssIHJlZ190b2RvKTsKIAorc3RhdGljIHZvaWQgcmVnX3RpbWVvdXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworc3RhdGljIERFQ0xBUkVfREVMQVlFRF9XT1JLKHJlZ190aW1lb3V0LCByZWdfdGltZW91dF93b3JrKTsKKwogLyogV2Uga2VlcCBhIHN0YXRpYyB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbiBpbiBjYXNlIG9mIHRoZSBhYnNlbmNlIG9mIENSREEgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiB3b3JsZF9yZWdkb20gPSB7CiAJLm5fcmVnX3J1bGVzID0gNSwKQEAgLTY2OSwxMSArNjcyLDkgQEAKIAlmb3IgKGkgPSAwOyBpIDwgcmVnZC0+bl9yZWdfcnVsZXM7IGkrKykgewogCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlICpycjsKIAkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9mcmVxX3JhbmdlICpmciA9IE5VTEw7Ci0JCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcG93ZXJfcnVsZSAqcHIgPSBOVUxMOwogCiAJCXJyID0gJnJlZ2QtPnJlZ19ydWxlc1tpXTsKIAkJZnIgPSAmcnItPmZyZXFfcmFuZ2U7Ci0JCXByID0gJnJyLT5wb3dlcl9ydWxlOwogCiAJCS8qCiAJCSAqIFdlIG9ubHkgbmVlZCB0byBrbm93IGlmIG9uZSBmcmVxdWVuY3kgcnVsZSB3YXMKQEAgLTEzMzAsNiArMTMzMSw5IEBACiAJCW5lZWRfbW9yZV9wcm9jZXNzaW5nID0gdHJ1ZTsKIAlzcGluX3VubG9jaygmcmVnX3JlcXVlc3RzX2xvY2spOwogCisJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9VU0VSKQorCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnJlZ190aW1lb3V0KTsKKwogCWlmIChuZWVkX21vcmVfcHJvY2Vzc2luZykKIAkJc2NoZWR1bGVfd29yaygmcmVnX3dvcmspOwogfQpAQCAtMTQ0MCw4ICsxNDQ0LDE4IEBACiAJciA9IF9fcmVndWxhdG9yeV9oaW50KHdpcGh5LCByZWdfcmVxdWVzdCk7CiAJLyogVGhpcyBpcyByZXF1aXJlZCBzbyB0aGF0IHRoZSBvcmlnXyogcGFyYW1ldGVycyBhcmUgc2F2ZWQgKi8KIAlpZiAociA9PSAtRUFMUkVBRFkgJiYgd2lwaHkgJiYKLQkgICAgd2lwaHktPmZsYWdzICYgV0lQSFlfRkxBR19TVFJJQ1RfUkVHVUxBVE9SWSkKKwkgICAgd2lwaHktPmZsYWdzICYgV0lQSFlfRkxBR19TVFJJQ1RfUkVHVUxBVE9SWSkgewogCQl3aXBoeV91cGRhdGVfcmVndWxhdG9yeSh3aXBoeSwgaW5pdGlhdG9yKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogV2Ugb25seSB0aW1lIG91dCB1c2VyIGhpbnRzLCBnaXZlbiB0aGF0IHRoZXkgc2hvdWxkIGJlIHRoZSBvbmx5CisJICogc291cmNlIG9mIGJvZ3VzIHJlcXVlc3RzLgorCSAqLworCWlmIChyICE9IC1FQUxSRUFEWSAmJgorCSAgICByZWdfcmVxdWVzdC0+aW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9VU0VSKQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnJlZ190aW1lb3V0LCBtc2Vjc190b19qaWZmaWVzKDMxNDIpKTsKIH0KIAogLyoKQEAgLTE3NDQsNiArMTc1OCw4IEBACiB7CiAJY2hhciBhbHBoYTJbMl07CiAJc3RydWN0IHJlZ19iZWFjb24gKnJlZ19iZWFjb24sICpidG1wOworCXN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlZ19yZXF1ZXN0LCAqdG1wOworCUxJU1RfSEVBRCh0bXBfcmVnX3JlcV9saXN0KTsKIAogCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKIAltdXRleF9sb2NrKCZyZWdfbXV0ZXgpOwpAQCAtMTc1MSw2ICsxNzY3LDI1IEBACiAJcmVzZXRfcmVnZG9tYWlucygpOwogCXJlc3RvcmVfYWxwaGEyKGFscGhhMiwgcmVzZXRfdXNlcik7CiAKKwkvKgorCSAqIElmIHRoZXJlJ3MgYW55IHBlbmRpbmcgcmVxdWVzdHMgd2Ugc2ltcGx5CisJICogc3Rhc2ggdGhlbSB0byBhIHRlbXBvcmFyeSBwZW5kaW5nIHF1ZXVlIGFuZAorCSAqIGFkZCB0aGVuIGFmdGVyIHdlJ3ZlIHJlc3RvcmVkIHJlZ3VsYXRvcnkKKwkgKiBzZXR0aW5ncy4KKwkgKi8KKwlzcGluX2xvY2soJnJlZ19yZXF1ZXN0c19sb2NrKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnJlZ19yZXF1ZXN0c19saXN0KSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVnX3JlcXVlc3QsIHRtcCwKKwkJCQkJICZyZWdfcmVxdWVzdHNfbGlzdCwgbGlzdCkgeworCQkJaWYgKHJlZ19yZXF1ZXN0LT5pbml0aWF0b3IgIT0KKwkJCSAgICBOTDgwMjExX1JFR0RPTV9TRVRfQllfVVNFUikKKwkJCQljb250aW51ZTsKKwkJCWxpc3RfZGVsKCZyZWdfcmVxdWVzdC0+bGlzdCk7CisJCQlsaXN0X2FkZF90YWlsKCZyZWdfcmVxdWVzdC0+bGlzdCwgJnRtcF9yZWdfcmVxX2xpc3QpOworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZyZWdfcmVxdWVzdHNfbG9jayk7CisKIAkvKiBDbGVhciBiZWFjb24gaGludHMgKi8KIAlzcGluX2xvY2tfYmgoJnJlZ19wZW5kaW5nX2JlYWNvbnNfbG9jayk7CiAJaWYgKCFsaXN0X2VtcHR5KCZyZWdfcGVuZGluZ19iZWFjb25zKSkgewpAQCAtMTc4NSw4ICsxODIwLDMxIEBACiAJICovCiAJaWYgKGlzX2FuX2FscGhhMihhbHBoYTIpKQogCQlyZWd1bGF0b3J5X2hpbnRfdXNlcih1c2VyX2FscGhhMik7Ci19CiAKKwlpZiAobGlzdF9lbXB0eSgmdG1wX3JlZ19yZXFfbGlzdCkpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKKwltdXRleF9sb2NrKCZyZWdfbXV0ZXgpOworCisJc3Bpbl9sb2NrKCZyZWdfcmVxdWVzdHNfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlZ19yZXF1ZXN0LCB0bXAsICZ0bXBfcmVnX3JlcV9saXN0LCBsaXN0KSB7CisJCVJFR19EQkdfUFJJTlQoIkFkZGluZyByZXF1ZXN0IGZvciBjb3VudHJ5ICVjJWMgYmFjayAiCisJCQkgICAgICAiaW50byB0aGUgcXVldWVcbiIsCisJCQkgICAgICByZWdfcmVxdWVzdC0+YWxwaGEyWzBdLAorCQkJICAgICAgcmVnX3JlcXVlc3QtPmFscGhhMlsxXSk7CisJCWxpc3RfZGVsKCZyZWdfcmVxdWVzdC0+bGlzdCk7CisJCWxpc3RfYWRkX3RhaWwoJnJlZ19yZXF1ZXN0LT5saXN0LCAmcmVnX3JlcXVlc3RzX2xpc3QpOworCX0KKwlzcGluX3VubG9jaygmcmVnX3JlcXVlc3RzX2xvY2spOworCisJbXV0ZXhfdW5sb2NrKCZyZWdfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOworCisJUkVHX0RCR19QUklOVCgiS2lja2luZyB0aGUgcXVldWVcbiIpOworCisJc2NoZWR1bGVfd29yaygmcmVnX3dvcmspOworfQogCiB2b2lkIHJlZ3VsYXRvcnlfaGludF9kaXNjb25uZWN0KHZvaWQpCiB7CkBAIC0yMTI1LDYgKzIxODMsMTMgQEAKIAltdXRleF91bmxvY2soJnJlZ19tdXRleCk7CiB9CiAKK3N0YXRpYyB2b2lkIHJlZ190aW1lb3V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCVJFR19EQkdfUFJJTlQoIlRpbWVvdXQgd2hpbGUgd2FpdGluZyBmb3IgQ1JEQSB0byByZXBseSwgIgorCQkgICAgICAicmVzdG9yaW5nIHJlZ3VsYXRvcnkgc2V0dGluZ3MiKTsKKwlyZXN0b3JlX3JlZ3VsYXRvcnlfc2V0dGluZ3ModHJ1ZSk7Cit9CisKIGludCBfX2luaXQgcmVndWxhdG9yeV9pbml0KHZvaWQpCiB7CiAJaW50IGVyciA9IDA7CkBAIC0yMTc4LDYgKzIyNDMsNyBAQAogCXN0cnVjdCByZWdfYmVhY29uICpyZWdfYmVhY29uLCAqYnRtcDsKIAogCWNhbmNlbF93b3JrX3N5bmMoJnJlZ193b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnJlZ190aW1lb3V0KTsKIAogCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKIAltdXRleF9sb2NrKCZyZWdfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3NjYW4uYyBiL25ldC93aXJlbGVzcy9zY2FuLmMKaW5kZXggZmJmNmYzMy4uNzNhNDQxZCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3NjYW4uYworKysgYi9uZXQvd2lyZWxlc3Mvc2Nhbi5jCkBAIC05Myw2ICs5Myw2OSBAQAogfQogRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9zY2FuX2RvbmUpOwogCit2b2lkIF9fY2ZnODAyMTFfc2NoZWRfc2Nhbl9yZXN1bHRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd2spCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OworCisJcmRldiA9IGNvbnRhaW5lcl9vZih3aywgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlLAorCQkJICAgIHNjaGVkX3NjYW5fcmVzdWx0c193ayk7CisKKwljZmc4MDIxMV9sb2NrX3JkZXYocmRldik7CisKKwkvKiB3ZSBkb24ndCBoYXZlIHNjaGVkX3NjYW5fcmVxIGFueW1vcmUgaWYgdGhlIHNjYW4gaXMgc3RvcHBpbmcgKi8KKwlpZiAocmRldi0+c2NoZWRfc2Nhbl9yZXEpCisJCW5sODAyMTFfc2VuZF9zY2hlZF9zY2FuX3Jlc3VsdHMocmRldiwKKwkJCQkJCXJkZXYtPnNjaGVkX3NjYW5fcmVxLT5kZXYpOworCisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7Cit9CisKK3ZvaWQgY2ZnODAyMTFfc2NoZWRfc2Nhbl9yZXN1bHRzKHN0cnVjdCB3aXBoeSAqd2lwaHkpCit7CisJLyogaWdub3JlIGlmIHdlJ3JlIG5vdCBzY2FubmluZyAqLworCWlmICh3aXBoeV90b19kZXYod2lwaHkpLT5zY2hlZF9zY2FuX3JlcSkKKwkJcXVldWVfd29yayhjZmc4MDIxMV93cSwKKwkJCSAgICZ3aXBoeV90b19kZXYod2lwaHkpLT5zY2hlZF9zY2FuX3Jlc3VsdHNfd2spOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9zY2hlZF9zY2FuX3Jlc3VsdHMpOworCit2b2lkIGNmZzgwMjExX3NjaGVkX3NjYW5fc3RvcHBlZChzdHJ1Y3Qgd2lwaHkgKndpcGh5KQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisKKwljZmc4MDIxMV9sb2NrX3JkZXYocmRldik7CisJX19jZmc4MDIxMV9zdG9wX3NjaGVkX3NjYW4ocmRldiwgdHJ1ZSk7CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7Cit9CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX3NjaGVkX3NjYW5fc3RvcHBlZCk7CisKK2ludCBfX2NmZzgwMjExX3N0b3Bfc2NoZWRfc2NhbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgICAgICAgYm9vbCBkcml2ZXJfaW5pdGlhdGVkKQoreworCWludCBlcnI7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKworCUFTU0VSVF9SREVWX0xPQ0socmRldik7CisKKwlpZiAoIXJkZXYtPnNjaGVkX3NjYW5fcmVxKQorCQlyZXR1cm4gMDsKKworCWRldiA9IHJkZXYtPnNjaGVkX3NjYW5fcmVxLT5kZXY7CisKKwlpZiAoIWRyaXZlcl9pbml0aWF0ZWQpIHsKKwkJZXJyID0gcmRldi0+b3BzLT5zY2hlZF9zY2FuX3N0b3AoJnJkZXYtPndpcGh5LCBkZXYpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlubDgwMjExX3NlbmRfc2NoZWRfc2NhbihyZGV2LCBkZXYsIE5MODAyMTFfQ01EX1NDSEVEX1NDQU5fU1RPUFBFRCk7CisKKwlrZnJlZShyZGV2LT5zY2hlZF9zY2FuX3JlcSk7CisJcmRldi0+c2NoZWRfc2Nhbl9yZXEgPSBOVUxMOworCisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIHZvaWQgYnNzX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZikKIHsKIAlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3M7CkBAIC0yMTAsNyArMjczLDcgQEAKIHsKIAljb25zdCB1OCAqaWU7CiAKLQlpZiAoIWlzX3plcm9fZXRoZXJfYWRkcihhLT5ic3NpZCkpCisJaWYgKCFXTEFOX0NBUEFCSUxJVFlfSVNfTUJTUyhhLT5jYXBhYmlsaXR5KSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJaWUgPSBjZmc4MDIxMV9maW5kX2llKFdMQU5fRUlEX01FU0hfSUQsCkBAIC0yNDgsMTEgKzMxMSw3IEBACiAJaWYgKGEtPmNoYW5uZWwgIT0gYi0+Y2hhbm5lbCkKIAkJcmV0dXJuIGItPmNoYW5uZWwtPmNlbnRlcl9mcmVxIC0gYS0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXE7CiAKLQlyID0gbWVtY21wKGEtPmJzc2lkLCBiLT5ic3NpZCwgRVRIX0FMRU4pOwotCWlmIChyKQotCQlyZXR1cm4gcjsKLQotCWlmIChpc196ZXJvX2V0aGVyX2FkZHIoYS0+YnNzaWQpKSB7CisJaWYgKFdMQU5fQ0FQQUJJTElUWV9JU19NQlNTKGEtPmNhcGFiaWxpdHkgfCBiLT5jYXBhYmlsaXR5KSkgewogCQlyID0gY21wX2llcyhXTEFOX0VJRF9NRVNIX0lELAogCQkJICAgIGEtPmluZm9ybWF0aW9uX2VsZW1lbnRzLAogCQkJICAgIGEtPmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cywKQEAgLTI2Nyw2ICszMjYsMTAgQEAKIAkJCSAgICAgICBiLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMpOwogCX0KIAorCXIgPSBtZW1jbXAoYS0+YnNzaWQsIGItPmJzc2lkLCBFVEhfQUxFTik7CisJaWYgKHIpCisJCXJldHVybiByOworCiAJcmV0dXJuIGNtcF9pZXMoV0xBTl9FSURfU1NJRCwKIAkJICAgICAgIGEtPmluZm9ybWF0aW9uX2VsZW1lbnRzLAogCQkgICAgICAgYS0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzLApAQCAtNDA3LDcgKzQ3MCw3IEBACiAKIAlyZXMtPnRzID0gamlmZmllczsKIAotCWlmIChpc196ZXJvX2V0aGVyX2FkZHIocmVzLT5wdWIuYnNzaWQpKSB7CisJaWYgKFdMQU5fQ0FQQUJJTElUWV9JU19NQlNTKHJlcy0+cHViLmNhcGFiaWxpdHkpKSB7CiAJCS8qIG11c3QgYmUgbWVzaCwgdmVyaWZ5ICovCiAJCW1lc2hpZCA9IGNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfTUVTSF9JRCwKIAkJCQkJICByZXMtPnB1Yi5pbmZvcm1hdGlvbl9lbGVtZW50cywKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9zeXNmcy5jIGIvbmV0L3dpcmVsZXNzL3N5c2ZzLmMKaW5kZXggNDI5NGZhMi4uYzZlNGNhNiAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3N5c2ZzLmMKKysrIGIvbmV0L3dpcmVsZXNzL3N5c2ZzLmMKQEAgLTkzLDcgKzkzLDcgQEAKIAogCWlmIChyZGV2LT5vcHMtPnN1c3BlbmQpIHsKIAkJcnRubF9sb2NrKCk7Ci0JCXJldCA9IHJkZXYtPm9wcy0+c3VzcGVuZCgmcmRldi0+d2lwaHkpOworCQlyZXQgPSByZGV2LT5vcHMtPnN1c3BlbmQoJnJkZXYtPndpcGh5LCByZGV2LT53b3dsYW4pOwogCQlydG5sX3VubG9jaygpOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3V0aWwuYyBiL25ldC93aXJlbGVzcy91dGlsLmMKaW5kZXggNmE3NTBiYy4uZjA1MzZkNCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3V0aWwuYworKysgYi9uZXQvd2lyZWxlc3MvdXRpbC5jCkBAIC01NDQsNyArNTQ0LDggQEAKIAogdm9pZCBpZWVlODAyMTFfYW1zZHVfdG9fODAyM3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCwKIAkJCSAgICAgIGNvbnN0IHU4ICphZGRyLCBlbnVtIG5sODAyMTFfaWZ0eXBlIGlmdHlwZSwKLQkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBleHRyYV9oZWFkcm9vbSkKKwkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBleHRyYV9oZWFkcm9vbSwKKwkJCSAgICAgIGJvb2wgaGFzXzgwMjExX2hlYWRlcikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqZnJhbWUgPSBOVUxMOwogCXUxNiBldGhlcnR5cGU7CkBAIC01NTMsMTQgKzU1NCwxOCBAQAogCWludCByZW1haW5pbmcsIGVycjsKIAl1OCBkc3RbRVRIX0FMRU5dLCBzcmNbRVRIX0FMRU5dOwogCi0JZXJyID0gaWVlZTgwMjExX2RhdGFfdG9fODAyMyhza2IsIGFkZHIsIGlmdHlwZSk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7CisJaWYgKGhhc184MDIxMV9oZWFkZXIpIHsKKwkJZXJyID0gaWVlZTgwMjExX2RhdGFfdG9fODAyMyhza2IsIGFkZHIsIGlmdHlwZSk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKIAotCS8qIHNraXAgdGhlIHdyYXBwaW5nIGhlYWRlciAqLwotCWV0aCA9IChzdHJ1Y3QgZXRoaGRyICopIHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKTsKLQlpZiAoIWV0aCkKLQkJZ290byBvdXQ7CisJCS8qIHNraXAgdGhlIHdyYXBwaW5nIGhlYWRlciAqLworCQlldGggPSAoc3RydWN0IGV0aGhkciAqKSBza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7CisJCWlmICghZXRoKQorCQkJZ290byBvdXQ7CisJfSBlbHNlIHsKKwkJZXRoID0gKHN0cnVjdCBldGhoZHIgKikgc2tiLT5kYXRhOworCX0KIAogCXdoaWxlIChza2IgIT0gZnJhbWUpIHsKIAkJdTggcGFkZGluZzsKQEAgLTgwMyw2ICs4MDgsMTEgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAogCWlmIChudHlwZSAhPSBvdHlwZSkgeworCQllcnIgPSBjZmc4MDIxMV9jYW5fY2hhbmdlX2ludGVyZmFjZShyZGV2LCBkZXYtPmllZWU4MDIxMV9wdHIsCisJCQkJCQkgICAgbnR5cGUpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwogCQlkZXYtPmllZWU4MDIxMV9wdHItPnVzZV80YWRkciA9IGZhbHNlOwogCQlkZXYtPmllZWU4MDIxMV9wdHItPm1lc2hfaWRfdXBfbGVuID0gMDsKIApAQCAtODk2LDMgKzkwNiwxMDMgQEAKIAkvKiBkbyBOT1Qgcm91bmQgZG93biBoZXJlICovCiAJcmV0dXJuIChiaXRyYXRlICsgNTAwMDApIC8gMTAwMDAwOwogfQorCitpbnQgY2ZnODAyMTFfdmFsaWRhdGVfYmVhY29uX2ludChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkJIHUzMiBiZWFjb25faW50KQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7CisJaW50IHJlcyA9IDA7CisKKwlpZiAoIWJlYWNvbl9pbnQpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCAmcmRldi0+bmV0ZGV2X2xpc3QsIGxpc3QpIHsKKwkJaWYgKCF3ZGV2LT5iZWFjb25faW50ZXJ2YWwpCisJCQljb250aW51ZTsKKwkJaWYgKHdkZXYtPmJlYWNvbl9pbnRlcnZhbCAhPSBiZWFjb25faW50KSB7CisJCQlyZXMgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwltdXRleF91bmxvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKKworCXJldHVybiByZXM7Cit9CisKK2ludCBjZmc4MDIxMV9jYW5fY2hhbmdlX2ludGVyZmFjZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkJICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAorCQkJCSAgZW51bSBubDgwMjExX2lmdHlwZSBpZnR5cGUpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldl9pdGVyOworCWludCBudW1bTlVNX05MODAyMTFfSUZUWVBFU107CisJaW50IHRvdGFsID0gMTsKKwlpbnQgaSwgajsKKworCUFTU0VSVF9SVE5MKCk7CisKKwkvKiBBbHdheXMgYWxsb3cgc29mdHdhcmUgaWZ0eXBlcyAqLworCWlmIChyZGV2LT53aXBoeS5zb2Z0d2FyZV9pZnR5cGVzICYgQklUKGlmdHlwZSkpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBEcml2ZXJzIHdpbGwgZ3JhZHVhbGx5IGFsbCBzZXQgdGhpcyBmbGFnLCB1bnRpbCBhbGwKKwkgKiBoYXZlIGl0IHdlIG9ubHkgZW5mb3JjZSBmb3IgdGhvc2UgdGhhdCBzZXQgaXQuCisJICovCisJaWYgKCEocmRldi0+d2lwaHkuZmxhZ3MgJiBXSVBIWV9GTEFHX0VORk9SQ0VfQ09NQklOQVRJT05TKSkKKwkJcmV0dXJuIDA7CisKKwltZW1zZXQobnVtLCAwLCBzaXplb2YobnVtKSk7CisKKwludW1baWZ0eXBlXSA9IDE7CisKKwltdXRleF9sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2X2l0ZXIsICZyZGV2LT5uZXRkZXZfbGlzdCwgbGlzdCkgeworCQlpZiAod2Rldl9pdGVyID09IHdkZXYpCisJCQljb250aW51ZTsKKwkJaWYgKCFuZXRpZl9ydW5uaW5nKHdkZXZfaXRlci0+bmV0ZGV2KSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChyZGV2LT53aXBoeS5zb2Z0d2FyZV9pZnR5cGVzICYgQklUKHdkZXZfaXRlci0+aWZ0eXBlKSkKKwkJCWNvbnRpbnVlOworCisJCW51bVt3ZGV2X2l0ZXItPmlmdHlwZV0rKzsKKwkJdG90YWwrKzsKKwl9CisJbXV0ZXhfdW5sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmRldi0+d2lwaHkubl9pZmFjZV9jb21iaW5hdGlvbnM7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2lmYWNlX2NvbWJpbmF0aW9uICpjOworCQlzdHJ1Y3QgaWVlZTgwMjExX2lmYWNlX2xpbWl0ICpsaW1pdHM7CisKKwkJYyA9ICZyZGV2LT53aXBoeS5pZmFjZV9jb21iaW5hdGlvbnNbaV07CisKKwkJbGltaXRzID0ga21lbWR1cChjLT5saW1pdHMsIHNpemVvZihsaW1pdHNbMF0pICogYy0+bl9saW1pdHMsCisJCQkJIEdGUF9LRVJORUwpOworCQlpZiAoIWxpbWl0cykKKwkJCXJldHVybiAtRU5PTUVNOworCQlpZiAodG90YWwgPiBjLT5tYXhfaW50ZXJmYWNlcykKKwkJCWdvdG8gY29udDsKKworCQlmb3IgKGlmdHlwZSA9IDA7IGlmdHlwZSA8IE5VTV9OTDgwMjExX0lGVFlQRVM7IGlmdHlwZSsrKSB7CisJCQlpZiAocmRldi0+d2lwaHkuc29mdHdhcmVfaWZ0eXBlcyAmIEJJVChpZnR5cGUpKQorCQkJCWNvbnRpbnVlOworCQkJZm9yIChqID0gMDsgaiA8IGMtPm5fbGltaXRzOyBqKyspIHsKKwkJCQlpZiAoIShsaW1pdHNbal0udHlwZXMgJiBpZnR5cGUpKQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAobGltaXRzW2pdLm1heCA8IG51bVtpZnR5cGVdKQorCQkJCQlnb3RvIGNvbnQ7CisJCQkJbGltaXRzW2pdLm1heCAtPSBudW1baWZ0eXBlXTsKKwkJCX0KKwkJfQorCQkvKiB5YXksIGl0IGZpdHMgKi8KKwkJa2ZyZWUobGltaXRzKTsKKwkJcmV0dXJuIDA7CisgY29udDoKKwkJa2ZyZWUobGltaXRzKTsKKwl9CisKKwlyZXR1cm4gLUVCVVNZOworfQpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9wb2xpY3kuYyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKaW5kZXggYjRkNzQ1ZS4uOWJlYzJlOCAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9wb2xpY3kuYworKysgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jCkBAIC0xMzQ4LDcgKzEzNDgsOCBAQAogCWRlZmF1bHQ6CiAJCUJVRygpOwogCX0KLQl4ZHN0ID0gZHN0X2FsbG9jKGRzdF9vcHMsIDApOworCXhkc3QgPSBkc3RfYWxsb2MoZHN0X29wcywgTlVMTCwgMCwgMCwgMCk7CisJbWVtc2V0KCZ4ZHN0LT51LnJ0Ni5ydDZpX3RhYmxlLCAwLCBzaXplb2YoKnhkc3QpIC0gc2l6ZW9mKHN0cnVjdCBkc3RfZW50cnkpKTsKIAl4ZnJtX3BvbGljeV9wdXRfYWZpbmZvKGFmaW5mbyk7CiAKIAlpZiAobGlrZWx5KHhkc3QpKQpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jCmluZGV4IGRkNzg1MzYuLmQ3MGY4NWUgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYworKysgYi9uZXQveGZybS94ZnJtX3N0YXRlLmMKQEAgLTEwMzYsMTUgKzEwMzYsMTUgQEAKIAogCQljYXNlIEFGX0lORVQ2OgogCQkJaXB2Nl9hZGRyX2NvcHkoKHN0cnVjdCBpbjZfYWRkciAqKXgtPnNlbC5kYWRkci5hNiwKLQkJCQkgICAgICAgKHN0cnVjdCBpbjZfYWRkciAqKWRhZGRyKTsKKwkJCQkgICAgICAgKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqKWRhZGRyKTsKIAkJCWlwdjZfYWRkcl9jb3B5KChzdHJ1Y3QgaW42X2FkZHIgKil4LT5zZWwuc2FkZHIuYTYsCi0JCQkJICAgICAgIChzdHJ1Y3QgaW42X2FkZHIgKilzYWRkcik7CisJCQkJICAgICAgIChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKilzYWRkcik7CiAJCQl4LT5zZWwucHJlZml4bGVuX2QgPSAxMjg7CiAJCQl4LT5zZWwucHJlZml4bGVuX3MgPSAxMjg7CiAJCQlpcHY2X2FkZHJfY29weSgoc3RydWN0IGluNl9hZGRyICopeC0+cHJvcHMuc2FkZHIuYTYsCi0JCQkJICAgICAgIChzdHJ1Y3QgaW42X2FkZHIgKilzYWRkcik7CisJCQkJICAgICAgIChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKilzYWRkcik7CiAJCQlpcHY2X2FkZHJfY29weSgoc3RydWN0IGluNl9hZGRyICopeC0+aWQuZGFkZHIuYTYsCi0JCQkJICAgICAgIChzdHJ1Y3QgaW42X2FkZHIgKilkYWRkcik7CisJCQkJICAgICAgIChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKilkYWRkcik7CiAJCQlicmVhazsKIAkJfQogCkBAIC0yMDkyLDggKzIwOTIsOCBAQAogc3RhdGljIHZvaWQgeGZybV9hdWRpdF9oZWxwZXJfcGt0aW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgZmFtaWx5LAogCQkJCSAgICAgIHN0cnVjdCBhdWRpdF9idWZmZXIgKmF1ZGl0X2J1ZikKIHsKLQlzdHJ1Y3QgaXBoZHIgKmlwaDQ7Ci0Jc3RydWN0IGlwdjZoZHIgKmlwaDY7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGg0OworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcGg2OwogCiAJc3dpdGNoIChmYW1pbHkpIHsKIAljYXNlIEFGX0lORVQ6CmRpZmYgLS1naXQgYS9zYW1wbGVzL0tjb25maWcgYi9zYW1wbGVzL0tjb25maWcKaW5kZXggNDEwNjNlNy4uOTZhNzU3MiAxMDA2NDQKLS0tIGEvc2FtcGxlcy9LY29uZmlnCisrKyBiL3NhbXBsZXMvS2NvbmZpZwpAQCAtNjEsNCArNjEsMTAgQEAKIAkgIEJ1aWxkIGFuIGV4YW1wbGUgb2YgaG93IHRvIGR5bmFtaWNhbGx5IGFkZCB0aGUgaGVsbG8KIAkgIGNvbW1hbmQgdG8gdGhlIGtkYiBzaGVsbC4KIAorY29uZmlnIFNBTVBMRV9ISURSQVcKKwlib29sICJCdWlsZCBzaW1wbGUgaGlkcmF3IGV4YW1wbGUiCisJZGVwZW5kcyBvbiBISURSQVcgJiYgSEVBREVSU19DSEVDSworCWhlbHAKKwkgIEJ1aWxkIGFuIGV4YW1wbGUgb2YgaG93IHRvIHVzZSBoaWRyYXcgZnJvbSB1c2Vyc3BhY2UuCisKIGVuZGlmICMgU0FNUExFUwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9NYWtlZmlsZSBiL3NhbXBsZXMvTWFrZWZpbGUKaW5kZXggZjI2YzA5NS4uNjI4MDgxNyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9NYWtlZmlsZQorKysgYi9zYW1wbGVzL01ha2VmaWxlCkBAIC0xLDQgKzEsNCBAQAogIyBNYWtlZmlsZSBmb3IgTGludXggc2FtcGxlcyBjb2RlCiAKIG9iai0kKENPTkZJR19TQU1QTEVTKQkrPSBrb2JqZWN0LyBrcHJvYmVzLyB0cmFjZXBvaW50cy8gdHJhY2VfZXZlbnRzLyBcCi0JCQkgICBod19icmVha3BvaW50LyBrZmlmby8ga2RiLworCQkJICAgaHdfYnJlYWtwb2ludC8ga2ZpZm8vIGtkYi8gaGlkcmF3LwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9oaWRyYXcvTWFrZWZpbGUgYi9zYW1wbGVzL2hpZHJhdy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODJlZWFlCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9oaWRyYXcvTWFrZWZpbGUKQEAgLTAsMCArMSwxMCBAQAorIyBrYnVpbGQgdHJpY2sgdG8gYXZvaWQgbGlua2VyIGVycm9yLiBDYW4gYmUgb21pdHRlZCBpZiBhIG1vZHVsZSBpcyBidWlsdC4KK29iai0gOj0gZHVtbXkubworCisjIExpc3Qgb2YgcHJvZ3JhbXMgdG8gYnVpbGQKK2hvc3Rwcm9ncy15IDo9IGhpZC1leGFtcGxlCisKKyMgVGVsbCBrYnVpbGQgdG8gYWx3YXlzIGJ1aWxkIHRoZSBwcm9ncmFtcworYWx3YXlzIDo9ICQoaG9zdHByb2dzLXkpCisKK0hPU1RDRkxBR1NfaGlkLWV4YW1wbGUubyArPSAtSSQob2JqdHJlZSkvdXNyL2luY2x1ZGUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvaGlkcmF3L2hpZC1leGFtcGxlLmMgYi9zYW1wbGVzL2hpZHJhdy9oaWQtZXhhbXBsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNmUyZGMKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2hpZHJhdy9oaWQtZXhhbXBsZS5jCkBAIC0wLDAgKzEsMTc4IEBACisvKgorICogSGlkcmF3IFVzZXJzcGFjZSBFeGFtcGxlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIEFsYW4gT3R0IDxhbGFuQHNpZ25hbDExLnVzPgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNpZ25hbCAxMSBTb2Z0d2FyZQorICoKKyAqIFRoZSBjb2RlIG1heSBiZSB1c2VkIGJ5IGFueW9uZSBmb3IgYW55IHB1cnBvc2UsCisgKiBhbmQgY2FuIHNlcnZlIGFzIGEgc3RhcnRpbmcgcG9pbnQgZm9yIGRldmVsb3BpbmcKKyAqIGFwcGxpY2F0aW9ucyB1c2luZyBoaWRyYXcuCisgKi8KKworLyogTGludXggKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaGlkcmF3Lmg+CisKKy8qCisgKiBVZ2x5IGhhY2sgdG8gd29yayBhcm91bmQgZmFpbGluZyBjb21waWxhdGlvbiBvbiBzeXN0ZW1zIHRoYXQgZG9uJ3QKKyAqIHlldCBwb3B1bGF0ZSBuZXcgdmVyc2lvbiBvZiBoaWRyYXcuaCB0byB1c2Vyc3BhY2UuCisgKgorICogSWYgeW91IG5lZWQgdGhpcywgcGxlYXNlIGhhdmUgeW91ciBkaXN0cm8gdXBkYXRlIHRoZSBrZXJuZWwgaGVhZGVycy4KKyAqLworI2lmbmRlZiBISURJT0NTRkVBVFVSRQorI2RlZmluZSBISURJT0NTRkVBVFVSRShsZW4pICAgIF9JT0MoX0lPQ19XUklURXxfSU9DX1JFQUQsICdIJywgMHgwNiwgbGVuKQorI2RlZmluZSBISURJT0NHRkVBVFVSRShsZW4pICAgIF9JT0MoX0lPQ19XUklURXxfSU9DX1JFQUQsICdIJywgMHgwNywgbGVuKQorI2VuZGlmCisKKy8qIFVuaXggKi8KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKy8qIEMgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKK2NvbnN0IGNoYXIgKmJ1c19zdHIoaW50IGJ1cyk7CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpbnQgZmQ7CisJaW50IGksIHJlcywgZGVzY19zaXplID0gMDsKKwljaGFyIGJ1ZlsyNTZdOworCXN0cnVjdCBoaWRyYXdfcmVwb3J0X2Rlc2NyaXB0b3IgcnB0X2Rlc2M7CisJc3RydWN0IGhpZHJhd19kZXZpbmZvIGluZm87CisKKwkvKiBPcGVuIHRoZSBEZXZpY2Ugd2l0aCBub24tYmxvY2tpbmcgcmVhZHMuIEluIHJlYWwgbGlmZSwKKwkgICBkb24ndCB1c2UgYSBoYXJkIGNvZGVkIHBhdGg7IHVzZSBsaWJ1ZGV2IGluc3RlYWQuICovCisJZmQgPSBvcGVuKCIvZGV2L2hpZHJhdzAiLCBPX1JEV1J8T19OT05CTE9DSyk7CisKKwlpZiAoZmQgPCAwKSB7CisJCXBlcnJvcigiVW5hYmxlIHRvIG9wZW4gZGV2aWNlIik7CisJCXJldHVybiAxOworCX0KKworCW1lbXNldCgmcnB0X2Rlc2MsIDB4MCwgc2l6ZW9mKHJwdF9kZXNjKSk7CisJbWVtc2V0KCZpbmZvLCAweDAsIHNpemVvZihpbmZvKSk7CisJbWVtc2V0KGJ1ZiwgMHgwLCBzaXplb2YoYnVmKSk7CisKKwkvKiBHZXQgUmVwb3J0IERlc2NyaXB0b3IgU2l6ZSAqLworCXJlcyA9IGlvY3RsKGZkLCBISURJT0NHUkRFU0NTSVpFLCAmZGVzY19zaXplKTsKKwlpZiAocmVzIDwgMCkKKwkJcGVycm9yKCJISURJT0NHUkRFU0NTSVpFIik7CisJZWxzZQorCQlwcmludGYoIlJlcG9ydCBEZXNjcmlwdG9yIFNpemU6ICVkXG4iLCBkZXNjX3NpemUpOworCisJLyogR2V0IFJlcG9ydCBEZXNjcmlwdG9yICovCisJcnB0X2Rlc2Muc2l6ZSA9IGRlc2Nfc2l6ZTsKKwlyZXMgPSBpb2N0bChmZCwgSElESU9DR1JERVNDLCAmcnB0X2Rlc2MpOworCWlmIChyZXMgPCAwKSB7CisJCXBlcnJvcigiSElESU9DR1JERVNDIik7CisJfSBlbHNlIHsKKwkJcHJpbnRmKCJSZXBvcnQgRGVzY3JpcHRvcjpcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgcnB0X2Rlc2Muc2l6ZTsgaSsrKQorCQkJcHJpbnRmKCIlaGh4ICIsIHJwdF9kZXNjLnZhbHVlW2ldKTsKKwkJcHV0cygiXG4iKTsKKwl9CisKKwkvKiBHZXQgUmF3IE5hbWUgKi8KKwlyZXMgPSBpb2N0bChmZCwgSElESU9DR1JBV05BTUUoMjU2KSwgYnVmKTsKKwlpZiAocmVzIDwgMCkKKwkJcGVycm9yKCJISURJT0NHUkFXTkFNRSIpOworCWVsc2UKKwkJcHJpbnRmKCJSYXcgTmFtZTogJXNcbiIsIGJ1Zik7CisKKwkvKiBHZXQgUGh5c2ljYWwgTG9jYXRpb24gKi8KKwlyZXMgPSBpb2N0bChmZCwgSElESU9DR1JBV1BIWVMoMjU2KSwgYnVmKTsKKwlpZiAocmVzIDwgMCkKKwkJcGVycm9yKCJISURJT0NHUkFXUEhZUyIpOworCWVsc2UKKwkJcHJpbnRmKCJSYXcgUGh5czogJXNcbiIsIGJ1Zik7CisKKwkvKiBHZXQgUmF3IEluZm8gKi8KKwlyZXMgPSBpb2N0bChmZCwgSElESU9DR1JBV0lORk8sICZpbmZvKTsKKwlpZiAocmVzIDwgMCkgeworCQlwZXJyb3IoIkhJRElPQ0dSQVdJTkZPIik7CisJfSBlbHNlIHsKKwkJcHJpbnRmKCJSYXcgSW5mbzpcbiIpOworCQlwcmludGYoIlx0YnVzdHlwZTogJWQgKCVzKVxuIiwKKwkJCWluZm8uYnVzdHlwZSwgYnVzX3N0cihpbmZvLmJ1c3R5cGUpKTsKKwkJcHJpbnRmKCJcdHZlbmRvcjogMHglMDRoeFxuIiwgaW5mby52ZW5kb3IpOworCQlwcmludGYoIlx0cHJvZHVjdDogMHglMDRoeFxuIiwgaW5mby5wcm9kdWN0KTsKKwl9CisKKwkvKiBTZXQgRmVhdHVyZSAqLworCWJ1ZlswXSA9IDB4OTsgLyogUmVwb3J0IE51bWJlciAqLworCWJ1ZlsxXSA9IDB4ZmY7CisJYnVmWzJdID0gMHhmZjsKKwlidWZbM10gPSAweGZmOworCXJlcyA9IGlvY3RsKGZkLCBISURJT0NTRkVBVFVSRSg0KSwgYnVmKTsKKwlpZiAocmVzIDwgMCkKKwkJcGVycm9yKCJISURJT0NTRkVBVFVSRSIpOworCWVsc2UKKwkJcHJpbnRmKCJpb2N0bCBISURJT0NHRkVBVFVSRSByZXR1cm5lZDogJWRcbiIsIHJlcyk7CisKKwkvKiBHZXQgRmVhdHVyZSAqLworCWJ1ZlswXSA9IDB4OTsgLyogUmVwb3J0IE51bWJlciAqLworCXJlcyA9IGlvY3RsKGZkLCBISURJT0NHRkVBVFVSRSgyNTYpLCBidWYpOworCWlmIChyZXMgPCAwKSB7CisJCXBlcnJvcigiSElESU9DR0ZFQVRVUkUiKTsKKwl9IGVsc2UgeworCQlwcmludGYoImlvY3RsIEhJRElPQ0dGRUFUVVJFIHJldHVybmVkOiAlZFxuIiwgcmVzKTsKKwkJcHJpbnRmKCJSZXBvcnQgZGF0YSAobm90IGNvbnRhaW5pbmcgdGhlIHJlcG9ydCBudW1iZXIpOlxuXHQiKTsKKwkJZm9yIChpID0gMDsgaSA8IHJlczsgaSsrKQorCQkJcHJpbnRmKCIlaGh4ICIsIGJ1ZltpXSk7CisJCXB1dHMoIlxuIik7CisJfQorCisJLyogU2VuZCBhIFJlcG9ydCB0byB0aGUgRGV2aWNlICovCisJYnVmWzBdID0gMHgxOyAvKiBSZXBvcnQgTnVtYmVyICovCisJYnVmWzFdID0gMHg3NzsKKwlyZXMgPSB3cml0ZShmZCwgYnVmLCAyKTsKKwlpZiAocmVzIDwgMCkgeworCQlwcmludGYoIkVycm9yOiAlZFxuIiwgZXJybm8pOworCQlwZXJyb3IoIndyaXRlIik7CisJfSBlbHNlIHsKKwkJcHJpbnRmKCJ3cml0ZSgpIHdyb3RlICVkIGJ5dGVzXG4iLCByZXMpOworCX0KKworCS8qIEdldCBhIHJlcG9ydCBmcm9tIHRoZSBkZXZpY2UgKi8KKwlyZXMgPSByZWFkKGZkLCBidWYsIDE2KTsKKwlpZiAocmVzIDwgMCkgeworCQlwZXJyb3IoInJlYWQiKTsKKwl9IGVsc2UgeworCQlwcmludGYoInJlYWQoKSByZWFkICVkIGJ5dGVzOlxuXHQiLCByZXMpOworCQlmb3IgKGkgPSAwOyBpIDwgcmVzOyBpKyspCisJCQlwcmludGYoIiVoaHggIiwgYnVmW2ldKTsKKwkJcHV0cygiXG4iKTsKKwl9CisJY2xvc2UoZmQpOworCXJldHVybiAwOworfQorCitjb25zdCBjaGFyICoKK2J1c19zdHIoaW50IGJ1cykKK3sKKwlzd2l0Y2ggKGJ1cykgeworCWNhc2UgQlVTX1VTQjoKKwkJcmV0dXJuICJVU0IiOworCQlicmVhazsKKwljYXNlIEJVU19ISUw6CisJCXJldHVybiAiSElMIjsKKwkJYnJlYWs7CisJY2FzZSBCVVNfQkxVRVRPT1RIOgorCQlyZXR1cm4gIkJsdWV0b290aCI7CisJCWJyZWFrOworCWNhc2UgQlVTX1ZJUlRVQUw6CisJCXJldHVybiAiVmlydHVhbCI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAiT3RoZXIiOworCQlicmVhazsKKwl9Cit9CmRpZmYgLS1naXQgYS9zY3JpcHRzL2NoZWNrc3RhY2sucGwgYi9zY3JpcHRzL2NoZWNrc3RhY2sucGwKaW5kZXggMWFmZmY2Ni4uMTdlMzg0MyAxMDA3NTUKLS0tIGEvc2NyaXB0cy9jaGVja3N0YWNrLnBsCisrKyBiL3NjcmlwdHMvY2hlY2tzdGFjay5wbApAQCAtMTIsNyArMTIsNyBAQAogIwlzaDY0IHBvcnQgYnkgUGF1bCBNdW5kdAogIwlSYW5kb20gYml0cyBieSBNYXR0IE1hY2thbGwgPG1wbUBzZWxlbmljLmNvbT4KICMJTTY4ayBwb3J0IGJ5IEdlZXJ0IFV5dHRlcmhvZXZlbiBhbmQgQW5kcmVhcyBTY2h3YWIKLSMJQVZSMzIgcG9ydCBieSBIYWF2YXJkIFNraW5uZW1vZW4gPGhza2lubmVtb2VuQGF0bWVsLmNvbT4KKyMJQVZSMzIgcG9ydCBieSBIYWF2YXJkIFNraW5uZW1vZW4gKEF0bWVsKQogIwlQQVJJU0MgcG9ydCBieSBLeWxlIE1jTWFydGluIDxreWxlQHBhcmlzYy1saW51eC5vcmc+CiAjCXNwYXJjIHBvcnQgYnkgTWFydGluIEhhYmV0cyA8ZXJyYW5kaXJfbmV3c0BtcGguZWNsaXBzZS5jby51az4KICMKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYyBiL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYwppbmRleCA4OGYzZjA3Li5lMjZlMmZiIDEwMDY0NAotLS0gYS9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMKKysrIGIvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jCkBAIC03MDIsNiArNzAyLDI0IEBACiAJcmV0dXJuIDE7CiB9CiAKKy8qIExvb2tzIGxpa2U6IGJjbWE6bU5pZE5yZXZOY2xOLiAqLworc3RhdGljIGludCBkb19iY21hX2VudHJ5KGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJIHN0cnVjdCBiY21hX2RldmljZV9pZCAqaWQsIGNoYXIgKmFsaWFzKQoreworCWlkLT5tYW51ZiA9IFRPX05BVElWRShpZC0+bWFudWYpOworCWlkLT5pZCA9IFRPX05BVElWRShpZC0+aWQpOworCWlkLT5yZXYgPSBUT19OQVRJVkUoaWQtPnJldik7CisJaWQtPmNsYXNzID0gVE9fTkFUSVZFKGlkLT5jbGFzcyk7CisKKwlzdHJjcHkoYWxpYXMsICJiY21hOiIpOworCUFERChhbGlhcywgIm0iLCBpZC0+bWFudWYgIT0gQkNNQV9BTllfTUFOVUYsIGlkLT5tYW51Zik7CisJQUREKGFsaWFzLCAiaWQiLCBpZC0+aWQgIT0gQkNNQV9BTllfSUQsIGlkLT5pZCk7CisJQUREKGFsaWFzLCAicmV2IiwgaWQtPnJldiAhPSBCQ01BX0FOWV9SRVYsIGlkLT5yZXYpOworCUFERChhbGlhcywgImNsIiwgaWQtPmNsYXNzICE9IEJDTUFfQU5ZX0NMQVNTLCBpZC0+Y2xhc3MpOworCWFkZF93aWxkY2FyZChhbGlhcyk7CisJcmV0dXJuIDE7Cit9CisKIC8qIExvb2tzIGxpa2U6IHZpcnRpbzpkTnZOICovCiBzdGF0aWMgaW50IGRvX3ZpcnRpb19lbnRyeShjb25zdCBjaGFyICpmaWxlbmFtZSwgc3RydWN0IHZpcnRpb19kZXZpY2VfaWQgKmlkLAogCQkJICAgY2hhciAqYWxpYXMpCkBAIC05NjgsNiArOTg2LDEwIEBACiAJCWRvX3RhYmxlKHN5bXZhbCwgc3ltLT5zdF9zaXplLAogCQkJIHNpemVvZihzdHJ1Y3Qgc3NiX2RldmljZV9pZCksICJzc2IiLAogCQkJIGRvX3NzYl9lbnRyeSwgbW9kKTsKKwllbHNlIGlmIChzeW1faXMoc3ltbmFtZSwgIl9fbW9kX2JjbWFfZGV2aWNlX3RhYmxlIikpCisJCWRvX3RhYmxlKHN5bXZhbCwgc3ltLT5zdF9zaXplLAorCQkJIHNpemVvZihzdHJ1Y3QgYmNtYV9kZXZpY2VfaWQpLCAiYmNtYSIsCisJCQkgZG9fYmNtYV9lbnRyeSwgbW9kKTsKIAllbHNlIGlmIChzeW1faXMoc3ltbmFtZSwgIl9fbW9kX3ZpcnRpb19kZXZpY2VfdGFibGUiKSkKIAkJZG9fdGFibGUoc3ltdmFsLCBzeW0tPnN0X3NpemUsCiAJCQkgc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fZGV2aWNlX2lkKSwgInZpcnRpbyIsCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYwppbmRleCBjMGUxYTBmLi4yZDMzNzNiIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMKQEAgLTI4MCw3ICsyODAsNyBAQAogCiAJbGVuZ3RoID0gLUVOT01FTTsKIAlpZiAoY291bnQgPj0gUEFHRV9TSVpFKQotCQlnb3RvIG91dDs7CisJCWdvdG8gb3V0OwogCiAJLyogTm8gcGFydGlhbCB3cml0ZXMuICovCiAJbGVuZ3RoID0gLUVJTlZBTDsKQEAgLTg3NiwxMiArODc2LDEyIEBACiAKIAlsZW5ndGggPSB0YXNrX2hhc19zZWN1cml0eShjdXJyZW50LCBTRUNVUklUWV9fQ09NUFVURV9VU0VSKTsKIAlpZiAobGVuZ3RoKQotCQlnb3RvIG91dDs7CisJCWdvdG8gb3V0OwogCiAJbGVuZ3RoID0gLUVOT01FTTsKIAljb24gPSBremFsbG9jKHNpemUgKyAxLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNvbikKLQkJZ290byBvdXQ7OworCQlnb3RvIG91dDsKIAogCWxlbmd0aCA9IC1FTk9NRU07CiAJdXNlciA9IGt6YWxsb2Moc2l6ZSArIDEsIEdGUF9LRVJORUwpOwpAQCAtOTQxLDcgKzk0MSw3IEBACiAJbGVuZ3RoID0gLUVOT01FTTsKIAlzY29uID0ga3phbGxvYyhzaXplICsgMSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzY29uKQotCQlnb3RvIG91dDs7CisJCWdvdG8gb3V0OwogCiAJbGVuZ3RoID0gLUVOT01FTTsKIAl0Y29uID0ga3phbGxvYyhzaXplICsgMSwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2NvbnRyb2wuYyBiL3NvdW5kL2NvcmUvY29udHJvbC5jCmluZGV4IGEwOGFkNTcuLjVkOTgxOTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvY29udHJvbC5jCisrKyBiL3NvdW5kL2NvcmUvY29udHJvbC5jCkBAIC0zNjYsNiArMzY2LDcwIEBACiBFWFBPUlRfU1lNQk9MKHNuZF9jdGxfYWRkKTsKIAogLyoqCisgKiBzbmRfY3RsX3JlcGxhY2UgLSByZXBsYWNlIHRoZSBjb250cm9sIGluc3RhbmNlIG9mIHRoZSBjYXJkCisgKiBAY2FyZDogdGhlIGNhcmQgaW5zdGFuY2UKKyAqIEBrY29udHJvbDogdGhlIGNvbnRyb2wgaW5zdGFuY2UgdG8gcmVwbGFjZQorICogQGFkZF9vbl9yZXBsYWNlOiBhZGQgdGhlIGNvbnRyb2wgaWYgbm90IGFscmVhZHkgYWRkZWQKKyAqCisgKiBSZXBsYWNlcyB0aGUgZ2l2ZW4gY29udHJvbC4gIElmIHRoZSBnaXZlbiBjb250cm9sIGRvZXMgbm90IGV4aXN0CisgKiBhbmQgdGhlIGFkZF9vbl9yZXBsYWNlIGZsYWcgaXMgc2V0LCB0aGUgY29udHJvbCBpcyBhZGRlZC4gIElmIHRoZQorICogY29udHJvbCBleGlzdHMsIGl0IGlzIGRlc3Ryb3llZCBmaXJzdC4KKyAqCisgKiBSZXR1cm5zIHplcm8gaWYgc3VjY2Vzc2Z1bCwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKgorICogSXQgZnJlZXMgYXV0b21hdGljYWxseSB0aGUgY29udHJvbCB3aGljaCBjYW5ub3QgYmUgYWRkZWQgb3IgcmVwbGFjZWQuCisgKi8KK2ludCBzbmRfY3RsX3JlcGxhY2Uoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJICAgIGJvb2wgYWRkX29uX3JlcGxhY2UpCit7CisJc3RydWN0IHNuZF9jdGxfZWxlbV9pZCBpZDsKKwl1bnNpZ25lZCBpbnQgaWR4OworCXN0cnVjdCBzbmRfa2NvbnRyb2wgKm9sZDsKKwlpbnQgcmV0OworCisJaWYgKCFrY29udHJvbCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHNuZF9CVUdfT04oIWNhcmQgfHwgIWtjb250cm9sLT5pbmZvKSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycm9yOworCX0KKwlpZCA9IGtjb250cm9sLT5pZDsKKwlkb3duX3dyaXRlKCZjYXJkLT5jb250cm9sc19yd3NlbSk7CisJb2xkID0gc25kX2N0bF9maW5kX2lkKGNhcmQsICZpZCk7CisJaWYgKCFvbGQpIHsKKwkJaWYgKGFkZF9vbl9yZXBsYWNlKQorCQkJZ290byBhZGQ7CisJCXVwX3dyaXRlKCZjYXJkLT5jb250cm9sc19yd3NlbSk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyb3I7CisJfQorCXJldCA9IHNuZF9jdGxfcmVtb3ZlKGNhcmQsIG9sZCk7CisJaWYgKHJldCA8IDApIHsKKwkJdXBfd3JpdGUoJmNhcmQtPmNvbnRyb2xzX3J3c2VtKTsKKwkJZ290byBlcnJvcjsKKwl9CithZGQ6CisJaWYgKHNuZF9jdGxfZmluZF9ob2xlKGNhcmQsIGtjb250cm9sLT5jb3VudCkgPCAwKSB7CisJCXVwX3dyaXRlKCZjYXJkLT5jb250cm9sc19yd3NlbSk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3I7CisJfQorCWxpc3RfYWRkX3RhaWwoJmtjb250cm9sLT5saXN0LCAmY2FyZC0+Y29udHJvbHMpOworCWNhcmQtPmNvbnRyb2xzX2NvdW50ICs9IGtjb250cm9sLT5jb3VudDsKKwlrY29udHJvbC0+aWQubnVtaWQgPSBjYXJkLT5sYXN0X251bWlkICsgMTsKKwljYXJkLT5sYXN0X251bWlkICs9IGtjb250cm9sLT5jb3VudDsKKwl1cF93cml0ZSgmY2FyZC0+Y29udHJvbHNfcndzZW0pOworCWZvciAoaWR4ID0gMDsgaWR4IDwga2NvbnRyb2wtPmNvdW50OyBpZHgrKywgaWQuaW5kZXgrKywgaWQubnVtaWQrKykKKwkJc25kX2N0bF9ub3RpZnkoY2FyZCwgU05EUlZfQ1RMX0VWRU5UX01BU0tfQURELCAmaWQpOworCXJldHVybiAwOworCitlcnJvcjoKKwlzbmRfY3RsX2ZyZWVfb25lKGtjb250cm9sKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChzbmRfY3RsX3JlcGxhY2UpOworCisvKioKICAqIHNuZF9jdGxfcmVtb3ZlIC0gcmVtb3ZlIHRoZSBjb250cm9sIGZyb20gdGhlIGNhcmQgYW5kIHJlbGVhc2UgaXQKICAqIEBjYXJkOiB0aGUgY2FyZCBpbnN0YW5jZQogICogQGtjb250cm9sOiB0aGUgY29udHJvbCBpbnN0YW5jZSB0byByZW1vdmUKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvaW5pdC5jIGIvc291bmQvY29yZS9pbml0LmMKaW5kZXggYTAwODBhYS4uMzBlY2FkNCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9pbml0LmMKKysrIGIvc291bmQvY29yZS9pbml0LmMKQEAgLTUxNCw3ICs1MTQsNyBAQAogCWlkID0gY2FyZC0+aWQ7CiAJCiAJaWYgKCppZCA9PSAnXDAnKQotCQlzdHJjcHkoaWQsICJkZWZhdWx0Iik7CisJCXN0cmNweShpZCwgIkRlZmF1bHQiKTsKIAogCXdoaWxlICgxKSB7CiAJICAgICAgCWlmIChsb29wcy0tID09IDApIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX2xpYi5jIGIvc291bmQvY29yZS9wY21fbGliLmMKaW5kZXggNjQ0NDljYi4uYWJmZWZmMTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX2xpYi5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX2xpYi5jCkBAIC0xODksNiArMTg5LDcgQEAKICNkZWZpbmUgWFJVTl9MT0dfQ05UCTEwCiAKIHN0cnVjdCBod3B0cl9sb2dfZW50cnkgeworCXVuc2lnbmVkIGludCBpbl9pbnRlcnJ1cHQ7CiAJdW5zaWduZWQgbG9uZyBqaWZmaWVzOwogCXNuZF9wY21fdWZyYW1lc190IHBvczsKIAlzbmRfcGNtX3VmcmFtZXNfdCBwZXJpb2Rfc2l6ZTsKQEAgLTIwNCw3ICsyMDUsNyBAQAogfTsKIAogc3RhdGljIHZvaWQgeHJ1bl9sb2coc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCSAgICAgc25kX3BjbV91ZnJhbWVzX3QgcG9zKQorCQkgICAgIHNuZF9wY21fdWZyYW1lc190IHBvcywgaW50IGluX2ludGVycnVwdCkKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXN0cnVjdCBzbmRfcGNtX2h3cHRyX2xvZyAqbG9nID0gcnVudGltZS0+aHdwdHJfbG9nOwpAQCAtMjIwLDYgKzIyMSw3IEBACiAJCQlyZXR1cm47CiAJfQogCWVudHJ5ID0gJmxvZy0+ZW50cmllc1tsb2ctPmlkeF07CisJZW50cnktPmluX2ludGVycnVwdCA9IGluX2ludGVycnVwdDsKIAllbnRyeS0+amlmZmllcyA9IGppZmZpZXM7CiAJZW50cnktPnBvcyA9IHBvczsKIAllbnRyeS0+cGVyaW9kX3NpemUgPSBydW50aW1lLT5wZXJpb2Rfc2l6ZTsKQEAgLTI0Niw5ICsyNDgsMTEgQEAKIAkJZW50cnkgPSAmbG9nLT5lbnRyaWVzW2lkeF07CiAJCWlmIChlbnRyeS0+cGVyaW9kX3NpemUgPT0gMCkKIAkJCWJyZWFrOwotCQlzbmRfcHJpbnRkKCJod3B0ciBsb2c6ICVzOiBqPSVsdSwgcG9zPSVsZC8lbGQvJWxkLCAiCisJCXNuZF9wcmludGQoImh3cHRyIGxvZzogJXM6ICVzaj0lbHUsIHBvcz0lbGQvJWxkLyVsZCwgIgogCQkJICAgImh3cHRyPSVsZC8lbGRcbiIsCi0JCQkgICBuYW1lLCBlbnRyeS0+amlmZmllcywgKHVuc2lnbmVkIGxvbmcpZW50cnktPnBvcywKKwkJCSAgIG5hbWUsIGVudHJ5LT5pbl9pbnRlcnJ1cHQgPyAiW1FdICIgOiAiIiwKKwkJCSAgIGVudHJ5LT5qaWZmaWVzLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpZW50cnktPnBvcywKIAkJCSAgICh1bnNpZ25lZCBsb25nKWVudHJ5LT5wZXJpb2Rfc2l6ZSwKIAkJCSAgICh1bnNpZ25lZCBsb25nKWVudHJ5LT5idWZmZXJfc2l6ZSwKIAkJCSAgICh1bnNpZ25lZCBsb25nKWVudHJ5LT5vbGRfaHdfcHRyLApAQCAtMjYyLDcgKzI2Niw3IEBACiAjZWxzZSAvKiAhIENPTkZJR19TTkRfUENNX1hSVU5fREVCVUcgKi8KIAogI2RlZmluZSBod19wdHJfZXJyb3Ioc3Vic3RyZWFtLCBmbXQsIGFyZ3MuLi4pIGRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgeHJ1bl9sb2coc3Vic3RyZWFtLCBwb3MpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgeHJ1bl9sb2coc3Vic3RyZWFtLCBwb3MsIGluX2ludGVycnVwdCkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSB4cnVuX2xvZ19zaG93KHN1YnN0cmVhbSkJZG8geyB9IHdoaWxlICgwKQogCiAjZW5kaWYKQEAgLTMyNiw3ICszMzAsNyBAQAogCX0KIAlwb3MgLT0gcG9zICUgcnVudGltZS0+bWluX2FsaWduOwogCWlmICh4cnVuX2RlYnVnKHN1YnN0cmVhbSwgWFJVTl9ERUJVR19MT0cpKQotCQl4cnVuX2xvZyhzdWJzdHJlYW0sIHBvcyk7CisJCXhydW5fbG9nKHN1YnN0cmVhbSwgcG9zLCBpbl9pbnRlcnJ1cHQpOwogCWh3X2Jhc2UgPSBydW50aW1lLT5od19wdHJfYmFzZTsKIAluZXdfaHdfcHRyID0gaHdfYmFzZSArIHBvczsKIAlpZiAoaW5faW50ZXJydXB0KSB7CmRpZmYgLS1naXQgYS9zb3VuZC9maXJld2lyZS9LY29uZmlnIGIvc291bmQvZmlyZXdpcmUvS2NvbmZpZwppbmRleCBlNDg2ZjQ4Li4yNjA3MTQ4IDEwMDY0NAotLS0gYS9zb3VuZC9maXJld2lyZS9LY29uZmlnCisrKyBiL3NvdW5kL2ZpcmV3aXJlL0tjb25maWcKQEAgLTIyLDQgKzIyLDE1IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtZmlyZXdpcmUtc3BlYWtlcnMuCiAKK2NvbmZpZyBTTkRfSVNJR0hUCisJdHJpc3RhdGUgIkFwcGxlIGlTaWdodCBtaWNyb3Bob25lIgorCXNlbGVjdCBTTkRfUENNCisJc2VsZWN0IFNORF9GSVJFV0lSRV9MSUIKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIGZyb250IGFuZCByZWFyIG1pY3JvcGhvbmVzCisJICBvZiB0aGUgQXBwbGUgaVNpZ2h0IHdlYiBjYW1lcmEuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHNuZC1pc2lnaHQuCisKIGVuZGlmICMgU05EX0ZJUkVXSVJFCmRpZmYgLS1naXQgYS9zb3VuZC9maXJld2lyZS9NYWtlZmlsZSBiL3NvdW5kL2ZpcmV3aXJlL01ha2VmaWxlCmluZGV4IGU1YjE2MzQuLmQ3MWVkODkgMTAwNjQ0Ci0tLSBhL3NvdW5kL2ZpcmV3aXJlL01ha2VmaWxlCisrKyBiL3NvdW5kL2ZpcmV3aXJlL01ha2VmaWxlCkBAIC0xLDYgKzEsOCBAQAogc25kLWZpcmV3aXJlLWxpYi1vYmpzIDo9IGxpYi5vIGlzby1yZXNvdXJjZXMubyBwYWNrZXRzLWJ1ZmZlci5vIFwKIAkJCSBmY3AubyBjbXAubyBhbWR0cC5vCiBzbmQtZmlyZXdpcmUtc3BlYWtlcnMtb2JqcyA6PSBzcGVha2Vycy5vCitzbmQtaXNpZ2h0LW9ianMgOj0gaXNpZ2h0Lm8KIAogb2JqLSQoQ09ORklHX1NORF9GSVJFV0lSRV9MSUIpICs9IHNuZC1maXJld2lyZS1saWIubwogb2JqLSQoQ09ORklHX1NORF9GSVJFV0lSRV9TUEVBS0VSUykgKz0gc25kLWZpcmV3aXJlLXNwZWFrZXJzLm8KK29iai0kKENPTkZJR19TTkRfSVNJR0hUKSArPSBzbmQtaXNpZ2h0Lm8KZGlmZiAtLWdpdCBhL3NvdW5kL2ZpcmV3aXJlL2FtZHRwLmMgYi9zb3VuZC9maXJld2lyZS9hbWR0cC5jCmluZGV4IGIxODE0MGYuLjg3NjU3ZGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2ZpcmV3aXJlL2FtZHRwLmMKKysrIGIvc291bmQvZmlyZXdpcmUvYW1kdHAuYwpAQCAtMzk2LDYgKzM5Niw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgcGFja2V0czsgKytpKQogCQlxdWV1ZV9vdXRfcGFja2V0KHMsICsrY3ljbGUpOworCWZ3X2lzb19jb250ZXh0X3F1ZXVlX2ZsdXNoKHMtPmNvbnRleHQpOwogfQogCiBzdGF0aWMgaW50IHF1ZXVlX2luaXRpYWxfc2tpcF9wYWNrZXRzKHN0cnVjdCBhbWR0cF9vdXRfc3RyZWFtICpzKQpkaWZmIC0tZ2l0IGEvc291bmQvZmlyZXdpcmUvY21wLmMgYi9zb3VuZC9maXJld2lyZS9jbXAuYwppbmRleCA0YTM3ZjNhLi4xNGNhY2JjIDEwMDY0NAotLS0gYS9zb3VuZC9maXJld2lyZS9jbXAuYworKysgYi9zb3VuZC9maXJld2lyZS9jbXAuYwpAQCAtNDksMTAgKzQ5LDkgQEAKIAkJICAgICAgZW51bSBidXNfcmVzZXRfaGFuZGxpbmcgYnVzX3Jlc2V0X2hhbmRsaW5nKQogewogCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZSA9IGZ3X3BhcmVudF9kZXZpY2UoYy0+cmVzb3VyY2VzLnVuaXQpOwotCV9fYmUzMiAqYnVmZmVyID0gYy0+cmVzb3VyY2VzLmJ1ZmZlcjsKIAlpbnQgZ2VuZXJhdGlvbiA9IGMtPnJlc291cmNlcy5nZW5lcmF0aW9uOwogCWludCByY29kZSwgZXJyb3JzID0gMDsKLQlfX2JlMzIgb2xkX2FyZzsKKwlfX2JlMzIgb2xkX2FyZywgYnVmZmVyWzJdOwogCWludCBlcnI7CiAKIAlidWZmZXJbMF0gPSBjLT5sYXN0X3Bjcl92YWx1ZTsKZGlmZiAtLWdpdCBhL3NvdW5kL2ZpcmV3aXJlL2lzaWdodC5jIGIvc291bmQvZmlyZXdpcmUvaXNpZ2h0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZlZTE2YwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2ZpcmV3aXJlL2lzaWdodC5jCkBAIC0wLDAgKzEsNzU1IEBACisvKgorICogQXBwbGUgaVNpZ2h0IGF1ZGlvIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgQ2xlbWVucyBMYWRpc2NoIDxjbGVtZW5zQGxhZGlzY2guZGU+CisgKiBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKi8KKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpcmV3aXJlLmg+CisjaW5jbHVkZSA8bGludXgvZmlyZXdpcmUtY29uc3RhbnRzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKyNpbmNsdWRlICJsaWIuaCIKKyNpbmNsdWRlICJpc28tcmVzb3VyY2VzLmgiCisjaW5jbHVkZSAicGFja2V0cy1idWZmZXIuaCIKKworI2RlZmluZSBPVUlfQVBQTEUJCTB4MDAwYTI3CisjZGVmaW5lIE1PREVMX0FQUExFX0lTSUdIVAkweDAwMDAwOAorI2RlZmluZSBTV19JU0lHSFRfQVVESU8JCTB4MDAwMDEwCisKKyNkZWZpbmUgUkVHX0FVRElPX0VOQUJMRQkweDAwMAorI2RlZmluZSAgQVVESU9fRU5BQkxFCQkweDgwMDAwMDAwCisjZGVmaW5lIFJFR19ERUZfQVVESU9fR0FJTgkweDIwNAorI2RlZmluZSBSRUdfR0FJTl9SQVdfU1RBUlQJMHgyMTAKKyNkZWZpbmUgUkVHX0dBSU5fUkFXX0VORAkweDIxNAorI2RlZmluZSBSRUdfR0FJTl9EQl9TVEFSVAkweDIxOAorI2RlZmluZSBSRUdfR0FJTl9EQl9FTkQJCTB4MjFjCisjZGVmaW5lIFJFR19TQU1QTEVfUkFURV9JTlFVSVJZCTB4MjgwCisjZGVmaW5lIFJFR19JU09fVFhfQ09ORklHCTB4MzAwCisjZGVmaW5lICBTUEVFRF9TSElGVAkJMTYKKyNkZWZpbmUgUkVHX1NBTVBMRV9SQVRFCQkweDQwMAorI2RlZmluZSAgUkFURV80ODAwMAkJMHg4MDAwMDAwMAorI2RlZmluZSBSRUdfR0FJTgkJMHg1MDAKKyNkZWZpbmUgUkVHX01VVEUJCTB4NTA0CisKKyNkZWZpbmUgTUFYX0ZSQU1FU19QRVJfUEFDS0VUCTQ3NQorCisjZGVmaW5lIFFVRVVFX0xFTkdUSAkJMjAKKworc3RydWN0IGlzaWdodCB7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCXN0cnVjdCBmd191bml0ICp1bml0OworCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZTsKKwl1NjQgYXVkaW9fYmFzZTsKKwlzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyIGlyaXNfaGFuZGxlcjsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnBjbTsKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisJc3RydWN0IGlzb19wYWNrZXRzX2J1ZmZlciBidWZmZXI7CisJc3RydWN0IGZ3X2lzb19yZXNvdXJjZXMgcmVzb3VyY2VzOworCXN0cnVjdCBmd19pc29fY29udGV4dCAqY29udGV4dDsKKwlib29sIHBjbV9hY3RpdmU7CisJYm9vbCBwY21fcnVubmluZzsKKwlib29sIGZpcnN0X3BhY2tldDsKKwlpbnQgcGFja2V0X2luZGV4OworCXUzMiB0b3RhbF9zYW1wbGVzOworCXVuc2lnbmVkIGludCBidWZmZXJfcG9pbnRlcjsKKwl1bnNpZ25lZCBpbnQgcGVyaW9kX2NvdW50ZXI7CisJczMyIGdhaW5fbWluLCBnYWluX21heDsKKwl1bnNpZ25lZCBpbnQgZ2Fpbl90bHZbNF07Cit9OworCitzdHJ1Y3QgYXVkaW9fcGF5bG9hZCB7CisJX19iZTMyIHNhbXBsZV9jb3VudDsKKwlfX2JlMzIgc2lnbmF0dXJlOworCV9fYmUzMiBzYW1wbGVfdG90YWw7CisJX19iZTMyIHJlc2VydmVkOworCV9fYmUxNiBzYW1wbGVzWzIgKiBNQVhfRlJBTUVTX1BFUl9QQUNLRVRdOworfTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJpU2lnaHQgYXVkaW8gZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJDbGVtZW5zIExhZGlzY2ggPGNsZW1lbnNAbGFkaXNjaC5kZT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKKworc3RhdGljIHN0cnVjdCBmd19pc29fcGFja2V0IGF1ZGlvX3BhY2tldCA9IHsKKwkucGF5bG9hZF9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGF1ZGlvX3BheWxvYWQpLAorCS5pbnRlcnJ1cHQgPSAxLAorCS5oZWFkZXJfbGVuZ3RoID0gNCwKK307CisKK3N0YXRpYyB2b2lkIGlzaWdodF91cGRhdGVfcG9pbnRlcnMoc3RydWN0IGlzaWdodCAqaXNpZ2h0LCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IGlzaWdodC0+cGNtLT5ydW50aW1lOworCXVuc2lnbmVkIGludCBwdHI7CisKKwlzbXBfd21iKCk7IC8qIHVwZGF0ZSBidWZmZXIgZGF0YSBiZWZvcmUgYnVmZmVyIHBvaW50ZXIgKi8KKworCXB0ciA9IGlzaWdodC0+YnVmZmVyX3BvaW50ZXI7CisJcHRyICs9IGNvdW50OworCWlmIChwdHIgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpCisJCXB0ciAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKwlBQ0NFU1NfT05DRShpc2lnaHQtPmJ1ZmZlcl9wb2ludGVyKSA9IHB0cjsKKworCWlzaWdodC0+cGVyaW9kX2NvdW50ZXIgKz0gY291bnQ7CisJaWYgKGlzaWdodC0+cGVyaW9kX2NvdW50ZXIgPj0gcnVudGltZS0+cGVyaW9kX3NpemUpIHsKKwkJaXNpZ2h0LT5wZXJpb2RfY291bnRlciAtPSBydW50aW1lLT5wZXJpb2Rfc2l6ZTsKKwkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChpc2lnaHQtPnBjbSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBpc2lnaHRfc2FtcGxlcyhzdHJ1Y3QgaXNpZ2h0ICppc2lnaHQsCisJCQkgICBjb25zdCBfX2JlMTYgKnNhbXBsZXMsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOworCXVuc2lnbmVkIGludCBjb3VudDE7CisKKwlpZiAoIUFDQ0VTU19PTkNFKGlzaWdodC0+cGNtX3J1bm5pbmcpKQorCQlyZXR1cm47CisKKwlydW50aW1lID0gaXNpZ2h0LT5wY20tPnJ1bnRpbWU7CisJaWYgKGlzaWdodC0+YnVmZmVyX3BvaW50ZXIgKyBjb3VudCA8PSBydW50aW1lLT5idWZmZXJfc2l6ZSkgeworCQltZW1jcHkocnVudGltZS0+ZG1hX2FyZWEgKyBpc2lnaHQtPmJ1ZmZlcl9wb2ludGVyICogNCwKKwkJICAgICAgIHNhbXBsZXMsIGNvdW50ICogNCk7CisJfSBlbHNlIHsKKwkJY291bnQxID0gcnVudGltZS0+YnVmZmVyX3NpemUgLSBpc2lnaHQtPmJ1ZmZlcl9wb2ludGVyOworCQltZW1jcHkocnVudGltZS0+ZG1hX2FyZWEgKyBpc2lnaHQtPmJ1ZmZlcl9wb2ludGVyICogNCwKKwkJICAgICAgIHNhbXBsZXMsIGNvdW50MSAqIDQpOworCQlzYW1wbGVzICs9IGNvdW50MSAqIDI7CisJCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSwgc2FtcGxlcywgKGNvdW50IC0gY291bnQxKSAqIDQpOworCX0KKworCWlzaWdodF91cGRhdGVfcG9pbnRlcnMoaXNpZ2h0LCBjb3VudCk7Cit9CisKK3N0YXRpYyB2b2lkIGlzaWdodF9wY21fYWJvcnQoc3RydWN0IGlzaWdodCAqaXNpZ2h0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoQUNDRVNTX09OQ0UoaXNpZ2h0LT5wY21fYWN0aXZlKSkgeworCQlzbmRfcGNtX3N0cmVhbV9sb2NrX2lycXNhdmUoaXNpZ2h0LT5wY20sIGZsYWdzKTsKKwkJaWYgKHNuZF9wY21fcnVubmluZyhpc2lnaHQtPnBjbSkpCisJCQlzbmRfcGNtX3N0b3AoaXNpZ2h0LT5wY20sIFNORFJWX1BDTV9TVEFURV9YUlVOKTsKKwkJc25kX3BjbV9zdHJlYW1fdW5sb2NrX2lycXJlc3RvcmUoaXNpZ2h0LT5wY20sIGZsYWdzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGlzaWdodF9kcm9wcGVkX3NhbXBsZXMoc3RydWN0IGlzaWdodCAqaXNpZ2h0LCB1bnNpZ25lZCBpbnQgdG90YWwpCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZTsKKwl1MzIgZHJvcHBlZDsKKwl1bnNpZ25lZCBpbnQgY291bnQxOworCisJaWYgKCFBQ0NFU1NfT05DRShpc2lnaHQtPnBjbV9ydW5uaW5nKSkKKwkJcmV0dXJuOworCisJcnVudGltZSA9IGlzaWdodC0+cGNtLT5ydW50aW1lOworCWRyb3BwZWQgPSB0b3RhbCAtIGlzaWdodC0+dG90YWxfc2FtcGxlczsKKwlpZiAoZHJvcHBlZCA8IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKSB7CisJCWlmIChpc2lnaHQtPmJ1ZmZlcl9wb2ludGVyICsgZHJvcHBlZCA8PSBydW50aW1lLT5idWZmZXJfc2l6ZSkgeworCQkJbWVtc2V0KHJ1bnRpbWUtPmRtYV9hcmVhICsgaXNpZ2h0LT5idWZmZXJfcG9pbnRlciAqIDQsCisJCQkgICAgICAgMCwgZHJvcHBlZCAqIDQpOworCQl9IGVsc2UgeworCQkJY291bnQxID0gcnVudGltZS0+YnVmZmVyX3NpemUgLSBpc2lnaHQtPmJ1ZmZlcl9wb2ludGVyOworCQkJbWVtc2V0KHJ1bnRpbWUtPmRtYV9hcmVhICsgaXNpZ2h0LT5idWZmZXJfcG9pbnRlciAqIDQsCisJCQkgICAgICAgMCwgY291bnQxICogNCk7CisJCQltZW1zZXQocnVudGltZS0+ZG1hX2FyZWEsIDAsIChkcm9wcGVkIC0gY291bnQxKSAqIDQpOworCQl9CisJCWlzaWdodF91cGRhdGVfcG9pbnRlcnMoaXNpZ2h0LCBkcm9wcGVkKTsKKwl9IGVsc2UgeworCQlpc2lnaHRfcGNtX2Fib3J0KGlzaWdodCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBpc2lnaHRfcGFja2V0KHN0cnVjdCBmd19pc29fY29udGV4dCAqY29udGV4dCwgdTMyIGN5Y2xlLAorCQkJICBzaXplX3QgaGVhZGVyX2xlbmd0aCwgdm9pZCAqaGVhZGVyLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBpc2lnaHQgKmlzaWdodCA9IGRhdGE7CisJY29uc3Qgc3RydWN0IGF1ZGlvX3BheWxvYWQgKnBheWxvYWQ7CisJdW5zaWduZWQgaW50IGluZGV4LCBsZW5ndGgsIGNvdW50LCB0b3RhbDsKKwlpbnQgZXJyOworCisJaWYgKGlzaWdodC0+cGFja2V0X2luZGV4IDwgMCkKKwkJcmV0dXJuOworCWluZGV4ID0gaXNpZ2h0LT5wYWNrZXRfaW5kZXg7CisJcGF5bG9hZCA9IGlzaWdodC0+YnVmZmVyLnBhY2tldHNbaW5kZXhdLmJ1ZmZlcjsKKwlsZW5ndGggPSBiZTMyX3RvX2NwdXAoaGVhZGVyKSA+PiAxNjsKKworCWlmIChsaWtlbHkobGVuZ3RoID49IDE2ICYmCisJCSAgIHBheWxvYWQtPnNpZ25hdHVyZSA9PSBjcHVfdG9fYmUzMigweDczNjc2ODc0Lyoic2dodCIqLykpKSB7CisJCWNvdW50ID0gYmUzMl90b19jcHUocGF5bG9hZC0+c2FtcGxlX2NvdW50KTsKKwkJaWYgKGxpa2VseShjb3VudCA8PSAobGVuZ3RoIC0gMTYpIC8gNCkpIHsKKwkJCXRvdGFsID0gYmUzMl90b19jcHUocGF5bG9hZC0+c2FtcGxlX3RvdGFsKTsKKwkJCWlmICh1bmxpa2VseSh0b3RhbCAhPSBpc2lnaHQtPnRvdGFsX3NhbXBsZXMpKSB7CisJCQkJaWYgKCFpc2lnaHQtPmZpcnN0X3BhY2tldCkKKwkJCQkJaXNpZ2h0X2Ryb3BwZWRfc2FtcGxlcyhpc2lnaHQsIHRvdGFsKTsKKwkJCQlpc2lnaHQtPmZpcnN0X3BhY2tldCA9IGZhbHNlOworCQkJCWlzaWdodC0+dG90YWxfc2FtcGxlcyA9IHRvdGFsOworCQkJfQorCisJCQlpc2lnaHRfc2FtcGxlcyhpc2lnaHQsIHBheWxvYWQtPnNhbXBsZXMsIGNvdW50KTsKKwkJCWlzaWdodC0+dG90YWxfc2FtcGxlcyArPSBjb3VudDsKKwkJfQorCX0KKworCWVyciA9IGZ3X2lzb19jb250ZXh0X3F1ZXVlKGlzaWdodC0+Y29udGV4dCwgJmF1ZGlvX3BhY2tldCwKKwkJCQkgICAmaXNpZ2h0LT5idWZmZXIuaXNvX2J1ZmZlciwKKwkJCQkgICBpc2lnaHQtPmJ1ZmZlci5wYWNrZXRzW2luZGV4XS5vZmZzZXQpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoJmlzaWdodC0+dW5pdC0+ZGV2aWNlLCAicXVldWVpbmcgZXJyb3I6ICVkXG4iLCBlcnIpOworCQlpc2lnaHRfcGNtX2Fib3J0KGlzaWdodCk7CisJCWlzaWdodC0+cGFja2V0X2luZGV4ID0gLTE7CisJCXJldHVybjsKKwl9CisKKwlpZiAoKytpbmRleCA+PSBRVUVVRV9MRU5HVEgpCisJCWluZGV4ID0gMDsKKwlpc2lnaHQtPnBhY2tldF9pbmRleCA9IGluZGV4OworfQorCitzdGF0aWMgaW50IGlzaWdodF9jb25uZWN0KHN0cnVjdCBpc2lnaHQgKmlzaWdodCkKK3sKKwlpbnQgY2gsIGVyciwgcmNvZGUsIGVycm9ycyA9IDA7CisJX19iZTMyIHZhbHVlOworCityZXRyeV9hZnRlcl9idXNfcmVzZXQ6CisJY2ggPSBmd19pc29fcmVzb3VyY2VzX2FsbG9jYXRlKCZpc2lnaHQtPnJlc291cmNlcywKKwkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBhdWRpb19wYXlsb2FkKSwKKwkJCQkgICAgICAgaXNpZ2h0LT5kZXZpY2UtPm1heF9zcGVlZCk7CisJaWYgKGNoIDwgMCkgeworCQllcnIgPSBjaDsKKwkJZ290byBlcnJvcjsKKwl9CisKKwl2YWx1ZSA9IGNwdV90b19iZTMyKGNoIHwgKGlzaWdodC0+ZGV2aWNlLT5tYXhfc3BlZWQgPDwgU1BFRURfU0hJRlQpKTsKKwlmb3IgKDs7KSB7CisJCXJjb2RlID0gZndfcnVuX3RyYW5zYWN0aW9uKAorCQkJCWlzaWdodC0+ZGV2aWNlLT5jYXJkLAorCQkJCVRDT0RFX1dSSVRFX1FVQURMRVRfUkVRVUVTVCwKKwkJCQlpc2lnaHQtPmRldmljZS0+bm9kZV9pZCwKKwkJCQlpc2lnaHQtPnJlc291cmNlcy5nZW5lcmF0aW9uLAorCQkJCWlzaWdodC0+ZGV2aWNlLT5tYXhfc3BlZWQsCisJCQkJaXNpZ2h0LT5hdWRpb19iYXNlICsgUkVHX0lTT19UWF9DT05GSUcsCisJCQkJJnZhbHVlLCA0KTsKKwkJaWYgKHJjb2RlID09IFJDT0RFX0NPTVBMRVRFKSB7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIGlmIChyY29kZSA9PSBSQ09ERV9HRU5FUkFUSU9OKSB7CisJCQlmd19pc29fcmVzb3VyY2VzX2ZyZWUoJmlzaWdodC0+cmVzb3VyY2VzKTsKKwkJCWdvdG8gcmV0cnlfYWZ0ZXJfYnVzX3Jlc2V0OworCQl9IGVsc2UgaWYgKHJjb2RlX2lzX3Blcm1hbmVudF9lcnJvcihyY29kZSkgfHwgKytlcnJvcnMgPj0gMykgeworCQkJZXJyID0gLUVJTzsKKwkJCWdvdG8gZXJyX3Jlc291cmNlczsKKwkJfQorCQltc2xlZXAoNSk7CisJfQorCitlcnJfcmVzb3VyY2VzOgorCWZ3X2lzb19yZXNvdXJjZXNfZnJlZSgmaXNpZ2h0LT5yZXNvdXJjZXMpOworZXJyb3I6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBpc2lnaHRfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgaGFyZHdhcmUgPSB7CisJCS5pbmZvID0gU05EUlZfUENNX0lORk9fTU1BUCB8CisJCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKKwkJCVNORFJWX1BDTV9JTkZPX0JBVENIIHwKKwkJCVNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJCVNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSLAorCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0JFLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80ODAwMCwKKwkJLnJhdGVfbWluID0gNDgwMDAsCisJCS5yYXRlX21heCA9IDQ4MDAwLAorCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5idWZmZXJfYnl0ZXNfbWF4ID0gNCAqIDEwMjQgKiAxMDI0LAorCQkucGVyaW9kX2J5dGVzX21pbiA9IE1BWF9GUkFNRVNfUEVSX1BBQ0tFVCAqIDQsCisJCS5wZXJpb2RfYnl0ZXNfbWF4ID0gMTAyNCAqIDEwMjQsCisJCS5wZXJpb2RzX21pbiA9IDIsCisJCS5wZXJpb2RzX21heCA9IFVJTlRfTUFYLAorCX07CisJc3RydWN0IGlzaWdodCAqaXNpZ2h0ID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3ID0gaGFyZHdhcmU7CisKKwlyZXR1cm4gaXNvX3BhY2tldHNfYnVmZmVyX2luaXQoJmlzaWdodC0+YnVmZmVyLCBpc2lnaHQtPnVuaXQsCisJCQkJICAgICAgIFFVRVVFX0xFTkdUSCwKKwkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBhdWRpb19wYXlsb2FkKSwKKwkJCQkgICAgICAgRE1BX0ZST01fREVWSUNFKTsKK30KKworc3RhdGljIGludCBpc2lnaHRfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGlzaWdodCAqaXNpZ2h0ID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisKKwlpc29fcGFja2V0c19idWZmZXJfZGVzdHJveSgmaXNpZ2h0LT5idWZmZXIsIGlzaWdodC0+dW5pdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpc2lnaHRfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQoreworCXN0cnVjdCBpc2lnaHQgKmlzaWdodCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCWludCBlcnI7CisKKwllcnIgPSBzbmRfcGNtX2xpYl9hbGxvY192bWFsbG9jX2J1ZmZlcihzdWJzdHJlYW0sCisJCQkJCSAgICAgICBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJQUNDRVNTX09OQ0UoaXNpZ2h0LT5wY21fYWN0aXZlKSA9IHRydWU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWdfcmVhZChzdHJ1Y3QgaXNpZ2h0ICppc2lnaHQsIGludCBvZmZzZXQsIF9fYmUzMiAqdmFsdWUpCit7CisJcmV0dXJuIHNuZF9md190cmFuc2FjdGlvbihpc2lnaHQtPnVuaXQsIFRDT0RFX1JFQURfUVVBRExFVF9SRVFVRVNULAorCQkJCSAgaXNpZ2h0LT5hdWRpb19iYXNlICsgb2Zmc2V0LCB2YWx1ZSwgNCk7Cit9CisKK3N0YXRpYyBpbnQgcmVnX3dyaXRlKHN0cnVjdCBpc2lnaHQgKmlzaWdodCwgaW50IG9mZnNldCwgX19iZTMyIHZhbHVlKQoreworCXJldHVybiBzbmRfZndfdHJhbnNhY3Rpb24oaXNpZ2h0LT51bml0LCBUQ09ERV9XUklURV9RVUFETEVUX1JFUVVFU1QsCisJCQkJICBpc2lnaHQtPmF1ZGlvX2Jhc2UgKyBvZmZzZXQsICZ2YWx1ZSwgNCk7Cit9CisKK3N0YXRpYyB2b2lkIGlzaWdodF9zdG9wX3N0cmVhbWluZyhzdHJ1Y3QgaXNpZ2h0ICppc2lnaHQpCit7CisJaWYgKCFpc2lnaHQtPmNvbnRleHQpCisJCXJldHVybjsKKworCWZ3X2lzb19jb250ZXh0X3N0b3AoaXNpZ2h0LT5jb250ZXh0KTsKKwlmd19pc29fY29udGV4dF9kZXN0cm95KGlzaWdodC0+Y29udGV4dCk7CisJaXNpZ2h0LT5jb250ZXh0ID0gTlVMTDsKKwlmd19pc29fcmVzb3VyY2VzX2ZyZWUoJmlzaWdodC0+cmVzb3VyY2VzKTsKKwlyZWdfd3JpdGUoaXNpZ2h0LCBSRUdfQVVESU9fRU5BQkxFLCAwKTsKK30KKworc3RhdGljIGludCBpc2lnaHRfaHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgaXNpZ2h0ICppc2lnaHQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKworCUFDQ0VTU19PTkNFKGlzaWdodC0+cGNtX2FjdGl2ZSkgPSBmYWxzZTsKKworCW11dGV4X2xvY2soJmlzaWdodC0+bXV0ZXgpOworCWlzaWdodF9zdG9wX3N0cmVhbWluZyhpc2lnaHQpOworCW11dGV4X3VubG9jaygmaXNpZ2h0LT5tdXRleCk7CisKKwlyZXR1cm4gc25kX3BjbV9saWJfZnJlZV92bWFsbG9jX2J1ZmZlcihzdWJzdHJlYW0pOworfQorCitzdGF0aWMgaW50IGlzaWdodF9zdGFydF9zdHJlYW1pbmcoc3RydWN0IGlzaWdodCAqaXNpZ2h0KQoreworCXVuc2lnbmVkIGludCBpOworCWludCBlcnI7CisKKwlpZiAoaXNpZ2h0LT5jb250ZXh0KSB7CisJCWlmIChpc2lnaHQtPnBhY2tldF9pbmRleCA8IDApCisJCQlpc2lnaHRfc3RvcF9zdHJlYW1pbmcoaXNpZ2h0KTsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisJfQorCisJZXJyID0gcmVnX3dyaXRlKGlzaWdodCwgUkVHX1NBTVBMRV9SQVRFLCBjcHVfdG9fYmUzMihSQVRFXzQ4MDAwKSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyb3I7CisKKwllcnIgPSBpc2lnaHRfY29ubmVjdChpc2lnaHQpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycm9yOworCisJZXJyID0gcmVnX3dyaXRlKGlzaWdodCwgUkVHX0FVRElPX0VOQUJMRSwgY3B1X3RvX2JlMzIoQVVESU9fRU5BQkxFKSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX3Jlc291cmNlczsKKworCWlzaWdodC0+Y29udGV4dCA9IGZ3X2lzb19jb250ZXh0X2NyZWF0ZShpc2lnaHQtPmRldmljZS0+Y2FyZCwKKwkJCQkJCUZXX0lTT19DT05URVhUX1JFQ0VJVkUsCisJCQkJCQlpc2lnaHQtPnJlc291cmNlcy5jaGFubmVsLAorCQkJCQkJaXNpZ2h0LT5kZXZpY2UtPm1heF9zcGVlZCwKKwkJCQkJCTQsIGlzaWdodF9wYWNrZXQsIGlzaWdodCk7CisJaWYgKElTX0VSUihpc2lnaHQtPmNvbnRleHQpKSB7CisJCWVyciA9IFBUUl9FUlIoaXNpZ2h0LT5jb250ZXh0KTsKKwkJaXNpZ2h0LT5jb250ZXh0ID0gTlVMTDsKKwkJZ290byBlcnJfcmVzb3VyY2VzOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBRVUVVRV9MRU5HVEg7ICsraSkgeworCQllcnIgPSBmd19pc29fY29udGV4dF9xdWV1ZShpc2lnaHQtPmNvbnRleHQsICZhdWRpb19wYWNrZXQsCisJCQkJCSAgICZpc2lnaHQtPmJ1ZmZlci5pc29fYnVmZmVyLAorCQkJCQkgICBpc2lnaHQtPmJ1ZmZlci5wYWNrZXRzW2ldLm9mZnNldCk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnJfY29udGV4dDsKKwl9CisKKwlpc2lnaHQtPmZpcnN0X3BhY2tldCA9IHRydWU7CisJaXNpZ2h0LT5wYWNrZXRfaW5kZXggPSAwOworCisJZXJyID0gZndfaXNvX2NvbnRleHRfc3RhcnQoaXNpZ2h0LT5jb250ZXh0LCAtMSwgMCwKKwkJCQkgICBGV19JU09fQ09OVEVYVF9NQVRDSF9BTExfVEFHUy8qPyovKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfY29udGV4dDsKKworCXJldHVybiAwOworCitlcnJfY29udGV4dDoKKwlmd19pc29fY29udGV4dF9kZXN0cm95KGlzaWdodC0+Y29udGV4dCk7CisJaXNpZ2h0LT5jb250ZXh0ID0gTlVMTDsKK2Vycl9yZXNvdXJjZXM6CisJZndfaXNvX3Jlc291cmNlc19mcmVlKCZpc2lnaHQtPnJlc291cmNlcyk7CisJcmVnX3dyaXRlKGlzaWdodCwgUkVHX0FVRElPX0VOQUJMRSwgMCk7CitlcnJvcjoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGlzaWdodF9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBpc2lnaHQgKmlzaWdodCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCWludCBlcnI7CisKKwlpc2lnaHQtPmJ1ZmZlcl9wb2ludGVyID0gMDsKKwlpc2lnaHQtPnBlcmlvZF9jb3VudGVyID0gMDsKKworCW11dGV4X2xvY2soJmlzaWdodC0+bXV0ZXgpOworCWVyciA9IGlzaWdodF9zdGFydF9zdHJlYW1pbmcoaXNpZ2h0KTsKKwltdXRleF91bmxvY2soJmlzaWdodC0+bXV0ZXgpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBpc2lnaHRfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgaXNpZ2h0ICppc2lnaHQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwkJQUNDRVNTX09OQ0UoaXNpZ2h0LT5wY21fcnVubmluZykgPSB0cnVlOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJCUFDQ0VTU19PTkNFKGlzaWdodC0+cGNtX3J1bm5pbmcpID0gZmFsc2U7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNuZF9wY21fdWZyYW1lc190IGlzaWdodF9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBpc2lnaHQgKmlzaWdodCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIEFDQ0VTU19PTkNFKGlzaWdodC0+YnVmZmVyX3BvaW50ZXIpOworfQorCitzdGF0aWMgaW50IGlzaWdodF9jcmVhdGVfcGNtKHN0cnVjdCBpc2lnaHQgKmlzaWdodCkKK3sKKwlzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIG9wcyA9IHsKKwkJLm9wZW4gICAgICA9IGlzaWdodF9vcGVuLAorCQkuY2xvc2UgICAgID0gaXNpZ2h0X2Nsb3NlLAorCQkuaW9jdGwgICAgID0gc25kX3BjbV9saWJfaW9jdGwsCisJCS5od19wYXJhbXMgPSBpc2lnaHRfaHdfcGFyYW1zLAorCQkuaHdfZnJlZSAgID0gaXNpZ2h0X2h3X2ZyZWUsCisJCS5wcmVwYXJlICAgPSBpc2lnaHRfcHJlcGFyZSwKKwkJLnRyaWdnZXIgICA9IGlzaWdodF90cmlnZ2VyLAorCQkucG9pbnRlciAgID0gaXNpZ2h0X3BvaW50ZXIsCisJCS5wYWdlICAgICAgPSBzbmRfcGNtX2xpYl9nZXRfdm1hbGxvY19wYWdlLAorCQkubW1hcCAgICAgID0gc25kX3BjbV9saWJfbW1hcF92bWFsbG9jLAorCX07CisJc3RydWN0IHNuZF9wY20gKnBjbTsKKwlpbnQgZXJyOworCisJZXJyID0gc25kX3BjbV9uZXcoaXNpZ2h0LT5jYXJkLCAiaVNpZ2h0IiwgMCwgMCwgMSwgJnBjbSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJcGNtLT5wcml2YXRlX2RhdGEgPSBpc2lnaHQ7CisJc3RyY3B5KHBjbS0+bmFtZSwgImlTaWdodCIpOworCWlzaWdodC0+cGNtID0gcGNtLT5zdHJlYW1zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0uc3Vic3RyZWFtOworCWlzaWdodC0+cGNtLT5vcHMgPSAmb3BzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXNpZ2h0X2dhaW5faW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCisJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICppbmZvKQoreworCXN0cnVjdCBpc2lnaHQgKmlzaWdodCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCisJaW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKKwlpbmZvLT5jb3VudCA9IDE7CisJaW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSBpc2lnaHQtPmdhaW5fbWluOworCWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gaXNpZ2h0LT5nYWluX21heDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlzaWdodF9nYWluX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCisJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK3sKKwlzdHJ1Y3QgaXNpZ2h0ICppc2lnaHQgPSBjdGwtPnByaXZhdGVfZGF0YTsKKwlfX2JlMzIgZ2FpbjsKKwlpbnQgZXJyOworCisJZXJyID0gcmVnX3JlYWQoaXNpZ2h0LCBSRUdfR0FJTiwgJmdhaW4pOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSAoczMyKWJlMzJfdG9fY3B1KGdhaW4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXNpZ2h0X2dhaW5fcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQoreworCXN0cnVjdCBpc2lnaHQgKmlzaWdodCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCisJaWYgKHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdIDwgaXNpZ2h0LT5nYWluX21pbiB8fAorCSAgICB2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA+IGlzaWdodC0+Z2Fpbl9tYXgpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHJlZ193cml0ZShpc2lnaHQsIFJFR19HQUlOLAorCQkJIGNwdV90b19iZTMyKHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKSk7Cit9CisKK3N0YXRpYyBpbnQgaXNpZ2h0X211dGVfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQoreworCXN0cnVjdCBpc2lnaHQgKmlzaWdodCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCV9fYmUzMiBtdXRlOworCWludCBlcnI7CisKKwllcnIgPSByZWdfcmVhZChpc2lnaHQsIFJFR19NVVRFLCAmbXV0ZSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwl2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9ICFtdXRlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXNpZ2h0X211dGVfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQoreworCXN0cnVjdCBpc2lnaHQgKmlzaWdodCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIHJlZ193cml0ZShpc2lnaHQsIFJFR19NVVRFLAorCQkJIChfX2ZvcmNlIF9fYmUzMikhdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pOworfQorCitzdGF0aWMgaW50IGlzaWdodF9jcmVhdGVfbWl4ZXIoc3RydWN0IGlzaWdodCAqaXNpZ2h0KQoreworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBnYWluX2NvbnRyb2wgPSB7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJNaWMgQ2FwdHVyZSBWb2x1bWUiLAorCQkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSB8CisJCQkgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfUkVBRCwKKwkJLmluZm8gPSBpc2lnaHRfZ2Fpbl9pbmZvLAorCQkuZ2V0ID0gaXNpZ2h0X2dhaW5fZ2V0LAorCQkucHV0ID0gaXNpZ2h0X2dhaW5fcHV0LAorCX07CisJc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IG11dGVfY29udHJvbCA9IHsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIk1pYyBDYXB0dXJlIFN3aXRjaCIsCisJCS5pbmZvID0gc25kX2N0bF9ib29sZWFuX21vbm9faW5mbywKKwkJLmdldCA9IGlzaWdodF9tdXRlX2dldCwKKwkJLnB1dCA9IGlzaWdodF9tdXRlX3B1dCwKKwl9OworCV9fYmUzMiB2YWx1ZTsKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGw7CisJaW50IGVycjsKKworCWVyciA9IHJlZ19yZWFkKGlzaWdodCwgUkVHX0dBSU5fUkFXX1NUQVJULCAmdmFsdWUpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWlzaWdodC0+Z2Fpbl9taW4gPSBiZTMyX3RvX2NwdSh2YWx1ZSk7CisKKwllcnIgPSByZWdfcmVhZChpc2lnaHQsIFJFR19HQUlOX1JBV19FTkQsICZ2YWx1ZSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJaXNpZ2h0LT5nYWluX21heCA9IGJlMzJfdG9fY3B1KHZhbHVlKTsKKworCWlzaWdodC0+Z2Fpbl90bHZbMF0gPSBTTkRSVl9DVExfVExWVF9EQl9NSU5NQVg7CisJaXNpZ2h0LT5nYWluX3RsdlsxXSA9IDIgKiBzaXplb2YodW5zaWduZWQgaW50KTsKKworCWVyciA9IHJlZ19yZWFkKGlzaWdodCwgUkVHX0dBSU5fREJfU1RBUlQsICZ2YWx1ZSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJaXNpZ2h0LT5nYWluX3RsdlsyXSA9IChzMzIpYmUzMl90b19jcHUodmFsdWUpICogMTAwOworCisJZXJyID0gcmVnX3JlYWQoaXNpZ2h0LCBSRUdfR0FJTl9EQl9FTkQsICZ2YWx1ZSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJaXNpZ2h0LT5nYWluX3RsdlszXSA9IChzMzIpYmUzMl90b19jcHUodmFsdWUpICogMTAwOworCisJY3RsID0gc25kX2N0bF9uZXcxKCZnYWluX2NvbnRyb2wsIGlzaWdodCk7CisJaWYgKGN0bCkKKwkJY3RsLT50bHYucCA9IGlzaWdodC0+Z2Fpbl90bHY7CisJZXJyID0gc25kX2N0bF9hZGQoaXNpZ2h0LT5jYXJkLCBjdGwpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gc25kX2N0bF9hZGQoaXNpZ2h0LT5jYXJkLCBzbmRfY3RsX25ldzEoJm11dGVfY29udHJvbCwgaXNpZ2h0KSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaXNpZ2h0X2NhcmRfZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IGlzaWdodCAqaXNpZ2h0ID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCisJZndfaXNvX3Jlc291cmNlc19kZXN0cm95KCZpc2lnaHQtPnJlc291cmNlcyk7CisJZndfdW5pdF9wdXQoaXNpZ2h0LT51bml0KTsKKwlmd19kZXZpY2VfcHV0KGlzaWdodC0+ZGV2aWNlKTsKKwltdXRleF9kZXN0cm95KCZpc2lnaHQtPm11dGV4KTsKK30KKworc3RhdGljIHU2NCBnZXRfdW5pdF9iYXNlKHN0cnVjdCBmd191bml0ICp1bml0KQoreworCXN0cnVjdCBmd19jc3JfaXRlcmF0b3IgaTsKKwlpbnQga2V5LCB2YWx1ZTsKKworCWZ3X2Nzcl9pdGVyYXRvcl9pbml0KCZpLCB1bml0LT5kaXJlY3RvcnkpOworCXdoaWxlIChmd19jc3JfaXRlcmF0b3JfbmV4dCgmaSwgJmtleSwgJnZhbHVlKSkKKwkJaWYgKGtleSA9PSBDU1JfT0ZGU0VUKQorCQkJcmV0dXJuIENTUl9SRUdJU1RFUl9CQVNFICsgdmFsdWUgKiA0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlzaWdodF9wcm9iZShzdHJ1Y3QgZGV2aWNlICp1bml0X2RldikKK3sKKwlzdHJ1Y3QgZndfdW5pdCAqdW5pdCA9IGZ3X3VuaXQodW5pdF9kZXYpOworCXN0cnVjdCBmd19kZXZpY2UgKmZ3X2RldiA9IGZ3X3BhcmVudF9kZXZpY2UodW5pdCk7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCXN0cnVjdCBpc2lnaHQgKmlzaWdodDsKKwlpbnQgZXJyOworCisJZXJyID0gc25kX2NhcmRfY3JlYXRlKC0xLCBOVUxMLCBUSElTX01PRFVMRSwgc2l6ZW9mKCppc2lnaHQpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJc25kX2NhcmRfc2V0X2RldihjYXJkLCB1bml0X2Rldik7CisKKwlpc2lnaHQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJaXNpZ2h0LT5jYXJkID0gY2FyZDsKKwltdXRleF9pbml0KCZpc2lnaHQtPm11dGV4KTsKKwlpc2lnaHQtPnVuaXQgPSBmd191bml0X2dldCh1bml0KTsKKwlpc2lnaHQtPmRldmljZSA9IGZ3X2RldmljZV9nZXQoZndfZGV2KTsKKwlpc2lnaHQtPmF1ZGlvX2Jhc2UgPSBnZXRfdW5pdF9iYXNlKHVuaXQpOworCWlmICghaXNpZ2h0LT5hdWRpb19iYXNlKSB7CisJCWRldl9lcnIoJnVuaXQtPmRldmljZSwgImF1ZGlvIHVuaXQgYmFzZSBub3QgZm91bmRcbiIpOworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gZXJyX3VuaXQ7CisJfQorCWZ3X2lzb19yZXNvdXJjZXNfaW5pdCgmaXNpZ2h0LT5yZXNvdXJjZXMsIHVuaXQpOworCisJY2FyZC0+cHJpdmF0ZV9mcmVlID0gaXNpZ2h0X2NhcmRfZnJlZTsKKworCXN0cmNweShjYXJkLT5kcml2ZXIsICJpU2lnaHQiKTsKKwlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiQXBwbGUgaVNpZ2h0Iik7CisJc25wcmludGYoY2FyZC0+bG9uZ25hbWUsIHNpemVvZihjYXJkLT5sb25nbmFtZSksCisJCSAiQXBwbGUgaVNpZ2h0IChHVUlEICUwOHglMDh4KSBhdCAlcywgUyVkIiwKKwkJIGZ3X2Rldi0+Y29uZmlnX3JvbVszXSwgZndfZGV2LT5jb25maWdfcm9tWzRdLAorCQkgZGV2X25hbWUoJnVuaXQtPmRldmljZSksIDEwMCA8PCBmd19kZXYtPm1heF9zcGVlZCk7CisJc3RyY3B5KGNhcmQtPm1peGVybmFtZSwgImlTaWdodCIpOworCisJZXJyID0gaXNpZ2h0X2NyZWF0ZV9wY20oaXNpZ2h0KTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJvcjsKKworCWVyciA9IGlzaWdodF9jcmVhdGVfbWl4ZXIoaXNpZ2h0KTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJvcjsKKworCWVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycm9yOworCisJZGV2X3NldF9kcnZkYXRhKHVuaXRfZGV2LCBpc2lnaHQpOworCisJcmV0dXJuIDA7CisKK2Vycl91bml0OgorCWZ3X3VuaXRfcHV0KGlzaWdodC0+dW5pdCk7CisJZndfZGV2aWNlX3B1dChpc2lnaHQtPmRldmljZSk7CisJbXV0ZXhfZGVzdHJveSgmaXNpZ2h0LT5tdXRleCk7CitlcnJvcjoKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgaXNpZ2h0X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGlzaWdodCAqaXNpZ2h0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpc2lnaHRfcGNtX2Fib3J0KGlzaWdodCk7CisKKwlzbmRfY2FyZF9kaXNjb25uZWN0KGlzaWdodC0+Y2FyZCk7CisKKwltdXRleF9sb2NrKCZpc2lnaHQtPm11dGV4KTsKKwlpc2lnaHRfc3RvcF9zdHJlYW1pbmcoaXNpZ2h0KTsKKwltdXRleF91bmxvY2soJmlzaWdodC0+bXV0ZXgpOworCisJc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZChpc2lnaHQtPmNhcmQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGlzaWdodF9idXNfcmVzZXQoc3RydWN0IGZ3X3VuaXQgKnVuaXQpCit7CisJc3RydWN0IGlzaWdodCAqaXNpZ2h0ID0gZGV2X2dldF9kcnZkYXRhKCZ1bml0LT5kZXZpY2UpOworCisJaWYgKGZ3X2lzb19yZXNvdXJjZXNfdXBkYXRlKCZpc2lnaHQtPnJlc291cmNlcykgPCAwKSB7CisJCWlzaWdodF9wY21fYWJvcnQoaXNpZ2h0KTsKKworCQltdXRleF9sb2NrKCZpc2lnaHQtPm11dGV4KTsKKwkJaXNpZ2h0X3N0b3Bfc3RyZWFtaW5nKGlzaWdodCk7CisJCW11dGV4X3VubG9jaygmaXNpZ2h0LT5tdXRleCk7CisJfQorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWUxMzk0X2RldmljZV9pZCBpc2lnaHRfaWRfdGFibGVbXSA9IHsKKwl7CisJCS5tYXRjaF9mbGFncyAgPSBJRUVFMTM5NF9NQVRDSF9TUEVDSUZJRVJfSUQgfAorCQkJCUlFRUUxMzk0X01BVENIX1ZFUlNJT04sCisJCS5zcGVjaWZpZXJfaWQgPSBPVUlfQVBQTEUsCisJCS52ZXJzaW9uICAgICAgPSBTV19JU0lHSFRfQVVESU8sCisJfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGllZWUxMzk0LCBpc2lnaHRfaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IGZ3X2RyaXZlciBpc2lnaHRfZHJpdmVyID0geworCS5kcml2ZXIgICA9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gS0JVSUxEX01PRE5BTUUsCisJCS5idXMJPSAmZndfYnVzX3R5cGUsCisJCS5wcm9iZQk9IGlzaWdodF9wcm9iZSwKKwkJLnJlbW92ZQk9IGlzaWdodF9yZW1vdmUsCisJfSwKKwkudXBkYXRlICAgPSBpc2lnaHRfYnVzX3Jlc2V0LAorCS5pZF90YWJsZSA9IGlzaWdodF9pZF90YWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFsc2FfaXNpZ2h0X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZpc2lnaHRfZHJpdmVyLmRyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2lzaWdodF9leGl0KHZvaWQpCit7CisJZHJpdmVyX3VucmVnaXN0ZXIoJmlzaWdodF9kcml2ZXIuZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYWxzYV9pc2lnaHRfaW5pdCk7Cittb2R1bGVfZXhpdChhbHNhX2lzaWdodF9leGl0KTsKZGlmZiAtLWdpdCBhL3NvdW5kL2ZpcmV3aXJlL2lzby1yZXNvdXJjZXMuYyBiL3NvdW5kL2ZpcmV3aXJlL2lzby1yZXNvdXJjZXMuYwppbmRleCA3NzVkYmQ1Li5mZmUyMGI4IDEwMDY0NAotLS0gYS9zb3VuZC9maXJld2lyZS9pc28tcmVzb3VyY2VzLmMKKysrIGIvc291bmQvZmlyZXdpcmUvaXNvLXJlc291cmNlcy5jCkBAIC0xMSw3ICsxMSw2IEBACiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlICJpc28tcmVzb3VyY2VzLmgiCiAKQEAgLTI1LDEwICsyNCw2IEBACiAgKi8KIGludCBmd19pc29fcmVzb3VyY2VzX2luaXQoc3RydWN0IGZ3X2lzb19yZXNvdXJjZXMgKnIsIHN0cnVjdCBmd191bml0ICp1bml0KQogewotCXItPmJ1ZmZlciA9IGttYWxsb2MoMiAqIDQsIEdGUF9LRVJORUwpOwotCWlmICghci0+YnVmZmVyKQotCQlyZXR1cm4gLUVOT01FTTsKLQogCXItPmNoYW5uZWxzX21hc2sgPSB+MHVMTDsKIAlyLT51bml0ID0gZndfdW5pdF9nZXQodW5pdCk7CiAJbXV0ZXhfaW5pdCgmci0+bXV0ZXgpOwpAQCAtMzYsNiArMzEsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKGZ3X2lzb19yZXNvdXJjZXNfaW5pdCk7CiAKIC8qKgogICogZndfaXNvX3Jlc291cmNlc19kZXN0cm95IC0gZGVzdHJveSBhIHJlc291cmNlIG1hbmFnZXIKQEAgLTQ0LDEwICs0MCwxMCBAQAogdm9pZCBmd19pc29fcmVzb3VyY2VzX2Rlc3Ryb3koc3RydWN0IGZ3X2lzb19yZXNvdXJjZXMgKnIpCiB7CiAJV0FSTl9PTihyLT5hbGxvY2F0ZWQpOwotCWtmcmVlKHItPmJ1ZmZlcik7CiAJbXV0ZXhfZGVzdHJveSgmci0+bXV0ZXgpOwogCWZ3X3VuaXRfcHV0KHItPnVuaXQpOwogfQorRVhQT1JUX1NZTUJPTChmd19pc29fcmVzb3VyY2VzX2Rlc3Ryb3kpOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IHBhY2tldF9iYW5kd2lkdGgodW5zaWduZWQgaW50IG1heF9wYXlsb2FkX2J5dGVzLCBpbnQgc3BlZWQpCiB7CkBAIC0xMzEsNyArMTI3LDcgQEAKIAogCWJhbmR3aWR0aCA9IHItPmJhbmR3aWR0aCArIHItPmJhbmR3aWR0aF9vdmVyaGVhZDsKIAlmd19pc29fcmVzb3VyY2VfbWFuYWdlKGNhcmQsIHItPmdlbmVyYXRpb24sIHItPmNoYW5uZWxzX21hc2ssCi0JCQkgICAgICAgJmNoYW5uZWwsICZiYW5kd2lkdGgsIHRydWUsIHItPmJ1ZmZlcik7CisJCQkgICAgICAgJmNoYW5uZWwsICZiYW5kd2lkdGgsIHRydWUpOwogCWlmIChjaGFubmVsID09IC1FQUdBSU4pIHsKIAkJbXV0ZXhfdW5sb2NrKCZyLT5tdXRleCk7CiAJCWdvdG8gcmV0cnlfYWZ0ZXJfYnVzX3Jlc2V0OwpAQCAtMTUyLDYgKzE0OCw3IEBACiAKIAlyZXR1cm4gY2hhbm5lbDsKIH0KK0VYUE9SVF9TWU1CT0woZndfaXNvX3Jlc291cmNlc19hbGxvY2F0ZSk7CiAKIC8qKgogICogZndfaXNvX3Jlc291cmNlc191cGRhdGUgLSB1cGRhdGUgcmVzb3VyY2UgYWxsb2NhdGlvbnMgYWZ0ZXIgYSBidXMgcmVzZXQKQEAgLTE4NCw3ICsxODEsNyBAQAogCWJhbmR3aWR0aCA9IHItPmJhbmR3aWR0aCArIHItPmJhbmR3aWR0aF9vdmVyaGVhZDsKIAogCWZ3X2lzb19yZXNvdXJjZV9tYW5hZ2UoY2FyZCwgci0+Z2VuZXJhdGlvbiwgMXVMTCA8PCByLT5jaGFubmVsLAotCQkJICAgICAgICZjaGFubmVsLCAmYmFuZHdpZHRoLCB0cnVlLCByLT5idWZmZXIpOworCQkJICAgICAgICZjaGFubmVsLCAmYmFuZHdpZHRoLCB0cnVlKTsKIAkvKgogCSAqIFdoZW4gYW5vdGhlciBidXMgcmVzZXQgaGFwcGVucywgcHJldGVuZCB0aGF0IHRoZSBhbGxvY2F0aW9uCiAJICogc3VjY2VlZGVkOyB3ZSB3aWxsIHRyeSBhZ2FpbiBmb3IgdGhlIG5ldyBnZW5lcmF0aW9uIGxhdGVyLgpAQCAtMjAzLDYgKzIwMCw3IEBACiAKIAlyZXR1cm4gY2hhbm5lbDsKIH0KK0VYUE9SVF9TWU1CT0woZndfaXNvX3Jlc291cmNlc191cGRhdGUpOwogCiAvKioKICAqIGZ3X2lzb19yZXNvdXJjZXNfZnJlZSAtIGZyZWVzIGFsbG9jYXRlZCByZXNvdXJjZXMKQEAgLTIyMCw3ICsyMTgsNyBAQAogCWlmIChyLT5hbGxvY2F0ZWQpIHsKIAkJYmFuZHdpZHRoID0gci0+YmFuZHdpZHRoICsgci0+YmFuZHdpZHRoX292ZXJoZWFkOwogCQlmd19pc29fcmVzb3VyY2VfbWFuYWdlKGNhcmQsIHItPmdlbmVyYXRpb24sIDF1TEwgPDwgci0+Y2hhbm5lbCwKLQkJCQkgICAgICAgJmNoYW5uZWwsICZiYW5kd2lkdGgsIGZhbHNlLCByLT5idWZmZXIpOworCQkJCSAgICAgICAmY2hhbm5lbCwgJmJhbmR3aWR0aCwgZmFsc2UpOwogCQlpZiAoY2hhbm5lbCA8IDApCiAJCQlkZXZfZXJyKCZyLT51bml0LT5kZXZpY2UsCiAJCQkJImlzb2Nocm9ub3VzIHJlc291cmNlIGRlYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwpAQCAtMjMwLDMgKzIyOCw0IEBACiAKIAltdXRleF91bmxvY2soJnItPm11dGV4KTsKIH0KK0VYUE9SVF9TWU1CT0woZndfaXNvX3Jlc291cmNlc19mcmVlKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2ZpcmV3aXJlL2lzby1yZXNvdXJjZXMuaCBiL3NvdW5kL2ZpcmV3aXJlL2lzby1yZXNvdXJjZXMuaAppbmRleCAzZjA3MzBlNC4uNWE5YWY3YyAxMDA2NDQKLS0tIGEvc291bmQvZmlyZXdpcmUvaXNvLXJlc291cmNlcy5oCisrKyBiL3NvdW5kL2ZpcmV3aXJlL2lzby1yZXNvdXJjZXMuaApAQCAtMjQsNyArMjQsNiBAQAogCXVuc2lnbmVkIGludCBiYW5kd2lkdGhfb3ZlcmhlYWQ7CiAJaW50IGdlbmVyYXRpb247IC8qIGluIHdoaWNoIGFsbG9jYXRpb24gaXMgdmFsaWQgKi8KIAlib29sIGFsbG9jYXRlZDsKLQlfX2JlMzIgKmJ1ZmZlcjsKIH07CiAKIGludCBmd19pc29fcmVzb3VyY2VzX2luaXQoc3RydWN0IGZ3X2lzb19yZXNvdXJjZXMgKnIsCmRpZmYgLS1naXQgYS9zb3VuZC9maXJld2lyZS9wYWNrZXRzLWJ1ZmZlci5jIGIvc291bmQvZmlyZXdpcmUvcGFja2V0cy1idWZmZXIuYwppbmRleCAxZTIwZTYwLi4zYzYxY2EyIDEwMDY0NAotLS0gYS9zb3VuZC9maXJld2lyZS9wYWNrZXRzLWJ1ZmZlci5jCisrKyBiL3NvdW5kL2ZpcmV3aXJlL3BhY2tldHMtYnVmZmVyLmMKQEAgLTYwLDYgKzYwLDcgQEAKIGVycm9yOgogCXJldHVybiBlcnI7CiB9CitFWFBPUlRfU1lNQk9MKGlzb19wYWNrZXRzX2J1ZmZlcl9pbml0KTsKIAogLyoqCiAgKiBpc29fcGFja2V0c19idWZmZXJfZGVzdHJveSAtIGZyZWVzIHBhY2tldCBidWZmZXIgcmVzb3VyY2VzCkBAIC03MiwzICs3Myw0IEBACiAJZndfaXNvX2J1ZmZlcl9kZXN0cm95KCZiLT5pc29fYnVmZmVyLCBmd19wYXJlbnRfZGV2aWNlKHVuaXQpLT5jYXJkKTsKIAlrZnJlZShiLT5wYWNrZXRzKTsKIH0KK0VYUE9SVF9TWU1CT0woaXNvX3BhY2tldHNfYnVmZmVyX2Rlc3Ryb3kpOwpkaWZmIC0tZ2l0IGEvc291bmQvaTJjL290aGVyL01ha2VmaWxlIGIvc291bmQvaTJjL290aGVyL01ha2VmaWxlCmluZGV4IDJkYWQ0MGYuLmM5NWQ4ZjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2kyYy9vdGhlci9NYWtlZmlsZQorKysgYi9zb3VuZC9pMmMvb3RoZXIvTWFrZWZpbGUKQEAgLTE0LDQgKzE0LDQgQEAKIG9iai0kKENPTkZJR19TTkRfUERBVURJT0NGKSArPSBzbmQtYWs0MTE3Lm8KIG9iai0kKENPTkZJR19TTkRfSUNFMTcxMikgKz0gc25kLWFrNHh4eC1hZGRhLm8KIG9iai0kKENPTkZJR19TTkRfSUNFMTcyNCkgKz0gc25kLWFrNDExNC5vIHNuZC1hazQxMTMubyBzbmQtYWs0eHh4LWFkZGEubyBzbmQtcHQyMjU4Lm8KLW9iai0kKENPTkZJR19TTkRfRk04MDFfVEVBNTc1WCkgKz0gc25kLXRlYTU3NXgtdHVuZXIubworb2JqLSQoQ09ORklHX1NORF9URUE1NzVYKSArPSBzbmQtdGVhNTc1eC10dW5lci5vCmRpZmYgLS1naXQgYS9zb3VuZC9pMmMvb3RoZXIvdGVhNTc1eC10dW5lci5jIGIvc291bmQvaTJjL290aGVyL3RlYTU3NXgtdHVuZXIuYwppbmRleCBlZTUzOGYxLi40ODMxODAwIDEwMDY0NAotLS0gYS9zb3VuZC9pMmMvb3RoZXIvdGVhNTc1eC10dW5lci5jCisrKyBiL3NvdW5kL2kyYy9vdGhlci90ZWE1NzV4LXR1bmVyLmMKQEAgLTM3LDggKzM3LDggQEAKIG1vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKIAogI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsIDAsIDIpCi0jZGVmaW5lIEZSRVFfTE8JCSAoODcgKiAxNjAwMCkKLSNkZWZpbmUgRlJFUV9ISQkJKDEwOCAqIDE2MDAwKQorI2RlZmluZSBGUkVRX0xPCQkgKDUwVUwgKiAxNjAwMCkKKyNkZWZpbmUgRlJFUV9ISQkJKDE1MFVMICogMTYwMDApCiAKIC8qCiAgKiBkZWZpbml0aW9ucwpAQCAtNzcsMjcgKzc3LDk1IEBACiAgKiBsb3dsZXZlbCBwYXJ0CiAgKi8KIAorc3RhdGljIHZvaWQgc25kX3RlYTU3NXhfd3JpdGUoc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEsIHVuc2lnbmVkIGludCB2YWwpCit7CisJdTE2IGw7CisJdTggZGF0YTsKKworCXRlYS0+b3BzLT5zZXRfZGlyZWN0aW9uKHRlYSwgMSk7CisJdWRlbGF5KDE2KTsKKworCWZvciAobCA9IDI1OyBsID4gMDsgbC0tKSB7CisJCWRhdGEgPSAodmFsID4+IDI0KSAmIFRFQTU3NVhfREFUQTsKKwkJdmFsIDw8PSAxOwkJCS8qIHNoaWZ0IGRhdGEgKi8KKwkJdGVhLT5vcHMtPnNldF9waW5zKHRlYSwgZGF0YSB8IFRFQTU3NVhfV1JFTik7CisJCXVkZWxheSgyKTsKKwkJdGVhLT5vcHMtPnNldF9waW5zKHRlYSwgZGF0YSB8IFRFQTU3NVhfV1JFTiB8IFRFQTU3NVhfQ0xLKTsKKwkJdWRlbGF5KDIpOworCQl0ZWEtPm9wcy0+c2V0X3BpbnModGVhLCBkYXRhIHwgVEVBNTc1WF9XUkVOKTsKKwkJdWRlbGF5KDIpOworCX0KKworCWlmICghdGVhLT5tdXRlKQorCQl0ZWEtPm9wcy0+c2V0X3BpbnModGVhLCAwKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBzbmRfdGVhNTc1eF9yZWFkKHN0cnVjdCBzbmRfdGVhNTc1eCAqdGVhKQoreworCXUxNiBsLCByZGF0YTsKKwl1MzIgZGF0YSA9IDA7CisKKwl0ZWEtPm9wcy0+c2V0X2RpcmVjdGlvbih0ZWEsIDApOworCXRlYS0+b3BzLT5zZXRfcGlucyh0ZWEsIDApOworCXVkZWxheSgxNik7CisKKwlmb3IgKGwgPSAyNDsgbC0tOykgeworCQl0ZWEtPm9wcy0+c2V0X3BpbnModGVhLCBURUE1NzVYX0NMSyk7CisJCXVkZWxheSgyKTsKKwkJaWYgKCFsKQorCQkJdGVhLT50dW5lZCA9IHRlYS0+b3BzLT5nZXRfcGlucyh0ZWEpICYgVEVBNTc1WF9NT1NUID8gMCA6IDE7CisJCXRlYS0+b3BzLT5zZXRfcGlucyh0ZWEsIDApOworCQl1ZGVsYXkoMik7CisJCWRhdGEgPDw9IDE7CQkJLyogc2hpZnQgZGF0YSAqLworCQlyZGF0YSA9IHRlYS0+b3BzLT5nZXRfcGlucyh0ZWEpOworCQlpZiAoIWwpCisJCQl0ZWEtPnN0ZXJlbyA9IChyZGF0YSAmIFRFQTU3NVhfTU9TVCkgPyAgMCA6IDE7CisJCWlmIChyZGF0YSAmIFRFQTU3NVhfREFUQSkKKwkJCWRhdGErKzsKKwkJdWRlbGF5KDIpOworCX0KKworCWlmICh0ZWEtPm11dGUpCisJCXRlYS0+b3BzLT5zZXRfcGlucyh0ZWEsIFRFQTU3NVhfV1JFTik7CisKKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIHZvaWQgc25kX3RlYTU3NXhfZ2V0X2ZyZXEoc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEpCit7CisJdW5zaWduZWQgbG9uZyBmcmVxOworCisJZnJlcSA9IHNuZF90ZWE1NzV4X3JlYWQodGVhKSAmIFRFQTU3NVhfQklUX0ZSRVFfTUFTSzsKKwkvKiBmcmVxICo9IDEyLjUgKi8KKwlmcmVxICo9IDEyNTsKKwlmcmVxIC89IDEwOworCS8qIGNyeXN0YWwgZml4dXAgKi8KKwlpZiAodGVhLT50ZWE1NzU5KQorCQlmcmVxICs9IFRFQTU3NVhfRk1JRjsKKwllbHNlCisJCWZyZXEgLT0gVEVBNTc1WF9GTUlGOworCisJdGVhLT5mcmVxID0gZnJlcSAqIDE2OwkJLyogZnJvbSBrSHogKi8KK30KKwogc3RhdGljIHZvaWQgc25kX3RlYTU3NXhfc2V0X2ZyZXEoc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEpCiB7CiAJdW5zaWduZWQgbG9uZyBmcmVxOwogCi0JZnJlcSA9IHRlYS0+ZnJlcSAvIDE2OwkJLyogdG8ga0h6ICovCi0JaWYgKGZyZXEgPiAxMDgwMDApCi0JCWZyZXEgPSAxMDgwMDA7Ci0JaWYgKGZyZXEgPCA4NzAwMCkKLQkJZnJlcSA9IDg3MDAwOworCWZyZXEgPSBjbGFtcCh0ZWEtPmZyZXEsIEZSRVFfTE8sIEZSRVFfSEkpOworCWZyZXEgLz0gMTY7CQkvKiB0byBrSHogKi8KIAkvKiBjcnlzdGFsIGZpeHVwICovCiAJaWYgKHRlYS0+dGVhNTc1OSkKLQkJZnJlcSAtPSB0ZWEtPmZyZXFfZml4dXA7CisJCWZyZXEgLT0gVEVBNTc1WF9GTUlGOwogCWVsc2UKLQkJZnJlcSArPSB0ZWEtPmZyZXFfZml4dXA7CisJCWZyZXEgKz0gVEVBNTc1WF9GTUlGOwogCS8qIGZyZXEgLz0gMTIuNSAqLwogCWZyZXEgKj0gMTA7CiAJZnJlcSAvPSAxMjU7CiAKIAl0ZWEtPnZhbCAmPSB+VEVBNTc1WF9CSVRfRlJFUV9NQVNLOwogCXRlYS0+dmFsIHw9IGZyZXEgJiBURUE1NzVYX0JJVF9GUkVRX01BU0s7Ci0JdGVhLT5vcHMtPndyaXRlKHRlYSwgdGVhLT52YWwpOworCXNuZF90ZWE1NzV4X3dyaXRlKHRlYSwgdGVhLT52YWwpOwogfQogCiAvKgpAQCAtMTA5LDI5ICsxNzcsMzQgQEAKIHsKIAlzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKLQlzdHJjcHkodi0+Y2FyZCwgdGVhLT50ZWE1NzU5ID8gIlRFQTU3NTkiIDogIlRFQTU3NTciKTsKIAlzdHJsY3B5KHYtPmRyaXZlciwgInRlYTU3NXgtdHVuZXIiLCBzaXplb2Yodi0+ZHJpdmVyKSk7Ci0Jc3RybGNweSh2LT5jYXJkLCAiTWFlc3RybyBSYWRpbyIsIHNpemVvZih2LT5jYXJkKSk7Ci0Jc3ByaW50Zih2LT5idXNfaW5mbywgIlBDSSIpOworCXN0cmxjcHkodi0+Y2FyZCwgdGVhLT5jYXJkLCBzaXplb2Yodi0+Y2FyZCkpOworCXN0cmxjYXQodi0+Y2FyZCwgdGVhLT50ZWE1NzU5ID8gIiBURUE1NzU5IiA6ICIgVEVBNTc1NyIsIHNpemVvZih2LT5jYXJkKSk7CisJc3RybGNweSh2LT5idXNfaW5mbywgdGVhLT5idXNfaW5mbywgc2l6ZW9mKHYtPmJ1c19pbmZvKSk7CiAJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047Ci0Jdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CisJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7CisJc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCiAJaWYgKHYtPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlzbmRfdGVhNTc1eF9yZWFkKHRlYSk7CisKIAlzdHJjcHkodi0+bmFtZSwgIkZNIik7CiAJdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CisJdi0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX0xPVyB8IFY0TDJfVFVORVJfQ0FQX1NURVJFTzsKIAl2LT5yYW5nZWxvdyA9IEZSRVFfTE87CiAJdi0+cmFuZ2VoaWdoID0gRlJFUV9ISTsKLQl2LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OT3xWNEwyX1RVTkVSX1NVQl9TVEVSRU87Ci0Jdi0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX0xPVzsKLQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87Ci0Jdi0+c2lnbmFsID0gMHhmZmZmOworCXYtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05PIHwgVjRMMl9UVU5FUl9TVUJfU1RFUkVPOworCXYtPmF1ZG1vZGUgPSB0ZWEtPnN0ZXJlbyA/IFY0TDJfVFVORVJfTU9ERV9TVEVSRU8gOiBWNEwyX1RVTkVSX01PREVfTU9OTzsKKwl2LT5zaWduYWwgPSB0ZWEtPnR1bmVkID8gMHhmZmZmIDogMDsKKwogCXJldHVybiAwOwogfQogCkBAIC0xNDgsNyArMjIxLDEwIEBACiB7CiAJc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCisJaWYgKGYtPnR1bmVyICE9IDApCisJCXJldHVybiAtRUlOVkFMOwogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCXNuZF90ZWE1NzV4X2dldF9mcmVxKHRlYSk7CiAJZi0+ZnJlcXVlbmN5ID0gdGVhLT5mcmVxOwogCXJldHVybiAwOwogfQpAQCAtMTU4LDYgKzIzNCw5IEBACiB7CiAJc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCisJaWYgKGYtPnR1bmVyICE9IDAgfHwgZi0+dHlwZSAhPSBWNEwyX1RVTkVSX1JBRElPKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmIChmLT5mcmVxdWVuY3kgPCBGUkVRX0xPIHx8IGYtPmZyZXF1ZW5jeSA+IEZSRVFfSEkpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0yMDksMTAgKzI4OCw4IEBACiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQlpZiAodGVhLT5vcHMtPm11dGUpIHsKLQkJCWN0cmwtPnZhbHVlID0gdGVhLT5tdXRlOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwkJY3RybC0+dmFsdWUgPSB0ZWEtPm11dGU7CisJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTIyNCwxMSArMzAxLDExIEBACiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQlpZiAodGVhLT5vcHMtPm11dGUpIHsKLQkJCXRlYS0+b3BzLT5tdXRlKHRlYSwgY3RybC0+dmFsdWUpOworCQlpZiAodGVhLT5tdXRlICE9IGN0cmwtPnZhbHVlKSB7CiAJCQl0ZWEtPm11dGUgPSBjdHJsLT52YWx1ZTsKLQkJCXJldHVybiAwOworCQkJc25kX3RlYTU3NXhfc2V0X2ZyZXEodGVhKTsKIAkJfQorCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yOTMsMTggKzM3MCwxNiBAQAogLyoKICAqIGluaXRpYWxpemUgYWxsIHRoZSB0ZWE1NzV4IGNoaXBzCiAgKi8KLXZvaWQgc25kX3RlYTU3NXhfaW5pdChzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSkKK2ludCBzbmRfdGVhNTc1eF9pbml0KHN0cnVjdCBzbmRfdGVhNTc1eCAqdGVhKQogewogCWludCByZXR2YWw7Ci0JdW5zaWduZWQgaW50IHZhbDsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp0ZWE1NzV4X3JhZGlvX2luc3Q7CiAKLQl2YWwgPSB0ZWEtPm9wcy0+cmVhZCh0ZWEpOwotCWlmICh2YWwgPT0gMHgxZmZmZmZmIHx8IHZhbCA9PSAwKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIKLQkJCSAgICJ0ZWE1NzV4LXR1bmVyOiBDYW5ub3QgZmluZCBURUE1NzV4IGNoaXBcbiIpOwotCQlyZXR1cm47Ci0JfQorCXRlYS0+bXV0ZSA9IDE7CisKKwlzbmRfdGVhNTc1eF93cml0ZSh0ZWEsIDB4NTVBQSk7CisJaWYgKHNuZF90ZWE1NzV4X3JlYWQodGVhKSAhPSAweDU1QUEpCisJCXJldHVybiAtRU5PREVWOwogCiAJdGVhLT5pbl91c2UgPSAwOwogCXRlYS0+dmFsID0gVEVBNTc1WF9CSVRfQkFORF9GTSB8IFRFQTU3NVhfQklUX1NFQVJDSF8xMF80MDsKQEAgLTMxMyw3ICszODgsNyBAQAogCXRlYTU3NXhfcmFkaW9faW5zdCA9IHZpZGVvX2RldmljZV9hbGxvYygpOwogCWlmICh0ZWE1NzV4X3JhZGlvX2luc3QgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgInRlYTU3NXgtdHVuZXI6IG5vdCBlbm91Z2ggbWVtb3J5XG4iKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAltZW1jcHkodGVhNTc1eF9yYWRpb19pbnN0LCAmdGVhNTc1eF9yYWRpbywgc2l6ZW9mKHRlYTU3NXhfcmFkaW8pKTsKQEAgLTMyOCwxNyArNDAzLDEzIEBACiAJaWYgKHJldHZhbCkgewogCQlwcmludGsoS0VSTl9FUlIgInRlYTU3NXgtdHVuZXI6IGNhbid0IHJlZ2lzdGVyIHZpZGVvIGRldmljZSFcbiIpOwogCQlrZnJlZSh0ZWE1NzV4X3JhZGlvX2luc3QpOwotCQlyZXR1cm47CisJCXJldHVybiByZXR2YWw7CiAJfQogCiAJc25kX3RlYTU3NXhfc2V0X2ZyZXEodGVhKTsKLQotCS8qIG11dGUgb24gaW5pdCAqLwotCWlmICh0ZWEtPm9wcy0+bXV0ZSkgewotCQl0ZWEtPm9wcy0+bXV0ZSh0ZWEsIDEpOwotCQl0ZWEtPm11dGUgPSAxOwotCX0KIAl0ZWEtPnZkID0gdGVhNTc1eF9yYWRpb19pbnN0OworCisJcmV0dXJuIDA7CiB9CiAKIHZvaWQgc25kX3RlYTU3NXhfZXhpdChzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSkKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9LY29uZmlnIGIvc291bmQvb3NzL0tjb25maWcKaW5kZXggNzZjMDkwMi4uNmM5M2UwNSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL0tjb25maWcKKysrIGIvc291bmQvb3NzL0tjb25maWcKQEAgLTIyLDEwICsyMiw2IEBACiAJICA8ZmlsZTpEb2N1bWVudGF0aW9uL3NvdW5kL29zcy92d3NuZD4gZm9yIG1vcmUgaW5mbyBvbiB0aGlzIGRyaXZlcidzCiAJICBjYXBhYmlsaXRpZXMuCiAKLWNvbmZpZyBTT1VORF9BVTE1NTBfQUM5NwotCXRyaXN0YXRlICJBdTE1NTAvQXUxMjAwIEFDOTcgU291bmQiCi0JZGVwZW5kcyBvbiBTT0NfQVUxNTUwIHx8IFNPQ19BVTEyMDAKLQogY29uZmlnIFNPVU5EX01TTkRDTEFTCiAJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIFR1cnRsZSBCZWFjaCBNdWx0aVNvdW5kIENsYXNzaWMsIFRhaGl0aSwgTW9udGVyZXkiCiAJZGVwZW5kcyBvbiAobSB8fCAhU1RBTkRBTE9ORSkgJiYgSVNBCmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvTWFrZWZpbGUgYi9zb3VuZC9vc3MvTWFrZWZpbGUKaW5kZXggOTBmZmI5OS4uNzdmMjFiNiAxMDA2NDQKLS0tIGEvc291bmQvb3NzL01ha2VmaWxlCisrKyBiL3NvdW5kL29zcy9NYWtlZmlsZQpAQCAtMjUsNyArMjUsNiBAQAogb2JqLSQoQ09ORklHX1NPVU5EX01TTkRDTEFTKQkrPSBtc25kLm8gbXNuZF9jbGFzc2ljLm8KIG9iai0kKENPTkZJR19TT1VORF9NU05EUElOKQkrPSBtc25kLm8gbXNuZF9waW5uYWNsZS5vCiBvYmotJChDT05GSUdfU09VTkRfVldTTkQpCSs9IHZ3c25kLm8KLW9iai0kKENPTkZJR19TT1VORF9BVTE1NTBfQUM5NykJKz0gYXUxNTUwX2FjOTcubyBhYzk3X2NvZGVjLm8KIG9iai0kKENPTkZJR19TT1VORF9CQ01fQ1M0Mjk3QSkJKz0gc3dhcm1fY3M0Mjk3YS5vCiAKIG9iai0kKENPTkZJR19ETUFTT1VORCkJCSs9IGRtYXNvdW5kLwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2FjOTdfY29kZWMuYyBiL3NvdW5kL29zcy9hYzk3X2NvZGVjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjZDIzZDkuLjAwMDAwMDAKLS0tIGEvc291bmQvb3NzL2FjOTdfY29kZWMuYworKysgL2Rldi9udWxsCkBAIC0xLDEyMDMgKzAsMCBAQAotLyoKLSAqIGFjOTdfY29kZWMuYzogR2VuZXJpYyBBQzk3IG1peGVyL21vZGVtIG1vZHVsZQotICoKLSAqIERlcml2ZWQgZnJvbSBhYzk3IG1peGVyIGluIG1hZXN0cm8gYW5kIHRyaWRlbnQgZHJpdmVyLgotICoKLSAqIENvcHlyaWdodCAyMDAwIFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW0gQ29ycG9yYXRpb24KLSAqCi0gKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICoJYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqCU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICoJWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqCWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKglGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBUaGUgSW50ZWwgQXVkaW8gQ29kZWMgJzk3IHNwZWNpZmljYXRpb24gaXMgYXZhaWxhYmxlIGF0OgotICogaHR0cDovL2Rvd25sb2FkLmludGVsLmNvbS9zdXBwb3J0L21vdGhlcmJvYXJkcy9kZXNrdG9wL3NiL2FjOTdfcjIzLnBkZgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIEhpc3RvcnkKLSAqIE1heSAwMiwgMjAwMyBMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgotICoJUmVtb3ZlZCBub24gZXhpc3RlbnQgV005NzAwCi0gKglBZGRlZCBzdXBwb3J0IGZvciBXTTk3MDUsIFdNOTcwOCwgV005NzA5LCBXTTk3MTAsIFdNOTcxMQotICoJV005NzEyIGFuZCBXTTk3MTcKLSAqIE1hciAyOCwgMjAwMiBSYW5kb2xwaCBCZW50c29uIDxiZW50c29uQGhvbG1zam9lbi5jb20+Ci0gKgljb3JyZWN0aW9ucyB0byBzdXBwb3J0IFdNOTcwNyBpbiBWaWV3UGFkIDEwMDAKLSAqIHYwLjQgTWFyIDE1IDIwMDAgT2xsaWUgTGhvCi0gKglkdWFsIGNvZGVjcyBzdXBwb3J0IHZlcmlmaWVkIHdpdGggNCBjaGFubmVscyBvdXRwdXQKLSAqIHYwLjMgRmViIDIyIDIwMDAgT2xsaWUgTGhvCi0gKglidWcgZml4IGZvciByZWNvcmQgbWFzayBzZXR0aW5nCi0gKiB2MC4yIEZlYiAxMCAyMDAwIE9sbGllIExobwotICoJYWRkIGFjOTdfcmVhZF9wcm9jIGZvciAvcHJvYy9kcml2ZXIve3ZlbmRvcn0vYWM5NwotICogdjAuMSBKYW4gMTQgMjAwMCBPbGxpZSBMaG8gPG9sbGllQHNpcy5jb20udHc+IAotICoJSXNvbGF0ZWQgZnJvbSB0cmlkZW50LmMgdG8gc3VwcG9ydCBtdWx0aXBsZSBhYzk3IGNvZGVjCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2FjOTdfY29kZWMuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0KLSNkZWZpbmUgQ09ERUNfSURfQlVGU1ogMTQKLQotc3RhdGljIGludCBhYzk3X3JlYWRfbWl4ZXIoc3RydWN0IGFjOTdfY29kZWMgKmNvZGVjLCBpbnQgb3NzX2NoYW5uZWwpOwotc3RhdGljIHZvaWQgYWM5N193cml0ZV9taXhlcihzdHJ1Y3QgYWM5N19jb2RlYyAqY29kZWMsIGludCBvc3NfY2hhbm5lbCwgCi0JCQkgICAgIHVuc2lnbmVkIGludCBsZWZ0LCB1bnNpZ25lZCBpbnQgcmlnaHQpOwotc3RhdGljIHZvaWQgYWM5N19zZXRfbWl4ZXIoc3RydWN0IGFjOTdfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgb3NzX21peGVyLCB1bnNpZ25lZCBpbnQgdmFsICk7Ci1zdGF0aWMgaW50IGFjOTdfcmVjbWFza19pbyhzdHJ1Y3QgYWM5N19jb2RlYyAqY29kZWMsIGludCBydywgaW50IG1hc2spOwotc3RhdGljIGludCBhYzk3X21peGVyX2lvY3RsKHN0cnVjdCBhYzk3X2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotCi1zdGF0aWMgaW50IGFjOTdfaW5pdF9taXhlcihzdHJ1Y3QgYWM5N19jb2RlYyAqY29kZWMpOwotCi1zdGF0aWMgaW50IHdvbGZzb25faW5pdDAzKHN0cnVjdCBhYzk3X2NvZGVjICogY29kZWMpOwotc3RhdGljIGludCB3b2xmc29uX2luaXQwNChzdHJ1Y3QgYWM5N19jb2RlYyAqIGNvZGVjKTsKLXN0YXRpYyBpbnQgd29sZnNvbl9pbml0MDUoc3RydWN0IGFjOTdfY29kZWMgKiBjb2RlYyk7Ci1zdGF0aWMgaW50IHdvbGZzb25faW5pdDExKHN0cnVjdCBhYzk3X2NvZGVjICogY29kZWMpOwotc3RhdGljIGludCB3b2xmc29uX2luaXQxMyhzdHJ1Y3QgYWM5N19jb2RlYyAqIGNvZGVjKTsKLXN0YXRpYyBpbnQgdHJpdGVjaF9pbml0KHN0cnVjdCBhYzk3X2NvZGVjICogY29kZWMpOwotc3RhdGljIGludCB0cml0ZWNoX21hZXN0cm9faW5pdChzdHJ1Y3QgYWM5N19jb2RlYyAqIGNvZGVjKTsKLXN0YXRpYyBpbnQgc2lnbWF0ZWxfOTcwOF9pbml0KHN0cnVjdCBhYzk3X2NvZGVjICpjb2RlYyk7Ci1zdGF0aWMgaW50IHNpZ21hdGVsXzk3MjFfaW5pdChzdHJ1Y3QgYWM5N19jb2RlYyAqY29kZWMpOwotc3RhdGljIGludCBzaWdtYXRlbF85NzQ0X2luaXQoc3RydWN0IGFjOTdfY29kZWMgKmNvZGVjKTsKLXN0YXRpYyBpbnQgYWQxODg2X2luaXQoc3RydWN0IGFjOTdfY29kZWMgKmNvZGVjKTsKLXN0YXRpYyBpbnQgZWFwZF9jb250cm9sKHN0cnVjdCBhYzk3X2NvZGVjICpjb2RlYywgaW50KTsKLXN0YXRpYyBpbnQgY3J5c3RhbF9kaWdpdGFsX2NvbnRyb2woc3RydWN0IGFjOTdfY29kZWMgKmNvZGVjLCBpbnQgc2xvdHMsIGludCByYXRlLCBpbnQgbW9kZSk7Ci1zdGF0aWMgaW50IGNtZWRpYV9pbml0KHN0cnVjdCBhYzk3X2NvZGVjICogY29kZWMpOwotc3RhdGljIGludCBjbWVkaWFfZGlnaXRhbF9jb250cm9sKHN0cnVjdCBhYzk3X2NvZGVjICpjb2RlYywgaW50IHNsb3RzLCBpbnQgcmF0ZSwgaW50IG1vZGUpOwotc3RhdGljIGludCBnZW5lcmljX2RpZ2l0YWxfY29udHJvbChzdHJ1Y3QgYWM5N19jb2RlYyAqY29kZWMsIGludCBzbG90cywgaW50IHJhdGUsIGludCBtb2RlKTsKLQotCi0vKgotICoJQUM5NyBvcGVyYXRpb25zLgotICoKLSAqCUlmIHlvdSBhcmUgYWRkaW5nIGEgY29kZWMgdGhlbiB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gdXNlCi0gKgkJZWFwZF9vcHMgLSBhbnkgY29kZWMgdGhhdCBzdXBwb3J0cyBFQVBEIGFtcCBjb250cm9sIChtb3N0KQotICoJCW51bGxfb3BzIC0gYW55IGFuY2llbnQgY29kZWMgdGhhdCBzdXBwb3J0cyBub3RoaW5nCi0gKgotICoJVGhlIHRocmVlIGZ1bmN0aW9ucyBhcmUKLSAqCQlpbml0IC0gdXNlZCBmb3Igbm9uIEFDOTcgc3RhbmRhcmQgaW5pdGlhbGlzYXRpb24KLSAqCQlhbXBsaWZpZXIgLSB1c2VkIHRvIGRvIGFtcGxpZmllciBjb250cm9sICgxPW9uIDA9b2ZmKQotICoJCWRpZ2l0YWwgLSBzd2l0Y2ggdG8gZGlnaXRhbCBtb2RlcyAoMCA9IGFuYWxvZykKLSAqCi0gKglOb3QgYWxsIGNvZGVjcyBzdXBwb3J0IGFsbCBmZWF0dXJlcywgbm90IGFsbCBkcml2ZXJzIHVzZSBhbGwgdGhlCi0gKglvcGVyYXRpb25zIHlldAotICovCi0gCi1zdGF0aWMgc3RydWN0IGFjOTdfb3BzIG51bGxfb3BzID0geyBOVUxMLCBOVUxMLCBOVUxMIH07Ci1zdGF0aWMgc3RydWN0IGFjOTdfb3BzIGRlZmF1bHRfb3BzID0geyBOVUxMLCBlYXBkX2NvbnRyb2wsIE5VTEwgfTsKLXN0YXRpYyBzdHJ1Y3QgYWM5N19vcHMgZGVmYXVsdF9kaWdpdGFsX29wcyA9IHsgTlVMTCwgZWFwZF9jb250cm9sLCBnZW5lcmljX2RpZ2l0YWxfY29udHJvbH07Ci1zdGF0aWMgc3RydWN0IGFjOTdfb3BzIHdvbGZzb25fb3BzMDMgPSB7IHdvbGZzb25faW5pdDAzLCBOVUxMLCBOVUxMIH07Ci1zdGF0aWMgc3RydWN0IGFjOTdfb3BzIHdvbGZzb25fb3BzMDQgPSB7IHdvbGZzb25faW5pdDA0LCBOVUxMLCBOVUxMIH07Ci1zdGF0aWMgc3RydWN0IGFjOTdfb3BzIHdvbGZzb25fb3BzMDUgPSB7IHdvbGZzb25faW5pdDA1LCBOVUxMLCBOVUxMIH07Ci1zdGF0aWMgc3RydWN0IGFjOTdfb3BzIHdvbGZzb25fb3BzMTEgPSB7IHdvbGZzb25faW5pdDExLCBOVUxMLCBOVUxMIH07Ci1zdGF0aWMgc3RydWN0IGFjOTdfb3BzIHdvbGZzb25fb3BzMTMgPSB7IHdvbGZzb25faW5pdDEzLCBOVUxMLCBOVUxMIH07Ci1zdGF0aWMgc3RydWN0IGFjOTdfb3BzIHRyaXRlY2hfb3BzID0geyB0cml0ZWNoX2luaXQsIE5VTEwsIE5VTEwgfTsKLXN0YXRpYyBzdHJ1Y3QgYWM5N19vcHMgdHJpdGVjaF9tX29wcyA9IHsgdHJpdGVjaF9tYWVzdHJvX2luaXQsIE5VTEwsIE5VTEwgfTsKLXN0YXRpYyBzdHJ1Y3QgYWM5N19vcHMgc2lnbWF0ZWxfOTcwOF9vcHMgPSB7IHNpZ21hdGVsXzk3MDhfaW5pdCwgTlVMTCwgTlVMTCB9Owotc3RhdGljIHN0cnVjdCBhYzk3X29wcyBzaWdtYXRlbF85NzIxX29wcyA9IHsgc2lnbWF0ZWxfOTcyMV9pbml0LCBOVUxMLCBOVUxMIH07Ci1zdGF0aWMgc3RydWN0IGFjOTdfb3BzIHNpZ21hdGVsXzk3NDRfb3BzID0geyBzaWdtYXRlbF85NzQ0X2luaXQsIE5VTEwsIE5VTEwgfTsKLXN0YXRpYyBzdHJ1Y3QgYWM5N19vcHMgY3J5c3RhbF9kaWdpdGFsX29wcyA9IHsgTlVMTCwgZWFwZF9jb250cm9sLCBjcnlzdGFsX2RpZ2l0YWxfY29udHJvbCB9Owotc3RhdGljIHN0cnVjdCBhYzk3X29wcyBhZDE4ODZfb3BzID0geyBhZDE4ODZfaW5pdCwgZWFwZF9jb250cm9sLCBOVUxMIH07Ci1zdGF0aWMgc3RydWN0IGFjOTdfb3BzIGNtZWRpYV9vcHMgPSB7IE5VTEwsIGVhcGRfY29udHJvbCwgTlVMTH07Ci1zdGF0aWMgc3RydWN0IGFjOTdfb3BzIGNtZWRpYV9kaWdpdGFsX29wcyA9IHsgY21lZGlhX2luaXQsIGVhcGRfY29udHJvbCwgY21lZGlhX2RpZ2l0YWxfY29udHJvbH07Ci0KLS8qIHNvcnRlZCBieSB2ZW5kb3IvZGV2aWNlIGlkICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHsKLQl1MzIgaWQ7Ci0JY2hhciAqbmFtZTsKLQlzdHJ1Y3QgYWM5N19vcHMgKm9wczsKLQlpbnQgZmxhZ3M7Ci19IGFjOTdfY29kZWNfaWRzW10gPSB7Ci0JezB4NDE0NDUzMDMsICJBbmFsb2cgRGV2aWNlcyBBRDE4MTkiLAkmbnVsbF9vcHN9LAotCXsweDQxNDQ1MzQwLCAiQW5hbG9nIERldmljZXMgQUQxODgxIiwJJm51bGxfb3BzfSwKLQl7MHg0MTQ0NTM0OCwgIkFuYWxvZyBEZXZpY2VzIEFEMTg4MUEiLAkmbnVsbF9vcHN9LAotCXsweDQxNDQ1MzYwLCAiQW5hbG9nIERldmljZXMgQUQxODg1IiwJJmRlZmF1bHRfb3BzfSwKLQl7MHg0MTQ0NTM2MSwgIkFuYWxvZyBEZXZpY2VzIEFEMTg4NiIsCSZhZDE4ODZfb3BzfSwKLQl7MHg0MTQ0NTM3MCwgIkFuYWxvZyBEZXZpY2VzIEFEMTk4MSIsCSZudWxsX29wc30sCi0JezB4NDE0NDUzNzIsICJBbmFsb2cgRGV2aWNlcyBBRDE5ODFBIiwJJm51bGxfb3BzfSwKLQl7MHg0MTQ0NTM3NCwgIkFuYWxvZyBEZXZpY2VzIEFEMTk4MUIiLAkmbnVsbF9vcHN9LAotCXsweDQxNDQ1NDYwLCAiQW5hbG9nIERldmljZXMgQUQxODg1IiwJJmRlZmF1bHRfb3BzfSwKLQl7MHg0MTQ0NTQ2MSwgIkFuYWxvZyBEZXZpY2VzIEFEMTg4NiIsCSZhZDE4ODZfb3BzfSwKLQl7MHg0MTRCNEQwMCwgIkFzYWhpIEthc2VpIEFLNDU0MCIsCSZudWxsX29wc30sCi0JezB4NDE0QjREMDEsICJBc2FoaSBLYXNlaSBBSzQ1NDIiLAkmbnVsbF9vcHN9LAotCXsweDQxNEI0RDAyLCAiQXNhaGkgS2FzZWkgQUs0NTQzIiwJJm51bGxfb3BzfSwKLQl7MHg0MTRDNDMyNiwgIkFMQzEwMFAiLAkJCSZudWxsX29wc30sCi0JezB4NDE0QzQ3MTAsICJBTEMyMDAvMjAwUCIsCQkmbnVsbF9vcHN9LAotCXsweDQxNEM0NzIwLCAiQUxDNjUwIiwJCQkmZGVmYXVsdF9kaWdpdGFsX29wc30sCi0JezB4NDM0RDQ5NDEsICJDTWVkaWEiLAkJCSZjbWVkaWFfb3BzLAkJQUM5N19OT19QQ01fVk9MVU1FIH0sCi0JezB4NDM0RDQ5NDIsICJDTWVkaWEiLAkJCSZjbWVkaWFfb3BzLAkJQUM5N19OT19QQ01fVk9MVU1FIH0sCi0JezB4NDM0RDQ5NjEsICJDTWVkaWEiLAkJCSZjbWVkaWFfZGlnaXRhbF9vcHMsCUFDOTdfTk9fUENNX1ZPTFVNRSB9LAotCXsweDQzNTI1OTAwLCAiQ2lycnVzIExvZ2ljIENTNDI5NyIsCSZkZWZhdWx0X29wc30sCi0JezB4NDM1MjU5MDMsICJDaXJydXMgTG9naWMgQ1M0Mjk3IiwJJmRlZmF1bHRfb3BzfSwKLQl7MHg0MzUyNTkxMywgIkNpcnJ1cyBMb2dpYyBDUzQyOTdBIHJldiBBIiwgJmRlZmF1bHRfb3BzfSwKLQl7MHg0MzUyNTkxNCwgIkNpcnJ1cyBMb2dpYyBDUzQyOTdBIHJldiBCIiwgJmRlZmF1bHRfb3BzfSwKLQl7MHg0MzUyNTkyMywgIkNpcnJ1cyBMb2dpYyBDUzQyOTgiLAkmbnVsbF9vcHN9LAotCXsweDQzNTI1OTJCLCAiQ2lycnVzIExvZ2ljIENTNDI5NCIsCSZudWxsX29wc30sCi0JezB4NDM1MjU5MkQsICJDaXJydXMgTG9naWMgQ1M0Mjk0IiwJJm51bGxfb3BzfSwKLQl7MHg0MzUyNTkzMSwgIkNpcnJ1cyBMb2dpYyBDUzQyOTkgcmV2IEEiLCAmY3J5c3RhbF9kaWdpdGFsX29wc30sCi0JezB4NDM1MjU5MzMsICJDaXJydXMgTG9naWMgQ1M0Mjk5IHJldiBDIiwgJmNyeXN0YWxfZGlnaXRhbF9vcHN9LAotCXsweDQzNTI1OTM0LCAiQ2lycnVzIExvZ2ljIENTNDI5OSByZXYgRCIsICZjcnlzdGFsX2RpZ2l0YWxfb3BzfSwKLQl7MHg0MzU4NTQzMCwgIkNYVDQ4IiwJCQkmZGVmYXVsdF9vcHMsCQlBQzk3X0RFTFVERURfTU9ERU0gfSwKLQl7MHg0MzU4NTQ0MiwgIkNYVDY2IiwJCQkmZGVmYXVsdF9vcHMsCQlBQzk3X0RFTFVERURfTU9ERU0gfSwKLQl7MHg0NDU0MzAzMSwgIkRpYW1vbmQgVGVjaG5vbG9neSBEVDA4OTMiLCAmZGVmYXVsdF9vcHN9LAotCXsweDQ1ODM4MzA4LCAiRVNTIEFsbGVncm8gRVMxOTg4IiwJJm51bGxfb3BzfSwKLQl7MHg0OTQzNDUxMSwgIklDRTEyMzIiLAkJCSZudWxsX29wc30sIC8qIEkgaG9wZSAtLWprICovCi0JezB4NGU1MzQzMzEsICJOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNNDU0OSIsICZudWxsX29wc30sCi0JezB4NTM0OTRjMjIsICJTaWxpY29uIExhYm9yYXRvcnkgU2kzMDM2IiwgJm51bGxfb3BzfSwKLQl7MHg1MzQ5NGMyMywgIlNpbGljb24gTGFib3JhdG9yeSBTaTMwMzgiLCAmbnVsbF9vcHN9LAotCXsweDU0NTIwMEZGLCAiVHJpVGVjaCBUUj8/Pz8/IiwJCSZ0cml0ZWNoX21fb3BzfSwKLQl7MHg1NDUyNDEwMiwgIlRyaVRlY2ggVFIyODAyMiIsCQkmbnVsbF9vcHN9LAotCXsweDU0NTI0MTAzLCAiVHJpVGVjaCBUUjI4MDIzIiwJCSZudWxsX29wc30sCi0JezB4NTQ1MjQxMDYsICJUcmlUZWNoIFRSMjgwMjYiLAkJJm51bGxfb3BzfSwKLQl7MHg1NDUyNDEwOCwgIlRyaVRlY2ggVFIyODAyOCIsCQkmdHJpdGVjaF9vcHN9LAotCXsweDU0NTI0MTIzLCAiVHJpVGVjaCBUUiBBNSIsCQkmbnVsbF9vcHN9LAotCXsweDU3NEQ0QzAzLCAiV29sZnNvbiBXTTk3MDMvMDcvMDgvMTciLAkmd29sZnNvbl9vcHMwM30sCi0JezB4NTc0RDRDMDQsICJXb2xmc29uIFdNOTcwNE0vV005NzA0USIsCSZ3b2xmc29uX29wczA0fSwKLQl7MHg1NzRENEMwNSwgIldvbGZzb24gV005NzA1L1dNOTcxMCIsICAgJndvbGZzb25fb3BzMDV9LAotCXsweDU3NEQ0QzA5LCAiV29sZnNvbiBXTTk3MDkiLAkJJm51bGxfb3BzfSwKLQl7MHg1NzRENEMxMiwgIldvbGZzb24gV005NzExLzk3MTIiLAkmd29sZnNvbl9vcHMxMX0sCi0JezB4NTc0RDRDMTMsICJXb2xmc29uIFdNOTcxMyIsCSZ3b2xmc29uX29wczEzLCBBQzk3X0RFRkFVTFRfUE9XRVJfT0ZGfSwKLQl7MHg4Mzg0NzYwMCwgIlNpZ21hVGVsIFNUQUM/Pz8/IiwJJm51bGxfb3BzfSwKLQl7MHg4Mzg0NzYwNCwgIlNpZ21hVGVsIFNUQUM5NzAxLzMvNC81IiwgJm51bGxfb3BzfSwKLQl7MHg4Mzg0NzYwNSwgIlNpZ21hVGVsIFNUQUM5NzA0IiwJJm51bGxfb3BzfSwKLQl7MHg4Mzg0NzYwOCwgIlNpZ21hVGVsIFNUQUM5NzA4IiwJJnNpZ21hdGVsXzk3MDhfb3BzfSwKLQl7MHg4Mzg0NzYwOSwgIlNpZ21hVGVsIFNUQUM5NzIxLzIzIiwJJnNpZ21hdGVsXzk3MjFfb3BzfSwKLQl7MHg4Mzg0NzY0NCwgIlNpZ21hVGVsIFNUQUM5NzQ0LzQ1IiwJJnNpZ21hdGVsXzk3NDRfb3BzfSwKLQl7MHg4Mzg0NzY1MiwgIlNpZ21hVGVsIFNUQUM5NzUyLzUzIiwJJmRlZmF1bHRfb3BzfSwKLQl7MHg4Mzg0NzY1NiwgIlNpZ21hVGVsIFNUQUM5NzU2LzU3IiwJJnNpZ21hdGVsXzk3NDRfb3BzfSwKLQl7MHg4Mzg0NzY2NiwgIlNpZ21hVGVsIFNUQUM5NzUwVCIsCSZzaWdtYXRlbF85NzQ0X29wc30sCi0JezB4ODM4NDc2ODQsICJTaWdtYVRlbCBTVEFDOTc4My84ND8iLAkmbnVsbF9vcHN9LAotCXsweDU3NDU0MzAxLCAiV2luYm9uZCA4Mzk3MUQiLAkJJm51bGxfb3BzfSwKLX07Ci0KLS8qIHRoaXMgdGFibGUgaGFzIGRlZmF1bHQgbWl4ZXIgdmFsdWVzIGZvciBhbGwgT1NTIG1peGVycy4gKi8KLXN0YXRpYyBzdHJ1Y3QgbWl4ZXJfZGVmYXVsdHMgewotCWludCBtaXhlcjsKLQl1bnNpZ25lZCBpbnQgdmFsdWU7Ci19IG1peGVyX2RlZmF1bHRzW1NPVU5EX01JWEVSX05SREVWSUNFU10gPSB7Ci0JLyogYWxsIHZhbHVlcyAwIC0+IDEwMCBpbiBieXRlcyAqLwotCXtTT1VORF9NSVhFUl9WT0xVTUUsCTB4NDM0M30sCi0Je1NPVU5EX01JWEVSX0JBU1MsCTB4NDM0M30sCi0Je1NPVU5EX01JWEVSX1RSRUJMRSwJMHg0MzQzfSwKLQl7U09VTkRfTUlYRVJfUENNLAkweDQzNDN9LAotCXtTT1VORF9NSVhFUl9TUEVBS0VSLAkweDQzNDN9LAotCXtTT1VORF9NSVhFUl9MSU5FLAkweDQzNDN9LAotCXtTT1VORF9NSVhFUl9NSUMsCTB4MDAwMH0sCi0Je1NPVU5EX01JWEVSX0NELAkweDQzNDN9LAotCXtTT1VORF9NSVhFUl9BTFRQQ00sCTB4NDM0M30sCi0Je1NPVU5EX01JWEVSX0lHQUlOLAkweDQzNDN9LAotCXtTT1VORF9NSVhFUl9MSU5FMSwJMHg0MzQzfSwKLQl7U09VTkRfTUlYRVJfUEhPTkVJTiwJMHg0MzQzfSwKLQl7U09VTkRfTUlYRVJfUEhPTkVPVVQsCTB4NDM0M30sCi0Je1NPVU5EX01JWEVSX1ZJREVPLAkweDQzNDN9LAotCXstMSwwfQotfTsKLQotLyogdGFibGUgdG8gc2NhbGUgc2NhbGUgZnJvbSBPU1MgbWl4ZXIgdmFsdWUgdG8gQUM5NyBtaXhlciByZWdpc3RlciB2YWx1ZSAqLwkKLXN0YXRpYyBzdHJ1Y3QgYWM5N19taXhlcl9odyB7Ci0JdW5zaWduZWQgY2hhciBvZmZzZXQ7Ci0JaW50IHNjYWxlOwotfSBhYzk3X2h3W1NPVU5EX01JWEVSX05SREVWSUNFU109IHsKLQlbU09VTkRfTUlYRVJfVk9MVU1FXQk9CXtBQzk3X01BU1RFUl9WT0xfU1RFUkVPLDY0fSwKLQlbU09VTkRfTUlYRVJfQkFTU10JPQl7QUM5N19NQVNURVJfVE9ORSwJMTZ9LAotCVtTT1VORF9NSVhFUl9UUkVCTEVdCT0Je0FDOTdfTUFTVEVSX1RPTkUsCTE2fSwKLQlbU09VTkRfTUlYRVJfUENNXQk9CXtBQzk3X1BDTU9VVF9WT0wsCTMyfSwKLQlbU09VTkRfTUlYRVJfU1BFQUtFUl0JPQl7QUM5N19QQ0JFRVBfVk9MLAkxNn0sCi0JW1NPVU5EX01JWEVSX0xJTkVdCT0Je0FDOTdfTElORUlOX1ZPTCwJMzJ9LAotCVtTT1VORF9NSVhFUl9NSUNdCT0Je0FDOTdfTUlDX1ZPTCwJCTMyfSwKLQlbU09VTkRfTUlYRVJfQ0RdCT0Je0FDOTdfQ0RfVk9MLAkJMzJ9LAotCVtTT1VORF9NSVhFUl9BTFRQQ01dCT0Je0FDOTdfSEVBRFBIT05FX1ZPTCwJNjR9LAotCVtTT1VORF9NSVhFUl9JR0FJTl0JPQl7QUM5N19SRUNPUkRfR0FJTiwJMTZ9LAotCVtTT1VORF9NSVhFUl9MSU5FMV0JPQl7QUM5N19BVVhfVk9MLAkJMzJ9LAotCVtTT1VORF9NSVhFUl9QSE9ORUlOXQk9IAl7QUM5N19QSE9ORV9WT0wsCTMyfSwKLQlbU09VTkRfTUlYRVJfUEhPTkVPVVRdCT0gCXtBQzk3X01BU1RFUl9WT0xfTU9OTywJNjR9LAotCVtTT1VORF9NSVhFUl9WSURFT10JPQl7QUM5N19WSURFT19WT0wsCTMyfSwKLX07Ci0KLS8qIHRoZSBmb2xsb3dpbmcgdGFibGVzIGFsbG93IHVzIHRvIGdvIGZyb20gT1NTIDwtPiBhYzk3IHF1aWNrbHkuICovCi1lbnVtIGFjOTdfcmVjc2V0dGluZ3MgewotCUFDOTdfUkVDX01JQz0wLAotCUFDOTdfUkVDX0NELAotCUFDOTdfUkVDX1ZJREVPLAotCUFDOTdfUkVDX0FVWCwKLQlBQzk3X1JFQ19MSU5FLAotCUFDOTdfUkVDX1NURVJFTywgLyogY29tYmluYXRpb24gb2YgYWxsIGVuYWJsZWQgb3V0cHV0cy4uICAqLwotCUFDOTdfUkVDX01PTk8sCSAgICAgIC8qLi4gb3IgdGhlIG1vbm8gZXF1aXZhbGVudCAqLwotCUFDOTdfUkVDX1BIT05FCi19OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGFjOTdfcm0yb3NzW10gPSB7Ci0JW0FDOTdfUkVDX01JQ10gCSA9IFNPVU5EX01JWEVSX01JQywKLQlbQUM5N19SRUNfQ0RdIAkgPSBTT1VORF9NSVhFUl9DRCwKLQlbQUM5N19SRUNfVklERU9dID0gU09VTkRfTUlYRVJfVklERU8sCi0JW0FDOTdfUkVDX0FVWF0gCSA9IFNPVU5EX01JWEVSX0xJTkUxLAotCVtBQzk3X1JFQ19MSU5FXSAgPSBTT1VORF9NSVhFUl9MSU5FLAotCVtBQzk3X1JFQ19TVEVSRU9dPSBTT1VORF9NSVhFUl9JR0FJTiwKLQlbQUM5N19SRUNfUEhPTkVdID0gU09VTkRfTUlYRVJfUEhPTkVJTgotfTsKLQotLyogaW5kZXhlZCBieSBiaXQgcG9zaXRpb24gKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYWM5N19vc3Nfcm1bXSA9IHsKLQlbU09VTkRfTUlYRVJfTUlDXSAJPSBBQzk3X1JFQ19NSUMsCi0JW1NPVU5EX01JWEVSX0NEXSAJPSBBQzk3X1JFQ19DRCwKLQlbU09VTkRfTUlYRVJfVklERU9dIAk9IEFDOTdfUkVDX1ZJREVPLAotCVtTT1VORF9NSVhFUl9MSU5FMV0gCT0gQUM5N19SRUNfQVVYLAotCVtTT1VORF9NSVhFUl9MSU5FXSAJPSBBQzk3X1JFQ19MSU5FLAotCVtTT1VORF9NSVhFUl9JR0FJTl0JPSBBQzk3X1JFQ19TVEVSRU8sCi0JW1NPVU5EX01JWEVSX1BIT05FSU5dIAk9IEFDOTdfUkVDX1BIT05FCi19OwotCi1zdGF0aWMgTElTVF9IRUFEKGNvZGVjcyk7Ci1zdGF0aWMgTElTVF9IRUFEKGNvZGVjX2RyaXZlcnMpOwotc3RhdGljIERFRklORV9NVVRFWChjb2RlY19tdXRleCk7Ci0KLS8qIHJlYWRzIHRoZSBnaXZlbiBPU1MgbWl4ZXIgZnJvbSB0aGUgYWM5NyB0aGUgY2FsbGVyIG11c3QgaGF2ZSBpbnN1cmVkIHRoYXQgdGhlIGFjOTcga25vd3MKLSAgIGFib3V0IHRoYXQgZ2l2ZW4gbWl4ZXIsIGFuZCBzaG91bGQgYmUgaG9sZGluZyBhIHNwaW5sb2NrIGZvciB0aGUgY2FyZCAqLwotc3RhdGljIGludCBhYzk3X3JlYWRfbWl4ZXIoc3RydWN0IGFjOTdfY29kZWMgKmNvZGVjLCBpbnQgb3NzX2NoYW5uZWwpIAotewotCXUxNiB2YWw7Ci0JaW50IHJldCA9IDA7Ci0JaW50IHNjYWxlOwotCXN0cnVjdCBhYzk3X21peGVyX2h3ICptaCA9ICZhYzk3X2h3W29zc19jaGFubmVsXTsKLQotCXZhbCA9IGNvZGVjLT5jb2RlY19yZWFkKGNvZGVjICwgbWgtPm9mZnNldCk7Ci0KLQlpZiAodmFsICYgQUM5N19NVVRFKSB7Ci0JCXJldCA9IDA7Ci0JfSBlbHNlIGlmIChBQzk3X1NURVJFT19NQVNLICYgKDEgPDwgb3NzX2NoYW5uZWwpKSB7Ci0JCS8qIG5pY2Ugc3RlcmVvIG1peGVycyAuLiAqLwotCQlpbnQgbGVmdCxyaWdodDsKLQotCQlsZWZ0ID0gKHZhbCA+PiA4KSAgJiAweDdmOwotCQlyaWdodCA9IHZhbCAgJiAweDdmOwotCi0JCWlmIChvc3NfY2hhbm5lbCA9PSBTT1VORF9NSVhFUl9JR0FJTikgewotCQkJcmlnaHQgPSAocmlnaHQgKiAxMDApIC8gbWgtPnNjYWxlOwotCQkJbGVmdCA9IChsZWZ0ICogMTAwKSAvIG1oLT5zY2FsZTsKLQkJfSBlbHNlIHsKLQkJCS8qIHRoZXNlIG1heSBoYXZlIDUgb3IgNiBiaXQgcmVzb2x1dGlvbiAqLwotCQkJaWYob3NzX2NoYW5uZWwgPT0gU09VTkRfTUlYRVJfVk9MVU1FIHx8IG9zc19jaGFubmVsID09IFNPVU5EX01JWEVSX0FMVFBDTSkKLQkJCQlzY2FsZSA9ICgxIDw8IGNvZGVjLT5iaXRfcmVzb2x1dGlvbik7Ci0JCQllbHNlCi0JCQkJc2NhbGUgPSBtaC0+c2NhbGU7Ci0KLQkJCXJpZ2h0ID0gMTAwIC0gKChyaWdodCAqIDEwMCkgLyBzY2FsZSk7Ci0JCQlsZWZ0ID0gMTAwIC0gKChsZWZ0ICogMTAwKSAvIHNjYWxlKTsKLQkJfQotCQlyZXQgPSBsZWZ0IHwgKHJpZ2h0IDw8IDgpOwotCX0gZWxzZSBpZiAob3NzX2NoYW5uZWwgPT0gU09VTkRfTUlYRVJfU1BFQUtFUikgewotCQlyZXQgPSAxMDAgLSAoKCgodmFsICYgMHgxZSk+PjEpICogMTAwKSAvIG1oLT5zY2FsZSk7Ci0JfSBlbHNlIGlmIChvc3NfY2hhbm5lbCA9PSBTT1VORF9NSVhFUl9QSE9ORUlOKSB7Ci0JCXJldCA9IDEwMCAtICgoKHZhbCAmIDB4MWYpICogMTAwKSAvIG1oLT5zY2FsZSk7Ci0JfSBlbHNlIGlmIChvc3NfY2hhbm5lbCA9PSBTT1VORF9NSVhFUl9QSE9ORU9VVCkgewotCQlzY2FsZSA9ICgxIDw8IGNvZGVjLT5iaXRfcmVzb2x1dGlvbik7Ci0JCXJldCA9IDEwMCAtICgoKHZhbCAmIDB4MWYpICogMTAwKSAvIHNjYWxlKTsKLQl9IGVsc2UgaWYgKG9zc19jaGFubmVsID09IFNPVU5EX01JWEVSX01JQykgewotCQlyZXQgPSAxMDAgLSAoKCh2YWwgJiAweDFmKSAqIDEwMCkgLyBtaC0+c2NhbGUpOwotCQkvKiAgdGhlIGxvdyBiaXQgaXMgb3B0aW9uYWwgaW4gdGhlIHRvbmUgc2xpZGVycyBhbmQgbWFza2luZwotCQkgICAgaXQgbGV0cyB1cyBhdm9pZCB0aGUgMHhmICdieXBhc3MnLi4gKi8KLQl9IGVsc2UgaWYgKG9zc19jaGFubmVsID09IFNPVU5EX01JWEVSX0JBU1MpIHsKLQkJcmV0ID0gMTAwIC0gKCgoKHZhbCA+PiA4KSAmIDB4ZSkgKiAxMDApIC8gbWgtPnNjYWxlKTsKLQl9IGVsc2UgaWYgKG9zc19jaGFubmVsID09IFNPVU5EX01JWEVSX1RSRUJMRSkgewotCQlyZXQgPSAxMDAgLSAoKCh2YWwgJiAweGUpICogMTAwKSAvIG1oLT5zY2FsZSk7Ci0JfQotCi0jaWZkZWYgREVCVUcKLQlwcmludGsoImFjOTdfY29kZWM6IHJlYWQgT1NTIG1peGVyICUyZCAoJXMgYWM5NyByZWdpc3RlciAweCUwMngpLCAiCi0JICAgICAgICIweCUwNHggLT4gMHglMDR4XG4iLAotCSAgICAgICBvc3NfY2hhbm5lbCwgY29kZWMtPmlkID8gIlNlY29uZGFyeSIgOiAiUHJpbWFyeSIsCi0JICAgICAgIG1oLT5vZmZzZXQsIHZhbCwgcmV0KTsKLSNlbmRpZgotCi0JcmV0dXJuIHJldDsKLX0KLQotLyogd3JpdGUgdGhlIE9TUyBlbmNvZGVkIHZvbHVtZSB0byB0aGUgZ2l2ZW4gT1NTIGVuY29kZWQgbWl4ZXIsIGFnYWluIGNhbGxlcidzIGpvYiB0bwotICAgbWFrZSBzdXJlIGFsbCBpcyB3ZWxsIGluIGFyZyBsYW5kLCBjYWxsIHdpdGggc3BpbmxvY2sgaGVsZCAqLwotc3RhdGljIHZvaWQgYWM5N193cml0ZV9taXhlcihzdHJ1Y3QgYWM5N19jb2RlYyAqY29kZWMsIGludCBvc3NfY2hhbm5lbCwKLQkJICAgICAgdW5zaWduZWQgaW50IGxlZnQsIHVuc2lnbmVkIGludCByaWdodCkKLXsKLQl1MTYgdmFsID0gMDsKLQlpbnQgc2NhbGU7Ci0Jc3RydWN0IGFjOTdfbWl4ZXJfaHcgKm1oID0gJmFjOTdfaHdbb3NzX2NoYW5uZWxdOwotCi0jaWZkZWYgREVCVUcKLQlwcmludGsoImFjOTdfY29kZWM6IHdyb3RlIE9TUyBtaXhlciAlMmQgKCVzIGFjOTcgcmVnaXN0ZXIgMHglMDJ4KSwgIgotCSAgICAgICAibGVmdCB2b2w6JTJkLCByaWdodCB2b2w6JTJkOiIsCi0JICAgICAgIG9zc19jaGFubmVsLCBjb2RlYy0+aWQgPyAiU2Vjb25kYXJ5IiA6ICJQcmltYXJ5IiwKLQkgICAgICAgbWgtPm9mZnNldCwgbGVmdCwgcmlnaHQpOwotI2VuZGlmCi0KLQlpZiAoQUM5N19TVEVSRU9fTUFTSyAmICgxIDw8IG9zc19jaGFubmVsKSkgewotCQkvKiBzdGVyZW8gbWl4ZXJzICovCi0JCWlmIChsZWZ0ID09IDAgJiYgcmlnaHQgPT0gMCkgewotCQkJdmFsID0gQUM5N19NVVRFOwotCQl9IGVsc2UgewotCQkJaWYgKG9zc19jaGFubmVsID09IFNPVU5EX01JWEVSX0lHQUlOKSB7Ci0JCQkJcmlnaHQgPSAocmlnaHQgKiBtaC0+c2NhbGUpIC8gMTAwOwotCQkJCWxlZnQgPSAobGVmdCAqIG1oLT5zY2FsZSkgLyAxMDA7Ci0JCQkJaWYgKHJpZ2h0ID49IG1oLT5zY2FsZSkKLQkJCQkJcmlnaHQgPSBtaC0+c2NhbGUtMTsKLQkJCQlpZiAobGVmdCA+PSBtaC0+c2NhbGUpCi0JCQkJCWxlZnQgPSBtaC0+c2NhbGUtMTsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogdGhlc2UgbWF5IGhhdmUgNSBvciA2IGJpdCByZXNvbHV0aW9uICovCi0JCQkJaWYgKG9zc19jaGFubmVsID09IFNPVU5EX01JWEVSX1ZPTFVNRSB8fAotCQkJCSAgICBvc3NfY2hhbm5lbCA9PSBTT1VORF9NSVhFUl9BTFRQQ00pCi0JCQkJCXNjYWxlID0gKDEgPDwgY29kZWMtPmJpdF9yZXNvbHV0aW9uKTsKLQkJCQllbHNlCi0JCQkJCXNjYWxlID0gbWgtPnNjYWxlOwotCi0JCQkJcmlnaHQgPSAoKDEwMCAtIHJpZ2h0KSAqIHNjYWxlKSAvIDEwMDsKLQkJCQlsZWZ0ID0gKCgxMDAgLSBsZWZ0KSAqIHNjYWxlKSAvIDEwMDsKLQkJCQlpZiAocmlnaHQgPj0gc2NhbGUpCi0JCQkJCXJpZ2h0ID0gc2NhbGUtMTsKLQkJCQlpZiAobGVmdCA+PSBzY2FsZSkKLQkJCQkJbGVmdCA9IHNjYWxlLTE7Ci0JCQl9Ci0JCQl2YWwgPSAobGVmdCA8PCA4KSB8IHJpZ2h0OwotCQl9Ci0JfSBlbHNlIGlmIChvc3NfY2hhbm5lbCA9PSBTT1VORF9NSVhFUl9CQVNTKSB7Ci0JCXZhbCA9IGNvZGVjLT5jb2RlY19yZWFkKGNvZGVjICwgbWgtPm9mZnNldCkgJiB+MHgwZjAwOwotCQlsZWZ0ID0gKCgxMDAgLSBsZWZ0KSAqIG1oLT5zY2FsZSkgLyAxMDA7Ci0JCWlmIChsZWZ0ID49IG1oLT5zY2FsZSkKLQkJCWxlZnQgPSBtaC0+c2NhbGUtMTsKLQkJdmFsIHw9IChsZWZ0IDw8IDgpICYgMHgwZTAwOwotCX0gZWxzZSBpZiAob3NzX2NoYW5uZWwgPT0gU09VTkRfTUlYRVJfVFJFQkxFKSB7Ci0JCXZhbCA9IGNvZGVjLT5jb2RlY19yZWFkKGNvZGVjICwgbWgtPm9mZnNldCkgJiB+MHgwMDBmOwotCQlsZWZ0ID0gKCgxMDAgLSBsZWZ0KSAqIG1oLT5zY2FsZSkgLyAxMDA7Ci0JCWlmIChsZWZ0ID49IG1oLT5zY2FsZSkKLQkJCWxlZnQgPSBtaC0+c2NhbGUtMTsKLQkJdmFsIHw9IGxlZnQgJiAweDAwMGU7Ci0JfSBlbHNlIGlmKGxlZnQgPT0gMCkgewotCQl2YWwgPSBBQzk3X01VVEU7Ci0JfSBlbHNlIGlmIChvc3NfY2hhbm5lbCA9PSBTT1VORF9NSVhFUl9TUEVBS0VSKSB7Ci0JCWxlZnQgPSAoKDEwMCAtIGxlZnQpICogbWgtPnNjYWxlKSAvIDEwMDsKLQkJaWYgKGxlZnQgPj0gbWgtPnNjYWxlKQotCQkJbGVmdCA9IG1oLT5zY2FsZS0xOwotCQl2YWwgPSBsZWZ0IDw8IDE7Ci0JfSBlbHNlIGlmIChvc3NfY2hhbm5lbCA9PSBTT1VORF9NSVhFUl9QSE9ORUlOKSB7Ci0JCWxlZnQgPSAoKDEwMCAtIGxlZnQpICogbWgtPnNjYWxlKSAvIDEwMDsKLQkJaWYgKGxlZnQgPj0gbWgtPnNjYWxlKQotCQkJbGVmdCA9IG1oLT5zY2FsZS0xOwotCQl2YWwgPSBsZWZ0OwotCX0gZWxzZSBpZiAob3NzX2NoYW5uZWwgPT0gU09VTkRfTUlYRVJfUEhPTkVPVVQpIHsKLQkJc2NhbGUgPSAoMSA8PCBjb2RlYy0+Yml0X3Jlc29sdXRpb24pOwotCQlsZWZ0ID0gKCgxMDAgLSBsZWZ0KSAqIHNjYWxlKSAvIDEwMDsKLQkJaWYgKGxlZnQgPj0gbWgtPnNjYWxlKQotCQkJbGVmdCA9IG1oLT5zY2FsZS0xOwotCQl2YWwgPSBsZWZ0OwotCX0gZWxzZSBpZiAob3NzX2NoYW5uZWwgPT0gU09VTkRfTUlYRVJfTUlDKSB7Ci0JCXZhbCA9IGNvZGVjLT5jb2RlY19yZWFkKGNvZGVjICwgbWgtPm9mZnNldCkgJiB+MHg4MDFmOwotCQlsZWZ0ID0gKCgxMDAgLSBsZWZ0KSAqIG1oLT5zY2FsZSkgLyAxMDA7Ci0JCWlmIChsZWZ0ID49IG1oLT5zY2FsZSkKLQkJCWxlZnQgPSBtaC0+c2NhbGUtMTsKLQkJdmFsIHw9IGxlZnQ7Ci0JCS8qICB0aGUgbG93IGJpdCBpcyBvcHRpb25hbCBpbiB0aGUgdG9uZSBzbGlkZXJzIGFuZCBtYXNraW5nCi0JCSAgICBpdCBsZXRzIHVzIGF2b2lkIHRoZSAweGYgJ2J5cGFzcycuLiAqLwotCX0KLSNpZmRlZiBERUJVRwotCXByaW50aygiIDB4JTA0eCIsIHZhbCk7Ci0jZW5kaWYKLQotCWNvZGVjLT5jb2RlY193cml0ZShjb2RlYywgbWgtPm9mZnNldCwgdmFsKTsKLQotI2lmZGVmIERFQlVHCi0JdmFsID0gY29kZWMtPmNvZGVjX3JlYWQoY29kZWMsIG1oLT5vZmZzZXQpOwotCXByaW50aygiIC0+IDB4JTA0eFxuIiwgdmFsKTsKLSNlbmRpZgotfQotCi0vKiBhIHRoaW4gd3JhcHBlciBmb3Igd3JpdGVfbWl4ZXIgKi8KLXN0YXRpYyB2b2lkIGFjOTdfc2V0X21peGVyKHN0cnVjdCBhYzk3X2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IG9zc19taXhlciwgdW5zaWduZWQgaW50IHZhbCApIAotewotCXVuc2lnbmVkIGludCBsZWZ0LHJpZ2h0OwotCi0JLyogY2xlYW5zZSBpbnB1dCBhIGxpdHRsZSAqLwotCXJpZ2h0ID0gKCh2YWwgPj4gOCkgICYgMHhmZikgOwotCWxlZnQgPSAodmFsICAmIDB4ZmYpIDsKLQotCWlmIChyaWdodCA+IDEwMCkgcmlnaHQgPSAxMDA7Ci0JaWYgKGxlZnQgPiAxMDApIGxlZnQgPSAxMDA7Ci0KLQljb2RlYy0+bWl4ZXJfc3RhdGVbb3NzX21peGVyXSA9IChyaWdodCA8PCA4KSB8IGxlZnQ7Ci0JY29kZWMtPndyaXRlX21peGVyKGNvZGVjLCBvc3NfbWl4ZXIsIGxlZnQsIHJpZ2h0KTsKLX0KLQotLyogcmVhZCBvciB3cml0ZSB0aGUgcmVjbWFzaywgdGhlIGFjOTcgY2FuIHJlYWxseSBoYXZlIGxlZnQgYW5kIHJpZ2h0IHJlY29yZGluZwotICAgaW5wdXRzIGluZGVwZW5kZW50bHkgc2V0LCBidXQgT1NTIGRvZXNuJ3Qgc2VlbSB0byB3YW50IHVzIHRvIGV4cHJlc3MgdGhhdCB0bwotICAgdGhlIHVzZXIuIHRoZSBjYWxsZXIgZ3VhcmFudGVlcyB0aGF0IHdlIGhhdmUgYSBzdXBwb3J0ZWQgYml0IHNldCwgYW5kIHRoZXkKLSAgIG11c3QgYmUgaG9sZGluZyB0aGUgY2FyZCdzIHNwaW5sb2NrICovCi1zdGF0aWMgaW50IGFjOTdfcmVjbWFza19pbyhzdHJ1Y3QgYWM5N19jb2RlYyAqY29kZWMsIGludCBydywgaW50IG1hc2spIAotewotCXVuc2lnbmVkIGludCB2YWw7Ci0KLQlpZiAocncpIHsKLQkJLyogcmVhZCBpdCBmcm9tIHRoZSBjYXJkICovCi0JCXZhbCA9IGNvZGVjLT5jb2RlY19yZWFkKGNvZGVjLCBBQzk3X1JFQ09SRF9TRUxFQ1QpOwotI2lmZGVmIERFQlVHCi0JCXByaW50aygiYWM5N19jb2RlYzogYWM5NyByZWNtYXNrIHRvIHNldCB0byAweCUwNHhcbiIsIHZhbCk7Ci0jZW5kaWYKLQkJcmV0dXJuICgxIDw8IGFjOTdfcm0yb3NzW3ZhbCAmIDB4MDddKTsKLQl9Ci0KLQkvKiBlbHNlLCB3cml0ZSB0aGUgZmlyc3Qgc2V0IGluIHRoZSBtYXNrIGFzIHRoZQotCSAgIG91dHB1dCAqLwkKLQkvKiBjbGVhciBvdXQgY3VycmVudCBzZXQgdmFsdWUgZmlyc3QgKEFDOTcgc3VwcG9ydHMgb25seSAxIGlucHV0ISkgKi8KLQl2YWwgPSAoMSA8PCBhYzk3X3JtMm9zc1tjb2RlYy0+Y29kZWNfcmVhZChjb2RlYywgQUM5N19SRUNPUkRfU0VMRUNUKSAmIDB4MDddKTsKLQlpZiAobWFzayAhPSB2YWwpCi0JICAgIG1hc2sgJj0gfnZhbDsKLSAgICAgICAKLQl2YWwgPSBmZnMobWFzayk7IAotCXZhbCA9IGFjOTdfb3NzX3JtW3ZhbC0xXTsKLQl2YWwgfD0gdmFsIDw8IDg7ICAvKiBzZXQgYm90aCBjaGFubmVscyAqLwotCi0jaWZkZWYgREVCVUcKLQlwcmludGsoImFjOTdfY29kZWM6IHNldHRpbmcgYWM5NyByZWNtYXNrIHRvIDB4JTA0eFxuIiwgdmFsKTsKLSNlbmRpZgotCi0JY29kZWMtPmNvZGVjX3dyaXRlKGNvZGVjLCBBQzk3X1JFQ09SRF9TRUxFQ1QsIHZhbCk7Ci0KLQlyZXR1cm4gMDsKLX07Ci0KLXN0YXRpYyBpbnQgYWM5N19taXhlcl9pb2N0bChzdHJ1Y3QgYWM5N19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCWludCBpLCB2YWwgPSAwOwotCi0JaWYgKGNtZCA9PSBTT1VORF9NSVhFUl9JTkZPKSB7Ci0JCW1peGVyX2luZm8gaW5mbzsKLQkJbWVtc2V0KCZpbmZvLCAwLCBzaXplb2YoaW5mbykpOwotCQlzdHJsY3B5KGluZm8uaWQsIGNvZGVjLT5uYW1lLCBzaXplb2YoaW5mby5pZCkpOwotCQlzdHJsY3B5KGluZm8ubmFtZSwgY29kZWMtPm5hbWUsIHNpemVvZihpbmZvLm5hbWUpKTsKLQkJaW5mby5tb2RpZnlfY291bnRlciA9IGNvZGVjLT5tb2RjbnQ7Ci0JCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmaW5mbywgc2l6ZW9mKGluZm8pKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlyZXR1cm4gMDsKLQl9Ci0JaWYgKGNtZCA9PSBTT1VORF9PTERfTUlYRVJfSU5GTykgewotCQlfb2xkX21peGVyX2luZm8gaW5mbzsKLQkJbWVtc2V0KCZpbmZvLCAwLCBzaXplb2YoaW5mbykpOwotCQlzdHJsY3B5KGluZm8uaWQsIGNvZGVjLT5uYW1lLCBzaXplb2YoaW5mby5pZCkpOwotCQlzdHJsY3B5KGluZm8ubmFtZSwgY29kZWMtPm5hbWUsIHNpemVvZihpbmZvLm5hbWUpKTsKLQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZpbmZvLCBzaXplb2YoaW5mbykpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChfSU9DX1RZUEUoY21kKSAhPSAnTScgfHwgX1NJT0NfU0laRShjbWQpICE9IHNpemVvZihpbnQpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChjbWQgPT0gT1NTX0dFVFZFUlNJT04pCi0JCXJldHVybiBwdXRfdXNlcihTT1VORF9WRVJTSU9OLCAoaW50IF9fdXNlciAqKWFyZyk7Ci0KLQlpZiAoX1NJT0NfRElSKGNtZCkgPT0gX1NJT0NfUkVBRCkgewotCQlzd2l0Y2ggKF9JT0NfTlIoY21kKSkgewotCQljYXNlIFNPVU5EX01JWEVSX1JFQ1NSQzogLyogZ2l2ZSB0aGVtIHRoZSBjdXJyZW50IHJlY29yZCBzb3VyY2UgKi8KLQkJCWlmICghY29kZWMtPnJlY21hc2tfaW8pIHsKLQkJCQl2YWwgPSAwOwotCQkJfSBlbHNlIHsKLQkJCQl2YWwgPSBjb2RlYy0+cmVjbWFza19pbyhjb2RlYywgMSwgMCk7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQljYXNlIFNPVU5EX01JWEVSX0RFVk1BU0s6IC8qIGdpdmUgdGhlbSB0aGUgc3VwcG9ydGVkIG1peGVycyAqLwotCQkJdmFsID0gY29kZWMtPnN1cHBvcnRlZF9taXhlcnM7Ci0JCQlicmVhazsKLQotCQljYXNlIFNPVU5EX01JWEVSX1JFQ01BU0s6IC8qIEFyZyBjb250YWlucyBhIGJpdCBmb3IgZWFjaCBzdXBwb3J0ZWQgcmVjb3JkaW5nIHNvdXJjZSAqLwotCQkJdmFsID0gY29kZWMtPnJlY29yZF9zb3VyY2VzOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBTT1VORF9NSVhFUl9TVEVSRU9ERVZTOiAvKiBNaXhlciBjaGFubmVscyBzdXBwb3J0aW5nIHN0ZXJlbyAqLwotCQkJdmFsID0gY29kZWMtPnN0ZXJlb19taXhlcnM7Ci0JCQlicmVhazsKLQotCQljYXNlIFNPVU5EX01JWEVSX0NBUFM6Ci0JCQl2YWwgPSBTT1VORF9DQVBfRVhDTF9JTlBVVDsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6IC8qIHJlYWQgYSBzcGVjaWZpYyBtaXhlciAqLwotCQkJaSA9IF9JT0NfTlIoY21kKTsKLQotCQkJaWYgKCFzdXBwb3J0ZWRfbWl4ZXIoY29kZWMsIGkpKSAKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkJLyogZG8gd2UgZXZlciB3YW50IHRvIHRvdWNoIHRoZSBoYXJkd2FyZT8gKi8KLQkJICAgICAgICAvKiB2YWwgPSBjb2RlYy0+cmVhZF9taXhlcihjb2RlYywgaSk7ICovCi0JCQl2YWwgPSBjb2RlYy0+bWl4ZXJfc3RhdGVbaV07Ci0gCQkJYnJlYWs7Ci0JCX0KLQkJcmV0dXJuIHB1dF91c2VyKHZhbCwgKGludCBfX3VzZXIgKilhcmcpOwotCX0KLQotCWlmIChfU0lPQ19ESVIoY21kKSA9PSAoX1NJT0NfV1JJVEV8X1NJT0NfUkVBRCkpIHsKLQkJY29kZWMtPm1vZGNudCsrOwotCQlpZiAoZ2V0X3VzZXIodmFsLCAoaW50IF9fdXNlciAqKWFyZykpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQotCQlzd2l0Y2ggKF9JT0NfTlIoY21kKSkgewotCQljYXNlIFNPVU5EX01JWEVSX1JFQ1NSQzogLyogQXJnIGNvbnRhaW5zIGEgYml0IGZvciBlYWNoIHJlY29yZGluZyBzb3VyY2UgKi8KLQkJCWlmICghY29kZWMtPnJlY21hc2tfaW8pIHJldHVybiAtRUlOVkFMOwotCQkJaWYgKCF2YWwpIHJldHVybiAwOwotCQkJaWYgKCEodmFsICY9IGNvZGVjLT5yZWNvcmRfc291cmNlcykpIHJldHVybiAtRUlOVkFMOwotCi0JCQljb2RlYy0+cmVjbWFza19pbyhjb2RlYywgMCwgdmFsKTsKLQotCQkJcmV0dXJuIDA7Ci0JCWRlZmF1bHQ6IC8qIHdyaXRlIGEgc3BlY2lmaWMgbWl4ZXIgKi8KLQkJCWkgPSBfSU9DX05SKGNtZCk7Ci0KLQkJCWlmICghc3VwcG9ydGVkX21peGVyKGNvZGVjLCBpKSkgCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJCWFjOTdfc2V0X21peGVyKGNvZGVjLCBpLCB2YWwpOwotCi0JCQlyZXR1cm4gMDsKLQkJfQotCX0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotLyoqCi0gKgljb2RlY19pZAktICBUdXJuIGlkMS9pZDIgaW50byBhIFBuUCBzdHJpbmcKLSAqCUBpZDE6IFZlbmRvciBJRDEKLSAqCUBpZDI6IFZlbmRvciBJRDIKLSAqCUBidWY6IENPREVDX0lEX0JVRlNaIGJ5dGUgYnVmZmVyCi0gKgotICoJRmlsbHMgYnVmIHdpdGggYSB6ZXJvIHRlcm1pbmF0ZWQgUG5QIGlkZW50IHN0cmluZyBmb3IgdGhlIGlkMS9pZDIKLSAqCXBhaXIuIEZvciBjb252ZW5pZW5jZSB0aGUgcmV0dXJuIGlzIHRoZSBwYXNzZWQgaW4gYnVmZmVyIHBvaW50ZXIuCi0gKi8KLSAKLXN0YXRpYyBjaGFyICpjb2RlY19pZCh1MTYgaWQxLCB1MTYgaWQyLCBjaGFyICpidWYpCi17Ci0JaWYoaWQxJjB4ODA4MCkgewotCQlzbnByaW50ZihidWYsIENPREVDX0lEX0JVRlNaLCAiMHglMDR4OjB4JTA0eCIsIGlkMSwgaWQyKTsKLQl9IGVsc2UgewotCQlidWZbMF0gPSAoaWQxID4+IDgpOwotCQlidWZbMV0gPSAoaWQxICYgMHhGRik7Ci0JCWJ1ZlsyXSA9IChpZDIgPj4gOCk7Ci0JCXNucHJpbnRmKGJ1ZiszLCBDT0RFQ19JRF9CVUZTWiAtIDMsICIlZCIsIGlkMiYweEZGKTsKLQl9Ci0JcmV0dXJuIGJ1ZjsKLX0KLSAKLS8qKgotICoJYWM5N19jaGVja19tb2RlbSAtIENoZWNrIGlmIHRoZSBDb2RlYyBpcyBhIG1vZGVtCi0gKglAY29kZWM6IGNvZGVjIHRvIGNoZWNrCi0gKgotICoJUmV0dXJuIHRydWUgaWYgdGhlIGRldmljZSBpcyBhbiBBQzk3IDEuMCBvciBBQzk3IDIuMCBtb2RlbQotICovCi0gCi1zdGF0aWMgaW50IGFjOTdfY2hlY2tfbW9kZW0oc3RydWN0IGFjOTdfY29kZWMgKmNvZGVjKQotewotCS8qIENoZWNrIGZvciBhbiBBQzk3IDEuMCBzb2Z0IG1vZGVtIChJRDEpICovCi0JaWYoY29kZWMtPmNvZGVjX3JlYWQoY29kZWMsIEFDOTdfUkVTRVQpICYgMikKLQkJcmV0dXJuIDE7Ci0JLyogQ2hlY2sgZm9yIGFuIEFDOTcgMi54IHNvZnQgbW9kZW0gKi8KLQljb2RlYy0+Y29kZWNfd3JpdGUoY29kZWMsIEFDOTdfRVhURU5ERURfTU9ERU1fSUQsIDBMKTsKLQlpZihjb2RlYy0+Y29kZWNfcmVhZChjb2RlYywgQUM5N19FWFRFTkRFRF9NT0RFTV9JRCkgJiAxKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKLX0KLQotCi0vKioKLSAqCWFjOTdfYWxsb2NfY29kZWMgLSBBbGxvY2F0ZSBhbiBBQzk3IGNvZGVjCi0gKgotICoJUmV0dXJucyBhIG5ldyBBQzk3IGNvZGVjIHN0cnVjdHVyZS4gQUM5NyBjb2RlY3MgbWF5IGJlY29tZQotICoJcmVmY291bnRlZCBzb29uIHNvIHRoaXMgaW50ZXJmYWNlIGlzIG5lZWRlZC4gUmV0dXJucyB3aXRoCi0gKglvbmUgcmVmZXJlbmNlIHRha2VuLgotICovCi0gCi1zdHJ1Y3QgYWM5N19jb2RlYyAqYWM5N19hbGxvY19jb2RlYyh2b2lkKQotewotCXN0cnVjdCBhYzk3X2NvZGVjICpjb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhYzk3X2NvZGVjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYoIWNvZGVjKQotCQlyZXR1cm4gTlVMTDsKLQotCXNwaW5fbG9ja19pbml0KCZjb2RlYy0+bG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5saXN0KTsKLQlyZXR1cm4gY29kZWM7Ci19Ci0KLUVYUE9SVF9TWU1CT0woYWM5N19hbGxvY19jb2RlYyk7Ci0KLS8qKgotICoJYWM5N19yZWxlYXNlX2NvZGVjIC0JUmVsZWFzZSBhbiBBQzk3IGNvZGVjCi0gKglAY29kZWM6IGNvZGVjIHRvIHJlbGVhc2UKLSAqCi0gKglSZWxlYXNlIGFuIGFsbG9jYXRlZCBBQzk3IGNvZGVjLiBUaGlzIHdpbGwgYmUgcmVmY291bnRlZCBpbgotICoJdGltZSBidXQgZm9yIHRoZSBtb21lbnQgaXMgdHJpdmlhbC4gQ2FsbHMgdGhlIHVucmVnaXN0ZXIKLSAqCWhhbmRsZXIgaWYgdGhlIGNvZGVjIGlzIG5vdyBkZWZ1bmN0LgotICovCi0gCi12b2lkIGFjOTdfcmVsZWFzZV9jb2RlYyhzdHJ1Y3QgYWM5N19jb2RlYyAqY29kZWMpCi17Ci0JLyogUmVtb3ZlIGZyb20gdGhlIGxpc3QgZmlyc3QsIHdlIGRvbid0IHdhbnQgdG8gYmUKLQkgICAicmVkaXNjb3ZlcmVkIiAqLwotCW11dGV4X2xvY2soJmNvZGVjX211dGV4KTsKLQlsaXN0X2RlbCgmY29kZWMtPmxpc3QpOwotCW11dGV4X3VubG9jaygmY29kZWNfbXV0ZXgpOwotCS8qCi0JICoJVGhlIGRyaXZlciBuZWVkcyB0byBkZWFsIHdpdGggaW50ZXJuYWwKLQkgKglsb2NraW5nIHRvIGF2b2lkIGFjY2lkZW50cyBoZXJlLiAKLQkgKi8KLQlpZihjb2RlYy0+ZHJpdmVyKQotCQljb2RlYy0+ZHJpdmVyLT5yZW1vdmUoY29kZWMsIGNvZGVjLT5kcml2ZXIpOwotCWtmcmVlKGNvZGVjKTsKLX0KLQotRVhQT1JUX1NZTUJPTChhYzk3X3JlbGVhc2VfY29kZWMpOwotCi0vKioKLSAqCWFjOTdfcHJvYmVfY29kZWMgLSBJbml0aWFsaXplIGFuZCBzZXR1cCBBQzk3LWNvbXBhdGlibGUgY29kZWMKLSAqCUBjb2RlYzogKGluL291dCkgS2VybmVsIGluZm8gZm9yIGEgc2luZ2xlIEFDOTcgY29kZWMKLSAqCi0gKglSZXNldCB0aGUgQUM5NyBjb2RlYywgdGhlbiBpbml0aWFsaXplIHRoZSBtaXhlciBhbmQKLSAqCXRoZSByZXN0IG9mIHRoZSBAY29kZWMgc3RydWN0dXJlLgotICoKLSAqCVRoZSBjb2RlY19yZWFkIGFuZCBjb2RlY193cml0ZSBmaWVsZHMgb2YgQGNvZGVjIGFyZQotICoJcmVxdWlyZWQgdG8gYmUgc2V0dXAgYW5kIHdvcmtpbmcgd2hlbiB0aGlzIGZ1bmN0aW9uCi0gKglpcyBjYWxsZWQuICBBbGwgb3RoZXIgZmllbGRzIGFyZSBzZXQgYnkgdGhpcyBmdW5jdGlvbi4KLSAqCi0gKgljb2RlY193YWl0IGZpZWxkIG9mIEBjb2RlYyBjYW4gb3B0aW9uYWxseSBiZSBwcm92aWRlZAotICoJd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uICBJZiBjb2RlY193YWl0IGlzIG5vdCAlTlVMTCwKLSAqCXRoaXMgZnVuY3Rpb24gd2lsbCBjYWxsIGNvZGVjX3dhaXQgYW55IHRpbWUgaXQgaXMKLSAqCW5lY2Vzc2FyeSB0byB3YWl0IGZvciB0aGUgYXVkaW8gY2hpcCB0byByZWFjaCB0aGUKLSAqCWNvZGVjLXJlYWR5IHN0YXRlLiAgSWYgY29kZWNfd2FpdCBpcyAlTlVMTCwgdGhlbgotICoJdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gY2FsbCBzY2hlZHVsZV90aW1lb3V0LgotICoJQ3VycmVudGx5IGNvZGVjX3dhaXQgaXMgdXNlZCB0byB3YWl0IGZvciBBQzk3IGNvZGVjCi0gKglyZXNldCB0byBjb21wbGV0ZS4gCi0gKgotICogICAgIFNvbWUgY29kZWNzIHdpbGwgcG93ZXIgZG93biB3aGVuIGEgcmVnaXN0ZXIgcmVzZXQgaXMKLSAqICAgICBwZXJmb3JtZWQuIFdlIG5vdyBjaGVjayBmb3Igc3VjaCBjb2RlY3MuCi0gKgotICoJUmV0dXJucyAxICh0cnVlKSBvbiBzdWNjZXNzLCBvciAwIChmYWxzZSkgb24gZmFpbHVyZS4KLSAqLwotIAotaW50IGFjOTdfcHJvYmVfY29kZWMoc3RydWN0IGFjOTdfY29kZWMgKmNvZGVjKQotewotCXUxNiBpZDEsIGlkMjsKLQl1MTYgYXVkaW87Ci0JaW50IGk7Ci0JY2hhciBjaWRidWZbQ09ERUNfSURfQlVGU1pdOwotCXUxNiBmOwotCXN0cnVjdCBsaXN0X2hlYWQgKmw7Ci0Jc3RydWN0IGFjOTdfZHJpdmVyICpkOwotCQotCS8qIHdhaXQgZm9yIGNvZGVjLXJlYWR5IHN0YXRlICovCi0JaWYgKGNvZGVjLT5jb2RlY193YWl0KQotCQljb2RlYy0+Y29kZWNfd2FpdChjb2RlYyk7Ci0JZWxzZQotCQl1ZGVsYXkoMTApOwotCi0JLyogd2lsbCB0aGUgY29kZWMgcG93ZXIgZG93biBpZiByZWdpc3RlciByZXNldCA/ICovCi0JaWQxID0gY29kZWMtPmNvZGVjX3JlYWQoY29kZWMsIEFDOTdfVkVORE9SX0lEMSk7Ci0JaWQyID0gY29kZWMtPmNvZGVjX3JlYWQoY29kZWMsIEFDOTdfVkVORE9SX0lEMik7Ci0JY29kZWMtPm5hbWUgPSBOVUxMOwotCWNvZGVjLT5jb2RlY19vcHMgPSAmbnVsbF9vcHM7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWM5N19jb2RlY19pZHMpOyBpKyspIHsKLQkJaWYgKGFjOTdfY29kZWNfaWRzW2ldLmlkID09ICgoaWQxIDw8IDE2KSB8IGlkMikpIHsKLQkJCWNvZGVjLT50eXBlID0gYWM5N19jb2RlY19pZHNbaV0uaWQ7Ci0JCQljb2RlYy0+bmFtZSA9IGFjOTdfY29kZWNfaWRzW2ldLm5hbWU7Ci0JCQljb2RlYy0+Y29kZWNfb3BzID0gYWM5N19jb2RlY19pZHNbaV0ub3BzOwotCQkJY29kZWMtPmZsYWdzID0gYWM5N19jb2RlY19pZHNbaV0uZmxhZ3M7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWNvZGVjLT5tb2RlbCA9IChpZDEgPDwgMTYpIHwgaWQyOwotCWlmICgoY29kZWMtPmZsYWdzICYgQUM5N19ERUZBVUxUX1BPV0VSX09GRikgPT0gMCkgewotCQkvKiByZXNldCBjb2RlYyBhbmQgd2FpdCBmb3IgdGhlIHJlYWR5IGJpdCBiZWZvcmUgd2UgY29udGludWUgKi8KLQkJY29kZWMtPmNvZGVjX3dyaXRlKGNvZGVjLCBBQzk3X1JFU0VULCAwTCk7Ci0JCWlmIChjb2RlYy0+Y29kZWNfd2FpdCkKLQkJCWNvZGVjLT5jb2RlY193YWl0KGNvZGVjKTsKLQkJZWxzZQotCQkJdWRlbGF5KDEwKTsKLQl9Ci0KLQkvKiBwcm9iaW5nIEFDOTcgY29kZWMsIEFDOTcgMi4wIHNheXMgdGhhdCBiaXQgMTUgb2YgcmVnaXN0ZXIgMHgwMCAocmVzZXQpIHNob3VsZAotCSAqIGJlIHJlYWQgemVyby4KLQkgKgotCSAqIEZJWE1FOiBpcyB0aGUgZm9sbG93aW5nIGNvbW1lbnQgb3V0ZGF0ZWQ/ICAtamdhcnppawotCSAqIFByb2Jpbmcgb2YgQUM5NyBpbiB0aGlzIHdheSBpcyBub3QgcmVsaWFibGUsIGl0IGlzIG5vdCBldmVuIFNBRkUgISEKLQkgKi8KLQlpZiAoKGF1ZGlvID0gY29kZWMtPmNvZGVjX3JlYWQoY29kZWMsIEFDOTdfUkVTRVQpKSAmIDB4ODAwMCkgewotCQlwcmludGsoS0VSTl9FUlIgImFjOTdfY29kZWM6ICVzIGFjOTcgY29kZWMgbm90IHByZXNlbnRcbiIsCi0JCSAgICAgICAoY29kZWMtPmlkICYgMHgyKSA/IChjb2RlYy0+aWQmMSA/ICI0dGgiIDogIlRlcnRpYXJ5IikKLQkJICAgICAgIDogKGNvZGVjLT5pZCYxID8gIlNlY29uZGFyeSI6ICAiUHJpbWFyeSIpKTsKLQkJcmV0dXJuIDA7Ci0JfQotCQotCS8qIHByb2JlIGZvciBNb2RlbSBDb2RlYyAqLwotCWNvZGVjLT5tb2RlbSA9IGFjOTdfY2hlY2tfbW9kZW0oY29kZWMpOwotCi0JLyogZW5hYmxlIFNQRElGICovCi0JZiA9IGNvZGVjLT5jb2RlY19yZWFkKGNvZGVjLCBBQzk3X0VYVEVOREVEX1NUQVRVUyk7Ci0JaWYoKGNvZGVjLT5jb2RlY19vcHMgPT0gJm51bGxfb3BzKSAmJiAoZiAmIDQpKQotCQljb2RlYy0+Y29kZWNfb3BzID0gJmRlZmF1bHRfZGlnaXRhbF9vcHM7Ci0JCi0JLyogQSBkZXZpY2Ugd2hpY2ggdGhpbmtzIGl0cyBhIG1vZGVtIGJ1dCBpc24ndCAqLwotCWlmKGNvZGVjLT5mbGFncyAmIEFDOTdfREVMVURFRF9NT0RFTSkKLQkJY29kZWMtPm1vZGVtID0gMDsKLQkJCi0JaWYgKGNvZGVjLT5uYW1lID09IE5VTEwpCi0JCWNvZGVjLT5uYW1lID0gIlVua25vd24iOwotCXByaW50ayhLRVJOX0lORk8gImFjOTdfY29kZWM6IEFDOTcgJXMgY29kZWMsIGlkOiAlcyAoJXMpXG4iLCAKLQkJY29kZWMtPm1vZGVtID8gIk1vZGVtIiA6IChhdWRpbyA/ICJBdWRpbyIgOiAiIiksCi0JICAgICAgIGNvZGVjX2lkKGlkMSwgaWQyLCBjaWRidWYpLCBjb2RlYy0+bmFtZSk7Ci0KLQlpZighYWM5N19pbml0X21peGVyKGNvZGVjKSkKLQkJcmV0dXJuIDA7Ci0JCQotCS8qIAotCSAqCUF0dGFjaCBsYXN0IHNvIHRoZSBjYWxsZXIgY2FuIG92ZXJyaWRlIHRoZSBtaXhlcgotCSAqCWNhbGxiYWNrcy4KLQkgKi8KLQkgCi0JbXV0ZXhfbG9jaygmY29kZWNfbXV0ZXgpOwotCWxpc3RfYWRkKCZjb2RlYy0+bGlzdCwgJmNvZGVjcyk7Ci0KLQlsaXN0X2Zvcl9lYWNoKGwsICZjb2RlY19kcml2ZXJzKSB7Ci0JCWQgPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCBhYzk3X2RyaXZlciwgbGlzdCk7Ci0JCWlmICgoY29kZWMtPm1vZGVsIF4gZC0+Y29kZWNfaWQpICYgZC0+Y29kZWNfbWFzaykKLQkJCWNvbnRpbnVlOwotCQlpZihkLT5wcm9iZShjb2RlYywgZCkgPT0gMCkKLQkJewotCQkJY29kZWMtPmRyaXZlciA9IGQ7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCW11dGV4X3VubG9jaygmY29kZWNfbXV0ZXgpOwotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IGFjOTdfaW5pdF9taXhlcihzdHJ1Y3QgYWM5N19jb2RlYyAqY29kZWMpCi17Ci0JdTE2IGNhcDsKLQlpbnQgaTsKLQotCWNhcCA9IGNvZGVjLT5jb2RlY19yZWFkKGNvZGVjLCBBQzk3X1JFU0VUKTsKLQotCS8qIG1peGVyIG1hc2tzICovCi0JY29kZWMtPnN1cHBvcnRlZF9taXhlcnMgPSBBQzk3X1NVUFBPUlRFRF9NQVNLOwotCWNvZGVjLT5zdGVyZW9fbWl4ZXJzID0gQUM5N19TVEVSRU9fTUFTSzsKLQljb2RlYy0+cmVjb3JkX3NvdXJjZXMgPSBBQzk3X1JFQ09SRF9NQVNLOwotCWlmICghKGNhcCAmIDB4MDQpKQotCQljb2RlYy0+c3VwcG9ydGVkX21peGVycyAmPSB+KFNPVU5EX01BU0tfQkFTU3xTT1VORF9NQVNLX1RSRUJMRSk7Ci0JaWYgKCEoY2FwICYgMHgxMCkpCi0JCWNvZGVjLT5zdXBwb3J0ZWRfbWl4ZXJzICY9IH5TT1VORF9NQVNLX0FMVFBDTTsKLQotCi0JLyogZGV0ZWN0IGJpdCByZXNvbHV0aW9uICovCi0JY29kZWMtPmNvZGVjX3dyaXRlKGNvZGVjLCBBQzk3X01BU1RFUl9WT0xfU1RFUkVPLCAweDIwMjApOwotCWlmKGNvZGVjLT5jb2RlY19yZWFkKGNvZGVjLCBBQzk3X01BU1RFUl9WT0xfU1RFUkVPKSA9PSAweDIwMjApCi0JCWNvZGVjLT5iaXRfcmVzb2x1dGlvbiA9IDY7Ci0JZWxzZQotCQljb2RlYy0+Yml0X3Jlc29sdXRpb24gPSA1OwotCi0JLyogZ2VuZXJpYyBPU1MgdG8gQUM5NyB3cmFwcGVyICovCi0JY29kZWMtPnJlYWRfbWl4ZXIgPSBhYzk3X3JlYWRfbWl4ZXI7Ci0JY29kZWMtPndyaXRlX21peGVyID0gYWM5N193cml0ZV9taXhlcjsKLQljb2RlYy0+cmVjbWFza19pbyA9IGFjOTdfcmVjbWFza19pbzsKLQljb2RlYy0+bWl4ZXJfaW9jdGwgPSBhYzk3X21peGVyX2lvY3RsOwotCi0JLyogaW5pdGlhbGl6ZSBtaXhlciBjaGFubmVsIHZvbHVtZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgU09VTkRfTUlYRVJfTlJERVZJQ0VTOyBpKyspIHsKLQkJc3RydWN0IG1peGVyX2RlZmF1bHRzICptZCA9ICZtaXhlcl9kZWZhdWx0c1tpXTsKLQkJaWYgKG1kLT5taXhlciA9PSAtMSkgCi0JCQlicmVhazsKLQkJaWYgKCFzdXBwb3J0ZWRfbWl4ZXIoY29kZWMsIG1kLT5taXhlcikpIAotCQkJY29udGludWU7Ci0JCWFjOTdfc2V0X21peGVyKGNvZGVjLCBtZC0+bWl4ZXIsIG1kLT52YWx1ZSk7Ci0JfQotCi0JLyogY29kZWMgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gZm9yIDQtNiBjaGFubmVsIG91dHB1dCBvciBzZWNvbmRhcnkgY29kZWMgc3R1ZmYgKi8KLQlpZiAoY29kZWMtPmNvZGVjX29wcy0+aW5pdCAhPSBOVUxMKSB7Ci0JCWNvZGVjLT5jb2RlY19vcHMtPmluaXQoY29kZWMpOwotCX0KLQotCS8qCi0JICoJVm9sdW1lIGlzIE1VVEUgb25seSBvbiB0aGlzIGRldmljZS4gV2UgaGF2ZSB0byBpbml0aWFsaXNlCi0JICoJaXQgYnV0IGl0cyB1c2VsZXNzIGJleW9uZCB0aGF0LgotCSAqLwotCWlmKGNvZGVjLT5mbGFncyAmIEFDOTdfTk9fUENNX1ZPTFVNRSkKLQl7Ci0JCWNvZGVjLT5zdXBwb3J0ZWRfbWl4ZXJzICY9IH5TT1VORF9NQVNLX1BDTTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQUM5NyBjb2RlYyBkb2VzIG5vdCBoYXZlIHByb3BlciB2b2x1bWUgc3VwcG9ydC5cbiIpOwotCX0KLQlyZXR1cm4gMTsKLX0KLQotI2RlZmluZSBBQzk3X1NJR01BVEVMX0FOQUxPRyAgICAweDZjCS8qIEFuYWxvZyBTcGVjaWFsICovCi0jZGVmaW5lIEFDOTdfU0lHTUFURUxfREFDMklOVkVSVCAweDZlCi0jZGVmaW5lIEFDOTdfU0lHTUFURUxfQklBUzEgICAgIDB4NzAKLSNkZWZpbmUgQUM5N19TSUdNQVRFTF9CSUFTMiAgICAgMHg3MgotI2RlZmluZSBBQzk3X1NJR01BVEVMX01VTFRJQ0hOICAweDc0CS8qIE11bHRpLUNoYW5uZWwgcHJvZ3JhbW1pbmcgKi8KLSNkZWZpbmUgQUM5N19TSUdNQVRFTF9DSUMxICAgICAgMHg3NgotI2RlZmluZSBBQzk3X1NJR01BVEVMX0NJQzIgICAgICAweDc4Ci0KLQotc3RhdGljIGludCBzaWdtYXRlbF85NzA4X2luaXQoc3RydWN0IGFjOTdfY29kZWMgKiBjb2RlYykKLXsKLQl1MTYgY29kZWM3MiwgY29kZWM2YzsKLQotCWNvZGVjNzIgPSBjb2RlYy0+Y29kZWNfcmVhZChjb2RlYywgQUM5N19TSUdNQVRFTF9CSUFTMikgJiAweDgwMDA7Ci0JY29kZWM2YyA9IGNvZGVjLT5jb2RlY19yZWFkKGNvZGVjLCBBQzk3X1NJR01BVEVMX0FOQUxPRyk7Ci0KLQlpZiAoKGNvZGVjNzI9PTApICYmIChjb2RlYzZjPT0wKSkgewotCQljb2RlYy0+Y29kZWNfd3JpdGUoY29kZWMsIEFDOTdfU0lHTUFURUxfQ0lDMSwgMHhhYmJhKTsKLQkJY29kZWMtPmNvZGVjX3dyaXRlKGNvZGVjLCBBQzk3X1NJR01BVEVMX0NJQzIsIDB4MTAwMCk7Ci0JCWNvZGVjLT5jb2RlY193cml0ZShjb2RlYywgQUM5N19TSUdNQVRFTF9CSUFTMSwgMHhhYmJhKTsKLQkJY29kZWMtPmNvZGVjX3dyaXRlKGNvZGVjLCBBQzk3X1NJR01BVEVMX0JJQVMyLCAweDAwMDcpOwotCX0gZWxzZSBpZiAoKGNvZGVjNzI9PTB4ODAwMCkgJiYgKGNvZGVjNmM9PTApKSB7Ci0JCWNvZGVjLT5jb2RlY193cml0ZShjb2RlYywgQUM5N19TSUdNQVRFTF9DSUMxLCAweGFiYmEpOwotCQljb2RlYy0+Y29kZWNfd3JpdGUoY29kZWMsIEFDOTdfU0lHTUFURUxfQ0lDMiwgMHgxMDAxKTsKLQkJY29kZWMtPmNvZGVjX3dyaXRlKGNvZGVjLCBBQzk3X1NJR01BVEVMX0RBQzJJTlZFUlQsIDB4MDAwOCk7Ci0JfSBlbHNlIGlmICgoY29kZWM3Mj09MHg4MDAwKSAmJiAoY29kZWM2Yz09MHgwMDgwKSkgewotCQkvKiBub3RoaW5nICovCi0JfQotCWNvZGVjLT5jb2RlY193cml0ZShjb2RlYywgQUM5N19TSUdNQVRFTF9NVUxUSUNITiwgMHgwMDAwKTsKLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IHNpZ21hdGVsXzk3MjFfaW5pdChzdHJ1Y3QgYWM5N19jb2RlYyAqIGNvZGVjKQotewotCS8qIE9ubHkgc2V0IHVwIHNlY29uZGFyeSBjb2RlYyAqLwotCWlmIChjb2RlYy0+aWQgPT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQljb2RlYy0+Y29kZWNfd3JpdGUoY29kZWMsIEFDOTdfU1VSUk9VTkRfTUFTVEVSLCAwTCk7Ci0KLQkvKiBpbml0aWFsaXplIFNpZ21hVGVsIFNUQUM5NzIxLzIzIGFzIHNlY29uZGFyeSBjb2RlYywgZGVjb2RpbmcgQUMgbGluawotCSAgIHNsb2MgMyw0ID0gMHgwMSwgc2xvdCA3LDggPSAweDAwLCAqLwotCWNvZGVjLT5jb2RlY193cml0ZShjb2RlYywgQUM5N19TSUdNQVRFTF9NVUxUSUNITiwgMHgwMCk7Ci0KLQkvKiB3ZSBkb24ndCBoYXZlIHRoZSBjcnlzdGFsIHdoZW4gd2UgYXJlIG9uIGFuIEFNUiBjYXJkLCBzbyB1c2UKLQkgICBCSVRfQ0xLIGFzIG91ciBjbG9jayBzb3VyY2UuIFdyaXRlIHRoZSBtYWdpYyB3b3JkIEFCQkEgYW5kIHJlYWQKLQkgICBiYWNrIHRvIGVuYWJsZSByZWdpc3RlciAweDc4ICovCi0JY29kZWMtPmNvZGVjX3dyaXRlKGNvZGVjLCBBQzk3X1NJR01BVEVMX0NJQzEsIDB4YWJiYSk7Ci0JY29kZWMtPmNvZGVjX3JlYWQoY29kZWMsIEFDOTdfU0lHTUFURUxfQ0lDMSk7Ci0KLQkvKiBzeW5jIGFsbCB0aGUgY2xvY2tzKi8KLQljb2RlYy0+Y29kZWNfd3JpdGUoY29kZWMsIEFDOTdfU0lHTUFURUxfQ0lDMiwgMHgzODAyKTsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQgc2lnbWF0ZWxfOTc0NF9pbml0KHN0cnVjdCBhYzk3X2NvZGVjICogY29kZWMpCi17Ci0JLy8gcGF0Y2ggZm9yIFNpZ21hVGVsCi0JY29kZWMtPmNvZGVjX3dyaXRlKGNvZGVjLCBBQzk3X1NJR01BVEVMX0NJQzEsIDB4YWJiYSk7Ci0JY29kZWMtPmNvZGVjX3dyaXRlKGNvZGVjLCBBQzk3X1NJR01BVEVMX0NJQzIsIDB4MDAwMCk7IC8vIGlzIHRoaXMgY29ycmVjdD8gLS1qawotCWNvZGVjLT5jb2RlY193cml0ZShjb2RlYywgQUM5N19TSUdNQVRFTF9CSUFTMSwgMHhhYmJhKTsKLQljb2RlYy0+Y29kZWNfd3JpdGUoY29kZWMsIEFDOTdfU0lHTUFURUxfQklBUzIsIDB4MDAwMik7Ci0JY29kZWMtPmNvZGVjX3dyaXRlKGNvZGVjLCBBQzk3X1NJR01BVEVMX01VTFRJQ0hOLCAweDAwMDApOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGNtZWRpYV9pbml0KHN0cnVjdCBhYzk3X2NvZGVjICpjb2RlYykKLXsKLQkvKiBJbml0aWFsaXNlIHRoZSBDTWVkaWEgOTczOSAqLwotCS8qCi0JCVdlIGNvdWxkIHNldCB2YXJpb3VzIG9wdGlvbnMgaGVyZQotCQlSZWdpc3RlciAweDIwIGJpdCAweDEwMCBzZXRzIG1pYyBhcyBjZW50ZXIgYmFzcwotCQlBbHNvIGRvIG11bHRpX2NoYW5uZWxfY3RybCAmPX4weDMwMDAgfD0weDEwMDAKLQkJCi0JCUZvciBub3cgd2Ugc2V0IHVwIHRoZSBHUElPIGFuZCBQQyBiZWVwIAotCSovCi0JCi0JdTE2IHY7Ci0JCi0JLyogTUlDICovCi0JY29kZWMtPmNvZGVjX3dyaXRlKGNvZGVjLCAweDY0LCAweDMwMDApOwotCXYgPSBjb2RlYy0+Y29kZWNfcmVhZChjb2RlYywgMHg2NCk7Ci0JdiAmPSB+MHg4MDAwOwotCWNvZGVjLT5jb2RlY193cml0ZShjb2RlYywgMHg2NCwgdik7Ci0JY29kZWMtPmNvZGVjX3dyaXRlKGNvZGVjLCAweDcwLCAweDAxMDApOwotCWNvZGVjLT5jb2RlY193cml0ZShjb2RlYywgMHg3MiwgMHgwMDIwKTsKLQlyZXR1cm4gMDsKLX0KLQkKLSNkZWZpbmUgQUM5N19XTTk3WFhfRk1JWEVSX1ZPTCAweDcyCi0jZGVmaW5lIEFDOTdfV005N1hYX1JNSVhFUl9WT0wgMHg3NAotI2RlZmluZSBBQzk3X1dNOTdYWF9URVNUIDB4NWEKLSNkZWZpbmUgQUM5N19XTTk3MDRfUlBDTV9WT0wgMHg3MAotI2RlZmluZSBBQzk3X1dNOTcxMV9PVVQzVk9MIDB4MTYKLQotc3RhdGljIGludCB3b2xmc29uX2luaXQwMyhzdHJ1Y3QgYWM5N19jb2RlYyAqIGNvZGVjKQotewotCS8qIHRoaXMgaXMga25vd24gdG8gd29yayBmb3IgdGhlIFZpZXdTb25pYyBWaWV3UGFkIDEwMDAgKi8KLQljb2RlYy0+Y29kZWNfd3JpdGUoY29kZWMsIEFDOTdfV005N1hYX0ZNSVhFUl9WT0wsIDB4MDgwOCk7Ci0JY29kZWMtPmNvZGVjX3dyaXRlKGNvZGVjLCBBQzk3X0dFTkVSQUxfUFVSUE9TRSwgMHg4MDAwKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3b2xmc29uX2luaXQwNChzdHJ1Y3QgYWM5N19jb2RlYyAqIGNvZGVjKQotewotCWNvZGVjLT5jb2RlY193cml0ZShjb2RlYywgQUM5N19XTTk3WFhfRk1JWEVSX1ZPTCwgMHgwODA4KTsKLQljb2RlYy0+Y29kZWNfd3JpdGUoY29kZWMsIEFDOTdfV005N1hYX1JNSVhFUl9WT0wsIDB4MDgwOCk7Ci0KLQkvLyBwYXRjaCBmb3IgRFZEIG5vaXNlCi0JY29kZWMtPmNvZGVjX3dyaXRlKGNvZGVjLCBBQzk3X1dNOTdYWF9URVNULCAweDAyMDApOwotCi0JLy8gaW5pdCB2b2wgYXMgUENNIHZvbAotCWNvZGVjLT5jb2RlY193cml0ZShjb2RlYywgQUM5N19XTTk3MDRfUlBDTV9WT0wsCi0JCWNvZGVjLT5jb2RlY19yZWFkKGNvZGVjLCBBQzk3X1BDTU9VVF9WT0wpKTsKLQotCS8qIHNldCByZWFyIHN1cnJvdW5kIHZvbHVtZSAqLwotCWNvZGVjLT5jb2RlY193cml0ZShjb2RlYywgQUM5N19TVVJST1VORF9NQVNURVIsIDB4MDAwMCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIFdNOTcwNSwgV005NzEwICovCi1zdGF0aWMgaW50IHdvbGZzb25faW5pdDA1KHN0cnVjdCBhYzk3X2NvZGVjICogY29kZWMpCi17Ci0JLyogc2V0IGZyb250IG1peGVyIHZvbHVtZSAqLwotCWNvZGVjLT5jb2RlY193cml0ZShjb2RlYywgQUM5N19XTTk3WFhfRk1JWEVSX1ZPTCwgMHgwODA4KTsKLQlyZXR1cm4gMDsKLX0KLQotLyogV005NzExLCBXTTk3MTIgKi8KLXN0YXRpYyBpbnQgd29sZnNvbl9pbml0MTEoc3RydWN0IGFjOTdfY29kZWMgKiBjb2RlYykKLXsKLQkvKiBzdG9wIHBvcCdzIGR1cmluZyBzdXNwZW5kL3Jlc3VtZSAqLwotCWNvZGVjLT5jb2RlY193cml0ZShjb2RlYywgQUM5N19XTTk3WFhfVEVTVCwKLQkJY29kZWMtPmNvZGVjX3JlYWQoY29kZWMsIEFDOTdfV005N1hYX1RFU1QpICYgMHhmZmJmKTsKLQotCS8qIHNldCBvdXQzIHZvbHVtZSAqLwotCWNvZGVjLT5jb2RlY193cml0ZShjb2RlYywgQUM5N19XTTk3MTFfT1VUM1ZPTCwgMHgwODA4KTsKLQlyZXR1cm4gMDsKLX0KLQotLyogV005NzEzICovCi1zdGF0aWMgaW50IHdvbGZzb25faW5pdDEzKHN0cnVjdCBhYzk3X2NvZGVjICogY29kZWMpCi17Ci0JY29kZWMtPmNvZGVjX3dyaXRlKGNvZGVjLCBBQzk3X1JFQ09SRF9HQUlOLCAweDAwYTApOwotCWNvZGVjLT5jb2RlY193cml0ZShjb2RlYywgQUM5N19QT1dFUl9DT05UUk9MLCAweDAwMDApOwotCWNvZGVjLT5jb2RlY193cml0ZShjb2RlYywgQUM5N19FWFRFTkRFRF9NT0RFTV9JRCwgMHhEQTAwKTsKLQljb2RlYy0+Y29kZWNfd3JpdGUoY29kZWMsIEFDOTdfRVhURU5EX01PREVNX1NUQVQsIDB4MzgxMCk7Ci0JY29kZWMtPmNvZGVjX3dyaXRlKGNvZGVjLCBBQzk3X1BIT05FX1ZPTCwgMHgwODA4KTsKLQljb2RlYy0+Y29kZWNfd3JpdGUoY29kZWMsIEFDOTdfUENCRUVQX1ZPTCwgMHgwODA4KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHRyaXRlY2hfaW5pdChzdHJ1Y3QgYWM5N19jb2RlYyAqIGNvZGVjKQotewotCWNvZGVjLT5jb2RlY193cml0ZShjb2RlYywgMHgyNiwgMHgwMzAwKTsKLQljb2RlYy0+Y29kZWNfd3JpdGUoY29kZWMsIDB4MjYsIDB4MDAwMCk7Ci0JY29kZWMtPmNvZGVjX3dyaXRlKGNvZGVjLCBBQzk3X1NVUlJPVU5EX01BU1RFUiwgMHgwMDAwKTsKLQljb2RlYy0+Y29kZWNfd3JpdGUoY29kZWMsIEFDOTdfUkVTRVJWRURfM0EsIDB4MDAwMCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyogY29waWVkIGZyb20gZHJpdmVycy9zb3VuZC9tYWVzdHJvLmMgKi8KLXN0YXRpYyBpbnQgdHJpdGVjaF9tYWVzdHJvX2luaXQoc3RydWN0IGFjOTdfY29kZWMgKiBjb2RlYykKLXsKLQkvKiBubyBpZGVhIHdoYXQgdGhpcyBkb2VzICovCi0JY29kZWMtPmNvZGVjX3dyaXRlKGNvZGVjLCAweDJBLCAweDAwMDEpOwotCWNvZGVjLT5jb2RlY193cml0ZShjb2RlYywgMHgyQywgMHgwMDAwKTsKLQljb2RlYy0+Y29kZWNfd3JpdGUoY29kZWMsIDB4MkMsIDBYRkZGRik7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotCi0vKiAKLSAqCVByZXNhcmlvNzAwIHdvcmthcm91bmQgCi0gKiAJZm9yIEphY2sgU2Vuc2UvU1BESUYgUmVnaXN0ZXIgbWlzLXNldHRpbmcgY2F1c2luZwotICoJbm8gYXVkaWJsZSBvdXRwdXQKLSAqCWJ5IFNhbnRpYWdvIE51bGxvIDA0LzA1LzIwMDIKLSAqLwotCi0jZGVmaW5lIEFDOTdfQUQxODg2X0pBQ0tfU0VOU0UgMHg3MgotCi1zdGF0aWMgaW50IGFkMTg4Nl9pbml0KHN0cnVjdCBhYzk3X2NvZGVjICogY29kZWMpCi17Ci0JLyogZnJvbSBBRDE4ODYgU3BlY3MgKi8KLQljb2RlYy0+Y29kZWNfd3JpdGUoY29kZWMsIEFDOTdfQUQxODg2X0pBQ0tfU0VOU0UsIDB4MDAxMCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotCi0KLS8qCi0gKglUaGlzIGlzIGJhc2ljYWxseSBzdGFuZGFyZCBBQzk3LiBJdCBzaG91bGQgd29yayBhcyBhIGRlZmF1bHQgZm9yCi0gKglhbG1vc3QgYWxsIG1vZGVybiBjb2RlY3MuIE5vdGUgdGhhdCBzb21lIGNhcmRzIHdpcmUgRUFQRCAqYmFja3dhcmRzKgotICoJVGhhdCBzaWRlIG9mIGl0IGlzIHVwIHRvIHRoZSBjYXJkIGRyaXZlciBub3QgdXMgdG8gY29wZSB3aXRoLgotICoKLSAqLwotCi1zdGF0aWMgaW50IGVhcGRfY29udHJvbChzdHJ1Y3QgYWM5N19jb2RlYyAqIGNvZGVjLCBpbnQgb24pCi17Ci0JaWYob24pCi0JCWNvZGVjLT5jb2RlY193cml0ZShjb2RlYywgQUM5N19QT1dFUl9DT05UUk9MLAotCQkJY29kZWMtPmNvZGVjX3JlYWQoY29kZWMsIEFDOTdfUE9XRVJfQ09OVFJPTCl8MHg4MDAwKTsKLQllbHNlCi0JCWNvZGVjLT5jb2RlY193cml0ZShjb2RlYywgQUM5N19QT1dFUl9DT05UUk9MLAotCQkJY29kZWMtPmNvZGVjX3JlYWQoY29kZWMsIEFDOTdfUE9XRVJfQ09OVFJPTCkmfjB4ODAwMCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZ2VuZXJpY19kaWdpdGFsX2NvbnRyb2woc3RydWN0IGFjOTdfY29kZWMgKmNvZGVjLCBpbnQgc2xvdHMsIGludCByYXRlLCBpbnQgbW9kZSkKLXsKLQl1MTYgcmVnOwotCQotCXJlZyA9IGNvZGVjLT5jb2RlY19yZWFkKGNvZGVjLCBBQzk3X1NQRElGX0NPTlRST0wpOwotCQotCXN3aXRjaChyYXRlKQotCXsKLQkJLyogT2ZmIGJ5IGRlZmF1bHQgKi8KLQkJZGVmYXVsdDoKLQkJY2FzZSAwOgotCQkJcmVnID0gY29kZWMtPmNvZGVjX3JlYWQoY29kZWMsIEFDOTdfRVhURU5ERURfU1RBVFVTKTsKLQkJCWNvZGVjLT5jb2RlY193cml0ZShjb2RlYywgQUM5N19FWFRFTkRFRF9TVEFUVVMsIChyZWcgJiB+QUM5N19FQV9TUERJRikpOwotCQkJaWYocmF0ZSA9PSAwKQotCQkJCXJldHVybiAwOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWNhc2UgMToKLQkJCXJlZyA9IChyZWcgJiBBQzk3X1NDX1NQU1JfTUFTSykgfCBBQzk3X1NDX1NQU1JfNDhLOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCXJlZyA9IChyZWcgJiBBQzk3X1NDX1NQU1JfTUFTSykgfCBBQzk3X1NDX1NQU1JfNDRLOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzoKLQkJCXJlZyA9IChyZWcgJiBBQzk3X1NDX1NQU1JfTUFTSykgfCBBQzk3X1NDX1NQU1JfMzJLOwotCQkJYnJlYWs7Ci0JfQotCQotCXJlZyAmPSB+QUM5N19TQ19DQ19NQVNLOwotCXJlZyB8PSAobW9kZSAmIEFVRElPX0NDTUFTSykgPDwgNjsKLQkKLQlpZihtb2RlICYgQVVESU9fRElHSVRBTCkKLQkJcmVnIHw9IDI7Ci0JaWYobW9kZSAmIEFVRElPX1BSTykKLQkJcmVnIHw9IDE7Ci0JaWYobW9kZSAmIEFVRElPX0RSUykKLQkJcmVnIHw9IDB4NDAwMDsKLQotCWNvZGVjLT5jb2RlY193cml0ZShjb2RlYywgQUM5N19TUERJRl9DT05UUk9MLCByZWcpOwotCi0JcmVnID0gY29kZWMtPmNvZGVjX3JlYWQoY29kZWMsIEFDOTdfRVhURU5ERURfU1RBVFVTKTsKLQlyZWcgJj0gKEFDOTdfRUFfU0xPVF9NQVNLKTsKLQlyZWcgfD0gQUM5N19FQV9WUkEgfCBBQzk3X0VBX1NQRElGIHwgc2xvdHM7Ci0JY29kZWMtPmNvZGVjX3dyaXRlKGNvZGVjLCBBQzk3X0VYVEVOREVEX1NUQVRVUywgcmVnKTsKLQkKLQlyZWcgPSBjb2RlYy0+Y29kZWNfcmVhZChjb2RlYywgQUM5N19FWFRFTkRFRF9TVEFUVVMpOwotCWlmKCEocmVnICYgMHgwNDAwKSkKLQl7Ci0JCWNvZGVjLT5jb2RlY193cml0ZShjb2RlYywgQUM5N19FWFRFTkRFRF9TVEFUVVMsIHJlZyAmIH4gQUM5N19FQV9TUERJRik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqCUNyeXN0YWwgZGlnaXRhbCBhdWRpbyBjb250cm9sIChDUzQyOTkpCi0gKi8KLSAKLXN0YXRpYyBpbnQgY3J5c3RhbF9kaWdpdGFsX2NvbnRyb2woc3RydWN0IGFjOTdfY29kZWMgKmNvZGVjLCBpbnQgc2xvdHMsIGludCByYXRlLCBpbnQgbW9kZSkKLXsKLQl1MTYgY3Y7Ci0KLQlpZihtb2RlICYgQVVESU9fRElHSVRBTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQotCXN3aXRjaChyYXRlKQotCXsKLQkJY2FzZSAwOiBjdiA9IDB4MDsgYnJlYWs7CS8qIFNQRU4gb2ZmICovCi0JCWNhc2UgNDgwMDA6IGN2ID0gMHg4MDA0OyBicmVhazsJLyogNDhLSHogZGlnaXRhbCAqLwotCQljYXNlIDQ0MTAwOiBjdiA9IDB4ODEwNDsgYnJlYWs7CS8qIDQ0LjFLSHogZGlnaXRhbCAqLwotCQljYXNlIDMyNzY4OiAJCQkvKiAzMktoeiAqLwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWNvZGVjLT5jb2RlY193cml0ZShjb2RlYywgMHg2OCwgY3YpOwotCXJldHVybiAwOwotfQotCi0vKgotICoJQ01lZGlhIGRpZ2l0YWwgYXVkaW8gY29udHJvbAotICoJTmVlZHMgbW9yZSB3b3JrLgotICovCi0gCi1zdGF0aWMgaW50IGNtZWRpYV9kaWdpdGFsX2NvbnRyb2woc3RydWN0IGFjOTdfY29kZWMgKmNvZGVjLCBpbnQgc2xvdHMsIGludCByYXRlLCBpbnQgbW9kZSkKLXsKLQl1MTYgY3Y7Ci0KLQlpZihtb2RlICYgQVVESU9fRElHSVRBTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQotCXN3aXRjaChyYXRlKQotCXsKLQkJY2FzZSAwOgkJY3YgPSAweDAwMDE7IGJyZWFrOwkvKiBTUEVOIG9mZiAqLwotCQljYXNlIDQ4MDAwOgljdiA9IDB4MDAwOTsgYnJlYWs7CS8qIDQ4S0h6IGRpZ2l0YWwgKi8KLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KLQljb2RlYy0+Y29kZWNfd3JpdGUoY29kZWMsIDB4MkEsIDB4MDVjNCk7Ci0JY29kZWMtPmNvZGVjX3dyaXRlKGNvZGVjLCAweDZDLCBjdik7Ci0JCi0JLyogU3dpdGNoIG9uIG1peCB0byBzdXJyb3VuZCAqLwotCWN2ID0gY29kZWMtPmNvZGVjX3JlYWQoY29kZWMsIDB4NjQpOwotCWN2ICY9IH4weDAyMDA7Ci0JaWYobW9kZSkKLQkJY3YgfD0gMHgwMjAwOwotCWNvZGVjLT5jb2RlY193cml0ZShjb2RlYywgMHg2NCwgY3YpOwotCXJldHVybiAwOwotfQotCi0KLS8qIGNvcGllZCBmcm9tIGRyaXZlcnMvc291bmQvbWFlc3Ryby5jICovCi0jaWYgMCAgLyogdGhlcmUgaGFzIGJlZW4gMSBwZXJzb24gb24gdGhlIHBsYW5ldCB3aXRoIGEgcHQxMDEgdGhhdCB3ZQotICAgICAgICBrbm93IG9mLiAgSWYgdGhleSBjYXJlLCB0aGV5IGNhbiBwdXQgdGhpcyBiYWNrIGluIDopICovCi1zdGF0aWMgaW50IHB0MTAxX2luaXQoc3RydWN0IGFjOTdfY29kZWMgKiBjb2RlYykKLXsKLQlwcmludGsoS0VSTl9JTkZPICJhYzk3X2NvZGVjOiBQVDEwMSBDb2RlYyBkZXRlY3RlZCwgaW5pdGlhbGl6aW5nIGJ1dCBfbm90XyBpbnN0YWxsaW5nIG1peGVyIGRldmljZS5cbiIpOwotCS8qIHdobyBrbm93cy4uICovCi0JY29kZWMtPmNvZGVjX3dyaXRlKGNvZGVjLCAweDJBLCAweDAwMDEpOwotCWNvZGVjLT5jb2RlY193cml0ZShjb2RlYywgMHgyQywgMHgwMDAwKTsKLQljb2RlYy0+Y29kZWNfd3JpdGUoY29kZWMsIDB4MkMsIDB4RkZGRik7Ci0JY29kZWMtPmNvZGVjX3dyaXRlKGNvZGVjLCAweDEwLCAweDlGMUYpOwotCWNvZGVjLT5jb2RlY193cml0ZShjb2RlYywgMHgxMiwgMHgwODA4KTsKLQljb2RlYy0+Y29kZWNfd3JpdGUoY29kZWMsIDB4MTQsIDB4OUYxRik7Ci0JY29kZWMtPmNvZGVjX3dyaXRlKGNvZGVjLCAweDE2LCAweDlGMUYpOwotCWNvZGVjLT5jb2RlY193cml0ZShjb2RlYywgMHgxOCwgMHgwNDA0KTsKLQljb2RlYy0+Y29kZWNfd3JpdGUoY29kZWMsIDB4MUEsIDB4MDAwMCk7Ci0JY29kZWMtPmNvZGVjX3dyaXRlKGNvZGVjLCAweDFDLCAweDAwMDApOwotCWNvZGVjLT5jb2RlY193cml0ZShjb2RlYywgMHgwMiwgMHgwNDA0KTsKLQljb2RlYy0+Y29kZWNfd3JpdGUoY29kZWMsIDB4MDQsIDB4MDgwOCk7Ci0JY29kZWMtPmNvZGVjX3dyaXRlKGNvZGVjLCAweDBDLCAweDgwMUYpOwotCWNvZGVjLT5jb2RlY193cml0ZShjb2RlYywgMHgwRSwgMHg4MDFGKTsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCQotCi1FWFBPUlRfU1lNQk9MKGFjOTdfcHJvYmVfY29kZWMpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9hdTE1NTBfYWM5Ny5jIGIvc291bmQvb3NzL2F1MTU1MF9hYzk3LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4ZjYyNmQuLjAwMDAwMDAKLS0tIGEvc291bmQvb3NzL2F1MTU1MF9hYzk3LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMTQ3ICswLDAgQEAKLS8qCi0gKiBhdTE1NTBfYWM5Ny5jICAtLSAgU291bmQgZHJpdmVyIGZvciBBbGNoZW15IEF1MTU1MCBNSVBTIEludGVybmV0IEVkZ2UKLSAqICAgICAgICAgICAgICAgICAgICBQcm9jZXNzb3IuCi0gKgotICogQ29weXJpZ2h0IDIwMDQgRW1iZWRkZWQgRWRnZSwgTExDCi0gKglkYW5AZW1iZWRkZWRlZGdlLmNvbQotICoKLSAqIE1vc3RseSBjb3BpZWQgZnJvbSB0aGUgYXUxMDAwLmMgZHJpdmVyIGFuZCBzb21lIGZyb20gdGhlCi0gKiBQb3dlck1hYyBkYmRtYSBkcml2ZXIuCi0gKiBXZSBhc3N1bWUgdGhlIHByb2Nlc3NvciBjYW4gZG8gbWVtb3J5IGNvaGVyZW50IERNQS4KLSAqCi0gKiBQb3J0ZWQgdG8gMi42IGJ5IE1hdHQgUG9ydGVyIDxtcG9ydGVyQGtlcm5lbC5jcmFzaGluZy5vcmc+Ci0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRCAgIGBgQVMgIElTJycgQU5EICAgQU5ZICBFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLCAgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KLSAqICBOTyAgRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUgICAgTElBQkxFIEZPUiBBTlkgICBESVJFQ1QsIElORElSRUNULAotICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogIE5PVCBMSU1JVEVEICAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTICBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogIFVTRSwgREFUQSwgIE9SIFBST0ZJVFM7IE9SICBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICoKLSAqLwotCi0jdW5kZWYgREVCVUcKLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9zb3VuZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zb3VuZGNhcmQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvcG9sbC5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvYWM5N19jb2RlYy5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9oYXJkaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MXh4eF9wc2MuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MXh4eC5oPgotCi0jdW5kZWYgT1NTX0RPQ1VNRU5URURfTUlYRVJfU0VNQU5USUNTCi0KLS8qIG1pc2Mgc3R1ZmYgKi8KLSNkZWZpbmUgUE9MTF9DT1VOVCAgIDB4NTAwMDAKLSNkZWZpbmUgQUM5N19FWFRfREFDUyAoQUM5N19FWFRJRF9TREFDIHwgQUM5N19FWFRJRF9DREFDIHwgQUM5N19FWFRJRF9MREFDKQotCi0vKiBUaGUgbnVtYmVyIG9mIERCRE1BIHJpbmcgZGVzY3JpcHRvcnMgdG8gYWxsb2NhdGUuICBObyBzZW5zZSBtYWtpbmcKLSAqIHRoaXMgdG9vIGxhcmdlLi4uLmlmIHlvdSBjYW4ndCBrZWVwIHVwIHdpdGggYSBmZXcgeW91IGFyZW4ndCBsaWtlbHkKLSAqIHRvIGJlIGFibGUgdG8gd2l0aCBsb3RzIG9mIHRoZW0sIGVpdGhlci4KLSAqLwotI2RlZmluZSBOVU1fREJETUFfREVTQ1JJUFRPUlMgNAotCi0jZGVmaW5lIGVycihmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fRVJSIGZvcm1hdCAiXG4iICwgIyMgYXJnKQotCi0vKiBCb290IG9wdGlvbnMKLSAqIDAgPSBubyBWUkEsIDEgPSB1c2UgVlJBIGlmIGNvZGVjIHN1cHBvcnRzIGl0Ci0gKi8KLXN0YXRpYyBERUZJTkVfTVVURVgoYXUxNTUwX2FjOTdfbXV0ZXgpOwotc3RhdGljIGludCAgICAgIHZyYSA9IDE7Ci1tb2R1bGVfcGFyYW0odnJhLCBib29sLCAwKTsKLU1PRFVMRV9QQVJNX0RFU0ModnJhLCAiaWYgMSB1c2UgVlJBIGlmIGNvZGVjIHN1cHBvcnRzIGl0Iik7Ci0KLXN0YXRpYyBzdHJ1Y3QgYXUxNTUwX3N0YXRlIHsKLQkvKiBzb3VuZGNvcmUgc3R1ZmYgKi8KLQlpbnQgICAgICAgICAgICAgZGV2X2F1ZGlvOwotCi0Jc3RydWN0IGFjOTdfY29kZWMgKmNvZGVjOwotCXVuc2lnbmVkICAgICAgICBjb2RlY19iYXNlX2NhcHM7IC8qIEFDJzk3IHJlZyAwMGgsICJSZXNldCBSZWdpc3RlciIgKi8KLQl1bnNpZ25lZCAgICAgICAgY29kZWNfZXh0X2NhcHM7ICAvKiBBQyc5NyByZWcgMjhoLCAiRXh0ZW5kZWQgQXVkaW8gSUQiICovCi0JaW50ICAgICAgICAgICAgIG5vX3ZyYTsJCS8qIGRvIG5vdCB1c2UgVlJBICovCi0KLQlzcGlubG9ja190ICAgICAgbG9jazsKLQlzdHJ1Y3QgbXV0ZXggb3Blbl9tdXRleDsKLQlzdHJ1Y3QgbXV0ZXggc2VtOwotCWZtb2RlX3QgICAgICAgICAgb3Blbl9tb2RlOwotCXdhaXRfcXVldWVfaGVhZF90IG9wZW5fd2FpdDsKLQotCXN0cnVjdCBkbWFidWYgewotCQl1MzIJCWRtYW5yOwotCQl1bnNpZ25lZCAgICAgICAgc2FtcGxlX3JhdGU7Ci0JCXVuc2lnbmVkCXNyY19mYWN0b3I7Ci0JCXVuc2lnbmVkICAgICAgICBzYW1wbGVfc2l6ZTsKLQkJaW50ICAgICAgICAgICAgIG51bV9jaGFubmVsczsKLQkJaW50CQlkbWFfYnl0ZXNfcGVyX3NhbXBsZTsKLQkJaW50CQl1c2VyX2J5dGVzX3Blcl9zYW1wbGU7Ci0JCWludAkJY250X2ZhY3RvcjsKLQotCQl2b2lkCQkqcmF3YnVmOwotCQl1bnNpZ25lZCAgICAgICAgYnVmb3JkZXI7Ci0JCXVuc2lnbmVkCW51bWZyYWc7Ci0JCXVuc2lnbmVkICAgICAgICBmcmFnc2hpZnQ7Ci0JCXZvaWQJCSpuZXh0SW47Ci0JCXZvaWQJCSpuZXh0T3V0OwotCQlpbnQJCWNvdW50OwotCQl1bnNpZ25lZCAgICAgICAgdG90YWxfYnl0ZXM7Ci0JCXVuc2lnbmVkICAgICAgICBlcnJvcjsKLQkJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKLQotCQkvKiByZWR1bmRhbnQsIGJ1dCBtYWtlcyBjYWxjdWxhdGlvbnMgZWFzaWVyICovCi0JCXVuc2lnbmVkCWZyYWdzaXplOwotCQl1bnNpZ25lZAlkbWFfZnJhZ3NpemU7Ci0JCXVuc2lnbmVkCWRtYXNpemU7Ci0JCXVuc2lnbmVkCWRtYV9xY291bnQ7Ci0KLQkJLyogT1NTIHN0dWZmICovCi0JCXVuc2lnbmVkICAgICAgICBtYXBwZWQ6MTsKLQkJdW5zaWduZWQgICAgICAgIHJlYWR5OjE7Ci0JCXVuc2lnbmVkICAgICAgICBzdG9wcGVkOjE7Ci0JCXVuc2lnbmVkICAgICAgICBvc3NmcmFnc2hpZnQ7Ci0JCWludCAgICAgICAgICAgICBvc3NtYXhmcmFnczsKLQkJdW5zaWduZWQgICAgICAgIHN1YmRpdmlzaW9uOwotCX0gZG1hX2RhYywgZG1hX2FkYzsKLX0gYXUxNTUwX3N0YXRlOwotCi1zdGF0aWMgdW5zaWduZWQKLWxkMih1bnNpZ25lZCBpbnQgeCkKLXsKLQl1bnNpZ25lZCAgICAgICAgciA9IDA7Ci0KLQlpZiAoeCA+PSAweDEwMDAwKSB7Ci0JCXggPj49IDE2OwotCQlyICs9IDE2OwotCX0KLQlpZiAoeCA+PSAweDEwMCkgewotCQl4ID4+PSA4OwotCQlyICs9IDg7Ci0JfQotCWlmICh4ID49IDB4MTApIHsKLQkJeCA+Pj0gNDsKLQkJciArPSA0OwotCX0KLQlpZiAoeCA+PSA0KSB7Ci0JCXggPj49IDI7Ci0JCXIgKz0gMjsKLQl9Ci0JaWYgKHggPj0gMikKLQkJcisrOwotCXJldHVybiByOwotfQotCi1zdGF0aWMgdm9pZAotYXUxNTUwX2RlbGF5KGludCBtc2VjKQotewotCWlmIChpbl9pbnRlcnJ1cHQoKSkKLQkJcmV0dXJuOwotCi0Jc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUobXNlY3NfdG9famlmZmllcyhtc2VjKSk7Ci19Ci0KLXN0YXRpYyB1MTYKLXJkY29kZWMoc3RydWN0IGFjOTdfY29kZWMgKmNvZGVjLCB1OCBhZGRyKQotewotCXN0cnVjdCBhdTE1NTBfc3RhdGUgKnMgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKLQl1MzIgICAgICAgICAgICAgY21kLCB2YWw7Ci0JdTE2ICAgICAgICAgICAgIGRhdGE7Ci0JaW50ICAgICAgICAgICAgIGk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCi0JZm9yIChpID0gMDsgaSA8IFBPTExfQ09VTlQ7IGkrKykgewotCQl2YWwgPSBhdV9yZWFkbChQU0NfQUM5N1NUQVQpOwotCQlhdV9zeW5jKCk7Ci0JCWlmICghKHZhbCAmIFBTQ19BQzk3U1RBVF9DUCkpCi0JCQlicmVhazsKLQl9Ci0JaWYgKGkgPT0gUE9MTF9DT1VOVCkKLQkJZXJyKCJyZGNvZGVjOiBjb2RlYyBjbWQgcGVuZGluZyBleHBpcmVkISIpOwotCi0JY21kID0gKHUzMilQU0NfQUM5N0NEQ19JTkRYKGFkZHIpOwotCWNtZCB8PSBQU0NfQUM5N0NEQ19SRDsJLyogcmVhZCBjb21tYW5kICovCi0JYXVfd3JpdGVsKGNtZCwgUFNDX0FDOTdDREMpOwotCWF1X3N5bmMoKTsKLQotCS8qIG5vdyB3YWl0IGZvciB0aGUgZGF0YQotCSovCi0JZm9yIChpID0gMDsgaSA8IFBPTExfQ09VTlQ7IGkrKykgewotCQl2YWwgPSBhdV9yZWFkbChQU0NfQUM5N1NUQVQpOwotCQlhdV9zeW5jKCk7Ci0JCWlmICghKHZhbCAmIFBTQ19BQzk3U1RBVF9DUCkpCi0JCQlicmVhazsKLQl9Ci0JaWYgKGkgPT0gUE9MTF9DT1VOVCkgewotCQllcnIoInJkY29kZWM6IHJlYWQgcG9sbCBleHBpcmVkISIpOwotCQlkYXRhID0gMDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogd2FpdCBmb3IgY29tbWFuZCBkb25lPwotCSovCi0JZm9yIChpID0gMDsgaSA8IFBPTExfQ09VTlQ7IGkrKykgewotCQl2YWwgPSBhdV9yZWFkbChQU0NfQUM5N0VWTlQpOwotCQlhdV9zeW5jKCk7Ci0JCWlmICh2YWwgJiBQU0NfQUM5N0VWTlRfQ0QpCi0JCQlicmVhazsKLQl9Ci0JaWYgKGkgPT0gUE9MTF9DT1VOVCkgewotCQllcnIoInJkY29kZWM6IHJlYWQgY21kd2FpdCBleHBpcmVkISIpOwotCQlkYXRhID0gMDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZGF0YSA9IGF1X3JlYWRsKFBTQ19BQzk3Q0RDKSAmIDB4ZmZmZjsKLQlhdV9zeW5jKCk7Ci0KLQkvKiBDbGVhciBjb21tYW5kIGRvbmUgZXZlbnQuCi0JKi8KLQlhdV93cml0ZWwoUFNDX0FDOTdFVk5UX0NELCBQU0NfQUM5N0VWTlQpOwotCWF1X3N5bmMoKTsKLQotIG91dDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gZGF0YTsKLX0KLQotCi1zdGF0aWMgdm9pZAotd3Jjb2RlYyhzdHJ1Y3QgYWM5N19jb2RlYyAqY29kZWMsIHU4IGFkZHIsIHUxNiBkYXRhKQotewotCXN0cnVjdCBhdTE1NTBfc3RhdGUgKnMgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKLQl1MzIgICAgICAgICAgICAgY21kLCB2YWw7Ci0JaW50ICAgICAgICAgICAgIGk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCi0JZm9yIChpID0gMDsgaSA8IFBPTExfQ09VTlQ7IGkrKykgewotCQl2YWwgPSBhdV9yZWFkbChQU0NfQUM5N1NUQVQpOwotCQlhdV9zeW5jKCk7Ci0JCWlmICghKHZhbCAmIFBTQ19BQzk3U1RBVF9DUCkpCi0JCQlicmVhazsKLQl9Ci0JaWYgKGkgPT0gUE9MTF9DT1VOVCkKLQkJZXJyKCJ3cmNvZGVjOiBjb2RlYyBjbWQgcGVuZGluZyBleHBpcmVkISIpOwotCi0JY21kID0gKHUzMilQU0NfQUM5N0NEQ19JTkRYKGFkZHIpOwotCWNtZCB8PSAodTMyKWRhdGE7Ci0JYXVfd3JpdGVsKGNtZCwgUFNDX0FDOTdDREMpOwotCWF1X3N5bmMoKTsKLQotCWZvciAoaSA9IDA7IGkgPCBQT0xMX0NPVU5UOyBpKyspIHsKLQkJdmFsID0gYXVfcmVhZGwoUFNDX0FDOTdTVEFUKTsKLQkJYXVfc3luYygpOwotCQlpZiAoISh2YWwgJiBQU0NfQUM5N1NUQVRfQ1ApKQotCQkJYnJlYWs7Ci0JfQotCWlmIChpID09IFBPTExfQ09VTlQpCi0JCWVycigid3Jjb2RlYzogY29kZWMgY21kIHBlbmRpbmcgZXhwaXJlZCEiKTsKLQotCWZvciAoaSA9IDA7IGkgPCBQT0xMX0NPVU5UOyBpKyspIHsKLQkJdmFsID0gYXVfcmVhZGwoUFNDX0FDOTdFVk5UKTsKLQkJYXVfc3luYygpOwotCQlpZiAodmFsICYgUFNDX0FDOTdFVk5UX0NEKQotCQkJYnJlYWs7Ci0JfQotCWlmIChpID09IFBPTExfQ09VTlQpCi0JCWVycigid3Jjb2RlYzogcmVhZCBjbWR3YWl0IGV4cGlyZWQhIik7Ci0KLQkvKiBDbGVhciBjb21tYW5kIGRvbmUgZXZlbnQuCi0JKi8KLQlhdV93cml0ZWwoUFNDX0FDOTdFVk5UX0NELCBQU0NfQUM5N0VWTlQpOwotCWF1X3N5bmMoKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQKLXdhaXRjb2RlYyhzdHJ1Y3QgYWM5N19jb2RlYyAqY29kZWMpCi17Ci0JdTE2CXRlbXA7Ci0JdTMyCXZhbDsKLQlpbnQJaTsKLQotCS8qIGNvZGVjX3dhaXQgaXMgdXNlZCB0byB3YWl0IGZvciBhIHJlYWR5IHN0YXRlIGFmdGVyCi0JICogYW4gQUM5N0NfUkVTRVQuCi0JICovCi0JYXUxNTUwX2RlbGF5KDEwKTsKLQotCS8qIGZpcnN0IHBvbGwgdGhlIENPREVDX1JFQURZIHRhZyBiaXQKLQkqLwotCWZvciAoaSA9IDA7IGkgPCBQT0xMX0NPVU5UOyBpKyspIHsKLQkJdmFsID0gYXVfcmVhZGwoUFNDX0FDOTdTVEFUKTsKLQkJYXVfc3luYygpOwotCQlpZiAodmFsICYgUFNDX0FDOTdTVEFUX0NSKQotCQkJYnJlYWs7Ci0JfQotCWlmIChpID09IFBPTExfQ09VTlQpIHsKLQkJZXJyKCJ3YWl0Y29kZWM6IENPREVDX1JFQURZIHBvbGwgZXhwaXJlZCEiKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIGdldCBBQyc5NyBwb3dlcmRvd24gY29udHJvbC9zdGF0dXMgcmVnaXN0ZXIKLQkqLwotCXRlbXAgPSByZGNvZGVjKGNvZGVjLCBBQzk3X1BPV0VSX0NPTlRST0wpOwotCi0JLyogSWYgYW55dGhpbmcgaXMgcG93ZXJlZCBkb3duLCBwb3dlcidlbSB1cAotCSovCi0JaWYgKHRlbXAgJiAweDdmMDApIHsKLQkJLyogUG93ZXIgb24KLQkJKi8KLQkJd3Jjb2RlYyhjb2RlYywgQUM5N19QT1dFUl9DT05UUk9MLCAwKTsKLQkJYXUxNTUwX2RlbGF5KDEwMCk7Ci0KLQkJLyogUmVyZWFkCi0JCSovCi0JCXRlbXAgPSByZGNvZGVjKGNvZGVjLCBBQzk3X1BPV0VSX0NPTlRST0wpOwotCX0KLQotCS8qIENoZWNrIGlmIENvZGVjIFJFRixBTkwsREFDLEFEQyByZWFkeQotCSovCi0JaWYgKCh0ZW1wICYgMHg3ZjBmKSAhPSAweDAwMGYpCi0JCWVycigiY29kZWMgcmVnIDI2IHN0YXR1cyAoMHgleCkgbm90IHJlYWR5ISEiLCB0ZW1wKTsKLX0KLQotLyogc3RvcCB0aGUgQURDIGJlZm9yZSBjYWxsaW5nICovCi1zdGF0aWMgdm9pZAotc2V0X2FkY19yYXRlKHN0cnVjdCBhdTE1NTBfc3RhdGUgKnMsIHVuc2lnbmVkIHJhdGUpCi17Ci0Jc3RydWN0IGRtYWJ1ZiAgKmFkYyA9ICZzLT5kbWFfYWRjOwotCXN0cnVjdCBkbWFidWYgICpkYWMgPSAmcy0+ZG1hX2RhYzsKLQl1bnNpZ25lZCAgICAgICAgYWRjX3JhdGUsIGRhY19yYXRlOwotCXUxNiAgICAgICAgICAgICBhYzk3X2V4dHN0YXQ7Ci0KLQlpZiAocy0+bm9fdnJhKSB7Ci0JCS8qIGNhbGMgU1JDIGZhY3RvcgotCQkqLwotCQlhZGMtPnNyY19mYWN0b3IgPSAoKDk2MDAwIC8gcmF0ZSkgKyAxKSA+PiAxOwotCQlhZGMtPnNhbXBsZV9yYXRlID0gNDgwMDAgLyBhZGMtPnNyY19mYWN0b3I7Ci0JCXJldHVybjsKLQl9Ci0KLQlhZGMtPnNyY19mYWN0b3IgPSAxOwotCi0JYWM5N19leHRzdGF0ID0gcmRjb2RlYyhzLT5jb2RlYywgQUM5N19FWFRFTkRFRF9TVEFUVVMpOwotCi0JcmF0ZSA9IHJhdGUgPiA0ODAwMCA/IDQ4MDAwIDogcmF0ZTsKLQotCS8qIGVuYWJsZSBWUkEKLQkqLwotCXdyY29kZWMocy0+Y29kZWMsIEFDOTdfRVhURU5ERURfU1RBVFVTLAotCQlhYzk3X2V4dHN0YXQgfCBBQzk3X0VYVFNUQVRfVlJBKTsKLQotCS8qIG5vdyB3cml0ZSB0aGUgc2FtcGxlIHJhdGUKLQkqLwotCXdyY29kZWMocy0+Y29kZWMsIEFDOTdfUENNX0xSX0FEQ19SQVRFLCAodTE2KSByYXRlKTsKLQotCS8qIHJlYWQgaXQgYmFjayBmb3IgYWN0dWFsIHN1cHBvcnRlZCByYXRlCi0JKi8KLQlhZGNfcmF0ZSA9IHJkY29kZWMocy0+Y29kZWMsIEFDOTdfUENNX0xSX0FEQ19SQVRFKTsKLQotCXByX2RlYnVnKCJzZXRfYWRjX3JhdGU6IHNldCB0byAlZCBIelxuIiwgYWRjX3JhdGUpOwotCi0JLyogc29tZSBjb2RlYydzIGRvbid0IGFsbG93IHVuZXF1YWwgREFDIGFuZCBBREMgcmF0ZXMsIGluIHdoaWNoIGNhc2UKLQkgKiB3cml0aW5nIG9uZSByYXRlIHJlZyBhY3R1YWxseSBjaGFuZ2VzIGJvdGguCi0JICovCi0JZGFjX3JhdGUgPSByZGNvZGVjKHMtPmNvZGVjLCBBQzk3X1BDTV9GUk9OVF9EQUNfUkFURSk7Ci0JaWYgKGRhYy0+bnVtX2NoYW5uZWxzID4gMikKLQkJd3Jjb2RlYyhzLT5jb2RlYywgQUM5N19QQ01fU1VSUl9EQUNfUkFURSwgZGFjX3JhdGUpOwotCWlmIChkYWMtPm51bV9jaGFubmVscyA+IDQpCi0JCXdyY29kZWMocy0+Y29kZWMsIEFDOTdfUENNX0xGRV9EQUNfUkFURSwgZGFjX3JhdGUpOwotCi0JYWRjLT5zYW1wbGVfcmF0ZSA9IGFkY19yYXRlOwotCWRhYy0+c2FtcGxlX3JhdGUgPSBkYWNfcmF0ZTsKLX0KLQotLyogc3RvcCB0aGUgREFDIGJlZm9yZSBjYWxsaW5nICovCi1zdGF0aWMgdm9pZAotc2V0X2RhY19yYXRlKHN0cnVjdCBhdTE1NTBfc3RhdGUgKnMsIHVuc2lnbmVkIHJhdGUpCi17Ci0Jc3RydWN0IGRtYWJ1ZiAgKmRhYyA9ICZzLT5kbWFfZGFjOwotCXN0cnVjdCBkbWFidWYgICphZGMgPSAmcy0+ZG1hX2FkYzsKLQl1bnNpZ25lZCAgICAgICAgYWRjX3JhdGUsIGRhY19yYXRlOwotCXUxNiAgICAgICAgICAgICBhYzk3X2V4dHN0YXQ7Ci0KLQlpZiAocy0+bm9fdnJhKSB7Ci0JCS8qIGNhbGMgU1JDIGZhY3RvcgotCQkqLwotCQlkYWMtPnNyY19mYWN0b3IgPSAoKDk2MDAwIC8gcmF0ZSkgKyAxKSA+PiAxOwotCQlkYWMtPnNhbXBsZV9yYXRlID0gNDgwMDAgLyBkYWMtPnNyY19mYWN0b3I7Ci0JCXJldHVybjsKLQl9Ci0KLQlkYWMtPnNyY19mYWN0b3IgPSAxOwotCi0JYWM5N19leHRzdGF0ID0gcmRjb2RlYyhzLT5jb2RlYywgQUM5N19FWFRFTkRFRF9TVEFUVVMpOwotCi0JcmF0ZSA9IHJhdGUgPiA0ODAwMCA/IDQ4MDAwIDogcmF0ZTsKLQotCS8qIGVuYWJsZSBWUkEKLQkqLwotCXdyY29kZWMocy0+Y29kZWMsIEFDOTdfRVhURU5ERURfU1RBVFVTLAotCQlhYzk3X2V4dHN0YXQgfCBBQzk3X0VYVFNUQVRfVlJBKTsKLQotCS8qIG5vdyB3cml0ZSB0aGUgc2FtcGxlIHJhdGUKLQkqLwotCXdyY29kZWMocy0+Y29kZWMsIEFDOTdfUENNX0ZST05UX0RBQ19SQVRFLCAodTE2KSByYXRlKTsKLQotCS8qIEkgZG9uJ3Qgc3VwcG9ydCBkaWZmZXJlbnQgc2FtcGxlIHJhdGVzIGZvciBtdWx0aWNoYW5uZWwsCi0JICogc28gbWFrZSB0aGVzZSBjaGFubmVscyB0aGUgc2FtZS4KLQkgKi8KLQlpZiAoZGFjLT5udW1fY2hhbm5lbHMgPiAyKQotCQl3cmNvZGVjKHMtPmNvZGVjLCBBQzk3X1BDTV9TVVJSX0RBQ19SQVRFLCAodTE2KSByYXRlKTsKLQlpZiAoZGFjLT5udW1fY2hhbm5lbHMgPiA0KQotCQl3cmNvZGVjKHMtPmNvZGVjLCBBQzk3X1BDTV9MRkVfREFDX1JBVEUsICh1MTYpIHJhdGUpOwotCS8qIHJlYWQgaXQgYmFjayBmb3IgYWN0dWFsIHN1cHBvcnRlZCByYXRlCi0JKi8KLQlkYWNfcmF0ZSA9IHJkY29kZWMocy0+Y29kZWMsIEFDOTdfUENNX0ZST05UX0RBQ19SQVRFKTsKLQotCXByX2RlYnVnKCJzZXRfZGFjX3JhdGU6IHNldCB0byAlZCBIelxuIiwgZGFjX3JhdGUpOwotCi0JLyogc29tZSBjb2RlYydzIGRvbid0IGFsbG93IHVuZXF1YWwgREFDIGFuZCBBREMgcmF0ZXMsIGluIHdoaWNoIGNhc2UKLQkgKiB3cml0aW5nIG9uZSByYXRlIHJlZyBhY3R1YWxseSBjaGFuZ2VzIGJvdGguCi0JICovCi0JYWRjX3JhdGUgPSByZGNvZGVjKHMtPmNvZGVjLCBBQzk3X1BDTV9MUl9BRENfUkFURSk7Ci0KLQlkYWMtPnNhbXBsZV9yYXRlID0gZGFjX3JhdGU7Ci0JYWRjLT5zYW1wbGVfcmF0ZSA9IGFkY19yYXRlOwotfQotCi1zdGF0aWMgdm9pZAotc3RvcF9kYWMoc3RydWN0IGF1MTU1MF9zdGF0ZSAqcykKLXsKLQlzdHJ1Y3QgZG1hYnVmICAqZGIgPSAmcy0+ZG1hX2RhYzsKLQl1MzIJCXN0YXQ7Ci0JdW5zaWduZWQgbG9uZyAgIGZsYWdzOwotCi0JaWYgKGRiLT5zdG9wcGVkKQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCi0JYXVfd3JpdGVsKFBTQ19BQzk3UENSX1RQLCBQU0NfQUM5N1BDUik7Ci0JYXVfc3luYygpOwotCi0JLyogV2FpdCBmb3IgVHJhbnNtaXQgQnVzeSB0byBzaG93IGRpc2FibGVkLgotCSovCi0JZG8gewotCQlzdGF0ID0gYXVfcmVhZGwoUFNDX0FDOTdTVEFUKTsKLQkJYXVfc3luYygpOwotCX0gd2hpbGUgKChzdGF0ICYgUFNDX0FDOTdTVEFUX1RCKSAhPSAwKTsKLQotCWF1MXh4eF9kYmRtYV9yZXNldChkYi0+ZG1hbnIpOwotCi0JZGItPnN0b3BwZWQgPSAxOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZAotc3RvcF9hZGMoc3RydWN0IGF1MTU1MF9zdGF0ZSAqcykKLXsKLQlzdHJ1Y3QgZG1hYnVmICAqZGIgPSAmcy0+ZG1hX2FkYzsKLQl1bnNpZ25lZCBsb25nICAgZmxhZ3M7Ci0JdTMyCQlzdGF0OwotCi0JaWYgKGRiLT5zdG9wcGVkKQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCi0JYXVfd3JpdGVsKFBTQ19BQzk3UENSX1JQLCBQU0NfQUM5N1BDUik7Ci0JYXVfc3luYygpOwotCi0JLyogV2FpdCBmb3IgUmVjZWl2ZSBCdXN5IHRvIHNob3cgZGlzYWJsZWQuCi0JKi8KLQlkbyB7Ci0JCXN0YXQgPSBhdV9yZWFkbChQU0NfQUM5N1NUQVQpOwotCQlhdV9zeW5jKCk7Ci0JfSB3aGlsZSAoKHN0YXQgJiBQU0NfQUM5N1NUQVRfUkIpICE9IDApOwotCi0JYXUxeHh4X2RiZG1hX3Jlc2V0KGRiLT5kbWFucik7Ci0KLQlkYi0+c3RvcHBlZCA9IDE7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci19Ci0KLQotc3RhdGljIHZvaWQKLXNldF94bWl0X3Nsb3RzKGludCBudW1fY2hhbm5lbHMpCi17Ci0JdTMyCWFjOTdfY29uZmlnLCBzdGF0OwotCi0JYWM5N19jb25maWcgPSBhdV9yZWFkbChQU0NfQUM5N0NGRyk7Ci0JYXVfc3luYygpOwotCWFjOTdfY29uZmlnICY9IH4oUFNDX0FDOTdDRkdfVFhTTE9UX01BU0sgfCBQU0NfQUM5N0NGR19ERV9FTkFCTEUpOwotCWF1X3dyaXRlbChhYzk3X2NvbmZpZywgUFNDX0FDOTdDRkcpOwotCWF1X3N5bmMoKTsKLQotCXN3aXRjaCAobnVtX2NoYW5uZWxzKSB7Ci0JY2FzZSA2OgkJLyogc3RlcmVvIHdpdGggc3Vycm91bmQgYW5kIGNlbnRlci9MRkUsCi0JCQkgKiBzbG90cyAzLDQsNiw3LDgsOQotCQkJICovCi0JCWFjOTdfY29uZmlnIHw9IFBTQ19BQzk3Q0ZHX1RYU0xPVF9FTkEoNik7Ci0JCWFjOTdfY29uZmlnIHw9IFBTQ19BQzk3Q0ZHX1RYU0xPVF9FTkEoOSk7Ci0KLQljYXNlIDQ6CQkvKiBzdGVyZW8gd2l0aCBzdXJyb3VuZCwgc2xvdHMgMyw0LDcsOCAqLwotCQlhYzk3X2NvbmZpZyB8PSBQU0NfQUM5N0NGR19UWFNMT1RfRU5BKDcpOwotCQlhYzk3X2NvbmZpZyB8PSBQU0NfQUM5N0NGR19UWFNMT1RfRU5BKDgpOwotCi0JY2FzZSAyOgkJLyogc3RlcmVvLCBzbG90cyAzLDQgKi8KLQljYXNlIDE6CQkvKiBtb25vICovCi0JCWFjOTdfY29uZmlnIHw9IFBTQ19BQzk3Q0ZHX1RYU0xPVF9FTkEoMyk7Ci0JCWFjOTdfY29uZmlnIHw9IFBTQ19BQzk3Q0ZHX1RYU0xPVF9FTkEoNCk7Ci0JfQotCi0JYXVfd3JpdGVsKGFjOTdfY29uZmlnLCBQU0NfQUM5N0NGRyk7Ci0JYXVfc3luYygpOwotCi0JYWM5N19jb25maWcgfD0gUFNDX0FDOTdDRkdfREVfRU5BQkxFOwotCWF1X3dyaXRlbChhYzk3X2NvbmZpZywgUFNDX0FDOTdDRkcpOwotCWF1X3N5bmMoKTsKLQotCS8qIFdhaXQgZm9yIERldmljZSByZWFkeS4KLQkqLwotCWRvIHsKLQkJc3RhdCA9IGF1X3JlYWRsKFBTQ19BQzk3U1RBVCk7Ci0JCWF1X3N5bmMoKTsKLQl9IHdoaWxlICgoc3RhdCAmIFBTQ19BQzk3U1RBVF9EUikgPT0gMCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZXRfcmVjdl9zbG90cyhpbnQgbnVtX2NoYW5uZWxzKQotewotCXUzMglhYzk3X2NvbmZpZywgc3RhdDsKLQotCWFjOTdfY29uZmlnID0gYXVfcmVhZGwoUFNDX0FDOTdDRkcpOwotCWF1X3N5bmMoKTsKLQlhYzk3X2NvbmZpZyAmPSB+KFBTQ19BQzk3Q0ZHX1JYU0xPVF9NQVNLIHwgUFNDX0FDOTdDRkdfREVfRU5BQkxFKTsKLQlhdV93cml0ZWwoYWM5N19jb25maWcsIFBTQ19BQzk3Q0ZHKTsKLQlhdV9zeW5jKCk7Ci0KLQkvKiBBbHdheXMgZW5hYmxlIHNsb3RzIDMgYW5kIDQgKHN0ZXJlbykuIFNsb3QgNiBpcwotCSAqIG9wdGlvbmFsIE1pYyBBREMsIHdoaWNoIHdlIGRvbid0IHN1cHBvcnQgeWV0LgotCSAqLwotCWFjOTdfY29uZmlnIHw9IFBTQ19BQzk3Q0ZHX1JYU0xPVF9FTkEoMyk7Ci0JYWM5N19jb25maWcgfD0gUFNDX0FDOTdDRkdfUlhTTE9UX0VOQSg0KTsKLQotCWF1X3dyaXRlbChhYzk3X2NvbmZpZywgUFNDX0FDOTdDRkcpOwotCWF1X3N5bmMoKTsKLQotCWFjOTdfY29uZmlnIHw9IFBTQ19BQzk3Q0ZHX0RFX0VOQUJMRTsKLQlhdV93cml0ZWwoYWM5N19jb25maWcsIFBTQ19BQzk3Q0ZHKTsKLQlhdV9zeW5jKCk7Ci0KLQkvKiBXYWl0IGZvciBEZXZpY2UgcmVhZHkuCi0JKi8KLQlkbyB7Ci0JCXN0YXQgPSBhdV9yZWFkbChQU0NfQUM5N1NUQVQpOwotCQlhdV9zeW5jKCk7Ci0JfSB3aGlsZSAoKHN0YXQgJiBQU0NfQUM5N1NUQVRfRFIpID09IDApOwotfQotCi0vKiBIb2xkIHNwaW5sb2NrIGZvciBib3RoIHN0YXJ0X2RhYygpIGFuZCBzdGFydF9hZGMoKSBjYWxscyAqLwotc3RhdGljIHZvaWQKLXN0YXJ0X2RhYyhzdHJ1Y3QgYXUxNTUwX3N0YXRlICpzKQotewotCXN0cnVjdCBkbWFidWYgICpkYiA9ICZzLT5kbWFfZGFjOwotCi0JaWYgKCFkYi0+c3RvcHBlZCkKLQkJcmV0dXJuOwotCi0Jc2V0X3htaXRfc2xvdHMoZGItPm51bV9jaGFubmVscyk7Ci0JYXVfd3JpdGVsKFBTQ19BQzk3UENSX1RDLCBQU0NfQUM5N1BDUik7Ci0JYXVfc3luYygpOwotCWF1X3dyaXRlbChQU0NfQUM5N1BDUl9UUywgUFNDX0FDOTdQQ1IpOwotCWF1X3N5bmMoKTsKLQotCWF1MXh4eF9kYmRtYV9zdGFydChkYi0+ZG1hbnIpOwotCi0JZGItPnN0b3BwZWQgPSAwOwotfQotCi1zdGF0aWMgdm9pZAotc3RhcnRfYWRjKHN0cnVjdCBhdTE1NTBfc3RhdGUgKnMpCi17Ci0Jc3RydWN0IGRtYWJ1ZiAgKmRiID0gJnMtPmRtYV9hZGM7Ci0JaW50CWk7Ci0KLQlpZiAoIWRiLT5zdG9wcGVkKQotCQlyZXR1cm47Ci0KLQkvKiBQdXQgdHdvIGJ1ZmZlcnMgb24gdGhlIHJpbmcgdG8gZ2V0IHRoaW5ncyBzdGFydGVkLgotCSovCi0JZm9yIChpPTA7IGk8MjsgaSsrKSB7Ci0JCWF1MXh4eF9kYmRtYV9wdXRfZGVzdChkYi0+ZG1hbnIsIHZpcnRfdG9fcGh5cyhkYi0+bmV4dEluKSwKLQkJCQlkYi0+ZG1hX2ZyYWdzaXplLCBERE1BX0ZMQUdTX0lFKTsKLQotCQlkYi0+bmV4dEluICs9IGRiLT5kbWFfZnJhZ3NpemU7Ci0JCWlmIChkYi0+bmV4dEluID49IGRiLT5yYXdidWYgKyBkYi0+ZG1hc2l6ZSkKLQkJCWRiLT5uZXh0SW4gLT0gZGItPmRtYXNpemU7Ci0JfQotCi0Jc2V0X3JlY3Zfc2xvdHMoZGItPm51bV9jaGFubmVscyk7Ci0JYXUxeHh4X2RiZG1hX3N0YXJ0KGRiLT5kbWFucik7Ci0JYXVfd3JpdGVsKFBTQ19BQzk3UENSX1JDLCBQU0NfQUM5N1BDUik7Ci0JYXVfc3luYygpOwotCWF1X3dyaXRlbChQU0NfQUM5N1BDUl9SUywgUFNDX0FDOTdQQ1IpOwotCWF1X3N5bmMoKTsKLQotCWRiLT5zdG9wcGVkID0gMDsKLX0KLQotc3RhdGljIGludAotcHJvZ19kbWFidWYoc3RydWN0IGF1MTU1MF9zdGF0ZSAqcywgc3RydWN0IGRtYWJ1ZiAqZGIpCi17Ci0JdW5zaWduZWQgdXNlcl9ieXRlc19wZXJfc2VjOwotCXVuc2lnbmVkICAgICAgICBidWZzOwotCXVuc2lnbmVkICAgICAgICByYXRlID0gZGItPnNhbXBsZV9yYXRlOwotCi0JaWYgKCFkYi0+cmF3YnVmKSB7Ci0JCWRiLT5yZWFkeSA9IGRiLT5tYXBwZWQgPSAwOwotCQlkYi0+YnVmb3JkZXIgPSA1OwkvKiAzMiAqIFBBR0VfU0laRSAqLwotCQlkYi0+cmF3YnVmID0ga21hbGxvYygoUEFHRV9TSVpFIDw8IGRiLT5idWZvcmRlciksIEdGUF9LRVJORUwpOwotCQlpZiAoIWRiLT5yYXdidWYpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlkYi0+Y250X2ZhY3RvciA9IDE7Ci0JaWYgKGRiLT5zYW1wbGVfc2l6ZSA9PSA4KQotCQlkYi0+Y250X2ZhY3RvciAqPSAyOwotCWlmIChkYi0+bnVtX2NoYW5uZWxzID09IDEpCi0JCWRiLT5jbnRfZmFjdG9yICo9IDI7Ci0JZGItPmNudF9mYWN0b3IgKj0gZGItPnNyY19mYWN0b3I7Ci0KLQlkYi0+Y291bnQgPSAwOwotCWRiLT5kbWFfcWNvdW50ID0gMDsKLQlkYi0+bmV4dEluID0gZGItPm5leHRPdXQgPSBkYi0+cmF3YnVmOwotCi0JZGItPnVzZXJfYnl0ZXNfcGVyX3NhbXBsZSA9IChkYi0+c2FtcGxlX3NpemU+PjMpICogZGItPm51bV9jaGFubmVsczsKLQlkYi0+ZG1hX2J5dGVzX3Blcl9zYW1wbGUgPSAyICogKChkYi0+bnVtX2NoYW5uZWxzID09IDEpID8KLQkJCQkJMiA6IGRiLT5udW1fY2hhbm5lbHMpOwotCi0JdXNlcl9ieXRlc19wZXJfc2VjID0gcmF0ZSAqIGRiLT51c2VyX2J5dGVzX3Blcl9zYW1wbGU7Ci0JYnVmcyA9IFBBR0VfU0laRSA8PCBkYi0+YnVmb3JkZXI7Ci0JaWYgKGRiLT5vc3NmcmFnc2hpZnQpIHsKLQkJaWYgKCgxMDAwIDw8IGRiLT5vc3NmcmFnc2hpZnQpIDwgdXNlcl9ieXRlc19wZXJfc2VjKQotCQkJZGItPmZyYWdzaGlmdCA9IGxkMih1c2VyX2J5dGVzX3Blcl9zZWMvMTAwMCk7Ci0JCWVsc2UKLQkJCWRiLT5mcmFnc2hpZnQgPSBkYi0+b3NzZnJhZ3NoaWZ0OwotCX0gZWxzZSB7Ci0JCWRiLT5mcmFnc2hpZnQgPSBsZDIodXNlcl9ieXRlc19wZXJfc2VjIC8gMTAwIC8KLQkJCQkgICAgKGRiLT5zdWJkaXZpc2lvbiA/IGRiLT5zdWJkaXZpc2lvbiA6IDEpKTsKLQkJaWYgKGRiLT5mcmFnc2hpZnQgPCAzKQotCQkJZGItPmZyYWdzaGlmdCA9IDM7Ci0JfQotCi0JZGItPmZyYWdzaXplID0gMSA8PCBkYi0+ZnJhZ3NoaWZ0OwotCWRiLT5kbWFfZnJhZ3NpemUgPSBkYi0+ZnJhZ3NpemUgKiBkYi0+Y250X2ZhY3RvcjsKLQlkYi0+bnVtZnJhZyA9IGJ1ZnMgLyBkYi0+ZG1hX2ZyYWdzaXplOwotCi0Jd2hpbGUgKGRiLT5udW1mcmFnIDwgNCAmJiBkYi0+ZnJhZ3NoaWZ0ID4gMykgewotCQlkYi0+ZnJhZ3NoaWZ0LS07Ci0JCWRiLT5mcmFnc2l6ZSA9IDEgPDwgZGItPmZyYWdzaGlmdDsKLQkJZGItPmRtYV9mcmFnc2l6ZSA9IGRiLT5mcmFnc2l6ZSAqIGRiLT5jbnRfZmFjdG9yOwotCQlkYi0+bnVtZnJhZyA9IGJ1ZnMgLyBkYi0+ZG1hX2ZyYWdzaXplOwotCX0KLQotCWlmIChkYi0+b3NzbWF4ZnJhZ3MgPj0gNCAmJiBkYi0+b3NzbWF4ZnJhZ3MgPCBkYi0+bnVtZnJhZykKLQkJZGItPm51bWZyYWcgPSBkYi0+b3NzbWF4ZnJhZ3M7Ci0KLQlkYi0+ZG1hc2l6ZSA9IGRiLT5kbWFfZnJhZ3NpemUgKiBkYi0+bnVtZnJhZzsKLQltZW1zZXQoZGItPnJhd2J1ZiwgMCwgYnVmcyk7Ci0KLQlwcl9kZWJ1ZygicHJvZ19kbWFidWY6IHJhdGU9JWQsIHNhbXBsZXNpemU9JWQsIGNoYW5uZWxzPSVkXG4iLAotCSAgICByYXRlLCBkYi0+c2FtcGxlX3NpemUsIGRiLT5udW1fY2hhbm5lbHMpOwotCXByX2RlYnVnKCJwcm9nX2RtYWJ1ZjogZnJhZ3NpemU9JWQsIGNudF9mYWN0b3I9JWQsIGRtYV9mcmFnc2l6ZT0lZFxuIiwKLQkgICAgZGItPmZyYWdzaXplLCBkYi0+Y250X2ZhY3RvciwgZGItPmRtYV9mcmFnc2l6ZSk7Ci0JcHJfZGVidWcoInByb2dfZG1hYnVmOiBudW1mcmFnPSVkLCBkbWFzaXplPSVkXG4iLCBkYi0+bnVtZnJhZywgZGItPmRtYXNpemUpOwotCi0JZGItPnJlYWR5ID0gMTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotcHJvZ19kbWFidWZfYWRjKHN0cnVjdCBhdTE1NTBfc3RhdGUgKnMpCi17Ci0Jc3RvcF9hZGMocyk7Ci0JcmV0dXJuIHByb2dfZG1hYnVmKHMsICZzLT5kbWFfYWRjKTsKLQotfQotCi1zdGF0aWMgaW50Ci1wcm9nX2RtYWJ1Zl9kYWMoc3RydWN0IGF1MTU1MF9zdGF0ZSAqcykKLXsKLQlzdG9wX2RhYyhzKTsKLQlyZXR1cm4gcHJvZ19kbWFidWYocywgJnMtPmRtYV9kYWMpOwotfQotCi0KLXN0YXRpYyB2b2lkIGRhY19kbWFfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlzdHJ1Y3QgYXUxNTUwX3N0YXRlICpzID0gKHN0cnVjdCBhdTE1NTBfc3RhdGUgKikgZGV2X2lkOwotCXN0cnVjdCBkbWFidWYgICpkYiA9ICZzLT5kbWFfZGFjOwotCXUzMglhYzk3Y19zdGF0OwotCi0Jc3Bpbl9sb2NrKCZzLT5sb2NrKTsKLQotCWFjOTdjX3N0YXQgPSBhdV9yZWFkbChQU0NfQUM5N1NUQVQpOwotCWlmIChhYzk3Y19zdGF0ICYgKEFDOTdDX1hVIHwgQUM5N0NfWE8gfCBBQzk3Q19URSkpCi0JCXByX2RlYnVnKCJBQzk3QyBzdGF0dXMgPSAweCUwOHhcbiIsIGFjOTdjX3N0YXQpOwotCWRiLT5kbWFfcWNvdW50LS07Ci0KLQlpZiAoZGItPmNvdW50ID49IGRiLT5mcmFnc2l6ZSkgewotCQlpZiAoYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UoZGItPmRtYW5yLAotCQkJCXZpcnRfdG9fcGh5cyhkYi0+bmV4dE91dCksIGRiLT5mcmFnc2l6ZSwKLQkJCQlERE1BX0ZMQUdTX0lFKSA9PSAwKSB7Ci0JCQllcnIoInFjb3VudCA8IDIgYW5kIG5vIHJpbmcgcm9vbSEiKTsKLQkJfQotCQlkYi0+bmV4dE91dCArPSBkYi0+ZnJhZ3NpemU7Ci0JCWlmIChkYi0+bmV4dE91dCA+PSBkYi0+cmF3YnVmICsgZGItPmRtYXNpemUpCi0JCQlkYi0+bmV4dE91dCAtPSBkYi0+ZG1hc2l6ZTsKLQkJZGItPmNvdW50IC09IGRiLT5mcmFnc2l6ZTsKLQkJZGItPnRvdGFsX2J5dGVzICs9IGRiLT5kbWFfZnJhZ3NpemU7Ci0JCWRiLT5kbWFfcWNvdW50Kys7Ci0JfQotCi0JLyogd2FrZSB1cCBhbnlib2R5IGxpc3RlbmluZyAqLwotCWlmICh3YWl0cXVldWVfYWN0aXZlKCZkYi0+d2FpdCkpCi0JCXdha2VfdXAoJmRiLT53YWl0KTsKLQotCXNwaW5fdW5sb2NrKCZzLT5sb2NrKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBhZGNfZG1hX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0Jc3RydWN0CWF1MTU1MF9zdGF0ZSAqcyA9IChzdHJ1Y3QgYXUxNTUwX3N0YXRlICopZGV2X2lkOwotCXN0cnVjdAlkbWFidWYgICpkcCA9ICZzLT5kbWFfYWRjOwotCXUzMglvYnl0ZXM7Ci0JY2hhcgkqb2J1ZjsKLQotCXNwaW5fbG9jaygmcy0+bG9jayk7Ci0KLQkvKiBQdWxsIHRoZSBidWZmZXIgZnJvbSB0aGUgZG1hIHF1ZXVlLgotCSovCi0JYXUxeHh4X2RiZG1hX2dldF9kZXN0KGRwLT5kbWFuciwgKHZvaWQgKikoJm9idWYpLCAmb2J5dGVzKTsKLQotCWlmICgoZHAtPmNvdW50ICsgb2J5dGVzKSA+IGRwLT5kbWFzaXplKSB7Ci0JCS8qIE92ZXJydW4uIFN0b3AgQURDIGFuZCBsb2cgdGhlIGVycm9yCi0JCSovCi0JCXNwaW5fdW5sb2NrKCZzLT5sb2NrKTsKLQkJc3RvcF9hZGMocyk7Ci0JCWRwLT5lcnJvcisrOwotCQllcnIoImFkYyBvdmVycnVuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBQdXQgYSBuZXcgZW1wdHkgYnVmZmVyIG9uIHRoZSBkZXN0aW5hdGlvbiBETUEuCi0JKi8KLQlhdTF4eHhfZGJkbWFfcHV0X2Rlc3QoZHAtPmRtYW5yLCB2aXJ0X3RvX3BoeXMoZHAtPm5leHRJbiksCi0JCQkgICAgICBkcC0+ZG1hX2ZyYWdzaXplLCBERE1BX0ZMQUdTX0lFKTsKLQotCWRwLT5uZXh0SW4gKz0gZHAtPmRtYV9mcmFnc2l6ZTsKLQlpZiAoZHAtPm5leHRJbiA+PSBkcC0+cmF3YnVmICsgZHAtPmRtYXNpemUpCi0JCWRwLT5uZXh0SW4gLT0gZHAtPmRtYXNpemU7Ci0KLQlkcC0+Y291bnQgKz0gb2J5dGVzOwotCWRwLT50b3RhbF9ieXRlcyArPSBvYnl0ZXM7Ci0KLQkvKiB3YWtlIHVwIGFueWJvZHkgbGlzdGVuaW5nCi0JKi8KLQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmZHAtPndhaXQpKQotCQl3YWtlX3VwKCZkcC0+d2FpdCk7Ci0KLQlzcGluX3VubG9jaygmcy0+bG9jayk7Ci19Ci0KLXN0YXRpYyBsb2ZmX3QKLWF1MTU1MF9sbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnaW4pCi17Ci0JcmV0dXJuIC1FU1BJUEU7Ci19Ci0KLQotc3RhdGljIGludAotYXUxNTUwX29wZW5fbWl4ZGV2KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCW11dGV4X2xvY2soJmF1MTU1MF9hYzk3X211dGV4KTsKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSAmYXUxNTUwX3N0YXRlOwotCW11dGV4X3VubG9jaygmYXUxNTUwX2FjOTdfbXV0ZXgpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1hdTE1NTBfcmVsZWFzZV9taXhkZXYoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLW1peGRldl9pb2N0bChzdHJ1Y3QgYWM5N19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCBjbWQsCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlyZXR1cm4gY29kZWMtPm1peGVyX2lvY3RsKGNvZGVjLCBjbWQsIGFyZyk7Ci19Ci0KLXN0YXRpYyBsb25nCi1hdTE1NTBfaW9jdGxfbWl4ZGV2KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzdHJ1Y3QgYXUxNTUwX3N0YXRlICpzID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBhYzk3X2NvZGVjICpjb2RlYyA9IHMtPmNvZGVjOwotCWludCByZXQ7Ci0KLQltdXRleF9sb2NrKCZhdTE1NTBfYWM5N19tdXRleCk7Ci0JcmV0ID0gbWl4ZGV2X2lvY3RsKGNvZGVjLCBjbWQsIGFyZyk7Ci0JbXV0ZXhfdW5sb2NrKCZhdTE1NTBfYWM5N19tdXRleCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgLypjb25zdCAqLyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGF1MTU1MF9taXhlcl9mb3BzID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkubGxzZWVrCQk9IGF1MTU1MF9sbHNlZWssCi0JLnVubG9ja2VkX2lvY3RsCT0gYXUxNTUwX2lvY3RsX21peGRldiwKLQkub3BlbgkJPSBhdTE1NTBfb3Blbl9taXhkZXYsCi0JLnJlbGVhc2UJPSBhdTE1NTBfcmVsZWFzZV9taXhkZXYsCi19OwotCi1zdGF0aWMgaW50Ci1kcmFpbl9kYWMoc3RydWN0IGF1MTU1MF9zdGF0ZSAqcywgaW50IG5vbmJsb2NrKQotewotCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKLQlpbnQgICAgICAgICAgICAgY291bnQsIHRtbzsKLQotCWlmIChzLT5kbWFfZGFjLm1hcHBlZCB8fCAhcy0+ZG1hX2RhYy5yZWFkeSB8fCBzLT5kbWFfZGFjLnN0b3BwZWQpCi0JCXJldHVybiAwOwotCi0JZm9yICg7OykgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCQljb3VudCA9IHMtPmRtYV9kYWMuY291bnQ7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJaWYgKGNvdW50IDw9IHMtPmRtYV9kYWMuZnJhZ3NpemUpCi0JCQlicmVhazsKLQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQotCQkJYnJlYWs7Ci0JCWlmIChub25ibG9jaykKLQkJCXJldHVybiAtRUJVU1k7Ci0JCXRtbyA9IDEwMDAgKiBjb3VudCAvIChzLT5ub192cmEgPwotCQkJCSAgICAgIDQ4MDAwIDogcy0+ZG1hX2RhYy5zYW1wbGVfcmF0ZSk7Ci0JCXRtbyAvPSBzLT5kbWFfZGFjLmRtYV9ieXRlc19wZXJfc2FtcGxlOwotCQlhdTE1NTBfZGVsYXkodG1vKTsKLQl9Ci0JaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQotCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHU4IFMxNl9UT19VOChzMTYgY2gpCi17Ci0JcmV0dXJuICh1OCkgKGNoID4+IDgpICsgMHg4MDsKLX0KLXN0YXRpYyBpbmxpbmUgczE2IFU4X1RPX1MxNih1OCBjaCkKLXsKLQlyZXR1cm4gKHMxNikgKGNoIC0gMHg4MCkgPDwgODsKLX0KLQotLyoKLSAqIFRyYW5zbGF0ZXMgdXNlciBzYW1wbGVzIHRvIGRtYSBidWZmZXIgc3VpdGFibGUgZm9yIEFDJzk3IERBQyBkYXRhOgotICogICAgIElmIG1vbm8sIGNvcHkgbGVmdCBjaGFubmVsIHRvIHJpZ2h0IGNoYW5uZWwgaW4gZG1hIGJ1ZmZlci4KLSAqICAgICBJZiA4IGJpdCBzYW1wbGVzLCBjdnQgdG8gMTYtYml0IGJlZm9yZSB3cml0aW5nIHRvIGRtYSBidWZmZXIuCi0gKiAgICAgSWYgaW50ZXJwb2xhdGluZyAobm8gVlJBKSwgZHVwbGljYXRlIGV2ZXJ5IGF1ZGlvIGZyYW1lIHNyY19mYWN0b3IgdGltZXMuCi0gKi8KLXN0YXRpYyBpbnQKLXRyYW5zbGF0ZV9mcm9tX3VzZXIoc3RydWN0IGRtYWJ1ZiAqZGIsIGNoYXIqIGRtYWJ1ZiwgY2hhciogdXNlcmJ1ZiwKLQkJCQkJCQkgICAgICAgaW50IGRtYWNvdW50KQotewotCWludCAgICAgICAgICAgICBzYW1wbGUsIGk7Ci0JaW50ICAgICAgICAgICAgIGludGVycF9ieXRlc19wZXJfc2FtcGxlOwotCWludCAgICAgICAgICAgICBudW1fc2FtcGxlczsKLQlpbnQgICAgICAgICAgICAgbW9ubyA9IChkYi0+bnVtX2NoYW5uZWxzID09IDEpOwotCWNoYXIgICAgICAgICAgICB1c2Vyc2FtcGxlWzEyXTsKLQlzMTYgICAgICAgICAgICAgY2gsIGRtYXNhbXBsZVs2XTsKLQotCWlmIChkYi0+c2FtcGxlX3NpemUgPT0gMTYgJiYgIW1vbm8gJiYgZGItPnNyY19mYWN0b3IgPT0gMSkgewotCQkvKiBubyB0cmFuc2xhdGlvbiBuZWNlc3NhcnksIGp1c3QgY29weQotCQkqLwotCQlpZiAoY29weV9mcm9tX3VzZXIoZG1hYnVmLCB1c2VyYnVmLCBkbWFjb3VudCkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJcmV0dXJuIGRtYWNvdW50OwotCX0KLQotCWludGVycF9ieXRlc19wZXJfc2FtcGxlID0gZGItPmRtYV9ieXRlc19wZXJfc2FtcGxlICogZGItPnNyY19mYWN0b3I7Ci0JbnVtX3NhbXBsZXMgPSBkbWFjb3VudCAvIGludGVycF9ieXRlc19wZXJfc2FtcGxlOwotCi0JZm9yIChzYW1wbGUgPSAwOyBzYW1wbGUgPCBudW1fc2FtcGxlczsgc2FtcGxlKyspIHsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKHVzZXJzYW1wbGUsIHVzZXJidWYsCi0JCQkJICAgZGItPnVzZXJfYnl0ZXNfcGVyX3NhbXBsZSkpIHsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0KLQkJZm9yIChpID0gMDsgaSA8IGRiLT5udW1fY2hhbm5lbHM7IGkrKykgewotCQkJaWYgKGRiLT5zYW1wbGVfc2l6ZSA9PSA4KQotCQkJCWNoID0gVThfVE9fUzE2KHVzZXJzYW1wbGVbaV0pOwotCQkJZWxzZQotCQkJCWNoID0gKigoczE2ICopICgmdXNlcnNhbXBsZVtpICogMl0pKTsKLQkJCWRtYXNhbXBsZVtpXSA9IGNoOwotCQkJaWYgKG1vbm8pCi0JCQkJZG1hc2FtcGxlW2kgKyAxXSA9IGNoOwkvKiByaWdodCBjaGFubmVsICovCi0JCX0KLQotCQkvKiBkdXBsaWNhdGUgZXZlcnkgYXVkaW8gZnJhbWUgc3JjX2ZhY3RvciB0aW1lcwotCQkqLwotCQlmb3IgKGkgPSAwOyBpIDwgZGItPnNyY19mYWN0b3I7IGkrKykKLQkJCW1lbWNweShkbWFidWYsIGRtYXNhbXBsZSwgZGItPmRtYV9ieXRlc19wZXJfc2FtcGxlKTsKLQotCQl1c2VyYnVmICs9IGRiLT51c2VyX2J5dGVzX3Blcl9zYW1wbGU7Ci0JCWRtYWJ1ZiArPSBpbnRlcnBfYnl0ZXNfcGVyX3NhbXBsZTsKLQl9Ci0KLQlyZXR1cm4gbnVtX3NhbXBsZXMgKiBpbnRlcnBfYnl0ZXNfcGVyX3NhbXBsZTsKLX0KLQotLyoKLSAqIFRyYW5zbGF0ZXMgQUMnOTcgQURDIHNhbXBsZXMgdG8gdXNlciBidWZmZXI6Ci0gKiAgICAgSWYgbW9ubywgc2VuZCBvbmx5IGxlZnQgY2hhbm5lbCB0byB1c2VyIGJ1ZmZlci4KLSAqICAgICBJZiA4IGJpdCBzYW1wbGVzLCBjdnQgZnJvbSAxNiB0byA4IGJpdCBiZWZvcmUgd3JpdGluZyB0byB1c2VyIGJ1ZmZlci4KLSAqICAgICBJZiBkZWNpbWF0aW5nIChubyBWUkEpLCBza2lwIG92ZXIgc3JjX2ZhY3RvciBhdWRpbyBmcmFtZXMuCi0gKi8KLXN0YXRpYyBpbnQKLXRyYW5zbGF0ZV90b191c2VyKHN0cnVjdCBkbWFidWYgKmRiLCBjaGFyKiB1c2VyYnVmLCBjaGFyKiBkbWFidWYsCi0JCQkJCQkJICAgICBpbnQgZG1hY291bnQpCi17Ci0JaW50ICAgICAgICAgICAgIHNhbXBsZSwgaTsKLQlpbnQgICAgICAgICAgICAgaW50ZXJwX2J5dGVzX3Blcl9zYW1wbGU7Ci0JaW50ICAgICAgICAgICAgIG51bV9zYW1wbGVzOwotCWludCAgICAgICAgICAgICBtb25vID0gKGRiLT5udW1fY2hhbm5lbHMgPT0gMSk7Ci0JY2hhciAgICAgICAgICAgIHVzZXJzYW1wbGVbMTJdOwotCi0JaWYgKGRiLT5zYW1wbGVfc2l6ZSA9PSAxNiAmJiAhbW9ubyAmJiBkYi0+c3JjX2ZhY3RvciA9PSAxKSB7Ci0JCS8qIG5vIHRyYW5zbGF0aW9uIG5lY2Vzc2FyeSwganVzdCBjb3B5Ci0JCSovCi0JCWlmIChjb3B5X3RvX3VzZXIodXNlcmJ1ZiwgZG1hYnVmLCBkbWFjb3VudCkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJcmV0dXJuIGRtYWNvdW50OwotCX0KLQotCWludGVycF9ieXRlc19wZXJfc2FtcGxlID0gZGItPmRtYV9ieXRlc19wZXJfc2FtcGxlICogZGItPnNyY19mYWN0b3I7Ci0JbnVtX3NhbXBsZXMgPSBkbWFjb3VudCAvIGludGVycF9ieXRlc19wZXJfc2FtcGxlOwotCi0JZm9yIChzYW1wbGUgPSAwOyBzYW1wbGUgPCBudW1fc2FtcGxlczsgc2FtcGxlKyspIHsKLQkJZm9yIChpID0gMDsgaSA8IGRiLT5udW1fY2hhbm5lbHM7IGkrKykgewotCQkJaWYgKGRiLT5zYW1wbGVfc2l6ZSA9PSA4KQotCQkJCXVzZXJzYW1wbGVbaV0gPQotCQkJCQlTMTZfVE9fVTgoKigoczE2ICopICgmZG1hYnVmW2kgKiAyXSkpKTsKLQkJCWVsc2UKLQkJCQkqKChzMTYgKikgKCZ1c2Vyc2FtcGxlW2kgKiAyXSkpID0KLQkJCQkJKigoczE2ICopICgmZG1hYnVmW2kgKiAyXSkpOwotCQl9Ci0KLQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyYnVmLCB1c2Vyc2FtcGxlLAotCQkJCSBkYi0+dXNlcl9ieXRlc19wZXJfc2FtcGxlKSkgewotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KLQotCQl1c2VyYnVmICs9IGRiLT51c2VyX2J5dGVzX3Blcl9zYW1wbGU7Ci0JCWRtYWJ1ZiArPSBpbnRlcnBfYnl0ZXNfcGVyX3NhbXBsZTsKLQl9Ci0KLQlyZXR1cm4gbnVtX3NhbXBsZXMgKiBpbnRlcnBfYnl0ZXNfcGVyX3NhbXBsZTsKLX0KLQotLyoKLSAqIENvcHkgYXVkaW8gZGF0YSB0by9mcm9tIHVzZXIgYnVmZmVyIGZyb20vdG8gZG1hIGJ1ZmZlciwgdGFraW5nIGNhcmUKLSAqIHRoYXQgd2Ugd3JhcCB3aGVuIHJlYWRpbmcvd3JpdGluZyB0aGUgZG1hIGJ1ZmZlci4gUmV0dXJucyBhY3R1YWwgYnl0ZQotICogY291bnQgd3JpdHRlbiB0byBvciByZWFkIGZyb20gdGhlIGRtYSBidWZmZXIuCi0gKi8KLXN0YXRpYyBpbnQKLWNvcHlfZG1hYnVmX3VzZXIoc3RydWN0IGRtYWJ1ZiAqZGIsIGNoYXIqIHVzZXJidWYsIGludCBjb3VudCwgaW50IHRvX3VzZXIpCi17Ci0JY2hhciAgICAgICAgICAgKmJ1ZnB0ciA9IHRvX3VzZXIgPyBkYi0+bmV4dE91dCA6IGRiLT5uZXh0SW47Ci0JY2hhciAgICAgICAgICAgKmJ1ZmVuZCA9IGRiLT5yYXdidWYgKyBkYi0+ZG1hc2l6ZTsKLQlpbnQgICAgICAgICAgICAgY250LCByZXQ7Ci0KLQlpZiAoYnVmcHRyICsgY291bnQgPiBidWZlbmQpIHsKLQkJaW50ICAgICAgICAgICAgIHBhcnRpYWwgPSAoaW50KSAoYnVmZW5kIC0gYnVmcHRyKTsKLQkJaWYgKHRvX3VzZXIpIHsKLQkJCWlmICgoY250ID0gdHJhbnNsYXRlX3RvX3VzZXIoZGIsIHVzZXJidWYsCi0JCQkJCQkgICAgIGJ1ZnB0ciwgcGFydGlhbCkpIDwgMCkKLQkJCQlyZXR1cm4gY250OwotCQkJcmV0ID0gY250OwotCQkJaWYgKChjbnQgPSB0cmFuc2xhdGVfdG9fdXNlcihkYiwgdXNlcmJ1ZiArIHBhcnRpYWwsCi0JCQkJCQkgICAgIGRiLT5yYXdidWYsCi0JCQkJCQkgICAgIGNvdW50IC0gcGFydGlhbCkpIDwgMCkKLQkJCQlyZXR1cm4gY250OwotCQkJcmV0ICs9IGNudDsKLQkJfSBlbHNlIHsKLQkJCWlmICgoY250ID0gdHJhbnNsYXRlX2Zyb21fdXNlcihkYiwgYnVmcHRyLCB1c2VyYnVmLAotCQkJCQkJICAgICAgIHBhcnRpYWwpKSA8IDApCi0JCQkJcmV0dXJuIGNudDsKLQkJCXJldCA9IGNudDsKLQkJCWlmICgoY250ID0gdHJhbnNsYXRlX2Zyb21fdXNlcihkYiwgZGItPnJhd2J1ZiwKLQkJCQkJCSAgICAgICB1c2VyYnVmICsgcGFydGlhbCwKLQkJCQkJCSAgICAgICBjb3VudCAtIHBhcnRpYWwpKSA8IDApCi0JCQkJcmV0dXJuIGNudDsKLQkJCXJldCArPSBjbnQ7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAodG9fdXNlcikKLQkJCXJldCA9IHRyYW5zbGF0ZV90b191c2VyKGRiLCB1c2VyYnVmLCBidWZwdHIsIGNvdW50KTsKLQkJZWxzZQotCQkJcmV0ID0gdHJhbnNsYXRlX2Zyb21fdXNlcihkYiwgYnVmcHRyLCB1c2VyYnVmLCBjb3VudCk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotCi1zdGF0aWMgc3NpemVfdAotYXUxNTUwX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGF1MTU1MF9zdGF0ZSAqcyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgZG1hYnVmICAqZGIgPSAmcy0+ZG1hX2FkYzsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKLQlzc2l6ZV90ICAgICAgICAgcmV0OwotCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKLQlpbnQgICAgICAgICAgICAgY250LCB1c2VyY250LCBhdmFpbDsKLQotCWlmIChkYi0+bWFwcGVkKQotCQlyZXR1cm4gLUVOWElPOwotCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgYnVmZmVyLCBjb3VudCkpCi0JCXJldHVybiAtRUZBVUxUOwotCXJldCA9IDA7Ci0KLQljb3VudCAqPSBkYi0+Y250X2ZhY3RvcjsKLQotCW11dGV4X2xvY2soJnMtPnNlbSk7Ci0JYWRkX3dhaXRfcXVldWUoJmRiLT53YWl0LCAmd2FpdCk7Ci0KLQl3aGlsZSAoY291bnQgPiAwKSB7Ci0JCS8qIHdhaXQgZm9yIHNhbXBsZXMgaW4gQURDIGRtYSBidWZmZXIKLQkJKi8KLQkJZG8gewotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJCWlmIChkYi0+c3RvcHBlZCkKLQkJCQlzdGFydF9hZGMocyk7Ci0JCQlhdmFpbCA9IGRiLT5jb3VudDsKLQkJCWlmIChhdmFpbCA8PSAwKQotCQkJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJCWlmIChhdmFpbCA8PSAwKSB7Ci0JCQkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7Ci0JCQkJCWlmICghcmV0KQotCQkJCQkJcmV0ID0gLUVBR0FJTjsKLQkJCQkJZ290byBvdXQ7Ci0JCQkJfQotCQkJCW11dGV4X3VubG9jaygmcy0+c2VtKTsKLQkJCQlzY2hlZHVsZSgpOwotCQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJCQlpZiAoIXJldCkKLQkJCQkJCXJldCA9IC1FUkVTVEFSVFNZUzsKLQkJCQkJZ290byBvdXQyOwotCQkJCX0KLQkJCQltdXRleF9sb2NrKCZzLT5zZW0pOwotCQkJfQotCQl9IHdoaWxlIChhdmFpbCA8PSAwKTsKLQotCQkvKiBjb3B5IGZyb20gbmV4dE91dCB0byB1c2VyCi0JCSovCi0JCWlmICgoY250ID0gY29weV9kbWFidWZfdXNlcihkYiwgYnVmZmVyLAotCQkJCQkgICAgY291bnQgPiBhdmFpbCA/Ci0JCQkJCSAgICBhdmFpbCA6IGNvdW50LCAxKSkgPCAwKSB7Ci0JCQlpZiAoIXJldCkKLQkJCQlyZXQgPSAtRUZBVUxUOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCQlkYi0+Y291bnQgLT0gY250OwotCQlkYi0+bmV4dE91dCArPSBjbnQ7Ci0JCWlmIChkYi0+bmV4dE91dCA+PSBkYi0+cmF3YnVmICsgZGItPmRtYXNpemUpCi0JCQlkYi0+bmV4dE91dCAtPSBkYi0+ZG1hc2l6ZTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwotCi0JCWNvdW50IC09IGNudDsKLQkJdXNlcmNudCA9IGNudCAvIGRiLT5jbnRfZmFjdG9yOwotCQlidWZmZXIgKz0gdXNlcmNudDsKLQkJcmV0ICs9IHVzZXJjbnQ7Ci0JfQkJCS8qIHdoaWxlIChjb3VudCA+IDApICovCi0KLW91dDoKLQltdXRleF91bmxvY2soJnMtPnNlbSk7Ci1vdXQyOgotCXJlbW92ZV93YWl0X3F1ZXVlKCZkYi0+d2FpdCwgJndhaXQpOwotCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHNzaXplX3QKLWF1MTU1MF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqIHBwb3MpCi17Ci0Jc3RydWN0IGF1MTU1MF9zdGF0ZSAqcyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgZG1hYnVmICAqZGIgPSAmcy0+ZG1hX2RhYzsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKLQlzc2l6ZV90ICAgICAgICAgcmV0ID0gMDsKLQl1bnNpZ25lZCBsb25nICAgZmxhZ3M7Ci0JaW50ICAgICAgICAgICAgIGNudCwgdXNlcmNudCwgYXZhaWw7Ci0KLQlwcl9kZWJ1Zygid3JpdGU6IGNvdW50PSVkXG4iLCBjb3VudCk7Ci0KLQlpZiAoZGItPm1hcHBlZCkKLQkJcmV0dXJuIC1FTlhJTzsKLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgYnVmZmVyLCBjb3VudCkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JY291bnQgKj0gZGItPmNudF9mYWN0b3I7Ci0KLQltdXRleF9sb2NrKCZzLT5zZW0pOwotCWFkZF93YWl0X3F1ZXVlKCZkYi0+d2FpdCwgJndhaXQpOwotCi0Jd2hpbGUgKGNvdW50ID4gMCkgewotCQkvKiB3YWl0IGZvciBzcGFjZSBpbiBwbGF5YmFjayBidWZmZXIKLQkJKi8KLQkJZG8gewotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJCWF2YWlsID0gKGludCkgZGItPmRtYXNpemUgLSBkYi0+Y291bnQ7Ci0JCQlpZiAoYXZhaWwgPD0gMCkKLQkJCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCQlpZiAoYXZhaWwgPD0gMCkgewotCQkJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQkJCQlpZiAoIXJldCkKLQkJCQkJCXJldCA9IC1FQUdBSU47Ci0JCQkJCWdvdG8gb3V0OwotCQkJCX0KLQkJCQltdXRleF91bmxvY2soJnMtPnNlbSk7Ci0JCQkJc2NoZWR1bGUoKTsKLQkJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCQkJaWYgKCFyZXQpCi0JCQkJCQlyZXQgPSAtRVJFU1RBUlRTWVM7Ci0JCQkJCWdvdG8gb3V0MjsKLQkJCQl9Ci0JCQkJbXV0ZXhfbG9jaygmcy0+c2VtKTsKLQkJCX0KLQkJfSB3aGlsZSAoYXZhaWwgPD0gMCk7Ci0KLQkJLyogY29weSBmcm9tIHVzZXIgdG8gbmV4dEluCi0JCSovCi0JCWlmICgoY250ID0gY29weV9kbWFidWZfdXNlcihkYiwgKGNoYXIgKikgYnVmZmVyLAotCQkJCQkgICAgY291bnQgPiBhdmFpbCA/Ci0JCQkJCSAgICBhdmFpbCA6IGNvdW50LCAwKSkgPCAwKSB7Ci0JCQlpZiAoIXJldCkKLQkJCQlyZXQgPSAtRUZBVUxUOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCQlkYi0+Y291bnQgKz0gY250OwotCQlkYi0+bmV4dEluICs9IGNudDsKLQkJaWYgKGRiLT5uZXh0SW4gPj0gZGItPnJhd2J1ZiArIGRiLT5kbWFzaXplKQotCQkJZGItPm5leHRJbiAtPSBkYi0+ZG1hc2l6ZTsKLQotCQkvKiBJZiB0aGUgZGF0YSBpcyBhdmFpbGFibGUsIHdlIHdhbnQgdG8ga2VlcCB0d28gYnVmZmVycwotCQkgKiBvbiB0aGUgZG1hIHF1ZXVlLiAgSWYgdGhlIHF1ZXVlIGNvdW50IHJlYWNoZXMgemVybywKLQkJICogd2Uga25vdyB0aGUgZG1hIGhhcyBzdG9wcGVkLgotCQkgKi8KLQkJd2hpbGUgKChkYi0+ZG1hX3Fjb3VudCA8IDIpICYmIChkYi0+Y291bnQgPj0gZGItPmZyYWdzaXplKSkgewotCQkJaWYgKGF1MXh4eF9kYmRtYV9wdXRfc291cmNlKGRiLT5kbWFuciwKLQkJCQl2aXJ0X3RvX3BoeXMoZGItPm5leHRPdXQpLCBkYi0+ZnJhZ3NpemUsCi0JCQkJRERNQV9GTEFHU19JRSkgPT0gMCkgewotCQkJCWVycigicWNvdW50IDwgMiBhbmQgbm8gcmluZyByb29tISIpOwotCQkJfQotCQkJZGItPm5leHRPdXQgKz0gZGItPmZyYWdzaXplOwotCQkJaWYgKGRiLT5uZXh0T3V0ID49IGRiLT5yYXdidWYgKyBkYi0+ZG1hc2l6ZSkKLQkJCQlkYi0+bmV4dE91dCAtPSBkYi0+ZG1hc2l6ZTsKLQkJCWRiLT50b3RhbF9ieXRlcyArPSBkYi0+ZG1hX2ZyYWdzaXplOwotCQkJaWYgKGRiLT5kbWFfcWNvdW50ID09IDApCi0JCQkJc3RhcnRfZGFjKHMpOwotCQkJZGItPmRtYV9xY291bnQrKzsKLQkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci0KLQkJY291bnQgLT0gY250OwotCQl1c2VyY250ID0gY250IC8gZGItPmNudF9mYWN0b3I7Ci0JCWJ1ZmZlciArPSB1c2VyY250OwotCQlyZXQgKz0gdXNlcmNudDsKLQl9CQkJLyogd2hpbGUgKGNvdW50ID4gMCkgKi8KLQotb3V0OgotCW11dGV4X3VubG9jaygmcy0+c2VtKTsKLW91dDI6Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJmRiLT53YWl0LCAmd2FpdCk7Ci0Jc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQlyZXR1cm4gcmV0OwotfQotCi0KLS8qIE5vIGtlcm5lbCBsb2NrIC0gd2UgaGF2ZSBvdXIgb3duIHNwaW5sb2NrICovCi1zdGF0aWMgdW5zaWduZWQgaW50Ci1hdTE1NTBfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQotewotCXN0cnVjdCBhdTE1NTBfc3RhdGUgKnMgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JdW5zaWduZWQgbG9uZyAgIGZsYWdzOwotCXVuc2lnbmVkIGludCAgICBtYXNrID0gMDsKLQotCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewotCQlpZiAoIXMtPmRtYV9kYWMucmVhZHkpCi0JCQlyZXR1cm4gMDsKLQkJcG9sbF93YWl0KGZpbGUsICZzLT5kbWFfZGFjLndhaXQsIHdhaXQpOwotCX0KLQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgewotCQlpZiAoIXMtPmRtYV9hZGMucmVhZHkpCi0JCQlyZXR1cm4gMDsKLQkJcG9sbF93YWl0KGZpbGUsICZzLT5kbWFfYWRjLndhaXQsIHdhaXQpOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgewotCQlpZiAocy0+ZG1hX2FkYy5jb3VudCA+PSAoc2lnbmVkKXMtPmRtYV9hZGMuZG1hX2ZyYWdzaXplKQotCQkJbWFzayB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOwotCX0KLQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKLQkJaWYgKHMtPmRtYV9kYWMubWFwcGVkKSB7Ci0JCQlpZiAocy0+ZG1hX2RhYy5jb3VudCA+PQotCQkJICAgIChzaWduZWQpcy0+ZG1hX2RhYy5kbWFfZnJhZ3NpemUpCi0JCQkJbWFzayB8PSBQT0xMT1VUIHwgUE9MTFdSTk9STTsKLQkJfSBlbHNlIHsKLQkJCWlmICgoc2lnbmVkKSBzLT5kbWFfZGFjLmRtYXNpemUgPj0KLQkJCSAgICBzLT5kbWFfZGFjLmNvdW50ICsgKHNpZ25lZClzLT5kbWFfZGFjLmRtYV9mcmFnc2l6ZSkKLQkJCQltYXNrIHw9IFBPTExPVVQgfCBQT0xMV1JOT1JNOwotCQl9Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gbWFzazsKLX0KLQotc3RhdGljIGludAotYXUxNTUwX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQotewotCXN0cnVjdCBhdTE1NTBfc3RhdGUgKnMgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGRtYWJ1ZiAgKmRiOwotCXVuc2lnbmVkIGxvbmcgICBzaXplOwotCWludCByZXQgPSAwOwotCi0JbXV0ZXhfbG9jaygmYXUxNTUwX2FjOTdfbXV0ZXgpOwotCW11dGV4X2xvY2soJnMtPnNlbSk7Ci0JaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkKLQkJZGIgPSAmcy0+ZG1hX2RhYzsKLQllbHNlIGlmICh2bWEtPnZtX2ZsYWdzICYgVk1fUkVBRCkKLQkJZGIgPSAmcy0+ZG1hX2FkYzsKLQllbHNlIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCWlmICh2bWEtPnZtX3Bnb2ZmICE9IDApIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCXNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7Ci0JaWYgKHNpemUgPiAoUEFHRV9TSVpFIDw8IGRiLT5idWZvcmRlcikpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCWlmIChyZW1hcF9wZm5fcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCBwYWdlX3RvX3Bmbih2aXJ0X3RvX3BhZ2UoZGItPnJhd2J1ZikpLAotCQkJICAgICBzaXplLCB2bWEtPnZtX3BhZ2VfcHJvdCkpIHsKLQkJcmV0ID0gLUVBR0FJTjsKLQkJZ290byBvdXQ7Ci0JfQotCXZtYS0+dm1fZmxhZ3MgJj0gflZNX0lPOwotCWRiLT5tYXBwZWQgPSAxOwotb3V0OgotCW11dGV4X3VubG9jaygmcy0+c2VtKTsKLQltdXRleF91bmxvY2soJmF1MTU1MF9hYzk3X211dGV4KTsKLQlyZXR1cm4gcmV0OwotfQotCi0jaWZkZWYgREVCVUcKLXN0YXRpYyBzdHJ1Y3QgaW9jdGxfc3RyX3QgewotCXVuc2lnbmVkIGludCAgICBjbWQ7Ci0JY29uc3QgY2hhciAgICAgKnN0cjsKLX0gaW9jdGxfc3RyW10gPSB7Ci0Je1NORENUTF9EU1BfUkVTRVQsICJTTkRDVExfRFNQX1JFU0VUIn0sCi0Je1NORENUTF9EU1BfU1lOQywgIlNORENUTF9EU1BfU1lOQyJ9LAotCXtTTkRDVExfRFNQX1NQRUVELCAiU05EQ1RMX0RTUF9TUEVFRCJ9LAotCXtTTkRDVExfRFNQX1NURVJFTywgIlNORENUTF9EU1BfU1RFUkVPIn0sCi0Je1NORENUTF9EU1BfR0VUQkxLU0laRSwgIlNORENUTF9EU1BfR0VUQkxLU0laRSJ9LAotCXtTTkRDVExfRFNQX1NBTVBMRVNJWkUsICJTTkRDVExfRFNQX1NBTVBMRVNJWkUifSwKLQl7U05EQ1RMX0RTUF9DSEFOTkVMUywgIlNORENUTF9EU1BfQ0hBTk5FTFMifSwKLQl7U09VTkRfUENNX1dSSVRFX0NIQU5ORUxTLCAiU09VTkRfUENNX1dSSVRFX0NIQU5ORUxTIn0sCi0Je1NPVU5EX1BDTV9XUklURV9GSUxURVIsICJTT1VORF9QQ01fV1JJVEVfRklMVEVSIn0sCi0Je1NORENUTF9EU1BfUE9TVCwgIlNORENUTF9EU1BfUE9TVCJ9LAotCXtTTkRDVExfRFNQX1NVQkRJVklERSwgIlNORENUTF9EU1BfU1VCRElWSURFIn0sCi0Je1NORENUTF9EU1BfU0VURlJBR01FTlQsICJTTkRDVExfRFNQX1NFVEZSQUdNRU5UIn0sCi0Je1NORENUTF9EU1BfR0VURk1UUywgIlNORENUTF9EU1BfR0VURk1UUyJ9LAotCXtTTkRDVExfRFNQX1NFVEZNVCwgIlNORENUTF9EU1BfU0VURk1UIn0sCi0Je1NORENUTF9EU1BfR0VUT1NQQUNFLCAiU05EQ1RMX0RTUF9HRVRPU1BBQ0UifSwKLQl7U05EQ1RMX0RTUF9HRVRJU1BBQ0UsICJTTkRDVExfRFNQX0dFVElTUEFDRSJ9LAotCXtTTkRDVExfRFNQX05PTkJMT0NLLCAiU05EQ1RMX0RTUF9OT05CTE9DSyJ9LAotCXtTTkRDVExfRFNQX0dFVENBUFMsICJTTkRDVExfRFNQX0dFVENBUFMifSwKLQl7U05EQ1RMX0RTUF9HRVRUUklHR0VSLCAiU05EQ1RMX0RTUF9HRVRUUklHR0VSIn0sCi0Je1NORENUTF9EU1BfU0VUVFJJR0dFUiwgIlNORENUTF9EU1BfU0VUVFJJR0dFUiJ9LAotCXtTTkRDVExfRFNQX0dFVElQVFIsICJTTkRDVExfRFNQX0dFVElQVFIifSwKLQl7U05EQ1RMX0RTUF9HRVRPUFRSLCAiU05EQ1RMX0RTUF9HRVRPUFRSIn0sCi0Je1NORENUTF9EU1BfTUFQSU5CVUYsICJTTkRDVExfRFNQX01BUElOQlVGIn0sCi0Je1NORENUTF9EU1BfTUFQT1VUQlVGLCAiU05EQ1RMX0RTUF9NQVBPVVRCVUYifSwKLQl7U05EQ1RMX0RTUF9TRVRTWU5DUk8sICJTTkRDVExfRFNQX1NFVFNZTkNSTyJ9LAotCXtTTkRDVExfRFNQX1NFVERVUExFWCwgIlNORENUTF9EU1BfU0VURFVQTEVYIn0sCi0Je1NORENUTF9EU1BfR0VUT0RFTEFZLCAiU05EQ1RMX0RTUF9HRVRPREVMQVkifSwKLQl7U05EQ1RMX0RTUF9HRVRDSEFOTkVMTUFTSywgIlNORENUTF9EU1BfR0VUQ0hBTk5FTE1BU0sifSwKLQl7U05EQ1RMX0RTUF9CSU5EX0NIQU5ORUwsICJTTkRDVExfRFNQX0JJTkRfQ0hBTk5FTCJ9LAotCXtPU1NfR0VUVkVSU0lPTiwgIk9TU19HRVRWRVJTSU9OIn0sCi0Je1NPVU5EX1BDTV9SRUFEX1JBVEUsICJTT1VORF9QQ01fUkVBRF9SQVRFIn0sCi0Je1NPVU5EX1BDTV9SRUFEX0NIQU5ORUxTLCAiU09VTkRfUENNX1JFQURfQ0hBTk5FTFMifSwKLQl7U09VTkRfUENNX1JFQURfQklUUywgIlNPVU5EX1BDTV9SRUFEX0JJVFMifSwKLQl7U09VTkRfUENNX1JFQURfRklMVEVSLCAiU09VTkRfUENNX1JFQURfRklMVEVSIn0KLX07Ci0jZW5kaWYKLQotc3RhdGljIGludAotZG1hX2NvdW50X2RvbmUoc3RydWN0IGRtYWJ1ZiAqZGIpCi17Ci0JaWYgKGRiLT5zdG9wcGVkKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBkYi0+ZG1hX2ZyYWdzaXplIC0gYXUxeHh4X2dldF9kbWFfcmVzaWR1ZShkYi0+ZG1hbnIpOwotfQotCi0KLXN0YXRpYyBpbnQKLWF1MTU1MF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0Jc3RydWN0IGF1MTU1MF9zdGF0ZSAqcyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQl1bnNpZ25lZCBsb25nICAgZmxhZ3M7Ci0JYXVkaW9fYnVmX2luZm8gIGFiaW5mbzsKLQljb3VudF9pbmZvICAgICAgY2luZm87Ci0JaW50ICAgICAgICAgICAgIGNvdW50OwotCWludCAgICAgICAgICAgICB2YWwsIG1hcHBlZCwgcmV0LCBkaWZmOwotCi0JbWFwcGVkID0gKChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgJiYgcy0+ZG1hX2RhYy5tYXBwZWQpIHx8Ci0JCSgoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgJiYgcy0+ZG1hX2FkYy5tYXBwZWQpOwotCi0jaWZkZWYgREVCVUcKLQlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBBUlJBWV9TSVpFKGlvY3RsX3N0cik7IGNvdW50KyspIHsKLQkJaWYgKGlvY3RsX3N0cltjb3VudF0uY21kID09IGNtZCkKLQkJCWJyZWFrOwotCX0KLQlpZiAoY291bnQgPCBBUlJBWV9TSVpFKGlvY3RsX3N0cikpCi0JCXByX2RlYnVnKCJpb2N0bCAlcywgYXJnPTB4JWx4biIsIGlvY3RsX3N0cltjb3VudF0uc3RyLCBhcmcpOwotCWVsc2UKLQkJcHJfZGVidWcoImlvY3RsIDB4JXggdW5rbm93biwgYXJnPTB4JWx4XG4iLCBjbWQsIGFyZyk7Ci0jZW5kaWYKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBPU1NfR0VUVkVSU0lPTjoKLQkJcmV0dXJuIHB1dF91c2VyKFNPVU5EX1ZFUlNJT04sIChpbnQgKikgYXJnKTsKLQotCWNhc2UgU05EQ1RMX0RTUF9TWU5DOgotCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpCi0JCQlyZXR1cm4gZHJhaW5fZGFjKHMsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKLQkJcmV0dXJuIDA7Ci0KLQljYXNlIFNORENUTF9EU1BfU0VURFVQTEVYOgotCQlyZXR1cm4gMDsKLQotCWNhc2UgU05EQ1RMX0RTUF9HRVRDQVBTOgotCQlyZXR1cm4gcHV0X3VzZXIoRFNQX0NBUF9EVVBMRVggfCBEU1BfQ0FQX1JFQUxUSU1FIHwKLQkJCQlEU1BfQ0FQX1RSSUdHRVIgfCBEU1BfQ0FQX01NQVAsIChpbnQgKilhcmcpOwotCi0JY2FzZSBTTkRDVExfRFNQX1JFU0VUOgotCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKLQkJCXN0b3BfZGFjKHMpOwotCQkJc3luY2hyb25pemVfaXJxKCk7Ci0JCQlzLT5kbWFfZGFjLmNvdW50ID0gcy0+ZG1hX2RhYy50b3RhbF9ieXRlcyA9IDA7Ci0JCQlzLT5kbWFfZGFjLm5leHRJbiA9IHMtPmRtYV9kYWMubmV4dE91dCA9Ci0JCQkJcy0+ZG1hX2RhYy5yYXdidWY7Ci0JCX0KLQkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKLQkJCXN0b3BfYWRjKHMpOwotCQkJc3luY2hyb25pemVfaXJxKCk7Ci0JCQlzLT5kbWFfYWRjLmNvdW50ID0gcy0+ZG1hX2FkYy50b3RhbF9ieXRlcyA9IDA7Ci0JCQlzLT5kbWFfYWRjLm5leHRJbiA9IHMtPmRtYV9hZGMubmV4dE91dCA9Ci0JCQkJcy0+ZG1hX2FkYy5yYXdidWY7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0KLQljYXNlIFNORENUTF9EU1BfU1BFRUQ6Ci0JCWlmIChnZXRfdXNlcih2YWwsIChpbnQgKikgYXJnKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlpZiAodmFsID49IDApIHsKLQkJCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7Ci0JCQkJc3RvcF9hZGMocyk7Ci0JCQkJc2V0X2FkY19yYXRlKHMsIHZhbCk7Ci0JCQl9Ci0JCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKLQkJCQlzdG9wX2RhYyhzKTsKLQkJCQlzZXRfZGFjX3JhdGUocywgdmFsKTsKLQkJCX0KLQkJCWlmIChzLT5vcGVuX21vZGUgJiBGTU9ERV9SRUFEKQotCQkJCWlmICgocmV0ID0gcHJvZ19kbWFidWZfYWRjKHMpKSkKLQkJCQkJcmV0dXJuIHJldDsKLQkJCWlmIChzLT5vcGVuX21vZGUgJiBGTU9ERV9XUklURSkKLQkJCQlpZiAoKHJldCA9IHByb2dfZG1hYnVmX2RhYyhzKSkpCi0JCQkJCXJldHVybiByZXQ7Ci0JCX0KLQkJcmV0dXJuIHB1dF91c2VyKChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSA/Ci0JCQkJcy0+ZG1hX2FkYy5zYW1wbGVfcmF0ZSA6Ci0JCQkJcy0+ZG1hX2RhYy5zYW1wbGVfcmF0ZSwKLQkJCQkoaW50ICopYXJnKTsKLQotCWNhc2UgU05EQ1RMX0RTUF9TVEVSRU86Ci0JCWlmIChnZXRfdXNlcih2YWwsIChpbnQgKikgYXJnKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgewotCQkJc3RvcF9hZGMocyk7Ci0JCQlzLT5kbWFfYWRjLm51bV9jaGFubmVscyA9IHZhbCA/IDIgOiAxOwotCQkJaWYgKChyZXQgPSBwcm9nX2RtYWJ1Zl9hZGMocykpKQotCQkJCXJldHVybiByZXQ7Ci0JCX0KLQkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7Ci0JCQlzdG9wX2RhYyhzKTsKLQkJCXMtPmRtYV9kYWMubnVtX2NoYW5uZWxzID0gdmFsID8gMiA6IDE7Ci0JCQlpZiAocy0+Y29kZWNfZXh0X2NhcHMgJiBBQzk3X0VYVF9EQUNTKSB7Ci0JCQkJLyogZGlzYWJsZSBzdXJyb3VuZCBhbmQgY2VudGVyL2xmZSBpbiBBQyc5NwotCQkJCSovCi0JCQkJdTE2IGV4dF9zdGF0ID0gcmRjb2RlYyhzLT5jb2RlYywKLQkJCQkJCSAgICAgICBBQzk3X0VYVEVOREVEX1NUQVRVUyk7Ci0JCQkJd3Jjb2RlYyhzLT5jb2RlYywgQUM5N19FWFRFTkRFRF9TVEFUVVMsCi0JCQkJCWV4dF9zdGF0IHwgKEFDOTdfRVhUU1RBVF9QUkkgfAotCQkJCQkJICAgIEFDOTdfRVhUU1RBVF9QUkogfAotCQkJCQkJICAgIEFDOTdfRVhUU1RBVF9QUkspKTsKLQkJCX0KLQkJCWlmICgocmV0ID0gcHJvZ19kbWFidWZfZGFjKHMpKSkKLQkJCQlyZXR1cm4gcmV0OwotCQl9Ci0JCXJldHVybiAwOwotCi0JY2FzZSBTTkRDVExfRFNQX0NIQU5ORUxTOgotCQlpZiAoZ2V0X3VzZXIodmFsLCAoaW50ICopIGFyZykpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKHZhbCAhPSAwKSB7Ci0JCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgewotCQkJCWlmICh2YWwgPCAwIHx8IHZhbCA+IDIpCi0JCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCXN0b3BfYWRjKHMpOwotCQkJCXMtPmRtYV9hZGMubnVtX2NoYW5uZWxzID0gdmFsOwotCQkJCWlmICgocmV0ID0gcHJvZ19kbWFidWZfYWRjKHMpKSkKLQkJCQkJcmV0dXJuIHJldDsKLQkJCX0KLQkJCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewotCQkJCXN3aXRjaCAodmFsKSB7Ci0JCQkJY2FzZSAxOgotCQkJCWNhc2UgMjoKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAzOgotCQkJCWNhc2UgNToKLQkJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQkJY2FzZSA0OgotCQkJCQlpZiAoIShzLT5jb2RlY19leHRfY2FwcyAmCi0JCQkJCSAgICAgIEFDOTdfRVhUSURfU0RBQykpCi0JCQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSA2OgotCQkJCQlpZiAoKHMtPmNvZGVjX2V4dF9jYXBzICYKLQkJCQkJICAgICBBQzk3X0VYVF9EQUNTKSAhPSBBQzk3X0VYVF9EQUNTKQotCQkJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCX0KLQotCQkJCXN0b3BfZGFjKHMpOwotCQkJCWlmICh2YWwgPD0gMiAmJgotCQkJCSAgICAocy0+Y29kZWNfZXh0X2NhcHMgJiBBQzk3X0VYVF9EQUNTKSkgewotCQkJCQkvKiBkaXNhYmxlIHN1cnJvdW5kIGFuZCBjZW50ZXIvbGZlCi0JCQkJCSAqIGNoYW5uZWxzIGluIEFDJzk3Ci0JCQkJCSAqLwotCQkJCQl1MTYgICAgICAgICAgICAgZXh0X3N0YXQgPQotCQkJCQkJcmRjb2RlYyhzLT5jb2RlYywKLQkJCQkJCQlBQzk3X0VYVEVOREVEX1NUQVRVUyk7Ci0JCQkJCXdyY29kZWMocy0+Y29kZWMsCi0JCQkJCQlBQzk3X0VYVEVOREVEX1NUQVRVUywKLQkJCQkJCWV4dF9zdGF0IHwgKEFDOTdfRVhUU1RBVF9QUkkgfAotCQkJCQkJCSAgICBBQzk3X0VYVFNUQVRfUFJKIHwKLQkJCQkJCQkgICAgQUM5N19FWFRTVEFUX1BSSykpOwotCQkJCX0gZWxzZSBpZiAodmFsID49IDQpIHsKLQkJCQkJLyogZW5hYmxlIHN1cnJvdW5kLCBjZW50ZXIvbGZlCi0JCQkJCSAqIGNoYW5uZWxzIGluIEFDJzk3Ci0JCQkJCSAqLwotCQkJCQl1MTYgICAgICAgICAgICAgZXh0X3N0YXQgPQotCQkJCQkJcmRjb2RlYyhzLT5jb2RlYywKLQkJCQkJCQlBQzk3X0VYVEVOREVEX1NUQVRVUyk7Ci0JCQkJCWV4dF9zdGF0ICY9IH5BQzk3X0VYVFNUQVRfUFJKOwotCQkJCQlpZiAodmFsID09IDYpCi0JCQkJCQlleHRfc3RhdCAmPQotCQkJCQkJCX4oQUM5N19FWFRTVEFUX1BSSSB8Ci0JCQkJCQkJICBBQzk3X0VYVFNUQVRfUFJLKTsKLQkJCQkJd3Jjb2RlYyhzLT5jb2RlYywKLQkJCQkJCUFDOTdfRVhURU5ERURfU1RBVFVTLAotCQkJCQkJZXh0X3N0YXQpOwotCQkJCX0KLQotCQkJCXMtPmRtYV9kYWMubnVtX2NoYW5uZWxzID0gdmFsOwotCQkJCWlmICgocmV0ID0gcHJvZ19kbWFidWZfZGFjKHMpKSkKLQkJCQkJcmV0dXJuIHJldDsKLQkJCX0KLQkJfQotCQlyZXR1cm4gcHV0X3VzZXIodmFsLCAoaW50ICopIGFyZyk7Ci0KLQljYXNlIFNORENUTF9EU1BfR0VURk1UUzoJLyogUmV0dXJucyBhIG1hc2sgKi8KLQkJcmV0dXJuIHB1dF91c2VyKEFGTVRfUzE2X0xFIHwgQUZNVF9VOCwgKGludCAqKSBhcmcpOwotCi0JY2FzZSBTTkRDVExfRFNQX1NFVEZNVDoJLyogU2VsZWN0cyBPTkUgZm10ICovCi0JCWlmIChnZXRfdXNlcih2YWwsIChpbnQgKikgYXJnKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlpZiAodmFsICE9IEFGTVRfUVVFUlkpIHsKLQkJCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7Ci0JCQkJc3RvcF9hZGMocyk7Ci0JCQkJaWYgKHZhbCA9PSBBRk1UX1MxNl9MRSkKLQkJCQkJcy0+ZG1hX2FkYy5zYW1wbGVfc2l6ZSA9IDE2OwotCQkJCWVsc2UgewotCQkJCQl2YWwgPSBBRk1UX1U4OwotCQkJCQlzLT5kbWFfYWRjLnNhbXBsZV9zaXplID0gODsKLQkJCQl9Ci0JCQkJaWYgKChyZXQgPSBwcm9nX2RtYWJ1Zl9hZGMocykpKQotCQkJCQlyZXR1cm4gcmV0OwotCQkJfQotCQkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7Ci0JCQkJc3RvcF9kYWMocyk7Ci0JCQkJaWYgKHZhbCA9PSBBRk1UX1MxNl9MRSkKLQkJCQkJcy0+ZG1hX2RhYy5zYW1wbGVfc2l6ZSA9IDE2OwotCQkJCWVsc2UgewotCQkJCQl2YWwgPSBBRk1UX1U4OwotCQkJCQlzLT5kbWFfZGFjLnNhbXBsZV9zaXplID0gODsKLQkJCQl9Ci0JCQkJaWYgKChyZXQgPSBwcm9nX2RtYWJ1Zl9kYWMocykpKQotCQkJCQlyZXR1cm4gcmV0OwotCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpCi0JCQkJdmFsID0gKHMtPmRtYV9hZGMuc2FtcGxlX3NpemUgPT0gMTYpID8KLQkJCQkJQUZNVF9TMTZfTEUgOiBBRk1UX1U4OwotCQkJZWxzZQotCQkJCXZhbCA9IChzLT5kbWFfZGFjLnNhbXBsZV9zaXplID09IDE2KSA/Ci0JCQkJCUFGTVRfUzE2X0xFIDogQUZNVF9VODsKLQkJfQotCQlyZXR1cm4gcHV0X3VzZXIodmFsLCAoaW50ICopIGFyZyk7Ci0KLQljYXNlIFNORENUTF9EU1BfUE9TVDoKLQkJcmV0dXJuIDA7Ci0KLQljYXNlIFNORENUTF9EU1BfR0VUVFJJR0dFUjoKLQkJdmFsID0gMDsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQgJiYgIXMtPmRtYV9hZGMuc3RvcHBlZCkKLQkJCXZhbCB8PSBQQ01fRU5BQkxFX0lOUFVUOwotCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUgJiYgIXMtPmRtYV9kYWMuc3RvcHBlZCkKLQkJCXZhbCB8PSBQQ01fRU5BQkxFX09VVFBVVDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gcHV0X3VzZXIodmFsLCAoaW50ICopIGFyZyk7Ci0KLQljYXNlIFNORENUTF9EU1BfU0VUVFJJR0dFUjoKLQkJaWYgKGdldF91c2VyKHZhbCwgKGludCAqKSBhcmcpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7Ci0JCQlpZiAodmFsICYgUENNX0VOQUJMRV9JTlBVVCkgewotCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCQkJc3RhcnRfYWRjKHMpOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJCX0gZWxzZQotCQkJCXN0b3BfYWRjKHMpOwotCQl9Ci0JCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewotCQkJaWYgKHZhbCAmIFBDTV9FTkFCTEVfT1VUUFVUKSB7Ci0JCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJCQlzdGFydF9kYWMocyk7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwotCQkJfSBlbHNlCi0JCQkJc3RvcF9kYWMocyk7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0KLQljYXNlIFNORENUTF9EU1BfR0VUT1NQQUNFOgotCQlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJYWJpbmZvLmZyYWdzaXplID0gcy0+ZG1hX2RhYy5mcmFnc2l6ZTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJY291bnQgPSBzLT5kbWFfZGFjLmNvdW50OwotCQljb3VudCAtPSBkbWFfY291bnRfZG9uZSgmcy0+ZG1hX2RhYyk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJaWYgKGNvdW50IDwgMCkKLQkJCWNvdW50ID0gMDsKLQkJYWJpbmZvLmJ5dGVzID0gKHMtPmRtYV9kYWMuZG1hc2l6ZSAtIGNvdW50KSAvCi0JCQlzLT5kbWFfZGFjLmNudF9mYWN0b3I7Ci0JCWFiaW5mby5mcmFnc3RvdGFsID0gcy0+ZG1hX2RhYy5udW1mcmFnOwotCQlhYmluZm8uZnJhZ21lbnRzID0gYWJpbmZvLmJ5dGVzID4+IHMtPmRtYV9kYWMuZnJhZ3NoaWZ0OwotCQlwcl9kZWJ1ZygiaW9jdGwgU05EQ1RMX0RTUF9HRVRPU1BBQ0U6IGJ5dGVzPSVkLCBmcmFnbWVudHM9JWRcbiIsIGFiaW5mby5ieXRlcywgYWJpbmZvLmZyYWdtZW50cyk7Ci0JCXJldHVybiBjb3B5X3RvX3VzZXIoKHZvaWQgKikgYXJnLCAmYWJpbmZvLAotCQkJCSAgICBzaXplb2YoYWJpbmZvKSkgPyAtRUZBVUxUIDogMDsKLQotCWNhc2UgU05EQ1RMX0RTUF9HRVRJU1BBQ0U6Ci0JCWlmICghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWFiaW5mby5mcmFnc2l6ZSA9IHMtPmRtYV9hZGMuZnJhZ3NpemU7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCWNvdW50ID0gcy0+ZG1hX2FkYy5jb3VudDsKLQkJY291bnQgKz0gZG1hX2NvdW50X2RvbmUoJnMtPmRtYV9hZGMpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCWlmIChjb3VudCA8IDApCi0JCQljb3VudCA9IDA7Ci0JCWFiaW5mby5ieXRlcyA9IGNvdW50IC8gcy0+ZG1hX2FkYy5jbnRfZmFjdG9yOwotCQlhYmluZm8uZnJhZ3N0b3RhbCA9IHMtPmRtYV9hZGMubnVtZnJhZzsKLQkJYWJpbmZvLmZyYWdtZW50cyA9IGFiaW5mby5ieXRlcyA+PiBzLT5kbWFfYWRjLmZyYWdzaGlmdDsKLQkJcmV0dXJuIGNvcHlfdG9fdXNlcigodm9pZCAqKSBhcmcsICZhYmluZm8sCi0JCQkJICAgIHNpemVvZihhYmluZm8pKSA/IC1FRkFVTFQgOiAwOwotCi0JY2FzZSBTTkRDVExfRFNQX05PTkJMT0NLOgotCQlzcGluX2xvY2soJmZpbGUtPmZfbG9jayk7Ci0JCWZpbGUtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKLQkJc3Bpbl91bmxvY2soJmZpbGUtPmZfbG9jayk7Ci0JCXJldHVybiAwOwotCi0JY2FzZSBTTkRDVExfRFNQX0dFVE9ERUxBWToKLQkJaWYgKCEoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCWNvdW50ID0gcy0+ZG1hX2RhYy5jb3VudDsKLQkJY291bnQgLT0gZG1hX2NvdW50X2RvbmUoJnMtPmRtYV9kYWMpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCWlmIChjb3VudCA8IDApCi0JCQljb3VudCA9IDA7Ci0JCWNvdW50IC89IHMtPmRtYV9kYWMuY250X2ZhY3RvcjsKLQkJcmV0dXJuIHB1dF91c2VyKGNvdW50LCAoaW50ICopIGFyZyk7Ci0KLQljYXNlIFNORENUTF9EU1BfR0VUSVBUUjoKLQkJaWYgKCEoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJY2luZm8uYnl0ZXMgPSBzLT5kbWFfYWRjLnRvdGFsX2J5dGVzOwotCQljb3VudCA9IHMtPmRtYV9hZGMuY291bnQ7Ci0JCWlmICghcy0+ZG1hX2FkYy5zdG9wcGVkKSB7Ci0JCQlkaWZmID0gZG1hX2NvdW50X2RvbmUoJnMtPmRtYV9hZGMpOwotCQkJY291bnQgKz0gZGlmZjsKLQkJCWNpbmZvLmJ5dGVzICs9IGRpZmY7Ci0JCQljaW5mby5wdHIgPSAgdmlydF90b19waHlzKHMtPmRtYV9hZGMubmV4dEluKSArIGRpZmYgLQotCQkJCXZpcnRfdG9fcGh5cyhzLT5kbWFfYWRjLnJhd2J1Zik7Ci0JCX0gZWxzZQotCQkJY2luZm8ucHRyID0gdmlydF90b19waHlzKHMtPmRtYV9hZGMubmV4dEluKSAtCi0JCQkJdmlydF90b19waHlzKHMtPmRtYV9hZGMucmF3YnVmKTsKLQkJaWYgKHMtPmRtYV9hZGMubWFwcGVkKQotCQkJcy0+ZG1hX2FkYy5jb3VudCAmPSAocy0+ZG1hX2FkYy5kbWFfZnJhZ3NpemUtMSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJaWYgKGNvdW50IDwgMCkKLQkJCWNvdW50ID0gMDsKLQkJY2luZm8uYmxvY2tzID0gY291bnQgPj4gcy0+ZG1hX2FkYy5mcmFnc2hpZnQ7Ci0JCXJldHVybiBjb3B5X3RvX3VzZXIoKHZvaWQgKikgYXJnLCAmY2luZm8sIHNpemVvZihjaW5mbykpOwotCi0JY2FzZSBTTkRDVExfRFNQX0dFVE9QVFI6Ci0JCWlmICghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCWNpbmZvLmJ5dGVzID0gcy0+ZG1hX2RhYy50b3RhbF9ieXRlczsKLQkJY291bnQgPSBzLT5kbWFfZGFjLmNvdW50OwotCQlpZiAoIXMtPmRtYV9kYWMuc3RvcHBlZCkgewotCQkJZGlmZiA9IGRtYV9jb3VudF9kb25lKCZzLT5kbWFfZGFjKTsKLQkJCWNvdW50IC09IGRpZmY7Ci0JCQljaW5mby5ieXRlcyArPSBkaWZmOwotCQkJY2luZm8ucHRyID0gdmlydF90b19waHlzKHMtPmRtYV9kYWMubmV4dE91dCkgKyBkaWZmIC0KLQkJCQl2aXJ0X3RvX3BoeXMocy0+ZG1hX2RhYy5yYXdidWYpOwotCQl9IGVsc2UKLQkJCWNpbmZvLnB0ciA9IHZpcnRfdG9fcGh5cyhzLT5kbWFfZGFjLm5leHRPdXQpIC0KLQkJCQl2aXJ0X3RvX3BoeXMocy0+ZG1hX2RhYy5yYXdidWYpOwotCQlpZiAocy0+ZG1hX2RhYy5tYXBwZWQpCi0JCQlzLT5kbWFfZGFjLmNvdW50ICY9IChzLT5kbWFfZGFjLmRtYV9mcmFnc2l6ZS0xKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwotCQlpZiAoY291bnQgPCAwKQotCQkJY291bnQgPSAwOwotCQljaW5mby5ibG9ja3MgPSBjb3VudCA+PiBzLT5kbWFfZGFjLmZyYWdzaGlmdDsKLQkJcmV0dXJuIGNvcHlfdG9fdXNlcigodm9pZCAqKSBhcmcsICZjaW5mbywgc2l6ZW9mKGNpbmZvKSk7Ci0KLQljYXNlIFNORENUTF9EU1BfR0VUQkxLU0laRToKLQkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQotCQkJcmV0dXJuIHB1dF91c2VyKHMtPmRtYV9kYWMuZnJhZ3NpemUsIChpbnQgKikgYXJnKTsKLQkJZWxzZQotCQkJcmV0dXJuIHB1dF91c2VyKHMtPmRtYV9hZGMuZnJhZ3NpemUsIChpbnQgKikgYXJnKTsKLQotCWNhc2UgU05EQ1RMX0RTUF9TRVRGUkFHTUVOVDoKLQkJaWYgKGdldF91c2VyKHZhbCwgKGludCAqKSBhcmcpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7Ci0JCQlzdG9wX2FkYyhzKTsKLQkJCXMtPmRtYV9hZGMub3NzZnJhZ3NoaWZ0ID0gdmFsICYgMHhmZmZmOwotCQkJcy0+ZG1hX2FkYy5vc3NtYXhmcmFncyA9ICh2YWwgPj4gMTYpICYgMHhmZmZmOwotCQkJaWYgKHMtPmRtYV9hZGMub3NzZnJhZ3NoaWZ0IDwgNCkKLQkJCQlzLT5kbWFfYWRjLm9zc2ZyYWdzaGlmdCA9IDQ7Ci0JCQlpZiAocy0+ZG1hX2FkYy5vc3NmcmFnc2hpZnQgPiAxNSkKLQkJCQlzLT5kbWFfYWRjLm9zc2ZyYWdzaGlmdCA9IDE1OwotCQkJaWYgKHMtPmRtYV9hZGMub3NzbWF4ZnJhZ3MgPCA0KQotCQkJCXMtPmRtYV9hZGMub3NzbWF4ZnJhZ3MgPSA0OwotCQkJaWYgKChyZXQgPSBwcm9nX2RtYWJ1Zl9hZGMocykpKQotCQkJCXJldHVybiByZXQ7Ci0JCX0KLQkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7Ci0JCQlzdG9wX2RhYyhzKTsKLQkJCXMtPmRtYV9kYWMub3NzZnJhZ3NoaWZ0ID0gdmFsICYgMHhmZmZmOwotCQkJcy0+ZG1hX2RhYy5vc3NtYXhmcmFncyA9ICh2YWwgPj4gMTYpICYgMHhmZmZmOwotCQkJaWYgKHMtPmRtYV9kYWMub3NzZnJhZ3NoaWZ0IDwgNCkKLQkJCQlzLT5kbWFfZGFjLm9zc2ZyYWdzaGlmdCA9IDQ7Ci0JCQlpZiAocy0+ZG1hX2RhYy5vc3NmcmFnc2hpZnQgPiAxNSkKLQkJCQlzLT5kbWFfZGFjLm9zc2ZyYWdzaGlmdCA9IDE1OwotCQkJaWYgKHMtPmRtYV9kYWMub3NzbWF4ZnJhZ3MgPCA0KQotCQkJCXMtPmRtYV9kYWMub3NzbWF4ZnJhZ3MgPSA0OwotCQkJaWYgKChyZXQgPSBwcm9nX2RtYWJ1Zl9kYWMocykpKQotCQkJCXJldHVybiByZXQ7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0KLQljYXNlIFNORENUTF9EU1BfU1VCRElWSURFOgotCQlpZiAoKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQgJiYgcy0+ZG1hX2FkYy5zdWJkaXZpc2lvbikgfHwKLQkJICAgIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSAmJiBzLT5kbWFfZGFjLnN1YmRpdmlzaW9uKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlpZiAoZ2V0X3VzZXIodmFsLCAoaW50ICopIGFyZykpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKHZhbCAhPSAxICYmIHZhbCAhPSAyICYmIHZhbCAhPSA0KQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7Ci0JCQlzdG9wX2FkYyhzKTsKLQkJCXMtPmRtYV9hZGMuc3ViZGl2aXNpb24gPSB2YWw7Ci0JCQlpZiAoKHJldCA9IHByb2dfZG1hYnVmX2FkYyhzKSkpCi0JCQkJcmV0dXJuIHJldDsKLQkJfQotCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKLQkJCXN0b3BfZGFjKHMpOwotCQkJcy0+ZG1hX2RhYy5zdWJkaXZpc2lvbiA9IHZhbDsKLQkJCWlmICgocmV0ID0gcHJvZ19kbWFidWZfZGFjKHMpKSkKLQkJCQlyZXR1cm4gcmV0OwotCQl9Ci0JCXJldHVybiAwOwotCi0JY2FzZSBTT1VORF9QQ01fUkVBRF9SQVRFOgotCQlyZXR1cm4gcHV0X3VzZXIoKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpID8KLQkJCQlzLT5kbWFfYWRjLnNhbXBsZV9yYXRlIDoKLQkJCQlzLT5kbWFfZGFjLnNhbXBsZV9yYXRlLAotCQkJCShpbnQgKilhcmcpOwotCi0JY2FzZSBTT1VORF9QQ01fUkVBRF9DSEFOTkVMUzoKLQkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpCi0JCQlyZXR1cm4gcHV0X3VzZXIocy0+ZG1hX2FkYy5udW1fY2hhbm5lbHMsIChpbnQgKilhcmcpOwotCQllbHNlCi0JCQlyZXR1cm4gcHV0X3VzZXIocy0+ZG1hX2RhYy5udW1fY2hhbm5lbHMsIChpbnQgKilhcmcpOwotCi0JY2FzZSBTT1VORF9QQ01fUkVBRF9CSVRTOgotCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkKLQkJCXJldHVybiBwdXRfdXNlcihzLT5kbWFfYWRjLnNhbXBsZV9zaXplLCAoaW50ICopYXJnKTsKLQkJZWxzZQotCQkJcmV0dXJuIHB1dF91c2VyKHMtPmRtYV9kYWMuc2FtcGxlX3NpemUsIChpbnQgKilhcmcpOwotCi0JY2FzZSBTT1VORF9QQ01fV1JJVEVfRklMVEVSOgotCWNhc2UgU05EQ1RMX0RTUF9TRVRTWU5DUk86Ci0JY2FzZSBTT1VORF9QQ01fUkVBRF9GSUxURVI6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiBtaXhkZXZfaW9jdGwocy0+Y29kZWMsIGNtZCwgYXJnKTsKLX0KLQotc3RhdGljIGxvbmcKLWF1MTU1MF91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JaW50IHJldDsKLQotCW11dGV4X2xvY2soJmF1MTU1MF9hYzk3X211dGV4KTsKLQlyZXQgPSBhdTE1NTBfaW9jdGwoZmlsZSwgY21kLCBhcmcpOwotCW11dGV4X3VubG9jaygmYXUxNTUwX2FjOTdfbXV0ZXgpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludAotYXUxNTUwX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JaW50ICAgICAgICAgICAgIG1pbm9yID0gTUlOT1IoaW5vZGUtPmlfcmRldik7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0Jc3RydWN0IGF1MTU1MF9zdGF0ZSAqcyA9ICZhdTE1NTBfc3RhdGU7Ci0JaW50ICAgICAgICAgICAgIHJldDsKLQotI2lmZGVmIERFQlVHCi0JaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQotCQlwcl9kZWJ1Zygib3Blbjogbm9uLWJsb2NraW5nXG4iKTsKLQllbHNlCi0JCXByX2RlYnVnKCJvcGVuOiBibG9ja2luZ1xuIik7Ci0jZW5kaWYKLQotCWZpbGUtPnByaXZhdGVfZGF0YSA9IHM7Ci0JbXV0ZXhfbG9jaygmYXUxNTUwX2FjOTdfbXV0ZXgpOwotCS8qIHdhaXQgZm9yIGRldmljZSB0byBiZWNvbWUgZnJlZSAqLwotCW11dGV4X2xvY2soJnMtPm9wZW5fbXV0ZXgpOwotCXdoaWxlIChzLT5vcGVuX21vZGUgJiBmaWxlLT5mX21vZGUpIHsKLQkJcmV0ID0gLUVCVVNZOwotCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCi0JCQlnb3RvIG91dDsKLQkJYWRkX3dhaXRfcXVldWUoJnMtPm9wZW5fd2FpdCwgJndhaXQpOwotCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7Ci0JCXNjaGVkdWxlKCk7Ci0JCXJlbW92ZV93YWl0X3F1ZXVlKCZzLT5vcGVuX3dhaXQsICZ3YWl0KTsKLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQkJcmV0ID0gLUVSRVNUQVJUU1lTOwotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCQlnb3RvIG91dDI7Ci0JCW11dGV4X2xvY2soJnMtPm9wZW5fbXV0ZXgpOwotCX0KLQotCXN0b3BfZGFjKHMpOwotCXN0b3BfYWRjKHMpOwotCi0JaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKLQkJcy0+ZG1hX2FkYy5vc3NmcmFnc2hpZnQgPSBzLT5kbWFfYWRjLm9zc21heGZyYWdzID0KLQkJCXMtPmRtYV9hZGMuc3ViZGl2aXNpb24gPSBzLT5kbWFfYWRjLnRvdGFsX2J5dGVzID0gMDsKLQkJcy0+ZG1hX2FkYy5udW1fY2hhbm5lbHMgPSAxOwotCQlzLT5kbWFfYWRjLnNhbXBsZV9zaXplID0gODsKLQkJc2V0X2FkY19yYXRlKHMsIDgwMDApOwotCQlpZiAoKG1pbm9yICYgMHhmKSA9PSBTTkRfREVWX0RTUDE2KQotCQkJcy0+ZG1hX2FkYy5zYW1wbGVfc2l6ZSA9IDE2OwotCX0KLQotCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewotCQlzLT5kbWFfZGFjLm9zc2ZyYWdzaGlmdCA9IHMtPmRtYV9kYWMub3NzbWF4ZnJhZ3MgPQotCQkJcy0+ZG1hX2RhYy5zdWJkaXZpc2lvbiA9IHMtPmRtYV9kYWMudG90YWxfYnl0ZXMgPSAwOwotCQlzLT5kbWFfZGFjLm51bV9jaGFubmVscyA9IDE7Ci0JCXMtPmRtYV9kYWMuc2FtcGxlX3NpemUgPSA4OwotCQlzZXRfZGFjX3JhdGUocywgODAwMCk7Ci0JCWlmICgobWlub3IgJiAweGYpID09IFNORF9ERVZfRFNQMTYpCi0JCQlzLT5kbWFfZGFjLnNhbXBsZV9zaXplID0gMTY7Ci0JfQotCi0JaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKLQkJaWYgKChyZXQgPSBwcm9nX2RtYWJ1Zl9hZGMocykpKQotCQkJZ290byBvdXQ7Ci0JfQotCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewotCQlpZiAoKHJldCA9IHByb2dfZG1hYnVmX2RhYyhzKSkpCi0JCQlnb3RvIG91dDsKLQl9Ci0KLQlzLT5vcGVuX21vZGUgfD0gZmlsZS0+Zl9tb2RlICYgKEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSk7Ci0JbXV0ZXhfaW5pdCgmcy0+c2VtKTsKLQlyZXQgPSAwOwotb3V0OgotCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7Ci1vdXQyOgotCW11dGV4X3VubG9jaygmYXUxNTUwX2FjOTdfbXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQKLWF1MTU1MF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBhdTE1NTBfc3RhdGUgKnMgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0KLQltdXRleF9sb2NrKCZhdTE1NTBfYWM5N19tdXRleCk7Ci0KLQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKLQkJbXV0ZXhfdW5sb2NrKCZhdTE1NTBfYWM5N19tdXRleCk7Ci0JCWRyYWluX2RhYyhzLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Ci0JCW11dGV4X2xvY2soJmF1MTU1MF9hYzk3X211dGV4KTsKLQl9Ci0KLQltdXRleF9sb2NrKCZzLT5vcGVuX211dGV4KTsKLQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKLQkJc3RvcF9kYWMocyk7Ci0JCWtmcmVlKHMtPmRtYV9kYWMucmF3YnVmKTsKLQkJcy0+ZG1hX2RhYy5yYXdidWYgPSBOVUxMOwotCX0KLQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgewotCQlzdG9wX2FkYyhzKTsKLQkJa2ZyZWUocy0+ZG1hX2FkYy5yYXdidWYpOwotCQlzLT5kbWFfYWRjLnJhd2J1ZiA9IE5VTEw7Ci0JfQotCXMtPm9wZW5fbW9kZSAmPSAoKH5maWxlLT5mX21vZGUpICYgKEZNT0RFX1JFQUR8Rk1PREVfV1JJVEUpKTsKLQltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOwotCXdha2VfdXAoJnMtPm9wZW5fd2FpdCk7Ci0JbXV0ZXhfdW5sb2NrKCZhdTE1NTBfYWM5N19tdXRleCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyAvKmNvbnN0ICovIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXUxNTUwX2F1ZGlvX2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5sbHNlZWsJCT0gYXUxNTUwX2xsc2VlaywKLQkucmVhZAkJPSBhdTE1NTBfcmVhZCwKLQkud3JpdGUJCT0gYXUxNTUwX3dyaXRlLAotCS5wb2xsCQk9IGF1MTU1MF9wb2xsLAotCS51bmxvY2tlZF9pb2N0bAk9IGF1MTU1MF91bmxvY2tlZF9pb2N0bCwKLQkubW1hcAkJPSBhdTE1NTBfbW1hcCwKLQkub3BlbgkJPSBhdTE1NTBfb3BlbiwKLQkucmVsZWFzZQk9IGF1MTU1MF9yZWxlYXNlLAotfTsKLQotTU9EVUxFX0FVVEhPUigiQWR2YW5jZWQgTWljcm8gRGV2aWNlcyAoQU1EKSwgZGFuQGVtYmVkZGVkZWRnZS5jb20iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQXUxNTUwIEFDOTcgQXVkaW8gRHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLQotc3RhdGljIGludCBfX2RldmluaXQKLWF1MTU1MF9wcm9iZSh2b2lkKQotewotCXN0cnVjdCBhdTE1NTBfc3RhdGUgKnMgPSAmYXUxNTUwX3N0YXRlOwotCWludCAgICAgICAgICAgICB2YWw7Ci0KLQltZW1zZXQocywgMCwgc2l6ZW9mKHN0cnVjdCBhdTE1NTBfc3RhdGUpKTsKLQotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnMtPmRtYV9hZGMud2FpdCk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmcy0+ZG1hX2RhYy53YWl0KTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzLT5vcGVuX3dhaXQpOwotCW11dGV4X2luaXQoJnMtPm9wZW5fbXV0ZXgpOwotCXNwaW5fbG9ja19pbml0KCZzLT5sb2NrKTsKLQotCXMtPmNvZGVjID0gYWM5N19hbGxvY19jb2RlYygpOwotCWlmKHMtPmNvZGVjID09IE5VTEwpIHsKLQkJZXJyKCJPdXQgb2YgbWVtb3J5Iik7Ci0JCXJldHVybiAtMTsKLQl9Ci0Jcy0+Y29kZWMtPnByaXZhdGVfZGF0YSA9IHM7Ci0Jcy0+Y29kZWMtPmlkID0gMDsKLQlzLT5jb2RlYy0+Y29kZWNfcmVhZCA9IHJkY29kZWM7Ci0Jcy0+Y29kZWMtPmNvZGVjX3dyaXRlID0gd3Jjb2RlYzsKLQlzLT5jb2RlYy0+Y29kZWNfd2FpdCA9IHdhaXRjb2RlYzsKLQotCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKENQSFlTQUREUihBQzk3X1BTQ19TRUwpLAotCQkJICAgIDB4MzAsICJBdTE1NTAgQUM5NyIpKSB7Ci0JCWVycigiQUMnOTcgcG9ydHMgaW4gdXNlIik7Ci0JfQotCi0JLyogQWxsb2NhdGUgdGhlIERNQSBDaGFubmVscwotCSovCi0JaWYgKChzLT5kbWFfZGFjLmRtYW5yID0gYXUxeHh4X2RiZG1hX2NoYW5fYWxsb2MoREJETUFfTUVNX0NIQU4sCi0JICAgIERCRE1BX0FDOTdfVFhfQ0hBTiwgZGFjX2RtYV9pbnRlcnJ1cHQsICh2b2lkICopcykpID09IDApIHsKLQkJZXJyKCJDYW4ndCBnZXQgREFDIERNQSIpOwotCQlnb3RvIGVycl9kbWExOwotCX0KLQlhdTF4eHhfZGJkbWFfc2V0X2RldndpZHRoKHMtPmRtYV9kYWMuZG1hbnIsIDE2KTsKLQlpZiAoYXUxeHh4X2RiZG1hX3JpbmdfYWxsb2Mocy0+ZG1hX2RhYy5kbWFuciwKLQkJCQkJTlVNX0RCRE1BX0RFU0NSSVBUT1JTKSA9PSAwKSB7Ci0JCWVycigiQ2FuJ3QgZ2V0IERBQyBETUEgZGVzY3JpcHRvcnMiKTsKLQkJZ290byBlcnJfZG1hMTsKLQl9Ci0KLQlpZiAoKHMtPmRtYV9hZGMuZG1hbnIgPSBhdTF4eHhfZGJkbWFfY2hhbl9hbGxvYyhEQkRNQV9BQzk3X1JYX0NIQU4sCi0JICAgIERCRE1BX01FTV9DSEFOLCBhZGNfZG1hX2ludGVycnVwdCwgKHZvaWQgKilzKSkgPT0gMCkgewotCQllcnIoIkNhbid0IGdldCBBREMgRE1BIik7Ci0JCWdvdG8gZXJyX2RtYTI7Ci0JfQotCWF1MXh4eF9kYmRtYV9zZXRfZGV2d2lkdGgocy0+ZG1hX2FkYy5kbWFuciwgMTYpOwotCWlmIChhdTF4eHhfZGJkbWFfcmluZ19hbGxvYyhzLT5kbWFfYWRjLmRtYW5yLAotCQkJCQlOVU1fREJETUFfREVTQ1JJUFRPUlMpID09IDApIHsKLQkJZXJyKCJDYW4ndCBnZXQgQURDIERNQSBkZXNjcmlwdG9ycyIpOwotCQlnb3RvIGVycl9kbWEyOwotCX0KLQotCXByX2luZm8oIkRBQzogRE1BJWQsIEFEQzogRE1BJWQiLCBEQkRNQV9BQzk3X1RYX0NIQU4sIERCRE1BX0FDOTdfUlhfQ0hBTik7Ci0KLQkvKiByZWdpc3RlciBkZXZpY2VzICovCi0KLQlpZiAoKHMtPmRldl9hdWRpbyA9IHJlZ2lzdGVyX3NvdW5kX2RzcCgmYXUxNTUwX2F1ZGlvX2ZvcHMsIC0xKSkgPCAwKQotCQlnb3RvIGVycl9kZXYxOwotCWlmICgocy0+Y29kZWMtPmRldl9taXhlciA9Ci0JICAgICByZWdpc3Rlcl9zb3VuZF9taXhlcigmYXUxNTUwX21peGVyX2ZvcHMsIC0xKSkgPCAwKQotCQlnb3RvIGVycl9kZXYyOwotCi0JLyogVGhlIEdQSU8gZm9yIHRoZSBhcHByb3ByaWF0ZSBQU0Mgd2FzIGNvbmZpZ3VyZWQgYnkgdGhlCi0JICogYm9hcmQgc3BlY2lmaWMgc3RhcnQgdXAuCi0JICoKLQkgKiBjb25maWd1cmUgUFNDIGZvciBBQyc5NwotCSAqLwotCWF1X3dyaXRlbCgwLCBBQzk3X1BTQ19DVFJMKTsJLyogRGlzYWJsZSBQU0MgKi8KLQlhdV9zeW5jKCk7Ci0JYXVfd3JpdGVsKChQU0NfU0VMX0NMS19TRVJDTEsgfCBQU0NfU0VMX1BTX0FDOTdNT0RFKSwgQUM5N19QU0NfU0VMKTsKLQlhdV9zeW5jKCk7Ci0KLQkvKiBjb2xkIHJlc2V0IHRoZSBBQyc5NwotCSovCi0JYXVfd3JpdGVsKFBTQ19BQzk3UlNUX1JTVCwgUFNDX0FDOTdSU1QpOwotCWF1X3N5bmMoKTsKLQlhdTE1NTBfZGVsYXkoMTApOwotCWF1X3dyaXRlbCgwLCBQU0NfQUM5N1JTVCk7Ci0JYXVfc3luYygpOwotCi0JLyogbmVlZCB0byBkZWxheSBhcm91bmQgNTAwbXNlYyhibGVlY2gpIHRvIGdpdmUKLQkgICBzb21lIENPREVDcyBlbm91Z2ggdGltZSB0byB3YWtldXAgKi8KLQlhdTE1NTBfZGVsYXkoNTAwKTsKLQotCS8qIHdhcm0gcmVzZXQgdGhlIEFDJzk3IHRvIHN0YXJ0IHRoZSBiaXRjbGsKLQkqLwotCWF1X3dyaXRlbChQU0NfQUM5N1JTVF9TTkMsIFBTQ19BQzk3UlNUKTsKLQlhdV9zeW5jKCk7Ci0JdWRlbGF5KDEwMCk7Ci0JYXVfd3JpdGVsKDAsIFBTQ19BQzk3UlNUKTsKLQlhdV9zeW5jKCk7Ci0KLQkvKiBFbmFibGUgUFNDCi0JKi8KLQlhdV93cml0ZWwoUFNDX0NUUkxfRU5BQkxFLCBBQzk3X1BTQ19DVFJMKTsKLQlhdV9zeW5jKCk7Ci0KLQkvKiBXYWl0IGZvciBQU0MgcmVhZHkuCi0JKi8KLQlkbyB7Ci0JCXZhbCA9IGF1X3JlYWRsKFBTQ19BQzk3U1RBVCk7Ci0JCWF1X3N5bmMoKTsKLQl9IHdoaWxlICgodmFsICYgUFNDX0FDOTdTVEFUX1NSKSA9PSAwKTsKLQotCS8qIENvbmZpZ3VyZSBBQzk3IGNvbnRyb2xsZXIuCi0JICogRGVlcCBGSUZPLCAxNi1iaXQgc2FtcGxlLCBETUEsIG1ha2Ugc3VyZSBETUEgbWF0Y2hlcyBmaWZvIHNpemUuCi0JICovCi0JdmFsID0gUFNDX0FDOTdDRkdfU0VUX0xFTigxNik7Ci0JdmFsIHw9IFBTQ19BQzk3Q0ZHX1JUX0ZJRk84IHwgUFNDX0FDOTdDRkdfVFRfRklGTzg7Ci0KLQkvKiBFbmFibGUgZGV2aWNlIHNvIHdlIGNhbiBhdCBsZWFzdAotCSAqIHRhbGsgb3ZlciB0aGUgQUMtbGluay4KLQkgKi8KLQlhdV93cml0ZWwodmFsLCBQU0NfQUM5N0NGRyk7Ci0JYXVfd3JpdGVsKFBTQ19BQzk3TVNLX0FMTE1BU0ssIFBTQ19BQzk3TVNLKTsKLQlhdV9zeW5jKCk7Ci0JdmFsIHw9IFBTQ19BQzk3Q0ZHX0RFX0VOQUJMRTsKLQlhdV93cml0ZWwodmFsLCBQU0NfQUM5N0NGRyk7Ci0JYXVfc3luYygpOwotCi0JLyogV2FpdCBmb3IgRGV2aWNlIHJlYWR5LgotCSovCi0JZG8gewotCQl2YWwgPSBhdV9yZWFkbChQU0NfQUM5N1NUQVQpOwotCQlhdV9zeW5jKCk7Ci0JfSB3aGlsZSAoKHZhbCAmIFBTQ19BQzk3U1RBVF9EUikgPT0gMCk7Ci0KLQkvKiBjb2RlYyBpbml0ICovCi0JaWYgKCFhYzk3X3Byb2JlX2NvZGVjKHMtPmNvZGVjKSkKLQkJZ290byBlcnJfZGV2MzsKLQotCXMtPmNvZGVjX2Jhc2VfY2FwcyA9IHJkY29kZWMocy0+Y29kZWMsIEFDOTdfUkVTRVQpOwotCXMtPmNvZGVjX2V4dF9jYXBzID0gcmRjb2RlYyhzLT5jb2RlYywgQUM5N19FWFRFTkRFRF9JRCk7Ci0JcHJfaW5mbygiQUMnOTcgQmFzZS9FeHRlbmRlZCBJRCA9ICUwNHgvJTA0eCIsCi0JICAgICBzLT5jb2RlY19iYXNlX2NhcHMsIHMtPmNvZGVjX2V4dF9jYXBzKTsKLQotCWlmICghKHMtPmNvZGVjX2V4dF9jYXBzICYgQUM5N19FWFRJRF9WUkEpKSB7Ci0JCS8qIGNvZGVjIGRvZXMgbm90IHN1cHBvcnQgVlJBCi0JCSovCi0JCXMtPm5vX3ZyYSA9IDE7Ci0JfSBlbHNlIGlmICghdnJhKSB7Ci0JCS8qIEJvb3Qgb3B0aW9uIHNheXMgZGlzYWJsZSBWUkEKLQkJKi8KLQkJdTE2IGFjOTdfZXh0c3RhdCA9IHJkY29kZWMocy0+Y29kZWMsIEFDOTdfRVhURU5ERURfU1RBVFVTKTsKLQkJd3Jjb2RlYyhzLT5jb2RlYywgQUM5N19FWFRFTkRFRF9TVEFUVVMsCi0JCQlhYzk3X2V4dHN0YXQgJiB+QUM5N19FWFRTVEFUX1ZSQSk7Ci0JCXMtPm5vX3ZyYSA9IDE7Ci0JfQotCWlmIChzLT5ub192cmEpCi0JCXByX2luZm8oIm5vIFZSQSwgaW50ZXJwb2xhdGluZyBhbmQgZGVjaW1hdGluZyIpOwotCi0JLyogc2V0IG1pYyB0byBiZSB0aGUgcmVjb3JkaW5nIHNvdXJjZSAqLwotCXZhbCA9IFNPVU5EX01BU0tfTUlDOwotCW1peGRldl9pb2N0bChzLT5jb2RlYywgU09VTkRfTUlYRVJfV1JJVEVfUkVDU1JDLAotCQkgICAgICh1bnNpZ25lZCBsb25nKSAmdmFsKTsKLQotCXJldHVybiAwOwotCi0gZXJyX2RldjM6Ci0JdW5yZWdpc3Rlcl9zb3VuZF9taXhlcihzLT5jb2RlYy0+ZGV2X21peGVyKTsKLSBlcnJfZGV2MjoKLQl1bnJlZ2lzdGVyX3NvdW5kX2RzcChzLT5kZXZfYXVkaW8pOwotIGVycl9kZXYxOgotCWF1MXh4eF9kYmRtYV9jaGFuX2ZyZWUocy0+ZG1hX2FkYy5kbWFucik7Ci0gZXJyX2RtYTI6Ci0JYXUxeHh4X2RiZG1hX2NoYW5fZnJlZShzLT5kbWFfZGFjLmRtYW5yKTsKLSBlcnJfZG1hMToKLQlyZWxlYXNlX21lbV9yZWdpb24oQ1BIWVNBRERSKEFDOTdfUFNDX1NFTCksIDB4MzApOwotCi0JYWM5N19yZWxlYXNlX2NvZGVjKHMtPmNvZGVjKTsKLQlyZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdAotYXUxNTUwX3JlbW92ZSh2b2lkKQotewotCXN0cnVjdCBhdTE1NTBfc3RhdGUgKnMgPSAmYXUxNTUwX3N0YXRlOwotCi0JaWYgKCFzKQotCQlyZXR1cm47Ci0Jc3luY2hyb25pemVfaXJxKCk7Ci0JYXUxeHh4X2RiZG1hX2NoYW5fZnJlZShzLT5kbWFfYWRjLmRtYW5yKTsKLQlhdTF4eHhfZGJkbWFfY2hhbl9mcmVlKHMtPmRtYV9kYWMuZG1hbnIpOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihDUEhZU0FERFIoQUM5N19QU0NfU0VMKSwgMHgzMCk7Ci0JdW5yZWdpc3Rlcl9zb3VuZF9kc3Aocy0+ZGV2X2F1ZGlvKTsKLQl1bnJlZ2lzdGVyX3NvdW5kX21peGVyKHMtPmNvZGVjLT5kZXZfbWl4ZXIpOwotCWFjOTdfcmVsZWFzZV9jb2RlYyhzLT5jb2RlYyk7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0Ci1pbml0X2F1MTU1MCh2b2lkKQotewotCXJldHVybiBhdTE1NTBfcHJvYmUoKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0Ci1jbGVhbnVwX2F1MTU1MCh2b2lkKQotewotCWF1MTU1MF9yZW1vdmUoKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9hdTE1NTApOwotbW9kdWxlX2V4aXQoY2xlYW51cF9hdTE1NTApOwotCi0jaWZuZGVmIE1PRFVMRQotCi1zdGF0aWMgaW50IF9faW5pdAotYXUxNTUwX3NldHVwKGNoYXIgKm9wdGlvbnMpCi17Ci0JY2hhciAgICAgICAgICAgKnRoaXNfb3B0OwotCi0JaWYgKCFvcHRpb25zIHx8ICEqb3B0aW9ucykKLQkJcmV0dXJuIDA7Ci0KLQl3aGlsZSAoKHRoaXNfb3B0ID0gc3Ryc2VwKCZvcHRpb25zLCAiLCIpKSkgewotCQlpZiAoISp0aGlzX29wdCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoIXN0cm5jbXAodGhpc19vcHQsICJ2cmEiLCAzKSkgewotCQkJdnJhID0gMTsKLQkJfQotCX0KLQotCXJldHVybiAxOwotfQotCi1fX3NldHVwKCJhdTE1NTBfYXVkaW89IiwgYXUxNTUwX3NldHVwKTsKLQotI2VuZGlmIC8qIE1PRFVMRSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL0tjb25maWcgYi9zb3VuZC9wY2kvS2NvbmZpZwppbmRleCAzODljZDc5Li5lOTBkMTAzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvS2NvbmZpZworKysgYi9zb3VuZC9wY2kvS2NvbmZpZwpAQCAtNTM0LDYgKzUzNCwxNCBAQAogCSAgSWYgeW91IHNheSBOIHRoZSBidXR0b25zIHdpbGwgZGlyZWN0bHkgY29udHJvbCB0aGUgbWFzdGVyIHZvbHVtZS4KIAkgIEl0IGlzIHJlY29tbWVuZGVkIHRvIHNheSBZLgogCitjb25maWcgU05EX0VTMTk2OF9SQURJTworCWJvb2wgIkVuYWJsZSBURUE1NzU3IHJhZGlvIHR1bmVyIHN1cHBvcnQgZm9yIGVzMTk2OCIKKwlkZXBlbmRzIG9uIFNORF9FUzE5NjgKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDI9eSB8fCBWSURFT19WNEwyPVNORF9FUzE5NjgKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgVEVBNTc1NyByYWRpbyB0dW5lciBpbnRlZ3JhdGVkIG9uCisJICBzb21lIE1lZGlhRm9ydGUgY2FyZHMgKGUuZy4gU0Y2NC1QQ0UyKS4KKwogY29uZmlnIFNORF9GTTgwMQogCXRyaXN0YXRlICJGb3J0ZU1lZGlhIEZNODAxIgogCXNlbGVjdCBTTkRfT1BMM19MSUIKQEAgLTU1MiwxMyArNTYwLDEzIEBACiAJZGVwZW5kcyBvbiBWSURFT19WNEwyPXkgfHwgVklERU9fVjRMMj1TTkRfRk04MDEKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3Igc291bmRjYXJkcyBiYXNlZCBvbiB0aGUgRm9ydGVNZWRpYQotCSAgRk04MDEgY2hpcCB3aXRoIGEgVEVBNTc1NyB0dW5lciBjb25uZWN0ZWQgdG8gR1BJTzEtMyBwaW5zIChNZWRpYQotCSAgRm9ydGUgU0YyNTYtUENTLTAyKSBpbnRvIHRoZSBzbmQtZm04MDEgZHJpdmVyLgorCSAgRk04MDEgY2hpcCB3aXRoIGEgVEVBNTc1NyB0dW5lciAoTWVkaWFGb3J0ZSBTRjI1Ni1QQ1MsIFNGMjU2LVBDUCBhbmQKKwkgIFNGNjQtUENSKSBpbnRvIHRoZSBzbmQtZm04MDEgZHJpdmVyLgogCi1jb25maWcgU05EX0ZNODAxX1RFQTU3NVgKK2NvbmZpZyBTTkRfVEVBNTc1WAogCXRyaXN0YXRlCi0JZGVwZW5kcyBvbiBTTkRfRk04MDFfVEVBNTc1WF9CT09MCi0JZGVmYXVsdCBTTkRfRk04MDEKKwlkZXBlbmRzIG9uIFNORF9GTTgwMV9URUE1NzVYX0JPT0wgfHwgU05EX0VTMTk2OF9SQURJTworCWRlZmF1bHQgU05EX0ZNODAxIHx8IFNORF9FUzE5NjgKIAogc291cmNlICJzb3VuZC9wY2kvaGRhL0tjb25maWciCiAKQEAgLTY1OCw2ICs2NjYsMTUgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHNuZC1rb3JnMTIxMi4KIAorY29uZmlnIFNORF9MT0xBCisJdHJpc3RhdGUgIkRpZ2lncmFtIExvbGEiCisJc2VsZWN0IFNORF9QQ00KKwloZWxwCisJICBTYXkgWSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIERpZ2lncmFtIExvbGEgYm9hcmRzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBzbmQtbG9sYS4KKwogY29uZmlnIFNORF9MWDY0NjRFUwogCXRyaXN0YXRlICJEaWdpZ3JhbSBMWDY0NjRFUyIKIAlzZWxlY3QgU05EX1BDTQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL01ha2VmaWxlIGIvc291bmQvcGNpL01ha2VmaWxlCmluZGV4IDljZjQzNDguLjU0ZmUzMjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9NYWtlZmlsZQorKysgYi9zb3VuZC9wY2kvTWFrZWZpbGUKQEAgLTY0LDYgKzY0LDcgQEAKIAljYTAxMDYvIFwKIAljczQ2eHgvIFwKIAljczU1MzVhdWRpby8gXAorCWxvbGEvIFwKIAlseDY0NjRlcy8gXAogCWVjaG9hdWRpby8gXAogCWVtdTEwazEvIFwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hc2locGkvYXNpaHBpLmMgYi9zb3VuZC9wY2kvYXNpaHBpL2FzaWhwaS5jCmluZGV4IGY4Y2NjOTY3Li4yY2E2ZjRmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXNpaHBpL2FzaWhwaS5jCisrKyBiL3NvdW5kL3BjaS9hc2locGkvYXNpaHBpLmMKQEAgLTQyLDEwICs0MiwyOSBAQAogI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgogI2luY2x1ZGUgPHNvdW5kL2h3ZGVwLmg+CiAKKwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiQXVkaW9TY2llbmNlIGluYy4gPHN1cHBvcnRAYXVkaW9zY2llbmNlLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQXVkaW9TY2llbmNlIEFMU0EgQVNJNTAwMCBBU0k2MDAwIEFTSTg3eHggQVNJODl4eCIpOwogCisjaWYgZGVmaW5lZCBDT05GSUdfU05EX0RFQlVHCisvKiBjb3BpZWQgZnJvbSBwY21fbGliLmMsIGhvcGUgbGF0ZXIgcGF0Y2ggd2lsbCBtYWtlIHRoYXQgdmVyc2lvbiBwdWJsaWMKK2FuZCB0aGlzIGNvcHkgY2FuIGJlIHJlbW92ZWQgKi8KK3N0YXRpYyB2b2lkIHBjbV9kZWJ1Z19uYW1lKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgY2hhciAqbmFtZSwgc2l6ZV90IGxlbikKK3sKKwlzbnByaW50ZihuYW1lLCBsZW4sICJwY21DJWREJWQlYzolZCIsCisJCSBzdWJzdHJlYW0tPnBjbS0+Y2FyZC0+bnVtYmVyLAorCQkgc3Vic3RyZWFtLT5wY20tPmRldmljZSwKKwkJIHN1YnN0cmVhbS0+c3RyZWFtID8gJ2MnIDogJ3AnLAorCQkgc3Vic3RyZWFtLT5udW1iZXIpOworfQorI2RlZmluZSBERUJVR19OQU1FKHN1YnN0cmVhbSwgbmFtZSkgY2hhciBuYW1lWzE2XTsgcGNtX2RlYnVnX25hbWUoc3Vic3RyZWFtLCBuYW1lLCBzaXplb2YobmFtZSkpCisjZWxzZQorI2RlZmluZSBwY21fZGVidWdfbmFtZShzLCBuLCBsKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIERFQlVHX05BTUUobmFtZSwgc3Vic3RyZWFtKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKwogI2lmIGRlZmluZWQgQ09ORklHX1NORF9ERUJVR19WRVJCT1NFCiAvKioKICAqIHNuZF9wcmludGRkZCAtIHZlcnkgdmVyYm9zZSBkZWJ1ZyBwcmludGsKQEAgLTU4LDcgKzc3LDcgQEAKICNkZWZpbmUgc25kX3ByaW50ZGRkKGZvcm1hdCwgYXJncy4uLikgXAogCV9fc25kX3ByaW50aygzLCBfX0ZJTEVfXywgX19MSU5FX18sIGZvcm1hdCwgIyNhcmdzKQogI2Vsc2UKLSNkZWZpbmUgc25kX3ByaW50ZGRkKGZvcm1hdCwgYXJncy4uLikJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBzbmRfcHJpbnRkZGQoZm9ybWF0LCBhcmdzLi4uKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAogc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsJLyogaW5kZXggMC1NQVggKi8KQEAgLTEwMSwxMyArMTIwLDYgQEAKICNkZWZpbmUgUEVSSU9EX0JZVEVTX01JTiAgMjA0OAogI2RlZmluZSBCVUZGRVJfQllURVNfTUFYICg1MTIgKiAxMDI0KQogCi0vKiBjb252ZXJ0IHN0cmVhbSB0byBjaGFyYWN0ZXIgKi8KLSNkZWZpbmUgU0NIUihzKSAoKHMgPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgPyAnUCcgOiAnQycpCi0KLS8qI2RlZmluZSBUSU1FUl9NSUxMSVNFQ09ORFMgMjAKLSNkZWZpbmUgRk9SQ0VfVElNRVJfSklGRklFUyAoKFRJTUVSX01JTExJU0VDT05EUyAqIEhaICsgOTk5KS8xMDAwKQotKi8KLQogI2RlZmluZSBNQVhfQ0xPQ0tTT1VSQ0VTIChIUElfU0FNUExFQ0xPQ0tfU09VUkNFX0xBU1QgKyAxICsgNykKIAogc3RydWN0IGNsa19zb3VyY2UgewpAQCAtMTM2LDcgKzE0OCw3IEBACiAJdTMyIGhfbWl4ZXI7CiAJc3RydWN0IGNsa19jYWNoZSBjYzsKIAotCXUxNiBzdXBwb3J0X21tYXA7CisJdTE2IGNhbl9kbWE7CiAJdTE2IHN1cHBvcnRfZ3JvdXBpbmc7CiAJdTE2IHN1cHBvcnRfbXJ4OwogCXUxNiB1cGRhdGVfaW50ZXJ2YWxfZnJhbWVzOwpAQCAtMTU1LDYgKzE2Nyw3IEBACiAJdW5zaWduZWQgaW50IHBjbV9idWZfaG9zdF9yd19vZnM7IC8qIEhvc3QgUi9XIHBvcyAqLwogCXVuc2lnbmVkIGludCBwY21fYnVmX2RtYV9vZnM7CS8qIERNQSBSL1cgb2Zmc2V0IGluIGJ1ZmZlciAqLwogCXVuc2lnbmVkIGludCBwY21fYnVmX2VsYXBzZWRfZG1hX29mczsJLyogRE1BIFIvVyBvZmZzZXQgaW4gYnVmZmVyICovCisJdW5zaWduZWQgaW50IGRyYWluZWRfY291bnQ7CiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CiAJdTMyIGhfc3RyZWFtOwogCXN0cnVjdCBocGlfZm9ybWF0IGZvcm1hdDsKQEAgLTI4OCwxOSArMzAxLDI2IEBACiAjZGVmaW5lIGhwaV9oYW5kbGVfZXJyb3IoeCkgIGhhbmRsZV9lcnJvcih4LCBfX0xJTkVfXywgX19GSUxFX18pCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBHRU5FUkFMIFBDTSAqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQgcHJpbnRfaHdwYXJhbXMoc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwKQorCitzdGF0aWMgdm9pZCBwcmludF9od3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnApCiB7Ci0Jc25kX3ByaW50ZCgiSFdQQVJBTVMgXG4iKTsKLQlzbmRfcHJpbnRkKCJzYW1wbGVyYXRlICVkIFxuIiwgcGFyYW1zX3JhdGUocCkpOwotCXNuZF9wcmludGQoIkNoYW5uZWxzICVkIFxuIiwgcGFyYW1zX2NoYW5uZWxzKHApKTsKLQlzbmRfcHJpbnRkKCJGb3JtYXQgJWQgXG4iLCBwYXJhbXNfZm9ybWF0KHApKTsKLQlzbmRfcHJpbnRkKCJzdWJmb3JtYXQgJWQgXG4iLCBwYXJhbXNfc3ViZm9ybWF0KHApKTsKLQlzbmRfcHJpbnRkKCJCdWZmZXIgYnl0ZXMgJWQgXG4iLCBwYXJhbXNfYnVmZmVyX2J5dGVzKHApKTsKLQlzbmRfcHJpbnRkKCJQZXJpb2QgYnl0ZXMgJWQgXG4iLCBwYXJhbXNfcGVyaW9kX2J5dGVzKHApKTsKLQlzbmRfcHJpbnRkKCJhY2Nlc3MgJWQgXG4iLCBwYXJhbXNfYWNjZXNzKHApKTsKLQlzbmRfcHJpbnRkKCJwZXJpb2Rfc2l6ZSAlZCBcbiIsIHBhcmFtc19wZXJpb2Rfc2l6ZShwKSk7Ci0Jc25kX3ByaW50ZCgicGVyaW9kcyAlZCBcbiIsIHBhcmFtc19wZXJpb2RzKHApKTsKLQlzbmRfcHJpbnRkKCJidWZmZXJfc2l6ZSAlZCBcbiIsIHBhcmFtc19idWZmZXJfc2l6ZShwKSk7CisJREVCVUdfTkFNRShzdWJzdHJlYW0sIG5hbWUpOworCXNuZF9wcmludGQoIiVzIEhXUEFSQU1TXG4iLCBuYW1lKTsKKwlzbmRfcHJpbnRkKCIgc2FtcGxlcmF0ZSAlZCBIelxuIiwgcGFyYW1zX3JhdGUocCkpOworCXNuZF9wcmludGQoIiBjaGFubmVscyAlZFxuIiwgcGFyYW1zX2NoYW5uZWxzKHApKTsKKwlzbmRfcHJpbnRkKCIgZm9ybWF0ICVkXG4iLCBwYXJhbXNfZm9ybWF0KHApKTsKKwlzbmRfcHJpbnRkKCIgc3ViZm9ybWF0ICVkXG4iLCBwYXJhbXNfc3ViZm9ybWF0KHApKTsKKwlzbmRfcHJpbnRkKCIgYnVmZmVyICVkIEJcbiIsIHBhcmFtc19idWZmZXJfYnl0ZXMocCkpOworCXNuZF9wcmludGQoIiBwZXJpb2QgJWQgQlxuIiwgcGFyYW1zX3BlcmlvZF9ieXRlcyhwKSk7CisJc25kX3ByaW50ZCgiIGFjY2VzcyAlZFxuIiwgcGFyYW1zX2FjY2VzcyhwKSk7CisJc25kX3ByaW50ZCgiIHBlcmlvZF9zaXplICVkXG4iLCBwYXJhbXNfcGVyaW9kX3NpemUocCkpOworCXNuZF9wcmludGQoIiBwZXJpb2RzICVkXG4iLCBwYXJhbXNfcGVyaW9kcyhwKSk7CisJc25kX3ByaW50ZCgiIGJ1ZmZlcl9zaXplICVkXG4iLCBwYXJhbXNfYnVmZmVyX3NpemUocCkpOworCXNuZF9wcmludGQoIiAlZCBCL3NcbiIsIHBhcmFtc19yYXRlKHApICoKKwkJcGFyYW1zX2NoYW5uZWxzKHApICoKKwkJc25kX3BjbV9mb3JtYXRfd2lkdGgocGFyYW1zX2Zvcm1hdChwKSkgLyA4KTsKKwogfQogCiBzdGF0aWMgc25kX3BjbV9mb3JtYXRfdCBocGlfdG9fYWxzYV9mb3JtYXRzW10gPSB7CkBAIC00NTEsNyArNDcxLDcgQEAKIAlpbnQgd2lkdGg7CiAJdW5zaWduZWQgaW50IGJ5dGVzX3Blcl9zZWM7CiAKLQlwcmludF9od3BhcmFtcyhwYXJhbXMpOworCXByaW50X2h3cGFyYW1zKHN1YnN0cmVhbSwgcGFyYW1zKTsKIAllcnIgPSBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLCBwYXJhbXNfYnVmZmVyX2J5dGVzKHBhcmFtcykpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtNDU5LDEwICs0NzksNiBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlzbmRfcHJpbnRkZCgiZm9ybWF0ICVkLCAlZCBjaGFucywgJWRfaHpcbiIsCi0JCQkJZm9ybWF0LCBwYXJhbXNfY2hhbm5lbHMocGFyYW1zKSwKLQkJCQlwYXJhbXNfcmF0ZShwYXJhbXMpKTsKLQogCWhwaV9oYW5kbGVfZXJyb3IoaHBpX2Zvcm1hdF9jcmVhdGUoJmRwY20tPmZvcm1hdCwKIAkJCXBhcmFtc19jaGFubmVscyhwYXJhbXMpLAogCQkJZm9ybWF0LCBwYXJhbXNfcmF0ZShwYXJhbXMpLCAwLCAwKSk7CkBAIC00NzcsOCArNDkzLDcgQEAKIAl9CiAKIAlkcGNtLT5ocGlfYnVmZmVyX2F0dGFjaGVkID0gMDsKLQlpZiAoY2FyZC0+c3VwcG9ydF9tbWFwKSB7Ci0KKwlpZiAoY2FyZC0+Y2FuX2RtYSkgewogCQllcnIgPSBocGlfc3RyZWFtX2hvc3RfYnVmZmVyX2F0dGFjaChkcGNtLT5oX3N0cmVhbSwKIAkJCXBhcmFtc19idWZmZXJfYnl0ZXMocGFyYW1zKSwgIHJ1bnRpbWUtPmRtYV9hZGRyKTsKIAkJaWYgKGVyciA9PSAwKSB7CkBAIC01MDksOCArNTI0LDYgQEAKIAlkcGNtLT5ieXRlc19wZXJfc2VjID0gYnl0ZXNfcGVyX3NlYzsKIAlkcGNtLT5idWZmZXJfYnl0ZXMgPSBwYXJhbXNfYnVmZmVyX2J5dGVzKHBhcmFtcyk7CiAJZHBjbS0+cGVyaW9kX2J5dGVzID0gcGFyYW1zX3BlcmlvZF9ieXRlcyhwYXJhbXMpOwotCXNuZF9wcmludGRkKCJidWZmZXJfYnl0ZXM9JWQsIHBlcmlvZF9ieXRlcz0lZCwgYnBzPSVkXG4iLAotCQkJZHBjbS0+YnVmZmVyX2J5dGVzLCBkcGNtLT5wZXJpb2RfYnl0ZXMsIGJ5dGVzX3Blcl9zZWMpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01NjQsOSArNTc3LDEwIEBACiAJc3RydWN0IHNuZF9jYXJkX2FzaWhwaSAqY2FyZCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnM7CiAJdTE2IGU7CisJREVCVUdfTkFNRShzdWJzdHJlYW0sIG5hbWUpOwogCi0Jc25kX3ByaW50ZGQoIiVjJWQgdHJpZ2dlclxuIiwKLQkJCVNDSFIoc3Vic3RyZWFtLT5zdHJlYW0pLCBzdWJzdHJlYW0tPm51bWJlcik7CisJc25kX3ByaW50ZGQoIiVzIHRyaWdnZXJcbiIsIG5hbWUpOworCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgogCQlzbmRfcGNtX2dyb3VwX2Zvcl9lYWNoX2VudHJ5KHMsIHN1YnN0cmVhbSkgewpAQCAtNTgwLDggKzU5NCw4IEBACiAJCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gIT0gcy0+c3RyZWFtKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAoKHMtPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSAmJgotCQkJCShjYXJkLT5zdXBwb3J0X21tYXApKSB7CisJCQlkcy0+ZHJhaW5lZF9jb3VudCA9IDA7CisJCQlpZiAocy0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKIAkJCQkvKiBIb3cgZG8gSSBrbm93IGhvdyBtdWNoIHZhbGlkIGRhdGEgaXMgcHJlc2VudAogCQkJCSogaW4gYnVmZmVyPyBNdXN0IGJlIGF0IGxlYXN0IG9uZSBwZXJpb2QhCiAJCQkJKiBHdWVzc2luZyAyIHBlcmlvZHMsIGJ1dCBpZgpAQCAtNTk5LDkgKzYxMyw3IEBACiAJCQl9CiAKIAkJCWlmIChjYXJkLT5zdXBwb3J0X2dyb3VwaW5nKSB7Ci0JCQkJc25kX3ByaW50ZGQoIlx0JWMlZCBncm91cFxuIiwKLQkJCQkJCVNDSFIocy0+c3RyZWFtKSwKLQkJCQkJCXMtPm51bWJlcik7CisJCQkJc25kX3ByaW50ZGQoIiVkIGdyb3VwXG4iLCBzLT5udW1iZXIpOwogCQkJCWUgPSBocGlfc3RyZWFtX2dyb3VwX2FkZCgKIAkJCQkJZHBjbS0+aF9zdHJlYW0sCiAJCQkJCWRzLT5oX3N0cmVhbSk7CkBAIC02MTgsNyArNjMwLDcgQEAKIAkJLyogc3RhcnQgdGhlIG1hc3RlciBzdHJlYW0gKi8KIAkJc25kX2NhcmRfYXNpaHBpX3BjbV90aW1lcl9zdGFydChzdWJzdHJlYW0pOwogCQlpZiAoKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSkgfHwKLQkJCSFjYXJkLT5zdXBwb3J0X21tYXApCisJCQkhY2FyZC0+Y2FuX2RtYSkKIAkJCWhwaV9oYW5kbGVfZXJyb3IoaHBpX3N0cmVhbV9zdGFydChkcGNtLT5oX3N0cmVhbSkpOwogCQlicmVhazsKIApAQCAtNjM2LDkgKzY0OCw3IEBACiAJCQlzLT5ydW50aW1lLT5zdGF0dXMtPnN0YXRlID0gU05EUlZfUENNX1NUQVRFX1NFVFVQOwogCiAJCQlpZiAoY2FyZC0+c3VwcG9ydF9ncm91cGluZykgewotCQkJCXNuZF9wcmludGRkKCJcdCVjJWQgZ3JvdXBcbiIsCi0JCQkJU0NIUihzLT5zdHJlYW0pLAotCQkJCQlzLT5udW1iZXIpOworCQkJCXNuZF9wcmludGRkKCIlZCBncm91cFxuIiwgcy0+bnVtYmVyKTsKIAkJCQlzbmRfcGNtX3RyaWdnZXJfZG9uZShzLCBzdWJzdHJlYW0pOwogCQkJfSBlbHNlCiAJCQkJYnJlYWs7CkBAIC03MzIsOSArNzQyLDkgQEAKIAlpbnQgbG9vcHMgPSAwOwogCXUxNiBzdGF0ZTsKIAl1MzIgYnVmZmVyX3NpemUsIGJ5dGVzX2F2YWlsLCBzYW1wbGVzX3BsYXllZCwgb25fY2FyZF9ieXRlczsKKwlERUJVR19OQU1FKHN1YnN0cmVhbSwgbmFtZSk7CiAKLQlzbmRfcHJpbnRkZCgiJWMlZCBzbmRfY2FyZF9hc2locGlfdGltZXJfZnVuY3Rpb25cbiIsCi0JCQkJU0NIUihzdWJzdHJlYW0tPnN0cmVhbSksIHN1YnN0cmVhbS0+bnVtYmVyKTsKKwlzbmRfcHJpbnRkZCgiJXMgc25kX2NhcmRfYXNpaHBpX3RpbWVyX2Z1bmN0aW9uXG4iLCBuYW1lKTsKIAogCS8qIGZpbmQgbWluaW11bSBuZXdkYXRhIGFuZCBidWZmZXIgcG9zIGluIGdyb3VwICovCiAJc25kX3BjbV9ncm91cF9mb3JfZWFjaF9lbnRyeShzLCBzdWJzdHJlYW0pIHsKQEAgLTc1Niw2ICs3NjYsOSBAQAogCQkvKiBudW1iZXIgb2YgYnl0ZXMgaW4gb24tY2FyZCBidWZmZXIgKi8KIAkJcnVudGltZS0+ZGVsYXkgPSBvbl9jYXJkX2J5dGVzOwogCisJCWlmICghY2FyZC0+Y2FuX2RtYSkKKwkJCW9uX2NhcmRfYnl0ZXMgPSBieXRlc19hdmFpbDsKKwogCQlpZiAocy0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKIAkJCXBjbV9idWZfZG1hX29mcyA9IGRzLT5wY21fYnVmX2hvc3Rfcndfb2ZzIC0gYnl0ZXNfYXZhaWw7CiAJCQlpZiAoc3RhdGUgPT0gSFBJX1NUQVRFX1NUT1BQRUQpIHsKQEAgLTc2MywxMiArNzc2LDE4IEBACiAJCQkJICAgIChvbl9jYXJkX2J5dGVzIDwgZHMtPnBjbV9idWZfaG9zdF9yd19vZnMpKSB7CiAJCQkJCWhwaV9oYW5kbGVfZXJyb3IoaHBpX3N0cmVhbV9zdGFydChkcy0+aF9zdHJlYW0pKTsKIAkJCQkJc25kX3ByaW50ZGQoIlAlZCBzdGFydFxuIiwgcy0+bnVtYmVyKTsKKwkJCQkJZHMtPmRyYWluZWRfY291bnQgPSAwOwogCQkJCX0KIAkJCX0gZWxzZSBpZiAoc3RhdGUgPT0gSFBJX1NUQVRFX0RSQUlORUQpIHsKIAkJCQlzbmRfcHJpbnRkKEtFUk5fV0FSTklORyAiUCVkIGRyYWluZWRcbiIsCiAJCQkJCQlzLT5udW1iZXIpOwotCQkJCS8qc25kX3BjbV9zdG9wKHMsIFNORFJWX1BDTV9TVEFURV9YUlVOKTsKLQkJCQljb250aW51ZTsgKi8KKwkJCQlkcy0+ZHJhaW5lZF9jb3VudCsrOworCQkJCWlmIChkcy0+ZHJhaW5lZF9jb3VudCA+IDIpIHsKKwkJCQkJc25kX3BjbV9zdG9wKHMsIFNORFJWX1BDTV9TVEFURV9YUlVOKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlkcy0+ZHJhaW5lZF9jb3VudCA9IDA7CiAJCQl9CiAJCX0gZWxzZQogCQkJcGNtX2J1Zl9kbWFfb2ZzID0gYnl0ZXNfYXZhaWwgKyBkcy0+cGNtX2J1Zl9ob3N0X3J3X29mczsKQEAgLTc4NiwxNiArODA1LDE4IEBACiAJCQkJbmV3ZGF0YSk7CiAJCX0KIAotCQlzbmRfcHJpbnRkZCgiaHdfcHRyIHglMDRsWCwgYXBwbF9wdHIgeCUwNGxYXG4iLAorCQlzbmRfcHJpbnRkZCgiaHdfcHRyIDB4JTA0bFgsIGFwcGxfcHRyIDB4JTA0bFhcbiIsCiAJCQkodW5zaWduZWQgbG9uZylmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwKIAkJCQkJCXJ1bnRpbWUtPnN0YXR1cy0+aHdfcHRyKSwKIAkJCSh1bnNpZ25lZCBsb25nKWZyYW1lc190b19ieXRlcyhydW50aW1lLAogCQkJCQkJcnVudGltZS0+Y29udHJvbC0+YXBwbF9wdHIpKTsKIAotCQlzbmRfcHJpbnRkZCgiJWQgJWMlZCBTPSVkLCBydz0lMDRYLCBkbWE9eCUwNFgsIGxlZnQ9eCUwNFgsIgotCQkJIiBhdXg9eCUwNFggc3BhY2U9eCUwNFhcbiIsCi0JCQlsb29wcywgU0NIUihzLT5zdHJlYW0pLAlzLT5udW1iZXIsCi0JCQlzdGF0ZSwJZHMtPnBjbV9idWZfaG9zdF9yd19vZnMsIHBjbV9idWZfZG1hX29mcywgKGludClieXRlc19hdmFpbCwKKwkJc25kX3ByaW50ZGQoIiVkIFM9JWQsICIKKwkJCSJydz0weCUwNFgsIGRtYT0weCUwNFgsIGxlZnQ9MHglMDRYLCAiCisJCQkiYXV4PTB4JTA0WCBzcGFjZT0weCUwNFhcbiIsCisJCQlzLT5udW1iZXIsIHN0YXRlLAorCQkJZHMtPnBjbV9idWZfaG9zdF9yd19vZnMsIHBjbV9idWZfZG1hX29mcywKKwkJCShpbnQpYnl0ZXNfYXZhaWwsCiAJCQkoaW50KW9uX2NhcmRfYnl0ZXMsIGJ1ZmZlcl9zaXplLWJ5dGVzX2F2YWlsKTsKIAkJbG9vcHMrKzsKIAl9CkBAIC04MTQsNyArODM1LDcgQEAKIAogCW5leHRfamlmZmllcyA9IG1heChuZXh0X2ppZmZpZXMsIDFVKTsKIAlkcGNtLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIG5leHRfamlmZmllczsKLQlzbmRfcHJpbnRkZCgiamlmICVkIGJ1ZiBwb3MgeCUwNFggbmV3ZGF0YSB4JTA0WCB4ZmVyIHglMDRYXG4iLAorCXNuZF9wcmludGRkKCJqaWYgJWQgYnVmIHBvcyAweCUwNFggbmV3ZGF0YSAweCUwNFggeGZlciAweCUwNFhcbiIsCiAJCQluZXh0X2ppZmZpZXMsIHBjbV9idWZfZG1hX29mcywgbmV3ZGF0YSwgeGZlcmNvdW50KTsKIAogCXNuZF9wY21fZ3JvdXBfZm9yX2VhY2hfZW50cnkocywgc3Vic3RyZWFtKSB7CkBAIC04MjYsMzAgKzg0Nyw2MyBAQAogCiAJCWRzLT5wY21fYnVmX2RtYV9vZnMgPSBwY21fYnVmX2RtYV9vZnM7CiAKLQkJaWYgKHhmZXJjb3VudCAmJiAob25fY2FyZF9ieXRlcyA8PSBkcy0+cGVyaW9kX2J5dGVzKSkgewotCQkJaWYgKGNhcmQtPnN1cHBvcnRfbW1hcCkgewotCQkJCWlmIChzLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgewotCQkJCQlzbmRfcHJpbnRkZGQoIlAlZCB3cml0ZSB4JTA0eFxuIiwKKwkJaWYgKHhmZXJjb3VudCAmJgorCQkJLyogTGltaXQgdXNlIG9mIG9uIGNhcmQgZmlmbyBmb3IgcGxheWJhY2sgKi8KKwkJCSgob25fY2FyZF9ieXRlcyA8PSBkcy0+cGVyaW9kX2J5dGVzKSB8fAorCQkJKHMtPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpKSkKKworCQl7CisKKwkJCXVuc2lnbmVkIGludCBidWZfb2ZzID0gZHMtPnBjbV9idWZfaG9zdF9yd19vZnMgJSBkcy0+YnVmZmVyX2J5dGVzOworCQkJdW5zaWduZWQgaW50IHhmZXIxLCB4ZmVyMjsKKwkJCWNoYXIgKnBkID0gJnMtPnJ1bnRpbWUtPmRtYV9hcmVhW2J1Zl9vZnNdOworCisJCQlpZiAoY2FyZC0+Y2FuX2RtYSkgeyAvKiBidWZmZXIgd3JhcCBpcyBoYW5kbGVkIGF0IGxvd2VyIGxldmVsICovCisJCQkJeGZlcjEgPSB4ZmVyY291bnQ7CisJCQkJeGZlcjIgPSAwOworCQkJfSBlbHNlIHsKKwkJCQl4ZmVyMSA9IG1pbih4ZmVyY291bnQsIGRzLT5idWZmZXJfYnl0ZXMgLSBidWZfb2ZzKTsKKwkJCQl4ZmVyMiA9IHhmZXJjb3VudCAtIHhmZXIxOworCQkJfQorCisJCQlpZiAocy0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJCQlzbmRfcHJpbnRkZGQoIlAlZCB3cml0ZTEgMHglMDRYIDB4JTA0WFxuIiwKKwkJCQkJcy0+bnVtYmVyLCB4ZmVyMSwgYnVmX29mcyk7CisJCQkJaHBpX2hhbmRsZV9lcnJvcigKKwkJCQkJaHBpX291dHN0cmVhbV93cml0ZV9idWYoCisJCQkJCQlkcy0+aF9zdHJlYW0sIHBkLCB4ZmVyMSwKKwkJCQkJCSZkcy0+Zm9ybWF0KSk7CisKKwkJCQlpZiAoeGZlcjIpIHsKKwkJCQkJcGQgPSBzLT5ydW50aW1lLT5kbWFfYXJlYTsKKworCQkJCQlzbmRfcHJpbnRkZGQoIlAlZCB3cml0ZTIgMHglMDRYIDB4JTA0WFxuIiwKIAkJCQkJCQlzLT5udW1iZXIsCi0JCQkJCQkJZHMtPnBlcmlvZF9ieXRlcyk7CisJCQkJCQkJeGZlcmNvdW50IC0geGZlcjEsIGJ1Zl9vZnMpOwogCQkJCQlocGlfaGFuZGxlX2Vycm9yKAogCQkJCQkJaHBpX291dHN0cmVhbV93cml0ZV9idWYoCi0JCQkJCQkJZHMtPmhfc3RyZWFtLAotCQkJCQkJCSZzLT5ydW50aW1lLT4KLQkJCQkJCQkJZG1hX2FyZWFbMF0sCi0JCQkJCQkJeGZlcmNvdW50LAorCQkJCQkJCWRzLT5oX3N0cmVhbSwgcGQsCisJCQkJCQkJeGZlcmNvdW50IC0geGZlcjEsCiAJCQkJCQkJJmRzLT5mb3JtYXQpKTsKLQkJCQl9IGVsc2UgewotCQkJCQlzbmRfcHJpbnRkZGQoIkMlZCByZWFkIHglMDR4XG4iLAotCQkJCQkJcy0+bnVtYmVyLAotCQkJCQkJeGZlcmNvdW50KTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXNuZF9wcmludGRkZCgiQyVkIHJlYWQxIDB4JTA0eFxuIiwKKwkJCQkJcy0+bnVtYmVyLCB4ZmVyMSk7CisJCQkJaHBpX2hhbmRsZV9lcnJvcigKKwkJCQkJaHBpX2luc3RyZWFtX3JlYWRfYnVmKAorCQkJCQkJZHMtPmhfc3RyZWFtLAorCQkJCQkJcGQsIHhmZXIxKSk7CisJCQkJaWYgKHhmZXIyKSB7CisJCQkJCXBkID0gcy0+cnVudGltZS0+ZG1hX2FyZWE7CisJCQkJCXNuZF9wcmludGRkZCgiQyVkIHJlYWQyIDB4JTA0eFxuIiwKKwkJCQkJCXMtPm51bWJlciwgeGZlcjIpOwogCQkJCQlocGlfaGFuZGxlX2Vycm9yKAogCQkJCQkJaHBpX2luc3RyZWFtX3JlYWRfYnVmKAogCQkJCQkJCWRzLT5oX3N0cmVhbSwKLQkJCQkJCQlOVUxMLCB4ZmVyY291bnQpKTsKKwkJCQkJCQlwZCwgeGZlcjIpKTsKIAkJCQl9Ci0JCQkJZHMtPnBjbV9idWZfaG9zdF9yd19vZnMgPSBkcy0+cGNtX2J1Zl9ob3N0X3J3X29mcyArIHhmZXJjb3VudDsKLQkJCX0gLyogZWxzZSBSL1cgd2lsbCBiZSBoYW5kbGVkIGJ5IHJlYWQvd3JpdGUgY2FsbGJhY2tzICovCisJCQl9CisJCQlkcy0+cGNtX2J1Zl9ob3N0X3J3X29mcyA9IGRzLT5wY21fYnVmX2hvc3Rfcndfb2ZzICsgeGZlcmNvdW50OwogCQkJZHMtPnBjbV9idWZfZWxhcHNlZF9kbWFfb2ZzID0gcGNtX2J1Zl9kbWFfb2ZzOwogCQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzKTsKIAkJfQpAQCAtODYzLDcgKzkxNyw3IEBACiBzdGF0aWMgaW50IHNuZF9jYXJkX2FzaWhwaV9wbGF5YmFja19pb2N0bChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJCQkJICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7Ci0Jc25kX3ByaW50ZGQoS0VSTl9JTkZPICJQbGF5YmFjayBpb2N0bCAlZFxuIiwgY21kKTsKKwlzbmRfcHJpbnRkZGQoS0VSTl9JTkZPICJQJWQgaW9jdGwgJWRcbiIsIHN1YnN0cmVhbS0+bnVtYmVyLCBjbWQpOwogCXJldHVybiBzbmRfcGNtX2xpYl9pb2N0bChzdWJzdHJlYW0sIGNtZCwgYXJnKTsKIH0KIApAQCAtODczLDcgKzkyNyw3IEBACiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzdHJ1Y3Qgc25kX2NhcmRfYXNpaHBpX3BjbSAqZHBjbSA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAotCXNuZF9wcmludGRkKCJwbGF5YmFjayBwcmVwYXJlICVkXG4iLCBzdWJzdHJlYW0tPm51bWJlcik7CisJc25kX3ByaW50ZGQoIlAlZCBwcmVwYXJlXG4iLCBzdWJzdHJlYW0tPm51bWJlcik7CiAKIAlocGlfaGFuZGxlX2Vycm9yKGhwaV9vdXRzdHJlYW1fcmVzZXQoZHBjbS0+aF9zdHJlYW0pKTsKIAlkcGNtLT5wY21fYnVmX2hvc3Rfcndfb2ZzID0gMDsKQEAgLTg5MCw3ICs5NDQsNyBAQAogCXNuZF9wY21fdWZyYW1lc190IHB0cjsKIAogCXB0ciA9IGJ5dGVzX3RvX2ZyYW1lcyhydW50aW1lLCBkcGNtLT5wY21fYnVmX2RtYV9vZnMgICUgZHBjbS0+YnVmZmVyX2J5dGVzKTsKLQlzbmRfcHJpbnRkZGQoInBsYXliYWNrX3BvaW50ZXI9eCUwNGx4XG4iLCAodW5zaWduZWQgbG9uZylwdHIpOworCXNuZF9wcmludGRkZCgiUCVkIHBvaW50ZXIgPSAweCUwNGx4XG4iLCBzdWJzdHJlYW0tPm51bWJlciwgKHVuc2lnbmVkIGxvbmcpcHRyKTsKIAlyZXR1cm4gcHRyOwogfQogCkBAIC05ODYsMTEgKzEwNDAsOSBAQAogCQkJCQlTTkRSVl9QQ01fSU5GT19ET1VCTEUgfAogCQkJCQlTTkRSVl9QQ01fSU5GT19CQVRDSCB8CiAJCQkJCVNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKLQkJCQkJU05EUlZfUENNX0lORk9fUEFVU0U7Ci0KLQlpZiAoY2FyZC0+c3VwcG9ydF9tbWFwKQotCQlzbmRfY2FyZF9hc2locGlfcGxheWJhY2suaW5mbyB8PSBTTkRSVl9QQ01fSU5GT19NTUFQIHwKLQkJCQkJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQ7CisJCQkJCVNORFJWX1BDTV9JTkZPX1BBVVNFIHwKKwkJCQkJU05EUlZfUENNX0lORk9fTU1BUCB8CisJCQkJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQ7CiAKIAlpZiAoY2FyZC0+c3VwcG9ydF9ncm91cGluZykKIAkJc25kX2NhcmRfYXNpaHBpX3BsYXliYWNrLmluZm8gfD0gU05EUlZfUENNX0lORk9fU1lOQ19TVEFSVDsKQEAgLTk5OCw3ICsxMDUwLDcgQEAKIAkvKiBzdHJ1Y3QgaXMgY29waWVkLCBzbyBjYW4gY3JlYXRlIGluaXRpYWxpemVyIGR5bmFtaWNhbGx5ICovCiAJcnVudGltZS0+aHcgPSBzbmRfY2FyZF9hc2locGlfcGxheWJhY2s7CiAKLQlpZiAoY2FyZC0+c3VwcG9ydF9tbWFwKQorCWlmIChjYXJkLT5jYW5fZG1hKQogCQllcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfcG93MihydW50aW1lLCAwLAogCQkJCQlTTkRSVl9QQ01fSFdfUEFSQU1fQlVGRkVSX0JZVEVTKTsKIAlpZiAoZXJyIDwgMCkKQEAgLTEwMjgsNTggKzEwODAsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNuZF9jYXJkX2FzaWhwaV9wbGF5YmFja19jb3B5KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCQlpbnQgY2hhbm5lbCwKLQkJCQkJc25kX3BjbV91ZnJhbWVzX3QgcG9zLAotCQkJCQl2b2lkIF9fdXNlciAqc3JjLAotCQkJCQlzbmRfcGNtX3VmcmFtZXNfdCBjb3VudCkKLXsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCXN0cnVjdCBzbmRfY2FyZF9hc2locGlfcGNtICpkcGNtID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIGludCBsZW47Ci0KLQlsZW4gPSBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgY291bnQpOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKHJ1bnRpbWUtPmRtYV9hcmVhLCBzcmMsIGxlbikpCi0JCXJldHVybiAtRUZBVUxUOwotCi0Jc25kX3ByaW50ZGRkKCJwbGF5YmFjayBjb3B5JWQgJXUgYnl0ZXNcbiIsCi0JCQlzdWJzdHJlYW0tPm51bWJlciwgbGVuKTsKLQotCWhwaV9oYW5kbGVfZXJyb3IoaHBpX291dHN0cmVhbV93cml0ZV9idWYoZHBjbS0+aF9zdHJlYW0sCi0JCQkJcnVudGltZS0+ZG1hX2FyZWEsIGxlbiwgJmRwY20tPmZvcm1hdCkpOwotCi0JZHBjbS0+cGNtX2J1Zl9ob3N0X3J3X29mcyArPSBsZW47Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzbmRfY2FyZF9hc2locGlfcGxheWJhY2tfc2lsZW5jZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKgotCQkJCQkgICAgc3Vic3RyZWFtLCBpbnQgY2hhbm5lbCwKLQkJCQkJICAgIHNuZF9wY21fdWZyYW1lc190IHBvcywKLQkJCQkJICAgIHNuZF9wY21fdWZyYW1lc190IGNvdW50KQotewotCS8qIFVzdWFsbHkgd3JpdGVzIHNpbGVuY2UgdG8gRE1BIGJ1ZmZlciwgd2hpY2ggc2hvdWxkIGJlIG92ZXJ3cml0dGVuCi0JYnkgcmVhbCBhdWRpbyBsYXRlci4gIE91ciBmaWZvcyBjYW5ub3QgYmUgb3ZlcndyaXR0ZW4sIGFuZCBhcmUgbm90Ci0JZnJlZS1ydW5uaW5nIERNQXMuIFNpbGVuY2UgaXMgb3V0cHV0IG9uIGZpZm8gdW5kZXJmbG93LgotCVRoaXMgY2FsbGJhY2sgaXMgc3RpbGwgcmVxdWlyZWQgdG8gYWxsb3cgdGhlIGNvcHkgY2FsbGJhY2sgdG8gYmUgdXNlZC4KLQkqLwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9jYXJkX2FzaWhwaV9wbGF5YmFja19vcHMgPSB7Ci0JLm9wZW4gPSBzbmRfY2FyZF9hc2locGlfcGxheWJhY2tfb3BlbiwKLQkuY2xvc2UgPSBzbmRfY2FyZF9hc2locGlfcGxheWJhY2tfY2xvc2UsCi0JLmlvY3RsID0gc25kX2NhcmRfYXNpaHBpX3BsYXliYWNrX2lvY3RsLAotCS5od19wYXJhbXMgPSBzbmRfY2FyZF9hc2locGlfcGNtX2h3X3BhcmFtcywKLQkuaHdfZnJlZSA9IHNuZF9jYXJkX2FzaWhwaV9od19mcmVlLAotCS5wcmVwYXJlID0gc25kX2NhcmRfYXNpaHBpX3BsYXliYWNrX3ByZXBhcmUsCi0JLnRyaWdnZXIgPSBzbmRfY2FyZF9hc2locGlfdHJpZ2dlciwKLQkucG9pbnRlciA9IHNuZF9jYXJkX2FzaWhwaV9wbGF5YmFja19wb2ludGVyLAotCS5jb3B5ID0gc25kX2NhcmRfYXNpaHBpX3BsYXliYWNrX2NvcHksCi0JLnNpbGVuY2UgPSBzbmRfY2FyZF9hc2locGlfcGxheWJhY2tfc2lsZW5jZSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX2NhcmRfYXNpaHBpX3BsYXliYWNrX21tYXBfb3BzID0gewogCS5vcGVuID0gc25kX2NhcmRfYXNpaHBpX3BsYXliYWNrX29wZW4sCiAJLmNsb3NlID0gc25kX2NhcmRfYXNpaHBpX3BsYXliYWNrX2Nsb3NlLApAQCAtMTIxMSwxOCArMTIxMSwxNiBAQAogCXNuZF9jYXJkX2FzaWhwaV9jYXB0dXJlX2Zvcm1hdChjYXJkLCBkcGNtLT5oX3N0cmVhbSwKIAkJCQkgICAgICAgJnNuZF9jYXJkX2FzaWhwaV9jYXB0dXJlKTsKIAlzbmRfY2FyZF9hc2locGlfcGNtX3NhbXBsZXJhdGVzKGNhcmQsICAmc25kX2NhcmRfYXNpaHBpX2NhcHR1cmUpOwotCXNuZF9jYXJkX2FzaWhwaV9jYXB0dXJlLmluZm8gPSBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRDsKLQotCWlmIChjYXJkLT5zdXBwb3J0X21tYXApCi0JCXNuZF9jYXJkX2FzaWhwaV9jYXB0dXJlLmluZm8gfD0gU05EUlZfUENNX0lORk9fTU1BUCB8Ci0JCQkJCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEOworCXNuZF9jYXJkX2FzaWhwaV9jYXB0dXJlLmluZm8gPSBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCQkJCVNORFJWX1BDTV9JTkZPX01NQVAgfAorCQkJCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEOwogCiAJaWYgKGNhcmQtPnN1cHBvcnRfZ3JvdXBpbmcpCiAJCXNuZF9jYXJkX2FzaWhwaV9jYXB0dXJlLmluZm8gfD0gU05EUlZfUENNX0lORk9fU1lOQ19TVEFSVDsKIAogCXJ1bnRpbWUtPmh3ID0gc25kX2NhcmRfYXNpaHBpX2NhcHR1cmU7CiAKLQlpZiAoY2FyZC0+c3VwcG9ydF9tbWFwKQorCWlmIChjYXJkLT5jYW5fZG1hKQogCQllcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfcG93MihydW50aW1lLCAwLAogCQkJCQlTTkRSVl9QQ01fSFdfUEFSQU1fQlVGRkVSX0JZVEVTKTsKIAlpZiAoZXJyIDwgMCkKQEAgLTEyNDYsMjggKzEyNDQsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNuZF9jYXJkX2FzaWhwaV9jYXB0dXJlX2NvcHkoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkJaW50IGNoYW5uZWwsIHNuZF9wY21fdWZyYW1lc190IHBvcywKLQkJCQl2b2lkIF9fdXNlciAqZHN0LCBzbmRfcGNtX3VmcmFtZXNfdCBjb3VudCkKLXsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCXN0cnVjdCBzbmRfY2FyZF9hc2locGlfcGNtICpkcGNtID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwotCXUzMiBsZW47Ci0KLQlsZW4gPSBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgY291bnQpOwotCi0Jc25kX3ByaW50ZGRkKCJjYXB0dXJlIGNvcHklZCAlZCBieXRlc1xuIiwgc3Vic3RyZWFtLT5udW1iZXIsIGxlbik7Ci0JaHBpX2hhbmRsZV9lcnJvcihocGlfaW5zdHJlYW1fcmVhZF9idWYoZHBjbS0+aF9zdHJlYW0sCi0JCQkJcnVudGltZS0+ZG1hX2FyZWEsIGxlbikpOwotCi0JZHBjbS0+cGNtX2J1Zl9ob3N0X3J3X29mcyA9IGRwY20tPnBjbV9idWZfaG9zdF9yd19vZnMgKyBsZW47Ci0KLQlpZiAoY29weV90b191c2VyKGRzdCwgcnVudGltZS0+ZG1hX2FyZWEsIGxlbikpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX2NhcmRfYXNpaHBpX2NhcHR1cmVfbW1hcF9vcHMgPSB7CiAJLm9wZW4gPSBzbmRfY2FyZF9hc2locGlfY2FwdHVyZV9vcGVuLAogCS5jbG9zZSA9IHNuZF9jYXJkX2FzaWhwaV9jYXB0dXJlX2Nsb3NlLApAQCAtMTI3OSwxOCArMTI1NSw2IEBACiAJLnBvaW50ZXIgPSBzbmRfY2FyZF9hc2locGlfY2FwdHVyZV9wb2ludGVyLAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfY2FyZF9hc2locGlfY2FwdHVyZV9vcHMgPSB7Ci0JLm9wZW4gPSBzbmRfY2FyZF9hc2locGlfY2FwdHVyZV9vcGVuLAotCS5jbG9zZSA9IHNuZF9jYXJkX2FzaWhwaV9jYXB0dXJlX2Nsb3NlLAotCS5pb2N0bCA9IHNuZF9jYXJkX2FzaWhwaV9jYXB0dXJlX2lvY3RsLAotCS5od19wYXJhbXMgPSBzbmRfY2FyZF9hc2locGlfcGNtX2h3X3BhcmFtcywKLQkuaHdfZnJlZSA9IHNuZF9jYXJkX2FzaWhwaV9od19mcmVlLAotCS5wcmVwYXJlID0gc25kX2NhcmRfYXNpaHBpX2NhcHR1cmVfcHJlcGFyZSwKLQkudHJpZ2dlciA9IHNuZF9jYXJkX2FzaWhwaV90cmlnZ2VyLAotCS5wb2ludGVyID0gc25kX2NhcmRfYXNpaHBpX2NhcHR1cmVfcG9pbnRlciwKLQkuY29weSA9IHNuZF9jYXJkX2FzaWhwaV9jYXB0dXJlX2NvcHkKLX07Ci0KIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jYXJkX2FzaWhwaV9wY21fbmV3KHN0cnVjdCBzbmRfY2FyZF9hc2locGkgKmFzaWhwaSwKIAkJCQkgICAgICBpbnQgZGV2aWNlLCBpbnQgc3Vic3RyZWFtcykKIHsKQEAgLTEzMDMsMTcgKzEyNjcsMTAgQEAKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAkvKiBwb2ludGVyIHRvIG9wcyBzdHJ1Y3QgaXMgc3RvcmVkLCBkb250IGNoYW5nZSBvcHMgYWZ0ZXJ3YXJkcyEgKi8KLQlpZiAoYXNpaHBpLT5zdXBwb3J0X21tYXApIHsKIAkJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywKIAkJCQkmc25kX2NhcmRfYXNpaHBpX3BsYXliYWNrX21tYXBfb3BzKTsKIAkJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLAogCQkJCSZzbmRfY2FyZF9hc2locGlfY2FwdHVyZV9tbWFwX29wcyk7Ci0JfSBlbHNlIHsKLQkJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywKLQkJCQkmc25kX2NhcmRfYXNpaHBpX3BsYXliYWNrX29wcyk7Ci0JCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwKLQkJCQkmc25kX2NhcmRfYXNpaHBpX2NhcHR1cmVfb3BzKTsKLQl9CiAKIAlwY20tPnByaXZhdGVfZGF0YSA9IGFzaWhwaTsKIAlwY20tPmluZm9fZmxhZ3MgPSAwOwpAQCAtMTQxMywxNCArMTM3MCwxNiBAQAogCQkJCXN0cnVjdCBocGlfY29udHJvbCAqaHBpX2N0bCwKIAkJCQljaGFyICpuYW1lKQogewotCWNoYXIgKmRpciA9ICIiOworCWNoYXIgKmRpcjsKIAltZW1zZXQoc25kX2NvbnRyb2wsIDAsIHNpemVvZigqc25kX2NvbnRyb2wpKTsKIAlzbmRfY29udHJvbC0+bmFtZSA9IGhwaV9jdGwtPm5hbWU7CiAJc25kX2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPSBocGlfY3RsLT5oX2NvbnRyb2w7CiAJc25kX2NvbnRyb2wtPmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVI7CiAJc25kX2NvbnRyb2wtPmluZGV4ID0gMDsKIAotCWlmIChocGlfY3RsLT5kc3Rfbm9kZV90eXBlICsgSFBJX0RFU1ROT0RFX05PTkUgPT0gSFBJX0RFU1ROT0RFX0lTVFJFQU0pCisJaWYgKGhwaV9jdGwtPnNyY19ub2RlX3R5cGUgKyBIUElfU09VUkNFTk9ERV9OT05FID09IEhQSV9TT1VSQ0VOT0RFX0NMT0NLX1NPVVJDRSkKKwkJZGlyID0gIiI7IC8qIGNsb2NrIGlzIG5laXRoZXIgY2FwdHVyZSBub3IgcGxheWJhY2sgKi8KKwllbHNlIGlmIChocGlfY3RsLT5kc3Rfbm9kZV90eXBlICsgSFBJX0RFU1ROT0RFX05PTkUgPT0gSFBJX0RFU1ROT0RFX0lTVFJFQU0pCiAJCWRpciA9ICJDYXB0dXJlICI7ICAvKiBPbiBvciB0b3dhcmRzIGEgUENNIGNhcHR1cmUgZGVzdGluYXRpb24qLwogCWVsc2UgaWYgKChocGlfY3RsLT5zcmNfbm9kZV90eXBlICsgSFBJX1NPVVJDRU5PREVfTk9ORSAhPSBIUElfU09VUkNFTk9ERV9PU1RSRUFNKSAmJgogCQkoIWhwaV9jdGwtPmRzdF9ub2RlX3R5cGUpKQpAQCAtMTQzMyw3ICsxMzkyLDcgQEAKIAkJZGlyID0gIlBsYXliYWNrICI7IC8qIFBDTSBQbGF5YmFjayBzb3VyY2UsIG9yICBvdXRwdXQgbm9kZSAqLwogCiAJaWYgKGhwaV9jdGwtPnNyY19ub2RlX3R5cGUgJiYgaHBpX2N0bC0+ZHN0X25vZGVfdHlwZSkKLQkJc3ByaW50ZihocGlfY3RsLT5uYW1lLCAiJXMlZCAlcyVkICVzJXMiLAorCQlzcHJpbnRmKGhwaV9jdGwtPm5hbWUsICIlcyAlZCAlcyAlZCAlcyVzIiwKIAkJCWFzaWhwaV9zcmNfbmFtZXNbaHBpX2N0bC0+c3JjX25vZGVfdHlwZV0sCiAJCQlocGlfY3RsLT5zcmNfbm9kZV9pbmRleCwKIAkJCWFzaWhwaV9kc3RfbmFtZXNbaHBpX2N0bC0+ZHN0X25vZGVfdHlwZV0sCkBAIC0yODc1LDE0ICsyODM0LDE0IEBACiAJaWYgKGVycikKIAkJYXNpaHBpLT51cGRhdGVfaW50ZXJ2YWxfZnJhbWVzID0gNTEyOwogCi0JaWYgKCFhc2locGktPnN1cHBvcnRfbW1hcCkKKwlpZiAoIWFzaWhwaS0+Y2FuX2RtYSkKIAkJYXNpaHBpLT51cGRhdGVfaW50ZXJ2YWxfZnJhbWVzICo9IDI7CiAKIAlocGlfaGFuZGxlX2Vycm9yKGhwaV9pbnN0cmVhbV9vcGVuKGFzaWhwaS0+YWRhcHRlcl9pbmRleCwKIAkJCSAgICAgMCwgJmhfc3RyZWFtKSk7CiAKIAllcnIgPSBocGlfaW5zdHJlYW1faG9zdF9idWZmZXJfZnJlZShoX3N0cmVhbSk7Ci0JYXNpaHBpLT5zdXBwb3J0X21tYXAgPSAoIWVycik7CisJYXNpaHBpLT5jYW5fZG1hID0gKCFlcnIpOwogCiAJaHBpX2hhbmRsZV9lcnJvcihocGlfaW5zdHJlYW1fY2xvc2UoaF9zdHJlYW0pKTsKIApAQCAtMjg5NCw4ICsyODUzLDggQEAKIAkJYXNpaHBpLT5vdXRfbWF4X2NoYW5zID0gMjsKIAl9CiAKLQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAic3VwcG9ydHMgbW1hcDolZCBncm91cGluZzolZCBtcng6JWRcbiIsCi0JCQlhc2locGktPnN1cHBvcnRfbW1hcCwKKwlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiaGFzIGRtYTolZCwgZ3JvdXBpbmc6JWQsIG1yeDolZFxuIiwKKwkJCWFzaWhwaS0+Y2FuX2RtYSwKIAkJCWFzaWhwaS0+c3VwcG9ydF9ncm91cGluZywKIAkJCWFzaWhwaS0+c3VwcG9ydF9tcngKIAkgICAgICApOwpAQCAtMjkyNSwxMCArMjg4NCw3IEBACiAJICAgIGJ5IGVuYWJsZV9od2RlcCAgbW9kdWxlIHBhcmFtKi8KIAlzbmRfYXNpaHBpX2hwaV9uZXcoYXNpaHBpLCAwLCBOVUxMKTsKIAotCWlmIChhc2locGktPnN1cHBvcnRfbW1hcCkKLQkJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkFTSUhQSS1NTUFQIik7Ci0JZWxzZQotCQlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiQVNJSFBJIik7CisJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkFTSUhQSSIpOwogCiAJc3ByaW50ZihjYXJkLT5zaG9ydG5hbWUsICJBdWRpb1NjaWVuY2UgQVNJJTRYIiwgYXNpaHBpLT50eXBlKTsKIAlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMgJWkiLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FzaWhwaS9ocGk2MDAwLmMgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaTYwMDAuYwppbmRleCA4YzhhYWM0Li5kZjRhZWQ1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXNpaHBpL2hwaTYwMDAuYworKysgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaTYwMDAuYwpAQCAtMjAwLDggKzIwMCw4IEBACiBzdGF0aWMgdm9pZCBzdWJzeXNfY3JlYXRlX2FkYXB0ZXIoc3RydWN0IGhwaV9tZXNzYWdlICpwaG0sCiAJc3RydWN0IGhwaV9yZXNwb25zZSAqcGhyKTsKIAotc3RhdGljIHZvaWQgc3Vic3lzX2RlbGV0ZV9hZGFwdGVyKHN0cnVjdCBocGlfbWVzc2FnZSAqcGhtLAotCXN0cnVjdCBocGlfcmVzcG9uc2UgKnBocik7CitzdGF0aWMgdm9pZCBhZGFwdGVyX2RlbGV0ZShzdHJ1Y3QgaHBpX2FkYXB0ZXJfb2JqICpwYW8sCisJc3RydWN0IGhwaV9tZXNzYWdlICpwaG0sIHN0cnVjdCBocGlfcmVzcG9uc2UgKnBocik7CiAKIHN0YXRpYyB2b2lkIGFkYXB0ZXJfZ2V0X2Fzc2VydHMoc3RydWN0IGhwaV9hZGFwdGVyX29iaiAqcGFvLAogCXN0cnVjdCBocGlfbWVzc2FnZSAqcGhtLCBzdHJ1Y3QgaHBpX3Jlc3BvbnNlICpwaHIpOwpAQCAtMjIyLDkgKzIyMiw2IEBACiAJY2FzZSBIUElfU1VCU1lTX0NSRUFURV9BREFQVEVSOgogCQlzdWJzeXNfY3JlYXRlX2FkYXB0ZXIocGhtLCBwaHIpOwogCQlicmVhazsKLQljYXNlIEhQSV9TVUJTWVNfREVMRVRFX0FEQVBURVI6Ci0JCXN1YnN5c19kZWxldGVfYWRhcHRlcihwaG0sIHBocik7Ci0JCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXBoci0+ZXJyb3IgPSBIUElfRVJST1JfSU5WQUxJRF9GVU5DOwogCQlicmVhazsKQEAgLTI3OSw2ICsyNzYsMTAgQEAKIAkJYWRhcHRlcl9nZXRfYXNzZXJ0cyhwYW8sIHBobSwgcGhyKTsKIAkJYnJlYWs7CiAKKwljYXNlIEhQSV9BREFQVEVSX0RFTEVURToKKwkJYWRhcHRlcl9kZWxldGUocGFvLCBwaG0sIHBocik7CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJaHdfbWVzc2FnZShwYW8sIHBobSwgcGhyKTsKIAkJYnJlYWs7CkBAIC0zMzMsMjYgKzMzNCwyMiBAQAogewogCXN0cnVjdCBocGlfYWRhcHRlcl9vYmogKnBhbyA9IE5VTEw7CiAKLQkvKiBzdWJzeXRlbSBtZXNzYWdlcyBnZXQgZXhlY3V0ZWQgYnkgZXZlcnkgSFBJLiAqLwotCS8qIEFsbCBvdGhlciBtZXNzYWdlcyBhcmUgaWdub3JlZCB1bmxlc3MgdGhlIGFkYXB0ZXIgaW5kZXggbWF0Y2hlcyAqLwotCS8qIGFuIGFkYXB0ZXIgaW4gdGhlIEhQSSAqLwotCS8qSFBJX0RFQlVHX0xPRyhERUJVRywgIk8gJWQsRiAleFxuIiwgcGhtLT53T2JqZWN0LCBwaG0tPndGdW5jdGlvbik7ICovCi0KLQkvKiBpZiBEc3AgaGFzIGNyYXNoZWQgdGhlbiBkbyBub3QgY29tbXVuaWNhdGUgd2l0aCBpdCBhbnkgbW9yZSAqLwogCWlmIChwaG0tPm9iamVjdCAhPSBIUElfT0JKX1NVQlNZU1RFTSkgewogCQlwYW8gPSBocGlfZmluZF9hZGFwdGVyKHBobS0+YWRhcHRlcl9pbmRleCk7CiAJCWlmICghcGFvKSB7Ci0JCQlIUElfREVCVUdfTE9HKERFQlVHLAotCQkJCSIgJWQsJWQgcmVmdXNlZCwgZm9yIGFub3RoZXIgSFBJP1xuIiwKLQkJCQlwaG0tPm9iamVjdCwgcGhtLT5mdW5jdGlvbik7CisJCQlocGlfaW5pdF9yZXNwb25zZShwaHIsIHBobS0+b2JqZWN0LCBwaG0tPmZ1bmN0aW9uLAorCQkJCUhQSV9FUlJPUl9CQURfQURBUFRFUl9OVU1CRVIpOworCQkJSFBJX0RFQlVHX0xPRyhERUJVRywgImludmFsaWQgYWRhcHRlciBpbmRleDogJWQgXG4iLAorCQkJCXBobS0+YWRhcHRlcl9pbmRleCk7CiAJCQlyZXR1cm47CiAJCX0KIAorCQkvKiBEb24ndCBldmVuIHRyeSB0byBjb21tdW5pY2F0ZSB3aXRoIGNyYXNoZWQgRFNQICovCiAJCWlmIChwYW8tPmRzcF9jcmFzaGVkID49IDEwKSB7CiAJCQlocGlfaW5pdF9yZXNwb25zZShwaHIsIHBobS0+b2JqZWN0LCBwaG0tPmZ1bmN0aW9uLAogCQkJCUhQSV9FUlJPUl9EU1BfSEFSRFdBUkUpOwotCQkJSFBJX0RFQlVHX0xPRyhERUJVRywgIiAlZCwlZCBkc3AgY3Jhc2hlZC5cbiIsCi0JCQkJcGhtLT5vYmplY3QsIHBobS0+ZnVuY3Rpb24pOworCQkJSFBJX0RFQlVHX0xPRyhERUJVRywgImFkYXB0ZXIgJWQgZHNwIGNyYXNoZWRcbiIsCisJCQkJcGhtLT5hZGFwdGVyX2luZGV4KTsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAgLTQ2MywxNSArNDYwLDkgQEAKIAlwaHItPmVycm9yID0gMDsKIH0KIAotc3RhdGljIHZvaWQgc3Vic3lzX2RlbGV0ZV9hZGFwdGVyKHN0cnVjdCBocGlfbWVzc2FnZSAqcGhtLAotCXN0cnVjdCBocGlfcmVzcG9uc2UgKnBocikKK3N0YXRpYyB2b2lkIGFkYXB0ZXJfZGVsZXRlKHN0cnVjdCBocGlfYWRhcHRlcl9vYmogKnBhbywKKwlzdHJ1Y3QgaHBpX21lc3NhZ2UgKnBobSwgc3RydWN0IGhwaV9yZXNwb25zZSAqcGhyKQogewotCXN0cnVjdCBocGlfYWRhcHRlcl9vYmogKnBhbyA9IE5VTEw7Ci0KLQlwYW8gPSBocGlfZmluZF9hZGFwdGVyKHBobS0+b2JqX2luZGV4KTsKLQlpZiAoIXBhbykKLQkJcmV0dXJuOwotCiAJZGVsZXRlX2FkYXB0ZXJfb2JqKHBhbyk7CiAJaHBpX2RlbGV0ZV9hZGFwdGVyKHBhbyk7CiAJcGhyLT5lcnJvciA9IDA7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXNpaHBpL2hwaTYyMDUuYyBiL3NvdW5kL3BjaS9hc2locGkvaHBpNjIwNS5jCmluZGV4IDIyZTlmMDguLjlkNWRmNTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hc2locGkvaHBpNjIwNS5jCisrKyBiL3NvdW5kL3BjaS9hc2locGkvaHBpNjIwNS5jCkBAIC0xNTIsOCArMTUyLDggQEAKIAogc3RhdGljIHZvaWQgc3Vic3lzX2NyZWF0ZV9hZGFwdGVyKHN0cnVjdCBocGlfbWVzc2FnZSAqcGhtLAogCXN0cnVjdCBocGlfcmVzcG9uc2UgKnBocik7Ci1zdGF0aWMgdm9pZCBzdWJzeXNfZGVsZXRlX2FkYXB0ZXIoc3RydWN0IGhwaV9tZXNzYWdlICpwaG0sCi0Jc3RydWN0IGhwaV9yZXNwb25zZSAqcGhyKTsKK3N0YXRpYyB2b2lkIGFkYXB0ZXJfZGVsZXRlKHN0cnVjdCBocGlfYWRhcHRlcl9vYmogKnBhbywKKwlzdHJ1Y3QgaHBpX21lc3NhZ2UgKnBobSwgc3RydWN0IGhwaV9yZXNwb25zZSAqcGhyKTsKIAogc3RhdGljIHUxNiBjcmVhdGVfYWRhcHRlcl9vYmooc3RydWN0IGhwaV9hZGFwdGVyX29iaiAqcGFvLAogCXUzMiAqcG9zX2Vycm9yX2NvZGUpOwpAQCAtMjIzLDE1ICsyMjMsMTMgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBzdWJzeXNfbWVzc2FnZShzdHJ1Y3QgaHBpX21lc3NhZ2UgKnBobSwgc3RydWN0IGhwaV9yZXNwb25zZSAqcGhyKQorc3RhdGljIHZvaWQgc3Vic3lzX21lc3NhZ2Uoc3RydWN0IGhwaV9hZGFwdGVyX29iaiAqcGFvLAorCXN0cnVjdCBocGlfbWVzc2FnZSAqcGhtLCBzdHJ1Y3QgaHBpX3Jlc3BvbnNlICpwaHIpCiB7CiAJc3dpdGNoIChwaG0tPmZ1bmN0aW9uKSB7CiAJY2FzZSBIUElfU1VCU1lTX0NSRUFURV9BREFQVEVSOgogCQlzdWJzeXNfY3JlYXRlX2FkYXB0ZXIocGhtLCBwaHIpOwogCQlicmVhazsKLQljYXNlIEhQSV9TVUJTWVNfREVMRVRFX0FEQVBURVI6Ci0JCXN1YnN5c19kZWxldGVfYWRhcHRlcihwaG0sIHBocik7Ci0JCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXBoci0+ZXJyb3IgPSBIUElfRVJST1JfSU5WQUxJRF9GVU5DOwogCQlicmVhazsKQEAgLTI3OSw2ICsyNzcsMTAgQEAKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgKnBobSwgc3RydWN0IGhwaV9yZXNwb25zZSAqcGhyKQogewogCXN3aXRjaCAocGhtLT5mdW5jdGlvbikgeworCWNhc2UgSFBJX0FEQVBURVJfREVMRVRFOgorCQlhZGFwdGVyX2RlbGV0ZShwYW8sIHBobSwgcGhyKTsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQlod19tZXNzYWdlKHBhbywgcGhtLCBwaHIpOwogCQlicmVhazsKQEAgLTM3MSwzNiArMzczLDE3IEBACiAvKiogRW50cnkgcG9pbnQgdG8gdGhpcyBIUEkgYmFja2VuZAogICogQWxsIGNhbGxzIHRvIHRoZSBIUEkgc3RhcnQgaGVyZQogICovCi12b2lkIEhQSV82MjA1KHN0cnVjdCBocGlfbWVzc2FnZSAqcGhtLCBzdHJ1Y3QgaHBpX3Jlc3BvbnNlICpwaHIpCit2b2lkIF9IUElfNjIwNShzdHJ1Y3QgaHBpX2FkYXB0ZXJfb2JqICpwYW8sIHN0cnVjdCBocGlfbWVzc2FnZSAqcGhtLAorCXN0cnVjdCBocGlfcmVzcG9uc2UgKnBocikKIHsKLQlzdHJ1Y3QgaHBpX2FkYXB0ZXJfb2JqICpwYW8gPSBOVUxMOwotCi0JLyogc3Vic3l0ZW0gbWVzc2FnZXMgYXJlIHByb2Nlc3NlZCBieSBldmVyeSBIUEkuCi0JICogQWxsIG90aGVyIG1lc3NhZ2VzIGFyZSBpZ25vcmVkIHVubGVzcyB0aGUgYWRhcHRlciBpbmRleCBtYXRjaGVzCi0JICogYW4gYWRhcHRlciBpbiB0aGUgSFBJCi0JICovCi0JLyogSFBJX0RFQlVHX0xPRyhERUJVRywgIkhQSSBPYmo9JWQsIEZ1bmM9JWRcbiIsIHBobS0+d09iamVjdCwKLQkgICBwaG0tPndGdW5jdGlvbik7ICovCi0KLQkvKiBpZiBEc3AgaGFzIGNyYXNoZWQgdGhlbiBkbyBub3QgY29tbXVuaWNhdGUgd2l0aCBpdCBhbnkgbW9yZSAqLwotCWlmIChwaG0tPm9iamVjdCAhPSBIUElfT0JKX1NVQlNZU1RFTSkgewotCQlwYW8gPSBocGlfZmluZF9hZGFwdGVyKHBobS0+YWRhcHRlcl9pbmRleCk7Ci0JCWlmICghcGFvKSB7Ci0JCQlIUElfREVCVUdfTE9HKERFQlVHLAotCQkJCSIgJWQsJWQgcmVmdXNlZCwgZm9yIGFub3RoZXIgSFBJP1xuIiwKLQkJCQlwaG0tPm9iamVjdCwgcGhtLT5mdW5jdGlvbik7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlpZiAoKHBhby0+ZHNwX2NyYXNoZWQgPj0gMTApCi0JCQkmJiAocGhtLT5mdW5jdGlvbiAhPSBIUElfQURBUFRFUl9ERUJVR19SRUFEKSkgewotCQkJLyogYWxsb3cgbGFzdCByZXNvcnQgZGVidWcgcmVhZCBldmVuIGFmdGVyIGNyYXNoICovCi0JCQlocGlfaW5pdF9yZXNwb25zZShwaHIsIHBobS0+b2JqZWN0LCBwaG0tPmZ1bmN0aW9uLAotCQkJCUhQSV9FUlJPUl9EU1BfSEFSRFdBUkUpOwotCQkJSFBJX0RFQlVHX0xPRyhXQVJOSU5HLCAiICVkLCVkIGRzcCBjcmFzaGVkLlxuIiwKLQkJCQlwaG0tPm9iamVjdCwgcGhtLT5mdW5jdGlvbik7Ci0JCQlyZXR1cm47Ci0JCX0KKwlpZiAocGFvICYmIChwYW8tPmRzcF9jcmFzaGVkID49IDEwKQorCQkmJiAocGhtLT5mdW5jdGlvbiAhPSBIUElfQURBUFRFUl9ERUJVR19SRUFEKSkgeworCQkvKiBhbGxvdyBsYXN0IHJlc29ydCBkZWJ1ZyByZWFkIGV2ZW4gYWZ0ZXIgY3Jhc2ggKi8KKwkJaHBpX2luaXRfcmVzcG9uc2UocGhyLCBwaG0tPm9iamVjdCwgcGhtLT5mdW5jdGlvbiwKKwkJCUhQSV9FUlJPUl9EU1BfSEFSRFdBUkUpOworCQlIUElfREVCVUdfTE9HKFdBUk5JTkcsICIgJWQsJWQgZHNwIGNyYXNoZWQuXG4iLCBwaG0tPm9iamVjdCwKKwkJCXBobS0+ZnVuY3Rpb24pOworCQlyZXR1cm47CiAJfQogCiAJLyogSW5pdCBkZWZhdWx0IHJlc3BvbnNlICAqLwpAQCAtNDEyLDcgKzM5NSw3IEBACiAJY2FzZSBIUElfVFlQRV9NRVNTQUdFOgogCQlzd2l0Y2ggKHBobS0+b2JqZWN0KSB7CiAJCWNhc2UgSFBJX09CSl9TVUJTWVNURU06Ci0JCQlzdWJzeXNfbWVzc2FnZShwaG0sIHBocik7CisJCQlzdWJzeXNfbWVzc2FnZShwYW8sIHBobSwgcGhyKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgSFBJX09CSl9BREFQVEVSOgpAQCAtNDQ0LDYgKzQyNywyNiBAQAogCX0KIH0KIAordm9pZCBIUElfNjIwNShzdHJ1Y3QgaHBpX21lc3NhZ2UgKnBobSwgc3RydWN0IGhwaV9yZXNwb25zZSAqcGhyKQoreworCXN0cnVjdCBocGlfYWRhcHRlcl9vYmogKnBhbyA9IE5VTEw7CisKKwlpZiAocGhtLT5vYmplY3QgIT0gSFBJX09CSl9TVUJTWVNURU0pIHsKKwkJLyogbm9ybWFsIG1lc3NhZ2VzIG11c3QgaGF2ZSB2YWxpZCBhZGFwdGVyIGluZGV4ICovCisJCXBhbyA9IGhwaV9maW5kX2FkYXB0ZXIocGhtLT5hZGFwdGVyX2luZGV4KTsKKwl9IGVsc2UgeworCQkvKiBzdWJzeXMgbWVzc2FnZXMgZG9uJ3QgYWRkcmVzcyBhbiBhZGFwdGVyICovCisJCV9IUElfNjIwNShOVUxMLCBwaG0sIHBocik7CisJCXJldHVybjsKKwl9CisKKwlpZiAocGFvKQorCQlfSFBJXzYyMDUocGFvLCBwaG0sIHBocik7CisJZWxzZQorCQlocGlfaW5pdF9yZXNwb25zZShwaHIsIHBobS0+b2JqZWN0LCBwaG0tPmZ1bmN0aW9uLAorCQkJSFBJX0VSUk9SX0JBRF9BREFQVEVSX05VTUJFUik7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIFNVQlNZU1RFTSAqLwogCkBAIC00OTEsMTMgKzQ5NCwxMSBAQAogfQogCiAvKiogZGVsZXRlIGFuIGFkYXB0ZXIgLSByZXF1aXJlZCBieSBXRE0gZHJpdmVyICovCi1zdGF0aWMgdm9pZCBzdWJzeXNfZGVsZXRlX2FkYXB0ZXIoc3RydWN0IGhwaV9tZXNzYWdlICpwaG0sCi0Jc3RydWN0IGhwaV9yZXNwb25zZSAqcGhyKQorc3RhdGljIHZvaWQgYWRhcHRlcl9kZWxldGUoc3RydWN0IGhwaV9hZGFwdGVyX29iaiAqcGFvLAorCXN0cnVjdCBocGlfbWVzc2FnZSAqcGhtLCBzdHJ1Y3QgaHBpX3Jlc3BvbnNlICpwaHIpCiB7Ci0Jc3RydWN0IGhwaV9hZGFwdGVyX29iaiAqcGFvOwogCXN0cnVjdCBocGlfaHdfb2JqICpwaHc7CiAKLQlwYW8gPSBocGlfZmluZF9hZGFwdGVyKHBobS0+b2JqX2luZGV4KTsKIAlpZiAoIXBhbykgewogCQlwaHItPmVycm9yID0gSFBJX0VSUk9SX0lOVkFMSURfT0JKX0lOREVYOwogCQlyZXR1cm47CkBAIC01NjMsMTEgKzU2NCwxMiBAQAogCX0KIAogCWVyciA9IGFkYXB0ZXJfYm9vdF9sb2FkX2RzcChwYW8sIHBvc19lcnJvcl9jb2RlKTsKLQlpZiAoZXJyKQorCWlmIChlcnIpIHsKKwkJSFBJX0RFQlVHX0xPRyhFUlJPUiwgIkRTUCBjb2RlIGxvYWQgZmFpbGVkXG4iKTsKIAkJLyogbm8gbmVlZCB0byBjbGVhbiB1cCBhcyBTdWJTeXNDcmVhdGVBZGFwdGVyICovCiAJCS8qIGNhbGxzIERlbGV0ZUFkYXB0ZXIgb24gZXJyb3IuICovCiAJCXJldHVybiBlcnI7Ci0KKwl9CiAJSFBJX0RFQlVHX0xPRyhJTkZPLCAibG9hZCBEU1AgY29kZSBPS1xuIik7CiAKIAkvKiBhbGxvdyBib290IGxvYWQgZXZlbiBpZiBtZW0gYWxsb2Mgd29udCB3b3JrICovCkBAIC02MDQsNiArNjA2LDcgQEAKIAkJCQljb250cm9sX2NhY2hlLm51bWJlcl9vZl9jb250cm9scywKIAkJCQlpbnRlcmZhY2UtPmNvbnRyb2xfY2FjaGUuc2l6ZV9pbl9ieXRlcywKIAkJCQlwX2NvbnRyb2xfY2FjaGVfdmlydHVhbCk7CisKIAkJCWlmICghcGh3LT5wX2NhY2hlKQogCQkJCWVyciA9IEhQSV9FUlJPUl9NRU1PUllfQUxMT0M7CiAJCX0KQEAgLTY3NSwxNiArNjc4LDE0IEBACiB9CiAKIC8qKiBGcmVlIG1lbW9yeSBhcmVhcyBhbGxvY2F0ZWQgYnkgYWRhcHRlcgotICogdGhpcyByb3V0aW5lIGlzIGNhbGxlZCBmcm9tIFN1YlN5c0RlbGV0ZUFkYXB0ZXIsCisgKiB0aGlzIHJvdXRpbmUgaXMgY2FsbGVkIGZyb20gQWRhcHRlckRlbGV0ZSwKICAgKiBhbmQgU3ViU3lzQ3JlYXRlQWRhcHRlciBpZiBkdXBsaWNhdGUgaW5kZXgKICovCiBzdGF0aWMgdm9pZCBkZWxldGVfYWRhcHRlcl9vYmooc3RydWN0IGhwaV9hZGFwdGVyX29iaiAqcGFvKQogewotCXN0cnVjdCBocGlfaHdfb2JqICpwaHc7CisJc3RydWN0IGhwaV9od19vYmogKnBodyA9IHBhby0+cHJpdjsKIAlpbnQgaTsKIAotCXBodyA9IHBhby0+cHJpdjsKLQogCWlmIChocGlvc19sb2NrZWRfbWVtX3ZhbGlkKCZwaHctPmhfY29udHJvbF9jYWNoZSkpIHsKIAkJaHBpb3NfbG9ja2VkX21lbV9mcmVlKCZwaHctPmhfY29udHJvbF9jYWNoZSk7CiAJCWhwaV9mcmVlX2NvbnRyb2xfY2FjaGUocGh3LT5wX2NhY2hlKTsKQEAgLTEyNzUsNiArMTI3Niw3IEBACiAJY2FzZSBIUElfQURBUFRFUl9GQU1JTFlfQVNJKDB4NjMwMCk6CiAJCWJvb3RfY29kZV9pZFsxXSA9IEhQSV9BREFQVEVSX0ZBTUlMWV9BU0koMHg2NDAwKTsKIAkJYnJlYWs7CisJY2FzZSBIUElfQURBUFRFUl9GQU1JTFlfQVNJKDB4NTUwMCk6CiAJY2FzZSBIUElfQURBUFRFUl9GQU1JTFlfQVNJKDB4NTYwMCk6CiAJY2FzZSBIUElfQURBUFRFUl9GQU1JTFlfQVNJKDB4NjUwMCk6CiAJCWJvb3RfY29kZV9pZFsxXSA9IEhQSV9BREFQVEVSX0ZBTUlMWV9BU0koMHg2NjAwKTsKQEAgLTIwNTksNyArMjA2MSw2IEBACiBzdGF0aWMgdm9pZCBzZW5kX2RzcF9jb21tYW5kKHN0cnVjdCBocGlfaHdfb2JqICpwaHcsIGludCBjbWQpCiB7CiAJc3RydWN0IGJ1c19tYXN0ZXJfaW50ZXJmYWNlICppbnRlcmZhY2UgPSBwaHctPnBfaW50ZXJmYWNlX2J1ZmZlcjsKLQogCXUzMiByOwogCiAJaW50ZXJmYWNlLT5ob3N0X2NtZCA9IGNtZDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hc2locGkvaHBpX2ludGVybmFsLmggYi9zb3VuZC9wY2kvYXNpaHBpL2hwaV9pbnRlcm5hbC5oCmluZGV4IDNiOWZkMTEuLmJmNWVjZWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hc2locGkvaHBpX2ludGVybmFsLmgKKysrIGIvc291bmQvcGNpL2FzaWhwaS9ocGlfaW50ZXJuYWwuaApAQCAtMjk0LDcgKzI5NCw3IEBACiAKIC8qIFRoZXNlIGRlZmluZXMgYXJlIHVzZWQgdG8gZmlsbCBpbiBwcm90b2NvbCBpbmZvcm1hdGlvbiBmb3IgYW4gRXRoZXJuZXQgcGFja2V0CiAgICAgc2VudCB1c2luZyBITUkgb24gQ1MxODEwMiAqLwotLyoqIElEIHN1cHBsaWVkIGJ5IENpcnJpdXMgZm9yIEFTSSBwYWNrZXRzLiAqLworLyoqIElEIHN1cHBsaWVkIGJ5IENpcnJ1cyBmb3IgQVNJIHBhY2tldHMuICovCiAjZGVmaW5lIEhQSV9FVEhFUk5FVF9QQUNLRVRfSUQgICAgICAgICAgICAgICAgICAweDg1CiAvKiogU2ltcGxlIHBhY2tldCAtIG5vIHNwZWNpYWwgcm91dGluZyByZXF1aXJlZCAqLwogI2RlZmluZSBIUElfRVRIRVJORVRfUEFDS0VUX1YxICAgICAgICAgICAgICAgICAgMHgwMQpAQCAtMzA3LDcgKzMwNyw3IEBACiAvKiogVGhpcyBwYWNrZXQgbXVzdCBtYWtlIGl0cyB3YXkgdG8gdGhlIGhvc3QgYWNyb3NzIHRoZSBIUEkgaW50ZXJmYWNlICovCiAjZGVmaW5lIEhQSV9FVEhFUk5FVF9QQUNLRVRfSE9TVEVEX1ZJQV9IUElfVjEgICAweDQxCiAKLSNkZWZpbmUgSFBJX0VUSEVSTkVUX1VEUF9QT1JUICg0NDYwMCkJLyohPCBVRFAgbWVzc2FnaW5nIHBvcnQgKi8KKyNkZWZpbmUgSFBJX0VUSEVSTkVUX1VEUF9QT1JUIDQ0NjAwIC8qKjwgSFBJIFVEUCBzZXJ2aWNlICovCiAKIC8qKiBEZWZhdWx0IG5ldHdvcmsgdGltZW91dCBpbiBtaWxsaS1zZWNvbmRzLiAqLwogI2RlZmluZSBIUElfRVRIRVJORVRfVElNRU9VVF9NUyA1MDAKQEAgLTM5NywxNCArMzk3LDE0IEBACiAJSFBJX1NVQlNZU19PUEVOID0gSFBJX0ZVTkNfSUQoU1VCU1lTVEVNLCAxKSwKIAlIUElfU1VCU1lTX0dFVF9WRVJTSU9OID0gSFBJX0ZVTkNfSUQoU1VCU1lTVEVNLCAyKSwKIAlIUElfU1VCU1lTX0dFVF9JTkZPID0gSFBJX0ZVTkNfSUQoU1VCU1lTVEVNLCAzKSwKLQlIUElfU1VCU1lTX0ZJTkRfQURBUFRFUlMgPSBIUElfRlVOQ19JRChTVUJTWVNURU0sIDQpLAorCS8qIEhQSV9TVUJTWVNfRklORF9BREFQVEVSUyAgICAgPSBIUElfRlVOQ19JRChTVUJTWVNURU0sIDQpLCAqLwogCUhQSV9TVUJTWVNfQ1JFQVRFX0FEQVBURVIgPSBIUElfRlVOQ19JRChTVUJTWVNURU0sIDUpLAogCUhQSV9TVUJTWVNfQ0xPU0UgPSBIUElfRlVOQ19JRChTVUJTWVNURU0sIDYpLAotCUhQSV9TVUJTWVNfREVMRVRFX0FEQVBURVIgPSBIUElfRlVOQ19JRChTVUJTWVNURU0sIDcpLAorCS8qIEhQSV9TVUJTWVNfREVMRVRFX0FEQVBURVIgICAgPSBIUElfRlVOQ19JRChTVUJTWVNURU0sIDcpLCAqLwogCUhQSV9TVUJTWVNfRFJJVkVSX0xPQUQgPSBIUElfRlVOQ19JRChTVUJTWVNURU0sIDgpLAogCUhQSV9TVUJTWVNfRFJJVkVSX1VOTE9BRCA9IEhQSV9GVU5DX0lEKFNVQlNZU1RFTSwgOSksCi0JSFBJX1NVQlNZU19SRUFEX1BPUlRfOCA9IEhQSV9GVU5DX0lEKFNVQlNZU1RFTSwgMTApLAotCUhQSV9TVUJTWVNfV1JJVEVfUE9SVF84ID0gSFBJX0ZVTkNfSUQoU1VCU1lTVEVNLCAxMSksCisJLyogSFBJX1NVQlNZU19SRUFEX1BPUlRfOCAgICAgICAgICAgICAgID0gSFBJX0ZVTkNfSUQoU1VCU1lTVEVNLCAxMCksICovCisJLyogSFBJX1NVQlNZU19XUklURV9QT1JUXzggICAgICAgICAgICAgID0gSFBJX0ZVTkNfSUQoU1VCU1lTVEVNLCAxMSksICovCiAJSFBJX1NVQlNZU19HRVRfTlVNX0FEQVBURVJTID0gSFBJX0ZVTkNfSUQoU1VCU1lTVEVNLCAxMiksCiAJSFBJX1NVQlNZU19HRVRfQURBUFRFUiA9IEhQSV9GVU5DX0lEKFNVQlNZU1RFTSwgMTMpLAogCUhQSV9TVUJTWVNfU0VUX05FVFdPUktfSU5URVJGQUNFID0gSFBJX0ZVTkNfSUQoU1VCU1lTVEVNLCAxNCksCkBAIC00MzMsNyArNDMzLDggQEAKIAlIUElfQURBUFRFUl9ERUJVR19SRUFEID0gSFBJX0ZVTkNfSUQoQURBUFRFUiwgMTgpLAogCUhQSV9BREFQVEVSX0lSUV9RVUVSWV9BTkRfQ0xFQVIgPSBIUElfRlVOQ19JRChBREFQVEVSLCAxOSksCiAJSFBJX0FEQVBURVJfSVJRX0NBTExCQUNLID0gSFBJX0ZVTkNfSUQoQURBUFRFUiwgMjApLAotI2RlZmluZSBIUElfQURBUFRFUl9GVU5DVElPTl9DT1VOVCAyMAorCUhQSV9BREFQVEVSX0RFTEVURSA9IEhQSV9GVU5DX0lEKEFEQVBURVIsIDIxKSwKKyNkZWZpbmUgSFBJX0FEQVBURVJfRlVOQ1RJT05fQ09VTlQgMjEKIAogCUhQSV9PU1RSRUFNX09QRU4gPSBIUElfRlVOQ19JRChPU1RSRUFNLCAxKSwKIAlIUElfT1NUUkVBTV9DTE9TRSA9IEhQSV9GVU5DX0lEKE9TVFJFQU0sIDIpLApAQCAtMTU2MSw4ICsxNTYyLDYgQEAKIHUxNiBocGlfc3Vic3lzX2NyZWF0ZV9hZGFwdGVyKGNvbnN0IHN0cnVjdCBocGlfcmVzb3VyY2UgKnBfcmVzb3VyY2UsCiAJdTE2ICpwd19hZGFwdGVyX2luZGV4KTsKIAotdTE2IGhwaV9zdWJzeXNfZGVsZXRlX2FkYXB0ZXIodTE2IGFkYXB0ZXJfaW5kZXgpOwotCiB1MTYgaHBpX291dHN0cmVhbV9ob3N0X2J1ZmZlcl9nZXRfaW5mbyh1MzIgaF9vdXRzdHJlYW0sIHU4ICoqcHBfYnVmZmVyLAogCXN0cnVjdCBocGlfaG9zdGJ1ZmZlcl9zdGF0dXMgKipwcF9zdGF0dXMpOwogCkBAIC0xNTg0LDkgKzE1ODMsNyBAQAogCiAvKi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vICovCiAvKiBkZWNsYXJhdGlvbnMgZm9yIGluZGl2aWR1YWwgSFBJIGVudHJ5IHBvaW50cyAqLwotaHBpX2hhbmRsZXJfZnVuYyBIUElfMTAwMDsKIGhwaV9oYW5kbGVyX2Z1bmMgSFBJXzYwMDA7CiBocGlfaGFuZGxlcl9mdW5jIEhQSV82MjA1OwotaHBpX2hhbmRsZXJfZnVuYyBIUElfQ09NTU9OOwogCiAjZW5kaWYJCQkJLyogX0hQSV9JTlRFUk5BTF9IXyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FzaWhwaS9ocGljbW4uYyBiL3NvdW5kL3BjaS9hc2locGkvaHBpY21uLmMKaW5kZXggM2U5YzVjMi4uYjE1YTAyZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FzaWhwaS9ocGljbW4uYworKysgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaWNtbi5jCkBAIC0yMjcsOCArMjI3LDkgQEAKIAkJCWlmIChpbmZvLT5jb250cm9sX3R5cGUpIHsKIAkJCQlwQy0+cF9pbmZvW2luZm8tPmNvbnRyb2xfaW5kZXhdID0gaW5mbzsKIAkJCQljYWNoZWQrKzsKLQkJCX0gZWxzZQkvKiBkdW1teSBjYWNoZSBlbnRyeSAqLworCQkJfSBlbHNlIHsJLyogZHVtbXkgY2FjaGUgZW50cnkgKi8KIAkJCQlwQy0+cF9pbmZvW2luZm8tPmNvbnRyb2xfaW5kZXhdID0gTlVMTDsKKwkJCX0KIAogCQkJYnl0ZV9jb3VudCArPSBpbmZvLT5zaXplX2luMzJiaXRfd29yZHMgKiA0OwogCkBAIC0yOTgsNyArMjk5LDcgQEAKIAl1bnNpZ25lZCBpbnQgZmllbGRfc2l6ZTsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGFkX29mc19zaXplIHBhZF9kZXNjW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBhZF9vZnNfc2l6ZSBwYWRfZGVzY1tdID0gewogCUhQSUNNTl9QQURfT0ZTX0FORF9TSVpFKGNfY2hhbm5lbCksCS8qIEhQSV9QQURfQ0hBTk5FTF9OQU1FICovCiAJSFBJQ01OX1BBRF9PRlNfQU5EX1NJWkUoY19hcnRpc3QpLAkvKiBIUElfUEFEX0FSVElTVCAqLwogCUhQSUNNTl9QQURfT0ZTX0FORF9TSVpFKGNfdGl0bGUpLAkvKiBIUElfUEFEX1RJVExFICovCkBAIC02MTcsNiArNjE4LDEwIEBACiAJfQogfQogCisvKiogQWxsb2NhdGUgY29udHJvbCBjYWNoZS4KKworXHJldHVybiBDYWNoZSBwb2ludGVyLCBvciBOVUxMIGlmIGFsbG9jYXRpb24gZmFpbHMuCisqLwogc3RydWN0IGhwaV9jb250cm9sX2NhY2hlICpocGlfYWxsb2NfY29udHJvbF9jYWNoZShjb25zdCB1MzIgY29udHJvbF9jb3VudCwKIAljb25zdCB1MzIgc2l6ZV9pbl9ieXRlcywgdTggKnBfZHNwX2NvbnRyb2xfYnVmZmVyKQogewpAQCAtNjY3LDcgKzY3Miw2IEBACiAJCXBoci0+dS5zLm51bV9hZGFwdGVycyA9IGFkYXB0ZXJzLmd3X251bV9hZGFwdGVyczsKIAkJYnJlYWs7CiAJY2FzZSBIUElfU1VCU1lTX0NSRUFURV9BREFQVEVSOgotCWNhc2UgSFBJX1NVQlNZU19ERUxFVEVfQURBUFRFUjoKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcGhyLT5lcnJvciA9IEhQSV9FUlJPUl9JTlZBTElEX0ZVTkM7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXNpaHBpL2hwaWNtbi5oIGIvc291bmQvcGNpL2FzaWhwaS9ocGljbW4uaAppbmRleCA1OTBmMGI2Li5kNTNjZGY2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXNpaHBpL2hwaWNtbi5oCisrKyBiL3NvdW5kL3BjaS9hc2locGkvaHBpY21uLmgKQEAgLTYwLDMgKzYwLDUgQEAKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgKnBobSwgc3RydWN0IGhwaV9yZXNwb25zZSAqcGhyKTsKIAogdTE2IGhwaV92YWxpZGF0ZV9yZXNwb25zZShzdHJ1Y3QgaHBpX21lc3NhZ2UgKnBobSwgc3RydWN0IGhwaV9yZXNwb25zZSAqcGhyKTsKKworaHBpX2hhbmRsZXJfZnVuYyBIUElfQ09NTU9OOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FzaWhwaS9ocGlmdW5jLmMgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaWZ1bmMuYwppbmRleCBjMzhmYzk0Li43Mzk3YjE2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXNpaHBpL2hwaWZ1bmMuYworKysgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaWZ1bmMuYwpAQCAtMTA1LDMzICsxMDUsNiBAQAogCXJldHVybiBoci5lcnJvcjsKIH0KIAotdTE2IGhwaV9zdWJzeXNfY3JlYXRlX2FkYXB0ZXIoY29uc3Qgc3RydWN0IGhwaV9yZXNvdXJjZSAqcF9yZXNvdXJjZSwKLQl1MTYgKnB3X2FkYXB0ZXJfaW5kZXgpCi17Ci0Jc3RydWN0IGhwaV9tZXNzYWdlIGhtOwotCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7Ci0KLQlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX1NVQlNZU1RFTSwKLQkJSFBJX1NVQlNZU19DUkVBVEVfQURBUFRFUik7Ci0JaG0udS5zLnJlc291cmNlID0gKnBfcmVzb3VyY2U7Ci0KLQlocGlfc2VuZF9yZWN2KCZobSwgJmhyKTsKLQotCSpwd19hZGFwdGVyX2luZGV4ID0gaHIudS5zLmFkYXB0ZXJfaW5kZXg7Ci0JcmV0dXJuIGhyLmVycm9yOwotfQotCi11MTYgaHBpX3N1YnN5c19kZWxldGVfYWRhcHRlcih1MTYgYWRhcHRlcl9pbmRleCkKLXsKLQlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07Ci0Jc3RydWN0IGhwaV9yZXNwb25zZSBocjsKLQlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX1NVQlNZU1RFTSwKLQkJSFBJX1NVQlNZU19ERUxFVEVfQURBUFRFUik7Ci0JaG0ub2JqX2luZGV4ID0gYWRhcHRlcl9pbmRleDsKLQlocGlfc2VuZF9yZWN2KCZobSwgJmhyKTsKLQlyZXR1cm4gaHIuZXJyb3I7Ci19Ci0KIHUxNiBocGlfc3Vic3lzX2dldF9udW1fYWRhcHRlcnMoaW50ICpwbl9udW1fYWRhcHRlcnMpCiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FzaWhwaS9ocGltc2d4LmMgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaW1zZ3guYwppbmRleCAzNjAwMjhiLi43MzUyYTVmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXNpaHBpL2hwaW1zZ3guYworKysgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaW1zZ3guYwpAQCAtMjExLDI0ICsyMTEsNiBAQAogCQlIUElNU0dYX19pbml0KHBobSwgcGhyKTsKIAkJYnJlYWs7CiAKLQljYXNlIEhQSV9TVUJTWVNfREVMRVRFX0FEQVBURVI6Ci0JCUhQSU1TR1hfX2NsZWFudXAocGhtLT5vYmpfaW5kZXgsIGhfb3duZXIpOwotCQl7Ci0JCQlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07Ci0JCQlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOwotCQkJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9BREFQVEVSLAotCQkJCUhQSV9BREFQVEVSX0NMT1NFKTsKLQkJCWhtLmFkYXB0ZXJfaW5kZXggPSBwaG0tPm9ial9pbmRleDsKLQkJCWh3X2VudHJ5X3BvaW50KCZobSwgJmhyKTsKLQkJfQotCQlpZiAoKHBobS0+b2JqX2luZGV4IDwgSFBJX01BWF9BREFQVEVSUykKLQkJCSYmIGhwaV9lbnRyeV9wb2ludHNbcGhtLT5vYmpfaW5kZXhdKSB7Ci0JCQlocGlfZW50cnlfcG9pbnRzW3BobS0+b2JqX2luZGV4XSAocGhtLCBwaHIpOwotCQkJaHBpX2VudHJ5X3BvaW50c1twaG0tPm9ial9pbmRleF0gPSBOVUxMOwotCQl9IGVsc2UKLQkJCXBoci0+ZXJyb3IgPSBIUElfRVJST1JfSU5WQUxJRF9PQkpfSU5ERVg7Ci0KLQkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyogTXVzdCBleHBsaWNpdGx5IGhhbmRsZSBldmVyeSBzdWJzeXMgbWVzc2FnZSBpbiB0aGlzIHN3aXRjaCAqLwogCQlocGlfaW5pdF9yZXNwb25zZShwaHIsIEhQSV9PQkpfU1VCU1lTVEVNLCBwaG0tPmZ1bmN0aW9uLApAQCAtMjQ3LDYgKzIyOSwxOSBAQAogCWNhc2UgSFBJX0FEQVBURVJfQ0xPU0U6CiAJCWFkYXB0ZXJfY2xvc2UocGhtLCBwaHIpOwogCQlicmVhazsKKwljYXNlIEhQSV9BREFQVEVSX0RFTEVURToKKwkJSFBJTVNHWF9fY2xlYW51cChwaG0tPmFkYXB0ZXJfaW5kZXgsIGhfb3duZXIpOworCQl7CisJCQlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CisJCQlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOworCQkJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9BREFQVEVSLAorCQkJCUhQSV9BREFQVEVSX0NMT1NFKTsKKwkJCWhtLmFkYXB0ZXJfaW5kZXggPSBwaG0tPmFkYXB0ZXJfaW5kZXg7CisJCQlod19lbnRyeV9wb2ludCgmaG0sICZocik7CisJCX0KKwkJaHdfZW50cnlfcG9pbnQocGhtLCBwaHIpOworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCWh3X2VudHJ5X3BvaW50KHBobSwgcGhyKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXNpaHBpL2hwaW9jdGwuYyBiL3NvdW5kL3BjaS9hc2locGkvaHBpb2N0bC5jCmluZGV4IGNkNjI0ZjEuLmQ4ZTcwNDcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hc2locGkvaHBpb2N0bC5jCisrKyBiL3NvdW5kL3BjaS9hc2locGkvaHBpb2N0bC5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiaHBpZGVidWcuaCIKICNpbmNsdWRlICJocGltc2d4LmgiCiAjaW5jbHVkZSAiaHBpb2N0bC5oIgorI2luY2x1ZGUgImhwaWNtbi5oIgogCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC0xNjEsMjYgKzE2MiwyNCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlwYSA9ICZhZGFwdGVyc1tobS0+aC5hZGFwdGVyX2luZGV4XTsKKwlzd2l0Y2ggKGhtLT5oLmZ1bmN0aW9uKSB7CisJY2FzZSBIUElfU1VCU1lTX0NSRUFURV9BREFQVEVSOgorCWNhc2UgSFBJX0FEQVBURVJfREVMRVRFOgorCQkvKiBBcHBsaWNhdGlvbiBtdXN0IG5vdCB1c2UgdGhlc2UgZnVuY3Rpb25zISAqLworCQloci0+aC5zaXplID0gc2l6ZW9mKGhyLT5oKTsKKwkJaHItPmguZXJyb3IgPSBIUElfRVJST1JfSU5WQUxJRF9PUEVSQVRJT047CisJCWhyLT5oLmZ1bmN0aW9uID0gaG0tPmguZnVuY3Rpb247CisJCXVuY29waWVkX2J5dGVzID0gY29weV90b191c2VyKHB1aHIsIGhyLCBoci0+aC5zaXplKTsKKwkJaWYgKHVuY29waWVkX2J5dGVzKQorCQkJZXJyID0gLUVGQVVMVDsKKwkJZWxzZQorCQkJZXJyID0gMDsKKwkJZ290byBvdXQ7CisJfQorCiAJaHItPmguc2l6ZSA9IHJlc19tYXhfc2l6ZTsKIAlpZiAoaG0tPmgub2JqZWN0ID09IEhQSV9PQkpfU1VCU1lTVEVNKSB7Ci0JCXN3aXRjaCAoaG0tPmguZnVuY3Rpb24pIHsKLQkJY2FzZSBIUElfU1VCU1lTX0NSRUFURV9BREFQVEVSOgotCQljYXNlIEhQSV9TVUJTWVNfREVMRVRFX0FEQVBURVI6Ci0JCQkvKiBBcHBsaWNhdGlvbiBtdXN0IG5vdCB1c2UgdGhlc2UgZnVuY3Rpb25zISAqLwotCQkJaHItPmguc2l6ZSA9IHNpemVvZihoci0+aCk7Ci0JCQloci0+aC5lcnJvciA9IEhQSV9FUlJPUl9JTlZBTElEX09QRVJBVElPTjsKLQkJCWhyLT5oLmZ1bmN0aW9uID0gaG0tPmguZnVuY3Rpb247Ci0JCQl1bmNvcGllZF9ieXRlcyA9IGNvcHlfdG9fdXNlcihwdWhyLCBociwgaHItPmguc2l6ZSk7Ci0JCQlpZiAodW5jb3BpZWRfYnl0ZXMpCi0JCQkJZXJyID0gLUVGQVVMVDsKLQkJCWVsc2UKLQkJCQllcnIgPSAwOwotCQkJZ290byBvdXQ7Ci0KLQkJZGVmYXVsdDoKLQkJCWhwaV9zZW5kX3JlY3ZfZigmaG0tPm0wLCAmaHItPnIwLCBmaWxlKTsKLQkJfQorCQlocGlfc2VuZF9yZWN2X2YoJmhtLT5tMCwgJmhyLT5yMCwgZmlsZSk7CiAJfSBlbHNlIHsKIAkJdTE2IF9fdXNlciAqcHRyID0gTlVMTDsKIAkJdTMyIHNpemUgPSAwOwpAQCAtMTg4LDggKzE4Nyw5IEBACiAJCS8qIC0xPW5vIGRhdGEgMD1yZWFkIGZyb20gdXNlciBtZW0sIDE9d3JpdGUgdG8gdXNlciBtZW0gKi8KIAkJaW50IHdyZmxhZyA9IC0xOwogCQl1MzIgYWRhcHRlciA9IGhtLT5oLmFkYXB0ZXJfaW5kZXg7CisJCXBhID0gJmFkYXB0ZXJzW2FkYXB0ZXJdOwogCi0JCWlmICgoaG0tPmguYWRhcHRlcl9pbmRleCA+IEhQSV9NQVhfQURBUFRFUlMpIHx8ICghcGEtPnR5cGUpKSB7CisJCWlmICgoYWRhcHRlciA+IEhQSV9NQVhfQURBUFRFUlMpIHx8ICghcGEtPnR5cGUpKSB7CiAJCQlocGlfaW5pdF9yZXNwb25zZSgmaHItPnIwLCBIUElfT0JKX0FEQVBURVIsCiAJCQkJSFBJX0FEQVBURVJfT1BFTiwKIAkJCQlIUElfRVJST1JfQkFEX0FEQVBURVJfTlVNQkVSKTsKQEAgLTMxNyw3ICszMTcsNyBAQAogaW50IF9fZGV2aW5pdCBhc2locGlfYWRhcHRlcl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwKIAljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2lkKQogewotCWludCBlcnIsIGlkeCwgbm07CisJaW50IGlkeCwgbm07CiAJdW5zaWduZWQgaW50IG1lbWxlbjsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKQEAgLTM1MSwxMSArMzUxLDggQEAKIAlubSA9IEhQSV9NQVhfQURBUFRFUl9NRU1fU1BBQ0VTOwogCiAJZm9yIChpZHggPSAwOyBpZHggPCBubTsgaWR4KyspIHsKLQkJSFBJX0RFQlVHX0xPRyhJTkZPLCAicmVzb3VyY2UgJWQgJXMgJTA4bGx4LSUwOGxseCAlMDRsbHhcbiIsCi0JCQlpZHgsIHBjaV9kZXYtPnJlc291cmNlW2lkeF0ubmFtZSwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KHBjaV9kZXYsIGlkeCksCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9lbmQocGNpX2RldiwgaWR4KSwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX2ZsYWdzKHBjaV9kZXYsIGlkeCkpOworCQlIUElfREVCVUdfTE9HKElORk8sICJyZXNvdXJjZSAlZCAlcFJcbiIsIGlkeCwKKwkJCSZwY2lfZGV2LT5yZXNvdXJjZVtpZHhdKTsKIAogCQlpZiAocGNpX3Jlc291cmNlX2ZsYWdzKHBjaV9kZXYsIGlkeCkgJiBJT1JFU09VUkNFX01FTSkgewogCQkJbWVtbGVuID0gcGNpX3Jlc291cmNlX2xlbihwY2lfZGV2LCBpZHgpOwpAQCAtMzk1LDE3ICszOTIsMjAgQEAKIAogCWFkYXB0ZXIuaW5kZXggPSBoci51LnMuYWRhcHRlcl9pbmRleDsKIAlhZGFwdGVyLnR5cGUgPSBoci51LnMuYWRhcHRlcl90eXBlOwotCWhtLmFkYXB0ZXJfaW5kZXggPSBhZGFwdGVyLmluZGV4OwogCi0JZXJyID0gaHBpX2FkYXB0ZXJfb3BlbihhZGFwdGVyLmluZGV4KTsKLQlpZiAoZXJyKQorCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfQURBUFRFUiwKKwkJSFBJX0FEQVBURVJfT1BFTik7CisJaG0uYWRhcHRlcl9pbmRleCA9IGFkYXB0ZXIuaW5kZXg7CisJaHBpX3NlbmRfcmVjdl9leCgmaG0sICZociwgSE9XTkVSX0tFUk5FTCk7CisKKwlpZiAoaHIuZXJyb3IpCiAJCWdvdG8gZXJyOwogCiAJYWRhcHRlci5zbmRfY2FyZF9hc2locGkgPSBOVUxMOwogCS8qIFdBUk5JTkcgY2FuJ3QgaW5pdCBtdXRleCBpbiAnYWRhcHRlcicKIAkgKiBhbmQgdGhlbiBjb3B5IGl0IHRvIGFkYXB0ZXJzW10gPyE/IQogCSAqLwotCWFkYXB0ZXJzW2hyLnUucy5hZGFwdGVyX2luZGV4XSA9IGFkYXB0ZXI7CisJYWRhcHRlcnNbYWRhcHRlci5pbmRleF0gPSBhZGFwdGVyOwogCW11dGV4X2luaXQoJmFkYXB0ZXJzW2FkYXB0ZXIuaW5kZXhdLm11dGV4KTsKIAlwY2lfc2V0X2RydmRhdGEocGNpX2RldiwgJmFkYXB0ZXJzW2FkYXB0ZXIuaW5kZXhdKTsKIApAQCAtNDQwLDEwICs0NDAsOSBAQAogCXN0cnVjdCBocGlfYWRhcHRlciAqcGE7CiAJcGEgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CiAKLQlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX1NVQlNZU1RFTSwKLQkJSFBJX1NVQlNZU19ERUxFVEVfQURBUFRFUik7Ci0JaG0ub2JqX2luZGV4ID0gcGEtPmluZGV4OwotCWhtLmFkYXB0ZXJfaW5kZXggPSBIUElfQURBUFRFUl9JTkRFWF9JTlZBTElEOworCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfQURBUFRFUiwKKwkJSFBJX0FEQVBURVJfREVMRVRFKTsKKwlobS5hZGFwdGVyX2luZGV4ID0gcGEtPmluZGV4OwogCWhwaV9zZW5kX3JlY3ZfZXgoJmhtLCAmaHIsIEhPV05FUl9LRVJORUwpOwogCiAJLyogdW5tYXAgUENJIG1lbW9yeSBzcGFjZSwgbWFwcGVkIGR1cmluZyBkZXZpY2UgaW5pdC4gKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODEwLmggYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODgxMC5oCmluZGV4IDVkNjljMzEuLjc5ZmJlZTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODEwLmgKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4MTAuaApAQCAtNCw3ICs0LDcgQEAKIAogI2RlZmluZSBDSElQX0FVODgxMAogCi0jZGVmaW5lIENBUkRfTkFNRSAiQXVyZWFsIEFkdmFudGFnZSAzRCBTb3VuZCBQcm9jZXNzb3IiCisjZGVmaW5lIENBUkRfTkFNRSAiQXVyZWFsIEFkdmFudGFnZSIKICNkZWZpbmUgQ0FSRF9OQU1FX1NIT1JUICJhdTg4MTAiCiAKICNkZWZpbmUgTlJfQURCCQkweDEwCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODgyMC5oIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4MjAuaAppbmRleCBhYmJlODVlLi5jYWZkYjk2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODgyMC5oCisrKyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODIwLmgKQEAgLTExLDcgKzExLDcgQEAKIAogI2RlZmluZSBDSElQX0FVODgyMAogCi0jZGVmaW5lIENBUkRfTkFNRSAiQXVyZWFsIFZvcnRleCAzRCBTb3VuZCBQcm9jZXNzb3IiCisjZGVmaW5lIENBUkRfTkFNRSAiQXVyZWFsIFZvcnRleCIKICNkZWZpbmUgQ0FSRF9OQU1FX1NIT1JUICJhdTg4MjAiCiAKIC8qIE51bWJlciBvZiBBREIgYW5kIFdUIGNoYW5uZWxzICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODgzMC5oIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4MzAuaAppbmRleCAwNGVjZTFiLi45OTliMjlhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODgzMC5oCisrKyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODMwLmgKQEAgLTExLDcgKzExLDcgQEAKIAogI2RlZmluZSBDSElQX0FVODgzMAogCi0jZGVmaW5lIENBUkRfTkFNRSAiQXVyZWFsIFZvcnRleCAyIDNEIFNvdW5kIFByb2Nlc3NvciIKKyNkZWZpbmUgQ0FSRF9OQU1FICJBdXJlYWwgVm9ydGV4IDIiCiAjZGVmaW5lIENBUkRfTkFNRV9TSE9SVCAiYXU4ODMwIgogCiAjZGVmaW5lIE5SX0FEQiAweDIwCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9wY20uYyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX3BjbS5jCmluZGV4IDYyZTk1OTEuLmM1ZjdhZTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX3BjbS5jCisrKyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX3BjbS5jCkBAIC00MjYsMTEgKzQyNiwxMSBAQAogKi8KIAogc3RhdGljIGNoYXIgKnZvcnRleF9wY21fcHJldHR5bmFtZVtWT1JURVhfUENNX0xBU1RdID0gewotCSJBVTg4eDAgQURCIiwKLQkiQVU4OHgwIFNQRElGIiwKLQkiQVU4OHgwIEEzRCIsCi0JIkFVODh4MCBXVCIsCi0JIkFVODh4MCBJMlMiLAorCUNBUkRfTkFNRSAiIEFEQiIsCisJQ0FSRF9OQU1FICIgU1BESUYiLAorCUNBUkRfTkFNRSAiIEEzRCIsCisJQ0FSRF9OQU1FICIgV1QiLAorCUNBUkRfTkFNRSAiIEkyUyIsCiB9Owogc3RhdGljIGNoYXIgKnZvcnRleF9wY21fbmFtZVtWT1JURVhfUENNX0xBU1RdID0gewogCSJhZGIiLApAQCAtNTI3LDcgKzUyNyw4IEBACiAJCQkgIG5yX2NhcHQsICZwY20pOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCXN0cmNweShwY20tPm5hbWUsIHZvcnRleF9wY21fbmFtZVtpZHhdKTsKKwlzbnByaW50ZihwY20tPm5hbWUsIHNpemVvZihwY20tPm5hbWUpLAorCQkiJXMgJXMiLCBDQVJEX05BTUVfU0hPUlQsIHZvcnRleF9wY21fbmFtZVtpZHhdKTsKIAljaGlwLT5wY21baWR4XSA9IHBjbTsKIAkvLyBUaGlzIGlzIGFuIGV2aWwgaGFjaywgYnV0IGl0IHNhdmVzIGEgbG90IG9mIGR1cGxpY2F0ZWQgY29kZS4KIAlWT1JURVhfUENNX1RZUEUocGNtKSA9IGlkeDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdWZ4LmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXVmeC5jCmluZGV4IDdhOTQwMTQuLmRhZTQwNTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdWZ4LmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvZW11ZnguYwpAQCAtMzAzLDYgKzMwMyw5IEBACiBzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoc25kX2VtdTEwazFfZGJfc2NhbGUxLCAtNDAwMCwgNDAsIDEpOwogc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX0xJTkVBUihzbmRfZW11MTBrMV9kYl9saW5lYXIsIFRMVl9EQl9HQUlOX01VVEUsIDApOwogCisvKiBFTVUxMEsxIGJhc3MvdHJlYmxlIGRiIGdhaW4gKi8KK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShzbmRfZW11MTBrMV9iYXNzX3RyZWJsZV9kYl9zY2FsZSwgLTEyMDAsIDYwLCAwKTsKKwogc3RhdGljIGNvbnN0IHUzMiBvbm9mZl90YWJsZVsyXSA9IHsKIAkweDAwMDAwMDAwLCAweDAwMDAwMDAxCiB9OwpAQCAtMjE2Myw2ICsyMTY2LDcgQEAKIAljdGwtPm1pbiA9IDA7CiAJY3RsLT5tYXggPSA0MDsKIAljdGwtPnZhbHVlWzBdID0gY3RsLT52YWx1ZVsxXSA9IDIwOworCWN0bC0+dGx2ID0gc25kX2VtdTEwazFfYmFzc190cmVibGVfZGJfc2NhbGU7CiAJY3RsLT50cmFuc2xhdGlvbiA9IEVNVTEwSzFfR1BSX1RSQU5TTEFUSU9OX0JBU1M7CiAJY3RsID0gJmNvbnRyb2xzW2kgKyAxXTsKIAljdGwtPmlkLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVI7CkBAIC0yMTcyLDYgKzIxNzYsNyBAQAogCWN0bC0+bWluID0gMDsKIAljdGwtPm1heCA9IDQwOwogCWN0bC0+dmFsdWVbMF0gPSBjdGwtPnZhbHVlWzFdID0gMjA7CisJY3RsLT50bHYgPSBzbmRfZW11MTBrMV9iYXNzX3RyZWJsZV9kYl9zY2FsZTsKIAljdGwtPnRyYW5zbGF0aW9uID0gRU1VMTBLMV9HUFJfVFJBTlNMQVRJT05fVFJFQkxFOwogCiAjZGVmaW5lIEJBU1NfR1BSCTB4OGMKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdW1peGVyLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXVtaXhlci5jCmluZGV4IDA1YWZlMDYuLjlkODkwYTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdW1peGVyLmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvZW11bWl4ZXIuYwpAQCAtMTcyOSw4ICsxNzI5LDYgQEAKIAkJIk1hc3RlciBNb25vIFBsYXliYWNrIFZvbHVtZSIsCiAJCSJQQ00gT3V0IFBhdGggJiBNdXRlIiwKIAkJIk1vbm8gT3V0cHV0IFNlbGVjdCIsCi0JCSJGcm9udCBQbGF5YmFjayBTd2l0Y2giLAotCQkiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwKIAkJIlN1cnJvdW5kIFBsYXliYWNrIFN3aXRjaCIsCiAJCSJTdXJyb3VuZCBQbGF5YmFjayBWb2x1bWUiLAogCQkiQ2VudGVyIFBsYXliYWNrIFN3aXRjaCIsCkBAIC0xODc5LDYgKzE4NzcsOCBAQAogCQkJCWVtdS0+cmVhcl9hYzk3ID0gMTsKIAkJCQlzbmRfZW11MTBrMV9wdHJfd3JpdGUoZW11LCBBQzk3U0xPVCwgMCwgQUM5N1NMT1RfQ05UUnxBQzk3U0xPVF9MRkV8QUM5N1NMT1RfUkVBUl9MRUZUfEFDOTdTTE9UX1JFQVJfUklHSFQpOwogCQkJCXNuZF9hYzk3X3dyaXRlX2NhY2hlKGVtdS0+YWM5NywgQUM5N19IRUFEUEhPTkUsIDB4MDIwMik7CisJCQkJcmVtb3ZlX2N0bChjYXJkLCJGcm9udCBQbGF5YmFjayBWb2x1bWUiKTsKKwkJCQlyZW1vdmVfY3RsKGNhcmQsIkZyb250IFBsYXliYWNrIFN3aXRjaCIpOwogCQkJfQogCQkJLyogcmVtb3ZlIHVudXNlZCBBQzk3IGNvbnRyb2xzICovCiAJCQlzbmRfYWM5N193cml0ZV9jYWNoZShlbXUtPmFjOTcsIEFDOTdfU1VSUk9VTkRfTUFTVEVSLCAweDAyMDIpOwpAQCAtMTkxMyw2ICsxOTEzLDEyIEBACiAJZm9yICg7ICpjOyBjICs9IDIpCiAJCXJlbmFtZV9jdGwoY2FyZCwgY1swXSwgY1sxXSk7CiAKKwlpZiAoZW11LT5jYXJkX2NhcGFiaWxpdGllcy0+c3Vic3lzdGVtID09IDB4ODA0MDExMDIpIHsgLyogU0IgTGl2ZSEgUGxhdGludW0gQ1Q0NzYwUCAqLworCQlyZW1vdmVfY3RsKGNhcmQsICJDZW50ZXIgUGxheWJhY2sgVm9sdW1lIik7CisJCXJlbW92ZV9jdGwoY2FyZCwgIkxGRSBQbGF5YmFjayBWb2x1bWUiKTsKKwkJcmVtb3ZlX2N0bChjYXJkLCAiV2F2ZSBDZW50ZXIgUGxheWJhY2sgVm9sdW1lIik7CisJCXJlbW92ZV9jdGwoY2FyZCwgIldhdmUgTEZFIFBsYXliYWNrIFZvbHVtZSIpOworCX0KIAlpZiAoZW11LT5jYXJkX2NhcGFiaWxpdGllcy0+c3Vic3lzdGVtID09IDB4MjAwNzExMDIpIHsgIC8qIEF1ZGlneSA0IFBybyAqLwogCQlyZW5hbWVfY3RsKGNhcmQsICJMaW5lMiBDYXB0dXJlIFZvbHVtZSIsICJMaW5lMS9NaWMgQ2FwdHVyZSBWb2x1bWUiKTsKIAkJcmVuYW1lX2N0bChjYXJkLCAiQW5hbG9nIE1peCBDYXB0dXJlIFZvbHVtZSIsICJMaW5lMiBDYXB0dXJlIFZvbHVtZSIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VzMTk2OC5jIGIvc291bmQvcGNpL2VzMTk2OC5jCmluZGV4IDdjMTdmNDUuLmFiMGE2MTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lczE5NjguYworKysgYi9zb3VuZC9wY2kvZXMxOTY4LmMKQEAgLTExMiw2ICsxMTIsMTAgQEAKICNpbmNsdWRlIDxzb3VuZC9hYzk3X2NvZGVjLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogCisjaWZkZWYgQ09ORklHX1NORF9FUzE5NjhfUkFESU8KKyNpbmNsdWRlIDxzb3VuZC90ZWE1NzV4LXR1bmVyLmg+CisjZW5kaWYKKwogI2RlZmluZSBDQVJEX05BTUUgIkVTUyBNYWVzdHJvMS8yIgogI2RlZmluZSBEUklWRVJfTkFNRSAiRVMxOTY4IgogCkBAIC01NTMsNiArNTU3LDEwIEBACiAJc3BpbmxvY2tfdCBhYzk3X2xvY2s7CiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IGh3dm9sX3RxOwogI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU05EX0VTMTk2OF9SQURJTworCXN0cnVjdCBzbmRfdGVhNTc1eCB0ZWE7CisjZW5kaWYKIH07CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBzbmRfZXMxOTY4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwpAQCAtMjU3MSw2ICsyNTc5LDYzIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1NORF9FUzE5NjhfSU5QVVQgKi8KIAorI2lmZGVmIENPTkZJR19TTkRfRVMxOTY4X1JBRElPCisjZGVmaW5lIEdQSU9fREFUQQkweDYwCisjZGVmaW5lIElPX01BU0sJCTQgICAgICAvKiBtYXNrICAgICAgcmVnaXN0ZXIgb2Zmc2V0IGZyb20gR1BJT19EQVRBCisJCQkJYml0cyAxPXVubWFzayB3cml0ZSB0byBnaXZlbiBiaXQgKi8KKyNkZWZpbmUgSU9fRElSCQk4ICAgICAgLyogZGlyZWN0aW9uIHJlZ2lzdGVyIG9mZnNldCBmcm9tIEdQSU9fREFUQQorCQkJCWJpdHMgMC8xPXJlYWQvd3JpdGUgZGlyZWN0aW9uICovCisvKiBtYXNrIGJpdHMgZm9yIEdQSU8gbGluZXMgKi8KKyNkZWZpbmUgU1RSX0RBVEEJMHgwMDQwIC8qIEdQSU82ICovCisjZGVmaW5lIFNUUl9DTEsJCTB4MDA4MCAvKiBHUElPNyAqLworI2RlZmluZSBTVFJfV1JFTgkweDAxMDAgLyogR1BJTzggKi8KKyNkZWZpbmUgU1RSX01PU1QJMHgwMjAwIC8qIEdQSU85ICovCisKK3N0YXRpYyB2b2lkIHNuZF9lczE5NjhfdGVhNTc1eF9zZXRfcGlucyhzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSwgdTggcGlucykKK3sKKwlzdHJ1Y3QgZXMxOTY4ICpjaGlwID0gdGVhLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyBpbyA9IGNoaXAtPmlvX3BvcnQgKyBHUElPX0RBVEE7CisJdTE2IHZhbCA9IDA7CisKKwl2YWwgfD0gKHBpbnMgJiBURUE1NzVYX0RBVEEpID8gU1RSX0RBVEEgOiAwOworCXZhbCB8PSAocGlucyAmIFRFQTU3NVhfQ0xLKSAgPyBTVFJfQ0xLICA6IDA7CisJdmFsIHw9IChwaW5zICYgVEVBNTc1WF9XUkVOKSA/IFNUUl9XUkVOIDogMDsKKworCW91dHcodmFsLCBpbyk7Cit9CisKK3N0YXRpYyB1OCBzbmRfZXMxOTY4X3RlYTU3NXhfZ2V0X3BpbnMoc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEpCit7CisJc3RydWN0IGVzMTk2OCAqY2hpcCA9IHRlYS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgaW8gPSBjaGlwLT5pb19wb3J0ICsgR1BJT19EQVRBOworCXUxNiB2YWwgPSBpbncoaW8pOworCisJcmV0dXJuICAodmFsICYgU1RSX0RBVEEpID8gVEVBNTc1WF9EQVRBIDogMCB8CisJCSh2YWwgJiBTVFJfTU9TVCkgPyBURUE1NzVYX01PU1QgOiAwOworfQorCitzdGF0aWMgdm9pZCBzbmRfZXMxOTY4X3RlYTU3NXhfc2V0X2RpcmVjdGlvbihzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSwgYm9vbCBvdXRwdXQpCit7CisJc3RydWN0IGVzMTk2OCAqY2hpcCA9IHRlYS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgaW8gPSBjaGlwLT5pb19wb3J0ICsgR1BJT19EQVRBOworCXUxNiBvZGlyID0gaW53KGlvICsgSU9fRElSKTsKKworCWlmIChvdXRwdXQpIHsKKwkJb3V0dyh+KFNUUl9EQVRBIHwgU1RSX0NMSyB8IFNUUl9XUkVOKSwgaW8gKyBJT19NQVNLKTsKKwkJb3V0dyhvZGlyIHwgU1RSX0RBVEEgfCBTVFJfQ0xLIHwgU1RSX1dSRU4sIGlvICsgSU9fRElSKTsKKwl9IGVsc2UgeworCQlvdXR3KH4oU1RSX0NMSyB8IFNUUl9XUkVOIHwgU1RSX0RBVEEgfCBTVFJfTU9TVCksIGlvICsgSU9fTUFTSyk7CisJCW91dHcoKG9kaXIgJiB+KFNUUl9EQVRBIHwgU1RSX01PU1QpKSB8IFNUUl9DTEsgfCBTVFJfV1JFTiwgaW8gKyBJT19ESVIpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBzbmRfdGVhNTc1eF9vcHMgc25kX2VzMTk2OF90ZWFfb3BzID0geworCS5zZXRfcGlucyA9IHNuZF9lczE5NjhfdGVhNTc1eF9zZXRfcGlucywKKwkuZ2V0X3BpbnMgPSBzbmRfZXMxOTY4X3RlYTU3NXhfZ2V0X3BpbnMsCisJLnNldF9kaXJlY3Rpb24gPSBzbmRfZXMxOTY4X3RlYTU3NXhfc2V0X2RpcmVjdGlvbiwKK307CisjZW5kaWYKKwogc3RhdGljIGludCBzbmRfZXMxOTY4X2ZyZWUoc3RydWN0IGVzMTk2OCAqY2hpcCkKIHsKICNpZmRlZiBDT05GSUdfU05EX0VTMTk2OF9JTlBVVApAQCAtMjU4NSw2ICsyNjUwLDEwIEBACiAJCW91dHcoMCwgY2hpcC0+aW9fcG9ydCArIEVTTV9QT1JUX0hPU1RfSVJRKTsgLyogZGlzYWJsZSBJUlEgKi8KIAl9CiAKKyNpZmRlZiBDT05GSUdfU05EX0VTMTk2OF9SQURJTworCXNuZF90ZWE1NzV4X2V4aXQoJmNoaXAtPnRlYSk7CisjZW5kaWYKKwogCWlmIChjaGlwLT5pcnEgPj0gMCkKIAkJZnJlZV9pcnEoY2hpcC0+aXJxLCBjaGlwKTsKIAlzbmRfZXMxOTY4X2ZyZWVfZ2FtZXBvcnQoY2hpcCk7CkBAIC0yNzIzLDYgKzI3OTIsMTUgQEAKIAogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjaS0+ZGV2KTsKIAorI2lmZGVmIENPTkZJR19TTkRfRVMxOTY4X1JBRElPCisJY2hpcC0+dGVhLnByaXZhdGVfZGF0YSA9IGNoaXA7CisJY2hpcC0+dGVhLm9wcyA9ICZzbmRfZXMxOTY4X3RlYV9vcHM7CisJc3RybGNweShjaGlwLT50ZWEuY2FyZCwgIlNGNjQtUENFMiIsIHNpemVvZihjaGlwLT50ZWEuY2FyZCkpOworCXNwcmludGYoY2hpcC0+dGVhLmJ1c19pbmZvLCAiUENJOiVzIiwgcGNpX25hbWUocGNpKSk7CisJaWYgKCFzbmRfdGVhNTc1eF9pbml0KCZjaGlwLT50ZWEpKQorCQlwcmludGsoS0VSTl9JTkZPICJlczE5Njg6IGRldGVjdGVkIFRFQTU3NXggcmFkaW9cbiIpOworI2VuZGlmCisKIAkqY2hpcF9yZXQgPSBjaGlwOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZm04MDEuYyBiL3NvdW5kL3BjaS9mbTgwMS5jCmluZGV4IGUxYmFhZDcuLmVhY2Q0OTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9mbTgwMS5jCisrKyBiL3NvdW5kL3BjaS9mbTgwMS5jCkBAIC0zOCw3ICszOCw2IEBACiAKICNpZmRlZiBDT05GSUdfU05EX0ZNODAxX1RFQTU3NVhfQk9PTAogI2luY2x1ZGUgPHNvdW5kL3RlYTU3NXgtdHVuZXIuaD4KLSNkZWZpbmUgVEVBNTc1WF9SQURJTyAxCiAjZW5kaWYKIAogTU9EVUxFX0FVVEhPUigiSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBwZXJleC5jej4iKTsKQEAgLTUzLDcgKzUyLDcgQEAKIC8qCiAgKiAgRW5hYmxlIFRFQTU3NXggdHVuZXIKICAqICAgIDEgPSBNZWRpYUZvcnRlIDI1Ni1QQ1MKLSAqICAgIDIgPSBNZWRpYUZvcnRlIDI1Ni1QQ1BSCisgKiAgICAyID0gTWVkaWFGb3J0ZSAyNTYtUENQCiAgKiAgICAzID0gTWVkaWFGb3J0ZSA2NC1QQ1IKICAqICAgMTYgPSBzZXR1cCB0dW5lciBvbmx5ICh0aGlzIGlzIGFkZGl0aW9uYWwgYml0KSwgaS5lLiBTRjY0LVBDUiBGTSBjYXJkCiAgKiAgSGlnaCAxNi1iaXRzIGFyZSB2aWRlbyAocmFkaW8pIGRldmljZSBudW1iZXIgKyAxCkBAIC02Nyw3ICs2Niw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiRW5hYmxlIEZNODAxIHNvdW5kY2FyZC4iKTsKIG1vZHVsZV9wYXJhbV9hcnJheSh0ZWE1NzV4X3R1bmVyLCBpbnQsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyh0ZWE1NzV4X3R1bmVyLCAiVEVBNTc1eCB0dW5lciBhY2Nlc3MgbWV0aG9kICgxID0gU0YyNTYtUENTLCAyPVNGMjU2LVBDUFIsIDM9U0Y2NC1QQ1IsICsxNj10dW5lci1vbmx5KS4iKTsKK01PRFVMRV9QQVJNX0RFU0ModGVhNTc1eF90dW5lciwgIlRFQTU3NXggdHVuZXIgYWNjZXNzIG1ldGhvZCAoMCA9IGF1dG8sIDEgPSBTRjI1Ni1QQ1MsIDI9U0YyNTYtUENQLCAzPVNGNjQtUENSLCA4PWRpc2FibGUsICsxNj10dW5lci1vbmx5KS4iKTsKIAogI2RlZmluZSBUVU5FUl9PTkxZCQkoMTw8NCkKICNkZWZpbmUgVFVORVJfVFlQRV9NQVNLCQkoflRVTkVSX09OTFkgJiAweEZGRkYpCkBAIC0xOTYsNyArMTk1LDcgQEAKIAlzcGlubG9ja190IHJlZ19sb2NrOwogCXN0cnVjdCBzbmRfaW5mb19lbnRyeSAqcHJvY19lbnRyeTsKIAotI2lmZGVmIFRFQTU3NVhfUkFESU8KKyNpZmRlZiBDT05GSUdfU05EX0ZNODAxX1RFQTU3NVhfQk9PTAogCXN0cnVjdCBzbmRfdGVhNTc1eCB0ZWE7CiAjZW5kaWYKIApAQCAtNzE1LDMxMCArNzE0LDg5IEBACiAgKiAgVEVBNTc1NyByYWRpbwogICovCiAKLSNpZmRlZiBURUE1NzVYX1JBRElPCisjaWZkZWYgQ09ORklHX1NORF9GTTgwMV9URUE1NzVYX0JPT0wKIAotLyogMjU2UENTIEdQSU8gbnVtYmVycyAqLwotI2RlZmluZSBURUFfMjU2UENTX0RBVEEJCQkxCi0jZGVmaW5lIFRFQV8yNTZQQ1NfV1JJVEVfRU5BQkxFCQkyCS8qIGludmVydGVkICovCi0jZGVmaW5lIFRFQV8yNTZQQ1NfQlVTX0NMT0NLCQkzCisvKiBHUElPIHRvIFRFQTU3NXggbWFwcyAqLworc3RydWN0IHNuZF9mbTgwMV90ZWE1NzV4X2dwaW8geworCXU4IGRhdGEsIGNsaywgd3JlbiwgbW9zdDsKKwljaGFyICpuYW1lOworfTsKIAotc3RhdGljIHZvaWQgc25kX2ZtODAxX3RlYTU3NXhfMjU2cGNzX3dyaXRlKHN0cnVjdCBzbmRfdGVhNTc1eCAqdGVhLCB1bnNpZ25lZCBpbnQgdmFsKQorc3RhdGljIHN0cnVjdCBzbmRfZm04MDFfdGVhNTc1eF9ncGlvIHNuZF9mbTgwMV90ZWE1NzV4X2dwaW9zW10gPSB7CisJeyAuZGF0YSA9IDEsIC5jbGsgPSAzLCAud3JlbiA9IDIsIC5tb3N0ID0gMCwgLm5hbWUgPSAiU0YyNTYtUENTIiB9LAorCXsgLmRhdGEgPSAxLCAuY2xrID0gMCwgLndyZW4gPSAyLCAubW9zdCA9IDMsIC5uYW1lID0gIlNGMjU2LVBDUCIgfSwKKwl7IC5kYXRhID0gMiwgLmNsayA9IDAsIC53cmVuID0gMSwgLm1vc3QgPSAzLCAubmFtZSA9ICJTRjY0LVBDUiIgfSwKK307CisKK3N0YXRpYyB2b2lkIHNuZF9mbTgwMV90ZWE1NzV4X3NldF9waW5zKHN0cnVjdCBzbmRfdGVhNTc1eCAqdGVhLCB1OCBwaW5zKQogewogCXN0cnVjdCBmbTgwMSAqY2hpcCA9IHRlYS0+cHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIHNob3J0IHJlZzsKLQlpbnQgaSA9IDI1OworCXVuc2lnbmVkIHNob3J0IHJlZyA9IGludyhGTTgwMV9SRUcoY2hpcCwgR1BJT19DVFJMKSk7CisJc3RydWN0IHNuZF9mbTgwMV90ZWE1NzV4X2dwaW8gZ3BpbyA9IHNuZF9mbTgwMV90ZWE1NzV4X2dwaW9zWyhjaGlwLT50ZWE1NzV4X3R1bmVyICYgVFVORVJfVFlQRV9NQVNLKSAtIDFdOwogCi0Jc3Bpbl9sb2NrX2lycSgmY2hpcC0+cmVnX2xvY2spOwotCXJlZyA9IGludyhGTTgwMV9SRUcoY2hpcCwgR1BJT19DVFJMKSk7CisJcmVnICY9IH4oRk04MDFfR1BJT19HUChncGlvLmRhdGEpIHwKKwkJIEZNODAxX0dQSU9fR1AoZ3Bpby5jbGspIHwKKwkJIEZNODAxX0dQSU9fR1AoZ3Bpby53cmVuKSk7CisKKwlyZWcgfD0gKHBpbnMgJiBURUE1NzVYX0RBVEEpID8gRk04MDFfR1BJT19HUChncGlvLmRhdGEpIDogMDsKKwlyZWcgfD0gKHBpbnMgJiBURUE1NzVYX0NMSykgID8gRk04MDFfR1BJT19HUChncGlvLmNsaykgOiAwOworCS8qIFdSSVRFX0VOQUJMRSBpcyBpbnZlcnRlZCAqLworCXJlZyB8PSAocGlucyAmIFRFQTU3NVhfV1JFTikgPyAwIDogRk04MDFfR1BJT19HUChncGlvLndyZW4pOworCisJb3V0dyhyZWcsIEZNODAxX1JFRyhjaGlwLCBHUElPX0NUUkwpKTsKK30KKworc3RhdGljIHU4IHNuZF9mbTgwMV90ZWE1NzV4X2dldF9waW5zKHN0cnVjdCBzbmRfdGVhNTc1eCAqdGVhKQoreworCXN0cnVjdCBmbTgwMSAqY2hpcCA9IHRlYS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIHNob3J0IHJlZyA9IGludyhGTTgwMV9SRUcoY2hpcCwgR1BJT19DVFJMKSk7CisJc3RydWN0IHNuZF9mbTgwMV90ZWE1NzV4X2dwaW8gZ3BpbyA9IHNuZF9mbTgwMV90ZWE1NzV4X2dwaW9zWyhjaGlwLT50ZWE1NzV4X3R1bmVyICYgVFVORVJfVFlQRV9NQVNLKSAtIDFdOworCisJcmV0dXJuICAocmVnICYgRk04MDFfR1BJT19HUChncGlvLmRhdGEpKSA/IFRFQTU3NVhfREFUQSA6IDAgfAorCQkocmVnICYgRk04MDFfR1BJT19HUChncGlvLm1vc3QpKSA/IFRFQTU3NVhfTU9TVCA6IDA7Cit9CisKK3N0YXRpYyB2b2lkIHNuZF9mbTgwMV90ZWE1NzV4X3NldF9kaXJlY3Rpb24oc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEsIGJvb2wgb3V0cHV0KQoreworCXN0cnVjdCBmbTgwMSAqY2hpcCA9IHRlYS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIHNob3J0IHJlZyA9IGludyhGTTgwMV9SRUcoY2hpcCwgR1BJT19DVFJMKSk7CisJc3RydWN0IHNuZF9mbTgwMV90ZWE1NzV4X2dwaW8gZ3BpbyA9IHNuZF9mbTgwMV90ZWE1NzV4X2dwaW9zWyhjaGlwLT50ZWE1NzV4X3R1bmVyICYgVFVORVJfVFlQRV9NQVNLKSAtIDFdOworCiAJLyogdXNlIEdQSU8gbGluZXMgYW5kIHNldCB3cml0ZSBlbmFibGUgYml0ICovCi0JcmVnIHw9IEZNODAxX0dQSU9fR1MoVEVBXzI1NlBDU19EQVRBKSB8Ci0JICAgICAgIEZNODAxX0dQSU9fR1MoVEVBXzI1NlBDU19XUklURV9FTkFCTEUpIHwKLQkgICAgICAgRk04MDFfR1BJT19HUyhURUFfMjU2UENTX0JVU19DTE9DSyk7Ci0JLyogYWxsIG9mIGxpbmVzIGFyZSBpbiB0aGUgd3JpdGUgZGlyZWN0aW9uICovCi0JLyogY2xlYXIgZGF0YSBhbmQgY2xvY2sgbGluZXMgKi8KLQlyZWcgJj0gfihGTTgwMV9HUElPX0dEKFRFQV8yNTZQQ1NfREFUQSkgfAotCSAgICAgICAgIEZNODAxX0dQSU9fR0QoVEVBXzI1NlBDU19XUklURV9FTkFCTEUpIHwKLQkgICAgICAgICBGTTgwMV9HUElPX0dEKFRFQV8yNTZQQ1NfQlVTX0NMT0NLKSB8Ci0JICAgICAgICAgRk04MDFfR1BJT19HUChURUFfMjU2UENTX0RBVEEpIHwKLQkgICAgICAgICBGTTgwMV9HUElPX0dQKFRFQV8yNTZQQ1NfQlVTX0NMT0NLKSB8Ci0JCSBGTTgwMV9HUElPX0dQKFRFQV8yNTZQQ1NfV1JJVEVfRU5BQkxFKSk7Ci0Jb3V0dyhyZWcsIEZNODAxX1JFRyhjaGlwLCBHUElPX0NUUkwpKTsKLQl1ZGVsYXkoMSk7Ci0KLQl3aGlsZSAoaS0tKSB7Ci0JCWlmICh2YWwgJiAoMSA8PCBpKSkKLQkJCXJlZyB8PSBGTTgwMV9HUElPX0dQKFRFQV8yNTZQQ1NfREFUQSk7Ci0JCWVsc2UKLQkJCXJlZyAmPSB+Rk04MDFfR1BJT19HUChURUFfMjU2UENTX0RBVEEpOwotCQlvdXR3KHJlZywgRk04MDFfUkVHKGNoaXAsIEdQSU9fQ1RSTCkpOwotCQl1ZGVsYXkoMSk7Ci0JCXJlZyB8PSBGTTgwMV9HUElPX0dQKFRFQV8yNTZQQ1NfQlVTX0NMT0NLKTsKLQkJb3V0dyhyZWcsIEZNODAxX1JFRyhjaGlwLCBHUElPX0NUUkwpKTsKLQkJcmVnICY9IH5GTTgwMV9HUElPX0dQKFRFQV8yNTZQQ1NfQlVTX0NMT0NLKTsKLQkJb3V0dyhyZWcsIEZNODAxX1JFRyhjaGlwLCBHUElPX0NUUkwpKTsKLQkJdWRlbGF5KDEpOworCXJlZyB8PSBGTTgwMV9HUElPX0dTKGdwaW8uZGF0YSkgfAorCSAgICAgICBGTTgwMV9HUElPX0dTKGdwaW8ud3JlbikgfAorCSAgICAgICBGTTgwMV9HUElPX0dTKGdwaW8uY2xrKSB8CisJICAgICAgIEZNODAxX0dQSU9fR1MoZ3Bpby5tb3N0KTsKKwlpZiAob3V0cHV0KSB7CisJCS8qIGFsbCBvZiBsaW5lcyBhcmUgaW4gdGhlIHdyaXRlIGRpcmVjdGlvbiAqLworCQkvKiBjbGVhciBkYXRhIGFuZCBjbG9jayBsaW5lcyAqLworCQlyZWcgJj0gfihGTTgwMV9HUElPX0dEKGdwaW8uZGF0YSkgfAorCQkJIEZNODAxX0dQSU9fR0QoZ3Bpby53cmVuKSB8CisJCQkgRk04MDFfR1BJT19HRChncGlvLmNsaykgfAorCQkJIEZNODAxX0dQSU9fR1AoZ3Bpby5kYXRhKSB8CisJCQkgRk04MDFfR1BJT19HUChncGlvLmNsaykgfAorCQkJIEZNODAxX0dQSU9fR1AoZ3Bpby53cmVuKSk7CisJfSBlbHNlIHsKKwkJLyogdXNlIEdQSU8gbGluZXMsIHNldCBkYXRhIGRpcmVjdGlvbiB0byBpbnB1dCAqLworCQlyZWcgfD0gRk04MDFfR1BJT19HRChncGlvLmRhdGEpIHwKKwkJICAgICAgIEZNODAxX0dQSU9fR0QoZ3Bpby5tb3N0KSB8CisJCSAgICAgICBGTTgwMV9HUElPX0dQKGdwaW8uZGF0YSkgfAorCQkgICAgICAgRk04MDFfR1BJT19HUChncGlvLm1vc3QpIHwKKwkJICAgICAgIEZNODAxX0dQSU9fR1AoZ3Bpby53cmVuKTsKKwkJLyogYWxsIG9mIGxpbmVzIGFyZSBpbiB0aGUgd3JpdGUgZGlyZWN0aW9uLCBleGNlcHQgZGF0YSAqLworCQkvKiBjbGVhciBkYXRhLCB3cml0ZSBlbmFibGUgYW5kIGNsb2NrIGxpbmVzICovCisJCXJlZyAmPSB+KEZNODAxX0dQSU9fR0QoZ3Bpby53cmVuKSB8CisJCQkgRk04MDFfR1BJT19HRChncGlvLmNsaykgfAorCQkJIEZNODAxX0dQSU9fR1AoZ3Bpby5jbGspKTsKIAl9CiAKLQkvKiBhbmQgcmVzZXQgdGhlIHdyaXRlIGVuYWJsZSBiaXQgKi8KLQlyZWcgfD0gRk04MDFfR1BJT19HUChURUFfMjU2UENTX1dSSVRFX0VOQUJMRSkgfAotCSAgICAgICBGTTgwMV9HUElPX0dQKFRFQV8yNTZQQ1NfREFUQSk7CiAJb3V0dyhyZWcsIEZNODAxX1JFRyhjaGlwLCBHUElPX0NUUkwpKTsKLQlzcGluX3VubG9ja19pcnEoJmNoaXAtPnJlZ19sb2NrKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBzbmRfZm04MDFfdGVhNTc1eF8yNTZwY3NfcmVhZChzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSkKLXsKLQlzdHJ1Y3QgZm04MDEgKmNoaXAgPSB0ZWEtPnByaXZhdGVfZGF0YTsKLQl1bnNpZ25lZCBzaG9ydCByZWc7Ci0JdW5zaWduZWQgaW50IHZhbCA9IDA7Ci0JaW50IGk7Ci0JCi0Jc3Bpbl9sb2NrX2lycSgmY2hpcC0+cmVnX2xvY2spOwotCXJlZyA9IGludyhGTTgwMV9SRUcoY2hpcCwgR1BJT19DVFJMKSk7Ci0JLyogdXNlIEdQSU8gbGluZXMsIHNldCBkYXRhIGRpcmVjdGlvbiB0byBpbnB1dCAqLwotCXJlZyB8PSBGTTgwMV9HUElPX0dTKFRFQV8yNTZQQ1NfREFUQSkgfAotCSAgICAgICBGTTgwMV9HUElPX0dTKFRFQV8yNTZQQ1NfV1JJVEVfRU5BQkxFKSB8Ci0JICAgICAgIEZNODAxX0dQSU9fR1MoVEVBXzI1NlBDU19CVVNfQ0xPQ0spIHwKLQkgICAgICAgRk04MDFfR1BJT19HRChURUFfMjU2UENTX0RBVEEpIHwKLQkgICAgICAgRk04MDFfR1BJT19HUChURUFfMjU2UENTX0RBVEEpIHwKLQkgICAgICAgRk04MDFfR1BJT19HUChURUFfMjU2UENTX1dSSVRFX0VOQUJMRSk7Ci0JLyogYWxsIG9mIGxpbmVzIGFyZSBpbiB0aGUgd3JpdGUgZGlyZWN0aW9uLCBleGNlcHQgZGF0YSAqLwotCS8qIGNsZWFyIGRhdGEsIHdyaXRlIGVuYWJsZSBhbmQgY2xvY2sgbGluZXMgKi8KLQlyZWcgJj0gfihGTTgwMV9HUElPX0dEKFRFQV8yNTZQQ1NfV1JJVEVfRU5BQkxFKSB8Ci0JICAgICAgICAgRk04MDFfR1BJT19HRChURUFfMjU2UENTX0JVU19DTE9DSykgfAotCSAgICAgICAgIEZNODAxX0dQSU9fR1AoVEVBXzI1NlBDU19CVVNfQ0xPQ0spKTsKLQotCWZvciAoaSA9IDA7IGkgPCAyNDsgaSsrKSB7Ci0JCXJlZyAmPSB+Rk04MDFfR1BJT19HUChURUFfMjU2UENTX0JVU19DTE9DSyk7Ci0JCW91dHcocmVnLCBGTTgwMV9SRUcoY2hpcCwgR1BJT19DVFJMKSk7Ci0JCXVkZWxheSgxKTsKLQkJcmVnIHw9IEZNODAxX0dQSU9fR1AoVEVBXzI1NlBDU19CVVNfQ0xPQ0spOwotCQlvdXR3KHJlZywgRk04MDFfUkVHKGNoaXAsIEdQSU9fQ1RSTCkpOwotCQl1ZGVsYXkoMSk7Ci0JCXZhbCA8PD0gMTsKLQkJaWYgKGludyhGTTgwMV9SRUcoY2hpcCwgR1BJT19DVFJMKSkgJiBGTTgwMV9HUElPX0dQKFRFQV8yNTZQQ1NfREFUQSkpCi0JCQl2YWwgfD0gMTsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnEoJmNoaXAtPnJlZ19sb2NrKTsKLQotCXJldHVybiB2YWw7Ci19Ci0KLS8qIDI1NlBDUFIgR1BJTyBudW1iZXJzICovCi0jZGVmaW5lIFRFQV8yNTZQQ1BSX0JVU19DTE9DSwkJMAotI2RlZmluZSBURUFfMjU2UENQUl9EQVRBCQkxCi0jZGVmaW5lIFRFQV8yNTZQQ1BSX1dSSVRFX0VOQUJMRQkyCS8qIGludmVydGVkICovCi0KLXN0YXRpYyB2b2lkIHNuZF9mbTgwMV90ZWE1NzV4XzI1NnBjcHJfd3JpdGUoc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEsIHVuc2lnbmVkIGludCB2YWwpCi17Ci0Jc3RydWN0IGZtODAxICpjaGlwID0gdGVhLT5wcml2YXRlX2RhdGE7Ci0JdW5zaWduZWQgc2hvcnQgcmVnOwotCWludCBpID0gMjU7Ci0KLQlzcGluX2xvY2tfaXJxKCZjaGlwLT5yZWdfbG9jayk7Ci0JcmVnID0gaW53KEZNODAxX1JFRyhjaGlwLCBHUElPX0NUUkwpKTsKLQkvKiB1c2UgR1BJTyBsaW5lcyBhbmQgc2V0IHdyaXRlIGVuYWJsZSBiaXQgKi8KLQlyZWcgfD0gRk04MDFfR1BJT19HUyhURUFfMjU2UENQUl9EQVRBKSB8Ci0JICAgICAgIEZNODAxX0dQSU9fR1MoVEVBXzI1NlBDUFJfV1JJVEVfRU5BQkxFKSB8Ci0JICAgICAgIEZNODAxX0dQSU9fR1MoVEVBXzI1NlBDUFJfQlVTX0NMT0NLKTsKLQkvKiBhbGwgb2YgbGluZXMgYXJlIGluIHRoZSB3cml0ZSBkaXJlY3Rpb24gKi8KLQkvKiBjbGVhciBkYXRhIGFuZCBjbG9jayBsaW5lcyAqLwotCXJlZyAmPSB+KEZNODAxX0dQSU9fR0QoVEVBXzI1NlBDUFJfREFUQSkgfAotCSAgICAgICAgIEZNODAxX0dQSU9fR0QoVEVBXzI1NlBDUFJfV1JJVEVfRU5BQkxFKSB8Ci0JICAgICAgICAgRk04MDFfR1BJT19HRChURUFfMjU2UENQUl9CVVNfQ0xPQ0spIHwKLQkgICAgICAgICBGTTgwMV9HUElPX0dQKFRFQV8yNTZQQ1BSX0RBVEEpIHwKLQkgICAgICAgICBGTTgwMV9HUElPX0dQKFRFQV8yNTZQQ1BSX0JVU19DTE9DSykgfAotCQkgRk04MDFfR1BJT19HUChURUFfMjU2UENQUl9XUklURV9FTkFCTEUpKTsKLQlvdXR3KHJlZywgRk04MDFfUkVHKGNoaXAsIEdQSU9fQ1RSTCkpOwotCXVkZWxheSgxKTsKLQotCXdoaWxlIChpLS0pIHsKLQkJaWYgKHZhbCAmICgxIDw8IGkpKQotCQkJcmVnIHw9IEZNODAxX0dQSU9fR1AoVEVBXzI1NlBDUFJfREFUQSk7Ci0JCWVsc2UKLQkJCXJlZyAmPSB+Rk04MDFfR1BJT19HUChURUFfMjU2UENQUl9EQVRBKTsKLQkJb3V0dyhyZWcsIEZNODAxX1JFRyhjaGlwLCBHUElPX0NUUkwpKTsKLQkJdWRlbGF5KDEpOwotCQlyZWcgfD0gRk04MDFfR1BJT19HUChURUFfMjU2UENQUl9CVVNfQ0xPQ0spOwotCQlvdXR3KHJlZywgRk04MDFfUkVHKGNoaXAsIEdQSU9fQ1RSTCkpOwotCQlyZWcgJj0gfkZNODAxX0dQSU9fR1AoVEVBXzI1NlBDUFJfQlVTX0NMT0NLKTsKLQkJb3V0dyhyZWcsIEZNODAxX1JFRyhjaGlwLCBHUElPX0NUUkwpKTsKLQkJdWRlbGF5KDEpOwotCX0KLQotCS8qIGFuZCByZXNldCB0aGUgd3JpdGUgZW5hYmxlIGJpdCAqLwotCXJlZyB8PSBGTTgwMV9HUElPX0dQKFRFQV8yNTZQQ1BSX1dSSVRFX0VOQUJMRSkgfAotCSAgICAgICBGTTgwMV9HUElPX0dQKFRFQV8yNTZQQ1BSX0RBVEEpOwotCW91dHcocmVnLCBGTTgwMV9SRUcoY2hpcCwgR1BJT19DVFJMKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZjaGlwLT5yZWdfbG9jayk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgc25kX2ZtODAxX3RlYTU3NXhfMjU2cGNwcl9yZWFkKHN0cnVjdCBzbmRfdGVhNTc1eCAqdGVhKQotewotCXN0cnVjdCBmbTgwMSAqY2hpcCA9IHRlYS0+cHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIHNob3J0IHJlZzsKLQl1bnNpZ25lZCBpbnQgdmFsID0gMDsKLQlpbnQgaTsKLQkKLQlzcGluX2xvY2tfaXJxKCZjaGlwLT5yZWdfbG9jayk7Ci0JcmVnID0gaW53KEZNODAxX1JFRyhjaGlwLCBHUElPX0NUUkwpKTsKLQkvKiB1c2UgR1BJTyBsaW5lcywgc2V0IGRhdGEgZGlyZWN0aW9uIHRvIGlucHV0ICovCi0JcmVnIHw9IEZNODAxX0dQSU9fR1MoVEVBXzI1NlBDUFJfREFUQSkgfAotCSAgICAgICBGTTgwMV9HUElPX0dTKFRFQV8yNTZQQ1BSX1dSSVRFX0VOQUJMRSkgfAotCSAgICAgICBGTTgwMV9HUElPX0dTKFRFQV8yNTZQQ1BSX0JVU19DTE9DSykgfAotCSAgICAgICBGTTgwMV9HUElPX0dEKFRFQV8yNTZQQ1BSX0RBVEEpIHwKLQkgICAgICAgRk04MDFfR1BJT19HUChURUFfMjU2UENQUl9EQVRBKSB8Ci0JICAgICAgIEZNODAxX0dQSU9fR1AoVEVBXzI1NlBDUFJfV1JJVEVfRU5BQkxFKTsKLQkvKiBhbGwgb2YgbGluZXMgYXJlIGluIHRoZSB3cml0ZSBkaXJlY3Rpb24sIGV4Y2VwdCBkYXRhICovCi0JLyogY2xlYXIgZGF0YSwgd3JpdGUgZW5hYmxlIGFuZCBjbG9jayBsaW5lcyAqLwotCXJlZyAmPSB+KEZNODAxX0dQSU9fR0QoVEVBXzI1NlBDUFJfV1JJVEVfRU5BQkxFKSB8Ci0JICAgICAgICAgRk04MDFfR1BJT19HRChURUFfMjU2UENQUl9CVVNfQ0xPQ0spIHwKLQkgICAgICAgICBGTTgwMV9HUElPX0dQKFRFQV8yNTZQQ1BSX0JVU19DTE9DSykpOwotCi0JZm9yIChpID0gMDsgaSA8IDI0OyBpKyspIHsKLQkJcmVnICY9IH5GTTgwMV9HUElPX0dQKFRFQV8yNTZQQ1BSX0JVU19DTE9DSyk7Ci0JCW91dHcocmVnLCBGTTgwMV9SRUcoY2hpcCwgR1BJT19DVFJMKSk7Ci0JCXVkZWxheSgxKTsKLQkJcmVnIHw9IEZNODAxX0dQSU9fR1AoVEVBXzI1NlBDUFJfQlVTX0NMT0NLKTsKLQkJb3V0dyhyZWcsIEZNODAxX1JFRyhjaGlwLCBHUElPX0NUUkwpKTsKLQkJdWRlbGF5KDEpOwotCQl2YWwgPDw9IDE7Ci0JCWlmIChpbncoRk04MDFfUkVHKGNoaXAsIEdQSU9fQ1RSTCkpICYgRk04MDFfR1BJT19HUChURUFfMjU2UENQUl9EQVRBKSkKLQkJCXZhbCB8PSAxOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+cmVnX2xvY2spOwotCi0JcmV0dXJuIHZhbDsKLX0KLQotLyogNjRQQ1IgR1BJTyBudW1iZXJzICovCi0jZGVmaW5lIFRFQV82NFBDUl9CVVNfQ0xPQ0sJCTAKLSNkZWZpbmUgVEVBXzY0UENSX1dSSVRFX0VOQUJMRQkJMQkvKiBpbnZlcnRlZCAqLwotI2RlZmluZSBURUFfNjRQQ1JfREFUQQkJCTIKLQotc3RhdGljIHZvaWQgc25kX2ZtODAxX3RlYTU3NXhfNjRwY3Jfd3JpdGUoc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEsIHVuc2lnbmVkIGludCB2YWwpCi17Ci0Jc3RydWN0IGZtODAxICpjaGlwID0gdGVhLT5wcml2YXRlX2RhdGE7Ci0JdW5zaWduZWQgc2hvcnQgcmVnOwotCWludCBpID0gMjU7Ci0KLQlzcGluX2xvY2tfaXJxKCZjaGlwLT5yZWdfbG9jayk7Ci0JcmVnID0gaW53KEZNODAxX1JFRyhjaGlwLCBHUElPX0NUUkwpKTsKLQkvKiB1c2UgR1BJTyBsaW5lcyBhbmQgc2V0IHdyaXRlIGVuYWJsZSBiaXQgKi8KLQlyZWcgfD0gRk04MDFfR1BJT19HUyhURUFfNjRQQ1JfREFUQSkgfAotCSAgICAgICBGTTgwMV9HUElPX0dTKFRFQV82NFBDUl9XUklURV9FTkFCTEUpIHwKLQkgICAgICAgRk04MDFfR1BJT19HUyhURUFfNjRQQ1JfQlVTX0NMT0NLKTsKLQkvKiBhbGwgb2YgbGluZXMgYXJlIGluIHRoZSB3cml0ZSBkaXJlY3Rpb24gKi8KLQkvKiBjbGVhciBkYXRhIGFuZCBjbG9jayBsaW5lcyAqLwotCXJlZyAmPSB+KEZNODAxX0dQSU9fR0QoVEVBXzY0UENSX0RBVEEpIHwKLQkgICAgICAgICBGTTgwMV9HUElPX0dEKFRFQV82NFBDUl9XUklURV9FTkFCTEUpIHwKLQkgICAgICAgICBGTTgwMV9HUElPX0dEKFRFQV82NFBDUl9CVVNfQ0xPQ0spIHwKLQkgICAgICAgICBGTTgwMV9HUElPX0dQKFRFQV82NFBDUl9EQVRBKSB8Ci0JICAgICAgICAgRk04MDFfR1BJT19HUChURUFfNjRQQ1JfQlVTX0NMT0NLKSB8Ci0JCSBGTTgwMV9HUElPX0dQKFRFQV82NFBDUl9XUklURV9FTkFCTEUpKTsKLQlvdXR3KHJlZywgRk04MDFfUkVHKGNoaXAsIEdQSU9fQ1RSTCkpOwotCXVkZWxheSgxKTsKLQotCXdoaWxlIChpLS0pIHsKLQkJaWYgKHZhbCAmICgxIDw8IGkpKQotCQkJcmVnIHw9IEZNODAxX0dQSU9fR1AoVEVBXzY0UENSX0RBVEEpOwotCQllbHNlCi0JCQlyZWcgJj0gfkZNODAxX0dQSU9fR1AoVEVBXzY0UENSX0RBVEEpOwotCQlvdXR3KHJlZywgRk04MDFfUkVHKGNoaXAsIEdQSU9fQ1RSTCkpOwotCQl1ZGVsYXkoMSk7Ci0JCXJlZyB8PSBGTTgwMV9HUElPX0dQKFRFQV82NFBDUl9CVVNfQ0xPQ0spOwotCQlvdXR3KHJlZywgRk04MDFfUkVHKGNoaXAsIEdQSU9fQ1RSTCkpOwotCQlyZWcgJj0gfkZNODAxX0dQSU9fR1AoVEVBXzY0UENSX0JVU19DTE9DSyk7Ci0JCW91dHcocmVnLCBGTTgwMV9SRUcoY2hpcCwgR1BJT19DVFJMKSk7Ci0JCXVkZWxheSgxKTsKLQl9Ci0KLQkvKiBhbmQgcmVzZXQgdGhlIHdyaXRlIGVuYWJsZSBiaXQgKi8KLQlyZWcgfD0gRk04MDFfR1BJT19HUChURUFfNjRQQ1JfV1JJVEVfRU5BQkxFKSB8Ci0JICAgICAgIEZNODAxX0dQSU9fR1AoVEVBXzY0UENSX0RBVEEpOwotCW91dHcocmVnLCBGTTgwMV9SRUcoY2hpcCwgR1BJT19DVFJMKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZjaGlwLT5yZWdfbG9jayk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgc25kX2ZtODAxX3RlYTU3NXhfNjRwY3JfcmVhZChzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSkKLXsKLQlzdHJ1Y3QgZm04MDEgKmNoaXAgPSB0ZWEtPnByaXZhdGVfZGF0YTsKLQl1bnNpZ25lZCBzaG9ydCByZWc7Ci0JdW5zaWduZWQgaW50IHZhbCA9IDA7Ci0JaW50IGk7Ci0JCi0Jc3Bpbl9sb2NrX2lycSgmY2hpcC0+cmVnX2xvY2spOwotCXJlZyA9IGludyhGTTgwMV9SRUcoY2hpcCwgR1BJT19DVFJMKSk7Ci0JLyogdXNlIEdQSU8gbGluZXMsIHNldCBkYXRhIGRpcmVjdGlvbiB0byBpbnB1dCAqLwotCXJlZyB8PSBGTTgwMV9HUElPX0dTKFRFQV82NFBDUl9EQVRBKSB8Ci0JICAgICAgIEZNODAxX0dQSU9fR1MoVEVBXzY0UENSX1dSSVRFX0VOQUJMRSkgfAotCSAgICAgICBGTTgwMV9HUElPX0dTKFRFQV82NFBDUl9CVVNfQ0xPQ0spIHwKLQkgICAgICAgRk04MDFfR1BJT19HRChURUFfNjRQQ1JfREFUQSkgfAotCSAgICAgICBGTTgwMV9HUElPX0dQKFRFQV82NFBDUl9EQVRBKSB8Ci0JICAgICAgIEZNODAxX0dQSU9fR1AoVEVBXzY0UENSX1dSSVRFX0VOQUJMRSk7Ci0JLyogYWxsIG9mIGxpbmVzIGFyZSBpbiB0aGUgd3JpdGUgZGlyZWN0aW9uLCBleGNlcHQgZGF0YSAqLwotCS8qIGNsZWFyIGRhdGEsIHdyaXRlIGVuYWJsZSBhbmQgY2xvY2sgbGluZXMgKi8KLQlyZWcgJj0gfihGTTgwMV9HUElPX0dEKFRFQV82NFBDUl9XUklURV9FTkFCTEUpIHwKLQkgICAgICAgICBGTTgwMV9HUElPX0dEKFRFQV82NFBDUl9CVVNfQ0xPQ0spIHwKLQkgICAgICAgICBGTTgwMV9HUElPX0dQKFRFQV82NFBDUl9CVVNfQ0xPQ0spKTsKLQotCWZvciAoaSA9IDA7IGkgPCAyNDsgaSsrKSB7Ci0JCXJlZyAmPSB+Rk04MDFfR1BJT19HUChURUFfNjRQQ1JfQlVTX0NMT0NLKTsKLQkJb3V0dyhyZWcsIEZNODAxX1JFRyhjaGlwLCBHUElPX0NUUkwpKTsKLQkJdWRlbGF5KDEpOwotCQlyZWcgfD0gRk04MDFfR1BJT19HUChURUFfNjRQQ1JfQlVTX0NMT0NLKTsKLQkJb3V0dyhyZWcsIEZNODAxX1JFRyhjaGlwLCBHUElPX0NUUkwpKTsKLQkJdWRlbGF5KDEpOwotCQl2YWwgPDw9IDE7Ci0JCWlmIChpbncoRk04MDFfUkVHKGNoaXAsIEdQSU9fQ1RSTCkpICYgRk04MDFfR1BJT19HUChURUFfNjRQQ1JfREFUQSkpCi0JCQl2YWwgfD0gMTsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnEoJmNoaXAtPnJlZ19sb2NrKTsKLQotCXJldHVybiB2YWw7Ci19Ci0KLXN0YXRpYyB2b2lkIHNuZF9mbTgwMV90ZWE1NzV4XzY0cGNyX211dGUoc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEsCi0JCQkJCSAgdW5zaWduZWQgaW50IG11dGUpCi17Ci0Jc3RydWN0IGZtODAxICpjaGlwID0gdGVhLT5wcml2YXRlX2RhdGE7Ci0JdW5zaWduZWQgc2hvcnQgcmVnOwotCi0Jc3Bpbl9sb2NrX2lycSgmY2hpcC0+cmVnX2xvY2spOwotCi0JcmVnID0gaW53KEZNODAxX1JFRyhjaGlwLCBHUElPX0NUUkwpKTsKLQlpZiAobXV0ZSkKLQkJLyogMHhmODAwIChtdXRlKSAqLwotCQlyZWcgJj0gfkZNODAxX0dQSU9fR1AoVEVBXzY0UENSX1dSSVRFX0VOQUJMRSk7Ci0JZWxzZQotCQkvKiAweGY4MDIgKHVubXV0ZSkgKi8KLQkJcmVnIHw9IEZNODAxX0dQSU9fR1AoVEVBXzY0UENSX1dSSVRFX0VOQUJMRSk7Ci0Jb3V0dyhyZWcsIEZNODAxX1JFRyhjaGlwLCBHUElPX0NUUkwpKTsKLQl1ZGVsYXkoMSk7Ci0KLQlzcGluX3VubG9ja19pcnEoJmNoaXAtPnJlZ19sb2NrKTsKLX0KLQotc3RhdGljIHN0cnVjdCBzbmRfdGVhNTc1eF9vcHMgc25kX2ZtODAxX3RlYV9vcHNbM10gPSB7Ci0JewotCQkvKiAxID0gTWVkaWFGb3J0ZSAyNTYtUENTICovCi0JCS53cml0ZSA9IHNuZF9mbTgwMV90ZWE1NzV4XzI1NnBjc193cml0ZSwKLQkJLnJlYWQgPSBzbmRfZm04MDFfdGVhNTc1eF8yNTZwY3NfcmVhZCwKLQl9LAotCXsKLQkJLyogMiA9IE1lZGlhRm9ydGUgMjU2LVBDUFIgKi8KLQkJLndyaXRlID0gc25kX2ZtODAxX3RlYTU3NXhfMjU2cGNwcl93cml0ZSwKLQkJLnJlYWQgPSBzbmRfZm04MDFfdGVhNTc1eF8yNTZwY3ByX3JlYWQsCi0JfSwKLQl7Ci0JCS8qIDMgPSBNZWRpYUZvcnRlIDY0LVBDUiAqLwotCQkud3JpdGUgPSBzbmRfZm04MDFfdGVhNTc1eF82NHBjcl93cml0ZSwKLQkJLnJlYWQgPSBzbmRfZm04MDFfdGVhNTc1eF82NHBjcl9yZWFkLAotCQkubXV0ZSA9IHNuZF9mbTgwMV90ZWE1NzV4XzY0cGNyX211dGUsCi0JfQorc3RhdGljIHN0cnVjdCBzbmRfdGVhNTc1eF9vcHMgc25kX2ZtODAxX3RlYV9vcHMgPSB7CisJLnNldF9waW5zID0gc25kX2ZtODAxX3RlYTU3NXhfc2V0X3BpbnMsCisJLmdldF9waW5zID0gc25kX2ZtODAxX3RlYTU3NXhfZ2V0X3BpbnMsCisJLnNldF9kaXJlY3Rpb24gPSBzbmRfZm04MDFfdGVhNTc1eF9zZXRfZGlyZWN0aW9uLAogfTsKICNlbmRpZgogCkBAIC0xMzcxLDcgKzExNDksNyBAQAogCW91dHcoY21kdywgRk04MDFfUkVHKGNoaXAsIElSUV9NQVNLKSk7CiAKICAgICAgIF9fZW5kX2h3OgotI2lmZGVmIFRFQTU3NVhfUkFESU8KKyNpZmRlZiBDT05GSUdfU05EX0ZNODAxX1RFQTU3NVhfQk9PTAogCXNuZF90ZWE1NzV4X2V4aXQoJmNoaXAtPnRlYSk7CiAjZW5kaWYKIAlpZiAoY2hpcC0+aXJxID49IDApCkBAIC0xNDUwLDE2ICsxMjI4LDI1IEBACiAKIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2ktPmRldik7CiAKLSNpZmRlZiBURUE1NzVYX1JBRElPCisjaWZkZWYgQ09ORklHX1NORF9GTTgwMV9URUE1NzVYX0JPT0wKKwljaGlwLT50ZWEucHJpdmF0ZV9kYXRhID0gY2hpcDsKKwljaGlwLT50ZWEub3BzID0gJnNuZF9mbTgwMV90ZWFfb3BzOworCXNwcmludGYoY2hpcC0+dGVhLmJ1c19pbmZvLCAiUENJOiVzIiwgcGNpX25hbWUocGNpKSk7CiAJaWYgKCh0ZWE1NzV4X3R1bmVyICYgVFVORVJfVFlQRV9NQVNLKSA+IDAgJiYKIAkgICAgKHRlYTU3NXhfdHVuZXIgJiBUVU5FUl9UWVBFX01BU0spIDwgNCkgewotCQljaGlwLT50ZWEuZGV2X25yID0gdGVhNTc1eF90dW5lciA+PiAxNjsKLQkJY2hpcC0+dGVhLmNhcmQgPSBjYXJkOwotCQljaGlwLT50ZWEuZnJlcV9maXh1cCA9IDEwNzAwOwotCQljaGlwLT50ZWEucHJpdmF0ZV9kYXRhID0gY2hpcDsKLQkJY2hpcC0+dGVhLm9wcyA9ICZzbmRfZm04MDFfdGVhX29wc1sodGVhNTc1eF90dW5lciAmIFRVTkVSX1RZUEVfTUFTSykgLSAxXTsKLQkJc25kX3RlYTU3NXhfaW5pdCgmY2hpcC0+dGVhKTsKLQl9CisJCWlmIChzbmRfdGVhNTc1eF9pbml0KCZjaGlwLT50ZWEpKQorCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiVEVBNTc1eCByYWRpbyBub3QgZm91bmRcbiIpOworCX0gZWxzZSBpZiAoKHRlYTU3NXhfdHVuZXIgJiBUVU5FUl9UWVBFX01BU0spID09IDApCisJCS8qIGF1dG9kZXRlY3QgdHVuZXIgY29ubmVjdGlvbiAqLworCQlmb3IgKHRlYTU3NXhfdHVuZXIgPSAxOyB0ZWE1NzV4X3R1bmVyIDw9IDM7IHRlYTU3NXhfdHVuZXIrKykgeworCQkJY2hpcC0+dGVhNTc1eF90dW5lciA9IHRlYTU3NXhfdHVuZXI7CisJCQlpZiAoIXNuZF90ZWE1NzV4X2luaXQoJmNoaXAtPnRlYSkpIHsKKwkJCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiZGV0ZWN0ZWQgVEVBNTc1eCByYWRpbyB0eXBlICVzXG4iLAorCQkJCQlzbmRfZm04MDFfdGVhNTc1eF9ncGlvc1t0ZWE1NzV4X3R1bmVyIC0gMV0ubmFtZSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwlzdHJsY3B5KGNoaXAtPnRlYS5jYXJkLCBzbmRfZm04MDFfdGVhNTc1eF9ncGlvc1sodGVhNTc1eF90dW5lciAmIFRVTkVSX1RZUEVfTUFTSykgLSAxXS5uYW1lLCBzaXplb2YoY2hpcC0+dGVhLmNhcmQpKTsKICNlbmRpZgogCiAJKnJjaGlwID0gY2hpcDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCmluZGV4IDc1OWFkZTEuLjhlZGQ5OTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYwpAQCAtMzA3LDYgKzMwNywxMiBAQAogfQogRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9nZXRfc3ViX25vZGVzKTsKIAorc3RhdGljIGludCBfaGRhX2dldF9jb25uZWN0aW9ucyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKKwkJCQloZGFfbmlkX3QgKmNvbm5fbGlzdCwgaW50IG1heF9jb25ucyk7CitzdGF0aWMgYm9vbCBhZGRfY29ubl9saXN0KHN0cnVjdCBzbmRfYXJyYXkgKmFycmF5LCBoZGFfbmlkX3QgbmlkKTsKK3N0YXRpYyBpbnQgY29weV9jb25uX2xpc3QoaGRhX25pZF90IG5pZCwgaGRhX25pZF90ICpkc3QsIGludCBtYXhfZHN0LAorCQkJICBoZGFfbmlkX3QgKnNyYywgaW50IGxlbik7CisKIC8qKgogICogc25kX2hkYV9nZXRfY29ubmVjdGlvbnMgLSBnZXQgY29ubmVjdGlvbiBsaXN0CiAgKiBAY29kZWM6IHRoZSBIREEgY29kZWMKQEAgLTMyMCw3ICszMjYsNDQgQEAKICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBjb25uZWN0aW9ucywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgogICovCiBpbnQgc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCi0JCQkgICAgaGRhX25pZF90ICpjb25uX2xpc3QsIGludCBtYXhfY29ubnMpCisJCQkgICAgIGhkYV9uaWRfdCAqY29ubl9saXN0LCBpbnQgbWF4X2Nvbm5zKQoreworCXN0cnVjdCBzbmRfYXJyYXkgKmFycmF5ID0gJmNvZGVjLT5jb25uX2xpc3RzOworCWludCBpLCBsZW4sIG9sZF91c2VkOworCWhkYV9uaWRfdCBsaXN0W0hEQV9NQVhfQ09OTkVDVElPTlNdOworCisJLyogbG9vayB1cCB0aGUgY2FjaGVkIHJlc3VsdHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYXJyYXktPnVzZWQ7ICkgeworCQloZGFfbmlkX3QgKnAgPSBzbmRfYXJyYXlfZWxlbShhcnJheSwgaSk7CisJCWxlbiA9IHBbMV07CisJCWlmIChuaWQgPT0gKnApCisJCQlyZXR1cm4gY29weV9jb25uX2xpc3QobmlkLCBjb25uX2xpc3QsIG1heF9jb25ucywKKwkJCQkJICAgICAgcCArIDIsIGxlbik7CisJCWkgKz0gbGVuICsgMjsKKwl9CisKKwlsZW4gPSBfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgbmlkLCBsaXN0LCBIREFfTUFYX0NPTk5FQ1RJT05TKTsKKwlpZiAobGVuIDwgMCkKKwkJcmV0dXJuIGxlbjsKKworCS8qIGFkZCB0byB0aGUgY2FjaGUgKi8KKwlvbGRfdXNlZCA9IGFycmF5LT51c2VkOworCWlmICghYWRkX2Nvbm5fbGlzdChhcnJheSwgbmlkKSB8fCAhYWRkX2Nvbm5fbGlzdChhcnJheSwgbGVuKSkKKwkJZ290byBlcnJvcl9hZGQ7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlpZiAoIWFkZF9jb25uX2xpc3QoYXJyYXksIGxpc3RbaV0pKQorCQkJZ290byBlcnJvcl9hZGQ7CisKKwlyZXR1cm4gY29weV9jb25uX2xpc3QobmlkLCBjb25uX2xpc3QsIG1heF9jb25ucywgbGlzdCwgbGVuKTsKKwkJCisgZXJyb3JfYWRkOgorCWFycmF5LT51c2VkID0gb2xkX3VzZWQ7CisJcmV0dXJuIC1FTk9NRU07Cit9CitFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX2dldF9jb25uZWN0aW9ucyk7CisKK3N0YXRpYyBpbnQgX2hkYV9nZXRfY29ubmVjdGlvbnMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCisJCQkgICAgIGhkYV9uaWRfdCAqY29ubl9saXN0LCBpbnQgbWF4X2Nvbm5zKQogewogCXVuc2lnbmVkIGludCBwYXJtOwogCWludCBpLCBjb25uX2xlbiwgY29ubnM7CkBAIC00MTcsOCArNDYwLDI4IEBACiAJfQogCXJldHVybiBjb25uczsKIH0KLUVYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKTsKIAorc3RhdGljIGJvb2wgYWRkX2Nvbm5fbGlzdChzdHJ1Y3Qgc25kX2FycmF5ICphcnJheSwgaGRhX25pZF90IG5pZCkKK3sKKwloZGFfbmlkX3QgKnAgPSBzbmRfYXJyYXlfbmV3KGFycmF5KTsKKwlpZiAoIXApCisJCXJldHVybiBmYWxzZTsKKwkqcCA9IG5pZDsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGludCBjb3B5X2Nvbm5fbGlzdChoZGFfbmlkX3QgbmlkLCBoZGFfbmlkX3QgKmRzdCwgaW50IG1heF9kc3QsCisJCQkgIGhkYV9uaWRfdCAqc3JjLCBpbnQgbGVuKQoreworCWlmIChsZW4gPiBtYXhfZHN0KSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImhkYV9jb2RlYzogIgorCQkJICAgIlRvbyBtYW55IGNvbm5lY3Rpb25zICVkIGZvciBOSUQgMHgleFxuIiwKKwkJCSAgIGxlbiwgbmlkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW1lbWNweShkc3QsIHNyYywgbGVuICogc2l6ZW9mKGhkYV9uaWRfdCkpOworCXJldHVybiBsZW47Cit9CiAKIC8qKgogICogc25kX2hkYV9xdWV1ZV91bnNvbF9ldmVudCAtIGFkZCBhbiB1bnNvbGljaXRlZCBldmVudCB0byBxdWV1ZQpAQCAtMTAxOSw2ICsxMDgyLDcgQEAKIAlsaXN0X2RlbCgmY29kZWMtPmxpc3QpOwogCXNuZF9hcnJheV9mcmVlKCZjb2RlYy0+bWl4ZXJzKTsKIAlzbmRfYXJyYXlfZnJlZSgmY29kZWMtPm5pZHMpOworCXNuZF9hcnJheV9mcmVlKCZjb2RlYy0+Y29ubl9saXN0cyk7CiAJY29kZWMtPmJ1cy0+Y2FkZHJfdGJsW2NvZGVjLT5hZGRyXSA9IE5VTEw7CiAJaWYgKGNvZGVjLT5wYXRjaF9vcHMuZnJlZSkKIAkJY29kZWMtPnBhdGNoX29wcy5mcmVlKGNvZGVjKTsKQEAgLTEwNzksNiArMTE0Myw3IEBACiAJc25kX2FycmF5X2luaXQoJmNvZGVjLT5pbml0X3BpbnMsIHNpemVvZihzdHJ1Y3QgaGRhX3BpbmNmZyksIDE2KTsKIAlzbmRfYXJyYXlfaW5pdCgmY29kZWMtPmRyaXZlcl9waW5zLCBzaXplb2Yoc3RydWN0IGhkYV9waW5jZmcpLCAxNik7CiAJc25kX2FycmF5X2luaXQoJmNvZGVjLT5jdnRfc2V0dXBzLCBzaXplb2Yoc3RydWN0IGhkYV9jdnRfc2V0dXApLCA4KTsKKwlzbmRfYXJyYXlfaW5pdCgmY29kZWMtPmNvbm5fbGlzdHMsIHNpemVvZihoZGFfbmlkX3QpLCA2NCk7CiAJaWYgKGNvZGVjLT5idXMtPm1vZGVsbmFtZSkgewogCQljb2RlYy0+bW9kZWxuYW1lID0ga3N0cmR1cChjb2RlYy0+YnVzLT5tb2RlbG5hbWUsIEdGUF9LRVJORUwpOwogCQlpZiAoIWNvZGVjLT5tb2RlbG5hbWUpIHsKQEAgLTI1NTYsNyArMjYyMSw3IEBACiBzdGF0aWMgdm9pZCBzZXRfZGlnX291dChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKIAkJCWludCB2ZXJiLCBpbnQgdmFsKQogewotCWhkYV9uaWRfdCAqZDsKKwljb25zdCBoZGFfbmlkX3QgKmQ7CiAKIAlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBuaWQsIDAsIHZlcmIsIHZhbCk7CiAJZCA9IGNvZGVjLT5zbGF2ZV9kaWdfb3V0czsKQEAgLTM4MDcsNyArMzg3Miw4IEBACiAgKgogICogUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KICAqLwotaW50IHNuZF9oZGFfYWRkX25ld19jdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa25ldykKK2ludCBzbmRfaGRhX2FkZF9uZXdfY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCSBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa25ldykKIHsKIAlpbnQgZXJyOwogCkBAIC0zOTUwLDcgKzQwMTYsNyBAQAogCQkJCSBzdHJ1Y3QgaGRhX2xvb3BiYWNrX2NoZWNrICpjaGVjaywKIAkJCQkgaGRhX25pZF90IG5pZCkKIHsKLQlzdHJ1Y3QgaGRhX2FtcF9saXN0ICpwOworCWNvbnN0IHN0cnVjdCBoZGFfYW1wX2xpc3QgKnA7CiAJaW50IGNoLCB2OwogCiAJaWYgKCFjaGVjay0+YW1wbGlzdCkKQEAgLTQxMTgsNyArNDE4NCw3IEBACiAJCQkJICAgIC0xKTsKIAlzbmRfaGRhX2NvZGVjX3NldHVwX3N0cmVhbShjb2RlYywgbmlkLCBzdHJlYW1fdGFnLCAwLCBmb3JtYXQpOwogCWlmIChjb2RlYy0+c2xhdmVfZGlnX291dHMpIHsKLQkJaGRhX25pZF90ICpkOworCQljb25zdCBoZGFfbmlkX3QgKmQ7CiAJCWZvciAoZCA9IGNvZGVjLT5zbGF2ZV9kaWdfb3V0czsgKmQ7IGQrKykKIAkJCXNuZF9oZGFfY29kZWNfc2V0dXBfc3RyZWFtKGNvZGVjLCAqZCwgc3RyZWFtX3RhZywgMCwKIAkJCQkJCSAgIGZvcm1hdCk7CkBAIC00MTMzLDcgKzQxOTksNyBAQAogewogCXNuZF9oZGFfY29kZWNfY2xlYW51cF9zdHJlYW0oY29kZWMsIG5pZCk7CiAJaWYgKGNvZGVjLT5zbGF2ZV9kaWdfb3V0cykgewotCQloZGFfbmlkX3QgKmQ7CisJCWNvbnN0IGhkYV9uaWRfdCAqZDsKIAkJZm9yIChkID0gY29kZWMtPnNsYXZlX2RpZ19vdXRzOyAqZDsgZCsrKQogCQkJc25kX2hkYV9jb2RlY19jbGVhbnVwX3N0cmVhbShjb2RlYywgKmQpOwogCX0KQEAgLTQyODAsNyArNDM0Niw3IEBACiAJCQkJICAgICB1bnNpZ25lZCBpbnQgZm9ybWF0LAogCQkJCSAgICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7Ci0JaGRhX25pZF90ICpuaWRzID0gbW91dC0+ZGFjX25pZHM7CisJY29uc3QgaGRhX25pZF90ICpuaWRzID0gbW91dC0+ZGFjX25pZHM7CiAJaW50IGNocyA9IHN1YnN0cmVhbS0+cnVudGltZS0+Y2hhbm5lbHM7CiAJaW50IGk7CiAKQEAgLTQzMzUsNyArNDQwMSw3IEBACiBpbnQgc25kX2hkYV9tdWx0aV9vdXRfYW5hbG9nX2NsZWFudXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJICAgICBzdHJ1Y3QgaGRhX211bHRpX291dCAqbW91dCkKIHsKLQloZGFfbmlkX3QgKm5pZHMgPSBtb3V0LT5kYWNfbmlkczsKKwljb25zdCBoZGFfbmlkX3QgKm5pZHMgPSBtb3V0LT5kYWNfbmlkczsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBtb3V0LT5udW1fZGFjczsgaSsrKQpAQCAtNDM2MCw3ICs0NDI2LDcgQEAKICAqIEhlbHBlciBmb3IgYXV0b21hdGljIHBpbiBjb25maWd1cmF0aW9uCiAgKi8KIAotc3RhdGljIGludCBpc19pbl9uaWRfbGlzdChoZGFfbmlkX3QgbmlkLCBoZGFfbmlkX3QgKmxpc3QpCitzdGF0aWMgaW50IGlzX2luX25pZF9saXN0KGhkYV9uaWRfdCBuaWQsIGNvbnN0IGhkYV9uaWRfdCAqbGlzdCkKIHsKIAlmb3IgKDsgKmxpc3Q7IGxpc3QrKykKIAkJaWYgKCpsaXN0ID09IG5pZCkKQEAgLTQ0NDEsNyArNDUwNyw3IEBACiAgKi8KIGludCBzbmRfaGRhX3BhcnNlX3Bpbl9kZWZfY29uZmlnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCSBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcsCi0JCQkJIGhkYV9uaWRfdCAqaWdub3JlX25pZHMpCisJCQkJIGNvbnN0IGhkYV9uaWRfdCAqaWdub3JlX25pZHMpCiB7CiAJaGRhX25pZF90IG5pZCwgZW5kX25pZDsKIAlzaG9ydCBzZXEsIGFzc29jX2xpbmVfb3V0LCBhc3NvY19zcGVha2VyOwpAQCAtNDYzMiwxMCArNDY5OCwxMyBAQAogCS8qCiAJICogZGVidWcgcHJpbnRzIG9mIHRoZSBwYXJzZWQgcmVzdWx0cwogCSAqLwotCXNuZF9wcmludGQoImF1dG9jb25maWc6IGxpbmVfb3V0cz0lZCAoMHgleC8weCV4LzB4JXgvMHgleC8weCV4KVxuIiwKKwlzbmRfcHJpbnRkKCJhdXRvY29uZmlnOiBsaW5lX291dHM9JWQgKDB4JXgvMHgleC8weCV4LzB4JXgvMHgleCkgdHlwZTolc1xuIiwKIAkJICAgY2ZnLT5saW5lX291dHMsIGNmZy0+bGluZV9vdXRfcGluc1swXSwgY2ZnLT5saW5lX291dF9waW5zWzFdLAogCQkgICBjZmctPmxpbmVfb3V0X3BpbnNbMl0sIGNmZy0+bGluZV9vdXRfcGluc1szXSwKLQkJICAgY2ZnLT5saW5lX291dF9waW5zWzRdKTsKKwkJICAgY2ZnLT5saW5lX291dF9waW5zWzRdLAorCQkgICBjZmctPmxpbmVfb3V0X3R5cGUgPT0gQVVUT19QSU5fSFBfT1VUID8gImhwIiA6CisJCSAgIChjZmctPmxpbmVfb3V0X3R5cGUgPT0gQVVUT19QSU5fU1BFQUtFUl9PVVQgPworCQkgICAgInNwZWFrZXIiIDogImxpbmUiKSk7CiAJc25kX3ByaW50ZCgiICAgc3BlYWtlcl9vdXRzPSVkICgweCV4LzB4JXgvMHgleC8weCV4LzB4JXgpXG4iLAogCQkgICBjZmctPnNwZWFrZXJfb3V0cywgY2ZnLT5zcGVha2VyX3BpbnNbMF0sCiAJCSAgIGNmZy0+c3BlYWtlcl9waW5zWzFdLCBjZmctPnNwZWFrZXJfcGluc1syXSwKQEAgLTQ5ODYsNiArNTA1NSw4IEBACiAJCXJldHVybiAiTGluZS1vdXQiOwogCWNhc2UgU05EX0pBQ0tfSEVBRFNFVDoKIAkJcmV0dXJuICJIZWFkc2V0IjsKKwljYXNlIFNORF9KQUNLX1ZJREVPT1VUOgorCQlyZXR1cm4gIkhETUkvRFAiOwogCWRlZmF1bHQ6CiAJCXJldHVybiAiTWlzYyI7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaCBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmgKaW5kZXggZTQ2ZDU0Mi4uNTljOTczMCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaAorKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5oCkBAIC04MjUsMTIgKzgyNSwxNCBAQAogCXN0cnVjdCBoZGFfY2FjaGVfcmVjIGFtcF9jYWNoZTsJLyogY2FjaGUgZm9yIGFtcCBhY2Nlc3MgKi8KIAlzdHJ1Y3QgaGRhX2NhY2hlX3JlYyBjbWRfY2FjaGU7CS8qIGNhY2hlIGZvciBvdGhlciBjb21tYW5kcyAqLwogCisJc3RydWN0IHNuZF9hcnJheSBjb25uX2xpc3RzOwkvKiBjb25uZWN0aW9uLWxpc3QgYXJyYXkgKi8KKwogCXN0cnVjdCBtdXRleCBzcGRpZl9tdXRleDsKIAlzdHJ1Y3QgbXV0ZXggY29udHJvbF9tdXRleDsKIAl1bnNpZ25lZCBpbnQgc3BkaWZfc3RhdHVzOwkvKiBJRUM5NTggc3RhdHVzIGJpdHMgKi8KIAl1bnNpZ25lZCBzaG9ydCBzcGRpZl9jdGxzOwkvKiBTUERJRiBjb250cm9sIGJpdHMgKi8KIAl1bnNpZ25lZCBpbnQgc3BkaWZfaW5fZW5hYmxlOwkvKiBTUERJRiBpbnB1dCBlbmFibGU/ICovCi0JaGRhX25pZF90ICpzbGF2ZV9kaWdfb3V0czsgLyogb3B0aW9uYWwgZGlnaXRhbCBvdXQgc2xhdmUgd2lkZ2V0cyAqLworCWNvbnN0IGhkYV9uaWRfdCAqc2xhdmVfZGlnX291dHM7IC8qIG9wdGlvbmFsIGRpZ2l0YWwgb3V0IHNsYXZlIHdpZGdldHMgKi8KIAlzdHJ1Y3Qgc25kX2FycmF5IGluaXRfcGluczsJLyogaW5pdGlhbCAoQklPUykgcGluIGNvbmZpZ3VyYXRpb25zICovCiAJc3RydWN0IHNuZF9hcnJheSBkcml2ZXJfcGluczsJLyogcGluIGNvbmZpZ3Mgc2V0IGJ5IGNvZGVjIHBhcnNlciAqLwogCXN0cnVjdCBzbmRfYXJyYXkgY3Z0X3NldHVwczsJLyogYXVkaW8gY29udmVydCBzZXR1cHMgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCmluZGV4IDcwYTlkMzIuLjQzYTAzNjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwpAQCAtMTI2LDYgKzEyNiw3IEBACiAJCQkgIntJbnRlbCwgSUNIMTB9LCIKIAkJCSAie0ludGVsLCBQQ0h9LCIKIAkJCSAie0ludGVsLCBDUFR9LCIKKwkJCSAie0ludGVsLCBQUFR9LCIKIAkJCSAie0ludGVsLCBQQkd9LCIKIAkJCSAie0ludGVsLCBTQ0h9LCIKIAkJCSAie0FUSSwgU0I0NTB9LCIKQEAgLTEwOTEsNyArMTA5MiwxMyBAQAogCQkJCT8gIkZhaWxlZCIgOiAiT0siKTsKIAkJfQogCQlicmVhazsKLQorCWRlZmF1bHQ6CisJCS8qIEFNRCBIdWRzb24gbmVlZHMgdGhlIHNpbWlsYXIgc25vb3AsIGFzIGl0IHNlZW1zLi4uICovCisJCWlmIChjaGlwLT5wY2ktPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FNRCkKKwkJCXVwZGF0ZV9wY2lfYnl0ZShjaGlwLT5wY2ksCisJCQkJQVRJX1NCNDUwX0hEQVVESU9fTUlTQ19DTlRSMl9BRERSLAorCQkJCTB4MDcsIEFUSV9TQjQ1MF9IREFVRElPX0VOQUJMRV9TTk9PUCk7CisJCWJyZWFrOwogICAgICAgICB9CiB9CiAKQEAgLTE0NDYsNiArMTQ1MywxNyBAQAogCQl9CiAJfQogCisJLyogQU1EIGNoaXBzZXRzIG9mdGVuIGNhdXNlIHRoZSBjb21tdW5pY2F0aW9uIHN0YWxscyB1cG9uIGNlcnRhaW4KKwkgKiBzZXF1ZW5jZSBsaWtlIHRoZSBwaW4tZGV0ZWN0aW9uLiAgSXQgc2VlbXMgdGhhdCBmb3JjaW5nIHRoZSBzeW5jZWQKKwkgKiBhY2Nlc3Mgd29ya3MgYXJvdW5kIHRoZSBzdGFsbC4gIEdycnIuLi4KKwkgKi8KKwlpZiAoY2hpcC0+cGNpLT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BTUQgfHwKKwkgICAgY2hpcC0+cGNpLT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BVEkpIHsKKwkJc25kX3ByaW50ayhLRVJOX0lORk8gU0ZYICJFbmFibGUgc3luY193cml0ZSBmb3IgQU1EIGNoaXBzZXRcbiIpOworCQljaGlwLT5idXMtPnN5bmNfd3JpdGUgPSAxOworCQljaGlwLT5idXMtPmFsbG93X2J1c19yZXNldCA9IDE7CisJfQorCiAJLyogVGhlbiBjcmVhdGUgY29kZWMgaW5zdGFuY2VzICovCiAJZm9yIChjID0gMDsgYyA8IG1heF9zbG90czsgYysrKSB7CiAJCWlmICgoY2hpcC0+Y29kZWNfbWFzayAmICgxIDw8IGMpKSAmIGNoaXAtPmNvZGVjX3Byb2JlX21hc2spIHsKQEAgLTIzNDksOSArMjM2NywxNiBAQAogCS8qIENoZWNrIFZJQS9BVEkgSEQgQXVkaW8gQ29udHJvbGxlciBleGlzdCAqLwogCXN3aXRjaCAoY2hpcC0+ZHJpdmVyX3R5cGUpIHsKIAljYXNlIEFaWF9EUklWRVJfVklBOgotCWNhc2UgQVpYX0RSSVZFUl9BVEk6CiAJCS8qIFVzZSBsaW5rIHBvc2l0aW9uIGRpcmVjdGx5LCBhdm9pZCBhbnkgdHJhbnNmZXIgcHJvYmxlbS4gKi8KIAkJcmV0dXJuIFBPU19GSVhfVklBQ09NQk87CisJY2FzZSBBWlhfRFJJVkVSX0FUSToKKwkJLyogQVRJIGNoaXBzZXRzIGRvbid0IHdvcmsgd2VsbCB3aXRoIHBvc2l0aW9uLWJ1ZmZlciAqLworCQlyZXR1cm4gUE9TX0ZJWF9MUElCOworCWNhc2UgQVpYX0RSSVZFUl9HRU5FUklDOgorCQkvKiBBTUQgY2hpcHNldHMgYWxzbyBkb24ndCB3b3JrIHdpdGggcG9zaXRpb24tYnVmZmVyICovCisJCWlmIChjaGlwLT5wY2ktPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FNRCkKKwkJCXJldHVybiBQT1NfRklYX0xQSUI7CisJCWJyZWFrOwogCX0KIAogCXJldHVybiBQT1NfRklYX0FVVE87CkBAIC0yNTQ5LDYgKzI1NzQsMTMgQEAKIAkJCQlnY2FwICY9IH5JQ0g2X0dDQVBfNjRPSzsKIAkJCXBjaV9kZXZfcHV0KHBfc21idXMpOwogCQl9CisJfSBlbHNlIHsKKwkJLyogRklYTUU6IG5vdCBzdXJlIHdoZXRoZXIgdGhpcyBpcyByZWFsbHkgbmVlZGVkLCBidXQKKwkJICogSHVkc29uIGlzbid0IHN0YWJsZSBlbm91Z2ggZm9yIGFsbG93aW5nIGV2ZXJ5dGhpbmcuLi4KKwkJICogbGV0J3MgY2hlY2sgbGF0ZXIgYWdhaW4uCisJCSAqLworCQlpZiAoY2hpcC0+cGNpLT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BTUQpCisJCQlnY2FwICY9IH5JQ0g2X0dDQVBfNjRPSzsKIAl9CiAKIAkvKiBkaXNhYmxlIDY0Yml0IERNQSBhZGRyZXNzIGZvciBUZXJhZGljaSAqLwpAQCAtMjc1OSw2ICsyNzkxLDggQEAKIAl7IFBDSV9ERVZJQ0UoMHg4MDg2LCAweDFjMjApLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX1BDSCB9LAogCS8qIFBCRyAqLwogCXsgUENJX0RFVklDRSgweDgwODYsIDB4MWQyMCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfUENIIH0sCisJLyogUGFudGhlciBQb2ludCAqLworCXsgUENJX0RFVklDRSgweDgwODYsIDB4MWUyMCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfUENIIH0sCiAJLyogU0NIICovCiAJeyBQQ0lfREVWSUNFKDB4ODA4NiwgMHg4MTFiKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9TQ0ggfSwKIAkvKiBHZW5lcmljIEludGVsICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9sb2NhbC5oIGIvc291bmQvcGNpL2hkYS9oZGFfbG9jYWwuaAppbmRleCBmZjVlMmFjLi4wOGVjMDczIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9sb2NhbC5oCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2xvY2FsLmgKQEAgLTI2NywxMSArMjY3LDExIEBACiAKIHN0cnVjdCBoZGFfbXVsdGlfb3V0IHsKIAlpbnQgbnVtX2RhY3M7CQkvKiAjIG9mIERBQ3MsIG11c3QgYmUgbW9yZSB0aGFuIDEgKi8KLQloZGFfbmlkX3QgKmRhY19uaWRzOwkvKiBEQUMgbGlzdCAqLworCWNvbnN0IGhkYV9uaWRfdCAqZGFjX25pZHM7CS8qIERBQyBsaXN0ICovCiAJaGRhX25pZF90IGhwX25pZDsJLyogb3B0aW9uYWwgREFDIGZvciBIUCwgMCB3aGVuIG5vdCBleGlzdHMgKi8KIAloZGFfbmlkX3QgZXh0cmFfb3V0X25pZFszXTsJLyogb3B0aW9uYWwgREFDcywgMCB3aGVuIG5vdCBleGlzdHMgKi8KIAloZGFfbmlkX3QgZGlnX291dF9uaWQ7CS8qIGRpZ2l0YWwgb3V0IGF1ZGlvIHdpZGdldCAqLwotCWhkYV9uaWRfdCAqc2xhdmVfZGlnX291dHM7CisJY29uc3QgaGRhX25pZF90ICpzbGF2ZV9kaWdfb3V0czsKIAlpbnQgbWF4X2NoYW5uZWxzOwkvKiBjdXJyZW50bHkgc3VwcG9ydGVkIGFuYWxvZyBjaGFubmVscyAqLwogCWludCBkaWdfb3V0X3VzZWQ7CS8qIGN1cnJlbnQgdXNhZ2Ugb2YgZGlnaXRhbCBvdXQgKEhEQV9ESUdfWFhYKSAqLwogCWludCBub19zaGFyZV9zdHJlYW07CS8qIGRvbid0IHNoYXJlIGEgc3RyZWFtIHdpdGggbXVsdGlwbGUgcGlucyAqLwpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9jb25maWdzLCBjb25zdCBjaGFyICogY29uc3QgKm1vZGVscywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayAqdGJsKTsKIGludCBzbmRfaGRhX2FkZF9uZXdfY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKLQkJCSBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa25ldyk7CisJCQkgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXcpOwogCiAvKgogICogdW5zb2xpY2l0ZWQgZXZlbnQgaGFuZGxlcgpAQCAtNDQzLDcgKzQ0Myw3IEBACiAKIGludCBzbmRfaGRhX3BhcnNlX3Bpbl9kZWZfY29uZmlnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCSBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcsCi0JCQkJIGhkYV9uaWRfdCAqaWdub3JlX25pZHMpOworCQkJCSBjb25zdCBoZGFfbmlkX3QgKmlnbm9yZV9uaWRzKTsKIAogLyogYW1wIHZhbHVlcyAqLwogI2RlZmluZSBBTVBfSU5fTVVURShpZHgpCSgweDcwODAgfCAoKGlkeCk8PDgpKQpAQCAtNDkzLDYgKzQ5MywxMiBAQAogdTMyIHNuZF9oZGFfcGluX3NlbnNlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKTsKIGludCBzbmRfaGRhX2phY2tfZGV0ZWN0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKTsKIAorc3RhdGljIGlubGluZSBib29sIGlzX2phY2tfZGV0ZWN0YWJsZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCkKK3sKKwlyZXR1cm4gKHNuZF9oZGFfcXVlcnlfcGluX2NhcHMoY29kZWMsIG5pZCkgJiBBQ19QSU5DQVBfUFJFU19ERVRFQ1QpICYmCisJCShnZXRfd2NhcHMoY29kZWMsIG5pZCkgJiBBQ19XQ0FQX1VOU09MX0NBUCk7Cit9CisKIC8qIGZsYWdzIGZvciBoZGFfbmlkX2l0ZW0gKi8KICNkZWZpbmUgSERBX05JRF9JVEVNX0FNUAkoMTw8MCkKIApAQCAtNTY3LDcgKzU3Myw3IEBACiB9OwogCiBzdHJ1Y3QgaGRhX2xvb3BiYWNrX2NoZWNrIHsKLQlzdHJ1Y3QgaGRhX2FtcF9saXN0ICphbXBsaXN0OworCWNvbnN0IHN0cnVjdCBoZGFfYW1wX2xpc3QgKmFtcGxpc3Q7CiAJaW50IHBvd2VyX29uOwogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKaW5kZXggMjk0MmQyYS4uZjFiMzg3NSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiaGRhX2JlZXAuaCIKIAogc3RydWN0IGFkMTk4eF9zcGVjIHsKLQlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqbWl4ZXJzWzZdOworCWNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICptaXhlcnNbNl07CiAJaW50IG51bV9taXhlcnM7CiAJdW5zaWduZWQgaW50IGJlZXBfYW1wOwkvKiBiZWVwIGFtcCB2YWx1ZSwgc2V0IHZpYSBzZXRfYmVlcF9hbXAoKSAqLwogCWNvbnN0IHN0cnVjdCBoZGFfdmVyYiAqaW5pdF92ZXJic1s2XTsJLyogaW5pdGlhbGl6YXRpb24gdmVyYnMKQEAgLTQ2LDE3ICs0NiwxNyBAQAogCXVuc2lnbmVkIGludCBjdXJfZWFwZDsKIAl1bnNpZ25lZCBpbnQgbmVlZF9kYWNfZml4OwogCi0JaGRhX25pZF90ICphbHRfZGFjX25pZDsKLQlzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKnN0cmVhbV9hbmFsb2dfYWx0X3BsYXliYWNrOworCWNvbnN0IGhkYV9uaWRfdCAqYWx0X2RhY19uaWQ7CisJY29uc3Qgc3RydWN0IGhkYV9wY21fc3RyZWFtICpzdHJlYW1fYW5hbG9nX2FsdF9wbGF5YmFjazsKIAogCS8qIGNhcHR1cmUgKi8KIAl1bnNpZ25lZCBpbnQgbnVtX2FkY19uaWRzOwotCWhkYV9uaWRfdCAqYWRjX25pZHM7CisJY29uc3QgaGRhX25pZF90ICphZGNfbmlkczsKIAloZGFfbmlkX3QgZGlnX2luX25pZDsJCS8qIGRpZ2l0YWwtaW4gTklEOyBvcHRpb25hbCAqLwogCiAJLyogY2FwdHVyZSBzb3VyY2UgKi8KIAljb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW5wdXRfbXV4OwotCWhkYV9uaWRfdCAqY2Fwc3JjX25pZHM7CisJY29uc3QgaGRhX25pZF90ICpjYXBzcmNfbmlkczsKIAl1bnNpZ25lZCBpbnQgY3VyX211eFszXTsKIAogCS8qIGNoYW5uZWwgbW9kZWwgKi8KQEAgLTE4MiwxMyArMTgyLDEzIEBACiAKICNpZmRlZiBDT05GSUdfU05EX0hEQV9JTlBVVF9CRUVQCiAvKiBhZGRpdGlvbmFsIGJlZXAgbWl4ZXJzOyB0aGUgYWN0dWFsIHBhcmFtZXRlcnMgYXJlIG92ZXJ3cml0dGVuIGF0IGJ1aWxkICovCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWRfYmVlcF9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkX2JlZXBfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDAsIDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFX0JFRVAoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMCwgMCwgSERBX09VVFBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkX2JlZXAyX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWRfYmVlcDJfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJEaWdpdGFsIEJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMCwgMCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEVfQkVFUCgiRGlnaXRhbCBCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDAsIDAsIEhEQV9PVVRQVVQpLAogCXsgfSAvKiBlbmQgKi8KQEAgLTIzMSw3ICsyMzEsNyBAQAogCS8qIGNyZWF0ZSBiZWVwIGNvbnRyb2xzIGlmIG5lZWRlZCAqLwogI2lmZGVmIENPTkZJR19TTkRfSERBX0lOUFVUX0JFRVAKIAlpZiAoc3BlYy0+YmVlcF9hbXApIHsKLQkJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXc7CisJCWNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprbmV3OwogCQlrbmV3ID0gc3BlYy0+YW5hbG9nX2JlZXAgPyBhZF9iZWVwMl9taXhlciA6IGFkX2JlZXBfbWl4ZXI7CiAJCWZvciAoIDsga25ldy0+bmFtZTsga25ldysrKSB7CiAJCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOwpAQCAtMzMxLDcgKzMzMSw3IEBACiAJcmV0dXJuIHNuZF9oZGFfbXVsdGlfb3V0X2FuYWxvZ19jbGVhbnVwKGNvZGVjLCAmc3BlYy0+bXVsdGlvdXQpOwogfQogCi1zdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIGFkMTk4eF9wY21fYW5hbG9nX2FsdF9wbGF5YmFjayA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gYWQxOTh4X3BjbV9hbmFsb2dfYWx0X3BsYXliYWNrID0gewogCS5zdWJzdHJlYW1zID0gMSwKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gMiwKQEAgLTQwMyw3ICs0MDMsNyBAQAogCiAvKgogICovCi1zdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIGFkMTk4eF9wY21fYW5hbG9nX3BsYXliYWNrID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBhZDE5OHhfcGNtX2FuYWxvZ19wbGF5YmFjayA9IHsKIAkuc3Vic3RyZWFtcyA9IDEsCiAJLmNoYW5uZWxzX21pbiA9IDIsCiAJLmNoYW5uZWxzX21heCA9IDYsIC8qIGNoYW5nZWQgbGF0ZXIgKi8KQEAgLTQxNSw3ICs0MTUsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIGFkMTk4eF9wY21fYW5hbG9nX2NhcHR1cmUgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9wY21fc3RyZWFtIGFkMTk4eF9wY21fYW5hbG9nX2NhcHR1cmUgPSB7CiAJLnN1YnN0cmVhbXMgPSAxLAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSAyLApAQCAtNDI2LDcgKzQyNiw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gYWQxOTh4X3BjbV9kaWdpdGFsX3BsYXliYWNrID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBhZDE5OHhfcGNtX2RpZ2l0YWxfcGxheWJhY2sgPSB7CiAJLnN1YnN0cmVhbXMgPSAxLAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSAyLApAQCAtNDM5LDcgKzQzOSw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gYWQxOTh4X3BjbV9kaWdpdGFsX2NhcHR1cmUgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9wY21fc3RyZWFtIGFkMTk4eF9wY21fZGlnaXRhbF9jYXB0dXJlID0gewogCS5zdWJzdHJlYW1zID0gMSwKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gMiwKQEAgLTQ4OSwxMSArNDg5LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFkMTk4eF9zaHV0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0Jc25kX2hkYV9zaHV0dXBfcGlucyhjb2RlYyk7Ci19Ci0KIHN0YXRpYyB2b2lkIGFkMTk4eF9mcmVlX2tjdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwpAQCAtNTQ3LDYgKzU0MiwxMiBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgYWQxOTh4X3NodXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzbmRfaGRhX3NodXR1cF9waW5zKGNvZGVjKTsKKwlhZDE5OHhfcG93ZXJfZWFwZChjb2RlYyk7Cit9CisKIHN0YXRpYyB2b2lkIGFkMTk4eF9mcmVlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwpAQCAtNTY0LDEyICs1NjUsMTEgQEAKIHN0YXRpYyBpbnQgYWQxOTh4X3N1c3BlbmQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlhZDE5OHhfc2h1dHVwKGNvZGVjKTsKLQlhZDE5OHhfcG93ZXJfZWFwZChjb2RlYyk7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBoZGFfY29kZWNfb3BzIGFkMTk4eF9wYXRjaF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9jb2RlY19vcHMgYWQxOTh4X3BhdGNoX29wcyA9IHsKIAkuYnVpbGRfY29udHJvbHMgPSBhZDE5OHhfYnVpbGRfY29udHJvbHMsCiAJLmJ1aWxkX3BjbXMgPSBhZDE5OHhfYnVpbGRfcGNtcywKIAkuaW5pdCA9IGFkMTk4eF9pbml0LApAQCAtNjM5LDEzICs2MzksMTMgQEAKICNkZWZpbmUgQUQxOTg2QV9DTEZFX0RBQwkweDA1CiAjZGVmaW5lIEFEMTk4NkFfQURDCQkweDA2CiAKLXN0YXRpYyBoZGFfbmlkX3QgYWQxOTg2YV9kYWNfbmlkc1szXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3QgYWQxOTg2YV9kYWNfbmlkc1szXSA9IHsKIAlBRDE5ODZBX0ZST05UX0RBQywgQUQxOTg2QV9TVVJSX0RBQywgQUQxOTg2QV9DTEZFX0RBQwogfTsKLXN0YXRpYyBoZGFfbmlkX3QgYWQxOTg2YV9hZGNfbmlkc1sxXSA9IHsgQUQxOTg2QV9BREMgfTsKLXN0YXRpYyBoZGFfbmlkX3QgYWQxOTg2YV9jYXBzcmNfbmlkc1sxXSA9IHsgMHgxMiB9Oworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBhZDE5ODZhX2FkY19uaWRzWzFdID0geyBBRDE5ODZBX0FEQyB9Oworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBhZDE5ODZhX2NhcHNyY19uaWRzWzFdID0geyAweDEyIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhZDE5ODZhX2NhcHR1cmVfc291cmNlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFkMTk4NmFfY2FwdHVyZV9zb3VyY2UgPSB7CiAJLm51bV9pdGVtcyA9IDcsCiAJLml0ZW1zID0gewogCQl7ICJNaWMiLCAweDAgfSwKQEAgLTY1OSw3ICs2NTksNyBAQAogfTsKIAogCi1zdGF0aWMgc3RydWN0IGhkYV9iaW5kX2N0bHMgYWQxOTg2YV9iaW5kX3BjbV92b2wgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9iaW5kX2N0bHMgYWQxOTg2YV9iaW5kX3BjbV92b2wgPSB7CiAJLm9wcyA9ICZzbmRfaGRhX2JpbmRfdm9sLAogCS52YWx1ZXMgPSB7CiAJCUhEQV9DT01QT1NFX0FNUF9WQUwoQUQxOTg2QV9GUk9OVF9EQUMsIDMsIDAsIEhEQV9PVVRQVVQpLApAQCAtNjY5LDcgKzY2OSw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2JpbmRfY3RscyBhZDE5ODZhX2JpbmRfcGNtX3N3ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfYmluZF9jdGxzIGFkMTk4NmFfYmluZF9wY21fc3cgPSB7CiAJLm9wcyA9ICZzbmRfaGRhX2JpbmRfc3csCiAJLnZhbHVlcyA9IHsKIAkJSERBX0NPTVBPU0VfQU1QX1ZBTChBRDE5ODZBX0ZST05UX0RBQywgMywgMCwgSERBX09VVFBVVCksCkBAIC02ODIsNyArNjgyLDcgQEAKIC8qCiAgKiBtaXhlcnMKICAqLwotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkMTk4NmFfbWl4ZXJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxOTg2YV9taXhlcnNbXSA9IHsKIAkvKgogCSAqIGJpbmQgdm9sdW1lcy9tdXRlcyBvZiAzIERBQ3MgYXMgYSBzaW5nbGUgUENNIGNvbnRyb2wgZm9yIHNpbXBsaWNpdHkKIAkgKi8KQEAgLTcyMyw3ICs3MjMsNyBAQAogfTsKIAogLyogYWRkaXRpb25hbCBtaXhlcnMgZm9yIDNzdGFjayBtb2RlICovCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxOTg2YV8zc3RfbWl4ZXJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxOTg2YV8zc3RfbWl4ZXJzW10gPSB7CiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiQ2hhbm5lbCBNb2RlIiwKQEAgLTczNSwxMCArNzM1LDEwIEBACiB9OwogCiAvKiBsYXB0b3AgbW9kZWwgLSAyY2ggb25seSAqLwotc3RhdGljIGhkYV9uaWRfdCBhZDE5ODZhX2xhcHRvcF9kYWNfbmlkc1sxXSA9IHsgQUQxOTg2QV9GUk9OVF9EQUMgfTsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3QgYWQxOTg2YV9sYXB0b3BfZGFjX25pZHNbMV0gPSB7IEFEMTk4NkFfRlJPTlRfREFDIH07CiAKIC8qIG1hc3RlciBjb250cm9scyBib3RoIHBpbnMgMHgxYSBhbmQgMHgxYiAqLwotc3RhdGljIHN0cnVjdCBoZGFfYmluZF9jdGxzIGFkMTk4NmFfbGFwdG9wX21hc3Rlcl92b2wgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9iaW5kX2N0bHMgYWQxOTg2YV9sYXB0b3BfbWFzdGVyX3ZvbCA9IHsKIAkub3BzID0gJnNuZF9oZGFfYmluZF92b2wsCiAJLnZhbHVlcyA9IHsKIAkJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDFhLCAzLCAwLCBIREFfT1VUUFVUKSwKQEAgLTc0Nyw3ICs3NDcsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9iaW5kX2N0bHMgYWQxOTg2YV9sYXB0b3BfbWFzdGVyX3N3ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfYmluZF9jdGxzIGFkMTk4NmFfbGFwdG9wX21hc3Rlcl9zdyA9IHsKIAkub3BzID0gJnNuZF9oZGFfYmluZF9zdywKIAkudmFsdWVzID0gewogCQlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MWEsIDMsIDAsIEhEQV9PVVRQVVQpLApAQCAtNzU2LDcgKzc1Niw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZDE5ODZhX2xhcHRvcF9taXhlcnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZDE5ODZhX2xhcHRvcF9taXhlcnNbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwgMHgwMywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiUENNIFBsYXliYWNrIFN3aXRjaCIsIDB4MDMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfVk9MKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgJmFkMTk4NmFfbGFwdG9wX21hc3Rlcl92b2wpLApAQCAtNzg3LDcgKzc4Nyw3IEBACiAKIC8qIGxhcHRvcC1lYXBkIG1vZGVsIC0gMmNoIG9ubHkgKi8KIAotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFkMTk4NmFfbGFwdG9wX2VhcGRfY2FwdHVyZV9zb3VyY2UgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggYWQxOTg2YV9sYXB0b3BfZWFwZF9jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gMywKIAkuaXRlbXMgPSB7CiAJCXsgIk1pYyIsIDB4MCB9LApAQCAtNzk2LDcgKzc5Niw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhZDE5ODZhX2F1dG9taWNfY2FwdHVyZV9zb3VyY2UgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggYWQxOTg2YV9hdXRvbWljX2NhcHR1cmVfc291cmNlID0gewogCS5udW1faXRlbXMgPSAyLAogCS5pdGVtcyA9IHsKIAkJeyAiTWljIiwgMHgwIH0sCkBAIC04MDQsMTMgKzgwNCwxMyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxOTg2YV9sYXB0b3BfbWFzdGVyX21peGVyc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkMTk4NmFfbGFwdG9wX21hc3Rlcl9taXhlcnNbXSA9IHsKIAlIREFfQklORF9WT0woIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAmYWQxOTg2YV9sYXB0b3BfbWFzdGVyX3ZvbCksCiAJSERBX0JJTkRfU1coIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCAmYWQxOTg2YV9sYXB0b3BfbWFzdGVyX3N3KSwKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxOTg2YV9sYXB0b3BfZWFwZF9taXhlcnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZDE5ODZhX2xhcHRvcF9lYXBkX21peGVyc1tdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIlBDTSBQbGF5YmFjayBWb2x1bWUiLCAweDAzLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJQQ00gUGxheWJhY2sgU3dpdGNoIiwgMHgwMywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgxMywgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTgzNyw3ICs4MzcsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZDE5ODZhX2xhcHRvcF9pbnRtaWNfbWl4ZXJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxOTg2YV9sYXB0b3BfaW50bWljX21peGVyc1tdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDE3LCAwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSW50ZXJuYWwgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MTcsIDAsIEhEQV9PVVRQVVQpLAogCXsgfSAvKiBlbmQgKi8KQEAgLTkzMSw3ICs5MzEsNyBAQAogCXJldHVybiBjaGFuZ2U7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZDE5ODZhX2F1dG9tdXRlX21hc3Rlcl9taXhlcnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZDE5ODZhX2F1dG9tdXRlX21hc3Rlcl9taXhlcnNbXSA9IHsKIAlIREFfQklORF9WT0woIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAmYWQxOTg2YV9sYXB0b3BfbWFzdGVyX3ZvbCksCiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKQEAgLTk0OSw3ICs5NDksNyBAQAogLyoKICAqIGluaXRpYWxpemF0aW9uIHZlcmJzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWQxOTg2YV9pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFkMTk4NmFfaW5pdF92ZXJic1tdID0gewogCS8qIEZyb250LCBTdXJyb3VuZCwgQ0xGRSBEQUM7IG11dGUgYXMgZGVmYXVsdCAqLwogCXsweDAzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwODB9LAogCXsweDA0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwODB9LApAQCAtMTAwNCw3ICsxMDA0LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFkMTk4NmFfY2gyX2luaXRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWQxOTg2YV9jaDJfaW5pdFtdID0gewogCS8qIFN1cnJvdW5kIG91dCAtPiBMaW5lIEluICovCiAJeyAweDFjLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTiB9LAogIAkvKiBMaW5lLWluIHNlbGVjdG9ycyAqLwpAQCAtMTAxNiw3ICsxMDE2LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFkMTk4NmFfY2g0X2luaXRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWQxOTg2YV9jaDRfaW5pdFtdID0gewogCS8qIFN1cnJvdW5kIG91dCAtPiBTdXJyb3VuZCAqLwogCXsgMHgxYywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCiAJeyAweDEwLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwIH0sCkBAIC0xMDI2LDcgKzEwMjYsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWQxOTg2YV9jaDZfaW5pdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhZDE5ODZhX2NoNl9pbml0W10gPSB7CiAJLyogU3Vycm91bmQgb3V0IC0+IFN1cnJvdW5kIG91dCAqLwogCXsgMHgxYywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCiAJeyAweDEwLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwIH0sCkBAIC0xMDM2LDE5ICsxMDM2LDE5IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFkMTk4NmFfbW9kZXNbM10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWQxOTg2YV9tb2Rlc1szXSA9IHsKIAl7IDIsIGFkMTk4NmFfY2gyX2luaXQgfSwKIAl7IDQsIGFkMTk4NmFfY2g0X2luaXQgfSwKIAl7IDYsIGFkMTk4NmFfY2g2X2luaXQgfSwKIH07CiAKIC8qIGVhcGQgaW5pdGlhbGl6YXRpb24gKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWQxOTg2YV9lYXBkX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWQxOTg2YV9lYXBkX2luaXRfdmVyYnNbXSA9IHsKIAl7MHgxYiwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDB4MDAgfSwKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhZDE5ODZhX2F1dG9taWNfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWQxOTg2YV9hdXRvbWljX3ZlcmJzW10gPSB7CiAJezB4MWQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCiAJezB4MWYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCiAJLyp7MHgyMCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwqLwpAQCAtMTA1OCw3ICsxMDU4LDcgQEAKIH07CiAKIC8qIFVsdHJhIGluaXRpYWxpemF0aW9uICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFkMTk4NmFfdWx0cmFfaW5pdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhZDE5ODZhX3VsdHJhX2luaXRbXSA9IHsKIAkvKiBlYXBkIGluaXRpYWxpemF0aW9uICovCiAJeyAweDFiLCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMHgwMCB9LAogCS8qIENMRkUgLT4gTWljIGluICovCkBAIC0xMDY5LDcgKzEwNjksNyBAQAogfTsKIAogLyogcGluIHNlbnNpbmcgb24gSFAgamFjayAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhZDE5ODZhX2hwX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWQxOTg2YV9ocF9pbml0X3ZlcmJzW10gPSB7CiAJezB4MWEsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBRDE5ODZBX0hQX0VWRU5UfSwKIAl7fQogfTsKQEAgLTExMjAsNyArMTEyMCw3IEBACiAJW0FEMTk4NkFfU0FNU1VOR19QNTBdCT0gInNhbXN1bmctcDUwIiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhZDE5ODZhX2NmZ190YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhZDE5ODZhX2NmZ190YmxbXSA9IHsKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGFmLCAiSFAgQjI4MDAiLCBBRDE5ODZBX0xBUFRPUF9FQVBEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMTUzLCAiQVNVUyBNOSIsIEFEMTk4NkFfTEFQVE9QX0VBUEQpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExZjcsICJBU1VTIFU1QSIsIEFEMTk4NkFfTEFQVE9QX0VBUEQpLApAQCAtMTE1Miw3ICsxMTUyLDcgQEAKIH07CiAKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCi1zdGF0aWMgc3RydWN0IGhkYV9hbXBfbGlzdCBhZDE5ODZhX2xvb3BiYWNrc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfYW1wX2xpc3QgYWQxOTg2YV9sb29wYmFja3NbXSA9IHsKIAl7IDB4MTMsIEhEQV9PVVRQVVQsIDAgfSwgLyogTWljICovCiAJeyAweDE0LCBIREFfT1VUUFVULCAwIH0sIC8qIFBob25lICovCiAJeyAweDE1LCBIREFfT1VUUFVULCAwIH0sIC8qIENEICovCkBAIC0xMzI5LDExICsxMzI5LDExIEBACiAjZGVmaW5lIEFEMTk4M19EQUMJCTB4MDMKICNkZWZpbmUgQUQxOTgzX0FEQwkJMHgwNAogCi1zdGF0aWMgaGRhX25pZF90IGFkMTk4M19kYWNfbmlkc1sxXSA9IHsgQUQxOTgzX0RBQyB9Owotc3RhdGljIGhkYV9uaWRfdCBhZDE5ODNfYWRjX25pZHNbMV0gPSB7IEFEMTk4M19BREMgfTsKLXN0YXRpYyBoZGFfbmlkX3QgYWQxOTgzX2NhcHNyY19uaWRzWzFdID0geyAweDE1IH07CitzdGF0aWMgY29uc3QgaGRhX25pZF90IGFkMTk4M19kYWNfbmlkc1sxXSA9IHsgQUQxOTgzX0RBQyB9Oworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBhZDE5ODNfYWRjX25pZHNbMV0gPSB7IEFEMTk4M19BREMgfTsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3QgYWQxOTgzX2NhcHNyY19uaWRzWzFdID0geyAweDE1IH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhZDE5ODNfY2FwdHVyZV9zb3VyY2UgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggYWQxOTgzX2NhcHR1cmVfc291cmNlID0gewogCS5udW1faXRlbXMgPSA0LAogCS5pdGVtcyA9IHsKIAkJeyAiTWljIiwgMHgwIH0sCkBAIC0xMzQ4LDcgKzEzNDgsNyBAQAogICovCiBzdGF0aWMgaW50IGFkMTk4M19zcGRpZl9yb3V0ZV9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewotCXN0YXRpYyBjaGFyICp0ZXh0c1tdID0geyAiUENNIiwgIkFEQyIgfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRleHRzW10gPSB7ICJQQ00iLCAiQURDIiB9OwogCiAJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CiAJdWluZm8tPmNvdW50ID0gMTsKQEAgLTEzODUsNyArMTM4NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZDE5ODNfbWl4ZXJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxOTgzX21peGVyc1tdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MDUsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IFBsYXliYWNrIFN3aXRjaCIsIDB4MDUsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDB4MDYsIDB4MCwgSERBX09VVFBVVCksCkBAIC0xNDE4LDcgKzE0MTgsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWQxOTgzX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWQxOTgzX2luaXRfdmVyYnNbXSA9IHsKIAkvKiBGcm9udCwgSFAsIE1vbm87IG11dGUgYXMgZGVmYXVsdCAqLwogCXsweDA1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwODB9LAogCXsweDA2LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwODB9LApAQCAtMTQ1OCw3ICsxNDU4LDcgQEAKIH07CiAKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCi1zdGF0aWMgc3RydWN0IGhkYV9hbXBfbGlzdCBhZDE5ODNfbG9vcGJhY2tzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9hbXBfbGlzdCBhZDE5ODNfbG9vcGJhY2tzW10gPSB7CiAJeyAweDEyLCBIREFfT1VUUFVULCAwIH0sIC8qIE1pYyAqLwogCXsgMHgxMywgSERBX09VVFBVVCwgMCB9LCAvKiBMaW5lICovCiAJeyB9IC8qIGVuZCAqLwpAQCAtMTUxOCwxMiArMTUxOCwxMiBAQAogI2RlZmluZSBBRDE5ODFfREFDCQkweDAzCiAjZGVmaW5lIEFEMTk4MV9BREMJCTB4MDQKIAotc3RhdGljIGhkYV9uaWRfdCBhZDE5ODFfZGFjX25pZHNbMV0gPSB7IEFEMTk4MV9EQUMgfTsKLXN0YXRpYyBoZGFfbmlkX3QgYWQxOTgxX2FkY19uaWRzWzFdID0geyBBRDE5ODFfQURDIH07Ci1zdGF0aWMgaGRhX25pZF90IGFkMTk4MV9jYXBzcmNfbmlkc1sxXSA9IHsgMHgxNSB9Oworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBhZDE5ODFfZGFjX25pZHNbMV0gPSB7IEFEMTk4MV9EQUMgfTsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3QgYWQxOTgxX2FkY19uaWRzWzFdID0geyBBRDE5ODFfQURDIH07CitzdGF0aWMgY29uc3QgaGRhX25pZF90IGFkMTk4MV9jYXBzcmNfbmlkc1sxXSA9IHsgMHgxNSB9OwogCiAvKiAweDBjLCAweDA5LCAweDBlLCAweDBmLCAweDE5LCAweDA1LCAweDE4LCAweDE3ICovCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWQxOTgxX2NhcHR1cmVfc291cmNlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFkMTk4MV9jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gNywKIAkuaXRlbXMgPSB7CiAJCXsgIkZyb250IE1pYyIsIDB4MCB9LApAQCAtMTUzNiw3ICsxNTM2LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkMTk4MV9taXhlcnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZDE5ODFfbWl4ZXJzW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwgMHgwNSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwNSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwNiwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTE1NzcsNyArMTU3Nyw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhZDE5ODFfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhZDE5ODFfaW5pdF92ZXJic1tdID0gewogCS8qIEZyb250LCBIUCwgTW9ubzsgbXV0ZSBhcyBkZWZhdWx0ICovCiAJezB4MDUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjA4MH0sCiAJezB4MDYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjA4MH0sCkBAIC0xNjI1LDcgKzE2MjUsNyBAQAogfTsKIAogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKLXN0YXRpYyBzdHJ1Y3QgaGRhX2FtcF9saXN0IGFkMTk4MV9sb29wYmFja3NbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2FtcF9saXN0IGFkMTk4MV9sb29wYmFja3NbXSA9IHsKIAl7IDB4MTIsIEhEQV9PVVRQVVQsIDAgfSwgLyogRnJvbnQgTWljICovCiAJeyAweDEzLCBIREFfT1VUUFVULCAwIH0sIC8qIExpbmUgKi8KIAl7IDB4MWIsIEhEQV9PVVRQVVQsIDAgfSwgLyogQXV4ICovCkBAIC0xNjQ1LDcgKzE2NDUsNyBAQAogI2RlZmluZSBBRDE5ODFfSFBfRVZFTlQJCTB4MzcKICNkZWZpbmUgQUQxOTgxX01JQ19FVkVOVAkweDM4CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWQxOTgxX2hwX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWQxOTgxX2hwX2luaXRfdmVyYnNbXSA9IHsKIAl7MHgwNSwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDB4MDAgfSwgLyogZGVmYXVsdCBvZmYgKi8KIAkvKiBwaW4gc2Vuc2luZyBvbiBIUCBhbmQgTWljIGphY2tzICovCiAJezB4MDYsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBRDE5ODFfSFBfRVZFTlR9LApAQCAtMTY3NCw3ICsxNjc0LDcgQEAKIH0KIAogLyogYmluZCB2b2x1bWVzIG9mIGJvdGggTklEIDB4MDUgYW5kIDB4MDYgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX2JpbmRfY3RscyBhZDE5ODFfaHBfYmluZF9tYXN0ZXJfdm9sID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfYmluZF9jdGxzIGFkMTk4MV9ocF9iaW5kX21hc3Rlcl92b2wgPSB7CiAJLm9wcyA9ICZzbmRfaGRhX2JpbmRfdm9sLAogCS52YWx1ZXMgPSB7CiAJCUhEQV9DT01QT1NFX0FNUF9WQUwoMHgwNSwgMywgMCwgSERBX09VVFBVVCksCkBAIC0xNjk2LDEyICsxNjk2LDEyIEBACiAvKiB0b2dnbGUgaW5wdXQgb2YgYnVpbHQtaW4gYW5kIG1pYyBqYWNrIGFwcHJvcHJpYXRlbHkgKi8KIHN0YXRpYyB2b2lkIGFkMTk4MV9ocF9hdXRvbWljKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewotCXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgbWljX2phY2tfb25bXSA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIG1pY19qYWNrX29uW10gPSB7CiAJCXsweDFmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwODB9LAogCQl7MHgxZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDAwfSwKIAkJe30KIAl9OwotCXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgbWljX2phY2tfb2ZmW10gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBtaWNfamFja19vZmZbXSA9IHsKIAkJezB4MWUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjA4MH0sCiAJCXsweDFmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwMDB9LAogCQl7fQpAQCAtMTczMCw3ICsxNzMwLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhZDE5ODFfaHBfY2FwdHVyZV9zb3VyY2UgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggYWQxOTgxX2hwX2NhcHR1cmVfc291cmNlID0gewogCS5udW1faXRlbXMgPSAzLAogCS5pdGVtcyA9IHsKIAkJeyAiTWljIiwgMHgwIH0sCkBAIC0xNzM5LDcgKzE3MzksNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxOTgxX2hwX21peGVyc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkMTk4MV9ocF9taXhlcnNbXSA9IHsKIAlIREFfQklORF9WT0woIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAmYWQxOTgxX2hwX2JpbmRfbWFzdGVyX3ZvbCksCiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKQEAgLTE3OTAsNyArMTc5MCw3IEBACiB9CiAKIC8qIGNvbmZpZ3VyYXRpb24gZm9yIFRvc2hpYmEgTGFwdG9wcyAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhZDE5ODFfdG9zaGliYV9pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFkMTk4MV90b3NoaWJhX2luaXRfdmVyYnNbXSA9IHsKIAl7MHgwNSwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDB4MDEgfSwgLyogZGVmYXVsdCBvbiAqLwogCS8qIHBpbiBzZW5zaW5nIG9uIEhQIGFuZCBNaWMgamFja3MgKi8KIAl7MHgwNiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IEFEMTk4MV9IUF9FVkVOVH0sCkBAIC0xNzk4LDE0ICsxNzk4LDE0IEBACiAJe30KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZDE5ODFfdG9zaGliYV9taXhlcnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZDE5ODFfdG9zaGliYV9taXhlcnNbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJBbXAgVm9sdW1lIiwgMHgxYSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQW1wIFN3aXRjaCIsIDB4MWEsIDB4MCwgSERBX09VVFBVVCksCiAJeyB9CiB9OwogCiAvKiBjb25maWd1cmF0aW9uIGZvciBMZW5vdm8gVGhpbmtwYWQgVDYwICovCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxOTgxX3RoaW5rcGFkX21peGVyc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkMTk4MV90aGlua3BhZF9taXhlcnNbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwNSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MDUsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiUENNIFBsYXliYWNrIFZvbHVtZSIsIDB4MTEsIDB4MCwgSERBX09VVFBVVCksCkBAIC0xODM1LDcgKzE4MzUsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhZDE5ODFfdGhpbmtwYWRfY2FwdHVyZV9zb3VyY2UgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggYWQxOTgxX3RoaW5rcGFkX2NhcHR1cmVfc291cmNlID0gewogCS5udW1faXRlbXMgPSAzLAogCS5pdGVtcyA9IHsKIAkJeyAiTWljIiwgMHgwIH0sCkBAIC0xODYwLDcgKzE4NjAsNyBAQAogCVtBRDE5ODFfVE9TSElCQV0JPSAidG9zaGliYSIKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhZDE5ODFfY2ZnX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFkMTk4MV9jZmdfdGJsW10gPSB7CiAJU05EX1BDSV9RVUlSSygweDEwMTQsIDB4MDU5NywgIkxlbm92byBaNjAiLCBBRDE5ODFfVEhJTktQQUQpLAogCVNORF9QQ0lfUVVJUksoMHgxMDE0LCAweDA1YjcsICJMZW5vdm8gWjYwbSIsIEFEMTk4MV9USElOS1BBRCksCiAJLyogQWxsIEhQIG1vZGVscyAqLwpAQCAtMjA3NSwzMiArMjA3NSwzMiBAQAogICogbWl4ZXJzCiAgKi8KIAotc3RhdGljIGhkYV9uaWRfdCBhZDE5ODhfNnN0YWNrX2RhY19uaWRzWzRdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBhZDE5ODhfNnN0YWNrX2RhY19uaWRzWzRdID0gewogCTB4MDQsIDB4MDYsIDB4MDUsIDB4MGEKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3QgYWQxOTg4XzNzdGFja19kYWNfbmlkc1szXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3QgYWQxOTg4XzNzdGFja19kYWNfbmlkc1szXSA9IHsKIAkweDA0LCAweDA1LCAweDBhCiB9OwogCiAvKiBmb3IgQUQxOTg4QSByZXZpc2lvbi0yLCBEQUMyLTQgYXJlIHN3YXBwZWQgKi8KLXN0YXRpYyBoZGFfbmlkX3QgYWQxOTg4XzZzdGFja19kYWNfbmlkc19yZXYyWzRdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBhZDE5ODhfNnN0YWNrX2RhY19uaWRzX3JldjJbNF0gPSB7CiAJMHgwNCwgMHgwNSwgMHgwYSwgMHgwNgogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBhZDE5ODhfYWx0X2RhY19uaWRbMV0gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IGFkMTk4OF9hbHRfZGFjX25pZFsxXSA9IHsKIAkweDAzCiB9OwogCi1zdGF0aWMgaGRhX25pZF90IGFkMTk4OF8zc3RhY2tfZGFjX25pZHNfcmV2MlszXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3QgYWQxOTg4XzNzdGFja19kYWNfbmlkc19yZXYyWzNdID0gewogCTB4MDQsIDB4MGEsIDB4MDYKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3QgYWQxOTg4X2FkY19uaWRzWzNdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBhZDE5ODhfYWRjX25pZHNbM10gPSB7CiAJMHgwOCwgMHgwOSwgMHgwZgogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBhZDE5ODhfY2Fwc3JjX25pZHNbM10gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IGFkMTk4OF9jYXBzcmNfbmlkc1szXSA9IHsKIAkweDBjLCAweDBkLCAweDBlCiB9OwogCkBAIC0yMTA4LDExICsyMTA4LDExIEBACiAjZGVmaW5lIEFEMTk4OF9TUERJRl9PVVRfSERNSQkweDBiCiAjZGVmaW5lIEFEMTk4OF9TUERJRl9JTgkJMHgwNwogCi1zdGF0aWMgaGRhX25pZF90IGFkMTk4OWJfc2xhdmVfZGlnX291dHNbXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3QgYWQxOTg5Yl9zbGF2ZV9kaWdfb3V0c1tdID0gewogCUFEMTk4OF9TUERJRl9PVVQsIEFEMTk4OF9TUERJRl9PVVRfSERNSSwgMAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFkMTk4OF82c3RhY2tfY2FwdHVyZV9zb3VyY2UgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggYWQxOTg4XzZzdGFja19jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gNSwKIAkuaXRlbXMgPSB7CiAJCXsgIkZyb250IE1pYyIsIDB4MSB9LAkvKiBwb3J0LUIgKi8KQEAgLTIxMjMsNyArMjEyMyw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhZDE5ODhfbGFwdG9wX2NhcHR1cmVfc291cmNlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFkMTk4OF9sYXB0b3BfY2FwdHVyZV9zb3VyY2UgPSB7CiAJLm51bV9pdGVtcyA9IDMsCiAJLml0ZW1zID0gewogCQl7ICJNaWMvTGluZSIsIDB4MSB9LAkvKiBwb3J0LUIgKi8KQEAgLTIxNjYsNyArMjE2Niw3IEBACiB9CiAKIC8qIDYtc3RhY2sgbW9kZSAqLwotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkMTk4OF82c3RhY2tfbWl4ZXJzMVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkMTk4OF82c3RhY2tfbWl4ZXJzMVtdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MDQsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiU3Vycm91bmQgUGxheWJhY2sgVm9sdW1lIiwgMHgwNiwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FX01PTk8oIkNlbnRlciBQbGF5YmFjayBWb2x1bWUiLCAweDA1LCAxLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMjE3NSw3ICsyMTc1LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxOTg4XzZzdGFja19taXhlcnMxX3JldjJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZDE5ODhfNnN0YWNrX21peGVyczFfcmV2MltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MDQsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiU3Vycm91bmQgUGxheWJhY2sgVm9sdW1lIiwgMHgwNSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FX01PTk8oIkNlbnRlciBQbGF5YmFjayBWb2x1bWUiLCAweDBhLCAxLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMjE4NCw3ICsyMTg0LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxOTg4XzZzdGFja19taXhlcnMyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxOTg4XzZzdGFja19taXhlcnMyW10gPSB7CiAJSERBX0JJTkRfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgyOSwgMiwgSERBX0lOUFVUKSwKIAlIREFfQklORF9NVVRFKCJTdXJyb3VuZCBQbGF5YmFjayBTd2l0Y2giLCAweDJhLCAyLCBIREFfSU5QVVQpLAogCUhEQV9CSU5EX01VVEVfTU9OTygiQ2VudGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MjcsIDEsIDIsIEhEQV9JTlBVVCksCkBAIC0yMjExLDE0ICsyMjExLDE0IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkMTk4OF82c3RhY2tfZnBfbWl4ZXJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxOTg4XzZzdGFja19mcF9taXhlcnNbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwMywgMHgwLCBIREFfT1VUUFVUKSwKIAogCXsgfSAvKiBlbmQgKi8KIH07CiAKIC8qIDMtc3RhY2sgbW9kZSAqLwotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkMTk4OF8zc3RhY2tfbWl4ZXJzMVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkMTk4OF8zc3RhY2tfbWl4ZXJzMVtdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MDQsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiU3Vycm91bmQgUGxheWJhY2sgVm9sdW1lIiwgMHgwYSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FX01PTk8oIkNlbnRlciBQbGF5YmFjayBWb2x1bWUiLCAweDA1LCAxLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMjIyNiw3ICsyMjI2LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxOTg4XzNzdGFja19taXhlcnMxX3JldjJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZDE5ODhfM3N0YWNrX21peGVyczFfcmV2MltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MDQsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiU3Vycm91bmQgUGxheWJhY2sgVm9sdW1lIiwgMHgwYSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FX01PTk8oIkNlbnRlciBQbGF5YmFjayBWb2x1bWUiLCAweDA2LCAxLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMjIzNCw3ICsyMjM0LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxOTg4XzNzdGFja19taXhlcnMyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxOTg4XzNzdGFja19taXhlcnMyW10gPSB7CiAJSERBX0JJTkRfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgyOSwgMiwgSERBX0lOUFVUKSwKIAlIREFfQklORF9NVVRFKCJTdXJyb3VuZCBQbGF5YmFjayBTd2l0Y2giLCAweDJjLCAyLCBIREFfSU5QVVQpLAogCUhEQV9CSU5EX01VVEVfTU9OTygiQ2VudGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MjYsIDEsIDIsIEhEQV9JTlBVVCksCkBAIC0yMjY4LDcgKzIyNjgsNyBAQAogfTsKIAogLyogbGFwdG9wIG1vZGUgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZDE5ODhfbGFwdG9wX21peGVyc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkMTk4OF9sYXB0b3BfbWl4ZXJzW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiUENNIFBsYXliYWNrIFZvbHVtZSIsIDB4MDQsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIlBDTSBQbGF5YmFjayBTd2l0Y2giLCAweDI5LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0JJTkRfTVVURSgiTW9ubyBQbGF5YmFjayBTd2l0Y2giLCAweDFlLCAyLCBIREFfSU5QVVQpLApAQCAtMjI5OSw3ICsyMjk5LDcgQEAKIH07CiAKIC8qIGNhcHR1cmUgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZDE5ODhfY2FwdHVyZV9taXhlcnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZDE5ODhfY2FwdHVyZV9taXhlcnNbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAxLCAweDBkLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMjMyNCw3ICsyMzI0LDcgQEAKIHN0YXRpYyBpbnQgYWQxOTg4X3NwZGlmX3BsYXliYWNrX3NvdXJjZV9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCQkJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCiB7Ci0Jc3RhdGljIGNoYXIgKnRleHRzW10gPSB7CisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB0ZXh0c1tdID0gewogCQkiUENNIiwgIkFEQzEiLCAiQURDMiIsICJBREMzIgogCX07CiAJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CkBAIC0yNDA1LDcgKzI0MDUsNyBAQAogCXJldHVybiBjaGFuZ2U7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZDE5ODhfc3BkaWZfb3V0X21peGVyc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkMTk4OF9zcGRpZl9vdXRfbWl4ZXJzW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiSUVDOTU4IFBsYXliYWNrIFZvbHVtZSIsIDB4MWIsIDB4MCwgSERBX09VVFBVVCksCiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKQEAgLTI0MTgsMTIgKzI0MTgsMTIgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxOTg4X3NwZGlmX2luX21peGVyc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkMTk4OF9zcGRpZl9pbl9taXhlcnNbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJJRUM5NTggQ2FwdHVyZSBWb2x1bWUiLCAweDFjLCAweDAsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkMTk4OV9zcGRpZl9vdXRfbWl4ZXJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxOTg5X3NwZGlmX291dF9taXhlcnNbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJJRUM5NTggUGxheWJhY2sgVm9sdW1lIiwgMHgxYiwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJIRE1JIFBsYXliYWNrIFZvbHVtZSIsIDB4MWQsIDB4MCwgSERBX09VVFBVVCksCiAJeyB9IC8qIGVuZCAqLwpAQCAtMjQzNiw3ICsyNDM2LDcgQEAKIC8qCiAgKiBmb3IgNi1zdGFjayAoK2RpZykKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhZDE5ODhfNnN0YWNrX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWQxOTg4XzZzdGFja19pbml0X3ZlcmJzW10gPSB7CiAJLyogRnJvbnQsIFN1cnJvdW5kLCBDTEZFLCBzaWRlIERBQzsgdW5tdXRlIGFzIGRlZmF1bHQgKi8KIAl7MHgwNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAogCXsweDA2LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCkBAIC0yNDk2LDcgKzI0OTYsNyBAQAogCXsgfQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhZDE5ODhfNnN0YWNrX2ZwX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWQxOTg4XzZzdGFja19mcF9pbml0X3ZlcmJzW10gPSB7CiAJLyogSGVhZHBob25lOyB1bm11dGUgYXMgZGVmYXVsdCAqLwogCXsweDAzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCiAJLyogUG9ydC1BIGZyb250IGhlYWRwaG9uIHBhdGggKi8KQEAgLTI1MDksNyArMjUwOSw3IEBACiAJeyB9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFkMTk4OF9jYXB0dXJlX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWQxOTg4X2NhcHR1cmVfaW5pdF92ZXJic1tdID0gewogCS8qIG11dGUgYW5hbG9nIG1peCAqLwogCXsweDIwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCiAJezB4MjAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKQEAgLTI1MjcsNyArMjUyNyw3IEBACiAJeyB9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFkMTk4OF9zcGRpZl9pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFkMTk4OF9zcGRpZl9pbml0X3ZlcmJzW10gPSB7CiAJLyogU1BESUYgb3V0IHNlbCAqLwogCXsweDAyLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwgLyogUENNICovCiAJezB4MGIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDB9LCAvKiBBREMxICovCkBAIC0yNTM5LDE0ICsyNTM5LDE0IEBACiAJeyB9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFkMTk4OF9zcGRpZl9pbl9pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFkMTk4OF9zcGRpZl9pbl9pbml0X3ZlcmJzW10gPSB7CiAJLyogdW5tdXRlIFNQRElGIGlucHV0IHBpbiAqLwogCXsweDFjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAl7IH0KIH07CiAKIC8qIEFEMTk4OSBoYXMgbm8gQURDIC0+IFNQRElGIHJvdXRlICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFkMTk4OV9zcGRpZl9pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFkMTk4OV9zcGRpZl9pbml0X3ZlcmJzW10gPSB7CiAJLyogU1BESUYtMSBvdXQgcGluICovCiAJezB4MWIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAogCXsweDFiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB8IDB4Mjd9LCAvKiAwZEIgKi8KQEAgLTI1NTksNyArMjU1OSw3IEBACiAvKgogICogdmVyYnMgZm9yIDNzdGFjayAoK2RpZykKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhZDE5ODhfM3N0YWNrX2NoMl9pbml0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFkMTk4OF8zc3RhY2tfY2gyX2luaXRbXSA9IHsKIAkvKiBzZXQgcG9ydC1DIHRvIGxpbmUtaW4gKi8KIAl7IDB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURSB9LAogCXsgMHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU4gfSwKQEAgLTI1NjksNyArMjU2OSw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhZDE5ODhfM3N0YWNrX2NoNl9pbml0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFkMTk4OF8zc3RhY2tfY2g2X2luaXRbXSA9IHsKIAkvKiBzZXQgcG9ydC1DIHRvIHN1cnJvdW5kIG91dCAqLwogCXsgMHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCiAJeyAweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB9LApAQCAtMjU3OSwxMiArMjU3OSwxMiBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhZDE5ODhfM3N0YWNrX21vZGVzWzJdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFkMTk4OF8zc3RhY2tfbW9kZXNbMl0gPSB7CiAJeyAyLCBhZDE5ODhfM3N0YWNrX2NoMl9pbml0IH0sCiAJeyA2LCBhZDE5ODhfM3N0YWNrX2NoNl9pbml0IH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFkMTk4OF8zc3RhY2tfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhZDE5ODhfM3N0YWNrX2luaXRfdmVyYnNbXSA9IHsKIAkvKiBGcm9udCwgU3Vycm91bmQsIENMRkUsIHNpZGUgREFDOyB1bm11dGUgYXMgZGVmYXVsdCAqLwogCXsweDA0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCiAJezB4MDYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKQEAgLTI2NDQsMTMgKzI2NDQsMTMgQEAKIC8qCiAgKiB2ZXJicyBmb3IgbGFwdG9wIG1vZGUgKCtkaWcpCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWQxOTg4X2xhcHRvcF9ocF9vbltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhZDE5ODhfbGFwdG9wX2hwX29uW10gPSB7CiAJLyogdW5tdXRlIHBvcnQtQSBhbmQgbXV0ZSBwb3J0LUQgKi8KIAl7IDB4MTEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIH0sCiAJeyAweDEyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEUgfSwKIAl7IH0gLyogZW5kICovCiB9Owotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhZDE5ODhfbGFwdG9wX2hwX29mZltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhZDE5ODhfbGFwdG9wX2hwX29mZltdID0gewogCS8qIG11dGUgcG9ydC1BIGFuZCB1bm11dGUgcG9ydC1EICovCiAJeyAweDExLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEUgfSwKIAl7IDB4MTIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIH0sCkBAIC0yNjU5LDcgKzI2NTksNyBAQAogCiAjZGVmaW5lIEFEMTk4OF9IUF9FVkVOVAkweDAxCiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWQxOTg4X2xhcHRvcF9pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFkMTk4OF9sYXB0b3BfaW5pdF92ZXJic1tdID0gewogCS8qIEZyb250LCBTdXJyb3VuZCwgQ0xGRSwgc2lkZSBEQUM7IHVubXV0ZSBhcyBkZWZhdWx0ICovCiAJezB4MDQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKIAl7MHgwNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LApAQCAtMjcyMyw3ICsyNzIzLDcgQEAKIH0gCiAKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCi1zdGF0aWMgc3RydWN0IGhkYV9hbXBfbGlzdCBhZDE5ODhfbG9vcGJhY2tzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9hbXBfbGlzdCBhZDE5ODhfbG9vcGJhY2tzW10gPSB7CiAJeyAweDIwLCBIREFfSU5QVVQsIDAgfSwgLyogRnJvbnQgTWljICovCiAJeyAweDIwLCBIREFfSU5QVVQsIDEgfSwgLyogTGluZSAqLwogCXsgMHgyMCwgSERBX0lOUFVULCA0IH0sIC8qIE1pYyAqLwpAQCAtMjc0MSw3ICsyNzQxLDcgQEAKIAlBRF9DVExfV0lER0VUX01VVEUsCiAJQURfQ1RMX0JJTkRfTVVURSwKIH07Ci1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxOTg4X2NvbnRyb2xfdGVtcGxhdGVzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxOTg4X2NvbnRyb2xfdGVtcGxhdGVzW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRShOVUxMLCAwLCAwLCAwKSwKIAlIREFfQ09ERUNfTVVURShOVUxMLCAwLCAwLCAwKSwKIAlIREFfQklORF9NVVRFKE5VTEwsIDAsIDAsIDApLApAQCAtMjc3MCwxOCArMjc3MCwxOCBAQAogI2RlZmluZSBBRDE5ODhfUElOX0NEX05JRAkJMHgxOAogI2RlZmluZSBBRDE5ODhfUElOX0JFRVBfTklECQkweDEwCiAKLXN0YXRpYyBoZGFfbmlkX3QgYWQxOTg4X21peGVyX25pZHNbOF0gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IGFkMTk4OF9taXhlcl9uaWRzWzhdID0gewogCS8qIEEgICAgIEIgICAgIEMgICAgIEQgICAgIEUgICAgIEYgICAgIEcgICAgIEggKi8KIAkweDIyLCAweDJiLCAweDJjLCAweDI5LCAweDI2LCAweDJhLCAweDI3LCAweDI4CiB9OwogCiBzdGF0aWMgaW5saW5lIGhkYV9uaWRfdCBhZDE5ODhfaWR4X3RvX2RhYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IGlkeCkKIHsKLQlzdGF0aWMgaGRhX25pZF90IGlkeF90b19kYWNbOF0gPSB7CisJc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBpZHhfdG9fZGFjWzhdID0gewogCQkvKiBBICAgICBCICAgICBDICAgICBEICAgICBFICAgICBGICAgICBHICAgICBIICovCiAJCTB4MDQsIDB4MDYsIDB4MDUsIDB4MDQsIDB4MGEsIDB4MDYsIDB4MDUsIDB4MGEKIAl9OwotCXN0YXRpYyBoZGFfbmlkX3QgaWR4X3RvX2RhY19yZXYyWzhdID0geworCXN0YXRpYyBjb25zdCBoZGFfbmlkX3QgaWR4X3RvX2RhY19yZXYyWzhdID0gewogCQkvKiBBICAgICBCICAgICBDICAgICBEICAgICBFICAgICBGICAgICBHICAgICBIICovCiAJCTB4MDQsIDB4MDUsIDB4MGEsIDB4MDQsIDB4MDYsIDB4MDUsIDB4MGEsIDB4MDYKIAl9OwpAQCAtMjc5MSwxMyArMjc5MSwxMyBAQAogCQlyZXR1cm4gaWR4X3RvX2RhY1tpZHhdOwogfQogCi1zdGF0aWMgaGRhX25pZF90IGFkMTk4OF9ib29zdF9uaWRzWzhdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBhZDE5ODhfYm9vc3Rfbmlkc1s4XSA9IHsKIAkweDM4LCAweDM5LCAweDNhLCAweDNkLCAweDNjLCAweDNiLCAwLCAwCiB9OwogCiBzdGF0aWMgaW50IGFkMTk4OF9waW5faWR4KGhkYV9uaWRfdCBuaWQpCiB7Ci0Jc3RhdGljIGhkYV9uaWRfdCBhZDE5ODhfaW9fcGluc1s4XSA9IHsKKwlzdGF0aWMgY29uc3QgaGRhX25pZF90IGFkMTk4OF9pb19waW5zWzhdID0gewogCQkweDExLCAweDE0LCAweDE1LCAweDEyLCAweDE3LCAweDE2LCAweDI0LCAweDI1CiAJfTsKIAlpbnQgaTsKQEAgLTI4MDksNyArMjgwOSw3IEBACiAKIHN0YXRpYyBpbnQgYWQxOTg4X3Bpbl90b19sb29wYmFja19pZHgoaGRhX25pZF90IG5pZCkKIHsKLQlzdGF0aWMgaW50IGxvb3BiYWNrX2lkeFs4XSA9IHsKKwlzdGF0aWMgY29uc3QgaW50IGxvb3BiYWNrX2lkeFs4XSA9IHsKIAkJMiwgMCwgMSwgMywgNCwgNSwgMSwgNAogCX07CiAJc3dpdGNoIChuaWQpIHsKQEAgLTI4MjIsNyArMjgyMiw3IEBACiAKIHN0YXRpYyBpbnQgYWQxOTg4X3Bpbl90b19hZGNfaWR4KGhkYV9uaWRfdCBuaWQpCiB7Ci0Jc3RhdGljIGludCBhZGNfaWR4WzhdID0geworCXN0YXRpYyBjb25zdCBpbnQgYWRjX2lkeFs4XSA9IHsKIAkJMCwgMSwgMiwgOCwgNCwgMywgNiwgNwogCX07CiAJc3dpdGNoIChuaWQpIHsKQEAgLTI4NDUsNyArMjg0NSw3IEBACiAJLyogY2hlY2sgdGhlIHBpbnMgaGFyZHdpcmVkIHRvIGF1ZGlvIHdpZGdldCAqLwogCWZvciAoaSA9IDA7IGkgPCBjZmctPmxpbmVfb3V0czsgaSsrKSB7CiAJCWlkeCA9IGFkMTk4OF9waW5faWR4KGNmZy0+bGluZV9vdXRfcGluc1tpXSk7Ci0JCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2ldID0gYWQxOTg4X2lkeF90b19kYWMoY29kZWMsIGlkeCk7CisJCXNwZWMtPnByaXZhdGVfZGFjX25pZHNbaV0gPSBhZDE5ODhfaWR4X3RvX2RhYyhjb2RlYywgaWR4KTsKIAl9CiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSBjZmctPmxpbmVfb3V0czsKIAlyZXR1cm4gMDsKQEAgLTMwNzAsNiArMzA3MCw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5udW1faW5wdXRzOyBpKyspIHsKIAkJaGRhX25pZF90IG5pZCA9IGNmZy0+aW5wdXRzW2ldLnBpbjsKKwkJaW50IHR5cGUgPSBjZmctPmlucHV0c1tpXS50eXBlOwogCQlzd2l0Y2ggKG5pZCkgewogCQljYXNlIDB4MTU6IC8qIHBvcnQtQyAqLwogCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgzMywgMCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MCk7CkBAIC0zMDc5LDcgKzMwODAsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCi0JCQkJICAgIGkgPT0gQVVUT19QSU5fTUlDID8gUElOX1ZSRUY4MCA6IFBJTl9JTik7CisJCQkJICAgIHR5cGUgPT0gQVVUT19QSU5fTUlDID8gUElOX1ZSRUY4MCA6IFBJTl9JTik7CiAJCWlmIChuaWQgIT0gQUQxOTg4X1BJTl9DRF9OSUQpCiAJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCiAJCQkJCSAgICBBTVBfT1VUX01VVEUpOwpAQCAtMzE1NCw3ICszMTU1LDcgQEAKIAlbQUQxOTg4X0FVVE9dCQk9ICJhdXRvIiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhZDE5ODhfY2ZnX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFkMTk4OF9jZmdfdGJsW10gPSB7CiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODFlYywgIkFzdXMgUDVCLURMWCIsIEFEMTk4OF82U1RBQ0tfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MWY2LCAiQXN1cyBNMk4tU0xJIiwgQUQxOTg4XzZTVEFDS19ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgyNzcsICJBc3VzIFA1Sy1FL1dJRkktQVAiLCBBRDE5ODhfNlNUQUNLX0RJRyksCkBAIC0zMzQyLDIxICszMzQzLDIxIEBACiAgKiBidXQgbm8gYnVpbGQtdXAgZnJhbWV3b3JrIGlzIGdpdmVuLCBzbyBmYXIuCiAgKi8KIAotc3RhdGljIGhkYV9uaWRfdCBhZDE4ODRfZGFjX25pZHNbMV0gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IGFkMTg4NF9kYWNfbmlkc1sxXSA9IHsKIAkweDA0LAogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBhZDE4ODRfYWRjX25pZHNbMl0gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IGFkMTg4NF9hZGNfbmlkc1syXSA9IHsKIAkweDA4LCAweDA5LAogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBhZDE4ODRfY2Fwc3JjX25pZHNbMl0gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IGFkMTg4NF9jYXBzcmNfbmlkc1syXSA9IHsKIAkweDBjLCAweDBkLAogfTsKIAogI2RlZmluZSBBRDE4ODRfU1BESUZfT1VUCTB4MDIKIAotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFkMTg4NF9jYXB0dXJlX3NvdXJjZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCBhZDE4ODRfY2FwdHVyZV9zb3VyY2UgPSB7CiAJLm51bV9pdGVtcyA9IDQsCiAJLml0ZW1zID0gewogCQl7ICJGcm9udCBNaWMiLCAweDAgfSwKQEAgLTMzNjYsNyArMzM2Nyw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZDE4ODRfYmFzZV9taXhlcnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZDE4ODRfYmFzZV9taXhlcnNbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwgMHgwNCwgMHgwLCBIREFfT1VUUFVUKSwKIAkvKiBIREFfQ09ERUNfVk9MVU1FX0lEWCgiUENNIFBsYXliYWNrIFZvbHVtZSIsIDEsIDB4MDMsIDB4MCwgSERBX09VVFBVVCksICovCiAJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDExLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMzQxMCw3ICszNDExLDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxOTg0X2RtaWNfbWl4ZXJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxOTg0X2RtaWNfbWl4ZXJzW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiRGlnaXRhbCBNaWMgQ2FwdHVyZSBWb2x1bWUiLCAweDA1LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkRpZ2l0YWwgTWljIENhcHR1cmUgU3dpdGNoIiwgMHgwNSwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJEaWdpdGFsIE1pYyBDYXB0dXJlIFZvbHVtZSIsIDEsIDB4MDYsIDB4MCwKQEAgLTM0MjMsNyArMzQyNCw3IEBACiAvKgogICogaW5pdGlhbGl6YXRpb24gdmVyYnMKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhZDE4ODRfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhZDE4ODRfaW5pdF92ZXJic1tdID0gewogCS8qIERBQ3M7IG11dGUgYXMgZGVmYXVsdCAqLwogCXsweDAzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAogCXsweDA0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LApAQCAtMzQ2OSw3ICszNDcwLDcgQEAKIH07CiAKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCi1zdGF0aWMgc3RydWN0IGhkYV9hbXBfbGlzdCBhZDE4ODRfbG9vcGJhY2tzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9hbXBfbGlzdCBhZDE4ODRfbG9vcGJhY2tzW10gPSB7CiAJeyAweDIwLCBIREFfSU5QVVQsIDAgfSwgLyogRnJvbnQgTWljICovCiAJeyAweDIwLCBIREFfSU5QVVQsIDEgfSwgLyogTWljICovCiAJeyAweDIwLCBIREFfSU5QVVQsIDIgfSwgLyogQ0QgKi8KQEAgLTM1NDEsNyArMzU0Miw3IEBACiAvKgogICogTGVub3ZvIFRoaW5rcGFkIFQ2MS9YNjEKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFkMTk4NF90aGlua3BhZF9jYXB0dXJlX3NvdXJjZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCBhZDE5ODRfdGhpbmtwYWRfY2FwdHVyZV9zb3VyY2UgPSB7CiAJLm51bV9pdGVtcyA9IDQsCiAJLml0ZW1zID0gewogCQl7ICJNaWMiLCAweDAgfSwKQEAgLTM1NTUsNyArMzU1Niw3IEBACiAvKgogICogRGVsbCBQcmVjaXNpb24gVDM0MDAKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFkMTk4NF9kZWxsX2Rlc2t0b3BfY2FwdHVyZV9zb3VyY2UgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggYWQxOTg0X2RlbGxfZGVza3RvcF9jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gMywKIAkuaXRlbXMgPSB7CiAJCXsgIkZyb250IE1pYyIsIDB4MCB9LApAQCAtMzU2NSw3ICszNTY2LDcgQEAKIH07CiAKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkMTk4NF90aGlua3BhZF9taXhlcnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZDE5ODRfdGhpbmtwYWRfbWl4ZXJzW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiUENNIFBsYXliYWNrIFZvbHVtZSIsIDB4MDQsIDB4MCwgSERBX09VVFBVVCksCiAJLyogSERBX0NPREVDX1ZPTFVNRV9JRFgoIlBDTSBQbGF5YmFjayBWb2x1bWUiLCAxLCAweDAzLCAweDAsIEhEQV9PVVRQVVQpLCAqLwogCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxMSwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTM2MTEsNyArMzYxMiw3IEBACiB9OwogCiAvKiBhZGRpdGlvbmFsIHZlcmJzICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFkMTk4NF90aGlua3BhZF9pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFkMTk4NF90aGlua3BhZF9pbml0X3ZlcmJzW10gPSB7CiAJLyogUG9ydC1FIChkb2NraW5nIHN0YXRpb24gbWljKSBwaW4gKi8KIAl7MHgxYywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKIAl7MHgxYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKQEAgLTM2MjksNyArMzYzMCw3IEBACiAvKgogICogRGVsbCBQcmVjaXNpb24gVDM0MDAKICAqLwotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkMTk4NF9kZWxsX2Rlc2t0b3BfbWl4ZXJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxOTg0X2RlbGxfZGVza3RvcF9taXhlcnNbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwgMHgwNCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MTEsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgxMiwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTM2ODAsNyArMzY4MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gYWQxOTg0X3BjbV9kbWljX2NhcHR1cmUgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9wY21fc3RyZWFtIGFkMTk4NF9wY21fZG1pY19jYXB0dXJlID0gewogCS5zdWJzdHJlYW1zID0gMiwKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gMiwKQEAgLTM3MjIsNyArMzcyMyw3IEBACiAJW0FEMTk4NF9ERUxMX0RFU0tUT1BdCT0gImRlbGxfZGVza3RvcCIsCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWQxOTg0X2NmZ190YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhZDE5ODRfY2ZnX3RibFtdID0gewogCS8qIExlbm92byBUaGlua3BhZCBUNjEvWDYxICovCiAJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxN2FhLCAiTGVub3ZvIFRoaW5rcGFkIiwgQUQxOTg0X1RISU5LUEFEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwMjE0LCAiRGVsbCBUMzQwMCIsIEFEMTk4NF9ERUxMX0RFU0tUT1ApLApAQCAtMzc4Nyw3ICszNzg4LDcgQEAKICAqIFdlIHNoYXJlIHRoZSBzaW5nbGUgREFDIGZvciBib3RoIEhQIGFuZCBsaW5lLW91dHMgKHNlZSBBRDE4ODQvMTk4NCkuCiAgKi8KIAotc3RhdGljIGhkYV9uaWRfdCBhZDE4ODRhX2RhY19uaWRzWzFdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBhZDE4ODRhX2RhY19uaWRzWzFdID0gewogCTB4MDMsCiB9OwogCkBAIC0zNzk2LDcgKzM3OTcsNyBAQAogCiAjZGVmaW5lIEFEMTg4NEFfU1BESUZfT1VUCTB4MDIKIAotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFkMTg4NGFfY2FwdHVyZV9zb3VyY2UgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggYWQxODg0YV9jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gNSwKIAkuaXRlbXMgPSB7CiAJCXsgIkZyb250IE1pYyIsIDB4MCB9LApAQCAtMzgwNyw3ICszODA4LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkMTg4NGFfYmFzZV9taXhlcnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZDE4ODRhX2Jhc2VfbWl4ZXJzW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCAweDIxLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxMSwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTM4NTksNyArMzg2MCw3IEBACiAvKgogICogaW5pdGlhbGl6YXRpb24gdmVyYnMKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhZDE4ODRhX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWQxODg0YV9pbml0X3ZlcmJzW10gPSB7CiAJLyogREFDczsgdW5tdXRlIGFzIGRlZmF1bHQgKi8KIAl7MHgwMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHgyN30sIC8qIDBkQiAqLwogCXsweDA0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweDI3fSwgLyogMGRCICovCkBAIC0zOTE0LDcgKzM5MTUsNyBAQAogfTsKIAogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKLXN0YXRpYyBzdHJ1Y3QgaGRhX2FtcF9saXN0IGFkMTg4NGFfbG9vcGJhY2tzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9hbXBfbGlzdCBhZDE4ODRhX2xvb3BiYWNrc1tdID0gewogCXsgMHgyMCwgSERBX0lOUFVULCAwIH0sIC8qIEZyb250IE1pYyAqLwogCXsgMHgyMCwgSERBX0lOUFVULCAxIH0sIC8qIE1pYyAqLwogCXsgMHgyMCwgSERBX0lOUFVULCAyIH0sIC8qIENEICovCkBAIC0zOTQ3LDcgKzM5NDgsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZDE4ODRhX2xhcHRvcF9taXhlcnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZDE4ODRhX2xhcHRvcF9taXhlcnNbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLApAQCAtMzk3NSw3ICszOTc2LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxODg0YV9tb2JpbGVfbWl4ZXJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxODg0YV9tb2JpbGVfbWl4ZXJzW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCiAJLypIREFfQ09ERUNfTVVURSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksKi8KIAl7CkBAIC00MDk1LDcgKzQwOTYsNyBAQAogfQogCiAvKiBhZGRpdGlvbmFsIHZlcmJzIGZvciBsYXB0b3AgbW9kZWwgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWQxODg0YV9sYXB0b3BfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWQxODg0YV9sYXB0b3BfdmVyYnNbXSA9IHsKIAkvKiBQb3J0LUEgKEhQKSBwaW4gLSBhbHdheXMgdW5tdXRlZCAqLwogCXsweDExLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCiAJLyogUG9ydC1GIChpbnQgc3BlYWtlcikgbWl4ZXIgLSByb3V0ZSBvbmx5IGZyb20gYW5hbG9nIG1peGVyICovCkBAIC00MTI2LDcgKzQxMjcsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWQxODg0YV9tb2JpbGVfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWQxODg0YV9tb2JpbGVfdmVyYnNbXSA9IHsKIAkvKiBEQUNzOyB1bm11dGUgYXMgZGVmYXVsdCAqLwogCXsweDAzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweDI3fSwgLyogMGRCICovCiAJezB4MDQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4Mjd9LCAvKiAwZEIgKi8KQEAgLTQxODEsNyArNDE4Miw3IEBACiAgKiAweDE3IC0gYnVpbHQtaW4gbWljCiAgKi8KIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhZDE5ODRhX3RoaW5rcGFkX3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFkMTk4NGFfdGhpbmtwYWRfdmVyYnNbXSA9IHsKIAkvKiBIUCB1bm11dGUgKi8KIAl7MHgxMSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAogCS8qIGFuYWxvZyBtaXggKi8KQEAgLTQxOTgsNyArNDE5OSw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkMTk4NGFfdGhpbmtwYWRfbWl4ZXJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxOTg0YV90aGlua3BhZF9taXhlcnNbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiUENNIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4NSwgSERBX0lOUFVUKSwKQEAgLTQyMTksNyArNDIyMCw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFkMTk4NGFfdGhpbmtwYWRfY2FwdHVyZV9zb3VyY2UgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggYWQxOTg0YV90aGlua3BhZF9jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gMywKIAkuaXRlbXMgPSB7CiAJCXsgIk1pYyIsIDB4MCB9LApAQCAtNDI2Miw3ICs0MjYzLDcgQEAKICAqIDB4MTUgLSBtaWMtaW4KICAqLwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFkMTk4NGFfcHJlY2lzaW9uX3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFkMTk4NGFfcHJlY2lzaW9uX3ZlcmJzW10gPSB7CiAJLyogVW5tdXRlIG1haW4gb3V0cHV0IHBhdGggKi8KIAl7MHgwMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHgyN30sIC8qIDBkQiAqLwogCXsweDIxLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSArIDB4MWZ9LCAvKiAwZEIgKi8KQEAgLTQyODgsNyArNDI4OSw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkMTk4NGFfcHJlY2lzaW9uX21peGVyc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkMTk4NGFfcHJlY2lzaW9uX21peGVyc1tdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAweDIxLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHg1LCBIREFfSU5QVVQpLApAQCAtNDM0NCw3ICs0MzQ1LDcgQEAKICAqIGRpZ2l0YWwtbWljICgweDE3KSAtIEludGVybmFsIG1pYwogICovCiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWQxOTg0YV90b3VjaHNtYXJ0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFkMTk4NGFfdG91Y2hzbWFydF92ZXJic1tdID0gewogCS8qIERBQ3M7IHVubXV0ZSBhcyBkZWZhdWx0ICovCiAJezB4MDMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4Mjd9LCAvKiAwZEIgKi8KIAl7MHgwNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHgyN30sIC8qIDBkQiAqLwpAQCAtNDM5Niw3ICs0Mzk3LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxOTg0YV90b3VjaHNtYXJ0X21peGVyc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkMTk4NGFfdG91Y2hzbWFydF9taXhlcnNbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKIC8qCUhEQV9DT0RFQ19NVVRFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwqLwogCXsKQEAgLTQ0NzUsNyArNDQ3Niw3IEBACiAJW0FEMTk4NEFfUFJFQ0lTSU9OXQk9ICJwcmVjaXNpb24iLAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFkMTg4NGFfY2ZnX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFkMTg4NGFfY2ZnX3RibFtdID0gewogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDA0YWMsICJQcmVjaXNpb24gUjU1MDAiLCBBRDE5ODRBX1BSRUNJU0lPTiksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzAzMCwgIkhQIiwgQUQxODg0QV9NT0JJTEUpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwMzcsICJIUCAyMjMwcyIsIEFEMTg4NEFfTEFQVE9QKSwKQEAgLTQ2MTQsMjIgKzQ2MTUsMjIgQEAKICAqIHBvcnQtRyAtIHJlYXIgY2xmZS1vdXQgKDZzdGFjaykKICAqLwogCi1zdGF0aWMgaGRhX25pZF90IGFkMTg4Ml9kYWNfbmlkc1szXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3QgYWQxODgyX2RhY19uaWRzWzNdID0gewogCTB4MDQsIDB4MDMsIDB4MDUKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3QgYWQxODgyX2FkY19uaWRzWzJdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBhZDE4ODJfYWRjX25pZHNbMl0gPSB7CiAJMHgwOCwgMHgwOSwKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3QgYWQxODgyX2NhcHNyY19uaWRzWzJdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBhZDE4ODJfY2Fwc3JjX25pZHNbMl0gPSB7CiAJMHgwYywgMHgwZCwKIH07CiAKICNkZWZpbmUgQUQxODgyX1NQRElGX09VVAkweDAyCiAKIC8qIGxpc3Q6IDB4MTEsIDB4MzksIDB4M2EsIDB4MTgsIDB4M2MsIDB4M2IsIDB4MTIsIDB4MjAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhZDE4ODJfY2FwdHVyZV9zb3VyY2UgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggYWQxODgyX2NhcHR1cmVfc291cmNlID0gewogCS5udW1faXRlbXMgPSA1LAogCS5pdGVtcyA9IHsKIAkJeyAiRnJvbnQgTWljIiwgMHgxIH0sCkBAIC00NjQxLDcgKzQ2NDIsNyBAQAogfTsKIAogLyogbGlzdDogMHgxMSwgMHgzOSwgMHgzYSwgMHgzYywgMHgxOCwgMHgxZiwgMHgxMiwgMHgyMCAqLwotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFkMTg4MmFfY2FwdHVyZV9zb3VyY2UgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggYWQxODgyYV9jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gNSwKIAkuaXRlbXMgPSB7CiAJCXsgIkZyb250IE1pYyIsIDB4MSB9LApAQCAtNDY1Miw3ICs0NjUzLDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkMTg4Ml9iYXNlX21peGVyc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkMTg4Ml9iYXNlX21peGVyc1tdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MDQsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiU3Vycm91bmQgUGxheWJhY2sgVm9sdW1lIiwgMHgwMywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FX01PTk8oIkNlbnRlciBQbGF5YmFjayBWb2x1bWUiLCAweDA1LCAxLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtNDY5NCw3ICs0Njk1LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxODgyX2xvb3BiYWNrX21peGVyc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkMTg4Ml9sb29wYmFja19taXhlcnNbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDEsIEhEQV9JTlBVVCksCkBAIC00NzA2LDcgKzQ3MDcsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZDE4ODJhX2xvb3BiYWNrX21peGVyc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkMTg4MmFfbG9vcGJhY2tfbWl4ZXJzW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDA0LCBIREFfSU5QVVQpLApAQCAtNDcxOSw3ICs0NzIwLDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxODgyXzNzdGFja19taXhlcnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZDE4ODJfM3N0YWNrX21peGVyc1tdID0gewogCUhEQV9DT0RFQ19NVVRFKCJTdXJyb3VuZCBQbGF5YmFjayBTd2l0Y2giLCAweDE1LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFX01PTk8oIkNlbnRlciBQbGF5YmFjayBTd2l0Y2giLCAweDE3LCAxLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFX01PTk8oIkxGRSBQbGF5YmFjayBTd2l0Y2giLCAweDE3LCAyLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtNDczMywxNCArNDczNCwxNCBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZDE4ODJfNnN0YWNrX21peGVyc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkMTg4Ml82c3RhY2tfbWl4ZXJzW10gPSB7CiAJSERBX0NPREVDX01VVEUoIlN1cnJvdW5kIFBsYXliYWNrIFN3aXRjaCIsIDB4MTYsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEVfTU9OTygiQ2VudGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MjQsIDEsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEVfTU9OTygiTEZFIFBsYXliYWNrIFN3aXRjaCIsIDB4MjQsIDIsIDB4MCwgSERBX09VVFBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhZDE4ODJfY2gyX2luaXRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWQxODgyX2NoMl9pbml0W10gPSB7CiAJezB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKIAl7MHgyYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAogCXsweDJjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCkBAIC00NzUwLDcgKzQ3NTEsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWQxODgyX2NoNF9pbml0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFkMTg4Ml9jaDRfaW5pdFtdID0gewogCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAogCXsweDJjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAl7MHgyYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCkBAIC00NzYwLDcgKzQ3NjEsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWQxODgyX2NoNl9pbml0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFkMTg4Ml9jaDZfaW5pdFtdID0gewogCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAogCXsweDJjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAl7MHgyYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCkBAIC00NzcwLDcgKzQ3NzEsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhZDE4ODJfbW9kZXNbM10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWQxODgyX21vZGVzWzNdID0gewogCXsgMiwgYWQxODgyX2NoMl9pbml0IH0sCiAJeyA0LCBhZDE4ODJfY2g0X2luaXQgfSwKIAl7IDYsIGFkMTg4Ml9jaDZfaW5pdCB9LApAQCAtNDc3OSw3ICs0NzgwLDcgQEAKIC8qCiAgKiBpbml0aWFsaXphdGlvbiB2ZXJicwogICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFkMTg4Ml9pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFkMTg4Ml9pbml0X3ZlcmJzW10gPSB7CiAJLyogREFDczsgbXV0ZSBhcyBkZWZhdWx0ICovCiAJezB4MDMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCiAJezB4MDQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCkBAIC00ODQ4LDcgKzQ4NDksNyBAQAogfTsKIAogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKLXN0YXRpYyBzdHJ1Y3QgaGRhX2FtcF9saXN0IGFkMTg4Ml9sb29wYmFja3NbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2FtcF9saXN0IGFkMTg4Ml9sb29wYmFja3NbXSA9IHsKIAl7IDB4MjAsIEhEQV9JTlBVVCwgMCB9LCAvKiBGcm9udCBNaWMgKi8KIAl7IDB4MjAsIEhEQV9JTlBVVCwgMSB9LCAvKiBNaWMgKi8KIAl7IDB4MjAsIEhEQV9JTlBVVCwgNCB9LCAvKiBMaW5lICovCkBAIC00OTQ1LDcgKzQ5NDYsNyBAQAogLyoKICAqIHBhdGNoIGVudHJpZXMKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfY29kZWNfcHJlc2V0IHNuZF9oZGFfcHJlc2V0X2FuYWxvZ1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfY29kZWNfcHJlc2V0IHNuZF9oZGFfcHJlc2V0X2FuYWxvZ1tdID0gewogCXsgLmlkID0gMHgxMWQ0MTg0YSwgLm5hbWUgPSAiQUQxODg0QSIsIC5wYXRjaCA9IHBhdGNoX2FkMTg4NGEgfSwKIAl7IC5pZCA9IDB4MTFkNDE4ODIsIC5uYW1lID0gIkFEMTg4MiIsIC5wYXRjaCA9IHBhdGNoX2FkMTg4MiB9LAogCXsgLmlkID0gMHgxMWQ0MTg4MywgLm5hbWUgPSAiQUQxODgzIiwgLnBhdGNoID0gcGF0Y2hfYWQxODg0YSB9LApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9jYTAxMTAuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY2EwMTEwLmMKaW5kZXggNDZjOGJmNC4uNjFiOTI2MyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9jYTAxMTAuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NhMDExMC5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIC8qCiAgKi8KIAotc3RhdGljIGNoYXIgKmRpcnN0clsyXSA9IHsgIlBsYXliYWNrIiwgIkNhcHR1cmUiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRpcnN0clsyXSA9IHsgIlBsYXliYWNrIiwgIkNhcHR1cmUiIH07CiAKIHN0YXRpYyBpbnQgX2FkZF9zd2l0Y2goc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsIGNvbnN0IGNoYXIgKnBmeCwKIAkJICAgICAgIGludCBjaGFuLCBpbnQgZGlyKQpAQCAtMTcxLDcgKzE3MSw3IEBACiB7CiAJc3RydWN0IGNhMDExMF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnID0gJnNwZWMtPmF1dG9jZmc7Ci0Jc3RhdGljIGNoYXIgKnByZWZpeFtBVVRPX0NGR19NQVhfT1VUU10gPSB7CisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwcmVmaXhbQVVUT19DRkdfTUFYX09VVFNdID0gewogCQkiRnJvbnQiLCAiU3Vycm91bmQiLCBOVUxMLCAiU2lkZSIsICJNdWx0aSIKIAl9OwogCWhkYV9uaWRfdCBtdXRlbmlkOwpAQCAtMjU5LDcgKzI1OSw3IEBACiAKIC8qCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gY2EwMTEwX3BjbV9hbmFsb2dfcGxheWJhY2sgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9wY21fc3RyZWFtIGNhMDExMF9wY21fYW5hbG9nX3BsYXliYWNrID0gewogCS5zdWJzdHJlYW1zID0gMSwKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gOCwKQEAgLTI3MCw3ICsyNzAsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIGNhMDExMF9wY21fYW5hbG9nX2NhcHR1cmUgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9wY21fc3RyZWFtIGNhMDExMF9wY21fYW5hbG9nX2NhcHR1cmUgPSB7CiAJLnN1YnN0cmVhbXMgPSAxLAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSAyLApAQCAtMjgwLDcgKzI4MCw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gY2EwMTEwX3BjbV9kaWdpdGFsX3BsYXliYWNrID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBjYTAxMTBfcGNtX2RpZ2l0YWxfcGxheWJhY2sgPSB7CiAJLnN1YnN0cmVhbXMgPSAxLAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSAyLApAQCAtMjkxLDcgKzI5MSw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gY2EwMTEwX3BjbV9kaWdpdGFsX2NhcHR1cmUgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9wY21fc3RyZWFtIGNhMDExMF9wY21fZGlnaXRhbF9jYXB0dXJlID0gewogCS5zdWJzdHJlYW1zID0gMSwKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gMiwKQEAgLTM4OSw3ICszODksNyBAQAogCWtmcmVlKGNvZGVjLT5zcGVjKTsKIH0KIAotc3RhdGljIHN0cnVjdCBoZGFfY29kZWNfb3BzIGNhMDExMF9wYXRjaF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9jb2RlY19vcHMgY2EwMTEwX3BhdGNoX29wcyA9IHsKIAkuYnVpbGRfY29udHJvbHMgPSBjYTAxMTBfYnVpbGRfY29udHJvbHMsCiAJLmJ1aWxkX3BjbXMgPSBjYTAxMTBfYnVpbGRfcGNtcywKIAkuaW5pdCA9IGNhMDExMF9pbml0LApAQCAtNTM5LDcgKzUzOSw3IEBACiAvKgogICogcGF0Y2ggZW50cmllcwogICovCi1zdGF0aWMgc3RydWN0IGhkYV9jb2RlY19wcmVzZXQgc25kX2hkYV9wcmVzZXRfY2EwMTEwW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9jb2RlY19wcmVzZXQgc25kX2hkYV9wcmVzZXRfY2EwMTEwW10gPSB7CiAJeyAuaWQgPSAweDExMDIwMDBhLCAubmFtZSA9ICJDQTAxMTAtSUJHIiwgLnBhdGNoID0gcGF0Y2hfY2EwMTEwIH0sCiAJeyAuaWQgPSAweDExMDIwMDBiLCAubmFtZSA9ICJDQTAxMTAtSUJHIiwgLnBhdGNoID0gcGF0Y2hfY2EwMTEwIH0sCiAJeyAuaWQgPSAweDExMDIwMDBkLCAubmFtZSA9ICJTQjA4ODAgWC1GaSIsIC5wYXRjaCA9IHBhdGNoX2NhMDExMCB9LApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9jaXJydXMuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY2lycnVzLmMKaW5kZXggMDY3OTgyZjQuLjI2YTE1MjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY2lycnVzLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jaXJydXMuYwpAQCAtNTEsNyArNTEsNyBAQAogCXVuc2lnbmVkIGludCBjdXJfYWRjX2Zvcm1hdDsKIAloZGFfbmlkX3QgZGlnX2luOwogCi0Jc3RydWN0IGhkYV9iaW5kX2N0bHMgKmNhcHR1cmVfYmluZFsyXTsKKwljb25zdCBzdHJ1Y3QgaGRhX2JpbmRfY3RscyAqY2FwdHVyZV9iaW5kWzJdOwogCiAJdW5zaWduZWQgaW50IGdwaW9fbWFzazsKIAl1bnNpZ25lZCBpbnQgZ3Bpb19kaXI7CkBAIC0yMzEsNyArMjMxLDcgQEAKIAogLyoKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBjc19wY21fYW5hbG9nX3BsYXliYWNrID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBjc19wY21fYW5hbG9nX3BsYXliYWNrID0gewogCS5zdWJzdHJlYW1zID0gMSwKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gMiwKQEAgLTI0Miw3ICsyNDIsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIGNzX3BjbV9hbmFsb2dfY2FwdHVyZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gY3NfcGNtX2FuYWxvZ19jYXB0dXJlID0gewogCS5zdWJzdHJlYW1zID0gMSwKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gMiwKQEAgLTI1Miw3ICsyNTIsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIGNzX3BjbV9kaWdpdGFsX3BsYXliYWNrID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBjc19wY21fZGlnaXRhbF9wbGF5YmFjayA9IHsKIAkuc3Vic3RyZWFtcyA9IDEsCiAJLmNoYW5uZWxzX21pbiA9IDIsCiAJLmNoYW5uZWxzX21heCA9IDIsCkBAIC0yNjQsNyArMjY0LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBjc19wY21fZGlnaXRhbF9jYXB0dXJlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBjc19wY21fZGlnaXRhbF9jYXB0dXJlID0gewogCS5zdWJzdHJlYW1zID0gMSwKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gMiwKQEAgLTMzMSw4ICszMzEsOCBAQAogCXN0cnVjdCBjc19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnID0gJnNwZWMtPmF1dG9jZmc7CiAJaGRhX25pZF90IHBpbiA9IGNmZy0+aW5wdXRzW2lkeF0ucGluOwotCXVuc2lnbmVkIGludCB2YWwgPSBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBwaW4pOwotCWlmICghKHZhbCAmIEFDX1BJTkNBUF9QUkVTX0RFVEVDVCkpCisJdW5zaWduZWQgaW50IHZhbDsKKwlpZiAoIWlzX2phY2tfZGV0ZWN0YWJsZShjb2RlYywgcGluKSkKIAkJcmV0dXJuIDA7CiAJdmFsID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBwaW4pOwogCXJldHVybiAoc25kX2hkYV9nZXRfaW5wdXRfcGluX2F0dHIodmFsKSAhPSBJTlBVVF9QSU5fQVRUUl9JTlQpOwpAQCAtMzQ5LDggKzM0OSw3IEBACiAJCWhkYV9uaWRfdCBwaW5zWzJdOwogCQl1bnNpZ25lZCBpbnQgdHlwZTsKIAkJaW50IGosIG51bXM7Ci0JCXR5cGUgPSAoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9UWVBFKQotCQkJPj4gQUNfV0NBUF9UWVBFX1NISUZUOworCQl0eXBlID0gZ2V0X3djYXBzX3R5cGUoZ2V0X3djYXBzKGNvZGVjLCBuaWQpKTsKIAkJaWYgKHR5cGUgIT0gQUNfV0lEX0FVRF9JTikKIAkJCWNvbnRpbnVlOwogCQludW1zID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIG5pZCwgcGlucywKQEAgLTU1OSwxMCArNTU4LDEwIEBACiAJY29uc3QgY2hhciAqbmFtZTsKIAlpbnQgZXJyLCBpbmRleDsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOwotCXN0YXRpYyBjaGFyICpzcGVha2Vyc1tdID0geworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc3BlYWtlcnNbXSA9IHsKIAkJIkZyb250IFNwZWFrZXIiLCAiU3Vycm91bmQgU3BlYWtlciIsICJCYXNzIFNwZWFrZXIiCiAJfTsKLQlzdGF0aWMgY2hhciAqbGluZV9vdXRzW10gPSB7CisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBsaW5lX291dHNbXSA9IHsKIAkJIkZyb250IExpbmUtT3V0IiwgIlN1cnJvdW5kIExpbmUtT3V0IiwgIkJhc3MgTGluZS1PdXQiCiAJfTsKIApAQCAtNjQyLDcgKzY0MSw3IEBACiAvKgogICovCiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjc19jYXB0dXJlX2N0bHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjc19jYXB0dXJlX2N0bHNbXSA9IHsKIAlIREFfQklORF9TVygiQ2FwdHVyZSBTd2l0Y2giLCAwKSwKIAlIREFfQklORF9WT0woIkNhcHR1cmUgVm9sdW1lIiwgMCksCiB9OwpAQCAtNzEwLDcgKzcwOSw3IEBACiAJcmV0dXJuIGNoYW5nZV9jdXJfaW5wdXQoY29kZWMsIGlkeCwgMCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjc19jYXB0dXJlX3NvdXJjZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjc19jYXB0dXJlX3NvdXJjZSA9IHsKIAkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsCiAJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUsCkBAIC03MTksNyArNzE4LDcgQEAKIAkucHV0ID0gY3NfY2FwdHVyZV9zb3VyY2VfcHV0LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfYmluZF9jdGxzICptYWtlX2JpbmRfY2FwdHVyZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2JpbmRfY3RscyAqbWFrZV9iaW5kX2NhcHR1cmUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJCSAgICAgICBzdHJ1Y3QgaGRhX2N0bF9vcHMgKm9wcykKIHsKIAlzdHJ1Y3QgY3Nfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwpAQCAtODQ3LDE1ICs4NDYsMTQgQEAKIHsKIAlzdHJ1Y3QgY3Nfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZyA9ICZzcGVjLT5hdXRvY2ZnOwotCXVuc2lnbmVkIGludCBjYXBzLCBocF9wcmVzZW50OworCXVuc2lnbmVkIGludCBocF9wcmVzZW50OwogCWhkYV9uaWRfdCBuaWQ7CiAJaW50IGk7CiAKIAlocF9wcmVzZW50ID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5ocF9vdXRzOyBpKyspIHsKIAkJbmlkID0gY2ZnLT5ocF9waW5zW2ldOwotCQljYXBzID0gc25kX2hkYV9xdWVyeV9waW5fY2Fwcyhjb2RlYywgbmlkKTsKLQkJaWYgKCEoY2FwcyAmIEFDX1BJTkNBUF9QUkVTX0RFVEVDVCkpCisJCWlmICghaXNfamFja19kZXRlY3RhYmxlKGNvZGVjLCBuaWQpKQogCQkJY29udGludWU7CiAJCWhwX3ByZXNlbnQgPSBzbmRfaGRhX2phY2tfZGV0ZWN0KGNvZGVjLCBuaWQpOwogCQlpZiAoaHBfcHJlc2VudCkKQEAgLTkyNCw3ICs5MjIsNyBAQAogCQkJCSAgICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUCk7CiAJCWlmICghY2ZnLT5zcGVha2VyX291dHMpCiAJCQljb250aW51ZTsKLQkJaWYgKGdldF93Y2Fwcyhjb2RlYywgbmlkKSAmIEFDX1dDQVBfVU5TT0xfQ0FQKSB7CisJCWlmIChpc19qYWNrX2RldGVjdGFibGUoY29kZWMsIG5pZCkpIHsKIAkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKIAkJCQkJICAgIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwKIAkJCQkJICAgIEFDX1VTUlNQX0VOIHwgSFBfRVZFTlQpOwpAQCAtOTgzLDcgKzk4MSw3IEBACiAJY3NfdmVuZG9yX2NvZWZfc2V0KGNvZGVjLCBJRFhfQURDX0NGRywgY29lZik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgY3NfY29lZl9pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGNzX2NvZWZfaW5pdF92ZXJic1tdID0gewogCXsweDExLCBBQ19WRVJCX1NFVF9QUk9DX1NUQVRFLCAxfSwKIAl7MHgxMSwgQUNfVkVSQl9TRVRfQ09FRl9JTkRFWCwgSURYX0RBQ19DRkd9LAogCXsweDExLCBBQ19WRVJCX1NFVF9QUk9DX0NPRUYsCkBAIC0xMDE3LDcgKzEwMTUsNyBAQAogICogYmxvY2tzLCB3aGljaCB3aWxsIGFsbGV2aWF0ZSB0aGUgaXNzdWUuCiAgKi8KIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBjc19lcnJhdGFfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBjc19lcnJhdGFfaW5pdF92ZXJic1tdID0gewogCXsweDAxLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgMHgwMH0sIC8qIEFGRzogRDAgKi8KIAl7MHgxMSwgQUNfVkVSQl9TRVRfUFJPQ19TVEFURSwgMHgwMX0sICAvKiBWUFc6IHByb2Nlc3Npbmcgb24gKi8KIApAQCAtMTEyNiw3ICsxMTI0LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2NvZGVjX29wcyBjc19wYXRjaF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9jb2RlY19vcHMgY3NfcGF0Y2hfb3BzID0gewogCS5idWlsZF9jb250cm9scyA9IGNzX2J1aWxkX2NvbnRyb2xzLAogCS5idWlsZF9wY21zID0gY3NfYnVpbGRfcGNtcywKIAkuaW5pdCA9IGNzX2luaXQsCkBAIC0xMTY2LDcgKzExNjQsNyBAQAogfTsKIAogCi1zdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgY3M0MjB4X2NmZ190YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBjczQyMHhfY2ZnX3RibFtdID0gewogCVNORF9QQ0lfUVVJUksoMHgxMGRlLCAweDBhYzAsICJNYWNCb29rUHJvIDUsMyIsIENTNDIwWF9NQlA1MyksCiAJU05EX1BDSV9RVUlSSygweDEwZGUsIDB4MGQ5NCwgIk1hY0Jvb2tBaXIgMywxKDIpIiwgQ1M0MjBYX01CUDU1KSwKIAlTTkRfUENJX1FVSVJLKDB4MTBkZSwgMHhjYjc5LCAiTWFjQm9va1BybyA1LDUiLCBDUzQyMFhfTUJQNTUpLApAQCAtMTE4MCw3ICsxMTc4LDcgQEAKIAl1MzIgdmFsOwogfTsKIAotc3RhdGljIHN0cnVjdCBjc19waW5jZmcgbWJwNTNfcGluY2Znc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjc19waW5jZmcgbWJwNTNfcGluY2Znc1tdID0gewogCXsgMHgwOSwgMHgwMTJiNDA1MCB9LAogCXsgMHgwYSwgMHg5MDEwMDE0MSB9LAogCXsgMHgwYiwgMHg5MDEwMDE0MCB9LApAQCAtMTE5NCw3ICsxMTkyLDcgQEAKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGNzX3BpbmNmZyBtYnA1NV9waW5jZmdzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNzX3BpbmNmZyBtYnA1NV9waW5jZmdzW10gPSB7CiAJeyAweDA5LCAweDAxMmI0MDMwIH0sCiAJeyAweDBhLCAweDkwMTAwMTIxIH0sCiAJeyAweDBiLCAweDkwMTAwMTIwIH0sCkBAIC0xMjA4LDcgKzEyMDYsNyBAQAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY3NfcGluY2ZnIGltYWMyN19waW5jZmdzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNzX3BpbmNmZyBpbWFjMjdfcGluY2Znc1tdID0gewogCXsgMHgwOSwgMHgwMTJiNDA1MCB9LAogCXsgMHgwYSwgMHg5MDEwMDE0MCB9LAogCXsgMHgwYiwgMHg5MDEwMDE0MiB9LApAQCAtMTIyMiw3ICsxMjIwLDcgQEAKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGNzX3BpbmNmZyAqY3NfcGluY2Znc1tDUzQyMFhfTU9ERUxTXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3NfcGluY2ZnICpjc19waW5jZmdzW0NTNDIwWF9NT0RFTFNdID0gewogCVtDUzQyMFhfTUJQNTNdID0gbWJwNTNfcGluY2ZncywKIAlbQ1M0MjBYX01CUDU1XSA9IG1icDU1X3BpbmNmZ3MsCiAJW0NTNDIwWF9JTUFDMjddID0gaW1hYzI3X3BpbmNmZ3MsCkBAIC0xMjgzLDcgKzEyODEsNyBAQAogLyoKICAqIHBhdGNoIGVudHJpZXMKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfY29kZWNfcHJlc2V0IHNuZF9oZGFfcHJlc2V0X2NpcnJ1c1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfY29kZWNfcHJlc2V0IHNuZF9oZGFfcHJlc2V0X2NpcnJ1c1tdID0gewogCXsgLmlkID0gMHgxMDEzNDIwNiwgLm5hbWUgPSAiQ1M0MjA2IiwgLnBhdGNoID0gcGF0Y2hfY3M0MjB4IH0sCiAJeyAuaWQgPSAweDEwMTM0MjA3LCAubmFtZSA9ICJDUzQyMDciLCAucGF0Y2ggPSBwYXRjaF9jczQyMHggfSwKIAl7fSAvKiB0ZXJtaW5hdG9yICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NtZWRpYS5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jbWVkaWEuYwppbmRleCAxZjhiYmNkLi5hYjMzMDhkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NtZWRpYS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY21lZGlhLmMKQEAgLTUzLDcgKzUzLDcgQEAKIAlpbnQgbnVtX2RhY3M7CiAKIAkvKiBjYXB0dXJlICovCi0JaGRhX25pZF90ICphZGNfbmlkczsKKwljb25zdCBoZGFfbmlkX3QgKmFkY19uaWRzOwogCWhkYV9uaWRfdCBkaWdfaW5fbmlkOwogCiAJLyogY2FwdHVyZSBzb3VyY2UgKi8KQEAgLTExMCw3ICsxMTAsNyBAQAogICovCiAKIC8qIDMtc3RhY2sgLyAyIGNoYW5uZWwgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgY21pOTg4MF9jaDJfaW5pdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBjbWk5ODgwX2NoMl9pbml0W10gPSB7CiAJLyogc2V0IGxpbmUtaW4gUElOIGZvciBpbnB1dCAqLwogCXsgMHgwYywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU4gfSwKIAkvKiBzZXQgbWljIFBJTiBmb3IgaW5wdXQsIGFsc28gZW5hYmxlIHZyZWYgKi8KQEAgLTEyMSw3ICsxMjEsNyBAQAogfTsKIAogLyogMy1zdGFjayAvIDYgY2hhbm5lbCAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBjbWk5ODgwX2NoNl9pbml0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGNtaTk4ODBfY2g2X2luaXRbXSA9IHsKIAkvKiBzZXQgbGluZS1pbiBQSU4gZm9yIG91dHB1dCAqLwogCXsgMHgwYywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCiAJLyogc2V0IG1pYyBQSU4gZm9yIG91dHB1dCAqLwpAQCAtMTMyLDcgKzEzMiw3IEBACiB9OwogCiAvKiAzLXN0YWNrK2Zyb250IC8gOCBjaGFubmVsICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGNtaTk4ODBfY2g4X2luaXRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgY21pOTg4MF9jaDhfaW5pdFtdID0gewogCS8qIHNldCBsaW5lLWluIFBJTiBmb3Igb3V0cHV0ICovCiAJeyAweDBjLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKIAkvKiBzZXQgbWljIFBJTiBmb3Igb3V0cHV0ICovCkBAIC0xNDIsNyArMTQyLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGNtaTk4ODBfY2hhbm5lbF9tb2Rlc1szXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBjbWk5ODgwX2NoYW5uZWxfbW9kZXNbM10gPSB7CiAJeyAyLCBjbWk5ODgwX2NoMl9pbml0IH0sCiAJeyA2LCBjbWk5ODgwX2NoNl9pbml0IH0sCiAJeyA4LCBjbWk5ODgwX2NoOF9pbml0IH0sCkBAIC0xNzQsNyArMTc0LDcgQEAKIAogLyoKICAqLwotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGNtaTk4ODBfYmFzaWNfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjbWk5ODgwX2Jhc2ljX21peGVyW10gPSB7CiAJLyogQ01JOTg4MCBoYXMgbm8gcGxheWJhY2sgdm9sdW1lcyEgKi8KIAlIREFfQ09ERUNfTVVURSgiUENNIFBsYXliYWNrIFN3aXRjaCIsIDB4MDMsIDB4MCwgSERBX09VVFBVVCksIC8qIGZyb250ICovCiAJSERBX0NPREVDX01VVEUoIlN1cnJvdW5kIFBsYXliYWNrIFN3aXRjaCIsIDB4MDQsIDB4MCwgSERBX09VVFBVVCksCkBAIC0yMDUsNyArMjA1LDcgQEAKIC8qCiAgKiBzaGFyZWQgSS9PIHBpbnMKICAqLwotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGNtaTk4ODBfY2hfbW9kZV9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGNtaTk4ODBfY2hfbW9kZV9taXhlcltdID0gewogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIkNoYW5uZWwgTW9kZSIsCkBAIC0yMTksNyArMjE5LDcgQEAKIC8qIEFVRC1pbiBzZWxlY3Rpb25zOgogICogMHgwYiAweDBjIDB4MGQgMHgwZSAweDBmIDB4MTAgMHgxMSAweDFmIDB4MjAKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGNtaTk4ODBfYmFzaWNfbXV4ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4IGNtaTk4ODBfYmFzaWNfbXV4ID0gewogCS5udW1faXRlbXMgPSA0LAogCS5pdGVtcyA9IHsKIAkJeyAiRnJvbnQgTWljIiwgMHg1IH0sCkBAIC0yMjksNyArMjI5LDcgQEAKIAl9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggY21pOTg4MF9ub19saW5lX211eCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCBjbWk5ODgwX25vX2xpbmVfbXV4ID0gewogCS5udW1faXRlbXMgPSAzLAogCS5pdGVtcyA9IHsKIAkJeyAiRnJvbnQgTWljIiwgMHg1IH0sCkBAIC0yMzksMTEgKzIzOSwxMSBAQAogfTsKIAogLyogZnJvbnQsIHJlYXIsIGNsZmUsIHJlYXJfc3VyciAqLwotc3RhdGljIGhkYV9uaWRfdCBjbWk5ODgwX2RhY19uaWRzWzRdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBjbWk5ODgwX2RhY19uaWRzWzRdID0gewogCTB4MDMsIDB4MDQsIDB4MDUsIDB4MDYKIH07CiAvKiBBREMwLCBBREMxICovCi1zdGF0aWMgaGRhX25pZF90IGNtaTk4ODBfYWRjX25pZHNbMl0gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IGNtaTk4ODBfYWRjX25pZHNbMl0gPSB7CiAJMHgwOCwgMHgwOQogfTsKIApAQCAtMjUyLDcgKzI1Miw3IEBACiAKIC8qCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgY21pOTg4MF9iYXNpY19pbml0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGNtaTk4ODBfYmFzaWNfaW5pdFtdID0gewogCS8qIHBvcnQtRCBmb3IgbGluZSBvdXQgKHJlYXIgcGFuZWwpICovCiAJeyAweDBiLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUCB9LAogCS8qIHBvcnQtRSBmb3IgSFAgb3V0IChmcm9udCBwYW5lbCkgKi8KQEAgLTI4MSw3ICsyODEsNyBAQAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgY21pOTg4MF9hbGxvdXRfaW5pdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBjbWk5ODgwX2FsbG91dF9pbml0W10gPSB7CiAJLyogcG9ydC1EIGZvciBsaW5lIG91dCAocmVhciBwYW5lbCkgKi8KIAl7IDB4MGIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQIH0sCiAJLyogcG9ydC1FIGZvciBIUCBvdXQgKGZyb250IHBhbmVsKSAqLwpAQCAtNTI4LDcgKzUyOCw3IEBACiAKIC8qCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gY21pOTg4MF9wY21fYW5hbG9nX3BsYXliYWNrID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBjbWk5ODgwX3BjbV9hbmFsb2dfcGxheWJhY2sgPSB7CiAJLnN1YnN0cmVhbXMgPSAxLAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSA4LApAQCAtNTQwLDcgKzU0MCw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gY21pOTg4MF9wY21fYW5hbG9nX2NhcHR1cmUgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9wY21fc3RyZWFtIGNtaTk4ODBfcGNtX2FuYWxvZ19jYXB0dXJlID0gewogCS5zdWJzdHJlYW1zID0gMiwKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gMiwKQEAgLTU1MSw3ICs1NTEsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIGNtaTk4ODBfcGNtX2RpZ2l0YWxfcGxheWJhY2sgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9wY21fc3RyZWFtIGNtaTk4ODBfcGNtX2RpZ2l0YWxfcGxheWJhY2sgPSB7CiAJLnN1YnN0cmVhbXMgPSAxLAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSAyLApAQCAtNTYzLDcgKzU2Myw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gY21pOTg4MF9wY21fZGlnaXRhbF9jYXB0dXJlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBjbWk5ODgwX3BjbV9kaWdpdGFsX2NhcHR1cmUgPSB7CiAJLnN1YnN0cmVhbXMgPSAxLAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSAyLApAQCAtNjE3LDE0ICs2MTcsMTQgQEAKIAlbQ01JX0FVVE9dCT0gImF1dG8iLAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGNtaTk4ODBfY2ZnX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrIGNtaTk4ODBfY2ZnX3RibFtdID0gewogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgxM2QsICJBU1VTIFA1QUQyIiwgQ01JX0ZVTExfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTg1NCwgMHgwMDJiLCAiTEcgTFM3NSIsIENNSV9NSU5JTUFMKSwKIAlTTkRfUENJX1FVSVJLKDB4MTg1NCwgMHgwMDMyLCAiTEciLCBDTUlfRlVMTF9ESUcpLAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2NvZGVjX29wcyBjbWk5ODgwX3BhdGNoX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2NvZGVjX29wcyBjbWk5ODgwX3BhdGNoX29wcyA9IHsKIAkuYnVpbGRfY29udHJvbHMgPSBjbWk5ODgwX2J1aWxkX2NvbnRyb2xzLAogCS5idWlsZF9wY21zID0gY21pOTg4MF9idWlsZF9wY21zLAogCS5pbml0ID0gY21pOTg4MF9pbml0LApAQCAtNzQ1LDcgKzc0NSw3IEBACiAvKgogICogcGF0Y2ggZW50cmllcwogICovCi1zdGF0aWMgc3RydWN0IGhkYV9jb2RlY19wcmVzZXQgc25kX2hkYV9wcmVzZXRfY21lZGlhW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9jb2RlY19wcmVzZXQgc25kX2hkYV9wcmVzZXRfY21lZGlhW10gPSB7CiAJeyAuaWQgPSAweDEzZjY5ODgwLCAubmFtZSA9ICJDTUk5ODgwIiwgLnBhdGNoID0gcGF0Y2hfY21pOTg4MCB9LAogIAl7IC5pZCA9IDB4NDM0ZDQ5ODAsIC5uYW1lID0gIkNNSTk4ODAiLCAucGF0Y2ggPSBwYXRjaF9jbWk5ODgwIH0sCiAJe30gLyogdGVybWluYXRvciAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCmluZGV4IGFkOTdkOTMuLjRmMzc0NzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKQEAgLTM5LDYgKzM5LDcgQEAKIAogI2RlZmluZSBDT05FWEFOVF9IUF9FVkVOVAkweDM3CiAjZGVmaW5lIENPTkVYQU5UX01JQ19FVkVOVAkweDM4CisjZGVmaW5lIENPTkVYQU5UX0xJTkVfRVZFTlQJMHgzOQogCiAvKiBDb25leGFudCA1MDUxIHNwZWNpZmljICovCiAKQEAgLTU1LDkgKzU2LDE2IEBACiAJaW50IHR5cGU7CiB9OwogCitzdHJ1Y3QgaW11eF9pbmZvIHsKKwloZGFfbmlkX3QgcGluOwkJLyogaW5wdXQgcGluIE5JRCAqLworCWhkYV9uaWRfdCBhZGM7CQkvKiBjb25uZWN0ZWQgQURDIE5JRCAqLwkKKwloZGFfbmlkX3QgYm9vc3Q7CS8qIG9wdGlvbmFsIGJvb3N0IHZvbHVtZSBOSUQgKi8KKwlpbnQgaW5kZXg7CQkvKiBjb3JyZXNwb25kaW5nIHRvIGF1dG9jZmcuaW5wdXQgKi8KK307CisKIHN0cnVjdCBjb25leGFudF9zcGVjIHsKIAotCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICptaXhlcnNbNV07CisJY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKm1peGVyc1s1XTsKIAlpbnQgbnVtX21peGVyczsKIAloZGFfbmlkX3Qgdm1hc3Rlcl9uaWQ7CiAKQEAgLTc0LDE0ICs4MiwxNyBAQAogCQkJCQkgKi8KIAl1bnNpZ25lZCBpbnQgY3VyX2VhcGQ7CiAJdW5zaWduZWQgaW50IGhwX3ByZXNlbnQ7CisJdW5zaWduZWQgaW50IGxpbmVfcHJlc2VudDsKIAl1bnNpZ25lZCBpbnQgYXV0b19taWM7Ci0JaW50IGF1dG9fbWljX2V4dDsJCS8qIGF1dG9jZmcuaW5wdXRzW10gaW5kZXggZm9yIGV4dCBtaWMgKi8KKwlpbnQgYXV0b19taWNfZXh0OwkJLyogaW11eF9waW5zW10gaW5kZXggZm9yIGV4dCBtaWMgKi8KKwlpbnQgYXV0b19taWNfZG9jazsJCS8qIGltdXhfcGluc1tdIGluZGV4IGZvciBkb2NrIG1pYyAqLworCWludCBhdXRvX21pY19pbnQ7CQkvKiBpbXV4X3BpbnNbXSBpbmRleCBmb3IgaW50IG1pYyAqLwogCXVuc2lnbmVkIGludCBuZWVkX2RhY19maXg7CiAJaGRhX25pZF90IHNsYXZlX2RpZ19vdXRzWzJdOwogCiAJLyogY2FwdHVyZSAqLwogCXVuc2lnbmVkIGludCBudW1fYWRjX25pZHM7Ci0JaGRhX25pZF90ICphZGNfbmlkczsKKwljb25zdCBoZGFfbmlkX3QgKmFkY19uaWRzOwogCWhkYV9uaWRfdCBkaWdfaW5fbmlkOwkJLyogZGlnaXRhbC1pbiBOSUQ7IG9wdGlvbmFsICovCiAKIAl1bnNpZ25lZCBpbnQgY3VyX2FkY19pZHg7CkBAIC04OSw5ICsxMDAsMTEgQEAKIAl1bnNpZ25lZCBpbnQgY3VyX2FkY19zdHJlYW1fdGFnOwogCXVuc2lnbmVkIGludCBjdXJfYWRjX2Zvcm1hdDsKIAorCWNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqY2FwdHVyZV9zdHJlYW07CisKIAkvKiBjYXB0dXJlIHNvdXJjZSAqLwogCWNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbnB1dF9tdXg7Ci0JaGRhX25pZF90ICpjYXBzcmNfbmlkczsKKwljb25zdCBoZGFfbmlkX3QgKmNhcHNyY19uaWRzOwogCXVuc2lnbmVkIGludCBjdXJfbXV4WzNdOwogCiAJLyogY2hhbm5lbCBtb2RlbCAqLwpAQCAtMTA2LDEyICsxMTksMTcgQEAKIAkvKiBkeW5hbWljIGNvbnRyb2xzLCBpbml0X3ZlcmJzIGFuZCBpbnB1dF9tdXggKi8KIAlzdHJ1Y3QgYXV0b19waW5fY2ZnIGF1dG9jZmc7CiAJc3RydWN0IGhkYV9pbnB1dF9tdXggcHJpdmF0ZV9pbXV4OworCXN0cnVjdCBpbXV4X2luZm8gaW11eF9pbmZvW0hEQV9NQVhfTlVNX0lOUFVUU107CisJaGRhX25pZF90IHByaXZhdGVfYWRjX25pZHNbSERBX01BWF9OVU1fSU5QVVRTXTsKIAloZGFfbmlkX3QgcHJpdmF0ZV9kYWNfbmlkc1tBVVRPX0NGR19NQVhfT1VUU107CiAJc3RydWN0IHBpbl9kYWNfcGFpciBkYWNfaW5mb1s4XTsKIAlpbnQgZGFjX2luZm9fZmlsbGVkOwogCiAJdW5zaWduZWQgaW50IHBvcnRfZF9tb2RlOwogCXVuc2lnbmVkIGludCBhdXRvX211dGU6MTsJLyogdXNlZCBpbiBhdXRvLXBhcnNlciAqLworCXVuc2lnbmVkIGludCBkZXRlY3RfbGluZToxOwkvKiBMaW5lLW91dCBkZXRlY3Rpb24gZW5hYmxlZCAqLworCXVuc2lnbmVkIGludCBhdXRvbXV0ZV9saW5lczoxOwkvKiBhdXRvbXV0ZSBsaW5lLW91dCBhcyB3ZWxsICovCisJdW5zaWduZWQgaW50IGF1dG9tdXRlX2hwX2xvOjE7CS8qIGJvdGggSFAgYW5kIExPIGF2YWlsYWJsZSAqLwogCXVuc2lnbmVkIGludCBkZWxsX2F1dG9tdXRlOjE7CiAJdW5zaWduZWQgaW50IGRlbGxfdm9zdHJvOjE7CiAJdW5zaWduZWQgaW50IGlkZWFwYWQ6MTsKQEAgLTExOSw2ICsxMzcsOCBAQAogCXVuc2lnbmVkIGludCBocF9sYXB0b3A6MTsKIAl1bnNpZ25lZCBpbnQgYXN1czoxOwogCisJdW5zaWduZWQgaW50IGFkY19zd2l0Y2hpbmc6MTsKKwogCXVuc2lnbmVkIGludCBleHRfbWljX3ByZXNlbnQ7CiAJdW5zaWduZWQgaW50IHJlY29yZGluZzsKIAl2b2lkICgqY2FwdHVyZV9wcmVwYXJlKShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CkBAIC0yMjcsNyArMjQ3LDcgQEAKIAogCiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gY29uZXhhbnRfcGNtX2FuYWxvZ19wbGF5YmFjayA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gY29uZXhhbnRfcGNtX2FuYWxvZ19wbGF5YmFjayA9IHsKIAkuc3Vic3RyZWFtcyA9IDEsCiAJLmNoYW5uZWxzX21pbiA9IDIsCiAJLmNoYW5uZWxzX21heCA9IDIsCkBAIC0yMzksNyArMjU5LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBjb25leGFudF9wY21fYW5hbG9nX2NhcHR1cmUgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9wY21fc3RyZWFtIGNvbmV4YW50X3BjbV9hbmFsb2dfY2FwdHVyZSA9IHsKIAkuc3Vic3RyZWFtcyA9IDEsCiAJLmNoYW5uZWxzX21pbiA9IDIsCiAJLmNoYW5uZWxzX21heCA9IDIsCkBAIC0yNTEsNyArMjcxLDcgQEAKIH07CiAKIAotc3RhdGljIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBjb25leGFudF9wY21fZGlnaXRhbF9wbGF5YmFjayA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gY29uZXhhbnRfcGNtX2RpZ2l0YWxfcGxheWJhY2sgPSB7CiAJLnN1YnN0cmVhbXMgPSAxLAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSAyLApAQCAtMjYzLDcgKzI4Myw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gY29uZXhhbnRfcGNtX2RpZ2l0YWxfY2FwdHVyZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gY29uZXhhbnRfcGNtX2RpZ2l0YWxfY2FwdHVyZSA9IHsKIAkuc3Vic3RyZWFtcyA9IDEsCiAJLmNoYW5uZWxzX21pbiA9IDIsCiAJLmNoYW5uZWxzX21heCA9IDIsCkBAIC0yOTQsNyArMzE0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBjeDUwNTFfcGNtX2FuYWxvZ19jYXB0dXJlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBjeDUwNTFfcGNtX2FuYWxvZ19jYXB0dXJlID0gewogCS5zdWJzdHJlYW1zID0gMSwKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gMiwKQEAgLTMxOSwxMyArMzM5LDE5IEBACiAJCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVsczsKIAlpbmZvLT5zdHJlYW1bU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10ubmlkID0KIAkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbMF07Ci0JaWYgKGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxNGYxNTA1MSkKLQkJaW5mby0+c3RyZWFtW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0gPQotCQkJY3g1MDUxX3BjbV9hbmFsb2dfY2FwdHVyZTsKLQllbHNlCi0JCWluZm8tPnN0cmVhbVtTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdID0KLQkJCWNvbmV4YW50X3BjbV9hbmFsb2dfY2FwdHVyZTsKLQlpbmZvLT5zdHJlYW1bU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS5zdWJzdHJlYW1zID0gc3BlYy0+bnVtX2FkY19uaWRzOworCWlmIChzcGVjLT5jYXB0dXJlX3N0cmVhbSkKKwkJaW5mby0+c3RyZWFtW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0gPSAqc3BlYy0+Y2FwdHVyZV9zdHJlYW07CisJZWxzZSB7CisJCWlmIChjb2RlYy0+dmVuZG9yX2lkID09IDB4MTRmMTUwNTEpCisJCQlpbmZvLT5zdHJlYW1bU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXSA9CisJCQkJY3g1MDUxX3BjbV9hbmFsb2dfY2FwdHVyZTsKKwkJZWxzZSB7CisJCQlpbmZvLT5zdHJlYW1bU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXSA9CisJCQkJY29uZXhhbnRfcGNtX2FuYWxvZ19jYXB0dXJlOworCQkJaW5mby0+c3RyZWFtW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0uc3Vic3RyZWFtcyA9CisJCQkJc3BlYy0+bnVtX2FkY19uaWRzOworCQl9CisJfQogCWluZm8tPnN0cmVhbVtTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLm5pZCA9IHNwZWMtPmFkY19uaWRzWzBdOwogCiAJaWYgKHNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkKSB7CkBAIC00MzMsNyArNDU5LDcgQEAKIAlrZnJlZShjb2RlYy0+c3BlYyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHRfY2FwdHVyZV9taXhlcnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHRfY2FwdHVyZV9taXhlcnNbXSA9IHsKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsCkBAIC00NDYsNyArNDcyLDcgQEAKIAogI2lmZGVmIENPTkZJR19TTkRfSERBX0lOUFVUX0JFRVAKIC8qIGFkZGl0aW9uYWwgYmVlcCBtaXhlcnM7IHRoZSBhY3R1YWwgcGFyYW1ldGVycyBhcmUgb3ZlcndyaXR0ZW4gYXQgYnVpbGQgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHRfYmVlcF9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dF9iZWVwX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRV9NT05PKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDAsIDEsIDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFX0JFRVBfTU9OTygiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAwLCAxLCAwLCBIREFfT1VUUFVUKSwKIAl7IH0gLyogZW5kICovCkBAIC00NTYsMTIgKzQ4MiwxOCBAQAogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzbGF2ZV92b2xzW10gPSB7CiAJIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLAogCSJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsCisJIkZyb250IFBsYXliYWNrIFZvbHVtZSIsCisJIlN1cnJvdW5kIFBsYXliYWNrIFZvbHVtZSIsCisJIkNMRkUgUGxheWJhY2sgVm9sdW1lIiwKIAlOVUxMCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNsYXZlX3N3c1tdID0gewogCSJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwKIAkiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLAorCSJGcm9udCBQbGF5YmFjayBTd2l0Y2giLAorCSJTdXJyb3VuZCBQbGF5YmFjayBTd2l0Y2giLAorCSJDTEZFIFBsYXliYWNrIFN3aXRjaCIsCiAJTlVMTAogfTsKIApAQCAtNTIxLDcgKzU1Myw3IEBACiAjaWZkZWYgQ09ORklHX1NORF9IREFfSU5QVVRfQkVFUAogCS8qIGNyZWF0ZSBiZWVwIGNvbnRyb2xzIGlmIG5lZWRlZCAqLwogCWlmIChzcGVjLT5iZWVwX2FtcCkgewotCQlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa25ldzsKKwkJY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXc7CiAJCWZvciAoa25ldyA9IGN4dF9iZWVwX21peGVyOyBrbmV3LT5uYW1lOyBrbmV3KyspIHsKIAkJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGw7CiAJCQlrY3RsID0gc25kX2N0bF9uZXcxKGtuZXcsIGNvZGVjKTsKQEAgLTU0Niw3ICs1NzgsNyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2NvZGVjX29wcyBjb25leGFudF9wYXRjaF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9jb2RlY19vcHMgY29uZXhhbnRfcGF0Y2hfb3BzID0gewogCS5idWlsZF9jb250cm9scyA9IGNvbmV4YW50X2J1aWxkX2NvbnRyb2xzLAogCS5idWlsZF9wY21zID0gY29uZXhhbnRfYnVpbGRfcGNtcywKIAkuaW5pdCA9IGNvbmV4YW50X2luaXQsCkBAIC01NjQsNiArNTk2LDcgQEAKICNkZWZpbmUgc2V0X2JlZXBfYW1wKHNwZWMsIG5pZCwgaWR4LCBkaXIpIC8qIE5PUCAqLwogI2VuZGlmCiAKK3N0YXRpYyBpbnQgcGF0Y2hfY29uZXhhbnRfYXV0byhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CiAvKgogICogRUFQRCBjb250cm9sCiAgKiB0aGUgcHJpdmF0ZSB2YWx1ZSA9IG5pZCB8IChpbnZlcnQgPDwgOCkKQEAgLTY2MiwxNiArNjk1LDE2IEBACiAKIC8qIENvbmV4YW50IDUwNDUgc3BlY2lmaWMgKi8KIAotc3RhdGljIGhkYV9uaWRfdCBjeHQ1MDQ1X2RhY19uaWRzWzFdID0geyAweDE5IH07Ci1zdGF0aWMgaGRhX25pZF90IGN4dDUwNDVfYWRjX25pZHNbMV0gPSB7IDB4MWEgfTsKLXN0YXRpYyBoZGFfbmlkX3QgY3h0NTA0NV9jYXBzcmNfbmlkc1sxXSA9IHsgMHgxYSB9Oworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBjeHQ1MDQ1X2RhY19uaWRzWzFdID0geyAweDE5IH07CitzdGF0aWMgY29uc3QgaGRhX25pZF90IGN4dDUwNDVfYWRjX25pZHNbMV0gPSB7IDB4MWEgfTsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3QgY3h0NTA0NV9jYXBzcmNfbmlkc1sxXSA9IHsgMHgxYSB9OwogI2RlZmluZSBDWFQ1MDQ1X1NQRElGX09VVAkweDE4CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBjeHQ1MDQ1X21vZGVzWzFdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGN4dDUwNDVfbW9kZXNbMV0gPSB7CiAJeyAyLCBOVUxMIH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggY3h0NTA0NV9jYXB0dXJlX3NvdXJjZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCBjeHQ1MDQ1X2NhcHR1cmVfc291cmNlID0gewogCS5udW1faXRlbXMgPSAyLAogCS5pdGVtcyA9IHsKIAkJeyAiSW50TWljIiwgMHgxIH0sCkBAIC02NzksNyArNzEyLDcgQEAKIAl9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggY3h0NTA0NV9jYXB0dXJlX3NvdXJjZV9iZW5xID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4IGN4dDUwNDVfY2FwdHVyZV9zb3VyY2VfYmVucSA9IHsKIAkubnVtX2l0ZW1zID0gNSwKIAkuaXRlbXMgPSB7CiAJCXsgIkludE1pYyIsIDB4MSB9LApAQCAtNjkwLDcgKzcyMyw3IEBACiAJfQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGN4dDUwNDVfY2FwdHVyZV9zb3VyY2VfaHA1MzAgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggY3h0NTA0NV9jYXB0dXJlX3NvdXJjZV9ocDUzMCA9IHsKIAkubnVtX2l0ZW1zID0gMiwKIAkuaXRlbXMgPSB7CiAJCXsgIkV4dE1pYyIsIDB4MSB9LApAQCAtNzIzLDcgKzc1Niw3IEBACiB9CiAKIC8qIGJpbmQgdm9sdW1lcyBvZiBib3RoIE5JRCAweDEwIGFuZCAweDExICovCi1zdGF0aWMgc3RydWN0IGhkYV9iaW5kX2N0bHMgY3h0NTA0NV9ocF9iaW5kX21hc3Rlcl92b2wgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9iaW5kX2N0bHMgY3h0NTA0NV9ocF9iaW5kX21hc3Rlcl92b2wgPSB7CiAJLm9wcyA9ICZzbmRfaGRhX2JpbmRfdm9sLAogCS52YWx1ZXMgPSB7CiAJCUhEQV9DT01QT1NFX0FNUF9WQUwoMHgxMCwgMywgMCwgSERBX09VVFBVVCksCkBAIC03MzUsMTIgKzc2OCwxMiBAQAogLyogdG9nZ2xlIGlucHV0IG9mIGJ1aWx0LWluIGFuZCBtaWMgamFjayBhcHByb3ByaWF0ZWx5ICovCiBzdGF0aWMgdm9pZCBjeHQ1MDQ1X2hwX2F1dG9taWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0Jc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBtaWNfamFja19vbltdID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgbWljX2phY2tfb25bXSA9IHsKIAkJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjA4MH0sCiAJCXsweDEyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwMDB9LAogCQl7fQogCX07Ci0Jc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBtaWNfamFja19vZmZbXSA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIG1pY19qYWNrX29mZltdID0gewogCQl7MHgxMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDgwfSwKIAkJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjAwMH0sCiAJCXt9CkBAIC03ODQsNyArODE3LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ1X21peGVyc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNDVfbWl4ZXJzW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIENhcHR1cmUgVm9sdW1lIiwgMHgxYSwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSW50ZXJuYWwgTWljIENhcHR1cmUgU3dpdGNoIiwgMHgxYSwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQ2FwdHVyZSBWb2x1bWUiLCAweDFhLCAweDAyLCBIREFfSU5QVVQpLApAQCAtODA4LDcgKzg0MSw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ1X2JlbnFfbWl4ZXJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA0NV9iZW5xX21peGVyc1tdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIENhcHR1cmUgVm9sdW1lIiwgMHgxYSwgMHgwNCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ0QgQ2FwdHVyZSBTd2l0Y2giLCAweDFhLCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MTcsIDB4NCwgSERBX0lOUFVUKSwKQEAgLTgyNSw3ICs4NTgsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA0NV9taXhlcnNfaHA1MzBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ1X21peGVyc19ocDUzMFtdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBDYXB0dXJlIFZvbHVtZSIsIDB4MWEsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkludGVybmFsIE1pYyBDYXB0dXJlIFN3aXRjaCIsIDB4MWEsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIENhcHR1cmUgVm9sdW1lIiwgMHgxYSwgMHgwMSwgSERBX0lOUFVUKSwKQEAgLTg0OSw3ICs4ODIsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGN4dDUwNDVfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDQ1X2luaXRfdmVyYnNbXSA9IHsKIAkvKiBMaW5lIGluLCBNaWMgKi8KIAl7MHgxMiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU58QUNfUElOQ1RMX1ZSRUZfODAgfSwKIAl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU58QUNfUElOQ1RMX1ZSRUZfODAgfSwKQEAgLTg3NSw3ICs5MDgsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA0NV9iZW5xX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA0NV9iZW5xX2luaXRfdmVyYnNbXSA9IHsKIAkvKiBJbnRlcm5hbCBNaWMsIE1pYyAqLwogCXsweDEyLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTnxBQ19QSU5DVExfVlJFRl84MCB9LAogCXsweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTnxBQ19QSU5DVExfVlJFRl84MCB9LApAQCAtOTAxLDEzICs5MzQsMTMgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGN4dDUwNDVfaHBfc2Vuc2VfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDQ1X2hwX3NlbnNlX2luaXRfdmVyYnNbXSA9IHsKIAkvKiBwaW4gc2Vuc2luZyBvbiBIUCBqYWNrICovCiAJezB4MTEsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBDT05FWEFOVF9IUF9FVkVOVH0sCiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDQ1X21pY19zZW5zZV9pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGN4dDUwNDVfbWljX3NlbnNlX2luaXRfdmVyYnNbXSA9IHsKIAkvKiBwaW4gc2Vuc2luZyBvbiBIUCBqYWNrICovCiAJezB4MTIsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBDT05FWEFOVF9NSUNfRVZFTlR9LAogCXsgfSAvKiBlbmQgKi8KQEAgLTkxNyw3ICs5NTAsNyBAQAogLyogVGVzdCBjb25maWd1cmF0aW9uIGZvciBkZWJ1Z2dpbmcsIG1vZGVsbGVkIGFmdGVyIHRoZSBBTEMyNjAgdGVzdAogICogY29uZmlndXJhdGlvbi4KICAqLwotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGN4dDUwNDVfdGVzdF9jYXB0dXJlX3NvdXJjZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCBjeHQ1MDQ1X3Rlc3RfY2FwdHVyZV9zb3VyY2UgPSB7CiAJLm51bV9pdGVtcyA9IDUsCiAJLml0ZW1zID0gewogCQl7ICJNSVhFUiIsIDB4MCB9LApAQCAtOTI4LDcgKzk2MSw3IEBACiAgICAgICAgIH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA0NV90ZXN0X21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA0NV90ZXN0X21peGVyW10gPSB7CiAKIAkvKiBPdXRwdXQgY29udHJvbHMgKi8KIAlIREFfQ09ERUNfVk9MVU1FKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MTAsIDB4MCwgSERBX09VVFBVVCksCkBAIC05NzgsNyArMTAxMSw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDQ1X3Rlc3RfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDQ1X3Rlc3RfaW5pdF92ZXJic1tdID0gewogCS8qIFNldCBjb25uZWN0aW9ucyAqLwogCXsgMHgxMCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MCB9LAogCXsgMHgxMSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MCB9LApAQCAtMTA0Nyw2ICsxMDgwLDcgQEAKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiAJQ1hUNTA0NV9URVNULAogI2VuZGlmCisJQ1hUNTA0NV9BVVRPLAogCUNYVDUwNDVfTU9ERUxTCiB9OwogCkBAIC0xMDU5LDkgKzEwOTMsMTAgQEAKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiAJW0NYVDUwNDVfVEVTVF0JCT0gInRlc3QiLAogI2VuZGlmCisJW0NYVDUwNDVfQVVUT10JCQk9ICJhdXRvIiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBjeHQ1MDQ1X2NmZ190YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBjeHQ1MDQ1X2NmZ190YmxbXSA9IHsKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGQ1LCAiSFAgNTMwIiwgQ1hUNTA0NV9MQVBUT1BfSFA1MzApLAogCVNORF9QQ0lfUVVJUktfTUFTSygweDEwM2MsIDB4ZmYwMCwgMHgzMDAwLCAiSFAgRFYgU2VyaWVzIiwKIAkJCSAgIENYVDUwNDVfTEFQVE9QX0hQU0VOU0UpLApAQCAtMTA4NSw2ICsxMTIwLDE2IEBACiAJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWM7CiAJaW50IGJvYXJkX2NvbmZpZzsKIAorCWJvYXJkX2NvbmZpZyA9IHNuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKGNvZGVjLCBDWFQ1MDQ1X01PREVMUywKKwkJCQkJCSAgY3h0NTA0NV9tb2RlbHMsCisJCQkJCQkgIGN4dDUwNDVfY2ZnX3RibCk7CisjaWYgMCAvKiB1c2UgdGhlIG9sZCBtZXRob2QganVzdCBmb3Igc2FmZXR5ICovCisJaWYgKGJvYXJkX2NvbmZpZyA8IDApCisJCWJvYXJkX2NvbmZpZyA9IENYVDUwNDVfQVVUTzsKKyNlbmRpZgorCWlmIChib2FyZF9jb25maWcgPT0gQ1hUNTA0NV9BVVRPKQorCQlyZXR1cm4gcGF0Y2hfY29uZXhhbnRfYXV0byhjb2RlYyk7CisKIAlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNwZWMpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTExMSw5ICsxMTU2LDYgQEAKIAogCWNvZGVjLT5wYXRjaF9vcHMgPSBjb25leGFudF9wYXRjaF9vcHM7CiAKLQlib2FyZF9jb25maWcgPSBzbmRfaGRhX2NoZWNrX2JvYXJkX2NvbmZpZyhjb2RlYywgQ1hUNTA0NV9NT0RFTFMsCi0JCQkJCQkgIGN4dDUwNDVfbW9kZWxzLAotCQkJCQkJICBjeHQ1MDQ1X2NmZ190YmwpOwogCXN3aXRjaCAoYm9hcmRfY29uZmlnKSB7CiAJY2FzZSBDWFQ1MDQ1X0xBUFRPUF9IUFNFTlNFOgogCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA0NV9ocF91bnNvbF9ldmVudDsKQEAgLTExOTYsMTUgKzEyMzgsMTUgQEAKIC8qIENvbmV4YW50IDUwNDcgc3BlY2lmaWMgKi8KICNkZWZpbmUgQ1hUNTA0N19TUERJRl9PVVQJMHgxMQogCi1zdGF0aWMgaGRhX25pZF90IGN4dDUwNDdfZGFjX25pZHNbMV0gPSB7IDB4MTAgfTsgLyogMHgxYyAqLwotc3RhdGljIGhkYV9uaWRfdCBjeHQ1MDQ3X2FkY19uaWRzWzFdID0geyAweDEyIH07Ci1zdGF0aWMgaGRhX25pZF90IGN4dDUwNDdfY2Fwc3JjX25pZHNbMV0gPSB7IDB4MWEgfTsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3QgY3h0NTA0N19kYWNfbmlkc1sxXSA9IHsgMHgxMCB9OyAvKiAweDFjICovCitzdGF0aWMgY29uc3QgaGRhX25pZF90IGN4dDUwNDdfYWRjX25pZHNbMV0gPSB7IDB4MTIgfTsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3QgY3h0NTA0N19jYXBzcmNfbmlkc1sxXSA9IHsgMHgxYSB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgY3h0NTA0N19tb2Rlc1sxXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBjeHQ1MDQ3X21vZGVzWzFdID0gewogCXsgMiwgTlVMTCB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGN4dDUwNDdfdG9zaGliYV9jYXB0dXJlX3NvdXJjZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCBjeHQ1MDQ3X3Rvc2hpYmFfY2FwdHVyZV9zb3VyY2UgPSB7CiAJLm51bV9pdGVtcyA9IDIsCiAJLml0ZW1zID0gewogCQl7ICJFeHRNaWMiLCAweDIgfSwKQEAgLTEyNTYsMTIgKzEyOTgsMTIgQEAKIC8qIHRvZ2dsZSBpbnB1dCBvZiBidWlsdC1pbiBhbmQgbWljIGphY2sgYXBwcm9wcmlhdGVseSAqLwogc3RhdGljIHZvaWQgY3h0NTA0N19ocF9hdXRvbWljKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewotCXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgbWljX2phY2tfb25bXSA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIG1pY19qYWNrX29uW10gPSB7CiAJCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAogCQl7MHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAogCQl7fQogCX07Ci0Jc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBtaWNfamFja19vZmZbXSA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIG1pY19qYWNrX29mZltdID0gewogCQl7MHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKIAkJezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKIAkJe30KQEAgLTEyODksNyArMTMzMSw3IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA0N19iYXNlX21peGVyc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNDdfYmFzZV9taXhlcnNbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgxOSwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MTksIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IFZvbHVtZSIsIDB4MWEsIDB4MCwgSERBX09VVFBVVCksCkBAIC0xMzA5LDE5ICsxMzUxLDE5IEBACiAJe30KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ3X2hwX3Nwa19taXhlcnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ3X2hwX3Nwa19taXhlcnNbXSA9IHsKIAkvKiBTZWUgdGhlIG5vdGUgaW4gY3h0NTA0N19ocF9tYXN0ZXJfc3dfcHV0ICovCiAJSERBX0NPREVDX1ZPTFVNRSgiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDFkLCAweDAxLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgxMywgMHgwMCwgSERBX09VVFBVVCksCiAJe30KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ3X2hwX29ubHlfbWl4ZXJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA0N19ocF9vbmx5X21peGVyc1tdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAweDEzLCAweDAwLCBIREFfT1VUUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGN4dDUwNDdfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDQ3X2luaXRfdmVyYnNbXSA9IHsKIAkvKiBMaW5lIGluLCBNaWMsIEJ1aWx0LWluIE1pYyAqLwogCXsweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTiB9LAogCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTnxBQ19QSU5DVExfVlJFRl81MCB9LApAQCAtMTM0OCw3ICsxMzkwLDcgQEAKIH07CiAKIC8qIGNvbmZpZ3VyYXRpb24gZm9yIFRvc2hpYmEgTGFwdG9wcyAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDQ3X3Rvc2hpYmFfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDQ3X3Rvc2hpYmFfaW5pdF92ZXJic1tdID0gewogCXsweDEzLCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMHgwfSwgLyogZGVmYXVsdCBvZmYgKi8KIAl7fQogfTsKQEAgLTEzNTcsNyArMTM5OSw3IEBACiAgKiBjb25maWd1cmF0aW9uLgogICovCiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGN4dDUwNDdfdGVzdF9jYXB0dXJlX3NvdXJjZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCBjeHQ1MDQ3X3Rlc3RfY2FwdHVyZV9zb3VyY2UgPSB7CiAJLm51bV9pdGVtcyA9IDQsCiAJLml0ZW1zID0gewogCQl7ICJMSU5FMSBwaW4iLCAweDAgfSwKQEAgLTEzNjcsNyArMTQwOSw3IEBACiAgICAgICAgIH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA0N190ZXN0X21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA0N190ZXN0X21peGVyW10gPSB7CiAKIAkvKiBPdXRwdXQgb25seSBjb250cm9scyAqLwogCUhEQV9DT0RFQ19WT0xVTUUoIk91dEFtcC0xIFZvbHVtZSIsIDB4MTAsIDB4MCwgSERBX09VVFBVVCksCkBAIC0xNDIwLDcgKzE0NjIsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA0N190ZXN0X2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA0N190ZXN0X2luaXRfdmVyYnNbXSA9IHsKIAkvKiBFbmFibGUgcmV0YXNraW5nIHBpbnMgYXMgb3V0cHV0LCBpbml0aWFsbHkgd2l0aG91dCBwb3dlciBhbXAgKi8KIAl7MHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKIAl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKQEAgLTE0OTIsNiArMTUzNCw3IEBACiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCUNYVDUwNDdfVEVTVCwKICNlbmRpZgorCUNYVDUwNDdfQVVUTywKIAlDWFQ1MDQ3X01PREVMUwogfTsKIApAQCAtMTUwMiw5ICsxNTQ1LDEwIEBACiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCVtDWFQ1MDQ3X1RFU1RdCQk9ICJ0ZXN0IiwKICNlbmRpZgorCVtDWFQ1MDQ3X0FVVE9dCQk9ICJhdXRvIiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBjeHQ1MDQ3X2NmZ190YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBjeHQ1MDQ3X2NmZ190YmxbXSA9IHsKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGE1LCAiSFAgRFY1MjAwVC9EVjgwMDBUIiwgQ1hUNTA0N19MQVBUT1BfSFApLAogCVNORF9QQ0lfUVVJUktfTUFTSygweDEwM2MsIDB4ZmYwMCwgMHgzMDAwLCAiSFAgRFYgU2VyaWVzIiwKIAkJCSAgIENYVDUwNDdfTEFQVE9QKSwKQEAgLTE1MTcsNiArMTU2MSwxNiBAQAogCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjOwogCWludCBib2FyZF9jb25maWc7CiAKKwlib2FyZF9jb25maWcgPSBzbmRfaGRhX2NoZWNrX2JvYXJkX2NvbmZpZyhjb2RlYywgQ1hUNTA0N19NT0RFTFMsCisJCQkJCQkgIGN4dDUwNDdfbW9kZWxzLAorCQkJCQkJICBjeHQ1MDQ3X2NmZ190YmwpOworI2lmIDAgLyogbm90IGVuYWJsZWQgYXMgZGVmYXVsdCwgYXMgQklPUyBvZnRlbiBicm9rZW4gZm9yIHRoaXMgY29kZWMgKi8KKwlpZiAoYm9hcmRfY29uZmlnIDwgMCkKKwkJYm9hcmRfY29uZmlnID0gQ1hUNTA0N19BVVRPOworI2VuZGlmCisJaWYgKGJvYXJkX2NvbmZpZyA9PSBDWFQ1MDQ3X0FVVE8pCisJCXJldHVybiBwYXRjaF9jb25leGFudF9hdXRvKGNvZGVjKTsKKwogCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmICghc3BlYykKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xNTQwLDkgKzE1OTQsNiBAQAogCiAJY29kZWMtPnBhdGNoX29wcyA9IGNvbmV4YW50X3BhdGNoX29wczsKIAotCWJvYXJkX2NvbmZpZyA9IHNuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKGNvZGVjLCBDWFQ1MDQ3X01PREVMUywKLQkJCQkJCSAgY3h0NTA0N19tb2RlbHMsCi0JCQkJCQkgIGN4dDUwNDdfY2ZnX3RibCk7CiAJc3dpdGNoIChib2FyZF9jb25maWcpIHsKIAljYXNlIENYVDUwNDdfTEFQVE9QOgogCQlzcGVjLT5udW1fbWl4ZXJzID0gMjsKQEAgLTE1OTEsMTAgKzE2NDIsMTAgQEAKIH0KIAogLyogQ29uZXhhbnQgNTA1MSBzcGVjaWZpYyAqLwotc3RhdGljIGhkYV9uaWRfdCBjeHQ1MDUxX2RhY19uaWRzWzFdID0geyAweDEwIH07Ci1zdGF0aWMgaGRhX25pZF90IGN4dDUwNTFfYWRjX25pZHNbMl0gPSB7IDB4MTQsIDB4MTUgfTsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3QgY3h0NTA1MV9kYWNfbmlkc1sxXSA9IHsgMHgxMCB9Oworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBjeHQ1MDUxX2FkY19uaWRzWzJdID0geyAweDE0LCAweDE1IH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBjeHQ1MDUxX21vZGVzWzFdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGN4dDUwNTFfbW9kZXNbMV0gPSB7CiAJeyAyLCBOVUxMIH0sCiB9OwogCkBAIC0xNjk2LDcgKzE3NDcsNyBAQAogCXNuZF9oZGFfaW5wdXRfamFja19yZXBvcnQoY29kZWMsIG5pZCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDUxX3BsYXliYWNrX21peGVyc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNTFfcGxheWJhY2tfbWl4ZXJzW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4MTAsIDB4MDAsIEhEQV9PVVRQVVQpLAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCkBAIC0xNzA5LDcgKzE3NjAsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA1MV9jYXB0dXJlX21peGVyc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNTFfY2FwdHVyZV9taXhlcnNbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgVm9sdW1lIiwgMHgxNCwgMHgwMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSW50ZXJuYWwgTWljIFN3aXRjaCIsIDB4MTQsIDB4MDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFZvbHVtZSIsIDB4MTQsIDB4MDEsIEhEQV9JTlBVVCksCkBAIC0xNzE5LDcgKzE3NzAsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA1MV9ocF9taXhlcnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDUxX2hwX21peGVyc1tdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBWb2x1bWUiLCAweDE0LCAweDAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJJbnRlcm5hbCBNaWMgU3dpdGNoIiwgMHgxNCwgMHgwMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgVm9sdW1lIiwgMHgxNSwgMHgwMCwgSERBX0lOUFVUKSwKQEAgLTE3MjcsMTkgKzE3NzgsMTkgQEAKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNTFfaHBfZHY2NzM2X21peGVyc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNTFfaHBfZHY2NzM2X21peGVyc1tdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgxNCwgMHgwMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDE0LCAweDAwLCBIREFfSU5QVVQpLAogCXt9CiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA1MV9mNzAwX21peGVyc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNTFfZjcwMF9taXhlcnNbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MTQsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgxNCwgMHgwMSwgSERBX0lOUFVUKSwKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNTFfdG9zaGliYV9taXhlcnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDUxX3Rvc2hpYmFfbWl4ZXJzW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIFZvbHVtZSIsIDB4MTQsIDB4MDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkludGVybmFsIE1pYyBTd2l0Y2giLCAweDE0LCAweDAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBWb2x1bWUiLCAweDE0LCAweDAxLCBIREFfSU5QVVQpLApAQCAtMTc0Nyw3ICsxNzk4LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDUxX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA1MV9pbml0X3ZlcmJzW10gPSB7CiAJLyogTGluZSBpbiwgTWljICovCiAJezB4MTcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCkgfCAweDAzfSwKIAl7MHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKQEAgLTE3NzYsNyArMTgyNyw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDUxX2hwX2R2NjczNl9pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGN4dDUwNTFfaHBfZHY2NzM2X2luaXRfdmVyYnNbXSA9IHsKIAkvKiBMaW5lIGluLCBNaWMgKi8KIAl7MHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKSB8IDB4MDN9LAogCXsweDE3LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LApAQCAtMTgwMSw3ICsxODUyLDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGN4dDUwNTFfbGVub3ZvX3gyMDBfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDUxX2xlbm92b194MjAwX2luaXRfdmVyYnNbXSA9IHsKIAkvKiBMaW5lIGluLCBNaWMgKi8KIAl7MHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKSB8IDB4MDN9LAogCXsweDE3LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LApAQCAtMTgzNCw3ICsxODg1LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGN4dDUwNTFfZjcwMF9pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGN4dDUwNTFfZjcwMF9pbml0X3ZlcmJzW10gPSB7CiAJLyogTGluZSBpbiwgTWljICovCiAJezB4MTcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCkgfCAweDAzfSwKIAl7MHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKQEAgLTE4NjksNyArMTkyMCw3IEBACiAJc25kX2hkYV9pbnB1dF9qYWNrX3JlcG9ydChjb2RlYywgbmlkKTsKIH0KIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDUxX2lkZWFwYWRfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDUxX2lkZWFwYWRfaW5pdF92ZXJic1tdID0gewogCS8qIFN1Yndvb2ZlciAqLwogCXsweDFiLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAogCXsweDFiLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCkBAIC0xOTA2LDYgKzE5NTcsNyBAQAogCUNYVDUwNTFfRjcwMCwgICAgICAgLyogSFAgQ29tcGFxIFByZXNhcmlvIEY3MDAgKi8KIAlDWFQ1MDUxX1RPU0hJQkEsCS8qIFRvc2hpYmEgTTMwMCAmIGNvICovCiAJQ1hUNTA1MV9JREVBUEFELAkvKiBMZW5vdm8gSWRlYVBhZCBZNDMwICovCisJQ1hUNTA1MV9BVVRPLAkJLyogYXV0by1wYXJzZXIgKi8KIAlDWFQ1MDUxX01PREVMUwogfTsKIApAQCAtMTkxNyw5ICsxOTY5LDEwIEBACiAJW0NYVDUwNTFfRjcwMF0gICAgICAgICAgPSAiaHAtNzAwIiwKIAlbQ1hUNTA1MV9UT1NISUJBXQk9ICJ0b3NoaWJhIiwKIAlbQ1hUNTA1MV9JREVBUEFEXQk9ICJpZGVhcGFkIiwKKwlbQ1hUNTA1MV9BVVRPXQkJPSAiYXV0byIsCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgY3h0NTA1MV9jZmdfdGJsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgY3h0NTA1MV9jZmdfdGJsW10gPSB7CiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBjZiwgIkhQIERWNjczNiIsIENYVDUwNTFfSFBfRFY2NzM2KSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzNjBiLCAiQ29tcGFxIFByZXNhcmlvIENRNjAiLCBDWFQ1MDUxX0hQKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGVhLCAiQ29tcGFxIFByZXNhcmlvIEY3MDAiLCBDWFQ1MDUxX0Y3MDApLApAQCAtMTkzNyw2ICsxOTkwLDE2IEBACiAJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWM7CiAJaW50IGJvYXJkX2NvbmZpZzsKIAorCWJvYXJkX2NvbmZpZyA9IHNuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKGNvZGVjLCBDWFQ1MDUxX01PREVMUywKKwkJCQkJCSAgY3h0NTA1MV9tb2RlbHMsCisJCQkJCQkgIGN4dDUwNTFfY2ZnX3RibCk7CisjaWYgMCAvKiB1c2UgdGhlIG9sZCBtZXRob2QganVzdCBmb3Igc2FmZXR5ICovCisJaWYgKGJvYXJkX2NvbmZpZyA8IDApCisJCWJvYXJkX2NvbmZpZyA9IENYVDUwNTFfQVVUTzsKKyNlbmRpZgorCWlmIChib2FyZF9jb25maWcgPT0gQ1hUNTA1MV9BVVRPKQorCQlyZXR1cm4gcGF0Y2hfY29uZXhhbnRfYXV0byhjb2RlYyk7CisKIAlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNwZWMpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTk2Nyw5ICsyMDMwLDYgQEAKIAogCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDUxX2hwX3Vuc29sX2V2ZW50OwogCi0JYm9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoY29kZWMsIENYVDUwNTFfTU9ERUxTLAotCQkJCQkJICBjeHQ1MDUxX21vZGVscywKLQkJCQkJCSAgY3h0NTA1MV9jZmdfdGJsKTsKIAlzcGVjLT5hdXRvX21pYyA9IEFVVE9fTUlDX1BPUlRCIHwgQVVUT19NSUNfUE9SVEM7CiAJc3dpdGNoIChib2FyZF9jb25maWcpIHsKIAljYXNlIENYVDUwNTFfSFA6CkBAIC0yMDExLDE3ICsyMDcxLDE3IEBACiAKIC8qIENvbmV4YW50IDUwNjYgc3BlY2lmaWMgKi8KIAotc3RhdGljIGhkYV9uaWRfdCBjeHQ1MDY2X2RhY19uaWRzWzFdID0geyAweDEwIH07Ci1zdGF0aWMgaGRhX25pZF90IGN4dDUwNjZfYWRjX25pZHNbM10gPSB7IDB4MTQsIDB4MTUsIDB4MTYgfTsKLXN0YXRpYyBoZGFfbmlkX3QgY3h0NTA2Nl9jYXBzcmNfbmlkc1sxXSA9IHsgMHgxNyB9Owotc3RhdGljIGhkYV9uaWRfdCBjeHQ1MDY2X2RpZ291dF9waW5fbmlkc1syXSA9IHsgMHgyMCwgMHgyMiB9Oworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBjeHQ1MDY2X2RhY19uaWRzWzFdID0geyAweDEwIH07CitzdGF0aWMgY29uc3QgaGRhX25pZF90IGN4dDUwNjZfYWRjX25pZHNbM10gPSB7IDB4MTQsIDB4MTUsIDB4MTYgfTsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3QgY3h0NTA2Nl9jYXBzcmNfbmlkc1sxXSA9IHsgMHgxNyB9Oworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBjeHQ1MDY2X2RpZ291dF9waW5fbmlkc1syXSA9IHsgMHgyMCwgMHgyMiB9OwogCiAvKiBPTFBDJ3MgbWljcm9waG9uZSBwb3J0IGlzIERDIGNvdXBsZWQgZm9yIHVzZSB3aXRoIGV4dGVybmFsIHNlbnNvcnMsCiAgKiB0aGVyZWZvcmUgd2UgdXNlIGEgNTAlIG1pYyBiaWFzIGluIG9yZGVyIHRvIGNlbnRlciB0aGUgaW5wdXQgc2lnbmFsIHdpdGgKICAqIHRoZSBEQyBpbnB1dCByYW5nZSBvZiB0aGUgY29kZWMuICovCiAjZGVmaW5lIENYVDUwNjZfT0xQQ19FWFRfTUlDX0JJQVMgUElOX1ZSRUY1MAogCi1zdGF0aWMgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgY3h0NTA2Nl9tb2Rlc1sxXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBjeHQ1MDY2X21vZGVzWzFdID0gewogCXsgMiwgTlVMTCB9LAogfTsKIApAQCAtMjE3Niw3ICsyMjM2LDcgQEAKIAkJezB4MjMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCiAJCXt9CiAJfTsKLQlzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGV4dF9taWNfYWJzZW50W10gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBleHRfbWljX2Fic2VudFtdID0gewogCQkvKiBlbmFibGUgaW50ZXJuYWwgbWljLCBwb3J0IEMgKi8KIAkJezB4MjMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKIApAQCAtMjIwOSw3ICsyMjY5LDcgQEAKIAkJezB4MjMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCiAJCXt9CiAJfTsKLQlzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGV4dF9taWNfYWJzZW50W10gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBleHRfbWljX2Fic2VudFtdID0gewogCQl7MHgxNCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDJ9LAogCQl7MHgyMywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAogCQl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKQEAgLTIyNTcsNyArMjMxNyw3IEBACiB7CiAJdW5zaWduZWQgaW50IGV4dF9wcmVzZW50LCBkb2NrX3ByZXNlbnQ7CiAKLQlzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGV4dF9taWNfcHJlc2VudFtdID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgZXh0X21pY19wcmVzZW50W10gPSB7CiAJCXsweDE0LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMH0sCiAJCXsweDE3LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMX0sCiAJCXsweDFiLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LApAQCAtMjI2NSw3ICsyMzI1LDcgQEAKIAkJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCiAJCXt9CiAJfTsKLQlzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGRvY2tfbWljX3ByZXNlbnRbXSA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGRvY2tfbWljX3ByZXNlbnRbXSA9IHsKIAkJezB4MTQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAwfSwKIAkJezB4MTcsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAwfSwKIAkJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCkBAIC0yMjczLDcgKzIzMzMsNyBAQAogCQl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKIAkJe30KIAl9OwotCXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgZXh0X21pY19hYnNlbnRbXSA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGV4dF9taWNfYWJzZW50W10gPSB7CiAJCXsweDE0LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMn0sCiAJCXsweDIzLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCiAJCXsweDFiLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LApAQCAtMjUzNyw3ICsyNTk3LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgY29uZXhhbnRfY2hlY2tfZGlnX291dHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCi0JCQkJICAgIGhkYV9uaWRfdCAqZGlnX3BpbnMsCisJCQkJICAgIGNvbnN0IGhkYV9uaWRfdCAqZGlnX3BpbnMsCiAJCQkJICAgIGludCBudW1fcGlucykKIHsKIAlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwpAQCAtMjU1Nyw3ICsyNjE3LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBjeHQ1MDY2X2NhcHR1cmVfc291cmNlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4IGN4dDUwNjZfY2FwdHVyZV9zb3VyY2UgPSB7CiAJLm51bV9pdGVtcyA9IDQsCiAJLml0ZW1zID0gewogCQl7ICJNaWMgQiIsIDAgfSwKQEAgLTI1NjcsNyArMjYyNyw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2JpbmRfY3RscyBjeHQ1MDY2X2JpbmRfY2FwdHVyZV92b2xfb3RoZXJzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfYmluZF9jdGxzIGN4dDUwNjZfYmluZF9jYXB0dXJlX3ZvbF9vdGhlcnMgPSB7CiAJLm9wcyA9ICZzbmRfaGRhX2JpbmRfdm9sLAogCS52YWx1ZXMgPSB7CiAJCUhEQV9DT01QT1NFX0FNUF9WQUwoMHgxNCwgMywgMCwgSERBX0lOUFVUKSwKQEAgLTI1NzYsNyArMjYzNiw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2JpbmRfY3RscyBjeHQ1MDY2X2JpbmRfY2FwdHVyZV9zd19vdGhlcnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9iaW5kX2N0bHMgY3h0NTA2Nl9iaW5kX2NhcHR1cmVfc3dfb3RoZXJzID0gewogCS5vcHMgPSAmc25kX2hkYV9iaW5kX3N3LAogCS52YWx1ZXMgPSB7CiAJCUhEQV9DT01QT1NFX0FNUF9WQUwoMHgxNCwgMywgMCwgSERBX0lOUFVUKSwKQEAgLTI1ODUsMTIgKzI2NDUsMTIgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNjZfbWl4ZXJfbWFzdGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA2Nl9taXhlcl9tYXN0ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgxMCwgMHgwMCwgSERBX09VVFBVVCksCiAJe30KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDY2X21peGVyX21hc3Rlcl9vbHBjW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA2Nl9taXhlcl9tYXN0ZXJfb2xwY1tdID0gewogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLApAQCAtMjYwOSw3ICsyNjY5LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNjZfbWl4ZXJfb2xwY19kY1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNjZfbWl4ZXJfb2xwY19kY1tdID0gewogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIkRDIE1vZGUgRW5hYmxlIFN3aXRjaCIsCkBAIC0yNjI3LDcgKzI2ODcsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA2Nl9taXhlcnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDY2X21peGVyc1tdID0gewogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLApAQCAtMjY1MCw3ICsyNzEwLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNjZfdm9zdHJvX21peGVyc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNjZfdm9zdHJvX21peGVyc1tdID0gewogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIkludGVybmFsIE1pYyBCb29zdCBDYXB0dXJlIEVudW0iLApAQCAtMjY2Miw3ICsyNzIyLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDY2X2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA2Nl9pbml0X3ZlcmJzW10gPSB7CiAJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sIC8qIFBvcnQgQiAqLwogCXsweDFiLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LCAvKiBQb3J0IEMgKi8KIAl7MHgxZSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LCAvKiBQb3J0IEYgKi8KQEAgLTI3MTcsNyArMjc3Nyw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDY2X2luaXRfdmVyYnNfb2xwY1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDY2X2luaXRfdmVyYnNfb2xwY1tdID0gewogCS8qIFBvcnQgQTogaGVhZHBob25lcyAqLwogCXsweDE5LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCiAJezB4MTksIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwgLyogREFDMSAqLwpAQCAtMjc3OCw3ICsyODM4LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGN4dDUwNjZfaW5pdF92ZXJic192b3N0cm9bXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA2Nl9pbml0X3ZlcmJzX3Zvc3Ryb1tdID0gewogCS8qIFBvcnQgQTogaGVhZHBob25lcyAqLwogCXsweDE5LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAogCXsweDE5LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sIC8qIERBQzEgKi8KQEAgLTI4MzksNyArMjg5OSw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDY2X2luaXRfdmVyYnNfaWRlYXBhZFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDY2X2luaXRfdmVyYnNfaWRlYXBhZFtdID0gewogCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LCAvKiBQb3J0IEIgKi8KIAl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwgLyogUG9ydCBDICovCiAJezB4MWUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwgLyogUG9ydCBGICovCkBAIC0yODg5LDcgKzI5NDksNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA2Nl9pbml0X3ZlcmJzX3RoaW5rcGFkW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGN4dDUwNjZfaW5pdF92ZXJic190aGlua3BhZFtdID0gewogCXsweDFlLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sIC8qIFBvcnQgRiAqLwogCXsweDFkLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sIC8qIFBvcnQgRSAqLwogCkBAIC0yOTQ3LDEzICszMDA3LDEzIEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDY2X2luaXRfdmVyYnNfcG9ydGRfbG9bXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA2Nl9pbml0X3ZlcmJzX3BvcnRkX2xvW10gPSB7CiAJezB4MWMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCiAJeyB9IC8qIGVuZCAqLwogfTsKIAogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGN4dDUwNjZfaW5pdF92ZXJic19ocF9sYXB0b3BbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA2Nl9pbml0X3ZlcmJzX2hwX2xhcHRvcFtdID0gewogCXsweDE0LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwKIAl7MHgxOSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IENPTkVYQU5UX0hQX0VWRU5UfSwKIAl7MHgxYiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IENPTkVYQU5UX01JQ19FVkVOVH0sCkBAIC0yOTk3LDYgKzMwNTcsNyBAQAogCUNYVDUwNjZfVEhJTktQQUQsCS8qIExlbm92byBUaGlua1BhZCBUNDEwcywgb3RoZXJzPyAqLwogCUNYVDUwNjZfQVNVUywJCS8qIEFzdXMgSzUySlUsIExlbm92byBHNTYwIC0gSW50IG1pYyBhdCAweDFhIGFuZCBFeHQgbWljIGF0IDB4MWIgKi8KIAlDWFQ1MDY2X0hQX0xBUFRPUCwgICAgICAvKiBIUCBMYXB0b3AgKi8KKwlDWFQ1MDY2X0FVVE8sCQkvKiBCSU9TIGF1dG8tcGFyc2VyICovCiAJQ1hUNTA2Nl9NT0RFTFMKIH07CiAKQEAgLTMwMDksOSArMzA3MCwxMCBAQAogCVtDWFQ1MDY2X1RISU5LUEFEXQk9ICJ0aGlua3BhZCIsCiAJW0NYVDUwNjZfQVNVU10JCT0gImFzdXMiLAogCVtDWFQ1MDY2X0hQX0xBUFRPUF0JPSAiaHAtbGFwdG9wIiwKKwlbQ1hUNTA2Nl9BVVRPXQkJPSAiYXV0byIsCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgY3h0NTA2Nl9jZmdfdGJsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgY3h0NTA2Nl9jZmdfdGJsW10gPSB7CiAJU05EX1BDSV9RVUlSS19NQVNLKDB4MTAyNSwgMHhmZjAwLCAweDA0MDAsICJBY2VyIiwgQ1hUNTA2Nl9JREVBUEFEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwMmQ4LCAiRGVsbCBWb3N0cm8iLCBDWFQ1MDY2X0RFTExfVk9TVFJPKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwMmY1LCAiRGVsbCBWb3N0cm8gMzIwIiwgQ1hUNTA2Nl9JREVBUEFEKSwKQEAgLTMwNDYsNiArMzEwOCwxNSBAQAogCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjOwogCWludCBib2FyZF9jb25maWc7CiAKKwlib2FyZF9jb25maWcgPSBzbmRfaGRhX2NoZWNrX2JvYXJkX2NvbmZpZyhjb2RlYywgQ1hUNTA2Nl9NT0RFTFMsCisJCQkJCQkgIGN4dDUwNjZfbW9kZWxzLCBjeHQ1MDY2X2NmZ190YmwpOworI2lmIDAgLyogdXNlIHRoZSBvbGQgbWV0aG9kIGp1c3QgZm9yIHNhZmV0eSAqLworCWlmIChib2FyZF9jb25maWcgPCAwKQorCQlib2FyZF9jb25maWcgPSBDWFQ1MDY2X0FVVE87CisjZW5kaWYKKwlpZiAoYm9hcmRfY29uZmlnID09IENYVDUwNjZfQVVUTykKKwkJcmV0dXJuIHBhdGNoX2NvbmV4YW50X2F1dG8oY29kZWMpOworCiAJc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzcGVjKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTMwNzYsOCArMzE0Nyw2IEBACiAKIAlzZXRfYmVlcF9hbXAoc3BlYywgMHgxMywgMCwgSERBX09VVFBVVCk7CiAKLQlib2FyZF9jb25maWcgPSBzbmRfaGRhX2NoZWNrX2JvYXJkX2NvbmZpZyhjb2RlYywgQ1hUNTA2Nl9NT0RFTFMsCi0JCQkJCQkgIGN4dDUwNjZfbW9kZWxzLCBjeHQ1MDY2X2NmZ190YmwpOwogCXN3aXRjaCAoYm9hcmRfY29uZmlnKSB7CiAJZGVmYXVsdDoKIAljYXNlIENYVDUwNjZfTEFQVE9QOgpAQCAtMzE5NSw3ICszMjY0LDQ1IEBACiAgKiBBdXRvbWF0aWMgcGFyc2VyIGZvciBDWDIwNjQxICYgY28KICAqLwogCi1zdGF0aWMgaGRhX25pZF90IGN4X2F1dG9fYWRjX25pZHNbXSA9IHsgMHgxNCB9Oworc3RhdGljIGludCBjeF9hdXRvX2NhcHR1cmVfcGNtX3ByZXBhcmUoc3RydWN0IGhkYV9wY21fc3RyZWFtICpoaW5mbywKKwkJCQkgICAgICAgc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBzdHJlYW1fdGFnLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZm9ybWF0LAorCQkJCSAgICAgICBzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWhkYV9uaWRfdCBhZGMgPSBzcGVjLT5pbXV4X2luZm9bc3BlYy0+Y3VyX211eFswXV0uYWRjOworCWlmIChzcGVjLT5hZGNfc3dpdGNoaW5nKSB7CisJCXNwZWMtPmN1cl9hZGMgPSBhZGM7CisJCXNwZWMtPmN1cl9hZGNfc3RyZWFtX3RhZyA9IHN0cmVhbV90YWc7CisJCXNwZWMtPmN1cl9hZGNfZm9ybWF0ID0gZm9ybWF0OworCX0KKwlzbmRfaGRhX2NvZGVjX3NldHVwX3N0cmVhbShjb2RlYywgYWRjLCBzdHJlYW1fdGFnLCAwLCBmb3JtYXQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4X2F1dG9fY2FwdHVyZV9wY21fY2xlYW51cChzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmhpbmZvLAorCQkJCSAgICAgICBzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkgICAgICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzbmRfaGRhX2NvZGVjX2NsZWFudXBfc3RyZWFtKGNvZGVjLCBzcGVjLT5jdXJfYWRjKTsKKwlzcGVjLT5jdXJfYWRjID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBjeF9hdXRvX3BjbV9hbmFsb2dfY2FwdHVyZSA9IHsKKwkuc3Vic3RyZWFtcyA9IDEsCisJLmNoYW5uZWxzX21pbiA9IDIsCisJLmNoYW5uZWxzX21heCA9IDIsCisJLm5pZCA9IDAsIC8qIGZpbGwgbGF0ZXIgKi8KKwkub3BzID0geworCQkucHJlcGFyZSA9IGN4X2F1dG9fY2FwdHVyZV9wY21fcHJlcGFyZSwKKwkJLmNsZWFudXAgPSBjeF9hdXRvX2NhcHR1cmVfcGNtX2NsZWFudXAKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBjeF9hdXRvX2FkY19uaWRzW10gPSB7IDB4MTQgfTsKIAogLyogZ2V0IHRoZSBjb25uZWN0aW9uIGluZGV4IG9mIEBuaWQgaW4gdGhlIHdpZGdldCBAbXV4ICovCiBzdGF0aWMgaW50IGdldF9jb25uZWN0aW9uX2luZGV4KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbXV4LApAQCAtMzMyMCw2MSArMzQyNywzMzkgQEAKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHNwZWMtPnByaXZhdGVfZGFjX25pZHM7CiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCi0JaWYgKGNmZy0+aHBfb3V0cyA+IDApCi0JCXNwZWMtPmF1dG9fbXV0ZSA9IDE7CisJZm9yIChpID0gMDsgaSA8IGNmZy0+aHBfb3V0czsgaSsrKSB7CisJCWlmIChpc19qYWNrX2RldGVjdGFibGUoY29kZWMsIGNmZy0+aHBfcGluc1tpXSkpIHsKKwkJCXNwZWMtPmF1dG9fbXV0ZSA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoc3BlYy0+YXV0b19tdXRlICYmIGNmZy0+bGluZV9vdXRfcGluc1swXSAmJgorCSAgICBjZmctPmxpbmVfb3V0X3BpbnNbMF0gIT0gY2ZnLT5ocF9waW5zWzBdICYmCisJICAgIGNmZy0+bGluZV9vdXRfcGluc1swXSAhPSBjZmctPnNwZWFrZXJfcGluc1swXSkgeworCQlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5saW5lX291dHM7IGkrKykgeworCQkJaWYgKGlzX2phY2tfZGV0ZWN0YWJsZShjb2RlYywgY2ZnLT5saW5lX291dF9waW5zW2ldKSkgeworCQkJCXNwZWMtPmRldGVjdF9saW5lID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlzcGVjLT5hdXRvbXV0ZV9saW5lcyA9IHNwZWMtPmRldGVjdF9saW5lOworCX0KKwogCXNwZWMtPnZtYXN0ZXJfbmlkID0gc3BlYy0+cHJpdmF0ZV9kYWNfbmlkc1swXTsKIH0KIAorc3RhdGljIHZvaWQgY3hfYXV0b190dXJuX2VhcGQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGludCBudW1fcGlucywKKwkJCSAgICAgIGhkYV9uaWRfdCAqcGlucywgYm9vbCBvbik7CisKK3N0YXRpYyB2b2lkIGRvX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBpbnQgbnVtX3BpbnMsCisJCQloZGFfbmlkX3QgKnBpbnMsIGJvb2wgb24pCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IG51bV9waW5zOyBpKyspCisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBpbnNbaV0sIDAsCisJCQkJICAgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKKwkJCQkgICAgb24gPyBQSU5fT1VUIDogMCk7CisJY3hfYXV0b190dXJuX2VhcGQoY29kZWMsIG51bV9waW5zLCBwaW5zLCBvbik7Cit9CisKK3N0YXRpYyBpbnQgZGV0ZWN0X2phY2tzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBpbnQgbnVtX3BpbnMsIGhkYV9uaWRfdCAqcGlucykKK3sKKwlpbnQgaSwgcHJlc2VudCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BpbnM7IGkrKykgeworCQloZGFfbmlkX3QgbmlkID0gcGluc1tpXTsKKwkJaWYgKCFuaWQgfHwgIWlzX2phY2tfZGV0ZWN0YWJsZShjb2RlYywgbmlkKSkKKwkJCWJyZWFrOworCQlzbmRfaGRhX2lucHV0X2phY2tfcmVwb3J0KGNvZGVjLCBuaWQpOworCQlwcmVzZW50IHw9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIG5pZCk7CisJfQorCXJldHVybiBwcmVzZW50OworfQorCiAvKiBhdXRvLW11dGUvdW5tdXRlIHNwZWFrZXIgYW5kIGxpbmUgb3V0cyBhY2NvcmRpbmcgdG8gaGVhZHBob25lIGphY2sgKi8KK3N0YXRpYyB2b2lkIGN4X2F1dG9fdXBkYXRlX3NwZWFrZXJzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnID0gJnNwZWMtPmF1dG9jZmc7CisJaW50IG9uOworCisJaWYgKCFzcGVjLT5hdXRvX211dGUpCisJCW9uID0gMDsKKwllbHNlCisJCW9uID0gc3BlYy0+aHBfcHJlc2VudCB8IHNwZWMtPmxpbmVfcHJlc2VudDsKKwljeF9hdXRvX3R1cm5fZWFwZChjb2RlYywgY2ZnLT5ocF9vdXRzLCBjZmctPmhwX3BpbnMsIG9uKTsKKwlkb19hdXRvbXV0ZShjb2RlYywgY2ZnLT5zcGVha2VyX291dHMsIGNmZy0+c3BlYWtlcl9waW5zLCAhb24pOworCisJLyogdG9nZ2xlIGxpbmUtb3V0IG11dGVzIGlmIG5lZWRlZCwgdG9vICovCisJLyogaWYgTE8gaXMgYSBjb3B5IG9mIGVpdGhlciBIUCBvciBTcGVha2VyLCBkb24ndCBuZWVkIHRvIGhhbmRsZSBpdCAqLworCWlmIChjZmctPmxpbmVfb3V0X3BpbnNbMF0gPT0gY2ZnLT5ocF9waW5zWzBdIHx8CisJICAgIGNmZy0+bGluZV9vdXRfcGluc1swXSA9PSBjZmctPnNwZWFrZXJfcGluc1swXSkKKwkJcmV0dXJuOworCWlmICghc3BlYy0+YXV0b211dGVfbGluZXMgfHwgIXNwZWMtPmF1dG9fbXV0ZSkKKwkJb24gPSAwOworCWVsc2UKKwkJb24gPSBzcGVjLT5ocF9wcmVzZW50OworCWRvX2F1dG9tdXRlKGNvZGVjLCBjZmctPmxpbmVfb3V0cywgY2ZnLT5saW5lX291dF9waW5zLCAhb24pOworfQorCiBzdGF0aWMgdm9pZCBjeF9hdXRvX2hwX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnID0gJnNwZWMtPmF1dG9jZmc7Ci0JaW50IGksIHByZXNlbnQ7CiAKIAlpZiAoIXNwZWMtPmF1dG9fbXV0ZSkKIAkJcmV0dXJuOwotCXByZXNlbnQgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBjZmctPmhwX291dHM7IGkrKykgewotCQlpZiAoc25kX2hkYV9qYWNrX2RldGVjdChjb2RlYywgY2ZnLT5ocF9waW5zW2ldKSkgewotCQkJcHJlc2VudCA9IDE7Ci0JCQlicmVhazsKKwlzcGVjLT5ocF9wcmVzZW50ID0gZGV0ZWN0X2phY2tzKGNvZGVjLCBjZmctPmhwX291dHMsIGNmZy0+aHBfcGlucyk7CisJY3hfYXV0b191cGRhdGVfc3BlYWtlcnMoY29kZWMpOworfQorCitzdGF0aWMgdm9pZCBjeF9hdXRvX2xpbmVfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcgPSAmc3BlYy0+YXV0b2NmZzsKKworCWlmICghc3BlYy0+YXV0b19tdXRlIHx8ICFzcGVjLT5kZXRlY3RfbGluZSkKKwkJcmV0dXJuOworCXNwZWMtPmxpbmVfcHJlc2VudCA9IGRldGVjdF9qYWNrcyhjb2RlYywgY2ZnLT5saW5lX291dHMsCisJCQkJCSAgY2ZnLT5saW5lX291dF9waW5zKTsKKwljeF9hdXRvX3VwZGF0ZV9zcGVha2Vycyhjb2RlYyk7Cit9CisKK3N0YXRpYyBpbnQgY3hfYXV0b211dGVfbW9kZV9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB0ZXh0czJbXSA9IHsKKwkJIkRpc2FibGVkIiwgIkVuYWJsZWQiCisJfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRleHRzM1tdID0geworCQkiRGlzYWJsZWQiLCAiU3BlYWtlciBPbmx5IiwgIkxpbmUtT3V0K1NwZWFrZXIiCisJfTsKKwljb25zdCBjaGFyICogY29uc3QgKnRleHRzOworCisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CisJdWluZm8tPmNvdW50ID0gMTsKKwlpZiAoc3BlYy0+YXV0b211dGVfaHBfbG8pIHsKKwkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAzOworCQl0ZXh0cyA9IHRleHRzMzsKKwl9IGVsc2UgeworCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDI7CisJCXRleHRzID0gdGV4dHMyOworCX0KKwlpZiAodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+PSB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcykKKwkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zIC0gMTsKKwlzdHJjcHkodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwKKwkgICAgICAgdGV4dHNbdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4X2F1dG9tdXRlX21vZGVfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJdW5zaWduZWQgaW50IHZhbDsKKwlpZiAoIXNwZWMtPmF1dG9fbXV0ZSkKKwkJdmFsID0gMDsKKwllbHNlIGlmICghc3BlYy0+YXV0b211dGVfbGluZXMpCisJCXZhbCA9IDE7CisJZWxzZQorCQl2YWwgPSAyOworCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSB2YWw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3hfYXV0b211dGVfbW9kZV9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKworCXN3aXRjaCAodWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSkgeworCWNhc2UgMDoKKwkJaWYgKCFzcGVjLT5hdXRvX211dGUpCisJCQlyZXR1cm4gMDsKKwkJc3BlYy0+YXV0b19tdXRlID0gMDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlpZiAoc3BlYy0+YXV0b19tdXRlICYmICFzcGVjLT5hdXRvbXV0ZV9saW5lcykKKwkJCXJldHVybiAwOworCQlzcGVjLT5hdXRvX211dGUgPSAxOworCQlzcGVjLT5hdXRvbXV0ZV9saW5lcyA9IDA7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJaWYgKCFzcGVjLT5hdXRvbXV0ZV9ocF9sbykKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoc3BlYy0+YXV0b19tdXRlICYmIHNwZWMtPmF1dG9tdXRlX2xpbmVzKQorCQkJcmV0dXJuIDA7CisJCXNwZWMtPmF1dG9fbXV0ZSA9IDE7CisJCXNwZWMtPmF1dG9tdXRlX2xpbmVzID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWN4X2F1dG9fdXBkYXRlX3NwZWFrZXJzKGNvZGVjKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4X2F1dG9tdXRlX21vZGVfZW51bVtdID0geworCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIkF1dG8tTXV0ZSBNb2RlIiwKKwkJLmluZm8gPSBjeF9hdXRvbXV0ZV9tb2RlX2luZm8sCisJCS5nZXQgPSBjeF9hdXRvbXV0ZV9tb2RlX2dldCwKKwkJLnB1dCA9IGN4X2F1dG9tdXRlX21vZGVfcHV0LAorCX0sCisJeyB9Cit9OworCitzdGF0aWMgaW50IGN4X2F1dG9fbXV4X2VudW1faW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCisJcmV0dXJuIHNuZF9oZGFfaW5wdXRfbXV4X2luZm8oJnNwZWMtPnByaXZhdGVfaW11eCwgdWluZm8pOworfQorCitzdGF0aWMgaW50IGN4X2F1dG9fbXV4X2VudW1fZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisKKwl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gc3BlYy0+Y3VyX211eFswXTsKKwlyZXR1cm4gMDsKK30KKworLyogbG9vayBmb3IgdGhlIHJvdXRlIHRoZSBnaXZlbiBwaW4gZnJvbSBtdXggYW5kIHJldHVybiB0aGUgaW5kZXg7CisgKiBpZiBkb19zZWxlY3QgaXMgc2V0LCBhY3R1YWxseSBzZWxlY3QgdGhlIHJvdXRlLgorICovCitzdGF0aWMgaW50IF9fc2VsZWN0X2lucHV0X2Nvbm5lY3Rpb24oc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBtdXgsCisJCQkJICAgICBoZGFfbmlkX3QgcGluLCBoZGFfbmlkX3QgKnNyY3AsCisJCQkJICAgICBib29sIGRvX3NlbGVjdCwgaW50IGRlcHRoKQoreworCWhkYV9uaWRfdCBjb25uW0hEQV9NQVhfTlVNX0lOUFVUU107CisJaW50IGksIG51bXM7CisKKwlzd2l0Y2ggKGdldF93Y2Fwc190eXBlKGdldF93Y2Fwcyhjb2RlYywgbXV4KSkpIHsKKwljYXNlIEFDX1dJRF9BVURfSU46CisJY2FzZSBBQ19XSURfQVVEX1NFTDoKKwljYXNlIEFDX1dJRF9BVURfTUlYOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJfQorCisJbnVtcyA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCBtdXgsIGNvbm4sIEFSUkFZX1NJWkUoY29ubikpOworCWZvciAoaSA9IDA7IGkgPCBudW1zOyBpKyspCisJCWlmIChjb25uW2ldID09IHBpbikgeworCQkJaWYgKGRvX3NlbGVjdCkKKwkJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBtdXgsIDAsCisJCQkJCQkgICAgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIGkpOworCQkJaWYgKHNyY3ApCisJCQkJKnNyY3AgPSBtdXg7CisJCQlyZXR1cm4gaTsKKwkJfQorCWRlcHRoKys7CisJaWYgKGRlcHRoID09IDIpCisJCXJldHVybiAtMTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtczsgaSsrKSB7CisJCWludCByZXQgID0gX19zZWxlY3RfaW5wdXRfY29ubmVjdGlvbihjb2RlYywgY29ubltpXSwgcGluLCBzcmNwLAorCQkJCQkJICAgICBkb19zZWxlY3QsIGRlcHRoKTsKKwkJaWYgKHJldCA+PSAwKSB7CisJCQlpZiAoZG9fc2VsZWN0KQorCQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG11eCwgMCwKKwkJCQkJCSAgICBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgaSk7CisJCQlyZXR1cm4gaTsKIAkJfQogCX0KLQlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5saW5lX291dHM7IGkrKykgewotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBjZmctPmxpbmVfb3V0X3BpbnNbaV0sIDAsCi0JCQkJICAgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKLQkJCQkgICAgcHJlc2VudCA/IDAgOiBQSU5fT1VUKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIHNlbGVjdF9pbnB1dF9jb25uZWN0aW9uKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbXV4LAorCQkJCSAgIGhkYV9uaWRfdCBwaW4pCit7CisJX19zZWxlY3RfaW5wdXRfY29ubmVjdGlvbihjb2RlYywgbXV4LCBwaW4sIE5VTEwsIHRydWUsIDApOworfQorCitzdGF0aWMgaW50IGdldF9pbnB1dF9jb25uZWN0aW9uKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbXV4LAorCQkJCWhkYV9uaWRfdCBwaW4pCit7CisJcmV0dXJuIF9fc2VsZWN0X2lucHV0X2Nvbm5lY3Rpb24oY29kZWMsIG11eCwgcGluLCBOVUxMLCBmYWxzZSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgY3hfYXV0b19tdXhfZW51bV91cGRhdGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJICAgY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXgsCisJCQkJICAgdW5zaWduZWQgaW50IGlkeCkKK3sKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWhkYV9uaWRfdCBhZGM7CisKKwlpZiAoIWltdXgtPm51bV9pdGVtcykKKwkJcmV0dXJuIDA7CisJaWYgKGlkeCA+PSBpbXV4LT5udW1faXRlbXMpCisJCWlkeCA9IGltdXgtPm51bV9pdGVtcyAtIDE7CisJaWYgKHNwZWMtPmN1cl9tdXhbMF0gPT0gaWR4KQorCQlyZXR1cm4gMDsKKwlhZGMgPSBzcGVjLT5pbXV4X2luZm9baWR4XS5hZGM7CisJc2VsZWN0X2lucHV0X2Nvbm5lY3Rpb24oY29kZWMsIHNwZWMtPmltdXhfaW5mb1tpZHhdLmFkYywKKwkJCQlzcGVjLT5pbXV4X2luZm9baWR4XS5waW4pOworCWlmIChzcGVjLT5jdXJfYWRjICYmIHNwZWMtPmN1cl9hZGMgIT0gYWRjKSB7CisJCS8qIHN0cmVhbSBpcyBydW5uaW5nLCBsZXQncyBzd2FwIHRoZSBjdXJyZW50IEFEQyAqLworCQlfX3NuZF9oZGFfY29kZWNfY2xlYW51cF9zdHJlYW0oY29kZWMsIHNwZWMtPmN1cl9hZGMsIDEpOworCQlzcGVjLT5jdXJfYWRjID0gYWRjOworCQlzbmRfaGRhX2NvZGVjX3NldHVwX3N0cmVhbShjb2RlYywgYWRjLAorCQkJCQkgICBzcGVjLT5jdXJfYWRjX3N0cmVhbV90YWcsIDAsCisJCQkJCSAgIHNwZWMtPmN1cl9hZGNfZm9ybWF0KTsKIAl9Ci0JZm9yIChpID0gMDsgIXByZXNlbnQgJiYgaSA8IGNmZy0+bGluZV9vdXRzOyBpKyspCi0JCWlmIChzbmRfaGRhX2phY2tfZGV0ZWN0KGNvZGVjLCBjZmctPmxpbmVfb3V0X3BpbnNbaV0pKQotCQkJcHJlc2VudCA9IDE7Ci0JZm9yIChpID0gMDsgaSA8IGNmZy0+c3BlYWtlcl9vdXRzOyBpKyspIHsKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgY2ZnLT5zcGVha2VyX3BpbnNbaV0sIDAsCi0JCQkJICAgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKLQkJCQkgICAgcHJlc2VudCA/IDAgOiBQSU5fT1VUKTsKLQl9CisJc3BlYy0+Y3VyX211eFswXSA9IGlkeDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBjeF9hdXRvX211eF9lbnVtX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCisJcmV0dXJuIGN4X2F1dG9fbXV4X2VudW1fdXBkYXRlKGNvZGVjLCAmc3BlYy0+cHJpdmF0ZV9pbXV4LAorCQkJCSAgICAgICB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4X2F1dG9fY2FwdHVyZV9taXhlcnNbXSA9IHsKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsCisJCS5pbmZvID0gY3hfYXV0b19tdXhfZW51bV9pbmZvLAorCQkuZ2V0ID0gY3hfYXV0b19tdXhfZW51bV9nZXQsCisJCS5wdXQgPSBjeF9hdXRvX211eF9lbnVtX3B1dAorCX0sCisJe30KK307CisKK3N0YXRpYyBib29sIHNlbGVjdF9hdXRvbWljKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBpbnQgaWR4LCBib29sIGRldGVjdCkKK3sKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWlmIChpZHggPCAwKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKGRldGVjdCAmJiAhc25kX2hkYV9qYWNrX2RldGVjdChjb2RlYywgc3BlYy0+aW11eF9pbmZvW2lkeF0ucGluKSkKKwkJcmV0dXJuIGZhbHNlOworCWN4X2F1dG9fbXV4X2VudW1fdXBkYXRlKGNvZGVjLCAmc3BlYy0+cHJpdmF0ZV9pbXV4LCBpZHgpOworCXJldHVybiB0cnVlOwogfQogCiAvKiBhdXRvbWF0aWMgc3dpdGNoIGludGVybmFsIGFuZCBleHRlcm5hbCBtaWMgKi8KIHN0YXRpYyB2b2lkIGN4X2F1dG9fYXV0b21pYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCXN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZyA9ICZzcGVjLT5hdXRvY2ZnOwotCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKLQlpbnQgZXh0X2lkeCA9IHNwZWMtPmF1dG9fbWljX2V4dDsKIAogCWlmICghc3BlYy0+YXV0b19taWMpCiAJCXJldHVybjsKLQlpZiAoc25kX2hkYV9qYWNrX2RldGVjdChjb2RlYywgY2ZnLT5pbnB1dHNbZXh0X2lkeF0ucGluKSkgewotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBzcGVjLT5hZGNfbmlkc1swXSwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsCi0JCQkJICAgIGltdXgtPml0ZW1zW2V4dF9pZHhdLmluZGV4KTsKLQl9IGVsc2UgewotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBzcGVjLT5hZGNfbmlkc1swXSwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsCi0JCQkJICAgIGltdXgtPml0ZW1zWyFleHRfaWR4XS5pbmRleCk7Ci0JfQorCWlmICghc2VsZWN0X2F1dG9taWMoY29kZWMsIHNwZWMtPmF1dG9fbWljX2V4dCwgdHJ1ZSkpCisJCWlmICghc2VsZWN0X2F1dG9taWMoY29kZWMsIHNwZWMtPmF1dG9fbWljX2RvY2ssIHRydWUpKQorCQkJc2VsZWN0X2F1dG9taWMoY29kZWMsIHNwZWMtPmF1dG9fbWljX2ludCwgZmFsc2UpOwogfQogCiBzdGF0aWMgdm9pZCBjeF9hdXRvX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQpAQCAtMzM4Myw3ICszNzY4LDkgQEAKIAlzd2l0Y2ggKHJlcyA+PiAyNikgewogCWNhc2UgQ09ORVhBTlRfSFBfRVZFTlQ6CiAJCWN4X2F1dG9faHBfYXV0b211dGUoY29kZWMpOwotCQlzbmRfaGRhX2lucHV0X2phY2tfcmVwb3J0KGNvZGVjLCBuaWQpOworCQlicmVhazsKKwljYXNlIENPTkVYQU5UX0xJTkVfRVZFTlQ6CisJCWN4X2F1dG9fbGluZV9hdXRvbXV0ZShjb2RlYyk7CiAJCWJyZWFrOwogCWNhc2UgQ09ORVhBTlRfTUlDX0VWRU5UOgogCQljeF9hdXRvX2F1dG9taWMoY29kZWMpOwpAQCAtMzM5Miw0MyArMzc3OSw0NSBAQAogCX0KIH0KIAotLyogcmV0dXJuIHRydWUgaWYgaXQncyBhbiBpbnRlcm5hbC1taWMgcGluICovCi1zdGF0aWMgaW50IGlzX2ludF9taWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW4pCi17Ci0JdW5zaWduZWQgaW50IGRlZl9jb25mID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBwaW4pOwotCXJldHVybiBnZXRfZGVmY2ZnX2RldmljZShkZWZfY29uZikgPT0gQUNfSkFDS19NSUNfSU4gJiYKLQkJc25kX2hkYV9nZXRfaW5wdXRfcGluX2F0dHIoZGVmX2NvbmYpID09IElOUFVUX1BJTl9BVFRSX0lOVDsKLX0KLQotLyogcmV0dXJuIHRydWUgaWYgaXQncyBhbiBleHRlcm5hbC1taWMgcGluICovCi1zdGF0aWMgaW50IGlzX2V4dF9taWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW4pCi17Ci0JdW5zaWduZWQgaW50IGRlZl9jb25mID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBwaW4pOwotCXJldHVybiBnZXRfZGVmY2ZnX2RldmljZShkZWZfY29uZikgPT0gQUNfSkFDS19NSUNfSU4gJiYKLQkJc25kX2hkYV9nZXRfaW5wdXRfcGluX2F0dHIoZGVmX2NvbmYpID49IElOUFVUX1BJTl9BVFRSX05PUk1BTCAmJgotCQkoc25kX2hkYV9xdWVyeV9waW5fY2Fwcyhjb2RlYywgcGluKSAmIEFDX1BJTkNBUF9QUkVTX0RFVEVDVCk7Ci19Ci0KIC8qIGNoZWNrIHdoZXRoZXIgdGhlIHBpbiBjb25maWcgaXMgc3VpdGFibGUgZm9yIGF1dG8tbWljIHN3aXRjaGluZzsKLSAqIGF1dG8tbWljIGlzIGVuYWJsZWQgb25seSB3aGVuIG9uZSBpbnQtbWljIGFuZCBvbmUtZXh0IG1pYyBleGlzdAorICogYXV0by1taWMgaXMgZW5hYmxlZCBvbmx5IHdoZW4gb25lIGludC1taWMgYW5kIG9uZSBleHQtIGFuZC9vcgorICogb25lIGRvY2stbWljIGV4aXN0CiAgKi8KIHN0YXRpYyB2b2lkIGN4X2F1dG9fY2hlY2tfYXV0b19taWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcgPSAmc3BlYy0+YXV0b2NmZzsKKwlpbnQgcHNldFtJTlBVVF9QSU5fQVRUUl9OT1JNQUwgKyAxXTsKKwlpbnQgaTsKIAotCWlmIChpc19leHRfbWljKGNvZGVjLCBjZmctPmlucHV0c1swXS5waW4pICYmCi0JICAgIGlzX2ludF9taWMoY29kZWMsIGNmZy0+aW5wdXRzWzFdLnBpbikpIHsKLQkJc3BlYy0+YXV0b19taWMgPSAxOwotCQlzcGVjLT5hdXRvX21pY19leHQgPSAxOwotCQlyZXR1cm47CisJZm9yIChpID0gMDsgaSA8IElOUFVUX1BJTl9BVFRSX05PUk1BTDsgaSsrKQorCQlwc2V0W2ldID0gLTE7CisJZm9yIChpID0gMDsgaSA8IHNwZWMtPnByaXZhdGVfaW11eC5udW1faXRlbXM7IGkrKykgeworCQloZGFfbmlkX3QgcGluID0gc3BlYy0+aW11eF9pbmZvW2ldLnBpbjsKKwkJdW5zaWduZWQgaW50IGRlZl9jb25mID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBwaW4pOworCQlpbnQgdHlwZSwgYXR0cjsKKwkJYXR0ciA9IHNuZF9oZGFfZ2V0X2lucHV0X3Bpbl9hdHRyKGRlZl9jb25mKTsKKwkJaWYgKGF0dHIgPT0gSU5QVVRfUElOX0FUVFJfVU5VU0VEKQorCQkJcmV0dXJuOyAvKiBpbnZhbGlkIGVudHJ5ICovCisJCWlmIChhdHRyID4gSU5QVVRfUElOX0FUVFJfTk9STUFMKQorCQkJYXR0ciA9IElOUFVUX1BJTl9BVFRSX05PUk1BTDsKKwkJaWYgKGF0dHIgIT0gSU5QVVRfUElOX0FUVFJfSU5UICYmCisJCSAgICAhaXNfamFja19kZXRlY3RhYmxlKGNvZGVjLCBwaW4pKQorCQkJcmV0dXJuOyAvKiBub24tZGV0ZWN0YWJsZSBwaW4gKi8KKwkJdHlwZSA9IGdldF9kZWZjZmdfZGV2aWNlKGRlZl9jb25mKTsKKwkJaWYgKHR5cGUgIT0gQUNfSkFDS19NSUNfSU4gJiYKKwkJICAgIChhdHRyICE9IElOUFVUX1BJTl9BVFRSX0RPQ0sgfHwgdHlwZSAhPSBBQ19KQUNLX0xJTkVfSU4pKQorCQkJcmV0dXJuOyAvKiBubyB2YWxpZCBpbnB1dCB0eXBlICovCisJCWlmIChwc2V0W2F0dHJdID49IDApCisJCQlyZXR1cm47IC8qIGFscmVhZHkgb2NjdXBpZWQgKi8KKwkJcHNldFthdHRyXSA9IGk7CiAJfQotCWlmIChpc19pbnRfbWljKGNvZGVjLCBjZmctPmlucHV0c1sxXS5waW4pICYmCi0JICAgIGlzX2V4dF9taWMoY29kZWMsIGNmZy0+aW5wdXRzWzBdLnBpbikpIHsKLQkJc3BlYy0+YXV0b19taWMgPSAxOwotCQlzcGVjLT5hdXRvX21pY19leHQgPSAwOwotCQlyZXR1cm47Ci0JfQorCWlmIChwc2V0W0lOUFVUX1BJTl9BVFRSX0lOVF0gPCAwIHx8CisJICAgIChwc2V0W0lOUFVUX1BJTl9BVFRSX05PUk1BTF0gPCAwICYmIHBzZXRbSU5QVVRfUElOX0FUVFJfRE9DS10pKQorCQlyZXR1cm47IC8qIG5vIGlucHV0IHRvIHN3aXRjaCovCisJc3BlYy0+YXV0b19taWMgPSAxOworCXNwZWMtPmF1dG9fbWljX2V4dCA9IHBzZXRbSU5QVVRfUElOX0FUVFJfTk9STUFMXTsKKwlzcGVjLT5hdXRvX21pY19kb2NrID0gcHNldFtJTlBVVF9QSU5fQVRUUl9ET0NLXTsKKwlzcGVjLT5hdXRvX21pY19pbnQgPSBwc2V0W0lOUFVUX1BJTl9BVFRSX0lOVF07CiB9CiAKIHN0YXRpYyB2b2lkIGN4X2F1dG9fcGFyc2VfaW5wdXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCkBAIC0zNDM2LDIyICszODI1LDM3IEBACiAJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcgPSAmc3BlYy0+YXV0b2NmZzsKIAlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eDsKLQlpbnQgaTsKKwlpbnQgaSwgajsKIAogCWltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OwogCWZvciAoaSA9IDA7IGkgPCBjZmctPm51bV9pbnB1dHM7IGkrKykgewotCQlpbnQgaWR4ID0gZ2V0X2Nvbm5lY3Rpb25faW5kZXgoY29kZWMsIHNwZWMtPmFkY19uaWRzWzBdLAotCQkJCQkgICAgICAgY2ZnLT5pbnB1dHNbaV0ucGluKTsKLQkJaWYgKGlkeCA+PSAwKSB7Ci0JCQljb25zdCBjaGFyICpsYWJlbDsKLQkJCWxhYmVsID0gaGRhX2dldF9hdXRvY2ZnX2lucHV0X2xhYmVsKGNvZGVjLCBjZmcsIGkpOwotCQkJc25kX2hkYV9hZGRfaW11eF9pdGVtKGltdXgsIGxhYmVsLCBpZHgsIE5VTEwpOworCQlmb3IgKGogPSAwOyBqIDwgc3BlYy0+bnVtX2FkY19uaWRzOyBqKyspIHsKKwkJCWhkYV9uaWRfdCBhZGMgPSBzcGVjLT5hZGNfbmlkc1tqXTsKKwkJCWludCBpZHggPSBnZXRfaW5wdXRfY29ubmVjdGlvbihjb2RlYywgYWRjLAorCQkJCQkJICAgICAgIGNmZy0+aW5wdXRzW2ldLnBpbik7CisJCQlpZiAoaWR4ID49IDApIHsKKwkJCQljb25zdCBjaGFyICpsYWJlbDsKKwkJCQlsYWJlbCA9IGhkYV9nZXRfYXV0b2NmZ19pbnB1dF9sYWJlbChjb2RlYywgY2ZnLCBpKTsKKwkJCQlzcGVjLT5pbXV4X2luZm9baW11eC0+bnVtX2l0ZW1zXS5pbmRleCA9IGk7CisJCQkJc3BlYy0+aW11eF9pbmZvW2ltdXgtPm51bV9pdGVtc10uYm9vc3QgPSAwOworCQkJCXNwZWMtPmltdXhfaW5mb1tpbXV4LT5udW1faXRlbXNdLmFkYyA9IGFkYzsKKwkJCQlzcGVjLT5pbXV4X2luZm9baW11eC0+bnVtX2l0ZW1zXS5waW4gPQorCQkJCQljZmctPmlucHV0c1tpXS5waW47CisJCQkJc25kX2hkYV9hZGRfaW11eF9pdGVtKGltdXgsIGxhYmVsLCBpZHgsIE5VTEwpOworCQkJCWJyZWFrOworCQkJfQogCQl9CiAJfQotCWlmIChpbXV4LT5udW1faXRlbXMgPT0gMiAmJiBjZmctPm51bV9pbnB1dHMgPT0gMikKKwlpZiAoaW11eC0+bnVtX2l0ZW1zID49IDIgJiYgY2ZnLT5udW1faW5wdXRzID09IGltdXgtPm51bV9pdGVtcykKIAkJY3hfYXV0b19jaGVja19hdXRvX21pYyhjb2RlYyk7Ci0JaWYgKGltdXgtPm51bV9pdGVtcyA+IDEgJiYgIXNwZWMtPmF1dG9fbWljKQotCQlzcGVjLT5pbnB1dF9tdXggPSBpbXV4OworCWlmIChpbXV4LT5udW1faXRlbXMgPiAxICYmICFzcGVjLT5hdXRvX21pYykgeworCQlmb3IgKGkgPSAxOyBpIDwgaW11eC0+bnVtX2l0ZW1zOyBpKyspIHsKKwkJCWlmIChzcGVjLT5pbXV4X2luZm9baV0uYWRjICE9IHNwZWMtPmltdXhfaW5mb1swXS5hZGMpIHsKKwkJCQlzcGVjLT5hZGNfc3dpdGNoaW5nID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KIH0KIAogLyogZ2V0IGRpZ2l0YWwtaW5wdXQgYXVkaW8gd2lkZ2V0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIHBpbiAqLwpAQCAtMzUxNywxNCArMzkyMSwxNSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBjeF9hdXRvX3R1cm5fb25fZWFwZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IG51bV9waW5zLAotCQkJCSBoZGFfbmlkX3QgKnBpbnMpCitzdGF0aWMgdm9pZCBjeF9hdXRvX3R1cm5fZWFwZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IG51bV9waW5zLAorCQkJICAgICAgaGRhX25pZF90ICpwaW5zLCBib29sIG9uKQogewogCWludCBpOwogCWZvciAoaSA9IDA7IGkgPCBudW1fcGluczsgaSsrKSB7CiAJCWlmIChzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBwaW5zW2ldKSAmIEFDX1BJTkNBUF9FQVBEKQogCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluc1tpXSwgMCwKLQkJCQkJICAgIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLCAweDAyKTsKKwkJCQkJICAgIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLAorCQkJCQkgICAgb24gPyAweDAyIDogMCk7CiAJfQogfQogCkBAIC0zNTM3LDYgKzM5NDIsMzQgQEAKIAkJCQkgICAgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIGlkeCk7CiB9CiAKK3N0YXRpYyB2b2lkIG11dGVfb3V0cHV0cyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IG51bV9uaWRzLAorCQkJIGNvbnN0IGhkYV9uaWRfdCAqbmlkcykKK3sKKwlpbnQgaSwgdmFsOworCisJZm9yIChpID0gMDsgaSA8IG51bV9uaWRzOyBpKyspIHsKKwkJaGRhX25pZF90IG5pZCA9IG5pZHNbaV07CisJCWlmICghKGdldF93Y2Fwcyhjb2RlYywgbmlkKSAmIEFDX1dDQVBfT1VUX0FNUCkpCisJCQljb250aW51ZTsKKwkJaWYgKHF1ZXJ5X2FtcF9jYXBzKGNvZGVjLCBuaWQsIEhEQV9PVVRQVVQpICYgQUNfQU1QQ0FQX01VVEUpCisJCQl2YWwgPSBBTVBfT1VUX01VVEU7CisJCWVsc2UKKwkJCXZhbCA9IEFNUF9PVVRfWkVSTzsKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAorCQkJCSAgICBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCB2YWwpOworCX0KK30KKworc3RhdGljIHZvaWQgZW5hYmxlX3Vuc29sX3BpbnMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGludCBudW1fcGlucywKKwkJCSAgICAgIGhkYV9uaWRfdCAqcGlucywgdW5zaWduZWQgaW50IHRhZykKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BpbnM7IGkrKykKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluc1tpXSwgMCwKKwkJCQkgICAgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLAorCQkJCSAgICBBQ19VU1JTUF9FTiB8IHRhZyk7Cit9CisKIHN0YXRpYyB2b2lkIGN4X2F1dG9faW5pdF9vdXRwdXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKQEAgLTM1NDQsNTEgKzM5NzcsNTMgQEAKIAloZGFfbmlkX3QgbmlkOwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzOyBpKyspCi0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2ldLCAwLAotCQkJCSAgICBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEUpOwotCisJbXV0ZV9vdXRwdXRzKGNvZGVjLCBzcGVjLT5tdWx0aW91dC5udW1fZGFjcywgc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMpOwogCWZvciAoaSA9IDA7IGkgPCBjZmctPmhwX291dHM7IGkrKykKIAkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgY2ZnLT5ocF9waW5zW2ldLCAwLAogCQkJCSAgICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUCk7Ci0JaWYgKHNwZWMtPmF1dG9fbXV0ZSkgewotCQlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5ocF9vdXRzOyBpKyspIHsKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIGNmZy0+aHBfcGluc1tpXSwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLAotCQkJCSAgICBBQ19VU1JTUF9FTiB8IENPTkVYQU5UX0hQX0VWRU5UKTsKLQkJfQotCQljeF9hdXRvX2hwX2F1dG9tdXRlKGNvZGVjKTsKLQl9IGVsc2UgewotCQlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5saW5lX291dHM7IGkrKykKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIGNmZy0+bGluZV9vdXRfcGluc1tpXSwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUKTsKLQkJZm9yIChpID0gMDsgaSA8IGNmZy0+c3BlYWtlcl9vdXRzOyBpKyspCi0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBjZmctPnNwZWFrZXJfcGluc1tpXSwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUKTsKLQl9Ci0KKwltdXRlX291dHB1dHMoY29kZWMsIGNmZy0+aHBfb3V0cywgY2ZnLT5ocF9waW5zKTsKKwltdXRlX291dHB1dHMoY29kZWMsIGNmZy0+bGluZV9vdXRzLCBjZmctPmxpbmVfb3V0X3BpbnMpOworCW11dGVfb3V0cHV0cyhjb2RlYywgY2ZnLT5zcGVha2VyX291dHMsIGNmZy0+c3BlYWtlcl9waW5zKTsKIAlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+ZGFjX2luZm9fZmlsbGVkOyBpKyspIHsKIAkJbmlkID0gc3BlYy0+ZGFjX2luZm9baV0uZGFjOwogCQlpZiAoIW5pZCkKIAkJCW5pZCA9IHNwZWMtPm11bHRpb3V0LmRhY19uaWRzWzBdOwogCQlzZWxlY3RfY29ubmVjdGlvbihjb2RlYywgc3BlYy0+ZGFjX2luZm9baV0ucGluLCBuaWQpOwogCX0KLQotCS8qIHR1cm4gb24gRUFQRCAqLwotCWN4X2F1dG9fdHVybl9vbl9lYXBkKGNvZGVjLCBjZmctPmxpbmVfb3V0cywgY2ZnLT5saW5lX291dF9waW5zKTsKLQljeF9hdXRvX3R1cm5fb25fZWFwZChjb2RlYywgY2ZnLT5ocF9vdXRzLCBjZmctPmhwX3BpbnMpOwotCWN4X2F1dG9fdHVybl9vbl9lYXBkKGNvZGVjLCBjZmctPnNwZWFrZXJfb3V0cywgY2ZnLT5zcGVha2VyX3BpbnMpOworCWlmIChzcGVjLT5hdXRvX211dGUpIHsKKwkJZW5hYmxlX3Vuc29sX3BpbnMoY29kZWMsIGNmZy0+aHBfb3V0cywgY2ZnLT5ocF9waW5zLAorCQkJCSAgQ09ORVhBTlRfSFBfRVZFTlQpOworCQlzcGVjLT5ocF9wcmVzZW50ID0gZGV0ZWN0X2phY2tzKGNvZGVjLCBjZmctPmhwX291dHMsCisJCQkJCQljZmctPmhwX3BpbnMpOworCQlpZiAoc3BlYy0+ZGV0ZWN0X2xpbmUpIHsKKwkJCWVuYWJsZV91bnNvbF9waW5zKGNvZGVjLCBjZmctPmxpbmVfb3V0cywKKwkJCQkJICBjZmctPmxpbmVfb3V0X3BpbnMsCisJCQkJCSAgQ09ORVhBTlRfTElORV9FVkVOVCk7CisJCQlzcGVjLT5saW5lX3ByZXNlbnQgPQorCQkJCWRldGVjdF9qYWNrcyhjb2RlYywgY2ZnLT5saW5lX291dHMsCisJCQkJCSAgICAgY2ZnLT5saW5lX291dF9waW5zKTsKKwkJfQorCX0KKwljeF9hdXRvX3VwZGF0ZV9zcGVha2Vycyhjb2RlYyk7CiB9CiAKIHN0YXRpYyB2b2lkIGN4X2F1dG9faW5pdF9pbnB1dChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZyA9ICZzcGVjLT5hdXRvY2ZnOwotCWludCBpOworCWludCBpLCB2YWw7CiAKLQlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX2FkY19uaWRzOyBpKyspCi0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHNwZWMtPmFkY19uaWRzW2ldLCAwLAotCQkJCSAgICBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKSk7CisJZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9hZGNfbmlkczsgaSsrKSB7CisJCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5hZGNfbmlkc1tpXTsKKwkJaWYgKCEoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9JTl9BTVApKQorCQkJY29udGludWU7CisJCWlmIChxdWVyeV9hbXBfY2Fwcyhjb2RlYywgbmlkLCBIREFfSU5QVVQpICYgQUNfQU1QQ0FQX01VVEUpCisJCQl2YWwgPSBBTVBfSU5fTVVURSgwKTsKKwkJZWxzZQorCQkJdmFsID0gQU1QX0lOX1VOTVVURSgwKTsKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAorCQkJCSAgICB2YWwpOworCX0KIAogCWZvciAoaSA9IDA7IGkgPCBjZmctPm51bV9pbnB1dHM7IGkrKykgewogCQl1bnNpZ25lZCBpbnQgdHlwZTsKQEAgLTM2MDEsMTcgKzQwMzYsMjIgQEAKIAl9CiAKIAlpZiAoc3BlYy0+YXV0b19taWMpIHsKLQkJaW50IGV4dF9pZHggPSBzcGVjLT5hdXRvX21pY19leHQ7Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIGNmZy0+aW5wdXRzW2V4dF9pZHhdLnBpbiwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLAotCQkJCSAgICBBQ19VU1JTUF9FTiB8IENPTkVYQU5UX01JQ19FVkVOVCk7CisJCWlmIChzcGVjLT5hdXRvX21pY19leHQgPj0gMCkgeworCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywKKwkJCQljZmctPmlucHV0c1tzcGVjLT5hdXRvX21pY19leHRdLnBpbiwgMCwKKwkJCQlBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsCisJCQkJQUNfVVNSU1BfRU4gfCBDT05FWEFOVF9NSUNfRVZFTlQpOworCQl9CisJCWlmIChzcGVjLT5hdXRvX21pY19kb2NrID49IDApIHsKKwkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsCisJCQkJY2ZnLT5pbnB1dHNbc3BlYy0+YXV0b19taWNfZG9ja10ucGluLCAwLAorCQkJCUFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwKKwkJCQlBQ19VU1JTUF9FTiB8IENPTkVYQU5UX01JQ19FVkVOVCk7CisJCX0KIAkJY3hfYXV0b19hdXRvbWljKGNvZGVjKTsKIAl9IGVsc2UgewotCQlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX2FkY19uaWRzOyBpKyspIHsKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHNwZWMtPmFkY19uaWRzW2ldLCAwLAotCQkJCQkgICAgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsCi0JCQkJCSAgICBzcGVjLT5wcml2YXRlX2ltdXguaXRlbXNbMF0uaW5kZXgpOwotCQl9CisJCXNlbGVjdF9pbnB1dF9jb25uZWN0aW9uKGNvZGVjLCBzcGVjLT5pbXV4X2luZm9bMF0uYWRjLAorCQkJCQlzcGVjLT5pbXV4X2luZm9bMF0ucGluKTsKIAl9CiB9CiAKQEAgLTM2NDYsNyArNDA4Niw3IEBACiAJCUhEQV9DT0RFQ19WT0xVTUUobmFtZSwgMCwgMCwgMCksCiAJCUhEQV9DT0RFQ19NVVRFKG5hbWUsIDAsIDAsIDApLAogCX07Ci0Jc3RhdGljIGNoYXIgKnNmeFsyXSA9IHsgIlZvbHVtZSIsICJTd2l0Y2giIH07CisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzZnhbMl0gPSB7ICJWb2x1bWUiLCAiU3dpdGNoIiB9OwogCWludCBpLCBlcnI7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CkBAIC0zNjc0LDYgKzQxMTQsMTkgQEAKICNkZWZpbmUgY3hfYXV0b19hZGRfcGJfdm9sdW1lKGNvZGVjLCBuaWQsIHN0ciwgaWR4KQkJCVwKIAljeF9hdXRvX2FkZF92b2x1bWUoY29kZWMsIHN0ciwgIiBQbGF5YmFjayIsIGlkeCwgbmlkLCBIREFfT1VUUFVUKQogCitzdGF0aWMgaW50IHRyeV9hZGRfcGJfdm9sdW1lKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgZGFjLAorCQkJICAgICBoZGFfbmlkX3QgcGluLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgaWR4KQoreworCXVuc2lnbmVkIGludCBjYXBzOworCWNhcHMgPSBxdWVyeV9hbXBfY2Fwcyhjb2RlYywgZGFjLCBIREFfT1VUUFVUKTsKKwlpZiAoY2FwcyAmIEFDX0FNUENBUF9OVU1fU1RFUFMpCisJCXJldHVybiBjeF9hdXRvX2FkZF9wYl92b2x1bWUoY29kZWMsIGRhYywgbmFtZSwgaWR4KTsKKwljYXBzID0gcXVlcnlfYW1wX2NhcHMoY29kZWMsIHBpbiwgSERBX09VVFBVVCk7CisJaWYgKGNhcHMgJiBBQ19BTVBDQVBfTlVNX1NURVBTKQorCQlyZXR1cm4gY3hfYXV0b19hZGRfcGJfdm9sdW1lKGNvZGVjLCBwaW4sIG5hbWUsIGlkeCk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgY3hfYXV0b19idWlsZF9vdXRwdXRfY29udHJvbHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKQEAgLTM2ODIsOCArNDEzNSwxMCBAQAogCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdGV4dHNbM10gPSB7ICJGcm9udCIsICJTdXJyb3VuZCIsICJDTEZFIiB9OwogCiAJaWYgKHNwZWMtPmRhY19pbmZvX2ZpbGxlZCA9PSAxKQotCQlyZXR1cm4gY3hfYXV0b19hZGRfcGJfdm9sdW1lKGNvZGVjLCBzcGVjLT5kYWNfaW5mb1swXS5kYWMsCi0JCQkJCSAgICAgIk1hc3RlciIsIDApOworCQlyZXR1cm4gdHJ5X2FkZF9wYl92b2x1bWUoY29kZWMsIHNwZWMtPmRhY19pbmZvWzBdLmRhYywKKwkJCQkJIHNwZWMtPmRhY19pbmZvWzBdLnBpbiwKKwkJCQkJICJNYXN0ZXIiLCAwKTsKKwogCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5kYWNfaW5mb19maWxsZWQ7IGkrKykgewogCQljb25zdCBjaGFyICpsYWJlbDsKIAkJaW50IGlkeCwgdHlwZTsKQEAgLTM3MDcsNzQgKzQxNjIsMTIzIEBACiAJCQlpZHggPSBudW1fc3BrKys7CiAJCQlicmVhazsKIAkJfQotCQllcnIgPSBjeF9hdXRvX2FkZF9wYl92b2x1bWUoY29kZWMsIHNwZWMtPmRhY19pbmZvW2ldLmRhYywKLQkJCQkJICAgIGxhYmVsLCBpZHgpOworCQllcnIgPSB0cnlfYWRkX3BiX3ZvbHVtZShjb2RlYywgc3BlYy0+ZGFjX2luZm9baV0uZGFjLAorCQkJCQlzcGVjLT5kYWNfaW5mb1tpXS5waW4sCisJCQkJCWxhYmVsLCBpZHgpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAJfQorCisJaWYgKHNwZWMtPmF1dG9fbXV0ZSkgeworCQllcnIgPSBzbmRfaGRhX2FkZF9uZXdfY3Rscyhjb2RlYywgY3hfYXV0b211dGVfbW9kZV9lbnVtKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKwkKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeF9hdXRvX2FkZF9jYXB0dXJlX3ZvbHVtZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKKwkJCQkgICAgICBjb25zdCBjaGFyICpsYWJlbCwgY29uc3QgY2hhciAqcGZ4LAorCQkJCSAgICAgIGludCBjaWR4KQoreworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX2FkY19uaWRzOyBpKyspIHsKKwkJaGRhX25pZF90IGFkY19uaWQgPSBzcGVjLT5hZGNfbmlkc1tpXTsKKwkJaW50IGlkeCA9IGdldF9pbnB1dF9jb25uZWN0aW9uKGNvZGVjLCBhZGNfbmlkLCBuaWQpOworCQlpZiAoaWR4IDwgMCkKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gY3hfYXV0b19hZGRfdm9sdW1lX2lkeChjb2RlYywgbGFiZWwsIHBmeCwKKwkJCQkJICAgICAgY2lkeCwgYWRjX25pZCwgSERBX0lOUFVULCBpZHgpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeF9hdXRvX2FkZF9ib29zdF92b2x1bWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGludCBpZHgsCisJCQkJICAgIGNvbnN0IGNoYXIgKmxhYmVsLCBpbnQgY2lkeCkKK3sKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWhkYV9uaWRfdCBtdXgsIG5pZDsKKwlpbnQgaSwgY29uOworCisJbmlkID0gc3BlYy0+aW11eF9pbmZvW2lkeF0ucGluOworCWlmIChnZXRfd2NhcHMoY29kZWMsIG5pZCkgJiBBQ19XQ0FQX0lOX0FNUCkKKwkJcmV0dXJuIGN4X2F1dG9fYWRkX3ZvbHVtZShjb2RlYywgbGFiZWwsICIgQm9vc3QiLCBjaWR4LAorCQkJCQkgIG5pZCwgSERBX0lOUFVUKTsKKwljb24gPSBfX3NlbGVjdF9pbnB1dF9jb25uZWN0aW9uKGNvZGVjLCBzcGVjLT5pbXV4X2luZm9baWR4XS5hZGMsIG5pZCwKKwkJCQkJJm11eCwgZmFsc2UsIDApOworCWlmIChjb24gPCAwKQorCQlyZXR1cm4gMDsKKwlmb3IgKGkgPSAwOyBpIDwgaWR4OyBpKyspIHsKKwkJaWYgKHNwZWMtPmltdXhfaW5mb1tpXS5ib29zdCA9PSBtdXgpCisJCQlyZXR1cm4gMDsgLyogYWxyZWFkeSBwcmVzZW50ICovCisJfQorCisJaWYgKGdldF93Y2Fwcyhjb2RlYywgbXV4KSAmIEFDX1dDQVBfT1VUX0FNUCkgeworCQlzcGVjLT5pbXV4X2luZm9baWR4XS5ib29zdCA9IG11eDsKKwkJcmV0dXJuIGN4X2F1dG9fYWRkX3ZvbHVtZShjb2RlYywgbGFiZWwsICIgQm9vc3QiLCAwLAorCQkJCQkgIG11eCwgSERBX09VVFBVVCk7CisJfQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGN4X2F1dG9fYnVpbGRfaW5wdXRfY29udHJvbHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcgPSAmc3BlYy0+YXV0b2NmZzsKLQlzdGF0aWMgY29uc3QgY2hhciAqcHJldl9sYWJlbDsKLQlpbnQgaSwgZXJyLCBjaWR4LCBjb25uX2xlbjsKLQloZGFfbmlkX3QgY29ubltIREFfTUFYX0NPTk5FQ1RJT05TXTsKKwlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJY29uc3QgY2hhciAqcHJldl9sYWJlbDsKKwlpbnQgaW5wdXRfY29ubltIREFfTUFYX05VTV9JTlBVVFNdOworCWludCBpLCBlcnIsIGNpZHg7CisJaW50IG11bHRpX2Nvbm5lY3Rpb247CiAKLQlpbnQgbXVsdGlfYWRjX3ZvbHVtZSA9IDA7IC8qIElmIHRoZSBBREMgbmlkIGhhcyBzZXZlcmFsIGlucHV0IHZvbHVtZXMgKi8KLQlpbnQgYWRjX25pZCA9IHNwZWMtPmFkY19uaWRzWzBdOwotCi0JY29ubl9sZW4gPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgYWRjX25pZCwgY29ubiwKLQkJCQkJICAgSERBX01BWF9DT05ORUNUSU9OUyk7Ci0JaWYgKGNvbm5fbGVuIDwgMCkKLQkJcmV0dXJuIGNvbm5fbGVuOwotCi0JbXVsdGlfYWRjX3ZvbHVtZSA9IGNmZy0+bnVtX2lucHV0cyA+IDEgJiYgY29ubl9sZW4gPiAxOwotCWlmICghbXVsdGlfYWRjX3ZvbHVtZSkgewotCQllcnIgPSBjeF9hdXRvX2FkZF92b2x1bWUoY29kZWMsICJDYXB0dXJlIiwgIiIsIDAsIGFkY19uaWQsCi0JCQkJCSBIREFfSU5QVVQpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7CisJbXVsdGlfY29ubmVjdGlvbiA9IDA7CisJZm9yIChpID0gMDsgaSA8IGltdXgtPm51bV9pdGVtczsgaSsrKSB7CisJCWNpZHggPSBnZXRfaW5wdXRfY29ubmVjdGlvbihjb2RlYywgc3BlYy0+aW11eF9pbmZvW2ldLmFkYywKKwkJCQkJICAgIHNwZWMtPmltdXhfaW5mb1tpXS5waW4pOworCQlpbnB1dF9jb25uW2ldID0gKHNwZWMtPmltdXhfaW5mb1tpXS5hZGMgPDwgOCkgfCBjaWR4OworCQlpZiAoaSA+IDAgJiYgaW5wdXRfY29ubltpXSAhPSBpbnB1dF9jb25uWzBdKQorCQkJbXVsdGlfY29ubmVjdGlvbiA9IDE7CiAJfQogCiAJcHJldl9sYWJlbCA9IE5VTEw7CiAJY2lkeCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGNmZy0+bnVtX2lucHV0czsgaSsrKSB7Ci0JCWhkYV9uaWRfdCBuaWQgPSBjZmctPmlucHV0c1tpXS5waW47CisJZm9yIChpID0gMDsgaSA8IGltdXgtPm51bV9pdGVtczsgaSsrKSB7CisJCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5pbXV4X2luZm9baV0ucGluOwogCQljb25zdCBjaGFyICpsYWJlbDsKLQkJaW50IGo7Ci0JCWludCBwaW5fYW1wID0gZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9JTl9BTVA7Ci0JCWlmICghcGluX2FtcCAmJiAhbXVsdGlfYWRjX3ZvbHVtZSkKLQkJCWNvbnRpbnVlOwogCi0JCWxhYmVsID0gaGRhX2dldF9hdXRvY2ZnX2lucHV0X2xhYmVsKGNvZGVjLCBjZmcsIGkpOworCQlsYWJlbCA9IGhkYV9nZXRfYXV0b2NmZ19pbnB1dF9sYWJlbChjb2RlYywgJnNwZWMtPmF1dG9jZmcsCisJCQkJCQkgICAgc3BlYy0+aW11eF9pbmZvW2ldLmluZGV4KTsKIAkJaWYgKGxhYmVsID09IHByZXZfbGFiZWwpCiAJCQljaWR4Kys7CiAJCWVsc2UKIAkJCWNpZHggPSAwOwogCQlwcmV2X2xhYmVsID0gbGFiZWw7CiAKLQkJaWYgKHBpbl9hbXApIHsKLQkJCWVyciA9IGN4X2F1dG9fYWRkX3ZvbHVtZShjb2RlYywgbGFiZWwsICIgQm9vc3QiLCBjaWR4LAotCQkJCQkJIG5pZCwgSERBX0lOUFVUKTsKLQkJCWlmIChlcnIgPCAwKQotCQkJCXJldHVybiBlcnI7Ci0JCX0KKwkJZXJyID0gY3hfYXV0b19hZGRfYm9vc3Rfdm9sdW1lKGNvZGVjLCBpLCBsYWJlbCwgY2lkeCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKIAotCQlpZiAoIW11bHRpX2FkY192b2x1bWUpCi0JCQljb250aW51ZTsKLQkJZm9yIChqID0gMDsgaiA8IGNvbm5fbGVuOyBqKyspIHsKLQkJCWlmIChjb25uW2pdID09IG5pZCkgewotCQkJCWVyciA9IGN4X2F1dG9fYWRkX3ZvbHVtZV9pZHgoY29kZWMsIGxhYmVsLAotCQkJCSAgICAiIENhcHR1cmUiLCBjaWR4LCBhZGNfbmlkLCBIREFfSU5QVVQsIGopOwotCQkJCWlmIChlcnIgPCAwKQotCQkJCQlyZXR1cm4gZXJyOwotCQkJCWJyZWFrOwotCQkJfQorCQlpZiAoIW11bHRpX2Nvbm5lY3Rpb24pIHsKKwkJCWlmIChpID4gMCkKKwkJCQljb250aW51ZTsKKwkJCWVyciA9IGN4X2F1dG9fYWRkX2NhcHR1cmVfdm9sdW1lKGNvZGVjLCBuaWQsCisJCQkJCQkJICJDYXB0dXJlIiwgIiIsIGNpZHgpOworCQl9IGVsc2UgeworCQkJZXJyID0gY3hfYXV0b19hZGRfY2FwdHVyZV92b2x1bWUoY29kZWMsIG5pZCwKKwkJCQkJCQkgbGFiZWwsICIgQ2FwdHVyZSIsIGNpZHgpOwogCQl9CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKIAl9CisKKwlpZiAoc3BlYy0+cHJpdmF0ZV9pbXV4Lm51bV9pdGVtcyA+IDEgJiYgIXNwZWMtPmF1dG9fbWljKSB7CisJCWVyciA9IHNuZF9oZGFfYWRkX25ld19jdGxzKGNvZGVjLCBjeF9hdXRvX2NhcHR1cmVfbWl4ZXJzKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKwogCXJldHVybiAwOwogfQogCkBAIC0zNzkxLDcgKzQyOTUsMjkgQEAKIAlyZXR1cm4gY29uZXhhbnRfYnVpbGRfY29udHJvbHMoY29kZWMpOwogfQogCi1zdGF0aWMgc3RydWN0IGhkYV9jb2RlY19vcHMgY3hfYXV0b19wYXRjaF9vcHMgPSB7CitzdGF0aWMgaW50IGN4X2F1dG9fc2VhcmNoX2FkY3Moc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwloZGFfbmlkX3QgbmlkLCBlbmRfbmlkOworCisJZW5kX25pZCA9IGNvZGVjLT5zdGFydF9uaWQgKyBjb2RlYy0+bnVtX25vZGVzOworCWZvciAobmlkID0gY29kZWMtPnN0YXJ0X25pZDsgbmlkIDwgZW5kX25pZDsgbmlkKyspIHsKKwkJdW5zaWduZWQgaW50IGNhcHMgPSBnZXRfd2NhcHMoY29kZWMsIG5pZCk7CisJCWlmIChnZXRfd2NhcHNfdHlwZShjYXBzKSAhPSBBQ19XSURfQVVEX0lOKQorCQkJY29udGludWU7CisJCWlmIChjYXBzICYgQUNfV0NBUF9ESUdJVEFMKQorCQkJY29udGludWU7CisJCWlmIChzbmRfQlVHX09OKHNwZWMtPm51bV9hZGNfbmlkcyA+PQorCQkJICAgICAgIEFSUkFZX1NJWkUoc3BlYy0+cHJpdmF0ZV9hZGNfbmlkcykpKQorCQkJYnJlYWs7CisJCXNwZWMtPnByaXZhdGVfYWRjX25pZHNbc3BlYy0+bnVtX2FkY19uaWRzKytdID0gbmlkOworCX0KKwlzcGVjLT5hZGNfbmlkcyA9IHNwZWMtPnByaXZhdGVfYWRjX25pZHM7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfY29kZWNfb3BzIGN4X2F1dG9fcGF0Y2hfb3BzID0gewogCS5idWlsZF9jb250cm9scyA9IGN4X2F1dG9fYnVpbGRfY29udHJvbHMsCiAJLmJ1aWxkX3BjbXMgPSBjb25leGFudF9idWlsZF9wY21zLAogCS5pbml0ID0gY3hfYXV0b19pbml0LApAQCAtMzgwOCwxOSArNDMzNCwyNCBAQAogCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjOwogCWludCBlcnI7CiAKKwlwcmludGsoS0VSTl9JTkZPICJoZGFfY29kZWM6ICVzOiBCSU9TIGF1dG8tcHJvYmluZy5cbiIsCisJICAgICAgIGNvZGVjLT5jaGlwX25hbWUpOworCiAJc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzcGVjKQogCQlyZXR1cm4gLUVOT01FTTsKIAljb2RlYy0+c3BlYyA9IHNwZWM7Ci0Jc3BlYy0+YWRjX25pZHMgPSBjeF9hdXRvX2FkY19uaWRzOwotCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoY3hfYXV0b19hZGNfbmlkcyk7Ci0Jc3BlYy0+Y2Fwc3JjX25pZHMgPSBzcGVjLT5hZGNfbmlkczsKKwljb2RlYy0+cGluX2FtcF93b3JrYXJvdW5kID0gMTsKKwllcnIgPSBjeF9hdXRvX3NlYXJjaF9hZGNzKGNvZGVjKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAllcnIgPSBjeF9hdXRvX3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkgewogCQlrZnJlZShjb2RlYy0+c3BlYyk7CiAJCWNvZGVjLT5zcGVjID0gTlVMTDsKIAkJcmV0dXJuIGVycjsKIAl9CisJc3BlYy0+Y2FwdHVyZV9zdHJlYW0gPSAmY3hfYXV0b19wY21fYW5hbG9nX2NhcHR1cmU7CiAJY29kZWMtPnBhdGNoX29wcyA9IGN4X2F1dG9fcGF0Y2hfb3BzOwogCWlmIChzcGVjLT5iZWVwX2FtcCkKIAkJc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIHNwZWMtPmJlZXBfYW1wKTsKQEAgLTM4MzAsNyArNDM2MSw3IEBACiAvKgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2NvZGVjX3ByZXNldCBzbmRfaGRhX3ByZXNldF9jb25leGFudFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfY29kZWNfcHJlc2V0IHNuZF9oZGFfcHJlc2V0X2NvbmV4YW50W10gPSB7CiAJeyAuaWQgPSAweDE0ZjE1MDQ1LCAubmFtZSA9ICJDWDIwNTQ5IChWZW5pY2UpIiwKIAkgIC5wYXRjaCA9IHBhdGNoX2N4dDUwNDUgfSwKIAl7IC5pZCA9IDB4MTRmMTUwNDcsIC5uYW1lID0gIkNYMjA1NTEgKFdhaWtpa2kpIiwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaGRtaS5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9oZG1pLmMKaW5kZXggNzE1NjE1YS4uMzIyOTAxOCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9oZG1pLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9oZG1pLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvamFjay5oPgogI2luY2x1ZGUgImhkYV9jb2RlYy5oIgogI2luY2x1ZGUgImhkYV9sb2NhbC5oIgogCkBAIC03Niw3ICs3Nyw3IEBACiAJICogYXRpL252aGRtaSBzcGVjaWZpYwogCSAqLwogCXN0cnVjdCBoZGFfbXVsdGlfb3V0IG11bHRpb3V0OwotCXN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqcGNtX3BsYXliYWNrOworCWNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqcGNtX3BsYXliYWNrOwogCiAJLyogbWlzYyBmbGFncyAqLwogCS8qIFBEIGJpdCBpbmRpY2F0ZXMgb25seSB0aGUgdXBkYXRlLCBub3QgdGhlIGN1cnJlbnQgc3RhdGUgKi8KQEAgLTcyMCw2ICs3MjEsOCBAQAogCQkJCSAgJnNwZWMtPnNpbmtfZWxkW2luZGV4XSk7CiAJCS8qIFRPRE86IGRvIHJlYWwgdGhpbmdzIGFib3V0IEVMRCAqLwogCX0KKworCXNuZF9oZGFfaW5wdXRfamFja19yZXBvcnQoY29kZWMsIHRhZyk7CiB9CiAKIHN0YXRpYyB2b2lkIGhkbWlfbm9uX2ludHJpbnNpY19ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlcykKQEAgLTkxMiw2ICs5MTUsNyBAQAogc3RhdGljIGludCBoZG1pX2FkZF9waW4oc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW5fbmlkKQogewogCXN0cnVjdCBoZG1pX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpbnQgZXJyOwogCiAJaWYgKHNwZWMtPm51bV9waW5zID49IE1BWF9IRE1JX1BJTlMpIHsKIAkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKQEAgLTkxOSw2ICs5MjMsMTIgQEAKIAkJcmV0dXJuIC1FMkJJRzsKIAl9CiAKKwllcnIgPSBzbmRfaGRhX2lucHV0X2phY2tfYWRkKGNvZGVjLCBwaW5fbmlkLAorCQkJCSAgICAgU05EX0pBQ0tfVklERU9PVVQsIE5VTEwpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCXNuZF9oZGFfaW5wdXRfamFja19yZXBvcnQoY29kZWMsIHBpbl9uaWQpOworCiAJaGRtaV9wcmVzZW50X3NlbnNlKGNvZGVjLCBwaW5fbmlkLCAmc3BlYy0+c2lua19lbGRbc3BlYy0+bnVtX3BpbnNdKTsKIAogCXNwZWMtPnBpbltzcGVjLT5udW1fcGluc10gPSBwaW5fbmlkOwpAQCAtMTA0NCw3ICsxMDU0LDcgQEAKIAlyZXR1cm4gaGRtaV9zZXR1cF9zdHJlYW0oY29kZWMsIGhpbmZvLT5uaWQsIHN0cmVhbV90YWcsIGZvcm1hdCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gZ2VuZXJpY19oZG1pX3BjbV9wbGF5YmFjayA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gZ2VuZXJpY19oZG1pX3BjbV9wbGF5YmFjayA9IHsKIAkuc3Vic3RyZWFtcyA9IDEsCiAJLmNoYW5uZWxzX21pbiA9IDIsCiAJLm9wcyA9IHsKQEAgLTExMjAsMTEgKzExMzAsMTIgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fcGluczsgaSsrKQogCQlzbmRfaGRhX2VsZF9wcm9jX2ZyZWUoY29kZWMsICZzcGVjLT5zaW5rX2VsZFtpXSk7CisJc25kX2hkYV9pbnB1dF9qYWNrX2ZyZWUoY29kZWMpOwogCiAJa2ZyZWUoc3BlYyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2NvZGVjX29wcyBnZW5lcmljX2hkbWlfcGF0Y2hfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfY29kZWNfb3BzIGdlbmVyaWNfaGRtaV9wYXRjaF9vcHMgPSB7CiAJLmluaXQJCQk9IGdlbmVyaWNfaGRtaV9pbml0LAogCS5mcmVlCQkJPSBnZW5lcmljX2hkbWlfZnJlZSwKIAkuYnVpbGRfcGNtcwkJPSBnZW5lcmljX2hkbWlfYnVpbGRfcGNtcywKQEAgLTExNjksMTIgKzExODAsMTIgQEAKICNkZWZpbmUgbnZoZG1pX21hc3Rlcl9jb25fbmlkXzd4CTB4MDQKICNkZWZpbmUgbnZoZG1pX21hc3Rlcl9waW5fbmlkXzd4CTB4MDUKIAotc3RhdGljIGhkYV9uaWRfdCBudmhkbWlfY29uX25pZHNfN3hbNF0gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IG52aGRtaV9jb25fbmlkc183eFs0XSA9IHsKIAkvKmZyb250LCByZWFyLCBjbGZlLCByZWFyX3N1cnIgKi8KIAkweDYsIDB4OCwgMHhhLCAweGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIG52aGRtaV9iYXNpY19pbml0Xzd4W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIG52aGRtaV9iYXNpY19pbml0Xzd4W10gPSB7CiAJLyogc2V0IGF1ZGlvIHByb3RlY3Qgb24gKi8KIAl7IDB4MSwgTnZfVkVSQl9TRVRfQXVkaW9fUHJvdGVjdGlvbl9PbiwgMHgxfSwKIAkvKiBlbmFibGUgZGlnaXRhbCBvdXRwdXQgb24gcGluIHdpZGdldCAqLwpAQCAtMTQzNSw3ICsxNDQ2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBudmhkbWlfcGNtX3BsYXliYWNrXzhjaF83eCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gbnZoZG1pX3BjbV9wbGF5YmFja184Y2hfN3ggPSB7CiAJLnN1YnN0cmVhbXMgPSAxLAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSA4LApAQCAtMTQ1MCw3ICsxNDYxLDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBudmhkbWlfcGNtX3BsYXliYWNrXzJjaCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gbnZoZG1pX3BjbV9wbGF5YmFja18yY2ggPSB7CiAJLnN1YnN0cmVhbXMgPSAxLAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSAyLApAQCAtMTQ2NSwxNCArMTQ3NiwxNCBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9jb2RlY19vcHMgbnZoZG1pX3BhdGNoX29wc184Y2hfN3ggPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9jb2RlY19vcHMgbnZoZG1pX3BhdGNoX29wc184Y2hfN3ggPSB7CiAJLmJ1aWxkX2NvbnRyb2xzID0gZ2VuZXJpY19oZG1pX2J1aWxkX2NvbnRyb2xzLAogCS5idWlsZF9wY21zID0gZ2VuZXJpY19oZG1pX2J1aWxkX3BjbXMsCiAJLmluaXQgPSBudmhkbWlfN3hfaW5pdCwKIAkuZnJlZSA9IGdlbmVyaWNfaGRtaV9mcmVlLAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfY29kZWNfb3BzIG52aGRtaV9wYXRjaF9vcHNfMmNoID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfY29kZWNfb3BzIG52aGRtaV9wYXRjaF9vcHNfMmNoID0gewogCS5idWlsZF9jb250cm9scyA9IGdlbmVyaWNfaGRtaV9idWlsZF9jb250cm9scywKIAkuYnVpbGRfcGNtcyA9IGdlbmVyaWNfaGRtaV9idWlsZF9wY21zLAogCS5pbml0ID0gbnZoZG1pXzd4X2luaXQsCkBAIC0xNTY4LDcgKzE1NzksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIGF0aWhkbWlfcGNtX2RpZ2l0YWxfcGxheWJhY2sgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9wY21fc3RyZWFtIGF0aWhkbWlfcGNtX2RpZ2l0YWxfcGxheWJhY2sgPSB7CiAJLnN1YnN0cmVhbXMgPSAxLAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSAyLApAQCAtMTU4MCw3ICsxNTkxLDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhdGloZG1pX2Jhc2ljX2luaXRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYXRpaGRtaV9iYXNpY19pbml0W10gPSB7CiAJLyogZW5hYmxlIGRpZ2l0YWwgb3V0cHV0IG9uIHBpbiB3aWRnZXQgKi8KIAl7IDB4MDMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KQEAgLTE1OTksNyArMTYxMCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2NvZGVjX29wcyBhdGloZG1pX3BhdGNoX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2NvZGVjX29wcyBhdGloZG1pX3BhdGNoX29wcyA9IHsKIAkuYnVpbGRfY29udHJvbHMgPSBnZW5lcmljX2hkbWlfYnVpbGRfY29udHJvbHMsCiAJLmJ1aWxkX3BjbXMgPSBnZW5lcmljX2hkbWlfYnVpbGRfcGNtcywKIAkuaW5pdCA9IGF0aWhkbWlfaW5pdCwKQEAgLTE2MzQsNyArMTY0NSw3IEBACiAvKgogICogcGF0Y2ggZW50cmllcwogICovCi1zdGF0aWMgc3RydWN0IGhkYV9jb2RlY19wcmVzZXQgc25kX2hkYV9wcmVzZXRfaGRtaVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfY29kZWNfcHJlc2V0IHNuZF9oZGFfcHJlc2V0X2hkbWlbXSA9IHsKIHsgLmlkID0gMHgxMDAyNzkzYywgLm5hbWUgPSAiUlM2MDAgSERNSSIsCS5wYXRjaCA9IHBhdGNoX2F0aWhkbWkgfSwKIHsgLmlkID0gMHgxMDAyNzkxOSwgLm5hbWUgPSAiUlM2MDAgSERNSSIsCS5wYXRjaCA9IHBhdGNoX2F0aWhkbWkgfSwKIHsgLmlkID0gMHgxMDAyNzkxYSwgLm5hbWUgPSAiUlM2OTAvNzgwIEhETUkiLAkucGF0Y2ggPSBwYXRjaF9hdGloZG1pIH0sCkBAIC0xNjc3LDYgKzE2ODgsNyBAQAogeyAuaWQgPSAweDgwODYyODAzLCAubmFtZSA9ICJFYWdsZWxha2UgSERNSSIsCS5wYXRjaCA9IHBhdGNoX2dlbmVyaWNfaGRtaSB9LAogeyAuaWQgPSAweDgwODYyODA0LCAubmFtZSA9ICJJYmV4UGVhayBIRE1JIiwJLnBhdGNoID0gcGF0Y2hfZ2VuZXJpY19oZG1pIH0sCiB7IC5pZCA9IDB4ODA4NjI4MDUsIC5uYW1lID0gIkNvdWdhclBvaW50IEhETUkiLAkucGF0Y2ggPSBwYXRjaF9nZW5lcmljX2hkbWkgfSwKK3sgLmlkID0gMHg4MDg2MjgwNiwgLm5hbWUgPSAiUGFudGhlclBvaW50IEhETUkiLCAucGF0Y2ggPSBwYXRjaF9nZW5lcmljX2hkbWkgfSwKIHsgLmlkID0gMHg4MDg2MjlmYiwgLm5hbWUgPSAiQ3Jlc3RsaW5lIEhETUkiLAkucGF0Y2ggPSBwYXRjaF9nZW5lcmljX2hkbWkgfSwKIHt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CkBAIC0xNzIyLDYgKzE3MzQsNyBAQAogTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjgwODYyODAzIik7CiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6ODA4NjI4MDQiKTsKIE1PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDo4MDg2MjgwNSIpOworTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjgwODYyODA2Iik7CiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6ODA4NjI5ZmIiKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwppbmRleCBjODI5NzlhLi43YTRlMTAwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwpAQCAtMjk5LDExICsyOTksMjMgQEAKIAogc3RydWN0IGFsY19maXh1cDsKIAorc3RydWN0IGFsY19tdWx0aV9pbyB7CisJaGRhX25pZF90IHBpbjsJCS8qIG11bHRpLWlvIHdpZGdldCBwaW4gTklEICovCisJaGRhX25pZF90IGRhYzsJCS8qIERBQyB0byBiZSBjb25uZWN0ZWQgKi8KKwl1bnNpZ25lZCBpbnQgY3RsX2luOwkvKiBjYWNoZWQgaW5wdXQtcGluIGNvbnRyb2wgdmFsdWUgKi8KK307CisKK2VudW0geworCUFMQ19BVVRPTVVURV9QSU4sCS8qIGNoYW5nZSB0aGUgcGluIGNvbnRyb2wgKi8KKwlBTENfQVVUT01VVEVfQU1QLAkvKiBtdXRlL3VubXV0ZSB0aGUgcGluIEFNUCAqLworCUFMQ19BVVRPTVVURV9NSVhFUiwJLyogbXV0ZS91bm11dGUgbWl4ZXIgd2lkZ2V0IEFNUCAqLworfTsKKwogc3RydWN0IGFsY19zcGVjIHsKIAkvKiBjb2RlYyBwYXJhbWV0ZXJpemF0aW9uICovCi0Jc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKm1peGVyc1s1XTsJLyogbWl4ZXIgYXJyYXlzICovCisJY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKm1peGVyc1s1XTsJLyogbWl4ZXIgYXJyYXlzICovCiAJdW5zaWduZWQgaW50IG51bV9taXhlcnM7Ci0Jc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmNhcF9taXhlcjsJLyogY2FwdHVyZSBtaXhlciAqLworCWNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICpjYXBfbWl4ZXI7CS8qIGNhcHR1cmUgbWl4ZXIgKi8KIAl1bnNpZ25lZCBpbnQgYmVlcF9hbXA7CS8qIGJlZXAgYW1wIHZhbHVlLCBzZXQgdmlhIHNldF9iZWVwX2FtcCgpICovCiAKIAljb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgKmluaXRfdmVyYnNbMTBdOwkvKiBpbml0aWFsaXphdGlvbiB2ZXJicwpAQCAtMzEzLDE0ICszMjUsMTQgQEAKIAl1bnNpZ25lZCBpbnQgbnVtX2luaXRfdmVyYnM7CiAKIAljaGFyIHN0cmVhbV9uYW1lX2FuYWxvZ1szMl07CS8qIGFuYWxvZyBQQ00gc3RyZWFtICovCi0Jc3RydWN0IGhkYV9wY21fc3RyZWFtICpzdHJlYW1fYW5hbG9nX3BsYXliYWNrOwotCXN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqc3RyZWFtX2FuYWxvZ19jYXB0dXJlOwotCXN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqc3RyZWFtX2FuYWxvZ19hbHRfcGxheWJhY2s7Ci0Jc3RydWN0IGhkYV9wY21fc3RyZWFtICpzdHJlYW1fYW5hbG9nX2FsdF9jYXB0dXJlOworCWNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqc3RyZWFtX2FuYWxvZ19wbGF5YmFjazsKKwljb25zdCBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKnN0cmVhbV9hbmFsb2dfY2FwdHVyZTsKKwljb25zdCBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKnN0cmVhbV9hbmFsb2dfYWx0X3BsYXliYWNrOworCWNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqc3RyZWFtX2FuYWxvZ19hbHRfY2FwdHVyZTsKIAogCWNoYXIgc3RyZWFtX25hbWVfZGlnaXRhbFszMl07CS8qIGRpZ2l0YWwgUENNIHN0cmVhbSAqLwotCXN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqc3RyZWFtX2RpZ2l0YWxfcGxheWJhY2s7Ci0Jc3RydWN0IGhkYV9wY21fc3RyZWFtICpzdHJlYW1fZGlnaXRhbF9jYXB0dXJlOworCWNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqc3RyZWFtX2RpZ2l0YWxfcGxheWJhY2s7CisJY29uc3Qgc3RydWN0IGhkYV9wY21fc3RyZWFtICpzdHJlYW1fZGlnaXRhbF9jYXB0dXJlOwogCiAJLyogcGxheWJhY2sgKi8KIAlzdHJ1Y3QgaGRhX211bHRpX291dCBtdWx0aW91dDsJLyogcGxheWJhY2sgc2V0LXVwCkBAIC0zMzMsOCArMzQ1LDggQEAKIAogCS8qIGNhcHR1cmUgKi8KIAl1bnNpZ25lZCBpbnQgbnVtX2FkY19uaWRzOwotCWhkYV9uaWRfdCAqYWRjX25pZHM7Ci0JaGRhX25pZF90ICpjYXBzcmNfbmlkczsKKwljb25zdCBoZGFfbmlkX3QgKmFkY19uaWRzOworCWNvbnN0IGhkYV9uaWRfdCAqY2Fwc3JjX25pZHM7CiAJaGRhX25pZF90IGRpZ19pbl9uaWQ7CQkvKiBkaWdpdGFsLWluIE5JRDsgb3B0aW9uYWwgKi8KIAogCS8qIGNhcHR1cmUgc2V0dXAgZm9yIGR5bmFtaWMgZHVhbC1hZGMgc3dpdGNoICovCkBAIC0zNDgsNiArMzYwLDcgQEAKIAljb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW5wdXRfbXV4OwogCXVuc2lnbmVkIGludCBjdXJfbXV4WzNdOwogCXN0cnVjdCBhbGNfbWljX3JvdXRlIGV4dF9taWM7CisJc3RydWN0IGFsY19taWNfcm91dGUgZG9ja19taWM7CiAJc3RydWN0IGFsY19taWNfcm91dGUgaW50X21pYzsKIAogCS8qIGNoYW5uZWwgbW9kZWwgKi8KQEAgLTM3NSwxNyArMzg4LDI3IEBACiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQogCXZvaWQgKCpwb3dlcl9ob29rKShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CiAjZW5kaWYKKwl2b2lkICgqc2h1dHVwKShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CiAKIAkvKiBmb3IgcGluIHNlbnNpbmcgKi8KLQl1bnNpZ25lZCBpbnQgc2Vuc2VfdXBkYXRlZDogMTsKIAl1bnNpZ25lZCBpbnQgamFja19wcmVzZW50OiAxOwotCXVuc2lnbmVkIGludCBtYXN0ZXJfc3c6IDE7CisJdW5zaWduZWQgaW50IGxpbmVfamFja19wcmVzZW50OjE7CisJdW5zaWduZWQgaW50IG1hc3Rlcl9tdXRlOjE7CiAJdW5zaWduZWQgaW50IGF1dG9fbWljOjE7CisJdW5zaWduZWQgaW50IGF1dG9tdXRlOjE7CS8qIEhQIGF1dG9tdXRlIGVuYWJsZWQgKi8KKwl1bnNpZ25lZCBpbnQgZGV0ZWN0X2xpbmU6MTsJLyogTGluZS1vdXQgZGV0ZWN0aW9uIGVuYWJsZWQgKi8KKwl1bnNpZ25lZCBpbnQgYXV0b211dGVfbGluZXM6MTsJLyogYXV0b211dGUgbGluZS1vdXQgYXMgd2VsbCAqLworCXVuc2lnbmVkIGludCBhdXRvbXV0ZV9ocF9sbzoxOwkvKiBib3RoIEhQIGFuZCBMTyBhdmFpbGFibGUgKi8KIAogCS8qIG90aGVyIGZsYWdzICovCiAJdW5zaWduZWQgaW50IG5vX2FuYWxvZyA6MTsgLyogZGlnaXRhbCBJL08gb25seSAqLwogCXVuc2lnbmVkIGludCBkdWFsX2FkY19zd2l0Y2g6MTsgLyogc3dpdGNoIEFEQ3MgKGZvciBBTEMyNzUpICovCiAJdW5zaWduZWQgaW50IHNpbmdsZV9pbnB1dF9zcmM6MTsKKworCS8qIGF1dG8tbXV0ZSBjb250cm9sICovCisJaW50IGF1dG9tdXRlX21vZGU7CisJaGRhX25pZF90IGF1dG9tdXRlX21peGVyX25pZFtBVVRPX0NGR19NQVhfT1VUU107CisKIAlpbnQgaW5pdF9hbXA7CiAJaW50IGNvZGVjX3ZhcmlhbnQ7CS8qIGZsYWcgZm9yIG90aGVyIHZhcmlhbnRzICovCiAKQEAgLTQwMywyNSArNDI2LDI5IEBACiAJaW50IGZpeHVwX2lkOwogCWNvbnN0IHN0cnVjdCBhbGNfZml4dXAgKmZpeHVwX2xpc3Q7CiAJY29uc3QgY2hhciAqZml4dXBfbmFtZTsKKworCS8qIG11bHRpLWlvICovCisJaW50IG11bHRpX2lvczsKKwlzdHJ1Y3QgYWxjX211bHRpX2lvIG11bHRpX2lvWzRdOwogfTsKIAogLyoKICAqIGNvbmZpZ3VyYXRpb24gdGVtcGxhdGUgLSB0byBiZSBjb3BpZWQgdG8gdGhlIHNwZWMgaW5zdGFuY2UKICAqLwogc3RydWN0IGFsY19jb25maWdfcHJlc2V0IHsKLQlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqbWl4ZXJzWzVdOyAvKiBzaG91bGQgYmUgaWRlbnRpY2FsIHNpemUKKwljb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqbWl4ZXJzWzVdOyAvKiBzaG91bGQgYmUgaWRlbnRpY2FsIHNpemUKIAkJCQkJICAgICAqIHdpdGggc3BlYwogCQkJCQkgICAgICovCi0Jc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmNhcF9taXhlcjsgLyogY2FwdHVyZSBtaXhlciAqLworCWNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICpjYXBfbWl4ZXI7IC8qIGNhcHR1cmUgbWl4ZXIgKi8KIAljb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgKmluaXRfdmVyYnNbNV07CiAJdW5zaWduZWQgaW50IG51bV9kYWNzOwotCWhkYV9uaWRfdCAqZGFjX25pZHM7CisJY29uc3QgaGRhX25pZF90ICpkYWNfbmlkczsKIAloZGFfbmlkX3QgZGlnX291dF9uaWQ7CQkvKiBvcHRpb25hbCAqLwogCWhkYV9uaWRfdCBocF9uaWQ7CQkvKiBvcHRpb25hbCAqLwotCWhkYV9uaWRfdCAqc2xhdmVfZGlnX291dHM7CisJY29uc3QgaGRhX25pZF90ICpzbGF2ZV9kaWdfb3V0czsKIAl1bnNpZ25lZCBpbnQgbnVtX2FkY19uaWRzOwotCWhkYV9uaWRfdCAqYWRjX25pZHM7Ci0JaGRhX25pZF90ICpjYXBzcmNfbmlkczsKKwljb25zdCBoZGFfbmlkX3QgKmFkY19uaWRzOworCWNvbnN0IGhkYV9uaWRfdCAqY2Fwc3JjX25pZHM7CiAJaGRhX25pZF90IGRpZ19pbl9uaWQ7CiAJdW5zaWduZWQgaW50IG51bV9jaGFubmVsX21vZGU7CiAJY29uc3Qgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgKmNoYW5uZWxfbW9kZTsKQEAgLTQzMyw3ICs0NjAsNyBAQAogCXZvaWQgKCpzZXR1cCkoc3RydWN0IGhkYV9jb2RlYyAqKTsKIAl2b2lkICgqaW5pdF9ob29rKShzdHJ1Y3QgaGRhX2NvZGVjICopOwogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKLQlzdHJ1Y3QgaGRhX2FtcF9saXN0ICpsb29wYmFja3M7CisJY29uc3Qgc3RydWN0IGhkYV9hbXBfbGlzdCAqbG9vcGJhY2tzOwogCXZvaWQgKCpwb3dlcl9ob29rKShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CiAjZW5kaWYKIH07CkBAIC01NjAsMTEgKzU4NywxMSBAQAogICogTklEcyAweDBmIGFuZCAweDEwIGhhdmUgYmVlbiBvYnNlcnZlZCB0byBoYXZlIHRoaXMgYmVoYXZpb3VyIGFzIG9mCiAgKiBNYXJjaCAyMDA2LgogICovCi1zdGF0aWMgY2hhciAqYWxjX3Bpbl9tb2RlX25hbWVzW10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFsY19waW5fbW9kZV9uYW1lc1tdID0gewogCSJNaWMgNTBwYyBiaWFzIiwgIk1pYyA4MHBjIGJpYXMiLAogCSJMaW5lIGluIiwgIkxpbmUgb3V0IiwgIkhlYWRwaG9uZSBvdXQiLAogfTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGFsY19waW5fbW9kZV92YWx1ZXNbXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFsY19waW5fbW9kZV92YWx1ZXNbXSA9IHsKIAlQSU5fVlJFRjUwLCBQSU5fVlJFRjgwLCBQSU5fSU4sIFBJTl9PVVQsIFBJTl9IUCwKIH07CiAvKiBUaGUgY29udHJvbCBjYW4gcHJlc2VudCBhbGwgNSBvcHRpb25zLCBvciBpdCBjYW4gbGltaXQgdGhlIG9wdGlvbnMgYmFzZWQKQEAgLTU4Myw3ICs2MTAsNyBAQAogLyogSW5mbyBhYm91dCB0aGUgcGluIG1vZGVzIHN1cHBvcnRlZCBieSB0aGUgZGlmZmVyZW50IHBpbiBkaXJlY3Rpb24gbW9kZXMuCiAgKiBGb3IgZWFjaCBkaXJlY3Rpb24gdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIGFyZSBnaXZlbi4KICAqLwotc3RhdGljIHNpZ25lZCBjaGFyIGFsY19waW5fbW9kZV9kaXJfaW5mb1s1XVsyXSA9IHsKK3N0YXRpYyBjb25zdCBzaWduZWQgY2hhciBhbGNfcGluX21vZGVfZGlyX2luZm9bNV1bMl0gPSB7CiAJeyAwLCAyIH0sICAgIC8qIEFMQ19QSU5fRElSX0lOICovCiAJeyAzLCA0IH0sICAgIC8qIEFMQ19QSU5fRElSX09VVCAqLwogCXsgMCwgNCB9LCAgICAvKiBBTENfUElOX0RJUl9JTk9VVCAqLwpAQCAtOTAwLDcgKzkyNyw3IEBACiAKIC8qCiAgKi8KLXN0YXRpYyB2b2lkIGFkZF9taXhlcihzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICptaXgpCitzdGF0aWMgdm9pZCBhZGRfbWl4ZXIoc3RydWN0IGFsY19zcGVjICpzcGVjLCBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqbWl4KQogewogCWlmIChzbmRfQlVHX09OKHNwZWMtPm51bV9taXhlcnMgPj0gQVJSQVlfU0laRShzcGVjLT5taXhlcnMpKSkKIAkJcmV0dXJuOwpAQCAtOTcxLDIxICs5OTgsMjEgQEAKIH0KIAogLyogRW5hYmxlIEdQSU8gbWFzayBhbmQgc2V0IG91dHB1dCAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGNfZ3BpbzFfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGNfZ3BpbzFfaW5pdF92ZXJic1tdID0gewogCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX01BU0ssIDB4MDF9LAogCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX0RJUkVDVElPTiwgMHgwMX0sCiAJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fREFUQSwgMHgwMX0sCiAJeyB9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsY19ncGlvMl9pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsY19ncGlvMl9pbml0X3ZlcmJzW10gPSB7CiAJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fTUFTSywgMHgwMn0sCiAJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fRElSRUNUSU9OLCAweDAyfSwKIAl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19EQVRBLCAweDAyfSwKIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjX2dwaW8zX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjX2dwaW8zX2luaXRfdmVyYnNbXSA9IHsKIAl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19NQVNLLCAweDAzfSwKIAl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19ESVJFQ1RJT04sIDB4MDN9LAogCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX0RBVEEsIDB4MDN9LApAQCAtMTAzMSw2ICsxMDU4LDcgQEAKIAlpbnQgZXJyOwogCXVuc2lnbmVkIGludCBocF9uaWQgPSBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF07CiAJdW5zaWduZWQgaW50IG1pY19uaWQgPSBzcGVjLT5leHRfbWljLnBpbjsKKwl1bnNpZ25lZCBpbnQgZG9ja19uaWQgPSBzcGVjLT5kb2NrX21pYy5waW47CiAKIAlpZiAoaHBfbmlkKSB7CiAJCWVyciA9IHNuZF9oZGFfaW5wdXRfamFja19hZGQoY29kZWMsIGhwX25pZCwKQEAgLTEwNDcsNDYgKzEwNzUsMTE2IEBACiAJCQlyZXR1cm4gZXJyOwogCQlzbmRfaGRhX2lucHV0X2phY2tfcmVwb3J0KGNvZGVjLCBtaWNfbmlkKTsKIAl9CisJaWYgKGRvY2tfbmlkKSB7CisJCWVyciA9IHNuZF9oZGFfaW5wdXRfamFja19hZGQoY29kZWMsIGRvY2tfbmlkLAorCQkJCQkgICAgIFNORF9KQUNLX01JQ1JPUEhPTkUsIE5VTEwpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJCXNuZF9oZGFfaW5wdXRfamFja19yZXBvcnQoY29kZWMsIGRvY2tfbmlkKTsKKwl9CiAjZW5kaWYgLyogQ09ORklHX1NORF9IREFfSU5QVVRfSkFDSyAqLwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBhbGNfYXV0b211dGVfc3BlYWtlcihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IHBpbmN0bCkKK3N0YXRpYyBpbnQgZGV0ZWN0X2phY2tzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBpbnQgbnVtX3BpbnMsIGhkYV9uaWRfdCAqcGlucykKIHsKLQlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQl1bnNpZ25lZCBpbnQgbXV0ZTsKLQloZGFfbmlkX3QgbmlkOwotCWludCBpOworCWludCBpLCBwcmVzZW50ID0gMDsKIAotCXNwZWMtPmphY2tfcHJlc2VudCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3BlYy0+YXV0b2NmZy5ocF9waW5zKTsgaSsrKSB7Ci0JCW5pZCA9IHNwZWMtPmF1dG9jZmcuaHBfcGluc1tpXTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BpbnM7IGkrKykgeworCQloZGFfbmlkX3QgbmlkID0gcGluc1tpXTsKIAkJaWYgKCFuaWQpCiAJCQlicmVhazsKIAkJc25kX2hkYV9pbnB1dF9qYWNrX3JlcG9ydChjb2RlYywgbmlkKTsKLQkJc3BlYy0+amFja19wcmVzZW50IHw9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIG5pZCk7CisJCXByZXNlbnQgfD0gc25kX2hkYV9qYWNrX2RldGVjdChjb2RlYywgbmlkKTsKIAl9CisJcmV0dXJuIHByZXNlbnQ7Cit9CiAKLQltdXRlID0gc3BlYy0+amFja19wcmVzZW50ID8gSERBX0FNUF9NVVRFIDogMDsKLQkvKiBUb2dnbGUgaW50ZXJuYWwgc3BlYWtlcnMgbXV0aW5nICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnMpOyBpKyspIHsKLQkJbmlkID0gc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbaV07CitzdGF0aWMgdm9pZCBkb19hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IG51bV9waW5zLCBoZGFfbmlkX3QgKnBpbnMsCisJCQlib29sIG11dGUsIGJvb2wgaHBfb3V0KQoreworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXVuc2lnbmVkIGludCBtdXRlX2JpdHMgPSBtdXRlID8gSERBX0FNUF9NVVRFIDogMDsKKwl1bnNpZ25lZCBpbnQgcGluX2JpdHMgPSBtdXRlID8gMCA6IChocF9vdXQgPyBQSU5fSFAgOiBQSU5fT1VUKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fcGluczsgaSsrKSB7CisJCWhkYV9uaWRfdCBuaWQgPSBwaW5zW2ldOwogCQlpZiAoIW5pZCkKIAkJCWJyZWFrOwotCQlpZiAocGluY3RsKSB7CisJCXN3aXRjaCAoc3BlYy0+YXV0b211dGVfbW9kZSkgeworCQljYXNlIEFMQ19BVVRPTVVURV9QSU46CiAJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCi0JCQkJICAgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKLQkJCQkgICAgc3BlYy0+amFja19wcmVzZW50ID8gMCA6IFBJTl9PVVQpOwotCQl9IGVsc2UgeworCQkJCQkgICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAorCQkJCQkgICAgcGluX2JpdHMpOworCQkJYnJlYWs7CisJCWNhc2UgQUxDX0FVVE9NVVRFX0FNUDoKIAkJCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgbmlkLCBIREFfT1VUUFVULCAwLAotCQkJCQkgSERBX0FNUF9NVVRFLCBtdXRlKTsKKwkJCQkJCSBIREFfQU1QX01VVEUsIG11dGVfYml0cyk7CisJCQlicmVhazsKKwkJY2FzZSBBTENfQVVUT01VVEVfTUlYRVI6CisJCQluaWQgPSBzcGVjLT5hdXRvbXV0ZV9taXhlcl9uaWRbaV07CisJCQlpZiAoIW5pZCkKKwkJCQlicmVhazsKKwkJCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgbmlkLCBIREFfSU5QVVQsIDAsCisJCQkJCQkgSERBX0FNUF9NVVRFLCBtdXRlX2JpdHMpOworCQkJc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCBuaWQsIEhEQV9JTlBVVCwgMSwKKwkJCQkJCSBIREFfQU1QX01VVEUsIG11dGVfYml0cyk7CisJCQlicmVhazsKIAkJfQogCX0KIH0KIAotc3RhdGljIHZvaWQgYWxjX2F1dG9tdXRlX3BpbihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKKy8qIFRvZ2dsZSBpbnRlcm5hbCBzcGVha2VycyBtdXRpbmcgKi8KK3N0YXRpYyB2b2lkIHVwZGF0ZV9zcGVha2VycyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQlhbGNfYXV0b211dGVfc3BlYWtlcihjb2RlYywgMSk7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaW50IG9uOworCisJaWYgKCFzcGVjLT5hdXRvbXV0ZSkKKwkJb24gPSAwOworCWVsc2UKKwkJb24gPSBzcGVjLT5qYWNrX3ByZXNlbnQgfCBzcGVjLT5saW5lX2phY2tfcHJlc2VudDsKKwlvbiB8PSBzcGVjLT5tYXN0ZXJfbXV0ZTsKKwlkb19hdXRvbXV0ZShjb2RlYywgQVJSQVlfU0laRShzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGlucyksCisJCSAgICBzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGlucywgb24sIGZhbHNlKTsKKworCS8qIHRvZ2dsZSBsaW5lLW91dCBtdXRlcyBpZiBuZWVkZWQsIHRvbyAqLworCS8qIGlmIExPIGlzIGEgY29weSBvZiBlaXRoZXIgSFAgb3IgU3BlYWtlciwgZG9uJ3QgbmVlZCB0byBoYW5kbGUgaXQgKi8KKwlpZiAoc3BlYy0+YXV0b2NmZy5saW5lX291dF9waW5zWzBdID09IHNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSB8fAorCSAgICBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3BpbnNbMF0gPT0gc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0pCisJCXJldHVybjsKKwlpZiAoIXNwZWMtPmF1dG9tdXRlX2xpbmVzIHx8ICFzcGVjLT5hdXRvbXV0ZSkKKwkJb24gPSAwOworCWVsc2UKKwkJb24gPSBzcGVjLT5qYWNrX3ByZXNlbnQ7CisJb24gfD0gc3BlYy0+bWFzdGVyX211dGU7CisJZG9fYXV0b211dGUoY29kZWMsIEFSUkFZX1NJWkUoc3BlYy0+YXV0b2NmZy5saW5lX291dF9waW5zKSwKKwkJICAgIHNwZWMtPmF1dG9jZmcubGluZV9vdXRfcGlucywgb24sIGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQgYWxjX2hwX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCisJaWYgKCFzcGVjLT5hdXRvbXV0ZSkKKwkJcmV0dXJuOworCXNwZWMtPmphY2tfcHJlc2VudCA9CisJCWRldGVjdF9qYWNrcyhjb2RlYywgQVJSQVlfU0laRShzcGVjLT5hdXRvY2ZnLmhwX3BpbnMpLAorCQkJICAgICBzcGVjLT5hdXRvY2ZnLmhwX3BpbnMpOworCXVwZGF0ZV9zcGVha2Vycyhjb2RlYyk7Cit9CisKK3N0YXRpYyB2b2lkIGFsY19saW5lX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCisJaWYgKCFzcGVjLT5hdXRvbXV0ZSB8fCAhc3BlYy0+ZGV0ZWN0X2xpbmUpCisJCXJldHVybjsKKwlzcGVjLT5saW5lX2phY2tfcHJlc2VudCA9CisJCWRldGVjdF9qYWNrcyhjb2RlYywgQVJSQVlfU0laRShzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3BpbnMpLAorCQkJICAgICBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3BpbnMpOworCXVwZGF0ZV9zcGVha2Vycyhjb2RlYyk7CiB9CiAKIHN0YXRpYyBpbnQgZ2V0X2Nvbm5lY3Rpb25faW5kZXgoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBtdXgsCkBAIC0xMTI4LDcgKzEyMjYsNyBAQAogc3RhdGljIHZvaWQgYWxjX21pY19hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlzdHJ1Y3QgYWxjX21pY19yb3V0ZSAqZGVhZCwgKmFsaXZlOworCXN0cnVjdCBhbGNfbWljX3JvdXRlICpkZWFkMSwgKmRlYWQyLCAqYWxpdmU7CiAJdW5zaWduZWQgaW50IHByZXNlbnQsIHR5cGU7CiAJaGRhX25pZF90IGNhcF9uaWQ7CiAKQEAgLTExNDYsMTMgKzEyNDQsMjQgQEAKIAogCWNhcF9uaWQgPSBzcGVjLT5jYXBzcmNfbmlkcyA/IHNwZWMtPmNhcHNyY19uaWRzWzBdIDogc3BlYy0+YWRjX25pZHNbMF07CiAKKwlhbGl2ZSA9ICZzcGVjLT5pbnRfbWljOworCWRlYWQxID0gJnNwZWMtPmV4dF9taWM7CisJZGVhZDIgPSAmc3BlYy0+ZG9ja19taWM7CisKIAlwcmVzZW50ID0gc25kX2hkYV9qYWNrX2RldGVjdChjb2RlYywgc3BlYy0+ZXh0X21pYy5waW4pOwogCWlmIChwcmVzZW50KSB7CiAJCWFsaXZlID0gJnNwZWMtPmV4dF9taWM7Ci0JCWRlYWQgPSAmc3BlYy0+aW50X21pYzsKLQl9IGVsc2UgewotCQlhbGl2ZSA9ICZzcGVjLT5pbnRfbWljOwotCQlkZWFkID0gJnNwZWMtPmV4dF9taWM7CisJCWRlYWQxID0gJnNwZWMtPmludF9taWM7CisJCWRlYWQyID0gJnNwZWMtPmRvY2tfbWljOworCX0KKwlpZiAoIXByZXNlbnQgJiYgc3BlYy0+ZG9ja19taWMucGluID4gMCkgeworCQlwcmVzZW50ID0gc25kX2hkYV9qYWNrX2RldGVjdChjb2RlYywgc3BlYy0+ZG9ja19taWMucGluKTsKKwkJaWYgKHByZXNlbnQpIHsKKwkJCWFsaXZlID0gJnNwZWMtPmRvY2tfbWljOworCQkJZGVhZDEgPSAmc3BlYy0+aW50X21pYzsKKwkJCWRlYWQyID0gJnNwZWMtPmV4dF9taWM7CisJCX0KKwkJc25kX2hkYV9pbnB1dF9qYWNrX3JlcG9ydChjb2RlYywgc3BlYy0+ZG9ja19taWMucGluKTsKIAl9CiAKIAl0eXBlID0gZ2V0X3djYXBzX3R5cGUoZ2V0X3djYXBzKGNvZGVjLCBjYXBfbmlkKSk7CkBAIC0xMTYxLDkgKzEyNzAsMTQgQEAKIAkJc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCBjYXBfbmlkLCBIREFfSU5QVVQsCiAJCQkJCSBhbGl2ZS0+bXV4X2lkeCwKIAkJCQkJIEhEQV9BTVBfTVVURSwgMCk7Ci0JCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgY2FwX25pZCwgSERBX0lOUFVULAotCQkJCQkgZGVhZC0+bXV4X2lkeCwKLQkJCQkJIEhEQV9BTVBfTVVURSwgSERBX0FNUF9NVVRFKTsKKwkJaWYgKGRlYWQxLT5waW4gPiAwKQorCQkJc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCBjYXBfbmlkLCBIREFfSU5QVVQsCisJCQkJCQkgZGVhZDEtPm11eF9pZHgsCisJCQkJCQkgSERBX0FNUF9NVVRFLCBIREFfQU1QX01VVEUpOworCQlpZiAoZGVhZDItPnBpbiA+IDApCisJCQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIGNhcF9uaWQsIEhEQV9JTlBVVCwKKwkJCQkJCSBkZWFkMi0+bXV4X2lkeCwKKwkJCQkJCSBIREFfQU1QX01VVEUsIEhEQV9BTVBfTVVURSk7CiAJfSBlbHNlIHsKIAkJLyogTVVYIHN0eWxlIChlLmcuIEFMQzg4MCkgKi8KIAkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgY2FwX25pZCwgMCwKQEAgLTExODQsNyArMTI5OCwxMCBAQAogCQlyZXMgPj49IDI2OwogCXN3aXRjaCAocmVzKSB7CiAJY2FzZSBBTEM4ODBfSFBfRVZFTlQ6Ci0JCWFsY19hdXRvbXV0ZV9waW4oY29kZWMpOworCQlhbGNfaHBfYXV0b211dGUoY29kZWMpOworCQlicmVhazsKKwljYXNlIEFMQzg4MF9GUk9OVF9FVkVOVDoKKwkJYWxjX2xpbmVfYXV0b211dGUoY29kZWMpOwogCQlicmVhazsKIAljYXNlIEFMQzg4MF9NSUNfRVZFTlQ6CiAJCWFsY19taWNfYXV0b211dGUoY29kZWMpOwpAQCAtMTE5NCw3ICsxMzExLDggQEAKIAogc3RhdGljIHZvaWQgYWxjX2luaXRob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewotCWFsY19hdXRvbXV0ZV9waW4oY29kZWMpOworCWFsY19ocF9hdXRvbXV0ZShjb2RlYyk7CisJYWxjX2xpbmVfYXV0b211dGUoY29kZWMpOwogCWFsY19taWNfYXV0b211dGUoY29kZWMpOwogfQogCkBAIC0xMjM2LDYgKzEzNTQsNDMgQEAKIAkJCQkgICAgb24gPyAyIDogMCk7CiB9CiAKKy8qIHR1cm4gb24vb2ZmIEVBUEQgY29udHJvbHMgb2YgdGhlIGNvZGVjICovCitzdGF0aWMgdm9pZCBhbGNfYXV0b19zZXR1cF9lYXBkKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBib29sIG9uKQoreworCS8qIFdlIGN1cnJlbnRseSBvbmx5IGhhbmRsZSBmcm9udCwgSFAgKi8KKwlzd2l0Y2ggKGNvZGVjLT52ZW5kb3JfaWQpIHsKKwljYXNlIDB4MTBlYzAyNjA6CisJCXNldF9lYXBkKGNvZGVjLCAweDBmLCBvbik7CisJCXNldF9lYXBkKGNvZGVjLCAweDEwLCBvbik7CisJCWJyZWFrOworCWNhc2UgMHgxMGVjMDI2MjoKKwljYXNlIDB4MTBlYzAyNjc6CisJY2FzZSAweDEwZWMwMjY4OgorCWNhc2UgMHgxMGVjMDI2OToKKwljYXNlIDB4MTBlYzAyNzA6CisJY2FzZSAweDEwZWMwMjcyOgorCWNhc2UgMHgxMGVjMDY2MDoKKwljYXNlIDB4MTBlYzA2NjI6CisJY2FzZSAweDEwZWMwNjYzOgorCWNhc2UgMHgxMGVjMDY2NToKKwljYXNlIDB4MTBlYzA4NjI6CisJY2FzZSAweDEwZWMwODg5OgorCWNhc2UgMHgxMGVjMDg5MjoKKwkJc2V0X2VhcGQoY29kZWMsIDB4MTQsIG9uKTsKKwkJc2V0X2VhcGQoY29kZWMsIDB4MTUsIG9uKTsKKwkJYnJlYWs7CisJfQorfQorCisvKiBnZW5lcmljIHNodXR1cCBjYWxsYmFjazsKKyAqIGp1c3QgdHVybmluZyBvZmYgRVBBRCBhbmQgYSBsaXR0bGUgcGF1c2UgZm9yIGF2b2lkaW5nIHBvcC1ub2lzZQorICovCitzdGF0aWMgdm9pZCBhbGNfZWFwZF9zaHV0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJYWxjX2F1dG9fc2V0dXBfZWFwZChjb2RlYywgZmFsc2UpOworCW1zbGVlcCgyMDApOworfQorCiBzdGF0aWMgdm9pZCBhbGNfYXV0b19pbml0X2FtcChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IHR5cGUpCiB7CiAJdW5zaWduZWQgaW50IHRtcDsKQEAgLTEyNTEsMjcgKzE0MDYsNyBAQAogCQlzbmRfaGRhX3NlcXVlbmNlX3dyaXRlKGNvZGVjLCBhbGNfZ3BpbzNfaW5pdF92ZXJicyk7CiAJCWJyZWFrOwogCWNhc2UgQUxDX0lOSVRfREVGQVVMVDoKLQkJc3dpdGNoIChjb2RlYy0+dmVuZG9yX2lkKSB7Ci0JCWNhc2UgMHgxMGVjMDI2MDoKLQkJCXNldF9lYXBkKGNvZGVjLCAweDBmLCAxKTsKLQkJCXNldF9lYXBkKGNvZGVjLCAweDEwLCAxKTsKLQkJCWJyZWFrOwotCQljYXNlIDB4MTBlYzAyNjI6Ci0JCWNhc2UgMHgxMGVjMDI2NzoKLQkJY2FzZSAweDEwZWMwMjY4OgotCQljYXNlIDB4MTBlYzAyNjk6Ci0JCWNhc2UgMHgxMGVjMDI3MDoKLQkJY2FzZSAweDEwZWMwMjcyOgotCQljYXNlIDB4MTBlYzA2NjA6Ci0JCWNhc2UgMHgxMGVjMDY2MjoKLQkJY2FzZSAweDEwZWMwNjYzOgotCQljYXNlIDB4MTBlYzA2NjU6Ci0JCWNhc2UgMHgxMGVjMDg2MjoKLQkJY2FzZSAweDEwZWMwODg5OgotCQkJc2V0X2VhcGQoY29kZWMsIDB4MTQsIDEpOwotCQkJc2V0X2VhcGQoY29kZWMsIDB4MTUsIDEpOwotCQkJYnJlYWs7Ci0JCX0KKwkJYWxjX2F1dG9fc2V0dXBfZWFwZChjb2RlYywgdHJ1ZSk7CiAJCXN3aXRjaCAoY29kZWMtPnZlbmRvcl9pZCkgewogCQljYXNlIDB4MTBlYzAyNjA6CiAJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDFhLCAwLApAQCAtMTMxNSwyMCArMTQ1MCwxMjggQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgYWxjX2F1dG9tdXRlX21vZGVfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB0ZXh0czJbXSA9IHsKKwkJIkRpc2FibGVkIiwgIkVuYWJsZWQiCisJfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRleHRzM1tdID0geworCQkiRGlzYWJsZWQiLCAiU3BlYWtlciBPbmx5IiwgIkxpbmUtT3V0K1NwZWFrZXIiCisJfTsKKwljb25zdCBjaGFyICogY29uc3QgKnRleHRzOworCisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CisJdWluZm8tPmNvdW50ID0gMTsKKwlpZiAoc3BlYy0+YXV0b211dGVfaHBfbG8pIHsKKwkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAzOworCQl0ZXh0cyA9IHRleHRzMzsKKwl9IGVsc2UgeworCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDI7CisJCXRleHRzID0gdGV4dHMyOworCX0KKwlpZiAodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+PSB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcykKKwkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zIC0gMTsKKwlzdHJjcHkodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwKKwkgICAgICAgdGV4dHNbdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFsY19hdXRvbXV0ZV9tb2RlX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJdW5zaWduZWQgaW50IHZhbDsKKwlpZiAoIXNwZWMtPmF1dG9tdXRlKQorCQl2YWwgPSAwOworCWVsc2UgaWYgKCFzcGVjLT5hdXRvbXV0ZV9saW5lcykKKwkJdmFsID0gMTsKKwllbHNlCisJCXZhbCA9IDI7CisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IHZhbDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhbGNfYXV0b211dGVfbW9kZV9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCisJc3dpdGNoICh1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdKSB7CisJY2FzZSAwOgorCQlpZiAoIXNwZWMtPmF1dG9tdXRlKQorCQkJcmV0dXJuIDA7CisJCXNwZWMtPmF1dG9tdXRlID0gMDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlpZiAoc3BlYy0+YXV0b211dGUgJiYgIXNwZWMtPmF1dG9tdXRlX2xpbmVzKQorCQkJcmV0dXJuIDA7CisJCXNwZWMtPmF1dG9tdXRlID0gMTsKKwkJc3BlYy0+YXV0b211dGVfbGluZXMgPSAwOworCQlicmVhazsKKwljYXNlIDI6CisJCWlmICghc3BlYy0+YXV0b211dGVfaHBfbG8pCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKHNwZWMtPmF1dG9tdXRlICYmIHNwZWMtPmF1dG9tdXRlX2xpbmVzKQorCQkJcmV0dXJuIDA7CisJCXNwZWMtPmF1dG9tdXRlID0gMTsKKwkJc3BlYy0+YXV0b211dGVfbGluZXMgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJdXBkYXRlX3NwZWFrZXJzKGNvZGVjKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsY19hdXRvbXV0ZV9tb2RlX2VudW0gPSB7CisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJLm5hbWUgPSAiQXV0by1NdXRlIE1vZGUiLAorCS5pbmZvID0gYWxjX2F1dG9tdXRlX21vZGVfaW5mbywKKwkuZ2V0ID0gYWxjX2F1dG9tdXRlX21vZGVfZ2V0LAorCS5wdXQgPSBhbGNfYXV0b211dGVfbW9kZV9wdXQsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmFsY19rY29udHJvbF9uZXcoc3RydWN0IGFsY19zcGVjICpzcGVjKTsKKworc3RhdGljIGludCBhbGNfYWRkX2F1dG9tdXRlX21vZGVfZW51bShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa25ldzsKKworCWtuZXcgPSBhbGNfa2NvbnRyb2xfbmV3KHNwZWMpOworCWlmICgha25ldykKKwkJcmV0dXJuIC1FTk9NRU07CisJKmtuZXcgPSBhbGNfYXV0b211dGVfbW9kZV9lbnVtOworCWtuZXctPm5hbWUgPSBrc3RyZHVwKCJBdXRvLU11dGUgTW9kZSIsIEdGUF9LRVJORUwpOworCWlmICgha25ldy0+bmFtZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIGFsY19pbml0X2F1dG9faHAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnID0gJnNwZWMtPmF1dG9jZmc7CisJaW50IHByZXNlbnQgPSAwOwogCWludCBpOwogCi0JaWYgKCFjZmctPmhwX3BpbnNbMF0pIHsKLQkJaWYgKGNmZy0+bGluZV9vdXRfdHlwZSAhPSBBVVRPX1BJTl9IUF9PVVQpCi0JCQlyZXR1cm47Ci0JfQorCWlmIChjZmctPmhwX3BpbnNbMF0pCisJCXByZXNlbnQrKzsKKwlpZiAoY2ZnLT5saW5lX291dF9waW5zWzBdKQorCQlwcmVzZW50Kys7CisJaWYgKGNmZy0+c3BlYWtlcl9waW5zWzBdKQorCQlwcmVzZW50Kys7CisJaWYgKHByZXNlbnQgPCAyKSAvKiBuZWVkIHR3byBkaWZmZXJlbnQgb3V0cHV0IHR5cGVzICovCisJCXJldHVybjsKKwlpZiAocHJlc2VudCA9PSAzKQorCQlzcGVjLT5hdXRvbXV0ZV9ocF9sbyA9IDE7IC8qIGJvdGggSFAgYW5kIExPIGF1dG9tdXRlICovCiAKIAlpZiAoIWNmZy0+c3BlYWtlcl9waW5zWzBdKSB7Ci0JCWlmIChjZmctPmxpbmVfb3V0X3R5cGUgIT0gQVVUT19QSU5fU1BFQUtFUl9PVVQpCi0JCQlyZXR1cm47CiAJCW1lbWNweShjZmctPnNwZWFrZXJfcGlucywgY2ZnLT5saW5lX291dF9waW5zLAogCQkgICAgICAgc2l6ZW9mKGNmZy0+c3BlYWtlcl9waW5zKSk7CiAJCWNmZy0+c3BlYWtlcl9vdXRzID0gY2ZnLT5saW5lX291dHM7CkBAIC0xMzQxLDI4ICsxNTg0LDQ5IEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IGNmZy0+aHBfb3V0czsgaSsrKSB7CisJCWhkYV9uaWRfdCBuaWQgPSBjZmctPmhwX3BpbnNbaV07CisJCWlmICghaXNfamFja19kZXRlY3RhYmxlKGNvZGVjLCBuaWQpKQorCQkJY29udGludWU7CiAJCXNuZF9wcmludGRkKCJyZWFsdGVrOiBFbmFibGUgSFAgYXV0by1tdXRpbmcgb24gTklEIDB4JXhcbiIsCi0JCQkgICAgY2ZnLT5ocF9waW5zW2ldKTsKLQkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgY2ZnLT5ocF9waW5zW2ldLCAwLAorCQkJICAgIG5pZCk7CisJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIG5pZCwgMCwKIAkJCQkgIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwKIAkJCQkgIEFDX1VTUlNQX0VOIHwgQUxDODgwX0hQX0VWRU5UKTsKKwkJc3BlYy0+YXV0b211dGUgPSAxOworCQlzcGVjLT5hdXRvbXV0ZV9tb2RlID0gQUxDX0FVVE9NVVRFX1BJTjsKIAl9Ci0Jc3BlYy0+dW5zb2xfZXZlbnQgPSBhbGNfc2t1X3Vuc29sX2V2ZW50OworCWlmIChzcGVjLT5hdXRvbXV0ZSAmJiBjZmctPmxpbmVfb3V0X3BpbnNbMF0gJiYKKwkgICAgY2ZnLT5saW5lX291dF9waW5zWzBdICE9IGNmZy0+aHBfcGluc1swXSAmJgorCSAgICBjZmctPmxpbmVfb3V0X3BpbnNbMF0gIT0gY2ZnLT5zcGVha2VyX3BpbnNbMF0pIHsKKwkJZm9yIChpID0gMDsgaSA8IGNmZy0+bGluZV9vdXRzOyBpKyspIHsKKwkJCWhkYV9uaWRfdCBuaWQgPSBjZmctPmxpbmVfb3V0X3BpbnNbaV07CisJCQlpZiAoIWlzX2phY2tfZGV0ZWN0YWJsZShjb2RlYywgbmlkKSkKKwkJCQljb250aW51ZTsKKwkJCXNuZF9wcmludGRkKCJyZWFsdGVrOiBFbmFibGUgTGluZS1PdXQgYXV0by1tdXRpbmcgIgorCQkJCSAgICAib24gTklEIDB4JXhcbiIsIG5pZCk7CisJCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBuaWQsIDAsCisJCQkJCUFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwKKwkJCQkJQUNfVVNSU1BfRU4gfCBBTEM4ODBfRlJPTlRfRVZFTlQpOworCQkJc3BlYy0+ZGV0ZWN0X2xpbmUgPSAxOworCQl9CisJCXNwZWMtPmF1dG9tdXRlX2xpbmVzID0gc3BlYy0+ZGV0ZWN0X2xpbmU7CisJfQorCisJaWYgKHNwZWMtPmF1dG9tdXRlKSB7CisJCS8qIGNyZWF0ZSBhIGNvbnRyb2wgZm9yIGF1dG9tdXRlIG1vZGUgKi8KKwkJYWxjX2FkZF9hdXRvbXV0ZV9tb2RlX2VudW0oY29kZWMpOworCQlzcGVjLT51bnNvbF9ldmVudCA9IGFsY19za3VfdW5zb2xfZXZlbnQ7CisJfQogfQogCiBzdGF0aWMgdm9pZCBhbGNfaW5pdF9hdXRvX21pYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcgPSAmc3BlYy0+YXV0b2NmZzsKLQloZGFfbmlkX3QgZml4ZWQsIGV4dDsKKwloZGFfbmlkX3QgZml4ZWQsIGV4dCwgZG9jazsKIAlpbnQgaTsKIAotCS8qIHRoZXJlIG11c3QgYmUgb25seSB0d28gbWljIGlucHV0cyBleGNsdXNpdmVseSAqLwotCWZvciAoaSA9IDA7IGkgPCBjZmctPm51bV9pbnB1dHM7IGkrKykKLQkJaWYgKGNmZy0+aW5wdXRzW2ldLnR5cGUgPj0gQVVUT19QSU5fTElORV9JTikKLQkJCXJldHVybjsKLQotCWZpeGVkID0gZXh0ID0gMDsKKwlmaXhlZCA9IGV4dCA9IGRvY2sgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBjZmctPm51bV9pbnB1dHM7IGkrKykgewogCQloZGFfbmlkX3QgbmlkID0gY2ZnLT5pbnB1dHNbaV0ucGluOwogCQl1bnNpZ25lZCBpbnQgZGVmY2ZnOwpAQCAtMTM3MSwyNiArMTYzNSw0NSBAQAogCQljYXNlIElOUFVUX1BJTl9BVFRSX0lOVDoKIAkJCWlmIChmaXhlZCkKIAkJCQlyZXR1cm47IC8qIGFscmVhZHkgb2NjdXBpZWQgKi8KKwkJCWlmIChjZmctPmlucHV0c1tpXS50eXBlICE9IEFVVE9fUElOX01JQykKKwkJCQlyZXR1cm47IC8qIGludmFsaWQgdHlwZSAqLwogCQkJZml4ZWQgPSBuaWQ7CiAJCQlicmVhazsKIAkJY2FzZSBJTlBVVF9QSU5fQVRUUl9VTlVTRUQ6CiAJCQlyZXR1cm47IC8qIGludmFsaWQgZW50cnkgKi8KKwkJY2FzZSBJTlBVVF9QSU5fQVRUUl9ET0NLOgorCQkJaWYgKGRvY2spCisJCQkJcmV0dXJuOyAvKiBhbHJlYWR5IG9jY3VwaWVkICovCisJCQlpZiAoY2ZnLT5pbnB1dHNbaV0udHlwZSA+IEFVVE9fUElOX0xJTkVfSU4pCisJCQkJcmV0dXJuOyAvKiBpbnZhbGlkIHR5cGUgKi8KKwkJCWRvY2sgPSBuaWQ7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWlmIChleHQpCiAJCQkJcmV0dXJuOyAvKiBhbHJlYWR5IG9jY3VwaWVkICovCisJCQlpZiAoY2ZnLT5pbnB1dHNbaV0udHlwZSAhPSBBVVRPX1BJTl9NSUMpCisJCQkJcmV0dXJuOyAvKiBpbnZhbGlkIHR5cGUgKi8KIAkJCWV4dCA9IG5pZDsKIAkJCWJyZWFrOwogCQl9CiAJfQorCWlmICghZXh0ICYmIGRvY2spIHsKKwkJZXh0ID0gZG9jazsKKwkJZG9jayA9IDA7CisJfQogCWlmICghZXh0IHx8ICFmaXhlZCkKIAkJcmV0dXJuOwotCWlmICghKGdldF93Y2Fwcyhjb2RlYywgZXh0KSAmIEFDX1dDQVBfVU5TT0xfQ0FQKSkKKwlpZiAoIWlzX2phY2tfZGV0ZWN0YWJsZShjb2RlYywgZXh0KSkKIAkJcmV0dXJuOyAvKiBubyB1bnNvbCBzdXBwb3J0ICovCi0Jc25kX3ByaW50ZGQoInJlYWx0ZWs6IEVuYWJsZSBhdXRvLW1pYyBzd2l0Y2ggb24gTklEIDB4JXgvMHgleFxuIiwKLQkJICAgIGV4dCwgZml4ZWQpOworCWlmIChkb2NrICYmICFpc19qYWNrX2RldGVjdGFibGUoY29kZWMsIGRvY2spKQorCQlyZXR1cm47IC8qIG5vIHVuc29sIHN1cHBvcnQgKi8KKwlzbmRfcHJpbnRkZCgicmVhbHRlazogRW5hYmxlIGF1dG8tbWljIHN3aXRjaCBvbiBOSUQgMHgleC8weCV4LzB4JXhcbiIsCisJCSAgICBleHQsIGZpeGVkLCBkb2NrKTsKIAlzcGVjLT5leHRfbWljLnBpbiA9IGV4dDsKKwlzcGVjLT5kb2NrX21pYy5waW4gPSBkb2NrOwogCXNwZWMtPmludF9taWMucGluID0gZml4ZWQ7CiAJc3BlYy0+ZXh0X21pYy5tdXhfaWR4ID0gTVVYX0lEWF9VTkRFRjsgLyogc2V0IGxhdGVyICovCisJc3BlYy0+ZG9ja19taWMubXV4X2lkeCA9IE1VWF9JRFhfVU5ERUY7IC8qIHNldCBsYXRlciAqLwogCXNwZWMtPmludF9taWMubXV4X2lkeCA9IE1VWF9JRFhfVU5ERUY7IC8qIHNldCBsYXRlciAqLwogCXNwZWMtPmF1dG9fbWljID0gMTsKIAlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBzcGVjLT5leHRfbWljLnBpbiwgMCwKQEAgLTE1ODMsOSArMTg2Niw2IEBACiAJCQkJcmV0dXJuIDE7CiAJCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IG5pZDsKIAl9Ci0KLQlhbGNfaW5pdF9hdXRvX2hwKGNvZGVjKTsKLQlhbGNfaW5pdF9hdXRvX21pYyhjb2RlYyk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTE1OTgsOSArMTg3OCwxMCBAQAogCQlzbmRfcHJpbnRkKCJyZWFsdGVrOiAiCiAJCQkgICAiRW5hYmxlIGRlZmF1bHQgc2V0dXAgZm9yIGF1dG8gbW9kZSBhcyBmYWxsYmFja1xuIik7CiAJCXNwZWMtPmluaXRfYW1wID0gQUxDX0lOSVRfREVGQVVMVDsKLQkJYWxjX2luaXRfYXV0b19ocChjb2RlYyk7Ci0JCWFsY19pbml0X2F1dG9fbWljKGNvZGVjKTsKIAl9CisKKwlhbGNfaW5pdF9hdXRvX2hwKGNvZGVjKTsKKwlhbGNfaW5pdF9hdXRvX21pYyhjb2RlYyk7CiB9CiAKIC8qCkBAIC0xODQyLDcgKzIxMjMsNyBAQAogLyoKICAqIDJjaCBtb2RlCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg4XzRTVF9jaDJfaW50ZWxfaW5pdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODhfNFNUX2NoMl9pbnRlbF9pbml0W10gPSB7CiAvKiBNaWMtaW4gamFjayBhcyBtaWMgaW4gKi8KIAl7IDB4MTgsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MCB9LAogCXsgMHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFIH0sCkBAIC0xODU3LDcgKzIxMzgsNyBAQAogLyoKICAqIDRjaCBtb2RlCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg4XzRTVF9jaDRfaW50ZWxfaW5pdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODhfNFNUX2NoNF9pbnRlbF9pbml0W10gPSB7CiAvKiBNaWMtaW4gamFjayBhcyBtaWMgaW4gKi8KIAl7IDB4MTgsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MCB9LAogCXsgMHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFIH0sCkBAIC0xODcyLDcgKzIxNTMsNyBAQAogLyoKICAqIDZjaCBtb2RlCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg4XzRTVF9jaDZfaW50ZWxfaW5pdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODhfNFNUX2NoNl9pbnRlbF9pbml0W10gPSB7CiAvKiBNaWMtaW4gamFjayBhcyBDTEZFICovCiAJeyAweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKIAl7IDB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIH0sCkBAIC0xODg3LDcgKzIxNjgsNyBAQAogLyoKICAqIDhjaCBtb2RlCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg4XzRTVF9jaDhfaW50ZWxfaW5pdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODhfNFNUX2NoOF9pbnRlbF9pbml0W10gPSB7CiAvKiBNaWMtaW4gamFjayBhcyBDTEZFICovCiAJeyAweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKIAl7IDB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIH0sCkBAIC0xODk5LDcgKzIxODAsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhbGM4ODhfNFNUXzhjaF9pbnRlbF9tb2Rlc1s0XSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhbGM4ODhfNFNUXzhjaF9pbnRlbF9tb2Rlc1s0XSA9IHsKIAl7IDIsIGFsYzg4OF80U1RfY2gyX2ludGVsX2luaXQgfSwKIAl7IDQsIGFsYzg4OF80U1RfY2g0X2ludGVsX2luaXQgfSwKIAl7IDYsIGFsYzg4OF80U1RfY2g2X2ludGVsX2luaXQgfSwKQEAgLTE5MTAsNyArMjE5MSw3IEBACiAgKiBBTEM4ODggRnVqaXRzdSBTaWVtZW5zIEFtaWxsbyB4YTM1MzAKICAqLwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4OF9mdWppdHN1X3hhMzUzMF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODhfZnVqaXRzdV94YTM1MzBfdmVyYnNbXSA9IHsKIC8qIEZyb250IE1pYzogc2V0IHRvIFBJTl9JTiAoZW1wdHkgYnkgZGVmYXVsdCkgKi8KIAl7MHgxMiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAogLyogQ29ubmVjdCBJbnRlcm5hbCBIUCB0byBGcm9udCAqLwpAQCAtMTk0MywyMiArMjIyNCw2IEBACiAJe30KIH07CiAKLXN0YXRpYyB2b2lkIGFsY19hdXRvbXV0ZV9hbXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0JYWxjX2F1dG9tdXRlX3NwZWFrZXIoY29kZWMsIDApOwotfQotCi1zdGF0aWMgdm9pZCBhbGNfYXV0b211dGVfYW1wX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAotCQkJCQkgdW5zaWduZWQgaW50IHJlcykKLXsKLQlpZiAoY29kZWMtPnZlbmRvcl9pZCA9PSAweDEwZWMwODgwKQotCQlyZXMgPj49IDI4OwotCWVsc2UKLQkJcmVzID4+PSAyNjsKLQlpZiAocmVzID09IEFMQzg4MF9IUF9FVkVOVCkKLQkJYWxjX2F1dG9tdXRlX2FtcChjb2RlYyk7Ci19Ci0KIHN0YXRpYyB2b2lkIGFsYzg4OV9hdXRvbXV0ZV9zZXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKQEAgLTE5NjksMTIgKzIyMzQsMTQgQEAKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1syXSA9IDB4MTc7CiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbM10gPSAweDE5OwogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzRdID0gMHgxYTsKKwlzcGVjLT5hdXRvbXV0ZSA9IDE7CisJc3BlYy0+YXV0b211dGVfbW9kZSA9IEFMQ19BVVRPTVVURV9BTVA7CiB9CiAKIHN0YXRpYyB2b2lkIGFsYzg4OV9pbnRlbF9pbml0X2hvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJYWxjODg5X2NvZWZfaW5pdChjb2RlYyk7Ci0JYWxjX2F1dG9tdXRlX2FtcChjb2RlYyk7CisJYWxjX2hwX2F1dG9tdXRlKGNvZGVjKTsKIH0KIAogc3RhdGljIHZvaWQgYWxjODg4X2Z1aml0c3VfeGEzNTMwX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQpAQCAtMTk4NSwxMyArMjI1MiwxNSBAQAogCXNwZWMtPmF1dG9jZmcuaHBfcGluc1sxXSA9IDB4MWI7IC8qIGhwICovCiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDE0OyAvKiBzcGVha2VyICovCiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMV0gPSAweDE1OyAvKiBiYXNzICovCisJc3BlYy0+YXV0b211dGUgPSAxOworCXNwZWMtPmF1dG9tdXRlX21vZGUgPSBBTENfQVVUT01VVEVfQU1QOwogfQogCiAvKgogICogQUxDODg4IEFjZXIgQXNwaXJlIDQ5MzBHIG1vZGVsCiAgKi8KIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODhfYWNlcl9hc3BpcmVfNDkzMGdfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg4X2FjZXJfYXNwaXJlXzQ5MzBnX3ZlcmJzW10gPSB7CiAvKiBGcm9udCBNaWM6IHNldCB0byBQSU5fSU4gKGVtcHR5IGJ5IGRlZmF1bHQpICovCiAJezB4MTIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKIC8qIFVuc2VsZWN0IEZyb250IE1pYyBieSBkZWZhdWx0IGluIGlucHV0IG1peGVyIDMgKi8KQEAgLTIwMTQsNyArMjI4Myw3IEBACiAgKiBBTEM4ODggQWNlciBBc3BpcmUgNjUzMEcgbW9kZWwKICAqLwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4OF9hY2VyX2FzcGlyZV82NTMwZ192ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODhfYWNlcl9hc3BpcmVfNjUzMGdfdmVyYnNbXSA9IHsKIC8qIFJvdXRlIHRvIGJ1aWx0LWluIHN1Yndvb2ZlciBhcyB3ZWxsIGFzIHNwZWFrZXJzICovCiAJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKQEAgLTIwNDQsNyArMjMxMyw3IEBACiAgKkFMQzg4OCBBY2VyIEFzcGlyZSA3NzMwRyBtb2RlbAogICovCiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg4X2FjZXJfYXNwaXJlXzc3MzBHX3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4OF9hY2VyX2FzcGlyZV83NzMwR192ZXJic1tdID0gewogLyogQmlhcyB2b2x0YWdlIG9uIGZvciBleHRlcm5hbCBtaWMgcG9ydCAqLwogCXsweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTiB8IFBJTl9WUkVGODB9LAogLyogRnJvbnQgTWljOiBzZXQgdG8gUElOX0lOIChlbXB0eSBieSBkZWZhdWx0KSAqLwpAQCAtMjA3NCw3ICsyMzQzLDcgQEAKICAqIEFMQzg4OSBBY2VyIEFzcGlyZSA4OTMwRyBtb2RlbAogICovCiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg5X2FjZXJfYXNwaXJlXzg5MzBnX3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4OV9hY2VyX2FzcGlyZV84OTMwZ192ZXJic1tdID0gewogLyogRnJvbnQgTWljOiBzZXQgdG8gUElOX0lOIChlbXB0eSBieSBkZWZhdWx0KSAqLwogCXsweDEyLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCiAvKiBVbnNlbGVjdCBGcm9udCBNaWMgYnkgZGVmYXVsdCBpbiBpbnB1dCBtaXhlciAzICovCkBAIC0yMTIwLDcgKzIzODksNyBAQAogCXsgfQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzg4OF8yX2NhcHR1cmVfc291cmNlc1syXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGM4ODhfMl9jYXB0dXJlX3NvdXJjZXNbMl0gPSB7CiAJLyogRnJvbnQgbWljIG9ubHkgYXZhaWxhYmxlIG9uIG9uZSBBREMgKi8KIAl7CiAJCS5udW1faXRlbXMgPSA0LApAQCAtMjE0MSw3ICsyNDEwLDcgQEAKIAl9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjODg4X2FjZXJfYXNwaXJlXzY1MzBfc291cmNlc1syXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGM4ODhfYWNlcl9hc3BpcmVfNjUzMF9zb3VyY2VzWzJdID0gewogCS8qIEludGVyYWwgbWljIG9ubHkgYXZhaWxhYmxlIG9uIG9uZSBBREMgKi8KIAl7CiAJCS5udW1faXRlbXMgPSA1LApAQCAtMjE2NCw3ICsyNDMzLDcgQEAKIAl9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjODg5X2NhcHR1cmVfc291cmNlc1szXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGM4ODlfY2FwdHVyZV9zb3VyY2VzWzNdID0gewogCS8qIERpZ2l0YWwgbWljIG9ubHkgYXZhaWxhYmxlIG9uIGZpcnN0ICJBREMiICovCiAJewogCQkubnVtX2l0ZW1zID0gNSwKQEAgLTIxOTYsNyArMjQ2NSw3IEBACiAJfQogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4OF9iYXNlX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODg4X2Jhc2VfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9CSU5EX01VVEUoIkZyb250IFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiU3Vycm91bmQgUGxheWJhY2sgVm9sdW1lIiwgMHgwZCwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTIyMTgsNyArMjQ4Nyw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4OF9hY2VyX2FzcGlyZV80OTMwZ19taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4OF9hY2VyX2FzcGlyZV80OTMwZ19taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJTdXJyb3VuZCBQbGF5YmFjayBWb2x1bWUiLCAweDBkLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMjI0MCw3ICsyNTA5LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODg5X2FjZXJfYXNwaXJlXzg5MzBnX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODg5X2FjZXJfYXNwaXJlXzg5MzBnX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQklORF9NVVRFKCJGcm9udCBQbGF5YmFjayBTd2l0Y2giLCAweDBjLCAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIlN1cnJvdW5kIFBsYXliYWNrIFZvbHVtZSIsIDB4MGQsIDB4MCwgSERBX09VVFBVVCksCkBAIC0yMjY3LDYgKzI1MzYsOCBAQAogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxNDsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1sxXSA9IDB4MTY7CiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMl0gPSAweDE3OworCXNwZWMtPmF1dG9tdXRlID0gMTsKKwlzcGVjLT5hdXRvbXV0ZV9tb2RlID0gQUxDX0FVVE9NVVRFX0FNUDsKIH0KIAogc3RhdGljIHZvaWQgYWxjODg4X2FjZXJfYXNwaXJlXzY1MzBnX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQpAQCAtMjI3Nyw2ICsyNTQ4LDggQEAKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTQ7CiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMV0gPSAweDE2OwogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzJdID0gMHgxNzsKKwlzcGVjLT5hdXRvbXV0ZSA9IDE7CisJc3BlYy0+YXV0b211dGVfbW9kZSA9IEFMQ19BVVRPTVVURV9BTVA7CiB9CiAKIHN0YXRpYyB2b2lkIGFsYzg4OF9hY2VyX2FzcGlyZV83NzMwZ19zZXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKQEAgLTIyODcsNiArMjU2MCw4IEBACiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDE0OwogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzFdID0gMHgxNjsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1syXSA9IDB4MTc7CisJc3BlYy0+YXV0b211dGUgPSAxOworCXNwZWMtPmF1dG9tdXRlX21vZGUgPSBBTENfQVVUT01VVEVfQU1QOwogfQogCiBzdGF0aWMgdm9pZCBhbGM4ODlfYWNlcl9hc3BpcmVfODkzMGdfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCkBAIC0yMjk3LDYgKzI1NzIsOCBAQAogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxNDsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1sxXSA9IDB4MTY7CiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMl0gPSAweDFiOworCXNwZWMtPmF1dG9tdXRlID0gMTsKKwlzcGVjLT5hdXRvbXV0ZV9tb2RlID0gQUxDX0FVVE9NVVRFX0FNUDsKIH0KIAogLyoKQEAgLTIzMDcsMTIgKzI1ODQsMTIgQEAKICAqICAgICAgICAgICAgICAgICBGLU1pYyA9IDB4MWIsIEhQID0gMHgxOQogICovCiAKLXN0YXRpYyBoZGFfbmlkX3QgYWxjODgwX2RhY19uaWRzWzRdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBhbGM4ODBfZGFjX25pZHNbNF0gPSB7CiAJLyogZnJvbnQsIHJlYXIsIGNsZmUsIHJlYXJfc3VyciAqLwogCTB4MDIsIDB4MDUsIDB4MDQsIDB4MDMKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3QgYWxjODgwX2FkY19uaWRzWzNdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBhbGM4ODBfYWRjX25pZHNbM10gPSB7CiAJLyogQURDMC0yICovCiAJMHgwNywgMHgwOCwgMHgwOSwKIH07CkBAIC0yMzIxLDcgKzI1OTgsNyBAQAogICogYnV0IGl0IHNob3dzIHplcm8gY29ubmVjdGlvbiBpbiB0aGUgcmVhbCBpbXBsZW1lbnRhdGlvbiBvbiBzb21lIGRldmljZXMuCiAgKiBOb3RlOiB0aGlzIGlzIGEgOTE1R0FWIGJ1ZywgZml4ZWQgb24gOTE1R0xWCiAgKi8KLXN0YXRpYyBoZGFfbmlkX3QgYWxjODgwX2FkY19uaWRzX2FsdFsyXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3QgYWxjODgwX2FkY19uaWRzX2FsdFsyXSA9IHsKIAkvKiBBREMxLTIgKi8KIAkweDA4LCAweDA5LAogfTsKQEAgLTIzMjksNyArMjYwNiw3IEBACiAjZGVmaW5lIEFMQzg4MF9ESUdPVVRfTklECTB4MDYKICNkZWZpbmUgQUxDODgwX0RJR0lOX05JRAkweDBhCiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGM4ODBfY2FwdHVyZV9zb3VyY2UgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjODgwX2NhcHR1cmVfc291cmNlID0gewogCS5udW1faXRlbXMgPSA0LAogCS5pdGVtcyA9IHsKIAkJeyAiTWljIiwgMHgwIH0sCkBAIC0yMzQxLDcgKzI2MTgsNyBAQAogCiAvKiBjaGFubmVsIHNvdXJjZSBzZXR0aW5nICgyLzYgY2hhbm5lbCBzZWxlY3Rpb24gZm9yIDMtc3RhY2spICovCiAvKiAyY2ggbW9kZSAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODBfdGhyZWVzdGFja19jaDJfaW5pdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODBfdGhyZWVzdGFja19jaDJfaW5pdFtdID0gewogCS8qIHNldCBsaW5lLWluIHRvIGlucHV0LCBtdXRlIGl0ICovCiAJeyAweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTiB9LAogCXsgMHgxYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFIH0sCkBAIC0yMzUyLDcgKzI2MjksNyBAQAogfTsKIAogLyogNmNoIG1vZGUgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgwX3RocmVlc3RhY2tfY2g2X2luaXRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgwX3RocmVlc3RhY2tfY2g2X2luaXRbXSA9IHsKIAkvKiBzZXQgbGluZS1pbiB0byBvdXRwdXQsIHVubXV0ZSBpdCAqLwogCXsgMHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCiAJeyAweDFhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB9LApAQCAtMjM2MiwxMiArMjYzOSwxMiBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhbGM4ODBfdGhyZWVzdGFja19tb2Rlc1syXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhbGM4ODBfdGhyZWVzdGFja19tb2Rlc1syXSA9IHsKIAl7IDIsIGFsYzg4MF90aHJlZXN0YWNrX2NoMl9pbml0IH0sCiAJeyA2LCBhbGM4ODBfdGhyZWVzdGFja19jaDZfaW5pdCB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4MF90aHJlZV9zdGFja19taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4MF90aHJlZV9zdGFja19taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJTdXJyb3VuZCBQbGF5YmFjayBWb2x1bWUiLCAweDBmLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMjUxMiwxNCArMjc4OSwxNCBAQAogCX0KIAogI2RlZmluZSBERUZJTkVfQ0FQTUlYKG51bSkgXAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsY19jYXB0dXJlX21peGVyICMjIG51bVtdID0geyBcCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjX2NhcHR1cmVfbWl4ZXIgIyMgbnVtW10gPSB7IFwKIAlfREVGSU5FX0NBUE1JWChudW0pLAkJCQkgICAgICBcCiAJX0RFRklORV9DQVBTUkMobnVtKSwJCQkJICAgICAgXAogCXsgfSAvKiBlbmQgKi8JCQkJCSAgICAgIFwKIH0KIAogI2RlZmluZSBERUZJTkVfQ0FQTUlYX05PU1JDKG51bSkgXAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsY19jYXB0dXJlX21peGVyX25vc3JjICMjIG51bVtdID0geyBcCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjX2NhcHR1cmVfbWl4ZXJfbm9zcmMgIyMgbnVtW10gPSB7IFwKIAlfREVGSU5FX0NBUE1JWChudW0pLAkJCQkJICAgIFwKIAl7IH0gLyogZW5kICovCQkJCQkJICAgIFwKIH0KQEAgLTI1NDIsNyArMjgxOSw3IEBACiAgKi8KIAogLyogYWRkaXRpb25hbCBtaXhlcnMgdG8gYWxjODgwX3RocmVlX3N0YWNrX21peGVyICovCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgwX2ZpdmVfc3RhY2tfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODBfZml2ZV9zdGFja19taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIlNpZGUgUGxheWJhY2sgVm9sdW1lIiwgMHgwZCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQklORF9NVVRFKCJTaWRlIFBsYXliYWNrIFN3aXRjaCIsIDB4MGQsIDIsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwpAQCAtMjU1MCw3ICsyODI3LDcgQEAKIAogLyogY2hhbm5lbCBzb3VyY2Ugc2V0dGluZyAoNi84IGNoYW5uZWwgc2VsZWN0aW9uIGZvciA1LXN0YWNrKSAqLwogLyogNmNoIG1vZGUgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgwX2ZpdmVzdGFja19jaDZfaW5pdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODBfZml2ZXN0YWNrX2NoNl9pbml0W10gPSB7CiAJLyogc2V0IGxpbmUtaW4gdG8gaW5wdXQsIG11dGUgaXQgKi8KIAl7IDB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOIH0sCiAJeyAweDFhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEUgfSwKQEAgLTI1NTgsMTQgKzI4MzUsMTQgQEAKIH07CiAKIC8qIDhjaCBtb2RlICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4MF9maXZlc3RhY2tfY2g4X2luaXRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgwX2ZpdmVzdGFja19jaDhfaW5pdFtdID0gewogCS8qIHNldCBsaW5lLWluIHRvIG91dHB1dCwgdW5tdXRlIGl0ICovCiAJeyAweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKIAl7IDB4MWEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIH0sCiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzg4MF9maXZlc3RhY2tfbW9kZXNbMl0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjODgwX2ZpdmVzdGFja19tb2Rlc1syXSA9IHsKIAl7IDYsIGFsYzg4MF9maXZlc3RhY2tfY2g2X2luaXQgfSwKIAl7IDgsIGFsYzg4MF9maXZlc3RhY2tfY2g4X2luaXQgfSwKIH07CkBAIC0yNTgwLDEyICsyODU3LDEyIEBACiAgKiAgIE1pYyA9IDB4MTgsIEYtTWljID0gMHgxOSwgTGluZSA9IDB4MWEsIEhQID0gMHgxYgogICovCiAKLXN0YXRpYyBoZGFfbmlkX3QgYWxjODgwXzZzdF9kYWNfbmlkc1s0XSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3QgYWxjODgwXzZzdF9kYWNfbmlkc1s0XSA9IHsKIAkvKiBmcm9udCwgcmVhciwgY2xmZSwgcmVhcl9zdXJyICovCiAJMHgwMiwgMHgwMywgMHgwNCwgMHgwNQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzg4MF82c3RhY2tfY2FwdHVyZV9zb3VyY2UgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjODgwXzZzdGFja19jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gNCwKIAkuaXRlbXMgPSB7CiAJCXsgIk1pYyIsIDB4MCB9LApAQCAtMjU5NiwxMSArMjg3MywxMSBAQAogfTsKIAogLyogZml4ZWQgOC1jaGFubmVscyAqLwotc3RhdGljIHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzg4MF9zaXhzdGFja19tb2Rlc1sxXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhbGM4ODBfc2l4c3RhY2tfbW9kZXNbMV0gPSB7CiAJeyA4LCBOVUxMIH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgwX3NpeF9zdGFja19taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4MF9zaXhfc3RhY2tfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9CSU5EX01VVEUoIkZyb250IFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiU3Vycm91bmQgUGxheWJhY2sgVm9sdW1lIiwgMHgwZCwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTI2NTUsMTggKzI5MzIsMTggQEAKICAqIGhhdmVuJ3Qgc2V0dXAgYW55IGluaXRpYWxpemF0aW9uIHZlcmJzIGZvciB0aGVzZSB5ZXQuLi4KICAqLwogCi1zdGF0aWMgaGRhX25pZF90IGFsYzg4MF93ODEwX2RhY19uaWRzWzNdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBhbGM4ODBfdzgxMF9kYWNfbmlkc1szXSA9IHsKIAkvKiBmcm9udCwgcmVhci9zdXJyb3VuZCwgY2xmZSAqLwogCTB4MDIsIDB4MDMsIDB4MDQKIH07CiAKIC8qIGZpeGVkIDYgY2hhbm5lbHMgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhbGM4ODBfdzgxMF9tb2Rlc1sxXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhbGM4ODBfdzgxMF9tb2Rlc1sxXSA9IHsKIAl7IDYsIE5VTEwgfQogfTsKIAogLyogUGluIGFzc2lnbm1lbnQ6IEZyb250ID0gMHgxNCwgU3VyciA9IDB4MTUsIENMRkUgPSAweDE2LCBIUCA9IDB4MWIgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODBfdzgxMF9iYXNlX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgwX3c4MTBfYmFzZV9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJTdXJyb3VuZCBQbGF5YmFjayBWb2x1bWUiLCAweDBkLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMjY4OCwxNyArMjk2NSwxNyBAQAogICogICAgICAgICAgICAgICAgIExpbmUgPSAweDFhCiAgKi8KIAotc3RhdGljIGhkYV9uaWRfdCBhbGM4ODBfejcxdl9kYWNfbmlkc1sxXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3QgYWxjODgwX3o3MXZfZGFjX25pZHNbMV0gPSB7CiAJMHgwMgogfTsKICNkZWZpbmUgQUxDODgwX1o3MVZfSFBfREFDCTB4MDMKIAogLyogZml4ZWQgMiBjaGFubmVscyAqLwotc3RhdGljIHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzg4MF8yX2phY2tfbW9kZXNbMV0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjODgwXzJfamFja19tb2Rlc1sxXSA9IHsKIAl7IDIsIE5VTEwgfQogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4MF96NzF2X21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgwX3o3MXZfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9CSU5EX01VVEUoIkZyb250IFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDB4MGQsIDB4MCwgSERBX09VVFBVVCksCkBAIC0yNzE4LDEyICsyOTk1LDEyIEBACiAgKiBQaW4gYXNzaWdubWVudDogSFAgPSAweDE0LCBGcm9udCA9IDB4MTUsIE1pYyA9IDB4MTgKICAqLwogCi1zdGF0aWMgaGRhX25pZF90IGFsYzg4MF9mMTczNF9kYWNfbmlkc1sxXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3QgYWxjODgwX2YxNzM0X2RhY19uaWRzWzFdID0gewogCTB4MDMKIH07CiAjZGVmaW5lIEFMQzg4MF9GMTczNF9IUF9EQUMJMHgwMgogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgwX2YxNzM0X21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgwX2YxNzM0X21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBkLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMjczNSw3ICszMDEyLDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjODgwX2YxNzM0X2NhcHR1cmVfc291cmNlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzg4MF9mMTczNF9jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gMiwKIAkuaXRlbXMgPSB7CiAJCXsgIk1pYyIsIDB4MSB9LApAQCAtMjc1NSw3ICszMDMyLDcgQEAKICNkZWZpbmUgYWxjODgwX2FzdXNfZGFjX25pZHMJYWxjODgwX3c4MTBfZGFjX25pZHMJLyogaWRlbnRpY2FsIHdpdGggdzgxMCAqLwogI2RlZmluZSBhbGM4ODBfYXN1c19tb2RlcwlhbGM4ODBfdGhyZWVzdGFja19tb2RlcwkvKiAyLzYgY2hhbm5lbCBtb2RlICovCiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODBfYXN1c19taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4MF9hc3VzX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQklORF9NVVRFKCJGcm9udCBQbGF5YmFjayBTd2l0Y2giLCAweDBjLCAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIlN1cnJvdW5kIFBsYXliYWNrIFZvbHVtZSIsIDB4MGQsIDB4MCwgSERBX09VVFBVVCksCkBAIC0yNzg5LDE0ICszMDY2LDE0IEBACiAgKi8KIAogLyogYWRkaXRpb25hbCBtaXhlcnMgdG8gYWxjODgwX2FzdXNfbWl4ZXIgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODBfYXN1c193MXZfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODBfYXN1c193MXZfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJMaW5lMiBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lMiBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAzLCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKIC8qIFRDTCBTNzAwICovCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgwX3RjbF9zNzAwX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgwX3RjbF9zNzAwX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgxYiwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MTQsIDB4MCwgSERBX09VVFBVVCksCkBAIC0yODEwLDcgKzMwODcsNyBAQAogfTsKIAogLyogVW5pd2lsbCAqLwotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4MF91bml3aWxsX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgwX3VuaXdpbGxfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQklORF9NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGQsIDB4MCwgSERBX09VVFBVVCksCkBAIC0yODM3LDcgKzMxMTQsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODBfZnVqaXRzdV9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4MF9mdWppdHN1X21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBkLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMjg1MSw3ICszMTI4LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgwX3VuaXdpbGxfcDUzX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgwX3VuaXdpbGxfcDUzX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBkLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMjg3OCw3ICszMTU1LDYgQEAKIAkiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLAogCSJNb25vIFBsYXliYWNrIFZvbHVtZSIsCiAJIkxpbmUtT3V0IFBsYXliYWNrIFZvbHVtZSIsCi0JIlBDTSBQbGF5YmFjayBWb2x1bWUiLAogCU5VTEwsCiB9OwogCkBAIC0yODkzLDcgKzMxNjksNiBAQAogCSJNb25vIFBsYXliYWNrIFN3aXRjaCIsCiAJIklFQzk1OCBQbGF5YmFjayBTd2l0Y2giLAogCSJMaW5lLU91dCBQbGF5YmFjayBTd2l0Y2giLAotCSJQQ00gUGxheWJhY2sgU3dpdGNoIiwKIAlOVUxMLAogfTsKIApAQCAtMjkxNCw3ICszMTg5LDcgQEAKIAogI2lmZGVmIENPTkZJR19TTkRfSERBX0lOUFVUX0JFRVAKIC8qIGFkZGl0aW9uYWwgYmVlcCBtaXhlcnM7IHRoZSBhY3R1YWwgcGFyYW1ldGVycyBhcmUgb3ZlcndyaXR0ZW4gYXQgYnVpbGQgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGNfYmVlcF9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsY19iZWVwX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAwLCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFX0JFRVAoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMCwgMCwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCkBAIC0yOTI1LDcgKzMyMDAsNyBAQAogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGwgPSBOVUxMOwotCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprbmV3OworCWNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprbmV3OwogCWludCBpLCBqLCBlcnI7CiAJdW5zaWduZWQgaW50IHU7CiAJaGRhX25pZF90IG5pZDsKQEAgLTI5NjIsNyArMzIzNyw3IEBACiAjaWZkZWYgQ09ORklHX1NORF9IREFfSU5QVVRfQkVFUAogCS8qIGNyZWF0ZSBiZWVwIGNvbnRyb2xzIGlmIG5lZWRlZCAqLwogCWlmIChzcGVjLT5iZWVwX2FtcCkgewotCQlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa25ldzsKKwkJY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXc7CiAJCWZvciAoa25ldyA9IGFsY19iZWVwX21peGVyOyBrbmV3LT5uYW1lOyBrbmV3KyspIHsKIAkJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGw7CiAJCQlrY3RsID0gc25kX2N0bF9uZXcxKGtuZXcsIGNvZGVjKTsKQEAgLTMwMDEsNyArMzI3Niw3IEBACiAJCWlmICgha2N0bCkKIAkJCWtjdGwgPSBzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCAiSW5wdXQgU291cmNlIik7CiAJCWZvciAoaSA9IDA7IGtjdGwgJiYgaSA8IGtjdGwtPmNvdW50OyBpKyspIHsKLQkJCWhkYV9uaWRfdCAqbmlkcyA9IHNwZWMtPmNhcHNyY19uaWRzOworCQkJY29uc3QgaGRhX25pZF90ICpuaWRzID0gc3BlYy0+Y2Fwc3JjX25pZHM7CiAJCQlpZiAoIW5pZHMpCiAJCQkJbmlkcyA9IHNwZWMtPmFkY19uaWRzOwogCQkJZXJyID0gc25kX2hkYV9hZGRfbmlkKGNvZGVjLCBrY3RsLCBpLCBuaWRzW2ldKTsKQEAgLTMwNzksNyArMzM1NCw3IEBACiAvKgogICogZ2VuZXJpYyBpbml0aWFsaXphdGlvbiBvZiBBREMsIGlucHV0IG1peGVycyBhbmQgb3V0cHV0IG1peGVycwogICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4MF92b2x1bWVfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODBfdm9sdW1lX2luaXRfdmVyYnNbXSA9IHsKIAkvKgogCSAqIFVubXV0ZSBBREMwLTIgYW5kIHNldCB0aGUgZGVmYXVsdCBpbnB1dCB0byBtaWMtaW4KIAkgKi8KQEAgLTMxMzAsNyArMzQwNSw3IEBACiAgKiAzLXN0YWNrIHBpbiBjb25maWd1cmF0aW9uOgogICogZnJvbnQgPSAweDE0LCBtaWMvY2xmZSA9IDB4MTgsIEhQID0gMHgxOSwgbGluZS9zdXJyID0gMHgxYSwgZi1taWMgPSAweDFiCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgwX3Bpbl8zc3RhY2tfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODBfcGluXzNzdGFja19pbml0X3ZlcmJzW10gPSB7CiAJLyoKIAkgKiBwcmVzZXQgY29ubmVjdGlvbiBsaXN0cyBvZiBpbnB1dCBwaW5zCiAJICogMCA9IGZyb250LCAxID0gcmVhcl9zdXJyLCAyID0gQ0xGRSwgMyA9IHN1cnJvdW5kCkBAIC0zMTY4LDcgKzM0NDMsNyBAQAogICogZnJvbnQgPSAweDE0LCBzdXJyb3VuZCA9IDB4MTcsIGNsZmUgPSAweDE2LCBtaWMgPSAweDE4LCBIUCA9IDB4MTksCiAgKiBsaW5lLWluL3NpZGUgPSAweDFhLCBmLW1pYyA9IDB4MWIKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODBfcGluXzVzdGFja19pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4MF9waW5fNXN0YWNrX2luaXRfdmVyYnNbXSA9IHsKIAkvKgogCSAqIHByZXNldCBjb25uZWN0aW9uIGxpc3RzIG9mIGlucHV0IHBpbnMKIAkgKiAwID0gZnJvbnQsIDEgPSByZWFyX3N1cnIsIDIgPSBDTEZFLCAzID0gc3Vycm91bmQKQEAgLTMyMTIsNyArMzQ4Nyw3IEBACiAgKiBXODEwIHBpbiBjb25maWd1cmF0aW9uOgogICogZnJvbnQgPSAweDE0LCBzdXJyb3VuZCA9IDB4MTUsIGNsZmUgPSAweDE2LCBIUCA9IDB4MWIKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODBfcGluX3c4MTBfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODBfcGluX3c4MTBfaW5pdF92ZXJic1tdID0gewogCS8qIGhwaG9uZS9zcGVha2VyIGlucHV0IHNlbGVjdG9yOiBmcm9udCBEQUMgKi8KIAl7MHgxMywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MH0sCiAKQEAgLTMyMzMsNyArMzUwOCw3IEBACiAgKiBaNzFWIHBpbiBjb25maWd1cmF0aW9uOgogICogU3BlYWtlci1vdXQgPSAweDE0LCBIUCA9IDB4MTUsIE1pYyA9IDB4MTgsIExpbmUtaW4gPSAweDFhLCBNaWMyID0gMHgxYiAoPykKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODBfcGluX3o3MXZfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODBfcGluX3o3MXZfaW5pdF92ZXJic1tdID0gewogCXsweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAogCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCiAJezB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKQEAgLTMyNTIsNyArMzUyNyw3IEBACiAgKiBmcm9udCA9IDB4MTQsIHN1cnIgPSAweDE1LCBjbGZlID0gMHgxNiwgc2lkZSA9IDB4MTcsIG1pYyA9IDB4MTgsCiAgKiBmLW1pYyA9IDB4MTksIGxpbmUgPSAweDFhLCBIUCA9IDB4MWIKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODBfcGluXzZzdGFja19pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4MF9waW5fNnN0YWNrX2luaXRfdmVyYnNbXSA9IHsKIAl7MHgxMywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LCAvKiBIUCAqLwogCiAJezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCkBAIC0zMjgyLDcgKzM1NTcsNyBAQAogICogSFAgPSAweDE0LCBJbnRlcm5hbFNwZWFrZXIgPSAweDE1LCBtaWMgPSAweDE4LCBpbnRlcm5hbCBtaWMgPSAweDE5LAogICogbGluZSA9IDB4MWEKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODBfdW5pd2lsbF9pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4MF91bml3aWxsX2luaXRfdmVyYnNbXSA9IHsKIAl7MHgxMywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LCAvKiBIUCAqLwogCiAJezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKQEAgLTMzMjAsNyArMzU5NSw3IEBACiAqIFVuaXdpbGwgUDUzCiAqIEhQID0gMHgxNCwgSW50ZXJuYWxTcGVha2VyID0gMHgxNSwgbWljID0gMHgxOSwKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODBfdW5pd2lsbF9wNTNfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODBfdW5pd2lsbF9wNTNfaW5pdF92ZXJic1tdID0gewogCXsweDEzLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sIC8qIEhQICovCiAKIAl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LApAQCAtMzM0OSw3ICszNjI0LDcgQEAKIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgwX2JlZXBfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODBfYmVlcF9pbml0X3ZlcmJzW10gPSB7CiAJeyAweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDUpIH0sCiAJeyB9CiB9OwpAQCAtMzM3MiwxMSArMzY0NywxMyBAQAogCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IDB4MTQ7CiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDE1OwogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxNjsKKwlzcGVjLT5hdXRvbXV0ZSA9IDE7CisJc3BlYy0+YXV0b211dGVfbW9kZSA9IEFMQ19BVVRPTVVURV9BTVA7CiB9CiAKIHN0YXRpYyB2b2lkIGFsYzg4MF91bml3aWxsX2luaXRfaG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQlhbGNfYXV0b211dGVfYW1wKGNvZGVjKTsKKwlhbGNfaHBfYXV0b211dGUoY29kZWMpOwogCWFsYzg4eF9zaW1wbGVfbWljX2F1dG9tdXRlKGNvZGVjKTsKIH0KIApAQCAtMzM5MSw3ICszNjY4LDcgQEAKIAkJYWxjODh4X3NpbXBsZV9taWNfYXV0b211dGUoY29kZWMpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlhbGNfYXV0b211dGVfYW1wX3Vuc29sX2V2ZW50KGNvZGVjLCByZXMpOworCQlhbGNfc2t1X3Vuc29sX2V2ZW50KGNvZGVjLCByZXMpOwogCQlicmVhazsKIAl9CiB9CkBAIC0zNDAyLDYgKzM2NzksOCBAQAogCiAJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxNDsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTU7CisJc3BlYy0+YXV0b211dGUgPSAxOworCXNwZWMtPmF1dG9tdXRlX21vZGUgPSBBTENfQVVUT01VVEVfQU1QOwogfQogCiBzdGF0aWMgdm9pZCBhbGM4ODBfdW5pd2lsbF9wNTNfZGN2b2xfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCkBAIC0zNDI2LDE0ICszNzA1LDE0IEBACiAJaWYgKChyZXMgPj4gMjgpID09IEFMQzg4MF9EQ1ZPTF9FVkVOVCkKIAkJYWxjODgwX3VuaXdpbGxfcDUzX2Rjdm9sX2F1dG9tdXRlKGNvZGVjKTsKIAllbHNlCi0JCWFsY19hdXRvbXV0ZV9hbXBfdW5zb2xfZXZlbnQoY29kZWMsIHJlcyk7CisJCWFsY19za3VfdW5zb2xfZXZlbnQoY29kZWMsIHJlcyk7CiB9CiAKIC8qCiAgKiBGMTczNCBwaW4gY29uZmlndXJhdGlvbjoKICAqIEhQID0gMHgxNCwgc3BlYWtlci1vdXQgPSAweDE1LCBtaWMgPSAweDE4CiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgwX3Bpbl9mMTczNF9pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4MF9waW5fZjE3MzRfaW5pdF92ZXJic1tdID0gewogCXsweDA3LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCiAJezB4MTAsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAyfSwKIAl7MHgxMSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LApAQCAtMzQ2NSw3ICszNzQ0LDcgQEAKICAqIEFTVVMgcGluIGNvbmZpZ3VyYXRpb246CiAgKiBIUC9mcm9udCA9IDB4MTQsIHN1cnIgPSAweDE1LCBjbGZlID0gMHgxNiwgbWljID0gMHgxOCwgbGluZSA9IDB4MWEKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODBfcGluX2FzdXNfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODBfcGluX2FzdXNfaW5pdF92ZXJic1tdID0gewogCXsweDEwLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMn0sCiAJezB4MTEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKIAl7MHgxMiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDF9LApAQCAtMzQ5OSw3ICszNzc4LDcgQEAKICNkZWZpbmUgYWxjODgwX2dwaW8zX2luaXRfdmVyYnMJYWxjX2dwaW8zX2luaXRfdmVyYnMKIAogLyogQ2xldm8gbTUyMGcgaW5pdCAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODBfcGluX2NsZXZvX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgwX3Bpbl9jbGV2b19pbml0X3ZlcmJzW10gPSB7CiAJLyogaGVhZHBob25lIG91dHB1dCAqLwogCXsweDExLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCiAJLyogbGluZS1vdXQgKi8KQEAgLTM1MjcsNyArMzgwNiw3IEBACiAJeyB9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4MF9waW5fdGNsX1M3MDBfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODBfcGluX3RjbF9TNzAwX2luaXRfdmVyYnNbXSA9IHsKIAkvKiBjaGFuZ2UgdG8gRUFQRCBtb2RlICovCiAJezB4MjAsIEFDX1ZFUkJfU0VUX0NPRUZfSU5ERVgsIDB4MDd9LAogCXsweDIwLCBBQ19WRVJCX1NFVF9QUk9DX0NPRUYsICAweDMwNjB9LApAQCAtMzU2NSwxMiArMzg0NCwxMiBAQAogICovCiAKIC8qIFRvIG1ha2UgNS4xIG91dHB1dCB3b3JraW5nIChncmVlbj1Gcm9udCwgYmx1ZT1TdXJyLCByZWQ9Q0xGRSkgKi8KLXN0YXRpYyBoZGFfbmlkX3QgYWxjODgwX2xnX2RhY19uaWRzWzNdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBhbGM4ODBfbGdfZGFjX25pZHNbM10gPSB7CiAJMHgwNSwgMHgwMiwgMHgwMwogfTsKIAogLyogc2VlbXMgYW5hbG9nIENEIGlzIG5vdCB3b3JraW5nICovCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjODgwX2xnX2NhcHR1cmVfc291cmNlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzg4MF9sZ19jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gMywKIAkuaXRlbXMgPSB7CiAJCXsgIk1pYyIsIDB4MSB9LApAQCAtMzU4MCwzNCArMzg1OSwzNCBAQAogfTsKIAogLyogMiw0LDYgY2hhbm5lbCBtb2RlcyAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODBfbGdfY2gyX2luaXRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgwX2xnX2NoMl9pbml0W10gPSB7CiAJLyogc2V0IGxpbmUtaW4gYW5kIG1pYy1pbiB0byBpbnB1dCAqLwogCXsgMHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU4gfSwKIAl7IDB4MTksIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MCB9LAogCXsgfQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODBfbGdfY2g0X2luaXRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgwX2xnX2NoNF9pbml0W10gPSB7CiAJLyogc2V0IGxpbmUtaW4gdG8gb3V0IGFuZCBtaWMtaW4gdG8gaW5wdXQgKi8KIAl7IDB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQIH0sCiAJeyAweDE5LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODAgfSwKIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgwX2xnX2NoNl9pbml0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4MF9sZ19jaDZfaW5pdFtdID0gewogCS8qIHNldCBsaW5lLWluIGFuZCBtaWMtaW4gdG8gb3V0cHV0ICovCiAJeyAweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUCB9LAogCXsgMHgxOSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFAgfSwKIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhbGM4ODBfbGdfY2hfbW9kZXNbM10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjODgwX2xnX2NoX21vZGVzWzNdID0gewogCXsgMiwgYWxjODgwX2xnX2NoMl9pbml0IH0sCiAJeyA0LCBhbGM4ODBfbGdfY2g0X2luaXQgfSwKIAl7IDYsIGFsYzg4MF9sZ19jaDZfaW5pdCB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4MF9sZ19taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4MF9sZ19taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGYsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwZiwgMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJTdXJyb3VuZCBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMzYzMiw3ICszOTExLDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4MF9sZ19pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4MF9sZ19pbml0X3ZlcmJzW10gPSB7CiAJLyogc2V0IGNhcHR1cmUgc291cmNlIHRvIG1pYy1pbiAqLwogCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKIAl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCkBAIC0zNjcwLDYgKzM5NDksOCBAQAogCiAJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxYjsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTc7CisJc3BlYy0+YXV0b211dGUgPSAxOworCXNwZWMtPmF1dG9tdXRlX21vZGUgPSBBTENfQVVUT01VVEVfQU1QOwogfQogCiAvKgpAQCAtMzY4NCw3ICszOTY1LDcgQEAKICAqICAgU1BESUYtT3V0OiAweDFlCiAgKi8KIAotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzg4MF9sZ19sd19jYXB0dXJlX3NvdXJjZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGM4ODBfbGdfbHdfY2FwdHVyZV9zb3VyY2UgPSB7CiAJLm51bV9pdGVtcyA9IDMsCiAJLml0ZW1zID0gewogCQl7ICJNaWMiLCAweDAgfSwKQEAgLTM2OTUsNyArMzk3Niw3IEBACiAKICNkZWZpbmUgYWxjODgwX2xnX2x3X21vZGVzIGFsYzg4MF90aHJlZXN0YWNrX21vZGVzCiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODBfbGdfbHdfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODBfbGdfbHdfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9CSU5EX01VVEUoIkZyb250IFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiU3Vycm91bmQgUGxheWJhY2sgVm9sdW1lIiwgMHgwZiwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTM3MjAsNyArNDAwMSw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODBfbGdfbHdfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODBfbGdfbHdfaW5pdF92ZXJic1tdID0gewogCXsweDEzLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sIC8qIEhQICovCiAJezB4MTAsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAyfSwgLyogbWljL2NsZmUgKi8KIAl7MHgxMiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDN9LCAvKiBsaW5lL3N1cnJvdW5kICovCkBAIC0zNzU0LDkgKzQwMzUsMTEgQEAKIAogCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IDB4MWI7CiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDE0OworCXNwZWMtPmF1dG9tdXRlID0gMTsKKwlzcGVjLT5hdXRvbXV0ZV9tb2RlID0gQUxDX0FVVE9NVVRFX0FNUDsKIH0KIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4MF9tZWRpb25fcmltX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgwX21lZGlvbl9yaW1fbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQklORF9NVVRFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLApAQCAtMzc2Niw3ICs0MDQ5LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjODgwX21lZGlvbl9yaW1fY2FwdHVyZV9zb3VyY2UgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjODgwX21lZGlvbl9yaW1fY2FwdHVyZV9zb3VyY2UgPSB7CiAJLm51bV9pdGVtcyA9IDIsCiAJLml0ZW1zID0gewogCQl7ICJNaWMiLCAweDAgfSwKQEAgLTM3NzQsNyArNDA1Nyw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgwX21lZGlvbl9yaW1faW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODBfbWVkaW9uX3JpbV9pbml0X3ZlcmJzW10gPSB7CiAJezB4MTMsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwgLyogSFAgKi8KIAogCXsweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCkBAIC0zODAxLDcgKzQwODQsNyBAQAogc3RhdGljIHZvaWQgYWxjODgwX21lZGlvbl9yaW1fYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JYWxjX2F1dG9tdXRlX2FtcChjb2RlYyk7CisJYWxjX2hwX2F1dG9tdXRlKGNvZGVjKTsKIAkvKiB0b2dnbGUgRUFQRCAqLwogCWlmIChzcGVjLT5qYWNrX3ByZXNlbnQpCiAJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MDEsIDAsIEFDX1ZFUkJfU0VUX0dQSU9fREFUQSwgMCk7CkBAIC0zODI1LDEwICs0MTA4LDEyIEBACiAKIAlzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSAweDE0OwogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxYjsKKwlzcGVjLT5hdXRvbXV0ZSA9IDE7CisJc3BlYy0+YXV0b211dGVfbW9kZSA9IEFMQ19BVVRPTVVURV9BTVA7CiB9CiAKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCi1zdGF0aWMgc3RydWN0IGhkYV9hbXBfbGlzdCBhbGM4ODBfbG9vcGJhY2tzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9hbXBfbGlzdCBhbGM4ODBfbG9vcGJhY2tzW10gPSB7CiAJeyAweDBiLCBIREFfSU5QVVQsIDAgfSwKIAl7IDB4MGIsIEhEQV9JTlBVVCwgMSB9LAogCXsgMHgwYiwgSERBX0lOUFVULCAyIH0sCkBAIC0zODM3LDcgKzQxMjIsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2FtcF9saXN0IGFsYzg4MF9sZ19sb29wYmFja3NbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2FtcF9saXN0IGFsYzg4MF9sZ19sb29wYmFja3NbXSA9IHsKIAl7IDB4MGIsIEhEQV9JTlBVVCwgMSB9LAogCXsgMHgwYiwgSERBX0lOUFVULCA2IH0sCiAJeyAweDBiLCBIREFfSU5QVVQsIDcgfSwKQEAgLTQwMDksNyArNDI5NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gZHVhbG1pY19wY21fYW5hbG9nX2NhcHR1cmUgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9wY21fc3RyZWFtIGR1YWxtaWNfcGNtX2FuYWxvZ19jYXB0dXJlID0gewogCS5zdWJzdHJlYW1zID0gMSwKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gMiwKQEAgLTQwMjIsNyArNDMwNyw3IEBACiAKIC8qCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gYWxjODgwX3BjbV9hbmFsb2dfcGxheWJhY2sgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9wY21fc3RyZWFtIGFsYzg4MF9wY21fYW5hbG9nX3BsYXliYWNrID0gewogCS5zdWJzdHJlYW1zID0gMSwKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gOCwKQEAgLTQwMzQsMjEgKzQzMTksMjEgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBhbGM4ODBfcGNtX2FuYWxvZ19jYXB0dXJlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBhbGM4ODBfcGNtX2FuYWxvZ19jYXB0dXJlID0gewogCS5zdWJzdHJlYW1zID0gMSwKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gMiwKIAkvKiBOSUQgaXMgc2V0IGluIGFsY19idWlsZF9wY21zICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIGFsYzg4MF9wY21fYW5hbG9nX2FsdF9wbGF5YmFjayA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gYWxjODgwX3BjbV9hbmFsb2dfYWx0X3BsYXliYWNrID0gewogCS5zdWJzdHJlYW1zID0gMSwKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gMiwKIAkvKiBOSUQgaXMgc2V0IGluIGFsY19idWlsZF9wY21zICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIGFsYzg4MF9wY21fYW5hbG9nX2FsdF9jYXB0dXJlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBhbGM4ODBfcGNtX2FuYWxvZ19hbHRfY2FwdHVyZSA9IHsKIAkuc3Vic3RyZWFtcyA9IDIsIC8qIGNhbiBiZSBvdmVycmlkZGVuICovCiAJLmNoYW5uZWxzX21pbiA9IDIsCiAJLmNoYW5uZWxzX21heCA9IDIsCkBAIC00MDU5LDcgKzQzNDQsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIGFsYzg4MF9wY21fZGlnaXRhbF9wbGF5YmFjayA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gYWxjODgwX3BjbV9kaWdpdGFsX3BsYXliYWNrID0gewogCS5zdWJzdHJlYW1zID0gMSwKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gMiwKQEAgLTQwNzIsNyArNDM1Nyw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gYWxjODgwX3BjbV9kaWdpdGFsX2NhcHR1cmUgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9wY21fc3RyZWFtIGFsYzg4MF9wY21fZGlnaXRhbF9jYXB0dXJlID0gewogCS5zdWJzdHJlYW1zID0gMSwKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gMiwKQEAgLTQwODAsNyArNDM2NSw3IEBACiB9OwogCiAvKiBVc2VkIGJ5IGFsY19idWlsZF9wY21zIHRvIGZsYWcgdGhhdCBhIFBDTSBoYXMgbm8gcGxheWJhY2sgc3RyZWFtICovCi1zdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIGFsY19wY21fbnVsbF9zdHJlYW0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9wY21fc3RyZWFtIGFsY19wY21fbnVsbF9zdHJlYW0gPSB7CiAJLnN1YnN0cmVhbXMgPSAwLAogCS5jaGFubmVsc19taW4gPSAwLAogCS5jaGFubmVsc19tYXggPSAwLApAQCAtNDE3NCw3ICs0NDU5LDcgQEAKIAkJCQlhbGNfcGNtX251bGxfc3RyZWFtOwogCQkJaW5mby0+c3RyZWFtW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLm5pZCA9IDA7CiAJCX0KLQkJaWYgKHNwZWMtPm51bV9hZGNfbmlkcyA+IDEpIHsKKwkJaWYgKHNwZWMtPm51bV9hZGNfbmlkcyA+IDEgJiYgc3BlYy0+c3RyZWFtX2FuYWxvZ19hbHRfY2FwdHVyZSkgewogCQkJaW5mby0+c3RyZWFtW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0gPQogCQkJCSpzcGVjLT5zdHJlYW1fYW5hbG9nX2FsdF9jYXB0dXJlOwogCQkJaW5mby0+c3RyZWFtW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0ubmlkID0KQEAgLTQxOTMsNiArNDQ3OCwxMCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgYWxjX3NodXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKworCWlmIChzcGVjICYmIHNwZWMtPnNodXR1cCkKKwkJc3BlYy0+c2h1dHVwKGNvZGVjKTsKIAlzbmRfaGRhX3NodXR1cF9waW5zKGNvZGVjKTsKIH0KIApAQCAtNDIyNiwyOCArNDUxNSw3IEBACiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQogc3RhdGljIHZvaWQgYWxjX3Bvd2VyX2VhcGQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0JLyogV2UgY3VycmVudGx5IG9ubHkgaGFuZGxlIGZyb250LCBIUCAqLwotCXN3aXRjaCAoY29kZWMtPnZlbmRvcl9pZCkgewotCWNhc2UgMHgxMGVjMDI2MDoKLQkJc2V0X2VhcGQoY29kZWMsIDB4MGYsIDApOwotCQlzZXRfZWFwZChjb2RlYywgMHgxMCwgMCk7Ci0JCWJyZWFrOwotCWNhc2UgMHgxMGVjMDI2MjoKLQljYXNlIDB4MTBlYzAyNjc6Ci0JY2FzZSAweDEwZWMwMjY4OgotCWNhc2UgMHgxMGVjMDI2OToKLQljYXNlIDB4MTBlYzAyNzA6Ci0JY2FzZSAweDEwZWMwMjcyOgotCWNhc2UgMHgxMGVjMDY2MDoKLQljYXNlIDB4MTBlYzA2NjI6Ci0JY2FzZSAweDEwZWMwNjYzOgotCWNhc2UgMHgxMGVjMDY2NToKLQljYXNlIDB4MTBlYzA4NjI6Ci0JY2FzZSAweDEwZWMwODg5OgotCQlzZXRfZWFwZChjb2RlYywgMHgxNCwgMCk7Ci0JCXNldF9lYXBkKGNvZGVjLCAweDE1LCAwKTsKLQkJYnJlYWs7Ci0JfQorCWFsY19hdXRvX3NldHVwX2VhcGQoY29kZWMsIGZhbHNlKTsKIH0KIAogc3RhdGljIGludCBhbGNfc3VzcGVuZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgcG1fbWVzc2FnZV90IHN0YXRlKQpAQCAtNDI2Myw2ICs0NTMxLDcgQEAKICNpZmRlZiBTTkRfSERBX05FRURTX1JFU1VNRQogc3RhdGljIGludCBhbGNfcmVzdW1lKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogeworCW1zbGVlcCgxNTApOyAvKiB0byBhdm9pZCBwb3Agbm9pc2UgKi8KIAljb2RlYy0+cGF0Y2hfb3BzLmluaXQoY29kZWMpOwogCXNuZF9oZGFfY29kZWNfcmVzdW1lX2FtcChjb2RlYyk7CiAJc25kX2hkYV9jb2RlY19yZXN1bWVfY2FjaGUoY29kZWMpOwpAQCAtNDI3Myw3ICs0NTQyLDcgQEAKIAogLyoKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfY29kZWNfb3BzIGFsY19wYXRjaF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9jb2RlY19vcHMgYWxjX3BhdGNoX29wcyA9IHsKIAkuYnVpbGRfY29udHJvbHMgPSBhbGNfYnVpbGRfY29udHJvbHMsCiAJLmJ1aWxkX3BjbXMgPSBhbGNfYnVpbGRfcGNtcywKIAkuaW5pdCA9IGFsY19pbml0LApAQCAtNDMwOCwxMSArNDU3NywxMSBAQAogICogZW51bSBjb250cm9scy4KICAqLwogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKLXN0YXRpYyBoZGFfbmlkX3QgYWxjODgwX3Rlc3RfZGFjX25pZHNbNF0gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IGFsYzg4MF90ZXN0X2RhY19uaWRzWzRdID0gewogCTB4MDIsIDB4MDMsIDB4MDQsIDB4MDUKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGM4ODBfdGVzdF9jYXB0dXJlX3NvdXJjZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGM4ODBfdGVzdF9jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gNywKIAkuaXRlbXMgPSB7CiAJCXsgIkluLTEiLCAweDAgfSwKQEAgLTQzMjUsNyArNDU5NCw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhbGM4ODBfdGVzdF9tb2Rlc1s0XSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhbGM4ODBfdGVzdF9tb2Rlc1s0XSA9IHsKIAl7IDIsIE5VTEwgfSwKIAl7IDQsIE5VTEwgfSwKIAl7IDYsIE5VTEwgfSwKQEAgLTQzMzUsNyArNDYwNCw3IEBACiBzdGF0aWMgaW50IGFsY190ZXN0X3Bpbl9jdGxfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKLQlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsKKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRleHRzW10gPSB7CiAJCSJOL0EiLCAiTGluZSBPdXQiLCAiSFAgT3V0IiwKIAkJIkluIEhpLVoiLCAiSW4gNTAlIiwgIkluIEdyZCIsICJJbiA4MCUiLCAiSW4gMTAwJSIKIAl9OwpAQCAtNDM4MCw3ICs0NjQ5LDcgQEAKIHsKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAloZGFfbmlkX3QgbmlkID0gKGhkYV9uaWRfdClrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKLQlzdGF0aWMgdW5zaWduZWQgaW50IGN0bHNbXSA9IHsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGN0bHNbXSA9IHsKIAkJMCwgQUNfUElOQ1RMX09VVF9FTiwgQUNfUElOQ1RMX09VVF9FTiB8IEFDX1BJTkNUTF9IUF9FTiwKIAkJQUNfUElOQ1RMX0lOX0VOIHwgQUNfUElOQ1RMX1ZSRUZfSElaLAogCQlBQ19QSU5DVExfSU5fRU4gfCBBQ19QSU5DVExfVlJFRl81MCwKQEAgLTQ0MTAsNyArNDY3OSw3IEBACiBzdGF0aWMgaW50IGFsY190ZXN0X3Bpbl9zcmNfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKLQlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsKKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRleHRzW10gPSB7CiAJCSJGcm9udCIsICJTdXJyb3VuZCIsICJDTEZFIiwgIlNpZGUiCiAJfTsKIAl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKQEAgLTQ0NzEsNyArNDc0MCw3IEBACiAJCQkucHJpdmF0ZV92YWx1ZSA9IG5pZAkgICAgICAgXAogCQkJfQogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgwX3Rlc3RfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODBfdGVzdF9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiU3Vycm91bmQgUGxheWJhY2sgVm9sdW1lIiwgMHgwZCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDTEZFIFBsYXliYWNrIFZvbHVtZSIsIDB4MGUsIDB4MCwgSERBX09VVFBVVCksCkBAIC00NTEyLDcgKzQ3ODEsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgwX3Rlc3RfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODBfdGVzdF9pbml0X3ZlcmJzW10gPSB7CiAJLyogVW5tdXRlIGlucHV0cyBvZiAweDBjIC0gMHgwZiAqLwogCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCkBAIC00NTk2LDcgKzQ4NjUsNyBAQAogCVtBTEM4ODBfQVVUT10JCT0gImF1dG8iLAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzg4MF9jZmdfdGJsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjODgwX2NmZ190YmxbXSA9IHsKIAlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHgwZjY5LCAiQ29ldXMgRzYxMFAiLCBBTEM4ODBfVzgxMCksCiAJU05EX1BDSV9RVUlSSygweDEwMTksIDB4YTg4MCwgIkVDUyIsIEFMQzg4MF81U1RfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHhhODg0LCAiQWNlciBBUEZWIiwgQUxDODgwXzZTVCksCkBAIC00Njc2LDcgKzQ5NDUsNyBAQAogLyoKICAqIEFMQzg4MCBjb2RlYyBwcmVzZXRzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgYWxjX2NvbmZpZ19wcmVzZXQgYWxjODgwX3ByZXNldHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWxjX2NvbmZpZ19wcmVzZXQgYWxjODgwX3ByZXNldHNbXSA9IHsKIAlbQUxDODgwXzNTVF0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4MF90aHJlZV9zdGFja19taXhlciB9LAogCQkuaW5pdF92ZXJicyA9IHsgYWxjODgwX3ZvbHVtZV9pbml0X3ZlcmJzLApAQCAtNDc5NCw3ICs1MDYzLDcgQEAKIAkJLmlucHV0X211eCA9ICZhbGM4ODBfZjE3MzRfY2FwdHVyZV9zb3VyY2UsCiAJCS51bnNvbF9ldmVudCA9IGFsYzg4MF91bml3aWxsX3A1M191bnNvbF9ldmVudCwKIAkJLnNldHVwID0gYWxjODgwX3VuaXdpbGxfcDUzX3NldHVwLAotCQkuaW5pdF9ob29rID0gYWxjX2F1dG9tdXRlX2FtcCwKKwkJLmluaXRfaG9vayA9IGFsY19ocF9hdXRvbXV0ZSwKIAl9LAogCVtBTEM4ODBfQVNVU10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4MF9hc3VzX21peGVyIH0sCkBAIC00ODg1LDcgKzUxNTQsNyBAQAogCQkuaW5wdXRfbXV4ID0gJmFsYzg4MF9jYXB0dXJlX3NvdXJjZSwKIAkJLnVuc29sX2V2ZW50ID0gYWxjODgwX3VuaXdpbGxfcDUzX3Vuc29sX2V2ZW50LAogCQkuc2V0dXAgPSBhbGM4ODBfdW5pd2lsbF9wNTNfc2V0dXAsCi0JCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAorCQkuaW5pdF9ob29rID0gYWxjX2hwX2F1dG9tdXRlLAogCX0sCiAJW0FMQzg4MF9GVUpJVFNVXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODgwX2Z1aml0c3VfbWl4ZXIgfSwKQEAgLTQ5MDAsNyArNTE2OSw3IEBACiAJCS5pbnB1dF9tdXggPSAmYWxjODgwX2NhcHR1cmVfc291cmNlLAogCQkudW5zb2xfZXZlbnQgPSBhbGM4ODBfdW5pd2lsbF9wNTNfdW5zb2xfZXZlbnQsCiAJCS5zZXR1cCA9IGFsYzg4MF91bml3aWxsX3A1M19zZXR1cCwKLQkJLmluaXRfaG9vayA9IGFsY19hdXRvbXV0ZV9hbXAsCisJCS5pbml0X2hvb2sgPSBhbGNfaHBfYXV0b211dGUsCiAJfSwKIAlbQUxDODgwX0NMRVZPXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODgwX3RocmVlX3N0YWNrX21peGVyIH0sCkBAIC00OTI1LDkgKzUxOTQsOSBAQAogCQkuY2hhbm5lbF9tb2RlID0gYWxjODgwX2xnX2NoX21vZGVzLAogCQkubmVlZF9kYWNfZml4ID0gMSwKIAkJLmlucHV0X211eCA9ICZhbGM4ODBfbGdfY2FwdHVyZV9zb3VyY2UsCi0JCS51bnNvbF9ldmVudCA9IGFsY19hdXRvbXV0ZV9hbXBfdW5zb2xfZXZlbnQsCisJCS51bnNvbF9ldmVudCA9IGFsY19za3VfdW5zb2xfZXZlbnQsCiAJCS5zZXR1cCA9IGFsYzg4MF9sZ19zZXR1cCwKLQkJLmluaXRfaG9vayA9IGFsY19hdXRvbXV0ZV9hbXAsCisJCS5pbml0X2hvb2sgPSBhbGNfaHBfYXV0b211dGUsCiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQogCQkubG9vcGJhY2tzID0gYWxjODgwX2xnX2xvb3BiYWNrcywKICNlbmRpZgpAQCAtNDk0Miw5ICs1MjExLDkgQEAKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzg4MF9sZ19sd19tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGM4ODBfbGdfbHdfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjODgwX2xnX2x3X2NhcHR1cmVfc291cmNlLAotCQkudW5zb2xfZXZlbnQgPSBhbGNfYXV0b211dGVfYW1wX3Vuc29sX2V2ZW50LAorCQkudW5zb2xfZXZlbnQgPSBhbGNfc2t1X3Vuc29sX2V2ZW50LAogCQkuc2V0dXAgPSBhbGM4ODBfbGdfbHdfc2V0dXAsCi0JCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAorCQkuaW5pdF9ob29rID0gYWxjX2hwX2F1dG9tdXRlLAogCX0sCiAJW0FMQzg4MF9NRURJT05fUklNXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODgwX21lZGlvbl9yaW1fbWl4ZXIgfSwKQEAgLTQ5ODQsMjAgKzUyNTMsMjUgQEAKIAlBTENfQ1RMX1dJREdFVF9NVVRFLAogCUFMQ19DVExfQklORF9NVVRFLAogfTsKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODBfY29udHJvbF90ZW1wbGF0ZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODBfY29udHJvbF90ZW1wbGF0ZXNbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKE5VTEwsIDAsIDAsIDApLAogCUhEQV9DT0RFQ19NVVRFKE5VTEwsIDAsIDAsIDApLAogCUhEQV9CSU5EX01VVEUoTlVMTCwgMCwgMCwgMCksCiB9OwogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmFsY19rY29udHJvbF9uZXcoc3RydWN0IGFsY19zcGVjICpzcGVjKQoreworCXNuZF9hcnJheV9pbml0KCZzcGVjLT5rY3Rscywgc2l6ZW9mKHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3KSwgMzIpOworCXJldHVybiBzbmRfYXJyYXlfbmV3KCZzcGVjLT5rY3Rscyk7Cit9CisKIC8qIGFkZCBkeW5hbWljIGNvbnRyb2xzICovCiBzdGF0aWMgaW50IGFkZF9jb250cm9sKHN0cnVjdCBhbGNfc3BlYyAqc3BlYywgaW50IHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCSAgICAgICBpbnQgY2lkeCwgdW5zaWduZWQgbG9uZyB2YWwpCiB7CiAJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXc7CiAKLQlzbmRfYXJyYXlfaW5pdCgmc3BlYy0+a2N0bHMsIHNpemVvZigqa25ldyksIDMyKTsKLQlrbmV3ID0gc25kX2FycmF5X25ldygmc3BlYy0+a2N0bHMpOworCWtuZXcgPSBhbGNfa2NvbnRyb2xfbmV3KHNwZWMpOwogCWlmICgha25ldykKIAkJcmV0dXJuIC1FTk9NRU07CiAJKmtuZXcgPSBhbGM4ODBfY29udHJvbF90ZW1wbGF0ZXNbdHlwZV07CkBAIC01MDU1LDcgKzUzMjksNyBAQAogCQluaWQgPSBjZmctPmxpbmVfb3V0X3BpbnNbaV07CiAJCWlmIChhbGM4ODBfaXNfZml4ZWRfcGluKG5pZCkpIHsKIAkJCWludCBpZHggPSBhbGM4ODBfZml4ZWRfcGluX2lkeChuaWQpOwotCQkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV0gPSBhbGM4ODBfaWR4X3RvX2RhYyhpZHgpOworCQkJc3BlYy0+cHJpdmF0ZV9kYWNfbmlkc1tpXSA9IGFsYzg4MF9pZHhfdG9fZGFjKGlkeCk7CiAJCQlhc3NpZ25lZFtpZHhdID0gMTsKIAkJfQogCX0KQEAgLTUwNjcsNyArNTM0MSw3IEBACiAJCS8qIHNlYXJjaCBmb3IgYW4gZW1wdHkgY2hhbm5lbCAqLwogCQlmb3IgKGogPSAwOyBqIDwgY2ZnLT5saW5lX291dHM7IGorKykgewogCQkJaWYgKCFhc3NpZ25lZFtqXSkgewotCQkJCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2ldID0KKwkJCQlzcGVjLT5wcml2YXRlX2RhY19uaWRzW2ldID0KIAkJCQkJYWxjODgwX2lkeF90b19kYWMoaik7CiAJCQkJYXNzaWduZWRbal0gPSAxOwogCQkJCWJyZWFrOwpAQCAtNTA3OCwxMCArNTM1MiwxMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqYWxjX2dldF9saW5lX291dF9wZngoY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnLAorc3RhdGljIGNvbnN0IGNoYXIgKmFsY19nZXRfbGluZV9vdXRfcGZ4KHN0cnVjdCBhbGNfc3BlYyAqc3BlYywKIAkJCQkJYm9vbCBjYW5fYmVfbWFzdGVyKQogewotCWlmICghY2ZnLT5ocF9vdXRzICYmICFjZmctPnNwZWFrZXJfb3V0cyAmJiBjYW5fYmVfbWFzdGVyKQorCXN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZyA9ICZzcGVjLT5hdXRvY2ZnOworCisJaWYgKGNmZy0+bGluZV9vdXRzID09IDEgJiYgIXNwZWMtPm11bHRpX2lvcyAmJgorCSAgICAhY2ZnLT5ocF9vdXRzICYmICFjZmctPnNwZWFrZXJfb3V0cyAmJiBjYW5fYmVfbWFzdGVyKQogCQlyZXR1cm4gIk1hc3RlciI7CiAKIAlzd2l0Y2ggKGNmZy0+bGluZV9vdXRfdHlwZSkgewpAQCAtNTA5Miw3ICs1MzY5LDcgQEAKIAljYXNlIEFVVE9fUElOX0hQX09VVDoKIAkJcmV0dXJuICJIZWFkcGhvbmUiOwogCWRlZmF1bHQ6Ci0JCWlmIChjZmctPmxpbmVfb3V0cyA9PSAxKQorCQlpZiAoY2ZnLT5saW5lX291dHMgPT0gMSAmJiAhc3BlYy0+bXVsdGlfaW9zKQogCQkJcmV0dXJuICJQQ00iOwogCQlicmVhazsKIAl9CkBAIC01MTA2LDExICs1MzgzLDE1IEBACiAJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjaG5hbWVbNF0gPSB7CiAJCSJGcm9udCIsICJTdXJyb3VuZCIsIE5VTEwgLypDTEZFKi8sICJTaWRlIgogCX07Ci0JY29uc3QgY2hhciAqcGZ4ID0gYWxjX2dldF9saW5lX291dF9wZngoY2ZnLCBmYWxzZSk7CisJY29uc3QgY2hhciAqcGZ4ID0gYWxjX2dldF9saW5lX291dF9wZngoc3BlYywgZmFsc2UpOwogCWhkYV9uaWRfdCBuaWQ7Ci0JaW50IGksIGVycjsKKwlpbnQgaSwgZXJyLCBub3V0cHV0czsKIAotCWZvciAoaSA9IDA7IGkgPCBjZmctPmxpbmVfb3V0czsgaSsrKSB7CisJbm91dHB1dHMgPSBjZmctPmxpbmVfb3V0czsKKwlpZiAoc3BlYy0+bXVsdGlfaW9zID4gMCkKKwkJbm91dHB1dHMgKz0gc3BlYy0+bXVsdGlfaW9zOworCisJZm9yIChpID0gMDsgaSA8IG5vdXRwdXRzOyBpKyspIHsKIAkJaWYgKCFzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tpXSkKIAkJCWNvbnRpbnVlOwogCQluaWQgPSBhbGM4ODBfaWR4X3RvX21peGVyKGFsYzg4MF9kYWNfdG9faWR4KHNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2ldKSk7CkBAIC01Mzc2LDYgKzU2NTcsOCBAQAogCX0KIH0KIAorc3RhdGljIGludCBhbGNfYXV0b19hZGRfbXVsdGlfY2hhbm5lbF9tb2RlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKKwogLyogcGFyc2UgdGhlIEJJT1MgY29uZmlndXJhdGlvbiBhbmQgc2V0IHVwIHRoZSBhbGNfc3BlYyAqLwogLyogcmV0dXJuIDEgaWYgc3VjY2Vzc2Z1bCwgMCBpZiB0aGUgcHJvcGVyIGNvbmZpZyBpcyBub3QgZm91bmQsCiAgKiBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUKQEAgLTUzODQsNyArNTY2Nyw3IEBACiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJaW50IGVycjsKLQlzdGF0aWMgaGRhX25pZF90IGFsYzg4MF9pZ25vcmVbXSA9IHsgMHgxZCwgMCB9OworCXN0YXRpYyBjb25zdCBoZGFfbmlkX3QgYWxjODgwX2lnbm9yZVtdID0geyAweDFkLCAwIH07CiAKIAllcnIgPSBzbmRfaGRhX3BhcnNlX3Bpbl9kZWZfY29uZmlnKGNvZGVjLCAmc3BlYy0+YXV0b2NmZywKIAkJCQkJICAgYWxjODgwX2lnbm9yZSk7CkBAIC01Mzk2LDYgKzU2NzksOSBAQAogCWVyciA9IGFsYzg4MF9hdXRvX2ZpbGxfZGFjX25pZHMoc3BlYywgJnNwZWMtPmF1dG9jZmcpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOworCWVyciA9IGFsY19hdXRvX2FkZF9tdWx0aV9jaGFubmVsX21vZGUoY29kZWMpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWVyciA9IGFsYzg4MF9hdXRvX2NyZWF0ZV9tdWx0aV9vdXRfY3RscyhzcGVjLCAmc3BlYy0+YXV0b2NmZyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CkBAIC01NDY3LDYgKzU3NTMsMTIgQEAKIAkJCXNwZWMtPmNhcHNyY19uaWRzICs9IGk7CiAJCXNwZWMtPmFkY19uaWRzICs9IGk7CiAJCXNwZWMtPm51bV9hZGNfbmlkcyA9IDE7CisJCS8qIG9wdGlvbmFsIGRvY2stbWljICovCisJCWVpZHggPSBnZXRfY29ubmVjdGlvbl9pbmRleChjb2RlYywgY2FwLCBzcGVjLT5kb2NrX21pYy5waW4pOworCQlpZiAoZWlkeCA8IDApCisJCQlzcGVjLT5kb2NrX21pYy5waW4gPSAwOworCQllbHNlCisJCQlzcGVjLT5kb2NrX21pYy5tdXhfaWR4ID0gZWlkeDsKIAkJcmV0dXJuOwogCX0KIAlzbmRfcHJpbnRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiAlczogIgpAQCAtNTQ5NCw2ICs1Nzg2LDggQEAKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlpbnQgaTsKIAorCWlmICghcGluKQorCQlyZXR1cm4gMDsKIAlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX2FkY19uaWRzOyBpKyspIHsKIAkJaGRhX25pZF90IGNhcCA9IHNwZWMtPmNhcHNyY19uaWRzID8KIAkJCXNwZWMtPmNhcHNyY19uaWRzW2ldIDogc3BlYy0+YWRjX25pZHNbaV07CkBAIC01NTM0LDYgKzU4MjgsNyBAQAogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCWluaXRfY2Fwc3JjX2Zvcl9waW4oY29kZWMsIHNwZWMtPmV4dF9taWMucGluKTsKKwlpbml0X2NhcHNyY19mb3JfcGluKGNvZGVjLCBzcGVjLT5kb2NrX21pYy5waW4pOwogCWluaXRfY2Fwc3JjX2Zvcl9waW4oY29kZWMsIHNwZWMtPmludF9taWMucGluKTsKIH0KIApAQCAtNTU1MCw3ICs1ODQ1LDcgQEAKIHN0YXRpYyB2b2lkIHNldF9jYXB0dXJlX21peGVyKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqY2Fwc1syXVszXSA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmNhcHNbMl1bM10gPSB7CiAJCXsgYWxjX2NhcHR1cmVfbWl4ZXJfbm9zcmMxLAogCQkgIGFsY19jYXB0dXJlX21peGVyX25vc3JjMiwKIAkJICBhbGNfY2FwdHVyZV9taXhlcl9ub3NyYzMgfSwKQEAgLTU1NzYsNyArNTg3MSw3IEBACiB9CiAKIC8qIGZpbGwgYWRjX25pZHMgKGFuZCBjYXBzcmNfbmlkcykgY29udGFpbmluZyBhbGwgYWN0aXZlIGlucHV0IHBpbnMgKi8KLXN0YXRpYyB2b2lkIGZpbGx1cF9wcml2X2FkY19uaWRzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgKm5pZHMsCitzdGF0aWMgdm9pZCBmaWxsdXBfcHJpdl9hZGNfbmlkcyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY29uc3QgaGRhX25pZF90ICpuaWRzLAogCQkJCSBpbnQgbnVtX25pZHMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CkBAIC01NjQyLDEwICs1OTM3LDExIEBACiAjZGVmaW5lIHNldF9iZWVwX2FtcChzcGVjLCBuaWQsIGlkeCwgZGlyKSBcCiAJKChzcGVjKS0+YmVlcF9hbXAgPSBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgaWR4LCBkaXIpKQogCi1zdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYmVlcF93aGl0ZV9saXN0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgYmVlcF93aGl0ZV9saXN0W10gPSB7CiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODI5ZiwgIkFTVVMiLCAxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4M2NlLCAiRWVlUEMiLCAxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MzFhLCAiRWVlUEMiLCAxKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MzRhLCAiRWVlUEMiLCAxKSwKIAlTTkRfUENJX1FVSVJLKDB4ODA4NiwgMHhkNjEzLCAiSW50ZWwiLCAxKSwKIAl7fQogfTsKQEAgLTU3NTMsMTcgKzYwNDksMTcgQEAKICAqIEFMQzI2MCBzdXBwb3J0CiAgKi8KIAotc3RhdGljIGhkYV9uaWRfdCBhbGMyNjBfZGFjX25pZHNbMV0gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IGFsYzI2MF9kYWNfbmlkc1sxXSA9IHsKIAkvKiBmcm9udCAqLwogCTB4MDIsCiB9OwogCi1zdGF0aWMgaGRhX25pZF90IGFsYzI2MF9hZGNfbmlkc1sxXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3QgYWxjMjYwX2FkY19uaWRzWzFdID0gewogCS8qIEFEQzAgKi8KIAkweDA0LAogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBhbGMyNjBfYWRjX25pZHNfYWx0WzFdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBhbGMyNjBfYWRjX25pZHNfYWx0WzFdID0gewogCS8qIEFEQzEgKi8KIAkweDA1LAogfTsKQEAgLTU3NzEsNyArNjA2Nyw3IEBACiAvKiBOSURzIHVzZWQgd2hlbiBzaW11bHRhbmVvdXMgYWNjZXNzIHRvIGJvdGggQURDcyBtYWtlcyBzZW5zZS4gIE5vdGUgdGhhdAogICogYWxjMjYwX2NhcHR1cmVfbWl4ZXIgYXNzdW1lcyBBREMwIChuaWQgMHgwNCkgaXMgdGhlIGZpcnN0IEFEQy4KICAqLwotc3RhdGljIGhkYV9uaWRfdCBhbGMyNjBfZHVhbF9hZGNfbmlkc1syXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3QgYWxjMjYwX2R1YWxfYWRjX25pZHNbMl0gPSB7CiAJLyogQURDMCwgQURDMSAqLwogCTB4MDQsIDB4MDUKIH07CkBAIC01Nzc5LDcgKzYwNzUsNyBAQAogI2RlZmluZSBBTEMyNjBfRElHT1VUX05JRAkweDAzCiAjZGVmaW5lIEFMQzI2MF9ESUdJTl9OSUQJMHgwNgogCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjMjYwX2NhcHR1cmVfc291cmNlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzI2MF9jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gNCwKIAkuaXRlbXMgPSB7CiAJCXsgIk1pYyIsIDB4MCB9LApAQCAtNTc5NSw3ICs2MDkxLDcgQEAKICAqIHJlY29yZGluZyB0aGUgbWl4ZXIgb3V0cHV0IG9uIHRoZSBzZWNvbmQgQURDIChBREMwIGRvZXNuJ3QgaGF2ZSBhCiAgKiBjb25uZWN0aW9uIHRvIHRoZSBtaXhlciBvdXRwdXQpLgogICovCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjMjYwX2Z1aml0c3VfY2FwdHVyZV9zb3VyY2VzWzJdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzI2MF9mdWppdHN1X2NhcHR1cmVfc291cmNlc1syXSA9IHsKIAl7CiAJCS5udW1faXRlbXMgPSAzLAogCQkuaXRlbXMgPSB7CkBAIC01ODE5LDcgKzYxMTUsNyBAQAogLyogQWNlciBUcmF2ZWxNYXRlKC9FeHRlbnNhL0FzcGlyZSkgbm90ZWJvb2tzIGhhdmUgc2ltaWxhciBjb25maWd1cmF0aW9uIHRvCiAgKiB0aGUgRnVqaXRzdSBTNzAyeCwgYnV0IGphY2tzIGFyZSBtYXJrZWQgZGlmZmVyZW50bHkuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGMyNjBfYWNlcl9jYXB0dXJlX3NvdXJjZXNbMl0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjMjYwX2FjZXJfY2FwdHVyZV9zb3VyY2VzWzJdID0gewogCXsKIAkJLm51bV9pdGVtcyA9IDQsCiAJCS5pdGVtcyA9IHsKQEAgLTU4NDIsNyArNjEzOCw3IEBACiB9OwogCiAvKiBNYXhkYXRhIEZhdm9yaXQgMTAwWFMgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGMyNjBfZmF2b3JpdDEwMF9jYXB0dXJlX3NvdXJjZXNbMl0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjMjYwX2Zhdm9yaXQxMDBfY2FwdHVyZV9zb3VyY2VzWzJdID0gewogCXsKIAkJLm51bV9pdGVtcyA9IDIsCiAJCS5pdGVtcyA9IHsKQEAgLTU4NjYsNyArNjE2Miw3IEBACiAgKiBlbGVtZW50IHdoaWNoIGFsbG93cyBjaGFuZ2luZyB0aGUgY2hhbm5lbCBtb2RlLCBzbyB0aGUgdmVyYiBsaXN0IGlzCiAgKiBuZXZlciB1c2VkLgogICovCi1zdGF0aWMgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjMjYwX21vZGVzWzFdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzI2MF9tb2Rlc1sxXSA9IHsKIAl7IDIsIE5VTEwgfSwKIH07CiAKQEAgLTU4ODAsNyArNjE3Niw3IEBACiAgKiBhY2VyOiBhY2VyICsgY2FwdHVyZQogICovCiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjBfYmFzZV9vdXRwdXRfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjBfYmFzZV9vdXRwdXRfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDA4LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9CSU5EX01VVEUoIkZyb250IFBsYXliYWNrIFN3aXRjaCIsIDB4MDgsIDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDB4MDksIDB4MCwgSERBX09VVFBVVCksCkBAIC01ODkwLDcgKzYxODYsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjBfaW5wdXRfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjBfaW5wdXRfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHgwMiwgSERBX0lOUFVUKSwKQEAgLTU5MDMsMjEgKzYxOTksMTQgQEAKIH07CiAKIC8qIHVwZGF0ZSBIUCwgbGluZSBhbmQgbW9ubyBvdXQgcGlucyBhY2NvcmRpbmcgdG8gdGhlIG1hc3RlciBzd2l0Y2ggKi8KLXN0YXRpYyB2b2lkIGFsYzI2MF9ocF9tYXN0ZXJfdXBkYXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAotCQkJCSAgICBoZGFfbmlkX3QgaHAsIGhkYV9uaWRfdCBsaW5lLAotCQkJCSAgICBoZGFfbmlkX3QgbW9ubykKK3N0YXRpYyB2b2lkIGFsYzI2MF9ocF9tYXN0ZXJfdXBkYXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCXVuc2lnbmVkIGludCB2YWwgPSBzcGVjLT5tYXN0ZXJfc3cgPyBQSU5fSFAgOiAwOwotCS8qIGNoYW5nZSBIUCBhbmQgbGluZS1vdXQgcGlucyAqLwotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIGhwLCAwLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCi0JCQkgICAgdmFsKTsKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBsaW5lLCAwLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCi0JCQkgICAgdmFsKTsKLQkvKiBtb25vIChzcGVha2VyKSBkZXBlbmRpbmcgb24gdGhlIEhQIGphY2sgc2Vuc2UgKi8KLQl2YWwgPSAodmFsICYmICFzcGVjLT5qYWNrX3ByZXNlbnQpID8gUElOX09VVCA6IDA7Ci0Jc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbW9ubywgMCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAotCQkJICAgIHZhbCk7CisKKwkvKiBjaGFuZ2UgSFAgcGlucyAqLworCWRvX2F1dG9tdXRlKGNvZGVjLCBBUlJBWV9TSVpFKHNwZWMtPmF1dG9jZmcuaHBfcGlucyksCisJCSAgICBzcGVjLT5hdXRvY2ZnLmhwX3BpbnMsIHNwZWMtPm1hc3Rlcl9tdXRlLCB0cnVlKTsKKwl1cGRhdGVfc3BlYWtlcnMoY29kZWMpOwogfQogCiBzdGF0aWMgaW50IGFsYzI2MF9ocF9tYXN0ZXJfc3dfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLApAQCAtNTkyNSw3ICs2MjE0LDcgQEAKIHsKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQkqdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWUgPSBzcGVjLT5tYXN0ZXJfc3c7CisJKnVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlID0gIXNwZWMtPm1hc3Rlcl9tdXRlOwogCXJldHVybiAwOwogfQogCkBAIC01OTM0LDIwICs2MjIzLDE2IEBACiB7CiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaW50IHZhbCA9ICEhKnVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlOwotCWhkYV9uaWRfdCBocCwgbGluZSwgbW9ubzsKKwlpbnQgdmFsID0gISp1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZTsKIAotCWlmICh2YWwgPT0gc3BlYy0+bWFzdGVyX3N3KQorCWlmICh2YWwgPT0gc3BlYy0+bWFzdGVyX211dGUpCiAJCXJldHVybiAwOwotCXNwZWMtPm1hc3Rlcl9zdyA9IHZhbDsKLQlocCA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxNikgJiAweGZmOwotCWxpbmUgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gOCkgJiAweGZmOwotCW1vbm8gPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDB4ZmY7Ci0JYWxjMjYwX2hwX21hc3Rlcl91cGRhdGUoY29kZWMsIGhwLCBsaW5lLCBtb25vKTsKKwlzcGVjLT5tYXN0ZXJfbXV0ZSA9IHZhbDsKKwlhbGMyNjBfaHBfbWFzdGVyX3VwZGF0ZShjb2RlYyk7CiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjBfaHBfb3V0cHV0X21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYwX2hwX291dHB1dF9taXhlcltdID0gewogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLApAQCAtNTk1NSw3ICs2MjQwLDYgQEAKIAkJLmluZm8gPSBzbmRfY3RsX2Jvb2xlYW5fbW9ub19pbmZvLAogCQkuZ2V0ID0gYWxjMjYwX2hwX21hc3Rlcl9zd19nZXQsCiAJCS5wdXQgPSBhbGMyNjBfaHBfbWFzdGVyX3N3X3B1dCwKLQkJLnByaXZhdGVfdmFsdWUgPSAoMHgwZiA8PCAxNikgfCAoMHgxMCA8PCA4KSB8IDB4MTEKIAl9LAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MDgsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwOCwgMiwgSERBX0lOUFVUKSwKQEAgLTU5NjcsMjYgKzYyNTEsMjMgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2MF9ocF91bnNvbF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGMyNjBfaHBfdW5zb2xfdmVyYnNbXSA9IHsKIAl7MHgxMCwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IEFMQzg4MF9IUF9FVkVOVH0sCiAJe30sCiB9OwogCi1zdGF0aWMgdm9pZCBhbGMyNjBfaHBfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCitzdGF0aWMgdm9pZCBhbGMyNjBfaHBfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAKLQlzcGVjLT5qYWNrX3ByZXNlbnQgPSBzbmRfaGRhX2phY2tfZGV0ZWN0KGNvZGVjLCAweDEwKTsKLQlhbGMyNjBfaHBfbWFzdGVyX3VwZGF0ZShjb2RlYywgMHgwZiwgMHgxMCwgMHgxMSk7CisJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgwZjsKKwlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTA7CisJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMV0gPSAweDExOworCXNwZWMtPmF1dG9tdXRlID0gMTsKKwlzcGVjLT5hdXRvbXV0ZV9tb2RlID0gQUxDX0FVVE9NVVRFX1BJTjsKIH0KIAotc3RhdGljIHZvaWQgYWxjMjYwX2hwX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQotewotCWlmICgocmVzID4+IDI2KSA9PSBBTEM4ODBfSFBfRVZFTlQpCi0JCWFsYzI2MF9ocF9hdXRvbXV0ZShjb2RlYyk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjBfaHBfMzAxM19taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2MF9ocF8zMDEzX21peGVyW10gPSB7CiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCkBAIC01OTk0LDcgKzYyNzUsNiBAQAogCQkuaW5mbyA9IHNuZF9jdGxfYm9vbGVhbl9tb25vX2luZm8sCiAJCS5nZXQgPSBhbGMyNjBfaHBfbWFzdGVyX3N3X2dldCwKIAkJLnB1dCA9IGFsYzI2MF9ocF9tYXN0ZXJfc3dfcHV0LAotCQkucHJpdmF0ZV92YWx1ZSA9ICgweDE1IDw8IDE2KSB8ICgweDEwIDw8IDgpIHwgMHgxMQogCX0sCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwgMHgwOSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgxMCwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTYwMDcsNyArNjI4NywxOCBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2JpbmRfY3RscyBhbGMyNjBfZGM3NjAwX2JpbmRfbWFzdGVyX3ZvbCA9IHsKK3N0YXRpYyB2b2lkIGFsYzI2MF9ocF8zMDEzX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCisJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxNTsKKwlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTA7CisJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMV0gPSAweDExOworCXNwZWMtPmF1dG9tdXRlID0gMTsKKwlzcGVjLT5hdXRvbXV0ZV9tb2RlID0gQUxDX0FVVE9NVVRFX1BJTjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfYmluZF9jdGxzIGFsYzI2MF9kYzc2MDBfYmluZF9tYXN0ZXJfdm9sID0gewogCS5vcHMgPSAmc25kX2hkYV9iaW5kX3ZvbCwKIAkudmFsdWVzID0gewogCQlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MDgsIDMsIDAsIEhEQV9PVVRQVVQpLApAQCAtNjAxNyw3ICs2MzA4LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfYmluZF9jdGxzIGFsYzI2MF9kYzc2MDBfYmluZF9zd2l0Y2ggPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9iaW5kX2N0bHMgYWxjMjYwX2RjNzYwMF9iaW5kX3N3aXRjaCA9IHsKIAkub3BzID0gJnNuZF9oZGFfYmluZF9zdywKIAkudmFsdWVzID0gewogCQlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MTEsIDMsIDAsIEhEQV9PVVRQVVQpLApAQCAtNjAyNiw3ICs2MzE3LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2MF9ocF9kYzc2MDBfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjBfaHBfZGM3NjAwX21peGVyW10gPSB7CiAJSERBX0JJTkRfVk9MKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgJmFsYzI2MF9kYzc2MDBfYmluZF9tYXN0ZXJfdm9sKSwKIAlIREFfQklORF9TVygiTGluZU91dCBQbGF5YmFjayBTd2l0Y2giLCAmYWxjMjYwX2RjNzYwMF9iaW5kX3N3aXRjaCksCiAJSERBX0NPREVDX01VVEUoIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwZiwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTYwMzQsNDkgKzYzMjUsMjcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2MF9ocF8zMDEzX3Vuc29sX3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzI2MF9ocF8zMDEzX3Vuc29sX3ZlcmJzW10gPSB7CiAJezB4MTUsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBTEM4ODBfSFBfRVZFTlR9LAogCXt9LAogfTsKIAotc3RhdGljIHZvaWQgYWxjMjYwX2hwXzMwMTNfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCitzdGF0aWMgdm9pZCBhbGMyNjBfaHBfMzAxMl9zZXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAotCXNwZWMtPmphY2tfcHJlc2VudCA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIDB4MTUpOwotCWFsYzI2MF9ocF9tYXN0ZXJfdXBkYXRlKGNvZGVjLCAweDE1LCAweDEwLCAweDExKTsKLX0KLQotc3RhdGljIHZvaWQgYWxjMjYwX2hwXzMwMTNfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCByZXMpCi17Ci0JaWYgKChyZXMgPj4gMjYpID09IEFMQzg4MF9IUF9FVkVOVCkKLQkJYWxjMjYwX2hwXzMwMTNfYXV0b211dGUoY29kZWMpOwotfQotCi1zdGF0aWMgdm9pZCBhbGMyNjBfaHBfMzAxMl9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKLXsKLQl1bnNpZ25lZCBpbnQgYml0cyA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIDB4MTApID8gMCA6IFBJTl9PVVQ7Ci0KLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDBmLCAwLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCi0JCQkgICAgYml0cyk7Ci0Jc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxMSwgMCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAotCQkJICAgIGJpdHMpOwotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTUsIDAsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKLQkJCSAgICBiaXRzKTsKLX0KLQotc3RhdGljIHZvaWQgYWxjMjYwX2hwXzMwMTJfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCByZXMpCi17Ci0JaWYgKChyZXMgPj4gMjYpID09IEFMQzg4MF9IUF9FVkVOVCkKLQkJYWxjMjYwX2hwXzMwMTJfYXV0b211dGUoY29kZWMpOworCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IDB4MTA7CisJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDBmOworCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzFdID0gMHgxMTsKKwlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1syXSA9IDB4MTU7CisJc3BlYy0+YXV0b211dGUgPSAxOworCXNwZWMtPmF1dG9tdXRlX21vZGUgPSBBTENfQVVUT01VVEVfUElOOwogfQogCiAvKiBGdWppdHN1IFM3MDJ4IHNlcmllcyBsYXB0b3BzLiAgQUxDMjYwIHBpbiB1c2FnZTogTWljL0xpbmUgamFjayA9IDB4MTIsCiAgKiBIUCBqYWNrID0gMHgxNCwgQ0QgYXVkaW8gPSAgMHgxNiwgaW50ZXJuYWwgc3BlYWtlciA9IDB4MTAuCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjBfZnVqaXRzdV9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2MF9mdWppdHN1X21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDB4MDgsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MDgsIDIsIEhEQV9JTlBVVCksCiAJQUxDX1BJTl9NT0RFKCJIZWFkcGhvbmUgSmFjayBNb2RlIiwgMHgxNCwgQUxDX1BJTl9ESVJfSU5PVVQpLApAQCAtNjExMyw3ICs2MzgyLDcgQEAKICAqIGNvbnRyb2xzIGZvciBzdWNoIG1vZGVscy4gIE9uIG1vZGVscyB3aXRob3V0IGEgIm1vbm8gc3BlYWtlciIgdGhlIGNvbnRyb2wKICAqIHdvbid0IGRvIGFueXRoaW5nLgogICovCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYwX2FjZXJfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjBfYWNlcl9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAweDA4LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9CSU5EX01VVEUoIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCAweDA4LCAyLCBIREFfSU5QVVQpLAogCUFMQ19QSU5fTU9ERSgiSGVhZHBob25lIEphY2sgTW9kZSIsIDB4MGYsIEFMQ19QSU5fRElSX0lOT1VUKSwKQEAgLTYxMzQsNyArNjQwMyw3IEBACiAKIC8qIE1heGRhdGEgRmF2b3JpdCAxMDBYUzogb25lIG91dHB1dCBhbmQgb25lIGlucHV0ICgweDEyKSBqYWNrCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjBfZmF2b3JpdDEwMF9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2MF9mYXZvcml0MTAwX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4MDgsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MDgsIDIsIEhEQV9JTlBVVCksCiAJQUxDX1BJTl9NT0RFKCJPdXRwdXQgSmFjayBNb2RlIiwgMHgwZiwgQUxDX1BJTl9ESVJfSU5PVVQpLApAQCAtNjE0Nyw3ICs2NDE2LDcgQEAKIC8qIFBhY2thcmQgYmVsbCBWNzkwMCAgQUxDMjYwIHBpbiB1c2FnZTogSFAgPSAweDBmLCBNaWMgamFjayA9IDB4MTIsCiAgKiBMaW5lIEluIGphY2sgPSAweDE0LCBDRCBhdWRpbyA9ICAweDE2LCBwYyBiZWVwID0gMHgxNy4KICAqLwotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2MF93aWxsX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYwX3dpbGxfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwOCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQklORF9NVVRFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwOCwgMHgyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDAsIEhEQV9JTlBVVCksCkBAIC02MTY0LDcgKzY0MzMsNyBAQAogLyogUmVwbGFjZXIgNjcyViBBTEMyNjAgcGluIHVzYWdlOiBNaWMgamFjayA9IDB4MTIsCiAgKiBMaW5lIEluIGphY2sgPSAweDE0LCBBVEFQSSBNaWMgPSAweDEzLCBzcGVha2VyID0gMHgwZi4KICAqLwotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2MF9yZXBsYWNlcl82NzJ2X21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYwX3JlcGxhY2VyXzY3MnZfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwOCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQklORF9NVVRFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwOCwgMHgyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDAsIEhEQV9JTlBVVCksCkBAIC02MTgxLDcgKzY0NTAsNyBAQAogLyoKICAqIGluaXRpYWxpemF0aW9uIHZlcmJzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYwX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYwX2luaXRfdmVyYnNbXSA9IHsKIAkvKiBMaW5lIEluIHBpbiB3aWRnZXQgZm9yIGlucHV0ICovCiAJezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKIAkvKiBDRCBwaW4gd2lkZ2V0IGZvciBpbnB1dCAqLwpAQCAtNjI0NSw3ICs2NTE0LDcgQEAKIH07CiAKICNpZiAwIC8qIHNob3VsZCBiZSBpZGVudGljYWwgd2l0aCBhbGMyNjBfaW5pdF92ZXJicz8gKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYwX2hwX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYwX2hwX2luaXRfdmVyYnNbXSA9IHsKIAkvKiBIZWFkcGhvbmUgYW5kIG91dHB1dCAqLwogCXsweDEwLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4YzB9LAogCS8qIG1vbm8gb3V0cHV0ICovCkBAIC02Mjk1LDcgKzY1NjQsNyBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2MF9ocF8zMDEzX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYwX2hwXzMwMTNfaW5pdF92ZXJic1tdID0gewogCS8qIExpbmUgb3V0IGFuZCBvdXRwdXQgKi8KIAl7MHgxMCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDQwfSwKIAkvKiBtb25vIG91dHB1dCAqLwpAQCAtNjM0OCw3ICs2NjE3LDcgQEAKICAqIGxhcHRvcHMuICBBTEMyNjAgcGluIHVzYWdlOiBNaWMvTGluZSBqYWNrID0gMHgxMiwgSFAgamFjayA9IDB4MTQsIENECiAgKiBhdWRpbyA9IDB4MTYsIGludGVybmFsIHNwZWFrZXIgPSAweDEwLgogICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2MF9mdWppdHN1X2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYwX2Z1aml0c3VfaW5pdF92ZXJic1tdID0gewogCS8qIERpc2FibGUgYWxsIEdQSU9zICovCiAJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fTUFTSywgMH0sCiAJLyogSW50ZXJuYWwgc3BlYWtlciBpcyBjb25uZWN0ZWQgdG8gaGVhZHBob25lIHBpbiAqLwpAQCAtNjQzMCw3ICs2Njk5LDcgQEAKIC8qIEluaXRpYWxpc2F0aW9uIHNlcXVlbmNlIGZvciBBTEMyNjAgYXMgY29uZmlndXJlZCBpbiBBY2VyIFRyYXZlbE1hdGUgYW5kCiAgKiBzaW1pbGFyIGxhcHRvcHMgKGFkYXB0ZWQgZnJvbSBGdWppdHN1IGluaXQgdmVyYnMpLgogICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2MF9hY2VyX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYwX2FjZXJfaW5pdF92ZXJic1tdID0gewogCS8qIE9uIFRyYXZlbE1hdGUgbGFwdG9wcywgR1BJTyAwIGVuYWJsZXMgdGhlIGludGVybmFsIHNwZWFrZXIgYW5kCiAJICogdGhlIGhlYWRwaG9uZSBqYWNrLiAgVHVybiB0aGlzIG9uIGFuZCByZWx5IG9uIHRoZSBzdGFuZGFyZCBtdXRlCiAJICogbWV0aG9kcyB3aGVuZXZlciB0aGUgdXNlciB3YW50cyB0byB0dXJuIHRoZXNlIG91dHB1dHMgb2ZmLgpAQCAtNjUxOCw3ICs2Nzg3LDcgQEAKIC8qIEluaXRpYWxpc2F0aW9uIHNlcXVlbmNlIGZvciBNYXhkYXRhIEZhdm9yaXQgMTAwWFMKICAqIChhZGFwdGVkIGZyb20gQWNlciBpbml0IHZlcmJzKS4KICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjBfZmF2b3JpdDEwMF9pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzI2MF9mYXZvcml0MTAwX2luaXRfdmVyYnNbXSA9IHsKIAkvKiBHUElPIDAgZW5hYmxlcyB0aGUgb3V0cHV0IGphY2suCiAJICogVHVybiB0aGlzIG9uIGFuZCByZWx5IG9uIHRoZSBzdGFuZGFyZCBtdXRlCiAJICogbWV0aG9kcyB3aGVuZXZlciB0aGUgdXNlciB3YW50cyB0byB0dXJuIHRoZXNlIG91dHB1dHMgb2ZmLgpAQCAtNjU5OCw3ICs2ODY3LDcgQEAKIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYwX3dpbGxfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYwX3dpbGxfdmVyYnNbXSA9IHsKIAl7MHgwZiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAogCXsweDBiLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCiAJezB4MGQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKQEAgLTY2MDgsNyArNjg3Nyw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYwX3JlcGxhY2VyXzY3MnZfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYwX3JlcGxhY2VyXzY3MnZfdmVyYnNbXSA9IHsKIAl7MHgwZiwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDB4MDJ9LAogCXsweDFhLCBBQ19WRVJCX1NFVF9DT0VGX0lOREVYLCAweDA3fSwKIAl7MHgxYSwgQUNfVkVSQl9TRVRfUFJPQ19DT0VGLCAweDMwNTB9LApAQCAtNjY1MCw3ICs2OTE5LDcgQEAKICAgICAgICAgICAgICAgICBhbGMyNjBfcmVwbGFjZXJfNjcydl9hdXRvbXV0ZShjb2RlYyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYwX2hwX2RjNzYwMF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGMyNjBfaHBfZGM3NjAwX3ZlcmJzW10gPSB7CiAJezB4MDUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwKIAl7MHgxNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDF9LAogCXsweDBmLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LApAQCAtNjY2OCwxNyArNjkzNywxNyBAQAogICogY29uZmlndXJhdGlvbi4KICAqLwogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKLXN0YXRpYyBoZGFfbmlkX3QgYWxjMjYwX3Rlc3RfZGFjX25pZHNbMV0gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IGFsYzI2MF90ZXN0X2RhY19uaWRzWzFdID0gewogCTB4MDIsCiB9Owotc3RhdGljIGhkYV9uaWRfdCBhbGMyNjBfdGVzdF9hZGNfbmlkc1syXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3QgYWxjMjYwX3Rlc3RfYWRjX25pZHNbMl0gPSB7CiAJMHgwNCwgMHgwNSwKIH07CiAvKiBGb3IgdGVzdGluZyB0aGUgQUxDMjYwLCBlYWNoIGlucHV0IE1VWCBuZWVkcyBpdHMgb3duIGRlZmluaXRpb24gc2luY2UKICAqIHRoZSBzaWduYWwgYXNzaWdubWVudHMgYXJlIGRpZmZlcmVudC4gIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSBmaXJzdCBBREMKICAqIGlzIE5JRCAweDA0LgogICovCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjMjYwX3Rlc3RfY2FwdHVyZV9zb3VyY2VzWzJdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzI2MF90ZXN0X2NhcHR1cmVfc291cmNlc1syXSA9IHsKIAl7CiAJCS5udW1faXRlbXMgPSA3LAogCQkuaXRlbXMgPSB7CkBAIC02NzA1LDcgKzY5NzQsNyBAQAogCQl9LAogICAgICAgICB9LAogfTsKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjBfdGVzdF9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2MF90ZXN0X21peGVyW10gPSB7CiAJLyogT3V0cHV0IGRyaXZlciB3aWRnZXRzICovCiAJSERBX0NPREVDX1ZPTFVNRV9NT05PKCJNb25vIFBsYXliYWNrIFZvbHVtZSIsIDB4MGEsIDEsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURV9NT05PKCJNb25vIFBsYXliYWNrIFN3aXRjaCIsIDB4MGEsIDEsIDIsIEhEQV9JTlBVVCksCkBAIC02NzY5LDcgKzcwMzgsNyBAQAogCiAJeyB9IC8qIGVuZCAqLwogfTsKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYwX3Rlc3RfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGMyNjBfdGVzdF9pbml0X3ZlcmJzW10gPSB7CiAJLyogRW5hYmxlIGFsbCBHUElPcyBhcyBvdXRwdXRzIHdpdGggYW4gaW5pdGlhbCB2YWx1ZSBvZiAwICovCiAJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fRElSRUNUSU9OLCAweDBmfSwKIAl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19EQVRBLCAweDAwfSwKQEAgLTY5MDcsNyArNzE3Niw3IEBACiAKIAlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IDE7CiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBzcGVjLT5wcml2YXRlX2RhY19uaWRzOwotCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzWzBdID0gMHgwMjsKKwlzcGVjLT5wcml2YXRlX2RhY19uaWRzWzBdID0gMHgwMjsKIAogCW5pZCA9IGNmZy0+bGluZV9vdXRfcGluc1swXTsKIAlpZiAobmlkKSB7CkBAIC03MDA1LDcgKzcyNzQsNyBAQAogLyoKICAqIGdlbmVyaWMgaW5pdGlhbGl6YXRpb24gb2YgQURDLCBpbnB1dCBtaXhlcnMgYW5kIG91dHB1dCBtaXhlcnMKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjBfdm9sdW1lX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYwX3ZvbHVtZV9pbml0X3ZlcmJzW10gPSB7CiAJLyoKIAkgKiBVbm11dGUgQURDMC0xIGFuZCBzZXQgdGhlIGRlZmF1bHQgaW5wdXQgdG8gbWljLWluCiAJICovCkBAIC03MDUwLDcgKzczMTksNyBAQAogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCWludCBlcnI7Ci0Jc3RhdGljIGhkYV9uaWRfdCBhbGMyNjBfaWdub3JlW10gPSB7IDB4MTcsIDAgfTsKKwlzdGF0aWMgY29uc3QgaGRhX25pZF90IGFsYzI2MF9pZ25vcmVbXSA9IHsgMHgxNywgMCB9OwogCiAJZXJyID0gc25kX2hkYV9wYXJzZV9waW5fZGVmX2NvbmZpZyhjb2RlYywgJnNwZWMtPmF1dG9jZmcsCiAJCQkJCSAgIGFsYzI2MF9pZ25vcmUpOwpAQCAtNzA5NSw3ICs3MzY0LDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKLXN0YXRpYyBzdHJ1Y3QgaGRhX2FtcF9saXN0IGFsYzI2MF9sb29wYmFja3NbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2FtcF9saXN0IGFsYzI2MF9sb29wYmFja3NbXSA9IHsKIAl7IDB4MDcsIEhEQV9JTlBVVCwgMCB9LAogCXsgMHgwNywgSERBX0lOUFVULCAxIH0sCiAJeyAweDA3LCBIREFfSU5QVVQsIDIgfSwKQEAgLTcxMjIsNyArNzM5MSw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGMyNjBfZml4dXBfdGJsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjMjYwX2ZpeHVwX3RibFtdID0gewogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDI4MGEsICJIUCBkYzU3NTAiLCBQSU5GSVhfSFBfREM1NzUwKSwKIAl7fQogfTsKQEAgLTcxNDYsNyArNzQxNSw3IEBACiAJW0FMQzI2MF9BVVRPXQkJPSAiYXV0byIsCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjMjYwX2NmZ190YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGMyNjBfY2ZnX3RibFtdID0gewogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAwN2IsICJBY2VyIEMyMHgiLCBBTEMyNjBfQUNFUiksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDA3ZiwgIkFjZXIiLCBBTEMyNjBfV0lMTCksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDA4ZiwgIkFjZXIiLCBBTEMyNjBfQUNFUiksCkBAIC03MTcwLDcgKzc0MzksNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgc3RydWN0IGFsY19jb25maWdfcHJlc2V0IGFsYzI2MF9wcmVzZXRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGFsY19jb25maWdfcHJlc2V0IGFsYzI2MF9wcmVzZXRzW10gPSB7CiAJW0FMQzI2MF9CQVNJQ10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzI2MF9iYXNlX291dHB1dF9taXhlciwKIAkJCSAgICBhbGMyNjBfaW5wdXRfbWl4ZXIgfSwKQEAgLTcxOTUsOCArNzQ2NCw5IEBACiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGMyNjBfbW9kZXMpLAogCQkuY2hhbm5lbF9tb2RlID0gYWxjMjYwX21vZGVzLAogCQkuaW5wdXRfbXV4ID0gJmFsYzI2MF9jYXB0dXJlX3NvdXJjZSwKLQkJLnVuc29sX2V2ZW50ID0gYWxjMjYwX2hwX3Vuc29sX2V2ZW50LAotCQkuaW5pdF9ob29rID0gYWxjMjYwX2hwX2F1dG9tdXRlLAorCQkudW5zb2xfZXZlbnQgPSBhbGNfc2t1X3Vuc29sX2V2ZW50LAorCQkuc2V0dXAgPSBhbGMyNjBfaHBfc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGNfaW5pdGhvb2ssCiAJfSwKIAlbQUxDMjYwX0hQX0RDNzYwMF0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzI2MF9ocF9kYzc2MDBfbWl4ZXIsCkBAIC03MjEwLDggKzc0ODAsOSBAQAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjYwX21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2MF9tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGMyNjBfY2FwdHVyZV9zb3VyY2UsCi0JCS51bnNvbF9ldmVudCA9IGFsYzI2MF9ocF8zMDEyX3Vuc29sX2V2ZW50LAotCQkuaW5pdF9ob29rID0gYWxjMjYwX2hwXzMwMTJfYXV0b211dGUsCisJCS51bnNvbF9ldmVudCA9IGFsY19za3VfdW5zb2xfZXZlbnQsCisJCS5zZXR1cCA9IGFsYzI2MF9ocF8zMDEyX3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjX2luaXRob29rLAogCX0sCiAJW0FMQzI2MF9IUF8zMDEzXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjMjYwX2hwXzMwMTNfbWl4ZXIsCkBAIC03MjI1LDggKzc0OTYsOSBAQAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjYwX21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2MF9tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGMyNjBfY2FwdHVyZV9zb3VyY2UsCi0JCS51bnNvbF9ldmVudCA9IGFsYzI2MF9ocF8zMDEzX3Vuc29sX2V2ZW50LAotCQkuaW5pdF9ob29rID0gYWxjMjYwX2hwXzMwMTNfYXV0b211dGUsCisJCS51bnNvbF9ldmVudCA9IGFsY19za3VfdW5zb2xfZXZlbnQsCisJCS5zZXR1cCA9IGFsYzI2MF9ocF8zMDEzX3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjX2luaXRob29rLAogCX0sCiAJW0FMQzI2MF9GVUpJVFNVX1M3MDJYXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjMjYwX2Z1aml0c3VfbWl4ZXIgfSwKQEAgLTczODQsNiArNzY1Niw3IEBACiAJY29kZWMtPnBhdGNoX29wcyA9IGFsY19wYXRjaF9vcHM7CiAJaWYgKGJvYXJkX2NvbmZpZyA9PSBBTEMyNjBfQVVUTykKIAkJc3BlYy0+aW5pdF9ob29rID0gYWxjMjYwX2F1dG9faW5pdDsKKwlzcGVjLT5zaHV0dXAgPSBhbGNfZWFwZF9zaHV0dXA7CiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQogCWlmICghc3BlYy0+bG9vcGJhY2suYW1wbGlzdCkKIAkJc3BlYy0+bG9vcGJhY2suYW1wbGlzdCA9IGFsYzI2MF9sb29wYmFja3M7CkBAIC03NDExLDEyICs3Njg0LDEyIEBACiAjZGVmaW5lIEFMQzEyMDBfRElHT1VUX05JRAkweDEwCiAKIAotc3RhdGljIHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzg4Ml9jaF9tb2Rlc1sxXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhbGM4ODJfY2hfbW9kZXNbMV0gPSB7CiAJeyA4LCBOVUxMIH0KIH07CiAKIC8qIERBQ3MgKi8KLXN0YXRpYyBoZGFfbmlkX3QgYWxjODgyX2RhY19uaWRzWzRdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBhbGM4ODJfZGFjX25pZHNbNF0gPSB7CiAJLyogZnJvbnQsIHJlYXIsIGNsZmUsIHJlYXJfc3VyciAqLwogCTB4MDIsIDB4MDMsIDB4MDQsIDB4MDUKIH07CkBAIC03NDI2LDIwICs3Njk5LDIwIEBACiAjZGVmaW5lIGFsYzg4Ml9hZGNfbmlkcwkJYWxjODgwX2FkY19uaWRzCiAjZGVmaW5lIGFsYzg4Ml9hZGNfbmlkc19hbHQJYWxjODgwX2FkY19uaWRzX2FsdAogI2RlZmluZSBhbGM4ODNfYWRjX25pZHMJCWFsYzg4Ml9hZGNfbmlkc19hbHQKLXN0YXRpYyBoZGFfbmlkX3QgYWxjODgzX2FkY19uaWRzX2FsdFsxXSA9IHsgMHgwOCB9Owotc3RhdGljIGhkYV9uaWRfdCBhbGM4ODNfYWRjX25pZHNfcmV2WzJdID0geyAweDA5LCAweDA4IH07CitzdGF0aWMgY29uc3QgaGRhX25pZF90IGFsYzg4M19hZGNfbmlkc19hbHRbMV0gPSB7IDB4MDggfTsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3QgYWxjODgzX2FkY19uaWRzX3JldlsyXSA9IHsgMHgwOSwgMHgwOCB9OwogI2RlZmluZSBhbGM4ODlfYWRjX25pZHMJCWFsYzg4MF9hZGNfbmlkcwogCi1zdGF0aWMgaGRhX25pZF90IGFsYzg4Ml9jYXBzcmNfbmlkc1szXSA9IHsgMHgyNCwgMHgyMywgMHgyMiB9Owotc3RhdGljIGhkYV9uaWRfdCBhbGM4ODJfY2Fwc3JjX25pZHNfYWx0WzJdID0geyAweDIzLCAweDIyIH07CitzdGF0aWMgY29uc3QgaGRhX25pZF90IGFsYzg4Ml9jYXBzcmNfbmlkc1szXSA9IHsgMHgyNCwgMHgyMywgMHgyMiB9Oworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBhbGM4ODJfY2Fwc3JjX25pZHNfYWx0WzJdID0geyAweDIzLCAweDIyIH07CiAjZGVmaW5lIGFsYzg4M19jYXBzcmNfbmlkcwlhbGM4ODJfY2Fwc3JjX25pZHNfYWx0Ci1zdGF0aWMgaGRhX25pZF90IGFsYzg4M19jYXBzcmNfbmlkc19yZXZbMl0gPSB7IDB4MjIsIDB4MjMgfTsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3QgYWxjODgzX2NhcHNyY19uaWRzX3JldlsyXSA9IHsgMHgyMiwgMHgyMyB9OwogI2RlZmluZSBhbGM4ODlfY2Fwc3JjX25pZHMJYWxjODgyX2NhcHNyY19uaWRzCiAKIC8qIGlucHV0IE1VWCAqLwogLyogRklYTUU6IHNob3VsZCBiZSBhIG1hdHJpeC10eXBlIGlucHV0IHNvdXJjZSBzZWxlY3Rpb24gKi8KIAotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzg4Ml9jYXB0dXJlX3NvdXJjZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGM4ODJfY2FwdHVyZV9zb3VyY2UgPSB7CiAJLm51bV9pdGVtcyA9IDQsCiAJLml0ZW1zID0gewogCQl7ICJNaWMiLCAweDAgfSwKQEAgLTc0NTEsNyArNzcyNCw3IEBACiAKICNkZWZpbmUgYWxjODgzX2NhcHR1cmVfc291cmNlCWFsYzg4Ml9jYXB0dXJlX3NvdXJjZQogCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjODg5X2NhcHR1cmVfc291cmNlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzg4OV9jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gMywKIAkuaXRlbXMgPSB7CiAJCXsgIkZyb250IE1pYyIsIDB4MCB9LApAQCAtNzQ2MCw3ICs3NzMzLDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IG1iNV9jYXB0dXJlX3NvdXJjZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCBtYjVfY2FwdHVyZV9zb3VyY2UgPSB7CiAJLm51bV9pdGVtcyA9IDMsCiAJLml0ZW1zID0gewogCQl7ICJNaWMiLCAweDEgfSwKQEAgLTc0NjksNyArNzc0Miw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBtYWNtaW5pM19jYXB0dXJlX3NvdXJjZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCBtYWNtaW5pM19jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gMiwKIAkuaXRlbXMgPSB7CiAJCXsgIkxpbmUiLCAweDIgfSwKQEAgLTc0NzcsNyArNzc1MCw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGM4ODNfM3N0YWNrXzZjaF9pbnRlbCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGM4ODNfM3N0YWNrXzZjaF9pbnRlbCA9IHsKIAkubnVtX2l0ZW1zID0gNCwKIAkuaXRlbXMgPSB7CiAJCXsgIk1pYyIsIDB4MSB9LApAQCAtNzQ4Nyw3ICs3NzYwLDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzg4M19sZW5vdm9fMTAxZV9jYXB0dXJlX3NvdXJjZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGM4ODNfbGVub3ZvXzEwMWVfY2FwdHVyZV9zb3VyY2UgPSB7CiAJLm51bV9pdGVtcyA9IDIsCiAJLml0ZW1zID0gewogCQl7ICJNaWMiLCAweDEgfSwKQEAgLTc0OTUsNyArNzc2OCw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGM4ODNfbGVub3ZvX25iMDc2M19jYXB0dXJlX3NvdXJjZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGM4ODNfbGVub3ZvX25iMDc2M19jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gNCwKIAkuaXRlbXMgPSB7CiAJCXsgIk1pYyIsIDB4MCB9LApAQCAtNzUwNSw3ICs3Nzc4LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzg4M19mdWppdHN1X3BpMjUxNV9jYXB0dXJlX3NvdXJjZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGM4ODNfZnVqaXRzdV9waTI1MTVfY2FwdHVyZV9zb3VyY2UgPSB7CiAJLm51bV9pdGVtcyA9IDIsCiAJLml0ZW1zID0gewogCQl7ICJNaWMiLCAweDAgfSwKQEAgLTc1MTMsNyArNzc4Niw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGM4ODNfbGVub3ZvX3NreV9jYXB0dXJlX3NvdXJjZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGM4ODNfbGVub3ZvX3NreV9jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gMywKIAkuaXRlbXMgPSB7CiAJCXsgIk1pYyIsIDB4MCB9LApAQCAtNzUyMiw3ICs3Nzk1LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzg4M19hc3VzX2VlZTE2MDFfY2FwdHVyZV9zb3VyY2UgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjODgzX2FzdXNfZWVlMTYwMV9jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gMiwKIAkuaXRlbXMgPSB7CiAJCXsgIk1pYyIsIDB4MCB9LApAQCAtNzUzMCw3ICs3ODAzLDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzg4OUFfbWIzMV9jYXB0dXJlX3NvdXJjZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGM4ODlBX21iMzFfY2FwdHVyZV9zb3VyY2UgPSB7CiAJLm51bV9pdGVtcyA9IDIsCiAJLml0ZW1zID0gewogCQl7ICJNaWMiLCAweDAgfSwKQEAgLTc1NDEsNyArNzgxNCw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGM4ODlBX2ltYWM5MV9jYXB0dXJlX3NvdXJjZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGM4ODlBX2ltYWM5MV9jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gMiwKIAkuaXRlbXMgPSB7CiAJCXsgIk1pYyIsIDB4MDEgfSwKQEAgLTc1NTIsMTQgKzc4MjUsMTQgQEAKIC8qCiAgKiAyY2ggbW9kZQogICovCi1zdGF0aWMgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjODgzXzNTVF8yY2hfbW9kZXNbMV0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjODgzXzNTVF8yY2hfbW9kZXNbMV0gPSB7CiAJeyAyLCBOVUxMIH0KIH07CiAKIC8qCiAgKiAyY2ggbW9kZQogICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4Ml8zU1RfY2gyX2luaXRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgyXzNTVF9jaDJfaW5pdFtdID0gewogCXsgMHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwIH0sCiAJeyAweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEUgfSwKIAl7IDB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOIH0sCkBAIC03NTcwLDcgKzc4NDMsNyBAQAogLyoKICAqIDRjaCBtb2RlCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgyXzNTVF9jaDRfaW5pdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODJfM1NUX2NoNF9pbml0W10gPSB7CiAJeyAweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODAgfSwKIAl7IDB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURSB9LAogCXsgMHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCkBAIC03NTgyLDcgKzc4NTUsNyBAQAogLyoKICAqIDZjaCBtb2RlCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgyXzNTVF9jaDZfaW5pdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODJfM1NUX2NoNl9pbml0W10gPSB7CiAJeyAweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKIAl7IDB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIH0sCiAJeyAweDE4LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMiB9LApAQCAtNzU5Miw3ICs3ODY1LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjODgyXzNTVF82Y2hfbW9kZXNbM10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjODgyXzNTVF82Y2hfbW9kZXNbM10gPSB7CiAJeyAyLCBhbGM4ODJfM1NUX2NoMl9pbml0IH0sCiAJeyA0LCBhbGM4ODJfM1NUX2NoNF9pbml0IH0sCiAJeyA2LCBhbGM4ODJfM1NUX2NoNl9pbml0IH0sCkBAIC03NjAzLDcgKzc4NzYsNyBAQAogLyoKICAqIDJjaCBtb2RlCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgzXzNTVF9jaDJfY2xldm9faW5pdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfM1NUX2NoMl9jbGV2b19pbml0W10gPSB7CiAJeyAweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUCB9LAogCXsgMHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwIH0sCiAJeyAweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEUgfSwKQEAgLTc2MTUsNyArNzg4OCw3IEBACiAvKgogICogNGNoIG1vZGUKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfM1NUX2NoNF9jbGV2b19pbml0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4M18zU1RfY2g0X2NsZXZvX2luaXRbXSA9IHsKIAl7IDB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAogCXsgMHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwIH0sCiAJeyAweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEUgfSwKQEAgLTc2MjgsNyArNzkwMSw3IEBACiAvKgogICogNmNoIG1vZGUKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfM1NUX2NoNl9jbGV2b19pbml0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4M18zU1RfY2g2X2NsZXZvX2luaXRbXSA9IHsKIAl7IDB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAogCXsgMHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCiAJeyAweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB9LApAQCAtNzYzOSw3ICs3OTEyLDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjODgzXzNTVF82Y2hfY2xldm9fbW9kZXNbM10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjODgzXzNTVF82Y2hfY2xldm9fbW9kZXNbM10gPSB7CiAJeyAyLCBhbGM4ODNfM1NUX2NoMl9jbGV2b19pbml0IH0sCiAJeyA0LCBhbGM4ODNfM1NUX2NoNF9jbGV2b19pbml0IH0sCiAJeyA2LCBhbGM4ODNfM1NUX2NoNl9jbGV2b19pbml0IH0sCkBAIC03NjQ5LDcgKzc5MjIsNyBAQAogLyoKICAqIDZjaCBtb2RlCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgyX3NpeHN0YWNrX2NoNl9pbml0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4Ml9zaXhzdGFja19jaDZfaW5pdFtdID0gewogCXsgMHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDAwIH0sCiAJeyAweDE2LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKIAl7IDB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LApAQCAtNzY2MCw3ICs3OTMzLDcgQEAKIC8qCiAgKiA4Y2ggbW9kZQogICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4Ml9zaXhzdGFja19jaDhfaW5pdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODJfc2l4c3RhY2tfY2g4X2luaXRbXSA9IHsKIAl7IDB4MTcsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAogCXsgMHgxNiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCiAJeyAweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKQEAgLTc2NjgsNyArNzk0MSw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzg4Ml9zaXhzdGFja19tb2Rlc1syXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhbGM4ODJfc2l4c3RhY2tfbW9kZXNbMl0gPSB7CiAJeyA2LCBhbGM4ODJfc2l4c3RhY2tfY2g2X2luaXQgfSwKIAl7IDgsIGFsYzg4Ml9zaXhzdGFja19jaDhfaW5pdCB9LAogfTsKQEAgLTc2NzYsNyArNzk0OSw3IEBACiAKIC8qIE1hY2Jvb2sgQWlyIDIsMSAqLwogCi1zdGF0aWMgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjODg1X21iYTIxX2NoX21vZGVzWzFdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzg4NV9tYmEyMV9jaF9tb2Rlc1sxXSA9IHsKICAgICAgIHsgMiwgTlVMTCB9LAogfTsKIApAQCAtNzY4Nyw3ICs3OTYwLDcgQEAKIC8qCiAgKiAyY2ggbW9kZQogICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4NV9tYnBfY2gyX2luaXRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg1X21icF9jaDJfaW5pdFtdID0gewogCXsgMHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU4gfSwKIAl7IDB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKIAl7IDB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKQEAgLTc2OTcsNyArNzk3MCw3IEBACiAvKgogICogNGNoIG1vZGUKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODVfbWJwX2NoNF9pbml0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4NV9tYnBfY2g0X2luaXRbXSA9IHsKIAl7IDB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAogCXsgMHgxYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAogCXsgMHgxYSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDEgfSwKQEAgLTc3MDYsNyArNzk3OSw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzg4NV9tYnBfNGNoX21vZGVzWzJdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzg4NV9tYnBfNGNoX21vZGVzWzJdID0gewogCXsgMiwgYWxjODg1X21icF9jaDJfaW5pdCB9LAogCXsgNCwgYWxjODg1X21icF9jaDRfaW5pdCB9LAogfTsKQEAgLTc3MTYsNyArNzk4OSw3IEBACiAgKiBTcGVha2Vycy9Xb29mZXIvSFAgPSBGcm9udAogICogTGluZUluID0gSW5wdXQKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODVfbWI1X2NoMl9pbml0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4NV9tYjVfY2gyX2luaXRbXSA9IHsKIAl7MHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAogCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAogCXsgfSAvKiBlbmQgKi8KQEAgLTc3MjgsMTQgKzgwMDEsMTQgQEAKICAqIFdvb2ZlciA9IExGRQogICogTGluZUluID0gU3Vycm91bmQKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODVfbWI1X2NoNl9pbml0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4NV9tYjVfY2g2X2luaXRbXSA9IHsKIAl7MHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKIAl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAogCXsweDE1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzg4NV9tYjVfNmNoX21vZGVzWzJdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzg4NV9tYjVfNmNoX21vZGVzWzJdID0gewogCXsgMiwgYWxjODg1X21iNV9jaDJfaW5pdCB9LAogCXsgNiwgYWxjODg1X21iNV9jaDZfaW5pdCB9LAogfTsKQEAgLTc3NDUsNyArODAxOCw3IEBACiAvKgogICogMmNoIG1vZGUKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfNFNUX2NoMl9pbml0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4M180U1RfY2gyX2luaXRbXSA9IHsKIAl7IDB4MTcsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAogCXsgMHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUgfSwKIAl7IDB4MTgsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MCB9LApAQCAtNzc1OCw3ICs4MDMxLDcgQEAKIC8qCiAgKiA0Y2ggbW9kZQogICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4M180U1RfY2g0X2luaXRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgzXzRTVF9jaDRfaW5pdFtdID0gewogCXsgMHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCiAJeyAweDE3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB9LAogCXsgMHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwIH0sCkBAIC03NzcyLDcgKzgwNDUsNyBAQAogLyoKICAqIDZjaCBtb2RlCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgzXzRTVF9jaDZfaW5pdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfNFNUX2NoNl9pbml0W10gPSB7CiAJeyAweDE3LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKIAl7IDB4MTcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIH0sCiAJeyAweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKQEAgLTc3ODcsNyArODA2MCw3IEBACiAvKgogICogOGNoIG1vZGUKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfNFNUX2NoOF9pbml0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4M180U1RfY2g4X2luaXRbXSA9IHsKIAl7IDB4MTcsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAogCXsgMHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUgfSwKIAl7IDB4MTcsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAzIH0sCkBAIC03ODAwLDcgKzgwNzMsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhbGM4ODNfNFNUXzhjaF9tb2Rlc1s0XSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhbGM4ODNfNFNUXzhjaF9tb2Rlc1s0XSA9IHsKIAl7IDIsIGFsYzg4M180U1RfY2gyX2luaXQgfSwKIAl7IDQsIGFsYzg4M180U1RfY2g0X2luaXQgfSwKIAl7IDYsIGFsYzg4M180U1RfY2g2X2luaXQgfSwKQEAgLTc4MTEsNyArODA4NCw3IEBACiAvKgogICogMmNoIG1vZGUKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfM1NUX2NoMl9pbnRlbF9pbml0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4M18zU1RfY2gyX2ludGVsX2luaXRbXSA9IHsKIAl7IDB4MTksIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MCB9LAogCXsgMHgxOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFIH0sCiAJeyAweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTiB9LApAQCAtNzgyMiw3ICs4MDk1LDcgQEAKIC8qCiAgKiA0Y2ggbW9kZQogICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4M18zU1RfY2g0X2ludGVsX2luaXRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgzXzNTVF9jaDRfaW50ZWxfaW5pdFtdID0gewogCXsgMHgxOSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwIH0sCiAJeyAweDE5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEUgfSwKIAl7IDB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LApAQCAtNzgzNCw3ICs4MTA3LDcgQEAKIC8qCiAgKiA2Y2ggbW9kZQogICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4M18zU1RfY2g2X2ludGVsX2luaXRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgzXzNTVF9jaDZfaW50ZWxfaW5pdFtdID0gewogCXsgMHgxOSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCiAJeyAweDE5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB9LAogCXsgMHgxOSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDIgfSwKQEAgLTc4NDQsNyArODExNyw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzg4M18zU1RfNmNoX2ludGVsX21vZGVzWzNdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzg4M18zU1RfNmNoX2ludGVsX21vZGVzWzNdID0gewogCXsgMiwgYWxjODgzXzNTVF9jaDJfaW50ZWxfaW5pdCB9LAogCXsgNCwgYWxjODgzXzNTVF9jaDRfaW50ZWxfaW5pdCB9LAogCXsgNiwgYWxjODgzXzNTVF9jaDZfaW50ZWxfaW5pdCB9LApAQCAtNzg1Myw3ICs4MTI2LDcgQEAKIC8qCiAgKiAyY2ggbW9kZQogICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4OV9jaDJfaW50ZWxfaW5pdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODlfY2gyX2ludGVsX2luaXRbXSA9IHsKIAl7IDB4MTQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwIH0sCiAJeyAweDE5LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMCB9LAogCXsgMHgxNiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDAgfSwKQEAgLTc4NjYsNyArODEzOSw3IEBACiAvKgogICogNmNoIG1vZGUKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODlfY2g2X2ludGVsX2luaXRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg5X2NoNl9pbnRlbF9pbml0W10gPSB7CiAJeyAweDE0LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMCB9LAogCXsgMHgxOSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDEgfSwKIAl7IDB4MTYsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAyIH0sCkBAIC03ODc5LDcgKzgxNTIsNyBAQAogLyoKICAqIDhjaCBtb2RlCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg5X2NoOF9pbnRlbF9pbml0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4OV9jaDhfaW50ZWxfaW5pdFtdID0gewogCXsgMHgxNCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDAgfSwKIAl7IDB4MTksIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxIH0sCiAJeyAweDE2LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMiB9LApAQCAtNzg5MCw3ICs4MTYzLDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjODg5XzhjaF9pbnRlbF9tb2Rlc1szXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhbGM4ODlfOGNoX2ludGVsX21vZGVzWzNdID0gewogCXsgMiwgYWxjODg5X2NoMl9pbnRlbF9pbml0IH0sCiAJeyA2LCBhbGM4ODlfY2g2X2ludGVsX2luaXQgfSwKIAl7IDgsIGFsYzg4OV9jaDhfaW50ZWxfaW5pdCB9LApAQCAtNzg5OSw3ICs4MTcyLDcgQEAKIC8qCiAgKiA2Y2ggbW9kZQogICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4M19zaXhzdGFja19jaDZfaW5pdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfc2l4c3RhY2tfY2g2X2luaXRbXSA9IHsKIAl7IDB4MTcsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgwMCB9LAogCXsgMHgxNiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCiAJeyAweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKQEAgLTc5MTAsNyArODE4Myw3IEBACiAvKgogICogOGNoIG1vZGUKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfc2l4c3RhY2tfY2g4X2luaXRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgzX3NpeHN0YWNrX2NoOF9pbml0W10gPSB7CiAJeyAweDE3LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKIAl7IDB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAogCXsgMHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCkBAIC03OTE4LDcgKzgxOTEsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhbGM4ODNfc2l4c3RhY2tfbW9kZXNbMl0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjODgzX3NpeHN0YWNrX21vZGVzWzJdID0gewogCXsgNiwgYWxjODgzX3NpeHN0YWNrX2NoNl9pbml0IH0sCiAJeyA4LCBhbGM4ODNfc2l4c3RhY2tfY2g4X2luaXQgfSwKIH07CkBAIC03OTI3LDcgKzgyMDAsNyBAQAogLyogUGluIGFzc2lnbm1lbnQ6IEZyb250PTB4MTQsIFJlYXI9MHgxNSwgQ0xGRT0weDE2LCBTaWRlPTB4MTcKICAqICAgICAgICAgICAgICAgICBNaWM9MHgxOCwgRnJvbnQgTWljPTB4MTksIExpbmUtSW49MHgxYSwgSFA9MHgxYgogICovCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgyX2Jhc2VfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODJfYmFzZV9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJTdXJyb3VuZCBQbGF5YmFjayBWb2x1bWUiLCAweDBkLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtNzk1NCwxNCArODIyNywxNCBAQAogCiAvKiBNYWNib29rIEFpciAyLDEgc2FtZSBjb250cm9sIGZvciBIUCBhbmQgaW50ZXJuYWwgU3BlYWtlciAqLwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODg1X21iYTIxX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODg1X21iYTIxX21peGVyW10gPSB7CiAgICAgICBIREFfQ09ERUNfVk9MVU1FKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MDAsIEhEQV9PVVRQVVQpLAogICAgICAgSERBX0JJTkRfTVVURSgiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBjLCAweDAyLCBIREFfT1VUUFVUKSwKICAgICAgeyB9CiB9OwogCiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODVfbWJwM19taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4NV9tYnAzX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAwLCBIREFfT1VUUFVUKSwKIAlIREFfQklORF9NVVRFICAgKCJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDB4MGUsIDB4MDAsIEhEQV9PVVRQVVQpLApAQCAtNzk3Niw3ICs4MjQ5LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODg1X21iNV9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4NV9tYjVfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAwLCBIREFfT1VUUFVUKSwKIAlIREFfQklORF9NVVRFICAgKCJGcm9udCBQbGF5YmFjayBTd2l0Y2giLCAweDBjLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIlN1cnJvdW5kIFBsYXliYWNrIFZvbHVtZSIsIDB4MGQsIDB4MDAsIEhEQV9PVVRQVVQpLApAQCAtNzk5NCw3ICs4MjY3LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODg1X21hY21pbmkzX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODg1X21hY21pbmkzX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwMCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSAgICgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJTdXJyb3VuZCBQbGF5YmFjayBWb2x1bWUiLCAweDBkLCAweDAwLCBIREFfT1VUUFVUKSwKQEAgLTgwMDksMTQgKzgyODIsMTQgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODg1X2ltYWM5MV9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4NV9pbWFjOTFfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MDAsIEhEQV9PVVRQVVQpLAogCUhEQV9CSU5EX01VVEUoIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMHgwMiwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODJfdzJqY19taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4Ml93MmpjX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQklORF9NVVRFKCJGcm9udCBQbGF5YmFjayBTd2l0Y2giLCAweDBjLCAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCkBAIC04MDI5LDcgKzgzMDIsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODJfdGFyZ2FfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODJfdGFyZ2FfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9CSU5EX01VVEUoIkZyb250IFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDFiLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtODA0OSw3ICs4MzIyLDcgQEAKIC8qIFBpbiBhc3NpZ25tZW50OiBGcm9udD0weDE0LCBIUCA9IDB4MTUsIEZyb250ID0gMHgxNiwgPz8/CiAgKiAgICAgICAgICAgICAgICAgRnJvbnQgTWljPTB4MTgsIExpbmUgSW4gPSAweDFhLCBMaW5lIEluID0gMHgxYiwgQ0QgPSAweDFjCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODJfYXN1c19hN2pfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODJfYXN1c19hN2pfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBQbGF5YmFjayBTd2l0Y2giLCAweDE0LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxNSwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTgwNjYsNyArODMzOSw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4Ml9hc3VzX2E3bV9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4Ml9hc3VzX2E3bV9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MTUsIDB4MCwgSERBX09VVFBVVCksCkBAIC04MDgwLDcgKzgzNTMsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODJfY2htb2RlX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgyX2NobW9kZV9taXhlcltdID0gewogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIkNoYW5uZWwgTW9kZSIsCkBAIC04MDkxLDcgKzgzNjQsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgyX2Jhc2VfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODJfYmFzZV9pbml0X3ZlcmJzW10gPSB7CiAJLyogRnJvbnQgbWl4ZXI6IHVubXV0ZSBpbnB1dC9vdXRwdXQgYW1wIGxlZnQgYW5kIHJpZ2h0ICh2b2x1bWUgPSAwKSAqLwogCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCiAJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKQEAgLTgxNTMsNyArODQyNiw3IEBACiAJeyB9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4Ml9hZGMxX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgyX2FkYzFfaW5pdF92ZXJic1tdID0gewogCS8qIElucHV0IG1peGVyMTogdW5tdXRlIE1pYywgRi1NaWMsIExpbmUsIENEIGlucHV0cyAqLwogCXsweDI0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAl7MHgyNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LApAQCAtODE2NSwyNiArODQzOCwyNiBAQAogCXsgfQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODJfZWFwZF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODJfZWFwZF92ZXJic1tdID0gewogCS8qIGNoYW5nZSB0byBFQVBEIG1vZGUgKi8KIAl7MHgyMCwgQUNfVkVSQl9TRVRfQ09FRl9JTkRFWCwgMHgwN30sCiAJezB4MjAsIEFDX1ZFUkJfU0VUX1BST0NfQ09FRiwgMHgzMDYwfSwKIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg5X2VhcGRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg5X2VhcGRfdmVyYnNbXSA9IHsKIAl7MHgxNCwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDJ9LAogCXsweDE1LCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMn0sCiAJeyB9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsY19ocDE1X3Vuc29sX3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsY19ocDE1X3Vuc29sX3ZlcmJzW10gPSB7CiAJezB4MTUsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBTEM4ODBfSFBfRVZFTlR9LAogCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCiAJe30KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg1X2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg1X2luaXRfdmVyYnNbXSA9IHsKIAkvKiBGcm9udCBtaXhlcjogdW5tdXRlIGlucHV0L291dHB1dCBhbXAgbGVmdCBhbmQgcmlnaHQgKHZvbHVtZSA9IDApICovCiAJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKQEAgLTgyNDMsNyArODUxNiw3IEBACiAJeyB9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4NV9pbml0X2lucHV0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4NV9pbml0X2lucHV0X3ZlcmJzW10gPSB7CiAJezB4MjQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCXsweDI0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDIpfSwKIAl7MHgyNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgzKX0sCkBAIC04MjUyLDcgKzg1MjUsNyBAQAogCiAKIC8qIFVubXV0ZSBTZWxlY3RvciAyNGggYW5kIHNldCB0aGUgZGVmYXVsdCBpbnB1dCB0byBmcm9udCBtaWMgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg5X2luaXRfaW5wdXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg5X2luaXRfaW5wdXRfdmVyYnNbXSA9IHsKIAl7MHgyNCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAogCXsweDI0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCiAJeyB9CkBAIC04MjYyLDcgKzg1MzUsNyBAQAogI2RlZmluZSBhbGM4ODNfaW5pdF92ZXJicwlhbGM4ODJfYmFzZV9pbml0X3ZlcmJzCiAKIC8qIE1hYyBQcm8gdGVzdCAqLwotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4Ml9tYWNwcm9fbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODJfbWFjcHJvX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQklORF9NVVRFKCJGcm9udCBQbGF5YmFjayBTd2l0Y2giLCAweDBjLCAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxOCwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTgyNzUsNyArODU0OCw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODJfbWFjcHJvX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgyX21hY3Byb19pbml0X3ZlcmJzW10gPSB7CiAJLyogRnJvbnQgbWl4ZXI6IHVubXV0ZSBpbnB1dC9vdXRwdXQgYW1wIGxlZnQgYW5kIHJpZ2h0ICh2b2x1bWUgPSAwKSAqLwogCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAogCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCkBAIC04MzI3LDcgKzg2MDAsNyBAQAogfTsKIAogLyogTWFjYm9vayA1LDEgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg1X21iNV9pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4NV9tYjVfaW5pdF92ZXJic1tdID0gewogCS8qIERBQ3MgKi8KIAl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAogCXsweDAzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCkBAIC04Mzc2LDcgKzg2NDksNyBAQAogfTsKIAogLyogTWFjbWluaSAzLDEgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg1X21hY21pbmkzX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg1X21hY21pbmkzX2luaXRfdmVyYnNbXSA9IHsKIAkvKiBEQUNzICovCiAJezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKIAl7MHgwMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LApAQCAtODQyMyw3ICs4Njk2LDcgQEAKIH07CiAKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODVfbWJhMjFfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODVfbWJhMjFfaW5pdF92ZXJic1tdID0gewogCS8qSW50ZXJuYWwgYW5kIEhQIFNwZWFrZXIgTWl4ZXIqLwogCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAogCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKQEAgLTg0NDYsNyArODcxOSw3IEBACiAKIAogLyogTWFjYm9vayBQcm8gcmV2MyAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODVfbWJwM19pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4NV9tYnAzX2luaXRfdmVyYnNbXSA9IHsKIAkvKiBGcm9udCBtaXhlcjogdW5tdXRlIGlucHV0L291dHB1dCBhbXAgbGVmdCBhbmQgcmlnaHQgKHZvbHVtZSA9IDApICovCiAJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCiAJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKQEAgLTg1MTAsNyArODc4Myw3IEBACiB9OwogCiAvKiBpTWFjIDksMSAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODVfaW1hYzkxX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg1X2ltYWM5MV9pbml0X3ZlcmJzW10gPSB7CiAJLyogSW50ZXJuYWwgU3BlYWtlciBQaW4gKDB4MGMpICovCiAJezB4MTgsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgKFBJTl9PVVQgfCBBQ19QSU5DVExfVlJFRl81MCkgfSwKIAl7MHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LApAQCAtODU2NSwxNCArODgzOCwxNCBAQAogfTsKIAogLyogaU1hYyAyNCBtaXhlci4gKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODVfaW1hYzI0X21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODg1X2ltYWMyNF9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDB4MDAsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIAogLyogaU1hYyAyNCBpbml0IHZlcmJzLiAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODVfaW1hYzI0X2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg1X2ltYWMyNF9pbml0X3ZlcmJzW10gPSB7CiAJLyogSW50ZXJuYWwgc3BlYWtlcnM6IG91dHB1dCAwICgweDBjKSAqLwogCXsweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAogCXsweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCkBAIC04NjAwLDYgKzg4NzMsOCBAQAogCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IDB4MTQ7CiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDE4OwogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzFdID0gMHgxYTsKKwlzcGVjLT5hdXRvbXV0ZSA9IDE7CisJc3BlYy0+YXV0b211dGVfbW9kZSA9IEFMQ19BVVRPTVVURV9BTVA7CiB9CiAKICNkZWZpbmUgYWxjODg1X21iNV9zZXR1cAlhbGM4ODVfaW1hYzI0X3NldHVwCkBAIC04NjEyLDYgKzg4ODcsOCBAQAogCiAgICAgICAgc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxNDsKICAgICAgICBzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTg7CisJc3BlYy0+YXV0b211dGUgPSAxOworCXNwZWMtPmF1dG9tdXRlX21vZGUgPSBBTENfQVVUT01VVEVfQU1QOwogfQogCiAKQEAgLTg2MjIsNiArODg5OSw4IEBACiAKIAlzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSAweDE1OwogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxNDsKKwlzcGVjLT5hdXRvbXV0ZSA9IDE7CisJc3BlYy0+YXV0b211dGVfbW9kZSA9IEFMQ19BVVRPTVVURV9BTVA7CiB9CiAKIHN0YXRpYyB2b2lkIGFsYzg4NV9pbWFjOTFfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCkBAIC04NjMxLDkgKzg5MTAsMTEgQEAKIAlzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSAweDE0OwogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxODsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1sxXSA9IDB4MWE7CisJc3BlYy0+YXV0b211dGUgPSAxOworCXNwZWMtPmF1dG9tdXRlX21vZGUgPSBBTENfQVVUT01VVEVfQU1QOwogfQogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4Ml90YXJnYV92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODJfdGFyZ2FfdmVyYnNbXSA9IHsKIAl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAogCkBAIC04NjUyLDcgKzg5MzMsNyBAQAogc3RhdGljIHZvaWQgYWxjODgyX3RhcmdhX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWFsY19hdXRvbXV0ZV9hbXAoY29kZWMpOworCWFsY19ocF9hdXRvbXV0ZShjb2RlYyk7CiAJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMSwgMCwgQUNfVkVSQl9TRVRfR1BJT19EQVRBLAogCQkJCSAgc3BlYy0+amFja19wcmVzZW50ID8gMSA6IDMpOwogfQpAQCAtODY2Myw2ICs4OTQ0LDggQEAKIAogCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IDB4MTQ7CiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDFiOworCXNwZWMtPmF1dG9tdXRlID0gMTsKKwlzcGVjLT5hdXRvbXV0ZV9tb2RlID0gQUxDX0FVVE9NVVRFX0FNUDsKIH0KIAogc3RhdGljIHZvaWQgYWxjODgyX3RhcmdhX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQpAQCAtODY3MSw3ICs4OTU0LDcgQEAKIAkJYWxjODgyX3RhcmdhX2F1dG9tdXRlKGNvZGVjKTsKIH0KIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODJfYXN1c19hN2pfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgyX2FzdXNfYTdqX3ZlcmJzW10gPSB7CiAJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKIApAQCAtODY4OSw3ICs4OTcyLDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4Ml9hc3VzX2E3bV92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODJfYXN1c19hN21fdmVyYnNbXSA9IHsKIAl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAogCkBAIC04NzUwLDEzICs5MDMzLDEzIEBACiBzdGF0aWMgdm9pZCBhbGM4ODVfaW1hYzI0X2luaXRfaG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlhbGM4ODVfbWFjcHJvX2luaXRfaG9vayhjb2RlYyk7Ci0JYWxjX2F1dG9tdXRlX2FtcChjb2RlYyk7CisJYWxjX2hwX2F1dG9tdXRlKGNvZGVjKTsKIH0KIAogLyoKICAqIGdlbmVyaWMgaW5pdGlhbGl6YXRpb24gb2YgQURDLCBpbnB1dCBtaXhlcnMgYW5kIG91dHB1dCBtaXhlcnMKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfYXV0b19pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4M19hdXRvX2luaXRfdmVyYnNbXSA9IHsKIAkvKgogCSAqIFVubXV0ZSBBREMwLTIgYW5kIHNldCB0aGUgZGVmYXVsdCBpbnB1dCB0byBtaWMtaW4KIAkgKi8KQEAgLTg3OTYsNyArOTA3OSw3IEBACiB9OwogCiAvKiAyY2ggbW9kZSAoU3BlYWtlcjpmcm9udCwgU3Vid29vZmVyOkNMRkUsIExpbmU6aW5wdXQsIEhlYWRwaG9uZXM6ZnJvbnQpICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4OUFfbWIzMV9jaDJfaW5pdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODlBX21iMzFfY2gyX2luaXRbXSA9IHsKIAl7MHgxNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LCAgICAgICAgICAgICAvKiBIUCBhcyBmcm9udCAqLwogCXsweDE2LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sIC8qIFN1Yndvb2ZlciBvbiAqLwogCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sICAgIC8qIExpbmUgYXMgaW5wdXQgKi8KQEAgLTg4MDUsNyArOTA4OCw3IEBACiB9OwogCiAvKiA0Y2ggbW9kZSAoU3BlYWtlcjpmcm9udCwgU3Vid29vZmVyOkNMRkUsIExpbmU6Q0xGRSwgSGVhZHBob25lczpmcm9udCkgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg5QV9tYjMxX2NoNF9pbml0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4OUFfbWIzMV9jaDRfaW5pdFtdID0gewogCXsweDE1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sICAgICAgICAgICAgIC8qIEhQIGFzIGZyb250ICovCiAJezB4MTYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwgLyogU3Vid29vZmVyIG9uICovCiAJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sICAgLyogTGluZSBhcyBvdXRwdXQgKi8KQEAgLTg4MTQsNyArOTA5Nyw3IEBACiB9OwogCiAvKiA1Y2ggbW9kZSAoU3BlYWtlcjpmcm9udCwgU3Vid29vZmVyOkNMRkUsIExpbmU6aW5wdXQsIEhlYWRwaG9uZXM6cmVhcikgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg5QV9tYjMxX2NoNV9pbml0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4OUFfbWIzMV9jaDVfaW5pdFtdID0gewogCXsweDE1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sICAgICAgICAgICAgIC8qIEhQIGFzIHJlYXIgKi8KIAl7MHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LCAvKiBTdWJ3b29mZXIgb24gKi8KIAl7MHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LCAgICAvKiBMaW5lIGFzIGlucHV0ICovCkBAIC04ODIzLDcgKzkxMDYsNyBAQAogfTsKIAogLyogNmNoIG1vZGUgKFNwZWFrZXI6ZnJvbnQsIFN1Yndvb2ZlcjpvZmYsIExpbmU6Q0xGRSwgSGVhZHBob25lczpSZWFyKSAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODlBX21iMzFfY2g2X2luaXRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg5QV9tYjMxX2NoNl9pbml0W10gPSB7CiAJezB4MTUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwgICAgICAgICAgICAgLyogSFAgYXMgZnJvbnQgKi8KIAl7MHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwgICAvKiBTdWJ3b29mZXIgb2ZmICovCiAJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sICAgLyogTGluZSBhcyBvdXRwdXQgKi8KQEAgLTg4MzEsMTQgKzkxMTQsMTQgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjODg5QV9tYjMxXzZjaF9tb2Rlc1s0XSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhbGM4ODlBX21iMzFfNmNoX21vZGVzWzRdID0gewogCXsgMiwgYWxjODg5QV9tYjMxX2NoMl9pbml0IH0sCiAJeyA0LCBhbGM4ODlBX21iMzFfY2g0X2luaXQgfSwKIAl7IDUsIGFsYzg4OUFfbWIzMV9jaDVfaW5pdCB9LAogCXsgNiwgYWxjODg5QV9tYjMxX2NoNl9pbml0IH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4M19tZWRpb25fZWFwZF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfbWVkaW9uX2VhcGRfdmVyYnNbXSA9IHsKICAgICAgICAgLyogZWFuYWJsZSBFQVBEIG9uIG1lZGlvbiBsYXB0b3AgKi8KIAl7MHgyMCwgQUNfVkVSQl9TRVRfQ09FRl9JTkRFWCwgMHgwN30sCiAJezB4MjAsIEFDX1ZFUkJfU0VUX1BST0NfQ09FRiwgMHgzMDcwfSwKQEAgLTg4NDcsNyArOTEzMCw3IEBACiAKICNkZWZpbmUgYWxjODgzX2Jhc2VfbWl4ZXIJYWxjODgyX2Jhc2VfbWl4ZXIKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4M19taXRhY19taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4M19taXRhY19taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FX01PTk8oIkNlbnRlciBQbGF5YmFjayBWb2x1bWUiLCAweDBlLCAxLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtODg2NCw3ICs5MTQ3LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgzX2NsZXZvX203MjBfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODNfY2xldm9fbTcyMF9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9CSU5EX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDBjLCAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwZCwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTg4NzgsNyArOTE2MSw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4M18yY2hfZnVqaXRzdV9waTI1MTVfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODNfMmNoX2Z1aml0c3VfcGkyNTE1X21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBkLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtODg5Miw3ICs5MTc1LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgzXzNTVF8yY2hfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODNfM1NUXzJjaF9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MWIsIDB4MCwgSERBX09VVFBVVCksCkBAIC04OTA5LDcgKzkxOTIsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODNfM1NUXzZjaF9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4M18zU1RfNmNoX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQklORF9NVVRFKCJGcm9udCBQbGF5YmFjayBTd2l0Y2giLCAweDBjLCAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIlN1cnJvdW5kIFBsYXliYWNrIFZvbHVtZSIsIDB4MGQsIDB4MCwgSERBX09VVFBVVCksCkBAIC04OTMyLDcgKzkyMTUsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODNfM1NUXzZjaF9pbnRlbF9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4M18zU1RfNmNoX2ludGVsX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQklORF9NVVRFKCJGcm9udCBQbGF5YmFjayBTd2l0Y2giLCAweDBjLCAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIlN1cnJvdW5kIFBsYXliYWNrIFZvbHVtZSIsIDB4MGQsIDB4MCwgSERBX09VVFBVVCksCkBAIC04OTU2LDcgKzkyMzksNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODVfOGNoX2ludGVsX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODg1XzhjaF9pbnRlbF9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJTdXJyb3VuZCBQbGF5YmFjayBWb2x1bWUiLCAweDBkLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtODk4MCw3ICs5MjYzLDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgzX2ZpdmVzdGFja19taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4M19maXZlc3RhY2tfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9CSU5EX01VVEUoIkZyb250IFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiU3Vycm91bmQgUGxheWJhY2sgVm9sdW1lIiwgMHgwZCwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTkwMDMsNyArOTI4Niw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4M190YXJnYV9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4M190YXJnYV9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MTQsIDB4MCwgSERBX09VVFBVVCksCkBAIC05MDI0LDcgKzkzMDcsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODNfdGFyZ2FfMmNoX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgzX3RhcmdhXzJjaF9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MTQsIDB4MCwgSERBX09VVFBVVCksCkBAIC05MDQwLDcgKzkzMjMsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODNfdGFyZ2FfOGNoX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgzX3RhcmdhXzhjaF9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIlNpZGUgUGxheWJhY2sgVm9sdW1lIiwgMHgwZiwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQklORF9NVVRFKCJTaWRlIFBsYXliYWNrIFN3aXRjaCIsIDB4MGYsIDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKQEAgLTkwNDksNyArOTMzMiw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4M19sZW5vdm9fMTAxZV8yY2hfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODNfbGVub3ZvXzEwMWVfMmNoX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQklORF9NVVRFKCJGcm9udCBQbGF5YmFjayBTd2l0Y2giLCAweDBjLCAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwZCwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTkwNjEsNyArOTM0NCw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4M19sZW5vdm9fbmIwNzYzX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgzX2xlbm92b19uYjA3NjNfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSgiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBjLCAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxNCwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTkwNzQsNyArOTM1Nyw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4M19tZWRpb25fd2ltMjE2MF9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4M19tZWRpb25fd2ltMjE2MF9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDE1LCAweDAsIEhEQV9PVVRQVVQpLApAQCAtOTA4NCw3ICs5MzY3LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4M19tZWRpb25fd2ltMjE2MF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfbWVkaW9uX3dpbTIxNjBfdmVyYnNbXSA9IHsKIAkvKiBVbm11dGUgZnJvbnQgbWl4ZXIgKi8KIAl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LApAQCAtOTEwOCw5ICs5MzkxLDExIEBACiAKIAlzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSAweDFhOwogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxNTsKKwlzcGVjLT5hdXRvbXV0ZSA9IDE7CisJc3BlYy0+YXV0b211dGVfbW9kZSA9IEFMQ19BVVRPTVVURV9BTVA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODNfYWNlcl9hc3BpcmVfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODNfYWNlcl9hc3BpcmVfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9CSU5EX01VVEUoIkZyb250IFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDE0LCAweDAsIEhEQV9PVVRQVVQpLApAQCAtOTEyMiw3ICs5NDA3LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODg4X2FjZXJfYXNwaXJlXzY1MzBfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODhfYWNlcl9hc3BpcmVfNjUzMF9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTEZFIFBsYXliYWNrIFZvbHVtZSIsIDB4MGYsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLApAQCAtOTEzNSw3ICs5NDIwLDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODg4X2xlbm92b19za3lfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODhfbGVub3ZvX3NreV9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJTdXJyb3VuZCBQbGF5YmFjayBWb2x1bWUiLCAweDBlLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtOTE2MCw3ICs5NDQ1LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODg5QV9tYjMxX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODg5QV9tYjMxX21peGVyW10gPSB7CiAJLyogT3V0cHV0IG1peGVycyAqLwogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MDAsIEhEQV9PVVRQVVQpLAogCUhEQV9CSU5EX01VVEUoIkZyb250IFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDB4MDIsIEhEQV9JTlBVVCksCkBAIC05MTg2LDcgKzk0NzEsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODNfdmFpb3R0X21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgzX3ZhaW90dF9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MTUsIDB4MCwgSERBX09VVFBVVCksCkBAIC05MTk2LDcgKzk0ODEsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2JpbmRfY3RscyBhbGM4ODNfYmluZF9jYXBfdm9sID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfYmluZF9jdGxzIGFsYzg4M19iaW5kX2NhcF92b2wgPSB7CiAJLm9wcyA9ICZzbmRfaGRhX2JpbmRfdm9sLAogCS52YWx1ZXMgPSB7CiAJCUhEQV9DT01QT1NFX0FNUF9WQUwoMHgwOCwgMywgMCwgSERBX0lOUFVUKSwKQEAgLTkyMDUsNyArOTQ5MCw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2JpbmRfY3RscyBhbGM4ODNfYmluZF9jYXBfc3dpdGNoID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfYmluZF9jdGxzIGFsYzg4M19iaW5kX2NhcF9zd2l0Y2ggPSB7CiAJLm9wcyA9ICZzbmRfaGRhX2JpbmRfc3csCiAJLnZhbHVlcyA9IHsKIAkJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDA4LCAzLCAwLCBIREFfSU5QVVQpLApAQCAtOTIxNCw3ICs5NDk5LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4M19hc3VzX2VlZTE2MDFfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODNfYXN1c19lZWUxNjAxX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQklORF9NVVRFKCJGcm9udCBQbGF5YmFjayBTd2l0Y2giLCAweDBjLCAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxNCwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTkyMjYsNyArOTUxMSw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4M19hc3VzX2VlZTE2MDFfY2FwX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgzX2FzdXNfZWVlMTYwMV9jYXBfbWl4ZXJbXSA9IHsKIAlIREFfQklORF9WT0woIkNhcHR1cmUgVm9sdW1lIiwgJmFsYzg4M19iaW5kX2NhcF92b2wpLAogCUhEQV9CSU5EX1NXKCJDYXB0dXJlIFN3aXRjaCIsICZhbGM4ODNfYmluZF9jYXBfc3dpdGNoKSwKIAl7CkBAIC05MjQxLDcgKzk1MjYsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODNfY2htb2RlX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgzX2NobW9kZV9taXhlcltdID0gewogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIkNoYW5uZWwgTW9kZSIsCkBAIC05MjYwLDkgKzk1NDUsMTEgQEAKIAlzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSAweDE1OwogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxNDsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1sxXSA9IDB4MTc7CisJc3BlYy0+YXV0b211dGUgPSAxOworCXNwZWMtPmF1dG9tdXRlX21vZGUgPSBBTENfQVVUT01VVEVfQU1QOwogfQogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4M19taXRhY192ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfbWl0YWNfdmVyYnNbXSA9IHsKIAkvKiBIUCAqLwogCXsweDE1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCiAJezB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKQEAgLTkyNzcsNyArOTU2NCw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfY2xldm9fbTU0MHJfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgzX2NsZXZvX201NDByX3ZlcmJzW10gPSB7CiAJLyogSFAgKi8KIAl7MHgxNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAogCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCkBAIC05MjkzLDcgKzk1ODAsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgzX2NsZXZvX203MjBfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgzX2NsZXZvX203MjBfdmVyYnNbXSA9IHsKIAkvKiBIUCAqLwogCXsweDE1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCiAJezB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKQEAgLTkzMDgsNyArOTU5NSw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfMmNoX2Z1aml0c3VfcGkyNTE1X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4M18yY2hfZnVqaXRzdV9waTI1MTVfdmVyYnNbXSA9IHsKIAkvKiBIUCAqLwogCXsweDE0LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCiAJezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKQEAgLTkzMjIsNyArOTYwOSw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfdGFyZ2FfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgzX3RhcmdhX3ZlcmJzW10gPSB7CiAJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKIApAQCAtOTM1MSwxNCArOTYzOCwxNCBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgzX2xlbm92b18xMDFlX3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4M19sZW5vdm9fMTAxZV92ZXJic1tdID0gewogCXsweDE1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCiAJezB4MTQsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUxDODgwX0ZST05UX0VWRU5UfEFDX1VTUlNQX0VOfSwKICAgICAgICAgezB4MWIsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUxDODgwX0hQX0VWRU5UfEFDX1VTUlNQX0VOfSwKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4M19sZW5vdm9fbmIwNzYzX3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4M19sZW5vdm9fbmIwNzYzX3ZlcmJzW10gPSB7CiAgICAgICAgIHsweDE1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCiAJezB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKICAgICAgICAgezB4MTQsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUxDODgwX0hQX0VWRU5UIHwgQUNfVVNSU1BfRU59LApAQCAtOTM2Niw3ICs5NjUzLDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4OF9sZW5vdm9fbXM3MTk1X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4OF9sZW5vdm9fbXM3MTk1X3ZlcmJzW10gPSB7CiAJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKIAl7MHgxNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LApAQCAtOTM3NSw3ICs5NjYyLDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4M19oYWllcl93NjZfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgzX2hhaWVyX3c2Nl92ZXJic1tdID0gewogCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCiAKQEAgLTkzODgsNyArOTY3NSw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODhfbGVub3ZvX3NreV92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODhfbGVub3ZvX3NreV92ZXJic1tdID0gewogCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCiAJezB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LApAQCAtOTQwMCwxMiArOTY4NywxMiBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg4XzZzdF9kZWxsX3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4OF82c3RfZGVsbF92ZXJic1tdID0gewogCXsweDFiLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFMQzg4MF9IUF9FVkVOVCB8IEFDX1VTUlNQX0VOfSwKIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgzX3ZhaW90dF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfdmFpb3R0X3ZlcmJzW10gPSB7CiAJLyogSFAgKi8KIAl7MHgxNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAogCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCkBAIC05NDI0LDkgKzk3MTEsMTEgQEAKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTQ7CiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMV0gPSAweDE2OwogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzJdID0gMHgxODsKKwlzcGVjLT5hdXRvbXV0ZSA9IDE7CisJc3BlYy0+YXV0b211dGVfbW9kZSA9IEFMQ19BVVRPTVVURV9BTVA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg4XzNzdF9ocF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODhfM3N0X2hwX3ZlcmJzW10gPSB7CiAJezB4MTQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwJLyogRnJvbnQ6IG91dHB1dCAwICgweDBjKSAqLwogCXsweDE2LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCS8qIFJlYXIgOiBvdXRwdXQgMSAoMHgwZCkgKi8KIAl7MHgxOCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDJ9LAkvKiBDTEZFIDogb3V0cHV0IDIgKDB4MGUpICovCkBAIC05NDM3LDcgKzk3MjYsNyBAQAogLyoKICAqIDJjaCBtb2RlCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg4XzNzdF9ocF8yY2hfaW5pdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODhfM3N0X2hwXzJjaF9pbml0W10gPSB7CiAJeyAweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODAgfSwKIAl7IDB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURSB9LAogCXsgMHgxNiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU4gfSwKQEAgLTk0NDgsNyArOTczNyw3IEBACiAvKgogICogNGNoIG1vZGUKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODhfM3N0X2hwXzRjaF9pbml0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4OF8zc3RfaHBfNGNoX2luaXRbXSA9IHsKIAl7IDB4MTgsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MCB9LAogCXsgMHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFIH0sCiAJeyAweDE2LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKQEAgLTk0NjAsNyArOTc0OSw3IEBACiAvKgogICogNmNoIG1vZGUKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODhfM3N0X2hwXzZjaF9pbml0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4OF8zc3RfaHBfNmNoX2luaXRbXSA9IHsKIAl7IDB4MTgsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAogCXsgMHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUgfSwKIAl7IDB4MTgsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAyIH0sCkBAIC05NDcwLDM5ICs5NzU5LDIxIEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzg4OF8zc3RfaHBfbW9kZXNbM10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjODg4XzNzdF9ocF9tb2Rlc1szXSA9IHsKIAl7IDIsIGFsYzg4OF8zc3RfaHBfMmNoX2luaXQgfSwKIAl7IDQsIGFsYzg4OF8zc3RfaHBfNGNoX2luaXQgfSwKIAl7IDYsIGFsYzg4OF8zc3RfaHBfNmNoX2luaXQgfSwKIH07CiAKLS8qIHRvZ2dsZSBmcm9udC1qYWNrIGFuZCBSQ0EgYWNjb3JkaW5nIHRvIHRoZSBocC1qYWNrIHN0YXRlICovCi1zdGF0aWMgdm9pZCBhbGM4ODhfbGVub3ZvX21zNzE5NV9mcm9udF9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3N0YXRpYyB2b2lkIGFsYzg4OF9sZW5vdm9fbXM3MTk1X3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewotIAl1bnNpZ25lZCBpbnQgcHJlc2VudCA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIDB4MWIpOworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCi0Jc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDE0LCBIREFfT1VUUFVULCAwLAotCQkJCSBIREFfQU1QX01VVEUsIHByZXNlbnQgPyBIREFfQU1QX01VVEUgOiAwKTsKLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MTUsIEhEQV9PVVRQVVQsIDAsCi0JCQkJIEhEQV9BTVBfTVVURSwgcHJlc2VudCA/IEhEQV9BTVBfTVVURSA6IDApOwotfQotCi0vKiB0b2dnbGUgUkNBIGFjY29yZGluZyB0byB0aGUgZnJvbnQtamFjayBzdGF0ZSAqLwotc3RhdGljIHZvaWQgYWxjODg4X2xlbm92b19tczcxOTVfcmNhX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotIAl1bnNpZ25lZCBpbnQgcHJlc2VudCA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIDB4MTQpOwotCi0Jc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDE1LCBIREFfT1VUUFVULCAwLAotCQkJCSBIREFfQU1QX01VVEUsIHByZXNlbnQgPyBIREFfQU1QX01VVEUgOiAwKTsKLX0KLQotc3RhdGljIHZvaWQgYWxjODgzX2xlbm92b19tczcxOTVfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCi0JCQkJCSAgICAgdW5zaWduZWQgaW50IHJlcykKLXsKLQlpZiAoKHJlcyA+PiAyNikgPT0gQUxDODgwX0hQX0VWRU5UKQotCQlhbGM4ODhfbGVub3ZvX21zNzE5NV9mcm9udF9hdXRvbXV0ZShjb2RlYyk7Ci0JaWYgKChyZXMgPj4gMjYpID09IEFMQzg4MF9GUk9OVF9FVkVOVCkKLQkJYWxjODg4X2xlbm92b19tczcxOTVfcmNhX2F1dG9tdXRlKGNvZGVjKTsKKwlzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSAweDFiOworCXNwZWMtPmF1dG9jZmcubGluZV9vdXRfcGluc1swXSA9IDB4MTQ7CisJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDE1OworCXNwZWMtPmF1dG9tdXRlID0gMTsKKwlzcGVjLT5hdXRvbXV0ZV9tb2RlID0gQUxDX0FVVE9NVVRFX0FNUDsKIH0KIAogLyogdG9nZ2xlIHNwZWFrZXItb3V0cHV0IGFjY29yZGluZyB0byB0aGUgaHAtamFjayBzdGF0ZSAqLwpAQCAtOTUxMiw2ICs5NzgzLDggQEAKIAogCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IDB4MTQ7CiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDE1OworCXNwZWMtPmF1dG9tdXRlID0gMTsKKwlzcGVjLT5hdXRvbXV0ZV9tb2RlID0gQUxDX0FVVE9NVVRFX0FNUDsKIH0KIAogLyogdG9nZ2xlIHNwZWFrZXItb3V0cHV0IGFjY29yZGluZyB0byB0aGUgaHAtamFjayBzdGF0ZSAqLwpAQCAtOTUyNCwxMSArOTc5NywxMyBAQAogCiAJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxNTsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTQ7CisJc3BlYy0+YXV0b211dGUgPSAxOworCXNwZWMtPmF1dG9tdXRlX21vZGUgPSBBTENfQVVUT01VVEVfQU1QOwogfQogCiBzdGF0aWMgdm9pZCBhbGM4ODNfY2xldm9fbTcyMF9pbml0X2hvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0JYWxjX2F1dG9tdXRlX2FtcChjb2RlYyk7CisJYWxjX2hwX2F1dG9tdXRlKGNvZGVjKTsKIAlhbGM4OHhfc2ltcGxlX21pY19hdXRvbXV0ZShjb2RlYyk7CiB9CiAKQEAgLTk1NDAsNyArOTgxNSw3IEBACiAJCWFsYzg4eF9zaW1wbGVfbWljX2F1dG9tdXRlKGNvZGVjKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJYWxjX2F1dG9tdXRlX2FtcF91bnNvbF9ldmVudChjb2RlYywgcmVzKTsKKwkJYWxjX3NrdV91bnNvbF9ldmVudChjb2RlYywgcmVzKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtOTU1Miw2ICs5ODI3LDggQEAKIAogCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IDB4MTQ7CiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDE1OworCXNwZWMtPmF1dG9tdXRlID0gMTsKKwlzcGVjLT5hdXRvbXV0ZV9tb2RlID0gQUxDX0FVVE9NVVRFX0FNUDsKIH0KIAogc3RhdGljIHZvaWQgYWxjODgzX2hhaWVyX3c2Nl9zZXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKQEAgLTk1NjAsMzMgKzk4MzcsMjEgQEAKIAogCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IDB4MWI7CiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDE0OworCXNwZWMtPmF1dG9tdXRlID0gMTsKKwlzcGVjLT5hdXRvbXV0ZV9tb2RlID0gQUxDX0FVVE9NVVRFX0FNUDsKIH0KIAotc3RhdGljIHZvaWQgYWxjODgzX2xlbm92b18xMDFlX2lzcGVha2VyX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgYWxjODgzX2xlbm92b18xMDFlX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewotCWludCBiaXRzID0gc25kX2hkYV9qYWNrX2RldGVjdChjb2RlYywgMHgxNCkgPyBIREFfQU1QX01VVEUgOiAwOworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCi0Jc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDE1LCBIREFfT1VUUFVULCAwLAotCQkJCSBIREFfQU1QX01VVEUsIGJpdHMpOwotfQotCi1zdGF0aWMgdm9pZCBhbGM4ODNfbGVub3ZvXzEwMWVfYWxsX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCWludCBiaXRzID0gc25kX2hkYV9qYWNrX2RldGVjdChjb2RlYywgMHgxYikgPyBIREFfQU1QX01VVEUgOiAwOwotCi0Jc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDE1LCBIREFfT1VUUFVULCAwLAotCQkJCSBIREFfQU1QX01VVEUsIGJpdHMpOwotCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxNCwgSERBX09VVFBVVCwgMCwKLQkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKLX0KLQotc3RhdGljIHZvaWQgYWxjODgzX2xlbm92b18xMDFlX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAotCQkJCQkgICB1bnNpZ25lZCBpbnQgcmVzKQotewotCWlmICgocmVzID4+IDI2KSA9PSBBTEM4ODBfSFBfRVZFTlQpCi0JCWFsYzg4M19sZW5vdm9fMTAxZV9hbGxfYXV0b211dGUoY29kZWMpOwotCWlmICgocmVzID4+IDI2KSA9PSBBTEM4ODBfRlJPTlRfRVZFTlQpCi0JCWFsYzg4M19sZW5vdm9fMTAxZV9pc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7CisJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxYjsKKwlzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3BpbnNbMF0gPSAweDE0OworCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxNTsKKwlzcGVjLT5hdXRvbXV0ZSA9IDE7CisJc3BlYy0+ZGV0ZWN0X2xpbmUgPSAxOworCXNwZWMtPmF1dG9tdXRlX2xpbmVzID0gMTsKKwlzcGVjLT5hdXRvbXV0ZV9tb2RlID0gQUxDX0FVVE9NVVRFX0FNUDsKIH0KIAogLyogdG9nZ2xlIHNwZWFrZXItb3V0cHV0IGFjY29yZGluZyB0byB0aGUgaHAtamFjayBzdGF0ZSAqLwpAQCAtOTU5Nyw5ICs5ODYyLDExIEBACiAJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxNDsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTU7CiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMV0gPSAweDE2OworCXNwZWMtPmF1dG9tdXRlID0gMTsKKwlzcGVjLT5hdXRvbXV0ZV9tb2RlID0gQUxDX0FVVE9NVVRFX0FNUDsKIH0KIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfYWNlcl9lYXBkX3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4M19hY2VyX2VhcGRfdmVyYnNbXSA9IHsKIAkvKiBIUCBQaW46IG91dHB1dCAwICgweDBjKSAqLwogCXsweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCiAJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKQEAgLTk2MjYsNiArOTg5Myw4IEBACiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMV0gPSAweDE1OwogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzJdID0gMHgxNjsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1szXSA9IDB4MTc7CisJc3BlYy0+YXV0b211dGUgPSAxOworCXNwZWMtPmF1dG9tdXRlX21vZGUgPSBBTENfQVVUT01VVEVfQU1QOwogfQogCiBzdGF0aWMgdm9pZCBhbGM4ODhfbGVub3ZvX3NreV9zZXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKQEAgLTk2MzgsNiArOTkwNyw4IEBACiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMl0gPSAweDE2OwogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzNdID0gMHgxNzsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1s0XSA9IDB4MWE7CisJc3BlYy0+YXV0b211dGUgPSAxOworCXNwZWMtPmF1dG9tdXRlX21vZGUgPSBBTENfQVVUT01VVEVfQU1QOwogfQogCiBzdGF0aWMgdm9pZCBhbGM4ODNfdmFpb3R0X3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQpAQCAtOTY0Nyw5ICs5OTE4LDExIEBACiAJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxNTsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTQ7CiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMV0gPSAweDE3OworCXNwZWMtPmF1dG9tdXRlID0gMTsKKwlzcGVjLT5hdXRvbXV0ZV9tb2RlID0gQUxDX0FVVE9NVVRFX0FNUDsKIH0KIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODhfYXN1c19tOTB2X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg4OF9hc3VzX205MHZfdmVyYnNbXSA9IHsKIAl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAogCXsweDIzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCiAJezB4MjMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LApAQCAtOTY3Miw5ICs5OTQ1LDExIEBACiAJc3BlYy0+ZXh0X21pYy5tdXhfaWR4ID0gMDsKIAlzcGVjLT5pbnRfbWljLm11eF9pZHggPSAxOwogCXNwZWMtPmF1dG9fbWljID0gMTsKKwlzcGVjLT5hdXRvbXV0ZSA9IDE7CisJc3BlYy0+YXV0b211dGVfbW9kZSA9IEFMQ19BVVRPTVVURV9BTVA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg4X2FzdXNfZWVlMTYwMV92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4ODhfYXN1c19lZWUxNjAxX3ZlcmJzW10gPSB7CiAJezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKIAl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKIAl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LApAQCAtOTY5MywxMCArOTk2OCwxMCBAQAogCiAJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxNDsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MWI7Ci0JYWxjX2F1dG9tdXRlX3Bpbihjb2RlYyk7CisJYWxjX2hwX2F1dG9tdXRlKGNvZGVjKTsKIH0KIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODlBX21iMzFfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg5QV9tYjMxX3ZlcmJzW10gPSB7CiAJLyogSW5pdCByZWFyIHBpbiAodXNlZCBhcyBoZWFkcGhvbmUgb3V0cHV0KSAqLwogCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4YzR9LCAgICAvKiBBcHBsZSBIZWFkcGhvbmVzICovCiAJezB4MTUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwgICAgICAgICAgIC8qIENvbm5lY3QgdG8gZnJvbnQgKi8KQEAgLTk3NDIsMTEgKzEwMDE3LDExIEBACiAjZGVmaW5lIGFsYzg4Ml9wY21fZGlnaXRhbF9wbGF5YmFjawlhbGM4ODBfcGNtX2RpZ2l0YWxfcGxheWJhY2sKICNkZWZpbmUgYWxjODgyX3BjbV9kaWdpdGFsX2NhcHR1cmUJYWxjODgwX3BjbV9kaWdpdGFsX2NhcHR1cmUKIAotc3RhdGljIGhkYV9uaWRfdCBhbGM4ODNfc2xhdmVfZGlnX291dHNbXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3QgYWxjODgzX3NsYXZlX2RpZ19vdXRzW10gPSB7CiAJQUxDMTIwMF9ESUdPVVRfTklELCAwLAogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBhbGMxMjAwX3NsYXZlX2RpZ19vdXRzW10gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IGFsYzEyMDBfc2xhdmVfZGlnX291dHNbXSA9IHsKIAlBTEM4ODNfRElHT1VUX05JRCwgMCwKIH07CiAKQEAgLTk4MDUsNyArMTAwODAsNyBAQAogCVtBTEM4ODJfQVVUT10JCT0gImF1dG8iLAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzg4Ml9jZmdfdGJsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjODgyX2NmZ190YmxbXSA9IHsKIAlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHg2NjY4LCAiRUNTIiwgQUxDODgyXzZTVF9ESUcpLAogCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDA2YywgIkFjZXIgQXNwaXJlIDk4MTAiLCBBTEM4ODNfQUNFUl9BU1BJUkUpLApAQCAtOTkzMiw3ICsxMDIwNyw3IEBACiB9OwogCiAvKiBjb2RlYyBTU0lEIHRhYmxlIGZvciBJbnRlbCBNYWMgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGM4ODJfc3NpZF9jZmdfdGJsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjODgyX3NzaWRfY2ZnX3RibFtdID0gewogCVNORF9QQ0lfUVVJUksoMHgxMDZiLCAweDAwYTAsICJNYWNCb29rUHJvIDMsMSIsIEFMQzg4NV9NQlAzKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHgwMGExLCAiTWFjYm9vayIsIEFMQzg4NV9NQlAzKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHgwMGE0LCAiTWFjYm9va1BybyA0LDEiLCBBTEM4ODVfTUJQMyksCkBAIC05OTU5LDcgKzEwMjM0LDcgQEAKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGFsY19jb25maWdfcHJlc2V0IGFsYzg4Ml9wcmVzZXRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGFsY19jb25maWdfcHJlc2V0IGFsYzg4Ml9wcmVzZXRzW10gPSB7CiAJW0FMQzg4Ml8zU1RfRElHXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODgyX2Jhc2VfbWl4ZXIgfSwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzg4Ml9iYXNlX2luaXRfdmVyYnMsCkBAIC0xMDAxNSw5ICsxMDI5MCw5IEBACiAJCQkuY2hhbm5lbF9tb2RlID0gYWxjODg1X21iYTIxX2NoX21vZGVzLAogCQkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzg4NV9tYmEyMV9jaF9tb2RlcyksCiAJCQkuaW5wdXRfbXV4ID0gJmFsYzg4Ml9jYXB0dXJlX3NvdXJjZSwKLQkJCS51bnNvbF9ldmVudCA9IGFsY19hdXRvbXV0ZV9hbXBfdW5zb2xfZXZlbnQsCisJCQkudW5zb2xfZXZlbnQgPSBhbGNfc2t1X3Vuc29sX2V2ZW50LAogCQkJLnNldHVwID0gYWxjODg1X21iYTIxX3NldHVwLAotCQkJLmluaXRfaG9vayA9IGFsY19hdXRvbXV0ZV9hbXAsCisJCQkuaW5pdF9ob29rID0gYWxjX2hwX2F1dG9tdXRlLAogICAgICAgIH0sCiAJW0FMQzg4NV9NQlAzXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODg1X21icDNfbWl4ZXIsIGFsYzg4Ml9jaG1vZGVfbWl4ZXIgfSwKQEAgLTEwMDMxLDkgKzEwMzA2LDkgQEAKIAkJLmlucHV0X211eCA9ICZhbGM4ODJfY2FwdHVyZV9zb3VyY2UsCiAJCS5kaWdfb3V0X25pZCA9IEFMQzg4Ml9ESUdPVVRfTklELAogCQkuZGlnX2luX25pZCA9IEFMQzg4Ml9ESUdJTl9OSUQsCi0JCS51bnNvbF9ldmVudCA9IGFsY19hdXRvbXV0ZV9hbXBfdW5zb2xfZXZlbnQsCisJCS51bnNvbF9ldmVudCA9IGFsY19za3VfdW5zb2xfZXZlbnQsCiAJCS5zZXR1cCA9IGFsYzg4NV9tYnAzX3NldHVwLAotCQkuaW5pdF9ob29rID0gYWxjX2F1dG9tdXRlX2FtcCwKKwkJLmluaXRfaG9vayA9IGFsY19ocF9hdXRvbXV0ZSwKIAl9LAogCVtBTEM4ODVfTUI1XSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODg1X21iNV9taXhlciwgYWxjODgyX2NobW9kZV9taXhlciB9LApAQCAtMTAwNDYsOSArMTAzMjEsOSBAQAogCQkuaW5wdXRfbXV4ID0gJm1iNV9jYXB0dXJlX3NvdXJjZSwKIAkJLmRpZ19vdXRfbmlkID0gQUxDODgyX0RJR09VVF9OSUQsCiAJCS5kaWdfaW5fbmlkID0gQUxDODgyX0RJR0lOX05JRCwKLQkJLnVuc29sX2V2ZW50ID0gYWxjX2F1dG9tdXRlX2FtcF91bnNvbF9ldmVudCwKKwkJLnVuc29sX2V2ZW50ID0gYWxjX3NrdV91bnNvbF9ldmVudCwKIAkJLnNldHVwID0gYWxjODg1X21iNV9zZXR1cCwKLQkJLmluaXRfaG9vayA9IGFsY19hdXRvbXV0ZV9hbXAsCisJCS5pbml0X2hvb2sgPSBhbGNfaHBfYXV0b211dGUsCiAJfSwKIAlbQUxDODg1X01BQ01JTkkzXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODg1X21hY21pbmkzX21peGVyLCBhbGM4ODJfY2htb2RlX21peGVyIH0sCkBAIC0xMDA2MSw5ICsxMDMzNiw5IEBACiAJCS5pbnB1dF9tdXggPSAmbWFjbWluaTNfY2FwdHVyZV9zb3VyY2UsCiAJCS5kaWdfb3V0X25pZCA9IEFMQzg4Ml9ESUdPVVRfTklELAogCQkuZGlnX2luX25pZCA9IEFMQzg4Ml9ESUdJTl9OSUQsCi0JCS51bnNvbF9ldmVudCA9IGFsY19hdXRvbXV0ZV9hbXBfdW5zb2xfZXZlbnQsCisJCS51bnNvbF9ldmVudCA9IGFsY19za3VfdW5zb2xfZXZlbnQsCiAJCS5zZXR1cCA9IGFsYzg4NV9tYWNtaW5pM19zZXR1cCwKLQkJLmluaXRfaG9vayA9IGFsY19hdXRvbXV0ZV9hbXAsCisJCS5pbml0X2hvb2sgPSBhbGNfaHBfYXV0b211dGUsCiAJfSwKIAlbQUxDODg1X01BQ1BST10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4Ml9tYWNwcm9fbWl4ZXIgfSwKQEAgLTEwMDg3LDcgKzEwMzYyLDcgQEAKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzg4Ml9jaF9tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGM4ODJfY2hfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjODgyX2NhcHR1cmVfc291cmNlLAotCQkudW5zb2xfZXZlbnQgPSBhbGNfYXV0b211dGVfYW1wX3Vuc29sX2V2ZW50LAorCQkudW5zb2xfZXZlbnQgPSBhbGNfc2t1X3Vuc29sX2V2ZW50LAogCQkuc2V0dXAgPSBhbGM4ODVfaW1hYzI0X3NldHVwLAogCQkuaW5pdF9ob29rID0gYWxjODg1X2ltYWMyNF9pbml0X2hvb2ssCiAJfSwKQEAgLTEwMTAyLDkgKzEwMzc3LDkgQEAKIAkJLmlucHV0X211eCA9ICZhbGM4ODlBX2ltYWM5MV9jYXB0dXJlX3NvdXJjZSwKIAkJLmRpZ19vdXRfbmlkID0gQUxDODgyX0RJR09VVF9OSUQsCiAJCS5kaWdfaW5fbmlkID0gQUxDODgyX0RJR0lOX05JRCwKLQkJLnVuc29sX2V2ZW50ID0gYWxjX2F1dG9tdXRlX2FtcF91bnNvbF9ldmVudCwKKwkJLnVuc29sX2V2ZW50ID0gYWxjX3NrdV91bnNvbF9ldmVudCwKIAkJLnNldHVwID0gYWxjODg1X2ltYWM5MV9zZXR1cCwKLQkJLmluaXRfaG9vayA9IGFsY19hdXRvbXV0ZV9hbXAsCisJCS5pbml0X2hvb2sgPSBhbGNfaHBfYXV0b211dGUsCiAJfSwKIAlbQUxDODgyX1RBUkdBXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODgyX3RhcmdhX21peGVyLCBhbGM4ODJfY2htb2RlX21peGVyIH0sCkBAIC0xMDEyMCw3ICsxMDM5NSw3IEBACiAJCS5jaGFubmVsX21vZGUgPSBhbGM4ODJfM1NUXzZjaF9tb2RlcywKIAkJLm5lZWRfZGFjX2ZpeCA9IDEsCiAJCS5pbnB1dF9tdXggPSAmYWxjODgyX2NhcHR1cmVfc291cmNlLAotCQkudW5zb2xfZXZlbnQgPSBhbGM4ODJfdGFyZ2FfdW5zb2xfZXZlbnQsCisJCS51bnNvbF9ldmVudCA9IGFsY19za3VfdW5zb2xfZXZlbnQsCiAJCS5zZXR1cCA9IGFsYzg4Ml90YXJnYV9zZXR1cCwKIAkJLmluaXRfaG9vayA9IGFsYzg4Ml90YXJnYV9hdXRvbXV0ZSwKIAl9LApAQCAtMTAyMTQsOCArMTA0ODksOCBAQAogCQkuY2Fwc3JjX25pZHMgPSBhbGM4ODlfY2Fwc3JjX25pZHMsCiAJCS5pbnB1dF9tdXggPSAmYWxjODg5X2NhcHR1cmVfc291cmNlLAogCQkuc2V0dXAgPSBhbGM4ODlfYXV0b211dGVfc2V0dXAsCi0JCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAotCQkudW5zb2xfZXZlbnQgPSBhbGNfYXV0b211dGVfYW1wX3Vuc29sX2V2ZW50LAorCQkuaW5pdF9ob29rID0gYWxjX2hwX2F1dG9tdXRlLAorCQkudW5zb2xfZXZlbnQgPSBhbGNfc2t1X3Vuc29sX2V2ZW50LAogCQkubmVlZF9kYWNfZml4ID0gMSwKIAl9LAogCVtBTEM4ODlfSU5URUxdID0gewpAQCAtMTAyMzUsNyArMTA1MTAsNyBAQAogCQkuaW5wdXRfbXV4ID0gJmFsYzg4OV9jYXB0dXJlX3NvdXJjZSwKIAkJLnNldHVwID0gYWxjODg5X2F1dG9tdXRlX3NldHVwLAogCQkuaW5pdF9ob29rID0gYWxjODg5X2ludGVsX2luaXRfaG9vaywKLQkJLnVuc29sX2V2ZW50ID0gYWxjX2F1dG9tdXRlX2FtcF91bnNvbF9ldmVudCwKKwkJLnVuc29sX2V2ZW50ID0gYWxjX3NrdV91bnNvbF9ldmVudCwKIAkJLm5lZWRfZGFjX2ZpeCA9IDEsCiAJfSwKIAlbQUxDODgzXzZTVF9ESUddID0gewpAQCAtMTAzMjQsOSArMTA1OTksOSBAQAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjODgzXzNTVF8yY2hfbW9kZXMpLAogCQkuY2hhbm5lbF9tb2RlID0gYWxjODgzXzNTVF8yY2hfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjODgzX2NhcHR1cmVfc291cmNlLAotCQkudW5zb2xfZXZlbnQgPSBhbGNfYXV0b211dGVfYW1wX3Vuc29sX2V2ZW50LAorCQkudW5zb2xfZXZlbnQgPSBhbGNfc2t1X3Vuc29sX2V2ZW50LAogCQkuc2V0dXAgPSBhbGM4ODNfYWNlcl9hc3BpcmVfc2V0dXAsCi0JCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAorCQkuaW5pdF9ob29rID0gYWxjX2hwX2F1dG9tdXRlLAogCX0sCiAJW0FMQzg4OF9BQ0VSX0FTUElSRV80OTMwR10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4OF9hY2VyX2FzcGlyZV80OTMwZ19taXhlciwKQEAgLTEwMzQ2LDkgKzEwNjIxLDkgQEAKIAkJLm51bV9tdXhfZGVmcyA9CiAJCQlBUlJBWV9TSVpFKGFsYzg4OF8yX2NhcHR1cmVfc291cmNlcyksCiAJCS5pbnB1dF9tdXggPSBhbGM4ODhfMl9jYXB0dXJlX3NvdXJjZXMsCi0JCS51bnNvbF9ldmVudCA9IGFsY19hdXRvbXV0ZV9hbXBfdW5zb2xfZXZlbnQsCisJCS51bnNvbF9ldmVudCA9IGFsY19za3VfdW5zb2xfZXZlbnQsCiAJCS5zZXR1cCA9IGFsYzg4OF9hY2VyX2FzcGlyZV80OTMwZ19zZXR1cCwKLQkJLmluaXRfaG9vayA9IGFsY19hdXRvbXV0ZV9hbXAsCisJCS5pbml0X2hvb2sgPSBhbGNfaHBfYXV0b211dGUsCiAJfSwKIAlbQUxDODg4X0FDRVJfQVNQSVJFXzY1MzBHXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODg4X2FjZXJfYXNwaXJlXzY1MzBfbWl4ZXIgfSwKQEAgLTEwMzY1LDkgKzEwNjQwLDkgQEAKIAkJLm51bV9tdXhfZGVmcyA9CiAJCQlBUlJBWV9TSVpFKGFsYzg4OF8yX2NhcHR1cmVfc291cmNlcyksCiAJCS5pbnB1dF9tdXggPSBhbGM4ODhfYWNlcl9hc3BpcmVfNjUzMF9zb3VyY2VzLAotCQkudW5zb2xfZXZlbnQgPSBhbGNfYXV0b211dGVfYW1wX3Vuc29sX2V2ZW50LAorCQkudW5zb2xfZXZlbnQgPSBhbGNfc2t1X3Vuc29sX2V2ZW50LAogCQkuc2V0dXAgPSBhbGM4ODhfYWNlcl9hc3BpcmVfNjUzMGdfc2V0dXAsCi0JCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAorCQkuaW5pdF9ob29rID0gYWxjX2hwX2F1dG9tdXRlLAogCX0sCiAJW0FMQzg4OF9BQ0VSX0FTUElSRV84OTMwR10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4OV9hY2VyX2FzcGlyZV84OTMwZ19taXhlciwKQEAgLTEwMzg4LDkgKzEwNjYzLDkgQEAKIAkJLm51bV9tdXhfZGVmcyA9CiAJCQlBUlJBWV9TSVpFKGFsYzg4OV9jYXB0dXJlX3NvdXJjZXMpLAogCQkuaW5wdXRfbXV4ID0gYWxjODg5X2NhcHR1cmVfc291cmNlcywKLQkJLnVuc29sX2V2ZW50ID0gYWxjX2F1dG9tdXRlX2FtcF91bnNvbF9ldmVudCwKKwkJLnVuc29sX2V2ZW50ID0gYWxjX3NrdV91bnNvbF9ldmVudCwKIAkJLnNldHVwID0gYWxjODg5X2FjZXJfYXNwaXJlXzg5MzBnX3NldHVwLAotCQkuaW5pdF9ob29rID0gYWxjX2F1dG9tdXRlX2FtcCwKKwkJLmluaXRfaG9vayA9IGFsY19ocF9hdXRvbXV0ZSwKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCiAJCS5wb3dlcl9ob29rID0gYWxjX3Bvd2VyX2VhcGQsCiAjZW5kaWYKQEAgLTEwNDExLDkgKzEwNjg2LDkgQEAKIAkJLm5lZWRfZGFjX2ZpeCA9IDEsCiAJCS5jb25zdF9jaGFubmVsX2NvdW50ID0gNiwKIAkJLmlucHV0X211eCA9ICZhbGM4ODNfY2FwdHVyZV9zb3VyY2UsCi0JCS51bnNvbF9ldmVudCA9IGFsY19hdXRvbXV0ZV9hbXBfdW5zb2xfZXZlbnQsCisJCS51bnNvbF9ldmVudCA9IGFsY19za3VfdW5zb2xfZXZlbnQsCiAJCS5zZXR1cCA9IGFsYzg4OF9hY2VyX2FzcGlyZV83NzMwZ19zZXR1cCwKLQkJLmluaXRfaG9vayA9IGFsY19hdXRvbXV0ZV9hbXAsCisJCS5pbml0X2hvb2sgPSBhbGNfaHBfYXV0b211dGUsCiAJfSwKIAlbQUxDODgzX01FRElPTl0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4M19maXZlc3RhY2tfbWl4ZXIsCkBAIC0xMDQ0MCw5ICsxMDcxNSw5IEBACiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4ODNfM1NUXzJjaF9tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGM4ODNfM1NUXzJjaF9tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGM4ODNfY2FwdHVyZV9zb3VyY2UsCi0JCS51bnNvbF9ldmVudCA9IGFsY19hdXRvbXV0ZV9hbXBfdW5zb2xfZXZlbnQsCisJCS51bnNvbF9ldmVudCA9IGFsY19za3VfdW5zb2xfZXZlbnQsCiAJCS5zZXR1cCA9IGFsYzg4M19tZWRpb25fd2ltMjE2MF9zZXR1cCwKLQkJLmluaXRfaG9vayA9IGFsY19hdXRvbXV0ZV9hbXAsCisJCS5pbml0X2hvb2sgPSBhbGNfaHBfYXV0b211dGUsCiAJfSwKIAlbQUxDODgzX0xBUFRPUF9FQVBEXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODgzX2Jhc2VfbWl4ZXIgfSwKQEAgLTEwNDkyLDggKzEwNzY3LDkgQEAKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzg4M18zU1RfMmNoX21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4M18zU1RfMmNoX21vZGVzLAogCQkuaW5wdXRfbXV4ID0gJmFsYzg4M19sZW5vdm9fMTAxZV9jYXB0dXJlX3NvdXJjZSwKLQkJLnVuc29sX2V2ZW50ID0gYWxjODgzX2xlbm92b18xMDFlX3Vuc29sX2V2ZW50LAotCQkuaW5pdF9ob29rID0gYWxjODgzX2xlbm92b18xMDFlX2FsbF9hdXRvbXV0ZSwKKwkJLnNldHVwID0gYWxjODgzX2xlbm92b18xMDFlX3NldHVwLAorCQkudW5zb2xfZXZlbnQgPSBhbGNfc2t1X3Vuc29sX2V2ZW50LAorCQkuaW5pdF9ob29rID0gYWxjX2luaXRob29rLAogCX0sCiAJW0FMQzg4M19MRU5PVk9fTkIwNzYzXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODgzX2xlbm92b19uYjA3NjNfbWl4ZXIgfSwKQEAgLTEwNTA0LDkgKzEwNzgwLDkgQEAKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4M18zU1RfMmNoX21vZGVzLAogCQkubmVlZF9kYWNfZml4ID0gMSwKIAkJLmlucHV0X211eCA9ICZhbGM4ODNfbGVub3ZvX25iMDc2M19jYXB0dXJlX3NvdXJjZSwKLQkJLnVuc29sX2V2ZW50ID0gYWxjX2F1dG9tdXRlX2FtcF91bnNvbF9ldmVudCwKKwkJLnVuc29sX2V2ZW50ID0gYWxjX3NrdV91bnNvbF9ldmVudCwKIAkJLnNldHVwID0gYWxjODgzX2xlbm92b19uYjA3NjNfc2V0dXAsCi0JCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAorCQkuaW5pdF9ob29rID0gYWxjX2hwX2F1dG9tdXRlLAogCX0sCiAJW0FMQzg4OF9MRU5PVk9fTVM3MTk1X0RJR10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4M18zU1RfNmNoX21peGVyLCBhbGM4ODNfY2htb2RlX21peGVyIH0sCkBAIC0xMDUxOCw4ICsxMDc5NCw5IEBACiAJCS5jaGFubmVsX21vZGUgPSBhbGM4ODNfM1NUXzZjaF9tb2RlcywKIAkJLm5lZWRfZGFjX2ZpeCA9IDEsCiAJCS5pbnB1dF9tdXggPSAmYWxjODgzX2NhcHR1cmVfc291cmNlLAotCQkudW5zb2xfZXZlbnQgPSBhbGM4ODNfbGVub3ZvX21zNzE5NV91bnNvbF9ldmVudCwKLQkJLmluaXRfaG9vayA9IGFsYzg4OF9sZW5vdm9fbXM3MTk1X2Zyb250X2F1dG9tdXRlLAorCQkudW5zb2xfZXZlbnQgPSBhbGNfc2t1X3Vuc29sX2V2ZW50LAorCQkuc2V0dXAgPSBhbGM4ODhfbGVub3ZvX21zNzE5NV9zZXR1cCwKKwkJLmluaXRfaG9vayA9IGFsY19pbml0aG9vaywKIAl9LAogCVtBTEM4ODNfSEFJRVJfVzY2XSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODgzX3RhcmdhXzJjaF9taXhlcn0sCkBAIC0xMDUzMCw5ICsxMDgwNyw5IEBACiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4ODNfM1NUXzJjaF9tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGM4ODNfM1NUXzJjaF9tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGM4ODNfY2FwdHVyZV9zb3VyY2UsCi0JCS51bnNvbF9ldmVudCA9IGFsY19hdXRvbXV0ZV9hbXBfdW5zb2xfZXZlbnQsCisJCS51bnNvbF9ldmVudCA9IGFsY19za3VfdW5zb2xfZXZlbnQsCiAJCS5zZXR1cCA9IGFsYzg4M19oYWllcl93NjZfc2V0dXAsCi0JCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAorCQkuaW5pdF9ob29rID0gYWxjX2hwX2F1dG9tdXRlLAogCX0sCiAJW0FMQzg4OF8zU1RfSFBdID0gewogCQkubWl4ZXJzID0geyBhbGM4ODNfM1NUXzZjaF9taXhlciwgYWxjODgzX2NobW9kZV9taXhlciB9LApAQCAtMTA1NDMsOSArMTA4MjAsOSBAQAogCQkuY2hhbm5lbF9tb2RlID0gYWxjODg4XzNzdF9ocF9tb2RlcywKIAkJLm5lZWRfZGFjX2ZpeCA9IDEsCiAJCS5pbnB1dF9tdXggPSAmYWxjODgzX2NhcHR1cmVfc291cmNlLAotCQkudW5zb2xfZXZlbnQgPSBhbGNfYXV0b211dGVfYW1wX3Vuc29sX2V2ZW50LAorCQkudW5zb2xfZXZlbnQgPSBhbGNfc2t1X3Vuc29sX2V2ZW50LAogCQkuc2V0dXAgPSBhbGM4ODhfM3N0X2hwX3NldHVwLAotCQkuaW5pdF9ob29rID0gYWxjX2F1dG9tdXRlX2FtcCwKKwkJLmluaXRfaG9vayA9IGFsY19ocF9hdXRvbXV0ZSwKIAl9LAogCVtBTEM4ODhfNlNUX0RFTExdID0gewogCQkubWl4ZXJzID0geyBhbGM4ODNfYmFzZV9taXhlciwgYWxjODgzX2NobW9kZV9taXhlciB9LApAQCAtMTA1NTcsOSArMTA4MzQsOSBAQAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjODgzX3NpeHN0YWNrX21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4M19zaXhzdGFja19tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGM4ODNfY2FwdHVyZV9zb3VyY2UsCi0JCS51bnNvbF9ldmVudCA9IGFsY19hdXRvbXV0ZV9hbXBfdW5zb2xfZXZlbnQsCisJCS51bnNvbF9ldmVudCA9IGFsY19za3VfdW5zb2xfZXZlbnQsCiAJCS5zZXR1cCA9IGFsYzg4OF82c3RfZGVsbF9zZXR1cCwKLQkJLmluaXRfaG9vayA9IGFsY19hdXRvbXV0ZV9hbXAsCisJCS5pbml0X2hvb2sgPSBhbGNfaHBfYXV0b211dGUsCiAJfSwKIAlbQUxDODgzX01JVEFDXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODgzX21pdGFjX21peGVyIH0sCkBAIC0xMDU2OSw5ICsxMDg0Niw5IEBACiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4ODNfM1NUXzJjaF9tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGM4ODNfM1NUXzJjaF9tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGM4ODNfY2FwdHVyZV9zb3VyY2UsCi0JCS51bnNvbF9ldmVudCA9IGFsY19hdXRvbXV0ZV9hbXBfdW5zb2xfZXZlbnQsCisJCS51bnNvbF9ldmVudCA9IGFsY19za3VfdW5zb2xfZXZlbnQsCiAJCS5zZXR1cCA9IGFsYzg4M19taXRhY19zZXR1cCwKLQkJLmluaXRfaG9vayA9IGFsY19hdXRvbXV0ZV9hbXAsCisJCS5pbml0X2hvb2sgPSBhbGNfaHBfYXV0b211dGUsCiAJfSwKIAlbQUxDODgzX0ZVSklUU1VfUEkyNTE1XSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODgzXzJjaF9mdWppdHN1X3BpMjUxNV9taXhlciB9LApAQCAtMTA1ODMsOSArMTA4NjAsOSBAQAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjODgzXzNTVF8yY2hfbW9kZXMpLAogCQkuY2hhbm5lbF9tb2RlID0gYWxjODgzXzNTVF8yY2hfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjODgzX2Z1aml0c3VfcGkyNTE1X2NhcHR1cmVfc291cmNlLAotCQkudW5zb2xfZXZlbnQgPSBhbGNfYXV0b211dGVfYW1wX3Vuc29sX2V2ZW50LAorCQkudW5zb2xfZXZlbnQgPSBhbGNfc2t1X3Vuc29sX2V2ZW50LAogCQkuc2V0dXAgPSBhbGM4ODNfMmNoX2Z1aml0c3VfcGkyNTE1X3NldHVwLAotCQkuaW5pdF9ob29rID0gYWxjX2F1dG9tdXRlX2FtcCwKKwkJLmluaXRfaG9vayA9IGFsY19ocF9hdXRvbXV0ZSwKIAl9LAogCVtBTEM4ODhfRlVKSVRTVV9YQTM1MzBdID0gewogCQkubWl4ZXJzID0geyBhbGM4ODhfYmFzZV9taXhlciwgYWxjODgzX2NobW9kZV9taXhlciB9LApAQCAtMTA2MDIsOSArMTA4NzksOSBAQAogCQkubnVtX211eF9kZWZzID0KIAkJCUFSUkFZX1NJWkUoYWxjODg4XzJfY2FwdHVyZV9zb3VyY2VzKSwKIAkJLmlucHV0X211eCA9IGFsYzg4OF8yX2NhcHR1cmVfc291cmNlcywKLQkJLnVuc29sX2V2ZW50ID0gYWxjX2F1dG9tdXRlX2FtcF91bnNvbF9ldmVudCwKKwkJLnVuc29sX2V2ZW50ID0gYWxjX3NrdV91bnNvbF9ldmVudCwKIAkJLnNldHVwID0gYWxjODg4X2Z1aml0c3VfeGEzNTMwX3NldHVwLAotCQkuaW5pdF9ob29rID0gYWxjX2F1dG9tdXRlX2FtcCwKKwkJLmluaXRfaG9vayA9IGFsY19ocF9hdXRvbXV0ZSwKIAl9LAogCVtBTEM4ODhfTEVOT1ZPX1NLWV0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4OF9sZW5vdm9fc2t5X21peGVyLCBhbGM4ODNfY2htb2RlX21peGVyIH0sCkBAIC0xMDYxNiw5ICsxMDg5Myw5IEBACiAJCS5jaGFubmVsX21vZGUgPSBhbGM4ODNfc2l4c3RhY2tfbW9kZXMsCiAJCS5uZWVkX2RhY19maXggPSAxLAogCQkuaW5wdXRfbXV4ID0gJmFsYzg4M19sZW5vdm9fc2t5X2NhcHR1cmVfc291cmNlLAotCQkudW5zb2xfZXZlbnQgPSBhbGNfYXV0b211dGVfYW1wX3Vuc29sX2V2ZW50LAorCQkudW5zb2xfZXZlbnQgPSBhbGNfc2t1X3Vuc29sX2V2ZW50LAogCQkuc2V0dXAgPSBhbGM4ODhfbGVub3ZvX3NreV9zZXR1cCwKLQkJLmluaXRfaG9vayA9IGFsY19hdXRvbXV0ZV9hbXAsCisJCS5pbml0X2hvb2sgPSBhbGNfaHBfYXV0b211dGUsCiAJfSwKIAlbQUxDODg4X0FTVVNfTTkwVl0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4M18zU1RfNmNoX21peGVyLCBhbGM4ODNfY2htb2RlX21peGVyIH0sCkBAIC0xMDY4Niw5ICsxMDk2Myw5IEBACiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4ODNfM1NUXzJjaF9tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGM4ODNfM1NUXzJjaF9tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGM4ODNfY2FwdHVyZV9zb3VyY2UsCi0JCS51bnNvbF9ldmVudCA9IGFsY19hdXRvbXV0ZV9hbXBfdW5zb2xfZXZlbnQsCisJCS51bnNvbF9ldmVudCA9IGFsY19za3VfdW5zb2xfZXZlbnQsCiAJCS5zZXR1cCA9IGFsYzg4M192YWlvdHRfc2V0dXAsCi0JCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAorCQkuaW5pdF9ob29rID0gYWxjX2hwX2F1dG9tdXRlLAogCX0sCiB9OwogCkBAIC0xMDczNCw3ICsxMTAxMSw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGM4ODJfZml4dXBfdGJsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjODgyX2ZpeHVwX3RibFtdID0gewogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAxNTUsICJQYWNrYXJkLUJlbGwgTTUxMjAiLCBQSU5GSVhfUEJfTTUyMTApLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDNhMGQsICJMZW5vdm8gWTUzMCIsIFBJTkZJWF9MRU5PVk9fWTUzMCksCiAJU05EX1BDSV9RVUlSSygweDE0N2IsIDB4MTA3YSwgIkFiaXQgQVc5RC1NQVgiLCBQSU5GSVhfQUJJVF9BVzlEX01BWCksCkBAIC0xMDg0Miw2ICsxMTExOSwxMSBAQAogCQljb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eDsKIAkJaW50IGNvbm5zLCBtdXRlLCBpZHgsIGl0ZW07CiAKKwkJLyogbXV0ZSBBREMgKi8KKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgc3BlYy0+YWRjX25pZHNbY10sIDAsCisJCQkJICAgIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCisJCQkJICAgIEFNUF9JTl9NVVRFKDApKTsKKwogCQljb25ucyA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCBuaWQsIGNvbm5fbGlzdCwKIAkJCQkJCUFSUkFZX1NJWkUoY29ubl9saXN0KSk7CiAJCWlmIChjb25ucyA8IDApCkBAIC0xMDkyMSw3ICsxMTIwMyw3IEBACiBzdGF0aWMgaW50IGFsYzg4Ml9wYXJzZV9hdXRvX2NvbmZpZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlzdGF0aWMgaGRhX25pZF90IGFsYzg4Ml9pZ25vcmVbXSA9IHsgMHgxZCwgMCB9OworCXN0YXRpYyBjb25zdCBoZGFfbmlkX3QgYWxjODgyX2lnbm9yZVtdID0geyAweDFkLCAwIH07CiAJaW50IGVycjsKIAogCWVyciA9IHNuZF9oZGFfcGFyc2VfcGluX2RlZl9jb25maWcoY29kZWMsICZzcGVjLT5hdXRvY2ZnLApAQCAtMTA5MzQsNiArMTEyMTYsOSBAQAogCWVyciA9IGFsYzg4MF9hdXRvX2ZpbGxfZGFjX25pZHMoc3BlYywgJnNwZWMtPmF1dG9jZmcpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOworCWVyciA9IGFsY19hdXRvX2FkZF9tdWx0aV9jaGFubmVsX21vZGUoY29kZWMpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWVyciA9IGFsYzg4MF9hdXRvX2NyZWF0ZV9tdWx0aV9vdXRfY3RscyhzcGVjLCAmc3BlYy0+YXV0b2NmZyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CkBAIC0xMTEzNSwxNCArMTE0MjAsMTQgQEAKICNkZWZpbmUgYWxjMjYyX21vZGVzCQlhbGMyNjBfbW9kZXMKICNkZWZpbmUgYWxjMjYyX2NhcHR1cmVfc291cmNlCWFsYzg4Ml9jYXB0dXJlX3NvdXJjZQogCi1zdGF0aWMgaGRhX25pZF90IGFsYzI2Ml9kbWljX2FkY19uaWRzWzFdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBhbGMyNjJfZG1pY19hZGNfbmlkc1sxXSA9IHsKIAkvKiBBREMwICovCiAJMHgwOQogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBhbGMyNjJfZG1pY19jYXBzcmNfbmlkc1sxXSA9IHsgMHgyMiB9Oworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBhbGMyNjJfZG1pY19jYXBzcmNfbmlkc1sxXSA9IHsgMHgyMiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYyX2Jhc2VfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjJfYmFzZV9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IFBsYXliYWNrIFN3aXRjaCIsIDB4MTQsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKQEAgLTExMTYzLDcxICsxMTQ0OCwzMCBAQAogfTsKIAogLyogdXBkYXRlIEhQLCBsaW5lIGFuZCBtb25vLW91dCBwaW5zIGFjY29yZGluZyB0byB0aGUgbWFzdGVyIHN3aXRjaCAqLwotc3RhdGljIHZvaWQgYWxjMjYyX2hwX21hc3Rlcl91cGRhdGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0Jc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaW50IHZhbCA9IHNwZWMtPm1hc3Rlcl9zdzsKKyNkZWZpbmUgYWxjMjYyX2hwX21hc3Rlcl91cGRhdGUJCWFsYzI2MF9ocF9tYXN0ZXJfdXBkYXRlCiAKLQkvKiBIUCAmIGxpbmUtb3V0ICovCi0Jc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHgxYiwgMCwKLQkJCQkgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKLQkJCQkgIHZhbCA/IFBJTl9IUCA6IDApOwotCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIDB4MTUsIDAsCi0JCQkJICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCi0JCQkJICB2YWwgPyBQSU5fSFAgOiAwKTsKLQkvKiBtb25vIChzcGVha2VyKSBkZXBlbmRpbmcgb24gdGhlIEhQIGphY2sgc2Vuc2UgKi8KLQl2YWwgPSB2YWwgJiYgIXNwZWMtPmphY2tfcHJlc2VudDsKLQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCAweDE2LCAwLAotCQkJCSAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAotCQkJCSAgdmFsID8gUElOX09VVCA6IDApOwotfQotCi1zdGF0aWMgdm9pZCBhbGMyNjJfaHBfYnBjX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgYWxjMjYyX2hwX2JwY19zZXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAotCXNwZWMtPmphY2tfcHJlc2VudCA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIDB4MWIpOwotCWFsYzI2Ml9ocF9tYXN0ZXJfdXBkYXRlKGNvZGVjKTsKKwlzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSAweDFiOworCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxNjsKKwlzcGVjLT5hdXRvbXV0ZSA9IDE7CisJc3BlYy0+YXV0b211dGVfbW9kZSA9IEFMQ19BVVRPTVVURV9QSU47CiB9CiAKLXN0YXRpYyB2b2lkIGFsYzI2Ml9ocF9icGNfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpCi17Ci0JaWYgKChyZXMgPj4gMjYpICE9IEFMQzg4MF9IUF9FVkVOVCkKLQkJcmV0dXJuOwotCWFsYzI2Ml9ocF9icGNfYXV0b211dGUoY29kZWMpOwotfQotCi1zdGF0aWMgdm9pZCBhbGMyNjJfaHBfd2lsZHdlc3RfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCitzdGF0aWMgdm9pZCBhbGMyNjJfaHBfd2lsZHdlc3Rfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAKLQlzcGVjLT5qYWNrX3ByZXNlbnQgPSBzbmRfaGRhX2phY2tfZGV0ZWN0KGNvZGVjLCAweDE1KTsKLQlhbGMyNjJfaHBfbWFzdGVyX3VwZGF0ZShjb2RlYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFsYzI2Ml9ocF93aWxkd2VzdF91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKLQkJCQkJICAgdW5zaWduZWQgaW50IHJlcykKLXsKLQlpZiAoKHJlcyA+PiAyNikgIT0gQUxDODgwX0hQX0VWRU5UKQotCQlyZXR1cm47Ci0JYWxjMjYyX2hwX3dpbGR3ZXN0X2F1dG9tdXRlKGNvZGVjKTsKKwlzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSAweDE1OworCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxNjsKKwlzcGVjLT5hdXRvbXV0ZSA9IDE7CisJc3BlYy0+YXV0b211dGVfbW9kZSA9IEFMQ19BVVRPTVVURV9QSU47CiB9CiAKICNkZWZpbmUgYWxjMjYyX2hwX21hc3Rlcl9zd19nZXQJCWFsYzI2MF9ocF9tYXN0ZXJfc3dfZ2V0Ci0KLXN0YXRpYyBpbnQgYWxjMjYyX2hwX21hc3Rlcl9zd19wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi17Ci0Jc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0Jc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaW50IHZhbCA9ICEhKnVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlOwotCi0JaWYgKHZhbCA9PSBzcGVjLT5tYXN0ZXJfc3cpCi0JCXJldHVybiAwOwotCXNwZWMtPm1hc3Rlcl9zdyA9IHZhbDsKLQlhbGMyNjJfaHBfbWFzdGVyX3VwZGF0ZShjb2RlYyk7Ci0JcmV0dXJuIDE7Ci19CisjZGVmaW5lIGFsYzI2Ml9ocF9tYXN0ZXJfc3dfcHV0CQlhbGMyNjBfaHBfbWFzdGVyX3N3X3B1dAogCiAjZGVmaW5lIEFMQzI2Ml9IUF9NQVNURVJfU1dJVENICQkJCQlcCiAJewkJCQkJCQlcCkBAIC0xMTI0NCw3ICsxMTQ4OCw3IEBACiAJfQogCiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjJfSFBfQlBDX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYyX0hQX0JQQ19taXhlcltdID0gewogCUFMQzI2Ml9IUF9NQVNURVJfU1dJVENILAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IFBsYXliYWNrIFN3aXRjaCIsIDB4MTUsIDB4MCwgSERBX09VVFBVVCksCkBAIC0xMTI2OCw3ICsxMTUxMiw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2Ml9IUF9CUENfV2lsZFdlc3RfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjJfSFBfQlBDX1dpbGRXZXN0X21peGVyW10gPSB7CiAJQUxDMjYyX0hQX01BU1RFUl9TV0lUQ0gsCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgxYiwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTExMjg4LDcgKzExNTMyLDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYyX0hQX0JQQ19XaWxkV2VzdF9vcHRpb25fbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjJfSFBfQlBDX1dpbGRXZXN0X29wdGlvbl9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIlJlYXIgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiUmVhciBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIlJlYXIgTWljIEJvb3N0IFZvbHVtZSIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCkBAIC0xMTMwMiw5ICsxMTU0NiwxMSBAQAogCiAJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxNTsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTQ7CisJc3BlYy0+YXV0b211dGUgPSAxOworCXNwZWMtPmF1dG9tdXRlX21vZGUgPSBBTENfQVVUT01VVEVfUElOOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYyX2hwX3Q1NzM1X21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYyX2hwX3Q1NzM1X21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MTQsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDB4MGQsIDB4MCwgSERBX09VVFBVVCksCkBAIC0xMTMxNSw3ICsxMTU2MSw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjJfaHBfdDU3MzVfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYyX2hwX3Q1NzM1X3ZlcmJzW10gPSB7CiAJezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCiAJezB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKIApAQCAtMTEzMjMsNyArMTE1NjksNyBAQAogCXsgfQogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2Ml9ocF9ycDU3MDBfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjJfaHBfcnA1NzAwX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDFiLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwZSwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTExMzMzLDcgKzExNTc5LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2Ml9ocF9ycDU3MDBfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYyX2hwX3JwNTcwMF92ZXJic1tdID0gewogCXsweDFiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCiAJezB4MTYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKIAl7MHgxNiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKQEAgLTExMzQ3LDcgKzExNTkzLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzI2Ml9ocF9ycDU3MDBfY2FwdHVyZV9zb3VyY2UgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjMjYyX2hwX3JwNTcwMF9jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gMSwKIAkuaXRlbXMgPSB7CiAJCXsgIkxpbmUiLCAweDEgfSwKQEAgLTExMzU1LDQ0ICsxMTYwMSw5IEBACiB9OwogCiAvKiBiaW5kIGhwIGFuZCBpbnRlcm5hbCBzcGVha2VyIG11dGUgKHdpdGggcGx1ZyBjaGVjaykgYXMgbWFzdGVyIHN3aXRjaCAqLwotc3RhdGljIHZvaWQgYWxjMjYyX2hpcHBvX21hc3Rlcl91cGRhdGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0Jc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaGRhX25pZF90IGhwX25pZCA9IHNwZWMtPmF1dG9jZmcuaHBfcGluc1swXTsKLQloZGFfbmlkX3QgbGluZV9uaWQgPSBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3BpbnNbMF07Ci0JaGRhX25pZF90IHNwZWFrZXJfbmlkID0gc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF07Ci0JdW5zaWduZWQgaW50IG11dGU7Ci0KLQkvKiBIUCAqLwotCW11dGUgPSBzcGVjLT5tYXN0ZXJfc3cgPyAwIDogSERBX0FNUF9NVVRFOwotCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgaHBfbmlkLCBIREFfT1VUUFVULCAwLAotCQkJCSBIREFfQU1QX01VVEUsIG11dGUpOwotCS8qIG11dGUgaW50ZXJuYWwgc3BlYWtlciBwZXIgamFjayBzZW5zZSAqLwotCWlmIChzcGVjLT5qYWNrX3ByZXNlbnQpCi0JCW11dGUgPSBIREFfQU1QX01VVEU7Ci0JaWYgKGxpbmVfbmlkKQotCQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIGxpbmVfbmlkLCBIREFfT1VUUFVULCAwLAotCQkJCQkgSERBX0FNUF9NVVRFLCBtdXRlKTsKLQlpZiAoc3BlYWtlcl9uaWQgJiYgc3BlYWtlcl9uaWQgIT0gbGluZV9uaWQpCi0JCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgc3BlYWtlcl9uaWQsIEhEQV9PVVRQVVQsIDAsCi0JCQkJCSBIREFfQU1QX01VVEUsIG11dGUpOwotfQotCisjZGVmaW5lIGFsYzI2Ml9oaXBwb19tYXN0ZXJfdXBkYXRlCWFsYzI2Ml9ocF9tYXN0ZXJfdXBkYXRlCiAjZGVmaW5lIGFsYzI2Ml9oaXBwb19tYXN0ZXJfc3dfZ2V0CWFsYzI2Ml9ocF9tYXN0ZXJfc3dfZ2V0Ci0KLXN0YXRpYyBpbnQgYWxjMjYyX2hpcHBvX21hc3Rlcl9zd19wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkJICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi17Ci0Jc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0Jc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaW50IHZhbCA9ICEhKnVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlOwotCi0JaWYgKHZhbCA9PSBzcGVjLT5tYXN0ZXJfc3cpCi0JCXJldHVybiAwOwotCXNwZWMtPm1hc3Rlcl9zdyA9IHZhbDsKLQlhbGMyNjJfaGlwcG9fbWFzdGVyX3VwZGF0ZShjb2RlYyk7Ci0JcmV0dXJuIDE7Ci19CisjZGVmaW5lIGFsYzI2Ml9oaXBwb19tYXN0ZXJfc3dfcHV0CWFsYzI2Ml9ocF9tYXN0ZXJfc3dfcHV0CiAKICNkZWZpbmUgQUxDMjYyX0hJUFBPX01BU1RFUl9TV0lUQ0gJCQkJXAogCXsJCQkJCQkJXApAQCAtMTE0MDksNyArMTE2MjAsNyBAQAogCQkJICAgICAoU1VCREVWX1NQRUFLRVIoMCkgPDwgMTYpLCBcCiAJfQogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYyX2hpcHBvX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYyX2hpcHBvX21peGVyW10gPSB7CiAJQUxDMjYyX0hJUFBPX01BU1RFUl9TV0lUQ0gsCiAJSERBX0NPREVDX1ZPTFVNRSgiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCkBAIC0xMTQyNiw3ICsxMTYzNyw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2Ml9oaXBwbzFfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjJfaGlwcG8xX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJQUxDMjYyX0hJUFBPX01BU1RFUl9TV0lUQ0gsCiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKQEAgLTExNDQzLDI4ICsxMTY1NCwxNCBAQAogfTsKIAogLyogbXV0ZS91bm11dGUgaW50ZXJuYWwgc3BlYWtlciBhY2NvcmRpbmcgdG8gdGhlIGhwIGphY2sgYW5kIG11dGUgc3RhdGUgKi8KLXN0YXRpYyB2b2lkIGFsYzI2Ml9oaXBwb19hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKLXsKLQlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQloZGFfbmlkX3QgaHBfbmlkID0gc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdOwotCi0Jc3BlYy0+amFja19wcmVzZW50ID0gc25kX2hkYV9qYWNrX2RldGVjdChjb2RlYywgaHBfbmlkKTsKLQlhbGMyNjJfaGlwcG9fbWFzdGVyX3VwZGF0ZShjb2RlYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFsYzI2Ml9oaXBwb191bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlcykKLXsKLQlpZiAoKHJlcyA+PiAyNikgIT0gQUxDODgwX0hQX0VWRU5UKQotCQlyZXR1cm47Ci0JYWxjMjYyX2hpcHBvX2F1dG9tdXRlKGNvZGVjKTsKLX0KLQogc3RhdGljIHZvaWQgYWxjMjYyX2hpcHBvX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCiAJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxNTsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTQ7CisJc3BlYy0+YXV0b211dGUgPSAxOworCXNwZWMtPmF1dG9tdXRlX21vZGUgPSBBTENfQVVUT01VVEVfQU1QOwogfQogCiBzdGF0aWMgdm9pZCBhbGMyNjJfaGlwcG8xX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQpAQCAtMTE0NzMsMTAgKzExNjcwLDEyIEBACiAKIAlzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSAweDFiOwogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxNDsKKwlzcGVjLT5hdXRvbXV0ZSA9IDE7CisJc3BlYy0+YXV0b211dGVfbW9kZSA9IEFMQ19BVVRPTVVURV9BTVA7CiB9CiAKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2Ml9zb255X21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYyX3NvbnlfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAlBTEMyNjJfSElQUE9fTUFTVEVSX1NXSVRDSCwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLApAQCAtMTE0ODYsNyArMTE2ODUsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjJfYmVucV90MzFfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjJfYmVucV90MzFfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAlBTEMyNjJfSElQUE9fTUFTVEVSX1NXSVRDSCwKIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MTUsIDB4MCwgSERBX09VVFBVVCksCkBAIC0xMTQ5Nyw3ICsxMTY5Niw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2Ml90eWFuX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYyX3R5YW5fbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQklORF9NVVRFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJBdXggUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNiwgSERBX0lOUFVUKSwKQEAgLTExNTEzLDcgKzExNzEyLDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2Ml90eWFuX3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzI2Ml90eWFuX3ZlcmJzW10gPSB7CiAJLyogSGVhZHBob25lIGF1dG9tdXRlICovCiAJezB4MWIsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBTEM4ODBfSFBfRVZFTlR9LAogCXsweDFiLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCkBAIC0xMTUzNSw2ICsxMTczNCw4IEBACiAKIAlzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSAweDFiOwogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxNTsKKwlzcGVjLT5hdXRvbXV0ZSA9IDE7CisJc3BlYy0+YXV0b211dGVfbW9kZSA9IEFMQ19BVVRPTVVURV9BTVA7CiB9CiAKIApAQCAtMTE1NDQsNyArMTE3NDUsNyBAQAogLyoKICAqIGdlbmVyaWMgaW5pdGlhbGl6YXRpb24gb2YgQURDLCBpbnB1dCBtaXhlcnMgYW5kIG91dHB1dCBtaXhlcnMKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjJfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGMyNjJfaW5pdF92ZXJic1tdID0gewogCS8qCiAJICogVW5tdXRlIEFEQzAtMiBhbmQgc2V0IHRoZSBkZWZhdWx0IGlucHV0IHRvIG1pYy1pbgogCSAqLwpAQCAtMTE2MjAsMTMgKzExODIxLDEzIEBACiAJeyB9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2Ml9lYXBkX3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzI2Ml9lYXBkX3ZlcmJzW10gPSB7CiAJezB4MTQsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLCAyfSwKIAl7MHgxNSwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDJ9LAogCXsgfQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjJfaGlwcG8xX3Vuc29sX3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzI2Ml9oaXBwbzFfdW5zb2xfdmVyYnNbXSA9IHsKIAl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweGMwfSwKIAl7MHgxYiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAogCXsweDFiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweDAwMDB9LApAQCAtMTE2MzYsNyArMTE4MzcsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2Ml9zb255X3Vuc29sX3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzI2Ml9zb255X3Vuc29sX3ZlcmJzW10gPSB7CiAJezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHhjMH0sCiAJezB4MTUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKIAl7MHgxOSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDI0fSwJLy8gRnJvbnQgTWljCkBAIC0xMTY0Niw3ICsxMTg0Nyw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjJfdG9zaGliYV9zMDZfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjJfdG9zaGliYV9zMDZfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgxNCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MTUsIDB4MCwgSERBX09VVFBVVCksCkBAIC0xMTY1NSw3ICsxMTg1Niw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjJfdG9zaGliYV9zMDZfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYyX3Rvc2hpYmFfczA2X3ZlcmJzW10gPSB7CiAJezB4MTIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKIAl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKIAl7MHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LApAQCAtMTE2NzgsNiArMTE4NzksOCBAQAogCXNwZWMtPmludF9taWMucGluID0gMHgxMjsKIAlzcGVjLT5pbnRfbWljLm11eF9pZHggPSA5OwogCXNwZWMtPmF1dG9fbWljID0gMTsKKwlzcGVjLT5hdXRvbXV0ZSA9IDE7CisJc3BlYy0+YXV0b211dGVfbW9kZSA9IEFMQ19BVVRPTVVURV9QSU47CiB9CiAKIC8qCkBAIC0xMTY4Nyw3ICsxMTg5MCw3IEBACiAgKiAgMHgxOCA9IGV4dGVybmFsIG1pYwogICovCiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjJfbmVjX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYyX25lY19taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUVfTU9OTygiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBlLCAxLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFX01PTk8oIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgxNiwgMCwgMHgwLCBIREFfT1VUUFVUKSwKIApAQCAtMTE3MDAsNyArMTE5MDMsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYyX25lY192ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGMyNjJfbmVjX3ZlcmJzW10gPSB7CiAJLyogVW5tdXRlIFNwZWFrZXIgKi8KIAl7MHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAogCkBAIC0xMTcyMyw3ICsxMTkyNiw3IEBACiAKICNkZWZpbmUgQUxDX0hQX0VWRU5UCTB4MzcKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjJfZnVqaXRzdV91bnNvbF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGMyNjJfZnVqaXRzdV91bnNvbF92ZXJic1tdID0gewogCXsweDE0LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQUxDX0hQX0VWRU5UfSwKIAl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAogCXsweDFiLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQUxDX0hQX0VWRU5UfSwKQEAgLTExNzMxLDIwICsxMTkzNCwyMCBAQAogCXt9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2Ml9sZW5vdm9fMzAwMF91bnNvbF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGMyNjJfbGVub3ZvXzMwMDBfdW5zb2xfdmVyYnNbXSA9IHsKIAl7MHgxYiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IEFMQ19IUF9FVkVOVH0sCiAJezB4MWIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjJfbGVub3ZvXzMwMDBfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGMyNjJfbGVub3ZvXzMwMDBfaW5pdF92ZXJic1tdID0gewogCS8qIEZyb250IE1pYyBwaW46IGlucHV0IHZyZWYgYXQgNTAlICovCiAJezB4MTksIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY1MH0sCiAJezB4MTksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCiAJe30KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGMyNjJfZnVqaXRzdV9jYXB0dXJlX3NvdXJjZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGMyNjJfZnVqaXRzdV9jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gMywKIAkuaXRlbXMgPSB7CiAJCXsgIk1pYyIsIDB4MCB9LApAQCAtMTE3NTMsNyArMTE5NTYsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjMjYyX0hQX2NhcHR1cmVfc291cmNlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzI2Ml9IUF9jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gNSwKIAkuaXRlbXMgPSB7CiAJCXsgIk1pYyIsIDB4MCB9LApAQCAtMTE3NjQsNyArMTE5NjcsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjMjYyX0hQX0Q3MDAwX2NhcHR1cmVfc291cmNlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzI2Ml9IUF9ENzAwMF9jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gNCwKIAkuaXRlbXMgPSB7CiAJCXsgIk1pYyIsIDB4MCB9LApAQCAtMTE3NzQsNDQgKzExOTc3LDE5IEBACiAJfSwKIH07CiAKLS8qIG11dGUvdW5tdXRlIGludGVybmFsIHNwZWFrZXIgYWNjb3JkaW5nIHRvIHRoZSBocCBqYWNrcyBhbmQgbXV0ZSBzdGF0ZSAqLwotc3RhdGljIHZvaWQgYWxjMjYyX2Z1aml0c3VfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGludCBmb3JjZSkKK3N0YXRpYyB2b2lkIGFsYzI2Ml9mdWppdHN1X3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCXVuc2lnbmVkIGludCBtdXRlOwogCi0JaWYgKGZvcmNlIHx8ICFzcGVjLT5zZW5zZV91cGRhdGVkKSB7Ci0JCXNwZWMtPmphY2tfcHJlc2VudCA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIDB4MTQpIHx8Ci0JCQkJICAgICBzbmRfaGRhX2phY2tfZGV0ZWN0KGNvZGVjLCAweDFiKTsKLQkJc3BlYy0+c2Vuc2VfdXBkYXRlZCA9IDE7Ci0JfQotCS8qIHVubXV0ZSBpbnRlcm5hbCBzcGVha2VyIG9ubHkgaWYgYm90aCBIUHMgYXJlIHVucGx1Z2dlZCBhbmQKLQkgKiBtYXN0ZXIgc3dpdGNoIGlzIG9uCi0JICovCi0JaWYgKHNwZWMtPmphY2tfcHJlc2VudCkKLQkJbXV0ZSA9IEhEQV9BTVBfTVVURTsKLQllbHNlCi0JCW11dGUgPSBzbmRfaGRhX2NvZGVjX2FtcF9yZWFkKGNvZGVjLCAweDE0LCAwLCBIREFfT1VUUFVULCAwKTsKLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MTUsIEhEQV9PVVRQVVQsIDAsCi0JCQkJIEhEQV9BTVBfTVVURSwgbXV0ZSk7Ci19Ci0KLS8qIHVuc29saWNpdGVkIGV2ZW50IGZvciBIUCBqYWNrIHNlbnNpbmcgKi8KLXN0YXRpYyB2b2lkIGFsYzI2Ml9mdWppdHN1X3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAotCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmVzKQotewotCWlmICgocmVzID4+IDI2KSAhPSBBTENfSFBfRVZFTlQpCi0JCXJldHVybjsKLQlhbGMyNjJfZnVqaXRzdV9hdXRvbXV0ZShjb2RlYywgMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFsYzI2Ml9mdWppdHN1X2luaXRfaG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKLXsKLQlhbGMyNjJfZnVqaXRzdV9hdXRvbXV0ZShjb2RlYywgMSk7CisJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxNDsKKwlzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMV0gPSAweDFiOworCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxNTsKKwlzcGVjLT5hdXRvbXV0ZSA9IDE7CisJc3BlYy0+YXV0b211dGVfbW9kZSA9IEFMQ19BVVRPTVVURV9BTVA7CiB9CiAKIC8qIGJpbmQgdm9sdW1lcyBvZiBib3RoIE5JRCAweDBjIGFuZCAweDBkICovCi1zdGF0aWMgc3RydWN0IGhkYV9iaW5kX2N0bHMgYWxjMjYyX2Z1aml0c3VfYmluZF9tYXN0ZXJfdm9sID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfYmluZF9jdGxzIGFsYzI2Ml9mdWppdHN1X2JpbmRfbWFzdGVyX3ZvbCA9IHsKIAkub3BzID0gJnNuZF9oZGFfYmluZF92b2wsCiAJLnZhbHVlcyA9IHsKIAkJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDBjLCAzLCAwLCBIREFfT1VUUFVUKSwKQEAgLTExODIwLDc4ICsxMTk5OCwxNSBAQAogCX0sCiB9OwogCi0vKiBtdXRlL3VubXV0ZSBpbnRlcm5hbCBzcGVha2VyIGFjY29yZGluZyB0byB0aGUgaHAgamFjayBhbmQgbXV0ZSBzdGF0ZSAqLwotc3RhdGljIHZvaWQgYWxjMjYyX2xlbm92b18zMDAwX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBpbnQgZm9yY2UpCi17Ci0Jc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JdW5zaWduZWQgaW50IG11dGU7Ci0KLQlpZiAoZm9yY2UgfHwgIXNwZWMtPnNlbnNlX3VwZGF0ZWQpIHsKLQkJc3BlYy0+amFja19wcmVzZW50ID0gc25kX2hkYV9qYWNrX2RldGVjdChjb2RlYywgMHgxYik7Ci0JCXNwZWMtPnNlbnNlX3VwZGF0ZWQgPSAxOwotCX0KLQlpZiAoc3BlYy0+amFja19wcmVzZW50KSB7Ci0JCS8qIG11dGUgaW50ZXJuYWwgc3BlYWtlciAqLwotCQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MTQsIEhEQV9PVVRQVVQsIDAsCi0JCQkJCSBIREFfQU1QX01VVEUsIEhEQV9BTVBfTVVURSk7Ci0JCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxNiwgSERBX09VVFBVVCwgMCwKLQkJCQkJIEhEQV9BTVBfTVVURSwgSERBX0FNUF9NVVRFKTsKLQl9IGVsc2UgewotCQkvKiB1bm11dGUgaW50ZXJuYWwgc3BlYWtlciBpZiBuZWNlc3NhcnkgKi8KLQkJbXV0ZSA9IHNuZF9oZGFfY29kZWNfYW1wX3JlYWQoY29kZWMsIDB4MWIsIDAsIEhEQV9PVVRQVVQsIDApOwotCQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MTQsIEhEQV9PVVRQVVQsIDAsCi0JCQkJCSBIREFfQU1QX01VVEUsIG11dGUpOwotCQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MTYsIEhEQV9PVVRQVVQsIDAsCi0JCQkJCSBIREFfQU1QX01VVEUsIG11dGUpOwotCX0KLX0KLQotLyogdW5zb2xpY2l0ZWQgZXZlbnQgZm9yIEhQIGphY2sgc2Vuc2luZyAqLwotc3RhdGljIHZvaWQgYWxjMjYyX2xlbm92b18zMDAwX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAotCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmVzKQotewotCWlmICgocmVzID4+IDI2KSAhPSBBTENfSFBfRVZFTlQpCi0JCXJldHVybjsKLQlhbGMyNjJfbGVub3ZvXzMwMDBfYXV0b211dGUoY29kZWMsIDEpOwotfQotCi1zdGF0aWMgaW50IGFtcF9zdGVyZW9fbXV0ZV91cGRhdGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCi0JCQkJICBpbnQgZGlyLCBpbnQgaWR4LCBsb25nICp2YWxwKQotewotCWludCBpLCBjaGFuZ2UgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IDI7IGkrKywgdmFscCsrKQotCQljaGFuZ2UgfD0gc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCBuaWQsIGksIGRpciwgaWR4LAotCQkJCQkJICAgSERBX0FNUF9NVVRFLAotCQkJCQkJICAgKnZhbHAgPyAwIDogSERBX0FNUF9NVVRFKTsKLQlyZXR1cm4gY2hhbmdlOwotfQotCi0vKiBiaW5kIGhwIGFuZCBpbnRlcm5hbCBzcGVha2VyIG11dGUgKHdpdGggcGx1ZyBjaGVjaykgKi8KLXN0YXRpYyBpbnQgYWxjMjYyX2Z1aml0c3VfbWFzdGVyX3N3X3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQotewotCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCWxvbmcgKnZhbHAgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZTsKLQlpbnQgY2hhbmdlOwotCi0JY2hhbmdlID0gYW1wX3N0ZXJlb19tdXRlX3VwZGF0ZShjb2RlYywgMHgxNCwgSERBX09VVFBVVCwgMCwgdmFscCk7Ci0JY2hhbmdlIHw9IGFtcF9zdGVyZW9fbXV0ZV91cGRhdGUoY29kZWMsIDB4MWIsIEhEQV9PVVRQVVQsIDAsIHZhbHApOwotCWlmIChjaGFuZ2UpCi0JCWFsYzI2Ml9mdWppdHN1X2F1dG9tdXRlKGNvZGVjLCAwKTsKLQlyZXR1cm4gY2hhbmdlOwotfQotCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYyX2Z1aml0c3VfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjJfZnVqaXRzdV9taXhlcltdID0gewogCUhEQV9CSU5EX1ZPTCgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsICZhbGMyNjJfZnVqaXRzdV9iaW5kX21hc3Rlcl92b2wpLAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAotCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9BTVBfRkxBRywKLQkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfaW5mbywKLQkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQsCi0JCS5wdXQgPSBhbGMyNjJfZnVqaXRzdV9tYXN0ZXJfc3dfcHV0LAotCQkucHJpdmF0ZV92YWx1ZSA9IEhEQV9DT01QT1NFX0FNUF9WQUwoMHgxNCwgMywgMCwgSERBX09VVFBVVCksCisJCS5zdWJkZXZpY2UgPSBIREFfU1VCREVWX05JRF9GTEFHIHwgMHgxNCwKKwkJLmluZm8gPSBzbmRfY3RsX2Jvb2xlYW5fbW9ub19pbmZvLAorCQkuZ2V0ID0gYWxjMjYyX2hwX21hc3Rlcl9zd19nZXQsCisJCS5wdXQgPSBhbGMyNjJfaHBfbWFzdGVyX3N3X3B1dCwKIAl9LAogCXsKIAkJLmlmYWNlID0gTklEX01BUFBJTkcsCkBAIC0xMTkwOSwzMCArMTIwMjQsMjYgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi0vKiBiaW5kIGhwIGFuZCBpbnRlcm5hbCBzcGVha2VyIG11dGUgKHdpdGggcGx1ZyBjaGVjaykgKi8KLXN0YXRpYyBpbnQgYWxjMjYyX2xlbm92b18zMDAwX21hc3Rlcl9zd19wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3N0YXRpYyB2b2lkIGFsYzI2Ml9sZW5vdm9fMzAwMF9zZXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlsb25nICp2YWxwID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWU7Ci0JaW50IGNoYW5nZTsKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAotCWNoYW5nZSA9IGFtcF9zdGVyZW9fbXV0ZV91cGRhdGUoY29kZWMsIDB4MWIsIEhEQV9PVVRQVVQsIDAsIHZhbHApOwotCWlmIChjaGFuZ2UpCi0JCWFsYzI2Ml9sZW5vdm9fMzAwMF9hdXRvbXV0ZShjb2RlYywgMCk7Ci0JcmV0dXJuIGNoYW5nZTsKKwlzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSAweDFiOworCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxNDsKKwlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1sxXSA9IDB4MTY7CisJc3BlYy0+YXV0b211dGUgPSAxOworCXNwZWMtPmF1dG9tdXRlX21vZGUgPSBBTENfQVVUT01VVEVfQU1QOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYyX2xlbm92b18zMDAwX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYyX2xlbm92b18zMDAwX21peGVyW10gPSB7CiAJSERBX0JJTkRfVk9MKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgJmFsYzI2Ml9mdWppdHN1X2JpbmRfbWFzdGVyX3ZvbCksCiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCi0JCS5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHLAotCQkuaW5mbyA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9pbmZvLAotCQkuZ2V0ID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2dldCwKLQkJLnB1dCA9IGFsYzI2Ml9sZW5vdm9fMzAwMF9tYXN0ZXJfc3dfcHV0LAotCQkucHJpdmF0ZV92YWx1ZSA9IEhEQV9DT01QT1NFX0FNUF9WQUwoMHgxYiwgMywgMCwgSERBX09VVFBVVCksCisJCS5zdWJkZXZpY2UgPSBIREFfU1VCREVWX05JRF9GTEFHIHwgMHgxYiwKKwkJLmluZm8gPSBzbmRfY3RsX2Jvb2xlYW5fbW9ub19pbmZvLAorCQkuZ2V0ID0gYWxjMjYyX2hwX21hc3Rlcl9zd19nZXQsCisJCS5wdXQgPSBhbGMyNjJfaHBfbWFzdGVyX3N3X3B1dCwKIAl9LAogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCkBAIC0xMTk0NSw3ICsxMjA1Niw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2Ml90b3NoaWJhX3J4MV9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2Ml90b3NoaWJhX3J4MV9taXhlcltdID0gewogCUhEQV9CSU5EX1ZPTCgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsICZhbGMyNjJfZnVqaXRzdV9iaW5kX21hc3Rlcl92b2wpLAogCUFMQzI2Ml9ISVBQT19NQVNURVJfU1dJVENILAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCkBAIC0xMTk1OCwxMyArMTIwNjksMTMgQEAKIH07CiAKIC8qIGFkZGl0aW9uYWwgaW5pdCB2ZXJicyBmb3IgQmVucSBsYXB0b3BzICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2Ml9FQVBEX3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzI2Ml9FQVBEX3ZlcmJzW10gPSB7CiAJezB4MjAsIEFDX1ZFUkJfU0VUX0NPRUZfSU5ERVgsIDB4MDd9LAogCXsweDIwLCBBQ19WRVJCX1NFVF9QUk9DX0NPRUYsICAweDMwNzB9LAogCXt9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2Ml9iZW5xX3QzMV9FQVBEX3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzI2Ml9iZW5xX3QzMV9FQVBEX3ZlcmJzW10gPSB7CiAJezB4MTUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKIAl7MHgxOSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDI0fSwKIApAQCAtMTE5NzQsNyArMTIwODUsNyBAQAogfTsKIAogLyogU2Ftc3VuZyBRMSBVbHRyYSBWaXN0YSBtb2RlbCBzZXR1cCAqLwotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2Ml91bHRyYV9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2Ml91bHRyYV9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9CSU5EX01VVEUoIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCAweDBjLCAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLApAQCAtMTE5ODQsNyArMTIwOTUsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYyX3VsdHJhX3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzI2Ml91bHRyYV92ZXJic1tdID0gewogCS8qIG91dHB1dCBtaXhlciAqLwogCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCiAJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKQEAgLTEyMDQ3LDcgKzEyMTU4LDcgQEAKIAlhbGMyNjJfdWx0cmFfYXV0b211dGUoY29kZWMpOwogfQogCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjMjYyX3VsdHJhX2NhcHR1cmVfc291cmNlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzI2Ml91bHRyYV9jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gMiwKIAkuaXRlbXMgPSB7CiAJCXsgIk1pYyIsIDB4MSB9LApAQCAtMTIwNzMsNyArMTIxODQsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjJfdWx0cmFfY2FwdHVyZV9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2Ml91bHRyYV9jYXB0dXJlX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDA3LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwNywgMHgwLCBIREFfSU5QVVQpLAogCXsKQEAgLTEyMTQ4LDkgKzEyMjU5LDkgQEAKIAogCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gMTsJLyogb25seSB1c2Ugb25lIGRhYyAqLwogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gc3BlYy0+cHJpdmF0ZV9kYWNfbmlkczsKLQlzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1swXSA9IDI7CisJc3BlYy0+cHJpdmF0ZV9kYWNfbmlkc1swXSA9IDI7CiAKLQlwZnggPSBhbGNfZ2V0X2xpbmVfb3V0X3BmeChjZmcsIHRydWUpOworCXBmeCA9IGFsY19nZXRfbGluZV9vdXRfcGZ4KHNwZWMsIHRydWUpOwogCWlmICghcGZ4KQogCQlwZnggPSAiRnJvbnQiOwogCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKQEAgLTEyMjA0LDcgKzEyMzE1LDcgQEAKIC8qCiAgKiBnZW5lcmljIGluaXRpYWxpemF0aW9uIG9mIEFEQywgaW5wdXQgbWl4ZXJzIGFuZCBvdXRwdXQgbWl4ZXJzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYyX3ZvbHVtZV9pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzI2Ml92b2x1bWVfaW5pdF92ZXJic1tdID0gewogCS8qCiAJICogVW5tdXRlIEFEQzAtMiBhbmQgc2V0IHRoZSBkZWZhdWx0IGlucHV0IHRvIG1pYy1pbgogCSAqLwpAQCAtMTIyNjUsNyArMTIzNzYsNyBAQAogCXsgfQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjJfSFBfQlBDX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYyX0hQX0JQQ19pbml0X3ZlcmJzW10gPSB7CiAJLyoKIAkgKiBVbm11dGUgQURDMC0yIGFuZCBzZXQgdGhlIGRlZmF1bHQgaW5wdXQgdG8gbWljLWluCiAJICovCkBAIC0xMjM2OSw3ICsxMjQ4MCw3IEBACiAJeyB9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2Ml9IUF9CUENfV2lsZFdlc3RfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGMyNjJfSFBfQlBDX1dpbGRXZXN0X2luaXRfdmVyYnNbXSA9IHsKIAkvKgogCSAqIFVubXV0ZSBBREMwLTIgYW5kIHNldCB0aGUgZGVmYXVsdCBpbnB1dCB0byBtaWMtaW4KIAkgKi8KQEAgLTEyNDY1LDcgKzEyNTc2LDcgQEAKIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYyX3Rvc2hpYmFfcngxX3Vuc29sX3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzI2Ml90b3NoaWJhX3J4MV91bnNvbF92ZXJic1tdID0gewogCiAJezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAkvKiBGcm9udCBTcGVha2VyICovCiAJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIH0sCkBAIC0xMjUwMSw3ICsxMjYxMiw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGMyNjJfZml4dXBfdGJsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjMjYyX2ZpeHVwX3RibFtdID0gewogCVNORF9QQ0lfUVVJUksoMHgxNzM0LCAweDExNDcsICJGU0MgQ2Vsc2l1cyBIMjcwIiwgUElORklYX0ZTQ19IMjcwKSwKIAl7fQogfTsKQEAgLTEyNTI0LDcgKzEyNjM1LDcgQEAKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlpbnQgZXJyOwotCXN0YXRpYyBoZGFfbmlkX3QgYWxjMjYyX2lnbm9yZVtdID0geyAweDFkLCAwIH07CisJc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBhbGMyNjJfaWdub3JlW10gPSB7IDB4MWQsIDAgfTsKIAogCWVyciA9IHNuZF9oZGFfcGFyc2VfcGluX2RlZl9jb25maWcoY29kZWMsICZzcGVjLT5hdXRvY2ZnLAogCQkJCQkgICBhbGMyNjJfaWdub3JlKTsKQEAgLTEyNjA5LDcgKzEyNzIwLDcgQEAKIAlbQUxDMjYyX0FVVE9dCQk9ICJhdXRvIiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGMyNjJfY2ZnX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzI2Ml9jZmdfdGJsW10gPSB7CiAJU05EX1BDSV9RVUlSSygweDEwMDIsIDB4NDM3YiwgIkhpcHBvIiwgQUxDMjYyX0hJUFBPKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzMywgMHg4ODk1LCAiTkVDIFZlcnNhIFM5MTAwIiwgQUxDMjYyX05FQyksCiAJU05EX1BDSV9RVUlSS19NQVNLKDB4MTAzYywgMHhmZjAwLCAweDEyMDAsICJIUCB4dyBzZXJpZXMiLApAQCAtMTI2NjEsNyArMTI3NzIsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgc3RydWN0IGFsY19jb25maWdfcHJlc2V0IGFsYzI2Ml9wcmVzZXRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGFsY19jb25maWdfcHJlc2V0IGFsYzI2Ml9wcmVzZXRzW10gPSB7CiAJW0FMQzI2Ml9CQVNJQ10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzI2Ml9iYXNlX21peGVyIH0sCiAJCS5pbml0X3ZlcmJzID0geyBhbGMyNjJfaW5pdF92ZXJicyB9LApAQCAtMTI2ODIsOSArMTI3OTMsOSBAQAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjYyX21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2Ml9tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGMyNjJfY2FwdHVyZV9zb3VyY2UsCi0JCS51bnNvbF9ldmVudCA9IGFsYzI2Ml9oaXBwb191bnNvbF9ldmVudCwKKwkJLnVuc29sX2V2ZW50ID0gYWxjX3NrdV91bnNvbF9ldmVudCwKIAkJLnNldHVwID0gYWxjMjYyX2hpcHBvX3NldHVwLAotCQkuaW5pdF9ob29rID0gYWxjMjYyX2hpcHBvX2F1dG9tdXRlLAorCQkuaW5pdF9ob29rID0gYWxjX2luaXRob29rLAogCX0sCiAJW0FMQzI2Ml9ISVBQT18xXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjMjYyX2hpcHBvMV9taXhlciB9LApAQCAtMTI2OTYsOSArMTI4MDcsOSBAQAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjYyX21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2Ml9tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGMyNjJfY2FwdHVyZV9zb3VyY2UsCi0JCS51bnNvbF9ldmVudCA9IGFsYzI2Ml9oaXBwb191bnNvbF9ldmVudCwKKwkJLnVuc29sX2V2ZW50ID0gYWxjX3NrdV91bnNvbF9ldmVudCwKIAkJLnNldHVwID0gYWxjMjYyX2hpcHBvMV9zZXR1cCwKLQkJLmluaXRfaG9vayA9IGFsYzI2Ml9oaXBwb19hdXRvbXV0ZSwKKwkJLmluaXRfaG9vayA9IGFsY19pbml0aG9vaywKIAl9LAogCVtBTEMyNjJfRlVKSVRTVV0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzI2Ml9mdWppdHN1X21peGVyIH0sCkBAIC0xMjcxMSw4ICsxMjgyMiw5IEBACiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGMyNjJfbW9kZXMpLAogCQkuY2hhbm5lbF9tb2RlID0gYWxjMjYyX21vZGVzLAogCQkuaW5wdXRfbXV4ID0gJmFsYzI2Ml9mdWppdHN1X2NhcHR1cmVfc291cmNlLAotCQkudW5zb2xfZXZlbnQgPSBhbGMyNjJfZnVqaXRzdV91bnNvbF9ldmVudCwKLQkJLmluaXRfaG9vayA9IGFsYzI2Ml9mdWppdHN1X2luaXRfaG9vaywKKwkJLnVuc29sX2V2ZW50ID0gYWxjX3NrdV91bnNvbF9ldmVudCwKKwkJLnNldHVwID0gYWxjMjYyX2Z1aml0c3Vfc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGNfaW5pdGhvb2ssCiAJfSwKIAlbQUxDMjYyX0hQX0JQQ10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzI2Ml9IUF9CUENfbWl4ZXIgfSwKQEAgLTEyNzIzLDggKzEyODM1LDkgQEAKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzI2Ml9tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGMyNjJfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjMjYyX0hQX2NhcHR1cmVfc291cmNlLAotCQkudW5zb2xfZXZlbnQgPSBhbGMyNjJfaHBfYnBjX3Vuc29sX2V2ZW50LAotCQkuaW5pdF9ob29rID0gYWxjMjYyX2hwX2JwY19hdXRvbXV0ZSwKKwkJLnVuc29sX2V2ZW50ID0gYWxjX3NrdV91bnNvbF9ldmVudCwKKwkJLnNldHVwID0gYWxjMjYyX2hwX2JwY19zZXR1cCwKKwkJLmluaXRfaG9vayA9IGFsY19pbml0aG9vaywKIAl9LAogCVtBTEMyNjJfSFBfQlBDX0Q3MDAwX1dGXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjMjYyX0hQX0JQQ19XaWxkV2VzdF9taXhlciB9LApAQCAtMTI3MzUsOCArMTI4NDgsOSBAQAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjYyX21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2Ml9tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGMyNjJfSFBfRDcwMDBfY2FwdHVyZV9zb3VyY2UsCi0JCS51bnNvbF9ldmVudCA9IGFsYzI2Ml9ocF93aWxkd2VzdF91bnNvbF9ldmVudCwKLQkJLmluaXRfaG9vayA9IGFsYzI2Ml9ocF93aWxkd2VzdF9hdXRvbXV0ZSwKKwkJLnVuc29sX2V2ZW50ID0gYWxjX3NrdV91bnNvbF9ldmVudCwKKwkJLnNldHVwID0gYWxjMjYyX2hwX3dpbGR3ZXN0X3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjX2luaXRob29rLAogCX0sCiAJW0FMQzI2Ml9IUF9CUENfRDcwMDBfV0xdID0gewogCQkubWl4ZXJzID0geyBhbGMyNjJfSFBfQlBDX1dpbGRXZXN0X21peGVyLApAQCAtMTI3NDgsOCArMTI4NjIsOSBAQAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjYyX21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2Ml9tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGMyNjJfSFBfRDcwMDBfY2FwdHVyZV9zb3VyY2UsCi0JCS51bnNvbF9ldmVudCA9IGFsYzI2Ml9ocF93aWxkd2VzdF91bnNvbF9ldmVudCwKLQkJLmluaXRfaG9vayA9IGFsYzI2Ml9ocF93aWxkd2VzdF9hdXRvbXV0ZSwKKwkJLnVuc29sX2V2ZW50ID0gYWxjX3NrdV91bnNvbF9ldmVudCwKKwkJLnNldHVwID0gYWxjMjYyX2hwX3dpbGR3ZXN0X3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjX2luaXRob29rLAogCX0sCiAJW0FMQzI2Ml9IUF9UQ19UNTczNV0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzI2Ml9ocF90NTczNV9taXhlciB9LApAQCAtMTI3OTIsOSArMTI5MDcsOSBAQAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjYyX21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2Ml9tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGMyNjJfY2FwdHVyZV9zb3VyY2UsCi0JCS51bnNvbF9ldmVudCA9IGFsYzI2Ml9oaXBwb191bnNvbF9ldmVudCwKKwkJLnVuc29sX2V2ZW50ID0gYWxjX3NrdV91bnNvbF9ldmVudCwKIAkJLnNldHVwID0gYWxjMjYyX2hpcHBvX3NldHVwLAotCQkuaW5pdF9ob29rID0gYWxjMjYyX2hpcHBvX2F1dG9tdXRlLAorCQkuaW5pdF9ob29rID0gYWxjX2luaXRob29rLAogCX0sCiAJW0FMQzI2Ml9CRU5RX1QzMV0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzI2Ml9iZW5xX3QzMV9taXhlciB9LApAQCAtMTI4MDYsOSArMTI5MjEsOSBAQAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjYyX21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2Ml9tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGMyNjJfY2FwdHVyZV9zb3VyY2UsCi0JCS51bnNvbF9ldmVudCA9IGFsYzI2Ml9oaXBwb191bnNvbF9ldmVudCwKKwkJLnVuc29sX2V2ZW50ID0gYWxjX3NrdV91bnNvbF9ldmVudCwKIAkJLnNldHVwID0gYWxjMjYyX2hpcHBvX3NldHVwLAotCQkuaW5pdF9ob29rID0gYWxjMjYyX2hpcHBvX2F1dG9tdXRlLAorCQkuaW5pdF9ob29rID0gYWxjX2luaXRob29rLAogCX0sCiAJW0FMQzI2Ml9VTFRSQV0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzI2Ml91bHRyYV9taXhlciB9LApAQCAtMTI4MzcsNyArMTI5NTIsOSBAQAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjYyX21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2Ml9tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGMyNjJfZnVqaXRzdV9jYXB0dXJlX3NvdXJjZSwKLQkJLnVuc29sX2V2ZW50ID0gYWxjMjYyX2xlbm92b18zMDAwX3Vuc29sX2V2ZW50LAorCQkudW5zb2xfZXZlbnQgPSBhbGNfc2t1X3Vuc29sX2V2ZW50LAorCQkuc2V0dXAgPSBhbGMyNjJfbGVub3ZvXzMwMDBfc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGNfaW5pdGhvb2ssCiAJfSwKIAlbQUxDMjYyX05FQ10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzI2Ml9uZWNfbWl4ZXIgfSwKQEAgLTEyODc0LDkgKzEyOTkxLDkgQEAKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzI2Ml9tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGMyNjJfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjMjYyX2NhcHR1cmVfc291cmNlLAotCQkudW5zb2xfZXZlbnQgPSBhbGMyNjJfaGlwcG9fdW5zb2xfZXZlbnQsCisJCS51bnNvbF9ldmVudCA9IGFsY19za3VfdW5zb2xfZXZlbnQsCiAJCS5zZXR1cCA9IGFsYzI2Ml9oaXBwb19zZXR1cCwKLQkJLmluaXRfaG9vayA9IGFsYzI2Ml9oaXBwb19hdXRvbXV0ZSwKKwkJLmluaXRfaG9vayA9IGFsY19pbml0aG9vaywKIAl9LAogCVtBTEMyNjJfVFlBTl0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzI2Ml90eWFuX21peGVyIH0sCkBAIC0xMjg4OCw5ICsxMzAwNSw5IEBACiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGMyNjJfbW9kZXMpLAogCQkuY2hhbm5lbF9tb2RlID0gYWxjMjYyX21vZGVzLAogCQkuaW5wdXRfbXV4ID0gJmFsYzI2Ml9jYXB0dXJlX3NvdXJjZSwKLQkJLnVuc29sX2V2ZW50ID0gYWxjX2F1dG9tdXRlX2FtcF91bnNvbF9ldmVudCwKKwkJLnVuc29sX2V2ZW50ID0gYWxjX3NrdV91bnNvbF9ldmVudCwKIAkJLnNldHVwID0gYWxjMjYyX3R5YW5fc2V0dXAsCi0JCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAorCQkuaW5pdF9ob29rID0gYWxjX2hwX2F1dG9tdXRlLAogCX0sCiB9OwogCkBAIC0xMzAxMSw2ICsxMzEyOCw3IEBACiAJY29kZWMtPnBhdGNoX29wcyA9IGFsY19wYXRjaF9vcHM7CiAJaWYgKGJvYXJkX2NvbmZpZyA9PSBBTEMyNjJfQVVUTykKIAkJc3BlYy0+aW5pdF9ob29rID0gYWxjMjYyX2F1dG9faW5pdDsKKwlzcGVjLT5zaHV0dXAgPSBhbGNfZWFwZF9zaHV0dXA7CiAKIAlhbGNfaW5pdF9qYWNrcyhjb2RlYyk7CiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQpAQCAtMTMwMjcsMjQgKzEzMTQ1LDI0IEBACiAjZGVmaW5lIEFMQzI2OF9ESUdPVVRfTklECUFMQzg4MF9ESUdPVVRfTklECiAjZGVmaW5lIGFsYzI2OF9tb2RlcwkJYWxjMjYwX21vZGVzCiAKLXN0YXRpYyBoZGFfbmlkX3QgYWxjMjY4X2RhY19uaWRzWzJdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBhbGMyNjhfZGFjX25pZHNbMl0gPSB7CiAJLyogZnJvbnQsIGhwICovCiAJMHgwMiwgMHgwMwogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBhbGMyNjhfYWRjX25pZHNbMl0gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IGFsYzI2OF9hZGNfbmlkc1syXSA9IHsKIAkvKiBBREMwLTEgKi8KIAkweDA4LCAweDA3CiB9OwogCi1zdGF0aWMgaGRhX25pZF90IGFsYzI2OF9hZGNfbmlkc19hbHRbMV0gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IGFsYzI2OF9hZGNfbmlkc19hbHRbMV0gPSB7CiAJLyogQURDMCAqLwogCTB4MDgKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3QgYWxjMjY4X2NhcHNyY19uaWRzWzJdID0geyAweDIzLCAweDI0IH07CitzdGF0aWMgY29uc3QgaGRhX25pZF90IGFsYzI2OF9jYXBzcmNfbmlkc1syXSA9IHsgMHgyMywgMHgyNCB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjY4X2Jhc2VfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjhfYmFzZV9taXhlcltdID0gewogCS8qIG91dHB1dCBtaXhlciBjb250cm9sICovCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwgMHgyLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBQbGF5YmFjayBTd2l0Y2giLCAweDE0LCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMTMwNTYsNyArMTMxNzQsNyBAQAogCXsgfQogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OF90b3NoaWJhX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjY4X3Rvc2hpYmFfbWl4ZXJbXSA9IHsKIAkvKiBvdXRwdXQgbWl4ZXIgY29udHJvbCAqLwogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MiwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgzLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMTMwNjgsNyArMTMxODYsNyBAQAogfTsKIAogLyogYmluZCBCZWVwIHN3aXRjaGVzIG9mIGJvdGggTklEIDB4MGYgYW5kIDB4MTAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX2JpbmRfY3RscyBhbGMyNjhfYmluZF9iZWVwX3N3ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfYmluZF9jdGxzIGFsYzI2OF9iaW5kX2JlZXBfc3cgPSB7CiAJLm9wcyA9ICZzbmRfaGRhX2JpbmRfc3csCiAJLnZhbHVlcyA9IHsKIAkJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDBmLCAzLCAxLCBIREFfSU5QVVQpLApAQCAtMTMwNzcsMjcgKzEzMTk1LDI3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjhfYmVlcF9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OF9iZWVwX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDFkLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0JJTkRfU1coIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgJmFsYzI2OF9iaW5kX2JlZXBfc3cpLAogCXsgfQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjhfZWFwZF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGMyNjhfZWFwZF92ZXJic1tdID0gewogCXsweDE0LCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMn0sCiAJezB4MTUsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLCAyfSwKIAl7IH0KIH07CiAKIC8qIFRvc2hpYmEgc3BlY2lmaWMgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjY4X3Rvc2hpYmFfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjY4X3Rvc2hpYmFfdmVyYnNbXSA9IHsKIAl7MHgxNSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBTEM4ODBfSFBfRVZFTlQgfCBBQ19VU1JTUF9FTn0sCiAJeyB9IC8qIGVuZCAqLwogfTsKIAogLyogQWNlciBzcGVjaWZpYyAqLwogLyogYmluZCB2b2x1bWVzIG9mIGJvdGggTklEIDB4MDIgYW5kIDB4MDMgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX2JpbmRfY3RscyBhbGMyNjhfYWNlcl9iaW5kX21hc3Rlcl92b2wgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9iaW5kX2N0bHMgYWxjMjY4X2FjZXJfYmluZF9tYXN0ZXJfdm9sID0gewogCS5vcHMgPSAmc25kX2hkYV9iaW5kX3ZvbCwKIAkudmFsdWVzID0gewogCQlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MDIsIDMsIDAsIEhEQV9PVVRQVVQpLApAQCAtMTMxMDYsNjYgKzEzMjI0LDQ0IEBACiAJfSwKIH07CiAKLS8qIG11dGUvdW5tdXRlIGludGVybmFsIHNwZWFrZXIgYWNjb3JkaW5nIHRvIHRoZSBocCBqYWNrIGFuZCBtdXRlIHN0YXRlICovCi1zdGF0aWMgdm9pZCBhbGMyNjhfYWNlcl9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IGZvcmNlKQorc3RhdGljIHZvaWQgYWxjMjY4X2FjZXJfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JdW5zaWduZWQgaW50IG11dGU7CiAKLQlpZiAoZm9yY2UgfHwgIXNwZWMtPnNlbnNlX3VwZGF0ZWQpIHsKLQkJc3BlYy0+amFja19wcmVzZW50ID0gc25kX2hkYV9qYWNrX2RldGVjdChjb2RlYywgMHgxNCk7Ci0JCXNwZWMtPnNlbnNlX3VwZGF0ZWQgPSAxOwotCX0KLQlpZiAoc3BlYy0+amFja19wcmVzZW50KQotCQltdXRlID0gSERBX0FNUF9NVVRFOyAvKiBtdXRlIGludGVybmFsIHNwZWFrZXIgKi8KLQllbHNlIC8qIHVubXV0ZSBpbnRlcm5hbCBzcGVha2VyIGlmIG5lY2Vzc2FyeSAqLwotCQltdXRlID0gc25kX2hkYV9jb2RlY19hbXBfcmVhZChjb2RlYywgMHgxNCwgMCwgSERBX09VVFBVVCwgMCk7Ci0Jc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDE1LCBIREFfT1VUUFVULCAwLAotCQkJCSBIREFfQU1QX01VVEUsIG11dGUpOworCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IDB4MTQ7CisJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDE1OworCXNwZWMtPmF1dG9tdXRlID0gMTsKKwlzcGVjLT5hdXRvbXV0ZV9tb2RlID0gQUxDX0FVVE9NVVRFX0FNUDsKIH0KIAorI2RlZmluZSBhbGMyNjhfYWNlcl9tYXN0ZXJfc3dfZ2V0CWFsYzI2Ml9ocF9tYXN0ZXJfc3dfZ2V0CisjZGVmaW5lIGFsYzI2OF9hY2VyX21hc3Rlcl9zd19wdXQJYWxjMjYyX2hwX21hc3Rlcl9zd19wdXQKIAotLyogYmluZCBocCBhbmQgaW50ZXJuYWwgc3BlYWtlciBtdXRlICh3aXRoIHBsdWcgY2hlY2spICovCi1zdGF0aWMgaW50IGFsYzI2OF9hY2VyX21hc3Rlcl9zd19wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKLXsKLQlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlsb25nICp2YWxwID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWU7Ci0JaW50IGNoYW5nZTsKLQotCWNoYW5nZSA9IGFtcF9zdGVyZW9fbXV0ZV91cGRhdGUoY29kZWMsIDB4MTQsIEhEQV9PVVRQVVQsIDAsIHZhbHApOwotCWlmIChjaGFuZ2UpCi0JCWFsYzI2OF9hY2VyX2F1dG9tdXRlKGNvZGVjLCAwKTsKLQlyZXR1cm4gY2hhbmdlOwotfQotCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjY4X2FjZXJfYXNwaXJlX29uZV9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OF9hY2VyX2FzcGlyZV9vbmVfbWl4ZXJbXSA9IHsKIAkvKiBvdXRwdXQgbWl4ZXIgY29udHJvbCAqLwogCUhEQV9CSU5EX1ZPTCgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsICZhbGMyNjhfYWNlcl9iaW5kX21hc3Rlcl92b2wpLAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAotCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9BTVBfRkxBRywKLQkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfaW5mbywKLQkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQsCisJCS5zdWJkZXZpY2UgPSBIREFfU1VCREVWX05JRF9GTEFHIHwgMHgxNSwKKwkJLmluZm8gPSBzbmRfY3RsX2Jvb2xlYW5fbW9ub19pbmZvLAorCQkuZ2V0ID0gYWxjMjY4X2FjZXJfbWFzdGVyX3N3X2dldCwKIAkJLnB1dCA9IGFsYzI2OF9hY2VyX21hc3Rlcl9zd19wdXQsCi0JCS5wcml2YXRlX3ZhbHVlID0gSERBX0NPTVBPU0VfQU1QX1ZBTCgweDE0LCAzLCAwLCBIREFfT1VUUFVUKSwKIAl9LAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCBDYXB0dXJlIFZvbHVtZSIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJeyB9CiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjY4X2FjZXJfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjhfYWNlcl9taXhlcltdID0gewogCS8qIG91dHB1dCBtaXhlciBjb250cm9sICovCiAJSERBX0JJTkRfVk9MKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgJmFsYzI2OF9hY2VyX2JpbmRfbWFzdGVyX3ZvbCksCiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCi0JCS5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHLAotCQkuaW5mbyA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9pbmZvLAotCQkuZ2V0ID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2dldCwKKwkJLnN1YmRldmljZSA9IEhEQV9TVUJERVZfTklEX0ZMQUcgfCAweDE0LAorCQkuaW5mbyA9IHNuZF9jdGxfYm9vbGVhbl9tb25vX2luZm8sCisJCS5nZXQgPSBhbGMyNjhfYWNlcl9tYXN0ZXJfc3dfZ2V0LAogCQkucHV0ID0gYWxjMjY4X2FjZXJfbWFzdGVyX3N3X3B1dCwKLQkJLnByaXZhdGVfdmFsdWUgPSBIREFfQ09NUE9TRV9BTVBfVkFMKDB4MTQsIDMsIDAsIEhEQV9PVVRQVVQpLAogCX0sCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IFZvbHVtZSIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIEJvb3N0IFZvbHVtZSIsIDB4MTksIDAsIEhEQV9JTlBVVCksCkBAIC0xMzE3MywyNCArMTMyNjksMjMgQEAKIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjhfYWNlcl9kbWljX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjY4X2FjZXJfZG1pY19taXhlcltdID0gewogCS8qIG91dHB1dCBtaXhlciBjb250cm9sICovCiAJSERBX0JJTkRfVk9MKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgJmFsYzI2OF9hY2VyX2JpbmRfbWFzdGVyX3ZvbCksCiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCi0JCS5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHLAotCQkuaW5mbyA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9pbmZvLAotCQkuZ2V0ID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2dldCwKKwkJLnN1YmRldmljZSA9IEhEQV9TVUJERVZfTklEX0ZMQUcgfCAweDE0LAorCQkuaW5mbyA9IHNuZF9jdGxfYm9vbGVhbl9tb25vX2luZm8sCisJCS5nZXQgPSBhbGMyNjhfYWNlcl9tYXN0ZXJfc3dfZ2V0LAogCQkucHV0ID0gYWxjMjY4X2FjZXJfbWFzdGVyX3N3X3B1dCwKLQkJLnByaXZhdGVfdmFsdWUgPSBIREFfQ09NUE9TRV9BTVBfVkFMKDB4MTQsIDMsIDAsIEhEQV9PVVRQVVQpLAogCX0sCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IFZvbHVtZSIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBJbiBCb29zdCBWb2x1bWUiLCAweDFhLCAwLCBIREFfSU5QVVQpLAogCXsgfQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjhfYWNlcl9hc3BpcmVfb25lX3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzI2OF9hY2VyX2FzcGlyZV9vbmVfdmVyYnNbXSA9IHsKIAl7MHgxMiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAogCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCiAJezB4MTUsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUxDODgwX0hQX0VWRU5UIHwgQUNfVVNSU1BfRU59LApAQCAtMTMyMDAsNyArMTMyOTUsNyBAQAogCXsgfQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjhfYWNlcl92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGMyNjhfYWNlcl92ZXJic1tdID0gewogCXsweDEyLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sIC8qIGludGVybmFsIGRtaWM/ICovCiAJezB4MTMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKIAl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LApAQCAtMTMyMTIsNTMgKzEzMzA3LDE2IEBACiB9OwogCiAvKiB1bnNvbGljaXRlZCBldmVudCBmb3IgSFAgamFjayBzZW5zaW5nICovCi0jZGVmaW5lIGFsYzI2OF90b3NoaWJhX3Vuc29sX2V2ZW50CWFsYzI2Ml9oaXBwb191bnNvbF9ldmVudAogI2RlZmluZSBhbGMyNjhfdG9zaGliYV9zZXR1cAkJYWxjMjYyX2hpcHBvX3NldHVwCi0jZGVmaW5lIGFsYzI2OF90b3NoaWJhX2F1dG9tdXRlCQlhbGMyNjJfaGlwcG9fYXV0b211dGUKLQotc3RhdGljIHZvaWQgYWxjMjY4X2FjZXJfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCByZXMpCi17Ci0JaWYgKChyZXMgPj4gMjYpICE9IEFMQzg4MF9IUF9FVkVOVCkKLQkJcmV0dXJuOwotCWFsYzI2OF9hY2VyX2F1dG9tdXRlKGNvZGVjLCAxKTsKLX0KLQotc3RhdGljIHZvaWQgYWxjMjY4X2FjZXJfaW5pdF9ob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCWFsYzI2OF9hY2VyX2F1dG9tdXRlKGNvZGVjLCAxKTsKLX0KLQotLyogdG9nZ2xlIHNwZWFrZXItb3V0cHV0IGFjY29yZGluZyB0byB0aGUgaHAtamFjayBzdGF0ZSAqLwotc3RhdGljIHZvaWQgYWxjMjY4X2FzcGlyZV9vbmVfc3BlYWtlcl9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKLXsKLQl1bnNpZ25lZCBpbnQgcHJlc2VudDsKLQl1bnNpZ25lZCBjaGFyIGJpdHM7Ci0KLQlwcmVzZW50ID0gc25kX2hkYV9qYWNrX2RldGVjdChjb2RlYywgMHgxNSk7Ci0JYml0cyA9IHByZXNlbnQgPyBIREFfQU1QX01VVEUgOiAwOwotCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgwZiwgSERBX0lOUFVULCAwLAotCQkJCSBIREFfQU1QX01VVEUsIGJpdHMpOwotCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgwZiwgSERBX0lOUFVULCAxLAotCQkJCSBIREFfQU1QX01VVEUsIGJpdHMpOwotfQotCi1zdGF0aWMgdm9pZCBhbGMyNjhfYWNlcl9sY191bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKLQkJCQkgICAgdW5zaWduZWQgaW50IHJlcykKLXsKLQlzd2l0Y2ggKHJlcyA+PiAyNikgewotCWNhc2UgQUxDODgwX0hQX0VWRU5UOgotCQlhbGMyNjhfYXNwaXJlX29uZV9zcGVha2VyX2F1dG9tdXRlKGNvZGVjKTsKLQkJYnJlYWs7Ci0JY2FzZSBBTEM4ODBfTUlDX0VWRU5UOgotCQlhbGNfbWljX2F1dG9tdXRlKGNvZGVjKTsKLQkJYnJlYWs7Ci0JfQotfQogCiBzdGF0aWMgdm9pZCBhbGMyNjhfYWNlcl9sY19zZXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSAweDE1OworCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxNDsKKwlzcGVjLT5hdXRvbXV0ZV9taXhlcl9uaWRbMF0gPSAweDBmOworCXNwZWMtPmF1dG9tdXRlID0gMTsKKwlzcGVjLT5hdXRvbXV0ZV9tb2RlID0gQUxDX0FVVE9NVVRFX01JWEVSOwogCXNwZWMtPmV4dF9taWMucGluID0gMHgxODsKIAlzcGVjLT5leHRfbWljLm11eF9pZHggPSAwOwogCXNwZWMtPmludF9taWMucGluID0gMHgxMjsKQEAgLTEzMjY2LDEzICsxMzMyNCw3IEBACiAJc3BlYy0+YXV0b19taWMgPSAxOwogfQogCi1zdGF0aWMgdm9pZCBhbGMyNjhfYWNlcl9sY19pbml0X2hvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0JYWxjMjY4X2FzcGlyZV9vbmVfc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7Ci0JYWxjX21pY19hdXRvbXV0ZShjb2RlYyk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjhfZGVsbF9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OF9kZWxsX21peGVyW10gPSB7CiAJLyogb3V0cHV0IG1peGVyIGNvbnRyb2wgKi8KIAlIREFfQ09ERUNfVk9MVU1FKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MDIsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgxNCwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTEzMjgzLDcgKzEzMzM1LDcgQEAKIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjY4X2RlbGxfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjY4X2RlbGxfdmVyYnNbXSA9IHsKIAl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAogCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCiAJezB4MTUsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUxDODgwX0hQX0VWRU5UIHwgQUNfVVNSU1BfRU59LApAQCAtMTMzMDMsOSArMTMzNTUsMTEgQEAKIAlzcGVjLT5pbnRfbWljLnBpbiA9IDB4MTk7CiAJc3BlYy0+aW50X21pYy5tdXhfaWR4ID0gMTsKIAlzcGVjLT5hdXRvX21pYyA9IDE7CisJc3BlYy0+YXV0b211dGUgPSAxOworCXNwZWMtPmF1dG9tdXRlX21vZGUgPSBBTENfQVVUT01VVEVfUElOOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjY3X3F1YW50YV9pbDFfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjdfcXVhbnRhX2lsMV9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgyLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MTQsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDB4MywgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTEzMzE3LDcgKzEzMzcxLDcgQEAKIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjY3X3F1YW50YV9pbDFfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjY3X3F1YW50YV9pbDFfdmVyYnNbXSA9IHsKIAl7MHgxNSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBTEM4ODBfSFBfRVZFTlQgfCBBQ19VU1JTUF9FTn0sCiAJezB4MTgsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUxDODgwX01JQ19FVkVOVCB8IEFDX1VTUlNQX0VOfSwKIAl7IH0KQEAgLTEzMzMzLDEyICsxMzM4NywxNCBAQAogCXNwZWMtPmludF9taWMucGluID0gMHgxOTsKIAlzcGVjLT5pbnRfbWljLm11eF9pZHggPSAxOwogCXNwZWMtPmF1dG9fbWljID0gMTsKKwlzcGVjLT5hdXRvbXV0ZSA9IDE7CisJc3BlYy0+YXV0b211dGVfbW9kZSA9IEFMQ19BVVRPTVVURV9QSU47CiB9CiAKIC8qCiAgKiBnZW5lcmljIGluaXRpYWxpemF0aW9uIG9mIEFEQywgaW5wdXQgbWl4ZXJzIGFuZCBvdXRwdXQgbWl4ZXJzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjY4X2Jhc2VfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGMyNjhfYmFzZV9pbml0X3ZlcmJzW10gPSB7CiAJLyogVW5tdXRlIERBQzAtMSBhbmQgc2V0IHZvbCA9IDAgKi8KIAl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKIAl7MHgwMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKQEAgLTEzMzg2LDcgKzEzNDQyLDcgQEAKIC8qCiAgKiBnZW5lcmljIGluaXRpYWxpemF0aW9uIG9mIEFEQywgaW5wdXQgbWl4ZXJzIGFuZCBvdXRwdXQgbWl4ZXJzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjY4X3ZvbHVtZV9pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzI2OF92b2x1bWVfaW5pdF92ZXJic1tdID0gewogCS8qIHNldCBvdXRwdXQgREFDICovCiAJezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCiAJezB4MDMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCkBAIC0xMzQxMiwyMCArMTM0NjgsMjAgQEAKIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjhfY2FwdHVyZV9ub3NyY19taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OF9jYXB0dXJlX25vc3JjX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDIzLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MjMsIDB4MCwgSERBX09VVFBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OF9jYXB0dXJlX2FsdF9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OF9jYXB0dXJlX2FsdF9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgyMywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDIzLCAweDAsIEhEQV9PVVRQVVQpLAogCV9ERUZJTkVfQ0FQU1JDKDEpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjhfY2FwdHVyZV9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OF9jYXB0dXJlX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDIzLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MjMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMSwgMHgyNCwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTEzNDM0LDcgKzEzNDkwLDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjMjY4X2NhcHR1cmVfc291cmNlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzI2OF9jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gNCwKIAkuaXRlbXMgPSB7CiAJCXsgIk1pYyIsIDB4MCB9LApAQCAtMTM0NDQsNyArMTM1MDAsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjMjY4X2FjZXJfY2FwdHVyZV9zb3VyY2UgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjMjY4X2FjZXJfY2FwdHVyZV9zb3VyY2UgPSB7CiAJLm51bV9pdGVtcyA9IDMsCiAJLml0ZW1zID0gewogCQl7ICJNaWMiLCAweDAgfSwKQEAgLTEzNDUzLDcgKzEzNTA5LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzI2OF9hY2VyX2RtaWNfY2FwdHVyZV9zb3VyY2UgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjMjY4X2FjZXJfZG1pY19jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gMywKIAkuaXRlbXMgPSB7CiAJCXsgIk1pYyIsIDB4MCB9LApAQCAtMTM0NjMsNyArMTM1MTksNyBAQAogfTsKIAogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjhfdGVzdF9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OF90ZXN0X21peGVyW10gPSB7CiAJLyogVm9sdW1lIHdpZGdldHMgKi8KIAlIREFfQ09ERUNfVk9MVU1FKCJMT1VUMSBQbGF5YmFjayBWb2x1bWUiLCAweDAyLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkxPVVQyIFBsYXliYWNrIFZvbHVtZSIsIDB4MDMsIDB4MCwgSERBX09VVFBVVCksCkBAIC0xMzU0Miw3ICsxMzU5OCw3IEBACiAJCQkJCQkgICAgICBIREFfT1VUUFVUKSk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKLQkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MrK10gPSBkYWM7CisJCXNwZWMtPnByaXZhdGVfZGFjX25pZHNbc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MrK10gPSBkYWM7CiAJfQogCiAJaWYgKG5pZCAhPSAweDE2KQpAQCAtMTM3MTUsNyArMTM3NzEsNyBAQAogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCWludCBlcnI7Ci0Jc3RhdGljIGhkYV9uaWRfdCBhbGMyNjhfaWdub3JlW10gPSB7IDAgfTsKKwlzdGF0aWMgY29uc3QgaGRhX25pZF90IGFsYzI2OF9pZ25vcmVbXSA9IHsgMCB9OwogCiAJZXJyID0gc25kX2hkYV9wYXJzZV9waW5fZGVmX2NvbmZpZyhjb2RlYywgJnNwZWMtPmF1dG9jZmcsCiAJCQkJCSAgIGFsYzI2OF9pZ25vcmUpOwpAQCAtMTM3OTUsNyArMTM4NTEsNyBAQAogCVtBTEMyNjhfQVVUT10JCT0gImF1dG8iLAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzI2OF9jZmdfdGJsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjMjY4X2NmZ190YmxbXSA9IHsKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMTFlLCAiQWNlciBBc3BpcmUgNTcyMHoiLCBBTEMyNjhfQUNFUiksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDEyNiwgIkFjZXIiLCBBTEMyNjhfQUNFUiksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDEyZSwgIkFjZXIgQXNwaXJlIDUzMTAiLCBBTEMyNjhfQUNFUiksCkBAIC0xMzgyMCw3ICsxMzg3Niw3IEBACiB9OwogCiAvKiBUb3NoaWJhIGxhcHRvcHMgaGF2ZSBubyB1bmlxdWUgUENJIFNTSUQgYnV0IG9ubHkgY29kZWMgU1NJRCAqLwotc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzI2OF9zc2lkX2NmZ190YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGMyNjhfc3NpZF9jZmdfdGJsW10gPSB7CiAJU05EX1BDSV9RVUlSSygweDExNzksIDB4ZmYwYSwgIlRPU0hJQkEgWC0yMDAiLCBBTEMyNjhfQVVUTyksCiAJU05EX1BDSV9RVUlSSygweDExNzksIDB4ZmYwZSwgIlRPU0hJQkEgWC0yMDAgSERNSSIsIEFMQzI2OF9BVVRPKSwKIAlTTkRfUENJX1FVSVJLX01BU0soMHgxMTc5LCAweGZmMDAsIDB4ZmYwMCwgIlRPU0hJQkEgQS9MeDA1IiwKQEAgLTEzODI4LDcgKzEzODg0LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBhbGNfY29uZmlnX3ByZXNldCBhbGMyNjhfcHJlc2V0c1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhbGNfY29uZmlnX3ByZXNldCBhbGMyNjhfcHJlc2V0c1tdID0gewogCVtBTEMyNjdfUVVBTlRBX0lMMV0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzI2N19xdWFudGFfaWwxX21peGVyLCBhbGMyNjhfYmVlcF9taXhlciwKIAkJCSAgICBhbGMyNjhfY2FwdHVyZV9ub3NyY19taXhlciB9LApAQCAtMTM4NzQsOSArMTM5MzAsOSBAQAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjY4X21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2OF9tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGMyNjhfY2FwdHVyZV9zb3VyY2UsCi0JCS51bnNvbF9ldmVudCA9IGFsYzI2OF90b3NoaWJhX3Vuc29sX2V2ZW50LAorCQkudW5zb2xfZXZlbnQgPSBhbGNfc2t1X3Vuc29sX2V2ZW50LAogCQkuc2V0dXAgPSBhbGMyNjhfdG9zaGliYV9zZXR1cCwKLQkJLmluaXRfaG9vayA9IGFsYzI2OF90b3NoaWJhX2F1dG9tdXRlLAorCQkuaW5pdF9ob29rID0gYWxjX2luaXRob29rLAogCX0sCiAJW0FMQzI2OF9BQ0VSXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjMjY4X2FjZXJfbWl4ZXIsIGFsYzI2OF9jYXB0dXJlX2FsdF9taXhlciwKQEAgLTEzODkyLDggKzEzOTQ4LDkgQEAKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzI2OF9tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGMyNjhfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjMjY4X2FjZXJfY2FwdHVyZV9zb3VyY2UsCi0JCS51bnNvbF9ldmVudCA9IGFsYzI2OF9hY2VyX3Vuc29sX2V2ZW50LAotCQkuaW5pdF9ob29rID0gYWxjMjY4X2FjZXJfaW5pdF9ob29rLAorCQkudW5zb2xfZXZlbnQgPSBhbGNfc2t1X3Vuc29sX2V2ZW50LAorCQkuc2V0dXAgPSBhbGMyNjhfYWNlcl9zZXR1cCwKKwkJLmluaXRfaG9vayA9IGFsY19pbml0aG9vaywKIAl9LAogCVtBTEMyNjhfQUNFUl9ETUlDXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjMjY4X2FjZXJfZG1pY19taXhlciwgYWxjMjY4X2NhcHR1cmVfYWx0X21peGVyLApAQCAtMTM5MDksOCArMTM5NjYsOSBAQAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjY4X21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2OF9tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGMyNjhfYWNlcl9kbWljX2NhcHR1cmVfc291cmNlLAotCQkudW5zb2xfZXZlbnQgPSBhbGMyNjhfYWNlcl91bnNvbF9ldmVudCwKLQkJLmluaXRfaG9vayA9IGFsYzI2OF9hY2VyX2luaXRfaG9vaywKKwkJLnVuc29sX2V2ZW50ID0gYWxjX3NrdV91bnNvbF9ldmVudCwKKwkJLnNldHVwID0gYWxjMjY4X2FjZXJfc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGNfaW5pdGhvb2ssCiAJfSwKIAlbQUxDMjY4X0FDRVJfQVNQSVJFX09ORV0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzI2OF9hY2VyX2FzcGlyZV9vbmVfbWl4ZXIsCkBAIC0xMzkyNiw5ICsxMzk4NCw5IEBACiAJCS5ocF9uaWQgPSAweDAzLAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjY4X21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2OF9tb2RlcywKLQkJLnVuc29sX2V2ZW50ID0gYWxjMjY4X2FjZXJfbGNfdW5zb2xfZXZlbnQsCisJCS51bnNvbF9ldmVudCA9IGFsY19za3VfdW5zb2xfZXZlbnQsCiAJCS5zZXR1cCA9IGFsYzI2OF9hY2VyX2xjX3NldHVwLAotCQkuaW5pdF9ob29rID0gYWxjMjY4X2FjZXJfbGNfaW5pdF9ob29rLAorCQkuaW5pdF9ob29rID0gYWxjX2luaXRob29rLAogCX0sCiAJW0FMQzI2OF9ERUxMXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjMjY4X2RlbGxfbWl4ZXIsIGFsYzI2OF9iZWVwX21peGVyLApAQCAtMTM5NjIsOCArMTQwMjAsOSBAQAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjY4X21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2OF9tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGMyNjhfY2FwdHVyZV9zb3VyY2UsCisJCS51bnNvbF9ldmVudCA9IGFsY19za3VfdW5zb2xfZXZlbnQsCiAJCS5zZXR1cCA9IGFsYzI2OF90b3NoaWJhX3NldHVwLAotCQkuaW5pdF9ob29rID0gYWxjMjY4X3Rvc2hpYmFfYXV0b211dGUsCisJCS5pbml0X2hvb2sgPSBhbGNfaW5pdGhvb2ssCiAJfSwKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiAJW0FMQzI2OF9URVNUXSA9IHsKQEAgLTE0MDg1LDYgKzE0MTQ0LDcgQEAKIAljb2RlYy0+cGF0Y2hfb3BzID0gYWxjX3BhdGNoX29wczsKIAlpZiAoYm9hcmRfY29uZmlnID09IEFMQzI2OF9BVVRPKQogCQlzcGVjLT5pbml0X2hvb2sgPSBhbGMyNjhfYXV0b19pbml0OworCXNwZWMtPnNodXR1cCA9IGFsY19lYXBkX3NodXR1cDsKIAogCWFsY19pbml0X2phY2tzKGNvZGVjKTsKIApAQCAtMTQwOTgsMzIgKzE0MTU4LDMyIEBACiAKICNkZWZpbmUgYWxjMjY5X2RhY19uaWRzCQlhbGMyNjBfZGFjX25pZHMKIAotc3RhdGljIGhkYV9uaWRfdCBhbGMyNjlfYWRjX25pZHNbMV0gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IGFsYzI2OV9hZGNfbmlkc1sxXSA9IHsKIAkvKiBBREMxICovCiAJMHgwOCwKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3QgYWxjMjY5X2NhcHNyY19uaWRzWzFdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBhbGMyNjlfY2Fwc3JjX25pZHNbMV0gPSB7CiAJMHgyMywKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3QgYWxjMjY5dmJfYWRjX25pZHNbMV0gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IGFsYzI2OXZiX2FkY19uaWRzWzFdID0gewogCS8qIEFEQzEgKi8KIAkweDA5LAogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBhbGMyNjl2Yl9jYXBzcmNfbmlkc1sxXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3QgYWxjMjY5dmJfY2Fwc3JjX25pZHNbMV0gPSB7CiAJMHgyMiwKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3QgYWxjMjY5X2FkY19jYW5kaWRhdGVzW10gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IGFsYzI2OV9hZGNfY2FuZGlkYXRlc1tdID0gewogCTB4MDgsIDB4MDksIDB4MDcsIDB4MTEsCiB9OwogCiAjZGVmaW5lIGFsYzI2OV9tb2RlcwkJYWxjMjYwX21vZGVzCiAjZGVmaW5lIGFsYzI2OV9jYXB0dXJlX3NvdXJjZQlhbGM4ODBfbGdfbHdfY2FwdHVyZV9zb3VyY2UKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OV9iYXNlX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjY5X2Jhc2VfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDAyLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBQbGF5YmFjayBTd2l0Y2giLCAweDE0LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKQEAgLTE0MTM5LDcgKzE0MTk5LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjY5X3F1YW50YV9mbDFfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjlfcXVhbnRhX2ZsMV9taXhlcltdID0gewogCS8qIG91dHB1dCBtaXhlciBjb250cm9sICovCiAJSERBX0JJTkRfVk9MKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgJmFsYzI2OF9hY2VyX2JpbmRfbWFzdGVyX3ZvbCksCiAJewpAQCAtMTQxNjAsNyArMTQyMjAsNyBAQAogCXsgfQogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OV9saWZlYm9va19taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OV9saWZlYm9va19taXhlcltdID0gewogCS8qIG91dHB1dCBtaXhlciBjb250cm9sICovCiAJSERBX0JJTkRfVk9MKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgJmFsYzI2OF9hY2VyX2JpbmRfbWFzdGVyX3ZvbCksCiAJewpAQCAtMTQxODQsNyArMTQyNDQsNyBAQAogCXsgfQogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OV9sYXB0b3BfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjlfbGFwdG9wX21peGVyW10gPSB7CiAJSERBX0NPREVDX01VVEUoIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgxNCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MDIsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDE1LCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMTQxOTIsNyArMTQyNTIsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjl2Yl9sYXB0b3BfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjl2Yl9sYXB0b3BfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfTVVURSgiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDE0LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwMiwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCkBAIC0xNDIwMCwxNCArMTQyNjAsMTQgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjY5X2FzdXNfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjlfYXN1c19taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAweDAyLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMHgwLCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKIC8qIGNhcHR1cmUgbWl4ZXIgZWxlbWVudHMgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjlfbGFwdG9wX2FuYWxvZ19jYXB0dXJlX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjY5X2xhcHRvcF9hbmFsb2dfY2FwdHVyZV9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwOCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MDgsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKQEAgLTE0MjE1LDE0ICsxNDI3NSwxNCBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjlfbGFwdG9wX2RpZ2l0YWxfY2FwdHVyZV9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OV9sYXB0b3BfZGlnaXRhbF9jYXB0dXJlX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDA4LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwOCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCBWb2x1bWUiLCAweDE4LCAwLCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjl2Yl9sYXB0b3BfYW5hbG9nX2NhcHR1cmVfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjl2Yl9sYXB0b3BfYW5hbG9nX2NhcHR1cmVfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MDksIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDA5LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IFZvbHVtZSIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCkBAIC0xNDIzMCw3ICsxNDI5MCw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OXZiX2xhcHRvcF9kaWdpdGFsX2NhcHR1cmVfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjl2Yl9sYXB0b3BfZGlnaXRhbF9jYXB0dXJlX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDA5LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwOSwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCBWb2x1bWUiLCAweDE4LCAwLCBIREFfSU5QVVQpLApAQCAtMTQyNDAsNyArMTQzMDAsNyBAQAogLyogRlNDIGFtaWxvICovCiAjZGVmaW5lIGFsYzI2OV9mdWppdHN1X21peGVyCWFsYzI2OV9sYXB0b3BfbWl4ZXIKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjlfcXVhbnRhX2ZsMV92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGMyNjlfcXVhbnRhX2ZsMV92ZXJic1tdID0gewogCXsweDE1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCiAJezB4MTIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKIAl7MHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LApAQCAtMTQyNTAsNyArMTQzMTAsNyBAQAogCXsgfQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjlfbGlmZWJvb2tfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjY5X2xpZmVib29rX3ZlcmJzW10gPSB7CiAJezB4MTUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwKIAl7MHgxYSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDF9LAogCXsweDEyLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCkBAIC0xNDI2NywxNSArMTQzMjcsNyBAQAogLyogdG9nZ2xlIHNwZWFrZXItb3V0cHV0IGFjY29yZGluZyB0byB0aGUgaHAtamFjayBzdGF0ZSAqLwogc3RhdGljIHZvaWQgYWxjMjY5X3F1YW50YV9mbDFfc3BlYWtlcl9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQl1bnNpZ25lZCBpbnQgcHJlc2VudDsKLQl1bnNpZ25lZCBjaGFyIGJpdHM7Ci0KLQlwcmVzZW50ID0gc25kX2hkYV9qYWNrX2RldGVjdChjb2RlYywgMHgxNSk7Ci0JYml0cyA9IHByZXNlbnQgPyBIREFfQU1QX01VVEUgOiAwOwotCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgwYywgSERBX0lOUFVULCAwLAotCQkJCSBIREFfQU1QX01VVEUsIGJpdHMpOwotCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgwYywgSERBX0lOUFVULCAxLAotCQkJCSBIREFfQU1QX01VVEUsIGJpdHMpOworCWFsY19ocF9hdXRvbXV0ZShjb2RlYyk7CiAKIAlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDIwLCAwLAogCQkJQUNfVkVSQl9TRVRfQ09FRl9JTkRFWCwgMHgwYyk7CkBAIC0xNDI4OCwzNCArMTQzNDAsOCBAQAogCQkJQUNfVkVSQl9TRVRfUFJPQ19DT0VGLCAweDQ4MCk7CiB9CiAKLS8qIHRvZ2dsZSBzcGVha2VyLW91dHB1dCBhY2NvcmRpbmcgdG8gdGhlIGhwLWphY2tzIHN0YXRlICovCi1zdGF0aWMgdm9pZCBhbGMyNjlfbGlmZWJvb2tfc3BlYWtlcl9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKLXsKLQl1bnNpZ25lZCBpbnQgcHJlc2VudDsKLQl1bnNpZ25lZCBjaGFyIGJpdHM7Ci0KLQkvKiBDaGVjayBsYXB0b3AgaGVhZHBob25lIHNvY2tldCAqLwotCXByZXNlbnQgPSBzbmRfaGRhX2phY2tfZGV0ZWN0KGNvZGVjLCAweDE1KTsKLQotCS8qIENoZWNrIHBvcnQgcmVwbGljYXRvciBoZWFkcGhvbmUgc29ja2V0ICovCi0JcHJlc2VudCB8PSBzbmRfaGRhX2phY2tfZGV0ZWN0KGNvZGVjLCAweDFhKTsKLQotCWJpdHMgPSBwcmVzZW50ID8gSERBX0FNUF9NVVRFIDogMDsKLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MGMsIEhEQV9JTlBVVCwgMCwKLQkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MGMsIEhEQV9JTlBVVCwgMSwKLQkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKLQotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MjAsIDAsCi0JCQlBQ19WRVJCX1NFVF9DT0VGX0lOREVYLCAweDBjKTsKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDIwLCAwLAotCQkJQUNfVkVSQl9TRVRfUFJPQ19DT0VGLCAweDY4MCk7Ci0KLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDIwLCAwLAotCQkJQUNfVkVSQl9TRVRfQ09FRl9JTkRFWCwgMHgwYyk7Ci0Jc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgyMCwgMCwKLQkJCUFDX1ZFUkJfU0VUX1BST0NfQ09FRiwgMHg0ODApOwotfQorI2RlZmluZSBhbGMyNjlfbGlmZWJvb2tfc3BlYWtlcl9hdXRvbXV0ZSBcCisJYWxjMjY5X3F1YW50YV9mbDFfc3BlYWtlcl9hdXRvbXV0ZQogCiBzdGF0aWMgdm9pZCBhbGMyNjlfbGlmZWJvb2tfbWljX2F1dG9zd2l0Y2goc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CkBAIC0xNDM2NCw2ICsxNDM5MCw5IEBACiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxNTsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTQ7CisJc3BlYy0+YXV0b211dGVfbWl4ZXJfbmlkWzBdID0gMHgwYzsKKwlzcGVjLT5hdXRvbXV0ZSA9IDE7CisJc3BlYy0+YXV0b211dGVfbW9kZSA9IEFMQ19BVVRPTVVURV9NSVhFUjsKIAlzcGVjLT5leHRfbWljLnBpbiA9IDB4MTg7CiAJc3BlYy0+ZXh0X21pYy5tdXhfaWR4ID0gMDsKIAlzcGVjLT5pbnRfbWljLnBpbiA9IDB4MTk7CkBAIC0xNDM3NywxMyArMTQ0MDYsMjQgQEAKIAlhbGNfbWljX2F1dG9tdXRlKGNvZGVjKTsKIH0KIAorc3RhdGljIHZvaWQgYWxjMjY5X2xpZmVib29rX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IDB4MTU7CisJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzFdID0gMHgxYTsKKwlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTQ7CisJc3BlYy0+YXV0b211dGVfbWl4ZXJfbmlkWzBdID0gMHgwYzsKKwlzcGVjLT5hdXRvbXV0ZSA9IDE7CisJc3BlYy0+YXV0b211dGVfbW9kZSA9IEFMQ19BVVRPTVVURV9NSVhFUjsKK30KKwogc3RhdGljIHZvaWQgYWxjMjY5X2xpZmVib29rX2luaXRfaG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlhbGMyNjlfbGlmZWJvb2tfc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7CiAJYWxjMjY5X2xpZmVib29rX21pY19hdXRvc3dpdGNoKGNvZGVjKTsKIH0KIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjlfbGFwdG9wX2RtaWNfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGMyNjlfbGFwdG9wX2RtaWNfaW5pdF92ZXJic1tdID0gewogCXsweDE1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCiAJezB4MjMsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDA1fSwKIAl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDI2IH0sCkBAIC0xNDM5NCw3ICsxNDQzNCw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjY5X2xhcHRvcF9hbWljX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjY5X2xhcHRvcF9hbWljX2luaXRfdmVyYnNbXSA9IHsKIAl7MHgxNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDF9LAogCXsweDIzLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCiAJezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjAyNiB9LApAQCAtMTQ0MDQsNyArMTQ0NDQsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2OXZiX2xhcHRvcF9kbWljX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjY5dmJfbGFwdG9wX2RtaWNfaW5pdF92ZXJic1tdID0gewogCXsweDIxLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCiAJezB4MjIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDA2fSwKIAl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDI2IH0sCkBAIC0xNDQxNSw3ICsxNDQ1NSw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjY5dmJfbGFwdG9wX2FtaWNfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGMyNjl2Yl9sYXB0b3BfYW1pY19pbml0X3ZlcmJzW10gPSB7CiAJezB4MjEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwKIAl7MHgyMiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDF9LAogCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwMjYgfSwKQEAgLTE0NDI2LDcgKzE0NDY2LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNzFfYWNlcl9kbWljX3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzI3MV9hY2VyX2RtaWNfdmVyYnNbXSA9IHsKIAl7MHgyMCwgQUNfVkVSQl9TRVRfQ09FRl9JTkRFWCwgMHgwZH0sCiAJezB4MjAsIEFDX1ZFUkJfU0VUX1BST0NfQ09FRiwgMHg0MDAwfSwKIAl7MHgxMiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LApAQCAtMTQ0NDAsNDIgKzE0NDgwLDE0IEBACiAJeyB9CiB9OwogCi0vKiB0b2dnbGUgc3BlYWtlci1vdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBocC1qYWNrIHN0YXRlICovCi1zdGF0aWMgdm9pZCBhbGMyNjlfc3BlYWtlcl9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKLXsKLQlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQl1bnNpZ25lZCBpbnQgbmlkID0gc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdOwotCXVuc2lnbmVkIGludCBwcmVzZW50OwotCXVuc2lnbmVkIGNoYXIgYml0czsKLQotCXByZXNlbnQgPSBzbmRfaGRhX2phY2tfZGV0ZWN0KGNvZGVjLCBuaWQpOwotCWJpdHMgPSBwcmVzZW50ID8gSERBX0FNUF9NVVRFIDogMDsKLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MGMsIEhEQV9JTlBVVCwgMCwKLQkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MGMsIEhEQV9JTlBVVCwgMSwKLQkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKLQlzbmRfaGRhX2lucHV0X2phY2tfcmVwb3J0KGNvZGVjLCBuaWQpOwotfQotCi0vKiB1bnNvbGljaXRlZCBldmVudCBmb3IgSFAgamFjayBzZW5zaW5nICovCi1zdGF0aWMgdm9pZCBhbGMyNjlfbGFwdG9wX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAotCQkJCSAgICAgdW5zaWduZWQgaW50IHJlcykKLXsKLQlzd2l0Y2ggKHJlcyA+PiAyNikgewotCWNhc2UgQUxDODgwX0hQX0VWRU5UOgotCQlhbGMyNjlfc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7Ci0JCWJyZWFrOwotCWNhc2UgQUxDODgwX01JQ19FVkVOVDoKLQkJYWxjX21pY19hdXRvbXV0ZShjb2RlYyk7Ci0JCWJyZWFrOwotCX0KLX0KLQogc3RhdGljIHZvaWQgYWxjMjY5X2xhcHRvcF9hbWljX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IDB4MTU7CiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDE0OworCXNwZWMtPmF1dG9tdXRlX21peGVyX25pZFswXSA9IDB4MGM7CisJc3BlYy0+YXV0b211dGUgPSAxOworCXNwZWMtPmF1dG9tdXRlX21vZGUgPSBBTENfQVVUT01VVEVfTUlYRVI7CiAJc3BlYy0+ZXh0X21pYy5waW4gPSAweDE4OwogCXNwZWMtPmV4dF9taWMubXV4X2lkeCA9IDA7CiAJc3BlYy0+aW50X21pYy5waW4gPSAweDE5OwpAQCAtMTQ0ODgsNiArMTQ1MDAsOSBAQAogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IDB4MTU7CiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDE0OworCXNwZWMtPmF1dG9tdXRlX21peGVyX25pZFswXSA9IDB4MGM7CisJc3BlYy0+YXV0b211dGUgPSAxOworCXNwZWMtPmF1dG9tdXRlX21vZGUgPSBBTENfQVVUT01VVEVfTUlYRVI7CiAJc3BlYy0+ZXh0X21pYy5waW4gPSAweDE4OwogCXNwZWMtPmV4dF9taWMubXV4X2lkeCA9IDA7CiAJc3BlYy0+aW50X21pYy5waW4gPSAweDEyOwpAQCAtMTQ1MDAsNiArMTQ1MTUsOSBAQAogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IDB4MjE7CiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDE0OworCXNwZWMtPmF1dG9tdXRlX21peGVyX25pZFswXSA9IDB4MGM7CisJc3BlYy0+YXV0b211dGUgPSAxOworCXNwZWMtPmF1dG9tdXRlX21vZGUgPSBBTENfQVVUT01VVEVfTUlYRVI7CiAJc3BlYy0+ZXh0X21pYy5waW4gPSAweDE4OwogCXNwZWMtPmV4dF9taWMubXV4X2lkeCA9IDA7CiAJc3BlYy0+aW50X21pYy5waW4gPSAweDE5OwpAQCAtMTQ1MTIsNiArMTQ1MzAsOSBAQAogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IDB4MjE7CiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDE0OworCXNwZWMtPmF1dG9tdXRlX21peGVyX25pZFswXSA9IDB4MGM7CisJc3BlYy0+YXV0b211dGUgPSAxOworCXNwZWMtPmF1dG9tdXRlX21vZGUgPSBBTENfQVVUT01VVEVfTUlYRVI7CiAJc3BlYy0+ZXh0X21pYy5waW4gPSAweDE4OwogCXNwZWMtPmV4dF9taWMubXV4X2lkeCA9IDA7CiAJc3BlYy0+aW50X21pYy5waW4gPSAweDEyOwpAQCAtMTQ1MTksMTYgKzE0NTQwLDEwIEBACiAJc3BlYy0+YXV0b19taWMgPSAxOwogfQogCi1zdGF0aWMgdm9pZCBhbGMyNjlfbGFwdG9wX2luaXRob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCWFsYzI2OV9zcGVha2VyX2F1dG9tdXRlKGNvZGVjKTsKLQlhbGNfbWljX2F1dG9tdXRlKGNvZGVjKTsKLX0KLQogLyoKICAqIGdlbmVyaWMgaW5pdGlhbGl6YXRpb24gb2YgQURDLCBpbnB1dCBtaXhlcnMgYW5kIG91dHB1dCBtaXhlcnMKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjlfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGMyNjlfaW5pdF92ZXJic1tdID0gewogCS8qCiAJICogVW5tdXRlIEFEQzAgYW5kIHNldCB0aGUgZGVmYXVsdCBpbnB1dCB0byBtaWMtaW4KIAkgKi8KQEAgLTE0NTcxLDcgKzE0NTg2LDcgQEAKIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjY5dmJfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGMyNjl2Yl9pbml0X3ZlcmJzW10gPSB7CiAJLyoKIAkgKiBVbm11dGUgQURDMCBhbmQgc2V0IHRoZSBkZWZhdWx0IGlucHV0IHRvIG1pYy1pbgogCSAqLwpAQCAtMTQ2MjksNyArMTQ2NDQsNyBAQAogI2RlZmluZSBhbGMyNjlfcGNtX2RpZ2l0YWxfcGxheWJhY2sJYWxjODgwX3BjbV9kaWdpdGFsX3BsYXliYWNrCiAjZGVmaW5lIGFsYzI2OV9wY21fZGlnaXRhbF9jYXB0dXJlCWFsYzg4MF9wY21fZGlnaXRhbF9jYXB0dXJlCiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gYWxjMjY5XzQ0a19wY21fYW5hbG9nX3BsYXliYWNrID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBhbGMyNjlfNDRrX3BjbV9hbmFsb2dfcGxheWJhY2sgPSB7CiAJLnN1YnN0cmVhbXMgPSAxLAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSA4LApAQCAtMTQ2NDIsNyArMTQ2NTcsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIGFsYzI2OV80NGtfcGNtX2FuYWxvZ19jYXB0dXJlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBhbGMyNjlfNDRrX3BjbV9hbmFsb2dfY2FwdHVyZSA9IHsKIAkuc3Vic3RyZWFtcyA9IDEsCiAJLmNoYW5uZWxzX21pbiA9IDIsCiAJLmNoYW5uZWxzX21heCA9IDIsCkBAIC0xNDcyNiw3ICsxNDc0MSw3IEBACiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJaW50IGVycjsKLQlzdGF0aWMgaGRhX25pZF90IGFsYzI2OV9pZ25vcmVbXSA9IHsgMHgxZCwgMCB9OworCXN0YXRpYyBjb25zdCBoZGFfbmlkX3QgYWxjMjY5X2lnbm9yZVtdID0geyAweDFkLCAwIH07CiAKIAllcnIgPSBzbmRfaGRhX3BhcnNlX3Bpbl9kZWZfY29uZmlnKGNvZGVjLCAmc3BlYy0+YXV0b2NmZywKIAkJCQkJICAgYWxjMjY5X2lnbm9yZSk7CkBAIC0xNDc5Niw3ICsxNDgxMSw2IEBACiAJCWFsY19pbml0aG9vayhjb2RlYyk7CiB9CiAKLSNpZmRlZiBTTkRfSERBX05FRURTX1JFU1VNRQogc3RhdGljIHZvaWQgYWxjMjY5X3RvZ2dsZV9wb3dlcl9vdXRwdXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGludCBwb3dlcl91cCkKIHsKIAlpbnQgdmFsID0gYWxjX3JlYWRfY29lZl9pZHgoY29kZWMsIDB4MDQpOwpAQCAtMTQ4MDcsMjUgKzE0ODIxLDE3IEBACiAJYWxjX3dyaXRlX2NvZWZfaWR4KGNvZGVjLCAweDA0LCB2YWwpOwogfQogCi0jaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQotc3RhdGljIGludCBhbGMyNjlfc3VzcGVuZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIHZvaWQgYWxjMjY5X3NodXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQogCWlmICgoYWxjX3JlYWRfY29lZl9pZHgoY29kZWMsIDApICYgMHgwMGZmKSA9PSAweDAxNykKIAkJYWxjMjY5X3RvZ2dsZV9wb3dlcl9vdXRwdXQoY29kZWMsIDApOwogCWlmICgoYWxjX3JlYWRfY29lZl9pZHgoY29kZWMsIDApICYgMHgwMGZmKSA9PSAweDAxOCkgewogCQlhbGMyNjlfdG9nZ2xlX3Bvd2VyX291dHB1dChjb2RlYywgMCk7CiAJCW1zbGVlcCgxNTApOwogCX0KLQotCWFsY19zaHV0dXAoY29kZWMpOwotCWlmIChzcGVjICYmIHNwZWMtPnBvd2VyX2hvb2spCi0JCXNwZWMtPnBvd2VyX2hvb2soY29kZWMpOwotCXJldHVybiAwOwogfQotI2VuZGlmIC8qIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUgKi8KIAorI2lmZGVmIFNORF9IREFfTkVFRFNfUkVTVU1FCiBzdGF0aWMgaW50IGFsYzI2OV9yZXN1bWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJaWYgKChhbGNfcmVhZF9jb2VmX2lkeChjb2RlYywgMCkgJiAweDAwZmYpID09IDB4MDE4KSB7CkBAIC0xNDg2NCw3ICsxNDg3MCw3IEBACiBzdGF0aWMgdm9pZCBhbGMyNzFfZml4dXBfZG1pYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBhbGNfZml4dXAgKmZpeCwgaW50IGFjdGlvbikKIHsKLQlzdGF0aWMgc3RydWN0IGhkYV92ZXJiIHZlcmJzW10gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiB2ZXJic1tdID0gewogCQl7MHgyMCwgQUNfVkVSQl9TRVRfQ09FRl9JTkRFWCwgMHgwZH0sCiAJCXsweDIwLCBBQ19WRVJCX1NFVF9QUk9DX0NPRUYsIDB4NDAwMH0sCiAJCXt9CkBAIC0xNDk0Nyw3ICsxNDk1Myw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGMyNjlfZml4dXBfdGJsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjMjY5X2ZpeHVwX3RibFtdID0gewogCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDkwNzMsICJTb255IFZBSU8iLCBBTEMyNzVfRklYVVBfU09OWV9WQUlPX0dQSU8yKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg5MDdiLCAiU29ueSBWQUlPIiwgQUxDMjc1X0ZJWFVQX1NPTllfSFdFUSksCiAJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4OTA4NCwgIlNvbnkgVkFJTyIsIEFMQzI3NV9GSVhVUF9TT05ZX0hXRVEpLApAQCAtMTQ5NzgsNyArMTQ5ODQsNyBAQAogCVtBTEMyNjlfQVVUT10JCQk9ICJhdXRvIiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGMyNjlfY2ZnX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzI2OV9jZmdfdGJsW10gPSB7CiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4M2JmOCwgIlF1YW50YSBGTDEiLCBBTEMyNjlfUVVBTlRBX0ZMMSksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDQ3YywgIkFDRVIgWkdBIiwgQUxDMjcxX0FDRVIpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgzMzAsICJBU1VTIEVlZXBjIFA3MDMgUDkwMEEiLApAQCAtMTUwMzYsNyArMTUwNDIsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgc3RydWN0IGFsY19jb25maWdfcHJlc2V0IGFsYzI2OV9wcmVzZXRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGFsY19jb25maWdfcHJlc2V0IGFsYzI2OV9wcmVzZXRzW10gPSB7CiAJW0FMQzI2OV9CQVNJQ10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzI2OV9iYXNlX21peGVyIH0sCiAJCS5pbml0X3ZlcmJzID0geyBhbGMyNjlfaW5pdF92ZXJicyB9LApAQCAtMTUwNzAsOSArMTUwNzYsOSBAQAogCQkuaHBfbmlkID0gMHgwMywKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzI2OV9tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGMyNjlfbW9kZXMsCi0JCS51bnNvbF9ldmVudCA9IGFsYzI2OV9sYXB0b3BfdW5zb2xfZXZlbnQsCisJCS51bnNvbF9ldmVudCA9IGFsY19za3VfdW5zb2xfZXZlbnQsCiAJCS5zZXR1cCA9IGFsYzI2OV9sYXB0b3BfYW1pY19zZXR1cCwKLQkJLmluaXRfaG9vayA9IGFsYzI2OV9sYXB0b3BfaW5pdGhvb2ssCisJCS5pbml0X2hvb2sgPSBhbGNfaW5pdGhvb2ssCiAJfSwKIAlbQUxDMjY5X0RNSUNdID0gewogCQkubWl4ZXJzID0geyBhbGMyNjlfbGFwdG9wX21peGVyIH0sCkBAIC0xNTA4NCw5ICsxNTA5MCw5IEBACiAJCS5ocF9uaWQgPSAweDAzLAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjY5X21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2OV9tb2RlcywKLQkJLnVuc29sX2V2ZW50ID0gYWxjMjY5X2xhcHRvcF91bnNvbF9ldmVudCwKKwkJLnVuc29sX2V2ZW50ID0gYWxjX3NrdV91bnNvbF9ldmVudCwKIAkJLnNldHVwID0gYWxjMjY5X2xhcHRvcF9kbWljX3NldHVwLAotCQkuaW5pdF9ob29rID0gYWxjMjY5X2xhcHRvcF9pbml0aG9vaywKKwkJLmluaXRfaG9vayA9IGFsY19pbml0aG9vaywKIAl9LAogCVtBTEMyNjlWQl9BTUlDXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjMjY5dmJfbGFwdG9wX21peGVyIH0sCkBAIC0xNTA5OCw5ICsxNTEwNCw5IEBACiAJCS5ocF9uaWQgPSAweDAzLAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjY5X21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2OV9tb2RlcywKLQkJLnVuc29sX2V2ZW50ID0gYWxjMjY5X2xhcHRvcF91bnNvbF9ldmVudCwKKwkJLnVuc29sX2V2ZW50ID0gYWxjX3NrdV91bnNvbF9ldmVudCwKIAkJLnNldHVwID0gYWxjMjY5dmJfbGFwdG9wX2FtaWNfc2V0dXAsCi0JCS5pbml0X2hvb2sgPSBhbGMyNjlfbGFwdG9wX2luaXRob29rLAorCQkuaW5pdF9ob29rID0gYWxjX2luaXRob29rLAogCX0sCiAJW0FMQzI2OVZCX0RNSUNdID0gewogCQkubWl4ZXJzID0geyBhbGMyNjl2Yl9sYXB0b3BfbWl4ZXIgfSwKQEAgLTE1MTEyLDkgKzE1MTE4LDkgQEAKIAkJLmhwX25pZCA9IDB4MDMsCiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGMyNjlfbW9kZXMpLAogCQkuY2hhbm5lbF9tb2RlID0gYWxjMjY5X21vZGVzLAotCQkudW5zb2xfZXZlbnQgPSBhbGMyNjlfbGFwdG9wX3Vuc29sX2V2ZW50LAorCQkudW5zb2xfZXZlbnQgPSBhbGNfc2t1X3Vuc29sX2V2ZW50LAogCQkuc2V0dXAgPSBhbGMyNjl2Yl9sYXB0b3BfZG1pY19zZXR1cCwKLQkJLmluaXRfaG9vayA9IGFsYzI2OV9sYXB0b3BfaW5pdGhvb2ssCisJCS5pbml0X2hvb2sgPSBhbGNfaW5pdGhvb2ssCiAJfSwKIAlbQUxDMjY5X0ZVSklUU1VdID0gewogCQkubWl4ZXJzID0geyBhbGMyNjlfZnVqaXRzdV9taXhlciB9LApAQCAtMTUxMjYsOSArMTUxMzIsOSBAQAogCQkuaHBfbmlkID0gMHgwMywKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzI2OV9tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGMyNjlfbW9kZXMsCi0JCS51bnNvbF9ldmVudCA9IGFsYzI2OV9sYXB0b3BfdW5zb2xfZXZlbnQsCisJCS51bnNvbF9ldmVudCA9IGFsY19za3VfdW5zb2xfZXZlbnQsCiAJCS5zZXR1cCA9IGFsYzI2OV9sYXB0b3BfZG1pY19zZXR1cCwKLQkJLmluaXRfaG9vayA9IGFsYzI2OV9sYXB0b3BfaW5pdGhvb2ssCisJCS5pbml0X2hvb2sgPSBhbGNfaW5pdGhvb2ssCiAJfSwKIAlbQUxDMjY5X0xJRkVCT09LXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjMjY5X2xpZmVib29rX21peGVyIH0sCkBAIC0xNTE0MCw2ICsxNTE0Niw3IEBACiAJCS5jaGFubmVsX21vZGUgPSBhbGMyNjlfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjMjY5X2NhcHR1cmVfc291cmNlLAogCQkudW5zb2xfZXZlbnQgPSBhbGMyNjlfbGlmZWJvb2tfdW5zb2xfZXZlbnQsCisJCS5zZXR1cCA9IGFsYzI2OV9saWZlYm9va19zZXR1cCwKIAkJLmluaXRfaG9vayA9IGFsYzI2OV9saWZlYm9va19pbml0X2hvb2ssCiAJfSwKIAlbQUxDMjcxX0FDRVJdID0gewpAQCAtMTUxODUsMTQgKzE1MTkyLDIxIEBACiAJCXZhbCA9IGFsY19yZWFkX2NvZWZfaWR4KGNvZGVjLCAweGQpOwogCQlpZiAoKHZhbCAmIDB4MGMwMCkgPj4gMTAgIT0gMHgxKSB7CiAJCQkvKiBDYXBsZXNzIHJhbXAgdXAgY2xvY2sgY29udHJvbCAqLwotCQkJYWxjX3dyaXRlX2NvZWZfaWR4KGNvZGVjLCAweGQsIHZhbCB8IDE8PDEwKTsKKwkJCWFsY193cml0ZV9jb2VmX2lkeChjb2RlYywgMHhkLCB2YWwgfCAoMTw8MTApKTsKIAkJfQogCQl2YWwgPSBhbGNfcmVhZF9jb2VmX2lkeChjb2RlYywgMHgxNyk7CiAJCWlmICgodmFsICYgMHgwMWMwKSA+PiA2ICE9IDB4NCkgewogCQkJLyogQ2xhc3MgRCBwb3dlciBvbiByZXNldCAqLwotCQkJYWxjX3dyaXRlX2NvZWZfaWR4KGNvZGVjLCAweDE3LCB2YWwgfCAxPDw3KTsKKwkJCWFsY193cml0ZV9jb2VmX2lkeChjb2RlYywgMHgxNywgdmFsIHwgKDE8PDcpKTsKIAkJfQogCX0KKworCXZhbCA9IGFsY19yZWFkX2NvZWZfaWR4KGNvZGVjLCAweGQpOyAvKiBDbGFzcyBEICovCisJYWxjX3dyaXRlX2NvZWZfaWR4KGNvZGVjLCAweGQsIHZhbCB8ICgxPDwxNCkpOworCisJdmFsID0gYWxjX3JlYWRfY29lZl9pZHgoY29kZWMsIDB4NCk7IC8qIEhQICovCisJYWxjX3dyaXRlX2NvZWZfaWR4KGNvZGVjLCAweDQsIHZhbCB8ICgxPDwxMSkpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1MzEzLDE0ICsxNTMyNywxMiBAQAogCXNwZWMtPnZtYXN0ZXJfbmlkID0gMHgwMjsKIAogCWNvZGVjLT5wYXRjaF9vcHMgPSBhbGNfcGF0Y2hfb3BzOwotI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKLQljb2RlYy0+cGF0Y2hfb3BzLnN1c3BlbmQgPSBhbGMyNjlfc3VzcGVuZDsKLSNlbmRpZgogI2lmZGVmIFNORF9IREFfTkVFRFNfUkVTVU1FCiAJY29kZWMtPnBhdGNoX29wcy5yZXN1bWUgPSBhbGMyNjlfcmVzdW1lOwogI2VuZGlmCiAJaWYgKGJvYXJkX2NvbmZpZyA9PSBBTEMyNjlfQVVUTykKIAkJc3BlYy0+aW5pdF9ob29rID0gYWxjMjY5X2F1dG9faW5pdDsKKwlzcGVjLT5zaHV0dXAgPSBhbGMyNjlfc2h1dHVwOwogCiAJYWxjX2luaXRfamFja3MoY29kZWMpOwogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKQEAgLTE1MzQxLDcgKzE1MzUzLDcgQEAKICAqIHNldCB0aGUgcGF0aCB3YXlzIGZvciAyIGNoYW5uZWwgb3V0cHV0CiAgKiBuZWVkIHRvIHNldCB0aGUgY29kZWMgbGluZSBvdXQgYW5kIG1pYyAxIHBpbiB3aWRnZXRzIHRvIGlucHV0cwogICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg2MV90aHJlZXN0YWNrX2NoMl9pbml0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg2MV90aHJlZXN0YWNrX2NoMl9pbml0W10gPSB7CiAJLyogc2V0IHBpbiB3aWRnZXQgMUFoIChsaW5lIGluKSBmb3IgaW5wdXQgKi8KIAl7IDB4MGMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgyMCB9LAogCS8qIHNldCBwaW4gd2lkZ2V0IDE4aCAobWljMS8yKSBmb3IgaW5wdXQsIGZvciBtaWMgYWxzbyBlbmFibGUKQEAgLTE1MzYwLDcgKzE1MzcyLDcgQEAKICAqIDZjaCBtb2RlCiAgKiBuZWVkIHRvIHNldCB0aGUgY29kZWMgbGluZSBvdXQgYW5kIG1pYyAxIHBpbiB3aWRnZXRzIHRvIG91dHB1dHMKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4NjFfdGhyZWVzdGFja19jaDZfaW5pdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4NjFfdGhyZWVzdGFja19jaDZfaW5pdFtdID0gewogCS8qIHNldCBwaW4gd2lkZ2V0IDFBaCAobGluZSBpbikgZm9yIG91dHB1dCAoQmFjayBTdXJyb3VuZCkqLwogCXsgMHgwYywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDQwIH0sCiAJLyogc2V0IHBpbiB3aWRnZXQgMThoIChtaWMxKSBmb3Igb3V0cHV0IChDTEZFKSovCkBAIC0xNTM3NywzMCArMTUzODksMzAgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjODYxX3RocmVlc3RhY2tfbW9kZXNbMl0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjODYxX3RocmVlc3RhY2tfbW9kZXNbMl0gPSB7CiAJeyAyLCBhbGM4NjFfdGhyZWVzdGFja19jaDJfaW5pdCB9LAogCXsgNiwgYWxjODYxX3RocmVlc3RhY2tfY2g2X2luaXQgfSwKIH07CiAvKiBTZXQgbWljMSBhcyBpbnB1dCBhbmQgdW5tdXRlIHRoZSBtaXhlciAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4NjFfdW5pd2lsbF9tMzFfY2gyX2luaXRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODYxX3VuaXdpbGxfbTMxX2NoMl9pbml0W10gPSB7CiAJeyAweDBkLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4MjQgfSwKIAl7IDB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsICgweDcwODAgfCAoMHgwMSA8PCA4KSkgfSwgLyptaWMqLwogCXsgfSAvKiBlbmQgKi8KIH07CiAvKiBTZXQgbWljMSBhcyBvdXRwdXQgYW5kIG11dGUgbWl4ZXIgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODYxX3VuaXdpbGxfbTMxX2NoNF9pbml0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg2MV91bml3aWxsX20zMV9jaDRfaW5pdFtdID0gewogCXsgMHgwZCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDQwIH0sCiAJeyAweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAoMHg3MDAwIHwgKDB4MDEgPDwgOCkpIH0sIC8qbWljKi8KIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjODYxX3VuaXdpbGxfbTMxX21vZGVzWzJdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzg2MV91bml3aWxsX20zMV9tb2Rlc1syXSA9IHsKIAl7IDIsIGFsYzg2MV91bml3aWxsX20zMV9jaDJfaW5pdCB9LAogCXsgNCwgYWxjODYxX3VuaXdpbGxfbTMxX2NoNF9pbml0IH0sCiB9OwogCiAvKiBTZXQgbWljMSBhbmQgbGluZS1pbiBhcyBpbnB1dCBhbmQgdW5tdXRlIHRoZSBtaXhlciAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4NjFfYXN1c19jaDJfaW5pdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4NjFfYXN1c19jaDJfaW5pdFtdID0gewogCS8qIHNldCBwaW4gd2lkZ2V0IDFBaCAobGluZSBpbikgZm9yIGlucHV0ICovCiAJeyAweDBjLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4MjAgfSwKIAkvKiBzZXQgcGluIHdpZGdldCAxOGggKG1pYzEvMikgZm9yIGlucHV0LCBmb3IgbWljIGFsc28gZW5hYmxlCkBAIC0xNTQxNiw3ICsxNTQyOCw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIC8qIFNldCBtaWMxIG5hZCBsaW5lLWluIGFzIG91dHB1dCBhbmQgbXV0ZSBtaXhlciAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4NjFfYXN1c19jaDZfaW5pdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4NjFfYXN1c19jaDZfaW5pdFtdID0gewogCS8qIHNldCBwaW4gd2lkZ2V0IDFBaCAobGluZSBpbikgZm9yIG91dHB1dCAoQmFjayBTdXJyb3VuZCkqLwogCXsgMHgwYywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDQwIH0sCiAJLyogeyAweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB9LCAqLwpAQCAtMTU0MzQsMTQgKzE1NDQ2LDE0IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzg2MV9hc3VzX21vZGVzWzJdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzg2MV9hc3VzX21vZGVzWzJdID0gewogCXsgMiwgYWxjODYxX2FzdXNfY2gyX2luaXQgfSwKIAl7IDYsIGFsYzg2MV9hc3VzX2NoNl9pbml0IH0sCiB9OwogCiAvKiBwYXRjaC1BTEM4NjEgKi8KIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg2MV9iYXNlX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODYxX2Jhc2VfbWl4ZXJbXSA9IHsKICAgICAgICAgLyogb3V0cHV0IG1peGVyIGNvbnRyb2wgKi8KIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwMywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiU3Vycm91bmQgUGxheWJhY2sgU3dpdGNoIiwgMHgwNiwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTE1NDY0LDcgKzE1NDc2LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODYxXzNTVF9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg2MV8zU1RfbWl4ZXJbXSA9IHsKICAgICAgICAgLyogb3V0cHV0IG1peGVyIGNvbnRyb2wgKi8KIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwMywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiU3Vycm91bmQgUGxheWJhY2sgU3dpdGNoIiwgMHgwNiwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTE1NDk1LDcgKzE1NTA3LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODYxX3Rvc2hpYmFfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4NjFfdG9zaGliYV9taXhlcltdID0gewogICAgICAgICAvKiBvdXRwdXQgbWl4ZXIgY29udHJvbCAqLwogCUhEQV9DT0RFQ19NVVRFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwMywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgxNSwgMHgwMSwgSERBX0lOUFVUKSwKQEAgLTE1NTA0LDcgKzE1NTE2LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODYxX3VuaXdpbGxfbTMxX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODYxX3VuaXdpbGxfbTMxX21peGVyW10gPSB7CiAgICAgICAgIC8qIG91dHB1dCBtaXhlciBjb250cm9sICovCiAJSERBX0NPREVDX01VVEUoIkZyb250IFBsYXliYWNrIFN3aXRjaCIsIDB4MDMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIlN1cnJvdW5kIFBsYXliYWNrIFN3aXRjaCIsIDB4MDYsIDB4MCwgSERBX09VVFBVVCksCkBAIC0xNTUzNSw3ICsxNTU0Nyw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg2MV9hc3VzX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODYxX2FzdXNfbWl4ZXJbXSA9IHsKICAgICAgICAgLyogb3V0cHV0IG1peGVyIGNvbnRyb2wgKi8KIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwMywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiU3Vycm91bmQgUGxheWJhY2sgU3dpdGNoIiwgMHgwNiwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTE1NTY3LDcgKzE1NTc5LDcgQEAKIH07CiAKIC8qIGFkZGl0aW9uYWwgbWl4ZXIgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4NjFfYXN1c19sYXB0b3BfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4NjFfYXN1c19sYXB0b3BfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDE1LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MTUsIDB4MCwgSERBX0lOUFVUKSwKIAl7IH0KQEAgLTE1NTc2LDcgKzE1NTg4LDcgQEAKIC8qCiAgKiBnZW5lcmljIGluaXRpYWxpemF0aW9uIG9mIEFEQywgaW5wdXQgbWl4ZXJzIGFuZCBvdXRwdXQgbWl4ZXJzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODYxX2Jhc2VfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4NjFfYmFzZV9pbml0X3ZlcmJzW10gPSB7CiAJLyoKIAkgKiBVbm11dGUgQURDMCBhbmQgc2V0IHRoZSBkZWZhdWx0IGlucHV0IHRvIG1pYy1pbgogCSAqLwpAQCAtMTU2NDIsNyArMTU2NTQsNyBAQAogCXsgfQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4NjFfdGhyZWVzdGFja19pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg2MV90aHJlZXN0YWNrX2luaXRfdmVyYnNbXSA9IHsKIAkvKgogCSAqIFVubXV0ZSBBREMwIGFuZCBzZXQgdGhlIGRlZmF1bHQgaW5wdXQgdG8gbWljLWluCiAJICovCkBAIC0xNTcwMyw3ICsxNTcxNSw3IEBACiAJeyB9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg2MV91bml3aWxsX20zMV9pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg2MV91bml3aWxsX20zMV9pbml0X3ZlcmJzW10gPSB7CiAJLyoKIAkgKiBVbm11dGUgQURDMCBhbmQgc2V0IHRoZSBkZWZhdWx0IGlucHV0IHRvIG1pYy1pbgogCSAqLwpAQCAtMTU3NjUsNyArMTU3NzcsNyBAQAogCXsgfQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4NjFfYXN1c19pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg2MV9hc3VzX2luaXRfdmVyYnNbXSA9IHsKIAkvKgogCSAqIFVubXV0ZSBBREMwIGFuZCBzZXQgdGhlIGRlZmF1bHQgaW5wdXQgdG8gbWljLWluCiAJICovCkBAIC0xNTgzMSw3ICsxNTg0Myw3IEBACiB9OwogCiAvKiBhZGRpdGlvbmFsIGluaXQgdmVyYnMgZm9yIEFTVVMgbGFwdG9wcyAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4NjFfYXN1c19sYXB0b3BfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4NjFfYXN1c19sYXB0b3BfaW5pdF92ZXJic1tdID0gewogCXsgMHgwZiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDQ1IH0sIC8qIEhQLW91dCAqLwogCXsgMHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMikgfSwgLyogbXV0ZSBsaW5lLWluICovCiAJeyB9CkBAIC0xNTg0MCw3ICsxNTg1Miw3IEBACiAvKgogICogZ2VuZXJpYyBpbml0aWFsaXphdGlvbiBvZiBBREMsIGlucHV0IG1peGVycyBhbmQgb3V0cHV0IG1peGVycwogICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg2MV9hdXRvX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODYxX2F1dG9faW5pdF92ZXJic1tdID0gewogCS8qCiAJICogVW5tdXRlIEFEQzAgYW5kIHNldCB0aGUgZGVmYXVsdCBpbnB1dCB0byBtaWMtaW4KIAkgKi8KQEAgLTE1ODg5LDcgKzE1OTAxLDcgQEAKIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODYxX3Rvc2hpYmFfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4NjFfdG9zaGliYV9pbml0X3ZlcmJzW10gPSB7CiAJezB4MGYsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBTEM4ODBfSFBfRVZFTlR9LAogCiAJeyB9CkBAIC0xNTkyMiwyNiArMTU5MzQsMjYgQEAKIAogI2RlZmluZSBBTEM4NjFfRElHT1VUX05JRAkweDA3CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhbGM4NjFfOGNoX21vZGVzWzFdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzg2MV84Y2hfbW9kZXNbMV0gPSB7CiAJeyA4LCBOVUxMIH0KIH07CiAKLXN0YXRpYyBoZGFfbmlkX3QgYWxjODYxX2RhY19uaWRzWzRdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBhbGM4NjFfZGFjX25pZHNbNF0gPSB7CiAJLyogZnJvbnQsIHN1cnJvdW5kLCBjbGZlLCBzaWRlICovCiAJMHgwMywgMHgwNiwgMHgwNSwgMHgwNAogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBhbGM2NjBfZGFjX25pZHNbM10gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IGFsYzY2MF9kYWNfbmlkc1szXSA9IHsKIAkvKiBmcm9udCwgY2xmZSwgc3Vycm91bmQgKi8KIAkweDAzLCAweDA1LCAweDA2CiB9OwogCi1zdGF0aWMgaGRhX25pZF90IGFsYzg2MV9hZGNfbmlkc1sxXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3QgYWxjODYxX2FkY19uaWRzWzFdID0gewogCS8qIEFEQzAtMiAqLwogCTB4MDgsCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjODYxX2NhcHR1cmVfc291cmNlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzg2MV9jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gNSwKIAkuaXRlbXMgPSB7CiAJCXsgIk1pYyIsIDB4MCB9LApAQCAtMTU5OTEsNyArMTYwMDMsNyBAQAogCQlkYWMgPSBhbGM4NjFfbG9va19mb3JfZGFjKGNvZGVjLCBuaWQpOwogCQlpZiAoIWRhYykKIAkJCWNvbnRpbnVlOwotCQlzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tzcGVjLT5tdWx0aW91dC5udW1fZGFjcysrXSA9IGRhYzsKKwkJc3BlYy0+cHJpdmF0ZV9kYWNfbmlkc1tzcGVjLT5tdWx0aW91dC5udW1fZGFjcysrXSA9IGRhYzsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xNjAxNCwxMSArMTYwMjYsMTUgQEAKIAlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNobmFtZVs0XSA9IHsKIAkJIkZyb250IiwgIlN1cnJvdW5kIiwgTlVMTCAvKkNMRkUqLywgIlNpZGUiCiAJfTsKLQljb25zdCBjaGFyICpwZnggPSBhbGNfZ2V0X2xpbmVfb3V0X3BmeChjZmcsIHRydWUpOworCWNvbnN0IGNoYXIgKnBmeCA9IGFsY19nZXRfbGluZV9vdXRfcGZ4KHNwZWMsIHRydWUpOwogCWhkYV9uaWRfdCBuaWQ7Ci0JaW50IGksIGVycjsKKwlpbnQgaSwgZXJyLCBub3V0cHV0czsKIAotCWZvciAoaSA9IDA7IGkgPCBjZmctPmxpbmVfb3V0czsgaSsrKSB7CisJbm91dHB1dHMgPSBjZmctPmxpbmVfb3V0czsKKwlpZiAoc3BlYy0+bXVsdGlfaW9zID4gMCkKKwkJbm91dHB1dHMgKz0gc3BlYy0+bXVsdGlfaW9zOworCisJZm9yIChpID0gMDsgaSA8IG5vdXRwdXRzOyBpKyspIHsKIAkJbmlkID0gc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV07CiAJCWlmICghbmlkKQogCQkJY29udGludWU7CkBAIC0xNjE1MSw3ICsxNjE2Nyw3IEBACiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJaW50IGVycjsKLQlzdGF0aWMgaGRhX25pZF90IGFsYzg2MV9pZ25vcmVbXSA9IHsgMHgxZCwgMCB9OworCXN0YXRpYyBjb25zdCBoZGFfbmlkX3QgYWxjODYxX2lnbm9yZVtdID0geyAweDFkLCAwIH07CiAKIAllcnIgPSBzbmRfaGRhX3BhcnNlX3Bpbl9kZWZfY29uZmlnKGNvZGVjLCAmc3BlYy0+YXV0b2NmZywKIAkJCQkJICAgYWxjODYxX2lnbm9yZSk7CkBAIC0xNjE2Myw2ICsxNjE3OSw5IEBACiAJZXJyID0gYWxjODYxX2F1dG9fZmlsbF9kYWNfbmlkcyhjb2RlYywgJnNwZWMtPmF1dG9jZmcpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOworCWVyciA9IGFsY19hdXRvX2FkZF9tdWx0aV9jaGFubmVsX21vZGUoY29kZWMpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWVyciA9IGFsYzg2MV9hdXRvX2NyZWF0ZV9tdWx0aV9vdXRfY3Rscyhjb2RlYywgJnNwZWMtPmF1dG9jZmcpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtMTYyMDcsNyArMTYyMjYsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQotc3RhdGljIHN0cnVjdCBoZGFfYW1wX2xpc3QgYWxjODYxX2xvb3BiYWNrc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfYW1wX2xpc3QgYWxjODYxX2xvb3BiYWNrc1tdID0gewogCXsgMHgxNSwgSERBX0lOUFVULCAwIH0sCiAJeyAweDE1LCBIREFfSU5QVVQsIDEgfSwKIAl7IDB4MTUsIEhEQV9JTlBVVCwgMiB9LApAQCAtMTYyMzIsNyArMTYyNTEsNyBAQAogCVtBTEM4NjFfQVVUT10JCT0gImF1dG8iLAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzg2MV9jZmdfdGJsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjODYxX2NmZ190YmxbXSA9IHsKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMjA1LCAiQVNVUyBXN0oiLCBBTEM4NjFfM1NUKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMzM1LCAiQVNVUyBGMi8zIiwgQUxDODYxX0FTVVNfTEFQVE9QKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMzM4LCAiQVNVUyBGMi8zIiwgQUxDODYxX0FTVVNfTEFQVE9QKSwKQEAgLTE2MjU2LDcgKzE2Mjc1LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBhbGNfY29uZmlnX3ByZXNldCBhbGM4NjFfcHJlc2V0c1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhbGNfY29uZmlnX3ByZXNldCBhbGM4NjFfcHJlc2V0c1tdID0gewogCVtBTEM4NjFfM1NUXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODYxXzNTVF9taXhlciB9LAogCQkuaW5pdF92ZXJicyA9IHsgYWxjODYxX3RocmVlc3RhY2tfaW5pdF92ZXJicyB9LApAQCAtMTYzNzksNyArMTYzOTgsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjODYxX2ZpeHVwX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzg2MV9maXh1cF90YmxbXSA9IHsKIAlTTkRfUENJX1FVSVJLKDB4MTczNCwgMHgxMGM3LCAiRlNDIEFtaWxvIFBpMTUwNSIsIFBJTkZJWF9GU0NfQU1JTE9fUEkxNTA1KSwKIAl7fQogfTsKQEAgLTE2NDcyLDcgKzE2NDkxLDcgQEAKICAqLwogI2RlZmluZSBBTEM4NjFWRF9ESUdPVVRfTklECTB4MDYKIAotc3RhdGljIGhkYV9uaWRfdCBhbGM4NjF2ZF9kYWNfbmlkc1s0XSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3QgYWxjODYxdmRfZGFjX25pZHNbNF0gPSB7CiAJLyogZnJvbnQsIHN1cnIsIGNsZmUsIHNpZGUgc3VyciAqLwogCTB4MDIsIDB4MDMsIDB4MDQsIDB4MDUKIH07CkBAIC0xNjQ4NCwyMSArMTY1MDMsMjEgQEAKICAqIC0gYW5kIGl0IGlzIHRoZSBzYW1lIGFzIGluIDg2MXZkLgogICogYWRjX25pZHMgaW4gQUxDNjYwdmQgYXJlIChpcykgdGhlIHNhbWUgYXMgaW4gODYxdmQKICAqLwotc3RhdGljIGhkYV9uaWRfdCBhbGM2NjB2ZF9kYWNfbmlkc1szXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3QgYWxjNjYwdmRfZGFjX25pZHNbM10gPSB7CiAJLyogZnJvbnQsIHJlYXIsIGNsZmUsIHJlYXJfc3VyciAqLwogCTB4MDIsIDB4MDQsIDB4MDMKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3QgYWxjODYxdmRfYWRjX25pZHNbMV0gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IGFsYzg2MXZkX2FkY19uaWRzWzFdID0gewogCS8qIEFEQzAgKi8KIAkweDA5LAogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBhbGM4NjF2ZF9jYXBzcmNfbmlkc1sxXSA9IHsgMHgyMiB9Oworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBhbGM4NjF2ZF9jYXBzcmNfbmlkc1sxXSA9IHsgMHgyMiB9OwogCiAvKiBpbnB1dCBNVVggKi8KIC8qIEZJWE1FOiBzaG91bGQgYmUgYSBtYXRyaXgtdHlwZSBpbnB1dCBzb3VyY2Ugc2VsZWN0aW9uICovCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjODYxdmRfY2FwdHVyZV9zb3VyY2UgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjODYxdmRfY2FwdHVyZV9zb3VyY2UgPSB7CiAJLm51bV9pdGVtcyA9IDQsCiAJLml0ZW1zID0gewogCQl7ICJNaWMiLCAweDAgfSwKQEAgLTE2NTA4LDcgKzE2NTI3LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzg2MXZkX2RhbGxhc19jYXB0dXJlX3NvdXJjZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGM4NjF2ZF9kYWxsYXNfY2FwdHVyZV9zb3VyY2UgPSB7CiAJLm51bV9pdGVtcyA9IDIsCiAJLml0ZW1zID0gewogCQl7ICJNaWMiLCAweDAgfSwKQEAgLTE2NTE2LDcgKzE2NTM1LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzg2MXZkX2hwX2NhcHR1cmVfc291cmNlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzg2MXZkX2hwX2NhcHR1cmVfc291cmNlID0gewogCS5udW1faXRlbXMgPSAyLAogCS5pdGVtcyA9IHsKIAkJeyAiRnJvbnQgTWljIiwgMHgwIH0sCkBAIC0xNjUyNywxNCArMTY1NDYsMTQgQEAKIC8qCiAgKiAyY2ggbW9kZQogICovCi1zdGF0aWMgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjODYxdmRfM3N0YWNrXzJjaF9tb2Rlc1sxXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhbGM4NjF2ZF8zc3RhY2tfMmNoX21vZGVzWzFdID0gewogCXsgMiwgTlVMTCB9CiB9OwogCiAvKgogICogNmNoIG1vZGUKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4NjF2ZF82c3RhY2tfY2g2X2luaXRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODYxdmRfNnN0YWNrX2NoNl9pbml0W10gPSB7CiAJeyAweDE3LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4MDAgfSwKIAl7IDB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAogCXsgMHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCkBAIC0xNjU0NSw3ICsxNjU2NCw3IEBACiAvKgogICogOGNoIG1vZGUKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4NjF2ZF82c3RhY2tfY2g4X2luaXRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODYxdmRfNnN0YWNrX2NoOF9pbml0W10gPSB7CiAJeyAweDE3LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKIAl7IDB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAogCXsgMHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCkBAIC0xNjU1MywxMiArMTY1NzIsMTIgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjODYxdmRfNnN0YWNrX21vZGVzWzJdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzg2MXZkXzZzdGFja19tb2Rlc1syXSA9IHsKIAl7IDYsIGFsYzg2MXZkXzZzdGFja19jaDZfaW5pdCB9LAogCXsgOCwgYWxjODYxdmRfNnN0YWNrX2NoOF9pbml0IH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODYxdmRfY2htb2RlX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODYxdmRfY2htb2RlX21peGVyW10gPSB7CiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiQ2hhbm5lbCBNb2RlIiwKQEAgLTE2NTcyLDcgKzE2NTkxLDcgQEAKIC8qIFBpbiBhc3NpZ25tZW50OiBGcm9udD0weDE0LCBSZWFyPTB4MTUsIENMRkU9MHgxNiwgU2lkZT0weDE3CiAgKiAgICAgICAgICAgICAgICAgTWljPTB4MTgsIEZyb250IE1pYz0weDE5LCBMaW5lLUluPTB4MWEsIEhQPTB4MWIKICAqLwotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg2MXZkXzZzdF9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg2MXZkXzZzdF9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MDIsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKIApAQCAtMTY2MDgsNyArMTY2MjcsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4NjF2ZF8zc3RfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4NjF2ZF8zc3RfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDAyLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9CSU5EX01VVEUoIkZyb250IFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDIsIEhEQV9JTlBVVCksCiAKQEAgLTE2NjMxLDcgKzE2NjUwLDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODYxdmRfbGVub3ZvX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODYxdmRfbGVub3ZvX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwgMHgwMiwgMHgwLCBIREFfT1VUUFVUKSwKIAkvKkhEQV9CSU5EX01VVEUoIkZyb250IFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDIsIEhEQV9JTlBVVCksKi8KIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgxNCwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTE2NjU1LDcgKzE2Njc0LDcgQEAKIC8qIFBpbiBhc3NpZ25tZW50OiBTcGVha2VyPTB4MTQsIEhQID0gMHgxNSwKICAqICAgICAgICAgICAgICAgICBNaWM9MHgxOCwgSW50ZXJuYWwgTWljID0gMHgxOSwgQ0QgPSAweDFjLCBQQyBCZWVwID0gMHgxZAogICovCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODYxdmRfZGFsbGFzX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODYxdmRfZGFsbGFzX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDAyLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9CSU5EX01VVEUoIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwMywgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTE2NjcyLDcgKzE2NjkxLDcgQEAKIC8qIFBpbiBhc3NpZ25tZW50OiBTcGVha2VyPTB4MTQsIExpbmUtb3V0ID0gMHgxNSwKICAqICAgICAgICAgICAgICAgICBGcm9udCBNaWM9MHgxOCwgQVRBUEkgTWljID0gMHgxOSwKICAqLwotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg2MXZkX2hwX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODYxdmRfaHBfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDAyLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9CSU5EX01VVEUoIkZyb250IFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDB4MDMsIDB4MCwgSERBX09VVFBVVCksCkBAIC0xNjY4OCw3ICsxNjcwNyw3IEBACiAvKgogICogZ2VuZXJpYyBpbml0aWFsaXphdGlvbiBvZiBBREMsIGlucHV0IG1peGVycyBhbmQgb3V0cHV0IG1peGVycwogICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg2MXZkX3ZvbHVtZV9pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg2MXZkX3ZvbHVtZV9pbml0X3ZlcmJzW10gPSB7CiAJLyoKIAkgKiBVbm11dGUgQURDMCBhbmQgc2V0IHRoZSBkZWZhdWx0IGlucHV0IHRvIG1pYy1pbgogCSAqLwpAQCAtMTY3MzgsNyArMTY3NTcsNyBAQAogICogMy1zdGFjayBwaW4gY29uZmlndXJhdGlvbjoKICAqIGZyb250ID0gMHgxNCwgbWljL2NsZmUgPSAweDE4LCBIUCA9IDB4MTksIGxpbmUvc3VyciA9IDB4MWEsIGYtbWljID0gMHgxYgogICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg2MXZkXzNzdGFja19pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg2MXZkXzNzdGFja19pbml0X3ZlcmJzW10gPSB7CiAJLyoKIAkgKiBTZXQgcGluIG1vZGUgYW5kIG11dGluZwogCSAqLwpAQCAtMTY3NjksNyArMTY3ODgsNyBAQAogLyoKICAqIDYtc3RhY2sgcGluIGNvbmZpZ3VyYXRpb246CiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODYxdmRfNnN0YWNrX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODYxdmRfNnN0YWNrX2luaXRfdmVyYnNbXSA9IHsKIAkvKgogCSAqIFNldCBwaW4gbW9kZSBhbmQgbXV0aW5nCiAJICovCkBAIC0xNjgxMCwxOCArMTY4MjksMTggQEAKIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODYxdmRfZWFwZF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM4NjF2ZF9lYXBkX3ZlcmJzW10gPSB7CiAJezB4MTQsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLCAyfSwKIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjNjYwdmRfZWFwZF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM2NjB2ZF9lYXBkX3ZlcmJzW10gPSB7CiAJezB4MTQsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLCAyfSwKIAl7MHgxNSwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDJ9LAogCXsgfQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4NjF2ZF9sZW5vdm9fdW5zb2xfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODYxdmRfbGVub3ZvX3Vuc29sX3ZlcmJzW10gPSB7CiAJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKIAl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNSl9LApAQCAtMTY4MzUsMTEgKzE2ODU0LDEzIEBACiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxYjsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTQ7CisJc3BlYy0+YXV0b211dGUgPSAxOworCXNwZWMtPmF1dG9tdXRlX21vZGUgPSBBTENfQVVUT01VVEVfQU1QOwogfQogCiBzdGF0aWMgdm9pZCBhbGM4NjF2ZF9sZW5vdm9faW5pdF9ob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewotCWFsY19hdXRvbXV0ZV9hbXAoY29kZWMpOworCWFsY19ocF9hdXRvbXV0ZShjb2RlYyk7CiAJYWxjODh4X3NpbXBsZV9taWNfYXV0b211dGUoY29kZWMpOwogfQogCkBAIC0xNjg1MSwxMiArMTY4NzIsMTIgQEAKIAkJYWxjODh4X3NpbXBsZV9taWNfYXV0b211dGUoY29kZWMpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlhbGNfYXV0b211dGVfYW1wX3Vuc29sX2V2ZW50KGNvZGVjLCByZXMpOworCQlhbGNfc2t1X3Vuc29sX2V2ZW50KGNvZGVjLCByZXMpOwogCQlicmVhazsKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODYxdmRfZGFsbGFzX3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzg2MXZkX2RhbGxhc192ZXJic1tdID0gewogCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAogCXsweDAzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAogCXsweDA0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LApAQCAtMTY5MDgsNiArMTY5MjksOCBAQAogCiAJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxNTsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTQ7CisJc3BlYy0+YXV0b211dGUgPSAxOworCXNwZWMtPmF1dG9tdXRlX21vZGUgPSBBTENfQVVUT01VVEVfQU1QOwogfQogCiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQpAQCAtMTY5MzYsNyArMTY5NTksNyBAQAogCVtBTEM4NjFWRF9BVVRPXQkJPSAiYXV0byIsCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjODYxdmRfY2ZnX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzg2MXZkX2NmZ190YmxbXSA9IHsKIAlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHhhODhkLCAiUmVhbHRlayBBTEM2NjAgZGVtbyIsIEFMQzY2MFZEXzNTVCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBiZiwgIkhQIFRYMTAwMCIsIEFMQzg2MVZEX0hQKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMmUyLCAiQXN1cyB6MzVtIiwgQUxDNjYwVkRfM1NUKSwKQEAgLTE2OTU1LDcgKzE2OTc4LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBhbGNfY29uZmlnX3ByZXNldCBhbGM4NjF2ZF9wcmVzZXRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGFsY19jb25maWdfcHJlc2V0IGFsYzg2MXZkX3ByZXNldHNbXSA9IHsKIAlbQUxDNjYwVkRfM1NUXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODYxdmRfM3N0X21peGVyIH0sCiAJCS5pbml0X3ZlcmJzID0geyBhbGM4NjF2ZF92b2x1bWVfaW5pdF92ZXJicywKQEAgLTE3MDMyLDkgKzE3MDU1LDkgQEAKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzg2MXZkXzNzdGFja18yY2hfbW9kZXMpLAogCQkuY2hhbm5lbF9tb2RlID0gYWxjODYxdmRfM3N0YWNrXzJjaF9tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGM4NjF2ZF9kYWxsYXNfY2FwdHVyZV9zb3VyY2UsCi0JCS51bnNvbF9ldmVudCA9IGFsY19hdXRvbXV0ZV9hbXBfdW5zb2xfZXZlbnQsCisJCS51bnNvbF9ldmVudCA9IGFsY19za3VfdW5zb2xfZXZlbnQsCiAJCS5zZXR1cCA9IGFsYzg2MXZkX2RhbGxhc19zZXR1cCwKLQkJLmluaXRfaG9vayA9IGFsY19hdXRvbXV0ZV9hbXAsCisJCS5pbml0X2hvb2sgPSBhbGNfaHBfYXV0b211dGUsCiAJfSwKIAlbQUxDODYxVkRfSFBdID0gewogCQkubWl4ZXJzID0geyBhbGM4NjF2ZF9ocF9taXhlciB9LApAQCAtMTcwNDUsOSArMTcwNjgsOSBAQAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjODYxdmRfM3N0YWNrXzJjaF9tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGM4NjF2ZF8zc3RhY2tfMmNoX21vZGVzLAogCQkuaW5wdXRfbXV4ID0gJmFsYzg2MXZkX2hwX2NhcHR1cmVfc291cmNlLAotCQkudW5zb2xfZXZlbnQgPSBhbGNfYXV0b211dGVfYW1wX3Vuc29sX2V2ZW50LAorCQkudW5zb2xfZXZlbnQgPSBhbGNfc2t1X3Vuc29sX2V2ZW50LAogCQkuc2V0dXAgPSBhbGM4NjF2ZF9kYWxsYXNfc2V0dXAsCi0JCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAorCQkuaW5pdF9ob29rID0gYWxjX2hwX2F1dG9tdXRlLAogCX0sCiAJW0FMQzY2MFZEX0FTVVNfVjFTXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODYxdmRfbGVub3ZvX21peGVyIH0sCkBAIC0xNzE0NiwxMSArMTcxNjksMTUgQEAKIAlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNobmFtZVs0XSA9IHsKIAkJIkZyb250IiwgIlN1cnJvdW5kIiwgIkNMRkUiLCAiU2lkZSIKIAl9OwotCWNvbnN0IGNoYXIgKnBmeCA9IGFsY19nZXRfbGluZV9vdXRfcGZ4KGNmZywgdHJ1ZSk7CisJY29uc3QgY2hhciAqcGZ4ID0gYWxjX2dldF9saW5lX291dF9wZngoc3BlYywgdHJ1ZSk7CiAJaGRhX25pZF90IG5pZF92LCBuaWRfczsKLQlpbnQgaSwgZXJyOworCWludCBpLCBlcnIsIG5vdXRwdXRzOwogCi0JZm9yIChpID0gMDsgaSA8IGNmZy0+bGluZV9vdXRzOyBpKyspIHsKKwlub3V0cHV0cyA9IGNmZy0+bGluZV9vdXRzOworCWlmIChzcGVjLT5tdWx0aV9pb3MgPiAwKQorCQlub3V0cHV0cyArPSBzcGVjLT5tdWx0aV9pb3M7CisKKwlmb3IgKGkgPSAwOyBpIDwgbm91dHB1dHM7IGkrKykgewogCQlpZiAoIXNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2ldKQogCQkJY29udGludWU7CiAJCW5pZF92ID0gYWxjODYxdmRfaWR4X3RvX21peGVyX3ZvbCgKQEAgLTE3MjYzLDcgKzE3MjkwLDcgQEAKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlpbnQgZXJyOwotCXN0YXRpYyBoZGFfbmlkX3QgYWxjODYxdmRfaWdub3JlW10gPSB7IDB4MWQsIDAgfTsKKwlzdGF0aWMgY29uc3QgaGRhX25pZF90IGFsYzg2MXZkX2lnbm9yZVtdID0geyAweDFkLCAwIH07CiAKIAllcnIgPSBzbmRfaGRhX3BhcnNlX3Bpbl9kZWZfY29uZmlnKGNvZGVjLCAmc3BlYy0+YXV0b2NmZywKIAkJCQkJICAgYWxjODYxdmRfaWdub3JlKTsKQEAgLTE3Mjc1LDYgKzE3MzAyLDkgQEAKIAllcnIgPSBhbGM4ODBfYXV0b19maWxsX2RhY19uaWRzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKKwllcnIgPSBhbGNfYXV0b19hZGRfbXVsdGlfY2hhbm5lbF9tb2RlKGNvZGVjKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAllcnIgPSBhbGM4NjF2ZF9hdXRvX2NyZWF0ZV9tdWx0aV9vdXRfY3RscyhzcGVjLCAmc3BlYy0+YXV0b2NmZyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CkBAIC0xNzM0Myw3ICsxNzM3Myw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGM4NjF2ZF9maXh1cF90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGM4NjF2ZF9maXh1cF90YmxbXSA9IHsKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMzM5LCAiQVNVUyBBNy1LIiwgQUxDNjYwVkRfRklYX0FTVVNfR1BJTzEpLAogCXt9CiB9OwpAQCAtMTc0MjYsNiArMTc0NTYsNyBAQAogCiAJaWYgKGJvYXJkX2NvbmZpZyA9PSBBTEM4NjFWRF9BVVRPKQogCQlzcGVjLT5pbml0X2hvb2sgPSBhbGM4NjF2ZF9hdXRvX2luaXQ7CisJc3BlYy0+c2h1dHVwID0gYWxjX2VhcGRfc2h1dHVwOwogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKIAlpZiAoIXNwZWMtPmxvb3BiYWNrLmFtcGxpc3QpCiAJCXNwZWMtPmxvb3BiYWNrLmFtcGxpc3QgPSBhbGM4NjF2ZF9sb29wYmFja3M7CkBAIC0xNzQ0OCwzMiArMTc0NzksMzIgQEAKICNkZWZpbmUgQUxDNjYyX0RJR09VVF9OSUQJMHgwNgogI2RlZmluZSBBTEM2NjJfRElHSU5fTklECTB4MGEKIAotc3RhdGljIGhkYV9uaWRfdCBhbGM2NjJfZGFjX25pZHNbNF0gPSB7Ci0JLyogZnJvbnQsIHJlYXIsIGNsZmUsIHJlYXJfc3VyciAqLworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBhbGM2NjJfZGFjX25pZHNbM10gPSB7CisJLyogZnJvbnQsIHJlYXIsIGNsZmUgKi8KIAkweDAyLCAweDAzLCAweDA0CiB9OwogCi1zdGF0aWMgaGRhX25pZF90IGFsYzI3Ml9kYWNfbmlkc1syXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3QgYWxjMjcyX2RhY19uaWRzWzJdID0gewogCTB4MDIsIDB4MDMKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3QgYWxjNjYyX2FkY19uaWRzWzJdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBhbGM2NjJfYWRjX25pZHNbMl0gPSB7CiAJLyogQURDMS0yICovCiAJMHgwOSwgMHgwOAogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBhbGMyNzJfYWRjX25pZHNbMV0gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IGFsYzI3Ml9hZGNfbmlkc1sxXSA9IHsKIAkvKiBBREMxLTIgKi8KIAkweDA4LAogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBhbGM2NjJfY2Fwc3JjX25pZHNbMl0gPSB7IDB4MjIsIDB4MjMgfTsKLXN0YXRpYyBoZGFfbmlkX3QgYWxjMjcyX2NhcHNyY19uaWRzWzFdID0geyAweDIzIH07CitzdGF0aWMgY29uc3QgaGRhX25pZF90IGFsYzY2Ml9jYXBzcmNfbmlkc1syXSA9IHsgMHgyMiwgMHgyMyB9Oworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBhbGMyNzJfY2Fwc3JjX25pZHNbMV0gPSB7IDB4MjMgfTsKIAogCiAvKiBpbnB1dCBNVVggKi8KIC8qIEZJWE1FOiBzaG91bGQgYmUgYSBtYXRyaXgtdHlwZSBpbnB1dCBzb3VyY2Ugc2VsZWN0aW9uICovCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjNjYyX2NhcHR1cmVfc291cmNlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzY2Ml9jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gNCwKIAkuaXRlbXMgPSB7CiAJCXsgIk1pYyIsIDB4MCB9LApAQCAtMTc0ODMsNyArMTc1MTQsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjNjYyX2xlbm92b18xMDFlX2NhcHR1cmVfc291cmNlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzY2Ml9sZW5vdm9fMTAxZV9jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gMiwKIAkuaXRlbXMgPSB7CiAJCXsgIk1pYyIsIDB4MSB9LApAQCAtMTc0OTEsNyArMTc1MjIsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjNjYzX2NhcHR1cmVfc291cmNlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzY2M19jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gMywKIAkuaXRlbXMgPSB7CiAJCXsgIk1pYyIsIDB4MCB9LApAQCAtMTc1MDEsNyArMTc1MzIsNyBAQAogfTsKIAogI2lmIDAgLyogc2V0IHRvIDEgZm9yIHRlc3Rpbmcgb3RoZXIgaW5wdXQgc291cmNlcyBiZWxvdyAqLwotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzI3Ml9uYzEwX2NhcHR1cmVfc291cmNlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzI3Ml9uYzEwX2NhcHR1cmVfc291cmNlID0gewogCS5udW1faXRlbXMgPSAxNiwKIAkuaXRlbXMgPSB7CiAJCXsgIkF1dG9zZWxlY3QgTWljIiwgMHgwIH0sCkBAIC0xNzUyNywxNCArMTc1NTgsMTQgQEAKIC8qCiAgKiAyY2ggbW9kZQogICovCi1zdGF0aWMgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjNjYyXzNTVF8yY2hfbW9kZXNbMV0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjNjYyXzNTVF8yY2hfbW9kZXNbMV0gPSB7CiAJeyAyLCBOVUxMIH0KIH07CiAKIC8qCiAgKiAyY2ggbW9kZQogICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzY2Ml8zU1RfY2gyX2luaXRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjNjYyXzNTVF9jaDJfaW5pdFtdID0gewogCXsgMHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwIH0sCiAJeyAweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEUgfSwKIAl7IDB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOIH0sCkBAIC0xNzU0NSw3ICsxNzU3Niw3IEBACiAvKgogICogNmNoIG1vZGUKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM2NjJfM1NUX2NoNl9pbml0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzY2Ml8zU1RfY2g2X2luaXRbXSA9IHsKIAl7IDB4MTgsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAogCXsgMHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUgfSwKIAl7IDB4MTgsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAyIH0sCkBAIC0xNzU1NSw3ICsxNzU4Niw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzY2Ml8zU1RfNmNoX21vZGVzWzJdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzY2Ml8zU1RfNmNoX21vZGVzWzJdID0gewogCXsgMiwgYWxjNjYyXzNTVF9jaDJfaW5pdCB9LAogCXsgNiwgYWxjNjYyXzNTVF9jaDZfaW5pdCB9LAogfTsKQEAgLTE3NTYzLDcgKzE3NTk0LDcgQEAKIC8qCiAgKiAyY2ggbW9kZQogICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzY2Ml9zaXhzdGFja19jaDZfaW5pdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM2NjJfc2l4c3RhY2tfY2g2X2luaXRbXSA9IHsKIAl7IDB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgwMCB9LAogCXsgMHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDAwIH0sCiAJeyAweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKQEAgLTE3NTczLDE0ICsxNzYwNCwxNCBAQAogLyoKICAqIDZjaCBtb2RlCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjNjYyX3NpeHN0YWNrX2NoOF9pbml0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzY2Ml9zaXhzdGFja19jaDhfaW5pdFtdID0gewogCXsgMHgxNiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCiAJeyAweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKIAl7IDB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhbGM2NjJfNXN0YWNrX21vZGVzWzJdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzY2Ml81c3RhY2tfbW9kZXNbMl0gPSB7CiAJeyAyLCBhbGM2NjJfc2l4c3RhY2tfY2g2X2luaXQgfSwKIAl7IDYsIGFsYzY2Ml9zaXhzdGFja19jaDhfaW5pdCB9LAogfTsKQEAgLTE3NTg5LDcgKzE3NjIwLDcgQEAKICAqICAgICAgICAgICAgICAgICBNaWM9MHgxOCwgRnJvbnQgTWljPTB4MTksIExpbmUtSW49MHgxYSwgSFA9MHgxYgogICovCiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM2NjJfYmFzZV9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzY2Ml9iYXNlX21peGVyW10gPSB7CiAJLyogb3V0cHV0IG1peGVyIGNvbnRyb2wgKi8KIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDIsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDB4MCwgSERBX0lOUFVUKSwKQEAgLTE3NjEzLDcgKzE3NjQ0LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjNjYyXzNTVF8yY2hfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM2NjJfM1NUXzJjaF9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MDIsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MWIsIDB4MCwgSERBX09VVFBVVCksCkBAIC0xNzYyOCw3ICsxNzY1OSw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzY2Ml8zU1RfNmNoX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjNjYyXzNTVF82Y2hfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDAyLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBQbGF5YmFjayBTd2l0Y2giLCAweDBjLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiU3Vycm91bmQgUGxheWJhY2sgVm9sdW1lIiwgMHgwMywgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTE3NjQ5LDcgKzE3NjgwLDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjNjYyX2xlbm92b18xMDFlX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjNjYyX2xlbm92b18xMDFlX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwgMHgwMiwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQklORF9NVVRFKCJGcm9udCBQbGF5YmFjayBTd2l0Y2giLCAweDAyLCAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwMywgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTE3NjYyLDcgKzE3NjkzLDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjNjYyX2VlZXBjX3A3MDFfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM2NjJfZWVlcGNfcDcwMV9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAweDAyLCAweDAsIEhEQV9PVVRQVVQpLAogCUFMQzI2Ml9ISVBQT19NQVNURVJfU1dJVENILAogCkBAIC0xNzY3Niw3ICsxNzcwNyw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzY2Ml9lZWVwY19lcDIwX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjNjYyX2VlZXBjX2VwMjBfbWl4ZXJbXSA9IHsKIAlBTEMyNjJfSElQUE9fTUFTVEVSX1NXSVRDSCwKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDAyLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIlN1cnJvdW5kIFBsYXliYWNrIFZvbHVtZSIsIDB4MDMsIDB4MCwgSERBX09VVFBVVCksCkBAIC0xNzY5MCw3ICsxNzcyMSw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfYmluZF9jdGxzIGFsYzY2M19hc3VzX2JpbmRfbWFzdGVyX3ZvbCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2JpbmRfY3RscyBhbGM2NjNfYXN1c19iaW5kX21hc3Rlcl92b2wgPSB7CiAJLm9wcyA9ICZzbmRfaGRhX2JpbmRfdm9sLAogCS52YWx1ZXMgPSB7CiAJCUhEQV9DT01QT1NFX0FNUF9WQUwoMHgwMiwgMywgMCwgSERBX09VVFBVVCksCkBAIC0xNzY5OSw3ICsxNzczMCw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2JpbmRfY3RscyBhbGM2NjNfYXN1c19vbmVfYmluZF9zd2l0Y2ggPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9iaW5kX2N0bHMgYWxjNjYzX2FzdXNfb25lX2JpbmRfc3dpdGNoID0gewogCS5vcHMgPSAmc25kX2hkYV9iaW5kX3N3LAogCS52YWx1ZXMgPSB7CiAJCUhEQV9DT01QT1NFX0FNUF9WQUwoMHgxNCwgMywgMCwgSERBX09VVFBVVCksCkBAIC0xNzcwOCw3ICsxNzczOSw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM2NjNfbTUxdmFfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM2NjNfbTUxdmFfbWl4ZXJbXSA9IHsKIAlIREFfQklORF9WT0woIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAmYWxjNjYzX2FzdXNfYmluZF9tYXN0ZXJfdm9sKSwKIAlIREFfQklORF9TVygiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsICZhbGM2NjNfYXN1c19vbmVfYmluZF9zd2l0Y2gpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCkBAIC0xNzcxNiw3ICsxNzc0Nyw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfYmluZF9jdGxzIGFsYzY2M19hc3VzX3RyZWVfYmluZF9zd2l0Y2ggPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9iaW5kX2N0bHMgYWxjNjYzX2FzdXNfdHJlZV9iaW5kX3N3aXRjaCA9IHsKIAkub3BzID0gJnNuZF9oZGFfYmluZF9zdywKIAkudmFsdWVzID0gewogCQlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MTQsIDMsIDAsIEhEQV9PVVRQVVQpLApAQCAtMTc3MjYsNyArMTc3NTcsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjNjYzX3R3b19ocF9tMV9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzY2M190d29faHBfbTFfbWl4ZXJbXSA9IHsKIAlIREFfQklORF9WT0woIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAmYWxjNjYzX2FzdXNfYmluZF9tYXN0ZXJfdm9sKSwKIAlIREFfQklORF9TVygiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsICZhbGM2NjNfYXN1c190cmVlX2JpbmRfc3dpdGNoKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLApAQCAtMTc3MzcsNyArMTc3NjgsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2JpbmRfY3RscyBhbGM2NjNfYXN1c19mb3VyX2JpbmRfc3dpdGNoID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfYmluZF9jdGxzIGFsYzY2M19hc3VzX2ZvdXJfYmluZF9zd2l0Y2ggPSB7CiAJLm9wcyA9ICZzbmRfaGRhX2JpbmRfc3csCiAJLnZhbHVlcyA9IHsKIAkJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDE0LCAzLCAwLCBIREFfT1VUUFVUKSwKQEAgLTE3NzQ3LDcgKzE3Nzc4LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzY2M190d29faHBfbTJfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM2NjNfdHdvX2hwX20yX21peGVyW10gPSB7CiAJSERBX0JJTkRfVk9MKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgJmFsYzY2M19hc3VzX2JpbmRfbWFzdGVyX3ZvbCksCiAJSERBX0JJTkRfU1coIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCAmYWxjNjYzX2FzdXNfZm91cl9iaW5kX3N3aXRjaCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKQEAgLTE3NzU3LDcgKzE3Nzg4LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjNjYyXzFiamRfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM2NjJfMWJqZF9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwMiwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDE0LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxYiwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTE3NzY4LDcgKzE3Nzk5LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9iaW5kX2N0bHMgYWxjNjYzX2FzdXNfdHdvX2JpbmRfbWFzdGVyX3ZvbCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2JpbmRfY3RscyBhbGM2NjNfYXN1c190d29fYmluZF9tYXN0ZXJfdm9sID0gewogCS5vcHMgPSAmc25kX2hkYV9iaW5kX3ZvbCwKIAkudmFsdWVzID0gewogCQlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MDIsIDMsIDAsIEhEQV9PVVRQVVQpLApAQCAtMTc3NzcsNyArMTc4MDgsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9iaW5kX2N0bHMgYWxjNjYzX2FzdXNfdHdvX2JpbmRfc3dpdGNoID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfYmluZF9jdGxzIGFsYzY2M19hc3VzX3R3b19iaW5kX3N3aXRjaCA9IHsKIAkub3BzID0gJnNuZF9oZGFfYmluZF9zdywKIAkudmFsdWVzID0gewogCQlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MTQsIDMsIDAsIEhEQV9PVVRQVVQpLApAQCAtMTc3ODYsNyArMTc4MTcsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjNjYzX2FzdXNfMjFqZF9jbGZlX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjNjYzX2FzdXNfMjFqZF9jbGZlX21peGVyW10gPSB7CiAJSERBX0JJTkRfVk9MKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwKIAkJCQkmYWxjNjYzX2FzdXNfdHdvX2JpbmRfbWFzdGVyX3ZvbCksCiAJSERBX0JJTkRfU1coIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCAmYWxjNjYzX2FzdXNfdHdvX2JpbmRfc3dpdGNoKSwKQEAgLTE3Nzk3LDcgKzE3ODI4LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjNjYzX2FzdXNfMTVqZF9jbGZlX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjNjYzX2FzdXNfMTVqZF9jbGZlX21peGVyW10gPSB7CiAJSERBX0JJTkRfVk9MKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgJmFsYzY2M19hc3VzX2JpbmRfbWFzdGVyX3ZvbCksCiAJSERBX0JJTkRfU1coIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCAmYWxjNjYzX2FzdXNfdHdvX2JpbmRfc3dpdGNoKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwMywgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTE3ODA3LDcgKzE3ODM4LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjNjYzX2c3MXZfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM2NjNfZzcxdl9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwMiwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDE0LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MDMsIDB4MCwgSERBX09VVFBVVCksCkBAIC0xNzgyMSw3ICsxNzg1Miw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzY2M19nNTB2X21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjNjYzX2c1MHZfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MDIsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgxNCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCkBAIC0xNzgzNSw3ICsxNzg2Niw3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfYmluZF9jdGxzIGFsYzY2M19hc3VzX21vZGU3XzhfYWxsX2JpbmRfc3dpdGNoID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfYmluZF9jdGxzIGFsYzY2M19hc3VzX21vZGU3XzhfYWxsX2JpbmRfc3dpdGNoID0gewogCS5vcHMgPSAmc25kX2hkYV9iaW5kX3N3LAogCS52YWx1ZXMgPSB7CiAJCUhEQV9DT01QT1NFX0FNUF9WQUwoMHgxNCwgMywgMCwgSERBX09VVFBVVCksCkBAIC0xNzg0Nyw3ICsxNzg3OCw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2JpbmRfY3RscyBhbGM2NjNfYXN1c19tb2RlN184X3NwX2JpbmRfc3dpdGNoID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfYmluZF9jdGxzIGFsYzY2M19hc3VzX21vZGU3Xzhfc3BfYmluZF9zd2l0Y2ggPSB7CiAJLm9wcyA9ICZzbmRfaGRhX2JpbmRfc3csCiAJLnZhbHVlcyA9IHsKIAkJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDE0LCAzLCAwLCBIREFfT1VUUFVUKSwKQEAgLTE3ODU2LDcgKzE3ODg3LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzY2M19tb2RlN19taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzY2M19tb2RlN19taXhlcltdID0gewogCUhEQV9CSU5EX1NXKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgJmFsYzY2M19hc3VzX21vZGU3XzhfYWxsX2JpbmRfc3dpdGNoKSwKIAlIREFfQklORF9WT0woIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgJmFsYzY2M19hc3VzX2JpbmRfbWFzdGVyX3ZvbCksCiAJSERBX0JJTkRfU1coIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgJmFsYzY2M19hc3VzX21vZGU3Xzhfc3BfYmluZF9zd2l0Y2gpLApAQCAtMTc4NjksNyArMTc5MDAsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM2NjNfbW9kZThfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM2NjNfbW9kZThfbWl4ZXJbXSA9IHsKIAlIREFfQklORF9TVygiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsICZhbGM2NjNfYXN1c19tb2RlN184X2FsbF9iaW5kX3N3aXRjaCksCiAJSERBX0JJTkRfVk9MKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsICZhbGM2NjNfYXN1c19iaW5kX21hc3Rlcl92b2wpLAogCUhEQV9CSU5EX1NXKCJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsICZhbGM2NjNfYXN1c19tb2RlN184X3NwX2JpbmRfc3dpdGNoKSwKQEAgLTE3ODgxLDcgKzE3OTEyLDcgQEAKIH07CiAKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzY2Ml9jaG1vZGVfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM2NjJfY2htb2RlX21peGVyW10gPSB7CiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiQ2hhbm5lbCBNb2RlIiwKQEAgLTE3ODkyLDcgKzE3OTIzLDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzY2Ml9pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzY2Ml9pbml0X3ZlcmJzW10gPSB7CiAJLyogQURDOiBtdXRlIGFtcCBsZWZ0IGFuZCByaWdodCAqLwogCXsweDA5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCiAJezB4MDksIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKQEAgLTE3OTM4LDU1ICsxNzk2OSwzNiBAQAogCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAl7MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAKKwl7IH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjNjYyX2VhcGRfaW5pdF92ZXJic1tdID0gewogCS8qIGFsd2F5cyB0cnVuIG9uIEVBUEQgKi8KIAl7MHgxNCwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDJ9LAogCXsweDE1LCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMn0sCi0KIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjNjYzX2luaXRfdmVyYnNbXSA9IHsKLQl7MHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKLQl7MHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAotCXsweDIxLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAotCXsweDIxLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCi0JezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKLQl7IH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjcyX2luaXRfdmVyYnNbXSA9IHsKLQl7MHgxNiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAotCXsweDE2LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDE3LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAotCXsweDE3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCi0JezB4MjEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCi0JezB4MjEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKLQl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAotCXsgfQotfTsKLQotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM2NjJfc3VlX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjNjYyX3N1ZV9pbml0X3ZlcmJzW10gPSB7CiAJezB4MTQsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58QUxDODgwX0ZST05UX0VWRU5UfSwKIAl7MHgxYiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxBTEM4ODBfSFBfRVZFTlR9LAogCXt9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzY2Ml9lZWVwY19zdWVfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM2NjJfZWVlcGNfc3VlX2luaXRfdmVyYnNbXSA9IHsKIAl7MHgxOCwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IEFMQzg4MF9NSUNfRVZFTlR9LAogCXsweDFiLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQUxDODgwX0hQX0VWRU5UfSwKIAl7fQogfTsKIAogLyogU2V0IFVuc29saWNpdGVkIEV2ZW50Ki8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjNjYyX2VlZXBjX2VwMjBfc3VlX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjNjYyX2VlZXBjX2VwMjBfc3VlX2luaXRfdmVyYnNbXSA9IHsKIAl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKIAl7MHgxNCwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IEFMQzg4MF9IUF9FVkVOVH0sCiAJe30KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjNjYzX201MXZhX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjNjYzX201MXZhX2luaXRfdmVyYnNbXSA9IHsKIAl7MHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAogCXsweDE2LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCiAJezB4MjEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKQEAgLTE3OTk5LDcgKzE4MDExLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM2NjNfMjFqZF9hbWljX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjNjYzXzIxamRfYW1pY19pbml0X3ZlcmJzW10gPSB7CiAJezB4MjEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKIAl7MHgyMSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAogCXsweDIxLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCS8qIEhlYWRwaG9uZSAqLwpAQCAtMTgwMTAsNyArMTgwMjIsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzY2Ml8xYmpkX2FtaWNfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM2NjJfMWJqZF9hbWljX2luaXRfdmVyYnNbXSA9IHsKIAl7MHgxNiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAogCXsweDFiLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCiAJezB4MWIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKQEAgLTE4MDIyLDcgKzE4MDM0LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM2NjNfMTVqZF9hbWljX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjNjYzXzE1amRfYW1pY19pbml0X3ZlcmJzW10gPSB7CiAJezB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKIAl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAogCXsweDE1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCS8qIEhlYWRwaG9uZSAqLwpAQCAtMTgwMzMsNyArMTgwNDUsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzY2M190d29faHBfYW1pY19tMV9pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzY2M190d29faHBfYW1pY19tMV9pbml0X3ZlcmJzW10gPSB7CiAJezB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKIAl7MHgyMSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAogCXsweDIxLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCkBAIC0xODA0OSw3ICsxODA2MSw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjNjYzX3R3b19ocF9hbWljX20yX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjNjYzX3R3b19ocF9hbWljX20yX2luaXRfdmVyYnNbXSA9IHsKIAl7MHgxNiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAogCXsweDFiLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCiAJezB4MWIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKQEAgLTE4MDY1LDcgKzE4MDc3LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM2NjNfZzcxdl9pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzY2M19nNzF2X2luaXRfdmVyYnNbXSA9IHsKIAl7MHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAogCS8qIHsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sICovCiAJLyogezB4MTUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwgKi8gLyogSGVhZHBob25lICovCkBAIC0xODA4MCw3ICsxODA5Miw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjNjYzX2c1MHZfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM2NjNfZzUwdl9pbml0X3ZlcmJzW10gPSB7CiAJezB4MjEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKIAl7MHgyMSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAogCXsweDIxLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCS8qIEhlYWRwaG9uZSAqLwpAQCAtMTgwOTAsNyArMTgxMDIsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzY2Ml9lY3NfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM2NjJfZWNzX2luaXRfdmVyYnNbXSA9IHsKIAl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHg3MDFmfSwKIAl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAogCXsweDE4LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQUxDODgwX01JQ19FVkVOVH0sCkBAIC0xODA5OCw3ICsxODExMCw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjcyX2RlbGxfem0xX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjcyX2RlbGxfem0xX2luaXRfdmVyYnNbXSA9IHsKIAl7MHgxMiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAogCXsweDEzLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCiAJezB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKQEAgLTE4MTEzLDcgKzE4MTI1LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNzJfZGVsbF9pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzI3Ml9kZWxsX2luaXRfdmVyYnNbXSA9IHsKIAl7MHgxMiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAogCXsweDEzLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCiAJezB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKQEAgLTE4MTI4LDcgKzE4MTQwLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM2NjNfbW9kZTdfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM2NjNfbW9kZTdfaW5pdF92ZXJic1tdID0gewogCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCiAJezB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKIAl7MHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKQEAgLTE4MTQ3LDcgKzE4MTU5LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM2NjNfbW9kZThfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBhbGM2NjNfbW9kZThfaW5pdF92ZXJic1tdID0gewogCXsweDEyLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCiAJezB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKIAl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LApAQCAtMTgxNjcsNjEgKzE4MTc5LDI5IEBACiAJe30KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM2NjJfYXV0b19jYXB0dXJlX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjNjYyX2F1dG9fY2FwdHVyZV9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwOSwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MDksIDB4MCwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjcyX2F1dG9fY2FwdHVyZV9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI3Ml9hdXRvX2NhcHR1cmVfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MDgsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDA4LCAweDAsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHZvaWQgYWxjNjYyX2xlbm92b18xMDFlX2lzcGVha2VyX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgYWxjNjYyX2xlbm92b18xMDFlX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewotCXVuc2lnbmVkIGludCBwcmVzZW50OwotCXVuc2lnbmVkIGNoYXIgYml0czsKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAotCXByZXNlbnQgPSBzbmRfaGRhX2phY2tfZGV0ZWN0KGNvZGVjLCAweDE0KTsKLQliaXRzID0gcHJlc2VudCA/IEhEQV9BTVBfTVVURSA6IDA7Ci0KLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MTUsIEhEQV9PVVRQVVQsIDAsCi0JCQkJIEhEQV9BTVBfTVVURSwgYml0cyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFsYzY2Ml9sZW5vdm9fMTAxZV9hbGxfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0JdW5zaWduZWQgaW50IHByZXNlbnQ7Ci0JdW5zaWduZWQgY2hhciBiaXRzOwotCi0gCXByZXNlbnQgPSBzbmRfaGRhX2phY2tfZGV0ZWN0KGNvZGVjLCAweDFiKTsKLQliaXRzID0gcHJlc2VudCA/IEhEQV9BTVBfTVVURSA6IDA7Ci0KLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MTUsIEhEQV9PVVRQVVQsIDAsCi0JCQkJIEhEQV9BTVBfTVVURSwgYml0cyk7Ci0Jc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDE0LCBIREFfT1VUUFVULCAwLAotCQkJCSBIREFfQU1QX01VVEUsIGJpdHMpOwotfQotCi1zdGF0aWMgdm9pZCBhbGM2NjJfbGVub3ZvXzEwMWVfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCi0JCQkJCSAgIHVuc2lnbmVkIGludCByZXMpCi17Ci0JaWYgKChyZXMgPj4gMjYpID09IEFMQzg4MF9IUF9FVkVOVCkKLQkJYWxjNjYyX2xlbm92b18xMDFlX2FsbF9hdXRvbXV0ZShjb2RlYyk7Ci0JaWYgKChyZXMgPj4gMjYpID09IEFMQzg4MF9GUk9OVF9FVkVOVCkKLQkJYWxjNjYyX2xlbm92b18xMDFlX2lzcGVha2VyX2F1dG9tdXRlKGNvZGVjKTsKLX0KLQotLyogdW5zb2xpY2l0ZWQgZXZlbnQgZm9yIEhQIGphY2sgc2Vuc2luZyAqLwotc3RhdGljIHZvaWQgYWxjNjYyX2VlZXBjX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAotCQkJCSAgICAgdW5zaWduZWQgaW50IHJlcykKLXsKLQlpZiAoKHJlcyA+PiAyNikgPT0gQUxDODgwX01JQ19FVkVOVCkKLQkJYWxjX21pY19hdXRvbXV0ZShjb2RlYyk7Ci0JZWxzZQotCQlhbGMyNjJfaGlwcG9fdW5zb2xfZXZlbnQoY29kZWMsIHJlcyk7CisJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxYjsKKwlzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3BpbnNbMF0gPSAweDE0OworCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxNTsKKwlzcGVjLT5hdXRvbXV0ZSA9IDE7CisJc3BlYy0+ZGV0ZWN0X2xpbmUgPSAxOworCXNwZWMtPmF1dG9tdXRlX2xpbmVzID0gMTsKKwlzcGVjLT5hdXRvbXV0ZV9tb2RlID0gQUxDX0FVVE9NVVRFX0FNUDsKIH0KIAogc3RhdGljIHZvaWQgYWxjNjYyX2VlZXBjX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQpAQCAtMTgyMzYsMTgwICsxODIxNiwyNCBAQAogCXNwZWMtPmF1dG9fbWljID0gMTsKIH0KIAotc3RhdGljIHZvaWQgYWxjNjYyX2VlZXBjX2luaXRob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCWFsYzI2Ml9oaXBwb19hdXRvbXV0ZShjb2RlYyk7Ci0JYWxjX21pY19hdXRvbXV0ZShjb2RlYyk7Ci19Ci0KIHN0YXRpYyB2b2lkIGFsYzY2Ml9lZWVwY19lcDIwX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCiAJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxNDsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MWI7Ci19Ci0KLSNkZWZpbmUgYWxjNjYyX2VlZXBjX2VwMjBfaW5pdGhvb2sJYWxjMjYyX2hpcHBvX21hc3Rlcl91cGRhdGUKLQotc3RhdGljIHZvaWQgYWxjNjYzX201MXZhX3NwZWFrZXJfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0JdW5zaWduZWQgaW50IHByZXNlbnQ7Ci0JdW5zaWduZWQgY2hhciBiaXRzOwotCi0JcHJlc2VudCA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIDB4MjEpOwotCWJpdHMgPSBwcmVzZW50ID8gSERBX0FNUF9NVVRFIDogMDsKLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MGMsIEhEQV9JTlBVVCwgMCwKLQkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MGMsIEhEQV9JTlBVVCwgMSwKLQkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKLX0KLQotc3RhdGljIHZvaWQgYWxjNjYzXzIxamRfdHdvX3NwZWFrZXJfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0JdW5zaWduZWQgaW50IHByZXNlbnQ7Ci0JdW5zaWduZWQgY2hhciBiaXRzOwotCi0JcHJlc2VudCA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIDB4MjEpOwotCWJpdHMgPSBwcmVzZW50ID8gSERBX0FNUF9NVVRFIDogMDsKLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MGMsIEhEQV9JTlBVVCwgMCwKLQkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MGMsIEhEQV9JTlBVVCwgMSwKLQkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MGUsIEhEQV9JTlBVVCwgMCwKLQkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MGUsIEhEQV9JTlBVVCwgMSwKLQkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKLX0KLQotc3RhdGljIHZvaWQgYWxjNjYzXzE1amRfdHdvX3NwZWFrZXJfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0JdW5zaWduZWQgaW50IHByZXNlbnQ7Ci0JdW5zaWduZWQgY2hhciBiaXRzOwotCi0JcHJlc2VudCA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIDB4MTUpOwotCWJpdHMgPSBwcmVzZW50ID8gSERBX0FNUF9NVVRFIDogMDsKLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MGMsIEhEQV9JTlBVVCwgMCwKLQkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MGMsIEhEQV9JTlBVVCwgMSwKLQkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MGUsIEhEQV9JTlBVVCwgMCwKLQkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MGUsIEhEQV9JTlBVVCwgMSwKLQkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKLX0KLQotc3RhdGljIHZvaWQgYWxjNjYyX2Y1el9zcGVha2VyX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCXVuc2lnbmVkIGludCBwcmVzZW50OwotCXVuc2lnbmVkIGNoYXIgYml0czsKLQotCXByZXNlbnQgPSBzbmRfaGRhX2phY2tfZGV0ZWN0KGNvZGVjLCAweDFiKTsKLQliaXRzID0gcHJlc2VudCA/IDAgOiBQSU5fT1VUOwotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTQsIDAsCi0JCQkgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBiaXRzKTsKLX0KLQotc3RhdGljIHZvaWQgYWxjNjYzX3R3b19ocF9tMV9zcGVha2VyX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCXVuc2lnbmVkIGludCBwcmVzZW50MSwgcHJlc2VudDI7Ci0KLQlwcmVzZW50MSA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIDB4MjEpOwotCXByZXNlbnQyID0gc25kX2hkYV9qYWNrX2RldGVjdChjb2RlYywgMHgxNSk7Ci0KLQlpZiAocHJlc2VudDEgfHwgcHJlc2VudDIpIHsKLQkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHgxNCwgMCwKLQkJCUFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMCk7Ci0JfSBlbHNlIHsKLQkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHgxNCwgMCwKLQkJCUFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBhbGM2NjNfdHdvX2hwX20yX3NwZWFrZXJfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0JdW5zaWduZWQgaW50IHByZXNlbnQxLCBwcmVzZW50MjsKLQotCXByZXNlbnQxID0gc25kX2hkYV9qYWNrX2RldGVjdChjb2RlYywgMHgxYik7Ci0JcHJlc2VudDIgPSBzbmRfaGRhX2phY2tfZGV0ZWN0KGNvZGVjLCAweDE1KTsKLQotCWlmIChwcmVzZW50MSB8fCBwcmVzZW50MikgewotCQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MGMsIEhEQV9JTlBVVCwgMCwKLQkJCQkJIEhEQV9BTVBfTVVURSwgSERBX0FNUF9NVVRFKTsKLQkJc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDBjLCBIREFfSU5QVVQsIDEsCi0JCQkJCSBIREFfQU1QX01VVEUsIEhEQV9BTVBfTVVURSk7Ci0JfSBlbHNlIHsKLQkJc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDBjLCBIREFfSU5QVVQsIDAsCi0JCQkJCSBIREFfQU1QX01VVEUsIDApOwotCQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MGMsIEhEQV9JTlBVVCwgMSwKLQkJCQkJIEhEQV9BTVBfTVVURSwgMCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBhbGM2NjNfdHdvX2hwX203X3NwZWFrZXJfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0JdW5zaWduZWQgaW50IHByZXNlbnQxLCBwcmVzZW50MjsKLQotCXByZXNlbnQxID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDFiLCAwLAotCQkJQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKQotCQkJJiBBQ19QSU5TRU5TRV9QUkVTRU5DRTsKLQlwcmVzZW50MiA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgyMSwgMCwKLQkJCUFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkKLQkJCSYgQUNfUElOU0VOU0VfUFJFU0VOQ0U7Ci0KLQlpZiAocHJlc2VudDEgfHwgcHJlc2VudDIpIHsKLQkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHgxNCwgMCwKLQkJCUFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMCk7Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIDB4MTcsIDAsCi0JCQlBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDApOwotCX0gZWxzZSB7Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIDB4MTQsIDAsCi0JCQlBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQpOwotCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCAweDE3LCAwLAotCQkJQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGFsYzY2M190d29faHBfbThfc3BlYWtlcl9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKLXsKLQl1bnNpZ25lZCBpbnQgcHJlc2VudDEsIHByZXNlbnQyOwotCi0JcHJlc2VudDEgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MjEsIDAsCi0JCQlBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApCi0JCQkmIEFDX1BJTlNFTlNFX1BSRVNFTkNFOwotCXByZXNlbnQyID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDE1LCAwLAotCQkJQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKQotCQkJJiBBQ19QSU5TRU5TRV9QUkVTRU5DRTsKLQotCWlmIChwcmVzZW50MSB8fCBwcmVzZW50MikgewotCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCAweDE0LCAwLAotCQkJQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwKTsKLQkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHgxNywgMCwKLQkJCUFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMCk7Ci0JfSBlbHNlIHsKLQkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHgxNCwgMCwKLQkJCUFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCk7Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIDB4MTcsIDAsCi0JCQlBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYWxjNjYzX201MXZhX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAotCQkJCQkgICB1bnNpZ25lZCBpbnQgcmVzKQotewotCXN3aXRjaCAocmVzID4+IDI2KSB7Ci0JY2FzZSBBTEM4ODBfSFBfRVZFTlQ6Ci0JCWFsYzY2M19tNTF2YV9zcGVha2VyX2F1dG9tdXRlKGNvZGVjKTsKLQkJYnJlYWs7Ci0JY2FzZSBBTEM4ODBfTUlDX0VWRU5UOgotCQlhbGNfbWljX2F1dG9tdXRlKGNvZGVjKTsKLQkJYnJlYWs7Ci0JfQorCXNwZWMtPmF1dG9tdXRlID0gMTsKKwlzcGVjLT5hdXRvbXV0ZV9tb2RlID0gQUxDX0FVVE9NVVRFX0FNUDsKIH0KIAogc3RhdGljIHZvaWQgYWxjNjYzX201MXZhX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IDB4MjE7CisJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDE0OworCXNwZWMtPmF1dG9tdXRlX21peGVyX25pZFswXSA9IDB4MGM7CisJc3BlYy0+YXV0b211dGUgPSAxOworCXNwZWMtPmF1dG9tdXRlX21vZGUgPSBBTENfQVVUT01VVEVfTUlYRVI7CiAJc3BlYy0+ZXh0X21pYy5waW4gPSAweDE4OwogCXNwZWMtPmV4dF9taWMubXV4X2lkeCA9IDA7CiAJc3BlYy0+aW50X21pYy5waW4gPSAweDEyOwpAQCAtMTg0MTcsMTggKzE4MjQxLDE1IEBACiAJc3BlYy0+YXV0b19taWMgPSAxOwogfQogCi1zdGF0aWMgdm9pZCBhbGM2NjNfbTUxdmFfaW5pdGhvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0JYWxjNjYzX201MXZhX3NwZWFrZXJfYXV0b211dGUoY29kZWMpOwotCWFsY19taWNfYXV0b211dGUoY29kZWMpOwotfQotCiAvKiAqKioqKioqKioqKioqKioqKiBNb2RlMSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIGFsYzY2M19tb2RlMV91bnNvbF9ldmVudAlhbGM2NjNfbTUxdmFfdW5zb2xfZXZlbnQKLQogc3RhdGljIHZvaWQgYWxjNjYzX21vZGUxX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IDB4MjE7CisJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDE0OworCXNwZWMtPmF1dG9tdXRlX21peGVyX25pZFswXSA9IDB4MGM7CisJc3BlYy0+YXV0b211dGUgPSAxOworCXNwZWMtPmF1dG9tdXRlX21vZGUgPSBBTENfQVVUT01VVEVfTUlYRVI7CiAJc3BlYy0+ZXh0X21pYy5waW4gPSAweDE4OwogCXNwZWMtPmV4dF9taWMubXV4X2lkeCA9IDA7CiAJc3BlYy0+aW50X21pYy5waW4gPSAweDE5OwpAQCAtMTg0MzYsMjI5ICsxODI1NywxNDQgQEAKIAlzcGVjLT5hdXRvX21pYyA9IDE7CiB9CiAKLSNkZWZpbmUgYWxjNjYzX21vZGUxX2luaXRob29rCQlhbGM2NjNfbTUxdmFfaW5pdGhvb2sKLQogLyogKioqKioqKioqKioqKioqKiogTW9kZTIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQgYWxjNjYyX21vZGUyX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAotCQkJCQkgICB1bnNpZ25lZCBpbnQgcmVzKQorc3RhdGljIHZvaWQgYWxjNjYyX21vZGUyX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewotCXN3aXRjaCAocmVzID4+IDI2KSB7Ci0JY2FzZSBBTEM4ODBfSFBfRVZFTlQ6Ci0JCWFsYzY2Ml9mNXpfc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7Ci0JCWJyZWFrOwotCWNhc2UgQUxDODgwX01JQ19FVkVOVDoKLQkJYWxjX21pY19hdXRvbXV0ZShjb2RlYyk7Ci0JCWJyZWFrOwotCX0KKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSAweDFiOworCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxNDsKKwlzcGVjLT5hdXRvbXV0ZSA9IDE7CisJc3BlYy0+YXV0b211dGVfbW9kZSA9IEFMQ19BVVRPTVVURV9QSU47CisJc3BlYy0+ZXh0X21pYy5waW4gPSAweDE4OworCXNwZWMtPmV4dF9taWMubXV4X2lkeCA9IDA7CisJc3BlYy0+aW50X21pYy5waW4gPSAweDE5OworCXNwZWMtPmludF9taWMubXV4X2lkeCA9IDE7CisJc3BlYy0+YXV0b19taWMgPSAxOwogfQogCi0jZGVmaW5lIGFsYzY2Ml9tb2RlMl9zZXR1cAlhbGM2NjNfbW9kZTFfc2V0dXAKLQotc3RhdGljIHZvaWQgYWxjNjYyX21vZGUyX2luaXRob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCWFsYzY2Ml9mNXpfc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7Ci0JYWxjX21pY19hdXRvbXV0ZShjb2RlYyk7Ci19CiAvKiAqKioqKioqKioqKioqKioqKiBNb2RlMyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBhbGM2NjNfbW9kZTNfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCi0JCQkJCSAgIHVuc2lnbmVkIGludCByZXMpCitzdGF0aWMgdm9pZCBhbGM2NjNfbW9kZTNfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0Jc3dpdGNoIChyZXMgPj4gMjYpIHsKLQljYXNlIEFMQzg4MF9IUF9FVkVOVDoKLQkJYWxjNjYzX3R3b19ocF9tMV9zcGVha2VyX2F1dG9tdXRlKGNvZGVjKTsKLQkJYnJlYWs7Ci0JY2FzZSBBTEM4ODBfTUlDX0VWRU5UOgotCQlhbGNfbWljX2F1dG9tdXRlKGNvZGVjKTsKLQkJYnJlYWs7Ci0JfQorCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IDB4MjE7CisJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxNTsKKwlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTQ7CisJc3BlYy0+YXV0b211dGUgPSAxOworCXNwZWMtPmF1dG9tdXRlX21vZGUgPSBBTENfQVVUT01VVEVfUElOOworCXNwZWMtPmV4dF9taWMucGluID0gMHgxODsKKwlzcGVjLT5leHRfbWljLm11eF9pZHggPSAwOworCXNwZWMtPmludF9taWMucGluID0gMHgxOTsKKwlzcGVjLT5pbnRfbWljLm11eF9pZHggPSAxOworCXNwZWMtPmF1dG9fbWljID0gMTsKIH0KIAotI2RlZmluZSBhbGM2NjNfbW9kZTNfc2V0dXAJYWxjNjYzX21vZGUxX3NldHVwCi0KLXN0YXRpYyB2b2lkIGFsYzY2M19tb2RlM19pbml0aG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKLXsKLQlhbGM2NjNfdHdvX2hwX20xX3NwZWFrZXJfYXV0b211dGUoY29kZWMpOwotCWFsY19taWNfYXV0b211dGUoY29kZWMpOwotfQogLyogKioqKioqKioqKioqKioqKiogTW9kZTQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQgYWxjNjYzX21vZGU0X3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAotCQkJCQkgICB1bnNpZ25lZCBpbnQgcmVzKQorc3RhdGljIHZvaWQgYWxjNjYzX21vZGU0X3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewotCXN3aXRjaCAocmVzID4+IDI2KSB7Ci0JY2FzZSBBTEM4ODBfSFBfRVZFTlQ6Ci0JCWFsYzY2M18yMWpkX3R3b19zcGVha2VyX2F1dG9tdXRlKGNvZGVjKTsKLQkJYnJlYWs7Ci0JY2FzZSBBTEM4ODBfTUlDX0VWRU5UOgotCQlhbGNfbWljX2F1dG9tdXRlKGNvZGVjKTsKLQkJYnJlYWs7Ci0JfQorCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IDB4MjE7CisJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDE0OworCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzFdID0gMHgxNjsKKwlzcGVjLT5hdXRvbXV0ZV9taXhlcl9uaWRbMF0gPSAweDBjOworCXNwZWMtPmF1dG9tdXRlX21peGVyX25pZFsxXSA9IDB4MGU7CisJc3BlYy0+YXV0b211dGUgPSAxOworCXNwZWMtPmF1dG9tdXRlX21vZGUgPSBBTENfQVVUT01VVEVfTUlYRVI7CisJc3BlYy0+ZXh0X21pYy5waW4gPSAweDE4OworCXNwZWMtPmV4dF9taWMubXV4X2lkeCA9IDA7CisJc3BlYy0+aW50X21pYy5waW4gPSAweDE5OworCXNwZWMtPmludF9taWMubXV4X2lkeCA9IDE7CisJc3BlYy0+YXV0b19taWMgPSAxOwogfQogCi0jZGVmaW5lIGFsYzY2M19tb2RlNF9zZXR1cAlhbGM2NjNfbW9kZTFfc2V0dXAKLQotc3RhdGljIHZvaWQgYWxjNjYzX21vZGU0X2luaXRob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCWFsYzY2M18yMWpkX3R3b19zcGVha2VyX2F1dG9tdXRlKGNvZGVjKTsKLQlhbGNfbWljX2F1dG9tdXRlKGNvZGVjKTsKLX0KIC8qICoqKioqKioqKioqKioqKioqIE1vZGU1ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB2b2lkIGFsYzY2M19tb2RlNV91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKLQkJCQkJICAgdW5zaWduZWQgaW50IHJlcykKK3N0YXRpYyB2b2lkIGFsYzY2M19tb2RlNV9zZXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQlzd2l0Y2ggKHJlcyA+PiAyNikgewotCWNhc2UgQUxDODgwX0hQX0VWRU5UOgotCQlhbGM2NjNfMTVqZF90d29fc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7Ci0JCWJyZWFrOwotCWNhc2UgQUxDODgwX01JQ19FVkVOVDoKLQkJYWxjX21pY19hdXRvbXV0ZShjb2RlYyk7Ci0JCWJyZWFrOwotCX0KKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSAweDE1OworCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxNDsKKwlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1sxXSA9IDB4MTY7CisJc3BlYy0+YXV0b211dGVfbWl4ZXJfbmlkWzBdID0gMHgwYzsKKwlzcGVjLT5hdXRvbXV0ZV9taXhlcl9uaWRbMV0gPSAweDBlOworCXNwZWMtPmF1dG9tdXRlID0gMTsKKwlzcGVjLT5hdXRvbXV0ZV9tb2RlID0gQUxDX0FVVE9NVVRFX01JWEVSOworCXNwZWMtPmV4dF9taWMucGluID0gMHgxODsKKwlzcGVjLT5leHRfbWljLm11eF9pZHggPSAwOworCXNwZWMtPmludF9taWMucGluID0gMHgxOTsKKwlzcGVjLT5pbnRfbWljLm11eF9pZHggPSAxOworCXNwZWMtPmF1dG9fbWljID0gMTsKIH0KIAotI2RlZmluZSBhbGM2NjNfbW9kZTVfc2V0dXAJYWxjNjYzX21vZGUxX3NldHVwCi0KLXN0YXRpYyB2b2lkIGFsYzY2M19tb2RlNV9pbml0aG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKLXsKLQlhbGM2NjNfMTVqZF90d29fc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7Ci0JYWxjX21pY19hdXRvbXV0ZShjb2RlYyk7Ci19CiAvKiAqKioqKioqKioqKioqKioqKiBNb2RlNiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBhbGM2NjNfbW9kZTZfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCi0JCQkJCSAgIHVuc2lnbmVkIGludCByZXMpCitzdGF0aWMgdm9pZCBhbGM2NjNfbW9kZTZfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0Jc3dpdGNoIChyZXMgPj4gMjYpIHsKLQljYXNlIEFMQzg4MF9IUF9FVkVOVDoKLQkJYWxjNjYzX3R3b19ocF9tMl9zcGVha2VyX2F1dG9tdXRlKGNvZGVjKTsKLQkJYnJlYWs7Ci0JY2FzZSBBTEM4ODBfTUlDX0VWRU5UOgotCQlhbGNfbWljX2F1dG9tdXRlKGNvZGVjKTsKLQkJYnJlYWs7Ci0JfQotfQotCi0jZGVmaW5lIGFsYzY2M19tb2RlNl9zZXR1cAlhbGM2NjNfbW9kZTFfc2V0dXAKLQotc3RhdGljIHZvaWQgYWxjNjYzX21vZGU2X2luaXRob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCWFsYzY2M190d29faHBfbTJfc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7Ci0JYWxjX21pY19hdXRvbXV0ZShjb2RlYyk7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxYjsKKwlzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSAweDE1OworCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxNDsKKwlzcGVjLT5hdXRvbXV0ZV9taXhlcl9uaWRbMF0gPSAweDBjOworCXNwZWMtPmF1dG9tdXRlID0gMTsKKwlzcGVjLT5hdXRvbXV0ZV9tb2RlID0gQUxDX0FVVE9NVVRFX01JWEVSOworCXNwZWMtPmV4dF9taWMucGluID0gMHgxODsKKwlzcGVjLT5leHRfbWljLm11eF9pZHggPSAwOworCXNwZWMtPmludF9taWMucGluID0gMHgxOTsKKwlzcGVjLT5pbnRfbWljLm11eF9pZHggPSAxOworCXNwZWMtPmF1dG9fbWljID0gMTsKIH0KIAogLyogKioqKioqKioqKioqKioqKiogTW9kZTcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQgYWxjNjYzX21vZGU3X3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAotCQkJCQkgICB1bnNpZ25lZCBpbnQgcmVzKQorc3RhdGljIHZvaWQgYWxjNjYzX21vZGU3X3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewotCXN3aXRjaCAocmVzID4+IDI2KSB7Ci0JY2FzZSBBTEM4ODBfSFBfRVZFTlQ6Ci0JCWFsYzY2M190d29faHBfbTdfc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7Ci0JCWJyZWFrOwotCWNhc2UgQUxDODgwX01JQ19FVkVOVDoKLQkJYWxjX21pY19hdXRvbXV0ZShjb2RlYyk7Ci0JCWJyZWFrOwotCX0KLX0KLQotI2RlZmluZSBhbGM2NjNfbW9kZTdfc2V0dXAJYWxjNjYzX21vZGUxX3NldHVwCi0KLXN0YXRpYyB2b2lkIGFsYzY2M19tb2RlN19pbml0aG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKLXsKLQlhbGM2NjNfdHdvX2hwX203X3NwZWFrZXJfYXV0b211dGUoY29kZWMpOwotCWFsY19taWNfYXV0b211dGUoY29kZWMpOworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IDB4MWI7CisJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgyMTsKKwlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTQ7CisJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDE3OworCXNwZWMtPmF1dG9tdXRlID0gMTsKKwlzcGVjLT5hdXRvbXV0ZV9tb2RlID0gQUxDX0FVVE9NVVRFX1BJTjsKKwlzcGVjLT5leHRfbWljLnBpbiA9IDB4MTg7CisJc3BlYy0+ZXh0X21pYy5tdXhfaWR4ID0gMDsKKwlzcGVjLT5pbnRfbWljLnBpbiA9IDB4MTk7CisJc3BlYy0+aW50X21pYy5tdXhfaWR4ID0gMTsKKwlzcGVjLT5hdXRvX21pYyA9IDE7CiB9CiAKIC8qICoqKioqKioqKioqKioqKioqIE1vZGU4ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB2b2lkIGFsYzY2M19tb2RlOF91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKLQkJCQkJICAgdW5zaWduZWQgaW50IHJlcykKK3N0YXRpYyB2b2lkIGFsYzY2M19tb2RlOF9zZXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQlzd2l0Y2ggKHJlcyA+PiAyNikgewotCWNhc2UgQUxDODgwX0hQX0VWRU5UOgotCQlhbGM2NjNfdHdvX2hwX204X3NwZWFrZXJfYXV0b211dGUoY29kZWMpOwotCQlicmVhazsKLQljYXNlIEFMQzg4MF9NSUNfRVZFTlQ6Ci0JCWFsY19taWNfYXV0b211dGUoY29kZWMpOwotCQlicmVhazsKLQl9CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgyMTsKKwlzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMV0gPSAweDE1OworCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxNDsKKwlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTc7CisJc3BlYy0+YXV0b211dGUgPSAxOworCXNwZWMtPmF1dG9tdXRlX21vZGUgPSBBTENfQVVUT01VVEVfUElOOworCXNwZWMtPmV4dF9taWMucGluID0gMHgxODsKKwlzcGVjLT5leHRfbWljLm11eF9pZHggPSAwOworCXNwZWMtPmludF9taWMucGluID0gMHgxMjsKKwlzcGVjLT5pbnRfbWljLm11eF9pZHggPSA5OworCXNwZWMtPmF1dG9fbWljID0gMTsKIH0KIAotI2RlZmluZSBhbGM2NjNfbW9kZThfc2V0dXAJYWxjNjYzX201MXZhX3NldHVwCi0KLXN0YXRpYyB2b2lkIGFsYzY2M19tb2RlOF9pbml0aG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3N0YXRpYyB2b2lkIGFsYzY2M19nNzF2X3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewotCWFsYzY2M190d29faHBfbThfc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7Ci0JYWxjX21pY19hdXRvbXV0ZShjb2RlYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFsYzY2M19nNzF2X2hwX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCXVuc2lnbmVkIGludCBwcmVzZW50OwotCXVuc2lnbmVkIGNoYXIgYml0czsKLQotCXByZXNlbnQgPSBzbmRfaGRhX2phY2tfZGV0ZWN0KGNvZGVjLCAweDIxKTsKLQliaXRzID0gcHJlc2VudCA/IEhEQV9BTVBfTVVURSA6IDA7Ci0Jc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDE1LCBIREFfT1VUUFVULCAwLAotCQkJCSBIREFfQU1QX01VVEUsIGJpdHMpOwotCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxNCwgSERBX09VVFBVVCwgMCwKLQkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKLX0KLQotc3RhdGljIHZvaWQgYWxjNjYzX2c3MXZfZnJvbnRfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0JdW5zaWduZWQgaW50IHByZXNlbnQ7Ci0JdW5zaWduZWQgY2hhciBiaXRzOwotCi0JcHJlc2VudCA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIDB4MTUpOwotCWJpdHMgPSBwcmVzZW50ID8gSERBX0FNUF9NVVRFIDogMDsKLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MTQsIEhEQV9PVVRQVVQsIDAsCi0JCQkJIEhEQV9BTVBfTVVURSwgYml0cyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFsYzY2M19nNzF2X3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAotCQkJCQkgICB1bnNpZ25lZCBpbnQgcmVzKQotewotCXN3aXRjaCAocmVzID4+IDI2KSB7Ci0JY2FzZSBBTEM4ODBfSFBfRVZFTlQ6Ci0JCWFsYzY2M19nNzF2X2hwX2F1dG9tdXRlKGNvZGVjKTsKLQkJYnJlYWs7Ci0JY2FzZSBBTEM4ODBfRlJPTlRfRVZFTlQ6Ci0JCWFsYzY2M19nNzF2X2Zyb250X2F1dG9tdXRlKGNvZGVjKTsKLQkJYnJlYWs7Ci0JY2FzZSBBTEM4ODBfTUlDX0VWRU5UOgotCQlhbGNfbWljX2F1dG9tdXRlKGNvZGVjKTsKLQkJYnJlYWs7Ci0JfQotfQotCi0jZGVmaW5lIGFsYzY2M19nNzF2X3NldHVwCWFsYzY2M19tNTF2YV9zZXR1cAotCi1zdGF0aWMgdm9pZCBhbGM2NjNfZzcxdl9pbml0aG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKLXsKLQlhbGM2NjNfZzcxdl9mcm9udF9hdXRvbXV0ZShjb2RlYyk7Ci0JYWxjNjYzX2c3MXZfaHBfYXV0b211dGUoY29kZWMpOwotCWFsY19taWNfYXV0b211dGUoY29kZWMpOwotfQotCi1zdGF0aWMgdm9pZCBhbGM2NjNfZzUwdl91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKLQkJCQkJICAgdW5zaWduZWQgaW50IHJlcykKLXsKLQlzd2l0Y2ggKHJlcyA+PiAyNikgewotCWNhc2UgQUxDODgwX0hQX0VWRU5UOgotCQlhbGM2NjNfbTUxdmFfc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7Ci0JCWJyZWFrOwotCWNhc2UgQUxDODgwX01JQ19FVkVOVDoKLQkJYWxjX21pY19hdXRvbXV0ZShjb2RlYyk7Ci0JCWJyZWFrOwotCX0KKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSAweDIxOworCXNwZWMtPmF1dG9jZmcubGluZV9vdXRfcGluc1swXSA9IDB4MTU7CisJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDE0OworCXNwZWMtPmF1dG9tdXRlID0gMTsKKwlzcGVjLT5hdXRvbXV0ZV9tb2RlID0gQUxDX0FVVE9NVVRFX0FNUDsKKwlzcGVjLT5kZXRlY3RfbGluZSA9IDE7CisJc3BlYy0+YXV0b211dGVfbGluZXMgPSAxOworCXNwZWMtPmV4dF9taWMucGluID0gMHgxODsKKwlzcGVjLT5leHRfbWljLm11eF9pZHggPSAwOworCXNwZWMtPmludF9taWMucGluID0gMHgxMjsKKwlzcGVjLT5pbnRfbWljLm11eF9pZHggPSA5OworCXNwZWMtPmF1dG9fbWljID0gMTsKIH0KIAogI2RlZmluZSBhbGM2NjNfZzUwdl9zZXR1cAlhbGM2NjNfbTUxdmFfc2V0dXAKIAotc3RhdGljIHZvaWQgYWxjNjYzX2c1MHZfaW5pdGhvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0JYWxjNjYzX201MXZhX3NwZWFrZXJfYXV0b211dGUoY29kZWMpOwotCWFsY19taWNfYXV0b211dGUoY29kZWMpOwotfQotCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjNjYyX2Vjc19taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzY2Ml9lY3NfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwMiwgMHgwLCBIREFfT1VUUFVUKSwKIAlBTEMyNjJfSElQUE9fTUFTVEVSX1NXSVRDSCwKIApAQCAtMTg2NzIsNyArMTg0MDgsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNzJfbmMxMF9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI3Ml9uYzEwX21peGVyW10gPSB7CiAJLyogTWFzdGVyIFBsYXliYWNrIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBmcm9tIFNwZWFrZXIgYW5kIEhlYWRwaG9uZSAqLwogCUhEQV9DT0RFQ19WT0xVTUUoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwMiwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDE0LCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMTg3MDcsNyArMTg0NDMsNyBAQAogCVtBTEM2NjJfM1NUXzJjaF9ESUddCT0gIjNzdGFjay1kaWciLAogCVtBTEM2NjJfM1NUXzZjaF9ESUddCT0gIjNzdGFjay02Y2gtZGlnIiwKIAlbQUxDNjYyXzNTVF82Y2hdCT0gIjNzdGFjay02Y2giLAotCVtBTEM2NjJfNVNUX0RJR10JPSAiNnN0YWNrLWRpZyIsCisJW0FMQzY2Ml81U1RfRElHXQk9ICI1c3RhY2stZGlnIiwKIAlbQUxDNjYyX0xFTk9WT18xMDFFXQk9ICJsZW5vdm8tMTAxZSIsCiAJW0FMQzY2Ml9BU1VTX0VFRVBDX1A3MDFdID0gImVlZXBjLXA3MDEiLAogCVtBTEM2NjJfQVNVU19FRUVQQ19FUDIwXSA9ICJlZWVwYy1lcDIwIiwKQEAgLTE4NzMwLDcgKzE4NDY2LDcgQEAKIAlbQUxDNjYyX0FVVE9dCQk9ICJhdXRvIiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGM2NjJfY2ZnX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzY2Ml9jZmdfdGJsW10gPSB7CiAJU05EX1BDSV9RVUlSSygweDEwMTksIDB4OTA4NywgIkVDUyIsIEFMQzY2Ml9FQ1MpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDAyZDYsICJERUxMIiwgQUxDMjcyX0RFTEwpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDAyZjQsICJERUxMIFpNMSIsIEFMQzI3Ml9ERUxMX1pNMSksCkBAIC0xODgxMiwxMCArMTg1NDgsMTAgQEAKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBhbGNfY29uZmlnX3ByZXNldCBhbGM2NjJfcHJlc2V0c1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhbGNfY29uZmlnX3ByZXNldCBhbGM2NjJfcHJlc2V0c1tdID0gewogCVtBTEM2NjJfM1NUXzJjaF9ESUddID0gewogCQkubWl4ZXJzID0geyBhbGM2NjJfM1NUXzJjaF9taXhlciB9LAotCQkuaW5pdF92ZXJicyA9IHsgYWxjNjYyX2luaXRfdmVyYnMgfSwKKwkJLmluaXRfdmVyYnMgPSB7IGFsYzY2Ml9pbml0X3ZlcmJzLCBhbGM2NjJfZWFwZF9pbml0X3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjNjYyX2RhY19uaWRzKSwKIAkJLmRhY19uaWRzID0gYWxjNjYyX2RhY19uaWRzLAogCQkuZGlnX291dF9uaWQgPSBBTEM2NjJfRElHT1VUX05JRCwKQEAgLTE4ODI2LDcgKzE4NTYyLDcgQEAKIAl9LAogCVtBTEM2NjJfM1NUXzZjaF9ESUddID0gewogCQkubWl4ZXJzID0geyBhbGM2NjJfM1NUXzZjaF9taXhlciwgYWxjNjYyX2NobW9kZV9taXhlciB9LAotCQkuaW5pdF92ZXJicyA9IHsgYWxjNjYyX2luaXRfdmVyYnMgfSwKKwkJLmluaXRfdmVyYnMgPSB7IGFsYzY2Ml9pbml0X3ZlcmJzLCBhbGM2NjJfZWFwZF9pbml0X3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjNjYyX2RhY19uaWRzKSwKIAkJLmRhY19uaWRzID0gYWxjNjYyX2RhY19uaWRzLAogCQkuZGlnX291dF9uaWQgPSBBTEM2NjJfRElHT1VUX05JRCwKQEAgLTE4ODM4LDcgKzE4NTc0LDcgQEAKIAl9LAogCVtBTEM2NjJfM1NUXzZjaF0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzY2Ml8zU1RfNmNoX21peGVyLCBhbGM2NjJfY2htb2RlX21peGVyIH0sCi0JCS5pbml0X3ZlcmJzID0geyBhbGM2NjJfaW5pdF92ZXJicyB9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjNjYyX2luaXRfdmVyYnMsIGFsYzY2Ml9lYXBkX2luaXRfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM2NjJfZGFjX25pZHMpLAogCQkuZGFjX25pZHMgPSBhbGM2NjJfZGFjX25pZHMsCiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM2NjJfM1NUXzZjaF9tb2RlcyksCkBAIC0xODg0OCw3ICsxODU4NCw3IEBACiAJfSwKIAlbQUxDNjYyXzVTVF9ESUddID0gewogCQkubWl4ZXJzID0geyBhbGM2NjJfYmFzZV9taXhlciwgYWxjNjYyX2NobW9kZV9taXhlciB9LAotCQkuaW5pdF92ZXJicyA9IHsgYWxjNjYyX2luaXRfdmVyYnMgfSwKKwkJLmluaXRfdmVyYnMgPSB7IGFsYzY2Ml9pbml0X3ZlcmJzLCBhbGM2NjJfZWFwZF9pbml0X3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjNjYyX2RhY19uaWRzKSwKIAkJLmRhY19uaWRzID0gYWxjNjYyX2RhY19uaWRzLAogCQkuZGlnX291dF9uaWQgPSBBTEM2NjJfRElHT1VUX05JRCwKQEAgLTE4ODU5LDEwNCArMTg1OTUsMTIwIEBACiAJfSwKIAlbQUxDNjYyX0xFTk9WT18xMDFFXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjNjYyX2xlbm92b18xMDFlX21peGVyIH0sCi0JCS5pbml0X3ZlcmJzID0geyBhbGM2NjJfaW5pdF92ZXJicywgYWxjNjYyX3N1ZV9pbml0X3ZlcmJzIH0sCisJCS5pbml0X3ZlcmJzID0geyBhbGM2NjJfaW5pdF92ZXJicywKKwkJCQlhbGM2NjJfZWFwZF9pbml0X3ZlcmJzLAorCQkJCWFsYzY2Ml9zdWVfaW5pdF92ZXJicyB9LAogCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzY2Ml9kYWNfbmlkcyksCiAJCS5kYWNfbmlkcyA9IGFsYzY2Ml9kYWNfbmlkcywKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzY2Ml8zU1RfMmNoX21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzY2Ml8zU1RfMmNoX21vZGVzLAogCQkuaW5wdXRfbXV4ID0gJmFsYzY2Ml9sZW5vdm9fMTAxZV9jYXB0dXJlX3NvdXJjZSwKLQkJLnVuc29sX2V2ZW50ID0gYWxjNjYyX2xlbm92b18xMDFlX3Vuc29sX2V2ZW50LAotCQkuaW5pdF9ob29rID0gYWxjNjYyX2xlbm92b18xMDFlX2FsbF9hdXRvbXV0ZSwKKwkJLnVuc29sX2V2ZW50ID0gYWxjX3NrdV91bnNvbF9ldmVudCwKKwkJLnNldHVwID0gYWxjNjYyX2xlbm92b18xMDFlX3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjX2luaXRob29rLAogCX0sCiAJW0FMQzY2Ml9BU1VTX0VFRVBDX1A3MDFdID0gewogCQkubWl4ZXJzID0geyBhbGM2NjJfZWVlcGNfcDcwMV9taXhlciB9LAogCQkuaW5pdF92ZXJicyA9IHsgYWxjNjYyX2luaXRfdmVyYnMsCisJCQkJYWxjNjYyX2VhcGRfaW5pdF92ZXJicywKIAkJCQlhbGM2NjJfZWVlcGNfc3VlX2luaXRfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM2NjJfZGFjX25pZHMpLAogCQkuZGFjX25pZHMgPSBhbGM2NjJfZGFjX25pZHMsCiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM2NjJfM1NUXzJjaF9tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGM2NjJfM1NUXzJjaF9tb2RlcywKLQkJLnVuc29sX2V2ZW50ID0gYWxjNjYyX2VlZXBjX3Vuc29sX2V2ZW50LAorCQkudW5zb2xfZXZlbnQgPSBhbGNfc2t1X3Vuc29sX2V2ZW50LAogCQkuc2V0dXAgPSBhbGM2NjJfZWVlcGNfc2V0dXAsCi0JCS5pbml0X2hvb2sgPSBhbGM2NjJfZWVlcGNfaW5pdGhvb2ssCisJCS5pbml0X2hvb2sgPSBhbGNfaW5pdGhvb2ssCiAJfSwKIAlbQUxDNjYyX0FTVVNfRUVFUENfRVAyMF0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzY2Ml9lZWVwY19lcDIwX21peGVyLAogCQkJICAgIGFsYzY2Ml9jaG1vZGVfbWl4ZXIgfSwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzY2Ml9pbml0X3ZlcmJzLAorCQkJCWFsYzY2Ml9lYXBkX2luaXRfdmVyYnMsCiAJCQkJYWxjNjYyX2VlZXBjX2VwMjBfc3VlX2luaXRfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM2NjJfZGFjX25pZHMpLAogCQkuZGFjX25pZHMgPSBhbGM2NjJfZGFjX25pZHMsCiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM2NjJfM1NUXzZjaF9tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGM2NjJfM1NUXzZjaF9tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGM2NjJfbGVub3ZvXzEwMWVfY2FwdHVyZV9zb3VyY2UsCi0JCS51bnNvbF9ldmVudCA9IGFsYzY2Ml9lZWVwY191bnNvbF9ldmVudCwKKwkJLnVuc29sX2V2ZW50ID0gYWxjX3NrdV91bnNvbF9ldmVudCwKIAkJLnNldHVwID0gYWxjNjYyX2VlZXBjX2VwMjBfc2V0dXAsCi0JCS5pbml0X2hvb2sgPSBhbGM2NjJfZWVlcGNfZXAyMF9pbml0aG9vaywKKwkJLmluaXRfaG9vayA9IGFsY19pbml0aG9vaywKIAl9LAogCVtBTEM2NjJfRUNTXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjNjYyX2Vjc19taXhlciB9LAogCQkuaW5pdF92ZXJicyA9IHsgYWxjNjYyX2luaXRfdmVyYnMsCisJCQkJYWxjNjYyX2VhcGRfaW5pdF92ZXJicywKIAkJCQlhbGM2NjJfZWNzX2luaXRfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM2NjJfZGFjX25pZHMpLAogCQkuZGFjX25pZHMgPSBhbGM2NjJfZGFjX25pZHMsCiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM2NjJfM1NUXzJjaF9tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGM2NjJfM1NUXzJjaF9tb2RlcywKLQkJLnVuc29sX2V2ZW50ID0gYWxjNjYyX2VlZXBjX3Vuc29sX2V2ZW50LAorCQkudW5zb2xfZXZlbnQgPSBhbGNfc2t1X3Vuc29sX2V2ZW50LAogCQkuc2V0dXAgPSBhbGM2NjJfZWVlcGNfc2V0dXAsCi0JCS5pbml0X2hvb2sgPSBhbGM2NjJfZWVlcGNfaW5pdGhvb2ssCisJCS5pbml0X2hvb2sgPSBhbGNfaW5pdGhvb2ssCiAJfSwKIAlbQUxDNjYzX0FTVVNfTTUxVkFdID0gewogCQkubWl4ZXJzID0geyBhbGM2NjNfbTUxdmFfbWl4ZXIgfSwKLQkJLmluaXRfdmVyYnMgPSB7IGFsYzY2Ml9pbml0X3ZlcmJzLCBhbGM2NjNfbTUxdmFfaW5pdF92ZXJicyB9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjNjYyX2luaXRfdmVyYnMsCisJCQkJYWxjNjYyX2VhcGRfaW5pdF92ZXJicywKKwkJCQlhbGM2NjNfbTUxdmFfaW5pdF92ZXJicyB9LAogCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzY2Ml9kYWNfbmlkcyksCiAJCS5kYWNfbmlkcyA9IGFsYzY2Ml9kYWNfbmlkcywKIAkJLmRpZ19vdXRfbmlkID0gQUxDNjYyX0RJR09VVF9OSUQsCiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM2NjJfM1NUXzJjaF9tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGM2NjJfM1NUXzJjaF9tb2RlcywKLQkJLnVuc29sX2V2ZW50ID0gYWxjNjYzX201MXZhX3Vuc29sX2V2ZW50LAorCQkudW5zb2xfZXZlbnQgPSBhbGNfc2t1X3Vuc29sX2V2ZW50LAogCQkuc2V0dXAgPSBhbGM2NjNfbTUxdmFfc2V0dXAsCi0JCS5pbml0X2hvb2sgPSBhbGM2NjNfbTUxdmFfaW5pdGhvb2ssCisJCS5pbml0X2hvb2sgPSBhbGNfaW5pdGhvb2ssCiAJfSwKIAlbQUxDNjYzX0FTVVNfRzcxVl0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzY2M19nNzF2X21peGVyIH0sCi0JCS5pbml0X3ZlcmJzID0geyBhbGM2NjJfaW5pdF92ZXJicywgYWxjNjYzX2c3MXZfaW5pdF92ZXJicyB9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjNjYyX2luaXRfdmVyYnMsCisJCQkJYWxjNjYyX2VhcGRfaW5pdF92ZXJicywKKwkJCQlhbGM2NjNfZzcxdl9pbml0X3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjNjYyX2RhY19uaWRzKSwKIAkJLmRhY19uaWRzID0gYWxjNjYyX2RhY19uaWRzLAogCQkuZGlnX291dF9uaWQgPSBBTEM2NjJfRElHT1VUX05JRCwKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzY2Ml8zU1RfMmNoX21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzY2Ml8zU1RfMmNoX21vZGVzLAotCQkudW5zb2xfZXZlbnQgPSBhbGM2NjNfZzcxdl91bnNvbF9ldmVudCwKKwkJLnVuc29sX2V2ZW50ID0gYWxjX3NrdV91bnNvbF9ldmVudCwKIAkJLnNldHVwID0gYWxjNjYzX2c3MXZfc2V0dXAsCi0JCS5pbml0X2hvb2sgPSBhbGM2NjNfZzcxdl9pbml0aG9vaywKKwkJLmluaXRfaG9vayA9IGFsY19pbml0aG9vaywKIAl9LAogCVtBTEM2NjNfQVNVU19IMTNdID0gewogCQkubWl4ZXJzID0geyBhbGM2NjNfbTUxdmFfbWl4ZXIgfSwKLQkJLmluaXRfdmVyYnMgPSB7IGFsYzY2Ml9pbml0X3ZlcmJzLCBhbGM2NjNfbTUxdmFfaW5pdF92ZXJicyB9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjNjYyX2luaXRfdmVyYnMsCisJCQkJYWxjNjYyX2VhcGRfaW5pdF92ZXJicywKKwkJCQlhbGM2NjNfbTUxdmFfaW5pdF92ZXJicyB9LAogCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzY2Ml9kYWNfbmlkcyksCiAJCS5kYWNfbmlkcyA9IGFsYzY2Ml9kYWNfbmlkcywKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzY2Ml8zU1RfMmNoX21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzY2Ml8zU1RfMmNoX21vZGVzLAotCQkudW5zb2xfZXZlbnQgPSBhbGM2NjNfbTUxdmFfdW5zb2xfZXZlbnQsCi0JCS5pbml0X2hvb2sgPSBhbGM2NjNfbTUxdmFfaW5pdGhvb2ssCisJCS5zZXR1cCA9IGFsYzY2M19tNTF2YV9zZXR1cCwKKwkJLnVuc29sX2V2ZW50ID0gYWxjX3NrdV91bnNvbF9ldmVudCwKKwkJLmluaXRfaG9vayA9IGFsY19pbml0aG9vaywKIAl9LAogCVtBTEM2NjNfQVNVU19HNTBWXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjNjYzX2c1MHZfbWl4ZXIgfSwKLQkJLmluaXRfdmVyYnMgPSB7IGFsYzY2Ml9pbml0X3ZlcmJzLCBhbGM2NjNfZzUwdl9pbml0X3ZlcmJzIH0sCisJCS5pbml0X3ZlcmJzID0geyBhbGM2NjJfaW5pdF92ZXJicywKKwkJCQlhbGM2NjJfZWFwZF9pbml0X3ZlcmJzLAorCQkJCWFsYzY2M19nNTB2X2luaXRfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM2NjJfZGFjX25pZHMpLAogCQkuZGFjX25pZHMgPSBhbGM2NjJfZGFjX25pZHMsCiAJCS5kaWdfb3V0X25pZCA9IEFMQzY2Ml9ESUdPVVRfTklELAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjNjYyXzNTVF82Y2hfbW9kZXMpLAogCQkuY2hhbm5lbF9tb2RlID0gYWxjNjYyXzNTVF82Y2hfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjNjYzX2NhcHR1cmVfc291cmNlLAotCQkudW5zb2xfZXZlbnQgPSBhbGM2NjNfZzUwdl91bnNvbF9ldmVudCwKKwkJLnVuc29sX2V2ZW50ID0gYWxjX3NrdV91bnNvbF9ldmVudCwKIAkJLnNldHVwID0gYWxjNjYzX2c1MHZfc2V0dXAsCi0JCS5pbml0X2hvb2sgPSBhbGM2NjNfZzUwdl9pbml0aG9vaywKKwkJLmluaXRfaG9vayA9IGFsY19pbml0aG9vaywKIAl9LAogCVtBTEM2NjNfQVNVU19NT0RFMV0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzY2M19tNTF2YV9taXhlciB9LAogCQkuY2FwX21peGVyID0gYWxjNjYyX2F1dG9fY2FwdHVyZV9taXhlciwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzY2Ml9pbml0X3ZlcmJzLAorCQkJCWFsYzY2Ml9lYXBkX2luaXRfdmVyYnMsCiAJCQkJYWxjNjYzXzIxamRfYW1pY19pbml0X3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjNjYyX2RhY19uaWRzKSwKIAkJLmhwX25pZCA9IDB4MDMsCkBAIC0xODk2NCwyOCArMTg3MTYsMzAgQEAKIAkJLmRpZ19vdXRfbmlkID0gQUxDNjYyX0RJR09VVF9OSUQsCiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM2NjJfM1NUXzJjaF9tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGM2NjJfM1NUXzJjaF9tb2RlcywKLQkJLnVuc29sX2V2ZW50ID0gYWxjNjYzX21vZGUxX3Vuc29sX2V2ZW50LAorCQkudW5zb2xfZXZlbnQgPSBhbGNfc2t1X3Vuc29sX2V2ZW50LAogCQkuc2V0dXAgPSBhbGM2NjNfbW9kZTFfc2V0dXAsCi0JCS5pbml0X2hvb2sgPSBhbGM2NjNfbW9kZTFfaW5pdGhvb2ssCisJCS5pbml0X2hvb2sgPSBhbGNfaW5pdGhvb2ssCiAJfSwKIAlbQUxDNjYyX0FTVVNfTU9ERTJdID0gewogCQkubWl4ZXJzID0geyBhbGM2NjJfMWJqZF9taXhlciB9LAogCQkuY2FwX21peGVyID0gYWxjNjYyX2F1dG9fY2FwdHVyZV9taXhlciwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzY2Ml9pbml0X3ZlcmJzLAorCQkJCWFsYzY2Ml9lYXBkX2luaXRfdmVyYnMsCiAJCQkJYWxjNjYyXzFiamRfYW1pY19pbml0X3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjNjYyX2RhY19uaWRzKSwKIAkJLmRhY19uaWRzID0gYWxjNjYyX2RhY19uaWRzLAogCQkuZGlnX291dF9uaWQgPSBBTEM2NjJfRElHT1VUX05JRCwKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzY2Ml8zU1RfMmNoX21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzY2Ml8zU1RfMmNoX21vZGVzLAotCQkudW5zb2xfZXZlbnQgPSBhbGM2NjJfbW9kZTJfdW5zb2xfZXZlbnQsCisJCS51bnNvbF9ldmVudCA9IGFsY19za3VfdW5zb2xfZXZlbnQsCiAJCS5zZXR1cCA9IGFsYzY2Ml9tb2RlMl9zZXR1cCwKLQkJLmluaXRfaG9vayA9IGFsYzY2Ml9tb2RlMl9pbml0aG9vaywKKwkJLmluaXRfaG9vayA9IGFsY19pbml0aG9vaywKIAl9LAogCVtBTEM2NjNfQVNVU19NT0RFM10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzY2M190d29faHBfbTFfbWl4ZXIgfSwKIAkJLmNhcF9taXhlciA9IGFsYzY2Ml9hdXRvX2NhcHR1cmVfbWl4ZXIsCiAJCS5pbml0X3ZlcmJzID0geyBhbGM2NjJfaW5pdF92ZXJicywKKwkJCQlhbGM2NjJfZWFwZF9pbml0X3ZlcmJzLAogCQkJCWFsYzY2M190d29faHBfYW1pY19tMV9pbml0X3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjNjYyX2RhY19uaWRzKSwKIAkJLmhwX25pZCA9IDB4MDMsCkBAIC0xODk5MywxNCArMTg3NDcsMTUgQEAKIAkJLmRpZ19vdXRfbmlkID0gQUxDNjYyX0RJR09VVF9OSUQsCiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM2NjJfM1NUXzJjaF9tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGM2NjJfM1NUXzJjaF9tb2RlcywKLQkJLnVuc29sX2V2ZW50ID0gYWxjNjYzX21vZGUzX3Vuc29sX2V2ZW50LAorCQkudW5zb2xfZXZlbnQgPSBhbGNfc2t1X3Vuc29sX2V2ZW50LAogCQkuc2V0dXAgPSBhbGM2NjNfbW9kZTNfc2V0dXAsCi0JCS5pbml0X2hvb2sgPSBhbGM2NjNfbW9kZTNfaW5pdGhvb2ssCisJCS5pbml0X2hvb2sgPSBhbGNfaW5pdGhvb2ssCiAJfSwKIAlbQUxDNjYzX0FTVVNfTU9ERTRdID0gewogCQkubWl4ZXJzID0geyBhbGM2NjNfYXN1c18yMWpkX2NsZmVfbWl4ZXIgfSwKIAkJLmNhcF9taXhlciA9IGFsYzY2Ml9hdXRvX2NhcHR1cmVfbWl4ZXIsCiAJCS5pbml0X3ZlcmJzID0geyBhbGM2NjJfaW5pdF92ZXJicywKKwkJCQlhbGM2NjJfZWFwZF9pbml0X3ZlcmJzLAogCQkJCWFsYzY2M18yMWpkX2FtaWNfaW5pdF92ZXJic30sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjNjYyX2RhY19uaWRzKSwKIAkJLmhwX25pZCA9IDB4MDMsCkBAIC0xOTAwOCwxNCArMTg3NjMsMTUgQEAKIAkJLmRpZ19vdXRfbmlkID0gQUxDNjYyX0RJR09VVF9OSUQsCiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM2NjJfM1NUXzJjaF9tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGM2NjJfM1NUXzJjaF9tb2RlcywKLQkJLnVuc29sX2V2ZW50ID0gYWxjNjYzX21vZGU0X3Vuc29sX2V2ZW50LAorCQkudW5zb2xfZXZlbnQgPSBhbGNfc2t1X3Vuc29sX2V2ZW50LAogCQkuc2V0dXAgPSBhbGM2NjNfbW9kZTRfc2V0dXAsCi0JCS5pbml0X2hvb2sgPSBhbGM2NjNfbW9kZTRfaW5pdGhvb2ssCisJCS5pbml0X2hvb2sgPSBhbGNfaW5pdGhvb2ssCiAJfSwKIAlbQUxDNjYzX0FTVVNfTU9ERTVdID0gewogCQkubWl4ZXJzID0geyBhbGM2NjNfYXN1c18xNWpkX2NsZmVfbWl4ZXIgfSwKIAkJLmNhcF9taXhlciA9IGFsYzY2Ml9hdXRvX2NhcHR1cmVfbWl4ZXIsCiAJCS5pbml0X3ZlcmJzID0geyBhbGM2NjJfaW5pdF92ZXJicywKKwkJCQlhbGM2NjJfZWFwZF9pbml0X3ZlcmJzLAogCQkJCWFsYzY2M18xNWpkX2FtaWNfaW5pdF92ZXJicyB9LAogCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzY2Ml9kYWNfbmlkcyksCiAJCS5ocF9uaWQgPSAweDAzLApAQCAtMTkwMjMsMTQgKzE4Nzc5LDE1IEBACiAJCS5kaWdfb3V0X25pZCA9IEFMQzY2Ml9ESUdPVVRfTklELAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjNjYyXzNTVF8yY2hfbW9kZXMpLAogCQkuY2hhbm5lbF9tb2RlID0gYWxjNjYyXzNTVF8yY2hfbW9kZXMsCi0JCS51bnNvbF9ldmVudCA9IGFsYzY2M19tb2RlNV91bnNvbF9ldmVudCwKKwkJLnVuc29sX2V2ZW50ID0gYWxjX3NrdV91bnNvbF9ldmVudCwKIAkJLnNldHVwID0gYWxjNjYzX21vZGU1X3NldHVwLAotCQkuaW5pdF9ob29rID0gYWxjNjYzX21vZGU1X2luaXRob29rLAorCQkuaW5pdF9ob29rID0gYWxjX2luaXRob29rLAogCX0sCiAJW0FMQzY2M19BU1VTX01PREU2XSA9IHsKIAkJLm1peGVycyA9IHsgYWxjNjYzX3R3b19ocF9tMl9taXhlciB9LAogCQkuY2FwX21peGVyID0gYWxjNjYyX2F1dG9fY2FwdHVyZV9taXhlciwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzY2Ml9pbml0X3ZlcmJzLAorCQkJCWFsYzY2Ml9lYXBkX2luaXRfdmVyYnMsCiAJCQkJYWxjNjYzX3R3b19ocF9hbWljX20yX2luaXRfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM2NjJfZGFjX25pZHMpLAogCQkuaHBfbmlkID0gMHgwMywKQEAgLTE5MDM4LDE0ICsxODc5NSwxNSBAQAogCQkuZGlnX291dF9uaWQgPSBBTEM2NjJfRElHT1VUX05JRCwKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzY2Ml8zU1RfMmNoX21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzY2Ml8zU1RfMmNoX21vZGVzLAotCQkudW5zb2xfZXZlbnQgPSBhbGM2NjNfbW9kZTZfdW5zb2xfZXZlbnQsCisJCS51bnNvbF9ldmVudCA9IGFsY19za3VfdW5zb2xfZXZlbnQsCiAJCS5zZXR1cCA9IGFsYzY2M19tb2RlNl9zZXR1cCwKLQkJLmluaXRfaG9vayA9IGFsYzY2M19tb2RlNl9pbml0aG9vaywKKwkJLmluaXRfaG9vayA9IGFsY19pbml0aG9vaywKIAl9LAogCVtBTEM2NjNfQVNVU19NT0RFN10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzY2M19tb2RlN19taXhlciB9LAogCQkuY2FwX21peGVyID0gYWxjNjYyX2F1dG9fY2FwdHVyZV9taXhlciwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzY2Ml9pbml0X3ZlcmJzLAorCQkJCWFsYzY2Ml9lYXBkX2luaXRfdmVyYnMsCiAJCQkJYWxjNjYzX21vZGU3X2luaXRfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM2NjJfZGFjX25pZHMpLAogCQkuaHBfbmlkID0gMHgwMywKQEAgLTE5MDUzLDE0ICsxODgxMSwxNSBAQAogCQkuZGlnX291dF9uaWQgPSBBTEM2NjJfRElHT1VUX05JRCwKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzY2Ml8zU1RfMmNoX21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzY2Ml8zU1RfMmNoX21vZGVzLAotCQkudW5zb2xfZXZlbnQgPSBhbGM2NjNfbW9kZTdfdW5zb2xfZXZlbnQsCisJCS51bnNvbF9ldmVudCA9IGFsY19za3VfdW5zb2xfZXZlbnQsCiAJCS5zZXR1cCA9IGFsYzY2M19tb2RlN19zZXR1cCwKLQkJLmluaXRfaG9vayA9IGFsYzY2M19tb2RlN19pbml0aG9vaywKKwkJLmluaXRfaG9vayA9IGFsY19pbml0aG9vaywKIAl9LAogCVtBTEM2NjNfQVNVU19NT0RFOF0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzY2M19tb2RlOF9taXhlciB9LAogCQkuY2FwX21peGVyID0gYWxjNjYyX2F1dG9fY2FwdHVyZV9taXhlciwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzY2Ml9pbml0X3ZlcmJzLAorCQkJCWFsYzY2Ml9lYXBkX2luaXRfdmVyYnMsCiAJCQkJYWxjNjYzX21vZGU4X2luaXRfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM2NjJfZGFjX25pZHMpLAogCQkuaHBfbmlkID0gMHgwMywKQEAgLTE5MDY4LDUyICsxODgyNyw1NyBAQAogCQkuZGlnX291dF9uaWQgPSBBTEM2NjJfRElHT1VUX05JRCwKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzY2Ml8zU1RfMmNoX21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzY2Ml8zU1RfMmNoX21vZGVzLAotCQkudW5zb2xfZXZlbnQgPSBhbGM2NjNfbW9kZThfdW5zb2xfZXZlbnQsCisJCS51bnNvbF9ldmVudCA9IGFsY19za3VfdW5zb2xfZXZlbnQsCiAJCS5zZXR1cCA9IGFsYzY2M19tb2RlOF9zZXR1cCwKLQkJLmluaXRfaG9vayA9IGFsYzY2M19tb2RlOF9pbml0aG9vaywKKwkJLmluaXRfaG9vayA9IGFsY19pbml0aG9vaywKIAl9LAogCVtBTEMyNzJfREVMTF0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzY2M19tNTF2YV9taXhlciB9LAogCQkuY2FwX21peGVyID0gYWxjMjcyX2F1dG9fY2FwdHVyZV9taXhlciwKLQkJLmluaXRfdmVyYnMgPSB7IGFsYzY2Ml9pbml0X3ZlcmJzLCBhbGMyNzJfZGVsbF9pbml0X3ZlcmJzIH0sCisJCS5pbml0X3ZlcmJzID0geyBhbGM2NjJfaW5pdF92ZXJicywKKwkJCQlhbGM2NjJfZWFwZF9pbml0X3ZlcmJzLAorCQkJCWFsYzI3Ml9kZWxsX2luaXRfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGMyNzJfZGFjX25pZHMpLAotCQkuZGFjX25pZHMgPSBhbGM2NjJfZGFjX25pZHMsCisJCS5kYWNfbmlkcyA9IGFsYzI3Ml9kYWNfbmlkcywKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzY2Ml8zU1RfMmNoX21vZGVzKSwKIAkJLmFkY19uaWRzID0gYWxjMjcyX2FkY19uaWRzLAogCQkubnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGMyNzJfYWRjX25pZHMpLAogCQkuY2Fwc3JjX25pZHMgPSBhbGMyNzJfY2Fwc3JjX25pZHMsCiAJCS5jaGFubmVsX21vZGUgPSBhbGM2NjJfM1NUXzJjaF9tb2RlcywKLQkJLnVuc29sX2V2ZW50ID0gYWxjNjYzX201MXZhX3Vuc29sX2V2ZW50LAorCQkudW5zb2xfZXZlbnQgPSBhbGNfc2t1X3Vuc29sX2V2ZW50LAogCQkuc2V0dXAgPSBhbGM2NjNfbTUxdmFfc2V0dXAsCi0JCS5pbml0X2hvb2sgPSBhbGM2NjNfbTUxdmFfaW5pdGhvb2ssCisJCS5pbml0X2hvb2sgPSBhbGNfaW5pdGhvb2ssCiAJfSwKIAlbQUxDMjcyX0RFTExfWk0xXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjNjYzX201MXZhX21peGVyIH0sCiAJCS5jYXBfbWl4ZXIgPSBhbGM2NjJfYXV0b19jYXB0dXJlX21peGVyLAotCQkuaW5pdF92ZXJicyA9IHsgYWxjNjYyX2luaXRfdmVyYnMsIGFsYzI3Ml9kZWxsX3ptMV9pbml0X3ZlcmJzIH0sCisJCS5pbml0X3ZlcmJzID0geyBhbGM2NjJfaW5pdF92ZXJicywKKwkJCQlhbGM2NjJfZWFwZF9pbml0X3ZlcmJzLAorCQkJCWFsYzI3Ml9kZWxsX3ptMV9pbml0X3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjMjcyX2RhY19uaWRzKSwKLQkJLmRhY19uaWRzID0gYWxjNjYyX2RhY19uaWRzLAorCQkuZGFjX25pZHMgPSBhbGMyNzJfZGFjX25pZHMsCiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM2NjJfM1NUXzJjaF9tb2RlcyksCiAJCS5hZGNfbmlkcyA9IGFsYzY2Ml9hZGNfbmlkcywKIAkJLm51bV9hZGNfbmlkcyA9IDEsCiAJCS5jYXBzcmNfbmlkcyA9IGFsYzY2Ml9jYXBzcmNfbmlkcywKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzY2Ml8zU1RfMmNoX21vZGVzLAotCQkudW5zb2xfZXZlbnQgPSBhbGM2NjNfbTUxdmFfdW5zb2xfZXZlbnQsCisJCS51bnNvbF9ldmVudCA9IGFsY19za3VfdW5zb2xfZXZlbnQsCiAJCS5zZXR1cCA9IGFsYzY2M19tNTF2YV9zZXR1cCwKLQkJLmluaXRfaG9vayA9IGFsYzY2M19tNTF2YV9pbml0aG9vaywKKwkJLmluaXRfaG9vayA9IGFsY19pbml0aG9vaywKIAl9LAogCVtBTEMyNzJfU0FNU1VOR19OQzEwXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjMjcyX25jMTBfbWl4ZXIgfSwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzY2Ml9pbml0X3ZlcmJzLAorCQkJCWFsYzY2Ml9lYXBkX2luaXRfdmVyYnMsCiAJCQkJYWxjNjYzXzIxamRfYW1pY19pbml0X3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjMjcyX2RhY19uaWRzKSwKIAkJLmRhY19uaWRzID0gYWxjMjcyX2RhY19uaWRzLAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjNjYyXzNTVF8yY2hfbW9kZXMpLAogCQkuY2hhbm5lbF9tb2RlID0gYWxjNjYyXzNTVF8yY2hfbW9kZXMsCiAJCS8qLmlucHV0X211eCA9ICZhbGMyNzJfbmMxMF9jYXB0dXJlX3NvdXJjZSwqLwotCQkudW5zb2xfZXZlbnQgPSBhbGM2NjNfbW9kZTRfdW5zb2xfZXZlbnQsCisJCS51bnNvbF9ldmVudCA9IGFsY19za3VfdW5zb2xfZXZlbnQsCiAJCS5zZXR1cCA9IGFsYzY2M19tb2RlNF9zZXR1cCwKLQkJLmluaXRfaG9vayA9IGFsYzY2M19tb2RlNF9pbml0aG9vaywKKwkJLmluaXRfaG9vayA9IGFsY19pbml0aG9vaywKIAl9LAogfTsKIApAQCAtMTkxMjMsNDUgKzE4ODg3LDc5IEBACiAgKi8KIAogLyogY29udmVydCBmcm9tIE1JWCBuaWQgdG8gREFDICovCi1zdGF0aWMgaW5saW5lIGhkYV9uaWRfdCBhbGM2NjJfbWl4X3RvX2RhYyhoZGFfbmlkX3QgbmlkKQorc3RhdGljIGhkYV9uaWRfdCBhbGNfYXV0b19taXhfdG9fZGFjKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQogewotCWlmIChuaWQgPT0gMHgwZikKLQkJcmV0dXJuIDB4MDI7Ci0JZWxzZSBpZiAobmlkID49IDB4MGMgJiYgbmlkIDw9IDB4MGUpCi0JCXJldHVybiBuaWQgLSAweDBjICsgMHgwMjsKLQllbHNlIGlmIChuaWQgPT0gMHgyNikgLyogQUxDODg3LVZEIGhhcyB0aGlzIERBQyB0b28gKi8KLQkJcmV0dXJuIDB4MjU7Ci0JZWxzZQotCQlyZXR1cm4gMDsKKwloZGFfbmlkX3QgbGlzdFs1XTsKKwlpbnQgaSwgbnVtOworCisJbnVtID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIG5pZCwgbGlzdCwgQVJSQVlfU0laRShsaXN0KSk7CisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCWlmIChnZXRfd2NhcHNfdHlwZShnZXRfd2NhcHMoY29kZWMsIGxpc3RbaV0pKSA9PSBBQ19XSURfQVVEX09VVCkKKwkJCXJldHVybiBsaXN0W2ldOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogZ28gZG93biB0byB0aGUgc2VsZWN0b3Igd2lkZ2V0IGJlZm9yZSB0aGUgbWl4ZXIgKi8KK3N0YXRpYyBoZGFfbmlkX3QgYWxjX2dvX2Rvd25fdG9fc2VsZWN0b3Ioc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW4pCit7CisJaGRhX25pZF90IHNyY3NbNV07CisJaW50IG51bSA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCBwaW4sIHNyY3MsCisJCQkJCSAgQVJSQVlfU0laRShzcmNzKSk7CisJaWYgKG51bSAhPSAxIHx8CisJICAgIGdldF93Y2Fwc190eXBlKGdldF93Y2Fwcyhjb2RlYywgc3Jjc1swXSkpICE9IEFDX1dJRF9BVURfU0VMKQorCQlyZXR1cm4gcGluOworCXJldHVybiBzcmNzWzBdOwogfQogCiAvKiBnZXQgTUlYIG5pZCBjb25uZWN0ZWQgdG8gdGhlIGdpdmVuIHBpbiB0YXJnZXRlZCB0byBEQUMgKi8KLXN0YXRpYyBoZGFfbmlkX3QgYWxjNjYyX2RhY190b19taXgoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW4sCitzdGF0aWMgaGRhX25pZF90IGFsY19hdXRvX2RhY190b19taXgoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW4sCiAJCQkJICAgaGRhX25pZF90IGRhYykKIHsKIAloZGFfbmlkX3QgbWl4WzVdOwogCWludCBpLCBudW07CiAKKwlwaW4gPSBhbGNfZ29fZG93bl90b19zZWxlY3Rvcihjb2RlYywgcGluKTsKIAludW0gPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgcGluLCBtaXgsIEFSUkFZX1NJWkUobWl4KSk7CiAJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7Ci0JCWlmIChhbGM2NjJfbWl4X3RvX2RhYyhtaXhbaV0pID09IGRhYykKKwkJaWYgKGFsY19hdXRvX21peF90b19kYWMoY29kZWMsIG1peFtpXSkgPT0gZGFjKQogCQkJcmV0dXJuIG1peFtpXTsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKKy8qIHNlbGVjdCB0aGUgY29ubmVjdGlvbiBmcm9tIHBpbiB0byBEQUMgaWYgbmVlZGVkICovCitzdGF0aWMgaW50IGFsY19hdXRvX3NlbGVjdF9kYWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW4sCisJCQkgICAgICAgaGRhX25pZF90IGRhYykKK3sKKwloZGFfbmlkX3QgbWl4WzVdOworCWludCBpLCBudW07CisKKwlwaW4gPSBhbGNfZ29fZG93bl90b19zZWxlY3Rvcihjb2RlYywgcGluKTsKKwludW0gPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgcGluLCBtaXgsIEFSUkFZX1NJWkUobWl4KSk7CisJaWYgKG51bSA8IDIpCisJCXJldHVybiAwOworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgeworCQlpZiAoYWxjX2F1dG9fbWl4X3RvX2RhYyhjb2RlYywgbWl4W2ldKSA9PSBkYWMpIHsKKwkJCXNuZF9oZGFfY29kZWNfdXBkYXRlX2NhY2hlKGNvZGVjLCBwaW4sIDAsCisJCQkJCQkgICBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgaSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKwogLyogbG9vayBmb3IgYW4gZW1wdHkgREFDIHNsb3QgKi8KLXN0YXRpYyBoZGFfbmlkX3QgYWxjNjYyX2xvb2tfZm9yX2RhYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IHBpbikKK3N0YXRpYyBoZGFfbmlkX3QgYWxjX2F1dG9fbG9va19mb3JfZGFjKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgcGluKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCWhkYV9uaWRfdCBzcmNzWzVdOwogCWludCBpLCBqLCBudW07CiAKKwlwaW4gPSBhbGNfZ29fZG93bl90b19zZWxlY3Rvcihjb2RlYywgcGluKTsKIAludW0gPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgcGluLCBzcmNzLCBBUlJBWV9TSVpFKHNyY3MpKTsKLQlpZiAobnVtIDwgMCkKLQkJcmV0dXJuIDA7CiAJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7Ci0JCWhkYV9uaWRfdCBuaWQgPSBhbGM2NjJfbWl4X3RvX2RhYyhzcmNzW2ldKTsKKwkJaGRhX25pZF90IG5pZCA9IGFsY19hdXRvX21peF90b19kYWMoY29kZWMsIHNyY3NbaV0pOwogCQlpZiAoIW5pZCkKIAkJCWNvbnRpbnVlOwogCQlmb3IgKGogPSAwOyBqIDwgc3BlYy0+bXVsdGlvdXQubnVtX2RhY3M7IGorKykKQEAgLTE5MTgzLDEwICsxODk4MSwxMCBAQAogCiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBzcGVjLT5wcml2YXRlX2RhY19uaWRzOwogCWZvciAoaSA9IDA7IGkgPCBjZmctPmxpbmVfb3V0czsgaSsrKSB7Ci0JCWRhYyA9IGFsYzY2Ml9sb29rX2Zvcl9kYWMoY29kZWMsIGNmZy0+bGluZV9vdXRfcGluc1tpXSk7CisJCWRhYyA9IGFsY19hdXRvX2xvb2tfZm9yX2RhYyhjb2RlYywgY2ZnLT5saW5lX291dF9waW5zW2ldKTsKIAkJaWYgKCFkYWMpCiAJCQljb250aW51ZTsKLQkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MrK10gPSBkYWM7CisJCXNwZWMtPnByaXZhdGVfZGFjX25pZHNbc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MrK10gPSBkYWM7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTkyMjIsMTUgKzE5MDIwLDIzIEBACiAJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjaG5hbWVbNF0gPSB7CiAJCSJGcm9udCIsICJTdXJyb3VuZCIsIE5VTEwgLypDTEZFKi8sICJTaWRlIgogCX07Ci0JY29uc3QgY2hhciAqcGZ4ID0gYWxjX2dldF9saW5lX291dF9wZngoY2ZnLCB0cnVlKTsKLQloZGFfbmlkX3QgbmlkLCBtaXg7Ci0JaW50IGksIGVycjsKKwljb25zdCBjaGFyICpwZnggPSBhbGNfZ2V0X2xpbmVfb3V0X3BmeChzcGVjLCB0cnVlKTsKKwloZGFfbmlkX3QgbmlkLCBtaXgsIHBpbjsKKwlpbnQgaSwgZXJyLCBub3V0cHV0czsKIAotCWZvciAoaSA9IDA7IGkgPCBjZmctPmxpbmVfb3V0czsgaSsrKSB7CisJbm91dHB1dHMgPSBjZmctPmxpbmVfb3V0czsKKwlpZiAoc3BlYy0+bXVsdGlfaW9zID4gMCkKKwkJbm91dHB1dHMgKz0gc3BlYy0+bXVsdGlfaW9zOworCisJZm9yIChpID0gMDsgaSA8IG5vdXRwdXRzOyBpKyspIHsKIAkJbmlkID0gc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV07CiAJCWlmICghbmlkKQogCQkJY29udGludWU7Ci0JCW1peCA9IGFsYzY2Ml9kYWNfdG9fbWl4KGNvZGVjLCBjZmctPmxpbmVfb3V0X3BpbnNbaV0sIG5pZCk7CisJCWlmIChpID49IGNmZy0+bGluZV9vdXRzKQorCQkJcGluID0gc3BlYy0+bXVsdGlfaW9baSAtIDFdLnBpbjsKKwkJZWxzZQorCQkJcGluID0gY2ZnLT5saW5lX291dF9waW5zW2ldOworCQltaXggPSBhbGNfYXV0b19kYWNfdG9fbWl4KGNvZGVjLCBwaW4sIG5pZCk7CiAJCWlmICghbWl4KQogCQkJY29udGludWU7CiAJCWlmICghcGZ4ICYmIGkgPT0gMikgewpAQCAtMTkyNzYsNyArMTkwODIsNyBAQAogCiAJaWYgKCFwaW4pCiAJCXJldHVybiAwOwotCW5pZCA9IGFsYzY2Ml9sb29rX2Zvcl9kYWMoY29kZWMsIHBpbik7CisJbmlkID0gYWxjX2F1dG9fbG9va19mb3JfZGFjKGNvZGVjLCBwaW4pOwogCWlmICghbmlkKSB7CiAJCS8qIHRoZSBjb3JyZXNwb25kaW5nIERBQyBpcyBhbHJlYWR5IG9jY3VwaWVkICovCiAJCWlmICghKGdldF93Y2Fwcyhjb2RlYywgcGluKSAmIEFDX1dDQVBfT1VUX0FNUCkpCkBAIC0xOTI4Niw3ICsxOTA5Miw3IEBACiAJCQkJICAgSERBX0NPTVBPU0VfQU1QX1ZBTChwaW4sIDMsIDAsIEhEQV9PVVRQVVQpKTsKIAl9CiAKLQltaXggPSBhbGM2NjJfZGFjX3RvX21peChjb2RlYywgcGluLCBuaWQpOworCW1peCA9IGFsY19hdXRvX2RhY190b19taXgoY29kZWMsIHBpbiwgbmlkKTsKIAlpZiAoIW1peCkKIAkJcmV0dXJuIDA7CiAJZXJyID0gYWxjNjYyX2FkZF92b2xfY3RsKHNwZWMsIHBmeCwgbmlkLCAzKTsKQEAgLTE5MzEwLDE0ICsxOTExNiwyMSBAQAogCWhkYV9uaWRfdCBzcmNzW0hEQV9NQVhfQ09OTkVDVElPTlNdOwogCiAJYWxjX3NldF9waW5fb3V0cHV0KGNvZGVjLCBuaWQsIHBpbl90eXBlKTsKLQkvKiBuZWVkIHRoZSBtYW51YWwgY29ubmVjdGlvbj8gKi8KIAludW0gPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgbmlkLCBzcmNzLCBBUlJBWV9TSVpFKHNyY3MpKTsKLQlpZiAobnVtIDw9IDEpCi0JCXJldHVybjsKIAlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKLQkJaWYgKGFsYzY2Ml9taXhfdG9fZGFjKHNyY3NbaV0pICE9IGRhYykKKwkJaWYgKGFsY19hdXRvX21peF90b19kYWMoY29kZWMsIHNyY3NbaV0pICE9IGRhYykKIAkJCWNvbnRpbnVlOwotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCBpKTsKKwkJLyogbmVlZCB0aGUgbWFudWFsIGNvbm5lY3Rpb24/ICovCisJCWlmIChudW0gPiAxKQorCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAorCQkJCQkgICAgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIGkpOworCQkvKiB1bm11dGUgbWl4ZXIgd2lkZ2V0IGlucHV0cyAqLworCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBzcmNzW2ldLCAwLAorCQkJCSAgICBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAorCQkJCSAgICBBTVBfSU5fVU5NVVRFKDApKTsKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgc3Jjc1tpXSwgMCwKKwkJCQkgICAgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKKwkJCQkgICAgQU1QX0lOX1VOTVVURSgxKSk7CiAJCXJldHVybjsKIAl9CiB9CkBAIC0xOTM3NCwxMSArMTkxODcsMTY0IEBACiAKICNkZWZpbmUgYWxjNjYyX2F1dG9faW5pdF9pbnB1dF9zcmMJYWxjODgyX2F1dG9faW5pdF9pbnB1dF9zcmMKIAorLyoKKyAqIG11bHRpLWlvIGhlbHBlcgorICovCitzdGF0aWMgaW50IGFsY19hdXRvX2ZpbGxfbXVsdGlfaW9zKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCSAgIHVuc2lnbmVkIGludCBsb2NhdGlvbikKK3sKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcgPSAmc3BlYy0+YXV0b2NmZzsKKwlpbnQgdHlwZSwgaSwgbnVtX3BpbnMgPSAwOworCisJZm9yICh0eXBlID0gQVVUT19QSU5fTElORV9JTjsgdHlwZSA+PSBBVVRPX1BJTl9NSUM7IHR5cGUtLSkgeworCQlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5udW1faW5wdXRzOyBpKyspIHsKKwkJCWhkYV9uaWRfdCBuaWQgPSBjZmctPmlucHV0c1tpXS5waW47CisJCQloZGFfbmlkX3QgZGFjOworCQkJdW5zaWduZWQgaW50IGRlZmNmZywgY2FwczsKKwkJCWlmIChjZmctPmlucHV0c1tpXS50eXBlICE9IHR5cGUpCisJCQkJY29udGludWU7CisJCQlkZWZjZmcgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIG5pZCk7CisJCQlpZiAoZ2V0X2RlZmNmZ19jb25uZWN0KGRlZmNmZykgIT0gQUNfSkFDS19QT1JUX0NPTVBMRVgpCisJCQkJY29udGludWU7CisJCQlpZiAobG9jYXRpb24gJiYgZ2V0X2RlZmNmZ19sb2NhdGlvbihkZWZjZmcpICE9IGxvY2F0aW9uKQorCQkJCWNvbnRpbnVlOworCQkJY2FwcyA9IHNuZF9oZGFfcXVlcnlfcGluX2NhcHMoY29kZWMsIG5pZCk7CisJCQlpZiAoIShjYXBzICYgQUNfUElOQ0FQX09VVCkpCisJCQkJY29udGludWU7CisJCQlkYWMgPSBhbGNfYXV0b19sb29rX2Zvcl9kYWMoY29kZWMsIG5pZCk7CisJCQlpZiAoIWRhYykKKwkJCQljb250aW51ZTsKKwkJCXNwZWMtPm11bHRpX2lvW251bV9waW5zXS5waW4gPSBuaWQ7CisJCQlzcGVjLT5tdWx0aV9pb1tudW1fcGluc10uZGFjID0gZGFjOworCQkJbnVtX3BpbnMrKzsKKwkJCXNwZWMtPnByaXZhdGVfZGFjX25pZHNbc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MrK10gPSBkYWM7CisJCX0KKwl9CisJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSAxOworCWlmIChudW1fcGlucyA8IDIpCisJCXJldHVybiAwOworCXJldHVybiBudW1fcGluczsKK30KKworc3RhdGljIGludCBhbGNfYXV0b19jaF9tb2RlX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKKwl1aW5mby0+Y291bnQgPSAxOworCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gc3BlYy0+bXVsdGlfaW9zICsgMTsKKwlpZiAodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+IHNwZWMtPm11bHRpX2lvcykKKwkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IHNwZWMtPm11bHRpX2lvczsKKwlzcHJpbnRmKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsICIlZGNoIiwKKwkJKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gKyAxKSAqIDIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFsY19hdXRvX2NoX21vZGVfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSAoc3BlYy0+ZXh0X2NoYW5uZWxfY291bnQgLSAxKSAvIDI7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWxjX3NldF9tdWx0aV9pbyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IGlkeCwgYm9vbCBvdXRwdXQpCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaGRhX25pZF90IG5pZCA9IHNwZWMtPm11bHRpX2lvW2lkeF0ucGluOworCisJaWYgKCFzcGVjLT5tdWx0aV9pb1tpZHhdLmN0bF9pbikKKwkJc3BlYy0+bXVsdGlfaW9baWR4XS5jdGxfaW4gPQorCQkJc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCisJCQkJCSAgIEFDX1ZFUkJfR0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMCk7CisJaWYgKG91dHB1dCkgeworCQlzbmRfaGRhX2NvZGVjX3VwZGF0ZV9jYWNoZShjb2RlYywgbmlkLCAwLAorCQkJCQkgICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCisJCQkJCSAgIFBJTl9PVVQpOworCQlpZiAoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9PVVRfQU1QKQorCQkJc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCBuaWQsIEhEQV9PVVRQVVQsIDAsCisJCQkJCQkgSERBX0FNUF9NVVRFLCAwKTsKKwkJYWxjX2F1dG9fc2VsZWN0X2RhYyhjb2RlYywgbmlkLCBzcGVjLT5tdWx0aV9pb1tpZHhdLmRhYyk7CisJfSBlbHNlIHsKKwkJaWYgKGdldF93Y2Fwcyhjb2RlYywgbmlkKSAmIEFDX1dDQVBfT1VUX0FNUCkKKwkJCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgbmlkLCBIREFfT1VUUFVULCAwLAorCQkJCQkJIEhEQV9BTVBfTVVURSwgSERBX0FNUF9NVVRFKTsKKwkJc25kX2hkYV9jb2RlY191cGRhdGVfY2FjaGUoY29kZWMsIG5pZCwgMCwKKwkJCQkJICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAorCQkJCQkgICBzcGVjLT5tdWx0aV9pb1tpZHhdLmN0bF9pbik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFsY19hdXRvX2NoX21vZGVfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWludCBpLCBjaDsKKworCWNoID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKKwlpZiAoY2ggPCAwIHx8IGNoID4gc3BlYy0+bXVsdGlfaW9zKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoY2ggPT0gKHNwZWMtPmV4dF9jaGFubmVsX2NvdW50IC0gMSkgLyAyKQorCQlyZXR1cm4gMDsKKwlzcGVjLT5leHRfY2hhbm5lbF9jb3VudCA9IChjaCArIDEpICogMjsKKwlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bXVsdGlfaW9zOyBpKyspCisJCWFsY19zZXRfbXVsdGlfaW8oY29kZWMsIGksIGkgPCBjaCk7CisJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+ZXh0X2NoYW5uZWxfY291bnQ7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGNfYXV0b19jaGFubmVsX21vZGVfZW51bSA9IHsKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkubmFtZSA9ICJDaGFubmVsIE1vZGUiLAorCS5pbmZvID0gYWxjX2F1dG9fY2hfbW9kZV9pbmZvLAorCS5nZXQgPSBhbGNfYXV0b19jaF9tb2RlX2dldCwKKwkucHV0ID0gYWxjX2F1dG9fY2hfbW9kZV9wdXQsCit9OworCitzdGF0aWMgaW50IGFsY19hdXRvX2FkZF9tdWx0aV9jaGFubmVsX21vZGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnID0gJnNwZWMtPmF1dG9jZmc7CisJdW5zaWduZWQgaW50IGxvY2F0aW9uLCBkZWZjZmc7CisJaW50IG51bV9waW5zOworCisJaWYgKGNmZy0+bGluZV9vdXRzICE9IDEgfHwKKwkgICAgY2ZnLT5saW5lX291dF90eXBlICE9IEFVVE9fUElOX0xJTkVfT1VUKQorCQlyZXR1cm4gMDsKKworCWRlZmNmZyA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgY2ZnLT5saW5lX291dF9waW5zWzBdKTsKKwlsb2NhdGlvbiA9IGdldF9kZWZjZmdfbG9jYXRpb24oZGVmY2ZnKTsKKworCW51bV9waW5zID0gYWxjX2F1dG9fZmlsbF9tdWx0aV9pb3MoY29kZWMsIGxvY2F0aW9uKTsKKwlpZiAobnVtX3BpbnMgPiAwKSB7CisJCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprbmV3OworCisJCWtuZXcgPSBhbGNfa2NvbnRyb2xfbmV3KHNwZWMpOworCQlpZiAoIWtuZXcpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJKmtuZXcgPSBhbGNfYXV0b19jaGFubmVsX21vZGVfZW51bTsKKwkJa25ldy0+bmFtZSA9IGtzdHJkdXAoIkNoYW5uZWwgTW9kZSIsIEdGUF9LRVJORUwpOworCQlpZiAoIWtuZXctPm5hbWUpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlzcGVjLT5tdWx0aV9pb3MgPSBudW1fcGluczsKKwkJc3BlYy0+ZXh0X2NoYW5uZWxfY291bnQgPSAyOworCQlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IG51bV9waW5zICsgMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgYWxjNjYyX3BhcnNlX2F1dG9fY29uZmlnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCWludCBlcnI7Ci0Jc3RhdGljIGhkYV9uaWRfdCBhbGM2NjJfaWdub3JlW10gPSB7IDB4MWQsIDAgfTsKKwlzdGF0aWMgY29uc3QgaGRhX25pZF90IGFsYzY2Ml9pZ25vcmVbXSA9IHsgMHgxZCwgMCB9OwogCiAJZXJyID0gc25kX2hkYV9wYXJzZV9waW5fZGVmX2NvbmZpZyhjb2RlYywgJnNwZWMtPmF1dG9jZmcsCiAJCQkJCSAgIGFsYzY2Ml9pZ25vcmUpOwpAQCAtMTkzOTAsNiArMTkzNTYsOSBAQAogCWVyciA9IGFsYzY2Ml9hdXRvX2ZpbGxfZGFjX25pZHMoY29kZWMsICZzcGVjLT5hdXRvY2ZnKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKKwllcnIgPSBhbGNfYXV0b19hZGRfbXVsdGlfY2hhbm5lbF9tb2RlKGNvZGVjKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAllcnIgPSBhbGM2NjJfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoY29kZWMsICZzcGVjLT5hdXRvY2ZnKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKQEAgLTE5NDIwLDE0ICsxOTM4OSw2IEBACiAJc3BlYy0+bnVtX211eF9kZWZzID0gMTsKIAlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCi0JYWRkX3ZlcmIoc3BlYywgYWxjNjYyX2luaXRfdmVyYnMpOwotCWlmIChjb2RlYy0+dmVuZG9yX2lkID09IDB4MTBlYzAyNzIgfHwgY29kZWMtPnZlbmRvcl9pZCA9PSAweDEwZWMwNjYzIHx8Ci0JICAgIGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDY2NSB8fCBjb2RlYy0+dmVuZG9yX2lkID09IDB4MTBlYzA2NzApCi0JCWFkZF92ZXJiKHNwZWMsIGFsYzY2M19pbml0X3ZlcmJzKTsKLQotCWlmIChjb2RlYy0+dmVuZG9yX2lkID09IDB4MTBlYzAyNzIpCi0JCWFkZF92ZXJiKHNwZWMsIGFsYzI3Ml9pbml0X3ZlcmJzKTsKLQogCWVyciA9IGFsY19hdXRvX2FkZF9taWNfYm9vc3QoY29kZWMpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtMTk1MDgsNyArMTk0NjksNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjNjYyX2ZpeHVwX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzY2Ml9maXh1cF90YmxbXSA9IHsKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMzA4LCAiQWNlciBBc3BpcmUgODk0MkciLCBBTEM2NjJfRklYVVBfQVNQSVJFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMzFjLCAiR2F0ZXdheSBOVjc5IiwgQUxDNjYyX0ZJWFVQX1NLVV9JR05PUkUpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAzOGIsICJBY2VyIEFzcGlyZSA4OTQzRyIsIEFMQzY2Ml9GSVhVUF9BU1BJUkUpLApAQCAtMTk2MjYsNiArMTk1ODcsNyBAQAogCWNvZGVjLT5wYXRjaF9vcHMgPSBhbGNfcGF0Y2hfb3BzOwogCWlmIChib2FyZF9jb25maWcgPT0gQUxDNjYyX0FVVE8pCiAJCXNwZWMtPmluaXRfaG9vayA9IGFsYzY2Ml9hdXRvX2luaXQ7CisJc3BlYy0+c2h1dHVwID0gYWxjX2VhcGRfc2h1dHVwOwogCiAJYWxjX2luaXRfamFja3MoY29kZWMpOwogCkBAIC0xOTY1NCw2ICsxOTYxNiwxNSBAQAogCXJldHVybiBwYXRjaF9hbGM4ODIoY29kZWMpOwogfQogCitzdGF0aWMgaW50IHBhdGNoX2FsYzg5OShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlpZiAoKGFsY19yZWFkX2NvZWZfaWR4KGNvZGVjLCAwKSAmIDB4MjAwMCkgIT0gMHgyMDAwKSB7CisJCWtmcmVlKGNvZGVjLT5jaGlwX25hbWUpOworCQljb2RlYy0+Y2hpcF9uYW1lID0ga3N0cmR1cCgiQUxDODk4IiwgR0ZQX0tFUk5FTCk7CisJfQorCXJldHVybiBwYXRjaF9hbGM4ODIoY29kZWMpOworfQorCiAvKgogICogQUxDNjgwIHN1cHBvcnQKICAqLwpAQCAtMTk2NjEsMTIgKzE5NjMyLDEyIEBACiAjZGVmaW5lIEFMQzY4MF9ESUdPVVRfTklECUFMQzg4MF9ESUdPVVRfTklECiAjZGVmaW5lIGFsYzY4MF9tb2RlcwkJYWxjMjYwX21vZGVzCiAKLXN0YXRpYyBoZGFfbmlkX3QgYWxjNjgwX2RhY19uaWRzWzNdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBhbGM2ODBfZGFjX25pZHNbM10gPSB7CiAJLyogTG91dDEsIExvdXQyLCBocCAqLwogCTB4MDIsIDB4MDMsIDB4MDQKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3QgYWxjNjgwX2FkY19uaWRzWzNdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBhbGM2ODBfYWRjX25pZHNbM10gPSB7CiAJLyogQURDMC0yICovCiAJLyogRE1JQywgTUlDLCBMaW5lLWluKi8KIAkweDA3LCAweDA4LCAweDA5CkBAIC0xOTY4Niw4ICsxOTY1Nyw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5udW1faW5wdXRzOyBpKyspIHsKIAkJbmlkID0gY2ZnLT5pbnB1dHNbaV0ucGluOwotCQlpZiAoIShzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBuaWQpICYKLQkJICAgICAgQUNfUElOQ0FQX1BSRVNfREVURUNUKSkKKwkJaWYgKCFpc19qYWNrX2RldGVjdGFibGUoY29kZWMsIG5pZCkpCiAJCQljb250aW51ZTsKIAkJaWYgKHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIG5pZCkpIHsKIAkJCWlmIChjZmctPmlucHV0c1tpXS50eXBlIDwgdHlwZV9mb3VuZCkgewpAQCAtMTk3MzQsNyArMTk3MDQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIGFsYzY4MF9wY21fYW5hbG9nX2F1dG9fY2FwdHVyZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gYWxjNjgwX3BjbV9hbmFsb2dfYXV0b19jYXB0dXJlID0gewogCS5zdWJzdHJlYW1zID0gMSwgLyogY2FuIGJlIG92ZXJyaWRkZW4gKi8KIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gMiwKQEAgLTE5NzQ1LDcgKzE5NzE1LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzY4MF9iYXNlX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjNjgwX2Jhc2VfbWl4ZXJbXSA9IHsKIAkvKiBvdXRwdXQgbWl4ZXIgY29udHJvbCAqLwogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MiwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgxNCwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTE5NzU3LDcgKzE5NzI3LDcgQEAKIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2JpbmRfY3RscyBhbGM2ODBfYmluZF9jYXBfdm9sID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfYmluZF9jdGxzIGFsYzY4MF9iaW5kX2NhcF92b2wgPSB7CiAJLm9wcyA9ICZzbmRfaGRhX2JpbmRfdm9sLAogCS52YWx1ZXMgPSB7CiAJCUhEQV9DT01QT1NFX0FNUF9WQUwoMHgwNywgMywgMCwgSERBX0lOUFVUKSwKQEAgLTE5NzY3LDcgKzE5NzM3LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfYmluZF9jdGxzIGFsYzY4MF9iaW5kX2NhcF9zd2l0Y2ggPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9iaW5kX2N0bHMgYWxjNjgwX2JpbmRfY2FwX3N3aXRjaCA9IHsKIAkub3BzID0gJnNuZF9oZGFfYmluZF9zdywKIAkudmFsdWVzID0gewogCQlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MDcsIDMsIDAsIEhEQV9JTlBVVCksCkBAIC0xOTc3Nyw3ICsxOTc0Nyw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM2ODBfbWFzdGVyX2NhcHR1cmVfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM2ODBfbWFzdGVyX2NhcHR1cmVfbWl4ZXJbXSA9IHsKIAlIREFfQklORF9WT0woIkNhcHR1cmUgVm9sdW1lIiwgJmFsYzY4MF9iaW5kX2NhcF92b2wpLAogCUhEQV9CSU5EX1NXKCJDYXB0dXJlIFN3aXRjaCIsICZhbGM2ODBfYmluZF9jYXBfc3dpdGNoKSwKIAl7IH0gLyogZW5kICovCkBAIC0xOTc4Niw3ICsxOTc1Niw3IEBACiAvKgogICogZ2VuZXJpYyBpbml0aWFsaXphdGlvbiBvZiBBREMsIGlucHV0IG1peGVycyBhbmQgb3V0cHV0IG1peGVycwogICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzY4MF9pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzY4MF9pbml0X3ZlcmJzW10gPSB7CiAJezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKIAl7MHgwMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAogCXsweDA0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCkBAIC0xOTgyNCwyMCArMTk3OTQsMjIgQEAKIAlzcGVjLT5hdXRvY2ZnLmlucHV0c1swXS50eXBlID0gQVVUT19QSU5fTUlDOwogCXNwZWMtPmF1dG9jZmcuaW5wdXRzWzFdLnBpbiA9IDB4MTk7CiAJc3BlYy0+YXV0b2NmZy5pbnB1dHNbMV0udHlwZSA9IEFVVE9fUElOX0xJTkVfSU47CisJc3BlYy0+YXV0b211dGUgPSAxOworCXNwZWMtPmF1dG9tdXRlX21vZGUgPSBBTENfQVVUT01VVEVfQU1QOwogfQogCiBzdGF0aWMgdm9pZCBhbGM2ODBfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJCSAgIHVuc2lnbmVkIGludCByZXMpCiB7CiAJaWYgKChyZXMgPj4gMjYpID09IEFMQzg4MF9IUF9FVkVOVCkKLQkJYWxjX2F1dG9tdXRlX2FtcChjb2RlYyk7CisJCWFsY19ocF9hdXRvbXV0ZShjb2RlYyk7CiAJaWYgKChyZXMgPj4gMjYpID09IEFMQzg4MF9NSUNfRVZFTlQpCiAJCWFsYzY4MF9yZWNfYXV0b3N3aXRjaChjb2RlYyk7CiB9CiAKIHN0YXRpYyB2b2lkIGFsYzY4MF9pbml0aG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQlhbGNfYXV0b211dGVfYW1wKGNvZGVjKTsKKwlhbGNfaHBfYXV0b211dGUoY29kZWMpOwogCWFsYzY4MF9yZWNfYXV0b3N3aXRjaChjb2RlYyk7CiB9CiAKQEAgLTE5ODc0LDcgKzE5ODQ2LDcgQEAKIAogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7Ci0JCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzW3NwZWMtPm11bHRpb3V0Lm51bV9kYWNzKytdID0gZGFjOworCQlzcGVjLT5wcml2YXRlX2RhY19uaWRzW3NwZWMtPm11bHRpb3V0Lm51bV9kYWNzKytdID0gZGFjOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTk5NjAsNyArMTk5MzIsNyBAQAogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCWludCBlcnI7Ci0Jc3RhdGljIGhkYV9uaWRfdCBhbGM2ODBfaWdub3JlW10gPSB7IDAgfTsKKwlzdGF0aWMgY29uc3QgaGRhX25pZF90IGFsYzY4MF9pZ25vcmVbXSA9IHsgMCB9OwogCiAJZXJyID0gc25kX2hkYV9wYXJzZV9waW5fZGVmX2NvbmZpZyhjb2RlYywgJnNwZWMtPmF1dG9jZmcsCiAJCQkJCSAgIGFsYzY4MF9pZ25vcmUpOwpAQCAtMjAwMTgsMTIgKzE5OTkwLDEyIEBACiAJW0FMQzY4MF9BVVRPXQkJPSAiYXV0byIsCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjNjgwX2NmZ190YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGM2ODBfY2ZnX3RibFtdID0gewogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEyZjMsICJBU1VTIE5YOTAiLCBBTEM2ODBfQkFTRSksCiAJe30KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYWxjX2NvbmZpZ19wcmVzZXQgYWxjNjgwX3ByZXNldHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWxjX2NvbmZpZ19wcmVzZXQgYWxjNjgwX3ByZXNldHNbXSA9IHsKIAlbQUxDNjgwX0JBU0VdID0gewogCQkubWl4ZXJzID0geyBhbGM2ODBfYmFzZV9taXhlciB9LAogCQkuY2FwX21peGVyID0gIGFsYzY4MF9tYXN0ZXJfY2FwdHVyZV9taXhlciwKQEAgLTIwMTA0LDcgKzIwMDc2LDggQEAKIC8qCiAgKiBwYXRjaCBlbnRyaWVzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX2NvZGVjX3ByZXNldCBzbmRfaGRhX3ByZXNldF9yZWFsdGVrW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9jb2RlY19wcmVzZXQgc25kX2hkYV9wcmVzZXRfcmVhbHRla1tdID0geworCXsgLmlkID0gMHgxMGVjMDIyMSwgLm5hbWUgPSAiQUxDMjIxIiwgLnBhdGNoID0gcGF0Y2hfYWxjMjY5IH0sCiAJeyAuaWQgPSAweDEwZWMwMjYwLCAubmFtZSA9ICJBTEMyNjAiLCAucGF0Y2ggPSBwYXRjaF9hbGMyNjAgfSwKIAl7IC5pZCA9IDB4MTBlYzAyNjIsIC5uYW1lID0gIkFMQzI2MiIsIC5wYXRjaCA9IHBhdGNoX2FsYzI2MiB9LAogCXsgLmlkID0gMHgxMGVjMDI2NywgLm5hbWUgPSAiQUxDMjY3IiwgLnBhdGNoID0gcGF0Y2hfYWxjMjY4IH0sCkBAIC0yMDExMyw2ICsyMDA4Niw3IEBACiAJeyAuaWQgPSAweDEwZWMwMjcwLCAubmFtZSA9ICJBTEMyNzAiLCAucGF0Y2ggPSBwYXRjaF9hbGMyNjkgfSwKIAl7IC5pZCA9IDB4MTBlYzAyNzIsIC5uYW1lID0gIkFMQzI3MiIsIC5wYXRjaCA9IHBhdGNoX2FsYzY2MiB9LAogCXsgLmlkID0gMHgxMGVjMDI3NSwgLm5hbWUgPSAiQUxDMjc1IiwgLnBhdGNoID0gcGF0Y2hfYWxjMjY5IH0sCisJeyAuaWQgPSAweDEwZWMwMjc2LCAubmFtZSA9ICJBTEMyNzYiLCAucGF0Y2ggPSBwYXRjaF9hbGMyNjkgfSwKIAl7IC5pZCA9IDB4MTBlYzA4NjEsIC5yZXYgPSAweDEwMDM0MCwgLm5hbWUgPSAiQUxDNjYwIiwKIAkgIC5wYXRjaCA9IHBhdGNoX2FsYzg2MSB9LAogCXsgLmlkID0gMHgxMGVjMDY2MCwgLm5hbWUgPSAiQUxDNjYwLVZEIiwgLnBhdGNoID0gcGF0Y2hfYWxjODYxdmQgfSwKQEAgLTIwMTQwLDYgKzIwMTE0LDcgQEAKIAl7IC5pZCA9IDB4MTBlYzA4ODgsIC5uYW1lID0gIkFMQzg4OCIsIC5wYXRjaCA9IHBhdGNoX2FsYzg4OCB9LAogCXsgLmlkID0gMHgxMGVjMDg4OSwgLm5hbWUgPSAiQUxDODg5IiwgLnBhdGNoID0gcGF0Y2hfYWxjODgyIH0sCiAJeyAuaWQgPSAweDEwZWMwODkyLCAubmFtZSA9ICJBTEM4OTIiLCAucGF0Y2ggPSBwYXRjaF9hbGM2NjIgfSwKKwl7IC5pZCA9IDB4MTBlYzA4OTksIC5uYW1lID0gIkFMQzg5OSIsIC5wYXRjaCA9IHBhdGNoX2FsYzg5OSB9LAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2kzMDU0LmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpMzA1NC5jCmluZGV4IGY0MTllZTguLjJmNTVmMzIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2kzMDU0LmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaTMwNTQuYwpAQCAtMTMwLDcgKzEzMCw3IEBACiB9CiAJCQogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc2kzMDU0X21vZGVtX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc2kzMDU0X21vZGVtX21peGVyW10gPSB7CiAJU0kzMDU0X0tDT05UUk9MKCJPZmYtaG9vayBTd2l0Y2giLCBTSTMwNTRfR1BJT19DT05UUk9MLCBTSTMwNTRfR1BJT19PSCksCiAJU0kzMDU0X0tDT05UUk9MKCJDYWxsZXIgSUQgU3dpdGNoIiwgU0kzMDU0X0dQSU9fQ09OVFJPTCwgU0kzMDU0X0dQSU9fQ0lEKSwKIAl7fQpAQCAtMTgxLDcgKzE4MSw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBzaTMwNTRfcGNtID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBzaTMwNTRfcGNtID0gewogCS5zdWJzdHJlYW1zID0gMSwKIAkuY2hhbm5lbHNfbWluID0gMSwKIAkuY2hhbm5lbHNfbWF4ID0gMSwKQEAgLTIwMCwxMiArMjAwLDEzIEBACiB7CiAJc3RydWN0IHNpMzA1NF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3RydWN0IGhkYV9wY20gKmluZm8gPSAmc3BlYy0+cGNtOwotCXNpMzA1NF9wY20ubmlkID0gY29kZWMtPm1mZzsKIAljb2RlYy0+bnVtX3BjbXMgPSAxOwogCWNvZGVjLT5wY21faW5mbyA9IGluZm87CiAJaW5mby0+bmFtZSA9ICJTaTMwNTQgTW9kZW0iOwogCWluZm8tPnN0cmVhbVtTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXSA9IHNpMzA1NF9wY207CiAJaW5mby0+c3RyZWFtW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0gID0gc2kzMDU0X3BjbTsKKwlpbmZvLT5zdHJlYW1bU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10ubmlkID0gY29kZWMtPm1mZzsKKwlpbmZvLT5zdHJlYW1bU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS5uaWQgPSBjb2RlYy0+bWZnOwogCWluZm8tPnBjbV90eXBlID0gSERBX1BDTV9UWVBFX01PREVNOwogCXJldHVybiAwOwogfQpAQCAtMjYzLDcgKzI2NCw3IEBACiAvKgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2NvZGVjX29wcyBzaTMwNTRfcGF0Y2hfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfY29kZWNfb3BzIHNpMzA1NF9wYXRjaF9vcHMgPSB7CiAJLmJ1aWxkX2NvbnRyb2xzID0gc2kzMDU0X2J1aWxkX2NvbnRyb2xzLAogCS5idWlsZF9wY21zID0gc2kzMDU0X2J1aWxkX3BjbXMsCiAJLmluaXQgPSBzaTMwNTRfaW5pdCwKQEAgLTI4Myw3ICsyODQsNyBAQAogLyoKICAqIHBhdGNoIGVudHJpZXMKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfY29kZWNfcHJlc2V0IHNuZF9oZGFfcHJlc2V0X3NpMzA1NFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfY29kZWNfcHJlc2V0IHNuZF9oZGFfcHJlc2V0X3NpMzA1NFtdID0gewogIAl7IC5pZCA9IDB4MTYzYzMwNTUsIC5uYW1lID0gIlNpMzA1NCIsIC5wYXRjaCA9IHBhdGNoX3NpMzA1NCB9LAogIAl7IC5pZCA9IDB4MTYzYzMxNTUsIC5uYW1lID0gIlNpMzA1NCIsIC5wYXRjaCA9IHBhdGNoX3NpMzA1NCB9LAogIAl7IC5pZCA9IDB4MTFjMTMwMjYsIC5uYW1lID0gIlNpMzA1NCIsIC5wYXRjaCA9IHBhdGNoX3NpMzA1NCB9LApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCmluZGV4IDk0ZDE5YzAuLjdmODFjYzIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKQEAgLTIxNywxNSArMjE3LDE1IEBACiAJdW5zaWduZWQgaW50IHN0cmVhbV9kZWxheTsKIAogCS8qIGFuYWxvZyBsb29wYmFjayAqLwotCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICphbG9vcGJhY2tfY3RsOworCWNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICphbG9vcGJhY2tfY3RsOwogCXVuc2lnbmVkIGNoYXIgYWxvb3BiYWNrX21hc2s7CiAJdW5zaWduZWQgY2hhciBhbG9vcGJhY2tfc2hpZnQ7CiAKIAkvKiBwb3dlciBtYW5hZ2VtZW50ICovCiAJdW5zaWduZWQgaW50IG51bV9wd3JzOwotCXVuc2lnbmVkIGludCAqcHdyX21hcHBpbmc7Ci0JaGRhX25pZF90ICpwd3JfbmlkczsKLQloZGFfbmlkX3QgKmRhY19saXN0OworCWNvbnN0IHVuc2lnbmVkIGludCAqcHdyX21hcHBpbmc7CisJY29uc3QgaGRhX25pZF90ICpwd3JfbmlkczsKKwljb25zdCBoZGFfbmlkX3QgKmRhY19saXN0OwogCiAJLyogZXZlbnRzICovCiAJc3RydWN0IHNuZF9hcnJheSBldmVudHM7CkBAIC0yNDEsMjAgKzI0MSwyMCBAQAogCWludCB2b2x1bWVfb2Zmc2V0OwogCiAJLyogY2FwdHVyZSAqLwotCWhkYV9uaWRfdCAqYWRjX25pZHM7CisJY29uc3QgaGRhX25pZF90ICphZGNfbmlkczsKIAl1bnNpZ25lZCBpbnQgbnVtX2FkY3M7Ci0JaGRhX25pZF90ICptdXhfbmlkczsKKwljb25zdCBoZGFfbmlkX3QgKm11eF9uaWRzOwogCXVuc2lnbmVkIGludCBudW1fbXV4ZXM7Ci0JaGRhX25pZF90ICpkbWljX25pZHM7CisJY29uc3QgaGRhX25pZF90ICpkbWljX25pZHM7CiAJdW5zaWduZWQgaW50IG51bV9kbWljczsKLQloZGFfbmlkX3QgKmRtdXhfbmlkczsKKwljb25zdCBoZGFfbmlkX3QgKmRtdXhfbmlkczsKIAl1bnNpZ25lZCBpbnQgbnVtX2RtdXhlczsKLQloZGFfbmlkX3QgKnNtdXhfbmlkczsKKwljb25zdCBoZGFfbmlkX3QgKnNtdXhfbmlkczsKIAl1bnNpZ25lZCBpbnQgbnVtX3NtdXhlczsKIAl1bnNpZ25lZCBpbnQgbnVtX2FuYWxvZ19tdXhlczsKIAotCXVuc2lnbmVkIGxvbmcgKmNhcHZvbHM7IC8qIGFtcC12b2x1bWUgYXR0cjogSERBX0NPTVBPU0VfQU1QX1ZBTCgpICovCi0JdW5zaWduZWQgbG9uZyAqY2Fwc3dzOyAvKiBhbXAtbXV0ZSBhdHRyOiBIREFfQ09NUE9TRV9BTVBfVkFMKCkgKi8KKwljb25zdCB1bnNpZ25lZCBsb25nICpjYXB2b2xzOyAvKiBhbXAtdm9sdW1lIGF0dHI6IEhEQV9DT01QT1NFX0FNUF9WQUwoKSAqLworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmNhcHN3czsgLyogYW1wLW11dGUgYXR0cjogSERBX0NPTVBPU0VfQU1QX1ZBTCgpICovCiAJdW5zaWduZWQgaW50IG51bV9jYXBzOyAvKiBudW1iZXIgb2YgY2FwdHVyZSB2b2x1bWUvc3dpdGNoIGVsZW1lbnRzICovCiAKIAlzdHJ1Y3Qgc2lnbWF0ZWxfbWljX3JvdXRlIGV4dF9taWM7CkBAIC0yNjksMTIgKzI2OSwxMiBAQAogCWhkYV9uaWRfdCBkaWdiZWVwX25pZDsKIAogCS8qIHBpbiB3aWRnZXRzICovCi0JaGRhX25pZF90ICpwaW5fbmlkczsKKwljb25zdCBoZGFfbmlkX3QgKnBpbl9uaWRzOwogCXVuc2lnbmVkIGludCBudW1fcGluczsKIAogCS8qIGNvZGVjIHNwZWNpZmljIHN0dWZmICovCi0Jc3RydWN0IGhkYV92ZXJiICppbml0OwotCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICptaXhlcjsKKwljb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgKmluaXQ7CisJY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKm1peGVyOwogCiAJLyogY2FwdHVyZSBzb3VyY2UgKi8KIAlzdHJ1Y3QgaGRhX2lucHV0X211eCAqZGlucHV0X211eDsKQEAgLTMxNyw1MiArMzE3LDUyIEBACiAJaGRhX25pZF90IGF1dG9fZG1pY19uaWRzW01BWF9ETUlDU19OVU1dOwogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBzdGFjOTIwMF9hZGNfbmlkc1sxXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3Qgc3RhYzkyMDBfYWRjX25pZHNbMV0gPSB7CiAgICAgICAgIDB4MDMsCiB9OwogCi1zdGF0aWMgaGRhX25pZF90IHN0YWM5MjAwX211eF9uaWRzWzFdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBzdGFjOTIwMF9tdXhfbmlkc1sxXSA9IHsKICAgICAgICAgMHgwYywKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyMDBfZGFjX25pZHNbMV0gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IHN0YWM5MjAwX2RhY19uaWRzWzFdID0gewogICAgICAgICAweDAyLAogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDczeHhfcHdyX25pZHNbOF0gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IHN0YWM5MmhkNzN4eF9wd3Jfbmlkc1s4XSA9IHsKIAkweDBhLCAweDBiLCAweDBjLCAweGQsIDB4MGUsCiAJMHgwZiwgMHgxMCwgMHgxMQogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDczeHhfc2xhdmVfZGlnX291dHNbMl0gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IHN0YWM5MmhkNzN4eF9zbGF2ZV9kaWdfb3V0c1syXSA9IHsKIAkweDI2LCAwLAogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDczeHhfYWRjX25pZHNbMl0gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IHN0YWM5MmhkNzN4eF9hZGNfbmlkc1syXSA9IHsKIAkweDFhLCAweDFiCiB9OwogCiAjZGVmaW5lIFNUQUM5MkhENzNYWF9OVU1fRE1JQ1MJMgotc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDczeHhfZG1pY19uaWRzW1NUQUM5MkhENzNYWF9OVU1fRE1JQ1MgKyAxXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3Qgc3RhYzkyaGQ3M3h4X2RtaWNfbmlkc1tTVEFDOTJIRDczWFhfTlVNX0RNSUNTICsgMV0gPSB7CiAJMHgxMywgMHgxNCwgMAogfTsKIAogI2RlZmluZSBTVEFDOTJIRDczX0RBQ19DT1VOVCA1CiAKLXN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ3M3h4X211eF9uaWRzWzJdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBzdGFjOTJoZDczeHhfbXV4X25pZHNbMl0gPSB7CiAJMHgyMCwgMHgyMSwKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ3M3h4X2RtdXhfbmlkc1syXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3Qgc3RhYzkyaGQ3M3h4X2RtdXhfbmlkc1syXSA9IHsKIAkweDIwLCAweDIxLAogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDczeHhfc211eF9uaWRzWzJdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBzdGFjOTJoZDczeHhfc211eF9uaWRzWzJdID0gewogCTB4MjIsIDB4MjMsCiB9OwogCiAjZGVmaW5lIFNUQUM5MkhENzNYWF9OVU1fQ0FQUwkyCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzdGFjOTJoZDczeHhfY2Fwdm9sc1tdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgc3RhYzkyaGQ3M3h4X2NhcHZvbHNbXSA9IHsKIAlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MjAsIDMsIDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT01QT1NFX0FNUF9WQUwoMHgyMSwgMywgMCwgSERBX09VVFBVVCksCiB9OwpAQCAtMzcwLDEzNyArMzcwLDE0MSBAQAogCiAjZGVmaW5lIFNUQUM5MkhEODNfREFDX0NPVU5UIDMKIAotc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDgzeHh4X3B3cl9uaWRzWzRdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBzdGFjOTJoZDgzeHh4X3B3cl9uaWRzWzRdID0gewogCTB4YSwgMHhiLCAweGQsIDB4ZSwKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ4M3h4eF9zbGF2ZV9kaWdfb3V0c1syXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3Qgc3RhYzkyaGQ4M3h4eF9zbGF2ZV9kaWdfb3V0c1syXSA9IHsKIAkweDFlLCAwLAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBzdGFjOTJoZDgzeHh4X3B3cl9tYXBwaW5nWzRdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzdGFjOTJoZDgzeHh4X3B3cl9tYXBwaW5nWzRdID0gewogCTB4MDMsIDB4MGMsIDB4MjAsIDB4NDAsCiB9OwogCi1zdGF0aWMgaGRhX25pZF90IHN0YWM5MmhkODN4eHhfZG1pY19uaWRzW10gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IHN0YWM5MmhkODN4eHhfZG1pY19uaWRzW10gPSB7CiAJCTB4MTEsIDB4MjAsCiB9OwogCi1zdGF0aWMgaGRhX25pZF90IHN0YWM5MmhkNzFieHhfcHdyX25pZHNbM10gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IHN0YWM5MmhkNzFieHhfcHdyX25pZHNbM10gPSB7CiAJMHgwYSwgMHgwZCwgMHgwZgogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDcxYnh4X2FkY19uaWRzWzJdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBzdGFjOTJoZDcxYnh4X2FkY19uaWRzWzJdID0gewogCTB4MTIsIDB4MTMsCiB9OwogCi1zdGF0aWMgaGRhX25pZF90IHN0YWM5MmhkNzFieHhfbXV4X25pZHNbMl0gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IHN0YWM5MmhkNzFieHhfbXV4X25pZHNbMl0gPSB7CiAJMHgxYSwgMHgxYgogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDcxYnh4X2RtdXhfbmlkc1syXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3Qgc3RhYzkyaGQ3MWJ4eF9kbXV4X25pZHNbMl0gPSB7CiAJMHgxYywgMHgxZCwKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ3MWJ4eF9zbXV4X25pZHNbMl0gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IHN0YWM5MmhkNzFieHhfc211eF9uaWRzWzJdID0gewogCTB4MjQsIDB4MjUsCiB9OwogCiAjZGVmaW5lIFNUQUM5MkhENzFCWFhfTlVNX0RNSUNTCTIKLXN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ3MWJ4eF9kbWljX25pZHNbU1RBQzkySEQ3MUJYWF9OVU1fRE1JQ1MgKyAxXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3Qgc3RhYzkyaGQ3MWJ4eF9kbWljX25pZHNbU1RBQzkySEQ3MUJYWF9OVU1fRE1JQ1MgKyAxXSA9IHsKIAkweDE4LCAweDE5LCAwCiB9OwogCi1zdGF0aWMgaGRhX25pZF90IHN0YWM5MmhkNzFieHhfc2xhdmVfZGlnX291dHNbMl0gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IHN0YWM5MmhkNzFieHhfZG1pY181cG9ydF9uaWRzW1NUQUM5MkhENzFCWFhfTlVNX0RNSUNTXSA9IHsKKwkweDE4LCAwCit9OworCitzdGF0aWMgY29uc3QgaGRhX25pZF90IHN0YWM5MmhkNzFieHhfc2xhdmVfZGlnX291dHNbMl0gPSB7CiAJMHgyMiwgMAogfTsKIAogI2RlZmluZSBTVEFDOTJIRDcxQlhYX05VTV9DQVBTCQkyCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzdGFjOTJoZDcxYnh4X2NhcHZvbHNbXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIHN0YWM5MmhkNzFieHhfY2Fwdm9sc1tdID0gewogCUhEQV9DT01QT1NFX0FNUF9WQUwoMHgxYywgMywgMCwgSERBX09VVFBVVCksCiAJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDFkLCAzLCAwLCBIREFfT1VUUFVUKSwKIH07CiAjZGVmaW5lIHN0YWM5MmhkNzFieHhfY2Fwc3dzCXN0YWM5MmhkNzFieHhfY2Fwdm9scwogCi1zdGF0aWMgaGRhX25pZF90IHN0YWM5MjV4X2FkY19uaWRzWzFdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBzdGFjOTI1eF9hZGNfbmlkc1sxXSA9IHsKICAgICAgICAgMHgwMywKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyNXhfbXV4X25pZHNbMV0gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IHN0YWM5MjV4X211eF9uaWRzWzFdID0gewogICAgICAgICAweDBmLAogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBzdGFjOTI1eF9kYWNfbmlkc1sxXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3Qgc3RhYzkyNXhfZGFjX25pZHNbMV0gPSB7CiAgICAgICAgIDB4MDIsCiB9OwogCiAjZGVmaW5lIFNUQUM5MjVYX05VTV9ETUlDUwkxCi1zdGF0aWMgaGRhX25pZF90IHN0YWM5MjV4X2RtaWNfbmlkc1tTVEFDOTI1WF9OVU1fRE1JQ1MgKyAxXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3Qgc3RhYzkyNXhfZG1pY19uaWRzW1NUQUM5MjVYX05VTV9ETUlDUyArIDFdID0gewogCTB4MTUsIDAKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyNXhfZG11eF9uaWRzWzFdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBzdGFjOTI1eF9kbXV4X25pZHNbMV0gPSB7CiAJMHgxNCwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHN0YWM5MjV4X2NhcHZvbHNbXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIHN0YWM5MjV4X2NhcHZvbHNbXSA9IHsKIAlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MDksIDMsIDAsIEhEQV9PVVRQVVQpLAogfTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHN0YWM5MjV4X2NhcHN3c1tdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgc3RhYzkyNXhfY2Fwc3dzW10gPSB7CiAJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDE0LCAzLCAwLCBIREFfT1VUUFVUKSwKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyMnhfYWRjX25pZHNbMl0gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IHN0YWM5MjJ4X2FkY19uaWRzWzJdID0gewogICAgICAgICAweDA2LCAweDA3LAogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBzdGFjOTIyeF9tdXhfbmlkc1syXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3Qgc3RhYzkyMnhfbXV4X25pZHNbMl0gPSB7CiAgICAgICAgIDB4MTIsIDB4MTMsCiB9OwogCiAjZGVmaW5lIFNUQUM5MjJYX05VTV9DQVBTCTIKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHN0YWM5MjJ4X2NhcHZvbHNbXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIHN0YWM5MjJ4X2NhcHZvbHNbXSA9IHsKIAlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MTcsIDMsIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDE4LCAzLCAwLCBIREFfSU5QVVQpLAogfTsKICNkZWZpbmUgc3RhYzkyMnhfY2Fwc3dzCQlzdGFjOTIyeF9jYXB2b2xzCiAKLXN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyN3hfc2xhdmVfZGlnX291dHNbMl0gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IHN0YWM5Mjd4X3NsYXZlX2RpZ19vdXRzWzJdID0gewogCTB4MWYsIDAsCiB9OwogCi1zdGF0aWMgaGRhX25pZF90IHN0YWM5Mjd4X2FkY19uaWRzWzNdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBzdGFjOTI3eF9hZGNfbmlkc1szXSA9IHsKICAgICAgICAgMHgwNywgMHgwOCwgMHgwOQogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBzdGFjOTI3eF9tdXhfbmlkc1szXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3Qgc3RhYzkyN3hfbXV4X25pZHNbM10gPSB7CiAgICAgICAgIDB4MTUsIDB4MTYsIDB4MTcKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyN3hfc211eF9uaWRzWzFdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBzdGFjOTI3eF9zbXV4X25pZHNbMV0gPSB7CiAJMHgyMSwKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyN3hfZGFjX25pZHNbNl0gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IHN0YWM5Mjd4X2RhY19uaWRzWzZdID0gewogCTB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDAKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyN3hfZG11eF9uaWRzWzFdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBzdGFjOTI3eF9kbXV4X25pZHNbMV0gPSB7CiAJMHgxYiwKIH07CiAKICNkZWZpbmUgU1RBQzkyN1hfTlVNX0RNSUNTIDIKLXN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyN3hfZG1pY19uaWRzW1NUQUM5MjdYX05VTV9ETUlDUyArIDFdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBzdGFjOTI3eF9kbWljX25pZHNbU1RBQzkyN1hfTlVNX0RNSUNTICsgMV0gPSB7CiAJMHgxMywgMHgxNCwgMAogfTsKIAogI2RlZmluZSBTVEFDOTI3WF9OVU1fQ0FQUwkzCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzdGFjOTI3eF9jYXB2b2xzW10gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBzdGFjOTI3eF9jYXB2b2xzW10gPSB7CiAJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDE4LCAzLCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT01QT1NFX0FNUF9WQUwoMHgxOSwgMywgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MWEsIDMsIDAsIEhEQV9JTlBVVCksCiB9Owotc3RhdGljIHVuc2lnbmVkIGxvbmcgc3RhYzkyN3hfY2Fwc3dzW10gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBzdGFjOTI3eF9jYXBzd3NbXSA9IHsKIAlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MWIsIDMsIDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT01QT1NFX0FNUF9WQUwoMHgxYywgMywgMCwgSERBX09VVFBVVCksCiAJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDFkLCAzLCAwLCBIREFfT1VUUFVUKSwKQEAgLTUxMSw3NyArNTE1LDc3IEBACiAJIkFuYWxvZyBNdXggMiIsICJBbmFsb2cgTXV4IDMiCiB9OwogCi1zdGF0aWMgaGRhX25pZF90IHN0YWM5MjA1X2FkY19uaWRzWzJdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBzdGFjOTIwNV9hZGNfbmlkc1syXSA9IHsKICAgICAgICAgMHgxMiwgMHgxMwogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBzdGFjOTIwNV9tdXhfbmlkc1syXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3Qgc3RhYzkyMDVfbXV4X25pZHNbMl0gPSB7CiAgICAgICAgIDB4MTksIDB4MWEKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyMDVfZG11eF9uaWRzWzFdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBzdGFjOTIwNV9kbXV4X25pZHNbMV0gPSB7CiAJMHgxZCwKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyMDVfc211eF9uaWRzWzFdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBzdGFjOTIwNV9zbXV4X25pZHNbMV0gPSB7CiAJMHgyMSwKIH07CiAKICNkZWZpbmUgU1RBQzkyMDVfTlVNX0RNSUNTCTIKLXN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyMDVfZG1pY19uaWRzW1NUQUM5MjA1X05VTV9ETUlDUyArIDFdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBzdGFjOTIwNV9kbWljX25pZHNbU1RBQzkyMDVfTlVNX0RNSUNTICsgMV0gPSB7CiAgICAgICAgIDB4MTcsIDB4MTgsIDAKIH07CiAKICNkZWZpbmUgU1RBQzkyMDVfTlVNX0NBUFMJMgotc3RhdGljIHVuc2lnbmVkIGxvbmcgc3RhYzkyMDVfY2Fwdm9sc1tdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgc3RhYzkyMDVfY2Fwdm9sc1tdID0gewogCUhEQV9DT01QT1NFX0FNUF9WQUwoMHgxYiwgMywgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MWMsIDMsIDAsIEhEQV9JTlBVVCksCiB9Owotc3RhdGljIHVuc2lnbmVkIGxvbmcgc3RhYzkyMDVfY2Fwc3dzW10gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBzdGFjOTIwNV9jYXBzd3NbXSA9IHsKIAlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MWQsIDMsIDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT01QT1NFX0FNUF9WQUwoMHgxZSwgMywgMCwgSERBX09VVFBVVCksCiB9OwogCi1zdGF0aWMgaGRhX25pZF90IHN0YWM5MjAwX3Bpbl9uaWRzWzhdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBzdGFjOTIwMF9waW5fbmlkc1s4XSA9IHsKIAkweDA4LCAweDA5LCAweDBkLCAweDBlLCAKIAkweDBmLCAweDEwLCAweDExLCAweDEyLAogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBzdGFjOTI1eF9waW5fbmlkc1s4XSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3Qgc3RhYzkyNXhfcGluX25pZHNbOF0gPSB7CiAJMHgwNywgMHgwOCwgMHgwYSwgMHgwYiwgCiAJMHgwYywgMHgwZCwgMHgxMCwgMHgxMSwKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyMnhfcGluX25pZHNbMTBdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBzdGFjOTIyeF9waW5fbmlkc1sxMF0gPSB7CiAJMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwKIAkweDBmLCAweDEwLCAweDExLCAweDE1LCAweDFiLAogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDczeHhfcGluX25pZHNbMTNdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBzdGFjOTJoZDczeHhfcGluX25pZHNbMTNdID0gewogCTB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsCiAJMHgwZiwgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywKIAkweDE0LCAweDIyLCAweDIzCiB9OwogCiAjZGVmaW5lIFNUQUM5MkhENzFCWFhfTlVNX1BJTlMgMTMKLXN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ3MWJ4eF9waW5fbmlkc180cG9ydFtTVEFDOTJIRDcxQlhYX05VTV9QSU5TXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3Qgc3RhYzkyaGQ3MWJ4eF9waW5fbmlkc180cG9ydFtTVEFDOTJIRDcxQlhYX05VTV9QSU5TXSA9IHsKIAkweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDAwLAogCTB4MDAsIDB4MTQsIDB4MTgsIDB4MTksIDB4MWUsCiAJMHgxZiwgMHgyMCwgMHgyNwogfTsKLXN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ3MWJ4eF9waW5fbmlkc182cG9ydFtTVEFDOTJIRDcxQlhYX05VTV9QSU5TXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3Qgc3RhYzkyaGQ3MWJ4eF9waW5fbmlkc182cG9ydFtTVEFDOTJIRDcxQlhYX05VTV9QSU5TXSA9IHsKIAkweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLAogCTB4MGYsIDB4MTQsIDB4MTgsIDB4MTksIDB4MWUsCiAJMHgxZiwgMHgyMCwgMHgyNwogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBzdGFjOTI3eF9waW5fbmlkc1sxNF0gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IHN0YWM5Mjd4X3Bpbl9uaWRzWzE0XSA9IHsKIAkweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLAogCTB4MGYsIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsCiAJMHgxNCwgMHgyMSwgMHgyMiwgMHgyMywKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyMDVfcGluX25pZHNbMTJdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBzdGFjOTIwNV9waW5fbmlkc1sxMl0gPSB7CiAJMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwKIAkweDBmLCAweDE0LCAweDE2LCAweDE3LCAweDE4LAogCTB4MjEsIDB4MjIsCkBAIC04NDEsNDUgKzg0NSw0NSBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIHN0YWM5MjAwX2NvcmVfaW5pdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBzdGFjOTIwMF9jb3JlX2luaXRbXSA9IHsKIAkvKiBzZXQgZGFjMG11eCBmb3IgZGFjIGNvbnZlcnRlciAqLwogCXsgMHgwNywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAogCXt9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIHN0YWM5MjAwX2VhcGRfaW5pdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBzdGFjOTIwMF9lYXBkX2luaXRbXSA9IHsKIAkvKiBzZXQgZGFjMG11eCBmb3IgZGFjIGNvbnZlcnRlciAqLwogCXsweDA3LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCiAJezB4MDgsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLCAweDAyfSwKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBkZWxsX2VxX2NvcmVfaW5pdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBkZWxsX2VxX2NvcmVfaW5pdFtdID0gewogCS8qIHNldCBtYXN0ZXIgdm9sdW1lIHRvIG1heCB2YWx1ZSB3aXRob3V0IGRpc3RvcnRpb24KIAkgKiBhbmQgZGlyZWN0IGNvbnRyb2wgKi8KIAl7IDB4MWYsIEFDX1ZFUkJfU0VUX1ZPTFVNRV9LTk9CX0NPTlRST0wsIDB4ZWN9LAogCXt9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIHN0YWM5MmhkNzN4eF9jb3JlX2luaXRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgc3RhYzkyaGQ3M3h4X2NvcmVfaW5pdFtdID0gewogCS8qIHNldCBtYXN0ZXIgdm9sdW1lIGFuZCBkaXJlY3QgY29udHJvbCAqLwogCXsgMHgxZiwgQUNfVkVSQl9TRVRfVk9MVU1FX0tOT0JfQ09OVFJPTCwgMHhmZn0sCiAJe30KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgc3RhYzkyaGQ4M3h4eF9jb3JlX2luaXRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgc3RhYzkyaGQ4M3h4eF9jb3JlX2luaXRbXSA9IHsKIAkvKiBwb3dlciBzdGF0ZSBjb250cm9scyBhbXBzICovCiAJeyAweDAxLCBBQ19WRVJCX1NFVF9FQVBELCAxIDw8IDJ9LAogCXt9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIHN0YWM5MmhkNzFieHhfY29yZV9pbml0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIHN0YWM5MmhkNzFieHhfY29yZV9pbml0W10gPSB7CiAJLyogc2V0IG1hc3RlciB2b2x1bWUgYW5kIGRpcmVjdCBjb250cm9sICovCiAJeyAweDI4LCBBQ19WRVJCX1NFVF9WT0xVTUVfS05PQl9DT05UUk9MLCAweGZmfSwKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBzdGFjOTJoZDcxYnh4X3VubXV0ZV9jb3JlX2luaXRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgc3RhYzkyaGQ3MWJ4eF91bm11dGVfY29yZV9pbml0W10gPSB7CiAJLyogdW5tdXRlIHJpZ2h0IGFuZCBsZWZ0IGNoYW5uZWxzIGZvciBub2RlcyAweDBmLCAweGEsIDB4MGQgKi8KIAl7IDB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCXsgMHgwYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCkBAIC04ODcsNyArODkxLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBzdGFjOTI1eF9jb3JlX2luaXRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgc3RhYzkyNXhfY29yZV9pbml0W10gPSB7CiAJLyogc2V0IGRhYzBtdXggZm9yIGRhYyBjb252ZXJ0ZXIgKi8KIAl7IDB4MDYsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKIAkvKiBtdXRlIHRoZSBtYXN0ZXIgdm9sdW1lICovCkBAIC04OTUsMTMgKzg5OSwxMyBAQAogCXt9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIHN0YWM5MjJ4X2NvcmVfaW5pdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBzdGFjOTIyeF9jb3JlX2luaXRbXSA9IHsKIAkvKiBzZXQgbWFzdGVyIHZvbHVtZSBhbmQgZGlyZWN0IGNvbnRyb2wgKi8JCiAJeyAweDE2LCBBQ19WRVJCX1NFVF9WT0xVTUVfS05PQl9DT05UUk9MLCAweGZmfSwKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBkOTY1X2NvcmVfaW5pdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBkOTY1X2NvcmVfaW5pdFtdID0gewogCS8qIHNldCBtYXN0ZXIgdm9sdW1lIGFuZCBkaXJlY3QgY29udHJvbCAqLwkKIAl7IDB4MjQsIEFDX1ZFUkJfU0VUX1ZPTFVNRV9LTk9CX0NPTlRST0wsIDB4ZmZ9LAogCS8qIHVubXV0ZSBub2RlIDB4MWIgKi8KQEAgLTkxMSw3ICs5MTUsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGRlbGxfM3N0X2NvcmVfaW5pdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBkZWxsXzNzdF9jb3JlX2luaXRbXSA9IHsKIAkvKiBkb24ndCBzZXQgZGVsdGEgYml0ICovCiAJezB4MjQsIEFDX1ZFUkJfU0VUX1ZPTFVNRV9LTk9CX0NPTlRST0wsIDB4N2Z9LAogCS8qIHVubXV0ZSBub2RlIDB4MWIgKi8KQEAgLTkyMSw3ICs5MjUsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIHN0YWM5Mjd4X2NvcmVfaW5pdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBzdGFjOTI3eF9jb3JlX2luaXRbXSA9IHsKIAkvKiBzZXQgbWFzdGVyIHZvbHVtZSBhbmQgZGlyZWN0IGNvbnRyb2wgKi8JCiAJeyAweDI0LCBBQ19WRVJCX1NFVF9WT0xVTUVfS05PQl9DT05UUk9MLCAweGZmfSwKIAkvKiBlbmFibGUgYW5hbG9nIHBjIGJlZXAgcGF0aCAqLwpAQCAtOTI5LDcgKzkzMyw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgc3RhYzkyN3hfdm9sa25vYl9jb3JlX2luaXRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgc3RhYzkyN3hfdm9sa25vYl9jb3JlX2luaXRbXSA9IHsKIAkvKiBkb24ndCBzZXQgZGVsdGEgYml0ICovCiAJezB4MjQsIEFDX1ZFUkJfU0VUX1ZPTFVNRV9LTk9CX0NPTlRST0wsIDB4N2Z9LAogCS8qIGVuYWJsZSBhbmFsb2cgcGMgYmVlcCBwYXRoICovCkBAIC05MzcsNyArOTQxLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBzdGFjOTIwNV9jb3JlX2luaXRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgc3RhYzkyMDVfY29yZV9pbml0W10gPSB7CiAJLyogc2V0IG1hc3RlciB2b2x1bWUgYW5kIGRpcmVjdCBjb250cm9sICovCQogCXsgMHgyNCwgQUNfVkVSQl9TRVRfVk9MVU1FX0tOT0JfQ09OVFJPTCwgMHhmZn0sCiAJLyogZW5hYmxlIGFuYWxvZyBwYyBiZWVwIHBhdGggKi8KQEAgLTk3Nyw3ICs5ODEsNyBAQAogCQkucHJpdmF0ZV92YWx1ZSA9IG5pZCwgXAogCX0KIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MjAwX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyMDBfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FX01JTl9NVVRFKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHhiLCAwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4YiwgMCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDBhLCAwLCBIREFfT1VUUFVUKSwKQEAgLTk4NSwzOCArOTg5LDM4IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MmhkNzN4eF82Y2hfbG9vcGJhY2tbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJoZDczeHhfNmNoX2xvb3BiYWNrW10gPSB7CiAJU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGQTAsIDB4N0ExLCAzKSwKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MmhkNzN4eF84Y2hfbG9vcGJhY2tbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJoZDczeHhfOGNoX2xvb3BiYWNrW10gPSB7CiAJU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGQTAsIDB4N0ExLCA0KSwKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MmhkNzN4eF8xMGNoX2xvb3BiYWNrW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyaGQ3M3h4XzEwY2hfbG9vcGJhY2tbXSA9IHsKIAlTVEFDX0FOQUxPR19MT09QQkFDSygweEZBMCwgMHg3QTEsIDUpLAogCXt9CiB9OwogCiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJoZDcxYnh4X2xvb3BiYWNrW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyaGQ3MWJ4eF9sb29wYmFja1tdID0gewogCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkEwLCAweDdBMCwgMikKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTI1eF9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MjV4X21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRV9NSU5fTVVURSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4ZSwgMCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCAweDBlLCAwLCBIREFfT1VUUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyMDVfbG9vcGJhY2tbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTIwNV9sb29wYmFja1tdID0gewogCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkUwLCAweDdFMCwgMSksCiAJe30KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTI3eF9sb29wYmFja1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5Mjd4X2xvb3BiYWNrW10gPSB7CiAJU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGRUIsIDB4N0VCLCAxKSwKIAl7fQogfTsKQEAgLTExODIsMTYgKzExODYsMTYgQEAKIAlyZXR1cm4gMDsJCiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVmOTIwMF9waW5fY29uZmlnc1s4XSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcmVmOTIwMF9waW5fY29uZmlnc1s4XSA9IHsKIAkweDAxYzQ3MDEwLCAweDAxNDQ3MDEwLCAweDAyMjE0MDFmLCAweDAxMTE0MDEwLAogCTB4MDJhMTkwMjAsIDB4MDFhMTkwMjEsIDB4OTAxMDAxNDAsIDB4MDE4MTMxMjIsCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGdhdGV3YXk5MjAwX200X3Bpbl9jb25maWdzWzhdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBnYXRld2F5OTIwMF9tNF9waW5fY29uZmlnc1s4XSA9IHsKIAkweDQwMDAwMGZlLCAweDQwNDUwMGY0LCAweDQwMDEwMGYwLCAweDkwMTEwMDEwLAogCTB4NDAwMTAwZjEsIDB4MDJhMTkwMmUsIDB4NTAwMDAwZjIsIDB4NTAwMDAwZjMsCiB9Owotc3RhdGljIHVuc2lnbmVkIGludCBnYXRld2F5OTIwMF9tNF8yX3Bpbl9jb25maWdzWzhdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBnYXRld2F5OTIwMF9tNF8yX3Bpbl9jb25maWdzWzhdID0gewogCTB4NDAwMDAwZmUsIDB4NDA0NTAwZjQsIDB4NDAwMTAwZjAsIDB4OTAxMTAwMTAsCiAJMHg0MDAxMDBmMSwgMHgwMmExOTAyZSwgMHg1MDAwMDBmMiwgMHg1MDAwMDBmMywKIH07CkBAIC0xMjAyLDcgKzEyMDYsNyBAQAogICAgIDEwMjgwMURFCiAgICAgMTAyODAxRTgKICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGRlbGw5MjAwX2QyMV9waW5fY29uZmlnc1s4XSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZGVsbDkyMDBfZDIxX3Bpbl9jb25maWdzWzhdID0gewogCTB4NDAwMDAxZjAsIDB4NDAwMDAxZjEsIDB4MDIyMTQwMzAsIDB4MDEwMTQwMTAsIAogCTB4MDJhMTkwMjAsIDB4MDFhMTkwMjEsIDB4OTAxMDAxNDAsIDB4MDE4MTMxMjIsCiB9OwpAQCAtMTIxMiw3ICsxMjE2LDcgQEAKICAgICAxMDI4MDFDMAogICAgIDEwMjgwMUMxCiAqLwotc3RhdGljIHVuc2lnbmVkIGludCBkZWxsOTIwMF9kMjJfcGluX2NvbmZpZ3NbOF0gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGRlbGw5MjAwX2QyMl9waW5fY29uZmlnc1s4XSA9IHsKIAkweDQwMDAwMWYwLCAweDQwMDAwMWYxLCAweDAyMjE0MDFmLCAweDAxMDE0MDEwLCAKIAkweDAxODEzMDIwLCAweDAyYTE5MDIxLCAweDkwMTAwMTQwLCAweDQwMDAwMWYyLAogfTsKQEAgLTEyMjYsNyArMTIzMCw3IEBACiAgICAgMTAyODAxREEKICAgICAxMDI4MDFFMwogKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVsbDkyMDBfZDIzX3Bpbl9jb25maWdzWzhdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBkZWxsOTIwMF9kMjNfcGluX2NvbmZpZ3NbOF0gPSB7CiAJMHg0MDAwMDFmMCwgMHg0MDAwMDFmMSwgMHgwMjIxNDAxZiwgMHgwMTAxNDAxMCwgCiAJMHgwMTgxMzAyMCwgMHgwMWExOTAyMSwgMHg5MDEwMDE0MCwgMHg0MDAwMDFmMiwgCiB9OwpAQCAtMTIzNyw3ICsxMjQxLDcgQEAKICAgICAxMDI4MDFCNSAoRGVsbCBJbnNwaXJvbiA2MzBtKQogICAgIDEwMjgwMUQ4IChEZWxsIEluc3Bpcm9uIDY0MG0pCiAqLwotc3RhdGljIHVuc2lnbmVkIGludCBkZWxsOTIwMF9tMjFfcGluX2NvbmZpZ3NbOF0gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGRlbGw5MjAwX20yMV9waW5fY29uZmlnc1s4XSA9IHsKIAkweDQwYzAwM2ZhLCAweDAzNDQxMzQwLCAweDAzMjExMjFmLCAweDkwMTcwMzEwLAogCTB4NDA4MDAzZmIsIDB4MDNhMTEwMjAsIDB4NDAxMDAzZmMsIDB4NDAzMDAzZmQsCiB9OwpAQCAtMTI1MCw3ICsxMjU0LDcgQEAKICAgICAxMDI4MDFENCAKICAgICAxMDI4MDFENiAKICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGRlbGw5MjAwX20yMl9waW5fY29uZmlnc1s4XSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZGVsbDkyMDBfbTIyX3Bpbl9jb25maWdzWzhdID0gewogCTB4NDBjMDAzZmEsIDB4MDE0NDEzMWYsIDB4MDMyMTEyMWYsIDB4OTAxNzAzMTAsIAogCTB4OTBhNzAzMjEsIDB4MDNhMTEwMjAsIDB4NDAxMDAzZmIsIDB4NDBmMDAwZmMsCiB9OwpAQCAtMTI2MCw3ICsxMjY0LDcgQEAKICAgICAxMDI4MDFDRSAoRGVsbCBYUFMgTTE3MTApCiAgICAgMTAyODAxQ0YgKERlbGwgUHJlY2lzaW9uIE05MCkKICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGRlbGw5MjAwX20yM19waW5fY29uZmlnc1s4XSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZGVsbDkyMDBfbTIzX3Bpbl9jb25maWdzWzhdID0gewogCTB4NDBjMDAzZmEsIDB4MDE0NDEzNDAsIDB4MDQyMTQyMWYsIDB4OTAxNzAzMTAsCiAJMHg0MDgwMDNmYiwgMHgwNGExMTAyZSwgMHg5MDE3MDMxMSwgMHg0MDMwMDNmYywKIH07CkBAIC0xMjcyLDcgKzEyNzYsNyBAQAogICAgIDEwMjgwMUNCIChEZWxsIExhdGl0dWRlIDEyMEwpCiAgICAgMTAyODAxRDMKICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGRlbGw5MjAwX20yNF9waW5fY29uZmlnc1s4XSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZGVsbDkyMDBfbTI0X3Bpbl9jb25maWdzWzhdID0gewogCTB4NDBjMDAzZmEsIDB4NDA0MDAzZmIsIDB4MDMyMTEyMWYsIDB4OTAxNzAzMTAsIAogCTB4NDA4MDAzZmMsIDB4MDNhMTEwMjAsIDB4NDAxMDAzZmQsIDB4NDAzMDAzZmUsIAogfTsKQEAgLTEyODMsNyArMTI4Nyw3IEBACiAgICAgMTAyODAxRUUKICAgICAxMDI4MDFFRgogKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVsbDkyMDBfbTI1X3Bpbl9jb25maWdzWzhdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBkZWxsOTIwMF9tMjVfcGluX2NvbmZpZ3NbOF0gPSB7CiAJMHg0MGMwMDNmYSwgMHgwMTQ0MTM0MCwgMHgwNDIxMTIxZiwgMHg5MDE3MDMxMCwgCiAJMHg0MDgwMDNmYiwgMHgwNGExMTAyMCwgMHg0MDEwMDNmYywgMHg0MDMwMDNmZCwKIH07CkBAIC0xMjkzLDcgKzEyOTcsNyBAQAogICAgIDEwMjgwMUY1IChEZWxsIEluc3Bpcm9uIDE1MDEpCiAgICAgMTAyODAxRjYKICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGRlbGw5MjAwX20yNl9waW5fY29uZmlnc1s4XSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZGVsbDkyMDBfbTI2X3Bpbl9jb25maWdzWzhdID0gewogCTB4NDBjMDAzZmEsIDB4NDA0MDAzZmIsIDB4MDQyMTEyMWYsIDB4OTAxNzAzMTAsIAogCTB4NDA4MDAzZmMsIDB4MDRhMTEwMjAsIDB4NDAxMDAzZmQsIDB4NDAzMDAzZmUsCiB9OwpAQCAtMTMwMiwxOCArMTMwNiwxOCBAQAogICAgIFNUQUMgOTIwMC0zMgogICAgIDEwMjgwMUNEIChEZWxsIEluc3Bpcm9uIEUxNzA1Lzk0MDApCiAqLwotc3RhdGljIHVuc2lnbmVkIGludCBkZWxsOTIwMF9tMjdfcGluX2NvbmZpZ3NbOF0gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGRlbGw5MjAwX20yN19waW5fY29uZmlnc1s4XSA9IHsKIAkweDQwYzAwM2ZhLCAweDAxNDQxMzQwLCAweDA0MjExMjFmLCAweDkwMTcwMzEwLAogCTB4OTAxNzAzMTAsIDB4MDRhMTEwMjAsIDB4OTAxNzAzMTAsIDB4NDBmMDAzZmMsCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IG9xbzkyMDBfcGluX2NvbmZpZ3NbOF0gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG9xbzkyMDBfcGluX2NvbmZpZ3NbOF0gPSB7CiAJMHg0MGMwMDBmMCwgMHg0MDQwMDBmMSwgMHgwMjIxMTIxZiwgMHgwMjIxMTIxMCwKIAkweDkwMTcwMTExLCAweDkwYTcwMTIwLCAweDQwMDAwMGYyLCAweDQwMDAwMGYzLAogfTsKIAogCi1zdGF0aWMgdW5zaWduZWQgaW50ICpzdGFjOTIwMF9icmRfdGJsW1NUQUNfOTIwMF9NT0RFTFNdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCAqc3RhYzkyMDBfYnJkX3RibFtTVEFDXzkyMDBfTU9ERUxTXSA9IHsKIAlbU1RBQ19SRUZdID0gcmVmOTIwMF9waW5fY29uZmlncywKIAlbU1RBQ185MjAwX09RT10gPSBvcW85MjAwX3Bpbl9jb25maWdzLAogCVtTVEFDXzkyMDBfREVMTF9EMjFdID0gZGVsbDkyMDBfZDIxX3Bpbl9jb25maWdzLApAQCAtMTM1MCw3ICsxMzU0LDcgQEAKIAlbU1RBQ185MjAwX1BBTkFTT05JQ10gPSAicGFuYXNvbmljIiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBzdGFjOTIwMF9jZmdfdGJsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgc3RhYzkyMDBfY2ZnX3RibFtdID0gewogCS8qIFNpZ21hVGVsIHJlZmVyZW5jZSBib2FyZCAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNjY4LAogCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ19SRUYpLApAQCAtMTQyNiw0NyArMTQzMCw0NyBAQAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVmOTI1eF9waW5fY29uZmlnc1s4XSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcmVmOTI1eF9waW5fY29uZmlnc1s4XSA9IHsKIAkweDQwYzAwM2YwLCAweDQyNDUwM2YyLCAweDAxODEzMDIyLCAweDAyYTE5MDIxLAogCTB4OTBhNzAzMjAsIDB4MDIyMTQyMTAsIDB4MDEwMTkwMjAsIDB4OTAzMzAzMmUsCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IHN0YWM5MjV4TTFfcGluX2NvbmZpZ3NbOF0gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHN0YWM5MjV4TTFfcGluX2NvbmZpZ3NbOF0gPSB7CiAJMHg0MGMwMDNmNCwgMHg0MjQ1MDNmMiwgMHg0MDAwMDBmMywgMHgwMmExOTAyMCwKIAkweDQwYTAwMGYwLCAweDkwMTAwMjEwLCAweDQwMDAwM2YxLCAweDkwMzMwMzJlLAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBzdGFjOTI1eE0xXzJfcGluX2NvbmZpZ3NbOF0gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHN0YWM5MjV4TTFfMl9waW5fY29uZmlnc1s4XSA9IHsKIAkweDQwYzAwM2Y0LCAweDQyNDUwM2YyLCAweDQwMDAwMGYzLCAweDAyYTE5MDIwLAogCTB4NDBhMDAwZjAsIDB4OTAxMDAyMTAsIDB4NDAwMDAzZjEsIDB4OTAzMzAzMmUsCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IHN0YWM5MjV4TTJfcGluX2NvbmZpZ3NbOF0gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHN0YWM5MjV4TTJfcGluX2NvbmZpZ3NbOF0gPSB7CiAJMHg0MGMwMDNmNCwgMHg0MjQ1MDNmMiwgMHg0MDAwMDBmMywgMHgwMmExOTAyMCwKIAkweDQwYTAwMGYwLCAweDkwMTAwMjEwLCAweDQwMDAwM2YxLCAweDkwMzMwMzJlLAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBzdGFjOTI1eE0yXzJfcGluX2NvbmZpZ3NbOF0gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHN0YWM5MjV4TTJfMl9waW5fY29uZmlnc1s4XSA9IHsKIAkweDQwYzAwM2Y0LCAweDQyNDUwM2YyLCAweDQwMDAwMGYzLCAweDAyYTE5MDIwLAogCTB4NDBhMDAwZjAsIDB4OTAxMDAyMTAsIDB4NDAwMDAzZjEsIDB4OTAzMzAzMmUsCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IHN0YWM5MjV4TTNfcGluX2NvbmZpZ3NbOF0gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHN0YWM5MjV4TTNfcGluX2NvbmZpZ3NbOF0gPSB7CiAJMHg0MGMwMDNmNCwgMHg0MjQ1MDNmMiwgMHg0MDAwMDBmMywgMHgwMmExOTAyMCwKIAkweDQwYTAwMGYwLCAweDkwMTAwMjEwLCAweDQwMDAwM2YxLCAweDUwMzMwM2YzLAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBzdGFjOTI1eE01X3Bpbl9jb25maWdzWzhdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzdGFjOTI1eE01X3Bpbl9jb25maWdzWzhdID0gewogCTB4NDBjMDAzZjQsIDB4NDI0NTAzZjIsIDB4NDAwMDAwZjMsIDB4MDJhMTkwMjAsCiAJMHg0MGEwMDBmMCwgMHg5MDEwMDIxMCwgMHg0MDAwMDNmMSwgMHg5MDMzMDMyZSwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgc3RhYzkyNXhNNl9waW5fY29uZmlnc1s4XSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3RhYzkyNXhNNl9waW5fY29uZmlnc1s4XSA9IHsKIAkweDQwYzAwM2Y0LCAweDQyNDUwM2YyLCAweDQwMDAwMGYzLCAweDAyYTE5MDIwLAogCTB4NDBhMDAwZjAsIDB4OTAxMDAyMTAsIDB4NDAwMDAzZjEsIDB4OTAzMzAzMjAsCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50ICpzdGFjOTI1eF9icmRfdGJsW1NUQUNfOTI1eF9NT0RFTFNdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCAqc3RhYzkyNXhfYnJkX3RibFtTVEFDXzkyNXhfTU9ERUxTXSA9IHsKIAlbU1RBQ19SRUZdID0gcmVmOTI1eF9waW5fY29uZmlncywKIAlbU1RBQ19NMV0gPSBzdGFjOTI1eE0xX3Bpbl9jb25maWdzLAogCVtTVEFDX00xXzJdID0gc3RhYzkyNXhNMV8yX3Bpbl9jb25maWdzLApAQCAtMTQ4OSw3ICsxNDkzLDcgQEAKIAlbU1RBQ19NNl0gPSAibTYiLAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIHN0YWM5MjV4X2NvZGVjX2lkX2NmZ190YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBzdGFjOTI1eF9jb2RlY19pZF9jZmdfdGJsW10gPSB7CiAJU05EX1BDSV9RVUlSSygweDEwN2IsIDB4MDMxNiwgIkdhdGV3YXkgTTI1NSIsIFNUQUNfTTIpLAogCVNORF9QQ0lfUVVJUksoMHgxMDdiLCAweDAzNjYsICJHYXRld2F5IE1QNjk1NCIsIFNUQUNfTTUpLAogCVNORF9QQ0lfUVVJUksoMHgxMDdiLCAweDA0NjEsICJHYXRld2F5IE5YNTYwWEwiLCBTVEFDX00xKSwKQEAgLTE1MDMsNyArMTUwNyw3IEBACiAJe30gLyogdGVybWluYXRvciAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIHN0YWM5MjV4X2NmZ190YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBzdGFjOTI1eF9jZmdfdGJsW10gPSB7CiAJLyogU2lnbWFUZWwgcmVmZXJlbmNlIGJvYXJkICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI2NjgsICJERkkgTGFuUGFydHkiLCBTVEFDX1JFRiksCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RGSSwgMHgzMTAxLCAiREZJIExhblBhcnR5IiwgU1RBQ19SRUYpLApAQCAtMTUxNSwzMyArMTUxOSwzMyBAQAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVmOTJoZDczeHhfcGluX2NvbmZpZ3NbMTNdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCByZWY5MmhkNzN4eF9waW5fY29uZmlnc1sxM10gPSB7CiAJMHgwMjIxNDAzMCwgMHgwMmExOTA0MCwgMHgwMWExOTAyMCwgMHgwMjIxNDAzMCwKIAkweDAxODEzMDJlLCAweDAxMDE0MDEwLCAweDAxMDE0MDIwLCAweDAxMDE0MDMwLAogCTB4MDIzMTkwNDAsIDB4OTBhMDAwZjAsIDB4OTBhMDAwZjAsIDB4MDE0NTIwNTAsCiAJMHgwMTQ1MjA1MCwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVsbF9tNl9waW5fY29uZmlnc1sxM10gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGRlbGxfbTZfcGluX2NvbmZpZ3NbMTNdID0gewogCTB4MDMyMTEwMWYsIDB4NGYwMDAwMGYsIDB4NGYwMDAwZjAsIDB4OTAxNzAxMTAsCiAJMHgwM2ExMTAyMCwgMHgwMzIxMTAxZiwgMHg0ZjAwMDBmMCwgMHg0ZjAwMDBmMCwKIAkweDRmMDAwMGYwLCAweDkwYTYwMTYwLCAweDRmMDAwMGYwLCAweDRmMDAwMGYwLAogCTB4NGYwMDAwZjAsCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGFsaWVud2FyZV9tMTd4X3Bpbl9jb25maWdzWzEzXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYWxpZW53YXJlX20xN3hfcGluX2NvbmZpZ3NbMTNdID0gewogCTB4MDMyMTEwMWYsIDB4MDMyMTEwMWYsIDB4MDNhMTEwMjAsIDB4MDMwMTQwMjAsCiAJMHg5MDE3MDExMCwgMHg0ZjAwMDBmMCwgMHg0ZjAwMDBmMCwgMHg0ZjAwMDBmMCwKIAkweDRmMDAwMGYwLCAweDkwYTYwMTYwLCAweDRmMDAwMGYwLCAweDRmMDAwMGYwLAogCTB4OTA0NjAxYjAsCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGludGVsX2RnNDVpZF9waW5fY29uZmlnc1sxM10gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGludGVsX2RnNDVpZF9waW5fY29uZmlnc1sxM10gPSB7CiAJMHgwMjIxNDIzMCwgMHgwMkExOTI0MCwgMHgwMTAxMzIxNCwgMHgwMTAxNDIxMCwKIAkweDAxQTE5MjUwLCAweDAxMDExMjEyLCAweDAxMDE2MjExCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50ICpzdGFjOTJoZDczeHhfYnJkX3RibFtTVEFDXzkySEQ3M1hYX01PREVMU10gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50ICpzdGFjOTJoZDczeHhfYnJkX3RibFtTVEFDXzkySEQ3M1hYX01PREVMU10gPSB7CiAJW1NUQUNfOTJIRDczWFhfUkVGXQk9IHJlZjkyaGQ3M3h4X3Bpbl9jb25maWdzLAogCVtTVEFDX0RFTExfTTZfQU1JQ10JPSBkZWxsX202X3Bpbl9jb25maWdzLAogCVtTVEFDX0RFTExfTTZfRE1JQ10JPSBkZWxsX202X3Bpbl9jb25maWdzLApAQCAtMTU2Myw3ICsxNTY3LDcgQEAKIAlbU1RBQ19BTElFTldBUkVfTTE3WF0gPSAiYWxpZW53YXJlIiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBzdGFjOTJoZDczeHhfY2ZnX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrIHN0YWM5MmhkNzN4eF9jZmdfdGJsW10gPSB7CiAJLyogU2lnbWFUZWwgcmVmZXJlbmNlIGJvYXJkICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI2NjgsCiAJCQkJIkRGSSBMYW5QYXJ0eSIsIFNUQUNfOTJIRDczWFhfUkVGKSwKQEAgLTE2MDAsMTEgKzE2MDQsMTEgQEAKIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMmZlLAogCQkJCSJEZWxsIFN0dWRpbyBYUFMgMTY0NSIsIFNUQUNfREVMTF9NNl9CT1RIKSwKIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwNDEzLAotCQkJCSJEZWxsIFN0dWRpbyAxNTU4IiwgU1RBQ19ERUxMX002X0JPVEgpLAorCQkJCSJEZWxsIFN0dWRpbyAxNTU4IiwgU1RBQ19ERUxMX002X0RNSUMpLAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBzdGFjOTJoZDczeHhfY29kZWNfaWRfY2ZnX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrIHN0YWM5MmhkNzN4eF9jb2RlY19pZF9jZmdfdGJsW10gPSB7CiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDJhMSwKIAkJICAgICAgIkFsaWVud2FyZSBNMTd4IiwgU1RBQ19BTElFTldBUkVfTTE3WCksCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDQzYSwKQEAgLTE2MTIsMjUgKzE2MTYsMjUgQEAKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IHJlZjkyaGQ4M3h4eF9waW5fY29uZmlnc1sxMF0gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHJlZjkyaGQ4M3h4eF9waW5fY29uZmlnc1sxMF0gPSB7CiAJMHgwMjIxNDAzMCwgMHgwMjIxMTAxMCwgMHgwMmExOTAyMCwgMHgwMjE3MDEzMCwKIAkweDAxMDE0MDUwLCAweDAxODE5MDQwLCAweDAxMDE0MDIwLCAweDkwYTMwMTRlLAogCTB4MDE0NTExNjAsIDB4OTg1NjAxNzAsCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGRlbGxfczE0X3Bpbl9jb25maWdzWzEwXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZGVsbF9zMTRfcGluX2NvbmZpZ3NbMTBdID0gewogCTB4MDIyMTQwM2YsIDB4MDIyMTEwMWYsIDB4MDJhMTkwMjAsIDB4OTAxNzAxMTAsCiAJMHg0MGYwMDBmMCwgMHg0MGYwMDBmMCwgMHg0MGYwMDBmMCwgMHg5MGE2MDE2MCwKIAkweDQwZjAwMGYwLCAweDQwZjAwMGYwLAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBocF9kdjdfNDAwMF9waW5fY29uZmlnc1sxMF0gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGhwX2R2N180MDAwX3Bpbl9jb25maWdzWzEwXSA9IHsKIAkweDAzYTEyMDUwLCAweDAzMjEyMDFmLCAweDQwZjAwMGYwLCAweDkwMTcwMTEwLAogCTB4NDBmMDAwZjAsIDB4NDBmMDAwZjAsIDB4OTAxNzAxMTAsIDB4ZDVhMzAxNDAsCiAJMHg0MGYwMDBmMCwgMHg0MGYwMDBmMCwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgKnN0YWM5MmhkODN4eHhfYnJkX3RibFtTVEFDXzkySEQ4M1hYWF9NT0RFTFNdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCAqc3RhYzkyaGQ4M3h4eF9icmRfdGJsW1NUQUNfOTJIRDgzWFhYX01PREVMU10gPSB7CiAJW1NUQUNfOTJIRDgzWFhYX1JFRl0gPSByZWY5MmhkODN4eHhfcGluX2NvbmZpZ3MsCiAJW1NUQUNfOTJIRDgzWFhYX1BXUl9SRUZdID0gcmVmOTJoZDgzeHh4X3Bpbl9jb25maWdzLAogCVtTVEFDX0RFTExfUzE0XSA9IGRlbGxfczE0X3Bpbl9jb25maWdzLApAQCAtMTY0Niw3ICsxNjUwLDcgQEAKIAlbU1RBQ19IUF9EVjdfNDAwMF0gPSAiaHAtZHY3LTQwMDAiLAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIHN0YWM5MmhkODN4eHhfY2ZnX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrIHN0YWM5MmhkODN4eHhfY2ZnX3RibFtdID0gewogCS8qIFNpZ21hVGVsIHJlZmVyZW5jZSBib2FyZCAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNjY4LAogCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ185MkhEODNYWFhfUkVGKSwKQEAgLTE2NTksMzUgKzE2NjMsMzUgQEAKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IHJlZjkyaGQ3MWJ4eF9waW5fY29uZmlnc1tTVEFDOTJIRDcxQlhYX05VTV9QSU5TXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcmVmOTJoZDcxYnh4X3Bpbl9jb25maWdzW1NUQUM5MkhENzFCWFhfTlVNX1BJTlNdID0gewogCTB4MDIyMTQwMzAsIDB4MDJhMTkwNDAsIDB4MDFhMTkwMjAsIDB4MDEwMTQwMTAsCiAJMHgwMTgxMzAyZSwgMHgwMTAxNDAxMCwgMHgwMTAxOTAyMCwgMHg5MGEwMDBmMCwKIAkweDkwYTAwMGYwLCAweDAxNDUyMDUwLCAweDAxNDUyMDUwLCAweDAwMDAwMDAwLAogCTB4MDAwMDAwMDAKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVsbF9tNF8xX3Bpbl9jb25maWdzW1NUQUM5MkhENzFCWFhfTlVNX1BJTlNdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBkZWxsX200XzFfcGluX2NvbmZpZ3NbU1RBQzkySEQ3MUJYWF9OVU1fUElOU10gPSB7CiAJMHgwNDIxMTAxZiwgMHgwNGExMTIyMSwgMHg0MGYwMDBmMCwgMHg5MDE3MDExMCwKIAkweDIzYTE5MDJlLCAweDIzMDE0MjUwLCAweDQwZjAwMGYwLCAweDkwYTAwMGYwLAogCTB4NDBmMDAwZjAsIDB4NGYwMDAwZjAsIDB4NGYwMDAwZjAsIDB4MDAwMDAwMDAsCiAJMHgwMDAwMDAwMAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBkZWxsX200XzJfcGluX2NvbmZpZ3NbU1RBQzkySEQ3MUJYWF9OVU1fUElOU10gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGRlbGxfbTRfMl9waW5fY29uZmlnc1tTVEFDOTJIRDcxQlhYX05VTV9QSU5TXSA9IHsKIAkweDA0MjExMDFmLCAweDA0YTExMjIxLCAweDkwYTcwMzMwLCAweDkwMTcwMTEwLAogCTB4MjNhMTkwMmUsIDB4MjMwMTQyNTAsIDB4NDBmMDAwZjAsIDB4NDBmMDAwZjAsCiAJMHg0MGYwMDBmMCwgMHgwNDQ0MTNiMCwgMHgwNDQ0MTNiMCwgMHgwMDAwMDAwMCwKIAkweDAwMDAwMDAwCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGRlbGxfbTRfM19waW5fY29uZmlnc1tTVEFDOTJIRDcxQlhYX05VTV9QSU5TXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZGVsbF9tNF8zX3Bpbl9jb25maWdzW1NUQUM5MkhENzFCWFhfTlVNX1BJTlNdID0gewogCTB4MDQyMTEwMWYsIDB4MDRhMTEyMjEsIDB4OTBhNzAzMzAsIDB4OTAxNzAxMTAsCiAJMHg0MGYwMDBmMCwgMHg0MGYwMDBmMCwgMHg0MGYwMDBmMCwgMHg5MGEwMDBmMCwKIAkweDQwZjAwMGYwLCAweDA0NDQxM2IwLCAweDA0NDQxM2IwLCAweDAwMDAwMDAwLAogCTB4MDAwMDAwMDAKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgKnN0YWM5MmhkNzFieHhfYnJkX3RibFtTVEFDXzkySEQ3MUJYWF9NT0RFTFNdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCAqc3RhYzkyaGQ3MWJ4eF9icmRfdGJsW1NUQUNfOTJIRDcxQlhYX01PREVMU10gPSB7CiAJW1NUQUNfOTJIRDcxQlhYX1JFRl0gPSByZWY5MmhkNzFieHhfcGluX2NvbmZpZ3MsCiAJW1NUQUNfREVMTF9NNF8xXQk9IGRlbGxfbTRfMV9waW5fY29uZmlncywKIAlbU1RBQ19ERUxMX000XzJdCT0gZGVsbF9tNF8yX3Bpbl9jb25maWdzLApAQCAtMTcxMiw3ICsxNzE2LDcgQEAKIAlbU1RBQ19IUF9EVjRfMTIyMk5SXSA9ICJocC1kdjQtMTIyMm5yIiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBzdGFjOTJoZDcxYnh4X2NmZ190YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBzdGFjOTJoZDcxYnh4X2NmZ190YmxbXSA9IHsKIAkvKiBTaWdtYVRlbCByZWZlcmVuY2UgYm9hcmQgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjY2OCwKIAkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfOTJIRDcxQlhYX1JFRiksCkBAIC0xNzY5LDcgKzE3NzMsNyBAQAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVmOTIyeF9waW5fY29uZmlnc1sxMF0gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHJlZjkyMnhfcGluX2NvbmZpZ3NbMTBdID0gewogCTB4MDEwMTQwMTAsIDB4MDEwMTYwMTEsIDB4MDEwMTIwMTIsIDB4MDIyMTQwMWYsCiAJMHgwMTgxMzEyMiwgMHgwMTAxMTAxNCwgMHgwMTQ0MTAzMCwgMHgwMWM0MTAzMCwKIAkweDQwMDAwMTAwLCAweDQwMDAwMTAwLApAQCAtMTc4Myw3ICsxNzg3LDcgQEAKICAgICAxMDI4MDFEMQogICAgIDEwMjgwMUQyCiAqLwotc3RhdGljIHVuc2lnbmVkIGludCBkZWxsXzkyMnhfZDgxX3Bpbl9jb25maWdzWzEwXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZGVsbF85MjJ4X2Q4MV9waW5fY29uZmlnc1sxMF0gPSB7CiAJMHgwMjIxNDAzMCwgMHgwMWExOTAyMSwgMHgwMTExMTAxMiwgMHgwMTExNDAxMCwKIAkweDAyYTE5MDIwLCAweDAxMTE3MDExLCAweDQwMDAwMWYwLCAweDQwMDAwMWYxLAogCTB4MDE4MTMxMjIsIDB4NDAwMDAxZjIsCkBAIC0xNzk0LDcgKzE3OTgsNyBAQAogICAgIDEwMjgwMUFDCiAgICAgMTAyODAxRDAKICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGRlbGxfOTIyeF9kODJfcGluX2NvbmZpZ3NbMTBdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBkZWxsXzkyMnhfZDgyX3Bpbl9jb25maWdzWzEwXSA9IHsKIAkweDAyMjE0MDMwLCAweDAxYTE5MDIxLCAweDAxMTExMDEyLCAweDAxMTE0MDEwLAogCTB4MDJhMTkwMjAsIDB4MDExMTcwMTEsIDB4MDE0NTExNDAsIDB4NDAwMDAxZjAsCiAJMHgwMTgxMzEyMiwgMHg0MDAwMDFmMSwKQEAgLTE4MDQsNyArMTgwOCw3IEBACiAgICAgU1RBQyA5MjJYIHBpbiBjb25maWdzIGZvcgogICAgIDEwMjgwMUJGCiAqLwotc3RhdGljIHVuc2lnbmVkIGludCBkZWxsXzkyMnhfbTgxX3Bpbl9jb25maWdzWzEwXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZGVsbF85MjJ4X204MV9waW5fY29uZmlnc1sxMF0gPSB7CiAJMHgwMzIxMTAxZiwgMHgwMTExMjAyNCwgMHgwMTExMTIyMiwgMHg5MTE3NDIyMCwKIAkweDAzYTExMDUwLCAweDAxMTE2MjIxLCAweDkwYTcwMzMwLCAweDAxNDUyMzQwLCAKIAkweDQwQzAwM2YxLCAweDQwNTAwM2YwLApAQCAtMTgxNCw2MSArMTgxOCw2MSBAQAogICAgIFNUQUMgOTIyMSBBMSBwaW4gY29uZmlncyBmb3IKICAgICAxMDI4MDFENyAoRGVsbCBYUFMgTTEyMTApCiAqLwotc3RhdGljIHVuc2lnbmVkIGludCBkZWxsXzkyMnhfbTgyX3Bpbl9jb25maWdzWzEwXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZGVsbF85MjJ4X204Ml9waW5fY29uZmlnc1sxMF0gPSB7CiAJMHgwMjIxMTIxMSwgMHg0MDgxMDNmZiwgMHgwMmExMTIzZSwgMHg5MDEwMDMxMCwgCiAJMHg0MDgwMDNmMSwgMHgwMjIxMTIxZiwgMHgwMzQ1MTM0MCwgMHg0MGMwMDNmMiwgCiAJMHg1MDgwMDNmMywgMHg0MDUwMDNmNCwgCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGQ5NDVndHAzX3Bpbl9jb25maWdzWzEwXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZDk0NWd0cDNfcGluX2NvbmZpZ3NbMTBdID0gewogCTB4MDIyMTQwMWYsIDB4MDFhMTkwMjIsIDB4MDE4MTMwMjEsIDB4MDEwMTQwMTAsCiAJMHg0MDAwMDEwMCwgMHg0MDAwMDEwMCwgMHg0MDAwMDEwMCwgMHg0MDAwMDEwMCwKIAkweDAyYTE5MTIwLCAweDQwMDAwMTAwLAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBkOTQ1Z3RwNV9waW5fY29uZmlnc1sxMF0gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGQ5NDVndHA1X3Bpbl9jb25maWdzWzEwXSA9IHsKIAkweDAyMjE0MDFmLCAweDAxMDExMDEyLCAweDAxODEzMDI0LCAweDAxMDE0MDEwLAogCTB4MDFhMTkwMjEsIDB4MDEwMTYwMTEsIDB4MDE0NTIxMzAsIDB4NDAwMDAxMDAsCiAJMHgwMmExOTMyMCwgMHg0MDAwMDEwMCwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZWxfbWFjX3YxX3Bpbl9jb25maWdzWzEwXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaW50ZWxfbWFjX3YxX3Bpbl9jb25maWdzWzEwXSA9IHsKIAkweDAxMjFlMjFmLCAweDQwMDAwMGZmLCAweDkwMTdlMTEwLCAweDQwMDAwMGZkLAogCTB4NDAwMDAwZmUsIDB4MDE4MWUwMjAsIDB4MTE0NWUwMzAsIDB4MTFjNWUyNDAsCiAJMHg0MDAwMDBmYywgMHg0MDAwMDBmYiwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZWxfbWFjX3YyX3Bpbl9jb25maWdzWzEwXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaW50ZWxfbWFjX3YyX3Bpbl9jb25maWdzWzEwXSA9IHsKIAkweDAxMjFlMjFmLCAweDkwYTcwMTJlLCAweDkwMTdlMTEwLCAweDQwMDAwMGZkLAogCTB4NDAwMDAwZmUsIDB4MDE4MWUwMjAsIDB4MTE0NWUyMzAsIDB4NTAwMDAwZmEsCiAJMHg0MDAwMDBmYywgMHg0MDAwMDBmYiwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZWxfbWFjX3YzX3Bpbl9jb25maWdzWzEwXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaW50ZWxfbWFjX3YzX3Bpbl9jb25maWdzWzEwXSA9IHsKIAkweDAxMjFlMjFmLCAweDkwYTcwMTJlLCAweDkwMTdlMTEwLCAweDQwMDAwMGZkLAogCTB4NDAwMDAwZmUsIDB4MDE4MWUwMjAsIDB4MTE0NWUyMzAsIDB4MTFjNWUyNDAsCiAJMHg0MDAwMDBmYywgMHg0MDAwMDBmYiwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZWxfbWFjX3Y0X3Bpbl9jb25maWdzWzEwXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaW50ZWxfbWFjX3Y0X3Bpbl9jb25maWdzWzEwXSA9IHsKIAkweDAzMjFlMjFmLCAweDAzYTFlMDJlLCAweDkwMTdlMTEwLCAweDkwMTdlMTFmLAogCTB4NDAwMDAwZmUsIDB4MDM4MWUwMjAsIDB4MTM0NWUyMzAsIDB4MTNjNWUyNDAsCiAJMHg0MDAwMDBmYywgMHg0MDAwMDBmYiwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZWxfbWFjX3Y1X3Bpbl9jb25maWdzWzEwXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaW50ZWxfbWFjX3Y1X3Bpbl9jb25maWdzWzEwXSA9IHsKIAkweDAzMjFlMjFmLCAweDAzYTFlMDJlLCAweDkwMTdlMTEwLCAweDkwMTdlMTFmLAogCTB4NDAwMDAwZmUsIDB4MDM4MWUwMjAsIDB4MTM0NWUyMzAsIDB4MTNjNWUyNDAsCiAJMHg0MDAwMDBmYywgMHg0MDAwMDBmYiwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZWNzMjAyX3Bpbl9jb25maWdzWzEwXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZWNzMjAyX3Bpbl9jb25maWdzWzEwXSA9IHsKIAkweDAyMjE0MDFmLCAweDAyYTE5MDIwLCAweDAxYTE5MDIwLCAweDAxMTE0MDEwLAogCTB4NDA4MDAwZjAsIDB4MDE4MTMwMjIsIDB4MDc0NTEwYTAsIDB4NDBjNDAwZjEsCiAJMHg5MDM3MDEyZSwgMHg0MGUwMDBmMiwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgKnN0YWM5MjJ4X2JyZF90YmxbU1RBQ185MjJYX01PREVMU10gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50ICpzdGFjOTIyeF9icmRfdGJsW1NUQUNfOTIyWF9NT0RFTFNdID0gewogCVtTVEFDX0Q5NDVfUkVGXSA9IHJlZjkyMnhfcGluX2NvbmZpZ3MsCiAJW1NUQUNfRDk0NUdUUDNdID0gZDk0NWd0cDNfcGluX2NvbmZpZ3MsCiAJW1NUQUNfRDk0NUdUUDVdID0gZDk0NWd0cDVfcGluX2NvbmZpZ3MsCkBAIC0xOTE3LDcgKzE5MjEsNyBAQAogCVtTVEFDXzkyMlhfREVMTF9NODJdID0gImRlbGwtbTgyIiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBzdGFjOTIyeF9jZmdfdGJsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgc3RhYzkyMnhfY2ZnX3RibFtdID0gewogCS8qIFNpZ21hVGVsIHJlZmVyZW5jZSBib2FyZCAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNjY4LAogCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ19EOTQ1X1JFRiksCkBAIC0yMDA4LDQyICsyMDEyLDQyIEBACiAJe30gLyogdGVybWluYXRvciAqLwogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCByZWY5Mjd4X3Bpbl9jb25maWdzWzE0XSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcmVmOTI3eF9waW5fY29uZmlnc1sxNF0gPSB7CiAJMHgwMjIxNDAyMCwgMHgwMmExOTA4MCwgMHgwMTgxMzA0ZSwgMHgwMTAxNDAxMCwKIAkweDAxYTE5MDQwLCAweDAxMDExMDEyLCAweDAxMDE2MDExLCAweDAxMDEyMDFmLCAKIAkweDE4MzMwMWYwLCAweDE4YTAwMWYwLCAweDE4YTAwMWYwLCAweDAxNDQyMDcwLAogCTB4MDFjNDIxOTAsIDB4NDAwMDAxMDAsCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGQ5NjVfM3N0X3Bpbl9jb25maWdzWzE0XSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZDk2NV8zc3RfcGluX2NvbmZpZ3NbMTRdID0gewogCTB4MDIyMTQwMWYsIDB4MDJhMTkxMjAsIDB4NDAwMDAxMDAsIDB4MDEwMTQwMTEsCiAJMHgwMWExOTAyMSwgMHgwMTgxMzAyNCwgMHg0MDAwMDEwMCwgMHg0MDAwMDEwMCwKIAkweDQwMDAwMTAwLCAweDQwMDAwMTAwLCAweDQwMDAwMTAwLCAweDQwMDAwMTAwLAogCTB4NDAwMDAxMDAsIDB4NDAwMDAxMDAKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZDk2NV81c3RfcGluX2NvbmZpZ3NbMTRdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBkOTY1XzVzdF9waW5fY29uZmlnc1sxNF0gPSB7CiAJMHgwMjIxNDAyMCwgMHgwMmExOTA4MCwgMHgwMTgxMzA0ZSwgMHgwMTAxNDAxMCwKIAkweDAxYTE5MDQwLCAweDAxMDExMDEyLCAweDAxMDE2MDExLCAweDQwMDAwMTAwLAogCTB4NDAwMDAxMDAsIDB4NDAwMDAxMDAsIDB4NDAwMDAxMDAsIDB4MDE0NDIwNzAsCiAJMHg0MDAwMDEwMCwgMHg0MDAwMDEwMAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBkOTY1XzVzdF9ub19mcF9waW5fY29uZmlnc1sxNF0gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGQ5NjVfNXN0X25vX2ZwX3Bpbl9jb25maWdzWzE0XSA9IHsKIAkweDQwMDAwMTAwLCAweDQwMDAwMTAwLCAweDAxODEzMDRlLCAweDAxMDE0MDEwLAogCTB4MDFhMTkwNDAsIDB4MDEwMTEwMTIsIDB4MDEwMTYwMTEsIDB4NDAwMDAxMDAsCiAJMHg0MDAwMDEwMCwgMHg0MDAwMDEwMCwgMHg0MDAwMDEwMCwgMHgwMTQ0MjA3MCwKIAkweDQwMDAwMTAwLCAweDQwMDAwMTAwCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGRlbGxfM3N0X3Bpbl9jb25maWdzWzE0XSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZGVsbF8zc3RfcGluX2NvbmZpZ3NbMTRdID0gewogCTB4MDIyMTEyMzAsIDB4MDJhMTEyMjAsIDB4MDFhMTkwNDAsIDB4MDExMTQyMTAsCiAJMHgwMTExMTIxMiwgMHgwMTExNjIxMSwgMHgwMTgxMzA1MCwgMHgwMTExMjIxNCwKIAkweDQwMzAwM2ZhLCAweDkwYTYwMDQwLCAweDkwYTYwMDQwLCAweDQwNDAwM2ZiLAogCTB4NDBjMDAzZmMsIDB4NDAwMDAxMDAKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgKnN0YWM5Mjd4X2JyZF90YmxbU1RBQ185MjdYX01PREVMU10gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50ICpzdGFjOTI3eF9icmRfdGJsW1NUQUNfOTI3WF9NT0RFTFNdID0gewogCVtTVEFDX0Q5NjVfUkVGX05PX0pEXSA9IHJlZjkyN3hfcGluX2NvbmZpZ3MsCiAJW1NUQUNfRDk2NV9SRUZdICA9IHJlZjkyN3hfcGluX2NvbmZpZ3MsCiAJW1NUQUNfRDk2NV8zU1RdICA9IGQ5NjVfM3N0X3Bpbl9jb25maWdzLApAQCAtMjA2Niw3ICsyMDcwLDcgQEAKIAlbU1RBQ185MjdYX1ZPTEtOT0JdCT0gInZvbGtub2IiLAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIHN0YWM5Mjd4X2NmZ190YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBzdGFjOTI3eF9jZmdfdGJsW10gPSB7CiAJLyogU2lnbWFUZWwgcmVmZXJlbmNlIGJvYXJkICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI2NjgsCiAJCSAgICAgICJERkkgTGFuUGFydHkiLCBTVEFDX0Q5NjVfUkVGKSwKQEAgLTIxMDQsNyArMjEwOCw3IEBACiAJe30gLyogdGVybWluYXRvciAqLwogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCByZWY5MjA1X3Bpbl9jb25maWdzWzEyXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcmVmOTIwNV9waW5fY29uZmlnc1sxMl0gPSB7CiAJMHg0MDAwMDEwMCwgMHg0MDAwMDEwMCwgMHgwMTAxNjAxMSwgMHgwMTAxNDAxMCwKIAkweDAxODEzMTIyLCAweDAxYTE5MDIxLCAweDAxMDE5MDIwLCAweDQwMDAwMTAwLAogCTB4OTBhMDAwZjAsIDB4OTBhMDAwZjAsIDB4MDE0NDEwMzAsIDB4MDFjNDEwMzAKQEAgLTIxMjEsNyArMjEyNSw3IEBACiAgICAgMTAyODAyMjggKERlbGwgVm9zdHJvIDE1MDApCiAgICAgMTAyODAyMjkgKERlbGwgVm9zdHJvIDE3MDApCiAqLwotc3RhdGljIHVuc2lnbmVkIGludCBkZWxsXzkyMDVfbTQyX3Bpbl9jb25maWdzWzEyXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZGVsbF85MjA1X200Ml9waW5fY29uZmlnc1sxMl0gPSB7CiAJMHgwMzIxMTAxRiwgMHgwM0ExMTAyMCwgMHg0MDAwMDNGQSwgMHg5MDE3MDMxMCwKIAkweDQwMDAwM0ZCLCAweDQwMDAwM0ZDLCAweDQwMDAwM0ZELCAweDQwRjAwMEY5LAogCTB4OTBBNjAzMzAsIDB4NDAwMDAzRkYsIDB4MDE0NDEzMUYsIDB4NDBDMDAzRkUsCkBAIC0yMTM3LDE5ICsyMTQxLDE5IEBACiAgICAgMTAyODAyMDAKICAgICAxMDI4MDIwMQogKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVsbF85MjA1X200M19waW5fY29uZmlnc1sxMl0gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGRlbGxfOTIwNV9tNDNfcGluX2NvbmZpZ3NbMTJdID0gewogCTB4MDMyMTEwMWYsIDB4MDNhMTEwMjAsIDB4OTBhNzAzMzAsIDB4OTAxNzAzMTAsCiAJMHg0MDAwMDBmZSwgMHg0MDAwMDBmZiwgMHg0MDAwMDBmZCwgMHg0MGYwMDBmOSwKIAkweDQwMDAwMGZhLCAweDQwMDAwMGZjLCAweDAxNDQxMzFmLCAweDQwYzAwM2Y4LAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBkZWxsXzkyMDVfbTQ0X3Bpbl9jb25maWdzWzEyXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZGVsbF85MjA1X200NF9waW5fY29uZmlnc1sxMl0gPSB7CiAJMHgwNDIxMTAxZiwgMHgwNGExMTAyMCwgMHg0MDAwMDNmYSwgMHg5MDE3MDMxMCwKIAkweDQwMDAwM2ZiLCAweDQwMDAwM2ZjLCAweDQwMDAwM2ZkLCAweDQwMDAwM2Y5LAogCTB4OTBhNjAzMzAsIDB4NDAwMDAzZmYsIDB4MDE0NDEzNDAsIDB4NDBjMDAzZmUsCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50ICpzdGFjOTIwNV9icmRfdGJsW1NUQUNfOTIwNV9NT0RFTFNdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCAqc3RhYzkyMDVfYnJkX3RibFtTVEFDXzkyMDVfTU9ERUxTXSA9IHsKIAlbU1RBQ185MjA1X1JFRl0gPSByZWY5MjA1X3Bpbl9jb25maWdzLAogCVtTVEFDXzkyMDVfREVMTF9NNDJdID0gZGVsbF85MjA1X200Ml9waW5fY29uZmlncywKIAlbU1RBQ185MjA1X0RFTExfTTQzXSA9IGRlbGxfOTIwNV9tNDNfcGluX2NvbmZpZ3MsCkBAIC0yMTY2LDcgKzIxNzAsNyBAQAogCVtTVEFDXzkyMDVfRUFQRF0gPSAiZWFwZCIsCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgc3RhYzkyMDVfY2ZnX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrIHN0YWM5MjA1X2NmZ190YmxbXSA9IHsKIAkvKiBTaWdtYVRlbCByZWZlcmVuY2UgYm9hcmQgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjY2OCwKIAkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfOTIwNV9SRUYpLApAQCAtMjIxNCw3ICsyMjE4LDcgQEAKIH07CiAKIHN0YXRpYyB2b2lkIHN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKLQkJCQkgICAgIHVuc2lnbmVkIGludCAqcGluY2ZncykKKwkJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqcGluY2ZncykKIHsKIAlpbnQgaTsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwpAQCAtMjMzNCw3ICsyMzM4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBzdGFjOTJ4eF9wY21fZGlnaXRhbF9wbGF5YmFjayA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gc3RhYzkyeHhfcGNtX2RpZ2l0YWxfcGxheWJhY2sgPSB7CiAJLnN1YnN0cmVhbXMgPSAxLAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSAyLApAQCAtMjM0NywxNCArMjM1MSwxNCBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIHN0YWM5Mnh4X3BjbV9kaWdpdGFsX2NhcHR1cmUgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9wY21fc3RyZWFtIHN0YWM5Mnh4X3BjbV9kaWdpdGFsX2NhcHR1cmUgPSB7CiAJLnN1YnN0cmVhbXMgPSAxLAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSAyLAogCS8qIE5JRCBpcyBzZXQgaW4gc3RhYzkyeHhfYnVpbGRfcGNtcyAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBzdGFjOTJ4eF9wY21fYW5hbG9nX3BsYXliYWNrID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBzdGFjOTJ4eF9wY21fYW5hbG9nX3BsYXliYWNrID0gewogCS5zdWJzdHJlYW1zID0gMSwKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gOCwKQEAgLTIzNjYsNyArMjM3MCw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gc3RhYzkyeHhfcGNtX2FuYWxvZ19hbHRfcGxheWJhY2sgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9wY21fc3RyZWFtIHN0YWM5Mnh4X3BjbV9hbmFsb2dfYWx0X3BsYXliYWNrID0gewogCS5zdWJzdHJlYW1zID0gMSwKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gMiwKQEAgLTIzNzgsNyArMjM4Miw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gc3RhYzkyeHhfcGNtX2FuYWxvZ19jYXB0dXJlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBzdGFjOTJ4eF9wY21fYW5hbG9nX2NhcHR1cmUgPSB7CiAJLmNoYW5uZWxzX21pbiA9IDIsCiAJLmNoYW5uZWxzX21heCA9IDIsCiAJLyogTklEICsgLnN1YnN0cmVhbXMgaXMgc2V0IGluIHN0YWM5Mnh4X2J1aWxkX3BjbXMgKi8KQEAgLTI0ODcsNyArMjQ5MSw3IEBACiAJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKIAlpbnQgaTsKLQlzdGF0aWMgY2hhciAqdGV4dHNbXSA9IHsKKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRleHRzW10gPSB7CiAJCSJNaWMgSW4iLCAiTGluZSBJbiIsICJMaW5lIE91dCIKIAl9OwogCkBAIC0yNTU2LDcgKzI1NjAsNyBAQAogc3RhdGljIGludCBzdGFjOTJ4eF9pb19zd2l0Y2hfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewotCXN0YXRpYyBjaGFyICp0ZXh0c1syXTsKKwljaGFyICp0ZXh0c1syXTsKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCkBAIC0yNjg3LDcgKzI2OTEsNyBAQAogCVNUQUNfQ1RMX1dJREdFVF9EQ19CSUFTCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyeHhfY29udHJvbF90ZW1wbGF0ZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJ4eF9jb250cm9sX3RlbXBsYXRlc1tdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoTlVMTCwgMCwgMCwgMCksCiAJSERBX0NPREVDX01VVEUoTlVMTCwgMCwgMCwgMCksCiAJSERBX0NPREVDX01VVEVfQkVFUChOVUxMLCAwLCAwLCAwKSwKQEAgLTI3MDEsNyArMjcwNSw3IEBACiAvKiBhZGQgZHluYW1pYyBjb250cm9scyAqLwogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICoKIHN0YWNfY29udHJvbF9uZXcoc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMsCi0JCSBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa3RlbXAsCisJCSBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa3RlbXAsCiAJCSBjb25zdCBjaGFyICpuYW1lLAogCQkgdW5zaWduZWQgaW50IHN1YmRldikKIHsKQEAgLTI3MjQsNyArMjcyOCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgc3RhYzkyeHhfYWRkX2NvbnRyb2xfdGVtcChzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYywKLQkJCQkgICAgIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprdGVtcCwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprdGVtcCwKIAkJCQkgICAgIGludCBpZHgsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJICAgICB1bnNpZ25lZCBsb25nIHZhbCkKIHsKQEAgLTI3NTQsNyArMjc1OCw3IEBACiAJcmV0dXJuIHN0YWM5Mnh4X2FkZF9jb250cm9sX2lkeChzcGVjLCB0eXBlLCAwLCBuYW1lLCB2YWwpOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhY19pbnB1dF9zcmNfdGVtcCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjX2lucHV0X3NyY190ZW1wID0gewogCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCS5uYW1lID0gIklucHV0IFNvdXJjZSIsCiAJLmluZm8gPSBzdGFjOTJ4eF9tdXhfZW51bV9pbmZvLApAQCAtMzA3Miw3ICszMDc2LDggQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAic3RhYzkyeHg6IE5vIHNwYWNlIGZvciBEQUMgMHgleFxuIiwgbmlkKTsKIAkJcmV0dXJuIDE7CiAJfSBlbHNlIHsKLQkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbc3BlYy0+bXVsdGlvdXQubnVtX2RhY3NdID0gbmlkOworCQlzbmRfQlVHX09OKHNwZWMtPm11bHRpb3V0LmRhY19uaWRzICE9IHNwZWMtPmRhY19uaWRzKTsKKwkJc3BlYy0+ZGFjX25pZHNbc3BlYy0+bXVsdGlvdXQubnVtX2RhY3NdID0gbmlkOwogCQlzcGVjLT5tdWx0aW91dC5udW1fZGFjcysrOwogCX0KIAlyZXR1cm4gMDsKQEAgLTMxMDksOCArMzExNCw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX291dHMgJiYgaSA8IEFSUkFZX1NJWkUoY2huYW1lKTsgaSsrKSB7CiAJCWlmICh0eXBlID09IEFVVE9fUElOX0hQX09VVCAmJiAhc3BlYy0+aHBfZGV0ZWN0KSB7Ci0JCQl3aWRfY2FwcyA9IGdldF93Y2Fwcyhjb2RlYywgcGluc1tpXSk7Ci0JCQlpZiAod2lkX2NhcHMgJiBBQ19XQ0FQX1VOU09MX0NBUCkKKwkJCWlmIChpc19qYWNrX2RldGVjdGFibGUoY29kZWMsIHBpbnNbaV0pKQogCQkJCXNwZWMtPmhwX2RldGVjdCA9IDE7CiAJCX0KIAkJbmlkID0gZGFjX25pZHNbaV07CkBAIC0zMzA5LDcgKzMzMTMsNyBAQAogCXJldHVybiBzbmRfaGRhX2VuYWJsZV9iZWVwX2RldmljZShjb2RlYywgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyeHhfZGlnX2JlZXBfY3RybCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJ4eF9kaWdfYmVlcF9jdHJsID0gewogCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCS5pbmZvID0gc3RhYzkyeHhfZGlnX2JlZXBfc3dpdGNoX2luZm8sCiAJLmdldCA9IHN0YWM5Mnh4X2RpZ19iZWVwX3N3aXRjaF9nZXQsCkBAIC0zNTE2LDE0ICszNTIwLDE4IEBACiAJCQkgaGRhX25pZF90ICpmaXhlZCwgaGRhX25pZF90ICpleHQsIGhkYV9uaWRfdCAqZG9jaykKIHsKIAl1bnNpZ25lZCBpbnQgY2ZnOworCXVuc2lnbmVkIGludCB0eXBlOwogCiAJaWYgKCFuaWQpCiAJCXJldHVybiAwOwogCWNmZyA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKKwl0eXBlID0gZ2V0X2RlZmNmZ19kZXZpY2UoY2ZnKTsKIAlzd2l0Y2ggKHNuZF9oZGFfZ2V0X2lucHV0X3Bpbl9hdHRyKGNmZykpIHsKIAljYXNlIElOUFVUX1BJTl9BVFRSX0lOVDoKIAkJaWYgKCpmaXhlZCkKIAkJCXJldHVybiAxOyAvKiBhbHJlYWR5IG9jY3VwaWVkICovCisJCWlmICh0eXBlICE9IEFDX0pBQ0tfTUlDX0lOKQorCQkJcmV0dXJuIDE7IC8qIGludmFsaWQgdHlwZSAqLwogCQkqZml4ZWQgPSBuaWQ7CiAJCWJyZWFrOwogCWNhc2UgSU5QVVRfUElOX0FUVFJfVU5VU0VEOgpAQCAtMzUzMSwxMSArMzUzOSwxNSBAQAogCWNhc2UgSU5QVVRfUElOX0FUVFJfRE9DSzoKIAkJaWYgKCpkb2NrKQogCQkJcmV0dXJuIDE7IC8qIGFscmVhZHkgb2NjdXBpZWQgKi8KKwkJaWYgKHR5cGUgIT0gQUNfSkFDS19NSUNfSU4gJiYgdHlwZSAhPSBBQ19KQUNLX0xJTkVfSU4pCisJCQlyZXR1cm4gMTsgLyogaW52YWxpZCB0eXBlICovCiAJCSpkb2NrID0gbmlkOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlpZiAoKmV4dCkKIAkJCXJldHVybiAxOyAvKiBhbHJlYWR5IG9jY3VwaWVkICovCisJCWlmICh0eXBlICE9IEFDX0pBQ0tfTUlDX0lOKQorCQkJcmV0dXJuIDE7IC8qIGludmFsaWQgdHlwZSAqLwogCQkqZXh0ID0gbmlkOwogCQlicmVhazsKIAl9CkBAIC0zNTkxLDEwICszNjAzLDYgQEAKIAloZGFfbmlkX3QgZml4ZWQsIGV4dCwgZG9jazsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBjZmctPm51bV9pbnB1dHM7IGkrKykgewotCQlpZiAoY2ZnLT5pbnB1dHNbaV0udHlwZSA+PSBBVVRPX1BJTl9MSU5FX0lOKQotCQkJcmV0dXJuIDA7IC8qIG11c3QgYmUgZXhjbHVzaXZlbHkgbWljcyAqLwotCX0KIAlmaXhlZCA9IGV4dCA9IGRvY2sgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBjZmctPm51bV9pbnB1dHM7IGkrKykKIAkJaWYgKGNoZWNrX21pY19waW4oY29kZWMsIGNmZy0+aW5wdXRzW2ldLnBpbiwKQEAgLTM2MDYsNyArMzYxNCw3IEBACiAJCQlyZXR1cm4gMDsKIAlpZiAoIWZpeGVkIHx8ICghZXh0ICYmICFkb2NrKSkKIAkJcmV0dXJuIDA7IC8qIG5vIGlucHV0IHRvIHN3aXRjaCAqLwotCWlmICghKGdldF93Y2Fwcyhjb2RlYywgZXh0KSAmIEFDX1dDQVBfVU5TT0xfQ0FQKSkKKwlpZiAoIWlzX2phY2tfZGV0ZWN0YWJsZShjb2RlYywgZXh0KSkKIAkJcmV0dXJuIDA7IC8qIG5vIHVuc29sIHN1cHBvcnQgKi8KIAlpZiAoc2V0X21pY19yb3V0ZShjb2RlYywgJnNwZWMtPmV4dF9taWMsIGV4dCkgfHwKIAkgICAgc2V0X21pY19yb3V0ZShjb2RlYywgJnNwZWMtPmludF9taWMsIGZpeGVkKSB8fApAQCAtMzkyMSwxMyArMzkyOSwxMSBAQAogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJaGRhX25pZF90IHBpbiA9IGNmZy0+aHBfcGluc1swXTsKLQl1bnNpZ25lZCBpbnQgd2lkX2NhcHM7CiAKIAlpZiAoISBwaW4pCiAJCXJldHVybiAwOwogCi0Jd2lkX2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIHBpbik7Ci0JaWYgKHdpZF9jYXBzICYgQUNfV0NBUF9VTlNPTF9DQVApCisJaWYgKGlzX2phY2tfZGV0ZWN0YWJsZShjb2RlYywgcGluKSkKIAkJc3BlYy0+aHBfZGV0ZWN0ID0gMTsKIAogCXJldHVybiAwOwpAQCAtNDEzOCw3ICs0MTQ0LDcgQEAKIAlzdHJ1Y3Qgc2lnbWF0ZWxfZXZlbnQgKmV2ZW50OwogCWludCB0YWc7CiAKLQlpZiAoIShnZXRfd2NhcHMoY29kZWMsIG5pZCkgJiBBQ19XQ0FQX1VOU09MX0NBUCkpCisJaWYgKCFpc19qYWNrX2RldGVjdGFibGUoY29kZWMsIG5pZCkpCiAJCXJldHVybiAwOwogCWV2ZW50ID0gc3RhY19nZXRfZXZlbnQoY29kZWMsIG5pZCk7CiAJaWYgKGV2ZW50KSB7CkBAIC00MTcxLDcgKzQxNzcsNyBAQAogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAKIAkvKiBwb3dlciBkb3duIGluYWN0aXZlIERBQ3MgKi8KLQloZGFfbmlkX3QgKmRhYzsKKwljb25zdCBoZGFfbmlkX3QgKmRhYzsKIAlmb3IgKGRhYyA9IHNwZWMtPmRhY19saXN0OyAqZGFjOyBkYWMrKykKIAkJaWYgKCFjaGVja19hbGxfZGFjX25pZHMoc3BlYywgKmRhYykpCiAJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAqZGFjLCAwLApAQCAtNDY0NCw3ICs0NjUwLDcgQEAKIH0KIAogc3RhdGljIGludCBzdGFjOTJ4eF9jb25uZWN0ZWRfcG9ydHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCi0JCQkJCSBoZGFfbmlkX3QgKm5pZHMsIGludCBudW1fbmlkcykKKwkJCQkgICAgY29uc3QgaGRhX25pZF90ICpuaWRzLCBpbnQgbnVtX25pZHMpCiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlpbnQgaWR4LCBudW07CkBAIC00OTY4LDcgKzQ5NzQsNyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2NvZGVjX29wcyBzdGFjOTJ4eF9wYXRjaF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9jb2RlY19vcHMgc3RhYzkyeHhfcGF0Y2hfb3BzID0gewogCS5idWlsZF9jb250cm9scyA9IHN0YWM5Mnh4X2J1aWxkX2NvbnRyb2xzLAogCS5idWlsZF9wY21zID0gc3RhYzkyeHhfYnVpbGRfcGNtcywKIAkuaW5pdCA9IHN0YWM5Mnh4X2luaXQsCkBAIC01NTg4LDcgKzU1OTQsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhY19ocF9iYXNzX3N3X2N0cmwgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhY19ocF9iYXNzX3N3X2N0cmwgPSB7CiAJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJLmluZm8gPSBzdGFjX2hwX2Jhc3NfZ3Bpb19pbmZvLAogCS5nZXQgPSBzdGFjX2hwX2Jhc3NfZ3Bpb19nZXQsCkBAIC01NjEyLDcgKzU2MTgsNyBAQAogc3RhdGljIGludCBwYXRjaF9zdGFjOTJoZDcxYnh4KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjOwotCXN0cnVjdCBoZGFfdmVyYiAqdW5tdXRlX2luaXQgPSBzdGFjOTJoZDcxYnh4X3VubXV0ZV9jb3JlX2luaXQ7CisJY29uc3Qgc3RydWN0IGhkYV92ZXJiICp1bm11dGVfaW5pdCA9IHN0YWM5MmhkNzFieHhfdW5tdXRlX2NvcmVfaW5pdDsKIAl1bnNpZ25lZCBpbnQgcGluX2NmZzsKIAlpbnQgZXJyID0gMDsKIApAQCAtNTcwNSw5ICs1NzExLDkgQEAKIAkJdW5tdXRlX2luaXQrKzsKIAkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDBmLCAweDQwZjAwMGYwKTsKIAkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDE5LCAweDQwZjAwMGYzKTsKLQkJc3RhYzkyaGQ3MWJ4eF9kbWljX25pZHNbU1RBQzkySEQ3MUJYWF9OVU1fRE1JQ1MgLSAxXSA9IDA7CisJCXNwZWMtPmRtaWNfbmlkcyA9IHN0YWM5MmhkNzFieHhfZG1pY181cG9ydF9uaWRzOwogCQlzcGVjLT5udW1fZG1pY3MgPSBzdGFjOTJ4eF9jb25uZWN0ZWRfcG9ydHMoY29kZWMsCi0JCQkJCXN0YWM5MmhkNzFieHhfZG1pY19uaWRzLAorCQkJCQlzdGFjOTJoZDcxYnh4X2RtaWNfNXBvcnRfbmlkcywKIAkJCQkJU1RBQzkySEQ3MUJYWF9OVU1fRE1JQ1MgLSAxKTsKIAkJYnJlYWs7CiAJY2FzZSAweDExMWQ3NjAzOiAvKiA2IFBvcnQgd2l0aCBBbmFsb2cgTWl4ZXIgKi8KQEAgLTU3MjksMTUgKzU3MzUsNiBAQAogCWlmIChnZXRfd2NhcHMoY29kZWMsIDB4YSkgJiBBQ19XQ0FQX0lOX0FNUCkKIAkJc25kX2hkYV9zZXF1ZW5jZV93cml0ZV9jYWNoZShjb2RlYywgdW5tdXRlX2luaXQpOwogCi0JLyogU29tZSBIUCBtYWNoaW5lcyBzZWVtIHRvIGhhdmUgdW5zdGFibGUgY29kZWMgY29tbXVuaWNhdGlvbnMKLQkgKiBlc3BlY2lhbGx5IHdpdGggQVRJIGZnbHJ4IGRyaXZlci4gIEZvciByZWNvdmVyaW5nIGZyb20gdGhlCi0JICogQ09SQi9SSVJCIHN0YWxsLCBhbGxvdyB0aGUgQlVTIHJlc2V0IGFuZCBrZWVwIGFsd2F5cyBzeW5jCi0JICovCi0JaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA9PSBTVEFDX0hQX0RWNSkgewotCQljb2RlYy0+YnVzLT5zeW5jX3dyaXRlID0gMTsKLQkJY29kZWMtPmJ1cy0+YWxsb3dfYnVzX3Jlc2V0ID0gMTsKLQl9Ci0KIAlzcGVjLT5hbG9vcGJhY2tfY3RsID0gc3RhYzkyaGQ3MWJ4eF9sb29wYmFjazsKIAlzcGVjLT5hbG9vcGJhY2tfbWFzayA9IDB4NTA7CiAJc3BlYy0+YWxvb3BiYWNrX3NoaWZ0ID0gMDsKQEAgLTYyMjMsMzEgKzYyMjAsMzEgQEAKICAqIFNUQUM5ODcyIGhhY2sKICAqLwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIHN0YWM5ODcyX2NvcmVfaW5pdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiBzdGFjOTg3Ml9jb3JlX2luaXRbXSA9IHsKIAl7MHgxNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sIC8qIG1pYy1zZWw6IDBhLDBkLDE0LDAyICovCiAJezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwgLyogTWljLWluIC0+IDB4OSAqLwogCXt9CiB9OwogCi1zdGF0aWMgaGRhX25pZF90IHN0YWM5ODcyX3Bpbl9uaWRzW10gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IHN0YWM5ODcyX3Bpbl9uaWRzW10gPSB7CiAJMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwKIAkweDExLCAweDEzLCAweDE0LAogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBzdGFjOTg3Ml9hZGNfbmlkc1tdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBzdGFjOTg3Ml9hZGNfbmlkc1tdID0gewogCTB4OCAvKiwweDYqLwogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBzdGFjOTg3Ml9tdXhfbmlkc1tdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBzdGFjOTg3Ml9tdXhfbmlkc1tdID0gewogCTB4MTUKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHN0YWM5ODcyX2NhcHZvbHNbXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIHN0YWM5ODcyX2NhcHZvbHNbXSA9IHsKIAlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MDksIDMsIDAsIEhEQV9JTlBVVCksCiB9OwogI2RlZmluZSBzdGFjOTg3Ml9jYXBzd3MJCXN0YWM5ODcyX2NhcHZvbHMKIAotc3RhdGljIHVuc2lnbmVkIGludCBzdGFjOTg3Ml92YWlvX3Bpbl9jb25maWdzWzldID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzdGFjOTg3Ml92YWlvX3Bpbl9jb25maWdzWzldID0gewogCTB4MDMyMTEwMjAsIDB4NDExMTExZjAsIDB4NDExMTExZjAsIDB4MDNhMTUwMzAsCiAJMHg0MTExMTFmMCwgMHg5MDE3MDExMCwgMHg0MTExMTFmMCwgMHg0MTExMTFmMCwKIAkweDkwYTcwMTNlCkBAIC02MjU4LDExICs2MjU1LDExIEBACiAJW1NUQUNfOTg3Ml9WQUlPXSA9ICJ2YWlvIiwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgKnN0YWM5ODcyX2JyZF90YmxbU1RBQ185ODcyX01PREVMU10gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50ICpzdGFjOTg3Ml9icmRfdGJsW1NUQUNfOTg3Ml9NT0RFTFNdID0gewogCVtTVEFDXzk4NzJfVkFJT10gPSBzdGFjOTg3Ml92YWlvX3Bpbl9jb25maWdzLAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIHN0YWM5ODcyX2NmZ190YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBzdGFjOTg3Ml9jZmdfdGJsW10gPSB7CiAJU05EX1BDSV9RVUlSS19NQVNLKDB4MTA0ZCwgMHhmZmYwLCAweDgxZTAsCiAJCQkgICAiU29ueSBWQUlPIEYvUyIsIFNUQUNfOTg3Ml9WQUlPKSwKIAl7fSAvKiB0ZXJtaW5hdG9yICovCkBAIC02MzE2LDcgKzYzMTMsNyBAQAogLyoKICAqIHBhdGNoIGVudHJpZXMKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfY29kZWNfcHJlc2V0IHNuZF9oZGFfcHJlc2V0X3NpZ21hdGVsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9jb2RlY19wcmVzZXQgc25kX2hkYV9wcmVzZXRfc2lnbWF0ZWxbXSA9IHsKICAJeyAuaWQgPSAweDgzODQ3NjkwLCAubmFtZSA9ICJTVEFDOTIwMCIsIC5wYXRjaCA9IHBhdGNoX3N0YWM5MjAwIH0sCiAgCXsgLmlkID0gMHg4Mzg0Nzg4MiwgLm5hbWUgPSAiU1RBQzkyMjAgQTEiLCAucGF0Y2ggPSBwYXRjaF9zdGFjOTIyeCB9LAogIAl7IC5pZCA9IDB4ODM4NDc2ODAsIC5uYW1lID0gIlNUQUM5MjIxIEExIiwgLnBhdGNoID0gcGF0Y2hfc3RhYzkyMnggfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfdmlhLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jCmluZGV4IDA5OTcwMzEuLjYwNWM5OWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfdmlhLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYwpAQCAtOTgsMjQgKzk4LDMwIEBACiAJVlQxNzE2UywKIAlWVDIwMDJQLAogCVZUMTgxMiwKKwlWVDE4MDIsCiAJQ09ERUNfVFlQRVMsCiB9OwogCisjZGVmaW5lIFZUMjAwMlBfQ09NUEFUSUJMRShzcGVjKSBcCisJKChzcGVjKS0+Y29kZWNfdHlwZSA9PSBWVDIwMDJQIHx8XAorCSAoc3BlYyktPmNvZGVjX3R5cGUgPT0gVlQxODEyIHx8XAorCSAoc3BlYyktPmNvZGVjX3R5cGUgPT0gVlQxODAyKQorCiBzdHJ1Y3QgdmlhX3NwZWMgewogCS8qIGNvZGVjIHBhcmFtZXRlcml6YXRpb24gKi8KLQlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqbWl4ZXJzWzZdOworCWNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICptaXhlcnNbNl07CiAJdW5zaWduZWQgaW50IG51bV9taXhlcnM7CiAKLQlzdHJ1Y3QgaGRhX3ZlcmIgKmluaXRfdmVyYnNbNV07CisJY29uc3Qgc3RydWN0IGhkYV92ZXJiICppbml0X3ZlcmJzWzVdOwogCXVuc2lnbmVkIGludCBudW1faXZlcmJzOwogCiAJY2hhciAqc3RyZWFtX25hbWVfYW5hbG9nOwotCXN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqc3RyZWFtX2FuYWxvZ19wbGF5YmFjazsKLQlzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKnN0cmVhbV9hbmFsb2dfY2FwdHVyZTsKKwljb25zdCBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKnN0cmVhbV9hbmFsb2dfcGxheWJhY2s7CisJY29uc3Qgc3RydWN0IGhkYV9wY21fc3RyZWFtICpzdHJlYW1fYW5hbG9nX2NhcHR1cmU7CiAKIAljaGFyICpzdHJlYW1fbmFtZV9kaWdpdGFsOwotCXN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqc3RyZWFtX2RpZ2l0YWxfcGxheWJhY2s7Ci0Jc3RydWN0IGhkYV9wY21fc3RyZWFtICpzdHJlYW1fZGlnaXRhbF9jYXB0dXJlOworCWNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqc3RyZWFtX2RpZ2l0YWxfcGxheWJhY2s7CisJY29uc3Qgc3RydWN0IGhkYV9wY21fc3RyZWFtICpzdHJlYW1fZGlnaXRhbF9jYXB0dXJlOwogCiAJLyogcGxheWJhY2sgKi8KIAlzdHJ1Y3QgaGRhX211bHRpX291dCBtdWx0aW91dDsKQEAgLTEyMyw3ICsxMjksNyBAQAogCiAJLyogY2FwdHVyZSAqLwogCXVuc2lnbmVkIGludCBudW1fYWRjX25pZHM7Ci0JaGRhX25pZF90ICphZGNfbmlkczsKKwljb25zdCBoZGFfbmlkX3QgKmFkY19uaWRzOwogCWhkYV9uaWRfdCBtdXhfbmlkc1szXTsKIAloZGFfbmlkX3QgZGlnX2luX25pZDsKIAloZGFfbmlkX3QgZGlnX2luX3BpbjsKQEAgLTE1NCw2ICsxNjAsOSBAQAogCXN0cnVjdCBkZWxheWVkX3dvcmsgdnQxNzA4X2hwX3dvcms7CiAJaW50IHZ0MTcwOF9qYWNrX2RldGVjdGVjdDsKIAlpbnQgdnQxNzA4X2hwX3ByZXNlbnQ7CisKKwl2b2lkICgqc2V0X3dpZGdldHNfcG93ZXJfc3RhdGUpKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKKwogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKIAlzdHJ1Y3QgaGRhX2xvb3BiYWNrX2NoZWNrIGxvb3BiYWNrOwogI2VuZGlmCkBAIC0yMTgsMTcgKzIyNywxOSBAQAogCQljb2RlY190eXBlID0gVlQxODEyOwogCWVsc2UgaWYgKGRldl9pZCA9PSAweDA0NDApCiAJCWNvZGVjX3R5cGUgPSBWVDE3MDhTOworCWVsc2UgaWYgKChkZXZfaWQgJiAweGZmZikgPT0gMHg0NDYpCisJCWNvZGVjX3R5cGUgPSBWVDE4MDI7CiAJZWxzZQogCQljb2RlY190eXBlID0gVU5LTk9XTjsKIAlyZXR1cm4gY29kZWNfdHlwZTsKIH07CiAKKyNkZWZpbmUgVklBX0pBQ0tfRVZFTlQJCTB4MjAKICNkZWZpbmUgVklBX0hQX0VWRU5UCQkweDAxCiAjZGVmaW5lIFZJQV9HUElPX0VWRU5UCQkweDAyCi0jZGVmaW5lIFZJQV9KQUNLX0VWRU5UCQkweDA0Ci0jZGVmaW5lIFZJQV9NT05PX0VWRU5UCQkweDA4Ci0jZGVmaW5lIFZJQV9TUEVBS0VSX0VWRU5UCTB4MTAKLSNkZWZpbmUgVklBX0JJTkRfSFBfRVZFTlQJMHgyMAorI2RlZmluZSBWSUFfTU9OT19FVkVOVAkJMHgwMworI2RlZmluZSBWSUFfU1BFQUtFUl9FVkVOVAkweDA0CisjZGVmaW5lIFZJQV9CSU5EX0hQX0VWRU5UCTB4MDUKIAogZW51bSB7CiAJVklBX0NUTF9XSURHRVRfVk9MLApAQCAtMjQ1LDcgKzI1Niw2IEBACiB9OwogCiBzdGF0aWMgdm9pZCBhbmFsb2dfbG93X2N1cnJlbnRfbW9kZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IHN0cmVhbV9pZGxlKTsKLXN0YXRpYyB2b2lkIHNldF9qYWNrX3Bvd2VyX3N0YXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKIHN0YXRpYyBpbnQgaXNfYWFfcGF0aF9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKIAogc3RhdGljIHZvaWQgdnQxNzA4X3N0YXJ0X2hwX3dvcmsoc3RydWN0IHZpYV9zcGVjICpzcGVjKQpAQCAtMjcxLDYgKzI4MSwxMiBAQAogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmc3BlYy0+dnQxNzA4X2hwX3dvcmspOwogfQogCitzdGF0aWMgdm9pZCBzZXRfd2lkZ2V0c19wb3dlcl9zdGF0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgdmlhX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpZiAoc3BlYy0+c2V0X3dpZGdldHNfcG93ZXJfc3RhdGUpCisJCXNwZWMtPnNldF93aWRnZXRzX3Bvd2VyX3N0YXRlKGNvZGVjKTsKK30KIAogc3RhdGljIGludCBhbmFsb2dfaW5wdXRfc3dpdGNoX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKQEAgLTI3OCw3ICsyOTQsNyBAQAogCWludCBjaGFuZ2UgPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfcHV0KGtjb250cm9sLCB1Y29udHJvbCk7CiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAKLQlzZXRfamFja19wb3dlcl9zdGF0ZShjb2RlYyk7CisJc2V0X3dpZGdldHNfcG93ZXJfc3RhdGUoY29kZWMpOwogCWFuYWxvZ19sb3dfY3VycmVudF9tb2RlKHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKSwgLTEpOwogCWlmIChzbmRfaGRhX2dldF9ib29sX2hpbnQoY29kZWMsICJhbmFsb2dfbG9vcGJhY2tfaHBfZGV0ZWN0IikgPT0gMSkgewogCQlpZiAoaXNfYWFfcGF0aF9tdXRlKGNvZGVjKSkKQEAgLTM5NCw1NCArNDEwLDU0IEBACiAJCQkucHV0ID0gYmluZF9waW5fc3dpdGNoX3B1dCwJCQlcCiAJCQkucHJpdmF0ZV92YWx1ZSA9IEhEQV9DT01QT1NFX0FNUF9WQUwoMCwgMywgMCwgMCkgfQogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdmlhX2NvbnRyb2xfdGVtcGxhdGVzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdmlhX2NvbnRyb2xfdGVtcGxhdGVzW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRShOVUxMLCAwLCAwLCAwKSwKIAlIREFfQ09ERUNfTVVURShOVUxMLCAwLCAwLCAwKSwKIAlBTkFMT0dfSU5QVVRfTVVURSwKIAlCSU5EX1BJTl9NVVRFLAogfTsKIAotc3RhdGljIGhkYV9uaWRfdCB2dDE3MDhfYWRjX25pZHNbMl0gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IHZ0MTcwOF9hZGNfbmlkc1syXSA9IHsKIAkvKiBBREMxLTIgKi8KIAkweDE1LCAweDI3CiB9OwogCi1zdGF0aWMgaGRhX25pZF90IHZ0MTcwOV9hZGNfbmlkc1szXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3QgdnQxNzA5X2FkY19uaWRzWzNdID0gewogCS8qIEFEQzEtMiAqLwogCTB4MTQsIDB4MTUsIDB4MTYKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3QgdnQxNzA4Ql9hZGNfbmlkc1syXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3QgdnQxNzA4Ql9hZGNfbmlkc1syXSA9IHsKIAkvKiBBREMxLTIgKi8KIAkweDEzLCAweDE0CiB9OwogCi1zdGF0aWMgaGRhX25pZF90IHZ0MTcwOFNfYWRjX25pZHNbMl0gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IHZ0MTcwOFNfYWRjX25pZHNbMl0gPSB7CiAJLyogQURDMS0yICovCiAJMHgxMywgMHgxNAogfTsKIAotc3RhdGljIGhkYV9uaWRfdCB2dDE3MDJfYWRjX25pZHNbM10gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IHZ0MTcwMl9hZGNfbmlkc1szXSA9IHsKIAkvKiBBREMxLTIgKi8KIAkweDEyLCAweDIwLCAweDFGCiB9OwogCi1zdGF0aWMgaGRhX25pZF90IHZ0MTcxOFNfYWRjX25pZHNbMl0gPSB7CitzdGF0aWMgY29uc3QgaGRhX25pZF90IHZ0MTcxOFNfYWRjX25pZHNbMl0gPSB7CiAJLyogQURDMS0yICovCiAJMHgxMCwgMHgxMQogfTsKIAotc3RhdGljIGhkYV9uaWRfdCB2dDE3MTZTX2FkY19uaWRzWzJdID0geworc3RhdGljIGNvbnN0IGhkYV9uaWRfdCB2dDE3MTZTX2FkY19uaWRzWzJdID0gewogCS8qIEFEQzEtMiAqLwogCTB4MTMsIDB4MTQKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3QgdnQyMDAyUF9hZGNfbmlkc1syXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3QgdnQyMDAyUF9hZGNfbmlkc1syXSA9IHsKIAkvKiBBREMxLTIgKi8KIAkweDEwLCAweDExCiB9OwogCi1zdGF0aWMgaGRhX25pZF90IHZ0MTgxMl9hZGNfbmlkc1syXSA9IHsKK3N0YXRpYyBjb25zdCBoZGFfbmlkX3QgdnQxODEyX2FkY19uaWRzWzJdID0gewogCS8qIEFEQzEtMiAqLwogCTB4MTAsIDB4MTEKIH07CkBAIC00NzEsNyArNDg3LDcgQEAKIAlfX3ZpYV9hZGRfY29udHJvbChzcGVjLCB0eXBlLCBuYW1lLCAwLCB2YWwpCiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqdmlhX2Nsb25lX2NvbnRyb2woc3RydWN0IHZpYV9zcGVjICpzcGVjLAotCQkJCQkJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKnRtcGwpCisJCQkJY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKnRtcGwpCiB7CiAJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXc7CiAKQEAgLTYwMiw0ODIgKzYxOCw2IEBACiAJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9qYWNrX3Bvd2VyX3N0YXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCXN0cnVjdCB2aWFfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWludCBpbXV4X2lzX3NtaXhlcjsKLQl1bnNpZ25lZCBpbnQgcGFybTsKLQotCWlmIChzcGVjLT5jb2RlY190eXBlID09IFZUMTcwMikgewotCQlpbXV4X2lzX3NtaXhlciA9IHNuZF9oZGFfY29kZWNfcmVhZCgKLQkJCWNvZGVjLCAweDEzLCAwLCBBQ19WRVJCX0dFVF9DT05ORUNUX1NFTCwgMHgwMCkgPT0gMzsKLQkJLyogaW5wdXRzICovCi0JCS8qIFBXIDEvMi81ICgxNGgvMTVoLzE4aCkgKi8KLQkJcGFybSA9IEFDX1BXUlNUX0QzOwotCQlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDE0LCAmcGFybSk7Ci0JCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MTUsICZwYXJtKTsKLQkJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgxOCwgJnBhcm0pOwotCQlpZiAoaW11eF9pc19zbWl4ZXIpCi0JCQlwYXJtID0gQUNfUFdSU1RfRDA7IC8qIFNXMCA9IHN0ZXJlbyBtaXhlciAoaWR4IDMpICovCi0JCS8qIFNXMCAoMTNoKSwgQUlXIDAvMS8yICgxMmgvMWZoLzIwaCkgKi8KLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxMywgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsCi0JCQkJICAgIHBhcm0pOwotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDEyLCAwLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwKLQkJCQkgICAgcGFybSk7Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MWYsIDAsIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLAotCQkJCSAgICBwYXJtKTsKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgyMCwgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsCi0JCQkJICAgIHBhcm0pOwotCi0JCS8qIG91dHB1dHMgKi8KLQkJLyogUFcgMy80ICgxNmgvMTdoKSAqLwotCQlwYXJtID0gQUNfUFdSU1RfRDM7Ci0JCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MTYsICZwYXJtKTsKLQkJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgxNywgJnBhcm0pOwotCQkvKiBNVzAgKDFhaCksIEFPVyAwLzEgKDEwaC8xZGgpICovCi0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MWEsIDAsIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLAotCQkJCSAgICBpbXV4X2lzX3NtaXhlciA/IEFDX1BXUlNUX0QwIDogcGFybSk7Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTAsIDAsIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLAotCQkJCSAgICBwYXJtKTsKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxZCwgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsCi0JCQkJICAgIHBhcm0pOwotCX0gZWxzZSBpZiAoc3BlYy0+Y29kZWNfdHlwZSA9PSBWVDE3MDhCXzhDSAotCQkgICB8fCBzcGVjLT5jb2RlY190eXBlID09IFZUMTcwOEJfNENICi0JCSAgIHx8IHNwZWMtPmNvZGVjX3R5cGUgPT0gVlQxNzA4UykgewotCQkvKiBTVzAgKDE3aCkgPSBzdGVyZW8gbWl4ZXIgKi8KLQkJaW50IGlzXzhjaCA9IHNwZWMtPmNvZGVjX3R5cGUgIT0gVlQxNzA4Ql80Q0g7Ci0JCWltdXhfaXNfc21peGVyID0gc25kX2hkYV9jb2RlY19yZWFkKAotCQkJY29kZWMsIDB4MTcsIDAsIEFDX1ZFUkJfR0VUX0NPTk5FQ1RfU0VMLCAweDAwKQotCQkJPT0gKChzcGVjLT5jb2RlY190eXBlID09IFZUMTcwOFMpICA/IDUgOiAwKTsKLQkJLyogaW5wdXRzICovCi0JCS8qIFBXIDEvMi81ICgxYWgvMWJoLzFlaCkgKi8KLQkJcGFybSA9IEFDX1BXUlNUX0QzOwotCQlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDFhLCAmcGFybSk7Ci0JCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MWIsICZwYXJtKTsKLQkJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgxZSwgJnBhcm0pOwotCQlpZiAoaW11eF9pc19zbWl4ZXIpCi0JCQlwYXJtID0gQUNfUFdSU1RfRDA7Ci0JCS8qIFNXMCAoMTdoKSwgQUlXIDAvMSAoMTNoLzE0aCkgKi8KLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxNywgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsCi0JCQkJICAgIHBhcm0pOwotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDEzLCAwLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwKLQkJCQkgICAgcGFybSk7Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTQsIDAsIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLAotCQkJCSAgICBwYXJtKTsKLQotCQkvKiBvdXRwdXRzICovCi0JCS8qIFBXMCAoMTloKSwgU1cxICgxOGgpLCBBT1cxICgxMWgpICovCi0JCXBhcm0gPSBBQ19QV1JTVF9EMzsKLQkJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgxOSwgJnBhcm0pOwotCQlpZiAoc3BlYy0+c21hcnQ1MV9lbmFibGVkKQotCQkJcGFybSA9IEFDX1BXUlNUX0QwOwotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDE4LCAwLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwKLQkJCQkgICAgcGFybSk7Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTEsIDAsIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLAotCQkJCSAgICBwYXJtKTsKLQotCQkvKiBQVzYgKDIyaCksIFNXMiAoMjZoKSwgQU9XMiAoMjRoKSAqLwotCQlpZiAoaXNfOGNoKSB7Ci0JCQlwYXJtID0gQUNfUFdSU1RfRDM7Ci0JCQlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDIyLCAmcGFybSk7Ci0JCQlpZiAoc3BlYy0+c21hcnQ1MV9lbmFibGVkKQotCQkJCXBhcm0gPSBBQ19QV1JTVF9EMDsKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MjYsIDAsCi0JCQkJCSAgICBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDI0LCAwLAotCQkJCQkgICAgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOwotCQl9Ci0KLQkJLyogUFcgMy80LzcgKDFjaC8xZGgvMjNoKSAqLwotCQlwYXJtID0gQUNfUFdSU1RfRDM7Ci0JCS8qIGZvcmNlIHRvIEQwIGZvciBpbnRlcm5hbCBTcGVha2VyICovCi0JCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MWMsICZwYXJtKTsKLQkJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgxZCwgJnBhcm0pOwotCQlpZiAoaXNfOGNoKQotCQkJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgyMywgJnBhcm0pOwotCQkvKiBNVzAgKDE2aCksIFN3MyAoMjdoKSwgQU9XIDAvMyAoMTBoLzI1aCkgKi8KLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxNiwgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsCi0JCQkJICAgIGltdXhfaXNfc21peGVyID8gQUNfUFdSU1RfRDAgOiBwYXJtKTsKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxMCwgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsCi0JCQkJICAgIHBhcm0pOwotCQlpZiAoaXNfOGNoKSB7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDI1LCAwLAotCQkJCQkgICAgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOwotCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgyNywgMCwKLQkJCQkJICAgIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBwYXJtKTsKLQkJfQotCX0gIGVsc2UgaWYgKHNwZWMtPmNvZGVjX3R5cGUgPT0gVlQxNzE4UykgewotCQkvKiBNVVg2ICgxZWgpID0gc3RlcmVvIG1peGVyICovCi0JCWltdXhfaXNfc21peGVyID0gc25kX2hkYV9jb2RlY19yZWFkKAotCQkJY29kZWMsIDB4MWUsIDAsIEFDX1ZFUkJfR0VUX0NPTk5FQ1RfU0VMLCAweDAwKSA9PSA1OwotCQkvKiBpbnB1dHMgKi8KLQkJLyogUFcgNS82LzcgKDI5aC8yYWgvMmJoKSAqLwotCQlwYXJtID0gQUNfUFdSU1RfRDM7Ci0JCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MjksICZwYXJtKTsKLQkJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgyYSwgJnBhcm0pOwotCQlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDJiLCAmcGFybSk7Ci0JCWlmIChpbXV4X2lzX3NtaXhlcikKLQkJCXBhcm0gPSBBQ19QV1JTVF9EMDsKLQkJLyogTVVYNi83ICgxZWgvMWZoKSwgQUlXIDAvMSAoMTBoLzExaCkgKi8KLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxZSwgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsCi0JCQkJICAgIHBhcm0pOwotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDFmLCAwLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwKLQkJCQkgICAgcGFybSk7Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTAsIDAsIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLAotCQkJCSAgICBwYXJtKTsKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxMSwgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsCi0JCQkJICAgIHBhcm0pOwotCi0JCS8qIG91dHB1dHMgKi8KLQkJLyogUFczICgyN2gpLCBNVzIgKDFhaCksIEFPVzMgKGJoKSAqLwotCQlwYXJtID0gQUNfUFdSU1RfRDM7Ci0JCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MjcsICZwYXJtKTsKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxYSwgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsCi0JCQkJICAgIHBhcm0pOwotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweGIsIDAsIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLAotCQkJCSAgICBwYXJtKTsKLQotCQkvKiBQVzIgKDI2aCksIEFPVzIgKGFoKSAqLwotCQlwYXJtID0gQUNfUFdSU1RfRDM7Ci0JCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MjYsICZwYXJtKTsKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHhhLCAwLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwKLQkJCQkgICAgcGFybSk7Ci0KLQkJLyogUFcwLzEgKDI0aC8yNWgpICovCi0JCXBhcm0gPSBBQ19QV1JTVF9EMzsKLQkJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgyNCwgJnBhcm0pOwotCQlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDI1LCAmcGFybSk7Ci0JCWlmICghc3BlYy0+aHBfaW5kZXBlbmRlbnRfbW9kZSkgLyogY2hlY2sgZm9yIHJlZGlyZWN0ZWQgSFAgKi8KLQkJCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MjgsICZwYXJtKTsKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHg4LCAwLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwKLQkJCQkgICAgcGFybSk7Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4OSwgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsCi0JCQkJICAgIHBhcm0pOwotCQkvKiBNVzkgKDIxaCksIE13MiAoMWFoKSwgQU9XMCAoOGgpICovCi0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MjEsIDAsIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLAotCQkJCSAgICBpbXV4X2lzX3NtaXhlciA/IEFDX1BXUlNUX0QwIDogcGFybSk7Ci0JCWlmIChzcGVjLT5ocF9pbmRlcGVuZGVudF9tb2RlKSB7Ci0JCQkvKiBQVzQgKDI4aCksIE1XMyAoMWJoKSwgTVVYMSgzNGgpLCBBT1c0IChjaCkgKi8KLQkJCXBhcm0gPSBBQ19QV1JTVF9EMzsKLQkJCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MjgsICZwYXJtKTsKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MWIsIDAsCi0JCQkJCSAgICBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDM0LCAwLAotCQkJCQkgICAgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOwotCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHhjLCAwLAotCQkJCQkgICAgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOwotCQl9Ci0JfSBlbHNlIGlmIChzcGVjLT5jb2RlY190eXBlID09IFZUMTcxNlMpIHsKLQkJdW5zaWduZWQgaW50IG1vbm9fb3V0LCBwcmVzZW50OwotCQkvKiBTVzAgKDE3aCkgPSBzdGVyZW8gbWl4ZXIgKi8KLQkJaW11eF9pc19zbWl4ZXIgPSBzbmRfaGRhX2NvZGVjX3JlYWQoCi0JCQljb2RlYywgMHgxNywgMCwgQUNfVkVSQl9HRVRfQ09OTkVDVF9TRUwsIDB4MDApID09ICA1OwotCQkvKiBpbnB1dHMgKi8KLQkJLyogUFcgMS8yLzUgKDFhaC8xYmgvMWVoKSAqLwotCQlwYXJtID0gQUNfUFdSU1RfRDM7Ci0JCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MWEsICZwYXJtKTsKLQkJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgxYiwgJnBhcm0pOwotCQlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDFlLCAmcGFybSk7Ci0JCWlmIChpbXV4X2lzX3NtaXhlcikKLQkJCXBhcm0gPSBBQ19QV1JTVF9EMDsKLQkJLyogU1cwICgxN2gpLCBBSVcwKDEzaCkgKi8KLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxNywgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsCi0JCQkJICAgIHBhcm0pOwotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDEzLCAwLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwKLQkJCQkgICAgcGFybSk7Ci0KLQkJcGFybSA9IEFDX1BXUlNUX0QzOwotCQlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDFlLCAmcGFybSk7Ci0JCS8qIFBXMTEgKDIyaCkgKi8KLQkJaWYgKHNwZWMtPmRtaWNfZW5hYmxlZCkKLQkJCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MjIsICZwYXJtKTsKLQkJZWxzZQotCQkJc25kX2hkYV9jb2RlY193cml0ZSgKLQkJCQljb2RlYywgMHgyMiwgMCwKLQkJCQlBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgQUNfUFdSU1RfRDMpOwotCi0JCS8qIFNXMigyNmgpLCBBSVcxKDE0aCkgKi8KLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgyNiwgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsCi0JCQkJICAgIHBhcm0pOwotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDE0LCAwLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwKLQkJCQkgICAgcGFybSk7Ci0KLQkJLyogb3V0cHV0cyAqLwotCQkvKiBQVzAgKDE5aCksIFNXMSAoMThoKSwgQU9XMSAoMTFoKSAqLwotCQlwYXJtID0gQUNfUFdSU1RfRDM7Ci0JCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MTksICZwYXJtKTsKLQkJLyogU21hcnQgNS4xIFBXMigxYmgpICovCi0JCWlmIChzcGVjLT5zbWFydDUxX2VuYWJsZWQpCi0JCQlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDFiLCAmcGFybSk7Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTgsIDAsIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLAotCQkJCSAgICBwYXJtKTsKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxMSwgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsCi0JCQkJICAgIHBhcm0pOwotCi0JCS8qIFBXNyAoMjNoKSwgU1czICgyN2gpLCBBT1czICgyNWgpICovCi0JCXBhcm0gPSBBQ19QV1JTVF9EMzsKLQkJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgyMywgJnBhcm0pOwotCQkvKiBTbWFydCA1LjEgUFcxKDFhaCkgKi8KLQkJaWYgKHNwZWMtPnNtYXJ0NTFfZW5hYmxlZCkKLQkJCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MWEsICZwYXJtKTsKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgyNywgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsCi0JCQkJICAgIHBhcm0pOwotCi0JCS8qIFNtYXJ0IDUuMSBQVzUoMWVoKSAqLwotCQlpZiAoc3BlYy0+c21hcnQ1MV9lbmFibGVkKQotCQkJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgxZSwgJnBhcm0pOwotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDI1LCAwLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwKLQkJCQkgICAgcGFybSk7Ci0KLQkJLyogTW9ubyBvdXQgKi8KLQkJLyogU1c0KDI4aCktPk1XMSgyOWgpLT4gUFcxMiAoMmFoKSovCi0JCXByZXNlbnQgPSBzbmRfaGRhX2phY2tfZGV0ZWN0KGNvZGVjLCAweDFjKTsKLQkJaWYgKHByZXNlbnQpCi0JCQltb25vX291dCA9IDA7Ci0JCWVsc2UgewotCQkJcHJlc2VudCA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIDB4MWQpOwotCQkJaWYgKCFzcGVjLT5ocF9pbmRlcGVuZGVudF9tb2RlICYmIHByZXNlbnQpCi0JCQkJbW9ub19vdXQgPSAwOwotCQkJZWxzZQotCQkJCW1vbm9fb3V0ID0gMTsKLQkJfQotCQlwYXJtID0gbW9ub19vdXQgPyBBQ19QV1JTVF9EMCA6IEFDX1BXUlNUX0QzOwotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDI4LCAwLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwKLQkJCQkgICAgcGFybSk7Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MjksIDAsIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLAotCQkJCSAgICBwYXJtKTsKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgyYSwgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsCi0JCQkJICAgIHBhcm0pOwotCi0JCS8qIFBXIDMvNCAoMWNoLzFkaCkgKi8KLQkJcGFybSA9IEFDX1BXUlNUX0QzOwotCQlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDFjLCAmcGFybSk7Ci0JCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MWQsICZwYXJtKTsKLQkJLyogSFAgSW5kZXBlbmRlbnQgTW9kZSwgcG93ZXIgb24gQU9XMyAqLwotCQlpZiAoc3BlYy0+aHBfaW5kZXBlbmRlbnRfbW9kZSkKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MjUsIDAsCi0JCQkJCSAgICBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7Ci0KLQkJLyogZm9yY2UgdG8gRDAgZm9yIGludGVybmFsIFNwZWFrZXIgKi8KLQkJLyogTVcwICgxNmgpLCBBT1cwICgxMGgpICovCi0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTYsIDAsIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLAotCQkJCSAgICBpbXV4X2lzX3NtaXhlciA/IEFDX1BXUlNUX0QwIDogcGFybSk7Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTAsIDAsIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLAotCQkJCSAgICBtb25vX291dCA/IEFDX1BXUlNUX0QwIDogcGFybSk7Ci0JfSBlbHNlIGlmIChzcGVjLT5jb2RlY190eXBlID09IFZUMjAwMlApIHsKLQkJdW5zaWduZWQgaW50IHByZXNlbnQ7Ci0JCS8qIE1VWDkgKDFlaCkgPSBzdGVyZW8gbWl4ZXIgKi8KLQkJaW11eF9pc19zbWl4ZXIgPSBzbmRfaGRhX2NvZGVjX3JlYWQoCi0JCQljb2RlYywgMHgxZSwgMCwgQUNfVkVSQl9HRVRfQ09OTkVDVF9TRUwsIDB4MDApID09IDM7Ci0JCS8qIGlucHV0cyAqLwotCQkvKiBQVyA1LzYvNyAoMjloLzJhaC8yYmgpICovCi0JCXBhcm0gPSBBQ19QV1JTVF9EMzsKLQkJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgyOSwgJnBhcm0pOwotCQlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDJhLCAmcGFybSk7Ci0JCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MmIsICZwYXJtKTsKLQkJaWYgKGltdXhfaXNfc21peGVyKQotCQkJcGFybSA9IEFDX1BXUlNUX0QwOwotCQkvKiBNVVg5LzEwICgxZWgvMWZoKSwgQUlXIDAvMSAoMTBoLzExaCkgKi8KLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxZSwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOwotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDFmLCAwLAotCQkJCSAgICBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTAsIDAsCi0JCQkJICAgIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBwYXJtKTsKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxMSwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOwotCi0JCS8qIG91dHB1dHMgKi8KLQkJLyogQU9XMCAoOGgpKi8KLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHg4LCAwLAotCQkJCSAgICBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgQUNfUFdSU1RfRDApOwotCi0JCS8qIFBXNCAoMjZoKSwgTVc0ICgxY2gpLCBNVVg0KDM3aCkgKi8KLQkJcGFybSA9IEFDX1BXUlNUX0QzOwotCQlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDI2LCAmcGFybSk7Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MWMsIDAsCi0JCQkJICAgIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBwYXJtKTsKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgzNywKLQkJCQkgICAgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOwotCi0JCS8qIFBXMSAoMjVoKSwgTVcxICgxOWgpLCBNVVgxKDM1aCksIEFPVzEgKDloKSAqLwotCQlwYXJtID0gQUNfUFdSU1RfRDM7Ci0JCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MjUsICZwYXJtKTsKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxOSwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOwotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDM1LCAwLAotCQkJCSAgICBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7Ci0JCWlmIChzcGVjLT5ocF9pbmRlcGVuZGVudF9tb2RlKQl7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDksIDAsCi0JCQkJCSAgICBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7Ci0JCX0KLQotCQkvKiBDbGFzcy1EICovCi0JCS8qIFBXMCAoMjRoKSwgTVcwKDE4aCksIE1VWDAoMzRoKSAqLwotCQlwcmVzZW50ID0gc25kX2hkYV9qYWNrX2RldGVjdChjb2RlYywgMHgyNSk7Ci0JCXBhcm0gPSBBQ19QV1JTVF9EMzsKLQkJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgyNCwgJnBhcm0pOwotCQlpZiAocHJlc2VudCkgewotCQkJc25kX2hkYV9jb2RlY193cml0ZSgKLQkJCQljb2RlYywgMHgxOCwgMCwKLQkJCQlBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgQUNfUFdSU1RfRDMpOwotCQkJc25kX2hkYV9jb2RlY193cml0ZSgKLQkJCQljb2RlYywgMHgzNCwgMCwKLQkJCQlBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgQUNfUFdSU1RfRDMpOwotCQl9IGVsc2UgewotCQkJc25kX2hkYV9jb2RlY193cml0ZSgKLQkJCQljb2RlYywgMHgxOCwgMCwKLQkJCQlBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgQUNfUFdSU1RfRDApOwotCQkJc25kX2hkYV9jb2RlY193cml0ZSgKLQkJCQljb2RlYywgMHgzNCwgMCwKLQkJCQlBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgQUNfUFdSU1RfRDApOwotCQl9Ci0KLQkJLyogTW9ubyBPdXQgKi8KLQkJLyogUFcxNSAoMzFoKSwgTVc4KDE3aCksIE1VWDgoM2JoKSAqLwotCQlwcmVzZW50ID0gc25kX2hkYV9qYWNrX2RldGVjdChjb2RlYywgMHgyNik7Ci0JCXBhcm0gPSBBQ19QV1JTVF9EMzsKLQkJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgzMSwgJnBhcm0pOwotCQlpZiAocHJlc2VudCkgewotCQkJc25kX2hkYV9jb2RlY193cml0ZSgKLQkJCQljb2RlYywgMHgxNywgMCwKLQkJCQlBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgQUNfUFdSU1RfRDMpOwotCQkJc25kX2hkYV9jb2RlY193cml0ZSgKLQkJCQljb2RlYywgMHgzYiwgMCwKLQkJCQlBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgQUNfUFdSU1RfRDMpOwotCQl9IGVsc2UgewotCQkJc25kX2hkYV9jb2RlY193cml0ZSgKLQkJCQljb2RlYywgMHgxNywgMCwKLQkJCQlBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgQUNfUFdSU1RfRDApOwotCQkJc25kX2hkYV9jb2RlY193cml0ZSgKLQkJCQljb2RlYywgMHgzYiwgMCwKLQkJCQlBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgQUNfUFdSU1RfRDApOwotCQl9Ci0KLQkJLyogTVc5ICgyMWgpICovCi0JCWlmIChpbXV4X2lzX3NtaXhlciB8fCAhaXNfYWFfcGF0aF9tdXRlKGNvZGVjKSkKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoCi0JCQkJY29kZWMsIDB4MjEsIDAsCi0JCQkJQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIEFDX1BXUlNUX0QwKTsKLQkJZWxzZQotCQkJc25kX2hkYV9jb2RlY193cml0ZSgKLQkJCQljb2RlYywgMHgyMSwgMCwKLQkJCQlBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgQUNfUFdSU1RfRDMpOwotCX0gZWxzZSBpZiAoc3BlYy0+Y29kZWNfdHlwZSA9PSBWVDE4MTIpIHsKLQkJdW5zaWduZWQgaW50IHByZXNlbnQ7Ci0JCS8qIE1VWDEwICgxZWgpID0gc3RlcmVvIG1peGVyICovCi0JCWltdXhfaXNfc21peGVyID0gc25kX2hkYV9jb2RlY19yZWFkKAotCQkJY29kZWMsIDB4MWUsIDAsIEFDX1ZFUkJfR0VUX0NPTk5FQ1RfU0VMLCAweDAwKSA9PSA1OwotCQkvKiBpbnB1dHMgKi8KLQkJLyogUFcgNS82LzcgKDI5aC8yYWgvMmJoKSAqLwotCQlwYXJtID0gQUNfUFdSU1RfRDM7Ci0JCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MjksICZwYXJtKTsKLQkJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgyYSwgJnBhcm0pOwotCQlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDJiLCAmcGFybSk7Ci0JCWlmIChpbXV4X2lzX3NtaXhlcikKLQkJCXBhcm0gPSBBQ19QV1JTVF9EMDsKLQkJLyogTVVYMTAvMTEgKDFlaC8xZmgpLCBBSVcgMC8xICgxMGgvMTFoKSAqLwotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDFlLCAwLAotCQkJCSAgICBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MWYsIDAsCi0JCQkJICAgIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBwYXJtKTsKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxMCwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOwotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDExLCAwLAotCQkJCSAgICBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7Ci0KLQkJLyogb3V0cHV0cyAqLwotCQkvKiBBT1cwICg4aCkqLwotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDgsIDAsCi0JCQkJICAgIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBBQ19QV1JTVF9EMCk7Ci0KLQkJLyogUFc0ICgyOGgpLCBNVzQgKDE4aCksIE1VWDQoMzhoKSAqLwotCQlwYXJtID0gQUNfUFdSU1RfRDM7Ci0JCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MjgsICZwYXJtKTsKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxOCwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOwotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDM4LCAwLAotCQkJCSAgICBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7Ci0KLQkJLyogUFcxICgyNWgpLCBNVzEgKDE1aCksIE1VWDEoMzVoKSwgQU9XMSAoOWgpICovCi0JCXBhcm0gPSBBQ19QV1JTVF9EMzsKLQkJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgyNSwgJnBhcm0pOwotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDE1LCAwLAotCQkJCSAgICBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MzUsIDAsCi0JCQkJICAgIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBwYXJtKTsKLQkJaWYgKHNwZWMtPmhwX2luZGVwZW5kZW50X21vZGUpCXsKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4OSwgMCwKLQkJCQkJICAgIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBwYXJtKTsKLQkJfQotCi0JCS8qIEludGVybmFsIFNwZWFrZXIgKi8KLQkJLyogUFcwICgyNGgpLCBNVzAoMTRoKSwgTVVYMCgzNGgpICovCi0JCXByZXNlbnQgPSBzbmRfaGRhX2phY2tfZGV0ZWN0KGNvZGVjLCAweDI1KTsKLQkJcGFybSA9IEFDX1BXUlNUX0QzOwotCQlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDI0LCAmcGFybSk7Ci0JCWlmIChwcmVzZW50KSB7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDE0LCAwLAotCQkJCQkgICAgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsCi0JCQkJCSAgICBBQ19QV1JTVF9EMyk7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDM0LCAwLAotCQkJCQkgICAgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsCi0JCQkJCSAgICBBQ19QV1JTVF9EMyk7Ci0JCX0gZWxzZSB7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDE0LCAwLAotCQkJCQkgICAgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsCi0JCQkJCSAgICBBQ19QV1JTVF9EMCk7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDM0LCAwLAotCQkJCQkgICAgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsCi0JCQkJCSAgICBBQ19QV1JTVF9EMCk7Ci0JCX0KLQkJLyogTW9ubyBPdXQgKi8KLQkJLyogUFcxMyAoMzFoKSwgTVcxMygxY2gpLCBNVVgxMygzY2gpLCBNVzE0KDNlaCkgKi8KLQkJcHJlc2VudCA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIDB4MjgpOwotCQlwYXJtID0gQUNfUFdSU1RfRDM7Ci0JCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MzEsICZwYXJtKTsKLQkJaWYgKHByZXNlbnQpIHsKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MWMsIDAsCi0JCQkJCSAgICBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwKLQkJCQkJICAgIEFDX1BXUlNUX0QzKTsKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4M2MsIDAsCi0JCQkJCSAgICBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwKLQkJCQkJICAgIEFDX1BXUlNUX0QzKTsKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4M2UsIDAsCi0JCQkJCSAgICBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwKLQkJCQkJICAgIEFDX1BXUlNUX0QzKTsKLQkJfSBlbHNlIHsKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MWMsIDAsCi0JCQkJCSAgICBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwKLQkJCQkJICAgIEFDX1BXUlNUX0QwKTsKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4M2MsIDAsCi0JCQkJCSAgICBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwKLQkJCQkJICAgIEFDX1BXUlNUX0QwKTsKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4M2UsIDAsCi0JCQkJCSAgICBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwKLQkJCQkJICAgIEFDX1BXUlNUX0QwKTsKLQkJfQotCi0JCS8qIFBXMTUgKDMzaCksIE1XMTUgKDFkaCksIE1VWDE1KDNkaCkgKi8KLQkJcGFybSA9IEFDX1BXUlNUX0QzOwotCQlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDMzLCAmcGFybSk7Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MWQsIDAsCi0JCQkJICAgIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBwYXJtKTsKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgzZCwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOwotCi0JCS8qIE1XOSAoMjFoKSAqLwotCQlpZiAoaW11eF9pc19zbWl4ZXIgfHwgIWlzX2FhX3BhdGhfbXV0ZShjb2RlYykpCi0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKAotCQkJCWNvZGVjLCAweDIxLCAwLAotCQkJCUFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBBQ19QV1JTVF9EMCk7Ci0JCWVsc2UKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoCi0JCQkJY29kZWMsIDB4MjEsIDAsCi0JCQkJQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIEFDX1BXUlNUX0QzKTsKLQl9Ci19Ci0KIC8qCiAgKiBpbnB1dCBNVVggaGFuZGxpbmcKICAqLwpAQCAtMTEyMCw3ICs2NjAsNyBAQAogCQkJCSAgICAgc3BlYy0+bXV4X25pZHNbYWRjX2lkeF0sCiAJCQkJICAgICAmc3BlYy0+Y3VyX211eFthZGNfaWR4XSk7CiAJLyogdXBkYXRlIGphY2sgcG93ZXIgc3RhdGUgKi8KLQlzZXRfamFja19wb3dlcl9zdGF0ZShjb2RlYyk7CisJc2V0X3dpZGdldHNfcG93ZXJfc3RhdGUoY29kZWMpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTExNjgsNiArNzA4LDkgQEAKIAljYXNlIFZUMTcwOV8xMENIOglyZXR1cm4gMHgyOTsKIAljYXNlIFZUMTcwOEJfOENIOgkvKiBmYWxsIHRocnUgKi8KIAljYXNlIFZUMTcwOFM6CQlyZXR1cm4gMHgyNzsKKwljYXNlIFZUMjAwMlA6CQlyZXR1cm4gMHgxOTsKKwljYXNlIFZUMTgwMjoJCXJldHVybiAweDE1OworCWNhc2UgVlQxODEyOgkJcmV0dXJuIDB4MTU7CiAJZGVmYXVsdDoJCXJldHVybiAwOwogCX0KIH0KQEAgLTExNzYsMTMgKzcxOSwyMiBAQAogewogCS8qIG11dGUgc2lkZSBjaGFubmVsICovCiAJc3RydWN0IHZpYV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JdW5zaWduZWQgaW50IHBhcm0gPSBzcGVjLT5ocF9pbmRlcGVuZGVudF9tb2RlCi0JCT8gQU1QX09VVF9NVVRFIDogQU1QX09VVF9VTk1VVEU7CisJdW5zaWduZWQgaW50IHBhcm07CiAJaGRhX25pZF90IHN3MyA9IHNpZGVfbXV0ZV9jaGFubmVsKHNwZWMpOwogCi0JaWYgKHN3MykKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgc3czLCAwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAotCQkJCSAgICBwYXJtKTsKKwlpZiAoc3czKSB7CisJCWlmIChWVDIwMDJQX0NPTVBBVElCTEUoc3BlYykpCisJCQlwYXJtID0gc3BlYy0+aHBfaW5kZXBlbmRlbnRfbW9kZSA/CisJCQkgICAgICAgQU1QX0lOX01VVEUoMSkgOiBBTVBfSU5fVU5NVVRFKDEpOworCQllbHNlCisJCQlwYXJtID0gc3BlYy0+aHBfaW5kZXBlbmRlbnRfbW9kZSA/CisJCQkgICAgICAgQU1QX09VVF9NVVRFIDogQU1QX09VVF9VTk1VVEU7CisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHN3MywgMCwKKwkJCQkgICAgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgcGFybSk7CisJCWlmIChzcGVjLT5jb2RlY190eXBlID09IFZUMTgxMikKKwkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MWQsIDAsCisJCQkJCSAgICBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBwYXJtKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyMTcsMTkgKzc2OSwxOCBAQAogCSAgICB8fCBzcGVjLT5jb2RlY190eXBlID09IFZUMTcwMgogCSAgICB8fCBzcGVjLT5jb2RlY190eXBlID09IFZUMTcxOFMKIAkgICAgfHwgc3BlYy0+Y29kZWNfdHlwZSA9PSBWVDE3MTZTCi0JICAgIHx8IHNwZWMtPmNvZGVjX3R5cGUgPT0gVlQyMDAyUAotCSAgICB8fCBzcGVjLT5jb2RlY190eXBlID09IFZUMTgxMikgeworCSAgICB8fCBWVDIwMDJQX0NPTVBBVElCTEUoc3BlYykpIHsKIAkJYWN0aXZhdGVfY3RsKGNvZGVjLCAiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsCiAJCQkgICAgIHNwZWMtPmhwX2luZGVwZW5kZW50X21vZGUpOwogCQlhY3RpdmF0ZV9jdGwoY29kZWMsICJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwKIAkJCSAgICAgc3BlYy0+aHBfaW5kZXBlbmRlbnRfbW9kZSk7CiAJfQogCS8qIHVwZGF0ZSBqYWNrIHBvd2VyIHN0YXRlICovCi0Jc2V0X2phY2tfcG93ZXJfc3RhdGUoY29kZWMpOworCXNldF93aWRnZXRzX3Bvd2VyX3N0YXRlKGNvZGVjKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHZpYV9ocF9taXhlclsyXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB2aWFfaHBfbWl4ZXJbMl0gPSB7CiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiSW5kZXBlbmRlbnQgSFAiLApAQCAtMTI1Niw2ICs4MDcsNyBAQAogCQluaWQgPSAweDM0OwogCQlicmVhazsKIAljYXNlIFZUMjAwMlA6CisJY2FzZSBWVDE4MDI6CiAJCW5pZCA9IDB4MzU7CiAJCWJyZWFrOwogCWNhc2UgVlQxODEyOgpAQCAtMTQ0NywxMSArOTk5LDExIEBACiAJCX0KIAl9CiAJc3BlYy0+c21hcnQ1MV9lbmFibGVkID0gKnVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlOwotCXNldF9qYWNrX3Bvd2VyX3N0YXRlKGNvZGVjKTsKKwlzZXRfd2lkZ2V0c19wb3dlcl9zdGF0ZShjb2RlYyk7CiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB2aWFfc21hcnQ1MV9taXhlclsyXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB2aWFfc21hcnQ1MV9taXhlclsyXSA9IHsKIAl7CiAJIC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCSAubmFtZSA9ICJTbWFydCA1LjEiLApAQCAtMTQ3Myw2ICsxMDI1LDExIEBACiAJaGRhX25pZF90IG5pZDsKIAlpbnQgaTsKIAorCWlmICghY2ZnKQorCQlyZXR1cm4gMDsKKwlpZiAoY2ZnLT5saW5lX291dHMgPiAyKQorCQlyZXR1cm4gMDsKKwogCWtuZXcgPSB2aWFfY2xvbmVfY29udHJvbChzcGVjLCAmdmlhX3NtYXJ0NTFfbWl4ZXJbMF0pOwogCWlmIChrbmV3ID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTQ5Miw3ICsxMDQ5LDcgQEAKIH0KIAogLyogY2FwdHVyZSBtaXhlciBlbGVtZW50cyAqLwotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHZ0MTcwOF9jYXB0dXJlX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdnQxNzA4X2NhcHR1cmVfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MTUsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDE1LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMSwgMHgyNywgMHgwLCBIREFfSU5QVVQpLApAQCAtMTU0Myw2ICsxMTAwLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBWVDIwMDJQOgogCWNhc2UgVlQxODEyOgorCWNhc2UgVlQxODAyOgogCQluaWRfbWl4ZXIgPSAweDIxOwogCQlzdGFydF9pZHggPSAwOwogCQllbmRfaWR4ID0gMjsKQEAgLTE2MDcsNiArMTE2NSw3IEBACiAJCWJyZWFrOwogCWNhc2UgVlQyMDAyUDoKIAljYXNlIFZUMTgxMjoKKwljYXNlIFZUMTgwMjoKIAkJdmVyYiA9IDB4ZjkzOwogCQlwYXJtID0gZW5hYmxlID8gMHgwMCA6IDB4ZTA7IC8qIDB4MDA6IDQvNDB4LCAweGUwOiAxeCAqLwogCQlicmVhazsKQEAgLTE2MjAsNyArMTE3OSw3IEBACiAvKgogICogZ2VuZXJpYyBpbml0aWFsaXphdGlvbiBvZiBBREMsIGlucHV0IG1peGVycyBhbmQgb3V0cHV0IG1peGVycwogICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIHZ0MTcwOF92b2x1bWVfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiB2dDE3MDhfdm9sdW1lX2luaXRfdmVyYnNbXSA9IHsKIAkvKgogCSAqIFVubXV0ZSBBREMwLTEgYW5kIHNldCB0aGUgZGVmYXVsdCBpbnB1dCB0byBtaWMtaW4KIAkgKi8KQEAgLTE2NTAsNiArMTIwOSw4IEBACiAJezB4MjAsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAwfSwKIAkvKiBQVzkgT3V0cHV0IGVuYWJsZSAqLwogCXsweDI1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4NDB9LAorCS8qIHBvd2VyIGRvd24gamFjayBkZXRlY3QgZnVuY3Rpb24gKi8KKwl7MHgxLCAweGY4MSwgMHgxfSwKIAl7IH0KIH07CiAKQEAgLTE2NzIsNyArMTIzMyw3IEBACiB7CiAJc3RydWN0IHZpYV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3RydWN0IGhkYV9tdWx0aV9vdXQgKm1vdXQgPSAmc3BlYy0+bXVsdGlvdXQ7Ci0JaGRhX25pZF90ICpuaWRzID0gbW91dC0+ZGFjX25pZHM7CisJY29uc3QgaGRhX25pZF90ICpuaWRzID0gbW91dC0+ZGFjX25pZHM7CiAJaW50IGNocyA9IHN1YnN0cmVhbS0+cnVudGltZS0+Y2hhbm5lbHM7CiAJaW50IGk7CiAKQEAgLTE3NDEsNyArMTMwMiw3IEBACiB7CiAJc3RydWN0IHZpYV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3RydWN0IGhkYV9tdWx0aV9vdXQgKm1vdXQgPSAmc3BlYy0+bXVsdGlvdXQ7Ci0JaGRhX25pZF90ICpuaWRzID0gbW91dC0+ZGFjX25pZHM7CisJY29uc3QgaGRhX25pZF90ICpuaWRzID0gbW91dC0+ZGFjX25pZHM7CiAKIAlpZiAoc3Vic3RyZWFtLT5udW1iZXIgPT0gMCkKIAkJcGxheWJhY2tfbXVsdGlfcGNtX3ByZXBfMChjb2RlYywgc3RyZWFtX3RhZywgZm9ybWF0LApAQCAtMTc2Miw3ICsxMzIzLDcgQEAKIHsKIAlzdHJ1Y3QgdmlhX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlzdHJ1Y3QgaGRhX211bHRpX291dCAqbW91dCA9ICZzcGVjLT5tdWx0aW91dDsKLQloZGFfbmlkX3QgKm5pZHMgPSBtb3V0LT5kYWNfbmlkczsKKwljb25zdCBoZGFfbmlkX3QgKm5pZHMgPSBtb3V0LT5kYWNfbmlkczsKIAlpbnQgaTsKIAogCWlmIChzdWJzdHJlYW0tPm51bWJlciA9PSAwKSB7CkBAIC0xODYwLDcgKzE0MjEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIHZ0MTcwOF9wY21fYW5hbG9nX3BsYXliYWNrID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSB2dDE3MDhfcGNtX2FuYWxvZ19wbGF5YmFjayA9IHsKIAkuc3Vic3RyZWFtcyA9IDIsCiAJLmNoYW5uZWxzX21pbiA9IDIsCiAJLmNoYW5uZWxzX21heCA9IDgsCkBAIC0xODcyLDcgKzE0MzMsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIHZ0MTcwOF9wY21fYW5hbG9nX3MxNl9wbGF5YmFjayA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gdnQxNzA4X3BjbV9hbmFsb2dfczE2X3BsYXliYWNrID0gewogCS5zdWJzdHJlYW1zID0gMiwKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gOCwKQEAgLTE4ODksNyArMTQ1MCw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gdnQxNzA4X3BjbV9hbmFsb2dfY2FwdHVyZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gdnQxNzA4X3BjbV9hbmFsb2dfY2FwdHVyZSA9IHsKIAkuc3Vic3RyZWFtcyA9IDIsCiAJLmNoYW5uZWxzX21pbiA9IDIsCiAJLmNoYW5uZWxzX21heCA9IDIsCkBAIC0xOTAwLDcgKzE0NjEsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIHZ0MTcwOF9wY21fZGlnaXRhbF9wbGF5YmFjayA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gdnQxNzA4X3BjbV9kaWdpdGFsX3BsYXliYWNrID0gewogCS5zdWJzdHJlYW1zID0gMSwKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gMiwKQEAgLTE5MTMsNyArMTQ3NCw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gdnQxNzA4X3BjbV9kaWdpdGFsX2NhcHR1cmUgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9wY21fc3RyZWFtIHZ0MTcwOF9wY21fZGlnaXRhbF9jYXB0dXJlID0gewogCS5zdWJzdHJlYW1zID0gMSwKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gMiwKQEAgLTE5MjMsNyArMTQ4NCw3IEBACiB7CiAJc3RydWN0IHZpYV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bDsKLQlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa25ldzsKKwljb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa25ldzsKIAlpbnQgZXJyLCBpOwogCiAJZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9taXhlcnM7IGkrKykgewpAQCAtMTk3MSw3ICsxNTMyLDcgQEAKIAl9CiAKIAkvKiBpbml0IHBvd2VyIHN0YXRlcyAqLwotCXNldF9qYWNrX3Bvd2VyX3N0YXRlKGNvZGVjKTsKKwlzZXRfd2lkZ2V0c19wb3dlcl9zdGF0ZShjb2RlYyk7CiAJYW5hbG9nX2xvd19jdXJyZW50X21vZGUoY29kZWMsIDEpOwogCiAJdmlhX2ZyZWVfa2N0bHMoY29kZWMpOyAvKiBubyBsb25nZXIgbmVlZGVkICovCkBAIC0yMTM1LDcgKzE2OTYsNyBAQAogCXVuc2lnbmVkIGludCBocF9wcmVzZW50OwogCXN0cnVjdCB2aWFfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCi0JaWYgKHNwZWMtPmNvZGVjX3R5cGUgIT0gVlQyMDAyUCAmJiBzcGVjLT5jb2RlY190eXBlICE9IFZUMTgxMikKKwlpZiAoIVZUMjAwMlBfQ09NUEFUSUJMRShzcGVjKSkKIAkJcmV0dXJuOwogCiAJaHBfcHJlc2VudCA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIHNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSk7CkBAIC0yMTk0LDE3ICsxNzU1LDIxIEBACiAJCQkJICB1bnNpZ25lZCBpbnQgcmVzKQogewogCXJlcyA+Pj0gMjY7Ci0JaWYgKHJlcyAmIFZJQV9IUF9FVkVOVCkKLQkJdmlhX2hwX2F1dG9tdXRlKGNvZGVjKTsKLQlpZiAocmVzICYgVklBX0dQSU9fRVZFTlQpCi0JCXZpYV9ncGlvX2NvbnRyb2woY29kZWMpOworCiAJaWYgKHJlcyAmIFZJQV9KQUNLX0VWRU5UKQotCQlzZXRfamFja19wb3dlcl9zdGF0ZShjb2RlYyk7Ci0JaWYgKHJlcyAmIFZJQV9NT05PX0VWRU5UKQorCQlzZXRfd2lkZ2V0c19wb3dlcl9zdGF0ZShjb2RlYyk7CisKKwlyZXMgJj0gflZJQV9KQUNLX0VWRU5UOworCisJaWYgKHJlcyA9PSBWSUFfSFBfRVZFTlQpCisJCXZpYV9ocF9hdXRvbXV0ZShjb2RlYyk7CisJZWxzZSBpZiAocmVzID09IFZJQV9HUElPX0VWRU5UKQorCQl2aWFfZ3Bpb19jb250cm9sKGNvZGVjKTsKKwllbHNlIGlmIChyZXMgPT0gVklBX01PTk9fRVZFTlQpCiAJCXZpYV9tb25vX2F1dG9tdXRlKGNvZGVjKTsKLQlpZiAocmVzICYgVklBX1NQRUFLRVJfRVZFTlQpCisJZWxzZSBpZiAocmVzID09IFZJQV9TUEVBS0VSX0VWRU5UKQogCQl2aWFfc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7Ci0JaWYgKHJlcyAmIFZJQV9CSU5EX0hQX0VWRU5UKQorCWVsc2UgaWYgKHJlcyA9PSBWSUFfQklORF9IUF9FVkVOVCkKIAkJdmlhX2hwX2JpbmRfYXV0b211dGUoY29kZWMpOwogfQogCkBAIC0yMjU0LDcgKzE4MTksNyBAQAogCiAvKgogICovCi1zdGF0aWMgc3RydWN0IGhkYV9jb2RlY19vcHMgdmlhX3BhdGNoX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2NvZGVjX29wcyB2aWFfcGF0Y2hfb3BzID0gewogCS5idWlsZF9jb250cm9scyA9IHZpYV9idWlsZF9jb250cm9scywKIAkuYnVpbGRfcGNtcyA9IHZpYV9idWlsZF9wY21zLAogCS5pbml0ID0gdmlhX2luaXQsCkBAIC0yMjg0LDE2ICsxODQ5LDE2IEBACiAJCQkvKiBjb25maWcgZGFjIGxpc3QgKi8KIAkJCXN3aXRjaCAoaSkgewogCQkJY2FzZSBBVVRPX1NFUV9GUk9OVDoKLQkJCQlzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tpXSA9IDB4MTA7CisJCQkJc3BlYy0+cHJpdmF0ZV9kYWNfbmlkc1tpXSA9IDB4MTA7CiAJCQkJYnJlYWs7CiAJCQljYXNlIEFVVE9fU0VRX0NFTkxGRToKLQkJCQlzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tpXSA9IDB4MTI7CisJCQkJc3BlYy0+cHJpdmF0ZV9kYWNfbmlkc1tpXSA9IDB4MTI7CiAJCQkJYnJlYWs7CiAJCQljYXNlIEFVVE9fU0VRX1NVUlJPVU5EOgotCQkJCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2ldID0gMHgxMTsKKwkJCQlzcGVjLT5wcml2YXRlX2RhY19uaWRzW2ldID0gMHgxMTsKIAkJCQlicmVhazsKIAkJCWNhc2UgQVVUT19TRVFfU0lERToKLQkJCQlzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tpXSA9IDB4MTM7CisJCQkJc3BlYy0+cHJpdmF0ZV9kYWNfbmlkc1tpXSA9IDB4MTM7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KQEAgLTI0MzcsNyArMjAwMiw4IEBACiBzdGF0aWMgaW50IHZ0X2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCQkgICAgY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnLAogCQkJCQkgICAgaGRhX25pZF90IGNhcF9uaWQsCi0JCQkJCSAgICBoZGFfbmlkX3QgcGluX2lkeHNbXSwgaW50IG51bV9pZHhzKQorCQkJCQkgICAgY29uc3QgaGRhX25pZF90IHBpbl9pZHhzW10sCisJCQkJCSAgICBpbnQgbnVtX2lkeHMpCiB7CiAJc3RydWN0IHZpYV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwpAQCAtMjQ4MywxMyArMjA0OSwxMyBAQAogc3RhdGljIGludCB2dDE3MDhfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJCQljb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCiB7Ci0Jc3RhdGljIGhkYV9uaWRfdCBwaW5faWR4c1tdID0geyAweGZmLCAweDI0LCAweDFkLCAweDFlLCAweDIxIH07CisJc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBwaW5faWR4c1tdID0geyAweGZmLCAweDI0LCAweDFkLCAweDFlLCAweDIxIH07CiAJcmV0dXJuIHZ0X2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKGNvZGVjLCBjZmcsIDB4MTcsIHBpbl9pZHhzLAogCQkJCQkJQVJSQVlfU0laRShwaW5faWR4cykpOwogfQogCiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQotc3RhdGljIHN0cnVjdCBoZGFfYW1wX2xpc3QgdnQxNzA4X2xvb3BiYWNrc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfYW1wX2xpc3QgdnQxNzA4X2xvb3BiYWNrc1tdID0gewogCXsgMHgxNywgSERBX0lOUFVULCAxIH0sCiAJeyAweDE3LCBIREFfSU5QVVQsIDIgfSwKIAl7IDB4MTcsIEhEQV9JTlBVVCwgMyB9LApAQCAtMjU0OCw3ICsyMTE0LDcgQEAKIAlyZXR1cm4gY2hhbmdlOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdnQxNzA4X2phY2tfZGV0ZWN0ZWN0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdnQxNzA4X2phY2tfZGV0ZWN0ZWN0W10gPSB7CiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiSmFjayBEZXRlY3QiLApAQCAtMjYyMyw3ICsyMTg5LDggQEAKIAl2aWFfYXV0b19pbml0X211bHRpX291dChjb2RlYyk7CiAJdmlhX2F1dG9faW5pdF9ocF9vdXQoY29kZWMpOwogCXZpYV9hdXRvX2luaXRfYW5hbG9nX2lucHV0KGNvZGVjKTsKLQlpZiAoc3BlYy0+Y29kZWNfdHlwZSA9PSBWVDIwMDJQIHx8IHNwZWMtPmNvZGVjX3R5cGUgPT0gVlQxODEyKSB7CisKKwlpZiAoVlQyMDAyUF9DT01QQVRJQkxFKHNwZWMpKSB7CiAJCXZpYV9ocF9iaW5kX2F1dG9tdXRlKGNvZGVjKTsKIAl9IGVsc2UgewogCQl2aWFfaHBfYXV0b211dGUoY29kZWMpOwpAQCAtMjcyNyw3ICsyMjk0LDcgQEAKIH0KIAogLyogY2FwdHVyZSBtaXhlciBlbGVtZW50cyAqLwotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHZ0MTcwOV9jYXB0dXJlX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdnQxNzA5X2NhcHR1cmVfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MTQsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDE0LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMSwgMHgxNSwgMHgwLCBIREFfSU5QVVQpLApAQCAtMjc0OSw3ICsyMzE2LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIHZ0MTcwOV91bml3aWxsX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgdnQxNzA5X3VuaXdpbGxfaW5pdF92ZXJic1tdID0gewogCXsweDIwLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsCiAJIEFDX1VTUlNQX0VOIHwgVklBX0hQX0VWRU5UIHwgVklBX0pBQ0tfRVZFTlR9LAogCXsgfQpAQCAtMjc1OCw3ICsyMzI1LDcgQEAKIC8qCiAgKiBnZW5lcmljIGluaXRpYWxpemF0aW9uIG9mIEFEQywgaW5wdXQgbWl4ZXJzIGFuZCBvdXRwdXQgbWl4ZXJzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgdnQxNzA5XzEwY2hfdm9sdW1lX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgdnQxNzA5XzEwY2hfdm9sdW1lX2luaXRfdmVyYnNbXSA9IHsKIAkvKgogCSAqIFVubXV0ZSBBREMwLTIgYW5kIHNldCB0aGUgZGVmYXVsdCBpbnB1dCB0byBtaWMtaW4KIAkgKi8KQEAgLTI3OTgsNyArMjM2NSw3IEBACiAJeyB9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIHZ0MTcwOV8xMGNoX3BjbV9hbmFsb2dfcGxheWJhY2sgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9wY21fc3RyZWFtIHZ0MTcwOV8xMGNoX3BjbV9hbmFsb2dfcGxheWJhY2sgPSB7CiAJLnN1YnN0cmVhbXMgPSAxLAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSAxMCwKQEAgLTI4MTAsNyArMjM3Nyw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gdnQxNzA5XzZjaF9wY21fYW5hbG9nX3BsYXliYWNrID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSB2dDE3MDlfNmNoX3BjbV9hbmFsb2dfcGxheWJhY2sgPSB7CiAJLnN1YnN0cmVhbXMgPSAxLAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSA2LApAQCAtMjgyMiw3ICsyMzg5LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSB2dDE3MDlfcGNtX2FuYWxvZ19jYXB0dXJlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSB2dDE3MDlfcGNtX2FuYWxvZ19jYXB0dXJlID0gewogCS5zdWJzdHJlYW1zID0gMiwKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gMiwKQEAgLTI4MzMsNyArMjQwMCw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gdnQxNzA5X3BjbV9kaWdpdGFsX3BsYXliYWNrID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSB2dDE3MDlfcGNtX2RpZ2l0YWxfcGxheWJhY2sgPSB7CiAJLnN1YnN0cmVhbXMgPSAxLAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSAyLApAQCAtMjg0NCw3ICsyNDExLDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSB2dDE3MDlfcGNtX2RpZ2l0YWxfY2FwdHVyZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gdnQxNzA5X3BjbV9kaWdpdGFsX2NhcHR1cmUgPSB7CiAJLnN1YnN0cmVhbXMgPSAxLAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSAyLApAQCAtMjg3MSwyNiArMjQzOCwyNiBAQAogCQkJCXN3aXRjaCAoaSkgewogCQkJCWNhc2UgQVVUT19TRVFfRlJPTlQ6CiAJCQkJCS8qIEFPVzAgKi8KLQkJCQkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV0gPSAweDEwOworCQkJCQlzcGVjLT5wcml2YXRlX2RhY19uaWRzW2ldID0gMHgxMDsKIAkJCQkJYnJlYWs7CiAJCQkJY2FzZSBBVVRPX1NFUV9DRU5MRkU6CiAJCQkJCS8qIEFPVzIgKi8KLQkJCQkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV0gPSAweDEyOworCQkJCQlzcGVjLT5wcml2YXRlX2RhY19uaWRzW2ldID0gMHgxMjsKIAkJCQkJYnJlYWs7CiAJCQkJY2FzZSBBVVRPX1NFUV9TVVJST1VORDoKIAkJCQkJLyogQU9XMyAqLwotCQkJCQlzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tpXSA9IDB4MTE7CisJCQkJCXNwZWMtPnByaXZhdGVfZGFjX25pZHNbaV0gPSAweDExOwogCQkJCQlicmVhazsKIAkJCQljYXNlIEFVVE9fU0VRX1NJREU6CiAJCQkJCS8qIEFPVzEgKi8KLQkJCQkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV0gPSAweDI3OworCQkJCQlzcGVjLT5wcml2YXRlX2RhY19uaWRzW2ldID0gMHgyNzsKIAkJCQkJYnJlYWs7CiAJCQkJZGVmYXVsdDoKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJfQogCQl9Ci0JCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2NmZy0+bGluZV9vdXRzXSA9IDB4Mjg7IC8qIEFPVzQgKi8KKwkJc3BlYy0+cHJpdmF0ZV9kYWNfbmlkc1tjZmctPmxpbmVfb3V0c10gPSAweDI4OyAvKiBBT1c0ICovCiAKIAl9IGVsc2UgaWYgKGNmZy0+bGluZV9vdXRzID09IDMpIHsgLyogNiBjaGFubmVscyAqLwogCQlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5saW5lX291dHM7IGkrKykgewpAQCAtMjkwMCwxNSArMjQ2NywxNSBAQAogCQkJCXN3aXRjaCAoaSkgewogCQkJCWNhc2UgQVVUT19TRVFfRlJPTlQ6CiAJCQkJCS8qIEFPVzAgKi8KLQkJCQkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV0gPSAweDEwOworCQkJCQlzcGVjLT5wcml2YXRlX2RhY19uaWRzW2ldID0gMHgxMDsKIAkJCQkJYnJlYWs7CiAJCQkJY2FzZSBBVVRPX1NFUV9DRU5MRkU6CiAJCQkJCS8qIEFPVzIgKi8KLQkJCQkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV0gPSAweDEyOworCQkJCQlzcGVjLT5wcml2YXRlX2RhY19uaWRzW2ldID0gMHgxMjsKIAkJCQkJYnJlYWs7CiAJCQkJY2FzZSBBVVRPX1NFUV9TVVJST1VORDoKIAkJCQkJLyogQU9XMSAqLwotCQkJCQlzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tpXSA9IDB4MTE7CisJCQkJCXNwZWMtPnByaXZhdGVfZGFjX25pZHNbaV0gPSAweDExOwogCQkJCQlicmVhazsKIAkJCQlkZWZhdWx0OgogCQkJCQlicmVhazsKQEAgLTMwNTYsNyArMjYyMyw3IEBACiBzdGF0aWMgaW50IHZ0MTcwOV9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCQkJCWNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKIHsKLQlzdGF0aWMgaGRhX25pZF90IHBpbl9pZHhzW10gPSB7IDB4ZmYsIDB4MjMsIDB4MWQsIDB4MWUsIDB4MjEgfTsKKwlzdGF0aWMgY29uc3QgaGRhX25pZF90IHBpbl9pZHhzW10gPSB7IDB4ZmYsIDB4MjMsIDB4MWQsIDB4MWUsIDB4MjEgfTsKIAlyZXR1cm4gdnRfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoY29kZWMsIGNmZywgMHgxOCwgcGluX2lkeHMsCiAJCQkJCQlBUlJBWV9TSVpFKHBpbl9pZHhzKSk7CiB9CkBAIC0zMTA2LDcgKzI2NzMsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQotc3RhdGljIHN0cnVjdCBoZGFfYW1wX2xpc3QgdnQxNzA5X2xvb3BiYWNrc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfYW1wX2xpc3QgdnQxNzA5X2xvb3BiYWNrc1tdID0gewogCXsgMHgxOCwgSERBX0lOUFVULCAxIH0sCiAJeyAweDE4LCBIREFfSU5QVVQsIDIgfSwKIAl7IDB4MTgsIEhEQV9JTlBVVCwgMyB9LApAQCAtMzE2Nyw3ICsyNzM0LDcgQEAKIC8qCiAgKiBnZW5lcmljIGluaXRpYWxpemF0aW9uIG9mIEFEQywgaW5wdXQgbWl4ZXJzIGFuZCBvdXRwdXQgbWl4ZXJzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgdnQxNzA5XzZjaF92b2x1bWVfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiB2dDE3MDlfNmNoX3ZvbHVtZV9pbml0X3ZlcmJzW10gPSB7CiAJLyoKIAkgKiBVbm11dGUgQURDMC0yIGFuZCBzZXQgdGhlIGRlZmF1bHQgaW5wdXQgdG8gbWljLWluCiAJICovCkBAIC0zMjU3LDcgKzI4MjQsNyBAQAogfQogCiAvKiBjYXB0dXJlIG1peGVyIGVsZW1lbnRzICovCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdnQxNzA4Ql9jYXB0dXJlX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdnQxNzA4Ql9jYXB0dXJlX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDEzLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgxMywgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDEsIDB4MTQsIDB4MCwgSERBX0lOUFVUKSwKQEAgLTMyNzksNyArMjg0Niw3IEBACiAvKgogICogZ2VuZXJpYyBpbml0aWFsaXphdGlvbiBvZiBBREMsIGlucHV0IG1peGVycyBhbmQgb3V0cHV0IG1peGVycwogICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIHZ0MTcwOEJfOGNoX3ZvbHVtZV9pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIHZ0MTcwOEJfOGNoX3ZvbHVtZV9pbml0X3ZlcmJzW10gPSB7CiAJLyoKIAkgKiBVbm11dGUgQURDMC0xIGFuZCBzZXQgdGhlIGRlZmF1bHQgaW5wdXQgdG8gbWljLWluCiAJICovCkBAIC0zMzE0LDcgKzI4ODEsNyBAQAogCXsgfQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiB2dDE3MDhCXzRjaF92b2x1bWVfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiB2dDE3MDhCXzRjaF92b2x1bWVfaW5pdF92ZXJic1tdID0gewogCS8qCiAJICogVW5tdXRlIEFEQzAtMSBhbmQgc2V0IHRoZSBkZWZhdWx0IGlucHV0IHRvIG1pYy1pbgogCSAqLwpAQCAtMzM0OSw3ICsyOTE2LDcgQEAKIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgdnQxNzA4Ql91bml3aWxsX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgdnQxNzA4Ql91bml3aWxsX2luaXRfdmVyYnNbXSA9IHsKIAl7MHgxZCwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLAogCSBBQ19VU1JTUF9FTiB8IFZJQV9IUF9FVkVOVCB8IFZJQV9KQUNLX0VWRU5UfSwKIAl7MHgxOSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IFZJQV9KQUNLX0VWRU5UfSwKQEAgLTMzNzMsNyArMjk0MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gdnQxNzA4Ql84Y2hfcGNtX2FuYWxvZ19wbGF5YmFjayA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gdnQxNzA4Ql84Y2hfcGNtX2FuYWxvZ19wbGF5YmFjayA9IHsKIAkuc3Vic3RyZWFtcyA9IDIsCiAJLmNoYW5uZWxzX21pbiA9IDIsCiAJLmNoYW5uZWxzX21heCA9IDgsCkBAIC0zMzg2LDcgKzI5NTMsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIHZ0MTcwOEJfNGNoX3BjbV9hbmFsb2dfcGxheWJhY2sgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9wY21fc3RyZWFtIHZ0MTcwOEJfNGNoX3BjbV9hbmFsb2dfcGxheWJhY2sgPSB7CiAJLnN1YnN0cmVhbXMgPSAyLAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSA0LApAQCAtMzM5OCw3ICsyOTY1LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSB2dDE3MDhCX3BjbV9hbmFsb2dfY2FwdHVyZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gdnQxNzA4Ql9wY21fYW5hbG9nX2NhcHR1cmUgPSB7CiAJLnN1YnN0cmVhbXMgPSAyLAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSAyLApAQCAtMzQxMSw3ICsyOTc4LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSB2dDE3MDhCX3BjbV9kaWdpdGFsX3BsYXliYWNrID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSB2dDE3MDhCX3BjbV9kaWdpdGFsX3BsYXliYWNrID0gewogCS5zdWJzdHJlYW1zID0gMSwKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gMiwKQEAgLTM0MjQsNyArMjk5MSw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gdnQxNzA4Ql9wY21fZGlnaXRhbF9jYXB0dXJlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSB2dDE3MDhCX3BjbV9kaWdpdGFsX2NhcHR1cmUgPSB7CiAJLnN1YnN0cmVhbXMgPSAxLAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSAyLApAQCAtMzQ0NywxNiArMzAxNCwxNiBAQAogCQkJLyogY29uZmlnIGRhYyBsaXN0ICovCiAJCQlzd2l0Y2ggKGkpIHsKIAkJCWNhc2UgQVVUT19TRVFfRlJPTlQ6Ci0JCQkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV0gPSAweDEwOworCQkJCXNwZWMtPnByaXZhdGVfZGFjX25pZHNbaV0gPSAweDEwOwogCQkJCWJyZWFrOwogCQkJY2FzZSBBVVRPX1NFUV9DRU5MRkU6Ci0JCQkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV0gPSAweDI0OworCQkJCXNwZWMtPnByaXZhdGVfZGFjX25pZHNbaV0gPSAweDI0OwogCQkJCWJyZWFrOwogCQkJY2FzZSBBVVRPX1NFUV9TVVJST1VORDoKLQkJCQlzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tpXSA9IDB4MTE7CisJCQkJc3BlYy0+cHJpdmF0ZV9kYWNfbmlkc1tpXSA9IDB4MTE7CiAJCQkJYnJlYWs7CiAJCQljYXNlIEFVVE9fU0VRX1NJREU6Ci0JCQkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV0gPSAweDI1OworCQkJCXNwZWMtPnByaXZhdGVfZGFjX25pZHNbaV0gPSAweDI1OwogCQkJCWJyZWFrOwogCQkJfQogCQl9CkBAIC0zNTg4LDcgKzMxNTUsNyBAQAogc3RhdGljIGludCB2dDE3MDhCX2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCQkJY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQogewotCXN0YXRpYyBoZGFfbmlkX3QgcGluX2lkeHNbXSA9IHsgMHhmZiwgMHgxZiwgMHgxYSwgMHgxYiwgMHgxZSB9OworCXN0YXRpYyBjb25zdCBoZGFfbmlkX3QgcGluX2lkeHNbXSA9IHsgMHhmZiwgMHgxZiwgMHgxYSwgMHgxYiwgMHgxZSB9OwogCXJldHVybiB2dF9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3Rscyhjb2RlYywgY2ZnLCAweDE2LCBwaW5faWR4cywKIAkJCQkJCUFSUkFZX1NJWkUocGluX2lkeHMpKTsKIH0KQEAgLTM2MzgsNyArMzIwNSw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCi1zdGF0aWMgc3RydWN0IGhkYV9hbXBfbGlzdCB2dDE3MDhCX2xvb3BiYWNrc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfYW1wX2xpc3QgdnQxNzA4Ql9sb29wYmFja3NbXSA9IHsKIAl7IDB4MTYsIEhEQV9JTlBVVCwgMSB9LAogCXsgMHgxNiwgSERBX0lOUFVULCAyIH0sCiAJeyAweDE2LCBIREFfSU5QVVQsIDMgfSwKQEAgLTM2NDYsNiArMzIxMyw4NyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAjZW5kaWYKKworc3RhdGljIHZvaWQgc2V0X3dpZGdldHNfcG93ZXJfc3RhdGVfdnQxNzA4QihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgdmlhX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpbnQgaW11eF9pc19zbWl4ZXI7CisJdW5zaWduZWQgaW50IHBhcm07CisJaW50IGlzXzhjaCA9IDA7CisJaWYgKChzcGVjLT5jb2RlY190eXBlICE9IFZUMTcwOEJfNENIKSAmJgorCSAgICAoY29kZWMtPnZlbmRvcl9pZCAhPSAweDExMDY0Mzk3KSkKKwkJaXNfOGNoID0gMTsKKworCS8qIFNXMCAoMTdoKSA9IHN0ZXJlbyBtaXhlciAqLworCWltdXhfaXNfc21peGVyID0KKwkoc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDE3LCAwLCBBQ19WRVJCX0dFVF9DT05ORUNUX1NFTCwgMHgwMCkKKwkgPT0gKChzcGVjLT5jb2RlY190eXBlID09IFZUMTcwOFMpID8gNSA6IDApKTsKKwkvKiBpbnB1dHMgKi8KKwkvKiBQVyAxLzIvNSAoMWFoLzFiaC8xZWgpICovCisJcGFybSA9IEFDX1BXUlNUX0QzOworCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MWEsICZwYXJtKTsKKwlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDFiLCAmcGFybSk7CisJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgxZSwgJnBhcm0pOworCWlmIChpbXV4X2lzX3NtaXhlcikKKwkJcGFybSA9IEFDX1BXUlNUX0QwOworCS8qIFNXMCAoMTdoKSwgQUlXIDAvMSAoMTNoLzE0aCkgKi8KKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDE3LCAwLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxMywgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTQsIDAsIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBwYXJtKTsKKworCS8qIG91dHB1dHMgKi8KKwkvKiBQVzAgKDE5aCksIFNXMSAoMThoKSwgQU9XMSAoMTFoKSAqLworCXBhcm0gPSBBQ19QV1JTVF9EMzsKKwlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDE5LCAmcGFybSk7CisJaWYgKHNwZWMtPnNtYXJ0NTFfZW5hYmxlZCkKKwkJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgxYiwgJnBhcm0pOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTgsIDAsIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBwYXJtKTsKKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDExLCAwLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7CisKKwkvKiBQVzYgKDIyaCksIFNXMiAoMjZoKSwgQU9XMiAoMjRoKSAqLworCWlmIChpc184Y2gpIHsKKwkJcGFybSA9IEFDX1BXUlNUX0QzOworCQlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDIyLCAmcGFybSk7CisJCWlmIChzcGVjLT5zbWFydDUxX2VuYWJsZWQpCisJCQlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDFhLCAmcGFybSk7CisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MjYsIDAsCisJCQkJICAgIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBwYXJtKTsKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgyNCwgMCwKKwkJCQkgICAgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOworCX0gZWxzZSBpZiAoY29kZWMtPnZlbmRvcl9pZCA9PSAweDExMDY0Mzk3KSB7CisJCS8qIFBXNygyM2gpLCBTVzIoMjdoKSwgQU9XMigyNWgpICovCisJCXBhcm0gPSBBQ19QV1JTVF9EMzsKKwkJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgyMywgJnBhcm0pOworCQlpZiAoc3BlYy0+c21hcnQ1MV9lbmFibGVkKQorCQkJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgxYSwgJnBhcm0pOworCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDI3LCAwLAorCQkJCSAgICBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7CisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MjUsIDAsCisJCQkJICAgIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBwYXJtKTsKKwl9CisKKwkvKiBQVyAzLzQvNyAoMWNoLzFkaC8yM2gpICovCisJcGFybSA9IEFDX1BXUlNUX0QzOworCS8qIGZvcmNlIHRvIEQwIGZvciBpbnRlcm5hbCBTcGVha2VyICovCisJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgxYywgJnBhcm0pOworCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MWQsICZwYXJtKTsKKwlpZiAoaXNfOGNoKQorCQlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDIzLCAmcGFybSk7CisKKwkvKiBNVzAgKDE2aCksIFN3MyAoMjdoKSwgQU9XIDAvMyAoMTBoLzI1aCkgKi8KKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDE2LCAwLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwKKwkJCSAgICBpbXV4X2lzX3NtaXhlciA/IEFDX1BXUlNUX0QwIDogcGFybSk7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxMCwgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOworCWlmIChpc184Y2gpIHsKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgyNSwgMCwKKwkJCQkgICAgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOworCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDI3LCAwLAorCQkJCSAgICBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7CisJfSBlbHNlIGlmIChjb2RlYy0+dmVuZG9yX2lkID09IDB4MTEwNjQzOTcgJiYgc3BlYy0+aHBfaW5kZXBlbmRlbnRfbW9kZSkKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgyNSwgMCwKKwkJCQkgICAgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOworfQorCiBzdGF0aWMgaW50IHBhdGNoX3Z0MTcwOFMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOwogc3RhdGljIGludCBwYXRjaF92dDE3MDhCXzhjaChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKQEAgLTM2OTYsNiArMzM0NCw4IEBACiAJc3BlYy0+bG9vcGJhY2suYW1wbGlzdCA9IHZ0MTcwOEJfbG9vcGJhY2tzOwogI2VuZGlmCiAKKwlzcGVjLT5zZXRfd2lkZ2V0c19wb3dlcl9zdGF0ZSA9ICBzZXRfd2lkZ2V0c19wb3dlcl9zdGF0ZV92dDE3MDhCOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM3NDYsMTMgKzMzOTYsMTUgQEAKIAlzcGVjLT5sb29wYmFjay5hbXBsaXN0ID0gdnQxNzA4Ql9sb29wYmFja3M7CiAjZW5kaWYKIAorCXNwZWMtPnNldF93aWRnZXRzX3Bvd2VyX3N0YXRlID0gIHNldF93aWRnZXRzX3Bvd2VyX3N0YXRlX3Z0MTcwOEI7CisKIAlyZXR1cm4gMDsKIH0KIAogLyogUGF0Y2ggZm9yIFZUMTcwOFMgKi8KIAogLyogY2FwdHVyZSBtaXhlciBlbGVtZW50cyAqLwotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHZ0MTcwOFNfY2FwdHVyZV9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHZ0MTcwOFNfY2FwdHVyZV9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgxMywgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MTMsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAxLCAweDE0LCAweDAsIEhEQV9JTlBVVCksCkBAIC0zNzc1LDcgKzM0MjcsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgdnQxNzA4U192b2x1bWVfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiB2dDE3MDhTX3ZvbHVtZV9pbml0X3ZlcmJzW10gPSB7CiAJLyogVW5tdXRlIEFEQzAtMSBhbmQgc2V0IHRoZSBkZWZhdWx0IGlucHV0IHRvIG1pYy1pbiAqLwogCXsweDEzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCkBAIC0zODAxLDcgKzM0NTMsNyBAQAogCXsgfQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiB2dDE3MDhTX3VuaXdpbGxfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiB2dDE3MDhTX3VuaXdpbGxfaW5pdF92ZXJic1tdID0gewogCXsweDFkLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsCiAJIEFDX1VTUlNQX0VOIHwgVklBX0hQX0VWRU5UIHwgVklBX0pBQ0tfRVZFTlR9LAogCXsweDE5LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgVklBX0pBQ0tfRVZFTlR9LApAQCAtMzgxNCw3ICszNDY2LDE5IEBACiAJeyB9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIHZ0MTcwOFNfcGNtX2FuYWxvZ19wbGF5YmFjayA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgdnQxNzA1X3VuaXdpbGxfaW5pdF92ZXJic1tdID0geworCXsweDFkLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsCisJIEFDX1VTUlNQX0VOIHwgVklBX0hQX0VWRU5UIHwgVklBX0pBQ0tfRVZFTlR9LAorCXsweDE5LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgVklBX0pBQ0tfRVZFTlR9LAorCXsweDFhLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgVklBX0pBQ0tfRVZFTlR9LAorCXsweDFiLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgVklBX0pBQ0tfRVZFTlR9LAorCXsweDFjLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgVklBX0pBQ0tfRVZFTlR9LAorCXsweDFlLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgVklBX0pBQ0tfRVZFTlR9LAorCXsweDIzLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgVklBX0pBQ0tfRVZFTlR9LAorCXsgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSB2dDE3MDhTX3BjbV9hbmFsb2dfcGxheWJhY2sgPSB7CiAJLnN1YnN0cmVhbXMgPSAyLAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSA4LApAQCAtMzgyNyw3ICszNDkxLDIwIEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gdnQxNzA4U19wY21fYW5hbG9nX2NhcHR1cmUgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9wY21fc3RyZWFtIHZ0MTcwNV9wY21fYW5hbG9nX3BsYXliYWNrID0geworCS5zdWJzdHJlYW1zID0gMiwKKwkuY2hhbm5lbHNfbWluID0gMiwKKwkuY2hhbm5lbHNfbWF4ID0gNiwKKwkubmlkID0gMHgxMCwgLyogTklEIHRvIHF1ZXJ5IGZvcm1hdHMgYW5kIHJhdGVzICovCisJLm9wcyA9IHsKKwkJLm9wZW4gPSB2aWFfcGxheWJhY2tfcGNtX29wZW4sCisJCS5wcmVwYXJlID0gdmlhX3BsYXliYWNrX211bHRpX3BjbV9wcmVwYXJlLAorCQkuY2xlYW51cCA9IHZpYV9wbGF5YmFja19tdWx0aV9wY21fY2xlYW51cCwKKwkJLmNsb3NlID0gdmlhX3BjbV9vcGVuX2Nsb3NlCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gdnQxNzA4U19wY21fYW5hbG9nX2NhcHR1cmUgPSB7CiAJLnN1YnN0cmVhbXMgPSAyLAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSAyLApAQCAtMzg0MCw3ICszNTE3LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSB2dDE3MDhTX3BjbV9kaWdpdGFsX3BsYXliYWNrID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSB2dDE3MDhTX3BjbV9kaWdpdGFsX3BsYXliYWNrID0gewogCS5zdWJzdHJlYW1zID0gMSwKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gMiwKQEAgLTM4NzAsMTYgKzM1NDcsMTkgQEAKIAkJCS8qIGNvbmZpZyBkYWMgbGlzdCAqLwogCQkJc3dpdGNoIChpKSB7CiAJCQljYXNlIEFVVE9fU0VRX0ZST05UOgotCQkJCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2ldID0gMHgxMDsKKwkJCQlzcGVjLT5wcml2YXRlX2RhY19uaWRzW2ldID0gMHgxMDsKIAkJCQlicmVhazsKIAkJCWNhc2UgQVVUT19TRVFfQ0VOTEZFOgotCQkJCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2ldID0gMHgyNDsKKwkJCQlpZiAoc3BlYy0+Y29kZWMtPnZlbmRvcl9pZCA9PSAweDExMDY0Mzk3KQorCQkJCQlzcGVjLT5wcml2YXRlX2RhY19uaWRzW2ldID0gMHgyNTsKKwkJCQllbHNlCisJCQkJCXNwZWMtPnByaXZhdGVfZGFjX25pZHNbaV0gPSAweDI0OwogCQkJCWJyZWFrOwogCQkJY2FzZSBBVVRPX1NFUV9TVVJST1VORDoKLQkJCQlzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tpXSA9IDB4MTE7CisJCQkJc3BlYy0+cHJpdmF0ZV9kYWNfbmlkc1tpXSA9IDB4MTE7CiAJCQkJYnJlYWs7CiAJCQljYXNlIEFVVE9fU0VRX1NJREU6Ci0JCQkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV0gPSAweDI1OworCQkJCXNwZWMtPnByaXZhdGVfZGFjX25pZHNbaV0gPSAweDI1OwogCQkJCWJyZWFrOwogCQkJfQogCQl9CkBAIC0zODg4LDIzICszNTY4LDI5IEBACiAJLyogZm9yIFNtYXJ0IDUuMSwgbGluZS9taWMgaW5wdXRzIGRvdWJsZSBhcyBvdXRwdXQgcGlucyAqLwogCWlmIChjZmctPmxpbmVfb3V0cyA9PSAxKSB7CiAJCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gMzsKLQkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbQVVUT19TRVFfU1VSUk9VTkRdID0gMHgxMTsKLQkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbQVVUT19TRVFfQ0VOTEZFXSA9IDB4MjQ7CisJCXNwZWMtPnByaXZhdGVfZGFjX25pZHNbQVVUT19TRVFfU1VSUk9VTkRdID0gMHgxMTsKKwkJaWYgKHNwZWMtPmNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMTA2NDM5NykKKwkJCXNwZWMtPnByaXZhdGVfZGFjX25pZHNbQVVUT19TRVFfQ0VOTEZFXSA9IDB4MjU7CisJCWVsc2UKKwkJCXNwZWMtPnByaXZhdGVfZGFjX25pZHNbQVVUT19TRVFfQ0VOTEZFXSA9IDB4MjQ7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKIC8qIGFkZCBwbGF5YmFjayBjb250cm9scyBmcm9tIHRoZSBwYXJzZWQgREFDIHRhYmxlICovCi1zdGF0aWMgaW50IHZ0MTcwOFNfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3RydWN0IHZpYV9zcGVjICpzcGVjLAorc3RhdGljIGludCB2dDE3MDhTX2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKIHsKKwlzdHJ1Y3QgdmlhX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAljaGFyIG5hbWVbMzJdOwogCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY2huYW1lWzRdID0gewogCQkiRnJvbnQiLCAiU3Vycm91bmQiLCAiQy9MRkUiLCAiU2lkZSIKIAl9OwotCWhkYV9uaWRfdCBuaWRfdm9sc1tdID0gezB4MTAsIDB4MTEsIDB4MjQsIDB4MjV9OwotCWhkYV9uaWRfdCBuaWRfbXV0ZXNbXSA9IHsweDFDLCAweDE4LCAweDI2LCAweDI3fTsKKwloZGFfbmlkX3QgbmlkX3ZvbHNbMl1bNF0gPSB7IHsweDEwLCAweDExLCAweDI0LCAweDI1fSwKKwkJCQkgICAgIHsweDEwLCAweDExLCAweDI1LCAwfSB9OworCWhkYV9uaWRfdCBuaWRfbXV0ZXNbMl1bNF0gPSB7IHsweDFDLCAweDE4LCAweDI2LCAweDI3fSwKKwkJCQkgICAgICB7MHgxQywgMHgxOCwgMHgyNywgMH0gfTsKIAloZGFfbmlkX3QgbmlkLCBuaWRfdm9sLCBuaWRfbXV0ZTsKIAlpbnQgaSwgZXJyOwogCkBAIC0zOTE1LDggKzM2MDEsMTUgQEAKIAkJaWYgKCFuaWQgJiYgaSA+IEFVVE9fU0VRX0NFTkxGRSkKIAkJCWNvbnRpbnVlOwogCi0JCW5pZF92b2wgPSBuaWRfdm9sc1tpXTsKLQkJbmlkX211dGUgPSBuaWRfbXV0ZXNbaV07CisJCWlmIChjb2RlYy0+dmVuZG9yX2lkID09IDB4MTEwNjQzOTcpIHsKKwkJCW5pZF92b2wgPSBuaWRfdm9sc1sxXVtpXTsKKwkJCW5pZF9tdXRlID0gbmlkX211dGVzWzFdW2ldOworCQl9IGVsc2UgeworCQkJbmlkX3ZvbCA9IG5pZF92b2xzWzBdW2ldOworCQkJbmlkX211dGUgPSBuaWRfbXV0ZXNbMF1baV07CisJCX0KKwkJaWYgKCFuaWRfdm9sICYmICFuaWRfbXV0ZSkKKwkJCWNvbnRpbnVlOwogCiAJCWlmIChpID09IEFVVE9fU0VRX0NFTkxGRSkgewogCQkJLyogQ2VudGVyL0xGRSAqLwpAQCAtNDAyNiw3ICszNzE5LDcgQEAKIHN0YXRpYyBpbnQgdnQxNzA4U19hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCQkJCWNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKIHsKLQlzdGF0aWMgaGRhX25pZF90IHBpbl9pZHhzW10gPSB7IDB4MWYsIDB4MWEsIDB4MWIsIDB4MWUsIDAsIDB4ZmYgfTsKKwlzdGF0aWMgY29uc3QgaGRhX25pZF90IHBpbl9pZHhzW10gPSB7IDB4MWYsIDB4MWEsIDB4MWIsIDB4MWUsIDAsIDB4ZmYgfTsKIAlyZXR1cm4gdnRfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoY29kZWMsIGNmZywgMHgxNiwgcGluX2lkeHMsCiAJCQkJCQlBUlJBWV9TSVpFKHBpbl9pZHhzKSk7CiB9CkBAIC00MDcwLDcgKzM3NjMsNyBAQAogCWlmICghc3BlYy0+YXV0b2NmZy5saW5lX291dHMgJiYgIXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSkKIAkJcmV0dXJuIDA7IC8qIGNhbid0IGZpbmQgdmFsaWQgQklPUyBwaW4gY29uZmlnICovCiAKLQllcnIgPSB2dDE3MDhTX2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKTsKKwllcnIgPSB2dDE3MDhTX2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKGNvZGVjLCAmc3BlYy0+YXV0b2NmZyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAJZXJyID0gdnQxNzA4U19hdXRvX2NyZWF0ZV9ocF9jdGxzKHNwZWMsIHNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSk7CkBAIC00MDk3LDcgKzM3OTAsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQotc3RhdGljIHN0cnVjdCBoZGFfYW1wX2xpc3QgdnQxNzA4U19sb29wYmFja3NbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2FtcF9saXN0IHZ0MTcwOFNfbG9vcGJhY2tzW10gPSB7CiAJeyAweDE2LCBIREFfSU5QVVQsIDEgfSwKIAl7IDB4MTYsIEhEQV9JTlBVVCwgMiB9LAogCXsgMHgxNiwgSERBX0lOUFVULCAzIH0sCkBAIC00MTM3LDE3ICszODMwLDI5IEBACiAJfQogCiAJc3BlYy0+aW5pdF92ZXJic1tzcGVjLT5udW1faXZlcmJzKytdID0gdnQxNzA4U192b2x1bWVfaW5pdF92ZXJiczsKLQlzcGVjLT5pbml0X3ZlcmJzW3NwZWMtPm51bV9pdmVyYnMrK10gPSB2dDE3MDhTX3VuaXdpbGxfaW5pdF92ZXJiczsKKwlpZiAoY29kZWMtPnZlbmRvcl9pZCA9PSAweDExMDY0Mzk3KQorCQlzcGVjLT5pbml0X3ZlcmJzW3NwZWMtPm51bV9pdmVyYnMrK10gPQorCQkJdnQxNzA1X3VuaXdpbGxfaW5pdF92ZXJiczsKKwllbHNlCisJCXNwZWMtPmluaXRfdmVyYnNbc3BlYy0+bnVtX2l2ZXJicysrXSA9CisJCQl2dDE3MDhTX3VuaXdpbGxfaW5pdF92ZXJiczsKIAogCWlmIChjb2RlYy0+dmVuZG9yX2lkID09IDB4MTEwNjA0NDApCiAJCXNwZWMtPnN0cmVhbV9uYW1lX2FuYWxvZyA9ICJWVDE4MThTIEFuYWxvZyI7CisJZWxzZSBpZiAoY29kZWMtPnZlbmRvcl9pZCA9PSAweDExMDY0Mzk3KQorCQlzcGVjLT5zdHJlYW1fbmFtZV9hbmFsb2cgPSAiVlQxNzA1IEFuYWxvZyI7CiAJZWxzZQogCQlzcGVjLT5zdHJlYW1fbmFtZV9hbmFsb2cgPSAiVlQxNzA4UyBBbmFsb2ciOwotCXNwZWMtPnN0cmVhbV9hbmFsb2dfcGxheWJhY2sgPSAmdnQxNzA4U19wY21fYW5hbG9nX3BsYXliYWNrOworCWlmIChjb2RlYy0+dmVuZG9yX2lkID09IDB4MTEwNjQzOTcpCisJCXNwZWMtPnN0cmVhbV9hbmFsb2dfcGxheWJhY2sgPSAmdnQxNzA1X3BjbV9hbmFsb2dfcGxheWJhY2s7CisJZWxzZQorCQlzcGVjLT5zdHJlYW1fYW5hbG9nX3BsYXliYWNrID0gJnZ0MTcwOFNfcGNtX2FuYWxvZ19wbGF5YmFjazsKIAlzcGVjLT5zdHJlYW1fYW5hbG9nX2NhcHR1cmUgPSAmdnQxNzA4U19wY21fYW5hbG9nX2NhcHR1cmU7CiAKIAlpZiAoY29kZWMtPnZlbmRvcl9pZCA9PSAweDExMDYwNDQwKQogCQlzcGVjLT5zdHJlYW1fbmFtZV9kaWdpdGFsID0gIlZUMTgxOFMgRGlnaXRhbCI7CisJZWxzZSBpZiAoY29kZWMtPnZlbmRvcl9pZCA9PSAweDExMDY0Mzk3KQorCQlzcGVjLT5zdHJlYW1fbmFtZV9kaWdpdGFsID0gIlZUMTcwNSBEaWdpdGFsIjsKIAllbHNlCiAJCXNwZWMtPnN0cmVhbV9uYW1lX2RpZ2l0YWwgPSAiVlQxNzA4UyBEaWdpdGFsIjsKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9wbGF5YmFjayA9ICZ2dDE3MDhTX3BjbV9kaWdpdGFsX3BsYXliYWNrOwpAQCAtNDE4NSwxMyArMzg5MCwyMiBAQAogCQlzcGVjLT5zdHJlYW1fbmFtZV9hbmFsb2cgPSAiVlQxODE4UyBBbmFsb2ciOwogCQlzcGVjLT5zdHJlYW1fbmFtZV9kaWdpdGFsID0gIlZUMTgxOFMgRGlnaXRhbCI7CiAJfQorCS8qIGNvcnJlY3QgbmFtZXMgZm9yIFZUMTcwNSAqLworCWlmIChjb2RlYy0+dmVuZG9yX2lkID09IDB4MTEwNjQzOTcpCXsKKwkJa2ZyZWUoY29kZWMtPmNoaXBfbmFtZSk7CisJCWNvZGVjLT5jaGlwX25hbWUgPSBrc3RyZHVwKCJWVDE3MDUiLCBHRlBfS0VSTkVMKTsKKwkJc25wcmludGYoY29kZWMtPmJ1cy0+Y2FyZC0+bWl4ZXJuYW1lLAorCQkJIHNpemVvZihjb2RlYy0+YnVzLT5jYXJkLT5taXhlcm5hbWUpLAorCQkJICIlcyAlcyIsIGNvZGVjLT52ZW5kb3JfbmFtZSwgY29kZWMtPmNoaXBfbmFtZSk7CisJfQorCXNwZWMtPnNldF93aWRnZXRzX3Bvd2VyX3N0YXRlID0gIHNldF93aWRnZXRzX3Bvd2VyX3N0YXRlX3Z0MTcwOEI7CiAJcmV0dXJuIDA7CiB9CiAKIC8qIFBhdGNoIGZvciBWVDE3MDIgKi8KIAogLyogY2FwdHVyZSBtaXhlciBlbGVtZW50cyAqLwotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHZ0MTcwMl9jYXB0dXJlX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdnQxNzAyX2NhcHR1cmVfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MTIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDEyLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMSwgMHgyMCwgMHgwLCBIREFfSU5QVVQpLApAQCAtNDIxNSw3ICszOTI5LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIHZ0MTcwMl92b2x1bWVfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiB2dDE3MDJfdm9sdW1lX2luaXRfdmVyYnNbXSA9IHsKIAkvKgogCSAqIFVubXV0ZSBBREMwLTEgYW5kIHNldCB0aGUgZGVmYXVsdCBpbnB1dCB0byBtaWMtaW4KIAkgKi8KQEAgLTQyNDYsNyArMzk2MCw3IEBACiAJeyB9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIHZ0MTcwMl91bml3aWxsX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgdnQxNzAyX3VuaXdpbGxfaW5pdF92ZXJic1tdID0gewogCXsweDE3LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsCiAJIEFDX1VTUlNQX0VOIHwgVklBX0hQX0VWRU5UIHwgVklBX0pBQ0tfRVZFTlR9LAogCXsweDE0LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgVklBX0pBQ0tfRVZFTlR9LApAQCAtNDI1Niw3ICszOTcwLDcgQEAKIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gdnQxNzAyX3BjbV9hbmFsb2dfcGxheWJhY2sgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9wY21fc3RyZWFtIHZ0MTcwMl9wY21fYW5hbG9nX3BsYXliYWNrID0gewogCS5zdWJzdHJlYW1zID0gMiwKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gMiwKQEAgLTQyNjksNyArMzk4Myw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gdnQxNzAyX3BjbV9hbmFsb2dfY2FwdHVyZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gdnQxNzAyX3BjbV9hbmFsb2dfY2FwdHVyZSA9IHsKIAkuc3Vic3RyZWFtcyA9IDMsCiAJLmNoYW5uZWxzX21pbiA9IDIsCiAJLmNoYW5uZWxzX21heCA9IDIsCkBAIC00MjgyLDcgKzM5OTYsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIHZ0MTcwMl9wY21fZGlnaXRhbF9wbGF5YmFjayA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gdnQxNzAyX3BjbV9kaWdpdGFsX3BsYXliYWNrID0gewogCS5zdWJzdHJlYW1zID0gMiwKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gMiwKQEAgLTQzMDQsNyArNDAxOCw3IEBACiAKIAlpZiAoY2ZnLT5saW5lX291dF9waW5zWzBdKSB7CiAJCS8qIGNvbmZpZyBkYWMgbGlzdCAqLwotCQlzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1swXSA9IDB4MTA7CisJCXNwZWMtPnByaXZhdGVfZGFjX25pZHNbMF0gPSAweDEwOwogCX0KIAogCXJldHVybiAwOwpAQCAtNDM4Miw3ICs0MDk2LDcgQEAKIHN0YXRpYyBpbnQgdnQxNzAyX2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCQkJY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQogewotCXN0YXRpYyBoZGFfbmlkX3QgcGluX2lkeHNbXSA9IHsgMHgxNCwgMHgxNSwgMHgxOCwgMHhmZiB9OworCXN0YXRpYyBjb25zdCBoZGFfbmlkX3QgcGluX2lkeHNbXSA9IHsgMHgxNCwgMHgxNSwgMHgxOCwgMHhmZiB9OwogCXJldHVybiB2dF9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3Rscyhjb2RlYywgY2ZnLCAweDFhLCBwaW5faWR4cywKIAkJCQkJCUFSUkFZX1NJWkUocGluX2lkeHMpKTsKIH0KQEAgLTQ0MzMsNyArNDE0Nyw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCi1zdGF0aWMgc3RydWN0IGhkYV9hbXBfbGlzdCB2dDE3MDJfbG9vcGJhY2tzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9hbXBfbGlzdCB2dDE3MDJfbG9vcGJhY2tzW10gPSB7CiAJeyAweDFBLCBIREFfSU5QVVQsIDEgfSwKIAl7IDB4MUEsIEhEQV9JTlBVVCwgMiB9LAogCXsgMHgxQSwgSERBX0lOUFVULCAzIH0sCkBAIC00NDQyLDYgKzQxNTYsMzcgQEAKIH07CiAjZW5kaWYKIAorc3RhdGljIHZvaWQgc2V0X3dpZGdldHNfcG93ZXJfc3RhdGVfdnQxNzAyKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCWludCBpbXV4X2lzX3NtaXhlciA9CisJc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDEzLCAwLCBBQ19WRVJCX0dFVF9DT05ORUNUX1NFTCwgMHgwMCkgPT0gMzsKKwl1bnNpZ25lZCBpbnQgcGFybTsKKwkvKiBpbnB1dHMgKi8KKwkvKiBQVyAxLzIvNSAoMTRoLzE1aC8xOGgpICovCisJcGFybSA9IEFDX1BXUlNUX0QzOworCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MTQsICZwYXJtKTsKKwlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDE1LCAmcGFybSk7CisJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgxOCwgJnBhcm0pOworCWlmIChpbXV4X2lzX3NtaXhlcikKKwkJcGFybSA9IEFDX1BXUlNUX0QwOyAvKiBTVzAgKDEzaCkgPSBzdGVyZW8gbWl4ZXIgKGlkeCAzKSAqLworCS8qIFNXMCAoMTNoKSwgQUlXIDAvMS8yICgxMmgvMWZoLzIwaCkgKi8KKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDEzLCAwLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxMiwgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MWYsIDAsIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBwYXJtKTsKKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDIwLCAwLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7CisKKwkvKiBvdXRwdXRzICovCisJLyogUFcgMy80ICgxNmgvMTdoKSAqLworCXBhcm0gPSBBQ19QV1JTVF9EMzsKKwlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDE3LCAmcGFybSk7CisJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgxNiwgJnBhcm0pOworCS8qIE1XMCAoMWFoKSwgQU9XIDAvMSAoMTBoLzFkaCkgKi8KKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDFhLCAwLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwKKwkJCSAgICBpbXV4X2lzX3NtaXhlciA/IEFDX1BXUlNUX0QwIDogcGFybSk7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxMCwgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MWQsIDAsIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBwYXJtKTsKK30KKwogc3RhdGljIGludCBwYXRjaF92dDE3MDIoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IHZpYV9zcGVjICpzcGVjOwpAQCAtNDQ4OCwxMyArNDIzMywxNCBAQAogCXNwZWMtPmxvb3BiYWNrLmFtcGxpc3QgPSB2dDE3MDJfbG9vcGJhY2tzOwogI2VuZGlmCiAKKwlzcGVjLT5zZXRfd2lkZ2V0c19wb3dlcl9zdGF0ZSA9ICBzZXRfd2lkZ2V0c19wb3dlcl9zdGF0ZV92dDE3MDI7CiAJcmV0dXJuIDA7CiB9CiAKIC8qIFBhdGNoIGZvciBWVDE3MThTICovCiAKIC8qIGNhcHR1cmUgbWl4ZXIgZWxlbWVudHMgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB2dDE3MThTX2NhcHR1cmVfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB2dDE3MThTX2NhcHR1cmVfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MTAsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDEwLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMSwgMHgxMSwgMHgwLCBIREFfSU5QVVQpLApAQCAtNDUxNiwxNCArNDI2MiwxNSBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgdnQxNzE4U192b2x1bWVfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiB2dDE3MThTX3ZvbHVtZV9pbml0X3ZlcmJzW10gPSB7CiAJLyoKIAkgKiBVbm11dGUgQURDMC0xIGFuZCBzZXQgdGhlIGRlZmF1bHQgaW5wdXQgdG8gbWljLWluCiAJICovCiAJezB4MTAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCXsweDExLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAotCisJLyogRW5hYmxlIE1XMCBhZGp1c3QgR2FpbiA1ICovCisJezB4MSwgMHhmYjIsIDB4MTB9LAogCS8qIE11dGUgaW5wdXQgYW1wcyAoQ0QsIExpbmUgSW4sIE1pYyAxICYgTWljIDIpIG9mIHRoZSBhbmFsb2ctbG9vcGJhY2sKIAkgKiBtaXhlciB3aWRnZXQKIAkgKi8KQEAgLTQ1MzIsNyArNDI3OSw3IEBACiAJezB4MjEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKIAl7MHgyMSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMil9LAogCXsweDIxLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgzKX0sCi0JezB4MjEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDUpfSwKKwl7MHgyMSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSg1KX0sCiAKIAkvKiBTZXR1cCBkZWZhdWx0IGlucHV0IG9mIEZyb250IEhQIHRvIE1XOSAqLwogCXsweDI4LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKQEAgLTQ1NjMsNyArNDMxMCw3IEBACiB9OwogCiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgdnQxNzE4U191bml3aWxsX2luaXRfdmVyYnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgdnQxNzE4U191bml3aWxsX2luaXRfdmVyYnNbXSA9IHsKIAl7MHgyOCwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLAogCSBBQ19VU1JTUF9FTiB8IFZJQV9IUF9FVkVOVCB8IFZJQV9KQUNLX0VWRU5UfSwKIAl7MHgyNCwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IFZJQV9KQUNLX0VWRU5UfSwKQEAgLTQ1NzYsNyArNDMyMyw3IEBACiAJeyB9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIHZ0MTcxOFNfcGNtX2FuYWxvZ19wbGF5YmFjayA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gdnQxNzE4U19wY21fYW5hbG9nX3BsYXliYWNrID0gewogCS5zdWJzdHJlYW1zID0gMiwKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gMTAsCkBAIC00NTg5LDcgKzQzMzYsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIHZ0MTcxOFNfcGNtX2FuYWxvZ19jYXB0dXJlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSB2dDE3MThTX3BjbV9hbmFsb2dfY2FwdHVyZSA9IHsKIAkuc3Vic3RyZWFtcyA9IDIsCiAJLmNoYW5uZWxzX21pbiA9IDIsCiAJLmNoYW5uZWxzX21heCA9IDIsCkBAIC00NjAyLDcgKzQzNDksNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIHZ0MTcxOFNfcGNtX2RpZ2l0YWxfcGxheWJhY2sgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9wY21fc3RyZWFtIHZ0MTcxOFNfcGNtX2RpZ2l0YWxfcGxheWJhY2sgPSB7CiAJLnN1YnN0cmVhbXMgPSAyLAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSAyLApAQCAtNDYxNSw3ICs0MzYyLDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSB2dDE3MThTX3BjbV9kaWdpdGFsX2NhcHR1cmUgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9wY21fc3RyZWFtIHZ0MTcxOFNfcGNtX2RpZ2l0YWxfY2FwdHVyZSA9IHsKIAkuc3Vic3RyZWFtcyA9IDEsCiAJLmNoYW5uZWxzX21pbiA9IDIsCiAJLmNoYW5uZWxzX21heCA9IDIsCkBAIC00NjM4LDE2ICs0Mzg1LDE2IEBACiAJCQkvKiBjb25maWcgZGFjIGxpc3QgKi8KIAkJCXN3aXRjaCAoaSkgewogCQkJY2FzZSBBVVRPX1NFUV9GUk9OVDoKLQkJCQlzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tpXSA9IDB4ODsKKwkJCQlzcGVjLT5wcml2YXRlX2RhY19uaWRzW2ldID0gMHg4OwogCQkJCWJyZWFrOwogCQkJY2FzZSBBVVRPX1NFUV9DRU5MRkU6Ci0JCQkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV0gPSAweGE7CisJCQkJc3BlYy0+cHJpdmF0ZV9kYWNfbmlkc1tpXSA9IDB4YTsKIAkJCQlicmVhazsKIAkJCWNhc2UgQVVUT19TRVFfU1VSUk9VTkQ6Ci0JCQkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV0gPSAweDk7CisJCQkJc3BlYy0+cHJpdmF0ZV9kYWNfbmlkc1tpXSA9IDB4OTsKIAkJCQlicmVhazsKIAkJCWNhc2UgQVVUT19TRVFfU0lERToKLQkJCQlzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tpXSA9IDB4YjsKKwkJCQlzcGVjLT5wcml2YXRlX2RhY19uaWRzW2ldID0gMHhiOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CkBAIC00NzY5LDcgKzQ1MTYsNyBAQAogc3RhdGljIGludCB2dDE3MThTX2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCQkJY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQogewotCXN0YXRpYyBoZGFfbmlkX3QgcGluX2lkeHNbXSA9IHsgMHgyYywgMHgyYiwgMHgyYSwgMHgyOSwgMCwgMHhmZiB9OworCXN0YXRpYyBjb25zdCBoZGFfbmlkX3QgcGluX2lkeHNbXSA9IHsgMHgyYywgMHgyYiwgMHgyYSwgMHgyOSwgMCwgMHhmZiB9OwogCXJldHVybiB2dF9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3Rscyhjb2RlYywgY2ZnLCAweDIxLCBwaW5faWR4cywKIAkJCQkJCUFSUkFZX1NJWkUocGluX2lkeHMpKTsKIH0KQEAgLTQ4MjAsNyArNDU2Nyw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCi1zdGF0aWMgc3RydWN0IGhkYV9hbXBfbGlzdCB2dDE3MThTX2xvb3BiYWNrc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfYW1wX2xpc3QgdnQxNzE4U19sb29wYmFja3NbXSA9IHsKIAl7IDB4MjEsIEhEQV9JTlBVVCwgMSB9LAogCXsgMHgyMSwgSERBX0lOUFVULCAyIH0sCiAJeyAweDIxLCBIREFfSU5QVVQsIDMgfSwKQEAgLTQ4MjksNiArNDU3Niw3MiBAQAogfTsKICNlbmRpZgogCitzdGF0aWMgdm9pZCBzZXRfd2lkZ2V0c19wb3dlcl9zdGF0ZV92dDE3MThTKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB2aWFfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWludCBpbXV4X2lzX3NtaXhlcjsKKwl1bnNpZ25lZCBpbnQgcGFybTsKKwkvKiBNVVg2ICgxZWgpID0gc3RlcmVvIG1peGVyICovCisJaW11eF9pc19zbWl4ZXIgPQorCXNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxZSwgMCwgQUNfVkVSQl9HRVRfQ09OTkVDVF9TRUwsIDB4MDApID09IDU7CisJLyogaW5wdXRzICovCisJLyogUFcgNS82LzcgKDI5aC8yYWgvMmJoKSAqLworCXBhcm0gPSBBQ19QV1JTVF9EMzsKKwlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDI5LCAmcGFybSk7CisJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgyYSwgJnBhcm0pOworCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MmIsICZwYXJtKTsKKwlpZiAoaW11eF9pc19zbWl4ZXIpCisJCXBhcm0gPSBBQ19QV1JTVF9EMDsKKwkvKiBNVVg2LzcgKDFlaC8xZmgpLCBBSVcgMC8xICgxMGgvMTFoKSAqLworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MWUsIDAsIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBwYXJtKTsKKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDFmLCAwLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxMCwgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTEsIDAsIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBwYXJtKTsKKworCS8qIG91dHB1dHMgKi8KKwkvKiBQVzMgKDI3aCksIE1XMiAoMWFoKSwgQU9XMyAoYmgpICovCisJcGFybSA9IEFDX1BXUlNUX0QzOworCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MjcsICZwYXJtKTsKKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDFhLCAwLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHhiLCAwLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7CisKKwkvKiBQVzIgKDI2aCksIEFPVzIgKGFoKSAqLworCXBhcm0gPSBBQ19QV1JTVF9EMzsKKwlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDI2LCAmcGFybSk7CisJaWYgKHNwZWMtPnNtYXJ0NTFfZW5hYmxlZCkKKwkJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgyYiwgJnBhcm0pOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4YSwgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOworCisJLyogUFcwICgyNGgpLCBBT1cwICg4aCkgKi8KKwlwYXJtID0gQUNfUFdSU1RfRDM7CisJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgyNCwgJnBhcm0pOworCWlmICghc3BlYy0+aHBfaW5kZXBlbmRlbnRfbW9kZSkgLyogY2hlY2sgZm9yIHJlZGlyZWN0ZWQgSFAgKi8KKwkJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgyOCwgJnBhcm0pOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4OCwgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOworCS8qIE1XOSAoMjFoKSwgTXcyICgxYWgpLCBBT1cwICg4aCkgKi8KKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDIxLCAwLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwKKwkJCSAgICBpbXV4X2lzX3NtaXhlciA/IEFDX1BXUlNUX0QwIDogcGFybSk7CisKKwkvKiBQVzEgKDI1aCksIEFPVzEgKDloKSAqLworCXBhcm0gPSBBQ19QV1JTVF9EMzsKKwlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDI1LCAmcGFybSk7CisJaWYgKHNwZWMtPnNtYXJ0NTFfZW5hYmxlZCkKKwkJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgyYSwgJnBhcm0pOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4OSwgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOworCisJaWYgKHNwZWMtPmhwX2luZGVwZW5kZW50X21vZGUpIHsKKwkJLyogUFc0ICgyOGgpLCBNVzMgKDFiaCksIE1VWDEoMzRoKSwgQU9XNCAoY2gpICovCisJCXBhcm0gPSBBQ19QV1JTVF9EMzsKKwkJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgyOCwgJnBhcm0pOworCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDFiLCAwLAorCQkJCSAgICBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7CisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MzQsIDAsCisJCQkJICAgIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBwYXJtKTsKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHhjLCAwLAorCQkJCSAgICBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7CisJfQorfQorCiBzdGF0aWMgaW50IHBhdGNoX3Z0MTcxOFMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IHZpYV9zcGVjICpzcGVjOwpAQCAtNDg5MCw2ICs0NzAzLDggQEAKIAlzcGVjLT5sb29wYmFjay5hbXBsaXN0ID0gdnQxNzE4U19sb29wYmFja3M7CiAjZW5kaWYKIAorCXNwZWMtPnNldF93aWRnZXRzX3Bvd2VyX3N0YXRlID0gIHNldF93aWRnZXRzX3Bvd2VyX3N0YXRlX3Z0MTcxOFM7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDkyOSwxMyArNDc0NCwxMiBAQAogCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MjYsIDAsCiAJCQkJCSAgICAgICBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgaW5kZXgpOwogCXNwZWMtPmRtaWNfZW5hYmxlZCA9IGluZGV4OwotCXNldF9qYWNrX3Bvd2VyX3N0YXRlKGNvZGVjKTsKLQorCXNldF93aWRnZXRzX3Bvd2VyX3N0YXRlKGNvZGVjKTsKIAlyZXR1cm4gMTsKIH0KIAogLyogY2FwdHVyZSBtaXhlciBlbGVtZW50cyAqLwotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHZ0MTcxNlNfY2FwdHVyZV9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHZ0MTcxNlNfY2FwdHVyZV9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgxMywgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MTMsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAxLCAweDE0LCAweDAsIEhEQV9JTlBVVCksCkBAIC00OTU0LDcgKzQ3NjgsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB2dDE3MTZzX2RtaWNfbWl4ZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB2dDE3MTZzX2RtaWNfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJEaWdpdGFsIE1pYyBDYXB0dXJlIFZvbHVtZSIsIDB4MjIsIDB4MCwgSERBX0lOUFVUKSwKIAl7CiAJIC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLApAQCAtNDk3MCwxMiArNDc4NCwxMiBAQAogCiAKIC8qIG1vbm8tb3V0IG1peGVyIGVsZW1lbnRzICovCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdnQxNzE2U19tb25vX291dF9taXhlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHZ0MTcxNlNfbW9ub19vdXRfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfTVVURSgiTW9ubyBQbGF5YmFjayBTd2l0Y2giLCAweDJhLCAweDAsIEhEQV9PVVRQVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgdnQxNzE2U192b2x1bWVfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiB2dDE3MTZTX3ZvbHVtZV9pbml0X3ZlcmJzW10gPSB7CiAJLyoKIAkgKiBVbm11dGUgQURDMC0xIGFuZCBzZXQgdGhlIGRlZmF1bHQgaW5wdXQgdG8gbWljLWluCiAJICovCkBAIC01MDI0LDcgKzQ4MzgsNyBAQAogfTsKIAogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIHZ0MTcxNlNfdW5pd2lsbF9pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIHZ0MTcxNlNfdW5pd2lsbF9pbml0X3ZlcmJzW10gPSB7CiAJezB4MWQsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwKIAkgQUNfVVNSU1BfRU4gfCBWSUFfSFBfRVZFTlQgfCBWSUFfSkFDS19FVkVOVH0sCiAJezB4MTksIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBWSUFfSkFDS19FVkVOVH0sCkBAIC01MDM3LDcgKzQ4NTEsNyBAQAogCXsgfQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSB2dDE3MTZTX3BjbV9hbmFsb2dfcGxheWJhY2sgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9wY21fc3RyZWFtIHZ0MTcxNlNfcGNtX2FuYWxvZ19wbGF5YmFjayA9IHsKIAkuc3Vic3RyZWFtcyA9IDIsCiAJLmNoYW5uZWxzX21pbiA9IDIsCiAJLmNoYW5uZWxzX21heCA9IDYsCkBAIC01MDUwLDcgKzQ4NjQsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIHZ0MTcxNlNfcGNtX2FuYWxvZ19jYXB0dXJlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSB2dDE3MTZTX3BjbV9hbmFsb2dfY2FwdHVyZSA9IHsKIAkuc3Vic3RyZWFtcyA9IDIsCiAJLmNoYW5uZWxzX21pbiA9IDIsCiAJLmNoYW5uZWxzX21heCA9IDIsCkBAIC01MDYzLDcgKzQ4NzcsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIHZ0MTcxNlNfcGNtX2RpZ2l0YWxfcGxheWJhY2sgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9wY21fc3RyZWFtIHZ0MTcxNlNfcGNtX2RpZ2l0YWxfcGxheWJhY2sgPSB7CiAJLnN1YnN0cmVhbXMgPSAyLAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSAyLApAQCAtNTA5MiwxMyArNDkwNiwxMyBAQAogCQkJLyogY29uZmlnIGRhYyBsaXN0ICovCiAJCQlzd2l0Y2ggKGkpIHsKIAkJCWNhc2UgQVVUT19TRVFfRlJPTlQ6Ci0JCQkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV0gPSAweDEwOworCQkJCXNwZWMtPnByaXZhdGVfZGFjX25pZHNbaV0gPSAweDEwOwogCQkJCWJyZWFrOwogCQkJY2FzZSBBVVRPX1NFUV9DRU5MRkU6Ci0JCQkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV0gPSAweDI1OworCQkJCXNwZWMtPnByaXZhdGVfZGFjX25pZHNbaV0gPSAweDI1OwogCQkJCWJyZWFrOwogCQkJY2FzZSBBVVRPX1NFUV9TVVJST1VORDoKLQkJCQlzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tpXSA9IDB4MTE7CisJCQkJc3BlYy0+cHJpdmF0ZV9kYWNfbmlkc1tpXSA9IDB4MTE7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KQEAgLTUyMzMsNyArNTA0Nyw3IEBACiBzdGF0aWMgaW50IHZ0MTcxNlNfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJCQljb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCiB7Ci0Jc3RhdGljIGhkYV9uaWRfdCBwaW5faWR4c1tdID0geyAweDFmLCAweDFhLCAweDFiLCAweDFlLCAwLCAweGZmIH07CisJc3RhdGljIGNvbnN0IGhkYV9uaWRfdCBwaW5faWR4c1tdID0geyAweDFmLCAweDFhLCAweDFiLCAweDFlLCAwLCAweGZmIH07CiAJcmV0dXJuIHZ0X2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKGNvZGVjLCBjZmcsIDB4MTYsIHBpbl9pZHhzLAogCQkJCQkJQVJSQVlfU0laRShwaW5faWR4cykpOwogfQpAQCAtNTI4MCw3ICs1MDk0LDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKLXN0YXRpYyBzdHJ1Y3QgaGRhX2FtcF9saXN0IHZ0MTcxNlNfbG9vcGJhY2tzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9hbXBfbGlzdCB2dDE3MTZTX2xvb3BiYWNrc1tdID0gewogCXsgMHgxNiwgSERBX0lOUFVULCAxIH0sCiAJeyAweDE2LCBIREFfSU5QVVQsIDIgfSwKIAl7IDB4MTYsIEhEQV9JTlBVVCwgMyB9LApAQCAtNTI4OSw2ICs1MTAzLDk5IEBACiB9OwogI2VuZGlmCiAKK3N0YXRpYyB2b2lkIHNldF93aWRnZXRzX3Bvd2VyX3N0YXRlX3Z0MTcxNlMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHZpYV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaW50IGltdXhfaXNfc21peGVyOworCXVuc2lnbmVkIGludCBwYXJtOworCXVuc2lnbmVkIGludCBtb25vX291dCwgcHJlc2VudDsKKwkvKiBTVzAgKDE3aCkgPSBzdGVyZW8gbWl4ZXIgKi8KKwlpbXV4X2lzX3NtaXhlciA9CisJKHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxNywgMCwKKwkJCSAgICBBQ19WRVJCX0dFVF9DT05ORUNUX1NFTCwgMHgwMCkgPT0gIDUpOworCS8qIGlucHV0cyAqLworCS8qIFBXIDEvMi81ICgxYWgvMWJoLzFlaCkgKi8KKwlwYXJtID0gQUNfUFdSU1RfRDM7CisJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgxYSwgJnBhcm0pOworCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MWIsICZwYXJtKTsKKwlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDFlLCAmcGFybSk7CisJaWYgKGltdXhfaXNfc21peGVyKQorCQlwYXJtID0gQUNfUFdSU1RfRDA7CisJLyogU1cwICgxN2gpLCBBSVcwKDEzaCkgKi8KKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDE3LCAwLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxMywgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOworCisJcGFybSA9IEFDX1BXUlNUX0QzOworCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MWUsICZwYXJtKTsKKwkvKiBQVzExICgyMmgpICovCisJaWYgKHNwZWMtPmRtaWNfZW5hYmxlZCkKKwkJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgyMiwgJnBhcm0pOworCWVsc2UKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgyMiwgMCwKKwkJCQkgICAgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIEFDX1BXUlNUX0QzKTsKKworCS8qIFNXMigyNmgpLCBBSVcxKDE0aCkgKi8KKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDI2LCAwLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxNCwgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOworCisJLyogb3V0cHV0cyAqLworCS8qIFBXMCAoMTloKSwgU1cxICgxOGgpLCBBT1cxICgxMWgpICovCisJcGFybSA9IEFDX1BXUlNUX0QzOworCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MTksICZwYXJtKTsKKwkvKiBTbWFydCA1LjEgUFcyKDFiaCkgKi8KKwlpZiAoc3BlYy0+c21hcnQ1MV9lbmFibGVkKQorCQlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDFiLCAmcGFybSk7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxOCwgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTEsIDAsIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBwYXJtKTsKKworCS8qIFBXNyAoMjNoKSwgU1czICgyN2gpLCBBT1czICgyNWgpICovCisJcGFybSA9IEFDX1BXUlNUX0QzOworCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MjMsICZwYXJtKTsKKwkvKiBTbWFydCA1LjEgUFcxKDFhaCkgKi8KKwlpZiAoc3BlYy0+c21hcnQ1MV9lbmFibGVkKQorCQlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDFhLCAmcGFybSk7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgyNywgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOworCisJLyogU21hcnQgNS4xIFBXNSgxZWgpICovCisJaWYgKHNwZWMtPnNtYXJ0NTFfZW5hYmxlZCkKKwkJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgxZSwgJnBhcm0pOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MjUsIDAsIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBwYXJtKTsKKworCS8qIE1vbm8gb3V0ICovCisJLyogU1c0KDI4aCktPk1XMSgyOWgpLT4gUFcxMiAoMmFoKSovCisJcHJlc2VudCA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIDB4MWMpOworCisJaWYgKHByZXNlbnQpCisJCW1vbm9fb3V0ID0gMDsKKwllbHNlIHsKKwkJcHJlc2VudCA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIDB4MWQpOworCQlpZiAoIXNwZWMtPmhwX2luZGVwZW5kZW50X21vZGUgJiYgcHJlc2VudCkKKwkJCW1vbm9fb3V0ID0gMDsKKwkJZWxzZQorCQkJbW9ub19vdXQgPSAxOworCX0KKwlwYXJtID0gbW9ub19vdXQgPyBBQ19QV1JTVF9EMCA6IEFDX1BXUlNUX0QzOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MjgsIDAsIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBwYXJtKTsKKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDI5LCAwLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgyYSwgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOworCisJLyogUFcgMy80ICgxY2gvMWRoKSAqLworCXBhcm0gPSBBQ19QV1JTVF9EMzsKKwlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDFjLCAmcGFybSk7CisJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgxZCwgJnBhcm0pOworCS8qIEhQIEluZGVwZW5kZW50IE1vZGUsIHBvd2VyIG9uIEFPVzMgKi8KKwlpZiAoc3BlYy0+aHBfaW5kZXBlbmRlbnRfbW9kZSkKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgyNSwgMCwKKwkJCQkgICAgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOworCisJLyogZm9yY2UgdG8gRDAgZm9yIGludGVybmFsIFNwZWFrZXIgKi8KKwkvKiBNVzAgKDE2aCksIEFPVzAgKDEwaCkgKi8KKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDE2LCAwLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwKKwkJCSAgICBpbXV4X2lzX3NtaXhlciA/IEFDX1BXUlNUX0QwIDogcGFybSk7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxMCwgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsCisJCQkgICAgbW9ub19vdXQgPyBBQ19QV1JTVF9EMCA6IHBhcm0pOworfQorCiBzdGF0aWMgaW50IHBhdGNoX3Z0MTcxNlMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IHZpYV9zcGVjICpzcGVjOwpAQCAtNTM0MywxMyArNTI1MCwxNCBAQAogCXNwZWMtPmxvb3BiYWNrLmFtcGxpc3QgPSB2dDE3MTZTX2xvb3BiYWNrczsKICNlbmRpZgogCisJc3BlYy0+c2V0X3dpZGdldHNfcG93ZXJfc3RhdGUgPSBzZXRfd2lkZ2V0c19wb3dlcl9zdGF0ZV92dDE3MTZTOwogCXJldHVybiAwOwogfQogCiAvKiBmb3IgdnQyMDAyUCAqLwogCiAvKiBjYXB0dXJlIG1peGVyIGVsZW1lbnRzICovCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdnQyMDAyUF9jYXB0dXJlX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdnQyMDAyUF9jYXB0dXJlX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDEwLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgxMCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDEsIDB4MTEsIDB4MCwgSERBX0lOUFVUKSwKQEAgLTUzNzIsNyArNTI4MCwxMSBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgdnQyMDAyUF92b2x1bWVfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiB2dDIwMDJQX3ZvbHVtZV9pbml0X3ZlcmJzW10gPSB7CisJLyogQ2xhc3MtRCBzcGVha2VyIHJlbGF0ZWQgdmVyYnMgKi8KKwl7MHgxLCAweGZlMCwgMHg0fSwKKwl7MHgxLCAweGZlOSwgMHg4MH0sCisJezB4MSwgMHhmZTIsIDB4MjJ9LAogCS8qCiAJICogVW5tdXRlIEFEQzAtMSBhbmQgc2V0IHRoZSBkZWZhdWx0IGlucHV0IHRvIG1pYy1pbgogCSAqLwpAQCAtNTQyMyw5ICs1MzM1LDYwIEBACiAJezB4MSwgMHhmYjgsIDB4ODh9LAogCXsgfQogfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgdnQxODAyX3ZvbHVtZV9pbml0X3ZlcmJzW10gPSB7CisJLyoKKwkgKiBVbm11dGUgQURDMC0xIGFuZCBzZXQgdGhlIGRlZmF1bHQgaW5wdXQgdG8gbWljLWluCisJICovCisJezB4OCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisJezB4OSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiB2dDIwMDJQX3VuaXdpbGxfaW5pdF92ZXJic1tdID0geworCS8qIE11dGUgaW5wdXQgYW1wcyAoQ0QsIExpbmUgSW4sIE1pYyAxICYgTWljIDIpIG9mIHRoZSBhbmFsb2ctbG9vcGJhY2sKKwkgKiBtaXhlciB3aWRnZXQKKwkgKi8KKwkvKiBBbXAgSW5kaWNlczogQ0QgPSAxLCBNaWMxID0gMiwgTGluZSA9IDMsIE1pYzIgPSA0ICovCisJezB4MjEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgyMSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAorCXsweDIxLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgyKX0sCisJezB4MjEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDMpfSwKKwl7MHgyMSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNCl9LAorCisJLyogTVVYIEluZGljZXM6IE1pYyA9IDAgKi8KKwl7MHgxZSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB9LAorCXsweDFmLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMH0sCisKKwkvKiBQVzkgT3V0cHV0IGVuYWJsZSAqLworCXsweDJkLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIEFDX1BJTkNUTF9PVVRfRU59LAorCisJLyogRW5hYmxlIEJvb3N0IFZvbHVtZSBiYWNrZG9vciAqLworCXsweDEsIDB4ZmI5LCAweDI0fSwKKworCS8qIE1XMC8xLzQvODogdW4tbXV0ZSBpbmRleCAwIChNVVh4KSwgdW4tbXV0ZSBpbmRleCAxIChNVzkpICovCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisJezB4MWMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCisJezB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAorCXsweDFjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKKworCS8qIHNldCBNVVgwLzEvNC84ID0gMCAoQU9XMCkgKi8KKwl7MHgzNCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB9LAorCXsweDM1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMH0sCisJezB4MzgsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAwfSwKKwl7MHgzYywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB9LAorCisJLyogc2V0IFBXMCBpbmRleD0wIChNVzApICovCisJezB4MjQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAwfSwKKworCS8qIEVuYWJsZSBBT1cwIHRvIE1XOSAqLworCXsweDEsIDB4ZmI4LCAweDg4fSwKKwl7IH0KK307CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiB2dDIwMDJQX3VuaXdpbGxfaW5pdF92ZXJic1tdID0gewogCXsweDI1LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsCiAJIEFDX1VTUlNQX0VOIHwgVklBX0pBQ0tfRVZFTlQgfCBWSUFfQklORF9IUF9FVkVOVH0sCiAJezB4MjYsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwKQEAgLTU0MzUsOCArNTM5OCwxOCBAQAogCXsweDJiLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgVklBX0pBQ0tfRVZFTlR9LAogCXsgfQogfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgdnQxODAyX3VuaXdpbGxfaW5pdF92ZXJic1tdID0geworCXsweDI1LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsCisJIEFDX1VTUlNQX0VOIHwgVklBX0pBQ0tfRVZFTlQgfCBWSUFfQklORF9IUF9FVkVOVH0sCisJezB4MjgsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwKKwkgQUNfVVNSU1BfRU4gfCBWSUFfSkFDS19FVkVOVCB8IFZJQV9CSU5EX0hQX0VWRU5UfSwKKwl7MHgyOSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IFZJQV9KQUNLX0VWRU5UfSwKKwl7MHgyYSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IFZJQV9KQUNLX0VWRU5UfSwKKwl7MHgyYiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IFZJQV9KQUNLX0VWRU5UfSwKKwl7IH0KK307CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gdnQyMDAyUF9wY21fYW5hbG9nX3BsYXliYWNrID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSB2dDIwMDJQX3BjbV9hbmFsb2dfcGxheWJhY2sgPSB7CiAJLnN1YnN0cmVhbXMgPSAyLAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSAyLApAQCAtNTQ0OSw3ICs1NDIyLDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSB2dDIwMDJQX3BjbV9hbmFsb2dfY2FwdHVyZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gdnQyMDAyUF9wY21fYW5hbG9nX2NhcHR1cmUgPSB7CiAJLnN1YnN0cmVhbXMgPSAyLAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSAyLApAQCAtNTQ2Miw3ICs1NDM1LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSB2dDIwMDJQX3BjbV9kaWdpdGFsX3BsYXliYWNrID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSB2dDIwMDJQX3BjbV9kaWdpdGFsX3BsYXliYWNrID0gewogCS5zdWJzdHJlYW1zID0gMSwKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gMiwKQEAgLTU0ODIsNyArNTQ1NSw3IEBACiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSAxOwogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gc3BlYy0+cHJpdmF0ZV9kYWNfbmlkczsKIAlpZiAoY2ZnLT5saW5lX291dF9waW5zWzBdKQotCQlzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1swXSA9IDB4ODsKKwkJc3BlYy0+cHJpdmF0ZV9kYWNfbmlkc1swXSA9IDB4ODsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTQ5MSwxMCArNTQ2NCwxNSBAQAogCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKIHsKIAlpbnQgZXJyOworCWhkYV9uaWRfdCBzd19uaWQ7CiAKIAlpZiAoIWNmZy0+bGluZV9vdXRfcGluc1swXSkKIAkJcmV0dXJuIC0xOwogCisJaWYgKHNwZWMtPmNvZGVjX3R5cGUgPT0gVlQxODAyKQorCQlzd19uaWQgPSAweDI4OworCWVsc2UKKwkJc3dfbmlkID0gMHgyNjsKIAogCS8qIExpbmUtT3V0OiBQb3J0RSAqLwogCWVyciA9IHZpYV9hZGRfY29udHJvbChzcGVjLCBWSUFfQ1RMX1dJREdFVF9WT0wsCkBAIC01NTA0LDcgKzU0ODIsNyBAQAogCQlyZXR1cm4gZXJyOwogCWVyciA9IHZpYV9hZGRfY29udHJvbChzcGVjLCBWSUFfQ1RMX1dJREdFVF9CSU5EX1BJTl9NVVRFLAogCQkJICAgICAgIk1hc3RlciBGcm9udCBQbGF5YmFjayBTd2l0Y2giLAotCQkJICAgICAgSERBX0NPTVBPU0VfQU1QX1ZBTCgweDI2LCAzLCAwLCBIREFfT1VUUFVUKSk7CisJCQkgICAgICBIREFfQ09NUE9TRV9BTVBfVkFMKHN3X25pZCwgMywgMCwgSERBX09VVFBVVCkpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCkBAIC01NTQ0LDcgKzU1MjIsNyBAQAogewogCXN0cnVjdCB2aWFfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKLQlzdGF0aWMgaGRhX25pZF90IHBpbl9pZHhzW10gPSB7IDB4MmIsIDB4MmEsIDB4MjksIDB4ZmYgfTsKKwlzdGF0aWMgY29uc3QgaGRhX25pZF90IHBpbl9pZHhzW10gPSB7IDB4MmIsIDB4MmEsIDB4MjksIDB4ZmYgfTsKIAlpbnQgZXJyOwogCiAJZXJyID0gdnRfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoY29kZWMsIGNmZywgMHgyMSwgcGluX2lkeHMsCkBAIC01NjA1LDcgKzU1ODMsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQotc3RhdGljIHN0cnVjdCBoZGFfYW1wX2xpc3QgdnQyMDAyUF9sb29wYmFja3NbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2FtcF9saXN0IHZ0MjAwMlBfbG9vcGJhY2tzW10gPSB7CiAJeyAweDIxLCBIREFfSU5QVVQsIDAgfSwKIAl7IDB4MjEsIEhEQV9JTlBVVCwgMSB9LAogCXsgMHgyMSwgSERBX0lOUFVULCAyIH0sCkBAIC01NjEzLDYgKzU1OTEsMTE2IEBACiB9OwogI2VuZGlmCiAKK3N0YXRpYyB2b2lkIHNldF93aWRnZXRzX3Bvd2VyX3N0YXRlX3Z0MjAwMlAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHZpYV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaW50IGltdXhfaXNfc21peGVyOworCXVuc2lnbmVkIGludCBwYXJtOworCXVuc2lnbmVkIGludCBwcmVzZW50OworCS8qIE1VWDkgKDFlaCkgPSBzdGVyZW8gbWl4ZXIgKi8KKwlpbXV4X2lzX3NtaXhlciA9CisJc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDFlLCAwLCBBQ19WRVJCX0dFVF9DT05ORUNUX1NFTCwgMHgwMCkgPT0gMzsKKwkvKiBpbnB1dHMgKi8KKwkvKiBQVyA1LzYvNyAoMjloLzJhaC8yYmgpICovCisJcGFybSA9IEFDX1BXUlNUX0QzOworCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MjksICZwYXJtKTsKKwlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDJhLCAmcGFybSk7CisJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgyYiwgJnBhcm0pOworCXBhcm0gPSBBQ19QV1JTVF9EMDsKKwkvKiBNVVg5LzEwICgxZWgvMWZoKSwgQUlXIDAvMSAoMTBoLzExaCkgKi8KKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDFlLCAwLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxZiwgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTAsIDAsIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBwYXJtKTsKKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDExLCAwLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7CisKKwkvKiBvdXRwdXRzICovCisJLyogQU9XMCAoOGgpKi8KKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDgsIDAsIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBwYXJtKTsKKworCWlmIChzcGVjLT5jb2RlY190eXBlID09IFZUMTgwMikgeworCQkvKiBQVzQgKDI4aCksIE1XNCAoMThoKSwgTVVYNCgzOGgpICovCisJCXBhcm0gPSBBQ19QV1JTVF9EMzsKKwkJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgyOCwgJnBhcm0pOworCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDE4LCAwLAorCQkJCSAgICBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7CisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MzgsIDAsCisJCQkJICAgIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBwYXJtKTsKKwl9IGVsc2UgeworCQkvKiBQVzQgKDI2aCksIE1XNCAoMWNoKSwgTVVYNCgzN2gpICovCisJCXBhcm0gPSBBQ19QV1JTVF9EMzsKKwkJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgyNiwgJnBhcm0pOworCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDFjLCAwLAorCQkJCSAgICBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7CisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MzcsIDAsCisJCQkJICAgIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBwYXJtKTsKKwl9CisKKwlpZiAoc3BlYy0+Y29kZWNfdHlwZSA9PSBWVDE4MDIpIHsKKwkJLyogUFcxICgyNWgpLCBNVzEgKDE1aCksIE1VWDEoMzVoKSwgQU9XMSAoOWgpICovCisJCXBhcm0gPSBBQ19QV1JTVF9EMzsKKwkJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgyNSwgJnBhcm0pOworCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDE1LCAwLAorCQkJCSAgICBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7CisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MzUsIDAsCisJCQkJICAgIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBwYXJtKTsKKwl9IGVsc2UgeworCQkvKiBQVzEgKDI1aCksIE1XMSAoMTloKSwgTVVYMSgzNWgpLCBBT1cxICg5aCkgKi8KKwkJcGFybSA9IEFDX1BXUlNUX0QzOworCQlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDI1LCAmcGFybSk7CisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTksIDAsCisJCQkJICAgIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBwYXJtKTsKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgzNSwgMCwKKwkJCQkgICAgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOworCX0KKworCWlmIChzcGVjLT5ocF9pbmRlcGVuZGVudF9tb2RlKQorCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDksIDAsCisJCQkJICAgIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBBQ19QV1JTVF9EMCk7CisKKwkvKiBDbGFzcy1EICovCisJLyogUFcwICgyNGgpLCBNVzAoMThoLzE0aCksIE1VWDAoMzRoKSAqLworCXByZXNlbnQgPSBzbmRfaGRhX2phY2tfZGV0ZWN0KGNvZGVjLCAweDI1KTsKKworCXBhcm0gPSBBQ19QV1JTVF9EMzsKKwlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDI0LCAmcGFybSk7CisJcGFybSA9IHByZXNlbnQgPyBBQ19QV1JTVF9EMyA6IEFDX1BXUlNUX0QwOworCWlmIChzcGVjLT5jb2RlY190eXBlID09IFZUMTgwMikKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxNCwgMCwKKwkJCQkgICAgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOworCWVsc2UKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxOCwgMCwKKwkJCQkgICAgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MzQsIDAsIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBwYXJtKTsKKworCS8qIE1vbm8gT3V0ICovCisJcHJlc2VudCA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIDB4MjYpOworCisJcGFybSA9IHByZXNlbnQgPyBBQ19QV1JTVF9EMyA6IEFDX1BXUlNUX0QwOworCWlmIChzcGVjLT5jb2RlY190eXBlID09IFZUMTgwMikgeworCQkvKiBQVzE1ICgzM2gpLCBNVzgoMWNoKSwgTVVYOCgzY2gpICovCisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MzMsIDAsCisJCQkJICAgIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBwYXJtKTsKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxYywgMCwKKwkJCQkgICAgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOworCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDNjLCAwLAorCQkJCSAgICBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7CisJfSBlbHNlIHsKKwkJLyogUFcxNSAoMzFoKSwgTVc4KDE3aCksIE1VWDgoM2JoKSAqLworCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDMxLCAwLAorCQkJCSAgICBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7CisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTcsIDAsCisJCQkJICAgIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBwYXJtKTsKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgzYiwgMCwKKwkJCQkgICAgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOworCX0KKwkvKiBNVzkgKDIxaCkgKi8KKwlpZiAoaW11eF9pc19zbWl4ZXIgfHwgIWlzX2FhX3BhdGhfbXV0ZShjb2RlYykpCisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MjEsIDAsCisJCQkJICAgIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBBQ19QV1JTVF9EMCk7CisJZWxzZQorCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDIxLCAwLAorCQkJCSAgICBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgQUNfUFdSU1RfRDMpOworfQogCiAvKiBwYXRjaCBmb3IgdnQyMDAyUCAqLwogc3RhdGljIGludCBwYXRjaF92dDIwMDJQKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQpAQCAtNTYzNSwxNCArNTcyMywzMSBAQAogCQkgICAgICAgImZyb20gQklPUy4gIFVzaW5nIGdlbmVuaWMgbW9kZS4uLlxuIik7CiAJfQogCi0Jc3BlYy0+aW5pdF92ZXJic1tzcGVjLT5udW1faXZlcmJzKytdICA9IHZ0MjAwMlBfdm9sdW1lX2luaXRfdmVyYnM7Ci0Jc3BlYy0+aW5pdF92ZXJic1tzcGVjLT5udW1faXZlcmJzKytdID0gdnQyMDAyUF91bml3aWxsX2luaXRfdmVyYnM7CisJaWYgKHNwZWMtPmNvZGVjX3R5cGUgPT0gVlQxODAyKQorCQlzcGVjLT5pbml0X3ZlcmJzW3NwZWMtPm51bV9pdmVyYnMrK10gID0KKwkJCXZ0MTgwMl92b2x1bWVfaW5pdF92ZXJiczsKKwllbHNlCisJCXNwZWMtPmluaXRfdmVyYnNbc3BlYy0+bnVtX2l2ZXJicysrXSAgPQorCQkJdnQyMDAyUF92b2x1bWVfaW5pdF92ZXJiczsKIAotCXNwZWMtPnN0cmVhbV9uYW1lX2FuYWxvZyA9ICJWVDIwMDJQIEFuYWxvZyI7CisJaWYgKHNwZWMtPmNvZGVjX3R5cGUgPT0gVlQxODAyKQorCQlzcGVjLT5pbml0X3ZlcmJzW3NwZWMtPm51bV9pdmVyYnMrK10gPQorCQkJdnQxODAyX3VuaXdpbGxfaW5pdF92ZXJiczsKKwllbHNlCisJCXNwZWMtPmluaXRfdmVyYnNbc3BlYy0+bnVtX2l2ZXJicysrXSA9CisJCQl2dDIwMDJQX3VuaXdpbGxfaW5pdF92ZXJiczsKKworCWlmIChzcGVjLT5jb2RlY190eXBlID09IFZUMTgwMikKKwkJc3BlYy0+c3RyZWFtX25hbWVfYW5hbG9nID0gIlZUMTgwMiBBbmFsb2ciOworCWVsc2UKKwkJc3BlYy0+c3RyZWFtX25hbWVfYW5hbG9nID0gIlZUMjAwMlAgQW5hbG9nIjsKIAlzcGVjLT5zdHJlYW1fYW5hbG9nX3BsYXliYWNrID0gJnZ0MjAwMlBfcGNtX2FuYWxvZ19wbGF5YmFjazsKIAlzcGVjLT5zdHJlYW1fYW5hbG9nX2NhcHR1cmUgPSAmdnQyMDAyUF9wY21fYW5hbG9nX2NhcHR1cmU7CiAKLQlzcGVjLT5zdHJlYW1fbmFtZV9kaWdpdGFsID0gIlZUMjAwMlAgRGlnaXRhbCI7CisJaWYgKHNwZWMtPmNvZGVjX3R5cGUgPT0gVlQxODAyKQorCQlzcGVjLT5zdHJlYW1fbmFtZV9kaWdpdGFsID0gIlZUMTgwMiBEaWdpdGFsIjsKKwllbHNlCisJCXNwZWMtPnN0cmVhbV9uYW1lX2RpZ2l0YWwgPSAiVlQyMDAyUCBEaWdpdGFsIjsKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9wbGF5YmFjayA9ICZ2dDIwMDJQX3BjbV9kaWdpdGFsX3BsYXliYWNrOwogCiAJaWYgKCFzcGVjLT5hZGNfbmlkcyAmJiBzcGVjLT5pbnB1dF9tdXgpIHsKQEAgLTU2NjQsMTMgKzU3NjksMTQgQEAKIAlzcGVjLT5sb29wYmFjay5hbXBsaXN0ID0gdnQyMDAyUF9sb29wYmFja3M7CiAjZW5kaWYKIAorCXNwZWMtPnNldF93aWRnZXRzX3Bvd2VyX3N0YXRlID0gIHNldF93aWRnZXRzX3Bvd2VyX3N0YXRlX3Z0MjAwMlA7CiAJcmV0dXJuIDA7CiB9CiAKIC8qIGZvciB2dDE4MTIgKi8KIAogLyogY2FwdHVyZSBtaXhlciBlbGVtZW50cyAqLwotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHZ0MTgxMl9jYXB0dXJlX21peGVyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdnQxODEyX2NhcHR1cmVfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MTAsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDEwLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMSwgMHgxMSwgMHgwLCBIREFfSU5QVVQpLApAQCAtNTY5Miw3ICs1Nzk4LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIHZ0MTgxMl92b2x1bWVfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiB2dDE4MTJfdm9sdW1lX2luaXRfdmVyYnNbXSA9IHsKIAkvKgogCSAqIFVubXV0ZSBBREMwLTEgYW5kIHNldCB0aGUgZGVmYXVsdCBpbnB1dCB0byBtaWMtaW4KIAkgKi8KQEAgLTU3NDUsNyArNTg1MSw3IEBACiB9OwogCiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgdnQxODEyX3VuaXdpbGxfaW5pdF92ZXJic1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfdmVyYiB2dDE4MTJfdW5pd2lsbF9pbml0X3ZlcmJzW10gPSB7CiAJezB4MzMsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwKIAkgQUNfVVNSU1BfRU4gfCBWSUFfSkFDS19FVkVOVCB8IFZJQV9CSU5EX0hQX0VWRU5UfSwKIAl7MHgyNSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IFZJQV9KQUNLX0VWRU5UIH0sCkBAIC01NzU3LDcgKzU4NjMsNyBAQAogCXsgfQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSB2dDE4MTJfcGNtX2FuYWxvZ19wbGF5YmFjayA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gdnQxODEyX3BjbV9hbmFsb2dfcGxheWJhY2sgPSB7CiAJLnN1YnN0cmVhbXMgPSAyLAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSAyLApAQCAtNTc3MCw3ICs1ODc2LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSB2dDE4MTJfcGNtX2FuYWxvZ19jYXB0dXJlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSB2dDE4MTJfcGNtX2FuYWxvZ19jYXB0dXJlID0gewogCS5zdWJzdHJlYW1zID0gMiwKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gMiwKQEAgLTU3ODMsNyArNTg4OSw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gdnQxODEyX3BjbV9kaWdpdGFsX3BsYXliYWNrID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfcGNtX3N0cmVhbSB2dDE4MTJfcGNtX2RpZ2l0YWxfcGxheWJhY2sgPSB7CiAJLnN1YnN0cmVhbXMgPSAxLAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSAyLApAQCAtNTgwMiw3ICs1OTA4LDcgQEAKIAlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IDE7CiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBzcGVjLT5wcml2YXRlX2RhY19uaWRzOwogCWlmIChjZmctPmxpbmVfb3V0X3BpbnNbMF0pCi0JCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzWzBdID0gMHg4OworCQlzcGVjLT5wcml2YXRlX2RhY19uaWRzWzBdID0gMHg4OwogCXJldHVybiAwOwogfQogCkBAIC01ODY1LDcgKzU5NzEsNyBAQAogewogCXN0cnVjdCB2aWFfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKLQlzdGF0aWMgaGRhX25pZF90IHBpbl9pZHhzW10gPSB7IDB4MmIsIDB4MmEsIDB4MjksIDAsIDAsIDB4ZmYgfTsKKwlzdGF0aWMgY29uc3QgaGRhX25pZF90IHBpbl9pZHhzW10gPSB7IDB4MmIsIDB4MmEsIDB4MjksIDAsIDAsIDB4ZmYgfTsKIAlpbnQgZXJyOwogCiAJZXJyID0gdnRfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoY29kZWMsIGNmZywgMHgyMSwgcGluX2lkeHMsCkBAIC01OTI3LDcgKzYwMzMsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQotc3RhdGljIHN0cnVjdCBoZGFfYW1wX2xpc3QgdnQxODEyX2xvb3BiYWNrc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfYW1wX2xpc3QgdnQxODEyX2xvb3BiYWNrc1tdID0gewogCXsgMHgyMSwgSERBX0lOUFVULCAwIH0sCiAJeyAweDIxLCBIREFfSU5QVVQsIDEgfSwKIAl7IDB4MjEsIEhEQV9JTlBVVCwgMiB9LApAQCAtNTkzNSw2ICs2MDQxLDk3IEBACiB9OwogI2VuZGlmCiAKK3N0YXRpYyB2b2lkIHNldF93aWRnZXRzX3Bvd2VyX3N0YXRlX3Z0MTgxMihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgdmlhX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpbnQgaW11eF9pc19zbWl4ZXIgPQorCXNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxMywgMCwgQUNfVkVSQl9HRVRfQ09OTkVDVF9TRUwsIDB4MDApID09IDM7CisJdW5zaWduZWQgaW50IHBhcm07CisJdW5zaWduZWQgaW50IHByZXNlbnQ7CisJLyogTVVYMTAgKDFlaCkgPSBzdGVyZW8gbWl4ZXIgKi8KKwlpbXV4X2lzX3NtaXhlciA9CisJc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDFlLCAwLCBBQ19WRVJCX0dFVF9DT05ORUNUX1NFTCwgMHgwMCkgPT0gNTsKKwkvKiBpbnB1dHMgKi8KKwkvKiBQVyA1LzYvNyAoMjloLzJhaC8yYmgpICovCisJcGFybSA9IEFDX1BXUlNUX0QzOworCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MjksICZwYXJtKTsKKwlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDJhLCAmcGFybSk7CisJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgyYiwgJnBhcm0pOworCXBhcm0gPSBBQ19QV1JTVF9EMDsKKwkvKiBNVVgxMC8xMSAoMWVoLzFmaCksIEFJVyAwLzEgKDEwaC8xMWgpICovCisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxZSwgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MWYsIDAsIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBwYXJtKTsKKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDEwLCAwLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxMSwgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOworCisJLyogb3V0cHV0cyAqLworCS8qIEFPVzAgKDhoKSovCisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHg4LCAwLAorCQkJICAgIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBBQ19QV1JTVF9EMCk7CisKKwkvKiBQVzQgKDI4aCksIE1XNCAoMThoKSwgTVVYNCgzOGgpICovCisJcGFybSA9IEFDX1BXUlNUX0QzOworCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MjgsICZwYXJtKTsKKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDE4LCAwLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgzOCwgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOworCisJLyogUFcxICgyNWgpLCBNVzEgKDE1aCksIE1VWDEoMzVoKSwgQU9XMSAoOWgpICovCisJcGFybSA9IEFDX1BXUlNUX0QzOworCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MjUsICZwYXJtKTsKKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDE1LCAwLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcGFybSk7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgzNSwgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOworCWlmIChzcGVjLT5ocF9pbmRlcGVuZGVudF9tb2RlKQorCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDksIDAsCisJCQkJICAgIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBBQ19QV1JTVF9EMCk7CisKKwkvKiBJbnRlcm5hbCBTcGVha2VyICovCisJLyogUFcwICgyNGgpLCBNVzAoMTRoKSwgTVVYMCgzNGgpICovCisJcHJlc2VudCA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIDB4MjUpOworCisJcGFybSA9IEFDX1BXUlNUX0QzOworCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MjQsICZwYXJtKTsKKwlpZiAocHJlc2VudCkgeworCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDE0LCAwLAorCQkJCSAgICBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgQUNfUFdSU1RfRDMpOworCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDM0LCAwLAorCQkJCSAgICBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgQUNfUFdSU1RfRDMpOworCX0gZWxzZSB7CisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTQsIDAsCisJCQkJICAgIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBBQ19QV1JTVF9EMCk7CisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MzQsIDAsCisJCQkJICAgIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBBQ19QV1JTVF9EMCk7CisJfQorCisKKwkvKiBNb25vIE91dCAqLworCS8qIFBXMTMgKDMxaCksIE1XMTMoMWNoKSwgTVVYMTMoM2NoKSwgTVcxNCgzZWgpICovCisJcHJlc2VudCA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIDB4MjgpOworCisJcGFybSA9IEFDX1BXUlNUX0QzOworCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MzEsICZwYXJtKTsKKwlpZiAocHJlc2VudCkgeworCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDFjLCAwLAorCQkJCSAgICBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgQUNfUFdSU1RfRDMpOworCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDNjLCAwLAorCQkJCSAgICBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgQUNfUFdSU1RfRDMpOworCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDNlLCAwLAorCQkJCSAgICBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgQUNfUFdSU1RfRDMpOworCX0gZWxzZSB7CisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MWMsIDAsCisJCQkJICAgIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBBQ19QV1JTVF9EMCk7CisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4M2MsIDAsCisJCQkJICAgIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBBQ19QV1JTVF9EMCk7CisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4M2UsIDAsCisJCQkJICAgIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBBQ19QV1JTVF9EMCk7CisJfQorCisJLyogUFcxNSAoMzNoKSwgTVcxNSAoMWRoKSwgTVVYMTUoM2RoKSAqLworCXBhcm0gPSBBQ19QV1JTVF9EMzsKKwlzZXRfcGluX3Bvd2VyX3N0YXRlKGNvZGVjLCAweDMzLCAmcGFybSk7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxZCwgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHBhcm0pOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4M2QsIDAsIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBwYXJtKTsKKworfQogCiAvKiBwYXRjaCBmb3IgdnQxODEyICovCiBzdGF0aWMgaW50IHBhdGNoX3Z0MTgxMihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKQEAgLTU5ODgsMTMgKzYxODUsMTQgQEAKIAlzcGVjLT5sb29wYmFjay5hbXBsaXN0ID0gdnQxODEyX2xvb3BiYWNrczsKICNlbmRpZgogCisJc3BlYy0+c2V0X3dpZGdldHNfcG93ZXJfc3RhdGUgPSAgc2V0X3dpZGdldHNfcG93ZXJfc3RhdGVfdnQxODEyOwogCXJldHVybiAwOwogfQogCiAvKgogICogcGF0Y2ggZW50cmllcwogICovCi1zdGF0aWMgc3RydWN0IGhkYV9jb2RlY19wcmVzZXQgc25kX2hkYV9wcmVzZXRfdmlhW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9jb2RlY19wcmVzZXQgc25kX2hkYV9wcmVzZXRfdmlhW10gPSB7CiAJeyAuaWQgPSAweDExMDYxNzA4LCAubmFtZSA9ICJWVDE3MDgiLCAucGF0Y2ggPSBwYXRjaF92dDE3MDh9LAogCXsgLmlkID0gMHgxMTA2MTcwOSwgLm5hbWUgPSAiVlQxNzA4IiwgLnBhdGNoID0gcGF0Y2hfdnQxNzA4fSwKIAl7IC5pZCA9IDB4MTEwNjE3MGEsIC5uYW1lID0gIlZUMTcwOCIsIC5wYXRjaCA9IHBhdGNoX3Z0MTcwOH0sCkBAIC02MDM5LDcgKzYyMzcsNyBAQAogCSAgLnBhdGNoID0gcGF0Y2hfdnQxNzA4U30sCiAJeyAuaWQgPSAweDExMDYzMzk3LCAubmFtZSA9ICJWVDE3MDhTIiwKIAkgIC5wYXRjaCA9IHBhdGNoX3Z0MTcwOFN9LAotCXsgLmlkID0gMHgxMTA2NDM5NywgLm5hbWUgPSAiVlQxNzA4UyIsCisJeyAuaWQgPSAweDExMDY0Mzk3LCAubmFtZSA9ICJWVDE3MDUiLAogCSAgLnBhdGNoID0gcGF0Y2hfdnQxNzA4U30sCiAJeyAuaWQgPSAweDExMDY1Mzk3LCAubmFtZSA9ICJWVDE3MDhTIiwKIAkgIC5wYXRjaCA9IHBhdGNoX3Z0MTcwOFN9LApAQCAtNjA4MCw2ICs2Mjc4LDEwIEBACiAJeyAuaWQgPSAweDExMDYwNDQ4LCAubmFtZSA9ICJWVDE4MTIiLCAucGF0Y2ggPSBwYXRjaF92dDE4MTJ9LAogCXsgLmlkID0gMHgxMTA2MDQ0MCwgLm5hbWUgPSAiVlQxODE4UyIsCiAJICAucGF0Y2ggPSBwYXRjaF92dDE3MDhTfSwKKwl7IC5pZCA9IDB4MTEwNjA0NDYsIC5uYW1lID0gIlZUMTgwMiIsCisJCS5wYXRjaCA9IHBhdGNoX3Z0MjAwMlB9LAorCXsgLmlkID0gMHgxMTA2ODQ0NiwgLm5hbWUgPSAiVlQxODAyIiwKKwkJLnBhdGNoID0gcGF0Y2hfdnQyMDAyUH0sCiAJe30gLyogdGVybWluYXRvciAqLwogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ludGVsOHgwbS5jIGIvc291bmQvcGNpL2ludGVsOHgwbS5jCmluZGV4IDI3NzA5ZjAuLmYzMzUzYjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pbnRlbDh4MG0uYworKysgYi9zb3VuZC9wY2kvaW50ZWw4eDBtLmMKQEAgLTIzNSw4ICsyMzUsOCBAQAogCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDAwNjkpLCBERVZJQ0VfTkZPUkNFIH0sIC8qIE5GT1JDRTIgKi8KIAl7IFBDSV9WREVWSUNFKE5WSURJQSwgMHgwMDg5KSwgREVWSUNFX05GT1JDRSB9LCAvKiBORk9SQ0UycyAqLwogCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDAwZDkpLCBERVZJQ0VfTkZPUkNFIH0sIC8qIE5GT1JDRTMgKi8KKwl7IFBDSV9WREVWSUNFKEFNRCwgMHg3NDZlKSwgREVWSUNFX0lOVEVMIH0sCS8qIEFNRDgxMTEgKi8KICNpZiAwCi0JeyBQQ0lfVkRFVklDRShBTUQsIDB4NzQ2ZCksIERFVklDRV9JTlRFTCB9LAkvKiBBTUQ4MTExICovCiAJeyBQQ0lfVkRFVklDRShBTCwgMHg1NDU1KSwgREVWSUNFX0FMSSB9LCAgIC8qIEFsaTU0NTUgKi8KICNlbmRpZgogCXsgMCwgfQpAQCAtMTI2MSw5ICsxMjYxLDkgQEAKIAl7IFBDSV9ERVZJQ0VfSURfTlZJRElBX01DUDJfTU9ERU0sICJOVmlkaWEgbkZvcmNlMiIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfTlZJRElBX01DUDJTX01PREVNLCAiTlZpZGlhIG5Gb3JjZTJzIiB9LAogCXsgUENJX0RFVklDRV9JRF9OVklESUFfTUNQM19NT0RFTSwgIk5WaWRpYSBuRm9yY2UzIiB9LAorCXsgMHg3NDZlLCAiQU1EIEFNRDgxMTEiIH0sCiAjaWYgMAogCXsgMHg1NDU1LCAiQUxpIE01NDU1IiB9LAotCXsgMHg3NDZkLCAiQU1EIEFNRDgxMTEiIH0sCiAjZW5kaWYKIAl7IDAgfSwKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvbG9sYS9NYWtlZmlsZSBiL3NvdW5kL3BjaS9sb2xhL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNzhhMmEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvbG9sYS9NYWtlZmlsZQpAQCAtMCwwICsxLDQgQEAKK3NuZC1sb2xhLXkgOj0gbG9sYS5vIGxvbGFfcGNtLm8gbG9sYV9jbG9jay5vIGxvbGFfbWl4ZXIubworc25kLWxvbGEtJChDT05GSUdfU05EX0RFQlVHKSArPSBsb2xhX3Byb2MubworCitvYmotJChDT05GSUdfU05EX0xPTEEpICs9IHNuZC1sb2xhLm8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9sb2xhL2xvbGEuYyBiL3NvdW5kL3BjaS9sb2xhL2xvbGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGIyNDI4Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvcGNpL2xvbGEvbG9sYS5jCkBAIC0wLDAgKzEsNzkxIEBACisvKgorICogIFN1cHBvcnQgZm9yIERpZ2lncmFtIExvbGEgUENJLWUgYm9hcmRzCisgKgorICogIENvcHlyaWdodCAoYykgMjAxMSBUYWthc2hpIEl3YWkgPHRpd2FpQHN1c2UuZGU+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiAgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyAqICBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlICJsb2xhLmgiCisKKy8qIFN0YW5kYXJkIG9wdGlvbnMgKi8KK3N0YXRpYyBpbnQgaW5kZXhbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JRFg7CitzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CitzdGF0aWMgaW50IGVuYWJsZVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0VOQUJMRV9QTlA7CisKK21vZHVsZV9wYXJhbV9hcnJheShpbmRleCwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaW5kZXgsICJJbmRleCB2YWx1ZSBmb3IgRGlnaWdyYW0gTG9sYSBkcml2ZXIuIik7Cittb2R1bGVfcGFyYW1fYXJyYXkoaWQsIGNoYXJwLCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaWQsICJJRCBzdHJpbmcgZm9yIERpZ2lncmFtIExvbGEgZHJpdmVyLiIpOworbW9kdWxlX3BhcmFtX2FycmF5KGVuYWJsZSwgYm9vbCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZSwgIkVuYWJsZSBEaWdpZ3JhbSBMb2xhIGRyaXZlci4iKTsKKworLyogTG9sYS1zcGVjaWZpYyBvcHRpb25zICovCisKKy8qIGZvciBpbnN0YW5jZSB1c2UgYWx3YXlzIG1heCBncmFudWxhcml0eSB3aGljaCBpcyBjb21wYXRpYmxlCisgKiB3aXRoIGFsbCBzYW1wbGUgcmF0ZXMKKyAqLworc3RhdGljIGludCBncmFudWxhcml0eVtTTkRSVl9DQVJEU10gPSB7CisJWzAgLi4uIChTTkRSVl9DQVJEUyAtIDEpXSA9IExPTEFfR1JBTlVMQVJJVFlfTUFYCit9OworCisvKiBiZWxvdyBhIHNhbXBsZV9yYXRlIG9mIDE2a0h6IHRoZSBhbmFsb2d1ZSBhdWRpbyBxdWFsaXR5IGlzIE5PVCBleGNlbGxlbnQgKi8KK3N0YXRpYyBpbnQgc2FtcGxlX3JhdGVfbWluW1NORFJWX0NBUkRTXSA9IHsKKwlbMCAuLi4gKFNORFJWX0NBUkRTIC0gMSkgXSA9IDE2MDAwCit9OworCittb2R1bGVfcGFyYW1fYXJyYXkoZ3JhbnVsYXJpdHksIGludCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGdyYW51bGFyaXR5LCAiR3JhbnVsYXJpdHkgdmFsdWUiKTsKK21vZHVsZV9wYXJhbV9hcnJheShzYW1wbGVfcmF0ZV9taW4sIGludCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHNhbXBsZV9yYXRlX21pbiwgIk1pbmltYWwgc2FtcGxlIHJhdGUiKTsKKworLyoKKyAqLworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tEaWdpZ3JhbSwgTG9sYX19Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRpZ2lncmFtIExvbGEgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJUYWthc2hpIEl3YWkgPHRpd2FpQHN1c2UuZGU+Iik7CisKKyNpZmRlZiBDT05GSUdfU05EX0RFQlVHX1ZFUkJPU0UKK3N0YXRpYyBpbnQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CisjZGVmaW5lIHZlcmJvc2VfZGVidWcoZm10LCBhcmdzLi4uKQkJCVwKKwlkbyB7IGlmIChkZWJ1ZyA+IDEpIHByaW50ayhLRVJOX0RFQlVHIFNGWCBmbXQsICMjYXJncyk7IH0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSB2ZXJib3NlX2RlYnVnKGZtdCwgYXJncy4uLikKKyNlbmRpZgorCisvKgorICogcHNldWRvLWNvZGVjIHJlYWQvd3JpdGUgdmlhIENPUkIvUklSQgorICovCisKK3N0YXRpYyBpbnQgY29yYl9zZW5kX3ZlcmIoc3RydWN0IGxvbGEgKmNoaXAsIHVuc2lnbmVkIGludCBuaWQsCisJCQkgIHVuc2lnbmVkIGludCB2ZXJiLCB1bnNpZ25lZCBpbnQgZGF0YSwKKwkJCSAgdW5zaWduZWQgaW50IGV4dGRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gLUVJTzsKKworCWNoaXAtPmxhc3RfY21kX25pZCA9IG5pZDsKKwljaGlwLT5sYXN0X3ZlcmIgPSB2ZXJiOworCWNoaXAtPmxhc3RfZGF0YSA9IGRhdGE7CisJY2hpcC0+bGFzdF9leHRkYXRhID0gZXh0ZGF0YTsKKwlkYXRhIHw9IChuaWQgPDwgMjApIHwgKHZlcmIgPDwgOCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKKwlpZiAoY2hpcC0+cmlyYi5jbWRzIDwgTE9MQV9DT1JCX0VOVFJJRVMgLSAxKSB7CisJCXVuc2lnbmVkIGludCB3cCA9IGNoaXAtPmNvcmIud3AgKyAxOworCQl3cCAlPSBMT0xBX0NPUkJfRU5UUklFUzsKKwkJY2hpcC0+Y29yYi53cCA9IHdwOworCQljaGlwLT5jb3JiLmJ1Zlt3cCAqIDJdID0gY3B1X3RvX2xlMzIoZGF0YSk7CisJCWNoaXAtPmNvcmIuYnVmW3dwICogMiArIDFdID0gY3B1X3RvX2xlMzIoZXh0ZGF0YSk7CisJCWxvbGFfd3JpdGV3KGNoaXAsIEJBUjAsIENPUkJXUCwgd3ApOworCQljaGlwLT5yaXJiLmNtZHMrKzsKKwkJc21wX3dtYigpOworCQlyZXQgPSAwOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGxvbGFfcXVldWVfdW5zb2xfZXZlbnQoc3RydWN0IGxvbGEgKmNoaXAsIHVuc2lnbmVkIGludCByZXMsCisJCQkJICAgdW5zaWduZWQgaW50IHJlc19leCkKK3sKKwlsb2xhX3VwZGF0ZV9leHRfY2xvY2tfZnJlcShjaGlwLCByZXMpOworfQorCisvKiByZXRyaWV2ZSBSSVJCIGVudHJ5IC0gY2FsbGVkIGZyb20gaW50ZXJydXB0IGhhbmRsZXIgKi8KK3N0YXRpYyB2b2lkIGxvbGFfdXBkYXRlX3JpcmIoc3RydWN0IGxvbGEgKmNoaXApCit7CisJdW5zaWduZWQgaW50IHJwLCB3cDsKKwl1MzIgcmVzLCByZXNfZXg7CisKKwl3cCA9IGxvbGFfcmVhZHcoY2hpcCwgQkFSMCwgUklSQldQKTsKKwlpZiAod3AgPT0gY2hpcC0+cmlyYi53cCkKKwkJcmV0dXJuOworCWNoaXAtPnJpcmIud3AgPSB3cDsKKworCXdoaWxlIChjaGlwLT5yaXJiLnJwICE9IHdwKSB7CisJCWNoaXAtPnJpcmIucnArKzsKKwkJY2hpcC0+cmlyYi5ycCAlPSBMT0xBX0NPUkJfRU5UUklFUzsKKworCQlycCA9IGNoaXAtPnJpcmIucnAgPDwgMTsgLyogYW4gUklSQiBlbnRyeSBpcyA4LWJ5dGVzICovCisJCXJlc19leCA9IGxlMzJfdG9fY3B1KGNoaXAtPnJpcmIuYnVmW3JwICsgMV0pOworCQlyZXMgPSBsZTMyX3RvX2NwdShjaGlwLT5yaXJiLmJ1ZltycF0pOworCQlpZiAocmVzX2V4ICYgTE9MQV9SSVJCX0VYX1VOU09MX0VWKQorCQkJbG9sYV9xdWV1ZV91bnNvbF9ldmVudChjaGlwLCByZXMsIHJlc19leCk7CisJCWVsc2UgaWYgKGNoaXAtPnJpcmIuY21kcykgeworCQkJY2hpcC0+cmVzID0gcmVzOworCQkJY2hpcC0+cmVzX2V4ID0gcmVzX2V4OworCQkJc21wX3dtYigpOworCQkJY2hpcC0+cmlyYi5jbWRzLS07CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgcmlyYl9nZXRfcmVzcG9uc2Uoc3RydWN0IGxvbGEgKmNoaXAsIHVuc2lnbmVkIGludCAqdmFsLAorCQkJICAgICB1bnNpZ25lZCBpbnQgKmV4dHZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisKKyBhZ2FpbjoKKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCk7CisJZm9yICg7OykgeworCQlpZiAoY2hpcC0+cG9sbGluZ19tb2RlKSB7CisJCQlzcGluX2xvY2tfaXJxKCZjaGlwLT5yZWdfbG9jayk7CisJCQlsb2xhX3VwZGF0ZV9yaXJiKGNoaXApOworCQkJc3Bpbl91bmxvY2tfaXJxKCZjaGlwLT5yZWdfbG9jayk7CisJCX0KKwkJaWYgKCFjaGlwLT5yaXJiLmNtZHMpIHsKKwkJCSp2YWwgPSBjaGlwLT5yZXM7CisJCQlpZiAoZXh0dmFsKQorCQkJCSpleHR2YWwgPSBjaGlwLT5yZXNfZXg7CisJCQl2ZXJib3NlX2RlYnVnKCJnZXRfcmVzcG9uc2U6ICV4LCAleFxuIiwKKwkJCQkgICAgICBjaGlwLT5yZXMsIGNoaXAtPnJlc19leCk7CisJCQlpZiAoY2hpcC0+cmVzX2V4ICYgTE9MQV9SSVJCX0VYX0VSUk9SKSB7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyBTRlggIlJJUkIgRVJST1I6ICIKKwkJCQkgICAgICAgIk5JRD0leCwgdmVyYj0leCwgZGF0YT0leCwgZXh0PSV4XG4iLAorCQkJCSAgICAgICBjaGlwLT5sYXN0X2NtZF9uaWQsCisJCQkJICAgICAgIGNoaXAtPmxhc3RfdmVyYiwgY2hpcC0+bGFzdF9kYXRhLAorCQkJCSAgICAgICBjaGlwLT5sYXN0X2V4dGRhdGEpOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpCisJCQlicmVhazsKKwkJdWRlbGF5KDIwKTsKKwkJY29uZF9yZXNjaGVkKCk7CisJfQorCXByaW50ayhLRVJOX1dBUk5JTkcgU0ZYICJSSVJCIHJlc3BvbnNlIGVycm9yXG4iKTsKKwlpZiAoIWNoaXAtPnBvbGxpbmdfbW9kZSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIFNGWCAic3dpdGNoaW5nIHRvIHBvbGxpbmcgbW9kZVxuIik7CisJCWNoaXAtPnBvbGxpbmdfbW9kZSA9IDE7CisJCWdvdG8gYWdhaW47CisJfQorCXJldHVybiAtRUlPOworfQorCisvKiBheW5jaHJvbm91cyB3cml0ZSBvZiBhIGNvZGVjIHZlcmIgd2l0aCBkYXRhICovCitpbnQgbG9sYV9jb2RlY193cml0ZShzdHJ1Y3QgbG9sYSAqY2hpcCwgdW5zaWduZWQgaW50IG5pZCwgdW5zaWduZWQgaW50IHZlcmIsCisJCSAgICAgdW5zaWduZWQgaW50IGRhdGEsIHVuc2lnbmVkIGludCBleHRkYXRhKQoreworCXZlcmJvc2VfZGVidWcoImNvZGVjX3dyaXRlIE5JRD0leCwgdmVyYj0leCwgZGF0YT0leCwgZXh0PSV4XG4iLAorCQkgICAgICBuaWQsIHZlcmIsIGRhdGEsIGV4dGRhdGEpOworCXJldHVybiBjb3JiX3NlbmRfdmVyYihjaGlwLCBuaWQsIHZlcmIsIGRhdGEsIGV4dGRhdGEpOworfQorCisvKiB3cml0ZSBhIGNvZGVjIHZlcmIgd2l0aCBkYXRhIGFuZCByZWFkIHRoZSByZXR1cm5lZCBzdGF0dXMgKi8KK2ludCBsb2xhX2NvZGVjX3JlYWQoc3RydWN0IGxvbGEgKmNoaXAsIHVuc2lnbmVkIGludCBuaWQsIHVuc2lnbmVkIGludCB2ZXJiLAorCQkgICAgdW5zaWduZWQgaW50IGRhdGEsIHVuc2lnbmVkIGludCBleHRkYXRhLAorCQkgICAgdW5zaWduZWQgaW50ICp2YWwsIHVuc2lnbmVkIGludCAqZXh0dmFsKQoreworCWludCBlcnI7CisKKwl2ZXJib3NlX2RlYnVnKCJjb2RlY19yZWFkIE5JRD0leCwgdmVyYj0leCwgZGF0YT0leCwgZXh0PSV4XG4iLAorCQkgICAgICBuaWQsIHZlcmIsIGRhdGEsIGV4dGRhdGEpOworCWVyciA9IGNvcmJfc2VuZF92ZXJiKGNoaXAsIG5pZCwgdmVyYiwgZGF0YSwgZXh0ZGF0YSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZXJyID0gcmlyYl9nZXRfcmVzcG9uc2UoY2hpcCwgdmFsLCBleHR2YWwpOworCXJldHVybiBlcnI7Cit9CisKKy8qIGZsdXNoIGFsbCBwZW5kaW5nIGNvZGVjIHdyaXRlcyAqLworaW50IGxvbGFfY29kZWNfZmx1c2goc3RydWN0IGxvbGEgKmNoaXApCit7CisJdW5zaWduZWQgaW50IHRtcDsKKwlyZXR1cm4gcmlyYl9nZXRfcmVzcG9uc2UoY2hpcCwgJnRtcCwgTlVMTCk7Cit9CisKKy8qCisgKiBpbnRlcnJ1cHQgaGFuZGxlcgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgbG9sYV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBsb2xhICpjaGlwID0gZGV2X2lkOworCXVuc2lnbmVkIGludCBub3RpZnlfaW5zLCBub3RpZnlfb3V0cywgZXJyb3JfaW5zLCBlcnJvcl9vdXRzOworCWludCBoYW5kbGVkID0gMDsKKwlpbnQgaTsKKworCW5vdGlmeV9pbnMgPSBub3RpZnlfb3V0cyA9IGVycm9yX2lucyA9IGVycm9yX291dHMgPSAwOworCXNwaW5fbG9jaygmY2hpcC0+cmVnX2xvY2spOworCWZvciAoOzspIHsKKwkJdW5zaWduZWQgaW50IHN0YXR1cywgaW5fc3RzLCBvdXRfc3RzOworCQl1bnNpZ25lZCBpbnQgcmVnOworCisJCXN0YXR1cyA9IGxvbGFfcmVhZGwoY2hpcCwgQkFSMSwgRElOVFNUUyk7CisJCWlmICghc3RhdHVzIHx8IHN0YXR1cyA9PSAtMSkKKwkJCWJyZWFrOworCisJCWluX3N0cyA9IGxvbGFfcmVhZGwoY2hpcCwgQkFSMSwgRElJTlRTVFMpOworCQlvdXRfc3RzID0gbG9sYV9yZWFkbChjaGlwLCBCQVIxLCBET0lOVFNUUyk7CisKKwkJLyogY2xlYXIgSW5wdXQgSW50ZXJydXB0cyAqLworCQlmb3IgKGkgPSAwOyBpbl9zdHMgJiYgaSA8IGNoaXAtPnBjbVtDQVBUXS5udW1fc3RyZWFtczsgaSsrKSB7CisJCQlpZiAoIShpbl9zdHMgJiAoMSA8PCBpKSkpCisJCQkJY29udGludWU7CisJCQlpbl9zdHMgJj0gfigxIDw8IGkpOworCQkJcmVnID0gbG9sYV9kc2RfcmVhZChjaGlwLCBpLCBTVFMpOworCQkJaWYgKHJlZyAmIExPTEFfRFNEX1NUU19ERVNFKSAvKiBlcnJvciAqLworCQkJCWVycm9yX2lucyB8PSAoMSA8PCBpKTsKKwkJCWlmIChyZWcgJiBMT0xBX0RTRF9TVFNfQkNJUykgLyogbm90aWZ5ICovCisJCQkJbm90aWZ5X2lucyB8PSAoMSA8PCBpKTsKKwkJCS8qIGNsZWFyICovCisJCQlsb2xhX2RzZF93cml0ZShjaGlwLCBpLCBTVFMsIHJlZyk7CisJCX0KKworCQkvKiBjbGVhciBPdXRwdXQgSW50ZXJydXB0cyAqLworCQlmb3IgKGkgPSAwOyBvdXRfc3RzICYmIGkgPCBjaGlwLT5wY21bUExBWV0ubnVtX3N0cmVhbXM7IGkrKykgeworCQkJaWYgKCEob3V0X3N0cyAmICgxIDw8IGkpKSkKKwkJCQljb250aW51ZTsKKwkJCW91dF9zdHMgJj0gfigxIDw8IGkpOworCQkJcmVnID0gbG9sYV9kc2RfcmVhZChjaGlwLCBpICsgTUFYX1NUUkVBTV9JTl9DT1VOVCwgU1RTKTsKKwkJCWlmIChyZWcgJiBMT0xBX0RTRF9TVFNfREVTRSkgLyogZXJyb3IgKi8KKwkJCQllcnJvcl9vdXRzIHw9ICgxIDw8IGkpOworCQkJaWYgKHJlZyAmIExPTEFfRFNEX1NUU19CQ0lTKSAvKiBub3RpZnkgKi8KKwkJCQlub3RpZnlfb3V0cyB8PSAoMSA8PCBpKTsKKwkJCWxvbGFfZHNkX3dyaXRlKGNoaXAsIGkgKyBNQVhfU1RSRUFNX0lOX0NPVU5ULCBTVFMsIHJlZyk7CisJCX0KKworCQlpZiAoc3RhdHVzICYgTE9MQV9ESU5UX0NUUkwpIHsKKwkJCXVuc2lnbmVkIGNoYXIgcmJzdHM7IC8qIHJpbmcgc3RhdHVzIGlzIGJ5dGUgYWNjZXNzICovCisJCQlyYnN0cyA9IGxvbGFfcmVhZGIoY2hpcCwgQkFSMCwgUklSQlNUUyk7CisJCQlyYnN0cyAmPSBMT0xBX1JJUkJfSU5UX01BU0s7CisJCQlpZiAocmJzdHMpCisJCQkJbG9sYV93cml0ZWIoY2hpcCwgQkFSMCwgUklSQlNUUywgcmJzdHMpOworCQkJcmJzdHMgPSBsb2xhX3JlYWRiKGNoaXAsIEJBUjAsIENPUkJTVFMpOworCQkJcmJzdHMgJj0gTE9MQV9DT1JCX0lOVF9NQVNLOworCQkJaWYgKHJic3RzKQorCQkJCWxvbGFfd3JpdGViKGNoaXAsIEJBUjAsIENPUkJTVFMsIHJic3RzKTsKKworCQkJbG9sYV91cGRhdGVfcmlyYihjaGlwKTsKKwkJfQorCisJCWlmIChzdGF0dXMgJiAoTE9MQV9ESU5UX0ZJRk9FUlIgfCBMT0xBX0RJTlRfTVVFUlIpKSB7CisJCQkvKiBjbGVhciBnbG9iYWwgZmlmbyBlcnJvciBpbnRlcnJ1cHQgKi8KKwkJCWxvbGFfd3JpdGVsKGNoaXAsIEJBUjEsIERJTlRTVFMsCisJCQkJICAgIChzdGF0dXMgJiAoTE9MQV9ESU5UX0ZJRk9FUlIgfCBMT0xBX0RJTlRfTVVFUlIpKSk7CisJCX0KKwkJaGFuZGxlZCA9IDE7CisJfQorCXNwaW5fdW5sb2NrKCZjaGlwLT5yZWdfbG9jayk7CisKKwlsb2xhX3BjbV91cGRhdGUoY2hpcCwgJmNoaXAtPnBjbVtDQVBUXSwgbm90aWZ5X2lucyk7CisJbG9sYV9wY21fdXBkYXRlKGNoaXAsICZjaGlwLT5wY21bUExBWV0sIG5vdGlmeV9vdXRzKTsKKworCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOworfQorCisKKy8qCisgKiBjb250cm9sbGVyCisgKi8KK3N0YXRpYyBpbnQgcmVzZXRfY29udHJvbGxlcihzdHJ1Y3QgbG9sYSAqY2hpcCkKK3sKKwl1bnNpZ25lZCBpbnQgZ2N0bCA9IGxvbGFfcmVhZGwoY2hpcCwgQkFSMCwgR0NUTCk7CisJdW5zaWduZWQgbG9uZyBlbmRfdGltZTsKKworCWlmIChnY3RsKSB7CisJCS8qIHRvIGJlIHN1cmUgKi8KKwkJbG9sYV93cml0ZWwoY2hpcCwgQkFSMSwgQk9BUkRfTU9ERSwgMCk7CisJCXJldHVybiAwOworCX0KKworCWNoaXAtPmNvbGRfcmVzZXQgPSAxOworCWxvbGFfd3JpdGVsKGNoaXAsIEJBUjAsIEdDVEwsIExPTEFfR0NUTF9SRVNFVCk7CisJZW5kX3RpbWUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygyMDApOworCWRvIHsKKwkJbXNsZWVwKDEpOworCQlnY3RsID0gbG9sYV9yZWFkbChjaGlwLCBCQVIwLCBHQ1RMKTsKKwkJaWYgKGdjdGwpCisJCQlicmVhazsKKwl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBlbmRfdGltZSkpOworCWlmICghZ2N0bCkgeworCQlwcmludGsoS0VSTl9FUlIgU0ZYICJjYW5ub3QgcmVzZXQgY29udHJvbGxlclxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbG9sYV9pcnFfZW5hYmxlKHN0cnVjdCBsb2xhICpjaGlwKQoreworCXVuc2lnbmVkIGludCB2YWw7CisKKwkvKiBlbmFsYmUgYWxsIEkvTyBzdHJlYW1zICovCisJdmFsID0gKDEgPDwgY2hpcC0+cGNtW1BMQVldLm51bV9zdHJlYW1zKSAtIDE7CisJbG9sYV93cml0ZWwoY2hpcCwgQkFSMSwgRE9JTlRDVEwsIHZhbCk7CisJdmFsID0gKDEgPDwgY2hpcC0+cGNtW0NBUFRdLm51bV9zdHJlYW1zKSAtIDE7CisJbG9sYV93cml0ZWwoY2hpcCwgQkFSMSwgRElJTlRDVEwsIHZhbCk7CisKKwkvKiBlbmFibGUgZ2xvYmFsIGlycXMgKi8KKwl2YWwgPSBMT0xBX0RJTlRfR0xPQkFMIHwgTE9MQV9ESU5UX0NUUkwgfCBMT0xBX0RJTlRfRklGT0VSUiB8CisJCUxPTEFfRElOVF9NVUVSUjsKKwlsb2xhX3dyaXRlbChjaGlwLCBCQVIxLCBESU5UQ1RMLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBsb2xhX2lycV9kaXNhYmxlKHN0cnVjdCBsb2xhICpjaGlwKQoreworCWxvbGFfd3JpdGVsKGNoaXAsIEJBUjEsIERJTlRDVEwsIDApOworCWxvbGFfd3JpdGVsKGNoaXAsIEJBUjEsIERJSU5UQ1RMLCAwKTsKKwlsb2xhX3dyaXRlbChjaGlwLCBCQVIxLCBET0lOVENUTCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgc2V0dXBfY29yYl9yaXJiKHN0cnVjdCBsb2xhICpjaGlwKQoreworCWludCBlcnI7CisJdW5zaWduZWQgY2hhciB0bXA7CisJdW5zaWduZWQgbG9uZyBlbmRfdGltZTsKKworCWVyciA9IHNuZF9kbWFfYWxsb2NfcGFnZXMoU05EUlZfRE1BX1RZUEVfREVWLAorCQkJCSAgc25kX2RtYV9wY2lfZGF0YShjaGlwLT5wY2kpLAorCQkJCSAgUEFHRV9TSVpFLCAmY2hpcC0+cmIpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJY2hpcC0+Y29yYi5hZGRyID0gY2hpcC0+cmIuYWRkcjsKKwljaGlwLT5jb3JiLmJ1ZiA9ICh1MzIgKiljaGlwLT5yYi5hcmVhOworCWNoaXAtPnJpcmIuYWRkciA9IGNoaXAtPnJiLmFkZHIgKyAyMDQ4OworCWNoaXAtPnJpcmIuYnVmID0gKHUzMiAqKShjaGlwLT5yYi5hcmVhICsgMjA0OCk7CisKKwkvKiBkaXNhYmxlIHJpbmdidWZmZXIgRE1BcyAqLworCWxvbGFfd3JpdGViKGNoaXAsIEJBUjAsIFJJUkJDVEwsIDApOworCWxvbGFfd3JpdGViKGNoaXAsIEJBUjAsIENPUkJDVEwsIDApOworCisJZW5kX3RpbWUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygyMDApOworCWRvIHsKKwkJaWYgKCFsb2xhX3JlYWRiKGNoaXAsIEJBUjAsIFJJUkJDVEwpICYmCisJCSAgICAhbG9sYV9yZWFkYihjaGlwLCBCQVIwLCBDT1JCQ1RMKSkKKwkJCWJyZWFrOworCQltc2xlZXAoMSk7CisJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZW5kX3RpbWUpKTsKKworCS8qIENPUkIgc2V0IHVwICovCisJbG9sYV93cml0ZWwoY2hpcCwgQkFSMCwgQ09SQkxCQVNFLCAodTMyKWNoaXAtPmNvcmIuYWRkcik7CisJbG9sYV93cml0ZWwoY2hpcCwgQkFSMCwgQ09SQlVCQVNFLCB1cHBlcl8zMl9iaXRzKGNoaXAtPmNvcmIuYWRkcikpOworCS8qIHNldCB0aGUgY29yYiBzaXplIHRvIDI1NiBlbnRyaWVzICovCisJbG9sYV93cml0ZWIoY2hpcCwgQkFSMCwgQ09SQlNJWkUsIDB4MDIpOworCS8qIHNldCB0aGUgY29yYiB3cml0ZSBwb2ludGVyIHRvIDAgKi8KKwlsb2xhX3dyaXRldyhjaGlwLCBCQVIwLCBDT1JCV1AsIDApOworCS8qIHJlc2V0IHRoZSBjb3JiIGh3IHJlYWQgcG9pbnRlciAqLworCWxvbGFfd3JpdGV3KGNoaXAsIEJBUjAsIENPUkJSUCwgTE9MQV9SQlJXUF9DTFIpOworCS8qIGVuYWJsZSBjb3JiIGRtYSAqLworCWxvbGFfd3JpdGViKGNoaXAsIEJBUjAsIENPUkJDVEwsIExPTEFfUkJDVExfRE1BX0VOKTsKKwkvKiBjbGVhciBmbGFncyBpZiBzZXQgKi8KKwl0bXAgPSBsb2xhX3JlYWRiKGNoaXAsIEJBUjAsIENPUkJTVFMpICYgTE9MQV9DT1JCX0lOVF9NQVNLOworCWlmICh0bXApCisJCWxvbGFfd3JpdGViKGNoaXAsIEJBUjAsIENPUkJTVFMsIHRtcCk7CisJY2hpcC0+Y29yYi53cCA9IDA7CisKKwkvKiBSSVJCIHNldCB1cCAqLworCWxvbGFfd3JpdGVsKGNoaXAsIEJBUjAsIFJJUkJMQkFTRSwgKHUzMiljaGlwLT5yaXJiLmFkZHIpOworCWxvbGFfd3JpdGVsKGNoaXAsIEJBUjAsIFJJUkJVQkFTRSwgdXBwZXJfMzJfYml0cyhjaGlwLT5yaXJiLmFkZHIpKTsKKwkvKiBzZXQgdGhlIHJpcmIgc2l6ZSB0byAyNTYgZW50cmllcyAqLworCWxvbGFfd3JpdGViKGNoaXAsIEJBUjAsIFJJUkJTSVpFLCAweDAyKTsKKwkvKiByZXNldCB0aGUgcmlyYiBodyB3cml0ZSBwb2ludGVyICovCisJbG9sYV93cml0ZXcoY2hpcCwgQkFSMCwgUklSQldQLCBMT0xBX1JCUldQX0NMUik7CisJLyogc2V0IE49MSwgZ2V0IFJJUkIgcmVzcG9uc2UgaW50ZXJydXB0IGZvciBuZXcgZW50cnkgKi8KKwlsb2xhX3dyaXRldyhjaGlwLCBCQVIwLCBSSU5UQ05ULCAxKTsKKwkvKiBlbmFibGUgcmlyYiBkbWEgYW5kIHJlc3BvbnNlIGlycSAqLworCWxvbGFfd3JpdGViKGNoaXAsIEJBUjAsIFJJUkJDVEwsIExPTEFfUkJDVExfRE1BX0VOIHwgTE9MQV9SQkNUTF9JUlFfRU4pOworCS8qIGNsZWFyIGZsYWdzIGlmIHNldCAqLworCXRtcCA9ICBsb2xhX3JlYWRiKGNoaXAsIEJBUjAsIFJJUkJTVFMpICYgTE9MQV9SSVJCX0lOVF9NQVNLOworCWlmICh0bXApCisJCWxvbGFfd3JpdGViKGNoaXAsIEJBUjAsIFJJUkJTVFMsIHRtcCk7CisJY2hpcC0+cmlyYi5ycCA9IGNoaXAtPnJpcmIuY21kcyA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3RvcF9jb3JiX3JpcmIoc3RydWN0IGxvbGEgKmNoaXApCit7CisJLyogZGlzYWJsZSByaW5nYnVmZmVyIERNQXMgKi8KKwlsb2xhX3dyaXRlYihjaGlwLCBCQVIwLCBSSVJCQ1RMLCAwKTsKKwlsb2xhX3dyaXRlYihjaGlwLCBCQVIwLCBDT1JCQ1RMLCAwKTsKK30KKworc3RhdGljIHZvaWQgbG9sYV9yZXNldF9zZXR1cHMoc3RydWN0IGxvbGEgKmNoaXApCit7CisJLyogdXBkYXRlIHRoZSBncmFudWxhcml0eSAqLworCWxvbGFfc2V0X2dyYW51bGFyaXR5KGNoaXAsIGNoaXAtPmdyYW51bGFyaXR5LCB0cnVlKTsKKwkvKiB1cGRhdGUgdGhlIHNhbXBsZSBjbG9jayAqLworCWxvbGFfc2V0X2Nsb2NrX2luZGV4KGNoaXAsIGNoaXAtPmNsb2NrLmN1cl9pbmRleCk7CisJLyogZW5hYmxlIHVuc29saWNpdGVkIGV2ZW50cyBvZiB0aGUgY2xvY2sgd2lkZ2V0ICovCisJbG9sYV9lbmFibGVfY2xvY2tfZXZlbnRzKGNoaXApOworCS8qIHVwZGF0ZSB0aGUgYW5hbG9nIGdhaW5zICovCisJbG9sYV9zZXR1cF9hbGxfYW5hbG9nX2dhaW5zKGNoaXAsIENBUFQsIGZhbHNlKTsgLyogaW5wdXQsIHVwZGF0ZSAqLworCS8qIHVwZGF0ZSBTUkMgY29uZmlndXJhdGlvbiBpZiBhcHBsaWNhYmxlICovCisJbG9sYV9zZXRfc3JjX2NvbmZpZyhjaGlwLCBjaGlwLT5pbnB1dF9zcmNfbWFzaywgZmFsc2UpOworCS8qIHVwZGF0ZSB0aGUgYW5hbG9nIG91dHB1dHMgKi8KKwlsb2xhX3NldHVwX2FsbF9hbmFsb2dfZ2FpbnMoY2hpcCwgUExBWSwgZmFsc2UpOyAvKiBvdXRwdXQsIHVwZGF0ZSAqLworfQorCitzdGF0aWMgaW50IGxvbGFfcGFyc2VfdHJlZShzdHJ1Y3QgbG9sYSAqY2hpcCkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCWludCBuaWQsIGVycjsKKworCWVyciA9IGxvbGFfcmVhZF9wYXJhbShjaGlwLCAwLCBMT0xBX1BBUl9WRU5ET1JfSUQsICZ2YWwpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBTRlggIkNhbid0IHJlYWQgVkVORE9SX0lEXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJdmFsID4+PSAxNjsKKwlpZiAodmFsICE9IDB4MTM2OSkgeworCQlwcmludGsoS0VSTl9FUlIgU0ZYICJVbmtub3duIGNvZGVjIHZlbmRvciAweCV4XG4iLCB2YWwpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwllcnIgPSBsb2xhX3JlYWRfcGFyYW0oY2hpcCwgMSwgTE9MQV9QQVJfRlVOQ1RJT05fVFlQRSwgJnZhbCk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFNGWCAiQ2FuJ3QgcmVhZCBGVU5DVElPTl9UWVBFIGZvciAweCV4XG4iLCBuaWQpOworCQlyZXR1cm4gZXJyOworCX0KKwlpZiAodmFsICE9IDEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFNGWCAiVW5rbm93biBmdW5jdGlvbiB0eXBlICVkXG4iLCB2YWwpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwllcnIgPSBsb2xhX3JlYWRfcGFyYW0oY2hpcCwgMSwgTE9MQV9QQVJfU1BFQ0lGSUNfQ0FQUywgJnZhbCk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFNGWCAiQ2FuJ3QgcmVhZCBTUEVDQ0FQU1xuIik7CisJCXJldHVybiBlcnI7CisJfQorCWNoaXAtPmxvbGFfY2FwcyA9IHZhbDsKKwljaGlwLT5waW5bQ0FQVF0ubnVtX3BpbnMgPSBMT0xBX0FGR19JTlBVVF9QSU5fQ09VTlQoY2hpcC0+bG9sYV9jYXBzKTsKKwljaGlwLT5waW5bUExBWV0ubnVtX3BpbnMgPSBMT0xBX0FGR19PVVRQVVRfUElOX0NPVU5UKGNoaXAtPmxvbGFfY2Fwcyk7CisJc25kX3ByaW50ZGQoU0ZYICJzcGVjY2Fwcz0weCV4LCBwaW5zIGluPSVkLCBvdXQ9JWRcbiIsCisJCSAgICBjaGlwLT5sb2xhX2NhcHMsCisJCSAgICBjaGlwLT5waW5bQ0FQVF0ubnVtX3BpbnMsIGNoaXAtPnBpbltQTEFZXS5udW1fcGlucyk7CisKKwlpZiAoY2hpcC0+cGluW0NBUFRdLm51bV9waW5zID4gTUFYX0FVRElPX0lOT1VUX0NPVU5UIHx8CisJICAgIGNoaXAtPnBpbltQTEFZXS5udW1fcGlucyA+IE1BWF9BVURJT19JTk9VVF9DT1VOVCkgeworCQlwcmludGsoS0VSTl9FUlIgU0ZYICJJbnZhbGlkIExvbGEtc3BlYyBjYXBzIDB4JXhcbiIsIHZhbCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW5pZCA9IDB4MDI7CisJZXJyID0gbG9sYV9pbml0X3BjbShjaGlwLCBDQVBULCAmbmlkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBsb2xhX2luaXRfcGNtKGNoaXAsIFBMQVksICZuaWQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gbG9sYV9pbml0X3BpbnMoY2hpcCwgQ0FQVCwgJm5pZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZXJyID0gbG9sYV9pbml0X3BpbnMoY2hpcCwgUExBWSwgJm5pZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlpZiAoTE9MQV9BRkdfQ0xPQ0tfV0lER0VUX1BSRVNFTlQoY2hpcC0+bG9sYV9jYXBzKSkgeworCQllcnIgPSBsb2xhX2luaXRfY2xvY2tfd2lkZ2V0KGNoaXAsIG5pZCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJbmlkKys7CisJfQorCWlmIChMT0xBX0FGR19NSVhFUl9XSURHRVRfUFJFU0VOVChjaGlwLT5sb2xhX2NhcHMpKSB7CisJCWVyciA9IGxvbGFfaW5pdF9taXhlcl93aWRnZXQoY2hpcCwgbmlkKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQluaWQrKzsKKwl9CisKKwkvKiBlbmFibGUgdW5zb2xpY2l0ZWQgZXZlbnRzIG9mIHRoZSBjbG9jayB3aWRnZXQgKi8KKwllcnIgPSBsb2xhX2VuYWJsZV9jbG9ja19ldmVudHMoY2hpcCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwkvKiBpZiBsYXN0IFJlc2V0Q29udHJvbGxlciB3YXMgbm90IGEgQ29sZFJlc2V0LCB3ZSBkb24ndCBrbm93CisJICogdGhlIHN0YXRlIG9mIHRoZSBjYXJkOyBpbml0aWFsaXplIGhlcmUgYWdhaW4KKwkgKi8KKwlpZiAoIWNoaXAtPmNvbGRfcmVzZXQpIHsKKwkJbG9sYV9yZXNldF9zZXR1cHMoY2hpcCk7CisJCWNoaXAtPmNvbGRfcmVzZXQgPSAxOworCX0gZWxzZSB7CisJCS8qIHNldCB0aGUgZ3JhbnVsYXJpdHkgaWYgaXQgaXMgbm90IHRoZSBkZWZhdWx0ICovCisJCWlmIChjaGlwLT5ncmFudWxhcml0eSAhPSBMT0xBX0dSQU5VTEFSSVRZX01JTikKKwkJCWxvbGFfc2V0X2dyYW51bGFyaXR5KGNoaXAsIGNoaXAtPmdyYW51bGFyaXR5LCB0cnVlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbG9sYV9zdG9wX2h3KHN0cnVjdCBsb2xhICpjaGlwKQoreworCXN0b3BfY29yYl9yaXJiKGNoaXApOworCWxvbGFfaXJxX2Rpc2FibGUoY2hpcCk7Cit9CisKK3N0YXRpYyB2b2lkIGxvbGFfZnJlZShzdHJ1Y3QgbG9sYSAqY2hpcCkKK3sKKwlpZiAoY2hpcC0+aW5pdGlhbGl6ZWQpCisJCWxvbGFfc3RvcF9odyhjaGlwKTsKKwlsb2xhX2ZyZWVfcGNtKGNoaXApOworCWxvbGFfZnJlZV9taXhlcihjaGlwKTsKKwlpZiAoY2hpcC0+aXJxID49IDApCisJCWZyZWVfaXJxKGNoaXAtPmlycSwgKHZvaWQgKiljaGlwKTsKKwlpZiAoY2hpcC0+YmFyWzBdLnJlbWFwX2FkZHIpCisJCWlvdW5tYXAoY2hpcC0+YmFyWzBdLnJlbWFwX2FkZHIpOworCWlmIChjaGlwLT5iYXJbMV0ucmVtYXBfYWRkcikKKwkJaW91bm1hcChjaGlwLT5iYXJbMV0ucmVtYXBfYWRkcik7CisJaWYgKGNoaXAtPnJiLmFyZWEpCisJCXNuZF9kbWFfZnJlZV9wYWdlcygmY2hpcC0+cmIpOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMoY2hpcC0+cGNpKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoY2hpcC0+cGNpKTsKKwlrZnJlZShjaGlwKTsKK30KKworc3RhdGljIGludCBsb2xhX2Rldl9mcmVlKHN0cnVjdCBzbmRfZGV2aWNlICpkZXZpY2UpCit7CisJbG9sYV9mcmVlKGRldmljZS0+ZGV2aWNlX2RhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBsb2xhX2NyZWF0ZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBwY2lfZGV2ICpwY2ksCisJCQkJIGludCBkZXYsIHN0cnVjdCBsb2xhICoqcmNoaXApCit7CisJc3RydWN0IGxvbGEgKmNoaXA7CisJaW50IGVycjsKKwl1bnNpZ25lZCBpbnQgZGV2ZXI7CisJc3RhdGljIHN0cnVjdCBzbmRfZGV2aWNlX29wcyBvcHMgPSB7CisJCS5kZXZfZnJlZSA9IGxvbGFfZGV2X2ZyZWUsCisJfTsKKworCSpyY2hpcCA9IE5VTEw7CisKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwY2kpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjaGlwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgU0ZYICJjYW5ub3QgYWxsb2NhdGUgY2hpcFxuIik7CisJCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzcGluX2xvY2tfaW5pdCgmY2hpcC0+cmVnX2xvY2spOworCW11dGV4X2luaXQoJmNoaXAtPm9wZW5fbXV0ZXgpOworCWNoaXAtPmNhcmQgPSBjYXJkOworCWNoaXAtPnBjaSA9IHBjaTsKKwljaGlwLT5pcnEgPSAtMTsKKworCWNoaXAtPmdyYW51bGFyaXR5ID0gZ3JhbnVsYXJpdHlbZGV2XTsKKwlzd2l0Y2ggKGNoaXAtPmdyYW51bGFyaXR5KSB7CisJY2FzZSA4OgorCQljaGlwLT5zYW1wbGVfcmF0ZV9tYXggPSA0ODAwMDsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJY2hpcC0+c2FtcGxlX3JhdGVfbWF4ID0gOTYwMDA7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCWNoaXAtPnNhbXBsZV9yYXRlX21heCA9IDE5MjAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgU0ZYCisJCQkgICAiSW52YWxpZCBncmFudWxhcml0eSAlZCwgcmVzZXQgdG8gJWRcbiIsCisJCQkgICBjaGlwLT5ncmFudWxhcml0eSwgTE9MQV9HUkFOVUxBUklUWV9NQVgpOworCQljaGlwLT5ncmFudWxhcml0eSA9IExPTEFfR1JBTlVMQVJJVFlfTUFYOworCQljaGlwLT5zYW1wbGVfcmF0ZV9tYXggPSAxOTIwMDA7CisJCWJyZWFrOworCX0KKwljaGlwLT5zYW1wbGVfcmF0ZV9taW4gPSBzYW1wbGVfcmF0ZV9taW5bZGV2XTsKKwlpZiAoY2hpcC0+c2FtcGxlX3JhdGVfbWluID4gY2hpcC0+c2FtcGxlX3JhdGVfbWF4KSB7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HIFNGWAorCQkJICAgIkludmFsaWQgc2FtcGxlX3JhdGVfbWluICVkLCByZXNldCB0byAxNjAwMFxuIiwKKwkJCSAgIGNoaXAtPnNhbXBsZV9yYXRlX21pbik7CisJCWNoaXAtPnNhbXBsZV9yYXRlX21pbiA9IDE2MDAwOworCX0KKworCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGNpLCBEUlZOQU1FKTsKKwlpZiAoZXJyIDwgMCkgeworCQlrZnJlZShjaGlwKTsKKwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CisJCXJldHVybiBlcnI7CisJfQorCisJY2hpcC0+YmFyWzBdLmFkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpLCAwKTsKKwljaGlwLT5iYXJbMF0ucmVtYXBfYWRkciA9IHBjaV9pb3JlbWFwX2JhcihwY2ksIDApOworCWNoaXAtPmJhclsxXS5hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMik7CisJY2hpcC0+YmFyWzFdLnJlbWFwX2FkZHIgPSBwY2lfaW9yZW1hcF9iYXIocGNpLCAyKTsKKwlpZiAoIWNoaXAtPmJhclswXS5yZW1hcF9hZGRyIHx8ICFjaGlwLT5iYXJbMV0ucmVtYXBfYWRkcikgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFNGWCAiaW9yZW1hcCBlcnJvclxuIik7CisJCWVyciA9IC1FTlhJTzsKKwkJZ290byBlcnJvdXQ7CisJfQorCisJcGNpX3NldF9tYXN0ZXIocGNpKTsKKworCWVyciA9IHJlc2V0X2NvbnRyb2xsZXIoY2hpcCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyb3V0OworCisJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBsb2xhX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCisJCQlEUlZOQU1FLCBjaGlwKSkgeworCQlwcmludGsoS0VSTl9FUlIgU0ZYICJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIGVycm91dDsKKwl9CisJY2hpcC0+aXJxID0gcGNpLT5pcnE7CisJc3luY2hyb25pemVfaXJxKGNoaXAtPmlycSk7CisKKwlkZXZlciA9IGxvbGFfcmVhZGwoY2hpcCwgQkFSMSwgREVWRVIpOworCWNoaXAtPnBjbVtDQVBUXS5udW1fc3RyZWFtcyA9IChkZXZlciA+PiAwKSAmIDB4M2ZmOworCWNoaXAtPnBjbVtQTEFZXS5udW1fc3RyZWFtcyA9IChkZXZlciA+PiAxMCkgJiAweDNmZjsKKwljaGlwLT52ZXJzaW9uID0gKGRldmVyID4+IDI0KSAmIDB4ZmY7CisJc25kX3ByaW50ZGQoU0ZYICJzdHJlYW1zIGluPSVkLCBvdXQ9JWQsIHZlcnNpb249MHgleFxuIiwKKwkJICAgIGNoaXAtPnBjbVtDQVBUXS5udW1fc3RyZWFtcywgY2hpcC0+cGNtW1BMQVldLm51bV9zdHJlYW1zLAorCQkgICAgY2hpcC0+dmVyc2lvbik7CisKKwkvKiBUZXN0IExPTEFfQkFSMV9ERVZFUiAqLworCWlmIChjaGlwLT5wY21bQ0FQVF0ubnVtX3N0cmVhbXMgPiBNQVhfU1RSRUFNX0lOX0NPVU5UIHx8CisJICAgIGNoaXAtPnBjbVtQTEFZXS5udW1fc3RyZWFtcyA+IE1BWF9TVFJFQU1fT1VUX0NPVU5UIHx8CisJICAgICghY2hpcC0+cGNtW0NBUFRdLm51bV9zdHJlYW1zICYmCisJICAgICAhY2hpcC0+cGNtW1BMQVldLm51bV9zdHJlYW1zKSkgeworCQlwcmludGsoS0VSTl9FUlIgU0ZYICJpbnZhbGlkIERFVkVSID0gJXhcbiIsIGRldmVyKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnJvdXQ7CisJfQorCisJZXJyID0gc2V0dXBfY29yYl9yaXJiKGNoaXApOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycm91dDsKKworCWVyciA9IHNuZF9kZXZpY2VfbmV3KGNhcmQsIFNORFJWX0RFVl9MT1dMRVZFTCwgY2hpcCwgJm9wcyk7CisJaWYgKGVyciA8IDApIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiBTRlggIkVycm9yIGNyZWF0aW5nIGRldmljZSBbY2FyZF0hXG4iKTsKKwkJZ290byBlcnJvdXQ7CisJfQorCisJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkxvbGEiKTsKKwlzdHJsY3B5KGNhcmQtPnNob3J0bmFtZSwgIkRpZ2lncmFtIExvbGEiLCBzaXplb2YoY2FyZC0+c2hvcnRuYW1lKSk7CisJc25wcmludGYoY2FyZC0+bG9uZ25hbWUsIHNpemVvZihjYXJkLT5sb25nbmFtZSksCisJCSAiJXMgYXQgMHglbHggaXJxICVpIiwKKwkJIGNhcmQtPnNob3J0bmFtZSwgY2hpcC0+YmFyWzBdLmFkZHIsIGNoaXAtPmlycSk7CisJc3RyY3B5KGNhcmQtPm1peGVybmFtZSwgY2FyZC0+c2hvcnRuYW1lKTsKKworCWxvbGFfaXJxX2VuYWJsZShjaGlwKTsKKworCWNoaXAtPmluaXRpYWxpemVkID0gMTsKKwkqcmNoaXAgPSBjaGlwOworCXJldHVybiAwOworCisgZXJyb3V0OgorCWxvbGFfZnJlZShjaGlwKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBsb2xhX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksCisJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKK3sKKwlzdGF0aWMgaW50IGRldjsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJc3RydWN0IGxvbGEgKmNoaXA7CisJaW50IGVycjsKKworCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCisJCXJldHVybiAtRU5PREVWOworCWlmICghZW5hYmxlW2Rldl0pIHsKKwkJZGV2Kys7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgU0ZYICJFcnJvciBjcmVhdGluZyBjYXJkIVxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmcGNpLT5kZXYpOworCisJZXJyID0gbG9sYV9jcmVhdGUoY2FyZCwgcGNpLCBkZXYsICZjaGlwKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXRfZnJlZTsKKwljYXJkLT5wcml2YXRlX2RhdGEgPSBjaGlwOworCisJZXJyID0gbG9sYV9wYXJzZV90cmVlKGNoaXApOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dF9mcmVlOworCisJZXJyID0gbG9sYV9jcmVhdGVfcGNtKGNoaXApOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dF9mcmVlOworCisJZXJyID0gbG9sYV9jcmVhdGVfbWl4ZXIoY2hpcCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlsb2xhX3Byb2NfZGVidWdfbmV3KGNoaXApOworCisJZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlwY2lfc2V0X2RydmRhdGEocGNpLCBjYXJkKTsKKwlkZXYrKzsKKwlyZXR1cm4gZXJyOworb3V0X2ZyZWU6CisJc25kX2NhcmRfZnJlZShjYXJkKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgbG9sYV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaSkKK3sKKwlzbmRfY2FyZF9mcmVlKHBjaV9nZXRfZHJ2ZGF0YShwY2kpKTsKKwlwY2lfc2V0X2RydmRhdGEocGNpLCBOVUxMKTsKK30KKworLyogUENJIElEcyAqLworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGxvbGFfaWRzKSA9IHsKKwl7IFBDSV9WREVWSUNFKERJR0lHUkFNLCAweDAwMDEpIH0sCisJeyAwLCB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGxvbGFfaWRzKTsKKworLyogcGNpX2RyaXZlciBkZWZpbml0aW9uICovCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworCS5uYW1lID0gRFJWTkFNRSwKKwkuaWRfdGFibGUgPSBsb2xhX2lkcywKKwkucHJvYmUgPSBsb2xhX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChsb2xhX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhbHNhX2NhcmRfbG9sYV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NhcmRfbG9sYV9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhbHNhX2NhcmRfbG9sYV9pbml0KQorbW9kdWxlX2V4aXQoYWxzYV9jYXJkX2xvbGFfZXhpdCkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9sb2xhL2xvbGEuaCBiL3NvdW5kL3BjaS9sb2xhL2xvbGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTcwOGUyCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvcGNpL2xvbGEvbG9sYS5oCkBAIC0wLDAgKzEsNTI3IEBACisvKgorICogIFN1cHBvcnQgZm9yIERpZ2lncmFtIExvbGEgUENJLWUgYm9hcmRzCisgKgorICogIENvcHlyaWdodCAoYykgMjAxMSBUYWthc2hpIEl3YWkgPHRpd2FpQHN1c2UuZGU+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiAgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyAqICBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9MT0xBX0gKKyNkZWZpbmUgX0xPTEFfSAorCisjZGVmaW5lIERSVk5BTUUJInNuZC1sb2xhIgorI2RlZmluZSBTRlgJRFJWTkFNRSAiOiAiCisKKy8qCisgKiBMb2xhIEhEIEF1ZGlvIFJlZ2lzdGVycyBCQVIwCisgKi8KKyNkZWZpbmUgTE9MQV9CQVIwX0dDQVAJCTB4MDAKKyNkZWZpbmUgTE9MQV9CQVIwX1ZNSU4JCTB4MDIKKyNkZWZpbmUgTE9MQV9CQVIwX1ZNQUoJCTB4MDMKKyNkZWZpbmUgTE9MQV9CQVIwX09VVFBBWQkweDA0CisjZGVmaW5lIExPTEFfQkFSMF9JTlBBWQkJMHgwNgorI2RlZmluZSBMT0xBX0JBUjBfR0NUTAkJMHgwOAorI2RlZmluZSBMT0xBX0JBUjBfV0FLRUVOCTB4MGMKKyNkZWZpbmUgTE9MQV9CQVIwX1NUQVRFU1RTCTB4MGUKKyNkZWZpbmUgTE9MQV9CQVIwX0dTVFMJCTB4MTAKKyNkZWZpbmUgTE9MQV9CQVIwX09VVFNUUk1QQVkJMHgxOAorI2RlZmluZSBMT0xBX0JBUjBfSU5TVFJNUEFZCTB4MWEKKyNkZWZpbmUgTE9MQV9CQVIwX0lOVENUTAkweDIwCisjZGVmaW5lIExPTEFfQkFSMF9JTlRTVFMJMHgyNAorI2RlZmluZSBMT0xBX0JBUjBfV0FMQ0xLCTB4MzAKKyNkZWZpbmUgTE9MQV9CQVIwX1NTWU5DCQkweDM4CisKKyNkZWZpbmUgTE9MQV9CQVIwX0NPUkJMQkFTRQkweDQwCisjZGVmaW5lIExPTEFfQkFSMF9DT1JCVUJBU0UJMHg0NAorI2RlZmluZSBMT0xBX0JBUjBfQ09SQldQCTB4NDgJLyogbm8gVUxPTkcgYWNjZXNzICovCisjZGVmaW5lIExPTEFfQkFSMF9DT1JCUlAJMHg0YQkvKiBubyBVTE9ORyBhY2Nlc3MgKi8KKyNkZWZpbmUgTE9MQV9CQVIwX0NPUkJDVEwJMHg0YwkvKiBubyBVTE9ORyBhY2Nlc3MgKi8KKyNkZWZpbmUgTE9MQV9CQVIwX0NPUkJTVFMJMHg0ZAkvKiBVQ0hBUiBhY2Nlc3Mgb25seSAqLworI2RlZmluZSBMT0xBX0JBUjBfQ09SQlNJWkUJMHg0ZQkvKiBubyBVTE9ORyBhY2Nlc3MgKi8KKworI2RlZmluZSBMT0xBX0JBUjBfUklSQkxCQVNFCTB4NTAKKyNkZWZpbmUgTE9MQV9CQVIwX1JJUkJVQkFTRQkweDU0CisjZGVmaW5lIExPTEFfQkFSMF9SSVJCV1AJMHg1OAorI2RlZmluZSBMT0xBX0JBUjBfUklOVENOVAkweDVhCS8qIG5vIFVMT05HIGFjY2VzcyAqLworI2RlZmluZSBMT0xBX0JBUjBfUklSQkNUTAkweDVjCisjZGVmaW5lIExPTEFfQkFSMF9SSVJCU1RTCTB4NWQJLyogVUNIQVIgYWNjZXNzIG9ubHkgKi8KKyNkZWZpbmUgTE9MQV9CQVIwX1JJUkJTSVpFCTB4NWUJLyogbm8gVUxPTkcgYWNjZXNzICovCisKKyNkZWZpbmUgTE9MQV9CQVIwX0lDVwkJMHg2MAorI2RlZmluZSBMT0xBX0JBUjBfSVJSCQkweDY0CisjZGVmaW5lIExPTEFfQkFSMF9JQ1MJCTB4NjgKKyNkZWZpbmUgTE9MQV9CQVIwX0RQTEJBU0UJMHg3MAorI2RlZmluZSBMT0xBX0JBUjBfRFBVQkFTRQkweDc0CisKKy8qIHN0cmVhbSByZWdpc3RlciBvZmZzZXRzIGZyb20gc3RyZWFtIGJhc2UgMHg4MCAqLworI2RlZmluZSBMT0xBX0JBUjBfU0QwX09GRlNFVAkweDgwCisjZGVmaW5lIExPTEFfUkVHMF9TRF9DVEwJMHgwMAorI2RlZmluZSBMT0xBX1JFRzBfU0RfU1RTCTB4MDMKKyNkZWZpbmUgTE9MQV9SRUcwX1NEX0xQSUIJMHgwNAorI2RlZmluZSBMT0xBX1JFRzBfU0RfQ0JMCTB4MDgKKyNkZWZpbmUgTE9MQV9SRUcwX1NEX0xWSQkweDBjCisjZGVmaW5lIExPTEFfUkVHMF9TRF9GSUZPVwkweDBlCisjZGVmaW5lIExPTEFfUkVHMF9TRF9GSUZPU0laRQkweDEwCisjZGVmaW5lIExPTEFfUkVHMF9TRF9GT1JNQVQJMHgxMgorI2RlZmluZSBMT0xBX1JFRzBfU0RfQkRMUEwJMHgxOAorI2RlZmluZSBMT0xBX1JFRzBfU0RfQkRMUFUJMHgxYworCisvKgorICogTG9sYSBEaWdpZ3JhbSBSZWdpc3RlcnMgQkFSMQorICovCisjZGVmaW5lIExPTEFfQkFSMV9GUEdBVkVSCTB4MDAKKyNkZWZpbmUgTE9MQV9CQVIxX0RFVkVSCQkweDA0CisjZGVmaW5lIExPTEFfQkFSMV9VQ0JNVgkJMHgwOAorI2RlZmluZSBMT0xBX0JBUjFfSlRBRwkJMHgwYworI2RlZmluZSBMT0xBX0JBUjFfVUFSVFJYCTB4MTAKKyNkZWZpbmUgTE9MQV9CQVIxX1VBUlRUWAkweDE0CisjZGVmaW5lIExPTEFfQkFSMV9VQVJUQ1IJMHgxOAorI2RlZmluZSBMT0xBX0JBUjFfTlZSQU1WRVIJMHgxYworI2RlZmluZSBMT0xBX0JBUjFfQ1RSTFNQSQkweDIwCisjZGVmaW5lIExPTEFfQkFSMV9EU1BJCQkweDI0CisjZGVmaW5lIExPTEFfQkFSMV9BSVNQSQkJMHgyOAorI2RlZmluZSBMT0xBX0JBUjFfR1JBTgkJMHgyYworCisjZGVmaW5lIExPTEFfQkFSMV9ESU5UQ1RMCTB4ODAKKyNkZWZpbmUgTE9MQV9CQVIxX0RJSU5UQ1RMCTB4ODQKKyNkZWZpbmUgTE9MQV9CQVIxX0RPSU5UQ1RMCTB4ODgKKyNkZWZpbmUgTE9MQV9CQVIxX0xSQwkJMHg5MAorI2RlZmluZSBMT0xBX0JBUjFfRElOVFNUUwkweDk0CisjZGVmaW5lIExPTEFfQkFSMV9ESUlOVFNUUwkweDk4CisjZGVmaW5lIExPTEFfQkFSMV9ET0lOVFNUUwkweDljCisKKyNkZWZpbmUgTE9MQV9CQVIxX0RTRDBfT0ZGU0VUCTB4YTAKKyNkZWZpbmUgTE9MQV9CQVIxX0RTRF9TSVpFCTB4MTgKKworI2RlZmluZSBMT0xBX0JBUjFfRFNEblNUUyAgICAgICAweDAwCisjZGVmaW5lIExPTEFfQkFSMV9EU0RuTFBJQiAgICAgIDB4MDQKKyNkZWZpbmUgTE9MQV9CQVIxX0RTRG5DVEwgICAgICAgMHgwOAorI2RlZmluZSBMT0xBX0JBUjFfRFNEbkxWSSAgICAgICAweDBjCisjZGVmaW5lIExPTEFfQkFSMV9EU0RuQkRQTCAgICAgIDB4MTAKKyNkZWZpbmUgTE9MQV9CQVIxX0RTRG5CRFBVICAgICAgMHgxNAorCisjZGVmaW5lIExPTEFfQkFSMV9TU1lOQwkJMHgwM2U4CisKKyNkZWZpbmUgTE9MQV9CQVIxX0JPQVJEX0NUUkwJMHgwZjAwCisjZGVmaW5lIExPTEFfQkFSMV9CT0FSRF9NT0RFCTB4MGYwMgorCisjZGVmaW5lIExPTEFfQkFSMV9TT1VSQ0VfR0FJTl9FTkFCTEUJCTB4MTAwMAorI2RlZmluZSBMT0xBX0JBUjFfREVTVDAwX01JWF9HQUlOX0VOQUJMRQkweDEwMDQKKyNkZWZpbmUgTE9MQV9CQVIxX0RFU1QzMV9NSVhfR0FJTl9FTkFCTEUJMHgxMDgwCisjZGVmaW5lIExPTEFfQkFSMV9TT1VSQ0UwMF8wMV9HQUlOCQkweDEwODQKKyNkZWZpbmUgTE9MQV9CQVIxX1NPVVJDRTMwXzMxX0dBSU4JCTB4MTBjMAorI2RlZmluZSBMT0xBX0JBUjFfU09VUkNFX0dBSU4oc3JjKSBcCisJKExPTEFfQkFSMV9TT1VSQ0UwMF8wMV9HQUlOICsgKHNyYykgKiAyKQorI2RlZmluZSBMT0xBX0JBUjFfREVTVDAwX01JWDAwXzAxX0dBSU4JCTB4MTBjNAorI2RlZmluZSBMT0xBX0JBUjFfREVTVDAwX01JWDMwXzMxX0dBSU4JCTB4MTEwMAorI2RlZmluZSBMT0xBX0JBUjFfREVTVDAxX01JWDAwXzAxX0dBSU4JCTB4MTEwNAorI2RlZmluZSBMT0xBX0JBUjFfREVTVDAxX01JWDMwXzMxX0dBSU4JCTB4MTE0MAorI2RlZmluZSBMT0xBX0JBUjFfREVTVDMxX01JWDAwXzAxX0dBSU4JCTB4MTg4NAorI2RlZmluZSBMT0xBX0JBUjFfREVTVDMxX01JWDMwXzMxX0dBSU4JCTB4MThjMAorI2RlZmluZSBMT0xBX0JBUjFfTUlYX0dBSU4oZGVzdCwgbWl4KSBcCisJKExPTEFfQkFSMV9ERVNUMDBfTUlYMDBfMDFfR0FJTiArIChkZXN0KSAqIDB4NDAgKyAobWl4KSAqIDIpCisjZGVmaW5lIExPTEFfQkFSMV9BTkFMT0dfQ0xJUF9JTgkJMHgxOGM0CisjZGVmaW5lIExPTEFfQkFSMV9QRUFLTUVURVJTX1NPVVJDRTAwXzAxCTB4MThjOAorI2RlZmluZSBMT0xBX0JBUjFfUEVBS01FVEVSU19TT1VSQ0UzMF8zMQkweDE5MDQKKyNkZWZpbmUgTE9MQV9CQVIxX1BFQUtNRVRFUlNfU09VUkNFKHNyYykgXAorCShMT0xBX0JBUjFfUEVBS01FVEVSU19TT1VSQ0UwMF8wMSArIChzcmMpICogMikKKyNkZWZpbmUgTE9MQV9CQVIxX1BFQUtNRVRFUlNfREVTVDAwXzAxCQkweDE5MDgKKyNkZWZpbmUgTE9MQV9CQVIxX1BFQUtNRVRFUlNfREVTVDMwXzMxCQkweDE5NDQKKyNkZWZpbmUgTE9MQV9CQVIxX1BFQUtNRVRFUlNfREVTVChkZXN0KSBcCisJKExPTEFfQkFSMV9QRUFLTUVURVJTX0RFU1QwMF8wMSArIChkZXN0KSAqIDIpCisjZGVmaW5lIExPTEFfQkFSMV9QRUFLTUVURVJTX0FHQzAwXzAxCQkweDE5NDgKKyNkZWZpbmUgTE9MQV9CQVIxX1BFQUtNRVRFUlNfQUdDMTRfMTUJCTB4MTk2NAorI2RlZmluZSBMT0xBX0JBUjFfUEVBS01FVEVSU19BR0MoeCkgXAorCShMT0xBX0JBUjFfUEVBS01FVEVSU19BR0MwMF8wMSArICh4KSAqIDIpCisKKy8qIEdDVEwgcmVzZXQgYml0ICovCisjZGVmaW5lIExPTEFfR0NUTF9SRVNFVAkJKDEgPDwgMCkKKy8qIEdDVEwgdW5zb2xpY2l0ZWQgcmVzcG9uc2UgZW5hYmxlIGJpdCAqLworI2RlZmluZSBMT0xBX0dDVExfVVJFTgkJKDEgPDwgOCkKKworLyogQ09SQi9SSVJCIGNvbnRyb2wsIHJlYWQvd3JpdGUgcG9pbnRlciAqLworI2RlZmluZSBMT0xBX1JCQ1RMX0RNQV9FTgkweDAyCS8qIGVuYWJsZSBETUEgKi8KKyNkZWZpbmUgTE9MQV9SQkNUTF9JUlFfRU4JMHgwMQkvKiBlbmFibGUgSVJRICovCisjZGVmaW5lIExPTEFfUkJSV1BfQ0xSCQkweDgwMDAJLyogcmVhZC93cml0ZSBwb2ludGVyIGNsZWFyICovCisKKyNkZWZpbmUgTE9MQV9SSVJCX0VYX1VOU09MX0VWCTB4NDAwMDAwMDAKKyNkZWZpbmUgTE9MQV9SSVJCX0VYX0VSUk9SCTB4ODAwMDAwMDAKKworLyogQ09SQiBpbnQgbWFzazogQ01FSVswXSAqLworI2RlZmluZSBMT0xBX0NPUkJfSU5UX0NNRUkJMHgwMQorI2RlZmluZSBMT0xBX0NPUkJfSU5UX01BU0sJTE9MQV9DT1JCX0lOVF9DTUVJCisKKy8qIFJJUkIgaW50IG1hc2s6IG92ZXJydW5bMl0sIHJlc3BvbnNlWzBdICovCisjZGVmaW5lIExPTEFfUklSQl9JTlRfUkVTUE9OU0UJMHgwMQorI2RlZmluZSBMT0xBX1JJUkJfSU5UX09WRVJSVU4JMHgwNAorI2RlZmluZSBMT0xBX1JJUkJfSU5UX01BU0sJKExPTEFfUklSQl9JTlRfUkVTUE9OU0UgfCBMT0xBX1JJUkJfSU5UX09WRVJSVU4pCisKKy8qIERJTlRDVEwgYW5kIERJTlRTVFMgKi8KKyNkZWZpbmUgTE9MQV9ESU5UX0dMT0JBTAkweDgwMDAwMDAwIC8qIGdsb2JhbCBpbnRlcnJ1cHQgZW5hYmxlIGJpdCAqLworI2RlZmluZSBMT0xBX0RJTlRfQ1RSTAkJMHg0MDAwMDAwMCAvKiBjb250cm9sbGVyIGludGVycnVwdCBlbmFibGUgYml0ICovCisjZGVmaW5lIExPTEFfRElOVF9GSUZPRVJSCTB4MjAwMDAwMDAgLyogZ2xvYmFsIGZpZm8gZXJyb3IgZW5hYmxlIGJpdCAqLworI2RlZmluZSBMT0xBX0RJTlRfTVVFUlIJCTB4MTAwMDAwMDAgLyogZ2xvYmFsIG1pY3JvY29udHJvbGxlciB1bmRlcnJ1biBlcnJvciAqLworCisvKiBEU0RuQ1RMIGJpdHMgKi8KKyNkZWZpbmUgTE9MQV9EU0RfQ1RMX1NSU1QJMHgwMQkvKiBzdHJlYW0gcmVzZXQgYml0ICovCisjZGVmaW5lIExPTEFfRFNEX0NUTF9TUlVOCTB4MDIJLyogc3RyZWFtIERNQSBzdGFydCBiaXQgKi8KKyNkZWZpbmUgTE9MQV9EU0RfQ1RMX0lPQ0UJMHgwNAkvKiBpbnRlcnJ1cHQgb24gY29tcGxldGlvbiBlbmFibGUgKi8KKyNkZWZpbmUgTE9MQV9EU0RfQ1RMX0RFSUUJMHgxMAkvKiBkZXNjcmlwdG9yIGVycm9yIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgTE9MQV9EU0RfQ1RMX1ZMUkNWCTB4MjAJLyogdmFsaWQgTFJDb3VudFZhbHVlIGluZm9ybWF0aW9uIGluIGJpdHMgOC4uMzEgKi8KKyNkZWZpbmUgTE9MQV9MUkNfTUFTSwkJMHhmZmZmZmYwMAorCisvKiBEU0RuU1RTICovCisjZGVmaW5lIExPTEFfRFNEX1NUU19CQ0lTCTB4MDQJLyogYnVmZmVyIGNvbXBsZXRpb24gaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSBMT0xBX0RTRF9TVFNfREVTRQkweDEwCS8qIGRlc2NyaXB0b3IgZXJyb3IgaW50ZXJydXB0ICovCisjZGVmaW5lIExPTEFfRFNEX1NUU19GSUZPUkRZCTB4MjAJLyogZmlmbyByZWFkeSAqLworCisjZGVmaW5lIExPTEFfQ09SQl9FTlRSSUVTCTI1NgorCisjZGVmaW5lIE1BWF9TVFJFQU1fSU5fQ09VTlQJMTYKKyNkZWZpbmUgTUFYX1NUUkVBTV9PVVRfQ09VTlQJMTYKKyNkZWZpbmUgTUFYX1NUUkVBTV9DT1VOVAkxNgorI2RlZmluZSBNQVhfUElOUwkJTUFYX1NUUkVBTV9DT1VOVAorI2RlZmluZSBNQVhfU1RSRUFNX0JVRkZFUl9DT1VOVAkxNgorI2RlZmluZSBNQVhfQVVESU9fSU5PVVRfQ09VTlQJMTYKKworI2RlZmluZSBMT0xBX0NMT0NLX1RZUEVfSU5URVJOQUwgICAgMAorI2RlZmluZSBMT0xBX0NMT0NLX1RZUEVfQUVTICAgICAgICAgMQorI2RlZmluZSBMT0xBX0NMT0NLX1RZUEVfQUVTX1NZTkMgICAgMgorI2RlZmluZSBMT0xBX0NMT0NLX1RZUEVfV09SRENMT0NLICAgMworI2RlZmluZSBMT0xBX0NMT0NLX1RZUEVfRVRIRVJTT1VORCAgNAorI2RlZmluZSBMT0xBX0NMT0NLX1RZUEVfVklERU8gICAgICAgNQorCisjZGVmaW5lIExPTEFfQ0xPQ0tfRk9STUFUX05PTkUgICAgICAwCisjZGVmaW5lIExPTEFfQ0xPQ0tfRk9STUFUX05UU0MgICAgICAxCisjZGVmaW5lIExPTEFfQ0xPQ0tfRk9STUFUX1BBTCAgICAgICAyCisKKyNkZWZpbmUgTUFYX1NBTVBMRV9DTE9DS19DT1VOVCAgNDgKKworLyogcGFyYW1ldGVycyB1c2VkIHdpdGggbWl4ZXIgd2lkZ2V0J3MgbWl4ZXIgY2FwYWJpbGl0aWVzICovCisjZGVmaW5lIExPTEFfUEVBS19NRVRFUl9DQU5fQUdDX01BU0sJCTEKKyNkZWZpbmUgTE9MQV9QRUFLX01FVEVSX0NBTl9BTkFMT0dfQ0xJUF9NQVNLCTIKKworc3RydWN0IGxvbGFfYmFyIHsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJdm9pZCBfX2lvbWVtICpyZW1hcF9hZGRyOworfTsKKworLyogQ09SQi9SSVJCICovCitzdHJ1Y3QgbG9sYV9yYiB7CisJdTMyICpidWY7CQkvKiBDT1JCL1JJUkIgYnVmZmVyLCA4IGJ5dGUgcGVyIGVhY2ggZW50cnkgKi8KKwlkbWFfYWRkcl90IGFkZHI7CS8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgQ09SQi9SSVJCIGJ1ZmZlciAqLworCXVuc2lnbmVkIHNob3J0IHJwLCB3cDsJLyogcmVhZC93cml0ZSBwb2ludGVycyAqLworCWludCBjbWRzOwkJLyogbnVtYmVyIG9mIHBlbmRpbmcgcmVxdWVzdHMgKi8KK307CisKKy8qIFBpbiB3aWRnZXQgc2V0dXAgKi8KK3N0cnVjdCBsb2xhX3BpbiB7CisJdW5zaWduZWQgaW50IG5pZDsKKwlib29sIGlzX2FuYWxvZzsKKwl1bnNpZ25lZCBpbnQgYW1wX211dGU7CisJdW5zaWduZWQgaW50IGFtcF9zdGVwX3NpemU7CisJdW5zaWduZWQgaW50IGFtcF9udW1fc3RlcHM7CisJdW5zaWduZWQgaW50IGFtcF9vZmZzZXQ7CisJdW5zaWduZWQgaW50IG1heF9sZXZlbDsKKwl1bnNpZ25lZCBpbnQgY29uZmlnX2RlZmF1bHRfcmVnOworCXVuc2lnbmVkIGludCBmaXhlZF9nYWluX2xpc3RfbGVuOworCXVuc2lnbmVkIGludCBjdXJfZ2Fpbl9zdGVwOworfTsKKworc3RydWN0IGxvbGFfcGluX2FycmF5IHsKKwl1bnNpZ25lZCBpbnQgbnVtX3BpbnM7CisJdW5zaWduZWQgaW50IG51bV9hbmFsb2dfcGluczsKKwlzdHJ1Y3QgbG9sYV9waW4gcGluc1tNQVhfUElOU107Cit9OworCisvKiBDbG9jayB3aWRnZXQgc2V0dXAgKi8KK3N0cnVjdCBsb2xhX3NhbXBsZV9jbG9jayB7CisJdW5zaWduZWQgaW50IHR5cGU7CisJdW5zaWduZWQgaW50IGZvcm1hdDsKKwl1bnNpZ25lZCBpbnQgZnJlcTsKK307CisKK3N0cnVjdCBsb2xhX2Nsb2NrX3dpZGdldCB7CisJdW5zaWduZWQgaW50IG5pZDsKKwl1bnNpZ25lZCBpbnQgaXRlbXM7CisJdW5zaWduZWQgaW50IGN1cl9pbmRleDsKKwl1bnNpZ25lZCBpbnQgY3VyX2ZyZXE7CisJYm9vbCBjdXJfdmFsaWQ7CisJc3RydWN0IGxvbGFfc2FtcGxlX2Nsb2NrIHNhbXBsZV9jbG9ja1tNQVhfU0FNUExFX0NMT0NLX0NPVU5UXTsKKwl1bnNpZ25lZCBpbnQgaWR4X2xvb2t1cFtNQVhfU0FNUExFX0NMT0NLX0NPVU5UXTsKK307CisKKyNkZWZpbmUgTE9MQV9NSVhFUl9ESU0gICAgICAzMgorc3RydWN0IGxvbGFfbWl4ZXJfYXJyYXkgeworCXUzMiBzcmNfZ2Fpbl9lbmFibGU7CisJdTMyIGRlc3RfbWl4X2dhaW5fZW5hYmxlW0xPTEFfTUlYRVJfRElNXTsKKwl1MTYgc3JjX2dhaW5bTE9MQV9NSVhFUl9ESU1dOworCXUxNiBkZXN0X21peF9nYWluW0xPTEFfTUlYRVJfRElNXVtMT0xBX01JWEVSX0RJTV07Cit9OworCisvKiBNaXhlciB3aWRnZXQgc2V0dXAgKi8KK3N0cnVjdCBsb2xhX21peGVyX3dpZGdldCB7CisJdW5zaWduZWQgaW50IG5pZDsKKwl1bnNpZ25lZCBpbnQgY2FwczsKKwlzdHJ1Y3QgbG9sYV9taXhlcl9hcnJheSBfX3VzZXIgKmFycmF5OworCXN0cnVjdCBsb2xhX21peGVyX2FycmF5ICphcnJheV9zYXZlZDsKKwl1bnNpZ25lZCBpbnQgc3JjX3N0cmVhbV9vdXRzOworCXVuc2lnbmVkIGludCBzcmNfcGh5c19pbnM7CisJdW5zaWduZWQgaW50IGRlc3Rfc3RyZWFtX2luczsKKwl1bnNpZ25lZCBpbnQgZGVzdF9waHlzX291dHM7CisJdW5zaWduZWQgaW50IHNyY19zdHJlYW1fb3V0X29mczsKKwl1bnNpZ25lZCBpbnQgZGVzdF9waHlzX291dF9vZnM7CisJdW5zaWduZWQgaW50IHNyY19tYXNrOworCXVuc2lnbmVkIGludCBkZXN0X21hc2s7Cit9OworCisvKiBBdWRpbyBzdHJlYW0gKi8KK3N0cnVjdCBsb2xhX3N0cmVhbSB7CisJdW5zaWduZWQgaW50IG5pZDsJLyogYXVkaW8gd2lkZ2V0IE5JRCAqLworCXVuc2lnbmVkIGludCBpbmRleDsJLyogYXJyYXkgaW5kZXggKi8KKwl1bnNpZ25lZCBpbnQgZHNkOwkvKiBEU0QgaW5kZXggKi8KKwlib29sIGNhbl9mbG9hdDsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsgLyogYXNzaWduZWQgUENNIHN1YnN0cmVhbSAqLworCXN0cnVjdCBsb2xhX3N0cmVhbSAqbWFzdGVyOwkvKiBtYXN0ZXIgc3RyZWFtIChmb3IgbXVsdGktY2hhbm5lbCkgKi8KKworCS8qIGJ1ZmZlciBzZXR1cCAqLworCXVuc2lnbmVkIGludCBidWZzaXplOworCXVuc2lnbmVkIGludCBwZXJpb2RfYnl0ZXM7CisJdW5zaWduZWQgaW50IGZyYWdzOworCisJLyogZm9ybWF0ICsgY2hhbm5lbCBzZXR1cCAqLworCXVuc2lnbmVkIGludCBmb3JtYXRfdmVyYjsKKworCS8qIGZsYWdzICovCisJdW5zaWduZWQgaW50IG9wZW5lZDoxOworCXVuc2lnbmVkIGludCBwcmVwYXJlZDoxOworCXVuc2lnbmVkIGludCBwYXVzZWQ6MTsKKwl1bnNpZ25lZCBpbnQgcnVubmluZzoxOworfTsKKworI2RlZmluZSBQTEFZCVNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0sKKyNkZWZpbmUgQ0FQVAlTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUKKworc3RydWN0IGxvbGFfcGNtIHsKKwl1bnNpZ25lZCBpbnQgbnVtX3N0cmVhbXM7CisJc3RydWN0IHNuZF9kbWFfYnVmZmVyIGJkbDsgLyogQkRMIGJ1ZmZlciAqLworCXN0cnVjdCBsb2xhX3N0cmVhbSBzdHJlYW1zW01BWF9TVFJFQU1fQ09VTlRdOworfTsKKworLyogY2FyZCBpbnN0YW5jZSAqLworc3RydWN0IGxvbGEgeworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpOworCisJLyogcGNpIHJlc291cmNlcyAqLworCXN0cnVjdCBsb2xhX2JhciBiYXJbMl07CisJaW50IGlycTsKKworCS8qIGxvY2tzICovCisJc3BpbmxvY2tfdCByZWdfbG9jazsKKwlzdHJ1Y3QgbXV0ZXggb3Blbl9tdXRleDsKKworCS8qIENPUkIvUklSQiAqLworCXN0cnVjdCBsb2xhX3JiIGNvcmI7CisJc3RydWN0IGxvbGFfcmIgcmlyYjsKKwl1bnNpZ25lZCBpbnQgcmVzLCByZXNfZXg7CS8qIGxhc3QgcmVhZCB2YWx1ZXMgKi8KKwkvKiBsYXN0IGNvbW1hbmQgKGZvciBkZWJ1Z2dpbmcpICovCisJdW5zaWduZWQgaW50IGxhc3RfY21kX25pZCwgbGFzdF92ZXJiLCBsYXN0X2RhdGEsIGxhc3RfZXh0ZGF0YTsKKworCS8qIENPUkIvUklSQiBidWZmZXJzICovCisJc3RydWN0IHNuZF9kbWFfYnVmZmVyIHJiOworCisJLyogdW5zb2xpY2l0ZWQgZXZlbnRzICovCisJdW5zaWduZWQgaW50IGxhc3RfdW5zb2xfcmVzOworCisJLyogc3RyZWFtcyAqLworCXN0cnVjdCBsb2xhX3BjbSBwY21bMl07CisKKwkvKiBpbnB1dCBzcmMgKi8KKwl1bnNpZ25lZCBpbnQgaW5wdXRfc3JjX2NhcHNfbWFzazsKKwl1bnNpZ25lZCBpbnQgaW5wdXRfc3JjX21hc2s7CisKKwkvKiBwaW5zICovCisJc3RydWN0IGxvbGFfcGluX2FycmF5IHBpblsyXTsKKworCS8qIGNsb2NrICovCisJc3RydWN0IGxvbGFfY2xvY2tfd2lkZ2V0IGNsb2NrOworCWludCByZWZfY291bnRfcmF0ZTsKKwl1bnNpZ25lZCBpbnQgc2FtcGxlX3JhdGU7CisKKwkvKiBtaXhlciAqLworCXN0cnVjdCBsb2xhX21peGVyX3dpZGdldCBtaXhlcjsKKworCS8qIGh3IGluZm8gKi8KKwl1bnNpZ25lZCBpbnQgdmVyc2lvbjsKKwl1bnNpZ25lZCBpbnQgbG9sYV9jYXBzOworCisJLyogcGFyYW1ldGVycyAqLworCXVuc2lnbmVkIGludCBncmFudWxhcml0eTsKKwl1bnNpZ25lZCBpbnQgc2FtcGxlX3JhdGVfbWluOworCXVuc2lnbmVkIGludCBzYW1wbGVfcmF0ZV9tYXg7CisKKwkvKiBmbGFncyAqLworCXVuc2lnbmVkIGludCBpbml0aWFsaXplZDoxOworCXVuc2lnbmVkIGludCBjb2xkX3Jlc2V0OjE7CisJdW5zaWduZWQgaW50IHBvbGxpbmdfbW9kZToxOworCisJLyogZm9yIGRlYnVnZ2luZyAqLworCXVuc2lnbmVkIGludCBkZWJ1Z19yZXM7CisJdW5zaWduZWQgaW50IGRlYnVnX3Jlc19leDsKK307CisKKyNkZWZpbmUgQkFSMAkwCisjZGVmaW5lIEJBUjEJMQorCisvKiBIZWxwZXIgbWFjcm9zICovCisjZGVmaW5lIGxvbGFfcmVhZGwoY2hpcCwgaWR4LCBuYW1lKSBcCisJcmVhZGwoKGNoaXApLT5iYXJbaWR4XS5yZW1hcF9hZGRyICsgTE9MQV8jI2lkeCMjXyMjbmFtZSkKKyNkZWZpbmUgbG9sYV9yZWFkdyhjaGlwLCBpZHgsIG5hbWUpIFwKKwlyZWFkdygoY2hpcCktPmJhcltpZHhdLnJlbWFwX2FkZHIgKyBMT0xBXyMjaWR4IyNfIyNuYW1lKQorI2RlZmluZSBsb2xhX3JlYWRiKGNoaXAsIGlkeCwgbmFtZSkgXAorCXJlYWRiKChjaGlwKS0+YmFyW2lkeF0ucmVtYXBfYWRkciArIExPTEFfIyNpZHgjI18jI25hbWUpCisjZGVmaW5lIGxvbGFfd3JpdGVsKGNoaXAsIGlkeCwgbmFtZSwgdmFsKSBcCisJd3JpdGVsKCh2YWwpLCAoY2hpcCktPmJhcltpZHhdLnJlbWFwX2FkZHIgKyBMT0xBXyMjaWR4IyNfIyNuYW1lKQorI2RlZmluZSBsb2xhX3dyaXRldyhjaGlwLCBpZHgsIG5hbWUsIHZhbCkgXAorCXdyaXRldygodmFsKSwgKGNoaXApLT5iYXJbaWR4XS5yZW1hcF9hZGRyICsgTE9MQV8jI2lkeCMjXyMjbmFtZSkKKyNkZWZpbmUgbG9sYV93cml0ZWIoY2hpcCwgaWR4LCBuYW1lLCB2YWwpIFwKKwl3cml0ZWIoKHZhbCksIChjaGlwKS0+YmFyW2lkeF0ucmVtYXBfYWRkciArIExPTEFfIyNpZHgjI18jI25hbWUpCisKKyNkZWZpbmUgbG9sYV9kc2RfcmVhZChjaGlwLCBkc2QsIG5hbWUpIFwKKwlyZWFkbCgoY2hpcCktPmJhcltCQVIxXS5yZW1hcF9hZGRyICsgTE9MQV9CQVIxX0RTRDBfT0ZGU0VUICsgXAorCSAgICAgIChMT0xBX0JBUjFfRFNEX1NJWkUgKiAoZHNkKSkgKyBMT0xBX0JBUjFfRFNEbiMjbmFtZSkKKyNkZWZpbmUgbG9sYV9kc2Rfd3JpdGUoY2hpcCwgZHNkLCBuYW1lLCB2YWwpIFwKKwl3cml0ZWwoKHZhbCksIChjaGlwKS0+YmFyW0JBUjFdLnJlbWFwX2FkZHIgKyBMT0xBX0JBUjFfRFNEMF9PRkZTRVQgKyBcCisJICAgICAgIChMT0xBX0JBUjFfRFNEX1NJWkUgKiAoZHNkKSkgKyBMT0xBX0JBUjFfRFNEbiMjbmFtZSkKKworLyogR0VUIHZlcmJzIEhEQXVkaW8gKi8KKyNkZWZpbmUgTE9MQV9WRVJCX0dFVF9TVFJFQU1fRk9STUFUCQkweGEwMAorI2RlZmluZSBMT0xBX1ZFUkJfR0VUX0FNUF9HQUlOX01VVEUJCTB4YjAwCisjZGVmaW5lIExPTEFfVkVSQl9QQVJBTUVURVJTCQkJMHhmMDAKKyNkZWZpbmUgTE9MQV9WRVJCX0dFVF9QT1dFUl9TVEFURQkJMHhmMDUKKyNkZWZpbmUgTE9MQV9WRVJCX0dFVF9DT05WCQkJMHhmMDYKKyNkZWZpbmUgTE9MQV9WRVJCX0dFVF9VTlNPTElDSVRFRF9SRVNQT05TRQkweGYwOAorI2RlZmluZSBMT0xBX1ZFUkJfR0VUX0RJR0lfQ09OVkVSVF8xCQkweGYwZAorI2RlZmluZSBMT0xBX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxUCQkweGYxYworI2RlZmluZSBMT0xBX1ZFUkJfR0VUX1NVQlNZU1RFTV9JRAkJMHhmMjAKKy8qIEdFVCB2ZXJicyBEaWdpZ3JhbSAqLworI2RlZmluZSBMT0xBX1ZFUkJfR0VUX0ZJWEVEX0dBSU4JCTB4ZmMwCisjZGVmaW5lIExPTEFfVkVSQl9HRVRfR0FJTl9TRUxFQ1QJCTB4ZmMxCisjZGVmaW5lIExPTEFfVkVSQl9HRVRfTUFYX0xFVkVMCQkJMHhmYzIKKyNkZWZpbmUgTE9MQV9WRVJCX0dFVF9DTE9DS19MSVNUCQkweGZjMworI2RlZmluZSBMT0xBX1ZFUkJfR0VUX0NMT0NLX1NFTEVDVAkJMHhmYzQKKyNkZWZpbmUgTE9MQV9WRVJCX0dFVF9DTE9DS19TVEFUVVMJCTB4ZmM1CisKKy8qIFNFVCB2ZXJicyBIREF1ZGlvICovCisjZGVmaW5lIExPTEFfVkVSQl9TRVRfU1RSRUFNX0ZPUk1BVAkJMHgyMDAKKyNkZWZpbmUgTE9MQV9WRVJCX1NFVF9BTVBfR0FJTl9NVVRFCQkweDMwMAorI2RlZmluZSBMT0xBX1ZFUkJfU0VUX1BPV0VSX1NUQVRFCQkweDcwNQorI2RlZmluZSBMT0xBX1ZFUkJfU0VUX0NIQU5ORUxfU1RSRUFNSUQJCTB4NzA2CisjZGVmaW5lIExPTEFfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFCTB4NzA4CisjZGVmaW5lIExPTEFfVkVSQl9TRVRfRElHSV9DT05WRVJUXzEJCTB4NzBkCisvKiBTRVQgdmVyYnMgRGlnaWdyYW0gKi8KKyNkZWZpbmUgTE9MQV9WRVJCX1NFVF9HQUlOX1NFTEVDVAkJMHhmODEKKyNkZWZpbmUgTE9MQV9WRVJCX1NFVF9DTE9DS19TRUxFQ1QJCTB4Zjg0CisjZGVmaW5lIExPTEFfVkVSQl9TRVRfR1JBTlVMQVJJVFlfU1RFUFMJCTB4Zjg2CisjZGVmaW5lIExPTEFfVkVSQl9TRVRfU09VUkNFX0dBSU4JCTB4Zjg3CisjZGVmaW5lIExPTEFfVkVSQl9TRVRfTUlYX0dBSU4JCQkweGY4OAorI2RlZmluZSBMT0xBX1ZFUkJfU0VUX0RFU1RJTkFUSU9OX0dBSU4JCTB4Zjg5CisjZGVmaW5lIExPTEFfVkVSQl9TRVRfU1JDCQkJMHhmOGEKKworLyogUGFyYW1ldGVyIElEcyB1c2VkIHdpdGggTE9MQV9WRVJCX1BBUkFNRVRFUlMgKi8KKyNkZWZpbmUgTE9MQV9QQVJfVkVORE9SX0lECQkJMHgwMAorI2RlZmluZSBMT0xBX1BBUl9GVU5DVElPTl9UWVBFCQkJMHgwNQorI2RlZmluZSBMT0xBX1BBUl9BVURJT19XSURHRVRfQ0FQCQkweDA5CisjZGVmaW5lIExPTEFfUEFSX1BDTQkJCQkweDBhCisjZGVmaW5lIExPTEFfUEFSX1NUUkVBTV9GT1JNQVRTCQkJMHgwYgorI2RlZmluZSBMT0xBX1BBUl9QSU5fQ0FQCQkJMHgwYworI2RlZmluZSBMT0xBX1BBUl9BTVBfSU5fQ0FQCQkJMHgwZAorI2RlZmluZSBMT0xBX1BBUl9DT05OTElTVF9MRU4JCQkweDBlCisjZGVmaW5lIExPTEFfUEFSX1BPV0VSX1NUQVRFCQkJMHgwZgorI2RlZmluZSBMT0xBX1BBUl9HUElPX0NBUAkJCTB4MTEKKyNkZWZpbmUgTE9MQV9QQVJfQU1QX09VVF9DQVAJCQkweDEyCisjZGVmaW5lIExPTEFfUEFSX1NQRUNJRklDX0NBUFMJCQkweDgwCisjZGVmaW5lIExPTEFfUEFSX0ZJWEVEX0dBSU5fTElTVAkJMHg4MQorCisvKiBleHRyYWN0IHJlc3VsdHMgb2YgTE9MQV9QQVJfU1BFQ0lGSUNfQ0FQUyAqLworI2RlZmluZSBMT0xBX0FGR19NSVhFUl9XSURHRVRfUFJFU0VOVChyZXMpCSgocmVzICYgKDEgPDwgMjEpKSAhPSAwKQorI2RlZmluZSBMT0xBX0FGR19DTE9DS19XSURHRVRfUFJFU0VOVChyZXMpCSgocmVzICYgKDEgPDwgMjApKSAhPSAwKQorI2RlZmluZSBMT0xBX0FGR19JTlBVVF9QSU5fQ09VTlQocmVzKQkJKChyZXMgPj4gMTApICYgMHgyZmYpCisjZGVmaW5lIExPTEFfQUZHX09VVFBVVF9QSU5fQ09VTlQocmVzKQkJKChyZXMpICYgMHgyZmYpCisKKy8qIGV4dHJhY3QgcmVzdWx0cyBvZiBMT0xBX1BBUl9BTVBfSU5fQ0FQIC8gTE9MQV9QQVJfQU1QX09VVF9DQVAgKi8KKyNkZWZpbmUgTE9MQV9BTVBfTVVURV9DQVBBQkxFKHJlcykJCSgocmVzICYgKDEgPDwgMzEpKSAhPSAwKQorI2RlZmluZSBMT0xBX0FNUF9TVEVQX1NJWkUocmVzKQkJCSgocmVzID4+IDI0KSAmIDB4N2YpCisjZGVmaW5lIExPTEFfQU1QX05VTV9TVEVQUyhyZXMpCQkJKChyZXMgPj4gMTIpICYgMHgzZmYpCisjZGVmaW5lIExPTEFfQU1QX09GRlNFVChyZXMpCQkJKChyZXMpICYgMHgzZmYpCisKKyNkZWZpbmUgTE9MQV9HUkFOVUxBUklUWV9NSU4JCTgKKyNkZWZpbmUgTE9MQV9HUkFOVUxBUklUWV9NQVgJCTMyCisjZGVmaW5lIExPTEFfR1JBTlVMQVJJVFlfU1RFUAkJOAorCisvKiBwYXJhbWV0ZXJzIHVzZWQgd2l0aCB1bnNvbGljaXRlZCBjb21tYW5kL3Jlc3BvbnNlICovCisjZGVmaW5lIExPTEFfVU5TT0xJQ0lURURfVEFHX01BU0sJMHgzZgorI2RlZmluZSBMT0xBX1VOU09MSUNJVEVEX1RBRwkJMHgxYQorI2RlZmluZSBMT0xBX1VOU09MSUNJVEVEX0VOQUJMRQkJMHg4MAorI2RlZmluZSBMT0xBX1VOU09MX1JFU1BfVEFHX09GRlNFVAkyNgorCisvKiBjb3VudCB2YWx1ZXMgaW4gdGhlIFZlbmRvciBTcGVjaWZpYyBNaXhlciBXaWRnZXQncyBBdWRpbyBXaWRnZXQgQ2FwYWJpbGl0aWVzICovCisjZGVmaW5lIExPTEFfTUlYRVJfU1JDX0lOUFVUX1BMQVlfU0VQQVJBVElPTihyZXMpICAgKChyZXMgPj4gMikgJiAweDFmKQorI2RlZmluZSBMT0xBX01JWEVSX0RFU1RfUkVDX09VVFBVVF9TRVBBVEFUSU9OKHJlcykgICgocmVzID4+IDcpICYgMHgxZikKKworaW50IGxvbGFfY29kZWNfd3JpdGUoc3RydWN0IGxvbGEgKmNoaXAsIHVuc2lnbmVkIGludCBuaWQsIHVuc2lnbmVkIGludCB2ZXJiLAorCQkgICAgIHVuc2lnbmVkIGludCBkYXRhLCB1bnNpZ25lZCBpbnQgZXh0ZGF0YSk7CitpbnQgbG9sYV9jb2RlY19yZWFkKHN0cnVjdCBsb2xhICpjaGlwLCB1bnNpZ25lZCBpbnQgbmlkLCB1bnNpZ25lZCBpbnQgdmVyYiwKKwkJICAgIHVuc2lnbmVkIGludCBkYXRhLCB1bnNpZ25lZCBpbnQgZXh0ZGF0YSwKKwkJICAgIHVuc2lnbmVkIGludCAqdmFsLCB1bnNpZ25lZCBpbnQgKmV4dHZhbCk7CitpbnQgbG9sYV9jb2RlY19mbHVzaChzdHJ1Y3QgbG9sYSAqY2hpcCk7CisjZGVmaW5lIGxvbGFfcmVhZF9wYXJhbShjaGlwLCBuaWQsIHBhcmFtLCB2YWwpIFwKKwlsb2xhX2NvZGVjX3JlYWQoY2hpcCwgbmlkLCBMT0xBX1ZFUkJfUEFSQU1FVEVSUywgcGFyYW0sIDAsIHZhbCwgTlVMTCkKKworLyogUENNICovCitpbnQgbG9sYV9jcmVhdGVfcGNtKHN0cnVjdCBsb2xhICpjaGlwKTsKK3ZvaWQgbG9sYV9mcmVlX3BjbShzdHJ1Y3QgbG9sYSAqY2hpcCk7CitpbnQgbG9sYV9pbml0X3BjbShzdHJ1Y3QgbG9sYSAqY2hpcCwgaW50IGRpciwgaW50ICpuaWRwKTsKK3ZvaWQgbG9sYV9wY21fdXBkYXRlKHN0cnVjdCBsb2xhICpjaGlwLCBzdHJ1Y3QgbG9sYV9wY20gKnBjbSwgdW5zaWduZWQgaW50IGJpdHMpOworCisvKiBjbG9jayAqLworaW50IGxvbGFfaW5pdF9jbG9ja193aWRnZXQoc3RydWN0IGxvbGEgKmNoaXAsIGludCBuaWQpOworaW50IGxvbGFfc2V0X2dyYW51bGFyaXR5KHN0cnVjdCBsb2xhICpjaGlwLCB1bnNpZ25lZCBpbnQgdmFsLCBib29sIGZvcmNlKTsKK2ludCBsb2xhX2VuYWJsZV9jbG9ja19ldmVudHMoc3RydWN0IGxvbGEgKmNoaXApOworaW50IGxvbGFfc2V0X2Nsb2NrX2luZGV4KHN0cnVjdCBsb2xhICpjaGlwLCB1bnNpZ25lZCBpbnQgaWR4KTsKK2ludCBsb2xhX3NldF9jbG9jayhzdHJ1Y3QgbG9sYSAqY2hpcCwgaW50IGlkeCk7CitpbnQgbG9sYV9zZXRfc2FtcGxlX3JhdGUoc3RydWN0IGxvbGEgKmNoaXAsIGludCByYXRlKTsKK2Jvb2wgbG9sYV91cGRhdGVfZXh0X2Nsb2NrX2ZyZXEoc3RydWN0IGxvbGEgKmNoaXAsIHVuc2lnbmVkIGludCB2YWwpOwordW5zaWduZWQgaW50IGxvbGFfc2FtcGxlX3JhdGVfY29udmVydCh1bnNpZ25lZCBpbnQgY29kZWQpOworCisvKiBtaXhlciAqLworaW50IGxvbGFfaW5pdF9waW5zKHN0cnVjdCBsb2xhICpjaGlwLCBpbnQgZGlyLCBpbnQgKm5pZHApOworaW50IGxvbGFfaW5pdF9taXhlcl93aWRnZXQoc3RydWN0IGxvbGEgKmNoaXAsIGludCBuaWQpOwordm9pZCBsb2xhX2ZyZWVfbWl4ZXIoc3RydWN0IGxvbGEgKmNoaXApOworaW50IGxvbGFfY3JlYXRlX21peGVyKHN0cnVjdCBsb2xhICpjaGlwKTsKK2ludCBsb2xhX3NldHVwX2FsbF9hbmFsb2dfZ2FpbnMoc3RydWN0IGxvbGEgKmNoaXAsIGludCBkaXIsIGJvb2wgbXV0ZSk7Cit2b2lkIGxvbGFfc2F2ZV9taXhlcihzdHJ1Y3QgbG9sYSAqY2hpcCk7Cit2b2lkIGxvbGFfcmVzdG9yZV9taXhlcihzdHJ1Y3QgbG9sYSAqY2hpcCk7CitpbnQgbG9sYV9zZXRfc3JjX2NvbmZpZyhzdHJ1Y3QgbG9sYSAqY2hpcCwgdW5zaWduZWQgaW50IHNyY19tYXNrLCBib29sIHVwZGF0ZSk7CisKKy8qIHByb2MgKi8KKyNpZmRlZiBDT05GSUdfU05EX0RFQlVHCit2b2lkIGxvbGFfcHJvY19kZWJ1Z19uZXcoc3RydWN0IGxvbGEgKmNoaXApOworI2Vsc2UKKyNkZWZpbmUgbG9sYV9wcm9jX2RlYnVnX25ldyhjaGlwKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfTE9MQV9IICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvbG9sYS9sb2xhX2Nsb2NrLmMgYi9zb3VuZC9wY2kvbG9sYS9sb2xhX2Nsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJmOGVmMAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9sb2xhL2xvbGFfY2xvY2suYwpAQCAtMCwwICsxLDMyMyBAQAorLyoKKyAqICBTdXBwb3J0IGZvciBEaWdpZ3JhbSBMb2xhIFBDSS1lIGJvYXJkcworICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTEgVGFrYXNoaSBJd2FpIDx0aXdhaUBzdXNlLmRlPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisgKiAgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlICJsb2xhLmgiCisKK3Vuc2lnbmVkIGludCBsb2xhX3NhbXBsZV9yYXRlX2NvbnZlcnQodW5zaWduZWQgaW50IGNvZGVkKQoreworCXVuc2lnbmVkIGludCBmcmVxOworCisJLyogYmFzZSBmcmVxdWVuY3kgKi8KKwlzd2l0Y2ggKGNvZGVkICYgMHgzKSB7CisJY2FzZSAwOiAgICAgZnJlcSA9IDQ4MDAwOyBicmVhazsKKwljYXNlIDE6ICAgICBmcmVxID0gNDQxMDA7IGJyZWFrOworCWNhc2UgMjogICAgIGZyZXEgPSAzMjAwMDsgYnJlYWs7CisJZGVmYXVsdDogICAgcmV0dXJuIDA7ICAgLyogZXJyb3IgKi8KKwl9CisKKwkvKiBtdWx0aXBsaWVyIC8gZGV2aXNvciAqLworCXN3aXRjaCAoY29kZWQgJiAweDFjKSB7CisJY2FzZSAoMCA8PCAyKTogICAgYnJlYWs7CisJY2FzZSAoNCA8PCAyKTogICAgYnJlYWs7CisJY2FzZSAoMSA8PCAyKTogICAgZnJlcSAqPSAyOyBicmVhazsKKwljYXNlICgyIDw8IDIpOiAgICBmcmVxICo9IDQ7IGJyZWFrOworCWNhc2UgKDUgPDwgMik6ICAgIGZyZXEgLz0gMjsgYnJlYWs7CisJY2FzZSAoNiA8PCAyKTogICAgZnJlcSAvPSA0OyBicmVhazsKKwlkZWZhdWx0OiAgICAgICAgcmV0dXJuIDA7ICAgLyogZXJyb3IgKi8KKwl9CisKKwkvKiBhanVzdGVtZW50ICovCisJc3dpdGNoIChjb2RlZCAmIDB4NjApIHsKKwljYXNlICgwIDw8IDUpOiAgICBicmVhazsKKwljYXNlICgxIDw8IDUpOiAgICBmcmVxID0gKGZyZXEgKiA5OTkpIC8gMTAwMDsgYnJlYWs7CisJY2FzZSAoMiA8PCA1KTogICAgZnJlcSA9IChmcmVxICogMTAwMSkgLyAxMDAwOyBicmVhazsKKwlkZWZhdWx0OiAgICAgICAgcmV0dXJuIDA7ICAgLyogZXJyb3IgKi8KKwl9CisJcmV0dXJuIGZyZXE7Cit9CisKKy8qCisgKiBHcmFudWFscml0eQorICovCisKKyNkZWZpbmUgTE9MQV9NQVhGUkVRX0FUX0dSQU5VTEFSSVRZX01JTiAgICAgICAgIDQ4MDAwCisjZGVmaW5lIExPTEFfTUFYRlJFUV9BVF9HUkFOVUxBUklUWV9CRUxPV19NQVggICA5NjAwMAorCitzdGF0aWMgYm9vbCBjaGVja19ncmFuX2Nsb2NrX2NvbXBhdGliaWxpdHkoc3RydWN0IGxvbGEgKmNoaXAsCisJCQkJCSAgIHVuc2lnbmVkIGludCB2YWwsCisJCQkJCSAgIHVuc2lnbmVkIGludCBmcmVxKQoreworCWlmICghY2hpcC0+Z3JhbnVsYXJpdHkpCisJCXJldHVybiB0cnVlOworCisJaWYgKHZhbCA8IExPTEFfR1JBTlVMQVJJVFlfTUlOIHx8IHZhbCA+IExPTEFfR1JBTlVMQVJJVFlfTUFYIHx8CisJICAgICh2YWwgJSBMT0xBX0dSQU5VTEFSSVRZX1NURVApICE9IDApCisJCXJldHVybiBmYWxzZTsKKworCWlmICh2YWwgPT0gTE9MQV9HUkFOVUxBUklUWV9NSU4pIHsKKwkJaWYgKGZyZXEgPiBMT0xBX01BWEZSRVFfQVRfR1JBTlVMQVJJVFlfTUlOKQorCQkJcmV0dXJuIGZhbHNlOworCX0gZWxzZSBpZiAodmFsIDwgTE9MQV9HUkFOVUxBUklUWV9NQVgpIHsKKwkJaWYgKGZyZXEgPiBMT0xBX01BWEZSRVFfQVRfR1JBTlVMQVJJVFlfQkVMT1dfTUFYKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworaW50IGxvbGFfc2V0X2dyYW51bGFyaXR5KHN0cnVjdCBsb2xhICpjaGlwLCB1bnNpZ25lZCBpbnQgdmFsLCBib29sIGZvcmNlKQoreworCWludCBlcnI7CisKKwlpZiAoIWZvcmNlKSB7CisJCWlmICh2YWwgPT0gY2hpcC0+Z3JhbnVsYXJpdHkpCisJCQlyZXR1cm4gMDsKKyNpZiAwCisJCS8qIGNoYW5nZSBHcmFuIG9ubHkgaWYgdGhlcmUgYXJlIG5vIHN0cmVhbXMgYWxsb2NhdGVkICEgKi8KKwkJaWYgKGNoaXAtPmF1ZGlvX2luX2FsbG9jX21hc2sgfHwgY2hpcC0+YXVkaW9fb3V0X2FsbG9jX21hc2spCisJCQlyZXR1cm4gLUVCVVNZOworI2VuZGlmCisJCWlmICghY2hlY2tfZ3Jhbl9jbG9ja19jb21wYXRpYmlsaXR5KGNoaXAsIHZhbCwKKwkJCQkJCSAgICBjaGlwLT5jbG9jay5jdXJfZnJlcSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljaGlwLT5ncmFudWxhcml0eSA9IHZhbDsKKwl2YWwgLz0gTE9MQV9HUkFOVUxBUklUWV9TVEVQOworCisJLyogYXVkaW8gZnVuY3Rpb24gZ3JvdXAgKi8KKwllcnIgPSBsb2xhX2NvZGVjX3dyaXRlKGNoaXAsIDEsIExPTEFfVkVSQl9TRVRfR1JBTlVMQVJJVFlfU1RFUFMsCisJCQkgICAgICAgdmFsLCAwKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwkvKiB0aGlzIGNhbiBiZSBhIHZlcnkgc2xvdyBmdW5jdGlvbiAhISEgKi8KKwl1c2xlZXBfcmFuZ2UoNDAwICogdmFsLCAyMDAwMCk7CisJcmV0dXJuIGxvbGFfY29kZWNfZmx1c2goY2hpcCk7Cit9CisKKy8qCisgKiBDbG9jayB3aWRnZXQgaGFuZGxpbmcKKyAqLworCitpbnQgX19kZXZpbml0IGxvbGFfaW5pdF9jbG9ja193aWRnZXQoc3RydWN0IGxvbGEgKmNoaXAsIGludCBuaWQpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKwlpbnQgaSwgaiwgbml0ZW1zLCBuYl92ZXJicywgaWR4LCBpZHhfbGlzdDsKKwlpbnQgZXJyOworCisJZXJyID0gbG9sYV9yZWFkX3BhcmFtKGNoaXAsIG5pZCwgTE9MQV9QQVJfQVVESU9fV0lER0VUX0NBUCwgJnZhbCk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFNGWCAiQ2FuJ3QgcmVhZCB3Y2FwcyBmb3IgMHgleFxuIiwgbmlkKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAoKHZhbCAmIDB4ZmZmMDAwMDApICE9IDB4MDFmMDAwMDApIHsgLyogdGVzdCBTdWJUeXBlIGFuZCBUeXBlICovCisJCXNuZF9wcmludGRkKCJObyB2YWxpZCBjbG9jayB3aWRnZXRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwljaGlwLT5jbG9jay5uaWQgPSBuaWQ7CisJY2hpcC0+Y2xvY2suaXRlbXMgPSB2YWwgJiAweGZmOworCXNuZF9wcmludGRkKCJjbG9ja19saXN0IG5pZD0leCwgZW50cmllcz0lZFxuIiwgbmlkLAorCQkgICAgY2hpcC0+Y2xvY2suaXRlbXMpOworCWlmIChjaGlwLT5jbG9jay5pdGVtcyA+IE1BWF9TQU1QTEVfQ0xPQ0tfQ09VTlQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFNGWCAiQ0xPQ0tfTElTVCB0b28gYmlnOiAlZFxuIiwKKwkJICAgICAgIGNoaXAtPmNsb2NrLml0ZW1zKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbml0ZW1zID0gY2hpcC0+Y2xvY2suaXRlbXM7CisJbmJfdmVyYnMgPSAobml0ZW1zICsgMykgLyA0OworCWlkeCA9IDA7CisJaWR4X2xpc3QgPSAwOworCWZvciAoaSA9IDA7IGkgPCBuYl92ZXJiczsgaSsrKSB7CisJCXVuc2lnbmVkIGludCByZXNfZXg7CisJCXVuc2lnbmVkIHNob3J0IGl0ZW1zWzRdOworCisJCWVyciA9IGxvbGFfY29kZWNfcmVhZChjaGlwLCBuaWQsIExPTEFfVkVSQl9HRVRfQ0xPQ0tfTElTVCwKKwkJCQkgICAgICBpZHgsIDAsICZ2YWwsICZyZXNfZXgpOworCQlpZiAoZXJyIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSIFNGWCAiQ2FuJ3QgcmVhZCBDTE9DS19MSVNUXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaXRlbXNbMF0gPSB2YWwgJiAweGZmZjsKKwkJaXRlbXNbMV0gPSAodmFsID4+IDE2KSAmIDB4ZmZmOworCQlpdGVtc1syXSA9IHJlc19leCAmIDB4ZmZmOworCQlpdGVtc1szXSA9IChyZXNfZXggPj4gMTYpICYgMHhmZmY7CisKKwkJZm9yIChqID0gMDsgaiA8IDQ7IGorKykgeworCQkJdW5zaWduZWQgY2hhciB0eXBlID0gaXRlbXNbal0gPj4gODsKKwkJCXVuc2lnbmVkIGludCBmcmVxID0gaXRlbXNbal0gJiAweGZmOworCQkJaW50IGZvcm1hdCA9IExPTEFfQ0xPQ0tfRk9STUFUX05PTkU7CisJCQlib29sIGFkZF9jbG9jayA9IHRydWU7CisJCQlpZiAodHlwZSA9PSBMT0xBX0NMT0NLX1RZUEVfSU5URVJOQUwpIHsKKwkJCQlmcmVxID0gbG9sYV9zYW1wbGVfcmF0ZV9jb252ZXJ0KGZyZXEpOworCQkJCWlmIChmcmVxIDwgY2hpcC0+c2FtcGxlX3JhdGVfbWluKQorCQkJCQlhZGRfY2xvY2sgPSBmYWxzZTsKKwkJCQllbHNlIGlmIChmcmVxID09IDQ4MDAwKSB7CisJCQkJCWNoaXAtPmNsb2NrLmN1cl9pbmRleCA9IGlkeF9saXN0OworCQkJCQljaGlwLT5jbG9jay5jdXJfZnJlcSA9IDQ4MDAwOworCQkJCQljaGlwLT5jbG9jay5jdXJfdmFsaWQgPSB0cnVlOworCQkJCX0KKwkJCX0gZWxzZSBpZiAodHlwZSA9PSBMT0xBX0NMT0NLX1RZUEVfVklERU8pIHsKKwkJCQlmcmVxID0gbG9sYV9zYW1wbGVfcmF0ZV9jb252ZXJ0KGZyZXEpOworCQkJCWlmIChmcmVxIDwgY2hpcC0+c2FtcGxlX3JhdGVfbWluKQorCQkJCQlhZGRfY2xvY2sgPSBmYWxzZTsKKwkJCQkvKiB2aWRlbyBjbG9jayBoYXMgYSBmb3JtYXQgKDA6TlRTQywgMTpQQUwpKi8KKwkJCQlpZiAoaXRlbXNbal0gJiAweDgwKQorCQkJCQlmb3JtYXQgPSBMT0xBX0NMT0NLX0ZPUk1BVF9OVFNDOworCQkJCWVsc2UKKwkJCQkJZm9ybWF0ID0gTE9MQV9DTE9DS19GT1JNQVRfUEFMOworCQkJfQorCQkJaWYgKGFkZF9jbG9jaykgeworCQkJCXN0cnVjdCBsb2xhX3NhbXBsZV9jbG9jayAqc2M7CisJCQkJc2MgPSAmY2hpcC0+Y2xvY2suc2FtcGxlX2Nsb2NrW2lkeF9saXN0XTsKKwkJCQlzYy0+dHlwZSA9IHR5cGU7CisJCQkJc2MtPmZvcm1hdCA9IGZvcm1hdDsKKwkJCQlzYy0+ZnJlcSA9IGZyZXE7CisJCQkJLyoga2VlcCB0aGUgaW5kZXggdXNlZCB3aXRoIHRoZSBib2FyZCAqLworCQkJCWNoaXAtPmNsb2NrLmlkeF9sb29rdXBbaWR4X2xpc3RdID0gaWR4OworCQkJCWlkeF9saXN0Kys7CisJCQl9IGVsc2UgeworCQkJCWNoaXAtPmNsb2NrLml0ZW1zLS07CisJCQl9CisJCQlpZiAoKytpZHggPj0gbml0ZW1zKQorCQkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiAwOworfQorCisvKiBlbmFibGUgdW5zb2xpY2l0ZWQgZXZlbnRzIG9mIHRoZSBjbG9jayB3aWRnZXQgKi8KK2ludCBsb2xhX2VuYWJsZV9jbG9ja19ldmVudHMoc3RydWN0IGxvbGEgKmNoaXApCit7CisJdW5zaWduZWQgaW50IHJlczsKKwlpbnQgZXJyOworCisJZXJyID0gbG9sYV9jb2RlY19yZWFkKGNoaXAsIGNoaXAtPmNsb2NrLm5pZCwKKwkJCSAgICAgIExPTEFfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLAorCQkJICAgICAgTE9MQV9VTlNPTElDSVRFRF9FTkFCTEUgfCBMT0xBX1VOU09MSUNJVEVEX1RBRywKKwkJCSAgICAgIDAsICZyZXMsIE5VTEwpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWlmIChyZXMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBTRlggImVycm9yIGluIGVuYWJsZV9jbG9ja19ldmVudHMgJWRcbiIsCisJCSAgICAgICByZXMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBsb2xhX3NldF9jbG9ja19pbmRleChzdHJ1Y3QgbG9sYSAqY2hpcCwgdW5zaWduZWQgaW50IGlkeCkKK3sKKwl1bnNpZ25lZCBpbnQgcmVzOworCWludCBlcnI7CisKKwllcnIgPSBsb2xhX2NvZGVjX3JlYWQoY2hpcCwgY2hpcC0+Y2xvY2submlkLAorCQkJICAgICAgTE9MQV9WRVJCX1NFVF9DTE9DS19TRUxFQ1QsCisJCQkgICAgICBjaGlwLT5jbG9jay5pZHhfbG9va3VwW2lkeF0sCisJCQkgICAgICAwLCAmcmVzLCBOVUxMKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlpZiAocmVzKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgU0ZYICJlcnJvciBpbiBzZXRfY2xvY2sgJWRcbiIsIHJlcyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworYm9vbCBsb2xhX3VwZGF0ZV9leHRfY2xvY2tfZnJlcShzdHJ1Y3QgbG9sYSAqY2hpcCwgdW5zaWduZWQgaW50IHZhbCkKK3sKKwl1bnNpZ25lZCBpbnQgdGFnOworCisJLyogdGhlIGN1cnJlbnQgRVhURVJOQUwgY2xvY2sgaW5mb3JtYXRpb24gZ2V0cyB1cGRhdGVkIGJ5IGludGVycnVwdAorCSAqIHdpdGggYW4gdW5zb2xpY2l0ZWQgcmVzcG9uc2UKKwkgKi8KKwlpZiAoIXZhbCkKKwkJcmV0dXJuIGZhbHNlOworCXRhZyA9ICh2YWwgPj4gTE9MQV9VTlNPTF9SRVNQX1RBR19PRkZTRVQpICYgTE9MQV9VTlNPTElDSVRFRF9UQUdfTUFTSzsKKwlpZiAodGFnICE9IExPTEFfVU5TT0xJQ0lURURfVEFHKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBvbmx5IGZvciBjdXJyZW50ID0gZXh0ZXJuYWwgY2xvY2tzICovCisJaWYgKGNoaXAtPmNsb2NrLnNhbXBsZV9jbG9ja1tjaGlwLT5jbG9jay5jdXJfaW5kZXhdLnR5cGUgIT0KKwkgICAgTE9MQV9DTE9DS19UWVBFX0lOVEVSTkFMKSB7CisJCWNoaXAtPmNsb2NrLmN1cl9mcmVxID0gbG9sYV9zYW1wbGVfcmF0ZV9jb252ZXJ0KHZhbCAmIDB4N2YpOworCQljaGlwLT5jbG9jay5jdXJfdmFsaWQgPSAodmFsICYgMHgxMDApICE9IDA7CisJfQorCXJldHVybiB0cnVlOworfQorCitpbnQgbG9sYV9zZXRfY2xvY2soc3RydWN0IGxvbGEgKmNoaXAsIGludCBpZHgpCit7CisJaW50IGZyZXEgPSAwOworCWJvb2wgdmFsaWQgPSBmYWxzZTsKKworCWlmIChpZHggPT0gY2hpcC0+Y2xvY2suY3VyX2luZGV4KSB7CisJCS8qIGN1cnJlbnQgY2xvY2sgaXMgYWxsb3dlZCAqLworCQlmcmVxID0gY2hpcC0+Y2xvY2suY3VyX2ZyZXE7CisJCXZhbGlkID0gY2hpcC0+Y2xvY2suY3VyX3ZhbGlkOworCX0gZWxzZSBpZiAoY2hpcC0+Y2xvY2suc2FtcGxlX2Nsb2NrW2lkeF0udHlwZSA9PQorCQkgICBMT0xBX0NMT0NLX1RZUEVfSU5URVJOQUwpIHsKKwkJLyogaW50ZXJuYWwgY2xvY2tzIGFsbG93ZWQgKi8KKwkJZnJlcSA9IGNoaXAtPmNsb2NrLnNhbXBsZV9jbG9ja1tpZHhdLmZyZXE7CisJCXZhbGlkID0gdHJ1ZTsKKwl9CisKKwlpZiAoIWZyZXEgfHwgIXZhbGlkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghY2hlY2tfZ3Jhbl9jbG9ja19jb21wYXRpYmlsaXR5KGNoaXAsIGNoaXAtPmdyYW51bGFyaXR5LCBmcmVxKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoaWR4ICE9IGNoaXAtPmNsb2NrLmN1cl9pbmRleCkgeworCQlpbnQgZXJyID0gbG9sYV9zZXRfY2xvY2tfaW5kZXgoY2hpcCwgaWR4KTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQkvKiB1cGRhdGUgbmV3IHNldHRpbmdzICovCisJCWNoaXAtPmNsb2NrLmN1cl9pbmRleCA9IGlkeDsKKwkJY2hpcC0+Y2xvY2suY3VyX2ZyZXEgPSBmcmVxOworCQljaGlwLT5jbG9jay5jdXJfdmFsaWQgPSB0cnVlOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGxvbGFfc2V0X3NhbXBsZV9yYXRlKHN0cnVjdCBsb2xhICpjaGlwLCBpbnQgcmF0ZSkKK3sKKwlpbnQgaTsKKworCWlmIChjaGlwLT5jbG9jay5jdXJfZnJlcSA9PSByYXRlICYmIGNoaXAtPmNsb2NrLmN1cl92YWxpZCkKKwkJcmV0dXJuIDA7CisJLyogc2VhcmNoIGZvciBuZXcgZHdDbG9ja0luZGV4ICovCisJZm9yIChpID0gMDsgaSA8IGNoaXAtPmNsb2NrLml0ZW1zOyBpKyspIHsKKwkJaWYgKGNoaXAtPmNsb2NrLnNhbXBsZV9jbG9ja1tpXS50eXBlID09IExPTEFfQ0xPQ0tfVFlQRV9JTlRFUk5BTCAmJgorCQkgICAgY2hpcC0+Y2xvY2suc2FtcGxlX2Nsb2NrW2ldLmZyZXEgPT0gcmF0ZSkKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA+PSBjaGlwLT5jbG9jay5pdGVtcykKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGxvbGFfc2V0X2Nsb2NrKGNoaXAsIGkpOworfQorCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvbG9sYS9sb2xhX21peGVyLmMgYi9zb3VuZC9wY2kvbG9sYS9sb2xhX21peGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ1MThmMQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9sb2xhL2xvbGFfbWl4ZXIuYwpAQCAtMCwwICsxLDgzOSBAQAorLyoKKyAqICBTdXBwb3J0IGZvciBEaWdpZ3JhbSBMb2xhIFBDSS1lIGJvYXJkcworICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTEgVGFrYXNoaSBJd2FpIDx0aXdhaUBzdXNlLmRlPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisgKiAgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorI2luY2x1ZGUgImxvbGEuaCIKKworc3RhdGljIGludCBfX2RldmluaXQgbG9sYV9pbml0X3BpbihzdHJ1Y3QgbG9sYSAqY2hpcCwgc3RydWN0IGxvbGFfcGluICpwaW4sCisJCQkJICAgaW50IGRpciwgaW50IG5pZCkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCWludCBlcnI7CisKKwlwaW4tPm5pZCA9IG5pZDsKKwllcnIgPSBsb2xhX3JlYWRfcGFyYW0oY2hpcCwgbmlkLCBMT0xBX1BBUl9BVURJT19XSURHRVRfQ0FQLCAmdmFsKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgU0ZYICJDYW4ndCByZWFkIHdjYXBzIGZvciAweCV4XG4iLCBuaWQpOworCQlyZXR1cm4gZXJyOworCX0KKwl2YWwgJj0gMHgwMGYwMGZmZjsgLyogdGVzdCBUWVBFIGFuZCBiaXRzIDAuLjExICovCisJaWYgKHZhbCA9PSAweDAwNDAwMjAwKSAgICAvKiBUeXBlID0gNCwgRGlnaXRhbCA9IDEgKi8KKwkJcGluLT5pc19hbmFsb2cgPSBmYWxzZTsKKwllbHNlIGlmICh2YWwgPT0gMHgwMDQwMDAwYSAmJiBkaXIgPT0gQ0FQVCkgLyogRGlnPTAsIEluQW1wL292cmQgKi8KKwkJcGluLT5pc19hbmFsb2cgPSB0cnVlOworCWVsc2UgaWYgKHZhbCA9PSAweDAwNDAwMDBjICYmIGRpciA9PSBQTEFZKSAvKiBEaWc9MCwgT3V0QW1wL292cmQgKi8KKwkJcGluLT5pc19hbmFsb2cgPSB0cnVlOworCWVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgU0ZYICJJbnZhbGlkIHdjYXBzIDB4JXggZm9yIDB4JXhcbiIsIHZhbCwgbmlkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogYW5hbG9nIHBhcmFtZXRlcnMgb25seSBmb2xsb3dpbmcsIHNvIGNvbnRpbnVlIGluIGNhc2Ugb2YgRGlnaXRhbCBwaW4KKwkgKi8KKwlpZiAoIXBpbi0+aXNfYW5hbG9nKQorCQlyZXR1cm4gMDsKKworCWlmIChkaXIgPT0gUExBWSkKKwkJZXJyID0gbG9sYV9yZWFkX3BhcmFtKGNoaXAsIG5pZCwgTE9MQV9QQVJfQU1QX09VVF9DQVAsICZ2YWwpOworCWVsc2UKKwkJZXJyID0gbG9sYV9yZWFkX3BhcmFtKGNoaXAsIG5pZCwgTE9MQV9QQVJfQU1QX0lOX0NBUCwgJnZhbCk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFNGWCAiQ2FuJ3QgcmVhZCBBTVAtY2FwcyBmb3IgMHgleFxuIiwgbmlkKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlwaW4tPmFtcF9tdXRlID0gTE9MQV9BTVBfTVVURV9DQVBBQkxFKHZhbCk7CisJcGluLT5hbXBfc3RlcF9zaXplID0gTE9MQV9BTVBfU1RFUF9TSVpFKHZhbCk7CisJcGluLT5hbXBfbnVtX3N0ZXBzID0gTE9MQV9BTVBfTlVNX1NURVBTKHZhbCk7CisJaWYgKHBpbi0+YW1wX251bV9zdGVwcykgeworCQkvKiB6ZXJvIGFzIG11dGUgc3RhdGUgKi8KKwkJcGluLT5hbXBfbnVtX3N0ZXBzKys7CisJCXBpbi0+YW1wX3N0ZXBfc2l6ZSsrOworCX0KKwlwaW4tPmFtcF9vZmZzZXQgPSBMT0xBX0FNUF9PRkZTRVQodmFsKTsKKworCWVyciA9IGxvbGFfY29kZWNfcmVhZChjaGlwLCBuaWQsIExPTEFfVkVSQl9HRVRfTUFYX0xFVkVMLCAwLCAwLCAmdmFsLAorCQkJICAgICAgTlVMTCk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFNGWCAiQ2FuJ3QgZ2V0IE1BWF9MRVZFTCAweCV4XG4iLCBuaWQpOworCQlyZXR1cm4gZXJyOworCX0KKwlwaW4tPm1heF9sZXZlbCA9IHZhbCAmIDB4M2ZmOyAgIC8qIDEwIGJpdHMgKi8KKworCXBpbi0+Y29uZmlnX2RlZmF1bHRfcmVnID0gMDsKKwlwaW4tPmZpeGVkX2dhaW5fbGlzdF9sZW4gPSAwOworCXBpbi0+Y3VyX2dhaW5fc3RlcCA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworaW50IF9fZGV2aW5pdCBsb2xhX2luaXRfcGlucyhzdHJ1Y3QgbG9sYSAqY2hpcCwgaW50IGRpciwgaW50ICpuaWRwKQoreworCWludCBpLCBlcnIsIG5pZDsKKwluaWQgPSAqbmlkcDsKKwlmb3IgKGkgPSAwOyBpIDwgY2hpcC0+cGluW2Rpcl0ubnVtX3BpbnM7IGkrKywgbmlkKyspIHsKKwkJZXJyID0gbG9sYV9pbml0X3BpbihjaGlwLCAmY2hpcC0+cGluW2Rpcl0ucGluc1tpXSwgZGlyLCBuaWQpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJCWlmIChjaGlwLT5waW5bZGlyXS5waW5zW2ldLmlzX2FuYWxvZykKKwkJCWNoaXAtPnBpbltkaXJdLm51bV9hbmFsb2dfcGlucysrOworCX0KKwkqbmlkcCA9IG5pZDsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBsb2xhX2ZyZWVfbWl4ZXIoc3RydWN0IGxvbGEgKmNoaXApCit7CisJaWYgKGNoaXAtPm1peGVyLmFycmF5X3NhdmVkKQorCQl2ZnJlZShjaGlwLT5taXhlci5hcnJheV9zYXZlZCk7Cit9CisKK2ludCBfX2RldmluaXQgbG9sYV9pbml0X21peGVyX3dpZGdldChzdHJ1Y3QgbG9sYSAqY2hpcCwgaW50IG5pZCkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCWludCBlcnI7CisKKwllcnIgPSBsb2xhX3JlYWRfcGFyYW0oY2hpcCwgbmlkLCBMT0xBX1BBUl9BVURJT19XSURHRVRfQ0FQLCAmdmFsKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgU0ZYICJDYW4ndCByZWFkIHdjYXBzIGZvciAweCV4XG4iLCBuaWQpOworCQlyZXR1cm4gZXJyOworCX0KKworCWlmICgodmFsICYgMHhmZmYwMDAwMCkgIT0gMHgwMmYwMDAwMCkgeyAvKiB0ZXN0IFN1YlR5cGUgYW5kIFR5cGUgKi8KKwkJc25kX3ByaW50ZGQoIk5vIHZhbGlkIG1peGVyIHdpZGdldFxuIik7CisJCXJldHVybiAwOworCX0KKworCWNoaXAtPm1peGVyLm5pZCA9IG5pZDsKKwljaGlwLT5taXhlci5jYXBzID0gdmFsOworCWNoaXAtPm1peGVyLmFycmF5ID0gKHN0cnVjdCBsb2xhX21peGVyX2FycmF5IF9faW9tZW0gKikKKwkJKGNoaXAtPmJhcltCQVIxXS5yZW1hcF9hZGRyICsgTE9MQV9CQVIxX1NPVVJDRV9HQUlOX0VOQUJMRSk7CisKKwkvKiByZXNlcnZlIG1lbW9yeSB0byBjb3B5IG1peGVyIGRhdGEgZm9yIHNsZWVwIG1vZGUgdHJhbnNpdGlvbnMgKi8KKwljaGlwLT5taXhlci5hcnJheV9zYXZlZCA9IHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCBsb2xhX21peGVyX2FycmF5KSk7CisKKwkvKiBtaXhlciBtYXRyaXggc291cmNlcyBhcmUgcGh5c2ljYWwgaW5wdXQgZGF0YSBhbmQgcGxheSBzdHJlYW1zICovCisJY2hpcC0+bWl4ZXIuc3JjX3N0cmVhbV9vdXRzID0gY2hpcC0+cGNtW1BMQVldLm51bV9zdHJlYW1zOworCWNoaXAtPm1peGVyLnNyY19waHlzX2lucyA9IGNoaXAtPnBpbltDQVBUXS5udW1fcGluczsKKworCS8qIG1peGVyIG1hdHJpeCBkZXN0aW5hdGlvbnMgYXJlIHJlY29yZCBzdHJlYW1zIGFuZCBwaHlzaWNhbCBvdXRwdXQgKi8KKwljaGlwLT5taXhlci5kZXN0X3N0cmVhbV9pbnMgPSBjaGlwLT5wY21bQ0FQVF0ubnVtX3N0cmVhbXM7CisJY2hpcC0+bWl4ZXIuZGVzdF9waHlzX291dHMgPSBjaGlwLT5waW5bUExBWV0ubnVtX3BpbnM7CisKKwkvKiBtaXhlciBtYXRyaXggY2FuIGhhdmUgdW51c2VkIGFyZWFzIGJldHdlZW4gUGh5c0luIGFuZAorCSAqIFBsYXkgb3IgUmVjb3JkIGFuZCBQaHlzT3V0IHpvbmVzCisJICovCisJY2hpcC0+bWl4ZXIuc3JjX3N0cmVhbV9vdXRfb2ZzID0gY2hpcC0+bWl4ZXIuc3JjX3BoeXNfaW5zICsKKwkJTE9MQV9NSVhFUl9TUkNfSU5QVVRfUExBWV9TRVBBUkFUSU9OKHZhbCk7CisJY2hpcC0+bWl4ZXIuZGVzdF9waHlzX291dF9vZnMgPSBjaGlwLT5taXhlci5kZXN0X3N0cmVhbV9pbnMgKworCQlMT0xBX01JWEVSX0RFU1RfUkVDX09VVFBVVF9TRVBBVEFUSU9OKHZhbCk7CisKKwkvKiBleGFtcGxlIDogTWl4ZXJNYXRyaXggb2YgTG9MYTg4MQorCSAqIDAtLS0tLS0tOC0tLS0tLTE2LS0tLS0tLTgtLS0tLS0xNgorCSAqIHwgICAgICAgfCAgICAgICB8ICAgICAgIHwgICAgICAgfAorCSAqIHwgSU5QVVQgfCAgICAgICB8IElOUFVUIHwgICAgICAgfAorCSAqIHwgLT4gICAgfHVudXNlZCB8IC0+ICAgIHx1bnVzZWQgfAorCSAqIHwgUkVDT1JEfCAgICAgICB8IE9VVFBVVHwgICAgICAgfAorCSAqIHwgICAgICAgfCAgICAgICB8ICAgICAgIHwgICAgICAgfAorCSAqIDgtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqIHwgICAgICAgfCAgICAgICB8ICAgICAgIHwgICAgICAgfAorCSAqIHwgICAgICAgfCAgICAgICB8ICAgICAgIHwgICAgICAgfAorCSAqIHx1bnVzZWQgfHVudXNlZCB8dW51c2VkIHx1bnVzZWQgfAorCSAqIHwgICAgICAgfCAgICAgICB8ICAgICAgIHwgICAgICAgfAorCSAqIHwgICAgICAgfCAgICAgICB8ICAgICAgIHwgICAgICAgfAorCSAqIDE2LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqIHwgICAgICAgfCAgICAgICB8ICAgICAgIHwgICAgICAgfAorCSAqIHwgUExBWSAgfCAgICAgICB8IFBMQVkgIHwgICAgICAgfAorCSAqIHwgIC0+ICAgfHVudXNlZCB8IC0+ICAgIHx1bnVzZWQgfAorCSAqIHwgUkVDT1JEfCAgICAgICB8IE9VVFBVVHwgICAgICAgfAorCSAqIHwgICAgICAgfCAgICAgICB8ICAgICAgIHwgICAgICAgfAorCSAqIDgtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqIHwgICAgICAgfCAgICAgICB8ICAgICAgIHwgICAgICAgfAorCSAqIHwgICAgICAgfCAgICAgICB8ICAgICAgIHwgICAgICAgfAorCSAqIHx1bnVzZWQgfHVudXNlZCB8dW51c2VkIHx1bnVzZWQgfAorCSAqIHwgICAgICAgfCAgICAgICB8ICAgICAgIHwgICAgICAgfAorCSAqIHwgICAgICAgfCAgICAgICB8ICAgICAgIHwgICAgICAgfAorCSAqIDE2LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqLworCWlmIChjaGlwLT5taXhlci5zcmNfc3RyZWFtX291dF9vZnMgPiBNQVhfQVVESU9fSU5PVVRfQ09VTlQgfHwKKwkgICAgY2hpcC0+bWl4ZXIuZGVzdF9waHlzX291dF9vZnMgPiBNQVhfU1RSRUFNX0lOX0NPVU5UKSB7CisJCXByaW50ayhLRVJOX0VSUiBTRlggIkludmFsaWQgbWl4ZXIgd2lkZ2V0IHNpemVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljaGlwLT5taXhlci5zcmNfbWFzayA9ICgoMVUgPDwgY2hpcC0+bWl4ZXIuc3JjX3BoeXNfaW5zKSAtIDEpIHwKKwkJKCgoMVUgPDwgY2hpcC0+bWl4ZXIuc3JjX3N0cmVhbV9vdXRzKSAtIDEpCisJCSA8PCBjaGlwLT5taXhlci5zcmNfc3RyZWFtX291dF9vZnMpOworCWNoaXAtPm1peGVyLmRlc3RfbWFzayA9ICgoMVUgPDwgY2hpcC0+bWl4ZXIuZGVzdF9zdHJlYW1faW5zKSAtIDEpIHwKKwkJKCgoMVUgPDwgY2hpcC0+bWl4ZXIuZGVzdF9waHlzX291dHMpIC0gMSkKKwkJIDw8IGNoaXAtPm1peGVyLmRlc3RfcGh5c19vdXRfb2ZzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvbGFfbWl4ZXJfc2V0X3NyY19nYWluKHN0cnVjdCBsb2xhICpjaGlwLCB1bnNpZ25lZCBpbnQgaWQsCisJCQkJICAgdW5zaWduZWQgc2hvcnQgZ2FpbiwgYm9vbCBvbikKK3sKKwl1bnNpZ25lZCBpbnQgb2xkdmFsLCB2YWw7CisKKwlpZiAoIShjaGlwLT5taXhlci5zcmNfbWFzayAmICgxIDw8IGlkKSkpCisJCXJldHVybiAtRUlOVkFMOworCXdyaXRldyhnYWluLCAmY2hpcC0+bWl4ZXIuYXJyYXktPnNyY19nYWluW2lkXSk7CisJb2xkdmFsID0gdmFsID0gcmVhZGwoJmNoaXAtPm1peGVyLmFycmF5LT5zcmNfZ2Fpbl9lbmFibGUpOworCWlmIChvbikKKwkJdmFsIHw9ICgxIDw8IGlkKTsKKwllbHNlCisJCXZhbCAmPSB+KDEgPDwgaWQpOworCXdyaXRlbCh2YWwsICZjaGlwLT5taXhlci5hcnJheS0+c3JjX2dhaW5fZW5hYmxlKTsKKwlsb2xhX2NvZGVjX2ZsdXNoKGNoaXApOworCS8qIGluZm9ybSBtaWNyby1jb250cm9sbGVyIGFib3V0IHRoZSBuZXcgc291cmNlIGdhaW4gKi8KKwlyZXR1cm4gbG9sYV9jb2RlY193cml0ZShjaGlwLCBjaGlwLT5taXhlci5uaWQsCisJCQkJTE9MQV9WRVJCX1NFVF9TT1VSQ0VfR0FJTiwgaWQsIDApOworfQorCisjaWYgMCAvKiBub3QgdXNlZCAqLworc3RhdGljIGludCBsb2xhX21peGVyX3NldF9zcmNfZ2FpbnMoc3RydWN0IGxvbGEgKmNoaXAsIHVuc2lnbmVkIGludCBtYXNrLAorCQkJCSAgICB1bnNpZ25lZCBzaG9ydCAqZ2FpbnMpCit7CisJaW50IGk7CisKKwlpZiAoKGNoaXAtPm1peGVyLnNyY19tYXNrICYgbWFzaykgIT0gbWFzaykKKwkJcmV0dXJuIC1FSU5WQUw7CisJZm9yIChpID0gMDsgaSA8IExPTEFfTUlYRVJfRElNOyBpKyspIHsKKwkJaWYgKG1hc2sgJiAoMSA8PCBpKSkgeworCQkJd3JpdGV3KCpnYWlucywgJmNoaXAtPm1peGVyLmFycmF5LT5zcmNfZ2FpbltpXSk7CisJCQlnYWlucysrOworCQl9CisJfQorCXdyaXRlbChtYXNrLCAmY2hpcC0+bWl4ZXIuYXJyYXktPnNyY19nYWluX2VuYWJsZSk7CisJbG9sYV9jb2RlY19mbHVzaChjaGlwKTsKKwlpZiAoY2hpcC0+bWl4ZXIuY2FwcyAmIExPTEFfUEVBS19NRVRFUl9DQU5fQUdDX01BU0spIHsKKwkJLyogdXBkYXRlIGZvciBhbGwgc3JjcyBhdCBvbmNlICovCisJCXJldHVybiBsb2xhX2NvZGVjX3dyaXRlKGNoaXAsIGNoaXAtPm1peGVyLm5pZCwKKwkJCQkJTE9MQV9WRVJCX1NFVF9TT1VSQ0VfR0FJTiwgMHg4MCwgMCk7CisJfQorCS8qIHVwZGF0ZSBtYW51YWxseSAqLworCWZvciAoaSA9IDA7IGkgPCBMT0xBX01JWEVSX0RJTTsgaSsrKSB7CisJCWlmIChtYXNrICYgKDEgPDwgaSkpIHsKKwkJCWxvbGFfY29kZWNfd3JpdGUoY2hpcCwgY2hpcC0+bWl4ZXIubmlkLAorCQkJCQkgTE9MQV9WRVJCX1NFVF9TT1VSQ0VfR0FJTiwgaSwgMCk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogbm90IHVzZWQgKi8KKworc3RhdGljIGludCBsb2xhX21peGVyX3NldF9tYXBwaW5nX2dhaW4oc3RydWN0IGxvbGEgKmNoaXAsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBzcmMsIHVuc2lnbmVkIGludCBkZXN0LAorCQkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBnYWluLCBib29sIG9uKQoreworCXVuc2lnbmVkIGludCB2YWw7CisKKwlpZiAoIShjaGlwLT5taXhlci5zcmNfbWFzayAmICgxIDw8IHNyYykpIHx8CisJICAgICEoY2hpcC0+bWl4ZXIuZGVzdF9tYXNrICYgKDEgPDwgZGVzdCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAob24pCisJCXdyaXRldyhnYWluLCAmY2hpcC0+bWl4ZXIuYXJyYXktPmRlc3RfbWl4X2dhaW5bZGVzdF1bc3JjXSk7CisJdmFsID0gcmVhZGwoJmNoaXAtPm1peGVyLmFycmF5LT5kZXN0X21peF9nYWluX2VuYWJsZVtkZXN0XSk7CisJaWYgKG9uKQorCQl2YWwgfD0gKDEgPDwgc3JjKTsKKwllbHNlCisJCXZhbCAmPSB+KDEgPDwgc3JjKTsKKwl3cml0ZWwodmFsLCAmY2hpcC0+bWl4ZXIuYXJyYXktPmRlc3RfbWl4X2dhaW5fZW5hYmxlW2Rlc3RdKTsKKwlsb2xhX2NvZGVjX2ZsdXNoKGNoaXApOworCXJldHVybiBsb2xhX2NvZGVjX3dyaXRlKGNoaXAsIGNoaXAtPm1peGVyLm5pZCwgTE9MQV9WRVJCX1NFVF9NSVhfR0FJTiwKKwkJCQlzcmMsIGRlc3QpOworfQorCitzdGF0aWMgaW50IGxvbGFfbWl4ZXJfc2V0X2Rlc3RfZ2FpbnMoc3RydWN0IGxvbGEgKmNoaXAsIHVuc2lnbmVkIGludCBpZCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBtYXNrLCB1bnNpZ25lZCBzaG9ydCAqZ2FpbnMpCit7CisJaW50IGk7CisKKwlpZiAoIShjaGlwLT5taXhlci5kZXN0X21hc2sgJiAoMSA8PCBpZCkpIHx8CisJICAgIChjaGlwLT5taXhlci5zcmNfbWFzayAmIG1hc2spICE9IG1hc2spCisJCXJldHVybiAtRUlOVkFMOworCWZvciAoaSA9IDA7IGkgPCBMT0xBX01JWEVSX0RJTTsgaSsrKSB7CisJCWlmIChtYXNrICYgKDEgPDwgaSkpIHsKKwkJCXdyaXRldygqZ2FpbnMsICZjaGlwLT5taXhlci5hcnJheS0+ZGVzdF9taXhfZ2FpbltpZF1baV0pOworCQkJZ2FpbnMrKzsKKwkJfQorCX0KKwl3cml0ZWwobWFzaywgJmNoaXAtPm1peGVyLmFycmF5LT5kZXN0X21peF9nYWluX2VuYWJsZVtpZF0pOworCWxvbGFfY29kZWNfZmx1c2goY2hpcCk7CisJLyogdXBkYXRlIGZvciBhbGwgZGVzdHMgYXQgb25jZSAqLworCXJldHVybiBsb2xhX2NvZGVjX3dyaXRlKGNoaXAsIGNoaXAtPm1peGVyLm5pZCwKKwkJCQlMT0xBX1ZFUkJfU0VUX0RFU1RJTkFUSU9OX0dBSU4sIGlkLCAwKTsKK30KKworLyoKKyAqLworCitzdGF0aWMgaW50IHNldF9hbmFsb2dfdm9sdW1lKHN0cnVjdCBsb2xhICpjaGlwLCBpbnQgZGlyLAorCQkJICAgICB1bnNpZ25lZCBpbnQgaWR4LCB1bnNpZ25lZCBpbnQgdmFsLAorCQkJICAgICBib29sIGV4dGVybmFsX2NhbGwpOworCitpbnQgbG9sYV9zZXR1cF9hbGxfYW5hbG9nX2dhaW5zKHN0cnVjdCBsb2xhICpjaGlwLCBpbnQgZGlyLCBib29sIG11dGUpCit7CisJc3RydWN0IGxvbGFfcGluICpwaW47CisJaW50IGlkeCwgbWF4X2lkeDsKKworCXBpbiA9IGNoaXAtPnBpbltkaXJdLnBpbnM7CisJbWF4X2lkeCA9IGNoaXAtPnBpbltkaXJdLm51bV9waW5zOworCWZvciAoaWR4ID0gMDsgaWR4IDwgbWF4X2lkeDsgaWR4KyspIHsKKwkJaWYgKHBpbltpZHhdLmlzX2FuYWxvZykgeworCQkJdW5zaWduZWQgaW50IHZhbCA9IG11dGUgPyAwIDogcGluW2lkeF0uY3VyX2dhaW5fc3RlcDsKKwkJCS8qIHNldCB2b2x1bWUgYW5kIGRvIG5vdCBzYXZlIHRoZSB2YWx1ZSAqLworCQkJc2V0X2FuYWxvZ192b2x1bWUoY2hpcCwgZGlyLCBpZHgsIHZhbCwgZmFsc2UpOworCQl9CisJfQorCXJldHVybiBsb2xhX2NvZGVjX2ZsdXNoKGNoaXApOworfQorCit2b2lkIGxvbGFfc2F2ZV9taXhlcihzdHJ1Y3QgbG9sYSAqY2hpcCkKK3sKKwkvKiBtdXRlIGFuYWxvZyBvdXRwdXQgKi8KKwlpZiAoY2hpcC0+bWl4ZXIuYXJyYXlfc2F2ZWQpIHsKKwkJLyogc3RvcmUgY29udGVudHMgb2YgbWl4ZXIgYXJyYXkgKi8KKwkJbWVtY3B5X2Zyb21pbyhjaGlwLT5taXhlci5hcnJheV9zYXZlZCwgY2hpcC0+bWl4ZXIuYXJyYXksCisJCQkgICAgICBzaXplb2YoKmNoaXAtPm1peGVyLmFycmF5KSk7CisJfQorCWxvbGFfc2V0dXBfYWxsX2FuYWxvZ19nYWlucyhjaGlwLCBQTEFZLCB0cnVlKTsgLyogb3V0cHV0IG11dGUgKi8KK30KKwordm9pZCBsb2xhX3Jlc3RvcmVfbWl4ZXIoc3RydWN0IGxvbGEgKmNoaXApCit7CisJaW50IGk7CisKKwkvKmxvbGFfcmVzZXRfc2V0dXBzKGNoaXApOyovCisJaWYgKGNoaXAtPm1peGVyLmFycmF5X3NhdmVkKSB7CisJCS8qIHJlc3RvcmUgY29udGVudHMgb2YgbWl4ZXIgYXJyYXkgKi8KKwkJbWVtY3B5X3RvaW8oY2hpcC0+bWl4ZXIuYXJyYXksIGNoaXAtPm1peGVyLmFycmF5X3NhdmVkLAorCQkJICAgIHNpemVvZigqY2hpcC0+bWl4ZXIuYXJyYXkpKTsKKwkJLyogaW5mb3JtIG1pY3JvLWNvbnRyb2xsZXIgYWJvdXQgYWxsIHJlc3RvcmVkIHZhbHVlcworCQkgKiBhbmQgaWdub3JlIHJldHVybiB2YWx1ZXMKKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBjaGlwLT5taXhlci5zcmNfcGh5c19pbnM7IGkrKykKKwkJCWxvbGFfY29kZWNfd3JpdGUoY2hpcCwgY2hpcC0+bWl4ZXIubmlkLAorCQkJCQkgTE9MQV9WRVJCX1NFVF9TT1VSQ0VfR0FJTiwKKwkJCQkJIGksIDApOworCQlmb3IgKGkgPSAwOyBpIDwgY2hpcC0+bWl4ZXIuc3JjX3N0cmVhbV9vdXRzOyBpKyspCisJCQlsb2xhX2NvZGVjX3dyaXRlKGNoaXAsIGNoaXAtPm1peGVyLm5pZCwKKwkJCQkJIExPTEFfVkVSQl9TRVRfU09VUkNFX0dBSU4sCisJCQkJCSBjaGlwLT5taXhlci5zcmNfc3RyZWFtX291dF9vZnMgKyBpLCAwKTsKKwkJZm9yIChpID0gMDsgaSA8IGNoaXAtPm1peGVyLmRlc3Rfc3RyZWFtX2luczsgaSsrKQorCQkJbG9sYV9jb2RlY193cml0ZShjaGlwLCBjaGlwLT5taXhlci5uaWQsCisJCQkJCSBMT0xBX1ZFUkJfU0VUX0RFU1RJTkFUSU9OX0dBSU4sCisJCQkJCSBpLCAwKTsKKwkJZm9yIChpID0gMDsgaSA8IGNoaXAtPm1peGVyLmRlc3RfcGh5c19vdXRzOyBpKyspCisJCQlsb2xhX2NvZGVjX3dyaXRlKGNoaXAsIGNoaXAtPm1peGVyLm5pZCwKKwkJCQkJIExPTEFfVkVSQl9TRVRfREVTVElOQVRJT05fR0FJTiwKKwkJCQkJIGNoaXAtPm1peGVyLmRlc3RfcGh5c19vdXRfb2ZzICsgaSwgMCk7CisJCWxvbGFfY29kZWNfZmx1c2goY2hpcCk7CisJfQorfQorCisvKgorICovCisKK3N0YXRpYyBpbnQgc2V0X2FuYWxvZ192b2x1bWUoc3RydWN0IGxvbGEgKmNoaXAsIGludCBkaXIsCisJCQkgICAgIHVuc2lnbmVkIGludCBpZHgsIHVuc2lnbmVkIGludCB2YWwsCisJCQkgICAgIGJvb2wgZXh0ZXJuYWxfY2FsbCkKK3sKKwlzdHJ1Y3QgbG9sYV9waW4gKnBpbjsKKwlpbnQgZXJyOworCisJaWYgKGlkeCA+PSBjaGlwLT5waW5bZGlyXS5udW1fcGlucykKKwkJcmV0dXJuIC1FSU5WQUw7CisJcGluID0gJmNoaXAtPnBpbltkaXJdLnBpbnNbaWR4XTsKKwlpZiAoIXBpbi0+aXNfYW5hbG9nIHx8IHBpbi0+YW1wX251bV9zdGVwcyA8PSB2YWwpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChleHRlcm5hbF9jYWxsICYmIHBpbi0+Y3VyX2dhaW5fc3RlcCA9PSB2YWwpCisJCXJldHVybiAwOworCWlmIChleHRlcm5hbF9jYWxsKQorCQlsb2xhX2NvZGVjX2ZsdXNoKGNoaXApOworCWVyciA9IGxvbGFfY29kZWNfd3JpdGUoY2hpcCwgcGluLT5uaWQsCisJCQkgICAgICAgTE9MQV9WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCB2YWwsIDApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWlmIChleHRlcm5hbF9jYWxsKQorCQlwaW4tPmN1cl9nYWluX3N0ZXAgPSB2YWw7CisJcmV0dXJuIDA7Cit9CisKK2ludCBsb2xhX3NldF9zcmNfY29uZmlnKHN0cnVjdCBsb2xhICpjaGlwLCB1bnNpZ25lZCBpbnQgc3JjX21hc2ssIGJvb2wgdXBkYXRlKQoreworCWludCByZXQgPSAwOworCWludCBzdWNjZXNzID0gMDsKKwlpbnQgbiwgZXJyOworCisJLyogU1JDIGNhbiBiZSBhY3RpdmF0ZWQgYW5kIHRoZSBkd0lucHV0U1JDTWFzayBpcyB2YWxpZD8gKi8KKwlpZiAoKGNoaXAtPmlucHV0X3NyY19jYXBzX21hc2sgJiBzcmNfbWFzaykgIT0gc3JjX21hc2spCisJCXJldHVybiAtRUlOVkFMOworCS8qIGhhbmRsZSBhbGwgZXZlbiBJbnB1dHMgLSBTUkMgaXMgYSBzdGVyZW8gc2V0dGluZyAhISEgKi8KKwlmb3IgKG4gPSAwOyBuIDwgY2hpcC0+cGluW0NBUFRdLm51bV9waW5zOyBuICs9IDIpIHsKKwkJdW5zaWduZWQgaW50IG1hc2sgPSAzVSA8PCBuOyAvKiBoYW5kbGUgdGhlIHN0ZXJlbyBjYXNlICovCisJCXVuc2lnbmVkIGludCBuZXdfc3JjLCBzcmNfc3RhdGU7CisJCWlmICghKGNoaXAtPmlucHV0X3NyY19jYXBzX21hc2sgJiBtYXNrKSkKKwkJCWNvbnRpbnVlOworCQkvKiBpZiBvbmUgSU8gbmVlZHMgU1JDLCBib3RoIHN0ZXJlbyBJTyB3aWxsIGdldCBTUkMgKi8KKwkJbmV3X3NyYyA9IChzcmNfbWFzayAmIG1hc2spICE9IDA7CisJCWlmICh1cGRhdGUpIHsKKwkJCXNyY19zdGF0ZSA9IChjaGlwLT5pbnB1dF9zcmNfbWFzayAmIG1hc2spICE9IDA7CisJCQlpZiAoc3JjX3N0YXRlID09IG5ld19zcmMpCisJCQkJY29udGludWU7ICAgLyogbm90aGluZyB0byBjaGFuZ2UgZm9yIHRoaXMgSU8gKi8KKwkJfQorCQllcnIgPSBsb2xhX2NvZGVjX3dyaXRlKGNoaXAsIGNoaXAtPnBjbVtDQVBUXS5zdHJlYW1zW25dLm5pZCwKKwkJCQkgICAgICAgTE9MQV9WRVJCX1NFVF9TUkMsIG5ld19zcmMsIDApOworCQlpZiAoIWVycikKKwkJCXN1Y2Nlc3MrKzsKKwkJZWxzZQorCQkJcmV0ID0gZXJyOworCX0KKwlpZiAoc3VjY2VzcykKKwkJcmV0ID0gbG9sYV9jb2RlY19mbHVzaChjaGlwKTsKKwlpZiAoIXJldCkKKwkJY2hpcC0+aW5wdXRfc3JjX21hc2sgPSBzcmNfbWFzazsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICovCitzdGF0aWMgaW50IGluaXRfbWl4ZXJfdmFsdWVzKHN0cnVjdCBsb2xhICpjaGlwKQoreworCWludCBpOworCisJLyogYWxsIHNyYyBvbiAqLworCWxvbGFfc2V0X3NyY19jb25maWcoY2hpcCwgKDEgPDwgY2hpcC0+cGluW0NBUFRdLm51bV9waW5zKSAtIDEsIGZhbHNlKTsKKworCS8qIGNsZWFyIGFsbCBtYXRyaXggKi8KKwltZW1zZXRfaW8oY2hpcC0+bWl4ZXIuYXJyYXksIDAsIHNpemVvZigqY2hpcC0+bWl4ZXIuYXJyYXkpKTsKKwkvKiBzZXQgc3JjIGdhaW4gdG8gMGRCICovCisJZm9yIChpID0gMDsgaSA8IGNoaXAtPm1peGVyLnNyY19waHlzX2luczsgaSsrKQorCQlsb2xhX21peGVyX3NldF9zcmNfZ2FpbihjaGlwLCBpLCAzMzYsIHRydWUpOyAvKiAwZEIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY2hpcC0+bWl4ZXIuc3JjX3N0cmVhbV9vdXRzOyBpKyspCisJCWxvbGFfbWl4ZXJfc2V0X3NyY19nYWluKGNoaXAsCisJCQkJCWkgKyBjaGlwLT5taXhlci5zcmNfc3RyZWFtX291dF9vZnMsCisJCQkJCTMzNiwgdHJ1ZSk7IC8qIDBkQiAqLworCS8qIHNldCAxOjEgZGVzdCBnYWluICovCisJZm9yIChpID0gMDsgaSA8IGNoaXAtPm1peGVyLmRlc3Rfc3RyZWFtX2luczsgaSsrKSB7CisJCWludCBzcmMgPSBpICUgY2hpcC0+bWl4ZXIuc3JjX3BoeXNfaW5zOworCQlsb2xhX21peGVyX3NldF9tYXBwaW5nX2dhaW4oY2hpcCwgc3JjLCBpLCAzMzYsIHRydWUpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgY2hpcC0+bWl4ZXIuc3JjX3N0cmVhbV9vdXRzOyBpKyspIHsKKwkJaW50IHNyYyA9IGNoaXAtPm1peGVyLnNyY19zdHJlYW1fb3V0X29mcyArIGk7CisJCWludCBkc3QgPSBjaGlwLT5taXhlci5kZXN0X3BoeXNfb3V0X29mcyArCisJCQlpICUgY2hpcC0+bWl4ZXIuZGVzdF9waHlzX291dHM7CisJCWxvbGFfbWl4ZXJfc2V0X21hcHBpbmdfZ2FpbihjaGlwLCBzcmMsIGRzdCwgMzM2LCB0cnVlKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBhbmFsb2cgbWl4ZXIgY29udHJvbCBlbGVtZW50CisgKi8KK3N0YXRpYyBpbnQgbG9sYV9hbmFsb2dfdm9sX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwlzdHJ1Y3QgbG9sYSAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlpbnQgZGlyID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKKwl1aW5mby0+Y291bnQgPSBjaGlwLT5waW5bZGlyXS5udW1fcGluczsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IGNoaXAtPnBpbltkaXJdLnBpbnNbMF0uYW1wX251bV9zdGVwczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb2xhX2FuYWxvZ192b2xfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBsb2xhICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWludCBkaXIgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjaGlwLT5waW5bZGlyXS5udW1fcGluczsgaSsrKQorCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVtpXSA9CisJCQljaGlwLT5waW5bZGlyXS5waW5zW2ldLmN1cl9nYWluX3N0ZXA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbG9sYV9hbmFsb2dfdm9sX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgbG9sYSAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlpbnQgZGlyID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisJaW50IGksIGVycjsKKworCWZvciAoaSA9IDA7IGkgPCBjaGlwLT5waW5bZGlyXS5udW1fcGluczsgaSsrKSB7CisJCWVyciA9IHNldF9hbmFsb2dfdm9sdW1lKGNoaXAsIGRpciwgaSwKKwkJCQkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbaV0sCisJCQkJCXRydWUpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvbGFfYW5hbG9nX3ZvbF90bHYoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBvcF9mbGFnLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgX191c2VyICp0bHYpCit7CisJc3RydWN0IGxvbGEgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJaW50IGRpciA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlOworCXVuc2lnbmVkIGludCB2YWwxLCB2YWwyOworCXN0cnVjdCBsb2xhX3BpbiAqcGluOworCisJaWYgKHNpemUgPCA0ICogc2l6ZW9mKHVuc2lnbmVkIGludCkpCisJCXJldHVybiAtRU5PTUVNOworCXBpbiA9ICZjaGlwLT5waW5bZGlyXS5waW5zWzBdOworCisJdmFsMiA9IHBpbi0+YW1wX3N0ZXBfc2l6ZSAqIDI1OworCXZhbDEgPSAtMSAqIChpbnQpcGluLT5hbXBfb2Zmc2V0ICogKGludCl2YWwyOworI2lmZGVmIFRMVl9EQl9TQ0FMRV9NVVRFCisJdmFsMiB8PSBUTFZfREJfU0NBTEVfTVVURTsKKyNlbmRpZgorCWlmIChwdXRfdXNlcihTTkRSVl9DVExfVExWVF9EQl9TQ0FMRSwgdGx2KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKHB1dF91c2VyKDIgKiBzaXplb2YodW5zaWduZWQgaW50KSwgdGx2ICsgMSkpCisJCXJldHVybiAtRUZBVUxUOworCWlmIChwdXRfdXNlcih2YWwxLCB0bHYgKyAyKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKHB1dF91c2VyKHZhbDIsIHRsdiArIDMpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGxvbGFfYW5hbG9nX21peGVyIF9fZGV2aW5pdGRhdGEgPSB7CisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJLmFjY2VzcyA9IChTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIHwKKwkJICAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEIHwKKwkJICAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9DQUxMQkFDSyksCisJLmluZm8gPSBsb2xhX2FuYWxvZ192b2xfaW5mbywKKwkuZ2V0ID0gbG9sYV9hbmFsb2dfdm9sX2dldCwKKwkucHV0ID0gbG9sYV9hbmFsb2dfdm9sX3B1dCwKKwkudGx2LmMgPSBsb2xhX2FuYWxvZ192b2xfdGx2LAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgY3JlYXRlX2FuYWxvZ19taXhlcihzdHJ1Y3QgbG9sYSAqY2hpcCwgaW50IGRpciwgY2hhciAqbmFtZSkKK3sKKwlpZiAoIWNoaXAtPnBpbltkaXJdLm51bV9waW5zKQorCQlyZXR1cm4gMDsKKwkvKiBubyBhbmFsb2cgdm9sdW1lcyBvbiBkaWdpdGFsIG9ubHkgYWRhcHRlcnMgKi8KKwlpZiAoY2hpcC0+cGluW2Rpcl0ubnVtX3BpbnMgIT0gY2hpcC0+cGluW2Rpcl0ubnVtX2FuYWxvZ19waW5zKQorCQlyZXR1cm4gMDsKKwlsb2xhX2FuYWxvZ19taXhlci5uYW1lID0gbmFtZTsKKwlsb2xhX2FuYWxvZ19taXhlci5wcml2YXRlX3ZhbHVlID0gZGlyOworCXJldHVybiBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLAorCQkJICAgc25kX2N0bF9uZXcxKCZsb2xhX2FuYWxvZ19taXhlciwgY2hpcCkpOworfQorCisvKgorICogSGFyZHdhcmUgc2FtcGxlIHJhdGUgY29udmVydGVyIG9uIGRpZ2l0YWwgaW5wdXQKKyAqLworc3RhdGljIGludCBsb2xhX2lucHV0X3NyY19pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJc3RydWN0IGxvbGEgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfQk9PTEVBTjsKKwl1aW5mby0+Y291bnQgPSBjaGlwLT5waW5bQ0FQVF0ubnVtX3BpbnM7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvbGFfaW5wdXRfc3JjX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBsb2xhICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGNoaXAtPnBpbltDQVBUXS5udW1fcGluczsgaSsrKQorCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVtpXSA9CisJCQkhIShjaGlwLT5pbnB1dF9zcmNfbWFzayAmICgxIDw8IGkpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb2xhX2lucHV0X3NyY19wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgbG9sYSAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlpbnQgaTsKKwl1bnNpZ25lZCBpbnQgbWFzazsKKworCW1hc2sgPSAwOworCWZvciAoaSA9IDA7IGkgPCBjaGlwLT5waW5bQ0FQVF0ubnVtX3BpbnM7IGkrKykKKwkJaWYgKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2ldKQorCQkJbWFzayB8PSAxIDw8IGk7CisJcmV0dXJuIGxvbGFfc2V0X3NyY19jb25maWcoY2hpcCwgbWFzaywgdHJ1ZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBsb2xhX2lucHV0X3NyY19taXhlciBfX2RldmluaXRkYXRhID0geworCS5uYW1lID0gIkRpZ2l0YWwgU1JDIENhcHR1cmUgU3dpdGNoIiwKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkuaW5mbyA9IGxvbGFfaW5wdXRfc3JjX2luZm8sCisJLmdldCA9IGxvbGFfaW5wdXRfc3JjX2dldCwKKwkucHV0ID0gbG9sYV9pbnB1dF9zcmNfcHV0LAorfTsKKworLyoKKyAqIExvbGExNjE2MSBvciBMb2xhODgxIGNhbiBoYXZlIEhhcmR3YXJlIHNhbXBsZSByYXRlIGNvbnZlcnRlcnMKKyAqIG9uIGl0cyBkaWdpdGFsIGlucHV0IHBpbnMKKyAqLworc3RhdGljIGludCBfX2RldmluaXQgY3JlYXRlX2lucHV0X3NyY19taXhlcihzdHJ1Y3QgbG9sYSAqY2hpcCkKK3sKKwlpZiAoIWNoaXAtPmlucHV0X3NyY19jYXBzX21hc2spCisJCXJldHVybiAwOworCisJcmV0dXJuIHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsCisJCQkgICBzbmRfY3RsX25ldzEoJmxvbGFfaW5wdXRfc3JjX21peGVyLCBjaGlwKSk7Cit9CisKKy8qCisgKiBzcmMgZ2FpbiBtaXhlcgorICovCitzdGF0aWMgaW50IGxvbGFfc3JjX2dhaW5faW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJdW5zaWduZWQgaW50IGNvdW50ID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDgpICYgMHhmZjsKKworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOworCXVpbmZvLT5jb3VudCA9IGNvdW50OworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gNDA5OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvbGFfc3JjX2dhaW5fZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgbG9sYSAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwl1bnNpZ25lZCBpbnQgb2ZzID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAweGZmOworCXVuc2lnbmVkIGludCBjb3VudCA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiA4KSAmIDB4ZmY7CisJdW5zaWduZWQgaW50IG1hc2ssIGk7CisKKwltYXNrID0gcmVhZGwoJmNoaXAtPm1peGVyLmFycmF5LT5zcmNfZ2Fpbl9lbmFibGUpOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCXVuc2lnbmVkIGludCBpZHggPSBvZnMgKyBpOworCQl1bnNpZ25lZCBzaG9ydCB2YWw7CisJCWlmICghKGNoaXAtPm1peGVyLnNyY19tYXNrICYgKDEgPDwgaWR4KSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKG1hc2sgJiAoMSA8PCBpZHgpKQorCQkJdmFsID0gcmVhZHcoJmNoaXAtPm1peGVyLmFycmF5LT5zcmNfZ2FpbltpZHhdKSArIDE7CisJCWVsc2UKKwkJCXZhbCA9IDA7CisJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2ldID0gdmFsOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb2xhX3NyY19nYWluX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGxvbGEgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJdW5zaWduZWQgaW50IG9mcyA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMHhmZjsKKwl1bnNpZ25lZCBpbnQgY291bnQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gOCkgJiAweGZmOworCWludCBpLCBlcnI7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQl1bnNpZ25lZCBpbnQgaWR4ID0gb2ZzICsgaTsKKwkJdW5zaWduZWQgc2hvcnQgdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbaV07CisJCWlmICh2YWwpCisJCQl2YWwtLTsKKwkJZXJyID0gbG9sYV9taXhlcl9zZXRfc3JjX2dhaW4oY2hpcCwgaWR4LCB2YWwsICEhdmFsKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogcmF3IHZhbHVlOiAwID0gLTg0ZEIsIDMzNiA9IDBkQiwgNDA4PTE4ZEIsIGluY3JlbWVudGVkIDEgZm9yIG11dGUgKi8KK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShsb2xhX3NyY19nYWluX3RsdiwgLTg0MjUsIDI1LCAxKTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGxvbGFfc3JjX2dhaW5fbWl4ZXIgX19kZXZpbml0ZGF0YSA9IHsKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkuYWNjZXNzID0gKFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUgfAorCQkgICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQUQpLAorCS5pbmZvID0gbG9sYV9zcmNfZ2Fpbl9pbmZvLAorCS5nZXQgPSBsb2xhX3NyY19nYWluX2dldCwKKwkucHV0ID0gbG9sYV9zcmNfZ2Fpbl9wdXQsCisJLnRsdi5wID0gbG9sYV9zcmNfZ2Fpbl90bHYsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBjcmVhdGVfc3JjX2dhaW5fbWl4ZXIoc3RydWN0IGxvbGEgKmNoaXAsCisJCQkJCSAgIGludCBudW0sIGludCBvZnMsIGNoYXIgKm5hbWUpCit7CisJbG9sYV9zcmNfZ2Fpbl9taXhlci5uYW1lID0gbmFtZTsKKwlsb2xhX3NyY19nYWluX21peGVyLnByaXZhdGVfdmFsdWUgPSBvZnMgKyAobnVtIDw8IDgpOworCXJldHVybiBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLAorCQkJICAgc25kX2N0bF9uZXcxKCZsb2xhX3NyY19nYWluX21peGVyLCBjaGlwKSk7Cit9CisKKy8qCisgKiBkZXN0aW5hdGlvbiBnYWluIChtYXRyaXgtbGlrZSkgbWl4ZXIKKyAqLworc3RhdGljIGludCBsb2xhX2Rlc3RfZ2Fpbl9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJdW5zaWduZWQgaW50IHNyY19udW0gPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gOCkgJiAweGZmOworCisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJdWluZm8tPmNvdW50ID0gc3JjX251bTsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDQzMzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb2xhX2Rlc3RfZ2Fpbl9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgbG9sYSAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwl1bnNpZ25lZCBpbnQgc3JjX29mcyA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMHhmZjsKKwl1bnNpZ25lZCBpbnQgc3JjX251bSA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiA4KSAmIDB4ZmY7CisJdW5zaWduZWQgaW50IGRzdF9vZnMgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTYpICYgMHhmZjsKKwl1bnNpZ25lZCBpbnQgZHN0LCBtYXNrLCBpOworCisJZHN0ID0gc25kX2N0bF9nZXRfaW9mZmlkeChrY29udHJvbCwgJnVjb250cm9sLT5pZCkgKyBkc3Rfb2ZzOworCW1hc2sgPSByZWFkbCgmY2hpcC0+bWl4ZXIuYXJyYXktPmRlc3RfbWl4X2dhaW5fZW5hYmxlW2RzdF0pOworCWZvciAoaSA9IDA7IGkgPCBzcmNfbnVtOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IHNyYyA9IHNyY19vZnMgKyBpOworCQl1bnNpZ25lZCBzaG9ydCB2YWw7CisJCWlmICghKGNoaXAtPm1peGVyLnNyY19tYXNrICYgKDEgPDwgc3JjKSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKG1hc2sgJiAoMSA8PCBkc3QpKQorCQkJdmFsID0gcmVhZHcoJmNoaXAtPm1peGVyLmFycmF5LT5kZXN0X21peF9nYWluW2RzdF1bc3JjXSkgKyAxOworCQllbHNlCisJCQl2YWwgPSAwOworCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVtpXSA9IHZhbDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbG9sYV9kZXN0X2dhaW5fcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGxvbGEgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJdW5zaWduZWQgaW50IHNyY19vZnMgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDB4ZmY7CisJdW5zaWduZWQgaW50IHNyY19udW0gPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gOCkgJiAweGZmOworCXVuc2lnbmVkIGludCBkc3Rfb2ZzID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDE2KSAmIDB4ZmY7CisJdW5zaWduZWQgaW50IGRzdCwgbWFzazsKKwl1bnNpZ25lZCBzaG9ydCBnYWluc1tNQVhfU1RSRUFNX0NPVU5UXTsKKwlpbnQgaSwgbnVtOworCisJbWFzayA9IDA7CisJbnVtID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgc3JjX251bTsgaSsrKSB7CisJCXVuc2lnbmVkIHNob3J0IHZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2ldOworCQlpZiAodmFsKSB7CisJCQlnYWluc1tudW0rK10gPSB2YWwgLSAxOworCQkJbWFzayB8PSAxIDw8IGk7CisJCX0KKwl9CisJbWFzayA8PD0gc3JjX29mczsKKwlkc3QgPSBzbmRfY3RsX2dldF9pb2ZmaWR4KGtjb250cm9sLCAmdWNvbnRyb2wtPmlkKSArIGRzdF9vZnM7CisJcmV0dXJuIGxvbGFfbWl4ZXJfc2V0X2Rlc3RfZ2FpbnMoY2hpcCwgZHN0LCBtYXNrLCBnYWlucyk7Cit9CisKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShsb2xhX2Rlc3RfZ2Fpbl90bHYsIC04NDI1LCAyNSwgMSk7CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBsb2xhX2Rlc3RfZ2Fpbl9taXhlciBfX2RldmluaXRkYXRhID0geworCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5hY2Nlc3MgPSAoU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSB8CisJCSAgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfUkVBRCksCisJLmluZm8gPSBsb2xhX2Rlc3RfZ2Fpbl9pbmZvLAorCS5nZXQgPSBsb2xhX2Rlc3RfZ2Fpbl9nZXQsCisJLnB1dCA9IGxvbGFfZGVzdF9nYWluX3B1dCwKKwkudGx2LnAgPSBsb2xhX2Rlc3RfZ2Fpbl90bHYsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBjcmVhdGVfZGVzdF9nYWluX21peGVyKHN0cnVjdCBsb2xhICpjaGlwLAorCQkJCQkgICAgaW50IHNyY19udW0sIGludCBzcmNfb2ZzLAorCQkJCQkgICAgaW50IG51bSwgaW50IG9mcywgY2hhciAqbmFtZSkKK3sKKwlsb2xhX2Rlc3RfZ2Fpbl9taXhlci5jb3VudCA9IG51bTsKKwlsb2xhX2Rlc3RfZ2Fpbl9taXhlci5uYW1lID0gbmFtZTsKKwlsb2xhX2Rlc3RfZ2Fpbl9taXhlci5wcml2YXRlX3ZhbHVlID0KKwkJc3JjX29mcyArIChzcmNfbnVtIDw8IDgpICsgKG9mcyA8PCAxNikgKyAobnVtIDw8IDI0KTsKKwlyZXR1cm4gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwKKwkJCSAgc25kX2N0bF9uZXcxKCZsb2xhX2Rlc3RfZ2Fpbl9taXhlciwgY2hpcCkpOworfQorCisvKgorICovCitpbnQgX19kZXZpbml0IGxvbGFfY3JlYXRlX21peGVyKHN0cnVjdCBsb2xhICpjaGlwKQoreworCWludCBlcnI7CisKKwllcnIgPSBjcmVhdGVfYW5hbG9nX21peGVyKGNoaXAsIFBMQVksICJBbmFsb2cgUGxheWJhY2sgVm9sdW1lIik7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZXJyID0gY3JlYXRlX2FuYWxvZ19taXhlcihjaGlwLCBDQVBULCAiQW5hbG9nIENhcHR1cmUgVm9sdW1lIik7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZXJyID0gY3JlYXRlX2lucHV0X3NyY19taXhlcihjaGlwKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBjcmVhdGVfc3JjX2dhaW5fbWl4ZXIoY2hpcCwgY2hpcC0+bWl4ZXIuc3JjX3BoeXNfaW5zLCAwLAorCQkJCSAgICAiTGluZSBTb3VyY2UgR2FpbiBWb2x1bWUiKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBjcmVhdGVfc3JjX2dhaW5fbWl4ZXIoY2hpcCwgY2hpcC0+bWl4ZXIuc3JjX3N0cmVhbV9vdXRzLAorCQkJCSAgICBjaGlwLT5taXhlci5zcmNfc3RyZWFtX291dF9vZnMsCisJCQkJICAgICJTdHJlYW0gU291cmNlIEdhaW4gVm9sdW1lIik7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZXJyID0gY3JlYXRlX2Rlc3RfZ2Fpbl9taXhlcihjaGlwLAorCQkJCSAgICAgY2hpcC0+bWl4ZXIuc3JjX3BoeXNfaW5zLCAwLAorCQkJCSAgICAgY2hpcC0+bWl4ZXIuZGVzdF9zdHJlYW1faW5zLCAwLAorCQkJCSAgICAgIkxpbmUgQ2FwdHVyZSBWb2x1bWUiKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBjcmVhdGVfZGVzdF9nYWluX21peGVyKGNoaXAsCisJCQkJICAgICBjaGlwLT5taXhlci5zcmNfc3RyZWFtX291dHMsCisJCQkJICAgICBjaGlwLT5taXhlci5zcmNfc3RyZWFtX291dF9vZnMsCisJCQkJICAgICBjaGlwLT5taXhlci5kZXN0X3N0cmVhbV9pbnMsIDAsCisJCQkJICAgICAiU3RyZWFtLUxvb3BiYWNrIENhcHR1cmUgVm9sdW1lIik7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZXJyID0gY3JlYXRlX2Rlc3RfZ2Fpbl9taXhlcihjaGlwLAorCQkJCSAgICAgY2hpcC0+bWl4ZXIuc3JjX3BoeXNfaW5zLCAwLAorCQkJCSAgICAgY2hpcC0+bWl4ZXIuZGVzdF9waHlzX291dHMsCisJCQkJICAgICBjaGlwLT5taXhlci5kZXN0X3BoeXNfb3V0X29mcywKKwkJCQkgICAgICJMaW5lLUxvb3BiYWNrIFBsYXliYWNrIFZvbHVtZSIpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWVyciA9IGNyZWF0ZV9kZXN0X2dhaW5fbWl4ZXIoY2hpcCwKKwkJCQkgICAgIGNoaXAtPm1peGVyLnNyY19zdHJlYW1fb3V0cywKKwkJCQkgICAgIGNoaXAtPm1peGVyLnNyY19zdHJlYW1fb3V0X29mcywKKwkJCQkgICAgIGNoaXAtPm1peGVyLmRlc3RfcGh5c19vdXRzLAorCQkJCSAgICAgY2hpcC0+bWl4ZXIuZGVzdF9waHlzX291dF9vZnMsCisJCQkJICAgICAiU3RyZWFtIFBsYXliYWNrIFZvbHVtZSIpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIGluaXRfbWl4ZXJfdmFsdWVzKGNoaXApOworfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2xvbGEvbG9sYV9wY20uYyBiL3NvdW5kL3BjaS9sb2xhL2xvbGFfcGNtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ0ZGI2OAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9sb2xhL2xvbGFfcGNtLmMKQEAgLTAsMCArMSw3MDYgQEAKKy8qCisgKiAgU3VwcG9ydCBmb3IgRGlnaWdyYW0gTG9sYSBQQ0ktZSBib2FyZHMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDExIFRha2FzaGkgSXdhaSA8dGl3YWlAc3VzZS5kZT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorICogIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlICJsb2xhLmgiCisKKyNkZWZpbmUgTE9MQV9NQVhfQkRMX0VOVFJJRVMJOAorI2RlZmluZSBMT0xBX01BWF9CVUZfU0laRQkoMTAyNCoxMDI0KjEwMjQpCisjZGVmaW5lIExPTEFfQkRMX0VOVFJZX1NJWkUJKDE2ICogMTYpCisKK3N0YXRpYyBzdHJ1Y3QgbG9sYV9wY20gKmxvbGFfZ2V0X3BjbShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgbG9sYSAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlyZXR1cm4gJmNoaXAtPnBjbVtzdWJzdHJlYW0tPnN0cmVhbV07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbG9sYV9zdHJlYW0gKmxvbGFfZ2V0X3N0cmVhbShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgbG9sYV9wY20gKnBjbSA9IGxvbGFfZ2V0X3BjbShzdWJzdHJlYW0pOworCXVuc2lnbmVkIGludCBpZHggPSBzdWJzdHJlYW0tPm51bWJlcjsKKwlyZXR1cm4gJnBjbS0+c3RyZWFtc1tpZHhdOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGxvbGFfZ2V0X2xyYyhzdHJ1Y3QgbG9sYSAqY2hpcCkKK3sKKwlyZXR1cm4gbG9sYV9yZWFkbChjaGlwLCBCQVIxLCBMUkMpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGxvbGFfZ2V0X3RzdGFtcChzdHJ1Y3QgbG9sYSAqY2hpcCwgYm9vbCBxdWlja19ub19zeW5jKQoreworCXVuc2lnbmVkIGludCB0c3RhbXAgPSBsb2xhX2dldF9scmMoY2hpcCkgPj4gODsKKwlpZiAoY2hpcC0+Z3JhbnVsYXJpdHkpIHsKKwkJdW5zaWduZWQgaW50IHdhaXRfYmFua3MgPSBxdWlja19ub19zeW5jID8gMCA6IDg7CisJCXRzdGFtcCArPSAod2FpdF9iYW5rcyArIDEpICogY2hpcC0+Z3JhbnVsYXJpdHkgLSAxOworCQl0c3RhbXAgLT0gdHN0YW1wICUgY2hpcC0+Z3JhbnVsYXJpdHk7CisJfQorCXJldHVybiB0c3RhbXAgPDwgODsKK30KKworLyogY2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0IHN0YXR1cyAqLworc3RhdGljIHZvaWQgbG9sYV9zdHJlYW1fY2xlYXJfcGVuZGluZ19pcnEoc3RydWN0IGxvbGEgKmNoaXAsCisJCQkJCSAgc3RydWN0IGxvbGFfc3RyZWFtICpzdHIpCit7CisJdW5zaWduZWQgaW50IHZhbCA9IGxvbGFfZHNkX3JlYWQoY2hpcCwgc3RyLT5kc2QsIFNUUyk7CisJdmFsICY9IExPTEFfRFNEX1NUU19ERVNFIHwgTE9MQV9EU0RfU1RTX0JDSVM7CisJaWYgKHZhbCkKKwkJbG9sYV9kc2Rfd3JpdGUoY2hpcCwgc3RyLT5kc2QsIFNUUywgdmFsKTsKK30KKworc3RhdGljIHZvaWQgbG9sYV9zdHJlYW1fc3RhcnQoc3RydWN0IGxvbGEgKmNoaXAsIHN0cnVjdCBsb2xhX3N0cmVhbSAqc3RyLAorCQkJICAgICAgdW5zaWduZWQgaW50IHRzdGFtcCkKK3sKKwlsb2xhX3N0cmVhbV9jbGVhcl9wZW5kaW5nX2lycShjaGlwLCBzdHIpOworCWxvbGFfZHNkX3dyaXRlKGNoaXAsIHN0ci0+ZHNkLCBDVEwsCisJCSAgICAgICBMT0xBX0RTRF9DVExfU1JVTiB8CisJCSAgICAgICBMT0xBX0RTRF9DVExfSU9DRSB8CisJCSAgICAgICBMT0xBX0RTRF9DVExfREVJRSB8CisJCSAgICAgICBMT0xBX0RTRF9DVExfVkxSQ1YgfAorCQkgICAgICAgdHN0YW1wKTsKK30KKworc3RhdGljIHZvaWQgbG9sYV9zdHJlYW1fc3RvcChzdHJ1Y3QgbG9sYSAqY2hpcCwgc3RydWN0IGxvbGFfc3RyZWFtICpzdHIsCisJCQkgICAgIHVuc2lnbmVkIGludCB0c3RhbXApCit7CisJbG9sYV9kc2Rfd3JpdGUoY2hpcCwgc3RyLT5kc2QsIENUTCwKKwkJICAgICAgIExPTEFfRFNEX0NUTF9JT0NFIHwKKwkJICAgICAgIExPTEFfRFNEX0NUTF9ERUlFIHwKKwkJICAgICAgIExPTEFfRFNEX0NUTF9WTFJDViB8CisJCSAgICAgICB0c3RhbXApOworCWxvbGFfc3RyZWFtX2NsZWFyX3BlbmRpbmdfaXJxKGNoaXAsIHN0cik7Cit9CisKK3N0YXRpYyB2b2lkIHdhaXRfZm9yX3Nyc3RfY2xlYXIoc3RydWN0IGxvbGEgKmNoaXAsIHN0cnVjdCBsb2xhX3N0cmVhbSAqc3RyKQoreworCXVuc2lnbmVkIGxvbmcgZW5kX3RpbWUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygyMDApOworCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBlbmRfdGltZSkpIHsKKwkJdW5zaWduZWQgaW50IHZhbDsKKwkJdmFsID0gbG9sYV9kc2RfcmVhZChjaGlwLCBzdHItPmRzZCwgQ1RMKTsKKwkJaWYgKCEodmFsICYgTE9MQV9EU0RfQ1RMX1NSU1QpKQorCQkJcmV0dXJuOworCQltc2xlZXAoMSk7CisJfQorCXByaW50ayhLRVJOX1dBUk5JTkcgU0ZYICJTUlNUIG5vdCBjbGVhciAoc3RyZWFtICVkKVxuIiwgc3RyLT5kc2QpOworfQorCitzdGF0aWMgaW50IGxvbGFfc3RyZWFtX3dhaXRfZm9yX2ZpZm8oc3RydWN0IGxvbGEgKmNoaXAsCisJCQkJICAgICBzdHJ1Y3QgbG9sYV9zdHJlYW0gKnN0ciwKKwkJCQkgICAgIGJvb2wgcmVhZHkpCit7CisJdW5zaWduZWQgaW50IHZhbCA9IHJlYWR5ID8gTE9MQV9EU0RfU1RTX0ZJRk9SRFkgOiAwOworCXVuc2lnbmVkIGxvbmcgZW5kX3RpbWUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygyMDApOworCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBlbmRfdGltZSkpIHsKKwkJdW5zaWduZWQgaW50IHJlZyA9IGxvbGFfZHNkX3JlYWQoY2hpcCwgc3RyLT5kc2QsIFNUUyk7CisJCWlmICgocmVnICYgTE9MQV9EU0RfU1RTX0ZJRk9SRFkpID09IHZhbCkKKwkJCXJldHVybiAwOworCQltc2xlZXAoMSk7CisJfQorCXByaW50ayhLRVJOX1dBUk5JTkcgU0ZYICJGSUZPIG5vdCByZWFkeSAoc3RyZWFtICVkKVxuIiwgc3RyLT5kc2QpOworCXJldHVybiAtRUlPOworfQorCisvKiBzeW5jIGZvciBGSUZPIHJlYWR5L2VtcHR5IGZvciBhbGwgbGlua2VkIHN0cmVhbXM7CisgKiBjbGVhciBwYXVzZWQgZmxhZyB3aGVuIEZJRk8gZ2V0cyByZWFkeSBhZ2FpbgorICovCitzdGF0aWMgaW50IGxvbGFfc3luY193YWl0X2Zvcl9maWZvKHN0cnVjdCBsb2xhICpjaGlwLAorCQkJCSAgIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgIGJvb2wgcmVhZHkpCit7CisJdW5zaWduZWQgaW50IHZhbCA9IHJlYWR5ID8gTE9MQV9EU0RfU1RTX0ZJRk9SRFkgOiAwOworCXVuc2lnbmVkIGxvbmcgZW5kX3RpbWUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygyMDApOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqczsKKwlpbnQgcGVuZGluZyA9IDA7CisKKwl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZW5kX3RpbWUpKSB7CisJCXBlbmRpbmcgPSAwOworCQlzbmRfcGNtX2dyb3VwX2Zvcl9lYWNoX2VudHJ5KHMsIHN1YnN0cmVhbSkgeworCQkJc3RydWN0IGxvbGFfc3RyZWFtICpzdHI7CisJCQlpZiAocy0+cGNtLT5jYXJkICE9IHN1YnN0cmVhbS0+cGNtLT5jYXJkKQorCQkJCWNvbnRpbnVlOworCQkJc3RyID0gbG9sYV9nZXRfc3RyZWFtKHMpOworCQkJaWYgKHN0ci0+cHJlcGFyZWQgJiYgc3RyLT5wYXVzZWQpIHsKKwkJCQl1bnNpZ25lZCBpbnQgcmVnOworCQkJCXJlZyA9IGxvbGFfZHNkX3JlYWQoY2hpcCwgc3RyLT5kc2QsIFNUUyk7CisJCQkJaWYgKChyZWcgJiBMT0xBX0RTRF9TVFNfRklGT1JEWSkgIT0gdmFsKSB7CisJCQkJCXBlbmRpbmcgPSBzdHItPmRzZCArIDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAocmVhZHkpCisJCQkJCXN0ci0+cGF1c2VkID0gMDsKKwkJCX0KKwkJfQorCQlpZiAoIXBlbmRpbmcpCisJCQlyZXR1cm4gMDsKKwkJbXNsZWVwKDEpOworCX0KKwlwcmludGsoS0VSTl9XQVJOSU5HIFNGWCAiRklGTyBub3QgcmVhZHkgKHBlbmRpbmcgJWQpXG4iLCBwZW5kaW5nIC0gMSk7CisJcmV0dXJuIC1FSU87Cit9CisKKy8qIGZpbmlzaCBwYXVzZSAtIHByZXBhcmUgZm9yIGEgbmV3IHJlc3VtZSAqLworc3RhdGljIHZvaWQgbG9sYV9zeW5jX3BhdXNlKHN0cnVjdCBsb2xhICpjaGlwLAorCQkJICAgIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqczsKKworCWxvbGFfc3luY193YWl0X2Zvcl9maWZvKGNoaXAsIHN1YnN0cmVhbSwgZmFsc2UpOworCXNuZF9wY21fZ3JvdXBfZm9yX2VhY2hfZW50cnkocywgc3Vic3RyZWFtKSB7CisJCXN0cnVjdCBsb2xhX3N0cmVhbSAqc3RyOworCQlpZiAocy0+cGNtLT5jYXJkICE9IHN1YnN0cmVhbS0+cGNtLT5jYXJkKQorCQkJY29udGludWU7CisJCXN0ciA9IGxvbGFfZ2V0X3N0cmVhbShzKTsKKwkJaWYgKHN0ci0+cGF1c2VkICYmIHN0ci0+cHJlcGFyZWQpCisJCQlsb2xhX2RzZF93cml0ZShjaGlwLCBzdHItPmRzZCwgQ1RMLCBMT0xBX0RTRF9DVExfU1JVTiB8CisJCQkJICAgICAgIExPTEFfRFNEX0NUTF9JT0NFIHwgTE9MQV9EU0RfQ1RMX0RFSUUpOworCX0KKwlsb2xhX3N5bmNfd2FpdF9mb3JfZmlmbyhjaGlwLCBzdWJzdHJlYW0sIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBsb2xhX3N0cmVhbV9yZXNldChzdHJ1Y3QgbG9sYSAqY2hpcCwgc3RydWN0IGxvbGFfc3RyZWFtICpzdHIpCit7CisJaWYgKHN0ci0+cHJlcGFyZWQpIHsKKwkJaWYgKHN0ci0+cGF1c2VkKQorCQkJbG9sYV9zeW5jX3BhdXNlKGNoaXAsIHN0ci0+c3Vic3RyZWFtKTsKKwkJc3RyLT5wcmVwYXJlZCA9IDA7CisJCWxvbGFfZHNkX3dyaXRlKGNoaXAsIHN0ci0+ZHNkLCBDVEwsCisJCQkgICAgICAgTE9MQV9EU0RfQ1RMX0lPQ0UgfCBMT0xBX0RTRF9DVExfREVJRSk7CisJCWxvbGFfc3RyZWFtX3dhaXRfZm9yX2ZpZm8oY2hpcCwgc3RyLCBmYWxzZSk7CisJCWxvbGFfc3RyZWFtX2NsZWFyX3BlbmRpbmdfaXJxKGNoaXAsIHN0cik7CisJCWxvbGFfZHNkX3dyaXRlKGNoaXAsIHN0ci0+ZHNkLCBDVEwsIExPTEFfRFNEX0NUTF9TUlNUKTsKKwkJbG9sYV9kc2Rfd3JpdGUoY2hpcCwgc3RyLT5kc2QsIExWSSwgMCk7CisJCWxvbGFfZHNkX3dyaXRlKGNoaXAsIHN0ci0+ZHNkLCBCRFBVLCAwKTsKKwkJbG9sYV9kc2Rfd3JpdGUoY2hpcCwgc3RyLT5kc2QsIEJEUEwsIDApOworCQl3YWl0X2Zvcl9zcnN0X2NsZWFyKGNoaXAsIHN0cik7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgbG9sYV9wY21faHcgPSB7CisJLmluZm8gPQkJCShTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJCQkgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQkJCSBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCQkJIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAorCQkJCSBTTkRSVl9QQ01fSU5GT19QQVVTRSksCisJLmZvcm1hdHMgPQkJKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwKKwkJCQkgU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfAorCQkJCSBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSB8CisJCQkJIFNORFJWX1BDTV9GTVRCSVRfRkxPQVRfTEUpLAorCS5yYXRlcyA9CQlTTkRSVl9QQ01fUkFURV84MDAwXzE5MjAwMCwKKwkucmF0ZV9taW4gPQkJODAwMCwKKwkucmF0ZV9tYXggPQkJMTkyMDAwLAorCS5jaGFubmVsc19taW4gPQkJMSwKKwkuY2hhbm5lbHNfbWF4ID0JCTIsCisJLmJ1ZmZlcl9ieXRlc19tYXggPQlMT0xBX01BWF9CVUZfU0laRSwKKwkucGVyaW9kX2J5dGVzX21pbiA9CTEyOCwKKwkucGVyaW9kX2J5dGVzX21heCA9CUxPTEFfTUFYX0JVRl9TSVpFIC8gMiwKKwkucGVyaW9kc19taW4gPQkJMiwKKwkucGVyaW9kc19tYXggPQkJTE9MQV9NQVhfQkRMX0VOVFJJRVMsCisJLmZpZm9fc2l6ZSA9CQkwLAorfTsKKworc3RhdGljIGludCBsb2xhX3BjbV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBsb2xhICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBsb2xhX3BjbSAqcGNtID0gbG9sYV9nZXRfcGNtKHN1YnN0cmVhbSk7CisJc3RydWN0IGxvbGFfc3RyZWFtICpzdHIgPSBsb2xhX2dldF9zdHJlYW0oc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCisJbXV0ZXhfbG9jaygmY2hpcC0+b3Blbl9tdXRleCk7CisJaWYgKHN0ci0+b3BlbmVkKSB7CisJCW11dGV4X3VubG9jaygmY2hpcC0+b3Blbl9tdXRleCk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCXN0ci0+c3Vic3RyZWFtID0gc3Vic3RyZWFtOworCXN0ci0+bWFzdGVyID0gTlVMTDsKKwlzdHItPm9wZW5lZCA9IDE7CisJcnVudGltZS0+aHcgPSBsb2xhX3BjbV9odzsKKwlydW50aW1lLT5ody5jaGFubmVsc19tYXggPSBwY20tPm51bV9zdHJlYW1zIC0gc3RyLT5pbmRleDsKKwlpZiAoY2hpcC0+c2FtcGxlX3JhdGUpIHsKKwkJLyogc2FtcGxlIHJhdGUgaXMgbG9ja2VkICovCisJCXJ1bnRpbWUtPmh3LnJhdGVfbWluID0gY2hpcC0+c2FtcGxlX3JhdGU7CisJCXJ1bnRpbWUtPmh3LnJhdGVfbWF4ID0gY2hpcC0+c2FtcGxlX3JhdGU7CisJfSBlbHNlIHsKKwkJcnVudGltZS0+aHcucmF0ZV9taW4gPSBjaGlwLT5zYW1wbGVfcmF0ZV9taW47CisJCXJ1bnRpbWUtPmh3LnJhdGVfbWF4ID0gY2hpcC0+c2FtcGxlX3JhdGVfbWF4OworCX0KKwljaGlwLT5yZWZfY291bnRfcmF0ZSsrOworCXNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKTsKKwkvKiBwZXJpb2Qgc2l6ZSA9IG11bHRpcGxlIG9mIGNoaXAtPmdyYW51bGFyaXR5ICg4LCAxNiBvciAzMiBmcmFtZXMpKi8KKwlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfc3RlcChydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fQlVGRkVSX1NJWkUsCisJCQkJICAgY2hpcC0+Z3JhbnVsYXJpdHkpOworCXNuZF9wY21faHdfY29uc3RyYWludF9zdGVwKHJ1bnRpbWUsIDAsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RfU0laRSwKKwkJCQkgICBjaGlwLT5ncmFudWxhcml0eSk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5vcGVuX211dGV4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbG9sYV9jbGVhbnVwX3NsYXZlX3N0cmVhbXMoc3RydWN0IGxvbGFfcGNtICpwY20sCisJCQkJICAgICAgIHN0cnVjdCBsb2xhX3N0cmVhbSAqc3RyKQoreworCWludCBpOworCWZvciAoaSA9IHN0ci0+aW5kZXggKyAxOyBpIDwgcGNtLT5udW1fc3RyZWFtczsgaSsrKSB7CisJCXN0cnVjdCBsb2xhX3N0cmVhbSAqcyA9ICZwY20tPnN0cmVhbXNbaV07CisJCWlmIChzLT5tYXN0ZXIgIT0gc3RyKQorCQkJYnJlYWs7CisJCXMtPm1hc3RlciA9IE5VTEw7CisJCXMtPm9wZW5lZCA9IDA7CisJfQorfQorCitzdGF0aWMgaW50IGxvbGFfcGNtX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBsb2xhICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBsb2xhX3N0cmVhbSAqc3RyID0gbG9sYV9nZXRfc3RyZWFtKHN1YnN0cmVhbSk7CisKKwltdXRleF9sb2NrKCZjaGlwLT5vcGVuX211dGV4KTsKKwlpZiAoc3RyLT5zdWJzdHJlYW0gPT0gc3Vic3RyZWFtKSB7CisJCXN0ci0+c3Vic3RyZWFtID0gTlVMTDsKKwkJc3RyLT5vcGVuZWQgPSAwOworCX0KKwlpZiAoLS1jaGlwLT5yZWZfY291bnRfcmF0ZSA9PSAwKSB7CisJCS8qIHJlbGVhc2Ugc2FtcGxlIHJhdGUgKi8KKwkJY2hpcC0+c2FtcGxlX3JhdGUgPSAwOworCX0KKwltdXRleF91bmxvY2soJmNoaXAtPm9wZW5fbXV0ZXgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvbGFfcGNtX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQoreworCXN0cnVjdCBsb2xhX3N0cmVhbSAqc3RyID0gbG9sYV9nZXRfc3RyZWFtKHN1YnN0cmVhbSk7CisKKwlzdHItPmJ1ZnNpemUgPSAwOworCXN0ci0+cGVyaW9kX2J5dGVzID0gMDsKKwlzdHItPmZvcm1hdF92ZXJiID0gMDsKKwlyZXR1cm4gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwKKwkJCQkJcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKK30KKworc3RhdGljIGludCBsb2xhX3BjbV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBsb2xhICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBsb2xhX3BjbSAqcGNtID0gbG9sYV9nZXRfcGNtKHN1YnN0cmVhbSk7CisJc3RydWN0IGxvbGFfc3RyZWFtICpzdHIgPSBsb2xhX2dldF9zdHJlYW0oc3Vic3RyZWFtKTsKKworCW11dGV4X2xvY2soJmNoaXAtPm9wZW5fbXV0ZXgpOworCWxvbGFfc3RyZWFtX3Jlc2V0KGNoaXAsIHN0cik7CisJbG9sYV9jbGVhbnVwX3NsYXZlX3N0cmVhbXMocGNtLCBzdHIpOworCW11dGV4X3VubG9jaygmY2hpcC0+b3Blbl9tdXRleCk7CisJcmV0dXJuIHNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3Vic3RyZWFtKTsKK30KKworLyoKKyAqIHNldCB1cCBhIEJETCBlbnRyeQorICovCitzdGF0aWMgaW50IHNldHVwX2JkbGUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCSAgICAgIHN0cnVjdCBsb2xhX3N0cmVhbSAqc3RyLCB1MzIgKipiZGxwLAorCQkgICAgICBpbnQgb2ZzLCBpbnQgc2l6ZSkKK3sKKwl1MzIgKmJkbCA9ICpiZGxwOworCisJd2hpbGUgKHNpemUgPiAwKSB7CisJCWRtYV9hZGRyX3QgYWRkcjsKKwkJaW50IGNodW5rOworCisJCWlmIChzdHItPmZyYWdzID49IExPTEFfTUFYX0JETF9FTlRSSUVTKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJYWRkciA9IHNuZF9wY21fc2didWZfZ2V0X2FkZHIoc3Vic3RyZWFtLCBvZnMpOworCQkvKiBwcm9ncmFtIHRoZSBhZGRyZXNzIGZpZWxkIG9mIHRoZSBCREwgZW50cnkgKi8KKwkJYmRsWzBdID0gY3B1X3RvX2xlMzIoKHUzMilhZGRyKTsKKwkJYmRsWzFdID0gY3B1X3RvX2xlMzIodXBwZXJfMzJfYml0cyhhZGRyKSk7CisJCS8qIHByb2dyYW0gdGhlIHNpemUgZmllbGQgb2YgdGhlIEJETCBlbnRyeSAqLworCQljaHVuayA9IHNuZF9wY21fc2didWZfZ2V0X2NodW5rX3NpemUoc3Vic3RyZWFtLCBvZnMsIHNpemUpOworCQliZGxbMl0gPSBjcHVfdG9fbGUzMihjaHVuayk7CisJCS8qIHByb2dyYW0gdGhlIElPQyB0byBlbmFibGUgaW50ZXJydXB0CisJCSAqIG9ubHkgd2hlbiB0aGUgd2hvbGUgZnJhZ21lbnQgaXMgcHJvY2Vzc2VkCisJCSAqLworCQlzaXplIC09IGNodW5rOworCQliZGxbM10gPSBzaXplID8gMCA6IGNwdV90b19sZTMyKDB4MDEpOworCQliZGwgKz0gNDsKKwkJc3RyLT5mcmFncysrOworCQlvZnMgKz0gY2h1bms7CisJfQorCSpiZGxwID0gYmRsOworCXJldHVybiBvZnM7Cit9CisKKy8qCisgKiBzZXQgdXAgQkRMIGVudHJpZXMKKyAqLworc3RhdGljIGludCBsb2xhX3NldHVwX3BlcmlvZHMoc3RydWN0IGxvbGEgKmNoaXAsIHN0cnVjdCBsb2xhX3BjbSAqcGNtLAorCQkJICAgICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgICBzdHJ1Y3QgbG9sYV9zdHJlYW0gKnN0cikKK3sKKwl1MzIgKmJkbDsKKwlpbnQgaSwgb2ZzLCBwZXJpb2RzLCBwZXJpb2RfYnl0ZXM7CisKKwlwZXJpb2RfYnl0ZXMgPSBzdHItPnBlcmlvZF9ieXRlczsKKwlwZXJpb2RzID0gc3RyLT5idWZzaXplIC8gcGVyaW9kX2J5dGVzOworCisJLyogcHJvZ3JhbSB0aGUgaW5pdGlhbCBCREwgZW50cmllcyAqLworCWJkbCA9ICh1MzIgKikocGNtLT5iZGwuYXJlYSArIExPTEFfQkRMX0VOVFJZX1NJWkUgKiBzdHItPmluZGV4KTsKKwlvZnMgPSAwOworCXN0ci0+ZnJhZ3MgPSAwOworCWZvciAoaSA9IDA7IGkgPCBwZXJpb2RzOyBpKyspIHsKKwkJb2ZzID0gc2V0dXBfYmRsZShzdWJzdHJlYW0sIHN0ciwgJmJkbCwgb2ZzLCBwZXJpb2RfYnl0ZXMpOworCQlpZiAob2ZzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJfQorCXJldHVybiAwOworCisgZXJyb3I6CisJc25kX3ByaW50ayhLRVJOX0VSUiBTRlggIlRvbyBtYW55IEJETCBlbnRyaWVzOiBidWZmZXI9JWQsIHBlcmlvZD0lZFxuIiwKKwkJICAgc3RyLT5idWZzaXplLCBwZXJpb2RfYnl0ZXMpOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGxvbGFfZ2V0X2Zvcm1hdF92ZXJiKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXVuc2lnbmVkIGludCB2ZXJiOworCisJc3dpdGNoIChzdWJzdHJlYW0tPnJ1bnRpbWUtPmZvcm1hdCkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCXZlcmIgPSAweDAwMDAwMDAwOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOgorCQl2ZXJiID0gMHgwMDAwMDIwMDsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKKwkJdmVyYiA9IDB4MDAwMDAzMDA7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9GTE9BVF9MRToKKwkJdmVyYiA9IDB4MDAwMDEzMDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKwl2ZXJiIHw9IHN1YnN0cmVhbS0+cnVudGltZS0+Y2hhbm5lbHM7CisJcmV0dXJuIHZlcmI7Cit9CisKK3N0YXRpYyBpbnQgbG9sYV9zZXRfc3RyZWFtX2NvbmZpZyhzdHJ1Y3QgbG9sYSAqY2hpcCwKKwkJCQkgIHN0cnVjdCBsb2xhX3N0cmVhbSAqc3RyLAorCQkJCSAgaW50IGNoYW5uZWxzKQoreworCWludCBpLCBlcnI7CisJdW5zaWduZWQgaW50IHZlcmIsIHZhbDsKKworCS8qIHNldCBmb3JtYXQgaW5mbyBmb3IgYWxsIGNoYW5uZWxzCisJICogKHdpdGggb25seSBvbmUgY29tbWFuZCBmb3IgdGhlIGZpcnN0IGNoYW5uZWwpCisJICovCisJZXJyID0gbG9sYV9jb2RlY19yZWFkKGNoaXAsIHN0ci0+bmlkLCBMT0xBX1ZFUkJfU0VUX1NUUkVBTV9GT1JNQVQsCisJCQkgICAgICBzdHItPmZvcm1hdF92ZXJiLCAwLCAmdmFsLCBOVUxMKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgU0ZYICJDYW5ub3Qgc2V0IHN0cmVhbSBmb3JtYXQgMHgleFxuIiwKKwkJICAgICAgIHN0ci0+Zm9ybWF0X3ZlcmIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIHVwZGF0ZSBzdHJlYW0gLSBjaGFubmVsIGNvbmZpZyAqLworCWZvciAoaSA9IDA7IGkgPCBjaGFubmVsczsgaSsrKSB7CisJCXZlcmIgPSAoc3RyLT5pbmRleCA8PCA2KSB8IGk7CisJCWVyciA9IGxvbGFfY29kZWNfcmVhZChjaGlwLCBzdHJbaV0ubmlkLAorCQkJCSAgICAgIExPTEFfVkVSQl9TRVRfQ0hBTk5FTF9TVFJFQU1JRCwgMCwgdmVyYiwKKwkJCQkgICAgICAmdmFsLCBOVUxMKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiBTRlggIkNhbm5vdCBzZXQgc3RyZWFtIGNoYW5uZWwgJWRcbiIsIGkpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHNldCB1cCB0aGUgU0QgZm9yIHN0cmVhbWluZworICovCitzdGF0aWMgaW50IGxvbGFfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3QgbG9sYSAqY2hpcCwgc3RydWN0IGxvbGFfcGNtICpwY20sCisJCQkJIHN0cnVjdCBsb2xhX3N0cmVhbSAqc3RyKQoreworCWRtYV9hZGRyX3QgYmRsOworCisJaWYgKHN0ci0+cHJlcGFyZWQpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogc2V0IHVwIEJETCAqLworCWJkbCA9IHBjbS0+YmRsLmFkZHIgKyBMT0xBX0JETF9FTlRSWV9TSVpFICogc3RyLT5pbmRleDsKKwlsb2xhX2RzZF93cml0ZShjaGlwLCBzdHItPmRzZCwgQkRQTCwgKHUzMiliZGwpOworCWxvbGFfZHNkX3dyaXRlKGNoaXAsIHN0ci0+ZHNkLCBCRFBVLCB1cHBlcl8zMl9iaXRzKGJkbCkpOworCS8qIHByb2dyYW0gdGhlIHN0cmVhbSBMVkkgKGxhc3QgdmFsaWQgaW5kZXgpIG9mIHRoZSBCREwgKi8KKwlsb2xhX2RzZF93cml0ZShjaGlwLCBzdHItPmRzZCwgTFZJLCBzdHItPmZyYWdzIC0gMSk7CisJbG9sYV9zdHJlYW1fY2xlYXJfcGVuZGluZ19pcnEoY2hpcCwgc3RyKTsKKworIAlsb2xhX2RzZF93cml0ZShjaGlwLCBzdHItPmRzZCwgQ1RMLAorCQkgICAgICAgTE9MQV9EU0RfQ1RMX0lPQ0UgfCBMT0xBX0RTRF9DVExfREVJRSB8IExPTEFfRFNEX0NUTF9TUlVOKTsKKworCXN0ci0+cHJlcGFyZWQgPSAxOworCisJcmV0dXJuIGxvbGFfc3RyZWFtX3dhaXRfZm9yX2ZpZm8oY2hpcCwgc3RyLCB0cnVlKTsKK30KKworc3RhdGljIGludCBsb2xhX3BjbV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBsb2xhICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBsb2xhX3BjbSAqcGNtID0gbG9sYV9nZXRfcGNtKHN1YnN0cmVhbSk7CisJc3RydWN0IGxvbGFfc3RyZWFtICpzdHIgPSBsb2xhX2dldF9zdHJlYW0oc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXVuc2lnbmVkIGludCBidWZzaXplLCBwZXJpb2RfYnl0ZXMsIGZvcm1hdF92ZXJiOworCWludCBpLCBlcnI7CisKKwltdXRleF9sb2NrKCZjaGlwLT5vcGVuX211dGV4KTsKKwlsb2xhX3N0cmVhbV9yZXNldChjaGlwLCBzdHIpOworCWxvbGFfY2xlYW51cF9zbGF2ZV9zdHJlYW1zKHBjbSwgc3RyKTsKKwlpZiAoc3RyLT5pbmRleCArIHJ1bnRpbWUtPmNoYW5uZWxzID4gcGNtLT5udW1fc3RyZWFtcykgeworCQltdXRleF91bmxvY2soJmNoaXAtPm9wZW5fbXV0ZXgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZm9yIChpID0gMTsgaSA8IHJ1bnRpbWUtPmNoYW5uZWxzOyBpKyspIHsKKwkJc3RyW2ldLm1hc3RlciA9IHN0cjsKKwkJc3RyW2ldLm9wZW5lZCA9IDE7CisJfQorCW11dGV4X3VubG9jaygmY2hpcC0+b3Blbl9tdXRleCk7CisKKwlidWZzaXplID0gc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSk7CisJcGVyaW9kX2J5dGVzID0gc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSk7CisJZm9ybWF0X3ZlcmIgPSBsb2xhX2dldF9mb3JtYXRfdmVyYihzdWJzdHJlYW0pOworCisJc3RyLT5idWZzaXplID0gYnVmc2l6ZTsKKwlzdHItPnBlcmlvZF9ieXRlcyA9IHBlcmlvZF9ieXRlczsKKwlzdHItPmZvcm1hdF92ZXJiID0gZm9ybWF0X3ZlcmI7CisKKwllcnIgPSBsb2xhX3NldHVwX3BlcmlvZHMoY2hpcCwgcGNtLCBzdWJzdHJlYW0sIHN0cik7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBsb2xhX3NldF9zYW1wbGVfcmF0ZShjaGlwLCBydW50aW1lLT5yYXRlKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwljaGlwLT5zYW1wbGVfcmF0ZSA9IHJ1bnRpbWUtPnJhdGU7CS8qIHNhbXBsZSByYXRlIGdldHMgbG9ja2VkICovCisKKwllcnIgPSBsb2xhX3NldF9zdHJlYW1fY29uZmlnKGNoaXAsIHN0ciwgcnVudGltZS0+Y2hhbm5lbHMpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gbG9sYV9zZXR1cF9jb250cm9sbGVyKGNoaXAsIHBjbSwgc3RyKTsKKwlpZiAoZXJyIDwgMCkgeworCQlsb2xhX3N0cmVhbV9yZXNldChjaGlwLCBzdHIpOworCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvbGFfcGNtX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCit7CisJc3RydWN0IGxvbGEgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IGxvbGFfc3RyZWFtICpzdHI7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzOworCXVuc2lnbmVkIGludCBzdGFydDsKKwl1bnNpZ25lZCBpbnQgdHN0YW1wOworCWJvb2wgc3luY19zdHJlYW1zOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKKwkJc3RhcnQgPSAxOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwkJc3RhcnQgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIHNhbXBsZSBjb3JyZWN0IHN5bmNocm9uaXphdGlvbiBpcyBvbmx5IG5lZWRlZCBzdGFydGluZyBzZXZlcmFsCisJICogc3RyZWFtcy4gT24gc3RvcCBvciBpZiBvbmx5IG9uZSBzdHJlYW0gZG8gYXMgcXVpY2sgYXMgcG9zc2libGUKKwkgKi8KKwlzeW5jX3N0cmVhbXMgPSAoc3RhcnQgJiYgc25kX3BjbV9zdHJlYW1fbGlua2VkKHN1YnN0cmVhbSkpOworCXRzdGFtcCA9IGxvbGFfZ2V0X3RzdGFtcChjaGlwLCAhc3luY19zdHJlYW1zKTsKKwlzcGluX2xvY2soJmNoaXAtPnJlZ19sb2NrKTsKKwlzbmRfcGNtX2dyb3VwX2Zvcl9lYWNoX2VudHJ5KHMsIHN1YnN0cmVhbSkgeworCQlpZiAocy0+cGNtLT5jYXJkICE9IHN1YnN0cmVhbS0+cGNtLT5jYXJkKQorCQkJY29udGludWU7CisJCXN0ciA9IGxvbGFfZ2V0X3N0cmVhbShzKTsKKwkJaWYgKHN0YXJ0KQorCQkJbG9sYV9zdHJlYW1fc3RhcnQoY2hpcCwgc3RyLCB0c3RhbXApOworCQllbHNlCisJCQlsb2xhX3N0cmVhbV9zdG9wKGNoaXAsIHN0ciwgdHN0YW1wKTsKKwkJc3RyLT5ydW5uaW5nID0gc3RhcnQ7CisJCXN0ci0+cGF1c2VkID0gIXN0YXJ0OworCQlzbmRfcGNtX3RyaWdnZXJfZG9uZShzLCBzdWJzdHJlYW0pOworCX0KKwlzcGluX3VubG9jaygmY2hpcC0+cmVnX2xvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QgbG9sYV9wY21fcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgbG9sYSAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3QgbG9sYV9zdHJlYW0gKnN0ciA9IGxvbGFfZ2V0X3N0cmVhbShzdWJzdHJlYW0pOworCXVuc2lnbmVkIGludCBwb3MgPSBsb2xhX2RzZF9yZWFkKGNoaXAsIHN0ci0+ZHNkLCBMUElCKTsKKworCWlmIChwb3MgPj0gc3RyLT5idWZzaXplKQorCQlwb3MgPSAwOworCXJldHVybiBieXRlc190b19mcmFtZXMoc3Vic3RyZWFtLT5ydW50aW1lLCBwb3MpOworfQorCit2b2lkIGxvbGFfcGNtX3VwZGF0ZShzdHJ1Y3QgbG9sYSAqY2hpcCwgc3RydWN0IGxvbGFfcGNtICpwY20sIHVuc2lnbmVkIGludCBiaXRzKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgYml0cyAmJiBpIDwgcGNtLT5udW1fc3RyZWFtczsgaSsrKSB7CisJCWlmIChiaXRzICYgKDEgPDwgaSkpIHsKKwkJCXN0cnVjdCBsb2xhX3N0cmVhbSAqc3RyID0gJnBjbS0+c3RyZWFtc1tpXTsKKwkJCWlmIChzdHItPnN1YnN0cmVhbSAmJiBzdHItPnJ1bm5pbmcpCisJCQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdHItPnN1YnN0cmVhbSk7CisJCQliaXRzICY9IH4oMSA8PCBpKTsKKwkJfQorCX0KK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBsb2xhX3BjbV9vcHMgPSB7CisJLm9wZW4gPSBsb2xhX3BjbV9vcGVuLAorCS5jbG9zZSA9IGxvbGFfcGNtX2Nsb3NlLAorCS5pb2N0bCA9IHNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMgPSBsb2xhX3BjbV9od19wYXJhbXMsCisJLmh3X2ZyZWUgPSBsb2xhX3BjbV9od19mcmVlLAorCS5wcmVwYXJlID0gbG9sYV9wY21fcHJlcGFyZSwKKwkudHJpZ2dlciA9IGxvbGFfcGNtX3RyaWdnZXIsCisJLnBvaW50ZXIgPSBsb2xhX3BjbV9wb2ludGVyLAorCS5wYWdlID0gc25kX3BjbV9zZ2J1Zl9vcHNfcGFnZSwKK307CisKK2ludCBfX2RldmluaXQgbG9sYV9jcmVhdGVfcGNtKHN0cnVjdCBsb2xhICpjaGlwKQoreworCXN0cnVjdCBzbmRfcGNtICpwY207CisJaW50IGksIGVycjsKKworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJZXJyID0gc25kX2RtYV9hbGxvY19wYWdlcyhTTkRSVl9ETUFfVFlQRV9ERVYsCisJCQkJCSAgc25kX2RtYV9wY2lfZGF0YShjaGlwLT5wY2kpLAorCQkJCQkgIFBBR0VfU0laRSwgJmNoaXAtPnBjbVtpXS5iZGwpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gc25kX3BjbV9uZXcoY2hpcC0+Y2FyZCwgIkRpZ2lncmFtIExvbGEiLCAwLAorCQkJICBjaGlwLT5wY21bU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10ubnVtX3N0cmVhbXMsCisJCQkgIGNoaXAtPnBjbVtTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLm51bV9zdHJlYW1zLAorCQkJICAmcGNtKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlzdHJsY3B5KHBjbS0+bmFtZSwgIkRpZ2lncmFtIExvbGEiLCBzaXplb2YocGNtLT5uYW1lKSk7CisJcGNtLT5wcml2YXRlX2RhdGEgPSBjaGlwOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJaWYgKGNoaXAtPnBjbVtpXS5udW1fc3RyZWFtcykKKwkJCXNuZF9wY21fc2V0X29wcyhwY20sIGksICZsb2xhX3BjbV9vcHMpOworCX0KKwkvKiBidWZmZXIgcHJlLWFsbG9jYXRpb24gKi8KKwlzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHBjbSwgU05EUlZfRE1BX1RZUEVfREVWX1NHLAorCQkJCQkgICAgICBzbmRfZG1hX3BjaV9kYXRhKGNoaXAtPnBjaSksCisJCQkJCSAgICAgIDEwMjQgKiA2NCwgMzIgKiAxMDI0ICogMTAyNCk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbG9sYV9mcmVlX3BjbShzdHJ1Y3QgbG9sYSAqY2hpcCkKK3sKKwlzbmRfZG1hX2ZyZWVfcGFnZXMoJmNoaXAtPnBjbVswXS5iZGwpOworCXNuZF9kbWFfZnJlZV9wYWdlcygmY2hpcC0+cGNtWzFdLmJkbCk7Cit9CisKKy8qCisgKi8KKworc3RhdGljIGludCBsb2xhX2luaXRfc3RyZWFtKHN0cnVjdCBsb2xhICpjaGlwLCBzdHJ1Y3QgbG9sYV9zdHJlYW0gKnN0ciwKKwkJCSAgICBpbnQgaWR4LCBpbnQgbmlkLCBpbnQgZGlyKQoreworCXVuc2lnbmVkIGludCB2YWw7CisJaW50IGVycjsKKworCXN0ci0+bmlkID0gbmlkOworCXN0ci0+aW5kZXggPSBpZHg7CisJc3RyLT5kc2QgPSBpZHg7CisJaWYgKGRpciA9PSBQTEFZKQorCQlzdHItPmRzZCArPSBNQVhfU1RSRUFNX0lOX0NPVU5UOworCWVyciA9IGxvbGFfcmVhZF9wYXJhbShjaGlwLCBuaWQsIExPTEFfUEFSX0FVRElPX1dJREdFVF9DQVAsICZ2YWwpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBTRlggIkNhbid0IHJlYWQgd2NhcHMgZm9yIDB4JXhcbiIsIG5pZCk7CisJCXJldHVybiBlcnI7CisJfQorCWlmIChkaXIgPT0gUExBWSkgeworCQkvKiB0ZXN0IFRZUEUgYW5kIGJpdHMgMC4uMTEgKG5vIHRlc3QgYml0OSA6IERpZ2l0YWwgPSAwLzEpICovCisJCWlmICgodmFsICYgMHgwMGYwMGRmZikgIT0gMHgwMDAwMDAxMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSIFNGWCAiSW52YWxpZCB3Y2FwcyAweCV4IGZvciAweCV4XG4iLAorCQkJICAgICAgIHZhbCwgbmlkKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlIHsKKwkJLyogdGVzdCBUWVBFIGFuZCBiaXRzIDAuLjExIChubyB0ZXN0IGJpdDkgOiBEaWdpdGFsID0gMC8xKQorCQkgKiAoYnVnIDogaWdub3JlIGJpdDg6IENvbm4gbGlzdCA9IDAvMSkKKwkJICovCisJCWlmICgodmFsICYgMHgwMGYwMGNmZikgIT0gMHgwMDEwMDAxMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSIFNGWCAiSW52YWxpZCB3Y2FwcyAweCV4IGZvciAweCV4XG4iLAorCQkJICAgICAgIHZhbCwgbmlkKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCS8qIHRlc3QgYml0OTpESUdJVEFMIGFuZCBiaXQxMjpTUkNfUFJFU0VOVCovCisJCWlmICgodmFsICYgMHgwMDAwMTIwMCkgPT0gMHgwMDAwMTIwMCkKKwkJCWNoaXAtPmlucHV0X3NyY19jYXBzX21hc2sgfD0gKDEgPDwgaWR4KTsKKwl9CisKKwllcnIgPSBsb2xhX3JlYWRfcGFyYW0oY2hpcCwgbmlkLCBMT0xBX1BBUl9TVFJFQU1fRk9STUFUUywgJnZhbCk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFNGWCAiQ2FuJ3QgcmVhZCBGT1JNQVRTIDB4JXhcbiIsIG5pZCk7CisJCXJldHVybiBlcnI7CisJfQorCXZhbCAmPSAzOworCWlmICh2YWwgPT0gMykKKwkJc3RyLT5jYW5fZmxvYXQgPSB0cnVlOworCWlmICghKHZhbCAmIDEpKSB7CisJCXByaW50ayhLRVJOX0VSUiBTRlggIkludmFsaWQgZm9ybWF0cyAweCV4IGZvciAweCV4IiwgdmFsLCBuaWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBfX2RldmluaXQgbG9sYV9pbml0X3BjbShzdHJ1Y3QgbG9sYSAqY2hpcCwgaW50IGRpciwgaW50ICpuaWRwKQoreworCXN0cnVjdCBsb2xhX3BjbSAqcGNtID0gJmNoaXAtPnBjbVtkaXJdOworCWludCBpLCBuaWQsIGVycjsKKworCW5pZCA9ICpuaWRwOworCWZvciAoaSA9IDA7IGkgPCBwY20tPm51bV9zdHJlYW1zOyBpKyssIG5pZCsrKSB7CisJCWVyciA9IGxvbGFfaW5pdF9zdHJlYW0oY2hpcCwgJnBjbS0+c3RyZWFtc1tpXSwgaSwgbmlkLCBkaXIpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCSpuaWRwID0gbmlkOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2xvbGEvbG9sYV9wcm9jLmMgYi9zb3VuZC9wY2kvbG9sYS9sb2xhX3Byb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDdkYWY4Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvcGNpL2xvbGEvbG9sYV9wcm9jLmMKQEAgLTAsMCArMSwyMjIgQEAKKy8qCisgKiAgU3VwcG9ydCBmb3IgRGlnaWdyYW0gTG9sYSBQQ0ktZSBib2FyZHMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDExIFRha2FzaGkgSXdhaSA8dGl3YWlAc3VzZS5kZT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorICogIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvaW5mby5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgImxvbGEuaCIKKworc3RhdGljIHZvaWQgcHJpbnRfYXVkaW9fd2lkZ2V0KHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlciwKKwkJCSAgICAgICBzdHJ1Y3QgbG9sYSAqY2hpcCwgaW50IG5pZCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJbG9sYV9yZWFkX3BhcmFtKGNoaXAsIG5pZCwgTE9MQV9QQVJfQVVESU9fV0lER0VUX0NBUCwgJnZhbCk7CisJc25kX2lwcmludGYoYnVmZmVyLCAiTm9kZSAweCUwMnggJXMgd2NhcHMgMHgleFxuIiwgbmlkLCBuYW1lLCB2YWwpOworCWxvbGFfcmVhZF9wYXJhbShjaGlwLCBuaWQsIExPTEFfUEFSX1NUUkVBTV9GT1JNQVRTLCAmdmFsKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICIgIEZvcm1hdHM6IDB4JXhcbiIsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3Bpbl93aWRnZXQoc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyLAorCQkJICAgICBzdHJ1Y3QgbG9sYSAqY2hpcCwgaW50IG5pZCwgdW5zaWduZWQgaW50IGFtcGNhcCwKKwkJCSAgICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJbG9sYV9yZWFkX3BhcmFtKGNoaXAsIG5pZCwgTE9MQV9QQVJfQVVESU9fV0lER0VUX0NBUCwgJnZhbCk7CisJc25kX2lwcmludGYoYnVmZmVyLCAiTm9kZSAweCUwMnggJXMgd2NhcHMgMHgleFxuIiwgbmlkLCBuYW1lLCB2YWwpOworCWlmICh2YWwgPT0gMHgwMDQwMDIwMCkKKwkJcmV0dXJuOworCWxvbGFfcmVhZF9wYXJhbShjaGlwLCBuaWQsIGFtcGNhcCwgJnZhbCk7CisJc25kX2lwcmludGYoYnVmZmVyLCAiICBBbXAtQ2FwczogMHgleFxuIiwgdmFsKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICIgICAgbXV0ZT0lZCwgc3RlcC1zaXplPSVkLCBzdGVwcz0lZCwgb2ZzPSVkXG4iLAorCQkgICAgTE9MQV9BTVBfTVVURV9DQVBBQkxFKHZhbCksCisJCSAgICBMT0xBX0FNUF9TVEVQX1NJWkUodmFsKSwKKwkJICAgIExPTEFfQU1QX05VTV9TVEVQUyh2YWwpLAorCQkgICAgTE9MQV9BTVBfT0ZGU0VUKHZhbCkpOworCWxvbGFfY29kZWNfcmVhZChjaGlwLCBuaWQsIExPTEFfVkVSQl9HRVRfTUFYX0xFVkVMLCAwLCAwLCAmdmFsLCBOVUxMKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICIgIE1heC1sZXZlbDogMHgleFxuIiwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfY2xvY2tfd2lkZ2V0KHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlciwKKwkJCSAgICAgICBzdHJ1Y3QgbG9sYSAqY2hpcCwgaW50IG5pZCkKK3sKKwlpbnQgaSwgaiwgbnVtX2Nsb2NrczsKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJbG9sYV9yZWFkX3BhcmFtKGNoaXAsIG5pZCwgTE9MQV9QQVJfQVVESU9fV0lER0VUX0NBUCwgJnZhbCk7CisJc25kX2lwcmludGYoYnVmZmVyLCAiTm9kZSAweCUwMnggW0Nsb2NrXSB3Y2FwcyAweCV4XG4iLCBuaWQsIHZhbCk7CisJbnVtX2Nsb2NrcyA9IHZhbCAmIDB4ZmY7CisJZm9yIChpID0gMDsgaSA8IG51bV9jbG9ja3M7IGkgKz0gNCkgeworCQl1bnNpZ25lZCBpbnQgcmVzX2V4OworCQl1bnNpZ25lZCBzaG9ydCBpdGVtc1s0XTsKKwkJY29uc3QgY2hhciAqbmFtZTsKKworCQlsb2xhX2NvZGVjX3JlYWQoY2hpcCwgbmlkLCBMT0xBX1ZFUkJfR0VUX0NMT0NLX0xJU1QsCisJCQkJaSwgMCwgJnZhbCwgJnJlc19leCk7CisJCWl0ZW1zWzBdID0gdmFsICYgMHhmZmY7CisJCWl0ZW1zWzFdID0gKHZhbCA+PiAxNikgJiAweGZmZjsKKwkJaXRlbXNbMl0gPSByZXNfZXggJiAweGZmZjsKKwkJaXRlbXNbM10gPSAocmVzX2V4ID4+IDE2KSAmIDB4ZmZmOworCQlmb3IgKGogPSAwOyBqIDwgNDsgaisrKSB7CisJCQl1bnNpZ25lZCBjaGFyIHR5cGUgPSBpdGVtc1tqXSA+PiA4OworCQkJdW5zaWduZWQgaW50IGZyZXEgPSBpdGVtc1tqXSAmIDB4ZmY7CisJCQlpZiAoaSArIGogPj0gbnVtX2Nsb2NrcykKKwkJCQlicmVhazsKKwkJCWlmICh0eXBlID09IExPTEFfQ0xPQ0tfVFlQRV9JTlRFUk5BTCkgeworCQkJCW5hbWUgPSAiSW50ZXJuYWwiOworCQkJCWZyZXEgPSBsb2xhX3NhbXBsZV9yYXRlX2NvbnZlcnQoZnJlcSk7CisJCQl9IGVsc2UgaWYgKHR5cGUgPT0gTE9MQV9DTE9DS19UWVBFX1ZJREVPKSB7CisJCQkJbmFtZSA9ICJWaWRlbyI7CisJCQkJZnJlcSA9IGxvbGFfc2FtcGxlX3JhdGVfY29udmVydChmcmVxKTsKKwkJCX0gZWxzZSB7CisJCQkJbmFtZSA9ICJPdGhlciI7CisJCQl9CisJCQlzbmRfaXByaW50ZihidWZmZXIsICIgIENsb2NrICVkOiBUeXBlICVkOiVzLCBmcmVxPSVkXG4iLAorCQkJCSAgICBpICsgaiwgdHlwZSwgbmFtZSwgZnJlcSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X21peGVyX3dpZGdldChzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIsCisJCQkgICAgICAgc3RydWN0IGxvbGEgKmNoaXAsIGludCBuaWQpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCWxvbGFfcmVhZF9wYXJhbShjaGlwLCBuaWQsIExPTEFfUEFSX0FVRElPX1dJREdFVF9DQVAsICZ2YWwpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIk5vZGUgMHglMDJ4IFtNaXhlcl0gd2NhcHMgMHgleFxuIiwgbmlkLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBsb2xhX3Byb2NfY29kZWNfcmVhZChzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5LAorCQkJCSBzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIpCit7CisJc3RydWN0IGxvbGEgKmNoaXAgPSBlbnRyeS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGludCB2YWw7CisJaW50IGksIG5pZDsKKworCWxvbGFfcmVhZF9wYXJhbShjaGlwLCAwLCBMT0xBX1BBUl9WRU5ET1JfSUQsICZ2YWwpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlZlbmRvcjogMHglMDh4XG4iLCB2YWwpOworCWxvbGFfcmVhZF9wYXJhbShjaGlwLCAxLCBMT0xBX1BBUl9GVU5DVElPTl9UWVBFLCAmdmFsKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICJGdW5jdGlvbiBUeXBlOiAlZFxuIiwgdmFsKTsKKwlsb2xhX3JlYWRfcGFyYW0oY2hpcCwgMSwgTE9MQV9QQVJfU1BFQ0lGSUNfQ0FQUywgJnZhbCk7CisJc25kX2lwcmludGYoYnVmZmVyLCAiU3BlY2lmaWMtQ2FwczogMHglMDh4XG4iLCB2YWwpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgUGlucy1JbiAlZCwgUGlucy1PdXQgJWRcbiIsCisJCSAgICBjaGlwLT5waW5bQ0FQVF0ubnVtX3BpbnMsIGNoaXAtPnBpbltQTEFZXS5udW1fcGlucyk7CisJbmlkID0gMjsKKwlmb3IgKGkgPSAwOyBpIDwgY2hpcC0+cGNtW0NBUFRdLm51bV9zdHJlYW1zOyBpKyssIG5pZCsrKQorCQlwcmludF9hdWRpb193aWRnZXQoYnVmZmVyLCBjaGlwLCBuaWQsICJbQXVkaW8tSW5dIik7CisJZm9yIChpID0gMDsgaSA8IGNoaXAtPnBjbVtQTEFZXS5udW1fc3RyZWFtczsgaSsrLCBuaWQrKykKKwkJcHJpbnRfYXVkaW9fd2lkZ2V0KGJ1ZmZlciwgY2hpcCwgbmlkLCAiW0F1ZGlvLU91dF0iKTsKKwlmb3IgKGkgPSAwOyBpIDwgY2hpcC0+cGluW0NBUFRdLm51bV9waW5zOyBpKyssIG5pZCsrKQorCQlwcmludF9waW5fd2lkZ2V0KGJ1ZmZlciwgY2hpcCwgbmlkLCBMT0xBX1BBUl9BTVBfSU5fQ0FQLAorCQkJCSAiW1Bpbi1Jbl0iKTsKKwlmb3IgKGkgPSAwOyBpIDwgY2hpcC0+cGluW1BMQVldLm51bV9waW5zOyBpKyssIG5pZCsrKQorCQlwcmludF9waW5fd2lkZ2V0KGJ1ZmZlciwgY2hpcCwgbmlkLCBMT0xBX1BBUl9BTVBfT1VUX0NBUCwKKwkJCQkgIltQaW4tT3V0XSIpOworCWlmIChMT0xBX0FGR19DTE9DS19XSURHRVRfUFJFU0VOVChjaGlwLT5sb2xhX2NhcHMpKSB7CisJCXByaW50X2Nsb2NrX3dpZGdldChidWZmZXIsIGNoaXAsIG5pZCk7CisJCW5pZCsrOworCX0KKwlpZiAoTE9MQV9BRkdfTUlYRVJfV0lER0VUX1BSRVNFTlQoY2hpcC0+bG9sYV9jYXBzKSkgeworCQlwcmludF9taXhlcl93aWRnZXQoYnVmZmVyLCBjaGlwLCBuaWQpOworCQluaWQrKzsKKwl9Cit9CisKKy8qIGRpcmVjdCBjb2RlYyBhY2Nlc3MgZm9yIGRlYnVnZ2luZyAqLworc3RhdGljIHZvaWQgbG9sYV9wcm9jX2NvZGVjX3J3X3dyaXRlKHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnksCisJCQkJICAgICBzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIpCit7CisJc3RydWN0IGxvbGEgKmNoaXAgPSBlbnRyeS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgbGluZVs2NF07CisJdW5zaWduZWQgaW50IGlkLCB2ZXJiLCBkYXRhLCBleHRkYXRhOworCXdoaWxlICghc25kX2luZm9fZ2V0X2xpbmUoYnVmZmVyLCBsaW5lLCBzaXplb2YobGluZSkpKSB7CisJCWlmIChzc2NhbmYobGluZSwgIiVpICVpICVpICVpIiwgJmlkLCAmdmVyYiwgJmRhdGEsICZleHRkYXRhKSAhPSA0KQorCQkJY29udGludWU7CisJCWxvbGFfY29kZWNfcmVhZChjaGlwLCBpZCwgdmVyYiwgZGF0YSwgZXh0ZGF0YSwKKwkJCQkmY2hpcC0+ZGVidWdfcmVzLAorCQkJCSZjaGlwLT5kZWJ1Z19yZXNfZXgpOworCX0KK30KKworc3RhdGljIHZvaWQgbG9sYV9wcm9jX2NvZGVjX3J3X3JlYWQoc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeSwKKwkJCQkgICAgc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKQoreworCXN0cnVjdCBsb2xhICpjaGlwID0gZW50cnktPnByaXZhdGVfZGF0YTsKKwlzbmRfaXByaW50ZihidWZmZXIsICIweCV4IDB4JXhcbiIsIGNoaXAtPmRlYnVnX3JlcywgY2hpcC0+ZGVidWdfcmVzX2V4KTsKK30KKworLyoKKyAqIGR1bXAgc29tZSByZWdpc3RlcnMKKyAqLworc3RhdGljIHZvaWQgbG9sYV9wcm9jX3JlZ3NfcmVhZChzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5LAorCQkJCXN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgbG9sYSAqY2hpcCA9IGVudHJ5LT5wcml2YXRlX2RhdGE7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMHg0MDsgaSArPSA0KSB7CisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkJBUjAgJTAyeDogJTA4eFxuIiwgaSwKKwkJCSAgICByZWFkbChjaGlwLT5iYXJbQkFSMF0ucmVtYXBfYWRkciArIGkpKTsKKwl9CisJc25kX2lwcmludGYoYnVmZmVyLCAiXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgMHgzMDsgaSArPSA0KSB7CisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkJBUjEgJTAyeDogJTA4eFxuIiwgaSwKKwkJCSAgICByZWFkbChjaGlwLT5iYXJbQkFSMV0ucmVtYXBfYWRkciArIGkpKTsKKwl9CisJc25kX2lwcmludGYoYnVmZmVyLCAiXG4iKTsKKwlmb3IgKGkgPSAweDgwOyBpIDwgMHhhMDsgaSArPSA0KSB7CisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkJBUjEgJTAyeDogJTA4eFxuIiwgaSwKKwkJCSAgICByZWFkbChjaGlwLT5iYXJbQkFSMV0ucmVtYXBfYWRkciArIGkpKTsKKwl9CisJc25kX2lwcmludGYoYnVmZmVyLCAiXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlzbmRfaXByaW50ZihidWZmZXIsICJEU0QgJTAyeCBTVFMgICUwOHhcbiIsIGksCisJCQkgICAgbG9sYV9kc2RfcmVhZChjaGlwLCBpLCBTVFMpKTsKKwkJc25kX2lwcmludGYoYnVmZmVyLCAiRFNEICUwMnggTFBJQiAlMDh4XG4iLCBpLAorCQkJICAgIGxvbGFfZHNkX3JlYWQoY2hpcCwgaSwgTFBJQikpOworCQlzbmRfaXByaW50ZihidWZmZXIsICJEU0QgJTAyeCBDVEwgICUwOHhcbiIsIGksCisJCQkgICAgbG9sYV9kc2RfcmVhZChjaGlwLCBpLCBDVEwpKTsKKwkJc25kX2lwcmludGYoYnVmZmVyLCAiRFNEICUwMnggTFZJTCAlMDh4XG4iLCBpLAorCQkJICAgIGxvbGFfZHNkX3JlYWQoY2hpcCwgaSwgTFZJKSk7CisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkRTRCAlMDJ4IEJEUEwgJTA4eFxuIiwgaSwKKwkJCSAgICBsb2xhX2RzZF9yZWFkKGNoaXAsIGksIEJEUEwpKTsKKwkJc25kX2lwcmludGYoYnVmZmVyLCAiRFNEICUwMnggQkRQVSAlMDh4XG4iLCBpLAorCQkJICAgIGxvbGFfZHNkX3JlYWQoY2hpcCwgaSwgQkRQVSkpOworCX0KK30KKwordm9pZCBfX2RldmluaXQgbG9sYV9wcm9jX2RlYnVnX25ldyhzdHJ1Y3QgbG9sYSAqY2hpcCkKK3sKKwlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5OworCisJaWYgKCFzbmRfY2FyZF9wcm9jX25ldyhjaGlwLT5jYXJkLCAiY29kZWMiLCAmZW50cnkpKQorCQlzbmRfaW5mb19zZXRfdGV4dF9vcHMoZW50cnksIGNoaXAsIGxvbGFfcHJvY19jb2RlY19yZWFkKTsKKwlpZiAoIXNuZF9jYXJkX3Byb2NfbmV3KGNoaXAtPmNhcmQsICJjb2RlY19ydyIsICZlbnRyeSkpIHsKKwkJc25kX2luZm9fc2V0X3RleHRfb3BzKGVudHJ5LCBjaGlwLCBsb2xhX3Byb2NfY29kZWNfcndfcmVhZCk7CisJCWVudHJ5LT5tb2RlIHw9IFNfSVdVU1I7CisJCWVudHJ5LT5jLnRleHQud3JpdGUgPSBsb2xhX3Byb2NfY29kZWNfcndfd3JpdGU7CisJfQorCWlmICghc25kX2NhcmRfcHJvY19uZXcoY2hpcC0+Y2FyZCwgInJlZ3MiLCAmZW50cnkpKQorCQlzbmRfaW5mb19zZXRfdGV4dF9vcHMoZW50cnksIGNoaXAsIGxvbGFfcHJvY19yZWdzX3JlYWQpOworfQpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL3R1bWJsZXIuYyBiL3NvdW5kL3BwYy90dW1ibGVyLmMKaW5kZXggOTYxZDk4Mi4uOWNlYTg0YyAxMDA2NDQKLS0tIGEvc291bmQvcHBjL3R1bWJsZXIuYworKysgYi9zb3VuZC9wcGMvdHVtYmxlci5jCkBAIC0xMDAwLDcgKzEwMDAsNyBAQAogCQkJCSAgIGNoaXAtPmxpbmVvdXRfc3dfY3RsKTsKIAkJaWYgKG1peC0+YW5kZWRfcmVzZXQpCiAJCQltc2xlZXAoMTApOwotCQljaGVja19tdXRlKGNoaXAsICZtaXgtPmFtcF9tdXRlLCAxLCBtaXgtPmF1dG9fbXV0ZV9ub3RpZnksCisJCWNoZWNrX211dGUoY2hpcCwgJm1peC0+YW1wX211dGUsICFJU19HNERBLCBtaXgtPmF1dG9fbXV0ZV9ub3RpZnksCiAJCQkgICBjaGlwLT5zcGVha2VyX3N3X2N0bCk7CiAJfSBlbHNlIHsKIAkJLyogdW5tdXRlIHNwZWFrZXIsIG11dGUgb3RoZXJzICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXRtZWwvc2FtOWcyMF93bTg3MzEuYyBiL3NvdW5kL3NvYy9hdG1lbC9zYW05ZzIwX3dtODczMS5jCmluZGV4IGFmM2M3MzAuLjI4YWZiYmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9hdG1lbC9zYW05ZzIwX3dtODczMS5jCisrKyBiL3NvdW5kL3NvYy9hdG1lbC9zYW05ZzIwX3dtODczMS5jCkBAIC0xODQsNyArMTg0LDcgQEAKIAkuY29kZWNfZGFpX25hbWUgPSAid204NzMxLWhpZmkiLAogCS5pbml0ID0gYXQ5MXNhbTlnMjBla193bTg3MzFfaW5pdCwKIAkucGxhdGZvcm1fbmFtZSA9ICJhdG1lbC1wY20tYXVkaW8iLAotCS5jb2RlY19uYW1lID0gIndtODczMS1jb2RlYy4wLTAwMWIiLAorCS5jb2RlY19uYW1lID0gIndtODczMS4wLTAwMWIiLAogCS5vcHMgPSAmYXQ5MXNhbTlnMjBla19vcHMsCiB9OwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXUxeC9kYjEyMDAuYyBiL3NvdW5kL3NvYy9hdTF4L2RiMTIwMC5jCmluZGV4IGNiOTlmMDQuLjFkM2UyNTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9hdTF4L2RiMTIwMC5jCisrKyBiL3NvdW5kL3NvYy9hdTF4L2RiMTIwMC5jCkBAIC03Nyw3ICs3Nyw3IEBACiAJLmNvZGVjX2RhaV9uYW1lCT0gIndtODczMS1oaWZpIiwKIAkuY3B1X2RhaV9uYW1lCT0gImF1MXhwc2NfaTJzLjEiLAogCS5wbGF0Zm9ybV9uYW1lCT0gImF1MXhwc2MtcGNtLjEiLAotCS5jb2RlY19uYW1lCT0gIndtODczMS1jb2RlYy4wLTAwMWIiLAorCS5jb2RlY19uYW1lCT0gIndtODczMS4wLTAwMWIiLAogCS5vcHMJCT0gJmRiMTIwMF9pMnNfd204NzMxX29wcywKIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LXBjbS5jIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTctcGNtLmMKaW5kZXggNWEyZmQ4YWJhLi45OGI0NGIzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny1wY20uYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny1wY20uYwpAQCAtMjQzLDYgKzI0Myw5IEBACiAKIHN0YXRpYyBpbnQgYmY1eHhfcGNtX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+Y3B1X2RhaTsKKwlzdHJ1Y3Qgc3BvcnRfZGV2aWNlICpzcG9ydF9oYW5kbGUgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShjcHVfZGFpKTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCWludCByZXQ7CiAKQEAgLTMxNCw2ICszMTcsOSBAQAogCiBzdGF0aWMgaW50IGJmNXh4X3BjbV9wcmVhbGxvY2F0ZV9kbWFfYnVmZmVyKHN0cnVjdCBzbmRfcGNtICpwY20sIGludCBzdHJlYW0pCiB7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHBjbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+Y3B1X2RhaTsKKwlzdHJ1Y3Qgc3BvcnRfZGV2aWNlICpzcG9ydF9oYW5kbGUgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShjcHVfZGFpKTsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9IHBjbS0+c3RyZWFtc1tzdHJlYW1dLnN1YnN0cmVhbTsKIAlzdHJ1Y3Qgc25kX2RtYV9idWZmZXIgKmJ1ZiA9ICZzdWJzdHJlYW0tPmRtYV9idWZmZXI7CiAJc2l6ZV90IHNpemUgPSBiZjV4eF9wY21faGFyZHdhcmUuYnVmZmVyX2J5dGVzX21heApAQCAtMzc3LDYgKzM4Myw5IEBACiAJc3RydWN0IHNuZF9kbWFfYnVmZmVyICpidWY7CiAJaW50IHN0cmVhbTsKICNpZiBkZWZpbmVkKENPTkZJR19TTkRfQkY1WFhfTU1BUF9TVVBQT1JUKQorCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBwY20tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmNwdV9kYWk7CisJc3RydWN0IHNwb3J0X2RldmljZSAqc3BvcnRfaGFuZGxlID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoY3B1X2RhaSk7CiAJc2l6ZV90IHNpemUgPSBiZjV4eF9wY21faGFyZHdhcmUuYnVmZmVyX2J5dGVzX21heCAqCiAJCXNpemVvZihzdHJ1Y3QgYWM5N19mcmFtZSkgLyA0OwogI2VuZGlmCkBAIC00MDUsOCArNDE0LDYgQEAKIAl9CiAjZW5kaWYKIAl9Ci0JaWYgKHNwb3J0X2hhbmRsZSkKLQkJc3BvcnRfZG9uZShzcG9ydF9oYW5kbGUpOwogfQogCiBzdGF0aWMgdTY0IGJmNXh4X3BjbV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKQEAgLTQ1OCw3ICs0NjUsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBiZjV4eF9wY21fZHJpdmVyID0gewogCS5kcml2ZXIgPSB7Ci0JCQkubmFtZSA9ICJiZjV4eC1wY20tYXVkaW8iLAorCQkJLm5hbWUgPSAiYmZpbi1hYzk3LXBjbS1hdWRpbyIsCiAJCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny5jIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTcuYwppbmRleCBmZmJhYzI2Li42ZDIxNjI1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LmMKQEAgLTQxLDQ4ICs0MSw3IEBACiAgKgkJYW5vbWFseSBkb2VzIG5vdCBhZmZlY3QgYmxhY2tmaW4gc291bmQgZHJpdmVycy4KICovCiAKLXN0YXRpYyBpbnQgKmNtZF9jb3VudDsKLXN0YXRpYyBpbnQgc3BvcnRfbnVtID0gQ09ORklHX1NORF9CRjVYWF9TUE9SVF9OVU07Ci0KLSNkZWZpbmUgU1BPUlRfUkVRKHgpIFwKLQlbeF0gPSB7UF9TUE9SVCMjeCMjX1RGUywgUF9TUE9SVCMjeCMjX0RUUFJJLCBQX1NQT1JUIyN4IyNfVFNDTEssIFwKLQkgICAgICAgUF9TUE9SVCMjeCMjX1JGUywgUF9TUE9SVCMjeCMjX0RSUFJJLCBQX1NQT1JUIyN4IyNfUlNDTEssIDB9Ci1zdGF0aWMgdTE2IHNwb3J0X3JlcVtdWzddID0gewotI2lmZGVmIFNQT1JUMF9UQ1IxCi0JU1BPUlRfUkVRKDApLAotI2VuZGlmCi0jaWZkZWYgU1BPUlQxX1RDUjEKLQlTUE9SVF9SRVEoMSksCi0jZW5kaWYKLSNpZmRlZiBTUE9SVDJfVENSMQotCVNQT1JUX1JFUSgyKSwKLSNlbmRpZgotI2lmZGVmIFNQT1JUM19UQ1IxCi0JU1BPUlRfUkVRKDMpLAotI2VuZGlmCi19OwotCi0jZGVmaW5lIFNQT1JUX1BBUkFNUyh4KSBcCi0JW3hdID0geyBcCi0JCS5kbWFfcnhfY2hhbiA9IENIX1NQT1JUIyN4IyNfUlgsIFwKLQkJLmRtYV90eF9jaGFuID0gQ0hfU1BPUlQjI3gjI19UWCwgXAotCQkuZXJyX2lycSAgICAgPSBJUlFfU1BPUlQjI3gjI19FUlJPUiwgXAotCQkucmVncyAgICAgICAgPSAoc3RydWN0IHNwb3J0X3JlZ2lzdGVyICopU1BPUlQjI3gjI19UQ1IxLCBcCi0JfQotc3RhdGljIHN0cnVjdCBzcG9ydF9wYXJhbSBzcG9ydF9wYXJhbXNbNF0gPSB7Ci0jaWZkZWYgU1BPUlQwX1RDUjEKLQlTUE9SVF9QQVJBTVMoMCksCi0jZW5kaWYKLSNpZmRlZiBTUE9SVDFfVENSMQotCVNQT1JUX1BBUkFNUygxKSwKLSNlbmRpZgotI2lmZGVmIFNQT1JUMl9UQ1IxCi0JU1BPUlRfUEFSQU1TKDIpLAotI2VuZGlmCi0jaWZkZWYgU1BPUlQzX1RDUjEKLQlTUE9SVF9QQVJBTVMoMyksCi0jZW5kaWYKLX07CitzdGF0aWMgc3RydWN0IHNwb3J0X2RldmljZSAqYWM5N19zcG9ydF9oYW5kbGU7CiAKIHZvaWQgYmY1eHhfcGNtX3RvX2FjOTcoc3RydWN0IGFjOTdfZnJhbWUgKmRzdCwgY29uc3QgX191MTYgKnNyYywKIAkJc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBpbnQgY2hhbl9tYXNrKQpAQCAtMTQwLDcgKzk5LDggQEAKIAogc3RhdGljIHZvaWQgZW5xdWV1ZV9jbWQoc3RydWN0IHNuZF9hYzk3ICphYzk3LCBfX3UxNiBhZGRyLCBfX3UxNiBkYXRhKQogewotCXN0cnVjdCBzcG9ydF9kZXZpY2UgKnNwb3J0ID0gc3BvcnRfaGFuZGxlOworCXN0cnVjdCBzcG9ydF9kZXZpY2UgKnNwb3J0ID0gYWM5N19zcG9ydF9oYW5kbGU7CisJaW50ICpjbWRfY291bnQgPSBzcG9ydC0+cHJpdmF0ZV9kYXRhOwogCWludCBuZXh0ZnJhZyA9IHNwb3J0X3R4X2N1cnJfZnJhZyhzcG9ydCk7CiAJc3RydWN0IGFjOTdfZnJhbWUgKm5leHR3cml0ZTsKIApAQCAtMTYxLDYgKzEyMSw3IEBACiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgYmY1eHhfYWM5N19yZWFkKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywKIAl1bnNpZ25lZCBzaG9ydCByZWcpCiB7CisJc3RydWN0IHNwb3J0X2RldmljZSAqc3BvcnRfaGFuZGxlID0gYWM5N19zcG9ydF9oYW5kbGU7CiAJc3RydWN0IGFjOTdfZnJhbWUgb3V0X2ZyYW1lWzJdLCBpbl9mcmFtZVsyXTsKIAogCXByX2RlYnVnKCIlcyBlbnRlciAweCV4XG4iLCBfX2Z1bmNfXywgcmVnKTsKQEAgLTE4NSw2ICsxNDYsOCBAQAogdm9pZCBiZjV4eF9hYzk3X3dyaXRlKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywgdW5zaWduZWQgc2hvcnQgcmVnLAogCXVuc2lnbmVkIHNob3J0IHZhbCkKIHsKKwlzdHJ1Y3Qgc3BvcnRfZGV2aWNlICpzcG9ydF9oYW5kbGUgPSBhYzk3X3Nwb3J0X2hhbmRsZTsKKwogCXByX2RlYnVnKCIlcyBlbnRlciAweCV4OjB4JTA0eFxuIiwgX19mdW5jX18sIHJlZywgdmFsKTsKIAogCWlmIChzcG9ydF9oYW5kbGUtPnR4X3J1bikgewpAQCAtMjAzLDI4ICsxNjYsMTkgQEAKIAogc3RhdGljIHZvaWQgYmY1eHhfYWM5N193YXJtX3Jlc2V0KHN0cnVjdCBzbmRfYWM5NyAqYWM5NykKIHsKLSNpZiBkZWZpbmVkKENPTkZJR19CRjU0eCkgfHwgZGVmaW5lZChDT05GSUdfQkY1NjEpIHx8IFwKLSAoZGVmaW5lZChCRjUzN19GQU1JTFkpICYmIChDT05GSUdfU05EX0JGNVhYX1NQT1JUX05VTSA9PSAxKSkKLQotI2RlZmluZSBDT05DQVQoYSwgYiwgYykgYSAjIyBiICMjIGMKLSNkZWZpbmUgQkZJTl9TUE9SVF9SRlMoeCkgQ09OQ0FUKFBfU1BPUlQsIHgsIF9SRlMpCi0KLQl1MTYgcGVyID0gQkZJTl9TUE9SVF9SRlMoQ09ORklHX1NORF9CRjVYWF9TUE9SVF9OVU0pOwotCXUxNiBncGlvID0gUF9JREVOVChCRklOX1NQT1JUX1JGUyhDT05GSUdfU05EX0JGNVhYX1NQT1JUX05VTSkpOworCXN0cnVjdCBzcG9ydF9kZXZpY2UgKnNwb3J0X2hhbmRsZSA9IGFjOTdfc3BvcnRfaGFuZGxlOworCXUxNiBncGlvID0gUF9JREVOVChzcG9ydF9oYW5kbGUtPnBpbl9yZXFbM10pOwogCiAJcHJfZGVidWcoIiVzIGVudGVyXG4iLCBfX2Z1bmNfXyk7CiAKLQlwZXJpcGhlcmFsX2ZyZWUocGVyKTsKKwlwZXJpcGhlcmFsX2ZyZWVfbGlzdChzcG9ydF9oYW5kbGUtPnBpbl9yZXEpOwogCWdwaW9fcmVxdWVzdChncGlvLCAiYmY1eHgtYWM5NyIpOwogCWdwaW9fZGlyZWN0aW9uX291dHB1dChncGlvLCAxKTsKIAl1ZGVsYXkoMik7CiAJZ3Bpb19zZXRfdmFsdWUoZ3BpbywgMCk7CiAJdWRlbGF5KDEpOwogCWdwaW9fZnJlZShncGlvKTsKLQlwZXJpcGhlcmFsX3JlcXVlc3QocGVyLCAic29jLWF1ZGlvIik7Ci0jZWxzZQotCXByX2luZm8oIiVzOiBOb3QgaW1wbGVtZW50ZWRcbiIsIF9fZnVuY19fKTsKLSNlbmRpZgorCXBlcmlwaGVyYWxfcmVxdWVzdF9saXN0KHNwb3J0X2hhbmRsZS0+cGluX3JlcSwgInNvYy1hdWRpbyIpOwogfQogCiBzdGF0aWMgdm9pZCBiZjV4eF9hYzk3X2NvbGRfcmVzZXQoc3RydWN0IHNuZF9hYzk3ICphYzk3KQpAQCAtMzA2LDE4ICsyNjAsMzIgQEAKICNkZWZpbmUgYmY1eHhfYWM5N19yZXN1bWUJTlVMTAogI2VuZGlmCiAKLXN0YXRpYyBpbnQgYmY1eHhfYWM5N19wcm9iZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKLXsKLQlpbnQgcmV0ID0gMDsKLQljbWRfY291bnQgPSAoaW50ICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwotCWlmIChjbWRfY291bnQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2RyaXZlciBiZmluX2FjOTdfZGFpID0geworCS5hYzk3X2NvbnRyb2wgPSAxLAorCS5zdXNwZW5kID0gYmY1eHhfYWM5N19zdXNwZW5kLAorCS5yZXN1bWUgPSBiZjV4eF9hYzk3X3Jlc3VtZSwKKwkucGxheWJhY2sgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJBQzk3IFBsYXliYWNrIiwKKwkJLmNoYW5uZWxzX21pbiA9IDIsCisjaWYgZGVmaW5lZChDT05GSUdfU05EX0JGNVhYX01VTFRJQ0hBTl9TVVBQT1JUKQorCQkuY2hhbm5lbHNfbWF4ID0gNiwKKyNlbHNlCisJCS5jaGFubmVsc19tYXggPSAyLAorI2VuZGlmCisJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzQ4MDAwLAorCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLCB9LAorCS5jYXB0dXJlID0geworCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBDYXB0dXJlIiwKKwkJLmNoYW5uZWxzX21pbiA9IDIsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80ODAwMCwKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwgfSwKK307CiAKLQlpZiAocGVyaXBoZXJhbF9yZXF1ZXN0X2xpc3Qoc3BvcnRfcmVxW3Nwb3J0X251bV0sICJzb2MtYXVkaW8iKSkgewotCQlwcl9lcnIoIlJlcXVlc3RpbmcgUGVyaXBoZXJhbHMgZmFpbGVkXG4iKTsKLQkJcmV0ID0gIC1FRkFVTFQ7Ci0JCWdvdG8gcGVyaXBoZXJhbF9lcnI7Ci0JfQorc3RhdGljIGludCBfX2RldmluaXQgYXNvY19iZmluX2FjOTdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc3BvcnRfZGV2aWNlICpzcG9ydF9oYW5kbGU7CisJaW50IHJldDsKIAogI2lmZGVmIENPTkZJR19TTkRfQkY1WFhfSEFWRV9DT0xEX1JFU0VUCiAJLyogUmVxdWVzdCBQQjMgYXMgcmVzZXQgcGluICovCkBAIC0zMjksMTIgKzI5NywxNCBAQAogCX0KIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoQ09ORklHX1NORF9CRjVYWF9SRVNFVF9HUElPX05VTSwgMSk7CiAjZW5kaWYKLQlzcG9ydF9oYW5kbGUgPSBzcG9ydF9pbml0KCZzcG9ydF9wYXJhbXNbc3BvcnRfbnVtXSwgMiwgXAotCQkJc2l6ZW9mKHN0cnVjdCBhYzk3X2ZyYW1lKSwgTlVMTCk7CisKKwlzcG9ydF9oYW5kbGUgPSBzcG9ydF9pbml0KHBkZXYsIDIsIHNpemVvZihzdHJ1Y3QgYWM5N19mcmFtZSksCisJCVBBR0VfU0laRSk7CiAJaWYgKCFzcG9ydF9oYW5kbGUpIHsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBzcG9ydF9lcnI7CiAJfQorCiAJLypTUE9SVCB3b3JrcyBpbiBURE0gbW9kZSB0byBzaW11bGF0ZSBBQzk3IHRyYW5zZmVycyovCiAjaWYgZGVmaW5lZChDT05GSUdfU05EX0JGNVhYX01VTFRJQ0hBTl9TVVBQT1JUKQogCXJldCA9IHNwb3J0X3NldF9tdWx0aWNoYW5uZWwoc3BvcnRfaGFuZGxlLCAxNiwgMHgzRkYsIDEpOwpAQCAtMzYxLDY3ICszMzEsMzcgQEAKIAkJZ290byBzcG9ydF9jb25maWdfZXJyOwogCX0KIAorCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZwZGV2LT5kZXYsICZiZmluX2FjOTdfZGFpKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigiRmFpbGVkIHRvIHJlZ2lzdGVyIERBSTogJWRcbiIsIHJldCk7CisJCWdvdG8gc3BvcnRfY29uZmlnX2VycjsKKwl9CisKKwlhYzk3X3Nwb3J0X2hhbmRsZSA9IHNwb3J0X2hhbmRsZTsKKwogCXJldHVybiAwOwogCiBzcG9ydF9jb25maWdfZXJyOgotCWtmcmVlKHNwb3J0X2hhbmRsZSk7CisJc3BvcnRfZG9uZShzcG9ydF9oYW5kbGUpOwogc3BvcnRfZXJyOgogI2lmZGVmIENPTkZJR19TTkRfQkY1WFhfSEFWRV9DT0xEX1JFU0VUCiAJZ3Bpb19mcmVlKENPTkZJR19TTkRfQkY1WFhfUkVTRVRfR1BJT19OVU0pOwogZ3Bpb19lcnI6CiAjZW5kaWYKLQlwZXJpcGhlcmFsX2ZyZWVfbGlzdChzcG9ydF9yZXFbc3BvcnRfbnVtXSk7Ci1wZXJpcGhlcmFsX2VycjoKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY21kX2NvdW50KTsKLQljbWRfY291bnQgPSBOVUxMOwogCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBiZjV4eF9hYzk3X3JlbW92ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3N0YXRpYyBpbnQgX19kZXZleGl0IGFzb2NfYmZpbl9hYzk3X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljbWRfY291bnQpOwotCWNtZF9jb3VudCA9IE5VTEw7Ci0JcGVyaXBoZXJhbF9mcmVlX2xpc3Qoc3BvcnRfcmVxW3Nwb3J0X251bV0pOworCXN0cnVjdCBzcG9ydF9kZXZpY2UgKnNwb3J0X2hhbmRsZSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmcGRldi0+ZGV2KTsKKwlzcG9ydF9kb25lKHNwb3J0X2hhbmRsZSk7CiAjaWZkZWYgQ09ORklHX1NORF9CRjVYWF9IQVZFX0NPTERfUkVTRVQKIAlncGlvX2ZyZWUoQ09ORklHX1NORF9CRjVYWF9SRVNFVF9HUElPX05VTSk7CiAjZW5kaWYKLQlyZXR1cm4gMDsKLX0KIAotc3RydWN0IHNuZF9zb2NfZGFpX2RyaXZlciBiZmluX2FjOTdfZGFpID0gewotCS5hYzk3X2NvbnRyb2wgPSAxLAotCS5wcm9iZSA9IGJmNXh4X2FjOTdfcHJvYmUsCi0JLnJlbW92ZSA9IGJmNXh4X2FjOTdfcmVtb3ZlLAotCS5zdXNwZW5kID0gYmY1eHhfYWM5N19zdXNwZW5kLAotCS5yZXN1bWUgPSBiZjV4eF9hYzk3X3Jlc3VtZSwKLQkucGxheWJhY2sgPSB7Ci0JCS5zdHJlYW1fbmFtZSA9ICJBQzk3IFBsYXliYWNrIiwKLQkJLmNoYW5uZWxzX21pbiA9IDIsCi0jaWYgZGVmaW5lZChDT05GSUdfU05EX0JGNVhYX01VTFRJQ0hBTl9TVVBQT1JUKQotCQkuY2hhbm5lbHNfbWF4ID0gNiwKLSNlbHNlCi0JCS5jaGFubmVsc19tYXggPSAyLAotI2VuZGlmCi0JCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzQ4MDAwLAotCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLCB9LAotCS5jYXB0dXJlID0gewotCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBDYXB0dXJlIiwKLQkJLmNoYW5uZWxzX21pbiA9IDIsCi0JCS5jaGFubmVsc19tYXggPSAyLAotCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80ODAwMCwKLQkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwgfSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChiZmluX2FjOTdfZGFpKTsKLQotc3RhdGljIF9fZGV2aW5pdCBpbnQgYXNvY19iZmluX2FjOTdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlyZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9kYWkoJnBkZXYtPmRldiwgJmJmaW5fYWM5N19kYWkpOwotfQotCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBhc29jX2JmaW5fYWM5N19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKCZwZGV2LT5kZXYpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWQxODM2LmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWQxODM2LmMKaW5kZXggODMwMTJkYS4uZWE0OTUxYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFkMTgzNi5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDE4MzYuYwpAQCAtMjksMjIgKzI5LDEyIEBACiAjaW5jbHVkZSA8YXNtL3BvcnRtdXguaD4KIAogI2luY2x1ZGUgIi4uL2NvZGVjcy9hZDE4MzYuaCIKLSNpbmNsdWRlICJiZjV4eC1zcG9ydC5oIgogCiAjaW5jbHVkZSAiYmY1eHgtdGRtLXBjbS5oIgogI2luY2x1ZGUgImJmNXh4LXRkbS5oIgogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBiZjV4eF9hZDE4MzY7CiAKLXN0YXRpYyBpbnQgYmY1eHhfYWQxODM2X3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+Y3B1X2RhaTsKLQotCXNuZF9zb2NfZGFpX3NldF9kcnZkYXRhKGNwdV9kYWksIHNwb3J0X2hhbmRsZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgYmY1eHhfYWQxODM2X2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKIHsKQEAgLTc1LDIzICs2NSwzMyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIGJmNXh4X2FkMTgzNl9vcHMgPSB7Ci0JLnN0YXJ0dXAgPSBiZjV4eF9hZDE4MzZfc3RhcnR1cCwKIAkuaHdfcGFyYW1zID0gYmY1eHhfYWQxODM2X2h3X3BhcmFtcywKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBiZjV4eF9hZDE4MzZfZGFpID0gewotCS5uYW1lID0gImFkMTgzNiIsCi0JLnN0cmVhbV9uYW1lID0gIkFEMTgzNiIsCi0JLmNwdV9kYWlfbmFtZSA9ICJiZjV4eC10ZG0iLAotCS5jb2RlY19kYWlfbmFtZSA9ICJhZDE4MzYtaGlmaSIsCi0JLnBsYXRmb3JtX25hbWUgPSAiYmY1eHgtdGRtLXBjbS1hdWRpbyIsCi0JLmNvZGVjX25hbWUgPSAiYWQxODM2LWNvZGVjLjAiLAotCS5vcHMgPSAmYmY1eHhfYWQxODM2X29wcywKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBiZjV4eF9hZDE4MzZfZGFpW10gPSB7CisJeworCQkubmFtZSA9ICJhZDE4MzYiLAorCQkuc3RyZWFtX25hbWUgPSAiQUQxODM2IiwKKwkJLmNwdV9kYWlfbmFtZSA9ICJiZmluLXRkbS4wIiwKKwkJLmNvZGVjX2RhaV9uYW1lID0gImFkMTgzNi1oaWZpIiwKKwkJLnBsYXRmb3JtX25hbWUgPSAiYmZpbi10ZG0tcGNtLWF1ZGlvIiwKKwkJLmNvZGVjX25hbWUgPSAiYWQxODM2LjAiLAorCQkub3BzID0gJmJmNXh4X2FkMTgzNl9vcHMsCisJfSwKKwl7CisJCS5uYW1lID0gImFkMTgzNiIsCisJCS5zdHJlYW1fbmFtZSA9ICJBRDE4MzYiLAorCQkuY3B1X2RhaV9uYW1lID0gImJmaW4tdGRtLjEiLAorCQkuY29kZWNfZGFpX25hbWUgPSAiYWQxODM2LWhpZmkiLAorCQkucGxhdGZvcm1fbmFtZSA9ICJiZmluLXRkbS1wY20tYXVkaW8iLAorCQkuY29kZWNfbmFtZSA9ICJhZDE4MzYuMCIsCisJCS5vcHMgPSAmYmY1eHhfYWQxODM2X29wcywKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgYmY1eHhfYWQxODM2ID0gewotCS5uYW1lID0gImJmNXh4X2FkMTgzNiIsCi0JLmRhaV9saW5rID0gJmJmNXh4X2FkMTgzNl9kYWksCisJLm5hbWUgPSAiYmZpbi1hZDE4MzYiLAorCS5kYWlfbGluayA9ICZiZjV4eF9hZDE4MzZfZGFpW0NPTkZJR19TTkRfQkY1WFhfU1BPUlRfTlVNXSwKIAkubnVtX2xpbmtzID0gMSwKIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDE5M3guYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDE5M3guYwppbmRleCBkM2NjYjkyLi5kNjY1MWMwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWQxOTN4LmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFkMTkzeC5jCkBAIC0zOCwzMCArMzgsMjggQEAKICNpbmNsdWRlIDxhc20vcG9ydG11eC5oPgogCiAjaW5jbHVkZSAiLi4vY29kZWNzL2FkMTkzeC5oIgotI2luY2x1ZGUgImJmNXh4LXNwb3J0LmgiCiAKICNpbmNsdWRlICJiZjV4eC10ZG0tcGNtLmgiCiAjaW5jbHVkZSAiYmY1eHgtdGRtLmgiCiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIGJmNXh4X2FkMTkzeDsKIAotc3RhdGljIGludCBiZjV4eF9hZDE5M3hfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5jcHVfZGFpOwotCi0Jc25kX3NvY19kYWlfc2V0X2RydmRhdGEoY3B1X2RhaSwgc3BvcnRfaGFuZGxlKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBiZjV4eF9hZDE5M3hfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmNwdV9kYWk7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmNvZGVjX2RhaTsKKwl1bnNpZ25lZCBpbnQgY2xrID0gMDsKIAl1bnNpZ25lZCBpbnQgY2hhbm5lbF9tYXBbXSA9IHswLCAxLCAyLCAzLCA0LCA1LCA2LCA3fTsKIAlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAocGFyYW1zX3JhdGUocGFyYW1zKSkgeworCWNhc2UgNDgwMDA6CisJCWNsayA9IDEyMjg4MDAwOworCQlicmVhazsKKwl9CisKIAkvKiBzZXQgY3B1IERBSSBjb25maWd1cmF0aW9uICovCiAJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjcHVfZGFpLCBTTkRfU09DX0RBSUZNVF9EU1BfQSB8CiAJCVNORF9TT0NfREFJRk1UX0lCX0lGIHwgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSk7CkBAIC03NCw2ICs3MiwxMiBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCisJLyogc2V0IHRoZSBjb2RlYyBzeXN0ZW0gY2xvY2sgZm9yIERBQyBhbmQgQURDICovCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksIDAsIGNsaywKKwkJU05EX1NPQ19DTE9DS19JTik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKIAkvKiBzZXQgY29kZWMgREFJIHNsb3RzLCA4IGNoYW5uZWxzLCBhbGwgY2hhbm5lbHMgYXJlIGVuYWJsZWQgKi8KIAlyZXQgPSBzbmRfc29jX2RhaV9zZXRfdGRtX3Nsb3QoY29kZWNfZGFpLCAweEZGLCAweEZGLCA4LCAzMik7CiAJaWYgKHJldCA8IDApCkBAIC04OSwyMyArOTMsMzMgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBiZjV4eF9hZDE5M3hfb3BzID0gewotCS5zdGFydHVwID0gYmY1eHhfYWQxOTN4X3N0YXJ0dXAsCiAJLmh3X3BhcmFtcyA9IGJmNXh4X2FkMTkzeF9od19wYXJhbXMsCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgYmY1eHhfYWQxOTN4X2RhaSA9IHsKLQkubmFtZSA9ICJhZDE5M3giLAotCS5zdHJlYW1fbmFtZSA9ICJBRDE5M1giLAotCS5jcHVfZGFpX25hbWUgPSAiYmY1eHgtdGRtIiwKLQkuY29kZWNfZGFpX25hbWUgPSJhZDE5M3gtaGlmaSIsCi0JLnBsYXRmb3JtX25hbWUgPSAiYmY1eHgtdGRtLXBjbS1hdWRpbyIsCi0JLmNvZGVjX25hbWUgPSAiYWQxOTN4LWNvZGVjLjUiLAotCS5vcHMgPSAmYmY1eHhfYWQxOTN4X29wcywKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBiZjV4eF9hZDE5M3hfZGFpW10gPSB7CisJeworCQkubmFtZSA9ICJhZDE5M3giLAorCQkuc3RyZWFtX25hbWUgPSAiQUQxOTNYIiwKKwkJLmNwdV9kYWlfbmFtZSA9ICJiZmluLXRkbS4wIiwKKwkJLmNvZGVjX2RhaV9uYW1lID0iYWQxOTN4LWhpZmkiLAorCQkucGxhdGZvcm1fbmFtZSA9ICJiZmluLXRkbS1wY20tYXVkaW8iLAorCQkuY29kZWNfbmFtZSA9ICJhZDE5M3guNSIsCisJCS5vcHMgPSAmYmY1eHhfYWQxOTN4X29wcywKKwl9LAorCXsKKwkJLm5hbWUgPSAiYWQxOTN4IiwKKwkJLnN0cmVhbV9uYW1lID0gIkFEMTkzWCIsCisJCS5jcHVfZGFpX25hbWUgPSAiYmZpbi10ZG0uMSIsCisJCS5jb2RlY19kYWlfbmFtZSA9ImFkMTkzeC1oaWZpIiwKKwkJLnBsYXRmb3JtX25hbWUgPSAiYmZpbi10ZG0tcGNtLWF1ZGlvIiwKKwkJLmNvZGVjX25hbWUgPSAiYWQxOTN4LjUiLAorCQkub3BzID0gJmJmNXh4X2FkMTkzeF9vcHMsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIGJmNXh4X2FkMTkzeCA9IHsKLQkubmFtZSA9ICJiZjV4eF9hZDE5M3giLAotCS5kYWlfbGluayA9ICZiZjV4eF9hZDE5M3hfZGFpLAorCS5uYW1lID0gImJmaW4tYWQxOTN4IiwKKwkuZGFpX2xpbmsgPSAmYmY1eHhfYWQxOTN4X2RhaVtDT05GSUdfU05EX0JGNVhYX1NQT1JUX05VTV0sCiAJLm51bV9saW5rcyA9IDEsCiB9OwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWQxOTgwLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWQxOTgwLmMKaW5kZXggZDU3YzljOS4uMDZhODRiMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFkMTk4MC5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDE5ODAuYwpAQCAtNDcsMzkgKzQ3LDM0IEBACiAjaW5jbHVkZSA8YXNtL3BvcnRtdXguaD4KIAogI2luY2x1ZGUgIi4uL2NvZGVjcy9hZDE5ODAuaCIKLSNpbmNsdWRlICJiZjV4eC1zcG9ydC5oIgorCiAjaW5jbHVkZSAiYmY1eHgtYWM5Ny1wY20uaCIKICNpbmNsdWRlICJiZjV4eC1hYzk3LmgiCiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIGJmNXh4X2JvYXJkOwogCi1zdGF0aWMgaW50IGJmNXh4X2JvYXJkX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+Y3B1X2RhaTsKLQotCXByX2RlYnVnKCIlcyBlbnRlclxuIiwgX19mdW5jX18pOwotCXNuZF9zb2NfZGFpX3NldF9kcnZkYXRhKGNwdV9kYWksIHNwb3J0X2hhbmRsZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgYmY1eHhfYm9hcmRfb3BzID0gewotCS5zdGFydHVwID0gYmY1eHhfYm9hcmRfc3RhcnR1cCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBiZjV4eF9ib2FyZF9kYWkgPSB7Ci0JLm5hbWUgPSAiQUM5NyIsCi0JLnN0cmVhbV9uYW1lID0gIkFDOTcgSGlGaSIsCi0JLmNwdV9kYWlfbmFtZSA9ICJiZmluLWFjOTciLAotCS5jb2RlY19kYWlfbmFtZSA9ICJhZDE5ODAtaGlmaSIsCi0JLnBsYXRmb3JtX25hbWUgPSAiYmZpbi1wY20tYXVkaW8iLAotCS5jb2RlY19uYW1lID0gImFkMTk4MC1jb2RlYyIsCi0JLm9wcyA9ICZiZjV4eF9ib2FyZF9vcHMsCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgYmY1eHhfYm9hcmRfZGFpW10gPSB7CisJeworCQkubmFtZSA9ICJBQzk3IiwKKwkJLnN0cmVhbV9uYW1lID0gIkFDOTcgSGlGaSIsCisJCS5jcHVfZGFpX25hbWUgPSAiYmZpbi1hYzk3LjAiLAorCQkuY29kZWNfZGFpX25hbWUgPSAiYWQxOTgwLWhpZmkiLAorCQkucGxhdGZvcm1fbmFtZSA9ICJiZmluLWFjOTctcGNtLWF1ZGlvIiwKKwkJLmNvZGVjX25hbWUgPSAiYWQxOTgwIiwKKwl9LAorCXsKKwkJLm5hbWUgPSAiQUM5NyIsCisJCS5zdHJlYW1fbmFtZSA9ICJBQzk3IEhpRmkiLAorCQkuY3B1X2RhaV9uYW1lID0gImJmaW4tYWM5Ny4xIiwKKwkJLmNvZGVjX2RhaV9uYW1lID0gImFkMTk4MC1oaWZpIiwKKwkJLnBsYXRmb3JtX25hbWUgPSAiYmZpbi1hYzk3LXBjbS1hdWRpbyIsCisJCS5jb2RlY19uYW1lID0gImFkMTk4MCIsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIGJmNXh4X2JvYXJkID0gewotCS5uYW1lID0gImJmNXh4LWJvYXJkIiwKLQkuZGFpX2xpbmsgPSAmYmY1eHhfYm9hcmRfZGFpLAorCS5uYW1lID0gImJmaW4tYWQxOTgwIiwKKwkuZGFpX2xpbmsgPSAmYmY1eHhfYm9hcmRfZGFpW0NPTkZJR19TTkRfQkY1WFhfU1BPUlRfTlVNXSwKIAkubnVtX2xpbmtzID0gMSwKIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDczMzExLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWQ3MzMxMS5jCmluZGV4IDczMmZiOGIuLjczMmEyNDcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDczMzExLmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFkNzMzMTEuYwpAQCAtMTQ1LDE2ICsxNDUsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGJmNXh4X2FkNzMzMTFfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5jcHVfZGFpOwotCi0JcHJfZGVidWcoIiVzIGVudGVyXG4iLCBfX2Z1bmNfXyk7Ci0Jc25kX3NvY19kYWlfc2V0X2RydmRhdGEoY3B1X2RhaSwgc3BvcnRfaGFuZGxlKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBiZjV4eF9hZDczMzExX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKIHsKQEAgLTE3NiwyNCArMTY2LDM0IEBACiAKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBiZjV4eF9hZDczMzExX29wcyA9IHsKLQkuc3RhcnR1cCA9IGJmNXh4X2FkNzMzMTFfc3RhcnR1cCwKIAkuaHdfcGFyYW1zID0gYmY1eHhfYWQ3MzMxMV9od19wYXJhbXMsCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgYmY1eHhfYWQ3MzMxMV9kYWkgPSB7Ci0JLm5hbWUgPSAiYWQ3MzMxMSIsCi0JLnN0cmVhbV9uYW1lID0gIkFENzMzMTEiLAotCS5jcHVfZGFpX25hbWUgPSAiYmY1eHgtaTJzIiwKLQkuY29kZWNfZGFpX25hbWUgPSAiYWQ3MzMxMS1oaWZpIiwKLQkucGxhdGZvcm1fbmFtZSA9ICJiZmluLXBjbS1hdWRpbyIsCi0JLmNvZGVjX25hbWUgPSAiYWQ3MzMxMS1jb2RlYyIsCi0JLm9wcyA9ICZiZjV4eF9hZDczMzExX29wcywKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBiZjV4eF9hZDczMzExX2RhaVtdID0geworCXsKKwkJLm5hbWUgPSAiYWQ3MzMxMSIsCisJCS5zdHJlYW1fbmFtZSA9ICJBRDczMzExIiwKKwkJLmNwdV9kYWlfbmFtZSA9ICJiZmluLWkycy4wIiwKKwkJLmNvZGVjX2RhaV9uYW1lID0gImFkNzMzMTEtaGlmaSIsCisJCS5wbGF0Zm9ybV9uYW1lID0gImJmaW4taTJzLXBjbS1hdWRpbyIsCisJCS5jb2RlY19uYW1lID0gImFkNzMzMTEiLAorCQkub3BzID0gJmJmNXh4X2FkNzMzMTFfb3BzLAorCX0sCisJeworCQkubmFtZSA9ICJhZDczMzExIiwKKwkJLnN0cmVhbV9uYW1lID0gIkFENzMzMTEiLAorCQkuY3B1X2RhaV9uYW1lID0gImJmaW4taTJzLjEiLAorCQkuY29kZWNfZGFpX25hbWUgPSAiYWQ3MzMxMS1oaWZpIiwKKwkJLnBsYXRmb3JtX25hbWUgPSAiYmZpbi1pMnMtcGNtLWF1ZGlvIiwKKwkJLmNvZGVjX25hbWUgPSAiYWQ3MzMxMSIsCisJCS5vcHMgPSAmYmY1eHhfYWQ3MzMxMV9vcHMsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIGJmNXh4X2FkNzMzMTEgPSB7Ci0JLm5hbWUgPSAiYmY1eHhfYWQ3MzMxMSIsCisJLm5hbWUgPSAiYmZpbi1hZDczMzExIiwKIAkucHJvYmUgPSBiZjV4eF9wcm9iZSwKLQkuZGFpX2xpbmsgPSAmYmY1eHhfYWQ3MzMxMV9kYWksCisJLmRhaV9saW5rID0gJmJmNXh4X2FkNzMzMTFfZGFpW0NPTkZJR19TTkRfQkY1WFhfU1BPUlRfTlVNXSwKIAkubnVtX2xpbmtzID0gMSwKIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMtcGNtLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLXBjbS5jCmluZGV4IDg5MGEwZGMuLmI1MTAxZWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMtcGNtLmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy1wY20uYwpAQCAtMTQ4LDEwICsxNDgsMTUgQEAKIAogc3RhdGljIGludCBiZjV4eF9wY21fb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5jcHVfZGFpOworCXN0cnVjdCBzcG9ydF9kZXZpY2UgKnNwb3J0X2hhbmRsZSA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGNwdV9kYWkpOwogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHNuZF9kbWFfYnVmZmVyICpidWYgPSAmc3Vic3RyZWFtLT5kbWFfYnVmZmVyOwogCWludCByZXQ7CiAKIAlwcl9kZWJ1ZygiJXMgZW50ZXJcbiIsIF9fZnVuY19fKTsKKwogCXNuZF9zb2Nfc2V0X3J1bnRpbWVfaHdwYXJhbXMoc3Vic3RyZWFtLCAmYmY1eHhfcGNtX2hhcmR3YXJlKTsKIAogCXJldCA9IHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ1bnRpbWUsIFwKQEAgLTE1OSw5ICsxNjQsMTQgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAKLQlpZiAoc3BvcnRfaGFuZGxlICE9IE5VTEwpCisJaWYgKHNwb3J0X2hhbmRsZSAhPSBOVUxMKSB7CisJCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQkJc3BvcnRfaGFuZGxlLT50eF9idWYgPSBidWYtPmFyZWE7CisJCWVsc2UKKwkJCXNwb3J0X2hhbmRsZS0+cnhfYnVmID0gYnVmLT5hcmVhOworCiAJCXJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IHNwb3J0X2hhbmRsZTsKLQllbHNlIHsKKwl9IGVsc2UgewogCQlwcl9lcnIoInNwb3J0X2hhbmRsZSBpcyBOVUxMXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTIxNCwxMSArMjI0LDYgQEAKIAlwcl9kZWJ1ZygiJXMsIGFyZWE6JXAsIHNpemU6MHglMDhseFxuIiwgX19mdW5jX18sCiAJCWJ1Zi0+YXJlYSwgYnVmLT5ieXRlcyk7CiAKLQlpZiAoc3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCi0JCXNwb3J0X2hhbmRsZS0+dHhfYnVmID0gYnVmLT5hcmVhOwotCWVsc2UKLQkJc3BvcnRfaGFuZGxlLT5yeF9idWYgPSBidWYtPmFyZWE7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjM5LDggKzI0NCw2IEBACiAJCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIGJ1Zi0+Ynl0ZXMsIGJ1Zi0+YXJlYSwgMCk7CiAJCWJ1Zi0+YXJlYSA9IE5VTEw7CiAJfQotCWlmIChzcG9ydF9oYW5kbGUpCi0JCXNwb3J0X2RvbmUoc3BvcnRfaGFuZGxlKTsKIH0KIAogc3RhdGljIHU2NCBiZjV4eF9wY21fZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CkBAIC0yOTIsNyArMjk1LDcgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYmZpbl9pMnNfcGNtX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewotCQkJLm5hbWUgPSAiYmZpbi1wY20tYXVkaW8iLAorCQkJLm5hbWUgPSAiYmZpbi1pMnMtcGNtLWF1ZGlvIiwKIAkJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMuYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMuYwppbmRleCBkNDUzYjFlLi4wMGNjM2UwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy5jCkBAIC01MSw1OSArNTEsMjQgQEAKIAlpbnQgY29uZmlndXJlZDsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYmY1eHhfaTJzX3BvcnQgYmY1eHhfaTJzOwotc3RhdGljIGludCBzcG9ydF9udW0gPSBDT05GSUdfU05EX0JGNVhYX1NQT1JUX05VTTsKLQotc3RhdGljIHN0cnVjdCBzcG9ydF9wYXJhbSBzcG9ydF9wYXJhbXNbMl0gPSB7Ci0JewotCQkuZG1hX3J4X2NoYW4JPSBDSF9TUE9SVDBfUlgsCi0JCS5kbWFfdHhfY2hhbgk9IENIX1NQT1JUMF9UWCwKLQkJLmVycl9pcnEJPSBJUlFfU1BPUlQwX0VSUk9SLAotCQkucmVncwkJPSAoc3RydWN0IHNwb3J0X3JlZ2lzdGVyICopU1BPUlQwX1RDUjEsCi0JfSwKLQl7Ci0JCS5kbWFfcnhfY2hhbgk9IENIX1NQT1JUMV9SWCwKLQkJLmRtYV90eF9jaGFuCT0gQ0hfU1BPUlQxX1RYLAotCQkuZXJyX2lycQk9IElSUV9TUE9SVDFfRVJST1IsCi0JCS5yZWdzCQk9IChzdHJ1Y3Qgc3BvcnRfcmVnaXN0ZXIgKilTUE9SVDFfVENSMSwKLQl9Ci19OwotCi0vKgotICogU2V0dGluZyB0aGUgVEZTIHBpbiBzZWxlY3RvciBmb3IgU1BPUlQgMCBiYXNlZCBvbiB3aGV0aGVyIHRoZSBzZWxlY3RlZAotICogcG9ydCBpZCBGIG9yIEcuIElmIHRoZSBwb3J0IGlzIEYgdGhlbiBubyBjb25mbGljdCBzaG91bGQgZXhpc3QgZm9yIHRoZQotICogVEZTLiBXaGVuIFBvcnQgRyBpcyBzZWxlY3RlZCBhbmQgRU1BQyB0aGVuIHRoZXJlIGlzIGEgY29uZmxpY3QgYmV0d2VlbgotICogdGhlIFBIWSBpbnRlcnJ1cHQgbGluZSBhbmQgVEZTLiAgQ3VycmVudCBzZXR0aW5ncyBwcmV2ZW50IHRoZSBjb25mbGljdAotICogYnkgaWdub3JpbmcgdGhlIFRGUyBwaW4gd2hlbiBQb3J0IEcgaXMgc2VsZWN0ZWQuIFRoaXMgYWxsb3dzIGJvdGgKLSAqIGNvZGVjcyBhbmQgRU1BQyB1c2luZyBQb3J0IEcgY29uY3VycmVudGx5LgotICovCi0jaWZkZWYgQ09ORklHX0JGNTI3X1NQT1JUMF9QT1JURwotI2RlZmluZSBMT0NBTF9TUE9SVDBfVEZTICgwKQotI2Vsc2UKLSNkZWZpbmUgTE9DQUxfU1BPUlQwX1RGUyAoUF9TUE9SVDBfVEZTKQotI2VuZGlmCi0KLXN0YXRpYyB1MTYgc3BvcnRfcmVxW11bN10gPSB7IHtQX1NQT1JUMF9EVFBSSSwgUF9TUE9SVDBfVFNDTEssIFBfU1BPUlQwX1JGUywKLQkJUF9TUE9SVDBfRFJQUkksIFBfU1BPUlQwX1JTQ0xLLCBMT0NBTF9TUE9SVDBfVEZTLCAwfSwKLQkJe1BfU1BPUlQxX0RUUFJJLCBQX1NQT1JUMV9UU0NMSywgUF9TUE9SVDFfUkZTLCBQX1NQT1JUMV9EUlBSSSwKLQkJUF9TUE9SVDFfUlNDTEssIFBfU1BPUlQxX1RGUywgMH0gfTsKLQogc3RhdGljIGludCBiZjV4eF9pMnNfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpLAogCQl1bnNpZ25lZCBpbnQgZm10KQogeworCXN0cnVjdCBzcG9ydF9kZXZpY2UgKnNwb3J0X2hhbmRsZSA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGNwdV9kYWkpOworCXN0cnVjdCBiZjV4eF9pMnNfcG9ydCAqYmY1eHhfaTJzID0gc3BvcnRfaGFuZGxlLT5wcml2YXRlX2RhdGE7CiAJaW50IHJldCA9IDA7CiAKIAkvKiBpbnRlcmZhY2UgZm9ybWF0OnN1cHBvcnQgSTJTLHNsYXZlIG1vZGUgKi8KIAlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6Ci0JCWJmNXh4X2kycy50Y3IxIHw9IFRGU1IgfCBUQ0tGRTsKLQkJYmY1eHhfaTJzLnJjcjEgfD0gUkZTUiB8IFJDS0ZFOwotCQliZjV4eF9pMnMudGNyMiB8PSBUU0ZTRTsKLQkJYmY1eHhfaTJzLnJjcjIgfD0gUlNGU0U7CisJCWJmNXh4X2kycy0+dGNyMSB8PSBURlNSIHwgVENLRkU7CisJCWJmNXh4X2kycy0+cmNyMSB8PSBSRlNSIHwgUkNLRkU7CisJCWJmNXh4X2kycy0+dGNyMiB8PSBUU0ZTRTsKKwkJYmY1eHhfaTJzLT5yY3IyIHw9IFJTRlNFOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9BOgotCQliZjV4eF9pMnMudGNyMSB8PSBURlNSOwotCQliZjV4eF9pMnMucmNyMSB8PSBSRlNSOworCQliZjV4eF9pMnMtPnRjcjEgfD0gVEZTUjsKKwkJYmY1eHhfaTJzLT5yY3IxIHw9IFJGU1I7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgogCQlyZXQgPSAtRUlOVkFMOwpAQCAtMTM1LDI5ICsxMDAsMzUgQEAKIAkJCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKIAkJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKIHsKKwlzdHJ1Y3Qgc3BvcnRfZGV2aWNlICpzcG9ydF9oYW5kbGUgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOworCXN0cnVjdCBiZjV4eF9pMnNfcG9ydCAqYmY1eHhfaTJzID0gc3BvcnRfaGFuZGxlLT5wcml2YXRlX2RhdGE7CiAJaW50IHJldCA9IDA7CiAKLQliZjV4eF9pMnMudGNyMiAmPSB+MHgxZjsKLQliZjV4eF9pMnMucmNyMiAmPSB+MHgxZjsKKwliZjV4eF9pMnMtPnRjcjIgJj0gfjB4MWY7CisJYmY1eHhfaTJzLT5yY3IyICY9IH4weDFmOwogCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1M4OgorCQliZjV4eF9pMnMtPnRjcjIgfD0gNzsKKwkJYmY1eHhfaTJzLT5yY3IyIHw9IDc7CisJCXNwb3J0X2hhbmRsZS0+d2RzaXplID0gMTsKIAljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgotCQliZjV4eF9pMnMudGNyMiB8PSAxNTsKLQkJYmY1eHhfaTJzLnJjcjIgfD0gMTU7CisJCWJmNXh4X2kycy0+dGNyMiB8PSAxNTsKKwkJYmY1eHhfaTJzLT5yY3IyIHw9IDE1OwogCQlzcG9ydF9oYW5kbGUtPndkc2l6ZSA9IDI7CiAJCWJyZWFrOwogCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEU6Ci0JCWJmNXh4X2kycy50Y3IyIHw9IDIzOwotCQliZjV4eF9pMnMucmNyMiB8PSAyMzsKKwkJYmY1eHhfaTJzLT50Y3IyIHw9IDIzOworCQliZjV4eF9pMnMtPnJjcjIgfD0gMjM7CiAJCXNwb3J0X2hhbmRsZS0+d2RzaXplID0gMzsKIAkJYnJlYWs7CiAJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKLQkJYmY1eHhfaTJzLnRjcjIgfD0gMzE7Ci0JCWJmNXh4X2kycy5yY3IyIHw9IDMxOworCQliZjV4eF9pMnMtPnRjcjIgfD0gMzE7CisJCWJmNXh4X2kycy0+cmNyMiB8PSAzMTsKIAkJc3BvcnRfaGFuZGxlLT53ZHNpemUgPSA0OwogCQlicmVhazsKIAl9CiAKLQlpZiAoIWJmNXh4X2kycy5jb25maWd1cmVkKSB7CisJaWYgKCFiZjV4eF9pMnMtPmNvbmZpZ3VyZWQpIHsKIAkJLyoKIAkJICogVFggYW5kIFJYIGFyZSBub3QgaW5kZXBlbmRlbnQsdGhleSBhcmUgZW5hYmxlZCBhdCB0aGUKIAkJICogc2FtZSB0aW1lLCBldmVuIGlmIG9ubHkgb25lIHNpZGUgaXMgcnVubmluZy4gU28sIHdlCkBAIC0xNjYsMTYgKzEzNywxNiBAQAogCQkgKgogCQkgKiBDUFUgREFJOnNsYXZlIG1vZGUuCiAJCSAqLwotCQliZjV4eF9pMnMuY29uZmlndXJlZCA9IDE7Ci0JCXJldCA9IHNwb3J0X2NvbmZpZ19yeChzcG9ydF9oYW5kbGUsIGJmNXh4X2kycy5yY3IxLAotCQkJCSAgICAgIGJmNXh4X2kycy5yY3IyLCAwLCAwKTsKKwkJYmY1eHhfaTJzLT5jb25maWd1cmVkID0gMTsKKwkJcmV0ID0gc3BvcnRfY29uZmlnX3J4KHNwb3J0X2hhbmRsZSwgYmY1eHhfaTJzLT5yY3IxLAorCQkJCSAgICAgIGJmNXh4X2kycy0+cmNyMiwgMCwgMCk7CiAJCWlmIChyZXQpIHsKIAkJCXByX2VycigiU1BPUlQgaXMgYnVzeSFcbiIpOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCi0JCXJldCA9IHNwb3J0X2NvbmZpZ190eChzcG9ydF9oYW5kbGUsIGJmNXh4X2kycy50Y3IxLAotCQkJCSAgICAgIGJmNXh4X2kycy50Y3IyLCAwLCAwKTsKKwkJcmV0ID0gc3BvcnRfY29uZmlnX3R4KHNwb3J0X2hhbmRsZSwgYmY1eHhfaTJzLT50Y3IxLAorCQkJCSAgICAgIGJmNXh4X2kycy0+dGNyMiwgMCwgMCk7CiAJCWlmIChyZXQpIHsKIAkJCXByX2VycigiU1BPUlQgaXMgYnVzeSFcbiIpOwogCQkJcmV0dXJuIC1FQlVTWTsKQEAgLTE4OCw0MSArMTU5LDE5IEBACiBzdGF0aWMgdm9pZCBiZjV4eF9pMnNfc2h1dGRvd24oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJCQkgICAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7CisJc3RydWN0IHNwb3J0X2RldmljZSAqc3BvcnRfaGFuZGxlID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoZGFpKTsKKwlzdHJ1Y3QgYmY1eHhfaTJzX3BvcnQgKmJmNXh4X2kycyA9IHNwb3J0X2hhbmRsZS0+cHJpdmF0ZV9kYXRhOworCiAJcHJfZGVidWcoIiVzIGVudGVyXG4iLCBfX2Z1bmNfXyk7CiAJLyogTm8gYWN0aXZlIHN0cmVhbSwgU1BPUlQgaXMgYWxsb3dlZCB0byBiZSBjb25maWd1cmVkIGFnYWluLiAqLwogCWlmICghZGFpLT5hY3RpdmUpCi0JCWJmNXh4X2kycy5jb25maWd1cmVkID0gMDsKLX0KLQotc3RhdGljIGludCBiZjV4eF9pMnNfcHJvYmUoc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCi17Ci0JcHJfZGVidWcoIiVzIGVudGVyXG4iLCBfX2Z1bmNfXyk7Ci0JaWYgKHBlcmlwaGVyYWxfcmVxdWVzdF9saXN0KCZzcG9ydF9yZXFbc3BvcnRfbnVtXVswXSwgInNvYy1hdWRpbyIpKSB7Ci0JCXByX2VycigiUmVxdWVzdGluZyBQZXJpcGhlcmFscyBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQkvKiByZXF1ZXN0IERNQSBmb3IgU1BPUlQgKi8KLQlzcG9ydF9oYW5kbGUgPSBzcG9ydF9pbml0KCZzcG9ydF9wYXJhbXNbc3BvcnRfbnVtXSwgNCwgXAotCQkJMiAqIHNpemVvZih1MzIpLCBOVUxMKTsKLQlpZiAoIXNwb3J0X2hhbmRsZSkgewotCQlwZXJpcGhlcmFsX2ZyZWVfbGlzdCgmc3BvcnRfcmVxW3Nwb3J0X251bV1bMF0pOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBiZjV4eF9pMnNfcmVtb3ZlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQotewotCXByX2RlYnVnKCIlcyBlbnRlclxuIiwgX19mdW5jX18pOwotCXBlcmlwaGVyYWxfZnJlZV9saXN0KCZzcG9ydF9yZXFbc3BvcnRfbnVtXVswXSk7Ci0JcmV0dXJuIDA7CisJCWJmNXh4X2kycy0+Y29uZmlndXJlZCA9IDA7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgYmY1eHhfaTJzX3N1c3BlbmQoc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7CisJc3RydWN0IHNwb3J0X2RldmljZSAqc3BvcnRfaGFuZGxlID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoZGFpKTsKIAogCXByX2RlYnVnKCIlcyA6IHNwb3J0ICVkXG4iLCBfX2Z1bmNfXywgZGFpLT5pZCk7CiAKQEAgLTIzNSwxOSArMTg0LDIxIEBACiAKIHN0YXRpYyBpbnQgYmY1eHhfaTJzX3Jlc3VtZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKIHsKKwlzdHJ1Y3Qgc3BvcnRfZGV2aWNlICpzcG9ydF9oYW5kbGUgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOworCXN0cnVjdCBiZjV4eF9pMnNfcG9ydCAqYmY1eHhfaTJzID0gc3BvcnRfaGFuZGxlLT5wcml2YXRlX2RhdGE7CiAJaW50IHJldDsKIAogCXByX2RlYnVnKCIlcyA6IHNwb3J0ICVkXG4iLCBfX2Z1bmNfXywgZGFpLT5pZCk7CiAKLQlyZXQgPSBzcG9ydF9jb25maWdfcngoc3BvcnRfaGFuZGxlLCBiZjV4eF9pMnMucmNyMSwKLQkJCQkgICAgICBiZjV4eF9pMnMucmNyMiwgMCwgMCk7CisJcmV0ID0gc3BvcnRfY29uZmlnX3J4KHNwb3J0X2hhbmRsZSwgYmY1eHhfaTJzLT5yY3IxLAorCQkJCSAgICAgIGJmNXh4X2kycy0+cmNyMiwgMCwgMCk7CiAJaWYgKHJldCkgewogCQlwcl9lcnIoIlNQT1JUIGlzIGJ1c3khXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQlyZXQgPSBzcG9ydF9jb25maWdfdHgoc3BvcnRfaGFuZGxlLCBiZjV4eF9pMnMudGNyMSwKLQkJCQkgICAgICBiZjV4eF9pMnMudGNyMiwgMCwgMCk7CisJcmV0ID0gc3BvcnRfY29uZmlnX3R4KHNwb3J0X2hhbmRsZSwgYmY1eHhfaTJzLT50Y3IxLAorCQkJCSAgICAgIGJmNXh4X2kycy0+dGNyMiwgMCwgMCk7CiAJaWYgKHJldCkgewogCQlwcl9lcnIoIlNQT1JUIGlzIGJ1c3khXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTI2Niw4ICsyMTcsMTEgQEAKIAkJU05EUlZfUENNX1JBVEVfNDQxMDAgfCBTTkRSVl9QQ01fUkFURV80ODAwMCB8IFwKIAkJU05EUlZfUENNX1JBVEVfOTYwMDApCiAKLSNkZWZpbmUgQkY1WFhfSTJTX0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfFwKLQlTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKKyNkZWZpbmUgQkY1WFhfSTJTX0ZPUk1BVFMgXAorCShTTkRSVl9QQ01fRk1UQklUX1M4IHwgXAorCSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFwKKwkgU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfCBcCisJIFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKQogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBiZjV4eF9pMnNfZGFpX29wcyA9IHsKIAkuc2h1dGRvd24JPSBiZjV4eF9pMnNfc2h1dGRvd24sCkBAIC0yNzYsOCArMjMwLDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyIGJmNXh4X2kyc19kYWkgPSB7Ci0JLnByb2JlID0gYmY1eHhfaTJzX3Byb2JlLAotCS5yZW1vdmUgPSBiZjV4eF9pMnNfcmVtb3ZlLAogCS5zdXNwZW5kID0gYmY1eHhfaTJzX3N1c3BlbmQsCiAJLnJlc3VtZSA9IGJmNXh4X2kyc19yZXN1bWUsCiAJLnBsYXliYWNrID0gewpAQCAtMjkzLDIzICsyNDUsNDUgQEAKIAkub3BzID0gJmJmNXh4X2kyc19kYWlfb3BzLAogfTsKIAotc3RhdGljIGludCBiZmluX2kyc19kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IGJmNXh4X2kyc19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmcGRldi0+ZGV2LCAmYmY1eHhfaTJzX2RhaSk7CisJc3RydWN0IHNwb3J0X2RldmljZSAqc3BvcnRfaGFuZGxlOworCWludCByZXQ7CisKKwkvKiBjb25maWd1cmUgU1BPUlQgZm9yIEkyUyAqLworCXNwb3J0X2hhbmRsZSA9IHNwb3J0X2luaXQocGRldiwgNCwgMiAqIHNpemVvZih1MzIpLAorCQlzaXplb2Yoc3RydWN0IGJmNXh4X2kyc19wb3J0KSk7CisJaWYgKCFzcG9ydF9oYW5kbGUpCisJCXJldHVybiAtRU5PREVWOworCisJLyogcmVnaXN0ZXIgd2l0aCB0aGUgQVNvQyBsYXllcnMgKi8KKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmcGRldi0+ZGV2LCAmYmY1eHhfaTJzX2RhaSk7CisJaWYgKHJldCkgeworCQlwcl9lcnIoIkZhaWxlZCB0byByZWdpc3RlciBEQUk6ICVkXG4iLCByZXQpOworCQlzcG9ydF9kb25lKHNwb3J0X2hhbmRsZSk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IGJmaW5faTJzX2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IGJmNXh4X2kyc19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKKwlzdHJ1Y3Qgc3BvcnRfZGV2aWNlICpzcG9ydF9oYW5kbGUgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXByX2RlYnVnKCIlcyBlbnRlclxuIiwgX19mdW5jX18pOworCiAJc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmcGRldi0+ZGV2KTsKKwlzcG9ydF9kb25lKHNwb3J0X2hhbmRsZSk7CisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYmZpbl9pMnNfZHJpdmVyID0gewotCS5wcm9iZSA9IGJmaW5faTJzX2Rydl9wcm9iZSwKLQkucmVtb3ZlID0gX19kZXZleGl0X3AoYmZpbl9pMnNfZHJ2X3JlbW92ZSksCi0KKwkucHJvYmUgID0gYmY1eHhfaTJzX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChiZjV4eF9pMnNfcmVtb3ZlKSwKIAkuZHJpdmVyID0gewotCQkubmFtZSA9ICJiZjV4eC1pMnMiLAorCQkubmFtZSA9ICJiZmluLWkycyIsCiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXNwb3J0LmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtc3BvcnQuYwppbmRleCA5OTA1MWZmLi5hMmQ0MDM0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtc3BvcnQuYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtc3BvcnQuYwpAQCAtNDIsOCArNDIsNiBAQAogLyogZGVsYXkgYmV0d2VlbiBmcmFtZSBzeW5jIHB1bHNlIGFuZCBmaXJzdCBkYXRhIGJpdCBpbiBtdWx0aWNoYW5uZWwgbW9kZSAqLwogI2RlZmluZSBGUkFNRV9ERUxBWSAoMTw8MTIpCiAKLXN0cnVjdCBzcG9ydF9kZXZpY2UgKnNwb3J0X2hhbmRsZTsKLUVYUE9SVF9TWU1CT0woc3BvcnRfaGFuZGxlKTsKIC8qIG5vdGU6IG11bHRpY2hhbm5lbCBpcyBpbiB1bml0cyBvZiA4IGNoYW5uZWxzLAogICogdGRtX2NvdW50IGlzICMgY2hhbm5lbHMgTk9UIC8gOCAhICovCiBpbnQgc3BvcnRfc2V0X211bHRpY2hhbm5lbChzdHJ1Y3Qgc3BvcnRfZGV2aWNlICpzcG9ydCwKQEAgLTc5OCw4NiArNzk2LDE2NCBAQAogfQogRVhQT1JUX1NZTUJPTChzcG9ydF9zZXRfZXJyX2NhbGxiYWNrKTsKIAotc3RydWN0IHNwb3J0X2RldmljZSAqc3BvcnRfaW5pdChzdHJ1Y3Qgc3BvcnRfcGFyYW0gKnBhcmFtLCB1bnNpZ25lZCB3ZHNpemUsCi0JCXVuc2lnbmVkIGR1bW15X2NvdW50LCB2b2lkICpwcml2YXRlX2RhdGEpCitzdGF0aWMgaW50IHNwb3J0X2NvbmZpZ19wZGV2KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBzcG9ydF9wYXJhbSAqcGFyYW0pCiB7Ci0JaW50IHJldDsKKwkvKiBFeHRyYWN0IHNldHRpbmdzIGZyb20gcGxhdGZvcm0gZGF0YSAqLworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGJmaW5fc25kX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJcGFyYW0tPm51bSA9IHBkZXYtPmlkOworCisJaWYgKCFwZGF0YSkgeworCQlkZXZfZXJyKGRldiwgIm5vIHBsYXRmb3JtX2RhdGFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcGFyYW0tPnBpbl9yZXEgPSBwZGF0YS0+cGluX3JlcTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycihkZXYsICJubyBNRU0gcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcGFyYW0tPnJlZ3MgPSAoc3RydWN0IHNwb3J0X3JlZ2lzdGVyICopcmVzLT5zdGFydDsKKworCS8qIGZpcnN0IFJYLCB0aGVuIFRYICovCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfRE1BLCAwKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKGRldiwgIm5vIHJ4IERNQSByZXNvdXJjZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlwYXJhbS0+ZG1hX3J4X2NoYW4gPSByZXMtPnN0YXJ0OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfRE1BLCAxKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKGRldiwgIm5vIHR4IERNQSByZXNvdXJjZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlwYXJhbS0+ZG1hX3R4X2NoYW4gPSByZXMtPnN0YXJ0OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKGRldiwgIm5vIGlycSByZXNvdXJjZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlwYXJhbS0+ZXJyX2lycSA9IHJlcy0+c3RhcnQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHNwb3J0X2RldmljZSAqc3BvcnRfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCXVuc2lnbmVkIGludCB3ZHNpemUsIHVuc2lnbmVkIGludCBkdW1teV9jb3VudCwgc2l6ZV90IHByaXZfc2l6ZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBzcG9ydF9wYXJhbSBwYXJhbTsKIAlzdHJ1Y3Qgc3BvcnRfZGV2aWNlICpzcG9ydDsKLQlwcl9kZWJ1ZygiJXMgZW50ZXJcbiIsIF9fZnVuY19fKTsKLQlCVUdfT04ocGFyYW0gPT0gTlVMTCk7Ci0JQlVHX09OKHdkc2l6ZSA9PSAwIHx8IGR1bW15X2NvdW50ID09IDApOwotCXNwb3J0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNwb3J0X2RldmljZSksIEdGUF9LRVJORUwpOwotCWlmICghc3BvcnQpIHsKLQkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgZm9yIHNwb3J0IGRldmljZVxuIik7CisJaW50IHJldDsKKworCWRldl9kYmcoZGV2LCAiJXMgZW50ZXJcbiIsIF9fZnVuY19fKTsKKworCXBhcmFtLndkc2l6ZSA9IHdkc2l6ZTsKKwlwYXJhbS5kdW1teV9jb3VudCA9IGR1bW15X2NvdW50OworCUJVR19PTihwYXJhbS53ZHNpemUgPT0gMCB8fCBwYXJhbS5kdW1teV9jb3VudCA9PSAwKTsKKworCXJldCA9IHNwb3J0X2NvbmZpZ19wZGV2KHBkZXYsICZwYXJhbSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAocGVyaXBoZXJhbF9yZXF1ZXN0X2xpc3QocGFyYW0ucGluX3JlcSwgInNvYy1hdWRpbyIpKSB7CisJCWRldl9lcnIoZGV2LCAicmVxdWVzdGluZyBQZXJpcGhlcmFscyBmYWlsZWRcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQltZW1zZXQoc3BvcnQsIDAsIHNpemVvZihzdHJ1Y3Qgc3BvcnRfZGV2aWNlKSk7Ci0Jc3BvcnQtPmRtYV9yeF9jaGFuID0gcGFyYW0tPmRtYV9yeF9jaGFuOwotCXNwb3J0LT5kbWFfdHhfY2hhbiA9IHBhcmFtLT5kbWFfdHhfY2hhbjsKLQlzcG9ydC0+ZXJyX2lycSA9IHBhcmFtLT5lcnJfaXJxOwotCXNwb3J0LT5yZWdzID0gcGFyYW0tPnJlZ3M7Ci0Jc3BvcnQtPnByaXZhdGVfZGF0YSA9IHByaXZhdGVfZGF0YTsKKwlzcG9ydCA9IGt6YWxsb2Moc2l6ZW9mKCpzcG9ydCksIEdGUF9LRVJORUwpOworCWlmICghc3BvcnQpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgZm9yIHNwb3J0IGRldmljZVxuIik7CisJCWdvdG8gX19pbml0X2VycjA7CisJfQorCisJc3BvcnQtPm51bSA9IHBhcmFtLm51bTsKKwlzcG9ydC0+ZG1hX3J4X2NoYW4gPSBwYXJhbS5kbWFfcnhfY2hhbjsKKwlzcG9ydC0+ZG1hX3R4X2NoYW4gPSBwYXJhbS5kbWFfdHhfY2hhbjsKKwlzcG9ydC0+ZXJyX2lycSA9IHBhcmFtLmVycl9pcnE7CisJc3BvcnQtPnJlZ3MgPSBwYXJhbS5yZWdzOworCXNwb3J0LT5waW5fcmVxID0gcGFyYW0ucGluX3JlcTsKIAogCWlmIChyZXF1ZXN0X2RtYShzcG9ydC0+ZG1hX3J4X2NoYW4sICJTUE9SVCBSWCBEYXRhIikgPT0gLUVCVVNZKSB7Ci0JCXByX2VycigiRmFpbGVkIHRvIHJlcXVlc3QgUlggZG1hICVkXG4iLCBcCi0JCQkJc3BvcnQtPmRtYV9yeF9jaGFuKTsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBSWCBkbWEgJWRcbiIsIHNwb3J0LT5kbWFfcnhfY2hhbik7CiAJCWdvdG8gX19pbml0X2VycjE7CiAJfQogCWlmIChzZXRfZG1hX2NhbGxiYWNrKHNwb3J0LT5kbWFfcnhfY2hhbiwgcnhfaGFuZGxlciwgc3BvcnQpICE9IDApIHsKLQkJcHJfZXJyKCJGYWlsZWQgdG8gcmVxdWVzdCBSWCBpcnEgJWRcbiIsIFwKLQkJCQlzcG9ydC0+ZG1hX3J4X2NoYW4pOworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZXF1ZXN0IFJYIGlycSAlZFxuIiwgc3BvcnQtPmRtYV9yeF9jaGFuKTsKIAkJZ290byBfX2luaXRfZXJyMjsKIAl9CiAKIAlpZiAocmVxdWVzdF9kbWEoc3BvcnQtPmRtYV90eF9jaGFuLCAiU1BPUlQgVFggRGF0YSIpID09IC1FQlVTWSkgewotCQlwcl9lcnIoIkZhaWxlZCB0byByZXF1ZXN0IFRYIGRtYSAlZFxuIiwgXAotCQkJCXNwb3J0LT5kbWFfdHhfY2hhbik7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgVFggZG1hICVkXG4iLCBzcG9ydC0+ZG1hX3R4X2NoYW4pOwogCQlnb3RvIF9faW5pdF9lcnIyOwogCX0KIAogCWlmIChzZXRfZG1hX2NhbGxiYWNrKHNwb3J0LT5kbWFfdHhfY2hhbiwgdHhfaGFuZGxlciwgc3BvcnQpICE9IDApIHsKLQkJcHJfZXJyKCJGYWlsZWQgdG8gcmVxdWVzdCBUWCBpcnEgJWRcbiIsIFwKLQkJCQlzcG9ydC0+ZG1hX3R4X2NoYW4pOworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZXF1ZXN0IFRYIGlycSAlZFxuIiwgc3BvcnQtPmRtYV90eF9jaGFuKTsKIAkJZ290byBfX2luaXRfZXJyMzsKIAl9CiAKIAlpZiAocmVxdWVzdF9pcnEoc3BvcnQtPmVycl9pcnEsIGVycl9oYW5kbGVyLCBJUlFGX1NIQVJFRCwgIlNQT1JUIGVyciIsCiAJCQlzcG9ydCkgPCAwKSB7Ci0JCXByX2VycigiRmFpbGVkIHRvIHJlcXVlc3QgZXJyIGlycTolZFxuIiwgXAotCQkJCXNwb3J0LT5lcnJfaXJxKTsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBlcnIgaXJxICVkXG4iLCBzcG9ydC0+ZXJyX2lycSk7CiAJCWdvdG8gX19pbml0X2VycjM7CiAJfQogCi0JcHJfZXJyKCJkbWEgcng6JWQgdHg6JWQsIGVyciBpcnE6JWQsIHJlZ3M6JXBcbiIsCisJZGV2X2luZm8oZGV2LCAiZG1hIHJ4OiVkIHR4OiVkLCBlcnIgaXJxOiVkLCByZWdzOiVwXG4iLAogCQkJc3BvcnQtPmRtYV9yeF9jaGFuLCBzcG9ydC0+ZG1hX3R4X2NoYW4sCiAJCQlzcG9ydC0+ZXJyX2lycSwgc3BvcnQtPnJlZ3MpOwogCi0Jc3BvcnQtPndkc2l6ZSA9IHdkc2l6ZTsKLQlzcG9ydC0+ZHVtbXlfY291bnQgPSBkdW1teV9jb3VudDsKKwlzcG9ydC0+d2RzaXplID0gcGFyYW0ud2RzaXplOworCXNwb3J0LT5kdW1teV9jb3VudCA9IHBhcmFtLmR1bW15X2NvdW50OworCisJc3BvcnQtPnByaXZhdGVfZGF0YSA9IGt6YWxsb2MocHJpdl9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNwb3J0LT5wcml2YXRlX2RhdGEpIHsKKwkJZGV2X2VycihkZXYsICJjb3VsZCBub3QgYWxsb2MgcHJpdiBkYXRhICV6dSBieXRlc1xuIiwgcHJpdl9zaXplKTsKKwkJZ290byBfX2luaXRfZXJyNDsKKwl9CiAKIAlpZiAoTDFfREFUQV9BX0xFTkdUSCkKLQkJc3BvcnQtPmR1bW15X2J1ZiA9IGwxX2RhdGFfc3JhbV96YWxsb2MoZHVtbXlfY291bnQgKiAyKTsKKwkJc3BvcnQtPmR1bW15X2J1ZiA9IGwxX2RhdGFfc3JhbV96YWxsb2MocGFyYW0uZHVtbXlfY291bnQgKiAyKTsKIAllbHNlCi0JCXNwb3J0LT5kdW1teV9idWYgPSBremFsbG9jKGR1bW15X2NvdW50ICogMiwgR0ZQX0tFUk5FTCk7CisJCXNwb3J0LT5kdW1teV9idWYgPSBremFsbG9jKHBhcmFtLmR1bW15X2NvdW50ICogMiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwb3J0LT5kdW1teV9idWYgPT0gTlVMTCkgewotCQlwcl9lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBkdW1teSBidWZmZXJcbiIpOwotCQlnb3RvIF9fZXJyb3I7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGR1bW15IGJ1ZmZlclxuIik7CisJCWdvdG8gX19lcnJvcjE7CiAJfQogCiAJcmV0ID0gc3BvcnRfY29uZmlnX3J4X2R1bW15KHNwb3J0KTsKIAlpZiAocmV0KSB7Ci0JCXByX2VycigiRmFpbGVkIHRvIGNvbmZpZyByeCBkdW1teSByaW5nXG4iKTsKLQkJZ290byBfX2Vycm9yOworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBjb25maWcgcnggZHVtbXkgcmluZ1xuIik7CisJCWdvdG8gX19lcnJvcjI7CiAJfQogCXJldCA9IHNwb3J0X2NvbmZpZ190eF9kdW1teShzcG9ydCk7CiAJaWYgKHJldCkgewotCQlwcl9lcnIoIkZhaWxlZCB0byBjb25maWcgdHggZHVtbXkgcmluZ1xuIik7Ci0JCWdvdG8gX19lcnJvcjsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gY29uZmlnIHR4IGR1bW15IHJpbmdcbiIpOworCQlnb3RvIF9fZXJyb3IzOwogCX0KIAorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHNwb3J0KTsKKwogCXJldHVybiBzcG9ydDsKLV9fZXJyb3I6CitfX2Vycm9yMzoKKwlpZiAoTDFfREFUQV9BX0xFTkdUSCkKKwkJbDFfZGF0YV9zcmFtX2ZyZWUoc3BvcnQtPmR1bW15X3J4X2Rlc2MpOworCWVsc2UKKwkJZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgMipzaXplb2Yoc3RydWN0IGRtYXNnKSwKKwkJCQlzcG9ydC0+ZHVtbXlfcnhfZGVzYywgMCk7CitfX2Vycm9yMjoKKwlpZiAoTDFfREFUQV9BX0xFTkdUSCkKKwkJbDFfZGF0YV9zcmFtX2ZyZWUoc3BvcnQtPmR1bW15X2J1Zik7CisJZWxzZQorCQlrZnJlZShzcG9ydC0+ZHVtbXlfYnVmKTsKK19fZXJyb3IxOgorCWtmcmVlKHNwb3J0LT5wcml2YXRlX2RhdGEpOworX19pbml0X2VycjQ6CiAJZnJlZV9pcnEoc3BvcnQtPmVycl9pcnEsIHNwb3J0KTsKIF9faW5pdF9lcnIzOgogCWZyZWVfZG1hKHNwb3J0LT5kbWFfdHhfY2hhbik7CkBAIC04ODUsNiArOTYxLDggQEAKIAlmcmVlX2RtYShzcG9ydC0+ZG1hX3J4X2NoYW4pOwogX19pbml0X2VycjE6CiAJa2ZyZWUoc3BvcnQpOworX19pbml0X2VycjA6CisJcGVyaXBoZXJhbF9mcmVlX2xpc3QocGFyYW0ucGluX3JlcSk7CiAJcmV0dXJuIE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MKHNwb3J0X2luaXQpOwpAQCAtOTE3LDggKzk5NSw5IEBACiAJZnJlZV9kbWEoc3BvcnQtPmRtYV90eF9jaGFuKTsKIAlmcmVlX2lycShzcG9ydC0+ZXJyX2lycSwgc3BvcnQpOwogCisJa2ZyZWUoc3BvcnQtPnByaXZhdGVfZGF0YSk7CisJcGVyaXBoZXJhbF9mcmVlX2xpc3Qoc3BvcnQtPnBpbl9yZXEpOwogCWtmcmVlKHNwb3J0KTsKLQkJc3BvcnQgPSBOVUxMOwogfQogRVhQT1JUX1NZTUJPTChzcG9ydF9kb25lKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXNwb3J0LmggYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtc3BvcnQuaAppbmRleCBhODZlOGNjLi41YWI2MGJkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtc3BvcnQuaAorKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtc3BvcnQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGJmNXh4X2FjOTdfc3BvcnQuaAorICogRmlsZTogICAgICAgICBiZjV4eF9zcG9ydC5oCiAgKiBCYXNlZCBvbjoKICAqIEF1dGhvcjogICAgICAgUm95IEh1YW5nIDxyb3kuaHVhbmdAYW5hbG9nLmNvbT4KICAqCkBAIC0zMywxNSArMzMsMTggQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2JmaW5fc3BvcnQuaD4KIAogI2RlZmluZSBERVNDX0VMRU1FTlRfQ09VTlQgOQogCiBzdHJ1Y3Qgc3BvcnRfZGV2aWNlIHsKKwlpbnQgbnVtOwogCWludCBkbWFfcnhfY2hhbjsKIAlpbnQgZG1hX3R4X2NoYW47CiAJaW50IGVycl9pcnE7CisJY29uc3QgdW5zaWduZWQgc2hvcnQgKnBpbl9yZXE7CiAJc3RydWN0IHNwb3J0X3JlZ2lzdGVyICpyZWdzOwogCiAJdW5zaWduZWQgY2hhciAqcnhfYnVmOwpAQCAtMTAzLDE3ICsxMDYsMjAgQEAKIAl2b2lkICpwcml2YXRlX2RhdGE7CiB9OwogCi1leHRlcm4gc3RydWN0IHNwb3J0X2RldmljZSAqc3BvcnRfaGFuZGxlOwotCiBzdHJ1Y3Qgc3BvcnRfcGFyYW0geworCWludCBudW07CiAJaW50IGRtYV9yeF9jaGFuOwogCWludCBkbWFfdHhfY2hhbjsKIAlpbnQgZXJyX2lycTsKKwljb25zdCB1bnNpZ25lZCBzaG9ydCAqcGluX3JlcTsKIAlzdHJ1Y3Qgc3BvcnRfcmVnaXN0ZXIgKnJlZ3M7CisJdW5zaWduZWQgaW50IHdkc2l6ZTsKKwl1bnNpZ25lZCBpbnQgZHVtbXlfY291bnQ7CisJdm9pZCAqcHJpdmF0ZV9kYXRhOwogfTsKIAotc3RydWN0IHNwb3J0X2RldmljZSAqc3BvcnRfaW5pdChzdHJ1Y3Qgc3BvcnRfcGFyYW0gKnBhcmFtLCB1bnNpZ25lZCB3ZHNpemUsCi0JCXVuc2lnbmVkIGR1bW15X2NvdW50LCB2b2lkICpwcml2YXRlX2RhdGEpOworc3RydWN0IHNwb3J0X2RldmljZSAqc3BvcnRfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCXVuc2lnbmVkIGludCB3ZHNpemUsIHVuc2lnbmVkIGludCBkdW1teV9jb3VudCwgc2l6ZV90IHByaXZfc2l6ZSk7CiAKIHZvaWQgc3BvcnRfZG9uZShzdHJ1Y3Qgc3BvcnRfZGV2aWNlICpzcG9ydCk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1zc20yNjAyLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtc3NtMjYwMi5jCmluZGV4IGFkMjg2NjMuLjc2N2U3NzIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1zc20yNjAyLmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXNzbTI2MDIuYwpAQCAtNDQsMTYgKzQ0LDYgQEAKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgYmY1eHhfc3NtMjYwMjsKIAotc3RhdGljIGludCBiZjV4eF9zc20yNjAyX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+Y3B1X2RhaTsKLQotCXByX2RlYnVnKCIlcyBlbnRlclxuIiwgX19mdW5jX18pOwotCXNuZF9zb2NfZGFpX3NldF9kcnZkYXRhKGNwdV9kYWksIHNwb3J0X2hhbmRsZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgYmY1eHhfc3NtMjYwMl9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCiB7CkBAIC0xMDksMjMgKzk5LDMzIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgYmY1eHhfc3NtMjYwMl9vcHMgPSB7Ci0JLnN0YXJ0dXAgPSBiZjV4eF9zc20yNjAyX3N0YXJ0dXAsCiAJLmh3X3BhcmFtcyA9IGJmNXh4X3NzbTI2MDJfaHdfcGFyYW1zLAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGJmNXh4X3NzbTI2MDJfZGFpID0gewotCS5uYW1lID0gInNzbTI2MDIiLAotCS5zdHJlYW1fbmFtZSA9ICJTU00yNjAyIiwKLQkuY3B1X2RhaV9uYW1lID0gImJmNXh4LWkycyIsCi0JLmNvZGVjX2RhaV9uYW1lID0gInNzbTI2MDItaGlmaSIsCi0JLnBsYXRmb3JtX25hbWUgPSAiYmY1eHgtcGNtLWF1ZGlvIiwKLQkuY29kZWNfbmFtZSA9ICJzc20yNjAyLWNvZGVjLjAtMDAxYiIsCi0JLm9wcyA9ICZiZjV4eF9zc20yNjAyX29wcywKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBiZjV4eF9zc20yNjAyX2RhaVtdID0geworCXsKKwkJLm5hbWUgPSAic3NtMjYwMiIsCisJCS5zdHJlYW1fbmFtZSA9ICJTU00yNjAyIiwKKwkJLmNwdV9kYWlfbmFtZSA9ICJiZmluLWkycy4wIiwKKwkJLmNvZGVjX2RhaV9uYW1lID0gInNzbTI2MDItaGlmaSIsCisJCS5wbGF0Zm9ybV9uYW1lID0gImJmaW4taTJzLXBjbS1hdWRpbyIsCisJCS5jb2RlY19uYW1lID0gInNzbTI2MDIuMC0wMDFiIiwKKwkJLm9wcyA9ICZiZjV4eF9zc20yNjAyX29wcywKKwl9LAorCXsKKwkJLm5hbWUgPSAic3NtMjYwMiIsCisJCS5zdHJlYW1fbmFtZSA9ICJTU00yNjAyIiwKKwkJLmNwdV9kYWlfbmFtZSA9ICJiZmluLWkycy4xIiwKKwkJLmNvZGVjX2RhaV9uYW1lID0gInNzbTI2MDItaGlmaSIsCisJCS5wbGF0Zm9ybV9uYW1lID0gImJmaW4taTJzLXBjbS1hdWRpbyIsCisJCS5jb2RlY19uYW1lID0gInNzbTI2MDIuMC0wMDFiIiwKKwkJLm9wcyA9ICZiZjV4eF9zc20yNjAyX29wcywKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgYmY1eHhfc3NtMjYwMiA9IHsKLQkubmFtZSA9ICJiZjV4eF9zc20yNjAyIiwKLQkuZGFpX2xpbmsgPSAmYmY1eHhfc3NtMjYwMl9kYWksCisJLm5hbWUgPSAiYmZpbi1zc20yNjAyIiwKKwkuZGFpX2xpbmsgPSAmYmY1eHhfc3NtMjYwMl9kYWlbQ09ORklHX1NORF9CRjVYWF9TUE9SVF9OVU1dLAogCS5udW1fbGlua3MgPSAxLAogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXRkbS1wY20uYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC10ZG0tcGNtLmMKaW5kZXggNzRjZjc1OS4uMDdjZmM3YSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXRkbS1wY20uYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtdGRtLXBjbS5jCkBAIC0xNTQsNyArMTU0LDEyIEBACiAKIHN0YXRpYyBpbnQgYmY1eHhfcGNtX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+Y3B1X2RhaTsKKwlzdHJ1Y3Qgc3BvcnRfZGV2aWNlICpzcG9ydF9oYW5kbGUgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShjcHVfZGFpKTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqYnVmID0gJnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcjsKKwogCWludCByZXQgPSAwOwogCiAJc25kX3NvY19zZXRfcnVudGltZV9od3BhcmFtcyhzdWJzdHJlYW0sICZiZjV4eF9wY21faGFyZHdhcmUpOwpAQCAtMTY0LDkgKzE2OSwxNCBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dDsKIAotCWlmIChzcG9ydF9oYW5kbGUgIT0gTlVMTCkKKwlpZiAoc3BvcnRfaGFuZGxlICE9IE5VTEwpIHsKKwkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCQlzcG9ydF9oYW5kbGUtPnR4X2J1ZiA9IGJ1Zi0+YXJlYTsKKwkJZWxzZQorCQkJc3BvcnRfaGFuZGxlLT5yeF9idWYgPSBidWYtPmFyZWE7CisKIAkJcnVudGltZS0+cHJpdmF0ZV9kYXRhID0gc3BvcnRfaGFuZGxlOwotCWVsc2UgeworCX0gZWxzZSB7CiAJCXByX2Vycigic3BvcnRfaGFuZGxlIGlzIE5VTExcbiIpOwogCQlyZXQgPSAtRU5PREVWOwogCX0KQEAgLTI0OSwxMSArMjU5LDYgQEAKIAl9CiAJYnVmLT5ieXRlcyA9IHNpemU7CiAKLQlpZiAoc3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCi0JCXNwb3J0X2hhbmRsZS0+dHhfYnVmID0gYnVmLT5hcmVhOwotCWVsc2UKLQkJc3BvcnRfaGFuZGxlLT5yeF9idWYgPSBidWYtPmFyZWE7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjc0LDggKzI3OSw2IEBACiAJCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIGJ1Zi0+Ynl0ZXMsIGJ1Zi0+YXJlYSwgMCk7CiAJCWJ1Zi0+YXJlYSA9IE5VTEw7CiAJfQotCWlmIChzcG9ydF9oYW5kbGUpCi0JCXNwb3J0X2RvbmUoc3BvcnRfaGFuZGxlKTsKIH0KIAogc3RhdGljIHU2NCBiZjV4eF9wY21fZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CkBAIC0zMjYsNyArMzI5LDcgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYmZpbl90ZG1fZHJpdmVyID0gewogCS5kcml2ZXIgPSB7Ci0JCQkubmFtZSA9ICJiZjV4eC10ZG0tcGNtLWF1ZGlvIiwKKwkJCS5uYW1lID0gImJmaW4tdGRtLXBjbS1hdWRpbyIsCiAJCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtdGRtLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtdGRtLmMKaW5kZXggNTUxNWFjOS4uYTgyMmQxZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXRkbS5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC10ZG0uYwpAQCAtNDYsNDMgKzQ2LDYgQEAKICNpbmNsdWRlICJiZjV4eC1zcG9ydC5oIgogI2luY2x1ZGUgImJmNXh4LXRkbS5oIgogCi1zdGF0aWMgc3RydWN0IGJmNXh4X3RkbV9wb3J0IGJmNXh4X3RkbTsKLXN0YXRpYyBpbnQgc3BvcnRfbnVtID0gQ09ORklHX1NORF9CRjVYWF9TUE9SVF9OVU07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3BvcnRfcGFyYW0gc3BvcnRfcGFyYW1zWzJdID0gewotCXsKLQkJLmRtYV9yeF9jaGFuICAgID0gQ0hfU1BPUlQwX1JYLAotCQkuZG1hX3R4X2NoYW4gICAgPSBDSF9TUE9SVDBfVFgsCi0JCS5lcnJfaXJxICAgICAgICA9IElSUV9TUE9SVDBfRVJST1IsCi0JCS5yZWdzICAgICAgICAgICA9IChzdHJ1Y3Qgc3BvcnRfcmVnaXN0ZXIgKilTUE9SVDBfVENSMSwKLQl9LAotCXsKLQkJLmRtYV9yeF9jaGFuICAgID0gQ0hfU1BPUlQxX1JYLAotCQkuZG1hX3R4X2NoYW4gICAgPSBDSF9TUE9SVDFfVFgsCi0JCS5lcnJfaXJxICAgICAgICA9IElSUV9TUE9SVDFfRVJST1IsCi0JCS5yZWdzICAgICAgICAgICA9IChzdHJ1Y3Qgc3BvcnRfcmVnaXN0ZXIgKilTUE9SVDFfVENSMSwKLQl9Ci19OwotCi0vKgotICogU2V0dGluZyB0aGUgVEZTIHBpbiBzZWxlY3RvciBmb3IgU1BPUlQgMCBiYXNlZCBvbiB3aGV0aGVyIHRoZSBzZWxlY3RlZAotICogcG9ydCBpZCBGIG9yIEcuIElmIHRoZSBwb3J0IGlzIEYgdGhlbiBubyBjb25mbGljdCBzaG91bGQgZXhpc3QgZm9yIHRoZQotICogVEZTLiBXaGVuIFBvcnQgRyBpcyBzZWxlY3RlZCBhbmQgRU1BQyB0aGVuIHRoZXJlIGlzIGEgY29uZmxpY3QgYmV0d2VlbgotICogdGhlIFBIWSBpbnRlcnJ1cHQgbGluZSBhbmQgVEZTLiAgQ3VycmVudCBzZXR0aW5ncyBwcmV2ZW50IHRoZSBjb25mbGljdAotICogYnkgaWdub3JpbmcgdGhlIFRGUyBwaW4gd2hlbiBQb3J0IEcgaXMgc2VsZWN0ZWQuIFRoaXMgYWxsb3dzIGJvdGgKLSAqIGNvZGVjcyBhbmQgRU1BQyB1c2luZyBQb3J0IEcgY29uY3VycmVudGx5LgotICovCi0jaWZkZWYgQ09ORklHX0JGNTI3X1NQT1JUMF9QT1JURwotI2RlZmluZSBMT0NBTF9TUE9SVDBfVEZTICgwKQotI2Vsc2UKLSNkZWZpbmUgTE9DQUxfU1BPUlQwX1RGUyAoUF9TUE9SVDBfVEZTKQotI2VuZGlmCi0KLXN0YXRpYyB1MTYgc3BvcnRfcmVxW11bN10gPSB7IHtQX1NQT1JUMF9EVFBSSSwgUF9TUE9SVDBfVFNDTEssIFBfU1BPUlQwX1JGUywKLQlQX1NQT1JUMF9EUlBSSSwgUF9TUE9SVDBfUlNDTEssIExPQ0FMX1NQT1JUMF9URlMsIDB9LAotCSAgIHtQX1NQT1JUMV9EVFBSSSwgUF9TUE9SVDFfVFNDTEssIFBfU1BPUlQxX1JGUywgUF9TUE9SVDFfRFJQUkksCi0JCSAgIFBfU1BPUlQxX1JTQ0xLLCBQX1NQT1JUMV9URlMsIDB9IH07Ci0KIHN0YXRpYyBpbnQgYmY1eHhfdGRtX3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSwKIAl1bnNpZ25lZCBpbnQgZm10KQogewpAQCAtMTE5LDE0ICs4MiwxNiBAQAogCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAogCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogeworCXN0cnVjdCBzcG9ydF9kZXZpY2UgKnNwb3J0X2hhbmRsZSA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGRhaSk7CisJc3RydWN0IGJmNXh4X3RkbV9wb3J0ICpiZjV4eF90ZG0gPSBzcG9ydF9oYW5kbGUtPnByaXZhdGVfZGF0YTsKIAlpbnQgcmV0ID0gMDsKIAotCWJmNXh4X3RkbS50Y3IyICY9IH4weDFmOwotCWJmNXh4X3RkbS5yY3IyICY9IH4weDFmOworCWJmNXh4X3RkbS0+dGNyMiAmPSB+MHgxZjsKKwliZjV4eF90ZG0tPnJjcjIgJj0gfjB4MWY7CiAJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKIAljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFOgotCQliZjV4eF90ZG0udGNyMiB8PSAzMTsKLQkJYmY1eHhfdGRtLnJjcjIgfD0gMzE7CisJCWJmNXh4X3RkbS0+dGNyMiB8PSAzMTsKKwkJYmY1eHhfdGRtLT5yY3IyIHw9IDMxOwogCQlzcG9ydF9oYW5kbGUtPndkc2l6ZSA9IDQ7CiAJCWJyZWFrOwogCQkvKiBhdCBwcmVzZW50LCB3ZSBvbmx5IHN1cHBvcnQgMzJiaXQgdHJhbnNmZXIgKi8KQEAgLTEzNiw3ICsxMDEsNyBAQAogCQlicmVhazsKIAl9CiAKLQlpZiAoIWJmNXh4X3RkbS5jb25maWd1cmVkKSB7CisJaWYgKCFiZjV4eF90ZG0tPmNvbmZpZ3VyZWQpIHsKIAkJLyoKIAkJICogVFggYW5kIFJYIGFyZSBub3QgaW5kZXBlbmRlbnQsdGhleSBhcmUgZW5hYmxlZCBhdCB0aGUKIAkJICogc2FtZSB0aW1lLCBldmVuIGlmIG9ubHkgb25lIHNpZGUgaXMgcnVubmluZy4gU28sIHdlCkBAIC0xNDUsMjEgKzExMCwyMSBAQAogCQkgKgogCQkgKiBDUFUgREFJOnNsYXZlIG1vZGUuCiAJCSAqLwotCQlyZXQgPSBzcG9ydF9jb25maWdfcngoc3BvcnRfaGFuZGxlLCBiZjV4eF90ZG0ucmNyMSwKLQkJCWJmNXh4X3RkbS5yY3IyLCAwLCAwKTsKKwkJcmV0ID0gc3BvcnRfY29uZmlnX3J4KHNwb3J0X2hhbmRsZSwgYmY1eHhfdGRtLT5yY3IxLAorCQkJYmY1eHhfdGRtLT5yY3IyLCAwLCAwKTsKIAkJaWYgKHJldCkgewogCQkJcHJfZXJyKCJTUE9SVCBpcyBidXN5IVxuIik7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAKLQkJcmV0ID0gc3BvcnRfY29uZmlnX3R4KHNwb3J0X2hhbmRsZSwgYmY1eHhfdGRtLnRjcjEsCi0JCQliZjV4eF90ZG0udGNyMiwgMCwgMCk7CisJCXJldCA9IHNwb3J0X2NvbmZpZ190eChzcG9ydF9oYW5kbGUsIGJmNXh4X3RkbS0+dGNyMSwKKwkJCWJmNXh4X3RkbS0+dGNyMiwgMCwgMCk7CiAJCWlmIChyZXQpIHsKIAkJCXByX2VycigiU1BPUlQgaXMgYnVzeSFcbiIpOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCi0JCWJmNXh4X3RkbS5jb25maWd1cmVkID0gMTsKKwkJYmY1eHhfdGRtLT5jb25maWd1cmVkID0gMTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTE2OCwxNSArMTMzLDIwIEBACiBzdGF0aWMgdm9pZCBiZjV4eF90ZG1fc2h1dGRvd24oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7CisJc3RydWN0IHNwb3J0X2RldmljZSAqc3BvcnRfaGFuZGxlID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoZGFpKTsKKwlzdHJ1Y3QgYmY1eHhfdGRtX3BvcnQgKmJmNXh4X3RkbSA9IHNwb3J0X2hhbmRsZS0+cHJpdmF0ZV9kYXRhOworCiAJLyogTm8gYWN0aXZlIHN0cmVhbSwgU1BPUlQgaXMgYWxsb3dlZCB0byBiZSBjb25maWd1cmVkIGFnYWluLiAqLwogCWlmICghZGFpLT5hY3RpdmUpCi0JCWJmNXh4X3RkbS5jb25maWd1cmVkID0gMDsKKwkJYmY1eHhfdGRtLT5jb25maWd1cmVkID0gMDsKIH0KIAogc3RhdGljIGludCBiZjV4eF90ZG1fc2V0X2NoYW5uZWxfbWFwKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLAogCQl1bnNpZ25lZCBpbnQgdHhfbnVtLCB1bnNpZ25lZCBpbnQgKnR4X3Nsb3QsCiAJCXVuc2lnbmVkIGludCByeF9udW0sIHVuc2lnbmVkIGludCAqcnhfc2xvdCkKIHsKKwlzdHJ1Y3Qgc3BvcnRfZGV2aWNlICpzcG9ydF9oYW5kbGUgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOworCXN0cnVjdCBiZjV4eF90ZG1fcG9ydCAqYmY1eHhfdGRtID0gc3BvcnRfaGFuZGxlLT5wcml2YXRlX2RhdGE7CiAJaW50IGk7CiAJdW5zaWduZWQgaW50IHNsb3Q7CiAJdW5zaWduZWQgaW50IHR4X21hcHBlZCA9IDAsIHJ4X21hcHBlZCA9IDA7CkBAIC0xODksNyArMTU5LDcgQEAKIAkJc2xvdCA9IHR4X3Nsb3RbaV07CiAJCWlmICgoc2xvdCA8IEJGSU5fVERNX0RBSV9NQVhfU0xPVFMpICYmCiAJCQkJKCEodHhfbWFwcGVkICYgKDEgPDwgc2xvdCkpKSkgewotCQkJYmY1eHhfdGRtLnR4X21hcFtpXSA9IHNsb3Q7CisJCQliZjV4eF90ZG0tPnR4X21hcFtpXSA9IHNsb3Q7CiAJCQl0eF9tYXBwZWQgfD0gMSA8PCBzbG90OwogCQl9IGVsc2UKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTk4LDcgKzE2OCw3IEBACiAJCXNsb3QgPSByeF9zbG90W2ldOwogCQlpZiAoKHNsb3QgPCBCRklOX1RETV9EQUlfTUFYX1NMT1RTKSAmJgogCQkJCSghKHJ4X21hcHBlZCAmICgxIDw8IHNsb3QpKSkpIHsKLQkJCWJmNXh4X3RkbS5yeF9tYXBbaV0gPSBzbG90OworCQkJYmY1eHhfdGRtLT5yeF9tYXBbaV0gPSBzbG90OwogCQkJcnhfbWFwcGVkIHw9IDEgPDwgc2xvdDsKIAkJfSBlbHNlCiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTIxMiwxMiArMTgyLDE0IEBACiB7CiAJc3RydWN0IHNwb3J0X2RldmljZSAqc3BvcnQgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOwogCi0JaWYgKCFkYWktPmFjdGl2ZSkKLQkJcmV0dXJuIDA7Ci0JaWYgKGRhaS0+Y2FwdHVyZV9hY3RpdmUpCi0JCXNwb3J0X3J4X3N0b3Aoc3BvcnQpOwogCWlmIChkYWktPnBsYXliYWNrX2FjdGl2ZSkKIAkJc3BvcnRfdHhfc3RvcChzcG9ydCk7CisJaWYgKGRhaS0+Y2FwdHVyZV9hY3RpdmUpCisJCXNwb3J0X3J4X3N0b3Aoc3BvcnQpOworCisJLyogaXNvbGF0ZSBzeW5jL2Nsb2NrIHBpbnMgZnJvbSBjb2RlYyB3aGlsZSBzcG9ydHMgcmVzdW1lICovCisJcGVyaXBoZXJhbF9mcmVlX2xpc3Qoc3BvcnQtPnBpbl9yZXEpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIyNiw5ICsxOTgsNiBAQAogCWludCByZXQ7CiAJc3RydWN0IHNwb3J0X2RldmljZSAqc3BvcnQgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOwogCi0JaWYgKCFkYWktPmFjdGl2ZSkKLQkJcmV0dXJuIDA7Ci0KIAlyZXQgPSBzcG9ydF9zZXRfbXVsdGljaGFubmVsKHNwb3J0LCA4LCAweEZGLCAxKTsKIAlpZiAocmV0KSB7CiAJCXByX2VycigiU1BPUlQgaXMgYnVzeSFcbiIpOwpAQCAtMjQ3LDYgKzIxNiw4IEBACiAJCXJldCA9IC1FQlVTWTsKIAl9CiAKKwlwZXJpcGhlcmFsX3JlcXVlc3RfbGlzdChzcG9ydC0+cGluX3JlcSwgInNvYy1hdWRpbyIpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4MCwyMCArMjUxLDE0IEBACiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGJmaW5fdGRtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0JaW50IHJldCA9IDA7CisJc3RydWN0IHNwb3J0X2RldmljZSAqc3BvcnRfaGFuZGxlOworCWludCByZXQ7CiAKLQlpZiAocGVyaXBoZXJhbF9yZXF1ZXN0X2xpc3QoJnNwb3J0X3JlcVtzcG9ydF9udW1dWzBdLCAic29jLWF1ZGlvIikpIHsKLQkJcHJfZXJyKCJSZXF1ZXN0aW5nIFBlcmlwaGVyYWxzIGZhaWxlZFxuIik7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCS8qIHJlcXVlc3QgRE1BIGZvciBTUE9SVCAqLwotCXNwb3J0X2hhbmRsZSA9IHNwb3J0X2luaXQoJnNwb3J0X3BhcmFtc1tzcG9ydF9udW1dLCA0LCBcCi0JCTggKiBzaXplb2YodTMyKSwgTlVMTCk7Ci0JaWYgKCFzcG9ydF9oYW5kbGUpIHsKLQkJcGVyaXBoZXJhbF9mcmVlX2xpc3QoJnNwb3J0X3JlcVtzcG9ydF9udW1dWzBdKTsKKwkvKiBjb25maWd1cmUgU1BPUlQgZm9yIFRETSAqLworCXNwb3J0X2hhbmRsZSA9IHNwb3J0X2luaXQocGRldiwgNCwgOCAqIHNpemVvZih1MzIpLAorCQlzaXplb2Yoc3RydWN0IGJmNXh4X3RkbV9wb3J0KSk7CisJaWYgKCFzcG9ydF9oYW5kbGUpCiAJCXJldHVybiAtRU5PREVWOwotCX0KIAogCS8qIFNQT1JUIHdvcmtzIGluIFRETSBtb2RlICovCiAJcmV0ID0gc3BvcnRfc2V0X211bHRpY2hhbm5lbChzcG9ydF9oYW5kbGUsIDgsIDB4RkYsIDEpOwpAQCAtMzIzLDE4ICsyODgsMTkgQEAKIAkJZ290byBzcG9ydF9jb25maWdfZXJyOwogCX0KIAotCXNwb3J0X2hhbmRsZS0+cHJpdmF0ZV9kYXRhID0gJmJmNXh4X3RkbTsKIAlyZXR1cm4gMDsKIAogc3BvcnRfY29uZmlnX2VycjoKLQlwZXJpcGhlcmFsX2ZyZWVfbGlzdCgmc3BvcnRfcmVxW3Nwb3J0X251bV1bMF0pOworCXNwb3J0X2RvbmUoc3BvcnRfaGFuZGxlKTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBiZmluX3RkbV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlwZXJpcGhlcmFsX2ZyZWVfbGlzdCgmc3BvcnRfcmVxW3Nwb3J0X251bV1bMF0pOworCXN0cnVjdCBzcG9ydF9kZXZpY2UgKnNwb3J0X2hhbmRsZSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCiAJc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmcGRldi0+ZGV2KTsKKwlzcG9ydF9kb25lKHNwb3J0X2hhbmRsZSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvODhwbTg2MHgtY29kZWMuYyBiL3NvdW5kL3NvYy9jb2RlY3MvODhwbTg2MHgtY29kZWMuYwppbmRleCAwNmI2OTgxLi4xOTI0MTU3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzLzg4cG04NjB4LWNvZGVjLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy84OHBtODYweC1jb2RlYy5jCkBAIC0xMjAsNyArMTIwLDcgQEAKICAqLwogI2RlZmluZSBQTTg2MFhfREFQTV9PVVRQVVQod25hbWUsIHdldmVudCkJXAogewkuaWQgPSBzbmRfc29jX2RhcG1fcGdhLCAubmFtZSA9IHduYW1lLCAucmVnID0gU05EX1NPQ19OT1BNLCBcCi0JLnNoaWZ0ID0gMCwgLmludmVydCA9IDAsIC5rY29udHJvbHMgPSBOVUxMLCBcCisJLnNoaWZ0ID0gMCwgLmludmVydCA9IDAsIC5rY29udHJvbF9uZXdzID0gTlVMTCwgXAogCS5udW1fa2NvbnRyb2xzID0gMCwgLmV2ZW50ID0gd2V2ZW50LCBcCiAJLmV2ZW50X2ZsYWdzID0gU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1ELCB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZyBiL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZwppbmRleCA2OTQzZTI0Li45ODE3NWEwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcKKysrIGIvc291bmQvc29jL2NvZGVjcy9LY29uZmlnCkBAIC0xNiwxMCArMTYsMTEgQEAKIAlzZWxlY3QgU05EX1NPQ19BRDE4MzYgaWYgU1BJX01BU1RFUgogCXNlbGVjdCBTTkRfU09DX0FEMTkzWCBpZiBTTkRfU09DX0kyQ19BTkRfU1BJCiAJc2VsZWN0IFNORF9TT0NfQUQxOTgwIGlmIFNORF9TT0NfQUM5N19CVVMKKwlzZWxlY3QgU05EX1NPQ19BRDczMzExCiAJc2VsZWN0IFNORF9TT0NfQURTMTE3WAotCXNlbGVjdCBTTkRfU09DX0FENzMzMTEgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfQUs0MTA0IGlmIFNQSV9NQVNURVIKIAlzZWxlY3QgU05EX1NPQ19BSzQ1MzUgaWYgSTJDCisJc2VsZWN0IFNORF9TT0NfQUs0NjQxIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX0FLNDY0MiBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19BSzQ2NzEgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfQUxDNTYyMyBpZiBJMkMKQEAgLTMzLDEzICszNCwxNCBAQAogCXNlbGVjdCBTTkRfU09DX0paNDc0MF9DT0RFQyBpZiBTT0NfSlo0NzQwCiAJc2VsZWN0IFNORF9TT0NfTE00ODU3IGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX01BWDk4MDg4IGlmIEkyQworCXNlbGVjdCBTTkRfU09DX01BWDk4MDk1IGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX01BWDk4NTAgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfTUFYOTg3NyBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19QQ00zMDA4CiAJc2VsZWN0IFNORF9TT0NfU0dUTDUwMDAgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfU045NTAzMSBpZiBJTlRFTF9TQ1VfSVBDCiAJc2VsZWN0IFNORF9TT0NfU1BESUYKLQlzZWxlY3QgU05EX1NPQ19TU00yNjAyIGlmIEkyQworCXNlbGVjdCBTTkRfU09DX1NTTTI2MDIgaWYgU05EX1NPQ19JMkNfQU5EX1NQSQogCXNlbGVjdCBTTkRfU09DX1NUQUM5NzY2IGlmIFNORF9TT0NfQUM5N19CVVMKIAlzZWxlY3QgU05EX1NPQ19UTFYzMjBBSUMyMyBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19UTFYzMjBBSUMyNiBpZiBTUElfTUFTVEVSCkBAIC01Miw2ICs1NCw3IEBACiAJc2VsZWN0IFNORF9TT0NfVURBMTM0WAogCXNlbGVjdCBTTkRfU09DX1VEQTEzODAgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV0wxMjczIGlmIE1GRF9XTDEyNzNfQ09SRQorCXNlbGVjdCBTTkRfU09DX1dNMTI1MF9FVjEgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV00yMDAwIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1dNODM1MCBpZiBNRkRfV004MzUwCiAJc2VsZWN0IFNORF9TT0NfV004NDAwIGlmIE1GRF9XTTg0MDAKQEAgLTcyLDYgKzc1LDcgQEAKIAlzZWxlY3QgU05EX1NPQ19XTTg5MDAgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV004OTAzIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1dNODkwNCBpZiBJMkMKKwlzZWxlY3QgU05EX1NPQ19XTTg5MTUgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV004OTQwIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1dNODk1NSBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19XTTg5NjAgaWYgSTJDCkBAIC0xMzYsNiArMTQwLDkgQEAKIGNvbmZpZyBTTkRfU09DX0FLNDUzNQogCXRyaXN0YXRlCiAKK2NvbmZpZyBTTkRfU09DX0FLNDY0MQorCXRyaXN0YXRlCisKIGNvbmZpZyBTTkRfU09DX0FLNDY0MgogCXRyaXN0YXRlCiAKQEAgLTE4Nyw2ICsxOTQsOSBAQAogY29uZmlnIFNORF9TT0NfTUFYOTgwODgKICAgICAgICB0cmlzdGF0ZQogCitjb25maWcgU05EX1NPQ19NQVg5ODA5NQorICAgICAgIHRyaXN0YXRlCisKIGNvbmZpZyBTTkRfU09DX01BWDk4NTAKIAl0cmlzdGF0ZQogCkBAIC0yNDEsNiArMjUxLDkgQEAKIGNvbmZpZyBTTkRfU09DX1dMMTI3MwogCXRyaXN0YXRlCiAKK2NvbmZpZyBTTkRfU09DX1dNMTI1MF9FVjEKKwl0cmlzdGF0ZQorCiBjb25maWcgU05EX1NPQ19XTTgzNTAKIAl0cmlzdGF0ZQogCkBAIC0yOTgsNiArMzExLDkgQEAKIGNvbmZpZyBTTkRfU09DX1dNODkwNAogCXRyaXN0YXRlCiAKK2NvbmZpZyBTTkRfU09DX1dNODkxNQorCXRyaXN0YXRlCisKIGNvbmZpZyBTTkRfU09DX1dNODk0MAogICAgICAgICB0cmlzdGF0ZQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL01ha2VmaWxlIGIvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZQppbmRleCAzNzliYzU1Li5mZDg1NTg0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGUKQEAgLTcsNiArNyw3IEBACiBzbmQtc29jLWFkczExN3gtb2JqcyA6PSBhZHMxMTd4Lm8KIHNuZC1zb2MtYWs0MTA0LW9ianMgOj0gYWs0MTA0Lm8KIHNuZC1zb2MtYWs0NTM1LW9ianMgOj0gYWs0NTM1Lm8KK3NuZC1zb2MtYWs0NjQxLW9ianMgOj0gYWs0NjQxLm8KIHNuZC1zb2MtYWs0NjQyLW9ianMgOj0gYWs0NjQyLm8KIHNuZC1zb2MtYWs0NjcxLW9ianMgOj0gYWs0NjcxLm8KIHNuZC1zb2MtY3E5M3ZjLW9ianMgOj0gY3E5M3ZjLm8KQEAgLTE5LDYgKzIwLDcgQEAKIHNuZC1zb2MtZG1pYy1vYmpzIDo9IGRtaWMubwogc25kLXNvYy1sMy1vYmpzIDo9IGwzLm8KIHNuZC1zb2MtbWF4OTgwODgtb2JqcyA6PSBtYXg5ODA4OC5vCitzbmQtc29jLW1heDk4MDk1LW9ianMgOj0gbWF4OTgwOTUubwogc25kLXNvYy1tYXg5ODUwLW9ianMgOj0gbWF4OTg1MC5vCiBzbmQtc29jLXBjbTMwMDgtb2JqcyA6PSBwY20zMDA4Lm8KIHNuZC1zb2Mtc2d0bDUwMDAtb2JqcyA6PSBzZ3RsNTAwMC5vCkBAIC0zNyw2ICszOSw3IEBACiBzbmQtc29jLXVkYTEzNHgtb2JqcyA6PSB1ZGExMzR4Lm8KIHNuZC1zb2MtdWRhMTM4MC1vYmpzIDo9IHVkYTEzODAubwogc25kLXNvYy13bDEyNzMtb2JqcyA6PSB3bDEyNzMubworc25kLXNvYy13bTEyNTAtZXYxLW9ianMgOj0gd20xMjUwLWV2MS5vCiBzbmQtc29jLXdtODM1MC1vYmpzIDo9IHdtODM1MC5vCiBzbmQtc29jLXdtODQwMC1vYmpzIDo9IHdtODQwMC5vCiBzbmQtc29jLXdtODUxMC1vYmpzIDo9IHdtODUxMC5vCkBAIC01Niw2ICs1OSw3IEBACiBzbmQtc29jLXdtODkwMC1vYmpzIDo9IHdtODkwMC5vCiBzbmQtc29jLXdtODkwMy1vYmpzIDo9IHdtODkwMy5vCiBzbmQtc29jLXdtODkwNC1vYmpzIDo9IHdtODkwNC5vCitzbmQtc29jLXdtODkxNS1vYmpzIDo9IHdtODkxNS5vCiBzbmQtc29jLXdtODk0MC1vYmpzIDo9IHdtODk0MC5vCiBzbmQtc29jLXdtODk1NS1vYmpzIDo9IHdtODk1NS5vCiBzbmQtc29jLXdtODk2MC1vYmpzIDo9IHdtODk2MC5vCkBAIC02OSw3ICs3Myw3IEBACiBzbmQtc29jLXdtODk5MC1vYmpzIDo9IHdtODk5MC5vCiBzbmQtc29jLXdtODk5MS1vYmpzIDo9IHdtODk5MS5vCiBzbmQtc29jLXdtODk5My1vYmpzIDo9IHdtODk5My5vCi1zbmQtc29jLXdtODk5NC1vYmpzIDo9IHdtODk5NC5vIHdtODk5NC10YWJsZXMubworc25kLXNvYy13bTg5OTQtb2JqcyA6PSB3bTg5OTQubyB3bTg5OTQtdGFibGVzLm8gd204OTU4LWRzcDIubwogc25kLXNvYy13bTg5OTUtb2JqcyA6PSB3bTg5OTUubwogc25kLXNvYy13bTkwODEtb2JqcyA6PSB3bTkwODEubwogc25kLXNvYy13bTk3MDUtb2JqcyA6PSB3bTk3MDUubwpAQCAtOTQsNiArOTgsNyBAQAogb2JqLSQoQ09ORklHX1NORF9TT0NfQURTMTE3WCkJKz0gc25kLXNvYy1hZHMxMTd4Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX0FLNDEwNCkJKz0gc25kLXNvYy1hazQxMDQubwogb2JqLSQoQ09ORklHX1NORF9TT0NfQUs0NTM1KQkrPSBzbmQtc29jLWFrNDUzNS5vCitvYmotJChDT05GSUdfU05EX1NPQ19BSzQ2NDEpCSs9IHNuZC1zb2MtYWs0NjQxLm8KIG9iai0kKENPTkZJR19TTkRfU09DX0FLNDY0MikJKz0gc25kLXNvYy1hazQ2NDIubwogb2JqLSQoQ09ORklHX1NORF9TT0NfQUs0NjcxKQkrPSBzbmQtc29jLWFrNDY3MS5vCiBvYmotJChDT05GSUdfU05EX1NPQ19BTEM1NjIzKSAgICArPSBzbmQtc29jLWFsYzU2MjMubwpAQCAtMTA4LDYgKzExMyw3IEBACiBvYmotJChDT05GSUdfU05EX1NPQ19MMykJKz0gc25kLXNvYy1sMy5vCiBvYmotJChDT05GSUdfU05EX1NPQ19KWjQ3NDBfQ09ERUMpCSs9IHNuZC1zb2Mtano0NzQwLWNvZGVjLm8KIG9iai0kKENPTkZJR19TTkRfU09DX01BWDk4MDg4KQkrPSBzbmQtc29jLW1heDk4MDg4Lm8KK29iai0kKENPTkZJR19TTkRfU09DX01BWDk4MDk1KQkrPSBzbmQtc29jLW1heDk4MDk1Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX01BWDk4NTApCSs9IHNuZC1zb2MtbWF4OTg1MC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19QQ00zMDA4KQkrPSBzbmQtc29jLXBjbTMwMDgubwogb2JqLSQoQ09ORklHX1NORF9TT0NfU0dUTDUwMDApICArPSBzbmQtc29jLXNndGw1MDAwLm8KQEAgLTEyNSw2ICsxMzEsNyBAQAogb2JqLSQoQ09ORklHX1NORF9TT0NfVURBMTM0WCkJKz0gc25kLXNvYy11ZGExMzR4Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX1VEQTEzODApCSs9IHNuZC1zb2MtdWRhMTM4MC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTDEyNzMpCSs9IHNuZC1zb2Mtd2wxMjczLm8KK29iai0kKENPTkZJR19TTkRfU09DX1dNMTI1MF9FVjEpICs9IHNuZC1zb2Mtd20xMjUwLWV2MS5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTgzNTApCSs9IHNuZC1zb2Mtd204MzUwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODQwMCkJKz0gc25kLXNvYy13bTg0MDAubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004NTEwKQkrPSBzbmQtc29jLXdtODUxMC5vCkBAIC0xNDQsNiArMTUxLDcgQEAKIG9iai0kKENPTkZJR19TTkRfU09DX1dNODkwMCkJKz0gc25kLXNvYy13bTg5MDAubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTAzKQkrPSBzbmQtc29jLXdtODkwMy5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg5MDQpCSs9IHNuZC1zb2Mtd204OTA0Lm8KK29iai0kKENPTkZJR19TTkRfU09DX1dNODkxNSkJKz0gc25kLXNvYy13bTg5MTUubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTQwKQkrPSBzbmQtc29jLXdtODk0MC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg5NTUpCSs9IHNuZC1zb2Mtd204OTU1Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODk2MCkJKz0gc25kLXNvYy13bTg5NjAubwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hZDE5M3guYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxOTN4LmMKaW5kZXggZGE0NjQ3OS4uMjM3NGNhNSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hZDE5M3guYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2FkMTkzeC5jCkBAIC0yMyw4ICsyMyw3IEBACiAKIC8qIGNvZGVjIHByaXZhdGUgZGF0YSAqLwogc3RydWN0IGFkMTkzeF9wcml2IHsKLQllbnVtIHNuZF9zb2NfY29udHJvbF90eXBlIGJ1c190eXBlOwotCXZvaWQgKmNvbnRyb2xfZGF0YTsKKwllbnVtIHNuZF9zb2NfY29udHJvbF90eXBlIGNvbnRyb2xfdHlwZTsKIAlpbnQgc3lzY2xrOwogfTsKIApAQCAtMzU0LDE0ICszNTMsMTIgQEAKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAJaW50IHJldDsKIAotCWNvZGVjLT5jb250cm9sX2RhdGEgPSBhZDE5M3gtPmNvbnRyb2xfZGF0YTsKLQlpZiAoYWQxOTN4LT5idXNfdHlwZSA9PSBTTkRfU09DX0kyQykKLQkJcmV0ID0gc25kX3NvY19jb2RlY19zZXRfY2FjaGVfaW8oY29kZWMsIDgsIDgsIGFkMTkzeC0+YnVzX3R5cGUpOworCWlmIChhZDE5M3gtPmNvbnRyb2xfdHlwZSA9PSBTTkRfU09DX0kyQykKKwkJcmV0ID0gc25kX3NvY19jb2RlY19zZXRfY2FjaGVfaW8oY29kZWMsIDgsIDgsIGFkMTkzeC0+Y29udHJvbF90eXBlKTsKIAllbHNlCi0JCXJldCA9IHNuZF9zb2NfY29kZWNfc2V0X2NhY2hlX2lvKGNvZGVjLCAxNiwgOCwgYWQxOTN4LT5idXNfdHlwZSk7CisJCXJldCA9IHNuZF9zb2NfY29kZWNfc2V0X2NhY2hlX2lvKGNvZGVjLCAxNiwgOCwgYWQxOTN4LT5jb250cm9sX3R5cGUpOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byBzZXQgY2FjaGUgSS9POiAlZFxuIiwKLQkJCQlyZXQpOworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJmYWlsZWQgdG8gc2V0IGNhY2hlIEkvTzogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC00MDgsOCArNDA1LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlzcGlfc2V0X2RydmRhdGEoc3BpLCBhZDE5M3gpOwotCWFkMTkzeC0+Y29udHJvbF9kYXRhID0gc3BpOwotCWFkMTkzeC0+YnVzX3R5cGUgPSBTTkRfU09DX1NQSTsKKwlhZDE5M3gtPmNvbnRyb2xfdHlwZSA9IFNORF9TT0NfU1BJOwogCiAJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYygmc3BpLT5kZXYsCiAJCQkmc29jX2NvZGVjX2Rldl9hZDE5M3gsICZhZDE5M3hfZGFpLCAxKTsKQEAgLTQyNyw3ICs0MjMsNyBAQAogCiBzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgYWQxOTN4X3NwaV9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKLQkJLm5hbWUJPSAiYWQxOTN4LWNvZGVjIiwKKwkJLm5hbWUJPSAiYWQxOTN4IiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIAkucHJvYmUJCT0gYWQxOTN4X3NwaV9wcm9iZSwKQEAgLTQ1NCw4ICs0NTAsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGFkMTkzeCk7Ci0JYWQxOTN4LT5jb250cm9sX2RhdGEgPSBjbGllbnQ7Ci0JYWQxOTN4LT5idXNfdHlwZSA9IFNORF9TT0NfSTJDOworCWFkMTkzeC0+Y29udHJvbF90eXBlID0gU05EX1NPQ19JMkM7CiAKIAlyZXQgPSAgc25kX3NvY19yZWdpc3Rlcl9jb2RlYygmY2xpZW50LT5kZXYsCiAJCQkmc29jX2NvZGVjX2Rldl9hZDE5M3gsICZhZDE5M3hfZGFpLCAxKTsKQEAgLTQ3Myw3ICs0NjgsNyBAQAogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWQxOTN4X2kyY19kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAiYWQxOTN4LWNvZGVjIiwKKwkJLm5hbWUgPSAiYWQxOTN4IiwKIAl9LAogCS5wcm9iZSAgICA9IGFkMTkzeF9pMmNfcHJvYmUsCiAJLnJlbW92ZSAgID0gX19kZXZleGl0X3AoYWQxOTN4X2kyY19yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hZDE5ODAuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxOTgwLmMKaW5kZXggMzRjYjUxZS4uOTIzYjM2NCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hZDE5ODAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2FkMTk4MC5jCkBAIC0yNjYsNyArMjY2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWQxOTgwX2NvZGVjX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewotCQkJLm5hbWUgPSAiYWQxOTgwLWNvZGVjIiwKKwkJCS5uYW1lID0gImFkMTk4MCIsCiAJCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FkNzMzMTEuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQ3MzMxMS5jCmluZGV4IGRlNzk5Y2QuLjhkNzkzZTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWQ3MzMxMS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQ3MzMxMS5jCkBAIC01NSw3ICs1NSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFkNzMzMTFfY29kZWNfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7Ci0JCQkubmFtZSA9ICJhZDczMzExLWNvZGVjIiwKKwkJCS5uYW1lID0gImFkNzMzMTEiLAogCQkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hazQ1MzUuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWs0NTM1LmMKaW5kZXggOGIzODczOS4uZTFhMjE0ZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hazQ1MzUuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2FrNDUzNS5jCkBAIC0yMzAsNyArMjMwLDcgQEAKIAlTTkRfU09DX0RBUE1fSU5QVVQoIkFJTiIpLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fbWFwW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhazQ1MzVfYXVkaW9fbWFwW10gPSB7CiAJLypzdGVyZW8gbWl4ZXIgKi8KIAl7IlN0ZXJlbyBNaXhlciIsICJQbGF5YmFjayBTd2l0Y2giLCAiREFDIn0sCiAJeyJTdGVyZW8gTWl4ZXIiLCAiTWljIFNpZGV0b25lIFN3aXRjaCIsICJNaWMifSwKQEAgLTI4NywxNyArMjg3LDYgQEAKIAl7IklucHV0IE1peGVyIiwgIkF1eCBDYXB0dXJlIFN3aXRjaCIsICJBdXggSW4ifSwKIH07CiAKLXN0YXRpYyBpbnQgYWs0NTM1X2FkZF93aWRnZXRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07Ci0KLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIGFrNDUzNV9kYXBtX3dpZGdldHMsCi0JCQkJICBBUlJBWV9TSVpFKGFrNDUzNV9kYXBtX3dpZGdldHMpKTsKLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBhazQ1MzVfc2V0X2RhaV9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCiAJaW50IGNsa19pZCwgdW5zaWduZWQgaW50IGZyZXEsIGludCBkaXIpCiB7CkBAIC00NTcsOCArNDQ2LDYgQEAKIAogCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBhazQ1MzVfc25kX2NvbnRyb2xzLAogCQkJCUFSUkFZX1NJWkUoYWs0NTM1X3NuZF9jb250cm9scykpOwotCWFrNDUzNV9hZGRfd2lkZ2V0cyhjb2RlYyk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNDgwLDYgKzQ2NywxMCBAQAogCS5yZWdfY2FjaGVfc2l6ZSA9IEFSUkFZX1NJWkUoYWs0NTM1X3JlZyksCiAJLnJlZ193b3JkX3NpemUgPSBzaXplb2YodTgpLAogCS5yZWdfY2FjaGVfZGVmYXVsdCA9IGFrNDUzNV9yZWcsCisJLmRhcG1fd2lkZ2V0cyA9IGFrNDUzNV9kYXBtX3dpZGdldHMsCisJLm51bV9kYXBtX3dpZGdldHMgPSBBUlJBWV9TSVpFKGFrNDUzNV9kYXBtX3dpZGdldHMpLAorCS5kYXBtX3JvdXRlcyA9IGFrNDUzNV9hdWRpb19tYXAsCisJLm51bV9kYXBtX3JvdXRlcyA9IEFSUkFZX1NJWkUoYWs0NTM1X2F1ZGlvX21hcCksCiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hazQ2NDEuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWs0NjQxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ5NmYyNDdjCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy9hazQ2NDEuYwpAQCAtMCwwICsxLDY2NCBAQAorLyoKKyAqIGFrNDY0MS5jICAtLSAgQUs0NjQxIEFMU0EgU29jIEF1ZGlvIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251Zmlpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDExIERtaXRyeSBBcnRhbW9ub3cgPG1hZF9zb2Z0QGluYm94LnJ1PgorICoKKyAqIEJhc2VkIG9uIGFrNDUzNS5jIGJ5IFJpY2hhcmQgUHVyZGllCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorI2luY2x1ZGUgPHNvdW5kL2FrNDY0MS5oPgorCisjaW5jbHVkZSAiYWs0NjQxLmgiCisKKy8qIGNvZGVjIHByaXZhdGUgZGF0YSAqLworc3RydWN0IGFrNDY0MV9wcml2IHsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJdW5zaWduZWQgaW50IHN5c2NsazsKKwlpbnQgZGVlbXBoOworCWludCBwbGF5YmFja19mczsKK307CisKKy8qCisgKiBhazQ2NDEgcmVnaXN0ZXIgY2FjaGUKKyAqLworc3RhdGljIGNvbnN0IHU4IGFrNDY0MV9yZWdbQUs0NjQxX0NBQ0hFUkVHTlVNXSA9IHsKKwkweDAwLCAweDgwLCAweDAwLCAweDgwLAorCTB4MDIsIDB4MDAsIDB4MTEsIDB4MDUsCisJMHgwMCwgMHgwMCwgMHgzNiwgMHgxMCwKKwkweDAwLCAweDAwLCAweDU3LCAweDAwLAorCTB4ODgsIDB4ODgsIDB4MDgsIDB4MDgKK307CisKK3N0YXRpYyBjb25zdCBpbnQgZGVlbXBoX3NldHRpbmdzW10gPSB7NDQxMDAsIDAsIDQ4MDAwLCAzMjAwMH07CisKK3N0YXRpYyBpbnQgYWs0NjQxX3NldF9kZWVtcGgoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBhazQ2NDFfcHJpdiAqYWs0NjQxID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJaW50IGksIGJlc3QgPSAwOworCisJZm9yIChpID0gMCA7IGkgPCBBUlJBWV9TSVpFKGRlZW1waF9zZXR0aW5ncyk7IGkrKykgeworCQkvKiBpZiBkZWVtcGhhc2lzIGlzIG9uLCBzZWxlY3QgdGhlIG5lYXJlc3QgYXZhaWxhYmxlIHJhdGUgKi8KKwkJaWYgKGFrNDY0MS0+ZGVlbXBoICYmIGRlZW1waF9zZXR0aW5nc1tpXSAhPSAwICYmCisJCSAgICBhYnMoZGVlbXBoX3NldHRpbmdzW2ldIC0gYWs0NjQxLT5wbGF5YmFja19mcykgPAorCQkgICAgYWJzKGRlZW1waF9zZXR0aW5nc1tiZXN0XSAtIGFrNDY0MS0+cGxheWJhY2tfZnMpKQorCQkJYmVzdCA9IGk7CisKKwkJaWYgKCFhazQ2NDEtPmRlZW1waCAmJiBkZWVtcGhfc2V0dGluZ3NbaV0gPT0gMCkKKwkJCWJlc3QgPSBpOworCX0KKworCWRldl9kYmcoY29kZWMtPmRldiwgIlNldCBkZWVtcGhhc2lzICVkXG4iLCBiZXN0KTsKKworCXJldHVybiBzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBBSzQ2NDFfREFDLCAweDMsIGJlc3QpOworfQorCitzdGF0aWMgaW50IGFrNDY0MV9wdXRfZGVlbXBoKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3QgYWs0NjQxX3ByaXYgKmFrNDY0MSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCWludCBkZWVtcGggPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOworCisJaWYgKGRlZW1waCA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJYWs0NjQxLT5kZWVtcGggPSBkZWVtcGg7CisKKwlyZXR1cm4gYWs0NjQxX3NldF9kZWVtcGgoY29kZWMpOworfQorCitzdGF0aWMgaW50IGFrNDY0MV9nZXRfZGVlbXBoKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3QgYWs0NjQxX3ByaXYgKmFrNDY0MSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGFrNDY0MS0+ZGVlbXBoOworCXJldHVybiAwOworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmFrNDY0MV9tb25vX291dFtdID0geyIoTCArIFIpLzIiLCAiSGktWiJ9Oworc3RhdGljIGNvbnN0IGNoYXIgKmFrNDY0MV9ocF9vdXRbXSA9IHsiU3RlcmVvIiwgIk1vbm8ifTsKK3N0YXRpYyBjb25zdCBjaGFyICphazQ2NDFfbWljX3NlbGVjdFtdID0geyJJbnRlcm5hbCIsICJFeHRlcm5hbCJ9Oworc3RhdGljIGNvbnN0IGNoYXIgKmFrNDY0MV9taWNfb3JfZGFjW10gPSB7Ik1pY3JvcGhvbmUiLCAiVm9pY2UgREFDIn07CisKKworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKG1vbm9fZ2Fpbl90bHYsIC0xNzAwLCAyMzAwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShtaWNfYm9vc3RfdGx2LCAwLCAyMDAwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShlcV90bHYsIC0xMDUwLCAxNTAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKG1hc3Rlcl90bHYsIC0xMjc1MCwgNTAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKG1pY19zdGVyZW9fc2lkZXRvbmVfdGx2LCAtMjcwMCwgMzAwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShtaWNfbW9ub19zaWRldG9uZV90bHYsIC00MDAsIDQwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoY2FwdHVyZV90bHYsIC04MDAsIDUwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShhbGNfdGx2LCAtODAwLCA1MCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoYXV4X2luX3RsdiwgLTIxMDAsIDMwMCwgMCk7CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhazQ2NDFfbW9ub19vdXRfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKEFLNDY0MV9TSUcxLCA2LCAyLCBhazQ2NDFfbW9ub19vdXQpOworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhazQ2NDFfaHBfb3V0X2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShBSzQ2NDFfTU9ERTIsIDIsIDIsIGFrNDY0MV9ocF9vdXQpOworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhazQ2NDFfbWljX3NlbGVjdF9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoQUs0NjQxX01JQywgMSwgMiwgYWs0NjQxX21pY19zZWxlY3QpOworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhazQ2NDFfbWljX29yX2RhY19lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoQUs0NjQxX0JUSUYsIDQsIDIsIGFrNDY0MV9taWNfb3JfZGFjKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFrNDY0MV9zbmRfY29udHJvbHNbXSA9IHsKKwlTT0NfRU5VTSgiTW9ubyAxIE91dHB1dCIsIGFrNDY0MV9tb25vX291dF9lbnVtKSwKKwlTT0NfU0lOR0xFX1RMVigiTW9ubyAxIEdhaW4gVm9sdW1lIiwgQUs0NjQxX1NJRzEsIDcsIDEsIDEsCisJCQkJCQkJbW9ub19nYWluX3RsdiksCisJU09DX0VOVU0oIkhlYWRwaG9uZSBPdXRwdXQiLCBhazQ2NDFfaHBfb3V0X2VudW0pLAorCVNPQ19TSU5HTEVfQk9PTF9FWFQoIlBsYXliYWNrIERlZW1waGFzaXMgU3dpdGNoIiwgMCwKKwkJCQkJYWs0NjQxX2dldF9kZWVtcGgsIGFrNDY0MV9wdXRfZGVlbXBoKSwKKworCVNPQ19TSU5HTEVfVExWKCJNaWMgQm9vc3QgVm9sdW1lIiwgQUs0NjQxX01JQywgMCwgMSwgMCwgbWljX2Jvb3N0X3RsdiksCisKKwlTT0NfU0lOR0xFKCJBTEMgT3BlcmF0aW9uIFRpbWUiLCBBSzQ2NDFfVElNRVIsIDAsIDMsIDApLAorCVNPQ19TSU5HTEUoIkFMQyBSZWNvdmVyeSBUaW1lIiwgQUs0NjQxX1RJTUVSLCAyLCAzLCAwKSwKKwlTT0NfU0lOR0xFKCJBTEMgWkMgVGltZSIsIEFLNDY0MV9USU1FUiwgNCwgMywgMCksCisKKwlTT0NfU0lOR0xFKCJBTEMgMSBTd2l0Y2giLCBBSzQ2NDFfQUxDMSwgNSwgMSwgMCksCisKKwlTT0NfU0lOR0xFX1RMVigiQUxDIFZvbHVtZSIsIEFLNDY0MV9BTEMyLCAwLCA3MSwgMCwgYWxjX3RsdiksCisJU09DX1NJTkdMRSgiTGVmdCBPdXQgRW5hYmxlIFN3aXRjaCIsIEFLNDY0MV9TSUcyLCAxLCAxLCAwKSwKKwlTT0NfU0lOR0xFKCJSaWdodCBPdXQgRW5hYmxlIFN3aXRjaCIsIEFLNDY0MV9TSUcyLCAwLCAxLCAwKSwKKworCVNPQ19TSU5HTEVfVExWKCJDYXB0dXJlIFZvbHVtZSIsIEFLNDY0MV9QR0EsIDAsIDcxLCAwLCBjYXB0dXJlX3RsdiksCisKKwlTT0NfRE9VQkxFX1JfVExWKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgQUs0NjQxX0xBVFQsCisJCQkJQUs0NjQxX1JBVFQsIDAsIDI1NSwgMSwgbWFzdGVyX3RsdiksCisKKwlTT0NfU0lOR0xFX1RMVigiQVVYIEluIFZvbHVtZSIsIEFLNDY0MV9WT0wsIDAsIDE1LCAwLCBhdXhfaW5fdGx2KSwKKworCVNPQ19TSU5HTEUoIkVxdWFsaXplciBTd2l0Y2giLCBBSzQ2NDFfREFDLCAyLCAxLCAwKSwKKwlTT0NfU0lOR0xFX1RMVigiRVExIDEwMCBIeiBWb2x1bWUiLCBBSzQ2NDFfRVFMTywgMCwgMTUsIDEsIGVxX3RsdiksCisJU09DX1NJTkdMRV9UTFYoIkVRMiAyNTAgSHogVm9sdW1lIiwgQUs0NjQxX0VRTE8sIDQsIDE1LCAxLCBlcV90bHYpLAorCVNPQ19TSU5HTEVfVExWKCJFUTMgMSBrSHogVm9sdW1lIiwgQUs0NjQxX0VRTUlELCAwLCAxNSwgMSwgZXFfdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiRVE0IDMuNSBrSHogVm9sdW1lIiwgQUs0NjQxX0VRTUlELCA0LCAxNSwgMSwgZXFfdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiRVE1IDEwIGtIeiBWb2x1bWUiLCBBSzQ2NDFfRVFISSwgMCwgMTUsIDEsIGVxX3RsdiksCit9OworCisvKiBNb25vIDEgTWl4ZXIgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhazQ2NDFfbW9ubzFfbWl4ZXJfY29udHJvbHNbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEVfVExWKCJNaWMgTW9ubyBTaWRldG9uZSBWb2x1bWUiLCBBSzQ2NDFfVk9MLCA3LCAxLCAwLAorCQkJCQkJbWljX21vbm9fc2lkZXRvbmVfdGx2KSwKKwlTT0NfREFQTV9TSU5HTEUoIk1pYyBNb25vIFNpZGV0b25lIFN3aXRjaCIsIEFLNDY0MV9TSUcxLCA0LCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIk1vbm8gUGxheWJhY2sgU3dpdGNoIiwgQUs0NjQxX1NJRzEsIDUsIDEsIDApLAorfTsKKworLyogU3RlcmVvIE1peGVyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWs0NjQxX3N0ZXJlb19taXhlcl9jb250cm9sc1tdID0geworCVNPQ19EQVBNX1NJTkdMRV9UTFYoIk1pYyBTaWRldG9uZSBWb2x1bWUiLCBBSzQ2NDFfVk9MLCA0LCA3LCAwLAorCQkJCQkJbWljX3N0ZXJlb19zaWRldG9uZV90bHYpLAorCVNPQ19EQVBNX1NJTkdMRSgiTWljIFNpZGV0b25lIFN3aXRjaCIsIEFLNDY0MV9TSUcyLCA0LCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIlBsYXliYWNrIFN3aXRjaCIsIEFLNDY0MV9TSUcyLCA3LCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIkF1eCBCeXBhc3MgU3dpdGNoIiwgQUs0NjQxX1NJRzIsIDUsIDEsIDApLAorfTsKKworLyogSW5wdXQgTWl4ZXIgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhazQ2NDFfaW5wdXRfbWl4ZXJfY29udHJvbHNbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEUoIk1pYyBDYXB0dXJlIFN3aXRjaCIsIEFLNDY0MV9NSUMsIDIsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiQXV4IENhcHR1cmUgU3dpdGNoIiwgQUs0NjQxX01JQywgNSwgMSwgMCksCit9OworCisvKiBNaWMgbXV4ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWs0NjQxX21pY19tdXhfY29udHJvbCA9CisJU09DX0RBUE1fRU5VTSgiTWljIFNlbGVjdCIsIGFrNDY0MV9taWNfc2VsZWN0X2VudW0pOworCisvKiBJbnB1dCBtdXggKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhazQ2NDFfaW5wdXRfbXV4X2NvbnRyb2wgPQorCVNPQ19EQVBNX0VOVU0oIklucHV0IFNlbGVjdCIsIGFrNDY0MV9taWNfb3JfZGFjX2VudW0pOworCisvKiBtb25vIDIgc3dpdGNoICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWs0NjQxX21vbm8yX2NvbnRyb2wgPQorCVNPQ19EQVBNX1NJTkdMRSgiU3dpdGNoIiwgQUs0NjQxX1NJRzEsIDAsIDEsIDApOworCisvKiBhazQ2NDEgZGFwbSB3aWRnZXRzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgYWs0NjQxX2RhcG1fd2lkZ2V0c1tdID0geworCVNORF9TT0NfREFQTV9NSVhFUigiU3RlcmVvIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmYWs0NjQxX3N0ZXJlb19taXhlcl9jb250cm9sc1swXSwKKwkJQVJSQVlfU0laRShhazQ2NDFfc3RlcmVvX21peGVyX2NvbnRyb2xzKSksCisJU05EX1NPQ19EQVBNX01JWEVSKCJNb25vMSBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJJmFrNDY0MV9tb25vMV9taXhlcl9jb250cm9sc1swXSwKKwkJQVJSQVlfU0laRShhazQ2NDFfbW9ubzFfbWl4ZXJfY29udHJvbHMpKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIklucHV0IE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmYWs0NjQxX2lucHV0X21peGVyX2NvbnRyb2xzWzBdLAorCQlBUlJBWV9TSVpFKGFrNDY0MV9pbnB1dF9taXhlcl9jb250cm9scykpLAorCVNORF9TT0NfREFQTV9NVVgoIk1pYyBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSZhazQ2NDFfbWljX211eF9jb250cm9sKSwKKwlTTkRfU09DX0RBUE1fTVVYKCJJbnB1dCBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSZhazQ2NDFfaW5wdXRfbXV4X2NvbnRyb2wpLAorCVNORF9TT0NfREFQTV9TV0lUQ0goIk1vbm8gMiBFbmFibGUiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSZhazQ2NDFfbW9ubzJfY29udHJvbCksCisKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJMT1VUIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiUk9VVCIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIk1PVVQxIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiTU9VVDIiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJNSUNPVVQiKSwKKworCVNORF9TT0NfREFQTV9BREMoIkFEQyIsICJIaUZpIENhcHR1cmUiLCBBSzQ2NDFfUE0xLCAwLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJNaWMiLCBBSzQ2NDFfUE0xLCAxLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJBVVggSW4iLCBBSzQ2NDFfUE0xLCAyLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJNb25vIE91dCIsIEFLNDY0MV9QTTEsIDMsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIkxpbmUgT3V0IiwgQUs0NjQxX1BNMSwgNCwgMCwgTlVMTCwgMCksCisKKwlTTkRfU09DX0RBUE1fREFDKCJEQUMiLCAiSGlGaSBQbGF5YmFjayIsIEFLNDY0MV9QTTIsIDAsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIk1vbm8gT3V0IDIiLCBBSzQ2NDFfUE0yLCAzLCAwLCBOVUxMLCAwKSwKKworCVNORF9TT0NfREFQTV9BREMoIlZvaWNlIEFEQyIsICJWb2ljZSBDYXB0dXJlIiwgQUs0NjQxX0JUSUYsIDAsIDApLAorCVNORF9TT0NfREFQTV9BREMoIlZvaWNlIERBQyIsICJWb2ljZSBQbGF5YmFjayIsIEFLNDY0MV9CVElGLCAxLCAwKSwKKworCVNORF9TT0NfREFQTV9NSUNCSUFTKCJNaWMgSW50IEJpYXMiLCBBSzQ2NDFfTUlDLCAzLCAwKSwKKwlTTkRfU09DX0RBUE1fTUlDQklBUygiTWljIEV4dCBCaWFzIiwgQUs0NjQxX01JQywgNCwgMCksCisKKwlTTkRfU09DX0RBUE1fSU5QVVQoIk1JQ0lOIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJNSUNFWFQiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIkFVWCIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiQUlOIiksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhazQ2NDFfYXVkaW9fbWFwW10gPSB7CisJLyogU3RlcmVvIE1peGVyICovCisJeyJTdGVyZW8gTWl4ZXIiLCAiUGxheWJhY2sgU3dpdGNoIiwgIkRBQyJ9LAorCXsiU3RlcmVvIE1peGVyIiwgIk1pYyBTaWRldG9uZSBTd2l0Y2giLCAiSW5wdXQgTXV4In0sCisJeyJTdGVyZW8gTWl4ZXIiLCAiQXV4IEJ5cGFzcyBTd2l0Y2giLCAiQVVYIEluIn0sCisKKwkvKiBNb25vIDEgTWl4ZXIgKi8KKwl7Ik1vbm8xIE1peGVyIiwgIk1pYyBNb25vIFNpZGV0b25lIFN3aXRjaCIsICJJbnB1dCBNdXgifSwKKwl7Ik1vbm8xIE1peGVyIiwgIk1vbm8gUGxheWJhY2sgU3dpdGNoIiwgIkRBQyJ9LAorCisJLyogTWljICovCisJeyJNaWMiLCBOVUxMLCAiQUlOIn0sCisJeyJNaWMgTXV4IiwgIkludGVybmFsIiwgIk1pYyBJbnQgQmlhcyJ9LAorCXsiTWljIE11eCIsICJFeHRlcm5hbCIsICJNaWMgRXh0IEJpYXMifSwKKwl7Ik1pYyBJbnQgQmlhcyIsIE5VTEwsICJNSUNJTiJ9LAorCXsiTWljIEV4dCBCaWFzIiwgTlVMTCwgIk1JQ0VYVCJ9LAorCXsiTUlDT1VUIiwgTlVMTCwgIk1pYyBNdXgifSwKKworCS8qIElucHV0IE11eCAqLworCXsiSW5wdXQgTXV4IiwgIk1pY3JvcGhvbmUiLCAiTWljIn0sCisJeyJJbnB1dCBNdXgiLCAiVm9pY2UgREFDIiwgIlZvaWNlIERBQyJ9LAorCisJLyogTGluZSBPdXQgKi8KKwl7IkxPVVQiLCBOVUxMLCAiTGluZSBPdXQifSwKKwl7IlJPVVQiLCBOVUxMLCAiTGluZSBPdXQifSwKKwl7IkxpbmUgT3V0IiwgTlVMTCwgIlN0ZXJlbyBNaXhlciJ9LAorCisJLyogTW9ubyAxIE91dCAqLworCXsiTU9VVDEiLCBOVUxMLCAiTW9ubyBPdXQifSwKKwl7Ik1vbm8gT3V0IiwgTlVMTCwgIk1vbm8xIE1peGVyIn0sCisKKwkvKiBNb25vIDIgT3V0ICovCisJeyJNT1VUMiIsIE5VTEwsICJNb25vIDIgRW5hYmxlIn0sCisJeyJNb25vIDIgRW5hYmxlIiwgIlN3aXRjaCIsICJNb25vIE91dCAyIn0sCisJeyJNb25vIE91dCAyIiwgTlVMTCwgIlN0ZXJlbyBNaXhlciJ9LAorCisJeyJWb2ljZSBBREMiLCBOVUxMLCAiTW9ubyAyIEVuYWJsZSJ9LAorCisJLyogQXV4IEluICovCisJeyJBVVggSW4iLCBOVUxMLCAiQVVYIn0sCisKKwkvKiBBREMgKi8KKwl7IkFEQyIsIE5VTEwsICJJbnB1dCBNaXhlciJ9LAorCXsiSW5wdXQgTWl4ZXIiLCAiTWljIENhcHR1cmUgU3dpdGNoIiwgIk1pYyJ9LAorCXsiSW5wdXQgTWl4ZXIiLCAiQXV4IENhcHR1cmUgU3dpdGNoIiwgIkFVWCBJbiJ9LAorfTsKKworc3RhdGljIGludCBhazQ2NDFfc2V0X2RhaV9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCisJaW50IGNsa19pZCwgdW5zaWduZWQgaW50IGZyZXEsIGludCBkaXIpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwlzdHJ1Y3QgYWs0NjQxX3ByaXYgKmFrNDY0MSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJYWs0NjQxLT5zeXNjbGsgPSBmcmVxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFrNDY0MV9pMnNfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCQkgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+Y29kZWM7CisJc3RydWN0IGFrNDY0MV9wcml2ICphazQ2NDEgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlpbnQgcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyksIGZzID0gMjU2OworCXU4IG1vZGUyOworCisJaWYgKHJhdGUpCisJCWZzID0gYWs0NjQxLT5zeXNjbGsgLyByYXRlOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBzZXQgZnMgKi8KKwlzd2l0Y2ggKGZzKSB7CisJY2FzZSAxMDI0OgorCQltb2RlMiA9ICgweDIgPDwgNSk7CisJCWJyZWFrOworCWNhc2UgNTEyOgorCQltb2RlMiA9ICgweDEgPDwgNSk7CisJCWJyZWFrOworCWNhc2UgMjU2OgorCQltb2RlMiA9ICgweDAgPDwgNSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkVycm9yOiB1bnN1cHBvcnRlZCBmcz0lZFxuIiwgZnMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBBSzQ2NDFfTU9ERTIsICgweDMgPDwgNSksIG1vZGUyKTsKKworCS8qIFVwZGF0ZSBkZS1lbXBoYXNpcyBmaWx0ZXIgZm9yIHRoZSBuZXcgcmF0ZSAqLworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCWFrNDY0MS0+cGxheWJhY2tfZnMgPSByYXRlOworCQlhazQ2NDFfc2V0X2RlZW1waChjb2RlYyk7CisJfTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFrNDY0MV9wY21fc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCisJCQkJICB1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJdTggYnRpZjsKKworCS8qIGludGVyZmFjZSBmb3JtYXQgKi8KKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCWJ0aWYgPSAoMHgzIDw8IDUpOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJYnRpZiA9ICgweDIgPDwgNSk7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6CS8qIE1TQiBhZnRlciBGUk0gKi8KKwkJYnRpZiA9ICgweDAgPDwgNSk7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0I6CS8qIE1TQiBkdXJpbmcgRlJNICovCisJCWJ0aWYgPSAoMHgxIDw8IDUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgQUs0NjQxX0JUSUYsICgweDMgPDwgNSksIGJ0aWYpOworfQorCitzdGF0aWMgaW50IGFrNDY0MV9pMnNfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCisJCXVuc2lnbmVkIGludCBmbXQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwl1OCBtb2RlMSA9IDA7CisKKwkvKiBpbnRlcmZhY2UgZm9ybWF0ICovCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQltb2RlMSA9IDB4MDI7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQltb2RlMSA9IDB4MDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBzbmRfc29jX3dyaXRlKGNvZGVjLCBBSzQ2NDFfTU9ERTEsIG1vZGUxKTsKK30KKworc3RhdGljIGludCBhazQ2NDFfbXV0ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgaW50IG11dGUpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKworCXJldHVybiBzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBBSzQ2NDFfREFDLCAweDIwLCBtdXRlID8gMHgyMCA6IDApOworfQorCitzdGF0aWMgaW50IGFrNDY0MV9zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCit7CisJc3RydWN0IGFrNDY0MV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGNvZGVjLT5kZXYtPnBsYXRmb3JtX2RhdGE7CisJaW50IHJldDsKKworCXN3aXRjaCAobGV2ZWwpIHsKKwljYXNlIFNORF9TT0NfQklBU19PTjoKKwkJLyogdW5tdXRlICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIEFLNDY0MV9EQUMsIDB4MjAsIDApOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgorCQkvKiBtdXRlICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIEFLNDY0MV9EQUMsIDB4MjAsIDB4MjApOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgorCQlpZiAoY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CisJCQlpZiAocGRhdGEgJiYgZ3Bpb19pc192YWxpZChwZGF0YS0+Z3Bpb19wb3dlcikpCisJCQkJZ3Bpb19zZXRfdmFsdWUocGRhdGEtPmdwaW9fcG93ZXIsIDEpOworCQkJbWRlbGF5KDEpOworCQkJaWYgKHBkYXRhICYmIGdwaW9faXNfdmFsaWQocGRhdGEtPmdwaW9fbnBkbikpCisJCQkJZ3Bpb19zZXRfdmFsdWUocGRhdGEtPmdwaW9fbnBkbiwgMSk7CisJCQltZGVsYXkoMSk7CisKKwkJCXJldCA9IHNuZF9zb2NfY2FjaGVfc3luYyhjb2RlYyk7CisJCQlpZiAocmV0KSB7CisJCQkJZGV2X2Vycihjb2RlYy0+ZGV2LAorCQkJCQkiRmFpbGVkIHRvIHN5bmMgY2FjaGU6ICVkXG4iLCByZXQpOworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCX0KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgQUs0NjQxX1BNMSwgMHg4MCwgMHg4MCk7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIEFLNDY0MV9QTTIsIDB4ODAsIDApOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfQklBU19PRkY6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIEFLNDY0MV9QTTEsIDB4ODAsIDApOworCQlpZiAocGRhdGEgJiYgZ3Bpb19pc192YWxpZChwZGF0YS0+Z3Bpb19ucGRuKSkKKwkJCWdwaW9fc2V0X3ZhbHVlKHBkYXRhLT5ncGlvX25wZG4sIDApOworCQlpZiAocGRhdGEgJiYgZ3Bpb19pc192YWxpZChwZGF0YS0+Z3Bpb19wb3dlcikpCisJCQlncGlvX3NldF92YWx1ZShwZGF0YS0+Z3Bpb19wb3dlciwgMCk7CisJCWNvZGVjLT5jYWNoZV9zeW5jID0gMTsKKwkJYnJlYWs7CisJfQorCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBsZXZlbDsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBBSzQ2NDFfUkFURVMJKFNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDApCisjZGVmaW5lIEFLNDY0MV9SQVRFU19CVCAoU05EUlZfUENNX1JBVEVfODAwMCB8IFNORFJWX1BDTV9SQVRFXzExMDI1IHxcCisJCQkgU05EUlZfUENNX1JBVEVfMTYwMDApCisjZGVmaW5lIEFLNDY0MV9GT1JNQVRTCShTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSkKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgYWs0NjQxX2kyc19kYWlfb3BzID0geworCS5od19wYXJhbXMgICAgPSBhazQ2NDFfaTJzX2h3X3BhcmFtcywKKwkuc2V0X2ZtdCAgICAgID0gYWs0NjQxX2kyc19zZXRfZGFpX2ZtdCwKKwkuZGlnaXRhbF9tdXRlID0gYWs0NjQxX211dGUsCisJLnNldF9zeXNjbGsgICA9IGFrNDY0MV9zZXRfZGFpX3N5c2NsaywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGFrNDY0MV9wY21fZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zICAgID0gTlVMTCwgLyogcmF0ZXMgYXJlIGNvbnRyb2xsZWQgYnkgQlQgY2hpcCAqLworCS5zZXRfZm10ICAgICAgPSBhazQ2NDFfcGNtX3NldF9kYWlfZm10LAorCS5kaWdpdGFsX211dGUgPSBhazQ2NDFfbXV0ZSwKKwkuc2V0X3N5c2NsayAgID0gYWs0NjQxX3NldF9kYWlfc3lzY2xrLAorfTsKKworc3RydWN0IHNuZF9zb2NfZGFpX2RyaXZlciBhazQ2NDFfZGFpW10gPSB7Cit7CisJLm5hbWUgPSAiYWs0NjQxLWhpZmkiLAorCS5pZCA9IDEsCisJLnBsYXliYWNrID0geworCQkuc3RyZWFtX25hbWUgPSAiSGlGaSBQbGF5YmFjayIsCisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gQUs0NjQxX1JBVEVTLAorCQkuZm9ybWF0cyA9IEFLNDY0MV9GT1JNQVRTLAorCX0sCisJLmNhcHR1cmUgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJIaUZpIENhcHR1cmUiLAorCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IEFLNDY0MV9SQVRFUywKKwkJLmZvcm1hdHMgPSBBSzQ2NDFfRk9STUFUUywKKwl9LAorCS5vcHMgPSAmYWs0NjQxX2kyc19kYWlfb3BzLAorCS5zeW1tZXRyaWNfcmF0ZXMgPSAxLAorfSwKK3sKKwkubmFtZSA9ICJhazQ2NDEtdm9pY2UiLAorCS5pZCA9IDEsCisJLnBsYXliYWNrID0geworCQkuc3RyZWFtX25hbWUgPSAiVm9pY2UgUGxheWJhY2siLAorCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJLmNoYW5uZWxzX21heCA9IDEsCisJCS5yYXRlcyA9IEFLNDY0MV9SQVRFU19CVCwKKwkJLmZvcm1hdHMgPSBBSzQ2NDFfRk9STUFUUywKKwl9LAorCS5jYXB0dXJlID0geworCQkuc3RyZWFtX25hbWUgPSAiVm9pY2UgQ2FwdHVyZSIsCisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gMSwKKwkJLnJhdGVzID0gQUs0NjQxX1JBVEVTX0JULAorCQkuZm9ybWF0cyA9IEFLNDY0MV9GT1JNQVRTLAorCX0sCisJLm9wcyA9ICZhazQ2NDFfcGNtX2RhaV9vcHMsCisJLnN5bW1ldHJpY19yYXRlcyA9IDEsCit9LAorfTsKKworc3RhdGljIGludCBhazQ2NDFfc3VzcGVuZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlhazQ2NDFfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFrNDY0MV9yZXN1bWUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCWFrNDY0MV9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFrNDY0MV9wcm9iZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGFrNDY0MV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGNvZGVjLT5kZXYtPnBsYXRmb3JtX2RhdGE7CisJaW50IHJldDsKKworCisJaWYgKHBkYXRhKSB7CisJCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT5ncGlvX3Bvd2VyKSkgeworCQkJcmV0ID0gZ3Bpb19yZXF1ZXN0X29uZShwZGF0YS0+Z3Bpb19wb3dlciwKKwkJCQkJR1BJT0ZfT1VUX0lOSVRfTE9XLCAiYWs0NjQxIHBvd2VyIik7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXJyX291dDsKKwkJfQorCQlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+Z3Bpb19ucGRuKSkgeworCQkJcmV0ID0gZ3Bpb19yZXF1ZXN0X29uZShwZGF0YS0+Z3Bpb19ucGRuLAorCQkJCQlHUElPRl9PVVRfSU5JVF9MT1csICJhazQ2NDEgbnBkbiIpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGVycl9ncGlvOworCisJCQl1ZGVsYXkoMSk7IC8qID4gMTUwIG5zICovCisJCQlncGlvX3NldF92YWx1ZShwZGF0YS0+Z3Bpb19ucGRuLCAxKTsKKwkJfQorCX0KKworCXJldCA9IHNuZF9zb2NfY29kZWNfc2V0X2NhY2hlX2lvKGNvZGVjLCA4LCA4LCBTTkRfU09DX0kyQyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBzZXQgY2FjaGUgSS9POiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfcmVnaXN0ZXI7CisJfQorCisJLyogcG93ZXIgb24gZGV2aWNlICovCisJYWs0NjQxX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisKKwlyZXR1cm4gMDsKKworZXJyX3JlZ2lzdGVyOgorCWlmIChwZGF0YSkgeworCQlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+Z3Bpb19wb3dlcikpCisJCQlncGlvX3NldF92YWx1ZShwZGF0YS0+Z3Bpb19wb3dlciwgMCk7CisJCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT5ncGlvX25wZG4pKQorCQkJZ3Bpb19mcmVlKHBkYXRhLT5ncGlvX25wZG4pOworCX0KK2Vycl9ncGlvOgorCWlmIChwZGF0YSAmJiBncGlvX2lzX3ZhbGlkKHBkYXRhLT5ncGlvX3Bvd2VyKSkKKwkJZ3Bpb19mcmVlKHBkYXRhLT5ncGlvX3Bvd2VyKTsKK2Vycl9vdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhazQ2NDFfcmVtb3ZlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgYWs0NjQxX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gY29kZWMtPmRldi0+cGxhdGZvcm1fZGF0YTsKKworCWFrNDY0MV9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisKKwlpZiAocGRhdGEpIHsKKwkJaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPmdwaW9fcG93ZXIpKSB7CisJCQlncGlvX3NldF92YWx1ZShwZGF0YS0+Z3Bpb19wb3dlciwgMCk7CisJCQlncGlvX2ZyZWUocGRhdGEtPmdwaW9fcG93ZXIpOworCQl9CisJCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT5ncGlvX25wZG4pKQorCQkJZ3Bpb19mcmVlKHBkYXRhLT5ncGlvX25wZG4pOworCX0KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWNfZHJpdmVyIHNvY19jb2RlY19kZXZfYWs0NjQxID0geworCS5wcm9iZQkJCT0gYWs0NjQxX3Byb2JlLAorCS5yZW1vdmUJCQk9IGFrNDY0MV9yZW1vdmUsCisJLnN1c3BlbmQJCT0gYWs0NjQxX3N1c3BlbmQsCisJLnJlc3VtZQkJCT0gYWs0NjQxX3Jlc3VtZSwKKwkuY29udHJvbHMJCT0gYWs0NjQxX3NuZF9jb250cm9scywKKwkubnVtX2NvbnRyb2xzCQk9IEFSUkFZX1NJWkUoYWs0NjQxX3NuZF9jb250cm9scyksCisJLmRhcG1fd2lkZ2V0cwkJPSBhazQ2NDFfZGFwbV93aWRnZXRzLAorCS5udW1fZGFwbV93aWRnZXRzCT0gQVJSQVlfU0laRShhazQ2NDFfZGFwbV93aWRnZXRzKSwKKwkuZGFwbV9yb3V0ZXMJCT0gYWs0NjQxX2F1ZGlvX21hcCwKKwkubnVtX2RhcG1fcm91dGVzCT0gQVJSQVlfU0laRShhazQ2NDFfYXVkaW9fbWFwKSwKKwkuc2V0X2JpYXNfbGV2ZWwJCT0gYWs0NjQxX3NldF9iaWFzX2xldmVsLAorCS5yZWdfY2FjaGVfc2l6ZQkJPSBBUlJBWV9TSVpFKGFrNDY0MV9yZWcpLAorCS5yZWdfd29yZF9zaXplCQk9IHNpemVvZih1OCksCisJLnJlZ19jYWNoZV9kZWZhdWx0CT0gYWs0NjQxX3JlZywKKwkucmVnX2NhY2hlX3N0ZXAJCT0gMSwKK307CisKKworc3RhdGljIGludCBfX2RldmluaXQgYWs0NjQxX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgYWs0NjQxX3ByaXYgKmFrNDY0MTsKKwlpbnQgcmV0OworCisJYWs0NjQxID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFrNDY0MV9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhazQ2NDEpCisJCXJldHVybiAtRU5PTUVNOworCisJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgYWs0NjQxKTsKKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoJmkyYy0+ZGV2LCAmc29jX2NvZGVjX2Rldl9hazQ2NDEsCisJCQkJYWs0NjQxX2RhaSwgQVJSQVlfU0laRShhazQ2NDFfZGFpKSk7CisJaWYgKHJldCA8IDApCisJCWtmcmVlKGFrNDY0MSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBhazQ2NDFfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjKQoreworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmaTJjLT5kZXYpOworCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShpMmMpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGFrNDY0MV9pMmNfaWRbXSA9IHsKKwl7ICJhazQ2NDEiLCAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGFrNDY0MV9pMmNfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWs0NjQxX2kyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiYWs0NjQxIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSAgICBhazQ2NDFfaTJjX3Byb2JlLAorCS5yZW1vdmUgPSAgIF9fZGV2ZXhpdF9wKGFrNDY0MV9pMmNfcmVtb3ZlKSwKKwkuaWRfdGFibGUgPSBhazQ2NDFfaTJjX2lkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYWs0NjQxX21vZGluaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaTJjX2FkZF9kcml2ZXIoJmFrNDY0MV9pMmNfZHJpdmVyKTsKKwlpZiAocmV0ICE9IDApCisJCXByX2VycigiRmFpbGVkIHRvIHJlZ2lzdGVyIEFLNDY0MSBJMkMgZHJpdmVyOiAlZFxuIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9Cittb2R1bGVfaW5pdChhazQ2NDFfbW9kaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhazQ2NDFfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZhazQ2NDFfaTJjX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChhazQ2NDFfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiU29DIEFLNDY0MSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBnbnVmaWlzaC5vcmc+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FrNDY0MS5oIGIvc291bmQvc29jL2NvZGVjcy9hazQ2NDEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTI2MzI0Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy9hazQ2NDEuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogYWs0NjQxLmggIC0tICBBSzQ2NDEgU29DIEF1ZGlvIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDA4IEhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBnbnVmaWlzaC5vcmc+CisgKgorICogQmFzZWQgb24gYWs0NTM1LmgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX0FLNDY0MV9ICisjZGVmaW5lIF9BSzQ2NDFfSAorCisvKiBBSzQ2NDEgcmVnaXN0ZXIgc3BhY2UgKi8KKworI2RlZmluZSBBSzQ2NDFfUE0xCQkweDAwCisjZGVmaW5lIEFLNDY0MV9QTTIJCTB4MDEKKyNkZWZpbmUgQUs0NjQxX1NJRzEJCTB4MDIKKyNkZWZpbmUgQUs0NjQxX1NJRzIJCTB4MDMKKyNkZWZpbmUgQUs0NjQxX01PREUxCQkweDA0CisjZGVmaW5lIEFLNDY0MV9NT0RFMgkJMHgwNQorI2RlZmluZSBBSzQ2NDFfREFDCQkweDA2CisjZGVmaW5lIEFLNDY0MV9NSUMJCTB4MDcKKyNkZWZpbmUgQUs0NjQxX1RJTUVSCQkweDA4CisjZGVmaW5lIEFLNDY0MV9BTEMxCQkweDA5CisjZGVmaW5lIEFLNDY0MV9BTEMyCQkweDBhCisjZGVmaW5lIEFLNDY0MV9QR0EJCTB4MGIKKyNkZWZpbmUgQUs0NjQxX0xBVFQJCTB4MGMKKyNkZWZpbmUgQUs0NjQxX1JBVFQJCTB4MGQKKyNkZWZpbmUgQUs0NjQxX1ZPTAkJMHgwZQorI2RlZmluZSBBSzQ2NDFfU1RBVFVTCQkweDBmCisjZGVmaW5lIEFLNDY0MV9FUUxPCQkweDEwCisjZGVmaW5lIEFLNDY0MV9FUU1JRAkJMHgxMQorI2RlZmluZSBBSzQ2NDFfRVFISQkJMHgxMgorI2RlZmluZSBBSzQ2NDFfQlRJRgkJMHgxMworCisjZGVmaW5lIEFLNDY0MV9DQUNIRVJFR05VTQkweDE0CisKKworCisjZGVmaW5lIEFLNDY0MV9EQUlfSElGSQkJMAorI2RlZmluZSBBSzQ2NDFfREFJX1ZPSUNFCTEKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWs0NjcxLmMgYi9zb3VuZC9zb2MvY29kZWNzL2FrNDY3MS5jCmluZGV4IDJlYzc1YWIuLjg4YjI5ZjggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWs0NjcxLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9hazQ2NzEuYwpAQCAtMzUyLDcgKzM1Miw3IEBACiAJU05EX1NPQ19EQVBNX1NVUFBMWSgiUE1QTEwiLCBBSzQ2NzFfUExMX01PREVfU0VMRUNUMSwgMCwgMCwgTlVMTCwgMCksCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBpbnRlcmNvbltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYWs0NjcxX2ludGVyY29uW10gPSB7CiAJeyJEQUMgTGVmdCIsICJOVUxMIiwgIlBNUExMIn0sCiAJeyJEQUMgUmlnaHQiLCAiTlVMTCIsICJQTVBMTCJ9LAogCXsiQURDIExlZnQiLCAiTlVMTCIsICJQTVBMTCJ9LApAQCAtNDMzLDE3ICs0MzMsNiBAQAogCXsiUk9VVDMgTWl4ZXIiLCAiUklOUzQiLCAiUklONCBNaXhpbmcgQ2lyY3VpdCJ9LAogfTsKIAotc3RhdGljIGludCBhazQ2NzFfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKLQotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgYWs0NjcxX2RhcG1fd2lkZ2V0cywKLQkJCQkgIEFSUkFZX1NJWkUoYWs0NjcxX2RhcG1fd2lkZ2V0cykpOwotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGludGVyY29uLCBBUlJBWV9TSVpFKGludGVyY29uKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBhazQ2NzFfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKIAkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCkBAIC02NTAsNyArNjM5LDYgQEAKIAogCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBhazQ2NzFfc25kX2NvbnRyb2xzLAogCQkJICAgICBBUlJBWV9TSVpFKGFrNDY3MV9zbmRfY29udHJvbHMpKTsKLQlhazQ2NzFfYWRkX3dpZGdldHMoY29kZWMpOwogCiAJYWs0NjcxX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CiAKQEAgLTY3MCw2ICs2NTgsMTAgQEAKIAkucmVnX2NhY2hlX3NpemUgPSBBSzQ2NzFfQ0FDSEVSRUdOVU0sCiAJLnJlZ193b3JkX3NpemUgPSBzaXplb2YodTgpLAogCS5yZWdfY2FjaGVfZGVmYXVsdCA9IGFrNDY3MV9yZWcsCisJLmRhcG1fd2lkZ2V0cyA9IGFrNDY3MV9kYXBtX3dpZGdldHMsCisJLm51bV9kYXBtX3dpZGdldHMgPSBBUlJBWV9TSVpFKGFrNDY3MV9kYXBtX3dpZGdldHMpLAorCS5kYXBtX3JvdXRlcyA9IGFrNDY3MV9pbnRlcmNvbiwKKwkubnVtX2RhcG1fcm91dGVzID0gQVJSQVlfU0laRShhazQ2NzFfaW50ZXJjb24pLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgYWs0NjcxX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9jeDIwNDQyLmMgYi9zb3VuZC9zb2MvY29kZWNzL2N4MjA0NDIuYwppbmRleCAwYmI0MjRhLi5mOGM2NjNkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2N4MjA0NDIuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2N4MjA0NDIuYwpAQCAtODYsMTggKzg2LDYgQEAKIAl7IkFEQyIsIE5VTEwsICJJbnB1dCBNaXhlciJ9LAogfTsKIAotc3RhdGljIGludCBjeDIwNDQyX2FkZF93aWRnZXRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07Ci0KLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIGN4MjA0NDJfZGFwbV93aWRnZXRzLAotCQkJCSAgQVJSQVlfU0laRShjeDIwNDQyX2RhcG1fd2lkZ2V0cykpOwotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGN4MjA0NDJfYXVkaW9fbWFwLAotCQkJCUFSUkFZX1NJWkUoY3gyMDQ0Ml9hdWRpb19tYXApKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdW5zaWduZWQgaW50IGN4MjA0NDJfcmVhZF9yZWdfY2FjaGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCQkJCQkJCXVuc2lnbmVkIGludCByZWcpCiB7CkBAIC0yNzQsMTQgKzI2MiwxNCBAQAogfQogCiAvKiBMaW5lIGRpc2NpcGxpbmUgLnJlY2VpdmVfYnVmKCkgKi8KLXN0YXRpYyB2b2lkIHYyNTNfcmVjZWl2ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwLCBjaGFyICpmcCwgaW50IGNvdW50KQorc3RhdGljIHVuc2lnbmVkIGludCB2MjUzX3JlY2VpdmUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqY3AsIGNoYXIgKmZwLCBpbnQgY291bnQpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdHR5LT5kaXNjX2RhdGE7CiAJc3RydWN0IGN4MjA0NDJfcHJpdiAqY3gyMDQ0MjsKIAogCWlmICghY29kZWMpCi0JCXJldHVybjsKKwkJcmV0dXJuIGNvdW50OwogCiAJY3gyMDQ0MiA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCkBAIC0yOTMsNiArMjgxLDggQEAKIAkJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3QpdHR5LT5vcHMtPndyaXRlOwogCQljb2RlYy0+Y2FyZC0+cG9wX3RpbWUgPSAxOwogCX0KKworCXJldHVybiBjb3VudDsKIH0KIAogLyogTGluZSBkaXNjaXBsaW5lIC53cml0ZV93YWtldXAoKSAqLwpAQCAtMzQ0LDggKzMzNCw2IEBACiAJCXJldHVybiAtRU5PTUVNOwogCXNuZF9zb2NfY29kZWNfc2V0X2RydmRhdGEoY29kZWMsIGN4MjA0NDIpOwogCi0JY3gyMDQ0Ml9hZGRfd2lkZ2V0cyhjb2RlYyk7Ci0KIAljeDIwNDQyLT5jb250cm9sX2RhdGEgPSBOVUxMOwogCWNvZGVjLT5od193cml0ZSA9IE5VTEw7CiAJY29kZWMtPmNhcmQtPnBvcF90aW1lID0gMDsKQEAgLTM3Nyw2ICszNjUsMTAgQEAKIAkucmVnX3dvcmRfc2l6ZSA9IHNpemVvZih1OCksCiAJLnJlYWQgPSBjeDIwNDQyX3JlYWRfcmVnX2NhY2hlLAogCS53cml0ZSA9IGN4MjA0NDJfd3JpdGUsCisJLmRhcG1fd2lkZ2V0cyA9IGN4MjA0NDJfZGFwbV93aWRnZXRzLAorCS5udW1fZGFwbV93aWRnZXRzID0gQVJSQVlfU0laRShjeDIwNDQyX2RhcG1fd2lkZ2V0cyksCisJLmRhcG1fcm91dGVzID0gY3gyMDQ0Ml9hdWRpb19tYXAsCisJLm51bV9kYXBtX3JvdXRlcyA9IEFSUkFZX1NJWkUoY3gyMDQ0Ml9hdWRpb19tYXApLAogfTsKIAogc3RhdGljIGludCBjeDIwNDQyX3BsYXRmb3JtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2RtaWMuYyBiL3NvdW5kL3NvYy9jb2RlY3MvZG1pYy5jCmluZGV4IDU3ZTlkYWMuLmY5YTg3NzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvZG1pYy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvZG1pYy5jCkBAIC0zOSw3ICszOSwzMSBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWNfZHJpdmVyIHNvY19kbWljID0ge307CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgZG1pY19kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fQUlGX09VVCgiRE1JQyBBSUYiLCAiQ2FwdHVyZSIsIDAsCisJCQkgICAgIFNORF9TT0NfTk9QTSwgMCwgMCksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJETWljIiksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBpbnRlcmNvbltdID0geworCXsiRE1JQyBBSUYiLCBOVUxMLCAiRE1pYyJ9LAorfTsKKworc3RhdGljIGludCBkbWljX3Byb2JlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CisKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIGRtaWNfZGFwbV93aWRnZXRzLAorCQkJCSAgQVJSQVlfU0laRShkbWljX2RhcG1fd2lkZ2V0cykpOworICAgICAgICBzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBpbnRlcmNvbiwgQVJSQVlfU0laRShpbnRlcmNvbikpOworCXNuZF9zb2NfZGFwbV9uZXdfd2lkZ2V0cyhkYXBtKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWNfZHJpdmVyIHNvY19kbWljID0geworCS5wcm9iZQk9IGRtaWNfcHJvYmUsCit9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBkbWljX2Rldl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9qejQ3NDAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvano0NzQwLmMKaW5kZXggZjVjY2RiZi4uZTM3M2Y4ZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9qejQ3NDAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2p6NDc0MC5jCkBAIC0yOTQsMjAgKzI5NCw5IEBACiAKIHN0YXRpYyBpbnQgano0NzQwX2NvZGVjX2Rldl9wcm9iZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOwotCiAJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgSlo0NzQwX1JFR19DT0RFQ18xLAogCQkJSlo0NzQwX0NPREVDXzFfU1cyX0VOQUJMRSwgSlo0NzQwX0NPREVDXzFfU1cyX0VOQUJMRSk7CiAKLQlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgano0NzQwX2NvZGVjX2NvbnRyb2xzLAotCQlBUlJBWV9TSVpFKGp6NDc0MF9jb2RlY19jb250cm9scykpOwotCi0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCBqejQ3NDBfY29kZWNfZGFwbV93aWRnZXRzLAotCQlBUlJBWV9TSVpFKGp6NDc0MF9jb2RlY19kYXBtX3dpZGdldHMpKTsKLQotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGp6NDc0MF9jb2RlY19kYXBtX3JvdXRlcywKLQkJQVJSQVlfU0laRShqejQ3NDBfY29kZWNfZGFwbV9yb3V0ZXMpKTsKLQogCWp6NDc0MF9jb2RlY19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwogCiAJcmV0dXJuIDA7CkBAIC0zNDgsNiArMzM3LDEzIEBACiAJLnJlZ19jYWNoZV9kZWZhdWx0CT0gano0NzQwX2NvZGVjX3JlZ3MsCiAJLnJlZ193b3JkX3NpemUgPSBzaXplb2YodTMyKSwKIAkucmVnX2NhY2hlX3NpemUJPSAyLAorCisJLmNvbnRyb2xzID0gano0NzQwX2NvZGVjX2NvbnRyb2xzLAorCS5udW1fY29udHJvbHMgPSBBUlJBWV9TSVpFKGp6NDc0MF9jb2RlY19jb250cm9scyksCisJLmRhcG1fd2lkZ2V0cyA9IGp6NDc0MF9jb2RlY19kYXBtX3dpZGdldHMsCisJLm51bV9kYXBtX3dpZGdldHMgPSBBUlJBWV9TSVpFKGp6NDc0MF9jb2RlY19kYXBtX3dpZGdldHMpLAorCS5kYXBtX3JvdXRlcyA9IGp6NDc0MF9jb2RlY19kYXBtX3JvdXRlcywKKwkubnVtX2RhcG1fcm91dGVzID0gQVJSQVlfU0laRShqejQ3NDBfY29kZWNfZGFwbV9yb3V0ZXMpLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgano0NzQwX2NvZGVjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL21heDk4MDg4LmMgYi9zb3VuZC9zb2MvY29kZWNzL21heDk4MDg4LmMKaW5kZXggYmQwNTE3Yy4uNDE3M2I2NyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9tYXg5ODA4OC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvbWF4OTgwODguYwpAQCAtNjU2LDggKzY1Niw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSUkFZX1NJWkUobWF4OTgwODhfZXhtb2RlX3RleHRzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4OTgwODhfZXhtb2RlX3RleHRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg5ODA4OF9leG1vZGVfdmFsdWVzKTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBtYXg5ODA4OF9leG1vZGVfY29udHJvbHMgPQotICAgICAgIFNPQ19EQVBNX1ZBTFVFX0VOVU0oIlJvdXRlIiwgbWF4OTgwODhfZXhtb2RlX2VudW0pOwogCiBzdGF0aWMgY29uc3QgY2hhciAqbWF4OTgwODhfZXhfdGhyZXNoW10gPSB7IC8qIHZvbHRzIFBQICovCiAgICAgICAgIjAuNiIsICIxLjIiLCAiMS44IiwgIjIuNCIsICIzLjAiLCAiMy42IiwgIjQuMiIsICI0LjgifTsKQEAgLTc4Myw2ICs3ODEsNyBAQAogICAgICAgIFNPQ19TSU5HTEUoIkVRMSBTd2l0Y2giLCBNOTgwODhfUkVHXzQ5X0NGR19MRVZFTCwgMCwgMSwgMCksCiAgICAgICAgU09DX1NJTkdMRSgiRVEyIFN3aXRjaCIsIE05ODA4OF9SRUdfNDlfQ0ZHX0xFVkVMLCAxLCAxLCAwKSwKIAorICAgICAgIFNPQ19FTlVNKCJFWCBMaW1pdGVyIE1vZGUiLCBtYXg5ODA4OF9leG1vZGVfZW51bSksCiAgICAgICAgU09DX0VOVU0oIkVYIExpbWl0ZXIgVGhyZXNob2xkIiwgbWF4OTgwODhfZXhfdGhyZXNoX2VudW0pLAogCiAgICAgICAgU09DX0VOVU0oIkRBSTEgRmlsdGVyIE1vZGUiLCBtYXg5ODA4OF9maWx0ZXJfbW9kZV9lbnVtKSwKQEAgLTgwOCwxMCArODA3LDEwIEBACiAKIC8qIExlZnQgc3BlYWtlciBtaXhlciBzd2l0Y2ggKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBtYXg5ODA4OF9sZWZ0X3NwZWFrZXJfbWl4ZXJfY29udHJvbHNbXSA9IHsKLSAgICAgICBTT0NfREFQTV9TSU5HTEUoIkxlZnQgREFDMSBTd2l0Y2giLCBNOTgwODhfUkVHXzJCX01JWF9TUEtfTEVGVCwgNywgMSwgMCksCi0gICAgICAgU09DX0RBUE1fU0lOR0xFKCJSaWdodCBEQUMxIFN3aXRjaCIsIE05ODA4OF9SRUdfMkJfTUlYX1NQS19MRUZULCAwLCAxLCAwKSwKLSAgICAgICBTT0NfREFQTV9TSU5HTEUoIkxlZnQgREFDMiBTd2l0Y2giLCBNOTgwODhfUkVHXzJCX01JWF9TUEtfTEVGVCwgNywgMSwgMCksCi0gICAgICAgU09DX0RBUE1fU0lOR0xFKCJSaWdodCBEQUMyIFN3aXRjaCIsIE05ODA4OF9SRUdfMkJfTUlYX1NQS19MRUZULCAwLCAxLCAwKSwKKyAgICAgICBTT0NfREFQTV9TSU5HTEUoIkxlZnQgREFDMSBTd2l0Y2giLCBNOTgwODhfUkVHXzJCX01JWF9TUEtfTEVGVCwgMCwgMSwgMCksCisgICAgICAgU09DX0RBUE1fU0lOR0xFKCJSaWdodCBEQUMxIFN3aXRjaCIsIE05ODA4OF9SRUdfMkJfTUlYX1NQS19MRUZULCA3LCAxLCAwKSwKKyAgICAgICBTT0NfREFQTV9TSU5HTEUoIkxlZnQgREFDMiBTd2l0Y2giLCBNOTgwODhfUkVHXzJCX01JWF9TUEtfTEVGVCwgMCwgMSwgMCksCisgICAgICAgU09DX0RBUE1fU0lOR0xFKCJSaWdodCBEQUMyIFN3aXRjaCIsIE05ODA4OF9SRUdfMkJfTUlYX1NQS19MRUZULCA3LCAxLCAwKSwKICAgICAgICBTT0NfREFQTV9TSU5HTEUoIk1JQzEgU3dpdGNoIiwgTTk4MDg4X1JFR18yQl9NSVhfU1BLX0xFRlQsIDUsIDEsIDApLAogICAgICAgIFNPQ19EQVBNX1NJTkdMRSgiTUlDMiBTd2l0Y2giLCBNOTgwODhfUkVHXzJCX01JWF9TUEtfTEVGVCwgNiwgMSwgMCksCiAgICAgICAgU09DX0RBUE1fU0lOR0xFKCJJTkExIFN3aXRjaCIsIE05ODA4OF9SRUdfMkJfTUlYX1NQS19MRUZULCAxLCAxLCAwKSwKQEAgLTgzNiwxMCArODM1LDEwIEBACiAKIC8qIExlZnQgaGVhZHBob25lIG1peGVyIHN3aXRjaCAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IG1heDk4MDg4X2xlZnRfaHBfbWl4ZXJfY29udHJvbHNbXSA9IHsKLSAgICAgICBTT0NfREFQTV9TSU5HTEUoIkxlZnQgREFDMSBTd2l0Y2giLCBNOTgwODhfUkVHXzI1X01JWF9IUF9MRUZULCA3LCAxLCAwKSwKLSAgICAgICBTT0NfREFQTV9TSU5HTEUoIlJpZ2h0IERBQzEgU3dpdGNoIiwgTTk4MDg4X1JFR18yNV9NSVhfSFBfTEVGVCwgMCwgMSwgMCksCi0gICAgICAgU09DX0RBUE1fU0lOR0xFKCJMZWZ0IERBQzIgU3dpdGNoIiwgTTk4MDg4X1JFR18yNV9NSVhfSFBfTEVGVCwgNywgMSwgMCksCi0gICAgICAgU09DX0RBUE1fU0lOR0xFKCJSaWdodCBEQUMyIFN3aXRjaCIsIE05ODA4OF9SRUdfMjVfTUlYX0hQX0xFRlQsIDAsIDEsIDApLAorICAgICAgIFNPQ19EQVBNX1NJTkdMRSgiTGVmdCBEQUMxIFN3aXRjaCIsIE05ODA4OF9SRUdfMjVfTUlYX0hQX0xFRlQsIDAsIDEsIDApLAorICAgICAgIFNPQ19EQVBNX1NJTkdMRSgiUmlnaHQgREFDMSBTd2l0Y2giLCBNOTgwODhfUkVHXzI1X01JWF9IUF9MRUZULCA3LCAxLCAwKSwKKyAgICAgICBTT0NfREFQTV9TSU5HTEUoIkxlZnQgREFDMiBTd2l0Y2giLCBNOTgwODhfUkVHXzI1X01JWF9IUF9MRUZULCAwLCAxLCAwKSwKKyAgICAgICBTT0NfREFQTV9TSU5HTEUoIlJpZ2h0IERBQzIgU3dpdGNoIiwgTTk4MDg4X1JFR18yNV9NSVhfSFBfTEVGVCwgNywgMSwgMCksCiAgICAgICAgU09DX0RBUE1fU0lOR0xFKCJNSUMxIFN3aXRjaCIsIE05ODA4OF9SRUdfMjVfTUlYX0hQX0xFRlQsIDUsIDEsIDApLAogICAgICAgIFNPQ19EQVBNX1NJTkdMRSgiTUlDMiBTd2l0Y2giLCBNOTgwODhfUkVHXzI1X01JWF9IUF9MRUZULCA2LCAxLCAwKSwKICAgICAgICBTT0NfREFQTV9TSU5HTEUoIklOQTEgU3dpdGNoIiwgTTk4MDg4X1JFR18yNV9NSVhfSFBfTEVGVCwgMSwgMSwgMCksCkBAIC04NjQsMTAgKzg2MywxMCBAQAogCiAvKiBMZWZ0IGVhcnBpZWNlL3JlY2VpdmVyIG1peGVyIHN3aXRjaCAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IG1heDk4MDg4X2xlZnRfcmVjX21peGVyX2NvbnRyb2xzW10gPSB7Ci0gICAgICAgU09DX0RBUE1fU0lOR0xFKCJMZWZ0IERBQzEgU3dpdGNoIiwgTTk4MDg4X1JFR18yOF9NSVhfUkVDX0xFRlQsIDcsIDEsIDApLAotICAgICAgIFNPQ19EQVBNX1NJTkdMRSgiUmlnaHQgREFDMSBTd2l0Y2giLCBNOTgwODhfUkVHXzI4X01JWF9SRUNfTEVGVCwgMCwgMSwgMCksCi0gICAgICAgU09DX0RBUE1fU0lOR0xFKCJMZWZ0IERBQzIgU3dpdGNoIiwgTTk4MDg4X1JFR18yOF9NSVhfUkVDX0xFRlQsIDcsIDEsIDApLAotICAgICAgIFNPQ19EQVBNX1NJTkdMRSgiUmlnaHQgREFDMiBTd2l0Y2giLCBNOTgwODhfUkVHXzI4X01JWF9SRUNfTEVGVCwgMCwgMSwgMCksCisgICAgICAgU09DX0RBUE1fU0lOR0xFKCJMZWZ0IERBQzEgU3dpdGNoIiwgTTk4MDg4X1JFR18yOF9NSVhfUkVDX0xFRlQsIDAsIDEsIDApLAorICAgICAgIFNPQ19EQVBNX1NJTkdMRSgiUmlnaHQgREFDMSBTd2l0Y2giLCBNOTgwODhfUkVHXzI4X01JWF9SRUNfTEVGVCwgNywgMSwgMCksCisgICAgICAgU09DX0RBUE1fU0lOR0xFKCJMZWZ0IERBQzIgU3dpdGNoIiwgTTk4MDg4X1JFR18yOF9NSVhfUkVDX0xFRlQsIDAsIDEsIDApLAorICAgICAgIFNPQ19EQVBNX1NJTkdMRSgiUmlnaHQgREFDMiBTd2l0Y2giLCBNOTgwODhfUkVHXzI4X01JWF9SRUNfTEVGVCwgNywgMSwgMCksCiAgICAgICAgU09DX0RBUE1fU0lOR0xFKCJNSUMxIFN3aXRjaCIsIE05ODA4OF9SRUdfMjhfTUlYX1JFQ19MRUZULCA1LCAxLCAwKSwKICAgICAgICBTT0NfREFQTV9TSU5HTEUoIk1JQzIgU3dpdGNoIiwgTTk4MDg4X1JFR18yOF9NSVhfUkVDX0xFRlQsIDYsIDEsIDApLAogICAgICAgIFNPQ19EQVBNX1NJTkdMRSgiSU5BMSBTd2l0Y2giLCBNOTgwODhfUkVHXzI4X01JWF9SRUNfTEVGVCwgMSwgMSwgMCksCkBAIC0xMDk0LDkgKzEwOTMsNiBAQAogCiAgICAgICAgU05EX1NPQ19EQVBNX01JQ0JJQVMoIk1JQ0JJQVMiLCBNOTgwODhfUkVHXzRDX1BXUl9FTl9JTiwgMywgMCksCiAKLSAgICAgICBTTkRfU09DX0RBUE1fTVVYKCJFWCBMaW1pdGVyIE1vZGUiLCBTTkRfU09DX05PUE0sIDAsIDAsCi0gICAgICAgICAgICAgICAmbWF4OTgwODhfZXhtb2RlX2NvbnRyb2xzKSwKLQogICAgICAgIFNORF9TT0NfREFQTV9PVVRQVVQoIkhQTCIpLAogICAgICAgIFNORF9TT0NfREFQTV9PVVRQVVQoIkhQUiIpLAogICAgICAgIFNORF9TT0NfREFQTV9PVVRQVVQoIlNQS0wiKSwKQEAgLTExMTIsNyArMTEwOCw3IEBACiAgICAgICAgU05EX1NPQ19EQVBNX0lOUFVUKCJJTkIyIiksCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhdWRpb19tYXBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIG1heDk4MDg4X2F1ZGlvX21hcFtdID0gewogICAgICAgIC8qIExlZnQgaGVhZHBob25lIG91dHB1dCBtaXhlciAqLwogICAgICAgIHsiTGVmdCBIUCBNaXhlciIsICJMZWZ0IERBQzEgU3dpdGNoIiwgIkRBQ0wxIn0sCiAgICAgICAgeyJMZWZ0IEhQIE1peGVyIiwgIkxlZnQgREFDMiBTd2l0Y2giLCAiREFDTDIifSwKQEAgLTEyMjYsMjIgKzEyMjIsNiBAQAogICAgICAgIHsiTUlDMiBJbnB1dCIsIE5VTEwsICJNSUMyIn0sCiB9OwogCi1zdGF0aWMgaW50IG1heDk4MDg4X2FkZF93aWRnZXRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLSAgICAgICBzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07Ci0KLSAgICAgICBzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIG1heDk4MDg4X2RhcG1fd2lkZ2V0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSUkFZX1NJWkUobWF4OTgwODhfZGFwbV93aWRnZXRzKSk7Ci0KLSAgICAgICBzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7Ci0KLSAgICAgICBzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgbWF4OTgwODhfc25kX2NvbnRyb2xzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSUkFZX1NJWkUobWF4OTgwODhfc25kX2NvbnRyb2xzKSk7Ci0KLSAgICAgICBzbmRfc29jX2RhcG1fbmV3X3dpZGdldHMoZGFwbSk7Ci0gICAgICAgcmV0dXJuIDA7Ci19Ci0KIC8qIGNvZGVjIG1jbGsgY2xvY2sgZGl2aWRlciBjb2VmZmljaWVudHMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewogICAgICAgIHUzMiByYXRlOwpAQCAtMTU4Niw2ICsxNTY2LDM2IEBACiAgICAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgbWF4OTgwODhfZGFpMV9kaWdpdGFsX211dGUoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksIGludCBtdXRlKQoreworICAgICAgIHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisgICAgICAgaW50IHJlZzsKKworICAgICAgIGlmIChtdXRlKQorICAgICAgICAgICAgICAgcmVnID0gTTk4MDg4X0RBSV9NVVRFOworICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIHJlZyA9IDA7CisKKyAgICAgICBzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBNOTgwODhfUkVHXzJGX0xWTF9EQUkxX1BMQVksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBNOTgwODhfREFJX01VVEVfTUFTSywgcmVnKTsKKyAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYXg5ODA4OF9kYWkyX2RpZ2l0YWxfbXV0ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwgaW50IG11dGUpCit7CisgICAgICAgc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKyAgICAgICBpbnQgcmVnOworCisgICAgICAgaWYgKG11dGUpCisgICAgICAgICAgICAgICByZWcgPSBNOTgwODhfREFJX01VVEU7CisgICAgICAgZWxzZQorICAgICAgICAgICAgICAgcmVnID0gMDsKKworICAgICAgIHNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIE05ODA4OF9SRUdfMzFfTFZMX0RBSTJfUExBWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE05ODA4OF9EQUlfTVVURV9NQVNLLCByZWcpOworICAgICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBtYXg5ODA4OF9zeW5jX2NhY2hlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKICAgICAgICB1MTYgKnJlZ19jYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CkBAIC0xNjQ3LDEyICsxNjU3LDE0IEBACiAgICAgICAgLnNldF9zeXNjbGsgPSBtYXg5ODA4OF9kYWlfc2V0X3N5c2NsaywKICAgICAgICAuc2V0X2ZtdCA9IG1heDk4MDg4X2RhaTFfc2V0X2ZtdCwKICAgICAgICAuaHdfcGFyYW1zID0gbWF4OTgwODhfZGFpMV9od19wYXJhbXMsCisgICAgICAgLmRpZ2l0YWxfbXV0ZSA9IG1heDk4MDg4X2RhaTFfZGlnaXRhbF9tdXRlLAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgbWF4OTgwODhfZGFpMl9vcHMgPSB7CiAgICAgICAgLnNldF9zeXNjbGsgPSBtYXg5ODA4OF9kYWlfc2V0X3N5c2NsaywKICAgICAgICAuc2V0X2ZtdCA9IG1heDk4MDg4X2RhaTJfc2V0X2ZtdCwKICAgICAgICAuaHdfcGFyYW1zID0gbWF4OTgwODhfZGFpMl9od19wYXJhbXMsCisgICAgICAgLmRpZ2l0YWxfbXV0ZSA9IG1heDk4MDg4X2RhaTJfZGlnaXRhbF9tdXRlLAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9kcml2ZXIgbWF4OTgwODhfZGFpW10gPSB7CkBAIC0yMDEwLDcgKzIwMjIsOCBAQAogCiAgICAgICAgbWF4OTgwODhfaGFuZGxlX3BkYXRhKGNvZGVjKTsKIAotICAgICAgIG1heDk4MDg4X2FkZF93aWRnZXRzKGNvZGVjKTsKKyAgICAgICBzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgbWF4OTgwODhfc25kX2NvbnRyb2xzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSUkFZX1NJWkUobWF4OTgwODhfc25kX2NvbnRyb2xzKSk7CiAKIGVycl9hY2Nlc3M6CiAgICAgICAgcmV0dXJuIHJldDsKQEAgLTIwMzYsNiArMjA0OSwxMCBAQAogICAgICAgIC5yZWdfd29yZF9zaXplID0gc2l6ZW9mKHU4KSwKICAgICAgICAucmVnX2NhY2hlX2RlZmF1bHQgPSBtYXg5ODA4OF9yZWcsCiAgICAgICAgLnZvbGF0aWxlX3JlZ2lzdGVyID0gbWF4OTgwODhfdm9sYXRpbGVfcmVnaXN0ZXIsCisJLmRhcG1fd2lkZ2V0cyA9IG1heDk4MDg4X2RhcG1fd2lkZ2V0cywKKwkubnVtX2RhcG1fd2lkZ2V0cyA9IEFSUkFZX1NJWkUobWF4OTgwODhfZGFwbV93aWRnZXRzKSwKKwkuZGFwbV9yb3V0ZXMgPSBtYXg5ODA4OF9hdWRpb19tYXAsCisJLm51bV9kYXBtX3JvdXRlcyA9IEFSUkFZX1NJWkUobWF4OTgwODhfYXVkaW9fbWFwKSwKIH07CiAKIHN0YXRpYyBpbnQgbWF4OTgwODhfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL21heDk4MDg4LmggYi9zb3VuZC9zb2MvY29kZWNzL21heDk4MDg4LmgKaW5kZXggNTY1NTRjNy4uYmU4OWE0ZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9tYXg5ODA4OC5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvbWF4OTgwODguaApAQCAtMTMzLDYgKzEzMywxOSBAQAogICAgICAgICNkZWZpbmUgTTk4MDg4X1JFQ19MSU5FTU9ERSAgICAgICAgICAgICAoMTw8NykKICAgICAgICAjZGVmaW5lIE05ODA4OF9SRUNfTElORU1PREVfTUFTSyAgICAgICAgKDE8PDcpCiAKKy8qIE05ODA4OF9SRUdfMkRfTUlYX1NQS19DTlRMICovCisgICAgICAgI2RlZmluZSBNOTgwODhfTUlYX1NQS1JfR0FJTl9NQVNLICAgICAgICgzPDwyKQorICAgICAgICNkZWZpbmUgTTk4MDg4X01JWF9TUEtSX0dBSU5fU0hJRlQgICAgICAyCisgICAgICAgI2RlZmluZSBNOTgwODhfTUlYX1NQS0xfR0FJTl9NQVNLICAgICAgICgzPDwwKQorICAgICAgICNkZWZpbmUgTTk4MDg4X01JWF9TUEtMX0dBSU5fU0hJRlQgICAgICAwCisKKy8qIE05ODA4OF9SRUdfMkZfTFZMX0RBSTFfUExBWSwgTTk4MDg4X1JFR18zMV9MVkxfREFJMl9QTEFZICovCisgICAgICAgI2RlZmluZSBNOTgwODhfREFJX01VVEUgICAgICAgICAgICAgICAgICgxPDw3KQorICAgICAgICNkZWZpbmUgTTk4MDg4X0RBSV9NVVRFX01BU0sgICAgICAgICAgICAoMTw8NykKKyAgICAgICAjZGVmaW5lIE05ODA4OF9EQUlfVk9JQ0VfR0FJTl9NQVNLICAgICAgKDM8PDQpCisgICAgICAgI2RlZmluZSBNOTgwODhfREFJX0FUVEVOVUFUSU9OX01BU0sgICAgICgweEY8PDApCisgICAgICAgI2RlZmluZSBNOTgwODhfREFJX0FUVEVOVUFUSU9OX1NISUZUICAgIDAKKwogLyogTTk4MDg4X1JFR18zNV9MVkxfTUlDMSwgTTk4MDg4X1JFR18zNl9MVkxfTUlDMiAqLwogICAgICAgICNkZWZpbmUgTTk4MDg4X01JQ1BSRV9NQVNLICAgICAgICAgICAgICAoMzw8NSkKICAgICAgICAjZGVmaW5lIE05ODA4OF9NSUNQUkVfU0hJRlQgICAgICAgICAgICAgNQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9tYXg5ODA5NS5jIGIvc291bmQvc29jL2NvZGVjcy9tYXg5ODA5NS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZDI4MmQKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL21heDk4MDk1LmMKQEAgLTAsMCArMSwyMzk2IEBACisvKgorICogbWF4OTgwOTUuYyAtLSBNQVg5ODA5NSBBTFNBIFNvQyBBdWRpbyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAxMSBNYXhpbSBJbnRlZ3JhdGVkIFByb2R1Y3RzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKyNpbmNsdWRlIDxzb3VuZC9tYXg5ODA5NS5oPgorI2luY2x1ZGUgIm1heDk4MDk1LmgiCisKK2VudW0gbWF4OTgwOTVfdHlwZSB7CisJTUFYOTgwOTUsCit9OworCitzdHJ1Y3QgbWF4OTgwOTVfY2RhdGEgeworCXVuc2lnbmVkIGludCByYXRlOworCXVuc2lnbmVkIGludCBmbXQ7CisJaW50IGVxX3NlbDsKKwlpbnQgYnFfc2VsOworfTsKKworc3RydWN0IG1heDk4MDk1X3ByaXYgeworCWVudW0gbWF4OTgwOTVfdHlwZSBkZXZ0eXBlOworCXZvaWQgKmNvbnRyb2xfZGF0YTsKKwlzdHJ1Y3QgbWF4OTgwOTVfcGRhdGEgKnBkYXRhOworCXVuc2lnbmVkIGludCBzeXNjbGs7CisJc3RydWN0IG1heDk4MDk1X2NkYXRhIGRhaVszXTsKKwljb25zdCBjaGFyICoqZXFfdGV4dHM7CisJY29uc3QgY2hhciAqKmJxX3RleHRzOworCXN0cnVjdCBzb2NfZW51bSBlcV9lbnVtOworCXN0cnVjdCBzb2NfZW51bSBicV9lbnVtOworCWludCBlcV90ZXh0Y250OworCWludCBicV90ZXh0Y250OworCXU4IGxpbl9zdGF0ZTsKKwl1bnNpZ25lZCBpbnQgbWljMXByZTsKKwl1bnNpZ25lZCBpbnQgbWljMnByZTsKK307CisKK3N0YXRpYyBjb25zdCB1OCBtYXg5ODA5NV9yZWdfZGVmW005ODA5NV9SRUdfQ05UXSA9IHsKKwkweDAwLCAvKiAwMCAqLworCTB4MDAsIC8qIDAxICovCisJMHgwMCwgLyogMDIgKi8KKwkweDAwLCAvKiAwMyAqLworCTB4MDAsIC8qIDA0ICovCisJMHgwMCwgLyogMDUgKi8KKwkweDAwLCAvKiAwNiAqLworCTB4MDAsIC8qIDA3ICovCisJMHgwMCwgLyogMDggKi8KKwkweDAwLCAvKiAwOSAqLworCTB4MDAsIC8qIDBBICovCisJMHgwMCwgLyogMEIgKi8KKwkweDAwLCAvKiAwQyAqLworCTB4MDAsIC8qIDBEICovCisJMHgwMCwgLyogMEUgKi8KKwkweDAwLCAvKiAwRiAqLworCTB4MDAsIC8qIDEwICovCisJMHgwMCwgLyogMTEgKi8KKwkweDAwLCAvKiAxMiAqLworCTB4MDAsIC8qIDEzICovCisJMHgwMCwgLyogMTQgKi8KKwkweDAwLCAvKiAxNSAqLworCTB4MDAsIC8qIDE2ICovCisJMHgwMCwgLyogMTcgKi8KKwkweDAwLCAvKiAxOCAqLworCTB4MDAsIC8qIDE5ICovCisJMHgwMCwgLyogMUEgKi8KKwkweDAwLCAvKiAxQiAqLworCTB4MDAsIC8qIDFDICovCisJMHgwMCwgLyogMUQgKi8KKwkweDAwLCAvKiAxRSAqLworCTB4MDAsIC8qIDFGICovCisJMHgwMCwgLyogMjAgKi8KKwkweDAwLCAvKiAyMSAqLworCTB4MDAsIC8qIDIyICovCisJMHgwMCwgLyogMjMgKi8KKwkweDAwLCAvKiAyNCAqLworCTB4MDAsIC8qIDI1ICovCisJMHgwMCwgLyogMjYgKi8KKwkweDAwLCAvKiAyNyAqLworCTB4MDAsIC8qIDI4ICovCisJMHgwMCwgLyogMjkgKi8KKwkweDAwLCAvKiAyQSAqLworCTB4MDAsIC8qIDJCICovCisJMHgwMCwgLyogMkMgKi8KKwkweDAwLCAvKiAyRCAqLworCTB4MDAsIC8qIDJFICovCisJMHgwMCwgLyogMkYgKi8KKwkweDAwLCAvKiAzMCAqLworCTB4MDAsIC8qIDMxICovCisJMHgwMCwgLyogMzIgKi8KKwkweDAwLCAvKiAzMyAqLworCTB4MDAsIC8qIDM0ICovCisJMHgwMCwgLyogMzUgKi8KKwkweDAwLCAvKiAzNiAqLworCTB4MDAsIC8qIDM3ICovCisJMHgwMCwgLyogMzggKi8KKwkweDAwLCAvKiAzOSAqLworCTB4MDAsIC8qIDNBICovCisJMHgwMCwgLyogM0IgKi8KKwkweDAwLCAvKiAzQyAqLworCTB4MDAsIC8qIDNEICovCisJMHgwMCwgLyogM0UgKi8KKwkweDAwLCAvKiAzRiAqLworCTB4MDAsIC8qIDQwICovCisJMHgwMCwgLyogNDEgKi8KKwkweDAwLCAvKiA0MiAqLworCTB4MDAsIC8qIDQzICovCisJMHgwMCwgLyogNDQgKi8KKwkweDAwLCAvKiA0NSAqLworCTB4MDAsIC8qIDQ2ICovCisJMHgwMCwgLyogNDcgKi8KKwkweDAwLCAvKiA0OCAqLworCTB4MDAsIC8qIDQ5ICovCisJMHgwMCwgLyogNEEgKi8KKwkweDAwLCAvKiA0QiAqLworCTB4MDAsIC8qIDRDICovCisJMHgwMCwgLyogNEQgKi8KKwkweDAwLCAvKiA0RSAqLworCTB4MDAsIC8qIDRGICovCisJMHgwMCwgLyogNTAgKi8KKwkweDAwLCAvKiA1MSAqLworCTB4MDAsIC8qIDUyICovCisJMHgwMCwgLyogNTMgKi8KKwkweDAwLCAvKiA1NCAqLworCTB4MDAsIC8qIDU1ICovCisJMHgwMCwgLyogNTYgKi8KKwkweDAwLCAvKiA1NyAqLworCTB4MDAsIC8qIDU4ICovCisJMHgwMCwgLyogNTkgKi8KKwkweDAwLCAvKiA1QSAqLworCTB4MDAsIC8qIDVCICovCisJMHgwMCwgLyogNUMgKi8KKwkweDAwLCAvKiA1RCAqLworCTB4MDAsIC8qIDVFICovCisJMHgwMCwgLyogNUYgKi8KKwkweDAwLCAvKiA2MCAqLworCTB4MDAsIC8qIDYxICovCisJMHgwMCwgLyogNjIgKi8KKwkweDAwLCAvKiA2MyAqLworCTB4MDAsIC8qIDY0ICovCisJMHgwMCwgLyogNjUgKi8KKwkweDAwLCAvKiA2NiAqLworCTB4MDAsIC8qIDY3ICovCisJMHgwMCwgLyogNjggKi8KKwkweDAwLCAvKiA2OSAqLworCTB4MDAsIC8qIDZBICovCisJMHgwMCwgLyogNkIgKi8KKwkweDAwLCAvKiA2QyAqLworCTB4MDAsIC8qIDZEICovCisJMHgwMCwgLyogNkUgKi8KKwkweDAwLCAvKiA2RiAqLworCTB4MDAsIC8qIDcwICovCisJMHgwMCwgLyogNzEgKi8KKwkweDAwLCAvKiA3MiAqLworCTB4MDAsIC8qIDczICovCisJMHgwMCwgLyogNzQgKi8KKwkweDAwLCAvKiA3NSAqLworCTB4MDAsIC8qIDc2ICovCisJMHgwMCwgLyogNzcgKi8KKwkweDAwLCAvKiA3OCAqLworCTB4MDAsIC8qIDc5ICovCisJMHgwMCwgLyogN0EgKi8KKwkweDAwLCAvKiA3QiAqLworCTB4MDAsIC8qIDdDICovCisJMHgwMCwgLyogN0QgKi8KKwkweDAwLCAvKiA3RSAqLworCTB4MDAsIC8qIDdGICovCisJMHgwMCwgLyogODAgKi8KKwkweDAwLCAvKiA4MSAqLworCTB4MDAsIC8qIDgyICovCisJMHgwMCwgLyogODMgKi8KKwkweDAwLCAvKiA4NCAqLworCTB4MDAsIC8qIDg1ICovCisJMHgwMCwgLyogODYgKi8KKwkweDAwLCAvKiA4NyAqLworCTB4MDAsIC8qIDg4ICovCisJMHgwMCwgLyogODkgKi8KKwkweDAwLCAvKiA4QSAqLworCTB4MDAsIC8qIDhCICovCisJMHgwMCwgLyogOEMgKi8KKwkweDAwLCAvKiA4RCAqLworCTB4MDAsIC8qIDhFICovCisJMHgwMCwgLyogOEYgKi8KKwkweDAwLCAvKiA5MCAqLworCTB4MDAsIC8qIDkxICovCisJMHgzMCwgLyogOTIgKi8KKwkweEYwLCAvKiA5MyAqLworCTB4MDAsIC8qIDk0ICovCisJMHgwMCwgLyogOTUgKi8KKwkweDNGLCAvKiA5NiAqLworCTB4MDAsIC8qIDk3ICovCisJMHgwMCwgLyogOTggKi8KKwkweDAwLCAvKiA5OSAqLworCTB4MDAsIC8qIDlBICovCisJMHgwMCwgLyogOUIgKi8KKwkweDAwLCAvKiA5QyAqLworCTB4MDAsIC8qIDlEICovCisJMHgwMCwgLyogOUUgKi8KKwkweDAwLCAvKiA5RiAqLworCTB4MDAsIC8qIEEwICovCisJMHgwMCwgLyogQTEgKi8KKwkweDAwLCAvKiBBMiAqLworCTB4MDAsIC8qIEEzICovCisJMHgwMCwgLyogQTQgKi8KKwkweDAwLCAvKiBBNSAqLworCTB4MDAsIC8qIEE2ICovCisJMHgwMCwgLyogQTcgKi8KKwkweDAwLCAvKiBBOCAqLworCTB4MDAsIC8qIEE5ICovCisJMHgwMCwgLyogQUEgKi8KKwkweDAwLCAvKiBBQiAqLworCTB4MDAsIC8qIEFDICovCisJMHgwMCwgLyogQUQgKi8KKwkweDAwLCAvKiBBRSAqLworCTB4MDAsIC8qIEFGICovCisJMHgwMCwgLyogQjAgKi8KKwkweDAwLCAvKiBCMSAqLworCTB4MDAsIC8qIEIyICovCisJMHgwMCwgLyogQjMgKi8KKwkweDAwLCAvKiBCNCAqLworCTB4MDAsIC8qIEI1ICovCisJMHgwMCwgLyogQjYgKi8KKwkweDAwLCAvKiBCNyAqLworCTB4MDAsIC8qIEI4ICovCisJMHgwMCwgLyogQjkgKi8KKwkweDAwLCAvKiBCQSAqLworCTB4MDAsIC8qIEJCICovCisJMHgwMCwgLyogQkMgKi8KKwkweDAwLCAvKiBCRCAqLworCTB4MDAsIC8qIEJFICovCisJMHgwMCwgLyogQkYgKi8KKwkweDAwLCAvKiBDMCAqLworCTB4MDAsIC8qIEMxICovCisJMHgwMCwgLyogQzIgKi8KKwkweDAwLCAvKiBDMyAqLworCTB4MDAsIC8qIEM0ICovCisJMHgwMCwgLyogQzUgKi8KKwkweDAwLCAvKiBDNiAqLworCTB4MDAsIC8qIEM3ICovCisJMHgwMCwgLyogQzggKi8KKwkweDAwLCAvKiBDOSAqLworCTB4MDAsIC8qIENBICovCisJMHgwMCwgLyogQ0IgKi8KKwkweDAwLCAvKiBDQyAqLworCTB4MDAsIC8qIENEICovCisJMHgwMCwgLyogQ0UgKi8KKwkweDAwLCAvKiBDRiAqLworCTB4MDAsIC8qIEQwICovCisJMHgwMCwgLyogRDEgKi8KKwkweDAwLCAvKiBEMiAqLworCTB4MDAsIC8qIEQzICovCisJMHgwMCwgLyogRDQgKi8KKwkweDAwLCAvKiBENSAqLworCTB4MDAsIC8qIEQ2ICovCisJMHgwMCwgLyogRDcgKi8KKwkweDAwLCAvKiBEOCAqLworCTB4MDAsIC8qIEQ5ICovCisJMHgwMCwgLyogREEgKi8KKwkweDAwLCAvKiBEQiAqLworCTB4MDAsIC8qIERDICovCisJMHgwMCwgLyogREQgKi8KKwkweDAwLCAvKiBERSAqLworCTB4MDAsIC8qIERGICovCisJMHgwMCwgLyogRTAgKi8KKwkweDAwLCAvKiBFMSAqLworCTB4MDAsIC8qIEUyICovCisJMHgwMCwgLyogRTMgKi8KKwkweDAwLCAvKiBFNCAqLworCTB4MDAsIC8qIEU1ICovCisJMHgwMCwgLyogRTYgKi8KKwkweDAwLCAvKiBFNyAqLworCTB4MDAsIC8qIEU4ICovCisJMHgwMCwgLyogRTkgKi8KKwkweDAwLCAvKiBFQSAqLworCTB4MDAsIC8qIEVCICovCisJMHgwMCwgLyogRUMgKi8KKwkweDAwLCAvKiBFRCAqLworCTB4MDAsIC8qIEVFICovCisJMHgwMCwgLyogRUYgKi8KKwkweDAwLCAvKiBGMCAqLworCTB4MDAsIC8qIEYxICovCisJMHgwMCwgLyogRjIgKi8KKwkweDAwLCAvKiBGMyAqLworCTB4MDAsIC8qIEY0ICovCisJMHgwMCwgLyogRjUgKi8KKwkweDAwLCAvKiBGNiAqLworCTB4MDAsIC8qIEY3ICovCisJMHgwMCwgLyogRjggKi8KKwkweDAwLCAvKiBGOSAqLworCTB4MDAsIC8qIEZBICovCisJMHgwMCwgLyogRkIgKi8KKwkweDAwLCAvKiBGQyAqLworCTB4MDAsIC8qIEZEICovCisJMHgwMCwgLyogRkUgKi8KKwkweDAwLCAvKiBGRiAqLworfTsKKworc3RhdGljIHN0cnVjdCB7CisJaW50IHJlYWRhYmxlOworCWludCB3cml0YWJsZTsKK30gbWF4OTgwOTVfYWNjZXNzW005ODA5NV9SRUdfQ05UXSA9IHsKKwl7IDB4MDAsIDB4MDAgfSwgLyogMDAgKi8KKwl7IDB4RkYsIDB4MDAgfSwgLyogMDEgKi8KKwl7IDB4RkYsIDB4MDAgfSwgLyogMDIgKi8KKwl7IDB4RkYsIDB4MDAgfSwgLyogMDMgKi8KKwl7IDB4RkYsIDB4MDAgfSwgLyogMDQgKi8KKwl7IDB4RkYsIDB4MDAgfSwgLyogMDUgKi8KKwl7IDB4RkYsIDB4MDAgfSwgLyogMDYgKi8KKwl7IDB4RkYsIDB4MDAgfSwgLyogMDcgKi8KKwl7IDB4RkYsIDB4MDAgfSwgLyogMDggKi8KKwl7IDB4RkYsIDB4MDAgfSwgLyogMDkgKi8KKwl7IDB4RkYsIDB4MDAgfSwgLyogMEEgKi8KKwl7IDB4RkYsIDB4MDAgfSwgLyogMEIgKi8KKwl7IDB4RkYsIDB4MDAgfSwgLyogMEMgKi8KKwl7IDB4RkYsIDB4MDAgfSwgLyogMEQgKi8KKwl7IDB4RkYsIDB4MDAgfSwgLyogMEUgKi8KKwl7IDB4RkYsIDB4OUYgfSwgLyogMEYgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogMTAgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogMTEgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogMTIgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogMTMgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogMTQgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogMTUgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogMTYgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogMTcgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogMTggKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogMTkgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogMUEgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogMUIgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogMUMgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogMUQgKi8KKwl7IDB4RkYsIDB4NzcgfSwgLyogMUUgKi8KKwl7IDB4RkYsIDB4NzcgfSwgLyogMUYgKi8KKwl7IDB4RkYsIDB4NzcgfSwgLyogMjAgKi8KKwl7IDB4RkYsIDB4NzcgfSwgLyogMjEgKi8KKwl7IDB4RkYsIDB4NzcgfSwgLyogMjIgKi8KKwl7IDB4RkYsIDB4NzcgfSwgLyogMjMgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogMjQgKi8KKwl7IDB4RkYsIDB4N0YgfSwgLyogMjUgKi8KKwl7IDB4RkYsIDB4MzEgfSwgLyogMjYgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogMjcgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogMjggKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogMjkgKi8KKwl7IDB4RkYsIDB4RjcgfSwgLyogMkEgKi8KKwl7IDB4RkYsIDB4MkYgfSwgLyogMkIgKi8KKwl7IDB4RkYsIDB4RUYgfSwgLyogMkMgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogMkQgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogMkUgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogMkYgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogMzAgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogMzEgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogMzIgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogMzMgKi8KKwl7IDB4RkYsIDB4RjcgfSwgLyogMzQgKi8KKwl7IDB4RkYsIDB4MkYgfSwgLyogMzUgKi8KKwl7IDB4RkYsIDB4Q0YgfSwgLyogMzYgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogMzcgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogMzggKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogMzkgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogM0EgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogM0IgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogM0MgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogM0QgKi8KKwl7IDB4RkYsIDB4RjcgfSwgLyogM0UgKi8KKwl7IDB4RkYsIDB4MkYgfSwgLyogM0YgKi8KKwl7IDB4RkYsIDB4Q0YgfSwgLyogNDAgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogNDEgKi8KKwl7IDB4RkYsIDB4NzcgfSwgLyogNDIgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogNDMgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogNDQgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogNDUgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogNDYgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogNDcgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogNDggKi8KKwl7IDB4RkYsIDB4MEYgfSwgLyogNDkgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogNEEgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogNEIgKi8KKwl7IDB4RkYsIDB4M0YgfSwgLyogNEMgKi8KKwl7IDB4RkYsIDB4M0YgfSwgLyogNEQgKi8KKwl7IDB4RkYsIDB4M0YgfSwgLyogNEUgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogNEYgKi8KKwl7IDB4RkYsIDB4N0YgfSwgLyogNTAgKi8KKwl7IDB4RkYsIDB4N0YgfSwgLyogNTEgKi8KKwl7IDB4RkYsIDB4MEYgfSwgLyogNTIgKi8KKwl7IDB4RkYsIDB4M0YgfSwgLyogNTMgKi8KKwl7IDB4RkYsIDB4M0YgfSwgLyogNTQgKi8KKwl7IDB4RkYsIDB4M0YgfSwgLyogNTUgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogNTYgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogNTcgKi8KKwl7IDB4RkYsIDB4QkYgfSwgLyogNTggKi8KKwl7IDB4RkYsIDB4MUYgfSwgLyogNTkgKi8KKwl7IDB4RkYsIDB4QkYgfSwgLyogNUEgKi8KKwl7IDB4RkYsIDB4MUYgfSwgLyogNUIgKi8KKwl7IDB4RkYsIDB4QkYgfSwgLyogNUMgKi8KKwl7IDB4RkYsIDB4M0YgfSwgLyogNUQgKi8KKwl7IDB4RkYsIDB4M0YgfSwgLyogNUUgKi8KKwl7IDB4RkYsIDB4N0YgfSwgLyogNUYgKi8KKwl7IDB4RkYsIDB4N0YgfSwgLyogNjAgKi8KKwl7IDB4RkYsIDB4NDcgfSwgLyogNjEgKi8KKwl7IDB4RkYsIDB4OUYgfSwgLyogNjIgKi8KKwl7IDB4RkYsIDB4OUYgfSwgLyogNjMgKi8KKwl7IDB4RkYsIDB4OUYgfSwgLyogNjQgKi8KKwl7IDB4RkYsIDB4OUYgfSwgLyogNjUgKi8KKwl7IDB4RkYsIDB4OUYgfSwgLyogNjYgKi8KKwl7IDB4RkYsIDB4QkYgfSwgLyogNjcgKi8KKwl7IDB4RkYsIDB4QkYgfSwgLyogNjggKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogNjkgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogNkEgKi8KKwl7IDB4RkYsIDB4N0YgfSwgLyogNkIgKi8KKwl7IDB4RkYsIDB4RjcgfSwgLyogNkMgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogNkQgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogNkUgKi8KKwl7IDB4RkYsIDB4MUYgfSwgLyogNkYgKi8KKwl7IDB4RkYsIDB4RjcgfSwgLyogNzAgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogNzEgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogNzIgKi8KKwl7IDB4RkYsIDB4MUYgfSwgLyogNzMgKi8KKwl7IDB4RkYsIDB4RjcgfSwgLyogNzQgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogNzUgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogNzYgKi8KKwl7IDB4RkYsIDB4MUYgfSwgLyogNzcgKi8KKwl7IDB4RkYsIDB4RjcgfSwgLyogNzggKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogNzkgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogN0EgKi8KKwl7IDB4RkYsIDB4MUYgfSwgLyogN0IgKi8KKwl7IDB4RkYsIDB4RjcgfSwgLyogN0MgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogN0QgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogN0UgKi8KKwl7IDB4RkYsIDB4MUYgfSwgLyogN0YgKi8KKwl7IDB4RkYsIDB4RjcgfSwgLyogODAgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogODEgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogODIgKi8KKwl7IDB4RkYsIDB4MUYgfSwgLyogODMgKi8KKwl7IDB4RkYsIDB4N0YgfSwgLyogODQgKi8KKwl7IDB4RkYsIDB4MEYgfSwgLyogODUgKi8KKwl7IDB4RkYsIDB4RDggfSwgLyogODYgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogODcgKi8KKwl7IDB4RkYsIDB4RUYgfSwgLyogODggKi8KKwl7IDB4RkYsIDB4RkUgfSwgLyogODkgKi8KKwl7IDB4RkYsIDB4RkUgfSwgLyogOEEgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogOEIgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogOEMgKi8KKwl7IDB4RkYsIDB4M0YgfSwgLyogOEQgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogOEUgKi8KKwl7IDB4RkYsIDB4M0YgfSwgLyogOEYgKi8KKwl7IDB4RkYsIDB4OEYgfSwgLyogOTAgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogOTEgKi8KKwl7IDB4RkYsIDB4M0YgfSwgLyogOTIgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogOTMgKi8KKwl7IDB4RkYsIDB4RkYgfSwgLyogOTQgKi8KKwl7IDB4RkYsIDB4MEYgfSwgLyogOTUgKi8KKwl7IDB4RkYsIDB4M0YgfSwgLyogOTYgKi8KKwl7IDB4RkYsIDB4OEMgfSwgLyogOTcgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogOTggKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogOTkgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogOUEgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogOUIgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogOUMgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogOUQgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogOUUgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogOUYgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQTAgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQTEgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQTIgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQTMgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQTQgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQTUgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQTYgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQTcgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQTggKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQTkgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQUEgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQUIgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQUMgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQUQgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQUUgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQUYgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQjAgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQjEgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQjIgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQjMgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQjQgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQjUgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQjYgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQjcgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQjggKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQjkgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQkEgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQkIgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQkMgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQkQgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQkUgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQkYgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQzAgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQzEgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQzIgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQzMgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQzQgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQzUgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQzYgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQzcgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQzggKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQzkgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQ0EgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQ0IgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQ0MgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQ0QgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQ0UgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogQ0YgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRDAgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRDEgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRDIgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRDMgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRDQgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRDUgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRDYgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRDcgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRDggKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRDkgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogREEgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogREIgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogREMgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogREQgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogREUgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogREYgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRTAgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRTEgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRTIgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRTMgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRTQgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRTUgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRTYgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRTcgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRTggKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRTkgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRUEgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRUIgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRUMgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRUQgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRUUgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRUYgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRjAgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRjEgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRjIgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRjMgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRjQgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRjUgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRjYgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRjcgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRjggKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRjkgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRkEgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRkIgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRkMgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRkQgKi8KKwl7IDB4MDAsIDB4MDAgfSwgLyogRkUgKi8KKwl7IDB4RkYsIDB4MDAgfSwgLyogRkYgKi8KK307CisKK3N0YXRpYyBpbnQgbWF4OTgwOTVfcmVhZGFibGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnKQoreworCWlmIChyZWcgPj0gTTk4MDk1X1JFR19DTlQpCisJCXJldHVybiAwOworCXJldHVybiBtYXg5ODA5NV9hY2Nlc3NbcmVnXS5yZWFkYWJsZSAhPSAwOworfQorCitzdGF0aWMgaW50IG1heDk4MDk1X3ZvbGF0aWxlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZykKK3sKKwlpZiAocmVnID4gTTk4MDk1X1JFR19NQVhfQ0FDSEVEKQorCQlyZXR1cm4gMTsKKworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBNOTgwOTVfMDAwX0hPU1RfREFUQToKKwljYXNlIE05ODA5NV8wMDFfSE9TVF9JTlRfU1RTOgorCWNhc2UgTTk4MDk1XzAwMl9IT1NUX1JTUF9TVFM6CisJY2FzZSBNOTgwOTVfMDAzX0hPU1RfQ01EX1NUUzoKKwljYXNlIE05ODA5NV8wMDRfQ09ERUNfU1RTOgorCWNhc2UgTTk4MDk1XzAwNV9EQUkxX0FMQ19TVFM6CisJY2FzZSBNOTgwOTVfMDA2X0RBSTJfQUxDX1NUUzoKKwljYXNlIE05ODA5NV8wMDdfSkFDS19BVVRPX1NUUzoKKwljYXNlIE05ODA5NV8wMDhfSkFDS19NQU5VQUxfU1RTOgorCWNhc2UgTTk4MDk1XzAwOV9KQUNLX1ZCQVRfU1RTOgorCWNhc2UgTTk4MDk1XzAwQV9BQ0NfQURDX1NUUzoKKwljYXNlIE05ODA5NV8wMEJfTUlDX05HX0FHQ19TVFM6CisJY2FzZSBNOTgwOTVfMDBDX1NQS19MX1ZPTFRfU1RTOgorCWNhc2UgTTk4MDk1XzAwRF9TUEtfUl9WT0xUX1NUUzoKKwljYXNlIE05ODA5NV8wMEVfVEVNUF9TRU5TT1JfU1RTOgorCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEZpbHRlciBjb2VmZmljaWVudHMgYXJlIGluIGEgc2VwYXJhdGUgcmVnaXN0ZXIgc2VnbWVudAorICogYW5kIHRoZXkgc2hhcmUgdGhlIGFkZHJlc3Mgc3BhY2Ugb2YgdGhlIG5vcm1hbCByZWdpc3RlcnMuCisgKiBUaGUgY29lZmZpY2llbnQgcmVnaXN0ZXJzIGRvIG5vdCBuZWVkIG9yIHNoYXJlIHRoZSBjYWNoZS4KKyAqLworc3RhdGljIGludCBtYXg5ODA5NV9od193cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCisJCQkgICAgIHVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwl1OCBkYXRhWzJdOworCisJZGF0YVswXSA9IHJlZzsKKwlkYXRhWzFdID0gdmFsdWU7CisJaWYgKGNvZGVjLT5od193cml0ZShjb2RlYy0+Y29udHJvbF9kYXRhLCBkYXRhLCAyKSA9PSAyKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiAtRUlPOworfQorCisvKgorICogTG9hZCBlcXVhbGl6ZXIgRFNQIGNvZWZmaWNpZW50IGNvbmZpZ3VyYXRpb25zIHJlZ2lzdGVycworICovCitzdGF0aWMgdm9pZCBtOTgwOTVfZXFfYmFuZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCBkYWksCisJCSAgICB1bnNpZ25lZCBpbnQgYmFuZCwgdTE2ICpjb2VmcykKK3sKKwl1bnNpZ25lZCBpbnQgZXFfcmVnOworCXVuc2lnbmVkIGludCBpOworCisJQlVHX09OKGJhbmQgPiA0KTsKKwlCVUdfT04oZGFpID4gMSk7CisKKwkvKiBMb2FkIHRoZSBiYXNlIHJlZ2lzdGVyIGFkZHJlc3MgKi8KKwllcV9yZWcgPSBkYWkgPyBNOTgwOTVfMTQyX0RBSTJfRVFfQkFTRSA6IE05ODA5NV8xMTBfREFJMV9FUV9CQVNFOworCisJLyogQWRkIHRoZSBiYW5kIGFkZHJlc3Mgb2Zmc2V0LCBub3RlIGFkanVzdG1lbnQgZm9yIHdvcmQgYWRkcmVzcyAqLworCWVxX3JlZyArPSBiYW5kICogKE05ODA5NV9DT0VGU19QRVJfQkFORCA8PCAxKTsKKworCS8qIFN0ZXAgdGhyb3VnaCB0aGUgcmVnaXN0ZXJzIGFuZCBjb2VmcyAqLworCWZvciAoaSA9IDA7IGkgPCBNOTgwOTVfQ09FRlNfUEVSX0JBTkQ7IGkrKykgeworCQltYXg5ODA5NV9od193cml0ZShjb2RlYywgZXFfcmVnKyssIE05ODA5NV9CWVRFMShjb2Vmc1tpXSkpOworCQltYXg5ODA5NV9od193cml0ZShjb2RlYywgZXFfcmVnKyssIE05ODA5NV9CWVRFMChjb2Vmc1tpXSkpOworCX0KK30KKworLyoKKyAqIExvYWQgYmlxdWFkIGZpbHRlciBjb2VmZmljaWVudCBjb25maWd1cmF0aW9ucyByZWdpc3RlcnMKKyAqLworc3RhdGljIHZvaWQgbTk4MDk1X2JpcXVhZF9iYW5kKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IGRhaSwKKwkJICAgIHVuc2lnbmVkIGludCBiYW5kLCB1MTYgKmNvZWZzKQoreworCXVuc2lnbmVkIGludCBicV9yZWc7CisJdW5zaWduZWQgaW50IGk7CisKKwlCVUdfT04oYmFuZCA+IDEpOworCUJVR19PTihkYWkgPiAxKTsKKworCS8qIExvYWQgdGhlIGJhc2UgcmVnaXN0ZXIgYWRkcmVzcyAqLworCWJxX3JlZyA9IGRhaSA/IE05ODA5NV8xN0VfREFJMl9CUV9CQVNFIDogTTk4MDk1XzE3NF9EQUkxX0JRX0JBU0U7CisKKwkvKiBBZGQgdGhlIGJhbmQgYWRkcmVzcyBvZmZzZXQsIG5vdGUgYWRqdXN0bWVudCBmb3Igd29yZCBhZGRyZXNzICovCisJYnFfcmVnICs9IGJhbmQgKiAoTTk4MDk1X0NPRUZTX1BFUl9CQU5EIDw8IDEpOworCisJLyogU3RlcCB0aHJvdWdoIHRoZSByZWdpc3RlcnMgYW5kIGNvZWZzICovCisJZm9yIChpID0gMDsgaSA8IE05ODA5NV9DT0VGU19QRVJfQkFORDsgaSsrKSB7CisJCW1heDk4MDk1X2h3X3dyaXRlKGNvZGVjLCBicV9yZWcrKywgTTk4MDk1X0JZVEUxKGNvZWZzW2ldKSk7CisJCW1heDk4MDk1X2h3X3dyaXRlKGNvZGVjLCBicV9yZWcrKywgTTk4MDk1X0JZVEUwKGNvZWZzW2ldKSk7CisJfQorfQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1heDk4MDk1X2ZsdHJfbW9kZVtdID0geyAiVm9pY2UiLCAiTXVzaWMiIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIG1heDk4MDk1X2RhaTFfZmlsdGVyX21vZGVfZW51bVtdID0geworCVNPQ19FTlVNX1NJTkdMRShNOTgwOTVfMDJFX0RBSTFfRklMVEVSUywgNywgMiwgbWF4OTgwOTVfZmx0cl9tb2RlKSwKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIG1heDk4MDk1X2RhaTJfZmlsdGVyX21vZGVfZW51bVtdID0geworCVNPQ19FTlVNX1NJTkdMRShNOTgwOTVfMDM4X0RBSTJfRklMVEVSUywgNywgMiwgbWF4OTgwOTVfZmx0cl9tb2RlKSwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbWF4OTgwOTVfZXh0bWljX3RleHRbXSA9IHsgIk5vbmUiLCAiTUlDMSIsICJNSUMyIiB9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIG1heDk4MDk1X2V4dG1pY19lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoTTk4MDk1XzA4N19DRkdfTUlDLCAwLCAzLCBtYXg5ODA5NV9leHRtaWNfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBtYXg5ODA5NV9leHRtaWNfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJFeHRlcm5hbCBNSUMgTXV4IiwgbWF4OTgwOTVfZXh0bWljX2VudW0pOworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1heDk4MDk1X2xpbmVpbl90ZXh0W10gPSB7ICJJTkEiLCAiSU5CIiB9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIG1heDk4MDk1X2xpbmVpbl9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoTTk4MDk1XzA4Nl9DRkdfTElORSwgNiwgMiwgbWF4OTgwOTVfbGluZWluX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbWF4OTgwOTVfbGluZWluX211eCA9CisJU09DX0RBUE1fRU5VTSgiTGluZWluIElucHV0IE11eCIsIG1heDk4MDk1X2xpbmVpbl9lbnVtKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtYXg5ODA5NV9saW5lX21vZGVfdGV4dFtdID0geworCSJTdGVyZW8iLCAiRGlmZmVyZW50aWFsIn07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gbWF4OTgwOTVfbGluZWluX21vZGVfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKE05ODA5NV8wODZfQ0ZHX0xJTkUsIDcsIDIsIG1heDk4MDk1X2xpbmVfbW9kZV90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBtYXg5ODA5NV9saW5lb3V0X21vZGVfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKE05ODA5NV8wODZfQ0ZHX0xJTkUsIDQsIDIsIG1heDk4MDk1X2xpbmVfbW9kZV90ZXh0KTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtYXg5ODA5NV9kYWlfZmx0cltdID0geworCSJPZmYiLCAiRWxsaXB0aWNhbC1IUEYtMTZrIiwgIkJ1dHRlcndvcnRoLUhQRi0xNmsiLAorCSJFbGxpcHRpY2FsLUhQRi04ayIsICJCdXR0ZXJ3b3J0aC1IUEYtOGsiLCAiQnV0dGVyd29ydGgtSFBGLUZzLzI0MCJ9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBtYXg5ODA5NV9kYWkxX2RhY19maWx0ZXJfZW51bVtdID0geworCVNPQ19FTlVNX1NJTkdMRShNOTgwOTVfMDJFX0RBSTFfRklMVEVSUywgMCwgNiwgbWF4OTgwOTVfZGFpX2ZsdHIpLAorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gbWF4OTgwOTVfZGFpMl9kYWNfZmlsdGVyX2VudW1bXSA9IHsKKwlTT0NfRU5VTV9TSU5HTEUoTTk4MDk1XzAzOF9EQUkyX0ZJTFRFUlMsIDAsIDYsIG1heDk4MDk1X2RhaV9mbHRyKSwKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIG1heDk4MDk1X2RhaTNfZGFjX2ZpbHRlcl9lbnVtW10gPSB7CisJU09DX0VOVU1fU0lOR0xFKE05ODA5NV8wNDJfREFJM19GSUxURVJTLCAwLCA2LCBtYXg5ODA5NV9kYWlfZmx0ciksCit9OworCitzdGF0aWMgaW50IG1heDk4MDk1X21pYzFwcmVfc2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3QgbWF4OTgwOTVfcHJpdiAqbWF4OTgwOTUgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwl1bnNpZ25lZCBpbnQgc2VsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisKKwltYXg5ODA5NS0+bWljMXByZSA9IHNlbDsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBNOTgwOTVfMDVGX0xWTF9NSUMxLCBNOTgwOTVfTUlDUFJFX01BU0ssCisJCSgxK3NlbCk8PE05ODA5NV9NSUNQUkVfU0hJRlQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWF4OTgwOTVfbWljMXByZV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBtYXg5ODA5NV9wcml2ICptYXg5ODA5NSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBtYXg5ODA5NS0+bWljMXByZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYXg5ODA5NV9taWMycHJlX3NldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IG1heDk4MDk1X3ByaXYgKm1heDk4MDk1ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJdW5zaWduZWQgaW50IHNlbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCisJbWF4OTgwOTUtPm1pYzJwcmUgPSBzZWw7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgTTk4MDk1XzA2MF9MVkxfTUlDMiwgTTk4MDk1X01JQ1BSRV9NQVNLLAorCQkoMStzZWwpPDxNOTgwOTVfTUlDUFJFX1NISUZUKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1heDk4MDk1X21pYzJwcmVfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3QgbWF4OTgwOTVfcHJpdiAqbWF4OTgwOTUgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gbWF4OTgwOTUtPm1pYzJwcmU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWF4OTgwOTVfbWljYm9vc3RfdGx2W10gPSB7CisJVExWX0RCX1JBTkdFX0hFQUQoMiksCisJMCwgMSwgVExWX0RCX1NDQUxFX0lURU0oMCwgMjAwMCwgMCksCisJMiwgMiwgVExWX0RCX1NDQUxFX0lURU0oMzAwMCwgMCwgMCksCit9OworCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUobWF4OTgwOTVfbWljX3RsdiwgMCwgMTAwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShtYXg5ODA5NV9hZGNfdGx2LCAtMTIwMCwgMTAwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShtYXg5ODA5NV9hZGNib29zdF90bHYsIDAsIDYwMCwgMCk7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWF4OTgwOTVfaHBfdGx2W10gPSB7CisJVExWX0RCX1JBTkdFX0hFQUQoNSksCisJMCwgNiwgVExWX0RCX1NDQUxFX0lURU0oLTY3MDAsIDQwMCwgMCksCisJNywgMTQsIFRMVl9EQl9TQ0FMRV9JVEVNKC00MDAwLCAzMDAsIDApLAorCTE1LCAyMSwgVExWX0RCX1NDQUxFX0lURU0oLTE3MDAsIDIwMCwgMCksCisJMjIsIDI3LCBUTFZfREJfU0NBTEVfSVRFTSgtNDAwLCAxMDAsIDApLAorCTI4LCAzMSwgVExWX0RCX1NDQUxFX0lURU0oMTUwLCA1MCwgMCksCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1heDk4MDk1X3Nwa190bHZbXSA9IHsKKwlUTFZfREJfUkFOR0VfSEVBRCg0KSwKKwkwLCAxMCwgVExWX0RCX1NDQUxFX0lURU0oLTU5MDAsIDQwMCwgMCksCisJMTEsIDE4LCBUTFZfREJfU0NBTEVfSVRFTSgtMTcwMCwgMjAwLCAwKSwKKwkxOSwgMjcsIFRMVl9EQl9TQ0FMRV9JVEVNKC0yMDAsIDEwMCwgMCksCisJMjgsIDM5LCBUTFZfREJfU0NBTEVfSVRFTSg2NTAsIDUwLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWF4OTgwOTVfcmN2X2xvdXRfdGx2W10gPSB7CisJVExWX0RCX1JBTkdFX0hFQUQoNSksCisJMCwgNiwgVExWX0RCX1NDQUxFX0lURU0oLTYyMDAsIDQwMCwgMCksCisJNywgMTQsIFRMVl9EQl9TQ0FMRV9JVEVNKC0zNTAwLCAzMDAsIDApLAorCTE1LCAyMSwgVExWX0RCX1NDQUxFX0lURU0oLTEyMDAsIDIwMCwgMCksCisJMjIsIDI3LCBUTFZfREJfU0NBTEVfSVRFTSgxMDAsIDEwMCwgMCksCisJMjgsIDMxLCBUTFZfREJfU0NBTEVfSVRFTSg2NTAsIDUwLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWF4OTgwOTVfbGluX3RsdltdID0geworCVRMVl9EQl9SQU5HRV9IRUFEKDMpLAorCTAsIDIsIFRMVl9EQl9TQ0FMRV9JVEVNKC02MDAsIDMwMCwgMCksCisJMywgMywgVExWX0RCX1NDQUxFX0lURU0oMzAwLCAxMTAwLCAwKSwKKwk0LCA1LCBUTFZfREJfU0NBTEVfSVRFTSgxNDAwLCA2MDAsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IG1heDk4MDk1X3NuZF9jb250cm9sc1tdID0geworCisJU09DX0RPVUJMRV9SX1RMVigiSGVhZHBob25lIFZvbHVtZSIsIE05ODA5NV8wNjRfTFZMX0hQX0wsCisJCU05ODA5NV8wNjVfTFZMX0hQX1IsIDAsIDMxLCAwLCBtYXg5ODA5NV9ocF90bHYpLAorCisJU09DX0RPVUJMRV9SX1RMVigiU3BlYWtlciBWb2x1bWUiLCBNOTgwOTVfMDY3X0xWTF9TUEtfTCwKKwkJTTk4MDk1XzA2OF9MVkxfU1BLX1IsIDAsIDM5LCAwLCBtYXg5ODA5NV9zcGtfdGx2KSwKKworCVNPQ19TSU5HTEVfVExWKCJSZWNlaXZlciBWb2x1bWUiLCBNOTgwOTVfMDY2X0xWTF9SQ1YsCisJCTAsIDMxLCAwLCBtYXg5ODA5NV9yY3ZfbG91dF90bHYpLAorCisJU09DX0RPVUJMRV9SX1RMVigiTGluZW91dCBWb2x1bWUiLCBNOTgwOTVfMDYyX0xWTF9MSU5FT1VUMSwKKwkJTTk4MDk1XzA2M19MVkxfTElORU9VVDIsIDAsIDMxLCAwLCBtYXg5ODA5NV9yY3ZfbG91dF90bHYpLAorCisJU09DX0RPVUJMRV9SKCJIZWFkcGhvbmUgU3dpdGNoIiwgTTk4MDk1XzA2NF9MVkxfSFBfTCwKKwkJTTk4MDk1XzA2NV9MVkxfSFBfUiwgNywgMSwgMSksCisKKwlTT0NfRE9VQkxFX1IoIlNwZWFrZXIgU3dpdGNoIiwgTTk4MDk1XzA2N19MVkxfU1BLX0wsCisJCU05ODA5NV8wNjhfTFZMX1NQS19SLCA3LCAxLCAxKSwKKworCVNPQ19TSU5HTEUoIlJlY2VpdmVyIFN3aXRjaCIsIE05ODA5NV8wNjZfTFZMX1JDViwgNywgMSwgMSksCisKKwlTT0NfRE9VQkxFX1IoIkxpbmVvdXQgU3dpdGNoIiwgTTk4MDk1XzA2Ml9MVkxfTElORU9VVDEsCisJCU05ODA5NV8wNjNfTFZMX0xJTkVPVVQyLCA3LCAxLCAxKSwKKworCVNPQ19TSU5HTEVfVExWKCJNSUMxIFZvbHVtZSIsIE05ODA5NV8wNUZfTFZMX01JQzEsIDAsIDIwLCAxLAorCQltYXg5ODA5NV9taWNfdGx2KSwKKworCVNPQ19TSU5HTEVfVExWKCJNSUMyIFZvbHVtZSIsIE05ODA5NV8wNjBfTFZMX01JQzIsIDAsIDIwLCAxLAorCQltYXg5ODA5NV9taWNfdGx2KSwKKworCVNPQ19TSU5HTEVfRVhUX1RMVigiTUlDMSBCb29zdCBWb2x1bWUiLAorCQkJTTk4MDk1XzA1Rl9MVkxfTUlDMSwgNSwgMiwgMCwKKwkJCW1heDk4MDk1X21pYzFwcmVfZ2V0LCBtYXg5ODA5NV9taWMxcHJlX3NldCwKKwkJCW1heDk4MDk1X21pY2Jvb3N0X3RsdiksCisJU09DX1NJTkdMRV9FWFRfVExWKCJNSUMyIEJvb3N0IFZvbHVtZSIsCisJCQlNOTgwOTVfMDYwX0xWTF9NSUMyLCA1LCAyLCAwLAorCQkJbWF4OTgwOTVfbWljMnByZV9nZXQsIG1heDk4MDk1X21pYzJwcmVfc2V0LAorCQkJbWF4OTgwOTVfbWljYm9vc3RfdGx2KSwKKworCVNPQ19TSU5HTEVfVExWKCJMaW5laW4gVm9sdW1lIiwgTTk4MDk1XzA2MV9MVkxfTElORUlOLCAwLCA1LCAxLAorCQltYXg5ODA5NV9saW5fdGx2KSwKKworCVNPQ19TSU5HTEVfVExWKCJBRENMIFZvbHVtZSIsIE05ODA5NV8wNURfTFZMX0FEQ19MLCAwLCAxNSwgMSwKKwkJbWF4OTgwOTVfYWRjX3RsdiksCisJU09DX1NJTkdMRV9UTFYoIkFEQ1IgVm9sdW1lIiwgTTk4MDk1XzA1RV9MVkxfQURDX1IsIDAsIDE1LCAxLAorCQltYXg5ODA5NV9hZGNfdGx2KSwKKworCVNPQ19TSU5HTEVfVExWKCJBRENMIEJvb3N0IFZvbHVtZSIsIE05ODA5NV8wNURfTFZMX0FEQ19MLCA0LCAzLCAwLAorCQltYXg5ODA5NV9hZGNib29zdF90bHYpLAorCVNPQ19TSU5HTEVfVExWKCJBRENSIEJvb3N0IFZvbHVtZSIsIE05ODA5NV8wNUVfTFZMX0FEQ19SLCA0LCAzLCAwLAorCQltYXg5ODA5NV9hZGNib29zdF90bHYpLAorCisJU09DX1NJTkdMRSgiRVExIFN3aXRjaCIsIE05ODA5NV8wODhfQ0ZHX0xFVkVMLCAwLCAxLCAwKSwKKwlTT0NfU0lOR0xFKCJFUTIgU3dpdGNoIiwgTTk4MDk1XzA4OF9DRkdfTEVWRUwsIDEsIDEsIDApLAorCisJU09DX1NJTkdMRSgiQmlxdWFkMSBTd2l0Y2giLCBNOTgwOTVfMDg4X0NGR19MRVZFTCwgMiwgMSwgMCksCisJU09DX1NJTkdMRSgiQmlxdWFkMiBTd2l0Y2giLCBNOTgwOTVfMDg4X0NGR19MRVZFTCwgMywgMSwgMCksCisKKwlTT0NfRU5VTSgiREFJMSBGaWx0ZXIgTW9kZSIsIG1heDk4MDk1X2RhaTFfZmlsdGVyX21vZGVfZW51bSksCisJU09DX0VOVU0oIkRBSTIgRmlsdGVyIE1vZGUiLCBtYXg5ODA5NV9kYWkyX2ZpbHRlcl9tb2RlX2VudW0pLAorCVNPQ19FTlVNKCJEQUkxIERBQyBGaWx0ZXIiLCBtYXg5ODA5NV9kYWkxX2RhY19maWx0ZXJfZW51bSksCisJU09DX0VOVU0oIkRBSTIgREFDIEZpbHRlciIsIG1heDk4MDk1X2RhaTJfZGFjX2ZpbHRlcl9lbnVtKSwKKwlTT0NfRU5VTSgiREFJMyBEQUMgRmlsdGVyIiwgbWF4OTgwOTVfZGFpM19kYWNfZmlsdGVyX2VudW0pLAorCisJU09DX0VOVU0oIkxpbmVpbiBNb2RlIiwgbWF4OTgwOTVfbGluZWluX21vZGVfZW51bSksCisJU09DX0VOVU0oIkxpbmVvdXQgTW9kZSIsIG1heDk4MDk1X2xpbmVvdXRfbW9kZV9lbnVtKSwKK307CisKKy8qIExlZnQgc3BlYWtlciBtaXhlciBzd2l0Y2ggKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBtYXg5ODA5NV9sZWZ0X3NwZWFrZXJfbWl4ZXJfY29udHJvbHNbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEUoIkxlZnQgREFDMSBTd2l0Y2giLCBNOTgwOTVfMDUwX01JWF9TUEtfTEVGVCwgMCwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJSaWdodCBEQUMxIFN3aXRjaCIsIE05ODA5NV8wNTBfTUlYX1NQS19MRUZULCA2LCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIk1vbm8gREFDMiBTd2l0Y2giLCBNOTgwOTVfMDUwX01JWF9TUEtfTEVGVCwgMywgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJNb25vIERBQzMgU3dpdGNoIiwgTTk4MDk1XzA1MF9NSVhfU1BLX0xFRlQsIDMsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiTUlDMSBTd2l0Y2giLCBNOTgwOTVfMDUwX01JWF9TUEtfTEVGVCwgNCwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJNSUMyIFN3aXRjaCIsIE05ODA5NV8wNTBfTUlYX1NQS19MRUZULCA1LCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIklOMSBTd2l0Y2giLCBNOTgwOTVfMDUwX01JWF9TUEtfTEVGVCwgMSwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJJTjIgU3dpdGNoIiwgTTk4MDk1XzA1MF9NSVhfU1BLX0xFRlQsIDIsIDEsIDApLAorfTsKKworLyogUmlnaHQgc3BlYWtlciBtaXhlciBzd2l0Y2ggKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBtYXg5ODA5NV9yaWdodF9zcGVha2VyX21peGVyX2NvbnRyb2xzW10gPSB7CisJU09DX0RBUE1fU0lOR0xFKCJMZWZ0IERBQzEgU3dpdGNoIiwgTTk4MDk1XzA1MV9NSVhfU1BLX1JJR0hULCA2LCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIlJpZ2h0IERBQzEgU3dpdGNoIiwgTTk4MDk1XzA1MV9NSVhfU1BLX1JJR0hULCAwLCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIk1vbm8gREFDMiBTd2l0Y2giLCBNOTgwOTVfMDUxX01JWF9TUEtfUklHSFQsIDMsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiTW9ubyBEQUMzIFN3aXRjaCIsIE05ODA5NV8wNTFfTUlYX1NQS19SSUdIVCwgMywgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJNSUMxIFN3aXRjaCIsIE05ODA5NV8wNTFfTUlYX1NQS19SSUdIVCwgNSwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJNSUMyIFN3aXRjaCIsIE05ODA5NV8wNTFfTUlYX1NQS19SSUdIVCwgNCwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJJTjEgU3dpdGNoIiwgTTk4MDk1XzA1MV9NSVhfU1BLX1JJR0hULCAxLCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIklOMiBTd2l0Y2giLCBNOTgwOTVfMDUxX01JWF9TUEtfUklHSFQsIDIsIDEsIDApLAorfTsKKworLyogTGVmdCBoZWFkcGhvbmUgbWl4ZXIgc3dpdGNoICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbWF4OTgwOTVfbGVmdF9ocF9taXhlcl9jb250cm9sc1tdID0geworCVNPQ19EQVBNX1NJTkdMRSgiTGVmdCBEQUMxIFN3aXRjaCIsIE05ODA5NV8wNENfTUlYX0hQX0xFRlQsIDAsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiUmlnaHQgREFDMSBTd2l0Y2giLCBNOTgwOTVfMDRDX01JWF9IUF9MRUZULCA1LCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIk1JQzEgU3dpdGNoIiwgTTk4MDk1XzA0Q19NSVhfSFBfTEVGVCwgMywgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJNSUMyIFN3aXRjaCIsIE05ODA5NV8wNENfTUlYX0hQX0xFRlQsIDQsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiSU4xIFN3aXRjaCIsIE05ODA5NV8wNENfTUlYX0hQX0xFRlQsIDEsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiSU4yIFN3aXRjaCIsIE05ODA5NV8wNENfTUlYX0hQX0xFRlQsIDIsIDEsIDApLAorfTsKKworLyogUmlnaHQgaGVhZHBob25lIG1peGVyIHN3aXRjaCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IG1heDk4MDk1X3JpZ2h0X2hwX21peGVyX2NvbnRyb2xzW10gPSB7CisJU09DX0RBUE1fU0lOR0xFKCJMZWZ0IERBQzEgU3dpdGNoIiwgTTk4MDk1XzA0RF9NSVhfSFBfUklHSFQsIDUsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiUmlnaHQgREFDMSBTd2l0Y2giLCBNOTgwOTVfMDREX01JWF9IUF9SSUdIVCwgMCwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJNSUMxIFN3aXRjaCIsIE05ODA5NV8wNERfTUlYX0hQX1JJR0hULCAzLCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIk1JQzIgU3dpdGNoIiwgTTk4MDk1XzA0RF9NSVhfSFBfUklHSFQsIDQsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiSU4xIFN3aXRjaCIsIE05ODA5NV8wNERfTUlYX0hQX1JJR0hULCAxLCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIklOMiBTd2l0Y2giLCBNOTgwOTVfMDREX01JWF9IUF9SSUdIVCwgMiwgMSwgMCksCit9OworCisvKiBSZWNlaXZlciBlYXJwaWVjZSBtaXhlciBzd2l0Y2ggKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBtYXg5ODA5NV9tb25vX3Jjdl9taXhlcl9jb250cm9sc1tdID0geworCVNPQ19EQVBNX1NJTkdMRSgiTGVmdCBEQUMxIFN3aXRjaCIsIE05ODA5NV8wNEZfTUlYX1JDViwgMCwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJSaWdodCBEQUMxIFN3aXRjaCIsIE05ODA5NV8wNEZfTUlYX1JDViwgNSwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJNSUMxIFN3aXRjaCIsIE05ODA5NV8wNEZfTUlYX1JDViwgMywgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJNSUMyIFN3aXRjaCIsIE05ODA5NV8wNEZfTUlYX1JDViwgNCwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJJTjEgU3dpdGNoIiwgTTk4MDk1XzA0Rl9NSVhfUkNWLCAxLCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIklOMiBTd2l0Y2giLCBNOTgwOTVfMDRGX01JWF9SQ1YsIDIsIDEsIDApLAorfTsKKworLyogTGVmdCBsaW5lb3V0IG1peGVyIHN3aXRjaCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IG1heDk4MDk1X2xlZnRfbGluZW91dF9taXhlcl9jb250cm9sc1tdID0geworCVNPQ19EQVBNX1NJTkdMRSgiTGVmdCBEQUMxIFN3aXRjaCIsIE05ODA5NV8wNTNfTUlYX0xJTkVPVVQxLCA1LCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIlJpZ2h0IERBQzEgU3dpdGNoIiwgTTk4MDk1XzA1M19NSVhfTElORU9VVDEsIDAsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiTUlDMSBTd2l0Y2giLCBNOTgwOTVfMDUzX01JWF9MSU5FT1VUMSwgMywgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJNSUMyIFN3aXRjaCIsIE05ODA5NV8wNTNfTUlYX0xJTkVPVVQxLCA0LCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIklOMSBTd2l0Y2giLCBNOTgwOTVfMDUzX01JWF9MSU5FT1VUMSwgMSwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJJTjIgU3dpdGNoIiwgTTk4MDk1XzA1M19NSVhfTElORU9VVDEsIDIsIDEsIDApLAorfTsKKworLyogUmlnaHQgbGluZW91dCBtaXhlciBzd2l0Y2ggKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBtYXg5ODA5NV9yaWdodF9saW5lb3V0X21peGVyX2NvbnRyb2xzW10gPSB7CisJU09DX0RBUE1fU0lOR0xFKCJMZWZ0IERBQzEgU3dpdGNoIiwgTTk4MDk1XzA1NF9NSVhfTElORU9VVDIsIDAsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiUmlnaHQgREFDMSBTd2l0Y2giLCBNOTgwOTVfMDU0X01JWF9MSU5FT1VUMiwgNSwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJNSUMxIFN3aXRjaCIsIE05ODA5NV8wNTRfTUlYX0xJTkVPVVQyLCAzLCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIk1JQzIgU3dpdGNoIiwgTTk4MDk1XzA1NF9NSVhfTElORU9VVDIsIDQsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiSU4xIFN3aXRjaCIsIE05ODA5NV8wNTRfTUlYX0xJTkVPVVQyLCAxLCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIklOMiBTd2l0Y2giLCBNOTgwOTVfMDU0X01JWF9MSU5FT1VUMiwgMiwgMSwgMCksCit9OworCisvKiBMZWZ0IEFEQyBtaXhlciBzd2l0Y2ggKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBtYXg5ODA5NV9sZWZ0X0FEQ19taXhlcl9jb250cm9sc1tdID0geworCVNPQ19EQVBNX1NJTkdMRSgiTUlDMSBTd2l0Y2giLCBNOTgwOTVfMDRBX01JWF9BRENfTEVGVCwgNywgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJNSUMyIFN3aXRjaCIsIE05ODA5NV8wNEFfTUlYX0FEQ19MRUZULCA2LCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIklOMSBTd2l0Y2giLCBNOTgwOTVfMDRBX01JWF9BRENfTEVGVCwgMywgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJJTjIgU3dpdGNoIiwgTTk4MDk1XzA0QV9NSVhfQURDX0xFRlQsIDIsIDEsIDApLAorfTsKKworLyogUmlnaHQgQURDIG1peGVyIHN3aXRjaCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IG1heDk4MDk1X3JpZ2h0X0FEQ19taXhlcl9jb250cm9sc1tdID0geworCVNPQ19EQVBNX1NJTkdMRSgiTUlDMSBTd2l0Y2giLCBNOTgwOTVfMDRCX01JWF9BRENfUklHSFQsIDcsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiTUlDMiBTd2l0Y2giLCBNOTgwOTVfMDRCX01JWF9BRENfUklHSFQsIDYsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiSU4xIFN3aXRjaCIsIE05ODA5NV8wNEJfTUlYX0FEQ19SSUdIVCwgMywgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJJTjIgU3dpdGNoIiwgTTk4MDk1XzA0Ql9NSVhfQURDX1JJR0hULCAyLCAxLCAwKSwKK307CisKK3N0YXRpYyBpbnQgbWF4OTgwOTVfbWljX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJICAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCBtYXg5ODA5NV9wcml2ICptYXg5ODA5NSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgorCQlpZiAody0+cmVnID09IE05ODA5NV8wNUZfTFZMX01JQzEpIHsKKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIHctPnJlZywgTTk4MDk1X01JQ1BSRV9NQVNLLAorCQkJCSgxK21heDk4MDk1LT5taWMxcHJlKTw8TTk4MDk1X01JQ1BSRV9TSElGVCk7CisJCX0gZWxzZSB7CisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCB3LT5yZWcsIE05ODA5NV9NSUNQUkVfTUFTSywKKwkJCQkoMSttYXg5ODA5NS0+bWljMnByZSk8PE05ODA5NV9NSUNQUkVfU0hJRlQpOworCQl9CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1EOgorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCB3LT5yZWcsIE05ODA5NV9NSUNQUkVfTUFTSywgMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogVGhlIGxpbmUgaW5wdXRzIGFyZSBzdGVyZW8gaW5wdXRzIHdpdGggdGhlIGxlZnQgYW5kIHJpZ2h0CisgKiBjaGFubmVscyBzaGFyaW5nIGEgY29tbW9uIFBHQSBwb3dlciBjb250cm9sIHNpZ25hbC4KKyAqLworc3RhdGljIGludCBtYXg5ODA5NV9saW5lX3BnYShzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCSAgICAgaW50IGV2ZW50LCB1OCBjaGFubmVsKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCBtYXg5ODA5NV9wcml2ICptYXg5ODA5NSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXU4ICpzdGF0ZTsKKworCUJVR19PTighKChjaGFubmVsID09IDEpIHx8IChjaGFubmVsID09IDIpKSk7CisKKwlzdGF0ZSA9ICZtYXg5ODA5NS0+bGluX3N0YXRlOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgorCQkqc3RhdGUgfD0gY2hhbm5lbDsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgdy0+cmVnLAorCQkJKDEgPDwgdy0+c2hpZnQpLCAoMSA8PCB3LT5zaGlmdCkpOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNRDoKKwkJKnN0YXRlICY9IH5jaGFubmVsOworCQlpZiAoKnN0YXRlID09IDApIHsKKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIHctPnJlZywKKwkJCQkoMSA8PCB3LT5zaGlmdCksIDApOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1heDk4MDk1X3BnYV9pbjFfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQkJICAgc3RydWN0IHNuZF9rY29udHJvbCAqaywgaW50IGV2ZW50KQoreworCXJldHVybiBtYXg5ODA5NV9saW5lX3BnYSh3LCBldmVudCwgMSk7Cit9CisKK3N0YXRpYyBpbnQgbWF4OTgwOTVfcGdhX2luMl9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCQkgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprLCBpbnQgZXZlbnQpCit7CisJcmV0dXJuIG1heDk4MDk1X2xpbmVfcGdhKHcsIGV2ZW50LCAyKTsKK30KKworLyoKKyAqIFRoZSBzdGVyZW8gbGluZSBvdXQgbWl4ZXIgb3V0cHV0cyB0byB0d28gc3RlcmVvIGxpbmUgb3V0cy4KKyAqIFRoZSAybmQgcGFpciBoYXMgYSBzZXBhcmF0ZSBzZXQgb2YgZW5hYmxlcy4KKyAqLworc3RhdGljIGludCBtYXg5ODA5NV9saW5lb3V0X2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJICAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCB3LT5yZWcsCisJCQkoMSA8PCAody0+c2hpZnQrMikpLCAoMSA8PCAody0+c2hpZnQrMikpKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTUQ6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIHctPnJlZywKKwkJCSgxIDw8ICh3LT5zaGlmdCsyKSksIDApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IG1heDk4MDk1X2RhcG1fd2lkZ2V0c1tdID0geworCisJU05EX1NPQ19EQVBNX0FEQygiQURDTCIsICJIaUZpIENhcHR1cmUiLCBNOTgwOTVfMDkwX1BXUl9FTl9JTiwgMCwgMCksCisJU05EX1NPQ19EQVBNX0FEQygiQURDUiIsICJIaUZpIENhcHR1cmUiLCBNOTgwOTVfMDkwX1BXUl9FTl9JTiwgMSwgMCksCisKKwlTTkRfU09DX0RBUE1fREFDKCJEQUNMMSIsICJIaUZpIFBsYXliYWNrIiwKKwkJTTk4MDk1XzA5MV9QV1JfRU5fT1VULCAwLCAwKSwKKwlTTkRfU09DX0RBUE1fREFDKCJEQUNSMSIsICJIaUZpIFBsYXliYWNrIiwKKwkJTTk4MDk1XzA5MV9QV1JfRU5fT1VULCAxLCAwKSwKKwlTTkRfU09DX0RBUE1fREFDKCJEQUNNMiIsICJBdXggUGxheWJhY2siLAorCQlNOTgwOTVfMDkxX1BXUl9FTl9PVVQsIDIsIDApLAorCVNORF9TT0NfREFQTV9EQUMoIkRBQ00zIiwgIlZvaWNlIFBsYXliYWNrIiwKKwkJTTk4MDk1XzA5MV9QV1JfRU5fT1VULCAyLCAwKSwKKworCVNORF9TT0NfREFQTV9QR0EoIkhQIExlZnQgT3V0IiwgTTk4MDk1XzA5MV9QV1JfRU5fT1VULAorCQk2LCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJIUCBSaWdodCBPdXQiLCBNOTgwOTVfMDkxX1BXUl9FTl9PVVQsCisJCTcsIDAsIE5VTEwsIDApLAorCisJU05EX1NPQ19EQVBNX1BHQSgiU1BLIExlZnQgT3V0IiwgTTk4MDk1XzA5MV9QV1JfRU5fT1VULAorCQk0LCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJTUEsgUmlnaHQgT3V0IiwgTTk4MDk1XzA5MV9QV1JfRU5fT1VULAorCQk1LCAwLCBOVUxMLCAwKSwKKworCVNORF9TT0NfREFQTV9QR0EoIlJDViBNb25vIE91dCIsIE05ODA5NV8wOTFfUFdSX0VOX09VVCwKKwkJMywgMCwgTlVMTCwgMCksCisKKwlTTkRfU09DX0RBUE1fUEdBX0UoIkxJTkUgTGVmdCBPdXQiLCBNOTgwOTVfMDkyX1BXUl9FTl9PVVQsCisJCTAsIDAsIE5VTEwsIDAsIG1heDk4MDk1X2xpbmVvdXRfZXZlbnQsIFNORF9TT0NfREFQTV9QUkVfUE1EKSwKKwlTTkRfU09DX0RBUE1fUEdBX0UoIkxJTkUgUmlnaHQgT3V0IiwgTTk4MDk1XzA5Ml9QV1JfRU5fT1VULAorCQkxLCAwLCBOVUxMLCAwLCBtYXg5ODA5NV9saW5lb3V0X2V2ZW50LCBTTkRfU09DX0RBUE1fUFJFX1BNRCksCisKKwlTTkRfU09DX0RBUE1fTVVYKCJFeHRlcm5hbCBNSUMiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSZtYXg5ODA5NV9leHRtaWNfbXV4KSwKKworCVNORF9TT0NfREFQTV9NVVgoIkxpbmVpbiBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSZtYXg5ODA5NV9saW5laW5fbXV4KSwKKworCVNORF9TT0NfREFQTV9NSVhFUigiTGVmdCBIZWFkcGhvbmUgTWl4ZXIiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSZtYXg5ODA5NV9sZWZ0X2hwX21peGVyX2NvbnRyb2xzWzBdLAorCQlBUlJBWV9TSVpFKG1heDk4MDk1X2xlZnRfaHBfbWl4ZXJfY29udHJvbHMpKSwKKworCVNORF9TT0NfREFQTV9NSVhFUigiUmlnaHQgSGVhZHBob25lIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmbWF4OTgwOTVfcmlnaHRfaHBfbWl4ZXJfY29udHJvbHNbMF0sCisJCUFSUkFZX1NJWkUobWF4OTgwOTVfcmlnaHRfaHBfbWl4ZXJfY29udHJvbHMpKSwKKworCVNORF9TT0NfREFQTV9NSVhFUigiTGVmdCBTcGVha2VyIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmbWF4OTgwOTVfbGVmdF9zcGVha2VyX21peGVyX2NvbnRyb2xzWzBdLAorCQlBUlJBWV9TSVpFKG1heDk4MDk1X2xlZnRfc3BlYWtlcl9taXhlcl9jb250cm9scykpLAorCisJU05EX1NPQ19EQVBNX01JWEVSKCJSaWdodCBTcGVha2VyIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmbWF4OTgwOTVfcmlnaHRfc3BlYWtlcl9taXhlcl9jb250cm9sc1swXSwKKwkJQVJSQVlfU0laRShtYXg5ODA5NV9yaWdodF9zcGVha2VyX21peGVyX2NvbnRyb2xzKSksCisKKwlTTkRfU09DX0RBUE1fTUlYRVIoIlJlY2VpdmVyIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCSAgJm1heDk4MDk1X21vbm9fcmN2X21peGVyX2NvbnRyb2xzWzBdLAorCQlBUlJBWV9TSVpFKG1heDk4MDk1X21vbm9fcmN2X21peGVyX2NvbnRyb2xzKSksCisKKwlTTkRfU09DX0RBUE1fTUlYRVIoIkxlZnQgTGluZW91dCBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJJm1heDk4MDk1X2xlZnRfbGluZW91dF9taXhlcl9jb250cm9sc1swXSwKKwkJQVJSQVlfU0laRShtYXg5ODA5NV9sZWZ0X2xpbmVvdXRfbWl4ZXJfY29udHJvbHMpKSwKKworCVNORF9TT0NfREFQTV9NSVhFUigiUmlnaHQgTGluZW91dCBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJJm1heDk4MDk1X3JpZ2h0X2xpbmVvdXRfbWl4ZXJfY29udHJvbHNbMF0sCisJCUFSUkFZX1NJWkUobWF4OTgwOTVfcmlnaHRfbGluZW91dF9taXhlcl9jb250cm9scykpLAorCisJU05EX1NPQ19EQVBNX01JWEVSKCJMZWZ0IEFEQyBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJJm1heDk4MDk1X2xlZnRfQURDX21peGVyX2NvbnRyb2xzWzBdLAorCQlBUlJBWV9TSVpFKG1heDk4MDk1X2xlZnRfQURDX21peGVyX2NvbnRyb2xzKSksCisKKwlTTkRfU09DX0RBUE1fTUlYRVIoIlJpZ2h0IEFEQyBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJJm1heDk4MDk1X3JpZ2h0X0FEQ19taXhlcl9jb250cm9sc1swXSwKKwkJQVJSQVlfU0laRShtYXg5ODA5NV9yaWdodF9BRENfbWl4ZXJfY29udHJvbHMpKSwKKworCVNORF9TT0NfREFQTV9QR0FfRSgiTUlDMSBJbnB1dCIsIE05ODA5NV8wNUZfTFZMX01JQzEsCisJCTUsIDAsIE5VTEwsIDAsIG1heDk4MDk1X21pY19ldmVudCwKKwkJU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKKworCVNORF9TT0NfREFQTV9QR0FfRSgiTUlDMiBJbnB1dCIsIE05ODA5NV8wNjBfTFZMX01JQzIsCisJCTUsIDAsIE5VTEwsIDAsIG1heDk4MDk1X21pY19ldmVudCwKKwkJU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKKworCVNORF9TT0NfREFQTV9QR0FfRSgiSU4xIElucHV0IiwgTTk4MDk1XzA5MF9QV1JfRU5fSU4sCisJCTcsIDAsIE5VTEwsIDAsIG1heDk4MDk1X3BnYV9pbjFfZXZlbnQsCisJCVNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCksCisKKwlTTkRfU09DX0RBUE1fUEdBX0UoIklOMiBJbnB1dCIsIE05ODA5NV8wOTBfUFdSX0VOX0lOLAorCQk3LCAwLCBOVUxMLCAwLCBtYXg5ODA5NV9wZ2FfaW4yX2V2ZW50LAorCQlTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorCisJU05EX1NPQ19EQVBNX01JQ0JJQVMoIk1JQ0JJQVMxIiwgTTk4MDk1XzA5MF9QV1JfRU5fSU4sIDIsIDApLAorCVNORF9TT0NfREFQTV9NSUNCSUFTKCJNSUNCSUFTMiIsIE05ODA5NV8wOTBfUFdSX0VOX0lOLCAzLCAwKSwKKworCVNORF9TT0NfREFQTV9PVVRQVVQoIkhQTCIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIkhQUiIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIlNQS0wiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJTUEtSIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiUkNWIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiT1VUMSIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIk9VVDIiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJPVVQzIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiT1VUNCIpLAorCisJU05EX1NPQ19EQVBNX0lOUFVUKCJNSUMxIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJNSUMyIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJJTkExIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJJTkEyIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJJTkIxIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJJTkIyIiksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBtYXg5ODA5NV9hdWRpb19tYXBbXSA9IHsKKwkvKiBMZWZ0IGhlYWRwaG9uZSBvdXRwdXQgbWl4ZXIgKi8KKwl7IkxlZnQgSGVhZHBob25lIE1peGVyIiwgIkxlZnQgREFDMSBTd2l0Y2giLCAiREFDTDEifSwKKwl7IkxlZnQgSGVhZHBob25lIE1peGVyIiwgIlJpZ2h0IERBQzEgU3dpdGNoIiwgIkRBQ1IxIn0sCisJeyJMZWZ0IEhlYWRwaG9uZSBNaXhlciIsICJNSUMxIFN3aXRjaCIsICJNSUMxIElucHV0In0sCisJeyJMZWZ0IEhlYWRwaG9uZSBNaXhlciIsICJNSUMyIFN3aXRjaCIsICJNSUMyIElucHV0In0sCisJeyJMZWZ0IEhlYWRwaG9uZSBNaXhlciIsICJJTjEgU3dpdGNoIiwgIklOMSBJbnB1dCJ9LAorCXsiTGVmdCBIZWFkcGhvbmUgTWl4ZXIiLCAiSU4yIFN3aXRjaCIsICJJTjIgSW5wdXQifSwKKworCS8qIFJpZ2h0IGhlYWRwaG9uZSBvdXRwdXQgbWl4ZXIgKi8KKwl7IlJpZ2h0IEhlYWRwaG9uZSBNaXhlciIsICJMZWZ0IERBQzEgU3dpdGNoIiwgIkRBQ0wxIn0sCisJeyJSaWdodCBIZWFkcGhvbmUgTWl4ZXIiLCAiUmlnaHQgREFDMSBTd2l0Y2giLCAiREFDUjEifSwKKwl7IlJpZ2h0IEhlYWRwaG9uZSBNaXhlciIsICJNSUMxIFN3aXRjaCIsICJNSUMxIElucHV0In0sCisJeyJSaWdodCBIZWFkcGhvbmUgTWl4ZXIiLCAiTUlDMiBTd2l0Y2giLCAiTUlDMiBJbnB1dCJ9LAorCXsiUmlnaHQgSGVhZHBob25lIE1peGVyIiwgIklOMSBTd2l0Y2giLCAiSU4xIElucHV0In0sCisJeyJSaWdodCBIZWFkcGhvbmUgTWl4ZXIiLCAiSU4yIFN3aXRjaCIsICJJTjIgSW5wdXQifSwKKworCS8qIExlZnQgc3BlYWtlciBvdXRwdXQgbWl4ZXIgKi8KKwl7IkxlZnQgU3BlYWtlciBNaXhlciIsICJMZWZ0IERBQzEgU3dpdGNoIiwgIkRBQ0wxIn0sCisJeyJMZWZ0IFNwZWFrZXIgTWl4ZXIiLCAiUmlnaHQgREFDMSBTd2l0Y2giLCAiREFDUjEifSwKKwl7IkxlZnQgU3BlYWtlciBNaXhlciIsICJNb25vIERBQzIgU3dpdGNoIiwgIkRBQ00yIn0sCisJeyJMZWZ0IFNwZWFrZXIgTWl4ZXIiLCAiTW9ubyBEQUMzIFN3aXRjaCIsICJEQUNNMyJ9LAorCXsiTGVmdCBTcGVha2VyIE1peGVyIiwgIk1JQzEgU3dpdGNoIiwgIk1JQzEgSW5wdXQifSwKKwl7IkxlZnQgU3BlYWtlciBNaXhlciIsICJNSUMyIFN3aXRjaCIsICJNSUMyIElucHV0In0sCisJeyJMZWZ0IFNwZWFrZXIgTWl4ZXIiLCAiSU4xIFN3aXRjaCIsICJJTjEgSW5wdXQifSwKKwl7IkxlZnQgU3BlYWtlciBNaXhlciIsICJJTjIgU3dpdGNoIiwgIklOMiBJbnB1dCJ9LAorCisJLyogUmlnaHQgc3BlYWtlciBvdXRwdXQgbWl4ZXIgKi8KKwl7IlJpZ2h0IFNwZWFrZXIgTWl4ZXIiLCAiTGVmdCBEQUMxIFN3aXRjaCIsICJEQUNMMSJ9LAorCXsiUmlnaHQgU3BlYWtlciBNaXhlciIsICJSaWdodCBEQUMxIFN3aXRjaCIsICJEQUNSMSJ9LAorCXsiUmlnaHQgU3BlYWtlciBNaXhlciIsICJNb25vIERBQzIgU3dpdGNoIiwgIkRBQ00yIn0sCisJeyJSaWdodCBTcGVha2VyIE1peGVyIiwgIk1vbm8gREFDMyBTd2l0Y2giLCAiREFDTTMifSwKKwl7IlJpZ2h0IFNwZWFrZXIgTWl4ZXIiLCAiTUlDMSBTd2l0Y2giLCAiTUlDMSBJbnB1dCJ9LAorCXsiUmlnaHQgU3BlYWtlciBNaXhlciIsICJNSUMyIFN3aXRjaCIsICJNSUMyIElucHV0In0sCisJeyJSaWdodCBTcGVha2VyIE1peGVyIiwgIklOMSBTd2l0Y2giLCAiSU4xIElucHV0In0sCisJeyJSaWdodCBTcGVha2VyIE1peGVyIiwgIklOMiBTd2l0Y2giLCAiSU4yIElucHV0In0sCisKKwkvKiBFYXJwaWVjZS9SZWNlaXZlciBvdXRwdXQgbWl4ZXIgKi8KKwl7IlJlY2VpdmVyIE1peGVyIiwgIkxlZnQgREFDMSBTd2l0Y2giLCAiREFDTDEifSwKKwl7IlJlY2VpdmVyIE1peGVyIiwgIlJpZ2h0IERBQzEgU3dpdGNoIiwgIkRBQ1IxIn0sCisJeyJSZWNlaXZlciBNaXhlciIsICJNSUMxIFN3aXRjaCIsICJNSUMxIElucHV0In0sCisJeyJSZWNlaXZlciBNaXhlciIsICJNSUMyIFN3aXRjaCIsICJNSUMyIElucHV0In0sCisJeyJSZWNlaXZlciBNaXhlciIsICJJTjEgU3dpdGNoIiwgIklOMSBJbnB1dCJ9LAorCXsiUmVjZWl2ZXIgTWl4ZXIiLCAiSU4yIFN3aXRjaCIsICJJTjIgSW5wdXQifSwKKworCS8qIExlZnQgTGluZW91dCBvdXRwdXQgbWl4ZXIgKi8KKwl7IkxlZnQgTGluZW91dCBNaXhlciIsICJMZWZ0IERBQzEgU3dpdGNoIiwgIkRBQ0wxIn0sCisJeyJMZWZ0IExpbmVvdXQgTWl4ZXIiLCAiUmlnaHQgREFDMSBTd2l0Y2giLCAiREFDUjEifSwKKwl7IkxlZnQgTGluZW91dCBNaXhlciIsICJNSUMxIFN3aXRjaCIsICJNSUMxIElucHV0In0sCisJeyJMZWZ0IExpbmVvdXQgTWl4ZXIiLCAiTUlDMiBTd2l0Y2giLCAiTUlDMiBJbnB1dCJ9LAorCXsiTGVmdCBMaW5lb3V0IE1peGVyIiwgIklOMSBTd2l0Y2giLCAiSU4xIElucHV0In0sCisJeyJMZWZ0IExpbmVvdXQgTWl4ZXIiLCAiSU4yIFN3aXRjaCIsICJJTjIgSW5wdXQifSwKKworCS8qIFJpZ2h0IGxpbmVvdXQgb3V0cHV0IG1peGVyICovCisJeyJSaWdodCBMaW5lb3V0IE1peGVyIiwgIkxlZnQgREFDMSBTd2l0Y2giLCAiREFDTDEifSwKKwl7IlJpZ2h0IExpbmVvdXQgTWl4ZXIiLCAiUmlnaHQgREFDMSBTd2l0Y2giLCAiREFDUjEifSwKKwl7IlJpZ2h0IExpbmVvdXQgTWl4ZXIiLCAiTUlDMSBTd2l0Y2giLCAiTUlDMSBJbnB1dCJ9LAorCXsiUmlnaHQgTGluZW91dCBNaXhlciIsICJNSUMyIFN3aXRjaCIsICJNSUMyIElucHV0In0sCisJeyJSaWdodCBMaW5lb3V0IE1peGVyIiwgIklOMSBTd2l0Y2giLCAiSU4xIElucHV0In0sCisJeyJSaWdodCBMaW5lb3V0IE1peGVyIiwgIklOMiBTd2l0Y2giLCAiSU4yIElucHV0In0sCisKKwl7IkhQIExlZnQgT3V0IiwgTlVMTCwgIkxlZnQgSGVhZHBob25lIE1peGVyIn0sCisJeyJIUCBSaWdodCBPdXQiLCBOVUxMLCAiUmlnaHQgSGVhZHBob25lIE1peGVyIn0sCisJeyJTUEsgTGVmdCBPdXQiLCBOVUxMLCAiTGVmdCBTcGVha2VyIE1peGVyIn0sCisJeyJTUEsgUmlnaHQgT3V0IiwgTlVMTCwgIlJpZ2h0IFNwZWFrZXIgTWl4ZXIifSwKKwl7IlJDViBNb25vIE91dCIsIE5VTEwsICJSZWNlaXZlciBNaXhlciJ9LAorCXsiTElORSBMZWZ0IE91dCIsIE5VTEwsICJMZWZ0IExpbmVvdXQgTWl4ZXIifSwKKwl7IkxJTkUgUmlnaHQgT3V0IiwgTlVMTCwgIlJpZ2h0IExpbmVvdXQgTWl4ZXIifSwKKworCXsiSFBMIiwgTlVMTCwgIkhQIExlZnQgT3V0In0sCisJeyJIUFIiLCBOVUxMLCAiSFAgUmlnaHQgT3V0In0sCisJeyJTUEtMIiwgTlVMTCwgIlNQSyBMZWZ0IE91dCJ9LAorCXsiU1BLUiIsIE5VTEwsICJTUEsgUmlnaHQgT3V0In0sCisJeyJSQ1YiLCBOVUxMLCAiUkNWIE1vbm8gT3V0In0sCisJeyJPVVQxIiwgTlVMTCwgIkxJTkUgTGVmdCBPdXQifSwKKwl7Ik9VVDIiLCBOVUxMLCAiTElORSBSaWdodCBPdXQifSwKKwl7Ik9VVDMiLCBOVUxMLCAiTElORSBMZWZ0IE91dCJ9LAorCXsiT1VUNCIsIE5VTEwsICJMSU5FIFJpZ2h0IE91dCJ9LAorCisJLyogTGVmdCBBREMgaW5wdXQgbWl4ZXIgKi8KKwl7IkxlZnQgQURDIE1peGVyIiwgIk1JQzEgU3dpdGNoIiwgIk1JQzEgSW5wdXQifSwKKwl7IkxlZnQgQURDIE1peGVyIiwgIk1JQzIgU3dpdGNoIiwgIk1JQzIgSW5wdXQifSwKKwl7IkxlZnQgQURDIE1peGVyIiwgIklOMSBTd2l0Y2giLCAiSU4xIElucHV0In0sCisJeyJMZWZ0IEFEQyBNaXhlciIsICJJTjIgU3dpdGNoIiwgIklOMiBJbnB1dCJ9LAorCisJLyogUmlnaHQgQURDIGlucHV0IG1peGVyICovCisJeyJSaWdodCBBREMgTWl4ZXIiLCAiTUlDMSBTd2l0Y2giLCAiTUlDMSBJbnB1dCJ9LAorCXsiUmlnaHQgQURDIE1peGVyIiwgIk1JQzIgU3dpdGNoIiwgIk1JQzIgSW5wdXQifSwKKwl7IlJpZ2h0IEFEQyBNaXhlciIsICJJTjEgU3dpdGNoIiwgIklOMSBJbnB1dCJ9LAorCXsiUmlnaHQgQURDIE1peGVyIiwgIklOMiBTd2l0Y2giLCAiSU4yIElucHV0In0sCisKKwkvKiBJbnB1dHMgKi8KKwl7IkFEQ0wiLCBOVUxMLCAiTGVmdCBBREMgTWl4ZXIifSwKKwl7IkFEQ1IiLCBOVUxMLCAiUmlnaHQgQURDIE1peGVyIn0sCisKKwl7IklOMSBJbnB1dCIsIE5VTEwsICJJTkExIn0sCisJeyJJTjIgSW5wdXQiLCBOVUxMLCAiSU5BMiJ9LAorCisJeyJNSUMxIElucHV0IiwgTlVMTCwgIk1JQzEifSwKKwl7Ik1JQzIgSW5wdXQiLCBOVUxMLCAiTUlDMiJ9LAorfTsKKworc3RhdGljIGludCBtYXg5ODA5NV9hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIG1heDk4MDk1X3NuZF9jb250cm9scywKKwkJCSAgICAgQVJSQVlfU0laRShtYXg5ODA5NV9zbmRfY29udHJvbHMpKTsKKworCXJldHVybiAwOworfQorCisvKiBjb2RlYyBtY2xrIGNsb2NrIGRpdmlkZXIgY29lZmZpY2llbnRzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwl1MzIgcmF0ZTsKKwl1OCAgc3I7Cit9IHJhdGVfdGFibGVbXSA9IHsKKwl7ODAwMCwgIDB4MDF9LAorCXsxMTAyNSwgMHgwMn0sCisJezE2MDAwLCAweDAzfSwKKwl7MjIwNTAsIDB4MDR9LAorCXsyNDAwMCwgMHgwNX0sCisJezMyMDAwLCAweDA2fSwKKwl7NDQxMDAsIDB4MDd9LAorCXs0ODAwMCwgMHgwOH0sCisJezg4MjAwLCAweDA5fSwKKwl7OTYwMDAsIDB4MEF9LAorfTsKKworc3RhdGljIGludCByYXRlX3ZhbHVlKGludCByYXRlLCB1OCAqdmFsdWUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYXRlX3RhYmxlKTsgaSsrKSB7CisJCWlmIChyYXRlX3RhYmxlW2ldLnJhdGUgPj0gcmF0ZSkgeworCQkJKnZhbHVlID0gcmF0ZV90YWJsZVtpXS5zcjsKKwkJCXJldHVybiAwOworCQl9CisJfQorCSp2YWx1ZSA9IHJhdGVfdGFibGVbMF0uc3I7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgbWF4OTgwOTVfZGFpMV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkJICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3QgbWF4OTgwOTVfcHJpdiAqbWF4OTgwOTUgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlzdHJ1Y3QgbWF4OTgwOTVfY2RhdGEgKmNkYXRhOworCXVuc2lnbmVkIGxvbmcgbG9uZyBuaTsKKwl1bnNpZ25lZCBpbnQgcmF0ZTsKKwl1OCByZWd2YWw7CisKKwljZGF0YSA9ICZtYXg5ODA5NS0+ZGFpWzBdOworCisJcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CisKKwlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIE05ODA5NV8wMkFfREFJMV9GT1JNQVQsCisJCQlNOTgwOTVfREFJX1dTLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgTTk4MDk1XzAyQV9EQUkxX0ZPUk1BVCwKKwkJCU05ODA5NV9EQUlfV1MsIE05ODA5NV9EQUlfV1MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAocmF0ZV92YWx1ZShyYXRlLCAmcmVndmFsKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBNOTgwOTVfMDI3X0RBSTFfQ0xLTU9ERSwKKwkJTTk4MDk1X0NMS01PREVfTUFTSywgcmVndmFsKTsKKwljZGF0YS0+cmF0ZSA9IHJhdGU7CisKKwkvKiBDb25maWd1cmUgTkkgd2hlbiBvcGVyYXRpbmcgYXMgbWFzdGVyICovCisJaWYgKHNuZF9zb2NfcmVhZChjb2RlYywgTTk4MDk1XzAyQV9EQUkxX0ZPUk1BVCkgJiBNOTgwOTVfREFJX01BUykgeworCQlpZiAobWF4OTgwOTUtPnN5c2NsayA9PSAwKSB7CisJCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJJbnZhbGlkIHN5c3RlbSBjbG9jayBmcmVxdWVuY3lcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJbmkgPSA2NTUzNlVMTCAqIChyYXRlIDwgNTAwMDAgPyA5NlVMTCA6IDQ4VUxMKQorCQkJCSogKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpcmF0ZTsKKwkJZG9fZGl2KG5pLCAodW5zaWduZWQgbG9uZyBsb25nIGludCltYXg5ODA5NS0+c3lzY2xrKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgTTk4MDk1XzAyOF9EQUkxX0NMS0NGR19ISSwKKwkJCShuaSA+PiA4KSAmIDB4N0YpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBNOTgwOTVfMDI5X0RBSTFfQ0xLQ0ZHX0xPLAorCQkJbmkgJiAweEZGKTsKKwl9CisKKwkvKiBVcGRhdGUgc2FtcGxlIHJhdGUgbW9kZSAqLworCWlmIChyYXRlIDwgNTAwMDApCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIE05ODA5NV8wMkVfREFJMV9GSUxURVJTLAorCQkJTTk4MDk1X0RBSV9ESEYsIDApOworCWVsc2UKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgTTk4MDk1XzAyRV9EQUkxX0ZJTFRFUlMsCisJCQlNOTgwOTVfREFJX0RIRiwgTTk4MDk1X0RBSV9ESEYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWF4OTgwOTVfZGFpMl9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkJICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3QgbWF4OTgwOTVfcHJpdiAqbWF4OTgwOTUgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlzdHJ1Y3QgbWF4OTgwOTVfY2RhdGEgKmNkYXRhOworCXVuc2lnbmVkIGxvbmcgbG9uZyBuaTsKKwl1bnNpZ25lZCBpbnQgcmF0ZTsKKwl1OCByZWd2YWw7CisKKwljZGF0YSA9ICZtYXg5ODA5NS0+ZGFpWzFdOworCisJcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CisKKwlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIE05ODA5NV8wMzRfREFJMl9GT1JNQVQsCisJCQlNOTgwOTVfREFJX1dTLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgTTk4MDk1XzAzNF9EQUkyX0ZPUk1BVCwKKwkJCU05ODA5NV9EQUlfV1MsIE05ODA5NV9EQUlfV1MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAocmF0ZV92YWx1ZShyYXRlLCAmcmVndmFsKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBNOTgwOTVfMDMxX0RBSTJfQ0xLTU9ERSwKKwkJTTk4MDk1X0NMS01PREVfTUFTSywgcmVndmFsKTsKKwljZGF0YS0+cmF0ZSA9IHJhdGU7CisKKwkvKiBDb25maWd1cmUgTkkgd2hlbiBvcGVyYXRpbmcgYXMgbWFzdGVyICovCisJaWYgKHNuZF9zb2NfcmVhZChjb2RlYywgTTk4MDk1XzAzNF9EQUkyX0ZPUk1BVCkgJiBNOTgwOTVfREFJX01BUykgeworCQlpZiAobWF4OTgwOTUtPnN5c2NsayA9PSAwKSB7CisJCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJJbnZhbGlkIHN5c3RlbSBjbG9jayBmcmVxdWVuY3lcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJbmkgPSA2NTUzNlVMTCAqIChyYXRlIDwgNTAwMDAgPyA5NlVMTCA6IDQ4VUxMKQorCQkJCSogKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpcmF0ZTsKKwkJZG9fZGl2KG5pLCAodW5zaWduZWQgbG9uZyBsb25nIGludCltYXg5ODA5NS0+c3lzY2xrKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgTTk4MDk1XzAzMl9EQUkyX0NMS0NGR19ISSwKKwkJCShuaSA+PiA4KSAmIDB4N0YpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBNOTgwOTVfMDMzX0RBSTJfQ0xLQ0ZHX0xPLAorCQkJbmkgJiAweEZGKTsKKwl9CisKKwkvKiBVcGRhdGUgc2FtcGxlIHJhdGUgbW9kZSAqLworCWlmIChyYXRlIDwgNTAwMDApCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIE05ODA5NV8wMzhfREFJMl9GSUxURVJTLAorCQkJTTk4MDk1X0RBSV9ESEYsIDApOworCWVsc2UKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgTTk4MDk1XzAzOF9EQUkyX0ZJTFRFUlMsCisJCQlNOTgwOTVfREFJX0RIRiwgTTk4MDk1X0RBSV9ESEYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWF4OTgwOTVfZGFpM19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkJICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3QgbWF4OTgwOTVfcHJpdiAqbWF4OTgwOTUgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlzdHJ1Y3QgbWF4OTgwOTVfY2RhdGEgKmNkYXRhOworCXVuc2lnbmVkIGxvbmcgbG9uZyBuaTsKKwl1bnNpZ25lZCBpbnQgcmF0ZTsKKwl1OCByZWd2YWw7CisKKwljZGF0YSA9ICZtYXg5ODA5NS0+ZGFpWzJdOworCisJcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CisKKwlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIE05ODA5NV8wM0VfREFJM19GT1JNQVQsCisJCQlNOTgwOTVfREFJX1dTLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgTTk4MDk1XzAzRV9EQUkzX0ZPUk1BVCwKKwkJCU05ODA5NV9EQUlfV1MsIE05ODA5NV9EQUlfV1MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAocmF0ZV92YWx1ZShyYXRlLCAmcmVndmFsKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBNOTgwOTVfMDNCX0RBSTNfQ0xLTU9ERSwKKwkJTTk4MDk1X0NMS01PREVfTUFTSywgcmVndmFsKTsKKwljZGF0YS0+cmF0ZSA9IHJhdGU7CisKKwkvKiBDb25maWd1cmUgTkkgd2hlbiBvcGVyYXRpbmcgYXMgbWFzdGVyICovCisJaWYgKHNuZF9zb2NfcmVhZChjb2RlYywgTTk4MDk1XzAzRV9EQUkzX0ZPUk1BVCkgJiBNOTgwOTVfREFJX01BUykgeworCQlpZiAobWF4OTgwOTUtPnN5c2NsayA9PSAwKSB7CisJCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJJbnZhbGlkIHN5c3RlbSBjbG9jayBmcmVxdWVuY3lcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJbmkgPSA2NTUzNlVMTCAqIChyYXRlIDwgNTAwMDAgPyA5NlVMTCA6IDQ4VUxMKQorCQkJCSogKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpcmF0ZTsKKwkJZG9fZGl2KG5pLCAodW5zaWduZWQgbG9uZyBsb25nIGludCltYXg5ODA5NS0+c3lzY2xrKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgTTk4MDk1XzAzQ19EQUkzX0NMS0NGR19ISSwKKwkJCShuaSA+PiA4KSAmIDB4N0YpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBNOTgwOTVfMDNEX0RBSTNfQ0xLQ0ZHX0xPLAorCQkJbmkgJiAweEZGKTsKKwl9CisKKwkvKiBVcGRhdGUgc2FtcGxlIHJhdGUgbW9kZSAqLworCWlmIChyYXRlIDwgNTAwMDApCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIE05ODA5NV8wNDJfREFJM19GSUxURVJTLAorCQkJTTk4MDk1X0RBSV9ESEYsIDApOworCWVsc2UKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgTTk4MDk1XzA0Ml9EQUkzX0ZJTFRFUlMsCisJCQlNOTgwOTVfREFJX0RIRiwgTTk4MDk1X0RBSV9ESEYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWF4OTgwOTVfZGFpX3NldF9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCisJCQkJICAgaW50IGNsa19pZCwgdW5zaWduZWQgaW50IGZyZXEsIGludCBkaXIpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3QgbWF4OTgwOTVfcHJpdiAqbWF4OTgwOTUgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKworCS8qIFJlcXVlc3RlZCBjbG9jayBmcmVxdWVuY3kgaXMgYWxyZWFkeSBzZXR1cCAqLworCWlmIChmcmVxID09IG1heDk4MDk1LT5zeXNjbGspCisJCXJldHVybiAwOworCisJbWF4OTgwOTUtPnN5c2NsayA9IGZyZXE7IC8qIHJlbWVtYmVyIGN1cnJlbnQgc3lzY2xrICovCisKKwkvKiBTZXR1cCBjbG9ja3MgZm9yIHNsYXZlIG1vZGUsIGFuZCB1c2luZyB0aGUgUExMCisJICogUFNDTEsgPSAweDAxICh3aGVuIG1hc3RlciBjbGsgaXMgMTBNSHogdG8gMjBNSHopCisJICogICAgICAgICAweDAyICh3aGVuIG1hc3RlciBjbGsgaXMgMjBNSHogdG8gNDBNSHopLi4KKwkgKiAgICAgICAgIDB4MDMgKHdoZW4gbWFzdGVyIGNsayBpcyA0ME1IeiB0byA2ME1IeikuLgorCSAqLworCWlmICgoZnJlcSA+PSAxMDAwMDAwMCkgJiYgKGZyZXEgPCAyMDAwMDAwMCkpIHsKKwkJc25kX3NvY193cml0ZShjb2RlYywgTTk4MDk1XzAyNl9TWVNfQ0xLLCAweDEwKTsKKwl9IGVsc2UgaWYgKChmcmVxID49IDIwMDAwMDAwKSAmJiAoZnJlcSA8IDQwMDAwMDAwKSkgeworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBNOTgwOTVfMDI2X1NZU19DTEssIDB4MjApOworCX0gZWxzZSBpZiAoKGZyZXEgPj0gNDAwMDAwMDApICYmIChmcmVxIDwgNjAwMDAwMDApKSB7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIE05ODA5NV8wMjZfU1lTX0NMSywgMHgzMCk7CisJfSBlbHNlIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiSW52YWxpZCBtYXN0ZXIgY2xvY2sgZnJlcXVlbmN5XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2X2RiZyhkYWktPmRldiwgIkNsb2NrIHNvdXJjZSBpcyAlZCBhdCAldUh6XG4iLCBjbGtfaWQsIGZyZXEpOworCisJbWF4OTgwOTUtPnN5c2NsayA9IGZyZXE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWF4OTgwOTVfZGFpMV9zZXRfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAorCQkJCSB1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJc3RydWN0IG1heDk4MDk1X3ByaXYgKm1heDk4MDk1ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJc3RydWN0IG1heDk4MDk1X2NkYXRhICpjZGF0YTsKKwl1OCByZWd2YWwgPSAwOworCisJY2RhdGEgPSAmbWF4OTgwOTUtPmRhaVswXTsKKworCWlmIChmbXQgIT0gY2RhdGEtPmZtdCkgeworCQljZGF0YS0+Zm10ID0gZm10OworCisJCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgorCQkJLyogU2xhdmUgbW9kZSBQTEwgKi8KKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIE05ODA5NV8wMjhfREFJMV9DTEtDRkdfSEksCisJCQkJMHg4MCk7CisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBNOTgwOTVfMDI5X0RBSTFfQ0xLQ0ZHX0xPLAorCQkJCTB4MDApOworCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKKwkJCS8qIFNldCB0byBtYXN0ZXIgbW9kZSAqLworCQkJcmVndmFsIHw9IE05ODA5NV9EQUlfTUFTOworCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGTToKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZTOgorCQlkZWZhdWx0OgorCQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiQ2xvY2sgbW9kZSB1bnN1cHBvcnRlZCIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQkJcmVndmFsIHw9IE05ODA5NV9EQUlfRExZOworCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfSU5WX01BU0spIHsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjoKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX05CX0lGOgorCQkJcmVndmFsIHw9IE05ODA5NV9EQUlfV0NJOworCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfTkY6CisJCQlyZWd2YWwgfD0gTTk4MDk1X0RBSV9CQ0k7CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9JRjoKKwkJCXJlZ3ZhbCB8PSBNOTgwOTVfREFJX0JDSXxNOTgwOTVfREFJX1dDSTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBNOTgwOTVfMDJBX0RBSTFfRk9STUFULAorCQkJTTk4MDk1X0RBSV9NQVMgfCBNOTgwOTVfREFJX0RMWSB8IE05ODA5NV9EQUlfQkNJIHwKKwkJCU05ODA5NV9EQUlfV0NJLCByZWd2YWwpOworCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIE05ODA5NV8wMkJfREFJMV9DTE9DSywgTTk4MDk1X0RBSV9CU0VMNjQpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1heDk4MDk1X2RhaTJfc2V0X2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwKKwkJCQkgdW5zaWduZWQgaW50IGZtdCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXN0cnVjdCBtYXg5ODA5NV9wcml2ICptYXg5ODA5NSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCBtYXg5ODA5NV9jZGF0YSAqY2RhdGE7CisJdTggcmVndmFsID0gMDsKKworCWNkYXRhID0gJm1heDk4MDk1LT5kYWlbMV07CisKKwlpZiAoZm10ICE9IGNkYXRhLT5mbXQpIHsKKwkJY2RhdGEtPmZtdCA9IGZtdDsKKworCQlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKKwkJCS8qIFNsYXZlIG1vZGUgUExMICovCisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBNOTgwOTVfMDMyX0RBSTJfQ0xLQ0ZHX0hJLAorCQkJCTB4ODApOworCQkJc25kX3NvY193cml0ZShjb2RlYywgTTk4MDk1XzAzM19EQUkyX0NMS0NGR19MTywKKwkJCQkweDAwKTsKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCQkvKiBTZXQgdG8gbWFzdGVyIG1vZGUgKi8KKwkJCXJlZ3ZhbCB8PSBNOTgwOTVfREFJX01BUzsKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRk06CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGUzoKKwkJZGVmYXVsdDoKKwkJCWRldl9lcnIoY29kZWMtPmRldiwgIkNsb2NrIG1vZGUgdW5zdXBwb3J0ZWQiKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCQljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJCXJlZ3ZhbCB8PSBNOTgwOTVfREFJX0RMWTsKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9JRjoKKwkJCXJlZ3ZhbCB8PSBNOTgwOTVfREFJX1dDSTsKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX0lCX05GOgorCQkJcmVndmFsIHw9IE05ODA5NV9EQUlfQkNJOworCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfSUY6CisJCQlyZWd2YWwgfD0gTTk4MDk1X0RBSV9CQ0l8TTk4MDk1X0RBSV9XQ0k7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgTTk4MDk1XzAzNF9EQUkyX0ZPUk1BVCwKKwkJCU05ODA5NV9EQUlfTUFTIHwgTTk4MDk1X0RBSV9ETFkgfCBNOTgwOTVfREFJX0JDSSB8CisJCQlNOTgwOTVfREFJX1dDSSwgcmVndmFsKTsKKworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBNOTgwOTVfMDM1X0RBSTJfQ0xPQ0ssCisJCQlNOTgwOTVfREFJX0JTRUw2NCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWF4OTgwOTVfZGFpM19zZXRfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAorCQkJCSB1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJc3RydWN0IG1heDk4MDk1X3ByaXYgKm1heDk4MDk1ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJc3RydWN0IG1heDk4MDk1X2NkYXRhICpjZGF0YTsKKwl1OCByZWd2YWwgPSAwOworCisJY2RhdGEgPSAmbWF4OTgwOTUtPmRhaVsyXTsKKworCWlmIChmbXQgIT0gY2RhdGEtPmZtdCkgeworCQljZGF0YS0+Zm10ID0gZm10OworCisJCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgorCQkJLyogU2xhdmUgbW9kZSBQTEwgKi8KKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIE05ODA5NV8wM0NfREFJM19DTEtDRkdfSEksCisJCQkJMHg4MCk7CisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBNOTgwOTVfMDNEX0RBSTNfQ0xLQ0ZHX0xPLAorCQkJCTB4MDApOworCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKKwkJCS8qIFNldCB0byBtYXN0ZXIgbW9kZSAqLworCQkJcmVndmFsIHw9IE05ODA5NV9EQUlfTUFTOworCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGTToKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZTOgorCQlkZWZhdWx0OgorCQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiQ2xvY2sgbW9kZSB1bnN1cHBvcnRlZCIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQkJcmVndmFsIHw9IE05ODA5NV9EQUlfRExZOworCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfSU5WX01BU0spIHsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjoKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX05CX0lGOgorCQkJcmVndmFsIHw9IE05ODA5NV9EQUlfV0NJOworCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfTkY6CisJCQlyZWd2YWwgfD0gTTk4MDk1X0RBSV9CQ0k7CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9JRjoKKwkJCXJlZ3ZhbCB8PSBNOTgwOTVfREFJX0JDSXxNOTgwOTVfREFJX1dDSTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBNOTgwOTVfMDNFX0RBSTNfRk9STUFULAorCQkJTTk4MDk1X0RBSV9NQVMgfCBNOTgwOTVfREFJX0RMWSB8IE05ODA5NV9EQUlfQkNJIHwKKwkJCU05ODA5NV9EQUlfV0NJLCByZWd2YWwpOworCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIE05ODA5NV8wM0ZfREFJM19DTE9DSywKKwkJCU05ODA5NV9EQUlfQlNFTDY0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYXg5ODA5NV9zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJICAgZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCit7CisJaW50IHJldDsKKworCXN3aXRjaCAobGV2ZWwpIHsKKwljYXNlIFNORF9TT0NfQklBU19PTjoKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgorCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CisJCWlmIChjb2RlYy0+ZGFwbS5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKKwkJCXJldCA9IHNuZF9zb2NfY2FjaGVfc3luYyhjb2RlYyk7CisKKwkJCWlmIChyZXQgIT0gMCkgeworCQkJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBzeW5jIGNhY2hlOiAlZFxuIiwgcmV0KTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQl9CisKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgTTk4MDk1XzA5MF9QV1JfRU5fSU4sCisJCQkJTTk4MDk1X01CRU4sIE05ODA5NV9NQkVOKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19PRkY6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIE05ODA5NV8wOTBfUFdSX0VOX0lOLAorCQkJCU05ODA5NV9NQkVOLCAwKTsKKwkJY29kZWMtPmNhY2hlX3N5bmMgPSAxOworCQlicmVhazsKKwl9CisJY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9IGxldmVsOworCXJldHVybiAwOworfQorCisjZGVmaW5lIE1BWDk4MDk1X1JBVEVTIFNORFJWX1BDTV9SQVRFXzgwMDBfOTYwMDAKKyNkZWZpbmUgTUFYOTgwOTVfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSkKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgbWF4OTgwOTVfZGFpMV9vcHMgPSB7CisJLnNldF9zeXNjbGsgPSBtYXg5ODA5NV9kYWlfc2V0X3N5c2NsaywKKwkuc2V0X2ZtdCA9IG1heDk4MDk1X2RhaTFfc2V0X2ZtdCwKKwkuaHdfcGFyYW1zID0gbWF4OTgwOTVfZGFpMV9od19wYXJhbXMsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBtYXg5ODA5NV9kYWkyX29wcyA9IHsKKwkuc2V0X3N5c2NsayA9IG1heDk4MDk1X2RhaV9zZXRfc3lzY2xrLAorCS5zZXRfZm10ID0gbWF4OTgwOTVfZGFpMl9zZXRfZm10LAorCS5od19wYXJhbXMgPSBtYXg5ODA5NV9kYWkyX2h3X3BhcmFtcywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIG1heDk4MDk1X2RhaTNfb3BzID0geworCS5zZXRfc3lzY2xrID0gbWF4OTgwOTVfZGFpX3NldF9zeXNjbGssCisJLnNldF9mbXQgPSBtYXg5ODA5NV9kYWkzX3NldF9mbXQsCisJLmh3X3BhcmFtcyA9IG1heDk4MDk1X2RhaTNfaHdfcGFyYW1zLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9kcml2ZXIgbWF4OTgwOTVfZGFpW10gPSB7Cit7CisJLm5hbWUgPSAiSGlGaSIsCisJLnBsYXliYWNrID0geworCQkuc3RyZWFtX25hbWUgPSAiSGlGaSBQbGF5YmFjayIsCisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gTUFYOTgwOTVfUkFURVMsCisJCS5mb3JtYXRzID0gTUFYOTgwOTVfRk9STUFUUywKKwl9LAorCS5jYXB0dXJlID0geworCQkuc3RyZWFtX25hbWUgPSAiSGlGaSBDYXB0dXJlIiwKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBNQVg5ODA5NV9SQVRFUywKKwkJLmZvcm1hdHMgPSBNQVg5ODA5NV9GT1JNQVRTLAorCX0sCisJIC5vcHMgPSAmbWF4OTgwOTVfZGFpMV9vcHMsCit9LAoreworCS5uYW1lID0gIkF1eCIsCisJLnBsYXliYWNrID0geworCQkuc3RyZWFtX25hbWUgPSAiQXV4IFBsYXliYWNrIiwKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAxLAorCQkucmF0ZXMgPSBNQVg5ODA5NV9SQVRFUywKKwkJLmZvcm1hdHMgPSBNQVg5ODA5NV9GT1JNQVRTLAorCX0sCisJLm9wcyA9ICZtYXg5ODA5NV9kYWkyX29wcywKK30sCit7CisJLm5hbWUgPSAiVm9pY2UiLAorCS5wbGF5YmFjayA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIlZvaWNlIFBsYXliYWNrIiwKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAxLAorCQkucmF0ZXMgPSBNQVg5ODA5NV9SQVRFUywKKwkJLmZvcm1hdHMgPSBNQVg5ODA5NV9GT1JNQVRTLAorCX0sCisJLm9wcyA9ICZtYXg5ODA5NV9kYWkzX29wcywKK30KKworfTsKKworc3RhdGljIGludCBtYXg5ODA5NV9nZXRfZXFfY2hhbm5lbChjb25zdCBjaGFyICpuYW1lKQoreworCWlmIChzdHJjbXAobmFtZSwgIkVRMSBNb2RlIikgPT0gMCkKKwkJcmV0dXJuIDA7CisJaWYgKHN0cmNtcChuYW1lLCAiRVEyIE1vZGUiKSA9PSAwKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBtYXg5ODA5NV9wdXRfZXFfZW51bShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBtYXg5ODA5NV9wcml2ICptYXg5ODA5NSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCBtYXg5ODA5NV9wZGF0YSAqcGRhdGEgPSBtYXg5ODA5NS0+cGRhdGE7CisJaW50IGNoYW5uZWwgPSBtYXg5ODA5NV9nZXRfZXFfY2hhbm5lbChrY29udHJvbC0+aWQubmFtZSk7CisJc3RydWN0IG1heDk4MDk1X2NkYXRhICpjZGF0YTsKKwlpbnQgc2VsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisJc3RydWN0IG1heDk4MDk1X2VxX2NmZyAqY29lZl9zZXQ7CisJaW50IGZzLCBiZXN0LCBiZXN0X3ZhbCwgaTsKKwlpbnQgcmVnbWFzaywgcmVnc2F2ZTsKKworCUJVR19PTihjaGFubmVsID4gMSk7CisKKwlpZiAoIXBkYXRhIHx8ICFtYXg5ODA5NS0+ZXFfdGV4dGNudCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc2VsID49IHBkYXRhLT5lcV9jZmdjbnQpCisJCXJldHVybiAtRUlOVkFMOworCisJY2RhdGEgPSAmbWF4OTgwOTUtPmRhaVtjaGFubmVsXTsKKwljZGF0YS0+ZXFfc2VsID0gc2VsOworCWZzID0gY2RhdGEtPnJhdGU7CisKKwkvKiBGaW5kIHRoZSBzZWxlY3RlZCBjb25maWd1cmF0aW9uIHdpdGggbmVhcmVzdCBzYW1wbGUgcmF0ZSAqLworCWJlc3QgPSAwOworCWJlc3RfdmFsID0gSU5UX01BWDsKKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPmVxX2NmZ2NudDsgaSsrKSB7CisJCWlmIChzdHJjbXAocGRhdGEtPmVxX2NmZ1tpXS5uYW1lLCBtYXg5ODA5NS0+ZXFfdGV4dHNbc2VsXSkgPT0gMCAmJgorCQkJYWJzKHBkYXRhLT5lcV9jZmdbaV0ucmF0ZSAtIGZzKSA8IGJlc3RfdmFsKSB7CisJCQliZXN0ID0gaTsKKwkJCWJlc3RfdmFsID0gYWJzKHBkYXRhLT5lcV9jZmdbaV0ucmF0ZSAtIGZzKTsKKwkJfQorCX0KKworCWRldl9kYmcoY29kZWMtPmRldiwgIlNlbGVjdGVkICVzLyVkSHogZm9yICVkSHogc2FtcGxlIHJhdGVcbiIsCisJCXBkYXRhLT5lcV9jZmdbYmVzdF0ubmFtZSwKKwkJcGRhdGEtPmVxX2NmZ1tiZXN0XS5yYXRlLCBmcyk7CisKKwljb2VmX3NldCA9ICZwZGF0YS0+ZXFfY2ZnW2Jlc3RdOworCisJcmVnbWFzayA9IChjaGFubmVsID09IDApID8gTTk4MDk1X0VRMUVOIDogTTk4MDk1X0VRMkVOOworCisJLyogRGlzYWJsZSBmaWx0ZXIgd2hpbGUgY29uZmlndXJpbmcsIGFuZCBzYXZlIGN1cnJlbnQgb24vb2ZmIHN0YXRlICovCisJcmVnc2F2ZSA9IHNuZF9zb2NfcmVhZChjb2RlYywgTTk4MDk1XzA4OF9DRkdfTEVWRUwpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIE05ODA5NV8wODhfQ0ZHX0xFVkVMLCByZWdtYXNrLCAwKTsKKworCW11dGV4X2xvY2soJmNvZGVjLT5tdXRleCk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgTTk4MDk1XzAwRl9IT1NUX0NGRywgTTk4MDk1X1NFRywgTTk4MDk1X1NFRyk7CisJbTk4MDk1X2VxX2JhbmQoY29kZWMsIGNoYW5uZWwsIDAsIGNvZWZfc2V0LT5iYW5kMSk7CisJbTk4MDk1X2VxX2JhbmQoY29kZWMsIGNoYW5uZWwsIDEsIGNvZWZfc2V0LT5iYW5kMik7CisJbTk4MDk1X2VxX2JhbmQoY29kZWMsIGNoYW5uZWwsIDIsIGNvZWZfc2V0LT5iYW5kMyk7CisJbTk4MDk1X2VxX2JhbmQoY29kZWMsIGNoYW5uZWwsIDMsIGNvZWZfc2V0LT5iYW5kNCk7CisJbTk4MDk1X2VxX2JhbmQoY29kZWMsIGNoYW5uZWwsIDQsIGNvZWZfc2V0LT5iYW5kNSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgTTk4MDk1XzAwRl9IT1NUX0NGRywgTTk4MDk1X1NFRywgMCk7CisJbXV0ZXhfdW5sb2NrKCZjb2RlYy0+bXV0ZXgpOworCisJLyogUmVzdG9yZSB0aGUgb3JpZ2luYWwgb24vb2ZmIHN0YXRlICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgTTk4MDk1XzA4OF9DRkdfTEVWRUwsIHJlZ21hc2ssIHJlZ3NhdmUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1heDk4MDk1X2dldF9lcV9lbnVtKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IG1heDk4MDk1X3ByaXYgKm1heDk4MDk1ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJaW50IGNoYW5uZWwgPSBtYXg5ODA5NV9nZXRfZXFfY2hhbm5lbChrY29udHJvbC0+aWQubmFtZSk7CisJc3RydWN0IG1heDk4MDk1X2NkYXRhICpjZGF0YTsKKworCWNkYXRhID0gJm1heDk4MDk1LT5kYWlbY2hhbm5lbF07CisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGNkYXRhLT5lcV9zZWw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbWF4OTgwOTVfaGFuZGxlX2VxX3BkYXRhKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgbWF4OTgwOTVfcHJpdiAqbWF4OTgwOTUgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlzdHJ1Y3QgbWF4OTgwOTVfcGRhdGEgKnBkYXRhID0gbWF4OTgwOTUtPnBkYXRhOworCXN0cnVjdCBtYXg5ODA5NV9lcV9jZmcgKmNmZzsKKwl1bnNpZ25lZCBpbnQgY2ZnY250OworCWludCBpLCBqOworCWNvbnN0IGNoYXIgKip0OworCWludCByZXQ7CisKKwlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjb250cm9sc1tdID0geworCQlTT0NfRU5VTV9FWFQoIkVRMSBNb2RlIiwKKwkJCW1heDk4MDk1LT5lcV9lbnVtLAorCQkJbWF4OTgwOTVfZ2V0X2VxX2VudW0sCisJCQltYXg5ODA5NV9wdXRfZXFfZW51bSksCisJCVNPQ19FTlVNX0VYVCgiRVEyIE1vZGUiLAorCQkJbWF4OTgwOTUtPmVxX2VudW0sCisJCQltYXg5ODA5NV9nZXRfZXFfZW51bSwKKwkJCW1heDk4MDk1X3B1dF9lcV9lbnVtKSwKKwl9OworCisJY2ZnID0gcGRhdGEtPmVxX2NmZzsKKwljZmdjbnQgPSBwZGF0YS0+ZXFfY2ZnY250OworCisJLyogU2V0dXAgYW4gYXJyYXkgb2YgdGV4dHMgZm9yIHRoZSBlcXVhbGl6ZXIgZW51bS4KKwkgKiBUaGlzIGlzIGJhc2VkIG9uIE1hcmsgQnJvd24ncyBlcXVhbGl6ZXIgZHJpdmVyIGNvZGUuCisJICovCisJbWF4OTgwOTUtPmVxX3RleHRjbnQgPSAwOworCW1heDk4MDk1LT5lcV90ZXh0cyA9IE5VTEw7CisJZm9yIChpID0gMDsgaSA8IGNmZ2NudDsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCBtYXg5ODA5NS0+ZXFfdGV4dGNudDsgaisrKSB7CisJCQlpZiAoc3RyY21wKGNmZ1tpXS5uYW1lLCBtYXg5ODA5NS0+ZXFfdGV4dHNbal0pID09IDApCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaiAhPSBtYXg5ODA5NS0+ZXFfdGV4dGNudCkKKwkJCWNvbnRpbnVlOworCisJCS8qIEV4cGFuZCB0aGUgYXJyYXkgKi8KKwkJdCA9IGtyZWFsbG9jKG1heDk4MDk1LT5lcV90ZXh0cywKKwkJCSAgICAgc2l6ZW9mKGNoYXIgKikgKiAobWF4OTgwOTUtPmVxX3RleHRjbnQgKyAxKSwKKwkJCSAgICAgR0ZQX0tFUk5FTCk7CisJCWlmICh0ID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQkvKiBTdG9yZSB0aGUgbmV3IGVudHJ5ICovCisJCXRbbWF4OTgwOTUtPmVxX3RleHRjbnRdID0gY2ZnW2ldLm5hbWU7CisJCW1heDk4MDk1LT5lcV90ZXh0Y250Kys7CisJCW1heDk4MDk1LT5lcV90ZXh0cyA9IHQ7CisJfQorCisJLyogTm93IHBvaW50IHRoZSBzb2NfZW51bSB0byAudGV4dHMgYXJyYXkgaXRlbXMgKi8KKwltYXg5ODA5NS0+ZXFfZW51bS50ZXh0cyA9IG1heDk4MDk1LT5lcV90ZXh0czsKKwltYXg5ODA5NS0+ZXFfZW51bS5tYXggPSBtYXg5ODA5NS0+ZXFfdGV4dGNudDsKKworCXJldCA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBjb250cm9scywgQVJSQVlfU0laRShjb250cm9scykpOworCWlmIChyZXQgIT0gMCkKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIGFkZCBFUSBjb250cm9sOiAlZFxuIiwgcmV0KTsKK30KKworc3RhdGljIGludCBtYXg5ODA5NV9nZXRfYnFfY2hhbm5lbChjb25zdCBjaGFyICpuYW1lKQoreworCWlmIChzdHJjbXAobmFtZSwgIkJpcXVhZDEgTW9kZSIpID09IDApCisJCXJldHVybiAwOworCWlmIChzdHJjbXAobmFtZSwgIkJpcXVhZDIgTW9kZSIpID09IDApCisJCXJldHVybiAxOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IG1heDk4MDk1X3B1dF9icV9lbnVtKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IG1heDk4MDk1X3ByaXYgKm1heDk4MDk1ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJc3RydWN0IG1heDk4MDk1X3BkYXRhICpwZGF0YSA9IG1heDk4MDk1LT5wZGF0YTsKKwlpbnQgY2hhbm5lbCA9IG1heDk4MDk1X2dldF9icV9jaGFubmVsKGtjb250cm9sLT5pZC5uYW1lKTsKKwlzdHJ1Y3QgbWF4OTgwOTVfY2RhdGEgKmNkYXRhOworCWludCBzZWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKwlzdHJ1Y3QgbWF4OTgwOTVfYmlxdWFkX2NmZyAqY29lZl9zZXQ7CisJaW50IGZzLCBiZXN0LCBiZXN0X3ZhbCwgaTsKKwlpbnQgcmVnbWFzaywgcmVnc2F2ZTsKKworCUJVR19PTihjaGFubmVsID4gMSk7CisKKwlpZiAoIXBkYXRhIHx8ICFtYXg5ODA5NS0+YnFfdGV4dGNudCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc2VsID49IHBkYXRhLT5icV9jZmdjbnQpCisJCXJldHVybiAtRUlOVkFMOworCisJY2RhdGEgPSAmbWF4OTgwOTUtPmRhaVtjaGFubmVsXTsKKwljZGF0YS0+YnFfc2VsID0gc2VsOworCWZzID0gY2RhdGEtPnJhdGU7CisKKwkvKiBGaW5kIHRoZSBzZWxlY3RlZCBjb25maWd1cmF0aW9uIHdpdGggbmVhcmVzdCBzYW1wbGUgcmF0ZSAqLworCWJlc3QgPSAwOworCWJlc3RfdmFsID0gSU5UX01BWDsKKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPmJxX2NmZ2NudDsgaSsrKSB7CisJCWlmIChzdHJjbXAocGRhdGEtPmJxX2NmZ1tpXS5uYW1lLCBtYXg5ODA5NS0+YnFfdGV4dHNbc2VsXSkgPT0gMCAmJgorCQkJYWJzKHBkYXRhLT5icV9jZmdbaV0ucmF0ZSAtIGZzKSA8IGJlc3RfdmFsKSB7CisJCQliZXN0ID0gaTsKKwkJCWJlc3RfdmFsID0gYWJzKHBkYXRhLT5icV9jZmdbaV0ucmF0ZSAtIGZzKTsKKwkJfQorCX0KKworCWRldl9kYmcoY29kZWMtPmRldiwgIlNlbGVjdGVkICVzLyVkSHogZm9yICVkSHogc2FtcGxlIHJhdGVcbiIsCisJCXBkYXRhLT5icV9jZmdbYmVzdF0ubmFtZSwKKwkJcGRhdGEtPmJxX2NmZ1tiZXN0XS5yYXRlLCBmcyk7CisKKwljb2VmX3NldCA9ICZwZGF0YS0+YnFfY2ZnW2Jlc3RdOworCisJcmVnbWFzayA9IChjaGFubmVsID09IDApID8gTTk4MDk1X0JRMUVOIDogTTk4MDk1X0JRMkVOOworCisJLyogRGlzYWJsZSBmaWx0ZXIgd2hpbGUgY29uZmlndXJpbmcsIGFuZCBzYXZlIGN1cnJlbnQgb24vb2ZmIHN0YXRlICovCisJcmVnc2F2ZSA9IHNuZF9zb2NfcmVhZChjb2RlYywgTTk4MDk1XzA4OF9DRkdfTEVWRUwpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIE05ODA5NV8wODhfQ0ZHX0xFVkVMLCByZWdtYXNrLCAwKTsKKworCW11dGV4X2xvY2soJmNvZGVjLT5tdXRleCk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgTTk4MDk1XzAwRl9IT1NUX0NGRywgTTk4MDk1X1NFRywgTTk4MDk1X1NFRyk7CisJbTk4MDk1X2JpcXVhZF9iYW5kKGNvZGVjLCBjaGFubmVsLCAwLCBjb2VmX3NldC0+YmFuZDEpOworCW05ODA5NV9iaXF1YWRfYmFuZChjb2RlYywgY2hhbm5lbCwgMSwgY29lZl9zZXQtPmJhbmQyKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBNOTgwOTVfMDBGX0hPU1RfQ0ZHLCBNOTgwOTVfU0VHLCAwKTsKKwltdXRleF91bmxvY2soJmNvZGVjLT5tdXRleCk7CisKKwkvKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCBvbi9vZmYgc3RhdGUgKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBNOTgwOTVfMDg4X0NGR19MRVZFTCwgcmVnbWFzaywgcmVnc2F2ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWF4OTgwOTVfZ2V0X2JxX2VudW0oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3QgbWF4OTgwOTVfcHJpdiAqbWF4OTgwOTUgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlpbnQgY2hhbm5lbCA9IG1heDk4MDk1X2dldF9icV9jaGFubmVsKGtjb250cm9sLT5pZC5uYW1lKTsKKwlzdHJ1Y3QgbWF4OTgwOTVfY2RhdGEgKmNkYXRhOworCisJY2RhdGEgPSAmbWF4OTgwOTUtPmRhaVtjaGFubmVsXTsKKwl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gY2RhdGEtPmJxX3NlbDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtYXg5ODA5NV9oYW5kbGVfYnFfcGRhdGEoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBtYXg5ODA5NV9wcml2ICptYXg5ODA5NSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCBtYXg5ODA5NV9wZGF0YSAqcGRhdGEgPSBtYXg5ODA5NS0+cGRhdGE7CisJc3RydWN0IG1heDk4MDk1X2JpcXVhZF9jZmcgKmNmZzsKKwl1bnNpZ25lZCBpbnQgY2ZnY250OworCWludCBpLCBqOworCWNvbnN0IGNoYXIgKip0OworCWludCByZXQ7CisKKwlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjb250cm9sc1tdID0geworCQlTT0NfRU5VTV9FWFQoIkJpcXVhZDEgTW9kZSIsCisJCQltYXg5ODA5NS0+YnFfZW51bSwKKwkJCW1heDk4MDk1X2dldF9icV9lbnVtLAorCQkJbWF4OTgwOTVfcHV0X2JxX2VudW0pLAorCQlTT0NfRU5VTV9FWFQoIkJpcXVhZDIgTW9kZSIsCisJCQltYXg5ODA5NS0+YnFfZW51bSwKKwkJCW1heDk4MDk1X2dldF9icV9lbnVtLAorCQkJbWF4OTgwOTVfcHV0X2JxX2VudW0pLAorCX07CisKKwljZmcgPSBwZGF0YS0+YnFfY2ZnOworCWNmZ2NudCA9IHBkYXRhLT5icV9jZmdjbnQ7CisKKwkvKiBTZXR1cCBhbiBhcnJheSBvZiB0ZXh0cyBmb3IgdGhlIGJpcXVhZCBlbnVtLgorCSAqIFRoaXMgaXMgYmFzZWQgb24gTWFyayBCcm93bidzIGVxdWFsaXplciBkcml2ZXIgY29kZS4KKwkgKi8KKwltYXg5ODA5NS0+YnFfdGV4dGNudCA9IDA7CisJbWF4OTgwOTUtPmJxX3RleHRzID0gTlVMTDsKKwlmb3IgKGkgPSAwOyBpIDwgY2ZnY250OyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IG1heDk4MDk1LT5icV90ZXh0Y250OyBqKyspIHsKKwkJCWlmIChzdHJjbXAoY2ZnW2ldLm5hbWUsIG1heDk4MDk1LT5icV90ZXh0c1tqXSkgPT0gMCkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChqICE9IG1heDk4MDk1LT5icV90ZXh0Y250KQorCQkJY29udGludWU7CisKKwkJLyogRXhwYW5kIHRoZSBhcnJheSAqLworCQl0ID0ga3JlYWxsb2MobWF4OTgwOTUtPmJxX3RleHRzLAorCQkJICAgICBzaXplb2YoY2hhciAqKSAqIChtYXg5ODA5NS0+YnFfdGV4dGNudCArIDEpLAorCQkJICAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKHQgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCS8qIFN0b3JlIHRoZSBuZXcgZW50cnkgKi8KKwkJdFttYXg5ODA5NS0+YnFfdGV4dGNudF0gPSBjZmdbaV0ubmFtZTsKKwkJbWF4OTgwOTUtPmJxX3RleHRjbnQrKzsKKwkJbWF4OTgwOTUtPmJxX3RleHRzID0gdDsKKwl9CisKKwkvKiBOb3cgcG9pbnQgdGhlIHNvY19lbnVtIHRvIC50ZXh0cyBhcnJheSBpdGVtcyAqLworCW1heDk4MDk1LT5icV9lbnVtLnRleHRzID0gbWF4OTgwOTUtPmJxX3RleHRzOworCW1heDk4MDk1LT5icV9lbnVtLm1heCA9IG1heDk4MDk1LT5icV90ZXh0Y250OworCisJcmV0ID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIGNvbnRyb2xzLCBBUlJBWV9TSVpFKGNvbnRyb2xzKSk7CisJaWYgKHJldCAhPSAwKQorCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gYWRkIEJpcXVhZCBjb250cm9sOiAlZFxuIiwgcmV0KTsKK30KKworc3RhdGljIHZvaWQgbWF4OTgwOTVfaGFuZGxlX3BkYXRhKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgbWF4OTgwOTVfcHJpdiAqbWF4OTgwOTUgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlzdHJ1Y3QgbWF4OTgwOTVfcGRhdGEgKnBkYXRhID0gbWF4OTgwOTUtPnBkYXRhOworCXU4IHJlZ3ZhbCA9IDA7CisKKwlpZiAoIXBkYXRhKSB7CisJCWRldl9kYmcoY29kZWMtPmRldiwgIk5vIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogQ29uZmlndXJlIG1pYyBmb3IgYW5hbG9nL2RpZ2l0YWwgbWljIG1vZGUgKi8KKwlpZiAocGRhdGEtPmRpZ21pY19sZWZ0X21vZGUpCisJCXJlZ3ZhbCB8PSBNOTgwOTVfRElHTUlDX0w7CisKKwlpZiAocGRhdGEtPmRpZ21pY19yaWdodF9tb2RlKQorCQlyZWd2YWwgfD0gTTk4MDk1X0RJR01JQ19SOworCisJc25kX3NvY193cml0ZShjb2RlYywgTTk4MDk1XzA4N19DRkdfTUlDLCByZWd2YWwpOworCisJLyogQ29uZmlndXJlIGVxdWFsaXplcnMgKi8KKwlpZiAocGRhdGEtPmVxX2NmZ2NudCkKKwkJbWF4OTgwOTVfaGFuZGxlX2VxX3BkYXRhKGNvZGVjKTsKKworCS8qIENvbmZpZ3VyZSBiaS1xdWFkIGZpbHRlcnMgKi8KKwlpZiAocGRhdGEtPmJxX2NmZ2NudCkKKwkJbWF4OTgwOTVfaGFuZGxlX2JxX3BkYXRhKGNvZGVjKTsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBtYXg5ODA5NV9zdXNwZW5kKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCW1heDk4MDk1X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1heDk4MDk1X3Jlc3VtZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJbWF4OTgwOTVfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKKworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgbWF4OTgwOTVfc3VzcGVuZCBOVUxMCisjZGVmaW5lIG1heDk4MDk1X3Jlc3VtZSBOVUxMCisjZW5kaWYKKworc3RhdGljIGludCBtYXg5ODA5NV9yZXNldChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJaW50IGksIHJldDsKKworCS8qIEdyYWNlZnVsbHkgcmVzZXQgdGhlIERTUCBjb3JlIGFuZCB0aGUgY29kZWMgaGFyZHdhcmUKKwkgKiBpbiBhIHByb3BlciBzZXF1ZW5jZSAqLworCXJldCA9IHNuZF9zb2Nfd3JpdGUoY29kZWMsIE05ODA5NV8wMEZfSE9TVF9DRkcsIDApOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZXNldCBEU1A6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHNuZF9zb2Nfd3JpdGUoY29kZWMsIE05ODA5NV8wOTdfUFdSX1NZUywgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlc2V0IGNvZGVjOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBSZXNldCB0byBoYXJkd2FyZSBkZWZhdWx0IGZvciByZWdpc3RlcnMsIGFzIHRoZXJlIGlzIG5vdAorCSAqIGEgc29mdCByZXNldCBoYXJkd2FyZSBjb250cm9sIHJlZ2lzdGVyICovCisJZm9yIChpID0gTTk4MDk1XzAxMF9IT1NUX0lOVF9DRkc7IGkgPCBNOTgwOTVfUkVHX01BWF9DQUNIRUQ7IGkrKykgeworCQlyZXQgPSBzbmRfc29jX3dyaXRlKGNvZGVjLCBpLCBtYXg5ODA5NV9yZWdfZGVmW2ldKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZXNldDogJWRcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtYXg5ODA5NV9wcm9iZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IG1heDk4MDk1X3ByaXYgKm1heDk4MDk1ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJc3RydWN0IG1heDk4MDk1X2NkYXRhICpjZGF0YTsKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IHNuZF9zb2NfY29kZWNfc2V0X2NhY2hlX2lvKGNvZGVjLCA4LCA4LCBTTkRfU09DX0kyQyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBzZXQgY2FjaGUgSS9POiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiByZXNldCB0aGUgY29kZWMsIHRoZSBEU1AgY29yZSwgYW5kIGRpc2FibGUgYWxsIGludGVycnVwdHMgKi8KKwltYXg5ODA5NV9yZXNldChjb2RlYyk7CisKKwkvKiBpbml0aWFsaXplIHByaXZhdGUgZGF0YSAqLworCisJbWF4OTgwOTUtPnN5c2NsayA9ICh1bnNpZ25lZCktMTsKKwltYXg5ODA5NS0+ZXFfdGV4dGNudCA9IDA7CisJbWF4OTgwOTUtPmJxX3RleHRjbnQgPSAwOworCisJY2RhdGEgPSAmbWF4OTgwOTUtPmRhaVswXTsKKwljZGF0YS0+cmF0ZSA9ICh1bnNpZ25lZCktMTsKKwljZGF0YS0+Zm10ICA9ICh1bnNpZ25lZCktMTsKKwljZGF0YS0+ZXFfc2VsID0gMDsKKwljZGF0YS0+YnFfc2VsID0gMDsKKworCWNkYXRhID0gJm1heDk4MDk1LT5kYWlbMV07CisJY2RhdGEtPnJhdGUgPSAodW5zaWduZWQpLTE7CisJY2RhdGEtPmZtdCAgPSAodW5zaWduZWQpLTE7CisJY2RhdGEtPmVxX3NlbCA9IDA7CisJY2RhdGEtPmJxX3NlbCA9IDA7CisKKwljZGF0YSA9ICZtYXg5ODA5NS0+ZGFpWzJdOworCWNkYXRhLT5yYXRlID0gKHVuc2lnbmVkKS0xOworCWNkYXRhLT5mbXQgID0gKHVuc2lnbmVkKS0xOworCWNkYXRhLT5lcV9zZWwgPSAwOworCWNkYXRhLT5icV9zZWwgPSAwOworCisJbWF4OTgwOTUtPmxpbl9zdGF0ZSA9IDA7CisJbWF4OTgwOTUtPm1pYzFwcmUgPSAwOworCW1heDk4MDk1LT5taWMycHJlID0gMDsKKworCXJldCA9IHNuZF9zb2NfcmVhZChjb2RlYywgTTk4MDk1XzBGRl9SRVZfSUQpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWFkIGRldmljZSByZXZpc2lvbjogJWRcbiIsCisJCQlyZXQpOworCQlnb3RvIGVycl9hY2Nlc3M7CisJfQorCWRldl9pbmZvKGNvZGVjLT5kZXYsICJyZXZpc2lvbiAlY1xuIiwgcmV0ICsgJ0EnKTsKKworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIE05ODA5NV8wOTdfUFdSX1NZUywgTTk4MDk1X1BXUlNWKTsKKworCS8qIGluaXRpYWxpemUgcmVnaXN0ZXJzIGNhY2hlIHRvIGhhcmR3YXJlIGRlZmF1bHQgKi8KKwltYXg5ODA5NV9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCisJc25kX3NvY193cml0ZShjb2RlYywgTTk4MDk1XzA0OF9NSVhfREFDX0xSLAorCQlNOTgwOTVfREFJMUxfVE9fREFDTHxNOTgwOTVfREFJMVJfVE9fREFDUik7CisKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBNOTgwOTVfMDQ5X01JWF9EQUNfTSwKKwkJTTk4MDk1X0RBSTJNX1RPX0RBQ018TTk4MDk1X0RBSTNNX1RPX0RBQ00pOworCisJc25kX3NvY193cml0ZShjb2RlYywgTTk4MDk1XzA5Ml9QV1JfRU5fT1VULCBNOTgwOTVfU1BLX1NQUkVBRFNQRUNUUlVNKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBNOTgwOTVfMDQ1X0NGR19EU1AsIE05ODA5NV9EU1BOT1JNQUwpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIE05ODA5NV8wNEVfQ0ZHX0hQLCBNOTgwOTVfSFBOT1JNQUwpOworCisJc25kX3NvY193cml0ZShjb2RlYywgTTk4MDk1XzAyQ19EQUkxX0lPQ0ZHLAorCQlNOTgwOTVfUzFOT1JNQUx8TTk4MDk1X1NEQVRBKTsKKworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIE05ODA5NV8wMzZfREFJMl9JT0NGRywKKwkJTTk4MDk1X1MyTk9STUFMfE05ODA5NV9TREFUQSk7CisKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBNOTgwOTVfMDQwX0RBSTNfSU9DRkcsCisJCU05ODA5NV9TM05PUk1BTHxNOTgwOTVfU0RBVEEpOworCisJbWF4OTgwOTVfaGFuZGxlX3BkYXRhKGNvZGVjKTsKKworCS8qIHRha2UgdGhlIGNvZGVjIG91dCBvZiB0aGUgc2h1dCBkb3duICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgTTk4MDk1XzA5N19QV1JfU1lTLCBNOTgwOTVfU0hETlJVTiwKKwkJTTk4MDk1X1NIRE5SVU4pOworCisJbWF4OTgwOTVfYWRkX3dpZGdldHMoY29kZWMpOworCitlcnJfYWNjZXNzOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbWF4OTgwOTVfcmVtb3ZlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwltYXg5ODA5NV9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RyaXZlciBzb2NfY29kZWNfZGV2X21heDk4MDk1ID0geworCS5wcm9iZSAgID0gbWF4OTgwOTVfcHJvYmUsCisJLnJlbW92ZSAgPSBtYXg5ODA5NV9yZW1vdmUsCisJLnN1c3BlbmQgPSBtYXg5ODA5NV9zdXNwZW5kLAorCS5yZXN1bWUgID0gbWF4OTgwOTVfcmVzdW1lLAorCS5zZXRfYmlhc19sZXZlbCA9IG1heDk4MDk1X3NldF9iaWFzX2xldmVsLAorCS5yZWdfY2FjaGVfc2l6ZSA9IEFSUkFZX1NJWkUobWF4OTgwOTVfcmVnX2RlZiksCisJLnJlZ193b3JkX3NpemUgPSBzaXplb2YodTgpLAorCS5yZWdfY2FjaGVfZGVmYXVsdCA9IG1heDk4MDk1X3JlZ19kZWYsCisJLnJlYWRhYmxlX3JlZ2lzdGVyID0gbWF4OTgwOTVfcmVhZGFibGUsCisJLnZvbGF0aWxlX3JlZ2lzdGVyID0gbWF4OTgwOTVfdm9sYXRpbGUsCisJLmRhcG1fd2lkZ2V0cwkgID0gbWF4OTgwOTVfZGFwbV93aWRnZXRzLAorCS5udW1fZGFwbV93aWRnZXRzID0gQVJSQVlfU0laRShtYXg5ODA5NV9kYXBtX3dpZGdldHMpLAorCS5kYXBtX3JvdXRlcyAgICAgPSBtYXg5ODA5NV9hdWRpb19tYXAsCisJLm51bV9kYXBtX3JvdXRlcyA9IEFSUkFZX1NJWkUobWF4OTgwOTVfYXVkaW9fbWFwKSwKK307CisKK3N0YXRpYyBpbnQgbWF4OTgwOTVfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgbWF4OTgwOTVfcHJpdiAqbWF4OTgwOTU7CisJaW50IHJldDsKKworCW1heDk4MDk1ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1heDk4MDk1X3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAobWF4OTgwOTUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltYXg5ODA5NS0+ZGV2dHlwZSA9IGlkLT5kcml2ZXJfZGF0YTsKKwlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBtYXg5ODA5NSk7CisJbWF4OTgwOTUtPmNvbnRyb2xfZGF0YSA9IGkyYzsKKwltYXg5ODA5NS0+cGRhdGEgPSBpMmMtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYygmaTJjLT5kZXYsCisJCQkmc29jX2NvZGVjX2Rldl9tYXg5ODA5NSwgJm1heDk4MDk1X2RhaVswXSwgMyk7CisJaWYgKHJldCA8IDApCisJCWtmcmVlKG1heDk4MDk1KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBtYXg5ODA5NV9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZjbGllbnQtPmRldik7CisJa2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBtYXg5ODA5NV9pMmNfaWRbXSA9IHsKKwl7ICJtYXg5ODA5NSIsIE1BWDk4MDk1IH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIG1heDk4MDk1X2kyY19pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBtYXg5ODA5NV9pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm1heDk4MDk1IiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgID0gbWF4OTgwOTVfaTJjX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChtYXg5ODA5NV9pMmNfcmVtb3ZlKSwKKwkuaWRfdGFibGUgPSBtYXg5ODA5NV9pMmNfaWQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtYXg5ODA5NV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IGkyY19hZGRfZHJpdmVyKCZtYXg5ODA5NV9pMmNfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlwcl9lcnIoIkZhaWxlZCB0byByZWdpc3RlciBtYXg5ODA5NSBJMkMgZHJpdmVyOiAlZFxuIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9Cittb2R1bGVfaW5pdChtYXg5ODA5NV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IG1heDk4MDk1X2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmbWF4OTgwOTVfaTJjX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChtYXg5ODA5NV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIFNvQyBNQVg5ODA5NSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIlBldGVyIEhzaWFuZyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9tYXg5ODA5NS5oIGIvc291bmQvc29jL2NvZGVjcy9tYXg5ODA5NS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MTU4NGEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL21heDk4MDk1LmgKQEAgLTAsMCArMSwyOTkgQEAKKy8qCisgKiBtYXg5ODA5NS5oIC0tIE1BWDk4MDk1IEFMU0EgU29DIEF1ZGlvIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDExIE1heGltIEludGVncmF0ZWQgUHJvZHVjdHMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX01BWDk4MDk1X0gKKyNkZWZpbmUgX01BWDk4MDk1X0gKKworLyoKKyAqIE1BWDk4MDk1IFJlZ2lzdGVycyBEZWZpbml0aW9uCisgKi8KKworI2RlZmluZSBNOTgwOTVfMDAwX0hPU1RfREFUQSAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIE05ODA5NV8wMDFfSE9TVF9JTlRfU1RTICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgTTk4MDk1XzAwMl9IT1NUX1JTUF9TVFMgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBNOTgwOTVfMDAzX0hPU1RfQ01EX1NUUyAgICAgICAgICAgICAweDAzCisjZGVmaW5lIE05ODA5NV8wMDRfQ09ERUNfU1RTICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgTTk4MDk1XzAwNV9EQUkxX0FMQ19TVFMgICAgICAgICAgICAgMHgwNQorI2RlZmluZSBNOTgwOTVfMDA2X0RBSTJfQUxDX1NUUyAgICAgICAgICAgICAweDA2CisjZGVmaW5lIE05ODA5NV8wMDdfSkFDS19BVVRPX1NUUyAgICAgICAgICAgIDB4MDcKKyNkZWZpbmUgTTk4MDk1XzAwOF9KQUNLX01BTlVBTF9TVFMgICAgICAgICAgMHgwOAorI2RlZmluZSBNOTgwOTVfMDA5X0pBQ0tfVkJBVF9TVFMgICAgICAgICAgICAweDA5CisjZGVmaW5lIE05ODA5NV8wMEFfQUNDX0FEQ19TVFMgICAgICAgICAgICAgIDB4MEEKKyNkZWZpbmUgTTk4MDk1XzAwQl9NSUNfTkdfQUdDX1NUUyAgICAgICAgICAgMHgwQgorI2RlZmluZSBNOTgwOTVfMDBDX1NQS19MX1ZPTFRfU1RTICAgICAgICAgICAweDBDCisjZGVmaW5lIE05ODA5NV8wMERfU1BLX1JfVk9MVF9TVFMgICAgICAgICAgIDB4MEQKKyNkZWZpbmUgTTk4MDk1XzAwRV9URU1QX1NFTlNPUl9TVFMgICAgICAgICAgMHgwRQorI2RlZmluZSBNOTgwOTVfMDBGX0hPU1RfQ0ZHICAgICAgICAgICAgICAgICAweDBGCisjZGVmaW5lIE05ODA5NV8wMTBfSE9TVF9JTlRfQ0ZHICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgTTk4MDk1XzAxMV9IT1NUX0lOVF9FTiAgICAgICAgICAgICAgMHgxMQorI2RlZmluZSBNOTgwOTVfMDEyX0NPREVDX0lOVF9FTiAgICAgICAgICAgICAweDEyCisjZGVmaW5lIE05ODA5NV8wMTNfSkFDS19JTlRfRU4gICAgICAgICAgICAgIDB4MTMKKyNkZWZpbmUgTTk4MDk1XzAxNF9KQUNLX0lOVF9FTiAgICAgICAgICAgICAgMHgxNAorI2RlZmluZSBNOTgwOTVfMDE1X0RFQyAgICAgICAgICAgICAgICAgICAgICAweDE1CisjZGVmaW5lIE05ODA5NV8wMTZfUkVTRVJWRUQgICAgICAgICAgICAgICAgIDB4MTYKKyNkZWZpbmUgTTk4MDk1XzAxN19SRVNFUlZFRCAgICAgICAgICAgICAgICAgMHgxNworI2RlZmluZSBNOTgwOTVfMDE4X0tFWUNPREUzICAgICAgICAgICAgICAgICAweDE4CisjZGVmaW5lIE05ODA5NV8wMTlfS0VZQ09ERTIgICAgICAgICAgICAgICAgIDB4MTkKKyNkZWZpbmUgTTk4MDk1XzAxQV9LRVlDT0RFMSAgICAgICAgICAgICAgICAgMHgxQQorI2RlZmluZSBNOTgwOTVfMDFCX0tFWUNPREUwICAgICAgICAgICAgICAgICAweDFCCisjZGVmaW5lIE05ODA5NV8wMUNfT0VNQ09ERTEgICAgICAgICAgICAgICAgIDB4MUMKKyNkZWZpbmUgTTk4MDk1XzAxRF9PRU1DT0RFMCAgICAgICAgICAgICAgICAgMHgxRAorI2RlZmluZSBNOTgwOTVfMDFFX1hDRkcxICAgICAgICAgICAgICAgICAgICAweDFFCisjZGVmaW5lIE05ODA5NV8wMUZfWENGRzIgICAgICAgICAgICAgICAgICAgIDB4MUYKKyNkZWZpbmUgTTk4MDk1XzAyMF9YQ0ZHMyAgICAgICAgICAgICAgICAgICAgMHgyMAorI2RlZmluZSBNOTgwOTVfMDIxX1hDRkc0ICAgICAgICAgICAgICAgICAgICAweDIxCisjZGVmaW5lIE05ODA5NV8wMjJfWENGRzUgICAgICAgICAgICAgICAgICAgIDB4MjIKKyNkZWZpbmUgTTk4MDk1XzAyM19YQ0ZHNiAgICAgICAgICAgICAgICAgICAgMHgyMworI2RlZmluZSBNOTgwOTVfMDI0X1hHUElPICAgICAgICAgICAgICAgICAgICAweDI0CisjZGVmaW5lIE05ODA5NV8wMjVfWENMS0NGRyAgICAgICAgICAgICAgICAgIDB4MjUKKyNkZWZpbmUgTTk4MDk1XzAyNl9TWVNfQ0xLICAgICAgICAgICAgICAgICAgMHgyNgorI2RlZmluZSBNOTgwOTVfMDI3X0RBSTFfQ0xLTU9ERSAgICAgICAgICAgICAweDI3CisjZGVmaW5lIE05ODA5NV8wMjhfREFJMV9DTEtDRkdfSEkgICAgICAgICAgIDB4MjgKKyNkZWZpbmUgTTk4MDk1XzAyOV9EQUkxX0NMS0NGR19MTyAgICAgICAgICAgMHgyOQorI2RlZmluZSBNOTgwOTVfMDJBX0RBSTFfRk9STUFUICAgICAgICAgICAgICAweDJBCisjZGVmaW5lIE05ODA5NV8wMkJfREFJMV9DTE9DSyAgICAgICAgICAgICAgIDB4MkIKKyNkZWZpbmUgTTk4MDk1XzAyQ19EQUkxX0lPQ0ZHICAgICAgICAgICAgICAgMHgyQworI2RlZmluZSBNOTgwOTVfMDJEX0RBSTFfVERNICAgICAgICAgICAgICAgICAweDJECisjZGVmaW5lIE05ODA5NV8wMkVfREFJMV9GSUxURVJTICAgICAgICAgICAgIDB4MkUKKyNkZWZpbmUgTTk4MDk1XzAyRl9EQUkxX0xWTDEgICAgICAgICAgICAgICAgMHgyRgorI2RlZmluZSBNOTgwOTVfMDMwX0RBSTFfTFZMMiAgICAgICAgICAgICAgICAweDMwCisjZGVmaW5lIE05ODA5NV8wMzFfREFJMl9DTEtNT0RFICAgICAgICAgICAgIDB4MzEKKyNkZWZpbmUgTTk4MDk1XzAzMl9EQUkyX0NMS0NGR19ISSAgICAgICAgICAgMHgzMgorI2RlZmluZSBNOTgwOTVfMDMzX0RBSTJfQ0xLQ0ZHX0xPICAgICAgICAgICAweDMzCisjZGVmaW5lIE05ODA5NV8wMzRfREFJMl9GT1JNQVQgICAgICAgICAgICAgIDB4MzQKKyNkZWZpbmUgTTk4MDk1XzAzNV9EQUkyX0NMT0NLICAgICAgICAgICAgICAgMHgzNQorI2RlZmluZSBNOTgwOTVfMDM2X0RBSTJfSU9DRkcgICAgICAgICAgICAgICAweDM2CisjZGVmaW5lIE05ODA5NV8wMzdfREFJMl9URE0gICAgICAgICAgICAgICAgIDB4MzcKKyNkZWZpbmUgTTk4MDk1XzAzOF9EQUkyX0ZJTFRFUlMgICAgICAgICAgICAgMHgzOAorI2RlZmluZSBNOTgwOTVfMDM5X0RBSTJfTFZMMSAgICAgICAgICAgICAgICAweDM5CisjZGVmaW5lIE05ODA5NV8wM0FfREFJMl9MVkwyICAgICAgICAgICAgICAgIDB4M0EKKyNkZWZpbmUgTTk4MDk1XzAzQl9EQUkzX0NMS01PREUgICAgICAgICAgICAgMHgzQgorI2RlZmluZSBNOTgwOTVfMDNDX0RBSTNfQ0xLQ0ZHX0hJICAgICAgICAgICAweDNDCisjZGVmaW5lIE05ODA5NV8wM0RfREFJM19DTEtDRkdfTE8gICAgICAgICAgIDB4M0QKKyNkZWZpbmUgTTk4MDk1XzAzRV9EQUkzX0ZPUk1BVCAgICAgICAgICAgICAgMHgzRQorI2RlZmluZSBNOTgwOTVfMDNGX0RBSTNfQ0xPQ0sgICAgICAgICAgICAgICAweDNGCisjZGVmaW5lIE05ODA5NV8wNDBfREFJM19JT0NGRyAgICAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgTTk4MDk1XzA0MV9EQUkzX1RETSAgICAgICAgICAgICAgICAgMHg0MQorI2RlZmluZSBNOTgwOTVfMDQyX0RBSTNfRklMVEVSUyAgICAgICAgICAgICAweDQyCisjZGVmaW5lIE05ODA5NV8wNDNfREFJM19MVkwxICAgICAgICAgICAgICAgIDB4NDMKKyNkZWZpbmUgTTk4MDk1XzA0NF9EQUkzX0xWTDIgICAgICAgICAgICAgICAgMHg0NAorI2RlZmluZSBNOTgwOTVfMDQ1X0NGR19EU1AgICAgICAgICAgICAgICAgICAweDQ1CisjZGVmaW5lIE05ODA5NV8wNDZfREFDX0NUUkwxICAgICAgICAgICAgICAgIDB4NDYKKyNkZWZpbmUgTTk4MDk1XzA0N19EQUNfQ1RSTDIgICAgICAgICAgICAgICAgMHg0NworI2RlZmluZSBNOTgwOTVfMDQ4X01JWF9EQUNfTFIgICAgICAgICAgICAgICAweDQ4CisjZGVmaW5lIE05ODA5NV8wNDlfTUlYX0RBQ19NICAgICAgICAgICAgICAgIDB4NDkKKyNkZWZpbmUgTTk4MDk1XzA0QV9NSVhfQURDX0xFRlQgICAgICAgICAgICAgMHg0QQorI2RlZmluZSBNOTgwOTVfMDRCX01JWF9BRENfUklHSFQgICAgICAgICAgICAweDRCCisjZGVmaW5lIE05ODA5NV8wNENfTUlYX0hQX0xFRlQgICAgICAgICAgICAgIDB4NEMKKyNkZWZpbmUgTTk4MDk1XzA0RF9NSVhfSFBfUklHSFQgICAgICAgICAgICAgMHg0RAorI2RlZmluZSBNOTgwOTVfMDRFX0NGR19IUCAgICAgICAgICAgICAgICAgICAweDRFCisjZGVmaW5lIE05ODA5NV8wNEZfTUlYX1JDViAgICAgICAgICAgICAgICAgIDB4NEYKKyNkZWZpbmUgTTk4MDk1XzA1MF9NSVhfU1BLX0xFRlQgICAgICAgICAgICAgMHg1MAorI2RlZmluZSBNOTgwOTVfMDUxX01JWF9TUEtfUklHSFQgICAgICAgICAgICAweDUxCisjZGVmaW5lIE05ODA5NV8wNTJfTUlYX1NQS19DRkcgICAgICAgICAgICAgIDB4NTIKKyNkZWZpbmUgTTk4MDk1XzA1M19NSVhfTElORU9VVDEgICAgICAgICAgICAgMHg1MworI2RlZmluZSBNOTgwOTVfMDU0X01JWF9MSU5FT1VUMiAgICAgICAgICAgICAweDU0CisjZGVmaW5lIE05ODA5NV8wNTVfTUlYX0xJTkVPVVRfQ0ZHICAgICAgICAgIDB4NTUKKyNkZWZpbmUgTTk4MDk1XzA1Nl9MVkxfU0lERVRPTkVfREFJMTIgICAgICAgMHg1NgorI2RlZmluZSBNOTgwOTVfMDU3X0xWTF9TSURFVE9ORV9EQUkzICAgICAgICAweDU3CisjZGVmaW5lIE05ODA5NV8wNThfTFZMX0RBSTFfUExBWSAgICAgICAgICAgIDB4NTgKKyNkZWZpbmUgTTk4MDk1XzA1OV9MVkxfREFJMV9FUSAgICAgICAgICAgICAgMHg1OQorI2RlZmluZSBNOTgwOTVfMDVBX0xWTF9EQUkyX1BMQVkgICAgICAgICAgICAweDVBCisjZGVmaW5lIE05ODA5NV8wNUJfTFZMX0RBSTJfRVEgICAgICAgICAgICAgIDB4NUIKKyNkZWZpbmUgTTk4MDk1XzA1Q19MVkxfREFJM19QTEFZICAgICAgICAgICAgMHg1QworI2RlZmluZSBNOTgwOTVfMDVEX0xWTF9BRENfTCAgICAgICAgICAgICAgICAweDVECisjZGVmaW5lIE05ODA5NV8wNUVfTFZMX0FEQ19SICAgICAgICAgICAgICAgIDB4NUUKKyNkZWZpbmUgTTk4MDk1XzA1Rl9MVkxfTUlDMSAgICAgICAgICAgICAgICAgMHg1RgorI2RlZmluZSBNOTgwOTVfMDYwX0xWTF9NSUMyICAgICAgICAgICAgICAgICAweDYwCisjZGVmaW5lIE05ODA5NV8wNjFfTFZMX0xJTkVJTiAgICAgICAgICAgICAgIDB4NjEKKyNkZWZpbmUgTTk4MDk1XzA2Ml9MVkxfTElORU9VVDEgICAgICAgICAgICAgMHg2MgorI2RlZmluZSBNOTgwOTVfMDYzX0xWTF9MSU5FT1VUMiAgICAgICAgICAgICAweDYzCisjZGVmaW5lIE05ODA5NV8wNjRfTFZMX0hQX0wgICAgICAgICAgICAgICAgIDB4NjQKKyNkZWZpbmUgTTk4MDk1XzA2NV9MVkxfSFBfUiAgICAgICAgICAgICAgICAgMHg2NQorI2RlZmluZSBNOTgwOTVfMDY2X0xWTF9SQ1YgICAgICAgICAgICAgICAgICAweDY2CisjZGVmaW5lIE05ODA5NV8wNjdfTFZMX1NQS19MICAgICAgICAgICAgICAgIDB4NjcKKyNkZWZpbmUgTTk4MDk1XzA2OF9MVkxfU1BLX1IgICAgICAgICAgICAgICAgMHg2OAorI2RlZmluZSBNOTgwOTVfMDY5X01JQ0FHQ19DRkcgICAgICAgICAgICAgICAweDY5CisjZGVmaW5lIE05ODA5NV8wNkFfTUlDQUdDX1RIUkVTSCAgICAgICAgICAgIDB4NkEKKyNkZWZpbmUgTTk4MDk1XzA2Ql9TUEtfTk9JU0VHQVRFICAgICAgICAgICAgMHg2QgorI2RlZmluZSBNOTgwOTVfMDZDX0RBSTFfQUxDMV9USU1FICAgICAgICAgICAweDZDCisjZGVmaW5lIE05ODA5NV8wNkRfREFJMV9BTEMxX0NPTVAgICAgICAgICAgIDB4NkQKKyNkZWZpbmUgTTk4MDk1XzA2RV9EQUkxX0FMQzFfRVhQTiAgICAgICAgICAgMHg2RQorI2RlZmluZSBNOTgwOTVfMDZGX0RBSTFfQUxDMV9HQUlOICAgICAgICAgICAweDZGCisjZGVmaW5lIE05ODA5NV8wNzBfREFJMV9BTEMyX1RJTUUgICAgICAgICAgIDB4NzAKKyNkZWZpbmUgTTk4MDk1XzA3MV9EQUkxX0FMQzJfQ09NUCAgICAgICAgICAgMHg3MQorI2RlZmluZSBNOTgwOTVfMDcyX0RBSTFfQUxDMl9FWFBOICAgICAgICAgICAweDcyCisjZGVmaW5lIE05ODA5NV8wNzNfREFJMV9BTEMyX0dBSU4gICAgICAgICAgIDB4NzMKKyNkZWZpbmUgTTk4MDk1XzA3NF9EQUkxX0FMQzNfVElNRSAgICAgICAgICAgMHg3NAorI2RlZmluZSBNOTgwOTVfMDc1X0RBSTFfQUxDM19DT01QICAgICAgICAgICAweDc1CisjZGVmaW5lIE05ODA5NV8wNzZfREFJMV9BTEMzX0VYUE4gICAgICAgICAgIDB4NzYKKyNkZWZpbmUgTTk4MDk1XzA3N19EQUkxX0FMQzNfR0FJTiAgICAgICAgICAgMHg3NworI2RlZmluZSBNOTgwOTVfMDc4X0RBSTJfQUxDMV9USU1FICAgICAgICAgICAweDc4CisjZGVmaW5lIE05ODA5NV8wNzlfREFJMl9BTEMxX0NPTVAgICAgICAgICAgIDB4NzkKKyNkZWZpbmUgTTk4MDk1XzA3QV9EQUkyX0FMQzFfRVhQTiAgICAgICAgICAgMHg3QQorI2RlZmluZSBNOTgwOTVfMDdCX0RBSTJfQUxDMV9HQUlOICAgICAgICAgICAweDdCCisjZGVmaW5lIE05ODA5NV8wN0NfREFJMl9BTEMyX1RJTUUgICAgICAgICAgIDB4N0MKKyNkZWZpbmUgTTk4MDk1XzA3RF9EQUkyX0FMQzJfQ09NUCAgICAgICAgICAgMHg3RAorI2RlZmluZSBNOTgwOTVfMDdFX0RBSTJfQUxDMl9FWFBOICAgICAgICAgICAweDdFCisjZGVmaW5lIE05ODA5NV8wN0ZfREFJMl9BTEMyX0dBSU4gICAgICAgICAgIDB4N0YKKyNkZWZpbmUgTTk4MDk1XzA4MF9EQUkyX0FMQzNfVElNRSAgICAgICAgICAgMHg4MAorI2RlZmluZSBNOTgwOTVfMDgxX0RBSTJfQUxDM19DT01QICAgICAgICAgICAweDgxCisjZGVmaW5lIE05ODA5NV8wODJfREFJMl9BTEMzX0VYUE4gICAgICAgICAgIDB4ODIKKyNkZWZpbmUgTTk4MDk1XzA4M19EQUkyX0FMQzNfR0FJTiAgICAgICAgICAgMHg4MworI2RlZmluZSBNOTgwOTVfMDg0X0hQX05PSVNFX0dBVEUgICAgICAgICAgICAweDg0CisjZGVmaW5lIE05ODA5NV8wODVfQVVYX0FEQyAgICAgICAgICAgICAgICAgIDB4ODUKKyNkZWZpbmUgTTk4MDk1XzA4Nl9DRkdfTElORSAgICAgICAgICAgICAgICAgMHg4NgorI2RlZmluZSBNOTgwOTVfMDg3X0NGR19NSUMgICAgICAgICAgICAgICAgICAweDg3CisjZGVmaW5lIE05ODA5NV8wODhfQ0ZHX0xFVkVMICAgICAgICAgICAgICAgIDB4ODgKKyNkZWZpbmUgTTk4MDk1XzA4OV9KQUNLX0RFVF9BVVRPICAgICAgICAgICAgMHg4OQorI2RlZmluZSBNOTgwOTVfMDhBX0pBQ0tfREVUX01BTlVBTCAgICAgICAgICAweDhBCisjZGVmaW5lIE05ODA5NV8wOEJfSkFDS19LRVlTQ0FOX0RCQyAgICAgICAgIDB4OEIKKyNkZWZpbmUgTTk4MDk1XzA4Q19KQUNLX0tFWVNDQU5fRExZICAgICAgICAgMHg4QworI2RlZmluZSBNOTgwOTVfMDhEX0pBQ0tfS0VZX1RIUkVTSCAgICAgICAgICAweDhECisjZGVmaW5lIE05ODA5NV8wOEVfSkFDS19EQ19TTEVXICAgICAgICAgICAgIDB4OEUKKyNkZWZpbmUgTTk4MDk1XzA4Rl9KQUNLX1RFU1RfQ0ZHICAgICAgICAgICAgMHg4RgorI2RlZmluZSBNOTgwOTVfMDkwX1BXUl9FTl9JTiAgICAgICAgICAgICAgICAweDkwCisjZGVmaW5lIE05ODA5NV8wOTFfUFdSX0VOX09VVCAgICAgICAgICAgICAgIDB4OTEKKyNkZWZpbmUgTTk4MDk1XzA5Ml9QV1JfRU5fT1VUICAgICAgICAgICAgICAgMHg5MgorI2RlZmluZSBNOTgwOTVfMDkzX0JJQVNfQ1RSTCAgICAgICAgICAgICAgICAweDkzCisjZGVmaW5lIE05ODA5NV8wOTRfUFdSX0RBQ18yMSAgICAgICAgICAgICAgIDB4OTQKKyNkZWZpbmUgTTk4MDk1XzA5NV9QV1JfREFDXzAzICAgICAgICAgICAgICAgMHg5NQorI2RlZmluZSBNOTgwOTVfMDk2X1BXUl9EQUNfQ0sgICAgICAgICAgICAgICAweDk2CisjZGVmaW5lIE05ODA5NV8wOTdfUFdSX1NZUyAgICAgICAgICAgICAgICAgIDB4OTcKKworI2RlZmluZSBNOTgwOTVfMEZGX1JFVl9JRCAgICAgICAgICAgICAgICAgICAweEZGCisKKyNkZWZpbmUgTTk4MDk1X1JFR19DTlQgICAgICAgICAgICAgICAgICAgICAgKDB4RkYrMSkKKyNkZWZpbmUgTTk4MDk1X1JFR19NQVhfQ0FDSEVEICAgICAgICAgICAgICAgMFg5NworCisvKiBNQVg5ODA5NSBSZWdpc3RlcnMgQml0IEZpZWxkcyAqLworCisvKiBNOTgwOTVfMDBGX0hPU1RfQ0ZHICovCisJI2RlZmluZSBNOTgwOTVfU0VHICAgICAgICAgICAgICAgICAgICAgICgxPDwwKQorCSNkZWZpbmUgTTk4MDk1X1hURU4gICAgICAgICAgICAgICAgICAgICAoMTw8MSkKKwkjZGVmaW5lIE05ODA5NV9NRExMRU4gICAgICAgICAgICAgICAgICAgKDE8PDIpCisKKy8qIE05ODA5NV8wMjdfREFJMV9DTEtNT0RFLCBNOTgwOTVfMDMxX0RBSTJfQ0xLTU9ERSwgTTk4MDk1XzAzQl9EQUkzX0NMS01PREUgKi8KKwkjZGVmaW5lIE05ODA5NV9DTEtNT0RFX01BU0sgICAgICAgICAgICAgMHhGRgorCisvKiBNOTgwOTVfMDJBX0RBSTFfRk9STUFULCBNOTgwOTVfMDM0X0RBSTJfRk9STUFULCBNOTgwOTVfMDNFX0RBSTNfRk9STUFUICovCisJI2RlZmluZSBNOTgwOTVfREFJX01BUyAgICAgICAgICAgICAgICAgICgxPDw3KQorCSNkZWZpbmUgTTk4MDk1X0RBSV9XQ0kgICAgICAgICAgICAgICAgICAoMTw8NikKKwkjZGVmaW5lIE05ODA5NV9EQUlfQkNJICAgICAgICAgICAgICAgICAgKDE8PDUpCisJI2RlZmluZSBNOTgwOTVfREFJX0RMWSAgICAgICAgICAgICAgICAgICgxPDw0KQorCSNkZWZpbmUgTTk4MDk1X0RBSV9URE0gICAgICAgICAgICAgICAgICAoMTw8MikKKwkjZGVmaW5lIE05ODA5NV9EQUlfRlNXICAgICAgICAgICAgICAgICAgKDE8PDEpCisJI2RlZmluZSBNOTgwOTVfREFJX1dTICAgICAgICAgICAgICAgICAgICgxPDwwKQorCisvKiBNOTgwOTVfMDJCX0RBSTFfQ0xPQ0ssIE05ODA5NV8wMzVfREFJMl9DTE9DSywgTTk4MDk1XzAzRl9EQUkzX0NMT0NLICovCisJI2RlZmluZSBNOTgwOTVfREFJX0JTRUw2NCAgICAgICAgICAgICAgICgxPDwwKQorCSNkZWZpbmUgTTk4MDk1X0RBSV9ET1NSX0RJVjIgICAgICAgICAgICAoMDw8NSkKKwkjZGVmaW5lIE05ODA5NV9EQUlfRE9TUl9ESVY0ICAgICAgICAgICAgKDE8PDUpCisKKy8qIE05ODA5NV8wMkNfREFJMV9JT0NGRywgTTk4MDk1XzAzNl9EQUkyX0lPQ0ZHLCBNOTgwOTVfMDQwX0RBSTNfSU9DRkcgKi8KKwkjZGVmaW5lIE05ODA5NV9TMU5PUk1BTCAgICAgICAgICAgICAgICAgKDE8PDYpCisJI2RlZmluZSBNOTgwOTVfUzJOT1JNQUwgICAgICAgICAgICAgICAgICgyPDw2KQorCSNkZWZpbmUgTTk4MDk1X1MzTk9STUFMICAgICAgICAgICAgICAgICAoMzw8NikKKwkjZGVmaW5lIE05ODA5NV9TREFUQSAgICAgICAgICAgICAgICAgICAgKDM8PDApCisKKy8qIE05ODA5NV8wMkVfREFJMV9GSUxURVJTLCBNOTgwOTVfMDM4X0RBSTJfRklMVEVSUywgTTk4MDk1XzA0Ml9EQUkzX0ZJTFRFUlMgKi8KKwkjZGVmaW5lIE05ODA5NV9EQUlfREhGICAgICAgICAgICAgICAgICAgKDE8PDMpCisKKy8qIE05ODA5NV8wNDVfRFNQX0NGRyAqLworCSNkZWZpbmUgTTk4MDk1X0RTUE5PUk1BTCAgICAgICAgICAgICAgICAoNTw8NCkKKworLyogTTk4MDk1XzA0OF9NSVhfREFDX0xSICovCisJI2RlZmluZSBNOTgwOTVfREFJMUxfVE9fREFDUiAgICAgICAgICAgICgxPDw3KQorCSNkZWZpbmUgTTk4MDk1X0RBSTFSX1RPX0RBQ1IgICAgICAgICAgICAoMTw8NikKKwkjZGVmaW5lIE05ODA5NV9EQUkyTV9UT19EQUNSICAgICAgICAgICAgKDE8PDUpCisJI2RlZmluZSBNOTgwOTVfREFJMUxfVE9fREFDTCAgICAgICAgICAgICgxPDwzKQorCSNkZWZpbmUgTTk4MDk1X0RBSTFSX1RPX0RBQ0wgICAgICAgICAgICAoMTw8MikKKwkjZGVmaW5lIE05ODA5NV9EQUkyTV9UT19EQUNMICAgICAgICAgICAgKDE8PDEpCisJI2RlZmluZSBNOTgwOTVfREFJM01fVE9fREFDTCAgICAgICAgICAgICgxPDwwKQorCisvKiBNOTgwOTVfMDQ5X01JWF9EQUNfTSAqLworCSNkZWZpbmUgTTk4MDk1X0RBSTFMX1RPX0RBQ00gICAgICAgICAgICAoMTw8MykKKwkjZGVmaW5lIE05ODA5NV9EQUkxUl9UT19EQUNNICAgICAgICAgICAgKDE8PDIpCisJI2RlZmluZSBNOTgwOTVfREFJMk1fVE9fREFDTSAgICAgICAgICAgICgxPDwxKQorCSNkZWZpbmUgTTk4MDk1X0RBSTNNX1RPX0RBQ00gICAgICAgICAgICAoMTw8MCkKKworLyogTTk4MDk1XzA0RV9NSVhfSFBfQ0ZHICovCisJI2RlZmluZSBNOTgwOTVfSFBOT1JNQUwgICAgICAgICAgICAgICAgICgzPDw0KQorCisvKiBNOTgwOTVfMDVGX0xWTF9NSUMxLCBNOTgwOTVfMDYwX0xWTF9NSUMyICovCisJI2RlZmluZSBNOTgwOTVfTUlDUFJFX01BU0sgICAgICAgICAgICAgICgzPDw1KQorCSNkZWZpbmUgTTk4MDk1X01JQ1BSRV9TSElGVCAgICAgICAgICAgICA1CisKKy8qIE05ODA5NV8wNjRfTFZMX0hQX0wsIE05ODA5NV8wNjVfTFZMX0hQX1IgKi8KKwkjZGVmaW5lIE05ODA5NV9IUF9NVVRFICAgICAgICAgICAgICAgICAgKDE8PDcpCisKKy8qIE05ODA5NV8wNjZfTFZMX1JDViAqLworCSNkZWZpbmUgTTk4MDk1X1JFQ19NVVRFICAgICAgICAgICAgICAgICAoMTw8NykKKworLyogTTk4MDk1XzA2N19MVkxfU1BLX0wsIE05ODA5NV8wNjhfTFZMX1NQS19SICovCisJI2RlZmluZSBNOTgwOTVfU1BfTVVURSAgICAgICAgICAgICAgICAgICgxPDw3KQorCisvKiBNOTgwOTVfMDg3X0NGR19NSUMgKi8KKwkjZGVmaW5lIE05ODA5NV9NSUNTRUxfTUFTSyAgICAgICAgICAgICAgKDM8PDApCisJI2RlZmluZSBNOTgwOTVfRElHTUlDX0wgICAgICAgICAgICAgICAgICgxPDwyKQorCSNkZWZpbmUgTTk4MDk1X0RJR01JQ19SICAgICAgICAgICAgICAgICAoMTw8MykKKwkjZGVmaW5lIE05ODA5NV9ESUdNSUMyTCAgICAgICAgICAgICAgICAgKDE8PDQpCisJI2RlZmluZSBNOTgwOTVfRElHTUlDMlIgICAgICAgICAgICAgICAgICgxPDw1KQorCisvKiBNOTgwOTVfMDg4X0NGR19MRVZFTCAqLworCSNkZWZpbmUgTTk4MDk1X1ZTRU4gICAgICAgICAgICAgICAgICAgICAoMTw8NikKKwkjZGVmaW5lIE05ODA5NV9aREVOICAgICAgICAgICAgICAgICAgICAgKDE8PDUpCisJI2RlZmluZSBNOTgwOTVfQlEyRU4gICAgICAgICAgICAgICAgICAgICgxPDwzKQorCSNkZWZpbmUgTTk4MDk1X0JRMUVOICAgICAgICAgICAgICAgICAgICAoMTw8MikKKwkjZGVmaW5lIE05ODA5NV9FUTJFTiAgICAgICAgICAgICAgICAgICAgKDE8PDEpCisJI2RlZmluZSBNOTgwOTVfRVExRU4gICAgICAgICAgICAgICAgICAgICgxPDwwKQorCisvKiBNOTgwOTVfMDkwX1BXUl9FTl9JTiAqLworCSNkZWZpbmUgTTk4MDk1X0lORU4gICAgICAgICAgICAgICAgICAgICAoMTw8NykKKwkjZGVmaW5lIE05ODA5NV9NQjJFTiAgICAgICAgICAgICAgICAgICAgKDE8PDMpCisJI2RlZmluZSBNOTgwOTVfTUIxRU4gICAgICAgICAgICAgICAgICAgICgxPDwyKQorCSNkZWZpbmUgTTk4MDk1X01CRU4gICAgICAgICAgICAgICAgICAgICAoMzw8MikKKwkjZGVmaW5lIE05ODA5NV9BRFJFTiAgICAgICAgICAgICAgICAgICAgKDE8PDEpCisJI2RlZmluZSBNOTgwOTVfQURMRU4gICAgICAgICAgICAgICAgICAgICgxPDwwKQorCisvKiBNOTgwOTVfMDkxX1BXUl9FTl9PVVQgKi8KKwkjZGVmaW5lIE05ODA5NV9IUExFTiAgICAgICAgICAgICAgICAgICAgKDE8PDcpCisJI2RlZmluZSBNOTgwOTVfSFBSRU4gICAgICAgICAgICAgICAgICAgICgxPDw2KQorCSNkZWZpbmUgTTk4MDk1X1NQTEVOICAgICAgICAgICAgICAgICAgICAoMTw8NSkKKwkjZGVmaW5lIE05ODA5NV9TUFJFTiAgICAgICAgICAgICAgICAgICAgKDE8PDQpCisJI2RlZmluZSBNOTgwOTVfUkVDRU4gICAgICAgICAgICAgICAgICAgICgxPDwzKQorCSNkZWZpbmUgTTk4MDk1X0RBTEVOICAgICAgICAgICAgICAgICAgICAoMTw8MSkKKwkjZGVmaW5lIE05ODA5NV9EQVJFTiAgICAgICAgICAgICAgICAgICAgKDE8PDApCisKKy8qIE05ODA5NV8wOTJfUFdSX0VOX09VVCAqLworCSNkZWZpbmUgTTk4MDk1X1NQS19GSVhFRFNQRUNUUlVNICAgICAgICAoMDw8NCkKKwkjZGVmaW5lIE05ODA5NV9TUEtfU1BSRUFEU1BFQ1RSVU0gICAgICAgKDE8PDQpCisKKy8qIE05ODA5NV8wOTdfUFdSX1NZUyAqLworCSNkZWZpbmUgTTk4MDk1X1NIRE5SVU4gICAgICAgICAgICAgICAgICAoMTw8NykKKwkjZGVmaW5lIE05ODA5NV9QRVJGTU9ERSAgICAgICAgICAgICAgICAgKDE8PDMpCisJI2RlZmluZSBNOTgwOTVfSFBQTFlCQUNLICAgICAgICAgICAgICAgICgxPDwyKQorCSNkZWZpbmUgTTk4MDk1X1BXUlNWOEsgICAgICAgICAgICAgICAgICAoMTw8MSkKKwkjZGVmaW5lIE05ODA5NV9QV1JTViAgICAgICAgICAgICAgICAgICAgKDE8PDApCisKKyNkZWZpbmUgTTk4MDk1X0NPRUZTX1BFUl9CQU5EICAgICAgICAgICAgNQorCisjZGVmaW5lIE05ODA5NV9CWVRFMSh3KSAoKHcgPj4gOCkgJiAweGZmKQorI2RlZmluZSBNOTgwOTVfQllURTAodykgKHcgJiAweGZmKQorCisvKiBFcXVhbGl6ZXIgZmlsdGVyIGNvZWZmaWNpZW50cyAqLworI2RlZmluZSBNOTgwOTVfMTEwX0RBSTFfRVFfQkFTRSAgICAgICAgICAgICAweDEwCisjZGVmaW5lIE05ODA5NV8xNDJfREFJMl9FUV9CQVNFICAgICAgICAgICAgIDB4NDIKKworLyogQmlxdWFkIGZpbHRlciBjb2VmZmljaWVudHMgKi8KKyNkZWZpbmUgTTk4MDk1XzE3NF9EQUkxX0JRX0JBU0UgICAgICAgICAgICAgMHg3NAorI2RlZmluZSBNOTgwOTVfMTdFX0RBSTJfQlFfQkFTRSAgICAgICAgICAgICAweDdFCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9zbjk1MDMxLmMgYi9zb3VuZC9zb2MvY29kZWNzL3NuOTUwMzEuYwppbmRleCA0ZDlmYjI3Li44NGZmZGViIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3NuOTUwMzEuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3NuOTUwMzEuYwpAQCAtODI3LDggKzgyNyw2IEBACiAvKiBjb2RlYyByZWdpc3RyYXRpb24gKi8KIHN0YXRpYyBpbnQgc245NTAzMV9jb2RlY19wcm9iZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0JaW50IHJldDsKLQogCXByX2RlYnVnKCJjb2RlY19wcm9iZSBjYWxsZWRcbiIpOwogCiAJY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9IFNORF9TT0NfQklBU19PRkY7CkBAIC04NzksMTYgKzg3Nyw3IEBACiAJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHNuOTUwMzFfc25kX2NvbnRyb2xzLAogCQkJICAgICBBUlJBWV9TSVpFKHNuOTUwMzFfc25kX2NvbnRyb2xzKSk7CiAKLQlyZXQgPSBzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKCZjb2RlYy0+ZGFwbSwgc245NTAzMV9kYXBtX3dpZGdldHMsCi0JCQkJQVJSQVlfU0laRShzbjk1MDMxX2RhcG1fd2lkZ2V0cykpOwotCWlmIChyZXQpCi0JCXByX2Vycigic29jX2RhcG1fbmV3X2NvbnRyb2wgZmFpbGVkICVkIiwgcmV0KTsKLQlyZXQgPSBzbmRfc29jX2RhcG1fYWRkX3JvdXRlcygmY29kZWMtPmRhcG0sIHNuOTUwMzFfYXVkaW9fbWFwLAotCQkJCUFSUkFZX1NJWkUoc245NTAzMV9hdWRpb19tYXApKTsKLQlpZiAocmV0KQotCQlwcl9lcnIoInNvY19kYXBtX2FkZF9yb3V0ZXMgZmFpbGVkICVkIiwgcmV0KTsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc245NTAzMV9jb2RlY19yZW1vdmUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQpAQCAtOTA1LDYgKzg5NCwxMCBAQAogCS5yZWFkCQk9IHNuOTUwMzFfcmVhZCwKIAkud3JpdGUJCT0gc245NTAzMV93cml0ZSwKIAkuc2V0X2JpYXNfbGV2ZWwJPSBzbjk1MDMxX3NldF92YXVkX2JpYXMsCisJLmRhcG1fd2lkZ2V0cwk9IHNuOTUwMzFfZGFwbV93aWRnZXRzLAorCS5udW1fZGFwbV93aWRnZXRzCT0gQVJSQVlfU0laRShzbjk1MDMxX2RhcG1fd2lkZ2V0cyksCisJLmRhcG1fcm91dGVzCT0gc245NTAzMV9hdWRpb19tYXAsCisJLm51bV9kYXBtX3JvdXRlcwk9IEFSUkFZX1NJWkUoc245NTAzMV9hdWRpb19tYXApLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgc245NTAzMV9kZXZpY2VfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvc3BkaWZfdHJhbnNjaWV2ZXIuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvc3BkaWZfdHJhbnNjaWV2ZXIuYwppbmRleCA0YzMyYjU0Li42YTFhN2U3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3NwZGlmX3RyYW5zY2lldmVyLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9zcGRpZl90cmFuc2NpZXZlci5jCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7CisjZGVmaW5lIERSVl9OQU1FICJzcGRpZi1kaXQiCiAKICNkZWZpbmUgU1RVQl9SQVRFUwlTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAwCiAjZGVmaW5lIFNUVUJfRk9STUFUUwlTTkRSVl9QQ01fRk1UQklUX1MxNl9MRQpAQCAtNTYsNyArNTYsNyBAQAogCS5wcm9iZQkJPSBzcGRpZl9kaXRfcHJvYmUsCiAJLnJlbW92ZQkJPSBzcGRpZl9kaXRfcmVtb3ZlLAogCS5kcml2ZXIJCT0gewotCQkubmFtZQk9ICJzcGRpZi1kaXQiLAorCQkubmFtZQk9IERSVl9OQU1FLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogfTsKQEAgLTc0LDMgKzc0LDcgQEAKIG1vZHVsZV9pbml0KGRpdF9tb2Rpbml0KTsKIG1vZHVsZV9leGl0KGRpdF9leGl0KTsKIAorTU9EVUxFX0FVVEhPUigiU3RldmUgQ2hlbiA8c2NoZW5AbXZpc3RhLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiU1BESUYgZHVtbXkgY29kZWMgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgRFJWX05BTUUpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9zc20yNjAyLmMgYi9zb3VuZC9zb2MvY29kZWNzL3NzbTI2MDIuYwppbmRleCBiMDRkMjgwLi44NGY0YWQ1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3NzbTI2MDIuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3NzbTI2MDIuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KQEAgLTM5LDE4ICs0MCwyNSBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvdGx2Lmg+CiAKICNpbmNsdWRlICJzc20yNjAyLmgiCiAKICNkZWZpbmUgU1NNMjYwMl9WRVJTSU9OICIwLjEiCiAKK2VudW0gc3NtMjYwMl90eXBlIHsKKwlTU00yNjAyLAorCVNTTTI2MDQsCit9OworCiAvKiBjb2RlYyBwcml2YXRlIGRhdGEgKi8KIHN0cnVjdCBzc20yNjAyX3ByaXYgewogCXVuc2lnbmVkIGludCBzeXNjbGs7CiAJZW51bSBzbmRfc29jX2NvbnRyb2xfdHlwZSBjb250cm9sX3R5cGU7Ci0Jdm9pZCAqY29udHJvbF9kYXRhOwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqbWFzdGVyX3N1YnN0cmVhbTsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnNsYXZlX3N1YnN0cmVhbTsKKworCWVudW0gc3NtMjYwMl90eXBlIHR5cGU7CiB9OwogCiAvKgpAQCAtNjAsNjAgKzY4LDEyIEBACiAgKiBUaGVyZSBpcyBubyBwb2ludCBpbiBjYWNoaW5nIHRoZSByZXNldCByZWdpc3RlcgogICovCiBzdGF0aWMgY29uc3QgdTE2IHNzbTI2MDJfcmVnW1NTTTI2MDJfQ0FDSEVSRUdOVU1dID0gewotCTB4MDAxNywgMHgwMDE3LCAweDAwNzksIDB4MDA3OSwKLQkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMGEsCisJMHgwMDk3LCAweDAwOTcsIDB4MDA3OSwgMHgwMDc5LAorCTB4MDAwYSwgMHgwMDA4LCAweDAwOWYsIDB4MDAwYSwKIAkweDAwMDAsIDB4MDAwMAogfTsKIAotLyoKLSAqIHJlYWQgc3NtMjYwMiByZWdpc3RlciBjYWNoZQotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzc20yNjAyX3JlYWRfcmVnX2NhY2hlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKLQl1bnNpZ25lZCBpbnQgcmVnKQotewotCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwotCWlmIChyZWcgPT0gU1NNMjYwMl9SRVNFVCkKLQkJcmV0dXJuIDA7Ci0JaWYgKHJlZyA+PSBTU00yNjAyX0NBQ0hFUkVHTlVNKQotCQlyZXR1cm4gLTE7Ci0JcmV0dXJuIGNhY2hlW3JlZ107Ci19Ci0KLS8qCi0gKiB3cml0ZSBzc20yNjAyIHJlZ2lzdGVyIGNhY2hlCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzc20yNjAyX3dyaXRlX3JlZ19jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JdTE2IHJlZywgdW5zaWduZWQgaW50IHZhbHVlKQotewotCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwotCWlmIChyZWcgPj0gU1NNMjYwMl9DQUNIRVJFR05VTSkKLQkJcmV0dXJuOwotCWNhY2hlW3JlZ10gPSB2YWx1ZTsKLX0KLQotLyoKLSAqIHdyaXRlIHRvIHRoZSBzc20yNjAyIHJlZ2lzdGVyIHNwYWNlCi0gKi8KLXN0YXRpYyBpbnQgc3NtMjYwMl93cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCi0JdW5zaWduZWQgaW50IHZhbHVlKQotewotCXU4IGRhdGFbMl07Ci0KLQkvKiBkYXRhIGlzCi0JICogICBEMTUuLkQ5IHNzbTI2MDIgcmVnaXN0ZXIgb2Zmc2V0Ci0JICogICBEOC4uLkQwIHJlZ2lzdGVyIGRhdGEKLQkgKi8KLQlkYXRhWzBdID0gKHJlZyA8PCAxKSB8ICgodmFsdWUgPj4gOCkgJiAweDAwMDEpOwotCWRhdGFbMV0gPSB2YWx1ZSAmIDB4MDBmZjsKLQotCXNzbTI2MDJfd3JpdGVfcmVnX2NhY2hlKGNvZGVjLCByZWcsIHZhbHVlKTsKLQlpZiAoY29kZWMtPmh3X3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGRhdGEsIDIpID09IDIpCi0JCXJldHVybiAwOwotCWVsc2UKLQkJcmV0dXJuIC1FSU87Ci19Ci0KLSNkZWZpbmUgc3NtMjYwMl9yZXNldChjKQlzc20yNjAyX3dyaXRlKGMsIFNTTTI2MDJfUkVTRVQsIDApCisjZGVmaW5lIHNzbTI2MDJfcmVzZXQoYykJc25kX3NvY193cml0ZShjLCBTU00yNjAyX1JFU0VULCAwKQogCiAvKkFwcGVuZGluZyBzZXZlcmFsICJOb25lInMganVzdCBmb3IgT1NTIG1peGVyIHVzZSovCiBzdGF0aWMgY29uc3QgY2hhciAqc3NtMjYwMl9pbnB1dF9zZWxlY3RbXSA9IHsKQEAgLTEyOCwxNzQgKzg4LDE4NyBAQAogCVNPQ19FTlVNX1NJTkdMRShTU00yNjAyX0FQRElHSSwgMSwgNCwgc3NtMjYwMl9kZWVtcGgpLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNzbTI2MDJfc25kX2NvbnRyb2xzW10gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNzbTI2MHhfb3V0bWl4X3RsdltdID0geworCVRMVl9EQl9SQU5HRV9IRUFEKDIpLAorCTAsIDQ3LCBUTFZfREJfU0NBTEVfSVRFTShUTFZfREJfR0FJTl9NVVRFLCAwLCAwKSwKKwk0OCwgMTI3LCBUTFZfREJfU0NBTEVfSVRFTSgtNzQwMCwgMTAwLCAwKSwKK307CiAKLVNPQ19ET1VCTEVfUigiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIFNTTTI2MDJfTE9VVDFWLCBTU00yNjAyX1JPVVQxViwKLQkwLCAxMjcsIDApLAotU09DX0RPVUJMRV9SKCJNYXN0ZXIgUGxheWJhY2sgWkMgU3dpdGNoIiwgU1NNMjYwMl9MT1VUMVYsIFNTTTI2MDJfUk9VVDFWLAotCTcsIDEsIDApLAorc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKHNzbTI2MHhfaW5wZ2FfdGx2LCAtMzQ1MCwgMTUwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShzc20yNjB4X3NpZGV0b25lX3RsdiwgLTE1MDAsIDMwMCwgMCk7CiAKLVNPQ19ET1VCTEVfUigiQ2FwdHVyZSBWb2x1bWUiLCBTU00yNjAyX0xJTlZPTCwgU1NNMjYwMl9SSU5WT0wsIDAsIDMxLCAwKSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzc20yNjB4X3NuZF9jb250cm9sc1tdID0geworU09DX0RPVUJMRV9SX1RMVigiQ2FwdHVyZSBWb2x1bWUiLCBTU00yNjAyX0xJTlZPTCwgU1NNMjYwMl9SSU5WT0wsIDAsIDQ1LCAwLAorCXNzbTI2MHhfaW5wZ2FfdGx2KSwKIFNPQ19ET1VCTEVfUigiQ2FwdHVyZSBTd2l0Y2giLCBTU00yNjAyX0xJTlZPTCwgU1NNMjYwMl9SSU5WT0wsIDcsIDEsIDEpLAogCi1TT0NfU0lOR0xFKCJNaWMgQm9vc3QgKCsyMGRCKSIsIFNTTTI2MDJfQVBBTkEsIDAsIDEsIDApLAotU09DX1NJTkdMRSgiTWljIEJvb3N0MiAoKzIwZEIpIiwgU1NNMjYwMl9BUEFOQSwgOCwgMSwgMCksCi1TT0NfU0lOR0xFKCJNaWMgU3dpdGNoIiwgU1NNMjYwMl9BUEFOQSwgMSwgMSwgMSksCi0KLVNPQ19TSU5HTEUoIlNpZGV0b25lIFBsYXliYWNrIFZvbHVtZSIsIFNTTTI2MDJfQVBBTkEsIDYsIDMsIDEpLAotCiBTT0NfU0lOR0xFKCJBREMgSGlnaCBQYXNzIEZpbHRlciBTd2l0Y2giLCBTU00yNjAyX0FQRElHSSwgMCwgMSwgMSksCiBTT0NfU0lOR0xFKCJTdG9yZSBEQyBPZmZzZXQgU3dpdGNoIiwgU1NNMjYwMl9BUERJR0ksIDQsIDEsIDApLAogCi1TT0NfRU5VTSgiQ2FwdHVyZSBTb3VyY2UiLCBzc20yNjAyX2VudW1bMF0pLAotCiBTT0NfRU5VTSgiUGxheWJhY2sgRGUtZW1waGFzaXMiLCBzc20yNjAyX2VudW1bMV0pLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNzbTI2MDJfc25kX2NvbnRyb2xzW10gPSB7CitTT0NfRE9VQkxFX1JfVExWKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgU1NNMjYwMl9MT1VUMVYsIFNTTTI2MDJfUk9VVDFWLAorCTAsIDEyNywgMCwgc3NtMjYweF9vdXRtaXhfdGx2KSwKK1NPQ19ET1VCTEVfUigiTWFzdGVyIFBsYXliYWNrIFpDIFN3aXRjaCIsIFNTTTI2MDJfTE9VVDFWLCBTU00yNjAyX1JPVVQxViwKKwk3LCAxLCAwKSwKK1NPQ19TSU5HTEVfVExWKCJTaWRldG9uZSBQbGF5YmFjayBWb2x1bWUiLCBTU00yNjAyX0FQQU5BLCA2LCAzLCAxLAorCXNzbTI2MHhfc2lkZXRvbmVfdGx2KSwKKworU09DX1NJTkdMRSgiTWljIEJvb3N0ICgrMjBkQikiLCBTU00yNjAyX0FQQU5BLCAwLCAxLCAwKSwKK1NPQ19TSU5HTEUoIk1pYyBCb29zdDIgKCsyMGRCKSIsIFNTTTI2MDJfQVBBTkEsIDgsIDEsIDApLAorU09DX1NJTkdMRSgiTWljIFN3aXRjaCIsIFNTTTI2MDJfQVBBTkEsIDEsIDEsIDEpLAorfTsKKwogLyogT3V0cHV0IE1peGVyICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3NtMjYwMl9vdXRwdXRfbWl4ZXJfY29udHJvbHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzc20yNjB4X291dHB1dF9taXhlcl9jb250cm9sc1tdID0gewogU09DX0RBUE1fU0lOR0xFKCJMaW5lIEJ5cGFzcyBTd2l0Y2giLCBTU00yNjAyX0FQQU5BLCAzLCAxLCAwKSwKLVNPQ19EQVBNX1NJTkdMRSgiTWljIFNpZGV0b25lIFN3aXRjaCIsIFNTTTI2MDJfQVBBTkEsIDUsIDEsIDApLAogU09DX0RBUE1fU0lOR0xFKCJIaUZpIFBsYXliYWNrIFN3aXRjaCIsIFNTTTI2MDJfQVBBTkEsIDQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJNaWMgU2lkZXRvbmUgU3dpdGNoIiwgU1NNMjYwMl9BUEFOQSwgNSwgMSwgMCksCiB9OwogCiAvKiBJbnB1dCBtdXggKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzc20yNjAyX2lucHV0X211eF9jb250cm9scyA9CiBTT0NfREFQTV9FTlVNKCJJbnB1dCBTZWxlY3QiLCBzc20yNjAyX2VudW1bMF0pOwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgc3NtMjYwMl9kYXBtX3dpZGdldHNbXSA9IHsKLVNORF9TT0NfREFQTV9NSVhFUigiT3V0cHV0IE1peGVyIiwgU1NNMjYwMl9QV1IsIDQsIDEsCi0JJnNzbTI2MDJfb3V0cHV0X21peGVyX2NvbnRyb2xzWzBdLAotCUFSUkFZX1NJWkUoc3NtMjYwMl9vdXRwdXRfbWl4ZXJfY29udHJvbHMpKSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBzc20yNjB4X2RhcG1fd2lkZ2V0c1tdID0gewogU05EX1NPQ19EQVBNX0RBQygiREFDIiwgIkhpRmkgUGxheWJhY2siLCBTU00yNjAyX1BXUiwgMywgMSksCi1TTkRfU09DX0RBUE1fT1VUUFVUKCJMT1VUIiksCi1TTkRfU09DX0RBUE1fT1VUUFVUKCJMSFBPVVQiKSwKLVNORF9TT0NfREFQTV9PVVRQVVQoIlJPVVQiKSwKLVNORF9TT0NfREFQTV9PVVRQVVQoIlJIUE9VVCIpLAogU05EX1NPQ19EQVBNX0FEQygiQURDIiwgIkhpRmkgQ2FwdHVyZSIsIFNTTTI2MDJfUFdSLCAyLCAxKSwKLVNORF9TT0NfREFQTV9NVVgoIklucHV0IE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJnNzbTI2MDJfaW5wdXRfbXV4X2NvbnRyb2xzKSwKIFNORF9TT0NfREFQTV9QR0EoIkxpbmUgSW5wdXQiLCBTU00yNjAyX1BXUiwgMCwgMSwgTlVMTCwgMCksCi1TTkRfU09DX0RBUE1fTUlDQklBUygiTWljIEJpYXMiLCBTU00yNjAyX1BXUiwgMSwgMSksCi1TTkRfU09DX0RBUE1fSU5QVVQoIk1JQ0lOIiksCisKK1NORF9TT0NfREFQTV9TVVBQTFkoIkRpZ2l0YWwgQ29yZSBQb3dlciIsIFNTTTI2MDJfQUNUSVZFLCAwLCAwLCBOVUxMLCAwKSwKKworU05EX1NPQ19EQVBNX09VVFBVVCgiTE9VVCIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiUk9VVCIpLAogU05EX1NPQ19EQVBNX0lOUFVUKCJSTElORUlOIiksCiBTTkRfU09DX0RBUE1fSU5QVVQoIkxMSU5FSU4iKSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGF1ZGlvX2Nvbm5bXSA9IHsKLQkvKiBvdXRwdXQgbWl4ZXIgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBzc20yNjAyX2RhcG1fd2lkZ2V0c1tdID0geworU05EX1NPQ19EQVBNX01JWEVSKCJPdXRwdXQgTWl4ZXIiLCBTU00yNjAyX1BXUiwgNCwgMSwKKwlzc20yNjB4X291dHB1dF9taXhlcl9jb250cm9scywKKwlBUlJBWV9TSVpFKHNzbTI2MHhfb3V0cHV0X21peGVyX2NvbnRyb2xzKSksCisKK1NORF9TT0NfREFQTV9NVVgoIklucHV0IE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJnNzbTI2MDJfaW5wdXRfbXV4X2NvbnRyb2xzKSwKK1NORF9TT0NfREFQTV9NSUNCSUFTKCJNaWMgQmlhcyIsIFNTTTI2MDJfUFdSLCAxLCAxKSwKKworU05EX1NPQ19EQVBNX09VVFBVVCgiTEhQT1VUIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJSSFBPVVQiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiTUlDSU4iKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBzc20yNjA0X2RhcG1fd2lkZ2V0c1tdID0geworU05EX1NPQ19EQVBNX01JWEVSKCJPdXRwdXQgTWl4ZXIiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJc3NtMjYweF9vdXRwdXRfbWl4ZXJfY29udHJvbHMsCisJQVJSQVlfU0laRShzc20yNjB4X291dHB1dF9taXhlcl9jb250cm9scykgLSAxKSwgLyogTGFzdCBlbGVtZW50IGlzIHRoZSBtaWMgKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIHNzbTI2MHhfcm91dGVzW10gPSB7CisJeyJEQUMiLCBOVUxMLCAiRGlnaXRhbCBDb3JlIFBvd2VyIn0sCisJeyJBREMiLCBOVUxMLCAiRGlnaXRhbCBDb3JlIFBvd2VyIn0sCisKIAl7Ik91dHB1dCBNaXhlciIsICJMaW5lIEJ5cGFzcyBTd2l0Y2giLCAiTGluZSBJbnB1dCJ9LAogCXsiT3V0cHV0IE1peGVyIiwgIkhpRmkgUGxheWJhY2sgU3dpdGNoIiwgIkRBQyJ9LAotCXsiT3V0cHV0IE1peGVyIiwgIk1pYyBTaWRldG9uZSBTd2l0Y2giLCAiTWljIEJpYXMifSwKIAotCS8qIG91dHB1dHMgKi8KLQl7IlJIUE9VVCIsIE5VTEwsICJPdXRwdXQgTWl4ZXIifSwKIAl7IlJPVVQiLCBOVUxMLCAiT3V0cHV0IE1peGVyIn0sCi0JeyJMSFBPVVQiLCBOVUxMLCAiT3V0cHV0IE1peGVyIn0sCiAJeyJMT1VUIiwgTlVMTCwgIk91dHB1dCBNaXhlciJ9LAogCi0JLyogaW5wdXQgbXV4ICovCisJeyJMaW5lIElucHV0IiwgTlVMTCwgIkxMSU5FSU4ifSwKKwl7IkxpbmUgSW5wdXQiLCBOVUxMLCAiUkxJTkVJTiJ9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgc3NtMjYwMl9yb3V0ZXNbXSA9IHsKKwl7Ik91dHB1dCBNaXhlciIsICJNaWMgU2lkZXRvbmUgU3dpdGNoIiwgIk1pYyBCaWFzIn0sCisKKwl7IlJIUE9VVCIsIE5VTEwsICJPdXRwdXQgTWl4ZXIifSwKKwl7IkxIUE9VVCIsIE5VTEwsICJPdXRwdXQgTWl4ZXIifSwKKwogCXsiSW5wdXQgTXV4IiwgIkxpbmUiLCAiTGluZSBJbnB1dCJ9LAogCXsiSW5wdXQgTXV4IiwgIk1pYyIsICJNaWMgQmlhcyJ9LAogCXsiQURDIiwgTlVMTCwgIklucHV0IE11eCJ9LAogCi0JLyogaW5wdXRzICovCi0JeyJMaW5lIElucHV0IiwgTlVMTCwgIkxMSU5FSU4ifSwKLQl7IkxpbmUgSW5wdXQiLCBOVUxMLCAiUkxJTkVJTiJ9LAogCXsiTWljIEJpYXMiLCBOVUxMLCAiTUlDSU4ifSwKIH07CiAKLXN0YXRpYyBpbnQgc3NtMjYwMl9hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0Jc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgc3NtMjYwNF9yb3V0ZXNbXSA9IHsKKwl7IkFEQyIsIE5VTEwsICJMaW5lIElucHV0In0sCit9OwogCi0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCBzc20yNjAyX2RhcG1fd2lkZ2V0cywKLQkJCQkgIEFSUkFZX1NJWkUoc3NtMjYwMl9kYXBtX3dpZGdldHMpKTsKLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBhdWRpb19jb25uLCBBUlJBWV9TSVpFKGF1ZGlvX2Nvbm4pKTsKLQotCXJldHVybiAwOwotfQotCi1zdHJ1Y3QgX2NvZWZmX2RpdiB7CitzdHJ1Y3Qgc3NtMjYwMl9jb2VmZiB7CiAJdTMyIG1jbGs7CiAJdTMyIHJhdGU7Ci0JdTE2IGZzOwotCXU4IHNyOjQ7Ci0JdTggYm9zcjoxOwotCXU4IHVzYjoxOworCXU4IHNyYXRlOwogfTsKIAotLyogY29kZWMgbWNsayBjbG9jayBkaXZpZGVyIGNvZWZmaWNpZW50cyAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBfY29lZmZfZGl2IGNvZWZmX2RpdltdID0geworI2RlZmluZSBTU00yNjAyX0NPRUZGX1NSQVRFKHNyLCBib3NyLCB1c2IpICgoKHNyKSA8PCAyKSB8ICgoYm9zcikgPDwgMSkgfCAodXNiKSkKKworLyogY29kZWMgbWNsayBjbG9jayBjb2VmZmljaWVudHMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3NtMjYwMl9jb2VmZiBzc20yNjAyX2NvZWZmX3RhYmxlW10gPSB7CiAJLyogNDhrICovCi0JezEyMjg4MDAwLCA0ODAwMCwgMjU2LCAweDAsIDB4MCwgMHgwfSwKLQl7MTg0MzIwMDAsIDQ4MDAwLCAzODQsIDB4MCwgMHgxLCAweDB9LAotCXsxMjAwMDAwMCwgNDgwMDAsIDI1MCwgMHgwLCAweDAsIDB4MX0sCisJezEyMjg4MDAwLCA0ODAwMCwgU1NNMjYwMl9DT0VGRl9TUkFURSgweDAsIDB4MCwgMHgwKX0sCisJezE4NDMyMDAwLCA0ODAwMCwgU1NNMjYwMl9DT0VGRl9TUkFURSgweDAsIDB4MSwgMHgwKX0sCisJezEyMDAwMDAwLCA0ODAwMCwgU1NNMjYwMl9DT0VGRl9TUkFURSgweDAsIDB4MCwgMHgxKX0sCiAKIAkvKiAzMmsgKi8KLQl7MTIyODgwMDAsIDMyMDAwLCAzODQsIDB4NiwgMHgwLCAweDB9LAotCXsxODQzMjAwMCwgMzIwMDAsIDU3NiwgMHg2LCAweDEsIDB4MH0sCi0JezEyMDAwMDAwLCAzMjAwMCwgMzc1LCAweDYsIDB4MCwgMHgxfSwKKwl7MTIyODgwMDAsIDMyMDAwLCBTU00yNjAyX0NPRUZGX1NSQVRFKDB4NiwgMHgwLCAweDApfSwKKwl7MTg0MzIwMDAsIDMyMDAwLCBTU00yNjAyX0NPRUZGX1NSQVRFKDB4NiwgMHgxLCAweDApfSwKKwl7MTIwMDAwMDAsIDMyMDAwLCBTU00yNjAyX0NPRUZGX1NSQVRFKDB4NiwgMHgwLCAweDEpfSwKIAogCS8qIDhrICovCi0JezEyMjg4MDAwLCA4MDAwLCAxNTM2LCAweDMsIDB4MCwgMHgwfSwKLQl7MTg0MzIwMDAsIDgwMDAsIDIzMDQsIDB4MywgMHgxLCAweDB9LAotCXsxMTI4OTYwMCwgODAwMCwgMTQwOCwgMHhiLCAweDAsIDB4MH0sCi0JezE2OTM0NDAwLCA4MDAwLCAyMTEyLCAweGIsIDB4MSwgMHgwfSwKLQl7MTIwMDAwMDAsIDgwMDAsIDE1MDAsIDB4MywgMHgwLCAweDF9LAorCXsxMjI4ODAwMCwgODAwMCwgU1NNMjYwMl9DT0VGRl9TUkFURSgweDMsIDB4MCwgMHgwKX0sCisJezE4NDMyMDAwLCA4MDAwLCBTU00yNjAyX0NPRUZGX1NSQVRFKDB4MywgMHgxLCAweDApfSwKKwl7MTEyODk2MDAsIDgwMDAsIFNTTTI2MDJfQ09FRkZfU1JBVEUoMHhiLCAweDAsIDB4MCl9LAorCXsxNjkzNDQwMCwgODAwMCwgU1NNMjYwMl9DT0VGRl9TUkFURSgweGIsIDB4MSwgMHgwKX0sCisJezEyMDAwMDAwLCA4MDAwLCBTU00yNjAyX0NPRUZGX1NSQVRFKDB4MywgMHgwLCAweDEpfSwKIAogCS8qIDk2ayAqLwotCXsxMjI4ODAwMCwgOTYwMDAsIDEyOCwgMHg3LCAweDAsIDB4MH0sCi0JezE4NDMyMDAwLCA5NjAwMCwgMTkyLCAweDcsIDB4MSwgMHgwfSwKLQl7MTIwMDAwMDAsIDk2MDAwLCAxMjUsIDB4NywgMHgwLCAweDF9LAorCXsxMjI4ODAwMCwgOTYwMDAsIFNTTTI2MDJfQ09FRkZfU1JBVEUoMHg3LCAweDAsIDB4MCl9LAorCXsxODQzMjAwMCwgOTYwMDAsIFNTTTI2MDJfQ09FRkZfU1JBVEUoMHg3LCAweDEsIDB4MCl9LAorCXsxMjAwMDAwMCwgOTYwMDAsIFNTTTI2MDJfQ09FRkZfU1JBVEUoMHg3LCAweDAsIDB4MSl9LAogCiAJLyogNDQuMWsgKi8KLQl7MTEyODk2MDAsIDQ0MTAwLCAyNTYsIDB4OCwgMHgwLCAweDB9LAotCXsxNjkzNDQwMCwgNDQxMDAsIDM4NCwgMHg4LCAweDEsIDB4MH0sCi0JezEyMDAwMDAwLCA0NDEwMCwgMjcyLCAweDgsIDB4MSwgMHgxfSwKKwl7MTEyODk2MDAsIDQ0MTAwLCBTU00yNjAyX0NPRUZGX1NSQVRFKDB4OCwgMHgwLCAweDApfSwKKwl7MTY5MzQ0MDAsIDQ0MTAwLCBTU00yNjAyX0NPRUZGX1NSQVRFKDB4OCwgMHgxLCAweDApfSwKKwl7MTIwMDAwMDAsIDQ0MTAwLCBTU00yNjAyX0NPRUZGX1NSQVRFKDB4OCwgMHgxLCAweDEpfSwKIAogCS8qIDg4LjJrICovCi0JezExMjg5NjAwLCA4ODIwMCwgMTI4LCAweGYsIDB4MCwgMHgwfSwKLQl7MTY5MzQ0MDAsIDg4MjAwLCAxOTIsIDB4ZiwgMHgxLCAweDB9LAotCXsxMjAwMDAwMCwgODgyMDAsIDEzNiwgMHhmLCAweDEsIDB4MX0sCisJezExMjg5NjAwLCA4ODIwMCwgU1NNMjYwMl9DT0VGRl9TUkFURSgweGYsIDB4MCwgMHgwKX0sCisJezE2OTM0NDAwLCA4ODIwMCwgU1NNMjYwMl9DT0VGRl9TUkFURSgweGYsIDB4MSwgMHgwKX0sCisJezEyMDAwMDAwLCA4ODIwMCwgU1NNMjYwMl9DT0VGRl9TUkFURSgweGYsIDB4MSwgMHgxKX0sCiB9OwogCi1zdGF0aWMgaW5saW5lIGludCBnZXRfY29lZmYoaW50IG1jbGssIGludCByYXRlKQorc3RhdGljIGlubGluZSBpbnQgc3NtMjYwMl9nZXRfY29lZmYoaW50IG1jbGssIGludCByYXRlKQogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29lZmZfZGl2KTsgaSsrKSB7Ci0JCWlmIChjb2VmZl9kaXZbaV0ucmF0ZSA9PSByYXRlICYmIGNvZWZmX2RpdltpXS5tY2xrID09IG1jbGspCi0JCQlyZXR1cm4gaTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzc20yNjAyX2NvZWZmX3RhYmxlKTsgaSsrKSB7CisJCWlmIChzc20yNjAyX2NvZWZmX3RhYmxlW2ldLnJhdGUgPT0gcmF0ZSAmJgorCQkJc3NtMjYwMl9jb2VmZl90YWJsZVtpXS5tY2xrID09IG1jbGspCisJCQlyZXR1cm4gc3NtMjYwMl9jb2VmZl90YWJsZVtpXS5zcmF0ZTsKIAl9Ci0JcmV0dXJuIGk7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBpbnQgc3NtMjYwMl9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCiAJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7Ci0JdTE2IHNyYXRlOwogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOwogCXN0cnVjdCBzc20yNjAyX3ByaXYgKnNzbTI2MDIgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKLQl1MTYgaWZhY2UgPSBzc20yNjAyX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBTU00yNjAyX0lGQUNFKSAmIDB4ZmZmMzsKLQlpbnQgaSA9IGdldF9jb2VmZihzc20yNjAyLT5zeXNjbGssIHBhcmFtc19yYXRlKHBhcmFtcykpOworCXUxNiBpZmFjZSA9IHNuZF9zb2NfcmVhZChjb2RlYywgU1NNMjYwMl9JRkFDRSkgJiAweGZmZjM7CisJaW50IHNyYXRlID0gc3NtMjYwMl9nZXRfY29lZmYoc3NtMjYwMi0+c3lzY2xrLCBwYXJhbXNfcmF0ZShwYXJhbXMpKTsKIAogCWlmIChzdWJzdHJlYW0gPT0gc3NtMjYwMi0+c2xhdmVfc3Vic3RyZWFtKSB7Ci0JCWRldl9kYmcoJmkyYy0+ZGV2LCAiSWdub3JpbmcgaHdfcGFyYW1zIGZvciBzbGF2ZSBzdWJzdHJlYW1cbiIpOworCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJJZ25vcmluZyBod19wYXJhbXMgZm9yIHNsYXZlIHN1YnN0cmVhbVxuIik7CiAJCXJldHVybiAwOwogCX0KIAotCS8qbm8gbWF0Y2ggaXMgZm91bmQqLwotCWlmIChpID09IEFSUkFZX1NJWkUoY29lZmZfZGl2KSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHNyYXRlIDwgMCkKKwkJcmV0dXJuIHNyYXRlOwogCi0Jc3JhdGUgPSAoY29lZmZfZGl2W2ldLnNyIDw8IDIpIHwKLQkJKGNvZWZmX2RpdltpXS5ib3NyIDw8IDEpIHwgY29lZmZfZGl2W2ldLnVzYjsKLQotCXNzbTI2MDJfd3JpdGUoY29kZWMsIFNTTTI2MDJfQUNUSVZFLCAwKTsKLQlzc20yNjAyX3dyaXRlKGNvZGVjLCBTU00yNjAyX1NSQVRFLCBzcmF0ZSk7CisJc25kX3NvY193cml0ZShjb2RlYywgU1NNMjYwMl9TUkFURSwgc3JhdGUpOwogCiAJLyogYml0IHNpemUgKi8KIAlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgewpAQCAtMzExLDggKzI4NCw3IEBACiAJCWlmYWNlIHw9IDB4MDAwYzsKIAkJYnJlYWs7CiAJfQotCXNzbTI2MDJfd3JpdGUoY29kZWMsIFNTTTI2MDJfSUZBQ0UsIGlmYWNlKTsKLQlzc20yNjAyX3dyaXRlKGNvZGVjLCBTU00yNjAyX0FDVElWRSwgQUNUSVZFX0FDVElWQVRFX0NPREVDKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBTU00yNjAyX0lGQUNFLCBpZmFjZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM1NCwxNyArMzI2LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzc20yNjAyX3BjbV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJICAgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQotewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOwotCS8qIHNldCBhY3RpdmUgKi8KLQlzc20yNjAyX3dyaXRlKGNvZGVjLCBTU00yNjAyX0FDVElWRSwgQUNUSVZFX0FDVElWQVRFX0NPREVDKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBzc20yNjAyX3NodXRkb3duKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCQkJICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKIHsKQEAgLTM3MiwyNSArMzMzLDIyIEBACiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5jb2RlYzsKIAlzdHJ1Y3Qgc3NtMjYwMl9wcml2ICpzc20yNjAyID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAKLQkvKiBkZWFjdGl2YXRlICovCi0JaWYgKCFjb2RlYy0+YWN0aXZlKQotCQlzc20yNjAyX3dyaXRlKGNvZGVjLCBTU00yNjAyX0FDVElWRSwgMCk7Ci0KIAlpZiAoc3NtMjYwMi0+bWFzdGVyX3N1YnN0cmVhbSA9PSBzdWJzdHJlYW0pCiAJCXNzbTI2MDItPm1hc3Rlcl9zdWJzdHJlYW0gPSBzc20yNjAyLT5zbGF2ZV9zdWJzdHJlYW07CiAKIAlzc20yNjAyLT5zbGF2ZV9zdWJzdHJlYW0gPSBOVUxMOwogfQogCisKIHN0YXRpYyBpbnQgc3NtMjYwMl9tdXRlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCBpbnQgbXV0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOwotCXUxNiBtdXRlX3JlZyA9IHNzbTI2MDJfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFNTTTI2MDJfQVBESUdJKSAmIH5BUERJR0lfRU5BQkxFX0RBQ19NVVRFOworCXUxNiBtdXRlX3JlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgU1NNMjYwMl9BUERJR0kpICYgfkFQRElHSV9FTkFCTEVfREFDX01VVEU7CiAJaWYgKG11dGUpCi0JCXNzbTI2MDJfd3JpdGUoY29kZWMsIFNTTTI2MDJfQVBESUdJLAorCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBTU00yNjAyX0FQRElHSSwKIAkJCQltdXRlX3JlZyB8IEFQRElHSV9FTkFCTEVfREFDX01VVEUpOwogCWVsc2UKLQkJc3NtMjYwMl93cml0ZShjb2RlYywgU1NNMjYwMl9BUERJR0ksIG11dGVfcmVnKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgU1NNMjYwMl9BUERJR0ksIG11dGVfcmVnKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDY2LDMwICs0MjQsMjkgQEAKIAl9CiAKIAkvKiBzZXQgaWZhY2UgKi8KLQlzc20yNjAyX3dyaXRlKGNvZGVjLCBTU00yNjAyX0lGQUNFLCBpZmFjZSk7CisJc25kX3NvY193cml0ZShjb2RlYywgU1NNMjYwMl9JRkFDRSwgaWZhY2UpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNzbTI2MDJfc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCQkJCSBlbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKIHsKLQl1MTYgcmVnID0gc3NtMjYwMl9yZWFkX3JlZ19jYWNoZShjb2RlYywgU1NNMjYwMl9QV1IpICYgMHhmZjdmOworCXUxNiByZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFNTTTI2MDJfUFdSKSAmIDB4ZmY3ZjsKIAogCXN3aXRjaCAobGV2ZWwpIHsKIAljYXNlIFNORF9TT0NfQklBU19PTjoKIAkJLyogdnJlZi9taWQsIG9zYyBvbiwgZGFjIHVubXV0ZSAqLwotCQlzc20yNjAyX3dyaXRlKGNvZGVjLCBTU00yNjAyX1BXUiwgcmVnKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgU1NNMjYwMl9QV1IsIHJlZyk7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CiAJCS8qIGV2ZXJ5dGhpbmcgb2ZmIGV4Y2VwdCB2cmVmL3ZtaWQsICovCi0JCXNzbTI2MDJfd3JpdGUoY29kZWMsIFNTTTI2MDJfUFdSLCByZWcgfCBQV1JfQ0xLX09VVF9QRE4pOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBTU00yNjAyX1BXUiwgcmVnIHwgUFdSX0NMS19PVVRfUEROKTsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgogCQkvKiBldmVyeXRoaW5nIG9mZiwgZGFjIG11dGUsIGluYWN0aXZlICovCi0JCXNzbTI2MDJfd3JpdGUoY29kZWMsIFNTTTI2MDJfQUNUSVZFLCAwKTsKLQkJc3NtMjYwMl93cml0ZShjb2RlYywgU1NNMjYwMl9QV1IsIDB4ZmZmZik7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFNTTTI2MDJfUFdSLCAweGZmZmYpOwogCQlicmVhazsKIAogCX0KQEAgLTUwNiw3ICs0NjMsNiBAQAogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBzc20yNjAyX2RhaV9vcHMgPSB7CiAJLnN0YXJ0dXAJPSBzc20yNjAyX3N0YXJ0dXAsCi0JLnByZXBhcmUJPSBzc20yNjAyX3BjbV9wcmVwYXJlLAogCS5od19wYXJhbXMJPSBzc20yNjAyX2h3X3BhcmFtcywKIAkuc2h1dGRvd24JPSBzc20yNjAyX3NodXRkb3duLAogCS5kaWdpdGFsX211dGUJPSBzc20yNjAyX211dGUsCkBAIC01MzksNTAgKzQ5NSw4NyBAQAogCiBzdGF0aWMgaW50IHNzbTI2MDJfcmVzdW1lKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKLQlpbnQgaTsKLQl1OCBkYXRhWzJdOwotCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCXNuZF9zb2NfY2FjaGVfc3luYyhjb2RlYyk7CiAKLQkvKiBTeW5jIHJlZ19jYWNoZSB3aXRoIHRoZSBoYXJkd2FyZSAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNzbTI2MDJfcmVnKTsgaSsrKSB7Ci0JCWRhdGFbMF0gPSAoaSA8PCAxKSB8ICgoY2FjaGVbaV0gPj4gOCkgJiAweDAwMDEpOwotCQlkYXRhWzFdID0gY2FjaGVbaV0gJiAweDAwZmY7Ci0JCWNvZGVjLT5od193cml0ZShjb2RlYy0+Y29udHJvbF9kYXRhLCBkYXRhLCAyKTsKLQl9CiAJc3NtMjYwMl9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc3NtMjYwMl9wcm9iZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOworCWludCByZXQsIHJlZzsKKworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgU1NNMjYwMl9MT1VUMVYpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFNTTTI2MDJfTE9VVDFWLCByZWcgfCBMT1VUMVZfTFJIUF9CT1RIKTsKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFNTTTI2MDJfUk9VVDFWKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBTU00yNjAyX1JPVVQxViwgcmVnIHwgUk9VVDFWX1JMSFBfQk9USCk7CisKKwlyZXQgPSBzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgc3NtMjYwMl9zbmRfY29udHJvbHMsCisJCQlBUlJBWV9TSVpFKHNzbTI2MDJfc25kX2NvbnRyb2xzKSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgc3NtMjYwMl9kYXBtX3dpZGdldHMsCisJCQlBUlJBWV9TSVpFKHNzbTI2MDJfZGFwbV93aWRnZXRzKSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBzc20yNjAyX3JvdXRlcywKKwkJCUFSUkFZX1NJWkUoc3NtMjYwMl9yb3V0ZXMpKTsKK30KKworc3RhdGljIGludCBzc20yNjA0X3Byb2JlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CisJaW50IHJldDsKKworCXJldCA9IHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgc3NtMjYwNF9kYXBtX3dpZGdldHMsCisJCQlBUlJBWV9TSVpFKHNzbTI2MDRfZGFwbV93aWRnZXRzKSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBzc20yNjA0X3JvdXRlcywKKwkJCUFSUkFZX1NJWkUoc3NtMjYwNF9yb3V0ZXMpKTsKK30KKworc3RhdGljIGludCBzc20yNjB4X3Byb2JlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKIAlzdHJ1Y3Qgc3NtMjYwMl9wcml2ICpzc20yNjAyID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7Ci0JaW50IHJldCA9IDAsIHJlZzsKKwlpbnQgcmV0LCByZWc7CiAKIAlwcl9pbmZvKCJzc20yNjAyIEF1ZGlvIENvZGVjICVzIiwgU1NNMjYwMl9WRVJTSU9OKTsKIAotCWNvZGVjLT5jb250cm9sX2RhdGEgPSBzc20yNjAyLT5jb250cm9sX2RhdGE7CisJcmV0ID0gc25kX3NvY19jb2RlY19zZXRfY2FjaGVfaW8oY29kZWMsIDcsIDksIHNzbTI2MDItPmNvbnRyb2xfdHlwZSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHNldCBjYWNoZSBJL086ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KIAotCXNzbTI2MDJfcmVzZXQoY29kZWMpOworCXJldCA9IHNzbTI2MDJfcmVzZXQoY29kZWMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBpc3N1ZSByZXNldDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQogCi0JLypwb3dlciBvbiBkZXZpY2UqLwotCXNzbTI2MDJfd3JpdGUoY29kZWMsIFNTTTI2MDJfQUNUSVZFLCAwKTsKIAkvKiBzZXQgdGhlIHVwZGF0ZSBiaXRzICovCi0JcmVnID0gc3NtMjYwMl9yZWFkX3JlZ19jYWNoZShjb2RlYywgU1NNMjYwMl9MSU5WT0wpOwotCXNzbTI2MDJfd3JpdGUoY29kZWMsIFNTTTI2MDJfTElOVk9MLCByZWcgfCBMSU5WT0xfTFJJTl9CT1RIKTsKLQlyZWcgPSBzc20yNjAyX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBTU00yNjAyX1JJTlZPTCk7Ci0Jc3NtMjYwMl93cml0ZShjb2RlYywgU1NNMjYwMl9SSU5WT0wsIHJlZyB8IFJJTlZPTF9STElOX0JPVEgpOwotCXJlZyA9IHNzbTI2MDJfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFNTTTI2MDJfTE9VVDFWKTsKLQlzc20yNjAyX3dyaXRlKGNvZGVjLCBTU00yNjAyX0xPVVQxViwgcmVnIHwgTE9VVDFWX0xSSFBfQk9USCk7Ci0JcmVnID0gc3NtMjYwMl9yZWFkX3JlZ19jYWNoZShjb2RlYywgU1NNMjYwMl9ST1VUMVYpOwotCXNzbTI2MDJfd3JpdGUoY29kZWMsIFNTTTI2MDJfUk9VVDFWLCByZWcgfCBST1VUMVZfUkxIUF9CT1RIKTsKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFNTTTI2MDJfTElOVk9MKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBTU00yNjAyX0xJTlZPTCwgcmVnIHwgTElOVk9MX0xSSU5fQk9USCk7CisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBTU00yNjAyX1JJTlZPTCk7CisJc25kX3NvY193cml0ZShjb2RlYywgU1NNMjYwMl9SSU5WT0wsIHJlZyB8IFJJTlZPTF9STElOX0JPVEgpOwogCS8qc2VsZWN0IExpbmUgaW4gYXMgZGVmYXVsdCBpbnB1dCovCi0Jc3NtMjYwMl93cml0ZShjb2RlYywgU1NNMjYwMl9BUEFOQSwgQVBBTkFfU0VMRUNUX0RBQyB8CisJc25kX3NvY193cml0ZShjb2RlYywgU1NNMjYwMl9BUEFOQSwgQVBBTkFfU0VMRUNUX0RBQyB8CiAJCQlBUEFOQV9FTkFCTEVfTUlDX0JPT1NUKTsKLQlzc20yNjAyX3dyaXRlKGNvZGVjLCBTU00yNjAyX1BXUiwgMCk7CiAKLQlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgc3NtMjYwMl9zbmRfY29udHJvbHMsCi0JCQkJQVJSQVlfU0laRShzc20yNjAyX3NuZF9jb250cm9scykpOwotCXNzbTI2MDJfYWRkX3dpZGdldHMoY29kZWMpOworCXN3aXRjaCAoc3NtMjYwMi0+dHlwZSkgeworCWNhc2UgU1NNMjYwMjoKKwkJcmV0ID0gc3NtMjYwMl9wcm9iZShjb2RlYyk7CisJCWJyZWFrOworCWNhc2UgU1NNMjYwNDoKKwkJcmV0ID0gc3NtMjYwNF9wcm9iZShjb2RlYyk7CisJCWJyZWFrOworCX0KIAogCXJldHVybiByZXQ7CiB9CkBAIC01OTUsMTggKzU4OCw2MSBAQAogfQogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWNfZHJpdmVyIHNvY19jb2RlY19kZXZfc3NtMjYwMiA9IHsKLQkucHJvYmUgPQlzc20yNjAyX3Byb2JlLAorCS5wcm9iZSA9CXNzbTI2MHhfcHJvYmUsCiAJLnJlbW92ZSA9CXNzbTI2MDJfcmVtb3ZlLAogCS5zdXNwZW5kID0Jc3NtMjYwMl9zdXNwZW5kLAogCS5yZXN1bWUgPQlzc20yNjAyX3Jlc3VtZSwKLQkucmVhZCA9IHNzbTI2MDJfcmVhZF9yZWdfY2FjaGUsCi0JLndyaXRlID0gc3NtMjYwMl93cml0ZSwKIAkuc2V0X2JpYXNfbGV2ZWwgPSBzc20yNjAyX3NldF9iaWFzX2xldmVsLAogCS5yZWdfY2FjaGVfc2l6ZSA9IEFSUkFZX1NJWkUoc3NtMjYwMl9yZWcpLAogCS5yZWdfd29yZF9zaXplID0gc2l6ZW9mKHUxNiksCiAJLnJlZ19jYWNoZV9kZWZhdWx0ID0gc3NtMjYwMl9yZWcsCisKKwkuY29udHJvbHMgPSBzc20yNjB4X3NuZF9jb250cm9scywKKwkubnVtX2NvbnRyb2xzID0gQVJSQVlfU0laRShzc20yNjB4X3NuZF9jb250cm9scyksCisJLmRhcG1fd2lkZ2V0cyA9IHNzbTI2MHhfZGFwbV93aWRnZXRzLAorCS5udW1fZGFwbV93aWRnZXRzID0gQVJSQVlfU0laRShzc20yNjB4X2RhcG1fd2lkZ2V0cyksCisJLmRhcG1fcm91dGVzID0gc3NtMjYweF9yb3V0ZXMsCisJLm51bV9kYXBtX3JvdXRlcyA9IEFSUkFZX1NJWkUoc3NtMjYweF9yb3V0ZXMpLAogfTsKIAorI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzc20yNjAyX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBzc20yNjAyX3ByaXYgKnNzbTI2MDI7CisJaW50IHJldDsKKworCXNzbTI2MDIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3NtMjYwMl9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHNzbTI2MDIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGlfc2V0X2RydmRhdGEoc3BpLCBzc20yNjAyKTsKKwlzc20yNjAyLT5jb250cm9sX3R5cGUgPSBTTkRfU09DX1NQSTsKKwlzc20yNjAyLT50eXBlID0gU1NNMjYwMjsKKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoJnNwaS0+ZGV2LAorCQkJJnNvY19jb2RlY19kZXZfc3NtMjYwMiwgJnNzbTI2MDJfZGFpLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJa2ZyZWUoc3NtMjYwMik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgc3NtMjYwMl9zcGlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZzcGktPmRldik7CisJa2ZyZWUoc3BpX2dldF9kcnZkYXRhKHNwaSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgc3NtMjYwMl9zcGlfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gInNzbTI2MDIiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBzc20yNjAyX3NwaV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNzbTI2MDJfc3BpX3JlbW92ZSksCit9OworI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCiAvKgogICogc3NtMjYwMiAyIHdpcmUgYWRkcmVzcyBpcyBkZXRlcm1pbmVkIGJ5IEdQSU81CkBAIC02MjUsOCArNjYxLDggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBzc20yNjAyKTsKLQlzc20yNjAyLT5jb250cm9sX2RhdGEgPSBpMmM7CiAJc3NtMjYwMi0+Y29udHJvbF90eXBlID0gU05EX1NPQ19JMkM7CisJc3NtMjYwMi0+dHlwZSA9IGlkLT5kcml2ZXJfZGF0YTsKIAogCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoJmkyYy0+ZGV2LAogCQkJJnNvY19jb2RlY19kZXZfc3NtMjYwMiwgJnNzbTI2MDJfZGFpLCAxKTsKQEAgLTY0Myw3ICs2NzksOSBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgc3NtMjYwMl9pMmNfaWRbXSA9IHsKLQl7ICJzc20yNjAyIiwgMCB9LAorCXsgInNzbTI2MDIiLCBTU00yNjAyIH0sCisJeyAic3NtMjYwMyIsIFNTTTI2MDIgfSwKKwl7ICJzc20yNjA0IiwgU1NNMjYwNCB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzc20yNjAyX2kyY19pZCk7CkBAIC02NTEsNyArNjg5LDcgQEAKIC8qIGNvcmdpIGkyYyBjb2RlYyBjb250cm9sIGxheWVyICovCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgc3NtMjYwMl9pMmNfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gInNzbTI2MDItY29kZWMiLAorCQkubmFtZSA9ICJzc20yNjAyIiwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAkucHJvYmUgPSBzc20yNjAyX2kyY19wcm9iZSwKQEAgLTY2NCwyNSArNzAyLDM1IEBACiBzdGF0aWMgaW50IF9faW5pdCBzc20yNjAyX21vZGluaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gMDsKKworI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCisJcmV0ID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmc3NtMjYwMl9zcGlfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCiAJcmV0ID0gaTJjX2FkZF9kcml2ZXIoJnNzbTI2MDJfaTJjX2RyaXZlcik7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIFNTTTI2MDIgSTJDIGRyaXZlcjogJWRcbiIsCi0JCSAgICAgICByZXQpOwotCX0KKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogI2VuZGlmCisKIAlyZXR1cm4gcmV0OwogfQogbW9kdWxlX2luaXQoc3NtMjYwMl9tb2Rpbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IHNzbTI2MDJfZXhpdCh2b2lkKQogeworI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZzc20yNjAyX3NwaV9kcml2ZXIpOworI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCiAJaTJjX2RlbF9kcml2ZXIoJnNzbTI2MDJfaTJjX2RyaXZlcik7CiAjZW5kaWYKIH0KIG1vZHVsZV9leGl0KHNzbTI2MDJfZXhpdCk7CiAKLU1PRFVMRV9ERVNDUklQVElPTigiQVNvQyBzc20yNjAyIGRyaXZlciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBU29DIFNTTTI2MDIvU1NNMjYwMy9TU00yNjA0IGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiQ2xpZmYgQ2FpIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3NzbTI2MDIuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvc3NtMjYwMi5oCmluZGV4IDQyYTQ3ZDAuLmI5OGM2OTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvc3NtMjYwMi5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvc3NtMjYwMi5oCkBAIC0xMTcsMTEgKzExNyw1IEBACiAjZGVmaW5lIFNTTTI2MDJfQ0FDSEVSRUdOVU0gCTEwCiAKICNkZWZpbmUgU1NNMjYwMl9TWVNDTEsJMAotI2RlZmluZSBTU00yNjAyX0RBSQkJMAotCi1zdHJ1Y3Qgc3NtMjYwMl9zZXR1cF9kYXRhIHsKLQlpbnQgaTJjX2J1czsKLQl1bnNpZ25lZCBzaG9ydCBpMmNfYWRkcmVzczsKLX07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyMy5jIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyMy5jCmluZGV4IDU0YTMwZWYuLjMzYmI1MmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzIzLmMKQEAgLTIxMiw3ICsyMTIsNyBAQAogCVNORF9TT0NfREFQTV9JTlBVVCgiTUlDSU4iKSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGludGVyY29uW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSB0bHYzMjBhaWMyM19pbnRlcmNvbltdID0gewogCS8qIE91dHB1dCBNaXhlciAqLwogCXsiT3V0cHV0IE1peGVyIiwgIkxpbmUgQnlwYXNzIFN3aXRjaCIsICJMaW5lIElucHV0In0sCiAJeyJPdXRwdXQgTWl4ZXIiLCAiUGxheWJhY2sgU3dpdGNoIiwgIkRBQyJ9LApAQCAtMzg4LDE4ICszODgsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHRsdjMyMGFpYzIzX2FkZF93aWRnZXRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07Ci0KLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHRsdjMyMGFpYzIzX2RhcG1fd2lkZ2V0cywKLQkJCQkgIEFSUkFZX1NJWkUodGx2MzIwYWljMjNfZGFwbV93aWRnZXRzKSk7Ci0JLyogc2V0IHVwIGF1ZGlvIHBhdGggaW50ZXJjb25uZWN0cyAqLwotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGludGVyY29uLCBBUlJBWV9TSVpFKGludGVyY29uKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB0bHYzMjBhaWMyM19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJCQkJIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAogCQkJCSBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKQEAgLTY3Niw3ICs2NjQsNiBAQAogCiAJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHRsdjMyMGFpYzIzX3NuZF9jb250cm9scywKIAkJCQlBUlJBWV9TSVpFKHRsdjMyMGFpYzIzX3NuZF9jb250cm9scykpOwotCXRsdjMyMGFpYzIzX2FkZF93aWRnZXRzKGNvZGVjKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjk4LDYgKzY4NSwxMCBAQAogCS5yZWFkID0gdGx2MzIwYWljMjNfcmVhZF9yZWdfY2FjaGUsCiAJLndyaXRlID0gdGx2MzIwYWljMjNfd3JpdGUsCiAJLnNldF9iaWFzX2xldmVsID0gdGx2MzIwYWljMjNfc2V0X2JpYXNfbGV2ZWwsCisJLmRhcG1fd2lkZ2V0cyA9IHRsdjMyMGFpYzIzX2RhcG1fd2lkZ2V0cywKKwkubnVtX2RhcG1fd2lkZ2V0cyA9IEFSUkFZX1NJWkUodGx2MzIwYWljMjNfZGFwbV93aWRnZXRzKSwKKwkuZGFwbV9yb3V0ZXMgPSB0bHYzMjBhaWMyM19pbnRlcmNvbiwKKwkubnVtX2RhcG1fcm91dGVzID0gQVJSQVlfU0laRSh0bHYzMjBhaWMyM19pbnRlcmNvbiksCiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMzeC5jIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMzeC5jCmluZGV4IDZjNDNjMTMuLmMzZDk2ZmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljM3guYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzN4LmMKQEAgLTE1Nyw3ICsxNTcsOCBAQAogc3RhdGljIGludCBzbmRfc29jX2RhcG1fcHV0X3ZvbHN3X2FpYzN4KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCQkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqd2lkZ2V0ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0X2xpc3QgKndsaXN0ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3aWRnZXQgPSB3bGlzdC0+d2lkZ2V0c1swXTsKIAlzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKm1jID0KIAkJKHN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqKWtjb250cm9sLT5wcml2YXRlX3ZhbHVlOwogCXVuc2lnbmVkIGludCByZWcgPSBtYy0+cmVnOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBkYWMzMy5jIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBkYWMzMy5jCmluZGV4IDA4MmU5ZDUuLmZhYTVlOWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwZGFjMzMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGRhYzMzLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogQUxTQSBTb0MgVGV4YXMgSW5zdHJ1bWVudHMgVExWMzIwREFDMzMgY29kZWMgZHJpdmVyCiAgKgotICogQXV0aG9yOglQZXRlciBVamZhbHVzaSA8cGV0ZXIudWpmYWx1c2lAbm9raWEuY29tPgorICogQXV0aG9yOiBQZXRlciBVamZhbHVzaSA8cGV0ZXIudWpmYWx1c2lAdGkuY29tPgogICoKICAqIENvcHlyaWdodDogICAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgogICoKQEAgLTU4Nyw2ICs1ODcsOSBAQAogCVNORF9TT0NfREFQTV9TVVBQTFkoIlJpZ2h0IERBQyBQb3dlciIsCiAJCQkgICAgREFDMzNfUkRBQ19QV1JfQ1RSTCwgMiwgMCwgTlVMTCwgMCksCiAKKwlTTkRfU09DX0RBUE1fU1VQUExZKCJDb2RlYyBQb3dlciIsCisJCQkgICAgREFDMzNfUFdSX0NUUkwsIDQsIDAsIE5VTEwsIDApLAorCiAJU05EX1NPQ19EQVBNX1BSRSgiUHJlIFBsYXliYWNrIiwgZGFjMzNfcGxheWJhY2tfZXZlbnQpLAogCVNORF9TT0NfREFQTV9QT1NUKCJQb3N0IFBsYXliYWNrIiwgZGFjMzNfcGxheWJhY2tfZXZlbnQpLAogfTsKQEAgLTYxOSw2ICs2MjIsOSBAQAogCS8qIG91dHB1dCAqLwogCXsiTEVGVF9MTyIsIE5VTEwsICJPdXRwdXQgTGVmdCBBbXBsaWZpZXIifSwKIAl7IlJJR0hUX0xPIiwgTlVMTCwgIk91dHB1dCBSaWdodCBBbXBsaWZpZXIifSwKKworCXsiTEVGVF9MTyIsIE5VTEwsICJDb2RlYyBQb3dlciJ9LAorCXsiUklHSFRfTE8iLCBOVUxMLCAiQ29kZWMgUG93ZXIifSwKIH07CiAKIHN0YXRpYyBpbnQgZGFjMzNfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQpAQCAtNjM2LDEzICs2NDIsMTAgQEAKIHN0YXRpYyBpbnQgZGFjMzNfc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCQkJCWVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQogewotCXN0cnVjdCB0bHYzMjBkYWMzM19wcml2ICpkYWMzMyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCWludCByZXQ7CiAKIAlzd2l0Y2ggKGxldmVsKSB7CiAJY2FzZSBTTkRfU09DX0JJQVNfT046Ci0JCWlmICghZGFjMzMtPnN1YnN0cmVhbSkKLQkJCWRhYzMzX3NvZnRfcG93ZXIoY29kZWMsIDEpOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgogCQlicmVhazsKQEAgLTk0Myw4ICs5NDYsOCBAQAogCS8qIFdyaXRlIHJlZ2lzdGVycyAweDA4IGFuZCAweDA5IChNU0IsIExTQikgKi8KIAlkYWMzM193cml0ZTE2KGNvZGVjLCBEQUMzM19JTlRfT1NDX0ZSRVFfUkFUX0EsIG9zY3NldCk7CiAKLQkvKiBjYWxpYiB0aW1lOiAxMjggaXMgYSBuaWNlIG51bWJlciA7KSAqLwotCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19DQUxJQl9USU1FLCAxMjgpOworCS8qIE9TQyBjYWxpYnJhdGlvbiB0aW1lICovCisJZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX0NBTElCX1RJTUUsIDk2KTsKIAogCS8qIGFkanVzdG1lbnQgdHJlc2hvbGQgJiBzdGVwICovCiAJZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX0lOVF9PU0NfQ1RSTF9CLCBEQUMzM19BREpUSFJTSExEKDIpIHwKQEAgLTE2NTUsNSArMTY1OCw1IEBACiAKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJBU29DIFRMVjMyMERBQzMzIGNvZGVjIGRyaXZlciIpOwotTU9EVUxFX0FVVEhPUigiUGV0ZXIgVWpmYWx1c2kgPHBldGVyLnVqZmFsdXNpQG5va2lhLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIlBldGVyIFVqZmFsdXNpIDxwZXRlci51amZhbHVzaUB0aS5jb20+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGRhYzMzLmggYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGRhYzMzLmgKaW5kZXggN2MzMThiNS4uZWQ2OTY3MCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBkYWMzMy5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwZGFjMzMuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBBTFNBIFNvQyBUZXhhcyBJbnN0cnVtZW50cyBUTFYzMjBEQUMzMyBjb2RlYyBkcml2ZXIKICAqCi0gKiBBdXRob3I6CVBldGVyIFVqZmFsdXNpIDxwZXRlci51amZhbHVzaUBub2tpYS5jb20+CisgKiBBdXRob3I6IFBldGVyIFVqZmFsdXNpIDxwZXRlci51amZhbHVzaUB0aS5jb20+CiAgKgogICogQ29weXJpZ2h0OiAgIChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCiAgKgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90cGE2MTMwYTIuYyBiL3NvdW5kL3NvYy9jb2RlY3MvdHBhNjEzMGEyLmMKaW5kZXggMWYxYWM4MS4uMjM5ZTBjNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90cGE2MTMwYTIuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3RwYTYxMzBhMi5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgTm9raWEgQ29ycG9yYXRpb24KICAqCi0gKiBBdXRob3I6IFBldGVyIFVqZmFsdXNpIDxwZXRlci51amZhbHVzaUBub2tpYS5jb20+CisgKiBBdXRob3I6IFBldGVyIFVqZmFsdXNpIDxwZXRlci51amZhbHVzaUB0aS5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTQ5NSw3ICs0OTUsNyBAQAogCWkyY19kZWxfZHJpdmVyKCZ0cGE2MTMwYTJfaTJjX2RyaXZlcik7CiB9CiAKLU1PRFVMRV9BVVRIT1IoIlBldGVyIFVqZmFsdXNpIik7CitNT0RVTEVfQVVUSE9SKCJQZXRlciBVamZhbHVzaSA8cGV0ZXIudWpmYWx1c2lAdGkuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJUUEE2MTMwQTIgSGVhZHBob25lIGFtcGxpZmllciBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90cGE2MTMwYTIuaCBiL3NvdW5kL3NvYy9jb2RlY3MvdHBhNjEzMGEyLmgKaW5kZXggNWRmNDljOC4uNDE3NDQ0MCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90cGE2MTMwYTIuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3RwYTYxMzBhMi5oCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgTm9raWEgQ29ycG9yYXRpb24KICAqCi0gKiBBdXRob3I6IFBldGVyIFVqZmFsdXNpIDxwZXRlci51amZhbHVzaUBub2tpYS5jb20+CisgKiBBdXRob3I6IFBldGVyIFVqZmFsdXNpIDxwZXRlci51amZhbHVzaUB0aS5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdHdsNjA0MC5jIGIvc291bmQvc29jL2NvZGVjcy90d2w2MDQwLmMKaW5kZXggMjU1OTAxYy4uNGMzMzY2MyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90d2w2MDQwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy90d2w2MDQwLmMKQEAgLTk2MCw5ICs5NjAsOSBAQAogCiAvKgogICogQUZNR0FJTiB2b2x1bWUgY29udHJvbDoKLSAqIGZyb20gMTggdG8gMjQgZEIgaW4gNiBkQiBzdGVwcworICogZnJvbSAtMTggdG8gMjQgZEIgaW4gNiBkQiBzdGVwcwogICovCi1zdGF0aWMgREVDTEFSRV9UTFZfREJfU0NBTEUoYWZtX2FtcF90bHYsIDE4MDAsIDYwMCwgMCk7CitzdGF0aWMgREVDTEFSRV9UTFZfREJfU0NBTEUoYWZtX2FtcF90bHYsIC0xODAwLCA2MDAsIDApOwogCiAvKgogICogSFNHQUlOIHZvbHVtZSBjb250cm9sOgpAQCAtMTA0OSw3ICsxMDQ5LDcgQEAKIAogCS8qIEFGTSBnYWlucyAqLwogCVNPQ19ET1VCTEVfVExWKCJBdXggRk0gVm9sdW1lIiwKLQkJVFdMNjA0MF9SRUdfTElORUdBSU4sIDAsIDQsIDB4RiwgMCwgYWZtX2FtcF90bHYpLAorCQlUV0w2MDQwX1JFR19MSU5FR0FJTiwgMCwgMywgNywgMCwgYWZtX2FtcF90bHYpLAogCiAJLyogUGxheWJhY2sgZ2FpbnMgKi8KIAlTT0NfVFdMNjA0MF9ET1VCTEVfVExWKCJIZWFkc2V0IFBsYXliYWNrIFZvbHVtZSIsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtMTI1MC1ldjEuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd20xMjUwLWV2MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ZDA3MTYKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtMTI1MC1ldjEuYwpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIERyaXZlciBmb3IgdGhlIDEyNTAtRVYxIGF1ZGlvIEkvTyBtb2R1bGUKKyAqCisgKiBDb3B5cmlnaHQgMjAxMSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgcGxjCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgd20xMjUwX2V2MV9kYXBtX3dpZGdldHNbXSA9IHsKK1NORF9TT0NfREFQTV9BREMoIkFEQyIsICJ3bTEyNTAtZXYxIENhcHR1cmUiLCBTTkRfU09DX05PUE0sIDAsIDApLAorU05EX1NPQ19EQVBNX0RBQygiREFDIiwgIndtMTI1MC1ldjEgUGxheWJhY2siLCBTTkRfU09DX05PUE0sIDAsIDApLAorCitTTkRfU09DX0RBUE1fSU5QVVQoIldNMTI1MCBJbnB1dCIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJXTTEyNTAgT3V0cHV0IiksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSB3bTEyNTBfZXYxX2RhcG1fcm91dGVzW10gPSB7CisJeyAiQURDIiwgTlVMTCwgIldNMTI1MCBJbnB1dCIgfSwKKwl7ICJXTTEyNTAgT3V0cHV0IiwgTlVMTCwgIkRBQyIgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyIHdtMTI1MF9ldjFfZGFpID0geworCS5uYW1lID0gIndtMTI1MC1ldjEiLAorCS5wbGF5YmFjayA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIlBsYXliYWNrIiwKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAxLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwLAorCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCX0sCisJLmNhcHR1cmUgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJDYXB0dXJlIiwKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAxLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwLAorCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWNfZHJpdmVyIHNvY19jb2RlY19kZXZfd20xMjUwX2V2MSA9IHsKKwkuZGFwbV93aWRnZXRzID0gd20xMjUwX2V2MV9kYXBtX3dpZGdldHMsCisJLm51bV9kYXBtX3dpZGdldHMgPSBBUlJBWV9TSVpFKHdtMTI1MF9ldjFfZGFwbV93aWRnZXRzKSwKKwkuZGFwbV9yb3V0ZXMgPSB3bTEyNTBfZXYxX2RhcG1fcm91dGVzLAorCS5udW1fZGFwbV9yb3V0ZXMgPSBBUlJBWV9TSVpFKHdtMTI1MF9ldjFfZGFwbV9yb3V0ZXMpLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgd20xMjUwX2V2MV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlyZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9jb2RlYygmaTJjLT5kZXYsICZzb2NfY29kZWNfZGV2X3dtMTI1MF9ldjEsCisJCQkJICAgICAgJndtMTI1MF9ldjFfZGFpLCAxKTsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgd20xMjUwX2V2MV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmkyYykKK3sKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoJmkyYy0+ZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgd20xMjUwX2V2MV9pMmNfaWRbXSA9IHsKKwl7ICJ3bTEyNTAtZXYxIiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB3bTEyNTBfZXYxX2kyY19pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3bTEyNTBfZXYxX2kyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAid20xMjUwLWV2MSIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlID0gICAgd20xMjUwX2V2MV9wcm9iZSwKKwkucmVtb3ZlID0gICBfX2RldmV4aXRfcCh3bTEyNTBfZXYxX3JlbW92ZSksCisJLmlkX3RhYmxlID0gd20xMjUwX2V2MV9pMmNfaWQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3bTEyNTBfZXYxX21vZGluaXQodm9pZCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IGkyY19hZGRfZHJpdmVyKCZ3bTEyNTBfZXYxX2kyY19kcml2ZXIpOworCWlmIChyZXQgIT0gMCkKKwkJcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgV00xMjUwLUVWMSBJMkMgZHJpdmVyOiAlZFxuIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9Cittb2R1bGVfaW5pdCh3bTEyNTBfZXYxX21vZGluaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgd20xMjUwX2V2MV9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJndtMTI1MF9ldjFfaTJjX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh3bTEyNTBfZXYxX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiV00xMjUwLUVWMSBhdWRpbyBJL08gbW9kdWxlIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg3MTEuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzExLmMKaW5kZXggOTdjMzAzOC4uYTUzN2U0YSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg3MTEuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODcxMS5jCkBAIC03Nyw3ICs3Nyw3IEBACiBTTkRfU09DX0RBUE1fT1VUUFVUKCJSSFBPVVQiKSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGludGVyY29uW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSB3bTg3MTFfaW50ZXJjb25bXSA9IHsKIAkvKiBvdXRwdXQgbWl4ZXIgKi8KIAl7Ik91dHB1dCBNaXhlciIsICJMaW5lIEJ5cGFzcyBTd2l0Y2giLCAiTGluZSBJbnB1dCJ9LAogCXsiT3V0cHV0IE1peGVyIiwgIkhpRmkgUGxheWJhY2sgU3dpdGNoIiwgIkRBQyJ9LApAQCAtODksMTcgKzg5LDYgQEAKIAl7IkxPVVQiLCBOVUxMLCAiT3V0cHV0IE1peGVyIn0sCiB9OwogCi1zdGF0aWMgaW50IHdtODcxMV9hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0Jc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOwotCi0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB3bTg3MTFfZGFwbV93aWRnZXRzLAotCQkJCSAgQVJSQVlfU0laRSh3bTg3MTFfZGFwbV93aWRnZXRzKSk7Ci0Jc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgaW50ZXJjb24sIEFSUkFZX1NJWkUoaW50ZXJjb24pKTsKLQotCXJldHVybiAwOwotfQotCiBzdHJ1Y3QgX2NvZWZmX2RpdiB7CiAJdTMyIG1jbGs7CiAJdTMyIHJhdGU7CkBAIC0zOTgsNyArMzg3LDYgQEAKIAogCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg3MTFfc25kX2NvbnRyb2xzLAogCQkJICAgICBBUlJBWV9TSVpFKHdtODcxMV9zbmRfY29udHJvbHMpKTsKLQl3bTg3MTFfYWRkX3dpZGdldHMoY29kZWMpOwogCiAJcmV0dXJuIHJldDsKIApAQCAtNDIwLDYgKzQwOCwxMCBAQAogCS5yZWdfY2FjaGVfc2l6ZSA9IEFSUkFZX1NJWkUod204NzExX3JlZyksCiAJLnJlZ193b3JkX3NpemUgPSBzaXplb2YodTE2KSwKIAkucmVnX2NhY2hlX2RlZmF1bHQgPSB3bTg3MTFfcmVnLAorCS5kYXBtX3dpZGdldHMgPSB3bTg3MTFfZGFwbV93aWRnZXRzLAorCS5udW1fZGFwbV93aWRnZXRzID0gQVJSQVlfU0laRSh3bTg3MTFfZGFwbV93aWRnZXRzKSwKKwkuZGFwbV9yb3V0ZXMgPSB3bTg3MTFfaW50ZXJjb24sCisJLm51bV9kYXBtX3JvdXRlcyA9IEFSUkFZX1NJWkUod204NzExX2ludGVyY29uKSwKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg3MjguYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzI4LmMKaW5kZXggNzM2YjAzNS4uODZkNDcxOCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg3MjguYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODcyOC5jCkBAIC02NSwyMiArNjUsMTEgQEAKIFNORF9TT0NfREFQTV9PVVRQVVQoIlZPVVRSIiksCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBpbnRlcmNvbltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgd204NzI4X2ludGVyY29uW10gPSB7CiAJeyJWT1VUTCIsIE5VTEwsICJEQUMifSwKIAl7IlZPVVRSIiwgTlVMTCwgIkRBQyJ9LAogfTsKIAotc3RhdGljIGludCB3bTg3MjhfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKLQotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd204NzI4X2RhcG1fd2lkZ2V0cywKLQkJCQkgIEFSUkFZX1NJWkUod204NzI4X2RhcG1fd2lkZ2V0cykpOwotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGludGVyY29uLCBBUlJBWV9TSVpFKGludGVyY29uKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB3bTg3MjhfbXV0ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgaW50IG11dGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKQEAgLTI1NSw3ICsyNDQsNiBAQAogCiAJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODcyOF9zbmRfY29udHJvbHMsCiAJCQkJQVJSQVlfU0laRSh3bTg3Mjhfc25kX2NvbnRyb2xzKSk7Ci0Jd204NzI4X2FkZF93aWRnZXRzKGNvZGVjKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yNzUsNiArMjYzLDEwIEBACiAJLnJlZ19jYWNoZV9zaXplID0gQVJSQVlfU0laRSh3bTg3MjhfcmVnX2RlZmF1bHRzKSwKIAkucmVnX3dvcmRfc2l6ZSA9IHNpemVvZih1MTYpLAogCS5yZWdfY2FjaGVfZGVmYXVsdCA9IHdtODcyOF9yZWdfZGVmYXVsdHMsCisJLmRhcG1fd2lkZ2V0cyA9IHdtODcyOF9kYXBtX3dpZGdldHMsCisJLm51bV9kYXBtX3dpZGdldHMgPSBBUlJBWV9TSVpFKHdtODcyOF9kYXBtX3dpZGdldHMpLAorCS5kYXBtX3JvdXRlcyA9IHdtODcyOF9pbnRlcmNvbiwKKwkubnVtX2RhcG1fcm91dGVzID0gQVJSQVlfU0laRSh3bTg3MjhfaW50ZXJjb24pLAogfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODczMS5jIGIvc291bmQvc29jL2NvZGVjcy93bTg3MzEuYwppbmRleCAwYTY3YzMxLi42ZGVjN2NlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODczMS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzMxLmMKQEAgLTIwMSw3ICsyMDEsNyBAQAogCXJldHVybiB3bTg3MzEtPnN5c2Nsa190eXBlID09IFdNODczMV9TWVNDTEtfTUNMSzsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgaW50ZXJjb25bXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIHdtODczMV9pbnRlcmNvbltdID0gewogCXsiREFDIiwgTlVMTCwgIk9TQyIsIHdtODczMV9jaGVja19vc2N9LAogCXsiQURDIiwgTlVMTCwgIk9TQyIsIHdtODczMV9jaGVja19vc2N9LAogCkBAIC0yMjcsMTcgKzIyNyw2IEBACiAJeyJNaWMgQmlhcyIsIE5VTEwsICJNSUNJTiJ9LAogfTsKIAotc3RhdGljIGludCB3bTg3MzFfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKLQotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd204NzMxX2RhcG1fd2lkZ2V0cywKLQkJCQkgIEFSUkFZX1NJWkUod204NzMxX2RhcG1fd2lkZ2V0cykpOwotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGludGVyY29uLCBBUlJBWV9TSVpFKGludGVyY29uKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RydWN0IF9jb2VmZl9kaXYgewogCXUzMiBtY2xrOwogCXUzMiByYXRlOwpAQCAtNTk5LDcgKzU4OCw2IEBACiAKIAlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204NzMxX3NuZF9jb250cm9scywKIAkJCSAgICAgQVJSQVlfU0laRSh3bTg3MzFfc25kX2NvbnRyb2xzKSk7Ci0Jd204NzMxX2FkZF93aWRnZXRzKGNvZGVjKTsKIAogCS8qIFJlZ3VsYXRvcnMgd2lsbCBoYXZlIGJlZW4gZW5hYmxlZCBieSBiaWFzIG1hbmFnZW1lbnQgKi8KIAlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUod204NzMxLT5zdXBwbGllcyksIHdtODczMS0+c3VwcGxpZXMpOwpAQCAtNjM2LDYgKzYyNCwxMCBAQAogCS5yZWdfY2FjaGVfc2l6ZSA9IEFSUkFZX1NJWkUod204NzMxX3JlZyksCiAJLnJlZ193b3JkX3NpemUgPSBzaXplb2YodTE2KSwKIAkucmVnX2NhY2hlX2RlZmF1bHQgPSB3bTg3MzFfcmVnLAorCS5kYXBtX3dpZGdldHMgPSB3bTg3MzFfZGFwbV93aWRnZXRzLAorCS5udW1fZGFwbV93aWRnZXRzID0gQVJSQVlfU0laRSh3bTg3MzFfZGFwbV93aWRnZXRzKSwKKwkuZGFwbV9yb3V0ZXMgPSB3bTg3MzFfaW50ZXJjb24sCisJLm51bV9kYXBtX3JvdXRlcyA9IEFSUkFZX1NJWkUod204NzMxX2ludGVyY29uKSwKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQpAQCAtNjY3LDcgKzY1OSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciB3bTg3MzFfc3BpX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewotCQkubmFtZQk9ICJ3bTg3MzEtY29kZWMiLAorCQkubmFtZQk9ICJ3bTg3MzEiLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogCS5wcm9iZQkJPSB3bTg3MzFfc3BpX3Byb2JlLApAQCAtNzExLDcgKzcwMyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3bTg3MzFfaTJjX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewotCQkubmFtZSA9ICJ3bTg3MzEtY29kZWMiLAorCQkubmFtZSA9ICJ3bTg3MzEiLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCS5wcm9iZSA9ICAgIHdtODczMV9pMmNfcHJvYmUsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDMuYwppbmRleCA4MjRkMWM4Li40M2UzZDc2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmMKQEAgLTM4Miw3ICszODIsOCBAQAogc3RhdGljIGludCB3bTg5MDNfY2xhc3Nfd19wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqd2lkZ2V0ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0X2xpc3QgKndsaXN0ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3aWRnZXQgPSB3bGlzdC0+d2lkZ2V0c1swXTsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3aWRnZXQtPmNvZGVjOwogCXN0cnVjdCB3bTg5MDNfcHJpdiAqd204OTAzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAJdTE2IHJlZzsKQEAgLTYzNCw2ICs2MzUsMTMgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gcnNpZGV0b25lX2VudW0gPQogCVNPQ19FTlVNX1NJTkdMRShXTTg5MDNfREFDX0RJR0lUQUxfMCwgMCwgMywgc2lkZXRvbmVfdGV4dCk7CiAKK3N0YXRpYyBjb25zdCBjaGFyICphZGNpbnB1dF90ZXh0W10gPSB7CisJIkFEQyIsICJETUlDIgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhZGNpbnB1dF9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTAzX0NMT0NLX1JBVEVfVEVTVF80LCA5LCAyLCBhZGNpbnB1dF90ZXh0KTsKKwogc3RhdGljIGNvbnN0IGNoYXIgKmFpZl90ZXh0W10gPSB7CiAJIkxlZnQiLCAiUmlnaHQiCiB9OwpAQCAtNzY3LDYgKzc3NSw5IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcnNpZGV0b25lX211eCA9CiAJU09DX0RBUE1fRU5VTSgiREFDUiBTaWRldG9uZSBNdXgiLCByc2lkZXRvbmVfZW51bSk7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZGNpbnB1dF9tdXggPQorCVNPQ19EQVBNX0VOVU0oIkFEQyBJbnB1dCIsIGFkY2lucHV0X2VudW0pOworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbGNhcHR1cmVfbXV4ID0KIAlTT0NfREFQTV9FTlVNKCJMZWZ0IENhcHR1cmUgTXV4IiwgbGNhcHR1cmVfZW51bSk7CiAKQEAgLTgxNyw2ICs4MjgsNyBAQAogU05EX1NPQ19EQVBNX0lOUFVUKCJJTjJSIiksCiBTTkRfU09DX0RBUE1fSU5QVVQoIklOM0wiKSwKIFNORF9TT0NfREFQTV9JTlBVVCgiSU4zUiIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJETUlDREFUIiksCiAKIFNORF9TT0NfREFQTV9PVVRQVVQoIkhQT1VUTCIpLAogU05EX1NPQ19EQVBNX09VVFBVVCgiSFBPVVRSIiksCkBAIC04NDIsNiArODU0LDkgQEAKIFNORF9TT0NfREFQTV9QR0EoIkxlZnQgSW5wdXQgUEdBIiwgV004OTAzX1BPV0VSX01BTkFHRU1FTlRfMCwgMSwgMCwgTlVMTCwgMCksCiBTTkRfU09DX0RBUE1fUEdBKCJSaWdodCBJbnB1dCBQR0EiLCBXTTg5MDNfUE9XRVJfTUFOQUdFTUVOVF8wLCAwLCAwLCBOVUxMLCAwKSwKIAorU05EX1NPQ19EQVBNX01VWCgiTGVmdCBBREMgSW5wdXQiLCBTTkRfU09DX05PUE0sIDAsIDAsICZhZGNpbnB1dF9tdXgpLAorU05EX1NPQ19EQVBNX01VWCgiUmlnaHQgQURDIElucHV0IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmYWRjaW5wdXRfbXV4KSwKKwogU05EX1NPQ19EQVBNX0FEQygiQURDTCIsIE5VTEwsIFdNODkwM19QT1dFUl9NQU5BR0VNRU5UXzYsIDEsIDApLAogU05EX1NPQ19EQVBNX0FEQygiQURDUiIsIE5VTEwsIFdNODkwM19QT1dFUl9NQU5BR0VNRU5UXzYsIDAsIDApLAogCkBAIC05MzAsNyArOTQ1LDcgQEAKIFNORF9TT0NfREFQTV9TVVBQTFkoIkNMS19TWVMiLCBXTTg5MDNfQ0xPQ0tfUkFURVNfMiwgMiwgMCwgTlVMTCwgMCksCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBpbnRlcmNvbltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgd204OTAzX2ludGVyY29uW10gPSB7CiAKIAl7ICJDTEtfRFNQIiwgTlVMTCwgIkNMS19TWVMiIH0sCiAJeyAiTWljIEJpYXMiLCBOVUxMLCAiQ0xLX1NZUyIgfSwKQEAgLTk3OSw2ICs5OTQsMTEgQEAKIAl7ICJMZWZ0IElucHV0IFBHQSIsIE5VTEwsICJMZWZ0IElucHV0IE1vZGUgTXV4IiB9LAogCXsgIlJpZ2h0IElucHV0IFBHQSIsIE5VTEwsICJSaWdodCBJbnB1dCBNb2RlIE11eCIgfSwKIAorCXsgIkxlZnQgQURDIElucHV0IiwgIkFEQyIsICJMZWZ0IElucHV0IFBHQSIgfSwKKwl7ICJMZWZ0IEFEQyBJbnB1dCIsICJETUlDIiwgIkRNSUNEQVQiIH0sCisJeyAiUmlnaHQgQURDIElucHV0IiwgIkFEQyIsICJSaWdodCBJbnB1dCBQR0EiIH0sCisJeyAiUmlnaHQgQURDIElucHV0IiwgIkRNSUMiLCAiRE1JQ0RBVCIgfSwKKwogCXsgIkxlZnQgQ2FwdHVyZSBNdXgiLCAiTGVmdCIsICJBRENMIiB9LAogCXsgIkxlZnQgQ2FwdHVyZSBNdXgiLCAiUmlnaHQiLCAiQURDUiIgfSwKIApAQCAtOTg4LDkgKzEwMDgsOSBAQAogCXsgIkFJRlRYTCIsIE5VTEwsICJMZWZ0IENhcHR1cmUgTXV4IiB9LAogCXsgIkFJRlRYUiIsIE5VTEwsICJSaWdodCBDYXB0dXJlIE11eCIgfSwKIAotCXsgIkFEQ0wiLCBOVUxMLCAiTGVmdCBJbnB1dCBQR0EiIH0sCisJeyAiQURDTCIsIE5VTEwsICJMZWZ0IEFEQyBJbnB1dCIgfSwKIAl7ICJBRENMIiwgTlVMTCwgIkNMS19EU1AiIH0sCi0JeyAiQURDUiIsIE5VTEwsICJSaWdodCBJbnB1dCBQR0EiIH0sCisJeyAiQURDUiIsIE5VTEwsICJSaWdodCBBREMgSW5wdXQiIH0sCiAJeyAiQURDUiIsIE5VTEwsICJDTEtfRFNQIiB9LAogCiAJeyAiTGVmdCBQbGF5YmFjayBNdXgiLCAiTGVmdCIsICJBSUZSWEwiIH0sCkBAIC0xMDg3LDE3ICsxMTA3LDYgQEAKIAl7ICJSaWdodCBMaW5lIE91dHB1dCBQR0EiLCBOVUxMLCAiQ2hhcmdlIFB1bXAiIH0sCiB9OwogCi1zdGF0aWMgaW50IHdtODkwM19hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0Jc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOwotCi0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB3bTg5MDNfZGFwbV93aWRnZXRzLAotCQkJCSAgQVJSQVlfU0laRSh3bTg5MDNfZGFwbV93aWRnZXRzKSk7Ci0Jc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgaW50ZXJjb24sIEFSUkFZX1NJWkUoaW50ZXJjb24pKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHdtODkwM19zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCiAJCQkJIGVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQogewpAQCAtMjAyOCw3ICsyMDM3LDYgQEAKIAogCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg5MDNfc25kX2NvbnRyb2xzLAogCQkJCUFSUkFZX1NJWkUod204OTAzX3NuZF9jb250cm9scykpOwotCXdtODkwM19hZGRfd2lkZ2V0cyhjb2RlYyk7CiAKIAl3bTg5MDNfaW5pdF9ncGlvKGNvZGVjKTsKIApAQCAtMjA1NCw2ICsyMDYyLDEwIEBACiAJLnJlZ19jYWNoZV9kZWZhdWx0ID0gd204OTAzX3JlZ19kZWZhdWx0cywKIAkudm9sYXRpbGVfcmVnaXN0ZXIgPSB3bTg5MDNfdm9sYXRpbGVfcmVnaXN0ZXIsCiAJLnNlcV9ub3RpZmllciA9IHdtODkwM19zZXFfbm90aWZpZXIsCisJLmRhcG1fd2lkZ2V0cyA9IHdtODkwM19kYXBtX3dpZGdldHMsCisJLm51bV9kYXBtX3dpZGdldHMgPSBBUlJBWV9TSVpFKHdtODkwM19kYXBtX3dpZGdldHMpLAorCS5kYXBtX3JvdXRlcyA9IHdtODkwM19pbnRlcmNvbiwKKwkubnVtX2RhcG1fcm91dGVzID0gQVJSQVlfU0laRSh3bTg5MDNfaW50ZXJjb24pLAogfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTE1LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkxNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYzliZDgKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkxNS5jCkBAIC0wLDAgKzEsMjkzMSBAQAorLyoKKyAqIHdtODkxNS5jIC0gV004OTE1IGF1ZGlvIGNvZGVjIGludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCAyMDExIFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKiBBdXRob3I6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L2djZC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvamFjay5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvdGx2Lmg+CisjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL2Fzb2MuaD4KKworI2luY2x1ZGUgPHNvdW5kL3dtODkxNS5oPgorI2luY2x1ZGUgIndtODkxNS5oIgorCisjZGVmaW5lIFdNODkxNV9BSUZTIDIKKworI2RlZmluZSBIUE9VVDFMIDEKKyNkZWZpbmUgSFBPVVQxUiAyCisjZGVmaW5lIEhQT1VUMkwgNAorI2RlZmluZSBIUE9VVDJSIDgKKworI2RlZmluZSBXTTg5MTVfTlVNX1NVUFBMSUVTIDYKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5MTVfc3VwcGx5X25hbWVzW1dNODkxNV9OVU1fU1VQUExJRVNdID0geworCSJEQ1ZERCIsCisJIkRCVkREIiwKKwkiQVZERDEiLAorCSJBVkREMiIsCisJIkNQVkREIiwKKwkiTUlDVkREIiwKK307CisKK3N0cnVjdCB3bTg5MTVfcHJpdiB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCisJaW50IGxkbzFlbmE7CisKKwlpbnQgc3lzY2xrOworCisJaW50IGZsbF9zcmM7CisJaW50IGZsbF9mcmVmOworCWludCBmbGxfZm91dDsKKworCXN0cnVjdCBjb21wbGV0aW9uIGZsbF9sb2NrOworCisJdTE2IGRjc19wZW5kaW5nOworCXN0cnVjdCBjb21wbGV0aW9uIGRjc19kb25lOworCisJdTE2IGhwb3V0X2VuYTsKKwl1MTYgaHBvdXRfcGVuZGluZzsKKworCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHN1cHBsaWVzW1dNODkxNV9OVU1fU1VQUExJRVNdOworCXN0cnVjdCBub3RpZmllcl9ibG9jayBkaXNhYmxlX25iW1dNODkxNV9OVU1fU1VQUExJRVNdOworCisJc3RydWN0IHdtODkxNV9wZGF0YSBwZGF0YTsKKworCWludCByeF9yYXRlW1dNODkxNV9BSUZTXTsKKworCS8qIFBsYXRmb3JtIGRlcGVuZGFudCBSZVR1bmUgbW9iaWxlIGNvbmZpZ3VyYXRpb24gKi8KKwlpbnQgbnVtX3JldHVuZV9tb2JpbGVfdGV4dHM7CisJY29uc3QgY2hhciAqKnJldHVuZV9tb2JpbGVfdGV4dHM7CisJaW50IHJldHVuZV9tb2JpbGVfY2ZnWzJdOworCXN0cnVjdCBzb2NfZW51bSByZXR1bmVfbW9iaWxlX2VudW07CisKKwlzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrOworCWJvb2wgZGV0ZWN0aW5nOworCWJvb2wgamFja19taWM7CisJd204OTE1X3BvbGFyaXR5X2ZuIHBvbGFyaXR5X2NiOworCisjaWZkZWYgQ09ORklHX0dQSU9MSUIKKwlzdHJ1Y3QgZ3Bpb19jaGlwIGdwaW9fY2hpcDsKKyNlbmRpZgorfTsKKworLyogV2UgY2FuJ3QgdXNlIHRoZSBzYW1lIG5vdGlmaWVyIGJsb2NrIGZvciBtb3JlIHRoYW4gb25lIHN1cHBseSBhbmQKKyAqIHRoZXJlJ3Mgbm8gd2F5IEkgY2FuIHNlZSB0byBnZXQgZnJvbSBhIGNhbGxiYWNrIHRvIHRoZSBjYWxsZXIKKyAqIGV4Y2VwdCBjb250YWluZXJfb2YoKS4KKyAqLworI2RlZmluZSBXTTg5MTVfUkVHVUxBVE9SX0VWRU5UKG4pIFwKK3N0YXRpYyBpbnQgd204OTE1X3JlZ3VsYXRvcl9ldmVudF8jI24oc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgXAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpkYXRhKQlcCit7IFwKKwlzdHJ1Y3Qgd204OTE1X3ByaXYgKndtODkxNSA9IGNvbnRhaW5lcl9vZihuYiwgc3RydWN0IHdtODkxNV9wcml2LCBcCisJCQkJCQkgIGRpc2FibGVfbmJbbl0pOyBcCisJaWYgKGV2ZW50ICYgUkVHVUxBVE9SX0VWRU5UX0RJU0FCTEUpIHsgXAorCQl3bTg5MTUtPmNvZGVjLT5jYWNoZV9zeW5jID0gMTsgXAorCX0gXAorCXJldHVybiAwOyBcCit9CisKK1dNODkxNV9SRUdVTEFUT1JfRVZFTlQoMCkKK1dNODkxNV9SRUdVTEFUT1JfRVZFTlQoMSkKK1dNODkxNV9SRUdVTEFUT1JfRVZFTlQoMikKK1dNODkxNV9SRUdVTEFUT1JfRVZFTlQoMykKK1dNODkxNV9SRUdVTEFUT1JfRVZFTlQoNCkKK1dNODkxNV9SRUdVTEFUT1JfRVZFTlQoNSkKKworc3RhdGljIGNvbnN0IHUxNiB3bTg5MTVfcmVnW1dNODkxNV9NQVhfUkVHSVNURVJdID0geworCVtXTTg5MTVfU09GVFdBUkVfUkVTRVRdID0gMHg4OTE1LAorCVtXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF83XSA9IDB4MTAsCisJW1dNODkxNV9EQUMxX0hQT1VUMV9WT0xVTUVdID0gMHg4OCwKKwlbV004OTE1X0RBQzJfSFBPVVQyX1ZPTFVNRV0gPSAweDg4LAorCVtXTTg5MTVfREFDMV9MRUZUX1ZPTFVNRV0gPSAweDJjMCwKKwlbV004OTE1X0RBQzFfUklHSFRfVk9MVU1FXSA9IDB4MmMwLAorCVtXTTg5MTVfREFDMl9MRUZUX1ZPTFVNRV0gPSAweDJjMCwKKwlbV004OTE1X0RBQzJfUklHSFRfVk9MVU1FXSA9IDB4MmMwLAorCVtXTTg5MTVfT1VUUFVUMV9MRUZUX1ZPTFVNRV0gPSAweDgwLAorCVtXTTg5MTVfT1VUUFVUMV9SSUdIVF9WT0xVTUVdID0gMHg4MCwKKwlbV004OTE1X09VVFBVVDJfTEVGVF9WT0xVTUVdID0gMHg4MCwKKwlbV004OTE1X09VVFBVVDJfUklHSFRfVk9MVU1FXSA9IDB4ODAsCisJW1dNODkxNV9NSUNCSUFTXzFdID0gMHgzOSwKKwlbV004OTE1X01JQ0JJQVNfMl0gPSAweDM5LAorCVtXTTg5MTVfTERPXzFdID0gMHgzLAorCVtXTTg5MTVfTERPXzJdID0gMHgxMywKKwlbV004OTE1X0FDQ0VTU09SWV9ERVRFQ1RfTU9ERV8xXSA9IDB4NCwKKwlbV004OTE1X0hFQURQSE9ORV9ERVRFQ1RfMV0gPSAweDIwLAorCVtXTTg5MTVfTUlDX0RFVEVDVF8xXSA9IDB4NzYwMCwKKwlbV004OTE1X01JQ19ERVRFQ1RfMl0gPSAweGJmLAorCVtXTTg5MTVfQ0hBUkdFX1BVTVBfMV0gPSAweDFmMjUsCisJW1dNODkxNV9DSEFSR0VfUFVNUF8yXSA9IDB4YWIxOSwKKwlbV004OTE1X0RDX1NFUlZPXzVdID0gMHgyYTJhLAorCVtXTTg5MTVfQ09OVFJPTF9JTlRFUkZBQ0VfMV0gPSAweDgwMDQsCisJW1dNODkxNV9DTE9DS0lOR18xXSA9IDB4MTAsCisJW1dNODkxNV9BSUZfUkFURV0gPSAweDgzLAorCVtXTTg5MTVfRkxMX0NPTlRST0xfNF0gPSAweDVkYzAsCisJW1dNODkxNV9GTExfQ09OVFJPTF81XSA9IDB4Yzg0LAorCVtXTTg5MTVfRkxMX0VGU18yXSA9IDB4MiwKKwlbV004OTE1X0FJRjFfVFhfTFJDTEtfMV0gPSAweDgwLAorCVtXTTg5MTVfQUlGMV9UWF9MUkNMS18yXSA9IDB4OCwKKwlbV004OTE1X0FJRjFfUlhfTFJDTEtfMV0gPSAweDgwLAorCVtXTTg5MTVfQUlGMVRYX0RBVEFfQ09ORklHVVJBVElPTl8xXSA9IDB4MTgxOCwKKwlbV004OTE1X0FJRjFSWF9EQVRBX0NPTkZJR1VSQVRJT05dID0gMHgxODE4LAorCVtXTTg5MTVfQUlGMVRYX1RFU1RdID0gMHg3LAorCVtXTTg5MTVfQUlGMl9UWF9MUkNMS18xXSA9IDB4ODAsCisJW1dNODkxNV9BSUYyX1RYX0xSQ0xLXzJdID0gMHg4LAorCVtXTTg5MTVfQUlGMl9SWF9MUkNMS18xXSA9IDB4ODAsCisJW1dNODkxNV9BSUYyVFhfREFUQV9DT05GSUdVUkFUSU9OXzFdID0gMHgxODE4LAorCVtXTTg5MTVfQUlGMlJYX0RBVEFfQ09ORklHVVJBVElPTl0gPSAweDE4MTgsCisJW1dNODkxNV9BSUYyVFhfVEVTVF0gPSAweDEsCisJW1dNODkxNV9EU1AxX1RYX0xFRlRfVk9MVU1FXSA9IDB4YzAsCisJW1dNODkxNV9EU1AxX1RYX1JJR0hUX1ZPTFVNRV0gPSAweGMwLAorCVtXTTg5MTVfRFNQMV9SWF9MRUZUX1ZPTFVNRV0gPSAweGMwLAorCVtXTTg5MTVfRFNQMV9SWF9SSUdIVF9WT0xVTUVdID0gMHhjMCwKKwlbV004OTE1X0RTUDFfVFhfRklMVEVSU10gPSAweDIwMDAsCisJW1dNODkxNV9EU1AxX1JYX0ZJTFRFUlNfMV0gPSAweDIwMCwKKwlbV004OTE1X0RTUDFfUlhfRklMVEVSU18yXSA9IDB4MTAsCisJW1dNODkxNV9EU1AxX0RSQ18xXSA9IDB4OTgsCisJW1dNODkxNV9EU1AxX0RSQ18yXSA9IDB4ODQ1LAorCVtXTTg5MTVfRFNQMV9SWF9FUV9HQUlOU18xXSA9IDB4NjMxOCwKKwlbV004OTE1X0RTUDFfUlhfRVFfR0FJTlNfMl0gPSAweDYzMDAsCisJW1dNODkxNV9EU1AxX1JYX0VRX0JBTkRfMV9BXSA9IDB4ZmNhLAorCVtXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzFfQl0gPSAweDQwMCwKKwlbV004OTE1X0RTUDFfUlhfRVFfQkFORF8xX1BHXSA9IDB4ZDgsCisJW1dNODkxNV9EU1AxX1JYX0VRX0JBTkRfMl9BXSA9IDB4MWViNSwKKwlbV004OTE1X0RTUDFfUlhfRVFfQkFORF8yX0JdID0gMHhmMTQ1LAorCVtXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzJfQ10gPSAweGI3NSwKKwlbV004OTE1X0RTUDFfUlhfRVFfQkFORF8yX1BHXSA9IDB4MWM1LAorCVtXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzNfQV0gPSAweDFjNTgsCisJW1dNODkxNV9EU1AxX1JYX0VRX0JBTkRfM19CXSA9IDB4ZjM3MywKKwlbV004OTE1X0RTUDFfUlhfRVFfQkFORF8zX0NdID0gMHhhNTQsCisJW1dNODkxNV9EU1AxX1JYX0VRX0JBTkRfM19QR10gPSAweDU1OCwKKwlbV004OTE1X0RTUDFfUlhfRVFfQkFORF80X0FdID0gMHgxNjhlLAorCVtXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzRfQl0gPSAweGY4MjksCisJW1dNODkxNV9EU1AxX1JYX0VRX0JBTkRfNF9DXSA9IDB4N2FkLAorCVtXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzRfUEddID0gMHgxMTAzLAorCVtXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzVfQV0gPSAweDU2NCwKKwlbV004OTE1X0RTUDFfUlhfRVFfQkFORF81X0JdID0gMHg1NTksCisJW1dNODkxNV9EU1AxX1JYX0VRX0JBTkRfNV9QR10gPSAweDQwMDAsCisJW1dNODkxNV9EU1AyX1RYX0xFRlRfVk9MVU1FXSA9IDB4YzAsCisJW1dNODkxNV9EU1AyX1RYX1JJR0hUX1ZPTFVNRV0gPSAweGMwLAorCVtXTTg5MTVfRFNQMl9SWF9MRUZUX1ZPTFVNRV0gPSAweGMwLAorCVtXTTg5MTVfRFNQMl9SWF9SSUdIVF9WT0xVTUVdID0gMHhjMCwKKwlbV004OTE1X0RTUDJfVFhfRklMVEVSU10gPSAweDIwMDAsCisJW1dNODkxNV9EU1AyX1JYX0ZJTFRFUlNfMV0gPSAweDIwMCwKKwlbV004OTE1X0RTUDJfUlhfRklMVEVSU18yXSA9IDB4MTAsCisJW1dNODkxNV9EU1AyX0RSQ18xXSA9IDB4OTgsCisJW1dNODkxNV9EU1AyX0RSQ18yXSA9IDB4ODQ1LAorCVtXTTg5MTVfRFNQMl9SWF9FUV9HQUlOU18xXSA9IDB4NjMxOCwKKwlbV004OTE1X0RTUDJfUlhfRVFfR0FJTlNfMl0gPSAweDYzMDAsCisJW1dNODkxNV9EU1AyX1JYX0VRX0JBTkRfMV9BXSA9IDB4ZmNhLAorCVtXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzFfQl0gPSAweDQwMCwKKwlbV004OTE1X0RTUDJfUlhfRVFfQkFORF8xX1BHXSA9IDB4ZDgsCisJW1dNODkxNV9EU1AyX1JYX0VRX0JBTkRfMl9BXSA9IDB4MWViNSwKKwlbV004OTE1X0RTUDJfUlhfRVFfQkFORF8yX0JdID0gMHhmMTQ1LAorCVtXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzJfQ10gPSAweGI3NSwKKwlbV004OTE1X0RTUDJfUlhfRVFfQkFORF8yX1BHXSA9IDB4MWM1LAorCVtXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzNfQV0gPSAweDFjNTgsCisJW1dNODkxNV9EU1AyX1JYX0VRX0JBTkRfM19CXSA9IDB4ZjM3MywKKwlbV004OTE1X0RTUDJfUlhfRVFfQkFORF8zX0NdID0gMHhhNTQsCisJW1dNODkxNV9EU1AyX1JYX0VRX0JBTkRfM19QR10gPSAweDU1OCwKKwlbV004OTE1X0RTUDJfUlhfRVFfQkFORF80X0FdID0gMHgxNjhlLAorCVtXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzRfQl0gPSAweGY4MjksCisJW1dNODkxNV9EU1AyX1JYX0VRX0JBTkRfNF9DXSA9IDB4N2FkLAorCVtXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzRfUEddID0gMHgxMTAzLAorCVtXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzVfQV0gPSAweDU2NCwKKwlbV004OTE1X0RTUDJfUlhfRVFfQkFORF81X0JdID0gMHg1NTksCisJW1dNODkxNV9EU1AyX1JYX0VRX0JBTkRfNV9QR10gPSAweDQwMDAsCisJW1dNODkxNV9PVkVSU0FNUExJTkddID0gMHhkLAorCVtXTTg5MTVfU0lERVRPTkVdID0gMHgxMDQwLAorCVtXTTg5MTVfR1BJT18xXSA9IDB4YTEwMSwKKwlbV004OTE1X0dQSU9fMl0gPSAweGExMDEsCisJW1dNODkxNV9HUElPXzNdID0gMHhhMTAxLAorCVtXTTg5MTVfR1BJT180XSA9IDB4YTEwMSwKKwlbV004OTE1X0dQSU9fNV0gPSAweGExMDEsCisJW1dNODkxNV9QVUxMX0NPTlRST0xfMl0gPSAweDE0MCwKKwlbV004OTE1X0lOVEVSUlVQVF9TVEFUVVNfMV9NQVNLXSA9IDB4MWYsCisJW1dNODkxNV9JTlRFUlJVUFRfU1RBVFVTXzJfTUFTS10gPSAweDFlY2YsCisJW1dNODkxNV9SSUdIVF9QRE1fU1BFQUtFUl0gPSAweDEsCisJW1dNODkxNV9QRE1fU1BFQUtFUl9NVVRFX1NFUVVFTkNFXSA9IDB4NjksCisJW1dNODkxNV9QRE1fU1BFQUtFUl9WT0xVTUVdID0gMHg2NiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8wXSA9IDB4MSwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xXSA9IDB4MSwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zXSA9IDB4NiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl80XSA9IDB4NDAsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfNV0gPSAweDEsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfNl0gPSAweGYsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfN10gPSAweDYsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfOF0gPSAweDEsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfOV0gPSAweDMsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMTBdID0gMHgxMDQsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMTJdID0gMHg2MCwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xM10gPSAweDExLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE0XSA9IDB4NDAxLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE2XSA9IDB4NTAsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMTddID0gMHgzLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE4XSA9IDB4MTAwLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIwXSA9IDB4NTEsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjFdID0gMHgzLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIyXSA9IDB4MTA0LAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIzXSA9IDB4YSwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNF0gPSAweDYwLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI1XSA9IDB4M2IsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjZdID0gMHg1MDIsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjddID0gMHgxMDAsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjhdID0gMHgyZmZmLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMyXSA9IDB4MmZmZiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNl0gPSAweDJmZmYsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfNDBdID0gMHgyZmZmLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ0XSA9IDB4MmZmZiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl80OF0gPSAweDJmZmYsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfNTJdID0gMHgyZmZmLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzU2XSA9IDB4MmZmZiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl82MF0gPSAweDJmZmYsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfNjRdID0gMHgxLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzY1XSA9IDB4MSwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl82N10gPSAweDYsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfNjhdID0gMHg0MCwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl82OV0gPSAweDEsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfNzBdID0gMHhmLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzcxXSA9IDB4NiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl83Ml0gPSAweDEsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfNzNdID0gMHgzLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzc0XSA9IDB4MTA0LAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzc2XSA9IDB4NjAsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfNzddID0gMHgxMSwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl83OF0gPSAweDQwMSwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl84MF0gPSAweDUwLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzgxXSA9IDB4MywKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl84Ml0gPSAweDEwMCwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl84NF0gPSAweDYwLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzg1XSA9IDB4M2IsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfODZdID0gMHg1MDIsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfODddID0gMHgxMDAsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfODhdID0gMHgyZmZmLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzkyXSA9IDB4MmZmZiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl85Nl0gPSAweDJmZmYsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMTAwXSA9IDB4MmZmZiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMDRdID0gMHgyZmZmLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEwOF0gPSAweDJmZmYsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMTEyXSA9IDB4MmZmZiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMTZdID0gMHgyZmZmLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEyMF0gPSAweDJmZmYsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMTI0XSA9IDB4MmZmZiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMjhdID0gMHgxLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEyOV0gPSAweDEsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMTMxXSA9IDB4NiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMzJdID0gMHg0MCwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMzNdID0gMHgxLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEzNF0gPSAweGYsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMTM1XSA9IDB4NiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMzZdID0gMHgxLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEzN10gPSAweDMsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMTM4XSA9IDB4MTA2LAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE0MF0gPSAweDYxLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE0MV0gPSAweDExLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE0Ml0gPSAweDQwMSwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNDRdID0gMHg1MCwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNDVdID0gMHgzLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE0Nl0gPSAweDEwMiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNDhdID0gMHg1MSwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNDldID0gMHgzLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE1MF0gPSAweDEwNiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNTFdID0gMHhhLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE1Ml0gPSAweDYxLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE1M10gPSAweDNiLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE1NF0gPSAweDUwMiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNTVdID0gMHgxMDAsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMTU2XSA9IDB4MmZmZiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNjBdID0gMHgyZmZmLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE2NF0gPSAweDJmZmYsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMTY4XSA9IDB4MmZmZiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNzJdID0gMHgyZmZmLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE3Nl0gPSAweDJmZmYsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMTgwXSA9IDB4MmZmZiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xODRdID0gMHgyZmZmLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE4OF0gPSAweDJmZmYsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMTkyXSA9IDB4MSwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xOTNdID0gMHgxLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE5NV0gPSAweDYsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMTk2XSA9IDB4NDAsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMTk3XSA9IDB4MSwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xOThdID0gMHhmLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE5OV0gPSAweDYsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjAwXSA9IDB4MSwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMDFdID0gMHgzLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIwMl0gPSAweDEwNiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMDRdID0gMHg2MSwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMDVdID0gMHgxMSwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMDZdID0gMHg0MDEsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjA4XSA9IDB4NTAsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjA5XSA9IDB4MywKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMTBdID0gMHgxMDIsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjEyXSA9IDB4NjEsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjEzXSA9IDB4M2IsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjE0XSA9IDB4NTAyLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIxNV0gPSAweDEwMCwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMTZdID0gMHgyZmZmLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIyMF0gPSAweDJmZmYsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjI0XSA9IDB4MmZmZiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMjhdID0gMHgyZmZmLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIzMl0gPSAweDJmZmYsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjM2XSA9IDB4MmZmZiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNDBdID0gMHgyZmZmLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI0NF0gPSAweDJmZmYsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjQ4XSA9IDB4MmZmZiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNTJdID0gMHgyZmZmLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI1Nl0gPSAweDYwLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI1OF0gPSAweDYwMSwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNjBdID0gMHg1MCwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNjJdID0gMHgxMDAsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjY0XSA9IDB4MSwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNjZdID0gMHgxMDQsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjY3XSA9IDB4MTAwLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI2OF0gPSAweDJmZmYsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjcyXSA9IDB4MmZmZiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNzZdID0gMHgyZmZmLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI4MF0gPSAweDJmZmYsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjg0XSA9IDB4MmZmZiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yODhdID0gMHgyZmZmLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI5Ml0gPSAweDJmZmYsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjk2XSA9IDB4MmZmZiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMDBdID0gMHgyZmZmLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMwNF0gPSAweDJmZmYsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMzA4XSA9IDB4MmZmZiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMTJdID0gMHgyZmZmLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMxNl0gPSAweDJmZmYsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMzIwXSA9IDB4NjEsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMzIyXSA9IDB4NjAxLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMyNF0gPSAweDUwLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMyNl0gPSAweDEwMiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMjhdID0gMHgxLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMzMF0gPSAweDEwNiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMzFdID0gMHgxMDAsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMzMyXSA9IDB4MmZmZiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMzZdID0gMHgyZmZmLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM0MF0gPSAweDJmZmYsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMzQ0XSA9IDB4MmZmZiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNDhdID0gMHgyZmZmLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM1Ml0gPSAweDJmZmYsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMzU2XSA9IDB4MmZmZiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNjBdID0gMHgyZmZmLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM2NF0gPSAweDJmZmYsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMzY4XSA9IDB4MmZmZiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNzJdID0gMHgyZmZmLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM3Nl0gPSAweDJmZmYsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMzgwXSA9IDB4MmZmZiwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zODRdID0gMHg2MCwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zODZdID0gMHg2MDEsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMzg4XSA9IDB4NjEsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMzkwXSA9IDB4NjAxLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM5Ml0gPSAweDUwLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM5NF0gPSAweDMwMCwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zOTZdID0gMHgxLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM5OF0gPSAweDMwNCwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl80MDBdID0gMHg0MCwKKwlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl80MDJdID0gMHhmLAorCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQwNF0gPSAweDEsCisJW1dNODkxNV9XUklURV9TRVFVRU5DRVJfNDA3XSA9IDB4MTAwLAorfTsKKworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGlucGdhX3RsdiwgMCwgMTAwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShzaWRldG9uZV90bHYsIC0zNjAwLCAxNTAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGRpZ2l0YWxfdGx2LCAtNzIwMCwgNzUsIDEpOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKG91dF9kaWdpdGFsX3RsdiwgLTEyMDAsIDE1MCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUob3V0X3RsdiwgLTkwMCwgNzUsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKHNwa190bHYsIC05MDAsIDE1MCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoZXFfdGx2LCAtMTIwMCwgMTAwLCAwKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnNpZGV0b25lX2hwZl90ZXh0W10gPSB7CisJIjIuOWtIeiIsICIxLjVrSHoiLCAiNzM1SHoiLCAiNDAzSHoiLCAiMTk2SHoiLCAiOThIeiIsICI0OUh6IgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBzaWRldG9uZV9ocGYgPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MTVfU0lERVRPTkUsIDcsIDYsIHNpZGV0b25lX2hwZl90ZXh0KTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmhwZl9tb2RlX3RleHRbXSA9IHsKKwkiSGlGaSIsICJDdXN0b20iLCAiVm9pY2UiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRzcDF0eF9ocGZfbW9kZSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODkxNV9EU1AxX1RYX0ZJTFRFUlMsIDMsIDMsIGhwZl9tb2RlX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRzcDJ0eF9ocGZfbW9kZSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODkxNV9EU1AyX1RYX0ZJTFRFUlMsIDMsIDMsIGhwZl9tb2RlX3RleHQpOworCitzdGF0aWMgY29uc3QgY2hhciAqaHBmX2N1dG9mZl90ZXh0W10gPSB7CisJIjUwSHoiLCAiNzVIeiIsICIxMDBIeiIsICIxNTBIeiIsICIyMDBIeiIsICIzMDBIeiIsICI0MDBIeiIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gZHNwMXR4X2hwZl9jdXRvZmYgPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MTVfRFNQMV9UWF9GSUxURVJTLCAwLCA3LCBocGZfY3V0b2ZmX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRzcDJ0eF9ocGZfY3V0b2ZmID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTE1X0RTUDJfVFhfRklMVEVSUywgMCwgNywgaHBmX2N1dG9mZl90ZXh0KTsKKworc3RhdGljIHZvaWQgd204OTE1X3NldF9yZXR1bmVfbW9iaWxlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IGJsb2NrKQoreworCXN0cnVjdCB3bTg5MTVfcHJpdiAqd204OTE1ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJc3RydWN0IHdtODkxNV9wZGF0YSAqcGRhdGEgPSAmd204OTE1LT5wZGF0YTsKKwlpbnQgYmFzZSwgYmVzdCwgYmVzdF92YWwsIHNhdmUsIGksIGNmZywgaWZhY2U7CisKKwlpZiAoIXdtODkxNS0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHMpCisJCXJldHVybjsKKworCXN3aXRjaCAoYmxvY2spIHsKKwljYXNlIDA6CisJCWJhc2UgPSBXTTg5MTVfRFNQMV9SWF9FUV9HQUlOU18xOworCQlpZiAoc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF84KSAmCisJCSAgICBXTTg5MTVfRFNQMVJYX1NSQykKKwkJCWlmYWNlID0gMTsKKwkJZWxzZQorCQkJaWZhY2UgPSAwOworCQlicmVhazsKKwljYXNlIDE6CisJCWJhc2UgPSBXTTg5MTVfRFNQMV9SWF9FUV9HQUlOU18yOworCQlpZiAoc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF84KSAmCisJCSAgICBXTTg5MTVfRFNQMlJYX1NSQykKKwkJCWlmYWNlID0gMTsKKwkJZWxzZQorCQkJaWZhY2UgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCisJLyogRmluZCB0aGUgdmVyc2lvbiBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNvbmZpZ3VyYXRpb24KKwkgKiB3aXRoIHRoZSBuZWFyZXN0IHNhbXBsZSByYXRlLiAqLworCWNmZyA9IHdtODkxNS0+cmV0dW5lX21vYmlsZV9jZmdbYmxvY2tdOworCWJlc3QgPSAwOworCWJlc3RfdmFsID0gSU5UX01BWDsKKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV9yZXR1bmVfbW9iaWxlX2NmZ3M7IGkrKykgeworCQlpZiAoc3RyY21wKHBkYXRhLT5yZXR1bmVfbW9iaWxlX2NmZ3NbaV0ubmFtZSwKKwkJCSAgIHdtODkxNS0+cmV0dW5lX21vYmlsZV90ZXh0c1tjZmddKSA9PSAwICYmCisJCSAgICBhYnMocGRhdGEtPnJldHVuZV9tb2JpbGVfY2Znc1tpXS5yYXRlCisJCQktIHdtODkxNS0+cnhfcmF0ZVtpZmFjZV0pIDwgYmVzdF92YWwpIHsKKwkJCWJlc3QgPSBpOworCQkJYmVzdF92YWwgPSBhYnMocGRhdGEtPnJldHVuZV9tb2JpbGVfY2Znc1tpXS5yYXRlCisJCQkJICAgICAgIC0gd204OTE1LT5yeF9yYXRlW2lmYWNlXSk7CisJCX0KKwl9CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJSZVR1bmUgTW9iaWxlICVkICVzLyVkSHogZm9yICVkSHogc2FtcGxlIHJhdGVcbiIsCisJCWJsb2NrLAorCQlwZGF0YS0+cmV0dW5lX21vYmlsZV9jZmdzW2Jlc3RdLm5hbWUsCisJCXBkYXRhLT5yZXR1bmVfbW9iaWxlX2NmZ3NbYmVzdF0ucmF0ZSwKKwkJd204OTE1LT5yeF9yYXRlW2lmYWNlXSk7CisKKwkvKiBUaGUgRVEgd2lsbCBiZSBkaXNhYmxlZCB3aGlsZSByZWNvbmZpZ3VyaW5nIGl0LCByZW1lbWJlciB0aGUKKwkgKiBjdXJyZW50IGNvbmZpZ3VyYXRpb24uIAorCSAqLworCXNhdmUgPSBzbmRfc29jX3JlYWQoY29kZWMsIGJhc2UpOworCXNhdmUgJj0gV004OTE1X0RTUDFSWF9FUV9FTkE7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZGF0YS0+cmV0dW5lX21vYmlsZV9jZmdzW2Jlc3RdLnJlZ3MpOyBpKyspCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIGJhc2UgKyBpLCAweGZmZmYsCisJCQkJICAgIHBkYXRhLT5yZXR1bmVfbW9iaWxlX2NmZ3NbYmVzdF0ucmVnc1tpXSk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBiYXNlLCBXTTg5MTVfRFNQMVJYX0VRX0VOQSwgc2F2ZSk7Cit9CisKKy8qIElja3kgYXMgaGVsbCBidXQgc2F2ZXMgY29kZSBkdXBsaWNhdGlvbiAqLworc3RhdGljIGludCB3bTg5MTVfZ2V0X3JldHVuZV9tb2JpbGVfYmxvY2soY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpZiAoc3RyY21wKG5hbWUsICJEU1AxIEVRIE1vZGUiKSA9PSAwKQorCQlyZXR1cm4gMDsKKwlpZiAoc3RyY21wKG5hbWUsICJEU1AyIEVRIE1vZGUiKSA9PSAwKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB3bTg5MTVfcHV0X3JldHVuZV9tb2JpbGVfZW51bShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgd204OTE1X3ByaXYgKndtODkxNSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCB3bTg5MTVfcGRhdGEgKnBkYXRhID0gJndtODkxNS0+cGRhdGE7CisJaW50IGJsb2NrID0gd204OTE1X2dldF9yZXR1bmVfbW9iaWxlX2Jsb2NrKGtjb250cm9sLT5pZC5uYW1lKTsKKwlpbnQgdmFsdWUgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKworCWlmIChibG9jayA8IDApCisJCXJldHVybiBibG9jazsKKworCWlmICh2YWx1ZSA+PSBwZGF0YS0+bnVtX3JldHVuZV9tb2JpbGVfY2ZncykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3bTg5MTUtPnJldHVuZV9tb2JpbGVfY2ZnW2Jsb2NrXSA9IHZhbHVlOworCisJd204OTE1X3NldF9yZXR1bmVfbW9iaWxlKGNvZGVjLCBibG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5MTVfZ2V0X3JldHVuZV9tb2JpbGVfZW51bShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgd204OTE1X3ByaXYgKndtODkxNSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCWludCBibG9jayA9IHdtODkxNV9nZXRfcmV0dW5lX21vYmlsZV9ibG9jayhrY29udHJvbC0+aWQubmFtZSk7CisKKwl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gd204OTE1LT5yZXR1bmVfbW9iaWxlX2NmZ1tibG9ja107CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODkxNV9zbmRfY29udHJvbHNbXSA9IHsKK1NPQ19ET1VCTEVfUl9UTFYoIkNhcHR1cmUgVm9sdW1lIiwgV004OTE1X0xFRlRfTElORV9JTlBVVF9WT0xVTUUsCisJCSBXTTg5MTVfUklHSFRfTElORV9JTlBVVF9WT0xVTUUsIDAsIDMxLCAwLCBpbnBnYV90bHYpLAorU09DX0RPVUJMRV9SKCJDYXB0dXJlIFpDIFN3aXRjaCIsIFdNODkxNV9MRUZUX0xJTkVfSU5QVVRfVk9MVU1FLAorCSAgICAgV004OTE1X1JJR0hUX0xJTkVfSU5QVVRfVk9MVU1FLCA1LCAxLCAwKSwKKworU09DX0RPVUJMRV9UTFYoIkRBQzEgU2lkZXRvbmUgVm9sdW1lIiwgV004OTE1X0RBQzFfTUlYRVJfVk9MVU1FUywKKwkgICAgICAgMCwgNSwgMjQsIDAsIHNpZGV0b25lX3RsdiksCitTT0NfRE9VQkxFX1RMVigiREFDMiBTaWRldG9uZSBWb2x1bWUiLCBXTTg5MTVfREFDMl9NSVhFUl9WT0xVTUVTLAorCSAgICAgICAwLCA1LCAyNCwgMCwgc2lkZXRvbmVfdGx2KSwKK1NPQ19TSU5HTEUoIlNpZGV0b25lIExQRiBTd2l0Y2giLCBXTTg5MTVfU0lERVRPTkUsIDEyLCAxLCAwKSwKK1NPQ19FTlVNKCJTaWRldG9uZSBIUEYgQ3V0LW9mZiIsIHNpZGV0b25lX2hwZiksCitTT0NfU0lOR0xFKCJTaWRldG9uZSBIUEYgU3dpdGNoIiwgV004OTE1X1NJREVUT05FLCA2LCAxLCAwKSwKKworU09DX0RPVUJMRV9SX1RMVigiRFNQMSBDYXB0dXJlIFZvbHVtZSIsIFdNODkxNV9EU1AxX1RYX0xFRlRfVk9MVU1FLAorCQkgV004OTE1X0RTUDFfVFhfUklHSFRfVk9MVU1FLCAxLCA5NiwgMCwgZGlnaXRhbF90bHYpLAorU09DX0RPVUJMRV9SX1RMVigiRFNQMiBDYXB0dXJlIFZvbHVtZSIsIFdNODkxNV9EU1AyX1RYX0xFRlRfVk9MVU1FLAorCQkgV004OTE1X0RTUDJfVFhfUklHSFRfVk9MVU1FLCAxLCA5NiwgMCwgZGlnaXRhbF90bHYpLAorCitTT0NfU0lOR0xFKCJEU1AxIENhcHR1cmUgTm90Y2ggRmlsdGVyIFN3aXRjaCIsIFdNODkxNV9EU1AxX1RYX0ZJTFRFUlMsCisJICAgMTMsIDEsIDApLAorU09DX0RPVUJMRSgiRFNQMSBDYXB0dXJlIEhQRiBTd2l0Y2giLCBXTTg5MTVfRFNQMV9UWF9GSUxURVJTLCAxMiwgMTEsIDEsIDApLAorU09DX0VOVU0oIkRTUDEgQ2FwdHVyZSBIUEYgTW9kZSIsIGRzcDF0eF9ocGZfbW9kZSksCitTT0NfRU5VTSgiRFNQMSBDYXB0dXJlIEhQRiBDdXRvZmYiLCBkc3AxdHhfaHBmX2N1dG9mZiksCisKK1NPQ19TSU5HTEUoIkRTUDIgQ2FwdHVyZSBOb3RjaCBGaWx0ZXIgU3dpdGNoIiwgV004OTE1X0RTUDJfVFhfRklMVEVSUywKKwkgICAxMywgMSwgMCksCitTT0NfRE9VQkxFKCJEU1AyIENhcHR1cmUgSFBGIFN3aXRjaCIsIFdNODkxNV9EU1AyX1RYX0ZJTFRFUlMsIDEyLCAxMSwgMSwgMCksCitTT0NfRU5VTSgiRFNQMiBDYXB0dXJlIEhQRiBNb2RlIiwgZHNwMnR4X2hwZl9tb2RlKSwKK1NPQ19FTlVNKCJEU1AyIENhcHR1cmUgSFBGIEN1dG9mZiIsIGRzcDJ0eF9ocGZfY3V0b2ZmKSwKKworU09DX0RPVUJMRV9SX1RMVigiRFNQMSBQbGF5YmFjayBWb2x1bWUiLCBXTTg5MTVfRFNQMV9SWF9MRUZUX1ZPTFVNRSwKKwkJIFdNODkxNV9EU1AxX1JYX1JJR0hUX1ZPTFVNRSwgMSwgMTEyLCAwLCBkaWdpdGFsX3RsdiksCitTT0NfU0lOR0xFKCJEU1AxIFBsYXliYWNrIFN3aXRjaCIsIFdNODkxNV9EU1AxX1JYX0ZJTFRFUlNfMSwgOSwgMSwgMSksCisKK1NPQ19ET1VCTEVfUl9UTFYoIkRTUDIgUGxheWJhY2sgVm9sdW1lIiwgV004OTE1X0RTUDJfUlhfTEVGVF9WT0xVTUUsCisJCSBXTTg5MTVfRFNQMl9SWF9SSUdIVF9WT0xVTUUsIDEsIDExMiwgMCwgZGlnaXRhbF90bHYpLAorU09DX1NJTkdMRSgiRFNQMiBQbGF5YmFjayBTd2l0Y2giLCBXTTg5MTVfRFNQMl9SWF9GSUxURVJTXzEsIDksIDEsIDEpLAorCitTT0NfRE9VQkxFX1JfVExWKCJEQUMxIFZvbHVtZSIsIFdNODkxNV9EQUMxX0xFRlRfVk9MVU1FLAorCQkgV004OTE1X0RBQzFfUklHSFRfVk9MVU1FLCAxLCAxMTIsIDAsIGRpZ2l0YWxfdGx2KSwKK1NPQ19ET1VCTEVfUigiREFDMSBTd2l0Y2giLCBXTTg5MTVfREFDMV9MRUZUX1ZPTFVNRSwKKwkgICAgIFdNODkxNV9EQUMxX1JJR0hUX1ZPTFVNRSwgOSwgMSwgMSksCisKK1NPQ19ET1VCTEVfUl9UTFYoIkRBQzIgVm9sdW1lIiwgV004OTE1X0RBQzJfTEVGVF9WT0xVTUUsCisJCSBXTTg5MTVfREFDMl9SSUdIVF9WT0xVTUUsIDEsIDExMiwgMCwgZGlnaXRhbF90bHYpLAorU09DX0RPVUJMRV9SKCJEQUMyIFN3aXRjaCIsIFdNODkxNV9EQUMyX0xFRlRfVk9MVU1FLAorCSAgICAgV004OTE1X0RBQzJfUklHSFRfVk9MVU1FLCA5LCAxLCAxKSwKKworU09DX1NJTkdMRSgiU3BlYWtlciBIaWdoIFBlcmZvcm1hbmNlIFN3aXRjaCIsIFdNODkxNV9PVkVSU0FNUExJTkcsIDMsIDEsIDApLAorU09DX1NJTkdMRSgiRE1JQyBIaWdoIFBlcmZvcm1hbmNlIFN3aXRjaCIsIFdNODkxNV9PVkVSU0FNUExJTkcsIDIsIDEsIDApLAorU09DX1NJTkdMRSgiQURDIEhpZ2ggUGVyZm9ybWFuY2UgU3dpdGNoIiwgV004OTE1X09WRVJTQU1QTElORywgMSwgMSwgMCksCitTT0NfU0lOR0xFKCJEQUMgSGlnaCBQZXJmb3JtYW5jZSBTd2l0Y2giLCBXTTg5MTVfT1ZFUlNBTVBMSU5HLCAwLCAxLCAwKSwKKworU09DX1NJTkdMRSgiREFDIFNvZnQgTXV0ZSBTd2l0Y2giLCBXTTg5MTVfREFDX1NPRlRNVVRFLCAxLCAxLCAwKSwKK1NPQ19TSU5HTEUoIkRBQyBTbG93IFNvZnQgTXV0ZSBTd2l0Y2giLCBXTTg5MTVfREFDX1NPRlRNVVRFLCAwLCAxLCAwKSwKKworU09DX0RPVUJMRV9UTFYoIkRpZ2l0YWwgT3V0cHV0IDEgVm9sdW1lIiwgV004OTE1X0RBQzFfSFBPVVQxX1ZPTFVNRSwgMCwgNCwKKwkgICAgICAgOCwgMCwgb3V0X2RpZ2l0YWxfdGx2KSwKK1NPQ19ET1VCTEVfVExWKCJEaWdpdGFsIE91dHB1dCAyIFZvbHVtZSIsIFdNODkxNV9EQUMyX0hQT1VUMl9WT0xVTUUsIDAsIDQsCisJICAgICAgIDgsIDAsIG91dF9kaWdpdGFsX3RsdiksCisKK1NPQ19ET1VCTEVfUl9UTFYoIk91dHB1dCAxIFZvbHVtZSIsIFdNODkxNV9PVVRQVVQxX0xFRlRfVk9MVU1FLAorCQkgV004OTE1X09VVFBVVDFfUklHSFRfVk9MVU1FLCAwLCAxMiwgMCwgb3V0X3RsdiksCitTT0NfRE9VQkxFX1IoIk91dHB1dCAxIFpDIFN3aXRjaCIsICBXTTg5MTVfT1VUUFVUMV9MRUZUX1ZPTFVNRSwKKwkgICAgIFdNODkxNV9PVVRQVVQxX1JJR0hUX1ZPTFVNRSwgNywgMSwgMCksCisKK1NPQ19ET1VCTEVfUl9UTFYoIk91dHB1dCAyIFZvbHVtZSIsIFdNODkxNV9PVVRQVVQyX0xFRlRfVk9MVU1FLAorCQkgV004OTE1X09VVFBVVDJfUklHSFRfVk9MVU1FLCAwLCAxMiwgMCwgb3V0X3RsdiksCitTT0NfRE9VQkxFX1IoIk91dHB1dCAyIFpDIFN3aXRjaCIsICBXTTg5MTVfT1VUUFVUMl9MRUZUX1ZPTFVNRSwKKwkgICAgIFdNODkxNV9PVVRQVVQyX1JJR0hUX1ZPTFVNRSwgNywgMSwgMCksCisKK1NPQ19ET1VCTEVfVExWKCJTcGVha2VyIFZvbHVtZSIsIFdNODkxNV9QRE1fU1BFQUtFUl9WT0xVTUUsIDAsIDQsIDgsIDAsCisJICAgICAgIHNwa190bHYpLAorU09DX0RPVUJMRV9SKCJTcGVha2VyIFN3aXRjaCIsIFdNODkxNV9MRUZUX1BETV9TUEVBS0VSLAorCSAgICAgV004OTE1X1JJR0hUX1BETV9TUEVBS0VSLCAzLCAxLCAxKSwKK1NPQ19ET1VCTEVfUigiU3BlYWtlciBaQyBTd2l0Y2giLCBXTTg5MTVfTEVGVF9QRE1fU1BFQUtFUiwKKwkgICAgIFdNODkxNV9SSUdIVF9QRE1fU1BFQUtFUiwgMiwgMSwgMCksCisKK1NPQ19TSU5HTEUoIkRTUDEgRVEgU3dpdGNoIiwgV004OTE1X0RTUDFfUlhfRVFfR0FJTlNfMSwgMCwgMSwgMCksCitTT0NfU0lOR0xFKCJEU1AyIEVRIFN3aXRjaCIsIFdNODkxNV9EU1AyX1JYX0VRX0dBSU5TXzEsIDAsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODkxNV9lcV9jb250cm9sc1tdID0geworU09DX1NJTkdMRV9UTFYoIkRTUDEgRVEgQjEgVm9sdW1lIiwgV004OTE1X0RTUDFfUlhfRVFfR0FJTlNfMSwgMTEsIDMxLCAwLAorCSAgICAgICBlcV90bHYpLAorU09DX1NJTkdMRV9UTFYoIkRTUDEgRVEgQjIgVm9sdW1lIiwgV004OTE1X0RTUDFfUlhfRVFfR0FJTlNfMSwgNiwgMzEsIDAsCisJICAgICAgIGVxX3RsdiksCitTT0NfU0lOR0xFX1RMVigiRFNQMSBFUSBCMyBWb2x1bWUiLCBXTTg5MTVfRFNQMV9SWF9FUV9HQUlOU18xLCAxLCAzMSwgMCwKKwkgICAgICAgZXFfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJEU1AxIEVRIEI0IFZvbHVtZSIsIFdNODkxNV9EU1AxX1JYX0VRX0dBSU5TXzIsIDExLCAzMSwgMCwKKwkgICAgICAgZXFfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJEU1AxIEVRIEI1IFZvbHVtZSIsIFdNODkxNV9EU1AxX1JYX0VRX0dBSU5TXzIsIDYsIDMxLCAwLAorCSAgICAgICBlcV90bHYpLAorCitTT0NfU0lOR0xFX1RMVigiRFNQMiBFUSBCMSBWb2x1bWUiLCBXTTg5MTVfRFNQMl9SWF9FUV9HQUlOU18xLCAxMSwgMzEsIDAsCisJICAgICAgIGVxX3RsdiksCitTT0NfU0lOR0xFX1RMVigiRFNQMiBFUSBCMiBWb2x1bWUiLCBXTTg5MTVfRFNQMl9SWF9FUV9HQUlOU18xLCA2LCAzMSwgMCwKKwkgICAgICAgZXFfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJEU1AyIEVRIEIzIFZvbHVtZSIsIFdNODkxNV9EU1AyX1JYX0VRX0dBSU5TXzEsIDEsIDMxLCAwLAorCSAgICAgICBlcV90bHYpLAorU09DX1NJTkdMRV9UTFYoIkRTUDIgRVEgQjQgVm9sdW1lIiwgV004OTE1X0RTUDJfUlhfRVFfR0FJTlNfMiwgMTEsIDMxLCAwLAorCSAgICAgICBlcV90bHYpLAorU09DX1NJTkdMRV9UTFYoIkRTUDIgRVEgQjUgVm9sdW1lIiwgV004OTE1X0RTUDJfUlhfRVFfR0FJTlNfMiwgNiwgMzEsIDAsCisJICAgICAgIGVxX3RsdiksCit9OworCitzdGF0aWMgaW50IGNwX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkgICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTVU6CisJCW1zbGVlcCg1KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJtdl9zaG9ydF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCSAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHdtODkxNV9wcml2ICp3bTg5MTUgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKHctPmNvZGVjKTsKKworCS8qIFJlY29yZCB3aGljaCBvdXRwdXRzIHdlIGVuYWJsZWQgKi8KKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNRDoKKwkJd204OTE1LT5ocG91dF9wZW5kaW5nICY9IH53LT5zaGlmdDsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNVToKKwkJd204OTE1LT5ocG91dF9wZW5kaW5nIHw9IHctPnNoaWZ0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdhaXRfZm9yX2RjX3NlcnZvKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdTE2IG1hc2spCit7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IHRvX2kyY19jbGllbnQoY29kZWMtPmRldik7CisJc3RydWN0IHdtODkxNV9wcml2ICp3bTg5MTUgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlpbnQgaSwgcmV0OworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IDIwMDsKKworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkxNV9EQ19TRVJWT18yLCBtYXNrKTsKKworCS8qIFVzZSB0aGUgaW50ZXJydXB0IGlmIHBvc3NpYmxlICovCisJZG8geworCQlpZiAoaTJjLT5pcnEpIHsKKwkJCXRpbWVvdXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJndtODkxNS0+ZGNzX2RvbmUsCisJCQkJCQkJICAgICAgbXNlY3NfdG9famlmZmllcygyMDApKTsKKwkJCWlmICh0aW1lb3V0ID09IDApCisJCQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiREMgc2Vydm8gdGltZWQgb3V0XG4iKTsKKworCQl9IGVsc2UgeworCQkJbXNsZWVwKDEpOworCQkJaWYgKC0taSkgeworCQkJCXRpbWVvdXQgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJcmV0ID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MTVfRENfU0VSVk9fMik7CisJCWRldl9kYmcoY29kZWMtPmRldiwgIkRDIHNlcnZvIHN0YXRlOiAleFxuIiwgcmV0KTsKKwl9IHdoaWxlIChyZXQgJiBtYXNrKTsKKworCWlmICh0aW1lb3V0ID09IDApCisJCWRldl9lcnIoY29kZWMtPmRldiwgIkRDIHNlcnZvIHRpbWVkIG91dCBmb3IgJXhcbiIsIG1hc2spOworCWVsc2UKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiREMgc2Vydm8gY29tcGxldGUgZm9yICV4XG4iLCBtYXNrKTsKK30KKworc3RhdGljIHZvaWQgd204OTE1X3NlcV9ub3RpZmllcihzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0sCisJCQkJZW51bSBzbmRfc29jX2RhcG1fdHlwZSBldmVudCwgaW50IHN1YnNlcSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb250YWluZXJfb2YoZGFwbSwKKwkJCQkJCSAgIHN0cnVjdCBzbmRfc29jX2NvZGVjLCBkYXBtKTsKKwlzdHJ1Y3Qgd204OTE1X3ByaXYgKndtODkxNSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXUxNiB2YWwsIG1hc2s7CisKKwkvKiBDb21wbGV0ZSBhbnkgcGVuZGluZyBEQyBzZXJ2byBzdGFydHMgKi8KKwlpZiAod204OTE1LT5kY3NfcGVuZGluZykgeworCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJTdGFydGluZyBEQyBzZXJ2byBmb3IgJXhcbiIsCisJCQl3bTg5MTUtPmRjc19wZW5kaW5nKTsKKworCQkvKiBUcmlnZ2VyIGEgc3RhcnR1cCBzZXF1ZW5jZSAqLworCQl3YWl0X2Zvcl9kY19zZXJ2byhjb2RlYywgd204OTE1LT5kY3NfcGVuZGluZworCQkJCSAgICAgICAgIDw8IFdNODkxNV9EQ1NfVFJJR19TVEFSVFVQXzBfU0hJRlQpOworCisJCXdtODkxNS0+ZGNzX3BlbmRpbmcgPSAwOworCX0KKworCWlmICh3bTg5MTUtPmhwb3V0X3BlbmRpbmcgIT0gd204OTE1LT5ocG91dF9lbmEpIHsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiQXBwbHlpbmcgUk1WX1NIT1JUcyAleC0+JXhcbiIsCisJCQl3bTg5MTUtPmhwb3V0X2VuYSwgd204OTE1LT5ocG91dF9wZW5kaW5nKTsKKworCQl2YWwgPSAwOworCQltYXNrID0gMDsKKwkJaWYgKHdtODkxNS0+aHBvdXRfcGVuZGluZyAmIEhQT1VUMUwpIHsKKwkJCXZhbCB8PSBXTTg5MTVfSFBPVVQxTF9STVZfU0hPUlQ7CisJCQltYXNrIHw9IFdNODkxNV9IUE9VVDFMX1JNVl9TSE9SVDsKKwkJfSBlbHNlIHsKKwkJCW1hc2sgfD0gV004OTE1X0hQT1VUMUxfUk1WX1NIT1JUIHwKKwkJCQlXTTg5MTVfSFBPVVQxTF9PVVRQIHwKKwkJCQlXTTg5MTVfSFBPVVQxTF9ETFk7CisJCX0KKworCQlpZiAod204OTE1LT5ocG91dF9wZW5kaW5nICYgSFBPVVQxUikgeworCQkJdmFsIHw9IFdNODkxNV9IUE9VVDFSX1JNVl9TSE9SVDsKKwkJCW1hc2sgfD0gV004OTE1X0hQT1VUMVJfUk1WX1NIT1JUOworCQl9IGVsc2UgeworCQkJbWFzayB8PSBXTTg5MTVfSFBPVVQxUl9STVZfU0hPUlQgfAorCQkJCVdNODkxNV9IUE9VVDFSX09VVFAgfAorCQkJCVdNODkxNV9IUE9VVDFSX0RMWTsKKwkJfQorCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9BTkFMT0dVRV9IUF8xLCBtYXNrLCB2YWwpOworCisJCXZhbCA9IDA7CisJCW1hc2sgPSAwOworCQlpZiAod204OTE1LT5ocG91dF9wZW5kaW5nICYgSFBPVVQyTCkgeworCQkJdmFsIHw9IFdNODkxNV9IUE9VVDJMX1JNVl9TSE9SVDsKKwkJCW1hc2sgfD0gV004OTE1X0hQT1VUMkxfUk1WX1NIT1JUOworCQl9IGVsc2UgeworCQkJbWFzayB8PSBXTTg5MTVfSFBPVVQyTF9STVZfU0hPUlQgfAorCQkJCVdNODkxNV9IUE9VVDJMX09VVFAgfAorCQkJCVdNODkxNV9IUE9VVDJMX0RMWTsKKwkJfQorCisJCWlmICh3bTg5MTUtPmhwb3V0X3BlbmRpbmcgJiBIUE9VVDJSKSB7CisJCQl2YWwgfD0gV004OTE1X0hQT1VUMlJfUk1WX1NIT1JUOworCQkJbWFzayB8PSBXTTg5MTVfSFBPVVQyUl9STVZfU0hPUlQ7CisJCX0gZWxzZSB7CisJCQltYXNrIHw9IFdNODkxNV9IUE9VVDJSX1JNVl9TSE9SVCB8CisJCQkJV004OTE1X0hQT1VUMlJfT1VUUCB8CisJCQkJV004OTE1X0hQT1VUMlJfRExZOworCQl9CisKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X0FOQUxPR1VFX0hQXzIsIG1hc2ssIHZhbCk7CisKKwkJd204OTE1LT5ocG91dF9lbmEgPSB3bTg5MTUtPmhwb3V0X3BlbmRpbmc7CisJfQorfQorCitzdGF0aWMgaW50IGRjc19zdGFydChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJICAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXN0cnVjdCB3bTg5MTVfcHJpdiAqd204OTE1ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YSh3LT5jb2RlYyk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTVU6CisJCXdtODkxNS0+ZGNzX3BlbmRpbmcgfD0gMSA8PCB3LT5zaGlmdDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqc2lkZXRvbmVfdGV4dFtdID0geworCSJJTjEiLCAiSU4yIiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gbGVmdF9zaWRldG9uZV9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTE1X1NJREVUT05FLCAwLCAyLCBzaWRldG9uZV90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGxlZnRfc2lkZXRvbmUgPQorCVNPQ19EQVBNX0VOVU0oIkxlZnQgU2lkZXRvbmUiLCBsZWZ0X3NpZGV0b25lX2VudW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHJpZ2h0X3NpZGV0b25lX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MTVfU0lERVRPTkUsIDEsIDIsIHNpZGV0b25lX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcmlnaHRfc2lkZXRvbmUgPQorCVNPQ19EQVBNX0VOVU0oIlJpZ2h0IFNpZGV0b25lIiwgcmlnaHRfc2lkZXRvbmVfZW51bSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpzcGtfdGV4dFtdID0geworCSJEQUMxTCIsICJEQUMxUiIsICJEQUMyTCIsICJEQUMyUiIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gc3BrbF9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTE1X0xFRlRfUERNX1NQRUFLRVIsIDAsIDQsIHNwa190ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNwa2xfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJTUEtMIiwgc3BrbF9lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBzcGtyX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MTVfUklHSFRfUERNX1NQRUFLRVIsIDAsIDQsIHNwa190ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNwa3JfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJTUEtSIiwgc3Brcl9lbnVtKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmRzcDFyeF90ZXh0W10gPSB7CisJIkFJRjEiLCAiQUlGMiIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gZHNwMXJ4X2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF84LCAwLCAyLCBkc3AxcnhfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBkc3AxcnggPQorCVNPQ19EQVBNX0VOVU0oIkRTUDFSWCIsIGRzcDFyeF9lbnVtKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmRzcDJyeF90ZXh0W10gPSB7CisJICJBSUYyIiwgIkFJRjEiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRzcDJyeF9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTE1X1BPV0VSX01BTkFHRU1FTlRfOCwgNCwgMiwgZHNwMnJ4X3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgZHNwMnJ4ID0KKwlTT0NfREFQTV9FTlVNKCJEU1AyUlgiLCBkc3AycnhfZW51bSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICphaWYydHhfdGV4dFtdID0geworCSJEU1AyIiwgIkRTUDEiLCAiQUlGMSIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gYWlmMnR4X2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF84LCA2LCAzLCBhaWYydHhfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhaWYydHggPQorCVNPQ19EQVBNX0VOVU0oIkFJRjJUWCIsIGFpZjJ0eF9lbnVtKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmlubXV4X3RleHRbXSA9IHsKKwkiQURDIiwgIkRNSUMxIiwgIkRNSUMyIgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBpbjFfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzcsIDAsIDMsIGlubXV4X3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgaW4xX211eCA9CisJU09DX0RBUE1fRU5VTSgiSU4xIE11eCIsIGluMV9lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBpbjJfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzcsIDQsIDMsIGlubXV4X3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgaW4yX211eCA9CisJU09DX0RBUE1fRU5VTSgiSU4yIE11eCIsIGluMl9lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGRhYzJyX21peFtdID0geworU09DX0RBUE1fU0lOR0xFKCJSaWdodCBTaWRldG9uZSBTd2l0Y2giLCBXTTg5MTVfREFDMl9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQk1LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTGVmdCBTaWRldG9uZSBTd2l0Y2giLCBXTTg5MTVfREFDMl9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQk0LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiRFNQMiBTd2l0Y2giLCBXTTg5MTVfREFDMl9SSUdIVF9NSVhFUl9ST1VUSU5HLCAxLCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiRFNQMSBTd2l0Y2giLCBXTTg5MTVfREFDMl9SSUdIVF9NSVhFUl9ST1VUSU5HLCAwLCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBkYWMybF9taXhbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiUmlnaHQgU2lkZXRvbmUgU3dpdGNoIiwgV004OTE1X0RBQzJfTEVGVF9NSVhFUl9ST1VUSU5HLAorCQk1LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTGVmdCBTaWRldG9uZSBTd2l0Y2giLCBXTTg5MTVfREFDMl9MRUZUX01JWEVSX1JPVVRJTkcsCisJCTQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJEU1AyIFN3aXRjaCIsIFdNODkxNV9EQUMyX0xFRlRfTUlYRVJfUk9VVElORywgMSwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkRTUDEgU3dpdGNoIiwgV004OTE1X0RBQzJfTEVGVF9NSVhFUl9ST1VUSU5HLCAwLCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBkYWMxcl9taXhbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiUmlnaHQgU2lkZXRvbmUgU3dpdGNoIiwgV004OTE1X0RBQzFfUklHSFRfTUlYRVJfUk9VVElORywKKwkJNSwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxlZnQgU2lkZXRvbmUgU3dpdGNoIiwgV004OTE1X0RBQzFfUklHSFRfTUlYRVJfUk9VVElORywKKwkJNCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkRTUDIgU3dpdGNoIiwgV004OTE1X0RBQzFfUklHSFRfTUlYRVJfUk9VVElORywgMSwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkRTUDEgU3dpdGNoIiwgV004OTE1X0RBQzFfUklHSFRfTUlYRVJfUk9VVElORywgMCwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgZGFjMWxfbWl4W10gPSB7CitTT0NfREFQTV9TSU5HTEUoIlJpZ2h0IFNpZGV0b25lIFN3aXRjaCIsIFdNODkxNV9EQUMxX0xFRlRfTUlYRVJfUk9VVElORywKKwkJNSwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxlZnQgU2lkZXRvbmUgU3dpdGNoIiwgV004OTE1X0RBQzFfTEVGVF9NSVhFUl9ST1VUSU5HLAorCQk0LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiRFNQMiBTd2l0Y2giLCBXTTg5MTVfREFDMV9MRUZUX01JWEVSX1JPVVRJTkcsIDEsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJEU1AxIFN3aXRjaCIsIFdNODkxNV9EQUMxX0xFRlRfTUlYRVJfUk9VVElORywgMCwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgZHNwMXR4bFtdID0geworU09DX0RBUE1fU0lOR0xFKCJJTjEgU3dpdGNoIiwgV004OTE1X0RTUDFfVFhfTEVGVF9NSVhFUl9ST1VUSU5HLAorCQkxLCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiREFDIFN3aXRjaCIsIFdNODkxNV9EU1AxX1RYX0xFRlRfTUlYRVJfUk9VVElORywKKwkJMCwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgZHNwMXR4cltdID0geworU09DX0RBUE1fU0lOR0xFKCJJTjEgU3dpdGNoIiwgV004OTE1X0RTUDFfVFhfUklHSFRfTUlYRVJfUk9VVElORywKKwkJMSwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkRBQyBTd2l0Y2giLCBXTTg5MTVfRFNQMV9UWF9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQkwLCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBkc3AydHhsW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIklOMSBTd2l0Y2giLCBXTTg5MTVfRFNQMl9UWF9MRUZUX01JWEVSX1JPVVRJTkcsCisJCTEsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJEQUMgU3dpdGNoIiwgV004OTE1X0RTUDJfVFhfTEVGVF9NSVhFUl9ST1VUSU5HLAorCQkwLCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBkc3AydHhyW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIklOMSBTd2l0Y2giLCBXTTg5MTVfRFNQMl9UWF9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQkxLCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiREFDIFN3aXRjaCIsIFdNODkxNV9EU1AyX1RYX1JJR0hUX01JWEVSX1JPVVRJTkcsCisJCTAsIDEsIDApLAorfTsKKworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgd204OTE1X2RhcG1fd2lkZ2V0c1tdID0geworU05EX1NPQ19EQVBNX0lOUFVUKCJJTjFMTiIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJJTjFMUCIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJJTjFSTiIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJJTjFSUCIpLAorCitTTkRfU09DX0RBUE1fSU5QVVQoIklOMkxOIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIklOMkxQIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIklOMlJOIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIklOMlJQIiksCisKK1NORF9TT0NfREFQTV9JTlBVVCgiRE1JQzFEQVQiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiRE1JQzJEQVQiKSwKKworU05EX1NPQ19EQVBNX1NVUFBMWV9TKCJTWVNDTEsiLCAxLCBXTTg5MTVfQUlGX0NMT0NLSU5HXzEsIDAsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1NVUFBMWV9TKCJTWVNEU1BDTEsiLCAyLCBXTTg5MTVfQ0xPQ0tJTkdfMSwgMSwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fU1VQUExZX1MoIkFJRkNMSyIsIDIsIFdNODkxNV9DTE9DS0lOR18xLCAyLCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9TVVBQTFlfUygiQ2hhcmdlIFB1bXAiLCAyLCBXTTg5MTVfQ0hBUkdFX1BVTVBfMSwgMTUsIDAsIGNwX2V2ZW50LAorCQkgICAgICBTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAorCitTTkRfU09DX0RBUE1fU1VQUExZKCJMRE8yIiwgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfMiwgMSwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fTUlDQklBUygiTUlDQjIiLCBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF8xLCA5LCAwKSwKK1NORF9TT0NfREFQTV9NSUNCSUFTKCJNSUNCMSIsIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzEsIDgsIDApLAorCitTTkRfU09DX0RBUE1fUEdBKCJJTjFMIFBHQSIsIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzIsIDUsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiSU4xUiBQR0EiLCBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF8yLCA0LCAwLCBOVUxMLCAwKSwKKworU05EX1NPQ19EQVBNX01VWCgiSU4xTCBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZpbjFfbXV4KSwKK1NORF9TT0NfREFQTV9NVVgoIklOMVIgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmaW4xX211eCksCitTTkRfU09DX0RBUE1fTVVYKCJJTjJMIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmluMl9tdXgpLAorU05EX1NPQ19EQVBNX01VWCgiSU4yUiBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZpbjJfbXV4KSwKKworU05EX1NPQ19EQVBNX1BHQSgiSU4xTCIsIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzcsIDIsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiSU4xUiIsIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzcsIDMsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiSU4yTCIsIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzcsIDYsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiSU4yUiIsIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzcsIDcsIDAsIE5VTEwsIDApLAorCitTTkRfU09DX0RBUE1fU1VQUExZKCJETUlDMiIsIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzcsIDksIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1NVUFBMWSgiRE1JQzEiLCBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF83LCA4LCAwLCBOVUxMLCAwKSwKKworU05EX1NPQ19EQVBNX0FEQygiRE1JQzJMIiwgTlVMTCwgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfMywgNSwgMCksCitTTkRfU09DX0RBUE1fQURDKCJETUlDMlIiLCBOVUxMLCBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF8zLCA0LCAwKSwKK1NORF9TT0NfREFQTV9BREMoIkRNSUMxTCIsIE5VTEwsIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzMsIDMsIDApLAorU05EX1NPQ19EQVBNX0FEQygiRE1JQzFSIiwgTlVMTCwgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfMywgMiwgMCksCisKK1NORF9TT0NfREFQTV9BREMoIkFEQ0wiLCBOVUxMLCBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF8zLCAxLCAwKSwKK1NORF9TT0NfREFQTV9BREMoIkFEQ1IiLCBOVUxMLCBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF8zLCAwLCAwKSwKKworU05EX1NPQ19EQVBNX01VWCgiTGVmdCBTaWRldG9uZSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmxlZnRfc2lkZXRvbmUpLAorU05EX1NPQ19EQVBNX01VWCgiUmlnaHQgU2lkZXRvbmUiLCBTTkRfU09DX05PUE0sIDAsIDAsICZyaWdodF9zaWRldG9uZSksCisKK1NORF9TT0NfREFQTV9BSUZfSU4oIkRTUDJSWEwiLCBOVUxMLCAwLCBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF8zLCAxMSwgMCksCitTTkRfU09DX0RBUE1fQUlGX0lOKCJEU1AyUlhSIiwgTlVMTCwgMSwgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfMywgMTAsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiRFNQMVJYTCIsIE5VTEwsIDAsIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzMsIDksIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiRFNQMVJYUiIsIE5VTEwsIDEsIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzMsIDgsIDApLAorCitTTkRfU09DX0RBUE1fTUlYRVIoIkRTUDJUWEwiLCBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF81LCAxMSwgMCwKKwkJICAgZHNwMnR4bCwgQVJSQVlfU0laRShkc3AydHhsKSksCitTTkRfU09DX0RBUE1fTUlYRVIoIkRTUDJUWFIiLCBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF81LCAxMCwgMCwKKwkJICAgZHNwMnR4ciwgQVJSQVlfU0laRShkc3AydHhyKSksCitTTkRfU09DX0RBUE1fTUlYRVIoIkRTUDFUWEwiLCBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF81LCA5LCAwLAorCQkgICBkc3AxdHhsLCBBUlJBWV9TSVpFKGRzcDF0eGwpKSwKK1NORF9TT0NfREFQTV9NSVhFUigiRFNQMVRYUiIsIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzUsIDgsIDAsCisJCSAgIGRzcDF0eHIsIEFSUkFZX1NJWkUoZHNwMXR4cikpLAorCitTTkRfU09DX0RBUE1fTUlYRVIoIkRBQzJMIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkgICBkYWMybF9taXgsIEFSUkFZX1NJWkUoZGFjMmxfbWl4KSksCitTTkRfU09DX0RBUE1fTUlYRVIoIkRBQzJSIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkgICBkYWMycl9taXgsIEFSUkFZX1NJWkUoZGFjMnJfbWl4KSksCitTTkRfU09DX0RBUE1fTUlYRVIoIkRBQzFMIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkgICBkYWMxbF9taXgsIEFSUkFZX1NJWkUoZGFjMWxfbWl4KSksCitTTkRfU09DX0RBUE1fTUlYRVIoIkRBQzFSIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkgICBkYWMxcl9taXgsIEFSUkFZX1NJWkUoZGFjMXJfbWl4KSksCisKK1NORF9TT0NfREFQTV9EQUMoIkRBQzJMIiwgTlVMTCwgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfNSwgMywgMCksCitTTkRfU09DX0RBUE1fREFDKCJEQUMyUiIsIE5VTEwsIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzUsIDIsIDApLAorU05EX1NPQ19EQVBNX0RBQygiREFDMUwiLCBOVUxMLCBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF81LCAxLCAwKSwKK1NORF9TT0NfREFQTV9EQUMoIkRBQzFSIiwgTlVMTCwgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfNSwgMCwgMCksCisKK1NORF9TT0NfREFQTV9BSUZfSU4oIkFJRjJSWDEiLCAiQUlGMiBQbGF5YmFjayIsIDEsCisJCSAgICBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF80LCA5LCAwKSwKK1NORF9TT0NfREFQTV9BSUZfSU4oIkFJRjJSWDAiLCAiQUlGMiBQbGF5YmFjayIsIDIsCisJCSAgICBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF80LCA4LCAwKSwKKworU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMlRYMSIsICJBSUYyIENhcHR1cmUiLCAxLAorCQkgICAgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfNiwgOSwgMCksCitTTkRfU09DX0RBUE1fQUlGX0lOKCJBSUYyVFgwIiwgIkFJRjIgQ2FwdHVyZSIsIDIsCisJCSAgICBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF82LCA4LCAwKSwKKworU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMVJYNSIsICJBSUYxIFBsYXliYWNrIiwgNSwKKwkJICAgIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzQsIDUsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMVJYNCIsICJBSUYxIFBsYXliYWNrIiwgNCwKKwkJICAgIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzQsIDQsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMVJYMyIsICJBSUYxIFBsYXliYWNrIiwgMywKKwkJICAgIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzQsIDMsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMVJYMiIsICJBSUYxIFBsYXliYWNrIiwgMiwKKwkJICAgIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzQsIDIsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMVJYMSIsICJBSUYxIFBsYXliYWNrIiwgMSwKKwkJICAgIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzQsIDEsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMVJYMCIsICJBSUYxIFBsYXliYWNrIiwgMCwKKwkJICAgIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzQsIDAsIDApLAorCitTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMVRYNSIsICJBSUYxIENhcHR1cmUiLCA1LAorCQkgICAgIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzYsIDUsIDApLAorU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFUWDQiLCAiQUlGMSBDYXB0dXJlIiwgNCwKKwkJICAgICBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF82LCA0LCAwKSwKK1NORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYxVFgzIiwgIkFJRjEgQ2FwdHVyZSIsIDMsCisJCSAgICAgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfNiwgMywgMCksCitTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMVRYMiIsICJBSUYxIENhcHR1cmUiLCAyLAorCQkgICAgIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzYsIDIsIDApLAorU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFUWDEiLCAiQUlGMSBDYXB0dXJlIiwgMSwKKwkJICAgICBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF82LCAxLCAwKSwKK1NORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYxVFgwIiwgIkFJRjEgQ2FwdHVyZSIsIDAsCisJCSAgICAgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfNiwgMCwgMCksCisKKy8qIFdlIHJvdXRlIGFzIHN0ZXJlbyBwYWlycyBzbyBkZWZpbmUgc29tZSBkdW1teSB3aWRnZXRzIHRvIHNxdWFzaAorICogdGhpbmdzIGRvd24gZm9yIG5vdy4gIFJYQSA9IDAsMSwgUlhCID0gMiwzIGFuZCBzbyBvbiAqLworU05EX1NPQ19EQVBNX1BHQSgiQUlGMVJYQSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJBSUYxUlhCIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIkFJRjFSWEMiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiQUlGMlJYIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIkRTUDJUWCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisKK1NORF9TT0NfREFQTV9NVVgoIkRTUDFSWCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmRzcDFyeCksCitTTkRfU09DX0RBUE1fTVVYKCJEU1AyUlgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZkc3AycngpLAorU05EX1NPQ19EQVBNX01VWCgiQUlGMlRYIiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmYWlmMnR4KSwKKworU05EX1NPQ19EQVBNX01VWCgiU1BLTCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJnNwa2xfbXV4KSwKK1NORF9TT0NfREFQTV9NVVgoIlNQS1IiLCBTTkRfU09DX05PUE0sIDAsIDAsICZzcGtyX211eCksCitTTkRfU09DX0RBUE1fUEdBKCJTUEtMIFBHQSIsIFdNODkxNV9MRUZUX1BETV9TUEVBS0VSLCA0LCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIlNQS1IgUEdBIiwgV004OTE1X1JJR0hUX1BETV9TUEVBS0VSLCA0LCAwLCBOVUxMLCAwKSwKKworU05EX1NPQ19EQVBNX1BHQV9TKCJIUE9VVDJMIFBHQSIsIDAsIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzEsIDcsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQV9TKCJIUE9VVDJMX0RMWSIsIDEsIFdNODkxNV9BTkFMT0dVRV9IUF8yLCA1LCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0FfUygiSFBPVVQyTF9EQ1MiLCAyLCBXTTg5MTVfRENfU0VSVk9fMSwgMiwgMCwgZGNzX3N0YXJ0LAorCQkgICBTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAorU05EX1NPQ19EQVBNX1BHQV9TKCJIUE9VVDJMX09VVFAiLCAzLCBXTTg5MTVfQU5BTE9HVUVfSFBfMiwgNiwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBX1MoIkhQT1VUMkxfUk1WX1NIT1JUIiwgMywgU05EX1NPQ19OT1BNLCBIUE9VVDJMLCAwLAorCQkgICBybXZfc2hvcnRfZXZlbnQsCisJCSAgIFNORF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BSRV9QTUQpLAorCitTTkRfU09DX0RBUE1fUEdBX1MoIkhQT1VUMlIgUEdBIiwgMCwgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfMSwgNiwgMCxOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0FfUygiSFBPVVQyUl9ETFkiLCAxLCBXTTg5MTVfQU5BTE9HVUVfSFBfMiwgMSwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBX1MoIkhQT1VUMlJfRENTIiwgMiwgV004OTE1X0RDX1NFUlZPXzEsIDMsIDAsIGRjc19zdGFydCwKKwkJICAgU05EX1NPQ19EQVBNX1BPU1RfUE1VKSwKK1NORF9TT0NfREFQTV9QR0FfUygiSFBPVVQyUl9PVVRQIiwgMywgV004OTE1X0FOQUxPR1VFX0hQXzIsIDIsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQV9TKCJIUE9VVDJSX1JNVl9TSE9SVCIsIDMsIFNORF9TT0NfTk9QTSwgSFBPVVQyUiwgMCwKKwkJICAgcm12X3Nob3J0X2V2ZW50LAorCQkgICBTTkRfU09DX0RBUE1fUFJFX1BNVSB8IFNORF9TT0NfREFQTV9QUkVfUE1EKSwKKworU05EX1NPQ19EQVBNX1BHQV9TKCJIUE9VVDFMIFBHQSIsIDAsIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzEsIDUsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQV9TKCJIUE9VVDFMX0RMWSIsIDEsIFdNODkxNV9BTkFMT0dVRV9IUF8xLCA1LCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0FfUygiSFBPVVQxTF9EQ1MiLCAyLCBXTTg5MTVfRENfU0VSVk9fMSwgMCwgMCwgZGNzX3N0YXJ0LAorCQkgICBTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAorU05EX1NPQ19EQVBNX1BHQV9TKCJIUE9VVDFMX09VVFAiLCAzLCBXTTg5MTVfQU5BTE9HVUVfSFBfMSwgNiwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBX1MoIkhQT1VUMUxfUk1WX1NIT1JUIiwgMywgU05EX1NPQ19OT1BNLCBIUE9VVDFMLCAwLAorCQkgICBybXZfc2hvcnRfZXZlbnQsCisJCSAgIFNORF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BSRV9QTUQpLAorCitTTkRfU09DX0RBUE1fUEdBX1MoIkhQT1VUMVIgUEdBIiwgMCwgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfMSwgNCwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBX1MoIkhQT1VUMVJfRExZIiwgMSwgV004OTE1X0FOQUxPR1VFX0hQXzEsIDEsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQV9TKCJIUE9VVDFSX0RDUyIsIDIsIFdNODkxNV9EQ19TRVJWT18xLCAxLCAwLCBkY3Nfc3RhcnQsCisJCSAgIFNORF9TT0NfREFQTV9QT1NUX1BNVSksCitTTkRfU09DX0RBUE1fUEdBX1MoIkhQT1VUMVJfT1VUUCIsIDMsIFdNODkxNV9BTkFMT0dVRV9IUF8xLCAyLCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0FfUygiSFBPVVQxUl9STVZfU0hPUlQiLCAzLCBTTkRfU09DX05PUE0sIEhQT1VUMVIsIDAsCisJCSAgIHJtdl9zaG9ydF9ldmVudCwKKwkJICAgU05EX1NPQ19EQVBNX1BSRV9QTVUgfCBTTkRfU09DX0RBUE1fUFJFX1BNRCksCisKK1NORF9TT0NfREFQTV9PVVRQVVQoIkhQT1VUMUwiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIkhQT1VUMVIiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIkhQT1VUMkwiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIkhQT1VUMlIiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIlNQS0RBVCIpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgd204OTE1X2RhcG1fcm91dGVzW10gPSB7CisJeyAiQUlGQ0xLIiwgTlVMTCwgIlNZU0NMSyIgfSwKKwl7ICJTWVNEU1BDTEsiLCBOVUxMLCAiU1lTQ0xLIiB9LAorCXsgIkNoYXJnZSBQdW1wIiwgTlVMTCwgIlNZU0NMSyIgfSwKKworCXsgIk1JQ0IxIiwgTlVMTCwgIkxETzIiIH0sCisJeyAiTUlDQjIiLCBOVUxMLCAiTERPMiIgfSwKKworCXsgIklOMUwgUEdBIiwgTlVMTCwgIklOMkxOIiB9LAorCXsgIklOMUwgUEdBIiwgTlVMTCwgIklOMkxQIiB9LAorCXsgIklOMUwgUEdBIiwgTlVMTCwgIklOMUxOIiB9LAorCXsgIklOMUwgUEdBIiwgTlVMTCwgIklOMUxQIiB9LAorCisJeyAiSU4xUiBQR0EiLCBOVUxMLCAiSU4yUk4iIH0sCisJeyAiSU4xUiBQR0EiLCBOVUxMLCAiSU4yUlAiIH0sCisJeyAiSU4xUiBQR0EiLCBOVUxMLCAiSU4xUk4iIH0sCisJeyAiSU4xUiBQR0EiLCBOVUxMLCAiSU4xUlAiIH0sCisKKwl7ICJBRENMIiwgTlVMTCwgIklOMUwgUEdBIiB9LAorCisJeyAiQURDUiIsIE5VTEwsICJJTjFSIFBHQSIgfSwKKworCXsgIkRNSUMxTCIsIE5VTEwsICJETUlDMURBVCIgfSwKKwl7ICJETUlDMVIiLCBOVUxMLCAiRE1JQzFEQVQiIH0sCisJeyAiRE1JQzJMIiwgTlVMTCwgIkRNSUMyREFUIiB9LAorCXsgIkRNSUMyUiIsIE5VTEwsICJETUlDMkRBVCIgfSwKKworCXsgIkRNSUMyTCIsIE5VTEwsICJETUlDMiIgfSwKKwl7ICJETUlDMlIiLCBOVUxMLCAiRE1JQzIiIH0sCisJeyAiRE1JQzFMIiwgTlVMTCwgIkRNSUMxIiB9LAorCXsgIkRNSUMxUiIsIE5VTEwsICJETUlDMSIgfSwKKworCXsgIklOMUwgTXV4IiwgIkFEQyIsICJBRENMIiB9LAorCXsgIklOMUwgTXV4IiwgIkRNSUMxIiwgIkRNSUMxTCIgfSwKKwl7ICJJTjFMIE11eCIsICJETUlDMiIsICJETUlDMkwiIH0sCisKKwl7ICJJTjFSIE11eCIsICJBREMiLCAiQURDUiIgfSwKKwl7ICJJTjFSIE11eCIsICJETUlDMSIsICJETUlDMVIiIH0sCisJeyAiSU4xUiBNdXgiLCAiRE1JQzIiLCAiRE1JQzJSIiB9LAorCisJeyAiSU4yTCBNdXgiLCAiQURDIiwgIkFEQ0wiIH0sCisJeyAiSU4yTCBNdXgiLCAiRE1JQzEiLCAiRE1JQzFMIiB9LAorCXsgIklOMkwgTXV4IiwgIkRNSUMyIiwgIkRNSUMyTCIgfSwKKworCXsgIklOMlIgTXV4IiwgIkFEQyIsICJBRENSIiB9LAorCXsgIklOMlIgTXV4IiwgIkRNSUMxIiwgIkRNSUMxUiIgfSwKKwl7ICJJTjJSIE11eCIsICJETUlDMiIsICJETUlDMlIiIH0sCisKKwl7ICJMZWZ0IFNpZGV0b25lIiwgIklOMSIsICJJTjFMIE11eCIgfSwKKwl7ICJMZWZ0IFNpZGV0b25lIiwgIklOMiIsICJJTjJMIE11eCIgfSwKKworCXsgIlJpZ2h0IFNpZGV0b25lIiwgIklOMSIsICJJTjFSIE11eCIgfSwKKwl7ICJSaWdodCBTaWRldG9uZSIsICJJTjIiLCAiSU4yUiBNdXgiIH0sCisKKwl7ICJEU1AxVFhMIiwgIklOMSBTd2l0Y2giLCAiSU4xTCBNdXgiIH0sCisJeyAiRFNQMVRYUiIsICJJTjEgU3dpdGNoIiwgIklOMVIgTXV4IiB9LAorCisJeyAiRFNQMlRYTCIsICJJTjEgU3dpdGNoIiwgIklOMkwgTXV4IiB9LAorCXsgIkRTUDJUWFIiLCAiSU4xIFN3aXRjaCIsICJJTjJSIE11eCIgfSwKKworCXsgIkFJRjFUWDAiLCBOVUxMLCAiRFNQMVRYTCIgfSwKKwl7ICJBSUYxVFgxIiwgTlVMTCwgIkRTUDFUWFIiIH0sCisJeyAiQUlGMVRYMiIsIE5VTEwsICJEU1AyVFhMIiB9LAorCXsgIkFJRjFUWDMiLCBOVUxMLCAiRFNQMlRYUiIgfSwKKwl7ICJBSUYxVFg0IiwgTlVMTCwgIkFJRjJSWDAiIH0sCisJeyAiQUlGMVRYNSIsIE5VTEwsICJBSUYyUlgxIiB9LAorCisJeyAiQUlGMVJYMCIsIE5VTEwsICJBSUZDTEsiIH0sCisJeyAiQUlGMVJYMSIsIE5VTEwsICJBSUZDTEsiIH0sCisJeyAiQUlGMVJYMiIsIE5VTEwsICJBSUZDTEsiIH0sCisJeyAiQUlGMVJYMyIsIE5VTEwsICJBSUZDTEsiIH0sCisJeyAiQUlGMVJYNCIsIE5VTEwsICJBSUZDTEsiIH0sCisJeyAiQUlGMVJYNSIsIE5VTEwsICJBSUZDTEsiIH0sCisKKwl7ICJBSUYyUlgwIiwgTlVMTCwgIkFJRkNMSyIgfSwKKwl7ICJBSUYyUlgxIiwgTlVMTCwgIkFJRkNMSyIgfSwKKworCXsgIkRTUDFSWEwiLCBOVUxMLCAiU1lTRFNQQ0xLIiB9LAorCXsgIkRTUDFSWFIiLCBOVUxMLCAiU1lTRFNQQ0xLIiB9LAorCXsgIkRTUDJSWEwiLCBOVUxMLCAiU1lTRFNQQ0xLIiB9LAorCXsgIkRTUDJSWFIiLCBOVUxMLCAiU1lTRFNQQ0xLIiB9LAorCXsgIkRTUDFUWEwiLCBOVUxMLCAiU1lTRFNQQ0xLIiB9LAorCXsgIkRTUDFUWFIiLCBOVUxMLCAiU1lTRFNQQ0xLIiB9LAorCXsgIkRTUDJUWEwiLCBOVUxMLCAiU1lTRFNQQ0xLIiB9LAorCXsgIkRTUDJUWFIiLCBOVUxMLCAiU1lTRFNQQ0xLIiB9LAorCisJeyAiQUlGMVJYQSIsIE5VTEwsICJBSUYxUlgwIiB9LAorCXsgIkFJRjFSWEEiLCBOVUxMLCAiQUlGMVJYMSIgfSwKKwl7ICJBSUYxUlhCIiwgTlVMTCwgIkFJRjFSWDIiIH0sCisJeyAiQUlGMVJYQiIsIE5VTEwsICJBSUYxUlgzIiB9LAorCXsgIkFJRjFSWEMiLCBOVUxMLCAiQUlGMVJYNCIgfSwKKwl7ICJBSUYxUlhDIiwgTlVMTCwgIkFJRjFSWDUiIH0sCisKKwl7ICJBSUYyUlgiLCBOVUxMLCAiQUlGMlJYMCIgfSwKKwl7ICJBSUYyUlgiLCBOVUxMLCAiQUlGMlJYMSIgfSwKKworCXsgIkFJRjJUWCIsICJEU1AyIiwgIkRTUDJUWCIgfSwKKwl7ICJBSUYyVFgiLCAiRFNQMSIsICJEU1AxUlgiIH0sCisJeyAiQUlGMlRYIiwgIkFJRjEiLCAiQUlGMVJYQyIgfSwKKworCXsgIkRTUDFSWEwiLCBOVUxMLCAiRFNQMVJYIiB9LAorCXsgIkRTUDFSWFIiLCBOVUxMLCAiRFNQMVJYIiB9LAorCXsgIkRTUDJSWEwiLCBOVUxMLCAiRFNQMlJYIiB9LAorCXsgIkRTUDJSWFIiLCBOVUxMLCAiRFNQMlJYIiB9LAorCisJeyAiRFNQMlRYIiwgTlVMTCwgIkRTUDJUWEwiIH0sCisJeyAiRFNQMlRYIiwgTlVMTCwgIkRTUDJUWFIiIH0sCisKKwl7ICJEU1AxUlgiLCAiQUlGMSIsICJBSUYxUlhBIiB9LAorCXsgIkRTUDFSWCIsICJBSUYyIiwgIkFJRjJSWCIgfSwKKworCXsgIkRTUDJSWCIsICJBSUYxIiwgIkFJRjFSWEIiIH0sCisJeyAiRFNQMlJYIiwgIkFJRjIiLCAiQUlGMlJYIiB9LAorCisJeyAiREFDMkwgTWl4ZXIiLCAiRFNQMiBTd2l0Y2giLCAiRFNQMlJYTCIgfSwKKwl7ICJEQUMyTCBNaXhlciIsICJEU1AxIFN3aXRjaCIsICJEU1AxUlhMIiB9LAorCXsgIkRBQzJMIE1peGVyIiwgIlJpZ2h0IFNpZGV0b25lIFN3aXRjaCIsICJSaWdodCBTaWRldG9uZSIgfSwKKwl7ICJEQUMyTCBNaXhlciIsICJMZWZ0IFNpZGV0b25lIFN3aXRjaCIsICJMZWZ0IFNpZGV0b25lIiB9LAorCisJeyAiREFDMlIgTWl4ZXIiLCAiRFNQMiBTd2l0Y2giLCAiRFNQMlJYUiIgfSwKKwl7ICJEQUMyUiBNaXhlciIsICJEU1AxIFN3aXRjaCIsICJEU1AxUlhSIiB9LAorCXsgIkRBQzJSIE1peGVyIiwgIlJpZ2h0IFNpZGV0b25lIFN3aXRjaCIsICJSaWdodCBTaWRldG9uZSIgfSwKKwl7ICJEQUMyUiBNaXhlciIsICJMZWZ0IFNpZGV0b25lIFN3aXRjaCIsICJMZWZ0IFNpZGV0b25lIiB9LAorCisJeyAiREFDMUwgTWl4ZXIiLCAiRFNQMiBTd2l0Y2giLCAiRFNQMlJYTCIgfSwKKwl7ICJEQUMxTCBNaXhlciIsICJEU1AxIFN3aXRjaCIsICJEU1AxUlhMIiB9LAorCXsgIkRBQzFMIE1peGVyIiwgIlJpZ2h0IFNpZGV0b25lIFN3aXRjaCIsICJSaWdodCBTaWRldG9uZSIgfSwKKwl7ICJEQUMxTCBNaXhlciIsICJMZWZ0IFNpZGV0b25lIFN3aXRjaCIsICJMZWZ0IFNpZGV0b25lIiB9LAorCisJeyAiREFDMVIgTWl4ZXIiLCAiRFNQMiBTd2l0Y2giLCAiRFNQMlJYUiIgfSwKKwl7ICJEQUMxUiBNaXhlciIsICJEU1AxIFN3aXRjaCIsICJEU1AxUlhSIiB9LAorCXsgIkRBQzFSIE1peGVyIiwgIlJpZ2h0IFNpZGV0b25lIFN3aXRjaCIsICJSaWdodCBTaWRldG9uZSIgfSwKKwl7ICJEQUMxUiBNaXhlciIsICJMZWZ0IFNpZGV0b25lIFN3aXRjaCIsICJMZWZ0IFNpZGV0b25lIiB9LAorCisJeyAiREFDMUwiLCBOVUxMLCAiREFDMUwgTWl4ZXIiIH0sCisJeyAiREFDMVIiLCBOVUxMLCAiREFDMVIgTWl4ZXIiIH0sCisJeyAiREFDMkwiLCBOVUxMLCAiREFDMkwgTWl4ZXIiIH0sCisJeyAiREFDMlIiLCBOVUxMLCAiREFDMlIgTWl4ZXIiIH0sCisKKwl7ICJIUE9VVDJMIFBHQSIsIE5VTEwsICJDaGFyZ2UgUHVtcCIgfSwKKwl7ICJIUE9VVDJMIFBHQSIsIE5VTEwsICJEQUMyTCIgfSwKKwl7ICJIUE9VVDJMX0RMWSIsIE5VTEwsICJIUE9VVDJMIFBHQSIgfSwKKwl7ICJIUE9VVDJMX0RDUyIsIE5VTEwsICJIUE9VVDJMX0RMWSIgfSwKKwl7ICJIUE9VVDJMX09VVFAiLCBOVUxMLCAiSFBPVVQyTF9EQ1MiIH0sCisJeyAiSFBPVVQyTF9STVZfU0hPUlQiLCBOVUxMLCAiSFBPVVQyTF9PVVRQIiB9LAorCisJeyAiSFBPVVQyUiBQR0EiLCBOVUxMLCAiQ2hhcmdlIFB1bXAiIH0sCisJeyAiSFBPVVQyUiBQR0EiLCBOVUxMLCAiREFDMlIiIH0sCisJeyAiSFBPVVQyUl9ETFkiLCBOVUxMLCAiSFBPVVQyUiBQR0EiIH0sCisJeyAiSFBPVVQyUl9EQ1MiLCBOVUxMLCAiSFBPVVQyUl9ETFkiIH0sCisJeyAiSFBPVVQyUl9PVVRQIiwgTlVMTCwgIkhQT1VUMlJfRENTIiB9LAorCXsgIkhQT1VUMlJfUk1WX1NIT1JUIiwgTlVMTCwgIkhQT1VUMlJfT1VUUCIgfSwKKworCXsgIkhQT1VUMUwgUEdBIiwgTlVMTCwgIkNoYXJnZSBQdW1wIiB9LAorCXsgIkhQT1VUMUwgUEdBIiwgTlVMTCwgIkRBQzFMIiB9LAorCXsgIkhQT1VUMUxfRExZIiwgTlVMTCwgIkhQT1VUMUwgUEdBIiB9LAorCXsgIkhQT1VUMUxfRENTIiwgTlVMTCwgIkhQT1VUMUxfRExZIiB9LAorCXsgIkhQT1VUMUxfT1VUUCIsIE5VTEwsICJIUE9VVDFMX0RDUyIgfSwKKwl7ICJIUE9VVDFMX1JNVl9TSE9SVCIsIE5VTEwsICJIUE9VVDFMX09VVFAiIH0sCisKKwl7ICJIUE9VVDFSIFBHQSIsIE5VTEwsICJDaGFyZ2UgUHVtcCIgfSwKKwl7ICJIUE9VVDFSIFBHQSIsIE5VTEwsICJEQUMxUiIgfSwKKwl7ICJIUE9VVDFSX0RMWSIsIE5VTEwsICJIUE9VVDFSIFBHQSIgfSwKKwl7ICJIUE9VVDFSX0RDUyIsIE5VTEwsICJIUE9VVDFSX0RMWSIgfSwKKwl7ICJIUE9VVDFSX09VVFAiLCBOVUxMLCAiSFBPVVQxUl9EQ1MiIH0sCisJeyAiSFBPVVQxUl9STVZfU0hPUlQiLCBOVUxMLCAiSFBPVVQxUl9PVVRQIiB9LAorCisJeyAiSFBPVVQyTCIsIE5VTEwsICJIUE9VVDJMX1JNVl9TSE9SVCIgfSwKKwl7ICJIUE9VVDJSIiwgTlVMTCwgIkhQT1VUMlJfUk1WX1NIT1JUIiB9LAorCXsgIkhQT1VUMUwiLCBOVUxMLCAiSFBPVVQxTF9STVZfU0hPUlQiIH0sCisJeyAiSFBPVVQxUiIsIE5VTEwsICJIUE9VVDFSX1JNVl9TSE9SVCIgfSwKKworCXsgIlNQS0wiLCAiREFDMUwiLCAiREFDMUwiIH0sCisJeyAiU1BLTCIsICJEQUMxUiIsICJEQUMxUiIgfSwKKwl7ICJTUEtMIiwgIkRBQzJMIiwgIkRBQzJMIiB9LAorCXsgIlNQS0wiLCAiREFDMlIiLCAiREFDMlIiIH0sCisKKwl7ICJTUEtSIiwgIkRBQzFMIiwgIkRBQzFMIiB9LAorCXsgIlNQS1IiLCAiREFDMVIiLCAiREFDMVIiIH0sCisJeyAiU1BLUiIsICJEQUMyTCIsICJEQUMyTCIgfSwKKwl7ICJTUEtSIiwgIkRBQzJSIiwgIkRBQzJSIiB9LAorCisJeyAiU1BLTCBQR0EiLCBOVUxMLCAiU1BLTCIgfSwKKwl7ICJTUEtSIFBHQSIsIE5VTEwsICJTUEtSIiB9LAorCisJeyAiU1BLREFUIiwgTlVMTCwgIlNQS0wgUEdBIiB9LAorCXsgIlNQS0RBVCIsIE5VTEwsICJTUEtSIFBHQSIgfSwKK307CisKK3N0YXRpYyBpbnQgd204OTE1X3JlYWRhYmxlX3JlZ2lzdGVyKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgICAgdW5zaWduZWQgaW50IHJlZykKK3sKKwkvKiBEdWUgdG8gdGhlIHNwYXJzZW5lc3Mgb2YgdGhlIHJlZ2lzdGVyIG1hcCB0aGUgY29tcGlsZXIKKwkgKiBvdXRwdXQgZnJvbSBhbiBleHBsaWNpdCBzd2l0Y2ggc3RhdGVtZW50IGVuZHMgdXAgYmVpbmcgbXVjaAorCSAqIG1vcmUgZWZmaWNpZW50IHRoYW4gYSB0YWJsZS4KKwkgKi8KKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgV004OTE1X1NPRlRXQVJFX1JFU0VUOgorCWNhc2UgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfMToKKwljYXNlIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzI6CisJY2FzZSBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF8zOgorCWNhc2UgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfNDoKKwljYXNlIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzU6CisJY2FzZSBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF82OgorCWNhc2UgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfNzoKKwljYXNlIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzg6CisJY2FzZSBXTTg5MTVfTEVGVF9MSU5FX0lOUFVUX1ZPTFVNRToKKwljYXNlIFdNODkxNV9SSUdIVF9MSU5FX0lOUFVUX1ZPTFVNRToKKwljYXNlIFdNODkxNV9MSU5FX0lOUFVUX0NPTlRST0w6CisJY2FzZSBXTTg5MTVfREFDMV9IUE9VVDFfVk9MVU1FOgorCWNhc2UgV004OTE1X0RBQzJfSFBPVVQyX1ZPTFVNRToKKwljYXNlIFdNODkxNV9EQUMxX0xFRlRfVk9MVU1FOgorCWNhc2UgV004OTE1X0RBQzFfUklHSFRfVk9MVU1FOgorCWNhc2UgV004OTE1X0RBQzJfTEVGVF9WT0xVTUU6CisJY2FzZSBXTTg5MTVfREFDMl9SSUdIVF9WT0xVTUU6CisJY2FzZSBXTTg5MTVfT1VUUFVUMV9MRUZUX1ZPTFVNRToKKwljYXNlIFdNODkxNV9PVVRQVVQxX1JJR0hUX1ZPTFVNRToKKwljYXNlIFdNODkxNV9PVVRQVVQyX0xFRlRfVk9MVU1FOgorCWNhc2UgV004OTE1X09VVFBVVDJfUklHSFRfVk9MVU1FOgorCWNhc2UgV004OTE1X01JQ0JJQVNfMToKKwljYXNlIFdNODkxNV9NSUNCSUFTXzI6CisJY2FzZSBXTTg5MTVfTERPXzE6CisJY2FzZSBXTTg5MTVfTERPXzI6CisJY2FzZSBXTTg5MTVfQUNDRVNTT1JZX0RFVEVDVF9NT0RFXzE6CisJY2FzZSBXTTg5MTVfQUNDRVNTT1JZX0RFVEVDVF9NT0RFXzI6CisJY2FzZSBXTTg5MTVfSEVBRFBIT05FX0RFVEVDVF8xOgorCWNhc2UgV004OTE1X0hFQURQSE9ORV9ERVRFQ1RfMjoKKwljYXNlIFdNODkxNV9NSUNfREVURUNUXzE6CisJY2FzZSBXTTg5MTVfTUlDX0RFVEVDVF8yOgorCWNhc2UgV004OTE1X01JQ19ERVRFQ1RfMzoKKwljYXNlIFdNODkxNV9DSEFSR0VfUFVNUF8xOgorCWNhc2UgV004OTE1X0NIQVJHRV9QVU1QXzI6CisJY2FzZSBXTTg5MTVfRENfU0VSVk9fMToKKwljYXNlIFdNODkxNV9EQ19TRVJWT18yOgorCWNhc2UgV004OTE1X0RDX1NFUlZPXzM6CisJY2FzZSBXTTg5MTVfRENfU0VSVk9fNToKKwljYXNlIFdNODkxNV9EQ19TRVJWT182OgorCWNhc2UgV004OTE1X0RDX1NFUlZPXzc6CisJY2FzZSBXTTg5MTVfRENfU0VSVk9fUkVBREJBQ0tfMDoKKwljYXNlIFdNODkxNV9BTkFMT0dVRV9IUF8xOgorCWNhc2UgV004OTE1X0FOQUxPR1VFX0hQXzI6CisJY2FzZSBXTTg5MTVfQ0hJUF9SRVZJU0lPTjoKKwljYXNlIFdNODkxNV9DT05UUk9MX0lOVEVSRkFDRV8xOgorCWNhc2UgV004OTE1X1dSSVRFX1NFUVVFTkNFUl9DVFJMXzE6CisJY2FzZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSX0NUUkxfMjoKKwljYXNlIFdNODkxNV9BSUZfQ0xPQ0tJTkdfMToKKwljYXNlIFdNODkxNV9BSUZfQ0xPQ0tJTkdfMjoKKwljYXNlIFdNODkxNV9DTE9DS0lOR18xOgorCWNhc2UgV004OTE1X0NMT0NLSU5HXzI6CisJY2FzZSBXTTg5MTVfQUlGX1JBVEU6CisJY2FzZSBXTTg5MTVfRkxMX0NPTlRST0xfMToKKwljYXNlIFdNODkxNV9GTExfQ09OVFJPTF8yOgorCWNhc2UgV004OTE1X0ZMTF9DT05UUk9MXzM6CisJY2FzZSBXTTg5MTVfRkxMX0NPTlRST0xfNDoKKwljYXNlIFdNODkxNV9GTExfQ09OVFJPTF81OgorCWNhc2UgV004OTE1X0ZMTF9DT05UUk9MXzY6CisJY2FzZSBXTTg5MTVfRkxMX0VGU18xOgorCWNhc2UgV004OTE1X0ZMTF9FRlNfMjoKKwljYXNlIFdNODkxNV9BSUYxX0NPTlRST0w6CisJY2FzZSBXTTg5MTVfQUlGMV9CQ0xLOgorCWNhc2UgV004OTE1X0FJRjFfVFhfTFJDTEtfMToKKwljYXNlIFdNODkxNV9BSUYxX1RYX0xSQ0xLXzI6CisJY2FzZSBXTTg5MTVfQUlGMV9SWF9MUkNMS18xOgorCWNhc2UgV004OTE1X0FJRjFfUlhfTFJDTEtfMjoKKwljYXNlIFdNODkxNV9BSUYxVFhfREFUQV9DT05GSUdVUkFUSU9OXzE6CisJY2FzZSBXTTg5MTVfQUlGMVRYX0RBVEFfQ09ORklHVVJBVElPTl8yOgorCWNhc2UgV004OTE1X0FJRjFSWF9EQVRBX0NPTkZJR1VSQVRJT046CisJY2FzZSBXTTg5MTVfQUlGMVRYX0NIQU5ORUxfMF9DT05GSUdVUkFUSU9OOgorCWNhc2UgV004OTE1X0FJRjFUWF9DSEFOTkVMXzFfQ09ORklHVVJBVElPTjoKKwljYXNlIFdNODkxNV9BSUYxVFhfQ0hBTk5FTF8yX0NPTkZJR1VSQVRJT046CisJY2FzZSBXTTg5MTVfQUlGMVRYX0NIQU5ORUxfM19DT05GSUdVUkFUSU9OOgorCWNhc2UgV004OTE1X0FJRjFUWF9DSEFOTkVMXzRfQ09ORklHVVJBVElPTjoKKwljYXNlIFdNODkxNV9BSUYxVFhfQ0hBTk5FTF81X0NPTkZJR1VSQVRJT046CisJY2FzZSBXTTg5MTVfQUlGMVJYX0NIQU5ORUxfMF9DT05GSUdVUkFUSU9OOgorCWNhc2UgV004OTE1X0FJRjFSWF9DSEFOTkVMXzFfQ09ORklHVVJBVElPTjoKKwljYXNlIFdNODkxNV9BSUYxUlhfQ0hBTk5FTF8yX0NPTkZJR1VSQVRJT046CisJY2FzZSBXTTg5MTVfQUlGMVJYX0NIQU5ORUxfM19DT05GSUdVUkFUSU9OOgorCWNhc2UgV004OTE1X0FJRjFSWF9DSEFOTkVMXzRfQ09ORklHVVJBVElPTjoKKwljYXNlIFdNODkxNV9BSUYxUlhfQ0hBTk5FTF81X0NPTkZJR1VSQVRJT046CisJY2FzZSBXTTg5MTVfQUlGMVJYX01PTk9fQ09ORklHVVJBVElPTjoKKwljYXNlIFdNODkxNV9BSUYxVFhfVEVTVDoKKwljYXNlIFdNODkxNV9BSUYyX0NPTlRST0w6CisJY2FzZSBXTTg5MTVfQUlGMl9CQ0xLOgorCWNhc2UgV004OTE1X0FJRjJfVFhfTFJDTEtfMToKKwljYXNlIFdNODkxNV9BSUYyX1RYX0xSQ0xLXzI6CisJY2FzZSBXTTg5MTVfQUlGMl9SWF9MUkNMS18xOgorCWNhc2UgV004OTE1X0FJRjJfUlhfTFJDTEtfMjoKKwljYXNlIFdNODkxNV9BSUYyVFhfREFUQV9DT05GSUdVUkFUSU9OXzE6CisJY2FzZSBXTTg5MTVfQUlGMlRYX0RBVEFfQ09ORklHVVJBVElPTl8yOgorCWNhc2UgV004OTE1X0FJRjJSWF9EQVRBX0NPTkZJR1VSQVRJT046CisJY2FzZSBXTTg5MTVfQUlGMlRYX0NIQU5ORUxfMF9DT05GSUdVUkFUSU9OOgorCWNhc2UgV004OTE1X0FJRjJUWF9DSEFOTkVMXzFfQ09ORklHVVJBVElPTjoKKwljYXNlIFdNODkxNV9BSUYyUlhfQ0hBTk5FTF8wX0NPTkZJR1VSQVRJT046CisJY2FzZSBXTTg5MTVfQUlGMlJYX0NIQU5ORUxfMV9DT05GSUdVUkFUSU9OOgorCWNhc2UgV004OTE1X0FJRjJSWF9NT05PX0NPTkZJR1VSQVRJT046CisJY2FzZSBXTTg5MTVfQUlGMlRYX1RFU1Q6CisJY2FzZSBXTTg5MTVfRFNQMV9UWF9MRUZUX1ZPTFVNRToKKwljYXNlIFdNODkxNV9EU1AxX1RYX1JJR0hUX1ZPTFVNRToKKwljYXNlIFdNODkxNV9EU1AxX1JYX0xFRlRfVk9MVU1FOgorCWNhc2UgV004OTE1X0RTUDFfUlhfUklHSFRfVk9MVU1FOgorCWNhc2UgV004OTE1X0RTUDFfVFhfRklMVEVSUzoKKwljYXNlIFdNODkxNV9EU1AxX1JYX0ZJTFRFUlNfMToKKwljYXNlIFdNODkxNV9EU1AxX1JYX0ZJTFRFUlNfMjoKKwljYXNlIFdNODkxNV9EU1AxX0RSQ18xOgorCWNhc2UgV004OTE1X0RTUDFfRFJDXzI6CisJY2FzZSBXTTg5MTVfRFNQMV9EUkNfMzoKKwljYXNlIFdNODkxNV9EU1AxX0RSQ180OgorCWNhc2UgV004OTE1X0RTUDFfRFJDXzU6CisJY2FzZSBXTTg5MTVfRFNQMV9SWF9FUV9HQUlOU18xOgorCWNhc2UgV004OTE1X0RTUDFfUlhfRVFfR0FJTlNfMjoKKwljYXNlIFdNODkxNV9EU1AxX1JYX0VRX0JBTkRfMV9BOgorCWNhc2UgV004OTE1X0RTUDFfUlhfRVFfQkFORF8xX0I6CisJY2FzZSBXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzFfUEc6CisJY2FzZSBXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzJfQToKKwljYXNlIFdNODkxNV9EU1AxX1JYX0VRX0JBTkRfMl9COgorCWNhc2UgV004OTE1X0RTUDFfUlhfRVFfQkFORF8yX0M6CisJY2FzZSBXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzJfUEc6CisJY2FzZSBXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzNfQToKKwljYXNlIFdNODkxNV9EU1AxX1JYX0VRX0JBTkRfM19COgorCWNhc2UgV004OTE1X0RTUDFfUlhfRVFfQkFORF8zX0M6CisJY2FzZSBXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzNfUEc6CisJY2FzZSBXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzRfQToKKwljYXNlIFdNODkxNV9EU1AxX1JYX0VRX0JBTkRfNF9COgorCWNhc2UgV004OTE1X0RTUDFfUlhfRVFfQkFORF80X0M6CisJY2FzZSBXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzRfUEc6CisJY2FzZSBXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzVfQToKKwljYXNlIFdNODkxNV9EU1AxX1JYX0VRX0JBTkRfNV9COgorCWNhc2UgV004OTE1X0RTUDFfUlhfRVFfQkFORF81X1BHOgorCWNhc2UgV004OTE1X0RTUDJfVFhfTEVGVF9WT0xVTUU6CisJY2FzZSBXTTg5MTVfRFNQMl9UWF9SSUdIVF9WT0xVTUU6CisJY2FzZSBXTTg5MTVfRFNQMl9SWF9MRUZUX1ZPTFVNRToKKwljYXNlIFdNODkxNV9EU1AyX1JYX1JJR0hUX1ZPTFVNRToKKwljYXNlIFdNODkxNV9EU1AyX1RYX0ZJTFRFUlM6CisJY2FzZSBXTTg5MTVfRFNQMl9SWF9GSUxURVJTXzE6CisJY2FzZSBXTTg5MTVfRFNQMl9SWF9GSUxURVJTXzI6CisJY2FzZSBXTTg5MTVfRFNQMl9EUkNfMToKKwljYXNlIFdNODkxNV9EU1AyX0RSQ18yOgorCWNhc2UgV004OTE1X0RTUDJfRFJDXzM6CisJY2FzZSBXTTg5MTVfRFNQMl9EUkNfNDoKKwljYXNlIFdNODkxNV9EU1AyX0RSQ181OgorCWNhc2UgV004OTE1X0RTUDJfUlhfRVFfR0FJTlNfMToKKwljYXNlIFdNODkxNV9EU1AyX1JYX0VRX0dBSU5TXzI6CisJY2FzZSBXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzFfQToKKwljYXNlIFdNODkxNV9EU1AyX1JYX0VRX0JBTkRfMV9COgorCWNhc2UgV004OTE1X0RTUDJfUlhfRVFfQkFORF8xX1BHOgorCWNhc2UgV004OTE1X0RTUDJfUlhfRVFfQkFORF8yX0E6CisJY2FzZSBXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzJfQjoKKwljYXNlIFdNODkxNV9EU1AyX1JYX0VRX0JBTkRfMl9DOgorCWNhc2UgV004OTE1X0RTUDJfUlhfRVFfQkFORF8yX1BHOgorCWNhc2UgV004OTE1X0RTUDJfUlhfRVFfQkFORF8zX0E6CisJY2FzZSBXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzNfQjoKKwljYXNlIFdNODkxNV9EU1AyX1JYX0VRX0JBTkRfM19DOgorCWNhc2UgV004OTE1X0RTUDJfUlhfRVFfQkFORF8zX1BHOgorCWNhc2UgV004OTE1X0RTUDJfUlhfRVFfQkFORF80X0E6CisJY2FzZSBXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzRfQjoKKwljYXNlIFdNODkxNV9EU1AyX1JYX0VRX0JBTkRfNF9DOgorCWNhc2UgV004OTE1X0RTUDJfUlhfRVFfQkFORF80X1BHOgorCWNhc2UgV004OTE1X0RTUDJfUlhfRVFfQkFORF81X0E6CisJY2FzZSBXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzVfQjoKKwljYXNlIFdNODkxNV9EU1AyX1JYX0VRX0JBTkRfNV9QRzoKKwljYXNlIFdNODkxNV9EQUMxX01JWEVSX1ZPTFVNRVM6CisJY2FzZSBXTTg5MTVfREFDMV9MRUZUX01JWEVSX1JPVVRJTkc6CisJY2FzZSBXTTg5MTVfREFDMV9SSUdIVF9NSVhFUl9ST1VUSU5HOgorCWNhc2UgV004OTE1X0RBQzJfTUlYRVJfVk9MVU1FUzoKKwljYXNlIFdNODkxNV9EQUMyX0xFRlRfTUlYRVJfUk9VVElORzoKKwljYXNlIFdNODkxNV9EQUMyX1JJR0hUX01JWEVSX1JPVVRJTkc6CisJY2FzZSBXTTg5MTVfRFNQMV9UWF9MRUZUX01JWEVSX1JPVVRJTkc6CisJY2FzZSBXTTg5MTVfRFNQMV9UWF9SSUdIVF9NSVhFUl9ST1VUSU5HOgorCWNhc2UgV004OTE1X0RTUDJfVFhfTEVGVF9NSVhFUl9ST1VUSU5HOgorCWNhc2UgV004OTE1X0RTUDJfVFhfUklHSFRfTUlYRVJfUk9VVElORzoKKwljYXNlIFdNODkxNV9EU1BfVFhfTUlYRVJfU0VMRUNUOgorCWNhc2UgV004OTE1X0RBQ19TT0ZUTVVURToKKwljYXNlIFdNODkxNV9PVkVSU0FNUExJTkc6CisJY2FzZSBXTTg5MTVfU0lERVRPTkU6CisJY2FzZSBXTTg5MTVfR1BJT18xOgorCWNhc2UgV004OTE1X0dQSU9fMjoKKwljYXNlIFdNODkxNV9HUElPXzM6CisJY2FzZSBXTTg5MTVfR1BJT180OgorCWNhc2UgV004OTE1X0dQSU9fNToKKwljYXNlIFdNODkxNV9QVUxMX0NPTlRST0xfMToKKwljYXNlIFdNODkxNV9QVUxMX0NPTlRST0xfMjoKKwljYXNlIFdNODkxNV9JTlRFUlJVUFRfU1RBVFVTXzE6CisJY2FzZSBXTTg5MTVfSU5URVJSVVBUX1NUQVRVU18yOgorCWNhc2UgV004OTE1X0lOVEVSUlVQVF9SQVdfU1RBVFVTXzI6CisJY2FzZSBXTTg5MTVfSU5URVJSVVBUX1NUQVRVU18xX01BU0s6CisJY2FzZSBXTTg5MTVfSU5URVJSVVBUX1NUQVRVU18yX01BU0s6CisJY2FzZSBXTTg5MTVfSU5URVJSVVBUX0NPTlRST0w6CisJY2FzZSBXTTg5MTVfTEVGVF9QRE1fU1BFQUtFUjoKKwljYXNlIFdNODkxNV9SSUdIVF9QRE1fU1BFQUtFUjoKKwljYXNlIFdNODkxNV9QRE1fU1BFQUtFUl9NVVRFX1NFUVVFTkNFOgorCWNhc2UgV004OTE1X1BETV9TUEVBS0VSX1ZPTFVNRToKKwkJcmV0dXJuIDE7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW50IHdtODkxNV92b2xhdGlsZV9yZWdpc3RlcihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJICAgIHVuc2lnbmVkIGludCByZWcpCit7CisJc3dpdGNoIChyZWcpIHsKKwljYXNlIFdNODkxNV9TT0ZUV0FSRV9SRVNFVDoKKwljYXNlIFdNODkxNV9DSElQX1JFVklTSU9OOgorCWNhc2UgV004OTE1X0xET18xOgorCWNhc2UgV004OTE1X0xET18yOgorCWNhc2UgV004OTE1X0lOVEVSUlVQVF9TVEFUVVNfMToKKwljYXNlIFdNODkxNV9JTlRFUlJVUFRfU1RBVFVTXzI6CisJY2FzZSBXTTg5MTVfSU5URVJSVVBUX1JBV19TVEFUVVNfMjoKKwljYXNlIFdNODkxNV9EQ19TRVJWT19SRUFEQkFDS18wOgorCWNhc2UgV004OTE1X0RDX1NFUlZPXzI6CisJY2FzZSBXTTg5MTVfRENfU0VSVk9fNjoKKwljYXNlIFdNODkxNV9EQ19TRVJWT183OgorCWNhc2UgV004OTE1X0ZMTF9DT05UUk9MXzY6CisJY2FzZSBXTTg5MTVfTUlDX0RFVEVDVF8zOgorCWNhc2UgV004OTE1X0hFQURQSE9ORV9ERVRFQ1RfMToKKwljYXNlIFdNODkxNV9IRUFEUEhPTkVfREVURUNUXzI6CisJCXJldHVybiAxOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIGludCB3bTg5MTVfcmVzZXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXJldHVybiBzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MTVfU09GVFdBUkVfUkVTRVQsIDB4ODkxNSk7Cit9CisKK3N0YXRpYyBpbnQgd204OTE1X3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCit7CisJc3RydWN0IHdtODkxNV9wcml2ICp3bTg5MTUgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlpbnQgcmV0OworCisJc3dpdGNoIChsZXZlbCkgeworCWNhc2UgU05EX1NPQ19CSUFTX09OOgorCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6CisJCWlmIChjb2RlYy0+ZGFwbS5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19TVEFOREJZKSB7CisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF8xLAorCQkJCQkgICAgV004OTE1X0JHX0VOQSwgV004OTE1X0JHX0VOQSk7CisJCQltc2xlZXAoMik7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgorCQlpZiAoY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CisJCQlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRSh3bTg5MTUtPnN1cHBsaWVzKSwKKwkJCQkJCSAgICB3bTg5MTUtPnN1cHBsaWVzKTsKKwkJCWlmIChyZXQgIT0gMCkgeworCQkJCWRldl9lcnIoY29kZWMtPmRldiwKKwkJCQkJIkZhaWxlZCB0byBlbmFibGUgc3VwcGxpZXM6ICVkXG4iLAorCQkJCQlyZXQpOworCQkJCXJldHVybiByZXQ7CisJCQl9CisKKwkJCWlmICh3bTg5MTUtPnBkYXRhLmxkb19lbmEgPj0gMCkgeworCQkJCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKHdtODkxNS0+cGRhdGEubGRvX2VuYSwKKwkJCQkJCQkxKTsKKwkJCQltc2xlZXAoNSk7CisJCQl9CisKKwkJCWNvZGVjLT5jYWNoZV9vbmx5ID0gZmFsc2U7CisJCQlzbmRfc29jX2NhY2hlX3N5bmMoY29kZWMpOworCQl9CisKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfMSwKKwkJCQkgICAgV004OTE1X0JHX0VOQSwgMCk7CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgorCQljb2RlYy0+Y2FjaGVfb25seSA9IHRydWU7CisJCWlmICh3bTg5MTUtPnBkYXRhLmxkb19lbmEgPj0gMCkKKwkJCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKHdtODkxNS0+cGRhdGEubGRvX2VuYSwgMCk7CisJCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRSh3bTg5MTUtPnN1cHBsaWVzKSwKKwkJCQkgICAgICAgd204OTE1LT5zdXBwbGllcyk7CisJCWJyZWFrOworCX0KKworCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBsZXZlbDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODkxNV9zZXRfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCB1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJaW50IGFpZmN0cmwgPSAwOworCWludCBiY2xrID0gMDsKKwlpbnQgbHJjbGtfdHggPSAwOworCWludCBscmNsa19yeCA9IDA7CisJaW50IGFpZmN0cmxfcmVnLCBiY2xrX3JlZywgbHJjbGtfdHhfcmVnLCBscmNsa19yeF9yZWc7CisKKwlzd2l0Y2ggKGRhaS0+aWQpIHsKKwljYXNlIDA6CisJCWFpZmN0cmxfcmVnID0gV004OTE1X0FJRjFfQ09OVFJPTDsKKwkJYmNsa19yZWcgPSBXTTg5MTVfQUlGMV9CQ0xLOworCQlscmNsa190eF9yZWcgPSBXTTg5MTVfQUlGMV9UWF9MUkNMS18yOworCQlscmNsa19yeF9yZWcgPSBXTTg5MTVfQUlGMV9SWF9MUkNMS18yOworCQlicmVhazsKKwljYXNlIDE6CisJCWFpZmN0cmxfcmVnID0gV004OTE1X0FJRjJfQ09OVFJPTDsKKwkJYmNsa19yZWcgPSBXTTg5MTVfQUlGMl9CQ0xLOworCQlscmNsa190eF9yZWcgPSBXTTg5MTVfQUlGMl9UWF9MUkNMS18yOworCQlscmNsa19yeF9yZWcgPSBXTTg5MTVfQUlGMl9SWF9MUkNMS18yOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfTkY6CisJCWJjbGsgfD0gV004OTE1X0FJRjFfQkNMS19JTlY7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfSUY6CisJCWxyY2xrX3R4IHw9IFdNODkxNV9BSUYxVFhfTFJDTEtfSU5WOworCQlscmNsa19yeCB8PSBXTTg5MTVfQUlGMVJYX0xSQ0xLX0lOVjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9JRjoKKwkJYmNsayB8PSBXTTg5MTVfQUlGMV9CQ0xLX0lOVjsKKwkJbHJjbGtfdHggfD0gV004OTE1X0FJRjFUWF9MUkNMS19JTlY7CisJCWxyY2xrX3J4IHw9IFdNODkxNV9BSUYxUlhfTFJDTEtfSU5WOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgorCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRk06CisJCWxyY2xrX3R4IHw9IFdNODkxNV9BSUYxVFhfTFJDTEtfTVNUUjsKKwkJbHJjbGtfcnggfD0gV004OTE1X0FJRjFSWF9MUkNMS19NU1RSOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRlM6CisJCWJjbGsgfD0gV004OTE1X0FJRjFfQkNMS19NU1RSOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCWJjbGsgfD0gV004OTE1X0FJRjFfQkNMS19NU1RSOworCQlscmNsa190eCB8PSBXTTg5MTVfQUlGMVRYX0xSQ0xLX01TVFI7CisJCWxyY2xrX3J4IHw9IFdNODkxNV9BSUYxUlhfTFJDTEtfTVNUUjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0I6CisJCWFpZmN0cmwgfD0gMTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCWFpZmN0cmwgfD0gMjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6CisJCWFpZmN0cmwgfD0gMzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgYWlmY3RybF9yZWcsIFdNODkxNV9BSUYxX0ZNVF9NQVNLLCBhaWZjdHJsKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBiY2xrX3JlZywKKwkJCSAgICBXTTg5MTVfQUlGMV9CQ0xLX0lOViB8IFdNODkxNV9BSUYxX0JDTEtfTVNUUiwKKwkJCSAgICBiY2xrKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBscmNsa190eF9yZWcsCisJCQkgICAgV004OTE1X0FJRjFUWF9MUkNMS19JTlYgfAorCQkJICAgIFdNODkxNV9BSUYxVFhfTFJDTEtfTVNUUiwKKwkJCSAgICBscmNsa190eCk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgbHJjbGtfcnhfcmVnLAorCQkJICAgIFdNODkxNV9BSUYxUlhfTFJDTEtfSU5WIHwKKwkJCSAgICBXTTg5MTVfQUlGMVJYX0xSQ0xLX01TVFIsCisJCQkgICAgbHJjbGtfcngpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBpbnQgYmNsa19kaXZzW10gPSB7CisJMSwgMiwgMywgNCwgNiwgOCwgMTIsIDE2LCAyNCwgMzIsIDQ4LCA2NCwgOTYKK307CisKK3N0YXRpYyBjb25zdCBpbnQgZHNwX2RpdnNbXSA9IHsKKwk0ODAwMCwgMzIwMDAsIDE2MDAwLCA4MDAwCit9OworCitzdGF0aWMgaW50IHdtODkxNV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTE1X3ByaXYgKndtODkxNSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCWludCBiaXRzLCBpLCBiY2xrX3JhdGUsIGJlc3QsIGN1cl92YWw7CisJaW50IGFpZmRhdGEgPSAwOworCWludCBiY2xrID0gMDsKKwlpbnQgbHJjbGsgPSAwOworCWludCBkc3AgPSAwOworCWludCBhaWZkYXRhX3JlZywgYmNsa19yZWcsIGxyY2xrX3JlZywgZHNwX3NoaWZ0OworCisJaWYgKCF3bTg5MTUtPnN5c2NsaykgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJTWVNDTEsgbm90IGNvbmZpZ3VyZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGRhaS0+aWQpIHsKKwljYXNlIDA6CisJCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLIHx8CisJCSAgICAoc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MTVfR1BJT18xKSkgJiBXTTg5MTVfR1AxX0ZOX01BU0spIHsKKwkJCWFpZmRhdGFfcmVnID0gV004OTE1X0FJRjFSWF9EQVRBX0NPTkZJR1VSQVRJT047CisJCQlscmNsa19yZWcgPSBXTTg5MTVfQUlGMV9SWF9MUkNMS18xOworCQl9IGVsc2UgeworCQkJYWlmZGF0YV9yZWcgPSBXTTg5MTVfQUlGMVRYX0RBVEFfQ09ORklHVVJBVElPTl8xOworCQkJbHJjbGtfcmVnID0gV004OTE1X0FJRjFfVFhfTFJDTEtfMTsKKwkJfQorCQliY2xrX3JlZyA9IFdNODkxNV9BSUYxX0JDTEs7CisJCWRzcF9zaGlmdCA9IDA7CisJCWJyZWFrOworCWNhc2UgMToKKwkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0sgfHwKKwkJICAgIChzbmRfc29jX3JlYWQoY29kZWMsIFdNODkxNV9HUElPXzIpKSAmIFdNODkxNV9HUDJfRk5fTUFTSykgeworCQkJYWlmZGF0YV9yZWcgPSBXTTg5MTVfQUlGMlJYX0RBVEFfQ09ORklHVVJBVElPTjsKKwkJCWxyY2xrX3JlZyA9IFdNODkxNV9BSUYyX1JYX0xSQ0xLXzE7CisJCX0gZWxzZSB7CisJCQlhaWZkYXRhX3JlZyA9IFdNODkxNV9BSUYyVFhfREFUQV9DT05GSUdVUkFUSU9OXzE7CisJCQlscmNsa19yZWcgPSBXTTg5MTVfQUlGMl9UWF9MUkNMS18xOworCQl9CisJCWJjbGtfcmVnID0gV004OTE1X0FJRjJfQkNMSzsKKwkJZHNwX3NoaWZ0ID0gV004OTE1X0RTUDJfRElWX1NISUZUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYmNsa19yYXRlID0gc25kX3NvY19wYXJhbXNfdG9fYmNsayhwYXJhbXMpOworCWlmIChiY2xrX3JhdGUgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIlVuc3VwcG9ydGVkIEJDTEsgcmF0ZTogJWRcbiIsIGJjbGtfcmF0ZSk7CisJCXJldHVybiBiY2xrX3JhdGU7CisJfQorCisJLyogTmVlZHMgbG9va2luZyBhdCBmb3IgVERNICovCisJYml0cyA9IHNuZF9wY21fZm9ybWF0X3dpZHRoKHBhcmFtc19mb3JtYXQocGFyYW1zKSk7CisJaWYgKGJpdHMgPCAwKQorCQlyZXR1cm4gYml0czsKKwlhaWZkYXRhIHw9IChiaXRzIDw8IFdNODkxNV9BSUYxVFhfV0xfU0hJRlQpIHwgYml0czsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRzcF9kaXZzKTsgaSsrKSB7CisJCWlmIChkc3BfZGl2c1tpXSA9PSBwYXJhbXNfcmF0ZShwYXJhbXMpKQorCQkJYnJlYWs7CisJfQorCWlmIChpID09IEFSUkFZX1NJWkUoZHNwX2RpdnMpKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIlVuc3VwcG9ydGVkIHNhbXBsZSByYXRlICVkSHpcbiIsCisJCQlwYXJhbXNfcmF0ZShwYXJhbXMpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRzcCB8PSBpIDw8IGRzcF9zaGlmdDsKKworCS8qIFBpY2sgYSBkaXZpc29yIGZvciBCQ0xLIGFzIGNsb3NlIGFzIHdlIGNhbiBnZXQgdG8gaWRlYWwgKi8KKwliZXN0ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShiY2xrX2RpdnMpOyBpKyspIHsKKwkJY3VyX3ZhbCA9ICh3bTg5MTUtPnN5c2NsayAvIGJjbGtfZGl2c1tpXSkgLSBiY2xrX3JhdGU7CisJCWlmIChjdXJfdmFsIDwgMCkgLyogQkNMSyB0YWJsZSBpcyBzb3J0ZWQgKi8KKwkJCWJyZWFrOworCQliZXN0ID0gaTsKKwl9CisJYmNsa19yYXRlID0gd204OTE1LT5zeXNjbGsgLyBiY2xrX2RpdnNbYmVzdF07CisJZGV2X2RiZyhkYWktPmRldiwgIlVzaW5nIEJDTEtfRElWICVkIGZvciBhY3R1YWwgQkNMSyAlZEh6XG4iLAorCQliY2xrX2RpdnNbYmVzdF0sIGJjbGtfcmF0ZSk7CisJYmNsayB8PSBiZXN0OworCisJbHJjbGsgPSBiY2xrX3JhdGUgLyBwYXJhbXNfcmF0ZShwYXJhbXMpOworCWRldl9kYmcoZGFpLT5kZXYsICJVc2luZyBMUkNMSyByYXRlICVkIGZvciBhY3R1YWwgTFJDTEsgJWRIelxuIiwKKwkJbHJjbGssIGJjbGtfcmF0ZSAvIGxyY2xrKTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIGFpZmRhdGFfcmVnLAorCQkJICAgIFdNODkxNV9BSUYxVFhfV0xfTUFTSyB8CisJCQkgICAgV004OTE1X0FJRjFUWF9TTE9UX0xFTl9NQVNLLAorCQkJICAgIGFpZmRhdGEpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIGJjbGtfcmVnLCBXTTg5MTVfQUlGMV9CQ0xLX0RJVl9NQVNLLCBiY2xrKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBscmNsa19yZWcsIFdNODkxNV9BSUYxUlhfUkFURV9NQVNLLAorCQkJICAgIGxyY2xrKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfQUlGX0NMT0NLSU5HXzIsCisJCQkgICAgV004OTE1X0RTUDFfRElWX1NISUZUIDw8IGRzcF9zaGlmdCwgZHNwKTsKKworCXdtODkxNS0+cnhfcmF0ZVtkYWktPmlkXSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5MTVfc2V0X3N5c2NsayhzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwKKwkJaW50IGNsa19pZCwgdW5zaWduZWQgaW50IGZyZXEsIGludCBkaXIpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTE1X3ByaXYgKndtODkxNSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCWludCBsZmNsayA9IDA7CisJaW50IHJhdGVkaXYgPSAwOworCWludCBzcmM7CisJaW50IG9sZDsKKworCS8qIERpc2FibGUgU1lTQ0xLIHdoaWxlIHdlIHJlY29uZmlndXJlICovCisJb2xkID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MTVfQUlGX0NMT0NLSU5HXzEpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9BSUZfQ0xPQ0tJTkdfMSwKKwkJCSAgICBXTTg5MTVfU1lTQ0xLX0VOQSwgMCk7CisKKwlzd2l0Y2ggKGNsa19pZCkgeworCWNhc2UgV004OTE1X1NZU0NMS19NQ0xLMToKKwkJd204OTE1LT5zeXNjbGsgPSBmcmVxOworCQlzcmMgPSAwOworCQlicmVhazsKKwljYXNlIFdNODkxNV9TWVNDTEtfTUNMSzI6CisJCXdtODkxNS0+c3lzY2xrID0gZnJlcTsKKwkJc3JjID0gMTsKKwkJYnJlYWs7CisJY2FzZSBXTTg5MTVfU1lTQ0xLX0ZMTDoKKwkJd204OTE1LT5zeXNjbGsgPSBmcmVxOworCQlzcmMgPSAyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJVbnN1cHBvcnRlZCBjbG9jayBzb3VyY2UgJWRcbiIsIGNsa19pZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAod204OTE1LT5zeXNjbGspIHsKKwljYXNlIDYxNDQwMDA6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9BSUZfUkFURSwKKwkJCQkgICAgV004OTE1X1NZU0NMS19SQVRFLCAwKTsKKwkJYnJlYWs7CisJY2FzZSAyNDU3NjAwMDoKKwkJcmF0ZWRpdiA9IFdNODkxNV9TWVNDTEtfRElWOworCWNhc2UgMTIyODgwMDA6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9BSUZfUkFURSwKKwkJCQkgICAgV004OTE1X1NZU0NMS19SQVRFLCBXTTg5MTVfU1lTQ0xLX1JBVEUpOworCQlicmVhazsKKwljYXNlIDMyMDAwOgorCWNhc2UgMzI3Njg6CisJCWxmY2xrID0gV004OTE1X0xGQ0xLX0VOQTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X3dhcm4oY29kZWMtPmRldiwgIlVuc3VwcG9ydGVkIGNsb2NrIHJhdGUgJWRIelxuIiwKKwkJCSB3bTg5MTUtPnN5c2Nsayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9BSUZfQ0xPQ0tJTkdfMSwKKwkJCSAgICBXTTg5MTVfU1lTQ0xLX1NSQ19NQVNLIHwgV004OTE1X1NZU0NMS19ESVZfTUFTSywKKwkJCSAgICBzcmMgPDwgV004OTE1X1NZU0NMS19TUkNfU0hJRlQgfCByYXRlZGl2KTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfQ0xPQ0tJTkdfMSwgV004OTE1X0xGQ0xLX0VOQSwgbGZjbGspOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9BSUZfQ0xPQ0tJTkdfMSwKKwkJCSAgICBXTTg5MTVfU1lTQ0xLX0VOQSwgb2xkKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgX2ZsbF9kaXYgeworCXUxNiBmbGxfZnJhdGlvOworCXUxNiBmbGxfb3V0ZGl2OworCXUxNiBmbGxfcmVmY2xrX2RpdjsKKwl1MTYgZmxsX2xvb3BfZ2FpbjsKKwl1MTYgZmxsX3JlZl9mcmVxOworCXUxNiBuOworCXUxNiB0aGV0YTsKKwl1MTYgbGFtYmRhOworfTsKKworc3RhdGljIHN0cnVjdCB7CisJdW5zaWduZWQgaW50IG1pbjsKKwl1bnNpZ25lZCBpbnQgbWF4OworCXUxNiBmbGxfZnJhdGlvOworCWludCByYXRpbzsKK30gZmxsX2ZyYXRpb3NbXSA9IHsKKwl7ICAgICAgIDAsICAgIDY0MDAwLCA0LCAxNiB9LAorCXsgICA2NDAwMCwgICAxMjgwMDAsIDMsICA4IH0sCisJeyAgMTI4MDAwLCAgIDI1NjAwMCwgMiwgIDQgfSwKKwl7ICAyNTYwMDAsICAxMDAwMDAwLCAxLCAgMiB9LAorCXsgMTAwMDAwMCwgMTM1MDAwMDAsIDAsICAxIH0sCit9OworCitzdGF0aWMgaW50IGZsbF9mYWN0b3JzKHN0cnVjdCBfZmxsX2RpdiAqZmxsX2RpdiwgdW5zaWduZWQgaW50IEZyZWYsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgRm91dCkKK3sKKwl1bnNpZ25lZCBpbnQgdGFyZ2V0OworCXVuc2lnbmVkIGludCBkaXY7CisJdW5zaWduZWQgaW50IGZyYXRpbywgZ2NkX2ZsbDsKKwlpbnQgaTsKKworCS8qIEZyZWYgbXVzdCBiZSA8PTEzLjVNSHogKi8KKwlkaXYgPSAxOworCWZsbF9kaXYtPmZsbF9yZWZjbGtfZGl2ID0gMDsKKwl3aGlsZSAoKEZyZWYgLyBkaXYpID4gMTM1MDAwMDApIHsKKwkJZGl2ICo9IDI7CisJCWZsbF9kaXYtPmZsbF9yZWZjbGtfZGl2Kys7CisKKwkJaWYgKGRpdiA+IDgpIHsKKwkJCXByX2VycigiQ2FuJ3Qgc2NhbGUgJWRNSHogaW5wdXQgZG93biB0byA8PTEzLjVNSHpcbiIsCisJCQkgICAgICAgRnJlZik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCXByX2RlYnVnKCJGTEwgRnJlZj0ldSBGb3V0PSV1XG4iLCBGcmVmLCBGb3V0KTsKKworCS8qIEFwcGx5IHRoZSBkaXZpc2lvbiBmb3Igb3VyIHJlbWFpbmluZyBjYWxjdWxhdGlvbnMgKi8KKwlGcmVmIC89IGRpdjsKKworCWlmIChGcmVmID49IDMwMDAwMDApCisJCWZsbF9kaXYtPmZsbF9sb29wX2dhaW4gPSA1OworCWVsc2UKKwkJZmxsX2Rpdi0+ZmxsX2xvb3BfZ2FpbiA9IDA7CisKKwlpZiAoRnJlZiA+PSA0ODAwMCkKKwkJZmxsX2Rpdi0+ZmxsX3JlZl9mcmVxID0gMDsKKwllbHNlCisJCWZsbF9kaXYtPmZsbF9yZWZfZnJlcSA9IDE7CisKKwkvKiBGdmNvIHNob3VsZCBiZSA5MC0xMDBNSHo7IGRvbid0IGNoZWNrIHRoZSB1cHBlciBib3VuZCAqLworCWRpdiA9IDI7CisJd2hpbGUgKEZvdXQgKiBkaXYgPCA5MDAwMDAwMCkgeworCQlkaXYrKzsKKwkJaWYgKGRpdiA+IDY0KSB7CisJCQlwcl9lcnIoIlVuYWJsZSB0byBmaW5kIEZMTF9PVVRESVYgZm9yIEZvdXQ9JXVIelxuIiwKKwkJCSAgICAgICBGb3V0KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCXRhcmdldCA9IEZvdXQgKiBkaXY7CisJZmxsX2Rpdi0+ZmxsX291dGRpdiA9IGRpdiAtIDE7CisKKwlwcl9kZWJ1ZygiRkxMIEZ2Y289JWRIelxuIiwgdGFyZ2V0KTsKKworCS8qIEZpbmQgYW4gYXBwcm9wcmFpdGUgRkxMX0ZSQVRJTyBhbmQgZmFjdG9yIGl0IG91dCBvZiB0aGUgdGFyZ2V0ICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmxsX2ZyYXRpb3MpOyBpKyspIHsKKwkJaWYgKGZsbF9mcmF0aW9zW2ldLm1pbiA8PSBGcmVmICYmIEZyZWYgPD0gZmxsX2ZyYXRpb3NbaV0ubWF4KSB7CisJCQlmbGxfZGl2LT5mbGxfZnJhdGlvID0gZmxsX2ZyYXRpb3NbaV0uZmxsX2ZyYXRpbzsKKwkJCWZyYXRpbyA9IGZsbF9mcmF0aW9zW2ldLnJhdGlvOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGkgPT0gQVJSQVlfU0laRShmbGxfZnJhdGlvcykpIHsKKwkJcHJfZXJyKCJVbmFibGUgdG8gZmluZCBGTExfRlJBVElPIGZvciBGcmVmPSV1SHpcbiIsIEZyZWYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmbGxfZGl2LT5uID0gdGFyZ2V0IC8gKGZyYXRpbyAqIEZyZWYpOworCisJaWYgKHRhcmdldCAlIEZyZWYgPT0gMCkgeworCQlmbGxfZGl2LT50aGV0YSA9IDA7CisJCWZsbF9kaXYtPmxhbWJkYSA9IDA7CisJfSBlbHNlIHsKKwkJZ2NkX2ZsbCA9IGdjZCh0YXJnZXQsIGZyYXRpbyAqIEZyZWYpOworCisJCWZsbF9kaXYtPnRoZXRhID0gKHRhcmdldCAtIChmbGxfZGl2LT5uICogZnJhdGlvICogRnJlZikpCisJCQkvIGdjZF9mbGw7CisJCWZsbF9kaXYtPmxhbWJkYSA9IChmcmF0aW8gKiBGcmVmKSAvIGdjZF9mbGw7CisJfQorCisJcHJfZGVidWcoIkZMTCBOPSV4IFRIRVRBPSV4IExBTUJEQT0leFxuIiwKKwkJIGZsbF9kaXYtPm4sIGZsbF9kaXYtPnRoZXRhLCBmbGxfZGl2LT5sYW1iZGEpOworCXByX2RlYnVnKCJGTExfRlJBVElPPSV4IEZMTF9PVVRESVY9JXggRkxMX1JFRkNMS19ESVY9JXhcbiIsCisJCSBmbGxfZGl2LT5mbGxfZnJhdGlvLCBmbGxfZGl2LT5mbGxfb3V0ZGl2LAorCQkgZmxsX2Rpdi0+ZmxsX3JlZmNsa19kaXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTE1X3NldF9mbGwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgZmxsX2lkLCBpbnQgc291cmNlLAorCQkJICB1bnNpZ25lZCBpbnQgRnJlZiwgdW5zaWduZWQgaW50IEZvdXQpCit7CisJc3RydWN0IHdtODkxNV9wcml2ICp3bTg5MTUgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlzdHJ1Y3QgX2ZsbF9kaXYgZmxsX2RpdjsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJaW50IHJldCwgcmVnOworCisJLyogQW55IGNoYW5nZT8gKi8KKwlpZiAoc291cmNlID09IHdtODkxNS0+ZmxsX3NyYyAmJiBGcmVmID09IHdtODkxNS0+ZmxsX2ZyZWYgJiYKKwkgICAgRm91dCA9PSB3bTg5MTUtPmZsbF9mb3V0KQorCQlyZXR1cm4gMDsKKworCWlmIChGb3V0ID09IDApIHsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiRkxMIGRpc2FibGVkXG4iKTsKKworCQl3bTg5MTUtPmZsbF9mcmVmID0gMDsKKwkJd204OTE1LT5mbGxfZm91dCA9IDA7CisKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X0ZMTF9DT05UUk9MXzEsCisJCQkJICAgIFdNODkxNV9GTExfRU5BLCAwKTsKKworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXQgPSBmbGxfZmFjdG9ycygmZmxsX2RpdiwgRnJlZiwgRm91dCk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJc3dpdGNoIChzb3VyY2UpIHsKKwljYXNlIFdNODkxNV9GTExfTUNMSzE6CisJCXJlZyA9IDA7CisJCWJyZWFrOworCWNhc2UgV004OTE1X0ZMTF9NQ0xLMjoKKwkJcmVnID0gMTsKKwljYXNlIFdNODkxNV9GTExfREFDTFJDTEsxOgorCQlyZWcgPSAyOworCQlicmVhazsKKwljYXNlIFdNODkxNV9GTExfQkNMSzE6CisJCXJlZyA9IDM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoY29kZWMtPmRldiwgIlVua25vd24gRkxMIHNvdXJjZSAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmVnIHw9IGZsbF9kaXYuZmxsX3JlZmNsa19kaXYgPDwgV004OTE1X0ZMTF9SRUZDTEtfRElWX1NISUZUOworCXJlZyB8PSBmbGxfZGl2LmZsbF9yZWZfZnJlcSA8PCBXTTg5MTVfRkxMX1JFRl9GUkVRX1NISUZUOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X0ZMTF9DT05UUk9MXzUsCisJCQkgICAgV004OTE1X0ZMTF9SRUZDTEtfRElWX01BU0sgfCBXTTg5MTVfRkxMX1JFRl9GUkVRIHwKKwkJCSAgICBXTTg5MTVfRkxMX1JFRkNMS19TUkNfTUFTSywgcmVnKTsKKworCXJlZyA9IDA7CisJaWYgKGZsbF9kaXYudGhldGEgfHwgZmxsX2Rpdi5sYW1iZGEpCisJCXJlZyB8PSBXTTg5MTVfRkxMX0VGU19FTkEgfCAoMyA8PCBXTTg5MTVfRkxMX0xGU1JfU0VMX1NISUZUKTsKKwllbHNlCisJCXJlZyB8PSAxIDw8IFdNODkxNV9GTExfTEZTUl9TRUxfU0hJRlQ7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTE1X0ZMTF9FRlNfMiwgcmVnKTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9GTExfQ09OVFJPTF8yLAorCQkJICAgIFdNODkxNV9GTExfT1VURElWX01BU0sgfAorCQkJICAgIFdNODkxNV9GTExfRlJBVElPX01BU0ssCisJCQkgICAgKGZsbF9kaXYuZmxsX291dGRpdiA8PCBXTTg5MTVfRkxMX09VVERJVl9TSElGVCkgfAorCQkJICAgIChmbGxfZGl2LmZsbF9mcmF0aW8pKTsKKworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkxNV9GTExfQ09OVFJPTF8zLCBmbGxfZGl2LnRoZXRhKTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9GTExfQ09OVFJPTF80LAorCQkJICAgIFdNODkxNV9GTExfTl9NQVNLIHwgV004OTE1X0ZMTF9MT09QX0dBSU5fTUFTSywKKwkJCSAgICAoZmxsX2Rpdi5uIDw8IFdNODkxNV9GTExfTl9TSElGVCkgfAorCQkJICAgIGZsbF9kaXYuZmxsX2xvb3BfZ2Fpbik7CisKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MTVfRkxMX0VGU18xLCBmbGxfZGl2LmxhbWJkYSk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfRkxMX0NPTlRST0xfMSwKKwkJCSAgICBXTTg5MTVfRkxMX0VOQSwgV004OTE1X0ZMTF9FTkEpOworCisJLyogVGhlIEZMTCBzdXBwb3J0cyBsaXZlIHJlY29uZmlndXJhdGlvbiAtIGtpY2sgdGhhdCBpbiBjYXNlIHdlIHdlcmUKKwkgKiBhbHJlYWR5IGVuYWJsZWQuCisJICovCisJc25kX3NvY193cml0ZShjb2RlYywgV004OTE1X0ZMTF9DT05UUk9MXzYsIFdNODkxNV9GTExfU1dJVENIX0NMSyk7CisKKwkvKiBXYWl0IGZvciB0aGUgRkxMIHRvIGxvY2ssIHVzaW5nIHRoZSBpbnRlcnJ1cHQgaWYgcG9zc2libGUgKi8KKwlpZiAoRnJlZiA+IDEwMDAwMDApCisJCXRpbWVvdXQgPSB1c2Vjc190b19qaWZmaWVzKDMwMCk7CisJZWxzZQorCQl0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcygyKTsKKworCXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmd204OTE1LT5mbGxfbG9jaywgdGltZW91dCk7CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJGTEwgY29uZmlndXJlZCBmb3IgJWRIei0+JWRIelxuIiwgRnJlZiwgRm91dCk7CisKKwl3bTg5MTUtPmZsbF9mcmVmID0gRnJlZjsKKwl3bTg5MTUtPmZsbF9mb3V0ID0gRm91dDsKKwl3bTg5MTUtPmZsbF9zcmMgPSBzb3VyY2U7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19HUElPTElCCitzdGF0aWMgaW5saW5lIHN0cnVjdCB3bTg5MTVfcHJpdiAqZ3Bpb190b193bTg5MTUoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCB3bTg5MTVfcHJpdiwgZ3Bpb19jaGlwKTsKK30KKworc3RhdGljIHZvaWQgd204OTE1X2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCXN0cnVjdCB3bTg5MTVfcHJpdiAqd204OTE1ID0gZ3Bpb190b193bTg5MTUoY2hpcCk7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gd204OTE1LT5jb2RlYzsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9HUElPXzEgKyBvZmZzZXQsCisJCQkgICAgV004OTE1X0dQMV9MVkwsICEhdmFsdWUgPDwgV004OTE1X0dQMV9MVkxfU0hJRlQpOworfQorCitzdGF0aWMgaW50IHdtODkxNV9ncGlvX2RpcmVjdGlvbl9vdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQkgICAgIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCXN0cnVjdCB3bTg5MTVfcHJpdiAqd204OTE1ID0gZ3Bpb190b193bTg5MTUoY2hpcCk7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gd204OTE1LT5jb2RlYzsKKwlpbnQgdmFsOworCisJdmFsID0gKDEgPDwgV004OTE1X0dQMV9GTl9TSElGVCkgfCAoISF2YWx1ZSA8PCBXTTg5MTVfR1AxX0xWTF9TSElGVCk7CisKKwlyZXR1cm4gc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X0dQSU9fMSArIG9mZnNldCwKKwkJCQkgICBXTTg5MTVfR1AxX0ZOX01BU0sgfCBXTTg5MTVfR1AxX0RJUiB8CisJCQkJICAgV004OTE1X0dQMV9MVkwsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgd204OTE1X2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3Qgd204OTE1X3ByaXYgKndtODkxNSA9IGdwaW9fdG9fd204OTE1KGNoaXApOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHdtODkxNS0+Y29kZWM7CisJaW50IHJldDsKKworCXJldCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTE1X0dQSU9fMSArIG9mZnNldCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gKHJldCAmIFdNODkxNV9HUDFfTFZMKSAhPSAwOworfQorCitzdGF0aWMgaW50IHdtODkxNV9ncGlvX2RpcmVjdGlvbl9pbihzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IHdtODkxNV9wcml2ICp3bTg5MTUgPSBncGlvX3RvX3dtODkxNShjaGlwKTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3bTg5MTUtPmNvZGVjOworCisJcmV0dXJuIHNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9HUElPXzEgKyBvZmZzZXQsCisJCQkJICAgV004OTE1X0dQMV9GTl9NQVNLIHwgV004OTE1X0dQMV9ESVIsCisJCQkJICAgKDEgPDwgV004OTE1X0dQMV9GTl9TSElGVCkgfAorCQkJCSAgICgxIDw8IFdNODkxNV9HUDFfRElSX1NISUZUKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19jaGlwIHdtODkxNV90ZW1wbGF0ZV9jaGlwID0geworCS5sYWJlbAkJCT0gIndtODkxNSIsCisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkuZGlyZWN0aW9uX291dHB1dAk9IHdtODkxNV9ncGlvX2RpcmVjdGlvbl9vdXQsCisJLnNldAkJCT0gd204OTE1X2dwaW9fc2V0LAorCS5kaXJlY3Rpb25faW5wdXQJPSB3bTg5MTVfZ3Bpb19kaXJlY3Rpb25faW4sCisJLmdldAkJCT0gd204OTE1X2dwaW9fZ2V0LAorCS5jYW5fc2xlZXAJCT0gMSwKK307CisKK3N0YXRpYyB2b2lkIHdtODkxNV9pbml0X2dwaW8oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bTg5MTVfcHJpdiAqd204OTE1ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJaW50IHJldDsKKworCXdtODkxNS0+Z3Bpb19jaGlwID0gd204OTE1X3RlbXBsYXRlX2NoaXA7CisJd204OTE1LT5ncGlvX2NoaXAubmdwaW8gPSA1OworCXdtODkxNS0+Z3Bpb19jaGlwLmRldiA9IGNvZGVjLT5kZXY7CisKKwlpZiAod204OTE1LT5wZGF0YS5ncGlvX2Jhc2UpCisJCXdtODkxNS0+Z3Bpb19jaGlwLmJhc2UgPSB3bTg5MTUtPnBkYXRhLmdwaW9fYmFzZTsKKwllbHNlCisJCXdtODkxNS0+Z3Bpb19jaGlwLmJhc2UgPSAtMTsKKworCXJldCA9IGdwaW9jaGlwX2FkZCgmd204OTE1LT5ncGlvX2NoaXApOworCWlmIChyZXQgIT0gMCkKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIGFkZCBHUElPczogJWRcbiIsIHJldCk7Cit9CisKK3N0YXRpYyB2b2lkIHdtODkxNV9mcmVlX2dwaW8oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bTg5MTVfcHJpdiAqd204OTE1ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJaW50IHJldDsKKworCXJldCA9IGdwaW9jaGlwX3JlbW92ZSgmd204OTE1LT5ncGlvX2NoaXApOworCWlmIChyZXQgIT0gMCkKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlbW92ZSBHUElPczogJWRcbiIsIHJldCk7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgd204OTE1X2luaXRfZ3BpbyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7Cit9CisKK3N0YXRpYyB2b2lkIHdtODkxNV9mcmVlX2dwaW8oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworfQorI2VuZGlmCisKKy8qKgorICogd204OTE1X2RldGVjdCAtIEVuYWJsZSBkZWZhdWx0IFdNODkxNSBqYWNrIGRldGVjdGlvbgorICoKKyAqIFRoZSBXTTg5MTUgaGFzIGFkdmFuY2VkIGFjY2Vzc29yeSBkZXRlY3Rpb24gc3VwcG9ydCBmb3IgaGVhZHNldHMuCisgKiBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aGljaCBpbnRlZ3JhdGVzCisgKiB0aGUgbWFqb3JpdHkgb2YgdGhpcyBmdW5jdGlvbmFsaXR5IHdpdGggbWluaW1hbCB1c2VyIGNvbmZpZ3VyYXRpb24uCisgKgorICogVGhpcyB3aWxsIGRldGVjdCBoZWFkc2V0LCBoZWFkcGhvbmUgYW5kIHNob3J0IGNpcmN1aXQgYnV0dG9uIGFuZAorICogd2lsbCBhbHNvIGRldGVjdCBpbnZlcnRlZCBtaWNyb3Bob25lIGdyb3VuZCBjb25uZWN0aW9ucyBhbmQgdXBkYXRlCisgKiB0aGUgcG9sYXJpdHkgb2YgdGhlIGNvbm5lY3Rpb25zLgorICovCitpbnQgd204OTE1X2RldGVjdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHN0cnVjdCBzbmRfc29jX2phY2sgKmphY2ssCisJCSAgd204OTE1X3BvbGFyaXR5X2ZuIHBvbGFyaXR5X2NiKQoreworCXN0cnVjdCB3bTg5MTVfcHJpdiAqd204OTE1ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisKKwl3bTg5MTUtPmphY2sgPSBqYWNrOworCXdtODkxNS0+ZGV0ZWN0aW5nID0gdHJ1ZTsKKwl3bTg5MTUtPnBvbGFyaXR5X2NiID0gcG9sYXJpdHlfY2I7CisKKwlpZiAod204OTE1LT5wb2xhcml0eV9jYikKKwkJd204OTE1LT5wb2xhcml0eV9jYihjb2RlYywgMCk7CisKKwkvKiBDbGVhciBkaXNjYXJnZSB0byBhdm9pZCBub2lzZSBkdXJpbmcgZGV0ZWN0aW9uICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X01JQ0JJQVNfMSwKKwkJCSAgICBXTTg5MTVfTUlDQjFfRElTQ0gsIDApOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9NSUNCSUFTXzIsCisJCQkgICAgV004OTE1X01JQ0IyX0RJU0NILCAwKTsKKworCS8qIExETzIgcG93ZXJzIHRoZSBtaWNyb3Bob25lcywgU1lTQ0xLIGNsb2NrcyBkZXRlY3Rpb24gKi8KKwlzbmRfc29jX2RhcG1fZm9yY2VfZW5hYmxlX3BpbigmY29kZWMtPmRhcG0sICJMRE8yIik7CisJc25kX3NvY19kYXBtX2ZvcmNlX2VuYWJsZV9waW4oJmNvZGVjLT5kYXBtLCAiU1lTQ0xLIik7CisKKwkvKiBXZSBzdGFydCBvZmYganVzdCBlbmFibGluZyBtaWNyb3Bob25lIGRldGVjdGlvbiAtIGV2ZW4gYQorCSAqIHBsYWluIGhlYWRwaG9uZSB3aWxsIHRyaWdnZXIgZGV0ZWN0aW9uLgorCSAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9NSUNfREVURUNUXzEsCisJCQkgICAgV004OTE1X01JQ0RfRU5BLCBXTTg5MTVfTUlDRF9FTkEpOworCisJLyogU2xvd2VzdCBkZXRlY3Rpb24gcmF0ZSwgZ2l2ZXMgZGVib3VuY2UgZm9yIGluaXRpYWwgZGV0ZWN0aW9uICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X01JQ19ERVRFQ1RfMSwKKwkJCSAgICBXTTg5MTVfTUlDRF9SQVRFX01BU0ssCisJCQkgICAgV004OTE1X01JQ0RfUkFURV9NQVNLKTsKKworCS8qIEVuYWJsZSBpbnRlcnJ1cHRzIGFuZCB3ZSdyZSBvZmYgKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfSU5URVJSVVBUX1NUQVRVU18yX01BU0ssCisJCQkgICAgV004OTE1X0lNX01JQ0RfRUlOVCwgMCk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtODkxNV9kZXRlY3QpOworCitzdGF0aWMgdm9pZCB3bTg5MTVfbWljZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHdtODkxNV9wcml2ICp3bTg5MTUgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlpbnQgdmFsLCByZWc7CisKKwl2YWwgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkxNV9NSUNfREVURUNUXzMpOworCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiTWljcm9waG9uZSBldmVudDogJXhcbiIsIHZhbCk7CisKKwlpZiAoISh2YWwgJiBXTTg5MTVfTUlDRF9WQUxJRCkpIHsKKwkJZGV2X3dhcm4oY29kZWMtPmRldiwgIk1pY3JvcGhvbmUgZGV0ZWN0aW9uIHN0YXRlIGludmFsaWRcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogTm8gYWNjZXNzb3J5LCByZXNldCBldmVyeXRoaW5nIGFuZCByZXBvcnQgcmVtb3ZhbCAqLworCWlmICghKHZhbCAmIFdNODkxNV9NSUNEX1NUUykpIHsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiSmFjayByZW1vdmFsIGRldGVjdGVkXG4iKTsKKwkJd204OTE1LT5qYWNrX21pYyA9IGZhbHNlOworCQl3bTg5MTUtPmRldGVjdGluZyA9IHRydWU7CisJCXNuZF9zb2NfamFja19yZXBvcnQod204OTE1LT5qYWNrLCAwLAorCQkJCSAgICBTTkRfSkFDS19IRUFEU0VUIHwgU05EX0pBQ0tfQlROXzApOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfTUlDX0RFVEVDVF8xLAorCQkJCSAgICBXTTg5MTVfTUlDRF9SQVRFX01BU0ssCisJCQkJICAgIFdNODkxNV9NSUNEX1JBVEVfTUFTSyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBJZiB0aGUgbWVhc3VyZW1lbnQgaXMgdmVyeSBoaWdoIHdlJ3ZlIGdvdCBhIG1pY3JvcGhvbmUgYnV0CisJICogZG8gYSBsaXR0bGUgZGVib3VuY2UgdG8gYWNjb3VudCBmb3IgbWVjaGFuaWNhbCBpc3N1ZXMuCisJICovCisJaWYgKHZhbCAmIDB4NDAwKSB7CisJCWRldl9kYmcoY29kZWMtPmRldiwgIk1pY3JvcGhvbmUgZGV0ZWN0ZWRcbiIpOworCQlzbmRfc29jX2phY2tfcmVwb3J0KHdtODkxNS0+amFjaywgU05EX0pBQ0tfSEVBRFNFVCwKKwkJCQkgICAgU05EX0pBQ0tfSEVBRFNFVCB8IFNORF9KQUNLX0JUTl8wKTsKKwkJd204OTE1LT5qYWNrX21pYyA9IHRydWU7CisJCXdtODkxNS0+ZGV0ZWN0aW5nID0gZmFsc2U7CisJfQorCisJLyogSWYgd2UgZGV0ZWN0ZWQgYSBsb3dlciBpbXBlZGVuY2UgZHVyaW5nIGluaXRpYWwgc3RhcnR1cAorCSAqIHRoZW4gd2UgcHJvYmFibHkgaGF2ZSB0aGUgd3JvbmcgcG9sYXJpdHksIGZsaXAgaXQuICBEb24ndAorCSAqIGRvIHRoaXMgZm9yIHRoZSBsb3dlc3QgaW1wZWRlbmNlcyB0byBzcGVlZCB1cCBkZXRlY3Rpb24gb2YKKwkgKiBwbGFpbiBoZWFkcGhvbmVzLgorCSAqLworCWlmICh3bTg5MTUtPmRldGVjdGluZyAmJiAodmFsICYgMHgzZjApKSB7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTE1X0FDQ0VTU09SWV9ERVRFQ1RfTU9ERV8yKTsKKwkJcmVnIF49IFdNODkxNV9IUE9VVDFGQl9TUkMgfCBXTTg5MTVfTUlDRF9TUkMgfAorCQkJV004OTE1X01JQ0RfQklBU19TUkM7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9BQ0NFU1NPUllfREVURUNUX01PREVfMiwKKwkJCQkgICAgV004OTE1X0hQT1VUMUZCX1NSQyB8IFdNODkxNV9NSUNEX1NSQyB8CisJCQkJICAgIFdNODkxNV9NSUNEX0JJQVNfU1JDLCByZWcpOworCisJCWlmICh3bTg5MTUtPnBvbGFyaXR5X2NiKQorCQkJd204OTE1LT5wb2xhcml0eV9jYihjb2RlYywKKwkJCQkJICAgIChyZWcgJiBXTTg5MTVfTUlDRF9TUkMpICE9IDApOworCisJCWRldl9kYmcoY29kZWMtPmRldiwgIlNldCBtaWNyb3Bob25lIHBvbGFyaXR5IHRvICVkXG4iLAorCQkJKHJlZyAmIFdNODkxNV9NSUNEX1NSQykgIT0gMCk7CisKKwkJcmV0dXJuOworCX0KKworCS8qIERvbid0IGRpc3Rpbmd1aXNoIGJldHdlZW4gYnV0dG9ucywganVzdCByZXBvcnQgYW55IGxvdworCSAqIGltcGVkZW5jZSBhcyBCVE5fMC4KKwkgKi8KKwlpZiAodmFsICYgMHgzZmMpIHsKKwkJaWYgKHdtODkxNS0+amFja19taWMpIHsKKwkJCWRldl9kYmcoY29kZWMtPmRldiwgIk1pYyBidXR0b24gZGV0ZWN0ZWRcbiIpOworCQkJc25kX3NvY19qYWNrX3JlcG9ydCh3bTg5MTUtPmphY2ssCisJCQkJCSAgICBTTkRfSkFDS19IRUFEU0VUIHwgU05EX0pBQ0tfQlROXzAsCisJCQkJCSAgICBTTkRfSkFDS19IRUFEU0VUIHwgU05EX0pBQ0tfQlROXzApOworCQl9IGVsc2UgeworCQkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiSGVhZHBob25lIGRldGVjdGVkXG4iKTsKKwkJCXNuZF9zb2NfamFja19yZXBvcnQod204OTE1LT5qYWNrLAorCQkJCQkgICAgU05EX0pBQ0tfSEVBRFBIT05FLAorCQkJCQkgICAgU05EX0pBQ0tfSEVBRFNFVCB8CisJCQkJCSAgICBTTkRfSkFDS19CVE5fMCk7CisJCQl3bTg5MTUtPmRldGVjdGluZyA9IGZhbHNlOworCQl9CisJfQorCisJLyogSW5jcmVhc2UgcG9sbCByYXRlIHRvIGdpdmUgYmV0dGVyIHJlc3BvbnNpdmVuZXNzIGZvciBidXR0b25zICovCisJaWYgKCF3bTg5MTUtPmRldGVjdGluZykKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X01JQ19ERVRFQ1RfMSwKKwkJCQkgICAgV004OTE1X01JQ0RfUkFURV9NQVNLLAorCQkJCSAgICA1IDw8IFdNODkxNV9NSUNEX1JBVEVfU0hJRlQpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgd204OTE1X2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhdGE7CisJc3RydWN0IHdtODkxNV9wcml2ICp3bTg5MTUgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlpbnQgaXJxX3ZhbDsKKworCWlycV92YWwgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkxNV9JTlRFUlJVUFRfU1RBVFVTXzIpOworCWlmIChpcnFfdmFsIDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVhZCBJUlEgc3RhdHVzOiAlZFxuIiwKKwkJCWlycV92YWwpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCWlycV92YWwgJj0gfnNuZF9zb2NfcmVhZChjb2RlYywgV004OTE1X0lOVEVSUlVQVF9TVEFUVVNfMl9NQVNLKTsKKworCWlmIChpcnFfdmFsICYgKFdNODkxNV9EQ1NfRE9ORV8wMV9FSU5UIHwgV004OTE1X0RDU19ET05FXzIzX0VJTlQpKSB7CisJCWRldl9kYmcoY29kZWMtPmRldiwgIkRDIHNlcnZvIElSUVxuIik7CisJCWNvbXBsZXRlKCZ3bTg5MTUtPmRjc19kb25lKTsKKwl9CisKKwlpZiAoaXJxX3ZhbCAmIFdNODkxNV9GSUZPU19FUlJfRUlOVCkKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRGlnaXRhbCBjb3JlIEZJRk8gZXJyb3JcbiIpOworCisJaWYgKGlycV92YWwgJiBXTTg5MTVfRkxMX0xPQ0tfRUlOVCkgeworCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJGTEwgbG9ja2VkXG4iKTsKKwkJY29tcGxldGUoJndtODkxNS0+ZmxsX2xvY2spOworCX0KKworCWlmIChpcnFfdmFsICYgV004OTE1X01JQ0RfRUlOVCkKKwkJd204OTE1X21pY2QoY29kZWMpOworCisJaWYgKGlycV92YWwpIHsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTE1X0lOVEVSUlVQVF9TVEFUVVNfMiwgaXJxX3ZhbCk7CisKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0gZWxzZSB7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHdtODkxNV9yZXR1bmVfbW9iaWxlX3BkYXRhKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgd204OTE1X3ByaXYgKndtODkxNSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCB3bTg5MTVfcGRhdGEgKnBkYXRhID0gJndtODkxNS0+cGRhdGE7CisKKwlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjb250cm9sc1tdID0geworCQlTT0NfRU5VTV9FWFQoIkRTUDEgRVEgTW9kZSIsCisJCQkgICAgIHdtODkxNS0+cmV0dW5lX21vYmlsZV9lbnVtLAorCQkJICAgICB3bTg5MTVfZ2V0X3JldHVuZV9tb2JpbGVfZW51bSwKKwkJCSAgICAgd204OTE1X3B1dF9yZXR1bmVfbW9iaWxlX2VudW0pLAorCQlTT0NfRU5VTV9FWFQoIkRTUDIgRVEgTW9kZSIsCisJCQkgICAgIHdtODkxNS0+cmV0dW5lX21vYmlsZV9lbnVtLAorCQkJICAgICB3bTg5MTVfZ2V0X3JldHVuZV9tb2JpbGVfZW51bSwKKwkJCSAgICAgd204OTE1X3B1dF9yZXR1bmVfbW9iaWxlX2VudW0pLAorCX07CisJaW50IHJldCwgaSwgajsKKwljb25zdCBjaGFyICoqdDsKKworCS8qIFdlIG5lZWQgYW4gYXJyYXkgb2YgdGV4dHMgZm9yIHRoZSBlbnVtIEFQSSBidXQgdGhlIG51bWJlcgorCSAqIG9mIHRleHRzIGlzIGxpa2VseSB0byBiZSBsZXNzIHRoYW4gdGhlIG51bWJlciBvZgorCSAqIGNvbmZpZ3VyYXRpb25zIGR1ZSB0byB0aGUgc2FtcGxlIHJhdGUgZGVwZW5kZW5jeSBvZiB0aGUKKwkgKiBjb25maWd1cmF0aW9ucy4gKi8KKwl3bTg5MTUtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzID0gMDsKKwl3bTg5MTUtPnJldHVuZV9tb2JpbGVfdGV4dHMgPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX3JldHVuZV9tb2JpbGVfY2ZnczsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCB3bTg5MTUtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzOyBqKyspIHsKKwkJCWlmIChzdHJjbXAocGRhdGEtPnJldHVuZV9tb2JpbGVfY2Znc1tpXS5uYW1lLAorCQkJCSAgIHdtODkxNS0+cmV0dW5lX21vYmlsZV90ZXh0c1tqXSkgPT0gMCkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChqICE9IHdtODkxNS0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHMpCisJCQljb250aW51ZTsKKworCQkvKiBFeHBhbmQgdGhlIGFycmF5Li4uICovCisJCXQgPSBrcmVhbGxvYyh3bTg5MTUtPnJldHVuZV9tb2JpbGVfdGV4dHMsCisJCQkgICAgIHNpemVvZihjaGFyICopICogCisJCQkgICAgICh3bTg5MTUtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzICsgMSksCisJCQkgICAgIEdGUF9LRVJORUwpOworCQlpZiAodCA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJLyogLi4uc3RvcmUgdGhlIG5ldyBlbnRyeS4uLiAqLworCQl0W3dtODkxNS0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHNdID0gCisJCQlwZGF0YS0+cmV0dW5lX21vYmlsZV9jZmdzW2ldLm5hbWU7CisKKwkJLyogLi4uYW5kIHJlbWVtYmVyIHRoZSBuZXcgdmVyc2lvbi4gKi8KKwkJd204OTE1LT5udW1fcmV0dW5lX21vYmlsZV90ZXh0cysrOworCQl3bTg5MTUtPnJldHVuZV9tb2JpbGVfdGV4dHMgPSB0OworCX0KKworCWRldl9kYmcoY29kZWMtPmRldiwgIkFsbG9jYXRlZCAlZCB1bmlxdWUgUmVUdW5lIE1vYmlsZSBuYW1lc1xuIiwKKwkJd204OTE1LT5udW1fcmV0dW5lX21vYmlsZV90ZXh0cyk7CisKKwl3bTg5MTUtPnJldHVuZV9tb2JpbGVfZW51bS5tYXggPSB3bTg5MTUtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzOworCXdtODkxNS0+cmV0dW5lX21vYmlsZV9lbnVtLnRleHRzID0gd204OTE1LT5yZXR1bmVfbW9iaWxlX3RleHRzOworCisJcmV0ID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIGNvbnRyb2xzLCBBUlJBWV9TSVpFKGNvbnRyb2xzKSk7CisJaWYgKHJldCAhPSAwKQorCQlkZXZfZXJyKGNvZGVjLT5kZXYsCisJCQkiRmFpbGVkIHRvIGFkZCBSZVR1bmUgTW9iaWxlIGNvbnRyb2xzOiAlZFxuIiwgcmV0KTsKK30KKworc3RhdGljIGludCB3bTg5MTVfcHJvYmUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCWludCByZXQ7CisJc3RydWN0IHdtODkxNV9wcml2ICp3bTg5MTUgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjID0gdG9faTJjX2NsaWVudChjb2RlYy0+ZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CisJaW50IGksIGlycV9mbGFnczsKKworCXdtODkxNS0+Y29kZWMgPSBjb2RlYzsKKworCWluaXRfY29tcGxldGlvbigmd204OTE1LT5kY3NfZG9uZSk7CisJaW5pdF9jb21wbGV0aW9uKCZ3bTg5MTUtPmZsbF9sb2NrKTsKKworCWRhcG0tPmlkbGVfYmlhc19vZmYgPSB0cnVlOworCWRhcG0tPmJpYXNfbGV2ZWwgPSBTTkRfU09DX0JJQVNfT0ZGOworCisJcmV0ID0gc25kX3NvY19jb2RlY19zZXRfY2FjaGVfaW8oY29kZWMsIDE2LCAxNiwgU05EX1NPQ19JMkMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gc2V0IGNhY2hlIEkvTzogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODkxNS0+c3VwcGxpZXMpOyBpKyspCisJCXdtODkxNS0+c3VwcGxpZXNbaV0uc3VwcGx5ID0gd204OTE1X3N1cHBseV9uYW1lc1tpXTsKKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2dldChjb2RlYy0+ZGV2LCBBUlJBWV9TSVpFKHdtODkxNS0+c3VwcGxpZXMpLAorCQkJCSB3bTg5MTUtPnN1cHBsaWVzKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3Qgc3VwcGxpZXM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwl3bTg5MTUtPmRpc2FibGVfbmJbMF0ubm90aWZpZXJfY2FsbCA9IHdtODkxNV9yZWd1bGF0b3JfZXZlbnRfMDsKKwl3bTg5MTUtPmRpc2FibGVfbmJbMV0ubm90aWZpZXJfY2FsbCA9IHdtODkxNV9yZWd1bGF0b3JfZXZlbnRfMTsKKwl3bTg5MTUtPmRpc2FibGVfbmJbMl0ubm90aWZpZXJfY2FsbCA9IHdtODkxNV9yZWd1bGF0b3JfZXZlbnRfMjsKKwl3bTg5MTUtPmRpc2FibGVfbmJbM10ubm90aWZpZXJfY2FsbCA9IHdtODkxNV9yZWd1bGF0b3JfZXZlbnRfMzsKKwl3bTg5MTUtPmRpc2FibGVfbmJbNF0ubm90aWZpZXJfY2FsbCA9IHdtODkxNV9yZWd1bGF0b3JfZXZlbnRfNDsKKwl3bTg5MTUtPmRpc2FibGVfbmJbNV0ubm90aWZpZXJfY2FsbCA9IHdtODkxNV9yZWd1bGF0b3JfZXZlbnRfNTsKKworCS8qIFRoaXMgc2hvdWxkIHJlYWxseSBiZSBtb3ZlZCBpbnRvIHRoZSByZWd1bGF0b3IgY29yZSAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODkxNS0+c3VwcGxpZXMpOyBpKyspIHsKKwkJcmV0ID0gcmVndWxhdG9yX3JlZ2lzdGVyX25vdGlmaWVyKHdtODkxNS0+c3VwcGxpZXNbaV0uY29uc3VtZXIsCisJCQkJCQkgICZ3bTg5MTUtPmRpc2FibGVfbmJbaV0pOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWRldl9lcnIoY29kZWMtPmRldiwKKwkJCQkiRmFpbGVkIHRvIHJlZ2lzdGVyIHJlZ3VsYXRvciBub3RpZmllcjogJWRcbiIsCisJCQkJcmV0KTsKKwkJfQorCX0KKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKHdtODkxNS0+c3VwcGxpZXMpLAorCQkJCSAgICB3bTg5MTUtPnN1cHBsaWVzKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBzdXBwbGllczogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2dldDsKKwl9CisKKwlpZiAod204OTE1LT5wZGF0YS5sZG9fZW5hID49IDApIHsKKwkJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAod204OTE1LT5wZGF0YS5sZG9fZW5hLCAxKTsKKwkJbXNsZWVwKDUpOworCX0KKworCXJldCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTE1X1NPRlRXQVJFX1JFU0VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVhZCBJRCByZWdpc3RlcjogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2VuYWJsZTsKKwl9CisJaWYgKHJldCAhPSAweDg5MTUpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRGV2aWNlIGlzIG5vdCBhIFdNODkxNSwgSUQgJXhcbiIsIHJldCk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX2VuYWJsZTsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkxNV9DSElQX1JFVklTSU9OKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVhZCBkZXZpY2UgcmV2aXNpb246ICVkXG4iLAorCQkJcmV0KTsKKwkJZ290byBlcnJfZW5hYmxlOworCX0KKwkKKwlkZXZfaW5mbyhjb2RlYy0+ZGV2LCAicmV2aXNpb24gJWNcbiIsCisJCSAocmV0ICYgV004OTE1X0NISVBfUkVWX01BU0spICsgJ0EnKTsKKworCWlmICh3bTg5MTUtPnBkYXRhLmxkb19lbmEgPj0gMCkgeworCQlncGlvX3NldF92YWx1ZV9jYW5zbGVlcCh3bTg5MTUtPnBkYXRhLmxkb19lbmEsIDApOworCX0gZWxzZSB7CisJCXJldCA9IHdtODkxNV9yZXNldChjb2RlYyk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gaXNzdWUgcmVzZXRcbiIpOworCQkJZ290byBlcnJfZW5hYmxlOworCQl9CisJfQorCisJY29kZWMtPmNhY2hlX29ubHkgPSB0cnVlOworCisJLyogQXBwbHkgcGxhdGZvcm0gZGF0YSBzZXR0aW5ncyAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9MSU5FX0lOUFVUX0NPTlRST0wsCisJCQkgICAgV004OTE1X0lOTF9NT0RFX01BU0sgfCBXTTg5MTVfSU5SX01PREVfTUFTSywKKwkJCSAgICB3bTg5MTUtPnBkYXRhLmlubF9tb2RlIDw8IFdNODkxNV9JTkxfTU9ERV9TSElGVCB8CisJCQkgICAgd204OTE1LT5wZGF0YS5pbnJfbW9kZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg5MTUtPnBkYXRhLmdwaW9fZGVmYXVsdCk7IGkrKykgeworCQlpZiAoIXdtODkxNS0+cGRhdGEuZ3Bpb19kZWZhdWx0W2ldKQorCQkJY29udGludWU7CisKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTE1X0dQSU9fMSArIGksCisJCQkgICAgICB3bTg5MTUtPnBkYXRhLmdwaW9fZGVmYXVsdFtpXSAmIDB4ZmZmZik7CisJfQorCisJaWYgKHdtODkxNS0+cGRhdGEuc3BrbXV0ZV9zZXEpCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9QRE1fU1BFQUtFUl9NVVRFX1NFUVVFTkNFLAorCQkJCSAgICBXTTg5MTVfU1BLX01VVEVfRU5ESUFOIHwKKwkJCQkgICAgV004OTE1X1NQS19NVVRFX1NFUTFfTUFTSywKKwkJCQkgICAgd204OTE1LT5wZGF0YS5zcGttdXRlX3NlcSk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfQUNDRVNTT1JZX0RFVEVDVF9NT0RFXzIsCisJCQkgICAgV004OTE1X01JQ0RfQklBU19TUkMgfCBXTTg5MTVfSFBPVVQxRkJfU1JDIHwKKwkJCSAgICBXTTg5MTVfTUlDRF9TUkMsIHdtODkxNS0+cGRhdGEubWljZGV0X2RlZik7CisKKwkvKiBMYXRjaCB2b2x1bWUgdXBkYXRlIGJpdHMgKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfTEVGVF9MSU5FX0lOUFVUX1ZPTFVNRSwKKwkJCSAgICBXTTg5MTVfSU4xX1ZVLCBXTTg5MTVfSU4xX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfUklHSFRfTElORV9JTlBVVF9WT0xVTUUsCisJCQkgICAgV004OTE1X0lOMV9WVSwgV004OTE1X0lOMV9WVSk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfREFDMV9MRUZUX1ZPTFVNRSwKKwkJCSAgICBXTTg5MTVfREFDMV9WVSwgV004OTE1X0RBQzFfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9EQUMxX1JJR0hUX1ZPTFVNRSwKKwkJCSAgICBXTTg5MTVfREFDMV9WVSwgV004OTE1X0RBQzFfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9EQUMyX0xFRlRfVk9MVU1FLAorCQkJICAgIFdNODkxNV9EQUMyX1ZVLCBXTTg5MTVfREFDMl9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X0RBQzJfUklHSFRfVk9MVU1FLAorCQkJICAgIFdNODkxNV9EQUMyX1ZVLCBXTTg5MTVfREFDMl9WVSk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfT1VUUFVUMV9MRUZUX1ZPTFVNRSwKKwkJCSAgICBXTTg5MTVfREFDMV9WVSwgV004OTE1X0RBQzFfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9PVVRQVVQxX1JJR0hUX1ZPTFVNRSwKKwkJCSAgICBXTTg5MTVfREFDMV9WVSwgV004OTE1X0RBQzFfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9PVVRQVVQyX0xFRlRfVk9MVU1FLAorCQkJICAgIFdNODkxNV9EQUMyX1ZVLCBXTTg5MTVfREFDMl9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X09VVFBVVDJfUklHSFRfVk9MVU1FLAorCQkJICAgIFdNODkxNV9EQUMyX1ZVLCBXTTg5MTVfREFDMl9WVSk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfRFNQMV9UWF9MRUZUX1ZPTFVNRSwKKwkJCSAgICBXTTg5MTVfRFNQMVRYX1ZVLCBXTTg5MTVfRFNQMVRYX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfRFNQMV9UWF9SSUdIVF9WT0xVTUUsCisJCQkgICAgV004OTE1X0RTUDFUWF9WVSwgV004OTE1X0RTUDFUWF9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X0RTUDJfVFhfTEVGVF9WT0xVTUUsCisJCQkgICAgV004OTE1X0RTUDJUWF9WVSwgV004OTE1X0RTUDJUWF9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X0RTUDJfVFhfUklHSFRfVk9MVU1FLAorCQkJICAgIFdNODkxNV9EU1AyVFhfVlUsIFdNODkxNV9EU1AyVFhfVlUpOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X0RTUDFfUlhfTEVGVF9WT0xVTUUsCisJCQkgICAgV004OTE1X0RTUDFSWF9WVSwgV004OTE1X0RTUDFSWF9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X0RTUDFfUlhfUklHSFRfVk9MVU1FLAorCQkJICAgIFdNODkxNV9EU1AxUlhfVlUsIFdNODkxNV9EU1AxUlhfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9EU1AyX1JYX0xFRlRfVk9MVU1FLAorCQkJICAgIFdNODkxNV9EU1AyUlhfVlUsIFdNODkxNV9EU1AyUlhfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9EU1AyX1JYX1JJR0hUX1ZPTFVNRSwKKwkJCSAgICBXTTg5MTVfRFNQMlJYX1ZVLCBXTTg5MTVfRFNQMlJYX1ZVKTsKKworCS8qIE5vIHN1cHBvcnQgY3VycmVudGx5IGZvciB0aGUgdW5kZXJjbG9ja2VkIFRETSBtb2RlcyBhbmQKKwkgKiBwaWNrIGEgZGVmYXVsdCBURE0gbGF5b3V0IHdpdGggZWFjaCBjaGFubmVsIHBhaXIgd29ya2luZyB3aXRoCisJICogc2xvdHMgMCBhbmQgMS4gKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfQUlGMVJYX0NIQU5ORUxfMF9DT05GSUdVUkFUSU9OLAorCQkJICAgIFdNODkxNV9BSUYxUlhfQ0hBTjBfU0xPVFNfTUFTSyB8CisJCQkgICAgV004OTE1X0FJRjFSWF9DSEFOMF9TVEFSVF9TTE9UX01BU0ssCisJCQkgICAgMSA8PCBXTTg5MTVfQUlGMVJYX0NIQU4wX1NMT1RTX1NISUZUIHwgMCk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X0FJRjFSWF9DSEFOTkVMXzFfQ09ORklHVVJBVElPTiwKKwkJCSAgICBXTTg5MTVfQUlGMVJYX0NIQU4xX1NMT1RTX01BU0sgfAorCQkJICAgIFdNODkxNV9BSUYxUlhfQ0hBTjFfU1RBUlRfU0xPVF9NQVNLLAorCQkJICAgIDEgPDwgV004OTE1X0FJRjFSWF9DSEFOMV9TTE9UU19TSElGVCB8IDEpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9BSUYxUlhfQ0hBTk5FTF8yX0NPTkZJR1VSQVRJT04sCisJCQkgICAgV004OTE1X0FJRjFSWF9DSEFOMl9TTE9UU19NQVNLIHwKKwkJCSAgICBXTTg5MTVfQUlGMVJYX0NIQU4yX1NUQVJUX1NMT1RfTUFTSywKKwkJCSAgICAxIDw8IFdNODkxNV9BSUYxUlhfQ0hBTjJfU0xPVFNfU0hJRlQgfCAwKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfQUlGMVJYX0NIQU5ORUxfM19DT05GSUdVUkFUSU9OLAorCQkJICAgIFdNODkxNV9BSUYxUlhfQ0hBTjNfU0xPVFNfTUFTSyB8CisJCQkgICAgV004OTE1X0FJRjFSWF9DSEFOMF9TVEFSVF9TTE9UX01BU0ssCisJCQkgICAgMSA8PCBXTTg5MTVfQUlGMVJYX0NIQU4zX1NMT1RTX1NISUZUIHwgMSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X0FJRjFSWF9DSEFOTkVMXzRfQ09ORklHVVJBVElPTiwKKwkJCSAgICBXTTg5MTVfQUlGMVJYX0NIQU40X1NMT1RTX01BU0sgfAorCQkJICAgIFdNODkxNV9BSUYxUlhfQ0hBTjBfU1RBUlRfU0xPVF9NQVNLLAorCQkJICAgIDEgPDwgV004OTE1X0FJRjFSWF9DSEFONF9TTE9UU19TSElGVCB8IDApOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9BSUYxUlhfQ0hBTk5FTF81X0NPTkZJR1VSQVRJT04sCisJCQkgICAgV004OTE1X0FJRjFSWF9DSEFONV9TTE9UU19NQVNLIHwKKwkJCSAgICBXTTg5MTVfQUlGMVJYX0NIQU4wX1NUQVJUX1NMT1RfTUFTSywKKwkJCSAgICAxIDw8IFdNODkxNV9BSUYxUlhfQ0hBTjVfU0xPVFNfU0hJRlQgfCAxKTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9BSUYyUlhfQ0hBTk5FTF8wX0NPTkZJR1VSQVRJT04sCisJCQkgICAgV004OTE1X0FJRjJSWF9DSEFOMF9TTE9UU19NQVNLIHwKKwkJCSAgICBXTTg5MTVfQUlGMlJYX0NIQU4wX1NUQVJUX1NMT1RfTUFTSywKKwkJCSAgICAxIDw8IFdNODkxNV9BSUYyUlhfQ0hBTjBfU0xPVFNfU0hJRlQgfCAwKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfQUlGMlJYX0NIQU5ORUxfMV9DT05GSUdVUkFUSU9OLAorCQkJICAgIFdNODkxNV9BSUYyUlhfQ0hBTjFfU0xPVFNfTUFTSyB8CisJCQkgICAgV004OTE1X0FJRjJSWF9DSEFOMV9TVEFSVF9TTE9UX01BU0ssCisJCQkgICAgMSA8PCBXTTg5MTVfQUlGMlJYX0NIQU4xX1NMT1RTX1NISUZUIHwgMSk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfQUlGMVRYX0NIQU5ORUxfMF9DT05GSUdVUkFUSU9OLAorCQkJICAgIFdNODkxNV9BSUYxVFhfQ0hBTjBfU0xPVFNfTUFTSyB8CisJCQkgICAgV004OTE1X0FJRjFUWF9DSEFOMF9TVEFSVF9TTE9UX01BU0ssCisJCQkgICAgMSA8PCBXTTg5MTVfQUlGMVRYX0NIQU4wX1NMT1RTX1NISUZUIHwgMCk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X0FJRjFUWF9DSEFOTkVMXzFfQ09ORklHVVJBVElPTiwKKwkJCSAgICBXTTg5MTVfQUlGMVRYX0NIQU4xX1NMT1RTX01BU0sgfAorCQkJICAgIFdNODkxNV9BSUYxVFhfQ0hBTjBfU1RBUlRfU0xPVF9NQVNLLAorCQkJICAgIDEgPDwgV004OTE1X0FJRjFUWF9DSEFOMV9TTE9UU19TSElGVCB8IDEpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9BSUYxVFhfQ0hBTk5FTF8yX0NPTkZJR1VSQVRJT04sCisJCQkgICAgV004OTE1X0FJRjFUWF9DSEFOMl9TTE9UU19NQVNLIHwKKwkJCSAgICBXTTg5MTVfQUlGMVRYX0NIQU4wX1NUQVJUX1NMT1RfTUFTSywKKwkJCSAgICAxIDw8IFdNODkxNV9BSUYxVFhfQ0hBTjJfU0xPVFNfU0hJRlQgfCAwKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfQUlGMVRYX0NIQU5ORUxfM19DT05GSUdVUkFUSU9OLAorCQkJICAgIFdNODkxNV9BSUYxVFhfQ0hBTjNfU0xPVFNfTUFTSyB8CisJCQkgICAgV004OTE1X0FJRjFUWF9DSEFOMF9TVEFSVF9TTE9UX01BU0ssCisJCQkgICAgMSA8PCBXTTg5MTVfQUlGMVRYX0NIQU4zX1NMT1RTX1NISUZUIHwgMSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X0FJRjFUWF9DSEFOTkVMXzRfQ09ORklHVVJBVElPTiwKKwkJCSAgICBXTTg5MTVfQUlGMVRYX0NIQU40X1NMT1RTX01BU0sgfAorCQkJICAgIFdNODkxNV9BSUYxVFhfQ0hBTjBfU1RBUlRfU0xPVF9NQVNLLAorCQkJICAgIDEgPDwgV004OTE1X0FJRjFUWF9DSEFONF9TTE9UU19TSElGVCB8IDApOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9BSUYxVFhfQ0hBTk5FTF81X0NPTkZJR1VSQVRJT04sCisJCQkgICAgV004OTE1X0FJRjFUWF9DSEFONV9TTE9UU19NQVNLIHwKKwkJCSAgICBXTTg5MTVfQUlGMVRYX0NIQU4wX1NUQVJUX1NMT1RfTUFTSywKKwkJCSAgICAxIDw8IFdNODkxNV9BSUYxVFhfQ0hBTjVfU0xPVFNfU0hJRlQgfCAxKTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9BSUYyVFhfQ0hBTk5FTF8wX0NPTkZJR1VSQVRJT04sCisJCQkgICAgV004OTE1X0FJRjJUWF9DSEFOMF9TTE9UU19NQVNLIHwKKwkJCSAgICBXTTg5MTVfQUlGMlRYX0NIQU4wX1NUQVJUX1NMT1RfTUFTSywKKwkJCSAgICAxIDw8IFdNODkxNV9BSUYyVFhfQ0hBTjBfU0xPVFNfU0hJRlQgfCAwKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfQUlGMVRYX0NIQU5ORUxfMV9DT05GSUdVUkFUSU9OLAorCQkJICAgIFdNODkxNV9BSUYyVFhfQ0hBTjFfU0xPVFNfTUFTSyB8CisJCQkgICAgV004OTE1X0FJRjJUWF9DSEFOMV9TVEFSVF9TTE9UX01BU0ssCisJCQkgICAgMSA8PCBXTTg5MTVfQUlGMVRYX0NIQU4xX1NMT1RTX1NISUZUIHwgMSk7CisKKwlpZiAod204OTE1LT5wZGF0YS5udW1fcmV0dW5lX21vYmlsZV9jZmdzKQorCQl3bTg5MTVfcmV0dW5lX21vYmlsZV9wZGF0YShjb2RlYyk7CisJZWxzZQorCQlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204OTE1X2VxX2NvbnRyb2xzLAorCQkJCSAgICAgQVJSQVlfU0laRSh3bTg5MTVfZXFfY29udHJvbHMpKTsKKworCS8qIElmIHRoZSBUWCBMUkNMSyBwaW5zIGFyZSBub3QgaW4gTFJDTEsgbW9kZSBjb25maWd1cmUgdGhlCisJICogQUlGcyB0byBzb3VyY2UgdGhlaXIgY2xvY2tzIGZyb20gdGhlIFJYIExSQ0xLcy4KKwkgKi8KKwlpZiAoKHNuZF9zb2NfcmVhZChjb2RlYywgV004OTE1X0dQSU9fMSkpKQorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfQUlGMV9UWF9MUkNMS18yLAorCQkJCSAgICBXTTg5MTVfQUlGMVRYX0xSQ0xLX01PREUsCisJCQkJICAgIFdNODkxNV9BSUYxVFhfTFJDTEtfTU9ERSk7CisKKwlpZiAoKHNuZF9zb2NfcmVhZChjb2RlYywgV004OTE1X0dQSU9fMikpKQorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfQUlGMl9UWF9MUkNMS18yLAorCQkJCSAgICBXTTg5MTVfQUlGMlRYX0xSQ0xLX01PREUsCisJCQkJICAgIFdNODkxNV9BSUYyVFhfTFJDTEtfTU9ERSk7CisKKwlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUod204OTE1LT5zdXBwbGllcyksIHdtODkxNS0+c3VwcGxpZXMpOworCisJd204OTE1X2luaXRfZ3Bpbyhjb2RlYyk7CisKKwlpZiAoaTJjLT5pcnEpIHsKKwkJaWYgKHdtODkxNS0+cGRhdGEuaXJxX2ZsYWdzKQorCQkJaXJxX2ZsYWdzID0gd204OTE1LT5wZGF0YS5pcnFfZmxhZ3M7CisJCWVsc2UKKwkJCWlycV9mbGFncyA9IElSUUZfVFJJR0dFUl9MT1c7CisKKwkJaXJxX2ZsYWdzIHw9IElSUUZfT05FU0hPVDsKKworCQlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShpMmMtPmlycSwgTlVMTCwgd204OTE1X2lycSwKKwkJCQkJICAgaXJxX2ZsYWdzLCAid204OTE1IiwgY29kZWMpOworCQlpZiAocmV0ID09IDApIHsKKwkJCS8qIFVubWFzayB0aGUgaW50ZXJydXB0ICovCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfSU5URVJSVVBUX0NPTlRST0wsCisJCQkJCSAgICBXTTg5MTVfSU1fSVJRLCAwKTsKKworCQkJLyogRW5hYmxlIGVycm9yIHJlcG9ydGluZyBhbmQgREMgc2Vydm8gc3RhdHVzICovCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLAorCQkJCQkgICAgV004OTE1X0lOVEVSUlVQVF9TVEFUVVNfMl9NQVNLLAorCQkJCQkgICAgV004OTE1X0lNX0RDU19ET05FXzIzX0VJTlQgfAorCQkJCQkgICAgV004OTE1X0lNX0RDU19ET05FXzAxX0VJTlQgfAorCQkJCQkgICAgV004OTE1X0lNX0ZMTF9MT0NLX0VJTlQgfAorCQkJCQkgICAgV004OTE1X0lNX0ZJRk9TX0VSUl9FSU5ULAorCQkJCQkgICAgMCk7CisJCX0gZWxzZSB7CisJCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBJUlE6ICVkXG4iLAorCQkJCXJldCk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2VuYWJsZToKKwlpZiAod204OTE1LT5wZGF0YS5sZG9fZW5hID49IDApCisJCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKHdtODkxNS0+cGRhdGEubGRvX2VuYSwgMCk7CisKKwlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUod204OTE1LT5zdXBwbGllcyksIHdtODkxNS0+c3VwcGxpZXMpOworZXJyX2dldDoKKwlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUod204OTE1LT5zdXBwbGllcyksIHdtODkxNS0+c3VwcGxpZXMpOworZXJyOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd204OTE1X3JlbW92ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHdtODkxNV9wcml2ICp3bTg5MTUgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjID0gdG9faTJjX2NsaWVudChjb2RlYy0+ZGV2KTsKKwlpbnQgaTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9JTlRFUlJVUFRfQ09OVFJPTCwKKwkJCSAgICBXTTg5MTVfSU1fSVJRLCBXTTg5MTVfSU1fSVJRKTsKKworCWlmIChpMmMtPmlycSkKKwkJZnJlZV9pcnEoaTJjLT5pcnEsIGNvZGVjKTsKKworCXdtODkxNV9mcmVlX2dwaW8oY29kZWMpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204OTE1LT5zdXBwbGllcyk7IGkrKykKKwkJcmVndWxhdG9yX3VucmVnaXN0ZXJfbm90aWZpZXIod204OTE1LT5zdXBwbGllc1tpXS5jb25zdW1lciwKKwkJCQkJICAgICAgJndtODkxNS0+ZGlzYWJsZV9uYltpXSk7CisJcmVndWxhdG9yX2J1bGtfZnJlZShBUlJBWV9TSVpFKHdtODkxNS0+c3VwcGxpZXMpLCB3bTg5MTUtPnN1cHBsaWVzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWNfZHJpdmVyIHNvY19jb2RlY19kZXZfd204OTE1ID0geworCS5wcm9iZSA9CXdtODkxNV9wcm9iZSwKKwkucmVtb3ZlID0Jd204OTE1X3JlbW92ZSwKKwkuc2V0X2JpYXNfbGV2ZWwgPSB3bTg5MTVfc2V0X2JpYXNfbGV2ZWwsCisJLnNlcV9ub3RpZmllciA9IHdtODkxNV9zZXFfbm90aWZpZXIsCisJLnJlZ19jYWNoZV9zaXplID0gV004OTE1X01BWF9SRUdJU1RFUiArIDEsCisJLnJlZ193b3JkX3NpemUgPSBzaXplb2YodTE2KSwKKwkucmVnX2NhY2hlX2RlZmF1bHQgPSB3bTg5MTVfcmVnLAorCS52b2xhdGlsZV9yZWdpc3RlciA9IHdtODkxNV92b2xhdGlsZV9yZWdpc3RlciwKKwkucmVhZGFibGVfcmVnaXN0ZXIgPSB3bTg5MTVfcmVhZGFibGVfcmVnaXN0ZXIsCisJLmNvbXByZXNzX3R5cGUgPSBTTkRfU09DX1JCVFJFRV9DT01QUkVTU0lPTiwKKwkuY29udHJvbHMgPSB3bTg5MTVfc25kX2NvbnRyb2xzLAorCS5udW1fY29udHJvbHMgPSBBUlJBWV9TSVpFKHdtODkxNV9zbmRfY29udHJvbHMpLAorCS5kYXBtX3dpZGdldHMgPSB3bTg5MTVfZGFwbV93aWRnZXRzLAorCS5udW1fZGFwbV93aWRnZXRzID0gQVJSQVlfU0laRSh3bTg5MTVfZGFwbV93aWRnZXRzKSwKKwkuZGFwbV9yb3V0ZXMgPSB3bTg5MTVfZGFwbV9yb3V0ZXMsCisJLm51bV9kYXBtX3JvdXRlcyA9IEFSUkFZX1NJWkUod204OTE1X2RhcG1fcm91dGVzKSwKKwkuc2V0X3BsbCA9IHdtODkxNV9zZXRfZmxsLAorfTsKKworI2RlZmluZSBXTTg5MTVfUkFURVMgKFNORFJWX1BDTV9SQVRFXzgwMDAgfCBTTkRSVl9QQ01fUkFURV8xNjAwMCB8XAorCQkgICAgICBTTkRSVl9QQ01fUkFURV8zMjAwMCB8IFNORFJWX1BDTV9SQVRFXzQ4MDAwKQorI2RlZmluZSBXTTg5MTVfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TOCB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHxcCisJCQlTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSB8XAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODkxNV9kYWlfb3BzID0geworCS5zZXRfZm10ID0gd204OTE1X3NldF9mbXQsCisJLmh3X3BhcmFtcyA9IHdtODkxNV9od19wYXJhbXMsCisJLnNldF9zeXNjbGsgPSB3bTg5MTVfc2V0X3N5c2NsaywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyIHdtODkxNV9kYWlbXSA9IHsKKwl7CisJCS5uYW1lID0gIndtODkxNS1haWYxIiwKKwkJLnBsYXliYWNrID0geworCQkJLnN0cmVhbV9uYW1lID0gIkFJRjEgUGxheWJhY2siLAorCQkJLmNoYW5uZWxzX21pbiA9IDEsCisJCQkuY2hhbm5lbHNfbWF4ID0gNiwKKwkJCS5yYXRlcyA9IFdNODkxNV9SQVRFUywKKwkJCS5mb3JtYXRzID0gV004OTE1X0ZPUk1BVFMsCisJCX0sCisJCS5jYXB0dXJlID0geworCQkJIC5zdHJlYW1fbmFtZSA9ICJBSUYxIENhcHR1cmUiLAorCQkJIC5jaGFubmVsc19taW4gPSAxLAorCQkJIC5jaGFubmVsc19tYXggPSA2LAorCQkJIC5yYXRlcyA9IFdNODkxNV9SQVRFUywKKwkJCSAuZm9ybWF0cyA9IFdNODkxNV9GT1JNQVRTLAorCQkgfSwKKwkJLm9wcyA9ICZ3bTg5MTVfZGFpX29wcywKKwl9LAorCXsKKwkJLm5hbWUgPSAid204OTE1LWFpZjIiLAorCQkucGxheWJhY2sgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiQUlGMiBQbGF5YmFjayIsCisJCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJCS5jaGFubmVsc19tYXggPSAyLAorCQkJLnJhdGVzID0gV004OTE1X1JBVEVTLAorCQkJLmZvcm1hdHMgPSBXTTg5MTVfRk9STUFUUywKKwkJfSwKKwkJLmNhcHR1cmUgPSB7CisJCQkgLnN0cmVhbV9uYW1lID0gIkFJRjIgQ2FwdHVyZSIsCisJCQkgLmNoYW5uZWxzX21pbiA9IDEsCisJCQkgLmNoYW5uZWxzX21heCA9IDIsCisJCQkgLnJhdGVzID0gV004OTE1X1JBVEVTLAorCQkJIC5mb3JtYXRzID0gV004OTE1X0ZPUk1BVFMsCisJCSB9LAorCQkub3BzID0gJndtODkxNV9kYWlfb3BzLAorCX0sCit9OworCitzdGF0aWMgX19kZXZpbml0IGludCB3bTg5MTVfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB3bTg5MTVfcHJpdiAqd204OTE1OworCWludCByZXQ7CisKKwl3bTg5MTUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd204OTE1X3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAod204OTE1ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgd204OTE1KTsKKworCWlmIChkZXZfZ2V0X3BsYXRkYXRhKCZpMmMtPmRldikpCisJCW1lbWNweSgmd204OTE1LT5wZGF0YSwgZGV2X2dldF9wbGF0ZGF0YSgmaTJjLT5kZXYpLAorCQkgICAgICAgc2l6ZW9mKHdtODkxNS0+cGRhdGEpKTsKKworCWlmICh3bTg5MTUtPnBkYXRhLmxkb19lbmEgPiAwKSB7CisJCXJldCA9IGdwaW9fcmVxdWVzdF9vbmUod204OTE1LT5wZGF0YS5sZG9fZW5hLAorCQkJCSAgICAgICBHUElPRl9PVVRfSU5JVF9MT1csICJXTTg5MTUgRU5BIik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKCZpMmMtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IEdQSU8gJWQ6ICVkXG4iLAorCQkJCXdtODkxNS0+cGRhdGEubGRvX2VuYSwgcmV0KTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYygmaTJjLT5kZXYsCisJCQkJICAgICAmc29jX2NvZGVjX2Rldl93bTg5MTUsIHdtODkxNV9kYWksCisJCQkJICAgICBBUlJBWV9TSVpFKHdtODkxNV9kYWkpKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfZ3BpbzsKKworCXJldHVybiByZXQ7CisKK2Vycl9ncGlvOgorCWlmICh3bTg5MTUtPnBkYXRhLmxkb19lbmEgPiAwKQorCQlncGlvX2ZyZWUod204OTE1LT5wZGF0YS5sZG9fZW5hKTsKK2VycjoKKwlrZnJlZSh3bTg5MTUpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIF9fZGV2ZXhpdCBpbnQgd204OTE1X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3Qgd204OTE1X3ByaXYgKndtODkxNSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZjbGllbnQtPmRldik7CisJaWYgKHdtODkxNS0+cGRhdGEubGRvX2VuYSA+IDApCisJCWdwaW9fZnJlZSh3bTg5MTUtPnBkYXRhLmxkb19lbmEpOworCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHdtODkxNV9pMmNfaWRbXSA9IHsKKwl7ICJ3bTg5MTUiLCAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHdtODkxNV9pMmNfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd204OTE1X2kyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAid204OTE1IiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSAgICB3bTg5MTVfaTJjX3Byb2JlLAorCS5yZW1vdmUgPSAgIF9fZGV2ZXhpdF9wKHdtODkxNV9pMmNfcmVtb3ZlKSwKKwkuaWRfdGFibGUgPSB3bTg5MTVfaTJjX2lkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgd204OTE1X21vZGluaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaTJjX2FkZF9kcml2ZXIoJndtODkxNV9pMmNfZHJpdmVyKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgV004OTE1IEkyQyBkcml2ZXI6ICVkXG4iLAorCQkgICAgICAgcmV0KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorbW9kdWxlX2luaXQod204OTE1X21vZGluaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgd204OTE1X2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmd204OTE1X2kyY19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQod204OTE1X2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkFTb0MgV004OTE1IGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODkxNS5oIGIvc291bmQvc29jL2NvZGVjcy93bTg5MTUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDBmZmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5MTUuaApAQCAtMCwwICsxLDM3MTcgQEAKKy8qCisgKiB3bTg5MTUuaCAtIFdNODkxNSBhdWRpbyBjb2RlYyBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgMjAxMSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9XTTg5MTVfSAorI2RlZmluZSBfV004OTE1X0gKKworI2RlZmluZSBXTTg5MTVfU1lTQ0xLX01DTEsxIDEKKyNkZWZpbmUgV004OTE1X1NZU0NMS19NQ0xLMiAyCisjZGVmaW5lIFdNODkxNV9TWVNDTEtfRkxMICAgMworCisjZGVmaW5lIFdNODkxNV9GTExfTUNMSzEgICAgICAxCisjZGVmaW5lIFdNODkxNV9GTExfTUNMSzIgICAgICAyCisjZGVmaW5lIFdNODkxNV9GTExfREFDTFJDTEsxICAzCisjZGVmaW5lIFdNODkxNV9GTExfQkNMSzEgICAgICA0CisKK3R5cGVkZWYgdm9pZCAoKndtODkxNV9wb2xhcml0eV9mbikoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgcG9sYXJpdHkpOworCitpbnQgd204OTE1X2RldGVjdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHN0cnVjdCBzbmRfc29jX2phY2sgKmphY2ssCisJCSAgd204OTE1X3BvbGFyaXR5X2ZuIHBvbGFyaXR5X2NiKTsKKworLyoKKyAqIFJlZ2lzdGVyIHZhbHVlcy4KKyAqLworI2RlZmluZSBXTTg5MTVfU09GVFdBUkVfUkVTRVQgICAgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF8xICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF8yICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF8zICAgICAgICAgICAgICAgMHgwMworI2RlZmluZSBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF80ICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF81ICAgICAgICAgICAgICAgMHgwNQorI2RlZmluZSBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF82ICAgICAgICAgICAgICAgMHgwNgorI2RlZmluZSBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF83ICAgICAgICAgICAgICAgMHgwNworI2RlZmluZSBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF84ICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBXTTg5MTVfTEVGVF9MSU5FX0lOUFVUX1ZPTFVNRSAgICAgICAgICAgMHgxMAorI2RlZmluZSBXTTg5MTVfUklHSFRfTElORV9JTlBVVF9WT0xVTUUgICAgICAgICAgMHgxMQorI2RlZmluZSBXTTg5MTVfTElORV9JTlBVVF9DT05UUk9MICAgICAgICAgICAgICAgMHgxMgorI2RlZmluZSBXTTg5MTVfREFDMV9IUE9VVDFfVk9MVU1FICAgICAgICAgICAgICAgMHgxNQorI2RlZmluZSBXTTg5MTVfREFDMl9IUE9VVDJfVk9MVU1FICAgICAgICAgICAgICAgMHgxNgorI2RlZmluZSBXTTg5MTVfREFDMV9MRUZUX1ZPTFVNRSAgICAgICAgICAgICAgICAgMHgxOAorI2RlZmluZSBXTTg5MTVfREFDMV9SSUdIVF9WT0xVTUUgICAgICAgICAgICAgICAgMHgxOQorI2RlZmluZSBXTTg5MTVfREFDMl9MRUZUX1ZPTFVNRSAgICAgICAgICAgICAgICAgMHgxQQorI2RlZmluZSBXTTg5MTVfREFDMl9SSUdIVF9WT0xVTUUgICAgICAgICAgICAgICAgMHgxQgorI2RlZmluZSBXTTg5MTVfT1VUUFVUMV9MRUZUX1ZPTFVNRSAgICAgICAgICAgICAgMHgxQworI2RlZmluZSBXTTg5MTVfT1VUUFVUMV9SSUdIVF9WT0xVTUUgICAgICAgICAgICAgMHgxRAorI2RlZmluZSBXTTg5MTVfT1VUUFVUMl9MRUZUX1ZPTFVNRSAgICAgICAgICAgICAgMHgxRQorI2RlZmluZSBXTTg5MTVfT1VUUFVUMl9SSUdIVF9WT0xVTUUgICAgICAgICAgICAgMHgxRgorI2RlZmluZSBXTTg5MTVfTUlDQklBU18xICAgICAgICAgICAgICAgICAgICAgICAgMHgyMAorI2RlZmluZSBXTTg5MTVfTUlDQklBU18yICAgICAgICAgICAgICAgICAgICAgICAgMHgyMQorI2RlZmluZSBXTTg5MTVfTERPXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyOAorI2RlZmluZSBXTTg5MTVfTERPXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyOQorI2RlZmluZSBXTTg5MTVfQUNDRVNTT1JZX0RFVEVDVF9NT0RFXzEgICAgICAgICAgMHgzMAorI2RlZmluZSBXTTg5MTVfQUNDRVNTT1JZX0RFVEVDVF9NT0RFXzIgICAgICAgICAgMHgzMQorI2RlZmluZSBXTTg5MTVfSEVBRFBIT05FX0RFVEVDVF8xICAgICAgICAgICAgICAgMHgzNAorI2RlZmluZSBXTTg5MTVfSEVBRFBIT05FX0RFVEVDVF8yICAgICAgICAgICAgICAgMHgzNQorI2RlZmluZSBXTTg5MTVfTUlDX0RFVEVDVF8xICAgICAgICAgICAgICAgICAgICAgMHgzOAorI2RlZmluZSBXTTg5MTVfTUlDX0RFVEVDVF8yICAgICAgICAgICAgICAgICAgICAgMHgzOQorI2RlZmluZSBXTTg5MTVfTUlDX0RFVEVDVF8zICAgICAgICAgICAgICAgICAgICAgMHgzQQorI2RlZmluZSBXTTg5MTVfQ0hBUkdFX1BVTVBfMSAgICAgICAgICAgICAgICAgICAgMHg0MAorI2RlZmluZSBXTTg5MTVfQ0hBUkdFX1BVTVBfMiAgICAgICAgICAgICAgICAgICAgMHg0MQorI2RlZmluZSBXTTg5MTVfRENfU0VSVk9fMSAgICAgICAgICAgICAgICAgICAgICAgMHg1MAorI2RlZmluZSBXTTg5MTVfRENfU0VSVk9fMiAgICAgICAgICAgICAgICAgICAgICAgMHg1MQorI2RlZmluZSBXTTg5MTVfRENfU0VSVk9fMyAgICAgICAgICAgICAgICAgICAgICAgMHg1MgorI2RlZmluZSBXTTg5MTVfRENfU0VSVk9fNSAgICAgICAgICAgICAgICAgICAgICAgMHg1NAorI2RlZmluZSBXTTg5MTVfRENfU0VSVk9fNiAgICAgICAgICAgICAgICAgICAgICAgMHg1NQorI2RlZmluZSBXTTg5MTVfRENfU0VSVk9fNyAgICAgICAgICAgICAgICAgICAgICAgMHg1NgorI2RlZmluZSBXTTg5MTVfRENfU0VSVk9fUkVBREJBQ0tfMCAgICAgICAgICAgICAgMHg1NworI2RlZmluZSBXTTg5MTVfQU5BTE9HVUVfSFBfMSAgICAgICAgICAgICAgICAgICAgMHg2MAorI2RlZmluZSBXTTg5MTVfQU5BTE9HVUVfSFBfMiAgICAgICAgICAgICAgICAgICAgMHg2MQorI2RlZmluZSBXTTg5MTVfQ0hJUF9SRVZJU0lPTiAgICAgICAgICAgICAgICAgICAgMHgxMDAKKyNkZWZpbmUgV004OTE1X0NPTlRST0xfSU5URVJGQUNFXzEgICAgICAgICAgICAgIDB4MTAxCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfQ1RSTF8xICAgICAgICAgICAweDExMAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSX0NUUkxfMiAgICAgICAgICAgMHgxMTEKKyNkZWZpbmUgV004OTE1X0FJRl9DTE9DS0lOR18xICAgICAgICAgICAgICAgICAgIDB4MjAwCisjZGVmaW5lIFdNODkxNV9BSUZfQ0xPQ0tJTkdfMiAgICAgICAgICAgICAgICAgICAweDIwMQorI2RlZmluZSBXTTg5MTVfQ0xPQ0tJTkdfMSAgICAgICAgICAgICAgICAgICAgICAgMHgyMDgKKyNkZWZpbmUgV004OTE1X0NMT0NLSU5HXzIgICAgICAgICAgICAgICAgICAgICAgIDB4MjA5CisjZGVmaW5lIFdNODkxNV9BSUZfUkFURSAgICAgICAgICAgICAgICAgICAgICAgICAweDIxMAorI2RlZmluZSBXTTg5MTVfRkxMX0NPTlRST0xfMSAgICAgICAgICAgICAgICAgICAgMHgyMjAKKyNkZWZpbmUgV004OTE1X0ZMTF9DT05UUk9MXzIgICAgICAgICAgICAgICAgICAgIDB4MjIxCisjZGVmaW5lIFdNODkxNV9GTExfQ09OVFJPTF8zICAgICAgICAgICAgICAgICAgICAweDIyMgorI2RlZmluZSBXTTg5MTVfRkxMX0NPTlRST0xfNCAgICAgICAgICAgICAgICAgICAgMHgyMjMKKyNkZWZpbmUgV004OTE1X0ZMTF9DT05UUk9MXzUgICAgICAgICAgICAgICAgICAgIDB4MjI0CisjZGVmaW5lIFdNODkxNV9GTExfQ09OVFJPTF82ICAgICAgICAgICAgICAgICAgICAweDIyNQorI2RlZmluZSBXTTg5MTVfRkxMX0VGU18xICAgICAgICAgICAgICAgICAgICAgICAgMHgyMjYKKyNkZWZpbmUgV004OTE1X0ZMTF9FRlNfMiAgICAgICAgICAgICAgICAgICAgICAgIDB4MjI3CisjZGVmaW5lIFdNODkxNV9BSUYxX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAweDMwMAorI2RlZmluZSBXTTg5MTVfQUlGMV9CQ0xLICAgICAgICAgICAgICAgICAgICAgICAgMHgzMDEKKyNkZWZpbmUgV004OTE1X0FJRjFfVFhfTFJDTEtfMSAgICAgICAgICAgICAgICAgIDB4MzAyCisjZGVmaW5lIFdNODkxNV9BSUYxX1RYX0xSQ0xLXzIgICAgICAgICAgICAgICAgICAweDMwMworI2RlZmluZSBXTTg5MTVfQUlGMV9SWF9MUkNMS18xICAgICAgICAgICAgICAgICAgMHgzMDQKKyNkZWZpbmUgV004OTE1X0FJRjFfUlhfTFJDTEtfMiAgICAgICAgICAgICAgICAgIDB4MzA1CisjZGVmaW5lIFdNODkxNV9BSUYxVFhfREFUQV9DT05GSUdVUkFUSU9OXzEgICAgICAweDMwNgorI2RlZmluZSBXTTg5MTVfQUlGMVRYX0RBVEFfQ09ORklHVVJBVElPTl8yICAgICAgMHgzMDcKKyNkZWZpbmUgV004OTE1X0FJRjFSWF9EQVRBX0NPTkZJR1VSQVRJT04gICAgICAgIDB4MzA4CisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTk5FTF8wX0NPTkZJR1VSQVRJT04gICAweDMwOQorI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU5ORUxfMV9DT05GSUdVUkFUSU9OICAgMHgzMEEKKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOTkVMXzJfQ09ORklHVVJBVElPTiAgIDB4MzBCCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTk5FTF8zX0NPTkZJR1VSQVRJT04gICAweDMwQworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU5ORUxfNF9DT05GSUdVUkFUSU9OICAgMHgzMEQKKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOTkVMXzVfQ09ORklHVVJBVElPTiAgIDB4MzBFCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTk5FTF8wX0NPTkZJR1VSQVRJT04gICAweDMwRgorI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU5ORUxfMV9DT05GSUdVUkFUSU9OICAgMHgzMTAKKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOTkVMXzJfQ09ORklHVVJBVElPTiAgIDB4MzExCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTk5FTF8zX0NPTkZJR1VSQVRJT04gICAweDMxMgorI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU5ORUxfNF9DT05GSUdVUkFUSU9OICAgMHgzMTMKKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOTkVMXzVfQ09ORklHVVJBVElPTiAgIDB4MzE0CisjZGVmaW5lIFdNODkxNV9BSUYxUlhfTU9OT19DT05GSUdVUkFUSU9OICAgICAgICAweDMxNQorI2RlZmluZSBXTTg5MTVfQUlGMVRYX1RFU1QgICAgICAgICAgICAgICAgICAgICAgMHgzMUEKKyNkZWZpbmUgV004OTE1X0FJRjJfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgIDB4MzIwCisjZGVmaW5lIFdNODkxNV9BSUYyX0JDTEsgICAgICAgICAgICAgICAgICAgICAgICAweDMyMQorI2RlZmluZSBXTTg5MTVfQUlGMl9UWF9MUkNMS18xICAgICAgICAgICAgICAgICAgMHgzMjIKKyNkZWZpbmUgV004OTE1X0FJRjJfVFhfTFJDTEtfMiAgICAgICAgICAgICAgICAgIDB4MzIzCisjZGVmaW5lIFdNODkxNV9BSUYyX1JYX0xSQ0xLXzEgICAgICAgICAgICAgICAgICAweDMyNAorI2RlZmluZSBXTTg5MTVfQUlGMl9SWF9MUkNMS18yICAgICAgICAgICAgICAgICAgMHgzMjUKKyNkZWZpbmUgV004OTE1X0FJRjJUWF9EQVRBX0NPTkZJR1VSQVRJT05fMSAgICAgIDB4MzI2CisjZGVmaW5lIFdNODkxNV9BSUYyVFhfREFUQV9DT05GSUdVUkFUSU9OXzIgICAgICAweDMyNworI2RlZmluZSBXTTg5MTVfQUlGMlJYX0RBVEFfQ09ORklHVVJBVElPTiAgICAgICAgMHgzMjgKKyNkZWZpbmUgV004OTE1X0FJRjJUWF9DSEFOTkVMXzBfQ09ORklHVVJBVElPTiAgIDB4MzI5CisjZGVmaW5lIFdNODkxNV9BSUYyVFhfQ0hBTk5FTF8xX0NPTkZJR1VSQVRJT04gICAweDMyQQorI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU5ORUxfMF9DT05GSUdVUkFUSU9OICAgMHgzMkIKKyNkZWZpbmUgV004OTE1X0FJRjJSWF9DSEFOTkVMXzFfQ09ORklHVVJBVElPTiAgIDB4MzJDCisjZGVmaW5lIFdNODkxNV9BSUYyUlhfTU9OT19DT05GSUdVUkFUSU9OICAgICAgICAweDMyRAorI2RlZmluZSBXTTg5MTVfQUlGMlRYX1RFU1QgICAgICAgICAgICAgICAgICAgICAgMHgzMkYKKyNkZWZpbmUgV004OTE1X0RTUDFfVFhfTEVGVF9WT0xVTUUgICAgICAgICAgICAgIDB4NDAwCisjZGVmaW5lIFdNODkxNV9EU1AxX1RYX1JJR0hUX1ZPTFVNRSAgICAgICAgICAgICAweDQwMQorI2RlZmluZSBXTTg5MTVfRFNQMV9SWF9MRUZUX1ZPTFVNRSAgICAgICAgICAgICAgMHg0MDIKKyNkZWZpbmUgV004OTE1X0RTUDFfUlhfUklHSFRfVk9MVU1FICAgICAgICAgICAgIDB4NDAzCisjZGVmaW5lIFdNODkxNV9EU1AxX1RYX0ZJTFRFUlMgICAgICAgICAgICAgICAgICAweDQxMAorI2RlZmluZSBXTTg5MTVfRFNQMV9SWF9GSUxURVJTXzEgICAgICAgICAgICAgICAgMHg0MjAKKyNkZWZpbmUgV004OTE1X0RTUDFfUlhfRklMVEVSU18yICAgICAgICAgICAgICAgIDB4NDIxCisjZGVmaW5lIFdNODkxNV9EU1AxX0RSQ18xICAgICAgICAgICAgICAgICAgICAgICAweDQ0MAorI2RlZmluZSBXTTg5MTVfRFNQMV9EUkNfMiAgICAgICAgICAgICAgICAgICAgICAgMHg0NDEKKyNkZWZpbmUgV004OTE1X0RTUDFfRFJDXzMgICAgICAgICAgICAgICAgICAgICAgIDB4NDQyCisjZGVmaW5lIFdNODkxNV9EU1AxX0RSQ180ICAgICAgICAgICAgICAgICAgICAgICAweDQ0MworI2RlZmluZSBXTTg5MTVfRFNQMV9EUkNfNSAgICAgICAgICAgICAgICAgICAgICAgMHg0NDQKKyNkZWZpbmUgV004OTE1X0RTUDFfUlhfRVFfR0FJTlNfMSAgICAgICAgICAgICAgIDB4NDgwCisjZGVmaW5lIFdNODkxNV9EU1AxX1JYX0VRX0dBSU5TXzIgICAgICAgICAgICAgICAweDQ4MQorI2RlZmluZSBXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzFfQSAgICAgICAgICAgICAgMHg0ODIKKyNkZWZpbmUgV004OTE1X0RTUDFfUlhfRVFfQkFORF8xX0IgICAgICAgICAgICAgIDB4NDgzCisjZGVmaW5lIFdNODkxNV9EU1AxX1JYX0VRX0JBTkRfMV9QRyAgICAgICAgICAgICAweDQ4NAorI2RlZmluZSBXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzJfQSAgICAgICAgICAgICAgMHg0ODUKKyNkZWZpbmUgV004OTE1X0RTUDFfUlhfRVFfQkFORF8yX0IgICAgICAgICAgICAgIDB4NDg2CisjZGVmaW5lIFdNODkxNV9EU1AxX1JYX0VRX0JBTkRfMl9DICAgICAgICAgICAgICAweDQ4NworI2RlZmluZSBXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzJfUEcgICAgICAgICAgICAgMHg0ODgKKyNkZWZpbmUgV004OTE1X0RTUDFfUlhfRVFfQkFORF8zX0EgICAgICAgICAgICAgIDB4NDg5CisjZGVmaW5lIFdNODkxNV9EU1AxX1JYX0VRX0JBTkRfM19CICAgICAgICAgICAgICAweDQ4QQorI2RlZmluZSBXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzNfQyAgICAgICAgICAgICAgMHg0OEIKKyNkZWZpbmUgV004OTE1X0RTUDFfUlhfRVFfQkFORF8zX1BHICAgICAgICAgICAgIDB4NDhDCisjZGVmaW5lIFdNODkxNV9EU1AxX1JYX0VRX0JBTkRfNF9BICAgICAgICAgICAgICAweDQ4RAorI2RlZmluZSBXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzRfQiAgICAgICAgICAgICAgMHg0OEUKKyNkZWZpbmUgV004OTE1X0RTUDFfUlhfRVFfQkFORF80X0MgICAgICAgICAgICAgIDB4NDhGCisjZGVmaW5lIFdNODkxNV9EU1AxX1JYX0VRX0JBTkRfNF9QRyAgICAgICAgICAgICAweDQ5MAorI2RlZmluZSBXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzVfQSAgICAgICAgICAgICAgMHg0OTEKKyNkZWZpbmUgV004OTE1X0RTUDFfUlhfRVFfQkFORF81X0IgICAgICAgICAgICAgIDB4NDkyCisjZGVmaW5lIFdNODkxNV9EU1AxX1JYX0VRX0JBTkRfNV9QRyAgICAgICAgICAgICAweDQ5MworI2RlZmluZSBXTTg5MTVfRFNQMl9UWF9MRUZUX1ZPTFVNRSAgICAgICAgICAgICAgMHg1MDAKKyNkZWZpbmUgV004OTE1X0RTUDJfVFhfUklHSFRfVk9MVU1FICAgICAgICAgICAgIDB4NTAxCisjZGVmaW5lIFdNODkxNV9EU1AyX1JYX0xFRlRfVk9MVU1FICAgICAgICAgICAgICAweDUwMgorI2RlZmluZSBXTTg5MTVfRFNQMl9SWF9SSUdIVF9WT0xVTUUgICAgICAgICAgICAgMHg1MDMKKyNkZWZpbmUgV004OTE1X0RTUDJfVFhfRklMVEVSUyAgICAgICAgICAgICAgICAgIDB4NTEwCisjZGVmaW5lIFdNODkxNV9EU1AyX1JYX0ZJTFRFUlNfMSAgICAgICAgICAgICAgICAweDUyMAorI2RlZmluZSBXTTg5MTVfRFNQMl9SWF9GSUxURVJTXzIgICAgICAgICAgICAgICAgMHg1MjEKKyNkZWZpbmUgV004OTE1X0RTUDJfRFJDXzEgICAgICAgICAgICAgICAgICAgICAgIDB4NTQwCisjZGVmaW5lIFdNODkxNV9EU1AyX0RSQ18yICAgICAgICAgICAgICAgICAgICAgICAweDU0MQorI2RlZmluZSBXTTg5MTVfRFNQMl9EUkNfMyAgICAgICAgICAgICAgICAgICAgICAgMHg1NDIKKyNkZWZpbmUgV004OTE1X0RTUDJfRFJDXzQgICAgICAgICAgICAgICAgICAgICAgIDB4NTQzCisjZGVmaW5lIFdNODkxNV9EU1AyX0RSQ181ICAgICAgICAgICAgICAgICAgICAgICAweDU0NAorI2RlZmluZSBXTTg5MTVfRFNQMl9SWF9FUV9HQUlOU18xICAgICAgICAgICAgICAgMHg1ODAKKyNkZWZpbmUgV004OTE1X0RTUDJfUlhfRVFfR0FJTlNfMiAgICAgICAgICAgICAgIDB4NTgxCisjZGVmaW5lIFdNODkxNV9EU1AyX1JYX0VRX0JBTkRfMV9BICAgICAgICAgICAgICAweDU4MgorI2RlZmluZSBXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzFfQiAgICAgICAgICAgICAgMHg1ODMKKyNkZWZpbmUgV004OTE1X0RTUDJfUlhfRVFfQkFORF8xX1BHICAgICAgICAgICAgIDB4NTg0CisjZGVmaW5lIFdNODkxNV9EU1AyX1JYX0VRX0JBTkRfMl9BICAgICAgICAgICAgICAweDU4NQorI2RlZmluZSBXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzJfQiAgICAgICAgICAgICAgMHg1ODYKKyNkZWZpbmUgV004OTE1X0RTUDJfUlhfRVFfQkFORF8yX0MgICAgICAgICAgICAgIDB4NTg3CisjZGVmaW5lIFdNODkxNV9EU1AyX1JYX0VRX0JBTkRfMl9QRyAgICAgICAgICAgICAweDU4OAorI2RlZmluZSBXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzNfQSAgICAgICAgICAgICAgMHg1ODkKKyNkZWZpbmUgV004OTE1X0RTUDJfUlhfRVFfQkFORF8zX0IgICAgICAgICAgICAgIDB4NThBCisjZGVmaW5lIFdNODkxNV9EU1AyX1JYX0VRX0JBTkRfM19DICAgICAgICAgICAgICAweDU4QgorI2RlZmluZSBXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzNfUEcgICAgICAgICAgICAgMHg1OEMKKyNkZWZpbmUgV004OTE1X0RTUDJfUlhfRVFfQkFORF80X0EgICAgICAgICAgICAgIDB4NThECisjZGVmaW5lIFdNODkxNV9EU1AyX1JYX0VRX0JBTkRfNF9CICAgICAgICAgICAgICAweDU4RQorI2RlZmluZSBXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzRfQyAgICAgICAgICAgICAgMHg1OEYKKyNkZWZpbmUgV004OTE1X0RTUDJfUlhfRVFfQkFORF80X1BHICAgICAgICAgICAgIDB4NTkwCisjZGVmaW5lIFdNODkxNV9EU1AyX1JYX0VRX0JBTkRfNV9BICAgICAgICAgICAgICAweDU5MQorI2RlZmluZSBXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzVfQiAgICAgICAgICAgICAgMHg1OTIKKyNkZWZpbmUgV004OTE1X0RTUDJfUlhfRVFfQkFORF81X1BHICAgICAgICAgICAgIDB4NTkzCisjZGVmaW5lIFdNODkxNV9EQUMxX01JWEVSX1ZPTFVNRVMgICAgICAgICAgICAgICAweDYwMAorI2RlZmluZSBXTTg5MTVfREFDMV9MRUZUX01JWEVSX1JPVVRJTkcgICAgICAgICAgMHg2MDEKKyNkZWZpbmUgV004OTE1X0RBQzFfUklHSFRfTUlYRVJfUk9VVElORyAgICAgICAgIDB4NjAyCisjZGVmaW5lIFdNODkxNV9EQUMyX01JWEVSX1ZPTFVNRVMgICAgICAgICAgICAgICAweDYwMworI2RlZmluZSBXTTg5MTVfREFDMl9MRUZUX01JWEVSX1JPVVRJTkcgICAgICAgICAgMHg2MDQKKyNkZWZpbmUgV004OTE1X0RBQzJfUklHSFRfTUlYRVJfUk9VVElORyAgICAgICAgIDB4NjA1CisjZGVmaW5lIFdNODkxNV9EU1AxX1RYX0xFRlRfTUlYRVJfUk9VVElORyAgICAgICAweDYwNgorI2RlZmluZSBXTTg5MTVfRFNQMV9UWF9SSUdIVF9NSVhFUl9ST1VUSU5HICAgICAgMHg2MDcKKyNkZWZpbmUgV004OTE1X0RTUDJfVFhfTEVGVF9NSVhFUl9ST1VUSU5HICAgICAgIDB4NjA4CisjZGVmaW5lIFdNODkxNV9EU1AyX1RYX1JJR0hUX01JWEVSX1JPVVRJTkcgICAgICAweDYwOQorI2RlZmluZSBXTTg5MTVfRFNQX1RYX01JWEVSX1NFTEVDVCAgICAgICAgICAgICAgMHg2MEEKKyNkZWZpbmUgV004OTE1X0RBQ19TT0ZUTVVURSAgICAgICAgICAgICAgICAgICAgIDB4NjEwCisjZGVmaW5lIFdNODkxNV9PVkVSU0FNUExJTkcgICAgICAgICAgICAgICAgICAgICAweDYyMAorI2RlZmluZSBXTTg5MTVfU0lERVRPTkUgICAgICAgICAgICAgICAgICAgICAgICAgMHg2MjEKKyNkZWZpbmUgV004OTE1X0dQSU9fMSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzAwCisjZGVmaW5lIFdNODkxNV9HUElPXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcwMQorI2RlZmluZSBXTTg5MTVfR1BJT18zICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MDIKKyNkZWZpbmUgV004OTE1X0dQSU9fNCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzAzCisjZGVmaW5lIFdNODkxNV9HUElPXzUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcwNAorI2RlZmluZSBXTTg5MTVfUFVMTF9DT05UUk9MXzEgICAgICAgICAgICAgICAgICAgMHg3MjAKKyNkZWZpbmUgV004OTE1X1BVTExfQ09OVFJPTF8yICAgICAgICAgICAgICAgICAgIDB4NzIxCisjZGVmaW5lIFdNODkxNV9JTlRFUlJVUFRfU1RBVFVTXzEgICAgICAgICAgICAgICAweDczMAorI2RlZmluZSBXTTg5MTVfSU5URVJSVVBUX1NUQVRVU18yICAgICAgICAgICAgICAgMHg3MzEKKyNkZWZpbmUgV004OTE1X0lOVEVSUlVQVF9SQVdfU1RBVFVTXzIgICAgICAgICAgIDB4NzMyCisjZGVmaW5lIFdNODkxNV9JTlRFUlJVUFRfU1RBVFVTXzFfTUFTSyAgICAgICAgICAweDczOAorI2RlZmluZSBXTTg5MTVfSU5URVJSVVBUX1NUQVRVU18yX01BU0sgICAgICAgICAgMHg3MzkKKyNkZWZpbmUgV004OTE1X0lOVEVSUlVQVF9DT05UUk9MICAgICAgICAgICAgICAgIDB4NzQwCisjZGVmaW5lIFdNODkxNV9MRUZUX1BETV9TUEVBS0VSICAgICAgICAgICAgICAgICAweDgwMAorI2RlZmluZSBXTTg5MTVfUklHSFRfUERNX1NQRUFLRVIgICAgICAgICAgICAgICAgMHg4MDEKKyNkZWZpbmUgV004OTE1X1BETV9TUEVBS0VSX01VVEVfU0VRVUVOQ0UgICAgICAgIDB4ODAyCisjZGVmaW5lIFdNODkxNV9QRE1fU1BFQUtFUl9WT0xVTUUgICAgICAgICAgICAgICAweDgwMworI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzAgICAgICAgICAgICAgICAgMHgzMDAwCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMSAgICAgICAgICAgICAgICAweDMwMDEKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yICAgICAgICAgICAgICAgIDB4MzAwMgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMgICAgICAgICAgICAgICAgMHgzMDAzCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNCAgICAgICAgICAgICAgICAweDMwMDQKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl81ICAgICAgICAgICAgICAgIDB4MzAwNQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzYgICAgICAgICAgICAgICAgMHgzMDA2CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNyAgICAgICAgICAgICAgICAweDMwMDcKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl84ICAgICAgICAgICAgICAgIDB4MzAwOAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzkgICAgICAgICAgICAgICAgMHgzMDA5CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTAgICAgICAgICAgICAgICAweDMwMEEKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMSAgICAgICAgICAgICAgIDB4MzAwQgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEyICAgICAgICAgICAgICAgMHgzMDBDCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTMgICAgICAgICAgICAgICAweDMwMEQKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNCAgICAgICAgICAgICAgIDB4MzAwRQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE1ICAgICAgICAgICAgICAgMHgzMDBGCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTYgICAgICAgICAgICAgICAweDMwMTAKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNyAgICAgICAgICAgICAgIDB4MzAxMQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE4ICAgICAgICAgICAgICAgMHgzMDEyCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTkgICAgICAgICAgICAgICAweDMwMTMKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMCAgICAgICAgICAgICAgIDB4MzAxNAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIxICAgICAgICAgICAgICAgMHgzMDE1CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjIgICAgICAgICAgICAgICAweDMwMTYKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMyAgICAgICAgICAgICAgIDB4MzAxNworI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI0ICAgICAgICAgICAgICAgMHgzMDE4CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjUgICAgICAgICAgICAgICAweDMwMTkKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNiAgICAgICAgICAgICAgIDB4MzAxQQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI3ICAgICAgICAgICAgICAgMHgzMDFCCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjggICAgICAgICAgICAgICAweDMwMUMKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yOSAgICAgICAgICAgICAgIDB4MzAxRAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMwICAgICAgICAgICAgICAgMHgzMDFFCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzEgICAgICAgICAgICAgICAweDMwMUYKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMiAgICAgICAgICAgICAgIDB4MzAyMAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMzICAgICAgICAgICAgICAgMHgzMDIxCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzQgICAgICAgICAgICAgICAweDMwMjIKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNSAgICAgICAgICAgICAgIDB4MzAyMworI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM2ICAgICAgICAgICAgICAgMHgzMDI0CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzcgICAgICAgICAgICAgICAweDMwMjUKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zOCAgICAgICAgICAgICAgIDB4MzAyNgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM5ICAgICAgICAgICAgICAgMHgzMDI3CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDAgICAgICAgICAgICAgICAweDMwMjgKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80MSAgICAgICAgICAgICAgIDB4MzAyOQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQyICAgICAgICAgICAgICAgMHgzMDJBCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDMgICAgICAgICAgICAgICAweDMwMkIKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80NCAgICAgICAgICAgICAgIDB4MzAyQworI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ1ICAgICAgICAgICAgICAgMHgzMDJECisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDYgICAgICAgICAgICAgICAweDMwMkUKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80NyAgICAgICAgICAgICAgIDB4MzAyRgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ4ICAgICAgICAgICAgICAgMHgzMDMwCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDkgICAgICAgICAgICAgICAweDMwMzEKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl81MCAgICAgICAgICAgICAgIDB4MzAzMgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzUxICAgICAgICAgICAgICAgMHgzMDMzCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNTIgICAgICAgICAgICAgICAweDMwMzQKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl81MyAgICAgICAgICAgICAgIDB4MzAzNQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzU0ICAgICAgICAgICAgICAgMHgzMDM2CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNTUgICAgICAgICAgICAgICAweDMwMzcKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl81NiAgICAgICAgICAgICAgIDB4MzAzOAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzU3ICAgICAgICAgICAgICAgMHgzMDM5CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNTggICAgICAgICAgICAgICAweDMwM0EKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl81OSAgICAgICAgICAgICAgIDB4MzAzQgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzYwICAgICAgICAgICAgICAgMHgzMDNDCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNjEgICAgICAgICAgICAgICAweDMwM0QKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl82MiAgICAgICAgICAgICAgIDB4MzAzRQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzYzICAgICAgICAgICAgICAgMHgzMDNGCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNjQgICAgICAgICAgICAgICAweDMwNDAKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl82NSAgICAgICAgICAgICAgIDB4MzA0MQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzY2ICAgICAgICAgICAgICAgMHgzMDQyCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNjcgICAgICAgICAgICAgICAweDMwNDMKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl82OCAgICAgICAgICAgICAgIDB4MzA0NAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzY5ICAgICAgICAgICAgICAgMHgzMDQ1CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNzAgICAgICAgICAgICAgICAweDMwNDYKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl83MSAgICAgICAgICAgICAgIDB4MzA0NworI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzcyICAgICAgICAgICAgICAgMHgzMDQ4CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNzMgICAgICAgICAgICAgICAweDMwNDkKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl83NCAgICAgICAgICAgICAgIDB4MzA0QQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzc1ICAgICAgICAgICAgICAgMHgzMDRCCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNzYgICAgICAgICAgICAgICAweDMwNEMKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl83NyAgICAgICAgICAgICAgIDB4MzA0RAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzc4ICAgICAgICAgICAgICAgMHgzMDRFCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNzkgICAgICAgICAgICAgICAweDMwNEYKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl84MCAgICAgICAgICAgICAgIDB4MzA1MAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzgxICAgICAgICAgICAgICAgMHgzMDUxCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfODIgICAgICAgICAgICAgICAweDMwNTIKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl84MyAgICAgICAgICAgICAgIDB4MzA1MworI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzg0ICAgICAgICAgICAgICAgMHgzMDU0CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfODUgICAgICAgICAgICAgICAweDMwNTUKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl84NiAgICAgICAgICAgICAgIDB4MzA1NgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzg3ICAgICAgICAgICAgICAgMHgzMDU3CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfODggICAgICAgICAgICAgICAweDMwNTgKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl84OSAgICAgICAgICAgICAgIDB4MzA1OQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzkwICAgICAgICAgICAgICAgMHgzMDVBCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfOTEgICAgICAgICAgICAgICAweDMwNUIKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl85MiAgICAgICAgICAgICAgIDB4MzA1QworI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzkzICAgICAgICAgICAgICAgMHgzMDVECisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfOTQgICAgICAgICAgICAgICAweDMwNUUKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl85NSAgICAgICAgICAgICAgIDB4MzA1RgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzk2ICAgICAgICAgICAgICAgMHgzMDYwCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfOTcgICAgICAgICAgICAgICAweDMwNjEKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl85OCAgICAgICAgICAgICAgIDB4MzA2MgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzk5ICAgICAgICAgICAgICAgMHgzMDYzCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTAwICAgICAgICAgICAgICAweDMwNjQKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMDEgICAgICAgICAgICAgIDB4MzA2NQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEwMiAgICAgICAgICAgICAgMHgzMDY2CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTAzICAgICAgICAgICAgICAweDMwNjcKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMDQgICAgICAgICAgICAgIDB4MzA2OAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEwNSAgICAgICAgICAgICAgMHgzMDY5CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTA2ICAgICAgICAgICAgICAweDMwNkEKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMDcgICAgICAgICAgICAgIDB4MzA2QgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEwOCAgICAgICAgICAgICAgMHgzMDZDCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTA5ICAgICAgICAgICAgICAweDMwNkQKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMTAgICAgICAgICAgICAgIDB4MzA2RQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzExMSAgICAgICAgICAgICAgMHgzMDZGCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTEyICAgICAgICAgICAgICAweDMwNzAKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMTMgICAgICAgICAgICAgIDB4MzA3MQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzExNCAgICAgICAgICAgICAgMHgzMDcyCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTE1ICAgICAgICAgICAgICAweDMwNzMKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMTYgICAgICAgICAgICAgIDB4MzA3NAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzExNyAgICAgICAgICAgICAgMHgzMDc1CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTE4ICAgICAgICAgICAgICAweDMwNzYKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMTkgICAgICAgICAgICAgIDB4MzA3NworI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEyMCAgICAgICAgICAgICAgMHgzMDc4CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTIxICAgICAgICAgICAgICAweDMwNzkKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMjIgICAgICAgICAgICAgIDB4MzA3QQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEyMyAgICAgICAgICAgICAgMHgzMDdCCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTI0ICAgICAgICAgICAgICAweDMwN0MKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMjUgICAgICAgICAgICAgIDB4MzA3RAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEyNiAgICAgICAgICAgICAgMHgzMDdFCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTI3ICAgICAgICAgICAgICAweDMwN0YKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMjggICAgICAgICAgICAgIDB4MzA4MAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEyOSAgICAgICAgICAgICAgMHgzMDgxCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTMwICAgICAgICAgICAgICAweDMwODIKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMzEgICAgICAgICAgICAgIDB4MzA4MworI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEzMiAgICAgICAgICAgICAgMHgzMDg0CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTMzICAgICAgICAgICAgICAweDMwODUKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMzQgICAgICAgICAgICAgIDB4MzA4NgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEzNSAgICAgICAgICAgICAgMHgzMDg3CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTM2ICAgICAgICAgICAgICAweDMwODgKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMzcgICAgICAgICAgICAgIDB4MzA4OQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEzOCAgICAgICAgICAgICAgMHgzMDhBCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTM5ICAgICAgICAgICAgICAweDMwOEIKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNDAgICAgICAgICAgICAgIDB4MzA4QworI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE0MSAgICAgICAgICAgICAgMHgzMDhECisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTQyICAgICAgICAgICAgICAweDMwOEUKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNDMgICAgICAgICAgICAgIDB4MzA4RgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE0NCAgICAgICAgICAgICAgMHgzMDkwCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTQ1ICAgICAgICAgICAgICAweDMwOTEKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNDYgICAgICAgICAgICAgIDB4MzA5MgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE0NyAgICAgICAgICAgICAgMHgzMDkzCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTQ4ICAgICAgICAgICAgICAweDMwOTQKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNDkgICAgICAgICAgICAgIDB4MzA5NQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE1MCAgICAgICAgICAgICAgMHgzMDk2CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTUxICAgICAgICAgICAgICAweDMwOTcKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNTIgICAgICAgICAgICAgIDB4MzA5OAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE1MyAgICAgICAgICAgICAgMHgzMDk5CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTU0ICAgICAgICAgICAgICAweDMwOUEKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNTUgICAgICAgICAgICAgIDB4MzA5QgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE1NiAgICAgICAgICAgICAgMHgzMDlDCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTU3ICAgICAgICAgICAgICAweDMwOUQKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNTggICAgICAgICAgICAgIDB4MzA5RQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE1OSAgICAgICAgICAgICAgMHgzMDlGCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTYwICAgICAgICAgICAgICAweDMwQTAKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNjEgICAgICAgICAgICAgIDB4MzBBMQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE2MiAgICAgICAgICAgICAgMHgzMEEyCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTYzICAgICAgICAgICAgICAweDMwQTMKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNjQgICAgICAgICAgICAgIDB4MzBBNAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE2NSAgICAgICAgICAgICAgMHgzMEE1CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTY2ICAgICAgICAgICAgICAweDMwQTYKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNjcgICAgICAgICAgICAgIDB4MzBBNworI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE2OCAgICAgICAgICAgICAgMHgzMEE4CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTY5ICAgICAgICAgICAgICAweDMwQTkKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNzAgICAgICAgICAgICAgIDB4MzBBQQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE3MSAgICAgICAgICAgICAgMHgzMEFCCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTcyICAgICAgICAgICAgICAweDMwQUMKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNzMgICAgICAgICAgICAgIDB4MzBBRAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE3NCAgICAgICAgICAgICAgMHgzMEFFCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTc1ICAgICAgICAgICAgICAweDMwQUYKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNzYgICAgICAgICAgICAgIDB4MzBCMAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE3NyAgICAgICAgICAgICAgMHgzMEIxCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTc4ICAgICAgICAgICAgICAweDMwQjIKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNzkgICAgICAgICAgICAgIDB4MzBCMworI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE4MCAgICAgICAgICAgICAgMHgzMEI0CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTgxICAgICAgICAgICAgICAweDMwQjUKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xODIgICAgICAgICAgICAgIDB4MzBCNgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE4MyAgICAgICAgICAgICAgMHgzMEI3CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTg0ICAgICAgICAgICAgICAweDMwQjgKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xODUgICAgICAgICAgICAgIDB4MzBCOQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE4NiAgICAgICAgICAgICAgMHgzMEJBCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTg3ICAgICAgICAgICAgICAweDMwQkIKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xODggICAgICAgICAgICAgIDB4MzBCQworI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE4OSAgICAgICAgICAgICAgMHgzMEJECisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTkwICAgICAgICAgICAgICAweDMwQkUKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xOTEgICAgICAgICAgICAgIDB4MzBCRgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE5MiAgICAgICAgICAgICAgMHgzMEMwCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTkzICAgICAgICAgICAgICAweDMwQzEKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xOTQgICAgICAgICAgICAgIDB4MzBDMgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE5NSAgICAgICAgICAgICAgMHgzMEMzCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTk2ICAgICAgICAgICAgICAweDMwQzQKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xOTcgICAgICAgICAgICAgIDB4MzBDNQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE5OCAgICAgICAgICAgICAgMHgzMEM2CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTk5ICAgICAgICAgICAgICAweDMwQzcKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMDAgICAgICAgICAgICAgIDB4MzBDOAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIwMSAgICAgICAgICAgICAgMHgzMEM5CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjAyICAgICAgICAgICAgICAweDMwQ0EKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMDMgICAgICAgICAgICAgIDB4MzBDQgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIwNCAgICAgICAgICAgICAgMHgzMENDCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjA1ICAgICAgICAgICAgICAweDMwQ0QKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMDYgICAgICAgICAgICAgIDB4MzBDRQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIwNyAgICAgICAgICAgICAgMHgzMENGCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjA4ICAgICAgICAgICAgICAweDMwRDAKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMDkgICAgICAgICAgICAgIDB4MzBEMQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIxMCAgICAgICAgICAgICAgMHgzMEQyCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjExICAgICAgICAgICAgICAweDMwRDMKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMTIgICAgICAgICAgICAgIDB4MzBENAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIxMyAgICAgICAgICAgICAgMHgzMEQ1CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjE0ICAgICAgICAgICAgICAweDMwRDYKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMTUgICAgICAgICAgICAgIDB4MzBENworI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIxNiAgICAgICAgICAgICAgMHgzMEQ4CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjE3ICAgICAgICAgICAgICAweDMwRDkKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMTggICAgICAgICAgICAgIDB4MzBEQQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIxOSAgICAgICAgICAgICAgMHgzMERCCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjIwICAgICAgICAgICAgICAweDMwREMKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMjEgICAgICAgICAgICAgIDB4MzBERAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIyMiAgICAgICAgICAgICAgMHgzMERFCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjIzICAgICAgICAgICAgICAweDMwREYKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMjQgICAgICAgICAgICAgIDB4MzBFMAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIyNSAgICAgICAgICAgICAgMHgzMEUxCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjI2ICAgICAgICAgICAgICAweDMwRTIKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMjcgICAgICAgICAgICAgIDB4MzBFMworI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIyOCAgICAgICAgICAgICAgMHgzMEU0CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjI5ICAgICAgICAgICAgICAweDMwRTUKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMzAgICAgICAgICAgICAgIDB4MzBFNgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIzMSAgICAgICAgICAgICAgMHgzMEU3CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjMyICAgICAgICAgICAgICAweDMwRTgKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMzMgICAgICAgICAgICAgIDB4MzBFOQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIzNCAgICAgICAgICAgICAgMHgzMEVBCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjM1ICAgICAgICAgICAgICAweDMwRUIKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMzYgICAgICAgICAgICAgIDB4MzBFQworI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIzNyAgICAgICAgICAgICAgMHgzMEVECisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjM4ICAgICAgICAgICAgICAweDMwRUUKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMzkgICAgICAgICAgICAgIDB4MzBFRgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI0MCAgICAgICAgICAgICAgMHgzMEYwCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjQxICAgICAgICAgICAgICAweDMwRjEKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNDIgICAgICAgICAgICAgIDB4MzBGMgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI0MyAgICAgICAgICAgICAgMHgzMEYzCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjQ0ICAgICAgICAgICAgICAweDMwRjQKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNDUgICAgICAgICAgICAgIDB4MzBGNQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI0NiAgICAgICAgICAgICAgMHgzMEY2CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjQ3ICAgICAgICAgICAgICAweDMwRjcKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNDggICAgICAgICAgICAgIDB4MzBGOAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI0OSAgICAgICAgICAgICAgMHgzMEY5CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjUwICAgICAgICAgICAgICAweDMwRkEKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNTEgICAgICAgICAgICAgIDB4MzBGQgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI1MiAgICAgICAgICAgICAgMHgzMEZDCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjUzICAgICAgICAgICAgICAweDMwRkQKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNTQgICAgICAgICAgICAgIDB4MzBGRQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI1NSAgICAgICAgICAgICAgMHgzMEZGCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjU2ICAgICAgICAgICAgICAweDMxMDAKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNTcgICAgICAgICAgICAgIDB4MzEwMQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI1OCAgICAgICAgICAgICAgMHgzMTAyCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjU5ICAgICAgICAgICAgICAweDMxMDMKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNjAgICAgICAgICAgICAgIDB4MzEwNAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI2MSAgICAgICAgICAgICAgMHgzMTA1CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjYyICAgICAgICAgICAgICAweDMxMDYKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNjMgICAgICAgICAgICAgIDB4MzEwNworI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI2NCAgICAgICAgICAgICAgMHgzMTA4CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjY1ICAgICAgICAgICAgICAweDMxMDkKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNjYgICAgICAgICAgICAgIDB4MzEwQQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI2NyAgICAgICAgICAgICAgMHgzMTBCCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjY4ICAgICAgICAgICAgICAweDMxMEMKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNjkgICAgICAgICAgICAgIDB4MzEwRAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI3MCAgICAgICAgICAgICAgMHgzMTBFCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjcxICAgICAgICAgICAgICAweDMxMEYKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNzIgICAgICAgICAgICAgIDB4MzExMAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI3MyAgICAgICAgICAgICAgMHgzMTExCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjc0ICAgICAgICAgICAgICAweDMxMTIKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNzUgICAgICAgICAgICAgIDB4MzExMworI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI3NiAgICAgICAgICAgICAgMHgzMTE0CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjc3ICAgICAgICAgICAgICAweDMxMTUKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNzggICAgICAgICAgICAgIDB4MzExNgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI3OSAgICAgICAgICAgICAgMHgzMTE3CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjgwICAgICAgICAgICAgICAweDMxMTgKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yODEgICAgICAgICAgICAgIDB4MzExOQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI4MiAgICAgICAgICAgICAgMHgzMTFBCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjgzICAgICAgICAgICAgICAweDMxMUIKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yODQgICAgICAgICAgICAgIDB4MzExQworI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI4NSAgICAgICAgICAgICAgMHgzMTFECisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjg2ICAgICAgICAgICAgICAweDMxMUUKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yODcgICAgICAgICAgICAgIDB4MzExRgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI4OCAgICAgICAgICAgICAgMHgzMTIwCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjg5ICAgICAgICAgICAgICAweDMxMjEKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yOTAgICAgICAgICAgICAgIDB4MzEyMgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI5MSAgICAgICAgICAgICAgMHgzMTIzCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjkyICAgICAgICAgICAgICAweDMxMjQKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yOTMgICAgICAgICAgICAgIDB4MzEyNQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI5NCAgICAgICAgICAgICAgMHgzMTI2CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjk1ICAgICAgICAgICAgICAweDMxMjcKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yOTYgICAgICAgICAgICAgIDB4MzEyOAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI5NyAgICAgICAgICAgICAgMHgzMTI5CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjk4ICAgICAgICAgICAgICAweDMxMkEKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yOTkgICAgICAgICAgICAgIDB4MzEyQgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMwMCAgICAgICAgICAgICAgMHgzMTJDCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzAxICAgICAgICAgICAgICAweDMxMkQKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMDIgICAgICAgICAgICAgIDB4MzEyRQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMwMyAgICAgICAgICAgICAgMHgzMTJGCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzA0ICAgICAgICAgICAgICAweDMxMzAKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMDUgICAgICAgICAgICAgIDB4MzEzMQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMwNiAgICAgICAgICAgICAgMHgzMTMyCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzA3ICAgICAgICAgICAgICAweDMxMzMKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMDggICAgICAgICAgICAgIDB4MzEzNAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMwOSAgICAgICAgICAgICAgMHgzMTM1CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzEwICAgICAgICAgICAgICAweDMxMzYKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMTEgICAgICAgICAgICAgIDB4MzEzNworI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMxMiAgICAgICAgICAgICAgMHgzMTM4CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzEzICAgICAgICAgICAgICAweDMxMzkKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMTQgICAgICAgICAgICAgIDB4MzEzQQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMxNSAgICAgICAgICAgICAgMHgzMTNCCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzE2ICAgICAgICAgICAgICAweDMxM0MKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMTcgICAgICAgICAgICAgIDB4MzEzRAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMxOCAgICAgICAgICAgICAgMHgzMTNFCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzE5ICAgICAgICAgICAgICAweDMxM0YKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMjAgICAgICAgICAgICAgIDB4MzE0MAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMyMSAgICAgICAgICAgICAgMHgzMTQxCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzIyICAgICAgICAgICAgICAweDMxNDIKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMjMgICAgICAgICAgICAgIDB4MzE0MworI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMyNCAgICAgICAgICAgICAgMHgzMTQ0CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzI1ICAgICAgICAgICAgICAweDMxNDUKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMjYgICAgICAgICAgICAgIDB4MzE0NgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMyNyAgICAgICAgICAgICAgMHgzMTQ3CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzI4ICAgICAgICAgICAgICAweDMxNDgKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMjkgICAgICAgICAgICAgIDB4MzE0OQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMzMCAgICAgICAgICAgICAgMHgzMTRBCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzMxICAgICAgICAgICAgICAweDMxNEIKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMzIgICAgICAgICAgICAgIDB4MzE0QworI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMzMyAgICAgICAgICAgICAgMHgzMTRECisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzM0ICAgICAgICAgICAgICAweDMxNEUKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMzUgICAgICAgICAgICAgIDB4MzE0RgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMzNiAgICAgICAgICAgICAgMHgzMTUwCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzM3ICAgICAgICAgICAgICAweDMxNTEKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMzggICAgICAgICAgICAgIDB4MzE1MgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMzOSAgICAgICAgICAgICAgMHgzMTUzCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzQwICAgICAgICAgICAgICAweDMxNTQKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNDEgICAgICAgICAgICAgIDB4MzE1NQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM0MiAgICAgICAgICAgICAgMHgzMTU2CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzQzICAgICAgICAgICAgICAweDMxNTcKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNDQgICAgICAgICAgICAgIDB4MzE1OAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM0NSAgICAgICAgICAgICAgMHgzMTU5CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzQ2ICAgICAgICAgICAgICAweDMxNUEKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNDcgICAgICAgICAgICAgIDB4MzE1QgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM0OCAgICAgICAgICAgICAgMHgzMTVDCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzQ5ICAgICAgICAgICAgICAweDMxNUQKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNTAgICAgICAgICAgICAgIDB4MzE1RQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM1MSAgICAgICAgICAgICAgMHgzMTVGCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzUyICAgICAgICAgICAgICAweDMxNjAKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNTMgICAgICAgICAgICAgIDB4MzE2MQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM1NCAgICAgICAgICAgICAgMHgzMTYyCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzU1ICAgICAgICAgICAgICAweDMxNjMKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNTYgICAgICAgICAgICAgIDB4MzE2NAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM1NyAgICAgICAgICAgICAgMHgzMTY1CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzU4ICAgICAgICAgICAgICAweDMxNjYKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNTkgICAgICAgICAgICAgIDB4MzE2NworI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM2MCAgICAgICAgICAgICAgMHgzMTY4CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzYxICAgICAgICAgICAgICAweDMxNjkKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNjIgICAgICAgICAgICAgIDB4MzE2QQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM2MyAgICAgICAgICAgICAgMHgzMTZCCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzY0ICAgICAgICAgICAgICAweDMxNkMKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNjUgICAgICAgICAgICAgIDB4MzE2RAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM2NiAgICAgICAgICAgICAgMHgzMTZFCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzY3ICAgICAgICAgICAgICAweDMxNkYKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNjggICAgICAgICAgICAgIDB4MzE3MAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM2OSAgICAgICAgICAgICAgMHgzMTcxCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzcwICAgICAgICAgICAgICAweDMxNzIKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNzEgICAgICAgICAgICAgIDB4MzE3MworI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM3MiAgICAgICAgICAgICAgMHgzMTc0CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzczICAgICAgICAgICAgICAweDMxNzUKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNzQgICAgICAgICAgICAgIDB4MzE3NgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM3NSAgICAgICAgICAgICAgMHgzMTc3CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzc2ICAgICAgICAgICAgICAweDMxNzgKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNzcgICAgICAgICAgICAgIDB4MzE3OQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM3OCAgICAgICAgICAgICAgMHgzMTdBCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzc5ICAgICAgICAgICAgICAweDMxN0IKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zODAgICAgICAgICAgICAgIDB4MzE3QworI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM4MSAgICAgICAgICAgICAgMHgzMTdECisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzgyICAgICAgICAgICAgICAweDMxN0UKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zODMgICAgICAgICAgICAgIDB4MzE3RgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM4NCAgICAgICAgICAgICAgMHgzMTgwCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzg1ICAgICAgICAgICAgICAweDMxODEKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zODYgICAgICAgICAgICAgIDB4MzE4MgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM4NyAgICAgICAgICAgICAgMHgzMTgzCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzg4ICAgICAgICAgICAgICAweDMxODQKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zODkgICAgICAgICAgICAgIDB4MzE4NQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM5MCAgICAgICAgICAgICAgMHgzMTg2CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzkxICAgICAgICAgICAgICAweDMxODcKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zOTIgICAgICAgICAgICAgIDB4MzE4OAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM5MyAgICAgICAgICAgICAgMHgzMTg5CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzk0ICAgICAgICAgICAgICAweDMxOEEKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zOTUgICAgICAgICAgICAgIDB4MzE4QgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM5NiAgICAgICAgICAgICAgMHgzMThDCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzk3ICAgICAgICAgICAgICAweDMxOEQKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zOTggICAgICAgICAgICAgIDB4MzE4RQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM5OSAgICAgICAgICAgICAgMHgzMThGCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDAwICAgICAgICAgICAgICAweDMxOTAKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80MDEgICAgICAgICAgICAgIDB4MzE5MQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQwMiAgICAgICAgICAgICAgMHgzMTkyCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDAzICAgICAgICAgICAgICAweDMxOTMKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80MDQgICAgICAgICAgICAgIDB4MzE5NAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQwNSAgICAgICAgICAgICAgMHgzMTk1CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDA2ICAgICAgICAgICAgICAweDMxOTYKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80MDcgICAgICAgICAgICAgIDB4MzE5NworI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQwOCAgICAgICAgICAgICAgMHgzMTk4CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDA5ICAgICAgICAgICAgICAweDMxOTkKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80MTAgICAgICAgICAgICAgIDB4MzE5QQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQxMSAgICAgICAgICAgICAgMHgzMTlCCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDEyICAgICAgICAgICAgICAweDMxOUMKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80MTMgICAgICAgICAgICAgIDB4MzE5RAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQxNCAgICAgICAgICAgICAgMHgzMTlFCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDE1ICAgICAgICAgICAgICAweDMxOUYKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80MTYgICAgICAgICAgICAgIDB4MzFBMAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQxNyAgICAgICAgICAgICAgMHgzMUExCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDE4ICAgICAgICAgICAgICAweDMxQTIKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80MTkgICAgICAgICAgICAgIDB4MzFBMworI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQyMCAgICAgICAgICAgICAgMHgzMUE0CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDIxICAgICAgICAgICAgICAweDMxQTUKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80MjIgICAgICAgICAgICAgIDB4MzFBNgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQyMyAgICAgICAgICAgICAgMHgzMUE3CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDI0ICAgICAgICAgICAgICAweDMxQTgKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80MjUgICAgICAgICAgICAgIDB4MzFBOQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQyNiAgICAgICAgICAgICAgMHgzMUFBCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDI3ICAgICAgICAgICAgICAweDMxQUIKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80MjggICAgICAgICAgICAgIDB4MzFBQworI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQyOSAgICAgICAgICAgICAgMHgzMUFECisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDMwICAgICAgICAgICAgICAweDMxQUUKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80MzEgICAgICAgICAgICAgIDB4MzFBRgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQzMiAgICAgICAgICAgICAgMHgzMUIwCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDMzICAgICAgICAgICAgICAweDMxQjEKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80MzQgICAgICAgICAgICAgIDB4MzFCMgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQzNSAgICAgICAgICAgICAgMHgzMUIzCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDM2ICAgICAgICAgICAgICAweDMxQjQKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80MzcgICAgICAgICAgICAgIDB4MzFCNQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQzOCAgICAgICAgICAgICAgMHgzMUI2CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDM5ICAgICAgICAgICAgICAweDMxQjcKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80NDAgICAgICAgICAgICAgIDB4MzFCOAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ0MSAgICAgICAgICAgICAgMHgzMUI5CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDQyICAgICAgICAgICAgICAweDMxQkEKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80NDMgICAgICAgICAgICAgIDB4MzFCQgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ0NCAgICAgICAgICAgICAgMHgzMUJDCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDQ1ICAgICAgICAgICAgICAweDMxQkQKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80NDYgICAgICAgICAgICAgIDB4MzFCRQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ0NyAgICAgICAgICAgICAgMHgzMUJGCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDQ4ICAgICAgICAgICAgICAweDMxQzAKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80NDkgICAgICAgICAgICAgIDB4MzFDMQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ1MCAgICAgICAgICAgICAgMHgzMUMyCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDUxICAgICAgICAgICAgICAweDMxQzMKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80NTIgICAgICAgICAgICAgIDB4MzFDNAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ1MyAgICAgICAgICAgICAgMHgzMUM1CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDU0ICAgICAgICAgICAgICAweDMxQzYKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80NTUgICAgICAgICAgICAgIDB4MzFDNworI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ1NiAgICAgICAgICAgICAgMHgzMUM4CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDU3ICAgICAgICAgICAgICAweDMxQzkKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80NTggICAgICAgICAgICAgIDB4MzFDQQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ1OSAgICAgICAgICAgICAgMHgzMUNCCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDYwICAgICAgICAgICAgICAweDMxQ0MKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80NjEgICAgICAgICAgICAgIDB4MzFDRAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ2MiAgICAgICAgICAgICAgMHgzMUNFCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDYzICAgICAgICAgICAgICAweDMxQ0YKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80NjQgICAgICAgICAgICAgIDB4MzFEMAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ2NSAgICAgICAgICAgICAgMHgzMUQxCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDY2ICAgICAgICAgICAgICAweDMxRDIKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80NjcgICAgICAgICAgICAgIDB4MzFEMworI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ2OCAgICAgICAgICAgICAgMHgzMUQ0CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDY5ICAgICAgICAgICAgICAweDMxRDUKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80NzAgICAgICAgICAgICAgIDB4MzFENgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ3MSAgICAgICAgICAgICAgMHgzMUQ3CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDcyICAgICAgICAgICAgICAweDMxRDgKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80NzMgICAgICAgICAgICAgIDB4MzFEOQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ3NCAgICAgICAgICAgICAgMHgzMURBCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDc1ICAgICAgICAgICAgICAweDMxREIKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80NzYgICAgICAgICAgICAgIDB4MzFEQworI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ3NyAgICAgICAgICAgICAgMHgzMURECisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDc4ICAgICAgICAgICAgICAweDMxREUKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80NzkgICAgICAgICAgICAgIDB4MzFERgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ4MCAgICAgICAgICAgICAgMHgzMUUwCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDgxICAgICAgICAgICAgICAweDMxRTEKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80ODIgICAgICAgICAgICAgIDB4MzFFMgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ4MyAgICAgICAgICAgICAgMHgzMUUzCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDg0ICAgICAgICAgICAgICAweDMxRTQKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80ODUgICAgICAgICAgICAgIDB4MzFFNQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ4NiAgICAgICAgICAgICAgMHgzMUU2CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDg3ICAgICAgICAgICAgICAweDMxRTcKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80ODggICAgICAgICAgICAgIDB4MzFFOAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ4OSAgICAgICAgICAgICAgMHgzMUU5CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDkwICAgICAgICAgICAgICAweDMxRUEKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80OTEgICAgICAgICAgICAgIDB4MzFFQgorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ5MiAgICAgICAgICAgICAgMHgzMUVDCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDkzICAgICAgICAgICAgICAweDMxRUQKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80OTQgICAgICAgICAgICAgIDB4MzFFRQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ5NSAgICAgICAgICAgICAgMHgzMUVGCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDk2ICAgICAgICAgICAgICAweDMxRjAKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80OTcgICAgICAgICAgICAgIDB4MzFGMQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ5OCAgICAgICAgICAgICAgMHgzMUYyCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDk5ICAgICAgICAgICAgICAweDMxRjMKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl81MDAgICAgICAgICAgICAgIDB4MzFGNAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzUwMSAgICAgICAgICAgICAgMHgzMUY1CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNTAyICAgICAgICAgICAgICAweDMxRjYKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl81MDMgICAgICAgICAgICAgIDB4MzFGNworI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzUwNCAgICAgICAgICAgICAgMHgzMUY4CisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNTA1ICAgICAgICAgICAgICAweDMxRjkKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl81MDYgICAgICAgICAgICAgIDB4MzFGQQorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzUwNyAgICAgICAgICAgICAgMHgzMUZCCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNTA4ICAgICAgICAgICAgICAweDMxRkMKKyNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl81MDkgICAgICAgICAgICAgIDB4MzFGRAorI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzUxMCAgICAgICAgICAgICAgMHgzMUZFCisjZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNTExICAgICAgICAgICAgICAweDMxRkYKKworI2RlZmluZSBXTTg5MTVfUkVHSVNURVJfQ09VTlQgICAgICAgICAgICAgICAgICAgNzA2CisjZGVmaW5lIFdNODkxNV9NQVhfUkVHSVNURVIgICAgICAgICAgICAgICAgICAgICAweDMxRkYKKworLyoKKyAqIEZpZWxkIERlZmluaXRpb25zLgorICovCisKKy8qCisgKiBSMCAoMHgwMCkgLSBTb2Z0d2FyZSBSZXNldAorICovCisjZGVmaW5lIFdNODkxNV9TV19SRVNFVF9NQVNLICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIFNXX1JFU0VUIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkxNV9TV19SRVNFVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFNXX1JFU0VUIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkxNV9TV19SRVNFVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIFNXX1JFU0VUIC0gWzE1OjBdICovCisKKy8qCisgKiBSMSAoMHgwMSkgLSBQb3dlciBNYW5hZ2VtZW50ICgxKQorICovCisjZGVmaW5lIFdNODkxNV9NSUNCMl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIE1JQ0IyX0VOQSAqLworI2RlZmluZSBXTTg5MTVfTUlDQjJfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBNSUNCMl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X01JQ0IyX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgOSAgLyogTUlDQjJfRU5BICovCisjZGVmaW5lIFdNODkxNV9NSUNCMl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0IyX0VOQSAqLworI2RlZmluZSBXTTg5MTVfTUlDQjFfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBNSUNCMV9FTkEgKi8KKyNkZWZpbmUgV004OTE1X01JQ0IxX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTUlDQjFfRU5BICovCisjZGVmaW5lIFdNODkxNV9NSUNCMV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIE1JQ0IxX0VOQSAqLworI2RlZmluZSBXTTg5MTVfTUlDQjFfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNCMV9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMkxfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSFBPVVQyTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMkxfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSFBPVVQyTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMkxfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgNyAgLyogSFBPVVQyTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMkxfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQyTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMlJfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSFBPVVQyUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMlJfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSFBPVVQyUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMlJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgNiAgLyogSFBPVVQyUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMlJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQyUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMUxfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSFBPVVQxTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMUxfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSFBPVVQxTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMUxfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgNSAgLyogSFBPVVQxTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMUxfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQxTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMVJfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogSFBPVVQxUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMVJfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogSFBPVVQxUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMVJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgNCAgLyogSFBPVVQxUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMVJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQxUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0JHX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQkdfRU5BICovCisjZGVmaW5lIFdNODkxNV9CR19FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEJHX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQkdfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBCR19FTkEgKi8KKyNkZWZpbmUgV004OTE1X0JHX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQkdfRU5BICovCisKKy8qCisgKiBSMiAoMHgwMikgLSBQb3dlciBNYW5hZ2VtZW50ICgyKQorICovCisjZGVmaW5lIFdNODkxNV9PUENMS19FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIE9QQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5MTVfT1BDTEtfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBPUENMS19FTkEgKi8KKyNkZWZpbmUgV004OTE1X09QQ0xLX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAxMSAgLyogT1BDTEtfRU5BICovCisjZGVmaW5lIFdNODkxNV9PUENMS19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE9QQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5MTVfSU5MX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBJTkxfRU5BICovCisjZGVmaW5lIFdNODkxNV9JTkxfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIElOTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0lOTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogSU5MX0VOQSAqLworI2RlZmluZSBXTTg5MTVfSU5MX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTkxfRU5BICovCisjZGVmaW5lIFdNODkxNV9JTlJfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIElOUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0lOUl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogSU5SX0VOQSAqLworI2RlZmluZSBXTTg5MTVfSU5SX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBJTlJfRU5BICovCisjZGVmaW5lIFdNODkxNV9JTlJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElOUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0xETzJfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTERPMl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0xETzJfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTERPMl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0xETzJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPMl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0xETzJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPMl9FTkEgKi8KKworLyoKKyAqIFIzICgweDAzKSAtIFBvd2VyIE1hbmFnZW1lbnQgKDMpCisgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWExfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogRFNQMlJYTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWExfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogRFNQMlJYTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWExfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAxMSAgLyogRFNQMlJYTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWExfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMlJYTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWFJfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogRFNQMlJYUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWFJfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogRFNQMlJYUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWFJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAxMCAgLyogRFNQMlJYUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWFJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMlJYUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWExfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogRFNQMVJYTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWExfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogRFNQMVJYTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWExfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgOSAgLyogRFNQMVJYTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWExfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMVJYTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWFJfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRFNQMVJYUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWFJfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRFNQMVJYUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWFJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgOCAgLyogRFNQMVJYUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWFJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMVJYUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RNSUMyTF9FTkEgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogRE1JQzJMX0VOQSAqLworI2RlZmluZSBXTTg5MTVfRE1JQzJMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBETUlDMkxfRU5BICovCisjZGVmaW5lIFdNODkxNV9ETUlDMkxfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIERNSUMyTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RNSUMyTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogRE1JQzJMX0VOQSAqLworI2RlZmluZSBXTTg5MTVfRE1JQzJSX0VOQSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBETUlDMlJfRU5BICovCisjZGVmaW5lIFdNODkxNV9ETUlDMlJfRU5BX01BU0sgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERNSUMyUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RNSUMyUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNCAgLyogRE1JQzJSX0VOQSAqLworI2RlZmluZSBXTTg5MTVfRE1JQzJSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBETUlDMlJfRU5BICovCisjZGVmaW5lIFdNODkxNV9ETUlDMUxfRU5BICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERNSUMxTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RNSUMxTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogRE1JQzFMX0VOQSAqLworI2RlZmluZSBXTTg5MTVfRE1JQzFMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAzICAvKiBETUlDMUxfRU5BICovCisjZGVmaW5lIFdNODkxNV9ETUlDMUxfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERNSUMxTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RNSUMxUl9FTkEgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRE1JQzFSX0VOQSAqLworI2RlZmluZSBXTTg5MTVfRE1JQzFSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBETUlDMVJfRU5BICovCisjZGVmaW5lIFdNODkxNV9ETUlDMVJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIERNSUMxUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RNSUMxUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogRE1JQzFSX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQURDTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBRENMX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQURDTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBRENMX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQURDTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENMX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQURDTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENMX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQURDUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBRENSX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQURDUl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBRENSX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQURDUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBBRENSX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQURDUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENSX0VOQSAqLworCisvKgorICogUjQgKDB4MDQpIC0gUG93ZXIgTWFuYWdlbWVudCAoNCkKKyAqLworI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4xX0VOQSAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBBSUYyUlhfQ0hBTjFfRU5BICovCisjZGVmaW5lIFdNODkxNV9BSUYyUlhfQ0hBTjFfRU5BX01BU0sgICAgICAgICAgICAweDAyMDAgIC8qIEFJRjJSWF9DSEFOMV9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FJRjJSWF9DSEFOMV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgOSAgLyogQUlGMlJYX0NIQU4xX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4xX0VOQV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYyUlhfQ0hBTjFfRU5BICovCisjZGVmaW5lIFdNODkxNV9BSUYyUlhfQ0hBTjBfRU5BICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjJSWF9DSEFOMF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FJRjJSWF9DSEFOMF9FTkFfTUFTSyAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMlJYX0NIQU4wX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4wX0VOQV9TSElGVCAgICAgICAgICAgICAgICA4ICAvKiBBSUYyUlhfQ0hBTjBfRU5BICovCisjZGVmaW5lIFdNODkxNV9BSUYyUlhfQ0hBTjBfRU5BX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJSWF9DSEFOMF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFONV9FTkEgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogQUlGMVJYX0NIQU41X0VOQSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU41X0VOQV9NQVNLICAgICAgICAgICAgMHgwMDIwICAvKiBBSUYxUlhfQ0hBTjVfRU5BICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjVfRU5BX1NISUZUICAgICAgICAgICAgICAgIDUgIC8qIEFJRjFSWF9DSEFONV9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFONV9FTkFfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMVJYX0NIQU41X0VOQSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU40X0VOQSAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBBSUYxUlhfQ0hBTjRfRU5BICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjRfRU5BX01BU0sgICAgICAgICAgICAweDAwMTAgIC8qIEFJRjFSWF9DSEFONF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFONF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgNCAgLyogQUlGMVJYX0NIQU40X0VOQSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU40X0VOQV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYxUlhfQ0hBTjRfRU5BICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjNfRU5BICAgICAgICAgICAgICAgICAweDAwMDggIC8qIEFJRjFSWF9DSEFOM19FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOM19FTkFfTUFTSyAgICAgICAgICAgIDB4MDAwOCAgLyogQUlGMVJYX0NIQU4zX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4zX0VOQV9TSElGVCAgICAgICAgICAgICAgICAzICAvKiBBSUYxUlhfQ0hBTjNfRU5BICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjNfRU5BX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFSWF9DSEFOM19FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMl9FTkEgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMVJYX0NIQU4yX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4yX0VOQV9NQVNLICAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYxUlhfQ0hBTjJfRU5BICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjJfRU5BX1NISUZUICAgICAgICAgICAgICAgIDIgIC8qIEFJRjFSWF9DSEFOMl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMl9FTkFfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMVJYX0NIQU4yX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4xX0VOQSAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBSUYxUlhfQ0hBTjFfRU5BICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjFfRU5BX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjFSWF9DSEFOMV9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogQUlGMVJYX0NIQU4xX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4xX0VOQV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYxUlhfQ0hBTjFfRU5BICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjBfRU5BICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjFSWF9DSEFOMF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMF9FTkFfTUFTSyAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMVJYX0NIQU4wX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4wX0VOQV9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBBSUYxUlhfQ0hBTjBfRU5BICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjBfRU5BX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFSWF9DSEFOMF9FTkEgKi8KKworLyoKKyAqIFI1ICgweDA1KSAtIFBvd2VyIE1hbmFnZW1lbnQgKDUpCisgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJUWExfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogRFNQMlRYTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJUWExfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogRFNQMlRYTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJUWExfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAxMSAgLyogRFNQMlRYTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJUWExfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMlRYTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJUWFJfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogRFNQMlRYUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJUWFJfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogRFNQMlRYUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJUWFJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAxMCAgLyogRFNQMlRYUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJUWFJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMlRYUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFUWExfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogRFNQMVRYTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFUWExfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogRFNQMVRYTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFUWExfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgOSAgLyogRFNQMVRYTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFUWExfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMVRYTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFUWFJfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRFNQMVRYUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFUWFJfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRFNQMVRYUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFUWFJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgOCAgLyogRFNQMVRYUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFUWFJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMVRYUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RBQzJMX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogREFDMkxfRU5BICovCisjZGVmaW5lIFdNODkxNV9EQUMyTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERBQzJMX0VOQSAqLworI2RlZmluZSBXTTg5MTVfREFDMkxfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBEQUMyTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RBQzJMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDMkxfRU5BICovCisjZGVmaW5lIFdNODkxNV9EQUMyUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERBQzJSX0VOQSAqLworI2RlZmluZSBXTTg5MTVfREFDMlJfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEQUMyUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RBQzJSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogREFDMlJfRU5BICovCisjZGVmaW5lIFdNODkxNV9EQUMyUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQzJSX0VOQSAqLworI2RlZmluZSBXTTg5MTVfREFDMUxfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEQUMxTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RBQzFMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogREFDMUxfRU5BICovCisjZGVmaW5lIFdNODkxNV9EQUMxTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQzFMX0VOQSAqLworI2RlZmluZSBXTTg5MTVfREFDMUxfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUMxTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RBQzFSX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogREFDMVJfRU5BICovCisjZGVmaW5lIFdNODkxNV9EQUMxUl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQzFSX0VOQSAqLworI2RlZmluZSBXTTg5MTVfREFDMVJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBEQUMxUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RBQzFSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDMVJfRU5BICovCisKKy8qCisgKiBSNiAoMHgwNikgLSBQb3dlciBNYW5hZ2VtZW50ICg2KQorICovCisjZGVmaW5lIFdNODkxNV9BSUYyVFhfQ0hBTjFfRU5BICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEFJRjJUWF9DSEFOMV9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FJRjJUWF9DSEFOMV9FTkFfTUFTSyAgICAgICAgICAgIDB4MDIwMCAgLyogQUlGMlRYX0NIQU4xX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlRYX0NIQU4xX0VOQV9TSElGVCAgICAgICAgICAgICAgICA5ICAvKiBBSUYyVFhfQ0hBTjFfRU5BICovCisjZGVmaW5lIFdNODkxNV9BSUYyVFhfQ0hBTjFfRU5BX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJUWF9DSEFOMV9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FJRjJUWF9DSEFOMF9FTkEgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMlRYX0NIQU4wX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlRYX0NIQU4wX0VOQV9NQVNLICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYyVFhfQ0hBTjBfRU5BICovCisjZGVmaW5lIFdNODkxNV9BSUYyVFhfQ0hBTjBfRU5BX1NISUZUICAgICAgICAgICAgICAgIDggIC8qIEFJRjJUWF9DSEFOMF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FJRjJUWF9DSEFOMF9FTkFfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMlRYX0NIQU4wX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU41X0VOQSAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBBSUYxVFhfQ0hBTjVfRU5BICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjVfRU5BX01BU0sgICAgICAgICAgICAweDAwMjAgIC8qIEFJRjFUWF9DSEFONV9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFONV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgNSAgLyogQUlGMVRYX0NIQU41X0VOQSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU41X0VOQV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYxVFhfQ0hBTjVfRU5BICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjRfRU5BICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEFJRjFUWF9DSEFONF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFONF9FTkFfTUFTSyAgICAgICAgICAgIDB4MDAxMCAgLyogQUlGMVRYX0NIQU40X0VOQSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU40X0VOQV9TSElGVCAgICAgICAgICAgICAgICA0ICAvKiBBSUYxVFhfQ0hBTjRfRU5BICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjRfRU5BX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFUWF9DSEFONF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOM19FTkEgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogQUlGMVRYX0NIQU4zX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4zX0VOQV9NQVNLICAgICAgICAgICAgMHgwMDA4ICAvKiBBSUYxVFhfQ0hBTjNfRU5BICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjNfRU5BX1NISUZUICAgICAgICAgICAgICAgIDMgIC8qIEFJRjFUWF9DSEFOM19FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOM19FTkFfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMVRYX0NIQU4zX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4yX0VOQSAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYxVFhfQ0hBTjJfRU5BICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjJfRU5BX01BU0sgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjFUWF9DSEFOMl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgMiAgLyogQUlGMVRYX0NIQU4yX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4yX0VOQV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYxVFhfQ0hBTjJfRU5BICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjFfRU5BICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjFUWF9DSEFOMV9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMV9FTkFfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogQUlGMVRYX0NIQU4xX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4xX0VOQV9TSElGVCAgICAgICAgICAgICAgICAxICAvKiBBSUYxVFhfQ0hBTjFfRU5BICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjFfRU5BX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFUWF9DSEFOMV9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMF9FTkEgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMVRYX0NIQU4wX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4wX0VOQV9NQVNLICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYxVFhfQ0hBTjBfRU5BICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjBfRU5BX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFUWF9DSEFOMF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMF9FTkFfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMVRYX0NIQU4wX0VOQSAqLworCisvKgorICogUjcgKDB4MDcpIC0gUG93ZXIgTWFuYWdlbWVudCAoNykKKyAqLworI2RlZmluZSBXTTg5MTVfRE1JQzJfRk4gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBETUlDMl9GTiAqLworI2RlZmluZSBXTTg5MTVfRE1JQzJfRk5fTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBETUlDMl9GTiAqLworI2RlZmluZSBXTTg5MTVfRE1JQzJfRk5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBETUlDMl9GTiAqLworI2RlZmluZSBXTTg5MTVfRE1JQzJfRk5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBETUlDMl9GTiAqLworI2RlZmluZSBXTTg5MTVfRE1JQzFfRk4gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBETUlDMV9GTiAqLworI2RlZmluZSBXTTg5MTVfRE1JQzFfRk5fTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBETUlDMV9GTiAqLworI2RlZmluZSBXTTg5MTVfRE1JQzFfRk5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBETUlDMV9GTiAqLworI2RlZmluZSBXTTg5MTVfRE1JQzFfRk5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBETUlDMV9GTiAqLworI2RlZmluZSBXTTg5MTVfQURDX0RNSUNfRFNQMlJfRU5BICAgICAgICAgICAgICAgMHgwMDgwICAvKiBBRENfRE1JQ19EU1AyUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FEQ19ETUlDX0RTUDJSX0VOQV9NQVNLICAgICAgICAgIDB4MDA4MCAgLyogQURDX0RNSUNfRFNQMlJfRU5BICovCisjZGVmaW5lIFdNODkxNV9BRENfRE1JQ19EU1AyUl9FTkFfU0hJRlQgICAgICAgICAgICAgIDcgIC8qIEFEQ19ETUlDX0RTUDJSX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQURDX0RNSUNfRFNQMlJfRU5BX1dJRFRIICAgICAgICAgICAgICAxICAvKiBBRENfRE1JQ19EU1AyUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FEQ19ETUlDX0RTUDJMX0VOQSAgICAgICAgICAgICAgIDB4MDA0MCAgLyogQURDX0RNSUNfRFNQMkxfRU5BICovCisjZGVmaW5lIFdNODkxNV9BRENfRE1JQ19EU1AyTF9FTkFfTUFTSyAgICAgICAgICAweDAwNDAgIC8qIEFEQ19ETUlDX0RTUDJMX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQURDX0RNSUNfRFNQMkxfRU5BX1NISUZUICAgICAgICAgICAgICA2ICAvKiBBRENfRE1JQ19EU1AyTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FEQ19ETUlDX0RTUDJMX0VOQV9XSURUSCAgICAgICAgICAgICAgMSAgLyogQURDX0RNSUNfRFNQMkxfRU5BICovCisjZGVmaW5lIFdNODkxNV9BRENfRE1JQ19TUkMyX01BU0sgICAgICAgICAgICAgICAweDAwMzAgIC8qIEFEQ19ETUlDX1NSQzIgLSBbNTo0XSAqLworI2RlZmluZSBXTTg5MTVfQURDX0RNSUNfU1JDMl9TSElGVCAgICAgICAgICAgICAgICAgICA0ICAvKiBBRENfRE1JQ19TUkMyIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTE1X0FEQ19ETUlDX1NSQzJfV0lEVEggICAgICAgICAgICAgICAgICAgMiAgLyogQURDX0RNSUNfU1JDMiAtIFs1OjRdICovCisjZGVmaW5lIFdNODkxNV9BRENfRE1JQ19EU1AxUl9FTkEgICAgICAgICAgICAgICAweDAwMDggIC8qIEFEQ19ETUlDX0RTUDFSX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQURDX0RNSUNfRFNQMVJfRU5BX01BU0sgICAgICAgICAgMHgwMDA4ICAvKiBBRENfRE1JQ19EU1AxUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FEQ19ETUlDX0RTUDFSX0VOQV9TSElGVCAgICAgICAgICAgICAgMyAgLyogQURDX0RNSUNfRFNQMVJfRU5BICovCisjZGVmaW5lIFdNODkxNV9BRENfRE1JQ19EU1AxUl9FTkFfV0lEVEggICAgICAgICAgICAgIDEgIC8qIEFEQ19ETUlDX0RTUDFSX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQURDX0RNSUNfRFNQMUxfRU5BICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBBRENfRE1JQ19EU1AxTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FEQ19ETUlDX0RTUDFMX0VOQV9NQVNLICAgICAgICAgIDB4MDAwNCAgLyogQURDX0RNSUNfRFNQMUxfRU5BICovCisjZGVmaW5lIFdNODkxNV9BRENfRE1JQ19EU1AxTF9FTkFfU0hJRlQgICAgICAgICAgICAgIDIgIC8qIEFEQ19ETUlDX0RTUDFMX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQURDX0RNSUNfRFNQMUxfRU5BX1dJRFRIICAgICAgICAgICAgICAxICAvKiBBRENfRE1JQ19EU1AxTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FEQ19ETUlDX1NSQzFfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMyAgLyogQURDX0RNSUNfU1JDMSAtIFsxOjBdICovCisjZGVmaW5lIFdNODkxNV9BRENfRE1JQ19TUkMxX1NISUZUICAgICAgICAgICAgICAgICAgIDAgIC8qIEFEQ19ETUlDX1NSQzEgLSBbMTowXSAqLworI2RlZmluZSBXTTg5MTVfQURDX0RNSUNfU1JDMV9XSURUSCAgICAgICAgICAgICAgICAgICAyICAvKiBBRENfRE1JQ19TUkMxIC0gWzE6MF0gKi8KKworLyoKKyAqIFI4ICgweDA4KSAtIFBvd2VyIE1hbmFnZW1lbnQgKDgpCisgKi8KKyNkZWZpbmUgV004OTE1X0FJRjJUWF9TUkNfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDBDMCAgLyogQUlGMlRYX1NSQyAtIFs3OjZdICovCisjZGVmaW5lIFdNODkxNV9BSUYyVFhfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIEFJRjJUWF9TUkMgLSBbNzo2XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlRYX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAyICAvKiBBSUYyVFhfU1JDIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9TUkMgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogRFNQMlJYX1NSQyAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX1NSQ19NQVNLICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBEU1AyUlhfU1JDICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIERTUDJSWF9TUkMgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMlJYX1NSQyAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX1NSQyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEU1AxUlhfU1JDICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfU1JDX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERTUDFSWF9TUkMgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMVJYX1NSQyAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEU1AxUlhfU1JDICovCisKKy8qCisgKiBSMTYgKDB4MTApIC0gTGVmdCBMaW5lIElucHV0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODkxNV9JTjFfVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIElOMV9WVSAqLworI2RlZmluZSBXTTg5MTVfSU4xX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBJTjFfVlUgKi8KKyNkZWZpbmUgV004OTE1X0lOMV9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogSU4xX1ZVICovCisjZGVmaW5lIFdNODkxNV9JTjFfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElOMV9WVSAqLworI2RlZmluZSBXTTg5MTVfSU4xTF9aQyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBJTjFMX1pDICovCisjZGVmaW5lIFdNODkxNV9JTjFMX1pDX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIElOMUxfWkMgKi8KKyNkZWZpbmUgV004OTE1X0lOMUxfWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogSU4xTF9aQyAqLworI2RlZmluZSBXTTg5MTVfSU4xTF9aQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTjFMX1pDICovCisjZGVmaW5lIFdNODkxNV9JTjFMX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMUYgIC8qIElOMUxfVk9MIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTE1X0lOMUxfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogSU4xTF9WT0wgLSBbNDowXSAqLworI2RlZmluZSBXTTg5MTVfSU4xTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBJTjFMX1ZPTCAtIFs0OjBdICovCisKKy8qCisgKiBSMTcgKDB4MTEpIC0gUmlnaHQgTGluZSBJbnB1dCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5MTVfSU4xX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBJTjFfVlUgKi8KKyNkZWZpbmUgV004OTE1X0lOMV9WVV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSU4xX1ZVICovCisjZGVmaW5lIFdNODkxNV9JTjFfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIElOMV9WVSAqLworI2RlZmluZSBXTTg5MTVfSU4xX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTjFfVlUgKi8KKyNkZWZpbmUgV004OTE1X0lOMVJfWkMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSU4xUl9aQyAqLworI2RlZmluZSBXTTg5MTVfSU4xUl9aQ19NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBJTjFSX1pDICovCisjZGVmaW5lIFdNODkxNV9JTjFSX1pDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIElOMVJfWkMgKi8KKyNkZWZpbmUgV004OTE1X0lOMVJfWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU4xUl9aQyAqLworI2RlZmluZSBXTTg5MTVfSU4xUl9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDFGICAvKiBJTjFSX1ZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODkxNV9JTjFSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIElOMVJfVk9MIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTE1X0lOMVJfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogSU4xUl9WT0wgLSBbNDowXSAqLworCisvKgorICogUjE4ICgweDEyKSAtIExpbmUgSW5wdXQgQ29udHJvbAorICovCisjZGVmaW5lIFdNODkxNV9JTkxfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMEMgIC8qIElOTF9NT0RFIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTE1X0lOTF9NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogSU5MX01PREUgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5MTVfSU5MX01PREVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBJTkxfTU9ERSAtIFszOjJdICovCisjZGVmaW5lIFdNODkxNV9JTlJfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDMgIC8qIElOUl9NT0RFIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTE1X0lOUl9NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogSU5SX01PREUgLSBbMTowXSAqLworI2RlZmluZSBXTTg5MTVfSU5SX01PREVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBJTlJfTU9ERSAtIFsxOjBdICovCisKKy8qCisgKiBSMjEgKDB4MTUpIC0gREFDMSBIUE9VVDEgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTE1X0RBQzFSX0hQT1VUMVJfVk9MX01BU0sgICAgICAgICAgIDB4MDBGMCAgLyogREFDMVJfSFBPVVQxUl9WT0wgLSBbNzo0XSAqLworI2RlZmluZSBXTTg5MTVfREFDMVJfSFBPVVQxUl9WT0xfU0hJRlQgICAgICAgICAgICAgICA0ICAvKiBEQUMxUl9IUE9VVDFSX1ZPTCAtIFs3OjRdICovCisjZGVmaW5lIFdNODkxNV9EQUMxUl9IUE9VVDFSX1ZPTF9XSURUSCAgICAgICAgICAgICAgIDQgIC8qIERBQzFSX0hQT1VUMVJfVk9MIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTE1X0RBQzFMX0hQT1VUMUxfVk9MX01BU0sgICAgICAgICAgIDB4MDAwRiAgLyogREFDMUxfSFBPVVQxTF9WT0wgLSBbMzowXSAqLworI2RlZmluZSBXTTg5MTVfREFDMUxfSFBPVVQxTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAwICAvKiBEQUMxTF9IUE9VVDFMX1ZPTCAtIFszOjBdICovCisjZGVmaW5lIFdNODkxNV9EQUMxTF9IUE9VVDFMX1ZPTF9XSURUSCAgICAgICAgICAgICAgIDQgIC8qIERBQzFMX0hQT1VUMUxfVk9MIC0gWzM6MF0gKi8KKworLyoKKyAqIFIyMiAoMHgxNikgLSBEQUMyIEhQT1VUMiBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5MTVfREFDMlJfSFBPVVQyUl9WT0xfTUFTSyAgICAgICAgICAgMHgwMEYwICAvKiBEQUMyUl9IUE9VVDJSX1ZPTCAtIFs3OjRdICovCisjZGVmaW5lIFdNODkxNV9EQUMyUl9IUE9VVDJSX1ZPTF9TSElGVCAgICAgICAgICAgICAgIDQgIC8qIERBQzJSX0hQT1VUMlJfVk9MIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTE1X0RBQzJSX0hQT1VUMlJfVk9MX1dJRFRIICAgICAgICAgICAgICAgNCAgLyogREFDMlJfSFBPVVQyUl9WT0wgLSBbNzo0XSAqLworI2RlZmluZSBXTTg5MTVfREFDMkxfSFBPVVQyTF9WT0xfTUFTSyAgICAgICAgICAgMHgwMDBGICAvKiBEQUMyTF9IUE9VVDJMX1ZPTCAtIFszOjBdICovCisjZGVmaW5lIFdNODkxNV9EQUMyTF9IUE9VVDJMX1ZPTF9TSElGVCAgICAgICAgICAgICAgIDAgIC8qIERBQzJMX0hQT1VUMkxfVk9MIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RBQzJMX0hQT1VUMkxfVk9MX1dJRFRIICAgICAgICAgICAgICAgNCAgLyogREFDMkxfSFBPVVQyTF9WT0wgLSBbMzowXSAqLworCisvKgorICogUjI0ICgweDE4KSAtIERBQzEgTGVmdCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5MTVfREFDMUxfTVVURSAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBEQUMxTF9NVVRFICovCisjZGVmaW5lIFdNODkxNV9EQUMxTF9NVVRFX01BU0sgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERBQzFMX01VVEUgKi8KKyNkZWZpbmUgV004OTE1X0RBQzFMX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOSAgLyogREFDMUxfTVVURSAqLworI2RlZmluZSBXTTg5MTVfREFDMUxfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUMxTF9NVVRFICovCisjZGVmaW5lIFdNODkxNV9EQUMxX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQzFfVlUgKi8KKyNkZWZpbmUgV004OTE1X0RBQzFfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDMV9WVSAqLworI2RlZmluZSBXTTg5MTVfREFDMV9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEQUMxX1ZVICovCisjZGVmaW5lIFdNODkxNV9EQUMxX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQzFfVlUgKi8KKyNkZWZpbmUgV004OTE1X0RBQzFMX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogREFDMUxfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RBQzFMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogREFDMUxfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RBQzFMX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDMUxfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIyNSAoMHgxOSkgLSBEQUMxIFJpZ2h0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODkxNV9EQUMxUl9NVVRFICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERBQzFSX01VVEUgKi8KKyNkZWZpbmUgV004OTE1X0RBQzFSX01VVEVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogREFDMVJfTVVURSAqLworI2RlZmluZSBXTTg5MTVfREFDMVJfTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBEQUMxUl9NVVRFICovCisjZGVmaW5lIFdNODkxNV9EQUMxUl9NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQzFSX01VVEUgKi8KKyNkZWZpbmUgV004OTE1X0RBQzFfVlUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDMV9WVSAqLworI2RlZmluZSBXTTg5MTVfREFDMV9WVV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUMxX1ZVICovCisjZGVmaW5lIFdNODkxNV9EQUMxX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIERBQzFfVlUgKi8KKyNkZWZpbmUgV004OTE1X0RBQzFfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDMV9WVSAqLworI2RlZmluZSBXTTg5MTVfREFDMVJfVk9MX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBEQUMxUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MTVfREFDMVJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBEQUMxUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MTVfREFDMVJfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEQUMxUl9WT0wgLSBbNzowXSAqLworCisvKgorICogUjI2ICgweDFBKSAtIERBQzIgTGVmdCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5MTVfREFDMkxfTVVURSAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBEQUMyTF9NVVRFICovCisjZGVmaW5lIFdNODkxNV9EQUMyTF9NVVRFX01BU0sgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERBQzJMX01VVEUgKi8KKyNkZWZpbmUgV004OTE1X0RBQzJMX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOSAgLyogREFDMkxfTVVURSAqLworI2RlZmluZSBXTTg5MTVfREFDMkxfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUMyTF9NVVRFICovCisjZGVmaW5lIFdNODkxNV9EQUMyX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQzJfVlUgKi8KKyNkZWZpbmUgV004OTE1X0RBQzJfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDMl9WVSAqLworI2RlZmluZSBXTTg5MTVfREFDMl9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEQUMyX1ZVICovCisjZGVmaW5lIFdNODkxNV9EQUMyX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQzJfVlUgKi8KKyNkZWZpbmUgV004OTE1X0RBQzJMX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogREFDMkxfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RBQzJMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogREFDMkxfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RBQzJMX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDMkxfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIyNyAoMHgxQikgLSBEQUMyIFJpZ2h0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODkxNV9EQUMyUl9NVVRFICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERBQzJSX01VVEUgKi8KKyNkZWZpbmUgV004OTE1X0RBQzJSX01VVEVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogREFDMlJfTVVURSAqLworI2RlZmluZSBXTTg5MTVfREFDMlJfTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBEQUMyUl9NVVRFICovCisjZGVmaW5lIFdNODkxNV9EQUMyUl9NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQzJSX01VVEUgKi8KKyNkZWZpbmUgV004OTE1X0RBQzJfVlUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDMl9WVSAqLworI2RlZmluZSBXTTg5MTVfREFDMl9WVV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUMyX1ZVICovCisjZGVmaW5lIFdNODkxNV9EQUMyX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIERBQzJfVlUgKi8KKyNkZWZpbmUgV004OTE1X0RBQzJfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDMl9WVSAqLworI2RlZmluZSBXTTg5MTVfREFDMlJfVk9MX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBEQUMyUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MTVfREFDMlJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBEQUMyUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MTVfREFDMlJfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEQUMyUl9WT0wgLSBbNzowXSAqLworCisvKgorICogUjI4ICgweDFDKSAtIE91dHB1dDEgTGVmdCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5MTVfREFDMV9WVSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUMxX1ZVICovCisjZGVmaW5lIFdNODkxNV9EQUMxX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQzFfVlUgKi8KKyNkZWZpbmUgV004OTE1X0RBQzFfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDMV9WVSAqLworI2RlZmluZSBXTTg5MTVfREFDMV9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUMxX1ZVICovCisjZGVmaW5lIFdNODkxNV9IUE9VVDFMX1pDICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEhQT1VUMUxfWkMgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMUxfWkNfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSFBPVVQxTF9aQyAqLworI2RlZmluZSBXTTg5MTVfSFBPVVQxTF9aQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBIUE9VVDFMX1pDICovCisjZGVmaW5lIFdNODkxNV9IUE9VVDFMX1pDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMUxfWkMgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMUxfVk9MX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwRiAgLyogSFBPVVQxTF9WT0wgLSBbMzowXSAqLworI2RlZmluZSBXTTg5MTVfSFBPVVQxTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBIUE9VVDFMX1ZPTCAtIFszOjBdICovCisjZGVmaW5lIFdNODkxNV9IUE9VVDFMX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEhQT1VUMUxfVk9MIC0gWzM6MF0gKi8KKworLyoKKyAqIFIyOSAoMHgxRCkgLSBPdXRwdXQxIFJpZ2h0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODkxNV9EQUMxX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQzFfVlUgKi8KKyNkZWZpbmUgV004OTE1X0RBQzFfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDMV9WVSAqLworI2RlZmluZSBXTTg5MTVfREFDMV9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEQUMxX1ZVICovCisjZGVmaW5lIFdNODkxNV9EQUMxX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQzFfVlUgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMVJfWkMgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSFBPVVQxUl9aQyAqLworI2RlZmluZSBXTTg5MTVfSFBPVVQxUl9aQ19NQVNLICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBIUE9VVDFSX1pDICovCisjZGVmaW5lIFdNODkxNV9IUE9VVDFSX1pDX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIEhQT1VUMVJfWkMgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMVJfWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQxUl9aQyAqLworI2RlZmluZSBXTTg5MTVfSFBPVVQxUl9WT0xfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBIUE9VVDFSX1ZPTCAtIFszOjBdICovCisjZGVmaW5lIFdNODkxNV9IUE9VVDFSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEhQT1VUMVJfVk9MIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMVJfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgNCAgLyogSFBPVVQxUl9WT0wgLSBbMzowXSAqLworCisvKgorICogUjMwICgweDFFKSAtIE91dHB1dDIgTGVmdCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5MTVfREFDMl9WVSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUMyX1ZVICovCisjZGVmaW5lIFdNODkxNV9EQUMyX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQzJfVlUgKi8KKyNkZWZpbmUgV004OTE1X0RBQzJfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDMl9WVSAqLworI2RlZmluZSBXTTg5MTVfREFDMl9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUMyX1ZVICovCisjZGVmaW5lIFdNODkxNV9IUE9VVDJMX1pDICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEhQT1VUMkxfWkMgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMkxfWkNfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSFBPVVQyTF9aQyAqLworI2RlZmluZSBXTTg5MTVfSFBPVVQyTF9aQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBIUE9VVDJMX1pDICovCisjZGVmaW5lIFdNODkxNV9IUE9VVDJMX1pDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMkxfWkMgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMkxfVk9MX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwRiAgLyogSFBPVVQyTF9WT0wgLSBbMzowXSAqLworI2RlZmluZSBXTTg5MTVfSFBPVVQyTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBIUE9VVDJMX1ZPTCAtIFszOjBdICovCisjZGVmaW5lIFdNODkxNV9IUE9VVDJMX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEhQT1VUMkxfVk9MIC0gWzM6MF0gKi8KKworLyoKKyAqIFIzMSAoMHgxRikgLSBPdXRwdXQyIFJpZ2h0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODkxNV9EQUMyX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQzJfVlUgKi8KKyNkZWZpbmUgV004OTE1X0RBQzJfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDMl9WVSAqLworI2RlZmluZSBXTTg5MTVfREFDMl9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEQUMyX1ZVICovCisjZGVmaW5lIFdNODkxNV9EQUMyX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQzJfVlUgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMlJfWkMgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSFBPVVQyUl9aQyAqLworI2RlZmluZSBXTTg5MTVfSFBPVVQyUl9aQ19NQVNLICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBIUE9VVDJSX1pDICovCisjZGVmaW5lIFdNODkxNV9IUE9VVDJSX1pDX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIEhQT1VUMlJfWkMgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMlJfWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQyUl9aQyAqLworI2RlZmluZSBXTTg5MTVfSFBPVVQyUl9WT0xfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBIUE9VVDJSX1ZPTCAtIFszOjBdICovCisjZGVmaW5lIFdNODkxNV9IUE9VVDJSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEhQT1VUMlJfVk9MIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMlJfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgNCAgLyogSFBPVVQyUl9WT0wgLSBbMzowXSAqLworCisvKgorICogUjMyICgweDIwKSAtIE1JQ0JJQVMgKDEpCisgKi8KKyNkZWZpbmUgV004OTE1X01JQ0IxX1JBVEUgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTUlDQjFfUkFURSAqLworI2RlZmluZSBXTTg5MTVfTUlDQjFfUkFURV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBNSUNCMV9SQVRFICovCisjZGVmaW5lIFdNODkxNV9NSUNCMV9SQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIE1JQ0IxX1JBVEUgKi8KKyNkZWZpbmUgV004OTE1X01JQ0IxX1JBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDQjFfUkFURSAqLworI2RlZmluZSBXTTg5MTVfTUlDQjFfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBNSUNCMV9NT0RFICovCisjZGVmaW5lIFdNODkxNV9NSUNCMV9NT0RFX01BU0sgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIE1JQ0IxX01PREUgKi8KKyNkZWZpbmUgV004OTE1X01JQ0IxX01PREVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNCAgLyogTUlDQjFfTU9ERSAqLworI2RlZmluZSBXTTg5MTVfTUlDQjFfTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNCMV9NT0RFICovCisjZGVmaW5lIFdNODkxNV9NSUNCMV9MVkxfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMEUgIC8qIE1JQ0IxX0xWTCAtIFszOjFdICovCisjZGVmaW5lIFdNODkxNV9NSUNCMV9MVkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0IxX0xWTCAtIFszOjFdICovCisjZGVmaW5lIFdNODkxNV9NSUNCMV9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIE1JQ0IxX0xWTCAtIFszOjFdICovCisjZGVmaW5lIFdNODkxNV9NSUNCMV9ESVNDSCAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1JQ0IxX0RJU0NIICovCisjZGVmaW5lIFdNODkxNV9NSUNCMV9ESVNDSF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1JQ0IxX0RJU0NIICovCisjZGVmaW5lIFdNODkxNV9NSUNCMV9ESVNDSF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIE1JQ0IxX0RJU0NIICovCisjZGVmaW5lIFdNODkxNV9NSUNCMV9ESVNDSF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0IxX0RJU0NIICovCisKKy8qCisgKiBSMzMgKDB4MjEpIC0gTUlDQklBUyAoMikKKyAqLworI2RlZmluZSBXTTg5MTVfTUlDQjJfUkFURSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBNSUNCMl9SQVRFICovCisjZGVmaW5lIFdNODkxNV9NSUNCMl9SQVRFX01BU0sgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIE1JQ0IyX1JBVEUgKi8KKyNkZWZpbmUgV004OTE1X01JQ0IyX1JBVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNSAgLyogTUlDQjJfUkFURSAqLworI2RlZmluZSBXTTg5MTVfTUlDQjJfUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNCMl9SQVRFICovCisjZGVmaW5lIFdNODkxNV9NSUNCMl9NT0RFICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIE1JQ0IyX01PREUgKi8KKyNkZWZpbmUgV004OTE1X01JQ0IyX01PREVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTUlDQjJfTU9ERSAqLworI2RlZmluZSBXTTg5MTVfTUlDQjJfTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBNSUNCMl9NT0RFICovCisjZGVmaW5lIFdNODkxNV9NSUNCMl9NT0RFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0IyX01PREUgKi8KKyNkZWZpbmUgV004OTE1X01JQ0IyX0xWTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwRSAgLyogTUlDQjJfTFZMIC0gWzM6MV0gKi8KKyNkZWZpbmUgV004OTE1X01JQ0IyX0xWTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDQjJfTFZMIC0gWzM6MV0gKi8KKyNkZWZpbmUgV004OTE1X01JQ0IyX0xWTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogTUlDQjJfTFZMIC0gWzM6MV0gKi8KKyNkZWZpbmUgV004OTE1X01JQ0IyX0RJU0NIICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTUlDQjJfRElTQ0ggKi8KKyNkZWZpbmUgV004OTE1X01JQ0IyX0RJU0NIX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTUlDQjJfRElTQ0ggKi8KKyNkZWZpbmUgV004OTE1X01JQ0IyX0RJU0NIX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogTUlDQjJfRElTQ0ggKi8KKyNkZWZpbmUgV004OTE1X01JQ0IyX0RJU0NIX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDQjJfRElTQ0ggKi8KKworLyoKKyAqIFI0MCAoMHgyOCkgLSBMRE8gMQorICovCisjZGVmaW5lIFdNODkxNV9MRE8xX01PREUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIExETzFfTU9ERSAqLworI2RlZmluZSBXTTg5MTVfTERPMV9NT0RFX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBMRE8xX01PREUgKi8KKyNkZWZpbmUgV004OTE1X0xETzFfTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogTERPMV9NT0RFICovCisjZGVmaW5lIFdNODkxNV9MRE8xX01PREVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzFfTU9ERSAqLworI2RlZmluZSBXTTg5MTVfTERPMV9WU0VMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDA2ICAvKiBMRE8xX1ZTRUwgLSBbMjoxXSAqLworI2RlZmluZSBXTTg5MTVfTERPMV9WU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMRE8xX1ZTRUwgLSBbMjoxXSAqLworI2RlZmluZSBXTTg5MTVfTERPMV9WU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBMRE8xX1ZTRUwgLSBbMjoxXSAqLworI2RlZmluZSBXTTg5MTVfTERPMV9ESVNDSCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBMRE8xX0RJU0NIICovCisjZGVmaW5lIFdNODkxNV9MRE8xX0RJU0NIX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIExETzFfRElTQ0ggKi8KKyNkZWZpbmUgV004OTE1X0xETzFfRElTQ0hfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTERPMV9ESVNDSCAqLworI2RlZmluZSBXTTg5MTVfTERPMV9ESVNDSF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMRE8xX0RJU0NIICovCisKKy8qCisgKiBSNDEgKDB4MjkpIC0gTERPIDIKKyAqLworI2RlZmluZSBXTTg5MTVfTERPMl9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBMRE8yX01PREUgKi8KKyNkZWZpbmUgV004OTE1X0xETzJfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTERPMl9NT0RFICovCisjZGVmaW5lIFdNODkxNV9MRE8yX01PREVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIExETzJfTU9ERSAqLworI2RlZmluZSBXTTg5MTVfTERPMl9NT0RFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMRE8yX01PREUgKi8KKyNkZWZpbmUgV004OTE1X0xETzJfVlNFTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAxRSAgLyogTERPMl9WU0VMIC0gWzQ6MV0gKi8KKyNkZWZpbmUgV004OTE1X0xETzJfVlNFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPMl9WU0VMIC0gWzQ6MV0gKi8KKyNkZWZpbmUgV004OTE1X0xETzJfVlNFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogTERPMl9WU0VMIC0gWzQ6MV0gKi8KKyNkZWZpbmUgV004OTE1X0xETzJfRElTQ0ggICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTERPMl9ESVNDSCAqLworI2RlZmluZSBXTTg5MTVfTERPMl9ESVNDSF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBMRE8yX0RJU0NIICovCisjZGVmaW5lIFdNODkxNV9MRE8yX0RJU0NIX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIExETzJfRElTQ0ggKi8KKyNkZWZpbmUgV004OTE1X0xETzJfRElTQ0hfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPMl9ESVNDSCAqLworCisvKgorICogUjQ4ICgweDMwKSAtIEFjY2Vzc29yeSBEZXRlY3QgTW9kZSAxCisgKi8KKyNkZWZpbmUgV004OTE1X0pEX01PREVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMyAgLyogSkRfTU9ERSAtIFsxOjBdICovCisjZGVmaW5lIFdNODkxNV9KRF9NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEpEX01PREUgLSBbMTowXSAqLworI2RlZmluZSBXTTg5MTVfSkRfTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBKRF9NT0RFIC0gWzE6MF0gKi8KKworLyoKKyAqIFI0OSAoMHgzMSkgLSBBY2Nlc3NvcnkgRGV0ZWN0IE1vZGUgMgorICovCisjZGVmaW5lIFdNODkxNV9IUE9VVDFGQl9TUkMgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEhQT1VUMUZCX1NSQyAqLworI2RlZmluZSBXTTg5MTVfSFBPVVQxRkJfU1JDX01BU0sgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBIUE9VVDFGQl9TUkMgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMUZCX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAgMiAgLyogSFBPVVQxRkJfU1JDICovCisjZGVmaW5lIFdNODkxNV9IUE9VVDFGQl9TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMUZCX1NSQyAqLworI2RlZmluZSBXTTg5MTVfTUlDRF9TUkMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBNSUNEX1NSQyAqLworI2RlZmluZSBXTTg5MTVfTUlDRF9TUkNfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBNSUNEX1NSQyAqLworI2RlZmluZSBXTTg5MTVfTUlDRF9TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNEX1NSQyAqLworI2RlZmluZSBXTTg5MTVfTUlDRF9TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNEX1NSQyAqLworI2RlZmluZSBXTTg5MTVfTUlDRF9CSUFTX1NSQyAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBNSUNEX0JJQVNfU1JDICovCisjZGVmaW5lIFdNODkxNV9NSUNEX0JJQVNfU1JDX01BU0sgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1JQ0RfQklBU19TUkMgKi8KKyNkZWZpbmUgV004OTE1X01JQ0RfQklBU19TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgMCAgLyogTUlDRF9CSUFTX1NSQyAqLworI2RlZmluZSBXTTg5MTVfTUlDRF9CSUFTX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNEX0JJQVNfU1JDICovCisKKy8qCisgKiBSNTIgKDB4MzQpIC0gSGVhZHBob25lIERldGVjdCAxCisgKi8KKyNkZWZpbmUgV004OTE1X0hQX0hPTERUSU1FX01BU0sgICAgICAgICAgICAgICAgIDB4MDBFMCAgLyogSFBfSE9MRFRJTUUgLSBbNzo1XSAqLworI2RlZmluZSBXTTg5MTVfSFBfSE9MRFRJTUVfU0hJRlQgICAgICAgICAgICAgICAgICAgICA1ICAvKiBIUF9IT0xEVElNRSAtIFs3OjVdICovCisjZGVmaW5lIFdNODkxNV9IUF9IT0xEVElNRV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDMgIC8qIEhQX0hPTERUSU1FIC0gWzc6NV0gKi8KKyNkZWZpbmUgV004OTE1X0hQX0NMS19ESVZfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAxOCAgLyogSFBfQ0xLX0RJViAtIFs0OjNdICovCisjZGVmaW5lIFdNODkxNV9IUF9DTEtfRElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIEhQX0NMS19ESVYgLSBbNDozXSAqLworI2RlZmluZSBXTTg5MTVfSFBfQ0xLX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAyICAvKiBIUF9DTEtfRElWIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTE1X0hQX1NURVBfU0laRSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSFBfU1RFUF9TSVpFICovCisjZGVmaW5lIFdNODkxNV9IUF9TVEVQX1NJWkVfTUFTSyAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEhQX1NURVBfU0laRSAqLworI2RlZmluZSBXTTg5MTVfSFBfU1RFUF9TSVpFX1NISUZUICAgICAgICAgICAgICAgICAgICAxICAvKiBIUF9TVEVQX1NJWkUgKi8KKyNkZWZpbmUgV004OTE1X0hQX1NURVBfU0laRV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBfU1RFUF9TSVpFICovCisjZGVmaW5lIFdNODkxNV9IUF9QT0xMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEhQX1BPTEwgKi8KKyNkZWZpbmUgV004OTE1X0hQX1BPTExfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogSFBfUE9MTCAqLworI2RlZmluZSBXTTg5MTVfSFBfUE9MTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBIUF9QT0xMICovCisjZGVmaW5lIFdNODkxNV9IUF9QT0xMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQX1BPTEwgKi8KKworLyoKKyAqIFI1MyAoMHgzNSkgLSBIZWFkcGhvbmUgRGV0ZWN0IDIKKyAqLworI2RlZmluZSBXTTg5MTVfSFBfRE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBIUF9ET05FICovCisjZGVmaW5lIFdNODkxNV9IUF9ET05FX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEhQX0RPTkUgKi8KKyNkZWZpbmUgV004OTE1X0hQX0RPTkVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogSFBfRE9ORSAqLworI2RlZmluZSBXTTg5MTVfSFBfRE9ORV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUF9ET05FICovCisjZGVmaW5lIFdNODkxNV9IUF9MVkxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwN0YgIC8qIEhQX0xWTCAtIFs2OjBdICovCisjZGVmaW5lIFdNODkxNV9IUF9MVkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEhQX0xWTCAtIFs2OjBdICovCisjZGVmaW5lIFdNODkxNV9IUF9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIEhQX0xWTCAtIFs2OjBdICovCisKKy8qCisgKiBSNTYgKDB4MzgpIC0gTWljIERldGVjdCAxCisgKi8KKyNkZWZpbmUgV004OTE1X01JQ0RfQklBU19TVEFSVFRJTUVfTUFTSyAgICAgICAgIDB4RjAwMCAgLyogTUlDRF9CSUFTX1NUQVJUVElNRSAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTE1X01JQ0RfQklBU19TVEFSVFRJTUVfU0hJRlQgICAgICAgICAgICAxMiAgLyogTUlDRF9CSUFTX1NUQVJUVElNRSAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTE1X01JQ0RfQklBU19TVEFSVFRJTUVfV0lEVEggICAgICAgICAgICAgNCAgLyogTUlDRF9CSUFTX1NUQVJUVElNRSAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTE1X01JQ0RfUkFURV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MEYwMCAgLyogTUlDRF9SQVRFIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkxNV9NSUNEX1JBVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIE1JQ0RfUkFURSAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MTVfTUlDRF9SQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBNSUNEX1JBVEUgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTE1X01JQ0RfREJUSU1FICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTUlDRF9EQlRJTUUgKi8KKyNkZWZpbmUgV004OTE1X01JQ0RfREJUSU1FX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTUlDRF9EQlRJTUUgKi8KKyNkZWZpbmUgV004OTE1X01JQ0RfREJUSU1FX1NISUZUICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDRF9EQlRJTUUgKi8KKyNkZWZpbmUgV004OTE1X01JQ0RfREJUSU1FX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDRF9EQlRJTUUgKi8KKyNkZWZpbmUgV004OTE1X01JQ0RfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTUlDRF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X01JQ0RfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTUlDRF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X01JQ0RfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTUlDRF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X01JQ0RfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDRF9FTkEgKi8KKworLyoKKyAqIFI1NyAoMHgzOSkgLSBNaWMgRGV0ZWN0IDIKKyAqLworI2RlZmluZSBXTTg5MTVfTUlDRF9MVkxfU0VMX01BU0sgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBNSUNEX0xWTF9TRUwgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MTVfTUlDRF9MVkxfU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAwICAvKiBNSUNEX0xWTF9TRUwgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MTVfTUlDRF9MVkxfU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICA4ICAvKiBNSUNEX0xWTF9TRUwgLSBbNzowXSAqLworCisvKgorICogUjU4ICgweDNBKSAtIE1pYyBEZXRlY3QgMworICovCisjZGVmaW5lIFdNODkxNV9NSUNEX0xWTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDA3RkMgIC8qIE1JQ0RfTFZMIC0gWzEwOjJdICovCisjZGVmaW5lIFdNODkxNV9NSUNEX0xWTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIE1JQ0RfTFZMIC0gWzEwOjJdICovCisjZGVmaW5lIFdNODkxNV9NSUNEX0xWTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIE1JQ0RfTFZMIC0gWzEwOjJdICovCisjZGVmaW5lIFdNODkxNV9NSUNEX1ZBTElEICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIE1JQ0RfVkFMSUQgKi8KKyNkZWZpbmUgV004OTE1X01JQ0RfVkFMSURfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTUlDRF9WQUxJRCAqLworI2RlZmluZSBXTTg5MTVfTUlDRF9WQUxJRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNEX1ZBTElEICovCisjZGVmaW5lIFdNODkxNV9NSUNEX1ZBTElEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0RfVkFMSUQgKi8KKyNkZWZpbmUgV004OTE1X01JQ0RfU1RTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTUlDRF9TVFMgKi8KKyNkZWZpbmUgV004OTE1X01JQ0RfU1RTX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTUlDRF9TVFMgKi8KKyNkZWZpbmUgV004OTE1X01JQ0RfU1RTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTUlDRF9TVFMgKi8KKyNkZWZpbmUgV004OTE1X01JQ0RfU1RTX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDRF9TVFMgKi8KKworLyoKKyAqIFI2NCAoMHg0MCkgLSBDaGFyZ2UgUHVtcCAoMSkKKyAqLworI2RlZmluZSBXTTg5MTVfQ1BfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBDUF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0NQX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQ1BfRU5BICovCisjZGVmaW5lIFdNODkxNV9DUF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTUgIC8qIENQX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQ1BfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBDUF9FTkEgKi8KKworLyoKKyAqIFI2NSAoMHg0MSkgLSBDaGFyZ2UgUHVtcCAoMikKKyAqLworI2RlZmluZSBXTTg5MTVfQ1BfRElTQ0ggICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBDUF9ESVNDSCAqLworI2RlZmluZSBXTTg5MTVfQ1BfRElTQ0hfTUFTSyAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBDUF9ESVNDSCAqLworI2RlZmluZSBXTTg5MTVfQ1BfRElTQ0hfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBDUF9ESVNDSCAqLworI2RlZmluZSBXTTg5MTVfQ1BfRElTQ0hfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBDUF9ESVNDSCAqLworCisvKgorICogUjgwICgweDUwKSAtIERDIFNlcnZvICgxKQorICovCisjZGVmaW5lIFdNODkxNV9EQ1NfRU5BX0NIQU5fMyAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERDU19FTkFfQ0hBTl8zICovCisjZGVmaW5lIFdNODkxNV9EQ1NfRU5BX0NIQU5fM19NQVNLICAgICAgICAgICAgICAweDAwMDggIC8qIERDU19FTkFfQ0hBTl8zICovCisjZGVmaW5lIFdNODkxNV9EQ1NfRU5BX0NIQU5fM19TSElGVCAgICAgICAgICAgICAgICAgIDMgIC8qIERDU19FTkFfQ0hBTl8zICovCisjZGVmaW5lIFdNODkxNV9EQ1NfRU5BX0NIQU5fM19XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIERDU19FTkFfQ0hBTl8zICovCisjZGVmaW5lIFdNODkxNV9EQ1NfRU5BX0NIQU5fMiAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERDU19FTkFfQ0hBTl8yICovCisjZGVmaW5lIFdNODkxNV9EQ1NfRU5BX0NIQU5fMl9NQVNLICAgICAgICAgICAgICAweDAwMDQgIC8qIERDU19FTkFfQ0hBTl8yICovCisjZGVmaW5lIFdNODkxNV9EQ1NfRU5BX0NIQU5fMl9TSElGVCAgICAgICAgICAgICAgICAgIDIgIC8qIERDU19FTkFfQ0hBTl8yICovCisjZGVmaW5lIFdNODkxNV9EQ1NfRU5BX0NIQU5fMl9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIERDU19FTkFfQ0hBTl8yICovCisjZGVmaW5lIFdNODkxNV9EQ1NfRU5BX0NIQU5fMSAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERDU19FTkFfQ0hBTl8xICovCisjZGVmaW5lIFdNODkxNV9EQ1NfRU5BX0NIQU5fMV9NQVNLICAgICAgICAgICAgICAweDAwMDIgIC8qIERDU19FTkFfQ0hBTl8xICovCisjZGVmaW5lIFdNODkxNV9EQ1NfRU5BX0NIQU5fMV9TSElGVCAgICAgICAgICAgICAgICAgIDEgIC8qIERDU19FTkFfQ0hBTl8xICovCisjZGVmaW5lIFdNODkxNV9EQ1NfRU5BX0NIQU5fMV9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIERDU19FTkFfQ0hBTl8xICovCisjZGVmaW5lIFdNODkxNV9EQ1NfRU5BX0NIQU5fMCAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERDU19FTkFfQ0hBTl8wICovCisjZGVmaW5lIFdNODkxNV9EQ1NfRU5BX0NIQU5fMF9NQVNLICAgICAgICAgICAgICAweDAwMDEgIC8qIERDU19FTkFfQ0hBTl8wICovCisjZGVmaW5lIFdNODkxNV9EQ1NfRU5BX0NIQU5fMF9TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIERDU19FTkFfQ0hBTl8wICovCisjZGVmaW5lIFdNODkxNV9EQ1NfRU5BX0NIQU5fMF9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIERDU19FTkFfQ0hBTl8wICovCisKKy8qCisgKiBSODEgKDB4NTEpIC0gREMgU2Vydm8gKDIpCisgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NJTkdMRV8zICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogRENTX1RSSUdfU0lOR0xFXzMgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NJTkdMRV8zX01BU0sgICAgICAgICAgIDB4ODAwMCAgLyogRENTX1RSSUdfU0lOR0xFXzMgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NJTkdMRV8zX1NISUZUICAgICAgICAgICAgICAxNSAgLyogRENTX1RSSUdfU0lOR0xFXzMgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NJTkdMRV8zX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU0lOR0xFXzMgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NJTkdMRV8yICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogRENTX1RSSUdfU0lOR0xFXzIgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NJTkdMRV8yX01BU0sgICAgICAgICAgIDB4NDAwMCAgLyogRENTX1RSSUdfU0lOR0xFXzIgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NJTkdMRV8yX1NISUZUICAgICAgICAgICAgICAxNCAgLyogRENTX1RSSUdfU0lOR0xFXzIgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NJTkdMRV8yX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU0lOR0xFXzIgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NJTkdMRV8xICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogRENTX1RSSUdfU0lOR0xFXzEgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NJTkdMRV8xX01BU0sgICAgICAgICAgIDB4MjAwMCAgLyogRENTX1RSSUdfU0lOR0xFXzEgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NJTkdMRV8xX1NISUZUICAgICAgICAgICAgICAxMyAgLyogRENTX1RSSUdfU0lOR0xFXzEgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NJTkdMRV8xX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU0lOR0xFXzEgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NJTkdMRV8wICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogRENTX1RSSUdfU0lOR0xFXzAgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NJTkdMRV8wX01BU0sgICAgICAgICAgIDB4MTAwMCAgLyogRENTX1RSSUdfU0lOR0xFXzAgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NJTkdMRV8wX1NISUZUICAgICAgICAgICAgICAxMiAgLyogRENTX1RSSUdfU0lOR0xFXzAgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NJTkdMRV8wX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU0lOR0xFXzAgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NFUklFU18zICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogRENTX1RSSUdfU0VSSUVTXzMgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NFUklFU18zX01BU0sgICAgICAgICAgIDB4MDgwMCAgLyogRENTX1RSSUdfU0VSSUVTXzMgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NFUklFU18zX1NISUZUICAgICAgICAgICAgICAxMSAgLyogRENTX1RSSUdfU0VSSUVTXzMgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NFUklFU18zX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU0VSSUVTXzMgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NFUklFU18yICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogRENTX1RSSUdfU0VSSUVTXzIgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NFUklFU18yX01BU0sgICAgICAgICAgIDB4MDQwMCAgLyogRENTX1RSSUdfU0VSSUVTXzIgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NFUklFU18yX1NISUZUICAgICAgICAgICAgICAxMCAgLyogRENTX1RSSUdfU0VSSUVTXzIgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NFUklFU18yX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU0VSSUVTXzIgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NFUklFU18xICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogRENTX1RSSUdfU0VSSUVTXzEgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NFUklFU18xX01BU0sgICAgICAgICAgIDB4MDIwMCAgLyogRENTX1RSSUdfU0VSSUVTXzEgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NFUklFU18xX1NISUZUICAgICAgICAgICAgICAgOSAgLyogRENTX1RSSUdfU0VSSUVTXzEgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NFUklFU18xX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU0VSSUVTXzEgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NFUklFU18wICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRENTX1RSSUdfU0VSSUVTXzAgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NFUklFU18wX01BU0sgICAgICAgICAgIDB4MDEwMCAgLyogRENTX1RSSUdfU0VSSUVTXzAgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NFUklFU18wX1NISUZUICAgICAgICAgICAgICAgOCAgLyogRENTX1RSSUdfU0VSSUVTXzAgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NFUklFU18wX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU0VSSUVTXzAgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NUQVJUVVBfMyAgICAgICAgICAgICAgIDB4MDA4MCAgLyogRENTX1RSSUdfU1RBUlRVUF8zICovCisjZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TVEFSVFVQXzNfTUFTSyAgICAgICAgICAweDAwODAgIC8qIERDU19UUklHX1NUQVJUVVBfMyAqLworI2RlZmluZSBXTTg5MTVfRENTX1RSSUdfU1RBUlRVUF8zX1NISUZUICAgICAgICAgICAgICA3ICAvKiBEQ1NfVFJJR19TVEFSVFVQXzMgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NUQVJUVVBfM19XSURUSCAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU1RBUlRVUF8zICovCisjZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TVEFSVFVQXzIgICAgICAgICAgICAgICAweDAwNDAgIC8qIERDU19UUklHX1NUQVJUVVBfMiAqLworI2RlZmluZSBXTTg5MTVfRENTX1RSSUdfU1RBUlRVUF8yX01BU0sgICAgICAgICAgMHgwMDQwICAvKiBEQ1NfVFJJR19TVEFSVFVQXzIgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NUQVJUVVBfMl9TSElGVCAgICAgICAgICAgICAgNiAgLyogRENTX1RSSUdfU1RBUlRVUF8yICovCisjZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TVEFSVFVQXzJfV0lEVEggICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NUQVJUVVBfMiAqLworI2RlZmluZSBXTTg5MTVfRENTX1RSSUdfU1RBUlRVUF8xICAgICAgICAgICAgICAgMHgwMDIwICAvKiBEQ1NfVFJJR19TVEFSVFVQXzEgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NUQVJUVVBfMV9NQVNLICAgICAgICAgIDB4MDAyMCAgLyogRENTX1RSSUdfU1RBUlRVUF8xICovCisjZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TVEFSVFVQXzFfU0hJRlQgICAgICAgICAgICAgIDUgIC8qIERDU19UUklHX1NUQVJUVVBfMSAqLworI2RlZmluZSBXTTg5MTVfRENTX1RSSUdfU1RBUlRVUF8xX1dJRFRIICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19TVEFSVFVQXzEgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NUQVJUVVBfMCAgICAgICAgICAgICAgIDB4MDAxMCAgLyogRENTX1RSSUdfU1RBUlRVUF8wICovCisjZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TVEFSVFVQXzBfTUFTSyAgICAgICAgICAweDAwMTAgIC8qIERDU19UUklHX1NUQVJUVVBfMCAqLworI2RlZmluZSBXTTg5MTVfRENTX1RSSUdfU1RBUlRVUF8wX1NISUZUICAgICAgICAgICAgICA0ICAvKiBEQ1NfVFJJR19TVEFSVFVQXzAgKi8KKyNkZWZpbmUgV004OTE1X0RDU19UUklHX1NUQVJUVVBfMF9XSURUSCAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU1RBUlRVUF8wICovCisjZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19EQUNfV1JfMyAgICAgICAgICAgICAgICAweDAwMDggIC8qIERDU19UUklHX0RBQ19XUl8zICovCisjZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19EQUNfV1JfM19NQVNLICAgICAgICAgICAweDAwMDggIC8qIERDU19UUklHX0RBQ19XUl8zICovCisjZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19EQUNfV1JfM19TSElGVCAgICAgICAgICAgICAgIDMgIC8qIERDU19UUklHX0RBQ19XUl8zICovCisjZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19EQUNfV1JfM19XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX0RBQ19XUl8zICovCisjZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19EQUNfV1JfMiAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERDU19UUklHX0RBQ19XUl8yICovCisjZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19EQUNfV1JfMl9NQVNLICAgICAgICAgICAweDAwMDQgIC8qIERDU19UUklHX0RBQ19XUl8yICovCisjZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19EQUNfV1JfMl9TSElGVCAgICAgICAgICAgICAgIDIgIC8qIERDU19UUklHX0RBQ19XUl8yICovCisjZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19EQUNfV1JfMl9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX0RBQ19XUl8yICovCisjZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19EQUNfV1JfMSAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERDU19UUklHX0RBQ19XUl8xICovCisjZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19EQUNfV1JfMV9NQVNLICAgICAgICAgICAweDAwMDIgIC8qIERDU19UUklHX0RBQ19XUl8xICovCisjZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19EQUNfV1JfMV9TSElGVCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX0RBQ19XUl8xICovCisjZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19EQUNfV1JfMV9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX0RBQ19XUl8xICovCisjZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19EQUNfV1JfMCAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERDU19UUklHX0RBQ19XUl8wICovCisjZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19EQUNfV1JfMF9NQVNLICAgICAgICAgICAweDAwMDEgIC8qIERDU19UUklHX0RBQ19XUl8wICovCisjZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19EQUNfV1JfMF9TSElGVCAgICAgICAgICAgICAgIDAgIC8qIERDU19UUklHX0RBQ19XUl8wICovCisjZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19EQUNfV1JfMF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX0RBQ19XUl8wICovCisKKy8qCisgKiBSODIgKDB4NTIpIC0gREMgU2Vydm8gKDMpCisgKi8KKyNkZWZpbmUgV004OTE1X0RDU19USU1FUl9QRVJJT0RfMjNfTUFTSyAgICAgICAgIDB4MEYwMCAgLyogRENTX1RJTUVSX1BFUklPRF8yMyAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MTVfRENTX1RJTUVSX1BFUklPRF8yM19TSElGVCAgICAgICAgICAgICA4ICAvKiBEQ1NfVElNRVJfUEVSSU9EXzIzIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkxNV9EQ1NfVElNRVJfUEVSSU9EXzIzX1dJRFRIICAgICAgICAgICAgIDQgIC8qIERDU19USU1FUl9QRVJJT0RfMjMgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTE1X0RDU19USU1FUl9QRVJJT0RfMDFfTUFTSyAgICAgICAgIDB4MDAwRiAgLyogRENTX1RJTUVSX1BFUklPRF8wMSAtIFszOjBdICovCisjZGVmaW5lIFdNODkxNV9EQ1NfVElNRVJfUEVSSU9EXzAxX1NISUZUICAgICAgICAgICAgIDAgIC8qIERDU19USU1FUl9QRVJJT0RfMDEgLSBbMzowXSAqLworI2RlZmluZSBXTTg5MTVfRENTX1RJTUVSX1BFUklPRF8wMV9XSURUSCAgICAgICAgICAgICA0ICAvKiBEQ1NfVElNRVJfUEVSSU9EXzAxIC0gWzM6MF0gKi8KKworLyoKKyAqIFI4NCAoMHg1NCkgLSBEQyBTZXJ2byAoNSkKKyAqLworI2RlZmluZSBXTTg5MTVfRENTX1NFUklFU19OT18yM19NQVNLICAgICAgICAgICAgMHg3RjAwICAvKiBEQ1NfU0VSSUVTX05PXzIzIC0gWzE0OjhdICovCisjZGVmaW5lIFdNODkxNV9EQ1NfU0VSSUVTX05PXzIzX1NISUZUICAgICAgICAgICAgICAgIDggIC8qIERDU19TRVJJRVNfTk9fMjMgLSBbMTQ6OF0gKi8KKyNkZWZpbmUgV004OTE1X0RDU19TRVJJRVNfTk9fMjNfV0lEVEggICAgICAgICAgICAgICAgNyAgLyogRENTX1NFUklFU19OT18yMyAtIFsxNDo4XSAqLworI2RlZmluZSBXTTg5MTVfRENTX1NFUklFU19OT18wMV9NQVNLICAgICAgICAgICAgMHgwMDdGICAvKiBEQ1NfU0VSSUVTX05PXzAxIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RDU19TRVJJRVNfTk9fMDFfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogRENTX1NFUklFU19OT18wMSAtIFs2OjBdICovCisjZGVmaW5lIFdNODkxNV9EQ1NfU0VSSUVTX05PXzAxX1dJRFRIICAgICAgICAgICAgICAgIDcgIC8qIERDU19TRVJJRVNfTk9fMDEgLSBbNjowXSAqLworCisvKgorICogUjg1ICgweDU1KSAtIERDIFNlcnZvICg2KQorICovCisjZGVmaW5lIFdNODkxNV9EQ1NfREFDX1dSX1ZBTF8zX01BU0sgICAgICAgICAgICAweEZGMDAgIC8qIERDU19EQUNfV1JfVkFMXzMgLSBbMTU6OF0gKi8KKyNkZWZpbmUgV004OTE1X0RDU19EQUNfV1JfVkFMXzNfU0hJRlQgICAgICAgICAgICAgICAgOCAgLyogRENTX0RBQ19XUl9WQUxfMyAtIFsxNTo4XSAqLworI2RlZmluZSBXTTg5MTVfRENTX0RBQ19XUl9WQUxfM19XSURUSCAgICAgICAgICAgICAgICA4ICAvKiBEQ1NfREFDX1dSX1ZBTF8zIC0gWzE1OjhdICovCisjZGVmaW5lIFdNODkxNV9EQ1NfREFDX1dSX1ZBTF8yX01BU0sgICAgICAgICAgICAweDAwRkYgIC8qIERDU19EQUNfV1JfVkFMXzIgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MTVfRENTX0RBQ19XUl9WQUxfMl9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBEQ1NfREFDX1dSX1ZBTF8yIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RDU19EQUNfV1JfVkFMXzJfV0lEVEggICAgICAgICAgICAgICAgOCAgLyogRENTX0RBQ19XUl9WQUxfMiAtIFs3OjBdICovCisKKy8qCisgKiBSODYgKDB4NTYpIC0gREMgU2Vydm8gKDcpCisgKi8KKyNkZWZpbmUgV004OTE1X0RDU19EQUNfV1JfVkFMXzFfTUFTSyAgICAgICAgICAgIDB4RkYwMCAgLyogRENTX0RBQ19XUl9WQUxfMSAtIFsxNTo4XSAqLworI2RlZmluZSBXTTg5MTVfRENTX0RBQ19XUl9WQUxfMV9TSElGVCAgICAgICAgICAgICAgICA4ICAvKiBEQ1NfREFDX1dSX1ZBTF8xIC0gWzE1OjhdICovCisjZGVmaW5lIFdNODkxNV9EQ1NfREFDX1dSX1ZBTF8xX1dJRFRIICAgICAgICAgICAgICAgIDggIC8qIERDU19EQUNfV1JfVkFMXzEgLSBbMTU6OF0gKi8KKyNkZWZpbmUgV004OTE1X0RDU19EQUNfV1JfVkFMXzBfTUFTSyAgICAgICAgICAgIDB4MDBGRiAgLyogRENTX0RBQ19XUl9WQUxfMCAtIFs3OjBdICovCisjZGVmaW5lIFdNODkxNV9EQ1NfREFDX1dSX1ZBTF8wX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIERDU19EQUNfV1JfVkFMXzAgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MTVfRENTX0RBQ19XUl9WQUxfMF9XSURUSCAgICAgICAgICAgICAgICA4ICAvKiBEQ1NfREFDX1dSX1ZBTF8wIC0gWzc6MF0gKi8KKworLyoKKyAqIFI4NyAoMHg1NykgLSBEQyBTZXJ2byBSZWFkYmFjayAwCisgKi8KKyNkZWZpbmUgV004OTE1X0RDU19DQUxfQ09NUExFVEVfTUFTSyAgICAgICAgICAgIDB4MEYwMCAgLyogRENTX0NBTF9DT01QTEVURSAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MTVfRENTX0NBTF9DT01QTEVURV9TSElGVCAgICAgICAgICAgICAgICA4ICAvKiBEQ1NfQ0FMX0NPTVBMRVRFIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkxNV9EQ1NfQ0FMX0NPTVBMRVRFX1dJRFRIICAgICAgICAgICAgICAgIDQgIC8qIERDU19DQUxfQ09NUExFVEUgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTE1X0RDU19EQUNfV1JfQ09NUExFVEVfTUFTSyAgICAgICAgIDB4MDBGMCAgLyogRENTX0RBQ19XUl9DT01QTEVURSAtIFs3OjRdICovCisjZGVmaW5lIFdNODkxNV9EQ1NfREFDX1dSX0NPTVBMRVRFX1NISUZUICAgICAgICAgICAgIDQgIC8qIERDU19EQUNfV1JfQ09NUExFVEUgLSBbNzo0XSAqLworI2RlZmluZSBXTTg5MTVfRENTX0RBQ19XUl9DT01QTEVURV9XSURUSCAgICAgICAgICAgICA0ICAvKiBEQ1NfREFDX1dSX0NPTVBMRVRFIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTE1X0RDU19TVEFSVFVQX0NPTVBMRVRFX01BU0sgICAgICAgIDB4MDAwRiAgLyogRENTX1NUQVJUVVBfQ09NUExFVEUgLSBbMzowXSAqLworI2RlZmluZSBXTTg5MTVfRENTX1NUQVJUVVBfQ09NUExFVEVfU0hJRlQgICAgICAgICAgICAwICAvKiBEQ1NfU1RBUlRVUF9DT01QTEVURSAtIFszOjBdICovCisjZGVmaW5lIFdNODkxNV9EQ1NfU1RBUlRVUF9DT01QTEVURV9XSURUSCAgICAgICAgICAgIDQgIC8qIERDU19TVEFSVFVQX0NPTVBMRVRFIC0gWzM6MF0gKi8KKworLyoKKyAqIFI5NiAoMHg2MCkgLSBBbmFsb2d1ZSBIUCAoMSkKKyAqLworI2RlZmluZSBXTTg5MTVfSFBPVVQxTF9STVZfU0hPUlQgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBIUE9VVDFMX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5MTVfSFBPVVQxTF9STVZfU0hPUlRfTUFTSyAgICAgICAgICAgMHgwMDgwICAvKiBIUE9VVDFMX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5MTVfSFBPVVQxTF9STVZfU0hPUlRfU0hJRlQgICAgICAgICAgICAgICA3ICAvKiBIUE9VVDFMX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5MTVfSFBPVVQxTF9STVZfU0hPUlRfV0lEVEggICAgICAgICAgICAgICAxICAvKiBIUE9VVDFMX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5MTVfSFBPVVQxTF9PVVRQICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBIUE9VVDFMX09VVFAgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMUxfT1VUUF9NQVNLICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSFBPVVQxTF9PVVRQICovCisjZGVmaW5lIFdNODkxNV9IUE9VVDFMX09VVFBfU0hJRlQgICAgICAgICAgICAgICAgICAgIDYgIC8qIEhQT1VUMUxfT1VUUCAqLworI2RlZmluZSBXTTg5MTVfSFBPVVQxTF9PVVRQX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDFMX09VVFAgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMUxfRExZICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSFBPVVQxTF9ETFkgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMUxfRExZX01BU0sgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSFBPVVQxTF9ETFkgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMUxfRExZX1NISUZUICAgICAgICAgICAgICAgICAgICAgNSAgLyogSFBPVVQxTF9ETFkgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMUxfRExZX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQxTF9ETFkgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMVJfUk1WX1NIT1JUICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogSFBPVVQxUl9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMVJfUk1WX1NIT1JUX01BU0sgICAgICAgICAgIDB4MDAwOCAgLyogSFBPVVQxUl9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMVJfUk1WX1NIT1JUX1NISUZUICAgICAgICAgICAgICAgMyAgLyogSFBPVVQxUl9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMVJfUk1WX1NIT1JUX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogSFBPVVQxUl9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMVJfT1VUUCAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSFBPVVQxUl9PVVRQICovCisjZGVmaW5lIFdNODkxNV9IUE9VVDFSX09VVFBfTUFTSyAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEhQT1VUMVJfT1VUUCAqLworI2RlZmluZSBXTTg5MTVfSFBPVVQxUl9PVVRQX1NISUZUICAgICAgICAgICAgICAgICAgICAyICAvKiBIUE9VVDFSX09VVFAgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMVJfT1VUUF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQxUl9PVVRQICovCisjZGVmaW5lIFdNODkxNV9IUE9VVDFSX0RMWSAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEhQT1VUMVJfRExZICovCisjZGVmaW5lIFdNODkxNV9IUE9VVDFSX0RMWV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEhQT1VUMVJfRExZICovCisjZGVmaW5lIFdNODkxNV9IUE9VVDFSX0RMWV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMVJfRExZICovCisjZGVmaW5lIFdNODkxNV9IUE9VVDFSX0RMWV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMVJfRExZICovCisKKy8qCisgKiBSOTcgKDB4NjEpIC0gQW5hbG9ndWUgSFAgKDIpCisgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMkxfUk1WX1NIT1JUICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSFBPVVQyTF9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMkxfUk1WX1NIT1JUX01BU0sgICAgICAgICAgIDB4MDA4MCAgLyogSFBPVVQyTF9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMkxfUk1WX1NIT1JUX1NISUZUICAgICAgICAgICAgICAgNyAgLyogSFBPVVQyTF9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMkxfUk1WX1NIT1JUX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogSFBPVVQyTF9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMkxfT1VUUCAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSFBPVVQyTF9PVVRQICovCisjZGVmaW5lIFdNODkxNV9IUE9VVDJMX09VVFBfTUFTSyAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEhQT1VUMkxfT1VUUCAqLworI2RlZmluZSBXTTg5MTVfSFBPVVQyTF9PVVRQX1NISUZUICAgICAgICAgICAgICAgICAgICA2ICAvKiBIUE9VVDJMX09VVFAgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMkxfT1VUUF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQyTF9PVVRQICovCisjZGVmaW5lIFdNODkxNV9IUE9VVDJMX0RMWSAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEhQT1VUMkxfRExZICovCisjZGVmaW5lIFdNODkxNV9IUE9VVDJMX0RMWV9NQVNLICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEhQT1VUMkxfRExZICovCisjZGVmaW5lIFdNODkxNV9IUE9VVDJMX0RMWV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEhQT1VUMkxfRExZICovCisjZGVmaW5lIFdNODkxNV9IUE9VVDJMX0RMWV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMkxfRExZICovCisjZGVmaW5lIFdNODkxNV9IUE9VVDJSX1JNVl9TSE9SVCAgICAgICAgICAgICAgICAweDAwMDggIC8qIEhQT1VUMlJfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODkxNV9IUE9VVDJSX1JNVl9TSE9SVF9NQVNLICAgICAgICAgICAweDAwMDggIC8qIEhQT1VUMlJfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODkxNV9IUE9VVDJSX1JNVl9TSE9SVF9TSElGVCAgICAgICAgICAgICAgIDMgIC8qIEhQT1VUMlJfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODkxNV9IUE9VVDJSX1JNVl9TSE9SVF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMlJfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODkxNV9IUE9VVDJSX09VVFAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEhQT1VUMlJfT1VUUCAqLworI2RlZmluZSBXTTg5MTVfSFBPVVQyUl9PVVRQX01BU0sgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBIUE9VVDJSX09VVFAgKi8KKyNkZWZpbmUgV004OTE1X0hQT1VUMlJfT1VUUF9TSElGVCAgICAgICAgICAgICAgICAgICAgMiAgLyogSFBPVVQyUl9PVVRQICovCisjZGVmaW5lIFdNODkxNV9IUE9VVDJSX09VVFBfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMlJfT1VUUCAqLworI2RlZmluZSBXTTg5MTVfSFBPVVQyUl9ETFkgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBIUE9VVDJSX0RMWSAqLworI2RlZmluZSBXTTg5MTVfSFBPVVQyUl9ETFlfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBIUE9VVDJSX0RMWSAqLworI2RlZmluZSBXTTg5MTVfSFBPVVQyUl9ETFlfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDJSX0RMWSAqLworI2RlZmluZSBXTTg5MTVfSFBPVVQyUl9ETFlfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDJSX0RMWSAqLworCisvKgorICogUjI1NiAoMHgxMDApIC0gQ2hpcCBSZXZpc2lvbgorICovCisjZGVmaW5lIFdNODkxNV9DSElQX1JFVl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMEYgIC8qIENISVBfUkVWIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTE1X0NISVBfUkVWX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQ0hJUF9SRVYgLSBbMzowXSAqLworI2RlZmluZSBXTTg5MTVfQ0hJUF9SRVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBDSElQX1JFViAtIFszOjBdICovCisKKy8qCisgKiBSMjU3ICgweDEwMSkgLSBDb250cm9sIEludGVyZmFjZSAoMSkKKyAqLworI2RlZmluZSBXTTg5MTVfQVVUT19JTkMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBBVVRPX0lOQyAqLworI2RlZmluZSBXTTg5MTVfQVVUT19JTkNfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBBVVRPX0lOQyAqLworI2RlZmluZSBXTTg5MTVfQVVUT19JTkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBBVVRPX0lOQyAqLworI2RlZmluZSBXTTg5MTVfQVVUT19JTkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBVVRPX0lOQyAqLworCisvKgorICogUjI3MiAoMHgxMTApIC0gV3JpdGUgU2VxdWVuY2VyIEN0cmwgKDEpCisgKi8KKyNkZWZpbmUgV004OTE1X1dTRVFfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogV1NFUV9FTkEgKi8KKyNkZWZpbmUgV004OTE1X1dTRVFfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogV1NFUV9FTkEgKi8KKyNkZWZpbmUgV004OTE1X1dTRVFfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxNSAgLyogV1NFUV9FTkEgKi8KKyNkZWZpbmUgV004OTE1X1dTRVFfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogV1NFUV9FTkEgKi8KKyNkZWZpbmUgV004OTE1X1dTRVFfQUJPUlQgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogV1NFUV9BQk9SVCAqLworI2RlZmluZSBXTTg5MTVfV1NFUV9BQk9SVF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBXU0VRX0FCT1JUICovCisjZGVmaW5lIFdNODkxNV9XU0VRX0FCT1JUX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIFdTRVFfQUJPUlQgKi8KKyNkZWZpbmUgV004OTE1X1dTRVFfQUJPUlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogV1NFUV9BQk9SVCAqLworI2RlZmluZSBXTTg5MTVfV1NFUV9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBXU0VRX1NUQVJUICovCisjZGVmaW5lIFdNODkxNV9XU0VRX1NUQVJUX01BU0sgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFdTRVFfU1RBUlQgKi8KKyNkZWZpbmUgV004OTE1X1dTRVFfU1RBUlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOCAgLyogV1NFUV9TVEFSVCAqLworI2RlZmluZSBXTTg5MTVfV1NFUV9TVEFSVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBXU0VRX1NUQVJUICovCisjZGVmaW5lIFdNODkxNV9XU0VRX1NUQVJUX0lOREVYX01BU0sgICAgICAgICAgICAweDAwN0YgIC8qIFdTRVFfU1RBUlRfSU5ERVggLSBbNjowXSAqLworI2RlZmluZSBXTTg5MTVfV1NFUV9TVEFSVF9JTkRFWF9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBXU0VRX1NUQVJUX0lOREVYIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004OTE1X1dTRVFfU1RBUlRfSU5ERVhfV0lEVEggICAgICAgICAgICAgICAgNyAgLyogV1NFUV9TVEFSVF9JTkRFWCAtIFs2OjBdICovCisKKy8qCisgKiBSMjczICgweDExMSkgLSBXcml0ZSBTZXF1ZW5jZXIgQ3RybCAoMikKKyAqLworI2RlZmluZSBXTTg5MTVfV1NFUV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBXU0VRX0JVU1kgKi8KKyNkZWZpbmUgV004OTE1X1dTRVFfQlVTWV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogV1NFUV9CVVNZICovCisjZGVmaW5lIFdNODkxNV9XU0VRX0JVU1lfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFdTRVFfQlVTWSAqLworI2RlZmluZSBXTTg5MTVfV1NFUV9CVVNZX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBXU0VRX0JVU1kgKi8KKyNkZWZpbmUgV004OTE1X1dTRVFfQ1VSUkVOVF9JTkRFWF9NQVNLICAgICAgICAgIDB4MDA3RiAgLyogV1NFUV9DVVJSRU5UX0lOREVYIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004OTE1X1dTRVFfQ1VSUkVOVF9JTkRFWF9TSElGVCAgICAgICAgICAgICAgMCAgLyogV1NFUV9DVVJSRU5UX0lOREVYIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004OTE1X1dTRVFfQ1VSUkVOVF9JTkRFWF9XSURUSCAgICAgICAgICAgICAgNyAgLyogV1NFUV9DVVJSRU5UX0lOREVYIC0gWzY6MF0gKi8KKworLyoKKyAqIFI1MTIgKDB4MjAwKSAtIEFJRiBDbG9ja2luZyAoMSkKKyAqLworI2RlZmluZSBXTTg5MTVfU1lTQ0xLX1NSQ19NQVNLICAgICAgICAgICAgICAgICAgMHgwMDE4ICAvKiBTWVNDTEtfU1JDIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTE1X1NZU0NMS19TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMyAgLyogU1lTQ0xLX1NSQyAtIFs0OjNdICovCisjZGVmaW5lIFdNODkxNV9TWVNDTEtfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFNZU0NMS19TUkMgLSBbNDozXSAqLworI2RlZmluZSBXTTg5MTVfU1lTQ0xLX0lOViAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBTWVNDTEtfSU5WICovCisjZGVmaW5lIFdNODkxNV9TWVNDTEtfSU5WX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIFNZU0NMS19JTlYgKi8KKyNkZWZpbmUgV004OTE1X1NZU0NMS19JTlZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMiAgLyogU1lTQ0xLX0lOViAqLworI2RlZmluZSBXTTg5MTVfU1lTQ0xLX0lOVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTWVNDTEtfSU5WICovCisjZGVmaW5lIFdNODkxNV9TWVNDTEtfRElWICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIFNZU0NMS19ESVYgKi8KKyNkZWZpbmUgV004OTE1X1NZU0NMS19ESVZfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogU1lTQ0xLX0RJViAqLworI2RlZmluZSBXTTg5MTVfU1lTQ0xLX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTWVNDTEtfRElWICovCisjZGVmaW5lIFdNODkxNV9TWVNDTEtfRElWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNZU0NMS19ESVYgKi8KKyNkZWZpbmUgV004OTE1X1NZU0NMS19FTkEgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogU1lTQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5MTVfU1lTQ0xLX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBTWVNDTEtfRU5BICovCisjZGVmaW5lIFdNODkxNV9TWVNDTEtfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFNZU0NMS19FTkEgKi8KKyNkZWZpbmUgV004OTE1X1NZU0NMS19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1lTQ0xLX0VOQSAqLworCisvKgorICogUjUxMyAoMHgyMDEpIC0gQUlGIENsb2NraW5nICgyKQorICovCisjZGVmaW5lIFdNODkxNV9EU1AyX0RJVl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMTggIC8qIERTUDJfRElWIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJfRElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogRFNQMl9ESVYgLSBbNDozXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMl9ESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBEU1AyX0RJViAtIFs0OjNdICovCisjZGVmaW5lIFdNODkxNV9EU1AxX0RJVl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDMgIC8qIERTUDFfRElWIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFfRElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMV9ESVYgLSBbMTowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMV9ESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBEU1AxX0RJViAtIFsxOjBdICovCisKKy8qCisgKiBSNTIwICgweDIwOCkgLSBDbG9ja2luZyAoMSkKKyAqLworI2RlZmluZSBXTTg5MTVfTEZDTEtfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBMRkNMS19FTkEgKi8KKyNkZWZpbmUgV004OTE1X0xGQ0xLX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTEZDTEtfRU5BICovCisjZGVmaW5lIFdNODkxNV9MRkNMS19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIExGQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5MTVfTEZDTEtfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMRkNMS19FTkEgKi8KKyNkZWZpbmUgV004OTE1X1RPQ0xLX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogVE9DTEtfRU5BICovCisjZGVmaW5lIFdNODkxNV9UT0NMS19FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIFRPQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5MTVfVE9DTEtfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBUT0NMS19FTkEgKi8KKyNkZWZpbmUgV004OTE1X1RPQ0xLX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogVE9DTEtfRU5BICovCisjZGVmaW5lIFdNODkxNV9BSUZDTEtfRU5BICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFJRkNMS19FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FJRkNMS19FTkFfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQUlGQ0xLX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAyICAvKiBBSUZDTEtfRU5BICovCisjZGVmaW5lIFdNODkxNV9BSUZDTEtfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRkNMS19FTkEgKi8KKyNkZWZpbmUgV004OTE1X1NZU0RTUENMS19FTkEgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogU1lTRFNQQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5MTVfU1lTRFNQQ0xLX0VOQV9NQVNLICAgICAgICAgICAgICAgMHgwMDAyICAvKiBTWVNEU1BDTEtfRU5BICovCisjZGVmaW5lIFdNODkxNV9TWVNEU1BDTEtfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgIDEgIC8qIFNZU0RTUENMS19FTkEgKi8KKyNkZWZpbmUgV004OTE1X1NZU0RTUENMS19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogU1lTRFNQQ0xLX0VOQSAqLworCisvKgorICogUjUyMSAoMHgyMDkpIC0gQ2xvY2tpbmcgKDIpCisgKi8KKyNkZWZpbmUgV004OTE1X1RPQ0xLX0RJVl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDcwMCAgLyogVE9DTEtfRElWIC0gWzEwOjhdICovCisjZGVmaW5lIFdNODkxNV9UT0NMS19ESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFRPQ0xLX0RJViAtIFsxMDo4XSAqLworI2RlZmluZSBXTTg5MTVfVE9DTEtfRElWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBUT0NMS19ESVYgLSBbMTA6OF0gKi8KKyNkZWZpbmUgV004OTE1X0RCQ0xLX0RJVl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDBGMCAgLyogREJDTEtfRElWIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTE1X0RCQ0xLX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogREJDTEtfRElWIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTE1X0RCQ0xLX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogREJDTEtfRElWIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTE1X09QQ0xLX0RJVl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwNyAgLyogT1BDTEtfRElWIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTE1X09QQ0xLX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogT1BDTEtfRElWIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTE1X09QQ0xLX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogT1BDTEtfRElWIC0gWzI6MF0gKi8KKworLyoKKyAqIFI1MjggKDB4MjEwKSAtIEFJRiBSYXRlCisgKi8KKyNkZWZpbmUgV004OTE1X1NZU0NMS19SQVRFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogU1lTQ0xLX1JBVEUgKi8KKyNkZWZpbmUgV004OTE1X1NZU0NMS19SQVRFX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogU1lTQ0xLX1JBVEUgKi8KKyNkZWZpbmUgV004OTE1X1NZU0NMS19SQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogU1lTQ0xLX1JBVEUgKi8KKyNkZWZpbmUgV004OTE1X1NZU0NMS19SQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1lTQ0xLX1JBVEUgKi8KKworLyoKKyAqIFI1NDQgKDB4MjIwKSAtIEZMTCBDb250cm9sICgxKQorICovCisjZGVmaW5lIFdNODkxNV9GTExfT1NDX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEZMTF9PU0NfRU5BICovCisjZGVmaW5lIFdNODkxNV9GTExfT1NDX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEZMTF9PU0NfRU5BICovCisjZGVmaW5lIFdNODkxNV9GTExfT1NDX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEZMTF9PU0NfRU5BICovCisjZGVmaW5lIFdNODkxNV9GTExfT1NDX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEZMTF9PU0NfRU5BICovCisjZGVmaW5lIFdNODkxNV9GTExfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEZMTF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0ZMTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRkxMX0VOQSAqLworI2RlZmluZSBXTTg5MTVfRkxMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBGTExfRU5BICovCisjZGVmaW5lIFdNODkxNV9GTExfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEZMTF9FTkEgKi8KKworLyoKKyAqIFI1NDUgKDB4MjIxKSAtIEZMTCBDb250cm9sICgyKQorICovCisjZGVmaW5lIFdNODkxNV9GTExfT1VURElWX01BU0sgICAgICAgICAgICAgICAgICAweDNGMDAgIC8qIEZMTF9PVVRESVYgLSBbMTM6OF0gKi8KKyNkZWZpbmUgV004OTE1X0ZMTF9PVVRESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOCAgLyogRkxMX09VVERJViAtIFsxMzo4XSAqLworI2RlZmluZSBXTTg5MTVfRkxMX09VVERJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBGTExfT1VURElWIC0gWzEzOjhdICovCisjZGVmaW5lIFdNODkxNV9GTExfRlJBVElPX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDcgIC8qIEZMTF9GUkFUSU8gLSBbMjowXSAqLworI2RlZmluZSBXTTg5MTVfRkxMX0ZSQVRJT19TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBGTExfRlJBVElPIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTE1X0ZMTF9GUkFUSU9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgMyAgLyogRkxMX0ZSQVRJTyAtIFsyOjBdICovCisKKy8qCisgKiBSNTQ2ICgweDIyMikgLSBGTEwgQ29udHJvbCAoMykKKyAqLworI2RlZmluZSBXTTg5MTVfRkxMX1RIRVRBX01BU0sgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBGTExfVEhFVEEgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTE1X0ZMTF9USEVUQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRkxMX1RIRVRBIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkxNV9GTExfVEhFVEFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEZMTF9USEVUQSAtIFsxNTowXSAqLworCisvKgorICogUjU0NyAoMHgyMjMpIC0gRkxMIENvbnRyb2wgKDQpCisgKi8KKyNkZWZpbmUgV004OTE1X0ZMTF9OX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZFMCAgLyogRkxMX04gLSBbMTQ6NV0gKi8KKyNkZWZpbmUgV004OTE1X0ZMTF9OX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogRkxMX04gLSBbMTQ6NV0gKi8KKyNkZWZpbmUgV004OTE1X0ZMTF9OX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxMCAgLyogRkxMX04gLSBbMTQ6NV0gKi8KKyNkZWZpbmUgV004OTE1X0ZMTF9MT09QX0dBSU5fTUFTSyAgICAgICAgICAgICAgIDB4MDAwRiAgLyogRkxMX0xPT1BfR0FJTiAtIFszOjBdICovCisjZGVmaW5lIFdNODkxNV9GTExfTE9PUF9HQUlOX1NISUZUICAgICAgICAgICAgICAgICAgIDAgIC8qIEZMTF9MT09QX0dBSU4gLSBbMzowXSAqLworI2RlZmluZSBXTTg5MTVfRkxMX0xPT1BfR0FJTl9XSURUSCAgICAgICAgICAgICAgICAgICA0ICAvKiBGTExfTE9PUF9HQUlOIC0gWzM6MF0gKi8KKworLyoKKyAqIFI1NDggKDB4MjI0KSAtIEZMTCBDb250cm9sICg1KQorICovCisjZGVmaW5lIFdNODkxNV9GTExfRlJDX05DT19WQUxfTUFTSyAgICAgICAgICAgICAweDFGODAgIC8qIEZMTF9GUkNfTkNPX1ZBTCAtIFsxMjo3XSAqLworI2RlZmluZSBXTTg5MTVfRkxMX0ZSQ19OQ09fVkFMX1NISUZUICAgICAgICAgICAgICAgICA3ICAvKiBGTExfRlJDX05DT19WQUwgLSBbMTI6N10gKi8KKyNkZWZpbmUgV004OTE1X0ZMTF9GUkNfTkNPX1ZBTF9XSURUSCAgICAgICAgICAgICAgICAgNiAgLyogRkxMX0ZSQ19OQ09fVkFMIC0gWzEyOjddICovCisjZGVmaW5lIFdNODkxNV9GTExfRlJDX05DTyAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEZMTF9GUkNfTkNPICovCisjZGVmaW5lIFdNODkxNV9GTExfRlJDX05DT19NQVNLICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEZMTF9GUkNfTkNPICovCisjZGVmaW5lIFdNODkxNV9GTExfRlJDX05DT19TSElGVCAgICAgICAgICAgICAgICAgICAgIDYgIC8qIEZMTF9GUkNfTkNPICovCisjZGVmaW5lIFdNODkxNV9GTExfRlJDX05DT19XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEZMTF9GUkNfTkNPICovCisjZGVmaW5lIFdNODkxNV9GTExfUkVGQ0xLX0RJVl9NQVNLICAgICAgICAgICAgICAweDAwMTggIC8qIEZMTF9SRUZDTEtfRElWIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTE1X0ZMTF9SRUZDTEtfRElWX1NISUZUICAgICAgICAgICAgICAgICAgMyAgLyogRkxMX1JFRkNMS19ESVYgLSBbNDozXSAqLworI2RlZmluZSBXTTg5MTVfRkxMX1JFRkNMS19ESVZfV0lEVEggICAgICAgICAgICAgICAgICAyICAvKiBGTExfUkVGQ0xLX0RJViAtIFs0OjNdICovCisjZGVmaW5lIFdNODkxNV9GTExfUkVGX0ZSRVEgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEZMTF9SRUZfRlJFUSAqLworI2RlZmluZSBXTTg5MTVfRkxMX1JFRl9GUkVRX01BU0sgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBGTExfUkVGX0ZSRVEgKi8KKyNkZWZpbmUgV004OTE1X0ZMTF9SRUZfRlJFUV9TSElGVCAgICAgICAgICAgICAgICAgICAgMiAgLyogRkxMX1JFRl9GUkVRICovCisjZGVmaW5lIFdNODkxNV9GTExfUkVGX0ZSRVFfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEZMTF9SRUZfRlJFUSAqLworI2RlZmluZSBXTTg5MTVfRkxMX1JFRkNMS19TUkNfTUFTSyAgICAgICAgICAgICAgMHgwMDAzICAvKiBGTExfUkVGQ0xLX1NSQyAtIFsxOjBdICovCisjZGVmaW5lIFdNODkxNV9GTExfUkVGQ0xLX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIEZMTF9SRUZDTEtfU1JDIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTE1X0ZMTF9SRUZDTEtfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgMiAgLyogRkxMX1JFRkNMS19TUkMgLSBbMTowXSAqLworCisvKgorICogUjU0OSAoMHgyMjUpIC0gRkxMIENvbnRyb2wgKDYpCisgKi8KKyNkZWZpbmUgV004OTE1X0ZMTF9SRUZDTEtfU1JDX1NUU19NQVNLICAgICAgICAgIDB4MDAwQyAgLyogRkxMX1JFRkNMS19TUkNfU1RTIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTE1X0ZMTF9SRUZDTEtfU1JDX1NUU19TSElGVCAgICAgICAgICAgICAgMiAgLyogRkxMX1JFRkNMS19TUkNfU1RTIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTE1X0ZMTF9SRUZDTEtfU1JDX1NUU19XSURUSCAgICAgICAgICAgICAgMiAgLyogRkxMX1JFRkNMS19TUkNfU1RTIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTE1X0ZMTF9TV0lUQ0hfQ0xLICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRkxMX1NXSVRDSF9DTEsgKi8KKyNkZWZpbmUgV004OTE1X0ZMTF9TV0lUQ0hfQ0xLX01BU0sgICAgICAgICAgICAgIDB4MDAwMSAgLyogRkxMX1NXSVRDSF9DTEsgKi8KKyNkZWZpbmUgV004OTE1X0ZMTF9TV0lUQ0hfQ0xLX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRkxMX1NXSVRDSF9DTEsgKi8KKyNkZWZpbmUgV004OTE1X0ZMTF9TV0lUQ0hfQ0xLX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogRkxMX1NXSVRDSF9DTEsgKi8KKworLyoKKyAqIFI1NTAgKDB4MjI2KSAtIEZMTCBFRlMgMQorICovCisjZGVmaW5lIFdNODkxNV9GTExfTEFNQkRBX01BU0sgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEZMTF9MQU1CREEgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTE1X0ZMTF9MQU1CREFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRkxMX0xBTUJEQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MTVfRkxMX0xBTUJEQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBGTExfTEFNQkRBIC0gWzE1OjBdICovCisKKy8qCisgKiBSNTUxICgweDIyNykgLSBGTEwgRUZTIDIKKyAqLworI2RlZmluZSBXTTg5MTVfRkxMX0xGU1JfU0VMX01BU0sgICAgICAgICAgICAgICAgMHgwMDA2ICAvKiBGTExfTEZTUl9TRUwgLSBbMjoxXSAqLworI2RlZmluZSBXTTg5MTVfRkxMX0xGU1JfU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfTEZTUl9TRUwgLSBbMjoxXSAqLworI2RlZmluZSBXTTg5MTVfRkxMX0xGU1JfU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAyICAvKiBGTExfTEZTUl9TRUwgLSBbMjoxXSAqLworI2RlZmluZSBXTTg5MTVfRkxMX0VGU19FTkEgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBGTExfRUZTX0VOQSAqLworI2RlZmluZSBXTTg5MTVfRkxMX0VGU19FTkFfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBGTExfRUZTX0VOQSAqLworI2RlZmluZSBXTTg5MTVfRkxMX0VGU19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBGTExfRUZTX0VOQSAqLworI2RlZmluZSBXTTg5MTVfRkxMX0VGU19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfRUZTX0VOQSAqLworCisvKgorICogUjc2OCAoMHgzMDApIC0gQUlGMSBDb250cm9sCisgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFfVFJJICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMV9UUkkgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFfVFJJX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMV9UUkkgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFfVFJJX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogQUlGMV9UUkkgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFfVFJJX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMV9UUkkgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFfRk1UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMyAgLyogQUlGMV9GTVQgLSBbMTowXSAqLworI2RlZmluZSBXTTg5MTVfQUlGMV9GTVRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBBSUYxX0ZNVCAtIFsxOjBdICovCisjZGVmaW5lIFdNODkxNV9BSUYxX0ZNVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEFJRjFfRk1UIC0gWzE6MF0gKi8KKworLyoKKyAqIFI3NjkgKDB4MzAxKSAtIEFJRjEgQkNMSworICovCisjZGVmaW5lIFdNODkxNV9BSUYxX0JDTEtfSU5WICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIEFJRjFfQkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFfQkNMS19JTlZfTUFTSyAgICAgICAgICAgICAgIDB4MDQwMCAgLyogQUlGMV9CQ0xLX0lOViAqLworI2RlZmluZSBXTTg5MTVfQUlGMV9CQ0xLX0lOVl9TSElGVCAgICAgICAgICAgICAgICAgIDEwICAvKiBBSUYxX0JDTEtfSU5WICovCisjZGVmaW5lIFdNODkxNV9BSUYxX0JDTEtfSU5WX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFfQkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFfQkNMS19GUkMgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogQUlGMV9CQ0xLX0ZSQyAqLworI2RlZmluZSBXTTg5MTVfQUlGMV9CQ0xLX0ZSQ19NQVNLICAgICAgICAgICAgICAgMHgwMjAwICAvKiBBSUYxX0JDTEtfRlJDICovCisjZGVmaW5lIFdNODkxNV9BSUYxX0JDTEtfRlJDX1NISUZUICAgICAgICAgICAgICAgICAgIDkgIC8qIEFJRjFfQkNMS19GUkMgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFfQkNMS19GUkNfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMV9CQ0xLX0ZSQyAqLworI2RlZmluZSBXTTg5MTVfQUlGMV9CQ0xLX01TVFIgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYxX0JDTEtfTVNUUiAqLworI2RlZmluZSBXTTg5MTVfQUlGMV9CQ0xLX01TVFJfTUFTSyAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYxX0JDTEtfTVNUUiAqLworI2RlZmluZSBXTTg5MTVfQUlGMV9CQ0xLX01TVFJfU0hJRlQgICAgICAgICAgICAgICAgICA4ICAvKiBBSUYxX0JDTEtfTVNUUiAqLworI2RlZmluZSBXTTg5MTVfQUlGMV9CQ0xLX01TVFJfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBBSUYxX0JDTEtfTVNUUiAqLworI2RlZmluZSBXTTg5MTVfQUlGMV9CQ0xLX0RJVl9NQVNLICAgICAgICAgICAgICAgMHgwMDBGICAvKiBBSUYxX0JDTEtfRElWIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFfQkNMS19ESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgMCAgLyogQUlGMV9CQ0xLX0RJViAtIFszOjBdICovCisjZGVmaW5lIFdNODkxNV9BSUYxX0JDTEtfRElWX1dJRFRIICAgICAgICAgICAgICAgICAgIDQgIC8qIEFJRjFfQkNMS19ESVYgLSBbMzowXSAqLworCisvKgorICogUjc3MCAoMHgzMDIpIC0gQUlGMSBUWCBMUkNMSygxKQorICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfUkFURV9NQVNLICAgICAgICAgICAgICAgICAweDA3RkYgIC8qIEFJRjFUWF9SQVRFIC0gWzEwOjBdICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFUWF9SQVRFIC0gWzEwOjBdICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAgMTEgIC8qIEFJRjFUWF9SQVRFIC0gWzEwOjBdICovCisKKy8qCisgKiBSNzcxICgweDMwMykgLSBBSUYxIFRYIExSQ0xLKDIpCisgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9MUkNMS19NT0RFICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogQUlGMVRYX0xSQ0xLX01PREUgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9MUkNMS19NT0RFX01BU0sgICAgICAgICAgIDB4MDAwOCAgLyogQUlGMVRYX0xSQ0xLX01PREUgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9MUkNMS19NT0RFX1NISUZUICAgICAgICAgICAgICAgMyAgLyogQUlGMVRYX0xSQ0xLX01PREUgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9MUkNMS19NT0RFX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogQUlGMVRYX0xSQ0xLX01PREUgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9MUkNMS19JTlYgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMVRYX0xSQ0xLX0lOViAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0xSQ0xLX0lOVl9NQVNLICAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYxVFhfTFJDTEtfSU5WICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfTFJDTEtfSU5WX1NISUZUICAgICAgICAgICAgICAgIDIgIC8qIEFJRjFUWF9MUkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9MUkNMS19JTlZfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMVRYX0xSQ0xLX0lOViAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0xSQ0xLX0ZSQyAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBSUYxVFhfTFJDTEtfRlJDICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfTFJDTEtfRlJDX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjFUWF9MUkNMS19GUkMgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9MUkNMS19GUkNfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogQUlGMVRYX0xSQ0xLX0ZSQyAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0xSQ0xLX0ZSQ19XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYxVFhfTFJDTEtfRlJDICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfTFJDTEtfTVNUUiAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjFUWF9MUkNMS19NU1RSICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfTFJDTEtfTVNUUl9NQVNLICAgICAgICAgICAweDAwMDEgIC8qIEFJRjFUWF9MUkNMS19NU1RSICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfTFJDTEtfTVNUUl9TSElGVCAgICAgICAgICAgICAgIDAgIC8qIEFJRjFUWF9MUkNMS19NU1RSICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfTFJDTEtfTVNUUl9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIEFJRjFUWF9MUkNMS19NU1RSICovCisKKy8qCisgKiBSNzcyICgweDMwNCkgLSBBSUYxIFJYIExSQ0xLKDEpCisgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9SQVRFX01BU0sgICAgICAgICAgICAgICAgIDB4MDdGRiAgLyogQUlGMVJYX1JBVEUgLSBbMTA6MF0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9SQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogQUlGMVJYX1JBVEUgLSBbMTA6MF0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9SQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAxMSAgLyogQUlGMVJYX1JBVEUgLSBbMTA6MF0gKi8KKworLyoKKyAqIFI3NzMgKDB4MzA1KSAtIEFJRjEgUlggTFJDTEsoMikKKyAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0xSQ0xLX0lOViAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYxUlhfTFJDTEtfSU5WICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfTFJDTEtfSU5WX01BU0sgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjFSWF9MUkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9MUkNMS19JTlZfU0hJRlQgICAgICAgICAgICAgICAgMiAgLyogQUlGMVJYX0xSQ0xLX0lOViAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0xSQ0xLX0lOVl9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYxUlhfTFJDTEtfSU5WICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfTFJDTEtfRlJDICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjFSWF9MUkNMS19GUkMgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9MUkNMS19GUkNfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogQUlGMVJYX0xSQ0xLX0ZSQyAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0xSQ0xLX0ZSQ19TSElGVCAgICAgICAgICAgICAgICAxICAvKiBBSUYxUlhfTFJDTEtfRlJDICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfTFJDTEtfRlJDX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFSWF9MUkNMS19GUkMgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9MUkNMS19NU1RSICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMVJYX0xSQ0xLX01TVFIgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9MUkNMS19NU1RSX01BU0sgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMVJYX0xSQ0xLX01TVFIgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9MUkNMS19NU1RSX1NISUZUICAgICAgICAgICAgICAgMCAgLyogQUlGMVJYX0xSQ0xLX01TVFIgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9MUkNMS19NU1RSX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogQUlGMVJYX0xSQ0xLX01TVFIgKi8KKworLyoKKyAqIFI3NzQgKDB4MzA2KSAtIEFJRjFUWCBEYXRhIENvbmZpZ3VyYXRpb24gKDEpCisgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9XTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4RkYwMCAgLyogQUlGMVRYX1dMIC0gWzE1OjhdICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfV0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjFUWF9XTCAtIFsxNTo4XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX1dMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBBSUYxVFhfV0wgLSBbMTU6OF0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9TTE9UX0xFTl9NQVNLICAgICAgICAgICAgIDB4MDBGRiAgLyogQUlGMVRYX1NMT1RfTEVOIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9TTE9UX0xFTl9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogQUlGMVRYX1NMT1RfTEVOIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9TTE9UX0xFTl9XSURUSCAgICAgICAgICAgICAgICAgOCAgLyogQUlGMVRYX1NMT1RfTEVOIC0gWzc6MF0gKi8KKworLyoKKyAqIFI3NzUgKDB4MzA3KSAtIEFJRjFUWCBEYXRhIENvbmZpZ3VyYXRpb24gKDIpCisgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9EQVRfVFJJICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMVRYX0RBVF9UUkkgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9EQVRfVFJJX01BU0sgICAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMVRYX0RBVF9UUkkgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9EQVRfVFJJX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogQUlGMVRYX0RBVF9UUkkgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9EQVRfVFJJX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMVRYX0RBVF9UUkkgKi8KKworLyoKKyAqIFI3NzYgKDB4MzA4KSAtIEFJRjFSWCBEYXRhIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX1dMX01BU0sgICAgICAgICAgICAgICAgICAgMHhGRjAwICAvKiBBSUYxUlhfV0wgLSBbMTU6OF0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9XTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMVJYX1dMIC0gWzE1OjhdICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfV0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjFSWF9XTCAtIFsxNTo4XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX1NMT1RfTEVOX01BU0sgICAgICAgICAgICAgMHgwMEZGICAvKiBBSUYxUlhfU0xPVF9MRU4gLSBbNzowXSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX1NMT1RfTEVOX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBBSUYxUlhfU0xPVF9MRU4gLSBbNzowXSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX1NMT1RfTEVOX1dJRFRIICAgICAgICAgICAgICAgICA4ICAvKiBBSUYxUlhfU0xPVF9MRU4gLSBbNzowXSAqLworCisvKgorICogUjc3NyAoMHgzMDkpIC0gQUlGMVRYIENoYW5uZWwgMCBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMF9EQVRfSU5WICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGMVRYX0NIQU4wX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMF9EQVRfSU5WX01BU0sgICAgICAgIDB4ODAwMCAgLyogQUlGMVRYX0NIQU4wX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMF9EQVRfSU5WX1NISUZUICAgICAgICAgICAxNSAgLyogQUlGMVRYX0NIQU4wX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMF9EQVRfSU5WX1dJRFRIICAgICAgICAgICAgMSAgLyogQUlGMVRYX0NIQU4wX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMF9TUEFDSU5HX01BU0sgICAgICAgIDB4N0UwMCAgLyogQUlGMVRYX0NIQU4wX1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMF9TUEFDSU5HX1NISUZUICAgICAgICAgICAgOSAgLyogQUlGMVRYX0NIQU4wX1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMF9TUEFDSU5HX1dJRFRIICAgICAgICAgICAgNiAgLyogQUlGMVRYX0NIQU4wX1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMF9TTE9UU19NQVNLICAgICAgICAgIDB4MDFDMCAgLyogQUlGMVRYX0NIQU4wX1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMF9TTE9UU19TSElGVCAgICAgICAgICAgICAgNiAgLyogQUlGMVRYX0NIQU4wX1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMF9TTE9UU19XSURUSCAgICAgICAgICAgICAgMyAgLyogQUlGMVRYX0NIQU4wX1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMF9TVEFSVF9TTE9UX01BU0sgICAgIDB4MDAzRiAgLyogQUlGMVRYX0NIQU4wX1NUQVJUX1NMT1QgLSBbNTowXSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4wX1NUQVJUX1NMT1RfU0hJRlQgICAgICAgICAwICAvKiBBSUYxVFhfQ0hBTjBfU1RBUlRfU0xPVCAtIFs1OjBdICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjBfU1RBUlRfU0xPVF9XSURUSCAgICAgICAgIDYgIC8qIEFJRjFUWF9DSEFOMF9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KKworLyoKKyAqIFI3NzggKDB4MzBBKSAtIEFJRjFUWCBDaGFubmVsIDEgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjFfREFUX0lOViAgICAgICAgICAgICAweDgwMDAgIC8qIEFJRjFUWF9DSEFOMV9EQVRfSU5WICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjFfREFUX0lOVl9NQVNLICAgICAgICAweDgwMDAgIC8qIEFJRjFUWF9DSEFOMV9EQVRfSU5WICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjFfREFUX0lOVl9TSElGVCAgICAgICAgICAgMTUgIC8qIEFJRjFUWF9DSEFOMV9EQVRfSU5WICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjFfREFUX0lOVl9XSURUSCAgICAgICAgICAgIDEgIC8qIEFJRjFUWF9DSEFOMV9EQVRfSU5WICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjFfU1BBQ0lOR19NQVNLICAgICAgICAweDdFMDAgIC8qIEFJRjFUWF9DSEFOMV9TUEFDSU5HIC0gWzE0OjldICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjFfU1BBQ0lOR19TSElGVCAgICAgICAgICAgIDkgIC8qIEFJRjFUWF9DSEFOMV9TUEFDSU5HIC0gWzE0OjldICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjFfU1BBQ0lOR19XSURUSCAgICAgICAgICAgIDYgIC8qIEFJRjFUWF9DSEFOMV9TUEFDSU5HIC0gWzE0OjldICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjFfU0xPVFNfTUFTSyAgICAgICAgICAweDAxQzAgIC8qIEFJRjFUWF9DSEFOMV9TTE9UUyAtIFs4OjZdICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjFfU0xPVFNfU0hJRlQgICAgICAgICAgICAgIDYgIC8qIEFJRjFUWF9DSEFOMV9TTE9UUyAtIFs4OjZdICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjFfU0xPVFNfV0lEVEggICAgICAgICAgICAgIDMgIC8qIEFJRjFUWF9DSEFOMV9TTE9UUyAtIFs4OjZdICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjFfU1RBUlRfU0xPVF9NQVNLICAgICAweDAwM0YgIC8qIEFJRjFUWF9DSEFOMV9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMV9TVEFSVF9TTE9UX1NISUZUICAgICAgICAgMCAgLyogQUlGMVRYX0NIQU4xX1NUQVJUX1NMT1QgLSBbNTowXSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4xX1NUQVJUX1NMT1RfV0lEVEggICAgICAgICA2ICAvKiBBSUYxVFhfQ0hBTjFfU1RBUlRfU0xPVCAtIFs1OjBdICovCisKKy8qCisgKiBSNzc5ICgweDMwQikgLSBBSUYxVFggQ2hhbm5lbCAyIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4yX0RBVF9JTlYgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUYxVFhfQ0hBTjJfREFUX0lOViAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4yX0RBVF9JTlZfTUFTSyAgICAgICAgMHg4MDAwICAvKiBBSUYxVFhfQ0hBTjJfREFUX0lOViAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4yX0RBVF9JTlZfU0hJRlQgICAgICAgICAgIDE1ICAvKiBBSUYxVFhfQ0hBTjJfREFUX0lOViAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4yX0RBVF9JTlZfV0lEVEggICAgICAgICAgICAxICAvKiBBSUYxVFhfQ0hBTjJfREFUX0lOViAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4yX1NQQUNJTkdfTUFTSyAgICAgICAgMHg3RTAwICAvKiBBSUYxVFhfQ0hBTjJfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4yX1NQQUNJTkdfU0hJRlQgICAgICAgICAgICA5ICAvKiBBSUYxVFhfQ0hBTjJfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4yX1NQQUNJTkdfV0lEVEggICAgICAgICAgICA2ICAvKiBBSUYxVFhfQ0hBTjJfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4yX1NMT1RTX01BU0sgICAgICAgICAgMHgwMUMwICAvKiBBSUYxVFhfQ0hBTjJfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4yX1NMT1RTX1NISUZUICAgICAgICAgICAgICA2ICAvKiBBSUYxVFhfQ0hBTjJfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4yX1NMT1RTX1dJRFRIICAgICAgICAgICAgICAzICAvKiBBSUYxVFhfQ0hBTjJfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4yX1NUQVJUX1NMT1RfTUFTSyAgICAgMHgwMDNGICAvKiBBSUYxVFhfQ0hBTjJfU1RBUlRfU0xPVCAtIFs1OjBdICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjJfU1RBUlRfU0xPVF9TSElGVCAgICAgICAgIDAgIC8qIEFJRjFUWF9DSEFOMl9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMl9TVEFSVF9TTE9UX1dJRFRIICAgICAgICAgNiAgLyogQUlGMVRYX0NIQU4yX1NUQVJUX1NMT1QgLSBbNTowXSAqLworCisvKgorICogUjc4MCAoMHgzMEMpIC0gQUlGMVRYIENoYW5uZWwgMyBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOM19EQVRfSU5WICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGMVRYX0NIQU4zX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOM19EQVRfSU5WX01BU0sgICAgICAgIDB4ODAwMCAgLyogQUlGMVRYX0NIQU4zX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOM19EQVRfSU5WX1NISUZUICAgICAgICAgICAxNSAgLyogQUlGMVRYX0NIQU4zX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOM19EQVRfSU5WX1dJRFRIICAgICAgICAgICAgMSAgLyogQUlGMVRYX0NIQU4zX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOM19TUEFDSU5HX01BU0sgICAgICAgIDB4N0UwMCAgLyogQUlGMVRYX0NIQU4zX1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOM19TUEFDSU5HX1NISUZUICAgICAgICAgICAgOSAgLyogQUlGMVRYX0NIQU4zX1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOM19TUEFDSU5HX1dJRFRIICAgICAgICAgICAgNiAgLyogQUlGMVRYX0NIQU4zX1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOM19TTE9UU19NQVNLICAgICAgICAgIDB4MDFDMCAgLyogQUlGMVRYX0NIQU4zX1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOM19TTE9UU19TSElGVCAgICAgICAgICAgICAgNiAgLyogQUlGMVRYX0NIQU4zX1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOM19TTE9UU19XSURUSCAgICAgICAgICAgICAgMyAgLyogQUlGMVRYX0NIQU4zX1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOM19TVEFSVF9TTE9UX01BU0sgICAgIDB4MDAzRiAgLyogQUlGMVRYX0NIQU4zX1NUQVJUX1NMT1QgLSBbNTowXSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4zX1NUQVJUX1NMT1RfU0hJRlQgICAgICAgICAwICAvKiBBSUYxVFhfQ0hBTjNfU1RBUlRfU0xPVCAtIFs1OjBdICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjNfU1RBUlRfU0xPVF9XSURUSCAgICAgICAgIDYgIC8qIEFJRjFUWF9DSEFOM19TVEFSVF9TTE9UIC0gWzU6MF0gKi8KKworLyoKKyAqIFI3ODEgKDB4MzBEKSAtIEFJRjFUWCBDaGFubmVsIDQgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjRfREFUX0lOViAgICAgICAgICAgICAweDgwMDAgIC8qIEFJRjFUWF9DSEFONF9EQVRfSU5WICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjRfREFUX0lOVl9NQVNLICAgICAgICAweDgwMDAgIC8qIEFJRjFUWF9DSEFONF9EQVRfSU5WICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjRfREFUX0lOVl9TSElGVCAgICAgICAgICAgMTUgIC8qIEFJRjFUWF9DSEFONF9EQVRfSU5WICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjRfREFUX0lOVl9XSURUSCAgICAgICAgICAgIDEgIC8qIEFJRjFUWF9DSEFONF9EQVRfSU5WICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjRfU1BBQ0lOR19NQVNLICAgICAgICAweDdFMDAgIC8qIEFJRjFUWF9DSEFONF9TUEFDSU5HIC0gWzE0OjldICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjRfU1BBQ0lOR19TSElGVCAgICAgICAgICAgIDkgIC8qIEFJRjFUWF9DSEFONF9TUEFDSU5HIC0gWzE0OjldICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjRfU1BBQ0lOR19XSURUSCAgICAgICAgICAgIDYgIC8qIEFJRjFUWF9DSEFONF9TUEFDSU5HIC0gWzE0OjldICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjRfU0xPVFNfTUFTSyAgICAgICAgICAweDAxQzAgIC8qIEFJRjFUWF9DSEFONF9TTE9UUyAtIFs4OjZdICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjRfU0xPVFNfU0hJRlQgICAgICAgICAgICAgIDYgIC8qIEFJRjFUWF9DSEFONF9TTE9UUyAtIFs4OjZdICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjRfU0xPVFNfV0lEVEggICAgICAgICAgICAgIDMgIC8qIEFJRjFUWF9DSEFONF9TTE9UUyAtIFs4OjZdICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjRfU1RBUlRfU0xPVF9NQVNLICAgICAweDAwM0YgIC8qIEFJRjFUWF9DSEFONF9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFONF9TVEFSVF9TTE9UX1NISUZUICAgICAgICAgMCAgLyogQUlGMVRYX0NIQU40X1NUQVJUX1NMT1QgLSBbNTowXSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU40X1NUQVJUX1NMT1RfV0lEVEggICAgICAgICA2ICAvKiBBSUYxVFhfQ0hBTjRfU1RBUlRfU0xPVCAtIFs1OjBdICovCisKKy8qCisgKiBSNzgyICgweDMwRSkgLSBBSUYxVFggQ2hhbm5lbCA1IENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU41X0RBVF9JTlYgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUYxVFhfQ0hBTjVfREFUX0lOViAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU41X0RBVF9JTlZfTUFTSyAgICAgICAgMHg4MDAwICAvKiBBSUYxVFhfQ0hBTjVfREFUX0lOViAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU41X0RBVF9JTlZfU0hJRlQgICAgICAgICAgIDE1ICAvKiBBSUYxVFhfQ0hBTjVfREFUX0lOViAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU41X0RBVF9JTlZfV0lEVEggICAgICAgICAgICAxICAvKiBBSUYxVFhfQ0hBTjVfREFUX0lOViAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU41X1NQQUNJTkdfTUFTSyAgICAgICAgMHg3RTAwICAvKiBBSUYxVFhfQ0hBTjVfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU41X1NQQUNJTkdfU0hJRlQgICAgICAgICAgICA5ICAvKiBBSUYxVFhfQ0hBTjVfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU41X1NQQUNJTkdfV0lEVEggICAgICAgICAgICA2ICAvKiBBSUYxVFhfQ0hBTjVfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU41X1NMT1RTX01BU0sgICAgICAgICAgMHgwMUMwICAvKiBBSUYxVFhfQ0hBTjVfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU41X1NMT1RTX1NISUZUICAgICAgICAgICAgICA2ICAvKiBBSUYxVFhfQ0hBTjVfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU41X1NMT1RTX1dJRFRIICAgICAgICAgICAgICAzICAvKiBBSUYxVFhfQ0hBTjVfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU41X1NUQVJUX1NMT1RfTUFTSyAgICAgMHgwMDNGICAvKiBBSUYxVFhfQ0hBTjVfU1RBUlRfU0xPVCAtIFs1OjBdICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjVfU1RBUlRfU0xPVF9TSElGVCAgICAgICAgIDAgIC8qIEFJRjFUWF9DSEFONV9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFONV9TVEFSVF9TTE9UX1dJRFRIICAgICAgICAgNiAgLyogQUlGMVRYX0NIQU41X1NUQVJUX1NMT1QgLSBbNTowXSAqLworCisvKgorICogUjc4MyAoMHgzMEYpIC0gQUlGMVJYIENoYW5uZWwgMCBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMF9EQVRfSU5WICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGMVJYX0NIQU4wX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMF9EQVRfSU5WX01BU0sgICAgICAgIDB4ODAwMCAgLyogQUlGMVJYX0NIQU4wX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMF9EQVRfSU5WX1NISUZUICAgICAgICAgICAxNSAgLyogQUlGMVJYX0NIQU4wX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMF9EQVRfSU5WX1dJRFRIICAgICAgICAgICAgMSAgLyogQUlGMVJYX0NIQU4wX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMF9TUEFDSU5HX01BU0sgICAgICAgIDB4N0UwMCAgLyogQUlGMVJYX0NIQU4wX1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMF9TUEFDSU5HX1NISUZUICAgICAgICAgICAgOSAgLyogQUlGMVJYX0NIQU4wX1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMF9TUEFDSU5HX1dJRFRIICAgICAgICAgICAgNiAgLyogQUlGMVJYX0NIQU4wX1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMF9TTE9UU19NQVNLICAgICAgICAgIDB4MDFDMCAgLyogQUlGMVJYX0NIQU4wX1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMF9TTE9UU19TSElGVCAgICAgICAgICAgICAgNiAgLyogQUlGMVJYX0NIQU4wX1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMF9TTE9UU19XSURUSCAgICAgICAgICAgICAgMyAgLyogQUlGMVJYX0NIQU4wX1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMF9TVEFSVF9TTE9UX01BU0sgICAgIDB4MDAzRiAgLyogQUlGMVJYX0NIQU4wX1NUQVJUX1NMT1QgLSBbNTowXSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4wX1NUQVJUX1NMT1RfU0hJRlQgICAgICAgICAwICAvKiBBSUYxUlhfQ0hBTjBfU1RBUlRfU0xPVCAtIFs1OjBdICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjBfU1RBUlRfU0xPVF9XSURUSCAgICAgICAgIDYgIC8qIEFJRjFSWF9DSEFOMF9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KKworLyoKKyAqIFI3ODQgKDB4MzEwKSAtIEFJRjFSWCBDaGFubmVsIDEgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjFfREFUX0lOViAgICAgICAgICAgICAweDgwMDAgIC8qIEFJRjFSWF9DSEFOMV9EQVRfSU5WICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjFfREFUX0lOVl9NQVNLICAgICAgICAweDgwMDAgIC8qIEFJRjFSWF9DSEFOMV9EQVRfSU5WICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjFfREFUX0lOVl9TSElGVCAgICAgICAgICAgMTUgIC8qIEFJRjFSWF9DSEFOMV9EQVRfSU5WICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjFfREFUX0lOVl9XSURUSCAgICAgICAgICAgIDEgIC8qIEFJRjFSWF9DSEFOMV9EQVRfSU5WICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjFfU1BBQ0lOR19NQVNLICAgICAgICAweDdFMDAgIC8qIEFJRjFSWF9DSEFOMV9TUEFDSU5HIC0gWzE0OjldICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjFfU1BBQ0lOR19TSElGVCAgICAgICAgICAgIDkgIC8qIEFJRjFSWF9DSEFOMV9TUEFDSU5HIC0gWzE0OjldICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjFfU1BBQ0lOR19XSURUSCAgICAgICAgICAgIDYgIC8qIEFJRjFSWF9DSEFOMV9TUEFDSU5HIC0gWzE0OjldICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjFfU0xPVFNfTUFTSyAgICAgICAgICAweDAxQzAgIC8qIEFJRjFSWF9DSEFOMV9TTE9UUyAtIFs4OjZdICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjFfU0xPVFNfU0hJRlQgICAgICAgICAgICAgIDYgIC8qIEFJRjFSWF9DSEFOMV9TTE9UUyAtIFs4OjZdICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjFfU0xPVFNfV0lEVEggICAgICAgICAgICAgIDMgIC8qIEFJRjFSWF9DSEFOMV9TTE9UUyAtIFs4OjZdICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjFfU1RBUlRfU0xPVF9NQVNLICAgICAweDAwM0YgIC8qIEFJRjFSWF9DSEFOMV9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMV9TVEFSVF9TTE9UX1NISUZUICAgICAgICAgMCAgLyogQUlGMVJYX0NIQU4xX1NUQVJUX1NMT1QgLSBbNTowXSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4xX1NUQVJUX1NMT1RfV0lEVEggICAgICAgICA2ICAvKiBBSUYxUlhfQ0hBTjFfU1RBUlRfU0xPVCAtIFs1OjBdICovCisKKy8qCisgKiBSNzg1ICgweDMxMSkgLSBBSUYxUlggQ2hhbm5lbCAyIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4yX0RBVF9JTlYgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUYxUlhfQ0hBTjJfREFUX0lOViAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4yX0RBVF9JTlZfTUFTSyAgICAgICAgMHg4MDAwICAvKiBBSUYxUlhfQ0hBTjJfREFUX0lOViAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4yX0RBVF9JTlZfU0hJRlQgICAgICAgICAgIDE1ICAvKiBBSUYxUlhfQ0hBTjJfREFUX0lOViAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4yX0RBVF9JTlZfV0lEVEggICAgICAgICAgICAxICAvKiBBSUYxUlhfQ0hBTjJfREFUX0lOViAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4yX1NQQUNJTkdfTUFTSyAgICAgICAgMHg3RTAwICAvKiBBSUYxUlhfQ0hBTjJfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4yX1NQQUNJTkdfU0hJRlQgICAgICAgICAgICA5ICAvKiBBSUYxUlhfQ0hBTjJfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4yX1NQQUNJTkdfV0lEVEggICAgICAgICAgICA2ICAvKiBBSUYxUlhfQ0hBTjJfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4yX1NMT1RTX01BU0sgICAgICAgICAgMHgwMUMwICAvKiBBSUYxUlhfQ0hBTjJfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4yX1NMT1RTX1NISUZUICAgICAgICAgICAgICA2ICAvKiBBSUYxUlhfQ0hBTjJfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4yX1NMT1RTX1dJRFRIICAgICAgICAgICAgICAzICAvKiBBSUYxUlhfQ0hBTjJfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4yX1NUQVJUX1NMT1RfTUFTSyAgICAgMHgwMDNGICAvKiBBSUYxUlhfQ0hBTjJfU1RBUlRfU0xPVCAtIFs1OjBdICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjJfU1RBUlRfU0xPVF9TSElGVCAgICAgICAgIDAgIC8qIEFJRjFSWF9DSEFOMl9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMl9TVEFSVF9TTE9UX1dJRFRIICAgICAgICAgNiAgLyogQUlGMVJYX0NIQU4yX1NUQVJUX1NMT1QgLSBbNTowXSAqLworCisvKgorICogUjc4NiAoMHgzMTIpIC0gQUlGMVJYIENoYW5uZWwgMyBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOM19EQVRfSU5WICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGMVJYX0NIQU4zX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOM19EQVRfSU5WX01BU0sgICAgICAgIDB4ODAwMCAgLyogQUlGMVJYX0NIQU4zX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOM19EQVRfSU5WX1NISUZUICAgICAgICAgICAxNSAgLyogQUlGMVJYX0NIQU4zX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOM19EQVRfSU5WX1dJRFRIICAgICAgICAgICAgMSAgLyogQUlGMVJYX0NIQU4zX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOM19TUEFDSU5HX01BU0sgICAgICAgIDB4N0UwMCAgLyogQUlGMVJYX0NIQU4zX1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOM19TUEFDSU5HX1NISUZUICAgICAgICAgICAgOSAgLyogQUlGMVJYX0NIQU4zX1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOM19TUEFDSU5HX1dJRFRIICAgICAgICAgICAgNiAgLyogQUlGMVJYX0NIQU4zX1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOM19TTE9UU19NQVNLICAgICAgICAgIDB4MDFDMCAgLyogQUlGMVJYX0NIQU4zX1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOM19TTE9UU19TSElGVCAgICAgICAgICAgICAgNiAgLyogQUlGMVJYX0NIQU4zX1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOM19TTE9UU19XSURUSCAgICAgICAgICAgICAgMyAgLyogQUlGMVJYX0NIQU4zX1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOM19TVEFSVF9TTE9UX01BU0sgICAgIDB4MDAzRiAgLyogQUlGMVJYX0NIQU4zX1NUQVJUX1NMT1QgLSBbNTowXSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4zX1NUQVJUX1NMT1RfU0hJRlQgICAgICAgICAwICAvKiBBSUYxUlhfQ0hBTjNfU1RBUlRfU0xPVCAtIFs1OjBdICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjNfU1RBUlRfU0xPVF9XSURUSCAgICAgICAgIDYgIC8qIEFJRjFSWF9DSEFOM19TVEFSVF9TTE9UIC0gWzU6MF0gKi8KKworLyoKKyAqIFI3ODcgKDB4MzEzKSAtIEFJRjFSWCBDaGFubmVsIDQgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjRfREFUX0lOViAgICAgICAgICAgICAweDgwMDAgIC8qIEFJRjFSWF9DSEFONF9EQVRfSU5WICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjRfREFUX0lOVl9NQVNLICAgICAgICAweDgwMDAgIC8qIEFJRjFSWF9DSEFONF9EQVRfSU5WICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjRfREFUX0lOVl9TSElGVCAgICAgICAgICAgMTUgIC8qIEFJRjFSWF9DSEFONF9EQVRfSU5WICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjRfREFUX0lOVl9XSURUSCAgICAgICAgICAgIDEgIC8qIEFJRjFSWF9DSEFONF9EQVRfSU5WICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjRfU1BBQ0lOR19NQVNLICAgICAgICAweDdFMDAgIC8qIEFJRjFSWF9DSEFONF9TUEFDSU5HIC0gWzE0OjldICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjRfU1BBQ0lOR19TSElGVCAgICAgICAgICAgIDkgIC8qIEFJRjFSWF9DSEFONF9TUEFDSU5HIC0gWzE0OjldICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjRfU1BBQ0lOR19XSURUSCAgICAgICAgICAgIDYgIC8qIEFJRjFSWF9DSEFONF9TUEFDSU5HIC0gWzE0OjldICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjRfU0xPVFNfTUFTSyAgICAgICAgICAweDAxQzAgIC8qIEFJRjFSWF9DSEFONF9TTE9UUyAtIFs4OjZdICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjRfU0xPVFNfU0hJRlQgICAgICAgICAgICAgIDYgIC8qIEFJRjFSWF9DSEFONF9TTE9UUyAtIFs4OjZdICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjRfU0xPVFNfV0lEVEggICAgICAgICAgICAgIDMgIC8qIEFJRjFSWF9DSEFONF9TTE9UUyAtIFs4OjZdICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjRfU1RBUlRfU0xPVF9NQVNLICAgICAweDAwM0YgIC8qIEFJRjFSWF9DSEFONF9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFONF9TVEFSVF9TTE9UX1NISUZUICAgICAgICAgMCAgLyogQUlGMVJYX0NIQU40X1NUQVJUX1NMT1QgLSBbNTowXSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU40X1NUQVJUX1NMT1RfV0lEVEggICAgICAgICA2ICAvKiBBSUYxUlhfQ0hBTjRfU1RBUlRfU0xPVCAtIFs1OjBdICovCisKKy8qCisgKiBSNzg4ICgweDMxNCkgLSBBSUYxUlggQ2hhbm5lbCA1IENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU41X0RBVF9JTlYgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUYxUlhfQ0hBTjVfREFUX0lOViAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU41X0RBVF9JTlZfTUFTSyAgICAgICAgMHg4MDAwICAvKiBBSUYxUlhfQ0hBTjVfREFUX0lOViAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU41X0RBVF9JTlZfU0hJRlQgICAgICAgICAgIDE1ICAvKiBBSUYxUlhfQ0hBTjVfREFUX0lOViAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU41X0RBVF9JTlZfV0lEVEggICAgICAgICAgICAxICAvKiBBSUYxUlhfQ0hBTjVfREFUX0lOViAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU41X1NQQUNJTkdfTUFTSyAgICAgICAgMHg3RTAwICAvKiBBSUYxUlhfQ0hBTjVfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU41X1NQQUNJTkdfU0hJRlQgICAgICAgICAgICA5ICAvKiBBSUYxUlhfQ0hBTjVfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU41X1NQQUNJTkdfV0lEVEggICAgICAgICAgICA2ICAvKiBBSUYxUlhfQ0hBTjVfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU41X1NMT1RTX01BU0sgICAgICAgICAgMHgwMUMwICAvKiBBSUYxUlhfQ0hBTjVfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU41X1NMT1RTX1NISUZUICAgICAgICAgICAgICA2ICAvKiBBSUYxUlhfQ0hBTjVfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU41X1NMT1RTX1dJRFRIICAgICAgICAgICAgICAzICAvKiBBSUYxUlhfQ0hBTjVfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU41X1NUQVJUX1NMT1RfTUFTSyAgICAgMHgwMDNGICAvKiBBSUYxUlhfQ0hBTjVfU1RBUlRfU0xPVCAtIFs1OjBdICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjVfU1RBUlRfU0xPVF9TSElGVCAgICAgICAgIDAgIC8qIEFJRjFSWF9DSEFONV9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFONV9TVEFSVF9TTE9UX1dJRFRIICAgICAgICAgNiAgLyogQUlGMVJYX0NIQU41X1NUQVJUX1NMT1QgLSBbNTowXSAqLworCisvKgorICogUjc4OSAoMHgzMTUpIC0gQUlGMVJYIE1vbm8gQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjRfTU9OT19NT0RFICAgICAgICAgICAweDAwMDQgIC8qIEFJRjFSWF9DSEFONF9NT05PX01PREUgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFONF9NT05PX01PREVfTUFTSyAgICAgIDB4MDAwNCAgLyogQUlGMVJYX0NIQU40X01PTk9fTU9ERSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU40X01PTk9fTU9ERV9TSElGVCAgICAgICAgICAyICAvKiBBSUYxUlhfQ0hBTjRfTU9OT19NT0RFICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjRfTU9OT19NT0RFX1dJRFRIICAgICAgICAgIDEgIC8qIEFJRjFSWF9DSEFONF9NT05PX01PREUgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMl9NT05PX01PREUgICAgICAgICAgIDB4MDAwMiAgLyogQUlGMVJYX0NIQU4yX01PTk9fTU9ERSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4yX01PTk9fTU9ERV9NQVNLICAgICAgMHgwMDAyICAvKiBBSUYxUlhfQ0hBTjJfTU9OT19NT0RFICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjJfTU9OT19NT0RFX1NISUZUICAgICAgICAgIDEgIC8qIEFJRjFSWF9DSEFOMl9NT05PX01PREUgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMl9NT05PX01PREVfV0lEVEggICAgICAgICAgMSAgLyogQUlGMVJYX0NIQU4yX01PTk9fTU9ERSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4wX01PTk9fTU9ERSAgICAgICAgICAgMHgwMDAxICAvKiBBSUYxUlhfQ0hBTjBfTU9OT19NT0RFICovCisjZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjBfTU9OT19NT0RFX01BU0sgICAgICAweDAwMDEgIC8qIEFJRjFSWF9DSEFOMF9NT05PX01PREUgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMF9NT05PX01PREVfU0hJRlQgICAgICAgICAgMCAgLyogQUlGMVJYX0NIQU4wX01PTk9fTU9ERSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4wX01PTk9fTU9ERV9XSURUSCAgICAgICAgICAxICAvKiBBSUYxUlhfQ0hBTjBfTU9OT19NT0RFICovCisKKy8qCisgKiBSNzk0ICgweDMxQSkgLSBBSUYxVFggVGVzdAorICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFg0NV9ESVRIRVJfRU5BICAgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjFUWDQ1X0RJVEhFUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWDQ1X0RJVEhFUl9FTkFfTUFTSyAgICAgICAgIDB4MDAwNCAgLyogQUlGMVRYNDVfRElUSEVSX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYNDVfRElUSEVSX0VOQV9TSElGVCAgICAgICAgICAgICAyICAvKiBBSUYxVFg0NV9ESVRIRVJfRU5BICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFg0NV9ESVRIRVJfRU5BX1dJRFRIICAgICAgICAgICAgIDEgIC8qIEFJRjFUWDQ1X0RJVEhFUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWDIzX0RJVEhFUl9FTkEgICAgICAgICAgICAgIDB4MDAwMiAgLyogQUlGMVRYMjNfRElUSEVSX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYMjNfRElUSEVSX0VOQV9NQVNLICAgICAgICAgMHgwMDAyICAvKiBBSUYxVFgyM19ESVRIRVJfRU5BICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFgyM19ESVRIRVJfRU5BX1NISUZUICAgICAgICAgICAgIDEgIC8qIEFJRjFUWDIzX0RJVEhFUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWDIzX0RJVEhFUl9FTkFfV0lEVEggICAgICAgICAgICAgMSAgLyogQUlGMVRYMjNfRElUSEVSX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYMDFfRElUSEVSX0VOQSAgICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYxVFgwMV9ESVRIRVJfRU5BICovCisjZGVmaW5lIFdNODkxNV9BSUYxVFgwMV9ESVRIRVJfRU5BX01BU0sgICAgICAgICAweDAwMDEgIC8qIEFJRjFUWDAxX0RJVEhFUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FJRjFUWDAxX0RJVEhFUl9FTkFfU0hJRlQgICAgICAgICAgICAgMCAgLyogQUlGMVRYMDFfRElUSEVSX0VOQSAqLworI2RlZmluZSBXTTg5MTVfQUlGMVRYMDFfRElUSEVSX0VOQV9XSURUSCAgICAgICAgICAgICAxICAvKiBBSUYxVFgwMV9ESVRIRVJfRU5BICovCisKKy8qCisgKiBSODAwICgweDMyMCkgLSBBSUYyIENvbnRyb2wKKyAqLworI2RlZmluZSBXTTg5MTVfQUlGMl9UUkkgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYyX1RSSSAqLworI2RlZmluZSBXTTg5MTVfQUlGMl9UUklfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYyX1RSSSAqLworI2RlZmluZSBXTTg5MTVfQUlGMl9UUklfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBBSUYyX1RSSSAqLworI2RlZmluZSBXTTg5MTVfQUlGMl9UUklfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYyX1RSSSAqLworI2RlZmluZSBXTTg5MTVfQUlGMl9GTVRfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAzICAvKiBBSUYyX0ZNVCAtIFsxOjBdICovCisjZGVmaW5lIFdNODkxNV9BSUYyX0ZNVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjJfRk1UIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjJfRk1UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogQUlGMl9GTVQgLSBbMTowXSAqLworCisvKgorICogUjgwMSAoMHgzMjEpIC0gQUlGMiBCQ0xLCisgKi8KKyNkZWZpbmUgV004OTE1X0FJRjJfQkNMS19JTlYgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogQUlGMl9CQ0xLX0lOViAqLworI2RlZmluZSBXTTg5MTVfQUlGMl9CQ0xLX0lOVl9NQVNLICAgICAgICAgICAgICAgMHgwNDAwICAvKiBBSUYyX0JDTEtfSU5WICovCisjZGVmaW5lIFdNODkxNV9BSUYyX0JDTEtfSU5WX1NISUZUICAgICAgICAgICAgICAgICAgMTAgIC8qIEFJRjJfQkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTE1X0FJRjJfQkNMS19JTlZfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMl9CQ0xLX0lOViAqLworI2RlZmluZSBXTTg5MTVfQUlGMl9CQ0xLX0ZSQyAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBBSUYyX0JDTEtfRlJDICovCisjZGVmaW5lIFdNODkxNV9BSUYyX0JDTEtfRlJDX01BU0sgICAgICAgICAgICAgICAweDAyMDAgIC8qIEFJRjJfQkNMS19GUkMgKi8KKyNkZWZpbmUgV004OTE1X0FJRjJfQkNMS19GUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgOSAgLyogQUlGMl9CQ0xLX0ZSQyAqLworI2RlZmluZSBXTTg5MTVfQUlGMl9CQ0xLX0ZSQ19XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYyX0JDTEtfRlJDICovCisjZGVmaW5lIFdNODkxNV9BSUYyX0JDTEtfTVNUUiAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjJfQkNMS19NU1RSICovCisjZGVmaW5lIFdNODkxNV9BSUYyX0JDTEtfTVNUUl9NQVNLICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjJfQkNMS19NU1RSICovCisjZGVmaW5lIFdNODkxNV9BSUYyX0JDTEtfTVNUUl9TSElGVCAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjJfQkNMS19NU1RSICovCisjZGVmaW5lIFdNODkxNV9BSUYyX0JDTEtfTVNUUl9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJfQkNMS19NU1RSICovCisjZGVmaW5lIFdNODkxNV9BSUYyX0JDTEtfRElWX01BU0sgICAgICAgICAgICAgICAweDAwMEYgIC8qIEFJRjJfQkNMS19ESVYgLSBbMzowXSAqLworI2RlZmluZSBXTTg5MTVfQUlGMl9CQ0xLX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAwICAvKiBBSUYyX0JDTEtfRElWIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjJfQkNMS19ESVZfV0lEVEggICAgICAgICAgICAgICAgICAgNCAgLyogQUlGMl9CQ0xLX0RJViAtIFszOjBdICovCisKKy8qCisgKiBSODAyICgweDMyMikgLSBBSUYyIFRYIExSQ0xLKDEpCisgKi8KKyNkZWZpbmUgV004OTE1X0FJRjJUWF9SQVRFX01BU0sgICAgICAgICAgICAgICAgIDB4MDdGRiAgLyogQUlGMlRYX1JBVEUgLSBbMTA6MF0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjJUWF9SQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogQUlGMlRYX1JBVEUgLSBbMTA6MF0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjJUWF9SQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAxMSAgLyogQUlGMlRYX1JBVEUgLSBbMTA6MF0gKi8KKworLyoKKyAqIFI4MDMgKDB4MzIzKSAtIEFJRjIgVFggTFJDTEsoMikKKyAqLworI2RlZmluZSBXTTg5MTVfQUlGMlRYX0xSQ0xLX01PREUgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBBSUYyVFhfTFJDTEtfTU9ERSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlRYX0xSQ0xLX01PREVfTUFTSyAgICAgICAgICAgMHgwMDA4ICAvKiBBSUYyVFhfTFJDTEtfTU9ERSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlRYX0xSQ0xLX01PREVfU0hJRlQgICAgICAgICAgICAgICAzICAvKiBBSUYyVFhfTFJDTEtfTU9ERSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlRYX0xSQ0xLX01PREVfV0lEVEggICAgICAgICAgICAgICAxICAvKiBBSUYyVFhfTFJDTEtfTU9ERSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlRYX0xSQ0xLX0lOViAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYyVFhfTFJDTEtfSU5WICovCisjZGVmaW5lIFdNODkxNV9BSUYyVFhfTFJDTEtfSU5WX01BU0sgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjJUWF9MUkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTE1X0FJRjJUWF9MUkNMS19JTlZfU0hJRlQgICAgICAgICAgICAgICAgMiAgLyogQUlGMlRYX0xSQ0xLX0lOViAqLworI2RlZmluZSBXTTg5MTVfQUlGMlRYX0xSQ0xLX0lOVl9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYyVFhfTFJDTEtfSU5WICovCisjZGVmaW5lIFdNODkxNV9BSUYyVFhfTFJDTEtfRlJDICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjJUWF9MUkNMS19GUkMgKi8KKyNkZWZpbmUgV004OTE1X0FJRjJUWF9MUkNMS19GUkNfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogQUlGMlRYX0xSQ0xLX0ZSQyAqLworI2RlZmluZSBXTTg5MTVfQUlGMlRYX0xSQ0xLX0ZSQ19TSElGVCAgICAgICAgICAgICAgICAxICAvKiBBSUYyVFhfTFJDTEtfRlJDICovCisjZGVmaW5lIFdNODkxNV9BSUYyVFhfTFJDTEtfRlJDX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJUWF9MUkNMS19GUkMgKi8KKyNkZWZpbmUgV004OTE1X0FJRjJUWF9MUkNMS19NU1RSICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMlRYX0xSQ0xLX01TVFIgKi8KKyNkZWZpbmUgV004OTE1X0FJRjJUWF9MUkNMS19NU1RSX01BU0sgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMlRYX0xSQ0xLX01TVFIgKi8KKyNkZWZpbmUgV004OTE1X0FJRjJUWF9MUkNMS19NU1RSX1NISUZUICAgICAgICAgICAgICAgMCAgLyogQUlGMlRYX0xSQ0xLX01TVFIgKi8KKyNkZWZpbmUgV004OTE1X0FJRjJUWF9MUkNMS19NU1RSX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogQUlGMlRYX0xSQ0xLX01TVFIgKi8KKworLyoKKyAqIFI4MDQgKDB4MzI0KSAtIEFJRjIgUlggTFJDTEsoMSkKKyAqLworI2RlZmluZSBXTTg5MTVfQUlGMlJYX1JBVEVfTUFTSyAgICAgICAgICAgICAgICAgMHgwN0ZGICAvKiBBSUYyUlhfUkFURSAtIFsxMDowXSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlJYX1JBVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBBSUYyUlhfUkFURSAtIFsxMDowXSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlJYX1JBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgIDExICAvKiBBSUYyUlhfUkFURSAtIFsxMDowXSAqLworCisvKgorICogUjgwNSAoMHgzMjUpIC0gQUlGMiBSWCBMUkNMSygyKQorICovCisjZGVmaW5lIFdNODkxNV9BSUYyUlhfTFJDTEtfSU5WICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjJSWF9MUkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTE1X0FJRjJSWF9MUkNMS19JTlZfTUFTSyAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMlJYX0xSQ0xLX0lOViAqLworI2RlZmluZSBXTTg5MTVfQUlGMlJYX0xSQ0xLX0lOVl9TSElGVCAgICAgICAgICAgICAgICAyICAvKiBBSUYyUlhfTFJDTEtfSU5WICovCisjZGVmaW5lIFdNODkxNV9BSUYyUlhfTFJDTEtfSU5WX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJSWF9MUkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTE1X0FJRjJSWF9MUkNMS19GUkMgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQUlGMlJYX0xSQ0xLX0ZSQyAqLworI2RlZmluZSBXTTg5MTVfQUlGMlJYX0xSQ0xLX0ZSQ19NQVNLICAgICAgICAgICAgMHgwMDAyICAvKiBBSUYyUlhfTFJDTEtfRlJDICovCisjZGVmaW5lIFdNODkxNV9BSUYyUlhfTFJDTEtfRlJDX1NISUZUICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJSWF9MUkNMS19GUkMgKi8KKyNkZWZpbmUgV004OTE1X0FJRjJSWF9MUkNMS19GUkNfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMlJYX0xSQ0xLX0ZSQyAqLworI2RlZmluZSBXTTg5MTVfQUlGMlJYX0xSQ0xLX01TVFIgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYyUlhfTFJDTEtfTVNUUiAqLworI2RlZmluZSBXTTg5MTVfQUlGMlJYX0xSQ0xLX01TVFJfTUFTSyAgICAgICAgICAgMHgwMDAxICAvKiBBSUYyUlhfTFJDTEtfTVNUUiAqLworI2RlZmluZSBXTTg5MTVfQUlGMlJYX0xSQ0xLX01TVFJfU0hJRlQgICAgICAgICAgICAgICAwICAvKiBBSUYyUlhfTFJDTEtfTVNUUiAqLworI2RlZmluZSBXTTg5MTVfQUlGMlJYX0xSQ0xLX01TVFJfV0lEVEggICAgICAgICAgICAgICAxICAvKiBBSUYyUlhfTFJDTEtfTVNUUiAqLworCisvKgorICogUjgwNiAoMHgzMjYpIC0gQUlGMlRYIERhdGEgQ29uZmlndXJhdGlvbiAoMSkKKyAqLworI2RlZmluZSBXTTg5MTVfQUlGMlRYX1dMX01BU0sgICAgICAgICAgICAgICAgICAgMHhGRjAwICAvKiBBSUYyVFhfV0wgLSBbMTU6OF0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjJUWF9XTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMlRYX1dMIC0gWzE1OjhdICovCisjZGVmaW5lIFdNODkxNV9BSUYyVFhfV0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjJUWF9XTCAtIFsxNTo4XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlRYX1NMT1RfTEVOX01BU0sgICAgICAgICAgICAgMHgwMEZGICAvKiBBSUYyVFhfU0xPVF9MRU4gLSBbNzowXSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlRYX1NMT1RfTEVOX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBBSUYyVFhfU0xPVF9MRU4gLSBbNzowXSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlRYX1NMT1RfTEVOX1dJRFRIICAgICAgICAgICAgICAgICA4ICAvKiBBSUYyVFhfU0xPVF9MRU4gLSBbNzowXSAqLworCisvKgorICogUjgwNyAoMHgzMjcpIC0gQUlGMlRYIERhdGEgQ29uZmlndXJhdGlvbiAoMikKKyAqLworI2RlZmluZSBXTTg5MTVfQUlGMlRYX0RBVF9UUkkgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYyVFhfREFUX1RSSSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlRYX0RBVF9UUklfTUFTSyAgICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYyVFhfREFUX1RSSSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlRYX0RBVF9UUklfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBBSUYyVFhfREFUX1RSSSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlRYX0RBVF9UUklfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBBSUYyVFhfREFUX1RSSSAqLworCisvKgorICogUjgwOCAoMHgzMjgpIC0gQUlGMlJYIERhdGEgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIFdNODkxNV9BSUYyUlhfV0xfTUFTSyAgICAgICAgICAgICAgICAgICAweEZGMDAgIC8qIEFJRjJSWF9XTCAtIFsxNTo4XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlJYX1dMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBBSUYyUlhfV0wgLSBbMTU6OF0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjJSWF9XTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMlJYX1dMIC0gWzE1OjhdICovCisjZGVmaW5lIFdNODkxNV9BSUYyUlhfU0xPVF9MRU5fTUFTSyAgICAgICAgICAgICAweDAwRkYgIC8qIEFJRjJSWF9TTE9UX0xFTiAtIFs3OjBdICovCisjZGVmaW5lIFdNODkxNV9BSUYyUlhfU0xPVF9MRU5fU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjJSWF9TTE9UX0xFTiAtIFs3OjBdICovCisjZGVmaW5lIFdNODkxNV9BSUYyUlhfU0xPVF9MRU5fV0lEVEggICAgICAgICAgICAgICAgIDggIC8qIEFJRjJSWF9TTE9UX0xFTiAtIFs3OjBdICovCisKKy8qCisgKiBSODA5ICgweDMyOSkgLSBBSUYyVFggQ2hhbm5lbCAwIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBXTTg5MTVfQUlGMlRYX0NIQU4wX0RBVF9JTlYgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUYyVFhfQ0hBTjBfREFUX0lOViAqLworI2RlZmluZSBXTTg5MTVfQUlGMlRYX0NIQU4wX0RBVF9JTlZfTUFTSyAgICAgICAgMHg4MDAwICAvKiBBSUYyVFhfQ0hBTjBfREFUX0lOViAqLworI2RlZmluZSBXTTg5MTVfQUlGMlRYX0NIQU4wX0RBVF9JTlZfU0hJRlQgICAgICAgICAgIDE1ICAvKiBBSUYyVFhfQ0hBTjBfREFUX0lOViAqLworI2RlZmluZSBXTTg5MTVfQUlGMlRYX0NIQU4wX0RBVF9JTlZfV0lEVEggICAgICAgICAgICAxICAvKiBBSUYyVFhfQ0hBTjBfREFUX0lOViAqLworI2RlZmluZSBXTTg5MTVfQUlGMlRYX0NIQU4wX1NQQUNJTkdfTUFTSyAgICAgICAgMHg3RTAwICAvKiBBSUYyVFhfQ0hBTjBfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlRYX0NIQU4wX1NQQUNJTkdfU0hJRlQgICAgICAgICAgICA5ICAvKiBBSUYyVFhfQ0hBTjBfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlRYX0NIQU4wX1NQQUNJTkdfV0lEVEggICAgICAgICAgICA2ICAvKiBBSUYyVFhfQ0hBTjBfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlRYX0NIQU4wX1NMT1RTX01BU0sgICAgICAgICAgMHgwMUMwICAvKiBBSUYyVFhfQ0hBTjBfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlRYX0NIQU4wX1NMT1RTX1NISUZUICAgICAgICAgICAgICA2ICAvKiBBSUYyVFhfQ0hBTjBfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlRYX0NIQU4wX1NMT1RTX1dJRFRIICAgICAgICAgICAgICAzICAvKiBBSUYyVFhfQ0hBTjBfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlRYX0NIQU4wX1NUQVJUX1NMT1RfTUFTSyAgICAgMHgwMDNGICAvKiBBSUYyVFhfQ0hBTjBfU1RBUlRfU0xPVCAtIFs1OjBdICovCisjZGVmaW5lIFdNODkxNV9BSUYyVFhfQ0hBTjBfU1RBUlRfU0xPVF9TSElGVCAgICAgICAgIDAgIC8qIEFJRjJUWF9DSEFOMF9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjJUWF9DSEFOMF9TVEFSVF9TTE9UX1dJRFRIICAgICAgICAgNiAgLyogQUlGMlRYX0NIQU4wX1NUQVJUX1NMT1QgLSBbNTowXSAqLworCisvKgorICogUjgxMCAoMHgzMkEpIC0gQUlGMlRYIENoYW5uZWwgMSBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgV004OTE1X0FJRjJUWF9DSEFOMV9EQVRfSU5WICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGMlRYX0NIQU4xX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTE1X0FJRjJUWF9DSEFOMV9EQVRfSU5WX01BU0sgICAgICAgIDB4ODAwMCAgLyogQUlGMlRYX0NIQU4xX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTE1X0FJRjJUWF9DSEFOMV9EQVRfSU5WX1NISUZUICAgICAgICAgICAxNSAgLyogQUlGMlRYX0NIQU4xX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTE1X0FJRjJUWF9DSEFOMV9EQVRfSU5WX1dJRFRIICAgICAgICAgICAgMSAgLyogQUlGMlRYX0NIQU4xX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTE1X0FJRjJUWF9DSEFOMV9TUEFDSU5HX01BU0sgICAgICAgIDB4N0UwMCAgLyogQUlGMlRYX0NIQU4xX1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjJUWF9DSEFOMV9TUEFDSU5HX1NISUZUICAgICAgICAgICAgOSAgLyogQUlGMlRYX0NIQU4xX1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjJUWF9DSEFOMV9TUEFDSU5HX1dJRFRIICAgICAgICAgICAgNiAgLyogQUlGMlRYX0NIQU4xX1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjJUWF9DSEFOMV9TTE9UU19NQVNLICAgICAgICAgIDB4MDFDMCAgLyogQUlGMlRYX0NIQU4xX1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjJUWF9DSEFOMV9TTE9UU19TSElGVCAgICAgICAgICAgICAgNiAgLyogQUlGMlRYX0NIQU4xX1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjJUWF9DSEFOMV9TTE9UU19XSURUSCAgICAgICAgICAgICAgMyAgLyogQUlGMlRYX0NIQU4xX1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjJUWF9DSEFOMV9TVEFSVF9TTE9UX01BU0sgICAgIDB4MDAzRiAgLyogQUlGMlRYX0NIQU4xX1NUQVJUX1NMT1QgLSBbNTowXSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlRYX0NIQU4xX1NUQVJUX1NMT1RfU0hJRlQgICAgICAgICAwICAvKiBBSUYyVFhfQ0hBTjFfU1RBUlRfU0xPVCAtIFs1OjBdICovCisjZGVmaW5lIFdNODkxNV9BSUYyVFhfQ0hBTjFfU1RBUlRfU0xPVF9XSURUSCAgICAgICAgIDYgIC8qIEFJRjJUWF9DSEFOMV9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KKworLyoKKyAqIFI4MTEgKDB4MzJCKSAtIEFJRjJSWCBDaGFubmVsIDAgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIFdNODkxNV9BSUYyUlhfQ0hBTjBfREFUX0lOViAgICAgICAgICAgICAweDgwMDAgIC8qIEFJRjJSWF9DSEFOMF9EQVRfSU5WICovCisjZGVmaW5lIFdNODkxNV9BSUYyUlhfQ0hBTjBfREFUX0lOVl9NQVNLICAgICAgICAweDgwMDAgIC8qIEFJRjJSWF9DSEFOMF9EQVRfSU5WICovCisjZGVmaW5lIFdNODkxNV9BSUYyUlhfQ0hBTjBfREFUX0lOVl9TSElGVCAgICAgICAgICAgMTUgIC8qIEFJRjJSWF9DSEFOMF9EQVRfSU5WICovCisjZGVmaW5lIFdNODkxNV9BSUYyUlhfQ0hBTjBfREFUX0lOVl9XSURUSCAgICAgICAgICAgIDEgIC8qIEFJRjJSWF9DSEFOMF9EQVRfSU5WICovCisjZGVmaW5lIFdNODkxNV9BSUYyUlhfQ0hBTjBfU1BBQ0lOR19NQVNLICAgICAgICAweDdFMDAgIC8qIEFJRjJSWF9DSEFOMF9TUEFDSU5HIC0gWzE0OjldICovCisjZGVmaW5lIFdNODkxNV9BSUYyUlhfQ0hBTjBfU1BBQ0lOR19TSElGVCAgICAgICAgICAgIDkgIC8qIEFJRjJSWF9DSEFOMF9TUEFDSU5HIC0gWzE0OjldICovCisjZGVmaW5lIFdNODkxNV9BSUYyUlhfQ0hBTjBfU1BBQ0lOR19XSURUSCAgICAgICAgICAgIDYgIC8qIEFJRjJSWF9DSEFOMF9TUEFDSU5HIC0gWzE0OjldICovCisjZGVmaW5lIFdNODkxNV9BSUYyUlhfQ0hBTjBfU0xPVFNfTUFTSyAgICAgICAgICAweDAxQzAgIC8qIEFJRjJSWF9DSEFOMF9TTE9UUyAtIFs4OjZdICovCisjZGVmaW5lIFdNODkxNV9BSUYyUlhfQ0hBTjBfU0xPVFNfU0hJRlQgICAgICAgICAgICAgIDYgIC8qIEFJRjJSWF9DSEFOMF9TTE9UUyAtIFs4OjZdICovCisjZGVmaW5lIFdNODkxNV9BSUYyUlhfQ0hBTjBfU0xPVFNfV0lEVEggICAgICAgICAgICAgIDMgIC8qIEFJRjJSWF9DSEFOMF9TTE9UUyAtIFs4OjZdICovCisjZGVmaW5lIFdNODkxNV9BSUYyUlhfQ0hBTjBfU1RBUlRfU0xPVF9NQVNLICAgICAweDAwM0YgIC8qIEFJRjJSWF9DSEFOMF9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjJSWF9DSEFOMF9TVEFSVF9TTE9UX1NISUZUICAgICAgICAgMCAgLyogQUlGMlJYX0NIQU4wX1NUQVJUX1NMT1QgLSBbNTowXSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4wX1NUQVJUX1NMT1RfV0lEVEggICAgICAgICA2ICAvKiBBSUYyUlhfQ0hBTjBfU1RBUlRfU0xPVCAtIFs1OjBdICovCisKKy8qCisgKiBSODEyICgweDMyQykgLSBBSUYyUlggQ2hhbm5lbCAxIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4xX0RBVF9JTlYgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUYyUlhfQ0hBTjFfREFUX0lOViAqLworI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4xX0RBVF9JTlZfTUFTSyAgICAgICAgMHg4MDAwICAvKiBBSUYyUlhfQ0hBTjFfREFUX0lOViAqLworI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4xX0RBVF9JTlZfU0hJRlQgICAgICAgICAgIDE1ICAvKiBBSUYyUlhfQ0hBTjFfREFUX0lOViAqLworI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4xX0RBVF9JTlZfV0lEVEggICAgICAgICAgICAxICAvKiBBSUYyUlhfQ0hBTjFfREFUX0lOViAqLworI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4xX1NQQUNJTkdfTUFTSyAgICAgICAgMHg3RTAwICAvKiBBSUYyUlhfQ0hBTjFfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4xX1NQQUNJTkdfU0hJRlQgICAgICAgICAgICA5ICAvKiBBSUYyUlhfQ0hBTjFfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4xX1NQQUNJTkdfV0lEVEggICAgICAgICAgICA2ICAvKiBBSUYyUlhfQ0hBTjFfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4xX1NMT1RTX01BU0sgICAgICAgICAgMHgwMUMwICAvKiBBSUYyUlhfQ0hBTjFfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4xX1NMT1RTX1NISUZUICAgICAgICAgICAgICA2ICAvKiBBSUYyUlhfQ0hBTjFfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4xX1NMT1RTX1dJRFRIICAgICAgICAgICAgICAzICAvKiBBSUYyUlhfQ0hBTjFfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4xX1NUQVJUX1NMT1RfTUFTSyAgICAgMHgwMDNGICAvKiBBSUYyUlhfQ0hBTjFfU1RBUlRfU0xPVCAtIFs1OjBdICovCisjZGVmaW5lIFdNODkxNV9BSUYyUlhfQ0hBTjFfU1RBUlRfU0xPVF9TSElGVCAgICAgICAgIDAgIC8qIEFJRjJSWF9DSEFOMV9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTE1X0FJRjJSWF9DSEFOMV9TVEFSVF9TTE9UX1dJRFRIICAgICAgICAgNiAgLyogQUlGMlJYX0NIQU4xX1NUQVJUX1NMT1QgLSBbNTowXSAqLworCisvKgorICogUjgxMyAoMHgzMkQpIC0gQUlGMlJYIE1vbm8gQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIFdNODkxNV9BSUYyUlhfQ0hBTjBfTU9OT19NT0RFICAgICAgICAgICAweDAwMDEgIC8qIEFJRjJSWF9DSEFOMF9NT05PX01PREUgKi8KKyNkZWZpbmUgV004OTE1X0FJRjJSWF9DSEFOMF9NT05PX01PREVfTUFTSyAgICAgIDB4MDAwMSAgLyogQUlGMlJYX0NIQU4wX01PTk9fTU9ERSAqLworI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4wX01PTk9fTU9ERV9TSElGVCAgICAgICAgICAwICAvKiBBSUYyUlhfQ0hBTjBfTU9OT19NT0RFICovCisjZGVmaW5lIFdNODkxNV9BSUYyUlhfQ0hBTjBfTU9OT19NT0RFX1dJRFRIICAgICAgICAgIDEgIC8qIEFJRjJSWF9DSEFOMF9NT05PX01PREUgKi8KKworLyoKKyAqIFI4MTUgKDB4MzJGKSAtIEFJRjJUWCBUZXN0CisgKi8KKyNkZWZpbmUgV004OTE1X0FJRjJUWF9ESVRIRVJfRU5BICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMlRYX0RJVEhFUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FJRjJUWF9ESVRIRVJfRU5BX01BU0sgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMlRYX0RJVEhFUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FJRjJUWF9ESVRIRVJfRU5BX1NISUZUICAgICAgICAgICAgICAgMCAgLyogQUlGMlRYX0RJVEhFUl9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0FJRjJUWF9ESVRIRVJfRU5BX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogQUlGMlRYX0RJVEhFUl9FTkEgKi8KKworLyoKKyAqIFIxMDI0ICgweDQwMCkgLSBEU1AxIFRYIExlZnQgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFUWF9WVSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRFNQMVRYX1ZVICovCisjZGVmaW5lIFdNODkxNV9EU1AxVFhfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDFUWF9WVSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVRYX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEU1AxVFhfVlUgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFUWF9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMVRYX1ZVICovCisjZGVmaW5lIFdNODkxNV9EU1AxVFhMX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIERTUDFUWExfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFUWExfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMVRYTF9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVRYTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICA4ICAvKiBEU1AxVFhMX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTAyNSAoMHg0MDEpIC0gRFNQMSBUWCBSaWdodCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5MTVfRFNQMVRYX1ZVICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEU1AxVFhfVlUgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFUWF9WVV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRFNQMVRYX1ZVICovCisjZGVmaW5lIFdNODkxNV9EU1AxVFhfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIERTUDFUWF9WVSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVRYX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEU1AxVFhfVlUgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFUWFJfVk9MX01BU0sgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogRFNQMVRYUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVRYUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBEU1AxVFhSX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AxVFhSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDggIC8qIERTUDFUWFJfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIxMDI2ICgweDQwMikgLSBEU1AxIFJYIExlZnQgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9WVSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRFNQMVJYX1ZVICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDFSWF9WVSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEU1AxUlhfVlUgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMVJYX1ZVICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhMX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIERTUDFSWExfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWExfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMVJYTF9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICA4ICAvKiBEU1AxUlhMX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTAyNyAoMHg0MDMpIC0gRFNQMSBSWCBSaWdodCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX1ZVICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEU1AxUlhfVlUgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9WVV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRFNQMVJYX1ZVICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIERTUDFSWF9WVSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEU1AxUlhfVlUgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWFJfVk9MX01BU0sgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogRFNQMVJYUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBEU1AxUlhSX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDggIC8qIERTUDFSWFJfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIxMDQwICgweDQxMCkgLSBEU1AxIFRYIEZpbHRlcnMKKyAqLworI2RlZmluZSBXTTg5MTVfRFNQMVRYX05GICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBEU1AxVFhfTkYgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFUWF9ORl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogRFNQMVRYX05GICovCisjZGVmaW5lIFdNODkxNV9EU1AxVFhfTkZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTMgIC8qIERTUDFUWF9ORiAqLworI2RlZmluZSBXTTg5MTVfRFNQMVRYX05GX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEU1AxVFhfTkYgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFUWExfSFBGICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogRFNQMVRYTF9IUEYgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFUWExfSFBGX01BU0sgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogRFNQMVRYTF9IUEYgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFUWExfSFBGX1NISUZUICAgICAgICAgICAgICAgICAgICAxMiAgLyogRFNQMVRYTF9IUEYgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFUWExfSFBGX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMVRYTF9IUEYgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFUWFJfSFBGICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogRFNQMVRYUl9IUEYgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFUWFJfSFBGX01BU0sgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogRFNQMVRYUl9IUEYgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFUWFJfSFBGX1NISUZUICAgICAgICAgICAgICAgICAgICAxMSAgLyogRFNQMVRYUl9IUEYgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFUWFJfSFBGX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMVRYUl9IUEYgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFUWF9IUEZfTU9ERV9NQVNLICAgICAgICAgICAgIDB4MDAxOCAgLyogRFNQMVRYX0hQRl9NT0RFIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFUWF9IUEZfTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgMyAgLyogRFNQMVRYX0hQRl9NT0RFIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFUWF9IUEZfTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgMiAgLyogRFNQMVRYX0hQRl9NT0RFIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFUWF9IUEZfQ1VUX01BU0sgICAgICAgICAgICAgIDB4MDAwNyAgLyogRFNQMVRYX0hQRl9DVVQgLSBbMjowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVRYX0hQRl9DVVRfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AxVFhfSFBGX0NVVCAtIFsyOjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AxVFhfSFBGX0NVVF9XSURUSCAgICAgICAgICAgICAgICAgIDMgIC8qIERTUDFUWF9IUEZfQ1VUIC0gWzI6MF0gKi8KKworLyoKKyAqIFIxMDU2ICgweDQyMCkgLSBEU1AxIFJYIEZpbHRlcnMgKDEpCisgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9NVVRFICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogRFNQMVJYX01VVEUgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9NVVRFX01BU0sgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogRFNQMVJYX01VVEUgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgOSAgLyogRFNQMVJYX01VVEUgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMVJYX01VVEUgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9NT05PICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogRFNQMVJYX01PTk8gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9NT05PX01BU0sgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogRFNQMVJYX01PTk8gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9NT05PX1NISUZUICAgICAgICAgICAgICAgICAgICAgNyAgLyogRFNQMVJYX01PTk8gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9NT05PX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMVJYX01PTk8gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9NVVRFUkFURSAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogRFNQMVJYX01VVEVSQVRFICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfTVVURVJBVEVfTUFTSyAgICAgICAgICAgICAweDAwMjAgIC8qIERTUDFSWF9NVVRFUkFURSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX01VVEVSQVRFX1NISUZUICAgICAgICAgICAgICAgICA1ICAvKiBEU1AxUlhfTVVURVJBVEUgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9NVVRFUkFURV9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogRFNQMVJYX01VVEVSQVRFICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfVU5NVVRFX1JBTVAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERTUDFSWF9VTk1VVEVfUkFNUCAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX1VOTVVURV9SQU1QX01BU0sgICAgICAgICAgMHgwMDEwICAvKiBEU1AxUlhfVU5NVVRFX1JBTVAgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9VTk1VVEVfUkFNUF9TSElGVCAgICAgICAgICAgICAgNCAgLyogRFNQMVJYX1VOTVVURV9SQU1QICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfVU5NVVRFX1JBTVBfV0lEVEggICAgICAgICAgICAgIDEgIC8qIERTUDFSWF9VTk1VVEVfUkFNUCAqLworCisvKgorICogUjEwNTcgKDB4NDIxKSAtIERTUDEgUlggRmlsdGVycyAoMikKKyAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYXzNEX0dBSU5fTUFTSyAgICAgICAgICAgICAgMHgzRTAwICAvKiBEU1AxUlhfM0RfR0FJTiAtIFsxMzo5XSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYXzNEX0dBSU5fU0hJRlQgICAgICAgICAgICAgICAgICA5ICAvKiBEU1AxUlhfM0RfR0FJTiAtIFsxMzo5XSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYXzNEX0dBSU5fV0lEVEggICAgICAgICAgICAgICAgICA1ICAvKiBEU1AxUlhfM0RfR0FJTiAtIFsxMzo5XSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYXzNEX0VOQSAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEU1AxUlhfM0RfRU5BICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfM0RfRU5BX01BU0sgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDFSWF8zRF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF8zRF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgOCAgLyogRFNQMVJYXzNEX0VOQSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYXzNEX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBEU1AxUlhfM0RfRU5BICovCisKKy8qCisgKiBSMTA4OCAoMHg0NDApIC0gRFNQMSBEUkMgKDEpCisgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfU0lHX0RFVF9STVNfTUFTSyAgICAgICAgIDB4RjgwMCAgLyogRFNQMURSQ19TSUdfREVUX1JNUyAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfU0lHX0RFVF9STVNfU0hJRlQgICAgICAgICAgICAxMSAgLyogRFNQMURSQ19TSUdfREVUX1JNUyAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfU0lHX0RFVF9STVNfV0lEVEggICAgICAgICAgICAgNSAgLyogRFNQMURSQ19TSUdfREVUX1JNUyAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfU0lHX0RFVF9QS19NQVNLICAgICAgICAgIDB4MDYwMCAgLyogRFNQMURSQ19TSUdfREVUX1BLIC0gWzEwOjldICovCisjZGVmaW5lIFdNODkxNV9EU1AxRFJDX1NJR19ERVRfUEtfU0hJRlQgICAgICAgICAgICAgIDkgIC8qIERTUDFEUkNfU0lHX0RFVF9QSyAtIFsxMDo5XSAqLworI2RlZmluZSBXTTg5MTVfRFNQMURSQ19TSUdfREVUX1BLX1dJRFRIICAgICAgICAgICAgICAyICAvKiBEU1AxRFJDX1NJR19ERVRfUEsgLSBbMTA6OV0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfTkdfRU5BICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRFNQMURSQ19OR19FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfTkdfRU5BX01BU0sgICAgICAgICAgICAgIDB4MDEwMCAgLyogRFNQMURSQ19OR19FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfTkdfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgOCAgLyogRFNQMURSQ19OR19FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfTkdfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMURSQ19OR19FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfU0lHX0RFVF9NT0RFICAgICAgICAgICAgIDB4MDA4MCAgLyogRFNQMURSQ19TSUdfREVUX01PREUgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfU0lHX0RFVF9NT0RFX01BU0sgICAgICAgIDB4MDA4MCAgLyogRFNQMURSQ19TSUdfREVUX01PREUgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfU0lHX0RFVF9NT0RFX1NISUZUICAgICAgICAgICAgNyAgLyogRFNQMURSQ19TSUdfREVUX01PREUgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfU0lHX0RFVF9NT0RFX1dJRFRIICAgICAgICAgICAgMSAgLyogRFNQMURSQ19TSUdfREVUX01PREUgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfU0lHX0RFVCAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogRFNQMURSQ19TSUdfREVUICovCisjZGVmaW5lIFdNODkxNV9EU1AxRFJDX1NJR19ERVRfTUFTSyAgICAgICAgICAgICAweDAwNDAgIC8qIERTUDFEUkNfU0lHX0RFVCAqLworI2RlZmluZSBXTTg5MTVfRFNQMURSQ19TSUdfREVUX1NISUZUICAgICAgICAgICAgICAgICA2ICAvKiBEU1AxRFJDX1NJR19ERVQgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfU0lHX0RFVF9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogRFNQMURSQ19TSUdfREVUICovCisjZGVmaW5lIFdNODkxNV9EU1AxRFJDX0tORUUyX09QX0VOQSAgICAgICAgICAgICAweDAwMjAgIC8qIERTUDFEUkNfS05FRTJfT1BfRU5BICovCisjZGVmaW5lIFdNODkxNV9EU1AxRFJDX0tORUUyX09QX0VOQV9NQVNLICAgICAgICAweDAwMjAgIC8qIERTUDFEUkNfS05FRTJfT1BfRU5BICovCisjZGVmaW5lIFdNODkxNV9EU1AxRFJDX0tORUUyX09QX0VOQV9TSElGVCAgICAgICAgICAgIDUgIC8qIERTUDFEUkNfS05FRTJfT1BfRU5BICovCisjZGVmaW5lIFdNODkxNV9EU1AxRFJDX0tORUUyX09QX0VOQV9XSURUSCAgICAgICAgICAgIDEgIC8qIERTUDFEUkNfS05FRTJfT1BfRU5BICovCisjZGVmaW5lIFdNODkxNV9EU1AxRFJDX1FSICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERTUDFEUkNfUVIgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfUVJfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogRFNQMURSQ19RUiAqLworI2RlZmluZSBXTTg5MTVfRFNQMURSQ19RUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBEU1AxRFJDX1FSICovCisjZGVmaW5lIFdNODkxNV9EU1AxRFJDX1FSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDFEUkNfUVIgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfQU5USUNMSVAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogRFNQMURSQ19BTlRJQ0xJUCAqLworI2RlZmluZSBXTTg5MTVfRFNQMURSQ19BTlRJQ0xJUF9NQVNLICAgICAgICAgICAgMHgwMDA4ICAvKiBEU1AxRFJDX0FOVElDTElQICovCisjZGVmaW5lIFdNODkxNV9EU1AxRFJDX0FOVElDTElQX1NISUZUICAgICAgICAgICAgICAgIDMgIC8qIERTUDFEUkNfQU5USUNMSVAgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfQU5USUNMSVBfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogRFNQMURSQ19BTlRJQ0xJUCAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX0RSQ19FTkEgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEU1AxUlhfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX0RSQ19FTkFfTUFTSyAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEU1AxUlhfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX0RSQ19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAyICAvKiBEU1AxUlhfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX0RSQ19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBEU1AxUlhfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVRYTF9EUkNfRU5BICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEU1AxVFhMX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFUWExfRFJDX0VOQV9NQVNLICAgICAgICAgICAgIDB4MDAwMiAgLyogRFNQMVRYTF9EUkNfRU5BICovCisjZGVmaW5lIFdNODkxNV9EU1AxVFhMX0RSQ19FTkFfU0hJRlQgICAgICAgICAgICAgICAgIDEgIC8qIERTUDFUWExfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVRYTF9EUkNfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBEU1AxVFhMX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFUWFJfRFJDX0VOQSAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRFNQMVRYUl9EUkNfRU5BICovCisjZGVmaW5lIFdNODkxNV9EU1AxVFhSX0RSQ19FTkFfTUFTSyAgICAgICAgICAgICAweDAwMDEgIC8qIERTUDFUWFJfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVRYUl9EUkNfRU5BX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBEU1AxVFhSX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFUWFJfRFJDX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogRFNQMVRYUl9EUkNfRU5BICovCisKKy8qCisgKiBSMTA4OSAoMHg0NDEpIC0gRFNQMSBEUkMgKDIpCisgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfQVRLX01BU0sgICAgICAgICAgICAgICAgIDB4MUUwMCAgLyogRFNQMURSQ19BVEsgLSBbMTI6OV0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfQVRLX1NISUZUICAgICAgICAgICAgICAgICAgICAgOSAgLyogRFNQMURSQ19BVEsgLSBbMTI6OV0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfQVRLX1dJRFRIICAgICAgICAgICAgICAgICAgICAgNCAgLyogRFNQMURSQ19BVEsgLSBbMTI6OV0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfRENZX01BU0sgICAgICAgICAgICAgICAgIDB4MDFFMCAgLyogRFNQMURSQ19EQ1kgLSBbODo1XSAqLworI2RlZmluZSBXTTg5MTVfRFNQMURSQ19EQ1lfU0hJRlQgICAgICAgICAgICAgICAgICAgICA1ICAvKiBEU1AxRFJDX0RDWSAtIFs4OjVdICovCisjZGVmaW5lIFdNODkxNV9EU1AxRFJDX0RDWV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDQgIC8qIERTUDFEUkNfRENZIC0gWzg6NV0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfTUlOR0FJTl9NQVNLICAgICAgICAgICAgIDB4MDAxQyAgLyogRFNQMURSQ19NSU5HQUlOIC0gWzQ6Ml0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfTUlOR0FJTl9TSElGVCAgICAgICAgICAgICAgICAgMiAgLyogRFNQMURSQ19NSU5HQUlOIC0gWzQ6Ml0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfTUlOR0FJTl9XSURUSCAgICAgICAgICAgICAgICAgMyAgLyogRFNQMURSQ19NSU5HQUlOIC0gWzQ6Ml0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfTUFYR0FJTl9NQVNLICAgICAgICAgICAgIDB4MDAwMyAgLyogRFNQMURSQ19NQVhHQUlOIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfTUFYR0FJTl9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogRFNQMURSQ19NQVhHQUlOIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfTUFYR0FJTl9XSURUSCAgICAgICAgICAgICAgICAgMiAgLyogRFNQMURSQ19NQVhHQUlOIC0gWzE6MF0gKi8KKworLyoKKyAqIFIxMDkwICgweDQ0MikgLSBEU1AxIERSQyAoMykKKyAqLworI2RlZmluZSBXTTg5MTVfRFNQMURSQ19OR19NSU5HQUlOX01BU0sgICAgICAgICAgMHhGMDAwICAvKiBEU1AxRFJDX05HX01JTkdBSU4gLSBbMTU6MTJdICovCisjZGVmaW5lIFdNODkxNV9EU1AxRFJDX05HX01JTkdBSU5fU0hJRlQgICAgICAgICAgICAgMTIgIC8qIERTUDFEUkNfTkdfTUlOR0FJTiAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfTkdfTUlOR0FJTl9XSURUSCAgICAgICAgICAgICAgNCAgLyogRFNQMURSQ19OR19NSU5HQUlOIC0gWzE1OjEyXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMURSQ19OR19FWFBfTUFTSyAgICAgICAgICAgICAgMHgwQzAwICAvKiBEU1AxRFJDX05HX0VYUCAtIFsxMToxMF0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfTkdfRVhQX1NISUZUICAgICAgICAgICAgICAgICAxMCAgLyogRFNQMURSQ19OR19FWFAgLSBbMTE6MTBdICovCisjZGVmaW5lIFdNODkxNV9EU1AxRFJDX05HX0VYUF9XSURUSCAgICAgICAgICAgICAgICAgIDIgIC8qIERTUDFEUkNfTkdfRVhQIC0gWzExOjEwXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMURSQ19RUl9USFJfTUFTSyAgICAgICAgICAgICAgMHgwMzAwICAvKiBEU1AxRFJDX1FSX1RIUiAtIFs5OjhdICovCisjZGVmaW5lIFdNODkxNV9EU1AxRFJDX1FSX1RIUl9TSElGVCAgICAgICAgICAgICAgICAgIDggIC8qIERTUDFEUkNfUVJfVEhSIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfUVJfVEhSX1dJRFRIICAgICAgICAgICAgICAgICAgMiAgLyogRFNQMURSQ19RUl9USFIgLSBbOTo4XSAqLworI2RlZmluZSBXTTg5MTVfRFNQMURSQ19RUl9EQ1lfTUFTSyAgICAgICAgICAgICAgMHgwMEMwICAvKiBEU1AxRFJDX1FSX0RDWSAtIFs3OjZdICovCisjZGVmaW5lIFdNODkxNV9EU1AxRFJDX1FSX0RDWV9TSElGVCAgICAgICAgICAgICAgICAgIDYgIC8qIERTUDFEUkNfUVJfRENZIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfUVJfRENZX1dJRFRIICAgICAgICAgICAgICAgICAgMiAgLyogRFNQMURSQ19RUl9EQ1kgLSBbNzo2XSAqLworI2RlZmluZSBXTTg5MTVfRFNQMURSQ19ISV9DT01QX01BU0sgICAgICAgICAgICAgMHgwMDM4ICAvKiBEU1AxRFJDX0hJX0NPTVAgLSBbNTozXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMURSQ19ISV9DT01QX1NISUZUICAgICAgICAgICAgICAgICAzICAvKiBEU1AxRFJDX0hJX0NPTVAgLSBbNTozXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMURSQ19ISV9DT01QX1dJRFRIICAgICAgICAgICAgICAgICAzICAvKiBEU1AxRFJDX0hJX0NPTVAgLSBbNTozXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMURSQ19MT19DT01QX01BU0sgICAgICAgICAgICAgMHgwMDA3ICAvKiBEU1AxRFJDX0xPX0NPTVAgLSBbMjowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMURSQ19MT19DT01QX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBEU1AxRFJDX0xPX0NPTVAgLSBbMjowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMURSQ19MT19DT01QX1dJRFRIICAgICAgICAgICAgICAgICAzICAvKiBEU1AxRFJDX0xPX0NPTVAgLSBbMjowXSAqLworCisvKgorICogUjEwOTEgKDB4NDQzKSAtIERTUDEgRFJDICg0KQorICovCisjZGVmaW5lIFdNODkxNV9EU1AxRFJDX0tORUVfSVBfTUFTSyAgICAgICAgICAgICAweDA3RTAgIC8qIERTUDFEUkNfS05FRV9JUCAtIFsxMDo1XSAqLworI2RlZmluZSBXTTg5MTVfRFNQMURSQ19LTkVFX0lQX1NISUZUICAgICAgICAgICAgICAgICA1ICAvKiBEU1AxRFJDX0tORUVfSVAgLSBbMTA6NV0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfS05FRV9JUF9XSURUSCAgICAgICAgICAgICAgICAgNiAgLyogRFNQMURSQ19LTkVFX0lQIC0gWzEwOjVdICovCisjZGVmaW5lIFdNODkxNV9EU1AxRFJDX0tORUVfT1BfTUFTSyAgICAgICAgICAgICAweDAwMUYgIC8qIERTUDFEUkNfS05FRV9PUCAtIFs0OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AxRFJDX0tORUVfT1BfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIERTUDFEUkNfS05FRV9PUCAtIFs0OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AxRFJDX0tORUVfT1BfV0lEVEggICAgICAgICAgICAgICAgIDUgIC8qIERTUDFEUkNfS05FRV9PUCAtIFs0OjBdICovCisKKy8qCisgKiBSMTA5MiAoMHg0NDQpIC0gRFNQMSBEUkMgKDUpCisgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfS05FRTJfSVBfTUFTSyAgICAgICAgICAgIDB4MDNFMCAgLyogRFNQMURSQ19LTkVFMl9JUCAtIFs5OjVdICovCisjZGVmaW5lIFdNODkxNV9EU1AxRFJDX0tORUUyX0lQX1NISUZUICAgICAgICAgICAgICAgIDUgIC8qIERTUDFEUkNfS05FRTJfSVAgLSBbOTo1XSAqLworI2RlZmluZSBXTTg5MTVfRFNQMURSQ19LTkVFMl9JUF9XSURUSCAgICAgICAgICAgICAgICA1ICAvKiBEU1AxRFJDX0tORUUyX0lQIC0gWzk6NV0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfS05FRTJfT1BfTUFTSyAgICAgICAgICAgIDB4MDAxRiAgLyogRFNQMURSQ19LTkVFMl9PUCAtIFs0OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AxRFJDX0tORUUyX09QX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIERTUDFEUkNfS05FRTJfT1AgLSBbNDowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMURSQ19LTkVFMl9PUF9XSURUSCAgICAgICAgICAgICAgICA1ICAvKiBEU1AxRFJDX0tORUUyX09QIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIxMTUyICgweDQ4MCkgLSBEU1AxIFJYIEVRIEdhaW5zICgxKQorICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjFfR0FJTl9NQVNLICAgICAgICAgICAweEY4MDAgIC8qIERTUDFSWF9FUV9CMV9HQUlOIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0IxX0dBSU5fU0hJRlQgICAgICAgICAgICAgIDExICAvKiBEU1AxUlhfRVFfQjFfR0FJTiAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CMV9HQUlOX1dJRFRIICAgICAgICAgICAgICAgNSAgLyogRFNQMVJYX0VRX0IxX0dBSU4gLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjJfR0FJTl9NQVNLICAgICAgICAgICAweDA3QzAgIC8qIERTUDFSWF9FUV9CMl9HQUlOIC0gWzEwOjZdICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjJfR0FJTl9TSElGVCAgICAgICAgICAgICAgIDYgIC8qIERTUDFSWF9FUV9CMl9HQUlOIC0gWzEwOjZdICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjJfR0FJTl9XSURUSCAgICAgICAgICAgICAgIDUgIC8qIERTUDFSWF9FUV9CMl9HQUlOIC0gWzEwOjZdICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjNfR0FJTl9NQVNLICAgICAgICAgICAweDAwM0UgIC8qIERTUDFSWF9FUV9CM19HQUlOIC0gWzU6MV0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CM19HQUlOX1NISUZUICAgICAgICAgICAgICAgMSAgLyogRFNQMVJYX0VRX0IzX0dBSU4gLSBbNToxXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0IzX0dBSU5fV0lEVEggICAgICAgICAgICAgICA1ICAvKiBEU1AxUlhfRVFfQjNfR0FJTiAtIFs1OjFdICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfRU5BICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERTUDFSWF9FUV9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9FTkFfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRFNQMVJYX0VRX0VOQSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAwICAvKiBEU1AxUlhfRVFfRU5BICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDFSWF9FUV9FTkEgKi8KKworLyoKKyAqIFIxMTUzICgweDQ4MSkgLSBEU1AxIFJYIEVRIEdhaW5zICgyKQorICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjRfR0FJTl9NQVNLICAgICAgICAgICAweEY4MDAgIC8qIERTUDFSWF9FUV9CNF9HQUlOIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0I0X0dBSU5fU0hJRlQgICAgICAgICAgICAgIDExICAvKiBEU1AxUlhfRVFfQjRfR0FJTiAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CNF9HQUlOX1dJRFRIICAgICAgICAgICAgICAgNSAgLyogRFNQMVJYX0VRX0I0X0dBSU4gLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjVfR0FJTl9NQVNLICAgICAgICAgICAweDA3QzAgIC8qIERTUDFSWF9FUV9CNV9HQUlOIC0gWzEwOjZdICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjVfR0FJTl9TSElGVCAgICAgICAgICAgICAgIDYgIC8qIERTUDFSWF9FUV9CNV9HQUlOIC0gWzEwOjZdICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjVfR0FJTl9XSURUSCAgICAgICAgICAgICAgIDUgIC8qIERTUDFSWF9FUV9CNV9HQUlOIC0gWzEwOjZdICovCisKKy8qCisgKiBSMTE1NCAoMHg0ODIpIC0gRFNQMSBSWCBFUSBCYW5kIDEgQQorICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjFfQV9NQVNLICAgICAgICAgICAgICAweEZGRkYgIC8qIERTUDFSWF9FUV9CMV9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjFfQV9TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDFSWF9FUV9CMV9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjFfQV9XSURUSCAgICAgICAgICAgICAgICAgMTYgIC8qIERTUDFSWF9FUV9CMV9BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE1NSAoMHg0ODMpIC0gRFNQMSBSWCBFUSBCYW5kIDEgQgorICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjFfQl9NQVNLICAgICAgICAgICAgICAweEZGRkYgIC8qIERTUDFSWF9FUV9CMV9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjFfQl9TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDFSWF9FUV9CMV9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjFfQl9XSURUSCAgICAgICAgICAgICAgICAgMTYgIC8qIERTUDFSWF9FUV9CMV9CIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE1NiAoMHg0ODQpIC0gRFNQMSBSWCBFUSBCYW5kIDEgUEcKKyAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0IxX1BHX01BU0sgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AxUlhfRVFfQjFfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CMV9QR19TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogRFNQMVJYX0VRX0IxX1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjFfUEdfV0lEVEggICAgICAgICAgICAgICAgMTYgIC8qIERTUDFSWF9FUV9CMV9QRyAtIFsxNTowXSAqLworCisvKgorICogUjExNTcgKDB4NDg1KSAtIERTUDEgUlggRVEgQmFuZCAyIEEKKyAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0IyX0FfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AxUlhfRVFfQjJfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0IyX0FfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AxUlhfRVFfQjJfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0IyX0FfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AxUlhfRVFfQjJfQSAtIFsxNTowXSAqLworCisvKgorICogUjExNTggKDB4NDg2KSAtIERTUDEgUlggRVEgQmFuZCAyIEIKKyAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0IyX0JfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AxUlhfRVFfQjJfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0IyX0JfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AxUlhfRVFfQjJfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0IyX0JfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AxUlhfRVFfQjJfQiAtIFsxNTowXSAqLworCisvKgorICogUjExNTkgKDB4NDg3KSAtIERTUDEgUlggRVEgQmFuZCAyIEMKKyAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0IyX0NfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AxUlhfRVFfQjJfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0IyX0NfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AxUlhfRVFfQjJfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0IyX0NfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AxUlhfRVFfQjJfQyAtIFsxNTowXSAqLworCisvKgorICogUjExNjAgKDB4NDg4KSAtIERTUDEgUlggRVEgQmFuZCAyIFBHCisgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CMl9QR19NQVNLICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMVJYX0VRX0IyX1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjJfUEdfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIERTUDFSWF9FUV9CMl9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0IyX1BHX1dJRFRIICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AxUlhfRVFfQjJfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTYxICgweDQ4OSkgLSBEU1AxIFJYIEVRIEJhbmQgMyBBCisgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CM19BX01BU0sgICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMVJYX0VRX0IzX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CM19BX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMVJYX0VRX0IzX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CM19BX1dJRFRIICAgICAgICAgICAgICAgICAxNiAgLyogRFNQMVJYX0VRX0IzX0EgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTYyICgweDQ4QSkgLSBEU1AxIFJYIEVRIEJhbmQgMyBCCisgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CM19CX01BU0sgICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMVJYX0VRX0IzX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CM19CX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMVJYX0VRX0IzX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CM19CX1dJRFRIICAgICAgICAgICAgICAgICAxNiAgLyogRFNQMVJYX0VRX0IzX0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTYzICgweDQ4QikgLSBEU1AxIFJYIEVRIEJhbmQgMyBDCisgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CM19DX01BU0sgICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMVJYX0VRX0IzX0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CM19DX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMVJYX0VRX0IzX0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CM19DX1dJRFRIICAgICAgICAgICAgICAgICAxNiAgLyogRFNQMVJYX0VRX0IzX0MgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTY0ICgweDQ4QykgLSBEU1AxIFJYIEVRIEJhbmQgMyBQRworICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjNfUEdfTUFTSyAgICAgICAgICAgICAweEZGRkYgIC8qIERTUDFSWF9FUV9CM19QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0IzX1BHX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBEU1AxUlhfRVFfQjNfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CM19QR19XSURUSCAgICAgICAgICAgICAgICAxNiAgLyogRFNQMVJYX0VRX0IzX1BHIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE2NSAoMHg0OEQpIC0gRFNQMSBSWCBFUSBCYW5kIDQgQQorICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjRfQV9NQVNLICAgICAgICAgICAgICAweEZGRkYgIC8qIERTUDFSWF9FUV9CNF9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjRfQV9TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDFSWF9FUV9CNF9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjRfQV9XSURUSCAgICAgICAgICAgICAgICAgMTYgIC8qIERTUDFSWF9FUV9CNF9BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE2NiAoMHg0OEUpIC0gRFNQMSBSWCBFUSBCYW5kIDQgQgorICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjRfQl9NQVNLICAgICAgICAgICAgICAweEZGRkYgIC8qIERTUDFSWF9FUV9CNF9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjRfQl9TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDFSWF9FUV9CNF9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjRfQl9XSURUSCAgICAgICAgICAgICAgICAgMTYgIC8qIERTUDFSWF9FUV9CNF9CIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE2NyAoMHg0OEYpIC0gRFNQMSBSWCBFUSBCYW5kIDQgQworICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjRfQ19NQVNLICAgICAgICAgICAgICAweEZGRkYgIC8qIERTUDFSWF9FUV9CNF9DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjRfQ19TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDFSWF9FUV9CNF9DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjRfQ19XSURUSCAgICAgICAgICAgICAgICAgMTYgIC8qIERTUDFSWF9FUV9CNF9DIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE2OCAoMHg0OTApIC0gRFNQMSBSWCBFUSBCYW5kIDQgUEcKKyAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0I0X1BHX01BU0sgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AxUlhfRVFfQjRfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CNF9QR19TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogRFNQMVJYX0VRX0I0X1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjRfUEdfV0lEVEggICAgICAgICAgICAgICAgMTYgIC8qIERTUDFSWF9FUV9CNF9QRyAtIFsxNTowXSAqLworCisvKgorICogUjExNjkgKDB4NDkxKSAtIERTUDEgUlggRVEgQmFuZCA1IEEKKyAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0I1X0FfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AxUlhfRVFfQjVfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0I1X0FfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AxUlhfRVFfQjVfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0I1X0FfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AxUlhfRVFfQjVfQSAtIFsxNTowXSAqLworCisvKgorICogUjExNzAgKDB4NDkyKSAtIERTUDEgUlggRVEgQmFuZCA1IEIKKyAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0I1X0JfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AxUlhfRVFfQjVfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0I1X0JfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AxUlhfRVFfQjVfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0I1X0JfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AxUlhfRVFfQjVfQiAtIFsxNTowXSAqLworCisvKgorICogUjExNzEgKDB4NDkzKSAtIERTUDEgUlggRVEgQmFuZCA1IFBHCisgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CNV9QR19NQVNLICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMVJYX0VRX0I1X1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjVfUEdfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIERTUDFSWF9FUV9CNV9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0I1X1BHX1dJRFRIICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AxUlhfRVFfQjVfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMjgwICgweDUwMCkgLSBEU1AyIFRYIExlZnQgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJUWF9WVSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRFNQMlRYX1ZVICovCisjZGVmaW5lIFdNODkxNV9EU1AyVFhfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDJUWF9WVSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlRYX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEU1AyVFhfVlUgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJUWF9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMlRYX1ZVICovCisjZGVmaW5lIFdNODkxNV9EU1AyVFhMX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIERTUDJUWExfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJUWExfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMlRYTF9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlRYTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICA4ICAvKiBEU1AyVFhMX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTI4MSAoMHg1MDEpIC0gRFNQMiBUWCBSaWdodCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5MTVfRFNQMlRYX1ZVICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEU1AyVFhfVlUgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJUWF9WVV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRFNQMlRYX1ZVICovCisjZGVmaW5lIFdNODkxNV9EU1AyVFhfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIERTUDJUWF9WVSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlRYX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEU1AyVFhfVlUgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJUWFJfVk9MX01BU0sgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogRFNQMlRYUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlRYUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBEU1AyVFhSX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AyVFhSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDggIC8qIERTUDJUWFJfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIxMjgyICgweDUwMikgLSBEU1AyIFJYIExlZnQgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9WVSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRFNQMlJYX1ZVICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDJSWF9WVSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEU1AyUlhfVlUgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMlJYX1ZVICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhMX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIERTUDJSWExfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWExfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMlJYTF9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICA4ICAvKiBEU1AyUlhMX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTI4MyAoMHg1MDMpIC0gRFNQMiBSWCBSaWdodCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX1ZVICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEU1AyUlhfVlUgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9WVV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRFNQMlJYX1ZVICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIERTUDJSWF9WVSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEU1AyUlhfVlUgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWFJfVk9MX01BU0sgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogRFNQMlJYUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBEU1AyUlhSX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDggIC8qIERTUDJSWFJfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIxMjk2ICgweDUxMCkgLSBEU1AyIFRYIEZpbHRlcnMKKyAqLworI2RlZmluZSBXTTg5MTVfRFNQMlRYX05GICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBEU1AyVFhfTkYgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJUWF9ORl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogRFNQMlRYX05GICovCisjZGVmaW5lIFdNODkxNV9EU1AyVFhfTkZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTMgIC8qIERTUDJUWF9ORiAqLworI2RlZmluZSBXTTg5MTVfRFNQMlRYX05GX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEU1AyVFhfTkYgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJUWExfSFBGICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogRFNQMlRYTF9IUEYgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJUWExfSFBGX01BU0sgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogRFNQMlRYTF9IUEYgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJUWExfSFBGX1NISUZUICAgICAgICAgICAgICAgICAgICAxMiAgLyogRFNQMlRYTF9IUEYgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJUWExfSFBGX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMlRYTF9IUEYgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJUWFJfSFBGICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogRFNQMlRYUl9IUEYgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJUWFJfSFBGX01BU0sgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogRFNQMlRYUl9IUEYgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJUWFJfSFBGX1NISUZUICAgICAgICAgICAgICAgICAgICAxMSAgLyogRFNQMlRYUl9IUEYgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJUWFJfSFBGX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMlRYUl9IUEYgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJUWF9IUEZfTU9ERV9NQVNLICAgICAgICAgICAgIDB4MDAxOCAgLyogRFNQMlRYX0hQRl9NT0RFIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJUWF9IUEZfTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgMyAgLyogRFNQMlRYX0hQRl9NT0RFIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJUWF9IUEZfTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgMiAgLyogRFNQMlRYX0hQRl9NT0RFIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJUWF9IUEZfQ1VUX01BU0sgICAgICAgICAgICAgIDB4MDAwNyAgLyogRFNQMlRYX0hQRl9DVVQgLSBbMjowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlRYX0hQRl9DVVRfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AyVFhfSFBGX0NVVCAtIFsyOjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AyVFhfSFBGX0NVVF9XSURUSCAgICAgICAgICAgICAgICAgIDMgIC8qIERTUDJUWF9IUEZfQ1VUIC0gWzI6MF0gKi8KKworLyoKKyAqIFIxMzEyICgweDUyMCkgLSBEU1AyIFJYIEZpbHRlcnMgKDEpCisgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9NVVRFICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogRFNQMlJYX01VVEUgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9NVVRFX01BU0sgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogRFNQMlJYX01VVEUgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgOSAgLyogRFNQMlJYX01VVEUgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMlJYX01VVEUgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9NT05PICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogRFNQMlJYX01PTk8gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9NT05PX01BU0sgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogRFNQMlJYX01PTk8gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9NT05PX1NISUZUICAgICAgICAgICAgICAgICAgICAgNyAgLyogRFNQMlJYX01PTk8gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9NT05PX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMlJYX01PTk8gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9NVVRFUkFURSAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogRFNQMlJYX01VVEVSQVRFICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfTVVURVJBVEVfTUFTSyAgICAgICAgICAgICAweDAwMjAgIC8qIERTUDJSWF9NVVRFUkFURSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX01VVEVSQVRFX1NISUZUICAgICAgICAgICAgICAgICA1ICAvKiBEU1AyUlhfTVVURVJBVEUgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9NVVRFUkFURV9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogRFNQMlJYX01VVEVSQVRFICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfVU5NVVRFX1JBTVAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERTUDJSWF9VTk1VVEVfUkFNUCAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX1VOTVVURV9SQU1QX01BU0sgICAgICAgICAgMHgwMDEwICAvKiBEU1AyUlhfVU5NVVRFX1JBTVAgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9VTk1VVEVfUkFNUF9TSElGVCAgICAgICAgICAgICAgNCAgLyogRFNQMlJYX1VOTVVURV9SQU1QICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfVU5NVVRFX1JBTVBfV0lEVEggICAgICAgICAgICAgIDEgIC8qIERTUDJSWF9VTk1VVEVfUkFNUCAqLworCisvKgorICogUjEzMTMgKDB4NTIxKSAtIERTUDIgUlggRmlsdGVycyAoMikKKyAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYXzNEX0dBSU5fTUFTSyAgICAgICAgICAgICAgMHgzRTAwICAvKiBEU1AyUlhfM0RfR0FJTiAtIFsxMzo5XSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYXzNEX0dBSU5fU0hJRlQgICAgICAgICAgICAgICAgICA5ICAvKiBEU1AyUlhfM0RfR0FJTiAtIFsxMzo5XSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYXzNEX0dBSU5fV0lEVEggICAgICAgICAgICAgICAgICA1ICAvKiBEU1AyUlhfM0RfR0FJTiAtIFsxMzo5XSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYXzNEX0VOQSAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEU1AyUlhfM0RfRU5BICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfM0RfRU5BX01BU0sgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDJSWF8zRF9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF8zRF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgOCAgLyogRFNQMlJYXzNEX0VOQSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYXzNEX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBEU1AyUlhfM0RfRU5BICovCisKKy8qCisgKiBSMTM0NCAoMHg1NDApIC0gRFNQMiBEUkMgKDEpCisgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfU0lHX0RFVF9STVNfTUFTSyAgICAgICAgIDB4RjgwMCAgLyogRFNQMkRSQ19TSUdfREVUX1JNUyAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfU0lHX0RFVF9STVNfU0hJRlQgICAgICAgICAgICAxMSAgLyogRFNQMkRSQ19TSUdfREVUX1JNUyAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfU0lHX0RFVF9STVNfV0lEVEggICAgICAgICAgICAgNSAgLyogRFNQMkRSQ19TSUdfREVUX1JNUyAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfU0lHX0RFVF9QS19NQVNLICAgICAgICAgIDB4MDYwMCAgLyogRFNQMkRSQ19TSUdfREVUX1BLIC0gWzEwOjldICovCisjZGVmaW5lIFdNODkxNV9EU1AyRFJDX1NJR19ERVRfUEtfU0hJRlQgICAgICAgICAgICAgIDkgIC8qIERTUDJEUkNfU0lHX0RFVF9QSyAtIFsxMDo5XSAqLworI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19TSUdfREVUX1BLX1dJRFRIICAgICAgICAgICAgICAyICAvKiBEU1AyRFJDX1NJR19ERVRfUEsgLSBbMTA6OV0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfTkdfRU5BICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRFNQMkRSQ19OR19FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfTkdfRU5BX01BU0sgICAgICAgICAgICAgIDB4MDEwMCAgLyogRFNQMkRSQ19OR19FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfTkdfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgOCAgLyogRFNQMkRSQ19OR19FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfTkdfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMkRSQ19OR19FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfU0lHX0RFVF9NT0RFICAgICAgICAgICAgIDB4MDA4MCAgLyogRFNQMkRSQ19TSUdfREVUX01PREUgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfU0lHX0RFVF9NT0RFX01BU0sgICAgICAgIDB4MDA4MCAgLyogRFNQMkRSQ19TSUdfREVUX01PREUgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfU0lHX0RFVF9NT0RFX1NISUZUICAgICAgICAgICAgNyAgLyogRFNQMkRSQ19TSUdfREVUX01PREUgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfU0lHX0RFVF9NT0RFX1dJRFRIICAgICAgICAgICAgMSAgLyogRFNQMkRSQ19TSUdfREVUX01PREUgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfU0lHX0RFVCAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogRFNQMkRSQ19TSUdfREVUICovCisjZGVmaW5lIFdNODkxNV9EU1AyRFJDX1NJR19ERVRfTUFTSyAgICAgICAgICAgICAweDAwNDAgIC8qIERTUDJEUkNfU0lHX0RFVCAqLworI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19TSUdfREVUX1NISUZUICAgICAgICAgICAgICAgICA2ICAvKiBEU1AyRFJDX1NJR19ERVQgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfU0lHX0RFVF9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogRFNQMkRSQ19TSUdfREVUICovCisjZGVmaW5lIFdNODkxNV9EU1AyRFJDX0tORUUyX09QX0VOQSAgICAgICAgICAgICAweDAwMjAgIC8qIERTUDJEUkNfS05FRTJfT1BfRU5BICovCisjZGVmaW5lIFdNODkxNV9EU1AyRFJDX0tORUUyX09QX0VOQV9NQVNLICAgICAgICAweDAwMjAgIC8qIERTUDJEUkNfS05FRTJfT1BfRU5BICovCisjZGVmaW5lIFdNODkxNV9EU1AyRFJDX0tORUUyX09QX0VOQV9TSElGVCAgICAgICAgICAgIDUgIC8qIERTUDJEUkNfS05FRTJfT1BfRU5BICovCisjZGVmaW5lIFdNODkxNV9EU1AyRFJDX0tORUUyX09QX0VOQV9XSURUSCAgICAgICAgICAgIDEgIC8qIERTUDJEUkNfS05FRTJfT1BfRU5BICovCisjZGVmaW5lIFdNODkxNV9EU1AyRFJDX1FSICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERTUDJEUkNfUVIgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfUVJfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogRFNQMkRSQ19RUiAqLworI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19RUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBEU1AyRFJDX1FSICovCisjZGVmaW5lIFdNODkxNV9EU1AyRFJDX1FSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDJEUkNfUVIgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfQU5USUNMSVAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogRFNQMkRSQ19BTlRJQ0xJUCAqLworI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19BTlRJQ0xJUF9NQVNLICAgICAgICAgICAgMHgwMDA4ICAvKiBEU1AyRFJDX0FOVElDTElQICovCisjZGVmaW5lIFdNODkxNV9EU1AyRFJDX0FOVElDTElQX1NISUZUICAgICAgICAgICAgICAgIDMgIC8qIERTUDJEUkNfQU5USUNMSVAgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfQU5USUNMSVBfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogRFNQMkRSQ19BTlRJQ0xJUCAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX0RSQ19FTkEgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEU1AyUlhfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX0RSQ19FTkFfTUFTSyAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEU1AyUlhfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX0RSQ19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAyICAvKiBEU1AyUlhfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX0RSQ19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBEU1AyUlhfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlRYTF9EUkNfRU5BICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEU1AyVFhMX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJUWExfRFJDX0VOQV9NQVNLICAgICAgICAgICAgIDB4MDAwMiAgLyogRFNQMlRYTF9EUkNfRU5BICovCisjZGVmaW5lIFdNODkxNV9EU1AyVFhMX0RSQ19FTkFfU0hJRlQgICAgICAgICAgICAgICAgIDEgIC8qIERTUDJUWExfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlRYTF9EUkNfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBEU1AyVFhMX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJUWFJfRFJDX0VOQSAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRFNQMlRYUl9EUkNfRU5BICovCisjZGVmaW5lIFdNODkxNV9EU1AyVFhSX0RSQ19FTkFfTUFTSyAgICAgICAgICAgICAweDAwMDEgIC8qIERTUDJUWFJfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlRYUl9EUkNfRU5BX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBEU1AyVFhSX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJUWFJfRFJDX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogRFNQMlRYUl9EUkNfRU5BICovCisKKy8qCisgKiBSMTM0NSAoMHg1NDEpIC0gRFNQMiBEUkMgKDIpCisgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfQVRLX01BU0sgICAgICAgICAgICAgICAgIDB4MUUwMCAgLyogRFNQMkRSQ19BVEsgLSBbMTI6OV0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfQVRLX1NISUZUICAgICAgICAgICAgICAgICAgICAgOSAgLyogRFNQMkRSQ19BVEsgLSBbMTI6OV0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfQVRLX1dJRFRIICAgICAgICAgICAgICAgICAgICAgNCAgLyogRFNQMkRSQ19BVEsgLSBbMTI6OV0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfRENZX01BU0sgICAgICAgICAgICAgICAgIDB4MDFFMCAgLyogRFNQMkRSQ19EQ1kgLSBbODo1XSAqLworI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19EQ1lfU0hJRlQgICAgICAgICAgICAgICAgICAgICA1ICAvKiBEU1AyRFJDX0RDWSAtIFs4OjVdICovCisjZGVmaW5lIFdNODkxNV9EU1AyRFJDX0RDWV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDQgIC8qIERTUDJEUkNfRENZIC0gWzg6NV0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfTUlOR0FJTl9NQVNLICAgICAgICAgICAgIDB4MDAxQyAgLyogRFNQMkRSQ19NSU5HQUlOIC0gWzQ6Ml0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfTUlOR0FJTl9TSElGVCAgICAgICAgICAgICAgICAgMiAgLyogRFNQMkRSQ19NSU5HQUlOIC0gWzQ6Ml0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfTUlOR0FJTl9XSURUSCAgICAgICAgICAgICAgICAgMyAgLyogRFNQMkRSQ19NSU5HQUlOIC0gWzQ6Ml0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfTUFYR0FJTl9NQVNLICAgICAgICAgICAgIDB4MDAwMyAgLyogRFNQMkRSQ19NQVhHQUlOIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfTUFYR0FJTl9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogRFNQMkRSQ19NQVhHQUlOIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfTUFYR0FJTl9XSURUSCAgICAgICAgICAgICAgICAgMiAgLyogRFNQMkRSQ19NQVhHQUlOIC0gWzE6MF0gKi8KKworLyoKKyAqIFIxMzQ2ICgweDU0MikgLSBEU1AyIERSQyAoMykKKyAqLworI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19OR19NSU5HQUlOX01BU0sgICAgICAgICAgMHhGMDAwICAvKiBEU1AyRFJDX05HX01JTkdBSU4gLSBbMTU6MTJdICovCisjZGVmaW5lIFdNODkxNV9EU1AyRFJDX05HX01JTkdBSU5fU0hJRlQgICAgICAgICAgICAgMTIgIC8qIERTUDJEUkNfTkdfTUlOR0FJTiAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfTkdfTUlOR0FJTl9XSURUSCAgICAgICAgICAgICAgNCAgLyogRFNQMkRSQ19OR19NSU5HQUlOIC0gWzE1OjEyXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19OR19FWFBfTUFTSyAgICAgICAgICAgICAgMHgwQzAwICAvKiBEU1AyRFJDX05HX0VYUCAtIFsxMToxMF0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfTkdfRVhQX1NISUZUICAgICAgICAgICAgICAgICAxMCAgLyogRFNQMkRSQ19OR19FWFAgLSBbMTE6MTBdICovCisjZGVmaW5lIFdNODkxNV9EU1AyRFJDX05HX0VYUF9XSURUSCAgICAgICAgICAgICAgICAgIDIgIC8qIERTUDJEUkNfTkdfRVhQIC0gWzExOjEwXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19RUl9USFJfTUFTSyAgICAgICAgICAgICAgMHgwMzAwICAvKiBEU1AyRFJDX1FSX1RIUiAtIFs5OjhdICovCisjZGVmaW5lIFdNODkxNV9EU1AyRFJDX1FSX1RIUl9TSElGVCAgICAgICAgICAgICAgICAgIDggIC8qIERTUDJEUkNfUVJfVEhSIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfUVJfVEhSX1dJRFRIICAgICAgICAgICAgICAgICAgMiAgLyogRFNQMkRSQ19RUl9USFIgLSBbOTo4XSAqLworI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19RUl9EQ1lfTUFTSyAgICAgICAgICAgICAgMHgwMEMwICAvKiBEU1AyRFJDX1FSX0RDWSAtIFs3OjZdICovCisjZGVmaW5lIFdNODkxNV9EU1AyRFJDX1FSX0RDWV9TSElGVCAgICAgICAgICAgICAgICAgIDYgIC8qIERTUDJEUkNfUVJfRENZIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfUVJfRENZX1dJRFRIICAgICAgICAgICAgICAgICAgMiAgLyogRFNQMkRSQ19RUl9EQ1kgLSBbNzo2XSAqLworI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19ISV9DT01QX01BU0sgICAgICAgICAgICAgMHgwMDM4ICAvKiBEU1AyRFJDX0hJX0NPTVAgLSBbNTozXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19ISV9DT01QX1NISUZUICAgICAgICAgICAgICAgICAzICAvKiBEU1AyRFJDX0hJX0NPTVAgLSBbNTozXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19ISV9DT01QX1dJRFRIICAgICAgICAgICAgICAgICAzICAvKiBEU1AyRFJDX0hJX0NPTVAgLSBbNTozXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19MT19DT01QX01BU0sgICAgICAgICAgICAgMHgwMDA3ICAvKiBEU1AyRFJDX0xPX0NPTVAgLSBbMjowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19MT19DT01QX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBEU1AyRFJDX0xPX0NPTVAgLSBbMjowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19MT19DT01QX1dJRFRIICAgICAgICAgICAgICAgICAzICAvKiBEU1AyRFJDX0xPX0NPTVAgLSBbMjowXSAqLworCisvKgorICogUjEzNDcgKDB4NTQzKSAtIERTUDIgRFJDICg0KQorICovCisjZGVmaW5lIFdNODkxNV9EU1AyRFJDX0tORUVfSVBfTUFTSyAgICAgICAgICAgICAweDA3RTAgIC8qIERTUDJEUkNfS05FRV9JUCAtIFsxMDo1XSAqLworI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19LTkVFX0lQX1NISUZUICAgICAgICAgICAgICAgICA1ICAvKiBEU1AyRFJDX0tORUVfSVAgLSBbMTA6NV0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfS05FRV9JUF9XSURUSCAgICAgICAgICAgICAgICAgNiAgLyogRFNQMkRSQ19LTkVFX0lQIC0gWzEwOjVdICovCisjZGVmaW5lIFdNODkxNV9EU1AyRFJDX0tORUVfT1BfTUFTSyAgICAgICAgICAgICAweDAwMUYgIC8qIERTUDJEUkNfS05FRV9PUCAtIFs0OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AyRFJDX0tORUVfT1BfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIERTUDJEUkNfS05FRV9PUCAtIFs0OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AyRFJDX0tORUVfT1BfV0lEVEggICAgICAgICAgICAgICAgIDUgIC8qIERTUDJEUkNfS05FRV9PUCAtIFs0OjBdICovCisKKy8qCisgKiBSMTM0OCAoMHg1NDQpIC0gRFNQMiBEUkMgKDUpCisgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfS05FRTJfSVBfTUFTSyAgICAgICAgICAgIDB4MDNFMCAgLyogRFNQMkRSQ19LTkVFMl9JUCAtIFs5OjVdICovCisjZGVmaW5lIFdNODkxNV9EU1AyRFJDX0tORUUyX0lQX1NISUZUICAgICAgICAgICAgICAgIDUgIC8qIERTUDJEUkNfS05FRTJfSVAgLSBbOTo1XSAqLworI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19LTkVFMl9JUF9XSURUSCAgICAgICAgICAgICAgICA1ICAvKiBEU1AyRFJDX0tORUUyX0lQIC0gWzk6NV0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfS05FRTJfT1BfTUFTSyAgICAgICAgICAgIDB4MDAxRiAgLyogRFNQMkRSQ19LTkVFMl9PUCAtIFs0OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AyRFJDX0tORUUyX09QX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIERTUDJEUkNfS05FRTJfT1AgLSBbNDowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19LTkVFMl9PUF9XSURUSCAgICAgICAgICAgICAgICA1ICAvKiBEU1AyRFJDX0tORUUyX09QIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIxNDA4ICgweDU4MCkgLSBEU1AyIFJYIEVRIEdhaW5zICgxKQorICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjFfR0FJTl9NQVNLICAgICAgICAgICAweEY4MDAgIC8qIERTUDJSWF9FUV9CMV9HQUlOIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0IxX0dBSU5fU0hJRlQgICAgICAgICAgICAgIDExICAvKiBEU1AyUlhfRVFfQjFfR0FJTiAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CMV9HQUlOX1dJRFRIICAgICAgICAgICAgICAgNSAgLyogRFNQMlJYX0VRX0IxX0dBSU4gLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjJfR0FJTl9NQVNLICAgICAgICAgICAweDA3QzAgIC8qIERTUDJSWF9FUV9CMl9HQUlOIC0gWzEwOjZdICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjJfR0FJTl9TSElGVCAgICAgICAgICAgICAgIDYgIC8qIERTUDJSWF9FUV9CMl9HQUlOIC0gWzEwOjZdICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjJfR0FJTl9XSURUSCAgICAgICAgICAgICAgIDUgIC8qIERTUDJSWF9FUV9CMl9HQUlOIC0gWzEwOjZdICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjNfR0FJTl9NQVNLICAgICAgICAgICAweDAwM0UgIC8qIERTUDJSWF9FUV9CM19HQUlOIC0gWzU6MV0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CM19HQUlOX1NISUZUICAgICAgICAgICAgICAgMSAgLyogRFNQMlJYX0VRX0IzX0dBSU4gLSBbNToxXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0IzX0dBSU5fV0lEVEggICAgICAgICAgICAgICA1ICAvKiBEU1AyUlhfRVFfQjNfR0FJTiAtIFs1OjFdICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfRU5BICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERTUDJSWF9FUV9FTkEgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9FTkFfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRFNQMlJYX0VRX0VOQSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAwICAvKiBEU1AyUlhfRVFfRU5BICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDJSWF9FUV9FTkEgKi8KKworLyoKKyAqIFIxNDA5ICgweDU4MSkgLSBEU1AyIFJYIEVRIEdhaW5zICgyKQorICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjRfR0FJTl9NQVNLICAgICAgICAgICAweEY4MDAgIC8qIERTUDJSWF9FUV9CNF9HQUlOIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0I0X0dBSU5fU0hJRlQgICAgICAgICAgICAgIDExICAvKiBEU1AyUlhfRVFfQjRfR0FJTiAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CNF9HQUlOX1dJRFRIICAgICAgICAgICAgICAgNSAgLyogRFNQMlJYX0VRX0I0X0dBSU4gLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjVfR0FJTl9NQVNLICAgICAgICAgICAweDA3QzAgIC8qIERTUDJSWF9FUV9CNV9HQUlOIC0gWzEwOjZdICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjVfR0FJTl9TSElGVCAgICAgICAgICAgICAgIDYgIC8qIERTUDJSWF9FUV9CNV9HQUlOIC0gWzEwOjZdICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjVfR0FJTl9XSURUSCAgICAgICAgICAgICAgIDUgIC8qIERTUDJSWF9FUV9CNV9HQUlOIC0gWzEwOjZdICovCisKKy8qCisgKiBSMTQxMCAoMHg1ODIpIC0gRFNQMiBSWCBFUSBCYW5kIDEgQQorICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjFfQV9NQVNLICAgICAgICAgICAgICAweEZGRkYgIC8qIERTUDJSWF9FUV9CMV9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjFfQV9TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDJSWF9FUV9CMV9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjFfQV9XSURUSCAgICAgICAgICAgICAgICAgMTYgIC8qIERTUDJSWF9FUV9CMV9BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQxMSAoMHg1ODMpIC0gRFNQMiBSWCBFUSBCYW5kIDEgQgorICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjFfQl9NQVNLICAgICAgICAgICAgICAweEZGRkYgIC8qIERTUDJSWF9FUV9CMV9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjFfQl9TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDJSWF9FUV9CMV9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjFfQl9XSURUSCAgICAgICAgICAgICAgICAgMTYgIC8qIERTUDJSWF9FUV9CMV9CIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQxMiAoMHg1ODQpIC0gRFNQMiBSWCBFUSBCYW5kIDEgUEcKKyAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0IxX1BHX01BU0sgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AyUlhfRVFfQjFfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CMV9QR19TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogRFNQMlJYX0VRX0IxX1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjFfUEdfV0lEVEggICAgICAgICAgICAgICAgMTYgIC8qIERTUDJSWF9FUV9CMV9QRyAtIFsxNTowXSAqLworCisvKgorICogUjE0MTMgKDB4NTg1KSAtIERTUDIgUlggRVEgQmFuZCAyIEEKKyAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0IyX0FfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AyUlhfRVFfQjJfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0IyX0FfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AyUlhfRVFfQjJfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0IyX0FfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AyUlhfRVFfQjJfQSAtIFsxNTowXSAqLworCisvKgorICogUjE0MTQgKDB4NTg2KSAtIERTUDIgUlggRVEgQmFuZCAyIEIKKyAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0IyX0JfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AyUlhfRVFfQjJfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0IyX0JfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AyUlhfRVFfQjJfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0IyX0JfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AyUlhfRVFfQjJfQiAtIFsxNTowXSAqLworCisvKgorICogUjE0MTUgKDB4NTg3KSAtIERTUDIgUlggRVEgQmFuZCAyIEMKKyAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0IyX0NfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AyUlhfRVFfQjJfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0IyX0NfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AyUlhfRVFfQjJfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0IyX0NfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AyUlhfRVFfQjJfQyAtIFsxNTowXSAqLworCisvKgorICogUjE0MTYgKDB4NTg4KSAtIERTUDIgUlggRVEgQmFuZCAyIFBHCisgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CMl9QR19NQVNLICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMlJYX0VRX0IyX1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjJfUEdfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIERTUDJSWF9FUV9CMl9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0IyX1BHX1dJRFRIICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AyUlhfRVFfQjJfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDE3ICgweDU4OSkgLSBEU1AyIFJYIEVRIEJhbmQgMyBBCisgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CM19BX01BU0sgICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMlJYX0VRX0IzX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CM19BX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMlJYX0VRX0IzX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CM19BX1dJRFRIICAgICAgICAgICAgICAgICAxNiAgLyogRFNQMlJYX0VRX0IzX0EgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDE4ICgweDU4QSkgLSBEU1AyIFJYIEVRIEJhbmQgMyBCCisgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CM19CX01BU0sgICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMlJYX0VRX0IzX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CM19CX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMlJYX0VRX0IzX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CM19CX1dJRFRIICAgICAgICAgICAgICAgICAxNiAgLyogRFNQMlJYX0VRX0IzX0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDE5ICgweDU4QikgLSBEU1AyIFJYIEVRIEJhbmQgMyBDCisgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CM19DX01BU0sgICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMlJYX0VRX0IzX0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CM19DX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMlJYX0VRX0IzX0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CM19DX1dJRFRIICAgICAgICAgICAgICAgICAxNiAgLyogRFNQMlJYX0VRX0IzX0MgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDIwICgweDU4QykgLSBEU1AyIFJYIEVRIEJhbmQgMyBQRworICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjNfUEdfTUFTSyAgICAgICAgICAgICAweEZGRkYgIC8qIERTUDJSWF9FUV9CM19QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0IzX1BHX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBEU1AyUlhfRVFfQjNfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CM19QR19XSURUSCAgICAgICAgICAgICAgICAxNiAgLyogRFNQMlJYX0VRX0IzX1BHIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQyMSAoMHg1OEQpIC0gRFNQMiBSWCBFUSBCYW5kIDQgQQorICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjRfQV9NQVNLICAgICAgICAgICAgICAweEZGRkYgIC8qIERTUDJSWF9FUV9CNF9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjRfQV9TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDJSWF9FUV9CNF9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjRfQV9XSURUSCAgICAgICAgICAgICAgICAgMTYgIC8qIERTUDJSWF9FUV9CNF9BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQyMiAoMHg1OEUpIC0gRFNQMiBSWCBFUSBCYW5kIDQgQgorICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjRfQl9NQVNLICAgICAgICAgICAgICAweEZGRkYgIC8qIERTUDJSWF9FUV9CNF9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjRfQl9TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDJSWF9FUV9CNF9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjRfQl9XSURUSCAgICAgICAgICAgICAgICAgMTYgIC8qIERTUDJSWF9FUV9CNF9CIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQyMyAoMHg1OEYpIC0gRFNQMiBSWCBFUSBCYW5kIDQgQworICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjRfQ19NQVNLICAgICAgICAgICAgICAweEZGRkYgIC8qIERTUDJSWF9FUV9CNF9DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjRfQ19TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDJSWF9FUV9CNF9DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjRfQ19XSURUSCAgICAgICAgICAgICAgICAgMTYgIC8qIERTUDJSWF9FUV9CNF9DIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQyNCAoMHg1OTApIC0gRFNQMiBSWCBFUSBCYW5kIDQgUEcKKyAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0I0X1BHX01BU0sgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AyUlhfRVFfQjRfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CNF9QR19TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogRFNQMlJYX0VRX0I0X1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjRfUEdfV0lEVEggICAgICAgICAgICAgICAgMTYgIC8qIERTUDJSWF9FUV9CNF9QRyAtIFsxNTowXSAqLworCisvKgorICogUjE0MjUgKDB4NTkxKSAtIERTUDIgUlggRVEgQmFuZCA1IEEKKyAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0I1X0FfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AyUlhfRVFfQjVfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0I1X0FfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AyUlhfRVFfQjVfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0I1X0FfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AyUlhfRVFfQjVfQSAtIFsxNTowXSAqLworCisvKgorICogUjE0MjYgKDB4NTkyKSAtIERTUDIgUlggRVEgQmFuZCA1IEIKKyAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0I1X0JfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AyUlhfRVFfQjVfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0I1X0JfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AyUlhfRVFfQjVfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0I1X0JfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AyUlhfRVFfQjVfQiAtIFsxNTowXSAqLworCisvKgorICogUjE0MjcgKDB4NTkzKSAtIERTUDIgUlggRVEgQmFuZCA1IFBHCisgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CNV9QR19NQVNLICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMlJYX0VRX0I1X1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjVfUEdfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIERTUDJSWF9FUV9CNV9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0I1X1BHX1dJRFRIICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AyUlhfRVFfQjVfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNTM2ICgweDYwMCkgLSBEQUMxIE1peGVyIFZvbHVtZXMKKyAqLworI2RlZmluZSBXTTg5MTVfQURDUl9EQUMxX1ZPTF9NQVNLICAgICAgICAgICAgICAgMHgwM0UwICAvKiBBRENSX0RBQzFfVk9MIC0gWzk6NV0gKi8KKyNkZWZpbmUgV004OTE1X0FEQ1JfREFDMV9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgNSAgLyogQURDUl9EQUMxX1ZPTCAtIFs5OjVdICovCisjZGVmaW5lIFdNODkxNV9BRENSX0RBQzFfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgIDUgIC8qIEFEQ1JfREFDMV9WT0wgLSBbOTo1XSAqLworI2RlZmluZSBXTTg5MTVfQURDTF9EQUMxX1ZPTF9NQVNLICAgICAgICAgICAgICAgMHgwMDFGICAvKiBBRENMX0RBQzFfVk9MIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTE1X0FEQ0xfREFDMV9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgMCAgLyogQURDTF9EQUMxX1ZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODkxNV9BRENMX0RBQzFfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgIDUgIC8qIEFEQ0xfREFDMV9WT0wgLSBbNDowXSAqLworCisvKgorICogUjE1MzcgKDB4NjAxKSAtIERBQzEgTGVmdCBNaXhlciBSb3V0aW5nCisgKi8KKyNkZWZpbmUgV004OTE1X0FEQ1JfVE9fREFDMUwgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogQURDUl9UT19EQUMxTCAqLworI2RlZmluZSBXTTg5MTVfQURDUl9UT19EQUMxTF9NQVNLICAgICAgICAgICAgICAgMHgwMDIwICAvKiBBRENSX1RPX0RBQzFMICovCisjZGVmaW5lIFdNODkxNV9BRENSX1RPX0RBQzFMX1NISUZUICAgICAgICAgICAgICAgICAgIDUgIC8qIEFEQ1JfVE9fREFDMUwgKi8KKyNkZWZpbmUgV004OTE1X0FEQ1JfVE9fREFDMUxfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQURDUl9UT19EQUMxTCAqLworI2RlZmluZSBXTTg5MTVfQURDTF9UT19EQUMxTCAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBBRENMX1RPX0RBQzFMICovCisjZGVmaW5lIFdNODkxNV9BRENMX1RPX0RBQzFMX01BU0sgICAgICAgICAgICAgICAweDAwMTAgIC8qIEFEQ0xfVE9fREFDMUwgKi8KKyNkZWZpbmUgV004OTE1X0FEQ0xfVE9fREFDMUxfU0hJRlQgICAgICAgICAgICAgICAgICAgNCAgLyogQURDTF9UT19EQUMxTCAqLworI2RlZmluZSBXTTg5MTVfQURDTF9UT19EQUMxTF9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBBRENMX1RPX0RBQzFMICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhMX1RPX0RBQzFMICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERTUDJSWExfVE9fREFDMUwgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWExfVE9fREFDMUxfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogRFNQMlJYTF9UT19EQUMxTCAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYTF9UT19EQUMxTF9TSElGVCAgICAgICAgICAgICAgICAxICAvKiBEU1AyUlhMX1RPX0RBQzFMICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhMX1RPX0RBQzFMX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIERTUDJSWExfVE9fREFDMUwgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWExfVE9fREFDMUwgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRFNQMVJYTF9UT19EQUMxTCAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYTF9UT19EQUMxTF9NQVNLICAgICAgICAgICAgMHgwMDAxICAvKiBEU1AxUlhMX1RPX0RBQzFMICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhMX1RPX0RBQzFMX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIERTUDFSWExfVE9fREFDMUwgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWExfVE9fREFDMUxfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogRFNQMVJYTF9UT19EQUMxTCAqLworCisvKgorICogUjE1MzggKDB4NjAyKSAtIERBQzEgUmlnaHQgTWl4ZXIgUm91dGluZworICovCisjZGVmaW5lIFdNODkxNV9BRENSX1RPX0RBQzFSICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEFEQ1JfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTE1X0FEQ1JfVE9fREFDMVJfTUFTSyAgICAgICAgICAgICAgIDB4MDAyMCAgLyogQURDUl9UT19EQUMxUiAqLworI2RlZmluZSBXTTg5MTVfQURDUl9UT19EQUMxUl9TSElGVCAgICAgICAgICAgICAgICAgICA1ICAvKiBBRENSX1RPX0RBQzFSICovCisjZGVmaW5lIFdNODkxNV9BRENSX1RPX0RBQzFSX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ1JfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTE1X0FEQ0xfVE9fREFDMVIgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQURDTF9UT19EQUMxUiAqLworI2RlZmluZSBXTTg5MTVfQURDTF9UT19EQUMxUl9NQVNLICAgICAgICAgICAgICAgMHgwMDEwICAvKiBBRENMX1RPX0RBQzFSICovCisjZGVmaW5lIFdNODkxNV9BRENMX1RPX0RBQzFSX1NISUZUICAgICAgICAgICAgICAgICAgIDQgIC8qIEFEQ0xfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTE1X0FEQ0xfVE9fREFDMVJfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQURDTF9UT19EQUMxUiAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYUl9UT19EQUMxUiAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEU1AyUlhSX1RPX0RBQzFSICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhSX1RPX0RBQzFSX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIERTUDJSWFJfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWFJfVE9fREFDMVJfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogRFNQMlJYUl9UT19EQUMxUiAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYUl9UT19EQUMxUl9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBEU1AyUlhSX1RPX0RBQzFSICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhSX1RPX0RBQzFSICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERTUDFSWFJfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWFJfVE9fREFDMVJfTUFTSyAgICAgICAgICAgIDB4MDAwMSAgLyogRFNQMVJYUl9UT19EQUMxUiAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYUl9UT19EQUMxUl9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBEU1AxUlhSX1RPX0RBQzFSICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhSX1RPX0RBQzFSX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIERTUDFSWFJfVE9fREFDMVIgKi8KKworLyoKKyAqIFIxNTM5ICgweDYwMykgLSBEQUMyIE1peGVyIFZvbHVtZXMKKyAqLworI2RlZmluZSBXTTg5MTVfQURDUl9EQUMyX1ZPTF9NQVNLICAgICAgICAgICAgICAgMHgwM0UwICAvKiBBRENSX0RBQzJfVk9MIC0gWzk6NV0gKi8KKyNkZWZpbmUgV004OTE1X0FEQ1JfREFDMl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgNSAgLyogQURDUl9EQUMyX1ZPTCAtIFs5OjVdICovCisjZGVmaW5lIFdNODkxNV9BRENSX0RBQzJfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgIDUgIC8qIEFEQ1JfREFDMl9WT0wgLSBbOTo1XSAqLworI2RlZmluZSBXTTg5MTVfQURDTF9EQUMyX1ZPTF9NQVNLICAgICAgICAgICAgICAgMHgwMDFGICAvKiBBRENMX0RBQzJfVk9MIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTE1X0FEQ0xfREFDMl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgMCAgLyogQURDTF9EQUMyX1ZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODkxNV9BRENMX0RBQzJfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgIDUgIC8qIEFEQ0xfREFDMl9WT0wgLSBbNDowXSAqLworCisvKgorICogUjE1NDAgKDB4NjA0KSAtIERBQzIgTGVmdCBNaXhlciBSb3V0aW5nCisgKi8KKyNkZWZpbmUgV004OTE1X0FEQ1JfVE9fREFDMkwgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogQURDUl9UT19EQUMyTCAqLworI2RlZmluZSBXTTg5MTVfQURDUl9UT19EQUMyTF9NQVNLICAgICAgICAgICAgICAgMHgwMDIwICAvKiBBRENSX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODkxNV9BRENSX1RPX0RBQzJMX1NISUZUICAgICAgICAgICAgICAgICAgIDUgIC8qIEFEQ1JfVE9fREFDMkwgKi8KKyNkZWZpbmUgV004OTE1X0FEQ1JfVE9fREFDMkxfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQURDUl9UT19EQUMyTCAqLworI2RlZmluZSBXTTg5MTVfQURDTF9UT19EQUMyTCAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBBRENMX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODkxNV9BRENMX1RPX0RBQzJMX01BU0sgICAgICAgICAgICAgICAweDAwMTAgIC8qIEFEQ0xfVE9fREFDMkwgKi8KKyNkZWZpbmUgV004OTE1X0FEQ0xfVE9fREFDMkxfU0hJRlQgICAgICAgICAgICAgICAgICAgNCAgLyogQURDTF9UT19EQUMyTCAqLworI2RlZmluZSBXTTg5MTVfQURDTF9UT19EQUMyTF9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBBRENMX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhMX1RPX0RBQzJMICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERTUDJSWExfVE9fREFDMkwgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWExfVE9fREFDMkxfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogRFNQMlJYTF9UT19EQUMyTCAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYTF9UT19EQUMyTF9TSElGVCAgICAgICAgICAgICAgICAxICAvKiBEU1AyUlhMX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhMX1RPX0RBQzJMX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIERTUDJSWExfVE9fREFDMkwgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWExfVE9fREFDMkwgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRFNQMVJYTF9UT19EQUMyTCAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYTF9UT19EQUMyTF9NQVNLICAgICAgICAgICAgMHgwMDAxICAvKiBEU1AxUlhMX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhMX1RPX0RBQzJMX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIERTUDFSWExfVE9fREFDMkwgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWExfVE9fREFDMkxfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogRFNQMVJYTF9UT19EQUMyTCAqLworCisvKgorICogUjE1NDEgKDB4NjA1KSAtIERBQzIgUmlnaHQgTWl4ZXIgUm91dGluZworICovCisjZGVmaW5lIFdNODkxNV9BRENSX1RPX0RBQzJSICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEFEQ1JfVE9fREFDMlIgKi8KKyNkZWZpbmUgV004OTE1X0FEQ1JfVE9fREFDMlJfTUFTSyAgICAgICAgICAgICAgIDB4MDAyMCAgLyogQURDUl9UT19EQUMyUiAqLworI2RlZmluZSBXTTg5MTVfQURDUl9UT19EQUMyUl9TSElGVCAgICAgICAgICAgICAgICAgICA1ICAvKiBBRENSX1RPX0RBQzJSICovCisjZGVmaW5lIFdNODkxNV9BRENSX1RPX0RBQzJSX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ1JfVE9fREFDMlIgKi8KKyNkZWZpbmUgV004OTE1X0FEQ0xfVE9fREFDMlIgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQURDTF9UT19EQUMyUiAqLworI2RlZmluZSBXTTg5MTVfQURDTF9UT19EQUMyUl9NQVNLICAgICAgICAgICAgICAgMHgwMDEwICAvKiBBRENMX1RPX0RBQzJSICovCisjZGVmaW5lIFdNODkxNV9BRENMX1RPX0RBQzJSX1NISUZUICAgICAgICAgICAgICAgICAgIDQgIC8qIEFEQ0xfVE9fREFDMlIgKi8KKyNkZWZpbmUgV004OTE1X0FEQ0xfVE9fREFDMlJfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQURDTF9UT19EQUMyUiAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYUl9UT19EQUMyUiAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEU1AyUlhSX1RPX0RBQzJSICovCisjZGVmaW5lIFdNODkxNV9EU1AyUlhSX1RPX0RBQzJSX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIERTUDJSWFJfVE9fREFDMlIgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJSWFJfVE9fREFDMlJfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogRFNQMlJYUl9UT19EQUMyUiAqLworI2RlZmluZSBXTTg5MTVfRFNQMlJYUl9UT19EQUMyUl9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBEU1AyUlhSX1RPX0RBQzJSICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhSX1RPX0RBQzJSICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERTUDFSWFJfVE9fREFDMlIgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFSWFJfVE9fREFDMlJfTUFTSyAgICAgICAgICAgIDB4MDAwMSAgLyogRFNQMVJYUl9UT19EQUMyUiAqLworI2RlZmluZSBXTTg5MTVfRFNQMVJYUl9UT19EQUMyUl9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBEU1AxUlhSX1RPX0RBQzJSICovCisjZGVmaW5lIFdNODkxNV9EU1AxUlhSX1RPX0RBQzJSX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIERTUDFSWFJfVE9fREFDMlIgKi8KKworLyoKKyAqIFIxNTQyICgweDYwNikgLSBEU1AxIFRYIExlZnQgTWl4ZXIgUm91dGluZworICovCisjZGVmaW5lIFdNODkxNV9BREMxTF9UT19EU1AxVFhMICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFEQzFMX1RPX0RTUDFUWEwgKi8KKyNkZWZpbmUgV004OTE1X0FEQzFMX1RPX0RTUDFUWExfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogQURDMUxfVE9fRFNQMVRYTCAqLworI2RlZmluZSBXTTg5MTVfQURDMUxfVE9fRFNQMVRYTF9TSElGVCAgICAgICAgICAgICAgICAxICAvKiBBREMxTF9UT19EU1AxVFhMICovCisjZGVmaW5lIFdNODkxNV9BREMxTF9UT19EU1AxVFhMX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFEQzFMX1RPX0RTUDFUWEwgKi8KKyNkZWZpbmUgV004OTE1X0RBQ0xfVE9fRFNQMVRYTCAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogREFDTF9UT19EU1AxVFhMICovCisjZGVmaW5lIFdNODkxNV9EQUNMX1RPX0RTUDFUWExfTUFTSyAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ0xfVE9fRFNQMVRYTCAqLworI2RlZmluZSBXTTg5MTVfREFDTF9UT19EU1AxVFhMX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBEQUNMX1RPX0RTUDFUWEwgKi8KKyNkZWZpbmUgV004OTE1X0RBQ0xfVE9fRFNQMVRYTF9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogREFDTF9UT19EU1AxVFhMICovCisKKy8qCisgKiBSMTU0MyAoMHg2MDcpIC0gRFNQMSBUWCBSaWdodCBNaXhlciBSb3V0aW5nCisgKi8KKyNkZWZpbmUgV004OTE1X0FEQzFSX1RPX0RTUDFUWFIgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQURDMVJfVE9fRFNQMVRYUiAqLworI2RlZmluZSBXTTg5MTVfQURDMVJfVE9fRFNQMVRYUl9NQVNLICAgICAgICAgICAgMHgwMDAyICAvKiBBREMxUl9UT19EU1AxVFhSICovCisjZGVmaW5lIFdNODkxNV9BREMxUl9UT19EU1AxVFhSX1NISUZUICAgICAgICAgICAgICAgIDEgIC8qIEFEQzFSX1RPX0RTUDFUWFIgKi8KKyNkZWZpbmUgV004OTE1X0FEQzFSX1RPX0RTUDFUWFJfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQURDMVJfVE9fRFNQMVRYUiAqLworI2RlZmluZSBXTTg5MTVfREFDUl9UT19EU1AxVFhSICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQUNSX1RPX0RTUDFUWFIgKi8KKyNkZWZpbmUgV004OTE1X0RBQ1JfVE9fRFNQMVRYUl9NQVNLICAgICAgICAgICAgIDB4MDAwMSAgLyogREFDUl9UT19EU1AxVFhSICovCisjZGVmaW5lIFdNODkxNV9EQUNSX1RPX0RTUDFUWFJfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIERBQ1JfVE9fRFNQMVRYUiAqLworI2RlZmluZSBXTTg5MTVfREFDUl9UT19EU1AxVFhSX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBEQUNSX1RPX0RTUDFUWFIgKi8KKworLyoKKyAqIFIxNTQ0ICgweDYwOCkgLSBEU1AyIFRYIExlZnQgTWl4ZXIgUm91dGluZworICovCisjZGVmaW5lIFdNODkxNV9BREMyTF9UT19EU1AyVFhMICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFEQzJMX1RPX0RTUDJUWEwgKi8KKyNkZWZpbmUgV004OTE1X0FEQzJMX1RPX0RTUDJUWExfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogQURDMkxfVE9fRFNQMlRYTCAqLworI2RlZmluZSBXTTg5MTVfQURDMkxfVE9fRFNQMlRYTF9TSElGVCAgICAgICAgICAgICAgICAxICAvKiBBREMyTF9UT19EU1AyVFhMICovCisjZGVmaW5lIFdNODkxNV9BREMyTF9UT19EU1AyVFhMX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFEQzJMX1RPX0RTUDJUWEwgKi8KKyNkZWZpbmUgV004OTE1X0RBQ0xfVE9fRFNQMlRYTCAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogREFDTF9UT19EU1AyVFhMICovCisjZGVmaW5lIFdNODkxNV9EQUNMX1RPX0RTUDJUWExfTUFTSyAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ0xfVE9fRFNQMlRYTCAqLworI2RlZmluZSBXTTg5MTVfREFDTF9UT19EU1AyVFhMX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBEQUNMX1RPX0RTUDJUWEwgKi8KKyNkZWZpbmUgV004OTE1X0RBQ0xfVE9fRFNQMlRYTF9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogREFDTF9UT19EU1AyVFhMICovCisKKy8qCisgKiBSMTU0NSAoMHg2MDkpIC0gRFNQMiBUWCBSaWdodCBNaXhlciBSb3V0aW5nCisgKi8KKyNkZWZpbmUgV004OTE1X0FEQzJSX1RPX0RTUDJUWFIgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQURDMlJfVE9fRFNQMlRYUiAqLworI2RlZmluZSBXTTg5MTVfQURDMlJfVE9fRFNQMlRYUl9NQVNLICAgICAgICAgICAgMHgwMDAyICAvKiBBREMyUl9UT19EU1AyVFhSICovCisjZGVmaW5lIFdNODkxNV9BREMyUl9UT19EU1AyVFhSX1NISUZUICAgICAgICAgICAgICAgIDEgIC8qIEFEQzJSX1RPX0RTUDJUWFIgKi8KKyNkZWZpbmUgV004OTE1X0FEQzJSX1RPX0RTUDJUWFJfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQURDMlJfVE9fRFNQMlRYUiAqLworI2RlZmluZSBXTTg5MTVfREFDUl9UT19EU1AyVFhSICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQUNSX1RPX0RTUDJUWFIgKi8KKyNkZWZpbmUgV004OTE1X0RBQ1JfVE9fRFNQMlRYUl9NQVNLICAgICAgICAgICAgIDB4MDAwMSAgLyogREFDUl9UT19EU1AyVFhSICovCisjZGVmaW5lIFdNODkxNV9EQUNSX1RPX0RTUDJUWFJfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIERBQ1JfVE9fRFNQMlRYUiAqLworI2RlZmluZSBXTTg5MTVfREFDUl9UT19EU1AyVFhSX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBEQUNSX1RPX0RTUDJUWFIgKi8KKworLyoKKyAqIFIxNTQ2ICgweDYwQSkgLSBEU1AgVFggTWl4ZXIgU2VsZWN0CisgKi8KKyNkZWZpbmUgV004OTE1X0RBQ19UT19EU1BUWF9TUkMgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogREFDX1RPX0RTUFRYX1NSQyAqLworI2RlZmluZSBXTTg5MTVfREFDX1RPX0RTUFRYX1NSQ19NQVNLICAgICAgICAgICAgMHgwMDAxICAvKiBEQUNfVE9fRFNQVFhfU1JDICovCisjZGVmaW5lIFdNODkxNV9EQUNfVE9fRFNQVFhfU1JDX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIERBQ19UT19EU1BUWF9TUkMgKi8KKyNkZWZpbmUgV004OTE1X0RBQ19UT19EU1BUWF9TUkNfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogREFDX1RPX0RTUFRYX1NSQyAqLworCisvKgorICogUjE1NTIgKDB4NjEwKSAtIERBQyBTb2Z0bXV0ZQorICovCisjZGVmaW5lIFdNODkxNV9EQUNfU09GVE1VVEVNT0RFICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERBQ19TT0ZUTVVURU1PREUgKi8KKyNkZWZpbmUgV004OTE1X0RBQ19TT0ZUTVVURU1PREVfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogREFDX1NPRlRNVVRFTU9ERSAqLworI2RlZmluZSBXTTg5MTVfREFDX1NPRlRNVVRFTU9ERV9TSElGVCAgICAgICAgICAgICAgICAxICAvKiBEQUNfU09GVE1VVEVNT0RFICovCisjZGVmaW5lIFdNODkxNV9EQUNfU09GVE1VVEVNT0RFX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIERBQ19TT0ZUTVVURU1PREUgKi8KKyNkZWZpbmUgV004OTE1X0RBQ19NVVRFUkFURSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogREFDX01VVEVSQVRFICovCisjZGVmaW5lIFdNODkxNV9EQUNfTVVURVJBVEVfTUFTSyAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ19NVVRFUkFURSAqLworI2RlZmluZSBXTTg5MTVfREFDX01VVEVSQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAwICAvKiBEQUNfTVVURVJBVEUgKi8KKyNkZWZpbmUgV004OTE1X0RBQ19NVVRFUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDX01VVEVSQVRFICovCisKKy8qCisgKiBSMTU2OCAoMHg2MjApIC0gT3ZlcnNhbXBsaW5nCisgKi8KKyNkZWZpbmUgV004OTE1X1NQS19PU1IxMjggICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogU1BLX09TUjEyOCAqLworI2RlZmluZSBXTTg5MTVfU1BLX09TUjEyOF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBTUEtfT1NSMTI4ICovCisjZGVmaW5lIFdNODkxNV9TUEtfT1NSMTI4X1NISUZUICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFNQS19PU1IxMjggKi8KKyNkZWZpbmUgV004OTE1X1NQS19PU1IxMjhfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1BLX09TUjEyOCAqLworI2RlZmluZSBXTTg5MTVfRE1JQ19PU1I2NCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBETUlDX09TUjY0ICovCisjZGVmaW5lIFdNODkxNV9ETUlDX09TUjY0X01BU0sgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERNSUNfT1NSNjQgKi8KKyNkZWZpbmUgV004OTE1X0RNSUNfT1NSNjRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMiAgLyogRE1JQ19PU1I2NCAqLworI2RlZmluZSBXTTg5MTVfRE1JQ19PU1I2NF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBETUlDX09TUjY0ICovCisjZGVmaW5lIFdNODkxNV9BRENfT1NSMTI4ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFEQ19PU1IxMjggKi8KKyNkZWZpbmUgV004OTE1X0FEQ19PU1IxMjhfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQURDX09TUjEyOCAqLworI2RlZmluZSBXTTg5MTVfQURDX09TUjEyOF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENfT1NSMTI4ICovCisjZGVmaW5lIFdNODkxNV9BRENfT1NSMTI4X1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ19PU1IxMjggKi8KKyNkZWZpbmUgV004OTE1X0RBQ19PU1IxMjggICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogREFDX09TUjEyOCAqLworI2RlZmluZSBXTTg5MTVfREFDX09TUjEyOF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQUNfT1NSMTI4ICovCisjZGVmaW5lIFdNODkxNV9EQUNfT1NSMTI4X1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERBQ19PU1IxMjggKi8KKyNkZWZpbmUgV004OTE1X0RBQ19PU1IxMjhfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDX09TUjEyOCAqLworCisvKgorICogUjE1NjkgKDB4NjIxKSAtIFNpZGV0b25lCisgKi8KKyNkZWZpbmUgV004OTE1X1NUX0xQRiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogU1RfTFBGICovCisjZGVmaW5lIFdNODkxNV9TVF9MUEZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIFNUX0xQRiAqLworI2RlZmluZSBXTTg5MTVfU1RfTFBGX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDEyICAvKiBTVF9MUEYgKi8KKyNkZWZpbmUgV004OTE1X1NUX0xQRl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1RfTFBGICovCisjZGVmaW5lIFdNODkxNV9TVF9IUEZfQ1VUX01BU0sgICAgICAgICAgICAgICAgICAweDAzODAgIC8qIFNUX0hQRl9DVVQgLSBbOTo3XSAqLworI2RlZmluZSBXTTg5MTVfU1RfSFBGX0NVVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBTVF9IUEZfQ1VUIC0gWzk6N10gKi8KKyNkZWZpbmUgV004OTE1X1NUX0hQRl9DVVRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMyAgLyogU1RfSFBGX0NVVCAtIFs5OjddICovCisjZGVmaW5lIFdNODkxNV9TVF9IUEYgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFNUX0hQRiAqLworI2RlZmluZSBXTTg5MTVfU1RfSFBGX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBTVF9IUEYgKi8KKyNkZWZpbmUgV004OTE1X1NUX0hQRl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogU1RfSFBGICovCisjZGVmaW5lIFdNODkxNV9TVF9IUEZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNUX0hQRiAqLworI2RlZmluZSBXTTg5MTVfU1RSX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBTVFJfU0VMICovCisjZGVmaW5lIFdNODkxNV9TVFJfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIFNUUl9TRUwgKi8KKyNkZWZpbmUgV004OTE1X1NUUl9TRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1RSX1NFTCAqLworI2RlZmluZSBXTTg5MTVfU1RSX1NFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTVFJfU0VMICovCisjZGVmaW5lIFdNODkxNV9TVExfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFNUTF9TRUwgKi8KKyNkZWZpbmUgV004OTE1X1NUTF9TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogU1RMX1NFTCAqLworI2RlZmluZSBXTTg5MTVfU1RMX1NFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBTVExfU0VMICovCisjZGVmaW5lIFdNODkxNV9TVExfU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNUTF9TRUwgKi8KKworLyoKKyAqIFIxNzkyICgweDcwMCkgLSBHUElPIDEKKyAqLworI2RlZmluZSBXTTg5MTVfR1AxX0RJUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBHUDFfRElSICovCisjZGVmaW5lIFdNODkxNV9HUDFfRElSX01BU0sgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIEdQMV9ESVIgKi8KKyNkZWZpbmUgV004OTE1X0dQMV9ESVJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxNSAgLyogR1AxX0RJUiAqLworI2RlZmluZSBXTTg5MTVfR1AxX0RJUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDFfRElSICovCisjZGVmaW5lIFdNODkxNV9HUDFfUFUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIEdQMV9QVSAqLworI2RlZmluZSBXTTg5MTVfR1AxX1BVX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBHUDFfUFUgKi8KKyNkZWZpbmUgV004OTE1X0dQMV9QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAxNCAgLyogR1AxX1BVICovCisjZGVmaW5lIFdNODkxNV9HUDFfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQMV9QVSAqLworI2RlZmluZSBXTTg5MTVfR1AxX1BEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBHUDFfUEQgKi8KKyNkZWZpbmUgV004OTE1X0dQMV9QRF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogR1AxX1BEICovCisjZGVmaW5lIFdNODkxNV9HUDFfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTMgIC8qIEdQMV9QRCAqLworI2RlZmluZSBXTTg5MTVfR1AxX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDFfUEQgKi8KKyNkZWZpbmUgV004OTE1X0dQMV9QT0wgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogR1AxX1BPTCAqLworI2RlZmluZSBXTTg5MTVfR1AxX1BPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBHUDFfUE9MICovCisjZGVmaW5lIFdNODkxNV9HUDFfUE9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTAgIC8qIEdQMV9QT0wgKi8KKyNkZWZpbmUgV004OTE1X0dQMV9QT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AxX1BPTCAqLworI2RlZmluZSBXTTg5MTVfR1AxX09QX0NGRyAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBHUDFfT1BfQ0ZHICovCisjZGVmaW5lIFdNODkxNV9HUDFfT1BfQ0ZHX01BU0sgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEdQMV9PUF9DRkcgKi8KKyNkZWZpbmUgV004OTE1X0dQMV9PUF9DRkdfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOSAgLyogR1AxX09QX0NGRyAqLworI2RlZmluZSBXTTg5MTVfR1AxX09QX0NGR19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDFfT1BfQ0ZHICovCisjZGVmaW5lIFdNODkxNV9HUDFfREIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEdQMV9EQiAqLworI2RlZmluZSBXTTg5MTVfR1AxX0RCX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBHUDFfREIgKi8KKyNkZWZpbmUgV004OTE1X0dQMV9EQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogR1AxX0RCICovCisjZGVmaW5lIFdNODkxNV9HUDFfREJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQMV9EQiAqLworI2RlZmluZSBXTTg5MTVfR1AxX0xWTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBHUDFfTFZMICovCisjZGVmaW5lIFdNODkxNV9HUDFfTFZMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEdQMV9MVkwgKi8KKyNkZWZpbmUgV004OTE1X0dQMV9MVkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogR1AxX0xWTCAqLworI2RlZmluZSBXTTg5MTVfR1AxX0xWTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDFfTFZMICovCisjZGVmaW5lIFdNODkxNV9HUDFfRk5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMEYgIC8qIEdQMV9GTiAtIFszOjBdICovCisjZGVmaW5lIFdNODkxNV9HUDFfRk5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEdQMV9GTiAtIFszOjBdICovCisjZGVmaW5lIFdNODkxNV9HUDFfRk5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEdQMV9GTiAtIFszOjBdICovCisKKy8qCisgKiBSMTc5MyAoMHg3MDEpIC0gR1BJTyAyCisgKi8KKyNkZWZpbmUgV004OTE1X0dQMl9ESVIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogR1AyX0RJUiAqLworI2RlZmluZSBXTTg5MTVfR1AyX0RJUl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBHUDJfRElSICovCisjZGVmaW5lIFdNODkxNV9HUDJfRElSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTUgIC8qIEdQMl9ESVIgKi8KKyNkZWZpbmUgV004OTE1X0dQMl9ESVJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AyX0RJUiAqLworI2RlZmluZSBXTTg5MTVfR1AyX1BVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBHUDJfUFUgKi8KKyNkZWZpbmUgV004OTE1X0dQMl9QVV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogR1AyX1BVICovCisjZGVmaW5lIFdNODkxNV9HUDJfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTQgIC8qIEdQMl9QVSAqLworI2RlZmluZSBXTTg5MTVfR1AyX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDJfUFUgKi8KKyNkZWZpbmUgV004OTE1X0dQMl9QRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogR1AyX1BEICovCisjZGVmaW5lIFdNODkxNV9HUDJfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEdQMl9QRCAqLworI2RlZmluZSBXTTg5MTVfR1AyX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDEzICAvKiBHUDJfUEQgKi8KKyNkZWZpbmUgV004OTE1X0dQMl9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AyX1BEICovCisjZGVmaW5lIFdNODkxNV9HUDJfUE9MICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIEdQMl9QT0wgKi8KKyNkZWZpbmUgV004OTE1X0dQMl9QT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogR1AyX1BPTCAqLworI2RlZmluZSBXTTg5MTVfR1AyX1BPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEwICAvKiBHUDJfUE9MICovCisjZGVmaW5lIFdNODkxNV9HUDJfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQMl9QT0wgKi8KKyNkZWZpbmUgV004OTE1X0dQMl9PUF9DRkcgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogR1AyX09QX0NGRyAqLworI2RlZmluZSBXTTg5MTVfR1AyX09QX0NGR19NQVNLICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBHUDJfT1BfQ0ZHICovCisjZGVmaW5lIFdNODkxNV9HUDJfT1BfQ0ZHX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIEdQMl9PUF9DRkcgKi8KKyNkZWZpbmUgV004OTE1X0dQMl9PUF9DRkdfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AyX09QX0NGRyAqLworI2RlZmluZSBXTTg5MTVfR1AyX0RCICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBHUDJfREIgKi8KKyNkZWZpbmUgV004OTE1X0dQMl9EQl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogR1AyX0RCICovCisjZGVmaW5lIFdNODkxNV9HUDJfREJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEdQMl9EQiAqLworI2RlZmluZSBXTTg5MTVfR1AyX0RCX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDJfREIgKi8KKyNkZWZpbmUgV004OTE1X0dQMl9MVkwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogR1AyX0xWTCAqLworI2RlZmluZSBXTTg5MTVfR1AyX0xWTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBHUDJfTFZMICovCisjZGVmaW5lIFdNODkxNV9HUDJfTFZMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIEdQMl9MVkwgKi8KKyNkZWZpbmUgV004OTE1X0dQMl9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AyX0xWTCAqLworI2RlZmluZSBXTTg5MTVfR1AyX0ZOX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBHUDJfRk4gLSBbMzowXSAqLworI2RlZmluZSBXTTg5MTVfR1AyX0ZOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBHUDJfRk4gLSBbMzowXSAqLworI2RlZmluZSBXTTg5MTVfR1AyX0ZOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBHUDJfRk4gLSBbMzowXSAqLworCisvKgorICogUjE3OTQgKDB4NzAyKSAtIEdQSU8gMworICovCisjZGVmaW5lIFdNODkxNV9HUDNfRElSICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIEdQM19ESVIgKi8KKyNkZWZpbmUgV004OTE1X0dQM19ESVJfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogR1AzX0RJUiAqLworI2RlZmluZSBXTTg5MTVfR1AzX0RJUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBHUDNfRElSICovCisjZGVmaW5lIFdNODkxNV9HUDNfRElSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQM19ESVIgKi8KKyNkZWZpbmUgV004OTE1X0dQM19QVSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogR1AzX1BVICovCisjZGVmaW5lIFdNODkxNV9HUDNfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIEdQM19QVSAqLworI2RlZmluZSBXTTg5MTVfR1AzX1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDE0ICAvKiBHUDNfUFUgKi8KKyNkZWZpbmUgV004OTE1X0dQM19QVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AzX1BVICovCisjZGVmaW5lIFdNODkxNV9HUDNfUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEdQM19QRCAqLworI2RlZmluZSBXTTg5MTVfR1AzX1BEX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBHUDNfUEQgKi8KKyNkZWZpbmUgV004OTE1X0dQM19QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAxMyAgLyogR1AzX1BEICovCisjZGVmaW5lIFdNODkxNV9HUDNfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQM19QRCAqLworI2RlZmluZSBXTTg5MTVfR1AzX1BPTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBHUDNfUE9MICovCisjZGVmaW5lIFdNODkxNV9HUDNfUE9MX01BU0sgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIEdQM19QT0wgKi8KKyNkZWZpbmUgV004OTE1X0dQM19QT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxMCAgLyogR1AzX1BPTCAqLworI2RlZmluZSBXTTg5MTVfR1AzX1BPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDNfUE9MICovCisjZGVmaW5lIFdNODkxNV9HUDNfT1BfQ0ZHICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEdQM19PUF9DRkcgKi8KKyNkZWZpbmUgV004OTE1X0dQM19PUF9DRkdfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogR1AzX09QX0NGRyAqLworI2RlZmluZSBXTTg5MTVfR1AzX09QX0NGR19TSElGVCAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBHUDNfT1BfQ0ZHICovCisjZGVmaW5lIFdNODkxNV9HUDNfT1BfQ0ZHX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQM19PUF9DRkcgKi8KKyNkZWZpbmUgV004OTE1X0dQM19EQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogR1AzX0RCICovCisjZGVmaW5lIFdNODkxNV9HUDNfREJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEdQM19EQiAqLworI2RlZmluZSBXTTg5MTVfR1AzX0RCX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBHUDNfREIgKi8KKyNkZWZpbmUgV004OTE1X0dQM19EQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AzX0RCICovCisjZGVmaW5lIFdNODkxNV9HUDNfTFZMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEdQM19MVkwgKi8KKyNkZWZpbmUgV004OTE1X0dQM19MVkxfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogR1AzX0xWTCAqLworI2RlZmluZSBXTTg5MTVfR1AzX0xWTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBHUDNfTFZMICovCisjZGVmaW5lIFdNODkxNV9HUDNfTFZMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQM19MVkwgKi8KKyNkZWZpbmUgV004OTE1X0dQM19GTl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRiAgLyogR1AzX0ZOIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTE1X0dQM19GTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogR1AzX0ZOIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTE1X0dQM19GTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogR1AzX0ZOIC0gWzM6MF0gKi8KKworLyoKKyAqIFIxNzk1ICgweDcwMykgLSBHUElPIDQKKyAqLworI2RlZmluZSBXTTg5MTVfR1A0X0RJUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBHUDRfRElSICovCisjZGVmaW5lIFdNODkxNV9HUDRfRElSX01BU0sgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIEdQNF9ESVIgKi8KKyNkZWZpbmUgV004OTE1X0dQNF9ESVJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxNSAgLyogR1A0X0RJUiAqLworI2RlZmluZSBXTTg5MTVfR1A0X0RJUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDRfRElSICovCisjZGVmaW5lIFdNODkxNV9HUDRfUFUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIEdQNF9QVSAqLworI2RlZmluZSBXTTg5MTVfR1A0X1BVX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBHUDRfUFUgKi8KKyNkZWZpbmUgV004OTE1X0dQNF9QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAxNCAgLyogR1A0X1BVICovCisjZGVmaW5lIFdNODkxNV9HUDRfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQNF9QVSAqLworI2RlZmluZSBXTTg5MTVfR1A0X1BEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBHUDRfUEQgKi8KKyNkZWZpbmUgV004OTE1X0dQNF9QRF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogR1A0X1BEICovCisjZGVmaW5lIFdNODkxNV9HUDRfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTMgIC8qIEdQNF9QRCAqLworI2RlZmluZSBXTTg5MTVfR1A0X1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDRfUEQgKi8KKyNkZWZpbmUgV004OTE1X0dQNF9QT0wgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogR1A0X1BPTCAqLworI2RlZmluZSBXTTg5MTVfR1A0X1BPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBHUDRfUE9MICovCisjZGVmaW5lIFdNODkxNV9HUDRfUE9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTAgIC8qIEdQNF9QT0wgKi8KKyNkZWZpbmUgV004OTE1X0dQNF9QT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1A0X1BPTCAqLworI2RlZmluZSBXTTg5MTVfR1A0X09QX0NGRyAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBHUDRfT1BfQ0ZHICovCisjZGVmaW5lIFdNODkxNV9HUDRfT1BfQ0ZHX01BU0sgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEdQNF9PUF9DRkcgKi8KKyNkZWZpbmUgV004OTE1X0dQNF9PUF9DRkdfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOSAgLyogR1A0X09QX0NGRyAqLworI2RlZmluZSBXTTg5MTVfR1A0X09QX0NGR19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDRfT1BfQ0ZHICovCisjZGVmaW5lIFdNODkxNV9HUDRfREIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEdQNF9EQiAqLworI2RlZmluZSBXTTg5MTVfR1A0X0RCX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBHUDRfREIgKi8KKyNkZWZpbmUgV004OTE1X0dQNF9EQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogR1A0X0RCICovCisjZGVmaW5lIFdNODkxNV9HUDRfREJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQNF9EQiAqLworI2RlZmluZSBXTTg5MTVfR1A0X0xWTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBHUDRfTFZMICovCisjZGVmaW5lIFdNODkxNV9HUDRfTFZMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEdQNF9MVkwgKi8KKyNkZWZpbmUgV004OTE1X0dQNF9MVkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogR1A0X0xWTCAqLworI2RlZmluZSBXTTg5MTVfR1A0X0xWTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDRfTFZMICovCisjZGVmaW5lIFdNODkxNV9HUDRfRk5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMEYgIC8qIEdQNF9GTiAtIFszOjBdICovCisjZGVmaW5lIFdNODkxNV9HUDRfRk5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEdQNF9GTiAtIFszOjBdICovCisjZGVmaW5lIFdNODkxNV9HUDRfRk5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEdQNF9GTiAtIFszOjBdICovCisKKy8qCisgKiBSMTc5NiAoMHg3MDQpIC0gR1BJTyA1CisgKi8KKyNkZWZpbmUgV004OTE1X0dQNV9ESVIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogR1A1X0RJUiAqLworI2RlZmluZSBXTTg5MTVfR1A1X0RJUl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBHUDVfRElSICovCisjZGVmaW5lIFdNODkxNV9HUDVfRElSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTUgIC8qIEdQNV9ESVIgKi8KKyNkZWZpbmUgV004OTE1X0dQNV9ESVJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1A1X0RJUiAqLworI2RlZmluZSBXTTg5MTVfR1A1X1BVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBHUDVfUFUgKi8KKyNkZWZpbmUgV004OTE1X0dQNV9QVV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogR1A1X1BVICovCisjZGVmaW5lIFdNODkxNV9HUDVfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTQgIC8qIEdQNV9QVSAqLworI2RlZmluZSBXTTg5MTVfR1A1X1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDVfUFUgKi8KKyNkZWZpbmUgV004OTE1X0dQNV9QRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogR1A1X1BEICovCisjZGVmaW5lIFdNODkxNV9HUDVfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEdQNV9QRCAqLworI2RlZmluZSBXTTg5MTVfR1A1X1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDEzICAvKiBHUDVfUEQgKi8KKyNkZWZpbmUgV004OTE1X0dQNV9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1A1X1BEICovCisjZGVmaW5lIFdNODkxNV9HUDVfUE9MICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIEdQNV9QT0wgKi8KKyNkZWZpbmUgV004OTE1X0dQNV9QT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogR1A1X1BPTCAqLworI2RlZmluZSBXTTg5MTVfR1A1X1BPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEwICAvKiBHUDVfUE9MICovCisjZGVmaW5lIFdNODkxNV9HUDVfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQNV9QT0wgKi8KKyNkZWZpbmUgV004OTE1X0dQNV9PUF9DRkcgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogR1A1X09QX0NGRyAqLworI2RlZmluZSBXTTg5MTVfR1A1X09QX0NGR19NQVNLICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBHUDVfT1BfQ0ZHICovCisjZGVmaW5lIFdNODkxNV9HUDVfT1BfQ0ZHX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIEdQNV9PUF9DRkcgKi8KKyNkZWZpbmUgV004OTE1X0dQNV9PUF9DRkdfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1A1X09QX0NGRyAqLworI2RlZmluZSBXTTg5MTVfR1A1X0RCICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBHUDVfREIgKi8KKyNkZWZpbmUgV004OTE1X0dQNV9EQl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogR1A1X0RCICovCisjZGVmaW5lIFdNODkxNV9HUDVfREJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEdQNV9EQiAqLworI2RlZmluZSBXTTg5MTVfR1A1X0RCX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDVfREIgKi8KKyNkZWZpbmUgV004OTE1X0dQNV9MVkwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogR1A1X0xWTCAqLworI2RlZmluZSBXTTg5MTVfR1A1X0xWTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBHUDVfTFZMICovCisjZGVmaW5lIFdNODkxNV9HUDVfTFZMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIEdQNV9MVkwgKi8KKyNkZWZpbmUgV004OTE1X0dQNV9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1A1X0xWTCAqLworI2RlZmluZSBXTTg5MTVfR1A1X0ZOX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBHUDVfRk4gLSBbMzowXSAqLworI2RlZmluZSBXTTg5MTVfR1A1X0ZOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBHUDVfRk4gLSBbMzowXSAqLworI2RlZmluZSBXTTg5MTVfR1A1X0ZOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBHUDVfRk4gLSBbMzowXSAqLworCisvKgorICogUjE4MjQgKDB4NzIwKSAtIFB1bGwgQ29udHJvbCAoMSkKKyAqLworI2RlZmluZSBXTTg5MTVfRE1JQ0RBVDJfUEQgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBETUlDREFUMl9QRCAqLworI2RlZmluZSBXTTg5MTVfRE1JQ0RBVDJfUERfTUFTSyAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBETUlDREFUMl9QRCAqLworI2RlZmluZSBXTTg5MTVfRE1JQ0RBVDJfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgIDEyICAvKiBETUlDREFUMl9QRCAqLworI2RlZmluZSBXTTg5MTVfRE1JQ0RBVDJfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBETUlDREFUMl9QRCAqLworI2RlZmluZSBXTTg5MTVfRE1JQ0RBVDFfUEQgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBETUlDREFUMV9QRCAqLworI2RlZmluZSBXTTg5MTVfRE1JQ0RBVDFfUERfTUFTSyAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBETUlDREFUMV9QRCAqLworI2RlZmluZSBXTTg5MTVfRE1JQ0RBVDFfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgIDEwICAvKiBETUlDREFUMV9QRCAqLworI2RlZmluZSBXTTg5MTVfRE1JQ0RBVDFfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBETUlDREFUMV9QRCAqLworI2RlZmluZSBXTTg5MTVfTUNMSzJfUFUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBNQ0xLMl9QVSAqLworI2RlZmluZSBXTTg5MTVfTUNMSzJfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBNQ0xLMl9QVSAqLworI2RlZmluZSBXTTg5MTVfTUNMSzJfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBNQ0xLMl9QVSAqLworI2RlZmluZSBXTTg5MTVfTUNMSzJfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNQ0xLMl9QVSAqLworI2RlZmluZSBXTTg5MTVfTUNMSzJfUEQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBNQ0xLMl9QRCAqLworI2RlZmluZSBXTTg5MTVfTUNMSzJfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBNQ0xLMl9QRCAqLworI2RlZmluZSBXTTg5MTVfTUNMSzJfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBNQ0xLMl9QRCAqLworI2RlZmluZSBXTTg5MTVfTUNMSzJfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNQ0xLMl9QRCAqLworI2RlZmluZSBXTTg5MTVfTUNMSzFfUFUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBNQ0xLMV9QVSAqLworI2RlZmluZSBXTTg5MTVfTUNMSzFfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBNQ0xLMV9QVSAqLworI2RlZmluZSBXTTg5MTVfTUNMSzFfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBNQ0xLMV9QVSAqLworI2RlZmluZSBXTTg5MTVfTUNMSzFfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNQ0xLMV9QVSAqLworI2RlZmluZSBXTTg5MTVfTUNMSzFfUEQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBNQ0xLMV9QRCAqLworI2RlZmluZSBXTTg5MTVfTUNMSzFfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBNQ0xLMV9QRCAqLworI2RlZmluZSBXTTg5MTVfTUNMSzFfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBNQ0xLMV9QRCAqLworI2RlZmluZSBXTTg5MTVfTUNMSzFfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNQ0xLMV9QRCAqLworI2RlZmluZSBXTTg5MTVfREFDREFUMV9QVSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBEQUNEQVQxX1BVICovCisjZGVmaW5lIFdNODkxNV9EQUNEQVQxX1BVX01BU0sgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIERBQ0RBVDFfUFUgKi8KKyNkZWZpbmUgV004OTE1X0RBQ0RBVDFfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNSAgLyogREFDREFUMV9QVSAqLworI2RlZmluZSBXTTg5MTVfREFDREFUMV9QVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNEQVQxX1BVICovCisjZGVmaW5lIFdNODkxNV9EQUNEQVQxX1BEICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERBQ0RBVDFfUEQgKi8KKyNkZWZpbmUgV004OTE1X0RBQ0RBVDFfUERfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogREFDREFUMV9QRCAqLworI2RlZmluZSBXTTg5MTVfREFDREFUMV9QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBEQUNEQVQxX1BEICovCisjZGVmaW5lIFdNODkxNV9EQUNEQVQxX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ0RBVDFfUEQgKi8KKyNkZWZpbmUgV004OTE1X0RBQ0xSQ0xLMV9QVSAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogREFDTFJDTEsxX1BVICovCisjZGVmaW5lIFdNODkxNV9EQUNMUkNMSzFfUFVfTUFTSyAgICAgICAgICAgICAgICAweDAwMDggIC8qIERBQ0xSQ0xLMV9QVSAqLworI2RlZmluZSBXTTg5MTVfREFDTFJDTEsxX1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAzICAvKiBEQUNMUkNMSzFfUFUgKi8KKyNkZWZpbmUgV004OTE1X0RBQ0xSQ0xLMV9QVV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDTFJDTEsxX1BVICovCisjZGVmaW5lIFdNODkxNV9EQUNMUkNMSzFfUEQgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERBQ0xSQ0xLMV9QRCAqLworI2RlZmluZSBXTTg5MTVfREFDTFJDTEsxX1BEX01BU0sgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEQUNMUkNMSzFfUEQgKi8KKyNkZWZpbmUgV004OTE1X0RBQ0xSQ0xLMV9QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgMiAgLyogREFDTFJDTEsxX1BEICovCisjZGVmaW5lIFdNODkxNV9EQUNMUkNMSzFfUERfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ0xSQ0xLMV9QRCAqLworI2RlZmluZSBXTTg5MTVfQkNMSzFfUFUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBCQ0xLMV9QVSAqLworI2RlZmluZSBXTTg5MTVfQkNMSzFfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBCQ0xLMV9QVSAqLworI2RlZmluZSBXTTg5MTVfQkNMSzFfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBCQ0xLMV9QVSAqLworI2RlZmluZSBXTTg5MTVfQkNMSzFfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBCQ0xLMV9QVSAqLworI2RlZmluZSBXTTg5MTVfQkNMSzFfUEQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBCQ0xLMV9QRCAqLworI2RlZmluZSBXTTg5MTVfQkNMSzFfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBCQ0xLMV9QRCAqLworI2RlZmluZSBXTTg5MTVfQkNMSzFfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBCQ0xLMV9QRCAqLworI2RlZmluZSBXTTg5MTVfQkNMSzFfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBCQ0xLMV9QRCAqLworCisvKgorICogUjE4MjUgKDB4NzIxKSAtIFB1bGwgQ29udHJvbCAoMikKKyAqLworI2RlZmluZSBXTTg5MTVfTERPMUVOQV9QRCAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBMRE8xRU5BX1BEICovCisjZGVmaW5lIFdNODkxNV9MRE8xRU5BX1BEX01BU0sgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIExETzFFTkFfUEQgKi8KKyNkZWZpbmUgV004OTE1X0xETzFFTkFfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOCAgLyogTERPMUVOQV9QRCAqLworI2RlZmluZSBXTTg5MTVfTERPMUVOQV9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMRE8xRU5BX1BEICovCisjZGVmaW5lIFdNODkxNV9BRERSX1BEICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEFERFJfUEQgKi8KKyNkZWZpbmUgV004OTE1X0FERFJfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogQUREUl9QRCAqLworI2RlZmluZSBXTTg5MTVfQUREUl9QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBBRERSX1BEICovCisjZGVmaW5lIFdNODkxNV9BRERSX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFERFJfUEQgKi8KKyNkZWZpbmUgV004OTE1X0RBQ0RBVDJfUFUgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogREFDREFUMl9QVSAqLworI2RlZmluZSBXTTg5MTVfREFDREFUMl9QVV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBEQUNEQVQyX1BVICovCisjZGVmaW5lIFdNODkxNV9EQUNEQVQyX1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIERBQ0RBVDJfUFUgKi8KKyNkZWZpbmUgV004OTE1X0RBQ0RBVDJfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDREFUMl9QVSAqLworI2RlZmluZSBXTTg5MTVfREFDREFUMl9QRCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBEQUNEQVQyX1BEICovCisjZGVmaW5lIFdNODkxNV9EQUNEQVQyX1BEX01BU0sgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERBQ0RBVDJfUEQgKi8KKyNkZWZpbmUgV004OTE1X0RBQ0RBVDJfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNCAgLyogREFDREFUMl9QRCAqLworI2RlZmluZSBXTTg5MTVfREFDREFUMl9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNEQVQyX1BEICovCisjZGVmaW5lIFdNODkxNV9EQUNMUkNMSzJfUFUgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERBQ0xSQ0xLMl9QVSAqLworI2RlZmluZSBXTTg5MTVfREFDTFJDTEsyX1BVX01BU0sgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQUNMUkNMSzJfUFUgKi8KKyNkZWZpbmUgV004OTE1X0RBQ0xSQ0xLMl9QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgMyAgLyogREFDTFJDTEsyX1BVICovCisjZGVmaW5lIFdNODkxNV9EQUNMUkNMSzJfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ0xSQ0xLMl9QVSAqLworI2RlZmluZSBXTTg5MTVfREFDTFJDTEsyX1BEICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEQUNMUkNMSzJfUEQgKi8KKyNkZWZpbmUgV004OTE1X0RBQ0xSQ0xLMl9QRF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogREFDTFJDTEsyX1BEICovCisjZGVmaW5lIFdNODkxNV9EQUNMUkNMSzJfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgIDIgIC8qIERBQ0xSQ0xLMl9QRCAqLworI2RlZmluZSBXTTg5MTVfREFDTFJDTEsyX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNMUkNMSzJfUEQgKi8KKyNkZWZpbmUgV004OTE1X0JDTEsyX1BVICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQkNMSzJfUFUgKi8KKyNkZWZpbmUgV004OTE1X0JDTEsyX1BVX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQkNMSzJfUFUgKi8KKyNkZWZpbmUgV004OTE1X0JDTEsyX1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQkNMSzJfUFUgKi8KKyNkZWZpbmUgV004OTE1X0JDTEsyX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQkNMSzJfUFUgKi8KKyNkZWZpbmUgV004OTE1X0JDTEsyX1BEICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQkNMSzJfUEQgKi8KKyNkZWZpbmUgV004OTE1X0JDTEsyX1BEX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQkNMSzJfUEQgKi8KKyNkZWZpbmUgV004OTE1X0JDTEsyX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQkNMSzJfUEQgKi8KKyNkZWZpbmUgV004OTE1X0JDTEsyX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQkNMSzJfUEQgKi8KKworLyoKKyAqIFIxODQwICgweDczMCkgLSBJbnRlcnJ1cHQgU3RhdHVzIDEKKyAqLworI2RlZmluZSBXTTg5MTVfR1A1X0VJTlQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBHUDVfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfR1A1X0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBHUDVfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfR1A1X0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBHUDVfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfR1A1X0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDVfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfR1A0X0VJTlQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBHUDRfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfR1A0X0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBHUDRfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfR1A0X0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBHUDRfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfR1A0X0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDRfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfR1AzX0VJTlQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBHUDNfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfR1AzX0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBHUDNfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfR1AzX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBHUDNfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfR1AzX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDNfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfR1AyX0VJTlQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBHUDJfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfR1AyX0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBHUDJfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfR1AyX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDJfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfR1AyX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDJfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfR1AxX0VJTlQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBHUDFfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfR1AxX0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBHUDFfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfR1AxX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBHUDFfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfR1AxX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDFfRUlOVCAqLworCisvKgorICogUjE4NDEgKDB4NzMxKSAtIEludGVycnVwdCBTdGF0dXMgMgorICovCisjZGVmaW5lIFdNODkxNV9EQ1NfRE9ORV8yM19FSU5UICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIERDU19ET05FXzIzX0VJTlQgKi8KKyNkZWZpbmUgV004OTE1X0RDU19ET05FXzIzX0VJTlRfTUFTSyAgICAgICAgICAgIDB4MTAwMCAgLyogRENTX0RPTkVfMjNfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfRENTX0RPTkVfMjNfRUlOVF9TSElGVCAgICAgICAgICAgICAgIDEyICAvKiBEQ1NfRE9ORV8yM19FSU5UICovCisjZGVmaW5lIFdNODkxNV9EQ1NfRE9ORV8yM19FSU5UX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIERDU19ET05FXzIzX0VJTlQgKi8KKyNkZWZpbmUgV004OTE1X0RDU19ET05FXzAxX0VJTlQgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogRENTX0RPTkVfMDFfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfRENTX0RPTkVfMDFfRUlOVF9NQVNLICAgICAgICAgICAgMHgwODAwICAvKiBEQ1NfRE9ORV8wMV9FSU5UICovCisjZGVmaW5lIFdNODkxNV9EQ1NfRE9ORV8wMV9FSU5UX1NISUZUICAgICAgICAgICAgICAgMTEgIC8qIERDU19ET05FXzAxX0VJTlQgKi8KKyNkZWZpbmUgV004OTE1X0RDU19ET05FXzAxX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogRENTX0RPTkVfMDFfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfV1NFUV9ET05FX0VJTlQgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBXU0VRX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfV1NFUV9ET05FX0VJTlRfTUFTSyAgICAgICAgICAgICAgMHgwNDAwICAvKiBXU0VRX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfV1NFUV9ET05FX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgIDEwICAvKiBXU0VRX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfV1NFUV9ET05FX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBXU0VRX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfRklGT1NfRVJSX0VJTlQgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBGSUZPU19FUlJfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfRklGT1NfRVJSX0VJTlRfTUFTSyAgICAgICAgICAgICAgMHgwMjAwICAvKiBGSUZPU19FUlJfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfRklGT1NfRVJSX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICA5ICAvKiBGSUZPU19FUlJfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfRklGT1NfRVJSX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBGSUZPU19FUlJfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19TSUdfREVUX0VJTlQgICAgICAgICAgICAgMHgwMDgwICAvKiBEU1AyRFJDX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19TSUdfREVUX0VJTlRfTUFTSyAgICAgICAgMHgwMDgwICAvKiBEU1AyRFJDX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19TSUdfREVUX0VJTlRfU0hJRlQgICAgICAgICAgICA3ICAvKiBEU1AyRFJDX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19TSUdfREVUX0VJTlRfV0lEVEggICAgICAgICAgICAxICAvKiBEU1AyRFJDX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfRFNQMURSQ19TSUdfREVUX0VJTlQgICAgICAgICAgICAgMHgwMDQwICAvKiBEU1AxRFJDX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfRFNQMURSQ19TSUdfREVUX0VJTlRfTUFTSyAgICAgICAgMHgwMDQwICAvKiBEU1AxRFJDX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfRFNQMURSQ19TSUdfREVUX0VJTlRfU0hJRlQgICAgICAgICAgICA2ICAvKiBEU1AxRFJDX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfRFNQMURSQ19TSUdfREVUX0VJTlRfV0lEVEggICAgICAgICAgICAxICAvKiBEU1AxRFJDX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfRkxMX1NXX0NMS19ET05FX0VJTlQgICAgICAgICAgICAgMHgwMDA4ICAvKiBGTExfU1dfQ0xLX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfRkxMX1NXX0NMS19ET05FX0VJTlRfTUFTSyAgICAgICAgMHgwMDA4ICAvKiBGTExfU1dfQ0xLX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfRkxMX1NXX0NMS19ET05FX0VJTlRfU0hJRlQgICAgICAgICAgICAzICAvKiBGTExfU1dfQ0xLX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfRkxMX1NXX0NMS19ET05FX0VJTlRfV0lEVEggICAgICAgICAgICAxICAvKiBGTExfU1dfQ0xLX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfRkxMX0xPQ0tfRUlOVCAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBGTExfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODkxNV9GTExfTE9DS19FSU5UX01BU0sgICAgICAgICAgICAgICAweDAwMDQgIC8qIEZMTF9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTE1X0ZMTF9MT0NLX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgMiAgLyogRkxMX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfRkxMX0xPQ0tfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODkxNV9IUF9ET05FX0VJTlQgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEhQX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfSFBfRE9ORV9FSU5UX01BU0sgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBIUF9ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTE1X0hQX0RPTkVfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBfRE9ORV9FSU5UICovCisjZGVmaW5lIFdNODkxNV9IUF9ET05FX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfTUlDRF9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBNSUNEX0VJTlQgKi8KKyNkZWZpbmUgV004OTE1X01JQ0RfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTUlDRF9FSU5UICovCisjZGVmaW5lIFdNODkxNV9NSUNEX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIE1JQ0RfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfTUlDRF9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNEX0VJTlQgKi8KKworLyoKKyAqIFIxODQyICgweDczMikgLSBJbnRlcnJ1cHQgUmF3IFN0YXR1cyAyCisgKi8KKyNkZWZpbmUgV004OTE1X0RDU19ET05FXzIzX1NUUyAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogRENTX0RPTkVfMjNfU1RTICovCisjZGVmaW5lIFdNODkxNV9EQ1NfRE9ORV8yM19TVFNfTUFTSyAgICAgICAgICAgICAweDEwMDAgIC8qIERDU19ET05FXzIzX1NUUyAqLworI2RlZmluZSBXTTg5MTVfRENTX0RPTkVfMjNfU1RTX1NISUZUICAgICAgICAgICAgICAgIDEyICAvKiBEQ1NfRE9ORV8yM19TVFMgKi8KKyNkZWZpbmUgV004OTE1X0RDU19ET05FXzIzX1NUU19XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogRENTX0RPTkVfMjNfU1RTICovCisjZGVmaW5lIFdNODkxNV9EQ1NfRE9ORV8wMV9TVFMgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERDU19ET05FXzAxX1NUUyAqLworI2RlZmluZSBXTTg5MTVfRENTX0RPTkVfMDFfU1RTX01BU0sgICAgICAgICAgICAgMHgwODAwICAvKiBEQ1NfRE9ORV8wMV9TVFMgKi8KKyNkZWZpbmUgV004OTE1X0RDU19ET05FXzAxX1NUU19TSElGVCAgICAgICAgICAgICAgICAxMSAgLyogRENTX0RPTkVfMDFfU1RTICovCisjZGVmaW5lIFdNODkxNV9EQ1NfRE9ORV8wMV9TVFNfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIERDU19ET05FXzAxX1NUUyAqLworI2RlZmluZSBXTTg5MTVfV1NFUV9ET05FX1NUUyAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBXU0VRX0RPTkVfU1RTICovCisjZGVmaW5lIFdNODkxNV9XU0VRX0RPTkVfU1RTX01BU0sgICAgICAgICAgICAgICAweDA0MDAgIC8qIFdTRVFfRE9ORV9TVFMgKi8KKyNkZWZpbmUgV004OTE1X1dTRVFfRE9ORV9TVFNfU0hJRlQgICAgICAgICAgICAgICAgICAxMCAgLyogV1NFUV9ET05FX1NUUyAqLworI2RlZmluZSBXTTg5MTVfV1NFUV9ET05FX1NUU19XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBXU0VRX0RPTkVfU1RTICovCisjZGVmaW5lIFdNODkxNV9GSUZPU19FUlJfU1RTICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEZJRk9TX0VSUl9TVFMgKi8KKyNkZWZpbmUgV004OTE1X0ZJRk9TX0VSUl9TVFNfTUFTSyAgICAgICAgICAgICAgIDB4MDIwMCAgLyogRklGT1NfRVJSX1NUUyAqLworI2RlZmluZSBXTTg5MTVfRklGT1NfRVJSX1NUU19TSElGVCAgICAgICAgICAgICAgICAgICA5ICAvKiBGSUZPU19FUlJfU1RTICovCisjZGVmaW5lIFdNODkxNV9GSUZPU19FUlJfU1RTX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEZJRk9TX0VSUl9TVFMgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfU0lHX0RFVF9TVFMgICAgICAgICAgICAgIDB4MDA4MCAgLyogRFNQMkRSQ19TSUdfREVUX1NUUyAqLworI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19TSUdfREVUX1NUU19NQVNLICAgICAgICAgMHgwMDgwICAvKiBEU1AyRFJDX1NJR19ERVRfU1RTICovCisjZGVmaW5lIFdNODkxNV9EU1AyRFJDX1NJR19ERVRfU1RTX1NISUZUICAgICAgICAgICAgIDcgIC8qIERTUDJEUkNfU0lHX0RFVF9TVFMgKi8KKyNkZWZpbmUgV004OTE1X0RTUDJEUkNfU0lHX0RFVF9TVFNfV0lEVEggICAgICAgICAgICAgMSAgLyogRFNQMkRSQ19TSUdfREVUX1NUUyAqLworI2RlZmluZSBXTTg5MTVfRFNQMURSQ19TSUdfREVUX1NUUyAgICAgICAgICAgICAgMHgwMDQwICAvKiBEU1AxRFJDX1NJR19ERVRfU1RTICovCisjZGVmaW5lIFdNODkxNV9EU1AxRFJDX1NJR19ERVRfU1RTX01BU0sgICAgICAgICAweDAwNDAgIC8qIERTUDFEUkNfU0lHX0RFVF9TVFMgKi8KKyNkZWZpbmUgV004OTE1X0RTUDFEUkNfU0lHX0RFVF9TVFNfU0hJRlQgICAgICAgICAgICAgNiAgLyogRFNQMURSQ19TSUdfREVUX1NUUyAqLworI2RlZmluZSBXTTg5MTVfRFNQMURSQ19TSUdfREVUX1NUU19XSURUSCAgICAgICAgICAgICAxICAvKiBEU1AxRFJDX1NJR19ERVRfU1RTICovCisjZGVmaW5lIFdNODkxNV9GTExfTE9DS19TVFMgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEZMTF9MT0NLX1NUUyAqLworI2RlZmluZSBXTTg5MTVfRkxMX0xPQ0tfU1RTX01BU0sgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBGTExfTE9DS19TVFMgKi8KKyNkZWZpbmUgV004OTE1X0ZMTF9MT0NLX1NUU19TSElGVCAgICAgICAgICAgICAgICAgICAgMiAgLyogRkxMX0xPQ0tfU1RTICovCisjZGVmaW5lIFdNODkxNV9GTExfTE9DS19TVFNfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEZMTF9MT0NLX1NUUyAqLworCisvKgorICogUjE4NDggKDB4NzM4KSAtIEludGVycnVwdCBTdGF0dXMgMSBNYXNrCisgKi8KKyNkZWZpbmUgV004OTE1X0lNX0dQNV9FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogSU1fR1A1X0VJTlQgKi8KKyNkZWZpbmUgV004OTE1X0lNX0dQNV9FSU5UX01BU0sgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogSU1fR1A1X0VJTlQgKi8KKyNkZWZpbmUgV004OTE1X0lNX0dQNV9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgNCAgLyogSU1fR1A1X0VJTlQgKi8KKyNkZWZpbmUgV004OTE1X0lNX0dQNV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU1fR1A1X0VJTlQgKi8KKyNkZWZpbmUgV004OTE1X0lNX0dQNF9FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogSU1fR1A0X0VJTlQgKi8KKyNkZWZpbmUgV004OTE1X0lNX0dQNF9FSU5UX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogSU1fR1A0X0VJTlQgKi8KKyNkZWZpbmUgV004OTE1X0lNX0dQNF9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgMyAgLyogSU1fR1A0X0VJTlQgKi8KKyNkZWZpbmUgV004OTE1X0lNX0dQNF9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU1fR1A0X0VJTlQgKi8KKyNkZWZpbmUgV004OTE1X0lNX0dQM19FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSU1fR1AzX0VJTlQgKi8KKyNkZWZpbmUgV004OTE1X0lNX0dQM19FSU5UX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSU1fR1AzX0VJTlQgKi8KKyNkZWZpbmUgV004OTE1X0lNX0dQM19FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgMiAgLyogSU1fR1AzX0VJTlQgKi8KKyNkZWZpbmUgV004OTE1X0lNX0dQM19FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU1fR1AzX0VJTlQgKi8KKyNkZWZpbmUgV004OTE1X0lNX0dQMl9FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSU1fR1AyX0VJTlQgKi8KKyNkZWZpbmUgV004OTE1X0lNX0dQMl9FSU5UX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSU1fR1AyX0VJTlQgKi8KKyNkZWZpbmUgV004OTE1X0lNX0dQMl9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU1fR1AyX0VJTlQgKi8KKyNkZWZpbmUgV004OTE1X0lNX0dQMl9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU1fR1AyX0VJTlQgKi8KKyNkZWZpbmUgV004OTE1X0lNX0dQMV9FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogSU1fR1AxX0VJTlQgKi8KKyNkZWZpbmUgV004OTE1X0lNX0dQMV9FSU5UX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogSU1fR1AxX0VJTlQgKi8KKyNkZWZpbmUgV004OTE1X0lNX0dQMV9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogSU1fR1AxX0VJTlQgKi8KKyNkZWZpbmUgV004OTE1X0lNX0dQMV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU1fR1AxX0VJTlQgKi8KKworLyoKKyAqIFIxODQ5ICgweDczOSkgLSBJbnRlcnJ1cHQgU3RhdHVzIDIgTWFzaworICovCisjZGVmaW5lIFdNODkxNV9JTV9EQ1NfRE9ORV8yM19FSU5UICAgICAgICAgICAgICAweDEwMDAgIC8qIElNX0RDU19ET05FXzIzX0VJTlQgKi8KKyNkZWZpbmUgV004OTE1X0lNX0RDU19ET05FXzIzX0VJTlRfTUFTSyAgICAgICAgIDB4MTAwMCAgLyogSU1fRENTX0RPTkVfMjNfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfSU1fRENTX0RPTkVfMjNfRUlOVF9TSElGVCAgICAgICAgICAgIDEyICAvKiBJTV9EQ1NfRE9ORV8yM19FSU5UICovCisjZGVmaW5lIFdNODkxNV9JTV9EQ1NfRE9ORV8yM19FSU5UX1dJRFRIICAgICAgICAgICAgIDEgIC8qIElNX0RDU19ET05FXzIzX0VJTlQgKi8KKyNkZWZpbmUgV004OTE1X0lNX0RDU19ET05FXzAxX0VJTlQgICAgICAgICAgICAgIDB4MDgwMCAgLyogSU1fRENTX0RPTkVfMDFfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfSU1fRENTX0RPTkVfMDFfRUlOVF9NQVNLICAgICAgICAgMHgwODAwICAvKiBJTV9EQ1NfRE9ORV8wMV9FSU5UICovCisjZGVmaW5lIFdNODkxNV9JTV9EQ1NfRE9ORV8wMV9FSU5UX1NISUZUICAgICAgICAgICAgMTEgIC8qIElNX0RDU19ET05FXzAxX0VJTlQgKi8KKyNkZWZpbmUgV004OTE1X0lNX0RDU19ET05FXzAxX0VJTlRfV0lEVEggICAgICAgICAgICAgMSAgLyogSU1fRENTX0RPTkVfMDFfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfSU1fV1NFUV9ET05FX0VJTlQgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBJTV9XU0VRX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfSU1fV1NFUV9ET05FX0VJTlRfTUFTSyAgICAgICAgICAgMHgwNDAwICAvKiBJTV9XU0VRX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfSU1fV1NFUV9ET05FX0VJTlRfU0hJRlQgICAgICAgICAgICAgIDEwICAvKiBJTV9XU0VRX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfSU1fV1NFUV9ET05FX0VJTlRfV0lEVEggICAgICAgICAgICAgICAxICAvKiBJTV9XU0VRX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfSU1fRklGT1NfRVJSX0VJTlQgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBJTV9GSUZPU19FUlJfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfSU1fRklGT1NfRVJSX0VJTlRfTUFTSyAgICAgICAgICAgMHgwMjAwICAvKiBJTV9GSUZPU19FUlJfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfSU1fRklGT1NfRVJSX0VJTlRfU0hJRlQgICAgICAgICAgICAgICA5ICAvKiBJTV9GSUZPU19FUlJfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfSU1fRklGT1NfRVJSX0VJTlRfV0lEVEggICAgICAgICAgICAgICAxICAvKiBJTV9GSUZPU19FUlJfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfSU1fRFNQMkRSQ19TSUdfREVUX0VJTlQgICAgICAgICAgMHgwMDgwICAvKiBJTV9EU1AyRFJDX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfSU1fRFNQMkRSQ19TSUdfREVUX0VJTlRfTUFTSyAgICAgMHgwMDgwICAvKiBJTV9EU1AyRFJDX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfSU1fRFNQMkRSQ19TSUdfREVUX0VJTlRfU0hJRlQgICAgICAgICA3ICAvKiBJTV9EU1AyRFJDX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfSU1fRFNQMkRSQ19TSUdfREVUX0VJTlRfV0lEVEggICAgICAgICAxICAvKiBJTV9EU1AyRFJDX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfSU1fRFNQMURSQ19TSUdfREVUX0VJTlQgICAgICAgICAgMHgwMDQwICAvKiBJTV9EU1AxRFJDX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfSU1fRFNQMURSQ19TSUdfREVUX0VJTlRfTUFTSyAgICAgMHgwMDQwICAvKiBJTV9EU1AxRFJDX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfSU1fRFNQMURSQ19TSUdfREVUX0VJTlRfU0hJRlQgICAgICAgICA2ICAvKiBJTV9EU1AxRFJDX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfSU1fRFNQMURSQ19TSUdfREVUX0VJTlRfV0lEVEggICAgICAgICAxICAvKiBJTV9EU1AxRFJDX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfSU1fRkxMX1NXX0NMS19ET05FX0VJTlQgICAgICAgICAgMHgwMDA4ICAvKiBJTV9GTExfU1dfQ0xLX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfSU1fRkxMX1NXX0NMS19ET05FX0VJTlRfTUFTSyAgICAgMHgwMDA4ICAvKiBJTV9GTExfU1dfQ0xLX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfSU1fRkxMX1NXX0NMS19ET05FX0VJTlRfU0hJRlQgICAgICAgICAzICAvKiBJTV9GTExfU1dfQ0xLX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfSU1fRkxMX1NXX0NMS19ET05FX0VJTlRfV0lEVEggICAgICAgICAxICAvKiBJTV9GTExfU1dfQ0xLX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfSU1fRkxMX0xPQ0tfRUlOVCAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBJTV9GTExfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODkxNV9JTV9GTExfTE9DS19FSU5UX01BU0sgICAgICAgICAgICAweDAwMDQgIC8qIElNX0ZMTF9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTE1X0lNX0ZMTF9MT0NLX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgMiAgLyogSU1fRkxMX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfSU1fRkxMX0xPQ0tfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBJTV9GTExfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODkxNV9JTV9IUF9ET05FX0VJTlQgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIElNX0hQX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfSU1fSFBfRE9ORV9FSU5UX01BU0sgICAgICAgICAgICAgMHgwMDAyICAvKiBJTV9IUF9ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTE1X0lNX0hQX0RPTkVfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgMSAgLyogSU1fSFBfRE9ORV9FSU5UICovCisjZGVmaW5lIFdNODkxNV9JTV9IUF9ET05FX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIElNX0hQX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfSU1fTUlDRF9FSU5UICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBJTV9NSUNEX0VJTlQgKi8KKyNkZWZpbmUgV004OTE1X0lNX01JQ0RfRUlOVF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogSU1fTUlDRF9FSU5UICovCisjZGVmaW5lIFdNODkxNV9JTV9NSUNEX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgIDAgIC8qIElNX01JQ0RfRUlOVCAqLworI2RlZmluZSBXTTg5MTVfSU1fTUlDRF9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBJTV9NSUNEX0VJTlQgKi8KKworLyoKKyAqIFIxODU2ICgweDc0MCkgLSBJbnRlcnJ1cHQgQ29udHJvbAorICovCisjZGVmaW5lIFdNODkxNV9JTV9JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIElNX0lSUSAqLworI2RlZmluZSBXTTg5MTVfSU1fSVJRX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBJTV9JUlEgKi8KKyNkZWZpbmUgV004OTE1X0lNX0lSUV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogSU1fSVJRICovCisjZGVmaW5lIFdNODkxNV9JTV9JUlFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElNX0lSUSAqLworCisvKgorICogUjIwNDggKDB4ODAwKSAtIExlZnQgUERNIFNwZWFrZXIKKyAqLworI2RlZmluZSBXTTg5MTVfU1BLTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBTUEtMX0VOQSAqLworI2RlZmluZSBXTTg5MTVfU1BLTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBTUEtMX0VOQSAqLworI2RlZmluZSBXTTg5MTVfU1BLTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBTUEtMX0VOQSAqLworI2RlZmluZSBXTTg5MTVfU1BLTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTUEtMX0VOQSAqLworI2RlZmluZSBXTTg5MTVfU1BLTF9NVVRFICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBTUEtMX01VVEUgKi8KKyNkZWZpbmUgV004OTE1X1NQS0xfTVVURV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogU1BLTF9NVVRFICovCisjZGVmaW5lIFdNODkxNV9TUEtMX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFNQS0xfTVVURSAqLworI2RlZmluZSBXTTg5MTVfU1BLTF9NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTUEtMX01VVEUgKi8KKyNkZWZpbmUgV004OTE1X1NQS0xfTVVURV9aQyAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogU1BLTF9NVVRFX1pDICovCisjZGVmaW5lIFdNODkxNV9TUEtMX01VVEVfWkNfTUFTSyAgICAgICAgICAgICAgICAweDAwMDQgIC8qIFNQS0xfTVVURV9aQyAqLworI2RlZmluZSBXTTg5MTVfU1BLTF9NVVRFX1pDX1NISUZUICAgICAgICAgICAgICAgICAgICAyICAvKiBTUEtMX01VVEVfWkMgKi8KKyNkZWZpbmUgV004OTE1X1NQS0xfTVVURV9aQ19XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogU1BLTF9NVVRFX1pDICovCisjZGVmaW5lIFdNODkxNV9TUEtMX1NSQ19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDMgIC8qIFNQS0xfU1JDIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTE1X1NQS0xfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogU1BLTF9TUkMgLSBbMTowXSAqLworI2RlZmluZSBXTTg5MTVfU1BLTF9TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBTUEtMX1NSQyAtIFsxOjBdICovCisKKy8qCisgKiBSMjA0OSAoMHg4MDEpIC0gUmlnaHQgUERNIFNwZWFrZXIKKyAqLworI2RlZmluZSBXTTg5MTVfU1BLUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBTUEtSX0VOQSAqLworI2RlZmluZSBXTTg5MTVfU1BLUl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBTUEtSX0VOQSAqLworI2RlZmluZSBXTTg5MTVfU1BLUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBTUEtSX0VOQSAqLworI2RlZmluZSBXTTg5MTVfU1BLUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTUEtSX0VOQSAqLworI2RlZmluZSBXTTg5MTVfU1BLUl9NVVRFICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBTUEtSX01VVEUgKi8KKyNkZWZpbmUgV004OTE1X1NQS1JfTVVURV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogU1BLUl9NVVRFICovCisjZGVmaW5lIFdNODkxNV9TUEtSX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFNQS1JfTVVURSAqLworI2RlZmluZSBXTTg5MTVfU1BLUl9NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTUEtSX01VVEUgKi8KKyNkZWZpbmUgV004OTE1X1NQS1JfTVVURV9aQyAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogU1BLUl9NVVRFX1pDICovCisjZGVmaW5lIFdNODkxNV9TUEtSX01VVEVfWkNfTUFTSyAgICAgICAgICAgICAgICAweDAwMDQgIC8qIFNQS1JfTVVURV9aQyAqLworI2RlZmluZSBXTTg5MTVfU1BLUl9NVVRFX1pDX1NISUZUICAgICAgICAgICAgICAgICAgICAyICAvKiBTUEtSX01VVEVfWkMgKi8KKyNkZWZpbmUgV004OTE1X1NQS1JfTVVURV9aQ19XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogU1BLUl9NVVRFX1pDICovCisjZGVmaW5lIFdNODkxNV9TUEtSX1NSQ19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDMgIC8qIFNQS1JfU1JDIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTE1X1NQS1JfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogU1BLUl9TUkMgLSBbMTowXSAqLworI2RlZmluZSBXTTg5MTVfU1BLUl9TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBTUEtSX1NSQyAtIFsxOjBdICovCisKKy8qCisgKiBSMjA1MCAoMHg4MDIpIC0gUERNIFNwZWFrZXIgTXV0ZSBTZXF1ZW5jZQorICovCisjZGVmaW5lIFdNODkxNV9TUEtfTVVURV9FTkRJQU4gICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFNQS19NVVRFX0VORElBTiAqLworI2RlZmluZSBXTTg5MTVfU1BLX01VVEVfRU5ESUFOX01BU0sgICAgICAgICAgICAgMHgwMTAwICAvKiBTUEtfTVVURV9FTkRJQU4gKi8KKyNkZWZpbmUgV004OTE1X1NQS19NVVRFX0VORElBTl9TSElGVCAgICAgICAgICAgICAgICAgOCAgLyogU1BLX01VVEVfRU5ESUFOICovCisjZGVmaW5lIFdNODkxNV9TUEtfTVVURV9FTkRJQU5fV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIFNQS19NVVRFX0VORElBTiAqLworI2RlZmluZSBXTTg5MTVfU1BLX01VVEVfU0VRMV9NQVNLICAgICAgICAgICAgICAgMHgwMEZGICAvKiBTUEtfTVVURV9TRVExIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTE1X1NQS19NVVRFX1NFUTFfU0hJRlQgICAgICAgICAgICAgICAgICAgMCAgLyogU1BLX01VVEVfU0VRMSAtIFs3OjBdICovCisjZGVmaW5lIFdNODkxNV9TUEtfTVVURV9TRVExX1dJRFRIICAgICAgICAgICAgICAgICAgIDggIC8qIFNQS19NVVRFX1NFUTEgLSBbNzowXSAqLworCisvKgorICogUjIwNTEgKDB4ODAzKSAtIFBETSBTcGVha2VyIFZvbHVtZQorICovCisjZGVmaW5lIFdNODkxNV9TUEtSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwRjAgIC8qIFNQS1JfVk9MIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTE1X1NQS1JfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogU1BLUl9WT0wgLSBbNzo0XSAqLworI2RlZmluZSBXTTg5MTVfU1BLUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBTUEtSX1ZPTCAtIFs3OjRdICovCisjZGVmaW5lIFdNODkxNV9TUEtMX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMEYgIC8qIFNQS0xfVk9MIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTE1X1NQS0xfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogU1BLTF9WT0wgLSBbMzowXSAqLworI2RlZmluZSBXTTg5MTVfU1BLTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBTUEtMX1ZPTCAtIFszOjBdICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5NTgtZHNwMi5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5NTgtZHNwMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyOTM3NjMKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk1OC1kc3AyLmMKQEAgLTAsMCArMSwxMDUxIEBACisvKgorICogd204OTU4LWRzcDIuYyAgLS0gIFdNODk1OCBEU1AyIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgMjAxMSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgcGxjCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMvYXNvYy5oPgorCisjaW5jbHVkZSA8bGludXgvbWZkL3dtODk5NC9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODk5NC9yZWdpc3RlcnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204OTk0L3BkYXRhLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODk5NC9ncGlvLmg+CisKKyNpbmNsdWRlICJ3bTg5OTQuaCIKKworI2RlZmluZSBXTV9GV19CTE9DS19JTkZPIDB4ZmYKKyNkZWZpbmUgV01fRldfQkxPQ0tfUE0gICAweDAwCisjZGVmaW5lIFdNX0ZXX0JMT0NLX1ggICAgMHgwMQorI2RlZmluZSBXTV9GV19CTE9DS19ZICAgIDB4MDIKKyNkZWZpbmUgV01fRldfQkxPQ0tfWiAgICAweDAzCisjZGVmaW5lIFdNX0ZXX0JMT0NLX0kgICAgMHgwNgorI2RlZmluZSBXTV9GV19CTE9DS19BICAgIDB4MDgKKyNkZWZpbmUgV01fRldfQkxPQ0tfQyAgICAweDBjCisKK3N0YXRpYyBpbnQgd204OTU4X2RzcDJfZncoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICpuYW1lLAorCQkJICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LCBib29sIGNoZWNrKQoreworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJdTY0IGRhdGE2NDsKKwl1MzIgZGF0YTMyOworCWNvbnN0IHU4ICpkYXRhOworCWNoYXIgKnN0cjsKKwlzaXplX3QgYmxvY2tfbGVuLCBsZW47CisJaW50IHJldCA9IDA7CisKKwkvKiBTdXBwcmVzcyB1bm5lZWRlZCBkb3dubG9hZHMgKi8KKwlpZiAod204OTk0LT5jdXJfZncgPT0gZncpCisJCXJldHVybiAwOworCisJaWYgKGZ3LT5zaXplIDwgMzIpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiJXM6IGZpcm13YXJlIHRvbyBzaG9ydFxuIiwgbmFtZSk7CisJCWdvdG8gZXJyOworCX0KKworCWlmIChtZW1jbXAoZnctPmRhdGEsICJXTUZXIiwgNCkgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICIlczogZmlybXdhcmUgaGFzIGJhZCBmaWxlIG1hZ2ljICUwOHhcbiIsCisJCQluYW1lLCBkYXRhMzIpOworCQlnb3RvIGVycjsKKwl9CisKKwltZW1jcHkoJmRhdGEzMiwgZnctPmRhdGEgKyA0LCBzaXplb2YoZGF0YTMyKSk7CisJbGVuID0gYmUzMl90b19jcHUoZGF0YTMyKTsKKworCW1lbWNweSgmZGF0YTMyLCBmdy0+ZGF0YSArIDgsIHNpemVvZihkYXRhMzIpKTsKKwlkYXRhMzIgPSBiZTMyX3RvX2NwdShkYXRhMzIpOworCWlmICgoZGF0YTMyID4+IDI0KSAmIDB4ZmYpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiJXM6IHVuc3VwcG9ydGVkIGZpcm13YXJlIHZlcnNpb24gJWRcbiIsCisJCQluYW1lLCAoZGF0YTMyID4+IDI0KSAmIDB4ZmYpOworCQlnb3RvIGVycjsKKwl9CisJaWYgKChkYXRhMzIgJiAweGZmZmYpICE9IDg5NTgpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiJXM6IHVuc3VwcG9ydGVkIHRhcmdldCBkZXZpY2UgJWRcbiIsCisJCQluYW1lLCBkYXRhMzIgJiAweGZmZmYpOworCQlnb3RvIGVycjsKKwl9CisJaWYgKCgoZGF0YTMyID4+IDE2KSAmIDB4ZmYpICE9IDB4YykgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICIlczogdW5zdXBwb3J0ZWQgdGFyZ2V0IGNvcmUgJWRcbiIsCisJCQluYW1lLCAoZGF0YTMyID4+IDE2KSAmIDB4ZmYpOworCQlnb3RvIGVycjsKKwl9CisKKwlpZiAoY2hlY2spIHsKKwkJbWVtY3B5KCZkYXRhNjQsIGZ3LT5kYXRhICsgMjQsIHNpemVvZih1NjQpKTsKKwkJZGV2X2luZm8oY29kZWMtPmRldiwgIiVzIHRpbWVzdGFtcCAlbGx4XG4iLAorCQkJIG5hbWUsIGJlNjRfdG9fY3B1KGRhdGE2NCkpOworCX0gZWxzZSB7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIDB4MTAyLCAweDIpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCAweDkwMCwgMHgyKTsKKwl9CisKKwlkYXRhID0gZnctPmRhdGEgKyBsZW47CisJbGVuID0gZnctPnNpemUgLSBsZW47CisJd2hpbGUgKGxlbikgeworCQlpZiAobGVuIDwgMTIpIHsKKwkJCWRldl9lcnIoY29kZWMtPmRldiwgIiVzIHNob3J0IGRhdGEgYmxvY2sgb2YgJXpkXG4iLAorCQkJCW5hbWUsIGxlbik7CisJCQlnb3RvIGVycjsKKwkJfQorCisJCW1lbWNweSgmZGF0YTMyLCBkYXRhICsgNCwgc2l6ZW9mKGRhdGEzMikpOworCQlibG9ja19sZW4gPSBiZTMyX3RvX2NwdShkYXRhMzIpOworCQlpZiAoYmxvY2tfbGVuICsgOCA+IGxlbikgeworCQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiJXpkIGJ5dGUgYmxvY2sgbG9uZ2VyIHRoYW4gZmlsZVxuIiwKKwkJCQlibG9ja19sZW4pOworCQkJZ290byBlcnI7CisJCX0KKwkJaWYgKGJsb2NrX2xlbiA9PSAwKSB7CisJCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJaZXJvIGxlbmd0aCBibG9ja1xuIik7CisJCQlnb3RvIGVycjsKKwkJfQorCisJCW1lbWNweSgmZGF0YTMyLCBkYXRhLCBzaXplb2YoZGF0YTMyKSk7CisJCWRhdGEzMiA9IGJlMzJfdG9fY3B1KGRhdGEzMik7CisKKwkJc3dpdGNoICgoZGF0YTMyID4+IDI0KSAmIDB4ZmYpIHsKKwkJY2FzZSBXTV9GV19CTE9DS19JTkZPOgorCQkJLyogSW5mb3JtYXRpb25hbCB0ZXh0ICovCisJCQlpZiAoIWNoZWNrKQorCQkJCWJyZWFrOworCisJCQlzdHIgPSBremFsbG9jKGJsb2NrX2xlbiArIDEsIEdGUF9LRVJORUwpOworCQkJaWYgKHN0cikgeworCQkJCW1lbWNweShzdHIsIGRhdGEgKyA4LCBibG9ja19sZW4pOworCQkJCWRldl9pbmZvKGNvZGVjLT5kZXYsICIlczogJXNcbiIsIG5hbWUsIHN0cik7CisJCQkJa2ZyZWUoc3RyKTsKKwkJCX0gZWxzZSB7CisJCQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBXTV9GV19CTE9DS19QTToKKwkJY2FzZSBXTV9GV19CTE9DS19YOgorCQljYXNlIFdNX0ZXX0JMT0NLX1k6CisJCWNhc2UgV01fRldfQkxPQ0tfWjoKKwkJY2FzZSBXTV9GV19CTE9DS19JOgorCQljYXNlIFdNX0ZXX0JMT0NLX0E6CisJCWNhc2UgV01fRldfQkxPQ0tfQzoKKwkJCWRldl9kYmcoY29kZWMtPmRldiwgIiVzOiAlemQgYnl0ZXMgb2YgJXhAJXhcbiIsIG5hbWUsCisJCQkJYmxvY2tfbGVuLCAoZGF0YTMyID4+IDI0KSAmIDB4ZmYsCisJCQkJZGF0YTMyICYgMHhmZmZmZmYpOworCisJCQlpZiAoY2hlY2spCisJCQkJYnJlYWs7CisKKwkJCWRhdGEzMiAmPSAweGZmZmZmZjsKKworCQkJd204OTk0X2J1bGtfd3JpdGUoY29kZWMtPmNvbnRyb2xfZGF0YSwKKwkJCQkJICBkYXRhMzIgJiAweGZmZmZmZiwKKwkJCQkJICBibG9ja19sZW4gLyAyLAorCQkJCQkgICh2b2lkICopKGRhdGEgKyA4KSk7CisKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGV2X3dhcm4oY29kZWMtPmRldiwgIiVzOiB1bmtub3duIGJsb2NrIHR5cGUgJWRcbiIsCisJCQkJIG5hbWUsIChkYXRhMzIgPj4gMjQpICYgMHhmZik7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFJvdW5kIHVwIHRvIHRoZSBuZXh0IDMyIGJpdCB3b3JkICovCisJCWJsb2NrX2xlbiArPSBibG9ja19sZW4gJSA0OworCisJCWRhdGEgKz0gYmxvY2tfbGVuICsgODsKKwkJbGVuIC09IGJsb2NrX2xlbiArIDg7CisJfQorCisJaWYgKCFjaGVjaykgeworCQlkZXZfZGJnKGNvZGVjLT5kZXYsICIlczogZG93bmxvYWQgZG9uZVxuIiwgbmFtZSk7CisJCXdtODk5NC0+Y3VyX2Z3ID0gZnc7CisJfSBlbHNlIHsKKwkJZGV2X2luZm8oY29kZWMtPmRldiwgIiVzOiBnb3QgZmlybXdhcmVcbiIsIG5hbWUpOworCX0KKworCWdvdG8gb2s7CisKK2VycjoKKwlyZXQgPSAtRUlOVkFMOworb2s6CisJaWYgKCFjaGVjaykgeworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCAweDkwMCwgMHgwKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgMHgxMDIsIDB4MCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgd204OTU4X2RzcF9zdGFydF9tYmMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgcGF0aCkKK3sKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCB3bTg5OTRfcGRhdGEgKnBkYXRhID0gd204OTk0LT5wZGF0YTsKKwlpbnQgaTsKKworCS8qIElmIHRoZSBEU1AgaXMgYWxyZWFkeSBydW5uaW5nIHRoZW4gbm9vcCAqLworCWlmIChzbmRfc29jX3JlYWQoY29kZWMsIFdNODk1OF9EU1AyX1BST0dSQU0pICYgV004OTU4X0RTUDJfRU5BKQorCQlyZXR1cm47CisKKwkvKiBJZiB3ZSBoYXZlIE1CQyBmaXJtd2FyZSBkb3dubG9hZCBpdCAqLworCWlmICh3bTg5OTQtPm1iYykKKwkJd204OTU4X2RzcDJfZncoY29kZWMsICJNQkMiLCB3bTg5OTQtPm1iYywgZmFsc2UpOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU4X0RTUDJfUFJPR1JBTSwKKwkJCSAgICBXTTg5NThfRFNQMl9FTkEsIFdNODk1OF9EU1AyX0VOQSk7CisKKwkvKiBJZiB3ZSd2ZSBnb3QgdXNlciBzdXBwbGllZCBNQkMgc2V0dGluZ3MgdXNlIHRoZW0gKi8KKwlpZiAocGRhdGEgJiYgcGRhdGEtPm51bV9tYmNfY2ZncykgeworCQlzdHJ1Y3Qgd204OTU4X21iY19jZmcgKmNmZworCQkJPSAmcGRhdGEtPm1iY19jZmdzW3dtODk5NC0+bWJjX2NmZ107CisKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2ZnLT5jb2VmZl9yZWdzKTsgaSsrKQorCQkJc25kX3NvY193cml0ZShjb2RlYywgaSArIFdNODk1OF9NQkNfQkFORF8xX0tfMSwKKwkJCQkgICAgICBjZmctPmNvZWZmX3JlZ3NbaV0pOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNmZy0+Y3V0b2ZmX3JlZ3MpOyBpKyspCisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLAorCQkJCSAgICAgIGkgKyBXTTg5NThfTUJDX0JBTkRfMl9MT1dFUl9DVVRPRkZfQzFfMSwKKwkJCQkgICAgICBjZmctPmN1dG9mZl9yZWdzW2ldKTsKKwl9CisKKwkvKiBSdW4gdGhlIERTUCAqLworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk1OF9EU1AyX0VYRUNDT05UUk9MLAorCQkgICAgICBXTTg5NThfRFNQMl9SVU5SKTsKKworCS8qIEFuZCB3ZSdyZSBvZmYhICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU4X0RTUDJfQ09ORklHLAorCQkJICAgIFdNODk1OF9NQkNfRU5BIHwKKwkJCSAgICBXTTg5NThfTUJDX1NFTF9NQVNLLAorCQkJICAgIHBhdGggPDwgV004OTU4X01CQ19TRUxfU0hJRlQgfAorCQkJICAgIFdNODk1OF9NQkNfRU5BKTsKK30KKworc3RhdGljIHZvaWQgd204OTU4X2RzcF9zdGFydF92c3Moc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgcGF0aCkKK3sKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCB3bTg5OTRfcGRhdGEgKnBkYXRhID0gd204OTk0LT5wZGF0YTsKKwlpbnQgaSwgZW5hOworCisJaWYgKHdtODk5NC0+bWJjX3ZzcykKKwkJd204OTU4X2RzcDJfZncoY29kZWMsICJNQkMrVlNTIiwgd204OTk0LT5tYmNfdnNzLCBmYWxzZSk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NThfRFNQMl9QUk9HUkFNLAorCQkJICAgIFdNODk1OF9EU1AyX0VOQSwgV004OTU4X0RTUDJfRU5BKTsKKworCS8qIElmIHdlJ3ZlIGdvdCB1c2VyIHN1cHBsaWVkIHNldHRpbmdzIHVzZSB0aGVtICovCisJaWYgKHBkYXRhICYmIHBkYXRhLT5udW1fbWJjX2NmZ3MpIHsKKwkJc3RydWN0IHdtODk1OF9tYmNfY2ZnICpjZmcKKwkJCT0gJnBkYXRhLT5tYmNfY2Znc1t3bTg5OTQtPm1iY19jZmddOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNmZy0+Y29tYmluZWRfcmVncyk7IGkrKykKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIGkgKyAweDI4MDAsCisJCQkJICAgICAgY2ZnLT5jb21iaW5lZF9yZWdzW2ldKTsKKwl9CisKKwlpZiAocGRhdGEgJiYgcGRhdGEtPm51bV92c3NfY2ZncykgeworCQlzdHJ1Y3Qgd204OTU4X3Zzc19jZmcgKmNmZworCQkJPSAmcGRhdGEtPnZzc19jZmdzW3dtODk5NC0+dnNzX2NmZ107CisKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2ZnLT5yZWdzKTsgaSsrKQorCQkJc25kX3NvY193cml0ZShjb2RlYywgaSArIDB4MjYwMCwgY2ZnLT5yZWdzW2ldKTsKKwl9CisKKwlpZiAocGRhdGEgJiYgcGRhdGEtPm51bV92c3NfaHBmX2NmZ3MpIHsKKwkJc3RydWN0IHdtODk1OF92c3NfaHBmX2NmZyAqY2ZnCisJCQk9ICZwZGF0YS0+dnNzX2hwZl9jZmdzW3dtODk5NC0+dnNzX2hwZl9jZmddOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNmZy0+cmVncyk7IGkrKykKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIGkgKyAweDI0MDAsIGNmZy0+cmVnc1tpXSk7CisJfQorCisJLyogUnVuIHRoZSBEU1AgKi8KKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NThfRFNQMl9FWEVDQ09OVFJPTCwKKwkJICAgICAgV004OTU4X0RTUDJfUlVOUik7CisKKwkvKiBFbmFibGUgdGhlIGFsZ29yaXRobXMgd2UndmUgc2VsZWN0ZWQgKi8KKwllbmEgPSAwOworCWlmICh3bTg5OTQtPm1iY19lbmFbcGF0aF0pCisJCWVuYSB8PSAweDg7CisJaWYgKHdtODk5NC0+aHBmMl9lbmFbcGF0aF0pCisJCWVuYSB8PSAweDQ7CisJaWYgKHdtODk5NC0+aHBmMV9lbmFbcGF0aF0pCisJCWVuYSB8PSAweDI7CisJaWYgKHdtODk5NC0+dnNzX2VuYVtwYXRoXSkKKwkJZW5hIHw9IDB4MTsKKworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIDB4MjIwMSwgZW5hKTsKKworCS8qIFN3aXRjaCB0aGUgRFNQIGludG8gdGhlIGRhdGEgcGF0aCAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1OF9EU1AyX0NPTkZJRywKKwkJCSAgICBXTTg5NThfTUJDX1NFTF9NQVNLIHwgV004OTU4X01CQ19FTkEsCisJCQkgICAgcGF0aCA8PCBXTTg5NThfTUJDX1NFTF9TSElGVCB8IFdNODk1OF9NQkNfRU5BKTsKK30KKworc3RhdGljIHZvaWQgd204OTU4X2RzcF9zdGFydF9lbmhfZXEoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgcGF0aCkKK3sKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCB3bTg5OTRfcGRhdGEgKnBkYXRhID0gd204OTk0LT5wZGF0YTsKKwlpbnQgaTsKKworCXdtODk1OF9kc3AyX2Z3KGNvZGVjLCAiRU5IX0VRIiwgd204OTk0LT5lbmhfZXEsIGZhbHNlKTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1OF9EU1AyX1BST0dSQU0sCisJCQkgICAgV004OTU4X0RTUDJfRU5BLCBXTTg5NThfRFNQMl9FTkEpOworCisJLyogSWYgd2UndmUgZ290IHVzZXIgc3VwcGxpZWQgc2V0dGluZ3MgdXNlIHRoZW0gKi8KKwlpZiAocGRhdGEgJiYgcGRhdGEtPm51bV9lbmhfZXFfY2ZncykgeworCQlzdHJ1Y3Qgd204OTU4X2VuaF9lcV9jZmcgKmNmZworCQkJPSAmcGRhdGEtPmVuaF9lcV9jZmdzW3dtODk5NC0+ZW5oX2VxX2NmZ107CisKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2ZnLT5yZWdzKTsgaSsrKQorCQkJc25kX3NvY193cml0ZShjb2RlYywgaSArIDB4MjIwMCwKKwkJCQkgICAgICBjZmctPnJlZ3NbaV0pOworCX0KKworCS8qIFJ1biB0aGUgRFNQICovCisJc25kX3NvY193cml0ZShjb2RlYywgV004OTU4X0RTUDJfRVhFQ0NPTlRST0wsCisJCSAgICAgIFdNODk1OF9EU1AyX1JVTlIpOworCisJLyogU3dpdGNoIHRoZSBEU1AgaW50byB0aGUgZGF0YSBwYXRoICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU4X0RTUDJfQ09ORklHLAorCQkJICAgIFdNODk1OF9NQkNfU0VMX01BU0sgfCBXTTg5NThfTUJDX0VOQSwKKwkJCSAgICBwYXRoIDw8IFdNODk1OF9NQkNfU0VMX1NISUZUIHwgV004OTU4X01CQ19FTkEpOworfQorCitzdGF0aWMgdm9pZCB3bTg5NThfZHNwX2FwcGx5KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IHBhdGgsIGludCBzdGFydCkKK3sKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCWludCBwd3JfcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81KTsKKwlpbnQgZW5hLCByZWcsIGFpZjsKKworCXN3aXRjaCAocGF0aCkgeworCWNhc2UgMDoKKwkJcHdyX3JlZyAmPSAoV004OTk0X0FJRjFEQUMxTF9FTkEgfCBXTTg5OTRfQUlGMURBQzFSX0VOQSk7CisJCWFpZiA9IDA7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcHdyX3JlZyAmPSAoV004OTk0X0FJRjFEQUMyTF9FTkEgfCBXTTg5OTRfQUlGMURBQzJSX0VOQSk7CisJCWFpZiA9IDA7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcHdyX3JlZyAmPSAoV004OTk0X0FJRjJEQUNMX0VOQSB8IFdNODk5NF9BSUYyREFDUl9FTkEpOworCQlhaWYgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuOworCX0KKworCS8qIERvIHdlIGhhdmUgYm90aCBhbiBhY3RpdmUgQUlGIGFuZCBhbiBhY3RpdmUgYWxnb3JpdGhtPyAqLworCWVuYSA9IHdtODk5NC0+bWJjX2VuYVtwYXRoXSB8fCB3bTg5OTQtPnZzc19lbmFbcGF0aF0gfHwKKwkJd204OTk0LT5ocGYxX2VuYVtwYXRoXSB8fCB3bTg5OTQtPmhwZjJfZW5hW3BhdGhdIHx8CisJCXdtODk5NC0+ZW5oX2VxX2VuYVtwYXRoXTsKKwlpZiAoIXB3cl9yZWcpCisJCWVuYSA9IDA7CisKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk1OF9EU1AyX1BST0dSQU0pOworCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiRFNQIHBhdGggJWQgJWQgc3RhcnR1cDogJWQsIHBvd2VyOiAleCwgRFNQOiAleFxuIiwKKwkJcGF0aCwgd204OTk0LT5kc3BfYWN0aXZlLCBzdGFydCwgcHdyX3JlZywgcmVnKTsKKworCWlmIChzdGFydCAmJiBlbmEpIHsKKwkJLyogSWYgdGhlIERTUCBpcyBhbHJlYWR5IHJ1bm5pbmcgdGhlbiBub29wICovCisJCWlmIChyZWcgJiBXTTg5NThfRFNQMl9FTkEpCisJCQlyZXR1cm47CisKKwkJLyogSWYgZWl0aGVyIEFJRm5DTEsgaXMgbm90IHlldCBlbmFibGVkIHBvc3Rwb25lICovCisJCWlmICghKHNuZF9zb2NfcmVhZChjb2RlYywgV004OTk0X0FJRjFfQ0xPQ0tJTkdfMSkKKwkJICAgICAgJiBXTTg5OTRfQUlGMUNMS19FTkFfTUFTSykgJiYKKwkJICAgICEoc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTRfQUlGMl9DTE9DS0lOR18xKQorCQkgICAgICAmIFdNODk5NF9BSUYyQ0xLX0VOQV9NQVNLKSkKKwkJCXJldHVybjsKKworCQkvKiBTd2l0Y2ggdGhlIGNsb2NrIG92ZXIgdG8gdGhlIGFwcHJvcHJpYXRlIEFJRiAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQ0xPQ0tJTkdfMSwKKwkJCQkgICAgV004OTU4X0RTUDJDTEtfU1JDIHwgV004OTU4X0RTUDJDTEtfRU5BLAorCQkJCSAgICBhaWYgPDwgV004OTU4X0RTUDJDTEtfU1JDX1NISUZUIHwKKwkJCQkgICAgV004OTU4X0RTUDJDTEtfRU5BKTsKKworCQlpZiAod204OTk0LT5lbmhfZXFfZW5hW3BhdGhdKQorCQkJd204OTU4X2RzcF9zdGFydF9lbmhfZXEoY29kZWMsIHBhdGgpOworCQllbHNlIGlmICh3bTg5OTQtPnZzc19lbmFbcGF0aF0gfHwgd204OTk0LT5ocGYxX2VuYVtwYXRoXSB8fAorCQkgICAgd204OTk0LT5ocGYyX2VuYVtwYXRoXSkKKwkJCXdtODk1OF9kc3Bfc3RhcnRfdnNzKGNvZGVjLCBwYXRoKTsKKwkJZWxzZSBpZiAod204OTk0LT5tYmNfZW5hW3BhdGhdKQorCQkJd204OTU4X2RzcF9zdGFydF9tYmMoY29kZWMsIHBhdGgpOworCisJCXdtODk5NC0+ZHNwX2FjdGl2ZSA9IHBhdGg7CisKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiRFNQIHJ1bm5pbmcgaW4gcGF0aCAlZFxuIiwgcGF0aCk7CisJfQorCisJaWYgKCFzdGFydCAmJiB3bTg5OTQtPmRzcF9hY3RpdmUgPT0gcGF0aCkgeworCQkvKiBJZiB0aGUgRFNQIGlzIGFscmVhZHkgc3RvcHBlZCB0aGVuIG5vb3AgKi8KKwkJaWYgKCEocmVnICYgV004OTU4X0RTUDJfRU5BKSkKKwkJCXJldHVybjsKKworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NThfRFNQMl9DT05GSUcsCisJCQkJICAgIFdNODk1OF9NQkNfRU5BLCAwKTsJCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk1OF9EU1AyX0VYRUNDT05UUk9MLAorCQkJICAgICAgV004OTU4X0RTUDJfU1RPUCk7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1OF9EU1AyX1BST0dSQU0sCisJCQkJICAgIFdNODk1OF9EU1AyX0VOQSwgMCk7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9DTE9DS0lOR18xLAorCQkJCSAgICBXTTg5NThfRFNQMkNMS19FTkEsIDApOworCisJCXdtODk5NC0+ZHNwX2FjdGl2ZSA9IC0xOworCisJCWRldl9kYmcoY29kZWMtPmRldiwgIkRTUCBzdG9wcGVkXG4iKTsKKwl9Cit9CisKK2ludCB3bTg5NThfYWlmX2V2KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJaW50IGk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTVU6CisJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNVToKKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJCXdtODk1OF9kc3BfYXBwbHkoY29kZWMsIGksIDEpOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNRDoKKwljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1EOgorCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQkJd204OTU4X2RzcF9hcHBseShjb2RlYywgaSwgMCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCisvKiBDaGVjayBpZiBEU1AyIGlzIGluIHVzZSBvbiBhbm90aGVyIEFJRiAqLworc3RhdGljIGludCB3bTg5NThfZHNwMl9idXN5KHN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0LCBpbnQgYWlmKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204OTk0LT5tYmNfZW5hKTsgaSsrKSB7CisJCWlmIChpID09IGFpZikKKwkJCWNvbnRpbnVlOworCQlpZiAod204OTk0LT5tYmNfZW5hW2ldIHx8IHdtODk5NC0+dnNzX2VuYVtpXSB8fAorCQkgICAgd204OTk0LT5ocGYxX2VuYVtpXSB8fCB3bTg5OTQtPmhwZjJfZW5hW2ldKQorCQkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTU4X3B1dF9tYmNfZW51bShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlzdHJ1Y3Qgd204OTk0X3BkYXRhICpwZGF0YSA9IHdtODk5NC0+cGRhdGE7CisJaW50IHZhbHVlID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisJaW50IHJlZzsKKworCS8qIERvbid0IGFsbG93IG9uIHRoZSBmbHkgcmVjb25maWd1cmF0aW9uICovCisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTRfQ0xPQ0tJTkdfMSk7CisJaWYgKHJlZyA8IDAgfHwgcmVnICYgV004OTU4X0RTUDJDTEtfRU5BKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKHZhbHVlID49IHBkYXRhLT5udW1fbWJjX2NmZ3MpCisJCXJldHVybiAtRUlOVkFMOworCisJd204OTk0LT5tYmNfY2ZnID0gdmFsdWU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5NThfZ2V0X21iY19lbnVtKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IHdtODk5NC0+bWJjX2NmZzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk1OF9tYmNfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0JPT0xFQU47CisJdWluZm8tPmNvdW50ID0gMTsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTU4X21iY19nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCWludCBtYmMgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gd204OTk0LT5tYmNfZW5hW21iY107CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5NThfbWJjX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJaW50IG1iYyA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJaWYgKHdtODk5NC0+bWJjX2VuYVttYmNdID09IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKQorCQlyZXR1cm4gMDsKKworCWlmICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHdtODk1OF9kc3AyX2J1c3kod204OTk0LCBtYmMpKSB7CisJCWRldl9kYmcoY29kZWMtPmRldiwgIkRTUDIgYWN0aXZlIG9uICVkIGFscmVhZHlcbiIsIG1iYyk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKHdtODk5NC0+ZW5oX2VxX2VuYVttYmNdKQorCQlyZXR1cm4gLUVCVVNZOworCisJd204OTk0LT5tYmNfZW5hW21iY10gPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKworCXdtODk1OF9kc3BfYXBwbHkoY29kZWMsIG1iYywgd204OTk0LT5tYmNfZW5hW21iY10pOworCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgV004OTU4X01CQ19TV0lUQ0goeG5hbWUsIHh2YWwpIHtcCisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0gKHhuYW1lKSwgXAorCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFLFwKKwkuaW5mbyA9IHdtODk1OF9tYmNfaW5mbywgXAorCS5nZXQgPSB3bTg5NThfbWJjX2dldCwgLnB1dCA9IHdtODk1OF9tYmNfcHV0LCBcCisJLnByaXZhdGVfdmFsdWUgPSB4dmFsIH0KKworc3RhdGljIGludCB3bTg5NThfcHV0X3Zzc19lbnVtKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCB3bTg5OTRfcGRhdGEgKnBkYXRhID0gd204OTk0LT5wZGF0YTsKKwlpbnQgdmFsdWUgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKwlpbnQgcmVnOworCisJLyogRG9uJ3QgYWxsb3cgb24gdGhlIGZseSByZWNvbmZpZ3VyYXRpb24gKi8KKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5NF9DTE9DS0lOR18xKTsKKwlpZiAocmVnIDwgMCB8fCByZWcgJiBXTTg5NThfRFNQMkNMS19FTkEpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAodmFsdWUgPj0gcGRhdGEtPm51bV92c3NfY2ZncykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3bTg5OTQtPnZzc19jZmcgPSB2YWx1ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk1OF9nZXRfdnNzX2VudW0oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisKKwl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gd204OTk0LT52c3NfY2ZnOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTU4X3B1dF92c3NfaHBmX2VudW0oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJc3RydWN0IHdtODk5NF9wZGF0YSAqcGRhdGEgPSB3bTg5OTQtPnBkYXRhOworCWludCB2YWx1ZSA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCWludCByZWc7CisKKwkvKiBEb24ndCBhbGxvdyBvbiB0aGUgZmx5IHJlY29uZmlndXJhdGlvbiAqLworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTk0X0NMT0NLSU5HXzEpOworCWlmIChyZWcgPCAwIHx8IHJlZyAmIFdNODk1OF9EU1AyQ0xLX0VOQSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmICh2YWx1ZSA+PSBwZGF0YS0+bnVtX3Zzc19ocGZfY2ZncykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3bTg5OTQtPnZzc19ocGZfY2ZnID0gdmFsdWU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5NThfZ2V0X3Zzc19ocGZfZW51bShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKworCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSB3bTg5OTQtPnZzc19ocGZfY2ZnOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTU4X3Zzc19pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfQk9PTEVBTjsKKwl1aW5mby0+Y291bnQgPSAxOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5NThfdnNzX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJaW50IHZzcyA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSB3bTg5OTQtPnZzc19lbmFbdnNzXTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk1OF92c3NfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlpbnQgdnNzID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisKKwlpZiAod204OTk0LT52c3NfZW5hW3Zzc10gPT0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pCisJCXJldHVybiAwOworCisJaWYgKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXdtODk5NC0+bWJjX3ZzcykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAod204OTU4X2RzcDJfYnVzeSh3bTg5OTQsIHZzcykpIHsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiRFNQMiBhY3RpdmUgb24gJWQgYWxyZWFkeVxuIiwgdnNzKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpZiAod204OTk0LT5lbmhfZXFfZW5hW3Zzc10pCisJCXJldHVybiAtRUJVU1k7CisKKwl3bTg5OTQtPnZzc19lbmFbdnNzXSA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCisJd204OTU4X2RzcF9hcHBseShjb2RlYywgdnNzLCB3bTg5OTQtPnZzc19lbmFbdnNzXSk7CisKKwlyZXR1cm4gMDsKK30KKworCisjZGVmaW5lIFdNODk1OF9WU1NfU1dJVENIKHhuYW1lLCB4dmFsKSB7XAorCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9ICh4bmFtZSksIFwKKwkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSxcCisJLmluZm8gPSB3bTg5NThfdnNzX2luZm8sIFwKKwkuZ2V0ID0gd204OTU4X3Zzc19nZXQsIC5wdXQgPSB3bTg5NThfdnNzX3B1dCwgXAorCS5wcml2YXRlX3ZhbHVlID0geHZhbCB9CisKK3N0YXRpYyBpbnQgd204OTU4X2hwZl9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfQk9PTEVBTjsKKwl1aW5mby0+Y291bnQgPSAxOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5NThfaHBmX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJaW50IGhwZiA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJaWYgKGhwZiA8IDMpCisJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gd204OTk0LT5ocGYxX2VuYVtocGYgJSAzXTsKKwllbHNlCisJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gd204OTk0LT5ocGYyX2VuYVtocGYgJSAzXTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk1OF9ocGZfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlpbnQgaHBmID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisKKwlpZiAoaHBmIDwgMykgeworCQlpZiAod204OTk0LT5ocGYxX2VuYVtocGYgJSAzXSA9PQorCQkgICAgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlpZiAod204OTk0LT5ocGYyX2VuYVtocGYgJSAzXSA9PQorCQkgICAgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pCisJCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghd204OTk0LT5tYmNfdnNzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICh3bTg5NThfZHNwMl9idXN5KHdtODk5NCwgaHBmICUgMykpIHsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiRFNQMiBhY3RpdmUgb24gJWQgYWxyZWFkeVxuIiwgaHBmKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpZiAod204OTk0LT5lbmhfZXFfZW5hW2hwZiAlIDNdKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKGhwZiA8IDMpCisJCXdtODk5NC0+aHBmMV9lbmFbaHBmICUgM10gPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKwllbHNlCisJCXdtODk5NC0+aHBmMl9lbmFbaHBmICUgM10gPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKworCXdtODk1OF9kc3BfYXBwbHkoY29kZWMsIGhwZiAlIDMsIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKTsKKworCXJldHVybiAwOworfQorCisjZGVmaW5lIFdNODk1OF9IUEZfU1dJVENIKHhuYW1lLCB4dmFsKSB7XAorCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9ICh4bmFtZSksIFwKKwkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSxcCisJLmluZm8gPSB3bTg5NThfaHBmX2luZm8sIFwKKwkuZ2V0ID0gd204OTU4X2hwZl9nZXQsIC5wdXQgPSB3bTg5NThfaHBmX3B1dCwgXAorCS5wcml2YXRlX3ZhbHVlID0geHZhbCB9CisKK3N0YXRpYyBpbnQgd204OTU4X3B1dF9lbmhfZXFfZW51bShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCB3bTg5OTRfcGRhdGEgKnBkYXRhID0gd204OTk0LT5wZGF0YTsKKwlpbnQgdmFsdWUgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKwlpbnQgcmVnOworCisJLyogRG9uJ3QgYWxsb3cgb24gdGhlIGZseSByZWNvbmZpZ3VyYXRpb24gKi8KKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5NF9DTE9DS0lOR18xKTsKKwlpZiAocmVnIDwgMCB8fCByZWcgJiBXTTg5NThfRFNQMkNMS19FTkEpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAodmFsdWUgPj0gcGRhdGEtPm51bV9lbmhfZXFfY2ZncykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3bTg5OTQtPmVuaF9lcV9jZmcgPSB2YWx1ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk1OF9nZXRfZW5oX2VxX2VudW0oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKworCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSB3bTg5OTQtPmVuaF9lcV9jZmc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5NThfZW5oX2VxX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9CT09MRUFOOworCXVpbmZvLT5jb3VudCA9IDE7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk1OF9lbmhfZXFfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlpbnQgZXEgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gd204OTk0LT5lbmhfZXFfZW5hW2VxXTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk1OF9lbmhfZXFfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlpbnQgZXEgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKworCWlmICh3bTg5OTQtPmVuaF9lcV9lbmFbZXFdID09IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKQorCQlyZXR1cm4gMDsKKworCWlmICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCF3bTg5OTQtPmVuaF9lcSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAod204OTU4X2RzcDJfYnVzeSh3bTg5OTQsIGVxKSkgeworCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJEU1AyIGFjdGl2ZSBvbiAlZCBhbHJlYWR5XG4iLCBlcSk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKHdtODk5NC0+bWJjX2VuYVtlcV0gfHwgd204OTk0LT52c3NfZW5hW2VxXSB8fAorCSAgICB3bTg5OTQtPmhwZjFfZW5hW2VxXSB8fCB3bTg5OTQtPmhwZjJfZW5hW2VxXSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXdtODk5NC0+ZW5oX2VxX2VuYVtlcV0gPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKworCXdtODk1OF9kc3BfYXBwbHkoY29kZWMsIGVxLCB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSk7CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBXTTg5NThfRU5IX0VRX1NXSVRDSCh4bmFtZSwgeHZhbCkge1wKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSAoeG5hbWUpLCBcCisJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUsXAorCS5pbmZvID0gd204OTU4X2VuaF9lcV9pbmZvLCBcCisJLmdldCA9IHdtODk1OF9lbmhfZXFfZ2V0LCAucHV0ID0gd204OTU4X2VuaF9lcV9wdXQsIFwKKwkucHJpdmF0ZV92YWx1ZSA9IHh2YWwgfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204OTU4X21iY19zbmRfY29udHJvbHNbXSA9IHsKK1dNODk1OF9NQkNfU1dJVENIKCJBSUYxREFDMSBNQkMgU3dpdGNoIiwgMCksCitXTTg5NThfTUJDX1NXSVRDSCgiQUlGMURBQzIgTUJDIFN3aXRjaCIsIDEpLAorV004OTU4X01CQ19TV0lUQ0goIkFJRjJEQUMgTUJDIFN3aXRjaCIsIDIpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODk1OF92c3Nfc25kX2NvbnRyb2xzW10gPSB7CitXTTg5NThfVlNTX1NXSVRDSCgiQUlGMURBQzEgVlNTIFN3aXRjaCIsIDApLAorV004OTU4X1ZTU19TV0lUQ0goIkFJRjFEQUMyIFZTUyBTd2l0Y2giLCAxKSwKK1dNODk1OF9WU1NfU1dJVENIKCJBSUYyREFDIFZTUyBTd2l0Y2giLCAyKSwKK1dNODk1OF9IUEZfU1dJVENIKCJBSUYxREFDMSBIUEYxIFN3aXRjaCIsIDApLAorV004OTU4X0hQRl9TV0lUQ0goIkFJRjFEQUMyIEhQRjEgU3dpdGNoIiwgMSksCitXTTg5NThfSFBGX1NXSVRDSCgiQUlGMkRBQyBIUEYxIFN3aXRjaCIsIDIpLAorV004OTU4X0hQRl9TV0lUQ0goIkFJRjFEQUMxIEhQRjIgU3dpdGNoIiwgMyksCitXTTg5NThfSFBGX1NXSVRDSCgiQUlGMURBQzIgSFBGMiBTd2l0Y2giLCA0KSwKK1dNODk1OF9IUEZfU1dJVENIKCJBSUYyREFDIEhQRjIgU3dpdGNoIiwgNSksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204OTU4X2VuaF9lcV9zbmRfY29udHJvbHNbXSA9IHsKK1dNODk1OF9FTkhfRVFfU1dJVENIKCJBSUYxREFDMSBFbmhhbmNlZCBFUSBTd2l0Y2giLCAwKSwKK1dNODk1OF9FTkhfRVFfU1dJVENIKCJBSUYxREFDMiBFbmhhbmNlZCBFUSBTd2l0Y2giLCAxKSwKK1dNODk1OF9FTkhfRVFfU1dJVENIKCJBSUYyREFDIEVuaGFuY2VkIEVRIFN3aXRjaCIsIDIpLAorfTsKKworc3RhdGljIHZvaWQgd204OTU4X2VuaF9lcV9sb2FkZWQoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb250ZXh0OworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisKKwlpZiAoZncgJiYgKHdtODk1OF9kc3AyX2Z3KGNvZGVjLCAiRU5IX0VRIiwgZncsIHRydWUpID09IDApKSB7CisJCW11dGV4X2xvY2soJmNvZGVjLT5tdXRleCk7CisJCXdtODk5NC0+ZW5oX2VxID0gZnc7CisJCW11dGV4X3VubG9jaygmY29kZWMtPm11dGV4KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHdtODk1OF9tYmNfdnNzX2xvYWRlZChjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LCB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvbnRleHQ7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKworCWlmIChmdyAmJiAod204OTU4X2RzcDJfZncoY29kZWMsICJNQkMrVlNTIiwgZncsIHRydWUpID09IDApKSB7CisJCW11dGV4X2xvY2soJmNvZGVjLT5tdXRleCk7CisJCXdtODk5NC0+bWJjX3ZzcyA9IGZ3OworCQltdXRleF91bmxvY2soJmNvZGVjLT5tdXRleCk7CisJfQorCisJLyogV2UgY2FuJ3QgaGF2ZSBtb3JlIHRoYW4gb25lIHJlcXVlc3Qgb3V0c3RhbmRpbmcgYXQgb25jZSBzbworCSAqIHdlIGRhaXN5IGNoYWluLgorCSAqLworCXJlcXVlc3RfZmlybXdhcmVfbm93YWl0KFRISVNfTU9EVUxFLCBGV19BQ1RJT05fSE9UUExVRywKKwkJCQkid204OTU4X2VuaF9lcS53ZnciLCBjb2RlYy0+ZGV2LCBHRlBfS0VSTkVMLAorCQkJCWNvZGVjLCB3bTg5NThfZW5oX2VxX2xvYWRlZCk7Cit9CisKK3N0YXRpYyB2b2lkIHdtODk1OF9tYmNfbG9hZGVkKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29udGV4dDsKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJaWYgKHdtODk1OF9kc3AyX2Z3KGNvZGVjLCAiTUJDIiwgZncsIHRydWUpICE9IDApCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJmNvZGVjLT5tdXRleCk7CisJd204OTk0LT5tYmMgPSBmdzsKKwltdXRleF91bmxvY2soJmNvZGVjLT5tdXRleCk7CisKKwkvKiBXZSBjYW4ndCBoYXZlIG1vcmUgdGhhbiBvbmUgcmVxdWVzdCBvdXRzdGFuZGluZyBhdCBvbmNlIHNvCisJICogd2UgZGFpc3kgY2hhaW4uCisJICovCisJcmVxdWVzdF9maXJtd2FyZV9ub3dhaXQoVEhJU19NT0RVTEUsIEZXX0FDVElPTl9IT1RQTFVHLAorCQkJCSJ3bTg5NThfbWJjX3Zzcy53ZnciLCBjb2RlYy0+ZGV2LCBHRlBfS0VSTkVMLAorCQkJCWNvZGVjLCB3bTg5NThfbWJjX3Zzc19sb2FkZWQpOworfQorCit2b2lkIHdtODk1OF9kc3AyX2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJc3RydWN0IHdtODk5NF9wZGF0YSAqcGRhdGEgPSB3bTg5OTQtPnBkYXRhOworCWludCByZXQsIGk7CisKKwl3bTg5OTQtPmRzcF9hY3RpdmUgPSAtMTsKKworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg5NThfbWJjX3NuZF9jb250cm9scywKKwkJCSAgICAgQVJSQVlfU0laRSh3bTg5NThfbWJjX3NuZF9jb250cm9scykpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg5NThfdnNzX3NuZF9jb250cm9scywKKwkJCSAgICAgQVJSQVlfU0laRSh3bTg5NThfdnNzX3NuZF9jb250cm9scykpOworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg5NThfZW5oX2VxX3NuZF9jb250cm9scywKKwkJCSAgICAgQVJSQVlfU0laRSh3bTg5NThfZW5oX2VxX3NuZF9jb250cm9scykpOworCisKKwkvKiBXZSBkb24ndCAqcmVxdWlyZSogZmlybXdhcmUgYW5kIGRvbid0IHdhbnQgdG8gZGVsYXkgYm9vdCAqLworCXJlcXVlc3RfZmlybXdhcmVfbm93YWl0KFRISVNfTU9EVUxFLCBGV19BQ1RJT05fSE9UUExVRywKKwkJCQkid204OTU4X21iYy53ZnciLCBjb2RlYy0+ZGV2LCBHRlBfS0VSTkVMLAorCQkJCWNvZGVjLCB3bTg5NThfbWJjX2xvYWRlZCk7CisKKwlpZiAoIXBkYXRhKQorCQlyZXR1cm47CisKKwlpZiAocGRhdGEtPm51bV9tYmNfY2ZncykgeworCQlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjb250cm9sW10gPSB7CisJCQlTT0NfRU5VTV9FWFQoIk1CQyBNb2RlIiwgd204OTk0LT5tYmNfZW51bSwKKwkJCQkgICAgIHdtODk1OF9nZXRfbWJjX2VudW0sIHdtODk1OF9wdXRfbWJjX2VudW0pLAorCQl9OworCisJCS8qIFdlIG5lZWQgYW4gYXJyYXkgb2YgdGV4dHMgZm9yIHRoZSBlbnVtIEFQSSAqLworCQl3bTg5OTQtPm1iY190ZXh0cyA9IGttYWxsb2Moc2l6ZW9mKGNoYXIgKikKKwkJCQkJICAgICogcGRhdGEtPm51bV9tYmNfY2ZncywgR0ZQX0tFUk5FTCk7CisJCWlmICghd204OTk0LT5tYmNfdGV4dHMpIHsKKwkJCWRldl9lcnIod204OTk0LT5jb2RlYy0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gYWxsb2NhdGUgJWQgTUJDIGNvbmZpZyB0ZXh0c1xuIiwKKwkJCQlwZGF0YS0+bnVtX21iY19jZmdzKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX21iY19jZmdzOyBpKyspCisJCQl3bTg5OTQtPm1iY190ZXh0c1tpXSA9IHBkYXRhLT5tYmNfY2Znc1tpXS5uYW1lOworCisJCXdtODk5NC0+bWJjX2VudW0ubWF4ID0gcGRhdGEtPm51bV9tYmNfY2ZnczsKKwkJd204OTk0LT5tYmNfZW51bS50ZXh0cyA9IHdtODk5NC0+bWJjX3RleHRzOworCisJCXJldCA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKHdtODk5NC0+Y29kZWMsIGNvbnRyb2wsIDEpOworCQlpZiAocmV0ICE9IDApCisJCQlkZXZfZXJyKHdtODk5NC0+Y29kZWMtPmRldiwKKwkJCQkiRmFpbGVkIHRvIGFkZCBNQkMgbW9kZSBjb250cm9sczogJWRcbiIsIHJldCk7CisJfQorCisJaWYgKHBkYXRhLT5udW1fdnNzX2NmZ3MpIHsKKwkJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY29udHJvbFtdID0geworCQkJU09DX0VOVU1fRVhUKCJWU1MgTW9kZSIsIHdtODk5NC0+dnNzX2VudW0sCisJCQkJICAgICB3bTg5NThfZ2V0X3Zzc19lbnVtLCB3bTg5NThfcHV0X3Zzc19lbnVtKSwKKwkJfTsKKworCQkvKiBXZSBuZWVkIGFuIGFycmF5IG9mIHRleHRzIGZvciB0aGUgZW51bSBBUEkgKi8KKwkJd204OTk0LT52c3NfdGV4dHMgPSBrbWFsbG9jKHNpemVvZihjaGFyICopCisJCQkJCSAgICAqIHBkYXRhLT5udW1fdnNzX2NmZ3MsIEdGUF9LRVJORUwpOworCQlpZiAoIXdtODk5NC0+dnNzX3RleHRzKSB7CisJCQlkZXZfZXJyKHdtODk5NC0+Y29kZWMtPmRldiwKKwkJCQkiRmFpbGVkIHRvIGFsbG9jYXRlICVkIFZTUyBjb25maWcgdGV4dHNcbiIsCisJCQkJcGRhdGEtPm51bV92c3NfY2Zncyk7CisJCQlyZXR1cm47CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV92c3NfY2ZnczsgaSsrKQorCQkJd204OTk0LT52c3NfdGV4dHNbaV0gPSBwZGF0YS0+dnNzX2NmZ3NbaV0ubmFtZTsKKworCQl3bTg5OTQtPnZzc19lbnVtLm1heCA9IHBkYXRhLT5udW1fdnNzX2NmZ3M7CisJCXdtODk5NC0+dnNzX2VudW0udGV4dHMgPSB3bTg5OTQtPnZzc190ZXh0czsKKworCQlyZXQgPSBzbmRfc29jX2FkZF9jb250cm9scyh3bTg5OTQtPmNvZGVjLCBjb250cm9sLCAxKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZGV2X2Vycih3bTg5OTQtPmNvZGVjLT5kZXYsCisJCQkJIkZhaWxlZCB0byBhZGQgVlNTIG1vZGUgY29udHJvbHM6ICVkXG4iLCByZXQpOworCX0KKworCWlmIChwZGF0YS0+bnVtX3Zzc19ocGZfY2ZncykgeworCQlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjb250cm9sW10gPSB7CisJCQlTT0NfRU5VTV9FWFQoIlZTUyBIUEYgTW9kZSIsIHdtODk5NC0+dnNzX2hwZl9lbnVtLAorCQkJCSAgICAgd204OTU4X2dldF92c3NfaHBmX2VudW0sCisJCQkJICAgICB3bTg5NThfcHV0X3Zzc19ocGZfZW51bSksCisJCX07CisKKwkJLyogV2UgbmVlZCBhbiBhcnJheSBvZiB0ZXh0cyBmb3IgdGhlIGVudW0gQVBJICovCisJCXdtODk5NC0+dnNzX2hwZl90ZXh0cyA9IGttYWxsb2Moc2l6ZW9mKGNoYXIgKikKKwkJCQkJCSogcGRhdGEtPm51bV92c3NfaHBmX2NmZ3MsIEdGUF9LRVJORUwpOworCQlpZiAoIXdtODk5NC0+dnNzX2hwZl90ZXh0cykgeworCQkJZGV2X2Vycih3bTg5OTQtPmNvZGVjLT5kZXYsCisJCQkJIkZhaWxlZCB0byBhbGxvY2F0ZSAlZCBWU1MgSFBGIGNvbmZpZyB0ZXh0c1xuIiwKKwkJCQlwZGF0YS0+bnVtX3Zzc19ocGZfY2Zncyk7CisJCQlyZXR1cm47CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV92c3NfaHBmX2NmZ3M7IGkrKykKKwkJCXdtODk5NC0+dnNzX2hwZl90ZXh0c1tpXSA9IHBkYXRhLT52c3NfaHBmX2NmZ3NbaV0ubmFtZTsKKworCQl3bTg5OTQtPnZzc19ocGZfZW51bS5tYXggPSBwZGF0YS0+bnVtX3Zzc19ocGZfY2ZnczsKKwkJd204OTk0LT52c3NfaHBmX2VudW0udGV4dHMgPSB3bTg5OTQtPnZzc19ocGZfdGV4dHM7CisKKwkJcmV0ID0gc25kX3NvY19hZGRfY29udHJvbHMod204OTk0LT5jb2RlYywgY29udHJvbCwgMSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCWRldl9lcnIod204OTk0LT5jb2RlYy0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gYWRkIFZTUyBIUEZtb2RlIGNvbnRyb2xzOiAlZFxuIiwKKwkJCQlyZXQpOworCX0KKworCWlmIChwZGF0YS0+bnVtX2VuaF9lcV9jZmdzKSB7CisJCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGNvbnRyb2xbXSA9IHsKKwkJCVNPQ19FTlVNX0VYVCgiRW5oYW5jZWQgRVEgTW9kZSIsIHdtODk5NC0+ZW5oX2VxX2VudW0sCisJCQkJICAgICB3bTg5NThfZ2V0X2VuaF9lcV9lbnVtLAorCQkJCSAgICAgd204OTU4X3B1dF9lbmhfZXFfZW51bSksCisJCX07CisKKwkJLyogV2UgbmVlZCBhbiBhcnJheSBvZiB0ZXh0cyBmb3IgdGhlIGVudW0gQVBJICovCisJCXdtODk5NC0+ZW5oX2VxX3RleHRzID0ga21hbGxvYyhzaXplb2YoY2hhciAqKQorCQkJCQkJKiBwZGF0YS0+bnVtX2VuaF9lcV9jZmdzLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF3bTg5OTQtPmVuaF9lcV90ZXh0cykgeworCQkJZGV2X2Vycih3bTg5OTQtPmNvZGVjLT5kZXYsCisJCQkJIkZhaWxlZCB0byBhbGxvY2F0ZSAlZCBlbmhhbmNlZCBFUSBjb25maWcgdGV4dHNcbiIsCisJCQkJcGRhdGEtPm51bV9lbmhfZXFfY2Zncyk7CisJCQlyZXR1cm47CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV9lbmhfZXFfY2ZnczsgaSsrKQorCQkJd204OTk0LT5lbmhfZXFfdGV4dHNbaV0gPSBwZGF0YS0+ZW5oX2VxX2NmZ3NbaV0ubmFtZTsKKworCQl3bTg5OTQtPmVuaF9lcV9lbnVtLm1heCA9IHBkYXRhLT5udW1fZW5oX2VxX2NmZ3M7CisJCXdtODk5NC0+ZW5oX2VxX2VudW0udGV4dHMgPSB3bTg5OTQtPmVuaF9lcV90ZXh0czsKKworCQlyZXQgPSBzbmRfc29jX2FkZF9jb250cm9scyh3bTg5OTQtPmNvZGVjLCBjb250cm9sLCAxKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZGV2X2Vycih3bTg5OTQtPmNvZGVjLT5kZXYsCisJCQkJIkZhaWxlZCB0byBhZGQgZW5oYW5jZWQgRVEgY29udHJvbHM6ICVkXG4iLAorCQkJCXJldCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5NjIuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYyLmMKaW5kZXggNTAwMDExZS4uZjkwYWU0MiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5NjIuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk2Mi5jCkBAIC01OCw2ICs1OCw3IEBACiAJaW50IGJjbGs7ICAvKiBEZXNpcmVkIEJDTEsgKi8KIAlpbnQgbHJjbGs7CiAKKwlzdHJ1Y3QgY29tcGxldGlvbiBmbGxfbG9jazsKIAlpbnQgZmxsX3NyYzsKIAlpbnQgZmxsX2ZyZWY7CiAJaW50IGZsbF9mb3V0OwpAQCAtMjAzOCw2ICsyMDM5LDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBjaGFyICpjYXBfaHBmX21vZGVfdGV4dFtdID0geworCSJIaS1maSIsICJBcHBsaWNhdGlvbiIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gY2FwX2hwZl9tb2RlID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTYyX0FEQ19EQUNfQ09OVFJPTF8yLCAxMCwgMiwgY2FwX2hwZl9tb2RlX3RleHQpOworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204OTYyX3NuZF9jb250cm9sc1tdID0gewogU09DX0RPVUJMRSgiSW5wdXQgTWl4ZXIgU3dpdGNoIiwgV004OTYyX0lOUFVUX01JWEVSX0NPTlRST0xfMSwgMywgMiwgMSwgMSksCiAKQEAgLTIwNjMsNiArMjA3MSw5IEBACiAJICAgICBXTTg5NjJfUklHSFRfSU5QVVRfVk9MVU1FLCA3LCAxLCAxKSwKIFNPQ19ET1VCTEVfUigiQ2FwdHVyZSBaQyBTd2l0Y2giLCBXTTg5NjJfTEVGVF9JTlBVVF9WT0xVTUUsCiAJICAgICBXTTg5NjJfUklHSFRfSU5QVVRfVk9MVU1FLCA2LCAxLCAxKSwKK1NPQ19TSU5HTEUoIkNhcHR1cmUgSFBGIFN3aXRjaCIsIFdNODk2Ml9BRENfREFDX0NPTlRST0xfMSwgMCwgMSwgMSksCitTT0NfRU5VTSgiQ2FwdHVyZSBIUEYgTW9kZSIsIGNhcF9ocGZfbW9kZSksCitTT0NfU0lOR0xFKCJDYXB0dXJlIEhQRiBDdXRvZmYiLCBXTTg5NjJfQURDX0RBQ19DT05UUk9MXzIsIDcsIDcsIDApLAogCiBTT0NfRE9VQkxFX1JfVExWKCJTaWRldG9uZSBWb2x1bWUiLCBXTTg5NjJfREFDX0RTUF9NSVhJTkdfMSwKIAkJIFdNODk2Ml9EQUNfRFNQX01JWElOR18yLCA0LCAxMiwgMCwgc3RfdGx2KSwKQEAgLTI0NjcsNiArMjQ3OCw3IEBACiBTTkRfU09DX0RBUE1fSU5QVVQoIklONEwiKSwKIFNORF9TT0NfREFQTV9JTlBVVCgiSU40UiIpLAogU05EX1NPQ19EQVBNX0lOUFVUKCJCZWVwIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIkRNSUNEQVQiKSwKIAogU05EX1NPQ19EQVBNX01JQ0JJQVMoIk1JQ0JJQVMiLCBXTTg5NjJfUFdSX01HTVRfMSwgMSwgMCksCiAKQEAgLTI0ODYsNiArMjQ5OCw4IEBACiBTTkRfU09DX0RBUE1fTUlYRVIoIk1JWElOUiIsIFdNODk2Ml9QV1JfTUdNVF8xLCA0LCAwLAogCQkgICBtaXhpbnIsIEFSUkFZX1NJWkUobWl4aW5yKSksCiAKK1NORF9TT0NfREFQTV9BSUZfSU4oIkRNSUMiLCBOVUxMLCAwLCBXTTg5NjJfUFdSX01HTVRfMSwgMTAsIDApLAorCiBTTkRfU09DX0RBUE1fQURDKCJBRENMIiwgIkNhcHR1cmUiLCBXTTg5NjJfUFdSX01HTVRfMSwgMywgMCksCiBTTkRfU09DX0RBUE1fQURDKCJBRENSIiwgIkNhcHR1cmUiLCBXTTg5NjJfUFdSX01HTVRfMSwgMiwgMCksCiAKQEAgLTI1NjMsMTMgKzI1NzcsMTcgQEAKIAogCXsgIk1JQ0JJQVMiLCBOVUxMLCAiU1lTQ0xLIiB9LAogCisJeyAiRE1JQyIsIE5VTEwsICJETUlDREFUIiB9LAorCiAJeyAiQURDTCIsIE5VTEwsICJTWVNDTEsiIH0sCiAJeyAiQURDTCIsIE5VTEwsICJUT0NMSyIgfSwKIAl7ICJBRENMIiwgTlVMTCwgIk1JWElOTCIgfSwKKwl7ICJBRENMIiwgTlVMTCwgIkRNSUMiIH0sCiAKIAl7ICJBRENSIiwgTlVMTCwgIlNZU0NMSyIgfSwKIAl7ICJBRENSIiwgTlVMTCwgIlRPQ0xLIiB9LAogCXsgIkFEQ1IiLCBOVUxMLCAiTUlYSU5SIiB9LAorCXsgIkFEQ1IiLCBOVUxMLCAiRE1JQyIgfSwKIAogCXsgIlNUTCIsICJMZWZ0IiwgIkFEQ0wiIH0sCiAJeyAiU1RMIiwgIlJpZ2h0IiwgIkFEQ1IiIH0sCkBAIC0yOTkwLDcgKzMwMDgsNiBAQAogCWNhc2UgV004OTYyX1NZU0NMS19GTEw6CiAJCXdtODk2Mi0+c3lzY2xrID0gV004OTYyX1NZU0NMS19GTEw7CiAJCXNyYyA9IDEgPDwgV004OTYyX1NZU0NMS19TUkNfU0hJRlQ7Ci0JCVdBUk5fT04oZnJlcSAhPSB3bTg5NjItPmZsbF9mb3V0KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMTcyLDEyICszMTg5LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgd204OTYyX3NldF9mbGwoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCBmbGxfaWQsIGludCBzb3VyY2UsCitzdGF0aWMgaW50IHdtODk2Ml9zZXRfZmxsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IGZsbF9pZCwgaW50IHNvdXJjZSwKIAkJCSAgdW5zaWduZWQgaW50IEZyZWYsIHVuc2lnbmVkIGludCBGb3V0KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CiAJc3RydWN0IHdtODk2Ml9wcml2ICp3bTg5NjIgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAlzdHJ1Y3QgX2ZsbF9kaXYgZmxsX2RpdjsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAJaW50IHJldDsKIAlpbnQgZmxsMSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTYyX0ZMTF9DT05UUk9MXzEpICYgV004OTYyX0ZMTF9FTkE7CiAKQEAgLTMyNDQsNiArMzI2MSwxMSBAQAogCiAJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiRkxMIGNvbmZpZ3VyZWQgZm9yICVkSHotPiVkSHpcbiIsIEZyZWYsIEZvdXQpOwogCisJLyogVGhpcyBzaG91bGQgYmUgYSBtYXNzaXZlIG92ZXJlc3RpbWF0ZSAqLworCXRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKDEpOworCisJd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZ3bTg5NjItPmZsbF9sb2NrLCB0aW1lb3V0KTsKKwogCXdtODk2Mi0+ZmxsX2ZyZWYgPSBGcmVmOwogCXdtODk2Mi0+ZmxsX2ZvdXQgPSBGb3V0OwogCXdtODk2Mi0+ZmxsX3NyYyA9IHNvdXJjZTsKQEAgLTMyNzQsNyArMzI5Niw2IEBACiAJLmh3X3BhcmFtcyA9IHdtODk2Ml9od19wYXJhbXMsCiAJLnNldF9zeXNjbGsgPSB3bTg5NjJfc2V0X2RhaV9zeXNjbGssCiAJLnNldF9mbXQgPSB3bTg5NjJfc2V0X2RhaV9mbXQsCi0JLnNldF9wbGwgPSB3bTg5NjJfc2V0X2ZsbCwKIAkuZGlnaXRhbF9tdXRlID0gd204OTYyX211dGUsCiB9OwogCkBAIC0zMzQwLDYgKzMzNjEsMTEgQEAKIAlhY3RpdmUgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk2Ml9JTlRFUlJVUFRfU1RBVFVTXzIpOwogCWFjdGl2ZSAmPSB+bWFzazsKIAorCWlmIChhY3RpdmUgJiBXTTg5NjJfRkxMX0xPQ0tfRUlOVCkgeworCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJGTEwgbG9ja2VkXG4iKTsKKwkJY29tcGxldGUoJndtODk2Mi0+ZmxsX2xvY2spOworCX0KKwogCWlmIChhY3RpdmUgJiBXTTg5NjJfRklGT1NfRVJSX0VJTlQpCiAJCWRldl9lcnIoY29kZWMtPmRldiwgIkZJRk8gZXJyb3JcbiIpOwogCkBAIC0zNzA5LDkgKzM3MzUsMTEgQEAKIAkJCQkJICAgICAgZGV2KTsKIAl1MTYgKnJlZ19jYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CiAJaW50IGksIHRyaWdnZXIsIGlycV9wb2w7CisJYm9vbCBkbWljY2xrLCBkbWljZGF0OwogCiAJd204OTYyLT5jb2RlYyA9IGNvZGVjOwogCUlOSVRfREVMQVlFRF9XT1JLKCZ3bTg5NjItPm1pY193b3JrLCB3bTg5NjJfbWljX3dvcmspOworCWluaXRfY29tcGxldGlvbigmd204OTYyLT5mbGxfbG9jayk7CiAKIAljb2RlYy0+Y2FjaGVfc3luYyA9IDE7CiAJY29kZWMtPmRhcG0uaWRsZV9iaWFzX29mZiA9IDE7CkBAIC0zODQ1LDYgKzM4NzMsMjkgQEAKIAogCXdtODk2Ml9hZGRfd2lkZ2V0cyhjb2RlYyk7CiAKKwkvKiBTYXZlIGJvYXJkcyBoYXZpbmcgdG8gZGlzYWJsZSBETUlDIHdoZW4gbm90IGluIHVzZSAqLworCWRtaWNjbGsgPSBmYWxzZTsKKwlkbWljZGF0ID0gZmFsc2U7CisJZm9yIChpID0gMDsgaSA8IFdNODk2Ml9NQVhfR1BJTzsgaSsrKSB7CisJCXN3aXRjaCAoc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NjJfR1BJT19CQVNFICsgaSkKKwkJCSYgV004OTYyX0dQMl9GTl9NQVNLKSB7CisJCWNhc2UgV004OTYyX0dQSU9fRk5fRE1JQ0NMSzoKKwkJCWRtaWNjbGsgPSB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgV004OTYyX0dQSU9fRk5fRE1JQ0RBVDoKKwkJCWRtaWNkYXQgPSB0cnVlOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoIWRtaWNjbGsgfHwgIWRtaWNkYXQpIHsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiRE1JQyBub3QgaW4gdXNlLCBkaXNhYmxpbmdcbiIpOworCQlzbmRfc29jX2RhcG1fbmNfcGluKCZjb2RlYy0+ZGFwbSwgIkRNSUNEQVQiKTsKKwl9CisJaWYgKGRtaWNjbGsgIT0gZG1pY2RhdCkKKwkJZGV2X3dhcm4oY29kZWMtPmRldiwgIkRNSUMgR1BJT3MgcGFydGlhbGx5IGNvbmZpZ3VyZWRcbiIpOworCiAJd204OTYyX2luaXRfYmVlcChjb2RlYyk7CiAJd204OTYyX2luaXRfZ3Bpbyhjb2RlYyk7CiAKQEAgLTM4NjgsOSArMzkxOSwxMCBAQAogCQkJCWkyYy0+aXJxLCByZXQpOwogCQkJLyogTm9uLWZhdGFsICovCiAJCX0gZWxzZSB7Ci0JCQkvKiBFbmFibGUgZXJyb3IgcmVwb3J0aW5nIElSUXMgYnkgZGVmYXVsdCAqLworCQkJLyogRW5hYmxlIHNvbWUgSVJRcyBieSBkZWZhdWx0ICovCiAJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLAogCQkJCQkgICAgV004OTYyX0lOVEVSUlVQVF9TVEFUVVNfMl9NQVNLLAorCQkJCQkgICAgV004OTYyX0ZMTF9MT0NLX0VJTlQgfAogCQkJCQkgICAgV004OTYyX1RFTVBfU0hVVF9FSU5UIHwKIAkJCQkJICAgIFdNODk2Ml9GSUZPU19FUlJfRUlOVCwgMCk7CiAJCX0KQEAgLTM5MTgsNiArMzk3MCw3IEBACiAJLnJlZ19jYWNoZV9kZWZhdWx0ID0gd204OTYyX3JlZywKIAkudm9sYXRpbGVfcmVnaXN0ZXIgPSB3bTg5NjJfdm9sYXRpbGVfcmVnaXN0ZXIsCiAJLnJlYWRhYmxlX3JlZ2lzdGVyID0gd204OTYyX3JlYWRhYmxlX3JlZ2lzdGVyLAorCS5zZXRfcGxsID0gd204OTYyX3NldF9mbGwsCiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5OTMuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkzLmMKaW5kZXggMDU2YWVmOS4uOWU1ZmY3OCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5OTMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5My5jCkBAIC03MTgsNyArNzE4LDggQEAKIHN0YXRpYyBpbnQgY2xhc3Nfd19wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqd2lkZ2V0ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0X2xpc3QgKndsaXN0ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3aWRnZXQgPSB3bGlzdC0+d2lkZ2V0c1swXTsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3aWRnZXQtPmNvZGVjOwogCXN0cnVjdCB3bTg5OTNfcHJpdiAqd204OTkzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAJaW50IHJldDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5NC5jCmluZGV4IDg0ZTFiZDEuLjk3MGE5NWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTQuYwpAQCAtMzgsMTIgKzM4LDYgQEAKICNpbmNsdWRlICJ3bTg5OTQuaCIKICNpbmNsdWRlICJ3bV9odWJzLmgiCiAKLXN0cnVjdCBmbGxfY29uZmlnIHsKLQlpbnQgc3JjOwotCWludCBpbjsKLQlpbnQgb3V0OwotfTsKLQogI2RlZmluZSBXTTg5OTRfTlVNX0RSQyAzCiAjZGVmaW5lIFdNODk5NF9OVU1fRVEgIDMKIApAQCAtNTksNjMgKzUzLDExIEBACiAJV004OTk0X0FJRjJfRVFfR0FJTlNfMSwKIH07CiAKLXN0cnVjdCB3bTg5OTRfbWljZGV0IHsKLQlzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrOwotCWludCBkZXQ7Ci0JaW50IHNocnQ7Ci19OwotCi0vKiBjb2RlYyBwcml2YXRlIGRhdGEgKi8KLXN0cnVjdCB3bTg5OTRfcHJpdiB7Ci0Jc3RydWN0IHdtX2h1YnNfZGF0YSBodWJzOwotCWVudW0gc25kX3NvY19jb250cm9sX3R5cGUgY29udHJvbF90eXBlOwotCXZvaWQgKmNvbnRyb2xfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7Ci0JaW50IHN5c2Nsa1syXTsKLQlpbnQgc3lzY2xrX3JhdGVbMl07Ci0JaW50IG1jbGtbMl07Ci0JaW50IGFpZmNsa1syXTsKLQlzdHJ1Y3QgZmxsX2NvbmZpZyBmbGxbMl0sIGZsbF9zdXNwZW5kWzJdOwotCi0JaW50IGRhY19yYXRlc1syXTsKLQlpbnQgbHJjbGtfc2hhcmVkWzJdOwotCi0JaW50IG1iY19lbmFbM107Ci0KLQkvKiBQbGF0Zm9ybSBkZXBlbmRlbnQgRFJDIGNvbmZpZ3VyYXRpb24gKi8KLQljb25zdCBjaGFyICoqZHJjX3RleHRzOwotCWludCBkcmNfY2ZnW1dNODk5NF9OVU1fRFJDXTsKLQlzdHJ1Y3Qgc29jX2VudW0gZHJjX2VudW07Ci0KLQkvKiBQbGF0Zm9ybSBkZXBlbmRlbnQgUmVUdW5lIG1vYmlsZSBjb25maWd1cmF0aW9uICovCi0JaW50IG51bV9yZXR1bmVfbW9iaWxlX3RleHRzOwotCWNvbnN0IGNoYXIgKipyZXR1bmVfbW9iaWxlX3RleHRzOwotCWludCByZXR1bmVfbW9iaWxlX2NmZ1tXTTg5OTRfTlVNX0VRXTsKLQlzdHJ1Y3Qgc29jX2VudW0gcmV0dW5lX21vYmlsZV9lbnVtOwotCi0JLyogUGxhdGZvcm0gZGVwZW5kZW50IE1CQyBjb25maWd1cmF0aW9uICovCi0JaW50IG1iY19jZmc7Ci0JY29uc3QgY2hhciAqKm1iY190ZXh0czsKLQlzdHJ1Y3Qgc29jX2VudW0gbWJjX2VudW07Ci0KLQlzdHJ1Y3Qgd204OTk0X21pY2RldCBtaWNkZXRbMl07Ci0KLQl3bTg5NThfbWljZGV0X2NiIGphY2tfY2I7Ci0Jdm9pZCAqamFja19jYl9kYXRhOwotCWludCBtaWNkZXRfaXJxOwotCi0JaW50IHJldmlzaW9uOwotCXN0cnVjdCB3bTg5OTRfcGRhdGEgKnBkYXRhOwotCi0JdW5zaWduZWQgaW50IGFpZjFjbGtfZW5hYmxlOjE7Ci0JdW5zaWduZWQgaW50IGFpZjJjbGtfZW5hYmxlOjE7Ci0KLQl1bnNpZ25lZCBpbnQgYWlmMWNsa19kaXNhYmxlOjE7Ci0JdW5zaWduZWQgaW50IGFpZjJjbGtfZGlzYWJsZToxOwotfTsKLQogc3RhdGljIGludCB3bTg5OTRfcmVhZGFibGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnKQogeworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJc3RydWN0IHdtODk5NCAqY29udHJvbCA9IHdtODk5NC0+Y29udHJvbF9kYXRhOworCiAJc3dpdGNoIChyZWcpIHsKIAljYXNlIFdNODk5NF9HUElPXzE6CiAJY2FzZSBXTTg5OTRfR1BJT18yOgpAQCAtMTMyLDYgKzc0LDE1IEBACiAJY2FzZSBXTTg5OTRfSU5URVJSVVBUX1NUQVRVU18yOgogCWNhc2UgV004OTk0X0lOVEVSUlVQVF9SQVdfU1RBVFVTXzI6CiAJCXJldHVybiAxOworCisJY2FzZSBXTTg5NThfRFNQMl9QUk9HUkFNOgorCWNhc2UgV004OTU4X0RTUDJfQ09ORklHOgorCWNhc2UgV004OTU4X0RTUDJfRVhFQ0NPTlRST0w6CisJCWlmIChjb250cm9sLT50eXBlID09IFdNODk1OCkKKwkJCXJldHVybiAxOworCQllbHNlCisJCQlyZXR1cm4gMDsKKwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTU3NCwyMTUgKzUyNSw2IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGFkY19vc3IgPQogCVNPQ19FTlVNX1NJTkdMRShXTTg5OTRfT1ZFUlNBTVBMSU5HLCAxLCAyLCBvc3JfdGV4dCk7CiAKLXN0YXRpYyB2b2lkIHdtODk1OF9tYmNfYXBwbHkoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgbWJjLCBpbnQgc3RhcnQpCi17Ci0Jc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKLQlzdHJ1Y3Qgd204OTk0X3BkYXRhICpwZGF0YSA9IHdtODk5NC0+cGRhdGE7Ci0JaW50IHB3cl9yZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzUpOwotCWludCBlbmEsIHJlZywgYWlmLCBpOwotCi0Jc3dpdGNoIChtYmMpIHsKLQljYXNlIDA6Ci0JCXB3cl9yZWcgJj0gKFdNODk5NF9BSUYxREFDMUxfRU5BIHwgV004OTk0X0FJRjFEQUMxUl9FTkEpOwotCQlhaWYgPSAwOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCXB3cl9yZWcgJj0gKFdNODk5NF9BSUYxREFDMkxfRU5BIHwgV004OTk0X0FJRjFEQUMyUl9FTkEpOwotCQlhaWYgPSAwOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXB3cl9yZWcgJj0gKFdNODk5NF9BSUYyREFDTF9FTkEgfCBXTTg5OTRfQUlGMkRBQ1JfRU5BKTsKLQkJYWlmID0gMTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBXZSBjYW4gb25seSBlbmFibGUgdGhlIE1CQyBpZiB0aGUgQUlGIGlzIGVuYWJsZWQgYW5kIHdlCi0JICogd2FudCBpdCB0byBiZSBlbmFibGVkLiAqLwotCWVuYSA9IHB3cl9yZWcgJiYgd204OTk0LT5tYmNfZW5hW21iY107Ci0KLQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk1OF9EU1AyX1BST0dSQU0pOwotCi0JZGV2X2RiZyhjb2RlYy0+ZGV2LCAiTUJDICVkIHN0YXJ0dXA6ICVkLCBwb3dlcjogJXgsIERTUDogJXhcbiIsCi0JCW1iYywgc3RhcnQsIHB3cl9yZWcsIHJlZyk7Ci0KLQlpZiAoc3RhcnQgJiYgZW5hKSB7Ci0JCS8qIElmIHRoZSBEU1AgaXMgYWxyZWFkeSBydW5uaW5nIHRoZW4gbm9vcCAqLwotCQlpZiAocmVnICYgV004OTU4X0RTUDJfRU5BKQotCQkJcmV0dXJuOwotCi0JCS8qIFN3aXRjaCB0aGUgY2xvY2sgb3ZlciB0byB0aGUgYXBwcm9wcmlhdGUgQUlGICovCi0JCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9DTE9DS0lOR18xLAotCQkJCSAgICBXTTg5NThfRFNQMkNMS19TUkMgfCBXTTg5NThfRFNQMkNMS19FTkEsCi0JCQkJICAgIGFpZiA8PCBXTTg5NThfRFNQMkNMS19TUkNfU0hJRlQgfAotCQkJCSAgICBXTTg5NThfRFNQMkNMS19FTkEpOwotCi0JCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1OF9EU1AyX1BST0dSQU0sCi0JCQkJICAgIFdNODk1OF9EU1AyX0VOQSwgV004OTU4X0RTUDJfRU5BKTsKLQotCQkvKiBJZiB3ZSd2ZSBnb3QgdXNlciBzdXBwbGllZCBNQkMgc2V0dGluZ3MgdXNlIHRoZW0gKi8KLQkJaWYgKHBkYXRhICYmIHBkYXRhLT5udW1fbWJjX2NmZ3MpIHsKLQkJCXN0cnVjdCB3bTg5NThfbWJjX2NmZyAqY2ZnCi0JCQkJPSAmcGRhdGEtPm1iY19jZmdzW3dtODk5NC0+bWJjX2NmZ107Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNmZy0+Y29lZmZfcmVncyk7IGkrKykKLQkJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBpICsgV004OTU4X01CQ19CQU5EXzFfS18xLAotCQkJCQkgICAgICBjZmctPmNvZWZmX3JlZ3NbaV0pOwotCi0JCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjZmctPmN1dG9mZl9yZWdzKTsgaSsrKQotCQkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsCi0JCQkJCSAgICAgIGkgKyBXTTg5NThfTUJDX0JBTkRfMl9MT1dFUl9DVVRPRkZfQzFfMSwKLQkJCQkJICAgICAgY2ZnLT5jdXRvZmZfcmVnc1tpXSk7Ci0JCX0KLQotCQkvKiBSdW4gdGhlIERTUCAqLwotCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NThfRFNQMl9FWEVDQ09OVFJPTCwKLQkJCSAgICAgIFdNODk1OF9EU1AyX1JVTlIpOwotCi0JCS8qIEFuZCB3ZSdyZSBvZmYhICovCi0JCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1OF9EU1AyX0NPTkZJRywKLQkJCQkgICAgV004OTU4X01CQ19FTkEgfCBXTTg5NThfTUJDX1NFTF9NQVNLLAotCQkJCSAgICBtYmMgPDwgV004OTU4X01CQ19TRUxfU0hJRlQgfAotCQkJCSAgICBXTTg5NThfTUJDX0VOQSk7Ci0JfSBlbHNlIHsKLQkJLyogSWYgdGhlIERTUCBpcyBhbHJlYWR5IHN0b3BwZWQgdGhlbiBub29wICovCi0JCWlmICghKHJlZyAmIFdNODk1OF9EU1AyX0VOQSkpCi0JCQlyZXR1cm47Ci0KLQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU4X0RTUDJfQ09ORklHLAotCQkJCSAgICBXTTg5NThfTUJDX0VOQSwgMCk7CQotCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NThfRFNQMl9QUk9HUkFNLAotCQkJCSAgICBXTTg5NThfRFNQMl9FTkEsIDApOwotCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQ0xPQ0tJTkdfMSwKLQkJCQkgICAgV004OTU4X0RTUDJDTEtfRU5BLCAwKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgd204OTU4X2FpZl9ldihzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKLQkJICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCi17Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7Ci0JaW50IG1iYzsKLQotCXN3aXRjaCAody0+c2hpZnQpIHsKLQljYXNlIDEzOgotCWNhc2UgMTI6Ci0JCW1iYyA9IDI7Ci0JCWJyZWFrOwotCWNhc2UgMTE6Ci0JY2FzZSAxMDoKLQkJbWJjID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSA5OgotCWNhc2UgODoKLQkJbWJjID0gMDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXN3aXRjaCAoZXZlbnQpIHsKLQljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNVToKLQkJd204OTU4X21iY19hcHBseShjb2RlYywgbWJjLCAxKTsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTUQ6Ci0JCXdtODk1OF9tYmNfYXBwbHkoY29kZWMsIG1iYywgMCk7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdtODk1OF9wdXRfbWJjX2VudW0oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi17Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7Ci0Jc3RydWN0IHdtODk5NF9wZGF0YSAqcGRhdGEgPSB3bTg5OTQtPnBkYXRhOwotCWludCB2YWx1ZSA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOwotCWludCByZWc7Ci0KLQkvKiBEb24ndCBhbGxvdyBvbiB0aGUgZmx5IHJlY29uZmlndXJhdGlvbiAqLwotCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTk0X0NMT0NLSU5HXzEpOwotCWlmIChyZWcgPCAwIHx8IHJlZyAmIFdNODk1OF9EU1AyQ0xLX0VOQSkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWlmICh2YWx1ZSA+PSBwZGF0YS0+bnVtX21iY19jZmdzKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXdtODk5NC0+bWJjX2NmZyA9IHZhbHVlOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgd204OTU4X2dldF9tYmNfZW51bShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0Jc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKLQotCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSB3bTg5OTQtPm1iY19jZmc7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3bTg5NThfbWJjX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQotewotCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9CT09MRUFOOwotCXVpbmZvLT5jb3VudCA9IDE7Ci0JdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKLQl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSAxOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdtODk1OF9tYmNfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKLXsKLQlpbnQgbWJjID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7Ci0KLQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IHdtODk5NC0+bWJjX2VuYVttYmNdOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgd204OTU4X21iY19wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQotewotCWludCBtYmMgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKLQlpbnQgaTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0Jc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKLQotCWlmICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204OTk0LT5tYmNfZW5hKTsgaSsrKSB7Ci0JCWlmIChtYmMgIT0gaSAmJiB3bTg5OTQtPm1iY19lbmFbaV0pIHsKLQkJCWRldl9kYmcoY29kZWMtPmRldiwgIk1CQyAlZCBhY3RpdmUgYWxyZWFkeVxuIiwgbWJjKTsKLQkJCXJldHVybiAtRUJVU1k7Ci0JCX0KLQl9Ci0KLQl3bTg5OTQtPm1iY19lbmFbbWJjXSA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOwotCi0Jd204OTU4X21iY19hcHBseShjb2RlYywgbWJjLCB3bTg5OTQtPm1iY19lbmFbbWJjXSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2RlZmluZSBXTTg5NThfTUJDX1NXSVRDSCh4bmFtZSwgeHZhbCkge1wKLQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSAoeG5hbWUpLCBcCi0JLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUsXAotCS5pbmZvID0gd204OTU4X21iY19pbmZvLCBcCi0JLmdldCA9IHdtODk1OF9tYmNfZ2V0LCAucHV0ID0gd204OTU4X21iY19wdXQsIFwKLQkucHJpdmF0ZV92YWx1ZSA9IHh2YWwgfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204OTk0X3NuZF9jb250cm9sc1tdID0gewogU09DX0RPVUJMRV9SX1RMVigiQUlGMUFEQzEgVm9sdW1lIiwgV004OTk0X0FJRjFfQURDMV9MRUZUX1ZPTFVNRSwKIAkJIFdNODk5NF9BSUYxX0FEQzFfUklHSFRfVk9MVU1FLApAQCAtOTI0LDkgKzY2Niw2IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5NThfc25kX2NvbnRyb2xzW10gPSB7CiBTT0NfU0lOR0xFX1RMVigiQUlGMyBCb29zdCBWb2x1bWUiLCBXTTg5NThfQUlGM19DT05UUk9MXzIsIDEwLCAzLCAwLCBhaWZfdGx2KSwKLVdNODk1OF9NQkNfU1dJVENIKCJBSUYxREFDMSBNQkMgU3dpdGNoIiwgMCksCi1XTTg5NThfTUJDX1NXSVRDSCgiQUlGMURBQzIgTUJDIFN3aXRjaCIsIDEpLAotV004OTU4X01CQ19TV0lUQ0goIkFJRjJEQUMgTUJDIFN3aXRjaCIsIDIpLAogfTsKIAogc3RhdGljIGludCBjbGtfc3lzX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LApAQCAtMTAzMiw2ICs3NzEsOSBAQAogCQlicmVhazsKIAl9CiAKKwkvKiBXZSBtYXkgYWxzbyBoYXZlIHBvc3Rwb25lZCBzdGFydHVwIG9mIERTUCwgaGFuZGxlIHRoYXQuICovCisJd204OTU4X2FpZl9ldih3LCBrY29udHJvbCwgZXZlbnQpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExMzUsNyArODc3LDggQEAKIHN0YXRpYyBpbnQgd204OTk0X3B1dF9ocF9lbnVtKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCQkJICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXRfbGlzdCAqd2xpc3QgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncgPSB3bGlzdC0+d2lkZ2V0c1swXTsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKIAlpbnQgcmV0OwogCkBAIC0xMjYyLDcgKzEwMDUsOCBAQAogc3RhdGljIGludCB3bTg5OTRfcHV0X2NsYXNzX3coc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldF9saXN0ICp3bGlzdCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdyA9IHdsaXN0LT53aWRnZXRzWzBdOwogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOwogCWludCByZXQ7CiAKQEAgLTIxODAsNiArMTkyNCw4IEBACiAJCQkJCSAgICBXTTg5OTRfVk1JRF9CVUZfRU5BIHwKIAkJCQkJICAgIFdNODk5NF9WTUlEX1JBTVBfTUFTSywgMCk7CiAKKwkJCXdtODk5NC0+Y3VyX2Z3ID0gTlVMTDsKKwogCQkJcG1fcnVudGltZV9wdXQoY29kZWMtPmRldik7CiAJCX0KIAkJYnJlYWs7CkBAIC0yNjcyLDExICsyNDE4LDIyIEBACiBzdGF0aWMgaW50IHdtODk5NF9zdXNwZW5kKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJc3RydWN0IHdtODk5NCAqY29udHJvbCA9IGNvZGVjLT5jb250cm9sX2RhdGE7CiAJaW50IGksIHJldDsKIAorCXN3aXRjaCAoY29udHJvbC0+dHlwZSkgeworCWNhc2UgV004OTk0OgorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfTUlDQklBUywgV004OTk0X01JQ0RfRU5BLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBXTTg5NTg6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1OF9NSUNfREVURUNUXzEsCisJCQkJICAgIFdNODk1OF9NSUNEX0VOQSwgMCk7CisJCWJyZWFrOworCX0KKwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODk5NC0+ZmxsKTsgaSsrKSB7CiAJCW1lbWNweSgmd204OTk0LT5mbGxfc3VzcGVuZFtpXSwgJndtODk5NC0+ZmxsW2ldLAotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBmbGxfY29uZmlnKSk7CisJCSAgICAgICBzaXplb2Yoc3RydWN0IHdtODk5NF9mbGxfY29uZmlnKSk7CiAJCXJldCA9IF93bTg5OTRfc2V0X2ZsbChjb2RlYywgaSArIDEsIDAsIDAsIDApOwogCQlpZiAocmV0IDwgMCkKIAkJCWRldl93YXJuKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gc3RvcCBGTEwlZDogJWRcbiIsCkBAIC0yNjkxLDYgKzI0NDgsNyBAQAogc3RhdGljIGludCB3bTg5OTRfcmVzdW1lKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCB3bTg5OTQgKmNvbnRyb2wgPSBjb2RlYy0+Y29udHJvbF9kYXRhOwogCWludCBpLCByZXQ7CiAJdW5zaWduZWQgaW50IHZhbCwgbWFzazsKIApAQCAtMjcyOSw2ICsyNDg3LDE5IEBACiAJCQkJIGkgKyAxLCByZXQpOwogCX0KIAorCXN3aXRjaCAoY29udHJvbC0+dHlwZSkgeworCWNhc2UgV004OTk0OgorCQlpZiAod204OTk0LT5taWNkZXRbMF0uamFjayB8fCB3bTg5OTQtPm1pY2RldFsxXS5qYWNrKQorCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X01JQ0JJQVMsCisJCQkJCSAgICBXTTg5OTRfTUlDRF9FTkEsIFdNODk5NF9NSUNEX0VOQSk7CisJCWJyZWFrOworCWNhc2UgV004OTU4OgorCQlpZiAod204OTk0LT5qYWNrX2NiKQorCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU4X01JQ19ERVRFQ1RfMSwKKwkJCQkJICAgIFdNODk1OF9NSUNEX0VOQSwgV004OTU4X01JQ0RfRU5BKTsKKwkJYnJlYWs7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAjZWxzZQpAQCAtMjg2MiwzNCArMjYzMyw2IEBACiAJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiJWQgUmVUdW5lIE1vYmlsZSBjb25maWd1cmF0aW9uc1xuIiwKIAkJcGRhdGEtPm51bV9yZXR1bmVfbW9iaWxlX2NmZ3MpOwogCi0JaWYgKHBkYXRhLT5udW1fbWJjX2NmZ3MpIHsKLQkJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY29udHJvbFtdID0gewotCQkJU09DX0VOVU1fRVhUKCJNQkMgTW9kZSIsIHdtODk5NC0+bWJjX2VudW0sCi0JCQkJICAgICB3bTg5NThfZ2V0X21iY19lbnVtLCB3bTg5NThfcHV0X21iY19lbnVtKSwKLQkJfTsKLQotCQkvKiBXZSBuZWVkIGFuIGFycmF5IG9mIHRleHRzIGZvciB0aGUgZW51bSBBUEkgKi8KLQkJd204OTk0LT5tYmNfdGV4dHMgPSBrbWFsbG9jKHNpemVvZihjaGFyICopCi0JCQkJCSAgICAqIHBkYXRhLT5udW1fbWJjX2NmZ3MsIEdGUF9LRVJORUwpOwotCQlpZiAoIXdtODk5NC0+bWJjX3RleHRzKSB7Ci0JCQlkZXZfZXJyKHdtODk5NC0+Y29kZWMtPmRldiwKLQkJCQkiRmFpbGVkIHRvIGFsbG9jYXRlICVkIE1CQyBjb25maWcgdGV4dHNcbiIsCi0JCQkJcGRhdGEtPm51bV9tYmNfY2Zncyk7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV9tYmNfY2ZnczsgaSsrKQotCQkJd204OTk0LT5tYmNfdGV4dHNbaV0gPSBwZGF0YS0+bWJjX2NmZ3NbaV0ubmFtZTsKLQotCQl3bTg5OTQtPm1iY19lbnVtLm1heCA9IHBkYXRhLT5udW1fbWJjX2NmZ3M7Ci0JCXdtODk5NC0+bWJjX2VudW0udGV4dHMgPSB3bTg5OTQtPm1iY190ZXh0czsKLQotCQlyZXQgPSBzbmRfc29jX2FkZF9jb250cm9scyh3bTg5OTQtPmNvZGVjLCBjb250cm9sLCAxKTsKLQkJaWYgKHJldCAhPSAwKQotCQkJZGV2X2Vycih3bTg5OTQtPmNvZGVjLT5kZXYsCi0JCQkJIkZhaWxlZCB0byBhZGQgTUJDIG1vZGUgY29udHJvbHM6ICVkXG4iLCByZXQpOwotCX0KLQogCWlmIChwZGF0YS0+bnVtX3JldHVuZV9tb2JpbGVfY2ZncykKIAkJd204OTk0X2hhbmRsZV9yZXR1bmVfbW9iaWxlX3BkYXRhKHdtODk5NCk7CiAJZWxzZQpAQCAtMzM0MywxNCArMzA4NiwyMyBAQAogCWNhc2UgV004OTU4OgogCQlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204OTU4X3NuZF9jb250cm9scywKIAkJCQkgICAgIEFSUkFZX1NJWkUod204OTU4X3NuZF9jb250cm9scykpOwotCQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtODk5NF9sYXRlY2xrX3dpZGdldHMsCi0JCQkJCSAgQVJSQVlfU0laRSh3bTg5OTRfbGF0ZWNsa193aWRnZXRzKSk7Ci0JCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd204OTk0X2FkY193aWRnZXRzLAotCQkJCQkgIEFSUkFZX1NJWkUod204OTk0X2FkY193aWRnZXRzKSk7Ci0JCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd204OTk0X2RhY193aWRnZXRzLAotCQkJCQkgIEFSUkFZX1NJWkUod204OTk0X2RhY193aWRnZXRzKSk7CiAJCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd204OTU4X2RhcG1fd2lkZ2V0cywKIAkJCQkJICBBUlJBWV9TSVpFKHdtODk1OF9kYXBtX3dpZGdldHMpKTsKKwkJaWYgKHdtODk5NC0+cmV2aXNpb24gPCAxKSB7CisJCQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtODk5NF9sYXRlY2xrX3JldmRfd2lkZ2V0cywKKwkJCQkJCSAgQVJSQVlfU0laRSh3bTg5OTRfbGF0ZWNsa19yZXZkX3dpZGdldHMpKTsKKwkJCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd204OTk0X2FkY19yZXZkX3dpZGdldHMsCisJCQkJCQkgIEFSUkFZX1NJWkUod204OTk0X2FkY19yZXZkX3dpZGdldHMpKTsKKwkJCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd204OTk0X2RhY19yZXZkX3dpZGdldHMsCisJCQkJCQkgIEFSUkFZX1NJWkUod204OTk0X2RhY19yZXZkX3dpZGdldHMpKTsKKwkJfSBlbHNlIHsKKwkJCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd204OTk0X2xhdGVjbGtfd2lkZ2V0cywKKwkJCQkJCSAgQVJSQVlfU0laRSh3bTg5OTRfbGF0ZWNsa193aWRnZXRzKSk7CisJCQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtODk5NF9hZGNfd2lkZ2V0cywKKwkJCQkJCSAgQVJSQVlfU0laRSh3bTg5OTRfYWRjX3dpZGdldHMpKTsKKwkJCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd204OTk0X2RhY193aWRnZXRzLAorCQkJCQkJICBBUlJBWV9TSVpFKHdtODk5NF9kYWNfd2lkZ2V0cykpOworCQl9CiAJCWJyZWFrOwogCX0KIAkJCkBAIC0zMzc0LDEwICszMTI2LDE5IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBXTTg5NTg6Ci0JCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIHdtODk5NF9sYXRlY2xrX2ludGVyY29uLAotCQkJCQlBUlJBWV9TSVpFKHdtODk5NF9sYXRlY2xrX2ludGVyY29uKSk7Ci0JCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIHdtODk1OF9pbnRlcmNvbiwKLQkJCQkJQVJSQVlfU0laRSh3bTg5NThfaW50ZXJjb24pKTsKKwkJaWYgKHdtODk5NC0+cmV2aXNpb24gPCAxKSB7CisJCQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCB3bTg5OTRfcmV2ZF9pbnRlcmNvbiwKKwkJCQkJCUFSUkFZX1NJWkUod204OTk0X3JldmRfaW50ZXJjb24pKTsKKwkJCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIHdtODk5NF9sYXRlY2xrX3JldmRfaW50ZXJjb24sCisJCQkJCQlBUlJBWV9TSVpFKHdtODk5NF9sYXRlY2xrX3JldmRfaW50ZXJjb24pKTsKKwkJfSBlbHNlIHsKKwkJCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIHdtODk5NF9sYXRlY2xrX2ludGVyY29uLAorCQkJCQkJQVJSQVlfU0laRSh3bTg5OTRfbGF0ZWNsa19pbnRlcmNvbikpOworCQkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgd204OTU4X2ludGVyY29uLAorCQkJCQkJQVJSQVlfU0laRSh3bTg5NThfaW50ZXJjb24pKTsKKwkJfQorCisJCXdtODk1OF9kc3AyX2luaXQoY29kZWMpOwogCQlicmVhazsKIAl9CiAKQEAgLTM0MjAsNiArMzE4MSwxMiBAQAogCQkJZnJlZV9pcnEod204OTk0LT5taWNkZXRfaXJxLCB3bTg5OTQpOwogCQlicmVhazsKIAl9CisJaWYgKHdtODk5NC0+bWJjKQorCQlyZWxlYXNlX2Zpcm13YXJlKHdtODk5NC0+bWJjKTsKKwlpZiAod204OTk0LT5tYmNfdnNzKQorCQlyZWxlYXNlX2Zpcm13YXJlKHdtODk5NC0+bWJjX3Zzcyk7CisJaWYgKHdtODk5NC0+ZW5oX2VxKQorCQlyZWxlYXNlX2Zpcm13YXJlKHdtODk5NC0+ZW5oX2VxKTsKIAlrZnJlZSh3bTg5OTQtPnJldHVuZV9tb2JpbGVfdGV4dHMpOwogCWtmcmVlKHdtODk5NC0+ZHJjX3RleHRzKTsKIAlrZnJlZSh3bTg5OTQpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5OTQuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmgKaW5kZXggOTk5Yjg4NS4uMGExZGIwNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5OTQuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5NC5oCkBAIC0xMCw2ICsxMCw5IEBACiAjZGVmaW5lIF9XTTg5OTRfSAogCiAjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKworI2luY2x1ZGUgIndtX2h1YnMuaCIKIAogLyogU291cmNlcyBmb3IgQUlGMS8yIFNZU0NMSyAtIHVzZSB3aXRoIHNldF9kYWlfc3lzY2xrKCkgKi8KICNkZWZpbmUgV004OTk0X1NZU0NMS19NQ0xLMSAxCkBAIC00NSw0ICs0OCw5OCBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCB3bTg5OTRfYWNjZXNzX21hc2sgd204OTk0X2FjY2Vzc19tYXNrc1tXTTg5OTRfQ0FDSEVfU0laRV07CiBleHRlcm4gY29uc3QgdTE2IHdtODk5NF9yZWdfZGVmYXVsdHNbV004OTk0X0NBQ0hFX1NJWkVdOwogCitpbnQgd204OTU4X2FpZl9ldihzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KTsKKwordm9pZCB3bTg5NThfZHNwMl9pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyk7CisKK3N0cnVjdCB3bTg5OTRfbWljZGV0IHsKKwlzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrOworCWludCBkZXQ7CisJaW50IHNocnQ7Cit9OworCisvKiBjb2RlYyBwcml2YXRlIGRhdGEgKi8KK3N0cnVjdCB3bTg5OTRfZmxsX2NvbmZpZyB7CisJaW50IHNyYzsKKwlpbnQgaW47CisJaW50IG91dDsKK307CisKKyNkZWZpbmUgV004OTk0X05VTV9EUkMgMworI2RlZmluZSBXTTg5OTRfTlVNX0VRICAzCisKK3N0cnVjdCB3bTg5OTRfcHJpdiB7CisJc3RydWN0IHdtX2h1YnNfZGF0YSBodWJzOworCWVudW0gc25kX3NvY19jb250cm9sX3R5cGUgY29udHJvbF90eXBlOworCXZvaWQgKmNvbnRyb2xfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJaW50IHN5c2Nsa1syXTsKKwlpbnQgc3lzY2xrX3JhdGVbMl07CisJaW50IG1jbGtbMl07CisJaW50IGFpZmNsa1syXTsKKwlzdHJ1Y3Qgd204OTk0X2ZsbF9jb25maWcgZmxsWzJdLCBmbGxfc3VzcGVuZFsyXTsKKworCWludCBkYWNfcmF0ZXNbMl07CisJaW50IGxyY2xrX3NoYXJlZFsyXTsKKworCWludCBtYmNfZW5hWzNdOworCWludCBocGYxX2VuYVszXTsKKwlpbnQgaHBmMl9lbmFbM107CisJaW50IHZzc19lbmFbM107CisJaW50IGVuaF9lcV9lbmFbM107CisKKwkvKiBQbGF0Zm9ybSBkZXBlbmRhbnQgRFJDIGNvbmZpZ3VyYXRpb24gKi8KKwljb25zdCBjaGFyICoqZHJjX3RleHRzOworCWludCBkcmNfY2ZnW1dNODk5NF9OVU1fRFJDXTsKKwlzdHJ1Y3Qgc29jX2VudW0gZHJjX2VudW07CisKKwkvKiBQbGF0Zm9ybSBkZXBlbmRhbnQgUmVUdW5lIG1vYmlsZSBjb25maWd1cmF0aW9uICovCisJaW50IG51bV9yZXR1bmVfbW9iaWxlX3RleHRzOworCWNvbnN0IGNoYXIgKipyZXR1bmVfbW9iaWxlX3RleHRzOworCWludCByZXR1bmVfbW9iaWxlX2NmZ1tXTTg5OTRfTlVNX0VRXTsKKwlzdHJ1Y3Qgc29jX2VudW0gcmV0dW5lX21vYmlsZV9lbnVtOworCisJLyogUGxhdGZvcm0gZGVwZW5kYW50IE1CQyBjb25maWd1cmF0aW9uICovCisJaW50IG1iY19jZmc7CisJY29uc3QgY2hhciAqKm1iY190ZXh0czsKKwlzdHJ1Y3Qgc29jX2VudW0gbWJjX2VudW07CisKKwkvKiBQbGF0Zm9ybSBkZXBlbmRhbnQgVlNTIGNvbmZpZ3VyYXRpb24gKi8KKwlpbnQgdnNzX2NmZzsKKwljb25zdCBjaGFyICoqdnNzX3RleHRzOworCXN0cnVjdCBzb2NfZW51bSB2c3NfZW51bTsKKworCS8qIFBsYXRmb3JtIGRlcGVuZGFudCBWU1MgSFBGIGNvbmZpZ3VyYXRpb24gKi8KKwlpbnQgdnNzX2hwZl9jZmc7CisJY29uc3QgY2hhciAqKnZzc19ocGZfdGV4dHM7CisJc3RydWN0IHNvY19lbnVtIHZzc19ocGZfZW51bTsKKworCS8qIFBsYXRmb3JtIGRlcGVuZGFudCBlbmhhbmNlZCBFUSBjb25maWd1cmF0aW9uICovCisJaW50IGVuaF9lcV9jZmc7CisJY29uc3QgY2hhciAqKmVuaF9lcV90ZXh0czsKKwlzdHJ1Y3Qgc29jX2VudW0gZW5oX2VxX2VudW07CisKKwlzdHJ1Y3Qgd204OTk0X21pY2RldCBtaWNkZXRbMl07CisKKwl3bTg5NThfbWljZGV0X2NiIGphY2tfY2I7CisJdm9pZCAqamFja19jYl9kYXRhOworCWludCBtaWNkZXRfaXJxOworCisJaW50IHJldmlzaW9uOworCXN0cnVjdCB3bTg5OTRfcGRhdGEgKnBkYXRhOworCisJdW5zaWduZWQgaW50IGFpZjFjbGtfZW5hYmxlOjE7CisJdW5zaWduZWQgaW50IGFpZjJjbGtfZW5hYmxlOjE7CisKKwl1bnNpZ25lZCBpbnQgYWlmMWNsa19kaXNhYmxlOjE7CisJdW5zaWduZWQgaW50IGFpZjJjbGtfZGlzYWJsZToxOworCisJaW50IGRzcF9hY3RpdmU7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpjdXJfZnc7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICptYmM7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICptYmNfdnNzOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZW5oX2VxOworfTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5NS5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTUuYwppbmRleCA2N2VhYWVjLi41YWQ4NzNmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5NS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk1LmMKQEAgLTMwNSwxMSArMzA1LDExIEBACiBzdGF0aWMgaW50IHdtODk5NV9wdXRfY2xhc3NfdyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewotCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3OworCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0X2xpc3QgKndsaXN0ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3ID0gd2xpc3QtPndpZGdldHNbMF07CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwogCWludCByZXQ7CiAKLQl3ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWNvZGVjID0gdy0+Y29kZWM7CiAJcmV0ID0gc25kX3NvY19kYXBtX3B1dF92b2xzdyhrY29udHJvbCwgdWNvbnRyb2wpOwogCXdtODk5NV91cGRhdGVfY2xhc3Nfdyhjb2RlYyk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtOTcwNS5jIGIvc291bmQvc29jL2NvZGVjcy93bTk3MDUuYwppbmRleCA0N2IzNTdhLi42NDZiNThkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtOTcwNS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205NzA1LmMKQEAgLTE0Miw3ICsxNDIsNyBAQAogICogY29uc3RhbnRseSBlbmFibGVkLCB3ZSB1c2UgdGhlIG11dGVzIG9uIHRob3NlIGlucHV0cyB0byBzaW11bGF0ZSBzdWNoCiAgKiBjb250cm9scy4KICAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fbWFwW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSB3bTk3MDVfYXVkaW9fbWFwW10gPSB7CiAJLyogSFAgbWl4ZXIgKi8KIAl7IkhQIE1peGVyIiwgIlBDQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAiUENCRUVQIFBHQSJ9LAogCXsiSFAgTWl4ZXIiLCAiQ0QgUGxheWJhY2sgU3dpdGNoIiwgIkNEIFBHQSJ9LApAQCAtMjAwLDE3ICsyMDAsNiBAQAogCXsiUmlnaHQgQURDIiwgTlVMTCwgIkFEQyBQR0EifSwKIH07CiAKLXN0YXRpYyBpbnQgd205NzA1X2FkZF93aWRnZXRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07Ci0KLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtOTcwNV9kYXBtX3dpZGdldHMsCi0JCQkJCUFSUkFZX1NJWkUod205NzA1X2RhcG1fd2lkZ2V0cykpOwotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKLQotCXJldHVybiAwOwotfQotCiAvKiBXZSB1c2UgYSByZWdpc3RlciBjYWNoZSB0byBlbmhhbmNlIHJlYWQgcGVyZm9ybWFuY2UuICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGFjOTdfcmVhZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcpCiB7CkBAIC0zNjQsNyArMzUzLDYgQEAKIAogCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTk3MDVfc25kX2FjOTdfY29udHJvbHMsCiAJCQkJQVJSQVlfU0laRSh3bTk3MDVfc25kX2FjOTdfY29udHJvbHMpKTsKLQl3bTk3MDVfYWRkX3dpZGdldHMoY29kZWMpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTM5MCw2ICszNzgsMTAgQEAKIAkucmVnX3dvcmRfc2l6ZSA9IHNpemVvZih1MTYpLAogCS5yZWdfY2FjaGVfc3RlcCA9IDIsCiAJLnJlZ19jYWNoZV9kZWZhdWx0ID0gd205NzA1X3JlZywKKwkuZGFwbV93aWRnZXRzID0gd205NzA1X2RhcG1fd2lkZ2V0cywKKwkubnVtX2RhcG1fd2lkZ2V0cyA9IEFSUkFZX1NJWkUod205NzA1X2RhcG1fd2lkZ2V0cyksCisJLmRhcG1fcm91dGVzID0gd205NzA1X2F1ZGlvX21hcCwKKwkubnVtX2RhcG1fcm91dGVzID0gQVJSQVlfU0laRSh3bTk3MDVfYXVkaW9fbWFwKSwKIH07CiAKIHN0YXRpYyBfX2RldmluaXQgaW50IHdtOTcwNV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTk3MTIuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEyLmMKaW5kZXggYmY1ZDRlZi4uOTAxMTdmOCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTk3MTIuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMi5jCkBAIC0zMzIsNyArMzMyLDcgQEAKIFNORF9TT0NfREFQTV9JTlBVVCgiTUlDMiIpLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fbWFwW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSB3bTk3MTJfYXVkaW9fbWFwW10gPSB7CiAJLyogdmlydHVhbCBtaXhlciAtIG1peGVzIGxlZnQgJiByaWdodCBjaGFubmVscyBmb3Igc3BrIGFuZCBtb25vICovCiAJeyJBQzk3IE1peGVyIiwgTlVMTCwgIkxlZnQgREFDIn0sCiAJeyJBQzk3IE1peGVyIiwgTlVMTCwgIlJpZ2h0IERBQyJ9LApAQCAtNDI5LDE3ICs0MjksNiBAQAogCXsiUk9VVDIiLCBOVUxMLCAiU3BlYWtlciBQR0EifSwKIH07CiAKLXN0YXRpYyBpbnQgd205NzEyX2FkZF93aWRnZXRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07Ci0KLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHdtOTcxMl9kYXBtX3dpZGdldHMsCi0JCQkJICBBUlJBWV9TSVpFKHdtOTcxMl9kYXBtX3dpZGdldHMpKTsKLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHVuc2lnbmVkIGludCBhYzk3X3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCXVuc2lnbmVkIGludCByZWcpCiB7CkBAIC02NTEsNyArNjQwLDYgQEAKIAl3bTk3MTJfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKIAlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd205NzEyX3NuZF9hYzk3X2NvbnRyb2xzLAogCQkJCUFSUkFZX1NJWkUod205NzEyX3NuZF9hYzk3X2NvbnRyb2xzKSk7Ci0Jd205NzEyX2FkZF93aWRnZXRzKGNvZGVjKTsKIAogCXJldHVybiAwOwogCkBAIC02NzgsNiArNjY2LDEwIEBACiAJLnJlZ193b3JkX3NpemUgPSBzaXplb2YodTE2KSwKIAkucmVnX2NhY2hlX3N0ZXAgPSAyLAogCS5yZWdfY2FjaGVfZGVmYXVsdCA9IHdtOTcxMl9yZWcsCisJLmRhcG1fd2lkZ2V0cyA9IHdtOTcxMl9kYXBtX3dpZGdldHMsCisJLm51bV9kYXBtX3dpZGdldHMgPSBBUlJBWV9TSVpFKHdtOTcxMl9kYXBtX3dpZGdldHMpLAorCS5kYXBtX3JvdXRlcyA9IHdtOTcxMl9hdWRpb19tYXAsCisJLm51bV9kYXBtX3JvdXRlcyA9IEFSUkFZX1NJWkUod205NzEyX2F1ZGlvX21hcCksCiB9OwogCiBzdGF0aWMgX19kZXZpbml0IGludCB3bTk3MTJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMy5jCmluZGV4IDM4ZWQ5ODUuLjcxNjdjYjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTk3MTMuYwpAQCAtNDg3LDcgKzQ4Nyw3IEBACiBTTkRfU09DX0RBUE1fVk1JRCgiVk1JRCIpLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fbWFwW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSB3bTk3MTNfYXVkaW9fbWFwW10gPSB7CiAJLyogbGVmdCBIUCBtaXhlciAqLwogCXsiTGVmdCBIUCBNaXhlciIsICJCZWVwIFBsYXliYWNrIFN3aXRjaCIsICAgICJQQ0JFRVAifSwKIAl7IkxlZnQgSFAgTWl4ZXIiLCAiVm9pY2UgUGxheWJhY2sgU3dpdGNoIiwgICAiVm9pY2UgREFDIn0sCkBAIC02NDQsMTggKzY0NCw2IEBACiAJeyJDYXB0dXJlIE1vbm8gTXV4IiwgIlJpZ2h0IiwgIlJpZ2h0IENhcHR1cmUgU291cmNlIn0sCiB9OwogCi1zdGF0aWMgaW50IHdtOTcxM19hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0Jc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOwotCi0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB3bTk3MTNfZGFwbV93aWRnZXRzLAotCQkJCSAgQVJSQVlfU0laRSh3bTk3MTNfZGFwbV93aWRnZXRzKSk7Ci0KLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHVuc2lnbmVkIGludCBhYzk3X3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCXVuc2lnbmVkIGludCByZWcpCiB7CkBAIC0xMjMxLDcgKzEyMTksNiBAQAogCiAJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtOTcxM19zbmRfYWM5N19jb250cm9scywKIAkJCQlBUlJBWV9TSVpFKHdtOTcxM19zbmRfYWM5N19jb250cm9scykpOwotCXdtOTcxM19hZGRfd2lkZ2V0cyhjb2RlYyk7CiAKIAlyZXR1cm4gMDsKIApAQCAtMTI2Miw2ICsxMjQ5LDEwIEBACiAJLnJlZ193b3JkX3NpemUgPSBzaXplb2YodTE2KSwKIAkucmVnX2NhY2hlX3N0ZXAgPSAyLAogCS5yZWdfY2FjaGVfZGVmYXVsdCA9IHdtOTcxM19yZWcsCisJLmRhcG1fd2lkZ2V0cyA9IHdtOTcxM19kYXBtX3dpZGdldHMsCisJLm51bV9kYXBtX3dpZGdldHMgPSBBUlJBWV9TSVpFKHdtOTcxM19kYXBtX3dpZGdldHMpLAorCS5kYXBtX3JvdXRlcyA9IHdtOTcxM19hdWRpb19tYXAsCisJLm51bV9kYXBtX3JvdXRlcyA9IEFSUkFZX1NJWkUod205NzEzX2F1ZGlvX21hcCksCiB9OwogCiBzdGF0aWMgX19kZXZpbml0IGludCB3bTk3MTNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5jIGIvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMKaW5kZXggNDAwNWU5YS4uZTU1YjI5OCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMKQEAgLTc4NywxNyArNzg3LDE3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBsaW5lb3V0MV9kaWZmX3JvdXRlc1tdID0gewogCXsgIkxJTkVPVVQxIE1peGVyIiwgIklOMUwgU3dpdGNoIiwgIklOMUwgUEdBIiB9LAogCXsgIkxJTkVPVVQxIE1peGVyIiwgIklOMVIgU3dpdGNoIiwgIklOMVIgUEdBIiB9LAotCXsgIkxJTkVPVVQxIE1peGVyIiwgIk91dHB1dCBTd2l0Y2giLCAiTGVmdCBPdXRwdXQgTWl4ZXIiIH0sCisJeyAiTElORU9VVDEgTWl4ZXIiLCAiT3V0cHV0IFN3aXRjaCIsICJMZWZ0IE91dHB1dCBQR0EiIH0sCiAKIAl7ICJMSU5FT1VUMU4gRHJpdmVyIiwgTlVMTCwgIkxJTkVPVVQxIE1peGVyIiB9LAogCXsgIkxJTkVPVVQxUCBEcml2ZXIiLCBOVUxMLCAiTElORU9VVDEgTWl4ZXIiIH0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBsaW5lb3V0MV9zZV9yb3V0ZXNbXSA9IHsKLQl7ICJMSU5FT1VUMU4gTWl4ZXIiLCAiTGVmdCBPdXRwdXQgU3dpdGNoIiwgIkxlZnQgT3V0cHV0IE1peGVyIiB9LAotCXsgIkxJTkVPVVQxTiBNaXhlciIsICJSaWdodCBPdXRwdXQgU3dpdGNoIiwgIkxlZnQgT3V0cHV0IE1peGVyIiB9LAorCXsgIkxJTkVPVVQxTiBNaXhlciIsICJMZWZ0IE91dHB1dCBTd2l0Y2giLCAiTGVmdCBPdXRwdXQgUEdBIiB9LAorCXsgIkxJTkVPVVQxTiBNaXhlciIsICJSaWdodCBPdXRwdXQgU3dpdGNoIiwgIlJpZ2h0IE91dHB1dCBQR0EiIH0sCiAKLQl7ICJMSU5FT1VUMVAgTWl4ZXIiLCAiTGVmdCBPdXRwdXQgU3dpdGNoIiwgIkxlZnQgT3V0cHV0IE1peGVyIiB9LAorCXsgIkxJTkVPVVQxUCBNaXhlciIsICJMZWZ0IE91dHB1dCBTd2l0Y2giLCAiTGVmdCBPdXRwdXQgUEdBIiB9LAogCiAJeyAiTElORU9VVDFOIERyaXZlciIsIE5VTEwsICJMSU5FT1VUMU4gTWl4ZXIiIH0sCiAJeyAiTElORU9VVDFQIERyaXZlciIsIE5VTEwsICJMSU5FT1VUMVAgTWl4ZXIiIH0sCkBAIC04MDYsMTcgKzgwNiwxNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgbGluZW91dDJfZGlmZl9yb3V0ZXNbXSA9IHsKIAl7ICJMSU5FT1VUMiBNaXhlciIsICJJTjJMIFN3aXRjaCIsICJJTjJMIFBHQSIgfSwKIAl7ICJMSU5FT1VUMiBNaXhlciIsICJJTjJSIFN3aXRjaCIsICJJTjJSIFBHQSIgfSwKLQl7ICJMSU5FT1VUMiBNaXhlciIsICJPdXRwdXQgU3dpdGNoIiwgIlJpZ2h0IE91dHB1dCBNaXhlciIgfSwKKwl7ICJMSU5FT1VUMiBNaXhlciIsICJPdXRwdXQgU3dpdGNoIiwgIlJpZ2h0IE91dHB1dCBQR0EiIH0sCiAKIAl7ICJMSU5FT1VUMk4gRHJpdmVyIiwgTlVMTCwgIkxJTkVPVVQyIE1peGVyIiB9LAogCXsgIkxJTkVPVVQyUCBEcml2ZXIiLCBOVUxMLCAiTElORU9VVDIgTWl4ZXIiIH0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBsaW5lb3V0Ml9zZV9yb3V0ZXNbXSA9IHsKLQl7ICJMSU5FT1VUMk4gTWl4ZXIiLCAiTGVmdCBPdXRwdXQgU3dpdGNoIiwgIkxlZnQgT3V0cHV0IE1peGVyIiB9LAotCXsgIkxJTkVPVVQyTiBNaXhlciIsICJSaWdodCBPdXRwdXQgU3dpdGNoIiwgIkxlZnQgT3V0cHV0IE1peGVyIiB9LAorCXsgIkxJTkVPVVQyTiBNaXhlciIsICJMZWZ0IE91dHB1dCBTd2l0Y2giLCAiTGVmdCBPdXRwdXQgUEdBIiB9LAorCXsgIkxJTkVPVVQyTiBNaXhlciIsICJSaWdodCBPdXRwdXQgU3dpdGNoIiwgIlJpZ2h0IE91dHB1dCBQR0EiIH0sCiAKLQl7ICJMSU5FT1VUMlAgTWl4ZXIiLCAiUmlnaHQgT3V0cHV0IFN3aXRjaCIsICJSaWdodCBPdXRwdXQgTWl4ZXIiIH0sCisJeyAiTElORU9VVDJQIE1peGVyIiwgIlJpZ2h0IE91dHB1dCBTd2l0Y2giLCAiUmlnaHQgT3V0cHV0IFBHQSIgfSwKIAogCXsgIkxJTkVPVVQyTiBEcml2ZXIiLCBOVUxMLCAiTElORU9VVDJOIE1peGVyIiB9LAogCXsgIkxJTkVPVVQyUCBEcml2ZXIiLCBOVUxMLCAiTElORU9VVDJQIE1peGVyIiB9LApAQCAtODM2LDE3ICs4MzYsMjEgQEAKIAlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfUklHSFRfTElORV9JTlBVVF8zXzRfVk9MVU1FLAogCQkJICAgIFdNODk5M19JTjJfVlUsIFdNODk5M19JTjJfVlUpOwogCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX1NQRUFLRVJfVk9MVU1FX0xFRlQsCisJCQkgICAgV004OTkzX1NQS09VVF9WVSwgV004OTkzX1NQS09VVF9WVSk7CiAJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX1NQRUFLRVJfVk9MVU1FX1JJR0hULAogCQkJICAgIFdNODk5M19TUEtPVVRfVlUsIFdNODk5M19TUEtPVVRfVlUpOwogCiAJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX0xFRlRfT1VUUFVUX1ZPTFVNRSwKLQkJCSAgICBXTTg5OTNfSFBPVVQxTF9aQywgV004OTkzX0hQT1VUMUxfWkMpOworCQkJICAgIFdNODk5M19IUE9VVDFfVlUgfCBXTTg5OTNfSFBPVVQxTF9aQywKKwkJCSAgICBXTTg5OTNfSFBPVVQxX1ZVIHwgV004OTkzX0hQT1VUMUxfWkMpOwogCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19SSUdIVF9PVVRQVVRfVk9MVU1FLAogCQkJICAgIFdNODk5M19IUE9VVDFfVlUgfCBXTTg5OTNfSFBPVVQxUl9aQywKIAkJCSAgICBXTTg5OTNfSFBPVVQxX1ZVIHwgV004OTkzX0hQT1VUMVJfWkMpOwogCiAJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX0xFRlRfT1BHQV9WT0xVTUUsCi0JCQkgICAgV004OTkzX01JWE9VVExfWkMsIFdNODk5M19NSVhPVVRMX1pDKTsKKwkJCSAgICBXTTg5OTNfTUlYT1VUTF9aQyB8IFdNODk5M19NSVhPVVRfVlUsCisJCQkgICAgV004OTkzX01JWE9VVExfWkMgfCBXTTg5OTNfTUlYT1VUX1ZVKTsKIAlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfUklHSFRfT1BHQV9WT0xVTUUsCiAJCQkgICAgV004OTkzX01JWE9VVFJfWkMgfCBXTTg5OTNfTUlYT1VUX1ZVLAogCQkJICAgIFdNODk5M19NSVhPVVRSX1pDIHwgV004OTkzX01JWE9VVF9WVSk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmMgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmMKaW5kZXggNGRkYzZkMy4uODU2NjIzOCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5jCisrKyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuYwpAQCAtOTA5LDYgKzkwOSw3IEBACiAJZG1hX2RhdGEgPSAmZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdOwogCWRtYV9kYXRhLT5hc3BfY2hhbl9xID0gcGRhdGEtPmFzcF9jaGFuX3E7CiAJZG1hX2RhdGEtPnJhbV9jaGFuX3EgPSBwZGF0YS0+cmFtX2NoYW5fcTsKKwlkbWFfZGF0YS0+c3JhbV9zaXplID0gcGRhdGEtPnNyYW1fc2l6ZV9wbGF5YmFjazsKIAlkbWFfZGF0YS0+ZG1hX2FkZHIgPSAoZG1hX2FkZHJfdCkgKHBkYXRhLT50eF9kbWFfb2Zmc2V0ICsKIAkJCQkJCQltZW0tPnN0YXJ0KTsKIApAQCAtOTI1LDYgKzkyNiw3IEBACiAJZG1hX2RhdGEgPSAmZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV07CiAJZG1hX2RhdGEtPmFzcF9jaGFuX3EgPSBwZGF0YS0+YXNwX2NoYW5fcTsKIAlkbWFfZGF0YS0+cmFtX2NoYW5fcSA9IHBkYXRhLT5yYW1fY2hhbl9xOworCWRtYV9kYXRhLT5zcmFtX3NpemUgPSBwZGF0YS0+c3JhbV9zaXplX2NhcHR1cmU7CiAJZG1hX2RhdGEtPmRtYV9hZGRyID0gKGRtYV9hZGRyX3QpKHBkYXRhLT5yeF9kbWFfb2Zmc2V0ICsKIAkJCQkJCQltZW0tPnN0YXJ0KTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9pbXgtc3NpLmMgYi9zb3VuZC9zb2MvaW14L2lteC1zc2kuYwppbmRleCBhYzJkZWQ5Li41YjEzZmVjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW14L2lteC1zc2kuYworKysgYi9zb3VuZC9zb2MvaW14L2lteC1zc2kuYwpAQCAtNjY3LDEyICs2NjcsNiBAQAogCWlmIChyZXMpCiAJCXNzaS0+ZG1hX3BhcmFtc19yeC5kbWEgPSByZXMtPnN0YXJ0OwogCi0JaWYgKChjcHVfaXNfbXgyNygpIHx8IGNwdV9pc19teDIxKCkpICYmCi0JCQkhKHNzaS0+ZmxhZ3MgJiBJTVhfU1NJX1VTRV9BQzk3KSAmJgotCQkJKHNzaS0+ZmxhZ3MgJiBJTVhfU1NJX0RNQSkpIHsKLQkJc3NpLT5mbGFncyB8PSBJTVhfU1NJX0RNQTsKLQl9Ci0KIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBzc2kpOwogCiAJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWkoJnBkZXYtPmRldiwgZGFpKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9qejQ3NDAvcWlfbGI2MC5jIGIvc291bmQvc29jL2p6NDc0MC9xaV9sYjYwLmMKaW5kZXggNDk3MjNlMy4uYzVmYzMzOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2p6NDc0MC9xaV9sYjYwLmMKKysrIGIvc291bmQvc29jL2p6NDc0MC9xaV9sYjYwLmMKQEAgLTI3LDExICsyNyw3IEBACiBzdGF0aWMgaW50IHFpX2xiNjBfc3BrX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3aWRnZXQsCiAJCQkgICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0cmwsIGludCBldmVudCkKIHsKLQlpbnQgb24gPSAwOwotCWlmIChldmVudCAmIFNORF9TT0NfREFQTV9QT1NUX1BNVSkKLQkJb24gPSAxOwotCWVsc2UgaWYgKGV2ZW50ICYgU05EX1NPQ19EQVBNX1BSRV9QTUQpCi0JCW9uID0gMDsKKwlpbnQgb24gPSAhU05EX1NPQ19EQVBNX0VWRU5UX09GRihldmVudCk7CiAKIAlncGlvX3NldF92YWx1ZShRSV9MQjYwX1NORF9HUElPLCBvbik7CiAJZ3Bpb19zZXRfdmFsdWUoUUlfTEI2MF9BTVBfR1BJTywgb24pOwpAQCAtNzAsMTIgKzY2LDYgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGRhcG0sIHFpX2xiNjBfd2lkZ2V0cywKLQkJCQkgIEFSUkFZX1NJWkUocWlfbGI2MF93aWRnZXRzKSk7Ci0Jc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgcWlfbGI2MF9yb3V0ZXMsCi0JCQkJQVJSQVlfU0laRShxaV9sYjYwX3JvdXRlcykpOwotCXNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkzLDEwICs4MywyMCBAQAogCS5uYW1lID0gIlFJIExCNjAiLAogCS5kYWlfbGluayA9ICZxaV9sYjYwX2RhaSwKIAkubnVtX2xpbmtzID0gMSwKKworCS5kYXBtX3dpZGdldHMgPSBxaV9sYjYwX3dpZGdldHMsCisJLm51bV9kYXBtX3dpZGdldHMgPSBBUlJBWV9TSVpFKHFpX2xiNjBfd2lkZ2V0cyksCisJLmRhcG1fcm91dGVzID0gcWlfbGI2MF9yb3V0ZXMsCisJLm51bV9kYXBtX3JvdXRlcyA9IEFSUkFZX1NJWkUocWlfbGI2MF9yb3V0ZXMpLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnFpX2xiNjBfc25kX2RldmljZTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBncGlvIHFpX2xiNjBfZ3Bpb3NbXSA9IHsKKwl7IFFJX0xCNjBfU05EX0dQSU8sIEdQSU9GX09VVF9JTklUX0xPVywgIlNORCIgfSwKKwl7IFFJX0xCNjBfQU1QX0dQSU8sIEdQSU9GX09VVF9JTklUX0xPVywgIkFNUCIgfSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IHFpX2xiNjBfaW5pdCh2b2lkKQogewogCWludCByZXQ7CkBAIC0xMDYsMjMgKzEwNiwxMiBAQAogCWlmICghcWlfbGI2MF9zbmRfZGV2aWNlKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXJldCA9IGdwaW9fcmVxdWVzdChRSV9MQjYwX1NORF9HUElPLCAiU05EIik7CisJcmV0ID0gZ3Bpb19yZXF1ZXN0X2FycmF5KHFpX2xiNjBfZ3Bpb3MsIEFSUkFZX1NJWkUocWlfbGI2MF9ncGlvcykpOwogCWlmIChyZXQpIHsKLQkJcHJfZXJyKCJxaV9sYjYwIHNuZDogRmFpbGVkIHRvIHJlcXVlc3QgU05EIEdQSU8oJWQpOiAlZFxuIiwKLQkJCQlRSV9MQjYwX1NORF9HUElPLCByZXQpOworCQlwcl9lcnIoInFpX2xiNjAgc25kOiBGYWlsZWQgdG8gcmVxdWVzdCBncGlvczogJWRcbiIsIHJldCk7CiAJCWdvdG8gZXJyX2RldmljZV9wdXQ7CiAJfQogCi0JcmV0ID0gZ3Bpb19yZXF1ZXN0KFFJX0xCNjBfQU1QX0dQSU8sICJBTVAiKTsKLQlpZiAocmV0KSB7Ci0JCXByX2VycigicWlfbGI2MCBzbmQ6IEZhaWxlZCB0byByZXF1ZXN0IEFNUCBHUElPKCVkKTogJWRcbiIsCi0JCQkJUUlfTEI2MF9BTVBfR1BJTywgcmV0KTsKLQkJZ290byBlcnJfZ3Bpb19mcmVlX3NuZDsKLQl9Ci0KLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoUUlfTEI2MF9TTkRfR1BJTywgMCk7Ci0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFFJX0xCNjBfQU1QX0dQSU8sIDApOwotCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocWlfbGI2MF9zbmRfZGV2aWNlLCAmcWlfbGI2MCk7CiAKIAlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHFpX2xiNjBfc25kX2RldmljZSk7CkBAIC0xMzUsMTAgKzEyNCw4IEBACiAKIGVycl91bnNldF9wZGF0YToKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShxaV9sYjYwX3NuZF9kZXZpY2UsIE5VTEwpOwotLyplcnJfZ3Bpb19mcmVlX2FtcDoqLwotCWdwaW9fZnJlZShRSV9MQjYwX0FNUF9HUElPKTsKLWVycl9ncGlvX2ZyZWVfc25kOgotCWdwaW9fZnJlZShRSV9MQjYwX1NORF9HUElPKTsKKy8qZXJyX2dwaW9fZnJlZV9hcnJheToqLworCWdwaW9fZnJlZV9hcnJheShxaV9sYjYwX2dwaW9zLCBBUlJBWV9TSVpFKHFpX2xiNjBfZ3Bpb3MpKTsKIGVycl9kZXZpY2VfcHV0OgogCXBsYXRmb3JtX2RldmljZV9wdXQocWlfbGI2MF9zbmRfZGV2aWNlKTsKIApAQCAtMTQ4LDkgKzEzNSw4IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBxaV9sYjYwX2V4aXQodm9pZCkKIHsKLQlncGlvX2ZyZWUoUUlfTEI2MF9BTVBfR1BJTyk7Ci0JZ3Bpb19mcmVlKFFJX0xCNjBfU05EX0dQSU8pOwogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHFpX2xiNjBfc25kX2RldmljZSk7CisJZ3Bpb19mcmVlX2FycmF5KHFpX2xiNjBfZ3Bpb3MsIEFSUkFZX1NJWkUocWlfbGI2MF9ncGlvcykpOwogfQogbW9kdWxlX2V4aXQocWlfbGI2MF9leGl0KTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL21pZC14ODYvc3N0X3BsYXRmb3JtLmMgYi9zb3VuZC9zb2MvbWlkLXg4Ni9zc3RfcGxhdGZvcm0uYwppbmRleCA2YjFmOWQzLi41YTk0NmI0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvbWlkLXg4Ni9zc3RfcGxhdGZvcm0uYworKysgYi9zb3VuZC9zb2MvbWlkLXg4Ni9zc3RfcGxhdGZvcm0uYwpAQCAtMjQ5LDEwICsyNDksMTMgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXN0cmVhbS0+c3N0ZHJ2X29wcy0+dmVuZG9yX2lkID0gTVNJQ19WRU5ET1JfSUQ7CisJc3RyZWFtLT5zc3RkcnZfb3BzLT5tb2R1bGVfbmFtZSA9IFNTVF9DQVJEX05BTUVTOwogCS8qIHJlZ2lzdGVyaW5nIHdpdGggU1NUIGRyaXZlciB0byBnZXQgYWNjZXNzIHRvIFNTVCBBUElzIHRvIHVzZSAqLwogCXJldF92YWwgPSByZWdpc3Rlcl9zc3RfY2FyZChzdHJlYW0tPnNzdGRydl9vcHMpOwogCWlmIChyZXRfdmFsKSB7CiAJCXByX2Vycigic3N0OiBzc3QgY2FyZCByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKKwkJa2ZyZWUoc3RyZWFtLT5zc3RkcnZfb3BzKTsKKwkJa2ZyZWUoc3RyZWFtKTsKIAkJcmV0dXJuIHJldF92YWw7CiAJfQogCXJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IHN0cmVhbTsKQEAgLTI3MCw2ICsyNzMsNyBAQAogCXN0cl9pZCA9IHN0cmVhbS0+c3RyZWFtX2luZm8uc3RyX2lkOwogCWlmIChzdHJfaWQpCiAJCXJldF92YWwgPSBzdHJlYW0tPnNzdGRydl9vcHMtPnBjbV9jb250cm9sLT5jbG9zZShzdHJfaWQpOworCXVucmVnaXN0ZXJfc3N0X2NhcmQoc3RyZWFtLT5zc3RkcnZfb3BzKTsKIAlrZnJlZShzdHJlYW0tPnNzdGRydl9vcHMpOwogCWtmcmVlKHN0cmVhbSk7CiAJcmV0dXJuIHJldF92YWw7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMKaW5kZXggMjE3NWYwOS4uMDdiNzcyMyAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuYwpAQCAtNCw3ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgogICoKICAqIENvbnRhY3Q6IEphcmtrbyBOaWt1bGEgPGpobmlrdWxhQGdtYWlsLmNvbT4KLSAqICAgICAgICAgIFBldGVyIFVqZmFsdXNpIDxwZXRlci51amZhbHVzaUBub2tpYS5jb20+CisgKiAgICAgICAgICBQZXRlciBVamZhbHVzaSA8cGV0ZXIudWpmYWx1c2lAdGkuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAkgKiAyIGNoYW5uZWxzIChzdGVyZW8pOiBzaXplIGlzIDEyOCAvIDIgPSA2NCBmcmFtZXMgKDIgKiA2NCB3b3JkcykKIAkgKiA0IGNoYW5uZWxzOiBzaXplIGlzIDEyOCAvIDQgPSAzMiBmcmFtZXMgKDQgKiAzMiB3b3JkcykKIAkgKi8KLQlpZiAoY3B1X2lzX29tYXAzNDN4KCkgfHwgY3B1X2lzX29tYXA0NHh4KCkpIHsKKwlpZiAoY3B1X2lzX29tYXAzNHh4KCkgfHwgY3B1X2lzX29tYXA0NHh4KCkpIHsKIAkJLyoKIAkJKiBSdWxlIGZvciB0aGUgYnVmZmVyIHNpemUuIFdlIHNob3VsZCBub3QgYWxsb3cKIAkJKiBzbWFsbGVyIGJ1ZmZlciB0aGFuIHRoZSBGSUZPIHNpemUgdG8gYXZvaWQgdW5kZXJydW5zCkBAIC0yNTgsNyArMjU4LDcgQEAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JaWYgKGNwdV9pc19vbWFwMzQzeCgpKSB7CisJaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CiAJCWRtYV9kYXRhLT5zZXRfdGhyZXNob2xkID0gb21hcF9tY2JzcF9zZXRfdGhyZXNob2xkOwogCQkvKiBUT0RPOiBDdXJyZW50bHksIE1PREVfRUxFTUVOVCA9PSBNT0RFX0ZSQU1FICovCiAJCWlmIChvbWFwX21jYnNwX2dldF9kbWFfb3BfbW9kZShidXNfaWQpID09CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmggYi9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmgKaW5kZXggMzdkYzcyMS4uOWE3ZGVkZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5oCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuaApAQCAtNCw3ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgogICoKICAqIENvbnRhY3Q6IEphcmtrbyBOaWt1bGEgPGpobmlrdWxhQGdtYWlsLmNvbT4KLSAqICAgICAgICAgIFBldGVyIFVqZmFsdXNpIDxwZXRlci51amZhbHVzaUBub2tpYS5jb20+CisgKiAgICAgICAgICBQZXRlciBVamZhbHVzaSA8cGV0ZXIudWpmYWx1c2lAdGkuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5jIGIvc291bmQvc29jL29tYXAvb21hcC1wY20uYwppbmRleCA4Y2FlYjhkLi5lNmE2Yjk5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmMKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KICAqCiAgKiBDb250YWN0OiBKYXJra28gTmlrdWxhIDxqaG5pa3VsYUBnbWFpbC5jb20+Ci0gKiAgICAgICAgICBQZXRlciBVamZhbHVzaSA8cGV0ZXIudWpmYWx1c2lAbm9raWEuY29tPgorICogICAgICAgICAgUGV0ZXIgVWpmYWx1c2kgPHBldGVyLnVqZmFsdXNpQHRpLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMzcsNyArMzcsOCBAQAogCQkJCSAgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8CiAJCQkJICBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CiAJCQkJICBTTkRSVl9QQ01fSU5GT19QQVVTRSB8Ci0JCQkJICBTTkRSVl9QQ01fSU5GT19SRVNVTUUsCisJCQkJICBTTkRSVl9QQ01fSU5GT19SRVNVTUUgfAorCQkJCSAgU05EUlZfUENNX0lORk9fTk9fUEVSSU9EX1dBS0VVUCwKIAkuZm9ybWF0cwkJPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8CiAJCQkJICBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSwKIAkucGVyaW9kX2J5dGVzX21pbgk9IDMyLApAQCAtMTk1LDcgKzE5Niw3IEBACiAJaWYgKChjcHVfaXNfb21hcDE1MTAoKSkpCiAJCW9tYXBfZW5hYmxlX2RtYV9pcnEocHJ0ZC0+ZG1hX2NoLCBPTUFQX0RNQV9GUkFNRV9JUlEgfAogCQkJICAgICAgT01BUF9ETUFfTEFTVF9JUlEgfCBPTUFQX0RNQV9CTE9DS19JUlEpOwotCWVsc2UKKwllbHNlIGlmICghc3Vic3RyZWFtLT5ydW50aW1lLT5ub19wZXJpb2Rfd2FrZXVwKQogCQlvbWFwX2VuYWJsZV9kbWFfaXJxKHBydGQtPmRtYV9jaCwgT01BUF9ETUFfRlJBTUVfSVJRKTsKIAogCWlmICghKGNwdV9jbGFzc19pc19vbWFwMSgpKSkgewpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb21hcC1wY20uaCBiL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmgKaW5kZXggZmVhMDUxNS4uYTBlZDFkYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcC1wY20uaAorKysgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5oCkBAIC00LDcgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCiAgKgogICogQ29udGFjdDogSmFya2tvIE5pa3VsYSA8amhuaWt1bGFAZ21haWwuY29tPgotICogICAgICAgICAgUGV0ZXIgVWpmYWx1c2kgPHBldGVyLnVqZmFsdXNpQG5va2lhLmNvbT4KKyAqICAgICAgICAgIFBldGVyIFVqZmFsdXNpIDxwZXRlci51amZhbHVzaUB0aS5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL3J4NTEuYyBiL3NvdW5kL3NvYy9vbWFwL3J4NTEuYwppbmRleCBkMDk4NjIyLi4wYWFlOTk4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9yeDUxLmMKKysrIGIvc291bmQvc29jL29tYXAvcng1MS5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwOCAtIDIwMDkgTm9raWEgQ29ycG9yYXRpb24KICAqCi0gKiBDb250YWN0OiBQZXRlciBVamZhbHVzaSA8cGV0ZXIudWpmYWx1c2lAbm9raWEuY29tPgorICogQ29udGFjdDogUGV0ZXIgVWpmYWx1c2kgPHBldGVyLnVqZmFsdXNpQHRpLmNvbT4KICAqICAgICAgICAgIEVkdWFyZG8gVmFsZW50aW4gPGVkdWFyZG8udmFsZW50aW5Abm9raWEuY29tPgogICogICAgICAgICAgSmFya2tvIE5pa3VsYSA8amhuaWt1bGFAZ21haWwuY29tPgogICoKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvS2NvbmZpZyBiL3NvdW5kL3NvYy9weGEvS2NvbmZpZwppbmRleCA1ODBmNDg1Li4zM2ViYzQ2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL0tjb25maWcKKysrIGIvc291bmQvc29jL3B4YS9LY29uZmlnCkBAIC0xNTUsNiArMTU1LDE1IEBACiAJaGVscAogCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiBSYXVtZmVsZCBkZXZpY2VzCiAKK2NvbmZpZyBTTkRfUFhBMlhYX1NPQ19IWDQ3MDAKKwl0cmlzdGF0ZSAiU29DIEF1ZGlvIHN1cHBvcnQgZm9yIEhQIGlQQVEgaHg0NzAwIgorCWRlcGVuZHMgb24gU05EX1BYQTJYWF9TT0MgJiYgTUFDSF9INDcwMAorCXNlbGVjdCBTTkRfUFhBMlhYX1NPQ19JMlMKKwlzZWxlY3QgU05EX1NPQ19BSzQ2NDEKKwloZWxwCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIHRoZQorCSAgSFAgaVBBUSBoeDQ3MDAuCisKIGNvbmZpZyBTTkRfUFhBMlhYX1NPQ19NQUdJQ0lBTgogCXRyaXN0YXRlICJTb0MgQXVkaW8gc3VwcG9ydCBmb3IgSFRDIE1hZ2ljaWFuIgogCWRlcGVuZHMgb24gU05EX1BYQTJYWF9TT0MgJiYgTUFDSF9NQUdJQ0lBTgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9NYWtlZmlsZSBiL3NvdW5kL3NvYy9weGEvTWFrZWZpbGUKaW5kZXggMDc2NjAxNi4uYWYzNTc2MiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvcHhhL01ha2VmaWxlCkBAIC0yMiw2ICsyMiw3IEBACiBzbmQtc29jLXNhYXJiLW9ianMgOj0gc2FhcmIubwogc25kLXNvYy10YXZvcmV2YjMtb2JqcyA6PSB0YXZvcmV2YjMubwogc25kLXNvYy16eWxvbml0ZS1vYmpzIDo9IHp5bG9uaXRlLm8KK3NuZC1zb2MtaHg0NzAwLW9ianMgOj0gaHg0NzAwLm8KIHNuZC1zb2MtbWFnaWNpYW4tb2JqcyA6PSBtYWdpY2lhbi5vCiBzbmQtc29jLW1pb2E3MDEtb2JqcyA6PSBtaW9hNzAxX3dtOTcxMy5vCiBzbmQtc29jLXoyLW9ianMgOj0gejIubwpAQCAtMzcsNiArMzgsNyBAQAogb2JqLSQoQ09ORklHX1NORF9QWEEyWFhfU09DX1NQSVRaKSArPSBzbmQtc29jLXNwaXR6Lm8KIG9iai0kKENPTkZJR19TTkRfUFhBMlhYX1NPQ19FTV9YMjcwKSArPSBzbmQtc29jLWVtLXgyNzAubwogb2JqLSQoQ09ORklHX1NORF9QWEEyWFhfU09DX1BBTE0yN1gpICs9IHNuZC1zb2MtcGFsbTI3eC5vCitvYmotJChDT05GSUdfU05EX1BYQTJYWF9TT0NfSFg0NzAwKSArPSBzbmQtc29jLWh4NDcwMC5vCiBvYmotJChDT05GSUdfU05EX1BYQTJYWF9TT0NfTUFHSUNJQU4pICs9IHNuZC1zb2MtbWFnaWNpYW4ubwogb2JqLSQoQ09ORklHX1NORF9QWEEyWFhfU09DX01JT0E3MDEpICs9IHNuZC1zb2MtbWlvYTcwMS5vCiBvYmotJChDT05GSUdfU05EX1BYQTJYWF9TT0NfWjIpICs9IHNuZC1zb2MtejIubwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9jb3JnaS5jIGIvc291bmQvc29jL3B4YS9jb3JnaS5jCmluZGV4IDkwMjdkYTQuLjI4NzU3ZmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvY29yZ2kuYworKysgYi9zb3VuZC9zb2MvcHhhL2NvcmdpLmMKQEAgLTMxMCw3ICszMTAsNyBAQAogCS5jcHVfZGFpX25hbWUgPSAicHhhMnh4LWkycyIsCiAJLmNvZGVjX2RhaV9uYW1lID0gIndtODczMS1oaWZpIiwKIAkucGxhdGZvcm1fbmFtZSA9ICJweGEtcGNtLWF1ZGlvIiwKLQkuY29kZWNfbmFtZSA9ICJ3bTg3MzEtY29kZWMuMC0wMDFiIiwKKwkuY29kZWNfbmFtZSA9ICJ3bTg3MzEuMC0wMDFiIiwKIAkuaW5pdCA9IGNvcmdpX3dtODczMV9pbml0LAogCS5vcHMgPSAmY29yZ2lfb3BzLAogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvaHg0NzAwLmMgYi9zb3VuZC9zb2MvcHhhL2h4NDcwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YzEyNDgKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvcHhhL2h4NDcwMC5jCkBAIC0wLDAgKzEsMjU1IEBACisvKgorICogU29DIGF1ZGlvIGZvciBIUCBpUEFRIGh4NDcwMAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBQaGlsaXBwIFphYmVsCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2phY2suaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisKKyNpbmNsdWRlIDxtYWNoL2h4NDcwMC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSAicHhhMnh4LWkycy5oIgorCisjaW5jbHVkZSAiLi4vY29kZWNzL2FrNDY0MS5oIgorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfamFjayBoc19qYWNrOworCisvKiBIZWFkcGhvbmVzIGphY2sgZGV0ZWN0aW9uIERBUE0gcGluICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfamFja19waW4gaHNfamFja19waW5bXSA9IHsKKwl7CisJCS5waW4JPSAiSGVhZHBob25lIEphY2siLAorCQkubWFzawk9IFNORF9KQUNLX0hFQURQSE9ORSwKKwl9LAorCXsKKwkJLnBpbgk9ICJTcGVha2VyIiwKKwkJLyogZGlzYWJsZSBzcGVha2VyIHdoZW4gaHAgamFjayBpcyBpbnNlcnRlZCAqLworCQkubWFzayAgID0gU05EX0pBQ0tfSEVBRFBIT05FLAorCQkuaW52ZXJ0CT0gMSwKKwl9LAorfTsKKworLyogSGVhZHBob25lcyBqYWNrIGRldGVjdGlvbiBHUElPICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfamFja19ncGlvIGhzX2phY2tfZ3BpbyA9IHsKKwkuZ3BpbwkJPSBHUElPNzVfSFg0NzAwX0VBUlBIT05FX25ERVQsCisJLmludmVydAkJPSB0cnVlLAorCS5uYW1lCQk9ICJocC1ncGlvIiwKKwkucmVwb3J0CQk9IFNORF9KQUNLX0hFQURQSE9ORSwKKwkuZGVib3VuY2VfdGltZQk9IDIwMCwKK307CisKKy8qCisgKiBpUEFRIGh4NDcwMCB1c2VzIEkyUyBmb3IgY2FwdHVyZSBhbmQgcGxheWJhY2suCisgKi8KK3N0YXRpYyBpbnQgaHg0NzAwX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmNvZGVjX2RhaTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmNwdV9kYWk7CisJaW50IHJldCA9IDA7CisKKwkvKiBzZXQgY29kZWMgREFJIGNvbmZpZ3VyYXRpb24gKi8KKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNvZGVjX2RhaSwKKwkJCVNORF9TT0NfREFJRk1UX01TQiB8IFNORF9TT0NfREFJRk1UX05CX05GIHwKKwkJCVNORF9TT0NfREFJRk1UX0NCU19DRlMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogc2V0IGNwdSBEQUkgY29uZmlndXJhdGlvbiAqLworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwKKwkJCVNORF9TT0NfREFJRk1UX01TQiB8IFNORF9TT0NfREFJRk1UX05CX05GIHwKKwkJCVNORF9TT0NfREFJRk1UX0NCU19DRlMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogc2V0IHRoZSBJMlMgc3lzdGVtIGNsb2NrIGFzIG91dHB1dCAqLworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY3B1X2RhaSwgUFhBMlhYX0kyU19TWVNDTEssIDAsCisJCQlTTkRfU09DX0NMT0NLX09VVCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBpbmZvcm0gY29kZWMgZHJpdmVyIGFib3V0IGNsb2NrIGZyZXEgKgorCSAqIChQWEEgSTJTIGFsd2F5cyB1c2VzIGRpdmlkZXIgMjU2KSAgICAqLworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY29kZWNfZGFpLCAwLCAyNTYgKiBwYXJhbXNfcmF0ZShwYXJhbXMpLAorCQkJU05EX1NPQ19DTE9DS19JTik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBoeDQ3MDBfb3BzID0geworCS5od19wYXJhbXMgPSBoeDQ3MDBfaHdfcGFyYW1zLAorfTsKKworc3RhdGljIGludCBoeDQ3MDBfc3BrX3Bvd2VyKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmssIGludCBldmVudCkKK3sKKwlncGlvX3NldF92YWx1ZShHUElPMTA3X0hYNDcwMF9TUEtfblNELCAhIVNORF9TT0NfREFQTV9FVkVOVF9PTihldmVudCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGh4NDcwMF9ocF9wb3dlcihzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCSAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmssIGludCBldmVudCkKK3sKKwlncGlvX3NldF92YWx1ZShHUElPOTJfSFg0NzAwX0hQX0RSSVZFUiwgISFTTkRfU09DX0RBUE1fRVZFTlRfT04oZXZlbnQpKTsKKwlyZXR1cm4gMDsKK30KKworLyogaHg0NzAwIG1hY2hpbmUgZGFwbSB3aWRnZXRzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgaHg0NzAwX2RhcG1fd2lkZ2V0c1tdID0geworCVNORF9TT0NfREFQTV9IUCgiSGVhZHBob25lIEphY2siLCBoeDQ3MDBfaHBfcG93ZXIpLAorCVNORF9TT0NfREFQTV9TUEsoIlNwZWFrZXIiLCBoeDQ3MDBfc3BrX3Bvd2VyKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJCdWlsdC1pbiBNaWNyb3Bob25lIiwgTlVMTCksCit9OworCisvKiBoeDQ3MDAgbWFjaGluZSBhdWRpb19tYXAgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGh4NDcwMF9hdWRpb19tYXBbXSA9IHsKKworCS8qIEhlYWRwaG9uZSBjb25uZWN0ZWQgdG8gTE9VVCwgUk9VVCAqLworCXsiSGVhZHBob25lIEphY2siLCBOVUxMLCAiTE9VVCJ9LAorCXsiSGVhZHBob25lIEphY2siLCBOVUxMLCAiUk9VVCJ9LAorCisJLyogU3BlYWtlciBjb25uZWN0ZWQgdG8gTU9VVDIgKi8KKwl7IlNwZWFrZXIiLCBOVUxMLCAiTU9VVDIifSwKKworCS8qIE1pY3JvcGhvbmUgY29ubmVjdGVkIHRvIE1JQ0lOICovCisJeyJNSUNJTiIsIE5VTEwsICJCdWlsdC1pbiBNaWNyb3Bob25lIn0sCisJeyJBSU4iLCBOVUxMLCAiTUlDT1VUIn0sCit9OworCisvKgorICogTG9naWMgZm9yIGEgYWs0NjQxIGFzIGNvbm5lY3RlZCBvbiBhIEhQIGlQQVEgaHg0NzAwCisgKi8KK3N0YXRpYyBpbnQgaHg0NzAwX2FrNDY0MV9pbml0KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CisJaW50IGVycjsKKworCS8qIE5DIGNvZGVjIHBpbnMgKi8KKwkvKiBGSVhNRTogaXMgYW55dGhpbmcgY29ubmVjdGVkIGhlcmU/ICovCisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTU9VVDEiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJNSUNFWFQiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJBVVgiKTsKKworCS8qIEphY2sgZGV0ZWN0aW9uIEFQSSBzdHVmZiAqLworCWVyciA9IHNuZF9zb2NfamFja19uZXcoY29kZWMsICJIZWFkcGhvbmUgSmFjayIsCisJCQkJU05EX0pBQ0tfSEVBRFBIT05FLCAmaHNfamFjayk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHNuZF9zb2NfamFja19hZGRfcGlucygmaHNfamFjaywgQVJSQVlfU0laRShoc19qYWNrX3BpbiksCisJCQkJCWhzX2phY2tfcGluKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gc25kX3NvY19qYWNrX2FkZF9ncGlvcygmaHNfamFjaywgMSwgJmhzX2phY2tfZ3Bpbyk7CisKKwlyZXR1cm4gZXJyOworfQorCisvKiBoeDQ3MDAgZGlnaXRhbCBhdWRpbyBpbnRlcmZhY2UgZ2x1ZSAtIGNvbm5lY3RzIGNvZGVjIDwtLT4gQ1BVICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgaHg0NzAwX2RhaSA9IHsKKwkubmFtZSA9ICJhazQ2NDEiLAorCS5zdHJlYW1fbmFtZSA9ICJBSzQ2NDEiLAorCS5jcHVfZGFpX25hbWUgPSAicHhhMnh4LWkycyIsCisJLmNvZGVjX2RhaV9uYW1lID0gImFrNDY0MS1oaWZpIiwKKwkucGxhdGZvcm1fbmFtZSA9ICJweGEtcGNtLWF1ZGlvIiwKKwkuY29kZWNfbmFtZSA9ICJhazQ2NDEuMC0wMDEyIiwKKwkuaW5pdCA9IGh4NDcwMF9hazQ2NDFfaW5pdCwKKwkub3BzID0gJmh4NDcwMF9vcHMsCit9OworCisvKiBoeDQ3MDAgYXVkaW8gbWFjaGluZSBkcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIHNuZF9zb2NfY2FyZF9oeDQ3MDAgPSB7CisJLm5hbWUJCQk9ICJpUEFRIGh4NDcwMCIsCisJLmRhaV9saW5rCQk9ICZoeDQ3MDBfZGFpLAorCS5udW1fbGlua3MJCT0gMSwKKwkuZGFwbV93aWRnZXRzCQk9IGh4NDcwMF9kYXBtX3dpZGdldHMsCisJLm51bV9kYXBtX3dpZGdldHMJPSBBUlJBWV9TSVpFKGh4NDcwMF9kYXBtX3dpZGdldHMpLAorCS5kYXBtX3JvdXRlcwkJPSBoeDQ3MDBfYXVkaW9fbWFwLAorCS5udW1fZGFwbV9yb3V0ZXMJPSBBUlJBWV9TSVpFKGh4NDcwMF9hdWRpb19tYXApLAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvIGh4NDcwMF9hdWRpb19ncGlvc1tdID0geworCXsgR1BJTzEwN19IWDQ3MDBfU1BLX25TRCwgR1BJT0ZfT1VUX0lOSVRfSElHSCwgIlNQS19QT1dFUiIgfSwKKwl7IEdQSU85Ml9IWDQ3MDBfSFBfRFJJVkVSLCBHUElPRl9PVVRfSU5JVF9MT1csICJFUF9QT1dFUiIgfSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGh4NDcwMF9hdWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQ7CisKKwlpZiAoIW1hY2hpbmVfaXNfaDQ3MDAoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSBncGlvX3JlcXVlc3RfYXJyYXkoaHg0NzAwX2F1ZGlvX2dwaW9zLAorCQkJCUFSUkFZX1NJWkUoaHg0NzAwX2F1ZGlvX2dwaW9zKSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXNuZF9zb2NfY2FyZF9oeDQ3MDAuZGV2ID0gJnBkZXYtPmRldjsKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NhcmQoJnNuZF9zb2NfY2FyZF9oeDQ3MDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgaHg0NzAwX2F1ZGlvX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXNuZF9zb2NfamFja19mcmVlX2dwaW9zKCZoc19qYWNrLCAxLCAmaHNfamFja19ncGlvKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfY2FyZCgmc25kX3NvY19jYXJkX2h4NDcwMCk7CisKKwlncGlvX3NldF92YWx1ZShHUElPOTJfSFg0NzAwX0hQX0RSSVZFUiwgMCk7CisJZ3Bpb19zZXRfdmFsdWUoR1BJTzEwN19IWDQ3MDBfU1BLX25TRCwgMCk7CisKKwlncGlvX2ZyZWVfYXJyYXkoaHg0NzAwX2F1ZGlvX2dwaW9zLCBBUlJBWV9TSVpFKGh4NDcwMF9hdWRpb19ncGlvcykpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBoeDQ3MDBfYXVkaW9fZHJpdmVyID0geworCS5kcml2ZXIJPSB7CisJCS5uYW1lID0gImh4NDcwMC1hdWRpbyIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkucG0gPSAmc25kX3NvY19wbV9vcHMsCisJfSwKKwkucHJvYmUJPSBoeDQ3MDBfYXVkaW9fcHJvYmUsCisJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKGh4NDcwMF9hdWRpb19yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaHg0NzAwX21vZGluaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZoeDQ3MDBfYXVkaW9fZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGh4NDcwMF9tb2Rpbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGh4NDcwMF9tb2RleGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmh4NDcwMF9hdWRpb19kcml2ZXIpOworfQorCittb2R1bGVfZXhpdChoeDQ3MDBfbW9kZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlBoaWxpcHAgWmFiZWwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUxTQSBTb0MgaVBBUSBoeDQ3MDAiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06aHg0NzAwLWF1ZGlvIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3Bvb2RsZS5jIGIvc291bmQvc29jL3B4YS9wb29kbGUuYwppbmRleCBhN2Q0OTk5Li5kYTNhZTQzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3Bvb2RsZS5jCisrKyBiL3NvdW5kL3NvYy9weGEvcG9vZGxlLmMKQEAgLTI3Niw3ICsyNzYsNyBAQAogCS5jcHVfZGFpX25hbWUgPSAicHhhMnh4LWkycyIsCiAJLmNvZGVjX2RhaV9uYW1lID0gIndtODczMS1oaWZpIiwKIAkucGxhdGZvcm1fbmFtZSA9ICJweGEtcGNtLWF1ZGlvIiwKLQkuY29kZWNfbmFtZSA9ICJ3bTg3MzEtY29kZWMuMC0wMDFiIiwKKwkuY29kZWNfbmFtZSA9ICJ3bTg3MzEuMC0wMDFiIiwKIAkuaW5pdCA9IHBvb2RsZV93bTg3MzFfaW5pdCwKIAkub3BzID0gJnBvb2RsZV9vcHMsCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9zcGl0ei5jIGIvc291bmQvc29jL3B4YS9zcGl0ei5jCmluZGV4IDhlMTU3MTMuLmIyNTNkODYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvc3BpdHouYworKysgYi9zb3VuZC9zb2MvcHhhL3NwaXR6LmMKQEAgLTQyLDYgKzQyLDcgQEAKIAogc3RhdGljIGludCBzcGl0el9qYWNrX2Z1bmM7CiBzdGF0aWMgaW50IHNwaXR6X3Nwa19mdW5jOworc3RhdGljIGludCBzcGl0el9taWNfZ3BpbzsKIAogc3RhdGljIHZvaWQgc3BpdHpfZXh0X2NvbnRyb2woc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewpAQCAtMjE3LDE0ICsyMTgsNyBAQAogc3RhdGljIGludCBzcGl0el9taWNfYmlhcyhzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICprLCBpbnQgZXZlbnQpCiB7Ci0JaWYgKG1hY2hpbmVfaXNfYm9yem9pKCkgfHwgbWFjaGluZV9pc19zcGl0eigpKQotCQlncGlvX3NldF92YWx1ZShTUElUWl9HUElPX01JQ19CSUFTLAotCQkJCVNORF9TT0NfREFQTV9FVkVOVF9PTihldmVudCkpOwotCi0JaWYgKG1hY2hpbmVfaXNfYWtpdGEoKSkKLQkJZ3Bpb19zZXRfdmFsdWUoQUtJVEFfR1BJT19NSUNfQklBUywKLQkJCQlTTkRfU09DX0RBUE1fRVZFTlRfT04oZXZlbnQpKTsKLQorCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKHNwaXR6X21pY19ncGlvLCBTTkRfU09DX0RBUE1fRVZFTlRfT04oZXZlbnQpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzM5LDIyICszMzMsNDUgQEAKIAlpZiAoIShtYWNoaW5lX2lzX3NwaXR6KCkgfHwgbWFjaGluZV9pc19ib3J6b2koKSB8fCBtYWNoaW5lX2lzX2FraXRhKCkpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCWlmIChtYWNoaW5lX2lzX2JvcnpvaSgpIHx8IG1hY2hpbmVfaXNfc3BpdHooKSkKKwkJc3BpdHpfbWljX2dwaW8gPSBTUElUWl9HUElPX01JQ19CSUFTOworCWVsc2UKKwkJc3BpdHpfbWljX2dwaW8gPSBBS0lUQV9HUElPX01JQ19CSUFTOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KHNwaXR6X21pY19ncGlvLCAiTUlDIEdQSU8iKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjE7CisKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoc3BpdHpfbWljX2dwaW8sIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyMjsKKwogCXNwaXR6X3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKLQlpZiAoIXNwaXR6X3NuZF9kZXZpY2UpCi0JCXJldHVybiAtRU5PTUVNOworCWlmICghc3BpdHpfc25kX2RldmljZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjI7CisJfQogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEoc3BpdHpfc25kX2RldmljZSwgJnNuZF9zb2Nfc3BpdHopOworCiAJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChzcGl0el9zbmRfZGV2aWNlKTsKLQogCWlmIChyZXQpCi0JCXBsYXRmb3JtX2RldmljZV9wdXQoc3BpdHpfc25kX2RldmljZSk7CisJCWdvdG8gZXJyMzsKIAorCXJldHVybiAwOworCitlcnIzOgorCXBsYXRmb3JtX2RldmljZV9wdXQoc3BpdHpfc25kX2RldmljZSk7CitlcnIyOgorCWdwaW9fZnJlZShzcGl0el9taWNfZ3Bpbyk7CitlcnIxOgogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzcGl0el9leGl0KHZvaWQpCiB7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoc3BpdHpfc25kX2RldmljZSk7CisJZ3Bpb19mcmVlKHNwaXR6X21pY19ncGlvKTsKIH0KIAogbW9kdWxlX2luaXQoc3BpdHpfaW5pdCk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9LY29uZmlnIGIvc291bmQvc29jL3NhbXN1bmcvS2NvbmZpZwppbmRleCBhM2ZkZmI2Li40NTk1NjZiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2Ftc3VuZy9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL0tjb25maWcKQEAgLTE2MiwzICsxNjIsMTggQEAKIAlzZWxlY3QgU05EX1NBTVNVTkdfU1BESUYKIAloZWxwCiAJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIFMvUERJRiBhdWRpbyBvbiB0aGUgU01ESy4KKworY29uZmlnIFNORF9TT0NfU01ES19XTTg1ODBfUENNCisJdHJpc3RhdGUgIlNvQyBQQ00gQXVkaW8gc3VwcG9ydCBmb3IgV004NTgwIG9uIFNNREsiCisJZGVwZW5kcyBvbiBTTkRfU09DX1NBTVNVTkcgJiYgKE1BQ0hfU01ESzY0NTAgfHwgTUFDSF9TTURLVjIxMCB8fCBNQUNIX1NNREtDMTEwKQorCXNlbGVjdCBTTkRfU09DX1dNODU4MAorCXNlbGVjdCBTTkRfU0FNU1VOR19QQ00KKwloZWxwCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIHRoZSBTTURLLgorCitjb25maWcgU05EX1NPQ19TUEVZU0lERQorCXRyaXN0YXRlICJBdWRpbyBzdXBwb3J0IGZvciBXb2xmc29uIFNwZXlzaWRlIgorCWRlcGVuZHMgb24gU05EX1NPQ19TQU1TVU5HICYmIE1BQ0hfV0xGX0NSQUdHXzY0MTAKKwlzZWxlY3QgU05EX1NBTVNVTkdfSTJTCisJc2VsZWN0IFNORF9TT0NfV004OTE1CisJc2VsZWN0IFNORF9TT0NfV005MDgxCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9NYWtlZmlsZSBiL3NvdW5kL3NvYy9zYW1zdW5nL01ha2VmaWxlCmluZGV4IDI5NGRlYzAuLjY4Mzg0M2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zYW1zdW5nL01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL01ha2VmaWxlCkBAIC0zNCw2ICszNCw4IEBACiBzbmQtc29jLXMzYzY0eHgtc21hcnRxLXdtODk4Ny1vYmpzIDo9IHNtYXJ0cV93bTg5ODcubwogc25kLXNvYy1nb25pLXdtODk5NC1vYmpzIDo9IGdvbmlfd204OTk0Lm8KIHNuZC1zb2Mtc21kay1zcGRpZi1vYmpzIDo9IHNtZGtfc3BkaWYubworc25kLXNvYy1zbWRrLXdtODU4MHBjbS1vYmpzIDo9IHNtZGtfd204NTgwcGNtLm8KK3NuZC1zb2Mtc3BleXNpZGUtb2JqcyA6PSBzcGV5c2lkZS5vCiAKIG9iai0kKENPTkZJR19TTkRfU09DX1NBTVNVTkdfSklWRV9XTTg3NTApICs9IHNuZC1zb2Mtaml2ZS13bTg3NTAubwogb2JqLSQoQ09ORklHX1NORF9TT0NfU0FNU1VOR19ORU8xOTczX1dNODc1MykgKz0gc25kLXNvYy1uZW8xOTczLXdtODc1My5vCkBAIC01MSwzICs1Myw1IEBACiBvYmotJChDT05GSUdfU05EX1NPQ19TTUFSVFEpICs9IHNuZC1zb2MtczNjNjR4eC1zbWFydHEtd204OTg3Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX1NBTVNVTkdfU01ES19TUERJRikgKz0gc25kLXNvYy1zbWRrLXNwZGlmLm8KIG9iai0kKENPTkZJR19TTkRfU09DX0dPTklfQVFVSUxBX1dNODk5NCkgKz0gc25kLXNvYy1nb25pLXdtODk5NC5vCitvYmotJChDT05GSUdfU05EX1NPQ19TTURLX1dNODU4MF9QQ00pICs9IHNuZC1zb2Mtc21kay13bTg1ODBwY20ubworb2JqLSQoQ09ORklHX1NORF9TT0NfU1BFWVNJREUpICs9IHNuZC1zb2Mtc3BleXNpZGUubwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvZ29uaV93bTg5OTQuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL2dvbmlfd204OTk0LmMKaW5kZXggMGU4MGRhZS4uZWI2ZDcyZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvZ29uaV93bTg5OTQuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9nb25pX3dtODk5NC5jCkBAIC0yNDYsNyArMjQ2LDYgQEAKIAkuc3RyZWFtX25hbWUgPSAiVm9pY2UiLAogCS5jcHVfZGFpX25hbWUgPSAiZ29uaS12b2ljZS1kYWkiLAogCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTg5OTQtYWlmMiIsCi0JLnBsYXRmb3JtX25hbWUgPSAic2Ftc3VuZy1hdWRpbyIsCiAJLmNvZGVjX25hbWUgPSAid204OTk0LWNvZGVjLjAtMDAxYSIsCiAJLm9wcyA9ICZnb25pX3ZvaWNlX29wcywKIH0sCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9uZW8xOTczX3dtODc1My5jIGIvc291bmQvc29jL3NhbXN1bmcvbmVvMTk3M193bTg3NTMuYwppbmRleCA0NTIyMzA5Li4xNjE1MmVkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2Ftc3VuZy9uZW8xOTczX3dtODc1My5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL25lbzE5NzNfd204NzUzLmMKQEAgLTQzMiw3ICs0MzIsNiBAQAogeyAvKiBWb2ljZSB2aWEgQlQgKi8KIAkubmFtZSA9ICJCbHVldG9vdGgiLAogCS5zdHJlYW1fbmFtZSA9ICJWb2ljZSIsCi0JLnBsYXRmb3JtX25hbWUgPSAic2Ftc3VuZy1hdWRpbyIsCiAJLmNwdV9kYWlfbmFtZSA9ICJkZmJtY3MzMjAtcGNtIiwKIAkuY29kZWNfZGFpX25hbWUgPSAid204NzUzLXZvaWNlIiwKIAkuY29kZWNfbmFtZSA9ICJ3bTg3NTMtY29kZWMuMC0wMDFhIiwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL3NtZGtfd204NTgwcGNtLmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zbWRrX3dtODU4MHBjbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMTIwOTIKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zbWRrX3dtODU4MHBjbS5jCkBAIC0wLDAgKzEsMjA2IEBACisvKgorICogIHNvdW5kL3NvYy9zYW1zdW5nL3NtZGtfd204NTgwcGNtLmMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uIEx0ZAorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciAgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlICIuLi9jb2RlY3Mvd204NTgwLmgiCisjaW5jbHVkZSAiZG1hLmgiCisjaW5jbHVkZSAicGNtLmgiCisKKy8qCisgKiBCb2FyZCBTZXR0aW5nczoKKyAqICBvICcxJyBtZWFucyAnT04nCisgKiAgbyAnMCcgbWVhbnMgJ09GRicKKyAqICBvICdYJyBtZWFucyAnRG9uJ3QgY2FyZScKKyAqCisgKiBTTURLNjQxMCwgU01ESzY0NDAsIFNNREs2NDUwIEJhc2UgQi9EOiBDRkcxLTAwMDAsIENGRzItMTExMQorICogU01ES0MxMTAsIFNNREtWMjEwOiBDRkdCMTEtMTAwMTAwLCBDRkdCMTItMDAwMAorICovCisKKyNkZWZpbmUgU01ES19XTTg1ODBfRVhUX09TQyAxMjAwMDAwMAorI2RlZmluZSBTTURLX1dNODU4MF9FWFRfTUNMSyA0MDk2MDAwCisjZGVmaW5lIFNNREtfV004NTgwX0VYVF9WT0lDRSAyMDQ4MDAwCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1jbGtfZnJlcTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHh0YWxfZnJlcTsKKworLyoKKyAqIElmIE1DTEsgY2xvY2sgZGlyZWN0bHkgZ2V0cyBmcm9tIFhUQUwsIHdlIGRvbid0IGhhdmUgdG8gdXNlIFBMTAorICogdG8gbWFrZSBNQ0xLLCBidXQgaWYgWFRBTCBjbG9jayBzb3VyY2UgY29ubmVjdHMgd2l0aCBvdGhlciBjb2RlYworICogcGluIChsaWtlIFhUSSksIHdlIHNob3VsZCBoYXZlIHRvIHNldCBjb2RlYydzIFBMTCB0byBtYWtlIE1DTEsuCisgKiBCZWNhdXNlIFNhbXN1bmcgU29DIGRvZXMgbm90IHN1cHBvcnQgcGNtY2RjbGsgb3V0cHV0IGxpa2UgSTJTLgorICovCisKK3N0YXRpYyBpbnQgc21ka193bTg1ODBfcGNtX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+Y29kZWNfZGFpOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+Y3B1X2RhaTsKKwlpbnQgcmZzLCByZXQ7CisKKwlzd2l0Y2ggKHBhcmFtc19yYXRlKHBhcmFtcykpIHsKKwljYXNlIDgwMDA6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiJXM6JWQgU2FtcGxpbmcgUmF0ZSAldSBub3Qgc3VwcG9ydGVkIVxuIiwKKwkJX19mdW5jX18sIF9fTElORV9fLCBwYXJhbXNfcmF0ZShwYXJhbXMpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmZzID0gbWNsa19mcmVxIC8gcGFyYW1zX3JhdGUocGFyYW1zKSAvIDI7CisKKwkvKiBTZXQgdGhlIGNvZGVjIERBSSBjb25maWd1cmF0aW9uICovCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksIFNORF9TT0NfREFJRk1UX0RTUF9CCisJCQkJfCBTTkRfU09DX0RBSUZNVF9JQl9ORgorCQkJCXwgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBTZXQgdGhlIGNwdSBEQUkgY29uZmlndXJhdGlvbiAqLworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwgU05EX1NPQ19EQUlGTVRfRFNQX0IKKwkJCQl8IFNORF9TT0NfREFJRk1UX0lCX05GCisJCQkJfCBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChtY2xrX2ZyZXEgPT0geHRhbF9mcmVxKSB7CisJCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY29kZWNfZGFpLCBXTTg1ODBfQ0xLU1JDX01DTEssCisJCQkJCQltY2xrX2ZyZXEsIFNORF9TT0NfQ0xPQ0tfSU4pOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gc25kX3NvY19kYWlfc2V0X2Nsa2Rpdihjb2RlY19kYWksIFdNODU4MF9NQ0xLLAorCQkJCQkJV004NTgwX0NMS1NSQ19NQ0xLKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0gZWxzZSB7CisJCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY29kZWNfZGFpLCBXTTg1ODBfQ0xLU1JDX1BMTEEsCisJCQkJCQltY2xrX2ZyZXEsIFNORF9TT0NfQ0xPQ0tfSU4pOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gc25kX3NvY19kYWlfc2V0X2Nsa2Rpdihjb2RlY19kYWksIFdNODU4MF9NQ0xLLAorCQkJCQkJV004NTgwX0NMS1NSQ19QTExBKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IHNuZF9zb2NfZGFpX3NldF9wbGwoY29kZWNfZGFpLCBXTTg1ODBfUExMQSwgMCwKKwkJCQkJCXh0YWxfZnJlcSwgbWNsa19mcmVxKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFNldCBQQ00gc291cmNlIGNsb2NrIG9uIENQVSAqLworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY3B1X2RhaSwgUzNDX1BDTV9DTEtTUkNfTVVYLAorCQkJCQltY2xrX2ZyZXEsIFNORF9TT0NfQ0xPQ0tfSU4pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogU2V0IFNDTEtfRElWIGZvciBtYWtpbmcgYmNsayAqLworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9jbGtkaXYoY3B1X2RhaSwgUzNDX1BDTV9TQ0xLX1BFUl9GUywgcmZzKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIHNtZGtfd204NTgwX3BjbV9vcHMgPSB7CisJLmh3X3BhcmFtcyA9IHNtZGtfd204NTgwX3BjbV9od19wYXJhbXMsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgc21ka19kYWlbXSA9IHsKKwl7CisJCS5uYW1lID0gIldNODU4MCBQQUlGIFBDTSBSWCIsCisJCS5zdHJlYW1fbmFtZSA9ICJQbGF5YmFjayIsCisJCS5jcHVfZGFpX25hbWUgPSAic2Ftc3VuZy1wY20uMCIsCisJCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTg1ODAtaGlmaS1wbGF5YmFjayIsCisJCS5wbGF0Zm9ybV9uYW1lID0gInNhbXN1bmctYXVkaW8iLAorCQkuY29kZWNfbmFtZSA9ICJ3bTg1ODAtY29kZWMuMC0wMDFiIiwKKwkJLm9wcyA9ICZzbWRrX3dtODU4MF9wY21fb3BzLAorCX0sIHsKKwkJLm5hbWUgPSAiV004NTgwIFBBSUYgUENNIFRYIiwKKwkJLnN0cmVhbV9uYW1lID0gIkNhcHR1cmUiLAorCQkuY3B1X2RhaV9uYW1lID0gInNhbXN1bmctcGNtLjAiLAorCQkuY29kZWNfZGFpX25hbWUgPSAid204NTgwLWhpZmktY2FwdHVyZSIsCisJCS5wbGF0Zm9ybV9uYW1lID0gInNhbXN1bmctYXVkaW8iLAorCQkuY29kZWNfbmFtZSA9ICJ3bTg1ODAtY29kZWMuMC0wMDFiIiwKKwkJLm9wcyA9ICZzbWRrX3dtODU4MF9wY21fb3BzLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBzbWRrX3BjbSA9IHsKKwkubmFtZSA9ICJTTURLLVBDTSIsCisJLmRhaV9saW5rID0gc21ka19kYWksCisJLm51bV9saW5rcyA9IDIsCit9OworCisvKgorICogQWZ0ZXIgU01ES0MxMTAgQmFzZSBCb2FyZCdzIFJldiBpcyAnMC4xJywgMTJNSHogRXh0ZXJuYWwgT1NDKFgxKQorICogaXMgYWJzZW50IChvciBub3QgY29ubmVjdGVkKSwgc28gd2UgY29ubmVjdCBFWFRfVk9JQ0VfQ0xLKE9TQzQpLAorICogMi4wNDg0TWh6LCBkaXJlY3RseSB3aXRoIE1DTEsgYm90aCBDb2RlYyBhbmQgU29DLgorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfc21ka19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQgPSAwOworCisJeHRhbF9mcmVxID0gU01ES19XTTg1ODBfRVhUX09TQzsKKwltY2xrX2ZyZXEgPSBTTURLX1dNODU4MF9FWFRfTUNMSzsKKworCWlmIChtYWNoaW5lX2lzX3NtZGtjMTEwKCkgfHwgbWFjaGluZV9pc19zbWRrdjIxMCgpKQorCQl4dGFsX2ZyZXEgPSBtY2xrX2ZyZXEgPSBTTURLX1dNODU4MF9FWFRfVk9JQ0U7CisKKwlzbWRrX3BjbS5kZXYgPSAmcGRldi0+ZGV2OworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY2FyZCgmc21ka19wY20pOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAic25kX3NvY19yZWdpc3Rlcl9jYXJkIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgc25kX3NtZGtfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc25kX3NvY191bnJlZ2lzdGVyX2NhcmQoJnNtZGtfcGNtKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc25kX3NtZGtfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkubmFtZSA9ICJzYW1zdW5nLXNtZGstcGNtIiwKKwl9LAorCS5wcm9iZSA9IHNuZF9zbWRrX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfc21ka19yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc21ka19hdWRpb19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc25kX3NtZGtfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc21ka19hdWRpb19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHNtZGtfYXVkaW9fZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzbmRfc21ka19kcml2ZXIpOworfQorCittb2R1bGVfZXhpdChzbWRrX2F1ZGlvX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJTYW5nYmVvbSBLaW0sIDxzYmtpbTczQHNhbXN1bmcuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIFNvQyBTTURLIFdNODU4MCBmb3IgUENNIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9zcGV5c2lkZS5jIGIvc291bmQvc29jL3NhbXN1bmcvc3BleXNpZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjBhMzMzCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3NhbXN1bmcvc3BleXNpZGUuYwpAQCAtMCwwICsxLDMzMiBAQAorLyoKKyAqIFNwZXlzaWRlIGF1ZGlvIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgMjAxMSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorI2luY2x1ZGUgPHNvdW5kL2phY2suaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlICIuLi9jb2RlY3Mvd204OTE1LmgiCisjaW5jbHVkZSAiLi4vY29kZWNzL3dtOTA4MS5oIgorCisjZGVmaW5lIFdNODkxNV9IUFNFTF9HUElPIDIxNAorCitzdGF0aWMgaW50IHNwZXlzaWRlX3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQsCisJCQkJICAgZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCit7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBjYXJkLT5ydGRbMF0uY29kZWNfZGFpOworCWludCByZXQ7CisKKwlzd2l0Y2ggKGxldmVsKSB7CisJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKKwkJcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksIFdNODkxNV9TWVNDTEtfTUNMSzEsCisJCQkJCSAgICAgMzI3NjgsIFNORF9TT0NfQ0xPQ0tfSU4pOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gc25kX3NvY19kYWlfc2V0X3BsbChjb2RlY19kYWksIFdNODkxNV9GTExfTUNMSzEsCisJCQkJCSAgMCwgMCwgMCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcl9lcnIoIkZhaWxlZCB0byBzdG9wIEZMTFxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzcGV5c2lkZV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5jcHVfZGFpOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5jb2RlY19kYWk7CisJaW50IHJldDsKKworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY29kZWNfZGFpLCBTTkRfU09DX0RBSUZNVF9JMlMKKwkJCQkJIHwgU05EX1NPQ19EQUlGTVRfTkJfTkYKKwkJCQkJIHwgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNwdV9kYWksIFNORF9TT0NfREFJRk1UX0kyUworCQkJCQkgfCBTTkRfU09DX0RBSUZNVF9OQl9ORgorCQkJCQkgfCBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9wbGwoY29kZWNfZGFpLCAwLCBXTTg5MTVfRkxMX01DTEsxLAorCQkJCSAgMzI3NjgsIDI1NiAqIDQ4MDAwKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY29kZWNfZGFpLCBXTTg5MTVfU1lTQ0xLX0ZMTCwKKwkJCQkgICAgIDI1NiAqIDQ4MDAwLCBTTkRfU09DX0NMT0NLX0lOKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIHNwZXlzaWRlX29wcyA9IHsKKwkuaHdfcGFyYW1zID0gc3BleXNpZGVfaHdfcGFyYW1zLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2phY2sgc3BleXNpZGVfaGVhZHNldDsKKworLyogSGVhZHNldCBqYWNrIGRldGVjdGlvbiBEQVBNIHBpbnMgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19qYWNrX3BpbiBzcGV5c2lkZV9oZWFkc2V0X3BpbnNbXSA9IHsKKwl7CisJCS5waW4gPSAiSGVhZHNldCBNaWMiLAorCQkubWFzayA9IFNORF9KQUNLX01JQ1JPUEhPTkUsCisJfSwKKwl7CisJCS5waW4gPSAiSGVhZHBob25lIiwKKwkJLm1hc2sgPSBTTkRfSkFDS19IRUFEUEhPTkUsCisJfSwKK307CisKKy8qIERlZmF1bHQgdGhlIGhlYWRwaG9uZSBzZWxlY3Rpb24gdG8gYWN0aXZlIGhpZ2ggKi8KK3N0YXRpYyBpbnQgc3BleXNpZGVfamFja19wb2xhcml0eTsKKworc3RhdGljIGludCBzcGV5c2lkZV9nZXRfbWljYmlhcyhzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqc291cmNlLAorCQkJCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpzaW5rKQoreworCWlmIChzcGV5c2lkZV9qYWNrX3BvbGFyaXR5ICYmIChzdHJjbXAoc291cmNlLT5uYW1lLCAiTUlDQjEiKSA9PSAwKSkKKwkJcmV0dXJuIDE7CisJaWYgKCFzcGV5c2lkZV9qYWNrX3BvbGFyaXR5ICYmIChzdHJjbXAoc291cmNlLT5uYW1lLCAiTUlDQjIiKSA9PSAwKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3BleXNpZGVfc2V0X3BvbGFyaXR5KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgIGludCBwb2xhcml0eSkKK3sKKwlzcGV5c2lkZV9qYWNrX3BvbGFyaXR5ID0gIXBvbGFyaXR5OworCWdwaW9fZGlyZWN0aW9uX291dHB1dChXTTg5MTVfSFBTRUxfR1BJTywgc3BleXNpZGVfamFja19wb2xhcml0eSk7CisKKwkvKiBSZS1ydW4gREFQTSB0byBtYWtlIHN1cmUgd2UncmUgdXNpbmcgdGhlIGNvcnJlY3QgbWljIGJpYXMgKi8KKwlzbmRfc29jX2RhcG1fc3luYygmY29kZWMtPmRhcG0pOworfQorCitzdGF0aWMgaW50IHNwZXlzaWRlX3dtODkxNV9pbml0KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCit7CisJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkgPSBydGQtPmNvZGVjX2RhaTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOworCWludCByZXQ7CisKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGRhaSwgV004OTE1X1NZU0NMS19NQ0xLMSwgMzI3NjgsIDApOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KFdNODkxNV9IUFNFTF9HUElPLCAiSFBfU0VMIik7CisJaWYgKHJldCAhPSAwKQorCQlwcl9lcnIoIkZhaWxlZCB0byByZXF1ZXN0IEhQX1NFTCBHUElPOiAlZFxuIiwgcmV0KTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoV004OTE1X0hQU0VMX0dQSU8sIHNwZXlzaWRlX2phY2tfcG9sYXJpdHkpOworCisJcmV0ID0gc25kX3NvY19qYWNrX25ldyhjb2RlYywgIkhlYWRzZXQiLAorCQkJICAgICAgIFNORF9KQUNLX0hFQURTRVQgfCBTTkRfSkFDS19CVE5fMCwKKwkJCSAgICAgICAmc3BleXNpZGVfaGVhZHNldCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNuZF9zb2NfamFja19hZGRfcGlucygmc3BleXNpZGVfaGVhZHNldCwKKwkJCQkgICAgQVJSQVlfU0laRShzcGV5c2lkZV9oZWFkc2V0X3BpbnMpLAorCQkJCSAgICBzcGV5c2lkZV9oZWFkc2V0X3BpbnMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl3bTg5MTVfZGV0ZWN0KGNvZGVjLCAmc3BleXNpZGVfaGVhZHNldCwgc3BleXNpZGVfc2V0X3BvbGFyaXR5KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNwZXlzaWRlX2xhdGVfcHJvYmUoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCkKK3sKKwlzbmRfc29jX2RhcG1faWdub3JlX3N1c3BlbmQoJmNhcmQtPmRhcG0sICJIZWFkcGhvbmUiKTsKKwlzbmRfc29jX2RhcG1faWdub3JlX3N1c3BlbmQoJmNhcmQtPmRhcG0sICJIZWFkc2V0IE1pYyIpOworCXNuZF9zb2NfZGFwbV9pZ25vcmVfc3VzcGVuZCgmY2FyZC0+ZGFwbSwgIk1haW4gQU1JQyIpOworCXNuZF9zb2NfZGFwbV9pZ25vcmVfc3VzcGVuZCgmY2FyZC0+ZGFwbSwgIk1haW4gRE1JQyIpOworCXNuZF9zb2NfZGFwbV9pZ25vcmVfc3VzcGVuZCgmY2FyZC0+ZGFwbSwgIlNwZWFrZXIiKTsKKwlzbmRfc29jX2RhcG1faWdub3JlX3N1c3BlbmQoJmNhcmQtPmRhcG0sICJXTTEyNTAgT3V0cHV0Iik7CisJc25kX3NvY19kYXBtX2lnbm9yZV9zdXNwZW5kKCZjYXJkLT5kYXBtLCAiV00xMjUwIElucHV0Iik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIHNwZXlzaWRlX2RhaVtdID0geworCXsKKwkJLm5hbWUgPSAiQ1BVIiwKKwkJLnN0cmVhbV9uYW1lID0gIkNQVSIsCisJCS5jcHVfZGFpX25hbWUgPSAic2Ftc3VuZy1pMnMuMCIsCisJCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTg5MTUtYWlmMSIsCisJCS5wbGF0Zm9ybV9uYW1lID0gInNhbXN1bmctYXVkaW8iLAorCQkuY29kZWNfbmFtZSA9ICJ3bTg5MTUuMS0wMDFhIiwKKwkJLmluaXQgPSBzcGV5c2lkZV93bTg5MTVfaW5pdCwKKwkJLm9wcyA9ICZzcGV5c2lkZV9vcHMsCisJfSwKKwl7CisJCS5uYW1lID0gIkJhc2ViYW5kIiwKKwkJLnN0cmVhbV9uYW1lID0gIkJhc2ViYW5kIiwKKwkJLmNwdV9kYWlfbmFtZSA9ICJ3bTg5MTUtYWlmMiIsCisJCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTEyNTAtZXYxIiwKKwkJLmNvZGVjX25hbWUgPSAid20xMjUwLWV2MS4xLTAwMjciLAorCQkub3BzID0gJnNwZXlzaWRlX29wcywKKwkJLmlnbm9yZV9zdXNwZW5kID0gMSwKKwl9LAorfTsKKworc3RhdGljIGludCBzcGV5c2lkZV93bTkwODFfaW5pdChzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0pCit7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTElORU9VVCIpOworCisJLyogQXQgYW55IHRpbWUgdGhlIFdNOTA4MSBpcyBhY3RpdmUgaXQgd2lsbCBoYXZlIHRoaXMgY2xvY2sgKi8KKwlyZXR1cm4gc25kX3NvY19jb2RlY19zZXRfc3lzY2xrKGRhcG0tPmNvZGVjLCBXTTkwODFfU1lTQ0xLX01DTEssCisJCQkJCTQ4MDAwICogMjU2LCAwKTsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2F1eF9kZXYgc3BleXNpZGVfYXV4X2RldltdID0geworCXsKKwkJLm5hbWUgPSAid205MDgxIiwKKwkJLmNvZGVjX25hbWUgPSAid205MDgxLjEtMDA2YyIsCisJCS5pbml0ID0gc3BleXNpZGVfd205MDgxX2luaXQsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlY19jb25mIHNwZXlzaWRlX2NvZGVjX2NvbmZbXSA9IHsKKwl7CisJCS5kZXZfbmFtZSA9ICJ3bTkwODEuMS0wMDZjIiwKKwkJLm5hbWVfcHJlZml4ID0gIlN1YiIsCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjb250cm9sc1tdID0geworCVNPQ19EQVBNX1BJTl9TV0lUQ0goIk1haW4gU3BlYWtlciIpLAorCVNPQ19EQVBNX1BJTl9TV0lUQ0goIk1haW4gRE1JQyIpLAorCVNPQ19EQVBNX1BJTl9TV0lUQ0goIk1haW4gQU1JQyIpLAorCVNPQ19EQVBNX1BJTl9TV0lUQ0goIldNMTI1MCBJbnB1dCIpLAorCVNPQ19EQVBNX1BJTl9TV0lUQ0goIldNMTI1MCBPdXRwdXQiKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3aWRnZXRzW10gPSB7CisJU05EX1NPQ19EQVBNX0hQKCJIZWFkcGhvbmUiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJIZWFkc2V0IE1pYyIsIE5VTEwpLAorCisJU05EX1NPQ19EQVBNX1NQSygiTWFpbiBTcGVha2VyIiwgTlVMTCksCisKKwlTTkRfU09DX0RBUE1fTUlDKCJNYWluIEFNSUMiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJNYWluIERNSUMiLCBOVUxMKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGF1ZGlvX3BhdGhzW10gPSB7CisJeyAiSU4xUk4iLCBOVUxMLCAiTUlDQjEiIH0sCisJeyAiSU4xUlAiLCBOVUxMLCAiTUlDQjEiIH0sCisJeyAiSU4xUk4iLCBOVUxMLCAiTUlDQjIiIH0sCisJeyAiSU4xUlAiLCBOVUxMLCAiTUlDQjIiIH0sCisJeyAiTUlDQjEiLCBOVUxMLCAiSGVhZHNldCBNaWMiLCBzcGV5c2lkZV9nZXRfbWljYmlhcyB9LAorCXsgIk1JQ0IyIiwgTlVMTCwgIkhlYWRzZXQgTWljIiwgc3BleXNpZGVfZ2V0X21pY2JpYXMgfSwKKworCXsgIklOMUxQIiwgTlVMTCwgIk1JQ0IyIiB9LAorCXsgIklOMVJOIiwgTlVMTCwgIk1JQ0IxIiB9LAorCXsgIk1JQ0IyIiwgTlVMTCwgIk1haW4gQU1JQyIgfSwKKworCXsgIkRNSUMxREFUIiwgTlVMTCwgIk1JQ0IxIiB9LAorCXsgIkRNSUMyREFUIiwgTlVMTCwgIk1JQ0IxIiB9LAorCXsgIk1JQ0IxIiwgTlVMTCwgIk1haW4gRE1JQyIgfSwKKworCXsgIkhlYWRwaG9uZSIsIE5VTEwsICJIUE9VVDFMIiB9LAorCXsgIkhlYWRwaG9uZSIsIE5VTEwsICJIUE9VVDFSIiB9LAorCisJeyAiU3ViIElOMSIsIE5VTEwsICJIUE9VVDJMIiB9LAorCXsgIlN1YiBJTjIiLCBOVUxMLCAiSFBPVVQyUiIgfSwKKworCXsgIk1haW4gU3BlYWtlciIsIE5VTEwsICJTdWIgU1BLTiIgfSwKKwl7ICJNYWluIFNwZWFrZXIiLCBOVUxMLCAiU3ViIFNQS1AiIH0sCisJeyAiTWFpbiBTcGVha2VyIiwgTlVMTCwgIlNQS0RBVCIgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIHNwZXlzaWRlID0geworCS5uYW1lID0gIlNwZXlzaWRlIiwKKwkuZGFpX2xpbmsgPSBzcGV5c2lkZV9kYWksCisJLm51bV9saW5rcyA9IEFSUkFZX1NJWkUoc3BleXNpZGVfZGFpKSwKKwkuYXV4X2RldiA9IHNwZXlzaWRlX2F1eF9kZXYsCisJLm51bV9hdXhfZGV2cyA9IEFSUkFZX1NJWkUoc3BleXNpZGVfYXV4X2RldiksCisJLmNvZGVjX2NvbmYgPSBzcGV5c2lkZV9jb2RlY19jb25mLAorCS5udW1fY29uZmlncyA9IEFSUkFZX1NJWkUoc3BleXNpZGVfY29kZWNfY29uZiksCisKKwkuc2V0X2JpYXNfbGV2ZWwgPSBzcGV5c2lkZV9zZXRfYmlhc19sZXZlbCwKKworCS5jb250cm9scyA9IGNvbnRyb2xzLAorCS5udW1fY29udHJvbHMgPSBBUlJBWV9TSVpFKGNvbnRyb2xzKSwKKwkuZGFwbV93aWRnZXRzID0gd2lkZ2V0cywKKwkubnVtX2RhcG1fd2lkZ2V0cyA9IEFSUkFZX1NJWkUod2lkZ2V0cyksCisJLmRhcG1fcm91dGVzID0gYXVkaW9fcGF0aHMsCisJLm51bV9kYXBtX3JvdXRlcyA9IEFSUkFZX1NJWkUoYXVkaW9fcGF0aHMpLAorCisJLmxhdGVfcHJvYmUgPSBzcGV5c2lkZV9sYXRlX3Byb2JlLAorfTsKKworc3RhdGljIF9fZGV2aW5pdCBpbnQgc3BleXNpZGVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gJnNwZXlzaWRlOworCWludCByZXQ7CisKKwljYXJkLT5kZXYgPSAmcGRldi0+ZGV2OworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jYXJkKGNhcmQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAic25kX3NvY19yZWdpc3Rlcl9jYXJkKCkgZmFpbGVkOiAlZFxuIiwKKwkJCXJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNwZXlzaWRlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jYXJkKGNhcmQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNwZXlzaWRlX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJzcGV5c2lkZSIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkucG0gPSAmc25kX3NvY19wbV9vcHMsCisJfSwKKwkucHJvYmUgPSBzcGV5c2lkZV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aoc3BleXNpZGVfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNwZXlzaWRlX2F1ZGlvX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzcGV5c2lkZV9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoc3BleXNpZGVfYXVkaW9faW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzcGV5c2lkZV9hdWRpb19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNwZXlzaWRlX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChzcGV5c2lkZV9hdWRpb19leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTcGV5c2lkZSBhdWRpbyBzdXBwb3J0Iik7CitNT0RVTEVfQVVUSE9SKCJNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06c3BleXNpZGUiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zaC9mc2kuYyBiL3NvdW5kL3NvYy9zaC9mc2kuYwppbmRleCAyM2MwZTgzLi40YTlkYTZiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2gvZnNpLmMKKysrIGIvc291bmQvc29jL3NoL2ZzaS5jCkBAIC04Niw4ICs4Niw4IEBACiAjZGVmaW5lIFNFCSgxIDw8IDApCS8qIEZpeCB0aGUgbWFzdGVyIGNsb2NrICovCiAKIC8qIENMS19SU1QgKi8KLSNkZWZpbmUgQl9DTEsJCTB4MDAwMDAwMTAKLSNkZWZpbmUgQV9DTEsJCTB4MDAwMDAwMDEKKyNkZWZpbmUgQ1JCCSgxIDw8IDQpCisjZGVmaW5lIENSQQkoMSA8PCAwKQogCiAvKiBJTyBTSElGVCAvIE1BQ1JPICovCiAjZGVmaW5lIEJJX1NISUZUCTEyCkBAIC0xNDYsMTEgKzE0NiwyMCBAQAogCXZvaWQgX19pb21lbSAqYmFzZTsKIAlzdHJ1Y3QgZnNpX21hc3RlciAqbWFzdGVyOwogCi0JaW50IGNoYW5fbnVtOwogCXN0cnVjdCBmc2lfc3RyZWFtIHBsYXliYWNrOwogCXN0cnVjdCBmc2lfc3RyZWFtIGNhcHR1cmU7CiAKKwlpbnQgY2hhbl9udW06MTY7CisJaW50IGNsa19tYXN0ZXI6MTsKKwogCWxvbmcgcmF0ZTsKKworCS8qIGZvciBzdXNwZW5kL3Jlc3VtZSAqLworCXUzMiBzYXZlZF9kb19mbXQ7CisJdTMyIHNhdmVkX2RpX2ZtdDsKKwl1MzIgc2F2ZWRfY2tnMTsKKwl1MzIgc2F2ZWRfY2tnMjsKKwl1MzIgc2F2ZWRfb3V0X3NlbDsKIH07CiAKIHN0cnVjdCBmc2lfY29yZSB7CkBAIC0xNzEsNiArMTgwLDE0IEBACiAJc3RydWN0IGZzaV9jb3JlICpjb3JlOwogCXN0cnVjdCBzaF9mc2lfcGxhdGZvcm1faW5mbyAqaW5mbzsKIAlzcGlubG9ja190IGxvY2s7CisKKwkvKiBmb3Igc3VzcGVuZC9yZXN1bWUgKi8KKwl1MzIgc2F2ZWRfYV9tY2xrOworCXUzMiBzYXZlZF9iX21jbGs7CisJdTMyIHNhdmVkX2llbXNrOworCXUzMiBzYXZlZF9pbXNrOworCXUzMiBzYXZlZF9jbGtfcnN0OworCXUzMiBzYXZlZF9zb2Z0X3JzdDsKIH07CiAKIC8qCkBAIC0yNDQsNiArMjYxLDExIEBACiAJcmV0dXJuIGZzaS0+bWFzdGVyOwogfQogCitzdGF0aWMgaW50IGZzaV9pc19jbGtfbWFzdGVyKHN0cnVjdCBmc2lfcHJpdiAqZnNpKQoreworCXJldHVybiBmc2ktPmNsa19tYXN0ZXI7Cit9CisKIHN0YXRpYyBpbnQgZnNpX2lzX3BvcnRfYShzdHJ1Y3QgZnNpX3ByaXYgKmZzaSkKIHsKIAlyZXR1cm4gZnNpLT5tYXN0ZXItPmJhc2UgPT0gZnNpLT5iYXNlOwpAQCAtNTM1LDIwICs1NTcsNDUgQEAKIH0KIAogLyoKLSAqCQljdHJsIGZ1bmN0aW9uCisgKgkJY2xvY2sgZnVuY3Rpb24KICAqLwotCi1zdGF0aWMgdm9pZCBmc2lfY2xrX2N0cmwoc3RydWN0IGZzaV9wcml2ICpmc2ksIGludCBlbmFibGUpCisjZGVmaW5lIGZzaV9tb2R1bGVfaW5pdChtLCBkKQlfX2ZzaV9tb2R1bGVfY2xrX2N0cmwobSwgZCwgMSkKKyNkZWZpbmUgZnNpX21vZHVsZV9raWxsKG0sIGQpCV9fZnNpX21vZHVsZV9jbGtfY3RybChtLCBkLCAwKQorc3RhdGljIHZvaWQgX19mc2lfbW9kdWxlX2Nsa19jdHJsKHN0cnVjdCBmc2lfbWFzdGVyICptYXN0ZXIsCisJCQkJICBzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICBpbnQgZW5hYmxlKQogewotCXUzMiB2YWwgPSBmc2lfaXNfcG9ydF9hKGZzaSkgPyAoMSA8PCAwKSA6ICgxIDw8IDQpOwotCXN0cnVjdCBmc2lfbWFzdGVyICptYXN0ZXIgPSBmc2lfZ2V0X21hc3Rlcihmc2kpOworCXBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2KTsKIAotCWlmIChlbmFibGUpCi0JCWZzaV9tYXN0ZXJfbWFza19zZXQobWFzdGVyLCBDTEtfUlNULCB2YWwsIHZhbCk7Ci0JZWxzZQotCQlmc2lfbWFzdGVyX21hc2tfc2V0KG1hc3RlciwgQ0xLX1JTVCwgdmFsLCAwKTsKKwlpZiAoZW5hYmxlKSB7CisJCS8qIGVuYWJsZSBvbmx5IFNSICovCisJCWZzaV9tYXN0ZXJfbWFza19zZXQobWFzdGVyLCBTT0ZUX1JTVCwgRlNJU1IsIEZTSVNSKTsKKwkJZnNpX21hc3Rlcl9tYXNrX3NldChtYXN0ZXIsIFNPRlRfUlNULCBQQVNSIHwgUEJTUiwgMCk7CisJfSBlbHNlIHsKKwkJLyogY2xlYXIgYWxsIHJlZ2lzdGVycyAqLworCQlmc2lfbWFzdGVyX21hc2tfc2V0KG1hc3RlciwgU09GVF9SU1QsIEZTSVNSLCAwKTsKKwl9CisKKwlwbV9ydW50aW1lX3B1dF9zeW5jKGRldik7CiB9CiAKKyNkZWZpbmUgZnNpX3BvcnRfc3RhcnQoZikJX19mc2lfcG9ydF9jbGtfY3RybChmLCAxKQorI2RlZmluZSBmc2lfcG9ydF9zdG9wKGYpCV9fZnNpX3BvcnRfY2xrX2N0cmwoZiwgMCkKK3N0YXRpYyB2b2lkIF9fZnNpX3BvcnRfY2xrX2N0cmwoc3RydWN0IGZzaV9wcml2ICpmc2ksIGludCBlbmFibGUpCit7CisJc3RydWN0IGZzaV9tYXN0ZXIgKm1hc3RlciA9IGZzaV9nZXRfbWFzdGVyKGZzaSk7CisJdTMyIHNvZnQgPSBmc2lfaXNfcG9ydF9hKGZzaSkgPyBQQVNSIDogUEJTUjsKKwl1MzIgY2xrICA9IGZzaV9pc19wb3J0X2EoZnNpKSA/IENSQSAgOiBDUkI7CisJaW50IGlzX21hc3RlciA9IGZzaV9pc19jbGtfbWFzdGVyKGZzaSk7CisKKwlmc2lfbWFzdGVyX21hc2tfc2V0KG1hc3RlciwgU09GVF9SU1QsIHNvZnQsIChlbmFibGUpID8gc29mdCA6IDApOworCWlmIChpc19tYXN0ZXIpCisJCWZzaV9tYXN0ZXJfbWFza19zZXQobWFzdGVyLCBDTEtfUlNULCBjbGssIChlbmFibGUpID8gY2xrIDogMCk7Cit9CisKKy8qCisgKgkJY3RybCBmdW5jdGlvbgorICovCiBzdGF0aWMgdm9pZCBmc2lfZmlmb19pbml0KHN0cnVjdCBmc2lfcHJpdiAqZnNpLAogCQkJICBpbnQgaXNfcGxheSwKIAkJCSAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCkBAIC02MDEsMTggKzY0OCw2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBmc2lfc29mdF9hbGxfcmVzZXQoc3RydWN0IGZzaV9tYXN0ZXIgKm1hc3RlcikKLXsKLQkvKiBwb3J0IEFCIHJlc2V0ICovCi0JZnNpX21hc3Rlcl9tYXNrX3NldChtYXN0ZXIsIFNPRlRfUlNULCBQQVNSIHwgUEJTUiwgMCk7Ci0JbWRlbGF5KDEwKTsKLQotCS8qIHNvZnQgcmVzZXQgKi8KLQlmc2lfbWFzdGVyX21hc2tfc2V0KG1hc3RlciwgU09GVF9SU1QsIEZTSVNSLCAwKTsKLQlmc2lfbWFzdGVyX21hc2tfc2V0KG1hc3RlciwgU09GVF9SU1QsIEZTSVNSLCBGU0lTUik7Ci0JbWRlbGF5KDEwKTsKLX0KLQogc3RhdGljIGludCBmc2lfZmlmb19kYXRhX2N0cmwoc3RydWN0IGZzaV9wcml2ICpmc2ksIGludCBzdHJlYW0pCiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZTsKQEAgLTc5MywxNCArODI4LDEzIEBACiAJc3RydWN0IGZzaV9wcml2ICpmc2kgPSBmc2lfZ2V0X3ByaXYoc3Vic3RyZWFtKTsKIAlpbnQgaXNfcGxheSA9IGZzaV9pc19wbGF5KHN1YnN0cmVhbSk7CiAJc3RydWN0IGZzaV9tYXN0ZXIgKm1hc3RlciA9IGZzaV9nZXRfbWFzdGVyKGZzaSk7Ci0Jc2V0X3JhdGVfZnVuYyBzZXRfcmF0ZTsKKwlzZXRfcmF0ZV9mdW5jIHNldF9yYXRlID0gZnNpX2dldF9pbmZvX3NldF9yYXRlKG1hc3Rlcik7CiAKIAlmc2lfaXJxX2Rpc2FibGUoZnNpLCBpc19wbGF5KTsKLQlmc2lfY2xrX2N0cmwoZnNpLCAwKTsKIAotCXNldF9yYXRlID0gZnNpX2dldF9pbmZvX3NldF9yYXRlKG1hc3Rlcik7Ci0JaWYgKHNldF9yYXRlICYmIGZzaS0+cmF0ZSkKKwlpZiAoZnNpX2lzX2Nsa19tYXN0ZXIoZnNpKSkKIAkJc2V0X3JhdGUoZGFpLT5kZXYsIGZzaV9pc19wb3J0X2EoZnNpKSwgZnNpLT5yYXRlLCAwKTsKKwogCWZzaS0+cmF0ZSA9IDA7CiAKIAlwbV9ydW50aW1lX3B1dF9zeW5jKGRhaS0+ZGV2KTsKQEAgLTgyMSw4ICs4NTUsMTAgQEAKIAkJCQlmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcnVudGltZS0+cGVyaW9kX3NpemUpKTsKIAkJcmV0ID0gaXNfcGxheSA/IGZzaV9kYXRhX3B1c2goZnNpKSA6IGZzaV9kYXRhX3BvcChmc2kpOwogCQlmc2lfaXJxX2VuYWJsZShmc2ksIGlzX3BsYXkpOworCQlmc2lfcG9ydF9zdGFydChmc2kpOwogCQlicmVhazsKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJCWZzaV9wb3J0X3N0b3AoZnNpKTsKIAkJZnNpX2lycV9kaXNhYmxlKGZzaSwgaXNfcGxheSk7CiAJCWZzaV9zdHJlYW1fcG9wKGZzaSwgaXNfcGxheSk7CiAJCWJyZWFrOwpAQCAtODc2LDYgKzkxMiw4IEBACiBzdGF0aWMgaW50IGZzaV9kYWlfc2V0X2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgdW5zaWduZWQgaW50IGZtdCkKIHsKIAlzdHJ1Y3QgZnNpX3ByaXYgKmZzaSA9IGZzaV9nZXRfcHJpdl9mcm1fZGFpKGRhaSk7CisJc3RydWN0IGZzaV9tYXN0ZXIgKm1hc3RlciA9IGZzaV9nZXRfbWFzdGVyKGZzaSk7CisJc2V0X3JhdGVfZnVuYyBzZXRfcmF0ZSA9IGZzaV9nZXRfaW5mb19zZXRfcmF0ZShtYXN0ZXIpOwogCXUzMiBmbGFncyA9IGZzaV9nZXRfaW5mb19mbGFncyhmc2kpOwogCXUzMiBkYXRhID0gMDsKIAlpbnQgcmV0OwpAQCAtODg2LDYgKzkyNCw3IEBACiAJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgewogCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKIAkJZGF0YSA9IERJTUQgfCBET01EOworCQlmc2ktPmNsa19tYXN0ZXIgPSAxOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6CiAJCWJyZWFrOwpAQCAtODkzLDYgKzkzMiwxMyBAQAogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIHNldF9mbXRfZXhpdDsKIAl9CisKKwlpZiAoZnNpX2lzX2Nsa19tYXN0ZXIoZnNpKSAmJiAhc2V0X3JhdGUpIHsKKwkJZGV2X2VycihkYWktPmRldiwgInBsYXRmb3JtIGRvZXNuJ3QgaGF2ZSBzZXRfcmF0ZVxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gc2V0X2ZtdF9leGl0OworCX0KKwogCWZzaV9yZWdfbWFza19zZXQoZnNpLCBDS0cxLCAoRElNRCB8IERPTUQpLCBkYXRhKTsKIAogCS8qIHNldCBmb3JtYXQgKi8KQEAgLTkxOSwxMyArOTY1LDEyIEBACiB7CiAJc3RydWN0IGZzaV9wcml2ICpmc2kgPSBmc2lfZ2V0X3ByaXYoc3Vic3RyZWFtKTsKIAlzdHJ1Y3QgZnNpX21hc3RlciAqbWFzdGVyID0gZnNpX2dldF9tYXN0ZXIoZnNpKTsKLQlzZXRfcmF0ZV9mdW5jIHNldF9yYXRlOworCXNldF9yYXRlX2Z1bmMgc2V0X3JhdGUgPSBmc2lfZ2V0X2luZm9fc2V0X3JhdGUobWFzdGVyKTsKIAlpbnQgZnNpX3ZlciA9IG1hc3Rlci0+Y29yZS0+dmVyOwogCWxvbmcgcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CiAJaW50IHJldDsKIAotCXNldF9yYXRlID0gZnNpX2dldF9pbmZvX3NldF9yYXRlKG1hc3Rlcik7Ci0JaWYgKCFzZXRfcmF0ZSkKKwlpZiAoIWZzaV9pc19jbGtfbWFzdGVyKGZzaSkpCiAJCXJldHVybiAwOwogCiAJcmV0ID0gc2V0X3JhdGUoZGFpLT5kZXYsIGZzaV9pc19wb3J0X2EoZnNpKSwgcmF0ZSwgMSk7CkBAIC05ODcsNyArMTAzMiw2IEBACiAKIAkJZnNpX3JlZ19tYXNrX3NldChmc2ksIENLRzEsIChBQ0tNRF9NQVNLIHwgQlBGTURfTUFTSykgLCBkYXRhKTsKIAkJdWRlbGF5KDEwKTsKLQkJZnNpX2Nsa19jdHJsKGZzaSwgMSk7CiAJCXJldCA9IDA7CiAJfQogCkBAIC0xMjAyLDkgKzEyNDYsNyBAQAogCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOwogCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBtYXN0ZXIpOwogCi0JcG1fcnVudGltZV9nZXRfc3luYygmcGRldi0+ZGV2KTsKLQlmc2lfc29mdF9hbGxfcmVzZXQobWFzdGVyKTsKLQlwbV9ydW50aW1lX3B1dF9zeW5jKCZwZGV2LT5kZXYpOworCWZzaV9tb2R1bGVfaW5pdChtYXN0ZXIsICZwZGV2LT5kZXYpOwogCiAJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCAmZnNpX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwKIAkJCSAgaWRfZW50cnktPm5hbWUsIG1hc3Rlcik7CkBAIC0xMjQ4LDYgKzEyOTAsOCBAQAogCiAJbWFzdGVyID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOwogCisJZnNpX21vZHVsZV9raWxsKG1hc3RlciwgJnBkZXYtPmRldik7CisKIAlmcmVlX2lycShtYXN0ZXItPmlycSwgbWFzdGVyKTsKIAlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CiAKQEAgLTEyNjAsNiArMTMwNCw4MiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBfX2ZzaV9zdXNwZW5kKHN0cnVjdCBmc2lfcHJpdiAqZnNpLAorCQkJICBzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgIHNldF9yYXRlX2Z1bmMgc2V0X3JhdGUpCit7CisJZnNpLT5zYXZlZF9kb19mbXQJPSBmc2lfcmVnX3JlYWQoZnNpLCBET19GTVQpOworCWZzaS0+c2F2ZWRfZGlfZm10CT0gZnNpX3JlZ19yZWFkKGZzaSwgRElfRk1UKTsKKwlmc2ktPnNhdmVkX2NrZzEJCT0gZnNpX3JlZ19yZWFkKGZzaSwgQ0tHMSk7CisJZnNpLT5zYXZlZF9ja2cyCQk9IGZzaV9yZWdfcmVhZChmc2ksIENLRzIpOworCWZzaS0+c2F2ZWRfb3V0X3NlbAk9IGZzaV9yZWdfcmVhZChmc2ksIE9VVF9TRUwpOworCisJaWYgKGZzaV9pc19jbGtfbWFzdGVyKGZzaSkpCisJCXNldF9yYXRlKGRldiwgZnNpX2lzX3BvcnRfYShmc2kpLCBmc2ktPnJhdGUsIDApOworfQorCitzdGF0aWMgdm9pZCBfX2ZzaV9yZXN1bWUoc3RydWN0IGZzaV9wcml2ICpmc2ksCisJCQkgc3RydWN0IGRldmljZSAqZGV2LAorCQkJIHNldF9yYXRlX2Z1bmMgc2V0X3JhdGUpCit7CisJZnNpX3JlZ193cml0ZShmc2ksIERPX0ZNVCwJZnNpLT5zYXZlZF9kb19mbXQpOworCWZzaV9yZWdfd3JpdGUoZnNpLCBESV9GTVQsCWZzaS0+c2F2ZWRfZGlfZm10KTsKKwlmc2lfcmVnX3dyaXRlKGZzaSwgQ0tHMSwJZnNpLT5zYXZlZF9ja2cxKTsKKwlmc2lfcmVnX3dyaXRlKGZzaSwgQ0tHMiwJZnNpLT5zYXZlZF9ja2cyKTsKKwlmc2lfcmVnX3dyaXRlKGZzaSwgT1VUX1NFTCwJZnNpLT5zYXZlZF9vdXRfc2VsKTsKKworCWlmIChmc2lfaXNfY2xrX21hc3Rlcihmc2kpKQorCQlzZXRfcmF0ZShkZXYsIGZzaV9pc19wb3J0X2EoZnNpKSwgZnNpLT5yYXRlLCAxKTsKK30KKworc3RhdGljIGludCBmc2lfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGZzaV9tYXN0ZXIgKm1hc3RlciA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXNldF9yYXRlX2Z1bmMgc2V0X3JhdGUgPSBmc2lfZ2V0X2luZm9fc2V0X3JhdGUobWFzdGVyKTsKKworCXBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2KTsKKworCV9fZnNpX3N1c3BlbmQoJm1hc3Rlci0+ZnNpYSwgZGV2LCBzZXRfcmF0ZSk7CisJX19mc2lfc3VzcGVuZCgmbWFzdGVyLT5mc2liLCBkZXYsIHNldF9yYXRlKTsKKworCW1hc3Rlci0+c2F2ZWRfYV9tY2xrCT0gZnNpX2NvcmVfcmVhZChtYXN0ZXIsIGFfbWNsayk7CisJbWFzdGVyLT5zYXZlZF9iX21jbGsJPSBmc2lfY29yZV9yZWFkKG1hc3RlciwgYl9tY2xrKTsKKwltYXN0ZXItPnNhdmVkX2llbXNrCT0gZnNpX2NvcmVfcmVhZChtYXN0ZXIsIGllbXNrKTsKKwltYXN0ZXItPnNhdmVkX2ltc2sJPSBmc2lfY29yZV9yZWFkKG1hc3RlciwgaW1zayk7CisJbWFzdGVyLT5zYXZlZF9jbGtfcnN0CT0gZnNpX21hc3Rlcl9yZWFkKG1hc3RlciwgQ0xLX1JTVCk7CisJbWFzdGVyLT5zYXZlZF9zb2Z0X3JzdAk9IGZzaV9tYXN0ZXJfcmVhZChtYXN0ZXIsIFNPRlRfUlNUKTsKKworCWZzaV9tb2R1bGVfa2lsbChtYXN0ZXIsIGRldik7CisKKwlwbV9ydW50aW1lX3B1dF9zeW5jKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmc2lfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZnNpX21hc3RlciAqbWFzdGVyID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc2V0X3JhdGVfZnVuYyBzZXRfcmF0ZSA9IGZzaV9nZXRfaW5mb19zZXRfcmF0ZShtYXN0ZXIpOworCisJcG1fcnVudGltZV9nZXRfc3luYyhkZXYpOworCisJZnNpX21vZHVsZV9pbml0KG1hc3RlciwgZGV2KTsKKworCWZzaV9tYXN0ZXJfbWFza19zZXQobWFzdGVyLCBTT0ZUX1JTVCwgMHhmZmZmLCBtYXN0ZXItPnNhdmVkX3NvZnRfcnN0KTsKKwlmc2lfbWFzdGVyX21hc2tfc2V0KG1hc3RlciwgQ0xLX1JTVCwgMHhmZmZmLCBtYXN0ZXItPnNhdmVkX2Nsa19yc3QpOworCWZzaV9jb3JlX21hc2tfc2V0KG1hc3RlciwgYV9tY2xrLCAweGZmZmYsIG1hc3Rlci0+c2F2ZWRfYV9tY2xrKTsKKwlmc2lfY29yZV9tYXNrX3NldChtYXN0ZXIsIGJfbWNsaywgMHhmZmZmLCBtYXN0ZXItPnNhdmVkX2JfbWNsayk7CisJZnNpX2NvcmVfbWFza19zZXQobWFzdGVyLCBpZW1zaywgMHhmZmZmLCBtYXN0ZXItPnNhdmVkX2llbXNrKTsKKwlmc2lfY29yZV9tYXNrX3NldChtYXN0ZXIsIGltc2ssIDB4ZmZmZiwgbWFzdGVyLT5zYXZlZF9pbXNrKTsKKworCV9fZnNpX3Jlc3VtZSgmbWFzdGVyLT5mc2lhLCBkZXYsIHNldF9yYXRlKTsKKwlfX2ZzaV9yZXN1bWUoJm1hc3Rlci0+ZnNpYiwgZGV2LCBzZXRfcmF0ZSk7CisKKwlwbV9ydW50aW1lX3B1dF9zeW5jKGRldik7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBmc2lfcnVudGltZV9ub3Aoc3RydWN0IGRldmljZSAqZGV2KQogewogCS8qIFJ1bnRpbWUgUE0gY2FsbGJhY2sgc2hhcmVkIGJldHdlZW4gLT5ydW50aW1lX3N1c3BlbmQoKQpAQCAtMTI3Myw2ICsxMzkzLDggQEAKIH0KIAogc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIGZzaV9wbV9vcHMgPSB7CisJLnN1c3BlbmQJCT0gZnNpX3N1c3BlbmQsCisJLnJlc3VtZQkJCT0gZnNpX3Jlc3VtZSwKIAkucnVudGltZV9zdXNwZW5kCT0gZnNpX3J1bnRpbWVfbm9wLAogCS5ydW50aW1lX3Jlc3VtZQkJPSBmc2lfcnVudGltZV9ub3AsCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1jYWNoZS5jIGIvc291bmQvc29jL3NvYy1jYWNoZS5jCmluZGV4IDVkNzZkYTQuLjA2YjdiODEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtY2FjaGUuYworKysgYi9zb3VuZC9zb2Mvc29jLWNhY2hlLmMKQEAgLTIwLDQwICsyMCwyOCBAQAogCiAjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL2Fzb2MuaD4KIAotc3RhdGljIHVuc2lnbmVkIGludCBzbmRfc29jXzRfMTJfcmVhZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgcmVnKQorI2lmZGVmIENPTkZJR19TUElfTUFTVEVSCitzdGF0aWMgaW50IGRvX3NwaV93cml0ZSh2b2lkICpjb250cm9sLCBjb25zdCBjaGFyICpkYXRhLCBpbnQgbGVuKQogeworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBjb250cm9sOwogCWludCByZXQ7Ci0JdW5zaWduZWQgaW50IHZhbDsKIAotCWlmIChyZWcgPj0gY29kZWMtPmRyaXZlci0+cmVnX2NhY2hlX3NpemUgfHwKLQkJc25kX3NvY19jb2RlY192b2xhdGlsZV9yZWdpc3Rlcihjb2RlYywgcmVnKSB8fAotCQljb2RlYy0+Y2FjaGVfYnlwYXNzKSB7Ci0JCQlpZiAoY29kZWMtPmNhY2hlX29ubHkpCi0JCQkJcmV0dXJuIC0xOwotCi0JCQlCVUdfT04oIWNvZGVjLT5od19yZWFkKTsKLQkJCXJldHVybiBjb2RlYy0+aHdfcmVhZChjb2RlYywgcmVnKTsKLQl9Ci0KLQlyZXQgPSBzbmRfc29jX2NhY2hlX3JlYWQoY29kZWMsIHJlZywgJnZhbCk7CisJcmV0ID0gc3BpX3dyaXRlKHNwaSwgZGF0YSwgbGVuKTsKIAlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIC0xOwotCXJldHVybiB2YWw7CisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gbGVuOwogfQorI2VuZGlmCiAKLXN0YXRpYyBpbnQgc25kX3NvY180XzEyX3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKLQkJCSAgICAgdW5zaWduZWQgaW50IHZhbHVlKQorc3RhdGljIGludCBkb19od193cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgdmFsdWUsIGNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4pCiB7Ci0JdTggZGF0YVsyXTsKIAlpbnQgcmV0OwogCi0JZGF0YVswXSA9IChyZWcgPDwgNCkgfCAoKHZhbHVlID4+IDgpICYgMHgwMDBmKTsKLQlkYXRhWzFdID0gdmFsdWUgJiAweDAwZmY7Ci0KIAlpZiAoIXNuZF9zb2NfY29kZWNfdm9sYXRpbGVfcmVnaXN0ZXIoY29kZWMsIHJlZykgJiYKLQkJcmVnIDwgY29kZWMtPmRyaXZlci0+cmVnX2NhY2hlX3NpemUgJiYKLQkJIWNvZGVjLT5jYWNoZV9ieXBhc3MpIHsKKwkgICAgcmVnIDwgY29kZWMtPmRyaXZlci0+cmVnX2NhY2hlX3NpemUgJiYKKwkgICAgIWNvZGVjLT5jYWNoZV9ieXBhc3MpIHsKIAkJcmV0ID0gc25kX3NvY19jYWNoZV93cml0ZShjb2RlYywgcmVnLCB2YWx1ZSk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIC0xOwpAQCAtNjQsOCArNTIsOCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlyZXQgPSBjb2RlYy0+aHdfd3JpdGUoY29kZWMtPmNvbnRyb2xfZGF0YSwgZGF0YSwgMik7Ci0JaWYgKHJldCA9PSAyKQorCXJldCA9IGNvZGVjLT5od193cml0ZShjb2RlYy0+Y29udHJvbF9kYXRhLCBkYXRhLCBsZW4pOworCWlmIChyZXQgPT0gbGVuKQogCQlyZXR1cm4gMDsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKQEAgLTczLDIzMiArNjEsNyBAQAogCQlyZXR1cm4gLUVJTzsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCi1zdGF0aWMgaW50IHNuZF9zb2NfNF8xMl9zcGlfd3JpdGUodm9pZCAqY29udHJvbF9kYXRhLCBjb25zdCBjaGFyICpkYXRhLAotCQkJCSBpbnQgbGVuKQotewotCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBjb250cm9sX2RhdGE7Ci0Jc3RydWN0IHNwaV90cmFuc2ZlciB0OwotCXN0cnVjdCBzcGlfbWVzc2FnZSBtOwotCXU4IG1zZ1syXTsKLQotCWlmIChsZW4gPD0gMCkKLQkJcmV0dXJuIDA7Ci0KLQltc2dbMF0gPSBkYXRhWzFdOwotCW1zZ1sxXSA9IGRhdGFbMF07Ci0KLQlzcGlfbWVzc2FnZV9pbml0KCZtKTsKLQltZW1zZXQoJnQsIDAsIHNpemVvZiB0KTsKLQotCXQudHhfYnVmID0gJm1zZ1swXTsKLQl0LmxlbiA9IGxlbjsKLQotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0LCAmbSk7Ci0Jc3BpX3N5bmMoc3BpLCAmbSk7Ci0KLQlyZXR1cm4gbGVuOwotfQotI2Vsc2UKLSNkZWZpbmUgc25kX3NvY180XzEyX3NwaV93cml0ZSBOVUxMCi0jZW5kaWYKLQotc3RhdGljIHVuc2lnbmVkIGludCBzbmRfc29jXzdfOV9yZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKLQkJCQkgICAgIHVuc2lnbmVkIGludCByZWcpCi17Ci0JaW50IHJldDsKLQl1bnNpZ25lZCBpbnQgdmFsOwotCi0JaWYgKHJlZyA+PSBjb2RlYy0+ZHJpdmVyLT5yZWdfY2FjaGVfc2l6ZSB8fAotCQlzbmRfc29jX2NvZGVjX3ZvbGF0aWxlX3JlZ2lzdGVyKGNvZGVjLCByZWcpIHx8Ci0JCWNvZGVjLT5jYWNoZV9ieXBhc3MpIHsKLQkJCWlmIChjb2RlYy0+Y2FjaGVfb25seSkKLQkJCQlyZXR1cm4gLTE7Ci0KLQkJCUJVR19PTighY29kZWMtPmh3X3JlYWQpOwotCQkJcmV0dXJuIGNvZGVjLT5od19yZWFkKGNvZGVjLCByZWcpOwotCX0KLQotCXJldCA9IHNuZF9zb2NfY2FjaGVfcmVhZChjb2RlYywgcmVnLCAmdmFsKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIC0xOwotCXJldHVybiB2YWw7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3NvY183Xzlfd3JpdGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnLAotCQkJICAgICB1bnNpZ25lZCBpbnQgdmFsdWUpCi17Ci0JdTggZGF0YVsyXTsKLQlpbnQgcmV0OwotCi0JZGF0YVswXSA9IChyZWcgPDwgMSkgfCAoKHZhbHVlID4+IDgpICYgMHgwMDAxKTsKLQlkYXRhWzFdID0gdmFsdWUgJiAweDAwZmY7Ci0KLQlpZiAoIXNuZF9zb2NfY29kZWNfdm9sYXRpbGVfcmVnaXN0ZXIoY29kZWMsIHJlZykgJiYKLQkJcmVnIDwgY29kZWMtPmRyaXZlci0+cmVnX2NhY2hlX3NpemUgJiYKLQkJIWNvZGVjLT5jYWNoZV9ieXBhc3MpIHsKLQkJcmV0ID0gc25kX3NvY19jYWNoZV93cml0ZShjb2RlYywgcmVnLCB2YWx1ZSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIC0xOwotCX0KLQotCWlmIChjb2RlYy0+Y2FjaGVfb25seSkgewotCQljb2RlYy0+Y2FjaGVfc3luYyA9IDE7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldCA9IGNvZGVjLT5od193cml0ZShjb2RlYy0+Y29udHJvbF9kYXRhLCBkYXRhLCAyKTsKLQlpZiAocmV0ID09IDIpCi0JCXJldHVybiAwOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCWVsc2UKLQkJcmV0dXJuIC1FSU87Ci19Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQotc3RhdGljIGludCBzbmRfc29jXzdfOV9zcGlfd3JpdGUodm9pZCAqY29udHJvbF9kYXRhLCBjb25zdCBjaGFyICpkYXRhLAotCQkJCSBpbnQgbGVuKQotewotCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBjb250cm9sX2RhdGE7Ci0Jc3RydWN0IHNwaV90cmFuc2ZlciB0OwotCXN0cnVjdCBzcGlfbWVzc2FnZSBtOwotCXU4IG1zZ1syXTsKLQotCWlmIChsZW4gPD0gMCkKLQkJcmV0dXJuIDA7Ci0KLQltc2dbMF0gPSBkYXRhWzBdOwotCW1zZ1sxXSA9IGRhdGFbMV07Ci0KLQlzcGlfbWVzc2FnZV9pbml0KCZtKTsKLQltZW1zZXQoJnQsIDAsIHNpemVvZiB0KTsKLQotCXQudHhfYnVmID0gJm1zZ1swXTsKLQl0LmxlbiA9IGxlbjsKLQotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0LCAmbSk7Ci0Jc3BpX3N5bmMoc3BpLCAmbSk7Ci0KLQlyZXR1cm4gbGVuOwotfQotI2Vsc2UKLSNkZWZpbmUgc25kX3NvY183Xzlfc3BpX3dyaXRlIE5VTEwKLSNlbmRpZgotCi1zdGF0aWMgaW50IHNuZF9zb2NfOF84X3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKLQkJCSAgICAgdW5zaWduZWQgaW50IHZhbHVlKQotewotCXU4IGRhdGFbMl07Ci0JaW50IHJldDsKLQotCXJlZyAmPSAweGZmOwotCWRhdGFbMF0gPSByZWc7Ci0JZGF0YVsxXSA9IHZhbHVlICYgMHhmZjsKLQotCWlmICghc25kX3NvY19jb2RlY192b2xhdGlsZV9yZWdpc3Rlcihjb2RlYywgcmVnKSAmJgotCQlyZWcgPCBjb2RlYy0+ZHJpdmVyLT5yZWdfY2FjaGVfc2l6ZSAmJgotCQkhY29kZWMtPmNhY2hlX2J5cGFzcykgewotCQlyZXQgPSBzbmRfc29jX2NhY2hlX3dyaXRlKGNvZGVjLCByZWcsIHZhbHVlKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gLTE7Ci0JfQotCi0JaWYgKGNvZGVjLT5jYWNoZV9vbmx5KSB7Ci0JCWNvZGVjLT5jYWNoZV9zeW5jID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKGNvZGVjLT5od193cml0ZShjb2RlYy0+Y29udHJvbF9kYXRhLCBkYXRhLCAyKSA9PSAyKQotCQlyZXR1cm4gMDsKLQllbHNlCi0JCXJldHVybiAtRUlPOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHNuZF9zb2NfOF84X3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAotCQkJCSAgICAgdW5zaWduZWQgaW50IHJlZykKLXsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGludCB2YWw7Ci0KLQlyZWcgJj0gMHhmZjsKLQlpZiAocmVnID49IGNvZGVjLT5kcml2ZXItPnJlZ19jYWNoZV9zaXplIHx8Ci0JCXNuZF9zb2NfY29kZWNfdm9sYXRpbGVfcmVnaXN0ZXIoY29kZWMsIHJlZykgfHwKLQkJY29kZWMtPmNhY2hlX2J5cGFzcykgewotCQkJaWYgKGNvZGVjLT5jYWNoZV9vbmx5KQotCQkJCXJldHVybiAtMTsKLQotCQkJQlVHX09OKCFjb2RlYy0+aHdfcmVhZCk7Ci0JCQlyZXR1cm4gY29kZWMtPmh3X3JlYWQoY29kZWMsIHJlZyk7Ci0JfQotCi0JcmV0ID0gc25kX3NvY19jYWNoZV9yZWFkKGNvZGVjLCByZWcsICZ2YWwpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gLTE7Ci0JcmV0dXJuIHZhbDsKLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCi1zdGF0aWMgaW50IHNuZF9zb2NfOF84X3NwaV93cml0ZSh2b2lkICpjb250cm9sX2RhdGEsIGNvbnN0IGNoYXIgKmRhdGEsCi0JCQkJIGludCBsZW4pCi17Ci0Jc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IGNvbnRyb2xfZGF0YTsKLQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHQ7Ci0Jc3RydWN0IHNwaV9tZXNzYWdlIG07Ci0JdTggbXNnWzJdOwotCi0JaWYgKGxlbiA8PSAwKQotCQlyZXR1cm4gMDsKLQotCW1zZ1swXSA9IGRhdGFbMF07Ci0JbXNnWzFdID0gZGF0YVsxXTsKLQotCXNwaV9tZXNzYWdlX2luaXQoJm0pOwotCW1lbXNldCgmdCwgMCwgc2l6ZW9mIHQpOwotCi0JdC50eF9idWYgPSAmbXNnWzBdOwotCXQubGVuID0gbGVuOwotCi0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZtKTsKLQlzcGlfc3luYyhzcGksICZtKTsKLQotCXJldHVybiBsZW47Ci19Ci0jZWxzZQotI2RlZmluZSBzbmRfc29jXzhfOF9zcGlfd3JpdGUgTlVMTAotI2VuZGlmCi0KLXN0YXRpYyBpbnQgc25kX3NvY184XzE2X3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKLQkJCSAgICAgIHVuc2lnbmVkIGludCB2YWx1ZSkKLXsKLQl1OCBkYXRhWzNdOwotCWludCByZXQ7Ci0KLQlkYXRhWzBdID0gcmVnOwotCWRhdGFbMV0gPSAodmFsdWUgPj4gOCkgJiAweGZmOwotCWRhdGFbMl0gPSB2YWx1ZSAmIDB4ZmY7Ci0KLQlpZiAoIXNuZF9zb2NfY29kZWNfdm9sYXRpbGVfcmVnaXN0ZXIoY29kZWMsIHJlZykgJiYKLQkJcmVnIDwgY29kZWMtPmRyaXZlci0+cmVnX2NhY2hlX3NpemUgJiYKLQkJIWNvZGVjLT5jYWNoZV9ieXBhc3MpIHsKLQkJcmV0ID0gc25kX3NvY19jYWNoZV93cml0ZShjb2RlYywgcmVnLCB2YWx1ZSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIC0xOwotCX0KLQotCWlmIChjb2RlYy0+Y2FjaGVfb25seSkgewotCQljb2RlYy0+Y2FjaGVfc3luYyA9IDE7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChjb2RlYy0+aHdfd3JpdGUoY29kZWMtPmNvbnRyb2xfZGF0YSwgZGF0YSwgMykgPT0gMykKLQkJcmV0dXJuIDA7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTzsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBzbmRfc29jXzhfMTZfcmVhZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JCQkJICAgICAgdW5zaWduZWQgaW50IHJlZykKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZG9faHdfcmVhZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcpCiB7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBpbnQgdmFsOwpAQCAtMzE5LDY1ICs4MiwxMTcgQEAKIAlyZXR1cm4gdmFsOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKLXN0YXRpYyBpbnQgc25kX3NvY184XzE2X3NwaV93cml0ZSh2b2lkICpjb250cm9sX2RhdGEsIGNvbnN0IGNoYXIgKmRhdGEsCi0JCQkJIGludCBsZW4pCitzdGF0aWMgdW5zaWduZWQgaW50IHNuZF9zb2NfNF8xMl9yZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgcmVnKQogewotCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBjb250cm9sX2RhdGE7Ci0Jc3RydWN0IHNwaV90cmFuc2ZlciB0OwotCXN0cnVjdCBzcGlfbWVzc2FnZSBtOwotCXU4IG1zZ1szXTsKLQotCWlmIChsZW4gPD0gMCkKLQkJcmV0dXJuIDA7Ci0KLQltc2dbMF0gPSBkYXRhWzBdOwotCW1zZ1sxXSA9IGRhdGFbMV07Ci0JbXNnWzJdID0gZGF0YVsyXTsKLQotCXNwaV9tZXNzYWdlX2luaXQoJm0pOwotCW1lbXNldCgmdCwgMCwgc2l6ZW9mIHQpOwotCi0JdC50eF9idWYgPSAmbXNnWzBdOwotCXQubGVuID0gbGVuOwotCi0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZtKTsKLQlzcGlfc3luYyhzcGksICZtKTsKLQotCXJldHVybiBsZW47CisJcmV0dXJuIGRvX2h3X3JlYWQoY29kZWMsIHJlZyk7CiB9Ci0jZWxzZQotI2RlZmluZSBzbmRfc29jXzhfMTZfc3BpX3dyaXRlIE5VTEwKLSNlbmRpZgorCitzdGF0aWMgaW50IHNuZF9zb2NfNF8xMl93cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJdTE2IGRhdGE7CisKKwlkYXRhID0gY3B1X3RvX2JlMTYoKHJlZyA8PCAxMikgfCAodmFsdWUgJiAweGZmZmZmZikpOworCisJcmV0dXJuIGRvX2h3X3dyaXRlKGNvZGVjLCByZWcsIHZhbHVlLCAmZGF0YSwgMik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc25kX3NvY183XzlfcmVhZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgcmVnKQoreworCXJldHVybiBkb19od19yZWFkKGNvZGVjLCByZWcpOworfQorCitzdGF0aWMgaW50IHNuZF9zb2NfN185X3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKKwkJCSAgICAgdW5zaWduZWQgaW50IHZhbHVlKQoreworCXU4IGRhdGFbMl07CisKKwlkYXRhWzBdID0gKHJlZyA8PCAxKSB8ICgodmFsdWUgPj4gOCkgJiAweDAwMDEpOworCWRhdGFbMV0gPSB2YWx1ZSAmIDB4MDBmZjsKKworCXJldHVybiBkb19od193cml0ZShjb2RlYywgcmVnLCB2YWx1ZSwgZGF0YSwgMik7Cit9CisKK3N0YXRpYyBpbnQgc25kX3NvY184Xzhfd3JpdGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnLAorCQkJICAgICB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJdTggZGF0YVsyXTsKKworCXJlZyAmPSAweGZmOworCWRhdGFbMF0gPSByZWc7CisJZGF0YVsxXSA9IHZhbHVlICYgMHhmZjsKKworCXJldHVybiBkb19od193cml0ZShjb2RlYywgcmVnLCB2YWx1ZSwgZGF0YSwgMik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc25kX3NvY184XzhfcmVhZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgcmVnKQoreworCXJldHVybiBkb19od19yZWFkKGNvZGVjLCByZWcpOworfQorCitzdGF0aWMgaW50IHNuZF9zb2NfOF8xNl93cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJdTggZGF0YVszXTsKKworCWRhdGFbMF0gPSByZWc7CisJZGF0YVsxXSA9ICh2YWx1ZSA+PiA4KSAmIDB4ZmY7CisJZGF0YVsyXSA9IHZhbHVlICYgMHhmZjsKKworCXJldHVybiBkb19od193cml0ZShjb2RlYywgcmVnLCB2YWx1ZSwgZGF0YSwgMyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc25kX3NvY184XzE2X3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCByZWcpCit7CisJcmV0dXJuIGRvX2h3X3JlYWQoY29kZWMsIHJlZyk7Cit9CiAKICNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IChkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCi1zdGF0aWMgdW5zaWduZWQgaW50IHNuZF9zb2NfOF84X3JlYWRfaTJjKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKLQkJCQkJICB1bnNpZ25lZCBpbnQgcikKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZG9faTJjX3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCXZvaWQgKnJlZywgaW50IHJlZ2xlbiwKKwkJCQl2b2lkICpkYXRhLCBpbnQgZGF0YWxlbikKIHsKIAlzdHJ1Y3QgaTJjX21zZyB4ZmVyWzJdOwotCXU4IHJlZyA9IHI7Ci0JdTggZGF0YTsKIAlpbnQgcmV0OwogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBjb2RlYy0+Y29udHJvbF9kYXRhOwogCiAJLyogV3JpdGUgcmVnaXN0ZXIgKi8KIAl4ZmVyWzBdLmFkZHIgPSBjbGllbnQtPmFkZHI7CiAJeGZlclswXS5mbGFncyA9IDA7Ci0JeGZlclswXS5sZW4gPSAxOwotCXhmZXJbMF0uYnVmID0gJnJlZzsKKwl4ZmVyWzBdLmxlbiA9IHJlZ2xlbjsKKwl4ZmVyWzBdLmJ1ZiA9IHJlZzsKIAogCS8qIFJlYWQgZGF0YSAqLwogCXhmZXJbMV0uYWRkciA9IGNsaWVudC0+YWRkcjsKIAl4ZmVyWzFdLmZsYWdzID0gSTJDX01fUkQ7Ci0JeGZlclsxXS5sZW4gPSAxOwotCXhmZXJbMV0uYnVmID0gJmRhdGE7CisJeGZlclsxXS5sZW4gPSBkYXRhbGVuOworCXhmZXJbMV0uYnVmID0gZGF0YTsKIAogCXJldCA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIHhmZXIsIDIpOwotCWlmIChyZXQgIT0gMikgewotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImkyY190cmFuc2ZlcigpIHJldHVybmVkICVkXG4iLCByZXQpOworCWlmIChyZXQgPT0gMikKIAkJcmV0dXJuIDA7Ci0JfQorCWVsc2UgaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJZWxzZQorCQlyZXR1cm4gLUVJTzsKK30KKyNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCAoZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQorc3RhdGljIHVuc2lnbmVkIGludCBzbmRfc29jXzhfOF9yZWFkX2kyYyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJCSB1bnNpZ25lZCBpbnQgcikKK3sKKwl1OCByZWcgPSByOworCXU4IGRhdGE7CisJaW50IHJldDsKKworCXJldCA9IGRvX2kyY19yZWFkKGNvZGVjLCAmcmVnLCAxLCAmZGF0YSwgMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAwOwogCXJldHVybiBkYXRhOwogfQogI2Vsc2UKQEAgLTM4OCwzMCArMjAzLDEzIEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHNuZF9zb2NfOF8xNl9yZWFkX2kyYyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCiAJCQkJCSAgdW5zaWduZWQgaW50IHIpCiB7Ci0Jc3RydWN0IGkyY19tc2cgeGZlclsyXTsKIAl1OCByZWcgPSByOwogCXUxNiBkYXRhOwogCWludCByZXQ7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGNvZGVjLT5jb250cm9sX2RhdGE7CiAKLQkvKiBXcml0ZSByZWdpc3RlciAqLwotCXhmZXJbMF0uYWRkciA9IGNsaWVudC0+YWRkcjsKLQl4ZmVyWzBdLmZsYWdzID0gMDsKLQl4ZmVyWzBdLmxlbiA9IDE7Ci0JeGZlclswXS5idWYgPSAmcmVnOwotCi0JLyogUmVhZCBkYXRhICovCi0JeGZlclsxXS5hZGRyID0gY2xpZW50LT5hZGRyOwotCXhmZXJbMV0uZmxhZ3MgPSBJMkNfTV9SRDsKLQl4ZmVyWzFdLmxlbiA9IDI7Ci0JeGZlclsxXS5idWYgPSAodTggKikmZGF0YTsKLQotCXJldCA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIHhmZXIsIDIpOwotCWlmIChyZXQgIT0gMikgewotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImkyY190cmFuc2ZlcigpIHJldHVybmVkICVkXG4iLCByZXQpOworCXJldCA9IGRvX2kyY19yZWFkKGNvZGVjLCAmcmVnLCAxLCAmZGF0YSwgMik7CisJaWYgKHJldCA8IDApCiAJCXJldHVybiAwOwotCX0KLQogCXJldHVybiAoZGF0YSA+PiA4KSB8ICgoZGF0YSAmIDB4ZmYpIDw8IDgpOwogfQogI2Vsc2UKQEAgLTQyMiwzMCArMjIwLDEzIEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHNuZF9zb2NfMTZfOF9yZWFkX2kyYyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCiAJCQkJCSAgdW5zaWduZWQgaW50IHIpCiB7Ci0Jc3RydWN0IGkyY19tc2cgeGZlclsyXTsKIAl1MTYgcmVnID0gcjsKIAl1OCBkYXRhOwogCWludCByZXQ7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGNvZGVjLT5jb250cm9sX2RhdGE7CiAKLQkvKiBXcml0ZSByZWdpc3RlciAqLwotCXhmZXJbMF0uYWRkciA9IGNsaWVudC0+YWRkcjsKLQl4ZmVyWzBdLmZsYWdzID0gMDsKLQl4ZmVyWzBdLmxlbiA9IDI7Ci0JeGZlclswXS5idWYgPSAodTggKikmcmVnOwotCi0JLyogUmVhZCBkYXRhICovCi0JeGZlclsxXS5hZGRyID0gY2xpZW50LT5hZGRyOwotCXhmZXJbMV0uZmxhZ3MgPSBJMkNfTV9SRDsKLQl4ZmVyWzFdLmxlbiA9IDE7Ci0JeGZlclsxXS5idWYgPSAmZGF0YTsKLQotCXJldCA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIHhmZXIsIDIpOwotCWlmIChyZXQgIT0gMikgewotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImkyY190cmFuc2ZlcigpIHJldHVybmVkICVkXG4iLCByZXQpOworCXJldCA9IGRvX2kyY19yZWFkKGNvZGVjLCAmcmVnLCAyLCAmZGF0YSwgMSk7CisJaWYgKHJldCA8IDApCiAJCXJldHVybiAwOwotCX0KLQogCXJldHVybiBkYXRhOwogfQogI2Vsc2UKQEAgLTQ1MywxMjAgKzIzNCwzNCBAQAogI2VuZGlmCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc25kX3NvY18xNl84X3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAotCQkJCSAgICAgdW5zaWduZWQgaW50IHJlZykKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgcmVnKQogewotCWludCByZXQ7Ci0JdW5zaWduZWQgaW50IHZhbDsKLQotCXJlZyAmPSAweGZmOwotCWlmIChyZWcgPj0gY29kZWMtPmRyaXZlci0+cmVnX2NhY2hlX3NpemUgfHwKLQkJc25kX3NvY19jb2RlY192b2xhdGlsZV9yZWdpc3Rlcihjb2RlYywgcmVnKSB8fAotCQljb2RlYy0+Y2FjaGVfYnlwYXNzKSB7Ci0JCQlpZiAoY29kZWMtPmNhY2hlX29ubHkpCi0JCQkJcmV0dXJuIC0xOwotCi0JCQlCVUdfT04oIWNvZGVjLT5od19yZWFkKTsKLQkJCXJldHVybiBjb2RlYy0+aHdfcmVhZChjb2RlYywgcmVnKTsKLQl9Ci0KLQlyZXQgPSBzbmRfc29jX2NhY2hlX3JlYWQoY29kZWMsIHJlZywgJnZhbCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiAtMTsKLQlyZXR1cm4gdmFsOworCXJldHVybiBkb19od19yZWFkKGNvZGVjLCByZWcpOwogfQogCiBzdGF0aWMgaW50IHNuZF9zb2NfMTZfOF93cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCi0JCQkgICAgIHVuc2lnbmVkIGludCB2YWx1ZSkKKwkJCSAgICAgIHVuc2lnbmVkIGludCB2YWx1ZSkKIHsKIAl1OCBkYXRhWzNdOwotCWludCByZXQ7CiAKIAlkYXRhWzBdID0gKHJlZyA+PiA4KSAmIDB4ZmY7CiAJZGF0YVsxXSA9IHJlZyAmIDB4ZmY7CiAJZGF0YVsyXSA9IHZhbHVlOwogCi0JcmVnICY9IDB4ZmY7Ci0JaWYgKCFzbmRfc29jX2NvZGVjX3ZvbGF0aWxlX3JlZ2lzdGVyKGNvZGVjLCByZWcpICYmCi0JCXJlZyA8IGNvZGVjLT5kcml2ZXItPnJlZ19jYWNoZV9zaXplICYmCi0JCSFjb2RlYy0+Y2FjaGVfYnlwYXNzKSB7Ci0JCXJldCA9IHNuZF9zb2NfY2FjaGVfd3JpdGUoY29kZWMsIHJlZywgdmFsdWUpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiAtMTsKLQl9Ci0KLQlpZiAoY29kZWMtPmNhY2hlX29ubHkpIHsKLQkJY29kZWMtPmNhY2hlX3N5bmMgPSAxOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXQgPSBjb2RlYy0+aHdfd3JpdGUoY29kZWMtPmNvbnRyb2xfZGF0YSwgZGF0YSwgMyk7Ci0JaWYgKHJldCA9PSAzKQotCQlyZXR1cm4gMDsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQllbHNlCi0JCXJldHVybiAtRUlPOworCXJldHVybiBkb19od193cml0ZShjb2RlYywgcmVnLCB2YWx1ZSwgZGF0YSwgMyk7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQotc3RhdGljIGludCBzbmRfc29jXzE2Xzhfc3BpX3dyaXRlKHZvaWQgKmNvbnRyb2xfZGF0YSwgY29uc3QgY2hhciAqZGF0YSwKLQkJCQkgaW50IGxlbikKLXsKLQlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gY29udHJvbF9kYXRhOwotCXN0cnVjdCBzcGlfdHJhbnNmZXIgdDsKLQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKLQl1OCBtc2dbM107Ci0KLQlpZiAobGVuIDw9IDApCi0JCXJldHVybiAwOwotCi0JbXNnWzBdID0gZGF0YVswXTsKLQltc2dbMV0gPSBkYXRhWzFdOwotCW1zZ1syXSA9IGRhdGFbMl07Ci0KLQlzcGlfbWVzc2FnZV9pbml0KCZtKTsKLQltZW1zZXQoJnQsIDAsIHNpemVvZiB0KTsKLQotCXQudHhfYnVmID0gJm1zZ1swXTsKLQl0LmxlbiA9IGxlbjsKLQotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0LCAmbSk7Ci0Jc3BpX3N5bmMoc3BpLCAmbSk7Ci0KLQlyZXR1cm4gbGVuOwotfQotI2Vsc2UKLSNkZWZpbmUgc25kX3NvY18xNl84X3NwaV93cml0ZSBOVUxMCi0jZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgKGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc25kX3NvY18xNl8xNl9yZWFkX2kyYyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCiAJCQkJCSAgIHVuc2lnbmVkIGludCByKQogewotCXN0cnVjdCBpMmNfbXNnIHhmZXJbMl07CiAJdTE2IHJlZyA9IGNwdV90b19iZTE2KHIpOwogCXUxNiBkYXRhOwogCWludCByZXQ7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGNvZGVjLT5jb250cm9sX2RhdGE7CiAKLQkvKiBXcml0ZSByZWdpc3RlciAqLwotCXhmZXJbMF0uYWRkciA9IGNsaWVudC0+YWRkcjsKLQl4ZmVyWzBdLmZsYWdzID0gMDsKLQl4ZmVyWzBdLmxlbiA9IDI7Ci0JeGZlclswXS5idWYgPSAodTggKikmcmVnOwotCi0JLyogUmVhZCBkYXRhICovCi0JeGZlclsxXS5hZGRyID0gY2xpZW50LT5hZGRyOwotCXhmZXJbMV0uZmxhZ3MgPSBJMkNfTV9SRDsKLQl4ZmVyWzFdLmxlbiA9IDI7Ci0JeGZlclsxXS5idWYgPSAodTggKikmZGF0YTsKLQotCXJldCA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIHhmZXIsIDIpOwotCWlmIChyZXQgIT0gMikgewotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImkyY190cmFuc2ZlcigpIHJldHVybmVkICVkXG4iLCByZXQpOworCXJldCA9IGRvX2kyY19yZWFkKGNvZGVjLCAmcmVnLCAyLCAmZGF0YSwgMik7CisJaWYgKHJldCA8IDApCiAJCXJldHVybiAwOwotCX0KLQogCXJldHVybiBiZTE2X3RvX2NwdShkYXRhKTsKIH0KICNlbHNlCkBAIC01NzYsNTIgKzI3MSw1OSBAQAogc3RhdGljIHVuc2lnbmVkIGludCBzbmRfc29jXzE2XzE2X3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmVnKQogewotCWludCByZXQ7Ci0JdW5zaWduZWQgaW50IHZhbDsKLQotCWlmIChyZWcgPj0gY29kZWMtPmRyaXZlci0+cmVnX2NhY2hlX3NpemUgfHwKLQkgICAgc25kX3NvY19jb2RlY192b2xhdGlsZV9yZWdpc3Rlcihjb2RlYywgcmVnKSB8fAotCSAgICBjb2RlYy0+Y2FjaGVfYnlwYXNzKSB7Ci0JCWlmIChjb2RlYy0+Y2FjaGVfb25seSkKLQkJCXJldHVybiAtMTsKLQotCQlCVUdfT04oIWNvZGVjLT5od19yZWFkKTsKLQkJcmV0dXJuIGNvZGVjLT5od19yZWFkKGNvZGVjLCByZWcpOwotCX0KLQotCXJldCA9IHNuZF9zb2NfY2FjaGVfcmVhZChjb2RlYywgcmVnLCAmdmFsKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIC0xOwotCi0JcmV0dXJuIHZhbDsKKwlyZXR1cm4gZG9faHdfcmVhZChjb2RlYywgcmVnKTsKIH0KIAogc3RhdGljIGludCBzbmRfc29jXzE2XzE2X3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgdmFsdWUpCiB7CiAJdTggZGF0YVs0XTsKLQlpbnQgcmV0OwogCiAJZGF0YVswXSA9IChyZWcgPj4gOCkgJiAweGZmOwogCWRhdGFbMV0gPSByZWcgJiAweGZmOwogCWRhdGFbMl0gPSAodmFsdWUgPj4gOCkgJiAweGZmOwogCWRhdGFbM10gPSB2YWx1ZSAmIDB4ZmY7CiAKLQlpZiAoIXNuZF9zb2NfY29kZWNfdm9sYXRpbGVfcmVnaXN0ZXIoY29kZWMsIHJlZykgJiYKLQkJcmVnIDwgY29kZWMtPmRyaXZlci0+cmVnX2NhY2hlX3NpemUgJiYKLQkJIWNvZGVjLT5jYWNoZV9ieXBhc3MpIHsKLQkJcmV0ID0gc25kX3NvY19jYWNoZV93cml0ZShjb2RlYywgcmVnLCB2YWx1ZSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIC0xOworCXJldHVybiBkb19od193cml0ZShjb2RlYywgcmVnLCB2YWx1ZSwgZGF0YSwgNCk7Cit9CisKKy8qIFByaW1pdGl2ZSBidWxrIHdyaXRlIHN1cHBvcnQgZm9yIHNvYy1jYWNoZS4gIFRoZSBkYXRhIHBvaW50ZWQgdG8gYnkKKyAqIGBkYXRhJyBuZWVkcyB0byBhbHJlYWR5IGJlIGluIHRoZSBmb3JtIHRoZSBoYXJkd2FyZSBleHBlY3RzCisgKiBpbmNsdWRpbmcgYW55IGxlYWRpbmcgcmVnaXN0ZXIgc3BlY2lmaWMgZGF0YS4gIEFueSBkYXRhIHdyaXR0ZW4KKyAqIHRocm91Z2ggdGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBnbyB0aHJvdWdoIHRoZSBjYWNoZSBhcyBpdCBvbmx5CisgKiBoYW5kbGVzIHdyaXRpbmcgdG8gdm9sYXRpbGUgb3Igb3V0IG9mIGJvdW5kcyByZWdpc3RlcnMuCisgKi8KK3N0YXRpYyBpbnQgc25kX3NvY19od19idWxrX3dyaXRlX3JhdyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCisJCQkJICAgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQoreworCWludCByZXQ7CisKKwkvKiBUbyBlbnN1cmUgdGhhdCB3ZSBkb24ndCBnZXQgb3V0IG9mIHN5bmMgd2l0aCB0aGUgY2FjaGUsIGNoZWNrCisJICogd2hldGhlciB0aGUgYmFzZSByZWdpc3RlciBpcyB2b2xhdGlsZSBvciBpZiB3ZSd2ZSBkaXJlY3RseSBhc2tlZAorCSAqIHRvIGJ5cGFzcyB0aGUgY2FjaGUuICBPdXQgb2YgYm91bmRzIHJlZ2lzdGVycyBhcmUgY29uc2lkZXJlZAorCSAqIHZvbGF0aWxlLgorCSAqLworCWlmICghY29kZWMtPmNhY2hlX2J5cGFzcworCSAgICAmJiAhc25kX3NvY19jb2RlY192b2xhdGlsZV9yZWdpc3Rlcihjb2RlYywgcmVnKQorCSAgICAmJiByZWcgPCBjb2RlYy0+ZHJpdmVyLT5yZWdfY2FjaGVfc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKGNvZGVjLT5jb250cm9sX3R5cGUpIHsKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IChkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCisJY2FzZSBTTkRfU09DX0kyQzoKKwkJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNvZGVjLT5jb250cm9sX2RhdGEsIGRhdGEsIGxlbik7CisJCWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKKwljYXNlIFNORF9TT0NfU1BJOgorCQlyZXQgPSBzcGlfd3JpdGUoY29kZWMtPmNvbnRyb2xfZGF0YSwgZGF0YSwgbGVuKTsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlCVUcoKTsKIAl9CiAKLQlpZiAoY29kZWMtPmNhY2hlX29ubHkpIHsKLQkJY29kZWMtPmNhY2hlX3N5bmMgPSAxOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXQgPSBjb2RlYy0+aHdfd3JpdGUoY29kZWMtPmNvbnRyb2xfZGF0YSwgZGF0YSwgNCk7Ci0JaWYgKHJldCA9PSA0KQorCWlmIChyZXQgPT0gbGVuKQogCQlyZXR1cm4gMDsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKQEAgLTYyOSw3OSArMzMxLDQwIEBACiAJCXJldHVybiAtRUlPOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKLXN0YXRpYyBpbnQgc25kX3NvY18xNl8xNl9zcGlfd3JpdGUodm9pZCAqY29udHJvbF9kYXRhLCBjb25zdCBjaGFyICpkYXRhLAotCQkJCSBpbnQgbGVuKQotewotCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBjb250cm9sX2RhdGE7Ci0Jc3RydWN0IHNwaV90cmFuc2ZlciB0OwotCXN0cnVjdCBzcGlfbWVzc2FnZSBtOwotCXU4IG1zZ1s0XTsKLQotCWlmIChsZW4gPD0gMCkKLQkJcmV0dXJuIDA7Ci0KLQltc2dbMF0gPSBkYXRhWzBdOwotCW1zZ1sxXSA9IGRhdGFbMV07Ci0JbXNnWzJdID0gZGF0YVsyXTsKLQltc2dbM10gPSBkYXRhWzNdOwotCi0Jc3BpX21lc3NhZ2VfaW5pdCgmbSk7Ci0JbWVtc2V0KCZ0LCAwLCBzaXplb2YgdCk7Ci0KLQl0LnR4X2J1ZiA9ICZtc2dbMF07Ci0JdC5sZW4gPSBsZW47Ci0KLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdCwgJm0pOwotCXNwaV9zeW5jKHNwaSwgJm0pOwotCi0JcmV0dXJuIGxlbjsKLX0KLSNlbHNlCi0jZGVmaW5lIHNuZF9zb2NfMTZfMTZfc3BpX3dyaXRlIE5VTEwKLSNlbmRpZgotCiBzdGF0aWMgc3RydWN0IHsKIAlpbnQgYWRkcl9iaXRzOwogCWludCBkYXRhX2JpdHM7CiAJaW50ICgqd3JpdGUpKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwotCWludCAoKnNwaV93cml0ZSkodm9pZCAqLCBjb25zdCBjaGFyICosIGludCk7CiAJdW5zaWduZWQgaW50ICgqcmVhZCkoc3RydWN0IHNuZF9zb2NfY29kZWMgKiwgdW5zaWduZWQgaW50KTsKIAl1bnNpZ25lZCBpbnQgKCppMmNfcmVhZCkoc3RydWN0IHNuZF9zb2NfY29kZWMgKiwgdW5zaWduZWQgaW50KTsKIH0gaW9fdHlwZXNbXSA9IHsKIAl7CiAJCS5hZGRyX2JpdHMgPSA0LCAuZGF0YV9iaXRzID0gMTIsCiAJCS53cml0ZSA9IHNuZF9zb2NfNF8xMl93cml0ZSwgLnJlYWQgPSBzbmRfc29jXzRfMTJfcmVhZCwKLQkJLnNwaV93cml0ZSA9IHNuZF9zb2NfNF8xMl9zcGlfd3JpdGUsCiAJfSwKIAl7CiAJCS5hZGRyX2JpdHMgPSA3LCAuZGF0YV9iaXRzID0gOSwKIAkJLndyaXRlID0gc25kX3NvY183Xzlfd3JpdGUsIC5yZWFkID0gc25kX3NvY183XzlfcmVhZCwKLQkJLnNwaV93cml0ZSA9IHNuZF9zb2NfN185X3NwaV93cml0ZSwKIAl9LAogCXsKIAkJLmFkZHJfYml0cyA9IDgsIC5kYXRhX2JpdHMgPSA4LAogCQkud3JpdGUgPSBzbmRfc29jXzhfOF93cml0ZSwgLnJlYWQgPSBzbmRfc29jXzhfOF9yZWFkLAogCQkuaTJjX3JlYWQgPSBzbmRfc29jXzhfOF9yZWFkX2kyYywKLQkJLnNwaV93cml0ZSA9IHNuZF9zb2NfOF84X3NwaV93cml0ZSwKIAl9LAogCXsKIAkJLmFkZHJfYml0cyA9IDgsIC5kYXRhX2JpdHMgPSAxNiwKIAkJLndyaXRlID0gc25kX3NvY184XzE2X3dyaXRlLCAucmVhZCA9IHNuZF9zb2NfOF8xNl9yZWFkLAogCQkuaTJjX3JlYWQgPSBzbmRfc29jXzhfMTZfcmVhZF9pMmMsCi0JCS5zcGlfd3JpdGUgPSBzbmRfc29jXzhfMTZfc3BpX3dyaXRlLAogCX0sCiAJewogCQkuYWRkcl9iaXRzID0gMTYsIC5kYXRhX2JpdHMgPSA4LAogCQkud3JpdGUgPSBzbmRfc29jXzE2Xzhfd3JpdGUsIC5yZWFkID0gc25kX3NvY18xNl84X3JlYWQsCiAJCS5pMmNfcmVhZCA9IHNuZF9zb2NfMTZfOF9yZWFkX2kyYywKLQkJLnNwaV93cml0ZSA9IHNuZF9zb2NfMTZfOF9zcGlfd3JpdGUsCiAJfSwKIAl7CiAJCS5hZGRyX2JpdHMgPSAxNiwgLmRhdGFfYml0cyA9IDE2LAogCQkud3JpdGUgPSBzbmRfc29jXzE2XzE2X3dyaXRlLCAucmVhZCA9IHNuZF9zb2NfMTZfMTZfcmVhZCwKIAkJLmkyY19yZWFkID0gc25kX3NvY18xNl8xNl9yZWFkX2kyYywKLQkJLnNwaV93cml0ZSA9IHNuZF9zb2NfMTZfMTZfc3BpX3dyaXRlLAogCX0sCiB9OwogCkBAIC03MDksNyArMzcyLDYgQEAKICAqIHNuZF9zb2NfY29kZWNfc2V0X2NhY2hlX2lvOiBTZXQgdXAgc3RhbmRhcmQgSS9PIGZ1bmN0aW9ucy4KICAqCiAgKiBAY29kZWM6IENPREVDIHRvIGNvbmZpZ3VyZS4KLSAqIEB0eXBlOiBUeXBlIG9mIGNhY2hlLgogICogQGFkZHJfYml0czogTnVtYmVyIG9mIGJpdHMgb2YgcmVnaXN0ZXIgYWRkcmVzcyBkYXRhLgogICogQGRhdGFfYml0czogTnVtYmVyIG9mIGJpdHMgb2YgZGF0YSBwZXIgcmVnaXN0ZXIuCiAgKiBAY29udHJvbDogQ29udHJvbCBidXMgdXNlZC4KQEAgLTc0NCw2ICs0MDYsNyBAQAogCiAJY29kZWMtPndyaXRlID0gaW9fdHlwZXNbaV0ud3JpdGU7CiAJY29kZWMtPnJlYWQgPSBpb190eXBlc1tpXS5yZWFkOworCWNvZGVjLT5idWxrX3dyaXRlX3JhdyA9IHNuZF9zb2NfaHdfYnVsa193cml0ZV9yYXc7CiAKIAlzd2l0Y2ggKGNvbnRyb2wpIHsKIAljYXNlIFNORF9TT0NfQ1VTVE9NOgpAQCAtNzYyLDggKzQyNSw5IEBACiAJCWJyZWFrOwogCiAJY2FzZSBTTkRfU09DX1NQSToKLQkJaWYgKGlvX3R5cGVzW2ldLnNwaV93cml0ZSkKLQkJCWNvZGVjLT5od193cml0ZSA9IGlvX3R5cGVzW2ldLnNwaV93cml0ZTsKKyNpZmRlZiBDT05GSUdfU1BJX01BU1RFUgorCQljb2RlYy0+aHdfd3JpdGUgPSBkb19zcGlfd3JpdGU7CisjZW5kaWYKIAogCQljb2RlYy0+Y29udHJvbF9kYXRhID0gY29udGFpbmVyX29mKGNvZGVjLT5kZXYsCiAJCQkJCQkgICBzdHJ1Y3Qgc3BpX2RldmljZSwKQEAgLTg4OSw2ICs1NTMsOCBAQAogCQlyYm5vZGUgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3Qgc25kX3NvY19yYnRyZWVfbm9kZSwgbm9kZSk7CiAJCWlmIChyYm5vZGUtPnZhbHVlID09IHJibm9kZS0+ZGVmdmFsKQogCQkJY29udGludWU7CisJCVdBUk5fT04oY29kZWMtPndyaXRhYmxlX3JlZ2lzdGVyICYmCisJCQljb2RlYy0+d3JpdGFibGVfcmVnaXN0ZXIoY29kZWMsIHJibm9kZS0+cmVnKSk7CiAJCXJldCA9IHNuZF9zb2NfY2FjaGVfcmVhZChjb2RlYywgcmJub2RlLT5yZWcsICZ2YWwpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKQEAgLTExNDksNiArODE1LDggQEAKIAogCWx6b19ibG9ja3MgPSBjb2RlYy0+cmVnX2NhY2hlOwogCWZvcl9lYWNoX3NldF9iaXQoaSwgbHpvX2Jsb2Nrc1swXS0+c3luY19ibXAsIGx6b19ibG9ja3NbMF0tPnN5bmNfYm1wX25iaXRzKSB7CisJCVdBUk5fT04oY29kZWMtPndyaXRhYmxlX3JlZ2lzdGVyICYmCisJCQljb2RlYy0+d3JpdGFibGVfcmVnaXN0ZXIoY29kZWMsIGkpKTsKIAkJcmV0ID0gc25kX3NvY19jYWNoZV9yZWFkKGNvZGVjLCBpLCAmdmFsKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CkBAIC0xNDA3LDYgKzEwNzUsOCBAQAogCiAJY29kZWNfZHJ2ID0gY29kZWMtPmRyaXZlcjsKIAlmb3IgKGkgPSAwOyBpIDwgY29kZWNfZHJ2LT5yZWdfY2FjaGVfc2l6ZTsgKytpKSB7CisJCVdBUk5fT04oY29kZWMtPndyaXRhYmxlX3JlZ2lzdGVyICYmCisJCQljb2RlYy0+d3JpdGFibGVfcmVnaXN0ZXIoY29kZWMsIGkpKTsKIAkJcmV0ID0gc25kX3NvY19jYWNoZV9yZWFkKGNvZGVjLCBpLCAmdmFsKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CkBAIC0xNTIzLDcgKzExOTMsNyBAQAogCQkJCWNvZGVjLT5jYWNoZV9vcHMtPm5hbWUsIGNvZGVjLT5uYW1lKTsKIAkJcmV0dXJuIGNvZGVjLT5jYWNoZV9vcHMtPmluaXQoY29kZWMpOwogCX0KLQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gLUVOT1NZUzsKIH0KIAogLyoKQEAgLTE1MzgsNyArMTIwOCw3IEBACiAJCQkJY29kZWMtPmNhY2hlX29wcy0+bmFtZSwgY29kZWMtPm5hbWUpOwogCQlyZXR1cm4gY29kZWMtPmNhY2hlX29wcy0+ZXhpdChjb2RlYyk7CiAJfQotCXJldHVybiAtRUlOVkFMOworCXJldHVybiAtRU5PU1lTOwogfQogCiAvKioKQEAgLTE1NjIsNyArMTIzMiw3IEBACiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZjb2RlYy0+Y2FjaGVfcndfbXV0ZXgpOwotCXJldHVybiAtRUlOVkFMOworCXJldHVybiAtRU5PU1lTOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19jYWNoZV9yZWFkKTsKIApAQCAtMTU4Nyw3ICsxMjU3LDcgQEAKIAl9CiAKIAltdXRleF91bmxvY2soJmNvZGVjLT5jYWNoZV9yd19tdXRleCk7Ci0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIC1FTk9TWVM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2NhY2hlX3dyaXRlKTsKIApAQCAtMTYxMCw3ICsxMjgwLDcgQEAKIAl9CiAKIAlpZiAoIWNvZGVjLT5jYWNoZV9vcHMgfHwgIWNvZGVjLT5jYWNoZV9vcHMtPnN5bmMpCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gLUVOT1NZUzsKIAogCWlmIChjb2RlYy0+Y2FjaGVfb3BzLT5uYW1lKQogCQluYW1lID0gY29kZWMtPmNhY2hlX29wcy0+bmFtZTsKQEAgLTE2NzcsMyArMTM0NywxNyBAQAogCXJldHVybiBjb2RlYy0+ZHJpdmVyLT5yZWdfYWNjZXNzX2RlZmF1bHRbaW5kZXhdLnJlYWQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2RlZmF1bHRfcmVhZGFibGVfcmVnaXN0ZXIpOworCitpbnQgc25kX3NvY19kZWZhdWx0X3dyaXRhYmxlX3JlZ2lzdGVyKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgcmVnKQoreworCWludCBpbmRleDsKKworCWlmIChyZWcgPj0gY29kZWMtPmRyaXZlci0+cmVnX2NhY2hlX3NpemUpCisJCXJldHVybiAxOworCWluZGV4ID0gc25kX3NvY19nZXRfcmVnX2FjY2Vzc19pbmRleChjb2RlYywgcmVnKTsKKwlpZiAoaW5kZXggPCAwKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gY29kZWMtPmRyaXZlci0+cmVnX2FjY2Vzc19kZWZhdWx0W2luZGV4XS53cml0ZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfZGVmYXVsdF93cml0YWJsZV9yZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWNvcmUuYyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCmluZGV4IGRkNTVkMTAuLmJiN2NkNTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtY29yZS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCkBAIC0yNDIsNyArMjQyLDcgQEAKIAkJY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAljaGFyIGJ1ZlszMl07Ci0JaW50IGJ1Zl9zaXplOworCXNpemVfdCBidWZfc2l6ZTsKIAljaGFyICpzdGFydCA9IGJ1ZjsKIAl1bnNpZ25lZCBsb25nIHJlZywgdmFsdWU7CiAJaW50IHN0ZXAgPSAxOwpAQCAtMzAyLDEzICszMDIsNyBAQAogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiQVNvQzogRmFpbGVkIHRvIGNyZWF0ZSBjb2RlYyByZWdpc3RlciBkZWJ1Z2ZzIGZpbGVcbiIpOwogCi0JY29kZWMtPmRhcG0uZGVidWdmc19kYXBtID0gZGVidWdmc19jcmVhdGVfZGlyKCJkYXBtIiwKLQkJCQkJCSBjb2RlYy0+ZGVidWdmc19jb2RlY19yb290KTsKLQlpZiAoIWNvZGVjLT5kYXBtLmRlYnVnZnNfZGFwbSkKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIkZhaWxlZCB0byBjcmVhdGUgREFQTSBkZWJ1Z2ZzIGRpcmVjdG9yeVxuIik7Ci0KLQlzbmRfc29jX2RhcG1fZGVidWdmc19pbml0KCZjb2RlYy0+ZGFwbSk7CisJc25kX3NvY19kYXBtX2RlYnVnZnNfaW5pdCgmY29kZWMtPmRhcG0sIGNvZGVjLT5kZWJ1Z2ZzX2NvZGVjX3Jvb3QpOwogfQogCiBzdGF0aWMgdm9pZCBzb2NfY2xlYW51cF9jb2RlY19kZWJ1Z2ZzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKQEAgLTU1NSw3ICs1NDksNyBAQAogCQl9CiAJfQogCi0JaWYgKHBsYXRmb3JtLT5kcml2ZXItPm9wcy0+b3BlbikgeworCWlmIChwbGF0Zm9ybS0+ZHJpdmVyLT5vcHMgJiYgcGxhdGZvcm0tPmRyaXZlci0+b3BzLT5vcGVuKSB7CiAJCXJldCA9IHBsYXRmb3JtLT5kcml2ZXItPm9wcy0+b3BlbihzdWJzdHJlYW0pOwogCQlpZiAocmV0IDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJhc29jOiBjYW4ndCBvcGVuIHBsYXRmb3JtICVzXG4iLCBwbGF0Zm9ybS0+bmFtZSk7CkBAIC02ODUsNyArNjc5LDcgQEAKIAkJY29kZWNfZGFpLT5kcml2ZXItPm9wcy0+c2h1dGRvd24oc3Vic3RyZWFtLCBjb2RlY19kYWkpOwogCiBjb2RlY19kYWlfZXJyOgotCWlmIChwbGF0Zm9ybS0+ZHJpdmVyLT5vcHMtPmNsb3NlKQorCWlmIChwbGF0Zm9ybS0+ZHJpdmVyLT5vcHMgJiYgcGxhdGZvcm0tPmRyaXZlci0+b3BzLT5jbG9zZSkKIAkJcGxhdGZvcm0tPmRyaXZlci0+b3BzLT5jbG9zZShzdWJzdHJlYW0pOwogCiBwbGF0Zm9ybV9lcnI6CkBAIC03NjcsNyArNzYxLDcgQEAKIAlpZiAocnRkLT5kYWlfbGluay0+b3BzICYmIHJ0ZC0+ZGFpX2xpbmstPm9wcy0+c2h1dGRvd24pCiAJCXJ0ZC0+ZGFpX2xpbmstPm9wcy0+c2h1dGRvd24oc3Vic3RyZWFtKTsKIAotCWlmIChwbGF0Zm9ybS0+ZHJpdmVyLT5vcHMtPmNsb3NlKQorCWlmIChwbGF0Zm9ybS0+ZHJpdmVyLT5vcHMgJiYgcGxhdGZvcm0tPmRyaXZlci0+b3BzLT5jbG9zZSkKIAkJcGxhdGZvcm0tPmRyaXZlci0+b3BzLT5jbG9zZShzdWJzdHJlYW0pOwogCWNwdV9kYWktPnJ1bnRpbWUgPSBOVUxMOwogCkBAIC04MTAsNyArODA0LDcgQEAKIAkJfQogCX0KIAotCWlmIChwbGF0Zm9ybS0+ZHJpdmVyLT5vcHMtPnByZXBhcmUpIHsKKwlpZiAocGxhdGZvcm0tPmRyaXZlci0+b3BzICYmIHBsYXRmb3JtLT5kcml2ZXItPm9wcy0+cHJlcGFyZSkgewogCQlyZXQgPSBwbGF0Zm9ybS0+ZHJpdmVyLT5vcHMtPnByZXBhcmUoc3Vic3RyZWFtKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiYXNvYzogcGxhdGZvcm0gcHJlcGFyZSBlcnJvclxuIik7CkBAIC04OTksNyArODkzLDcgQEAKIAkJfQogCX0KIAotCWlmIChwbGF0Zm9ybS0+ZHJpdmVyLT5vcHMtPmh3X3BhcmFtcykgeworCWlmIChwbGF0Zm9ybS0+ZHJpdmVyLT5vcHMgJiYgcGxhdGZvcm0tPmRyaXZlci0+b3BzLT5od19wYXJhbXMpIHsKIAkJcmV0ID0gcGxhdGZvcm0tPmRyaXZlci0+b3BzLT5od19wYXJhbXMoc3Vic3RyZWFtLCBwYXJhbXMpOwogCQlpZiAocmV0IDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJhc29jOiBwbGF0Zm9ybSAlcyBodyBwYXJhbXMgZmFpbGVkXG4iLApAQCAtOTUyLDcgKzk0Niw3IEBACiAJCXJ0ZC0+ZGFpX2xpbmstPm9wcy0+aHdfZnJlZShzdWJzdHJlYW0pOwogCiAJLyogZnJlZSBhbnkgRE1BIHJlc291cmNlcyAqLwotCWlmIChwbGF0Zm9ybS0+ZHJpdmVyLT5vcHMtPmh3X2ZyZWUpCisJaWYgKHBsYXRmb3JtLT5kcml2ZXItPm9wcyAmJiBwbGF0Zm9ybS0+ZHJpdmVyLT5vcHMtPmh3X2ZyZWUpCiAJCXBsYXRmb3JtLT5kcml2ZXItPm9wcy0+aHdfZnJlZShzdWJzdHJlYW0pOwogCiAJLyogbm93IGZyZWUgaHcgcGFyYW1zIGZvciB0aGUgREFJcyAgKi8KQEAgLTk4MCw3ICs5NzQsNyBAQAogCQkJcmV0dXJuIHJldDsKIAl9CiAKLQlpZiAocGxhdGZvcm0tPmRyaXZlci0+b3BzLT50cmlnZ2VyKSB7CisJaWYgKHBsYXRmb3JtLT5kcml2ZXItPm9wcyAmJiBwbGF0Zm9ybS0+ZHJpdmVyLT5vcHMtPnRyaWdnZXIpIHsKIAkJcmV0ID0gcGxhdGZvcm0tPmRyaXZlci0+b3BzLT50cmlnZ2VyKHN1YnN0cmVhbSwgY21kKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwpAQCAtMTAwOSw3ICsxMDAzLDcgQEAKIAlzbmRfcGNtX3VmcmFtZXNfdCBvZmZzZXQgPSAwOwogCXNuZF9wY21fc2ZyYW1lc190IGRlbGF5ID0gMDsKIAotCWlmIChwbGF0Zm9ybS0+ZHJpdmVyLT5vcHMtPnBvaW50ZXIpCisJaWYgKHBsYXRmb3JtLT5kcml2ZXItPm9wcyAmJiBwbGF0Zm9ybS0+ZHJpdmVyLT5vcHMtPnBvaW50ZXIpCiAJCW9mZnNldCA9IHBsYXRmb3JtLT5kcml2ZXItPm9wcy0+cG9pbnRlcihzdWJzdHJlYW0pOwogCiAJaWYgKGNwdV9kYWktPmRyaXZlci0+b3BzLT5kZWxheSkKQEAgLTEyOTksNiArMTI5Myw3IEBACiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwogCXN0cnVjdCBzbmRfc29jX3BsYXRmb3JtICpwbGF0Zm9ybTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwgKmNwdV9kYWk7CisJY29uc3QgY2hhciAqcGxhdGZvcm1fbmFtZTsKIAogCWlmIChydGQtPmNvbXBsZXRlKQogCQlyZXR1cm4gMTsKQEAgLTEzNTEsMTMgKzEzNDYsMTggQEAKIAkJCWRhaV9saW5rLT5jb2RlY19uYW1lKTsKIAogZmluZF9wbGF0Zm9ybToKLQkvKiBkbyB3ZSBhbHJlYWR5IGhhdmUgdGhlIENPREVDIERBSSBmb3IgdGhpcyBsaW5rID8gKi8KLQlpZiAocnRkLT5wbGF0Zm9ybSkgeworCS8qIGRvIHdlIG5lZWQgYSBwbGF0Zm9ybT8gKi8KKwlpZiAocnRkLT5wbGF0Zm9ybSkKIAkJZ290byBvdXQ7Ci0JfQotCS8qIG5vLCB0aGVuIGZpbmQgQ1BVIERBSSBmcm9tIHJlZ2lzdGVyZWQgREFJcyovCisKKwkvKiBpZiB0aGVyZSdzIG5vIHBsYXRmb3JtIHdlIG1hdGNoIG9uIHRoZSBlbXB0eSBwbGF0Zm9ybSAqLworCXBsYXRmb3JtX25hbWUgPSBkYWlfbGluay0+cGxhdGZvcm1fbmFtZTsKKwlpZiAoIXBsYXRmb3JtX25hbWUpCisJCXBsYXRmb3JtX25hbWUgPSAic25kLXNvYy1kdW1teSI7CisKKwkvKiBubywgdGhlbiBmaW5kIG9uZSBmcm9tIHRoZSBzZXQgb2YgcmVnaXN0ZXJlZCBwbGF0Zm9ybXMgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBsYXRmb3JtLCAmcGxhdGZvcm1fbGlzdCwgbGlzdCkgewotCQlpZiAoIXN0cmNtcChwbGF0Zm9ybS0+bmFtZSwgZGFpX2xpbmstPnBsYXRmb3JtX25hbWUpKSB7CisJCWlmICghc3RyY21wKHBsYXRmb3JtLT5uYW1lLCBwbGF0Zm9ybV9uYW1lKSkgewogCQkJcnRkLT5wbGF0Zm9ybSA9IHBsYXRmb3JtOwogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTE0NTMsNiArMTQ1MywxNiBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgc29jX3JlbW92ZV9kYWlfbGlua3Moc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fcnRkOyBpKyspCisJCXNvY19yZW1vdmVfZGFpX2xpbmsoY2FyZCwgaSk7CisKKwljYXJkLT5udW1fcnRkID0gMDsKK30KKwogc3RhdGljIHZvaWQgc29jX3NldF9uYW1lX3ByZWZpeChzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkLAogCQkJCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKQEAgLTE0ODMsNiArMTQ5MywxMiBAQAogCWlmICghdHJ5X21vZHVsZV9nZXQoY29kZWMtPmRldi0+ZHJpdmVyLT5vd25lcikpCiAJCXJldHVybiAtRU5PREVWOwogCisJc29jX2luaXRfY29kZWNfZGVidWdmcyhjb2RlYyk7CisKKwlpZiAoZHJpdmVyLT5kYXBtX3dpZGdldHMpCisJCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoJmNvZGVjLT5kYXBtLCBkcml2ZXItPmRhcG1fd2lkZ2V0cywKKwkJCQkJICBkcml2ZXItPm51bV9kYXBtX3dpZGdldHMpOworCiAJaWYgKGRyaXZlci0+cHJvYmUpIHsKIAkJcmV0ID0gZHJpdmVyLT5wcm9iZShjb2RlYyk7CiAJCWlmIChyZXQgPCAwKSB7CkBAIC0xNDkzLDE1ICsxNTA5LDEzIEBACiAJCX0KIAl9CiAKLQlpZiAoZHJpdmVyLT5kYXBtX3dpZGdldHMpCi0JCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoJmNvZGVjLT5kYXBtLCBkcml2ZXItPmRhcG1fd2lkZ2V0cywKLQkJCQkJICBkcml2ZXItPm51bV9kYXBtX3dpZGdldHMpOworCWlmIChkcml2ZXItPmNvbnRyb2xzKQorCQlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgZHJpdmVyLT5jb250cm9scywKKwkJCQkgICAgIGRyaXZlci0+bnVtX2NvbnRyb2xzKTsKIAlpZiAoZHJpdmVyLT5kYXBtX3JvdXRlcykKIAkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoJmNvZGVjLT5kYXBtLCBkcml2ZXItPmRhcG1fcm91dGVzLAogCQkJCQlkcml2ZXItPm51bV9kYXBtX3JvdXRlcyk7CiAKLQlzb2NfaW5pdF9jb2RlY19kZWJ1Z2ZzKGNvZGVjKTsKLQogCS8qIG1hcmsgY29kZWMgYXMgcHJvYmVkIGFuZCBhZGQgdG8gY2FyZCBjb2RlYyBsaXN0ICovCiAJY29kZWMtPnByb2JlZCA9IDE7CiAJbGlzdF9hZGQoJmNvZGVjLT5jYXJkX2xpc3QsICZjYXJkLT5jb2RlY19kZXZfbGlzdCk7CkBAIC0xNTEwLDYgKzE1MjQsNyBAQAogCXJldHVybiAwOwogCiBlcnJfcHJvYmU6CisJc29jX2NsZWFudXBfY29kZWNfZGVidWdmcyhjb2RlYyk7CiAJbW9kdWxlX3B1dChjb2RlYy0+ZGV2LT5kcml2ZXItPm93bmVyKTsKIAogCXJldHVybiByZXQ7CkBAIC0xODYwLDExICsxODc1LDE5IEBACiAJY2FyZC0+ZGFwbS5jYXJkID0gY2FyZDsKIAlsaXN0X2FkZCgmY2FyZC0+ZGFwbS5saXN0LCAmY2FyZC0+ZGFwbV9saXN0KTsKIAorI2lmZGVmIENPTkZJR19ERUJVR19GUworCXNuZF9zb2NfZGFwbV9kZWJ1Z2ZzX2luaXQoJmNhcmQtPmRhcG0sIGNhcmQtPmRlYnVnZnNfY2FyZF9yb290KTsKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiAJLyogZGVmZXJyZWQgcmVzdW1lIHdvcmsgKi8KIAlJTklUX1dPUksoJmNhcmQtPmRlZmVycmVkX3Jlc3VtZV93b3JrLCBzb2NfcmVzdW1lX2RlZmVycmVkKTsKICNlbmRpZgogCisJaWYgKGNhcmQtPmRhcG1fd2lkZ2V0cykKKwkJc25kX3NvY19kYXBtX25ld19jb250cm9scygmY2FyZC0+ZGFwbSwgY2FyZC0+ZGFwbV93aWRnZXRzLAorCQkJCQkgIGNhcmQtPm51bV9kYXBtX3dpZGdldHMpOworCiAJLyogaW5pdGlhbGlzZSB0aGUgc291bmQgY2FyZCBvbmx5IG9uY2UgKi8KIAlpZiAoY2FyZC0+cHJvYmUpIHsKIAkJcmV0ID0gY2FyZC0+cHJvYmUoY2FyZCk7CkBAIC0xODkwLDI3ICsxOTEzLDI0IEBACiAJCX0KIAl9CiAKLQlpZiAoY2FyZC0+ZGFwbV93aWRnZXRzKQotCQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKCZjYXJkLT5kYXBtLCBjYXJkLT5kYXBtX3dpZGdldHMsCi0JCQkJCSAgY2FyZC0+bnVtX2RhcG1fd2lkZ2V0cyk7CisJLyogV2Ugc2hvdWxkIGhhdmUgYSBub24tY29kZWMgY29udHJvbCBhZGQgZnVuY3Rpb24gYnV0IHdlIGRvbid0ICovCisJaWYgKGNhcmQtPmNvbnRyb2xzKQorCQlzbmRfc29jX2FkZF9jb250cm9scyhsaXN0X2ZpcnN0X2VudHJ5KCZjYXJkLT5jb2RlY19kZXZfbGlzdCwKKwkJCQkJCSAgICAgIHN0cnVjdCBzbmRfc29jX2NvZGVjLAorCQkJCQkJICAgICAgY2FyZF9saXN0KSwKKwkJCQkgICAgIGNhcmQtPmNvbnRyb2xzLAorCQkJCSAgICAgY2FyZC0+bnVtX2NvbnRyb2xzKTsKKwogCWlmIChjYXJkLT5kYXBtX3JvdXRlcykKIAkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoJmNhcmQtPmRhcG0sIGNhcmQtPmRhcG1fcm91dGVzLAogCQkJCQljYXJkLT5udW1fZGFwbV9yb3V0ZXMpOwogCi0jaWZkZWYgQ09ORklHX0RFQlVHX0ZTCi0JY2FyZC0+ZGFwbS5kZWJ1Z2ZzX2RhcG0gPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImRhcG0iLAotCQkJCQkJICAgICBjYXJkLT5kZWJ1Z2ZzX2NhcmRfcm9vdCk7Ci0JaWYgKCFjYXJkLT5kYXBtLmRlYnVnZnNfZGFwbSkKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIkZhaWxlZCB0byBjcmVhdGUgY2FyZCBEQVBNIGRlYnVnZnMgZGlyZWN0b3J5XG4iKTsKLQotCXNuZF9zb2NfZGFwbV9kZWJ1Z2ZzX2luaXQoJmNhcmQtPmRhcG0pOwotI2VuZGlmCi0KIAlzbnByaW50ZihjYXJkLT5zbmRfY2FyZC0+c2hvcnRuYW1lLCBzaXplb2YoY2FyZC0+c25kX2NhcmQtPnNob3J0bmFtZSksCi0JCSAiJXMiLCAgY2FyZC0+bmFtZSk7Ci0Jc25wcmludGYoY2FyZC0+c25kX2NhcmQtPmxvbmduYW1lLCBzaXplb2YoY2FyZC0+c25kX2NhcmQtPmxvbmduYW1lKSwKIAkJICIlcyIsIGNhcmQtPm5hbWUpOworCXNucHJpbnRmKGNhcmQtPnNuZF9jYXJkLT5sb25nbmFtZSwgc2l6ZW9mKGNhcmQtPnNuZF9jYXJkLT5sb25nbmFtZSksCisJCSAiJXMiLCBjYXJkLT5sb25nX25hbWUgPyBjYXJkLT5sb25nX25hbWUgOiBjYXJkLT5uYW1lKTsKKwlzbnByaW50ZihjYXJkLT5zbmRfY2FyZC0+ZHJpdmVyLCBzaXplb2YoY2FyZC0+c25kX2NhcmQtPmRyaXZlciksCisJCSAiJXMiLCBjYXJkLT5kcml2ZXJfbmFtZSA/IGNhcmQtPmRyaXZlcl9uYW1lIDogY2FyZC0+bmFtZSk7CiAKIAlpZiAoY2FyZC0+bGF0ZV9wcm9iZSkgewogCQlyZXQgPSBjYXJkLT5sYXRlX3Byb2JlKGNhcmQpOwpAQCAtMTk0OSw4ICsxOTY5LDcgQEAKIAkJc29jX3JlbW92ZV9hdXhfZGV2KGNhcmQsIGkpOwogCiBwcm9iZV9kYWlfZXJyOgotCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fbGlua3M7IGkrKykKLQkJc29jX3JlbW92ZV9kYWlfbGluayhjYXJkLCBpKTsKKwlzb2NfcmVtb3ZlX2RhaV9saW5rcyhjYXJkKTsKIAogY2FyZF9wcm9iZV9lcnJvcjoKIAlpZiAoY2FyZC0+cmVtb3ZlKQpAQCAtMjAxMiw4ICsyMDMxLDcgQEAKIAkJc29jX3JlbW92ZV9hdXhfZGV2KGNhcmQsIGkpOwogCiAJLyogcmVtb3ZlIGFuZCBmcmVlIGVhY2ggREFJICovCi0JZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9ydGQ7IGkrKykKLQkJc29jX3JlbW92ZV9kYWlfbGluayhjYXJkLCBpKTsKKwlzb2NfcmVtb3ZlX2RhaV9saW5rcyhjYXJkKTsKIAogCXNvY19jbGVhbnVwX2NhcmRfZGVidWdmcyhjYXJkKTsKIApAQCAtMjAyMSw2ICsyMDM5LDggQEAKIAlpZiAoY2FyZC0+cmVtb3ZlKQogCQljYXJkLT5yZW1vdmUoY2FyZCk7CiAKKwlzbmRfc29jX2RhcG1fZnJlZSgmY2FyZC0+ZGFwbSk7CisKIAlrZnJlZShjYXJkLT5ydGQpOwogCXNuZF9jYXJkX2ZyZWUoY2FyZC0+c25kX2NhcmQpOwogCXJldHVybiAwOwpAQCAtMjEwNSwxMyArMjEyNSwxNSBAQAogCiAJcnRkLT5wY20gPSBwY207CiAJcGNtLT5wcml2YXRlX2RhdGEgPSBydGQ7Ci0Jc29jX3BjbV9vcHMubW1hcCA9IHBsYXRmb3JtLT5kcml2ZXItPm9wcy0+bW1hcDsKLQlzb2NfcGNtX29wcy5wb2ludGVyID0gcGxhdGZvcm0tPmRyaXZlci0+b3BzLT5wb2ludGVyOwotCXNvY19wY21fb3BzLmlvY3RsID0gcGxhdGZvcm0tPmRyaXZlci0+b3BzLT5pb2N0bDsKLQlzb2NfcGNtX29wcy5jb3B5ID0gcGxhdGZvcm0tPmRyaXZlci0+b3BzLT5jb3B5OwotCXNvY19wY21fb3BzLnNpbGVuY2UgPSBwbGF0Zm9ybS0+ZHJpdmVyLT5vcHMtPnNpbGVuY2U7Ci0Jc29jX3BjbV9vcHMuYWNrID0gcGxhdGZvcm0tPmRyaXZlci0+b3BzLT5hY2s7Ci0Jc29jX3BjbV9vcHMucGFnZSA9IHBsYXRmb3JtLT5kcml2ZXItPm9wcy0+cGFnZTsKKwlpZiAocGxhdGZvcm0tPmRyaXZlci0+b3BzKSB7CisJCXNvY19wY21fb3BzLm1tYXAgPSBwbGF0Zm9ybS0+ZHJpdmVyLT5vcHMtPm1tYXA7CisJCXNvY19wY21fb3BzLnBvaW50ZXIgPSBwbGF0Zm9ybS0+ZHJpdmVyLT5vcHMtPnBvaW50ZXI7CisJCXNvY19wY21fb3BzLmlvY3RsID0gcGxhdGZvcm0tPmRyaXZlci0+b3BzLT5pb2N0bDsKKwkJc29jX3BjbV9vcHMuY29weSA9IHBsYXRmb3JtLT5kcml2ZXItPm9wcy0+Y29weTsKKwkJc29jX3BjbV9vcHMuc2lsZW5jZSA9IHBsYXRmb3JtLT5kcml2ZXItPm9wcy0+c2lsZW5jZTsKKwkJc29jX3BjbV9vcHMuYWNrID0gcGxhdGZvcm0tPmRyaXZlci0+b3BzLT5hY2s7CisJCXNvY19wY21fb3BzLnBhZ2UgPSBwbGF0Zm9ybS0+ZHJpdmVyLT5vcHMtPnBhZ2U7CisJfQogCiAJaWYgKHBsYXliYWNrKQogCQlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLCAmc29jX3BjbV9vcHMpOwpAQCAtMjExOSwxMCArMjE0MSwxMyBAQAogCWlmIChjYXB0dXJlKQogCQlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsICZzb2NfcGNtX29wcyk7CiAKLQlyZXQgPSBwbGF0Zm9ybS0+ZHJpdmVyLT5wY21fbmV3KHJ0ZC0+Y2FyZC0+c25kX2NhcmQsIGNvZGVjX2RhaSwgcGNtKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImFzb2M6IHBsYXRmb3JtIHBjbSBjb25zdHJ1Y3RvciBmYWlsZWRcbiIpOwotCQlyZXR1cm4gcmV0OworCWlmIChwbGF0Zm9ybS0+ZHJpdmVyLT5wY21fbmV3KSB7CisJCXJldCA9IHBsYXRmb3JtLT5kcml2ZXItPnBjbV9uZXcocnRkLT5jYXJkLT5zbmRfY2FyZCwKKwkJCQkJCWNvZGVjX2RhaSwgcGNtKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByX2VycigiYXNvYzogcGxhdGZvcm0gcGNtIGNvbnN0cnVjdG9yIGZhaWxlZFxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CiAJfQogCiAJcGNtLT5wcml2YXRlX2ZyZWUgPSBwbGF0Zm9ybS0+ZHJpdmVyLT5wY21fZnJlZTsKQEAgLTIxNTAsNiArMjE3NSw0MiBAQAogRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19jb2RlY192b2xhdGlsZV9yZWdpc3Rlcik7CiAKIC8qKgorICogc25kX3NvY19jb2RlY19yZWFkYWJsZV9yZWdpc3RlcjogUmVwb3J0IGlmIGEgcmVnaXN0ZXIgaXMgcmVhZGFibGUuCisgKgorICogQGNvZGVjOiBDT0RFQyB0byBxdWVyeS4KKyAqIEByZWc6IFJlZ2lzdGVyIHRvIHF1ZXJ5LgorICoKKyAqIEJvb2xlYW4gZnVuY3Rpb24gaW5kaWNhdGluZyBpZiBhIENPREVDIHJlZ2lzdGVyIGlzIHJlYWRhYmxlLgorICovCitpbnQgc25kX3NvY19jb2RlY19yZWFkYWJsZV9yZWdpc3RlcihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJICAgIHVuc2lnbmVkIGludCByZWcpCit7CisJaWYgKGNvZGVjLT5yZWFkYWJsZV9yZWdpc3RlcikKKwkJcmV0dXJuIGNvZGVjLT5yZWFkYWJsZV9yZWdpc3Rlcihjb2RlYywgcmVnKTsKKwllbHNlCisJCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19jb2RlY19yZWFkYWJsZV9yZWdpc3Rlcik7CisKKy8qKgorICogc25kX3NvY19jb2RlY193cml0YWJsZV9yZWdpc3RlcjogUmVwb3J0IGlmIGEgcmVnaXN0ZXIgaXMgd3JpdGFibGUuCisgKgorICogQGNvZGVjOiBDT0RFQyB0byBxdWVyeS4KKyAqIEByZWc6IFJlZ2lzdGVyIHRvIHF1ZXJ5LgorICoKKyAqIEJvb2xlYW4gZnVuY3Rpb24gaW5kaWNhdGluZyBpZiBhIENPREVDIHJlZ2lzdGVyIGlzIHdyaXRhYmxlLgorICovCitpbnQgc25kX3NvY19jb2RlY193cml0YWJsZV9yZWdpc3RlcihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJICAgIHVuc2lnbmVkIGludCByZWcpCit7CisJaWYgKGNvZGVjLT53cml0YWJsZV9yZWdpc3RlcikKKwkJcmV0dXJuIGNvZGVjLT53cml0YWJsZV9yZWdpc3Rlcihjb2RlYywgcmVnKTsKKwllbHNlCisJCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19jb2RlY193cml0YWJsZV9yZWdpc3Rlcik7CisKKy8qKgogICogc25kX3NvY19uZXdfYWM5N19jb2RlYyAtIGluaXRhaWxpc2UgQUM5NyBkZXZpY2UKICAqIEBjb2RlYzogYXVkaW8gY29kZWMKICAqIEBvcHM6IEFDOTcgYnVzIG9wZXJhdGlvbnMKQEAgLTIyMzEsNiArMjI5MiwxMyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY193cml0ZSk7CiAKK3Vuc2lnbmVkIGludCBzbmRfc29jX2J1bGtfd3JpdGVfcmF3KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgICAgdW5zaWduZWQgaW50IHJlZywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlyZXR1cm4gY29kZWMtPmJ1bGtfd3JpdGVfcmF3KGNvZGVjLCByZWcsIGRhdGEsIGxlbik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2J1bGtfd3JpdGVfcmF3KTsKKwogLyoqCiAgKiBzbmRfc29jX3VwZGF0ZV9iaXRzIC0gdXBkYXRlIGNvZGVjIHJlZ2lzdGVyIGJpdHMKICAqIEBjb2RlYzogYXVkaW8gY29kZWMKQEAgLTM0MTQsNyArMzQ4Miw3IEBACiAKIAlkYWkgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19kYWkpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGFpID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKiBjcmVhdGUgREFJIGNvbXBvbmVudCBuYW1lICovCiAJZGFpLT5uYW1lID0gZm10X3NpbmdsZV9uYW1lKGRldiwgJmRhaS0+aWQpOwpAQCAtMzU1Myw3ICszNjIxLDcgQEAKIAogCXBsYXRmb3JtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0pLCBHRlBfS0VSTkVMKTsKIAlpZiAocGxhdGZvcm0gPT0gTlVMTCkKLQkJCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIGNyZWF0ZSBwbGF0Zm9ybSBjb21wb25lbnQgbmFtZSAqLwogCXBsYXRmb3JtLT5uYW1lID0gZm10X3NpbmdsZV9uYW1lKGRldiwgJnBsYXRmb3JtLT5pZCk7CkBAIC0zNjcxLDYgKzM3MzksNyBAQAogCWNvZGVjLT5yZWFkID0gY29kZWNfZHJ2LT5yZWFkOwogCWNvZGVjLT52b2xhdGlsZV9yZWdpc3RlciA9IGNvZGVjX2Rydi0+dm9sYXRpbGVfcmVnaXN0ZXI7CiAJY29kZWMtPnJlYWRhYmxlX3JlZ2lzdGVyID0gY29kZWNfZHJ2LT5yZWFkYWJsZV9yZWdpc3RlcjsKKwljb2RlYy0+d3JpdGFibGVfcmVnaXN0ZXIgPSBjb2RlY19kcnYtPndyaXRhYmxlX3JlZ2lzdGVyOwogCWNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPSBTTkRfU09DX0JJQVNfT0ZGOwogCWNvZGVjLT5kYXBtLmRldiA9IGRldjsKIAljb2RlYy0+ZGFwbS5jb2RlYyA9IGNvZGVjOwpAQCAtMzcwNSw2ICszNzc0LDggQEAKIAkJCWNvZGVjLT52b2xhdGlsZV9yZWdpc3RlciA9IHNuZF9zb2NfZGVmYXVsdF92b2xhdGlsZV9yZWdpc3RlcjsKIAkJaWYgKCFjb2RlYy0+cmVhZGFibGVfcmVnaXN0ZXIpCiAJCQljb2RlYy0+cmVhZGFibGVfcmVnaXN0ZXIgPSBzbmRfc29jX2RlZmF1bHRfcmVhZGFibGVfcmVnaXN0ZXI7CisJCWlmICghY29kZWMtPndyaXRhYmxlX3JlZ2lzdGVyKQorCQkJY29kZWMtPndyaXRhYmxlX3JlZ2lzdGVyID0gc25kX3NvY19kZWZhdWx0X3dyaXRhYmxlX3JlZ2lzdGVyOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBudW1fZGFpOyBpKyspIHsKQEAgLTM3OTMsMTIgKzM4NjQsMTYgQEAKIAkJcHJfd2FybigiQVNvQzogRmFpbGVkIHRvIGNyZWF0ZSBwbGF0Zm9ybSBsaXN0IGRlYnVnZnMgZmlsZVxuIik7CiAjZW5kaWYKIAorCXNuZF9zb2NfdXRpbF9pbml0KCk7CisKIAlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzb2NfZHJpdmVyKTsKIH0KIG1vZHVsZV9pbml0KHNuZF9zb2NfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzbmRfc29jX2V4aXQodm9pZCkKIHsKKwlzbmRfc29jX3V0aWxfZXhpdCgpOworCiAjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCiAJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKHNuZF9zb2NfZGVidWdmc19yb290KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1kYXBtLmMgYi9zb3VuZC9zb2Mvc29jLWRhcG0uYwppbmRleCA4MWM0MDUyLi40NTY2MTdlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWRhcG0uYworKysgYi9zb3VuZC9zb2Mvc29jLWRhcG0uYwpAQCAtMTg3LDcgKzE4Nyw3IEBACiAJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsOiB7CiAJCWludCB2YWw7CiAJCXN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqbWMgPSAoc3RydWN0IHNvY19taXhlcl9jb250cm9sICopCi0JCQl3LT5rY29udHJvbHNbaV0ucHJpdmF0ZV92YWx1ZTsKKwkJCXctPmtjb250cm9sX25ld3NbaV0ucHJpdmF0ZV92YWx1ZTsKIAkJdW5zaWduZWQgaW50IHJlZyA9IG1jLT5yZWc7CiAJCXVuc2lnbmVkIGludCBzaGlmdCA9IG1jLT5zaGlmdDsKIAkJaW50IG1heCA9IG1jLT5tYXg7CkBAIC0yMDQsNyArMjA0LDggQEAKIAl9CiAJYnJlYWs7CiAJY2FzZSBzbmRfc29jX2RhcG1fbXV4OiB7Ci0JCXN0cnVjdCBzb2NfZW51bSAqZSA9IChzdHJ1Y3Qgc29jX2VudW0gKil3LT5rY29udHJvbHNbaV0ucHJpdmF0ZV92YWx1ZTsKKwkJc3RydWN0IHNvY19lbnVtICplID0gKHN0cnVjdCBzb2NfZW51bSAqKQorCQkJdy0+a2NvbnRyb2xfbmV3c1tpXS5wcml2YXRlX3ZhbHVlOwogCQlpbnQgdmFsLCBpdGVtLCBiaXRtYXNrOwogCiAJCWZvciAoYml0bWFzayA9IDE7IGJpdG1hc2sgPCBlLT5tYXg7IGJpdG1hc2sgPDw9IDEpCkBAIC0yMjAsNyArMjIxLDggQEAKIAl9CiAJYnJlYWs7CiAJY2FzZSBzbmRfc29jX2RhcG1fdmlydF9tdXg6IHsKLQkJc3RydWN0IHNvY19lbnVtICplID0gKHN0cnVjdCBzb2NfZW51bSAqKXctPmtjb250cm9sc1tpXS5wcml2YXRlX3ZhbHVlOworCQlzdHJ1Y3Qgc29jX2VudW0gKmUgPSAoc3RydWN0IHNvY19lbnVtICopCisJCQl3LT5rY29udHJvbF9uZXdzW2ldLnByaXZhdGVfdmFsdWU7CiAKIAkJcC0+Y29ubmVjdCA9IDA7CiAJCS8qIHNpbmNlIGEgdmlydHVhbCBtdXggaGFzIG5vIGJhY2tpbmcgcmVnaXN0ZXJzIHRvCkBAIC0yMzUsNyArMjM3LDcgQEAKIAlicmVhazsKIAljYXNlIHNuZF9zb2NfZGFwbV92YWx1ZV9tdXg6IHsKIAkJc3RydWN0IHNvY19lbnVtICplID0gKHN0cnVjdCBzb2NfZW51bSAqKQotCQkJdy0+a2NvbnRyb2xzW2ldLnByaXZhdGVfdmFsdWU7CisJCQl3LT5rY29udHJvbF9uZXdzW2ldLnByaXZhdGVfdmFsdWU7CiAJCWludCB2YWwsIGl0ZW07CiAKIAkJdmFsID0gc25kX3NvY19yZWFkKHctPmNvZGVjLCBlLT5yZWcpOwpAQCAtMzEwLDExICszMTIsMTEgQEAKIAogCS8qIHNlYXJjaCBmb3IgbWl4ZXIga2NvbnRyb2wgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZGVzdC0+bnVtX2tjb250cm9sczsgaSsrKSB7Ci0JCWlmICghc3RyY21wKGNvbnRyb2xfbmFtZSwgZGVzdC0+a2NvbnRyb2xzW2ldLm5hbWUpKSB7CisJCWlmICghc3RyY21wKGNvbnRyb2xfbmFtZSwgZGVzdC0+a2NvbnRyb2xfbmV3c1tpXS5uYW1lKSkgewogCQkJbGlzdF9hZGQoJnBhdGgtPmxpc3QsICZkYXBtLT5jYXJkLT5wYXRocyk7CiAJCQlsaXN0X2FkZCgmcGF0aC0+bGlzdF9zaW5rLCAmZGVzdC0+c291cmNlcyk7CiAJCQlsaXN0X2FkZCgmcGF0aC0+bGlzdF9zb3VyY2UsICZzcmMtPnNpbmtzKTsKLQkJCXBhdGgtPm5hbWUgPSBkZXN0LT5rY29udHJvbHNbaV0ubmFtZTsKKwkJCXBhdGgtPm5hbWUgPSBkZXN0LT5rY29udHJvbF9uZXdzW2ldLm5hbWU7CiAJCQlkYXBtX3NldF9wYXRoX3N0YXR1cyhkZXN0LCBwYXRoLCBpKTsKIAkJCXJldHVybiAwOwogCQl9CkBAIC0zMjIsNDMgKzMyNCwyNiBAQAogCXJldHVybiAtRU5PREVWOwogfQogCi0vKiB1cGRhdGUgZGFwbSBjb2RlYyByZWdpc3RlciBiaXRzICovCi1zdGF0aWMgaW50IGRhcG1fdXBkYXRlX2JpdHMoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKndpZGdldCkKK3N0YXRpYyBpbnQgZGFwbV9pc19zaGFyZWRfa2NvbnRyb2woc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtLAorCWNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprY29udHJvbF9uZXcsCisJc3RydWN0IHNuZF9rY29udHJvbCAqKmtjb250cm9sKQogewotCWludCBjaGFuZ2UsIHBvd2VyOwotCXVuc2lnbmVkIGludCBvbGQsIG5ldzsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3aWRnZXQtPmNvZGVjOwotCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9IHdpZGdldC0+ZGFwbTsKLQlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gZGFwbS0+Y2FyZDsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdzsKKwlpbnQgaTsKIAotCS8qIGNoZWNrIGZvciB2YWxpZCB3aWRnZXRzICovCi0JaWYgKHdpZGdldC0+cmVnIDwgMCB8fCB3aWRnZXQtPmlkID09IHNuZF9zb2NfZGFwbV9pbnB1dCB8fAotCQl3aWRnZXQtPmlkID09IHNuZF9zb2NfZGFwbV9vdXRwdXQgfHwKLQkJd2lkZ2V0LT5pZCA9PSBzbmRfc29jX2RhcG1faHAgfHwKLQkJd2lkZ2V0LT5pZCA9PSBzbmRfc29jX2RhcG1fbWljIHx8Ci0JCXdpZGdldC0+aWQgPT0gc25kX3NvY19kYXBtX2xpbmUgfHwKLQkJd2lkZ2V0LT5pZCA9PSBzbmRfc29jX2RhcG1fc3BrKQotCQlyZXR1cm4gMDsKKwkqa2NvbnRyb2wgPSBOVUxMOwogCi0JcG93ZXIgPSB3aWRnZXQtPnBvd2VyOwotCWlmICh3aWRnZXQtPmludmVydCkKLQkJcG93ZXIgPSAocG93ZXIgPyAwOjEpOwotCi0Jb2xkID0gc25kX3NvY19yZWFkKGNvZGVjLCB3aWRnZXQtPnJlZyk7Ci0JbmV3ID0gKG9sZCAmIH4oMHgxIDw8IHdpZGdldC0+c2hpZnQpKSB8IChwb3dlciA8PCB3aWRnZXQtPnNoaWZ0KTsKLQotCWNoYW5nZSA9IG9sZCAhPSBuZXc7Ci0JaWYgKGNoYW5nZSkgewotCQlwb3BfZGJnKGRhcG0tPmRldiwgY2FyZC0+cG9wX3RpbWUsCi0JCQkicG9wIHRlc3QgJXMgOiAlcyBpbiAlZCBtc1xuIiwKLQkJCXdpZGdldC0+bmFtZSwgd2lkZ2V0LT5wb3dlciA/ICJvbiIgOiAib2ZmIiwKLQkJCWNhcmQtPnBvcF90aW1lKTsKLQkJcG9wX3dhaXQoY2FyZC0+cG9wX3RpbWUpOwotCQlzbmRfc29jX3dyaXRlKGNvZGVjLCB3aWRnZXQtPnJlZywgbmV3KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsICZkYXBtLT5jYXJkLT53aWRnZXRzLCBsaXN0KSB7CisJCWZvciAoaSA9IDA7IGkgPCB3LT5udW1fa2NvbnRyb2xzOyBpKyspIHsKKwkJCWlmICgmdy0+a2NvbnRyb2xfbmV3c1tpXSA9PSBrY29udHJvbF9uZXcpIHsKKwkJCQlpZiAody0+a2NvbnRyb2xzKQorCQkJCQkqa2NvbnRyb2wgPSB3LT5rY29udHJvbHNbaV07CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCX0KIAl9Ci0JZGV2X2RiZyhkYXBtLT5kZXYsICJyZWcgJXggb2xkICV4IG5ldyAleCBjaGFuZ2UgJWRcbiIsIHdpZGdldC0+cmVnLAotCQlvbGQsIG5ldywgY2hhbmdlKTsKLQlyZXR1cm4gY2hhbmdlOworCisJcmV0dXJuIDA7CiB9CiAKIC8qIGNyZWF0ZSBuZXcgZGFwbSBtaXhlciBjb250cm9sICovCkBAIC0zNzAsNiArMzU1LDggQEAKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3BhdGggKnBhdGg7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGFwbS0+Y2FyZC0+c25kX2NhcmQ7CiAJY29uc3QgY2hhciAqcHJlZml4OworCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0X2xpc3QgKndsaXN0OworCXNpemVfdCB3bGlzdHNpemU7CiAKIAlpZiAoZGFwbS0+Y29kZWMpCiAJCXByZWZpeCA9IGRhcG0tPmNvZGVjLT5uYW1lX3ByZWZpeDsKQEAgLTM4OCwyMyArMzc1LDM3IEBACiAJCWxpc3RfZm9yX2VhY2hfZW50cnkocGF0aCwgJnctPnNvdXJjZXMsIGxpc3Rfc2luaykgewogCiAJCQkvKiBtaXhlci9tdXggcGF0aHMgbmFtZSBtdXN0IG1hdGNoIGNvbnRyb2wgbmFtZSAqLwotCQkJaWYgKHBhdGgtPm5hbWUgIT0gKGNoYXIqKXctPmtjb250cm9sc1tpXS5uYW1lKQorCQkJaWYgKHBhdGgtPm5hbWUgIT0gKGNoYXIgKil3LT5rY29udHJvbF9uZXdzW2ldLm5hbWUpCiAJCQkJY29udGludWU7CiAKKwkJCXdsaXN0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldF9saXN0KSArCisJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqKSwKKwkJCXdsaXN0ID0ga3phbGxvYyh3bGlzdHNpemUsIEdGUF9LRVJORUwpOworCQkJaWYgKHdsaXN0ID09IE5VTEwpIHsKKwkJCQlkZXZfZXJyKGRhcG0tPmRldiwKKwkJCQkJImFzb2M6IGNhbid0IGFsbG9jYXRlIHdpZGdldCBsaXN0IGZvciAlc1xuIiwKKwkJCQkJdy0+bmFtZSk7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisJCQl3bGlzdC0+bnVtX3dpZGdldHMgPSAxOworCQkJd2xpc3QtPndpZGdldHNbMF0gPSB3OworCiAJCQkvKiBhZGQgZGFwbSBjb250cm9sIHdpdGggbG9uZyBuYW1lLgogCQkJICogZm9yIGRhcG1fbWl4ZXIgdGhpcyBpcyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUKIAkJCSAqIG1peGVyIGFuZCBrY29udHJvbCBuYW1lLgogCQkJICogZm9yIGRhcG1fbWl4ZXJfbmFtZWRfY3RsIHRoaXMgaXMgc2ltcGx5IHRoZQogCQkJICoga2NvbnRyb2wgbmFtZS4KIAkJCSAqLwotCQkJbmFtZV9sZW4gPSBzdHJsZW4ody0+a2NvbnRyb2xzW2ldLm5hbWUpICsgMTsKKwkJCW5hbWVfbGVuID0gc3RybGVuKHctPmtjb250cm9sX25ld3NbaV0ubmFtZSkgKyAxOwogCQkJaWYgKHctPmlkICE9IHNuZF9zb2NfZGFwbV9taXhlcl9uYW1lZF9jdGwpCiAJCQkJbmFtZV9sZW4gKz0gMSArIHN0cmxlbih3LT5uYW1lKTsKIAogCQkJcGF0aC0+bG9uZ19uYW1lID0ga21hbGxvYyhuYW1lX2xlbiwgR0ZQX0tFUk5FTCk7CiAKLQkJCWlmIChwYXRoLT5sb25nX25hbWUgPT0gTlVMTCkKKwkJCWlmIChwYXRoLT5sb25nX25hbWUgPT0gTlVMTCkgeworCQkJCWtmcmVlKHdsaXN0KTsKIAkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KIAogCQkJc3dpdGNoICh3LT5pZCkgewogCQkJZGVmYXVsdDoKQEAgLTQxNiwyNyArNDE3LDMwIEBACiAJCQkJICovCiAJCQkJc25wcmludGYocGF0aC0+bG9uZ19uYW1lLCBuYW1lX2xlbiwgIiVzICVzIiwKIAkJCQkJIHctPm5hbWUgKyBwcmVmaXhfbGVuLAotCQkJCQkgdy0+a2NvbnRyb2xzW2ldLm5hbWUpOworCQkJCQkgdy0+a2NvbnRyb2xfbmV3c1tpXS5uYW1lKTsKIAkJCQlicmVhazsKIAkJCWNhc2Ugc25kX3NvY19kYXBtX21peGVyX25hbWVkX2N0bDoKIAkJCQlzbnByaW50ZihwYXRoLT5sb25nX25hbWUsIG5hbWVfbGVuLCAiJXMiLAotCQkJCQkgdy0+a2NvbnRyb2xzW2ldLm5hbWUpOworCQkJCQkgdy0+a2NvbnRyb2xfbmV3c1tpXS5uYW1lKTsKIAkJCQlicmVhazsKIAkJCX0KIAogCQkJcGF0aC0+bG9uZ19uYW1lW25hbWVfbGVuIC0gMV0gPSAnXDAnOwogCi0JCQlwYXRoLT5rY29udHJvbCA9IHNuZF9zb2NfY25ldygmdy0+a2NvbnRyb2xzW2ldLCB3LAotCQkJCQkJICAgICAgcGF0aC0+bG9uZ19uYW1lLCBwcmVmaXgpOworCQkJcGF0aC0+a2NvbnRyb2wgPSBzbmRfc29jX2NuZXcoJnctPmtjb250cm9sX25ld3NbaV0sCisJCQkJCQkgICAgICB3bGlzdCwgcGF0aC0+bG9uZ19uYW1lLAorCQkJCQkJICAgICAgcHJlZml4KTsKIAkJCXJldCA9IHNuZF9jdGxfYWRkKGNhcmQsIHBhdGgtPmtjb250cm9sKTsKIAkJCWlmIChyZXQgPCAwKSB7CiAJCQkJZGV2X2VycihkYXBtLT5kZXYsCiAJCQkJCSJhc29jOiBmYWlsZWQgdG8gYWRkIGRhcG0ga2NvbnRyb2wgJXM6ICVkXG4iLAogCQkJCQlwYXRoLT5sb25nX25hbWUsIHJldCk7CisJCQkJa2ZyZWUod2xpc3QpOwogCQkJCWtmcmVlKHBhdGgtPmxvbmdfbmFtZSk7CiAJCQkJcGF0aC0+bG9uZ19uYW1lID0gTlVMTDsKIAkJCQlyZXR1cm4gcmV0OwogCQkJfQorCQkJdy0+a2NvbnRyb2xzW2ldID0gcGF0aC0+a2NvbnRyb2w7CiAJCX0KIAl9CiAJcmV0dXJuIHJldDsKQEAgLTQ1MSw0MiArNDU1LDgwIEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGFwbS0+Y2FyZC0+c25kX2NhcmQ7CiAJY29uc3QgY2hhciAqcHJlZml4OwogCXNpemVfdCBwcmVmaXhfbGVuOwotCWludCByZXQgPSAwOworCWludCByZXQ7CisJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXRfbGlzdCAqd2xpc3Q7CisJaW50IHNoYXJlZCwgd2xpc3RlbnRyaWVzOworCXNpemVfdCB3bGlzdHNpemU7CisJY2hhciAqbmFtZTsKIAotCWlmICghdy0+bnVtX2tjb250cm9scykgewotCQlkZXZfZXJyKGRhcG0tPmRldiwgImFzb2M6IG11eCAlcyBoYXMgbm8gY29udHJvbHNcbiIsIHctPm5hbWUpOworCWlmICh3LT5udW1fa2NvbnRyb2xzICE9IDEpIHsKKwkJZGV2X2VycihkYXBtLT5kZXYsCisJCQkiYXNvYzogbXV4ICVzIGhhcyBpbmNvcnJlY3QgbnVtYmVyIG9mIGNvbnRyb2xzXG4iLAorCQkJdy0+bmFtZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChkYXBtLT5jb2RlYykKLQkJcHJlZml4ID0gZGFwbS0+Y29kZWMtPm5hbWVfcHJlZml4OwotCWVsc2UKLQkJcHJlZml4ID0gTlVMTDsKKwlzaGFyZWQgPSBkYXBtX2lzX3NoYXJlZF9rY29udHJvbChkYXBtLCAmdy0+a2NvbnRyb2xfbmV3c1swXSwKKwkJCQkJICZrY29udHJvbCk7CisJaWYgKGtjb250cm9sKSB7CisJCXdsaXN0ID0ga2NvbnRyb2wtPnByaXZhdGVfZGF0YTsKKwkJd2xpc3RlbnRyaWVzID0gd2xpc3QtPm51bV93aWRnZXRzICsgMTsKKwl9IGVsc2UgeworCQl3bGlzdCA9IE5VTEw7CisJCXdsaXN0ZW50cmllcyA9IDE7CisJfQorCXdsaXN0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldF9saXN0KSArCisJCXdsaXN0ZW50cmllcyAqIHNpemVvZihzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqKSwKKwl3bGlzdCA9IGtyZWFsbG9jKHdsaXN0LCB3bGlzdHNpemUsIEdGUF9LRVJORUwpOworCWlmICh3bGlzdCA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGFwbS0+ZGV2LAorCQkJImFzb2M6IGNhbid0IGFsbG9jYXRlIHdpZGdldCBsaXN0IGZvciAlc1xuIiwgdy0+bmFtZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwl3bGlzdC0+bnVtX3dpZGdldHMgPSB3bGlzdGVudHJpZXM7CisJd2xpc3QtPndpZGdldHNbd2xpc3RlbnRyaWVzIC0gMV0gPSB3OwogCi0JaWYgKHByZWZpeCkKLQkJcHJlZml4X2xlbiA9IHN0cmxlbihwcmVmaXgpICsgMTsKLQllbHNlCi0JCXByZWZpeF9sZW4gPSAwOworCWlmICgha2NvbnRyb2wpIHsKKwkJaWYgKGRhcG0tPmNvZGVjKQorCQkJcHJlZml4ID0gZGFwbS0+Y29kZWMtPm5hbWVfcHJlZml4OworCQllbHNlCisJCQlwcmVmaXggPSBOVUxMOwogCi0JLyogVGhlIGNvbnRyb2wgd2lsbCBnZXQgYSBwcmVmaXggZnJvbSB0aGUgY29udHJvbCBjcmVhdGlvbgotCSAqIHByb2Nlc3MgYnV0IHdlJ3JlIGFsc28gdXNpbmcgdGhlIHNhbWUgcHJlZml4IGZvciB3aWRnZXRzIHNvCi0JICogY3V0IHRoZSBwcmVmaXggb2ZmIHRoZSBmcm9udCBvZiB0aGUgd2lkZ2V0IG5hbWUuCi0JICovCi0Ja2NvbnRyb2wgPSBzbmRfc29jX2NuZXcoJnctPmtjb250cm9sc1swXSwgdywgdy0+bmFtZSArIHByZWZpeF9sZW4sCi0JCQkJcHJlZml4KTsKLQlyZXQgPSBzbmRfY3RsX2FkZChjYXJkLCBrY29udHJvbCk7CisJCWlmIChzaGFyZWQpIHsKKwkJCW5hbWUgPSB3LT5rY29udHJvbF9uZXdzWzBdLm5hbWU7CisJCQlwcmVmaXhfbGVuID0gMDsKKwkJfSBlbHNlIHsKKwkJCW5hbWUgPSB3LT5uYW1lOworCQkJaWYgKHByZWZpeCkKKwkJCQlwcmVmaXhfbGVuID0gc3RybGVuKHByZWZpeCkgKyAxOworCQkJZWxzZQorCQkJCXByZWZpeF9sZW4gPSAwOworCQl9CiAKLQlpZiAocmV0IDwgMCkKLQkJZ290byBlcnI7CisJCS8qCisJCSAqIFRoZSBjb250cm9sIHdpbGwgZ2V0IGEgcHJlZml4IGZyb20gdGhlIGNvbnRyb2wgY3JlYXRpb24KKwkJICogcHJvY2VzcyBidXQgd2UncmUgYWxzbyB1c2luZyB0aGUgc2FtZSBwcmVmaXggZm9yIHdpZGdldHMgc28KKwkJICogY3V0IHRoZSBwcmVmaXggb2ZmIHRoZSBmcm9udCBvZiB0aGUgd2lkZ2V0IG5hbWUuCisJCSAqLworCQlrY29udHJvbCA9IHNuZF9zb2NfY25ldygmdy0+a2NvbnRyb2xfbmV3c1swXSwgd2xpc3QsCisJCQkJCW5hbWUgKyBwcmVmaXhfbGVuLCBwcmVmaXgpOworCQlyZXQgPSBzbmRfY3RsX2FkZChjYXJkLCBrY29udHJvbCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKGRhcG0tPmRldiwKKwkJCQkiYXNvYzogZmFpbGVkIHRvIGFkZCBrY29udHJvbCAlc1xuIiwgdy0+bmFtZSk7CisJCQlrZnJlZSh3bGlzdCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJa2NvbnRyb2wtPnByaXZhdGVfZGF0YSA9IHdsaXN0OworCisJdy0+a2NvbnRyb2xzWzBdID0ga2NvbnRyb2w7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhdGgsICZ3LT5zb3VyY2VzLCBsaXN0X3NpbmspCiAJCXBhdGgtPmtjb250cm9sID0ga2NvbnRyb2w7CiAKLQlyZXR1cm4gcmV0OwotCi1lcnI6Ci0JZGV2X2VycihkYXBtLT5kZXYsICJhc29jOiBmYWlsZWQgdG8gYWRkIGtjb250cm9sICVzXG4iLCB3LT5uYW1lKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCiAvKiBjcmVhdGUgbmV3IGRhcG0gdm9sdW1lIGNvbnRyb2wgKi8KQEAgLTY0NCw1NyArNjg2LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRhcG1fcmVnX2V2ZW50KTsKIAotLyogU3RhbmRhcmQgcG93ZXIgY2hhbmdlIG1ldGhvZCwgdXNlZCB0byBhcHBseSBwb3dlciBjaGFuZ2VzIHRvIG1vc3QKLSAqIHdpZGdldHMuCi0gKi8KLXN0YXRpYyBpbnQgZGFwbV9nZW5lcmljX2FwcGx5X3Bvd2VyKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3KQotewotCWludCByZXQ7Ci0KLQkvKiBjYWxsIGFueSBwb3dlciBjaGFuZ2UgZXZlbnQgaGFuZGxlcnMgKi8KLQlpZiAody0+ZXZlbnQpCi0JCWRldl9kYmcody0+ZGFwbS0+ZGV2LCAicG93ZXIgJXMgZXZlbnQgZm9yICVzIGZsYWdzICV4XG4iLAotCQkJIHctPnBvd2VyID8gIm9uIiA6ICJvZmYiLAotCQkJIHctPm5hbWUsIHctPmV2ZW50X2ZsYWdzKTsKLQotCS8qIHBvd2VyIHVwIHByZSBldmVudCAqLwotCWlmICh3LT5wb3dlciAmJiB3LT5ldmVudCAmJgotCSAgICAody0+ZXZlbnRfZmxhZ3MgJiBTTkRfU09DX0RBUE1fUFJFX1BNVSkpIHsKLQkJcmV0ID0gdy0+ZXZlbnQodywgTlVMTCwgU05EX1NPQ19EQVBNX1BSRV9QTVUpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCi0JLyogcG93ZXIgZG93biBwcmUgZXZlbnQgKi8KLQlpZiAoIXctPnBvd2VyICYmIHctPmV2ZW50ICYmCi0JICAgICh3LT5ldmVudF9mbGFncyAmIFNORF9TT0NfREFQTV9QUkVfUE1EKSkgewotCQlyZXQgPSB3LT5ldmVudCh3LCBOVUxMLCBTTkRfU09DX0RBUE1fUFJFX1BNRCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlkYXBtX3VwZGF0ZV9iaXRzKHcpOwotCi0JLyogcG93ZXIgdXAgcG9zdCBldmVudCAqLwotCWlmICh3LT5wb3dlciAmJiB3LT5ldmVudCAmJgotCSAgICAody0+ZXZlbnRfZmxhZ3MgJiBTTkRfU09DX0RBUE1fUE9TVF9QTVUpKSB7Ci0JCXJldCA9IHctPmV2ZW50KHcsCi0JCQkgICAgICAgTlVMTCwgU05EX1NPQ19EQVBNX1BPU1RfUE1VKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIHBvd2VyIGRvd24gcG9zdCBldmVudCAqLwotCWlmICghdy0+cG93ZXIgJiYgdy0+ZXZlbnQgJiYKLQkgICAgKHctPmV2ZW50X2ZsYWdzICYgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSkgewotCQlyZXQgPSB3LT5ldmVudCh3LCBOVUxMLCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qIEdlbmVyaWMgY2hlY2sgdG8gc2VlIGlmIGEgd2lkZ2V0IHNob3VsZCBiZSBwb3dlcmVkLgogICovCiBzdGF0aWMgaW50IGRhcG1fZ2VuZXJpY19jaGVja19wb3dlcihzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdykKQEAgLTk4MSwxNiArOTcyLDYgQEAKIAkJCQkJICAgICAgIE5VTEwsIFNORF9TT0NfREFQTV9QT1NUX1BNRCk7CiAJCQlicmVhazsKIAotCQljYXNlIHNuZF9zb2NfZGFwbV9pbnB1dDoKLQkJY2FzZSBzbmRfc29jX2RhcG1fb3V0cHV0OgotCQljYXNlIHNuZF9zb2NfZGFwbV9ocDoKLQkJY2FzZSBzbmRfc29jX2RhcG1fbWljOgotCQljYXNlIHNuZF9zb2NfZGFwbV9saW5lOgotCQljYXNlIHNuZF9zb2NfZGFwbV9zcGs6Ci0JCQkvKiBObyByZWdpc3RlciBzdXBwb3J0IGN1cnJlbnRseSAqLwotCQkJcmV0ID0gZGFwbV9nZW5lcmljX2FwcGx5X3Bvd2VyKHcpOwotCQkJYnJlYWs7Ci0KIAkJZGVmYXVsdDoKIAkJCS8qIFF1ZXVlIGl0IHVwIGZvciBhcHBsaWNhdGlvbiAqLwogCQkJY3VyX3NvcnQgPSBzb3J0W3ctPmlkXTsKQEAgLTEyMDEsNiArMTE4MiwxNSBAQAogCQl9CiAJfQogCisJLyogRm9yY2UgYWxsIGNvbnRleHRzIGluIHRoZSBjYXJkIHRvIHRoZSBzYW1lIGJpYXMgc3RhdGUgKi8KKwlwb3dlciA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkLCAmY2FyZC0+ZGFwbV9saXN0LCBsaXN0KQorCQlpZiAoZC0+ZGV2X3Bvd2VyKQorCQkJcG93ZXIgPSAxOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZCwgJmNhcmQtPmRhcG1fbGlzdCwgbGlzdCkKKwkJZC0+ZGV2X3Bvd2VyID0gcG93ZXI7CisKKwogCS8qIFJ1biBhbGwgdGhlIGJpYXMgY2hhbmdlcyBpbiBwYXJhbGxlbCAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZCwgJmRhcG0tPmNhcmQtPmRhcG1fbGlzdCwgbGlzdCkKIAkJYXN5bmNfc2NoZWR1bGVfZG9tYWluKGRhcG1fcHJlX3NlcXVlbmNlX2FzeW5jLCBkLApAQCAtMTMwNCwzMSArMTI5NCwxMDQgQEAKIAkubGxzZWVrID0gZGVmYXVsdF9sbHNlZWssCiB9OwogCi12b2lkIHNuZF9zb2NfZGFwbV9kZWJ1Z2ZzX2luaXQoc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtKQorc3RhdGljIGludCBkYXBtX2JpYXNfb3Blbl9maWxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3OworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGRhcG1fYmlhc19yZWFkX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciAqbGV2ZWw7CisKKwlzd2l0Y2ggKGRhcG0tPmJpYXNfbGV2ZWwpIHsKKwljYXNlIFNORF9TT0NfQklBU19PTjoKKwkJbGV2ZWwgPSAiT25cbiI7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6CisJCWxldmVsID0gIlByZXBhcmVcbiI7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CisJCWxldmVsID0gIlN0YW5kYnlcbiI7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKKwkJbGV2ZWwgPSAiT2ZmXG4iOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJbGV2ZWwgPSAiVW5rbm93blxuIjsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgbGV2ZWwsCisJCQkJICAgICAgIHN0cmxlbihsZXZlbCkpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkYXBtX2JpYXNfZm9wcyA9IHsKKwkub3BlbiA9IGRhcG1fYmlhc19vcGVuX2ZpbGUsCisJLnJlYWQgPSBkYXBtX2JpYXNfcmVhZF9maWxlLAorCS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywKK307CisKK3ZvaWQgc25kX3NvY19kYXBtX2RlYnVnZnNfaW5pdChzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0sCisJc3RydWN0IGRlbnRyeSAqcGFyZW50KQorewogCXN0cnVjdCBkZW50cnkgKmQ7CiAKLQlpZiAoIWRhcG0tPmRlYnVnZnNfZGFwbSkKKwlkYXBtLT5kZWJ1Z2ZzX2RhcG0gPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImRhcG0iLCBwYXJlbnQpOworCisJaWYgKCFkYXBtLT5kZWJ1Z2ZzX2RhcG0pIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIkZhaWxlZCB0byBjcmVhdGUgREFQTSBkZWJ1Z2ZzIGRpcmVjdG9yeVxuIik7CisJCXJldHVybjsKKwl9CisKKwlkID0gZGVidWdmc19jcmVhdGVfZmlsZSgiYmlhc19sZXZlbCIsIDA0NDQsCisJCQkJZGFwbS0+ZGVidWdmc19kYXBtLCBkYXBtLAorCQkJCSZkYXBtX2JpYXNfZm9wcyk7CisJaWYgKCFkKQorCQlkZXZfd2FybihkYXBtLT5kZXYsCisJCQkgIkFTb0M6IEZhaWxlZCB0byBjcmVhdGUgYmlhcyBsZXZlbCBkZWJ1Z2ZzIGZpbGVcbiIpOworfQorCitzdGF0aWMgdm9pZCBkYXBtX2RlYnVnZnNfYWRkX3dpZGdldChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSB3LT5kYXBtOworCXN0cnVjdCBkZW50cnkgKmQ7CisKKwlpZiAoIWRhcG0tPmRlYnVnZnNfZGFwbSB8fCAhdy0+bmFtZSkKIAkJcmV0dXJuOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeSh3LCAmZGFwbS0+Y2FyZC0+d2lkZ2V0cywgbGlzdCkgewotCQlpZiAoIXctPm5hbWUgfHwgdy0+ZGFwbSAhPSBkYXBtKQotCQkJY29udGludWU7Ci0KLQkJZCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUody0+bmFtZSwgMDQ0NCwKLQkJCQkJZGFwbS0+ZGVidWdmc19kYXBtLCB3LAotCQkJCQkmZGFwbV93aWRnZXRfcG93ZXJfZm9wcyk7Ci0JCWlmICghZCkKLQkJCWRldl93YXJuKHctPmRhcG0tPmRldiwKLQkJCQkiQVNvQzogRmFpbGVkIHRvIGNyZWF0ZSAlcyBkZWJ1Z2ZzIGZpbGVcbiIsCi0JCQkJdy0+bmFtZSk7Ci0JfQorCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKHctPm5hbWUsIDA0NDQsCisJCQkJZGFwbS0+ZGVidWdmc19kYXBtLCB3LAorCQkJCSZkYXBtX3dpZGdldF9wb3dlcl9mb3BzKTsKKwlpZiAoIWQpCisJCWRldl93YXJuKHctPmRhcG0tPmRldiwKKwkJCSJBU29DOiBGYWlsZWQgdG8gY3JlYXRlICVzIGRlYnVnZnMgZmlsZVxuIiwKKwkJCXctPm5hbWUpOwogfQorCitzdGF0aWMgdm9pZCBkYXBtX2RlYnVnZnNfY2xlYW51cChzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0pCit7CisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGRhcG0tPmRlYnVnZnNfZGFwbSk7Cit9CisKICNlbHNlCi12b2lkIHNuZF9zb2NfZGFwbV9kZWJ1Z2ZzX2luaXQoc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtKQordm9pZCBzbmRfc29jX2RhcG1fZGVidWdmc19pbml0KHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwKKwlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQpCiB7CiB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkYXBtX2RlYnVnZnNfYWRkX3dpZGdldChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdykKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRhcG1fZGVidWdmc19jbGVhbnVwKHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSkKK3sKK30KKwogI2VuZGlmCiAKIC8qIHRlc3QgYW5kIHVwZGF0ZSB0aGUgcG93ZXIgc3RhdHVzIG9mIGEgbXV4IHdpZGdldCAqLwpAQCAtMTQ5NiwzMiArMTU1OSw0OSBAQAogCQkJa2ZyZWUocC0+bG9uZ19uYW1lKTsKIAkJCWtmcmVlKHApOwogCQl9CisJCWtmcmVlKHctPmtjb250cm9scyk7CiAJCWtmcmVlKHctPm5hbWUpOwogCQlrZnJlZSh3KTsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgc25kX3NvY19kYXBtX3NldF9waW4oc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtLAotCQkJCWNvbnN0IGNoYXIgKnBpbiwgaW50IHN0YXR1cykKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqZGFwbV9maW5kX3dpZGdldCgKKwkJCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwgY29uc3QgY2hhciAqcGluLAorCQkJYm9vbCBzZWFyY2hfb3RoZXJfY29udGV4dHMpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnc7CisJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKmZhbGxiYWNrID0gTlVMTDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkodywgJmRhcG0tPmNhcmQtPndpZGdldHMsIGxpc3QpIHsKLQkJaWYgKHctPmRhcG0gIT0gZGFwbSkKLQkJCWNvbnRpbnVlOwogCQlpZiAoIXN0cmNtcCh3LT5uYW1lLCBwaW4pKSB7Ci0JCQlkZXZfZGJnKHctPmRhcG0tPmRldiwgImRhcG06IHBpbiAlcyA9ICVkXG4iLAotCQkJCXBpbiwgc3RhdHVzKTsKLQkJCXctPmNvbm5lY3RlZCA9IHN0YXR1czsKLQkJCS8qIEFsbG93IGRpc2FibGluZyBvZiBmb3JjZWQgcGlucyAqLwotCQkJaWYgKHN0YXR1cyA9PSAwKQotCQkJCXctPmZvcmNlID0gMDsKLQkJCXJldHVybiAwOworCQkJaWYgKHctPmRhcG0gPT0gZGFwbSkKKwkJCQlyZXR1cm4gdzsKKwkJCWVsc2UKKwkJCQlmYWxsYmFjayA9IHc7CiAJCX0KIAl9CiAKLQlkZXZfZXJyKGRhcG0tPmRldiwgImRhcG06IHVua25vd24gcGluICVzXG4iLCBwaW4pOwotCXJldHVybiAtRUlOVkFMOworCWlmIChzZWFyY2hfb3RoZXJfY29udGV4dHMpCisJCXJldHVybiBmYWxsYmFjazsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHNuZF9zb2NfZGFwbV9zZXRfcGluKHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwKKwkJCQljb25zdCBjaGFyICpwaW4sIGludCBzdGF0dXMpCit7CisJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncgPSBkYXBtX2ZpbmRfd2lkZ2V0KGRhcG0sIHBpbiwgdHJ1ZSk7CisKKwlpZiAoIXcpIHsKKwkJZGV2X2VycihkYXBtLT5kZXYsICJkYXBtOiB1bmtub3duIHBpbiAlc1xuIiwgcGluKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdy0+Y29ubmVjdGVkID0gc3RhdHVzOworCWlmIChzdGF0dXMgPT0gMCkKKwkJdy0+Zm9yY2UgPSAwOworCisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMTYyNyw3ICsxNzA3LDcgQEAKIAl9CiAKIAkvKiBjb25uZWN0IGR5bmFtaWMgcGF0aHMgKi8KLQlzd2l0Y2god3NpbmstPmlkKSB7CisJc3dpdGNoICh3c2luay0+aWQpIHsKIAljYXNlIHNuZF9zb2NfZGFwbV9hZGM6CiAJY2FzZSBzbmRfc29jX2RhcG1fZGFjOgogCWNhc2Ugc25kX3NvY19kYXBtX3BnYToKQEAgLTE2NTAsNyArMTczMCw3IEBACiAJY2FzZSBzbmRfc29jX2RhcG1fdmlydF9tdXg6CiAJY2FzZSBzbmRfc29jX2RhcG1fdmFsdWVfbXV4OgogCQlyZXQgPSBkYXBtX2Nvbm5lY3RfbXV4KGRhcG0sIHdzb3VyY2UsIHdzaW5rLCBwYXRoLCBjb250cm9sLAotCQkJJndzaW5rLT5rY29udHJvbHNbMF0pOworCQkJJndzaW5rLT5rY29udHJvbF9uZXdzWzBdKTsKIAkJaWYgKHJldCAhPSAwKQogCQkJZ290byBlcnI7CiAJCWJyZWFrOwpAQCAtMTczMCw2ICsxODEwLDE0IEBACiAJCWlmICh3LT5uZXcpCiAJCQljb250aW51ZTsKIAorCQlpZiAody0+bnVtX2tjb250cm9scykgeworCQkJdy0+a2NvbnRyb2xzID0ga3phbGxvYyh3LT5udW1fa2NvbnRyb2xzICoKKwkJCQkJCXNpemVvZihzdHJ1Y3Qgc25kX2tjb250cm9sICopLAorCQkJCQkJR0ZQX0tFUk5FTCk7CisJCQlpZiAoIXctPmtjb250cm9scykKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCiAJCXN3aXRjaCh3LT5pZCkgewogCQljYXNlIHNuZF9zb2NfZGFwbV9zd2l0Y2g6CiAJCWNhc2Ugc25kX3NvY19kYXBtX21peGVyOgpAQCAtMTc4NSw2ICsxODczLDggQEAKIAkJfQogCiAJCXctPm5ldyA9IDE7CisKKwkJZGFwbV9kZWJ1Z2ZzX2FkZF93aWRnZXQodyk7CiAJfQogCiAJZGFwbV9wb3dlcl93aWRnZXRzKGRhcG0sIFNORF9TT0NfREFQTV9TVFJFQU1fTk9QKTsKQEAgLTE4MDQsNyArMTg5NCw4IEBACiBpbnQgc25kX3NvY19kYXBtX2dldF92b2xzdyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqd2lkZ2V0ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0X2xpc3QgKndsaXN0ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3aWRnZXQgPSB3bGlzdC0+d2lkZ2V0c1swXTsKIAlzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKm1jID0KIAkJKHN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqKWtjb250cm9sLT5wcml2YXRlX3ZhbHVlOwogCXVuc2lnbmVkIGludCByZWcgPSBtYy0+cmVnOwpAQCAtMTg0Myw3ICsxOTM0LDkgQEAKIGludCBzbmRfc29jX2RhcG1fcHV0X3ZvbHN3KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewotCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3aWRnZXQgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXRfbGlzdCAqd2xpc3QgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKndpZGdldCA9IHdsaXN0LT53aWRnZXRzWzBdOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHdpZGdldC0+Y29kZWM7CiAJc3RydWN0IHNvY19taXhlcl9jb250cm9sICptYyA9CiAJCShzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKIAl1bnNpZ25lZCBpbnQgcmVnID0gbWMtPnJlZzsKQEAgLTE4NTQsNiArMTk0Nyw3IEBACiAJdW5zaWduZWQgaW50IHZhbDsKIAlpbnQgY29ubmVjdCwgY2hhbmdlOwogCXN0cnVjdCBzbmRfc29jX2RhcG1fdXBkYXRlIHVwZGF0ZTsKKwlpbnQgd2k7CiAKIAl2YWwgPSAodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiBtYXNrKTsKIApAQCAtMTg2MiwzMSArMTk1NiwzNiBAQAogCW1hc2sgPSBtYXNrIDw8IHNoaWZ0OwogCXZhbCA9IHZhbCA8PCBzaGlmdDsKIAotCW11dGV4X2xvY2soJndpZGdldC0+Y29kZWMtPm11dGV4KTsKLQl3aWRnZXQtPnZhbHVlID0gdmFsOworCWlmICh2YWwpCisJCS8qIG5ldyBjb25uZWN0aW9uICovCisJCWNvbm5lY3QgPSBpbnZlcnQgPyAwIDogMTsKKwllbHNlCisJCS8qIG9sZCBjb25uZWN0aW9uIG11c3QgYmUgcG93ZXJlZCBkb3duICovCisJCWNvbm5lY3QgPSBpbnZlcnQgPyAxIDogMDsKKworCW11dGV4X2xvY2soJmNvZGVjLT5tdXRleCk7CiAKIAljaGFuZ2UgPSBzbmRfc29jX3Rlc3RfYml0cyh3aWRnZXQtPmNvZGVjLCByZWcsIG1hc2ssIHZhbCk7CiAJaWYgKGNoYW5nZSkgewotCQlpZiAodmFsKQotCQkJLyogbmV3IGNvbm5lY3Rpb24gKi8KLQkJCWNvbm5lY3QgPSBpbnZlcnQgPyAwOjE7Ci0JCWVsc2UKLQkJCS8qIG9sZCBjb25uZWN0aW9uIG11c3QgYmUgcG93ZXJlZCBkb3duICovCi0JCQljb25uZWN0ID0gaW52ZXJ0ID8gMTowOworCQlmb3IgKHdpID0gMDsgd2kgPCB3bGlzdC0+bnVtX3dpZGdldHM7IHdpKyspIHsKKwkJCXdpZGdldCA9IHdsaXN0LT53aWRnZXRzW3dpXTsKIAotCQl1cGRhdGUua2NvbnRyb2wgPSBrY29udHJvbDsKLQkJdXBkYXRlLndpZGdldCA9IHdpZGdldDsKLQkJdXBkYXRlLnJlZyA9IHJlZzsKLQkJdXBkYXRlLm1hc2sgPSBtYXNrOwotCQl1cGRhdGUudmFsID0gdmFsOwotCQl3aWRnZXQtPmRhcG0tPnVwZGF0ZSA9ICZ1cGRhdGU7CisJCQl3aWRnZXQtPnZhbHVlID0gdmFsOwogCi0JCWRhcG1fbWl4ZXJfdXBkYXRlX3Bvd2VyKHdpZGdldCwga2NvbnRyb2wsIGNvbm5lY3QpOworCQkJdXBkYXRlLmtjb250cm9sID0ga2NvbnRyb2w7CisJCQl1cGRhdGUud2lkZ2V0ID0gd2lkZ2V0OworCQkJdXBkYXRlLnJlZyA9IHJlZzsKKwkJCXVwZGF0ZS5tYXNrID0gbWFzazsKKwkJCXVwZGF0ZS52YWwgPSB2YWw7CisJCQl3aWRnZXQtPmRhcG0tPnVwZGF0ZSA9ICZ1cGRhdGU7CiAKLQkJd2lkZ2V0LT5kYXBtLT51cGRhdGUgPSBOVUxMOworCQkJZGFwbV9taXhlcl91cGRhdGVfcG93ZXIod2lkZ2V0LCBrY29udHJvbCwgY29ubmVjdCk7CisKKwkJCXdpZGdldC0+ZGFwbS0+dXBkYXRlID0gTlVMTDsKKwkJfQogCX0KIAotCW11dGV4X3VubG9jaygmd2lkZ2V0LT5jb2RlYy0+bXV0ZXgpOworCW11dGV4X3VubG9jaygmY29kZWMtPm11dGV4KTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfZGFwbV9wdXRfdm9sc3cpOwpAQCAtMTkwMyw3ICsyMDAyLDggQEAKIGludCBzbmRfc29jX2RhcG1fZ2V0X2VudW1fZG91YmxlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewotCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3aWRnZXQgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXRfbGlzdCAqd2xpc3QgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKndpZGdldCA9IHdsaXN0LT53aWRnZXRzWzBdOwogCXN0cnVjdCBzb2NfZW51bSAqZSA9IChzdHJ1Y3Qgc29jX2VudW0gKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKIAl1bnNpZ25lZCBpbnQgdmFsLCBiaXRtYXNrOwogCkBAIC0xOTMxLDExICsyMDMxLDE0IEBACiBpbnQgc25kX3NvY19kYXBtX3B1dF9lbnVtX2RvdWJsZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqd2lkZ2V0ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0X2xpc3QgKndsaXN0ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3aWRnZXQgPSB3bGlzdC0+d2lkZ2V0c1swXTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3aWRnZXQtPmNvZGVjOwogCXN0cnVjdCBzb2NfZW51bSAqZSA9IChzdHJ1Y3Qgc29jX2VudW0gKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKIAl1bnNpZ25lZCBpbnQgdmFsLCBtdXgsIGNoYW5nZTsKIAl1bnNpZ25lZCBpbnQgbWFzaywgYml0bWFzazsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3VwZGF0ZSB1cGRhdGU7CisJaW50IHdpOwogCiAJZm9yIChiaXRtYXNrID0gMTsgYml0bWFzayA8IGUtPm1heDsgYml0bWFzayA8PD0gMSkKIAkJOwpAQCAtMTk1MSwyMiArMjA1NCwyOSBAQAogCQltYXNrIHw9IChiaXRtYXNrIC0gMSkgPDwgZS0+c2hpZnRfcjsKIAl9CiAKLQltdXRleF9sb2NrKCZ3aWRnZXQtPmNvZGVjLT5tdXRleCk7Ci0Jd2lkZ2V0LT52YWx1ZSA9IHZhbDsKKwltdXRleF9sb2NrKCZjb2RlYy0+bXV0ZXgpOworCiAJY2hhbmdlID0gc25kX3NvY190ZXN0X2JpdHMod2lkZ2V0LT5jb2RlYywgZS0+cmVnLCBtYXNrLCB2YWwpOworCWlmIChjaGFuZ2UpIHsKKwkJZm9yICh3aSA9IDA7IHdpIDwgd2xpc3QtPm51bV93aWRnZXRzOyB3aSsrKSB7CisJCQl3aWRnZXQgPSB3bGlzdC0+d2lkZ2V0c1t3aV07CiAKLQl1cGRhdGUua2NvbnRyb2wgPSBrY29udHJvbDsKLQl1cGRhdGUud2lkZ2V0ID0gd2lkZ2V0OwotCXVwZGF0ZS5yZWcgPSBlLT5yZWc7Ci0JdXBkYXRlLm1hc2sgPSBtYXNrOwotCXVwZGF0ZS52YWwgPSB2YWw7Ci0Jd2lkZ2V0LT5kYXBtLT51cGRhdGUgPSAmdXBkYXRlOworCQkJd2lkZ2V0LT52YWx1ZSA9IHZhbDsKIAotCWRhcG1fbXV4X3VwZGF0ZV9wb3dlcih3aWRnZXQsIGtjb250cm9sLCBjaGFuZ2UsIG11eCwgZSk7CisJCQl1cGRhdGUua2NvbnRyb2wgPSBrY29udHJvbDsKKwkJCXVwZGF0ZS53aWRnZXQgPSB3aWRnZXQ7CisJCQl1cGRhdGUucmVnID0gZS0+cmVnOworCQkJdXBkYXRlLm1hc2sgPSBtYXNrOworCQkJdXBkYXRlLnZhbCA9IHZhbDsKKwkJCXdpZGdldC0+ZGFwbS0+dXBkYXRlID0gJnVwZGF0ZTsKIAotCXdpZGdldC0+ZGFwbS0+dXBkYXRlID0gTlVMTDsKKwkJCWRhcG1fbXV4X3VwZGF0ZV9wb3dlcih3aWRnZXQsIGtjb250cm9sLCBjaGFuZ2UsIG11eCwgZSk7CiAKLQltdXRleF91bmxvY2soJndpZGdldC0+Y29kZWMtPm11dGV4KTsKKwkJCXdpZGdldC0+ZGFwbS0+dXBkYXRlID0gTlVMTDsKKwkJfQorCX0KKworCW11dGV4X3VubG9jaygmY29kZWMtPm11dGV4KTsKIAlyZXR1cm4gY2hhbmdlOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19kYXBtX3B1dF9lbnVtX2RvdWJsZSk7CkBAIC0xOTgxLDcgKzIwOTEsOCBAQAogaW50IHNuZF9zb2NfZGFwbV9nZXRfZW51bV92aXJ0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewotCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3aWRnZXQgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXRfbGlzdCAqd2xpc3QgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKndpZGdldCA9IHdsaXN0LT53aWRnZXRzWzBdOwogCiAJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IHdpZGdldC0+dmFsdWU7CiAKQEAgLTE5OTksMjIgKzIxMTAsMzMgQEAKIGludCBzbmRfc29jX2RhcG1fcHV0X2VudW1fdmlydChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqd2lkZ2V0ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0X2xpc3QgKndsaXN0ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3aWRnZXQgPSB3bGlzdC0+d2lkZ2V0c1swXTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3aWRnZXQtPmNvZGVjOwogCXN0cnVjdCBzb2NfZW51bSAqZSA9CiAJCShzdHJ1Y3Qgc29jX2VudW0gKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKIAlpbnQgY2hhbmdlOwogCWludCByZXQgPSAwOworCWludCB3aTsKIAogCWlmICh1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID49IGUtPm1heCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltdXRleF9sb2NrKCZ3aWRnZXQtPmNvZGVjLT5tdXRleCk7CisJbXV0ZXhfbG9jaygmY29kZWMtPm11dGV4KTsKIAogCWNoYW5nZSA9IHdpZGdldC0+dmFsdWUgIT0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKLQl3aWRnZXQtPnZhbHVlID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKLQlkYXBtX211eF91cGRhdGVfcG93ZXIod2lkZ2V0LCBrY29udHJvbCwgY2hhbmdlLCB3aWRnZXQtPnZhbHVlLCBlKTsKKwlpZiAoY2hhbmdlKSB7CisJCWZvciAod2kgPSAwOyB3aSA8IHdsaXN0LT5udW1fd2lkZ2V0czsgd2krKykgeworCQkJd2lkZ2V0ID0gd2xpc3QtPndpZGdldHNbd2ldOwogCi0JbXV0ZXhfdW5sb2NrKCZ3aWRnZXQtPmNvZGVjLT5tdXRleCk7CisJCQl3aWRnZXQtPnZhbHVlID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKKworCQkJZGFwbV9tdXhfdXBkYXRlX3Bvd2VyKHdpZGdldCwga2NvbnRyb2wsIGNoYW5nZSwKKwkJCQkJICAgICAgd2lkZ2V0LT52YWx1ZSwgZSk7CisJCX0KKwl9CisKKwltdXRleF91bmxvY2soJmNvZGVjLT5tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfZGFwbV9wdXRfZW51bV92aXJ0KTsKQEAgLTIwMzUsNyArMjE1Nyw4IEBACiBpbnQgc25kX3NvY19kYXBtX2dldF92YWx1ZV9lbnVtX2RvdWJsZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqd2lkZ2V0ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0X2xpc3QgKndsaXN0ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3aWRnZXQgPSB3bGlzdC0+d2lkZ2V0c1swXTsKIAlzdHJ1Y3Qgc29jX2VudW0gKmUgPSAoc3RydWN0IHNvY19lbnVtICopa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CiAJdW5zaWduZWQgaW50IHJlZ192YWwsIHZhbCwgbXV4OwogCkBAIC0yMDc1LDExICsyMTk4LDE0IEBACiBpbnQgc25kX3NvY19kYXBtX3B1dF92YWx1ZV9lbnVtX2RvdWJsZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqd2lkZ2V0ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0X2xpc3QgKndsaXN0ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3aWRnZXQgPSB3bGlzdC0+d2lkZ2V0c1swXTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3aWRnZXQtPmNvZGVjOwogCXN0cnVjdCBzb2NfZW51bSAqZSA9IChzdHJ1Y3Qgc29jX2VudW0gKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKIAl1bnNpZ25lZCBpbnQgdmFsLCBtdXgsIGNoYW5nZTsKIAl1bnNpZ25lZCBpbnQgbWFzazsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3VwZGF0ZSB1cGRhdGU7CisJaW50IHdpOwogCiAJaWYgKHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPiBlLT5tYXggLSAxKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTIwOTMsMjIgKzIyMTksMjkgQEAKIAkJbWFzayB8PSBlLT5tYXNrIDw8IGUtPnNoaWZ0X3I7CiAJfQogCi0JbXV0ZXhfbG9jaygmd2lkZ2V0LT5jb2RlYy0+bXV0ZXgpOwotCXdpZGdldC0+dmFsdWUgPSB2YWw7CisJbXV0ZXhfbG9jaygmY29kZWMtPm11dGV4KTsKKwogCWNoYW5nZSA9IHNuZF9zb2NfdGVzdF9iaXRzKHdpZGdldC0+Y29kZWMsIGUtPnJlZywgbWFzaywgdmFsKTsKKwlpZiAoY2hhbmdlKSB7CisJCWZvciAod2kgPSAwOyB3aSA8IHdsaXN0LT5udW1fd2lkZ2V0czsgd2krKykgeworCQkJd2lkZ2V0ID0gd2xpc3QtPndpZGdldHNbd2ldOwogCi0JdXBkYXRlLmtjb250cm9sID0ga2NvbnRyb2w7Ci0JdXBkYXRlLndpZGdldCA9IHdpZGdldDsKLQl1cGRhdGUucmVnID0gZS0+cmVnOwotCXVwZGF0ZS5tYXNrID0gbWFzazsKLQl1cGRhdGUudmFsID0gdmFsOwotCXdpZGdldC0+ZGFwbS0+dXBkYXRlID0gJnVwZGF0ZTsKKwkJCXdpZGdldC0+dmFsdWUgPSB2YWw7CiAKLQlkYXBtX211eF91cGRhdGVfcG93ZXIod2lkZ2V0LCBrY29udHJvbCwgY2hhbmdlLCBtdXgsIGUpOworCQkJdXBkYXRlLmtjb250cm9sID0ga2NvbnRyb2w7CisJCQl1cGRhdGUud2lkZ2V0ID0gd2lkZ2V0OworCQkJdXBkYXRlLnJlZyA9IGUtPnJlZzsKKwkJCXVwZGF0ZS5tYXNrID0gbWFzazsKKwkJCXVwZGF0ZS52YWwgPSB2YWw7CisJCQl3aWRnZXQtPmRhcG0tPnVwZGF0ZSA9ICZ1cGRhdGU7CiAKLQl3aWRnZXQtPmRhcG0tPnVwZGF0ZSA9IE5VTEw7CisJCQlkYXBtX211eF91cGRhdGVfcG93ZXIod2lkZ2V0LCBrY29udHJvbCwgY2hhbmdlLCBtdXgsIGUpOwogCi0JbXV0ZXhfdW5sb2NrKCZ3aWRnZXQtPmNvZGVjLT5tdXRleCk7CisJCQl3aWRnZXQtPmRhcG0tPnVwZGF0ZSA9IE5VTEw7CisJCX0KKwl9CisKKwltdXRleF91bmxvY2soJmNvZGVjLT5tdXRleCk7CiAJcmV0dXJuIGNoYW5nZTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfZGFwbV9wdXRfdmFsdWVfZW51bV9kb3VibGUpOwpAQCAtMjM0NiwyMiArMjQ3OSwxOCBAQAogaW50IHNuZF9zb2NfZGFwbV9mb3JjZV9lbmFibGVfcGluKHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwKIAkJCQkgIGNvbnN0IGNoYXIgKnBpbikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdzsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdyA9IGRhcG1fZmluZF93aWRnZXQoZGFwbSwgcGluLCB0cnVlKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkodywgJmRhcG0tPmNhcmQtPndpZGdldHMsIGxpc3QpIHsKLQkJaWYgKHctPmRhcG0gIT0gZGFwbSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoIXN0cmNtcCh3LT5uYW1lLCBwaW4pKSB7Ci0JCQlkZXZfZGJnKHctPmRhcG0tPmRldiwKLQkJCQkiZGFwbTogZm9yY2UgZW5hYmxlIHBpbiAlc1xuIiwgcGluKTsKLQkJCXctPmNvbm5lY3RlZCA9IDE7Ci0JCQl3LT5mb3JjZSA9IDE7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCWlmICghdykgeworCQlkZXZfZXJyKGRhcG0tPmRldiwgImRhcG06IHVua25vd24gcGluICVzXG4iLCBwaW4pOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlkZXZfZXJyKGRhcG0tPmRldiwgImRhcG06IHVua25vd24gcGluICVzXG4iLCBwaW4pOwotCXJldHVybiAtRUlOVkFMOworCWRldl9kYmcody0+ZGFwbS0+ZGV2LCAiZGFwbTogZm9yY2UgZW5hYmxlIHBpbiAlc1xuIiwgcGluKTsKKwl3LT5jb25uZWN0ZWQgPSAxOworCXctPmZvcmNlID0gMTsKKworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19kYXBtX2ZvcmNlX2VuYWJsZV9waW4pOwogCkBAIC0yNDEzLDE0ICsyNTQyLDEwIEBACiBpbnQgc25kX3NvY19kYXBtX2dldF9waW5fc3RhdHVzKHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwKIAkJCQljb25zdCBjaGFyICpwaW4pCiB7Ci0Jc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnc7CisJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncgPSBkYXBtX2ZpbmRfd2lkZ2V0KGRhcG0sIHBpbiwgdHJ1ZSk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsICZkYXBtLT5jYXJkLT53aWRnZXRzLCBsaXN0KSB7Ci0JCWlmICh3LT5kYXBtICE9IGRhcG0pCi0JCQljb250aW51ZTsKLQkJaWYgKCFzdHJjbXAody0+bmFtZSwgcGluKSkKLQkJCXJldHVybiB3LT5jb25uZWN0ZWQ7Ci0JfQorCWlmICh3KQorCQlyZXR1cm4gdy0+Y29ubmVjdGVkOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNDQwLDE5ICsyNTY1LDE2IEBACiBpbnQgc25kX3NvY19kYXBtX2lnbm9yZV9zdXNwZW5kKHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwKIAkJCQljb25zdCBjaGFyICpwaW4pCiB7Ci0Jc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnc7CisJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncgPSBkYXBtX2ZpbmRfd2lkZ2V0KGRhcG0sIHBpbiwgZmFsc2UpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeSh3LCAmZGFwbS0+Y2FyZC0+d2lkZ2V0cywgbGlzdCkgewotCQlpZiAody0+ZGFwbSAhPSBkYXBtKQotCQkJY29udGludWU7Ci0JCWlmICghc3RyY21wKHctPm5hbWUsIHBpbikpIHsKLQkJCXctPmlnbm9yZV9zdXNwZW5kID0gMTsKLQkJCXJldHVybiAwOwotCQl9CisJaWYgKCF3KSB7CisJCWRldl9lcnIoZGFwbS0+ZGV2LCAiZGFwbTogdW5rbm93biBwaW4gJXNcbiIsIHBpbik7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWRldl9lcnIoZGFwbS0+ZGV2LCAiZGFwbTogdW5rbm93biBwaW4gJXNcbiIsIHBpbik7Ci0JcmV0dXJuIC1FSU5WQUw7CisJdy0+aWdub3JlX3N1c3BlbmQgPSAxOworCisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2RhcG1faWdub3JlX3N1c3BlbmQpOwogCkBAIC0yNDY1LDYgKzI1ODcsNyBAQAogdm9pZCBzbmRfc29jX2RhcG1fZnJlZShzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0pCiB7CiAJc25kX3NvY19kYXBtX3N5c19yZW1vdmUoZGFwbS0+ZGV2KTsKKwlkYXBtX2RlYnVnZnNfY2xlYW51cChkYXBtKTsKIAlkYXBtX2ZyZWVfd2lkZ2V0cyhkYXBtKTsKIAlsaXN0X2RlbCgmZGFwbS0+bGlzdCk7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWphY2suYyBiL3NvdW5kL3NvYy9zb2MtamFjay5jCmluZGV4IGZjMDE3YzAuLjdjMTdiOTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtamFjay5jCisrKyBiL3NvdW5kL3NvYy9zb2MtamFjay5jCkBAIC0zMjUsNyArMzI1LDcgQEAKIAkJCQkJICAgICAgZ3Bpb19oYW5kbGVyLAogCQkJCQkgICAgICBJUlFGX1RSSUdHRVJfUklTSU5HIHwKIAkJCQkJICAgICAgSVJRRl9UUklHR0VSX0ZBTExJTkcsCi0JCQkJCSAgICAgIGphY2stPmNvZGVjLT5kZXYtPmRyaXZlci0+bmFtZSwKKwkJCQkJICAgICAgZ3Bpb3NbaV0ubmFtZSwKIAkJCQkJICAgICAgJmdwaW9zW2ldKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy11dGlscy5jIGIvc291bmQvc29jL3NvYy11dGlscy5jCmluZGV4IDNmNDVlNmEuLmVjOTIxZWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtdXRpbHMuYworKysgYi9zb3VuZC9zb2Mvc29jLXV0aWxzLmMKQEAgLTEzLDYgKzEzLDcgQEAKICAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgpAQCAtNTUsMyArNTYsNTUgQEAKIAkJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfcGFyYW1zX3RvX2JjbGspOworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfcGxhdGZvcm1fZHJpdmVyIGR1bW15X3BsYXRmb3JtOworCitzdGF0aWMgX19kZXZpbml0IGludCBzbmRfc29jX2R1bW15X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIHNuZF9zb2NfcmVnaXN0ZXJfcGxhdGZvcm0oJnBkZXYtPmRldiwgJmR1bW15X3BsYXRmb3JtKTsKK30KKworc3RhdGljIF9fZGV2ZXhpdCBpbnQgc25kX3NvY19kdW1teV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzbmRfc29jX3VucmVnaXN0ZXJfcGxhdGZvcm0oJnBkZXYtPmRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc29jX2R1bW15X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJzbmQtc29jLWR1bW15IiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSBzbmRfc29jX2R1bW15X3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfc29jX2R1bW15X3JlbW92ZSksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc29jX2R1bW15X2RldjsKKworaW50IF9faW5pdCBzbmRfc29jX3V0aWxfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlzb2NfZHVtbXlfZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzbmQtc29jLWR1bW15IiwgLTEpOworCWlmICghc29jX2R1bW15X2RldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHNvY19kdW1teV9kZXYpOworCWlmIChyZXQgIT0gMCkgeworCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHNvY19kdW1teV9kZXYpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc29jX2R1bW15X2RyaXZlcik7CisJaWYgKHJldCAhPSAwKQorCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcihzb2NfZHVtbXlfZGV2KTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgX19leGl0IHNuZF9zb2NfdXRpbF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoc29jX2R1bW15X2Rldik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNvY19kdW1teV9kcml2ZXIpOworfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3RlZ3JhL0tjb25maWcgYi9zb3VuZC9zb2MvdGVncmEvS2NvbmZpZwppbmRleCA2NmI1MDRmLi4wMzVkMzlhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvdGVncmEvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvdGVncmEvS2NvbmZpZwpAQCAtMSwyNiArMSw0MCBAQAotY29uZmlnIFNORF9URUdSQV9TT0MKK2NvbmZpZyBTTkRfU09DX1RFR1JBCiAJdHJpc3RhdGUgIlNvQyBBdWRpbyBmb3IgdGhlIFRlZ3JhIFN5c3RlbS1vbi1DaGlwIgogCWRlcGVuZHMgb24gQVJDSF9URUdSQSAmJiBURUdSQV9TWVNURU1fRE1BCi0JZGVmYXVsdCBtCiAJaGVscAogCSAgU2F5IFkgb3IgTSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiBUZWdyYS4KIAotY29uZmlnIFNORF9URUdSQV9TT0NfSTJTCitjb25maWcgU05EX1NPQ19URUdSQV9JMlMKIAl0cmlzdGF0ZQotCWRlcGVuZHMgb24gU05EX1RFR1JBX1NPQwotCWRlZmF1bHQgbQorCWRlcGVuZHMgb24gU05EX1NPQ19URUdSQQogCWhlbHAKIAkgIFNheSBZIG9yIE0gaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIGNvZGVjcyBhdHRhY2hlZCB0byB0aGUKIAkgIFRlZ3JhIEkyUyBpbnRlcmZhY2UuIFlvdSB3aWxsIGFsc28gbmVlZCB0byBzZWxlY3QgdGhlIGluZGl2aWR1YWwKIAkgIG1hY2hpbmUgZHJpdmVycyB0byBzdXBwb3J0IGJlbG93LgogCi1jb25maWcgU05EX1RFR1JBX1NPQ19IQVJNT05ZCi0JdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBUZWdyYSBIYXJtb255IHJlZmVyZW5jZSBib2FyZCIKLQlkZXBlbmRzIG9uIFNORF9URUdSQV9TT0MgJiYgTUFDSF9IQVJNT05ZICYmIEkyQwotCWRlZmF1bHQgbQotCXNlbGVjdCBTTkRfVEVHUkFfU09DX0kyUworY29uZmlnIE1BQ0hfSEFTX1NORF9TT0NfVEVHUkFfV004OTAzCisJYm9vbAorCWhlbHAKKwkgIE1hY2hpbmVzIHRoYXQgdXNlIHRoZSBTTkRfU09DX1RFR1JBX1dNODkwMyBkcml2ZXIgc2hvdWxkIHNlbGVjdAorCSAgdGhpcyBjb25maWcgb3B0aW9uLCBpbiBvcmRlciB0byBhbGxvdyB0aGUgdXNlciB0byBlbmFibGUKKwkgIFNORF9TT0NfVEVHUkFfV004OTAzLgorCitjb25maWcgU05EX1NPQ19URUdSQV9XTTg5MDMKKwl0cmlzdGF0ZSAiU29DIEF1ZGlvIHN1cHBvcnQgZm9yIFRlZ3JhIGJvYXJkcyB1c2luZyBhIFdNODkwMyBjb2RlYyIKKwlkZXBlbmRzIG9uIFNORF9TT0NfVEVHUkEgJiYgSTJDCisJZGVwZW5kcyBvbiBNQUNIX0hBU19TTkRfU09DX1RFR1JBX1dNODkwMworCXNlbGVjdCBTTkRfU09DX1RFR1JBX0kyUwogCXNlbGVjdCBTTkRfU09DX1dNODkwMwogCWhlbHAKLQkgIFNheSBZIG9yIE0gaGVyZSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIHRoZQotCSAgVGVncmEgSGFybW9ueSByZWZlcmVuY2UgYm9hcmQuCisJICBTYXkgWSBvciBNIGhlcmUgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiBUZWdyYQorCSAgYm9hcmRzIHVzaW5nIHRoZSBXTTgwOTMgY29kZWMuIEN1cnJlbnRseSwgdGhlIHN1cHBvcnRlZCBib2FyZHMgYXJlCisJICBIYXJtb255LCBWZW50YW5hLCBTZWFib2FyZCwgS2FlbiwgYW5kIEFlYmwuCiAKK2NvbmZpZyBTTkRfU09DX1RFR1JBX1RSSU1TTElDRQorCXRyaXN0YXRlICJTb0MgQXVkaW8gc3VwcG9ydCBmb3IgVHJpbVNsaWNlIGJvYXJkIgorCWRlcGVuZHMgb24gU05EX1NPQ19URUdSQSAmJiBNQUNIX1RSSU1TTElDRSAmJiBJMkMKKwlzZWxlY3QgU05EX1NPQ19URUdSQV9JMlMKKwlzZWxlY3QgU05EX1NPQ19UTFYzMjBBSUMyMworCWhlbHAKKwkgIFNheSBZIG9yIE0gaGVyZSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIHRoZQorCSAgVHJpbVNsaWNlIHBsYXRmb3JtLgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3RlZ3JhL01ha2VmaWxlIGIvc291bmQvc29jL3RlZ3JhL01ha2VmaWxlCmluZGV4IGZkMTgzZDMuLmZhNjU3NGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy90ZWdyYS9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvdGVncmEvTWFrZWZpbGUKQEAgLTQsMTIgKzQsMTQgQEAKIHNuZC1zb2MtdGVncmEtaTJzLW9ianMgOj0gdGVncmFfaTJzLm8KIHNuZC1zb2MtdGVncmEtdXRpbHMtb2JqcyArPSB0ZWdyYV9hc29jX3V0aWxzLm8KIAotb2JqLSQoQ09ORklHX1NORF9URUdSQV9TT0MpICs9IHNuZC1zb2MtdGVncmEtdXRpbHMubwotb2JqLSQoQ09ORklHX1NORF9URUdSQV9TT0MpICs9IHNuZC1zb2MtdGVncmEtZGFzLm8KLW9iai0kKENPTkZJR19TTkRfVEVHUkFfU09DKSArPSBzbmQtc29jLXRlZ3JhLXBjbS5vCi1vYmotJChDT05GSUdfU05EX1RFR1JBX1NPQ19JMlMpICs9IHNuZC1zb2MtdGVncmEtaTJzLm8KK29iai0kKENPTkZJR19TTkRfU09DX1RFR1JBKSArPSBzbmQtc29jLXRlZ3JhLXV0aWxzLm8KK29iai0kKENPTkZJR19TTkRfU09DX1RFR1JBKSArPSBzbmQtc29jLXRlZ3JhLWRhcy5vCitvYmotJChDT05GSUdfU05EX1NPQ19URUdSQSkgKz0gc25kLXNvYy10ZWdyYS1wY20ubworb2JqLSQoQ09ORklHX1NORF9TT0NfVEVHUkFfSTJTKSArPSBzbmQtc29jLXRlZ3JhLWkycy5vCiAKICMgVGVncmEgbWFjaGluZSBTdXBwb3J0Ci1zbmQtc29jLXRlZ3JhLWhhcm1vbnktb2JqcyA6PSBoYXJtb255Lm8KK3NuZC1zb2MtdGVncmEtd204OTAzLW9ianMgOj0gdGVncmFfd204OTAzLm8KK3NuZC1zb2MtdGVncmEtdHJpbXNsaWNlLW9ianMgOj0gdHJpbXNsaWNlLm8KIAotb2JqLSQoQ09ORklHX1NORF9URUdSQV9TT0NfSEFSTU9OWSkgKz0gc25kLXNvYy10ZWdyYS1oYXJtb255Lm8KK29iai0kKENPTkZJR19TTkRfU09DX1RFR1JBX1dNODkwMykgKz0gc25kLXNvYy10ZWdyYS13bTg5MDMubworb2JqLSQoQ09ORklHX1NORF9TT0NfVEVHUkFfVFJJTVNMSUNFKSArPSBzbmQtc29jLXRlZ3JhLXRyaW1zbGljZS5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvdGVncmEvaGFybW9ueS5jIGIvc291bmQvc29jL3RlZ3JhL2hhcm1vbnkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU2YTU3MS4uMDAwMDAwMAotLS0gYS9zb3VuZC9zb2MvdGVncmEvaGFybW9ueS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzk0ICswLDAgQEAKLS8qCi0gKiBoYXJtb255LmMgLSBIYXJtb255IG1hY2hpbmUgQVNvQyBkcml2ZXIKLSAqCi0gKiBBdXRob3I6IFN0ZXBoZW4gV2FycmVuIDxzd2FycmVuQG52aWRpYS5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSAtIE5WSURJQSwgSW5jLgotICoKLSAqIEJhc2VkIG9uIGNvZGUgY29weXJpZ2h0L2J5OgotICoKLSAqIChjKSAyMDA5LCAyMDEwIE52aWRpYSBHcmFwaGljcyBQdnQuIEx0ZC4KLSAqCi0gKiBDb3B5cmlnaHQgMjAwNyBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgotICogQXV0aG9yOiBHcmFlbWUgR3JlZ29yeQotICogICAgICAgICBncmFlbWUuZ3JlZ29yeUB3b2xmc29ubWljcm8uY29tIG9yIGxpbnV4QHdvbGZzb25taWNyby5jb20KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEgVVNBCi0gKgotICovCi0KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFybW9ueV9hdWRpby5oPgotCi0jaW5jbHVkZSA8c291bmQvY29yZS5oPgotI2luY2x1ZGUgPHNvdW5kL2phY2suaD4KLSNpbmNsdWRlIDxzb3VuZC9wY20uaD4KLSNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLmg+Ci0KLSNpbmNsdWRlICIuLi9jb2RlY3Mvd204OTAzLmgiCi0KLSNpbmNsdWRlICJ0ZWdyYV9kYXMuaCIKLSNpbmNsdWRlICJ0ZWdyYV9pMnMuaCIKLSNpbmNsdWRlICJ0ZWdyYV9wY20uaCIKLSNpbmNsdWRlICJ0ZWdyYV9hc29jX3V0aWxzLmgiCi0KLSNkZWZpbmUgRFJWX05BTUUgInRlZ3JhLXNuZC1oYXJtb255IgotCi0jZGVmaW5lIEdQSU9fU1BLUl9FTiAgICBCSVQoMCkKLSNkZWZpbmUgR1BJT19JTlRfTUlDX0VOIEJJVCgxKQotI2RlZmluZSBHUElPX0VYVF9NSUNfRU4gQklUKDIpCi0KLXN0cnVjdCB0ZWdyYV9oYXJtb255IHsKLQlzdHJ1Y3QgdGVncmFfYXNvY191dGlsc19kYXRhIHV0aWxfZGF0YTsKLQlzdHJ1Y3QgaGFybW9ueV9hdWRpb19wbGF0Zm9ybV9kYXRhICpwZGF0YTsKLQlpbnQgZ3Bpb19yZXF1ZXN0ZWQ7Ci19OwotCi1zdGF0aWMgaW50IGhhcm1vbnlfYXNvY19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQotewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+Y29kZWNfZGFpOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+Y3B1X2RhaTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOwotCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBjb2RlYy0+Y2FyZDsKLQlzdHJ1Y3QgdGVncmFfaGFybW9ueSAqaGFybW9ueSA9IHNuZF9zb2NfY2FyZF9nZXRfZHJ2ZGF0YShjYXJkKTsKLQlpbnQgc3JhdGUsIG1jbGssIG1jbGtfY2hhbmdlOwotCWludCBlcnI7Ci0KLQlzcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7Ci0Jc3dpdGNoIChzcmF0ZSkgewotCWNhc2UgNjQwMDA6Ci0JY2FzZSA4ODIwMDoKLQljYXNlIDk2MDAwOgotCQltY2xrID0gMTI4ICogc3JhdGU7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCW1jbGsgPSAyNTYgKiBzcmF0ZTsKLQkJYnJlYWs7Ci0JfQotCS8qIEZJWE1FOiBDb2RlYyBvbmx5IHJlcXVpcmVzID49IDNNSHogaWYgT1NSPT0wICovCi0Jd2hpbGUgKG1jbGsgPCA2MDAwMDAwKQotCQltY2xrICo9IDI7Ci0KLQllcnIgPSB0ZWdyYV9hc29jX3V0aWxzX3NldF9yYXRlKCZoYXJtb255LT51dGlsX2RhdGEsIHNyYXRlLCBtY2xrLAotCQkJCQkmbWNsa19jaGFuZ2UpOwotCWlmIChlcnIgPCAwKSB7Ci0JCWRldl9lcnIoY2FyZC0+ZGV2LCAiQ2FuJ3QgY29uZmlndXJlIGNsb2Nrc1xuIik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JZXJyID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksCi0JCQkJCVNORF9TT0NfREFJRk1UX0kyUyB8Ci0JCQkJCVNORF9TT0NfREFJRk1UX05CX05GIHwKLQkJCQkJU05EX1NPQ19EQUlGTVRfQ0JTX0NGUyk7Ci0JaWYgKGVyciA8IDApIHsKLQkJZGV2X2VycihjYXJkLT5kZXYsICJjb2RlY19kYWkgZm10IG5vdCBzZXRcbiIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCWVyciA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwKLQkJCQkJU05EX1NPQ19EQUlGTVRfSTJTIHwKLQkJCQkJU05EX1NPQ19EQUlGTVRfTkJfTkYgfAotCQkJCQlTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKTsKLQlpZiAoZXJyIDwgMCkgewotCQlkZXZfZXJyKGNhcmQtPmRldiwgImNwdV9kYWkgZm10IG5vdCBzZXRcbiIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCWlmIChtY2xrX2NoYW5nZSkgewotCQllcnIgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgMCwgbWNsaywKLQkJCQkJICAgICBTTkRfU09DX0NMT0NLX0lOKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCWRldl9lcnIoY2FyZC0+ZGV2LCAiY29kZWNfZGFpIGNsb2NrIG5vdCBzZXRcbiIpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIGhhcm1vbnlfYXNvY19vcHMgPSB7Ci0JLmh3X3BhcmFtcyA9IGhhcm1vbnlfYXNvY19od19wYXJhbXMsCi19OwotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfamFjayBoYXJtb255X2hwX2phY2s7Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19qYWNrX3BpbiBoYXJtb255X2hwX2phY2tfcGluc1tdID0gewotCXsKLQkJLnBpbiA9ICJIZWFkcGhvbmUgSmFjayIsCi0JCS5tYXNrID0gU05EX0pBQ0tfSEVBRFBIT05FLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfamFja19ncGlvIGhhcm1vbnlfaHBfamFja19ncGlvc1tdID0gewotCXsKLQkJLm5hbWUgPSAiaGVhZHBob25lIGRldGVjdCIsCi0JCS5yZXBvcnQgPSBTTkRfSkFDS19IRUFEUEhPTkUsCi0JCS5kZWJvdW5jZV90aW1lID0gMTUwLAotCQkuaW52ZXJ0ID0gMSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfamFjayBoYXJtb255X21pY19qYWNrOwotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfamFja19waW4gaGFybW9ueV9taWNfamFja19waW5zW10gPSB7Ci0JewotCQkucGluID0gIk1pYyBKYWNrIiwKLQkJLm1hc2sgPSBTTkRfSkFDS19NSUNST1BIT05FLAotCX0sCi19OwotCi1zdGF0aWMgaW50IGhhcm1vbnlfZXZlbnRfaW50X3NwayhzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKLQkJCQkJc3RydWN0IHNuZF9rY29udHJvbCAqaywgaW50IGV2ZW50KQotewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOwotCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBjb2RlYy0+Y2FyZDsKLQlzdHJ1Y3QgdGVncmFfaGFybW9ueSAqaGFybW9ueSA9IHNuZF9zb2NfY2FyZF9nZXRfZHJ2ZGF0YShjYXJkKTsKLQlzdHJ1Y3QgaGFybW9ueV9hdWRpb19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGhhcm1vbnktPnBkYXRhOwotCi0JZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAocGRhdGEtPmdwaW9fc3Brcl9lbiwKLQkJCQlTTkRfU09DX0RBUE1fRVZFTlRfT04oZXZlbnQpKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgaGFybW9ueV9kYXBtX3dpZGdldHNbXSA9IHsKLQlTTkRfU09DX0RBUE1fU1BLKCJJbnQgU3BrIiwgaGFybW9ueV9ldmVudF9pbnRfc3BrKSwKLQlTTkRfU09DX0RBUE1fSFAoIkhlYWRwaG9uZSBKYWNrIiwgTlVMTCksCi0JU05EX1NPQ19EQVBNX01JQygiTWljIEphY2siLCBOVUxMKSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGhhcm1vbnlfYXVkaW9fbWFwW10gPSB7Ci0JeyJIZWFkcGhvbmUgSmFjayIsIE5VTEwsICJIUE9VVFIifSwKLQl7IkhlYWRwaG9uZSBKYWNrIiwgTlVMTCwgIkhQT1VUTCJ9LAotCXsiSW50IFNwayIsIE5VTEwsICJST1AifSwKLQl7IkludCBTcGsiLCBOVUxMLCAiUk9OIn0sCi0JeyJJbnQgU3BrIiwgTlVMTCwgIkxPUCJ9LAotCXsiSW50IFNwayIsIE5VTEwsICJMT04ifSwKLQl7Ik1pYyBCaWFzIiwgTlVMTCwgIk1pYyBKYWNrIn0sCi0JeyJJTjFMIiwgTlVMTCwgIk1pYyBCaWFzIn0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgaGFybW9ueV9jb250cm9sc1tdID0gewotCVNPQ19EQVBNX1BJTl9TV0lUQ0goIkludCBTcGsiKSwKLX07Ci0KLXN0YXRpYyBpbnQgaGFybW9ueV9hc29jX2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOwotCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKLQlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gY29kZWMtPmNhcmQ7Ci0Jc3RydWN0IHRlZ3JhX2hhcm1vbnkgKmhhcm1vbnkgPSBzbmRfc29jX2NhcmRfZ2V0X2RydmRhdGEoY2FyZCk7Ci0Jc3RydWN0IGhhcm1vbnlfYXVkaW9fcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBoYXJtb255LT5wZGF0YTsKLQlpbnQgcmV0OwotCi0JcmV0ID0gZ3Bpb19yZXF1ZXN0KHBkYXRhLT5ncGlvX3Nwa3JfZW4sICJzcGtyX2VuIik7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKGNhcmQtPmRldiwgImNhbm5vdCBnZXQgc3Brcl9lbiBncGlvXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JaGFybW9ueS0+Z3Bpb19yZXF1ZXN0ZWQgfD0gR1BJT19TUEtSX0VOOwotCi0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBkYXRhLT5ncGlvX3Nwa3JfZW4sIDApOwotCi0JcmV0ID0gZ3Bpb19yZXF1ZXN0KHBkYXRhLT5ncGlvX2ludF9taWNfZW4sICJpbnRfbWljX2VuIik7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKGNhcmQtPmRldiwgImNhbm5vdCBnZXQgaW50X21pY19lbiBncGlvXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JaGFybW9ueS0+Z3Bpb19yZXF1ZXN0ZWQgfD0gR1BJT19JTlRfTUlDX0VOOwotCi0JLyogRGlzYWJsZSBpbnQgbWljOyBlbmFibGUgc2lnbmFsIGlzIGFjdGl2ZS1oaWdoICovCi0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBkYXRhLT5ncGlvX2ludF9taWNfZW4sIDApOwotCi0JcmV0ID0gZ3Bpb19yZXF1ZXN0KHBkYXRhLT5ncGlvX2V4dF9taWNfZW4sICJleHRfbWljX2VuIik7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKGNhcmQtPmRldiwgImNhbm5vdCBnZXQgZXh0X21pY19lbiBncGlvXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JaGFybW9ueS0+Z3Bpb19yZXF1ZXN0ZWQgfD0gR1BJT19FWFRfTUlDX0VOOwotCi0JLyogRW5hYmxlIGV4dCBtaWM7IGVuYWJsZSBzaWduYWwgaXMgYWN0aXZlLWxvdyAqLwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChwZGF0YS0+Z3Bpb19leHRfbWljX2VuLCAwKTsKLQotCXJldCA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBoYXJtb255X2NvbnRyb2xzLAotCQkJCSAgIEFSUkFZX1NJWkUoaGFybW9ueV9jb250cm9scykpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0Jc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCBoYXJtb255X2RhcG1fd2lkZ2V0cywKLQkJCQkJQVJSQVlfU0laRShoYXJtb255X2RhcG1fd2lkZ2V0cykpOwotCi0Jc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgaGFybW9ueV9hdWRpb19tYXAsCi0JCQkJQVJSQVlfU0laRShoYXJtb255X2F1ZGlvX21hcCkpOwotCi0JaGFybW9ueV9ocF9qYWNrX2dwaW9zWzBdLmdwaW8gPSBwZGF0YS0+Z3Bpb19ocF9kZXQ7Ci0Jc25kX3NvY19qYWNrX25ldyhjb2RlYywgIkhlYWRwaG9uZSBKYWNrIiwgU05EX0pBQ0tfSEVBRFBIT05FLAotCQkJICZoYXJtb255X2hwX2phY2spOwotCXNuZF9zb2NfamFja19hZGRfcGlucygmaGFybW9ueV9ocF9qYWNrLAotCQkJICAgICAgQVJSQVlfU0laRShoYXJtb255X2hwX2phY2tfcGlucyksCi0JCQkgICAgICBoYXJtb255X2hwX2phY2tfcGlucyk7Ci0Jc25kX3NvY19qYWNrX2FkZF9ncGlvcygmaGFybW9ueV9ocF9qYWNrLAotCQkJICAgICAgIEFSUkFZX1NJWkUoaGFybW9ueV9ocF9qYWNrX2dwaW9zKSwKLQkJCSAgICAgICBoYXJtb255X2hwX2phY2tfZ3Bpb3MpOwotCi0Jc25kX3NvY19qYWNrX25ldyhjb2RlYywgIk1pYyBKYWNrIiwgU05EX0pBQ0tfTUlDUk9QSE9ORSwKLQkJCSAmaGFybW9ueV9taWNfamFjayk7Ci0Jc25kX3NvY19qYWNrX2FkZF9waW5zKCZoYXJtb255X21pY19qYWNrLAotCQkJICAgICAgQVJSQVlfU0laRShoYXJtb255X21pY19qYWNrX3BpbnMpLAotCQkJICAgICAgaGFybW9ueV9taWNfamFja19waW5zKTsKLQl3bTg5MDNfbWljX2RldGVjdChjb2RlYywgJmhhcm1vbnlfbWljX2phY2ssIFNORF9KQUNLX01JQ1JPUEhPTkUsIDApOwotCi0Jc25kX3NvY19kYXBtX2ZvcmNlX2VuYWJsZV9waW4oZGFwbSwgIk1pYyBCaWFzIik7Ci0KLQlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJJTjNMIik7Ci0Jc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiSU4zUiIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkxJTkVPVVRMIik7Ci0Jc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTElORU9VVFIiKTsKLQotCXNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBoYXJtb255X3dtODkwM19kYWkgPSB7Ci0JLm5hbWUgPSAiV004OTAzIiwKLQkuc3RyZWFtX25hbWUgPSAiV004OTAzIFBDTSIsCi0JLmNvZGVjX25hbWUgPSAid204OTAzLjAtMDAxYSIsCi0JLnBsYXRmb3JtX25hbWUgPSAidGVncmEtcGNtLWF1ZGlvIiwKLQkuY3B1X2RhaV9uYW1lID0gInRlZ3JhLWkycy4wIiwKLQkuY29kZWNfZGFpX25hbWUgPSAid204OTAzLWhpZmkiLAotCS5pbml0ID0gaGFybW9ueV9hc29jX2luaXQsCi0JLm9wcyA9ICZoYXJtb255X2Fzb2Nfb3BzLAotfTsKLQotc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgc25kX3NvY19oYXJtb255ID0gewotCS5uYW1lID0gInRlZ3JhLWhhcm1vbnkiLAotCS5kYWlfbGluayA9ICZoYXJtb255X3dtODkwM19kYWksCi0JLm51bV9saW5rcyA9IDEsCi19OwotCi1zdGF0aWMgX19kZXZpbml0IGludCB0ZWdyYV9zbmRfaGFybW9ueV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSAmc25kX3NvY19oYXJtb255OwotCXN0cnVjdCB0ZWdyYV9oYXJtb255ICpoYXJtb255OwotCXN0cnVjdCBoYXJtb255X2F1ZGlvX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwotCWludCByZXQ7Ci0KLQlpZiAoIW1hY2hpbmVfaXNfaGFybW9ueSgpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vdCBydW5uaW5nIG9uIFRlZ3JhIEhhcm1vbnkhXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlpZiAoIXBkYXRhKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIHBsYXRmb3JtIGRhdGEgc3VwcGxpZWRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQloYXJtb255ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRlZ3JhX2hhcm1vbnkpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWhhcm1vbnkpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2FuJ3QgYWxsb2NhdGUgdGVncmFfaGFybW9ueVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWhhcm1vbnktPnBkYXRhID0gcGRhdGE7Ci0KLQlyZXQgPSB0ZWdyYV9hc29jX3V0aWxzX2luaXQoJmhhcm1vbnktPnV0aWxfZGF0YSwgJnBkZXYtPmRldik7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJfZnJlZV9oYXJtb255OwotCi0JY2FyZC0+ZGV2ID0gJnBkZXYtPmRldjsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjYXJkKTsKLQlzbmRfc29jX2NhcmRfc2V0X2RydmRhdGEoY2FyZCwgaGFybW9ueSk7Ci0KLQlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NhcmQoY2FyZCk7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJzbmRfc29jX3JlZ2lzdGVyX2NhcmQgZmFpbGVkICglZClcbiIsCi0JCQlyZXQpOwotCQlnb3RvIGVycl9jbGVhcl9kcnZkYXRhOwotCX0KLQotCXJldHVybiAwOwotCi1lcnJfY2xlYXJfZHJ2ZGF0YToKLQlzbmRfc29jX2NhcmRfc2V0X2RydmRhdGEoY2FyZCwgTlVMTCk7Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0JY2FyZC0+ZGV2ID0gTlVMTDsKLQl0ZWdyYV9hc29jX3V0aWxzX2ZpbmkoJmhhcm1vbnktPnV0aWxfZGF0YSk7Ci1lcnJfZnJlZV9oYXJtb255OgotCWtmcmVlKGhhcm1vbnkpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZleGl0IHRlZ3JhX3NuZF9oYXJtb255X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgdGVncmFfaGFybW9ueSAqaGFybW9ueSA9IHNuZF9zb2NfY2FyZF9nZXRfZHJ2ZGF0YShjYXJkKTsKLQlzdHJ1Y3QgaGFybW9ueV9hdWRpb19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGhhcm1vbnktPnBkYXRhOwotCi0Jc25kX3NvY191bnJlZ2lzdGVyX2NhcmQoY2FyZCk7Ci0KLQlzbmRfc29jX2NhcmRfc2V0X2RydmRhdGEoY2FyZCwgTlVMTCk7Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0JY2FyZC0+ZGV2ID0gTlVMTDsKLQotCXRlZ3JhX2Fzb2NfdXRpbHNfZmluaSgmaGFybW9ueS0+dXRpbF9kYXRhKTsKLQotCWlmIChoYXJtb255LT5ncGlvX3JlcXVlc3RlZCAmIEdQSU9fRVhUX01JQ19FTikKLQkJZ3Bpb19mcmVlKHBkYXRhLT5ncGlvX2V4dF9taWNfZW4pOwotCWlmIChoYXJtb255LT5ncGlvX3JlcXVlc3RlZCAmIEdQSU9fSU5UX01JQ19FTikKLQkJZ3Bpb19mcmVlKHBkYXRhLT5ncGlvX2ludF9taWNfZW4pOwotCWlmIChoYXJtb255LT5ncGlvX3JlcXVlc3RlZCAmIEdQSU9fU1BLUl9FTikKLQkJZ3Bpb19mcmVlKHBkYXRhLT5ncGlvX3Nwa3JfZW4pOwotCi0Ja2ZyZWUoaGFybW9ueSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdGVncmFfc25kX2hhcm1vbnlfZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gRFJWX05BTUUsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAotCQkucG0gPSAmc25kX3NvY19wbV9vcHMsCi0JfSwKLQkucHJvYmUgPSB0ZWdyYV9zbmRfaGFybW9ueV9wcm9iZSwKLQkucmVtb3ZlID0gX19kZXZleGl0X3AodGVncmFfc25kX2hhcm1vbnlfcmVtb3ZlKSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNuZF90ZWdyYV9oYXJtb255X2luaXQodm9pZCkKLXsKLQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0ZWdyYV9zbmRfaGFybW9ueV9kcml2ZXIpOwotfQotbW9kdWxlX2luaXQoc25kX3RlZ3JhX2hhcm1vbnlfaW5pdCk7Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBzbmRfdGVncmFfaGFybW9ueV9leGl0KHZvaWQpCi17Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnRlZ3JhX3NuZF9oYXJtb255X2RyaXZlcik7Ci19Ci1tb2R1bGVfZXhpdChzbmRfdGVncmFfaGFybW9ueV9leGl0KTsKLQotTU9EVUxFX0FVVEhPUigiU3RlcGhlbiBXYXJyZW4gPHN3YXJyZW5AbnZpZGlhLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiSGFybW9ueSBtYWNoaW5lIEFTb0MgZHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgRFJWX05BTUUpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3RlZ3JhL3RlZ3JhX2Fzb2NfdXRpbHMuYyBiL3NvdW5kL3NvYy90ZWdyYS90ZWdyYV9hc29jX3V0aWxzLmMKaW5kZXggNTJmMGEzZi4uZGZhODVjYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3RlZ3JhL3RlZ3JhX2Fzb2NfdXRpbHMuYworKysgYi9zb3VuZC9zb2MvdGVncmEvdGVncmFfYXNvY191dGlscy5jCkBAIC0yOCw5ICsyOCwxMCBAQAogI2luY2x1ZGUgInRlZ3JhX2Fzb2NfdXRpbHMuaCIKIAogaW50IHRlZ3JhX2Fzb2NfdXRpbHNfc2V0X3JhdGUoc3RydWN0IHRlZ3JhX2Fzb2NfdXRpbHNfZGF0YSAqZGF0YSwgaW50IHNyYXRlLAotCQkJICAgICAgaW50IG1jbGssIGludCAqbWNsa19jaGFuZ2UpCisJCQkgICAgICBpbnQgbWNsaykKIHsKIAlpbnQgbmV3X2Jhc2VjbG9jazsKKwlib29sIGNsa19jaGFuZ2U7CiAJaW50IGVycjsKIAogCXN3aXRjaCAoc3JhdGUpIHsKQEAgLTUyLDEwICs1MywxMCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkqbWNsa19jaGFuZ2UgPSAoKG5ld19iYXNlY2xvY2sgIT0gZGF0YS0+c2V0X2Jhc2VjbG9jaykgfHwKKwljbGtfY2hhbmdlID0gKChuZXdfYmFzZWNsb2NrICE9IGRhdGEtPnNldF9iYXNlY2xvY2spIHx8CiAJCQkobWNsayAhPSBkYXRhLT5zZXRfbWNsaykpOwotCWlmICghKm1jbGtfY2hhbmdlKQotCSAgICByZXR1cm4gMDsKKwlpZiAoIWNsa19jaGFuZ2UpCisJCXJldHVybiAwOwogCiAJZGF0YS0+c2V0X2Jhc2VjbG9jayA9IDA7CiAJZGF0YS0+c2V0X21jbGsgPSAwOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3RlZ3JhL3RlZ3JhX2Fzb2NfdXRpbHMuaCBiL3NvdW5kL3NvYy90ZWdyYS90ZWdyYV9hc29jX3V0aWxzLmgKaW5kZXggYmJiYTdhZi4uNDgxODE5NSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3RlZ3JhL3RlZ3JhX2Fzb2NfdXRpbHMuaAorKysgYi9zb3VuZC9zb2MvdGVncmEvdGVncmFfYXNvY191dGlscy5oCkBAIC0zNiw3ICszNiw3IEBACiB9OwogCiBpbnQgdGVncmFfYXNvY191dGlsc19zZXRfcmF0ZShzdHJ1Y3QgdGVncmFfYXNvY191dGlsc19kYXRhICpkYXRhLCBpbnQgc3JhdGUsCi0JCQkgICAgICBpbnQgbWNsaywgaW50ICptY2xrX2NoYW5nZSk7CisJCQkgICAgICBpbnQgbWNsayk7CiBpbnQgdGVncmFfYXNvY191dGlsc19pbml0KHN0cnVjdCB0ZWdyYV9hc29jX3V0aWxzX2RhdGEgKmRhdGEsCiAJCQkgIHN0cnVjdCBkZXZpY2UgKmRldik7CiB2b2lkIHRlZ3JhX2Fzb2NfdXRpbHNfZmluaShzdHJ1Y3QgdGVncmFfYXNvY191dGlsc19kYXRhICpkYXRhKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy90ZWdyYS90ZWdyYV9pMnMuYyBiL3NvdW5kL3NvYy90ZWdyYS90ZWdyYV9pMnMuYwppbmRleCA0ZjVlMmM5Li42YjgxN2UyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvdGVncmEvdGVncmFfaTJzLmMKKysrIGIvc291bmQvc29jL3RlZ3JhL3RlZ3JhX2kycy5jCkBAIC0xMTQsNyArMTE0LDcgQEAKIAkJZGVidWdmc19yZW1vdmUoaTJzLT5kZWJ1Zyk7CiB9CiAjZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHRlZ3JhX2kyc19kZWJ1Z19hZGQoc3RydWN0IHRlZ3JhX2kycyAqaTJzKQorc3RhdGljIGlubGluZSB2b2lkIHRlZ3JhX2kyc19kZWJ1Z19hZGQoc3RydWN0IHRlZ3JhX2kycyAqaTJzLCBpbnQgaWQpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy90ZWdyYS90ZWdyYV93bTg5MDMuYyBiL3NvdW5kL3NvYy90ZWdyYS90ZWdyYV93bTg5MDMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDY3MzhhCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3RlZ3JhL3RlZ3JhX3dtODkwMy5jCkBAIC0wLDAgKzEsNDc1IEBACisvKgorICogdGVncmFfd204OTAzLmMgLSBUZWdyYSBtYWNoaW5lIEFTb0MgZHJpdmVyIGZvciBib2FyZHMgdXNpbmcgV004OTAzIGNvZGVjLgorICoKKyAqIEF1dGhvcjogU3RlcGhlbiBXYXJyZW4gPHN3YXJyZW5AbnZpZGlhLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDExIC0gTlZJRElBLCBJbmMuCisgKgorICogQmFzZWQgb24gY29kZSBjb3B5cmlnaHQvYnk6CisgKgorICogKGMpIDIwMDksIDIwMTAgTnZpZGlhIEdyYXBoaWNzIFB2dC4gTHRkLgorICoKKyAqIENvcHlyaWdodCAyMDA3IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKiBBdXRob3I6IEdyYWVtZSBHcmVnb3J5CisgKiAgICAgICAgIGdyYWVtZS5ncmVnb3J5QHdvbGZzb25taWNyby5jb20gb3IgbGludXhAd29sZnNvbm1pY3JvLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8bWFjaC90ZWdyYV93bTg5MDNfcGRhdGEuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9qYWNrLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorCisjaW5jbHVkZSAiLi4vY29kZWNzL3dtODkwMy5oIgorCisjaW5jbHVkZSAidGVncmFfZGFzLmgiCisjaW5jbHVkZSAidGVncmFfaTJzLmgiCisjaW5jbHVkZSAidGVncmFfcGNtLmgiCisjaW5jbHVkZSAidGVncmFfYXNvY191dGlscy5oIgorCisjZGVmaW5lIERSVl9OQU1FICJ0ZWdyYS1zbmQtd204OTAzIgorCisjZGVmaW5lIEdQSU9fU1BLUl9FTiAgICBCSVQoMCkKKyNkZWZpbmUgR1BJT19IUF9NVVRFICAgIEJJVCgxKQorI2RlZmluZSBHUElPX0lOVF9NSUNfRU4gQklUKDIpCisjZGVmaW5lIEdQSU9fRVhUX01JQ19FTiBCSVQoMykKKworc3RydWN0IHRlZ3JhX3dtODkwMyB7CisJc3RydWN0IHRlZ3JhX2Fzb2NfdXRpbHNfZGF0YSB1dGlsX2RhdGE7CisJc3RydWN0IHRlZ3JhX3dtODkwM19wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlpbnQgZ3Bpb19yZXF1ZXN0ZWQ7Cit9OworCitzdGF0aWMgaW50IHRlZ3JhX3dtODkwM19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+Y29kZWNfZGFpOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+Y3B1X2RhaTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBjb2RlYy0+Y2FyZDsKKwlzdHJ1Y3QgdGVncmFfd204OTAzICptYWNoaW5lID0gc25kX3NvY19jYXJkX2dldF9kcnZkYXRhKGNhcmQpOworCWludCBzcmF0ZSwgbWNsazsKKwlpbnQgZXJyOworCisJc3JhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOworCXN3aXRjaCAoc3JhdGUpIHsKKwljYXNlIDY0MDAwOgorCWNhc2UgODgyMDA6CisJY2FzZSA5NjAwMDoKKwkJbWNsayA9IDEyOCAqIHNyYXRlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQltY2xrID0gMjU2ICogc3JhdGU7CisJCWJyZWFrOworCX0KKwkvKiBGSVhNRTogQ29kZWMgb25seSByZXF1aXJlcyA+PSAzTUh6IGlmIE9TUj09MCAqLworCXdoaWxlIChtY2xrIDwgNjAwMDAwMCkKKwkJbWNsayAqPSAyOworCisJZXJyID0gdGVncmFfYXNvY191dGlsc19zZXRfcmF0ZSgmbWFjaGluZS0+dXRpbF9kYXRhLCBzcmF0ZSwgbWNsayk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihjYXJkLT5kZXYsICJDYW4ndCBjb25maWd1cmUgY2xvY2tzXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNvZGVjX2RhaSwKKwkJCQkJU05EX1NPQ19EQUlGTVRfSTJTIHwKKwkJCQkJU05EX1NPQ19EQUlGTVRfTkJfTkYgfAorCQkJCQlTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKGNhcmQtPmRldiwgImNvZGVjX2RhaSBmbXQgbm90IHNldFxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gc25kX3NvY19kYWlfc2V0X2ZtdChjcHVfZGFpLAorCQkJCQlTTkRfU09DX0RBSUZNVF9JMlMgfAorCQkJCQlTTkRfU09DX0RBSUZNVF9OQl9ORiB8CisJCQkJCVNORF9TT0NfREFJRk1UX0NCU19DRlMpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoY2FyZC0+ZGV2LCAiY3B1X2RhaSBmbXQgbm90IHNldFxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksIDAsIG1jbGssCisJCQkJCVNORF9TT0NfQ0xPQ0tfSU4pOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoY2FyZC0+ZGV2LCAiY29kZWNfZGFpIGNsb2NrIG5vdCBzZXRcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIHRlZ3JhX3dtODkwM19vcHMgPSB7CisJLmh3X3BhcmFtcyA9IHRlZ3JhX3dtODkwM19od19wYXJhbXMsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfamFjayB0ZWdyYV93bTg5MDNfaHBfamFjazsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2phY2tfcGluIHRlZ3JhX3dtODkwM19ocF9qYWNrX3BpbnNbXSA9IHsKKwl7CisJCS5waW4gPSAiSGVhZHBob25lIEphY2siLAorCQkubWFzayA9IFNORF9KQUNLX0hFQURQSE9ORSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2phY2tfZ3BpbyB0ZWdyYV93bTg5MDNfaHBfamFja19ncGlvID0geworCS5uYW1lID0gImhlYWRwaG9uZSBkZXRlY3QiLAorCS5yZXBvcnQgPSBTTkRfSkFDS19IRUFEUEhPTkUsCisJLmRlYm91bmNlX3RpbWUgPSAxNTAsCisJLmludmVydCA9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfamFjayB0ZWdyYV93bTg5MDNfbWljX2phY2s7CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19qYWNrX3BpbiB0ZWdyYV93bTg5MDNfbWljX2phY2tfcGluc1tdID0geworCXsKKwkJLnBpbiA9ICJNaWMgSmFjayIsCisJCS5tYXNrID0gU05EX0pBQ0tfTUlDUk9QSE9ORSwKKwl9LAorfTsKKworc3RhdGljIGludCB0ZWdyYV93bTg5MDNfZXZlbnRfaW50X3NwayhzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCQkJc3RydWN0IHNuZF9rY29udHJvbCAqaywgaW50IGV2ZW50KQoreworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9IHctPmRhcG07CisJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IGRhcG0tPmNhcmQ7CisJc3RydWN0IHRlZ3JhX3dtODkwMyAqbWFjaGluZSA9IHNuZF9zb2NfY2FyZF9nZXRfZHJ2ZGF0YShjYXJkKTsKKwlzdHJ1Y3QgdGVncmFfd204OTAzX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gbWFjaGluZS0+cGRhdGE7CisKKwlpZiAoIShtYWNoaW5lLT5ncGlvX3JlcXVlc3RlZCAmIEdQSU9fU1BLUl9FTikpCisJCXJldHVybiAwOworCisJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAocGRhdGEtPmdwaW9fc3Brcl9lbiwKKwkJCQlTTkRfU09DX0RBUE1fRVZFTlRfT04oZXZlbnQpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRlZ3JhX3dtODkwM19ldmVudF9ocChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCQkJc3RydWN0IHNuZF9rY29udHJvbCAqaywgaW50IGV2ZW50KQoreworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9IHctPmRhcG07CisJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IGRhcG0tPmNhcmQ7CisJc3RydWN0IHRlZ3JhX3dtODkwMyAqbWFjaGluZSA9IHNuZF9zb2NfY2FyZF9nZXRfZHJ2ZGF0YShjYXJkKTsKKwlzdHJ1Y3QgdGVncmFfd204OTAzX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gbWFjaGluZS0+cGRhdGE7CisKKwlpZiAoIShtYWNoaW5lLT5ncGlvX3JlcXVlc3RlZCAmIEdQSU9fSFBfTVVURSkpCisJCXJldHVybiAwOworCisJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAocGRhdGEtPmdwaW9faHBfbXV0ZSwKKwkJCQkhU05EX1NPQ19EQVBNX0VWRU5UX09OKGV2ZW50KSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHRlZ3JhX3dtODkwM19kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fU1BLKCJJbnQgU3BrIiwgdGVncmFfd204OTAzX2V2ZW50X2ludF9zcGspLAorCVNORF9TT0NfREFQTV9IUCgiSGVhZHBob25lIEphY2siLCB0ZWdyYV93bTg5MDNfZXZlbnRfaHApLAorCVNORF9TT0NfREFQTV9NSUMoIk1pYyBKYWNrIiwgTlVMTCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBoYXJtb255X2F1ZGlvX21hcFtdID0geworCXsiSGVhZHBob25lIEphY2siLCBOVUxMLCAiSFBPVVRSIn0sCisJeyJIZWFkcGhvbmUgSmFjayIsIE5VTEwsICJIUE9VVEwifSwKKwl7IkludCBTcGsiLCBOVUxMLCAiUk9QIn0sCisJeyJJbnQgU3BrIiwgTlVMTCwgIlJPTiJ9LAorCXsiSW50IFNwayIsIE5VTEwsICJMT1AifSwKKwl7IkludCBTcGsiLCBOVUxMLCAiTE9OIn0sCisJeyJNaWMgQmlhcyIsIE5VTEwsICJNaWMgSmFjayJ9LAorCXsiSU4xTCIsIE5VTEwsICJNaWMgQmlhcyJ9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgc2VhYm9hcmRfYXVkaW9fbWFwW10gPSB7CisJeyJIZWFkcGhvbmUgSmFjayIsIE5VTEwsICJIUE9VVFIifSwKKwl7IkhlYWRwaG9uZSBKYWNrIiwgTlVMTCwgIkhQT1VUTCJ9LAorCXsiSW50IFNwayIsIE5VTEwsICJST1AifSwKKwl7IkludCBTcGsiLCBOVUxMLCAiUk9OIn0sCisJeyJJbnQgU3BrIiwgTlVMTCwgIkxPUCJ9LAorCXsiSW50IFNwayIsIE5VTEwsICJMT04ifSwKKwl7Ik1pYyBCaWFzIiwgTlVMTCwgIk1pYyBKYWNrIn0sCisJeyJJTjFSIiwgTlVMTCwgIk1pYyBCaWFzIn0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBrYWVuX2F1ZGlvX21hcFtdID0geworCXsiSGVhZHBob25lIEphY2siLCBOVUxMLCAiSFBPVVRSIn0sCisJeyJIZWFkcGhvbmUgSmFjayIsIE5VTEwsICJIUE9VVEwifSwKKwl7IkludCBTcGsiLCBOVUxMLCAiUk9QIn0sCisJeyJJbnQgU3BrIiwgTlVMTCwgIlJPTiJ9LAorCXsiSW50IFNwayIsIE5VTEwsICJMT1AifSwKKwl7IkludCBTcGsiLCBOVUxMLCAiTE9OIn0sCisJeyJNaWMgQmlhcyIsIE5VTEwsICJNaWMgSmFjayJ9LAorCXsiSU4yUiIsIE5VTEwsICJNaWMgQmlhcyJ9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYWVibF9hdWRpb19tYXBbXSA9IHsKKwl7IkhlYWRwaG9uZSBKYWNrIiwgTlVMTCwgIkhQT1VUUiJ9LAorCXsiSGVhZHBob25lIEphY2siLCBOVUxMLCAiSFBPVVRMIn0sCisJeyJJbnQgU3BrIiwgTlVMTCwgIkxJTkVPVVRSIn0sCisJeyJJbnQgU3BrIiwgTlVMTCwgIkxJTkVPVVRMIn0sCisJeyJNaWMgQmlhcyIsIE5VTEwsICJNaWMgSmFjayJ9LAorCXsiSU4xUiIsIE5VTEwsICJNaWMgQmlhcyJ9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHRlZ3JhX3dtODkwM19jb250cm9sc1tdID0geworCVNPQ19EQVBNX1BJTl9TV0lUQ0goIkludCBTcGsiKSwKK307CisKK3N0YXRpYyBpbnQgdGVncmFfd204OTAzX2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKKwlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gY29kZWMtPmNhcmQ7CisJc3RydWN0IHRlZ3JhX3dtODkwMyAqbWFjaGluZSA9IHNuZF9zb2NfY2FyZF9nZXRfZHJ2ZGF0YShjYXJkKTsKKwlzdHJ1Y3QgdGVncmFfd204OTAzX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gbWFjaGluZS0+cGRhdGE7CisJaW50IHJldDsKKworCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT5ncGlvX3Nwa3JfZW4pKSB7CisJCXJldCA9IGdwaW9fcmVxdWVzdChwZGF0YS0+Z3Bpb19zcGtyX2VuLCAic3Brcl9lbiIpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGNhcmQtPmRldiwgImNhbm5vdCBnZXQgc3Brcl9lbiBncGlvXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJbWFjaGluZS0+Z3Bpb19yZXF1ZXN0ZWQgfD0gR1BJT19TUEtSX0VOOworCisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChwZGF0YS0+Z3Bpb19zcGtyX2VuLCAwKTsKKwl9CisKKwlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+Z3Bpb19ocF9tdXRlKSkgeworCQlyZXQgPSBncGlvX3JlcXVlc3QocGRhdGEtPmdwaW9faHBfbXV0ZSwgImhwX211dGUiKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihjYXJkLT5kZXYsICJjYW5ub3QgZ2V0IGhwX211dGUgZ3Bpb1xuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCW1hY2hpbmUtPmdwaW9fcmVxdWVzdGVkIHw9IEdQSU9fSFBfTVVURTsKKworCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQocGRhdGEtPmdwaW9faHBfbXV0ZSwgMCk7CisJfQorCisJaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPmdwaW9faW50X21pY19lbikpIHsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KHBkYXRhLT5ncGlvX2ludF9taWNfZW4sICJpbnRfbWljX2VuIik7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoY2FyZC0+ZGV2LCAiY2Fubm90IGdldCBpbnRfbWljX2VuIGdwaW9cbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQltYWNoaW5lLT5ncGlvX3JlcXVlc3RlZCB8PSBHUElPX0lOVF9NSUNfRU47CisKKwkJLyogRGlzYWJsZSBpbnQgbWljOyBlbmFibGUgc2lnbmFsIGlzIGFjdGl2ZS1oaWdoICovCisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChwZGF0YS0+Z3Bpb19pbnRfbWljX2VuLCAwKTsKKwl9CisKKwlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+Z3Bpb19leHRfbWljX2VuKSkgeworCQlyZXQgPSBncGlvX3JlcXVlc3QocGRhdGEtPmdwaW9fZXh0X21pY19lbiwgImV4dF9taWNfZW4iKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihjYXJkLT5kZXYsICJjYW5ub3QgZ2V0IGV4dF9taWNfZW4gZ3Bpb1xuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCW1hY2hpbmUtPmdwaW9fcmVxdWVzdGVkIHw9IEdQSU9fRVhUX01JQ19FTjsKKworCQkvKiBFbmFibGUgZXh0IG1pYzsgZW5hYmxlIHNpZ25hbCBpcyBhY3RpdmUtbG93ICovCisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChwZGF0YS0+Z3Bpb19leHRfbWljX2VuLCAwKTsKKwl9CisKKwlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+Z3Bpb19ocF9kZXQpKSB7CisJCXRlZ3JhX3dtODkwM19ocF9qYWNrX2dwaW8uZ3BpbyA9IHBkYXRhLT5ncGlvX2hwX2RldDsKKwkJc25kX3NvY19qYWNrX25ldyhjb2RlYywgIkhlYWRwaG9uZSBKYWNrIiwgU05EX0pBQ0tfSEVBRFBIT05FLAorCQkJCSZ0ZWdyYV93bTg5MDNfaHBfamFjayk7CisJCXNuZF9zb2NfamFja19hZGRfcGlucygmdGVncmFfd204OTAzX2hwX2phY2ssCisJCQkJCUFSUkFZX1NJWkUodGVncmFfd204OTAzX2hwX2phY2tfcGlucyksCisJCQkJCXRlZ3JhX3dtODkwM19ocF9qYWNrX3BpbnMpOworCQlzbmRfc29jX2phY2tfYWRkX2dwaW9zKCZ0ZWdyYV93bTg5MDNfaHBfamFjaywKKwkJCQkJMSwKKwkJCQkJJnRlZ3JhX3dtODkwM19ocF9qYWNrX2dwaW8pOworCX0KKworCXNuZF9zb2NfamFja19uZXcoY29kZWMsICJNaWMgSmFjayIsIFNORF9KQUNLX01JQ1JPUEhPTkUsCisJCQkgJnRlZ3JhX3dtODkwM19taWNfamFjayk7CisJc25kX3NvY19qYWNrX2FkZF9waW5zKCZ0ZWdyYV93bTg5MDNfbWljX2phY2ssCisJCQkgICAgICBBUlJBWV9TSVpFKHRlZ3JhX3dtODkwM19taWNfamFja19waW5zKSwKKwkJCSAgICAgIHRlZ3JhX3dtODkwM19taWNfamFja19waW5zKTsKKwl3bTg5MDNfbWljX2RldGVjdChjb2RlYywgJnRlZ3JhX3dtODkwM19taWNfamFjaywgU05EX0pBQ0tfTUlDUk9QSE9ORSwKKwkJCQkwKTsKKworCXNuZF9zb2NfZGFwbV9mb3JjZV9lbmFibGVfcGluKGRhcG0sICJNaWMgQmlhcyIpOworCisJLyogRklYTUU6IENhbGN1bGF0ZSBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIERBUE0gcm91dGVzPyAqLworCWlmICghbWFjaGluZV9pc19oYXJtb255KCkgJiYgIW1hY2hpbmVfaXNfdmVudGFuYSgpKQorCQlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJJTjFMIik7CisJaWYgKCFtYWNoaW5lX2lzX3NlYWJvYXJkKCkgJiYgIW1hY2hpbmVfaXNfYWVibCgpKQorCQlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJJTjFSIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiSU4yTCIpOworCWlmICghbWFjaGluZV9pc19rYWVuKCkpCisJCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIklOMlIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJJTjNMIik7CisJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiSU4zUiIpOworCisJaWYgKG1hY2hpbmVfaXNfYWVibCgpKSB7CisJCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkxPTiIpOworCQlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJST04iKTsKKwkJc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiUk9QIik7CisJCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkxPUCIpOworCX0gZWxzZSB7CisJCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkxJTkVPVVRSIik7CisJCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkxJTkVPVVRMIik7CisJfQorCisJc25kX3NvY19kYXBtX3N5bmMoZGFwbSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIHRlZ3JhX3dtODkwM19kYWkgPSB7CisJLm5hbWUgPSAiV004OTAzIiwKKwkuc3RyZWFtX25hbWUgPSAiV004OTAzIFBDTSIsCisJLmNvZGVjX25hbWUgPSAid204OTAzLjAtMDAxYSIsCisJLnBsYXRmb3JtX25hbWUgPSAidGVncmEtcGNtLWF1ZGlvIiwKKwkuY3B1X2RhaV9uYW1lID0gInRlZ3JhLWkycy4wIiwKKwkuY29kZWNfZGFpX25hbWUgPSAid204OTAzLWhpZmkiLAorCS5pbml0ID0gdGVncmFfd204OTAzX2luaXQsCisJLm9wcyA9ICZ0ZWdyYV93bTg5MDNfb3BzLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgc25kX3NvY190ZWdyYV93bTg5MDMgPSB7CisJLm5hbWUgPSAidGVncmEtd204OTAzIiwKKwkuZGFpX2xpbmsgPSAmdGVncmFfd204OTAzX2RhaSwKKwkubnVtX2xpbmtzID0gMSwKKworCS5jb250cm9scyA9IHRlZ3JhX3dtODkwM19jb250cm9scywKKwkubnVtX2NvbnRyb2xzID0gQVJSQVlfU0laRSh0ZWdyYV93bTg5MDNfY29udHJvbHMpLAorCS5kYXBtX3dpZGdldHMgPSB0ZWdyYV93bTg5MDNfZGFwbV93aWRnZXRzLAorCS5udW1fZGFwbV93aWRnZXRzID0gQVJSQVlfU0laRSh0ZWdyYV93bTg5MDNfZGFwbV93aWRnZXRzKSwKK307CisKK3N0YXRpYyBfX2RldmluaXQgaW50IHRlZ3JhX3dtODkwM19kcml2ZXJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gJnNuZF9zb2NfdGVncmFfd204OTAzOworCXN0cnVjdCB0ZWdyYV93bTg5MDMgKm1hY2hpbmU7CisJc3RydWN0IHRlZ3JhX3dtODkwM19wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlpbnQgcmV0OworCisJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoIXBkYXRhKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIHBsYXRmb3JtIGRhdGEgc3VwcGxpZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltYWNoaW5lID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRlZ3JhX3dtODkwMyksIEdGUF9LRVJORUwpOworCWlmICghbWFjaGluZSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW4ndCBhbGxvY2F0ZSB0ZWdyYV93bTg5MDMgc3RydWN0XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWFjaGluZS0+cGRhdGEgPSBwZGF0YTsKKworCXJldCA9IHRlZ3JhX2Fzb2NfdXRpbHNfaW5pdCgmbWFjaGluZS0+dXRpbF9kYXRhLCAmcGRldi0+ZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9mcmVlX21hY2hpbmU7CisKKwljYXJkLT5kZXYgPSAmcGRldi0+ZGV2OworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNhcmQpOworCXNuZF9zb2NfY2FyZF9zZXRfZHJ2ZGF0YShjYXJkLCBtYWNoaW5lKTsKKworCWlmIChtYWNoaW5lX2lzX2hhcm1vbnkoKSB8fCBtYWNoaW5lX2lzX3ZlbnRhbmEoKSkgeworCQljYXJkLT5kYXBtX3JvdXRlcyA9IGhhcm1vbnlfYXVkaW9fbWFwOworCQljYXJkLT5udW1fZGFwbV9yb3V0ZXMgPSBBUlJBWV9TSVpFKGhhcm1vbnlfYXVkaW9fbWFwKTsKKwl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfc2VhYm9hcmQoKSkgeworCQljYXJkLT5kYXBtX3JvdXRlcyA9IHNlYWJvYXJkX2F1ZGlvX21hcDsKKwkJY2FyZC0+bnVtX2RhcG1fcm91dGVzID0gQVJSQVlfU0laRShzZWFib2FyZF9hdWRpb19tYXApOworCX0gZWxzZSBpZiAobWFjaGluZV9pc19rYWVuKCkpIHsKKwkJY2FyZC0+ZGFwbV9yb3V0ZXMgPSBrYWVuX2F1ZGlvX21hcDsKKwkJY2FyZC0+bnVtX2RhcG1fcm91dGVzID0gQVJSQVlfU0laRShrYWVuX2F1ZGlvX21hcCk7CisJfSBlbHNlIHsKKwkJY2FyZC0+ZGFwbV9yb3V0ZXMgPSBhZWJsX2F1ZGlvX21hcDsKKwkJY2FyZC0+bnVtX2RhcG1fcm91dGVzID0gQVJSQVlfU0laRShhZWJsX2F1ZGlvX21hcCk7CisJfQorCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jYXJkKGNhcmQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAic25kX3NvY19yZWdpc3Rlcl9jYXJkIGZhaWxlZCAoJWQpXG4iLAorCQkJcmV0KTsKKwkJZ290byBlcnJfZmluaV91dGlsczsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2ZpbmlfdXRpbHM6CisJdGVncmFfYXNvY191dGlsc19maW5pKCZtYWNoaW5lLT51dGlsX2RhdGEpOworZXJyX2ZyZWVfbWFjaGluZToKKwlrZnJlZShtYWNoaW5lKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB0ZWdyYV93bTg5MDNfZHJpdmVyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgdGVncmFfd204OTAzICptYWNoaW5lID0gc25kX3NvY19jYXJkX2dldF9kcnZkYXRhKGNhcmQpOworCXN0cnVjdCB0ZWdyYV93bTg5MDNfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBtYWNoaW5lLT5wZGF0YTsKKworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jYXJkKGNhcmQpOworCisJdGVncmFfYXNvY191dGlsc19maW5pKCZtYWNoaW5lLT51dGlsX2RhdGEpOworCisJaWYgKG1hY2hpbmUtPmdwaW9fcmVxdWVzdGVkICYgR1BJT19FWFRfTUlDX0VOKQorCQlncGlvX2ZyZWUocGRhdGEtPmdwaW9fZXh0X21pY19lbik7CisJaWYgKG1hY2hpbmUtPmdwaW9fcmVxdWVzdGVkICYgR1BJT19JTlRfTUlDX0VOKQorCQlncGlvX2ZyZWUocGRhdGEtPmdwaW9faW50X21pY19lbik7CisJaWYgKG1hY2hpbmUtPmdwaW9fcmVxdWVzdGVkICYgR1BJT19IUF9NVVRFKQorCQlncGlvX2ZyZWUocGRhdGEtPmdwaW9faHBfbXV0ZSk7CisJaWYgKG1hY2hpbmUtPmdwaW9fcmVxdWVzdGVkICYgR1BJT19TUEtSX0VOKQorCQlncGlvX2ZyZWUocGRhdGEtPmdwaW9fc3Brcl9lbik7CisKKwlrZnJlZShtYWNoaW5lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0ZWdyYV93bTg5MDNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gRFJWX05BTUUsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkucG0gPSAmc25kX3NvY19wbV9vcHMsCisJfSwKKwkucHJvYmUgPSB0ZWdyYV93bTg5MDNfZHJpdmVyX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh0ZWdyYV93bTg5MDNfZHJpdmVyX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCB0ZWdyYV93bTg5MDNfbW9kaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnRlZ3JhX3dtODkwM19kcml2ZXIpOworfQorbW9kdWxlX2luaXQodGVncmFfd204OTAzX21vZGluaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgdGVncmFfd204OTAzX21vZGV4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdGVncmFfd204OTAzX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh0ZWdyYV93bTg5MDNfbW9kZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlN0ZXBoZW4gV2FycmVuIDxzd2FycmVuQG52aWRpYS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRlZ3JhK1dNODkwMyBtYWNoaW5lIEFTb0MgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgRFJWX05BTUUpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3RlZ3JhL3RyaW1zbGljZS5jIGIvc291bmQvc29jL3RlZ3JhL3RyaW1zbGljZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYzA3ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvdGVncmEvdHJpbXNsaWNlLmMKQEAgLTAsMCArMSwyMjggQEAKKy8qCisgKiB0cmltc2xpY2UuYyAtIFRyaW1TbGljZSBtYWNoaW5lIEFTb0MgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIC0gQ29tcHVMYWIsIEx0ZC4KKyAqIEF1dGhvcjogTWlrZSBSYXBvcG9ydCA8bWlrZUBjb21wdWxhYi5jby5pbD4KKyAqCisgKiBCYXNlZCBvbiBjb2RlIGNvcHlyaWdodC9ieToKKyAqIEF1dGhvcjogU3RlcGhlbiBXYXJyZW4gPHN3YXJyZW5AbnZpZGlhLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDExIC0gTlZJRElBLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9qYWNrLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorCisjaW5jbHVkZSAiLi4vY29kZWNzL3RsdjMyMGFpYzIzLmgiCisKKyNpbmNsdWRlICJ0ZWdyYV9kYXMuaCIKKyNpbmNsdWRlICJ0ZWdyYV9pMnMuaCIKKyNpbmNsdWRlICJ0ZWdyYV9wY20uaCIKKyNpbmNsdWRlICJ0ZWdyYV9hc29jX3V0aWxzLmgiCisKKyNkZWZpbmUgRFJWX05BTUUgInRlZ3JhLXNuZC10cmltc2xpY2UiCisKK3N0cnVjdCB0ZWdyYV90cmltc2xpY2UgeworCXN0cnVjdCB0ZWdyYV9hc29jX3V0aWxzX2RhdGEgdXRpbF9kYXRhOworfTsKKworc3RhdGljIGludCB0cmltc2xpY2VfYXNvY19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+Y29kZWNfZGFpOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+Y3B1X2RhaTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBjb2RlYy0+Y2FyZDsKKwlzdHJ1Y3QgdGVncmFfdHJpbXNsaWNlICp0cmltc2xpY2UgPSBzbmRfc29jX2NhcmRfZ2V0X2RydmRhdGEoY2FyZCk7CisJaW50IHNyYXRlLCBtY2xrOworCWludCBlcnI7CisKKwlzcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CisJbWNsayA9IDEyOCAqIHNyYXRlOworCisJZXJyID0gdGVncmFfYXNvY191dGlsc19zZXRfcmF0ZSgmdHJpbXNsaWNlLT51dGlsX2RhdGEsIHNyYXRlLCBtY2xrKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKGNhcmQtPmRldiwgIkNhbid0IGNvbmZpZ3VyZSBjbG9ja3NcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY29kZWNfZGFpLAorCQkJCQlTTkRfU09DX0RBSUZNVF9JMlMgfAorCQkJCQlTTkRfU09DX0RBSUZNVF9OQl9ORiB8CisJCQkJCVNORF9TT0NfREFJRk1UX0NCU19DRlMpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoY2FyZC0+ZGV2LCAiY29kZWNfZGFpIGZtdCBub3Qgc2V0XG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNwdV9kYWksCisJCQkJCVNORF9TT0NfREFJRk1UX0kyUyB8CisJCQkJCVNORF9TT0NfREFJRk1UX05CX05GIHwKKwkJCQkJU05EX1NPQ19EQUlGTVRfQ0JTX0NGUyk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihjYXJkLT5kZXYsICJjcHVfZGFpIGZtdCBub3Qgc2V0XG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgMCwgbWNsaywKKwkJCQkJU05EX1NPQ19DTE9DS19JTik7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihjYXJkLT5kZXYsICJjb2RlY19kYWkgY2xvY2sgbm90IHNldFxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgdHJpbXNsaWNlX2Fzb2Nfb3BzID0geworCS5od19wYXJhbXMgPSB0cmltc2xpY2VfYXNvY19od19wYXJhbXMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgdHJpbXNsaWNlX2RhcG1fd2lkZ2V0c1tdID0geworCVNORF9TT0NfREFQTV9IUCgiTGluZSBPdXQiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTElORSgiTGluZSBJbiIsIE5VTEwpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgdHJpbXNsaWNlX2F1ZGlvX21hcFtdID0geworCXsiTGluZSBPdXQiLCBOVUxMLCAiTE9VVCJ9LAorCXsiTGluZSBPdXQiLCBOVUxMLCAiUk9VVCJ9LAorCisJeyJMTElORUlOIiwgTlVMTCwgIkxpbmUgSW4ifSwKKwl7IlJMSU5FSU4iLCBOVUxMLCAiTGluZSBJbiJ9LAorfTsKKworc3RhdGljIGludCB0cmltc2xpY2VfYXNvY19pbml0KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CisKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJMSFBPVVQiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJSSFBPVVQiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJNSUNJTiIpOworCisJc25kX3NvY19kYXBtX3N5bmMoZGFwbSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIHRyaW1zbGljZV90bHYzMjBhaWMyM19kYWkgPSB7CisJLm5hbWUgPSAiVExWMzIwQUlDMjMiLAorCS5zdHJlYW1fbmFtZSA9ICJBSUMyMyIsCisJLmNvZGVjX25hbWUgPSAidGx2MzIwYWljMjMtY29kZWMuMi0wMDFhIiwKKwkucGxhdGZvcm1fbmFtZSA9ICJ0ZWdyYS1wY20tYXVkaW8iLAorCS5jcHVfZGFpX25hbWUgPSAidGVncmEtaTJzLjAiLAorCS5jb2RlY19kYWlfbmFtZSA9ICJ0bHYzMjBhaWMyMy1oaWZpIiwKKwkuaW5pdCA9IHRyaW1zbGljZV9hc29jX2luaXQsCisJLm9wcyA9ICZ0cmltc2xpY2VfYXNvY19vcHMsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBzbmRfc29jX3RyaW1zbGljZSA9IHsKKwkubmFtZSA9ICJ0ZWdyYS10cmltc2xpY2UiLAorCS5kYWlfbGluayA9ICZ0cmltc2xpY2VfdGx2MzIwYWljMjNfZGFpLAorCS5udW1fbGlua3MgPSAxLAorCisJLmRhcG1fd2lkZ2V0cyA9IHRyaW1zbGljZV9kYXBtX3dpZGdldHMsCisJLm51bV9kYXBtX3dpZGdldHMgPSBBUlJBWV9TSVpFKHRyaW1zbGljZV9kYXBtX3dpZGdldHMpLAorCS5kYXBtX3JvdXRlcyA9IHRyaW1zbGljZV9hdWRpb19tYXAsCisJLm51bV9kYXBtX3JvdXRlcyA9IEFSUkFZX1NJWkUodHJpbXNsaWNlX2F1ZGlvX21hcCksCit9OworCitzdGF0aWMgX19kZXZpbml0IGludCB0ZWdyYV9zbmRfdHJpbXNsaWNlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9ICZzbmRfc29jX3RyaW1zbGljZTsKKwlzdHJ1Y3QgdGVncmFfdHJpbXNsaWNlICp0cmltc2xpY2U7CisJaW50IHJldDsKKworCXRyaW1zbGljZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0ZWdyYV90cmltc2xpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRyaW1zbGljZSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW4ndCBhbGxvY2F0ZSB0ZWdyYV90cmltc2xpY2VcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXQgPSB0ZWdyYV9hc29jX3V0aWxzX2luaXQoJnRyaW1zbGljZS0+dXRpbF9kYXRhLCAmcGRldi0+ZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9mcmVlX3RyaW1zbGljZTsKKworCWNhcmQtPmRldiA9ICZwZGV2LT5kZXY7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY2FyZCk7CisJc25kX3NvY19jYXJkX3NldF9kcnZkYXRhKGNhcmQsIHRyaW1zbGljZSk7CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NhcmQoY2FyZCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJzbmRfc29jX3JlZ2lzdGVyX2NhcmQgZmFpbGVkICglZClcbiIsCisJCQlyZXQpOworCQlnb3RvIGVycl9maW5pX3V0aWxzOworCX0KKworCXJldHVybiAwOworCitlcnJfZmluaV91dGlsczoKKwl0ZWdyYV9hc29jX3V0aWxzX2ZpbmkoJnRyaW1zbGljZS0+dXRpbF9kYXRhKTsKK2Vycl9mcmVlX3RyaW1zbGljZToKKwlrZnJlZSh0cmltc2xpY2UpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHRlZ3JhX3NuZF90cmltc2xpY2VfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCB0ZWdyYV90cmltc2xpY2UgKnRyaW1zbGljZSA9IHNuZF9zb2NfY2FyZF9nZXRfZHJ2ZGF0YShjYXJkKTsKKworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jYXJkKGNhcmQpOworCisJdGVncmFfYXNvY191dGlsc19maW5pKCZ0cmltc2xpY2UtPnV0aWxfZGF0YSk7CisKKwlrZnJlZSh0cmltc2xpY2UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHRlZ3JhX3NuZF90cmltc2xpY2VfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gRFJWX05BTUUsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlID0gdGVncmFfc25kX3RyaW1zbGljZV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AodGVncmFfc25kX3RyaW1zbGljZV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc25kX3RlZ3JhX3RyaW1zbGljZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdGVncmFfc25kX3RyaW1zbGljZV9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoc25kX3RlZ3JhX3RyaW1zbGljZV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHNuZF90ZWdyYV90cmltc2xpY2VfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0ZWdyYV9zbmRfdHJpbXNsaWNlX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChzbmRfdGVncmFfdHJpbXNsaWNlX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNaWtlIFJhcG9wb3J0IDxtaWtlQGNvbXB1bGFiLmNvLmlsPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUcmltc2xpY2UgbWFjaGluZSBBU29DIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSVl9OQU1FKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi82ZmlyZS9jb250cm9sLmMgYi9zb3VuZC91c2IvNmZpcmUvY29udHJvbC5jCmluZGV4IDI0ODQ2MzUuLmFjODI4ZWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi82ZmlyZS9jb250cm9sLmMKKysrIGIvc291bmQvdXNiLzZmaXJlL2NvbnRyb2wuYwpAQCAtNjUsNiArNjUsMTUgQEAKIAl7IDAgfSAvKiBURVJNSU5BVElORyBFTlRSWSAqLwogfTsKIAorc3RhdGljIGNvbnN0IGludCByYXRlc19hbHRzZXR0aW5nW10gPSB7IDEsIDEsIDIsIDIsIDMsIDMgfTsKKy8qIHZhbHVlcyB0byB3cml0ZSB0byBzb3VuZGNhcmQgcmVnaXN0ZXIgZm9yIGFsbCBzYW1wbGVyYXRlcyAqLworc3RhdGljIGNvbnN0IHUxNiByYXRlc182ZmlyZV92bFtdID0gezB4MDAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDF9Oworc3RhdGljIGNvbnN0IHUxNiByYXRlc182ZmlyZV92aFtdID0gezB4MTEsIDB4MTEsIDB4MTAsIDB4MTAsIDB4MDAsIDB4MDB9OworCitlbnVtIHsKKwlESUdJVEFMX1RIUlVfT05MWV9TQU1QTEVSQVRFID0gMworfTsKKwogc3RhdGljIHZvaWQgdXNiNmZpcmVfY29udHJvbF9tYXN0ZXJfdm9sX3VwZGF0ZShzdHJ1Y3QgY29udHJvbF9ydW50aW1lICpydCkKIHsKIAlzdHJ1Y3QgY29tbV9ydW50aW1lICpjb21tX3J0ID0gcnQtPmNoaXAtPmNvbW07CkBAIC05NSw2ICsxMDQsNjcgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgdXNiNmZpcmVfY29udHJvbF9zZXRfcmF0ZShzdHJ1Y3QgY29udHJvbF9ydW50aW1lICpydCwgaW50IHJhdGUpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2aWNlID0gcnQtPmNoaXAtPmRldjsKKwlzdHJ1Y3QgY29tbV9ydW50aW1lICpjb21tX3J0ID0gcnQtPmNoaXAtPmNvbW07CisKKwlpZiAocmF0ZSA8IDAgfHwgcmF0ZSA+PSBDT05UUk9MX05fUkFURVMpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UoZGV2aWNlLCAxLCByYXRlc19hbHRzZXR0aW5nW3JhdGVdKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIHNldCBzb3VuZGNhcmQgY2xvY2sgKi8KKwlyZXQgPSBjb21tX3J0LT53cml0ZTE2KGNvbW1fcnQsIDB4MDIsIDB4MDEsIHJhdGVzXzZmaXJlX3ZsW3JhdGVdLAorCQkJcmF0ZXNfNmZpcmVfdmhbcmF0ZV0pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXNiNmZpcmVfY29udHJvbF9zZXRfY2hhbm5lbHMoCisJc3RydWN0IGNvbnRyb2xfcnVudGltZSAqcnQsIGludCBuX2FuYWxvZ19vdXQsCisJaW50IG5fYW5hbG9nX2luLCBib29sIHNwZGlmX291dCwgYm9vbCBzcGRpZl9pbikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBjb21tX3J1bnRpbWUgKmNvbW1fcnQgPSBydC0+Y2hpcC0+Y29tbTsKKworCS8qIGVuYWJsZSBhbmFsb2cgaW5wdXRzIGFuZCBvdXRwdXRzCisJICogKG9uZSBiaXQgcGVyIHN0ZXJlby1jaGFubmVsKSAqLworCXJldCA9IGNvbW1fcnQtPndyaXRlMTYoY29tbV9ydCwgMHgwMiwgMHgwMiwKKwkJCSgxIDw8IChuX2FuYWxvZ19vdXQgLyAyKSkgLSAxLAorCQkJKDEgPDwgKG5fYW5hbG9nX2luIC8gMikpIC0gMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBkaXNhYmxlIGRpZ2l0YWwgaW5wdXRzIGFuZCBvdXRwdXRzICovCisJLyogVE9ETzogdXNlIHNwZGlmX3ggdG8gZW5hYmxlL2Rpc2FibGUgZGlnaXRhbCBjaGFubmVscyAqLworCXJldCA9IGNvbW1fcnQtPndyaXRlMTYoY29tbV9ydCwgMHgwMiwgMHgwMywgMHgwMCwgMHgwMCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1c2I2ZmlyZV9jb250cm9sX3N0cmVhbWluZ191cGRhdGUoc3RydWN0IGNvbnRyb2xfcnVudGltZSAqcnQpCit7CisJc3RydWN0IGNvbW1fcnVudGltZSAqY29tbV9ydCA9IHJ0LT5jaGlwLT5jb21tOworCisJaWYgKGNvbW1fcnQpIHsKKwkJaWYgKCFydC0+dXNiX3N0cmVhbWluZyAmJiBydC0+ZGlnaXRhbF90aHJ1X3N3aXRjaCkKKwkJCXVzYjZmaXJlX2NvbnRyb2xfc2V0X3JhdGUocnQsCisJCQkJRElHSVRBTF9USFJVX09OTFlfU0FNUExFUkFURSk7CisJCXJldHVybiBjb21tX3J0LT53cml0ZTE2KGNvbW1fcnQsIDB4MDIsIDB4MDAsIDB4MDAsCisJCQkocnQtPnVzYl9zdHJlYW1pbmcgPyAweDAxIDogMHgwMCkgfAorCQkJKHJ0LT5kaWdpdGFsX3RocnVfc3dpdGNoID8gMHgwOCA6IDB4MDApKTsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKIHN0YXRpYyBpbnQgdXNiNmZpcmVfY29udHJvbF9tYXN0ZXJfdm9sX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCXN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCiB7CkBAIC0xOTUsNiArMjY1LDI4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdXNiNmZpcmVfY29udHJvbF9kaWdpdGFsX3RocnVfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgY29udHJvbF9ydW50aW1lICpydCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlpbnQgY2hhbmdlZCA9IDA7CisKKwlpZiAocnQtPmRpZ2l0YWxfdGhydV9zd2l0Y2ggIT0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pIHsKKwkJcnQtPmRpZ2l0YWxfdGhydV9zd2l0Y2ggPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKwkJdXNiNmZpcmVfY29udHJvbF9zdHJlYW1pbmdfdXBkYXRlKHJ0KTsKKwkJY2hhbmdlZCA9IDE7CisJfQorCXJldHVybiBjaGFuZ2VkOworfQorCitzdGF0aWMgaW50IHVzYjZmaXJlX2NvbnRyb2xfZGlnaXRhbF90aHJ1X2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGNvbnRyb2xfcnVudGltZSAqcnQgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBydC0+ZGlnaXRhbF90aHJ1X3N3aXRjaDsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBfX2RldmluaXRkYXRhIHNuZF9rY29udHJvbF9uZXcgZWxlbWVudHNbXSA9IHsKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLApAQCAtMjIzLDYgKzMxNSwxNSBAQAogCQkuZ2V0ID0gdXNiNmZpcmVfY29udHJvbF9vcHRfY29heF9nZXQsCiAJCS5wdXQgPSB1c2I2ZmlyZV9jb250cm9sX29wdF9jb2F4X3B1dAogCX0sCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiRGlnaXRhbCBUaHJ1IFBsYXliYWNrIFJvdXRlIiwKKwkJLmluZGV4ID0gMCwKKwkJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUsCisJCS5pbmZvID0gc25kX2N0bF9ib29sZWFuX21vbm9faW5mbywKKwkJLmdldCA9IHVzYjZmaXJlX2NvbnRyb2xfZGlnaXRhbF90aHJ1X2dldCwKKwkJLnB1dCA9IHVzYjZmaXJlX2NvbnRyb2xfZGlnaXRhbF90aHJ1X3B1dAorCX0sCiAJe30KIH07CiAKQEAgLTIzOCw2ICszMzksOSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCXJ0LT5jaGlwID0gY2hpcDsKKwlydC0+dXBkYXRlX3N0cmVhbWluZyA9IHVzYjZmaXJlX2NvbnRyb2xfc3RyZWFtaW5nX3VwZGF0ZTsKKwlydC0+c2V0X3JhdGUgPSB1c2I2ZmlyZV9jb250cm9sX3NldF9yYXRlOworCXJ0LT5zZXRfY2hhbm5lbHMgPSB1c2I2ZmlyZV9jb250cm9sX3NldF9jaGFubmVsczsKIAogCWkgPSAwOwogCXdoaWxlIChpbml0X2RhdGFbaV0udHlwZSkgewpAQCAtMjQ5LDYgKzM1Myw3IEBACiAJdXNiNmZpcmVfY29udHJvbF9vcHRfY29heF91cGRhdGUocnQpOwogCXVzYjZmaXJlX2NvbnRyb2xfbGluZV9waG9ub191cGRhdGUocnQpOwogCXVzYjZmaXJlX2NvbnRyb2xfbWFzdGVyX3ZvbF91cGRhdGUocnQpOworCXVzYjZmaXJlX2NvbnRyb2xfc3RyZWFtaW5nX3VwZGF0ZShydCk7CiAKIAlpID0gMDsKIAl3aGlsZSAoZWxlbWVudHNbaV0ubmFtZSkgewpkaWZmIC0tZ2l0IGEvc291bmQvdXNiLzZmaXJlL2NvbnRyb2wuaCBiL3NvdW5kL3VzYi82ZmlyZS9jb250cm9sLmgKaW5kZXggYjUzNGM3Ny4uOGY1YWVlYSAxMDA2NDQKLS0tIGEvc291bmQvdXNiLzZmaXJlL2NvbnRyb2wuaAorKysgYi9zb3VuZC91c2IvNmZpcmUvY29udHJvbC5oCkBAIC0yMSwxMiArMjEsMjkgQEAKIAlDT05UUk9MX01BWF9FTEVNRU5UUyA9IDMyCiB9OwogCitlbnVtIHsKKwlDT05UUk9MX1JBVEVfNDRLSFosCisJQ09OVFJPTF9SQVRFXzQ4S0haLAorCUNPTlRST0xfUkFURV84OEtIWiwKKwlDT05UUk9MX1JBVEVfOTZLSFosCisJQ09OVFJPTF9SQVRFXzE3NktIWiwKKwlDT05UUk9MX1JBVEVfMTkyS0haLAorCUNPTlRST0xfTl9SQVRFUworfTsKKwogc3RydWN0IGNvbnRyb2xfcnVudGltZSB7CisJaW50ICgqdXBkYXRlX3N0cmVhbWluZykoc3RydWN0IGNvbnRyb2xfcnVudGltZSAqcnQpOworCWludCAoKnNldF9yYXRlKShzdHJ1Y3QgY29udHJvbF9ydW50aW1lICpydCwgaW50IHJhdGUpOworCWludCAoKnNldF9jaGFubmVscykoc3RydWN0IGNvbnRyb2xfcnVudGltZSAqcnQsIGludCBuX2FuYWxvZ19vdXQsCisJCWludCBuX2FuYWxvZ19pbiwgYm9vbCBzcGRpZl9vdXQsIGJvb2wgc3BkaWZfaW4pOworCiAJc3RydWN0IHNmaXJlX2NoaXAgKmNoaXA7CiAKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICplbGVtZW50W0NPTlRST0xfTUFYX0VMRU1FTlRTXTsKIAlib29sIG9wdF9jb2F4X3N3aXRjaDsKIAlib29sIGxpbmVfcGhvbm9fc3dpdGNoOworCWJvb2wgZGlnaXRhbF90aHJ1X3N3aXRjaDsKKwlib29sIHVzYl9zdHJlYW1pbmc7CiAJdTggbWFzdGVyX3ZvbDsKIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi82ZmlyZS9maXJtd2FyZS5jIGIvc291bmQvdXNiLzZmaXJlL2Zpcm13YXJlLmMKaW5kZXggODZjMWEzMS4uZDQ3YmVmZiAxMDA2NDQKLS0tIGEvc291bmQvdXNiLzZmaXJlL2Zpcm13YXJlLmMKKysrIGIvc291bmQvdXNiLzZmaXJlL2Zpcm13YXJlLmMKQEAgLTMsMTIgKzMsNiBAQAogICoKICAqIEZpcm13YXJlIGxvYWRlcgogICoKLSAqIEN1cnJlbnRseSBub3Qgd29ya2luZyBmb3IgYWxsIGRldmljZXMuIFRvIGJlIGFibGUgdG8gdXNlIHRoZSBkZXZpY2UKLSAqIGluIGxpbnV4LCBpdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGxldCB0aGUgd2luZG93cyBkcml2ZXIgdXBsb2FkIHRoZSBmaXJtd2FyZS4KLSAqIEZvciB0aGF0LCBzdGFydCB0aGUgY29tcHV0ZXIgaW4gd2luZG93cyBhbmQgcmVib290LgotICogQXMgbG9uZyBhcyB0aGUgZGV2aWNlIGlzIGNvbm5lY3RlZCB0byB0aGUgcG93ZXIgc3VwcGx5LCBubyBmaXJtd2FyZSByZWxvYWQKLSAqIG5lZWRzIHRvIGJlIHBlcmZvcm1lZC4KLSAqCiAgKiBBdXRob3I6CVRvcnN0ZW4gU2NoZW5rIDx0b3JzdGVuLnNjaGVua0B6b2hvLmNvbT4KICAqIENyZWF0ZWQ6CUphbiAwMSwgMjAxMQogICogVmVyc2lvbjoJMC4zLjAKQEAgLTIxLDYgKzE1LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRyZXYuaD4KIAogI2luY2x1ZGUgImZpcm13YXJlLmgiCiAjaW5jbHVkZSAiY2hpcC5oIgpAQCAtMzMsMzIgKzI4LDYgQEAKIAlGUEdBX0JVRlNJWkUgPSA1MTIsIEZQR0FfRVAgPSAyCiB9OwogCi1zdGF0aWMgY29uc3QgdTggQklUX1JFVkVSU0VfVEFCTEVbMjU2XSA9IHsKLQkweDAwLCAweDgwLCAweDQwLCAweGMwLCAweDIwLCAweGEwLCAweDYwLCAweGUwLCAweDEwLCAweDkwLCAweDUwLAotCTB4ZDAsIDB4MzAsIDB4YjAsIDB4NzAsIDB4ZjAsIDB4MDgsIDB4ODgsIDB4NDgsIDB4YzgsIDB4MjgsIDB4YTgsCi0JMHg2OCwgMHhlOCwgMHgxOCwgMHg5OCwgMHg1OCwgMHhkOCwgMHgzOCwgMHhiOCwgMHg3OCwgMHhmOCwgMHgwNCwKLQkweDg0LCAweDQ0LCAweGM0LCAweDI0LCAweGE0LCAweDY0LCAweGU0LCAweDE0LCAweDk0LCAweDU0LCAweGQ0LAotCTB4MzQsIDB4YjQsIDB4NzQsIDB4ZjQsIDB4MGMsIDB4OGMsIDB4NGMsIDB4Y2MsIDB4MmMsIDB4YWMsIDB4NmMsCi0JMHhlYywgMHgxYywgMHg5YywgMHg1YywgMHhkYywgMHgzYywgMHhiYywgMHg3YywgMHhmYywgMHgwMiwgMHg4MiwKLQkweDQyLCAweGMyLCAweDIyLCAweGEyLCAweDYyLCAweGUyLCAweDEyLCAweDkyLCAweDUyLCAweGQyLCAweDMyLAotCTB4YjIsIDB4NzIsIDB4ZjIsIDB4MGEsIDB4OGEsIDB4NGEsIDB4Y2EsIDB4MmEsIDB4YWEsIDB4NmEsIDB4ZWEsCi0JMHgxYSwgMHg5YSwgMHg1YSwgMHhkYSwgMHgzYSwgMHhiYSwgMHg3YSwgMHhmYSwgMHgwNiwgMHg4NiwgMHg0NiwKLQkweGM2LCAweDI2LCAweGE2LCAweDY2LCAweGU2LCAweDE2LCAweDk2LCAweDU2LCAweGQ2LCAweDM2LCAweGI2LAotCTB4NzYsIDB4ZjYsIDB4MGUsIDB4OGUsIDB4NGUsIDB4Y2UsIDB4MmUsIDB4YWUsIDB4NmUsIDB4ZWUsIDB4MWUsCi0JMHg5ZSwgMHg1ZSwgMHhkZSwgMHgzZSwgMHhiZSwgMHg3ZSwgMHhmZSwgMHgwMSwgMHg4MSwgMHg0MSwgMHhjMSwKLQkweDIxLCAweGExLCAweDYxLCAweGUxLCAweDExLCAweDkxLCAweDUxLCAweGQxLCAweDMxLCAweGIxLCAweDcxLAotCTB4ZjEsIDB4MDksIDB4ODksIDB4NDksIDB4YzksIDB4MjksIDB4YTksIDB4NjksIDB4ZTksIDB4MTksIDB4OTksCi0JMHg1OSwgMHhkOSwgMHgzOSwgMHhiOSwgMHg3OSwgMHhmOSwgMHgwNSwgMHg4NSwgMHg0NSwgMHhjNSwgMHgyNSwKLQkweGE1LCAweDY1LCAweGU1LCAweDE1LCAweDk1LCAweDU1LCAweGQ1LCAweDM1LCAweGI1LCAweDc1LCAweGY1LAotCTB4MGQsIDB4OGQsIDB4NGQsIDB4Y2QsIDB4MmQsIDB4YWQsIDB4NmQsIDB4ZWQsIDB4MWQsIDB4OWQsIDB4NWQsCi0JMHhkZCwgMHgzZCwgMHhiZCwgMHg3ZCwgMHhmZCwgMHgwMywgMHg4MywgMHg0MywgMHhjMywgMHgyMywgMHhhMywKLQkweDYzLCAweGUzLCAweDEzLCAweDkzLCAweDUzLCAweGQzLCAweDMzLCAweGIzLCAweDczLCAweGYzLCAweDBiLAotCTB4OGIsIDB4NGIsIDB4Y2IsIDB4MmIsIDB4YWIsIDB4NmIsIDB4ZWIsIDB4MWIsIDB4OWIsIDB4NWIsIDB4ZGIsCi0JMHgzYiwgMHhiYiwgMHg3YiwgMHhmYiwgMHgwNywgMHg4NywgMHg0NywgMHhjNywgMHgyNywgMHhhNywgMHg2NywKLQkweGU3LCAweDE3LCAweDk3LCAweDU3LCAweGQ3LCAweDM3LCAweGI3LCAweDc3LCAweGY3LCAweDBmLCAweDhmLAotCTB4NGYsIDB4Y2YsIDB4MmYsIDB4YWYsIDB4NmYsIDB4ZWYsIDB4MWYsIDB4OWYsIDB4NWYsIDB4ZGYsIDB4M2YsCi0JMHhiZiwgMHg3ZiwgMHhmZiB9OwotCiAvKgogICogd01heFBhY2tldFNpemUgb2YgcGNtIGVuZHBvaW50cy4KICAqIGtlZXAgc3luY2VkIHdpdGggcmF0ZXNfaW5fcGFja2V0X3NpemUgYW5kIHJhdGVzX291dF9wYWNrZXRfc2l6ZSBpbiBwY20uYwpAQCAtNzIsNiArNDEsMTAgQEAKIAkweDk0LCAweDAxLCAweDVjLCAweDAyICAvKiBhbHQgMzogNDA0IEVQMiBhbmQgNjA0IEVQNiAoMjUgZnBwKSAqLwogfTsKIAorc3RhdGljIGNvbnN0IHU4IGtub3duX2Z3X3ZlcnNpb25zW11bNF0gPSB7CisJeyAweDAzLCAweDAxLCAweDBiLCAweDAwIH0KK307CisKIHN0cnVjdCBpaGV4X3JlY29yZCB7CiAJdTE2IGFkZHJlc3M7CiAJdTggbGVuOwpAQCAtMzQwLDcgKzMxMyw3IEBACiAKIAl3aGlsZSAoYyAhPSBlbmQpIHsKIAkJZm9yIChpID0gMDsgYyAhPSBlbmQgJiYgaSA8IEZQR0FfQlVGU0laRTsgaSsrLCBjKyspCi0JCQlidWZmZXJbaV0gPSBCSVRfUkVWRVJTRV9UQUJMRVsodTgpICpjXTsKKwkJCWJ1ZmZlcltpXSA9IGJ5dGVfcmV2X3RhYmxlWyh1OCkgKmNdOwogCiAJCXJldCA9IHVzYjZmaXJlX2Z3X2ZwZ2Ffd3JpdGUoZGV2aWNlLCBidWZmZXIsIGkpOwogCQlpZiAocmV0IDwgMCkgewpAQCAtMzYzLDYgKzMzNiwyNSBAQAogCXJldHVybiAwOwogfQogCisvKiBjaGVjaywgaWYgdGhlIGZpcm13YXJlIHZlcnNpb24gdGhlIGRldmljZXMgaGFzIGN1cnJlbnRseSBsb2FkZWQKKyAqIGlzIGtub3duIGJ5IHRoaXMgZHJpdmVyLiAndmVyc2lvbicgbmVlZHMgdG8gaGF2ZSA0IGJ5dGVzIHZlcnNpb24KKyAqIGluZm8gZGF0YS4gKi8KK3N0YXRpYyBpbnQgdXNiNmZpcmVfZndfY2hlY2sodTggKnZlcnNpb24pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShrbm93bl9md192ZXJzaW9ucyk7IGkrKykKKwkJaWYgKCFtZW1jbXAodmVyc2lvbiwga25vd25fZndfdmVyc2lvbnMgKyBpLCA0KSkKKwkJCXJldHVybiAwOworCisJc25kX3ByaW50ayhLRVJOX0VSUiBQUkVGSVggImludmFsaWQgZmltd2FyZSB2ZXJzaW9uIGluIGRldmljZTogIgorCQkJIiUwMnggJTAyeCAlMDJ4ICUwMnguICIKKwkJCSJwbGVhc2UgcmVjb25uZWN0IHRvIHBvd2VyLiBpZiB0aGlzIGZhaWx1cmUgIgorCQkJInN0aWxsIGhhcHBlbnMsIGNoZWNrIHlvdXIgZmlybXdhcmUgaW5zdGFsbGF0aW9uLiIsCisJCQl2ZXJzaW9uWzBdLCB2ZXJzaW9uWzFdLCB2ZXJzaW9uWzJdLCB2ZXJzaW9uWzNdKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKwogaW50IHVzYjZmaXJlX2Z3X2luaXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJaW50IGk7CkBAIC0zNzgsOSArMzcwLDcgQEAKIAkJCQkiZmlybXdhcmUgc3RhdGUuXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9Ci0JaWYgKGJ1ZmZlclswXSAhPSAweGViIHx8IGJ1ZmZlclsxXSAhPSAweGFhIHx8IGJ1ZmZlclsyXSAhPSAweDU1Ci0JCQl8fCBidWZmZXJbNF0gIT0gMHgwMyB8fCBidWZmZXJbNV0gIT0gMHgwMSB8fCBidWZmZXJbN10KLQkJCSE9IDB4MDApIHsKKwlpZiAoYnVmZmVyWzBdICE9IDB4ZWIgfHwgYnVmZmVyWzFdICE9IDB4YWEgfHwgYnVmZmVyWzJdICE9IDB4NTUpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiBQUkVGSVggInVua25vd24gZGV2aWNlIGZpcm13YXJlIHN0YXRlICIKIAkJCQkicmVjZWl2ZWQgZnJvbSBkZXZpY2U6ICIpOwogCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQpAQCAtMzg5LDcgKzM3OSw3IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAkvKiBkbyB3ZSBuZWVkIGZwZ2EgbG9hZGVyIGV6dXNiIGZpcm13YXJlPyAqLwotCWlmIChidWZmZXJbM10gPT0gMHgwMSAmJiBidWZmZXJbNl0gPT0gMHgxOSkgeworCWlmIChidWZmZXJbM10gPT0gMHgwMSkgewogCQlyZXQgPSB1c2I2ZmlyZV9md19lenVzYl91cGxvYWQoaW50ZiwKIAkJCQkiNmZpcmUvZG14NmZpcmVsMi5paHgiLCAwLCBOVUxMLCAwKTsKIAkJaWYgKHJldCA8IDApCkBAIC0zOTcsNyArMzg3LDEwIEBACiAJCXJldHVybiBGV19OT1RfUkVBRFk7CiAJfQogCS8qIGRvIHdlIG5lZWQgZnBnYSBmaXJtd2FyZSBhbmQgYXBwbGljYXRpb24gZXp1c2IgZmlybXdhcmU/ICovCi0JZWxzZSBpZiAoYnVmZmVyWzNdID09IDB4MDIgJiYgYnVmZmVyWzZdID09IDB4MGIpIHsKKwllbHNlIGlmIChidWZmZXJbM10gPT0gMHgwMikgeworCQlyZXQgPSB1c2I2ZmlyZV9md19jaGVjayhidWZmZXIgKyA0KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OwogCQlyZXQgPSB1c2I2ZmlyZV9md19mcGdhX3VwbG9hZChpbnRmLCAiNmZpcmUvZG14NmZpcmVjZi5iaW4iKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwpAQCAtNDEwLDggKzQwMyw4IEBACiAJCXJldHVybiBGV19OT1RfUkVBRFk7CiAJfQogCS8qIGFsbCBmdyBsb2FkZWQ/ICovCi0JZWxzZSBpZiAoYnVmZmVyWzNdID09IDB4MDMgJiYgYnVmZmVyWzZdID09IDB4MGIpCi0JCXJldHVybiAwOworCWVsc2UgaWYgKGJ1ZmZlclszXSA9PSAweDAzKQorCQlyZXR1cm4gdXNiNmZpcmVfZndfY2hlY2soYnVmZmVyICsgNCk7CiAJLyogdW5rbm93biBkYXRhPyAqLwogCWVsc2UgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAidW5rbm93biBkZXZpY2UgZmlybXdhcmUgc3RhdGUgIgpkaWZmIC0tZ2l0IGEvc291bmQvdXNiLzZmaXJlL3BjbS5jIGIvc291bmQvdXNiLzZmaXJlL3BjbS5jCmluZGV4IGJhNjJjNzQuLmIxMzdiMjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi82ZmlyZS9wY20uYworKysgYi9zb3VuZC91c2IvNmZpcmUvcGNtLmMKQEAgLTE3LDI2ICsxNywyMyBAQAogI2luY2x1ZGUgInBjbS5oIgogI2luY2x1ZGUgImNoaXAuaCIKICNpbmNsdWRlICJjb21tLmgiCisjaW5jbHVkZSAiY29udHJvbC5oIgogCiBlbnVtIHsKIAlPVVRfTl9DSEFOTkVMUyA9IDYsIElOX05fQ0hBTk5FTFMgPSA0CiB9OwogCiAvKiBrZWVwIG5leHQgdHdvIHN5bmNlZCB3aXRoCi0gKiBGV19FUF9XX01BWF9QQUNLRVRfU0laRVtdIGFuZCBSQVRFU19NQVhfUEFDS0VUX1NJWkUgKi8KKyAqIEZXX0VQX1dfTUFYX1BBQ0tFVF9TSVpFW10gYW5kIFJBVEVTX01BWF9QQUNLRVRfU0laRQorICogYW5kIENPTlRST0xfUkFURV9YWFggaW4gY29udHJvbC5oICovCiBzdGF0aWMgY29uc3QgaW50IHJhdGVzX2luX3BhY2tldF9zaXplW10gPSB7IDIyOCwgMjI4LCA0MjAsIDQyMCwgNDA0LCA0MDQgfTsKIHN0YXRpYyBjb25zdCBpbnQgcmF0ZXNfb3V0X3BhY2tldF9zaXplW10gPSB7IDIyOCwgMjI4LCA0MjAsIDQyMCwgNjA0LCA2MDQgfTsKIHN0YXRpYyBjb25zdCBpbnQgcmF0ZXNbXSA9IHsgNDQxMDAsIDQ4MDAwLCA4ODIwMCwgOTYwMDAsIDE3NjQwMCwgMTkyMDAwIH07Ci1zdGF0aWMgY29uc3QgaW50IHJhdGVzX2FsdHNldHRpbmdbXSA9IHsgMSwgMSwgMiwgMiwgMywgMyB9Owogc3RhdGljIGNvbnN0IGludCByYXRlc19hbHNhaWRbXSA9IHsKIAlTTkRSVl9QQ01fUkFURV80NDEwMCwgU05EUlZfUENNX1JBVEVfNDgwMDAsCiAJU05EUlZfUENNX1JBVEVfODgyMDAsIFNORFJWX1BDTV9SQVRFXzk2MDAwLAogCVNORFJWX1BDTV9SQVRFXzE3NjQwMCwgU05EUlZfUENNX1JBVEVfMTkyMDAwIH07CiAKLS8qIHZhbHVlcyB0byB3cml0ZSB0byBzb3VuZGNhcmQgcmVnaXN0ZXIgZm9yIGFsbCBzYW1wbGVyYXRlcyAqLwotc3RhdGljIGNvbnN0IHUxNiByYXRlc182ZmlyZV92bFtdID0gezB4MDAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDF9Owotc3RhdGljIGNvbnN0IHUxNiByYXRlc182ZmlyZV92aFtdID0gezB4MTEsIDB4MTEsIDB4MTAsIDB4MTAsIDB4MDAsIDB4MDB9OwotCiBlbnVtIHsgLyogc2V0dGluZ3MgZm9yIHBjbSAqLwogCU9VVF9FUCA9IDYsIElOX0VQID0gMiwgTUFYX0JVRlNJWkUgPSAxMjggKiAxMDI0CiB9OwpAQCAtNDgsMTUgKzQ1LDYgQEAKIAlTVFJFQU1fU1RPUFBJTkcKIH07CiAKLWVudW0geyAvKiBwY20gc2FtcGxlIHJhdGVzIChhbHNvIGluZGV4IGludG8gUkFURVNfWFhYW10pICovCi0JUkFURV80NEtIWiwKLQlSQVRFXzQ4S0haLAotCVJBVEVfODhLSFosCi0JUkFURV85NktIWiwKLQlSQVRFXzE3NktIWiwKLQlSQVRFXzE5MktIWgotfTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHBjbV9odyA9IHsKIAkuaW5mbyA9IFNORFJWX1BDTV9JTkZPX01NQVAgfAogCQlTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CkBAIC02NCw3ICs1Miw3IEBACiAJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAogCQlTTkRSVl9QQ01fSU5GT19CQVRDSCwKIAotCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUsCisJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFLAogCiAJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDQxMDAgfAogCQlTTkRSVl9QQ01fUkFURV80ODAwMCB8CkBAIC04Nyw1NyArNzUsMzQgQEAKIHN0YXRpYyBpbnQgdXNiNmZpcmVfcGNtX3NldF9yYXRlKHN0cnVjdCBwY21fcnVudGltZSAqcnQpCiB7CiAJaW50IHJldDsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2aWNlID0gcnQtPmNoaXAtPmRldjsKLQlzdHJ1Y3QgY29tbV9ydW50aW1lICpjb21tX3J0ID0gcnQtPmNoaXAtPmNvbW07CisJc3RydWN0IGNvbnRyb2xfcnVudGltZSAqY3RybF9ydCA9IHJ0LT5jaGlwLT5jb250cm9sOwogCi0JaWYgKHJ0LT5yYXRlID49IEFSUkFZX1NJWkUocmF0ZXMpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQkvKiBkaXNhYmxlIHN0cmVhbWluZyAqLwotCXJldCA9IGNvbW1fcnQtPndyaXRlMTYoY29tbV9ydCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCk7CisJY3RybF9ydC0+dXNiX3N0cmVhbWluZyA9IGZhbHNlOworCXJldCA9IGN0cmxfcnQtPnVwZGF0ZV9zdHJlYW1pbmcoY3RybF9ydCk7CiAJaWYgKHJldCA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiBQUkVGSVggImVycm9yIHN0b3BwaW5nIHN0cmVhbWluZyB3aGlsZSAiCiAJCQkJInNldHRpbmcgc2FtcGxlcmF0ZSAlZC5cbiIsIHJhdGVzW3J0LT5yYXRlXSk7CiAJCXJldHVybiByZXQ7CiAJfQogCi0JcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UoZGV2aWNlLCAxLCByYXRlc19hbHRzZXR0aW5nW3J0LT5yYXRlXSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiBQUkVGSVggImVycm9yIHNldHRpbmcgaW50ZXJmYWNlICIKLQkJCQkiYWx0c2V0dGluZyAlZCBmb3Igc2FtcGxlcmF0ZSAlZC5cbiIsCi0JCQkJcmF0ZXNfYWx0c2V0dGluZ1tydC0+cmF0ZV0sIHJhdGVzW3J0LT5yYXRlXSk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyogc2V0IHNvdW5kY2FyZCBjbG9jayAqLwotCXJldCA9IGNvbW1fcnQtPndyaXRlMTYoY29tbV9ydCwgMHgwMiwgMHgwMSwgcmF0ZXNfNmZpcmVfdmxbcnQtPnJhdGVdLAotCQkJcmF0ZXNfNmZpcmVfdmhbcnQtPnJhdGVdKTsKKwlyZXQgPSBjdHJsX3J0LT5zZXRfcmF0ZShjdHJsX3J0LCBydC0+cmF0ZSk7CiAJaWYgKHJldCA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiBQUkVGSVggImVycm9yIHNldHRpbmcgc2FtcGxlcmF0ZSAlZC5cbiIsCiAJCQkJcmF0ZXNbcnQtPnJhdGVdKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQkvKiBlbmFibGUgYW5hbG9nIGlucHV0cyBhbmQgb3V0cHV0cwotCSAqIChvbmUgYml0IHBlciBzdGVyZW8tY2hhbm5lbCkgKi8KLQlyZXQgPSBjb21tX3J0LT53cml0ZTE2KGNvbW1fcnQsIDB4MDIsIDB4MDIsCi0JCQkoMSA8PCAoT1VUX05fQ0hBTk5FTFMgLyAyKSkgLSAxLAotCQkJKDEgPDwgKElOX05fQ0hBTk5FTFMgLyAyKSkgLSAxKTsKKwlyZXQgPSBjdHJsX3J0LT5zZXRfY2hhbm5lbHMoY3RybF9ydCwgT1VUX05fQ0hBTk5FTFMsIElOX05fQ0hBTk5FTFMsCisJCQlmYWxzZSwgZmFsc2UpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgUFJFRklYICJlcnJvciBpbml0aWFsaXppbmcgYW5hbG9nIGNoYW5uZWxzICIKKwkJc25kX3ByaW50ayhLRVJOX0VSUiBQUkVGSVggImVycm9yIGluaXRpYWxpemluZyBjaGFubmVscyAiCiAJCQkJIndoaWxlIHNldHRpbmcgc2FtcGxlcmF0ZSAlZC5cbiIsCiAJCQkJcmF0ZXNbcnQtPnJhdGVdKTsKIAkJcmV0dXJuIHJldDsKIAl9Ci0JLyogZGlzYWJsZSBkaWdpdGFsIGlucHV0cyBhbmQgb3V0cHV0cyAqLwotCXJldCA9IGNvbW1fcnQtPndyaXRlMTYoY29tbV9ydCwgMHgwMiwgMHgwMywgMHgwMCwgMHgwMCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiBQUkVGSVggImVycm9yIGluaXRpYWxpemluZyBkaWdpdGFsICIKLQkJCQkiY2hhbm5lbHMgd2hpbGUgc2V0dGluZyBzYW1wbGVyYXRlICVkLlxuIiwKLQkJCQlyYXRlc1tydC0+cmF0ZV0pOwotCQlyZXR1cm4gcmV0OwotCX0KIAotCXJldCA9IGNvbW1fcnQtPndyaXRlMTYoY29tbV9ydCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMSk7CisJY3RybF9ydC0+dXNiX3N0cmVhbWluZyA9IHRydWU7CisJcmV0ID0gY3RybF9ydC0+dXBkYXRlX3N0cmVhbWluZyhjdHJsX3J0KTsKIAlpZiAocmV0IDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiZXJyb3Igc3RhcnRpbmcgc3RyZWFtaW5nIHdoaWxlICIKIAkJCQkic2V0dGluZyBzYW1wbGVyYXRlICVkLlxuIiwgcmF0ZXNbcnQtPnJhdGVdKTsKQEAgLTE2OCwxMiArMTMzLDE1IEBACiBzdGF0aWMgdm9pZCB1c2I2ZmlyZV9wY21fc3RyZWFtX3N0b3Aoc3RydWN0IHBjbV9ydW50aW1lICpydCkKIHsKIAlpbnQgaTsKKwlzdHJ1Y3QgY29udHJvbF9ydW50aW1lICpjdHJsX3J0ID0gcnQtPmNoaXAtPmNvbnRyb2w7CiAKIAlpZiAocnQtPnN0cmVhbV9zdGF0ZSAhPSBTVFJFQU1fRElTQUJMRUQpIHsKIAkJZm9yIChpID0gMDsgaSA8IFBDTV9OX1VSQlM7IGkrKykgewogCQkJdXNiX2tpbGxfdXJiKCZydC0+aW5fdXJic1tpXS5pbnN0YW5jZSk7CiAJCQl1c2Jfa2lsbF91cmIoJnJ0LT5vdXRfdXJic1tpXS5pbnN0YW5jZSk7CiAJCX0KKwkJY3RybF9ydC0+dXNiX3N0cmVhbWluZyA9IGZhbHNlOworCQljdHJsX3J0LT51cGRhdGVfc3RyZWFtaW5nKGN0cmxfcnQpOwogCQlydC0+c3RyZWFtX3N0YXRlID0gU1RSRUFNX0RJU0FCTEVEOwogCX0KIH0KQEAgLTIyOCw3ICsxOTYsNyBAQAogCXVuc2lnbmVkIGludCB0b3RhbF9sZW5ndGggPSAwOwogCXN0cnVjdCBwY21fcnVudGltZSAqcnQgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1Yi0+aW5zdGFuY2UpOwogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKmFsc2FfcnQgPSBzdWItPmluc3RhbmNlLT5ydW50aW1lOwotCXUzMiAqc3JjID0gKHUzMiAqKSB1cmItPmJ1ZmZlcjsKKwl1MzIgKnNyYyA9IE5VTEw7CiAJdTMyICpkZXN0ID0gKHUzMiAqKSAoYWxzYV9ydC0+ZG1hX2FyZWEgKyBzdWItPmRtYV9vZmYKIAkJCSogKGFsc2FfcnQtPmZyYW1lX2JpdHMgPj4gMykpOwogCXUzMiAqZGVzdF9lbmQgPSAodTMyICopIChhbHNhX3J0LT5kbWFfYXJlYSArIGFsc2FfcnQtPmJ1ZmZlcl9zaXplCkBAIC0yNDQsNyArMjEyLDEyIEBACiAJCWVsc2UKIAkJCWZyYW1lX2NvdW50ID0gMDsKIAotCQlzcmMgPSAodTMyICopICh1cmItPmJ1ZmZlciArIHRvdGFsX2xlbmd0aCk7CisJCWlmIChhbHNhX3J0LT5mb3JtYXQgPT0gU05EUlZfUENNX0ZPUk1BVF9TMjRfTEUpCisJCQlzcmMgPSAodTMyICopICh1cmItPmJ1ZmZlciArIHRvdGFsX2xlbmd0aCk7CisJCWVsc2UgaWYgKGFsc2FfcnQtPmZvcm1hdCA9PSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRSkKKwkJCXNyYyA9ICh1MzIgKikgKHVyYi0+YnVmZmVyIC0gMSArIHRvdGFsX2xlbmd0aCk7CisJCWVsc2UKKwkJCXJldHVybjsKIAkJc3JjKys7IC8qIHNraXAgbGVhZGluZyA0IGJ5dGVzIG9mIGV2ZXJ5IHBhY2tldCAqLwogCQl0b3RhbF9sZW5ndGggKz0gdXJiLT5wYWNrZXRzW2ldLmxlbmd0aDsKIAkJZm9yIChmcmFtZSA9IDA7IGZyYW1lIDwgZnJhbWVfY291bnQ7IGZyYW1lKyspIHsKQEAgLTI3NCw5ICsyNDcsMTggQEAKIAkJCSogKGFsc2FfcnQtPmZyYW1lX2JpdHMgPj4gMykpOwogCXUzMiAqc3JjX2VuZCA9ICh1MzIgKikgKGFsc2FfcnQtPmRtYV9hcmVhICsgYWxzYV9ydC0+YnVmZmVyX3NpemUKIAkJCSogKGFsc2FfcnQtPmZyYW1lX2JpdHMgPj4gMykpOwotCXUzMiAqZGVzdCA9ICh1MzIgKikgdXJiLT5idWZmZXI7CisJdTMyICpkZXN0OwogCWludCBieXRlc19wZXJfZnJhbWUgPSBhbHNhX3J0LT5jaGFubmVscyA8PCAyOwogCisJaWYgKGFsc2FfcnQtPmZvcm1hdCA9PSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRSkKKwkJZGVzdCA9ICh1MzIgKikgKHVyYi0+YnVmZmVyIC0gMSk7CisJZWxzZSBpZiAoYWxzYV9ydC0+Zm9ybWF0ID09IFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFKQorCQlkZXN0ID0gKHUzMiAqKSAodXJiLT5idWZmZXIpOworCWVsc2UgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiVW5rbm93biBzYW1wbGUgZm9ybWF0LiIpOworCQlyZXR1cm47CisJfQorCiAJZm9yIChpID0gMDsgaSA8IFBDTV9OX1BBQ0tFVFNfUEVSX1VSQjsgaSsrKSB7CiAJCS8qIGF0IGxlYXN0IDQgaGVhZGVyIGJ5dGVzIGZvciB2YWxpZCBwYWNrZXQuCiAJCSAqIGFmdGVyIHRoYXQ6IDMyIGJpdHMgcGVyIHNhbXBsZSBmb3IgYW5hbG9nIGNoYW5uZWxzICovCkBAIC00NTYsNyArNDM4LDcgQEAKIAkJLyogYWxsIHN1YnN0cmVhbXMgY2xvc2VkPyBpZiBzbywgc3RvcCBzdHJlYW1pbmcgKi8KIAkJaWYgKCFydC0+cGxheWJhY2suaW5zdGFuY2UgJiYgIXJ0LT5jYXB0dXJlLmluc3RhbmNlKSB7CiAJCQl1c2I2ZmlyZV9wY21fc3RyZWFtX3N0b3AocnQpOwotCQkJcnQtPnJhdGUgPSAtMTsKKwkJCXJ0LT5yYXRlID0gQVJSQVlfU0laRShyYXRlcyk7CiAJCX0KIAl9CiAJbXV0ZXhfdW5sb2NrKCZydC0+c3RyZWFtX211dGV4KTsKQEAgLTQ4MCw3ICs0NjIsNiBAQAogCXN0cnVjdCBwY21fcnVudGltZSAqcnQgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKGFsc2Ffc3ViKTsKIAlzdHJ1Y3QgcGNtX3N1YnN0cmVhbSAqc3ViID0gdXNiNmZpcmVfcGNtX2dldF9zdWJzdHJlYW0oYWxzYV9zdWIpOwogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKmFsc2FfcnQgPSBhbHNhX3N1Yi0+cnVudGltZTsKLQlpbnQgaTsKIAlpbnQgcmV0OwogCiAJaWYgKHJ0LT5wYW5pYykKQEAgLTQ5MywxMiArNDc0LDEwIEBACiAJc3ViLT5wZXJpb2Rfb2ZmID0gMDsKIAogCWlmIChydC0+c3RyZWFtX3N0YXRlID09IFNUUkVBTV9ESVNBQkxFRCkgewotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYXRlcyk7IGkrKykKLQkJCWlmIChhbHNhX3J0LT5yYXRlID09IHJhdGVzW2ldKSB7Ci0JCQkJcnQtPnJhdGUgPSBpOworCQlmb3IgKHJ0LT5yYXRlID0gMDsgcnQtPnJhdGUgPCBBUlJBWV9TSVpFKHJhdGVzKTsgcnQtPnJhdGUrKykKKwkJCWlmIChhbHNhX3J0LT5yYXRlID09IHJhdGVzW3J0LT5yYXRlXSkKIAkJCQlicmVhazsKLQkJCX0KLQkJaWYgKGkgPT0gQVJSQVlfU0laRShyYXRlcykpIHsKKwkJaWYgKHJ0LT5yYXRlID09IEFSUkFZX1NJWkUocmF0ZXMpKSB7CiAJCQltdXRleF91bmxvY2soJnJ0LT5zdHJlYW1fbXV0ZXgpOwogCQkJc25kX3ByaW50aygiaW52YWxpZCByYXRlICVkIGluIHByZXBhcmUuXG4iLAogCQkJCQlhbHNhX3J0LT5yYXRlKTsKQEAgLTYxMyw3ICs1OTIsNyBAQAogCiAJcnQtPmNoaXAgPSBjaGlwOwogCXJ0LT5zdHJlYW1fc3RhdGUgPSBTVFJFQU1fRElTQUJMRUQ7Ci0JcnQtPnJhdGUgPSAtMTsKKwlydC0+cmF0ZSA9IEFSUkFZX1NJWkUocmF0ZXMpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJ0LT5zdHJlYW1fd2FpdF9xdWV1ZSk7CiAJbXV0ZXhfaW5pdCgmcnQtPnN0cmVhbV9tdXRleCk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9LY29uZmlnIGIvc291bmQvdXNiL0tjb25maWcKaW5kZXggOTc3MjRkOC4uOGJlYjc3NSAxMDA2NDQKLS0tIGEvc291bmQvdXNiL0tjb25maWcKKysrIGIvc291bmQvdXNiL0tjb25maWcKQEAgLTEwMCwxOSArMTAwLDE3IEBACiAKIGNvbmZpZyBTTkRfVVNCXzZGSVJFCiAgICAgICAgIHRyaXN0YXRlICJUZXJyYVRlYyBETVggNkZpcmUgVVNCIgotICAgICAgICBkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogICAgICAgICBzZWxlY3QgRldfTE9BREVSCisgICAgICAgIHNlbGVjdCBCSVRSRVZFUlNFCiAgICAgICAgIHNlbGVjdCBTTkRfUkFXTUlESQogICAgICAgICBzZWxlY3QgU05EX1BDTQogICAgICAgICBoZWxwCiAgICAgICAgICAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIFRlcnJhVGVjIDZmaXJlIERNWCBVU0IgaW50ZXJmYWNlLgogCiAgICAgICAgICAgWW91IHdpbGwgbmVlZCBmaXJtd2FyZSBmaWxlcyBpbiBvcmRlciB0byBiZSBhYmxlIHRvIHVzZSB0aGUgZGV2aWNlCi0gICAgICAgICAgYWZ0ZXIgaXQgaGFzIGJlZW4gY29sZHN0YXJ0ZWQuIFRoaXMgZHJpdmVyIGN1cnJlbnRseSBkb2VzIG5vdCBzdXBwb3J0Ci0gICAgICAgICAgZmlybXdhcmUgbG9hZGluZyBmb3IgYWxsIGRldmljZXMuIElmIHlvdSBvd24gc3VjaCBhIGRldmljZSwKLSAgICAgICAgICB5b3UgY291bGQgc3RhcnQgd2luZG93cyBhbmQgbGV0IHRoZSB3aW5kb3dzIGRyaXZlciB1cGxvYWQKLSAgICAgICAgICB0aGUgZmlybXdhcmUuIEFzIGxvbmcgYXMgeW91IGRvIG5vdCB1bnBsdWcgeW91ciBkZXZpY2UgZnJvbSBwb3dlciwKLSAgICAgICAgICBpdCBzaG91bGQgYmUgdXNhYmxlLgorICAgICAgICAgIGFmdGVyIGl0IGhhcyBiZWVuIGNvbGRzdGFydGVkLiBBbiBpbnN0YWxsIHNjcmlwdCBmb3IgdGhlIGZpcm13YXJlCisgICAgICAgICAgYW5kIGZ1cnRoZXIgaGVscCBjYW4gYmUgZm91bmQgYXQKKyAgICAgICAgICBodHRwOi8vc2l4ZmlyZXVzYi5zb3VyY2Vmb3JnZS5uZXQKIAogZW5kaWYJIyBTTkRfVVNCCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9jbG9jay5jIGIvc291bmQvdXNiL2Nsb2NrLmMKaW5kZXggNzc1NGExMC4uMDc1MTk1ZSAxMDA2NDQKLS0tIGEvc291bmQvdXNiL2Nsb2NrLmMKKysrIGIvc291bmQvdXNiL2Nsb2NrLmMKQEAgLTEwNCw2ICsxMDQsMTUgQEAKIAlpbnQgZXJyOwogCXVuc2lnbmVkIGNoYXIgZGF0YTsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gY2hpcC0+ZGV2OworCXN0cnVjdCB1YWNfY2xvY2tfc291cmNlX2Rlc2NyaXB0b3IgKmNzX2Rlc2MgPQorCQlzbmRfdXNiX2ZpbmRfY2xvY2tfc291cmNlKGNoaXAtPmN0cmxfaW50Ziwgc291cmNlX2lkKTsKKworCWlmICghY3NfZGVzYykKKwkJcmV0dXJuIDA7CisKKwkvKiBJZiBhIGNsb2NrIHNvdXJjZSBjYW4ndCB0ZWxsIHVzIHdoZXRoZXIgaXQncyB2YWxpZCwgd2UgYXNzdW1lIGl0IGlzICovCisJaWYgKCF1YWMyX2NvbnRyb2xfaXNfcmVhZGFibGUoY3NfZGVzYy0+Ym1Db250cm9scywgVUFDMl9DU19DT05UUk9MX0NMT0NLX1ZBTElEKSkKKwkJcmV0dXJuIDE7CiAKIAllcnIgPSBzbmRfdXNiX2N0bF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgVUFDMl9DU19DVVIsCiAJCQkgICAgICBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX0lOLApAQCAtMTE0LDcgKzEyMyw3IEBACiAJaWYgKGVyciA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIiVzKCk6IGNhbm5vdCBnZXQgY2xvY2sgdmFsaWRpdHkgZm9yIGlkICVkXG4iLAogCQkJICAgX19mdW5jX18sIHNvdXJjZV9pZCk7Ci0JCXJldHVybiBlcnI7CisJCXJldHVybiAwOwogCX0KIAogCXJldHVybiAhIWRhdGE7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvZGVidWcuaCBiL3NvdW5kL3VzYi9kZWJ1Zy5oCmluZGV4IDM0M2VjMmQuLjU4MDMwMTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9kZWJ1Zy5oCisrKyBiL3NvdW5kL3VzYi9kZWJ1Zy5oCkBAIC04LDcgKzgsNyBAQAogI2lmZGVmIEhXX0NPTlNUX0RFQlVHCiAjZGVmaW5lIGh3Y19kZWJ1ZyhmbXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHIGZtdCwgIyNhcmdzKQogI2Vsc2UKLSNkZWZpbmUgaHdjX2RlYnVnKGZtdCwgYXJncy4uLikgLyoqLworI2RlZmluZSBod2NfZGVidWcoZm10LCBhcmdzLi4uKSBkbyB7IH0gd2hpbGUoMCkKICNlbmRpZgogCiAjZW5kaWYgLyogX19VU0JBVURJT19ERUJVR19IICovCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvZm9ybWF0LmMgYi9zb3VuZC91c2IvZm9ybWF0LmMKaW5kZXggZjA3OWI1ZS4uOGQwNDJkYyAxMDA2NDQKLS0tIGEvc291bmQvdXNiL2Zvcm1hdC5jCisrKyBiL3NvdW5kL3VzYi9mb3JtYXQuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgImhlbHBlci5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAjaW5jbHVkZSAiY2xvY2suaCIKKyNpbmNsdWRlICJmb3JtYXQuaCIKIAogLyoKICAqIHBhcnNlIHRoZSBhdWRpbyBmb3JtYXQgdHlwZSBJIGRlc2NyaXB0b3IKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9taXhlci5jIGIvc291bmQvdXNiL21peGVyLmMKaW5kZXggNmVjMzNiNi4uZWFiMDZlZCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL21peGVyLmMKKysrIGIvc291bmQvdXNiL21peGVyLmMKQEAgLTEwOTcsMTEgKzEwOTcsMTMgQEAKIAkJYXBwZW5kX2N0bF9uYW1lKGtjdGwsIGNvbnRyb2wgPT0gVUFDX0ZVX01VVEUgPwogCQkJCSIgU3dpdGNoIiA6ICIgVm9sdW1lIik7CiAJCWlmIChjb250cm9sID09IFVBQ19GVV9WT0xVTUUpIHsKLQkJCWtjdGwtPnRsdi5jID0gbWl4ZXJfdm9sX3RsdjsKLQkJCWtjdGwtPnZkWzBdLmFjY2VzcyB8PSAKLQkJCQlTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQUQgfAotCQkJCVNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfQ0FMTEJBQ0s7CiAJCQljaGVja19tYXBwZWRfZEIobWFwLCBjdmFsKTsKKwkJCWlmIChjdmFsLT5kQm1pbiA8IGN2YWwtPmRCbWF4KSB7CisJCQkJa2N0bC0+dGx2LmMgPSBtaXhlcl92b2xfdGx2OworCQkJCWtjdGwtPnZkWzBdLmFjY2VzcyB8PSAKKwkJCQkJU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEIHwKKwkJCQkJU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9DQUxMQkFDSzsKKwkJCX0KIAkJfQogCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvc291bmQvdXNiL21peGVyX3F1aXJrcy5jIGIvc291bmQvdXNiL21peGVyX3F1aXJrcy5jCmluZGV4IDczZGNjODIuLjkxNDZjZmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9taXhlcl9xdWlya3MuYworKysgYi9zb3VuZC91c2IvbWl4ZXJfcXVpcmtzLmMKQEAgLTYxLDYgKzYxLDcgQEAKIAl7IFVTQl9JRCgweDA0MWUsIDB4MzAyMCksIDIsIDEsIDYsIDYsICAxOCwgMHgwMDEzIH0sIC8qIEF1ZGlneSAyIE5YICAqLwogCXsgVVNCX0lEKDB4MDQxZSwgMHgzMDQwKSwgMiwgMiwgNiwgNiwgIDIsICAweDZlOTEgfSwgLyogTGl2ZSEgMjQtYml0ICovCiAJeyBVU0JfSUQoMHgwNDFlLCAweDMwNDIpLCAwLCAxLCAxLCAxLCAgMSwgIDB4MDAwZCB9LCAvKiBVc2IgWC1GaSBTNTEgKi8KKwl7IFVTQl9JRCgweDA0MWUsIDB4MzBkZiksIDAsIDEsIDEsIDEsICAxLCAgMHgwMDBkIH0sIC8qIFVzYiBYLUZpIFM1MSBQcm8gKi8KIAl7IFVTQl9JRCgweDA0MWUsIDB4MzA0OCksIDIsIDIsIDYsIDYsICAyLCAgMHg2ZTkxIH0sIC8qIFRvc2hpYmEgU0IwNTAwICovCiB9OwogCkBAIC0xODgsNiArMTg5LDEyIEBACiAJCQkgICAgICB1c2Jfc25kY3RybHBpcGUobWl4ZXItPmNoaXAtPmRldiwgMCksIDB4MjQsCiAJCQkgICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9PVEhFUiwKIAkJCSAgICAgICF2YWx1ZSwgMCwgTlVMTCwgMCwgMTAwKTsKKwkvKiBVU0IgWC1GaSBTNTEgUHJvICovCisJaWYgKG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMGRmKSkKKwkJZXJyID0gc25kX3VzYl9jdGxfbXNnKG1peGVyLT5jaGlwLT5kZXYsCisJCQkgICAgICB1c2Jfc25kY3RybHBpcGUobWl4ZXItPmNoaXAtPmRldiwgMCksIDB4MjQsCisJCQkgICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9PVEhFUiwKKwkJCSAgICAgICF2YWx1ZSwgMCwgTlVMTCwgMCwgMTAwKTsKIAllbHNlCiAJCWVyciA9IHNuZF91c2JfY3RsX21zZyhtaXhlci0+Y2hpcC0+ZGV2LAogCQkJICAgICAgdXNiX3NuZGN0cmxwaXBlKG1peGVyLT5jaGlwLT5kZXYsIDApLCAweDI0LApAQCAtMjM0LDkgKzI0MSwxMyBAQAogCQkvKiBVU0IgWC1GaSBTNTEgZG9lc24ndCBoYXZlIGEgQ01TUyBMRUQgKi8KIAkJaWYgKChtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0MikpICYmIGkgPT0gMCkKIAkJCWNvbnRpbnVlOworCQkvKiBVU0IgWC1GaSBTNTEgUHJvIGRvZXNuJ3QgaGF2ZSBvbmUgZWl0aGVyICovCisJCWlmICgobWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwZGYpKSAmJiBpID09IDApCisJCQljb250aW51ZTsKIAkJaWYgKGkgPiAxICYmIC8qIExpdmUyNGV4dCBoYXMgMiBMRURzIG9ubHkgKi8KIAkJCShtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0MCkgfHwKIAkJCSBtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0MikgfHwKKwkJCSBtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzBkZikgfHwKIAkJCSBtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0OCkpKQogCQkJYnJlYWs7IAogCQllcnIgPSBzbmRfY3RsX2FkZChtaXhlci0+Y2hpcC0+Y2FyZCwKQEAgLTUxMiw2ICs1MjMsNyBAQAogCWNhc2UgVVNCX0lEKDB4MDQxZSwgMHgzMDIwKToKIAljYXNlIFVTQl9JRCgweDA0MWUsIDB4MzA0MCk6CiAJY2FzZSBVU0JfSUQoMHgwNDFlLCAweDMwNDIpOgorCWNhc2UgVVNCX0lEKDB4MDQxZSwgMHgzMGRmKToKIAljYXNlIFVTQl9JRCgweDA0MWUsIDB4MzA0OCk6CiAJCWVyciA9IHNuZF9hdWRpZ3kybnhfY29udHJvbHNfY3JlYXRlKG1peGVyKTsKIAkJaWYgKGVyciA8IDApCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvcXVpcmtzLXRhYmxlLmggYi9zb3VuZC91c2IvcXVpcmtzLXRhYmxlLmgKaW5kZXggYzY2ZDNmNi4uNzg3OTJhOCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3F1aXJrcy10YWJsZS5oCisrKyBiL3NvdW5kL3VzYi9xdWlya3MtdGFibGUuaApAQCAtMTY1MSw2ICsxNjUxLDMyIEBACiAJCX0KIAl9CiB9LAoreworCVVTQl9ERVZJQ0UoMHgwNTgyLCAweDAxMjcpLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmIChjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyaykgeworCQkvKiAudmVuZG9yX25hbWUgPSAiUm9sYW5kIiwgKi8KKwkJLyogLnByb2R1Y3RfbmFtZSA9ICJHUi01NSIsICovCisJCS5pZm51bSA9IFFVSVJLX0FOWV9JTlRFUkZBQ0UsCisJCS50eXBlID0gUVVJUktfQ09NUE9TSVRFLAorCQkuZGF0YSA9IChjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlya1tdKSB7CisJCQl7CisJCQkJLmlmbnVtID0gMCwKKwkJCQkudHlwZSA9IFFVSVJLX0FVRElPX1NUQU5EQVJEX0lOVEVSRkFDRQorCQkJfSwKKwkJCXsKKwkJCQkuaWZudW0gPSAxLAorCQkJCS50eXBlID0gUVVJUktfQVVESU9fU1RBTkRBUkRfSU5URVJGQUNFCisJCQl9LAorCQkJeworCQkJCS5pZm51bSA9IDIsCisJCQkJLnR5cGUgPSBRVUlSS19NSURJX1NUQU5EQVJEX0lOVEVSRkFDRQorCQkJfSwKKwkJCXsKKwkJCQkuaWZudW0gPSAtMQorCQkJfQorCQl9CisJfQorfSwKIAogLyogR3VpbGxlbW90IGRldmljZXMgKi8KIHsKQEAgLTE5NTMsNyArMTk3OSw3IEBACiAJfQogfSwKIHsKLQlVU0JfREVWSUNFKDB4MDc2MywgMHgyMDgwKSwKKwlVU0JfREVWSUNFX1ZFTkRPUl9TUEVDKDB4MDc2MywgMHgyMDgwKSwKIAkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJiAoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmspIHsKIAkJLyogLnZlbmRvcl9uYW1lID0gIk0tQXVkaW8iLCAqLwogCQkvKiAucHJvZHVjdF9uYW1lID0gIkZhc3QgVHJhY2sgVWx0cmEiLCAqLwpAQCAtMjAyMCw3ICsyMDQ2LDcgQEAKIAl9CiB9LAogewotCVVTQl9ERVZJQ0UoMHgwNzYzLCAweDIwODEpLAorCVVTQl9ERVZJQ0VfVkVORE9SX1NQRUMoMHgwNzYzLCAweDIwODEpLAogCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmIChjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyaykgewogCQkvKiAudmVuZG9yX25hbWUgPSAiTS1BdWRpbyIsICovCiAJCS8qIC5wcm9kdWN0X25hbWUgPSAiRmFzdCBUcmFjayBVbHRyYSA4UiIsICovCkBAIC0yMTc5LDYgKzIyMDUsMTcgQEAKIAl9CiB9LAogCisvKiBLT1JHIGRldmljZXMgKi8KK3sKKwlVU0JfREVWSUNFX1ZFTkRPUl9TUEVDKDB4MDk0NCwgMHgwMjAwKSwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJiAoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmspIHsKKwkJLnZlbmRvcl9uYW1lID0gIktPUkcsIEluYy4iLAorCQkvKiAucHJvZHVjdF9uYW1lID0gIlBBTkRPUkEgUFg1RCIsICovCisJCS5pZm51bSA9IDMsCisJCS50eXBlID0gUVVJUktfTUlESV9TVEFOREFSRF9JTlRFUkZBQ0UsCisJfQorfSwKKwogLyogQUtBSSBkZXZpY2VzICovCiB7CiAJVVNCX0RFVklDRSgweDA5ZTgsIDB4MDA2MiksCkBAIC0yMzMyLDYgKzIzNjksMTIgQEAKIAogLyogTmF0aXZlIEluc3RydW1lbnRzIE1LMiBzZXJpZXMgKi8KIHsKKwkvKiBLb21wbGV0ZSBBdWRpbyA2ICovCisJLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UsCisJLmlkVmVuZG9yID0gMHgxN2NjLAorCS5pZFByb2R1Y3QgPSAweDEwMDAsCit9LAorewogCS8qIFRyYWt0b3IgQXVkaW8gNiAqLwogCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFLAogCS5pZFZlbmRvciA9IDB4MTdjYywKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9xdWlya3MuYyBiL3NvdW5kL3VzYi9xdWlya3MuYwppbmRleCAxYjk0ZWMzLi5iZDEzZDcyIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvcXVpcmtzLmMKKysrIGIvc291bmQvdXNiL3F1aXJrcy5jCkBAIC01NDAsNiArNTQwLDcgQEAKIAkJLyogQWNjZXNzIE11c2ljIFZpcnVzVEkgRGVza3RvcCAqLwogCQlyZXR1cm4gc25kX3VzYl9hY2Nlc3NtdXNpY19ib290X3F1aXJrKGRldik7CiAKKwljYXNlIFVTQl9JRCgweDE3Y2MsIDB4MTAwMCk6IC8qIEtvbXBsZXRlIEF1ZGlvIDYgKi8KIAljYXNlIFVTQl9JRCgweDE3Y2MsIDB4MTAxMCk6IC8qIFRyYWt0b3IgQXVkaW8gNiAqLwogCWNhc2UgVVNCX0lEKDB4MTdjYywgMHgxMDIwKTogLyogVHJha3RvciBBdWRpbyAxMCAqLwogCQlyZXR1cm4gc25kX3VzYl9uYXRpdmVpbnN0cnVtZW50c19ib290X3F1aXJrKGRldik7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tdGVzdC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRlc3QuYwppbmRleCAyZjlhMzM3Li5iNjcxODYyIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tdGVzdC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10ZXN0LmMKQEAgLTQ3NCw2ICs0NzQsNyBAQAogCXVuc2lnbmVkIGludCBucl9ldmVudHNbbnN5c2NhbGxzXSwKIAkJICAgICBleHBlY3RlZF9ucl9ldmVudHNbbnN5c2NhbGxzXSwgaSwgajsKIAlzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWxzW25zeXNjYWxsc10sICpldnNlbDsKKwlpbnQgc2FtcGxlX3NpemUgPSBwZXJmX3NhbXBsZV9zaXplKGF0dHIuc2FtcGxlX3R5cGUpOwogCiAJZm9yIChpID0gMDsgaSA8IG5zeXNjYWxsczsgKytpKSB7CiAJCWNoYXIgbmFtZVs2NF07CkBAIC01NTgsNyArNTU5LDEzIEBACiAJCQlnb3RvIG91dF9tdW5tYXA7CiAJCX0KIAotCQlwZXJmX2V2ZW50X19wYXJzZV9zYW1wbGUoZXZlbnQsIGF0dHIuc2FtcGxlX3R5cGUsIGZhbHNlLCAmc2FtcGxlKTsKKwkJZXJyID0gcGVyZl9ldmVudF9fcGFyc2Vfc2FtcGxlKGV2ZW50LCBhdHRyLnNhbXBsZV90eXBlLCBzYW1wbGVfc2l6ZSwKKwkJCQkJICAgICAgIGZhbHNlLCAmc2FtcGxlKTsKKwkJaWYgKGVycikgeworCQkJcHJfZXJyKCJDYW4ndCBwYXJzZSBzYW1wbGUsIGVyciA9ICVkXG4iLCBlcnIpOworCQkJZ290byBvdXRfbXVubWFwOworCQl9CisKIAkJZXZzZWwgPSBwZXJmX2V2bGlzdF9faWQyZXZzZWwoZXZsaXN0LCBzYW1wbGUuaWQpOwogCQlpZiAoZXZzZWwgPT0gTlVMTCkgewogCQkJcHJfZGVidWcoImV2ZW50IHdpdGggaWQgJSIgUFJJdTY0CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMgYi90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKaW5kZXggZWJmYzdjZi4uMmQ3OTM0ZTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKQEAgLTgwNSw5ICs4MDUsMTQgQEAKIHsKIAlzdHJ1Y3QgcGVyZl9zYW1wbGUgc2FtcGxlOwogCXVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50OworCWludCByZXQ7CiAKIAl3aGlsZSAoKGV2ZW50ID0gcGVyZl9ldmxpc3RfX21tYXBfcmVhZCh0b3AuZXZsaXN0LCBpZHgpKSAhPSBOVUxMKSB7Ci0JCXBlcmZfc2Vzc2lvbl9fcGFyc2Vfc2FtcGxlKHNlbGYsIGV2ZW50LCAmc2FtcGxlKTsKKwkJcmV0ID0gcGVyZl9zZXNzaW9uX19wYXJzZV9zYW1wbGUoc2VsZiwgZXZlbnQsICZzYW1wbGUpOworCQlpZiAocmV0KSB7CisJCQlwcl9lcnIoIkNhbid0IHBhcnNlIHNhbXBsZSwgZXJyID0gJWRcbiIsIHJldCk7CisJCQljb250aW51ZTsKKwkJfQogCiAJCWlmIChldmVudC0+aGVhZGVyLnR5cGUgPT0gUEVSRl9SRUNPUkRfU0FNUExFKQogCQkJcGVyZl9ldmVudF9fcHJvY2Vzc19zYW1wbGUoZXZlbnQsICZzYW1wbGUsIHNlbGYpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuYwppbmRleCAxMDIzZjY3Li4yNTJiNzJhIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZlbnQuYworKysgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuYwpAQCAtOSwyMSArOSwyMSBAQAogI2luY2x1ZGUgInRocmVhZF9tYXAuaCIKIAogc3RhdGljIGNvbnN0IGNoYXIgKnBlcmZfZXZlbnRfX25hbWVzW10gPSB7Ci0JWzBdCQkJID0gIlRPVEFMIiwKLQlbUEVSRl9SRUNPUkRfTU1BUF0JID0gIk1NQVAiLAotCVtQRVJGX1JFQ09SRF9MT1NUXQkgPSAiTE9TVCIsCi0JW1BFUkZfUkVDT1JEX0NPTU1dCSA9ICJDT01NIiwKLQlbUEVSRl9SRUNPUkRfRVhJVF0JID0gIkVYSVQiLAotCVtQRVJGX1JFQ09SRF9USFJPVFRMRV0JID0gIlRIUk9UVExFIiwKLQlbUEVSRl9SRUNPUkRfVU5USFJPVFRMRV0gPSAiVU5USFJPVFRMRSIsCi0JW1BFUkZfUkVDT1JEX0ZPUktdCSA9ICJGT1JLIiwKLQlbUEVSRl9SRUNPUkRfUkVBRF0JID0gIlJFQUQiLAotCVtQRVJGX1JFQ09SRF9TQU1QTEVdCSA9ICJTQU1QTEUiLAotCVtQRVJGX1JFQ09SRF9IRUFERVJfQVRUUl0JID0gIkFUVFIiLAotCVtQRVJGX1JFQ09SRF9IRUFERVJfRVZFTlRfVFlQRV0JID0gIkVWRU5UX1RZUEUiLAotCVtQRVJGX1JFQ09SRF9IRUFERVJfVFJBQ0lOR19EQVRBXQkgPSAiVFJBQ0lOR19EQVRBIiwKLQlbUEVSRl9SRUNPUkRfSEVBREVSX0JVSUxEX0lEXQkgPSAiQlVJTERfSUQiLAotCVtQRVJGX1JFQ09SRF9GSU5JU0hFRF9ST1VORF0JID0gIkZJTklTSEVEX1JPVU5EIiwKKwlbMF0JCQkJCT0gIlRPVEFMIiwKKwlbUEVSRl9SRUNPUkRfTU1BUF0JCQk9ICJNTUFQIiwKKwlbUEVSRl9SRUNPUkRfTE9TVF0JCQk9ICJMT1NUIiwKKwlbUEVSRl9SRUNPUkRfQ09NTV0JCQk9ICJDT01NIiwKKwlbUEVSRl9SRUNPUkRfRVhJVF0JCQk9ICJFWElUIiwKKwlbUEVSRl9SRUNPUkRfVEhST1RUTEVdCQkJPSAiVEhST1RUTEUiLAorCVtQRVJGX1JFQ09SRF9VTlRIUk9UVExFXQkJPSAiVU5USFJPVFRMRSIsCisJW1BFUkZfUkVDT1JEX0ZPUktdCQkJPSAiRk9SSyIsCisJW1BFUkZfUkVDT1JEX1JFQURdCQkJPSAiUkVBRCIsCisJW1BFUkZfUkVDT1JEX1NBTVBMRV0JCQk9ICJTQU1QTEUiLAorCVtQRVJGX1JFQ09SRF9IRUFERVJfQVRUUl0JCT0gIkFUVFIiLAorCVtQRVJGX1JFQ09SRF9IRUFERVJfRVZFTlRfVFlQRV0JCT0gIkVWRU5UX1RZUEUiLAorCVtQRVJGX1JFQ09SRF9IRUFERVJfVFJBQ0lOR19EQVRBXQk9ICJUUkFDSU5HX0RBVEEiLAorCVtQRVJGX1JFQ09SRF9IRUFERVJfQlVJTERfSURdCQk9ICJCVUlMRF9JRCIsCisJW1BFUkZfUkVDT1JEX0ZJTklTSEVEX1JPVU5EXQkJPSAiRklOSVNIRURfUk9VTkQiLAogfTsKIAogY29uc3QgY2hhciAqcGVyZl9ldmVudF9fbmFtZSh1bnNpZ25lZCBpbnQgaWQpCkBAIC0zNSw2ICszNSwyMiBAQAogCXJldHVybiBwZXJmX2V2ZW50X19uYW1lc1tpZF07CiB9CiAKK2ludCBwZXJmX3NhbXBsZV9zaXplKHU2NCBzYW1wbGVfdHlwZSkKK3sKKwl1NjQgbWFzayA9IHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfTUFTSzsKKwlpbnQgc2l6ZSA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgeworCQlpZiAobWFzayAmICgxVUwgPDwgaSkpCisJCQlzaXplKys7CisJfQorCisJc2l6ZSAqPSBzaXplb2YodTY0KTsKKworCXJldHVybiBzaXplOworfQorCiBzdGF0aWMgc3RydWN0IHBlcmZfc2FtcGxlIHN5bnRoX3NhbXBsZSA9IHsKIAkucGlkCSAgID0gLTEsCiAJLnRpZAkgICA9IC0xLApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmggYi90b29scy9wZXJmL3V0aWwvZXZlbnQuaAppbmRleCA5YzM1MTcwLi5jMDgzMzI4IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZlbnQuaAorKysgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuaApAQCAtNTYsNiArNTYsMTMgQEAKIAl1NjQgaWQ7CiB9OwogCisKKyNkZWZpbmUgUEVSRl9TQU1QTEVfTUFTSwkJCQlcCisJKFBFUkZfU0FNUExFX0lQIHwgUEVSRl9TQU1QTEVfVElEIHwJCVwKKwkgUEVSRl9TQU1QTEVfVElNRSB8IFBFUkZfU0FNUExFX0FERFIgfAkJXAorCVBFUkZfU0FNUExFX0lEIHwgUEVSRl9TQU1QTEVfU1RSRUFNX0lEIHwJXAorCSBQRVJGX1NBTVBMRV9DUFUgfCBQRVJGX1NBTVBMRV9QRVJJT0QpCisKIHN0cnVjdCBzYW1wbGVfZXZlbnQgewogCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciAgICAgICAgaGVhZGVyOwogCXU2NCBhcnJheVtdOwpAQCAtNzUsNiArODIsOCBAQAogCXN0cnVjdCBpcF9jYWxsY2hhaW4gKmNhbGxjaGFpbjsKIH07CiAKK2ludCBwZXJmX3NhbXBsZV9zaXplKHU2NCBzYW1wbGVfdHlwZSk7CisKICNkZWZpbmUgQlVJTERfSURfU0laRSAyMAogCiBzdHJ1Y3QgYnVpbGRfaWRfZXZlbnQgewpAQCAtMTc4LDYgKzE4Nyw3IEBACiBjb25zdCBjaGFyICpwZXJmX2V2ZW50X19uYW1lKHVuc2lnbmVkIGludCBpZCk7CiAKIGludCBwZXJmX2V2ZW50X19wYXJzZV9zYW1wbGUoY29uc3QgdW5pb24gcGVyZl9ldmVudCAqZXZlbnQsIHU2NCB0eXBlLAotCQkJICAgICBib29sIHNhbXBsZV9pZF9hbGwsIHN0cnVjdCBwZXJmX3NhbXBsZSAqc2FtcGxlKTsKKwkJCSAgICAgaW50IHNhbXBsZV9zaXplLCBib29sIHNhbXBsZV9pZF9hbGwsCisJCQkgICAgIHN0cnVjdCBwZXJmX3NhbXBsZSAqc2FtcGxlKTsKIAogI2VuZGlmIC8qIF9fUEVSRl9SRUNPUkRfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5jIGIvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5jCmluZGV4IDIzZWIyMmIuLjUwYWEzNDggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuYworKysgYi90b29scy9wZXJmL3V0aWwvZXZsaXN0LmMKQEAgLTQ1OSwzICs0NTksMzQgQEAKIAogCXJldHVybiAwOwogfQorCit1NjQgcGVyZl9ldmxpc3RfX3NhbXBsZV90eXBlKHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KQoreworCXN0cnVjdCBwZXJmX2V2c2VsICpwb3M7CisJdTY0IHR5cGUgPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZldmxpc3QtPmVudHJpZXMsIG5vZGUpIHsKKwkJaWYgKCF0eXBlKQorCQkJdHlwZSA9IHBvcy0+YXR0ci5zYW1wbGVfdHlwZTsKKwkJZWxzZSBpZiAodHlwZSAhPSBwb3MtPmF0dHIuc2FtcGxlX3R5cGUpCisJCQlkaWUoIm5vbiBtYXRjaGluZyBzYW1wbGVfdHlwZSIpOworCX0KKworCXJldHVybiB0eXBlOworfQorCitib29sIHBlcmZfZXZsaXN0X19zYW1wbGVfaWRfYWxsKGNvbnN0IHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KQoreworCWJvb2wgdmFsdWUgPSBmYWxzZSwgZmlyc3QgPSB0cnVlOworCXN0cnVjdCBwZXJmX2V2c2VsICpwb3M7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJmV2bGlzdC0+ZW50cmllcywgbm9kZSkgeworCQlpZiAoZmlyc3QpIHsKKwkJCXZhbHVlID0gcG9zLT5hdHRyLnNhbXBsZV9pZF9hbGw7CisJCQlmaXJzdCA9IGZhbHNlOworCQl9IGVsc2UgaWYgKHZhbHVlICE9IHBvcy0+YXR0ci5zYW1wbGVfaWRfYWxsKQorCQkJZGllKCJub24gbWF0Y2hpbmcgc2FtcGxlX2lkX2FsbCIpOworCX0KKworCXJldHVybiB2YWx1ZTsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuaCBiL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuaAppbmRleCA3MTA5ZDdhLi4wYTFlZjFmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZsaXN0LmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5oCkBAIC02Niw0ICs2Niw3IEBACiB2b2lkIHBlcmZfZXZsaXN0X19kZWxldGVfbWFwcyhzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCk7CiBpbnQgcGVyZl9ldmxpc3RfX3NldF9maWx0ZXJzKHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KTsKIAordTY0IHBlcmZfZXZsaXN0X19zYW1wbGVfdHlwZShzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCk7Citib29sIHBlcmZfZXZsaXN0X19zYW1wbGVfaWRfYWxsKGNvbnN0IHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KTsKKwogI2VuZGlmIC8qIF9fUEVSRl9FVkxJU1RfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmMgYi90b29scy9wZXJmL3V0aWwvZXZzZWwuYwppbmRleCBkNmZkNTliLi5lZTBmZTBkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZzZWwuYworKysgYi90b29scy9wZXJmL3V0aWwvZXZzZWwuYwpAQCAtMzAzLDggKzMwMywyMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgYm9vbCBzYW1wbGVfb3ZlcmxhcChjb25zdCB1bmlvbiBwZXJmX2V2ZW50ICpldmVudCwKKwkJCSAgIGNvbnN0IHZvaWQgKm9mZnNldCwgdTY0IHNpemUpCit7CisJY29uc3Qgdm9pZCAqYmFzZSA9IGV2ZW50OworCisJaWYgKG9mZnNldCArIHNpemUgPiBiYXNlICsgZXZlbnQtPmhlYWRlci5zaXplKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKwogaW50IHBlcmZfZXZlbnRfX3BhcnNlX3NhbXBsZShjb25zdCB1bmlvbiBwZXJmX2V2ZW50ICpldmVudCwgdTY0IHR5cGUsCi0JCQkgICAgIGJvb2wgc2FtcGxlX2lkX2FsbCwgc3RydWN0IHBlcmZfc2FtcGxlICpkYXRhKQorCQkJICAgICBpbnQgc2FtcGxlX3NpemUsIGJvb2wgc2FtcGxlX2lkX2FsbCwKKwkJCSAgICAgc3RydWN0IHBlcmZfc2FtcGxlICpkYXRhKQogewogCWNvbnN0IHU2NCAqYXJyYXk7CiAKQEAgLTMxOSw2ICszMzEsOSBAQAogCiAJYXJyYXkgPSBldmVudC0+c2FtcGxlLmFycmF5OwogCisJaWYgKHNhbXBsZV9zaXplICsgc2l6ZW9mKGV2ZW50LT5oZWFkZXIpID4gZXZlbnQtPmhlYWRlci5zaXplKQorCQlyZXR1cm4gLUVGQVVMVDsKKwogCWlmICh0eXBlICYgUEVSRl9TQU1QTEVfSVApIHsKIAkJZGF0YS0+aXAgPSBldmVudC0+aXAuaXA7CiAJCWFycmF5Kys7CkBAIC0zNjksMTQgKzM4NCwyOSBAQAogCX0KIAogCWlmICh0eXBlICYgUEVSRl9TQU1QTEVfQ0FMTENIQUlOKSB7CisJCWlmIChzYW1wbGVfb3ZlcmxhcChldmVudCwgYXJyYXksIHNpemVvZihkYXRhLT5jYWxsY2hhaW4tPm5yKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwogCQlkYXRhLT5jYWxsY2hhaW4gPSAoc3RydWN0IGlwX2NhbGxjaGFpbiAqKWFycmF5OworCisJCWlmIChzYW1wbGVfb3ZlcmxhcChldmVudCwgYXJyYXksIGRhdGEtPmNhbGxjaGFpbi0+bnIpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKIAkJYXJyYXkgKz0gMSArIGRhdGEtPmNhbGxjaGFpbi0+bnI7CiAJfQogCiAJaWYgKHR5cGUgJiBQRVJGX1NBTVBMRV9SQVcpIHsKIAkJdTMyICpwID0gKHUzMiAqKWFycmF5OworCisJCWlmIChzYW1wbGVfb3ZlcmxhcChldmVudCwgYXJyYXksIHNpemVvZih1MzIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCiAJCWRhdGEtPnJhd19zaXplID0gKnA7CiAJCXArKzsKKworCQlpZiAoc2FtcGxlX292ZXJsYXAoZXZlbnQsIHAsIGRhdGEtPnJhd19zaXplKSkKKwkJCXJldHVybiAtRUZBVUxUOworCiAJCWRhdGEtPnJhd19kYXRhID0gcDsKIAl9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYyBiL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYwppbmRleCA5Mzg2MmE4Li4wNzE3YmViIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaGVhZGVyLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5jCkBAIC05MzQsMzcgKzkzNCw2IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKLXU2NCBwZXJmX2V2bGlzdF9fc2FtcGxlX3R5cGUoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpCi17Ci0Jc3RydWN0IHBlcmZfZXZzZWwgKnBvczsKLQl1NjQgdHlwZSA9IDA7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJmV2bGlzdC0+ZW50cmllcywgbm9kZSkgewotCQlpZiAoIXR5cGUpCi0JCQl0eXBlID0gcG9zLT5hdHRyLnNhbXBsZV90eXBlOwotCQllbHNlIGlmICh0eXBlICE9IHBvcy0+YXR0ci5zYW1wbGVfdHlwZSkKLQkJCWRpZSgibm9uIG1hdGNoaW5nIHNhbXBsZV90eXBlIik7Ci0JfQotCi0JcmV0dXJuIHR5cGU7Ci19Ci0KLWJvb2wgcGVyZl9ldmxpc3RfX3NhbXBsZV9pZF9hbGwoY29uc3Qgc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpCi17Ci0JYm9vbCB2YWx1ZSA9IGZhbHNlLCBmaXJzdCA9IHRydWU7Ci0Jc3RydWN0IHBlcmZfZXZzZWwgKnBvczsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmZXZsaXN0LT5lbnRyaWVzLCBub2RlKSB7Ci0JCWlmIChmaXJzdCkgewotCQkJdmFsdWUgPSBwb3MtPmF0dHIuc2FtcGxlX2lkX2FsbDsKLQkJCWZpcnN0ID0gZmFsc2U7Ci0JCX0gZWxzZSBpZiAodmFsdWUgIT0gcG9zLT5hdHRyLnNhbXBsZV9pZF9hbGwpCi0JCQlkaWUoIm5vbiBtYXRjaGluZyBzYW1wbGVfaWRfYWxsIik7Ci0JfQotCi0JcmV0dXJuIHZhbHVlOwotfQotCiBpbnQgcGVyZl9ldmVudF9fc3ludGhlc2l6ZV9hdHRyKHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIsIHUxNiBpZHMsIHU2NCAqaWQsCiAJCQkJcGVyZl9ldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCiAJCQkJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuaCBiL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuaAppbmRleCA0NTY2NjFkLi4xODg2MjU2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaGVhZGVyLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5oCkBAIC02NCw4ICs2NCw2IEBACiBpbnQgcGVyZl9oZWFkZXJfX3B1c2hfZXZlbnQodTY0IGlkLCBjb25zdCBjaGFyICpuYW1lKTsKIGNoYXIgKnBlcmZfaGVhZGVyX19maW5kX2V2ZW50KHU2NCBpZCk7CiAKLXU2NCBwZXJmX2V2bGlzdF9fc2FtcGxlX3R5cGUoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpOwotYm9vbCBwZXJmX2V2bGlzdF9fc2FtcGxlX2lkX2FsbChjb25zdCBzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCk7CiB2b2lkIHBlcmZfaGVhZGVyX19zZXRfZmVhdChzdHJ1Y3QgcGVyZl9oZWFkZXIgKmhlYWRlciwgaW50IGZlYXQpOwogdm9pZCBwZXJmX2hlYWRlcl9fY2xlYXJfZmVhdChzdHJ1Y3QgcGVyZl9oZWFkZXIgKmhlYWRlciwgaW50IGZlYXQpOwogYm9vbCBwZXJmX2hlYWRlcl9faGFzX2ZlYXQoY29uc3Qgc3RydWN0IHBlcmZfaGVhZGVyICpoZWFkZXIsIGludCBmZWF0KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2xpc3QuaCBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2xpc3QuaAppbmRleCAzNTZjN2U0Li4xZDkyOGEwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9saXN0LmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvbGlzdC5oCkBAIC0xLDQgKzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CisKICNpbmNsdWRlICIuLi8uLi8uLi8uLi9pbmNsdWRlL2xpbnV4L2xpc3QuaCIKIAogI2lmbmRlZiBQRVJGX0xJU1RfSApAQCAtMjMsNSArMjUsNSBAQAogICogQGhlYWQ6IHRoZSBoZWFkIGZvciB5b3VyIGxpc3QuCiAgKi8KICNkZWZpbmUgbGlzdF9mb3JfZWFjaF9mcm9tKHBvcywgaGVhZCkgXAotCWZvciAoOyBwcmVmZXRjaChwb3MtPm5leHQpLCBwb3MgIT0gKGhlYWQpOyBwb3MgPSBwb3MtPm5leHQpCisJZm9yICg7IHBvcyAhPSAoaGVhZCk7IHBvcyA9IHBvcy0+bmV4dCkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3B5dGhvbi5jIGIvdG9vbHMvcGVyZi91dGlsL3B5dGhvbi5jCmluZGV4IGI1YzdkODEuLjY5NDM2YjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9weXRob24uYworKysgYi90b29scy9wZXJmL3V0aWwvcHl0aG9uLmMKQEAgLTY3NSw2ICs2NzUsNyBAQAogCXVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50OwogCWludCBzYW1wbGVfaWRfYWxsID0gMSwgY3B1OwogCXN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsic2FtcGxlX2lkX2FsbCIsIE5VTEwsIE5VTEx9OworCWludCBlcnI7CiAKIAlpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJpfGkiLCBrd2xpc3QsCiAJCQkJCSAmY3B1LCAmc2FtcGxlX2lkX2FsbCkpCkBAIC02OTAsMTEgKzY5MSwxNyBAQAogCQkJcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAKIAkJZmlyc3QgPSBsaXN0X2VudHJ5KGV2bGlzdC0+ZW50cmllcy5uZXh0LCBzdHJ1Y3QgcGVyZl9ldnNlbCwgbm9kZSk7Ci0JCXBlcmZfZXZlbnRfX3BhcnNlX3NhbXBsZShldmVudCwgZmlyc3QtPmF0dHIuc2FtcGxlX3R5cGUsIHNhbXBsZV9pZF9hbGwsCi0JCQkJCSAmcGV2ZW50LT5zYW1wbGUpOworCQllcnIgPSBwZXJmX2V2ZW50X19wYXJzZV9zYW1wbGUoZXZlbnQsIGZpcnN0LT5hdHRyLnNhbXBsZV90eXBlLAorCQkJCQkgICAgICAgcGVyZl9zYW1wbGVfc2l6ZShmaXJzdC0+YXR0ci5zYW1wbGVfdHlwZSksCisJCQkJCSAgICAgICBzYW1wbGVfaWRfYWxsLCAmcGV2ZW50LT5zYW1wbGUpOworCQlpZiAoZXJyKSB7CisJCQlwcl9lcnIoIkNhbid0IHBhcnNlIHNhbXBsZSwgZXJyID0gJWRcbiIsIGVycik7CisJCQlnb3RvIGVuZDsKKwkJfQorCiAJCXJldHVybiBweWV2ZW50OwogCX0KLQorZW5kOgogCVB5X0lOQ1JFRihQeV9Ob25lKTsKIAlyZXR1cm4gUHlfTm9uZTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMgYi90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jCmluZGV4IGZmZjY2NzQuLjY0NTAwZmMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYwpAQCAtOTcsNiArOTcsNyBAQAogdm9pZCBwZXJmX3Nlc3Npb25fX3VwZGF0ZV9zYW1wbGVfdHlwZShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmKQogewogCXNlbGYtPnNhbXBsZV90eXBlID0gcGVyZl9ldmxpc3RfX3NhbXBsZV90eXBlKHNlbGYtPmV2bGlzdCk7CisJc2VsZi0+c2FtcGxlX3NpemUgPSBwZXJmX3NhbXBsZV9zaXplKHNlbGYtPnNhbXBsZV90eXBlKTsKIAlzZWxmLT5zYW1wbGVfaWRfYWxsID0gcGVyZl9ldmxpc3RfX3NhbXBsZV9pZF9hbGwoc2VsZi0+ZXZsaXN0KTsKIAlwZXJmX3Nlc3Npb25fX2lkX2hlYWRlcl9zaXplKHNlbGYpOwogfQpAQCAtNDc5LDYgKzQ4MCw3IEBACiAJc3RydWN0IHBlcmZfc2FtcGxlIHNhbXBsZTsKIAl1NjQgbGltaXQgPSBvcy0+bmV4dF9mbHVzaDsKIAl1NjQgbGFzdF90cyA9IG9zLT5sYXN0X3NhbXBsZSA/IG9zLT5sYXN0X3NhbXBsZS0+dGltZXN0YW1wIDogMFVMTDsKKwlpbnQgcmV0OwogCiAJaWYgKCFvcHMtPm9yZGVyZWRfc2FtcGxlcyB8fCAhbGltaXQpCiAJCXJldHVybjsKQEAgLTQ4Nyw5ICs0ODksMTIgQEAKIAkJaWYgKGl0ZXItPnRpbWVzdGFtcCA+IGxpbWl0KQogCQkJYnJlYWs7CiAKLQkJcGVyZl9zZXNzaW9uX19wYXJzZV9zYW1wbGUocywgaXRlci0+ZXZlbnQsICZzYW1wbGUpOwotCQlwZXJmX3Nlc3Npb25fZGVsaXZlcl9ldmVudChzLCBpdGVyLT5ldmVudCwgJnNhbXBsZSwgb3BzLAotCQkJCQkgICBpdGVyLT5maWxlX29mZnNldCk7CisJCXJldCA9IHBlcmZfc2Vzc2lvbl9fcGFyc2Vfc2FtcGxlKHMsIGl0ZXItPmV2ZW50LCAmc2FtcGxlKTsKKwkJaWYgKHJldCkKKwkJCXByX2VycigiQ2FuJ3QgcGFyc2Ugc2FtcGxlLCBlcnIgPSAlZFxuIiwgcmV0KTsKKwkJZWxzZQorCQkJcGVyZl9zZXNzaW9uX2RlbGl2ZXJfZXZlbnQocywgaXRlci0+ZXZlbnQsICZzYW1wbGUsIG9wcywKKwkJCQkJCSAgIGl0ZXItPmZpbGVfb2Zmc2V0KTsKIAogCQlvcy0+bGFzdF9mbHVzaCA9IGl0ZXItPnRpbWVzdGFtcDsKIAkJbGlzdF9kZWwoJml0ZXItPmxpc3QpOwpAQCAtODA1LDcgKzgxMCw5IEBACiAJLyoKIAkgKiBGb3IgYWxsIGtlcm5lbCBldmVudHMgd2UgZ2V0IHRoZSBzYW1wbGUgZGF0YQogCSAqLwotCXBlcmZfc2Vzc2lvbl9fcGFyc2Vfc2FtcGxlKHNlc3Npb24sIGV2ZW50LCAmc2FtcGxlKTsKKwlyZXQgPSBwZXJmX3Nlc3Npb25fX3BhcnNlX3NhbXBsZShzZXNzaW9uLCBldmVudCwgJnNhbXBsZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAogCS8qIFByZXByb2Nlc3Mgc2FtcGxlIHJlY29yZHMgLSBwcmVjaGVjayBjYWxsY2hhaW5zICovCiAJaWYgKHBlcmZfc2Vzc2lvbl9fcHJlcHJvY2Vzc19zYW1wbGUoc2Vzc2lvbiwgZXZlbnQsICZzYW1wbGUpKQpAQCAtOTUzLDYgKzk2MCwzMCBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyB1bmlvbiBwZXJmX2V2ZW50ICoKK2ZldGNoX21tYXBlZF9ldmVudChzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAorCQkgICB1NjQgaGVhZCwgc2l6ZV90IG1tYXBfc2l6ZSwgY2hhciAqYnVmKQoreworCXVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50OworCisJLyoKKwkgKiBFbnN1cmUgd2UgaGF2ZSBlbm91Z2ggc3BhY2UgcmVtYWluaW5nIHRvIHJlYWQKKwkgKiB0aGUgc2l6ZSBvZiB0aGUgZXZlbnQgaW4gdGhlIGhlYWRlcnMuCisJICovCisJaWYgKGhlYWQgKyBzaXplb2YoZXZlbnQtPmhlYWRlcikgPiBtbWFwX3NpemUpCisJCXJldHVybiBOVUxMOworCisJZXZlbnQgPSAodW5pb24gcGVyZl9ldmVudCAqKShidWYgKyBoZWFkKTsKKworCWlmIChzZXNzaW9uLT5oZWFkZXIubmVlZHNfc3dhcCkKKwkJcGVyZl9ldmVudF9oZWFkZXJfX2Jzd2FwKCZldmVudC0+aGVhZGVyKTsKKworCWlmIChoZWFkICsgZXZlbnQtPmhlYWRlci5zaXplID4gbW1hcF9zaXplKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBldmVudDsKK30KKwogaW50IF9fcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAogCQkJCSAgIHU2NCBkYXRhX29mZnNldCwgdTY0IGRhdGFfc2l6ZSwKIAkJCQkgICB1NjQgZmlsZV9zaXplLCBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgKm9wcykKQEAgLTEwMDcsMTUgKzEwMzgsOCBAQAogCWZpbGVfcG9zID0gZmlsZV9vZmZzZXQgKyBoZWFkOwogCiBtb3JlOgotCWV2ZW50ID0gKHVuaW9uIHBlcmZfZXZlbnQgKikoYnVmICsgaGVhZCk7Ci0KLQlpZiAoc2Vzc2lvbi0+aGVhZGVyLm5lZWRzX3N3YXApCi0JCXBlcmZfZXZlbnRfaGVhZGVyX19ic3dhcCgmZXZlbnQtPmhlYWRlcik7Ci0Jc2l6ZSA9IGV2ZW50LT5oZWFkZXIuc2l6ZTsKLQlpZiAoc2l6ZSA9PSAwKQotCQlzaXplID0gODsKLQotCWlmIChoZWFkICsgZXZlbnQtPmhlYWRlci5zaXplID4gbW1hcF9zaXplKSB7CisJZXZlbnQgPSBmZXRjaF9tbWFwZWRfZXZlbnQoc2Vzc2lvbiwgaGVhZCwgbW1hcF9zaXplLCBidWYpOworCWlmICghZXZlbnQpIHsKIAkJaWYgKG1tYXBzW21hcF9pZHhdKSB7CiAJCQltdW5tYXAobW1hcHNbbWFwX2lkeF0sIG1tYXBfc2l6ZSk7CiAJCQltbWFwc1ttYXBfaWR4XSA9IE5VTEw7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5oIGIvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uaAppbmRleCA4ZGFhYTJkLi42NmQ0ZTE0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmgKQEAgLTQzLDYgKzQzLDcgQEAKIAkgKi8KIAlzdHJ1Y3QgaGlzdHMJCWhpc3RzOwogCXU2NAkJCXNhbXBsZV90eXBlOworCWludAkJCXNhbXBsZV9zaXplOwogCWludAkJCWZkOwogCWJvb2wJCQlmZF9waXBlOwogCWJvb2wJCQlyZXBpcGU7CkBAIC0xNTksNiArMTYwLDcgQEAKIAkJCQkJICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSkKIHsKIAlyZXR1cm4gcGVyZl9ldmVudF9fcGFyc2Vfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLT5zYW1wbGVfdHlwZSwKKwkJCQkJc2Vzc2lvbi0+c2FtcGxlX3NpemUsCiAJCQkJCXNlc3Npb24tPnNhbXBsZV9pZF9hbGwsIHNhbXBsZSk7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC91aS9icm93c2Vycy9hbm5vdGF0ZS5jIGIvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL2Fubm90YXRlLmMKaW5kZXggMTU2MzNkNi4uMDIyOTcyMyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL2Fubm90YXRlLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL2Fubm90YXRlLmMKQEAgLTUsNyArNSw2IEBACiAjaW5jbHVkZSAiLi4vLi4vaGlzdC5oIgogI2luY2x1ZGUgIi4uLy4uL3NvcnQuaCIKICNpbmNsdWRlICIuLi8uLi9zeW1ib2wuaCIKLSNpbmNsdWRlICIuLi8uLi9hbm5vdGF0ZS5oIgogI2luY2x1ZGUgPHB0aHJlYWQuaD4KIAogc3RhdGljIHZvaWQgdWlfX2Vycm9yX3dpbmRvdyhjb25zdCBjaGFyICpmbXQsIC4uLikKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL3g4Ni90dXJib3N0YXQvdHVyYm9zdGF0LmMgYi90b29scy9wb3dlci94ODYvdHVyYm9zdGF0L3R1cmJvc3RhdC5jCmluZGV4IDM2MmEwY2IuLjZkOGVmNGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Bvd2VyL3g4Ni90dXJib3N0YXQvdHVyYm9zdGF0LmMKKysrIGIvdG9vbHMvcG93ZXIveDg2L3R1cmJvc3RhdC90dXJib3N0YXQuYwpAQCAtOTkwLDcgKzk5MCw3IEBACiAJaWYgKCFyZXR2YWwpCiAJCXByaW50X2NvdW50ZXJzKGNudF9kZWx0YSk7CiAKLQlmcHJpbnRmKHN0ZGVyciwgIiUuNmYgc2VjXG4iLCB0dl9kZWx0YS50dl9zZWMgKyB0dl9kZWx0YS50dl91c2VjLzEwMDAwMDAuMCk7OworCWZwcmludGYoc3RkZXJyLCAiJS42ZiBzZWNcbiIsIHR2X2RlbHRhLnR2X3NlYyArIHR2X2RlbHRhLnR2X3VzZWMvMTAwMDAwMC4wKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9rdGVzdC9rdGVzdC5wbCBiL3Rvb2xzL3Rlc3Rpbmcva3Rlc3Qva3Rlc3QucGwKaW5kZXggOGNlNzkyZS4uMWZkMjliMiAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9rdGVzdC9rdGVzdC5wbAorKysgYi90b29scy90ZXN0aW5nL2t0ZXN0L2t0ZXN0LnBsCkBAIC0zNiw2ICszNiw3IEBACiAkZGVmYXVsdHsiUE9XRVJPRkZfT05fU1VDQ0VTUyJ9CT0gMDsKICRkZWZhdWx0eyJCVUlMRF9PUFRJT05TIn0JPSAiIjsKICRkZWZhdWx0eyJCSVNFQ1RfU0xFRVBfVElNRSJ9CT0gNjA7ICAgIyBzbGVlcCB0aW1lIGJldHdlZW4gYmlzZWN0cworJGRlZmF1bHR7IlBBVENIQ0hFQ0tfU0xFRVBfVElNRSJ9ID0gNjA7ICMgc2xlZXAgdGltZSBiZXR3ZWVuIHBhdGNoIGNoZWNrcwogJGRlZmF1bHR7IkNMRUFSX0xPRyJ9CQk9IDA7CiAkZGVmYXVsdHsiQklTRUNUX01BTlVBTCJ9CT0gMDsKICRkZWZhdWx0eyJCSVNFQ1RfU0tJUCJ9CQk9IDE7CkBAIC05Niw2ICs5Nyw3IEBACiBteSAkbW9uaXRvcl9jbnQgPSAwOwogbXkgJHNsZWVwX3RpbWU7CiBteSAkYmlzZWN0X3NsZWVwX3RpbWU7CitteSAkcGF0Y2hjaGVja19zbGVlcF90aW1lOwogbXkgJHN0b3JlX2ZhaWx1cmVzOwogbXkgJHRpbWVvdXQ7CiBteSAkYm9vdGVkX3RpbWVvdXQ7CkBAIC0xMTIsNiArMTE0LDcgQEAKIAogbXkgJWVudGVyZWRfY29uZmlnczsKIG15ICVjb25maWdfaGVscDsKK215ICV2YXJpYWJsZTsKIAogJGNvbmZpZ19oZWxweyJNQUNISU5FIn0gPSA8PCAiRU9GIgogIFRoZSBtYWNoaW5lIGhvc3RuYW1lIHRoYXQgeW91IHdpbGwgdGVzdC4KQEAgLTI2MCw2ICsyNjMsMzkgQEAKICAgICB9CiB9CiAKK3N1YiBwcm9jZXNzX3ZhcmlhYmxlcyB7CisgICAgbXkgKCR2YWx1ZSkgPSBAXzsKKyAgICBteSAkcmV0dmFsID0gIiI7CisKKyAgICAjIFdlIHdhbnQgdG8gY2hlY2sgZm9yICdcJywgYW5kIGl0IGlzIGp1c3QgZWFzaWVyCisgICAgIyB0byBjaGVjayB0aGUgcHJldmlvdXMgY2hhcmFjZXQgb2YgJyQnIGFuZCBub3QgbmVlZAorICAgICMgdG8gd29ycnkgaWYgJyQnIGlzIHRoZSBmaXJzdCBjaGFyYWN0ZXIuIEJ5IGFkZGluZworICAgICMgYSBzcGFjZSB0byAkdmFsdWUsIHdlIGNhbiBqdXN0IGNoZWNrIFteXFxdXCQgYW5kCisgICAgIyBpdCB3aWxsIHN0aWxsIHdvcmsuCisgICAgJHZhbHVlID0gIiAkdmFsdWUiOworCisgICAgd2hpbGUgKCR2YWx1ZSA9fiAvKC4qP1teXFxdKVwkXHsoLio/KVx9KC4qKS8pIHsKKwlteSAkYmVnaW4gPSAkMTsKKwlteSAkdmFyID0gJDI7CisJbXkgJGVuZCA9ICQzOworCSMgYXBwZW5kIGJlZ2lubmluZyBvZiB2YWx1ZSB0byByZXR2YWwKKwkkcmV0dmFsID0gIiRyZXR2YWwkYmVnaW4iOworCWlmIChkZWZpbmVkKCR2YXJpYWJsZXskdmFyfSkpIHsKKwkgICAgJHJldHZhbCA9ICIkcmV0dmFsJHZhcmlhYmxleyR2YXJ9IjsKKwl9IGVsc2UgeworCSAgICAjIHB1dCBiYWNrIHRoZSBvcmlnaW4gcGllY2UuCisJICAgICRyZXR2YWwgPSAiJHJldHZhbFwkXHskdmFyXH0iOworCX0KKwkkdmFsdWUgPSAkZW5kOworICAgIH0KKyAgICAkcmV0dmFsID0gIiRyZXR2YWwkdmFsdWUiOworCisgICAgIyByZW1vdmUgdGhlIHNwYWNlIGFkZGVkIGluIHRoZSBiZWdpbm5pbmcKKyAgICAkcmV0dmFsID1+IHMvIC8vOworCisgICAgcmV0dXJuICIkcmV0dmFsIgorfQorCiBzdWIgc2V0X3ZhbHVlIHsKICAgICBteSAoJGx2YWx1ZSwgJHJ2YWx1ZSkgPSBAXzsKIApAQCAtMjY5LDEwICszMDUsMjIgQEAKICAgICBpZiAoJHJ2YWx1ZSA9fiAvXlxzKiQvKSB7CiAJZGVsZXRlICRvcHR7JGx2YWx1ZX07CiAgICAgfSBlbHNlIHsKKwkkcnZhbHVlID0gcHJvY2Vzc192YXJpYWJsZXMoJHJ2YWx1ZSk7CiAJJG9wdHskbHZhbHVlfSA9ICRydmFsdWU7CiAgICAgfQogfQogCitzdWIgc2V0X3ZhcmlhYmxlIHsKKyAgICBteSAoJGx2YWx1ZSwgJHJ2YWx1ZSkgPSBAXzsKKworICAgIGlmICgkcnZhbHVlID1+IC9eXHMqJC8pIHsKKwlkZWxldGUgJHZhcmlhYmxleyRsdmFsdWV9OworICAgIH0gZWxzZSB7CisJJHJ2YWx1ZSA9IHByb2Nlc3NfdmFyaWFibGVzKCRydmFsdWUpOworCSR2YXJpYWJsZXskbHZhbHVlfSA9ICRydmFsdWU7CisgICAgfQorfQorCiBzdWIgcmVhZF9jb25maWcgewogICAgIG15ICgkY29uZmlnKSA9IEBfOwogCkBAIC0zODUsNiArNDMzLDIyIEBACiAJCSAgICAkcmVwZWF0c3skdmFsfSA9ICRyZXBlYXQ7CiAJCX0KIAkgICAgfQorCX0gZWxzaWYgKC9eXHMqKFtBLVpfXFtcXVxkXSspXHMqOj1ccyooLio/KVxzKiQvKSB7CisJICAgIG5leHQgaWYgKCRza2lwKTsKKworCSAgICBteSAkbHZhbHVlID0gJDE7CisJICAgIG15ICRydmFsdWUgPSAkMjsKKworCSAgICAjIHByb2Nlc3MgY29uZmlnIHZhcmlhYmxlcy4KKwkgICAgIyBDb25maWcgdmFyaWFibGVzIGFyZSBvbmx5IGFjdGl2ZSB3aGlsZSByZWFkaW5nIHRoZQorCSAgICAjIGNvbmZpZyBhbmQgY2FuIGJlIGRlZmluZWQgYW55d2hlcmUuIFRoZXkgYWxzbyBpZ25vcmUKKwkgICAgIyBURVNUX1NUQVJUIGFuZCBERUZBVUxUUywgYnV0IGFyZSBza2lwcGVkIGlmIHRoZXkgYXJlIGluCisJICAgICMgb24gb2YgdGhlc2Ugc2VjdGlvbnMgdGhhdCBoYXZlIFNLSVAgZGVmaW5lZC4KKwkgICAgIyBUaGUgc2F2ZSB2YXJpYWJsZSBjYW4gYmUKKwkgICAgIyBkZWZpbmVkIG11bHRpcGxlIHRpbWVzIGFuZCB0aGUgbmV3IG9uZSBzaW1wbHkgb3ZlcnJpZGVzCisJICAgICMgdGhlIHByZXZvdXMgb25lLgorCSAgICBzZXRfdmFyaWFibGUoJGx2YWx1ZSwgJHJ2YWx1ZSk7CisKIAl9IGVsc2UgewogCSAgICBkaWUgIiRuYW1lOiAkLjogR2FyYmFnZSBmb3VuZCBpbiBjb25maWdcbiRfIjsKIAl9CkBAIC04MzgsNiArOTAyLDcgQEAKIAogCWlmICgkc3RvcF90ZXN0X2FmdGVyID4gMCAmJiAhJGJvb3RlZCAmJiAhJGJ1ZykgewogCSAgICBpZiAodGltZSAtICRtb25pdG9yX3N0YXJ0ID4gJHN0b3BfdGVzdF9hZnRlcikgeworCQlkb3ByaW50ICJTVE9QX1RFU1RfQUZURVIgKCRzdG9wX3Rlc3RfYWZ0ZXIgc2Vjb25kcykgdGltZWQgb3V0XG4iOwogCQkkZG9uZSA9IDE7CiAJICAgIH0KIAl9CkBAIC05MDcsNyArOTcyLDcgQEAKICAgICByZXR1cm4gaWYgKCFkZWZpbmVkKCRwb3N0X2luc3RhbGwpKTsKIAogICAgIG15ICRjcF9wb3N0X2luc3RhbGwgPSAkcG9zdF9pbnN0YWxsOwotICAgICRjcF9wb3N0X2luc3RhbGwgPSBzL1wkS0VSTkVMX1ZFUlNJT04vJHZlcnNpb24vZzsKKyAgICAkY3BfcG9zdF9pbnN0YWxsID1+IHMvXCRLRVJORUxfVkVSU0lPTi8kdmVyc2lvbi9nOwogICAgIHJ1bl9jb21tYW5kICIkY3BfcG9zdF9pbnN0YWxsIiBvcgogCWRvZGllICJGYWlsZWQgdG8gcnVuIHBvc3QgaW5zdGFsbCI7CiB9CkBAIC0xMjQ3LDE0ICsxMzEyLDE0IEBACiAKICAgICBpZiAoJGZhaWxlZCkgewogCSRyZXN1bHQgPSAwOwotCi0JIyByZWJvb3QgdGhlIGJveCB0byBhIGdvb2Qga2VybmVsCi0JaWYgKCR0eXBlIG5lICJidWlsZCIpIHsKLQkgICAgYmlzZWN0X3JlYm9vdDsKLQl9CiAgICAgfSBlbHNlIHsKIAkkcmVzdWx0ID0gMTsKICAgICB9CisKKyAgICAjIHJlYm9vdCB0aGUgYm94IHRvIGEga2VybmVsIHdlIGNhbiBzc2ggdG8KKyAgICBpZiAoJHR5cGUgbmUgImJ1aWxkIikgeworCWJpc2VjdF9yZWJvb3Q7CisgICAgfQogICAgICRpbl9iaXNlY3QgPSAwOwogCiAgICAgcmV0dXJuICRyZXN1bHQ7CkBAIC0xNzYzLDYgKzE4MjgsMTQgQEAKICAgICBzdWNjZXNzICRpOwogfQogCitzdWIgcGF0Y2hjaGVja19yZWJvb3QgeworICAgIGRvcHJpbnQgIlJlYm9vdCBhbmQgc2xlZXAgJHBhdGNoY2hlY2tfc2xlZXBfdGltZSBzZWNvbmRzXG4iOworICAgIHJlYm9vdDsKKyAgICBzdGFydF9tb25pdG9yOworICAgIHdhaXRfZm9yX21vbml0b3IgJHBhdGNoY2hlY2tfc2xlZXBfdGltZTsKKyAgICBlbmRfbW9uaXRvcjsKK30KKwogc3ViIHBhdGNoY2hlY2sgewogICAgIG15ICgkaSkgPSBAXzsKIApAQCAtMTg1NCw2ICsxOTI3LDggQEAKIAllbmRfbW9uaXRvcjsKIAlyZXR1cm4gMCBpZiAoJGZhaWxlZCk7CiAKKwlwYXRjaGNoZWNrX3JlYm9vdDsKKwogICAgIH0KICAgICAkaW5fcGF0Y2hjaGVjayA9IDA7CiAgICAgc3VjY2VzcyAkaTsKQEAgLTE5NDQsNyArMjAxOSw3IEBACiAgICAgfQogfQogCi1zdWIgc2V0X3Rlc3Rfb3B0aW9uIHsKK3N1YiBfX3NldF90ZXN0X29wdGlvbiB7CiAgICAgbXkgKCRuYW1lLCAkaSkgPSBAXzsKIAogICAgIG15ICRvcHRpb24gPSAiJG5hbWVcWyRpXF0iOwpAQCAtMTk3MCw2ICsyMDQ1LDcyIEBACiAgICAgcmV0dXJuIHVuZGVmOwogfQogCitzdWIgZXZhbF9vcHRpb24geworICAgIG15ICgkb3B0aW9uLCAkaSkgPSBAXzsKKworICAgICMgQWRkIHNwYWNlIHRvIGV2YWx1YXRlIHRoZSBjaGFyYWN0ZXIgYmVmb3JlICQKKyAgICAkb3B0aW9uID0gIiAkb3B0aW9uIjsKKyAgICBteSAkcmV0dmFsID0gIiI7CisKKyAgICB3aGlsZSAoJG9wdGlvbiA9fiAvKC4qP1teXFxdKVwkXHsoLio/KVx9KC4qKS8pIHsKKwlteSAkc3RhcnQgPSAkMTsKKwlteSAkdmFyID0gJDI7CisJbXkgJGVuZCA9ICQzOworCisJIyBBcHBlbmQgYmVnaW5uaW5nIG9mIGxpbmUKKwkkcmV0dmFsID0gIiRyZXR2YWwkc3RhcnQiOworCisJIyBJZiB0aGUgaXRlcmF0aW9uIG9wdGlvbiBPUFRbJGldIGV4aXN0cywgdGhlbiB1c2UgdGhhdC4KKwkjIG90aGVyd2lzZSBzZWUgaWYgdGhlIGRlZmF1bHQgT1BUICh3aXRob3V0IFskaV0pIGV4aXN0cy4KKworCW15ICRvID0gIiR2YXJcWyRpXF0iOworCisJaWYgKGRlZmluZWQoJG9wdHskb30pKSB7CisJICAgICRvID0gJG9wdHskb307CisJICAgICRyZXR2YWwgPSAiJHJldHZhbCRvIjsKKwl9IGVsc2lmIChkZWZpbmVkKCRvcHR7JHZhcn0pKSB7CisJICAgICRvID0gJG9wdHskdmFyfTsKKwkgICAgJHJldHZhbCA9ICIkcmV0dmFsJG8iOworCX0gZWxzZSB7CisJICAgICRyZXR2YWwgPSAiJHJldHZhbFwkXHskdmFyXH0iOworCX0KKworCSRvcHRpb24gPSAkZW5kOworICAgIH0KKworICAgICRyZXR2YWwgPSAiJHJldHZhbCRvcHRpb24iOworCisgICAgJHJldHZhbCA9fiBzL14gLy87CisKKyAgICByZXR1cm4gJHJldHZhbDsKK30KKworc3ViIHNldF90ZXN0X29wdGlvbiB7CisgICAgbXkgKCRuYW1lLCAkaSkgPSBAXzsKKworICAgIG15ICRvcHRpb24gPSBfX3NldF90ZXN0X29wdGlvbigkbmFtZSwgJGkpOworICAgIHJldHVybiAkb3B0aW9uIGlmICghZGVmaW5lZCgkb3B0aW9uKSk7CisKKyAgICBteSAkcHJldiA9ICIiOworCisgICAgIyBTaW5jZSBhbiBvcHRpb24gY2FuIGV2YWx1YXRlIHRvIGFub3RoZXIgb3B0aW9uLAorICAgICMga2VlcCBpdGVyYXRpbmcgdW50aWwgd2UgZG8gbm90IGV2YWx1YXRlIGFueSBtb3JlCisgICAgIyBvcHRpb25zLgorICAgIG15ICRyID0gMDsKKyAgICB3aGlsZSAoJHByZXYgbmUgJG9wdGlvbikgeworCSMgQ2hlY2sgZm9yIHJlY3Vyc2l2ZSBldmFsdWF0aW9ucy4KKwkjIDEwMCBkZWVwIHNob3VsZCBiZSBtb3JlIHRoYW4gZW5vdWdoLgorCWlmICgkcisrID4gMTAwKSB7CisJICAgIGRpZSAiT3ZlciAxMDAgZXZhbHVhdGlvbnMgYWNjdXJyZWQgd2l0aCAkbmFtZVxuIiAuCisJCSJDaGVjayBmb3IgcmVjdXJzaXZlIHZhcmlhYmxlc1xuIjsKKwl9CisJJHByZXYgPSAkb3B0aW9uOworCSRvcHRpb24gPSBldmFsX29wdGlvbigkb3B0aW9uLCAkaSk7CisgICAgfQorCisgICAgcmV0dXJuICRvcHRpb247Cit9CisKICMgRmlyc3Qgd2UgbmVlZCB0byBkbyBpcyB0aGUgYnVpbGRzCiBmb3IgKG15ICRpID0gMTsgJGkgPD0gJG9wdHsiTlVNX1RFU1RTIn07ICRpKyspIHsKIApAQCAtMjAwMyw2ICsyMTQ0LDcgQEAKICAgICAkcG93ZXJvZmZfYWZ0ZXJfaGFsdCA9IHNldF90ZXN0X29wdGlvbigiUE9XRVJPRkZfQUZURVJfSEFMVCIsICRpKTsKICAgICAkc2xlZXBfdGltZSA9IHNldF90ZXN0X29wdGlvbigiU0xFRVBfVElNRSIsICRpKTsKICAgICAkYmlzZWN0X3NsZWVwX3RpbWUgPSBzZXRfdGVzdF9vcHRpb24oIkJJU0VDVF9TTEVFUF9USU1FIiwgJGkpOworICAgICRwYXRjaGNoZWNrX3NsZWVwX3RpbWUgPSBzZXRfdGVzdF9vcHRpb24oIlBBVENIQ0hFQ0tfU0xFRVBfVElNRSIsICRpKTsKICAgICAkYmlzZWN0X21hbnVhbCA9IHNldF90ZXN0X29wdGlvbigiQklTRUNUX01BTlVBTCIsICRpKTsKICAgICAkYmlzZWN0X3NraXAgPSBzZXRfdGVzdF9vcHRpb24oIkJJU0VDVF9TS0lQIiwgJGkpOwogICAgICRzdG9yZV9mYWlsdXJlcyA9IHNldF90ZXN0X29wdGlvbigiU1RPUkVfRkFJTFVSRVMiLCAkaSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL2t0ZXN0L3NhbXBsZS5jb25mIGIvdG9vbHMvdGVzdGluZy9rdGVzdC9zYW1wbGUuY29uZgppbmRleCA0YzVkNmJkLi40OGNiY2M4MCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9rdGVzdC9zYW1wbGUuY29uZgorKysgYi90b29scy90ZXN0aW5nL2t0ZXN0L3NhbXBsZS5jb25mCkBAIC03Myw2ICs3Myw5NSBAQAogIyBrdGVzdCB3aWxsIGZhaWwgdG8gZXhlY3V0ZSwgYW5kIG5vIHRlc3RzIHdpbGwgcnVuLgogIwogCisjIyMjIENvbmZpZyB2YXJpYWJsZXMgIyMjIworIworIyBUaGlzIGNvbmZpZyBmaWxlIGNhbiBhbHNvIGNvbnRhaW4gImNvbmZpZyB2YXJpYWJsZXMiLgorIyBUaGVzZSBhcmUgYXNzaWduZWQgd2l0aCAiOj0iIGluc3RlYWQgb2YgdGhlIGt0ZXN0IG9wdGlvbgorIyBhc3NpZ21lbnQgIj0iLgorIworIyBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGt0ZXN0IG9wdGlvbnMgYW5kIGNvbmZpZyB2YXJpYWJsZXMKKyMgaXMgdGhhdCBjb25maWcgdmFyaWFibGVzIGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzLAorIyB3aGVyZSBlYWNoIGluc3RhbmNlIHdpbGwgb3ZlcnJpZGUgdGhlIHByZXZpb3VzIGluc3RhbmNlLgorIyBBbmQgdGhhdCB0aGV5IG9ubHkgbGl2ZSBhdCB0aW1lIG9mIHByb2Nlc3NpbmcgdGhpcyBjb25maWcuCisjCisjIFRoZSBhZHZhbnRhZ2UgdG8gY29uZmlnIHZhcmlhYmxlcyBhcmUgdGhhdCB0aGV5IGNhbiBiZSB1c2VkCisjIGJ5IGFueSBvcHRpb24gb3IgYW55IG90aGVyIGNvbmZpZyB2YXJpYWJsZXMgdG8gZGVmaW5lIHRoaW5nCisjIHRoYXQgeW91IG1heSB1c2Ugb3ZlciBhbmQgb3ZlciBhZ2FpbiBpbiB0aGUgb3B0aW9ucy4KKyMKKyMgRm9yIGV4YW1wbGU6CisjCisjIFVTRVIgICAgICA6PSByb290CisjIFRBUkdFVCAgICA6PSBteWJveAorIyBURVNUX0NBU0UgOj0gc3NoICR7VVNFUn1AJHtUQVJHRVR9IC9wYXRoL3RvL215L3Rlc3QKKyMKKyMgVEVTVF9TVEFSVAorIyBNSU5fQ09ORklHID0gY29uZmlnMQorIyBURVNUID0gJHtURVNUX0NBU0V9CisjCisjIFRFU1RfU1RBUlQKKyMgTUlOX0NPTkZJRyA9IGNvbmZpZzIKKyMgVEVTVCA9ICR7VEVTVF9DQVNFfQorIworIyBURVNUX0NBU0UgOj0gc3NoICR7VVNFUn1AJHtUQVJHRVR9IC9wYXRoL3RvL215L3Rlc3QyCisjCisjIFRFU1RfU1RBUlQKKyMgTUlOX0NPTkZJRyA9IGNvbmZpZzEKKyMgVEVTVCA9ICR7VEVTVF9DQVNFfQorIworIyBURVNUX1NUQVJUCisjIE1JTl9DT05GSUcgPSBjb25maWcyCisjIFRFU1QgPSAke1RFU1RfQ0FTRX0KKyMKKyMgVEVTVF9ESVIgOj0gL2hvbWUvbWUvdGVzdAorIworIyBCVUlMRF9ESVIgPSAke1RFU1RfRElSfS9saW51eC5naXQKKyMgT1VUUFVUX0RJUiA9ICR7VEVTVF9ESVJ9L3Rlc3QKKyMKKyMgTm90ZSwgdGhlIGNvbmZpZyB2YXJpYWJsZXMgYXJlIGV2YWx1YXRlZCBpbW1lZGlhdGVseSwgdGh1cworIyB1cGRhdGluZyBUQVJHRVQgYWZ0ZXIgVEVTVF9DQVNFIGhhcyBiZWVuIGFzc2lnbmVkIGRvZXMgbm90aGluZworIyB0byBURVNUX0NBU0UuCisjCisjIEFzIHNob3duIGluIHRoZSBleGFtcGxlLCB0byBldmFsdWF0ZSBhIGNvbmZpZyB2YXJpYWJsZSwgeW91CisjIHVzZSB0aGUgJHtYfSBjb252ZW50aW9uLiBTaW1wbGUgJFggd2lsbCBub3Qgd29yay4KKyMKKyMgSWYgdGhlIGNvbmZpZyB2YXJpYWJsZSBkb2VzIG5vdCBleGlzdCwgdGhlICR7WH0gd2lsbCBub3QKKyMgYmUgZXZhbHVhdGVkLiBUaHVzOgorIworIyBNQUtFX0NNRCA9IFBBVEg9L215cGF0aDoke1BBVEh9IG1ha2UKKyMKKyMgSWYgUEFUSCBpcyBub3QgYSBjb25maWcgdmFyaWFibGUsIHRoZW4gdGhlICR7UEFUSH0gaW4KKyMgdGhlIE1BS0VfQ01EIG9wdGlvbiB3aWxsIGJlIGV2YWx1YXRlZCBieSB0aGUgc2hlbGwgd2hlbgorIyB0aGUgTUFLRV9DTUQgb3B0aW9uIGlzIHBhc3NlZCBpbnRvIHNoZWxsIHByb2Nlc3NpbmcuCisKKyMjIyMgVXNpbmcgb3B0aW9ucyBpbiBvdGhlciBvcHRpb25zICMjIyMKKyMKKyMgT3B0aW9ucyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBjb25maWcgZmlsZSBtYXkgYWxzbyBiZSB1c2VkCisjIGJ5IG90aGVyIG9wdGlvbnMuIEFsbCBvcHRpb25zIGFyZSBldmF1bGF0ZWQgYXQgdGltZSBvZgorIyB1c2UgKGV4Y2VwdCB0aGF0IGNvbmZpZyB2YXJpYWJsZXMgYXJlIGV2YWx1YXRlZCBhdCBjb25maWcKKyMgcHJvY2Vzc2luZyB0aW1lKS4KKyMKKyMgSWYgYW4ga3Rlc3Qgb3B0aW9uIGlzIHVzZWQgd2l0aGluIGFub3RoZXIgb3B0aW9uLCBpbnN0ZWFkIG9mCisjIHR5cGluZyBpdCBhZ2FpbiBpbiB0aGF0IG9wdGlvbiB5b3UgY2FuIHNpbXBseSB1c2UgdGhlIG9wdGlvbgorIyBqdXN0IGxpa2UgeW91IGNhbiBjb25maWcgdmFyaWFibGVzLgorIworIyBNQUNISU5FID0gbXlib3gKKyMKKyMgVEVTVCA9IHNzaCByb290QCR7TUFDSElORX0gL3BhdGgvdG8vdGVzdAorIworIyBUaGUgb3B0aW9uIHdpbGwgYmUgdXNlZCBwZXIgdGVzdCBjYXNlLiBUaHVzOgorIworIyBURVNUX1RZUEUgPSB0ZXN0CisjIFRFU1QgPSBzc2ggcm9vdEB7TUFDSElORX0KKyMKKyMgVEVTVF9TVEFSVAorIyBNQUNISU5FID0gYm94MQorIworIyBURVNUX1NUQVJUCisjIE1BQ0hJTkUgPSBib3gyCisjCisjIEZvciBib3RoIHRlc3QgY2FzZXMsIE1BQ0hJTkUgd2lsbCBiZSBldmFsdWF0ZWQgYXQgdGhlIHRpbWUKKyMgb2YgdGhlIHRlc3QgY2FzZS4gVGhlIGZpcnN0IHRlc3Qgd2lsbCBydW4gc3NoIHJvb3RAYm94MQorIyBhbmQgdGhlIHNlY29uZCB3aWxsIHJ1biBzc2ggcm9vdEBib3gyLgogCiAjIyMjIE1hbmRhdG9yeSBEZWZhdWx0IE9wdGlvbnMgIyMjIwogCkBAIC0zNjYsNiArNDU1LDEwIEBACiAjIChkZWZhdWx0IDYwKQogI0JJU0VDVF9TTEVFUF9USU1FID0gNjAKIAorIyBUaGUgdGltZSBpbiBiZXR3ZWVuIHBhdGNoIGNoZWNrcyB0byBzbGVlcCAoaW4gc2Vjb25kcykKKyMgKGRlZmF1bHQgNjApCisjUEFUQ0hDSEVDS19TTEVFUF9USU1FID0gNjAKKwogIyBSZWJvb3QgdGhlIHRhcmdldCBib3ggb24gZXJyb3IgKGRlZmF1bHQgMCkKICNSRUJPT1RfT05fRVJST1IgPSAwCiAKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2lvYXBpYy5jIGIvdmlydC9rdm0vaW9hcGljLmMKaW5kZXggMGI5ZGY4My4uOGRmMWNhMSAxMDA2NDQKLS0tIGEvdmlydC9rdm0vaW9hcGljLmMKKysrIGIvdmlydC9rdm0vaW9hcGljLmMKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCiAJaW9hcGljX2RlYnVnKCJkZXN0PSV4IGRlc3RfbW9kZT0leCBkZWxpdmVyeV9tb2RlPSV4ICIKIAkJICAgICAidmVjdG9yPSV4IHRyaWdfbW9kZT0leFxuIiwKLQkJICAgICBlbnRyeS0+ZmllbGRzLmRlc3QsIGVudHJ5LT5maWVsZHMuZGVzdF9tb2RlLAorCQkgICAgIGVudHJ5LT5maWVsZHMuZGVzdF9pZCwgZW50cnktPmZpZWxkcy5kZXN0X21vZGUsCiAJCSAgICAgZW50cnktPmZpZWxkcy5kZWxpdmVyeV9tb2RlLCBlbnRyeS0+ZmllbGRzLnZlY3RvciwKIAkJICAgICBlbnRyeS0+ZmllbGRzLnRyaWdfbW9kZSk7CiAKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCmluZGV4IDYzMzA2NTMuLjIyY2RiOTYgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmMKKysrIGIvdmlydC9rdm0va3ZtX21haW4uYwpAQCAtNDY3LDYgKzQ2Nyw3IEBACiAJCWlmICgha3ZtLT5idXNlc1tpXSkKIAkJCWdvdG8gb3V0X2VycjsKIAl9CisJc3Bpbl9sb2NrX2luaXQoJmt2bS0+bW11X2xvY2spOwogCiAJciA9IGt2bV9pbml0X21tdV9ub3RpZmllcihrdm0pOwogCWlmIChyKQpAQCAtNDc0LDcgKzQ3NSw2IEBACiAKIAlrdm0tPm1tID0gY3VycmVudC0+bW07CiAJYXRvbWljX2luYygma3ZtLT5tbS0+bW1fY291bnQpOwotCXNwaW5fbG9ja19pbml0KCZrdm0tPm1tdV9sb2NrKTsKIAlrdm1fZXZlbnRmZF9pbml0KGt2bSk7CiAJbXV0ZXhfaW5pdCgma3ZtLT5sb2NrKTsKIAltdXRleF9pbml0KCZrdm0tPmlycV9sb2NrKTsKQEAgLTY0OCw3ICs2NDgsMTAgQEAKIAkJZ290byBvdXQ7CiAJaWYgKG1lbS0+Z3Vlc3RfcGh5c19hZGRyICYgKFBBR0VfU0laRSAtIDEpKQogCQlnb3RvIG91dDsKLQlpZiAodXNlcl9hbGxvYyAmJiAobWVtLT51c2Vyc3BhY2VfYWRkciAmIChQQUdFX1NJWkUgLSAxKSkpCisJLyogV2UgY2FuIHJlYWQgdGhlIGd1ZXN0IG1lbW9yeSB3aXRoIF9feHh4X3VzZXIoKSBsYXRlciBvbi4gKi8KKwlpZiAodXNlcl9hbGxvYyAmJgorCSAgICAoKG1lbS0+dXNlcnNwYWNlX2FkZHIgJiAoUEFHRV9TSVpFIC0gMSkpIHx8CisJICAgICAhYWNjZXNzX29rKFZFUklGWV9XUklURSwgbWVtLT51c2Vyc3BhY2VfYWRkciwgbWVtLT5tZW1vcnlfc2l6ZSkpKQogCQlnb3RvIG91dDsKIAlpZiAobWVtLT5zbG90ID49IEtWTV9NRU1PUllfU0xPVFMgKyBLVk1fUFJJVkFURV9NRU1fU0xPVFMpCiAJCWdvdG8gb3V0OwpAQCAtOTk2LDIzICs5OTksNiBAQAogCXJldHVybiBzaXplOwogfQogCi1pbnQgbWVtc2xvdF9pZChzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbikKLXsKLQlpbnQgaTsKLQlzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cyA9IGt2bV9tZW1zbG90cyhrdm0pOwotCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QgPSBOVUxMOwotCi0JZm9yIChpID0gMDsgaSA8IHNsb3RzLT5ubWVtc2xvdHM7ICsraSkgewotCQltZW1zbG90ID0gJnNsb3RzLT5tZW1zbG90c1tpXTsKLQotCQlpZiAoZ2ZuID49IG1lbXNsb3QtPmJhc2VfZ2ZuCi0JCSAgICAmJiBnZm4gPCBtZW1zbG90LT5iYXNlX2dmbiArIG1lbXNsb3QtPm5wYWdlcykKLQkJCWJyZWFrOwotCX0KLQotCXJldHVybiBtZW1zbG90IC0gc2xvdHMtPm1lbXNsb3RzOwotfQotCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBnZm5fdG9faHZhX21hbnkoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwgZ2ZuX3QgZ2ZuLAogCQkJCSAgICAgZ2ZuX3QgKm5yX3BhZ2VzKQogewpAQCAtMTMwMCw3ICsxMjg2LDcgQEAKIAlhZGRyID0gZ2ZuX3RvX2h2YShrdm0sIGdmbik7CiAJaWYgKGt2bV9pc19lcnJvcl9odmEoYWRkcikpCiAJCXJldHVybiAtRUZBVUxUOwotCXIgPSBjb3B5X2Zyb21fdXNlcihkYXRhLCAodm9pZCBfX3VzZXIgKilhZGRyICsgb2Zmc2V0LCBsZW4pOworCXIgPSBfX2NvcHlfZnJvbV91c2VyKGRhdGEsICh2b2lkIF9fdXNlciAqKWFkZHIgKyBvZmZzZXQsIGxlbik7CiAJaWYgKHIpCiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiAwOwo=